From ea4085ab7448bb557a1558a25af164cf364e88d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Wed, 15 Nov 2023 23:54:08 +0100 Subject: [PATCH 001/102] frame-system: Add `last_runtime_upgrade_spec_version` (#2351) Adds a function for querying the last runtime upgrade spec version. This can be useful for when writing runtime level migrations to ensure that they are not executed multiple times. An example would be a session key migration. --------- Co-authored-by: Liam Aharon Co-authored-by: Oliver Tale-Yazdi --- Cargo.lock | 1 + substrate/frame/executive/src/lib.rs | 52 ++++++++++++++-------------- substrate/frame/system/Cargo.toml | 1 + substrate/frame/system/src/lib.rs | 19 ++++++++++ substrate/frame/system/src/tests.rs | 25 ++++++++++++- 5 files changed, 71 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0c374a90a18..7854042ddbc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5904,6 +5904,7 @@ version = "4.0.0-dev" dependencies = [ "cfg-if", "criterion 0.4.0", + "docify", "frame-support", "log", "parity-scale-codec", diff --git a/substrate/frame/executive/src/lib.rs b/substrate/frame/executive/src/lib.rs index e2c906c1bf6..dec1fe158bd 100644 --- a/substrate/frame/executive/src/lib.rs +++ b/substrate/frame/executive/src/lib.rs @@ -487,6 +487,12 @@ where let mut weight = Weight::zero(); if Self::runtime_upgraded() { weight = weight.saturating_add(Self::execute_on_runtime_upgrade()); + + frame_system::LastRuntimeUpgrade::::put( + frame_system::LastRuntimeUpgradeInfo::from( + >::get(), + ), + ); } >::initialize(block_number, parent_hash, digest); weight = weight.saturating_add(::note_finished_initialize(); } - /// Returns if the runtime was upgraded since the last time this function was called. + /// Returns if the runtime has been upgraded, based on [`frame_system::LastRuntimeUpgrade`]. fn runtime_upgraded() -> bool { let last = frame_system::LastRuntimeUpgrade::::get(); let current = >::get(); - if last.map(|v| v.was_upgraded(¤t)).unwrap_or(true) { - frame_system::LastRuntimeUpgrade::::put( - frame_system::LastRuntimeUpgradeInfo::from(current), - ); - true - } else { - false - } + last.map(|v| v.was_upgraded(¤t)).unwrap_or(true) } fn initial_checks(block: &Block) { @@ -755,7 +754,7 @@ mod tests { traits::{fungible, ConstU32, ConstU64, ConstU8, Currency}, weights::{ConstantMultiplier, IdentityFee, RuntimeDbWeight, Weight, WeightToFee}, }; - use frame_system::{ChainContext, LastRuntimeUpgradeInfo}; + use frame_system::{ChainContext, LastRuntimeUpgrade, LastRuntimeUpgradeInfo}; use pallet_balances::Call as BalancesCall; use pallet_transaction_payment::CurrencyAdapter; @@ -994,6 +993,9 @@ mod tests { sp_io::storage::set(TEST_KEY, "custom_upgrade".as_bytes()); sp_io::storage::set(CUSTOM_ON_RUNTIME_KEY, &true.encode()); System::deposit_event(frame_system::Event::CodeUpdated); + + assert_eq!(0, System::last_runtime_upgrade_spec_version()); + Weight::from_parts(100, 0) } } @@ -1356,17 +1358,13 @@ mod tests { new_test_ext(1).execute_with(|| { RuntimeVersionTestValues::mutate(|v| *v = Default::default()); // It should be added at genesis - assert!(frame_system::LastRuntimeUpgrade::::exists()); + assert!(LastRuntimeUpgrade::::exists()); assert!(!Executive::runtime_upgraded()); RuntimeVersionTestValues::mutate(|v| { *v = sp_version::RuntimeVersion { spec_version: 1, ..Default::default() } }); assert!(Executive::runtime_upgraded()); - assert_eq!( - Some(LastRuntimeUpgradeInfo { spec_version: 1.into(), spec_name: "".into() }), - frame_system::LastRuntimeUpgrade::::get(), - ); RuntimeVersionTestValues::mutate(|v| { *v = sp_version::RuntimeVersion { @@ -1376,27 +1374,18 @@ mod tests { } }); assert!(Executive::runtime_upgraded()); - assert_eq!( - Some(LastRuntimeUpgradeInfo { spec_version: 1.into(), spec_name: "test".into() }), - frame_system::LastRuntimeUpgrade::::get(), - ); RuntimeVersionTestValues::mutate(|v| { *v = sp_version::RuntimeVersion { - spec_version: 1, - spec_name: "test".into(), + spec_version: 0, impl_version: 2, ..Default::default() } }); assert!(!Executive::runtime_upgraded()); - frame_system::LastRuntimeUpgrade::::take(); + LastRuntimeUpgrade::::take(); assert!(Executive::runtime_upgraded()); - assert_eq!( - Some(LastRuntimeUpgradeInfo { spec_version: 1.into(), spec_name: "test".into() }), - frame_system::LastRuntimeUpgrade::::get(), - ); }) } @@ -1444,6 +1433,10 @@ mod tests { assert_eq!(&sp_io::storage::get(TEST_KEY).unwrap()[..], *b"module"); assert_eq!(sp_io::storage::get(CUSTOM_ON_RUNTIME_KEY).unwrap(), true.encode()); + assert_eq!( + Some(RuntimeVersionTestValues::get().into()), + LastRuntimeUpgrade::::get(), + ) }); } @@ -1519,6 +1512,9 @@ mod tests { #[test] fn all_weights_are_recorded_correctly() { + // Reset to get the correct new genesis below. + RuntimeVersionTestValues::take(); + new_test_ext(1).execute_with(|| { // Make sure `on_runtime_upgrade` is called for maximum complexity RuntimeVersionTestValues::mutate(|v| { @@ -1535,6 +1531,10 @@ mod tests { Digest::default(), )); + // Reset the last runtime upgrade info, to make the second call to `on_runtime_upgrade` + // succeed. + LastRuntimeUpgrade::::take(); + // All weights that show up in the `initialize_block_impl` let custom_runtime_upgrade_weight = CustomOnRuntimeUpgrade::on_runtime_upgrade(); let runtime_upgrade_weight = diff --git a/substrate/frame/system/Cargo.toml b/substrate/frame/system/Cargo.toml index f7733e312c3..b61b4d531e2 100644 --- a/substrate/frame/system/Cargo.toml +++ b/substrate/frame/system/Cargo.toml @@ -25,6 +25,7 @@ sp-runtime = { path = "../../primitives/runtime", default-features = false, feat sp-std = { path = "../../primitives/std", default-features = false} sp-version = { path = "../../primitives/version", default-features = false, features = ["serde"] } sp-weights = { path = "../../primitives/weights", default-features = false, features = ["serde"] } +docify = "0.2.0" [dev-dependencies] criterion = "0.4.0" diff --git a/substrate/frame/system/src/lib.rs b/substrate/frame/system/src/lib.rs index 0e394a11041..1b8dd6a9367 100644 --- a/substrate/frame/system/src/lib.rs +++ b/substrate/frame/system/src/lib.rs @@ -1094,6 +1094,25 @@ pub enum DecRefStatus { } impl Pallet { + /// Returns the `spec_version` of the last runtime upgrade. + /// + /// This function is useful for writing guarded runtime migrations in the runtime. A runtime + /// migration can use the `spec_version` to ensure that it isn't applied twice. This works + /// similar as the storage version for pallets. + /// + /// This functions returns the `spec_version` of the last runtime upgrade while executing the + /// runtime migrations + /// [`on_runtime_upgrade`](frame_support::traits::OnRuntimeUpgrade::on_runtime_upgrade) + /// function. After all migrations are executed, this will return the `spec_version` of the + /// current runtime until there is another runtime upgrade. + /// + /// Example: + #[doc = docify::embed!("src/tests.rs", last_runtime_upgrade_spec_version_usage)] + pub fn last_runtime_upgrade_spec_version() -> u32 { + LastRuntimeUpgrade::::get().map_or(0, |l| l.spec_version.0) + } + + /// Returns true if the given account exists. pub fn account_exists(who: &T::AccountId) -> bool { Account::::contains_key(who) } diff --git a/substrate/frame/system/src/tests.rs b/substrate/frame/system/src/tests.rs index 165df688b1c..6fbddaaf229 100644 --- a/substrate/frame/system/src/tests.rs +++ b/substrate/frame/system/src/tests.rs @@ -19,7 +19,7 @@ use crate::*; use frame_support::{ assert_noop, assert_ok, dispatch::{Pays, PostDispatchInfo, WithPostDispatchInfo}, - traits::WhitelistedStorageKeys, + traits::{OnRuntimeUpgrade, WhitelistedStorageKeys}, }; use std::collections::BTreeSet; @@ -773,3 +773,26 @@ pub fn from_actual_ref_time(ref_time: Option) -> PostDispatchInfo { pub fn from_post_weight_info(ref_time: Option, pays_fee: Pays) -> PostDispatchInfo { PostDispatchInfo { actual_weight: ref_time.map(|t| Weight::from_all(t)), pays_fee } } + +#[docify::export] +#[test] +fn last_runtime_upgrade_spec_version_usage() { + struct Migration; + + impl OnRuntimeUpgrade for Migration { + fn on_runtime_upgrade() -> Weight { + // Ensure to compare the spec version against some static version to prevent applying + // the same migration multiple times. + // + // `1337` here is the spec version of the runtime running on chain. If there is maybe + // a runtime upgrade in the pipeline of being applied, you should use the spec version + // of this upgrade. + if System::last_runtime_upgrade_spec_version() > 1337 { + return Weight::zero(); + } + + // Do the migration. + Weight::zero() + } + } +} -- GitLab From d4c426afd46f43b81115911657ccc0002a361ddb Mon Sep 17 00:00:00 2001 From: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> Date: Thu, 16 Nov 2023 12:59:06 +0100 Subject: [PATCH 002/102] [ci] Enable zombienet jobs in PRs (#2361) Since preparation for the merge queues needs more time I'm enabling zombienet jobs in PRs CI back. --- .gitlab/pipeline/publish.yml | 2 +- .gitlab/pipeline/zombienet/cumulus.yml | 2 +- .gitlab/pipeline/zombienet/polkadot.yml | 8 ++++---- .gitlab/pipeline/zombienet/substrate.yml | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.gitlab/pipeline/publish.yml b/.gitlab/pipeline/publish.yml index f2308c334e0..3cc2002cc1c 100644 --- a/.gitlab/pipeline/publish.yml +++ b/.gitlab/pipeline/publish.yml @@ -72,7 +72,7 @@ publish-rustdoc: IMAGE_NAME: "" # docker.io/paritypr/image_name script: # Exit if the job is not running in a merge queue - - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi + # - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi - $BUILDAH_COMMAND build --format=docker --build-arg VCS_REF="${CI_COMMIT_SHA}" diff --git a/.gitlab/pipeline/zombienet/cumulus.yml b/.gitlab/pipeline/zombienet/cumulus.yml index c8a1df004e3..3cac67c2966 100644 --- a/.gitlab/pipeline/zombienet/cumulus.yml +++ b/.gitlab/pipeline/zombienet/cumulus.yml @@ -4,7 +4,7 @@ .zombienet-before-script: before_script: # Exit if the job is not merge queue - - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi + # - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi - echo "Zombie-net Tests Config" - echo "${ZOMBIENET_IMAGE}" - echo "${POLKADOT_IMAGE}" diff --git a/.gitlab/pipeline/zombienet/polkadot.yml b/.gitlab/pipeline/zombienet/polkadot.yml index cc960557298..995dd982532 100644 --- a/.gitlab/pipeline/zombienet/polkadot.yml +++ b/.gitlab/pipeline/zombienet/polkadot.yml @@ -5,7 +5,7 @@ .zombienet-polkadot-common: before_script: # Exit if the job is not merge queue - - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi + # - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi - export BUILD_RELEASE_VERSION="$(cat ./artifacts/BUILD_RELEASE_VERSION)" # from build-linux-stable job - export DEBUG=zombie,zombie::network-node - export ZOMBIENET_INTEGRATION_TEST_IMAGE="${POLKADOT_IMAGE}":${PIPELINE_IMAGE_TAG} @@ -120,7 +120,7 @@ zombienet-polkadot-smoke-0001-parachains-smoke-test: - .zombienet-polkadot-common before_script: # Exit if the job is not merge queue - - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi + # - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi - export ZOMBIENET_INTEGRATION_TEST_IMAGE="${POLKADOT_IMAGE}":${PIPELINE_IMAGE_TAG} - export COL_IMAGE="${COLANDER_IMAGE}":${PIPELINE_IMAGE_TAG} - echo "Zombienet Tests Config" @@ -139,7 +139,7 @@ zombienet-polkadot-smoke-0002-parachains-parachains-upgrade-smoke: - .zombienet-polkadot-common before_script: # Exit if the job is not merge queue - - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi + # - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi - export ZOMBIENET_INTEGRATION_TEST_IMAGE="${POLKADOT_IMAGE}":${PIPELINE_IMAGE_TAG} - export CUMULUS_IMAGE="docker.io/paritypr/polkadot-parachain-debug:${DOCKER_IMAGES_VERSION}" - echo "Zombienet Tests Config" @@ -183,7 +183,7 @@ zombienet-polkadot-misc-0002-upgrade-node: artifacts: true before_script: # Exit if the job is not merge queue - - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi + # - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi - export ZOMBIENET_INTEGRATION_TEST_IMAGE="docker.io/parity/polkadot:latest" - echo "Overrided poladot image ${ZOMBIENET_INTEGRATION_TEST_IMAGE}" - export COL_IMAGE="${COLANDER_IMAGE}":${PIPELINE_IMAGE_TAG} diff --git a/.gitlab/pipeline/zombienet/substrate.yml b/.gitlab/pipeline/zombienet/substrate.yml index e627575a31a..6334e7db9a3 100644 --- a/.gitlab/pipeline/zombienet/substrate.yml +++ b/.gitlab/pipeline/zombienet/substrate.yml @@ -5,7 +5,7 @@ .zombienet-substrate-common: before_script: # Exit if the job is not merge queue - - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi + # - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi - echo "Zombienet Tests Config" - echo "${ZOMBIENET_IMAGE}" - echo "${GH_DIR}" -- GitLab From 02e8061bbadf51bce2f8c419c8645555532c7489 Mon Sep 17 00:00:00 2001 From: Adrian Catangiu Date: Thu, 16 Nov 2023 17:36:37 +0200 Subject: [PATCH 003/102] westend: remove SessionKeys migration already applied on-chain (#2363) Westend now successfully updated to `spec: 103000`, we **have to remove** the session keys migration before the next release as it doesn't gracefully handle reapplying it. --- polkadot/runtime/westend/src/lib.rs | 48 ----------------------------- 1 file changed, 48 deletions(-) diff --git a/polkadot/runtime/westend/src/lib.rs b/polkadot/runtime/westend/src/lib.rs index 2e8394b0ee4..4d537832ae3 100644 --- a/polkadot/runtime/westend/src/lib.rs +++ b/polkadot/runtime/westend/src/lib.rs @@ -425,17 +425,6 @@ parameter_types! { pub const Offset: BlockNumber = 0; } -impl_opaque_keys! { - pub struct OldSessionKeys { - pub grandpa: Grandpa, - pub babe: Babe, - pub im_online: ImOnline, - pub para_validator: Initializer, - pub para_assignment: ParaSessionInfo, - pub authority_discovery: AuthorityDiscovery, - } -} - impl_opaque_keys! { pub struct SessionKeys { pub grandpa: Grandpa, @@ -448,32 +437,6 @@ impl_opaque_keys! { } } -// remove this when removing `OldSessionKeys` -fn transform_session_keys(v: AccountId, old: OldSessionKeys) -> SessionKeys { - SessionKeys { - grandpa: old.grandpa, - babe: old.babe, - im_online: old.im_online, - para_validator: old.para_validator, - para_assignment: old.para_assignment, - authority_discovery: old.authority_discovery, - beefy: { - // From Session::upgrade_keys(): - // - // Care should be taken that the raw versions of the - // added keys are unique for every `ValidatorId, KeyTypeId` combination. - // This is an invariant that the session pallet typically maintains internally. - // - // So, produce a dummy value that's unique for the `ValidatorId, KeyTypeId` combination. - let mut id: BeefyId = sp_application_crypto::ecdsa::Public::from_raw([0u8; 33]).into(); - let id_raw: &mut [u8] = id.as_mut(); - id_raw[1..33].copy_from_slice(v.as_ref()); - id_raw[0..4].copy_from_slice(b"beef"); - id - }, - } -} - impl pallet_session::Config for Runtime { type RuntimeEvent = RuntimeEvent; type ValidatorId = AccountId; @@ -1560,16 +1523,6 @@ pub type Migrations = migrations::Unreleased; pub mod migrations { use super::*; - /// Upgrade Session keys to include BEEFY key. - /// When this is removed, should also remove `OldSessionKeys`. - pub struct UpgradeSessionKeys; - impl frame_support::traits::OnRuntimeUpgrade for UpgradeSessionKeys { - fn on_runtime_upgrade() -> Weight { - Session::upgrade_keys::(transform_session_keys); - Perbill::from_percent(50) * BlockWeights::get().max_block - } - } - /// Unreleased migrations. Add new ones here: pub type Unreleased = ( pallet_im_online::migration::v1::Migration, @@ -1578,7 +1531,6 @@ pub mod migrations { assigned_slots::migration::v1::MigrateToV1, parachains_scheduler::migration::v1::MigrateToV1, parachains_configuration::migration::v8::MigrateToV8, - UpgradeSessionKeys, parachains_configuration::migration::v9::MigrateToV9, paras_registrar::migration::MigrateToV1, pallet_nomination_pools::migration::versioned_migrations::V5toV6, -- GitLab From 5e98803f032a7c0ac2d8fae6b0cfc76417917e2a Mon Sep 17 00:00:00 2001 From: ordian Date: Thu, 16 Nov 2023 21:13:04 +0100 Subject: [PATCH 004/102] implementers-guide: update github link (#2368) cc @joepetrowski --- polkadot/roadmap/implementers-guide/book.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/polkadot/roadmap/implementers-guide/book.toml b/polkadot/roadmap/implementers-guide/book.toml index 1e6680f6f4b..f677c0d59c0 100644 --- a/polkadot/roadmap/implementers-guide/book.toml +++ b/polkadot/roadmap/implementers-guide/book.toml @@ -17,6 +17,6 @@ renderer = ["html"] additional-css = ["last-changed.css"] additional-js = ["mermaid.min.js", "mermaid-init.js"] # Repository URL used in the last-changed link. -git-repository-url = "https://github.com/paritytech/polkadot" +git-repository-url = "https://github.com/paritytech/polkadot-sdk" [output.linkcheck] -- GitLab From 4ac2db8095e55a68f9b3d843d4e4689759fcc9d5 Mon Sep 17 00:00:00 2001 From: joe petrowski <25483142+joepetrowski@users.noreply.github.com> Date: Fri, 17 Nov 2023 00:02:56 +0100 Subject: [PATCH 005/102] Fix Typo: `PalletXcmExtrinsicsBenchmark` (#2354) Missed in https://github.com/paritytech/polkadot-sdk/pull/1672 --- .../parachains/runtimes/assets/asset-hub-kusama/src/lib.rs | 6 +++--- .../runtimes/assets/asset-hub-polkadot/src/lib.rs | 6 +++--- .../parachains/runtimes/assets/asset-hub-rococo/src/lib.rs | 6 +++--- .../parachains/runtimes/assets/asset-hub-westend/src/lib.rs | 6 +++--- .../runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs | 6 +++--- .../runtimes/bridge-hubs/bridge-hub-polkadot/src/lib.rs | 6 +++--- .../runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs | 6 +++--- .../runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs | 6 +++--- .../runtimes/collectives/collectives-polkadot/src/lib.rs | 6 +++--- .../runtimes/contracts/contracts-rococo/src/lib.rs | 6 +++--- polkadot/runtime/rococo/src/lib.rs | 6 +++--- polkadot/runtime/westend/src/lib.rs | 6 +++--- 12 files changed, 36 insertions(+), 36 deletions(-) diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/lib.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/lib.rs index e4ed77884bf..af0116d7014 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/lib.rs +++ b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/lib.rs @@ -962,7 +962,7 @@ mod benches { [cumulus_pallet_xcmp_queue, XcmpQueue] [cumulus_pallet_dmp_queue, DmpQueue] // XCM - [pallet_xcm, PalletXcmExtrinsiscsBenchmark::] + [pallet_xcm, PalletXcmExtrinsicsBenchmark::] // NOTE: Make sure you point to the individual modules below. [pallet_xcm_benchmarks::fungible, XcmBalances] [pallet_xcm_benchmarks::generic, XcmGeneric] @@ -1200,7 +1200,7 @@ impl_runtime_apis! { use frame_support::traits::StorageInfoTrait; use frame_system_benchmarking::Pallet as SystemBench; use cumulus_pallet_session_benchmarking::Pallet as SessionBench; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; // This is defined once again in dispatch_benchmark, because list_benchmarks! // and add_benchmarks! are macros exported by define_benchmarks! macros and those types @@ -1244,7 +1244,7 @@ impl_runtime_apis! { use cumulus_pallet_session_benchmarking::Pallet as SessionBench; impl cumulus_pallet_session_benchmarking::Config for Runtime {} - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; impl pallet_xcm::benchmarking::Config for Runtime { fn reachable_dest() -> Option { Some(Parent.into()) diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/lib.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/lib.rs index 6f853b6f56e..1b7ef10f485 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/lib.rs +++ b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/lib.rs @@ -868,7 +868,7 @@ mod benches { [cumulus_pallet_xcmp_queue, XcmpQueue] [cumulus_pallet_dmp_queue, DmpQueue] // XCM - [pallet_xcm, PalletXcmExtrinsiscsBenchmark::] + [pallet_xcm, PalletXcmExtrinsicsBenchmark::] // NOTE: Make sure you point to the individual modules below. [pallet_xcm_benchmarks::fungible, XcmBalances] [pallet_xcm_benchmarks::generic, XcmGeneric] @@ -1082,7 +1082,7 @@ impl_runtime_apis! { use frame_support::traits::StorageInfoTrait; use frame_system_benchmarking::Pallet as SystemBench; use cumulus_pallet_session_benchmarking::Pallet as SessionBench; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; // This is defined once again in dispatch_benchmark, because list_benchmarks! // and add_benchmarks! are macros exported by define_benchmarks! macros and those types @@ -1125,7 +1125,7 @@ impl_runtime_apis! { use cumulus_pallet_session_benchmarking::Pallet as SessionBench; impl cumulus_pallet_session_benchmarking::Config for Runtime {} - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; impl pallet_xcm::benchmarking::Config for Runtime { fn reachable_dest() -> Option { Some(Parent.into()) diff --git a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs index 4492971566b..4b4ae61a3e8 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs +++ b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs @@ -996,7 +996,7 @@ mod benches { [cumulus_pallet_xcmp_queue, XcmpQueue] [pallet_xcm_bridge_hub_router, ToWestend] // XCM - [pallet_xcm, PalletXcmExtrinsiscsBenchmark::] + [pallet_xcm, PalletXcmExtrinsicsBenchmark::] // NOTE: Make sure you point to the individual modules below. [pallet_xcm_benchmarks::fungible, XcmBalances] [pallet_xcm_benchmarks::generic, XcmGeneric] @@ -1234,7 +1234,7 @@ impl_runtime_apis! { use frame_support::traits::StorageInfoTrait; use frame_system_benchmarking::Pallet as SystemBench; use cumulus_pallet_session_benchmarking::Pallet as SessionBench; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; use pallet_xcm_bridge_hub_router::benchmarking::Pallet as XcmBridgeHubRouterBench; // This is defined once again in dispatch_benchmark, because list_benchmarks! @@ -1286,7 +1286,7 @@ impl_runtime_apis! { Config as XcmBridgeHubRouterConfig, }; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; impl pallet_xcm::benchmarking::Config for Runtime { fn reachable_dest() -> Option { Some(Parent.into()) diff --git a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs index cd17b9d86f7..d52edfe479c 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs +++ b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs @@ -1085,7 +1085,7 @@ mod benches { [cumulus_pallet_dmp_queue, DmpQueue] [pallet_xcm_bridge_hub_router, ToRococo] // XCM - [pallet_xcm, PalletXcmExtrinsiscsBenchmark::] + [pallet_xcm, PalletXcmExtrinsicsBenchmark::] // NOTE: Make sure you point to the individual modules below. [pallet_xcm_benchmarks::fungible, XcmBalances] [pallet_xcm_benchmarks::generic, XcmGeneric] @@ -1369,7 +1369,7 @@ impl_runtime_apis! { use frame_support::traits::StorageInfoTrait; use frame_system_benchmarking::Pallet as SystemBench; use cumulus_pallet_session_benchmarking::Pallet as SessionBench; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; use pallet_xcm_bridge_hub_router::benchmarking::Pallet as XcmBridgeHubRouterBench; // This is defined once again in dispatch_benchmark, because list_benchmarks! @@ -1416,7 +1416,7 @@ impl_runtime_apis! { use cumulus_pallet_session_benchmarking::Pallet as SessionBench; impl cumulus_pallet_session_benchmarking::Config for Runtime {} - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; impl pallet_xcm::benchmarking::Config for Runtime { fn reachable_dest() -> Option { Some(Parent.into()) diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs index b3750700084..d2db0340790 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs @@ -490,7 +490,7 @@ mod benches { [cumulus_pallet_xcmp_queue, XcmpQueue] [cumulus_pallet_dmp_queue, DmpQueue] // XCM - [pallet_xcm, PalletXcmExtrinsiscsBenchmark::] + [pallet_xcm, PalletXcmExtrinsicsBenchmark::] // NOTE: Make sure you point to the individual modules below. [pallet_xcm_benchmarks::fungible, XcmBalances] [pallet_xcm_benchmarks::generic, XcmGeneric] @@ -670,7 +670,7 @@ impl_runtime_apis! { use frame_support::traits::StorageInfoTrait; use frame_system_benchmarking::Pallet as SystemBench; use cumulus_pallet_session_benchmarking::Pallet as SessionBench; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; // This is defined once again in dispatch_benchmark, because list_benchmarks! // and add_benchmarks! are macros exported by define_benchmarks! macros and those types @@ -706,7 +706,7 @@ impl_runtime_apis! { use cumulus_pallet_session_benchmarking::Pallet as SessionBench; impl cumulus_pallet_session_benchmarking::Config for Runtime {} - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; impl pallet_xcm::benchmarking::Config for Runtime { fn reachable_dest() -> Option { Some(Parent.into()) diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/lib.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/lib.rs index 841bb4ee861..02f05a8bb87 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/lib.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/lib.rs @@ -491,7 +491,7 @@ mod benches { [cumulus_pallet_xcmp_queue, XcmpQueue] [cumulus_pallet_dmp_queue, DmpQueue] // XCM - [pallet_xcm, PalletXcmExtrinsiscsBenchmark::] + [pallet_xcm, PalletXcmExtrinsicsBenchmark::] // NOTE: Make sure you point to the individual modules below. [pallet_xcm_benchmarks::fungible, XcmBalances] [pallet_xcm_benchmarks::generic, XcmGeneric] @@ -671,7 +671,7 @@ impl_runtime_apis! { use frame_support::traits::StorageInfoTrait; use frame_system_benchmarking::Pallet as SystemBench; use cumulus_pallet_session_benchmarking::Pallet as SessionBench; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; // This is defined once again in dispatch_benchmark, because list_benchmarks! // and add_benchmarks! are macros exported by define_benchmarks! macros and those types @@ -707,7 +707,7 @@ impl_runtime_apis! { use cumulus_pallet_session_benchmarking::Pallet as SessionBench; impl cumulus_pallet_session_benchmarking::Config for Runtime {} - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; impl pallet_xcm::benchmarking::Config for Runtime { fn reachable_dest() -> Option { Some(Parent.into()) diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs index b8fc2fffc88..5a44ccbb75a 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs @@ -554,7 +554,7 @@ mod benches { [cumulus_pallet_xcmp_queue, XcmpQueue] [cumulus_pallet_dmp_queue, DmpQueue] // XCM - [pallet_xcm, PalletXcmExtrinsiscsBenchmark::] + [pallet_xcm, PalletXcmExtrinsicsBenchmark::] // NOTE: Make sure you point to the individual modules below. [pallet_xcm_benchmarks::fungible, XcmBalances] [pallet_xcm_benchmarks::generic, XcmGeneric] @@ -784,7 +784,7 @@ impl_runtime_apis! { use frame_support::traits::StorageInfoTrait; use frame_system_benchmarking::Pallet as SystemBench; use cumulus_pallet_session_benchmarking::Pallet as SessionBench; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; // This is defined once again in dispatch_benchmark, because list_benchmarks! // and add_benchmarks! are macros exported by define_benchmarks! macros and those types @@ -826,7 +826,7 @@ impl_runtime_apis! { use cumulus_pallet_session_benchmarking::Pallet as SessionBench; impl cumulus_pallet_session_benchmarking::Config for Runtime {} - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; impl pallet_xcm::benchmarking::Config for Runtime { fn reachable_dest() -> Option { Some(Parent.into()) diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs index 9e8fd84e712..d1d2b4a4159 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs @@ -544,7 +544,7 @@ mod benches { [pallet_collator_selection, CollatorSelection] [cumulus_pallet_xcmp_queue, XcmpQueue] // XCM - [pallet_xcm, PalletXcmExtrinsiscsBenchmark::] + [pallet_xcm, PalletXcmExtrinsicsBenchmark::] // NOTE: Make sure you point to the individual modules below. [pallet_xcm_benchmarks::fungible, XcmBalances] [pallet_xcm_benchmarks::generic, XcmGeneric] @@ -772,7 +772,7 @@ impl_runtime_apis! { use frame_support::traits::StorageInfoTrait; use frame_system_benchmarking::Pallet as SystemBench; use cumulus_pallet_session_benchmarking::Pallet as SessionBench; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; // This is defined once again in dispatch_benchmark, because list_benchmarks! // and add_benchmarks! are macros exported by define_benchmarks! macros and those types @@ -814,7 +814,7 @@ impl_runtime_apis! { use cumulus_pallet_session_benchmarking::Pallet as SessionBench; impl cumulus_pallet_session_benchmarking::Config for Runtime {} - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; impl pallet_xcm::benchmarking::Config for Runtime { fn reachable_dest() -> Option { Some(Parent.into()) diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs index 206f4614060..c3d671c9085 100644 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs +++ b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs @@ -751,7 +751,7 @@ mod benches { [cumulus_pallet_dmp_queue, DmpQueue] [pallet_alliance, Alliance] [pallet_collective, AllianceMotion] - [pallet_xcm, PalletXcmExtrinsiscsBenchmark::] + [pallet_xcm, PalletXcmExtrinsicsBenchmark::] [pallet_preimage, Preimage] [pallet_scheduler, Scheduler] [pallet_referenda, FellowshipReferenda] @@ -939,7 +939,7 @@ impl_runtime_apis! { use frame_support::traits::StorageInfoTrait; use frame_system_benchmarking::Pallet as SystemBench; use cumulus_pallet_session_benchmarking::Pallet as SessionBench; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; let mut list = Vec::::new(); list_benchmarks!(list, extra); @@ -969,7 +969,7 @@ impl_runtime_apis! { use cumulus_pallet_session_benchmarking::Pallet as SessionBench; impl cumulus_pallet_session_benchmarking::Config for Runtime {} - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; impl pallet_xcm::benchmarking::Config for Runtime { fn reachable_dest() -> Option { Some(Parent.into()) diff --git a/cumulus/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/cumulus/parachains/runtimes/contracts/contracts-rococo/src/lib.rs index 4c66e780ba9..5b828bad0c7 100644 --- a/cumulus/parachains/runtimes/contracts/contracts-rococo/src/lib.rs +++ b/cumulus/parachains/runtimes/contracts/contracts-rococo/src/lib.rs @@ -433,7 +433,7 @@ mod benches { [pallet_timestamp, Timestamp] [pallet_collator_selection, CollatorSelection] [pallet_contracts, Contracts] - [pallet_xcm, PalletXcmExtrinsiscsBenchmark::] + [pallet_xcm, PalletXcmExtrinsicsBenchmark::] ); } @@ -678,7 +678,7 @@ impl_runtime_apis! { use frame_support::traits::StorageInfoTrait; use frame_system_benchmarking::Pallet as SystemBench; use cumulus_pallet_session_benchmarking::Pallet as SessionBench; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; let mut list = Vec::::new(); list_benchmarks!(list, extra); @@ -709,7 +709,7 @@ impl_runtime_apis! { impl cumulus_pallet_session_benchmarking::Config for Runtime {} use xcm::latest::prelude::*; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; impl pallet_xcm::benchmarking::Config for Runtime { fn reachable_dest() -> Option { Some(Parent.into()) diff --git a/polkadot/runtime/rococo/src/lib.rs b/polkadot/runtime/rococo/src/lib.rs index 277c9981dab..675e0a20b2b 100644 --- a/polkadot/runtime/rococo/src/lib.rs +++ b/polkadot/runtime/rococo/src/lib.rs @@ -1617,7 +1617,7 @@ mod benches { [pallet_asset_rate, AssetRate] [pallet_whitelist, Whitelist] // XCM - [pallet_xcm, PalletXcmExtrinsiscsBenchmark::] + [pallet_xcm, PalletXcmExtrinsicsBenchmark::] [pallet_xcm_benchmarks::fungible, pallet_xcm_benchmarks::fungible::Pallet::] [pallet_xcm_benchmarks::generic, pallet_xcm_benchmarks::generic::Pallet::] ); @@ -2096,7 +2096,7 @@ sp_api::impl_runtime_apis! { use frame_system_benchmarking::Pallet as SystemBench; use frame_benchmarking::baseline::Pallet as Baseline; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; let mut list = Vec::::new(); list_benchmarks!(list, extra); @@ -2115,7 +2115,7 @@ sp_api::impl_runtime_apis! { use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError}; use frame_system_benchmarking::Pallet as SystemBench; use frame_benchmarking::baseline::Pallet as Baseline; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; use sp_storage::TrackedStorageKey; use xcm::latest::prelude::*; use xcm_config::{ diff --git a/polkadot/runtime/westend/src/lib.rs b/polkadot/runtime/westend/src/lib.rs index 4d537832ae3..16a0b112a0b 100644 --- a/polkadot/runtime/westend/src/lib.rs +++ b/polkadot/runtime/westend/src/lib.rs @@ -1606,7 +1606,7 @@ mod benches { [pallet_whitelist, Whitelist] [pallet_asset_rate, AssetRate] // XCM - [pallet_xcm, PalletXcmExtrinsiscsBenchmark::] + [pallet_xcm, PalletXcmExtrinsicsBenchmark::] // NOTE: Make sure you point to the individual modules below. [pallet_xcm_benchmarks::fungible, XcmBalances] [pallet_xcm_benchmarks::generic, XcmGeneric] @@ -2129,7 +2129,7 @@ sp_api::impl_runtime_apis! { use pallet_session_benchmarking::Pallet as SessionBench; use pallet_offences_benchmarking::Pallet as OffencesBench; use pallet_election_provider_support_benchmarking::Pallet as ElectionProviderBench; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; use frame_system_benchmarking::Pallet as SystemBench; use pallet_nomination_pools_benchmarking::Pallet as NominationPoolsBench; @@ -2157,7 +2157,7 @@ sp_api::impl_runtime_apis! { use pallet_session_benchmarking::Pallet as SessionBench; use pallet_offences_benchmarking::Pallet as OffencesBench; use pallet_election_provider_support_benchmarking::Pallet as ElectionProviderBench; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsiscsBenchmark; + use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; use frame_system_benchmarking::Pallet as SystemBench; use pallet_nomination_pools_benchmarking::Pallet as NominationPoolsBench; -- GitLab From 596088a273eff13fbefe6fa20a5fef6507b329cb Mon Sep 17 00:00:00 2001 From: Bruno Galvao Date: Fri, 17 Nov 2023 01:31:31 -0500 Subject: [PATCH 006/102] add pallet nomination-pools versioned migration to kitchensink (#2167) The versioned migrations are already there in pallet nomination-pools: https://github.com/paritytech/polkadot-sdk/blob/f6ee4781f633f0f89598f7b230595afe401da8dc/substrate/frame/nomination-pools/src/migration.rs#L27-L48 Just updating the kitchensink runtime to point to them. This is also nice because it points the dev to an example of how to use `VersionedMigration`. --- polkadot/runtime/westend/src/lib.rs | 4 ++-- substrate/bin/node/runtime/src/lib.rs | 5 +++-- substrate/frame/nomination-pools/src/migration.rs | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/polkadot/runtime/westend/src/lib.rs b/polkadot/runtime/westend/src/lib.rs index 16a0b112a0b..29183fdfe00 100644 --- a/polkadot/runtime/westend/src/lib.rs +++ b/polkadot/runtime/westend/src/lib.rs @@ -1533,9 +1533,9 @@ pub mod migrations { parachains_configuration::migration::v8::MigrateToV8, parachains_configuration::migration::v9::MigrateToV9, paras_registrar::migration::MigrateToV1, - pallet_nomination_pools::migration::versioned_migrations::V5toV6, + pallet_nomination_pools::migration::versioned::V5toV6, pallet_referenda::migration::v1::MigrateV0ToV1, - pallet_nomination_pools::migration::versioned_migrations::V6ToV7, + pallet_nomination_pools::migration::versioned::V6ToV7, pallet_grandpa::migrations::MigrateV4ToV5, parachains_configuration::migration::v10::MigrateToV10, ); diff --git a/substrate/bin/node/runtime/src/lib.rs b/substrate/bin/node/runtime/src/lib.rs index 90946b71311..d7beb29becf 100644 --- a/substrate/bin/node/runtime/src/lib.rs +++ b/substrate/bin/node/runtime/src/lib.rs @@ -2194,9 +2194,10 @@ pub type Executive = frame_executive::Executive< >; // All migrations executed on runtime upgrade as a nested tuple of types implementing -// `OnRuntimeUpgrade`. +// `OnRuntimeUpgrade`. Note: These are examples and do not need to be run directly +// after the genesis block. type Migrations = ( - pallet_nomination_pools::migration::v2::MigrateToV2, + pallet_nomination_pools::migration::versioned::V6ToV7, pallet_alliance::migration::Migration, pallet_contracts::Migration, ); diff --git a/substrate/frame/nomination-pools/src/migration.rs b/substrate/frame/nomination-pools/src/migration.rs index eef2a976f1a..3d68fee1dca 100644 --- a/substrate/frame/nomination-pools/src/migration.rs +++ b/substrate/frame/nomination-pools/src/migration.rs @@ -24,7 +24,7 @@ use sp_std::{collections::btree_map::BTreeMap, vec::Vec}; use sp_runtime::TryRuntimeError; /// Exports for versioned migration `type`s for this pallet. -pub mod versioned_migrations { +pub mod versioned { use super::*; /// Migration V6 to V7 wrapped in a [`frame_support::migrations::VersionedMigration`], ensuring -- GitLab From b85c64aa5fa945027c7a2bfe1788e09309febc7a Mon Sep 17 00:00:00 2001 From: cuteolaf Date: Thu, 16 Nov 2023 23:20:09 -0800 Subject: [PATCH 007/102] fix typo (#2377) --- substrate/frame/proxy/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/substrate/frame/proxy/README.md b/substrate/frame/proxy/README.md index bfe26d9aefb..c52a881c590 100644 --- a/substrate/frame/proxy/README.md +++ b/substrate/frame/proxy/README.md @@ -2,7 +2,7 @@ A module allowing accounts to give permission to other accounts to dispatch types of calls from their signed origin. -The accounts to which permission is delegated may be requied to announce the action that they +The accounts to which permission is delegated may be required to announce the action that they wish to execute some duration prior to execution happens. In this case, the target account may reject the announcement and in doing so, veto the execution. -- GitLab From 20723ea80e0f442487764a9bcde1d4c989958e56 Mon Sep 17 00:00:00 2001 From: Javier Viola Date: Fri, 17 Nov 2023 08:21:42 -0300 Subject: [PATCH 008/102] bump zombienet version `v1.3.80` (#2376) New release includes logic to move all jobs to `spot instances`. Thx! --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1dc483004f2..b485ca3317e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -30,7 +30,7 @@ variables: RUSTY_CACHIER_COMPRESSION_METHOD: zstd NEXTEST_FAILURE_OUTPUT: immediate-final NEXTEST_SUCCESS_OUTPUT: final - ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.3.79" + ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.3.80" DOCKER_IMAGES_VERSION: "${CI_COMMIT_SHA}" default: -- GitLab From 2e001de9346257321a8e2447d22e86d7c71a917a Mon Sep 17 00:00:00 2001 From: Ankan <10196091+Ank4n@users.noreply.github.com> Date: Fri, 17 Nov 2023 13:48:31 +0100 Subject: [PATCH 009/102] [NPoS] Check if staker is exposed in paged exposure storage entries (#2369) Addresses a bug caused by https://github.com/paritytech/polkadot-sdk/pull/1189. The changes are still not released yet, so would like to push the fix soon so it can go together with the release of the above PR. `fast_unstake` checks if a staker is exposed in an era. However, this fn is still returning whether the staker is exposed based on the old storage item. This PR fixes that by looking in both old and new exposure storages. Also adds some integrity tests for paged exposures. --- substrate/frame/staking/src/pallet/impls.rs | 74 ++++++++++++++++++++- substrate/frame/staking/src/tests.rs | 16 +++++ 2 files changed, 89 insertions(+), 1 deletion(-) diff --git a/substrate/frame/staking/src/pallet/impls.rs b/substrate/frame/staking/src/pallet/impls.rs index 9c36c94b87b..40f30735258 100644 --- a/substrate/frame/staking/src/pallet/impls.rs +++ b/substrate/frame/staking/src/pallet/impls.rs @@ -794,7 +794,7 @@ impl Pallet { stash: T::AccountId, exposure: Exposure>, ) { - >::insert(¤t_era, &stash, &exposure); + EraInfo::::set_exposure(current_era, &stash, exposure); } #[cfg(feature = "runtime-benchmarks")] @@ -1745,9 +1745,16 @@ impl StakingInterface for Pallet { } fn is_exposed_in_era(who: &Self::AccountId, era: &EraIndex) -> bool { + // look in the non paged exposures + // FIXME: Can be cleaned up once non paged exposures are cleared (https://github.com/paritytech/polkadot-sdk/issues/433) ErasStakers::::iter_prefix(era).any(|(validator, exposures)| { validator == *who || exposures.others.iter().any(|i| i.who == *who) }) + || + // look in the paged exposures + ErasStakersPaged::::iter_prefix((era,)).any(|((validator, _), exposure_page)| { + validator == *who || exposure_page.others.iter().any(|i| i.who == *who) + }) } fn status( who: &Self::AccountId, @@ -1812,6 +1819,7 @@ impl Pallet { Self::check_nominators()?; Self::check_exposures()?; + Self::check_paged_exposures()?; Self::check_ledgers()?; Self::check_count() } @@ -1860,6 +1868,70 @@ impl Pallet { .collect::>() } + fn check_paged_exposures() -> Result<(), TryRuntimeError> { + use sp_staking::PagedExposureMetadata; + use sp_std::collections::btree_map::BTreeMap; + + // Sanity check for the paged exposure of the active era. + let mut exposures: BTreeMap>> = + BTreeMap::new(); + let era = Self::active_era().unwrap().index; + let accumulator_default = PagedExposureMetadata { + total: Zero::zero(), + own: Zero::zero(), + nominator_count: 0, + page_count: 0, + }; + + ErasStakersPaged::::iter_prefix((era,)) + .map(|((validator, _page), expo)| { + ensure!( + expo.page_total == + expo.others.iter().map(|e| e.value).fold(Zero::zero(), |acc, x| acc + x), + "wrong total exposure for the page.", + ); + + let metadata = exposures.get(&validator).unwrap_or(&accumulator_default); + exposures.insert( + validator, + PagedExposureMetadata { + total: metadata.total + expo.page_total, + own: metadata.own, + nominator_count: metadata.nominator_count + expo.others.len() as u32, + page_count: metadata.page_count + 1, + }, + ); + + Ok(()) + }) + .collect::>()?; + + exposures + .iter() + .map(|(validator, metadata)| { + let actual_overview = ErasStakersOverview::::get(era, validator); + + ensure!(actual_overview.is_some(), "No overview found for a paged exposure"); + let actual_overview = actual_overview.unwrap(); + + ensure!( + actual_overview.total == metadata.total + actual_overview.own, + "Exposure metadata does not have correct total exposed stake." + ); + ensure!( + actual_overview.nominator_count == metadata.nominator_count, + "Exposure metadata does not have correct count of nominators." + ); + ensure!( + actual_overview.page_count == metadata.page_count, + "Exposure metadata does not have correct count of pages." + ); + + Ok(()) + }) + .collect::>() + } + fn check_nominators() -> Result<(), TryRuntimeError> { // a check per nominator to ensure their entire stake is correctly distributed. Will only // kick-in if the nomination was submitted before the current era. diff --git a/substrate/frame/staking/src/tests.rs b/substrate/frame/staking/src/tests.rs index ee6f67adf14..bac2530b19b 100644 --- a/substrate/frame/staking/src/tests.rs +++ b/substrate/frame/staking/src/tests.rs @@ -6637,6 +6637,14 @@ fn test_validator_exposure_is_backward_compatible_with_non_paged_rewards_payout( ); assert_eq!(EraInfo::::get_page_count(1, &11), 2); + // validator is exposed + assert!(::is_exposed_in_era(&11, &1)); + // nominators are exposed + for i in 10..15 { + let who: AccountId = 1000 + i; + assert!(::is_exposed_in_era(&who, &1)); + } + // case 2: exposure exist in ErasStakers and ErasStakersClipped (legacy). // delete paged storage and add exposure to clipped storage >::remove((1, 11, 0)); @@ -6672,6 +6680,14 @@ fn test_validator_exposure_is_backward_compatible_with_non_paged_rewards_payout( assert_eq!(actual_exposure_full.own, 1000); assert_eq!(actual_exposure_full.total, total_exposure); + // validator is exposed + assert!(::is_exposed_in_era(&11, &1)); + // nominators are exposed + for i in 10..15 { + let who: AccountId = 1000 + i; + assert!(::is_exposed_in_era(&who, &1)); + } + // for pages other than 0, clipped storage returns empty exposure assert_eq!(EraInfo::::get_paged_exposure(1, &11, 1), None); // page size is 1 for clipped storage -- GitLab From 3ab2bc9ff3c6ecf14694f01e3c7e8f394219585a Mon Sep 17 00:00:00 2001 From: Serban Iorga Date: Fri, 17 Nov 2023 15:24:20 +0200 Subject: [PATCH 010/102] Beefy: small fixes (#2378) Related to #2285 - save the state of the BEEFY gadget after processing a finality proof. We need this in order to avoid skipping blocks. - avoid reprocessing the old state when not necessary --- .../client/consensus/beefy/src/worker.rs | 36 ++++++++++++------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/substrate/client/consensus/beefy/src/worker.rs b/substrate/client/consensus/beefy/src/worker.rs index 309d8c5135b..966c7410365 100644 --- a/substrate/client/consensus/beefy/src/worker.rs +++ b/substrate/client/consensus/beefy/src/worker.rs @@ -456,6 +456,7 @@ where .filter(|genesis| *genesis == self.persisted_state.pallet_genesis) .ok_or(Error::ConsensusReset)?; + let mut new_session_added = false; if *header.number() > self.best_grandpa_block() { // update best GRANDPA finalized block we have seen self.persisted_state.set_best_grandpa(header.clone()); @@ -475,9 +476,15 @@ where { if let Some(new_validator_set) = find_authorities_change::(&header) { self.init_session_at(new_validator_set, *header.number()); + new_session_added = true; } } + if new_session_added { + crate::aux_schema::write_voter_state(&*self.backend, &self.persisted_state) + .map_err(|e| Error::Backend(e.to_string()))?; + } + // Update gossip validator votes filter. if let Err(e) = self .persisted_state @@ -848,15 +855,10 @@ where .fuse(), ); + self.process_new_state(); let error = loop { - // Act on changed 'state'. - self.process_new_state(); - // Mutable reference used to drive the gossip engine. let mut gossip_engine = &mut self.comms.gossip_engine; - // Use temp val and report after async section, - // to avoid having to Mutex-wrap `gossip_engine`. - let mut gossip_report: Option = None; // Wait for, and handle external events. // The branches below only change 'state', actual voting happens afterwards, @@ -884,10 +886,15 @@ where if let Err(err) = self.triage_incoming_justif(justif) { debug!(target: LOG_TARGET, "🥩 {}", err); } - gossip_report = Some(peer_report); + self.comms.gossip_engine.report(peer_report.who, peer_report.cost_benefit); + }, + ResponseInfo::PeerReport(peer_report) => { + self.comms.gossip_engine.report(peer_report.who, peer_report.cost_benefit); + continue; + }, + ResponseInfo::Pending => { + continue; }, - ResponseInfo::PeerReport(peer_report) => gossip_report = Some(peer_report), - ResponseInfo::Pending => (), } }, justif = block_import_justif.next() => { @@ -924,12 +931,15 @@ where }, // Process peer reports. report = self.comms.gossip_report_stream.next() => { - gossip_report = report; + if let Some(PeerReport { who, cost_benefit }) = report { + self.comms.gossip_engine.report(who, cost_benefit); + } + continue; }, } - if let Some(PeerReport { who, cost_benefit }) = gossip_report { - self.comms.gossip_engine.report(who, cost_benefit); - } + + // Act on changed 'state'. + self.process_new_state(); }; // return error _and_ `comms` that can be reused -- GitLab From 5007e2dd5cb5514fe11ad1bdb21ea9c7fb0ae5ca Mon Sep 17 00:00:00 2001 From: Michal Kucharczyk <1728078+michalkucharczyk@users.noreply.github.com> Date: Fri, 17 Nov 2023 14:43:37 +0100 Subject: [PATCH 011/102] crypto: `lazy_static` removed, light parser for address URI added (#2250) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `lazy_static` package does not work well in `no-std`: it requires `spin_no_std` feature, which also will propagate into `std` if enabled. This is not what we want. This PR provides simple address uri parser which allows to get rid of _regex_ which was used to parse the address uri, what in turns allows to remove lazy_static. Three regular expressions (`SS58_REGEX`,`SECRET_PHRASE_REGEX`,`JUNCTION_REGEX`) were replaced with the parser which unifies all of them. The new parser does not support Unicode, it is ASCII only. Related to: #2044 --------- Co-authored-by: Bastian Köcher Co-authored-by: Koute Co-authored-by: command-bot <> --- Cargo.lock | 45 +- Cargo.toml | 1 + ...age_ensure_span_are_ok_on_wrong_gen.stderr | 12 +- ...re_span_are_ok_on_wrong_gen_unnamed.stderr | 12 +- substrate/primitives/core/Cargo.toml | 6 +- substrate/primitives/core/fuzz/Cargo.toml | 20 + .../fuzz/fuzz_targets/fuzz_address_uri.rs | 53 +++ substrate/primitives/core/src/address_uri.rs | 432 ++++++++++++++++++ substrate/primitives/core/src/crypto.rs | 85 ++-- substrate/primitives/core/src/lib.rs | 2 + 10 files changed, 601 insertions(+), 67 deletions(-) create mode 100644 substrate/primitives/core/fuzz/Cargo.toml create mode 100644 substrate/primitives/core/fuzz/fuzz_targets/fuzz_address_uri.rs create mode 100644 substrate/primitives/core/src/address_uri.rs diff --git a/Cargo.lock b/Cargo.lock index 7854042ddbc..64da4b8996c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7408,6 +7408,17 @@ dependencies = [ "rle-decode-fast", ] +[[package]] +name = "libfuzzer-sys" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" +dependencies = [ + "arbitrary", + "cc", + "once_cell", +] + [[package]] name = "libloading" version = "0.7.4" @@ -8182,9 +8193,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "memfd" @@ -14297,14 +14308,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.9.3" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.3.6", - "regex-syntax 0.7.4", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] @@ -14321,10 +14332,16 @@ name = "regex-automata" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fed1ceff11a1dddaee50c9dc8e4938bd106e9d89ae372f192311e7da498e3b69" + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.4", + "regex-syntax 0.8.2", ] [[package]] @@ -14335,9 +14352,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.4" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "remote-ext-tests-bags-list" @@ -17535,6 +17552,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "sp-core-fuzz" +version = "0.0.0" +dependencies = [ + "lazy_static", + "libfuzzer-sys", + "regex", + "sp-core", +] + [[package]] name = "sp-core-hashing" version = "9.0.0" diff --git a/Cargo.toml b/Cargo.toml index ed252e07053..57079aa4d03 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -405,6 +405,7 @@ members = [ "substrate/primitives/consensus/sassafras", "substrate/primitives/consensus/slots", "substrate/primitives/core", + "substrate/primitives/core/fuzz", "substrate/primitives/core/hashing", "substrate/primitives/core/hashing/proc-macro", "substrate/primitives/crypto/ec-utils", diff --git a/substrate/frame/support/test/tests/pallet_ui/storage_ensure_span_are_ok_on_wrong_gen.stderr b/substrate/frame/support/test/tests/pallet_ui/storage_ensure_span_are_ok_on_wrong_gen.stderr index 7375bcd2f16..b5d10827524 100644 --- a/substrate/frame/support/test/tests/pallet_ui/storage_ensure_span_are_ok_on_wrong_gen.stderr +++ b/substrate/frame/support/test/tests/pallet_ui/storage_ensure_span_are_ok_on_wrong_gen.stderr @@ -6,8 +6,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeDecode` is not satisfied | = help: the following other types implement trait `WrapperTypeDecode`: Box - frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Rc + frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Arc = note: required for `Bar` to implement `Decode` = note: required for `Bar` to implement `FullCodec` @@ -44,8 +44,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeEncode` is not satisfied bytes::bytes::Bytes Cow<'a, T> parity_scale_codec::Ref<'a, T, U> - frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Rc + frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Arc Vec and $N others @@ -81,8 +81,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeDecode` is not satisfied | = help: the following other types implement trait `WrapperTypeDecode`: Box - frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Rc + frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Arc = note: required for `Bar` to implement `Decode` = note: required for `Bar` to implement `FullCodec` @@ -119,8 +119,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeEncode` is not satisfied bytes::bytes::Bytes Cow<'a, T> parity_scale_codec::Ref<'a, T, U> - frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Rc + frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Arc Vec and $N others @@ -137,8 +137,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeDecode` is not satisfied | = help: the following other types implement trait `WrapperTypeDecode`: Box - frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Rc + frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Arc = note: required for `Bar` to implement `Decode` = note: required for `Bar` to implement `FullCodec` @@ -177,8 +177,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeEncode` is not satisfied bytes::bytes::Bytes Cow<'a, T> parity_scale_codec::Ref<'a, T, U> - frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Rc + frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Arc Vec and $N others diff --git a/substrate/frame/support/test/tests/pallet_ui/storage_ensure_span_are_ok_on_wrong_gen_unnamed.stderr b/substrate/frame/support/test/tests/pallet_ui/storage_ensure_span_are_ok_on_wrong_gen_unnamed.stderr index 3a0a25712aa..b58902590b8 100644 --- a/substrate/frame/support/test/tests/pallet_ui/storage_ensure_span_are_ok_on_wrong_gen_unnamed.stderr +++ b/substrate/frame/support/test/tests/pallet_ui/storage_ensure_span_are_ok_on_wrong_gen_unnamed.stderr @@ -6,8 +6,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeDecode` is not satisfied | = help: the following other types implement trait `WrapperTypeDecode`: Box - frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Rc + frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Arc = note: required for `Bar` to implement `Decode` = note: required for `Bar` to implement `FullCodec` @@ -44,8 +44,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeEncode` is not satisfied bytes::bytes::Bytes Cow<'a, T> parity_scale_codec::Ref<'a, T, U> - frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Rc + frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Arc Vec and $N others @@ -81,8 +81,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeDecode` is not satisfied | = help: the following other types implement trait `WrapperTypeDecode`: Box - frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Rc + frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Arc = note: required for `Bar` to implement `Decode` = note: required for `Bar` to implement `FullCodec` @@ -119,8 +119,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeEncode` is not satisfied bytes::bytes::Bytes Cow<'a, T> parity_scale_codec::Ref<'a, T, U> - frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Rc + frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Arc Vec and $N others @@ -137,8 +137,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeDecode` is not satisfied | = help: the following other types implement trait `WrapperTypeDecode`: Box - frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Rc + frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Arc = note: required for `Bar` to implement `Decode` = note: required for `Bar` to implement `FullCodec` @@ -177,8 +177,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeEncode` is not satisfied bytes::bytes::Bytes Cow<'a, T> parity_scale_codec::Ref<'a, T, U> - frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Rc + frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes Arc Vec and $N others diff --git a/substrate/primitives/core/Cargo.toml b/substrate/primitives/core/Cargo.toml index 79df81e62c6..9ecce0a22f5 100644 --- a/substrate/primitives/core/Cargo.toml +++ b/substrate/primitives/core/Cargo.toml @@ -26,10 +26,8 @@ bs58 = { version = "0.5.0", default-features = false, optional = true } rand = { version = "0.8.5", features = ["small_rng"], optional = true } substrate-bip39 = { version = "0.4.4", optional = true } bip39 = { version = "2.0.0", default-features = false } -regex = { version = "1.6.0", optional = true } zeroize = { version = "1.4.3", default-features = false } secrecy = { version = "0.8.0", default-features = false } -lazy_static = { version = "1.4.0", default-features = false, optional = true } parking_lot = { version = "0.12.1", optional = true } ss58-registry = { version = "1.34.0", default-features = false } sp-std = { path = "../std", default-features = false} @@ -63,6 +61,8 @@ bandersnatch_vrfs = { git = "https://github.com/w3f/ring-vrf", rev = "cbc342e", [dev-dependencies] criterion = "0.4.0" serde_json = "1.0.108" +lazy_static = "1.4.0" +regex = "1.6.0" sp-core-hashing-proc-macro = { path = "hashing/proc-macro" } [[bench]] @@ -92,7 +92,6 @@ std = [ "hash256-std-hasher/std", "impl-serde/std", "itertools", - "lazy_static", "libsecp256k1/std", "log/std", "merlin/std", @@ -102,7 +101,6 @@ std = [ "primitive-types/serde", "primitive-types/std", "rand", - "regex", "scale-info/std", "schnorrkel/std", "secp256k1/global-context", diff --git a/substrate/primitives/core/fuzz/Cargo.toml b/substrate/primitives/core/fuzz/Cargo.toml new file mode 100644 index 00000000000..9a094b07d4a --- /dev/null +++ b/substrate/primitives/core/fuzz/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "sp-core-fuzz" +version = "0.0.0" +publish = false + +[package.metadata] +cargo-fuzz = true + +[dependencies] +lazy_static = "1.4.0" +libfuzzer-sys = "0.4" +regex = "1.10.2" + +sp-core = { path = ".." } + +[[bin]] +name = "fuzz_address_uri" +path = "fuzz_targets/fuzz_address_uri.rs" +test = false +doc = false diff --git a/substrate/primitives/core/fuzz/fuzz_targets/fuzz_address_uri.rs b/substrate/primitives/core/fuzz/fuzz_targets/fuzz_address_uri.rs new file mode 100644 index 00000000000..e2d9e2fc8b0 --- /dev/null +++ b/substrate/primitives/core/fuzz/fuzz_targets/fuzz_address_uri.rs @@ -0,0 +1,53 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#![no_main] + +extern crate libfuzzer_sys; +extern crate regex; +extern crate sp_core; + +use libfuzzer_sys::fuzz_target; +use regex::Regex; +use sp_core::crypto::AddressUri; + +lazy_static::lazy_static! { + static ref SECRET_PHRASE_REGEX: Regex = Regex::new(r"^(?P[a-zA-Z0-9 ]+)?(?P(//?[^/]+)*)(///(?P.*))?$") + .expect("constructed from known-good static value; qed"); +} + +fuzz_target!(|input: &str| { + let regex_result = SECRET_PHRASE_REGEX.captures(input); + let manual_result = AddressUri::parse(input); + assert_eq!(regex_result.is_some(), manual_result.is_ok()); + if manual_result.is_err() { + let _ = format!("{}", manual_result.as_ref().err().unwrap()); + } + if let (Some(regex_result), Ok(manual_result)) = (regex_result, manual_result) { + assert_eq!(regex_result.name("phrase").map(|p| p.as_str()), manual_result.phrase); + + let manual_paths = manual_result + .paths + .iter() + .map(|s| "/".to_string() + s) + .collect::>() + .join(""); + + assert_eq!(regex_result.name("path").unwrap().as_str().to_string(), manual_paths); + assert_eq!(regex_result.name("password").map(|pass| pass.as_str()), manual_result.pass); + } +}); diff --git a/substrate/primitives/core/src/address_uri.rs b/substrate/primitives/core/src/address_uri.rs new file mode 100644 index 00000000000..862747c9a4b --- /dev/null +++ b/substrate/primitives/core/src/address_uri.rs @@ -0,0 +1,432 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Little util for parsing an address URI. Replaces regular expressions. + +#[cfg(all(not(feature = "std"), any(feature = "serde", feature = "full_crypto")))] +use sp_std::{ + alloc::string::{String, ToString}, + vec::Vec, +}; + +/// A container for results of parsing the address uri string. +/// +/// Intended to be equivalent of: +/// `Regex::new(r"^(?P[a-zA-Z0-9 ]+)?(?P(//?[^/]+)*)(///(?P.*))?$")` +/// which also handles soft and hard derivation paths: +/// `Regex::new(r"/(/?[^/]+)")` +/// +/// Example: +/// ``` +/// use sp_core::crypto::AddressUri; +/// let manual_result = AddressUri::parse("hello world/s//h///pass"); +/// assert_eq!( +/// manual_result.unwrap(), +/// AddressUri { phrase: Some("hello world"), paths: vec!["s", "/h"], pass: Some("pass") } +/// ); +/// ``` +#[derive(Debug, PartialEq)] +pub struct AddressUri<'a> { + /// Phrase, hexadecimal string, or ss58-compatible string. + pub phrase: Option<&'a str>, + /// Key derivation paths, ordered as in input string, + pub paths: Vec<&'a str>, + /// Password. + pub pass: Option<&'a str>, +} + +/// Errors that are possible during parsing the address URI. +#[allow(missing_docs)] +#[cfg_attr(feature = "std", derive(thiserror::Error))] +#[derive(Debug, PartialEq, Eq, Clone)] +pub enum Error { + #[cfg_attr(feature = "std", error("Invalid character in phrase:\n{0}"))] + InvalidCharacterInPhrase(InvalidCharacterInfo), + #[cfg_attr(feature = "std", error("Invalid character in password:\n{0}"))] + InvalidCharacterInPass(InvalidCharacterInfo), + #[cfg_attr(feature = "std", error("Missing character in hard path:\n{0}"))] + MissingCharacterInHardPath(InvalidCharacterInfo), + #[cfg_attr(feature = "std", error("Missing character in soft path:\n{0}"))] + MissingCharacterInSoftPath(InvalidCharacterInfo), +} + +impl Error { + /// Creates an instance of `Error::InvalidCharacterInPhrase` using given parameters. + pub fn in_phrase(input: &str, pos: usize) -> Self { + Self::InvalidCharacterInPhrase(InvalidCharacterInfo::new(input, pos)) + } + /// Creates an instance of `Error::InvalidCharacterInPass` using given parameters. + pub fn in_pass(input: &str, pos: usize) -> Self { + Self::InvalidCharacterInPass(InvalidCharacterInfo::new(input, pos)) + } + /// Creates an instance of `Error::MissingCharacterInHardPath` using given parameters. + pub fn in_hard_path(input: &str, pos: usize) -> Self { + Self::MissingCharacterInHardPath(InvalidCharacterInfo::new(input, pos)) + } + /// Creates an instance of `Error::MissingCharacterInSoftPath` using given parameters. + pub fn in_soft_path(input: &str, pos: usize) -> Self { + Self::MissingCharacterInSoftPath(InvalidCharacterInfo::new(input, pos)) + } +} + +/// Complementary error information. +/// +/// Strucutre contains complementary information about parsing address URI string. +/// String contains a copy of an original URI string, 0-based integer indicates position of invalid +/// character. +#[derive(Debug, PartialEq, Eq, Clone)] +pub struct InvalidCharacterInfo(String, usize); + +impl InvalidCharacterInfo { + fn new(info: &str, pos: usize) -> Self { + Self(info.to_string(), pos) + } +} + +impl sp_std::fmt::Display for InvalidCharacterInfo { + fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { + let (s, pos) = escape_string(&self.0, self.1); + write!(f, "{s}\n{i}^", i = sp_std::iter::repeat(" ").take(pos).collect::()) + } +} + +/// Escapes the control characters in given string, and recomputes the position if some characters +/// were actually escaped. +fn escape_string(input: &str, pos: usize) -> (String, usize) { + let mut out = String::with_capacity(2 * input.len()); + let mut out_pos = 0; + input + .chars() + .enumerate() + .map(|(i, c)| { + let esc = |c| (i, Some('\\'), c, 2); + match c { + '\t' => esc('t'), + '\n' => esc('n'), + '\r' => esc('r'), + '\x07' => esc('a'), + '\x08' => esc('b'), + '\x0b' => esc('v'), + '\x0c' => esc('f'), + _ => (i, None, c, 1), + } + }) + .for_each(|(i, maybe_escape, c, increment)| { + maybe_escape.map(|e| out.push(e)); + out.push(c); + if i < pos { + out_pos += increment; + } + }); + (out, out_pos) +} + +fn extract_prefix<'a>(input: &mut &'a str, is_allowed: &dyn Fn(char) -> bool) -> Option<&'a str> { + let output = input.trim_start_matches(is_allowed); + let prefix_len = input.len() - output.len(); + let prefix = if prefix_len > 0 { Some(&input[..prefix_len]) } else { None }; + *input = output; + prefix +} + +fn strip_prefix(input: &mut &str, prefix: &str) -> bool { + if let Some(stripped_input) = input.strip_prefix(prefix) { + *input = stripped_input; + true + } else { + false + } +} + +impl<'a> AddressUri<'a> { + /// Parses the given string. + pub fn parse(mut input: &'a str) -> Result { + let initial_input = input; + let initial_input_len = input.len(); + let phrase = extract_prefix(&mut input, &|ch: char| { + ch.is_ascii_digit() || ch.is_ascii_alphabetic() || ch == ' ' + }); + + let mut pass = None; + let mut paths = Vec::new(); + while !input.is_empty() { + let unstripped_input = input; + if strip_prefix(&mut input, "///") { + pass = Some(extract_prefix(&mut input, &|ch: char| ch != '\n').unwrap_or("")); + } else if strip_prefix(&mut input, "//") { + let path = extract_prefix(&mut input, &|ch: char| ch != '/') + .ok_or(Error::in_hard_path(initial_input, initial_input_len - input.len()))?; + assert!(path.len() > 0); + // hard path shall contain leading '/', so take it from unstripped input. + paths.push(&unstripped_input[1..path.len() + 2]); + } else if strip_prefix(&mut input, "/") { + paths.push( + extract_prefix(&mut input, &|ch: char| ch != '/').ok_or( + Error::in_soft_path(initial_input, initial_input_len - input.len()), + )?, + ); + } else { + return Err(if pass.is_some() { + Error::in_pass(initial_input, initial_input_len - input.len()) + } else { + Error::in_phrase(initial_input, initial_input_len - input.len()) + }); + } + } + + Ok(Self { phrase, paths, pass }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use regex::Regex; + + lazy_static::lazy_static! { + static ref SECRET_PHRASE_REGEX: Regex = Regex::new(r"^(?P[a-zA-Z0-9 ]+)?(?P(//?[^/]+)*)(///(?P.*))?$") + .expect("constructed from known-good static value; qed"); + } + + fn check_with_regex(input: &str) { + let regex_result = SECRET_PHRASE_REGEX.captures(input); + let manual_result = AddressUri::parse(input); + assert_eq!(regex_result.is_some(), manual_result.is_ok()); + if let (Some(regex_result), Ok(manual_result)) = (regex_result, manual_result) { + assert_eq!( + regex_result.name("phrase").map(|phrase| phrase.as_str()), + manual_result.phrase + ); + + let manual_paths = manual_result + .paths + .iter() + .map(|s| "/".to_string() + s) + .collect::>() + .join(""); + + assert_eq!(regex_result.name("path").unwrap().as_str().to_string(), manual_paths); + assert_eq!( + regex_result.name("password").map(|phrase| phrase.as_str()), + manual_result.pass + ); + } + } + + fn check(input: &str, result: Result) { + let manual_result = AddressUri::parse(input); + assert_eq!(manual_result, result); + check_with_regex(input); + } + + #[test] + fn test00() { + check("///", Ok(AddressUri { phrase: None, pass: Some(""), paths: vec![] })); + } + + #[test] + fn test01() { + check("////////", Ok(AddressUri { phrase: None, pass: Some("/////"), paths: vec![] })) + } + + #[test] + fn test02() { + check( + "sdasd///asda", + Ok(AddressUri { phrase: Some("sdasd"), pass: Some("asda"), paths: vec![] }), + ); + } + + #[test] + fn test03() { + check( + "sdasd//asda", + Ok(AddressUri { phrase: Some("sdasd"), pass: None, paths: vec!["/asda"] }), + ); + } + + #[test] + fn test04() { + check("sdasd//a", Ok(AddressUri { phrase: Some("sdasd"), pass: None, paths: vec!["/a"] })); + } + + #[test] + fn test05() { + let input = "sdasd//"; + check(input, Err(Error::in_hard_path(input, 7))); + } + + #[test] + fn test06() { + check( + "sdasd/xx//asda", + Ok(AddressUri { phrase: Some("sdasd"), pass: None, paths: vec!["xx", "/asda"] }), + ); + } + + #[test] + fn test07() { + check( + "sdasd/xx//a/b//c///pass", + Ok(AddressUri { + phrase: Some("sdasd"), + pass: Some("pass"), + paths: vec!["xx", "/a", "b", "/c"], + }), + ); + } + + #[test] + fn test08() { + check( + "sdasd/xx//a", + Ok(AddressUri { phrase: Some("sdasd"), pass: None, paths: vec!["xx", "/a"] }), + ); + } + + #[test] + fn test09() { + let input = "sdasd/xx//"; + check(input, Err(Error::in_hard_path(input, 10))); + } + + #[test] + fn test10() { + check( + "sdasd/asda", + Ok(AddressUri { phrase: Some("sdasd"), pass: None, paths: vec!["asda"] }), + ); + } + + #[test] + fn test11() { + check( + "sdasd/asda//x", + Ok(AddressUri { phrase: Some("sdasd"), pass: None, paths: vec!["asda", "/x"] }), + ); + } + + #[test] + fn test12() { + check("sdasd/a", Ok(AddressUri { phrase: Some("sdasd"), pass: None, paths: vec!["a"] })); + } + + #[test] + fn test13() { + let input = "sdasd/"; + check(input, Err(Error::in_soft_path(input, 6))); + } + + #[test] + fn test14() { + check("sdasd", Ok(AddressUri { phrase: Some("sdasd"), pass: None, paths: vec![] })); + } + + #[test] + fn test15() { + let input = "sdasd."; + check(input, Err(Error::in_phrase(input, 5))); + } + + #[test] + fn test16() { + let input = "sd.asd/asd.a"; + check(input, Err(Error::in_phrase(input, 2))); + } + + #[test] + fn test17() { + let input = "sd.asd//asd.a"; + check(input, Err(Error::in_phrase(input, 2))); + } + + #[test] + fn test18() { + check( + "sdasd/asd.a", + Ok(AddressUri { phrase: Some("sdasd"), pass: None, paths: vec!["asd.a"] }), + ); + } + + #[test] + fn test19() { + check( + "sdasd//asd.a", + Ok(AddressUri { phrase: Some("sdasd"), pass: None, paths: vec!["/asd.a"] }), + ); + } + + #[test] + fn test20() { + let input = "///\n"; + check(input, Err(Error::in_pass(input, 3))); + } + + #[test] + fn test21() { + let input = "///a\n"; + check(input, Err(Error::in_pass(input, 4))); + } + + #[test] + fn test22() { + let input = "sd asd///asd.a\n"; + check(input, Err(Error::in_pass(input, 14))); + } + + #[test] + fn test_invalid_char_info_1() { + let expected = "01234\n^"; + let f = format!("{}", InvalidCharacterInfo::new("01234", 0)); + assert_eq!(expected, f); + } + + #[test] + fn test_invalid_char_info_2() { + let expected = "01\n ^"; + let f = format!("{}", InvalidCharacterInfo::new("01", 1)); + assert_eq!(expected, f); + } + + #[test] + fn test_invalid_char_info_3() { + let expected = "01234\n ^"; + let f = format!("{}", InvalidCharacterInfo::new("01234", 2)); + assert_eq!(expected, f); + } + + #[test] + fn test_invalid_char_info_4() { + let expected = "012\\n456\n ^"; + let f = format!("{}", InvalidCharacterInfo::new("012\n456", 3)); + assert_eq!(expected, f); + } + + #[test] + fn test_invalid_char_info_5() { + let expected = "012\\n456\n ^"; + let f = format!("{}", InvalidCharacterInfo::new("012\n456", 5)); + assert_eq!(expected, f); + } + + #[test] + fn test_invalid_char_info_6() { + let expected = "012\\f456\\t89\n ^"; + let f = format!("{}", InvalidCharacterInfo::new("012\x0c456\t89", 9)); + assert_eq!(expected, f); + } +} diff --git a/substrate/primitives/core/src/crypto.rs b/substrate/primitives/core/src/crypto.rs index d369de5a1c0..c9719e344d3 100644 --- a/substrate/primitives/core/src/crypto.rs +++ b/substrate/primitives/core/src/crypto.rs @@ -25,8 +25,6 @@ use codec::{Decode, Encode, MaxEncodedLen}; use itertools::Itertools; #[cfg(feature = "std")] use rand::{rngs::OsRng, RngCore}; -#[cfg(feature = "std")] -use regex::Regex; use scale_info::TypeInfo; #[cfg(feature = "std")] pub use secrecy::{ExposeSecret, SecretString}; @@ -43,6 +41,11 @@ pub use ss58_registry::{from_known_address_format, Ss58AddressFormat, Ss58Addres /// Trait to zeroize a memory buffer. pub use zeroize::Zeroize; +#[cfg(feature = "std")] +pub use crate::address_uri::AddressUri; +#[cfg(any(feature = "std", feature = "full_crypto"))] +pub use crate::address_uri::Error as AddressUriError; + /// The root phrase for our publicly known keys. pub const DEV_PHRASE: &str = "bottom drive obey lake curtain smoke basket hold race lonely fit walk"; @@ -82,8 +85,8 @@ impl> UncheckedInto for S { #[cfg(feature = "full_crypto")] pub enum SecretStringError { /// The overall format was invalid (e.g. the seed phrase contained symbols). - #[cfg_attr(feature = "std", error("Invalid format"))] - InvalidFormat, + #[cfg_attr(feature = "std", error("Invalid format {0}"))] + InvalidFormat(AddressUriError), /// The seed phrase provided is not a valid BIP39 phrase. #[cfg_attr(feature = "std", error("Invalid phrase"))] InvalidPhrase, @@ -101,6 +104,13 @@ pub enum SecretStringError { InvalidPath, } +#[cfg(any(feature = "std", feature = "full_crypto"))] +impl From for SecretStringError { + fn from(e: AddressUriError) -> Self { + Self::InvalidFormat(e) + } +} + /// An error when deriving a key. #[cfg_attr(feature = "std", derive(thiserror::Error))] #[derive(Debug, Clone, PartialEq, Eq)] @@ -208,7 +218,7 @@ impl> From for DeriveJunction { /// An error type for SS58 decoding. #[cfg_attr(feature = "std", derive(thiserror::Error))] #[cfg_attr(not(feature = "std"), derive(Debug))] -#[derive(Clone, Copy, Eq, PartialEq)] +#[derive(Clone, Eq, PartialEq)] #[allow(missing_docs)] #[cfg(any(feature = "full_crypto", feature = "serde"))] pub enum PublicError { @@ -235,6 +245,11 @@ pub enum PublicError { InvalidPath, #[cfg_attr(feature = "std", error("Disallowed SS58 Address Format for this datatype."))] FormatNotAllowed, + #[cfg_attr(feature = "std", error("Password not allowed."))] + PasswordNotAllowed, + #[cfg(feature = "std")] + #[cfg_attr(feature = "std", error("Incorrect URI syntax {0}."))] + MalformedUri(#[from] AddressUriError), } #[cfg(feature = "std")] @@ -414,47 +429,40 @@ pub fn set_default_ss58_version(new_default: Ss58AddressFormat) { DEFAULT_VERSION.store(new_default.into(), core::sync::atomic::Ordering::Relaxed); } -#[cfg(feature = "std")] -lazy_static::lazy_static! { - static ref SS58_REGEX: Regex = Regex::new(r"^(?P[\w\d ]+)?(?P(//?[^/]+)*)$") - .expect("constructed from known-good static value; qed"); - static ref SECRET_PHRASE_REGEX: Regex = Regex::new(r"^(?P[\d\w ]+)?(?P(//?[^/]+)*)(///(?P.*))?$") - .expect("constructed from known-good static value; qed"); - static ref JUNCTION_REGEX: Regex = Regex::new(r"/(/?[^/]+)") - .expect("constructed from known-good static value; qed"); -} - #[cfg(feature = "std")] impl + AsRef<[u8]> + Public + Derive> Ss58Codec for T { fn from_string(s: &str) -> Result { - let cap = SS58_REGEX.captures(s).ok_or(PublicError::InvalidFormat)?; - let s = cap.name("ss58").map(|r| r.as_str()).unwrap_or(DEV_ADDRESS); + let cap = AddressUri::parse(s)?; + if cap.pass.is_some() { + return Err(PublicError::PasswordNotAllowed); + } + let s = cap.phrase.unwrap_or(DEV_ADDRESS); let addr = if let Some(stripped) = s.strip_prefix("0x") { let d = array_bytes::hex2bytes(stripped).map_err(|_| PublicError::InvalidFormat)?; Self::from_slice(&d).map_err(|()| PublicError::BadLength)? } else { Self::from_ss58check(s)? }; - if cap["path"].is_empty() { + if cap.paths.is_empty() { Ok(addr) } else { - let path = - JUNCTION_REGEX.captures_iter(&cap["path"]).map(|f| DeriveJunction::from(&f[1])); - addr.derive(path).ok_or(PublicError::InvalidPath) + addr.derive(cap.paths.iter().map(DeriveJunction::from)) + .ok_or(PublicError::InvalidPath) } } fn from_string_with_version(s: &str) -> Result<(Self, Ss58AddressFormat), PublicError> { - let cap = SS58_REGEX.captures(s).ok_or(PublicError::InvalidFormat)?; - let (addr, v) = Self::from_ss58check_with_version( - cap.name("ss58").map(|r| r.as_str()).unwrap_or(DEV_ADDRESS), - )?; - if cap["path"].is_empty() { + let cap = AddressUri::parse(s)?; + if cap.pass.is_some() { + return Err(PublicError::PasswordNotAllowed); + } + let (addr, v) = Self::from_ss58check_with_version(cap.phrase.unwrap_or(DEV_ADDRESS))?; + if cap.paths.is_empty() { Ok((addr, v)) } else { - let path = - JUNCTION_REGEX.captures_iter(&cap["path"]).map(|f| DeriveJunction::from(&f[1])); - addr.derive(path).ok_or(PublicError::InvalidPath).map(|a| (a, v)) + addr.derive(cap.paths.iter().map(DeriveJunction::from)) + .ok_or(PublicError::InvalidPath) + .map(|a| (a, v)) } } } @@ -817,22 +825,15 @@ impl sp_std::str::FromStr for SecretUri { type Err = SecretStringError; fn from_str(s: &str) -> Result { - let cap = SECRET_PHRASE_REGEX.captures(s).ok_or(SecretStringError::InvalidFormat)?; - - let junctions = JUNCTION_REGEX - .captures_iter(&cap["path"]) - .map(|f| DeriveJunction::from(&f[1])) - .collect::>(); - - let phrase = cap.name("phrase").map(|r| r.as_str()).unwrap_or(DEV_PHRASE); - let password = cap.name("password"); + let cap = AddressUri::parse(s)?; + let phrase = cap.phrase.unwrap_or(DEV_PHRASE); Ok(Self { phrase: SecretString::from_str(phrase).expect("Returns infallible error; qed"), - password: password.map(|v| { - SecretString::from_str(v.as_str()).expect("Returns infallible error; qed") - }), - junctions, + password: cap + .pass + .map(|v| SecretString::from_str(v).expect("Returns infallible error; qed")), + junctions: cap.paths.iter().map(DeriveJunction::from).collect::>(), }) } } diff --git a/substrate/primitives/core/src/lib.rs b/substrate/primitives/core/src/lib.rs index ec0641c5466..4873d1a2112 100644 --- a/substrate/primitives/core/src/lib.rs +++ b/substrate/primitives/core/src/lib.rs @@ -55,6 +55,8 @@ pub mod crypto; pub mod hexdisplay; pub use paste; +#[cfg(any(feature = "full_crypto", feature = "std"))] +mod address_uri; #[cfg(feature = "bandersnatch-experimental")] pub mod bandersnatch; #[cfg(feature = "bls-experimental")] -- GitLab From 490fb66537c60e1a391350b3f0a786efb7c17373 Mon Sep 17 00:00:00 2001 From: Adrian Catangiu Date: Fri, 17 Nov 2023 16:40:49 +0200 Subject: [PATCH 012/102] [trivial] asset-hubs runtimes: fix incorrect doc-comments (#2384) Fix some incorrect doc-comments --- .../runtimes/assets/asset-hub-rococo/src/xcm_config.rs | 4 ++-- .../runtimes/assets/asset-hub-westend/src/xcm_config.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/xcm_config.rs b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/xcm_config.rs index b85cb76642f..6e04924f038 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/xcm_config.rs +++ b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/xcm_config.rs @@ -109,7 +109,7 @@ pub type CurrencyTransactor = CurrencyAdapter< (), >; -/// `AssetId`/`Balance` converter for `PoolAssets`. +/// `AssetId`/`Balance` converter for `TrustBackedAssets`. pub type TrustBackedAssetsConvertedConcreteId = assets_common::TrustBackedAssetsConvertedConcreteId; @@ -130,7 +130,7 @@ pub type FungiblesTransactor = FungiblesAdapter< CheckingAccount, >; -/// `AssetId/Balance` converter for `TrustBackedAssets` +/// `AssetId`/`Balance` converter for `ForeignAssets`. pub type ForeignAssetsConvertedConcreteId = assets_common::ForeignAssetsConvertedConcreteId< ( // Ignore `TrustBackedAssets` explicitly diff --git a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/xcm_config.rs b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/xcm_config.rs index 17312c0f46e..6942559671b 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/xcm_config.rs +++ b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/xcm_config.rs @@ -109,7 +109,7 @@ pub type CurrencyTransactor = CurrencyAdapter< (), >; -/// `AssetId/Balance` converter for `TrustBackedAssets` +/// `AssetId`/`Balance` converter for `TrustBackedAssets`. pub type TrustBackedAssetsConvertedConcreteId = assets_common::TrustBackedAssetsConvertedConcreteId; @@ -130,7 +130,7 @@ pub type FungiblesTransactor = FungiblesAdapter< CheckingAccount, >; -/// `AssetId/Balance` converter for `TrustBackedAssets` +/// `AssetId`/`Balance` converter for `ForeignAssets`. pub type ForeignAssetsConvertedConcreteId = assets_common::ForeignAssetsConvertedConcreteId< ( // Ignore `TrustBackedAssets` explicitly -- GitLab From 079b14f624bef9dd901f93c29424cba0ebbd325d Mon Sep 17 00:00:00 2001 From: Nazar Mokrynskyi Date: Fri, 17 Nov 2023 18:01:08 +0200 Subject: [PATCH 013/102] Do not panic if the `fdlimit` call to increase the file descriptor limit fails (#2155) # Description Sometimes changing file descriptor limits is not allowed, but there is no need to crash the node if/when this happens. Since `fdlimit`'s author decided to use panics instead of returning `Result`, we need to catch it. # Checklist - [x] My PR includes a detailed description as outlined in the "Description" section above - [ ] My PR follows the [labeling requirements](CONTRIBUTING.md#Process) of this project (at minimum one label for `T` required) - [ ] I have made corresponding changes to the documentation (if applicable) - [ ] I have added tests that prove my fix is effective or that my feature works (if applicable) --------- Co-authored-by: Koute --- Cargo.lock | 13 +++++++------ substrate/client/cli/Cargo.toml | 2 +- substrate/client/cli/src/config.rs | 23 +++++++++++++++++------ substrate/client/service/test/Cargo.toml | 2 +- substrate/client/service/test/src/lib.rs | 2 +- 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 64da4b8996c..da266eb5d47 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5342,11 +5342,12 @@ dependencies = [ [[package]] name = "fdlimit" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4c9e43643f5a3be4ca5b67d26b98031ff9db6806c3440ae32e02e3ceac3f1b" +checksum = "e182f7dbc2ef73d9ef67351c5fbbea084729c48362d3ce9dd44c28e32e277fe5" dependencies = [ "libc", + "thiserror", ] [[package]] @@ -19321,9 +19322,9 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.48" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" dependencies = [ "thiserror-impl", ] @@ -19350,9 +19351,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "1.0.48" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", diff --git a/substrate/client/cli/Cargo.toml b/substrate/client/cli/Cargo.toml index c415527c372..c4464c5f787 100644 --- a/substrate/client/cli/Cargo.toml +++ b/substrate/client/cli/Cargo.toml @@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] array-bytes = "6.1" chrono = "0.4.27" clap = { version = "4.4.6", features = ["derive", "string", "wrap_help"] } -fdlimit = "0.2.1" +fdlimit = "0.3.0" futures = "0.3.21" itertools = "0.10.3" libp2p-identity = { version = "0.1.3", features = ["peerid", "ed25519"]} diff --git a/substrate/client/cli/src/config.rs b/substrate/client/cli/src/config.rs index 4d218da6aa8..b842df5a690 100644 --- a/substrate/client/cli/src/config.rs +++ b/substrate/client/cli/src/config.rs @@ -605,14 +605,25 @@ pub trait CliConfiguration: Sized { logger.init()?; - if let Some(new_limit) = fdlimit::raise_fd_limit() { - if new_limit < RECOMMENDED_OPEN_FILE_DESCRIPTOR_LIMIT { + match fdlimit::raise_fd_limit() { + Ok(fdlimit::Outcome::LimitRaised { to, .. }) => + if to < RECOMMENDED_OPEN_FILE_DESCRIPTOR_LIMIT { + warn!( + "Low open file descriptor limit configured for the process. \ + Current value: {:?}, recommended value: {:?}.", + to, RECOMMENDED_OPEN_FILE_DESCRIPTOR_LIMIT, + ); + }, + Ok(fdlimit::Outcome::Unsupported) => { + // Unsupported platform (non-Linux) + }, + Err(error) => { warn!( - "Low open file descriptor limit configured for the process. \ - Current value: {:?}, recommended value: {:?}.", - new_limit, RECOMMENDED_OPEN_FILE_DESCRIPTOR_LIMIT, + "Failed to configure file descriptor limit for the process: \ + {}, recommended value: {:?}.", + error, RECOMMENDED_OPEN_FILE_DESCRIPTOR_LIMIT, ); - } + }, } Ok(()) diff --git a/substrate/client/service/test/Cargo.toml b/substrate/client/service/test/Cargo.toml index 670312e4161..c6091f97d63 100644 --- a/substrate/client/service/test/Cargo.toml +++ b/substrate/client/service/test/Cargo.toml @@ -14,7 +14,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] async-channel = "1.8.0" array-bytes = "6.1" -fdlimit = "0.2.1" +fdlimit = "0.3.0" futures = "0.3.21" log = "0.4.17" parity-scale-codec = "3.6.1" diff --git a/substrate/client/service/test/src/lib.rs b/substrate/client/service/test/src/lib.rs index 9700c7643c4..456df73459a 100644 --- a/substrate/client/service/test/src/lib.rs +++ b/substrate/client/service/test/src/lib.rs @@ -285,7 +285,7 @@ where base_port: u16, ) -> TestNet { sp_tracing::try_init_simple(); - fdlimit::raise_fd_limit(); + fdlimit::raise_fd_limit().unwrap(); let runtime = Runtime::new().expect("Error creating tokio runtime"); let mut net = TestNet { runtime, -- GitLab From 0385902cd05523155832b155fe7ce4d1eaf7b779 Mon Sep 17 00:00:00 2001 From: Branislav Kontur Date: Fri, 17 Nov 2023 17:06:45 +0100 Subject: [PATCH 014/102] Relax `force_default_xcm_version` for testnet system parachains (#2385) This PR fixes two things: - relax `force_default_xcm_version` for testnet system parachains (e.g. BridgeHubWestend has now 2 and there is no way to change it to 3, so we need to call `force_xcm_version(3)` for every parachain that it is connected to, because we send XCMv3 messages) - add `Storage` item to `PolkadotXcm` pallet definition (now we cannot see storage items for `pallet_xcm` in PJS) ## TODO - [ ] when merged open PR to `polkadot-fellows/runtimes` repo --- .../assets/asset-hub-rococo/src/xcm_config.rs | 16 +++++++++------- .../assets/asset-hub-westend/src/xcm_config.rs | 16 +++++++++------- .../bridge-hubs/bridge-hub-rococo/src/lib.rs | 2 +- .../bridge-hub-rococo/src/xcm_config.rs | 16 +++++++++------- .../bridge-hubs/bridge-hub-westend/src/lib.rs | 2 +- .../bridge-hub-westend/src/xcm_config.rs | 16 +++++++++------- .../collectives-westend/src/xcm_config.rs | 6 ++++-- 7 files changed, 42 insertions(+), 32 deletions(-) diff --git a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/xcm_config.rs b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/xcm_config.rs index 6e04924f038..4da0a2500a5 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/xcm_config.rs +++ b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/xcm_config.rs @@ -275,13 +275,15 @@ impl Contains for SafeCallFilter { matches!( call, - RuntimeCall::PolkadotXcm(pallet_xcm::Call::force_xcm_version { .. }) | - RuntimeCall::System( - frame_system::Call::set_heap_pages { .. } | - frame_system::Call::set_code { .. } | - frame_system::Call::set_code_without_checks { .. } | - frame_system::Call::kill_prefix { .. }, - ) | RuntimeCall::ParachainSystem(..) | + RuntimeCall::PolkadotXcm( + pallet_xcm::Call::force_xcm_version { .. } | + pallet_xcm::Call::force_default_xcm_version { .. } + ) | RuntimeCall::System( + frame_system::Call::set_heap_pages { .. } | + frame_system::Call::set_code { .. } | + frame_system::Call::set_code_without_checks { .. } | + frame_system::Call::kill_prefix { .. }, + ) | RuntimeCall::ParachainSystem(..) | RuntimeCall::Timestamp(..) | RuntimeCall::Balances(..) | RuntimeCall::CollatorSelection( diff --git a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/xcm_config.rs b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/xcm_config.rs index 6942559671b..4760e087e24 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/xcm_config.rs +++ b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/xcm_config.rs @@ -272,13 +272,15 @@ impl Contains for SafeCallFilter { matches!( call, - RuntimeCall::PolkadotXcm(pallet_xcm::Call::force_xcm_version { .. }) | - RuntimeCall::System( - frame_system::Call::set_heap_pages { .. } | - frame_system::Call::set_code { .. } | - frame_system::Call::set_code_without_checks { .. } | - frame_system::Call::kill_prefix { .. }, - ) | RuntimeCall::ParachainSystem(..) | + RuntimeCall::PolkadotXcm( + pallet_xcm::Call::force_xcm_version { .. } | + pallet_xcm::Call::force_default_xcm_version { .. } + ) | RuntimeCall::System( + frame_system::Call::set_heap_pages { .. } | + frame_system::Call::set_code { .. } | + frame_system::Call::set_code_without_checks { .. } | + frame_system::Call::kill_prefix { .. }, + ) | RuntimeCall::ParachainSystem(..) | RuntimeCall::Timestamp(..) | RuntimeCall::Balances(..) | RuntimeCall::CollatorSelection( diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs index 5a44ccbb75a..8e138822696 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs @@ -498,7 +498,7 @@ construct_runtime!( // XCM helpers. XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event} = 30, - PolkadotXcm: pallet_xcm::{Pallet, Call, Event, Origin, Config} = 31, + PolkadotXcm: pallet_xcm::{Pallet, Call, Storage, Event, Origin, Config} = 31, CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 32, DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 33, diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/xcm_config.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/xcm_config.rs index 1436c5b96a3..de7b5315c88 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/xcm_config.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/xcm_config.rs @@ -161,13 +161,15 @@ impl Contains for SafeCallFilter { matches!( call, - RuntimeCall::PolkadotXcm(pallet_xcm::Call::force_xcm_version { .. }) | - RuntimeCall::System( - frame_system::Call::set_heap_pages { .. } | - frame_system::Call::set_code { .. } | - frame_system::Call::set_code_without_checks { .. } | - frame_system::Call::kill_prefix { .. }, - ) | RuntimeCall::ParachainSystem(..) | + RuntimeCall::PolkadotXcm( + pallet_xcm::Call::force_xcm_version { .. } | + pallet_xcm::Call::force_default_xcm_version { .. } + ) | RuntimeCall::System( + frame_system::Call::set_heap_pages { .. } | + frame_system::Call::set_code { .. } | + frame_system::Call::set_code_without_checks { .. } | + frame_system::Call::kill_prefix { .. }, + ) | RuntimeCall::ParachainSystem(..) | RuntimeCall::Timestamp(..) | RuntimeCall::Balances(..) | RuntimeCall::CollatorSelection( diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs index d1d2b4a4159..9c97728058f 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs @@ -497,7 +497,7 @@ construct_runtime!( // XCM helpers. XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event} = 30, - PolkadotXcm: pallet_xcm::{Pallet, Call, Event, Origin, Config} = 31, + PolkadotXcm: pallet_xcm::{Pallet, Call, Storage, Event, Origin, Config} = 31, CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 32, DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 33, diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/xcm_config.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/xcm_config.rs index 7084882c41f..c89ee91c5e4 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/xcm_config.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/xcm_config.rs @@ -150,13 +150,15 @@ impl Contains for SafeCallFilter { matches!( call, - RuntimeCall::PolkadotXcm(pallet_xcm::Call::force_xcm_version { .. }) | - RuntimeCall::System( - frame_system::Call::set_heap_pages { .. } | - frame_system::Call::set_code { .. } | - frame_system::Call::set_code_without_checks { .. } | - frame_system::Call::kill_prefix { .. }, - ) | RuntimeCall::ParachainSystem(..) | + RuntimeCall::PolkadotXcm( + pallet_xcm::Call::force_xcm_version { .. } | + pallet_xcm::Call::force_default_xcm_version { .. } + ) | RuntimeCall::System( + frame_system::Call::set_heap_pages { .. } | + frame_system::Call::set_code { .. } | + frame_system::Call::set_code_without_checks { .. } | + frame_system::Call::kill_prefix { .. }, + ) | RuntimeCall::ParachainSystem(..) | RuntimeCall::Timestamp(..) | RuntimeCall::Balances(..) | RuntimeCall::CollatorSelection( diff --git a/cumulus/parachains/runtimes/collectives/collectives-westend/src/xcm_config.rs b/cumulus/parachains/runtimes/collectives/collectives-westend/src/xcm_config.rs index d58995827fa..cefc099c96f 100644 --- a/cumulus/parachains/runtimes/collectives/collectives-westend/src/xcm_config.rs +++ b/cumulus/parachains/runtimes/collectives/collectives-westend/src/xcm_config.rs @@ -178,8 +178,10 @@ impl Contains for SafeCallFilter { pallet_collator_selection::Call::add_invulnerable { .. } | pallet_collator_selection::Call::remove_invulnerable { .. }, ) | RuntimeCall::Session(pallet_session::Call::purge_keys { .. }) | - RuntimeCall::PolkadotXcm(pallet_xcm::Call::force_xcm_version { .. }) | - RuntimeCall::XcmpQueue(..) | + RuntimeCall::PolkadotXcm( + pallet_xcm::Call::force_xcm_version { .. } | + pallet_xcm::Call::force_default_xcm_version { .. } + ) | RuntimeCall::XcmpQueue(..) | RuntimeCall::MessageQueue(..) | RuntimeCall::Alliance( // `init_members` accepts unbounded vecs as arguments, -- GitLab From 9e34163aca9d58d7351451833d9cd214b266e7f0 Mon Sep 17 00:00:00 2001 From: Sebastian Kunert Date: Fri, 17 Nov 2023 17:10:46 +0100 Subject: [PATCH 015/102] Make collator RPC mode non-experimental (#2381) The `--relay-chain-rpc-urls` CLI flag has been available for a while now. We have collators with this running and parachain teams are also using it. It should be fine now to remove the experimental status. --- cumulus/client/cli/src/lib.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/cumulus/client/cli/src/lib.rs b/cumulus/client/cli/src/lib.rs index 1b18ed06437..a2238b73b2b 100644 --- a/cumulus/client/cli/src/lib.rs +++ b/cumulus/client/cli/src/lib.rs @@ -296,7 +296,14 @@ pub struct RunCmd { #[arg(long, conflicts_with = "validator")] pub collator: bool, - /// EXPERIMENTAL: Specify an URL to a relay chain full node to communicate with. + /// Creates a less resource-hungry node that retrieves relay chain data from an RPC endpoint. + /// + /// The provided URLs should point to RPC endpoints of the relay chain. + /// This node connects to the remote nodes following the order they were specified in. If the + /// connection fails, it attempts to connect to the next endpoint in the list. + /// + /// Note: This option doesn't stop the node from connecting to the relay chain network but + /// reduces bandwidth use. #[arg( long, value_parser = validate_relay_chain_url, -- GitLab From 82912acb33a9030c0ef3bf590a34fca09b72dc5f Mon Sep 17 00:00:00 2001 From: Liam Aharon Date: Fri, 17 Nov 2023 20:14:45 +0400 Subject: [PATCH 016/102] Fix migrations and add CI check for new system chains (#2336) Westend Collectives migration CI check can be fixed once we have https://github.com/paritytech/try-runtime-cli/pull/58, will open another PR once it is available. - [x] Remove deprecated `DmpQueue` pallet from Rococo Contracts, the migration is complete - [x] Fix Asset Hub Rococo storage versions - [x] Add migration check CI for Asset Hub Rococo and Westend Bridge Hub --- .gitlab/pipeline/check.yml | 25 ++++++++ .../assets/asset-hub-rococo/src/lib.rs | 59 ++++++++++++++++++- .../contracts/contracts-rococo/src/lib.rs | 1 - .../contracts-rococo/src/xcm_config.rs | 6 -- 4 files changed, 82 insertions(+), 9 deletions(-) diff --git a/.gitlab/pipeline/check.yml b/.gitlab/pipeline/check.yml index 4071fdf9758..429491fb174 100644 --- a/.gitlab/pipeline/check.yml +++ b/.gitlab/pipeline/check.yml @@ -151,6 +151,31 @@ check-runtime-migration-asset-hub-westend: PACKAGE: "asset-hub-westend-runtime" WASM: "asset_hub_westend_runtime.compact.compressed.wasm" URI: "wss://westend-asset-hub-rpc.polkadot.io:443" + +check-runtime-migration-asset-hub-rococo: + stage: check + extends: + - .docker-env + - .test-pr-refs + - .check-runtime-migration + variables: + NETWORK: "asset-hub-rococo" + PACKAGE: "asset-hub-rococo-runtime" + WASM: "asset_hub_rococo_runtime.compact.compressed.wasm" + URI: "wss://rococo-asset-hub-rpc.polkadot.io:443" + +# Check runtime migrations for Parity managed bridge hub chains +check-runtime-migration-bridge-hub-westend: + stage: check + extends: + - .docker-env + - .test-pr-refs + - .check-runtime-migration + variables: + NETWORK: "bridge-hub-westend" + PACKAGE: "bridge-hub-westend-runtime" + WASM: "bridge_hub_westend_runtime.compact.compressed.wasm" + URI: "wss://westend-bridge-hub-rpc.polkadot.io:443" check-runtime-migration-bridge-hub-rococo: stage: check diff --git a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs index 4b4ae61a3e8..b274f45877b 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs +++ b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs @@ -39,7 +39,9 @@ use sp_api::impl_runtime_apis; use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, - traits::{AccountIdConversion, AccountIdLookup, BlakeTwo256, Block as BlockT, Verify}, + traits::{ + AccountIdConversion, AccountIdLookup, BlakeTwo256, Block as BlockT, Saturating, Verify, + }, transaction_validity::{TransactionSource, TransactionValidity}, ApplyExtrinsicResult, Permill, }; @@ -959,7 +961,60 @@ pub type SignedExtra = ( pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; /// Migrations to apply on runtime upgrade. -pub type Migrations = (pallet_collator_selection::migration::v1::MigrateToV1,); +pub type Migrations = + (pallet_collator_selection::migration::v1::MigrateToV1, InitStorageVersions); + +/// Migration to initialize storage versions for pallets added after genesis. +/// +/// This is now done automatically (see ), +/// but some pallets had made it in and had storage set in them for this parachain before it was +/// merged. +pub struct InitStorageVersions; + +impl frame_support::traits::OnRuntimeUpgrade for InitStorageVersions { + fn on_runtime_upgrade() -> Weight { + use frame_support::traits::{GetStorageVersion, StorageVersion}; + + let mut writes = 0; + + if PolkadotXcm::on_chain_storage_version() == StorageVersion::new(0) { + PolkadotXcm::current_storage_version().put::(); + writes.saturating_inc(); + } + + if Multisig::on_chain_storage_version() == StorageVersion::new(0) { + Multisig::current_storage_version().put::(); + writes.saturating_inc(); + } + + if Assets::on_chain_storage_version() == StorageVersion::new(0) { + Assets::current_storage_version().put::(); + writes.saturating_inc(); + } + + if Uniques::on_chain_storage_version() == StorageVersion::new(0) { + Uniques::current_storage_version().put::(); + writes.saturating_inc(); + } + + if Nfts::on_chain_storage_version() == StorageVersion::new(0) { + Nfts::current_storage_version().put::(); + writes.saturating_inc(); + } + + if ForeignAssets::on_chain_storage_version() == StorageVersion::new(0) { + ForeignAssets::current_storage_version().put::(); + writes.saturating_inc(); + } + + if PoolAssets::on_chain_storage_version() == StorageVersion::new(0) { + PoolAssets::current_storage_version().put::(); + writes.saturating_inc(); + } + + ::DbWeight::get().reads_writes(7, writes) + } +} /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< diff --git a/cumulus/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/cumulus/parachains/runtimes/contracts/contracts-rococo/src/lib.rs index 5b828bad0c7..9d6a53c5ed3 100644 --- a/cumulus/parachains/runtimes/contracts/contracts-rococo/src/lib.rs +++ b/cumulus/parachains/runtimes/contracts/contracts-rococo/src/lib.rs @@ -405,7 +405,6 @@ construct_runtime!( XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event} = 30, PolkadotXcm: pallet_xcm::{Pallet, Call, Storage, Event, Origin, Config} = 31, CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 32, - DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 33, MessageQueue: pallet_message_queue::{Pallet, Call, Storage, Event} = 34, // Smart Contracts. diff --git a/cumulus/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs b/cumulus/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs index faee1c68fe6..2ac93aed3f8 100644 --- a/cumulus/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs +++ b/cumulus/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs @@ -304,9 +304,3 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { parameter_types! { pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; } - -impl cumulus_pallet_dmp_queue::Config for Runtime { - type WeightInfo = cumulus_pallet_dmp_queue::weights::SubstrateWeight; - type RuntimeEvent = crate::RuntimeEvent; - type DmpSink = frame_support::traits::EnqueueWithOrigin; -} -- GitLab From 1d1c3719487c8b9f9b770e5c33e8e8b237bd8824 Mon Sep 17 00:00:00 2001 From: Davide Galassi Date: Fri, 17 Nov 2023 23:48:34 +0100 Subject: [PATCH 017/102] Bump bandersnatch VRF revision (#2389) Closes https://github.com/paritytech/polkadot-sdk/issues/2327 cc @burdges --- Cargo.lock | 40 ++++++++++++++-------------- substrate/primitives/core/Cargo.toml | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index da266eb5d47..ed9997101fb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -544,7 +544,7 @@ dependencies = [ [[package]] name = "ark-secret-scalar" version = "0.0.2" -source = "git+https://github.com/w3f/ring-vrf?rev=cbc342e#cbc342e95d3cbcd3c5ba8d45af7200eb58e63502" +source = "git+https://github.com/w3f/ring-vrf?rev=3ddc205#3ddc2051066c4b3f0eadd0ba5700df12500d9754" dependencies = [ "ark-ec", "ark-ff", @@ -593,7 +593,7 @@ dependencies = [ [[package]] name = "ark-transcript" version = "0.0.2" -source = "git+https://github.com/w3f/ring-vrf?rev=cbc342e#cbc342e95d3cbcd3c5ba8d45af7200eb58e63502" +source = "git+https://github.com/w3f/ring-vrf?rev=3ddc205#3ddc2051066c4b3f0eadd0ba5700df12500d9754" dependencies = [ "ark-ff", "ark-serialize", @@ -1369,8 +1369,8 @@ dependencies = [ [[package]] name = "bandersnatch_vrfs" -version = "0.0.3" -source = "git+https://github.com/w3f/ring-vrf?rev=cbc342e#cbc342e95d3cbcd3c5ba8d45af7200eb58e63502" +version = "0.0.4" +source = "git+https://github.com/w3f/ring-vrf?rev=3ddc205#3ddc2051066c4b3f0eadd0ba5700df12500d9754" dependencies = [ "ark-bls12-381", "ark-ec", @@ -1493,8 +1493,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" dependencies = [ "bitcoin_hashes", - "rand 0.8.5", - "rand_core 0.6.4", + "rand 0.7.3", + "rand_core 0.5.1", "serde", "unicode-normalization", ] @@ -3065,7 +3065,7 @@ dependencies = [ [[package]] name = "common" version = "0.1.0" -source = "git+https://github.com/w3f/ring-proof#edd1e90b847e560bf60fc2e8712235ccfa11a9a9" +source = "git+https://github.com/burdges/ring-proof?branch=patch-1#05a756076cb20f981a52afea3a620168de49f95f" dependencies = [ "ark-ec", "ark-ff", @@ -4814,7 +4814,7 @@ checksum = "86e3bdc80eee6e16b2b6b0f87fbc98c04bee3455e35174c0de1a125d0688c632" [[package]] name = "dleq_vrf" version = "0.0.2" -source = "git+https://github.com/w3f/ring-vrf?rev=cbc342e#cbc342e95d3cbcd3c5ba8d45af7200eb58e63502" +source = "git+https://github.com/w3f/ring-vrf?rev=3ddc205#3ddc2051066c4b3f0eadd0ba5700df12500d9754" dependencies = [ "ark-ec", "ark-ff", @@ -5389,7 +5389,7 @@ dependencies = [ [[package]] name = "fflonk" version = "0.1.0" -source = "git+https://github.com/w3f/fflonk#26a5045b24e169cffc1f9328ca83d71061145c40" +source = "git+https://github.com/w3f/fflonk#1beb0585e1c8488956fac7f05da061f9b41e8948" dependencies = [ "ark-ec", "ark-ff", @@ -14445,7 +14445,7 @@ dependencies = [ [[package]] name = "ring" version = "0.1.0" -source = "git+https://github.com/w3f/ring-proof#edd1e90b847e560bf60fc2e8712235ccfa11a9a9" +source = "git+https://github.com/burdges/ring-proof?branch=patch-1#05a756076cb20f981a52afea3a620168de49f95f" dependencies = [ "ark-ec", "ark-ff", @@ -17607,7 +17607,7 @@ dependencies = [ [[package]] name = "sp-crypto-ec-utils" version = "0.4.1" -source = "git+https://github.com/paritytech/polkadot-sdk#fe9435db2fda7c9e2f4e29521564c72cac38f59b" +source = "git+https://github.com/paritytech/polkadot-sdk#82912acb33a9030c0ef3bf590a34fca09b72dc5f" dependencies = [ "ark-bls12-377", "ark-bls12-377-ext", @@ -17645,7 +17645,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#fe9435db2fda7c9e2f4e29521564c72cac38f59b" +source = "git+https://github.com/paritytech/polkadot-sdk#82912acb33a9030c0ef3bf590a34fca09b72dc5f" dependencies = [ "proc-macro2", "quote", @@ -17665,7 +17665,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.19.0" -source = "git+https://github.com/paritytech/polkadot-sdk#fe9435db2fda7c9e2f4e29521564c72cac38f59b" +source = "git+https://github.com/paritytech/polkadot-sdk#82912acb33a9030c0ef3bf590a34fca09b72dc5f" dependencies = [ "environmental", "parity-scale-codec", @@ -17897,7 +17897,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#fe9435db2fda7c9e2f4e29521564c72cac38f59b" +source = "git+https://github.com/paritytech/polkadot-sdk#82912acb33a9030c0ef3bf590a34fca09b72dc5f" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -17926,7 +17926,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#fe9435db2fda7c9e2f4e29521564c72cac38f59b" +source = "git+https://github.com/paritytech/polkadot-sdk#82912acb33a9030c0ef3bf590a34fca09b72dc5f" dependencies = [ "Inflector", "proc-macro-crate", @@ -18054,7 +18054,7 @@ version = "8.0.0" [[package]] name = "sp-std" version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#fe9435db2fda7c9e2f4e29521564c72cac38f59b" +source = "git+https://github.com/paritytech/polkadot-sdk#82912acb33a9030c0ef3bf590a34fca09b72dc5f" [[package]] name = "sp-storage" @@ -18071,7 +18071,7 @@ dependencies = [ [[package]] name = "sp-storage" version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#fe9435db2fda7c9e2f4e29521564c72cac38f59b" +source = "git+https://github.com/paritytech/polkadot-sdk#82912acb33a9030c0ef3bf590a34fca09b72dc5f" dependencies = [ "impl-serde", "parity-scale-codec", @@ -18120,7 +18120,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "10.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#fe9435db2fda7c9e2f4e29521564c72cac38f59b" +source = "git+https://github.com/paritytech/polkadot-sdk#82912acb33a9030c0ef3bf590a34fca09b72dc5f" dependencies = [ "parity-scale-codec", "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", @@ -18221,7 +18221,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#fe9435db2fda7c9e2f4e29521564c72cac38f59b" +source = "git+https://github.com/paritytech/polkadot-sdk#82912acb33a9030c0ef3bf590a34fca09b72dc5f" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -20008,7 +20008,7 @@ checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", "digest 0.10.7", - "rand 0.8.5", + "rand 0.7.3", "static_assertions", ] diff --git a/substrate/primitives/core/Cargo.toml b/substrate/primitives/core/Cargo.toml index 9ecce0a22f5..25478bed2d9 100644 --- a/substrate/primitives/core/Cargo.toml +++ b/substrate/primitives/core/Cargo.toml @@ -56,7 +56,7 @@ sp-runtime-interface = { path = "../runtime-interface", default-features = false # bls crypto w3f-bls = { version = "0.1.3", default-features = false, optional = true} # bandersnatch crypto -bandersnatch_vrfs = { git = "https://github.com/w3f/ring-vrf", rev = "cbc342e", default-features = false, optional = true } +bandersnatch_vrfs = { git = "https://github.com/w3f/ring-vrf", rev = "3ddc205", default-features = false, optional = true } [dev-dependencies] criterion = "0.4.0" -- GitLab From 794ee98049f546d39923b7f34ffcb7e719ae349d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 18 Nov 2023 13:58:16 +0200 Subject: [PATCH 018/102] Bump secp256k1 from 0.24.3 to 0.28.0 (#2357) Bumps [secp256k1](https://github.com/rust-bitcoin/rust-secp256k1) from 0.24.3 to 0.28.0.
Changelog

Sourced from secp256k1's changelog.

0.28.0 - 2023-10-23

  • Add bindings to the ElligatorSwift implementation #627
  • Depend on recent release of bitcoin_hashes v0.13.0 #621
  • Add a verify function to PublicKey #618
  • Add serialize function for schnorr::Signature #607
  • Bump MSRV to 1.48 #595
  • Remove implementations of PartialEq, Eq, PartialOrd, Ord, and Hash from the impl_array_newtype macro. Users will now need to derive these traits if they are wanted.

0.27.0 - 2023-03-15

0.26.0 - 2202-12-19

  • Update libsecp25k1 to v0.2.0

0.25.0 - 2022-12-07

0.24.1 - 2022-10-25

0.24.0 - 2022-07-20

0.23.4 - 2022-07-14

0.23.3 - 2022-06-29

0.23.2 - 2022-06-27

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=secp256k1&package-manager=cargo&previous-version=0.24.3&new-version=0.28.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
--------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Liam Aharon --- Cargo.lock | 8 ++++---- substrate/primitives/core/Cargo.toml | 2 +- substrate/primitives/core/src/ecdsa.rs | 13 ++++--------- substrate/primitives/io/Cargo.toml | 2 +- substrate/primitives/io/src/lib.rs | 4 ++-- 5 files changed, 12 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ed9997101fb..ac64e65ee0e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -16602,18 +16602,18 @@ dependencies = [ [[package]] name = "secp256k1" -version = "0.24.3" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" +checksum = "2acea373acb8c21ecb5a23741452acd2593ed44ee3d343e72baaa143bc89d0d5" dependencies = [ "secp256k1-sys", ] [[package]] name = "secp256k1-sys" -version = "0.6.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" +checksum = "09e67c467c38fd24bd5499dc9a18183b31575c12ee549197e3e20d57aa4fe3b7" dependencies = [ "cc", ] diff --git a/substrate/primitives/core/Cargo.toml b/substrate/primitives/core/Cargo.toml index 25478bed2d9..34485c72ab0 100644 --- a/substrate/primitives/core/Cargo.toml +++ b/substrate/primitives/core/Cargo.toml @@ -49,7 +49,7 @@ blake2 = { version = "0.10.4", default-features = false, optional = true } libsecp256k1 = { version = "0.7", default-features = false, features = ["static-context"], optional = true } schnorrkel = { version = "0.9.1", features = ["preaudit_deprecated", "u64_backend"], default-features = false } merlin = { version = "2.0", default-features = false } -secp256k1 = { version = "0.24.0", default-features = false, features = ["recovery", "alloc"], optional = true } +secp256k1 = { version = "0.28.0", default-features = false, features = ["recovery", "alloc"], optional = true } sp-core-hashing = { path = "hashing", default-features = false, optional = true } sp-runtime-interface = { path = "../runtime-interface", default-features = false} diff --git a/substrate/primitives/core/src/ecdsa.rs b/substrate/primitives/core/src/ecdsa.rs index 603fa515a30..471714582a6 100644 --- a/substrate/primitives/core/src/ecdsa.rs +++ b/substrate/primitives/core/src/ecdsa.rs @@ -336,7 +336,7 @@ impl Signature { pub fn recover_prehashed(&self, message: &[u8; 32]) -> Option { let rid = RecoveryId::from_i32(self.0[64] as i32).ok()?; let sig = RecoverableSignature::from_compact(&self.0[..64], rid).ok()?; - let message = Message::from_slice(message).expect("Message is 32 bytes; qed"); + let message = Message::from_digest_slice(message).expect("Message is 32 bytes; qed"); #[cfg(feature = "std")] let context = SECP256K1; @@ -458,7 +458,7 @@ impl Pair { /// Sign a pre-hashed message pub fn sign_prehashed(&self, message: &[u8; 32]) -> Signature { - let message = Message::from_slice(message).expect("Message is 32 bytes; qed"); + let message = Message::from_digest_slice(message).expect("Message is 32 bytes; qed"); #[cfg(feature = "std")] let context = SECP256K1; @@ -508,12 +508,7 @@ impl Pair { #[cfg(feature = "full_crypto")] impl Drop for Pair { fn drop(&mut self) { - let ptr = self.secret.as_mut_ptr(); - for off in 0..self.secret.len() { - unsafe { - core::ptr::write_volatile(ptr.add(off), 0); - } - } + self.secret.non_secure_erase() } } @@ -760,7 +755,7 @@ mod test { let msg = [0u8; 32]; let sig1 = pair.sign_prehashed(&msg); let sig2: Signature = { - let message = Message::from_slice(&msg).unwrap(); + let message = Message::from_digest_slice(&msg).unwrap(); SECP256K1.sign_ecdsa_recoverable(&message, &pair.secret).into() }; assert_eq!(sig1, sig2); diff --git a/substrate/primitives/io/Cargo.toml b/substrate/primitives/io/Cargo.toml index 445104b736e..59df8895bb7 100644 --- a/substrate/primitives/io/Cargo.toml +++ b/substrate/primitives/io/Cargo.toml @@ -28,7 +28,7 @@ sp-trie = { path = "../trie", default-features = false, optional = true} sp-externalities = { path = "../externalities", default-features = false} sp-tracing = { path = "../tracing", default-features = false} log = { version = "0.4.17", optional = true } -secp256k1 = { version = "0.24.0", features = ["recovery", "global-context"], optional = true } +secp256k1 = { version = "0.28.0", features = ["recovery", "global-context"], optional = true } tracing = { version = "0.1.29", default-features = false } tracing-core = { version = "0.1.28", default-features = false} diff --git a/substrate/primitives/io/src/lib.rs b/substrate/primitives/io/src/lib.rs index c4182d6ab3a..a300152ee66 100644 --- a/substrate/primitives/io/src/lib.rs +++ b/substrate/primitives/io/src/lib.rs @@ -1139,7 +1139,7 @@ pub trait Crypto { .map_err(|_| EcdsaVerifyError::BadV)?; let sig = RecoverableSignature::from_compact(&sig[..64], rid) .map_err(|_| EcdsaVerifyError::BadRS)?; - let msg = Message::from_slice(msg).expect("Message is 32 bytes; qed"); + let msg = Message::from_digest_slice(msg).expect("Message is 32 bytes; qed"); let pubkey = SECP256K1 .recover_ecdsa(&msg, &sig) .map_err(|_| EcdsaVerifyError::BadSignature)?; @@ -1185,7 +1185,7 @@ pub trait Crypto { .map_err(|_| EcdsaVerifyError::BadV)?; let sig = RecoverableSignature::from_compact(&sig[..64], rid) .map_err(|_| EcdsaVerifyError::BadRS)?; - let msg = Message::from_slice(msg).expect("Message is 32 bytes; qed"); + let msg = Message::from_digest_slice(msg).expect("Message is 32 bytes; qed"); let pubkey = SECP256K1 .recover_ecdsa(&msg, &sig) .map_err(|_| EcdsaVerifyError::BadSignature)?; -- GitLab From b5858936e13a8adc800655478c965daf54dbdc71 Mon Sep 17 00:00:00 2001 From: Julian Eager Date: Mon, 20 Nov 2023 02:04:22 +0800 Subject: [PATCH 019/102] Preserve artifact cache unless stale (#1918) Co-authored-by: Marcin S --- Cargo.lock | 8 +- .../node/core/candidate-validation/src/lib.rs | 6 +- .../core/candidate-validation/src/tests.rs | 12 +- polkadot/node/core/pvf/Cargo.toml | 1 + .../benches/host_prepare_rococo_runtime.rs | 2 +- polkadot/node/core/pvf/common/Cargo.toml | 3 + polkadot/node/core/pvf/common/build.rs | 19 + polkadot/node/core/pvf/common/src/error.rs | 18 +- polkadot/node/core/pvf/common/src/lib.rs | 2 + polkadot/node/core/pvf/common/src/prepare.rs | 19 + polkadot/node/core/pvf/common/src/pvf.rs | 2 +- .../node/core/pvf/prepare-worker/Cargo.toml | 1 + .../node/core/pvf/prepare-worker/src/lib.rs | 37 +- polkadot/node/core/pvf/src/artifacts.rs | 383 +++++++++++++----- polkadot/node/core/pvf/src/host.rs | 125 +++--- polkadot/node/core/pvf/src/lib.rs | 2 +- polkadot/node/core/pvf/src/prepare/pool.rs | 10 +- polkadot/node/core/pvf/src/prepare/queue.rs | 28 +- .../node/core/pvf/src/prepare/worker_intf.rs | 61 +-- polkadot/node/core/pvf/src/worker_intf.rs | 4 +- polkadot/node/core/pvf/tests/it/main.rs | 5 +- .../utils/build-script-utils/src/version.rs | 31 ++ 22 files changed, 535 insertions(+), 244 deletions(-) create mode 100644 polkadot/node/core/pvf/common/build.rs diff --git a/Cargo.lock b/Cargo.lock index ac64e65ee0e..b2d655e6f41 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1585,16 +1585,15 @@ dependencies = [ [[package]] name = "blake3" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "199c42ab6972d92c9f8995f086273d25c42fc0f7b2a1fcefba465c1352d25ba5" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" dependencies = [ "arrayref", "arrayvec 0.7.4", "cc", "cfg-if", "constant_time_eq 0.3.0", - "digest 0.10.7", ] [[package]] @@ -12568,6 +12567,7 @@ version = "1.0.0" dependencies = [ "always-assert", "assert_matches", + "blake3", "cfg-if", "criterion 0.4.0", "futures", @@ -12646,6 +12646,7 @@ dependencies = [ "sp-externalities 0.19.0", "sp-io", "sp-tracing 10.0.0", + "substrate-build-script-utils", "tempfile", "thiserror", "tracing-gum", @@ -12670,6 +12671,7 @@ dependencies = [ name = "polkadot-node-core-pvf-prepare-worker" version = "1.0.0" dependencies = [ + "blake3", "cfg-if", "criterion 0.4.0", "libc", diff --git a/polkadot/node/core/candidate-validation/src/lib.rs b/polkadot/node/core/candidate-validation/src/lib.rs index a3d6f047313..96ab07d3b82 100644 --- a/polkadot/node/core/candidate-validation/src/lib.rs +++ b/polkadot/node/core/candidate-validation/src/lib.rs @@ -25,7 +25,7 @@ use polkadot_node_core_pvf::{ InternalValidationError, InvalidCandidate as WasmInvalidCandidate, PrepareError, - PrepareJobKind, PrepareStats, PvfPrepData, ValidationError, ValidationHost, + PrepareJobKind, PvfPrepData, ValidationError, ValidationHost, }; use polkadot_node_primitives::{ BlockData, InvalidCandidate, PoV, ValidationResult, POV_BOMB_LIMIT, VALIDATION_CODE_BOMB_LIMIT, @@ -794,7 +794,7 @@ trait ValidationBackend { validation_result } - async fn precheck_pvf(&mut self, pvf: PvfPrepData) -> Result; + async fn precheck_pvf(&mut self, pvf: PvfPrepData) -> Result<(), PrepareError>; } #[async_trait] @@ -824,7 +824,7 @@ impl ValidationBackend for ValidationHost { })? } - async fn precheck_pvf(&mut self, pvf: PvfPrepData) -> Result { + async fn precheck_pvf(&mut self, pvf: PvfPrepData) -> Result<(), PrepareError> { let (tx, rx) = oneshot::channel(); if let Err(err) = self.precheck_pvf(pvf, tx).await { // Return an IO error if there was an error communicating with the host. diff --git a/polkadot/node/core/candidate-validation/src/tests.rs b/polkadot/node/core/candidate-validation/src/tests.rs index cab823e1e63..801c581938a 100644 --- a/polkadot/node/core/candidate-validation/src/tests.rs +++ b/polkadot/node/core/candidate-validation/src/tests.rs @@ -377,7 +377,7 @@ impl ValidationBackend for MockValidateCandidateBackend { result } - async fn precheck_pvf(&mut self, _pvf: PvfPrepData) -> Result { + async fn precheck_pvf(&mut self, _pvf: PvfPrepData) -> Result<(), PrepareError> { unreachable!() } } @@ -1014,11 +1014,11 @@ fn pov_decompression_failure_is_invalid() { } struct MockPreCheckBackend { - result: Result, + result: Result<(), PrepareError>, } impl MockPreCheckBackend { - fn with_hardcoded_result(result: Result) -> Self { + fn with_hardcoded_result(result: Result<(), PrepareError>) -> Self { Self { result } } } @@ -1034,7 +1034,7 @@ impl ValidationBackend for MockPreCheckBackend { unreachable!() } - async fn precheck_pvf(&mut self, _pvf: PvfPrepData) -> Result { + async fn precheck_pvf(&mut self, _pvf: PvfPrepData) -> Result<(), PrepareError> { self.result.clone() } } @@ -1051,7 +1051,7 @@ fn precheck_works() { let (check_fut, check_result) = precheck_pvf( ctx.sender(), - MockPreCheckBackend::with_hardcoded_result(Ok(PrepareStats::default())), + MockPreCheckBackend::with_hardcoded_result(Ok(())), relay_parent, validation_code_hash, ) @@ -1113,7 +1113,7 @@ fn precheck_invalid_pvf_blob_compression() { let (check_fut, check_result) = precheck_pvf( ctx.sender(), - MockPreCheckBackend::with_hardcoded_result(Ok(PrepareStats::default())), + MockPreCheckBackend::with_hardcoded_result(Ok(())), relay_parent, validation_code_hash, ) diff --git a/polkadot/node/core/pvf/Cargo.toml b/polkadot/node/core/pvf/Cargo.toml index 3e72ca9e532..27da484fe4f 100644 --- a/polkadot/node/core/pvf/Cargo.toml +++ b/polkadot/node/core/pvf/Cargo.toml @@ -8,6 +8,7 @@ license.workspace = true [dependencies] always-assert = "0.1" +blake3 = "1.5" cfg-if = "1.0" futures = "0.3.21" futures-timer = "3.0.2" diff --git a/polkadot/node/core/pvf/benches/host_prepare_rococo_runtime.rs b/polkadot/node/core/pvf/benches/host_prepare_rococo_runtime.rs index 378374a10b3..c02a0b595da 100644 --- a/polkadot/node/core/pvf/benches/host_prepare_rococo_runtime.rs +++ b/polkadot/node/core/pvf/benches/host_prepare_rococo_runtime.rs @@ -56,7 +56,7 @@ impl TestHost { &self, code: &[u8], executor_params: ExecutorParams, - ) -> Result { + ) -> Result<(), PrepareError> { let (result_tx, result_rx) = futures::channel::oneshot::channel(); let code = sp_maybe_compressed_blob::decompress(code, 16 * 1024 * 1024) diff --git a/polkadot/node/core/pvf/common/Cargo.toml b/polkadot/node/core/pvf/common/Cargo.toml index e3fda06963e..bfe1be9156f 100644 --- a/polkadot/node/core/pvf/common/Cargo.toml +++ b/polkadot/node/core/pvf/common/Cargo.toml @@ -36,6 +36,9 @@ seccompiler = "0.4.0" assert_matches = "1.4.0" tempfile = "3.3.0" +[build-dependencies] +substrate-build-script-utils = { path = "../../../../../substrate/utils/build-script-utils" } + [features] # This feature is used to export test code to other crates without putting it in the production build. test-utils = [] diff --git a/polkadot/node/core/pvf/common/build.rs b/polkadot/node/core/pvf/common/build.rs new file mode 100644 index 00000000000..5531ad411da --- /dev/null +++ b/polkadot/node/core/pvf/common/build.rs @@ -0,0 +1,19 @@ +// Copyright (C) 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 . + +fn main() { + substrate_build_script_utils::generate_wasmtime_version(); +} diff --git a/polkadot/node/core/pvf/common/src/error.rs b/polkadot/node/core/pvf/common/src/error.rs index 34475c481f7..6bf05ece78e 100644 --- a/polkadot/node/core/pvf/common/src/error.rs +++ b/polkadot/node/core/pvf/common/src/error.rs @@ -14,16 +14,24 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use crate::prepare::PrepareStats; +use crate::prepare::{PrepareSuccess, PrepareWorkerSuccess}; use parity_scale_codec::{Decode, Encode}; use std::fmt; -/// Result of PVF preparation performed by the validation host. Contains stats about the preparation -/// if successful -pub type PrepareResult = Result; +/// Result of PVF preparation from a worker, with checksum of the compiled PVF and stats of the +/// preparation if successful. +pub type PrepareWorkerResult = Result; + +/// Result of PVF preparation propagated all the way back to the host, with path to the concluded +/// artifact and stats of the preparation if successful. +pub type PrepareResult = Result; + +/// Result of prechecking PVF performed by the validation host. Contains stats about the preparation +/// if successful. +pub type PrecheckResult = Result<(), PrepareError>; /// An error that occurred during the prepare part of the PVF pipeline. -// Codec indexes are intended to stabilize pre-encoded payloads (see `OOM_PAYLOAD` below) +// Codec indexes are intended to stabilize pre-encoded payloads (see `OOM_PAYLOAD`) #[derive(Debug, Clone, Encode, Decode)] pub enum PrepareError { /// During the prevalidation stage of preparation an issue was found with the PVF. diff --git a/polkadot/node/core/pvf/common/src/lib.rs b/polkadot/node/core/pvf/common/src/lib.rs index e2211b97d87..282d2f7c41d 100644 --- a/polkadot/node/core/pvf/common/src/lib.rs +++ b/polkadot/node/core/pvf/common/src/lib.rs @@ -31,6 +31,8 @@ pub use sp_tracing; const LOG_TARGET: &str = "parachain::pvf-common"; +pub const RUNTIME_VERSION: &str = env!("SUBSTRATE_WASMTIME_VERSION"); + use std::{ io::{self, Read, Write}, mem, diff --git a/polkadot/node/core/pvf/common/src/prepare.rs b/polkadot/node/core/pvf/common/src/prepare.rs index 4436ebe4861..28ab682ec13 100644 --- a/polkadot/node/core/pvf/common/src/prepare.rs +++ b/polkadot/node/core/pvf/common/src/prepare.rs @@ -15,6 +15,25 @@ // along with Polkadot. If not, see . use parity_scale_codec::{Decode, Encode}; +use std::path::PathBuf; + +/// Result from prepare worker if successful. +#[derive(Debug, Clone, Default, Encode, Decode)] +pub struct PrepareWorkerSuccess { + /// Checksum of the compiled PVF. + pub checksum: String, + /// Stats of the current preparation run. + pub stats: PrepareStats, +} + +/// Result of PVF preparation if successful. +#[derive(Debug, Clone, Default)] +pub struct PrepareSuccess { + /// Canonical path to the compiled artifact. + pub path: PathBuf, + /// Stats of the current preparation run. + pub stats: PrepareStats, +} /// Preparation statistics, including the CPU time and memory taken. #[derive(Debug, Clone, Default, Encode, Decode)] diff --git a/polkadot/node/core/pvf/common/src/pvf.rs b/polkadot/node/core/pvf/common/src/pvf.rs index 0cc86434c19..2d8f6430187 100644 --- a/polkadot/node/core/pvf/common/src/pvf.rs +++ b/polkadot/node/core/pvf/common/src/pvf.rs @@ -115,7 +115,7 @@ impl fmt::Debug for PvfPrepData { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!( f, - "Pvf {{ code, code_hash: {:?}, executor_params: {:?}, prep_timeout: {:?} }}", + "Pvf {{ code: [...], code_hash: {:?}, executor_params: {:?}, prep_timeout: {:?} }}", self.code_hash, self.executor_params, self.prep_timeout ) } diff --git a/polkadot/node/core/pvf/prepare-worker/Cargo.toml b/polkadot/node/core/pvf/prepare-worker/Cargo.toml index 1cd221533f4..005f2e93511 100644 --- a/polkadot/node/core/pvf/prepare-worker/Cargo.toml +++ b/polkadot/node/core/pvf/prepare-worker/Cargo.toml @@ -7,6 +7,7 @@ edition.workspace = true license.workspace = true [dependencies] +blake3 = "1.5" cfg-if = "1.0" gum = { package = "tracing-gum", path = "../../../gum" } libc = "0.2.139" diff --git a/polkadot/node/core/pvf/prepare-worker/src/lib.rs b/polkadot/node/core/pvf/prepare-worker/src/lib.rs index 151b54efc2d..34e6a78c26a 100644 --- a/polkadot/node/core/pvf/prepare-worker/src/lib.rs +++ b/polkadot/node/core/pvf/prepare-worker/src/lib.rs @@ -40,10 +40,10 @@ use nix::{ use os_pipe::{self, PipeReader, PipeWriter}; use parity_scale_codec::{Decode, Encode}; use polkadot_node_core_pvf_common::{ - error::{PrepareError, PrepareResult}, + error::{PrepareError, PrepareWorkerResult}, executor_intf::create_runtime_from_artifact_bytes, framed_recv_blocking, framed_send_blocking, - prepare::{MemoryStats, PrepareJobKind, PrepareStats}, + prepare::{MemoryStats, PrepareJobKind, PrepareStats, PrepareWorkerSuccess}, pvf::PvfPrepData, worker::{ cpu_time_monitor_loop, run_worker, stringify_panic_payload, @@ -106,7 +106,7 @@ fn recv_request(stream: &mut UnixStream) -> io::Result { } /// Send a worker response. -fn send_response(stream: &mut UnixStream, result: PrepareResult) -> io::Result<()> { +fn send_response(stream: &mut UnixStream, result: PrepareWorkerResult) -> io::Result<()> { framed_send_blocking(stream, &result.encode()) } @@ -186,8 +186,8 @@ fn end_memory_tracking() -> isize { /// /// 7. If compilation succeeded, write the compiled artifact into a temporary file. /// -/// 8. Send the result of preparation back to the host. If any error occurred in the above steps, we -/// send that in the `PrepareResult`. +/// 8. Send the result of preparation back to the host, including the checksum of the artifact. If +/// any error occurred in the above steps, we send that in the `PrepareWorkerResult`. pub fn worker_entrypoint( socket_path: PathBuf, worker_dir_path: PathBuf, @@ -439,11 +439,11 @@ fn handle_child_process( Err(err) => Err(err), Ok(ok) => { cfg_if::cfg_if! { - if #[cfg(target_os = "linux")] { - let (artifact, max_rss) = ok; - } else { - let artifact = ok; - } + if #[cfg(target_os = "linux")] { + let (artifact, max_rss) = ok; + } else { + let artifact = ok; + } } // Stop the memory stats worker and get its observed memory stats. @@ -511,7 +511,7 @@ fn handle_parent_process( worker_pid: u32, usage_before: Usage, timeout: Duration, -) -> Result { +) -> Result { // Read from the child. Don't decode unless the process exited normally, which we check later. let mut received_data = Vec::new(); pipe_read @@ -554,7 +554,7 @@ fn handle_parent_process( match result { Err(err) => Err(err), - Ok(response) => { + Ok(JobResponse { artifact, memory_stats }) => { // The exit status should have been zero if no error occurred. if exit_status != 0 { return Err(PrepareError::JobError(format!( @@ -577,13 +577,14 @@ fn handle_parent_process( temp_artifact_dest.display(), ); // Write to the temp file created by the host. - if let Err(err) = fs::write(&temp_artifact_dest, &response.artifact) { + if let Err(err) = fs::write(&temp_artifact_dest, &artifact) { return Err(PrepareError::IoErr(err.to_string())) }; - Ok(PrepareStats { - memory_stats: response.memory_stats, - cpu_time_elapsed: cpu_tv, + let checksum = blake3::hash(&artifact.as_ref()).to_hex().to_string(); + Ok(PrepareWorkerSuccess { + checksum, + stats: PrepareStats { memory_stats, cpu_time_elapsed: cpu_tv }, }) }, } @@ -657,13 +658,13 @@ fn error_from_errno(context: &'static str, errno: Errno) -> PrepareError { type JobResult = Result; -/// Pre-encoded length-prefixed `Result::Err(PrepareError::OutOfMemory)` +/// Pre-encoded length-prefixed `JobResult::Err(PrepareError::OutOfMemory)` const OOM_PAYLOAD: &[u8] = b"\x02\x00\x00\x00\x00\x00\x00\x00\x01\x08"; #[test] fn pre_encoded_payloads() { // NOTE: This must match the type of `response` in `send_child_response`. - let oom_unencoded: JobResult = Result::Err(PrepareError::OutOfMemory); + let oom_unencoded: JobResult = JobResult::Err(PrepareError::OutOfMemory); let oom_encoded = oom_unencoded.encode(); // The payload is prefixed with its length in `framed_send`. let mut oom_payload = oom_encoded.len().to_le_bytes().to_vec(); diff --git a/polkadot/node/core/pvf/src/artifacts.rs b/polkadot/node/core/pvf/src/artifacts.rs index dd83f76494e..53085eade3c 100644 --- a/polkadot/node/core/pvf/src/artifacts.rs +++ b/polkadot/node/core/pvf/src/artifacts.rs @@ -16,10 +16,10 @@ //! PVF artifacts (final compiled code blobs). //! -//! # Lifecycle of an artifact +//! # Lifecycle of an artifact //! -//! 1. During node start-up, the artifacts cache is cleaned up. This means that all local artifacts -//! stored on-disk are cleared, and we start with an empty [`Artifacts`] table. +//! 1. During node start-up, we will check the cached artifacts, if any. The stale and corrupted +//! ones are pruned. The valid ones are registered in the [`Artifacts`] table. //! //! 2. In order to be executed, a PVF should be prepared first. This means that artifacts should //! have an [`ArtifactState::Prepared`] entry for that artifact in the table. If not, the @@ -55,18 +55,29 @@ //! older by a predefined parameter. This process is run very rarely (say, once a day). Once the //! artifact is expired it is removed from disk eagerly atomically. -use crate::host::PrepareResultSender; +use crate::{host::PrecheckResultSender, LOG_TARGET}; use always_assert::always; -use polkadot_node_core_pvf_common::{error::PrepareError, prepare::PrepareStats, pvf::PvfPrepData}; +use polkadot_core_primitives::Hash; +use polkadot_node_core_pvf_common::{ + error::PrepareError, prepare::PrepareStats, pvf::PvfPrepData, RUNTIME_VERSION, +}; use polkadot_node_primitives::NODE_VERSION; use polkadot_parachain_primitives::primitives::ValidationCodeHash; use polkadot_primitives::ExecutorParamsHash; use std::{ collections::HashMap, path::{Path, PathBuf}, + str::FromStr as _, time::{Duration, SystemTime}, }; +const RUNTIME_PREFIX: &str = "wasmtime_v"; +const NODE_PREFIX: &str = "polkadot_v"; + +fn artifact_prefix() -> String { + format!("{}{}_{}{}", RUNTIME_PREFIX, RUNTIME_VERSION, NODE_PREFIX, NODE_VERSION) +} + /// Identifier of an artifact. Encodes a code hash of the PVF and a hash of executor parameter set. #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct ArtifactId { @@ -75,9 +86,6 @@ pub struct ArtifactId { } impl ArtifactId { - const PREFIX: &'static str = "wasmtime_"; - const NODE_VERSION_PREFIX: &'static str = "polkadot_v"; - /// Creates a new artifact ID with the given hash. pub fn new(code_hash: ValidationCodeHash, executor_params_hash: ExecutorParamsHash) -> Self { Self { code_hash, executor_params_hash } @@ -88,38 +96,34 @@ impl ArtifactId { Self::new(pvf.code_hash(), pvf.executor_params().hash()) } - /// Tries to recover the artifact id from the given file name. - #[cfg(test)] - pub fn from_file_name(file_name: &str) -> Option { - use polkadot_core_primitives::Hash; - use std::str::FromStr as _; - - let file_name = - file_name.strip_prefix(Self::PREFIX)?.strip_prefix(Self::NODE_VERSION_PREFIX)?; - - // [ node version | code hash | param hash ] - let parts: Vec<&str> = file_name.split('_').collect(); - let (_node_ver, code_hash_str, executor_params_hash_str) = (parts[0], parts[1], parts[2]); - - let code_hash = Hash::from_str(code_hash_str).ok()?.into(); - let executor_params_hash = - ExecutorParamsHash::from_hash(Hash::from_str(executor_params_hash_str).ok()?); - - Some(Self { code_hash, executor_params_hash }) - } - - /// Returns the expected path to this artifact given the root of the cache. - pub fn path(&self, cache_path: &Path) -> PathBuf { + /// Returns the canonical path to the concluded artifact. + pub(crate) fn path(&self, cache_path: &Path, checksum: &str) -> PathBuf { let file_name = format!( - "{}{}{}_{:#x}_{:#x}", - Self::PREFIX, - Self::NODE_VERSION_PREFIX, - NODE_VERSION, + "{}_{:#x}_{:#x}_0x{}", + artifact_prefix(), self.code_hash, - self.executor_params_hash + self.executor_params_hash, + checksum ); cache_path.join(file_name) } + + /// Tries to recover the artifact id from the given file name. + /// Return `None` if the given file name is invalid. + /// VALID_NAME := _ _ _ + fn from_file_name(file_name: &str) -> Option { + let file_name = file_name.strip_prefix(&artifact_prefix())?.strip_prefix('_')?; + let parts: Vec<&str> = file_name.split('_').collect(); + + if let [code_hash, param_hash, _checksum] = parts[..] { + let code_hash = Hash::from_str(code_hash).ok()?.into(); + let executor_params_hash = + ExecutorParamsHash::from_hash(Hash::from_str(param_hash).ok()?); + return Some(Self { code_hash, executor_params_hash }) + } + + None + } } /// A bundle of the artifact ID and the path. @@ -136,8 +140,8 @@ pub struct ArtifactPathId { } impl ArtifactPathId { - pub(crate) fn new(artifact_id: ArtifactId, cache_path: &Path) -> Self { - Self { path: artifact_id.path(cache_path), id: artifact_id } + pub(crate) fn new(artifact_id: ArtifactId, path: &Path) -> Self { + Self { id: artifact_id, path: path.to_owned() } } } @@ -148,6 +152,8 @@ pub enum ArtifactState { /// That means that the artifact should be accessible through the path obtained by the artifact /// id (unless, it was removed externally). Prepared { + /// The path of the compiled artifact. + path: PathBuf, /// The time when the artifact was last needed. /// /// This is updated when we get the heads up for this artifact or when we just discover @@ -159,7 +165,7 @@ pub enum ArtifactState { /// A task to prepare this artifact is scheduled. Preparing { /// List of result senders that are waiting for a response. - waiting_for_response: Vec, + waiting_for_response: Vec, /// The number of times this artifact has failed to prepare. num_failures: u32, }, @@ -177,32 +183,148 @@ pub enum ArtifactState { /// A container of all known artifact ids and their states. pub struct Artifacts { - artifacts: HashMap, + inner: HashMap, } impl Artifacts { - /// Initialize a blank cache at the given path. This will clear everything present at the - /// given path, to be populated over time. - /// - /// The recognized artifacts will be filled in the table and unrecognized will be removed. - pub async fn new(cache_path: &Path) -> Self { - // First delete the entire cache. This includes artifacts and any leftover worker dirs (see - // [`WorkerDir`]). Nodes are long-running so this should populate shortly. - let _ = tokio::fs::remove_dir_all(cache_path).await; + #[cfg(test)] + pub(crate) fn empty() -> Self { + Self { inner: HashMap::new() } + } + + #[cfg(test)] + pub(crate) fn len(&self) -> usize { + self.inner.len() + } + + /// Create an empty table and populate it with valid artifacts as [`ArtifactState::Prepared`], + /// if any. The existing caches will be checked by their file name to determine whether they are + /// valid, e.g., matching the current node version. The ones deemed invalid will be pruned. + pub async fn new_and_prune(cache_path: &Path) -> Self { + let mut artifacts = Self { inner: HashMap::new() }; + artifacts.insert_and_prune(cache_path).await; + artifacts + } + + async fn insert_and_prune(&mut self, cache_path: &Path) { + async fn is_corrupted(path: &Path) -> bool { + let checksum = match tokio::fs::read(path).await { + Ok(bytes) => blake3::hash(&bytes), + Err(err) => { + // just remove the file if we cannot read it + gum::warn!( + target: LOG_TARGET, + ?err, + "unable to read artifact {:?} when checking integrity, removing...", + path, + ); + return true + }, + }; + + if let Some(file_name) = path.file_name() { + if let Some(file_name) = file_name.to_str() { + return !file_name.ends_with(checksum.to_hex().as_str()) + } + } + true + } + + // Insert the entry into the artifacts table if it is valid. + // Otherwise, prune it. + async fn insert_or_prune( + artifacts: &mut Artifacts, + entry: &tokio::fs::DirEntry, + cache_path: &Path, + ) { + let file_type = entry.file_type().await; + let file_name = entry.file_name(); + + match file_type { + Ok(file_type) => + if !file_type.is_file() { + return + }, + Err(err) => { + gum::warn!( + target: LOG_TARGET, + ?err, + "unable to get file type for {:?}", + file_name, + ); + return + }, + } + + if let Some(file_name) = file_name.to_str() { + let id = ArtifactId::from_file_name(file_name); + let path = cache_path.join(file_name); + + if id.is_none() || is_corrupted(&path).await { + gum::warn!( + target: LOG_TARGET, + "discarding invalid artifact {:?}", + &path, + ); + let _ = tokio::fs::remove_file(&path).await; + return + } + + if let Some(id) = id { + gum::debug!( + target: LOG_TARGET, + "reusing existing {:?} for node version v{}", + &path, + NODE_VERSION, + ); + artifacts.insert_prepared(id, path, SystemTime::now(), Default::default()); + } + } else { + gum::warn!( + target: LOG_TARGET, + "non-Unicode file name {:?} found in {:?}", + file_name, + cache_path, + ); + } + } + // Make sure that the cache path directory and all its parents are created. let _ = tokio::fs::create_dir_all(cache_path).await; - Self { artifacts: HashMap::new() } - } + let mut dir = match tokio::fs::read_dir(cache_path).await { + Ok(dir) => dir, + Err(err) => { + gum::error!( + target: LOG_TARGET, + ?err, + "failed to read dir {:?}", + cache_path, + ); + return + }, + }; - #[cfg(test)] - pub(crate) fn empty() -> Self { - Self { artifacts: HashMap::new() } + loop { + match dir.next_entry().await { + Ok(Some(entry)) => insert_or_prune(self, &entry, cache_path).await, + Ok(None) => break, + Err(err) => { + gum::warn!( + target: LOG_TARGET, + ?err, + "error processing artifacts in {:?}", + cache_path, + ); + break + }, + } + } } /// Returns the state of the given artifact by its ID. pub fn artifact_state_mut(&mut self, artifact_id: &ArtifactId) -> Option<&mut ArtifactState> { - self.artifacts.get_mut(artifact_id) + self.inner.get_mut(artifact_id) } /// Inform the table about the artifact with the given ID. The state will be set to "preparing". @@ -212,53 +334,52 @@ impl Artifacts { pub fn insert_preparing( &mut self, artifact_id: ArtifactId, - waiting_for_response: Vec, + waiting_for_response: Vec, ) { // See the precondition. always!(self - .artifacts + .inner .insert(artifact_id, ArtifactState::Preparing { waiting_for_response, num_failures: 0 }) .is_none()); } /// Insert an artifact with the given ID as "prepared". /// - /// This function must be used only for brand-new artifacts and should never be used for - /// replacing existing ones. - #[cfg(test)] - pub fn insert_prepared( + /// This function should only be used to build the artifact table at startup with valid + /// artifact caches. + pub(crate) fn insert_prepared( &mut self, artifact_id: ArtifactId, + path: PathBuf, last_time_needed: SystemTime, prepare_stats: PrepareStats, ) { // See the precondition. always!(self - .artifacts - .insert(artifact_id, ArtifactState::Prepared { last_time_needed, prepare_stats }) + .inner + .insert(artifact_id, ArtifactState::Prepared { path, last_time_needed, prepare_stats }) .is_none()); } - /// Remove and retrieve the artifacts from the table that are older than the supplied - /// Time-To-Live. - pub fn prune(&mut self, artifact_ttl: Duration) -> Vec { + /// Remove artifacts older than the given TTL and return id and path of the removed ones. + pub fn prune(&mut self, artifact_ttl: Duration) -> Vec<(ArtifactId, PathBuf)> { let now = SystemTime::now(); let mut to_remove = vec![]; - for (k, v) in self.artifacts.iter() { - if let ArtifactState::Prepared { last_time_needed, .. } = *v { + for (k, v) in self.inner.iter() { + if let ArtifactState::Prepared { last_time_needed, ref path, .. } = *v { if now .duration_since(last_time_needed) .map(|age| age > artifact_ttl) .unwrap_or(false) { - to_remove.push(k.clone()); + to_remove.push((k.clone(), path.clone())); } } } for artifact in &to_remove { - self.artifacts.remove(artifact); + self.inner.remove(&artifact.0); } to_remove @@ -267,13 +388,72 @@ impl Artifacts { #[cfg(test)] mod tests { - use super::{ArtifactId, Artifacts, NODE_VERSION}; + use super::{artifact_prefix as prefix, ArtifactId, Artifacts, NODE_VERSION, RUNTIME_VERSION}; use polkadot_primitives::ExecutorParamsHash; + use rand::Rng; use sp_core::H256; - use std::{path::Path, str::FromStr}; + use std::{ + fs, + io::Write, + path::{Path, PathBuf}, + str::FromStr, + }; + + fn rand_hash(len: usize) -> String { + let mut rng = rand::thread_rng(); + let hex: Vec<_> = "0123456789abcdef".chars().collect(); + (0..len).map(|_| hex[rng.gen_range(0..hex.len())]).collect() + } + + fn file_name(code_hash: &str, param_hash: &str, checksum: &str) -> String { + format!("{}_0x{}_0x{}_0x{}", prefix(), code_hash, param_hash, checksum) + } - fn file_name(code_hash: &str, param_hash: &str) -> String { - format!("wasmtime_polkadot_v{}_0x{}_0x{}", NODE_VERSION, code_hash, param_hash) + fn create_artifact( + dir: impl AsRef, + prefix: &str, + code_hash: impl AsRef, + params_hash: impl AsRef, + ) -> (PathBuf, String) { + fn artifact_path_without_checksum( + dir: impl AsRef, + prefix: &str, + code_hash: impl AsRef, + params_hash: impl AsRef, + ) -> PathBuf { + let mut path = dir.as_ref().to_path_buf(); + let file_name = + format!("{}_0x{}_0x{}", prefix, code_hash.as_ref(), params_hash.as_ref(),); + path.push(file_name); + path + } + + let (code_hash, params_hash) = (code_hash.as_ref(), params_hash.as_ref()); + let path = artifact_path_without_checksum(dir, prefix, code_hash, params_hash); + let mut file = fs::File::create(&path).unwrap(); + + let content = format!("{}{}", code_hash, params_hash).into_bytes(); + file.write_all(&content).unwrap(); + let checksum = blake3::hash(&content).to_hex().to_string(); + + (path, checksum) + } + + fn create_rand_artifact(dir: impl AsRef, prefix: &str) -> (PathBuf, String) { + create_artifact(dir, prefix, rand_hash(64), rand_hash(64)) + } + + fn concluded_path(path: impl AsRef, checksum: &str) -> PathBuf { + let path = path.as_ref(); + let mut file_name = path.file_name().unwrap().to_os_string(); + file_name.push("_0x"); + file_name.push(checksum); + path.with_file_name(file_name) + } + + #[test] + fn artifact_prefix() { + assert_eq!(prefix(), format!("wasmtime_v{}_polkadot_v{}", RUNTIME_VERSION, NODE_VERSION)); } #[test] @@ -284,6 +464,7 @@ mod tests { let file_name = file_name( "0022800000000000000000000000000000000000000000000000000000000000", "0033900000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000", ); assert_eq!( @@ -305,40 +486,54 @@ mod tests { let dir = Path::new("/test"); let code_hash = "1234567890123456789012345678901234567890123456789012345678901234"; let params_hash = "4321098765432109876543210987654321098765432109876543210987654321"; - let file_name = file_name(code_hash, params_hash); + let checksum = "34567890123456789012345678901234"; + let file_name = file_name(code_hash, params_hash, checksum); let code_hash = H256::from_str(code_hash).unwrap(); let params_hash = H256::from_str(params_hash).unwrap(); + let path = ArtifactId::new(code_hash.into(), ExecutorParamsHash::from_hash(params_hash)) + .path(dir, checksum); - assert_eq!( - ArtifactId::new(code_hash.into(), ExecutorParamsHash::from_hash(params_hash)) - .path(dir) - .to_str(), - Some(format!("/test/{}", file_name).as_str()), - ); + assert_eq!(path.to_str().unwrap(), format!("/test/{}", file_name)); } #[tokio::test] - async fn artifacts_removes_cache_on_startup() { - let fake_cache_path = crate::worker_intf::tmppath("test-cache").await.unwrap(); - let fake_artifact_path = { - let mut p = fake_cache_path.clone(); - p.push("wasmtime_0x1234567890123456789012345678901234567890123456789012345678901234"); - p - }; + async fn remove_stale_cache_on_startup() { + let cache_dir = crate::worker_intf::tmppath("test-cache").await.unwrap(); + fs::create_dir_all(&cache_dir).unwrap(); + + // invalid prefix + create_rand_artifact(&cache_dir, ""); + create_rand_artifact(&cache_dir, "wasmtime_polkadot_v"); + create_rand_artifact(&cache_dir, "wasmtime_v8.0.0_polkadot_v1.0.0"); + + let prefix = prefix(); + + // no checksum + create_rand_artifact(&cache_dir, &prefix); + + // invalid hashes + let (path, checksum) = create_artifact(&cache_dir, &prefix, "000", "000001"); + let new_path = concluded_path(&path, &checksum); + fs::rename(&path, &new_path).unwrap(); - // create a tmp cache with 1 artifact. + // checksum tampered + let (path, checksum) = create_rand_artifact(&cache_dir, &prefix); + let new_path = concluded_path(&path, checksum.chars().rev().collect::().as_str()); + fs::rename(&path, &new_path).unwrap(); - std::fs::create_dir_all(&fake_cache_path).unwrap(); - std::fs::File::create(fake_artifact_path).unwrap(); + // valid + let (path, checksum) = create_rand_artifact(&cache_dir, &prefix); + let new_path = concluded_path(&path, &checksum); + fs::rename(&path, &new_path).unwrap(); - // this should remove it and re-create. + assert_eq!(fs::read_dir(&cache_dir).unwrap().count(), 7); - let p = &fake_cache_path; - Artifacts::new(p).await; + let artifacts = Artifacts::new_and_prune(&cache_dir).await; - assert_eq!(std::fs::read_dir(&fake_cache_path).unwrap().count(), 0); + assert_eq!(fs::read_dir(&cache_dir).unwrap().count(), 1); + assert_eq!(artifacts.len(), 1); - std::fs::remove_dir_all(fake_cache_path).unwrap(); + fs::remove_dir_all(cache_dir).unwrap(); } } diff --git a/polkadot/node/core/pvf/src/host.rs b/polkadot/node/core/pvf/src/host.rs index 5919b9ba32c..f67934e4171 100644 --- a/polkadot/node/core/pvf/src/host.rs +++ b/polkadot/node/core/pvf/src/host.rs @@ -32,14 +32,15 @@ use futures::{ Future, FutureExt, SinkExt, StreamExt, }; use polkadot_node_core_pvf_common::{ - error::{PrepareError, PrepareResult}, + error::{PrecheckResult, PrepareError}, + prepare::PrepareSuccess, pvf::PvfPrepData, }; use polkadot_node_subsystem::SubsystemResult; use polkadot_parachain_primitives::primitives::ValidationResult; use std::{ collections::HashMap, - path::{Path, PathBuf}, + path::PathBuf, time::{Duration, SystemTime}, }; @@ -63,7 +64,7 @@ pub const EXECUTE_BINARY_NAME: &str = "polkadot-execute-worker"; pub(crate) type ResultSender = oneshot::Sender>; /// Transmission end used for sending the PVF preparation result. -pub(crate) type PrepareResultSender = oneshot::Sender; +pub(crate) type PrecheckResultSender = oneshot::Sender; /// A handle to the async process serving the validation host requests. #[derive(Clone)] @@ -83,7 +84,7 @@ impl ValidationHost { pub async fn precheck_pvf( &mut self, pvf: PvfPrepData, - result_tx: PrepareResultSender, + result_tx: PrecheckResultSender, ) -> Result<(), String> { self.to_host_tx .send(ToHost::PrecheckPvf { pvf, result_tx }) @@ -133,7 +134,7 @@ impl ValidationHost { } enum ToHost { - PrecheckPvf { pvf: PvfPrepData, result_tx: PrepareResultSender }, + PrecheckPvf { pvf: PvfPrepData, result_tx: PrecheckResultSender }, ExecutePvf(ExecutePvfInputs), HeadsUp { active_pvfs: Vec }, } @@ -249,10 +250,9 @@ pub async fn start( let run_sweeper = sweeper_task(to_sweeper_rx); let run_host = async move { - let artifacts = Artifacts::new(&config.cache_path).await; + let artifacts = Artifacts::new_and_prune(&config.cache_path).await; run(Inner { - cache_path: config.cache_path, cleanup_pulse_interval: Duration::from_secs(3600), artifact_ttl: Duration::from_secs(3600 * 24), artifacts, @@ -296,7 +296,6 @@ impl AwaitingPrepare { } struct Inner { - cache_path: PathBuf, cleanup_pulse_interval: Duration, artifact_ttl: Duration, artifacts: Artifacts, @@ -317,7 +316,6 @@ struct Fatal; async fn run( Inner { - cache_path, cleanup_pulse_interval, artifact_ttl, mut artifacts, @@ -361,7 +359,6 @@ async fn run( // will notice it. break_if_fatal!(handle_cleanup_pulse( - &cache_path, &mut to_sweeper_tx, &mut artifacts, artifact_ttl, @@ -380,7 +377,6 @@ async fn run( // If the artifact failed before, it could be re-scheduled for preparation here if // the preparation failure cooldown has elapsed. break_if_fatal!(handle_to_host( - &cache_path, &mut artifacts, &mut to_prepare_queue_tx, &mut to_execute_queue_tx, @@ -402,7 +398,6 @@ async fn run( // We could be eager in terms of reporting and plumb the result from the preparation // worker but we don't for the sake of simplicity. break_if_fatal!(handle_prepare_done( - &cache_path, &mut artifacts, &mut to_execute_queue_tx, &mut awaiting_prepare, @@ -414,7 +409,6 @@ async fn run( } async fn handle_to_host( - cache_path: &Path, artifacts: &mut Artifacts, prepare_queue: &mut mpsc::Sender, execute_queue: &mut mpsc::Sender, @@ -426,15 +420,8 @@ async fn handle_to_host( handle_precheck_pvf(artifacts, prepare_queue, pvf, result_tx).await?; }, ToHost::ExecutePvf(inputs) => { - handle_execute_pvf( - cache_path, - artifacts, - prepare_queue, - execute_queue, - awaiting_prepare, - inputs, - ) - .await?; + handle_execute_pvf(artifacts, prepare_queue, execute_queue, awaiting_prepare, inputs) + .await?; }, ToHost::HeadsUp { active_pvfs } => handle_heads_up(artifacts, prepare_queue, active_pvfs).await?, @@ -454,21 +441,21 @@ async fn handle_precheck_pvf( artifacts: &mut Artifacts, prepare_queue: &mut mpsc::Sender, pvf: PvfPrepData, - result_sender: PrepareResultSender, + result_sender: PrecheckResultSender, ) -> Result<(), Fatal> { let artifact_id = ArtifactId::from_pvf_prep_data(&pvf); if let Some(state) = artifacts.artifact_state_mut(&artifact_id) { match state { - ArtifactState::Prepared { last_time_needed, prepare_stats } => { + ArtifactState::Prepared { last_time_needed, .. } => { *last_time_needed = SystemTime::now(); - let _ = result_sender.send(Ok(prepare_stats.clone())); + let _ = result_sender.send(Ok(())); }, ArtifactState::Preparing { waiting_for_response, num_failures: _ } => waiting_for_response.push(result_sender), ArtifactState::FailedToProcess { error, .. } => { // Do not retry an artifact that previously failed preparation. - let _ = result_sender.send(PrepareResult::Err(error.clone())); + let _ = result_sender.send(PrecheckResult::Err(error.clone())); }, } } else { @@ -491,7 +478,6 @@ async fn handle_precheck_pvf( /// When preparing for execution, we use a more lenient timeout ([`LENIENT_PREPARATION_TIMEOUT`]) /// than when prechecking. async fn handle_execute_pvf( - cache_path: &Path, artifacts: &mut Artifacts, prepare_queue: &mut mpsc::Sender, execute_queue: &mut mpsc::Sender, @@ -504,8 +490,8 @@ async fn handle_execute_pvf( if let Some(state) = artifacts.artifact_state_mut(&artifact_id) { match state { - ArtifactState::Prepared { last_time_needed, .. } => { - let file_metadata = std::fs::metadata(artifact_id.path(cache_path)); + ArtifactState::Prepared { ref path, last_time_needed, .. } => { + let file_metadata = std::fs::metadata(path); if file_metadata.is_ok() { *last_time_needed = SystemTime::now(); @@ -514,7 +500,7 @@ async fn handle_execute_pvf( send_execute( execute_queue, execute::ToQueue::Enqueue { - artifact: ArtifactPathId::new(artifact_id, cache_path), + artifact: ArtifactPathId::new(artifact_id, path), pending_execution_request: PendingExecutionRequest { exec_timeout, params, @@ -677,7 +663,6 @@ async fn handle_heads_up( } async fn handle_prepare_done( - cache_path: &Path, artifacts: &mut Artifacts, execute_queue: &mut mpsc::Sender, awaiting_prepare: &mut AwaitingPrepare, @@ -718,7 +703,8 @@ async fn handle_prepare_done( state { for result_sender in waiting_for_response.drain(..) { - let _ = result_sender.send(result.clone()); + let result = result.clone().map(|_| ()); + let _ = result_sender.send(result); } num_failures } else { @@ -738,16 +724,18 @@ async fn handle_prepare_done( continue } - // Don't send failed artifacts to the execution's queue. - if let Err(ref error) = result { - let _ = result_tx.send(Err(ValidationError::from(error.clone()))); - continue - } + let path = match &result { + Ok(success) => success.path.clone(), + Err(error) => { + let _ = result_tx.send(Err(ValidationError::from(error.clone()))); + continue + }, + }; send_execute( execute_queue, execute::ToQueue::Enqueue { - artifact: ArtifactPathId::new(artifact_id.clone(), cache_path), + artifact: ArtifactPathId::new(artifact_id.clone(), &path), pending_execution_request: PendingExecutionRequest { exec_timeout, params, @@ -760,8 +748,8 @@ async fn handle_prepare_done( } *state = match result { - Ok(prepare_stats) => - ArtifactState::Prepared { last_time_needed: SystemTime::now(), prepare_stats }, + Ok(PrepareSuccess { path, stats: prepare_stats }) => + ArtifactState::Prepared { path, last_time_needed: SystemTime::now(), prepare_stats }, Err(error) => { let last_time_failed = SystemTime::now(); let num_failures = *num_failures + 1; @@ -814,7 +802,6 @@ async fn enqueue_prepare_for_execute( } async fn handle_cleanup_pulse( - cache_path: &Path, sweeper_tx: &mut mpsc::Sender, artifacts: &mut Artifacts, artifact_ttl: Duration, @@ -825,14 +812,13 @@ async fn handle_cleanup_pulse( "PVF pruning: {} artifacts reached their end of life", to_remove.len(), ); - for artifact_id in to_remove { + for (artifact_id, path) in to_remove { gum::debug!( target: LOG_TARGET, validation_code_hash = ?artifact_id.code_hash, "pruning artifact", ); - let artifact_path = artifact_id.path(cache_path); - sweeper_tx.send(artifact_path).await.map_err(|_| Fatal)?; + sweeper_tx.send(path).await.map_err(|_| Fatal)?; } Ok(()) @@ -890,7 +876,11 @@ pub(crate) mod tests { use crate::InvalidCandidate; use assert_matches::assert_matches; use futures::future::BoxFuture; - use polkadot_node_core_pvf_common::{error::PrepareError, prepare::PrepareStats}; + use polkadot_node_core_pvf_common::{ + error::PrepareError, + prepare::{PrepareStats, PrepareSuccess}, + }; + use sp_core::hexdisplay::AsBytesRef; const TEST_EXECUTION_TIMEOUT: Duration = Duration::from_secs(3); pub(crate) const TEST_PREPARATION_TIMEOUT: Duration = Duration::from_secs(30); @@ -910,12 +900,16 @@ pub(crate) mod tests { } /// Creates a new PVF which artifact id can be uniquely identified by the given number. - fn artifact_id(descriminator: u32) -> ArtifactId { - ArtifactId::from_pvf_prep_data(&PvfPrepData::from_discriminator(descriminator)) + fn artifact_id(discriminator: u32) -> ArtifactId { + ArtifactId::from_pvf_prep_data(&PvfPrepData::from_discriminator(discriminator)) } - fn artifact_path(descriminator: u32) -> PathBuf { - artifact_id(descriminator).path(&PathBuf::from(std::env::temp_dir())).to_owned() + fn artifact_path(discriminator: u32) -> PathBuf { + let pvf = PvfPrepData::from_discriminator(discriminator); + let checksum = blake3::hash(pvf.code().as_bytes_ref()); + artifact_id(discriminator) + .path(&PathBuf::from(std::env::temp_dir()), checksum.to_hex().as_str()) + .to_owned() } struct Builder { @@ -953,8 +947,6 @@ pub(crate) mod tests { impl Test { fn new(Builder { cleanup_pulse_interval, artifact_ttl, artifacts }: Builder) -> Self { - let cache_path = PathBuf::from(std::env::temp_dir()); - let (to_host_tx, to_host_rx) = mpsc::channel(10); let (to_prepare_queue_tx, to_prepare_queue_rx) = mpsc::channel(10); let (from_prepare_queue_tx, from_prepare_queue_rx) = mpsc::unbounded(); @@ -962,7 +954,6 @@ pub(crate) mod tests { let (to_sweeper_tx, to_sweeper_rx) = mpsc::channel(10); let run = run(Inner { - cache_path, cleanup_pulse_interval, artifact_ttl, artifacts, @@ -1111,12 +1102,18 @@ pub(crate) mod tests { let mut builder = Builder::default(); builder.cleanup_pulse_interval = Duration::from_millis(100); builder.artifact_ttl = Duration::from_millis(500); - builder - .artifacts - .insert_prepared(artifact_id(1), mock_now, PrepareStats::default()); - builder - .artifacts - .insert_prepared(artifact_id(2), mock_now, PrepareStats::default()); + builder.artifacts.insert_prepared( + artifact_id(1), + artifact_path(1), + mock_now, + PrepareStats::default(), + ); + builder.artifacts.insert_prepared( + artifact_id(2), + artifact_path(2), + mock_now, + PrepareStats::default(), + ); let mut test = builder.build(); let mut host = test.host_handle(); @@ -1188,7 +1185,7 @@ pub(crate) mod tests { test.from_prepare_queue_tx .send(prepare::FromQueue { artifact_id: artifact_id(1), - result: Ok(PrepareStats::default()), + result: Ok(PrepareSuccess::default()), }) .await .unwrap(); @@ -1204,7 +1201,7 @@ pub(crate) mod tests { test.from_prepare_queue_tx .send(prepare::FromQueue { artifact_id: artifact_id(2), - result: Ok(PrepareStats::default()), + result: Ok(PrepareSuccess::default()), }) .await .unwrap(); @@ -1258,7 +1255,7 @@ pub(crate) mod tests { test.from_prepare_queue_tx .send(prepare::FromQueue { artifact_id: artifact_id(1), - result: Ok(PrepareStats::default()), + result: Ok(PrepareSuccess::default()), }) .await .unwrap(); @@ -1371,7 +1368,7 @@ pub(crate) mod tests { test.from_prepare_queue_tx .send(prepare::FromQueue { artifact_id: artifact_id(2), - result: Ok(PrepareStats::default()), + result: Ok(PrepareSuccess::default()), }) .await .unwrap(); @@ -1527,7 +1524,7 @@ pub(crate) mod tests { test.from_prepare_queue_tx .send(prepare::FromQueue { artifact_id: artifact_id(1), - result: Ok(PrepareStats::default()), + result: Ok(PrepareSuccess::default()), }) .await .unwrap(); @@ -1703,7 +1700,7 @@ pub(crate) mod tests { test.from_prepare_queue_tx .send(prepare::FromQueue { artifact_id: artifact_id(1), - result: Ok(PrepareStats::default()), + result: Ok(PrepareSuccess::default()), }) .await .unwrap(); diff --git a/polkadot/node/core/pvf/src/lib.rs b/polkadot/node/core/pvf/src/lib.rs index 102a91dbdad..7e7a1325254 100644 --- a/polkadot/node/core/pvf/src/lib.rs +++ b/polkadot/node/core/pvf/src/lib.rs @@ -84,7 +84,7 @@ //! A pruning task will run at a fixed interval of time. This task will remove all artifacts that //! weren't used or received a heads up signal for a while. //! -//! ## Execution +//! ## Execution //! //! The execute workers will be fed by the requests from the execution queue, which is basically a //! combination of a path to the compiled artifact and the diff --git a/polkadot/node/core/pvf/src/prepare/pool.rs b/polkadot/node/core/pvf/src/prepare/pool.rs index 8e02f540d32..21af21e5b02 100644 --- a/polkadot/node/core/pvf/src/prepare/pool.rs +++ b/polkadot/node/core/pvf/src/prepare/pool.rs @@ -68,7 +68,7 @@ pub enum ToPool { /// /// In either case, the worker is considered busy and no further `StartWork` messages should be /// sent until either `Concluded` or `Rip` message is received. - StartWork { worker: Worker, pvf: PvfPrepData, artifact_path: PathBuf }, + StartWork { worker: Worker, pvf: PvfPrepData, cache_path: PathBuf }, } /// A message sent from pool to its client. @@ -232,7 +232,7 @@ fn handle_to_pool( .boxed(), ); }, - ToPool::StartWork { worker, pvf, artifact_path } => { + ToPool::StartWork { worker, pvf, cache_path } => { if let Some(data) = spawned.get_mut(worker) { if let Some(idle) = data.idle.take() { let preparation_timer = metrics.time_preparation(); @@ -242,7 +242,7 @@ fn handle_to_pool( worker, idle, pvf, - artifact_path, + cache_path, preparation_timer, ) .boxed(), @@ -303,10 +303,10 @@ async fn start_work_task( worker: Worker, idle: IdleWorker, pvf: PvfPrepData, - artifact_path: PathBuf, + cache_path: PathBuf, _preparation_timer: Option, ) -> PoolEvent { - let outcome = worker_intf::start_work(&metrics, idle, pvf, artifact_path).await; + let outcome = worker_intf::start_work(&metrics, idle, pvf, cache_path).await; PoolEvent::StartWork(worker, outcome) } diff --git a/polkadot/node/core/pvf/src/prepare/queue.rs b/polkadot/node/core/pvf/src/prepare/queue.rs index c38012d7454..c140a6cafda 100644 --- a/polkadot/node/core/pvf/src/prepare/queue.rs +++ b/polkadot/node/core/pvf/src/prepare/queue.rs @@ -268,12 +268,12 @@ fn find_idle_worker(queue: &mut Queue) -> Option { } async fn handle_from_pool(queue: &mut Queue, from_pool: pool::FromPool) -> Result<(), Fatal> { - use pool::FromPool::*; + use pool::FromPool; match from_pool { - Spawned(worker) => handle_worker_spawned(queue, worker).await?, - Concluded { worker, rip, result } => + FromPool::Spawned(worker) => handle_worker_spawned(queue, worker).await?, + FromPool::Concluded { worker, rip, result } => handle_worker_concluded(queue, worker, rip, result).await?, - Rip(worker) => handle_worker_rip(queue, worker).await?, + FromPool::Rip(worker) => handle_worker_rip(queue, worker).await?, } Ok(()) } @@ -424,17 +424,17 @@ async fn spawn_extra_worker(queue: &mut Queue, critical: bool) -> Result<(), Fat /// Attaches the work to the given worker telling the poll about the job. async fn assign(queue: &mut Queue, worker: Worker, job: Job) -> Result<(), Fatal> { let job_data = &mut queue.jobs[job]; - - let artifact_id = ArtifactId::from_pvf_prep_data(&job_data.pvf); - let artifact_path = artifact_id.path(&queue.cache_path); - job_data.worker = Some(worker); queue.workers[worker].job = Some(job); send_pool( &mut queue.to_pool_tx, - pool::ToPool::StartWork { worker, pvf: job_data.pvf.clone(), artifact_path }, + pool::ToPool::StartWork { + worker, + pvf: job_data.pvf.clone(), + cache_path: queue.cache_path.clone(), + }, ) .await?; @@ -491,7 +491,7 @@ mod tests { use crate::host::tests::TEST_PREPARATION_TIMEOUT; use assert_matches::assert_matches; use futures::{future::BoxFuture, FutureExt}; - use polkadot_node_core_pvf_common::{error::PrepareError, prepare::PrepareStats}; + use polkadot_node_core_pvf_common::{error::PrepareError, prepare::PrepareSuccess}; use slotmap::SlotMap; use std::task::Poll; @@ -612,7 +612,7 @@ mod tests { test.send_from_pool(pool::FromPool::Concluded { worker: w, rip: false, - result: Ok(PrepareStats::default()), + result: Ok(PrepareSuccess::default()), }); assert_eq!( @@ -651,7 +651,7 @@ mod tests { test.send_from_pool(pool::FromPool::Concluded { worker: w1, rip: false, - result: Ok(PrepareStats::default()), + result: Ok(PrepareSuccess::default()), }); assert_matches!(test.poll_and_recv_to_pool().await, pool::ToPool::StartWork { .. }); @@ -697,7 +697,7 @@ mod tests { test.send_from_pool(pool::FromPool::Concluded { worker: w1, rip: false, - result: Ok(PrepareStats::default()), + result: Ok(PrepareSuccess::default()), }); assert_eq!(test.poll_and_recv_to_pool().await, pool::ToPool::Kill(w1)); } @@ -731,7 +731,7 @@ mod tests { test.send_from_pool(pool::FromPool::Concluded { worker: w1, rip: true, - result: Ok(PrepareStats::default()), + result: Ok(PrepareSuccess::default()), }); // Since there is still work, the queue requested one extra worker to spawn to handle the diff --git a/polkadot/node/core/pvf/src/prepare/worker_intf.rs b/polkadot/node/core/pvf/src/prepare/worker_intf.rs index a22fa74b2fe..e7f142a46bb 100644 --- a/polkadot/node/core/pvf/src/prepare/worker_intf.rs +++ b/polkadot/node/core/pvf/src/prepare/worker_intf.rs @@ -17,6 +17,7 @@ //! Host interface to the prepare worker. use crate::{ + artifacts::ArtifactId, metrics::Metrics, security, worker_intf::{ @@ -27,8 +28,8 @@ use crate::{ }; use parity_scale_codec::{Decode, Encode}; use polkadot_node_core_pvf_common::{ - error::{PrepareError, PrepareResult}, - prepare::PrepareStats, + error::{PrepareError, PrepareResult, PrepareWorkerResult}, + prepare::{PrepareStats, PrepareSuccess, PrepareWorkerSuccess}, pvf::PvfPrepData, worker_dir, SecurityStatus, }; @@ -81,7 +82,7 @@ pub enum Outcome { /// final destination location. RenameTmpFile { worker: IdleWorker, - result: PrepareResult, + result: PrepareWorkerResult, err: String, // Unfortunately `PathBuf` doesn't implement `Encode`/`Decode`, so we do a fallible // conversion to `Option`. @@ -115,7 +116,7 @@ pub async fn start_work( metrics: &Metrics, worker: IdleWorker, pvf: PvfPrepData, - artifact_path: PathBuf, + cache_path: PathBuf, ) -> Outcome { let IdleWorker { stream, pid, worker_dir } = worker; @@ -123,8 +124,8 @@ pub async fn start_work( target: LOG_TARGET, worker_pid = %pid, ?worker_dir, - "starting prepare for {}", - artifact_path.display(), + "starting prepare for {:?}", + pvf, ); with_worker_dir_setup( @@ -135,7 +136,7 @@ pub async fn start_work( let preparation_timeout = pvf.prep_timeout(); let audit_log_file = security::AuditLogFile::try_open_and_seek_to_end().await; - if let Err(err) = send_request(&mut stream, pvf.clone()).await { + if let Err(err) = send_request(&mut stream, &pvf).await { gum::warn!( target: LOG_TARGET, worker_pid = %pid, @@ -159,7 +160,7 @@ pub async fn start_work( match result { // Received bytes from worker within the time limit. - Ok(Ok(prepare_result)) => { + Ok(Ok(prepare_worker_result)) => { // Check if any syscall violations occurred during the job. For now this is only // informative, as we are not enforcing the seccomp policy yet. for syscall in security::check_seccomp_violations_for_worker(audit_log_file, pid).await { @@ -175,10 +176,11 @@ pub async fn start_work( handle_response( metrics, IdleWorker { stream, pid, worker_dir }, - prepare_result, + prepare_worker_result, pid, tmp_artifact_file, - artifact_path, + &pvf, + &cache_path, preparation_timeout, ) .await @@ -215,20 +217,22 @@ pub async fn start_work( async fn handle_response( metrics: &Metrics, worker: IdleWorker, - result: PrepareResult, + result: PrepareWorkerResult, worker_pid: u32, tmp_file: PathBuf, - artifact_path: PathBuf, + pvf: &PvfPrepData, + cache_path: &PathBuf, preparation_timeout: Duration, ) -> Outcome { - let PrepareStats { cpu_time_elapsed, memory_stats } = match result.clone() { - Ok(result) => result, - // Timed out on the child. This should already be logged by the child. - Err(PrepareError::TimedOut) => return Outcome::TimedOut, - Err(PrepareError::JobDied(err)) => return Outcome::JobDied(err), - Err(PrepareError::OutOfMemory) => return Outcome::OutOfMemory, - Err(_) => return Outcome::Concluded { worker, result }, - }; + let PrepareWorkerSuccess { checksum, stats: PrepareStats { cpu_time_elapsed, memory_stats } } = + match result.clone() { + Ok(result) => result, + // Timed out on the child. This should already be logged by the child. + Err(PrepareError::TimedOut) => return Outcome::TimedOut, + Err(PrepareError::JobDied(err)) => return Outcome::JobDied(err), + Err(PrepareError::OutOfMemory) => return Outcome::OutOfMemory, + Err(err) => return Outcome::Concluded { worker, result: Err(err) }, + }; if cpu_time_elapsed > preparation_timeout { // The job didn't complete within the timeout. @@ -243,6 +247,9 @@ async fn handle_response( return Outcome::TimedOut } + let artifact_id = ArtifactId::from_pvf_prep_data(pvf); + let artifact_path = artifact_id.path(cache_path, &checksum); + gum::debug!( target: LOG_TARGET, %worker_pid, @@ -252,7 +259,13 @@ async fn handle_response( ); let outcome = match tokio::fs::rename(&tmp_file, &artifact_path).await { - Ok(()) => Outcome::Concluded { worker, result }, + Ok(()) => Outcome::Concluded { + worker, + result: Ok(PrepareSuccess { + path: artifact_path, + stats: PrepareStats { cpu_time_elapsed, memory_stats: memory_stats.clone() }, + }), + }, Err(err) => { gum::warn!( target: LOG_TARGET, @@ -329,14 +342,14 @@ where outcome } -async fn send_request(stream: &mut UnixStream, pvf: PvfPrepData) -> io::Result<()> { +async fn send_request(stream: &mut UnixStream, pvf: &PvfPrepData) -> io::Result<()> { framed_send(stream, &pvf.encode()).await?; Ok(()) } -async fn recv_response(stream: &mut UnixStream, pid: u32) -> io::Result { +async fn recv_response(stream: &mut UnixStream, pid: u32) -> io::Result { let result = framed_recv(stream).await?; - let result = PrepareResult::decode(&mut &result[..]).map_err(|e| { + let result = PrepareWorkerResult::decode(&mut &result[..]).map_err(|e| { // We received invalid bytes from the worker. let bound_bytes = &result[..result.len().min(4)]; gum::warn!( diff --git a/polkadot/node/core/pvf/src/worker_intf.rs b/polkadot/node/core/pvf/src/worker_intf.rs index 8f9a7de354b..5e589b9abce 100644 --- a/polkadot/node/core/pvf/src/worker_intf.rs +++ b/polkadot/node/core/pvf/src/worker_intf.rs @@ -198,7 +198,7 @@ pub async fn tmppath_in(prefix: &str, dir: &Path) -> io::Result { /// The same as [`tmppath_in`], but uses [`std::env::temp_dir`] as the directory. pub async fn tmppath(prefix: &str) -> io::Result { - let temp_dir = PathBuf::from(std::env::temp_dir()); + let temp_dir = std::env::temp_dir(); tmppath_in(prefix, &temp_dir).await } @@ -453,7 +453,7 @@ impl Drop for WorkerDir { /// artifacts from previous jobs. pub fn clear_worker_dir_path(worker_dir_path: &Path) -> io::Result<()> { fn remove_dir_contents(path: &Path) -> io::Result<()> { - for entry in std::fs::read_dir(&path)? { + for entry in std::fs::read_dir(path)? { let entry = entry?; let path = entry.path(); diff --git a/polkadot/node/core/pvf/tests/it/main.rs b/polkadot/node/core/pvf/tests/it/main.rs index d2d842cf84a..5bdf49cc719 100644 --- a/polkadot/node/core/pvf/tests/it/main.rs +++ b/polkadot/node/core/pvf/tests/it/main.rs @@ -20,8 +20,7 @@ use assert_matches::assert_matches; use parity_scale_codec::Encode as _; use polkadot_node_core_pvf::{ start, testing::build_workers_and_get_paths, Config, InvalidCandidate, Metrics, PrepareError, - PrepareJobKind, PrepareStats, PvfPrepData, ValidationError, ValidationHost, - JOB_TIMEOUT_WALL_CLOCK_FACTOR, + PrepareJobKind, PvfPrepData, ValidationError, ValidationHost, JOB_TIMEOUT_WALL_CLOCK_FACTOR, }; use polkadot_parachain_primitives::primitives::{BlockData, ValidationParams, ValidationResult}; use polkadot_primitives::{ExecutorParam, ExecutorParams}; @@ -70,7 +69,7 @@ impl TestHost { &self, code: &[u8], executor_params: ExecutorParams, - ) -> Result { + ) -> Result<(), PrepareError> { let (result_tx, result_rx) = futures::channel::oneshot::channel(); let code = sp_maybe_compressed_blob::decompress(code, 16 * 1024 * 1024) diff --git a/substrate/utils/build-script-utils/src/version.rs b/substrate/utils/build-script-utils/src/version.rs index f6a9ff9554a..549e499b110 100644 --- a/substrate/utils/build-script-utils/src/version.rs +++ b/substrate/utils/build-script-utils/src/version.rs @@ -59,3 +59,34 @@ fn get_version(impl_commit: &str) -> String { impl_commit ) } + +/// Generate `SUBSTRATE_WASMTIME_VERSION` +pub fn generate_wasmtime_version() { + generate_dependency_version("wasmtime", "SUBSTRATE_WASMTIME_VERSION"); +} + +fn generate_dependency_version(dep: &str, env_var: &str) { + // we only care about the root + match std::process::Command::new("cargo") + .args(["tree", "--depth=0", "--locked", "--package", dep]) + .output() + { + Ok(output) if output.status.success() => { + let version = String::from_utf8_lossy(&output.stdout); + + // vX.X.X + if let Some(ver) = version.strip_prefix(&format!("{} v", dep)) { + println!("cargo:rustc-env={}={}", env_var, ver); + } else { + println!("cargo:warning=Unexpected result {}", version); + } + }, + + // command errors out when it could not find the given dependency + // or when having multiple versions of it + Ok(output) => + println!("cargo:warning=`cargo tree` {}", String::from_utf8_lossy(&output.stderr)), + + Err(err) => println!("cargo:warning=Could not run `cargo tree`: {}", err), + } +} -- GitLab From aa5705bff973522a7bd4e39f2ec1a8da56f59f95 Mon Sep 17 00:00:00 2001 From: Ross Bulat Date: Mon, 20 Nov 2023 09:19:34 +0000 Subject: [PATCH 020/102] Pools: Add `MaxUnbonding` to metadata (#2397) --- substrate/frame/nomination-pools/src/lib.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/substrate/frame/nomination-pools/src/lib.rs b/substrate/frame/nomination-pools/src/lib.rs index 909a930e382..ab4bd51ffc0 100644 --- a/substrate/frame/nomination-pools/src/lib.rs +++ b/substrate/frame/nomination-pools/src/lib.rs @@ -1626,6 +1626,10 @@ pub mod pallet { #[pallet::constant] type MaxPointsToBalance: Get; + /// The maximum number of simultaneous unbonding chunks that can exist per member. + #[pallet::constant] + type MaxUnbonding: Get; + /// Infallible method for converting `Currency::Balance` to `U256`. type BalanceToU256: Convert, U256>; @@ -1644,9 +1648,6 @@ pub mod pallet { /// The maximum length, in bytes, that a pools metadata maybe. type MaxMetadataLen: Get; - - /// The maximum number of simultaneous unbonding chunks that can exist per member. - type MaxUnbonding: Get; } /// The sum of funds across all pools. -- GitLab From b35300c377d502e75e9e3fb6f15934bc0f31ef53 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Nov 2023 11:25:58 +0200 Subject: [PATCH 021/102] Bump docker/build-push-action from 5.0.0 to 5.1.0 (#2404) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.0.0 to 5.1.0.
Release notes

Sourced from docker/build-push-action's releases.

v5.1.0

Full Changelog: https://github.com/docker/build-push-action/compare/v5.0.0...v5.1.0

Commits
  • 4a13e50 Merge pull request #1006 from docker/dependabot/npm_and_yarn/docker/actions-t...
  • 7416668 chore: update generated content
  • b4f76a5 chore(deps): Bump @​docker/actions-toolkit from 0.13.0 to 0.14.0
  • b7feb76 Merge pull request #1005 from crazy-max/ci-inspect
  • fae8018 ci: inspect sbom and provenance
  • b625868 Merge pull request #1004 from crazy-max/ci-update-buildx
  • 5193ef1 ci: update buildx to latest
  • d3afd77 Merge pull request #991 from docker/dependabot/npm_and_yarn/babel/traverse-7....
  • 7a786bb Merge pull request #992 from crazy-max/annotations
  • c66ae3a chore: update generated content
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=docker/build-push-action&package-manager=github_actions&previous-version=5.0.0&new-version=5.1.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release-50_publish-docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-50_publish-docker.yml b/.github/workflows/release-50_publish-docker.yml index 891f43e605c..567e996b8fd 100644 --- a/.github/workflows/release-50_publish-docker.yml +++ b/.github/workflows/release-50_publish-docker.yml @@ -268,7 +268,7 @@ jobs: - name: Build and push id: docker_build - uses: docker/build-push-action@0565240e2d4ab88bba5387d719585280857ece09 # v5.0.0 + uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 # v5.1.0 with: push: true file: docker/dockerfiles/polkadot/polkadot_injected_debian.Dockerfile -- GitLab From ede4a362622dfa69eb167eaa876246b1289f4b41 Mon Sep 17 00:00:00 2001 From: jserrat <35823283+Jpserrat@users.noreply.github.com> Date: Mon, 20 Nov 2023 11:00:19 +0000 Subject: [PATCH 022/102] remove retry from backers on failed candidate validation (#2182) Hey guys, as discussed I've changed the name to a more general one `PvfExecKind`, is this good or too general? Creating this as a draft, I still have to fix the tests. Closes #1585 Kusama address: FkB6QEo8VnV3oifugNj5NeVG3Mvq1zFbrUu4P5YwRoe5mQN --------- Co-authored-by: command-bot <> Co-authored-by: Marcin S --- polkadot/node/core/approval-voting/src/lib.rs | 4 +- .../node/core/approval-voting/src/tests.rs | 4 +- polkadot/node/core/backing/src/lib.rs | 4 +- polkadot/node/core/backing/src/tests/mod.rs | 38 ++-- .../src/tests/prospective_parachains.rs | 4 +- .../node/core/candidate-validation/src/lib.rs | 105 ++++++---- .../core/candidate-validation/src/tests.rs | 190 ++++++++++-------- .../src/participation/mod.rs | 4 +- .../src/participation/tests.rs | 16 +- polkadot/node/malus/src/variants/common.rs | 36 ++-- .../node/overseer/examples/minimal-example.rs | 4 +- polkadot/node/overseer/src/tests.rs | 6 +- polkadot/node/subsystem-types/src/messages.rs | 10 +- polkadot/primitives/src/lib.rs | 10 +- polkadot/primitives/src/v6/executor_params.rs | 39 ++-- polkadot/primitives/src/v6/mod.rs | 26 +-- .../src/node/utility/pvf-host-and-workers.md | 4 + .../src/configuration/benchmarking.rs | 10 +- 18 files changed, 271 insertions(+), 243 deletions(-) diff --git a/polkadot/node/core/approval-voting/src/lib.rs b/polkadot/node/core/approval-voting/src/lib.rs index 94f7fcaf941..ef01727b7eb 100644 --- a/polkadot/node/core/approval-voting/src/lib.rs +++ b/polkadot/node/core/approval-voting/src/lib.rs @@ -54,7 +54,7 @@ use polkadot_node_subsystem_util::{ }; use polkadot_primitives::{ ApprovalVote, BlockNumber, CandidateHash, CandidateIndex, CandidateReceipt, DisputeStatement, - ExecutorParams, GroupIndex, Hash, PvfExecTimeoutKind, SessionIndex, SessionInfo, + ExecutorParams, GroupIndex, Hash, PvfExecKind, SessionIndex, SessionInfo, ValidDisputeStatementKind, ValidatorId, ValidatorIndex, ValidatorPair, ValidatorSignature, }; use sc_keystore::LocalKeystore; @@ -2867,7 +2867,7 @@ async fn launch_approval( candidate_receipt: candidate.clone(), pov: available_data.pov, executor_params, - exec_timeout_kind: PvfExecTimeoutKind::Approval, + exec_kind: PvfExecKind::Approval, response_sender: val_tx, }) .await; diff --git a/polkadot/node/core/approval-voting/src/tests.rs b/polkadot/node/core/approval-voting/src/tests.rs index 0c0dcfde9b6..11bcba9c388 100644 --- a/polkadot/node/core/approval-voting/src/tests.rs +++ b/polkadot/node/core/approval-voting/src/tests.rs @@ -2705,10 +2705,10 @@ async fn handle_double_assignment_import( assert_matches!( overseer_recv(virtual_overseer).await, AllMessages::CandidateValidation(CandidateValidationMessage::ValidateFromExhaustive { - exec_timeout_kind, + exec_kind, response_sender, .. - }) if exec_timeout_kind == PvfExecTimeoutKind::Approval => { + }) if exec_kind == PvfExecKind::Approval => { response_sender.send(Ok(ValidationResult::Valid(Default::default(), Default::default()))) .unwrap(); } diff --git a/polkadot/node/core/backing/src/lib.rs b/polkadot/node/core/backing/src/lib.rs index a91eefe5e04..434051f1b00 100644 --- a/polkadot/node/core/backing/src/lib.rs +++ b/polkadot/node/core/backing/src/lib.rs @@ -106,7 +106,7 @@ use polkadot_node_subsystem_util::{ use polkadot_primitives::{ BackedCandidate, CandidateCommitments, CandidateHash, CandidateReceipt, CommittedCandidateReceipt, CoreIndex, CoreState, ExecutorParams, Hash, Id as ParaId, - PersistedValidationData, PvfExecTimeoutKind, SigningContext, ValidationCode, ValidatorId, + PersistedValidationData, PvfExecKind, SigningContext, ValidationCode, ValidatorId, ValidatorIndex, ValidatorSignature, ValidityAttestation, }; use sp_keystore::KeystorePtr; @@ -566,7 +566,7 @@ async fn request_candidate_validation( candidate_receipt, pov, executor_params, - exec_timeout_kind: PvfExecTimeoutKind::Backing, + exec_kind: PvfExecKind::Backing, response_sender: tx, }) .await; diff --git a/polkadot/node/core/backing/src/tests/mod.rs b/polkadot/node/core/backing/src/tests/mod.rs index caa85c12989..c12be72556e 100644 --- a/polkadot/node/core/backing/src/tests/mod.rs +++ b/polkadot/node/core/backing/src/tests/mod.rs @@ -33,7 +33,7 @@ use polkadot_node_subsystem::{ }; use polkadot_node_subsystem_test_helpers as test_helpers; use polkadot_primitives::{ - CandidateDescriptor, GroupRotationInfo, HeadData, PersistedValidationData, PvfExecTimeoutKind, + CandidateDescriptor, GroupRotationInfo, HeadData, PersistedValidationData, PvfExecKind, ScheduledCore, SessionIndex, LEGACY_MIN_BACKING_VOTES, }; use sp_application_crypto::AppCrypto; @@ -344,14 +344,14 @@ async fn assert_validate_from_exhaustive( validation_data, validation_code, candidate_receipt, - exec_timeout_kind, + exec_kind, response_sender, .. }, ) if validation_data == *assert_pvd && validation_code == *assert_validation_code && *pov == *assert_pov && &candidate_receipt.descriptor == assert_candidate.descriptor() && - exec_timeout_kind == PvfExecTimeoutKind::Backing && + exec_kind == PvfExecKind::Backing && candidate_receipt.commitments_hash == assert_candidate.commitments.hash() => { response_sender.send(Ok(ValidationResult::Valid( @@ -550,14 +550,14 @@ fn backing_works() { validation_code, candidate_receipt, pov, - exec_timeout_kind, + exec_kind, response_sender, .. }, ) if validation_data == pvd_ab && validation_code == validation_code_ab && *pov == pov_ab && &candidate_receipt.descriptor == candidate_a.descriptor() && - exec_timeout_kind == PvfExecTimeoutKind::Backing && + exec_kind == PvfExecKind::Backing && candidate_receipt.commitments_hash == candidate_a_commitments_hash => { response_sender.send(Ok( @@ -729,14 +729,14 @@ fn backing_works_while_validation_ongoing() { validation_code, candidate_receipt, pov, - exec_timeout_kind, + exec_kind, response_sender, .. }, ) if validation_data == pvd_abc && validation_code == validation_code_abc && *pov == pov_abc && &candidate_receipt.descriptor == candidate_a.descriptor() && - exec_timeout_kind == PvfExecTimeoutKind::Backing && + exec_kind == PvfExecKind::Backing && candidate_a_commitments_hash == candidate_receipt.commitments_hash => { // we never validate the candidate. our local node @@ -890,14 +890,14 @@ fn backing_misbehavior_works() { validation_code, candidate_receipt, pov, - exec_timeout_kind, + exec_kind, response_sender, .. }, ) if validation_data == pvd_a && validation_code == validation_code_a && *pov == pov_a && &candidate_receipt.descriptor == candidate_a.descriptor() && - exec_timeout_kind == PvfExecTimeoutKind::Backing && + exec_kind == PvfExecKind::Backing && candidate_a_commitments_hash == candidate_receipt.commitments_hash => { response_sender.send(Ok( @@ -1057,14 +1057,14 @@ fn backing_dont_second_invalid() { validation_code, candidate_receipt, pov, - exec_timeout_kind, + exec_kind, response_sender, .. }, ) if validation_data == pvd_a && validation_code == validation_code_a && *pov == pov_block_a && &candidate_receipt.descriptor == candidate_a.descriptor() && - exec_timeout_kind == PvfExecTimeoutKind::Backing && + exec_kind == PvfExecKind::Backing && candidate_a.commitments.hash() == candidate_receipt.commitments_hash => { response_sender.send(Ok(ValidationResult::Invalid(InvalidCandidate::BadReturn))).unwrap(); @@ -1097,14 +1097,14 @@ fn backing_dont_second_invalid() { validation_code, candidate_receipt, pov, - exec_timeout_kind, + exec_kind, response_sender, .. }, ) if validation_data == pvd_b && validation_code == validation_code_b && *pov == pov_block_b && &candidate_receipt.descriptor == candidate_b.descriptor() && - exec_timeout_kind == PvfExecTimeoutKind::Backing && + exec_kind == PvfExecKind::Backing && candidate_b.commitments.hash() == candidate_receipt.commitments_hash => { response_sender.send(Ok( @@ -1224,14 +1224,14 @@ fn backing_second_after_first_fails_works() { validation_code, candidate_receipt, pov, - exec_timeout_kind, + exec_kind, response_sender, .. }, ) if validation_data == pvd_a && validation_code == validation_code_a && *pov == pov_a && &candidate_receipt.descriptor == candidate.descriptor() && - exec_timeout_kind == PvfExecTimeoutKind::Backing && + exec_kind == PvfExecKind::Backing && candidate.commitments.hash() == candidate_receipt.commitments_hash => { response_sender.send(Ok(ValidationResult::Invalid(InvalidCandidate::BadReturn))).unwrap(); @@ -1368,14 +1368,14 @@ fn backing_works_after_failed_validation() { validation_code, candidate_receipt, pov, - exec_timeout_kind, + exec_kind, response_sender, .. }, ) if validation_data == pvd_a && validation_code == validation_code_a && *pov == pov_a && &candidate_receipt.descriptor == candidate.descriptor() && - exec_timeout_kind == PvfExecTimeoutKind::Backing && + exec_kind == PvfExecKind::Backing && candidate.commitments.hash() == candidate_receipt.commitments_hash => { response_sender.send(Err(ValidationFailed("Internal test error".into()))).unwrap(); @@ -1634,13 +1634,13 @@ fn retry_works() { validation_code, candidate_receipt, pov, - exec_timeout_kind, + exec_kind, .. }, ) if validation_data == pvd_a && validation_code == validation_code_a && *pov == pov_a && &candidate_receipt.descriptor == candidate.descriptor() && - exec_timeout_kind == PvfExecTimeoutKind::Backing && + exec_kind == PvfExecKind::Backing && candidate.commitments.hash() == candidate_receipt.commitments_hash ); virtual_overseer diff --git a/polkadot/node/core/backing/src/tests/prospective_parachains.rs b/polkadot/node/core/backing/src/tests/prospective_parachains.rs index fc4bd7d98e7..e7c29e11bb4 100644 --- a/polkadot/node/core/backing/src/tests/prospective_parachains.rs +++ b/polkadot/node/core/backing/src/tests/prospective_parachains.rs @@ -232,14 +232,14 @@ async fn assert_validate_seconded_candidate( validation_code, candidate_receipt, pov, - exec_timeout_kind, + exec_kind, response_sender, .. }) if &validation_data == assert_pvd && &validation_code == assert_validation_code && &*pov == assert_pov && &candidate_receipt.descriptor == candidate.descriptor() && - exec_timeout_kind == PvfExecTimeoutKind::Backing && + exec_kind == PvfExecKind::Backing && candidate.commitments.hash() == candidate_receipt.commitments_hash => { response_sender.send(Ok(ValidationResult::Valid( diff --git a/polkadot/node/core/candidate-validation/src/lib.rs b/polkadot/node/core/candidate-validation/src/lib.rs index 96ab07d3b82..f5d17af6c68 100644 --- a/polkadot/node/core/candidate-validation/src/lib.rs +++ b/polkadot/node/core/candidate-validation/src/lib.rs @@ -49,8 +49,8 @@ use polkadot_primitives::{ DEFAULT_LENIENT_PREPARATION_TIMEOUT, DEFAULT_PRECHECK_PREPARATION_TIMEOUT, }, CandidateCommitments, CandidateDescriptor, CandidateReceipt, ExecutorParams, Hash, - OccupiedCoreAssumption, PersistedValidationData, PvfExecTimeoutKind, PvfPrepTimeoutKind, - ValidationCode, ValidationCodeHash, + OccupiedCoreAssumption, PersistedValidationData, PvfExecKind, PvfPrepKind, ValidationCode, + ValidationCodeHash, }; use parity_scale_codec::Encode; @@ -73,12 +73,6 @@ mod tests; const LOG_TARGET: &'static str = "parachain::candidate-validation"; -/// The amount of time to wait before retrying after a retry-able backing validation error. We use a -/// lower value for the backing case, to fit within the lower backing timeout. -#[cfg(not(test))] -const PVF_BACKING_EXECUTION_RETRY_DELAY: Duration = Duration::from_millis(500); -#[cfg(test)] -const PVF_BACKING_EXECUTION_RETRY_DELAY: Duration = Duration::from_millis(200); /// The amount of time to wait before retrying after a retry-able approval validation error. We use /// a higher value for the approval case since we have more time, and if we wait longer it is more /// likely that transient conditions will resolve. @@ -163,7 +157,7 @@ async fn run( candidate_receipt, pov, executor_params, - exec_timeout_kind, + exec_kind, response_sender, .. } => { @@ -180,7 +174,7 @@ async fn run( candidate_receipt, pov, executor_params, - exec_timeout_kind, + exec_kind, &metrics, ) .await; @@ -198,7 +192,7 @@ async fn run( candidate_receipt, pov, executor_params, - exec_timeout_kind, + exec_kind, response_sender, .. } => { @@ -215,7 +209,7 @@ async fn run( candidate_receipt, pov, executor_params, - exec_timeout_kind, + exec_kind, &metrics, ) .await; @@ -357,7 +351,7 @@ where return PreCheckOutcome::Invalid }; - let timeout = pvf_prep_timeout(&executor_params, PvfPrepTimeoutKind::Precheck); + let timeout = pvf_prep_timeout(&executor_params, PvfPrepKind::Precheck); let pvf = match sp_maybe_compressed_blob::decompress( &validation_code.0, @@ -501,7 +495,7 @@ async fn validate_from_chain_state( candidate_receipt: CandidateReceipt, pov: Arc, executor_params: ExecutorParams, - exec_timeout_kind: PvfExecTimeoutKind, + exec_kind: PvfExecKind, metrics: &Metrics, ) -> Result where @@ -521,7 +515,7 @@ where candidate_receipt.clone(), pov, executor_params, - exec_timeout_kind, + exec_kind, metrics, ) .await; @@ -557,7 +551,7 @@ async fn validate_candidate_exhaustive( candidate_receipt: CandidateReceipt, pov: Arc, executor_params: ExecutorParams, - exec_timeout_kind: PvfExecTimeoutKind, + exec_kind: PvfExecKind, metrics: &Metrics, ) -> Result { let _timer = metrics.time_validate_candidate_exhaustive(); @@ -616,15 +610,32 @@ async fn validate_candidate_exhaustive( relay_parent_storage_root: persisted_validation_data.relay_parent_storage_root, }; - let result = validation_backend - .validate_candidate_with_retry( - raw_validation_code.to_vec(), - pvf_exec_timeout(&executor_params, exec_timeout_kind), - exec_timeout_kind, - params, - executor_params, - ) - .await; + let result = match exec_kind { + // Retry is disabled to reduce the chance of nondeterministic blocks getting backed and + // honest backers getting slashed. + PvfExecKind::Backing => { + let prep_timeout = pvf_prep_timeout(&executor_params, PvfPrepKind::Prepare); + let exec_timeout = pvf_exec_timeout(&executor_params, exec_kind); + let pvf = PvfPrepData::from_code( + raw_validation_code.to_vec(), + executor_params, + prep_timeout, + PrepareJobKind::Compilation, + ); + + validation_backend.validate_candidate(pvf, exec_timeout, params.encode()).await + }, + PvfExecKind::Approval => + validation_backend + .validate_candidate_with_retry( + raw_validation_code.to_vec(), + pvf_exec_timeout(&executor_params, exec_kind), + params, + executor_params, + PVF_APPROVAL_EXECUTION_RETRY_DELAY, + ) + .await, + }; if let Err(ref error) = result { gum::info!(target: LOG_TARGET, ?para_id, ?error, "Failed to validate candidate"); @@ -709,8 +720,8 @@ trait ValidationBackend { encoded_params: Vec, ) -> Result; - /// Tries executing a PVF. Will retry once if an error is encountered that may have been - /// transient. + /// Tries executing a PVF for the approval subsystem. Will retry once if an error is encountered + /// that may have been transient. /// /// NOTE: Should retry only on errors that are a result of execution itself, and not of /// preparation. @@ -718,11 +729,11 @@ trait ValidationBackend { &mut self, raw_validation_code: Vec, exec_timeout: Duration, - exec_timeout_kind: PvfExecTimeoutKind, params: ValidationParams, executor_params: ExecutorParams, + retry_delay: Duration, ) -> Result { - let prep_timeout = pvf_prep_timeout(&executor_params, PvfPrepTimeoutKind::Lenient); + let prep_timeout = pvf_prep_timeout(&executor_params, PvfPrepKind::Prepare); // Construct the PVF a single time, since it is an expensive operation. Cloning it is cheap. let pvf = PvfPrepData::from_code( raw_validation_code, @@ -740,11 +751,6 @@ trait ValidationBackend { return validation_result } - let retry_delay = match exec_timeout_kind { - PvfExecTimeoutKind::Backing => PVF_BACKING_EXECUTION_RETRY_DELAY, - PvfExecTimeoutKind::Approval => PVF_APPROVAL_EXECUTION_RETRY_DELAY, - }; - // Allow limited retries for each kind of error. let mut num_death_retries_left = 1; let mut num_job_error_retries_left = 1; @@ -867,22 +873,41 @@ fn perform_basic_checks( Ok(()) } -fn pvf_prep_timeout(executor_params: &ExecutorParams, kind: PvfPrepTimeoutKind) -> Duration { +/// To determine the amount of timeout time for the pvf execution. +/// +/// Precheck +/// The time period after which the preparation worker is considered +/// unresponsive and will be killed. +/// +/// Prepare +///The time period after which the preparation worker is considered +/// unresponsive and will be killed. +fn pvf_prep_timeout(executor_params: &ExecutorParams, kind: PvfPrepKind) -> Duration { if let Some(timeout) = executor_params.pvf_prep_timeout(kind) { return timeout } match kind { - PvfPrepTimeoutKind::Precheck => DEFAULT_PRECHECK_PREPARATION_TIMEOUT, - PvfPrepTimeoutKind::Lenient => DEFAULT_LENIENT_PREPARATION_TIMEOUT, + PvfPrepKind::Precheck => DEFAULT_PRECHECK_PREPARATION_TIMEOUT, + PvfPrepKind::Prepare => DEFAULT_LENIENT_PREPARATION_TIMEOUT, } } -fn pvf_exec_timeout(executor_params: &ExecutorParams, kind: PvfExecTimeoutKind) -> Duration { +/// To determine the amount of timeout time for the pvf execution. +/// +/// Backing subsystem +/// The amount of time to spend on execution during backing. +/// +/// Approval subsystem +/// The amount of time to spend on execution during approval or disputes. +/// This should be much longer than the backing execution timeout to ensure that in the +/// absence of extremely large disparities between hardware, blocks that pass backing are +/// considered executable by approval checkers or dispute participants. +fn pvf_exec_timeout(executor_params: &ExecutorParams, kind: PvfExecKind) -> Duration { if let Some(timeout) = executor_params.pvf_exec_timeout(kind) { return timeout } match kind { - PvfExecTimeoutKind::Backing => DEFAULT_BACKING_EXECUTION_TIMEOUT, - PvfExecTimeoutKind::Approval => DEFAULT_APPROVAL_EXECUTION_TIMEOUT, + PvfExecKind::Backing => DEFAULT_BACKING_EXECUTION_TIMEOUT, + PvfExecKind::Approval => DEFAULT_APPROVAL_EXECUTION_TIMEOUT, } } diff --git a/polkadot/node/core/candidate-validation/src/tests.rs b/polkadot/node/core/candidate-validation/src/tests.rs index 801c581938a..5e2585d6873 100644 --- a/polkadot/node/core/candidate-validation/src/tests.rs +++ b/polkadot/node/core/candidate-validation/src/tests.rs @@ -436,7 +436,7 @@ fn candidate_validation_ok_is_ok() { candidate_receipt, Arc::new(pov), ExecutorParams::default(), - PvfExecTimeoutKind::Backing, + PvfExecKind::Backing, &Default::default(), )) .unwrap(); @@ -488,7 +488,7 @@ fn candidate_validation_bad_return_is_invalid() { candidate_receipt, Arc::new(pov), ExecutorParams::default(), - PvfExecTimeoutKind::Backing, + PvfExecKind::Backing, &Default::default(), )) .unwrap(); @@ -496,23 +496,20 @@ fn candidate_validation_bad_return_is_invalid() { assert_matches!(v, ValidationResult::Invalid(InvalidCandidate::Timeout)); } -// Test that we vote valid if we get `AmbiguousWorkerDeath`, retry, and then succeed. -#[test] -fn candidate_validation_one_ambiguous_error_is_valid() { - let validation_data = PersistedValidationData { max_pov_size: 1024, ..Default::default() }; - - let pov = PoV { block_data: BlockData(vec![1; 32]) }; - let head_data = HeadData(vec![1, 1, 1]); - let validation_code = ValidationCode(vec![2; 16]); - +fn perform_basic_checks_on_valid_candidate( + pov: &PoV, + validation_code: &ValidationCode, + validation_data: &PersistedValidationData, + head_data_hash: Hash, +) -> CandidateDescriptor { let descriptor = make_valid_candidate_descriptor( ParaId::from(1_u32), dummy_hash(), validation_data.hash(), pov.hash(), validation_code.hash(), - head_data.hash(), - dummy_hash(), + head_data_hash, + head_data_hash, Sr25519Keyring::Alice, ); @@ -523,6 +520,24 @@ fn candidate_validation_one_ambiguous_error_is_valid() { &validation_code.hash(), ); assert!(check.is_ok()); + descriptor +} + +// Test that we vote valid if we get `AmbiguousWorkerDeath`, retry, and then succeed. +#[test] +fn candidate_validation_one_ambiguous_error_is_valid() { + let validation_data = PersistedValidationData { max_pov_size: 1024, ..Default::default() }; + + let pov = PoV { block_data: BlockData(vec![1; 32]) }; + let head_data = HeadData(vec![1, 1, 1]); + let validation_code = ValidationCode(vec![2; 16]); + + let descriptor = perform_basic_checks_on_valid_candidate( + &pov, + &validation_code, + &validation_data, + head_data.hash(), + ); let validation_result = WasmValidationResult { head_data, @@ -554,7 +569,7 @@ fn candidate_validation_one_ambiguous_error_is_valid() { candidate_receipt, Arc::new(pov), ExecutorParams::default(), - PvfExecTimeoutKind::Backing, + PvfExecKind::Approval, &Default::default(), )) .unwrap(); @@ -576,24 +591,12 @@ fn candidate_validation_multiple_ambiguous_errors_is_invalid() { let pov = PoV { block_data: BlockData(vec![1; 32]) }; let validation_code = ValidationCode(vec![2; 16]); - let descriptor = make_valid_candidate_descriptor( - ParaId::from(1_u32), - dummy_hash(), - validation_data.hash(), - pov.hash(), - validation_code.hash(), - dummy_hash(), - dummy_hash(), - Sr25519Keyring::Alice, - ); - - let check = perform_basic_checks( - &descriptor, - validation_data.max_pov_size, + let descriptor = perform_basic_checks_on_valid_candidate( &pov, - &validation_code.hash(), + &validation_code, + &validation_data, + dummy_hash(), ); - assert!(check.is_ok()); let candidate_receipt = CandidateReceipt { descriptor, commitments_hash: Hash::zero() }; @@ -607,7 +610,7 @@ fn candidate_validation_multiple_ambiguous_errors_is_invalid() { candidate_receipt, Arc::new(pov), ExecutorParams::default(), - PvfExecTimeoutKind::Backing, + PvfExecKind::Approval, &Default::default(), )) .unwrap(); @@ -615,58 +618,79 @@ fn candidate_validation_multiple_ambiguous_errors_is_invalid() { assert_matches!(v, ValidationResult::Invalid(InvalidCandidate::ExecutionError(_))); } -// Test that we retry on internal errors. +// Test that we retry for approval on internal errors. #[test] fn candidate_validation_retry_internal_errors() { - let validation_data = PersistedValidationData { max_pov_size: 1024, ..Default::default() }; - - let pov = PoV { block_data: BlockData(vec![1; 32]) }; - let validation_code = ValidationCode(vec![2; 16]); - - let descriptor = make_valid_candidate_descriptor( - ParaId::from(1_u32), - dummy_hash(), - validation_data.hash(), - pov.hash(), - validation_code.hash(), - dummy_hash(), - dummy_hash(), - Sr25519Keyring::Alice, - ); - - let check = perform_basic_checks( - &descriptor, - validation_data.max_pov_size, - &pov, - &validation_code.hash(), + let v = candidate_validation_retry_on_error_helper( + PvfExecKind::Approval, + vec![ + Err(InternalValidationError::HostCommunication("foo".into()).into()), + // Throw an AJD error, we should still retry again. + Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousJobDeath( + "baz".into(), + ))), + // Throw another internal error. + Err(InternalValidationError::HostCommunication("bar".into()).into()), + ], ); - assert!(check.is_ok()); - - let candidate_receipt = CandidateReceipt { descriptor, commitments_hash: Hash::zero() }; + assert_matches!(v, Err(ValidationFailed(s)) if s.contains("bar")); +} - let v = executor::block_on(validate_candidate_exhaustive( - MockValidateCandidateBackend::with_hardcoded_result_list(vec![ +// Test that we don't retry for backing on internal errors. +#[test] +fn candidate_validation_dont_retry_internal_errors() { + let v = candidate_validation_retry_on_error_helper( + PvfExecKind::Backing, + vec![ Err(InternalValidationError::HostCommunication("foo".into()).into()), // Throw an AWD error, we should still retry again. Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)), // Throw another internal error. Err(InternalValidationError::HostCommunication("bar".into()).into()), - ]), - validation_data, - validation_code, - candidate_receipt, - Arc::new(pov), - ExecutorParams::default(), - PvfExecTimeoutKind::Backing, - &Default::default(), - )); + ], + ); - assert_matches!(v, Err(ValidationFailed(s)) if s.contains("bar")); + assert_matches!(v, Err(ValidationFailed(s)) if s.contains("foo")); } -// Test that we retry on panic errors. +// Test that we retry for approval on panic errors. #[test] fn candidate_validation_retry_panic_errors() { + let v = candidate_validation_retry_on_error_helper( + PvfExecKind::Approval, + vec![ + Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::JobError("foo".into()))), + // Throw an AWD error, we should still retry again. + Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)), + // Throw another panic error. + Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::JobError("bar".into()))), + ], + ); + + assert_matches!(v, Ok(ValidationResult::Invalid(InvalidCandidate::ExecutionError(s))) if s == "bar".to_string()); +} + +// Test that we don't retry for backing on panic errors. +#[test] +fn candidate_validation_dont_retry_panic_errors() { + let v = candidate_validation_retry_on_error_helper( + PvfExecKind::Backing, + vec![ + Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::JobError("foo".into()))), + // Throw an AWD error, we should still retry again. + Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)), + // Throw another panic error. + Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::JobError("bar".into()))), + ], + ); + + assert_matches!(v, Ok(ValidationResult::Invalid(InvalidCandidate::ExecutionError(s))) if s == "foo".to_string()); +} + +fn candidate_validation_retry_on_error_helper( + exec_kind: PvfExecKind, + mock_errors: Vec>, +) -> Result { let validation_data = PersistedValidationData { max_pov_size: 1024, ..Default::default() }; let pov = PoV { block_data: BlockData(vec![1; 32]) }; @@ -693,26 +717,16 @@ fn candidate_validation_retry_panic_errors() { let candidate_receipt = CandidateReceipt { descriptor, commitments_hash: Hash::zero() }; - let v = executor::block_on(validate_candidate_exhaustive( - MockValidateCandidateBackend::with_hardcoded_result_list(vec![ - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::JobError("foo".into()))), - // Throw an AJD error, we should still retry again. - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousJobDeath( - "baz".into(), - ))), - // Throw another panic error. - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::JobError("bar".into()))), - ]), + return executor::block_on(validate_candidate_exhaustive( + MockValidateCandidateBackend::with_hardcoded_result_list(mock_errors), validation_data, validation_code, candidate_receipt, Arc::new(pov), ExecutorParams::default(), - PvfExecTimeoutKind::Backing, + exec_kind, &Default::default(), )); - - assert_matches!(v, Ok(ValidationResult::Invalid(InvalidCandidate::ExecutionError(s))) if s == "bar".to_string()); } #[test] @@ -752,7 +766,7 @@ fn candidate_validation_timeout_is_internal_error() { candidate_receipt, Arc::new(pov), ExecutorParams::default(), - PvfExecTimeoutKind::Backing, + PvfExecKind::Backing, &Default::default(), )); @@ -797,7 +811,7 @@ fn candidate_validation_commitment_hash_mismatch_is_invalid() { candidate_receipt, Arc::new(pov), ExecutorParams::default(), - PvfExecTimeoutKind::Backing, + PvfExecKind::Backing, &Default::default(), )) .unwrap(); @@ -846,7 +860,7 @@ fn candidate_validation_code_mismatch_is_invalid() { candidate_receipt, Arc::new(pov), ExecutorParams::default(), - PvfExecTimeoutKind::Backing, + PvfExecKind::Backing, &Default::default(), )) .unwrap(); @@ -903,7 +917,7 @@ fn compressed_code_works() { candidate_receipt, Arc::new(pov), ExecutorParams::default(), - PvfExecTimeoutKind::Backing, + PvfExecKind::Backing, &Default::default(), )); @@ -954,7 +968,7 @@ fn code_decompression_failure_is_error() { candidate_receipt, Arc::new(pov), ExecutorParams::default(), - PvfExecTimeoutKind::Backing, + PvfExecKind::Backing, &Default::default(), )); @@ -1006,7 +1020,7 @@ fn pov_decompression_failure_is_invalid() { candidate_receipt, Arc::new(pov), ExecutorParams::default(), - PvfExecTimeoutKind::Backing, + PvfExecKind::Backing, &Default::default(), )); diff --git a/polkadot/node/core/dispute-coordinator/src/participation/mod.rs b/polkadot/node/core/dispute-coordinator/src/participation/mod.rs index 90268516e9d..05ea7323af1 100644 --- a/polkadot/node/core/dispute-coordinator/src/participation/mod.rs +++ b/polkadot/node/core/dispute-coordinator/src/participation/mod.rs @@ -32,7 +32,7 @@ use polkadot_node_subsystem::{ }; use polkadot_node_subsystem_util::runtime::get_validation_code_by_hash; use polkadot_primitives::{ - BlockNumber, CandidateHash, CandidateReceipt, Hash, PvfExecTimeoutKind, SessionIndex, + BlockNumber, CandidateHash, CandidateReceipt, Hash, PvfExecKind, SessionIndex, }; use crate::LOG_TARGET; @@ -386,7 +386,7 @@ async fn participate( candidate_receipt: req.candidate_receipt().clone(), pov: available_data.pov, executor_params: req.executor_params(), - exec_timeout_kind: PvfExecTimeoutKind::Approval, + exec_kind: PvfExecKind::Approval, response_sender: validation_tx, }) .await; diff --git a/polkadot/node/core/dispute-coordinator/src/participation/tests.rs b/polkadot/node/core/dispute-coordinator/src/participation/tests.rs index 0aa0d772005..012df51d0cd 100644 --- a/polkadot/node/core/dispute-coordinator/src/participation/tests.rs +++ b/polkadot/node/core/dispute-coordinator/src/participation/tests.rs @@ -115,8 +115,8 @@ pub async fn participation_full_happy_path( assert_matches!( ctx_handle.recv().await, AllMessages::CandidateValidation( - CandidateValidationMessage::ValidateFromExhaustive { candidate_receipt, exec_timeout_kind, response_sender, .. } - ) if exec_timeout_kind == PvfExecTimeoutKind::Approval => { + CandidateValidationMessage::ValidateFromExhaustive { candidate_receipt, exec_kind, response_sender, .. } + ) if exec_kind == PvfExecKind::Approval => { if expected_commitments_hash != candidate_receipt.commitments_hash { response_sender.send(Ok(ValidationResult::Invalid(InvalidCandidate::CommitmentsHashMismatch))).unwrap(); } else { @@ -450,8 +450,8 @@ fn cast_invalid_vote_if_validation_fails_or_is_invalid() { assert_matches!( ctx_handle.recv().await, AllMessages::CandidateValidation( - CandidateValidationMessage::ValidateFromExhaustive { exec_timeout_kind, response_sender, .. } - ) if exec_timeout_kind == PvfExecTimeoutKind::Approval => { + CandidateValidationMessage::ValidateFromExhaustive { exec_kind, response_sender, .. } + ) if exec_kind == PvfExecKind::Approval => { response_sender.send(Ok(ValidationResult::Invalid(InvalidCandidate::Timeout))).unwrap(); }, "overseer did not receive candidate validation message", @@ -487,8 +487,8 @@ fn cast_invalid_vote_if_commitments_dont_match() { assert_matches!( ctx_handle.recv().await, AllMessages::CandidateValidation( - CandidateValidationMessage::ValidateFromExhaustive { exec_timeout_kind, response_sender, .. } - ) if exec_timeout_kind == PvfExecTimeoutKind::Approval => { + CandidateValidationMessage::ValidateFromExhaustive { exec_kind, response_sender, .. } + ) if exec_kind == PvfExecKind::Approval => { response_sender.send(Ok(ValidationResult::Invalid(InvalidCandidate::CommitmentsHashMismatch))).unwrap(); }, "overseer did not receive candidate validation message", @@ -524,8 +524,8 @@ fn cast_valid_vote_if_validation_passes() { assert_matches!( ctx_handle.recv().await, AllMessages::CandidateValidation( - CandidateValidationMessage::ValidateFromExhaustive { exec_timeout_kind, response_sender, .. } - ) if exec_timeout_kind == PvfExecTimeoutKind::Approval => { + CandidateValidationMessage::ValidateFromExhaustive { exec_kind, response_sender, .. } + ) if exec_kind == PvfExecKind::Approval => { response_sender.send(Ok(ValidationResult::Valid(dummy_candidate_commitments(None), PersistedValidationData::default()))).unwrap(); }, "overseer did not receive candidate validation message", diff --git a/polkadot/node/malus/src/variants/common.rs b/polkadot/node/malus/src/variants/common.rs index 474887ee8df..20b6654638e 100644 --- a/polkadot/node/malus/src/variants/common.rs +++ b/polkadot/node/malus/src/variants/common.rs @@ -30,7 +30,7 @@ use polkadot_node_subsystem::{ use polkadot_primitives::{ CandidateCommitments, CandidateDescriptor, CandidateReceipt, PersistedValidationData, - PvfExecTimeoutKind, + PvfExecKind, }; use futures::channel::oneshot; @@ -90,10 +90,10 @@ impl FakeCandidateValidation { } } - fn should_misbehave(&self, timeout: PvfExecTimeoutKind) -> bool { + fn should_misbehave(&self, timeout: PvfExecKind) -> bool { match timeout { - PvfExecTimeoutKind::Backing => self.includes_backing(), - PvfExecTimeoutKind::Approval => self.includes_approval(), + PvfExecKind::Backing => self.includes_backing(), + PvfExecKind::Approval => self.includes_approval(), } } } @@ -279,13 +279,13 @@ where candidate_receipt, pov, executor_params, - exec_timeout_kind, + exec_kind, response_sender, .. }, } => { match self.fake_validation { - x if x.misbehaves_valid() && x.should_misbehave(exec_timeout_kind) => { + x if x.misbehaves_valid() && x.should_misbehave(exec_kind) => { // Behave normally if the `PoV` is not known to be malicious. if pov.block_data.0.as_slice() != MALICIOUS_POV { return Some(FromOrchestra::Communication { @@ -295,7 +295,7 @@ where candidate_receipt, pov, executor_params, - exec_timeout_kind, + exec_kind, response_sender, }, }) @@ -333,14 +333,14 @@ where candidate_receipt, pov, executor_params, - exec_timeout_kind, + exec_kind, response_sender, }, }) }, } }, - x if x.misbehaves_invalid() && x.should_misbehave(exec_timeout_kind) => { + x if x.misbehaves_invalid() && x.should_misbehave(exec_kind) => { // Set the validation result to invalid with probability `p` and trigger a // dispute let behave_maliciously = self.distribution.sample(&mut rand::thread_rng()); @@ -373,7 +373,7 @@ where candidate_receipt, pov, executor_params, - exec_timeout_kind, + exec_kind, response_sender, }, }) @@ -388,7 +388,7 @@ where candidate_receipt, pov, executor_params, - exec_timeout_kind, + exec_kind, response_sender, }, }), @@ -401,13 +401,13 @@ where candidate_receipt, pov, executor_params, - exec_timeout_kind, + exec_kind, response_sender, .. }, } => { match self.fake_validation { - x if x.misbehaves_valid() && x.should_misbehave(exec_timeout_kind) => { + x if x.misbehaves_valid() && x.should_misbehave(exec_kind) => { // Behave normally if the `PoV` is not known to be malicious. if pov.block_data.0.as_slice() != MALICIOUS_POV { return Some(FromOrchestra::Communication { @@ -415,7 +415,7 @@ where candidate_receipt, pov, executor_params, - exec_timeout_kind, + exec_kind, response_sender, }, }) @@ -445,13 +445,13 @@ where candidate_receipt, pov, executor_params, - exec_timeout_kind, + exec_kind, response_sender, }, }), } }, - x if x.misbehaves_invalid() && x.should_misbehave(exec_timeout_kind) => { + x if x.misbehaves_invalid() && x.should_misbehave(exec_kind) => { // Maliciously set the validation result to invalid for a valid candidate // with probability `p` let behave_maliciously = self.distribution.sample(&mut rand::thread_rng()); @@ -479,7 +479,7 @@ where candidate_receipt, pov, executor_params, - exec_timeout_kind, + exec_kind, response_sender, }, }) @@ -491,7 +491,7 @@ where candidate_receipt, pov, executor_params, - exec_timeout_kind, + exec_kind, response_sender, }, }), diff --git a/polkadot/node/overseer/examples/minimal-example.rs b/polkadot/node/overseer/examples/minimal-example.rs index b2c0ea2f75a..857cdba673d 100644 --- a/polkadot/node/overseer/examples/minimal-example.rs +++ b/polkadot/node/overseer/examples/minimal-example.rs @@ -32,7 +32,7 @@ use polkadot_overseer::{ gen::{FromOrchestra, SpawnedSubsystem}, HeadSupportsParachains, SubsystemError, }; -use polkadot_primitives::{CandidateReceipt, Hash, PvfExecTimeoutKind}; +use polkadot_primitives::{CandidateReceipt, Hash, PvfExecKind}; struct AlwaysSupportsParachains; @@ -77,7 +77,7 @@ impl Subsystem1 { candidate_receipt, pov: PoV { block_data: BlockData(Vec::new()) }.into(), executor_params: Default::default(), - exec_timeout_kind: PvfExecTimeoutKind::Backing, + exec_kind: PvfExecKind::Backing, response_sender: tx, }; ctx.send_message(msg).await; diff --git a/polkadot/node/overseer/src/tests.rs b/polkadot/node/overseer/src/tests.rs index 254f5fe4512..0494274367d 100644 --- a/polkadot/node/overseer/src/tests.rs +++ b/polkadot/node/overseer/src/tests.rs @@ -30,7 +30,7 @@ use polkadot_node_subsystem_types::messages::{ }; use polkadot_primitives::{ CandidateHash, CandidateReceipt, CollatorPair, Id as ParaId, InvalidDisputeStatementKind, - PvfExecTimeoutKind, SessionIndex, ValidDisputeStatementKind, ValidatorIndex, + PvfExecKind, SessionIndex, ValidDisputeStatementKind, ValidatorIndex, }; use crate::{ @@ -106,7 +106,7 @@ where candidate_receipt, pov: PoV { block_data: BlockData(Vec::new()) }.into(), executor_params: Default::default(), - exec_timeout_kind: PvfExecTimeoutKind::Backing, + exec_kind: PvfExecKind::Backing, response_sender: tx, }) .await; @@ -804,7 +804,7 @@ fn test_candidate_validation_msg() -> CandidateValidationMessage { candidate_receipt, pov, executor_params: Default::default(), - exec_timeout_kind: PvfExecTimeoutKind::Backing, + exec_kind: PvfExecKind::Backing, response_sender, } } diff --git a/polkadot/node/subsystem-types/src/messages.rs b/polkadot/node/subsystem-types/src/messages.rs index 43456daec30..44c6f27b17c 100644 --- a/polkadot/node/subsystem-types/src/messages.rs +++ b/polkadot/node/subsystem-types/src/messages.rs @@ -47,7 +47,7 @@ use polkadot_primitives::{ CommittedCandidateReceipt, CoreState, DisputeState, ExecutorParams, GroupIndex, GroupRotationInfo, Hash, Header as BlockHeader, Id as ParaId, InboundDownwardMessage, InboundHrmpMessage, MultiDisputeStatementSet, OccupiedCoreAssumption, PersistedValidationData, - PvfCheckStatement, PvfExecTimeoutKind, SessionIndex, SessionInfo, SignedAvailabilityBitfield, + PvfCheckStatement, PvfExecKind, SessionIndex, SessionInfo, SignedAvailabilityBitfield, SignedAvailabilityBitfields, ValidationCode, ValidationCodeHash, ValidatorId, ValidatorIndex, ValidatorSignature, }; @@ -150,8 +150,8 @@ pub enum CandidateValidationMessage { pov: Arc, /// Session's executor parameters executor_params: ExecutorParams, - /// Execution timeout kind (backing/approvals) - exec_timeout_kind: PvfExecTimeoutKind, + /// Execution kind, used for timeouts and retries (backing/approvals) + exec_kind: PvfExecKind, /// The sending side of the response channel response_sender: oneshot::Sender>, }, @@ -175,8 +175,8 @@ pub enum CandidateValidationMessage { pov: Arc, /// Session's executor parameters executor_params: ExecutorParams, - /// Execution timeout kind (backing/approvals) - exec_timeout_kind: PvfExecTimeoutKind, + /// Execution kind, used for timeouts and retries (backing/approvals) + exec_kind: PvfExecKind, /// The sending side of the response channel response_sender: oneshot::Sender>, }, diff --git a/polkadot/primitives/src/lib.rs b/polkadot/primitives/src/lib.rs index 4ba8b8b031f..2570bcadf60 100644 --- a/polkadot/primitives/src/lib.rs +++ b/polkadot/primitives/src/lib.rs @@ -48,11 +48,11 @@ pub use v6::{ HorizontalMessages, HrmpChannelId, Id, InboundDownwardMessage, InboundHrmpMessage, IndexedVec, InherentData, InvalidDisputeStatementKind, Moment, MultiDisputeStatementSet, Nonce, OccupiedCore, OccupiedCoreAssumption, OutboundHrmpMessage, ParathreadClaim, ParathreadEntry, - PersistedValidationData, PvfCheckStatement, PvfExecTimeoutKind, PvfPrepTimeoutKind, - RuntimeMetricLabel, RuntimeMetricLabelValue, RuntimeMetricLabelValues, RuntimeMetricLabels, - RuntimeMetricOp, RuntimeMetricUpdate, ScheduledCore, ScrapedOnChainVotes, SessionIndex, - SessionInfo, Signature, Signed, SignedAvailabilityBitfield, SignedAvailabilityBitfields, - SignedStatement, SigningContext, Slot, UncheckedSigned, UncheckedSignedAvailabilityBitfield, + PersistedValidationData, PvfCheckStatement, PvfExecKind, PvfPrepKind, RuntimeMetricLabel, + RuntimeMetricLabelValue, RuntimeMetricLabelValues, RuntimeMetricLabels, RuntimeMetricOp, + RuntimeMetricUpdate, ScheduledCore, ScrapedOnChainVotes, SessionIndex, SessionInfo, Signature, + Signed, SignedAvailabilityBitfield, SignedAvailabilityBitfields, SignedStatement, + SigningContext, Slot, UncheckedSigned, UncheckedSignedAvailabilityBitfield, UncheckedSignedAvailabilityBitfields, UncheckedSignedStatement, UpgradeGoAhead, UpgradeRestriction, UpwardMessage, ValidDisputeStatementKind, ValidationCode, ValidationCodeHash, ValidatorId, ValidatorIndex, ValidatorSignature, ValidityAttestation, diff --git a/polkadot/primitives/src/v6/executor_params.rs b/polkadot/primitives/src/v6/executor_params.rs index bb9980f6879..112a529f62b 100644 --- a/polkadot/primitives/src/v6/executor_params.rs +++ b/polkadot/primitives/src/v6/executor_params.rs @@ -21,7 +21,7 @@ //! by the first element of the vector). Decoding to a usable semantics structure is //! done in `polkadot-node-core-pvf`. -use crate::{BlakeTwo256, HashT as _, PvfExecTimeoutKind, PvfPrepTimeoutKind}; +use crate::{BlakeTwo256, HashT as _, PvfExecKind, PvfPrepKind}; use parity_scale_codec::{Decode, Encode}; use polkadot_core_primitives::Hash; use scale_info::TypeInfo; @@ -45,7 +45,7 @@ pub const PRECHECK_MEM_MAX_LO: u64 = 256 * 1024 * 1024; pub const PRECHECK_MEM_MAX_HI: u64 = 16 * 1024 * 1024 * 1024; // Default PVF timeouts. Must never be changed! Use executor environment parameters to adjust them. -// See also `PvfPrepTimeoutKind` and `PvfExecTimeoutKind` docs. +// See also `PvfPrepKind` and `PvfExecKind` docs. /// Default PVF preparation timeout for prechecking requests. pub const DEFAULT_PRECHECK_PREPARATION_TIMEOUT: Duration = Duration::from_secs(60); @@ -99,12 +99,12 @@ pub enum ExecutorParam { /// Always ensure that `precheck_timeout` < `lenient_timeout`. /// When absent, the default values will be used. #[codec(index = 5)] - PvfPrepTimeout(PvfPrepTimeoutKind, u64), + PvfPrepTimeout(PvfPrepKind, u64), /// PVF execution timeouts, in millisecond. /// Always ensure that `backing_timeout` < `approval_timeout`. /// When absent, the default values will be used. #[codec(index = 6)] - PvfExecTimeout(PvfExecTimeoutKind, u64), + PvfExecTimeout(PvfExecKind, u64), /// Enables WASM bulk memory proposal #[codec(index = 7)] WasmExtBulkMemory, @@ -174,7 +174,7 @@ impl ExecutorParams { } /// Returns a PVF preparation timeout, if any - pub fn pvf_prep_timeout(&self, kind: PvfPrepTimeoutKind) -> Option { + pub fn pvf_prep_timeout(&self, kind: PvfPrepKind) -> Option { for param in &self.0 { if let ExecutorParam::PvfPrepTimeout(k, timeout) = param { if kind == *k { @@ -186,7 +186,7 @@ impl ExecutorParams { } /// Returns a PVF execution timeout, if any - pub fn pvf_exec_timeout(&self, kind: PvfExecTimeoutKind) -> Option { + pub fn pvf_exec_timeout(&self, kind: PvfExecKind) -> Option { for param in &self.0 { if let ExecutorParam::PvfExecTimeout(k, timeout) = param { if kind == *k { @@ -242,12 +242,12 @@ impl ExecutorParams { StackNativeMax(_) => "StackNativeMax", PrecheckingMaxMemory(_) => "PrecheckingMaxMemory", PvfPrepTimeout(kind, _) => match kind { - PvfPrepTimeoutKind::Precheck => "PvfPrepTimeoutKind::Precheck", - PvfPrepTimeoutKind::Lenient => "PvfPrepTimeoutKind::Lenient", + PvfPrepKind::Precheck => "PvfPrepKind::Precheck", + PvfPrepKind::Prepare => "PvfPrepKind::Prepare", }, PvfExecTimeout(kind, _) => match kind { - PvfExecTimeoutKind::Backing => "PvfExecTimeoutKind::Backing", - PvfExecTimeoutKind::Approval => "PvfExecTimeoutKind::Approval", + PvfExecKind::Backing => "PvfExecKind::Backing", + PvfExecKind::Approval => "PvfExecKind::Approval", }, WasmExtBulkMemory => "WasmExtBulkMemory", }; @@ -297,30 +297,23 @@ impl ExecutorParams { } if let (Some(precheck), Some(lenient)) = ( - seen.get("PvfPrepTimeoutKind::Precheck") + seen.get("PvfPrepKind::Precheck") .or(Some(&DEFAULT_PRECHECK_PREPARATION_TIMEOUT_MS)), - seen.get("PvfPrepTimeoutKind::Lenient") + seen.get("PvfPrepKind::Prepare") .or(Some(&DEFAULT_LENIENT_PREPARATION_TIMEOUT_MS)), ) { if *precheck >= *lenient { - return Err(IncompatibleValues( - "PvfPrepTimeoutKind::Precheck", - "PvfPrepTimeoutKind::Lenient", - )) + return Err(IncompatibleValues("PvfPrepKind::Precheck", "PvfPrepKind::Prepare")) } } if let (Some(backing), Some(approval)) = ( - seen.get("PvfExecTimeoutKind::Backing") - .or(Some(&DEFAULT_BACKING_EXECUTION_TIMEOUT_MS)), - seen.get("PvfExecTimeoutKind::Approval") + seen.get("PvfExecKind::Backing").or(Some(&DEFAULT_BACKING_EXECUTION_TIMEOUT_MS)), + seen.get("PvfExecKind::Approval") .or(Some(&DEFAULT_APPROVAL_EXECUTION_TIMEOUT_MS)), ) { if *backing >= *approval { - return Err(IncompatibleValues( - "PvfExecTimeoutKind::Backing", - "PvfExecTimeoutKind::Approval", - )) + return Err(IncompatibleValues("PvfExecKind::Backing", "PvfExecKind::Approval")) } } diff --git a/polkadot/primitives/src/v6/mod.rs b/polkadot/primitives/src/v6/mod.rs index 9371b3db406..83b590dc320 100644 --- a/polkadot/primitives/src/v6/mod.rs +++ b/polkadot/primitives/src/v6/mod.rs @@ -1781,30 +1781,22 @@ impl WellKnownKey { } } -/// Type discriminator for PVF preparation timeouts +/// Type discriminator for PVF preparation. #[derive(Encode, Decode, TypeInfo, Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)] -pub enum PvfPrepTimeoutKind { - /// For prechecking requests, the time period after which the preparation worker is considered - /// unresponsive and will be killed. +pub enum PvfPrepKind { + /// For prechecking requests. Precheck, - /// For execution and heads-up requests, the time period after which the preparation worker is - /// considered unresponsive and will be killed. More lenient than the timeout for prechecking - /// to prevent honest validators from timing out on valid PVFs. - Lenient, + /// For execution and heads-up requests. + Prepare, } -/// Type discriminator for PVF execution timeouts +/// Type discriminator for PVF execution. #[derive(Encode, Decode, TypeInfo, Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)] -pub enum PvfExecTimeoutKind { - /// The amount of time to spend on execution during backing. +pub enum PvfExecKind { + /// For backing requests. Backing, - - /// The amount of time to spend on execution during approval or disputes. - /// - /// This should be much longer than the backing execution timeout to ensure that in the - /// absence of extremely large disparities between hardware, blocks that pass backing are - /// considered executable by approval checkers or dispute participants. + /// For approval and dispute request. Approval, } diff --git a/polkadot/roadmap/implementers-guide/src/node/utility/pvf-host-and-workers.md b/polkadot/roadmap/implementers-guide/src/node/utility/pvf-host-and-workers.md index 4dbb7980c1b..74d88ba3ad9 100644 --- a/polkadot/roadmap/implementers-guide/src/node/utility/pvf-host-and-workers.md +++ b/polkadot/roadmap/implementers-guide/src/node/utility/pvf-host-and-workers.md @@ -31,6 +31,10 @@ hopefully resolve. We use a more brief delay here (1 second as opposed to 15 minutes for preparation (see above)), because a successful execution must happen in a short amount of time. +If the execution fails during the backing phase, we won't retry to reduce the chance of +supporting nondeterministic candidates. This reduces the chance of nondeterministic blocks +getting backed and honest backers getting slashed. + We currently know of the following specific cases that will lead to a retried execution request: diff --git a/polkadot/runtime/parachains/src/configuration/benchmarking.rs b/polkadot/runtime/parachains/src/configuration/benchmarking.rs index 508e0579a09..67daf1c4598 100644 --- a/polkadot/runtime/parachains/src/configuration/benchmarking.rs +++ b/polkadot/runtime/parachains/src/configuration/benchmarking.rs @@ -17,7 +17,7 @@ use crate::configuration::*; use frame_benchmarking::{benchmarks, BenchmarkError, BenchmarkResult}; use frame_system::RawOrigin; -use primitives::{ExecutorParam, ExecutorParams, PvfExecTimeoutKind, PvfPrepTimeoutKind}; +use primitives::{ExecutorParam, ExecutorParams, PvfExecKind, PvfPrepKind}; use sp_runtime::traits::One; benchmarks! { @@ -41,10 +41,10 @@ benchmarks! { ExecutorParam::StackNativeMax(256 * 1024 * 1024), ExecutorParam::WasmExtBulkMemory, ExecutorParam::PrecheckingMaxMemory(2 * 1024 * 1024 * 1024), - ExecutorParam::PvfPrepTimeout(PvfPrepTimeoutKind::Precheck, 60_000), - ExecutorParam::PvfPrepTimeout(PvfPrepTimeoutKind::Lenient, 360_000), - ExecutorParam::PvfExecTimeout(PvfExecTimeoutKind::Backing, 2_000), - ExecutorParam::PvfExecTimeout(PvfExecTimeoutKind::Approval, 12_000), + ExecutorParam::PvfPrepTimeout(PvfPrepKind::Precheck, 60_000), + ExecutorParam::PvfPrepTimeout(PvfPrepKind::Prepare, 360_000), + ExecutorParam::PvfExecTimeout(PvfExecKind::Backing, 2_000), + ExecutorParam::PvfExecTimeout(PvfExecKind::Approval, 12_000), ][..])) set_config_with_perbill {}: set_on_demand_fee_variability(RawOrigin::Root, Perbill::from_percent(100)) -- GitLab From 126f64a91ee0c0333f368fe67bb00d56d68ecb34 Mon Sep 17 00:00:00 2001 From: Javier Viola Date: Tue, 21 Nov 2023 07:38:04 -0300 Subject: [PATCH 023/102] bump zombienet version `v1.3.82` (#2396) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Includes: - bump `pjs` modules versions - re-enable test disable in https://github.com/paritytech/polkadot-sdk/pull/2294 --------- Co-authored-by: Bastian Köcher --- .gitlab-ci.yml | 4 ---- .gitlab/pipeline/zombienet.yml | 5 +++++ .gitlab/pipeline/zombienet/substrate.yml | 15 +++++++-------- .../skip-feeless-payment/src/lib.rs | 15 +++++++++------ 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b485ca3317e..e698aba81d5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -30,7 +30,6 @@ variables: RUSTY_CACHIER_COMPRESSION_METHOD: zstd NEXTEST_FAILURE_OUTPUT: immediate-final NEXTEST_SUCCESS_OUTPUT: final - ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.3.80" DOCKER_IMAGES_VERSION: "${CI_COMMIT_SHA}" default: @@ -199,9 +198,6 @@ default: - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs - if: $CI_COMMIT_REF_NAME =~ /^gh-readonly-queue.*$/ # merge queues -.zombienet-refs: - extends: .build-refs - include: # check jobs - .gitlab/pipeline/check.yml diff --git a/.gitlab/pipeline/zombienet.yml b/.gitlab/pipeline/zombienet.yml index 64210d6a00a..fc3fd125619 100644 --- a/.gitlab/pipeline/zombienet.yml +++ b/.gitlab/pipeline/zombienet.yml @@ -1,3 +1,8 @@ +.zombienet-refs: + extends: .build-refs + variables: + ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.3.82" + include: # substrate tests - .gitlab/pipeline/zombienet/substrate.yml diff --git a/.gitlab/pipeline/zombienet/substrate.yml b/.gitlab/pipeline/zombienet/substrate.yml index 6334e7db9a3..b687576267d 100644 --- a/.gitlab/pipeline/zombienet/substrate.yml +++ b/.gitlab/pipeline/zombienet/substrate.yml @@ -40,14 +40,13 @@ tags: - zombienet-polkadot-integration-test -# Skip this one until PolkadotJS includes `SkipCheckIfFeeless` extension -# zombienet-substrate-0000-block-building: -# extends: -# - .zombienet-substrate-common -# script: -# - /home/nonroot/zombie-net/scripts/ci/run-test-local-env-manager.sh -# --local-dir="${LOCAL_DIR}/0000-block-building" -# --test="block-building.zndsl" +zombienet-substrate-0000-block-building: + extends: + - .zombienet-substrate-common + script: + - /home/nonroot/zombie-net/scripts/ci/run-test-local-env-manager.sh + --local-dir="${LOCAL_DIR}/0000-block-building" + --test="block-building.zndsl" zombienet-substrate-0001-basic-warp-sync: extends: diff --git a/substrate/frame/transaction-payment/skip-feeless-payment/src/lib.rs b/substrate/frame/transaction-payment/skip-feeless-payment/src/lib.rs index 923c7e7ebc2..55afaaf93d7 100644 --- a/substrate/frame/transaction-payment/skip-feeless-payment/src/lib.rs +++ b/substrate/frame/transaction-payment/skip-feeless-payment/src/lib.rs @@ -77,9 +77,9 @@ pub mod pallet { /// A [`SignedExtension`] that skips the wrapped extension if the dispatchable is feeless. #[derive(Encode, Decode, Clone, Eq, PartialEq, TypeInfo)] #[scale_info(skip_type_params(T))] -pub struct SkipCheckIfFeeless(pub S, sp_std::marker::PhantomData); +pub struct SkipCheckIfFeeless(pub S, sp_std::marker::PhantomData); -impl sp_std::fmt::Debug for SkipCheckIfFeeless { +impl sp_std::fmt::Debug for SkipCheckIfFeeless { #[cfg(feature = "std")] fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { write!(f, "SkipCheckIfFeeless<{:?}>", self.0.encode()) @@ -90,9 +90,8 @@ impl sp_std::fmt::Debug for SkipCheckIfFeeless SkipCheckIfFeeless { - /// utility constructor. Used only in client/factory code. - pub fn from(s: S) -> Self { +impl From for SkipCheckIfFeeless { + fn from(s: S) -> Self { Self(s, sp_std::marker::PhantomData) } } @@ -106,7 +105,11 @@ where type Call = S::Call; type AdditionalSigned = S::AdditionalSigned; type Pre = (Self::AccountId, Option<::Pre>); - const IDENTIFIER: &'static str = "SkipCheckIfFeeless"; + // From the outside this extension should be "invisible", because it just extends the wrapped + // extension with an extra check in `pre_dispatch` and `post_dispatch`. Thus, we should forward + // the identifier of the wrapped extension to let wallets see this extension as it would only be + // the wrapped extension itself. + const IDENTIFIER: &'static str = S::IDENTIFIER; fn additional_signed(&self) -> Result { self.0.additional_signed() -- GitLab From 2fd8c51ebcfcf7d10cab2a2827211583418a90a0 Mon Sep 17 00:00:00 2001 From: Michal Kucharczyk <1728078+michalkucharczyk@users.noreply.github.com> Date: Tue, 21 Nov 2023 11:51:23 +0100 Subject: [PATCH 024/102] `chain-spec-builder`: cleanup (#2174) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR removes: - `New`, `Generate`, `Edit` commands, - `kitchensink` dependency from the `chain-spec-builder` util. New `convert-to-raw`, `update-code` commands were added. Additionally renames the `runtime` command (which was added in #1256) to `create`. --------- Co-authored-by: Sebastian Kunert Co-authored-by: Bastian Köcher Co-authored-by: command-bot <> --- Cargo.lock | 7 - .../bin/utils/chain-spec-builder/Cargo.toml | 7 - .../bin/utils/chain-spec-builder/bin/main.rs | 127 ++------ .../bin/utils/chain-spec-builder/src/lib.rs | 295 +++++------------- 4 files changed, 116 insertions(+), 320 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b2d655e6f41..697f232f971 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18315,18 +18315,11 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" name = "staging-chain-spec-builder" version = "2.0.0" dependencies = [ - "ansi_term", "clap 4.4.6", - "kitchensink-runtime", "log", - "rand 0.8.5", "sc-chain-spec", - "sc-keystore", "serde_json", - "sp-core", - "sp-keystore", "sp-tracing 10.0.0", - "staging-node-cli", ] [[package]] diff --git a/substrate/bin/utils/chain-spec-builder/Cargo.toml b/substrate/bin/utils/chain-spec-builder/Cargo.toml index 0b373b8e924..f587989e003 100644 --- a/substrate/bin/utils/chain-spec-builder/Cargo.toml +++ b/substrate/bin/utils/chain-spec-builder/Cargo.toml @@ -20,15 +20,8 @@ name = "chain-spec-builder" crate-type = ["rlib"] [dependencies] -ansi_term = "0.12.1" clap = { version = "4.4.6", features = ["derive"] } -rand = "0.8" -kitchensink-runtime = { version = "3.0.0-dev", path = "../../node/runtime" } log = "0.4.17" -node-cli = { package = "staging-node-cli", path = "../../node/cli" } sc-chain-spec = { path = "../../../client/chain-spec" } -sc-keystore = { path = "../../../client/keystore" } serde_json = "1.0.108" -sp-core = { path = "../../../primitives/core" } -sp-keystore = { path = "../../../primitives/keystore" } sp-tracing = { version = "10.0.0", path = "../../../primitives/tracing" } diff --git a/substrate/bin/utils/chain-spec-builder/bin/main.rs b/substrate/bin/utils/chain-spec-builder/bin/main.rs index 83892afd6ac..986293179a9 100644 --- a/substrate/bin/utils/chain-spec-builder/bin/main.rs +++ b/substrate/bin/utils/chain-spec-builder/bin/main.rs @@ -17,14 +17,11 @@ // along with this program. If not, see . use chain_spec_builder::{ - generate_authority_keys_and_store, generate_chain_spec, generate_chain_spec_for_runtime, - print_seeds, ChainSpecBuilder, ChainSpecBuilderCmd, EditCmd, GenerateCmd, NewCmd, VerifyCmd, + generate_chain_spec_for_runtime, ChainSpecBuilder, ChainSpecBuilderCmd, ConvertToRawCmd, + UpdateCodeCmd, VerifyCmd, }; use clap::Parser; -use node_cli::chain_spec; -use rand::{distributions::Alphanumeric, rngs::OsRng, Rng}; use sc_chain_spec::{update_code_in_json_chain_spec, GenericChainSpec}; -use sp_core::{crypto::Ss58Codec, sr25519}; use staging_chain_spec_builder as chain_spec_builder; use std::fs; @@ -32,110 +29,48 @@ fn main() -> Result<(), String> { sp_tracing::try_init_simple(); let builder = ChainSpecBuilder::parse(); - #[cfg(build_type = "debug")] - if matches!(builder.command, ChainSpecBuilderCmd::Generate(_) | ChainSpecBuilderCmd::New(_)) { - println!( - "The chain spec builder builds a chain specification that includes a Substrate runtime \ - compiled as WASM. To ensure proper functioning of the included runtime compile (or run) \ - the chain spec builder binary in `--release` mode.\n", - ); - } - let chain_spec_path = builder.chain_spec_path.to_path_buf(); - let mut write_chain_spec = true; - - let chain_spec_json = match builder.command { - ChainSpecBuilderCmd::Generate(GenerateCmd { - authorities, - nominators, - endowed, - keystore_path, - }) => { - let authorities = authorities.max(1); - let rand_str = || -> String { - OsRng.sample_iter(&Alphanumeric).take(32).map(char::from).collect() - }; - - let authority_seeds = (0..authorities).map(|_| rand_str()).collect::>(); - let nominator_seeds = (0..nominators).map(|_| rand_str()).collect::>(); - let endowed_seeds = (0..endowed).map(|_| rand_str()).collect::>(); - let sudo_seed = rand_str(); - - print_seeds(&authority_seeds, &nominator_seeds, &endowed_seeds, &sudo_seed); - - if let Some(keystore_path) = keystore_path { - generate_authority_keys_and_store(&authority_seeds, &keystore_path)?; - } - - let nominator_accounts = nominator_seeds - .into_iter() - .map(|seed| { - chain_spec::get_account_id_from_seed::(&seed).to_ss58check() - }) - .collect(); - - let endowed_accounts = endowed_seeds - .into_iter() - .map(|seed| { - chain_spec::get_account_id_from_seed::(&seed).to_ss58check() - }) - .collect(); - let sudo_account = - chain_spec::get_account_id_from_seed::(&sudo_seed).to_ss58check(); - - generate_chain_spec(authority_seeds, nominator_accounts, endowed_accounts, sudo_account) + match builder.command { + ChainSpecBuilderCmd::Create(cmd) => { + let chain_spec_json = generate_chain_spec_for_runtime(&cmd)?; + fs::write(chain_spec_path, chain_spec_json).map_err(|err| err.to_string())?; }, - ChainSpecBuilderCmd::New(NewCmd { - authority_seeds, - nominator_accounts, - endowed_accounts, - sudo_account, - }) => - generate_chain_spec(authority_seeds, nominator_accounts, endowed_accounts, sudo_account), - ChainSpecBuilderCmd::Runtime(cmd) => generate_chain_spec_for_runtime(&cmd), - ChainSpecBuilderCmd::Edit(EditCmd { + ChainSpecBuilderCmd::UpdateCode(UpdateCodeCmd { ref input_chain_spec, ref runtime_wasm_path, - convert_to_raw, }) => { let chain_spec = GenericChainSpec::<()>::from_json_file(input_chain_spec.clone())?; let mut chain_spec_json = - serde_json::from_str::(&chain_spec.as_json(convert_to_raw)?) + serde_json::from_str::(&chain_spec.as_json(false)?) .map_err(|e| format!("Conversion to json failed: {e}"))?; - if let Some(path) = runtime_wasm_path { - update_code_in_json_chain_spec( - &mut chain_spec_json, - &fs::read(path.as_path()) - .map_err(|e| format!("Wasm blob file could not be read: {e}"))?[..], - ); - } - - serde_json::to_string_pretty(&chain_spec_json) - .map_err(|e| format!("to pretty failed: {e}")) + update_code_in_json_chain_spec( + &mut chain_spec_json, + &fs::read(runtime_wasm_path.as_path()) + .map_err(|e| format!("Wasm blob file could not be read: {e}"))?[..], + ); + + let chain_spec_json = serde_json::to_string_pretty(&chain_spec_json) + .map_err(|e| format!("to pretty failed: {e}"))?; + fs::write(chain_spec_path, chain_spec_json).map_err(|err| err.to_string())?; }, - ChainSpecBuilderCmd::Verify(VerifyCmd { ref input_chain_spec, ref runtime_wasm_path }) => { - write_chain_spec = false; + ChainSpecBuilderCmd::ConvertToRaw(ConvertToRawCmd { ref input_chain_spec }) => { let chain_spec = GenericChainSpec::<()>::from_json_file(input_chain_spec.clone())?; - let mut chain_spec_json = + + let chain_spec_json = serde_json::from_str::(&chain_spec.as_json(true)?) .map_err(|e| format!("Conversion to json failed: {e}"))?; - if let Some(path) = runtime_wasm_path { - update_code_in_json_chain_spec( - &mut chain_spec_json, - &fs::read(path.as_path()) - .map_err(|e| format!("Wasm blob file could not be read: {e}"))?[..], - ); - }; - serde_json::to_string_pretty(&chain_spec_json) - .map_err(|e| format!("to pretty failed: {e}")) - }, - }?; - if write_chain_spec { - fs::write(chain_spec_path, chain_spec_json).map_err(|err| err.to_string()) - } else { - Ok(()) - } + let chain_spec_json = serde_json::to_string_pretty(&chain_spec_json) + .map_err(|e| format!("Conversion to pretty failed: {e}"))?; + fs::write(chain_spec_path, chain_spec_json).map_err(|err| err.to_string())?; + }, + ChainSpecBuilderCmd::Verify(VerifyCmd { ref input_chain_spec }) => { + let chain_spec = GenericChainSpec::<()>::from_json_file(input_chain_spec.clone())?; + let _ = serde_json::from_str::(&chain_spec.as_json(true)?) + .map_err(|e| format!("Conversion to json failed: {e}"))?; + }, + }; + Ok(()) } diff --git a/substrate/bin/utils/chain-spec-builder/src/lib.rs b/substrate/bin/utils/chain-spec-builder/src/lib.rs index 6f21b68c368..60ec0f1a656 100644 --- a/substrate/bin/utils/chain-spec-builder/src/lib.rs +++ b/substrate/bin/utils/chain-spec-builder/src/lib.rs @@ -21,31 +21,69 @@ //! A chain-spec is short for `chain-configuration`. See the [`sc-chain-spec`] for more information. //! //! Note that this binary is analogous to the `build-spec` subcommand, contained in typical -//! substrate-based nodes. This particular binary is capable of building a more sophisticated chain -//! specification that can be used with the substrate-node, ie. [`node-cli`]. +//! substrate-based nodes. This particular binary is capable of interacting with +//! [`sp-genesis-builder`] implementation of any provided runtime allowing to build chain-spec JSON +//! files. //! -//! See [`ChainSpecBuilder`] for a list of available commands. +//! See [`ChainSpecBuilderCmd`] for a list of available commands. +//! +//! ## Typical use-cases. +//! ##### Get default config from runtime. +//! +//! Query the default genesis config from the provided `runtime.wasm` and use it in the chain +//! spec. Tool can also store runtime's default genesis config in given file: +//! ```text +//! chain-spec-builder create -r runtime.wasm default /dev/stdout +//! ``` +//! +//! _Note:_ [`GenesisBuilder::create_default_config`][sp-genesis-builder-create] runtime function is called. +//! +//! +//! ##### Generate raw storage chain spec using genesis config patch. +//! +//! Patch the runtime's default genesis config with provided `patch.json` and generate raw +//! storage (`-s`) version of chain spec: +//! ```text +//! chain-spec-builder create -s -r runtime.wasm patch patch.json +//! ``` +//! +//! _Note:_ [`GenesisBuilder::build_config`][sp-genesis-builder-build] runtime function is called. +//! +//! ##### Generate raw storage chain spec using full genesis config. +//! +//! Build the chain spec using provided full genesis config json file. No defaults will be used: +//! ```text +//! chain-spec-builder create -s -r runtime.wasm full full-genesis-config.json +//! ``` +//! +//! _Note_: [`GenesisBuilder::build_config`][sp-genesis-builder-build] runtime function is called. +//! +//! ##### Generate human readable chain spec using provided genesis config patch. +//! ```text +//! chain-spec-builder create -r runtime.wasm patch patch.json +//! ``` +//! +//! ##### Generate human readable chain spec using provided full genesis config. +//! ```text +//! chain-spec-builder create -r runtime.wasm full full-genesis-config.json +//! ``` +//! +//! ##### Extra tools. +//! The `chain-spec-builder` provides also some extra utilities: [`VerifyCmd`], [`ConvertToRawCmd`], [`UpdateCodeCmd`]. //! //! [`sc-chain-spec`]: ../sc_chain_spec/index.html //! [`node-cli`]: ../node_cli/index.html +//! [`sp-genesis-builder`]: ../sp_genesis_builder/index.html +//! [sp-genesis-builder-create]: ../sp_genesis_builder/trait.GenesisBuilder.html#method.create_default_config +//! [sp-genesis-builder-build]: ../sp_genesis_builder/trait.GenesisBuilder.html#method.build_config -use std::{ - fs, - path::{Path, PathBuf}, -}; +use std::{fs, path::PathBuf}; -use ansi_term::Style; use clap::{Parser, Subcommand}; -use sc_chain_spec::GenesisConfigBuilderRuntimeCaller; - -use node_cli::chain_spec::{self, AccountId}; -use sc_keystore::LocalKeystore; +use sc_chain_spec::{GenericChainSpec, GenesisConfigBuilderRuntimeCaller}; use serde_json::Value; -use sp_core::crypto::{ByteArray, Ss58Codec}; -use sp_keystore::KeystorePtr; -/// A utility to easily create a testnet chain spec definition with a given set -/// of authorities and endowed accounts and/or generate random accounts. +/// A utility to easily create a chain spec definition. #[derive(Debug, Parser)] #[command(rename_all = "kebab-case")] pub struct ChainSpecBuilder { @@ -59,70 +97,25 @@ pub struct ChainSpecBuilder { #[derive(Debug, Subcommand)] #[command(rename_all = "kebab-case")] pub enum ChainSpecBuilderCmd { - New(NewCmd), - Generate(GenerateCmd), - Runtime(RuntimeCmd), - Edit(EditCmd), + Create(CreateCmd), Verify(VerifyCmd), -} - -/// Create a new chain spec with the given authorities, endowed and sudo -/// accounts. Only works for kitchen-sink runtime -#[derive(Parser, Debug)] -#[command(rename_all = "kebab-case")] -pub struct NewCmd { - /// Authority key seed. - #[arg(long, short, required = true)] - pub authority_seeds: Vec, - /// Active nominators (SS58 format), each backing a random subset of the aforementioned - /// authorities. - #[arg(long, short, default_value = "0")] - pub nominator_accounts: Vec, - /// Endowed account address (SS58 format). - #[arg(long, short)] - pub endowed_accounts: Vec, - /// Sudo account address (SS58 format). - #[arg(long, short)] - pub sudo_account: String, -} - -/// Create a new chain spec with the given number of authorities and endowed -/// accounts. Random keys will be generated as required. -#[derive(Parser, Debug)] -pub struct GenerateCmd { - /// The number of authorities. - #[arg(long, short)] - pub authorities: usize, - /// The number of nominators backing the aforementioned authorities. - /// - /// Will nominate a random subset of `authorities`. - #[arg(long, short, default_value_t = 0)] - pub nominators: usize, - /// The number of endowed accounts. - #[arg(long, short, default_value_t = 0)] - pub endowed: usize, - /// Path to use when saving generated keystores for each authority. - /// - /// At this path, a new folder will be created for each authority's - /// keystore named `auth-$i` where `i` is the authority index, i.e. - /// `auth-0`, `auth-1`, etc. - #[arg(long, short)] - pub keystore_path: Option, + UpdateCode(UpdateCodeCmd), + ConvertToRaw(ConvertToRawCmd), } /// Create a new chain spec by interacting with the provided runtime wasm blob. #[derive(Parser, Debug)] -pub struct RuntimeCmd { - /// The name of chain +pub struct CreateCmd { + /// The name of chain. #[arg(long, short = 'n', default_value = "Custom")] chain_name: String, - /// The chain id + /// The chain id. #[arg(long, short = 'i', default_value = "custom")] chain_id: String, - /// The path to runtime wasm blob + /// The path to runtime wasm blob. #[arg(long, short)] runtime_wasm_path: PathBuf, - /// Export chainspec as raw storage + /// Export chainspec as raw storage. #[arg(long, short = 's')] raw_storage: bool, /// Verify the genesis config. This silently generates the raw storage from genesis config. Any @@ -144,7 +137,6 @@ enum GenesisBuildAction { #[derive(Parser, Debug, Clone)] struct PatchCmd { /// The path to the runtime genesis config patch. - #[arg(long, short)] patch_path: PathBuf, } @@ -152,7 +144,6 @@ struct PatchCmd { #[derive(Parser, Debug, Clone)] struct FullCmd { /// The path to the full runtime genesis config json file. - #[arg(long, short)] config_path: PathBuf, } @@ -163,161 +154,45 @@ struct FullCmd { struct DefaultCmd { /// If provided stores the default genesis config json file at given path (in addition to /// chain-spec). - #[arg(long, short)] default_config_path: Option, } -/// Edits provided input chain spec. Input can be converted into raw storage chain-spec. The code -/// can be updated with the runtime provided in the command line. +/// Updates the code in the provided input chain spec. +/// +/// The code field of the chain spec will be updated with the runtime provided in the +/// command line. This operation supports both plain and raw formats. #[derive(Parser, Debug, Clone)] -pub struct EditCmd { - /// Chain spec to be edited - #[arg(long, short)] +pub struct UpdateCodeCmd { + /// Chain spec to be updated. pub input_chain_spec: PathBuf, - /// The path to new runtime wasm blob to be stored into chain-spec - #[arg(long, short = 'r')] - pub runtime_wasm_path: Option, - /// Convert genesis spec to raw format - #[arg(long, short = 's')] - pub convert_to_raw: bool, + /// The path to new runtime wasm blob to be stored into chain-spec. + pub runtime_wasm_path: PathBuf, } -/// Verifies provided input chain spec. If the runtime is provided verification is performed against -/// new runtime. +/// Converts the given chain spec into the raw format. #[derive(Parser, Debug, Clone)] -pub struct VerifyCmd { - /// Chain spec to be edited - #[arg(long, short)] +pub struct ConvertToRawCmd { + /// Chain spec to be converted. pub input_chain_spec: PathBuf, - /// The path to new runtime wasm blob to be stored into chain-spec - #[arg(long, short = 'r')] - pub runtime_wasm_path: Option, -} - -/// Generate the chain spec using the given seeds and accounts. -pub fn generate_chain_spec( - authority_seeds: Vec, - nominator_accounts: Vec, - endowed_accounts: Vec, - sudo_account: String, -) -> Result { - let parse_account = |address: String| { - AccountId::from_string(&address) - .map_err(|err| format!("Failed to parse account address: {:?}", err)) - }; - - let nominator_accounts = nominator_accounts - .into_iter() - .map(parse_account) - .collect::, String>>()?; - - let endowed_accounts = endowed_accounts - .into_iter() - .map(parse_account) - .collect::, String>>()?; - - let sudo_account = parse_account(sudo_account)?; - - let authorities = authority_seeds - .iter() - .map(AsRef::as_ref) - .map(chain_spec::authority_keys_from_seed) - .collect::>(); - - chain_spec::ChainSpec::builder(kitchensink_runtime::wasm_binary_unwrap(), Default::default()) - .with_name("Custom") - .with_id("custom") - .with_chain_type(sc_chain_spec::ChainType::Live) - .with_genesis_config_patch(chain_spec::testnet_genesis( - authorities, - nominator_accounts, - sudo_account, - Some(endowed_accounts), - )) - .build() - .as_json(false) -} - -/// Generate the authority keys and store them in the given `keystore_path`. -pub fn generate_authority_keys_and_store( - seeds: &[String], - keystore_path: &Path, -) -> Result<(), String> { - for (n, seed) in seeds.iter().enumerate() { - let keystore: KeystorePtr = - LocalKeystore::open(keystore_path.join(format!("auth-{}", n)), None) - .map_err(|err| err.to_string())? - .into(); - - let (_, _, grandpa, babe, im_online, authority_discovery, mixnet) = - chain_spec::authority_keys_from_seed(seed); - - let insert_key = |key_type, public| { - keystore - .insert(key_type, &format!("//{}", seed), public) - .map_err(|_| format!("Failed to insert key: {}", grandpa)) - }; - - insert_key(sp_core::crypto::key_types::BABE, babe.as_slice())?; - - insert_key(sp_core::crypto::key_types::GRANDPA, grandpa.as_slice())?; - - insert_key(sp_core::crypto::key_types::IM_ONLINE, im_online.as_slice())?; - - insert_key( - sp_core::crypto::key_types::AUTHORITY_DISCOVERY, - authority_discovery.as_slice(), - )?; - - insert_key(sp_core::crypto::key_types::MIXNET, mixnet.as_slice())?; - } - - Ok(()) } -/// Print the given seeds -pub fn print_seeds( - authority_seeds: &[String], - nominator_seeds: &[String], - endowed_seeds: &[String], - sudo_seed: &str, -) { - let header = Style::new().bold().underline(); - let entry = Style::new().bold(); - - println!("{}", header.paint("Authority seeds")); - - for (n, seed) in authority_seeds.iter().enumerate() { - println!("{} //{}", entry.paint(format!("auth-{}:", n)), seed); - } - - println!("{}", header.paint("Nominator seeds")); - - for (n, seed) in nominator_seeds.iter().enumerate() { - println!("{} //{}", entry.paint(format!("nom-{}:", n)), seed); - } - - println!(); - - if !endowed_seeds.is_empty() { - println!("{}", header.paint("Endowed seeds")); - for (n, seed) in endowed_seeds.iter().enumerate() { - println!("{} //{}", entry.paint(format!("endowed-{}:", n)), seed); - } - - println!(); - } - - println!("{}", header.paint("Sudo seed")); - println!("//{}", sudo_seed); +/// Verifies the provided input chain spec. +/// +/// Silently checks if given input chain spec can be converted to raw. It allows to check if all +/// RuntimeGenesisConfig fiels are properly initialized and if the json does not contain invalid +/// fields. +#[derive(Parser, Debug, Clone)] +pub struct VerifyCmd { + /// Chain spec to be verified. + pub input_chain_spec: PathBuf, } -/// Processes `RuntimeCmd` and returns JSON version of `ChainSpec` -pub fn generate_chain_spec_for_runtime(cmd: &RuntimeCmd) -> Result { +/// Processes `CreateCmd` and returns JSON version of `ChainSpec`. +pub fn generate_chain_spec_for_runtime(cmd: &CreateCmd) -> Result { let code = fs::read(cmd.runtime_wasm_path.as_path()) .map_err(|e| format!("wasm blob shall be readable {e}"))?; - let builder = chain_spec::ChainSpec::builder(&code[..], Default::default()) + let builder = GenericChainSpec::<()>::builder(&code[..], Default::default()) .with_name(&cmd.chain_name[..]) .with_id(&cmd.chain_id[..]) .with_chain_type(sc_chain_spec::ChainType::Live); -- GitLab From 06190498a00ff913975fa8853c3c6a94783c4124 Mon Sep 17 00:00:00 2001 From: Julian Eager Date: Tue, 21 Nov 2023 19:10:59 +0800 Subject: [PATCH 025/102] Refactor `ValidationError` (#2406) --- .../node/core/candidate-validation/src/lib.rs | 60 +++++++++++-------- .../core/candidate-validation/src/tests.rs | 40 ++++++------- .../benches/host_prepare_rococo_runtime.rs | 3 +- .../node/core/pvf/common/src/executor_intf.rs | 19 +++--- polkadot/node/core/pvf/src/error.rs | 37 ++++++++---- polkadot/node/core/pvf/src/execute/queue.rs | 14 ++--- polkadot/node/core/pvf/src/host.rs | 39 +++++------- polkadot/node/core/pvf/src/lib.rs | 2 +- polkadot/node/core/pvf/tests/it/main.rs | 8 +-- polkadot/node/core/pvf/tests/it/process.rs | 10 ++-- 10 files changed, 122 insertions(+), 110 deletions(-) diff --git a/polkadot/node/core/candidate-validation/src/lib.rs b/polkadot/node/core/candidate-validation/src/lib.rs index f5d17af6c68..9f7b17f6129 100644 --- a/polkadot/node/core/candidate-validation/src/lib.rs +++ b/polkadot/node/core/candidate-validation/src/lib.rs @@ -24,8 +24,8 @@ #![warn(missing_docs)] use polkadot_node_core_pvf::{ - InternalValidationError, InvalidCandidate as WasmInvalidCandidate, PrepareError, - PrepareJobKind, PvfPrepData, ValidationError, ValidationHost, + InternalValidationError, InvalidCandidate as WasmInvalidCandidate, PossiblyInvalidError, + PrepareError, PrepareJobKind, PvfPrepData, ValidationError, ValidationHost, }; use polkadot_node_primitives::{ BlockData, InvalidCandidate, PoV, ValidationResult, POV_BOMB_LIMIT, VALIDATION_CODE_BOMB_LIMIT, @@ -642,7 +642,7 @@ async fn validate_candidate_exhaustive( } match result { - Err(ValidationError::InternalError(e)) => { + Err(ValidationError::Internal(e)) => { gum::warn!( target: LOG_TARGET, ?para_id, @@ -651,34 +651,29 @@ async fn validate_candidate_exhaustive( ); Err(ValidationFailed(e.to_string())) }, - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::HardTimeout)) => + Err(ValidationError::Invalid(WasmInvalidCandidate::HardTimeout)) => Ok(ValidationResult::Invalid(InvalidCandidate::Timeout)), - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::WorkerReportedInvalid(e))) => + Err(ValidationError::Invalid(WasmInvalidCandidate::WorkerReportedInvalid(e))) => Ok(ValidationResult::Invalid(InvalidCandidate::ExecutionError(e))), - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)) => + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousWorkerDeath)) => Ok(ValidationResult::Invalid(InvalidCandidate::ExecutionError( "ambiguous worker death".to_string(), ))), - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::JobError(err))) => + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::JobError(err))) => Ok(ValidationResult::Invalid(InvalidCandidate::ExecutionError(err))), - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousJobDeath(err))) => + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousJobDeath(err))) => Ok(ValidationResult::Invalid(InvalidCandidate::ExecutionError(format!( "ambiguous job death: {err}" )))), - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::PrepareError(e))) => { - // In principle if preparation of the `WASM` fails, the current candidate can not be the - // reason for that. So we can't say whether it is invalid or not. In addition, with - // pre-checking enabled only valid runtimes should ever get enacted, so we can be - // reasonably sure that this is some local problem on the current node. However, as this - // particular error *seems* to indicate a deterministic error, we raise a warning. + Err(ValidationError::Preparation(e)) => { gum::warn!( target: LOG_TARGET, ?para_id, ?e, "Deterministic error occurred during preparation (should have been ruled out by pre-checking phase)", ); - Err(ValidationFailed(e)) + Err(ValidationFailed(e.to_string())) }, Ok(res) => if res.head_data.hash() != candidate_receipt.descriptor.para_head { @@ -762,16 +757,31 @@ trait ValidationBackend { } match validation_result { - Err(ValidationError::InvalidCandidate( - WasmInvalidCandidate::AmbiguousWorkerDeath | - WasmInvalidCandidate::AmbiguousJobDeath(_), - )) if num_death_retries_left > 0 => num_death_retries_left -= 1, - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::JobError(_))) - if num_job_error_retries_left > 0 => - num_job_error_retries_left -= 1, - Err(ValidationError::InternalError(_)) if num_internal_retries_left > 0 => - num_internal_retries_left -= 1, - _ => break, + Err(ValidationError::PossiblyInvalid( + PossiblyInvalidError::AmbiguousWorkerDeath | + PossiblyInvalidError::AmbiguousJobDeath(_), + )) => + if num_death_retries_left > 0 { + num_death_retries_left -= 1; + } else { + break; + }, + + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::JobError(_))) => + if num_job_error_retries_left > 0 { + num_job_error_retries_left -= 1; + } else { + break; + }, + + Err(ValidationError::Internal(_)) => + if num_internal_retries_left > 0 { + num_internal_retries_left -= 1; + } else { + break; + }, + + Ok(_) | Err(ValidationError::Invalid(_) | ValidationError::Preparation(_)) => break, } // If we got a possibly transient error, retry once after a brief delay, on the diff --git a/polkadot/node/core/candidate-validation/src/tests.rs b/polkadot/node/core/candidate-validation/src/tests.rs index 5e2585d6873..11078580465 100644 --- a/polkadot/node/core/candidate-validation/src/tests.rs +++ b/polkadot/node/core/candidate-validation/src/tests.rs @@ -480,9 +480,9 @@ fn candidate_validation_bad_return_is_invalid() { let candidate_receipt = CandidateReceipt { descriptor, commitments_hash: Hash::zero() }; let v = executor::block_on(validate_candidate_exhaustive( - MockValidateCandidateBackend::with_hardcoded_result(Err( - ValidationError::InvalidCandidate(WasmInvalidCandidate::HardTimeout), - )), + MockValidateCandidateBackend::with_hardcoded_result(Err(ValidationError::Invalid( + WasmInvalidCandidate::HardTimeout, + ))), validation_data, validation_code, candidate_receipt, @@ -561,7 +561,7 @@ fn candidate_validation_one_ambiguous_error_is_valid() { let v = executor::block_on(validate_candidate_exhaustive( MockValidateCandidateBackend::with_hardcoded_result_list(vec![ - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)), + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousWorkerDeath)), Ok(validation_result), ]), validation_data.clone(), @@ -602,8 +602,8 @@ fn candidate_validation_multiple_ambiguous_errors_is_invalid() { let v = executor::block_on(validate_candidate_exhaustive( MockValidateCandidateBackend::with_hardcoded_result_list(vec![ - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)), - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)), + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousWorkerDeath)), + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousWorkerDeath)), ]), validation_data, validation_code, @@ -626,7 +626,7 @@ fn candidate_validation_retry_internal_errors() { vec![ Err(InternalValidationError::HostCommunication("foo".into()).into()), // Throw an AJD error, we should still retry again. - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousJobDeath( + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousJobDeath( "baz".into(), ))), // Throw another internal error. @@ -644,7 +644,7 @@ fn candidate_validation_dont_retry_internal_errors() { vec![ Err(InternalValidationError::HostCommunication("foo".into()).into()), // Throw an AWD error, we should still retry again. - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)), + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousWorkerDeath)), // Throw another internal error. Err(InternalValidationError::HostCommunication("bar".into()).into()), ], @@ -659,11 +659,11 @@ fn candidate_validation_retry_panic_errors() { let v = candidate_validation_retry_on_error_helper( PvfExecKind::Approval, vec![ - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::JobError("foo".into()))), + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::JobError("foo".into()))), // Throw an AWD error, we should still retry again. - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)), + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousWorkerDeath)), // Throw another panic error. - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::JobError("bar".into()))), + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::JobError("bar".into()))), ], ); @@ -676,11 +676,11 @@ fn candidate_validation_dont_retry_panic_errors() { let v = candidate_validation_retry_on_error_helper( PvfExecKind::Backing, vec![ - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::JobError("foo".into()))), + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::JobError("foo".into()))), // Throw an AWD error, we should still retry again. - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::AmbiguousWorkerDeath)), + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousWorkerDeath)), // Throw another panic error. - Err(ValidationError::InvalidCandidate(WasmInvalidCandidate::JobError("bar".into()))), + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::JobError("bar".into()))), ], ); @@ -758,9 +758,9 @@ fn candidate_validation_timeout_is_internal_error() { let candidate_receipt = CandidateReceipt { descriptor, commitments_hash: Hash::zero() }; let v = executor::block_on(validate_candidate_exhaustive( - MockValidateCandidateBackend::with_hardcoded_result(Err( - ValidationError::InvalidCandidate(WasmInvalidCandidate::HardTimeout), - )), + MockValidateCandidateBackend::with_hardcoded_result(Err(ValidationError::Invalid( + WasmInvalidCandidate::HardTimeout, + ))), validation_data, validation_code, candidate_receipt, @@ -852,9 +852,9 @@ fn candidate_validation_code_mismatch_is_invalid() { let (_ctx, _ctx_handle) = test_helpers::make_subsystem_context::(pool.clone()); let v = executor::block_on(validate_candidate_exhaustive( - MockValidateCandidateBackend::with_hardcoded_result(Err( - ValidationError::InvalidCandidate(WasmInvalidCandidate::HardTimeout), - )), + MockValidateCandidateBackend::with_hardcoded_result(Err(ValidationError::Invalid( + WasmInvalidCandidate::HardTimeout, + ))), validation_data, validation_code, candidate_receipt, diff --git a/polkadot/node/core/pvf/benches/host_prepare_rococo_runtime.rs b/polkadot/node/core/pvf/benches/host_prepare_rococo_runtime.rs index c02a0b595da..f2551b701c2 100644 --- a/polkadot/node/core/pvf/benches/host_prepare_rococo_runtime.rs +++ b/polkadot/node/core/pvf/benches/host_prepare_rococo_runtime.rs @@ -18,8 +18,7 @@ use criterion::{criterion_group, criterion_main, BatchSize, Criterion, SamplingMode}; use polkadot_node_core_pvf::{ - start, testing, Config, Metrics, PrepareError, PrepareJobKind, PrepareStats, PvfPrepData, - ValidationHost, + start, testing, Config, Metrics, PrepareError, PrepareJobKind, PvfPrepData, ValidationHost, }; use polkadot_primitives::ExecutorParams; use rococo_runtime::WASM_BINARY; diff --git a/polkadot/node/core/pvf/common/src/executor_intf.rs b/polkadot/node/core/pvf/common/src/executor_intf.rs index 3a1d3ac1ba0..4bafc3f4291 100644 --- a/polkadot/node/core/pvf/common/src/executor_intf.rs +++ b/polkadot/node/core/pvf/common/src/executor_intf.rs @@ -140,8 +140,7 @@ pub unsafe fn create_runtime_from_artifact_bytes( executor_params: &ExecutorParams, ) -> Result { let mut config = DEFAULT_CONFIG.clone(); - config.semantics = - params_to_wasmtime_semantics(executor_params).map_err(|err| WasmError::Other(err))?; + config.semantics = params_to_wasmtime_semantics(executor_params); sc_executor_wasmtime::create_runtime_from_artifact_bytes::( compiled_artifact_blob, @@ -149,13 +148,12 @@ pub unsafe fn create_runtime_from_artifact_bytes( ) } -pub fn params_to_wasmtime_semantics(par: &ExecutorParams) -> Result { +pub fn params_to_wasmtime_semantics(par: &ExecutorParams) -> Semantics { let mut sem = DEFAULT_CONFIG.semantics.clone(); - let mut stack_limit = if let Some(stack_limit) = sem.deterministic_stack_limit.clone() { - stack_limit - } else { - return Err("No default stack limit set".to_owned()) - }; + let mut stack_limit = sem + .deterministic_stack_limit + .expect("There is a comment to not change the default stack limit; it should always be available; qed") + .clone(); for p in par.iter() { match p { @@ -172,7 +170,7 @@ pub fn params_to_wasmtime_semantics(par: &ExecutorParams) -> Result Result, sc_executor_common::error::WasmError> { - let semantics = params_to_wasmtime_semantics(executor_params) - .map_err(|e| sc_executor_common::error::WasmError::Other(e))?; + let semantics = params_to_wasmtime_semantics(executor_params); sc_executor_wasmtime::prepare_runtime_artifact(blob, &semantics) } diff --git a/polkadot/node/core/pvf/src/error.rs b/polkadot/node/core/pvf/src/error.rs index 7fdb8c56ec9..442443f326e 100644 --- a/polkadot/node/core/pvf/src/error.rs +++ b/polkadot/node/core/pvf/src/error.rs @@ -19,31 +19,44 @@ use polkadot_node_core_pvf_common::error::{InternalValidationError, PrepareError /// A error raised during validation of the candidate. #[derive(Debug, Clone)] pub enum ValidationError { - /// The error was raised because the candidate is invalid. + /// Deterministic preparation issue. In practice, most of the problems should be caught by + /// prechecking, so this may be a sign of internal conditions. /// - /// Whenever we are unsure if the error was due to the candidate or not, we must vote invalid. - InvalidCandidate(InvalidCandidate), - /// Some internal error occurred. - InternalError(InternalValidationError), + /// In principle if preparation of the `WASM` fails, the current candidate cannot be the + /// reason for that. So we can't say whether it is invalid or not. In addition, with + /// pre-checking enabled only valid runtimes should ever get enacted, so we can be + /// reasonably sure that this is some local problem on the current node. However, as this + /// particular error *seems* to indicate a deterministic error, we raise a warning. + Preparation(PrepareError), + /// The error was raised because the candidate is invalid. Should vote against. + Invalid(InvalidCandidate), + /// Possibly transient issue that may resolve after retries. Should vote against when retries + /// fail. + PossiblyInvalid(PossiblyInvalidError), + /// Preparation or execution issue caused by an internal condition. Should not vote against. + Internal(InternalValidationError), } /// A description of an error raised during executing a PVF and can be attributed to the combination /// of the candidate [`polkadot_parachain_primitives::primitives::ValidationParams`] and the PVF. #[derive(Debug, Clone)] pub enum InvalidCandidate { - /// PVF preparation ended up with a deterministic error. - PrepareError(String), /// The candidate is reported to be invalid by the execution worker. The string contains the /// error message. WorkerReportedInvalid(String), + /// PVF execution (compilation is not included) took more time than was allotted. + HardTimeout, +} + +/// Possibly transient issue that may resolve after retries. +#[derive(Debug, Clone)] +pub enum PossiblyInvalidError { /// The worker process (not the job) has died during validation of a candidate. /// /// It's unlikely that this is caused by malicious code since workers spawn separate job /// processes, and those job processes are sandboxed. But, it is possible. We retry in this /// case, and if the error persists, we assume it's caused by the candidate and vote against. AmbiguousWorkerDeath, - /// PVF execution (compilation is not included) took more time than was allotted. - HardTimeout, /// The job process (not the worker) has died for one of the following reasons: /// /// (a) A seccomp violation occurred, most likely due to an attempt by malicious code to @@ -68,7 +81,7 @@ pub enum InvalidCandidate { impl From for ValidationError { fn from(error: InternalValidationError) -> Self { - Self::InternalError(error) + Self::Internal(error) } } @@ -77,9 +90,9 @@ impl From for ValidationError { // Here we need to classify the errors into two errors: deterministic and non-deterministic. // See [`PrepareError::is_deterministic`]. if error.is_deterministic() { - Self::InvalidCandidate(InvalidCandidate::PrepareError(error.to_string())) + Self::Preparation(error) } else { - Self::InternalError(InternalValidationError::NonDeterministicPrepareError(error)) + Self::Internal(InternalValidationError::NonDeterministicPrepareError(error)) } } } diff --git a/polkadot/node/core/pvf/src/execute/queue.rs b/polkadot/node/core/pvf/src/execute/queue.rs index 257377df3f4..a0c24fd4432 100644 --- a/polkadot/node/core/pvf/src/execute/queue.rs +++ b/polkadot/node/core/pvf/src/execute/queue.rs @@ -22,7 +22,7 @@ use crate::{ host::ResultSender, metrics::Metrics, worker_intf::{IdleWorker, WorkerHandle}, - InvalidCandidate, ValidationError, LOG_TARGET, + InvalidCandidate, PossiblyInvalidError, ValidationError, LOG_TARGET, }; use futures::{ channel::mpsc, @@ -342,27 +342,27 @@ fn handle_job_finish( }, Outcome::InvalidCandidate { err, idle_worker } => ( Some(idle_worker), - Err(ValidationError::InvalidCandidate(InvalidCandidate::WorkerReportedInvalid(err))), + Err(ValidationError::Invalid(InvalidCandidate::WorkerReportedInvalid(err))), None, ), - Outcome::InternalError { err } => (None, Err(ValidationError::InternalError(err)), None), + Outcome::InternalError { err } => (None, Err(ValidationError::Internal(err)), None), // Either the worker or the job timed out. Kill the worker in either case. Treated as // definitely-invalid, because if we timed out, there's no time left for a retry. Outcome::HardTimeout => - (None, Err(ValidationError::InvalidCandidate(InvalidCandidate::HardTimeout)), None), + (None, Err(ValidationError::Invalid(InvalidCandidate::HardTimeout)), None), // "Maybe invalid" errors (will retry). Outcome::WorkerIntfErr => ( None, - Err(ValidationError::InvalidCandidate(InvalidCandidate::AmbiguousWorkerDeath)), + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousWorkerDeath)), None, ), Outcome::JobDied { err } => ( None, - Err(ValidationError::InvalidCandidate(InvalidCandidate::AmbiguousJobDeath(err))), + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousJobDeath(err))), None, ), Outcome::JobError { err } => - (None, Err(ValidationError::InvalidCandidate(InvalidCandidate::JobError(err))), None), + (None, Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::JobError(err))), None), }; queue.metrics.execute_finished(); diff --git a/polkadot/node/core/pvf/src/host.rs b/polkadot/node/core/pvf/src/host.rs index f67934e4171..6049f51834e 100644 --- a/polkadot/node/core/pvf/src/host.rs +++ b/polkadot/node/core/pvf/src/host.rs @@ -873,7 +873,7 @@ fn pulse_every(interval: std::time::Duration) -> impl futures::Stream #[cfg(test)] pub(crate) mod tests { use super::*; - use crate::InvalidCandidate; + use crate::PossiblyInvalidError; use assert_matches::assert_matches; use futures::future::BoxFuture; use polkadot_node_core_pvf_common::{ @@ -1211,27 +1211,27 @@ pub(crate) mod tests { ); result_tx_pvf_1_1 - .send(Err(ValidationError::InvalidCandidate(InvalidCandidate::AmbiguousWorkerDeath))) + .send(Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousWorkerDeath))) .unwrap(); assert_matches!( result_rx_pvf_1_1.now_or_never().unwrap().unwrap(), - Err(ValidationError::InvalidCandidate(InvalidCandidate::AmbiguousWorkerDeath)) + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousWorkerDeath)) ); result_tx_pvf_1_2 - .send(Err(ValidationError::InvalidCandidate(InvalidCandidate::AmbiguousWorkerDeath))) + .send(Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousWorkerDeath))) .unwrap(); assert_matches!( result_rx_pvf_1_2.now_or_never().unwrap().unwrap(), - Err(ValidationError::InvalidCandidate(InvalidCandidate::AmbiguousWorkerDeath)) + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousWorkerDeath)) ); result_tx_pvf_2 - .send(Err(ValidationError::InvalidCandidate(InvalidCandidate::AmbiguousWorkerDeath))) + .send(Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousWorkerDeath))) .unwrap(); assert_matches!( result_rx_pvf_2.now_or_never().unwrap().unwrap(), - Err(ValidationError::InvalidCandidate(InvalidCandidate::AmbiguousWorkerDeath)) + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousWorkerDeath)) ); } @@ -1337,7 +1337,7 @@ pub(crate) mod tests { assert_matches!(result_rx.now_or_never().unwrap().unwrap(), Err(PrepareError::TimedOut)); assert_matches!( result_rx_execute.now_or_never().unwrap().unwrap(), - Err(ValidationError::InternalError(_)) + Err(ValidationError::Internal(_)) ); // Reversed case: first send multiple precheck requests, then ask for an execution. @@ -1479,7 +1479,7 @@ pub(crate) mod tests { // The result should contain the error. let result = test.poll_and_recv_result(result_rx).await; - assert_matches!(result, Err(ValidationError::InternalError(_))); + assert_matches!(result, Err(ValidationError::Internal(_))); // Submit another execute request. We shouldn't try to prepare again, yet. let (result_tx_2, result_rx_2) = oneshot::channel(); @@ -1498,7 +1498,7 @@ pub(crate) mod tests { // The result should contain the original error. let result = test.poll_and_recv_result(result_rx_2).await; - assert_matches!(result, Err(ValidationError::InternalError(_))); + assert_matches!(result, Err(ValidationError::Internal(_))); // Pause for enough time to reset the cooldown for this failed prepare request. futures_timer::Delay::new(PREPARE_FAILURE_COOLDOWN).await; @@ -1538,11 +1538,11 @@ pub(crate) mod tests { // Send an error for the execution here, just so we can check the result receiver is still // alive. result_tx_3 - .send(Err(ValidationError::InvalidCandidate(InvalidCandidate::AmbiguousWorkerDeath))) + .send(Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousWorkerDeath))) .unwrap(); assert_matches!( result_rx_3.now_or_never().unwrap().unwrap(), - Err(ValidationError::InvalidCandidate(InvalidCandidate::AmbiguousWorkerDeath)) + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousWorkerDeath)) ); } @@ -1581,10 +1581,7 @@ pub(crate) mod tests { // The result should contain the error. let result = test.poll_and_recv_result(result_rx).await; - assert_matches!( - result, - Err(ValidationError::InvalidCandidate(InvalidCandidate::PrepareError(_))) - ); + assert_matches!(result, Err(ValidationError::Preparation(_))); // Submit another execute request. let (result_tx_2, result_rx_2) = oneshot::channel(); @@ -1603,10 +1600,7 @@ pub(crate) mod tests { // The result should contain the original error. let result = test.poll_and_recv_result(result_rx_2).await; - assert_matches!( - result, - Err(ValidationError::InvalidCandidate(InvalidCandidate::PrepareError(_))) - ); + assert_matches!(result, Err(ValidationError::Preparation(_))); // Pause for enough time to reset the cooldown for this failed prepare request. futures_timer::Delay::new(PREPARE_FAILURE_COOLDOWN).await; @@ -1628,10 +1622,7 @@ pub(crate) mod tests { // The result should still contain the original error. let result = test.poll_and_recv_result(result_rx_3).await; - assert_matches!( - result, - Err(ValidationError::InvalidCandidate(InvalidCandidate::PrepareError(_))) - ); + assert_matches!(result, Err(ValidationError::Preparation(_))); } // Test that multiple heads-up requests trigger preparation retries if the first one failed. diff --git a/polkadot/node/core/pvf/src/lib.rs b/polkadot/node/core/pvf/src/lib.rs index 7e7a1325254..3306a2461c1 100644 --- a/polkadot/node/core/pvf/src/lib.rs +++ b/polkadot/node/core/pvf/src/lib.rs @@ -103,7 +103,7 @@ mod worker_intf; #[cfg(feature = "test-utils")] pub mod testing; -pub use error::{InvalidCandidate, ValidationError}; +pub use error::{InvalidCandidate, PossiblyInvalidError, ValidationError}; pub use host::{start, Config, ValidationHost, EXECUTE_BINARY_NAME, PREPARE_BINARY_NAME}; pub use metrics::Metrics; pub use priority::Priority; diff --git a/polkadot/node/core/pvf/tests/it/main.rs b/polkadot/node/core/pvf/tests/it/main.rs index 5bdf49cc719..4c81ac502dd 100644 --- a/polkadot/node/core/pvf/tests/it/main.rs +++ b/polkadot/node/core/pvf/tests/it/main.rs @@ -162,7 +162,7 @@ async fn execute_job_terminates_on_timeout() { .await; match result { - Err(ValidationError::InvalidCandidate(InvalidCandidate::HardTimeout)) => {}, + Err(ValidationError::Invalid(InvalidCandidate::HardTimeout)) => {}, r => panic!("{:?}", r), } @@ -202,8 +202,8 @@ async fn ensure_parallel_execution() { assert_matches!( (res1, res2), ( - Err(ValidationError::InvalidCandidate(InvalidCandidate::HardTimeout)), - Err(ValidationError::InvalidCandidate(InvalidCandidate::HardTimeout)) + Err(ValidationError::Invalid(InvalidCandidate::HardTimeout)), + Err(ValidationError::Invalid(InvalidCandidate::HardTimeout)) ) ); @@ -344,7 +344,7 @@ async fn deleting_prepared_artifact_does_not_dispute() { .await; match result { - Err(ValidationError::InvalidCandidate(InvalidCandidate::HardTimeout)) => {}, + Err(ValidationError::Invalid(InvalidCandidate::HardTimeout)) => {}, r => panic!("{:?}", r), } } diff --git a/polkadot/node/core/pvf/tests/it/process.rs b/polkadot/node/core/pvf/tests/it/process.rs index 725d060ab91..075d94373df 100644 --- a/polkadot/node/core/pvf/tests/it/process.rs +++ b/polkadot/node/core/pvf/tests/it/process.rs @@ -19,7 +19,9 @@ use super::TestHost; use assert_matches::assert_matches; -use polkadot_node_core_pvf::{InvalidCandidate, PrepareError, ValidationError}; +use polkadot_node_core_pvf::{ + InvalidCandidate, PossiblyInvalidError, PrepareError, ValidationError, +}; use polkadot_parachain_primitives::primitives::{BlockData, ValidationParams}; use procfs::process; use rusty_fork::rusty_fork_test; @@ -151,7 +153,7 @@ rusty_fork_test! { assert_matches!( result, - Err(ValidationError::InvalidCandidate(InvalidCandidate::HardTimeout)) + Err(ValidationError::Invalid(InvalidCandidate::HardTimeout)) ); }) } @@ -217,7 +219,7 @@ rusty_fork_test! { assert_matches!( result, - Err(ValidationError::InvalidCandidate(InvalidCandidate::AmbiguousWorkerDeath)) + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousWorkerDeath)) ); }) } @@ -288,7 +290,7 @@ rusty_fork_test! { // Note that we get a more specific error if the job died than if the whole worker died. assert_matches!( result, - Err(ValidationError::InvalidCandidate(InvalidCandidate::AmbiguousJobDeath(err))) + Err(ValidationError::PossiblyInvalid(PossiblyInvalidError::AmbiguousJobDeath(err))) if err == "received signal: SIGKILL" ); }) -- GitLab From 40afc77c4e6efff56649174a35384499f601f8d4 Mon Sep 17 00:00:00 2001 From: Javier Viola Date: Tue, 21 Nov 2023 08:40:55 -0300 Subject: [PATCH 026/102] Add output positional arg to undying-collator cli (#2375) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow up from https://github.com/paritytech/polkadot-sdk/pull/2370 to add `output` positional argument to undying-collator. cc @JoshOrndorff --------- Co-authored-by: Bastian Köcher --- .../undying/collator/src/cli.rs | 11 +++++++- .../undying/collator/src/main.rs | 26 ++++++++++++++++--- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/polkadot/parachain/test-parachains/undying/collator/src/cli.rs b/polkadot/parachain/test-parachains/undying/collator/src/cli.rs index cd16133dbf1..d04122f2f68 100644 --- a/polkadot/parachain/test-parachains/undying/collator/src/cli.rs +++ b/polkadot/parachain/test-parachains/undying/collator/src/cli.rs @@ -18,6 +18,7 @@ use clap::Parser; use sc_cli::SubstrateCli; +use std::path::PathBuf; /// Sub-commands supported by the collator. #[derive(Debug, Parser)] @@ -34,6 +35,10 @@ pub enum Subcommand { /// Command for exporting the genesis state of the parachain #[derive(Debug, Parser)] pub struct ExportGenesisStateCommand { + /// Output file name or stdout if unspecified. + #[arg()] + pub output: Option, + /// Id of the parachain this collator collates for. #[arg(long, default_value_t = 100)] pub parachain_id: u32, @@ -50,7 +55,11 @@ pub struct ExportGenesisStateCommand { /// Command for exporting the genesis wasm file. #[derive(Debug, Parser)] -pub struct ExportGenesisWasmCommand {} +pub struct ExportGenesisWasmCommand { + /// Output file name or stdout if unspecified. + #[arg()] + pub output: Option, +} #[allow(missing_docs)] #[derive(Debug, Parser)] diff --git a/polkadot/parachain/test-parachains/undying/collator/src/main.rs b/polkadot/parachain/test-parachains/undying/collator/src/main.rs index e564e221f01..c6b338a20dc 100644 --- a/polkadot/parachain/test-parachains/undying/collator/src/main.rs +++ b/polkadot/parachain/test-parachains/undying/collator/src/main.rs @@ -22,6 +22,10 @@ use polkadot_node_subsystem::messages::{CollationGenerationMessage, CollatorProt use polkadot_primitives::Id as ParaId; use sc_cli::{Error as SubstrateCliError, SubstrateCli}; use sp_core::hexdisplay::HexDisplay; +use std::{ + fs, + io::{self, Write}, +}; use test_parachain_undying_collator::Collator; mod cli; @@ -35,14 +39,30 @@ fn main() -> Result<()> { // `pov_size` and `pvf_complexity` need to match the ones that we start the collator // with. let collator = Collator::new(params.pov_size, params.pvf_complexity); - println!("0x{:?}", HexDisplay::from(&collator.genesis_head())); + + let output_buf = + format!("0x{:?}", HexDisplay::from(&collator.genesis_head())).into_bytes(); + + if let Some(output) = params.output { + std::fs::write(output, output_buf)?; + } else { + std::io::stdout().write_all(&output_buf)?; + } Ok::<_, Error>(()) }, - Some(cli::Subcommand::ExportGenesisWasm(_params)) => { + Some(cli::Subcommand::ExportGenesisWasm(params)) => { // We pass some dummy values for `pov_size` and `pvf_complexity` as these don't // matter for `wasm` export. - println!("0x{:?}", HexDisplay::from(&Collator::default().validation_code())); + let output_buf = + format!("0x{:?}", HexDisplay::from(&Collator::default().validation_code())) + .into_bytes(); + + if let Some(output) = params.output { + fs::write(output, output_buf)?; + } else { + io::stdout().write_all(&output_buf)?; + } Ok(()) }, -- GitLab From 552be4800d9e4b480f79a300fc531783e04be099 Mon Sep 17 00:00:00 2001 From: Marcin S Date: Tue, 21 Nov 2023 12:52:46 +0100 Subject: [PATCH 027/102] PVF worker: switch on seccomp networking restrictions (#2221) --- polkadot/node/core/pvf/common/src/error.rs | 7 +- polkadot/node/core/pvf/common/src/execute.rs | 2 +- polkadot/node/core/pvf/common/src/lib.rs | 2 +- .../node/core/pvf/common/src/worker/mod.rs | 2 +- .../pvf/common/src/worker/security/seccomp.rs | 10 +- .../node/core/pvf/execute-worker/src/lib.rs | 26 ++-- .../node/core/pvf/prepare-worker/src/lib.rs | 24 ++-- .../node/core/pvf/src/execute/worker_intf.rs | 111 ++++++++++-------- polkadot/node/core/pvf/src/prepare/pool.rs | 4 +- .../node/core/pvf/src/prepare/worker_intf.rs | 45 ++++--- polkadot/node/core/pvf/src/security.rs | 75 ++++++++---- polkadot/node/core/pvf/tests/it/process.rs | 2 +- .../src/node/utility/pvf-host-and-workers.md | 38 +++--- 13 files changed, 202 insertions(+), 146 deletions(-) diff --git a/polkadot/node/core/pvf/common/src/error.rs b/polkadot/node/core/pvf/common/src/error.rs index 6bf05ece78e..7db7f9a5945 100644 --- a/polkadot/node/core/pvf/common/src/error.rs +++ b/polkadot/node/core/pvf/common/src/error.rs @@ -77,7 +77,7 @@ pub enum PrepareError { #[codec(index = 9)] ClearWorkerDir(String), /// The preparation job process died, due to OOM, a seccomp violation, or some other factor. - JobDied(String), + JobDied { err: String, job_pid: i32 }, #[codec(index = 10)] /// Some error occurred when interfacing with the kernel. #[codec(index = 11)] @@ -96,7 +96,7 @@ impl PrepareError { match self { Prevalidation(_) | Preparation(_) | JobError(_) | OutOfMemory => true, IoErr(_) | - JobDied(_) | + JobDied { .. } | CreateTmpFile(_) | RenameTmpFile { .. } | ClearWorkerDir(_) | @@ -119,7 +119,8 @@ impl fmt::Display for PrepareError { JobError(err) => write!(f, "panic: {}", err), TimedOut => write!(f, "prepare: timeout"), IoErr(err) => write!(f, "prepare: io error while receiving response: {}", err), - JobDied(err) => write!(f, "prepare: prepare job died: {}", err), + JobDied { err, job_pid } => + write!(f, "prepare: prepare job with pid {job_pid} died: {err}"), CreateTmpFile(err) => write!(f, "prepare: error creating tmp file: {}", err), RenameTmpFile { err, src, dest } => write!(f, "prepare: error renaming tmp file ({:?} -> {:?}): {}", src, dest, err), diff --git a/polkadot/node/core/pvf/common/src/execute.rs b/polkadot/node/core/pvf/common/src/execute.rs index 89e7c8e471a..aa1c1c53968 100644 --- a/polkadot/node/core/pvf/common/src/execute.rs +++ b/polkadot/node/core/pvf/common/src/execute.rs @@ -46,7 +46,7 @@ pub enum WorkerResponse { /// /// We cannot treat this as an internal error because malicious code may have killed the job. /// We still retry it, because in the non-malicious case it is likely spurious. - JobDied(String), + JobDied { err: String, job_pid: i32 }, /// An unexpected error occurred in the job process, e.g. failing to spawn a thread, panic, /// etc. /// diff --git a/polkadot/node/core/pvf/common/src/lib.rs b/polkadot/node/core/pvf/common/src/lib.rs index 282d2f7c41d..278fa3fe821 100644 --- a/polkadot/node/core/pvf/common/src/lib.rs +++ b/polkadot/node/core/pvf/common/src/lib.rs @@ -53,7 +53,7 @@ pub struct SecurityStatus { pub can_enable_landlock: bool, /// Whether the seccomp features we use are fully available on this system. pub can_enable_seccomp: bool, - // Whether we are able to unshare the user namespace and change the filesystem root. + /// Whether we are able to unshare the user namespace and change the filesystem root. pub can_unshare_user_namespace_and_change_root: bool, } diff --git a/polkadot/node/core/pvf/common/src/worker/mod.rs b/polkadot/node/core/pvf/common/src/worker/mod.rs index 86f47acccac..d4f9bbc27ea 100644 --- a/polkadot/node/core/pvf/common/src/worker/mod.rs +++ b/polkadot/node/core/pvf/common/src/worker/mod.rs @@ -219,7 +219,7 @@ pub fn run_worker( #[cfg_attr(not(target_os = "linux"), allow(unused_mut))] mut worker_dir_path: PathBuf, node_version: Option<&str>, worker_version: Option<&str>, - #[cfg_attr(not(target_os = "linux"), allow(unused_variables))] security_status: &SecurityStatus, + security_status: &SecurityStatus, mut event_loop: F, ) where F: FnMut(UnixStream, PathBuf) -> io::Result, diff --git a/polkadot/node/core/pvf/common/src/worker/security/seccomp.rs b/polkadot/node/core/pvf/common/src/worker/security/seccomp.rs index 5539ad28440..c3822d3c4c6 100644 --- a/polkadot/node/core/pvf/common/src/worker/security/seccomp.rs +++ b/polkadot/node/core/pvf/common/src/worker/security/seccomp.rs @@ -67,11 +67,9 @@ //! //! # Action on syscall violations //! -//! On syscall violations we currently only log, to make sure this works correctly before enforcing. -//! -//! In the future, when a forbidden syscall is attempted we immediately kill the process in order to -//! prevent the attacker from doing anything else. In execution, this will result in voting against -//! the candidate. +//! When a forbidden syscall is attempted we immediately kill the process in order to prevent the +//! attacker from doing anything else. In execution, this will result in voting against the +//! candidate. use crate::{ worker::{stringify_panic_payload, WorkerKind}, @@ -82,7 +80,7 @@ use std::{collections::BTreeMap, path::Path}; /// The action to take on caught syscalls. #[cfg(not(test))] -const CAUGHT_ACTION: SeccompAction = SeccompAction::Log; +const CAUGHT_ACTION: SeccompAction = SeccompAction::KillProcess; /// Don't kill the process when testing. #[cfg(test)] const CAUGHT_ACTION: SeccompAction = SeccompAction::Errno(libc::EACCES as u32); diff --git a/polkadot/node/core/pvf/execute-worker/src/lib.rs b/polkadot/node/core/pvf/execute-worker/src/lib.rs index 9ec811686b8..d82a8fca65d 100644 --- a/polkadot/node/core/pvf/execute-worker/src/lib.rs +++ b/polkadot/node/core/pvf/execute-worker/src/lib.rs @@ -222,12 +222,6 @@ pub fn worker_entrypoint( }, }; - gum::trace!( - target: LOG_TARGET, - %worker_pid, - "worker: sending response to host: {:?}", - response - ); send_response(&mut stream, response)?; } }, @@ -360,7 +354,7 @@ fn handle_child_process( /// - The response, either `Ok` or some error state. fn handle_parent_process( mut pipe_read: PipeReader, - child: Pid, + job_pid: Pid, worker_pid: u32, usage_before: Usage, timeout: Duration, @@ -373,10 +367,11 @@ fn handle_parent_process( // Should retry at any rate. .map_err(|err| io::Error::new(io::ErrorKind::Other, err.to_string()))?; - let status = nix::sys::wait::waitpid(child, None); + let status = nix::sys::wait::waitpid(job_pid, None); gum::trace!( target: LOG_TARGET, %worker_pid, + %job_pid, "execute worker received wait status from job: {:?}", status, ); @@ -396,6 +391,7 @@ fn handle_parent_process( gum::warn!( target: LOG_TARGET, %worker_pid, + %job_pid, "execute job took {}ms cpu time, exceeded execute timeout {}ms", cpu_tv.as_millis(), timeout.as_millis(), @@ -428,6 +424,7 @@ fn handle_parent_process( gum::warn!( target: LOG_TARGET, %worker_pid, + %job_pid, "execute job error: {}", job_error, ); @@ -443,15 +440,18 @@ fn handle_parent_process( // // The job gets SIGSYS on seccomp violations, but this signal may have been sent for some // other reason, so we still need to check for seccomp violations elsewhere. - Ok(WaitStatus::Signaled(_pid, signal, _core_dump)) => - Ok(WorkerResponse::JobDied(format!("received signal: {signal:?}"))), + Ok(WaitStatus::Signaled(_pid, signal, _core_dump)) => Ok(WorkerResponse::JobDied { + err: format!("received signal: {signal:?}"), + job_pid: job_pid.as_raw(), + }), Err(errno) => Ok(internal_error_from_errno("waitpid", errno)), // It is within an attacker's power to send an unexpected exit status. So we cannot treat // this as an internal error (which would make us abstain), but must vote against. - Ok(unexpected_wait_status) => Ok(WorkerResponse::JobDied(format!( - "unexpected status from wait: {unexpected_wait_status:?}" - ))), + Ok(unexpected_wait_status) => Ok(WorkerResponse::JobDied { + err: format!("unexpected status from wait: {unexpected_wait_status:?}"), + job_pid: job_pid.as_raw(), + }), } } diff --git a/polkadot/node/core/pvf/prepare-worker/src/lib.rs b/polkadot/node/core/pvf/prepare-worker/src/lib.rs index 34e6a78c26a..499e87c6e20 100644 --- a/polkadot/node/core/pvf/prepare-worker/src/lib.rs +++ b/polkadot/node/core/pvf/prepare-worker/src/lib.rs @@ -257,9 +257,9 @@ pub fn worker_entrypoint( handle_parent_process( pipe_reader, + worker_pid, child, temp_artifact_dest.clone(), - worker_pid, usage_before, preparation_timeout, ) @@ -506,9 +506,9 @@ fn handle_child_process( /// - If the child process timeout, it returns `PrepareError::TimedOut`. fn handle_parent_process( mut pipe_read: PipeReader, - child: Pid, - temp_artifact_dest: PathBuf, worker_pid: u32, + job_pid: Pid, + temp_artifact_dest: PathBuf, usage_before: Usage, timeout: Duration, ) -> Result { @@ -518,10 +518,11 @@ fn handle_parent_process( .read_to_end(&mut received_data) .map_err(|err| PrepareError::IoErr(err.to_string()))?; - let status = nix::sys::wait::waitpid(child, None); + let status = nix::sys::wait::waitpid(job_pid, None); gum::trace!( target: LOG_TARGET, %worker_pid, + %job_pid, "prepare worker received wait status from job: {:?}", status, ); @@ -539,6 +540,7 @@ fn handle_parent_process( gum::warn!( target: LOG_TARGET, %worker_pid, + %job_pid, "prepare job took {}ms cpu time, exceeded prepare timeout {}ms", cpu_tv.as_millis(), timeout.as_millis(), @@ -573,6 +575,7 @@ fn handle_parent_process( gum::debug!( target: LOG_TARGET, %worker_pid, + %job_pid, "worker: writing artifact to {}", temp_artifact_dest.display(), ); @@ -593,15 +596,18 @@ fn handle_parent_process( // // The job gets SIGSYS on seccomp violations, but this signal may have been sent for some // other reason, so we still need to check for seccomp violations elsewhere. - Ok(WaitStatus::Signaled(_pid, signal, _core_dump)) => - Err(PrepareError::JobDied(format!("received signal: {signal:?}"))), + Ok(WaitStatus::Signaled(_pid, signal, _core_dump)) => Err(PrepareError::JobDied { + err: format!("received signal: {signal:?}"), + job_pid: job_pid.as_raw(), + }), Err(errno) => Err(error_from_errno("waitpid", errno)), // An attacker can make the child process return any exit status it wants. So we can treat // all unexpected cases the same way. - Ok(unexpected_wait_status) => Err(PrepareError::JobDied(format!( - "unexpected status from wait: {unexpected_wait_status:?}" - ))), + Ok(unexpected_wait_status) => Err(PrepareError::JobDied { + err: format!("unexpected status from wait: {unexpected_wait_status:?}"), + job_pid: job_pid.as_raw(), + }), } } diff --git a/polkadot/node/core/pvf/src/execute/worker_intf.rs b/polkadot/node/core/pvf/src/execute/worker_intf.rs index bf44ba01725..4faaf13e62f 100644 --- a/polkadot/node/core/pvf/src/execute/worker_intf.rs +++ b/polkadot/node/core/pvf/src/execute/worker_intf.rs @@ -33,7 +33,7 @@ use polkadot_node_core_pvf_common::{ execute::{Handshake, WorkerResponse}, worker_dir, SecurityStatus, }; -use polkadot_parachain_primitives::primitives::ValidationResult; +use polkadot_parachain_primitives::primitives::{ValidationCodeHash, ValidationResult}; use polkadot_primitives::ExecutorParams; use std::{path::Path, time::Duration}; use tokio::{io, net::UnixStream}; @@ -156,6 +156,16 @@ pub async fn start_work( let response = futures::select! { response = recv_response(&mut stream).fuse() => { match response { + Ok(response) => + handle_response( + response, + pid, + &artifact.id.code_hash, + &artifact_path, + execution_timeout, + audit_log_file + ) + .await, Err(error) => { gum::warn!( target: LOG_TARGET, @@ -164,56 +174,9 @@ pub async fn start_work( ?error, "failed to recv an execute response", ); - // The worker died. Check if it was due to a seccomp violation. - // - // NOTE: Log, but don't change the outcome. Not all validators may have - // auditing enabled, so we don't want attackers to abuse a non-deterministic - // outcome. - for syscall in security::check_seccomp_violations_for_worker(audit_log_file, pid).await { - gum::error!( - target: LOG_TARGET, - worker_pid = %pid, - %syscall, - validation_code_hash = ?artifact.id.code_hash, - ?artifact_path, - "A forbidden syscall was attempted! This is a violation of our seccomp security policy. Report an issue ASAP!" - ); - } return Outcome::WorkerIntfErr }, - Ok(response) => { - // Check if any syscall violations occurred during the job. For now this is - // only informative, as we are not enforcing the seccomp policy yet. - for syscall in security::check_seccomp_violations_for_worker(audit_log_file, pid).await { - gum::error!( - target: LOG_TARGET, - worker_pid = %pid, - %syscall, - validation_code_hash = ?artifact.id.code_hash, - ?artifact_path, - "A forbidden syscall was attempted! This is a violation of our seccomp security policy. Report an issue ASAP!" - ); - } - - if let WorkerResponse::Ok{duration, ..} = response { - if duration > execution_timeout { - // The job didn't complete within the timeout. - gum::warn!( - target: LOG_TARGET, - worker_pid = %pid, - "execute job took {}ms cpu time, exceeded execution timeout {}ms.", - duration.as_millis(), - execution_timeout.as_millis(), - ); - - // Return a timeout error. - return Outcome::HardTimeout - } - } - - response - }, } }, _ = Delay::new(timeout).fuse() => { @@ -238,7 +201,7 @@ pub async fn start_work( idle_worker: IdleWorker { stream, pid, worker_dir }, }, WorkerResponse::JobTimedOut => Outcome::HardTimeout, - WorkerResponse::JobDied(err) => Outcome::JobDied { err }, + WorkerResponse::JobDied { err, job_pid: _ } => Outcome::JobDied { err }, WorkerResponse::JobError(err) => Outcome::JobError { err }, WorkerResponse::InternalError(err) => Outcome::InternalError { err }, @@ -247,6 +210,56 @@ pub async fn start_work( .await } +/// Handles the case where we successfully received response bytes on the host from the child. +/// +/// Here we know the artifact exists, but is still located in a temporary file which will be cleared +/// by [`with_worker_dir_setup`]. +async fn handle_response( + response: WorkerResponse, + worker_pid: u32, + validation_code_hash: &ValidationCodeHash, + artifact_path: &Path, + execution_timeout: Duration, + audit_log_file: Option, +) -> WorkerResponse { + if let WorkerResponse::Ok { duration, .. } = response { + if duration > execution_timeout { + // The job didn't complete within the timeout. + gum::warn!( + target: LOG_TARGET, + worker_pid, + "execute job took {}ms cpu time, exceeded execution timeout {}ms.", + duration.as_millis(), + execution_timeout.as_millis(), + ); + + // Return a timeout error. + return WorkerResponse::JobTimedOut + } + } + + if let WorkerResponse::JobDied { err: _, job_pid } = response { + // The job died. Check if it was due to a seccomp violation. + // + // NOTE: Log, but don't change the outcome. Not all validators may have + // auditing enabled, so we don't want attackers to abuse a non-deterministic + // outcome. + for syscall in security::check_seccomp_violations_for_job(audit_log_file, job_pid).await { + gum::error!( + target: LOG_TARGET, + %worker_pid, + %job_pid, + %syscall, + ?validation_code_hash, + ?artifact_path, + "A forbidden syscall was attempted! This is a violation of our seccomp security policy. Report an issue ASAP!" + ); + } + } + + response +} + /// Create a temporary file for an artifact in the worker cache, execute the given future/closure /// passing the file path in, and clean up the worker cache. /// diff --git a/polkadot/node/core/pvf/src/prepare/pool.rs b/polkadot/node/core/pvf/src/prepare/pool.rs index 21af21e5b02..4901be9fe1b 100644 --- a/polkadot/node/core/pvf/src/prepare/pool.rs +++ b/polkadot/node/core/pvf/src/prepare/pool.rs @@ -388,14 +388,14 @@ fn handle_mux( Ok(()) }, // The worker might still be usable, but we kill it just in case. - Outcome::JobDied(err) => { + Outcome::JobDied { err, job_pid } => { if attempt_retire(metrics, spawned, worker) { reply( from_pool, FromPool::Concluded { worker, rip: true, - result: Err(PrepareError::JobDied(err)), + result: Err(PrepareError::JobDied { err, job_pid }), }, )?; } diff --git a/polkadot/node/core/pvf/src/prepare/worker_intf.rs b/polkadot/node/core/pvf/src/prepare/worker_intf.rs index e7f142a46bb..318aea7295d 100644 --- a/polkadot/node/core/pvf/src/prepare/worker_intf.rs +++ b/polkadot/node/core/pvf/src/prepare/worker_intf.rs @@ -104,7 +104,7 @@ pub enum Outcome { /// The preparation job process died, due to OOM, a seccomp violation, or some other factor. /// /// The worker might still be usable, but we kill it just in case. - JobDied(String), + JobDied { err: String, job_pid: i32 }, } /// Given the idle token of a worker and parameters of work, communicates with the worker and @@ -160,19 +160,7 @@ pub async fn start_work( match result { // Received bytes from worker within the time limit. - Ok(Ok(prepare_worker_result)) => { - // Check if any syscall violations occurred during the job. For now this is only - // informative, as we are not enforcing the seccomp policy yet. - for syscall in security::check_seccomp_violations_for_worker(audit_log_file, pid).await { - gum::error!( - target: LOG_TARGET, - worker_pid = %pid, - %syscall, - ?pvf, - "A forbidden syscall was attempted! This is a violation of our seccomp security policy. Report an issue ASAP!" - ); - } - + Ok(Ok(prepare_worker_result)) => handle_response( metrics, IdleWorker { stream, pid, worker_dir }, @@ -182,9 +170,9 @@ pub async fn start_work( &pvf, &cache_path, preparation_timeout, + audit_log_file, ) - .await - }, + .await, Ok(Err(err)) => { // Communication error within the time limit. gum::warn!( @@ -221,15 +209,36 @@ async fn handle_response( worker_pid: u32, tmp_file: PathBuf, pvf: &PvfPrepData, - cache_path: &PathBuf, + cache_path: &Path, preparation_timeout: Duration, + audit_log_file: Option, ) -> Outcome { let PrepareWorkerSuccess { checksum, stats: PrepareStats { cpu_time_elapsed, memory_stats } } = match result.clone() { Ok(result) => result, // Timed out on the child. This should already be logged by the child. Err(PrepareError::TimedOut) => return Outcome::TimedOut, - Err(PrepareError::JobDied(err)) => return Outcome::JobDied(err), + Err(PrepareError::JobDied { err, job_pid }) => { + // The job died. Check if it was due to a seccomp violation. + // + // NOTE: Log, but don't change the outcome. Not all validators may have + // auditing enabled, so we don't want attackers to abuse a non-deterministic + // outcome. + for syscall in + security::check_seccomp_violations_for_job(audit_log_file, job_pid).await + { + gum::error!( + target: LOG_TARGET, + %worker_pid, + %job_pid, + %syscall, + ?pvf, + "A forbidden syscall was attempted! This is a violation of our seccomp security policy. Report an issue ASAP!" + ); + } + + return Outcome::JobDied { err, job_pid } + }, Err(PrepareError::OutOfMemory) => return Outcome::OutOfMemory, Err(err) => return Outcome::Concluded { worker, result: Err(err) }, }; diff --git a/polkadot/node/core/pvf/src/security.rs b/polkadot/node/core/pvf/src/security.rs index 0c0c5f40166..8c06c68392f 100644 --- a/polkadot/node/core/pvf/src/security.rs +++ b/polkadot/node/core/pvf/src/security.rs @@ -178,9 +178,15 @@ async fn check_can_unshare_user_namespace_and_change_root( let stderr = std::str::from_utf8(&output.stderr) .expect("child process writes a UTF-8 string to stderr; qed") .trim(); - Err(SecureModeError::CannotUnshareUserNamespaceAndChangeRoot( - format!("not available: {}", stderr) - )) + if stderr.is_empty() { + Err(SecureModeError::CannotUnshareUserNamespaceAndChangeRoot( + "not available".into() + )) + } else { + Err(SecureModeError::CannotUnshareUserNamespaceAndChangeRoot( + format!("not available: {}", stderr) + )) + } }, Err(err) => Err(SecureModeError::CannotUnshareUserNamespaceAndChangeRoot( @@ -208,16 +214,25 @@ async fn check_landlock( if #[cfg(target_os = "linux")] { match tokio::process::Command::new(prepare_worker_program_path) .arg("--check-can-enable-landlock") - .status() + .output() .await { - Ok(status) if status.success() => Ok(()), - Ok(_status) => { + Ok(output) if output.status.success() => Ok(()), + Ok(output) => { let abi = polkadot_node_core_pvf_common::worker::security::landlock::LANDLOCK_ABI as u8; - Err(SecureModeError::CannotEnableLandlock( - format!("landlock ABI {} not available", abi) - )) + let stderr = std::str::from_utf8(&output.stderr) + .expect("child process writes a UTF-8 string to stderr; qed") + .trim(); + if stderr.is_empty() { + Err(SecureModeError::CannotEnableLandlock( + format!("landlock ABI {} not available", abi) + )) + } else { + Err(SecureModeError::CannotEnableLandlock( + format!("not available: {}", stderr) + )) + } }, Err(err) => Err(SecureModeError::CannotEnableLandlock( @@ -238,7 +253,7 @@ async fn check_landlock( /// to running the check in a worker, we try it... in a worker. The expected return status is 0 on /// success and -1 on failure. async fn check_seccomp( - #[cfg_attr(not(target_os = "linux"), allow(unused_variables))] + #[cfg_attr(not(all(target_os = "linux", target_arch = "x86_64")), allow(unused_variables))] prepare_worker_program_path: &Path, ) -> SecureModeResult { cfg_if::cfg_if! { @@ -247,14 +262,24 @@ async fn check_seccomp( if #[cfg(target_arch = "x86_64")] { match tokio::process::Command::new(prepare_worker_program_path) .arg("--check-can-enable-seccomp") - .status() + .output() .await { - Ok(status) if status.success() => Ok(()), - Ok(_status) => - Err(SecureModeError::CannotEnableSeccomp( - "not available".into() - )), + Ok(output) if output.status.success() => Ok(()), + Ok(output) => { + let stderr = std::str::from_utf8(&output.stderr) + .expect("child process writes a UTF-8 string to stderr; qed") + .trim(); + if stderr.is_empty() { + Err(SecureModeError::CannotEnableSeccomp( + "not available".into() + )) + } else { + Err(SecureModeError::CannotEnableSeccomp( + format!("not available: {}", stderr) + )) + } + }, Err(err) => Err(SecureModeError::CannotEnableSeccomp( format!("could not start child process: {}", err) @@ -320,25 +345,25 @@ impl AuditLogFile { } } -/// Check if a seccomp violation occurred for the given worker. As the syslog may be in a different -/// location, or seccomp auditing may be disabled, this function provides a best-effort attempt -/// only. +/// Check if a seccomp violation occurred for the given job process. As the syslog may be in a +/// different location, or seccomp auditing may be disabled, this function provides a best-effort +/// attempt only. /// /// The `audit_log_file` must have been obtained before the job started. It only allows reading /// entries that were written since it was obtained, so that we do not consider events from previous /// processes with the same pid. This can still be racy, but it's unlikely and fine for a /// best-effort attempt. -pub async fn check_seccomp_violations_for_worker( +pub async fn check_seccomp_violations_for_job( audit_log_file: Option, - worker_pid: u32, + job_pid: i32, ) -> Vec { - let audit_event_pid_field = format!("pid={worker_pid}"); + let audit_event_pid_field = format!("pid={job_pid}"); let audit_log_file = match audit_log_file { Some(file) => { - gum::debug!( + gum::trace!( target: LOG_TARGET, - %worker_pid, + %job_pid, audit_log_path = ?file.path, "checking audit log for seccomp violations", ); @@ -347,7 +372,7 @@ pub async fn check_seccomp_violations_for_worker( None => { gum::warn!( target: LOG_TARGET, - %worker_pid, + %job_pid, "could not open either {AUDIT_LOG_PATH} or {SYSLOG_PATH} for reading audit logs" ); return vec![] diff --git a/polkadot/node/core/pvf/tests/it/process.rs b/polkadot/node/core/pvf/tests/it/process.rs index 075d94373df..b742acb15d0 100644 --- a/polkadot/node/core/pvf/tests/it/process.rs +++ b/polkadot/node/core/pvf/tests/it/process.rs @@ -248,7 +248,7 @@ rusty_fork_test! { // Note that we get a more specific error if the job died than if the whole worker died. assert_matches!( result, - Err(PrepareError::JobDied(err)) if err == "received signal: SIGKILL" + Err(PrepareError::JobDied{ err, job_pid: _ }) if err == "received signal: SIGKILL" ); }) } diff --git a/polkadot/roadmap/implementers-guide/src/node/utility/pvf-host-and-workers.md b/polkadot/roadmap/implementers-guide/src/node/utility/pvf-host-and-workers.md index 74d88ba3ad9..56bdd48bc0c 100644 --- a/polkadot/roadmap/implementers-guide/src/node/utility/pvf-host-and-workers.md +++ b/polkadot/roadmap/implementers-guide/src/node/utility/pvf-host-and-workers.md @@ -38,16 +38,22 @@ getting backed and honest backers getting slashed. We currently know of the following specific cases that will lead to a retried execution request: -1. **OOM:** The host might have been temporarily low on memory due to other - processes running on the same machine. **NOTE:** This case will lead to - voting against the candidate (and possibly a dispute) if the retry is still - not successful. -2. **Artifact missing:** The prepared artifact might have been deleted due to +1. **OOM:** We have memory limits to try to prevent attackers from exhausting + host memory. If the memory limit is hit, we kill the job process and retry + the job. Alternatively, the host might have been temporarily low on memory + due to other processes running on the same machine. **NOTE:** This case will + lead to voting against the candidate (and possibly a dispute) if the retry is + still not successful. +2. **Syscall violations:** If the job attempts a system call that is blocked by + the sandbox's security policy, the job process is immediately killed and we + retry. **NOTE:** In the future, if we have a proper way to detect that the + job died due to a security violation, it might make sense not to retry in + this case. +3. **Artifact missing:** The prepared artifact might have been deleted due to operator error or some bug in the system. -3. **Job errors:** For example, the worker thread panicked for some - indeterminate reason, which may or may not be independent of the candidate or - PVF. -4. **Internal errors:** See "Internal Errors" section. In this case, after the +4. **Job errors:** For example, the job process panicked for some indeterminate + reason, which may or may not be independent of the candidate or PVF. +5. **Internal errors:** See "Internal Errors" section. In this case, after the retry we abstain from voting. ### Preparation timeouts @@ -159,16 +165,14 @@ data on the host machine. *Currently this is only supported on Linux.* - +### Restricting networking - +We also disable networking on PVF threads by disabling certain syscalls, such as +the creation of sockets. This prevents attackers from either downloading +payloads or communicating sensitive data from the validator's machine to the +outside world. - - - - - - +*Currently this is only supported on Linux.* ### Clearing env vars -- GitLab From b25d29a50247f284cde5b24e270b6db7b4a81e7e Mon Sep 17 00:00:00 2001 From: Michal Kucharczyk <1728078+michalkucharczyk@users.noreply.github.com> Date: Tue, 21 Nov 2023 15:22:42 +0100 Subject: [PATCH 028/102] cumulus-consensus-common: block import: `delayed_best_block` flag added (#2001) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR adds the `delayed_best_block` flag to `ParachainBlockImport`. If not set, the `params.fork_choice` is not updated (to `ForkChoiceStrategy::Custom`) during the block import. When `delayed_best_block` is set to `false` all parachain blocks on the [longest fork](https://github.com/paritytech/polkadot-sdk/blob/552be4800d9e4b480f79a300fc531783e04be099/substrate/client/service/src/client/client.rs#L708-L709) will be notified as the best block, allowing transaction pool to be updated with every imported block. Otherwise imported blocks will not be notified as best blocks (`fork_choice=ForkChoiceStrategy::Custom(false)`), and transaction pool would be updated only with best block received from relay-chain. Improvement for: #1202 --------- Co-authored-by: Bastian Köcher --- cumulus/client/consensus/common/src/lib.rs | 39 +++++++++++++++----- cumulus/client/consensus/common/src/tests.rs | 6 ++- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/cumulus/client/consensus/common/src/lib.rs b/cumulus/client/consensus/common/src/lib.rs index 08bceabb2bd..cebe34e7ea5 100644 --- a/cumulus/client/consensus/common/src/lib.rs +++ b/cumulus/client/consensus/common/src/lib.rs @@ -111,12 +111,15 @@ impl ParachainConsensus for Box + Send + /// Parachain specific block import. /// -/// This is used to set `block_import_params.fork_choice` to `false` as long as the block origin is -/// not `NetworkInitialSync`. The best block for parachains is determined by the relay chain. -/// Meaning we will update the best block, as it is included by the relay-chain. +/// Specialized block import for parachains. It supports to delay setting the best block until the +/// relay chain has included a candidate in its best block. By default the delayed best block +/// setting is disabled. The block import also monitors the imported blocks and prunes by default if +/// there are too many blocks at the same height. Too many blocks at the same height can for example +/// happen if the relay chain is rejecting the parachain blocks in the validation. pub struct ParachainBlockImport { inner: BI, monitor: Option>>, + delayed_best_block: bool, } impl> ParachainBlockImport { @@ -141,13 +144,27 @@ impl> ParachainBlockImport let monitor = level_limit.map(|level_limit| SharedData::new(LevelMonitor::new(level_limit, backend))); - Self { inner, monitor } + Self { inner, monitor, delayed_best_block: false } + } + + /// Create a new instance which delays setting the best block. + /// + /// The number of leaves per level limit is set to `LevelLimit::Default`. + pub fn new_with_delayed_best_block(inner: BI, backend: Arc) -> Self { + Self { + delayed_best_block: true, + ..Self::new_with_limit(inner, backend, LevelLimit::Default) + } } } impl Clone for ParachainBlockImport { fn clone(&self) -> Self { - ParachainBlockImport { inner: self.inner.clone(), monitor: self.monitor.clone() } + ParachainBlockImport { + inner: self.inner.clone(), + monitor: self.monitor.clone(), + delayed_best_block: self.delayed_best_block, + } } } @@ -182,11 +199,13 @@ where params.finalized = true; } - // Best block is determined by the relay chain, or if we are doing the initial sync - // we import all blocks as new best. - params.fork_choice = Some(sc_consensus::ForkChoiceStrategy::Custom( - params.origin == sp_consensus::BlockOrigin::NetworkInitialSync, - )); + if self.delayed_best_block { + // Best block is determined by the relay chain, or if we are doing the initial sync + // we import all blocks as new best. + params.fork_choice = Some(sc_consensus::ForkChoiceStrategy::Custom( + params.origin == sp_consensus::BlockOrigin::NetworkInitialSync, + )); + } let maybe_lock = self.monitor.as_ref().map(|monitor_lock| { let mut monitor = monitor_lock.shared_data_locked(); diff --git a/cumulus/client/consensus/common/src/tests.rs b/cumulus/client/consensus/common/src/tests.rs index 9658a0add79..597d1ab2acc 100644 --- a/cumulus/client/consensus/common/src/tests.rs +++ b/cumulus/client/consensus/common/src/tests.rs @@ -1124,7 +1124,8 @@ fn find_potential_parents_aligned_with_pending() { let backend = Arc::new(Backend::new_test(1000, 1)); let client = Arc::new(TestClientBuilder::with_backend(backend.clone()).build()); - let mut para_import = ParachainBlockImport::new(client.clone(), backend.clone()); + let mut para_import = + ParachainBlockImport::new_with_delayed_best_block(client.clone(), backend.clone()); let relay_parent = relay_hash_from_block_num(10); // Choose different relay parent for alternative chain to get new hashes. @@ -1279,7 +1280,8 @@ fn find_potential_parents_aligned_no_pending() { let backend = Arc::new(Backend::new_test(1000, 1)); let client = Arc::new(TestClientBuilder::with_backend(backend.clone()).build()); - let mut para_import = ParachainBlockImport::new(client.clone(), backend.clone()); + let mut para_import = + ParachainBlockImport::new_with_delayed_best_block(client.clone(), backend.clone()); let relay_parent = relay_hash_from_block_num(10); // Choose different relay parent for alternative chain to get new hashes. -- GitLab From b3841b6b71cd3707d80e90492059d1a2e3bd33a6 Mon Sep 17 00:00:00 2001 From: Francisco Aguirre Date: Tue, 21 Nov 2023 16:09:40 +0100 Subject: [PATCH 029/102] Different XCM builders, default one requires fee payment (#2253) Adding on top of the new builder pattern for creating XCM programs, I'm adding some more APIs: ```rust let paying_fees: Xcm<()> = Xcm::builder() // Only allow paying for fees .withdraw_asset() // First instruction has to load the holding register .buy_execution() // Second instruction has to be `buy_execution` .build(); let paying_fees_invalid: Xcm<()> = Xcm::builder() .withdraw_asset() .build(); // Invalid, need to pay for fees let not_paying_fees: Xcm<()> = Xcm::builder_unpaid() .unpaid_execution() // Needed .withdraw_asset() .deposit_asset() .build(); let all_goes: Xcm<()> = Xcm::builder_unsafe() // You can do anything .withdraw_asset() .deposit_asset() .build(); ``` The invalid bits are because the methods don't even exist on the types that you'd want to call them on. --------- Co-authored-by: command-bot <> --- Cargo.lock | 1 + polkadot/xcm/procedural/Cargo.toml | 1 + .../xcm/procedural/src/builder_pattern.rs | 287 ++++++++++++++++-- polkadot/xcm/procedural/src/lib.rs | 6 +- .../xcm/procedural/tests/builder_pattern.rs | 81 +++++ polkadot/xcm/procedural/tests/ui.rs | 2 +- .../badly_formatted_attribute.rs | 32 ++ .../badly_formatted_attribute.stderr | 5 + .../buy_execution_named_fields.rs | 30 ++ .../buy_execution_named_fields.stderr | 5 + .../loads_holding_no_operands.rs | 32 ++ .../loads_holding_no_operands.stderr | 6 + .../ui/builder_pattern/no_buy_execution.rs | 29 ++ .../builder_pattern/no_buy_execution.stderr | 6 + .../ui/builder_pattern/no_unpaid_execution.rs | 29 ++ .../no_unpaid_execution.stderr | 6 + .../builder_pattern/unexpected_attribute.rs | 32 ++ .../unexpected_attribute.stderr | 5 + .../unpaid_execution_named_fields.rs | 30 ++ .../unpaid_execution_named_fields.stderr | 5 + .../wrong_target.rs} | 0 .../wrong_target.stderr} | 2 +- polkadot/xcm/src/v3/mod.rs | 4 + polkadot/xcm/xcm-simulator/example/src/lib.rs | 19 -- prdoc/pr_2253.prdoc | 24 ++ 25 files changed, 625 insertions(+), 54 deletions(-) create mode 100644 polkadot/xcm/procedural/tests/builder_pattern.rs create mode 100644 polkadot/xcm/procedural/tests/ui/builder_pattern/badly_formatted_attribute.rs create mode 100644 polkadot/xcm/procedural/tests/ui/builder_pattern/badly_formatted_attribute.stderr create mode 100644 polkadot/xcm/procedural/tests/ui/builder_pattern/buy_execution_named_fields.rs create mode 100644 polkadot/xcm/procedural/tests/ui/builder_pattern/buy_execution_named_fields.stderr create mode 100644 polkadot/xcm/procedural/tests/ui/builder_pattern/loads_holding_no_operands.rs create mode 100644 polkadot/xcm/procedural/tests/ui/builder_pattern/loads_holding_no_operands.stderr create mode 100644 polkadot/xcm/procedural/tests/ui/builder_pattern/no_buy_execution.rs create mode 100644 polkadot/xcm/procedural/tests/ui/builder_pattern/no_buy_execution.stderr create mode 100644 polkadot/xcm/procedural/tests/ui/builder_pattern/no_unpaid_execution.rs create mode 100644 polkadot/xcm/procedural/tests/ui/builder_pattern/no_unpaid_execution.stderr create mode 100644 polkadot/xcm/procedural/tests/ui/builder_pattern/unexpected_attribute.rs create mode 100644 polkadot/xcm/procedural/tests/ui/builder_pattern/unexpected_attribute.stderr create mode 100644 polkadot/xcm/procedural/tests/ui/builder_pattern/unpaid_execution_named_fields.rs create mode 100644 polkadot/xcm/procedural/tests/ui/builder_pattern/unpaid_execution_named_fields.stderr rename polkadot/xcm/procedural/tests/ui/{builder_pattern.rs => builder_pattern/wrong_target.rs} (100%) rename polkadot/xcm/procedural/tests/ui/{builder_pattern.stderr => builder_pattern/wrong_target.stderr} (63%) create mode 100644 prdoc/pr_2253.prdoc diff --git a/Cargo.lock b/Cargo.lock index 697f232f971..88cefe7bbef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -21512,6 +21512,7 @@ dependencies = [ "Inflector", "proc-macro2", "quote", + "staging-xcm", "syn 2.0.38", "trybuild", ] diff --git a/polkadot/xcm/procedural/Cargo.toml b/polkadot/xcm/procedural/Cargo.toml index 33c2a94be0e..8ab27c91dae 100644 --- a/polkadot/xcm/procedural/Cargo.toml +++ b/polkadot/xcm/procedural/Cargo.toml @@ -18,3 +18,4 @@ Inflector = "0.11.4" [dev-dependencies] trybuild = { version = "1.0.74", features = ["diff"] } +xcm = { package = "staging-xcm", path = ".." } diff --git a/polkadot/xcm/procedural/src/builder_pattern.rs b/polkadot/xcm/procedural/src/builder_pattern.rs index ebad54e972b..1cb795ea9b2 100644 --- a/polkadot/xcm/procedural/src/builder_pattern.rs +++ b/polkadot/xcm/procedural/src/builder_pattern.rs @@ -17,56 +17,83 @@ //! Derive macro for creating XCMs with a builder pattern use inflector::Inflector; -use proc_macro::TokenStream; use proc_macro2::TokenStream as TokenStream2; use quote::{format_ident, quote}; use syn::{ - parse_macro_input, Data, DeriveInput, Error, Expr, ExprLit, Fields, Lit, Meta, MetaNameValue, + Data, DataEnum, DeriveInput, Error, Expr, ExprLit, Fields, Ident, Lit, Meta, MetaNameValue, + Result, Variant, }; -pub fn derive(input: TokenStream) -> TokenStream { - let input = parse_macro_input!(input as DeriveInput); - let builder_impl = match &input.data { - Data::Enum(data_enum) => generate_methods_for_enum(input.ident, data_enum), - _ => - return Error::new_spanned(&input, "Expected the `Instruction` enum") - .to_compile_error() - .into(), +pub fn derive(input: DeriveInput) -> Result { + let data_enum = match &input.data { + Data::Enum(data_enum) => data_enum, + _ => return Err(Error::new_spanned(&input, "Expected the `Instruction` enum")), }; + let builder_raw_impl = generate_builder_raw_impl(&input.ident, data_enum); + let builder_impl = generate_builder_impl(&input.ident, data_enum)?; + let builder_unpaid_impl = generate_builder_unpaid_impl(&input.ident, data_enum)?; let output = quote! { - pub struct XcmBuilder(Vec>); + /// A trait for types that track state inside the XcmBuilder + pub trait XcmBuilderState {} + + /// Access to all the instructions + pub enum AnythingGoes {} + /// You need to pay for execution + pub enum PaymentRequired {} + /// The holding register was loaded, now to buy execution + pub enum LoadedHolding {} + /// Need to explicitly state it won't pay for fees + pub enum ExplicitUnpaidRequired {} + + impl XcmBuilderState for AnythingGoes {} + impl XcmBuilderState for PaymentRequired {} + impl XcmBuilderState for LoadedHolding {} + impl XcmBuilderState for ExplicitUnpaidRequired {} + + /// Type used to build XCM programs + pub struct XcmBuilder { + pub(crate) instructions: Vec>, + pub state: core::marker::PhantomData, + } + impl Xcm { - pub fn builder() -> XcmBuilder { - XcmBuilder::(Vec::new()) + pub fn builder() -> XcmBuilder { + XcmBuilder:: { + instructions: Vec::new(), + state: core::marker::PhantomData, + } + } + pub fn builder_unpaid() -> XcmBuilder { + XcmBuilder:: { + instructions: Vec::new(), + state: core::marker::PhantomData, + } + } + pub fn builder_unsafe() -> XcmBuilder { + XcmBuilder:: { + instructions: Vec::new(), + state: core::marker::PhantomData, + } } } #builder_impl + #builder_unpaid_impl + #builder_raw_impl }; - output.into() + Ok(output) } -fn generate_methods_for_enum(name: syn::Ident, data_enum: &syn::DataEnum) -> TokenStream2 { +fn generate_builder_raw_impl(name: &Ident, data_enum: &DataEnum) -> TokenStream2 { let methods = data_enum.variants.iter().map(|variant| { let variant_name = &variant.ident; let method_name_string = &variant_name.to_string().to_snake_case(); let method_name = syn::Ident::new(&method_name_string, variant_name.span()); - let docs: Vec<_> = variant - .attrs - .iter() - .filter_map(|attr| match &attr.meta { - Meta::NameValue(MetaNameValue { - value: Expr::Lit(ExprLit { lit: Lit::Str(literal), .. }), - .. - }) if attr.path().is_ident("doc") => Some(literal.value()), - _ => None, - }) - .map(|doc| syn::parse_str::(&format!("/// {}", doc)).unwrap()) - .collect(); + let docs = get_doc_comments(&variant); let method = match &variant.fields { Fields::Unit => { quote! { pub fn #method_name(mut self) -> Self { - self.0.push(#name::::#variant_name); + self.instructions.push(#name::::#variant_name); self } } @@ -81,7 +108,7 @@ fn generate_methods_for_enum(name: syn::Ident, data_enum: &syn::DataEnum) -> Tok let arg_types: Vec<_> = fields.unnamed.iter().map(|field| &field.ty).collect(); quote! { pub fn #method_name(mut self, #(#arg_names: #arg_types),*) -> Self { - self.0.push(#name::::#variant_name(#(#arg_names),*)); + self.instructions.push(#name::::#variant_name(#(#arg_names),*)); self } } @@ -91,7 +118,7 @@ fn generate_methods_for_enum(name: syn::Ident, data_enum: &syn::DataEnum) -> Tok let arg_types: Vec<_> = fields.named.iter().map(|field| &field.ty).collect(); quote! { pub fn #method_name(mut self, #(#arg_names: #arg_types),*) -> Self { - self.0.push(#name::::#variant_name { #(#arg_names),* }); + self.instructions.push(#name::::#variant_name { #(#arg_names),* }); self } } @@ -103,13 +130,209 @@ fn generate_methods_for_enum(name: syn::Ident, data_enum: &syn::DataEnum) -> Tok } }); let output = quote! { - impl XcmBuilder { + impl XcmBuilder { #(#methods)* pub fn build(self) -> Xcm { - Xcm(self.0) + Xcm(self.instructions) } } }; output } + +fn generate_builder_impl(name: &Ident, data_enum: &DataEnum) -> Result { + // We first require an instruction that load the holding register + let load_holding_variants = data_enum + .variants + .iter() + .map(|variant| { + let maybe_builder_attr = variant.attrs.iter().find(|attr| match attr.meta { + Meta::List(ref list) => { + return list.path.is_ident("builder"); + }, + _ => false, + }); + let builder_attr = match maybe_builder_attr { + Some(builder) => builder.clone(), + None => return Ok(None), /* It's not going to be an instruction that loads the + * holding register */ + }; + let Meta::List(ref list) = builder_attr.meta else { unreachable!("We checked before") }; + let inner_ident: Ident = syn::parse2(list.tokens.clone().into()).map_err(|_| { + Error::new_spanned(&builder_attr, "Expected `builder(loads_holding)`") + })?; + let ident_to_match: Ident = syn::parse_quote!(loads_holding); + if inner_ident == ident_to_match { + Ok(Some(variant)) + } else { + Err(Error::new_spanned(&builder_attr, "Expected `builder(loads_holding)`")) + } + }) + .collect::>>()?; + + let load_holding_methods = load_holding_variants + .into_iter() + .flatten() + .map(|variant| { + let variant_name = &variant.ident; + let method_name_string = &variant_name.to_string().to_snake_case(); + let method_name = syn::Ident::new(&method_name_string, variant_name.span()); + let docs = get_doc_comments(&variant); + let method = match &variant.fields { + Fields::Unnamed(fields) => { + let arg_names: Vec<_> = fields + .unnamed + .iter() + .enumerate() + .map(|(index, _)| format_ident!("arg{}", index)) + .collect(); + let arg_types: Vec<_> = fields.unnamed.iter().map(|field| &field.ty).collect(); + quote! { + #(#docs)* + pub fn #method_name(self, #(#arg_names: #arg_types),*) -> XcmBuilder { + let mut new_instructions = self.instructions; + new_instructions.push(#name::::#variant_name(#(#arg_names),*)); + XcmBuilder { + instructions: new_instructions, + state: core::marker::PhantomData, + } + } + } + }, + Fields::Named(fields) => { + let arg_names: Vec<_> = fields.named.iter().map(|field| &field.ident).collect(); + let arg_types: Vec<_> = fields.named.iter().map(|field| &field.ty).collect(); + quote! { + #(#docs)* + pub fn #method_name(self, #(#arg_names: #arg_types),*) -> XcmBuilder { + let mut new_instructions = self.instructions; + new_instructions.push(#name::::#variant_name { #(#arg_names),* }); + XcmBuilder { + instructions: new_instructions, + state: core::marker::PhantomData, + } + } + } + }, + _ => + return Err(Error::new_spanned( + &variant, + "Instructions that load the holding register should take operands", + )), + }; + Ok(method) + }) + .collect::, _>>()?; + + let first_impl = quote! { + impl XcmBuilder { + #(#load_holding_methods)* + } + }; + + // Then we require fees to be paid + let buy_execution_method = data_enum + .variants + .iter() + .find(|variant| variant.ident.to_string() == "BuyExecution") + .map_or( + Err(Error::new_spanned(&data_enum.variants, "No BuyExecution instruction")), + |variant| { + let variant_name = &variant.ident; + let method_name_string = &variant_name.to_string().to_snake_case(); + let method_name = syn::Ident::new(&method_name_string, variant_name.span()); + let docs = get_doc_comments(&variant); + let fields = match &variant.fields { + Fields::Named(fields) => { + let arg_names: Vec<_> = + fields.named.iter().map(|field| &field.ident).collect(); + let arg_types: Vec<_> = + fields.named.iter().map(|field| &field.ty).collect(); + quote! { + #(#docs)* + pub fn #method_name(self, #(#arg_names: #arg_types),*) -> XcmBuilder { + let mut new_instructions = self.instructions; + new_instructions.push(#name::::#variant_name { #(#arg_names),* }); + XcmBuilder { + instructions: new_instructions, + state: core::marker::PhantomData, + } + } + } + }, + _ => + return Err(Error::new_spanned( + &variant, + "BuyExecution should have named fields", + )), + }; + Ok(fields) + }, + )?; + + let second_impl = quote! { + impl XcmBuilder { + #buy_execution_method + } + }; + + let output = quote! { + #first_impl + #second_impl + }; + + Ok(output) +} + +fn generate_builder_unpaid_impl(name: &Ident, data_enum: &DataEnum) -> Result { + let unpaid_execution_variant = data_enum + .variants + .iter() + .find(|variant| variant.ident.to_string() == "UnpaidExecution") + .ok_or(Error::new_spanned(&data_enum.variants, "No UnpaidExecution instruction"))?; + let unpaid_execution_ident = &unpaid_execution_variant.ident; + let unpaid_execution_method_name = Ident::new( + &unpaid_execution_ident.to_string().to_snake_case(), + unpaid_execution_ident.span(), + ); + let docs = get_doc_comments(&unpaid_execution_variant); + let fields = match &unpaid_execution_variant.fields { + Fields::Named(fields) => fields, + _ => + return Err(Error::new_spanned( + &unpaid_execution_variant, + "UnpaidExecution should have named fields", + )), + }; + let arg_names: Vec<_> = fields.named.iter().map(|field| &field.ident).collect(); + let arg_types: Vec<_> = fields.named.iter().map(|field| &field.ty).collect(); + Ok(quote! { + impl XcmBuilder { + #(#docs)* + pub fn #unpaid_execution_method_name(self, #(#arg_names: #arg_types),*) -> XcmBuilder { + let mut new_instructions = self.instructions; + new_instructions.push(#name::::#unpaid_execution_ident { #(#arg_names),* }); + XcmBuilder { + instructions: new_instructions, + state: core::marker::PhantomData, + } + } + } + }) +} + +fn get_doc_comments(variant: &Variant) -> Vec { + variant + .attrs + .iter() + .filter_map(|attr| match &attr.meta { + Meta::NameValue(MetaNameValue { + value: Expr::Lit(ExprLit { lit: Lit::Str(literal), .. }), + .. + }) if attr.path().is_ident("doc") => Some(literal.value()), + _ => None, + }) + .map(|doc| syn::parse_str::(&format!("/// {}", doc)).unwrap()) + .collect() +} diff --git a/polkadot/xcm/procedural/src/lib.rs b/polkadot/xcm/procedural/src/lib.rs index 83cc6cdf98f..7600e817d0e 100644 --- a/polkadot/xcm/procedural/src/lib.rs +++ b/polkadot/xcm/procedural/src/lib.rs @@ -17,6 +17,7 @@ //! Procedural macros used in XCM. use proc_macro::TokenStream; +use syn::{parse_macro_input, DeriveInput}; mod builder_pattern; mod v2; @@ -56,7 +57,10 @@ pub fn impl_conversion_functions_for_junctions_v3(input: TokenStream) -> TokenSt /// .buy_execution(fees, weight_limit) /// .deposit_asset(assets, beneficiary) /// .build(); -#[proc_macro_derive(Builder)] +#[proc_macro_derive(Builder, attributes(builder))] pub fn derive_builder(input: TokenStream) -> TokenStream { + let input = parse_macro_input!(input as DeriveInput); builder_pattern::derive(input) + .unwrap_or_else(syn::Error::into_compile_error) + .into() } diff --git a/polkadot/xcm/procedural/tests/builder_pattern.rs b/polkadot/xcm/procedural/tests/builder_pattern.rs new file mode 100644 index 00000000000..eab9d67121f --- /dev/null +++ b/polkadot/xcm/procedural/tests/builder_pattern.rs @@ -0,0 +1,81 @@ +// Copyright (C) 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 . + +//! Test the methods generated by the Builder derive macro. +//! Tests directly on the actual Xcm struct and Instruction enum. + +use xcm::latest::prelude::*; + +#[test] +fn builder_pattern_works() { + let asset: MultiAsset = (Here, 100u128).into(); + let beneficiary: MultiLocation = AccountId32 { id: [0u8; 32], network: None }.into(); + let message: Xcm<()> = Xcm::builder() + .receive_teleported_asset(asset.clone().into()) + .buy_execution(asset.clone(), Unlimited) + .deposit_asset(asset.clone().into(), beneficiary) + .build(); + assert_eq!( + message, + Xcm(vec![ + ReceiveTeleportedAsset(asset.clone().into()), + BuyExecution { fees: asset.clone(), weight_limit: Unlimited }, + DepositAsset { assets: asset.into(), beneficiary }, + ]) + ); +} + +#[test] +fn default_builder_requires_buy_execution() { + let asset: MultiAsset = (Here, 100u128).into(); + let beneficiary: MultiLocation = AccountId32 { id: [0u8; 32], network: None }.into(); + // This is invalid, since it doesn't pay for fees. + // This is enforced by the runtime, because the build() method doesn't exist + // on the resulting type. + // let message: Xcm<()> = Xcm::builder() + // .withdraw_asset(asset.clone().into()) + // .deposit_asset(asset.into(), beneficiary) + // .build(); + + // To be able to do that, we need to use the explicitly unpaid variant + let message: Xcm<()> = Xcm::builder_unpaid() + .unpaid_execution(Unlimited, None) + .withdraw_asset(asset.clone().into()) + .deposit_asset(asset.clone().into(), beneficiary) + .build(); // This works + assert_eq!( + message, + Xcm(vec![ + UnpaidExecution { weight_limit: Unlimited, check_origin: None }, + WithdrawAsset(asset.clone().into()), + DepositAsset { assets: asset.clone().into(), beneficiary }, + ]) + ); + + // The other option doesn't have any limits whatsoever, so it should + // only be used when you really know what you're doing. + let message: Xcm<()> = Xcm::builder_unsafe() + .withdraw_asset(asset.clone().into()) + .deposit_asset(asset.clone().into(), beneficiary) + .build(); + assert_eq!( + message, + Xcm(vec![ + WithdrawAsset(asset.clone().into()), + DepositAsset { assets: asset.clone().into(), beneficiary }, + ]) + ); +} diff --git a/polkadot/xcm/procedural/tests/ui.rs b/polkadot/xcm/procedural/tests/ui.rs index a6ec35d0862..a30f4d7dee5 100644 --- a/polkadot/xcm/procedural/tests/ui.rs +++ b/polkadot/xcm/procedural/tests/ui.rs @@ -28,5 +28,5 @@ fn ui() { std::env::set_var("SKIP_WASM_BUILD", "1"); let t = trybuild::TestCases::new(); - t.compile_fail("tests/ui/*.rs"); + t.compile_fail("tests/ui/**/*.rs"); } diff --git a/polkadot/xcm/procedural/tests/ui/builder_pattern/badly_formatted_attribute.rs b/polkadot/xcm/procedural/tests/ui/builder_pattern/badly_formatted_attribute.rs new file mode 100644 index 00000000000..3a103f3ddc4 --- /dev/null +++ b/polkadot/xcm/procedural/tests/ui/builder_pattern/badly_formatted_attribute.rs @@ -0,0 +1,32 @@ +// Copyright (C) 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 . + +//! Test error when using a badly formatted attribute. + +use xcm_procedural::Builder; + +struct Xcm(pub Vec>); + +#[derive(Builder)] +enum Instruction { + #[builder(funds_holding = 2)] + WithdrawAsset(u128), + BuyExecution { fees: u128 }, + UnpaidExecution { weight_limit: (u32, u32) }, + Transact { call: Call }, +} + +fn main() {} diff --git a/polkadot/xcm/procedural/tests/ui/builder_pattern/badly_formatted_attribute.stderr b/polkadot/xcm/procedural/tests/ui/builder_pattern/badly_formatted_attribute.stderr new file mode 100644 index 00000000000..978faf2e868 --- /dev/null +++ b/polkadot/xcm/procedural/tests/ui/builder_pattern/badly_formatted_attribute.stderr @@ -0,0 +1,5 @@ +error: Expected `builder(loads_holding)` + --> tests/ui/builder_pattern/badly_formatted_attribute.rs:25:5 + | +25 | #[builder(funds_holding = 2)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/polkadot/xcm/procedural/tests/ui/builder_pattern/buy_execution_named_fields.rs b/polkadot/xcm/procedural/tests/ui/builder_pattern/buy_execution_named_fields.rs new file mode 100644 index 00000000000..dc5c679a96e --- /dev/null +++ b/polkadot/xcm/procedural/tests/ui/builder_pattern/buy_execution_named_fields.rs @@ -0,0 +1,30 @@ +// Copyright (C) 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 . + +//! Test error when the `BuyExecution` instruction doesn't take named fields. + +use xcm_procedural::Builder; + +struct Xcm(pub Vec>); + +#[derive(Builder)] +enum Instruction { + BuyExecution(u128), + UnpaidExecution { weight_limit: (u32, u32) }, + Transact { call: Call }, +} + +fn main() {} diff --git a/polkadot/xcm/procedural/tests/ui/builder_pattern/buy_execution_named_fields.stderr b/polkadot/xcm/procedural/tests/ui/builder_pattern/buy_execution_named_fields.stderr new file mode 100644 index 00000000000..dc8246770ba --- /dev/null +++ b/polkadot/xcm/procedural/tests/ui/builder_pattern/buy_execution_named_fields.stderr @@ -0,0 +1,5 @@ +error: BuyExecution should have named fields + --> tests/ui/builder_pattern/buy_execution_named_fields.rs:25:5 + | +25 | BuyExecution(u128), + | ^^^^^^^^^^^^^^^^^^ diff --git a/polkadot/xcm/procedural/tests/ui/builder_pattern/loads_holding_no_operands.rs b/polkadot/xcm/procedural/tests/ui/builder_pattern/loads_holding_no_operands.rs new file mode 100644 index 00000000000..070f0be6bac --- /dev/null +++ b/polkadot/xcm/procedural/tests/ui/builder_pattern/loads_holding_no_operands.rs @@ -0,0 +1,32 @@ +// Copyright (C) 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 . + +//! Test error when an instruction that loads the holding register doesn't take operands. + +use xcm_procedural::Builder; + +struct Xcm(pub Vec>); + +#[derive(Builder)] +enum Instruction { + #[builder(loads_holding)] + WithdrawAsset, + BuyExecution { fees: u128 }, + UnpaidExecution { weight_limit: (u32, u32) }, + Transact { call: Call }, +} + +fn main() {} diff --git a/polkadot/xcm/procedural/tests/ui/builder_pattern/loads_holding_no_operands.stderr b/polkadot/xcm/procedural/tests/ui/builder_pattern/loads_holding_no_operands.stderr new file mode 100644 index 00000000000..0358a35ad3d --- /dev/null +++ b/polkadot/xcm/procedural/tests/ui/builder_pattern/loads_holding_no_operands.stderr @@ -0,0 +1,6 @@ +error: Instructions that load the holding register should take operands + --> tests/ui/builder_pattern/loads_holding_no_operands.rs:25:5 + | +25 | / #[builder(loads_holding)] +26 | | WithdrawAsset, + | |_________________^ diff --git a/polkadot/xcm/procedural/tests/ui/builder_pattern/no_buy_execution.rs b/polkadot/xcm/procedural/tests/ui/builder_pattern/no_buy_execution.rs new file mode 100644 index 00000000000..1ed8dd38cba --- /dev/null +++ b/polkadot/xcm/procedural/tests/ui/builder_pattern/no_buy_execution.rs @@ -0,0 +1,29 @@ +// Copyright (C) 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 . + +//! Test error when there's no `BuyExecution` instruction. + +use xcm_procedural::Builder; + +struct Xcm(pub Vec>); + +#[derive(Builder)] +enum Instruction { + UnpaidExecution { weight_limit: (u32, u32) }, + Transact { call: Call }, +} + +fn main() {} diff --git a/polkadot/xcm/procedural/tests/ui/builder_pattern/no_buy_execution.stderr b/polkadot/xcm/procedural/tests/ui/builder_pattern/no_buy_execution.stderr new file mode 100644 index 00000000000..d8798c8223f --- /dev/null +++ b/polkadot/xcm/procedural/tests/ui/builder_pattern/no_buy_execution.stderr @@ -0,0 +1,6 @@ +error: No BuyExecution instruction + --> tests/ui/builder_pattern/no_buy_execution.rs:25:5 + | +25 | / UnpaidExecution { weight_limit: (u32, u32) }, +26 | | Transact { call: Call }, + | |____________________________^ diff --git a/polkadot/xcm/procedural/tests/ui/builder_pattern/no_unpaid_execution.rs b/polkadot/xcm/procedural/tests/ui/builder_pattern/no_unpaid_execution.rs new file mode 100644 index 00000000000..d542102d2d3 --- /dev/null +++ b/polkadot/xcm/procedural/tests/ui/builder_pattern/no_unpaid_execution.rs @@ -0,0 +1,29 @@ +// Copyright (C) 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 . + +//! Test error when there's no `UnpaidExecution` instruction. + +use xcm_procedural::Builder; + +struct Xcm(pub Vec>); + +#[derive(Builder)] +enum Instruction { + BuyExecution { fees: u128 }, + Transact { call: Call }, +} + +fn main() {} diff --git a/polkadot/xcm/procedural/tests/ui/builder_pattern/no_unpaid_execution.stderr b/polkadot/xcm/procedural/tests/ui/builder_pattern/no_unpaid_execution.stderr new file mode 100644 index 00000000000..c8c0748da72 --- /dev/null +++ b/polkadot/xcm/procedural/tests/ui/builder_pattern/no_unpaid_execution.stderr @@ -0,0 +1,6 @@ +error: No UnpaidExecution instruction + --> tests/ui/builder_pattern/no_unpaid_execution.rs:25:5 + | +25 | / BuyExecution { fees: u128 }, +26 | | Transact { call: Call }, + | |____________________________^ diff --git a/polkadot/xcm/procedural/tests/ui/builder_pattern/unexpected_attribute.rs b/polkadot/xcm/procedural/tests/ui/builder_pattern/unexpected_attribute.rs new file mode 100644 index 00000000000..5808ec571ce --- /dev/null +++ b/polkadot/xcm/procedural/tests/ui/builder_pattern/unexpected_attribute.rs @@ -0,0 +1,32 @@ +// Copyright (C) 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 . + +//! Test error when using wrong attribute. + +use xcm_procedural::Builder; + +struct Xcm(pub Vec>); + +#[derive(Builder)] +enum Instruction { + #[builder(funds_holding)] + WithdrawAsset(u128), + BuyExecution { fees: u128 }, + UnpaidExecution { weight_limit: (u32, u32) }, + Transact { call: Call }, +} + +fn main() {} diff --git a/polkadot/xcm/procedural/tests/ui/builder_pattern/unexpected_attribute.stderr b/polkadot/xcm/procedural/tests/ui/builder_pattern/unexpected_attribute.stderr new file mode 100644 index 00000000000..1ff9d185136 --- /dev/null +++ b/polkadot/xcm/procedural/tests/ui/builder_pattern/unexpected_attribute.stderr @@ -0,0 +1,5 @@ +error: Expected `builder(loads_holding)` + --> tests/ui/builder_pattern/unexpected_attribute.rs:25:5 + | +25 | #[builder(funds_holding)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/polkadot/xcm/procedural/tests/ui/builder_pattern/unpaid_execution_named_fields.rs b/polkadot/xcm/procedural/tests/ui/builder_pattern/unpaid_execution_named_fields.rs new file mode 100644 index 00000000000..bb98d603fd9 --- /dev/null +++ b/polkadot/xcm/procedural/tests/ui/builder_pattern/unpaid_execution_named_fields.rs @@ -0,0 +1,30 @@ +// Copyright (C) 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 . + +//! Test error when the `BuyExecution` instruction doesn't take named fields. + +use xcm_procedural::Builder; + +struct Xcm(pub Vec>); + +#[derive(Builder)] +enum Instruction { + BuyExecution { fees: u128 }, + UnpaidExecution(u32, u32), + Transact { call: Call }, +} + +fn main() {} diff --git a/polkadot/xcm/procedural/tests/ui/builder_pattern/unpaid_execution_named_fields.stderr b/polkadot/xcm/procedural/tests/ui/builder_pattern/unpaid_execution_named_fields.stderr new file mode 100644 index 00000000000..0a3c0a40a33 --- /dev/null +++ b/polkadot/xcm/procedural/tests/ui/builder_pattern/unpaid_execution_named_fields.stderr @@ -0,0 +1,5 @@ +error: UnpaidExecution should have named fields + --> tests/ui/builder_pattern/unpaid_execution_named_fields.rs:26:5 + | +26 | UnpaidExecution(u32, u32), + | ^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/polkadot/xcm/procedural/tests/ui/builder_pattern.rs b/polkadot/xcm/procedural/tests/ui/builder_pattern/wrong_target.rs similarity index 100% rename from polkadot/xcm/procedural/tests/ui/builder_pattern.rs rename to polkadot/xcm/procedural/tests/ui/builder_pattern/wrong_target.rs diff --git a/polkadot/xcm/procedural/tests/ui/builder_pattern.stderr b/polkadot/xcm/procedural/tests/ui/builder_pattern/wrong_target.stderr similarity index 63% rename from polkadot/xcm/procedural/tests/ui/builder_pattern.stderr rename to polkadot/xcm/procedural/tests/ui/builder_pattern/wrong_target.stderr index 439b40f31ca..007aa0b5ff3 100644 --- a/polkadot/xcm/procedural/tests/ui/builder_pattern.stderr +++ b/polkadot/xcm/procedural/tests/ui/builder_pattern/wrong_target.stderr @@ -1,5 +1,5 @@ error: Expected the `Instruction` enum - --> tests/ui/builder_pattern.rs:23:1 + --> tests/ui/builder_pattern/wrong_target.rs:23:1 | 23 | struct SomeStruct; | ^^^^^^^^^^^^^^^^^^ diff --git a/polkadot/xcm/src/v3/mod.rs b/polkadot/xcm/src/v3/mod.rs index 4217528f227..bbdd504ceb0 100644 --- a/polkadot/xcm/src/v3/mod.rs +++ b/polkadot/xcm/src/v3/mod.rs @@ -426,6 +426,7 @@ pub enum Instruction { /// Kind: *Command*. /// /// Errors: + #[builder(loads_holding)] WithdrawAsset(MultiAssets), /// Asset(s) (`assets`) have been received into the ownership of this system on the `origin` @@ -439,6 +440,7 @@ pub enum Instruction { /// Kind: *Trusted Indication*. /// /// Errors: + #[builder(loads_holding)] ReserveAssetDeposited(MultiAssets), /// Asset(s) (`assets`) have been destroyed on the `origin` system and equivalent assets should @@ -452,6 +454,7 @@ pub enum Instruction { /// Kind: *Trusted Indication*. /// /// Errors: + #[builder(loads_holding)] ReceiveTeleportedAsset(MultiAssets), /// Respond with information that the local system is expecting. @@ -776,6 +779,7 @@ pub enum Instruction { /// Kind: *Command* /// /// Errors: + #[builder(loads_holding)] ClaimAsset { assets: MultiAssets, ticket: MultiLocation }, /// Always throws an error of type `Trap`. diff --git a/polkadot/xcm/xcm-simulator/example/src/lib.rs b/polkadot/xcm/xcm-simulator/example/src/lib.rs index 03e7c19a914..85b8ad1c5cb 100644 --- a/polkadot/xcm/xcm-simulator/example/src/lib.rs +++ b/polkadot/xcm/xcm-simulator/example/src/lib.rs @@ -649,23 +649,4 @@ mod tests { ); }); } - - #[test] - fn builder_pattern_works() { - let asset: MultiAsset = (Here, 100u128).into(); - let beneficiary: MultiLocation = AccountId32 { id: [0u8; 32], network: None }.into(); - let message: Xcm<()> = Xcm::builder() - .withdraw_asset(asset.clone().into()) - .buy_execution(asset.clone(), Unlimited) - .deposit_asset(asset.clone().into(), beneficiary) - .build(); - assert_eq!( - message, - Xcm(vec![ - WithdrawAsset(asset.clone().into()), - BuyExecution { fees: asset.clone(), weight_limit: Unlimited }, - DepositAsset { assets: asset.into(), beneficiary }, - ]) - ); - } } diff --git a/prdoc/pr_2253.prdoc b/prdoc/pr_2253.prdoc new file mode 100644 index 00000000000..398b0a29066 --- /dev/null +++ b/prdoc/pr_2253.prdoc @@ -0,0 +1,24 @@ +# Schema: Parity PR Documentation Schema (prdoc) +# See doc at https://github.com/paritytech/prdoc + +title: Different builder pattern constructors for XCM + +doc: + - audience: Core Dev + description: | + The `builder()` constructor for XCM programs now only allows building messages that pay for fees, + i.e. messages that would pass the `AllowTopLevelPaidExecutionFrom` barrier. + Another constructor, `builder_unpaid()` requires an explicit `UnpaidExecution` instruction before + anything else. + For building messages without any restriction, `builder_unsafe` can be used. + This has been named like that since in general the other two should be used instead, but it's okay + to use it for teaching purposes or for experimenting. + +migrations: + db: [] + + runtime: [] + +crates: [] + +host_functions: [] -- GitLab From f5ad32e406e5108ea87f05a0b99406b80ed3226c Mon Sep 17 00:00:00 2001 From: Javier Bullrich Date: Tue, 21 Nov 2023 16:49:47 +0100 Subject: [PATCH 030/102] added action to pass review bot on merge queue (#2414) This action will trigger when a merge queue is created and will add a positive status check under the `review-bot` account, allowing the PR to pass the required check for the merge. --------- Co-authored-by: Chevdor --- .github/workflows/merge-queue.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .github/workflows/merge-queue.yml diff --git a/.github/workflows/merge-queue.yml b/.github/workflows/merge-queue.yml new file mode 100644 index 00000000000..f3fb7765ca6 --- /dev/null +++ b/.github/workflows/merge-queue.yml @@ -0,0 +1,24 @@ +name: Merge-Queue + +on: + merge_group: + +jobs: + trigger-merge-queue-action: + runs-on: ubuntu-latest + environment: master + steps: + - name: Generate token + id: app_token + uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a # v2.1.0 + with: + app_id: ${{ secrets.REVIEW_APP_ID }} + private_key: ${{ secrets.REVIEW_APP_KEY }} + - name: Add Merge Queue status check + uses: billyjbryant/create-status-check@3e6fa0ac599d10d9588cf9516ca4330ef669b858 # v2 + with: + authToken: ${{ steps.app_token.outputs.token }} + context: 'review-bot' + description: 'PRs for merge queue gets approved' + state: 'success' + sha: ${{ github.event.merge_group.head_commit.id }} -- GitLab From 50811d6b424185e1e6c0762a8b1c95db893c6750 Mon Sep 17 00:00:00 2001 From: Sophia Gold Date: Tue, 21 Nov 2023 11:34:05 -0500 Subject: [PATCH 031/102] Update tick collator for async backing (#1497) This updates the tick runtime and polkadot-parachain collator to use async backing. --- Cargo.lock | 1 + .../testing/rococo-parachain/Cargo.toml | 2 + .../testing/rococo-parachain/src/lib.rs | 47 ++++++++++++------- cumulus/polkadot-parachain/src/service.rs | 34 +++++++++----- 4 files changed, 55 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 88cefe7bbef..903e9463cf6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14530,6 +14530,7 @@ dependencies = [ "cumulus-pallet-xcm", "cumulus-pallet-xcmp-queue", "cumulus-ping", + "cumulus-primitives-aura", "cumulus-primitives-core", "cumulus-primitives-utility", "frame-benchmarking", diff --git a/cumulus/parachains/runtimes/testing/rococo-parachain/Cargo.toml b/cumulus/parachains/runtimes/testing/rococo-parachain/Cargo.toml index 5e9d347a25d..08fa8b69127 100644 --- a/cumulus/parachains/runtimes/testing/rococo-parachain/Cargo.toml +++ b/cumulus/parachains/runtimes/testing/rococo-parachain/Cargo.toml @@ -52,6 +52,7 @@ cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system 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-aura = { path = "../../../../primitives/aura", default-features = false } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } parachains-common = { path = "../../../common", default-features = false } @@ -70,6 +71,7 @@ std = [ "cumulus-pallet-xcm/std", "cumulus-pallet-xcmp-queue/std", "cumulus-ping/std", + "cumulus-primitives-aura/std", "cumulus-primitives-core/std", "cumulus-primitives-utility/std", "frame-benchmarking?/std", diff --git a/cumulus/parachains/runtimes/testing/rococo-parachain/src/lib.rs b/cumulus/parachains/runtimes/testing/rococo-parachain/src/lib.rs index 6df00d43e8d..965fb0d6adc 100644 --- a/cumulus/parachains/runtimes/testing/rococo-parachain/src/lib.rs +++ b/cumulus/parachains/runtimes/testing/rococo-parachain/src/lib.rs @@ -22,13 +22,13 @@ #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); -use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; +use cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases; use polkadot_runtime_common::xcm_sender::NoPriceForMessageDelivery; use sp_api::impl_runtime_apis; use sp_core::OpaqueMetadata; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, - traits::{AccountIdLookup, BlakeTwo256, Block as BlockT}, + traits::{AccountIdLookup, BlakeTwo256, Block as BlockT, Hash as HashT}, transaction_validity::{TransactionSource, TransactionValidity}, ApplyExtrinsicResult, }; @@ -113,7 +113,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { state_version: 0, }; -pub const MILLISECS_PER_BLOCK: u64 = 12000; +pub const MILLISECS_PER_BLOCK: u64 = 6000; pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK; @@ -143,18 +143,18 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); -/// We allow for .5 seconds of compute with a 12 second average block time. +/// We allow for 2 seconds of compute with a 6 second average block time. const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts( - WEIGHT_REF_TIME_PER_SECOND.saturating_div(2), + WEIGHT_REF_TIME_PER_SECOND.saturating_mul(2), cumulus_primitives_core::relay_chain::MAX_POV_SIZE as u64, ); /// Maximum number of blocks simultaneously accepted by the Runtime, not yet included /// into the relay chain. -const UNINCLUDED_SEGMENT_CAPACITY: u32 = 1; +const UNINCLUDED_SEGMENT_CAPACITY: u32 = 3; /// How many parachain blocks are processed by the relay chain per parent. Limits the /// number of blocks authored per slot. -const BLOCK_PROCESSING_VELOCITY: u32 = 1; +const BLOCK_PROCESSING_VELOCITY: u32 = 2; /// Relay chain slot duration, in milliseconds. const RELAY_CHAIN_SLOT_DURATION_MILLIS: u32 = 6000; @@ -277,6 +277,13 @@ parameter_types! { pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; } +type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< + Runtime, + RELAY_CHAIN_SLOT_DURATION_MILLIS, + BLOCK_PROCESSING_VELOCITY, + UNINCLUDED_SEGMENT_CAPACITY, +>; + impl cumulus_pallet_parachain_system::Config for Runtime { type WeightInfo = (); type RuntimeEvent = RuntimeEvent; @@ -287,13 +294,8 @@ impl cumulus_pallet_parachain_system::Config for Runtime { type ReservedDmpWeight = ReservedDmpWeight; type XcmpMessageHandler = XcmpQueue; type ReservedXcmpWeight = ReservedXcmpWeight; - type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; - type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< - Runtime, - RELAY_CHAIN_SLOT_DURATION_MILLIS, - BLOCK_PROCESSING_VELOCITY, - UNINCLUDED_SEGMENT_CAPACITY, - >; + type CheckAssociatedRelayNumber = RelayNumberMonotonicallyIncreases; + type ConsensusHook = ConsensusHook; } impl parachain_info::Config for Runtime {} @@ -584,9 +586,9 @@ impl pallet_aura::Config for Runtime { type AuthorityId = AuraId; type DisabledValidators = (); type MaxAuthorities = ConstU32<100_000>; - type AllowMultipleBlocksPerSlot = ConstBool; + type AllowMultipleBlocksPerSlot = ConstBool; #[cfg(feature = "experimental")] - type SlotDuration = pallet_aura::MinimumPeriodTimesTwo; + type SlotDuration = ConstU64; } construct_runtime! { @@ -624,7 +626,7 @@ pub type Balance = u128; /// Index of a transaction in the chain. pub type Nonce = u32; /// A hash of some data used by the chain. -pub type Hash = sp_core::H256; +pub type Hash = ::Output; /// An index to a block. pub type BlockNumber = u32; /// The address format for describing accounts. @@ -751,7 +753,7 @@ impl_runtime_apis! { impl sp_consensus_aura::AuraApi for Runtime { fn slot_duration() -> sp_consensus_aura::SlotDuration { - sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) + sp_consensus_aura::SlotDuration::from_millis(SLOT_DURATION) } fn authorities() -> Vec { @@ -824,6 +826,15 @@ impl_runtime_apis! { build_config::(config) } } + + impl cumulus_primitives_aura::AuraUnincludedSegmentApi for Runtime { + fn can_build_upon( + included_hash: ::Hash, + slot: cumulus_primitives_aura::Slot, + ) -> bool { + ConsensusHook::can_build_upon(included_hash, slot) + } + } } cumulus_pallet_parachain_system::register_validate_block! { diff --git a/cumulus/polkadot-parachain/src/service.rs b/cumulus/polkadot-parachain/src/service.rs index 3884fce246c..f580835db55 100644 --- a/cumulus/polkadot-parachain/src/service.rs +++ b/cumulus/polkadot-parachain/src/service.rs @@ -590,6 +590,7 @@ where CollatorPair, OverseerHandle, Arc>) + Send + Sync>, + Arc, ) -> Result<(), sc_service::Error>, { let parachain_config = prepare_node_config(parachain_config); @@ -723,6 +724,7 @@ where collator_key.expect("Command line arguments do not allow this. qed"), overseer_handle, announce_block, + backend.clone(), )?; } @@ -983,7 +985,8 @@ pub async fn start_rococo_parachain_node( para_id, collator_key, overseer_handle, - announce_block| { + announce_block, + backend| { let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording( @@ -1002,11 +1005,15 @@ pub async fn start_rococo_parachain_node( client.clone(), ); - let params = BasicAuraParams { + let params = AuraParams { create_inherent_data_providers: move |_, ()| async move { Ok(()) }, block_import, - para_client: client, + para_client: client.clone(), + para_backend: backend.clone(), relay_client: relay_chain_interface, + code_hash_provider: move |block_hash| { + client.code_at(block_hash).ok().map(|c| ValidationCode::from(c).hash()) + }, sync_oracle, keystore, collator_key, @@ -1016,12 +1023,10 @@ pub async fn start_rococo_parachain_node( relay_chain_slot_duration, proposer, collator_service, - // Very limited proposal time. - authoring_duration: Duration::from_millis(500), - collation_request_receiver: None, + authoring_duration: Duration::from_millis(1500), }; - let fut = basic_aura::run::< + let fut = aura::run::< Block, sp_consensus_aura::sr25519::AuthorityPair, _, @@ -1031,6 +1036,8 @@ pub async fn start_rococo_parachain_node( _, _, _, + _, + _, >(params); task_manager.spawn_essential_handle().spawn("aura", None, fut); @@ -1376,7 +1383,8 @@ where para_id, collator_key, overseer_handle, - announce_block| { + announce_block, + _backend| { let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording( @@ -1471,7 +1479,8 @@ where para_id, collator_key, overseer_handle, - announce_block| { + announce_block, + _backend| { let relay_chain_interface2 = relay_chain_interface.clone(); let collator_service = CollatorService::new( @@ -1642,7 +1651,7 @@ where para_backend: backend.clone(), relay_client: relay_chain_interface, code_hash_provider: move |block_hash| { - client.code_at(block_hash).ok().map(ValidationCode).map(|c| c.hash()) + client.code_at(block_hash).ok().map(|c| ValidationCode::from(c).hash()) }, sync_oracle, keystore, @@ -1713,6 +1722,7 @@ where CollatorPair, OverseerHandle, Arc>) + Send + Sync>, + Arc, ) -> Result<(), sc_service::Error>, { let parachain_config = prepare_node_config(parachain_config); @@ -1845,6 +1855,7 @@ where collator_key.expect("Command line arguments do not allow this. qed"), overseer_handle, announce_block, + backend.clone(), )?; } @@ -1923,7 +1934,8 @@ pub async fn start_contracts_rococo_node( para_id, collator_key, overseer_handle, - announce_block| { + announce_block, + _backend| { let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording( -- GitLab From c35a88915b30fde7d3aa3465940f76d6c4f2fa21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=B3nal=20Murray?= Date: Tue, 21 Nov 2023 18:36:44 +0000 Subject: [PATCH 032/102] Generate chain specs and head data --- Cargo.lock | 1 + .../coretime-rococo-genesis-head-data | 1 + .../chain-specs/coretime-rococo-wasm | 1 + .../chain-specs/coretime-rococo.json | 69 +++++++++++ .../coretime/coretime-rococo/Cargo.toml | 2 + .../coretime/coretime-rococo/src/lib.rs | 11 ++ .../src/chain_spec/coretime.rs | 110 +++++++++++++++++- cumulus/polkadot-parachain/src/command.rs | 9 +- .../scripts/create_coretime_rococo_spec.sh | 4 +- 9 files changed, 201 insertions(+), 7 deletions(-) create mode 100644 cumulus/parachains/chain-specs/coretime-rococo-genesis-head-data create mode 100644 cumulus/parachains/chain-specs/coretime-rococo-wasm diff --git a/Cargo.lock b/Cargo.lock index 8739a643395..0777791ba81 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3300,6 +3300,7 @@ dependencies = [ "sp-block-builder", "sp-consensus-aura", "sp-core", + "sp-genesis-builder", "sp-inherents", "sp-offchain", "sp-runtime", diff --git a/cumulus/parachains/chain-specs/coretime-rococo-genesis-head-data b/cumulus/parachains/chain-specs/coretime-rococo-genesis-head-data new file mode 100644 index 00000000000..b5d0a5708d1 --- /dev/null +++ b/cumulus/parachains/chain-specs/coretime-rococo-genesis-head-data @@ -0,0 +1 @@ +0x000000000000000000000000000000000000000000000000000000000000000000ec43d10adfeb9aeea0c434b21a13cb3203f9a05e3085b4220909ab35c2ed1fc303170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c11131400 \ No newline at end of file diff --git a/cumulus/parachains/chain-specs/coretime-rococo-wasm b/cumulus/parachains/chain-specs/coretime-rococo-wasm new file mode 100644 index 00000000000..c9bb05ef56e --- /dev/null +++ b/cumulus/parachains/chain-specs/coretime-rococo-wasm @@ -0,0 +1 @@ +0x52bc537646db8e0528b52ffd00585436042ea60580125010284e271daf9b00245216909da40993fe8e859b1148e45cb8729243aa1823da08d0d96910fa75d49c70180540e8ee08a87d2f3dac77eac03c73195e4b93bb35754ddfd3da2664efbdf7de5b4a99640a4413f1101011d23f094e79b98eb594e2761ac16f216037f105a2e6f26122cfaca8799e5991fdb8e3db07f03cab42e73b2472f4ed47603b71de2eb693e6ed451d12e134cd3f09caff64a8f9a7d929294584b68b3a94f89acb5001fc9a734884db35822feb1d635f39ce9f266747fa23f5a9f99b7348a4fa537f1f87f38eb09fced9d19f73cd8edc2e129ef391db358af09c8f9a73bbc6109ef3a739ed76a5603f5db3fc9c1d959efa27c1cdf26b969fc323f467b552f3a753cbed9297b64bfa26a70b5fd769b56f2b5fda31042ffd63d9bd1a47f0725ae91c42d597f4dbf2c75a22f978ea0d08449e55593381287f747d7b3fcfaa9479573bb5ffe0106a8b181808ff5383ed144466f9d887c82e9d3b3bcc739e999d7bf065e21b7cec244a67e7eee376922c9ffd63713bf1b3733bb58fdc7f32096a8b330c84ff931c4eead3a5cf9088bc2c87a0b468d32efef669b95dd3bf094a2bbfc3760ee9e5763d35874468bba6cb9001b1efa796667cfcdd2ebb2fc7a484fad8b907db51940e4a19644e9752ca9efed4724eef39e7943e65b773dfb765a49d7a4b28e97dc7f6d9523af1718fd1bffd630cc48f2f10b95d5386454890c964547eb6d37476da4e926b57fb534f0bb6ab7d00e258f4edd2a98fdcb77f47edc4dffe49b0a89dda8fda497ebb523b4d6fe790c8f4a77e6a6aa5ecf82831eea5732f6fcb8874ead2e99d923f2f9577942ffda97b4ac9c4c7cf3d46f1db3fae9dc6241e6144e923f81d44947e443a9379a9b4fdb397a2855f83cc43a48fd3b9761ae54f67ffa6ad409ccece2107b45decf372ed627feaaf4169e983805e6a7b2944e08a874091b297dae0a5682fbd9dc543a048d94b6df0d2dbbf094a3b3fe42150a4eca5367829da4b6f07790814c9e7a5802fbd7dc543a048d94b6df0d2db393c4265b297fed4328412652f1d6c27fe760ea1a4eca53ff5533ff553b3e576b1738fbe4cc4671eb196adc5f7310f4169a1a65dfcdc2e760e89d076b13f352b7ddc1ff7c75322cfa868f991fbea623bf18c8a96afceb513cfa8c8be3ad84ef2ab730be1d758f4d53f16f718fdab733b511fc167e7da693a3bb7937476da4eedec623bf1b37308d53ecaa7ce2114f5f6a7e61ef532f1671e312925958f650e22cfd4f47929fbe91fcb1c449ea9e9f352f6d33f163bf718a5ecdb3fb6f20491093bff28653fb2b7f7f34c4d122f5f7a8746a4ece71da5ecd93f0e8f884f7d5a29f4e99592553f9ded187b76e62123f51694f7f44ab17eba900ff22357fdc8defe34d9f24fcb0c84fd93205b7982c8849d7f94b21fd9dbfb79a62689972fbd432352f6f38e52f6ec1f8747c4a73ead14faf44ac9aa9fce768c3d3bf390917a0bca7b7aa5583f9df17c901fb9ea47f6f6a7c9967f5a6620ec5f836c2512a274f9cc16b0cb50ca7f3a8752e2cfabd42ee94ffdd44ffdd44fcd96dbc5ce3dfa3291b2671eb1291bcf27eb88d2b95dec0c7e2c4494cecedd3543c24123f37864e141e5be71afb87bae16178a6be7e6b9565c2cee13568c2bc5cde24671ebdc3577888b83a760a7b8586c1996900564d3b071ec10568d3dc3a261035935ac0c760d6b854d63abb07aec1d6b84a5c10a619bb0782c15560b9bc7bdb048d824ec12566699b072ec1cafb24a78204b8625c2866163b033d81f6c0df605cbc7c1b063b81f57c3e9b80a4ec67b7033f68db3e06ef818f7c1cbd822bc057b849d59202c1c1b84bfe06c380fb6059b83d5c19bb055f68d5bc5d7b857ac1fbb83cdc2b2b13e3814ee8485c18e7122dc8dff60ddf80e6ec7ae6053b067ac19dbc696b9567614b1c3881d3dec106207103b82d8c1c30e1c76b4d9a1c38e1c76bcb003861d67767cd98185c90da636980631a9c15405131b4c6b3009620ac48487a90ed3164c7f98f83069c14405531f263d4c5c3075c1f404d31da63c4c57b4a460faa2d586490c26305a78980031d1619aa25587c90c25314a6194c0287d69bdd122d472434905a51494c628a1a0c482520b4a3328c9a01483d219251894cc28bda05446c985962025354a695a55ad424a3528d1a08446c98b5217252e4a272899a0b445498b52094a5994b0285d51b2d222a365468b8b1618ad325a5fb4feb4bc68f56975d1daa2f5446b4f8b89d69c5613ad295a4eb4e2b4906845d162d3caa165a6f5420b865699d697960b2d312d145a605a675a615a29b44e6899d0da2283904a4835ad125a595a555a5a92f024e549b2931445d211496b92564852218986a41390c84042a325432a03e90b242f90fa2075818407690aa43a484e203d814407490fd21ba42290e22019817404d20c0988a3318eca38027444c6111a47818ed2383ae3e8cf119fa32f8eba38ea73e4451211474a1cc9394ae2688923218e72d081838e37497174b8315a43070d3ab0e8b8c1688f0e2174a0d1714587151d5974f4a06307a3318cc43032c3e88f11193ad61861619485911ea32f74f8605485111ba31c8cda18e9607483110c4631189d315a632483d10c46668c70c8e1270718493de468224716ab311aa00e0d911e223c3988f862c801a7ab81888a1c457430686574317c33e4981161419487c88aee4cf7c2d09f4f06a22a3a1b7220010a1ae2026990c743a84348c4f605898d8dcbd665f312b60981200a430403d19e1c468455847872bce96e20da026c8353037483684b919e231d884af8bc782584728af2708188ae7c7a86000da93174461215958a7008222fdb0b4429ecb821dc81a885ed86d04dd210442b108d0107693d886d8882c435c42a442abc339e190f866f8a4f0af14e4b07710d6b0dd1065620510d4b8d0e894e0eeb8da12586e40c2531a404cb8d8d8d2d10ab4ab42256a952ecf062e4876585e80d56151c5558b21d5c767469f281555592119aa01d27e090857b880a855c6864745274518074be33ab37566e20a0d525d462d5c68a506b85708bd5a0904f2b8b9697169721328e76a8775a6f92de782c843d10b9b09921124364064482080524338854406a8348860d06a217b6185a2a20a5d1e2033e31148626464885e6e7bb022681830a3805680794a2150618855d13ea21aa01a98a1d3f205d816487e8cb76e52324e5e4f8a2c3617be3e353a3f86af868f06cf0d40c8d914308b04ea746479b30cf87065482e543121c2330bc304374be2fde180f8c0e1ebc2f484a1065d9c020090a7fd8cab494601a83a80b12145d191d15dd14dd9d2e4fa7a7f3a2aba2ebd3e1e9ace87ee80675823a36aa9e232eb42d342d3c14bc162a1e26346a9ed6182d31bc324431ecd8a14251f7b496203ad382d3b5e974e888e876e87ab07f3a3717cfa522c7114844dc2a3a2d57080b468e385a218be6b321071d223044345c4220143bde6c3c6c6b6c6ab0bc60f5d9746059c1ba82a587b5879587b5058bcfd6c6e6c6366823b409daaab6424fdb0e2c32ac2b2c13585b582bb0bcb060609961bdc06281e502ab0cab051617161856092c145659b0c2b0b0b0c4b0546075618d619db0e262a5c58acf0a0b9616d6175616d619560aab16562eac58d8da6c3de8804187191d2fe828a3c3051d2de8604107191d2be85041470a3ac6e8404187181d617480d1f14587171d5d7470d171820e13746cf9a0e80a21f9213a01290caf4bab08cf05a4353a1aba193a193433b433760c115a219730a2c1084d92092d1e9082f05230aa81084be803d115564c98436706094eb7069317e21444652a16d5ce111b758aa42298b2e8c8e418c285a83ee42063ed1055dd3b0ec47783f5a24b93e4a65bc3e4e74321b45389006f68d9010979260cedb08901d5d82d2c0e200b5b16a4243c2e445c9258204a035a49ba82340492109e16efe3e901df8036d42186e0745a845158173c159290f05e189ae9880316f15901d98477bc8a4bc5b362a88d77021119eb4652178dcf37c6764184c6b9b06498d2b07d3e2a55087fe38909df301102c9d42d2c0a1e1622161c0d6f05ed0bed4d5215434770692005d2b248926359f027be2a1c1a5f0a476b843c24116a51613ac37ee16df1b280558aa4289a02acc2110478a556a1b9f12188b47857b4a0600a23a98d1d441c6d4164828605911aa4429e9724379c0af00d8fc2eb7c7692de48aa6a6901caf120c04244336c5590d4f0c82415b251483ad209d9840423bf482ff209d94572992299b000930b481f96c835218c4004502a20d9482124e041048a40e0011d1c69809105402920011b0071493b72ce8f260b0220000aa46c517cf259b2ac743da3a228e10012119444858004c92727084ea29020f18000317a6165540684264b46e040cbc805f6c0920e38791235a5240aca07519644897212c5410fa3163e40f2a4034ea09a34798280a90fa29a347982000a8c58086244a64913251f3469a204012b8430e50127514d54e0a8a80e20793285642a040f2c89024193510a1ca5c9122553512020898aea800fa331fca4034e9620090194a811a4902c11e1a79c447d20044a3a70231438ea03274f9c2051826489081ff58193270e987232c2930f3ef8252331203cf9200a841d4661384a08a298208912250451469c3c5912254a5404ac111806c112111e4a1413284f2870c41a7de1a82925202c69a2440a92a811a246788007204479c0034a3ca0c0c80b4761f24154081f74e128534ea2a04485e064891b7171b2a4032da313f88325519c2c81324542149210341141042548a04481d064c9082f261f3c69f252323281a324196d612548948cb4f00790289952028292a9a8060c19952082254d942c995ae264490ea32ccce483274d3880246a6a840fa248882232c2c2509e200034bac251a2964c2d81f22484a91194e030b2c24e9e2c995202650410904c3d691205c912115e0994113e07cba8261c5032e564840e2099fa200aca12109c2c418204c9b91cb6364c6cb1e639f6f14c267b199b48da26c5268514416eb4b56d776bb55ab799d2c94c6b73fdba72ad9556eab529a5b5d63aeb9c3da6e4cab567d35a99a5ac952b4b596ba54c65adbdb1644a6977af9af2e498bb6eb576add4e36653ae9b22c77dabc935e9a3f4d3666b1da555e324d3eead29e5ae94997b1a590057aeb26bd38deb2665add5db6a5d71ccccdc21d795d649b923e64ac35e6adab356ba35a5b3b68f5abbe9ec9e4ce79cdc7157a69425cbcab269334b28daa369d39ecc3d9999bb69e59e92b967f7a4b5d639b9b9fab8d9899ca6699472dd95ce6e36d76d5266d994725d5bee6eb1721cd7dacd9472a574ce2ae54627ad739b54d64a694f4a7b76735d65ae95b97b72ad0c824c6b55004b5a996bad2be61e6a5a290749495c3353aeb76e52da71731d6f3c9bd5719416a1dddc1ae5a16626c25ed3e666aeb9e6a80fe6d975cc1ce5e6ecd56aae567376d77573dc9c1c37394ab9cabc6d94d6c9d55a7bd5ad3aaefbdb66524fa65c731c4727e55876b3945276cf9ecc534ae69a39ee9bab1d93eb49b76e8e4eb159239294cec9511e47455c4f59abe4ba9b73524e009db267d39eb47bf25118ce150264edbaae63b138aee3b849a9eceeaa647577d75dd7edabb252ae762177b737dd6633d3d9944eee9a39295f1409090969e38d3362ee5efabeff98999959e3902957a3a63d2995cc61184ae66e1c3cc2f9141a49d69a354a99bb63d6d106cc9da4b3b26a53e68f997b7077d7969293956bad95a39443d6e00074d249e547bf6e1e94f6eda673f616f60c299592992b737377d72c6e2a2537addcb47677e56d6eb46bcb75576616eb64aecc35ed6aad95e9ac1918a02947bbe9b651ee6d72f79cccbdf547bbbb6e937273dbe6b445454545a2c8949b4c7b36b7e4e6dadd6187cdcc4328b37737d7ee6eda949b32f7e4ae9552dacd54b6ec5a6b77ad5dbb7637334fe6ba6ada3b7a450b403f26666eae94007476d75aabec6e4ae9eca6dd3de76c6e721dc7cd2aa4525a75701ca594d6ba715b6d96130030d0c19a3a2e00808e29a5acdbb6b12aad75ab750002a816485025901b959b646d5cad74d5b53657a994b4d6de6a5d05e1e8e4689d1ba595b96a95ce39bb49e7a4ccd5da85b5366ddadddd5acfadd2aeccccd5dad78c7bc6c4c11d02284f3e10f501cd630ba2a44435414282920fec30620b3cf0a409120f3859e2010f3c698284c387488802c1c912244e962809e1830e74e0c9ad008428285120407982c4090301442d813235c1009a3459c22448007c0071fd70e5f891c30705134c100407084d9684f00192a9262328e94014084d17382d91f00404534c4e1808c0890460011201443151d28403483ce0644908519484e002e0d134a5044a9493280f4091006401444589120545840f3cf900099428294f3e888282444914103e8842620113270c0420c20751518430756049012cc0000301801085e4c994082180f2010f284aa6a2f8c01105698905f0e4099424261f28e14093264fa04ce0521205252904514c904c9110e58449692aca03484451a6a22c21214a9bfa404914274aa04c21995af2810f3c71e560012ce940141411ee101425514d3e68e100c149940822284112e50125509e4c45916cc10798382a0a4a0790407932a5e483274d9a2851620ba23eb064cac908502e013a3035c29214275173882d40e2e4c9922850a2a42021212a0424534e96401101c90751967c00c91409514a529c444d17e845f346553b2ac94962d28bd1189d5454b1d8c654541c8bc5382aaa30494c76311615159d9d84a9689298a4a26aaa992426a9629d844ac6a8a86612a68ac566929884c568128e69545431fa2561aa58972426633199848a8a8a2a569330151515552ca62589c999844a525175128e7949988aaa93c424954cc254924b1293b12d095351c5623409958c494ec2312d5693c4242789c958ac67128ec562319a8463b14e129331998463320903681b9299e507a228e1285cf9e99e36fbea8909f4d33d317d3ece80a4a0e6a0d3f0c874cf69a88011c497d24e89bff9e775584406790b9e43cfeb187bc9790d8f783eca6722dde3bc76397ade3e6b48446a0c8f4c97b786443eff34c9bd92925532f4ce436f3b5576b56badd567e71ad0c0cfcaff38e4c073240f5b28a0f9e95e2b4461cc4fe740d041ae4b2a12862b50ca2516abc5e450628b6929946dc270290cedd2aa864bde2dad58385aada5bed36a11d1961b798b25825216ed988276b45a361c9aadd07578e85f685b6bdaa9e5d53f11079324f73cc8e3088b24b9e7353432ddf38f08ec069794c2100a14c8e4a0e8502ce71c64021d14ef28c50aedd295a2fa964b3b82a095afd46af9532f597e9048cba792e507bf7e2dafadd08f3c9456b345a473fe3491ec283f29f4248b8464f98f74d84aa65dd58dec0cd4aeea9d0dad1d613f6447d813d911b6b2236c0a9a82be7a25d34e7de7abcf40edd479f54f033dcbff7dde6d414d67e2d437e75001da9a760abdfa1786a177e8d2ae507083821c14eea0d0078540fc795afce5a0bbe717e61ef835f4ef03c3d09ffa03b7ce57def9cab537edb4f2eadf6ab55a791e4b044128509ef739e79ee73977c70fb4acb196f12cbff8acd52a74e9e1956bda55dddd7a244ca172bf7eafccdd5a6bf92539aff53c9b41f15f8356b2d1fcaba094fed45e788443223cebb2e69b5e5eed4dbbaa77d880eebd3b82a035702b4322a05391f0d2dd4acfe22f983b156c86317f642febb2b9678c31b297df2b59fce5cedd917eae49c977ce399453dace3d3bfdb32309df39870d707de74fed79768eb5cc57d7deb49d7655af23f855b6f95abdedc83655baf95af4d54577feea728d57075b03f74a430facbbcfd00377d875bfd6b5d9330faa196bb58f31c6a39fec5ce6fc740a3e07b1dfa6a8cf3b428d30285238d7ee1475cd47fa23d5d79104a91dcf3987476ab3061aacf34ae1ee66ab33bb3c23b5a39e6917cf78f8e93dc322ae323ec800608c04607a70e1a1e5fe7479c5fe7429f39f0edbf1d34960fae9534b3f5d04a59fdea4f5d34348fae92020fdf424473f3d033a7e7a058c7eba07397e7a07453f9d01387eba02887e7a02867efa93f8d33360fd7402ac7efa05e14f0f02fef41fdf4f77793fbd47f7d39dfbe94adb4f3fd27e7a51fde922fde9e0fce95c91fe795b46e4b7cb6fa73c7be93c43287fe95f75cd72756d9cdad83ebdb2db191a7149a92f9d43235dd5c736c99d5192f43c9b9179a50638cba79f76525252529a4a4c4afe4d5049c99f5a14999898fc93a0689998bc43224c2cbb62d91521efcc534f72764e1a60937b7efa942b5ff2efcb9f9f9e64c7fe96330f09f22c4fe201466c79901f65cb9f9a798805dffe7960120f30a2e6417eece7dc0b8db47cec0fe5b77f1c1629c03303e162ed9a1d8bc45eb3b197b6e52c3b2679fbe78547fa35e79c03ed7237f6d27276942e3d74d6fcc369958b7440173aa0ba0682219195b32cbf68f93f8e505df2a5a5a5a5bab4c3772cf9d2d28ea525255fb9d26af54934497694dff2c9e42b671a83bc928f2d6fd7c222d35bf2957c7584b4b49a7f9656abd5ca2ef5eab68ce8f025d7e14b632f2125e1f856df5205b35a5afa9696ec072ef9d26d1939f2cf8ffcf34fc942a1afe449ad22cd0dcb396c807ccdfb909ce548cef28f653f57b2dc7f5e8e952f4589fd6acb237f6965f943229f11f99a3fb592e597deb56c923fcd24cb8f64b73beda27e64b536eda2aec3562e7684bd6747d88f9a1b181b39cb8d2e27a85dd459579e6917cd619388f3c72dcf96e7a973828a6c12b17fd4dc686e9efa76a79d2a171c3689287fac609ebad6a69d584efd9b7eda6968c8f33c34e2e33d3fede439fdba7b8ee71d12f1bce5b49374511445e7f0a945ff5803dd9ce028d1bce8332422bab4fc43965f86479a5ebc2da75dd4bfae939dd3ced9fa177b4ddaa7fefce30c8079f3409e6760b85c7921cf333074c2d079a7e7599831610485d9a3e6979e6762b4bc983baff43c1313c47f44e0e61f7f1fc8217747d8732eed28be746bb5f8cb82d25e98752aefc58d01c7f9f781d6f24b5aea1a273bff40b0eb14503fcdb6a4f3c7be658473cd39e0e69fa72e5d937784bdf4d8cb9088b453fdd2b7f048d3e72cff9c752b97767d4efddb42233efe0bfd6b508650d239972194e63274a95d6e97bc53fda08f1ca190c8ca3f0e5977a47a966b76e45e7369430b052a74cea1883c746e27ee8e50a0381f7228d1390fefa839d1e57685ceed34744729f9a17377e476692eb22c78a5a8341b5afe959592ff7d1e5a7ef0fb3c34e2faefb68c78deb977a79f7651ef3c69e4083d75af4c3b75579e49c280a83906308001513e93cdf9a96f494944269cf38ff34fcf494a224aa7dc959b1d41fc29f1b59b468bbf60ede6cc1331c85e54d40f9c16e2bca68400167bf5f01282bcb20479b1915eb9b4d3fcd34ef2cb3cff38017dcf79ea4d87c7f4c3a3e7b4063c4689e6a94b35b7e55c89a635b84e3d890718519279fe917beab49d5a9aa7d1e22febdcd2ae07a2f57ef9d4b935b04e5dda235981f46a93f887f41a420dfd741a7a70ddfa0c3d70eb1d76c0e38ab349ba0c3bb8979b4dd239ecc05e9e4dd23d1a5bea00089267daa9f379798411e599a7ce9cf4cee5ed5c5ace934f73f27b9f043d5bc169579e6c079d4322de4d23b6a639c7b9e7711d1e71bd27ddb3a06b76d334f76cbd9ae71fe85ce89e4fcb39683f7f9adce7b463ff2c7f589d7d654739d5dfd53ffe189436f4ceb68c4cef7c761ab09ba4ce77acfeb9bc69449fb6fac7217847d8839e68b5f84b746e0dc40ba3623937069ec3b831982e1e71fd537b965ddacf41db2e5a7eb12c1bd03f69c33bd2970e5aceb3352ca2b9f4693dff2ce74fd3e39cfad3ecf8db4ef5cbafde2191ea9a1da7bafa53571e604479e6f9e599671e541d035b33a18699ab9d3210858d6cb2d85bb3f6a2e559b63dcfbafc79e619dde3491b10fb79d6e5ceb38b5f6fde76a49bd5e2af0ddcb60bdb9caa023c7164af6de397e234e0fa4f82f2cc38d53f8df8f8e969387feab61c12a9332deffa097bea6d39abc55f1cc869f197e6da1da906dc85714eb53937064d093df5afc1b6ec9ce5178747e6b7d32b35abaaaaaa7eb3dc188c3c8b81cc4ff5f79976e279a4e9e79567fa4a6d541dabad95f1717fdcdfc7606c26f1c74a449e7109e2ebf3ec843ccf43df74ee31b29d6fffa695d13bc69efab4a39c763a88488076625792726648443c6aa731489076ea6f27400b71994c267bb53fb5107fb52ba09d18c043e6b394c437df5ed44ef25bacc598e4392cc27b9efd9b206d43c18aa6825a4884cc066a19b4107e9dc04593b572f358b1b378085f6620d3fbd276f10ae218e4a90900e8db8304faf60bda49cacfe0d94eed7347d2cb5dee3141f039406c17eb931410395c40ec29bd522640089e084032e530b737c8de210362cf84af14d5b38fed922fb78ba51126dc799e99e0869aa0e527fd64c880d873bb46fab1d7ee374322b541adbaa51cc8d7b8766a1591afb976f9a5572b9f7bd0cb446c349f039848cb030529b9c8c714009ffec7ea3b9d56ad7d7aab48fbf4a9b9acce646aceb553bf06fe533f754c4a39e7630a881fcb843e94013179b97651a7feb1182045f594e5d3cb818f7bce39bd9dd239e98cfa38d07edc630cf2d3bf3b722fa574e9ec5bf81011fb47a59f5bec28f568a7f1c78f76a23edddb290c7f74fd14c2dd4429e5da89493bd72ee9d2b985d06e9ace4eefc83dcf216e17fb489fdb89675bd43c3b65e75a08bfd839ec22edd4e9f4204d84963725002ac18fa4f2c922a411a29422ca1644295910a53f35fff8a40ae2ea7956029d97ceab354f5d13c27264b217bbec3f67ff58b49d3467b7f2ec1ff390957f5f0cf495650602def193eae7e0bb63ffe7d2413b523d287f3546a1facfa97bce3ca4f3150359ddf1f3e9a1779619487847d027bfb4525b555555a1a70eda3156443ef5a7fe2cbf6799d02b45bee650fd9acfd008f5be63ecdbf93f97768645345ff9675b502f430e40670622fd693e3568a564d573beb2ad9083cdbb3bcaefdcb3a37ccf3fcd8ef2350f9d8647a883fed41f6740e459096f9ebae61f7f0d72c841e8df1de97fb3a570bff2d59521147dcdbf8fc3d51d63bf72d04ae11ef4cf8ef23f671e02de11f426439e19c8e79f3fcdcf4eff24f8d9e91caeaed47ccd89681eda5133425d9323abf29fe7ec32e440563d7899818cdf959255ff79750e15c0ff5de61f9d4fcff27756ba8c8154dfecd8defed4b14e6a553e9f42b0b0dc9d37c762e49a0369c782e42b0fc0742c5ba41f7905ce530816a40b23f299e45876f8e7ecdc14822508161d8ee4ec47530816a30b337216cb91869c65ddc861461736d4c3911c66e4a0b31ccbbc308e73f1c244dfa6c3e68571778b7418e74c3ee4a1b38b530816efc23ceff60fe9c2ae6f3cdc87f7e6480e6b47bab05a5dbc30cf458721f9e758a8275d585191135dd8f4eec23ab79fc3ac7f1736a7c33e6f390e5174f0c26a75efc2e6852db9e7e274d161a08b17567138ac7a934be030d125b8b0a222cf7161397cdb9ce9c28a983cc796c32570d8e6125c185337991cd6f5b85b5c382e0c87e7c8e12d1c39725ce7e179ceb4e4799fd7d91c48464353dcbaf38c26f7e5a82c5bc1e6908658cdd94d9ca2b7e5f82a688464c459d650f5ba6e7ee2966308148d3a1069686bae3d96ad3966cd8134391f13885fb3ece7140c49e0f9f08103e99b5d5393c3da9b9a3a23a3eb2e91731738c1040ef37c8209ecb6b1fc7a13e8795375b91c66dde5c3c5b172887e7d02a4219fc02970989153d0d4e4b0cf9b2468720a1cd6551f3e3eebd75d3587bbda870f1f13386cf3092ecc878fa1e9144820c192c3405feafc7a13932ff130a2c09b1c86e44d2e17005c820b73390f09bcc9619ef37098787b380e1c8de4d77d2c2d390f26266ff9120f5f72d8902f71eec37f388ce53f641025a7c0612ca740f6701e14f80f8719390f8771dee45252baaed4e44a0eb3ae241df6b9924bd06a390fa60b5bbab025e7e12d266f390cf49674587509dce530d15d12003e1cb6b98f0b03800fbf17060067627297c3a65f8775fee3c22698c07b5c58ebc25a8e03872b5d585292b72e4cc971e0f096c37278ebc2925a9ee430f03e7193f41e4e010f90c8972e2ce9c2927cc941d0afc33cbf1746c4c3afc3be2b02374927720a1ce65d12b8493a051736c1dd229b3e97e0c23ccf8b2eacc83f09fc7358772bf05d98f7b9d285790e760e3accde0eb849ba92c3725c05709374d785f9c8e100b8b07b61d725b0dee3c278b8df0b6331ae0ca253f5421a62b4bc6c14258c81a20d335ac012c50b8bf527a4cb7193747b617edde8323749df717936b1332d21b9d285b58e3ce9c26244f430869d3c35dc5087881752cc852a568489a367501e185e480e1bba47dc241de9c28e2ecfa60aeee87a7618eb8adc245dc7e56613bb91c3e60d819ba41b5d588ebb45beb00c79d185b11cc7dd12e485653ad1850dad9c7561311ad2bc9186064181c838e335f90a403dcc10c605417106bdb04c67394cbc04e026e9ac0b5b5d9e4d01b823019e1db6dd20dc243dbc47b3891dd637093749072fecbb5b5c2f2c9a7b179601106fcad021d01480707875778bbfb0ec80b3860f475891a58d315e58da378771d7c54dd2b70bd32ecf2620770cf2ecb07a9d9ba4d32bce2676f6d8a46a6a20559fbce18bda258fda2571f82229fa4a0c445e6e97b492037e2959f5ec1c860ca42dc840daa73df323fd66e1a9449e65993d7b7d9e6519f323c843a6b787337c9e6569c3657cd429ab91f345ede24bdbd5cea194acfa6a3906d21efbe96c47f9ecb28ac8331919fa1c0fa9dedef110fef66a791b02dbc5ed1a8f7e4643145fd42ee9d4ca674ba59c65b9f2a7bb7bbe99d3e7f439e774da6366000b991fb9fef93cc3227b6fa776da63fce18de40a98e799953e3fb27e3a05cf332b41fcc7e21eb49d623fb61b61226fcb087de9f4a5932093c964df943a875023094f9d5e2926d2f9c7eda58b57248b6bdb3ea70c1f6bfa9c73ce39794e8d634b25f20c073e5f9d6a9ae540dbbc6960b1582b0f1df4cf592c168bb5e7fb3ecf3be77cf3effbbe4f8a8f99999925f7063290cda5a51235af23f7dbe6200f69df3ce421fc9bb7edb1f1e4f6209f94fa524e5f4a94d23f8ad27130d2575dbb23c8ed511519b9b7f57311bcffae136fa47aea3db637916b7cbd4ebc767a47cf39ef3d1cec7c7dcf3f0ab6f6dee5768df4b53a436f825eadb765055a77deb665059a7f536addfeb5119e7ddff109e46da83acf9e6738807986f37d69bb34ade3b69fbed9b109f8b55622b493f5cb07b539a5d46ed4b7ce3bef9088c64991bf51bbf9d7ed0c8499348073cdbb4b394aed485d76fe71524aea9c94523a47db3929a573dd35d75cbb6ccd52966dd1b62dead42ae06973f93528694bc92a2853e04b6df05204a824cf71ec9b1d39ffa8cfee4291624032d94f113de7734e81cf1d11c1b350a436f86620d4a7b4f73a0bc5f329cd0892ef7c87d4062f1908a5dd65fe413d2c525dbbd4729c9560bb84422fc7c92dd0acfe4dff6458ad94f3faa67f5fec3939b673d3cede7cf69582b14fcb3f2d959a727329a5cd3fae5d9c735864a3eddab6cbede2eeb4e37429e237a1322a3f722eb511a252f552b88e09f5f6cfb7cb5970e4b8bbf9c8b91477a50a95872265fb28b1dffc696e5673cef2b31d35ef4a49424fa7faa9b7a0e48c48bb66e5e69ab795d29cf757e7a4c62937eb1bbbb44ce4ddec6cee8ed2d937879a3f46897d117e7a99cccb84bdd9a5a7f1152989ede43f9f9d9dda15e48d6f8ad8e10d7ede817cd2b9c7284e11572c1ec2e7a580ab0e8f50990c4a94bd5ce3634171ce3977ecdc3977ee39b3f5acd87152e4739cbcfe495073d093ff791ee43b9792f3cf0335cd08e7df65752e43898238fd76f7e3ecc879e7de1d63ef49effc69f6f7791dc7bdf4ce6e1aff68af947f7411fab2b3b3f947fbb880d8112ff947fb0262473cf38ff6cee3ce4a31e28412dbf26f16c86b56a95dccd9b1baf4cdb6e49592af5d253932d953f0da11604e109954f7f163e5e78fe22150827c1af6187fe1d299af76af6401f2d25c0b8e1797762a7aea4dbe7a901f8b7e642f1ec0af2b9a4b2de228b978f1d461ece26c52a30c103000d1868f4cf6d25c7e9a8ce2e065862a3214f1ba9205c84bba161c2ff62b59fab5b9160d5ed235ab4583178c8d07d2611dcc26ead20e8c8d079b6b17f6349ba86f17c6c603cde585f96ca2aedd203c9b6633e923dbe1354a60220d1956dcb085143c5210f9154b814e1166ccc0c9c3431a2f7eb18f413c7099ec25b9b4938fa760ba690c9f34419c4d46df9011caa34e29d54f975d3c1d35eadb75a2dd51f3267307405fafe6e3bc9a4f5be7cb6bd547aa1fa5cfea4d62657e73c275c07cf55104af6dd709f7f9aa3939c095d9d76b478d1115e0897347126ec873c39b4f0363a76255555595797569644b5d681873068a04677498239b1281fb7c1a590578e2c8a41ce0ca8c0419d701f3621f45f0b50af7797557c67d5eec23eceb1da54fae60e4999a403f253f8dcc288b1dac842193bdf8c2d8a99c9889410f154232d98bbbb22b2375398ac04eedf40e2750011e38551318da228b1a0a59a9aa7a153d1b29633b1d78508176da78cf53ff640fd78f204fddb5d9d1bdc766997a056405d43d6817f50e3a98429ced20613bfe813834329fa73efacf9eab31c66d22481282082448594de3ab556c27ced99d876c50d4ab7fd57ed539e4a03af52a53d0fc93cd1f053924c275486c97f4ceb53bc6be16d96a4769a5c81fa5c8a7d4bf66c94d57d563227dfafca69e7e9a6d41719fffbed6c721d4e6e7bfcbb282b1bf6a9c6665f35cb1aca0faa4b609f8d49f3a0551fa51bbd88bdac59a6b9789e6d3f9f9c5760af2ec9d0df2ee1569ee71cea114f74a0c446c17fb669d81f0e54be91d419116faaa738f910394451cb9d9ac9d36a7cec9716e4e3b714e7de4e83cf56ff6123ccfd0b0f0df4453abf58048a773cec999b58bfac831a03a77b9393200dc6c0ae1c0741375cacd400e88d5b91907a65dd4a3c47a5b502d93fd742a99ec99dc31c74ba176c018e1378ef87a9b546f2980bf725e7feacb4803f0532e2432bdff9b600a14dcecc88179ca819106e8a7ce8d11f3d43932ed349ffa2767cbb96adb6a4fa3658357e7f2ab95bfd9567bab3acfb8cc69d51b017e75ce3334619e6768c03cd4fceaf3eba512838754a7ced999423ea7cee59942e48b3ac7670a593975ce8f3400e7d43fcd5bd54140e741e0c4af6cabba7cf5ebb3ad7a1fc07916f9fadce5abda0e40e7ec0882275e73fadf6cc993aec6d8b73af0bcb539fdf9ad0784deda6e07e1b5c255823aa7df2fffa9e783d68a7c7db7a55d2956d5a7d172c1ab732bac42af2cf2d5f9154e269379d7ca565555d5cfa112e9b2b34548e7003df3a0d262b5372d3ee99f8c4989c1c72eab4c4a6d7529b75a359fbed55a3fcd2ac91d68cf509d129192554f5dbb4a945af9b47b8a4f3ac743e44583e78bda359de321d3b98dfc18485f6e1737a5dc61b27f75cae993f3a9f9d47c3a01386dfad47ccee955a95d5ae740abe53aa4b9d4bc455d7e7f8bb2d1bc6e57a95ddaa51c0361f9d4b6145f3be521cd924e7988bc52b2aa2b03e1584b69e5e3ea948768ce5e7988bca05d55cd079923380504955a88e7d533e021ce4038affea39dc476719d7713e73d5a08d74ddcd8025b485137715e676aaefc78c1576ff110f9d53babd42ece270d4fed9c4f07f49cb74b9721e7adadb56dce3335679e676a66f8a27671ae59f9dd556a17b7d9ca40d839a40c84e5b38cd59e6c3ef9df274322de6643affe7db648ec47d0bdcd797376d08e9b4f35659e3290b0886d0fede69d95dfce711e4aee8e1c67fb73f94dee9b20671bbc9f7f13640b3a871c78a07b1f0539dbce21075f08762e432912ae54a1227ba911046ebc51f551d88e9a31263c7b94d87777043f7024e1bf06847724e13f07f9825ec322debbe74f938980978957c473be52b01fe77bff5d269cb78f1ce79d3fcda78e7d9222f1f194483d8ad83f06f99a26d08f475f09d04ed52f6827a6af197c75d16badce3327df2832e3f8b816e100e81bce154aedb8023af03bbfb957dfb8eabf691e459c3f12e0b734657ee43cbf1d3db5d3c82960f3cd3368272639bf39b7d38e1f990eb7abfa532b7d6db73e928bdffa8fda896735f069c97325b6d3f4cd8bda89fab639d84eed9b738fed3261405d887935a3edeae00a96295960b10306cb1259f479f16cc2f251f080021d3f83d880f3e2d9d4ce3d04b68b5e974b3a4f21dc4da3f8decf331a043d0547b13a6d0f22effc047f74652064be46f0a5e5781bd22ed8ae7ac1e7190d7f9edea276499e3df38855d9823e56a2221629f110f9ed200d84befd0807191a426344daaea128a29c3339a69f6ee4936ec4d6e179f666876f189e67438879d7f34c883850535600fd187ba3fd384218259e9d25dd8833cef3ec07d94b39cf33376ffec7f3ac873e32e4c07b82cf4b2579760e3c40665e8a6af5e31417591cc1f0e3941a183e2e7e9c3a818bfa63143d3e5030849d1fa30461e7d939992c84a232d973d5b3cbff58fedc2990f98ae7a57f2c29f9d43f6a2bbda394a191e97dc738749e16a12ebf5adb3252f13cf58ae7c728b1a75e5d8aabaaaaec18fbae748ed0f2f6ed573cdf76c7cb9003ff766aa5e49077aa8df8b7cfafa564559db705257d3a07d2e79dfa1ece9c9feaaf776c97227f7aeced4f6bbfa7be678f55d96c7c43a4ec3d1e32c47b766603b0ac803a8b87f01b423429b5a723ee3010ea217d36c0d311527005fcf48e7d47aa97d2ef0128f2a577459ef88120cf8e50f352ac97c269d200fc73ec1f351144e99f0c9f882db94ecb912111292a93311f1a44dda3f5616900e967cfb3b7f4a401a8ecd9bf0d9c6111deb3711cc769cd7153721c575d2be9da9d1510dff38c86355fa4f4f11452002d3f64b15268893704bd40b89284151bca9cf1060e2f76da2e49fb08f5a7d6eee8af39c77588b6eb8e53f3a5775ed44edff66d9e77c70d6ca7cda78bede4f9f46fb3f23f1972b0f4b45d9d6f53f33dff64b39c2bc9ff597e573bfd18955efa74a5769277d4bcfaf46f4aa959fece721b4cd59745df24d8917be6b80ed1b047bba66feeedda6e3bb5a37c29c9aed9a92943227ceb15dbd56091bf523bf94fffc143e6cf1eefc93a03b390397952672b853e3bb550e2b3cfc9ce781a0329abe34b44e9231d45b19da301cdb783454b9e7af6938fdba9baa5effaea3ddefc7d9ecdd0c20c33d041239b20b5a3e6ed346cc0f4be745e26a253325f9982d43269a75ec306f47cb16854fa7a994c6f1f7d769d61851f95befa573ffa3650da7e0ea93f354f1fc5af5e1d9406e0af3eaf940668280a65c13303913e73f82675bef3dd003932f4f9f6e93cc4f3ce69c880ead46978a47d3ab541de9bee496f7ae0f47c820e4ef73c9f9f95ee8dd3a56be00c8df49dc2b9a665912fcea764912f4df3299a6f5e01cea77015e07c732ae70a9fcc7b557e3e3f5d7a9fc334cfb2399b30063bac0e88d53dd79c3acb875cde21d7ac15ce35af96ca7b55671eb2b976a9bc97e62cee404be7b55af9ea2c1ba90d7e8c7d0c33ebc4fbcf410be5fdb7f21916914e04fa689934f91cf4d01bb44e3e0ffd6912d931f643d2592c172de81c32405ed61d41fc91ca64d257fed41f4b8631007afb3c3bc3860c68bec7f34c06990c6e5aab30dc420efc6ceb5bd9d617d6300c8d841ec398d742235e07dab5c25d58ece5dd2c9bcb574da36503efe74f5f2f4cabbe75daa5aad70a4b731815e7dad5e22fcdb5f8abbb54dcd5e2af7ab368d9e08525f6aa5e7dd3fabb4c2410abdefa2895c8c14412ea6d7d5eab4b795b5fbdb1333fab73d841bd3c9b382aadb92c3e2641e419973fdfb31aec3c3f071aa09dba9d7ab29caa022f7102a153151d857e7484e4a116fa516841ff1aa4b273f68f5690bf0e2b009bf26a79d02ff10253921cf429a227b90c3d4872f0c2562e56fb7d32bcc0ca7338cb4e5939cb872c6ce5432e5ad8ca45e7f002381cc99f3a8785b17c878316b67230f69f7bfe3558ad7cd10e79e83016d285891eeeb05360b0d045bfde2f223b050603f9c5b230983b930fd929d6a7b84f617218d5142527f21c0e3b729891c38a5cbcb095072b1f720e2b203a8e0b8bbd58fed44916265fac5bed0556d587ee14d187cce479a4e7991940ff714864f36a9d785f7db350ded7323f5dc2c0650339bc00920f3968435fd92948bef22dbc008ea10b5b790e671e720118e83b1cb67222e7d0031c1e5e1892832bcb2f223b05741cbec34ec1e1489ec34e81818ee49b1d635fc30a808ee34e091d87d7d003245ff99185858ee3524dd1e13b3c74cd5e00c957770ae82cff38ac0078ade070d05997ca7b0d7968a9bc97c83ca4de31c8a7d1b272f052792fd0db872ccb451bca57871c48e79c8613102f0cf4f06659391bed3269527d73cd879c79c877c720bfb97747e9edd39fda49754d5ac1e14317265fad3be55e5892c3867c87779673d05ac1e13b5c87851db90edf03c39affa4d6e5cc731d305a9733af797dfa66e63c47f11204713ca25dca702104c31f18089de172a6cc993567de8060b52dee1ae95e73f9de6f7e9efb6c7e5ef3f9fd1c42719f035c99512ed8c85ef3edb5ff5660b5adea9c6dd50bf59a77cf3d875015e08923fb10ea005766afd501b3f21d17265f307b77880ef31d4ce2a552f2d0972e95129bcd45cf21e6a50f592dfe1af296d5e22fd059968ae5393ce952819e63e852b19ce5a1e3b0b0d80be966595d36521b3c9391650523cfc68079e9d5f9e5ebc86af1178c835961c1b4f88b0af4d071b80e0b33ba5420e8391c4645e439ae167fadbce86af1178e4b4574b5f80bbc5986ae950d5e430e7a78adb0469e8dd1f2f24ed197de8547388a97f703629d1f6b9a36df84edbcc7ce3c0782be72ea3c8538f52d9cc0ca592e4e215658beba5a862e1bcd632feadaad97c97625107b89fd5a39a512399894c94412782693dd56f59567f1d7ca351f4578edb6eacaa58f497e0a61dd29a1834e9d930690d7bf70023baa5eabd0419fa107a0af2e6ce5e02a04a974c4b8168108329819c3842ae07421c60d951fb87c79230c0f40482b720b156f8a40830e95417d2a10431270cc98714315963870005520ab6cdbb65519360fc91a4d8881c2123ac80825608c4127544d9127061c3849854b632b80a85119fa42f685962fc050e65384c16cc38eb84513b5282420ca9c9214ada623aab5d65aeb9f2142493bcc9913ac2146174db030a88f0968b8f002202f60c820c5981f66de0f4df0903220c8d037b21c1abcc943a78d78a441c147cd8a8d1a26e668454a45474a79ce281562c2e056b1c28a4345d037e34c59121f1513363b55dc5a9bbda1c56b5da8915f14b5d6ca67d6f19923825cadb55e50b94160187dad72e1cc0a27d45a3570ba65d6b1e2311b5f5ce9e3851b6bc4b14301212f8840a186237ec0a28d405c1b84b84262301846a43106a02d6ed294800136a890c327100e6d5e78230623adc32301793c041184a02100cd188298010b511ff00621d0bcc1c68e952d53dce04612566608038a2fb2bc34991d42f4db9ee8c8ba4ed3ac0071641122b16d05b84869f85ca1a38550a13545f00953488f1755c0a0a2882c67b8b16ddb36069dfa34c69d5adb60c16b63062604b54107edf9d84c267604c00e1534a81933c31837384025893588a8e104356e88b001501b6a7094213341d334ed7546d02b069918470632bc3486363c03586ac18626a800a443156a4630051870c208ca82e58e3848d3344dd3b42ece0e150d3f19705f9b06b939b3a981a05a8b94a8689aa6694f4c9ce93a1b5c8013080926b0e081028aa127f810bd71e60b387f76d003e80941fc2710d20d7994f0b30a033c40d1d1126d5adceed809c103507186761ac4d1f204b7f14329771acc59ef747738273c67de0a30475c0b52101157ce9420c4164b98a1031635a871050a2a73d830c34bd4d003183e90c1041366f01473f4f031c3882cd658b3c65421cf347a02872c4354f1859d2fa838c28d2d69d238a3439d1c8480e28f1a52fbb36ddb06839f5ae1a881059c7166a8321b0d9920408d070dd145106fc478018839d786312c2401c6202ca6786db48a4ed2073ac3e8b702bca050810c1762ac810344ac8d9d1dae18438e102ca45045e6ab9ac14b638c9a678b37b5562e438d2e74a8c2091d702822e6260a4074c80082428925aae650387cf2ec40c36917ae9231b10307665046d334edb500c3d12774d2d07002186a445147db82cc6b70b67861c7d5b2440a512c01e88b225eda195f0ccb1068c4f8a2860c1accc022873e6b9ab8c1063332146af31a2022357ee61531b6d0628715d68c49d3a4d01f1fb43061cb0f6cbce143e1bce9634611732aa7cd992f459e5aeb50a069ce54bcbce654a3d33c3c177c96900328f351400e1870b4e0018d365654608597146af892c60d74926833411969dc0377bafca1820b3536a8d183196bc2cc79a3ce0a5b5c71c99042b8577d5a6bad54bed1344dd3a8bc795191c3c4187d03193d5f9dd65a955439a30d152baa9440c102266c81850b6d00e1468638367cd19dd9fe34897fe664e1a64a17308a5042d01073ea2021e78f115d8c6103fd6aadf575822090d3a0d65a8b28971cb123eab811268929bed0e10c1d4084e1849f22d2d8e20d98d73431d46c6484f0d369f04380919c531582362c60b0cc34423ed8f13e0540311eb880b1218729d89411080c198e822e7240238941587e60e115061c9a8406dbb6714e2f585ec30a2ed47ca1d2660714b6e0d0470d2f39f830c6a0384abce1f2630318368841818525cae8e132f6b040430c5ce8a9ea0386e6bda6699ac6c66c3631a769db05b5e2f85a6baddba3c0c39e144e708387405ec31183de0001c68b365eb5d6fa05172b640146193e787993420c8c183764e860b185154fccdcb8423d2ff4dc24298029b44707316a30c38c34c450a14687362b1c81c49c1e7dc22040ee5b0187af0e56ae562d0cf00043276031c6cf0d65acc04187291c54e032c60a17dc5cd105ed4d84e3f48ff862ce7462952e2e44f145081d8cd0d478638d2f5ee052a606335e9a1c2e2ae0428da669daeb86391c05330419366ec28479a3063855d2c4c1e189d7b43b7ab630e30da13676c0e2a56d01c60b4b10e0ac58cad020ce952d58662b1f8ea40e7e280a43ac51841c1caa00638631f42041a60438568e38638538dc0a4df0f901cc242288ea4387c41d244424e81c75d9f2db061e40883644b28889220fa03b29d470866c4e0967bcb146883c70bce0d069f14db439e2defcd0860e5e100263f683130170024d0a5d7cf963e64a1631fcd03826626bb0a091a5882d60c05042cc8b9c36b4c8c172a70b3f58744f4da88162862f427ce181cd173775500061f87a5cc16282171b4ca062ce6bcf1368ac3498312202a900a6109e2cb24843042904a52964258c405e5e9bf64417a42bbe961510a883861279aa6ce922852a33ecec61c28b37e49041e9f469595145c7a6dba2cd38555f661ca76168df2ce6c5ce9b366bde08030b1582e811620d0f3cf409c38c0f308ca1674d7f5138f963e7043745e83043a0980a5ba00024061880d270237bd3e551a3a591270d3e3485d9d442246afd669585382dbc2904270d12258c50820b60bc40424c0e3b1432630e82020fddb66ddb36a7626835c8342d83d945ec4a18347252f0410713a87871a5321364a071451268c460039a571552b870c4173e6ae6546186083d9829a387074072a0a0c3074e1f40455438f59294c4571c5f6badb5d6ea2087029f0a421f41627620230e126d30c539638623ac28a4431271e428f1da9d1b8ebed65a6b551c6d00b56a51e0d9b66d7bc9ced4cac70d3f69b451850c83ca788d475f850667457bb8220b26e6f8c122cf6b9be28a4c088e89b903f7003a5ae0d9c30215616811a392674b991dd44093850736cc746ca479a597a2e3c8d474e276c75f7bcd8f5a08bf1c20288a2d81d00c61859748a3cc11596e30230930be287060fd187c34cd3b8017940c199841adb5562c41cc26e6c8981a2881620c3664b8fc10268824b09421238d3067da80f1c212080e9636be563bb5d65aaba0394f82ec884ff4b03d318447a7ea6b0d0740460041dcf95347901856e284897591610b4262d058a18437af384bbcb104c566e7cd6b4eb503783185cc1946d8e0460d3b81667990c0010d3851e85153c7cca76901784dd3348da3da006aa89ad16fdbb66d6a64737274fc88a2065a75b1daa3eaa35854efd1137bba89ff893bddc4af798744345144a2cf501e9139cac99923c54e03f1482c3a6242c64756b85ad8a10637e6ccca0033480a324ee8410525ca18e2892760d0344dd30eb06ddbb67551339b98f2540c27b4b122862f57c8bcc6a3bf627b4287df1cec81501b3f5061236788422f3af322e1050d629a208307880ab6a4e9326850153f84e27429e2eba2399102196540a182134ee4a91a64061979da48e20f175a1da226bca82ac3843a6eb4f0058f911ee27ce105193f645ce062859e11b2c34c68426cfddbb66d1b196766136fdbb6b9693083403f6c9b5717c2088a83450cbac467f59c708295302ea029424cd705a132eacc310207165e6f58788d8c394c839a0cea7c91a7900c5d6419a3021f17866235a8a1858e1a3c55d630f3d296e82f402d205757d8f3b55607ab09b5d65a6bfd3182408e4f1a31c2f0f2a707165450a3aad006d73191c5202a296cd1d3e65595a82a38f1b5fbca39d11334307cba89fd742f3080c4a341af890982f5da05d3ca572beb6badb5825c2d84c6d75a6badb32a32bed65a679e1d67a05088893f847a00420c32b81884860c6988f1461354b0784d4bc206d1653259151ac6986ee230ca7062109e9cea049b3074aa7421e38b27723013260e1561f05c31e80670d00f2d874b63bb20876fdbc2dfb66ddb8ac41d5c30a1ca1e32aaf6bcb082c20831f6cc7153e78527e47c8c44085ec8c9a2879097236662147a5c9861073b56c42974c56fde6f338efdb367853335a0918510e7c1328511720871d1439e274a2874e637f13738221d4342c9c2e029f4c3173eb0211a31068f0f5eba28414850a1efb559ec0516c434e1830d368439a39503196e4811041676bc6ca0e306990f6a3615c2000f10459e158ca05d7ce834c8c3c76955e725083152809aa669da0bcd1c8ee278934317333b5aaef88953c312afd5916970c50a50c0f9e20413785e1a88dd87abe0d75a6b15c3cf6ce2efd80d37eccc408511794a08e3351efd0a526870bcd832823275c4dc50e7cb175cbc0e000b23093e570451e80c1890d02893268c13cc00a3861fc84c385cd28019501372701339148221891466f8238602f4f4d0039a1ab40c32224e107a5e5bc3006abcd65a6bad7582afb5d60a72edaa150e95335f6b3800909b428a34374d8c516626830a385429644b747133831630f4bc2a1c990d5febd7425e7cf5be0ef95a6b11f5a2229f552049e0469e3e5c644185062acca8c2068d2bf6e020e7cfac509e9f0548f3718f51d434cde9e69ae645ada4699aa6719ba54b574c0185126d30f1a5cf6b3c7a2d0a17a2f0e208d9a01ed8bc34678e00af695abd2015fb05aee620a8bb42691431fb63849e2a5a08d2069735eec8b800142609d92a092f4542389103c524e6486e0a296233d8104241d01a65e40122043db8a003a0384aa061039c26f8847054b8c339fde6ae1f2d4494c964545e454a454757a95df49d00339b98fb2225d9c71788474fdf9f6e7794bfdd9163ce3bdf5cd4aa6f7ed44282c864322bafcd9d87703d7e73de2cb795206ebe5d2e5037f11a8438214f6c5ce9a67af44fddd9a27651e7ec2a8832849821ce0e7c78788d47dfc60d436d1091839df8a3830a2dc4f122839b1706e2d1287e11cfea3c85c4ccfc51e28d2d5fb86841e1c79e16c498c1a18b306810340697c67601a739a5aef953f314226a77e4846ce0868c126474f8d24516aff1e83717a710961e2a82acd8f1b24513af6dd096df7e9b09cae2c3dfdcdb6900bfb96b0aa1afcd83dcb109015ebb62bba86f5844165b08f7a2ce3da826eb1073e4cc713367a4cf736cd09e6773668013049b59a067ff9e677064e89e677058a0cc73f2e439adc8aa171b9ed3320391ddfee3db8fd8fe68a710d87b7c3be7f9fee671d4af2029f49c734e6e4a2b6522cfd4b829e38b666270379a6f89f8cd4999af52bbda09386324121288bddaa74cc7326f091bbcdafb52b5f44f0e809d576c01a53e7e94de639058e5a89ebb70b69c574bed087bea75ee00e8c55d19d701437dec7efa78e7f0023e5e4e2144881716754a6d4b73bea2857b715ab8d7e66c472a0f5af6e2bcb35908f0da5a50f2ccd7abdd0e36e7f7407c719a76a5585f6f1ace19cf07f931f6d39fe6739be5d934725fbbc1083143ad16faa23ead07e28b4e6f41793faf14ebd3d06e09830b7336a0cc0bb34a56604648994ff6f38e52c678e40b9f2c41642ca26c97e449017b5b29f94aed920e9331d91bc8ff9aa790cd4751db2ecfa6e93c9be8e69a4f6f8e48eb029d6bee01e71be7f57ad0b976616caa77d767d384e281e6dc8589b3693a7508f0eb6836556d7a2f7e6d3e8a3ff9a5597e513bbade7e90d953864f3e1d9b783f9d7a3ffb37ef48bdde349ad39003fe345afcc566fa0c8d744fefd8c1cfd97dcbbf636c94c0330fe121fc3dbbc750f0494591df5d26d23bef41ce8f0d453290ea53dc4b7115e89ee75f953d6a5ebdb3ec1f67803a78e7c1afab60f774d0656804f4ce3f0aca9083cdbfce824e43239c4b979719881cfb76fed9b13b29dc4bcd42b267dfec3825639a6c313e5622d23374beee70c77bb8928470ed9f1fab94526a92a5e62c7d4a7b96dfa39d2a14f629cd08926fd7da59f665fe21ef382593e992d2331c588124b2cfd71eb8bce6d3837ce5395f79c8f36390afae0e2ad04ee3110398ea8fbce7abbb2695e10262474c0ea64be92191e9df085e73d89429541c5557a47d7277c77626dc1da7b38f9aa6dd29dfceefedd43d5d6ad788f4f6ea4a62d16c072eafd9fa623bb1e6f58d42859ec32afec1ae5959f51ccaf807fb536bb665cf21545379e93d01717e3e9687ce5e74d44e9ff770b593e6b1f76ce89c8dfdf77d9e4f076d8bf3cec33f4fbdf38f3340a50e22cfdad079cdbf366f9e7ae81f076a96faf7c5a466c7ead3bbced64f82f5f3073fd6e74c5a4636afbe6dabcd08b76dabede3fceb3ce7efbc5b84f3ce3b26d5bb0b3ad7819da78547a87b9749f5917a94d86b5ec323d43bd0996847a86f77d41cbc9df3d7819a65d9d959982d90af2b2ccfc26c81e6f2f53441eb5d29d87416cbf2cbb3fc634c6a1ae92e93d029111e63c4d0c7cf678746a87faedd31f4efb63edf3cbcadef729e6fdc6684dbb8ee8e9a7ffe31f1fcbba3fc5173b0cd9ea7fed911f456e7dcea6e91ea9f7f17fcbcf3ef3203b952b2aa73ffeee839683f7f4d3e279f5e3066f0ecec1c95675f052100958c790d6ef9b89df8e360b6902b9e5f6133fdeb2ccfbabf0627d859e6133280864726bffaabdc3f1710fbf2dc91200cc8014fcff90c8d34eb37ff645d8d54605a014fcf79871c3879292a28f077fcd6e10262303c572476e6a592c8d56aa43af31af38f9173b980d8119a4bdf38d0e3ee28f9f575a067f9d5597e7508d5ae5d6fa4fa1ccabce62d5aef7947eee7e47669779ce111eaf3994caffcdb1de1e8a78e5ebbcc402613e9d2a96d191943f0edadb526cbe10a1b376bf8d421763946644b3f045752889e999999999999190ac7adc6c7d36606a26daeb17b3c64bbdce6d2b72bdd7b599da7107eb5b776c47b76efc8773d06d2db66a5ecdb99817453f97a451f62c3f9e41851faf7b1ec41a4229797ce3d3e6aef57f9c90e19007a5be9a065d21cb44b971fcb1b449ead29f31ee779ef41ffbe09ca9003ce3b67f2b9e7792be4d0dbf6871b489981b0bc7adb95b3ecd83e8a45da5745da457f9aa26d19695f79fbeada9611efdbbdef9bc440666fde5308bfa6b765f96a0b8f780f7a120f995ec3232d06321dbc4952f61c7220656986fca9c52964e84ed61db9d79c49bbe7633b33207684e73df547db3b846af798ac18c874160399b2a70c643a11a98cca87dd175e963303e94296af3a3bceff7cf5f994f6abd04259b1407f6a16e8ab10f4ce8ef2bf1fdfeddcf3b6fccc7568bb62bbb47bbfde225ff5e6c227c7acc1f263c4fa3c5b2363062241f79c93e59595ef48c2735b2993f74b188621e89f87611886ce3dc2bef27ddff77ddff739f7f8dee8baaee37cf3aeebbaceb947b7c6b66ddbb66d9b19b6c3b6f2db396420956b5775599dad9489f46bf5908710691ee2e7eb780891c9432ef83804e2b6799c68a8c4c955ea23999a4461ce213443244d0248331640303020140b87f33c55551d14800d88b24c52469306434196a3208661108661106300008000030c408a398ad600bee2f76699a64b19d322b38210575da53fca8b3c2813dde7acf76dfde7aae1f7121ce521c267e40b41afb14085cafb883c1ed6c12b4b548da32e8c240da96019d65c9d48d5aa918fd6511f009f9abd60afeb281acd6a04eb060d05c6745c8ad05830a7fc9128e3ed767d234b9f82039979f2456ca52161dda359a1405dda54468088db03627a34e1dc34bb24cbeb080970a024480559eba0d37aa540bf56bb256adb2c11e843c66792a45a1e6a9a81bef8572b60f7f8c33094ac7600a49dd691abc63e97165d9395c763b24689d6c39eb4de312814aecc8828f6a043a24a22ad6c2512dd8813b75dc86309b5f60d4d0c760b8ce6ca787b5c04902682460d372022a8de6b0b496e0e4e1493d93f5d100207deec71405783a531d1cd12fb14ac2debf994129472d08623d77a7b5eeaf663ed1499ef39a825ea15505e105d193abeeac9ef1c94b5df6cd18d5f5acf501a454d927ec2afbf9f1afa99daa14f0348c6591c18477ff08db5cdcc8f294954e59646e2a67e81b47fb57228b967ba7a94f6e4f713a8f45e596ddc7c097b9f758bc5353e18ae164a1e98fc2fc926c6b954d4d04ba2a9831c778ccaf42cf02f6bc241e285cd2661a5504ae08cfabfc6fb21a1653814bb202f5b0b7dc5753f6aa8901b3e96d2848720f124489d31ba2043d6b465fc1f08f25300b1a7ef70b8e7149ec601d55b0736c6982e380bfae8e65811bc3f5069ec21c580a47b338106c6a0cb2debc54713411780a152e40648591ae07a5805ba7a0b3e4907ef53cdc4d0db75f532868e2652499b9c986a035edcd47df57ca7fa915dfc24ea1f70c37764b7c7c4d26b0f558bbb61ee23a6470403094762127a16aef287d8d64007cc9d8f51e1ba42dc5624c5c6b0618899071ff8c613cf662b0eece892ad25a8fe9209d6e2d36f44a936533b6fe990e57a20a8a83be5d7d5949d10d2c01a0997e0a6c65daf58fd6ca537d2366d5365993f079fbd0f74d48f454f80dc4cddaea1e6bb9b02c9e2c4835e05e427566f8324daa64bb74cdb6725eef9ea1a3c92e7ed69e169a5d85d8f2c9e7fe690ccef2fc69bbb9849972928fc2625074c8427fca35a69682683102c45e071cab34010592f57df6d93628b53e057022b5be00581c349b337162adad44293a4e4c8718ca5e3aa71aa58d1ece634b29a25aa1122c7eda2e366d02dee72513ceef691cf8310f0290da9b68fcb4bc29319040274936b8d41eee1333e81126ab6408b324905329358757aaf31c781d4e16c8aa5496aa35478ca637ec060f8e5c25951f36bf91d5f361bb545dfc60ec026e22c0e45f0453f391dece9f56fae7b75147c38a402e0bfb00492cbd3ad69f82500fd786c738b9538c4c46b0d68f92c32f1e136974f91c73c9f52684396bc8804b36921b0c6a89145465837114bc22fee81cbdfe26f436b8512191726e4a777b3cd2460508c89639f3da8619a37893d582802b10ff1261b038d28cc3ab5c20aa6139b12af4b8f11ad89e216b9077b135d7dc2f7a6185e348ef6f7fd35de87ea479e9570c6536bba2f40c12c3bafa8a13e62831d7c2d0fb87dadbd9e9e697005a2fa37eef941210666b84e716705909683cf36e5c36b28e0d1eae4fa1e495c776f148ef8b8f834d960765db875e99d4774472345d79fd8b47a0d3f121952053d330fc45c381dad3a477bdbd4f542a9935be16d5604dc7d5180a45cc927fb87cdae173f732955a941503a1171c46c7ce4fa2dcb5a5fc0c3a0597c4ed358f6c486261acbbdd1fb123cced1e52e091b647145a00cbe06d6553c1a1a577cd113f7fd6abcca1c5df3aaaea1503c359b41331791a544088da44b15dfe1266decb5a10f7d443d8aefb062f22ced6d6ffba648da4c8bbe4e03c2ec14ca8bb4402e175054baa4c33ab3caa858b21e2c9ca01c8ee178c57dc115b187dea51ec3b1c148d06d943e5c9e61dba7d8d48bc4b6ebf4857fdc2500d85fae1e9dfa30faecce1c94de9734daa8809897776e9fbafc97f456807a126b47e2831461146637af48bd0c72c7fee7bb723ab3da2bdaf9bb245d73df38cb47aae7c2c8bb8ad1ce446c88b225838a4c5cb1814b4b9c413fe1a28c88fa11991d269b03a053325ec80e81e4a53fa4a9176f34190d2815496dbddea1554ffaaf8104c34c539a26bc12ab916ebada60a80f195c773ad7da44bc761a6fc932a14f519abc4c58cbbd61c54840d3cdef2462605f201be62cb71c6dbe8a64d10cd52aba9b3c094907be049f6f8f03ee9e257122907446f88525cdb2f27fec49d20eabc65b9c6e45e00ea4094f6dc48682f7d5fc0f6b46e8b3d800048de06ad591ff2883f1fe0781b1d0e5840b4481fe8dd54ec2fba27f7445db8574515ef608bea917a28b80523f58006e284b4a08faf57d0d28e929e523329ac855f8c89ad16775d533d491b1615fe4c38f432a2a9fbdcf4f885d8e12ffe9babef7bd41ac2ddc39c4f9cc2d3216578448a053ee2d3821584d57493582d1402a416479c29218cd2ff83e6ee3e04709f159bce648f59ca289f544dda84c1785583e8b52ad432a72d26a20650f664691b35f1bae07dee977a11ead47fef231db23bf8e5ac6da5f9a080f716d700c42d74c2c400fddb5d69e967dc7dee7ff783468f4cbfe75edcd32534aa7908fc53d685109559b58c4545946f55b215e3e5af1a3c8686c4233f0dc9e36f44a11b0258cb4a78cae49b40247ab1fc5ac2353097cc172d95696d91063cbfa05820d1d204d69d121d2d493534c7a12e8f0ca9ea6c4cac9ab1d1ec5b198802782025af531c8b735ff4c99a08fb8ac32fa39894c0c8b0f2f69622d65035e455419d7c1b7ea341c0c6e0ce13bbb7e9d21448b70f912da59de315fb1c12c131a3a2ef48ed674dc912a41bdf784b9252b401068c52c1a71f127851aee30ee8bfa8546f4853435f9432338f54fc730b279baac6e6a40620fe8337736dee647572dc4ef6678ae5f0fe47754595a0f17d17299e64a7d1e6ab0080c8e43c654146384540ae32660cb5ab39c48459f78c73e6d3864d270f847d1eff131c37f3e250a263800980272738d5bbaf431077dd8791089da66ae01790282422d191c56bf554cef4db44080cb8b2fe2e124c04afb276182317dda7304ee68f50d0d8a8230b05c2b95415d10e17379783311226e7dc0b92e4043648801a831e0ce09c49a46f3ab5db1e124e62d8671eaa8cda8dd90e90bba601d40322b990e94ec00d580b428ffa2fb71ec966da900ce8fcc926ff9919df9d9d2e621de79c3e37b3e67f0b4f8d1becf7fc3010ae35dc3748e5c78e8f4a3df1dcd4f45c57ccab6c01219a222c4a37db55b9931836e526356e63344f54c2932c643183af5957337ad2e157fc40ba1af65cb6f201e803a5f89a0088380105f9312f4498fc14e7a5b877a2e20828bd41903c8981f4f079c418def5d4fc420d1ba42e3244f034133115f75887cb81d096a32a0e526e20f83ed89569bc3350abbb2a012a8520b10636b808685a9c3d494b5b0e3632f9649a410c3a911f2781399851c8141dac076be682b46ee92e2ca6a09c15d015e3591dcdaebda9b644bc0d071fdd52649b9a10ea4c4df90bea630d1ea01a18ee8aba364be3c3a18da65216be8bf9e0ed20b74b116a09e3296a2be45e7db80d0088fd285fa102bc63abb67b6d2f3dc93e8bff90ae9bbc8d72af66e694b2d70640c1cf9949d0371aec79d0947635cd2a30194f13dbcb8115abf86ccd15ff08ec5735f43ae104be5506907563ad0b4d7f8112e97e83311ec0b9a9b6b5bf83e5620b316e2c29b3535010fdc9a084adc5bebc0c26e7de0e968961e28d1334a420cd91194a634f4b96d4c34f880ed3c034b322601b01c4f9e636234ffebac605ce29ecb39957ac1020bbe9fe52164e2b899d3035a99f6ff0ec110c20c895af1c3623b27e2a56f111e849ee5630b8961f65fc8ef6b9d8119dad18bb81ba5a5a035c744337dbadbe026b33a3221d81e920d52c5143919afb628905aee74f88e08e813f8f9e4addc35fa8cbf95534c2492f0ac0837021ba5142a9b5ad9f026a9c4e4544deaf54f714d0851ca6c298ce4fe83e8896326f55a579392a6702e94746490b8bf78016620404881695fb4a1316622bc60fb93d222696082109249892d390e101a7a2d1b30306d3d0ca881683f66708300145e16516835051df0a158fd9f294ac68f0b14965b2e4b6f53a90c0272016b04bb4e23cf8717d890245f74395ad32fc77df68e819dc2448d2424e54fd018edfcca993ad5e40c8791119e1fa131bae76b7bd5b8935b052edd79559c137360597c64e567671e5d130906f907a320cceaba24150f8e2d8f82cae0a0e59d8a61acec5e57975cc51c1e1a49c3fd0605c1c1aaa39b93f90d00b88af18057341a99cce3f5e541332dc8d2a6a3df844362fcfcb5c55617b82c47c21dee8e9e2271456bb3a92e74c851e22515cd794ef94670d78bc7d11e93fa9c2bd0793b27ea5eb7a1885ae5a8165320cf51e407a7516cecff4d3f301f47fa7b2f8f16e0ca6c56ea50a099c96dc3f97506c412a6b7ebbe1adcfb3d4dc1aa449bbb4372ca8de78546430e8a01f67595d13e05683363eed1b0ada7b1726721bdc0bf458da4e3492267dab5925ba944b62ee2c3acaf52844610e42379a9534a91c88b887b56bb8c21f95edf7f322cdd69c423b137790774c1a87cc47b1d0ad5ce1592ba2eeffa9eb7cc45f3ce3cc0c8ea94043420fa13ee4cc3af43d2930292d834e9f33489bc3b7904fecc53240dfe972aecc82ab67a364784e4036e7d960b7d92fe0c11349fc40e0f176de24ab5bdf7e144fa91c25e03df1b90cc2bd51a6ccb06e81816978f091470a64415e7c90ed6c9111d8648d9224f14e648449385c87e19e7f81175e51d18fd7322141494612cd6c9ec81e644936ce322a760a8057a3d40a6af352e222f5c08597942831bf7a57c35cf30d351eab36a4d501a98f28238b836d83828a8a664a6d5b86b7177bc219f8c27d27b94a007a6c1b0abba7e324931d2e39c835a52a08b5fdc7f0bd53039c871fcf93bd43bfea355e1075b703467a2231a761165b1484cee7800f45a21e4c76d27333b843c9cb30aa1fcf88f4306c485f08e0e5c0463ba670304a3f19d23a567aa4d9d79e4740dcfbad534f09906cf9a2c311f2f241d60e25658d68b97e6ab3bef6e7ab1ee89ddd9275c3e6c64d61fc2561169bb3f2a3feafcbad2badf447aa66bf217195a2440e3ba785974cf8d62f867b4a0cd37d5d3d7036c5402e254148055923ddc4097dcbb242be20faa8c25cb5fb455000f5193944b56245392b27ffcbfb1202ac0c01a3381b36197fb0c0cce95ff46d3d9a9461a4ec37581828d536c6892e550f5a829311ce7e647080f056d9bc96b94664d3b1f0b98b4d8b91a9d69f056f7c4f9cca7e23fe22ce6c3ab76310483c3960788f3494192f9a7e41d81a057799d5d6850024708632200a015d08e72162020765c884df8162a186d9f06af888516f77a53d6208726481ae2a5456be99cb2076b779955bf91d5b8873f2488fc863bf61784aabe459625f10441b152ab4d492e415200064b0554f702702d9170314da43b78f84aa0509253765b1849ef8fb8638e66f65cb1745c3e07089e3c1f601d0687e926934ce361fb3db4f08e89244726486b2396f5f9d907d61326c5963730c3ce4566423eded4bc90a51dbd2d28f5040abc6129f3fcb829e5ca8cfd11f3dd486bca856016d40c12bae982f9d2f39c91a107bac0af11449a52b01646833dbaa418cd6a8f9ff2adb6c6eedeb81c8bfbf4a7c127c1d4436f42d09c0096eb12ba72d580cb3ba7f1c428c9cc38289cc92b2e47a96d9ff76aca9a8e8a0f4cfc80d7206982be25686709a04957cc4684da552d285a28535b730ea7dfe1118caa35eb7dce13e26a462e3ac883c200f8a9259c7ab048225b263060a752e0b3958e5994decae3eb9c3c0cefb44f0f314017d4657a4d3b1c1f004ffc23cb41a8a3c730f4419bd934893575db1c17480bd57cad772a904c8df24d972c9c8d1f42fe2a5cfbb2c913c4ff73a22f6fa59353aa4cc563766abbef2db05e38f7657eb08dfa2510514cb79a0b127ab144f4d14be855867b05241a308c1d8d3d4919366ef5f425e70701d61b201d5d38ea671a5249f554e395edde984d3c962c76aa64471c3d2763b702ed22ebc1c426847b23725cac77b5f182e6f947911da6b3384cf1ba67b5c67df396a4d157e5d2b5ed13de319d428c7e462bd38a9c9eba441372da695985362ea7ade74d4c5ab87a91fb54177b6e76e0b612ba7f8b646165cd667a2880f62dd68e6d3e3c0a3710bec093c3b9bb027c590220db8da828a9a71a20389b72b46c930b2b7c81d979281ae6d33898d0b6c4aff3a321ce1587c791875c5d24290b22b2cfe5c80c9eb0676384807992aa3beeeadf6ae678a1eb9adebd3e0cb8d4ce2c1d4e6b3532da28c2ed88268516ad1176229afed97d07ab105f92b1fc938d9e948434415c2714d3a207b2ddadfb18df196367d9244582982ad78dc81ab1d5c1925ee42433601298d8349b5a134325f2837023cfa83d9caa884307bcbe9c71a2ca3197b1e426cfa58f6410cd4b43736ee434ffd5a6aa759dd1825bcf589c927769d55a4a6b7a21a04d24d806877ba4d67dc9714ca5049e9b5e5c898cfa8ad268afdaf3d02ee4c3c79d0fd85ad644f9b089197eb23ee609a8d321f7832fd72a7f2708f8cf48e242f929b56957550fd842427ffc3bf47a62f759290e900fdf69a27dc8e8ffb51970070425b06c1313a42f145a970a388af824f3b88b72382cd6325331ba2cb5393b9454f032a2b311770595a803df17c95f9bfd0281863b12297c3bc92bcf703e803e3d2c166c7647b322c1752b94170d5ec8f04ecb88561ea0bb1cdd952045cefc84ad045e7790aba712d265bff2aa22b3f46826dd203c4304f4b12b5034b49933c421b1e36412f6fcf062e1e794e322da9a5429a7f84f33b8703a516ee9ff23581d574124701ad5131510fffd70c532644a8d0844c519b9d5ddd4bebecccc027794a1880447b3a95b5e363db95c697961737b29b368a5cc9c52c563a5b8fbbd229bb860518879a8e5e467629961b191f899580c4576a92489bb7952d37b49fe4e3e487f4030881d509b781aa26f26e16a58a15ce85915ff5bd4dda5497a6312809774aa058bcab8b891b52f22e21d56e3618c3009e102a6a392c6a00fb224a3ec9866de38299c4ecc80b527a65c38c748be16486362ed1c1007ea69803d257f4f729c70f6c4a4b995de2a73cc5c460971905ddd29404af1ef388cd8b74338a9a646ac9a15cfa1078208765f7ebcae4c3abfa4774c0230e1c77d336cb79bcb2d809aa1e386291de2512d13071bcd14bac51346471dcfc6e5f81bb45fa3513987ca7820248101bd841e5e3a028165524d01b7d3f144996e2049a9322d30c4421305a21a54e35b86637eba3a6eb40a4b46d2c999e3db098a44b2c049b156b24f9a2b0ab3c6a517ded7b28ec7d43831220c6dbd49458d04d28c8f1e741cfa92263c51ad8138e957a39ac2c56ad18132ac19864b3e4cea1abab89a8321bb25ed48318a1b2d5a4a7c0b862e1bd469b9bd34c6a7157959c7eb540812e3e13a8c2fbdc8c77bdb4d2b02accd4576f94d2dbca8f45945a4390234a37b285d2a38b19e9acf98684d802be70c5df006191da1561bb29bfd8dd734a76b22662d927554c2f549a7183550004d961c22e9f58ff8848cd631292378e514f21a4ac0b701bd803ea3e03f4b745d06ba319dd0affc531a235f3b547ebb608d27e1136370abb16ce9407bd69562ebbbc417b260ebb50ed1c4ef11130053dea3ff02f2930f55e4161ef39b57420a10185cddf3e104a7e724889c466337451ce44c9e374ae99e9994331de9676750ed96f5405800e03ce072fd428771e313a4ec3af41a0eb844c55188495ccffa56144a690c9d85ef922aab3e90022c5d62043dd071b5407d0abb797fdb9999e16ea6fa05a9be09ab2270e751753add2c293deac3acbe7867c9198b87b383fd9d04b7a2577a81c5f97419fd3095c32f67fa035445e7b292c3a22ee8f4c11233490bc9efa0d020c84a4943adb9cf1cb199e7858be847c6cbf1443c8d09ad35b546d284d5414996bda43d2204799abb13ff5694cb29a3ac266eabf72824b5e4939d23e40d8f35e7069e3d14b3a010c4070f42e17f21f706c5ff38dc464abca7ad6e839eb618d0b94299301c4876c6480ce2a7e4e03d0439568f44b824b67037b871d605e785a62bfd236238d65af7f04638c0c1e96b3c63a9a9df102ea4c60251688c01ed5340ea2064a0694b69e5d80fb87834c50bcdda1b007d0d169c663e25e3f339ec24cd699eb23a73b6bafd37b5d70a389bdda4249fc6a084721835f0603664c5b77929fa64d4edfc14e387c616214e3ec66ec65c244696cc5b73130b9e92c88d788cbd6a7d15b97c134c347b0ba8e8ada945cc381831d904070e78d40c912e542cc3a5c282c4474ea4bde74d891a2077353eadf9fdf8d07223547eb6988f57a07b552adac1cbb019cd6119b3fe330891cc788902413c29fa43e46c2dccd3e1500abf78de70098d3fb459658b1bb23177a1816e71c39ffa1740c7f10806d72276fe15ebe3f659b36d23e27c9f1158327cc0afb478c2f6d0e523efe5fdc85337bbe1ef1b783448f75f26077636a794cbaac188d4219330b7c2ed4b30f0f74b382f19d19455cfc1a71c8e1aca696aa1a2ee2622b118d6f38c01f9b2102c8a6d9bb31fb79869805961c59f168b7053b926408655dda8da6e5439390943baedbc946a2fe8fa1378128abd0e8755138391fb233e8c4e974fd63dfaf390db4872fa6e2e64a2a14226c460cf1057b1cd4eaa1a7372ef32effd00e82889ba416ad7c1798db4ea4b0ee3ad5bf215725eabfb6253303492ed856b97926ac477c9f4898646b400fc40d583a4441aa7e538d0cfffb4d1e6e17ec2558abefc325fb8e1b10b668720f870c8840622251269118d34a97dda05ad091b3724b931db937124ca86114300a60a3e61b418432fb83848cfd6f3db05ab1e0946d87ad983775c57781c4650dfb4fcc1314d70c51e8ac5a019b49395e76e7327bbf0f009070286caf50701eda260b6ae58f9042db67055734abb2b650c3e11fbc60a8859a1618b941cb7c5cbd65cae260275b92b0073a0cc086e2e21697711bd6b96966fdbb05b257a8435e158e2722cb844a715fb91b7fb9f3d423f6d55805749570a3aaa26b6472094420e01be32dc5032665c12d071a0217f10d7c503853cfc172e6d264e58bb49646e731ec21edafd54a712ba1298cc1160c4a0e69c0e60e9d714fa5cef55f80b01625cafa610b0fa650aef170349edf5da572a00f6fc8a49f76226759be69d7fee683b34896d6fba75f096d6b773ffa55ca8184aa1cc31940e588aaa3ea45df8dcadbdfbf18ed5dc1df37d96be5d6db7d749400e94c6eb4111ef8a561f0cb65527393b29c41bcaa0b9cbc00ee717b3d81a41f317839014d5299a983fcb2af6b0ea63cbba3f50f42aab02aa6e3a986705d37d94119cc68a0bf8bb6a29d1123f307845b87de87cb794133bf0021191270d672410cec79f4358241489ae1a02e27d99cd6ae67d6d9aa90027691ddb2291ca77e4cd91a20512604ec24e231c10bc418c76b6ab6bb7068c37d6863b0ed8367bfbc104d5b48de13cf13cf0688ece56be67ee0aa15fefb8caa336e830a9c6ea143dda1701636739909b8464faa1314ff7e736a023207c934e8c45bde6980ca3ff640257ee7cd9c591269e080feb073276782e42a1a72a5b6ee5da08e1e7bef8b625696e9e0c691496760b9a8a6829fd6ce8aeaf227ab18ce788b247803553a6b1c9811c04aab25e6176d4ae81f12d6320e64bdf9add83e5210cc463a26ef6d5147a957be2a581398e431af785b28a2a794e83f55d664bee30e4d2a15f01423f07a0ee683256d78f56788b63184504eede90b621f1e9dab5a8b76c5599c0ee32ac6c05c85887f78aca408d213843e18eb1f6b359212cacd4530a6f9a7dc563db6dc810c176e1fdcac4bd2fea5c6f616852994244c77645782518a0b920bb965146e039debd0e60a12345f976aeb5b57cb243d5b111350ac2f864980bca867042d121da5239bd2753f76c7ba2bba72d85df577e223bd475487ba74bfe717208d02c490001a07e0b2063c7d42e1aa4fb757b8de817f481eec2bd154fac931103a1a3942c8bef6495ca4c4aa40abad4bfe59b1aa244e8c4512879d40d4afa789aff7012e1f75b462a1ad9aafb4d992e12ea2e43e2ac4162f39a184097a982cc508d1a8b3b37e23c49836c4488176d59b03c4746013b27918736d791aa60d79059002102bd2b8f44c7252177e7c5521f9eb279c200685a5a9b6ed1c3b044bbc3e813ca9d8c0aeaa1b0eca408d02cc04f40e1aa28e1ea624b3bdcb38a83ec4683c7cc53e3e0712d43c39aaba8510cedcc8263968c732767cd08edbb3352929f7a0955c0c978da535e2bde84e113b0000d01324022010cc1a200047a4220cf4957a0400d3df9b2606006625dd744add20a09dcff0969fc27d9efdfa323d9020da846122bd7d19dc6ddbf43d810b2ed61cbd899462b423041aa9c265903848d289789bf9105ad02a491c080605b9e2f941e66c969b207b5643c876eaf66be38399bdd858362e5e1d5623c3ce0019d94a6ac32fcd16934a22cfbc859c29ec6abc6801ac4cf45a37dde934f267ef39cf662cd3dfa3826dce906a4cf21cb9ce05e98d8ac57cf853ad803a16760cb83a284723ac133a863e2f7502804ab452b3782ce47e0375a0a91fb014d6399a4e6d62a92d6cdc9289760403f1ca766268cbca6c3e10fe7bc7d32c84425e1cfa368afcdd6dd8f0d876f33d449e82fdd5d6ea77dbec52c36e92279382ec75dc06ad03a84fa2341c659d7d3598365d78bdeab1db174d5f0fb67098e383068788bb5312e31c5fe448c9ea264c778875bc6687e756347a71da8f9452ba3918d5acd3dfd59949ea73a2650e70224a15636e00077c6ae07d6aea7b9690c5f1b3f1ada2fd4d3d662d0829a072e28ada14b8e7a26e51ae8d0069ba78b141be52ee24ae2822dd1961a35a47924b12523b2e1e254007f80df4f9e2be837db83025b7936db3c0bec7b05ae0c90680214a27d21295fe88c754a70ecb040cb979f6d632916036e4c61056e85a91096b4bd395fa033e7b8157aa16eb85bce7f8b16878c86775e8c79c98c4d7aece3babf3c37a58718e169531043f4e13fa3335e93455988ec3f83ce2a15f86313cbb8e62a604175a927085d1d43cd4dbe3fbd0f91c824f20bf99ba47540c3b754635914cf51de0668225faeb6fbebc416abd45817cf23926c063bea64f56f1a5959bb43a291abbacc8a6d0266b5712fba7b622004195b4904202e90b5625b243b99ca96ec9044180dbb6f22dc9c5d9f5d2703e89e1babc163f16348201a66593f552f0c0fae12c6f27b28799960bc7889eda95ee09dbd4c0ad0c0d386a5ed92e09d6ca5b5c5d9d647b63430a9abdbb6894b246b4d94d4716fbd24ceffaf6f192a685129e0c475708e9075e97e27969e1a0b5c293c7576650ff44b6ae45ade253b1b442bbd57af7e2d693df40b3f40b777cda0ef964c52210de683309b62721bf355f5d49bcc5e9e2a8e6f442eb3a2e48b8c2a7058db42b52ceb9a3251a385c7f4d5b114a908823e79917ae66ce888ea311f111f1e03790965d90adb0c56e06c4c5237efe8a8386ad682184718e1e37c80d5e4fb7599646bceeb85e0b110253c3836e76cf503e5a9c6e4a3576d6e9356be02057bb93d65d0545d5e431f0870fa82136f62e08c725df1fb4d38a05e9161aacfac56a06a219e80ac06427de279102bf7916a3dc202ffd678ab6192b939e23c8db9e156768468d59e77d3a2b808b38223bba04753ce2eef48512611e91bd7bbd99c336bdb4bd16fa9f2aaec1a39487a07ec3b127e07d483b6c2a5a08f82b90ed2a8a926d22356b03f398a32a21c7da74a9856c1561491b2b7db21f6ae1d8d7595a10270bcf8247c61ec3393a77c077bd30cec739cfacb9169cda94853a69d71592a5c25504f81c25679d387c1001c2f29403a8dfe2f66a1a7ba0126a58cb595e1b7dcdb6124841594ef4490defc76406424ff79dc56a5e697daf4fbb511e8297878ae2beb8d5b2c4884bfde83ffcc98792b4b41ff3c1dc9bbff12cd9cb2a434a87f9667cc60781653f42230f911bc1adeb4c3ddff09c1177819d81fd5e50cd93b3e2864a3e0467aa7c7072236b453a0e712215ce802daff2f06ff795529098518563ccf0d0421d661821fb57cd8e6787b515d70fb349a59a022ca4d032d83d9fe57619a2b00c104997fb3a66a2fb516d811e63aaf69407d7b3a678252d2388e8e19f6c4a2afe2194531c92fa4f73d762303f971d138860ddf1ae2468416bb1f610a28218a029c2728e0f7f45d3a57d668a97828a0353b21090b37079487a969539c7bada90b60714dc5f21c52a45153f3d5f06fa5b67640be6d3e0ac0facdd33e66525a9a4af386259aad17e183435d381ec4b0da597858b17add18c424deea350610f8fd1dab73cc17b2c893e4ce9dcaa9fb34405a5f7f8813ecedc6b61871c1820527d9a0578e257cf47ecc6e47f95e7bc035fd2935d13805ddf389a29d20813090fe11a711d7d6b5783c1416c8ce02187bbf1d5cd697aa1a6de8af62961197589a319dd078a270aff8a0b5f3d5191f730814a62b308dcc69442f98d647dec0b44c23c7c282a9dfcb3b48f397766ab6acd2aabda8e73b78126a6068a0b95adfde8b96377195b2ba05e8bbcabf402068dd97b13a3393b15293de99978734633fdb044f938726d77e8d4c330fe0949d734457e44bfc9420466d85bee1dbf5fab42dc0b73ccabc9f2a09ac00696073a9149efb68a3c619117899792f8c92ef5ce30b1668f15a8ef1b1b83dc4d98bfc185b9e02366c2451e8b8ec9080dde9a9c891920d67fd4c8837c378ccd5fe05a0785599fc910abe3c4039ee2beadf19d6820b7aab85c7f0e1296de72f7612eea50c60f6b8b56c606f1dba9250a92cb2946ef6b02cea95e93a88131bd18195c2c5464932e5cd432aff412851c20a99364cfe88622141f6873d38181183ca906fe34c99a6acf1d6c8bc536a4cf92cb72d27f3860278c3cfb599cf2bcfe38c66ab3418baa66eca34b25700788284f8ebe6b2152fb56d7a0115b8b1c551f480ede5e4177f8c555bf0b1e313874ffc366fe29c5222d06de7c7aaf3a9777f47a3deee12cba84790786d0352fcb161871a7c95f06a162c97163f839a36b18c448f103a14f0dc8ad1ba9fae576a702b8bd171a1d9070f154fbed3cb8a16000b7c442aed3c5b6a607cbd1c6ff7f87d3d5f45b1d1653134d625c2c38457e552f363c5c6459dab3d2cf9b6b389c0ab544321603da4fff74f5f908058412a1c9def28bcbe08a15dbd7c31d2a9272230a1c4416c33ef0b8edbc560967f7c2d94473d5bd1cba2bf64f0b1974c627222ca800b629ac81efc47a4ab6400d97efa7df26d26df3287b8e22ce7531ba1c54c0e00dffe900bac4c2c437cda9e59edf801e08c58411b53077a10ab4493bc430c9592841f2e4984024937e1919d47eca0f05d87cf56b01d93e221bc072077072dfb4f1578e3e8270e59100aaf8b7b35bb12306a1215ecf7ebed2f22a1250270b3febbb4aedd300618d5f8c1a6a170cc560b5309f7ce3386bf00fa497c31e6c8c373371064d2b7721131843a1611db286f0558623740cc3baa29ee926b72b78a6692f91212a778225086c9089983029766777e8877bd2f1b9e7f52886a502eac8d2d4e5e80126cb3cd4c03d6280b4d1934a82929da3cbd5838b22a5ff733a25d9b77f8204ed0b06df3273ff9e4934af9a46b168fb6cd0f0882b3bd6c786d9da41840367f8f42a8f017aff7186e5c33cb7072c4266100a41088afad1149b9c8213442ea2e7233673ef316c673c89ce89887f91f12340b4f44b499c184036547f93da3ab80cea293c63880cc457d027fc72084cc5b1d8f88e4fa69fa1871661b50cf8cedf2915642abcf287a3735e102434279785877c62948b44a06d868b8da209a5c4b63217592398d2b4cccb4868a44a68bb8ec855d969f62674d252fb1213aedb07680fc662a09694120043f05e2662cf3ccb56bd5cdfb8e70924253475322f97f4aa9491376168506deb0978bcbea9752689b84b7bd04dd2fbd98bd2b4f38a97319c90b6380d03ae0481afd8e4c6326c481c3a6e4df10edfe69f16f0bea70ff876d1d488e3e185608a374120bd190aeb1b09ec88ad0a7dd2832eeb6c739a82d6ea8b8781d8900c2264d1ec6e8f7f102e45f5b971b1cf0736e2d1f4ab33863318a270903ce82bf5a65ddb79d61443f2092b6507d9c7cdab268af05ba3f1ea239fbb1827c2d019afed016139291f7c8f256c0ebe746aa2ff2cb8277653f3606262601dd55f1637b6b80fa84753e827b3466646c2ceca36b6203aef61b0acc38c322e3364ba50699b3c11f581fb2154d7c91e9f13465ba151ba7f54007430a18c0df0211d51081fd594916be86d500bb6814fc3828145639ca5dca543c8fb7e6ea6c04e061a1e6bba78f5c55014c65735a1199fd4738b3d18d32250a42d1178c7e2d1129bd8e5cf1ed4f6b4dc77bd710dda96de00aa673a6f5b402041d2d29f2073c2cf862e5bf8d364545c60da67fcf657ae43374aa3fec1630563e61b5af988242a78ac67b52fc708d91ce62a4ceff490e4ca3f21ea3266057a975abc34e2af005a6496ddc253be8c0ce104c53efcd1affd8dd44085747e59a97adbc05820457f2813461ba852f826a32aaa04fdd58b115c50284c144a7ad847406ec2d3fd86fb78f93638db888485731e2427e169f9bbdad22b5e0fc7f3cea746b9ef2c45568485b3b51a3daeab075676f73852e9fd49ef82153e2b6f40744788aea56f38e014af6e6546ca8230382aef4f34c66c180ef0f100836617b9f0a245b848ffa71fafd13206ff77ec7a5c20b2bc9271b84597902701b20d306b1e374cc602a170c2702f1e0fcb6f5ecd0deb9aea06dfcbacc12c17965297270bcc17b847b05f35b85f97a279885f236734328168d19fbfa6da0abb5894de4fed69747d6d84ec1f974e44b8b3ed093181e865a74c9da6088148719716c603c5f264fa880cef7f6cc4cbb685785c19df3b66c492218cf46bb54cfdb3c2364c09f66672d5298fa1814e7475c3a57043efe8f13928a4264d5d7a6ae611554e7c6355dc152b1557c95e5605d7c42d3e7c6acc066612b3f1db919be7af815e5887d9edfc2810ad3ab9d869a9f9dd79cb47dc9f94dac3756f5dc210066e333e6f9200495636ee9858913bfaf2f0c87df507b1d22b981af272a42989ea2a3009dddd2e3cec3dad3ddb1d36b0824940994cbe73cabb9f2862815ffeb9a1899712d5514a3ea969c47948069126c4d0ccfd6c4656c29bd4cd4d7b2cceae717727ecad484568cabee039f132b6a520d4260df48a6ab482c49b72ab1863b5581176309f1252e6046827da2c36cae22aa5a976f1872f3aa9ae0af0666e6501864e504f4ebeaaaf99665e6d756fcf2cece20e69a5b110b4dd41e514ab5f736a7eb3f93d93640fb50055a95ac7705d7ab97c14bf6903db5558c639cdbe1f665ec10c3cdca88f908b481b557b8a751a03f8a61e59404eba4c40e66c56119b45062777958d4c070a37863328669d970944831b6fe5a76fb9f2ec5a8b09502ae4421934570775c97bfcc3bc26b6f4643762705f82b6d45c5cb5be89750ca3c5cf1008c33ecb400db689c25edf891193bac3306d4b532b60bf1231cb366d28c7411c606164bee6558c890546d6cd28804e5e37b057cd6bbb3f7e8812731e04719706d4372b2f69ec355d1cfee324c0a24d5f55a1c0f00f82c781dabcc3c42d6d35a8ebe6e9949552c46efa529a1f3a7e06890c79e0844c9e36a7f4dcf126eb5bdd66255aebc56d446ca3b3fecb060e172c85d8239371655aa754fe30d589103c79a1028f0112cfb2b085e21b24305ee6e9910a60170c78956f29520a896446bd7a4bc0882aa90428dda0454d0a1f33dddfd28a83b3e61e8252b037ab6922fa0b39c85e9e6e588a6359c41c0db4d8b37d44cefb84cf6bc16adf7ffbd9e5d99690780d341296668385b870a0996d16175f57abfcb09e19da06daa1143c5b48e99acc7a10ea1e95e6055ff86f6fbb42f8102f84e4aa062ef2937a376675418ee26b0594597e44eeab53da6edf81235498deb2b326ef30b99c2f3031303054cb92dae795f0381a82d1557e568185a4894df1c6dfe55070d9321676da6278dd8c45792ab26f7b7bb6796cb4b501ee1940d00ea2cc969cd2f055b36ee6bbc11169918d7fcb9f064c752e74b039689ebcade0f410a2e357a88436c2eb7557179dc89cf435864af971ec6fff4350cb5de0028e54eb383b10e3424c8c6d2d5d89aba5e1a550f89ec470bdb23cff8a6d1f52e4ec475a2332e6c244e049d239100df498fa7155e349573b9378b532348cd9a598b75d88d7836e9225babea9116b7de2ee97c4f986af485e76a83edd20591c53a632946b658e6b676e6bb9a0e5b24e10a7f83b1309d69289824d39d7a731be8ab5f9e8b5e06fecb396d4024da3c44605d661a15971b99e804814c38321ddffa34166f4412ff7e1656b9b2655ad0c113cdb144b56c7869932cffcbc9014aab0d8edd7f3a73e65061aefe4624f6eb84b573c73f8f951581f0a709c771d055780b3728c973972d60259dc5ac26e4246c8b0ebdb54bf9d404ca86165a6ce4361a125c53e22c1bfd8283d5fc6af6164115f05313bbc4b49b6e3c7c2e27bb5ca40fe1e079a174d72ce8e194232edd6215f97ece24ce8e75288438d06c01eaf94114aac66edef8bddbbc1abc5f8d3951664da9bf68ddae38e6a7ebfe373404a846970d3e68b0b7966bd18b461d2f4f8a4874378b99949a7a663ae1bbc361f72acb6340a40228a265f4961bf378d5b9d0e5f88e5a59ed06b77f99cdd9ccb2d02ae99da9f11a38e3ccf6a59598bd4ed3d782d859250c3f635085192a57ce9c7559c68a2dee7e3d30a54953a321592a097e76a32490012bf582966ed493f93463e56aefe6ebe1a37799cc943bd71b68fe423d42b618d8ec861789914bf5058c9e32b781d3b48f4f25ada7492de37f2671ae0e5e7019ecce469e703e706de8175efa26f54c1a78333ef333bc1c6a0b30e0d063ceca9fade6fb46ab307f810d9207dabb447f857d6936f7a2085aa6b232fd66f71958d9166528a088ff3a725dffcc10fea55ab8f8e220d6c7988b7300b9dbe96e15f0e77b7ba76c0951340048eb2635cde8641ff41a9277b9ad923b4569e4db408d0769113b6273f5ceabbeeea65fd6a220df2284a5022e2705a7b285ce51828ba832d053b90f42dd582866381c941c1dbc75dde4db359aa9c985e320ddadcf994a1ad3a9e039abd6b00b744884a1fe139172441e26541fdbe213982261055cfb90ba6c4e7144ecff23b3287e9b89f2306b79f91f167f5d893dd4c84756f8d5328e24578784c19239480b320d760ffe84f5d5447f91d8fbfb2290d09bc800bf8d438074333e2ddab0a54c28903c6013c82a423b6b19f45151c765a03c0f529f41b351b2c313579a0ada1cde24700e166ea1a9280e4cf00514c112d0161e16e398a08546c56f18aa08b45e9093f2450619fd982eab6a13099724ec8904612e11820d699ebb4edfb2fc0f47221283d7c8722282822d9a2c61114cdbbc038b6630554b1456116cff6e60b932c19fbc68d7765bae0c11a9df4102a68f093d0b49af05f5335cf41f78efccc70f236e0820a9284ace23aa7c0a6874983b82ae5683cb0f3cc3c436369f98f2fefd630446e5c437f29cefb72bcfd06ec8712bfdbc4db0b2bd2395b5122141e4f648199c5afb4e8580b42bd0faace1d0984eca27c2111c5b62562964000ce950c32d2bbbe616c54c59157f89186590966798b9417353590d5259e18cdca9445866d532358ba402640fce861b5bd9086528d24244c5f7f2e539ce4a63afa5d8a04c70341a04d0a137efb414eb168b1c1a2683481ca754e90fd2a691dce0b16a2a5fb504930da8620dc7d06321550818da2124cab40728aae8fd8f2c122ab6f2ce9c01b6a1fdc1f3bfd5cfca415ac51a2f908745f2528686aa006714c74c32cf15757f68a7c576cd4acd47411089c49784808de2ad7d247d9272ac62258abbef10eb5e39db5c23f128c998001fb39c80f2408a7ad1ea3eeefa74bbc322e78da6c208153420c3210f3c960a31856e46ea26529bb9e15291595b21412c5e803c34e70882cbb41fe0d1f117e3f770eb0ddedc994b240aec0931380fa11d135c807806ac798b1d6db7ed41d11dad31f4bd3afa0e9a756b532e59024474d8e7f478266358995153f5749022095fbb8c9115a03240340d146a95eb521cd498b526faf98142a003f25412281aee7a022e1b4094800e88e7a3d4dc4de812e51a899873c5b82be5095410639455703f6aca54393f9c98b0e8a6eca1ea880109c2972d10036c90a4d005cc39a404267f2a53b4e70e2b25785306d38ea2a1ab17449fb8b61281de37ae4f37e19e68e30007a1fd862ede3a9eb06edeceeeb7c40ed5a627ff0b24e7e11d57fde6f55c015fe08040bc9ff46fe28a957d21b9ecfeaea8999e26e434e5e8e042e517dfd0de0bd8da06d927a6d118f0a6ed4ee63494762285184cd34daeece7e2a0c231bc73f0596a4d0a77181288b86bd5d23e90f9b10feb87b14dc3cde3358d3d9272d169c2baf5c95473e8d18d1670e9d8989582be9f4f185e5163d268011d0e320f7295fee2699301b46c599a33af9ff9486b3aeb3a70eb93fe7ab95fa14bc187293ac53a8959e1d5da273a2cce6ca7b5ad66dba3264426ee94438065be776e5d6d590133cf6b06e52f687ba942170b843bf4cf4d1c9a489907c67093116455e420196a203787383e65d71d97890b8e110f818c0bd10542ae700588a9a6c7629504fd027e3ac06d16944f8d8260b176d3729c484a8e6f30ccfdfc29d22a8971cf8651d79f45f312699ce110ebf0e748a624c76d1ac65dfe14dd9588718786a8d39f45d89234ae7918ebf873745622c73518e24efe146995c4b867c3a8ebcfa275f721ba1c1aa24e3f8b604bd2c8971be68c8d8e89d17375d308b3be208b521d066615acb270aedb634833fc62d2b263978df6920d2be072b66297aad84fbc9129bef5902b96dfa0b66cc247b9283f8c90f525897449158df78e2d1e3b57f0d51a1a139bacb5743b5e408b7559220673ef4a791ba931a19cc6a7f392c945a67b80a7939909532110f860346424c0311dcbcd802d8c1d88d89df7cacafb94fa5390ed2e958ea963b3db66b88154ad7bce0269a314fd966614f560218e3498d3896b909ba9846200c65fecba85606eeb8d23751dda9b9afb5cf7bd2c3ab959150103d3135d20184fdc642beec576b8b2b26b5fc40d5f4e2962cf7a10bae7dd2b8ffbc0ba4ed4eb203da024ef3ae696ddbcfea0fd03e743c45c13be4cdaaf83af3a2992b9d0a60fa4cd6370ab7a4caf000b0bc766b2e2a7e27fc65f1f8aabe7352a8409ad8966995b402b1dfadc9275bd517a0f2921fb56e535630028c91650ac77b4b21d13cf008ae8a504d3631ca0024bff9f879a4059b5179b5c841176546210d2232f58f1c7c81d58cb60bc9f4c70958afaa6515dd03f6a1e7f1282fe2f7f1196f86a4a458885f3fdbc17b474976ba695e430357d9a20e3683ff629e22987f468ebe9c211ec6e4d26b403b26b451d9e2caa21fd2365a362787aaeba2cfbbe9fdccfe02fbea233d261e972f3519c6e8ba606e041b328ffcfcc9fe71d0d1e66760f43ecae5de06fa2f9722c0616d95e90f4c6bd8cd182fd307023c06eb50e62d21c6cb56ffe6431c46a506754f13a50d19a6ada96bcac91dbf496424283db1a841f0590fd5ef27ebc7c7108c0bb1f60abd7c54693d63a95ef7b880270b90c9176762eee812910e3d2f43769e37dd860f9e1d730e0603c25c6fab773c8532b7159a81af966a71110143fb17404c40497c9ffe8eae8a5991bd92427aee06665d4607c2dd1e280c84d3ed8d569b5b8b48fca58d704958e5d578356ab1820499336e212edc956e5d3d1a29f7b910c4694439122161544c1979a8330caba1f2793b3ac606c1f7c441566b32f160a03d124d5001db0d64f02b1a181c1dfca4138abce816f9d6e9c91196794e22850949a736c1dec974c3b095f9ef2383ccee1c4dc25f4063133c551c572ad88a8958e0fd3a12e104664c08d56e46ce0166dc8eae1478189ff085173aa4e4b857fbdce36005bce25a017b3060113058a55376a8893310b43fa93cea793395a10afc03e62665c926144392d3b2c6a4b6b4f1785786ca60f072f062c43452d340b44291274cb8ebd0d1451cfae9cce65b81fd80eaa67cb234cd2e827d0e4733cb5631a5b311c76735f428107687997f089d9d95c2b9f57571d52950845f54dd6f835ce643dc0007da40a877ee0f5ea31f7f0bbe6ab127fc9378afa6cf261d154400b8faf90118cd82f9d02733b8f29183835e48ad9d62fe4a07282a0cc80fe0fddd40447c57310b02e8af60e68d81f366add608a2e0d3eeaf27609c0a20a4908f1ead4b7f8fe7eaec73751e436175363ef2043f0c0aa5a89d5a11c354482fa26b656b0eef21e17f69fc3fea16e760711ca71a8344e48adc669417791877dd69c5540ae4193598b2ac3d5b68d280b13f2afeb414150bc35075656c99aad2051f5104d945921ab5e3da98a52d42520a5328145fff28e8e2496d282e623decd020764c8fbdcaa53c333be13d2e0b831bc112c19cdf219b06d670ed87e0d9f54167dc683b3b7d9e1bc6df223a3d72bd8ba0628a902dfe501cd995796c8be667e68b594eedb2063148c43c50b5b53ae34d3da5b18ff5ecafb17374f271416653bde9baecc1c46c4605caf05f377c20141239238d8a3371b66c141f86202b39972fceee98fc82ab725f99d1267088f23675b537ad2183ed63d8831fe8c8fc27948de812ed9478acb94a301bb4eddefdc3692cbe72c14e4e828a62c62ded7b833b1e8e2a53b438d91c621df75158c41a4038000dda40395d195f12d86a856645cef11992072c6850424bfb92a25ea2ebf14688681abfcaece31f24ca2970477b227b7e098c27b2e8d1a0a44d8b4b0081b23b0db02d42caadc45bcfa16f4c55e2470150192642ab8602027d3a24a787932492f6a66a4ce1d0823c7d0fefa2c352f651cff35e95069228b9a2a1be862da9b0a74f78b2e2877355f64e28d1748179757b1cae6030097fa4e667bd26acc630f0bd39148e3f172289698ef7f8bbe15a51ce7506e86f39164c8097ca7e54ce387ce83f4811281ad8ccb3d45f3cd3871bf1a40c227113cc8fe0b4f05d139b0fb4db9e5b2f94c906b0a96d06c184b14838a0953c22088c841c96685c19e5ba32ecf12c68b7ccd343e4460c2c9b047d9e4c13c1319bafff948128efa51144ca9b63f8267f82fc0e7a5e0a4ae8210ac760c0812c1ab9a85905a1e8858b94d780f690759febd6569e7853871b50190bc712fec0c0b362896ed89e27a89a44358c9c26ea021f389d3a381e0783082810d8297820c120a9251c3de60749ae022d2b410a782d9aa4247d5675e344b7d90e00decf88c7a8ddf429694844168c07c1767e27775c56e3b30185e726aeff1bbe7feb2a9203162aa43f53f09f0ca5b6db7928deba260a8a221526f45e45f4ecbcf0d695a348fda75bd6a8c5f8d821c292904c2c8b1595cf418f581773cf9dfa50c044999a5d5a57660351e2e9e158fe345fa2b41720211e65b7bc4db8c64080956a2b66ecc1088295261d3b287b5576c6102cafc05695d400c4a930efabeec3e4a0391331be6acec2ce40d8c50887980bcee5da1cecd595aefbe418ce67f93724f7e0078c94f13cf4ab979c2c6a3f6efe0d184cc2d1006046047c21c5199b3681a264f845ae907f868932df7de5b4a29b7946907c0075106c605562cd0a06b912671cb86c8d3ace0065144f22b6203440493b5201015add7129c550e5c979b224f3a3c4d23f289547d12a44271418716c02a51ab49820c4703062def9a3ddbe5366bb13e6b2d1ec096bb96969c91ba218c53991eba964982d160b1c08509a2a220bad0a84e5b682ddc258a6896960793725304194ab5911267eb0d224c6c691d3142cc941d376c708243942ba72149984c21b18208a5948e79eac6447563a4baeeda5a6bad4df269cb732c3a5f8ed496407255440920263b6a579e28a1b283940e4dd65a304b148c103103331ce5f0c2919151171a3ba6c5cc6ac4bc909582d316920f128a90e0432a577d9833aab428a54f3860021e656a20e28923570ec871f5248921474bbcd0a0b6060c5c064e8324278a1c99111152c40742bc14b1e388091033496e0cfea47768d55a6b9d4f42782c20a04349d71618aa48b962238a1614aa5031a20a19a9ab1a2130256fca4071281d49b9fa81a307933042703a825842248b129125b62c91e03040f1218a51561524924441a116250623be1021d3248aaefec286446bb2e928f2c229840c2d01918703c60a1917b040f952e5888c0e1f60b000f1a389231c2e10d98a1640022845b82025848b099a42550d85326162480289041ace246f13318cd406384d3b5c1745e33a0ea0d028a5f409bc37544142849618ce68f5a0b163fa08968af5a8b2c31366809022a251026a0425343a0203e15d4f9dee8a12ab6741a0e756b8b31f77b6a09452daecd92e07f40611c65bc09991f50413cb38a1ad071980f4c135a1c2c7254544b5d65a6bc74451dadd89656a314547a4c09bdd17a82f49be507db1fa12e50bd697acba85ab8196e3686e63a66c8d0912a6899a1206394ae8c28547932a39f0405b82755175597d3737705041414b55112360c02104151e5670084325052b4cedd0c3822701a22f23b812c6c8941d42f0454c0a3e0c5135c584a912b0000236dd16f092224b6dad83c5a6189922a4e2a02a521e4e78dbe52e0f5178b0923d5b50157b9800761c4461e29490c1e0063b443189fa920037a82aeac23454a27840793c60d1883111166ba2f4c3335e184a297de1a9eb400f04da72d4a4eaad14062545e9ed38b0d6de184ba2bc194f663274562c30189385e304222a2a6cd92f1011d5b8842863830f34e8ac006b9238b42cfec432539c4691a8209cac142d46658b09233e98ac787c5865c07c0183e4f4e50a0ba521315a3112a65aaf7841916644431269396aac4ad55254a9d9b3ddcbd58ac5c98428acec54919c5871a0b3170c3bbb22410920a53706a594524ab1aec08b55a394163142a5062156d872e4861b2420c1870a53527e20d1a5c30987b5c53a09b6ab1ae6429138a39543cb285664f3c40c0bf8499427a99c402a19865a2df5935ae1010f25352557ac8ca9d168d90175a48992150e4b949286d870d6da2e6728570e91c811474cace065044e709499a24c6e24819ad5ce84292247170d57e15a20e556229c36b158266fceacb5168b102c46b040c5b86d72f0150aa751e832b2b2ced178a188890d5c6af66cf7723aa6c0985b4b5b42ae4829adb5524a610019a3357bb6275d3d01d3162d1c7a48717142a535c4aa88aaaaa9aa170a8aa8c0919848c15a1498e98e5061bebd3a800f2cfc60c3162b4b78d89680e1d2030f513ffc70f4a3d65abb66cf7673984224053f3831658932857405424dd52d4a5c751962c6cc153f7a1d75c9a8b5d6da4544446442adb52e41933ddbd5ad895ab1ae5f820c0f1822d9b351197a86ecaeb5d6523c802d3d1db00ac2c2d313558ab26880072733426c78022a09d50e163e86843e9a6a8d4165789aa2c55fa21ee9872c668e9c99218a07143d4e40a2ea8c8e258890dad299895b93101a4d464419c44c70aa09ca03819e16a9e1b689c35a6ba328b5d65a3b858349d9620426c5851b134a00c207095d4c6004d1036428e284cb902cb423557a7a28316408232f654830618a93187ea052b244133f5a601283f3a8b5d6fa63566b4dbc316de44c0ed122b9ba5ce78428050f2340360b93ecd99ab23c89317bc358184aacb5d6a869f66c4f78d66e931b240c5d253811228814225c141004eb29c81114104e6e782285153b5888d282414c9817cc700089099ca68c08820b8813e8e0c58808a59466a029a5943e4129d647802f493aa6b0ae245144cb095d82a0a149989a901b47c13958a2e952446d88821ae24e4151e1a2f4ab4f00f0812d20475576d09cd8e1024da0b04002a91c3af4507277cc1c4a4b381aa5317d365a8a66cf76bf21be2b7800226d41fa48e283ca8755ec9b25bcd80017a91e8610e234b56501243520479890e025062a222784dcc67973ea6b8e5bbbb5d65a6b0bb5d9b35d20eee9c94a8de7860b56ac3029e291340410381c8182c3102030d4304409135e8423a618a2693e294245c8d15923ea3a3006406202850b1313c4a060010d4098ac90048c951a134710ddb8091c0ea908e00812a509929a951f3aace8a8610cb08060eaa2a40424627c0495b6e8ca81aa6b2604055206c06566a54bd28e286138196cc4e01ce185d91acf506a6955445b440ab8582b96b1378073ea8932e29caa3610f5c0fd5039e84189de8e032757378692aead5ad1f82043694729edb004c0de7469c112a4c7122482a802e6460950cae80003d4921426127eb02458b90e2fe2b5a1cb2f27799270f03890bb2056d19c8167042247b0e870441345ac34312973a447511349703169729383068a4c0537e881763b28339ac434b9a11d37a7c5b9ef2bcbeed7f77f7d3843bef2ceb4f5e905df3e17d6c7d9beef007f87ff6cfafb8a833e371abf029b5f7335fb0ecf80d278cdccb9a5c9e54ca0e7459a12cd1e3af3761db9e91a178883e48783661661e251e7633821f63cefa796f7da52489922cb2c96dbf18abca5b65c5afa7b96bf3dbf5ecaec55f9d3e79c64a6ff085a4e2bebe3f97876c91473cb7fb09d934b7bef79934e3aa9cd32f93e6d7e4b2e9bdf32abde2b8ab1cdb183b1df17e7b778f3923fad7d9977547c7def5d4c1f11583c8aff9cf1c31d1ebdb75a07fe1284dad4f21ff913cb71d37872cdc9a5bdd7c132cbe4ebb8f7224c1f172b7e5fbdf39bf4d9f971abfde72d3e8bbcaf64e1cdafff7ad0c5942cf2965961cecc7b88a2e09674c6b9254711548c15b02306e4efade6796ec9a925a4233fc508be8ff57b9d71d33be37ebdb79a8eccb2e662f6d04791f78de57d73f21671f2167598774c6f17b1d7dbc5f3e8ed8247b4178beeee569c5b5b7269995ff2c19754bfb20cbf7d0f74cff33c30df2b8ab1cd67dbe6161ea2fabe7d17d327e7bcb72b00fcfefc3bd6e2b758c1ef9b7d367be8efafe0de16799b5b2de76df6ecd8dcc21ffe9659da664a35fefad867f8e9cfadb995a5abcf623151e30de73d44656d6e4d2e112a50abcd2d4fe1c509957ebd4d35897a9243bbd0db949328ba49931680dea6aa80686950bf7e724d01f1a409a0b7292b327acaaa4af3e86dca8a494f595de94fbb4cb275692afed6fdf79b06b74cb2b7289a2e40f6b827d15ede2ef3f6107be0e989b110ce7bcfc918eefe32898c21df1fc441ee8d1c0e92799b37bfafcdd3fc8e7d76c4f9bf799ba7f9ef9bd9be9cefcdf7a4bf37df93bd7e043d371473baa3b02e0bff65f396faf53b794b1d6e9944fb9cf9b5dda72cfcd77b546fefe7b8453deb0d1b23687f99a7dc22d073d71f65f347d03eeea9e573b883a9c1ed5acab7524aef9a3930f5760cc2967aa29027f01feb7979cb24bafe90d4fe20f5c02cfb5de33f0763b1a79ef7dbc19bffe0e52fe708a53defe87c7def7ffacc983df4533c86d57cd0c17c7f7ff75ebe8cf21f7f69a5f65d7fcb24da7b9cf185855eef59e68ff3e16bdceefd8ce92382fc7d75ce6f3267e753e47dbfbe37e5949f0263a1f932e9ff7a70fe7b72ba97f7d063e99f226f87fab87046d709c704481efa32c4e9196c19a5e75b2c84f3f6ebe88f62047f8ef57b9c71d3b19c71831a67dcfc49f2d4f7799c6ff2beb06c93b7a86bf28ed164d13d87f745d13dccb2fbde8727f09ff9725f2d3f9d163fc4214ebf3efcaad3e2875803d4af2cf3de3e18feeb3f073fb0da73707ce5ed50f2fd1d7fe0896fb38ff74331ef743f7d44983df463b12deabd496df6f7d50ba0ded7d963730b1fe21ee2c01a35406d1fff76280d7ec542fe329b5f4f3108e1d317c13ef5bc3d70437bff7a30cc7b88d3de539b770d507b8ff376285dbfb669f0e509fc67d3e07338084ca2476f9c7100c943ff8e32c42b793e6db33c81675073cc633f4c325c1ee306cc153744adb5563257b2d6d06aad158bd338428352ba9981834d69f66c94523a0526e543a22591c20e54de1841a42767a05998b8a4de219868a51d073a90e1b820ae6615ad6b254a0437d82e779f4489d602c1625194c6f08fb006d44111e170e51328faf184cad11248a6cc00a2ca095a4874f930e4861d6290785cb3b9424b6d892c60be6c8dd19a53474c1df1107302948e1ea81a5585c59525223d5848228a151719483fbca420490a9594253d1cf15c50a2481045906c0991c00c880b5aba382909e183850d53065756951928199e082201244e3d9a20828731597ac841abe146d4f23a12e5754574811bd0689c940d1e4c8ab5d64a516aad15adb5960598498523f292b0f024a26d44629ac0ed69892d62915a58a54645ab5464ae54a51bc812a43a1a255489e09d2a81e644e96fb789094e81275788c8e1ea4a871c4b62bc9c90c409259adc70860af4a7edea832b320829c282630b880de20a8e0f45b09c40e10ad51134a80928dda9026b9a439a381b040c82684eaba8ceaa763b0e6e8c1c6a2bf080c0e5e94912abab261d25f0e2820e3194c0881d3e70390d4d494a0258d243120c4bb4b62c4962aa49323060045f9458c24896ad291a33745eaa36a8b5d64a290581766c445d4464cce8fa6991f2362c52a2dc408399155400820425943839f13006091cb8dc08910d054a94521a263d4441286d005111304cd4463084991a7280418c94102001d3de50ce23ffb13f517c61ec5dc626929e373634f9f79c9f65f7c3f7df376cd48f6972f8fbbe974a737e55eefc0e2792ae7fadb5167f3b79486a9c65f3c33cb4596b67c6b1f7f99f8e9d794767c64e8a5731f3eec07ffadbff7ecefc67fe37e75e81a4ede78c58e8fb9965f3c30f310856c5d7c070e6d7b7df8a6c2dfef276f07bfabd8a9c227f79277f54e1387512307f6f52477396f312c5883f36bedec70a7e4ececcb28673bb17e5f7f3e8cef97d967d6f311e3fb1f3668cf78633acfde6d1f7619e479e417dfcb2368ffc67d3f8391c84271238e300f3a8a6e3395a64ddb2607ce8755dd7c96af7dbed3a29bd5b2b7deafdf71b7c8cf386a1e97f370f492df30de6fb5bf7e5fc4276eff6d56d2efca77bef37a73d185ddeaeb1079eff0b0b81bebd80216374413e7238a8abdd088a376c54f92ee4267547d9274ad9fd7d17fe53ffcad0dbe63b2966d9fd4ffc2abfab35220cddc9fbdfad5f7e713bafd6fadebd0bfff1ef320cbd6d9efe86a1bd07bfc7fef4756cb2942016aa2fc32080bafe0bffa9d2c341de96f58203a70b5dbfc342e0774f47af8ed45ff84ff8da74f57fe11984ffd930efdca7ef3d386efac590c46305f38b2fbff00ce87bdebff09f4d7bcfe1200f46c7bd10457f21d548202b075abaa969fa1fe83df8af1a8b5dcf4040b0508d6fb2d6075a92317050f57090cbee61e3ebebd8fd37d6bccde87dad5469f6d4af5fadb2fe3745a14b95beac24bf6f7edff7404a1f50d31c65d86ddcfd996c6075cb1bd8cd065ad2f5a594b24a29e57cfc72d6ecddb0d1d577a026bdbb1f9232f923e83aeed9c1d49fac0129d50dc4a477e77d5956a5cdf7dd74a025dd3de7799ee7cd2cab2fb7d4d2de6f3206ccf33ceffd5eb9f978b4d9633ff09c776ebe7b4f6c0a51e87c4e07357f2025ffa9ef750fc90db4a4bdef452c5483ff55e3596bdfeae41d43616dfdaec693dd831f7af61e4bb75ebfa6dba497c19cbc63eef5bb0ff3be16b4c2631dc52ac963ff6614ad248ffd398a34c9635f8658ed6f40403c83ee2b9092aef9efbb51fe8c091b5f6f33e2afa9b1bf6994b6efd1a68f58347becefbb45cfa369fbef58e8ead7dbd1eb128ba68fd8347be8c7bcbc63a2287311cd18dad0020159d2f3bb2f7fbb5f9a0b04c4e2ed7569fa62d3f4a151b3877e2c268a4ddaa34bdadf7e88edc554496f4edb570dba44a3ec530702b2639b46d94da3340502e23f5b1008b4f48955a2955825560101b9a9e9adc50d1c57d1e55322d9ac1c0fb4d666c2e6cd7cfd9438bf670dcd8b3ff31e9a527a089ec5b390ecf785a3ce6fb13b676d862063d4ec1d65e18fa0e7b633a7e3f79ddb027f7843ec59da63138773fa9c73ce39a7cd32fce14fb7376cc82abd4b36395cbbae65718bdf9e75bf5a9bb767e96a2dce565a6b2dc538576bad9d43f36ab0f3dba6f85db58adf74058b979b06fff37dd360fc1cfacb3c47cf3b157c7d8be20120df6bf77ad6f52c6d43770b8047310360a77d704e1b00004824cff2158c15e091e73d8bd7f40c5b8ce0e7b1e6c791e67f149fc588f32bc6d7ab186f3ec508fb9dd1e667387eaf03ea84208a39ee39e776ef397eb3ac7b99e359e4ddb2f4fdfedea9c12c936fff62bf585e6981cc9ec533c879db4ddd7d4edef1bebebf3829955f3db7f021eea1a92fce0dd5feb0aafd6dc66dc3a066a419c5f135721b06150bd9975d6cffa987796f589ec57f2cce9e2504cfe259727cc943df1b2bb8d4b35830bac8323603a5277123eee57db556faa34cd60faba5df26f790a4f2cbdb8d34e53e7ff9df87ff39f87d720cf3e6befadf577fbb1197f3f617f6c00bb190f8b66ebec38d648cfafe1807791dc5dfc21b36ece645fed695c251066e34d686ef45fe233ff459b534608deff01ffb95c64187bdd7800f33d235ef6bc307430966df11d6bc53f3d347b4792ca57cfffa5e54dd88fe7623fdbd38622c048a0f6210c6ed362e6d3e2c245f6633f81e0601d4f29f936e833b1cf4791271ac192b1879240ff732447f893bf8b4742fd2f22f1612bf3e1dfd69c6efe5e8bd386efae3406abf2ffbd7ffbe0f9b9e1f0ef2aed206fe87e7f4bcf085ffc3f25ee177c57b8537375f4d7b3f7fbbe7a1bd61c3abdec7a577fd51263dcfc3f21fefcbbae23fd3fb6ababecdd66699d7fcf6a23abd1b7a5edeb1f1fec3f2e6dc5f4ddb0767087e68692613cc25ce0df6f27650e24c264fbabdc930a60f075970e6a354b219e512d377e5c3d212fcf91aedcbb17e351704b72b86f7fdbbe2f3b71781e14b8c410c628cbf2bb7c867a0549a3ef7bb82fff5db8bb405bfe2f0e97646ef1adb19ed15e9faf7bbf25db160dedc770507d9af2695e49254924adf95f954e33855523029a5e48c16e25aabac5fadb4e26fcb99e42167dabf2c7b7cb12c924672266392c7ebf173328674592479c8197efda5b1181be1252d836d22c6b2c80849570c3ecc4a1efe83450b03e54cd3e42d6af1ba86810fabd20358cd3b344f1fbfcc33a48ce9f33536b248c6c05f5f1ac9999c69fc2fd80b861fe706cbdf3562b0f7a484e11a292579c8a01981c071860cc9431abdc497e481718e51fc9245d3075f31763f043ffc0d7b10fa833f7d64cc1eee451167c9c37f62312c83935b86e662babee42179c822c943ce6400c9902179780674b3e1921d566764d234fdefabeee1bbdb6b445b595ff532754e9d112b252df4c6d783a3b508d8e4b8c51b36669d4352e66de09c97a96bc24f75821eac7302ddc379f71e276fe9d5dd3dfcb5bae3f7dea9949deca2f4ee9cc3f27ed7d43d55fcd2c97fe6773f3443e271cbce88ee7edb7c40b0f550076c3e1b980dd83480bdcd36537ee76f6d9d9f049d48f6501fad94924cb61efad49da96b9273ee21b93b23dafe6bc442f2256dcd7cc2b15d8e042713f90ed87a64f7246dfe724ef738793e7558afb173923419455e491e2a69dd774dbabec542aff7be1b3d7c70c4364eb431499e0d4c1f290582cd47c2883495e14ba9e933a52493cd6732c11235288aee60e7b4d5f4fc5d63ab7555e22ecbeeae017e8e2f4dbe795f2152fcd7c5d25bd2a4a68f134d269b8f9bb0f5d0ed3550d2a6cf063aa71a5b4dfbbfbefe07febe421ab06180ffbef2766bc2b65d69fcf49d68fa3860a3699c778dada66d4dd3dfc0f4d964e7643fcc9d13ce42f46592319cbeaf33e2d951d264144993b4ce69d26c1c459518cb71625e1c954be97a8369388ee3f2b6f76fde365bce6e216cda3e47256378901d391cf47df277469ab7a37c70ccb98f4247450afb2b5e6204bcf21675f5bc635cdeaf6dde16e8ca71376cbc2cf72f8e66c11f4173b0ff6ee8d71802f78265d97c70c74e8ec5733b2cb8717354daaec829f27e2754e41d1b93b7a8b70beeb78de3b8bc6b5cf0e238cb71af2c9b96e3c62d6a4edeb06139a9399adedc8fa02d37ef0dc1ffb5b9aacbbdbfcc9ba3d2f279461434bbd3f7fdfefc3bb3cc3eb715e139684e548dd9a474fdbd29a1af0cbdc5c7c5eca9bf3723f4fd6dd36067d7b8e0deb77b68be38143a1f807b68eea478f9f77df6adf82e14c78f75c0bd7dfb21c818f7fd3929ffb1ef79933cafd71e929ba3d2f7735e58c8e67cc8ddd88f795b20fe6716b5fb152a32a7e272d2da2ced632cc4bdecc5d9e7f2f6c00d6c3f665fb41fdaef6c5621fffbc4e48c9e6274a4d195244f7d19a2e5a4e5a4b4055f8edccf983b23cdeb8c368f62ac79d808fb1c710cc71dd3db675c0e41f2b8a8bfefeb774cfeb6406f177afbedaf1d6fdeb1d0a4f96dfa887023f3b6e067de1f7be51dab378f33ee7c0ffea6fdb7df7459e6fdcd94ff60dd2c912b26e6cf68e77e7b0eedd9fe7781c6defbbfb2f7f7fdf5729cd7b887a6ffcd0dec4598d5020bfe63b17adf5ea05fbf6b5ca0bb1761afb735d93ecdb86d18f85f2cf47a5917bede67d3c7b79e2dc6b6f16c1e1cc627144d344cba76daf3ae7181be2fe6bd617153fef3ba1f3efe10b8a9ca51f96c7424c953df1b5d49579fe97a3337e519d89a652e95c257385155c52971330e49ab36c489622c762f9724b91997c4295571330e49724b5c929296fe9e65ad7242b81987c42d714a5c12a734c4d56cbc1a97c4cd38244e89539253d6aab8242e8943e266f6d6b8242cb586b8216e88ab71495c528d4be29286b81a37e39238252ee9f34935916a2288f19e48f435943d677e471309c441d37e2ec79cdf6e6cc62ddeb03182accd99fdf66492be5df7a9f30197d5a8942c783635c99049240000400023170000300c08878483619e4a52e80314800d5ba8505454308c8623a1380c83108601180600100000100060188681488c642ad7063040a752ad3c42b16a590bf50cd5e8211d7df7daf7bf36b0bec324d8fccaa04accc1b6250849c3d61f63bef8f20543d5ce990b5e05af81ad0fc0f74c6c2d100ce400a06b6480357b4e809f1851e7dbdea07ccd5ac75554e63ea778945f8377ebaf6fa2d5b0958b38a84fadc526f3387843035e2e7f92f648e9069690b1200149d2622e427ed8171ae3b40b3f41fec0666a0fbaa494b3a286240188209386ea27646246bb178894dd0cf2c74f2ed303ff1f28a673cc9c09ffea470031606ed6548cb2c6cbfc6153bee9e25cc11006115e95fd7cd2c4382b359acc44107d218f4e2f256121955ee9634f20ef7fdf356dd2e69bf3ef55209a1f40bd9ff63a4b0005e0f343420226a1b3203cef72696fa95c8ffa10e4fa4630afc6c2af0507f7739594ef2ada82f5693d394c23575de283adc253ed8f37d885a0cae575632d85a70e1ac061725e00a592258e3d2a8d6a4d28bc5a25175c387ed2887ccbc33295058d99f7af3b959c0c6a9e5423d7367698e934f64eff9bb071e2aefb2c434467d1efbcf52271775c03e3063cc6344740178d517317dae07448b9312db161c41b29d117254521ca70b93330ce9cb4a584c75d031bcdbcedcf746c5ba21bcda25331105df25b6f679f1bd2560ac4277cb61441b3405f0348bd4a945b7a27213f2ba6ae9bce4f99bfd379186ee556832273ccebb0af16f57ea5698d18043150ad0d23e8481ab61d2988ac633abc2dc99b89ab8591f83cb9b87e3d0df1d8c470558ab78e32a28f3d8ae18438c7cce49942e617c2256e916f1de0658729045cf1e8f3005c97c33b7f9e985fe4340e8e8c794b157f69580208c8af7f0441a36f138e85ae6667ac7cde5e81841389ae1b3b4102d90ede8bf8ad9185bfd07dbba8fa1abb49ad6b5fcc34057a4ddd9713785c8d102ba9057b60080d5d847ad403cb28cece45f4531809852f98de5c4c6c71bfe5a2337ba85109da795a8206c5e614de3d8020fb33ba496ce1440bde8793c0f15372d718293b75b1b8e5f84f453ed2f56a562157b7338006accb60b22fd4d7d92193d81a860820f9fa5640413a4404a5c257d4e69375629a3d1903bdc6360146242f90e7a5ef6957e3876e30eadda77ee27057dcccac91012a75c5b2c5e0c2cc613b84daa044f80cb952d2fae6d7970ada5b24aa5055d17c4e5000239fd42588aaf1d50d1d0ff3da06826bee54398319fb367818e11cc9b86d4778ba3318464e6d39eb9329e255ed323d1b99406405258ad6465e0fb9d535512cb80a526ca8e99bd1a584f2d8526f13f8d46b0d902e6b90f5a633d21ca64b5c7bcd241d184f169b88889adf39f2a20b05f844ee8432d1256f2eb08f3ba52fcf0887e45162f60b27fec7b0ae6036e6094097a8e093b2449389c66a38c3a3120c4db6a58727d15a036036e6e3b91370129d179a1e9f1b0470bc9637538827b72a3e0d815f4c2ebc2a3cb43f89218553bba6078f51de1a0feb9780d07e9566378b2f31d23388e9ed23b9fbfd969d5141005ab5efb73966850fdae315e233f9ab5f43ad680d0e7b6590c3bac4354b472d90bea8dc06310111395efb76d870b03f40588c60539e92dd260bb0882a5e39b9fb01a0a802a6f6d17f62fe833388a4dd8402cf640dc2471a0143813970d38161126584c4cc891d4095916e1bb1c4fae019d987d38cec926bc43e9b661662340d9bc4a8d733772a457d6b5ee21e3154591d4116d196d6c8e0d8bfc818bc2ae2f8a138f0d457f17864bfc36adadc880d64dfb6f8a4ee5f6738a6f5cf0d6b8e42f616047d58821e7226dd8fd5137952a1c328ee917f263bbce3bc567b7c01a76640d9a4a09396fbbd71a20fc08b137f36cec5efca36163ef1c9c4ea63ac16cfd5e3a8491be168f1d9b81f64b26ed9cbb9f22bed6b94668739e4491de202fc2368fefb6645789853f7ea9ca901e144300bb51a9e2c8a935a433dbf43ff228efa35e209699f3e3593f99da7c95d9a004fbf33e77ebeecc266fb4ccf4fbf068f724690476a00c2f0d9474ee2b9da3a3f838f7dde69383aac76bd2daaab332f66d912cb8fe6eafd1ac9036610d18d236b50001b8cfa318fab6f37175fa1253371679b009024fd60836cac6424bbff9b08b054c5a2d169f725b4e72f291ec1145eef6397943b110a567afd7518895bdc5b34263cdb1cfadd73cb045452e5dadbef15e2c7e717f4792d3d2766e56dcd9623c9be12f9538332d28659463cfb4d9ff0222f47a97adbb87f6ae4ff4913e6a737d772d6636420d1da36a020db92042b579d74cda03cf5b1e1094245f24051842ed8d5241a573564f3d724b4f9cacb43e18ad04c8050a213a09b045e881c2c64a863417960638d48d7076aa4a0c7409c244597a1a751295d7705a3d8f31034f7fd6d152d134755d8ccc766ea862a0e1fe589041ef47b487b7d1bfca298bab985404b336e1a2a3fc2a666ef8f3f235586904dc0cd628c2e09770d416ffa0bf8e1ba4e4bb7670d56383e1e28ac9e23c63f3f2a314672f72ab1410ebf61725a515a0474ef1857c117448674172f61653be1c2d8330014a8f98447ba75777ca8c65e5be0cd6edfa928522f5c62f10dcc7a5728929ce06b6110bc326c8ca3f92b90068d7a15a02c235412cef5621d9e72090c3306e327216b1edcbe909222541cf89cf084c7ff905c92be86de4cf7148d002d52a92bafbf1e8e2d21a38b8cf02cab61079668a3a3065370a2860ed0be23e553247a78d10709f366372e0e9ed20c253c4e897a8aa844a1246078a9a3eca6e735c8918ee310e4c425acfe099c4a2e8e662fcd8baf6b94dd32f61085efacf78c19f574f3e85afeb5e657177cb5bcac69582c332c82bd77c5783c6e1eda3a7e3e762545ca3a1c808ea8dad237f4332a7ce7410f3fe0342703154b4abfecb1f9b8bc74b9e1415a2f2a44d8472cec97534fa34a8516716bf28cdd6187a159cc94662fc1dbb245750124dd989ce0a34781c645a948ea5f5c310b6dd30099a3a6c56c97f0a6ff71173ba9d26640e81669bbfede170dad0b118886019bd502fa7134f0d621b7a6c3d159649057d12a4633f5c1304ad82f90c8b2674763c0115c09c9eb8add0e0463f02156125f0f675faaf0923c9d4d15e20d0806a75ad7bbeb225bbf2968b8ef10c3db5439ae12f18a22b6603ad78173e98a1a8290a0e8ec9b0db9edfedec9603b48a411d9c479e174a432786012babfbeec7e854baee28c78c2a0539e7c564348bd61f444720453422b925fa372b8443225bb0b6ba9594267621009a9cc42b22be415801b0c551744311f8ada3346488823329e30a84ff4425bc804ae2c5fc4442e42839c494e6ea79a75db22f1afea10d1aa48fb6daa527986cdb79b648312be8a59f13205c5994bd4b7ba0a916a648956a0c5f08d27b6ddf752035cad46e0c20487ccd2baf712517e27ee5a5ecfa6fa10903942c0a810d1aa550da664c63721ab2806881c712c0816b62bc95902cdb4dd006583517daf266ae77d4575630590e779f9d14cb611c98761199c578c3be1384d21692628ccc37f0d63bc59a03bb9bea0ac80aa7975364585ddb1b3f8a57455929f81ac88eb52f4098bfa0f3588397250313d6e9c44c636ceaada743363d0aa3079f5bc248a6872bb0810d4d5946bc59d6fda2c8d32682df60f92c2efba840fa8cd46432a8b7a48cff7826effca03bd3fbb2f0c018c1f6eb5f3f52ed01fa3e1b5f493432234009b68c848833326b606f36afd7d5ada02b3d22db42eb6f4c4cabd9f63a15ad121903e0587200ae2e60203c722017fa087f4e845603c980ea7a1071149342aab7c38143831efbe2092d9cda84929f25278c34faf82de0101fc87acabf99078f49657f7c7f7e3b8c77da963dc5f4118ff814e8b4268dc2330b043d12af33c14a345dd9c043128e5de31300c09221d11afef8b71bfc49585daf0826369ec2da6d0264ebf75d3780381117d12870d0098dd8bc08898feb20ac7210b8b03986298d9c0fbc8309b9c073e9c8183e324a756e4d7320678268191914121134b669bd68f99b067e018389079953f4cb5fea1f84886ed705b2b0cd57e04b50b02836478dd377d1711b35c28e5354323d09891f9ce0a88ea3f60cb0559e4f11218858ea04dc26f91054155ddd75b53694bb0d338048b204a6064d407de448c0894dc1f545b25aab2cdd7c87fb60d3f7830e14000a2f1a6687c65eb3db4e087e23d3e5198d562491c055029847f390a3b63070dd968f0f3e3f95479db6f25c76ca1f84661bd43c5cd21bfebf3c7cf0fe0e8ac478df10393887f7c12b59bae838edc18aa23cb79373f03361e0abf1e5172d0a56ce294eb2371f13827b41420def06362699239d6b288b32bcd0be64cbb4b2754ba719d0bfd37752257a952d9d6047a985ac37692f05ed9044c5ce08a1695a5c759d126b15c74b9738b561a437b7404c94fbe2ace6e056419e5e6b7bdf202614d6ec3261da109d83b6c0a8425a86d335b4ac485d1a55f7dee499804ddd55208969a90a7c00b08cbec11130a338630961e0c9e22ee9254fc71679711629a815c9bba665fa4afeb5638a1cdc43e9e367b5c58883d46118fa401bf99c62f6c60f2d2c50a3b3ca1550fdec0fcf9fcb7bafc1925f206c88ef1d88c24c7bdff39195d7bbd8a112b8517c5f601d0ae385156b1bdf15d05a028d415a21028ffb6b401e80c5c71ffc059bea3768240f08335bedd5f8e6cccaf30e1feaa6308519d69baa6c455009d1a7ff38a8640f366b53eeb579161bb6287ea0a77184c3f8e7736dc6660e0516855e9a77068cd323acb83e395d651bd7c02f6a808e7ec8dc7722e2f333ab877b2ead8f5f1efbeb193a963d0530fa6bdc0c0bf9c15de844370394c8947a8e6d3023c439789fdd528d92d9acaf483d02279958a999735626d7be59717075729dc5f951ac445a54da468f2ab1967b47ceb26d18b802b96d105641627e4b661e0580164c6f65520246f64889cc80157f8d23f6f6e03f3517a3532e88b9e4f8486f68f411f116694a20f349ae7a52499948981605956eab8003d4e469d8419aab5c5e37e0fa0b5ada5b13de86768475171decce00e7e38c9b2c1bd2ebfffe135fa13f3ba8e4ab9bd2e45cdd23ccd0cc6ff84fb56454e23d8b09439069dedadbb7a15e7ab91824b9a0026f7e46108ecd99036e261e297aea186c3cc22953a0239f13aea82744e2faa51917831308bc03a204aa968eac832d99d12d8ee1c9c5d046627eadae7b086a77d1243c98cc199fb644c5d158e5eef2dc476e9dbb82a87fef8bf0f818b80b53271d8521d8ee09d1fa5892ceda94da4752573399095d5389a14a4d5718f268706e809613231c1f97d2716545414500a3b04d6e189c1c64e59c97a71a3022fdf0ad9ee6097e913ac39d2f904f3bf6f6e26d132afd054879674c93ba0b801c0d4f38a6fe7bdeb18e8fd176980aee10f40c6a80d16aed3c866dbd0cdc4cb76094b3bb0d0cd12fdb2a8a51043fb8e1c295627b18578a2ce2ec812725468412f566a3cea9968bbc78f4b4b758b666379b19fb5a697a9c4bc4cd6979312837d29ed605249647a9431307f7730769aa954c0043f00095fc796aac132bed19e1243b58c51dd086c6c337e39ee726cbb24b409279287dfec87502bd6578ce791810242098869c4993dd0fd58da03bbfca14b582898f207202654c4bbc17340641e35d2eeafc320c3680c846a859768c52518f2071292134c07f86628b4c1b64941922b486993410889e7e0ac8a9d4650accb3feff576e2aca57db7acfa070925095ad271af845e9d81bb5fc4c2fd793eaf67616f29a02034c5d2a9bded5b2245a120729afdc891fd110f9f720c492e7ae7c3601c2e066e4cac3ebdab9dd901a8ea9eb4cccf9d5a58eb0bc229c7d12891d40df4a2764483953d1a3e4c62d3ed8bbde220c86ebf31ce0d4b74abfb31372bdec7983980ff1e1e9c20da1e9166066aac4a003a48706b71011552a2df45f81274b87ea42f3836c8520158f071ecc4d87482c7fa06445b33368a7a9586df7ce6a7810b741c58f897196d7626646d03c961c3584e9ec025078eba5a0fa1c837efeee0835b573867efc7032fac8b0e2b63ccba77b8d5e853ad531abf6191d9cc07c796d4245a2733749cb0da71116ed2f49f95abeb64a19c1c11d274a77061df6f6cd512e198cc725db210512b0ce196e3f149c431114534ea65e26ad16eb6897c09e6b96644f2359abdbb431a77ab79a3dfdd13c0e7b4ccbf108be5a32fd752660711c12b63799dae8e1a310d0c621d40bc726f106a39d17b68f4c12c0db142f2e2bc7c0e6a080381814ff0e89683724e72db8a0f513fdcc592ec56f2963c739dd6e688f5eeeaf49033cbf3b196a18d227b9d9feb794aacddde479b8b303ba34cd3f1c57af64ac5ba22bb2c5241c9e78de0d08c8fc60686652a7b973bbb5d110db9832940d2cb0e4377a759800a986d2667b498de36fc6056fcaf1dc68d2b828c2d5a988003427d253d67f4cbe62349515011720c18e2f798d7e60e73dfc5a1dfa5e4b257e0b4c78838acb2ea81372d80dfe0a67f1c3f773e2385a0cd6958eb5e2255118a1cd1fac3bb5b1d305a96b2224703807842d87dc192e9cf8c48ef57dd85cd62971f4a677aca8d6dc0b994cb14c90c5aa4a47e682cb0409514e43c1e0a7dc6cd30c5286c1c5e70369f8125f3a9f2990a9669222f71c98a8eda7604a8d61a179b7507818be3d617f2cbd9474213839a0e9af851b61c7c64938989b7af6647e90d506cbf7ab3db4b7e6d00935785ff1d418a21b6542213020f0fc194dcaff38e513245ea769391987a3139ff1ce8e6b357d67a030db8fc47fa020d32e8db99637f4990c4691164e49990ca51d4f816454f63182ccb7a150c075430078fe0ac6e5416cf2985ce82d89fd819666055878870f617e3e8ced608a1843326b9b694c0afa7d238034e930770231c4dca905a7ebb76b5451e881beac6677bd3426eb05108537cb02e423c16a93ecda3006bf50528eced9ac8712b149e3c809187a2d786756d1f93c7048d31ff129e89a626707973c4aa0c20c9a3eb59d62190fe256942bb6e31c0cb976d0c1951726cb7604763a65f0fa21cd7336aa81c33ffef6aac29dfe12b2eed46f0df0124ad97c941f920e9ace19c3fc2b9b4f65d033ef192391c56b09f3910dc1cb6b28bf5004430d81c1598762bee819b22c0a18096d4cf3999ee59c64f20221ca2653f42a16bd3eb59ce5cc78d79a182e6e54b29d8ccd259dca0e2da1fe470a07eadf6172518089408d7fc87c7047671be5a7bfd6f327d172e77fb05ca3ac38c9e202686e1cfd216c67a70b047dc54a7a634d79d616f0aaf2956e61950da4f263da26b75e119291d61d310de4d7e14ada17ec1fc1fb3a3cdca9863d4d33fbb8a16aac49830e730e65c6467bafa8da14dc667d70e296f14aee6f25270f03c3383137571a7e6d58a2ccdc8dbc6653e62bab1260362d2450e01295149170abdc11422a72746b7850b811185afb06685671c8564ac7146de8dfb3125cc16ce06fc3effa16b5a69595225f545184cb6ec2f11dca78c1b7c6c1ce3caf0d878d61ebecb41270604c44eadfb7b6156ee2e2290f39f11891a0d103d2d6dd2c4837c0f56b3fd2a46ddafebed1eb2f65f35b919c7533d0c7e6a2385372fc3c73d380b80aea7db7374177b682193592378c76aac894d9b6f6fa61e4ec25b7e79d0c8064ad4e34d5b9f44209c35e225bc3db3ffa812875b143f8d91905d0aef407cc0220da31e5594e1316d4ebdbc0ee34f1cac3f29357bb89c1df2280f9e134dadd6fb29269834288653a3f6721deadc2ba8ceb7c546a96ff6fda36061f2afeac83803fbb9899487c33a9bb9c7adb7b5d53340e4dd33a153cf101b46042040524c342c2dc9a3944648baf2bb81455945ff672eaa41bbd2152a7d5e69df7535960a298f95e90975bf9aabc63d94fd459619c34ff91b371d33a8b42c2d3a16e5fc17df8dd33a293a79bc680283c2f098075891570088c0b2291ca41a65b03aae2b70487eb4790a5c4a650074c369a15b65cce9125fc6bee9c00a2cfb6756aaf420a0e21b4c43f026da8f604762b6324a5330261a75ef3ba81d934a4f4a29df550dc8d503d6c914e9442a604c3d8dec888f804dab502a7996d0f8ef21438dde2ed138355270b7ce3e17d168a87d57ecb8ea45905931002b970ad0a8ae862a73f0586ec1de793c196a732e0257f9104fcfb7c9168470680ff074a5c182243deb58d49bc9f62ce7933d6c9ce2997554d0b33c40d51957dec9a40274fc22556841dca05aa14dba1666d71857ab8c2e511d72b62a1024296c8fcc95fc238288b6d9c5bb1b3f386f482a0eeddec14ae93b9181e54b39651b21f8d8500c9d91f10cc201df04bbde2d93b1cd98aa79e482714f8b54612bad201e5133ab8aa43eae14c9548676d8aa860575fe911394d7edeac9737d459f643b1514c81aa37573c89a89c8d6649515f33907cedaed466face2fd0047f5199fe2dff8d4ac45c5d573054a2625333acd73ceb7dc15e38ea8191ac37d10416ff76df19152090844b8e4480f4d83c8a822c74356d157411e6c84ca098997b26764dc8192f25dcdaaede1d91748f1d5068d19ef9bae8a2c3e1133476bed9632a044ace47a1455543ff201466ae76de2f4ca816b9061dbc0e5d32d1e3b3dc8462e188f455e5d2debc826d785353cf8e2f066caa4e8e054834b832fbe0b19b4b82670eecb89fe12a1fcbb4e699730ce02f2c77d2cd0eb57fc14001cfebec8741b97ede1d8c1bf39fc6207100a5d43c4b9f1cf61aef3e422d5f378205a48f3941766f3233fec650f0cc2d616013235f5d2c97149f0aba5f1f7bde07d6b44f6991414f270985df49704aff5745ce1effbd2c5f92f4b32dc50c98ea029098a02cb925ec8a48724f70e7657ddf36ca7da7d73521d056a8542cb6ed18d1ae2f7b529554e923491b8325dd549e2de50e4e65169100ee77cccc893752f9a5aadd89cada15b8d45944cfa0d9b1c32b92586b37619e9b44c8eb4af2e79abbb4849ed3685ff03138429ddad8f4c5724ed2458e3aabe5f14591047f6eb3eb09e155ef257e3aa69ea7ddbfd709e2ac3a1eec01bad88cad8226bf21e38e1a047245cbad9f968e5e3edde01e5862a939d2cd35d13603032686c2dc7c13a85ac3a00586b08c14146937d9b6aad52af35ae37fc5830e62a216b48f750b9c3e533e35a660a094a66cf4c6fac77eff53ec88b6c182daaafbbff3beebaebdc0f01ecb298e72358053c71d72ce150a4e34c9ae497f1fe85ae52566c27a8b418fa54f5f466c8b4e5dce40f9a63cc65aefef9bc840ee51b09d98d0e22c2de604d3e995a1b900d7d0269180f5a8e2ade8288d2e938ca49c1fb69bd5d8efa37cd156839f0b74f70b79cd59c6c92515a96328247f360cccd77c3358f5571c88b2637dfa03432ad52cdec3240803f11ff9aebb01770c047a379ead924eade479d4f60e5d982b6a90cc13442633510b110f34778f26d459a7fda186e3bb2990ba56eb0b19a0989432c316d79d04400d00daf87376e3b20a84299f18c670854497d724cf424038e1cdae4e17ebd74248f6b2530d459b63124b8b2972fae762fa8db00a04bd733ac1b49238dd3ce1c35c25da322bf4ee6a967ee258765e8103fbc8a93ac08b32928261949b2b897209665abf0782847a5ff1da22df481d72c1e6ec12516c29f24dfebcf76730845eca067e986f24d2f716226fceb66203279526efa827421c9b56d534f14c39f742ed0ebe6e8926953578759110c533d3c9a5957827da72738513e766b2d8cba3acc0a01d9ce64e13e8608ad98190e34a2ff5e7c870d3d8c7b603774c06a61e565bc03c7b9875ceff3849fcd78f89d73cf8f5ad1e796d3817b65382a9d9cf91388ef4c28f1175b2d46f8804f28e3d0c9acafde808c1cedecc53e46954ed6aa9ec30df92cffb1e56c75a4c8048dc385e364b14e78ee02a227b313f5ebd5dcac84da9b9527aa81754265e2f546af324840f43e9f5ae9953e947a7b4c949f3ace2cf1713a8e383d4fbcdfca74bb4c40ef97cb887ff06316d712670455d8fd5cbfdb1702ed1cb2ad7248afc622673e95be4ff40e16ec0df4bf549441a4b85bad24a619368dcfefc5d09918a3e16e35af806405a3b5aa82e862485c767f778870473d666e047117192ceaf72115ec9b5ba16513d207513be314a72ef54c8ae50cd57423e1a0ee3dfd30b3a2d70e41e4373a28417280584cb640269b570e5ff66d0247fb19c05fda74f60031370a73f26b6ddfa527f4ccf933ea8ca2913aca1bebc991489ec6e9d6c25c6c330a1be37e4bcfa0918eb7303c14530270e8c52cd5d0cfd6338347ad1b53f2c6de5e236e9bcee6afa5253d7ff791a249cd1625aa306fd8bb5a9568941b34e348b44f2e3287f33151dc2b61c15d1aca9d5cd0504129f1702b864bf22c0d5b5207e2c245b8029f4719d0306835b7d145e8740047f7b94fbe7d0d2f8823b24994d3bf0f437a361c226156d62e2c52291d632bfc22985a7702dc2f4b3a25c32d7bc3491c0a103d9aa39a8f2f22e6d59b6ca2daa88f693929779c9db4afca45d83c40277e43ff2e43b38e687de9765a4d3e396dfee2a645fefa5f4791765bbf091e7642984842ed464c8d4223ad421ae5769ea91b3ad40f7468bdbfe7e8a8efd78db033dab553bcc408abf41d5482e002c890f9bebb518711fc8c921ddf3eee632a32d95962dcffd2f6a1b5e40796d8c668f49ed5f44da5552848342b2fe739b101e055ab0d97479ad635a969b29189f5f3892223a38830e63812b584c2289f29dbc083d09f77432599b8228ccb5e180991ef1d598b35f6d725c8889f556f9ac1bb44de5c252c8d280c930bb8573e3e558762985d7a88784082ad90d213bc1d638e0949407b85800ac90920f33945d96d1c7f58c2303a4600819649d56b479c61f7bf0ec29ea928ec66d298e5fade89d1846c547ea47335dc1712bb2620826dfa452122d239dee205eb8c5909ac04dfddcdf22fb6467427aa742b59c22ffde5bf6023f3ade49604a4ff1c8be6577bfe8921fd974ee2fdb65f234ac0bcec2243b16f409e1c98ad256ee30c5b00451111ec3048ad21e547240d08cb91e060b98548d4c06a2cd445d720adb76fafaf64cdb7363af53b33d80501a565d31417874ed906f43a419f596e1bfa94934d64f1dcfd5879f5623a9ab64d20e603c80330d0fdc793e6dee96e84fb5ee853d11877f4f97d082b04c8b3eee3748a46c8282ac931ac3123a07a003f10e5948fadb9837221e5354c56aa40442c5ae98078d2a02d2dfb9a22a1b42b828e2af5d87e21276ddd0ba8111488fa426dd77eb3bb03cc9211ad8cae56bc5a1be0bc8cf51d0178f627aa02cb89a692c040c4b33134b7011f6af55ed8088e60898d66e792ec2872fc3fd79514b8eae2ed92535ee228b05e0940a9c812d2a2fcd994326de01945a84460e1edb8aad8dc803a54a237f5f28d7a49586daff2e9205b4967814fc7c023953545cf49effa7f8a499b50075de8e94a40c91fd8cfb1c4f03a01bb66a3cabfae2191433d2bff5f0495ec9bbdac661f3d102f814226005fc466ec0e31f78e6f397e9fb1ba247d14c6921cec367a36e45e93432e5d8d1c0a1930fabec2b58493596d8c930b6446b2a2e53f536fbdff480852608aeb8bad32acfcd0d72ad1ebeb43758e9bef4b8f3522d56c7bd35bce7101778755f4ba11e07bb13a7b0d12d3cbdb142d001d2e31f6dee44da4004b77d670aac28792867c740b5b741c8957521783415bc8269f50efe36e8716fd5533a5a2e5442d40b037d229c249db7ebc745167c18af7b51fc6b26514661b3537a0036cf76f749ea0a3b68ed855521ff4441b11edfcc79936dfd9b0139d261ebd9543186488a4803543349c6be934545537fa8b21da3326a29f8734706d6479ca5e6d95803b17fb837b65aa6c444d56ccc4b237ca8d6719219f3971cd910a41489455b0b8f29c50f06570d7d8e8297451bdcc408ac26621a8c906d54902054435fb90b9e1c1a82275901e21be20d25bf6f4dcd44a08f6eb3556974d08eb445159224a6f1e41cb636e87b859d83497b99051d344ca83ec49f7d3208a1736ccca00700974d4c86e2a6ee4d6bd6c1492f7b74ee2f6abba680c0f6c2d847a45b005fa73e9cec6531600b97f00a44c1c765532652d60dba69540ad060d861a0812827444362ebdeb3a8fe7e9c8b2ce60f4f02f47c9bab9240d3883512687d79a991a209ae1ebe8608bf9706e93fd8c79223939f147d18b12f7c0d030d79c3ad931d08766e5f81c3184feca0d230971d4439b81d204ffbc164584bb9144362e5ff8d610a65f4e78cb09830f511238d5c83204344a93981bbc9e2c9dc8f573af9683334672e2812cb69497c413ceb290adbbddcb438df38bd8adc1c8cc73ba2ed03c44480f662f21ce4a6adcc651fd551c0cfcf5bec821892b02e26ab92314641444e636cc1dfd875c3b1c50ef32f7b5670a51c445470d4749a2484511d4171346e245d15ee33642f3eb367eeda05082ed381b446010dcdfc6ef64c20a0270acf66ec4ea8224c6c3c2113668c43556bc1037e867a482db29daf30befe6133f2cd2a0d4a10d0c2fa1b0f11f2a6aeaa70becc13e2af9a60b6c117ab0549e2e73190ce8a16d978c8d90fcc44eb5206ef4ce12fe57c0846adc40b1c837d41e38922763ccb5fe7569b31120ca85eaa34111c297b5a2c13b4be9f9338738373a50f30ba73e30689d77a9b3638361bb262cff134cb3c43a01f2b174a28f8783c6d789fe41466cf38a419f8c031b665a24ca7577b71ad483daad88b6e6006db53129d8e07ec1ea61448632de81e396344a4f53a9c4c0d5dcb63c6a09a4a454b340d36d5ca20474020097d6d12db2a7ad5f61226acc83d744fccd8d55dae3affe824dd735eb969205f82aa3994f193b80ec8f24d21f11c188fa0f28feac3b7c455f01117661103ae2b6e1b99aff00678b4317ee6adb4a642d0d70a65d4f23629416e662bfbba02c32c2f54acd02e2d6e24a5cc8682469437e5242b3ba01aa4de573cba28b32f476fc3d00e1a4aeff3b94760a9423bdcbb05989bd8a6bcac7ff8540c68531d6e817097be81929c126bc308f591c4670dcab68b39f35375648b8dbaab36c837683d935026d05cfc99e28615af44e56833852894d49efb8fe064c6438dd779a1c37035c454ad4fda3333258bc5bb1f2717b6405966b3e1fd5a3edad8a09590e1d37400539f44824aef47692f3494b4679f60739c9ddd87cf08f1e4bf4c2e1888a43c51dd9ea4404c450e3cb16d0aac8899e4954f4dd69bc35886ad8fc63a57d92d90514c93e93fc9e6e97e6f8bbc5f31672a78df6399148e20f1207f4475882e6aa76c7234e74ec0048fad89ef2480fbb8c082eb13ec26f08128e25536b4761fa13d51aee2a8e820a7f77620df8470afe7bb98e2c7d9180334f1e20ad007e3ec4389c62952e6477308716ed1e889646052b21b223f7cd98ae9637ed955155856cab88f6383342e89856ed2869eaa7ca6c085dd1a1010b2e1ed7fb689c1c021980c9caf0319d70680abcee1ce9d61b861a3421416fb04b36e8debec4543a7e3f4dd80875833892116071d9eb4ef7ffe604098c75bff6eaac46bfc5b3840a33f0033a538687e0060b1018c174be6bb2d99a073cabe1e0c12e8ceb1d53dffe1eb2be7bed9a967684fa84cff07c6e96c893d43ad32e6574dab664b7e6ab8b1a43ada8d9a6df9662f105f75da8ece71508f772867d1ee50301d20242192406ec496eb3614cdf82b82afa570b50106fe506b1db440d97438f392746aa4acb4a7f24c233066855017dd965576810e34b9d6003698a32e6c2ecbd3039e0fce83a6ff10d94016e5e5b75846d6c76f418710e1a7bef4c12bdea600dd70435e20fc6081262136f852194ea4ed0f27272292b4726587d4ea7c50feaf37dcc41275ed79bc35200d03c28302795c9fce872e2e36e96c00f50d728d87d5a5ee0b99ef8f97117f1adc4447dc9ebd40860fd9a00d2a0d72b452762d5879ca1a4be4232443752612122805b06e2f5cf0da123d48d5e9138e09fb94f124061dd5d8d81cb1fe10f3852f924175cd11431eeeeabb7c695545eb9eba3eef7911fe3dcd837873b3710761195bb24cb338d3e9225614c78693f911174a249047a37d1499e8f822122af11a0299ec4a443bbb06b3f7d49f0d6dc8dfddd5080d28da4123a8fbd78b69ec2229f652de6f6454c07acaff65b6ba4dca682f70cfec82d38b654f746799ec8f5a4775aea4ebb3e829e30015f4b47af9550c497740c69c4939da6327ab0106290182689ec2e864a1e2b322310513a7d374b6ea2462446b61187350fc6af2d73a31ddb5b1828634186b2c358d183c02485b5417ddf06619324afd3986d58fb8e4615bdda08e8c71901c708d48da41d8bda8bc439c588b4c5cc36d143a95c4c1544df85e80d1ef93e6016b3cb9ab83764c895c73fb03dfcd41feff6d9c0781c060e0b8ad1e3b4f4dd9870c52ad88d8e1d431c8eedf45301560ae6e20130fe03829faf92460c22d321b2a47cb30fced6a5714ca47b8df7510fd9cc4752af47cd7207a9495c8ea6bb1626d95ae11ab97ceea7371b613b3d45b0ac57bb28318e06774341fe468bc078de51799f7ce28af6908926ed6025ae33ca61fd35f6a8cd43492426afb43629f1752235e3dc518fc063b98d5cb251fed6158d94f33def66637bb91f4b85fa679386e1158afee698e824131042527291b7c6cb4d438ec09d825d1e60487f86c0981fe2009d986ed3a85afe6d36e56ba86562fac5059ea59a432343437681151fc85c9e9aee0ef17678a406c60c55d1fd8ab19287731d52e0749a69253b4cb3f39e4888f91110d42ac43e3387a3ed4f024bce886959deb1ad2e6a06c8020d9196e42d9b1bf872e200ac14144490d48d34d41c0a14f2dbf2920c5be2e07712594231f491cbc75cb2863102e636157918ea6d339e41435f82b4c32ef67b8dc1468a341b613dc23935d11a294e9f66a9958ca59d84de43eec211334ccf526c07cbaac9600c8a1070d0107c27cc9551ec13a26a0b1d4c71337ef290d49d21731a20e02e0b14018bf0b9744b44f3233e94cbc8c47059abb8d6a130f5325db97598d17767b991667d88e90824dd72ad3c2cd2fcce7656c72c733f1c7d73586e855a57dfe5cd757951ce822dd3da614d3bcd5c90a19df98668296c2b54681b63901a8720638b476a2b3d81d85f15c6193f13dc75aad51d61161b2abaf20c9b5589f461aae530b729c86a805bbe0b427e4575b2a24cea685b913c62e24a66573cfd440d811406b0ec19d44051c174caf5c976855dc37eda56d50f5555ba3989c20ea27999ce9d1fdc0e5b8aeaab1a9b8a7d77426e590266bfe78d0eb61e1f1aa9a6cd920130abda02a2477a41ef9f435f46d50d235da1e24680daea8976502cf93f9f8a7c0f9b69b7d0384dc9dd26dde860cb1370fe4402f3d02682adb4fef8838fadf3a53b1939db36579336d3813e23700bdd9f022ec8bd78a1f6cba24acfa570b69356ff1d299b5db26e67caa594e6900b0d3a81c1074cb924e27d4d5b4ebab8f9d61b9bf6f56902a2026b8462fd9e37301714aa003a4f46a454e98727ca55af0abea9cc2e6f2e565afeb65b23b5a3b8dc889dadb2fb127db26123ec114f53d890cf65b7c058bf6f8fa8d8107dfeb083d1be2d484d527155694651083a6b7668e1a863283315a5f92323cd439b4159645660a6317278a18be29e8c40631fea4d80b4bef728e044328890bb56907a3c2d2c0adea85e6ab891df067f4a43007e03a22a217c4ac54ca0b9d97d9e44402240ab849a32fe80da56f936f5a083a9a10f37141af6d0aa3b4986219ffaa3c9d682a0864e380e251a9d8be0735c1ffd315452f3fa2417032ce2d4a1a6f8933771f87ed531aa68caf46759fb0e9a4780a38d35abe24203c577f887208843728ea420265ecea3bbd3c75999753f51f5037c5bc8ceaa2352bf521ab03330bf4b8f4108105d8e5e731503cb91cfe4cfb7720b520c1589876f2df0adfcd800feeb9a446679b9329c6b64d5b300adb6998bfbe93936f7d9223c29732f09f907e7305d3bc66c9f4e1b7ab4ffc93cc051f6d2f612ac4983c758a324cb31405bab2b3e34662fddc286bf0caf6482386e774041d7c7df0a168f326d8fc1ecbe8628520d2eda9a843609069934073e1e525e8e37e1b93536adb7b7c55607943237fa142e821726ca67d40a20dae90f9a9290d4aee5671def281c4894a9a42e6f2d471911d99f3aa2190a7d4e0c0261277404b1778b9e00e854b82ebc2b6fe2a2de0c1725f097551d294d7480df2c017e1f52ede7220ca3454df3ed38fb70504985661551ab999987411bacafbf53daecfc15c17a825a87e7fa81280964a1573dcd38a1f069fbf8076934b430adbef932c7e15dce77f24f398d492785646a5c37b7ab600d608a9f0661d6e447fb4dff1b8ba4dad0560d4121dcbaa215feab99cecff677485e8f653b6950c2f51b9a7e3f99ad358337757d34a75614e67021b3aeb84759b486b4f7e7571b9ddfdfd158d9c2b182f208e6b48742e25d7f82022f86169503c322661cc7bf1a77b33350c922dc0dea20042a317e90b8245f9880f23c8537c70b969cdb814a6352fdd14e6f9142a092f9f7565d32121f3a773f8075d05ff8de09a7ee3e951be3f47f820611bee9149f8ff5aecd610b86030bf94ba69c7bcf1478a79c540deef1167b901106a1745d557cb5cbe24ed836150bbfd64f347ecfba6f92b5c9c5150162285da3ba071916cd13073f283c861b2c2d3c4dc9246ab274f050b44476a82c7c702b6139c9dddbc5033e80aee34bc0db798acc117ecad0f4e9ed9d8dc75411a9300c63ce2e509501cd50311b93e02e96a5924a16e60050a26f7566f1441310b00e991e8bbc37f49e5c3279544a97ffe6cac54cf429faa1974058ab4fbd807b7e27c147866dc48978f38e9b261b823fe2077627f8040c954b1f28c4fb5f42d921ffb2fafd147a0950b6b888f8547c67f2cd9a3dea1e714d7cc208a4bcfb98feb915627a0716a32c94a3ad7c4d6760e22381d7775469f0d28e14c13381d8349d3cc69c9ee00f9f27a887fab91a06dc06acaa836a6216c5a7175ce7175d625adc00d4cf03ca21fc64b69ff0ea16cbce10cf20b7a3ce38c709d6813ab61bcca2fe4b242664b186d9cadae0d8898aa1e0d26029fbebdaf36eff9624f6af348e9b08531666e0ff18b4961ec078db2544bd35245e200ea0fb040cc63a46bc0813e213c1bb775550a6c73990c844f0c6a0f27ece3e82ea7bfa1c14b9060c1dc8bc20b1c2155b669ba834659325703e1697245ffe8a8a87433c65141cb8073275d60d61f2ee16f84e68dc28f7376ea8d21e892e6df911e93f5f216c04b64627c4244ad992995458f3b4812b3e708cbe51f2f35bc216928542116a609fab1804c18b1274c5456e8dfdb003c84ce8e2ea2cae5a08ed33956919e39b5f71fd5797554244a0f4174177a90d2b7396eb0370e494ebd6337d05ebfa55824cf1425d8bd045e8987ecdad43c06d143972090512b522538148b3b8e03ac60ebbc9902c7186a382efe0197ac89695bf3ca404a98c455a46b553ea190a768f27966309f77e2600b1b86b2d4f83bf636dd5f403d21530f502e3a47c7303821d63d2316ddd09bba67552cb878d083470c55cd41a5fd40315ec538440be5af0ca127b4cf49315031e400882846f9721c733313457ed10d7172bc9fa099a865919ed97693cf33431ba9d243d9bc7b32f412e9d024db477d4deb0aee457cdb89478bfd7e5de856df870e4c10b49d97c472d00103d5cc6b5e92f3713765d78604c3f897ebcb6a4485b5d5c8b684431e0c6c7142a9378cec94cd443122015c91c9e32d95993d210a712c2250135d2e67750247af735a0484d7badcaf45858193339ac4b04dae7ebc157309e15a5039d3d182dff2d5d6d1af314525b6aaf32823e0f3862c0f9b3a81d65229dbc368ad537d5c096e398dcddddb1a1de07aa9446b1e792f65d08edc8e517c3728bf622e8ab4f3d482c217293bde5de524a29659232760bfc0b090cd89308afae5145c1a38a82e7a982206bc57eaa4e8eaa899d27543c4860086b133b4fa8b027984fad393a4fe428d104f6045bcdaea9473ec31c55b5b5aade568739319563cac19ea8ca70253402392b9580d7870838c39b24b08cf579ab85f99d10f36b59ee3a699c4ed2398dd349729e9c4ac8797d98c0d461e3744ea36412182281383049a372a012d70974b177657344f23730c97562b99b22342ccb45e7320866328637310571ae13e81271ac2db27d0f065a7e21f7642f0131c84d39049cfde39558ccdec3edbd040296b17c7ef6b7dc477ba3eacdb009b7acfacb30ee4117f916e7234e8eb4995648a6957e722e21e7842e8580a967d28dd88a040286ef2cd16d78d9c1037ed6015d2e37b3640a4d3e7b0e1f3d4ee18a8fce62c3cb2e5723302f992757ad7c2cf1424b83212b9f274f7cfac86b92df2a13894f86ac863cf119f2c4670e590d79e2f364c8156d289e5d6da3d72687ac82befa9055185f7dc80ae8ab0f5981f1d587ac7ebefa90954f3633e873d1e7efa5449e435ea95bcfe7290a97e9e9729948c417bbd7e3c3ae8f930e9f5833ab539bdc844f2ed257bfa00f2f3ff0f287b7f297671f20e92527732766796853321af9e532e92bdd32a778022247f198c5d45add47bc14d336ea55c9c87df4ad58b651bf242072140c6f23d7b6ccefb5558719e544f5c2cbaf2d93feba2e1f6d589f2e87289bc8474ab0d72d46b4c93e61a6bbad74e72c98c37d823e4f7c9ef83cf179e2f34484841d27443b4e88442251133ba3d1cfcecf4bdef1d489269cd8f91139b1236ac2899d1f27442291f43aa5903c318a56c1271e360177baab19ee7c1ee590d3ea91e4f429972fd79e6793c7d3e9a497a734ba1559a78e82a3087c713e60af35975fb23ce2e674c969a24c4227200e9893b95c9baf71d009cb5d93834e40971de804c5ae74a96997742845205f06ba65798d518252a963efbad55ab15321be5687db0ff02b4a90e99a5fc9c9eea01292cfed9138db278c5d9be52f0b6265577739ca66fb745dde1910cbaf89b2911c6e57756d3a692bb244c857e03f96b04a50bc6e31cf924c2bae04eb1375cac11de884e31671e1c6c923a3884fb9ce81c7c71dcf61c69c7279c7f54abd693bf59a1f27a5cbbf9cccbb129b1f5d07e617e364a4cfbf9c8ee688f46799773cd5015d289def65078d52c7f31d54ce395f9e8e1d91ce47b7c6b2b476c3fa3ab65d1a63314c9ab9e0b5e26587d4f1a263878e171d3b74e8f02b818085ccc78dda2151d2ab57793d0bb9b559bfb7725906c142d6ab0504e3e0679bb5852ceb56e698fb8899ed0ec3a4eee00e1d18b494b8d1eb144306c5301aa8c178d93fd62fdc3f2f7dce11a924034371ea244b72eb25eb32b6f74e96cb26eaa58db49d2c1f6def9d2887a3088c7144e64bb7a05f15fbc42e85604e06fa7c697116acf2878b39e79cb37f6efae726dbcbf43cb84c643617edd35cf4cfcd6c2efa67b64f73d13f37cdc59c5c4017e924b8b88c318f8f7ef183791f4d268c6fe04d3c45b72ec70f0602b9dcc2f3cd675527410ce13882fd2daf268d9b5cc6218b04d6e30bb2411f2917a9bd9c567fcfb2ac65b9ad1c7e2d916ea28f19de64d3771f5f1e7a7ee99fe602ce19ad473f37ba9c393249c469240f9f7237cfc523ddd5cca753cc2967f2199ead0c7f2f5572eb35b75ba2d0889ab8f74ed4dfe90abd13e53291d98397b6f74e227fd8a9c849224711857cfaa8ceb7d365739936dd72f996931171d6a5c825c61169914f889311b9751127537dbe9d1c271251988944227f191589bc57d1261e7112cae8a57cc453f44a2bac95cbd2271ad1ab68443c22f25e452344b257d18878241a2112f5ea7daae4d13da64a5c0ff114bde4222e9b64389dc191b86c657028256ee4d7b58832724be4974f2eb3bc8ff87aa83404ff5d1eda7a888ec2656beb9d5b66f929fb341db3a49f2b3fbbebd335c75bc8214dcc36e3a8b9b68536d9d9b0bdec8829dba708b18d47a211738e9a84840b311a515ac829f548a4e3dc288546e89039a71c12239d911bd25ddc94883cb429a9f11f22bf58f5abd139e79cd187c01a0e1ae92e6297439f9e319f5166ebf1f97491e69913897f1de6904fcb1189917abdb42c884c74f9192763b9cc69b53473cbc9449f9f85b848279c535e3e1ac8a5146f22a73ee28d18c54cd8f65eb48ddc6ed5a9e36de42f0372b90dfe68937dc22cf66cbb98ec93f5bbc10c4875eb173ed83184b98fc636bcd93e41bf364c824170d263cc334fe594320a1167b2cece3023c5f8947f4baa58fd8dd8c49148e24d1f7909bf72362f396864de3c39223d332030f3fadc56b7aae5a78bcbb25a98dbf7accb7f9ccce59eb55c96f3a5c5c94c7f422627437dfeeb6b3eed5a1fee2e46ae72b9e5261d429a89bcf4b975007bc9c9402070a5bd658aa54f1112110189bd4e599eb1af2c7d8a338b81dc566bad4ff888328b8154360ad648e9d04804aef4d1f6330bcb480a38c6184da68f41703ee28444401739332be57e883f657757878ac0ec9cd88ace0461af5066ede521c75659c85a2c86ac6799a5d3a3cd2c6643a68f9db5097b823dc19e604f9ef0a49d73ce2893abcbe92fc3e9b6d2685d98b5d65a6bede5445ae6fa0b598b6197e57e88a17bbd2dd65c86d33beb68310f79b6619c7716c24259b4d77a96718d5d8e711efd6e96e5f2c3ce60058235af9452b6a41e5d082ae5957e3bd6d06c6bb985cd0451afbf3c95cc55b35ab1ea9885dd47679757f7d19a5b5c2692fbe2ac550f655cc62c6fbf361dd0c5b295cbafc1a9063c13c4bc60cceb7357d7c94c10ef36d1445293ae89ae7657b006c39adc455e1369198b44f362cc490cbb4eae93ebe43ab94eaa181a662dbff7ce0451670592c997d3774939abf53aa9bc9c068e222ecb27f6c4abdf2b9a0902faed9a5b459b4cc8df4389a5ac2e922eaa57f4b20884442eb99adbc85b52a32ea7c873acd1367c3969799e22bfd73197edcbcb651f4c555e9f1edab027d0a566d8e5f265595ab127747258773321686f7a3ec7bf255524f92a8e3c2ce2df921e9abf9a55697f5fdd86300cc364b2e5d385b0302c14823cfa2766d52c5fe479c75bcf3bbe3e40870ee88239a68542a110a66d32993f1c0a691a16e27e888fe23e1a6f598897819e65ee9ae791632eef784cc4c9b79eb108873822fd285c06c14c1e61cc650d73e9d9a603ba60dc835903ee532e5b9c0ee86239920ee842ea0e4e4e0774911c86219de2c6e8b56782a8b4d66aad9c09a2d69a63770db6823834f6536bc57cbad68a430638fb60a297572d14db721ad7b1c4eef58b6f761dbb17c3b02bf2eb8fcb18a59be4da4571cd495a6bde8e32d2b81ce27c30bde5b439ce726fbb2c23d81312a6b5a5ea96b32dcba2916ed5dff6be6b8dfdfaf5b3fca525a534461e9f3bb685514e5acfd8e588b4b4948451234c11468c376e54284145112a805ec7bf25543c1163748b5ad1a22ee30ff12d0ec8cc5bbff86782686255b7acea3e628d2e379919bf42af55569757fe101f7ab6fcf9b3a26559d62d77ecbae5d9072d730c664164eaa555cd43212d140a61d750bc6b087b91bf1e39ca488435ee6d197739ce090913b51503e75bde159e09e2dd26f2827157f7aeaa5f36f1d421cfd6f2b6892958134f1de26c3286619c86f3edb026a646de6eb96cdf3ac61e8b44210edb2c875df5d658d731eb5e57b43827d7c975729de0e0ae3553ee787edf7b1c9d0942be97e7323edd647e08026ef9a9e4b4767c534ae9e5b27c1c4560ca11e9a756267216673d4b6fd70171a89c0c74c9e9802ecd912e943c54f8a182aaca8cf97c8e176e53e0bc00fe2da1c2143e5f807f4ba6d0f967ed8b6e1d5bd917dfda647e08e2adbf7f5bc6803ecee9f3b27c229d21f7b88cf97c749ac5d818eb2fa39179e8269eaa5b7f9ded5bccaf47ef9b58dd625cc6d5bb75ba737b6e9daf9a57915b5cc6d82d17c5d4c82d9712b9f51167b968b38e37cbd193c57196ab1be6eda10d471138e36a1bc15104be9c0fa6af97e719998b936e791bf9e8d3a3634f200e9693815e8540af94c3babb92c39e4097c8459daceb134298cd5d459d9ff836a9f5aee6d5f1ba4eeeaa51574b994515c352d201bea1a625e8069a0793b9f51b86783096b704dd7073038e7d30fdd679b0ce034f4cc11f165b53931fd10af0fd42c3f9fca88083819f07e36ffd01d307587a7e54c0796c1e8183b484e1a16ec8e9cede90444b182d3c78eb2d380fe67a0a130ddc90c41651dc90d3280d40f1341e1c45bcbd1c0e9b0ca82ed703d04c82b3c6f3351e25e8b558bf17174c58546fafadc64f8c34463b0f2a88430f617b087a3035b4f86c63b53ac30d23bcf52b5baec4ae103ddb58499dd712a36716550a93b7359b47609ad71263a2dbc8e2a158546d83c983b96efd3d144b135e673ddb68f2365af0d66dd43c98cbb38dd596d2f35aacb33421e58ab76e9d45d5a8942a5e67dd7aca106ffd7ab6b17aab30bc751babb7de17a9e76e337a2e2e85e6b558bfa41e1bbf7aeb5896e3ad5b0378eb35d6b3c6d3294c00b0454f368fc0d0695e0bf416a0d7626b7c0bce6bf1dc01b5e03c98905b6f017a30d22d159f25139f3ba0b721ae071f03965ba67a2d3604f45aac9f24975fde7abe546fef1758a6e6c1dc780b3dbf263c6f9d07554c75ccf518074410f817d7bd16eb416cf8cb29d13c9a4cd2f21045cf1e601e78bab37e713ca8bab36e71b97beb24313451bdf5c7623999d78555ed9424ee63914f8a6c77a647db552895cea3535115dd8703867000497e60489a283e63960d90cf12a02662fcfc7e3e027d742abb6b54cc6f8c8f7e848f3b9fb1eeee0b7b7baf83fe945437c5ca65f6499110274cba7b34d1e73e966c43e7e55d423787f9688266d3280835249093ddcd07ef17b8069307d3bde4791f3185fb246b1eeb6e32f13c572f3dcf9f977902bd5c4077f2b366e4a51b69948a9c38b8720ce84e7a733eba1053fe4ed2e9e432c65c367d36bdd5029712a6349b7892de9a8dff00735ce0acd9a85eba66d3a83e728304a751cd05799fa4514f5342d369940af4f74d348a7ad66c9e50bd0cf2be3d6b51bcc6f3d235295e6a3d2acd614f3d6b57fc93404cce6236742a146ecad490235d81b1eeda7a8121168136e2b6dfd7affdf97d2dc2dda9a81e7ab6e1db552407a45ffa8342164c523856ed3b7cf4122b68f25b459d1e7cc65245ac8a868686e6c7126fc9154a687f363feacfafc9f311b24592eedec74d88939a4d881323ddbd676954b66fc91535df46804eac3ce841e0434ec816339f314ce8430f281e6104d68ac05a932903eed6f4041348897a2f828ed9fee3a0073efa14825fe607f41909a11110aa3c7faf0204fe6bfca04318396ce1d63f13a108626afa3b8de0a3c7f7636ef0c7cb226063c316742690920729210e1007e892a37737e0040d6104fa6562b320ca179fcbf7dee364af40ca96b25dcac829a794b2094603c628a38c71a53dc6187d8b2812a2054d77ef33f4e9949b8e752749dd4999b1976ec230894a3474fbcc5fedc11803e467240c01f498638c5101d83f1f50d5f374ebcde9b63f57b736c941386bfdeafd1e7e38efbc7e7a4fbbf940fa3921161e97f1cb4833f54729b5dd4d2258b09cba7d29ebb56e0f6b76bbd4a1b47af06c3886cc13faf49e9cedaeb13070e41e6a7a866e1b4523085806baec0e931b11f9107a8144174856286098d92dbae51e9e5e2cb3ac0ce3f2f4cb2fae5903a45b2e6b40067e5e9bb46cb56e58cb722aed9513c17ccac94c0e73368ee184ee25bcf0a4ad29608a7b9c98403a718e6134455403a4d4a709534aef65f9ece1a94f9fb45a49558438e544305f7637c53097cc59473bd717967dc938f3dc85f0a66d2ffaf0f2d65281ad67f9d1665bc55ebd707588bfba65ddf0e1a504042c8060ff65f3e56ac90308a594375680021a8107960969b1203927a4b7ce3927be9cf657ed87a72ead7b65089ec658ee17275d8ae0a94b21d7534e7627abd359ed934a58bd909ca004c32415d85aad794dae46c14763fc96acf38608e64b5cf2041cc069f2ee25f3c0f45a2905b696e41de672f7f2f9f5bcf0087199876874b96cbab8ec3bc41489433199469c889bfedeecc1aa2e7b989edd12a11aa52fb950cf33c01e69bbdfea85218b1786b7a67cab0b0b2060f1562f61cf0cacc59807014e5b8a2987976ef11516c3241289aa4816c339886aa2e8410e4da040d2469d97f2694bdb300a022e7d5422268948e29168e4652cf2d25b8c4e455507713128eabc9454c05246d58daaa88a2a1b552f2f9fa3aa8362908ca75cac11028e46620ba10923a20e05a2397254856987da0763f974ebc15c3e6053f873b9f4ba5421fa2f5ae95b95ce3a27a595ca184808e513e484f039e962c54ae105890640524a9927145367c914c284a28e8cf0a60e5c02144b983a17108e17242872f022ed9cdc9c734e3ab19f120a0eab9913a4c51a4224a6c9316952871042698315968ec233a59c3452ee493985482e72718c319ab824e7615acf38355fe2c93320f12967375356831729b93c7d660da021c81726375377f129c9b422492d905a0e96ee236224ccf38e97def21200afc64b5c7aa91d480f8692403a46b202c3a41d4870e3e78dcfaf67f6cc672be56c782dd1af0d869e5b3ef218258982113c1eda888162f375f77cdb0fd0e29e159bc294052cbde725271f84b2e50c2e89d40d4d3f08f1b269b52cebd372cfefc4eaf458a5f462663124d34a14b572d675330c6b5ebd1f4cc8eb86d589376d0b6dfd5aa6679b7c2dd3b1edbd963bfd9a6ecd49823a21266baadbea73b35cc650989a73460a7178cf05dbeeb5f5dfedbe6ebaf6c34b21f32dfc3be1eb18bab8ebb54c8bcbf7670862ecf553042f5fd2496be5e0a452ba4025ad9c128b425a0c77a31e530e2c808085290556d26038e8a58f9e60f97c5ebe9f97ff561268c88391300c02c19f9770f5123279e9b027f2c4d4e592eb1d188445db446b43b9ec91e7b3694702f1c7c5c1558e09fe60980483a4cd921a0b8324cdbc74ee280858facb82d4903a9d270f9878e95287d24c1b264f8ba79e270f743e531a1b3f39a9a24cc892896903852e52306d2e1d294079b19016eba0409b36b54b48e975ce29bde0b20b317a0c86b07dd6cedd43534f97db0f423ca51b269f44c2f083996ec24850c030c914532c94d41d8b1458c6f89393af45ce9726a832081f714aa710ce24aed61e2727a5849c9c89102281ea7431857cab6eb2f4ca4b12f652baecae0a3ca2b5320fffd9a42b6452972205174490ddcbee56164a314a36232fb0c45aca7c5571a9782e263cf57c55f1f293c3a41b608aa5c52ed5cb2d9ab0027ba94a36b10a5312995c76b8c10f08417abafdd073ba9d734281e7b4b625a63feb70bae5a6bf97724e3939e985d74df9937b41fc9c724a22b2013dc618638c9f527e0fea74f8a4ee62acfc41fe00492b90445a59b15c9256a6209956e696a74bb7b625a4dbac01d5a9d74cc8943e65cd62acd3cc01332f1dfecb84484e6672b833ac0b96645ac11e1640c0020818edb983fb788850184392d6b0104bb43f975b962e5d660dc884486f97911c864f80905228e10c145a725276f7b6601fccecafdc7b2d70c656da2ab01890163853285ebae4b2c49e202dd65da44278ea9942b1f2d356818180d2620da9ce4b9c9e1c4b751e036a315c395dfe7d06c05262d365779813f0f4f9ba4aabb5bdd7519776b3ddc5972e699d9323121bf068a59c8a90f6e9ed9313417c1961405dfe6d2c8bc1ba8b99f4b237d9103e197aafc507d24fafee23ce17fd619cb1f5523a7ca98ecbb63b0c052c8370b89b9af69d01994f39d26b898e9f80a167d2472022a59c0fa40614c0065270f132c9a908e900e965f05305e1003607b03980cd018c1ca0e6003030028d40230f12b104871b1c6e70b8c1e1080e3638d0e0b54d6d1b5bfb7d5fe931c2ae911b0ca2acb09b60f39a8d76bb3c6eefda2d8bb92f03b25d1b16b71bda82bc0f39e62f8380941ee2422e1dfa0c712a0c781ff220ef439ccae53221a77e71388e60152121a71ee26c7733efa361b65dee2362d0efcc5b9b0fa6b7f0cd5cd84deeab24d8b183524925953be4f4ca45e0e9802e9063b1214a25e076930e52dca1046c31fcc2849e2337488e603e984ff4dbd3467a30b72e6a77306cf5d221f6448926742e974d3d3b57b65cc63b4cc09e604f98d06335cde2c29a464197b2e523c15d7557efaabb3abb2d2939534c5d1ea94e3c459792cbf2e5467d6ed0a57d6e94cb107a6ff93679e910460026f9a88a2993e96374b904dcb853417c6005fee33a8105804170117a0ce57e8873cb42e419b8cd25e076fa64ac4d91501da9375f917c3d622bf76410ea9d15368133cca9484ceb42387dd6aee9ae062dd22fc6a6122c1d4b2e9b3e480cd1c80b3c1a6531a38c524a29a5db8c191b0a36632365319784cdd8769e78e9a52ca6899732644019d4fbe9d47912a9549221238b99519a316306096534638608cf9831439b11ca66ccc0ee65d93a834e0184de6be172bfa402bebc44053c1dc5afdc72e4dc2d078ef49c03475e2e382b6f9576def2974b4cbce5f57295cb112f7501457be50df21efb951b0dbf1b76d146f2d2a6e29a9215fba2ed7d697b1ff22b83cea033ee4884954aa2918c50e8d2c03615d38a295321a1683eb398d0bd9a9215f7d1a311f697c58c62b05f577914dd59a822dd594eb3981c49bab37c950327478e0e4628d5c1a63b4c071bf83ad848298370bd946e2d1daedc74b091417430c205e18168a0d36bb128d7bd164b72f9f5bc25a19c34b90055bce51206cb650c6fb9243180126f390fae85c9e984e534a897a6c0925e2a1f2e55690a7c371d6cb44d879a2d70fff597b91eba5457184a3a0fe67a0ba26850343a186954c82dd7c1a651d72dd7a1a6519a5b9e2327474ece4bef41450f9e77b25cfec8a5dfd19623a73bcbe59603a73bcb2b0f1e79ce81f316f591cb0dbbf3e448d228ca2959f1915b9e03a75138d4630a2fe5aa3e596ef97ba81e56bce5da663f074ea7ec0fcb73e48cb06f2ac0f949a1e62d4771ccefd479e9a4cb630f9eef1410f46068b895e2a64883c95f5c96303a6f7989c96716a0b75c86bb84d12891bffebca30a8dc38e2a3c170b0a9f2793b77cc6670320f196e76800245e67f9f494cd343720e08c2dbb20e11286b75cc6965d82def21209c55f1683c2a16abab31c45d39de5283538a368def2d18a8b36154cea0efb0fb0abdef20bc8c2dbca26fb545ddbb00d7757bd7a765330bad5df816fa8debeccee0d95d6f3da1531f8dc41f1d42fd583c9ac2a4f1e23a03c8d5dfd98c5d012cd6f54c0ed749302532ef700924c1e0c75cbbbb73a20359e721ace6bb1dcbfc0edd905e72dcf17d08b02e72d97301aa5e2f396bbe03c18d25bee92f360e65bee02f460ee5b5e809e0733e32d9f38d8b122b0ce53bf6f367c327479fc6b3a76b90a865dbf803a059b00ba828a34caa651f32dbf4890e41d10c70a597cc6aa0a0b9ecfb7e62d264d3eb3583b3edf9bb7ece78bf396fd916fce5b8eddab074fa3a05bde430acb7bf4f460d2c3f21e3f3d807a58ee83a651d631267ceed164099f7bf828e133cb139f7b849184cf3b3ef7e0790b099f9faac85b2f640b1ffd582c4ee6516183d21748721f4bd6543a0fa6c63f9712755fd7d0e7100f6527cd83910eb364e2a14b9d07131d722d4b2fe585d35dcc3c02676b5bcacea2f419238d914e9bd95d770de4ca69c9b36602ef47759a055162b9929a45bf2e7addc9c9693bd9b2fad2e1e6cd8359108b839c0a05e20febf095582e08217e546e5a5fe01c1ba9e934c1c4b7f716df9e45df1e43abef4be77b02f3c795134fed3edaf20243cf57ceb7a6ba78ee63c91dd057b74a56e0cc9fdf6c53c1517a197f63548444bb819f3af15f06c4df5a48709e366e5d894d1d4c3d5f3a5f5dc3797e017537174e922ba751d7ab4d0a4f4ce1f889a7261ecac6165e97c2c443d958754af5949d980ae5949eaf29aaaf5e3db4d978827e6d6ce1a1de8b29533c41aff075d02bf48c03e82bb59d3d60faf56ca37e39f461ea98983c18ebd5ca2293721e663140849c887d259a97acc0f6df5fce476b5b8dfd11f2db58fb8d31469905a9f1d6e57b96655916e5302a2756b2025f99e5b762a1cd864f9f2ceeb68d5577d5a7bb0ae46bc011d4a87c01e108a3514a2c303a01a11f1c4017d08379cff649ba8683d243e20109879404a50a0d6716f98ce347469f360fe6f2ea96eac140af7e15f150d74d77360fc6f2eaefa12e1cbcae7a9e452e9caf3e6d8080d5afb575170ec0b86e1ad579f1baead5c2f183e3e7b5541c213c10f0b38d958dd56ba990c361f35aaafb1870756b0bc0cf6ba9b0dde2726783af9eadafd572ddcd6b9942f8f90e28e4731f4bae01f4b164051efdbb5fe01a370f46c747fb71dac4e879de7cf7a11e6b0538db0ff57cb435808a70df0e7ca9debe06f4d41f967de85fa3ac2bca86f2c91ab2eea3b5efb021e0977f89a9e8d479c49474ea0c68544c7d8167d014a353d7a96b370fc6e5e903eafa645197531fc243a7709fa8531269e5f3eb61a1d4ad0dfb02ceaf67070a54b731d55ebdba29a6a457973d0fa6c6579f398d8a5f7dea34ca86af97ea5f66bdfea53e45429cf4703b744735201fdcc7d2410e6f01438f9f25056ca85efa859989b482bb93f0717e1e4c019e67bcc34f4cbd3c6c816690947e5b24c4c94e77ef87ecd01d44f25243b2c390ee60ec10e428d09dec6ec80eddbdbc93746b5f947809218473c20927742da73ba9e9bcd4925844e0acbdbc742dc9f322783a4ced104f721b024f2595db41eee05bd070341c2bbdb320386b392f694828355815fb4ee17640628cb1469f33097e3daf257a95dbab55c3d18e906e63e7081b4f7cf468e308af8b5ec38b0a440041293b2b3b92abf153b9949d8f413a9ed712e5f66ca838a0d712b72ae04cd231ad5e0b0e0e87f279c7d345e1a14839285212af8b9e3b293e3a49e7a30b20e8c1548f2aed2609249fd328cd062f1405e9d9864a006720e9e0e0517df458390104bd9678e1d8b29bd7122b17e2b1381fa7cd75035f87a6fbe8fa74833f250e29ba8b387a70f090c480a1671c3cdff59ce1be2418eefc53c518a5cb4d66312bddbd39e18c5cb6807717638c5246196564e9eef98a6902ef878da7d7a1f75aa40aeed55856624329432a42e4c3387a82271503ced80ce599b7d0e5b98f7eef69ef3d6cae465ae0c9a1d8bc0b2f95171066eff9a80b2c21d7cd5d5be9bc32367c5728cfc42c268b9192d25aad7d6e75efbab4fbf2b5401aca330f2916a325c1f95df1cfafca31e9399602e7c7f3cfefb3cf6ad81de5964ddfddddd11bfe00bfe3a6592830c0cd65ecba58f642b086f28cedb7afa55a16b5a68c56434c4548f63fc0319a9b7046cdbd2fc6f6d158770fc7f89ebc68630aeb13f4ee3e3abee19f63f74e18637fbc3d670b118db201cbf1cf516a70c66ca34e32f6848fc6deb9f70ac8e49ff715dde49f47267d85cf4a4e5aadb43636b48f566b51ec3d6b5d179318161b62167befba58d61392a1506c18525dd87bd8cb9e86bd2d9424a4c43fd77292fc738cb1b7e56ee29f8b744672348a0d471d14861841617491a601e289420a9e28aee851c11b780422b98147601268d33e0f8ce737fa8401d4c30e1e6fcb393cfc1d2f8a87ff02bb6394725249696c4861c728e59cb4ca5a63c32a27a5b55a6b5df2ba62c3ab5acbbaae7bb14c66596c985d17c3b22c14d2b0c43836c418d4340c6291088323148982121ba28cb0f7b66c5fa9843d1932b037c3244da6d8d0744718dc50240a0637922561b09405296170939105818fdf0c3963466c38c3865484580f3d886faed22963c3920da908b10f1d04df3ddd3d6f78030d6e3fec201d3b66416294591029e5cc824c3ae79c340b42ab8d0da594d29a05a91ffd6a740c9ca5ce43cf52e79fdbd52ada449b56b50a0808e2409ce7358ba163d8ec01f5aff560473969b5a13cf392831e391521322f755ecb73aa82fb58320d9d8f5dca995eca79a2c453ba82a7d4a494535295a428f594989456536a3c8dea6954be549a141a8f9452ce1fe06ca97c524e9d982ae5c4537477934967ea08811a0f1097d77aa480f3b5539225d54747b1c1b9f44490957fddd197a59c924e4c693c259e8f26ade7a3d3520e901baff55081f3b513ca42c42c480d4ab96b875e4fa004a19ce152c949218df29a3a1f77ba8b41d431d640f3b472d71394bb49d4dcf81426af8508a1e83914868ff94ac9a28aaff1924b611254e369e02802c79a2ffd8ca0eea2a34001e76be7a3e752ce47bf15d6174379a6b31072ce1d28af9d46416ee57aa25196864e6889fb58f2ebc2aa5dfb715749b0f5f3f23f00a99183ad0b48fccb2f84b0bba4ee4c31a4eeac94504aef975cb6c05fd7004fa3620e6963d5a8c8836ac35cb812c317a3d45a68674845087de8fd90cb1678db9d8c5309c69a5be7a127a6a65be781494c51b7cec3eac70beead5fdadbfbf1050f51783096b3740c8085cd1f60e9f70b6d5381ae39e4944cc7ded03e98cca15b0fc672e8219e07736d37e8c49375baddb0134f09a0c1f109a089a9be41a70d70c3f6bdf3d6e90daab77ec3ea6513e81f93bb21279eec18f20d396f5398584038db58d958c514fc61e3a702d4358f5905a6638e07553c59d7361e78e2c9ba25069c53989464803bb76566dd0cc544699868d8d8301c0138e5a01472365c7ec3c64a0d1500b44cd984529594696ab137c0d47f2e4dc0514616135d28954d4bf0917e84f4850073ca1919901a2fcf00a71033b2181ae37bf1c538371d110c6088514606c409a52c26de508058228d50440490524ab9634ac95d15868eb3d9043ca796ed300036a3c013cb6266369b800d30650a12ae74897a14c22598f45933f5a949b20c587a26bde7ed373a04e3768a63e9d0137014563f9f59fec68d46c954c7f2c3827981a1cb29fb5f7a0517cdb7d4993430d6a0601a62918f1e87782818d45dbb183861dc8061e3f3b16b9a7cf4bea2534d134f340fa6876b9d6b31f1399f6d4d8fa58169b0456050a3ec103960dcd4408b429a98aa57f4a9bd498d8f0d18df358c6faf62e47cf77c9e34edcd551428f0f33c691ac6f72e1a5a44cb8a4979bb5aa3192b98a4409fdaa5d7bcfd7bc3ef43a802047ef408e30cee9251a221832ba9e0c05ea36cc02cff2ca9533b340578c494e5dcf3f3f97e4d2c6bdbe3090b183a7d1cad4e1d857b3650708c705800c0c8fa01781100187dd928bac1d7cd29439583337f0320003925a41e7dd2444e0058901a4fb949935fcf8c28598cbc2b1c475ae0279fec301b53d69f3f6bb3d817f0668a4a703c7d017750a0b09ca22800a3934800d87c3043b1c170e6c064f417e3835a1633b9fb040c4f52c6c81c5a0e2cc65016a47f723ba830f42c8b91723201c75833804b6fe8cd9e7f386c1001df8b300dd2e1ec9e49f31d673ecefca558dd209d9256b9f3606adab33c824eb566c0d0a9f4980199f909c4c2d721a730faf497c5480ef78f49139d5075a19237e862e708d8f46f49173862c032fe2de982885e42191a0b1cfa790117564c810b24441d60d2bf255cfc0086818b18c41b5c42432c03cebc20039cad9ec033a250c511d6c005254d8351fe2de1c2911e70a1087482edbf253e62c80067ff96f880410b78f46f898f16b8f0c9820bd8fab7c4a7c787c7078792c162acd97b558af2d055b218eaa329e06c2d86498dca2c9f9bf381e5e1163db831658187c6163288c18c26392964d0810c2c4cab2cdca09485ce8c55143520e9c858314105284c7e4af665450423238b2d86adb0435a2121727283b2a2810c301636a3151146342ddc8856344484aa00c25fd020abe246d3228b22b02b84b498020cee1535997dd14275596c315c8555157e30ec0411568fea2261b5a0ba90bca0f6585ac000069489d5a2052a9856d8d430dcc82cd4d017ab8511f185c7cb0e1e4d56d3be5ca1a62d86f88a9d28b318fb12ad14b0fda53b1eedf9e57734c7030b4f582c44615f62cac207450ad2d0d0d0b8e0473bd6a9f7a3ad77bb73d90796b7d0a74fef7d5001469f1ef7a0a81dbf446d3e37b55e1b4b9f30662d36cd7f4bb60086cfa6cf560048b8ef07fc54622079d13f551a72dedffed5e07ba7977ae9537e57589e7390e29fefd028ea3c16701f8ea680ad0f2c6f034b77b06302632d58568067f0f417f08d7f4bb6800414d8ff2dd9420be40bb08d2e7411704a15a0c0222898e08a042fe01947c41cacfd5bf2e4c8473560f96fc9131bf903c22735945adbca66b27244050cfde5a1f3c8a151d0b4c512dea1db4e3de8af558ae0f76f4915c4f8d1bf255838f1f2df922d90f02cd0f644e23e967cc2f97e38ddc55c7f0f26fafb94957ca9cc9fe3e0a5322ec5a74f8d8a47c82cc6c6181d6636c62e2c0a5f0cd5987ffe1ce6fd58406f06fd73f85273154f9db27a2ded252a703e9d8a9c6a3a9579fbc9e674e474d3288b24f4279ad7d277d4e5f4bda1341827a6ae913eb51fc139df292b7a8d5c23d7dbef914661de7e8778a849c4eb681eccfb9e2ff8f67c8b7ccf2298f8f6ab613bd6db6d726d97c92aa6ee4ebe373f3cb7e7bb3ddb2e4e9fdaaded2a71756e13ddb557eee6dc8ba4bb3ed174772ad25d4b79aa39d174d7279a134d4ca92ab5a6ac3a05d30094f29312060d9a46c96fa761c44992ef4be3c8774a9093263ed328927da65143c386c6cdb7572aef4da3f25c3d4ea3f289e644d3a8d545d22818c577133e632d659e45489d3959f03965f57d5f5eaa2d30fce991e6a1e7942ee611f82dc9c2e6618defed849381e1527961823eea02435f69f8847b6316b3f23a6eb262d3c2aa8513c64d89987bc109218417cb20845906278410c60d3a868ea15f8c455116734558dc301c79817177170513a16473ce199d84c5ad94c5dc1216a1cb802e03ce980167c01286220323cdc04aa692c96422a18c4c261136994c9a2994994c2608fd39f49909af24d69cf3bdf9e69bbee5eee70525fc2b651693c54c2f5981a316d45df5b9696274d798a6bbea76ba8ab5d049399d823fb0a1a1a119e2477592ce13241ed21547bea6e834f94a527dbdc2139f5906f099d4f3f53389c9fc91492b215b24a93182ca76a75179daa81ad55353a258f239458aaf507c66794d0d2f0135f6c7f5ea1a026aba2172a8e1f1e37ac629f8ea9a182f872b539aa059cce452746a8a4ecd62529ad082483b8dca5a10a989eb4a7402ae5727e590741a15f460debbd74d8847b3c1436938dacd111a925014b423483938a44bb1aeb1454e8a4e8a4eacb182a41c6b6a39504b420b4ad1815b4ace6ba9ae25a1c46b398d4a41029272483951d082ae9beb6672219eea709b9133772047cab15fb33531792dd56de88478701f4b26017dd76fd49c73ce28279c574c26ddf574d74e1203a69e67cfece9b96232b9822e313a55bd9d74d35e6793d9337b2694714631a3983c0f7d740f068304245b16a9b67fd8edfd90734a29a5843fecf6dea9edc3fed13768be5df55ada5fe89f8dc73efb2b5bc227a3ac21e93e5afb1b31d218384f9ec9037180df98e7dbe5a6ade0a6fddc2f70a9a651d1db4b463a65bddd46ce8379f9c634f3893e693f8d02a35333499fda9b9457e6cebc9948b689d35d6b2bad5df3e96ca2f1d26d4c55972ea5fd3c6fbe7ddec494ca0ed62d1704fc513915e9ef47f5991f720e01fb676da501c5540a1364e041174d9ee0010a7eb46b413135e3832cf460a1878826a8e1073fdab5554ccd24c10946e090c1e6c90eb6f0a35dfb89a9215958c1099a3384b1a4c98ff697c9fa9a8fd47eba6b8f9cb6eaae1dfbe08cb5d5f70d1a2a85fb58f2a3c2e62dbfaf6405a65d29850f448ce430efe67a48113120622e975e4ad2a9151b8f6fdeba36d4a5004f9657e10cf0947b6061882dde72da83e7b5dc00e7ae640556910e5f05087dc9f5e0e9cef2fed13ffb57ca2c86250c162096a0eeac49e92c598125dd4a56e0947f460012fab904be3d7a2ecde61158d3701e4ce92def1eccc82de771371f353e449b8f1c3ad5a3c9e9a57a44e19dac1c72d8b1c3061b5858563a9901892fb91e4c3a1bbab3aeeba5eb0e0738776f7536bc348afa75d1f02b5dfa88baf4e1523dbd0d33e98ff3e1d920d7a6a4c6f52f70be806ab8e517d01546a36862ea865b7e6b62ca865b7e6d62caddf2949d075323878d9db72eb7b1b9ec6c2e3736179d78b2dc5d543536979c78b25c6edddfb81a56b2024b7f573a7cc9e5217f71760db886dff01a7ec33dbbe0c4140b509fac120e7eddb100757763ebd1134f96d7d876e8c1134f968780b0e71e3c2e97bc2e6a49d125794b8bcf971896c60954a0c109545cf1f91eb9105e545a2aea82d3a8cc024437215be400b184f160a45bce12d4a8118c08f05fce428687c3caa683913e593e3b8bb91ccd8020823f870f9ecb75b9e548f25afaa5cf238d92e112cbbebe0a89949168d0a0e13efa5d19980cabaf8fb6fe3bafe3bfa27b59ccf0160bcb185e4a871a16181d189d975d1fad7a30a1175d9eaf285e74f1bc285f3d2fd2685ee44c5ee45a931789442291db073372915b0fe6bac80d808436c48b442ff298c5882eec6201ba2eb70f46e4975b0fa6e4570dbf7caa62ea865f3e79626ac5af8bc50c7ff98dcdc693f51adbca660d80440e1c192724de7219396f59397058825ecb0e2c40f164f936058c0ecb0eac2b0cafc572117701bd16cbe956ff8403a39380d583a14027168de7ad1b6198e208ae5abde53a64f17060d9c17369a20313161e64e12d961e14f160260b186fb9e53ab4e0a158bc789df560484100527fe43d785ecb46053cfd3a4cc0ea4260e7c1dc04aca6e71c303a4ffd6e3da2f05a8200d19f23478e1c6134eae254a83f9f1baea09852b97ec3df0fcb2fa01e3c0f86d27f31a572391509acb80daf400dbfc19de086d7701bdc0996a0c00dafe127b0e12bfe7e64fcf9028aa91b5c9115f4f8b1e235f0470db7c1d5c01f2b3d784c3d783c63cc02c4b2b9ca0e2bfe9e02fda3c6b58d9ec53113931a9b8d27ea2bdb8ba74bb1193fd2b8f94b03c9df92cd5fbf5410874ee2af97681e8c08453d978afcf5f772a9e62f065fea027aa76b0c2fe5829386ae44f3f6afc4e46834a218158944229197ae1e54bc5512dd9f77865f087be5be18a59c94d66aad65adb04b89982be75e0ccb32895f4b4886ec7591bcf477f35a24368fbc744dcb82c89f362fa6aaa8948b96a6518f3a86480600008002131500203018100845e30191a84952ec0114000e8fac4e64441709b324876114320619630c21841822320030539b340002b26cd4b38f866c31468ceb1388f02b3a9767f0862059a6168928425c3d965d4eee317a6c841e18135ce012660d4418a150bd08f8fe3af87f90088ec21e9d3589509bd353d1d8775f6e91e88edf41a30d0bc0eecb2d0d7453f9a02387d40cd8d0cd8572fad64ddb10af03949d87a042e33e3e1f5068483777c24443835690da93ef94a3455ad15282588443a3cae9dee2a3297e1a26d1ceaa16a994d2f0cbc640a9e21690ba92c0ae3cb4f84626ab69e1148011ac4959a825fd702b3a516cf578532aee1930d1d44b090aac39db460a4a21fb5aee745c989e33de80814edf7a4c7c4213b18c8c5d1746359269d553422ffcf737b82f5614db6310e9ef82a1f3cab4e01b703c51744833f6902cd299e333d1cba7057edc1f3169084670ced9bd8e99597a24c1980b1820ceb70f69baab1060e9af4aa1aaa40fa62b7e26ccd23f3bae6be4be08311814b712f251b161932d04f9270c1d6e08a40f8c80d0002fdb082487748d5ecba1183347c34bdd47e8583d45f28a2f357c5fba48b47385bf9b0057ed002b8ff63f32274ed26e377e250209835ad82b13c0c91cae138cdc24f6e980f3fd6e4ccc4e9dd54e5d929e633f0c3854ef29182df332c9b5a391d93531bf67e99f82401d88eb784c28b0e02a7f86e8f6e1206e9eb1cef4a3153720cf4504c63a22faa32d6ea48b169f33c0525eaaaa4a2f59c0b734effe59670764cadcb947e2695729fa6b6c10d33b9c19193cf74346cc960815fd517f9df9fbbcb88266fcf58893a6846a2d9017cd8687d3a837cf322530907536d5f10c03f861e8f4dab05b19cf0a4faa9e686ba5894b3049cd8d833ba6a972057879561a8481605d02bca4bd57567cdae9d99edf8340f1aacb621dbedf52e1daed713cf41480a5eea4f6e6ed674f56e5211ab60214f30db4769c1840783863455d19478bb4bc0bf0f0ce81371c5b08526b18c4725e4639b718d0b535a1a34141bdc3f541507915a588e05bbccd5a6342ede722442cfd5651b0dc6e0551f9b09d4893c716b4a70f3fe1320f20070918b78370a9c7ddffa236f59cbfaf7d2f6a252a136871bef1eb7773e2c4b46ca1528aa288bfcf0656a8942ece227a5060ef77140b5df03568b1bc485a36d081385113511cbd751418d4c54d925e2a5ae37d7822daa7e8f06f6625793f83f704fc26c7a5cd01fcd23c305d454777e6a3bf034cce1e7a7f0fddd2d2d4bbf976b2955b830cc3c073ed9bb9f550885c584ee39428e53eb2d306b342967bbb379e835d68752dfed4dee5dbfd7a1511b86133d7b0fbd3d513779f24c79f0c181bf5056aecee4e766fc7f1b06163e0b91df0835f4dcdfc9ebcbff2cb4954b105747cefc90f47202fad5b0f93313951c45d5d477e206e1e192d51c429ceb86753e4c24da14c19d548733246b4b5a32c46b502c1482708c32e489135619c9641b84eb5772c0aac8d70749ca4fe968a2807c965ca7d427006a137f37b26b9059d95a7a4473b4c7d15b0b96f2c4a28e0c27531b7dca9fc833e38269b0c7908c855a94a17bf7a39a39053f2aea6df00b1c9c7ef205c874b395ed419f3a09fe4088fdd7d7c67f3382a2b3440d69d92f83d419ca1bfb20ad0f22fa557fe2134d7ff7dac39e1ef1f871d1e691ee94348f0efbf499ab8441a6a818b0e5439e5b5b583a78d17ab13b171a1825747ff3f34965194ae4591f3187f5974a37dda992a0d9fe2908cc35bf51766e4989b49434a206cb13fa195a7d2ddc18fd9f73ec6ced2b6faff0f38785924c46adeabe6a4f7b084adfbde677fd09fbdb8518e3861f1e8494aebfe01d1d5905cbe67fe4bf6593368cbdf6450b74306eb137072dbae4c1f1ba61e6522e2a3af555e6a628c3e035bc41fa53296278892b5299c94e588e03275bd788d3c68a8d8a6a8d2215644fcfcde876c41ada44d332310b0e56e9f56b94204728e7057ff2325468f47bdf0b4e2095ce6551a6df86e2ce5035269f98962f6e160fbb2a4ed83d78880ba88de53019510f27998098f6d9c35d94ace6f63b964a3878db1463aca1d36be44a260e900067257b8a8bd9c89a83b41e4b2d2e011fa51cc2de006f3c56d516d73baf8186c735b916ceef66139fb8c038438e6cb280e3c3994ee7d16788b8d1773555d0f30561e46931feb178c1f6a5758d3ba2b6d71a56691f7ac7971e8acf3a277bca35d50335dfa1d8d17e90b3e8ef59e7a3c0422e91de9f6ced87279fffe73f742c7bde4abc49a6ac6b75daeae0ce10813024c119f62a3c03e396c7c96a925859097fb974c9f47f2fe9e28f1bc2dfed147395adcd1f3be7f177a1722def620abf41d6b9973b8da22eb8baef3f56dc717d3cd2a4c20b928adf5fff64df7161624deed2b21fd2a12aff7a1933e8fc0bb3d54d04345e5d5be2ee749affe8faff2d1925cc938cbb115cffb3be40765ac420f83a2692c42e18b9e2d9dc3c37e7b4b4acf22f17edf6efa7534bcec57158fd6d57ff8a2f7968e9a17fb4a47fab69621879ee4f54563d5499e1eedaf5793c0bc9a33cfffb25f8c9f47c94874986f7c995aaef8b15d1fca98676ff7e821b8b2310729eff0fb81cf3b06a5654615eaf49fb0f3511735d179afaa3ca4b3a38d37909a3031274e03a71990fbfeb2f7b565ca4640bd0348a25087bbb0a487f991d5a298d12a43ff2a73d4f5fe844f5f0d73c28e1e3216a32f732b165b461d97e3e6b67e4553087cac10baaa9cf1993fed101ef9552d909a6f0d259a115661c8c5e8d36493325d600cd5ebe49c985f136f58bf5b414e7720ab148dc880a3a10a753ff5f76cb061cf372b612fea4c8d533c1c096e60f8547daddd98983c6a0e15ae9363a13f1f0e02a9a462b5a35884fffde23896a6c7f2938c676da1a8ed3e3352e10aa3a26974a5c56ff9d3f6112d310a78e8b653484f26c85e4305b0d8206eac5c412a56f8854bad97e072fdf42b8cd06548abba136deb82e8198b56b7e3223d4fa14de8a6f4709c1b17796596e52fa6417074dfc213ba43e160c391614bcc208d49c3ac6a938ecdd642a3b44d7b60f5b8d0230cda7500c29b6e54ecc2c80ff9bd8ab5f99602d2634d7f7a6aca7b66ad6d75d49be81d15c2620cd0cc85b97a0898e3a126de10e23c6a27ae0daef36e22ac6b851eab749577e8a0342239cf6987ce741a3458ae40fdddf82e41577123bbeb6e66bf461d7ef04d2a745210e8b56cc18ad82499f5d0a8d799a7dfff4fe0414119e5ff2fce48a7d8beba606afe31aac3851501c915690b176227529f46c6043da3da0f9ca7cf5ca29b33357c3a1c66e0dcafb17e33f3cf0a070b1010b053bc0a9621e2b50346f0df589177a25e6164c5ce686f8e44eb0525aebd8ccdb3ccaab297b6c0f9572c3fe920b746c014599572e905bc2fa357c81caf5ef63281745896c5dbedea159654438119a17d3dbd3cb32b21aa6817aa90d823967d06f8e7bb86a240750f343a0fe534e11fc134d18cc2fc7fcd7601d24906d098a8875e4b61c80b54d967299a52a9915910841a6b858b741182a4a490b47ac0a8b41cc80b90d26cfa97d8e93b2d6edc5ab98b0468895740b65312f5137493f751b67e6258762e7967ec750c64dddd6b2bd55a2d7b44346e4e5df2199ca60756df42c1615e9d39405fddee400bcc4a3c820afd71d842614ac7e1c936b73475debb7d9c2b20f53750b2663da3bf439f726a515926d236112207d6667fda01aa14c871db246237356f00e020681daf1d0f7d44fbf76280b85c2a311d72f70a834c69b06658e6840cce1e0200f4cbb481bffa92b5de7d98250c6c5977e7b7c8ee70472995df35f8fa76398000a95ecaf50eec24ad6bc1779beb365e31801c925b812ab72de0bd948b758baa5a07f3286ef97cf27c93009d64d0b0b2360a66e9c2c863a67c803900f384715c0f59b8a2fe3d451348ae81eb60ff4e0d3ae98b304b8102528e9a33893e41940f42a08621ab96a823f88ab75e571f53845a0e7c5d87195288f02a5c4fa9d37d1d63d24ff95e5613eaa71d38462684dda1816935fea94c9913a0956c40e2de43b7b70c45f72aa451fdbb1c572fa66385a021e68d38ba00dfc4ed8e8154b09ebd1ecfdcac6a62826743ad19d3053ddfa432de40609f8ffdea15da372c6cb40e2aa62518460000af9c63e9ad3c5b130968eafcca05135d8a77cb66752dc2e0dd1f7ff03cfe54d5a7214643e67e14230338cfe5fa589a67ef0668fc1849d30a0f9d3ef828f1c0896dfd0577b70daea0e3cbbcaf3b5fdf58501dbd8a680ef4a077ebc10ebcb3538ecbdd08c20eabaa097777ee6703f566715c5e9a7bdeeb6b6629275d818fc4edbbd00de47028ed57f712d971da4c2c16f09a3f28b88ec4dfd276a861150b7461c68e6442e464e8cf17d20fe1f9510b3c338782c326e90cae0558d0a729a87c85880c01e5aa125a63c9b500c7d4675bdbf9f2077b6b03f7012ddc2c4a7e84ee0cb1785bc04c731cc72873176117b3b1bcbba3cfb73f9108cac7c2fb0a00eda4d018f6e2a6aa61b57f37baafdebdf91e43bc02567eb5ed6980f870af40935e80bd4da057406d659f0e98db9b99757ae55d761b1a9c0b8ecf3f7c6db196b9c996800e61021256f49e4b6b762470c62bb38f3ab4652bc2651a78a75d8ee4b25a63bb5fb80940e2f742fcf8067d41668037d109f038f2fe3d0d61ad0e31dd22330998e2acfa12202095a8d2901f221419908cd505ca8ae2978d212492e6d6539609217f0b7552573fb13e2da688ce87e0990c1ddb225d9b98d2079c804d5102c5649c5313af355c27ecdb0fef66d82d37d11aacc3ef0ffa3ffc87cd263611f89babe2251805727874e9a73b7770c1401805dba93ece6300e80110a1ce1c5873392af759902f99d0b949176a2816126e8a96e45854457e8faba9f8edb74e04efe0bad89611622093dc31d4210625972a1866a5f752d55543a4abdb2b8178663c6ca8b85117b6bf02df1c4081a2b7092f1b13fd4ba113a8341916e4e560fb9019a305f3b81dba260a5156116ec996b2d02749cf175a820bf9ce3466ba3390ee5751f751a13db458706a4180ea3c8b337cc380b81535b2658dbdef1b7d08ae0e425c8e4a3c6d908464440d1cab44dc4dddc54b662acf095551dda80e652f19a5f4ea07e1579a25895690b8bc002dc6e09197b047b7a54493471bbc84a297b145f255a1dd1bd738d2cd31206fdf7a3933394b993a5be98955b2aee9e5581c337520a7c9ea073109159b46bf44e5361143e34933edc667d05e529e2d0e5f593cd9048804168bd7ba68fe92cce1a5354588e16353b695f909bb48de6decc84c3862c4946f2c6fcdcb5c9c675cf7ba6b45eeca98572d339a4c84561f701ea0e2a07f6c36226cd39c66a47093681cd2b7051177f6a45004c7e277e5c87b960ccb13cfe78f365a718235e2384cb9937dc48567a32cdfcde963aae4d272098a43cddaebf4906ca5b908388a22aeadd722786b832c4f29a0a302e214caa50b621deb374bc37c3da370c0c49169e8591d00e14a031ce24b9391b5c981bfacdaf59a0e71a5c35e73434087b450ec3187d83945f10f03f2283df06bc1bf82060603d6bc84c740a9589ff329e91af8557601562954eb951c27d8ccada7fb7b0b7485754e339cbecc4e83b69f7fe82fc8b8ebff8adc485d2dd363c88a22a68612ecbf9cf25d5f6b1286ca3da8e89cc6cad14175e313709b8c3db9a9b1153db2e818473758911a8f9a0ecc3708a12d650751dc54492728fcaa5d791982e76d4d05cd3d96cb91830372d0490c8463724f0bb87f009251d84615d18be31dde18721c36c3c96dbfedf923df5e5a842cb84c5666e12df369e30181c183fddfb7b0815844bdacc322326dd7b3f1d8710f6d26c457a99585ad1cc3a4625106773273dbad8b7a56ffa1c80a1130420a1c1cb72e9753371c200ad8af95b97394d30e4c54f503d67ef6f5dc823ae7b87bb0360db59cfcbf0684dc9b4f48685e446f8f5b33cbcd0efb3085c8f753114d3c7640ce807b8e4ea3ecc10f266d9cd4725d871aaa0bd37c5defbe62e6099bf9043cb1617982b4724c39db5a312f3f64326deab805c55611f27e2fffa5f73235d62ce2c6d1200d642bec61babe989e2913cea32c78b0ab3d19c19d5d8eac339f435e3bcb1951de82dbaae0fe476cb5fd2370fbe8db632edc51b87b9c6e69d5294dad35b465d174e11c7c4db6f8c12adb59e5bf21628aa9c4588c2e78c88c574c2bd751eb75ebbfaaadfcd9d146433d12c56475802cce5cc49e8d465a380d0824a26d301110a2514e43c9b5ac60a6228e5be5ebadc2b79e36b0d57046061f3187d4e0d11b190c2c3c0ca66204345a954f597a845ac86cffce08b14fbcd0ea9de6b9748de85fff5c4ea41d8bdd5fd7dd6b2506e8a803aa264326d4f09aea24aa9175b03e67856329c91a1b0975a2899bd8aa7dc9ccba198d9e52d3b58374378df9e60328b4ba416f6320bb2e9559caa44e891270c473de083f3139c4e81c79c2b68c93cea70bd60d8f542d92ba1ed20f3691bb017a04649f49c33dfbe4537020671ef9488de4f724d9b3b5fd650aeac53138986c83c3893bb0330408e9e91e60d677d462205ce74f297b140517f94267745a8fbbdee2844e335c103913f15e14cdf88f440b676465ac645bb3028b26fb0dffe67419fd2f71168f40bb528350612ff4ce139f22808d8c98f6f0565928ea0d0abb8c1b0a17791b7d63ce4aabde230f982e2b0509b33b9297f69ac2678923e64647f867f432308a8dcf85fe5a6b765549867a4be46b3ab3402c8cb415db09f52beeb100a54568caafd88bac25335e06a16752d7282d471b8f348fb97b066e70bf709bbcdfcae6ba0c0ca38aedf380d441ca088f2316779642031a93c01a3e8c161782f2cdf6b1de4f99c18f3b11cd7c7fca630021d9990f0f9772a2673a8cada86787a82ccb45fb0169845ab2520e2504b503d4065715f4236e7a6c6b450c0645279698770f4fdcbddf11c593487705dd45bd8f45def9c51461681d052e3a51e21308e27beed0ac6da04283d0290f0dfa0c6d3badde4e08c09f69fc0fbd754515e2a499f8e148a4be9255eb955343d9fb5327ba03225f83b506b4af3908f1631ea51a6747ae2e44c2d7fbafe0195ce91983e186b706920d61f022e904b9c9d1b2ae76c7ef7becb37dcca113f118f21087d7f4eb42415e77cde4805775dcb7c800cfbdf2e6c967de0388b566d0e62c73d81c958f94b131c938bfc51407ae613349bb668eb67f6903844ed63775fca4fb6028bc528987427fd2257d5a4a93c63c79bea12797c24e2fb5af40eac20958b96aa7ac458e112622934763523a7f648b414f6162a117269775c2283ded3422f2b98c2e91974df183b49d6e313160d6bd3e17a87b07cc67b166bb00962bbdd4940cb996e8e33b5ac994a06b44e8bb51df8b3db073c59dd1f6ff06b9ba6e57bf53e39a0e262dd4eeced21f40e329ebc3c7c9128226730a531766e90b9bfd0e1396ef9560295ec4cc235c8d90920d754151f5edd49be0d3f5f9b1b8e508decf244a7ab3d2eb4b0bb6973827aac5aa72b9f572d3a354daff7f0be9774328e1021491ba1f9a176c9c749b61da149ae977cc34337e1398708e18890b17506b052eaf647db0668bea87ecb02e55ff1a0dc4e1331eabfd05947cc6d71910b4edb6392bc25c6d02bfef2e1d5083764e1580dfbb64de9fa275f77a6bb6e2d19f5119545a00a8032d185bfc063d92340c2bbd39a9946d7b3628ec87513f90cd15045e9747d92944e40b33b5f527f6cc76de9c213c3137bcad3d63e1b286aafaaa6dcb0504044c5a2bb88da1872594be4b7b62294fe4e24c856d1388e673b17424614312abd2cbe55c96c7a951f58d731e4b1ae44bcf41e99fc41f552643a5fe02ab34a1106823c96f79d0dcfa355fdb5beeedeca17cecbb6b2f8f4f439dbd18d28fc8f6740feed00e673c03cae378874b27ef77b8946a138014a4862877b80ab5c7b7fd92a37764fae941f5f4ca9847314f5f6ccecb149b193b93ad84ee0a824037bb26f0c048f413e3417aa6858c22883396c2b4de3c916baaa36eae84b9ec973eadca04c7a1b1945491c50cfca0a69deda342288b1836a7a55bb1c565a6bc05b669e9aaea260afaa86b2817106fd5878eb80abca375bef2b0d97534c411fa863a07551c7a3d0201303a430259677e19463b7679871df1170d92902a2e133cb45e729f928c739474015ac302cd2db941612478a3b645ae8d61745d4ac97e52e54acd9fe1d6c692c6583397672d68d9d8c3ad25f9695d7543d170de102bc1fb0b0fb64f9eb9102fa39508d09c4edcfa47983bbd96398c8a31c6a8ad14ef9b7bc8200d23929d90fee401e40f22b1f1d2a09d08f0cfd8db28d50ef86f7cac4c93ecc09ca73cdee25bc38e8116ab5da6916d4a582671c9db64982ddd55381834713c0b062a17b3e936f7061399192db302a9f86d6bdcd27947ebcc7a613da74889d81119c3c3d93452905fb4ae310b59c3eacd83a9c9d558be83873aba64355422120595524c44580519be98452707c999ded260a49ee5f28c73c1ed4ca41cd6ce6d4b411807163a39874cb80d361c59056f64a40ec7ba74ce603775463a101dfcdec4457ee06dec62abd53676f41fc8f46b8740164079c6aff19b2f325bf90122e7051c292fba2737c5565000eb5ecbc78abf3d50aa45384f52120e8da920f71fbea1eeb8f8857595a100624ef2218415dcef8173c9ed3b9360607ef18e6627ef6d1e211590b627e8dbe1040050464d17c032eb563583b333c0b3f04aadc7196c878030401a781a81a0b529ca5788453c311b128dc4bddf8f625ce47322305fae20a8fd01511c67cad82ce84d6ad9d0f5f02e0bacf01389ebadac3929825ffe9f9083998e0a8d1cd5250040febcf1c0b8f0b68b7d929cb20ea69e1eb4d712fc18f8ac0c122ef902e58d122e67d22f40cbe07ae7d1de3f7ec1149a91e32bef78a50eb4150fef6c165282974f496a96e20c6d99591caee0f6913fc741069f2b12c31c293b7ec140a8c31c1c65a83c40830477c9cf47a516c6f640934dae2a8fe2fbd1a4d040a97192092892795a01c71fbc185ccf6634403f986621e35d8d0004ff91faa11b2098a25b8216607c35ac8c0f5ac9a2bbc8272287b807bdb3fb0a1b7bb1583746262f701f69a28cc9a172694ab4cb3abd071e421dcdd29816ef3261895347ba074f8ad413eb4acdf9575041f3a41de6304057527125a524eaa29034d59883af2612df663d055e9848fca1458b6f5aecb08d968a09955eaa2933b027ff4c714a18365011f0eb247bccec3f05623c28450b8de042389b5ce9e2f02397727acfe27f57060f15b97a81d760a0eb57a616b7e30b9f3b85a961fbd60916c3f5a17704559e6116150848fa3c8c4ebcf4b725fd628ee93f7bdf9a5181a1037facaa84560e23bda82f8443601551775ca10136df1fe5026d6d5ac97006c326e6646ec04e2e757ec44146cccd759e16f7d87cf80cb1d17379d9dd501093d8f57066d5671d94de1f1af2cbed974ec03e69c932f2e7c9c970331d1de9b60c562fc1ab3008c7b05db215364a578b571c87ed4527311b44459d54ae666a362ea558d0354d5164b308c9c1830a3af1977cefb5ec2b2095cfb3da5baeca876c976b91ddaad8f374e4968fc22178cac2441f2627c3a7d465af8202cef213605eefc7944e54d7ddc410bb9a0093f57f90dad26440f6f272629c253bb3c80cb62c2205b9d2d234895a2d5bb80cf733894161f78bc18329b50193d46c7b5e43f0aca173de9551fc277c9855d9c97455f19c21793ab36a331a4da68ef9f99c41acbd5c35d58b2f66d44081e2e42c94c3533dfa67920b7abda941e66ad458fc7471f5143f9a2c640d03f97516423709c8e429ee1835120c232609513478da41cbd146dd9be73c3bc569142d0b4be9146cbc338aca1000f7e6d29ab5a962195a4b01058009045e668237f17af1295a901be342b2cece4a60f1390ce81a2df5980e1ca4633c6421a2dbafcbcb4096a6cc710168f29d44e03ccde15c0a56f8ecef0dc0dbdb60f10b13d56f5547d6b2f12a77d1c9dc641c731e0c83bf59ef1f3273e3d45abf2a6a2e24407283d6c72d88c251f32ef02002cfae8015942edb328b21332e64898311a87ffc419b24d95c629e8db54ddb27a93bec04cc92217157222f063b1f37c02dd1ac21823c94ab7b12f529494f8178c8e1919cb582d162e4afc98741b7f48a0a516e795105a4116e2bd9e8af539ab482405daa836b0660b13208ef2f56f74704154897eb843cdc31ef95798c9c273fc861b7fef34b68db81198cd378ceada283bcea46d379b6b261a45688977a91021c8d230553a32bbf5b2eb3dc6e2e25c86cb9483d7798225898d9d9cc3f1ece4588c0a2b04dedb51e8f24c7b57fb78d10f6d37e04e09f06bd431740265f734777120ad849dcd004b4d74f21a40acd51187d00d75cf277ce013b589cd860cd6b8074abb3c1a40495f868c85b096886f76284345b0407fe0309bbd8484b3c14ce315d2e113de39c1de5c7e73096e57377606229db41e7acf3b0221e65282175396539de524b79b8f0b889c54336a75cff4c74b2ae02ae0dcb20f5c5d8217eac2302d20c0af0cac38f43632c20e89360b936491344853a55b1fc8e5d8c30c44b0138c1a3a10a2f89032e1100bc279e48e8d0076093c5428f58a0e666cd4c9f44ec76f4e12df5c8f32b1f0a77105f7dc7d7a777a78e9ac4ec41af2bb73d825ba7fbd4612cec33e6a8e86a39e8742f58f750db15f48c619cc219325bd308b8bda495feb555dba59800dd73c5c8a944f9c0660ac5cecb308efff9d455677c33074d8a08a73fd3df14edf35470c574d097b1daaf189f679c92b63e600006d0b09ecb51d7e0807a9d940678aa2ed13a3671534e3d8b426dbd0f02c6171f45bc06f32c544831ca7023b7107946cd7be3e654abcfd9813afd8659f214c7584f49759497e11c523dd8e0690838a29c70d6581703ad43a55a9d3da66605aed8e1556b0ad9c2725508e1afce904a4e48235486790a0144096b441778455a0340b2bebed79673d1697d77fff62687a07fdf473393f5943f0fed0b54dca2a6ec9325b337309e9204762a7eca47d99dfc4d4ac5ba2d37126106dc8f35c44bb3fa8231db676c258a999e46d8de4038a24f7479fde1a66180d2b2a65685ebc62dc589726b184aacb8e7294a91918aa4eec2c719768fc4d89eba1d030a89953ed998f20b487258e3e5144b0b4c19739485d288effbf150f6654472ac3d652e0b85233664c13ee164ec8b2e57a0a8358df832d9f7c99c7c1987ca8ca0e455cfaba15fbde9573d5914548985e285494f109af9ebf0f41c213c2f5e53d37ed8b598448ad3dafe20f705870e9f0ad7c13b2c8a00b0adb65766d2b5859cf055e13b2318ddba41243e936a4a9771d4e38c4f5b6f74966904166203d4cfe88acb7be5198b738b32fa1efaa1eca65ced85468fda65f2c8560a4b9aaa4a9a467c40248e4bdb2dd2dc53e768b4757a19197b77875205ec9c7e18c01a54242588847b630b53573e89f6f907d678c5ebcd9c54d093fdc2f498c6f8ac74666afa05e28574650f674a9600250b7a7af5ed523e82622a041fe1d1fd99c700e07eed6f13a7bace73f3eb4d0d531fdd7c13c364e8b8547526d410bcccb94c10d5f1aaaaee5b8c2c6cf8023cc9a09f4fbdd83de90e3938000a3259324806bf01440e6e04b018615a694fc9dd5002ef0c2ff9d5bfea8d8110085ddf72ad8215e862d5e4449265227bf0a5bf20315a5ba89b0fa4009c0f5adb69c7a21e4e7a65519316caab0ab1f26646de5428d500a2b15407847d5c4c07a2a6719c52a1c12ecf72e561777da532e39e22f22c16fe0c641ab53a55fc11d4f6ac3ae2d7477cf0d2d3210d4f9134777ff4810130c147f561871060c0316c456c0a03f6c47b2af87a64a9f20f0ce84a48ad91ed97f5ceca026f52b277eef502b1711f1e22254ddd2bf76bea1b9aa2e1415b8f49231ee57cbb2e8f512b1e9b45f19323ebbf143b8f219c164054b1911cfeefe482d24c95777bfa0984308e3a694d743c38de5099dc4568cd283c78dc5632d945d1cca82878bcd533990b92db504a9338c892e9c504eab16931fd3eb73eff1e6981733ac1e4b97d8af88ffd23112c3a29cdf42a7ec0f9cefcac001181c2900b799530c26a8893797108ed23e0c99387f5b264492cec41ce1517df01b982aafee2b1532127f513203bfb4e295e287bad137df63ced17d140cb640b87879dc2d4684e1f481c3b02ab5146c5d09fc61c03e0ba49716006b513b036513fe388785e4e8544cd3a8c1510df6b10e35343a8e689691587f5e456dd12c27415029fcc499b2eebcbe20e44c23587aeee89d3ef505046e2d9435822ea9770593c2b87398acd5069db34e12d468601d3a97d169e6d13f749ac830204ed13c53e1158898401303ed1a50f24fac012a3bab46d9f8faebde431b99345c740309fcde6830a86d97d7c0a939e21552a3e7db5cf56497a56a8f7f210dd91b38a29382cd2cdd4b8eb4084508e49e5a9d8bd7cca2cc83851fbc7db692fd8b1131348d57e03102bcca0cf619493f1b5f2c62a9019e768c69c00294366f0b70883914a33773d61b2bf98b77c653a577d034c064714da896a4048b0eb0f0eebcfca4c3cdae5d2f2708834267a5153bc6ddcc202402b0c3cdd3c2b717bf31c85ec5110091887d7d2d48aa3a7ce5a1e9868371b7bde74be281e2480443fd5ebcc8772065631a09e6b5e824dcb166931a5aa7d0b216fcb5af3884b91cd1ceee639460f8dc00d2525716c25aee874b0794aa06bfe4961c9ecac08dfe3231e28e7bfb4f9f166be8f36a756ec0ba1a4297d1f55957f6489e233cb3b56fa5e61010c56dc9c8ad42c78114a10448b1b21e95c389fd8dc4d03e42e62869548d4a310b80d2122ee80a33ca02e7f5b02637530cdae0f4a5b073dde75a06e3068c820e3c9303b8266f579bb9edfadc9f40dceb4272019d1b8a42d2e5aba5c3037bac6dfe0251b6e24e71f5b68b310981d3a937f9246f5723a50eb5075e82408b7db3bebf52147391002b968df43ea3a9bf960c1c2f5373a3869017c343b773d6081c2c6191103ccc3dcb3d90c36f0b25fc64a874ec47ab63f89f1cad3230a584d00abf4bf0cea2f8b26425d2bce46bcb9e8683dc5e98ba7c8542464160910fcf7d6f075f31b18fdb91838ba89e186f1915358bafcc7d92657df3a48f8c2ab1626407a38f17960cfb0129510a99b0e9f89acbd18f13cffcd9b6261c3bd335e23081dd341f5a14cacac92e8a578554da687dea95877cbe114ca053912d5ead0c81cd17313ead2f3523ae12965e6580ec5ead33d7c3fb3f8a7cc45e92cb2a2304d8985042db70defc658d04d78253ad04a1b892fccfddcf128aa7cdee8f67f53e5a024083d16c677a646daba8feb8c94ae06510eb926bc8404ab7da95a7012392bb91c873203c677e94b844576685f2619e7aaae868f82163199d6af2558e08f2320a85c319f8e447433cbe9e14e0025581a514cc3680f60afd00e866a031d5b36bce621abaceb2d4756ebe79b14dce3a4907478d49f155f2785c24bb4644b2c3fdb484a646e7d0a8563bbbcdd80e4b66eaf2cd675b7164ff857bbb128f9aaa8f6bcd04ad3382606eb68e48b399aa068317aeb070687efb63e0c9f22d7f28dd75a0e79a23b855d958e97718c593594fba5246616e38c223700517530b7ce44a62f7230c4e9201842a159508ae745416e7475e512143b1bdf0a20b01cd5d75c94f550d12fa4d31d2d6326bd57c108650565d020ccc48f69f38e9ca4cbb99d2c5e20f757a23cf28b14d2336ce03ff96d6cd9c4092f102eecc3659a8b54f553822338443ffc00ccf8ec4300c116d7338e62fa39504f93481aa23dd0b7b86f6c7fcc7b7e86157d826844c0e52a0b631c7ccc08652526789f4f61bae082fa9c13ed2d4fa4c08cb274fd3227a2e0771d4d9679fcfcd0d5eafb713ca1e507410294ca9852cf7121ae61397e9273ac2bd04f128f4b8c876acf11c3d483c6ef2dfaff5f92b4e74b806c505a8fa72b2072150cdf959c668c6191256b4172a80d66494c25d88a6dd43d25c282f789736d3547beb2f1b921a8b18c8c50caf067878719d605e3697cfdc5cc0f24309754d50eda8e0d67d46f72ab7ac9db58f2079aac87683e287963011d94dbbb677bfa81985234846270e6ed2220db26d5df6a02349a2073a5ba174d1385cd9dcf83b24331dac18cf6a80a1b7a75b0c11beaaa13288b58efb89d3fbe5689e589b8b4ba50541c99b5402ae1175aef726d02d9d782aaae130c80d4bac576d8b4df743da06f64e00ce0e56b89f6c56f1a2222e2eb71e5165a8b8a8ed3befab19df741c82c455c13ef07746c8fed8b8e92d11e157bfb1a3013dbf2d96eefb25b9c6af11ec0e13990d1439207cf65342b629461050fe0d72bb242198ed04c6fdda624088a44c3a3a1733c5c5c4602b3070979575f9adee17c81c881cf875deee95f90b0f583b525882ec7ada25d04640d8af0d1d110dae8f10c5e63f56e3f487c07be27e188e6cb0a7e0f472f538424e12bdb724e013cf370184584f0c514489727aedc895db231b8e1d431964f73112d205a6403331a2ac7809926f8294d34871ee1cd421db85b7ac046fc5a7fd5c2635136ec6914801d56893e448e151bd34ee2a0cc31ea0e429c92d0eb593de05a74a14051046fe6f4a428854d9dc5b19d2addc25accf1cfacff75502fed864e57741b628cbedf51f0d04b437f8e166049f445d16be502fc8b1443cfc87cbf16ad8f057d7d7948e31d2e95a920176a48d17a561e639197bb0f373c8d0f2667581c0ef14df93cc4037eee1ede2df10be342084a09114af0a01a7478704350ffef2df8752c1c2b5f9897c622bfc7fe63fc75d979ad2245def4e83a0397d8c2b863998e83bfab3e311b76fada411766b0581439a3ed3dc15f448179aa24ab0d09298f976d003bc21224c241f3c0b4f5186570429849a180fd60efe758b6ca1d20c00ca37f8930b86ce272e42e8914f6e81cc46aab823b84cb826d3f9355f11707307b50a837862b733fb8e5723161fab1735747a65c0ca54dff029869852091295b9719222403f717f945812bef7a74322d8333f08ded7a783e0bc8727e13469ffde026f7d393f1d3cb7595df67263bb92177dbf279f3c24c50b40cc7ffc57712150377ec7fb47ca2468a3d38d1e38b780d4ca007edda023e5a434b98aba9df8e1896b9334d625e1a6504b7b4336a54fcf4986b8a2a089e9ac6207e011c33631f6653a8739a944f6813842b65f1baf1505626f070dcfb9b8f20dc93697df5b74ca4d16951506ff4c10402972bf89a60939a010de7f5ebdc736dcf22b461b5648e9ea2b72f1b9bbef0ab120568d6c6dfd96d48e9bf1339e35817613f993ed19771a86a926103c446c2dcc23a86e0f00ba7d3edcb1fec8dbbf93fbc70a0f5c5df51a43e009578899256c7e818f680331e5bfd783d3de5dd10fd27f979927cb69bf45bc93387d73b36a78a1a341a31c4fdfaf700a16eb9028a53de39c68437dc2c7af843c32e908b9d04e028ba3fe5fd7fcecf780ddc7f4e9cc6acdf129a76490f599832edd9845e515617ea422a826d9eeda290c73719f7d4f493571a0520a291d55040ac2b81a351b1619f1ea29c8fd94b14e8df18f407281b249067e195f2143f1d8dba34174a030f726860bee87aaa5da2b9843b2c13a89b25d6f9305c3a87660a9539363b8b0450a8970a4195104e1f50ae249fb04a494757fee7a66c5af6ee9d49d3b6933456ce50f41f16bc8e943c2be792ed901b852a037ad896a0bb645aa1904f63234e4b6f33f27361fe94a878869efe82079270c0dc7249c20104c768b88a10a66d502a38b57f07ede62e0cf09fbd80a6e3c7d7cb82ae5ddd77a6c2780e7ad976d09e6a6cd2615115396b9254a12eae733cc0c8c980ec215cb33f83f61b30f0286fa2bd047a13dee41c4d6eb00d15c0332071b2e147d831fc07b87f9ea8ca3a980422017505afd19580f78b1042fd745710f44a2f97af538d84f6452bebafe026bd3b81456ba2b8ff0b12dd171483a1901986058e2c55a1cfc1a7fcd443ddea8b0d4f45797c783745036f859cfa526d8018f5ab39e56043774f2839ee739ae5b97624d250fcd5a4a52f6c609586dc0717a3e53fa6d7727f47e6939e9a988055b8dc8707876a185906087d0aedb7110f127407242b536e78242b4b2d6e11ded91329a6e62aad8c9a85cb0e14c523395d93566510f6bb6cb00fb55b61765632e4b4de5e4d461e00a562555b7c9ed1ad8e552bc850ef2ac995cd821f9431281d409ec96a587ad219b53330b14bb0dafd550b42178706ca7d8e29bb8b92d1bfa784d08394feb2a2848d03ce89dc4d5124f17bc3f927b19a6271c550dbc3bc07ec2119a51712bd39ba34c64a1d0c0f880a258498272c00b601a90f8d5828611e04e41e15660a1f45354fd0f64e8429459dab62b6d8629b18dac05f3427a49bc991151ed98fb426c9c694d726ea80d31692097654e6d40f198ebd2299895206b4977d47fb05bd2319ef821e07d34de92a6757ee03d38e5363199f2353846141b0f47ca302119a08110aa22d1c605444600813b9401b55e9361d3d485ce1eccdc80220f3419d2fa341108e04d9a97b7a92c83071f69087c4b09a392f4abf5202696db4cd36832049608225fea2b10c0247465f523864dbd65de87919b0c875b95f56212f3eceb9e1469071b297181e507230dae5626e473da32b4e8c6d7090d8fddd73779df045d00e69b0ab8070530c7b423c5587df1c447931fac1eb5dcccde9e059d27855615b7f74e671bb55de6de8e0cd0435fb81dfa1c7a95ea5e9b0969eec55ab782f9081df74449057425a9d9a6fd21fc33fe84af5dfe90dcc53d32c34a6429bd7c3925848bd58c5e8f9f80a36a06074cf800151304f7bc3fce03a3d554ebbac1f3388f47a62b2e716c341bb0b328c0acd486a52b4054378e745f1e22ee4ccaea5f2cfa8798df9d2de1eb4deea263aabbe9687b288807e437f233368e8e2caa6f784baef05e9e8bc866511407a5e0b7f3fbac4548a87f30b9f0eba21f5d52950ee6627d203aa24d954fa6a475ad95b3cb6625ceeab4100d3aedfb4a41e47f99cc61d3ca2cab2f3f7c4d052796dc60416b561e8f612d6fdd142d108f6d5c46b5bb426aaac28ab19002a62f000da96fff30220266d9e47afeca7615ef6a237e1ed3a3cad9211f99305950cf595d66be14bf4532c7f41e8e1eb9883b5e3292f48c7674dd365cf75c37a88dc998080a9b6917bff79dc77ddfb9cf56663da8775b263249ac5f53bf63a92d888033f3cb759bfb19651acb6f71ff9080f804b1bf245049993b11ee6c04634b5af4daa3d523f0f692a9139e7061e085c0758d0778c68e95a03eed919108f1c62f9ef7bc4b177faed6e20d422c74c3ba38eeaa01bfc27e9d17a39e9d91f61d73c3010e01dfa66b1caf2564b8368fcb629d16d8a0a80a6c408cb97a28525fc07b9f9b963792d21aef65aefeae13f791b68aa0e0a575d1243f6941b066dc2b27a955c408a921b5cb056eaa5b73007d7b274c4f56d3e5edeac7d954b8515bbb39b5dd2e0f34f382e88eaeef9553f0b67bf173735964a789a2c125edb8aee18e08fabc1cb28d538e73671b83533df3901345a1b04a7d5056ee7dd034323a3a78ebdf1de4794cd1ac836eb34244b10a5be70938e4001c492923dead9e9a8b903cd1a0f03f12ce4e6f82779850d977266f46cbc4e6162ee0662ea3bf5ffbd33cdac1f80c4c3274a9ec7b5702c3ea157c14ebbb2641d59055645a14e6a034c73d734b626f206023ad947d2e4f5aa5f290834adf2a233bab333c00f54c903fa44066b8f7ecc0025956cd3fc8d895af154073d408029fdb38613716893592daa7396cbfcb03e8a6331e3158e3ae5992dbdcf31be38ed14c05a5300f5e0be2c46fb81423912981382c8a814f78adce52f0315f5147e71abbd90753a28605f5fdce923ee5e76a9bdc3ddffa88d2f1b77f7848820568db38938f88b6f5561fd025174268e12babaef24843949b87303df5f7902fd14a31ba832f787b89046efb1e5fa57aa89337fdba25fd14df4bc8c06f41b3938b165beb5da7360efc2ae5cbd854490e29dcaf4a59b56085c1a04b44995a5d0581a82d564ff0a6fab178de63fa4ed346276166b28315f4404b5b13177c9d8707f2ab63cd3cbf57920a3a158f5062e0685eeefb1fff2b34774e8bb883ce572fc5bc167387c2e57584d8f495aa327092043bc86a185ee61b637ae8f5d246a04352fff3ea13c940c448e477a43c348400be94c9f8a37052766a201ccb7b56d0ac4d974b859e9370827b7723ee5bbddca3798272aea097088dd3c3811c9d33a268093f9b8ae837744a1ab2f49185fd404f876dfafdd5e8a3ee944e8d817f45e092c34f6b02016e72382c5a01c4cd55b0a4feb231008fbc052cd2aa815b5ae7bf0df65254b3b6f73ac50c1a04f5b39094f39f34e2100968fa706ea19ecca1cc1a3a6fe569ba026a1d4724cc80ba8090104bc56aced8e1aface8882dfd038a0f5564b5845bb5a59872958b4f99eb1d2cec99c14b131cfd52d6853081dff1a1de5544b7b109fcd6476fdce427b09cdcd5f94854674992975fe5eed9a578414a2ff266988b6a4a7dabb9fbedde40f0cbcf2fcfd38650982e5cfb7e12a668e92b14fbfa15bda22b16997052ebf45f875654543472b1415c2b51d916dbdb4378c8bf9d879cbbc39a486c22ffb9dd3395a9bea19fc274d889aa686bf59ac7d25f396fc243e93b58aa07ca192b997322308f74afc6d9b47b6b6bdf6374733aa56ad40446e1222b7eac2ed52275b95fe0cfce7f2857595d8ec0f74a06e100d124524565e8d33b678805eb29d07753fd0187d8d23b80adca7ce54e1b026636b409650097b1f0f8c21e94582804556acbad944383efefadece8505b8e0a916fb960e4159182f3fb0e07a0f8e4221e7db9e17e046181d7486ffc605b6c89fdd6c838d15f8a58c2f2c9de12b5c815454e13b2b44df76691dcc01a1b904b1e6853c6ac769843e431c32d208a5536f7c1e1008050411102be4bbffbe645c081ebe8c3fd30375185cfb63870e6a116c82380e88cad08e25c783653717ecbb3a44e7413eda4172d73515e78891dbfdc1e605b680bdc0cf24c606a978e114e3a031747e6b1f3e4e5b951c114e05a61601db04dd229ad5b9a9710ff6100b19274373d4a2b8e3583043d2c1915c58f7a7a1cf098102093cf2c5e0790951455f90ff5092308584f754a72e1de098eba83835f27f37f5175bba3f0a87c95195519193c3d28b0d7ea0658b001d7508caf06b835beb32ef61e487e18c5434c8774875a74b41fab04c40ee49366a48302f8005c475e6777f712987afc016c1ba5e0b8cde24acd2582ffc5e5ebaf42d81f8fb5688cf008450496cd04a88118007aeff5006e99c604a78cc6a9581389e0b1b462603c8684cca44988a04678bc947e03480b8fb1741e3503a75793256bc02e8a4741ca4757130f837da4adebd41dc6efd33057a830ccb8675afd529214939d4527bdda10f96ae731cfff79051bd94dccd170c0c024bd4572da8689db741342d1bea1f239f020052388efdcd8bffbd78b299325d522ba9c7836a3a5bbb1068fbe207653b28d9675d94c20966eafd47a133a6f9b02af5d6d69f891122ed2bd9ee764d6423900260da2fc77649733dc0f4405cb504511bd868e29a2bb1c1dfa652f31e05bf714fa063db4769ae428d8c5e10c51d18e209edf4e67c7252b3748f5bae0388886d7923f3c856bf560ed8d6c8409d07b958333787a3adabf8659321d67796c67bf80c86f5cd97f0c7c85e568b32260c31feff6148ec86ee57da30eb55ee2b460edf5ee560e92d292c036afa7c40e7f3ae0078f84c1ba45a0cd10f363fd4cd07dd33fb2229af42a7656f33ce40d4e3adac1d6b56348a7c40162f3d49f3cd1f8faca172ffa0f31654cfad1b46c00f11945b8e9a72b8654e642d64bd3838fa6fae68554e51688f637a6df00e663e64188f980a8ada922cd7387c3772e90ac5f4fefbaa4661616c4a0d24946d4271f07cc6c7a91be5800dc0081243c34691b30e995c9609b31836310f760222be07ac64f24de6a093c52f084644be853e8500d3cc1e658adc8ccd418925492fa0802b718af0b52f02cabb6ebc4bd0bb7c6245c9712a6095e02b8a48071502f7de22d0b44e2a467f387dfae7609d8f798017dee214444ab97cfe965a81b510a8158e0848677d91dfcb395aa358f02361676342176c6477e85a499c56fbaa69fa89c12991842093b6e78f8fb08b470df453da2850f596089f972480b8b6df1aa80c06a7f7841b5aa514c86be5fca292458dd701d31dd583901e47d2e222654c3b00e6c44774187966581201b7fd3985c4adf130eaedd1a327a915d1db73eb48505b2a8d80264709877050aa6251e92c56784d13d459ab5a15a87d5fd57f06e00a6be09c0a2208d123e484003d4fcceaa428ae9a54e7ca3edc32d61ed8417d1000c58e2ec0585d91b1716edca9408a48843bb8ddc371ea4051c8dccae0cf23b1fd89650e9e407f8c8192adc390b01625c0a85b133cb2d3b64b17d8def6808419f1e0cc54c22d153439a73fb96f1c6068a24bcb21a9a7c1776a19eb5ceed575eb74e5b0da61f45c22ef020948a285c8cac26d89f02a95e594b2106dc911576d19816ec2f87ce4113fc229adfa5155e5cdf55147e2082215d560ffd18e46f9cd4bfd80c2c58f867e1a58cf35a50fbe8695c473129029d79fb8e4ed0e6d079a9ca4eabe482122e7968790140f506cc672c22abbd28c0c9056834474ff109525facff911fc8c0f907daf62ded49c2c26e5dfe40601fd03d456b4f83895212e7aeb73b9539956e834feccd8f268f84933cdeddf778a94d2e4c92cfd2a68a7d1f0b0bed6e632cc7aad5e5b5003dc82b7fb4fb08b784aded5be39ac4312fcb1b408f81793964580ef363e02d071f0a1e14209edb16c318409bd46a7937b19c36041b890a661c3192107bc19456d2ab6127d04fb0c4df68fb3ce1d563605042fd887436983d2b5c9e9dbb5ed2a7850327fbaa93b3adc679a1a0fb562fb4346dcd67f727b3e2fd468a977fceb05c584cf415db8c675fac87da401267f55def86d25e7bbe1f1858759c9700914e9139069bbfad87d654924529c7c28912f0673d282689dc2d7e7de9dbe8ac7cefea3bd9387f9353a5c493aa3532de2c162ed35c6c6407167a758038e298a91f2980787599afc6b37664d1c14fa1c6d6a61cea642cb0df6e9264ffefc4626921414a899ee45c960fe1db61f07f0fb531d974947d4f7e34a997b3b7f007aa318b931b421ca5b085213a1dc040517eb1cdd6e90a8fa1eaa36b1c9b718b4c6c761022b826980e7ab75b68ea31fce096b72d926c3f0fa00d2833c4c67e6b8fbe88f885b0f8b106cbfc62a155229d4fb42a8e20155feee6d48819929482f62679e66a0640099d840da2c9c6e0357f8e5a2c0c87886cb0d841b93608850c39c9411c955a7cf4919a451350c1d93e2d3c188111920b6f01701d3ce44274b47cf5e7c6a1b08d5cbf44bd3c7cd325e8906b6c3b63885dc3e4714e206e26179de4837ffb6e7439bd4b8f51523cfac1571ae12d127306307085c36be450bc314e140590bfc4da29130c5af9869888147cf7154fba05b07d688d52e0eee8b385eab9cd00f783879b4cb17ae2355cce4f6b2bef2faa69830cb59e9ac23e51dd971bc3355bc7638a08ab4ef48a03977d0a31ff57a5f68c7aab7729d6cee453ef5b8eea31d2bf597e9d34b6e53d2f8058d8e6cc05dbcf4f8bacf72963a45c64f8076f616e38cc810dcec17a3145f864e23b99942e367346a6442b891e64e98496479686a3849f378226d9d5a09007cecbf9c7ffcb15d1daf4009f75f5ccac16901bdf1ccb2a84da41956f66559e1dc005a9b96e41593e1a13374e7b08c59791e32f2322ca75a81bed3f4a2fdf2298d85cc8e3e03c2c79e61bab4546769bcf46150e1a96c58eb0a4ba04db4fecd2ac8028da3f6353f7b354bb327524f159d2bea2c7524ad1e23f94c900575aad01f442fa0a658a345c433696a6f019c3faf17eded101b8ea3c5880c721a474e083e5460b34cd9365d30382c8328241ce3229b3f8aa85cb503073b1172636945c53b196a60a53243b839aa8a446568b72dd78f14dba44f477254e9b671da5a5c01bc77363b560177f205a0939c6ac47d7248e428b69c26c602b9983bd34f402352ede3a2d7c6dc1bf3e0d2a76a47e6391eea536b4d53a3dfe91f7b5156515662b14833a489306b52364bd7e02ed17039c80e0d597aebfd4ff19c1b3aa59bed836578199cc60333dc87aa653bad7a886d87d77f888ceefa8f171bc40223f3b59e90db2259a58cfee3d8cc6eb418a4a2003d5ca5f6ea81bd643d24d1d572c32f6e28e9c58b176e7f95e0b4bbf5a42c8f4f0ba585e115c1fa9a33605c1f4dbe3937073214a575b95d348ea2ce5902d49ca1a5f8107df8e553c90dabca8942eed02dcfabef6916d28474cb97d13d364290424503c86438c35d653db0338c34d91abc83412677f387c8794937407fd290e5ba4fa38568ccfcf1c4a481622647def4648f7bbe13a591760cefdb312f864d6ba97900e371ac336aa9d6c23b1728b31bd2e9caa0071e5fa84bf465fea818d8a21df8e636e453f6a738e83a6f612444e8e3f0988a27c5da7a2b4d6b968b3920f9681005e84f2c02574c779d9474dddddea3990e75422e365240e1665f95d94181a83944cf9ca544d7855b428191e295c8560dbdb066a0b33ae7b20f87965a9d330a88883388e505139f26127b01621562dd69827d52c0a1e34d148bf1effe44e73c02508cfcb84fee481dac937450ef33736405ebea7f581f259686853165de028adfe5d9f988b78bab2a4ab4cdc96709fd78f528d3e141adc44af3197da980f1bf58f6a1f9d4630b20328161d9d632cc6ec8c23dd9cfab54d9b1924ff68c2f02c6efecc86378f8102e97a2379c65c6faf5318a5a4d46f177f8346f535cc7a7c591a926020670a6cf890bad05bb601c573ad93b9701bce6e6fc7b52c37ef577ca519034f1509f9b57ca972927370279377878205f7303714278b056568a4413843bd2e4f5180d568d956b5d08f6988370b1367ce508232347cbeff12982ce0e679408986771180303fcc21aef8b3ebd64cf0be65d3a03d68f90fac4053b0bb792f6ad665c915732f0ce4d066d1fc864c89c293e0b4ae185d0a62e0ad87022cec794be21a8e085dc17f295308512c554df59cb2d7435b47d8fd236b3cf3c8f6e73642bbccf85f5ad61b569455672eda77722d56614db21f154fb1bdb106cc836d4b379c60e12d0215a908095d0aa0cdc0af4992e10f1141048a4c29ad869fb881f9d0f683f135b58a8d3bac7ed3295959f75d91c52ffb71f315b6d4929e4b4b258b0815f0db4d988eb93480e954a909c9e070da67b846e40d248174dae1eb4f2ad2fa990568840a4dd4534eb972522171bb82aed848be7d1bc20cfb8112888530b19984ef946522365eada163b7c7bea5ba81ea8ff2b55cbf5d96b7a42638f732da19c29af1e81f9850eb7f3d6c5c05bb3688cd9750e683996333822aa88c100837309653675f89ea82e9f7c7c360b43d3a7a7899c688c5b346094413af853509e219cdf19a2b74c77fd6aba8e353f06ca56e1314eafc9fa8898cdcf1197c3d216cac3e9119cfd16073f359e3f66392e7c1b8f6d683b72ff9c7848379721e7ae90c911f6e7dfdf4f13357cbcc25d6b835d470c14b70636d061e9674668d483c2ddd908178aa67a49c5f99edca0af19801f72bfd8a5c90ad32b9d05518ec9bd1526eba7d2cbbf10e237bd02c8fb5dc403dd0e0c31b938bf14344ef02fdc9888027d38186a5acec0a32e1753fe08b27432df229752bae45f09460f288758d51ef7aaeaccc989f77bca2bbd4a2ca3eaa9afda382e41395b1ff80b8baf9dd99d1e24ad058ca5d26ded8c8ed2b5c24bda07bfab6653abc9f002c4f501a588f9e102f404d3a18aed8c27799643ce0c098248a2a8000f8b51dc53930cd4d765ef70dd8ed91f442ec0a0a50484037cbb00d38d520c3de3e2d039d89dc03317ee883dabc5059874433c533723053380c8deac53d8c33a78b1cd16f3595e8c87074c7f3b36cdb8f860cebb9ec5a0853c2a6d565c48e86ea0e64246969325ff89c65f8ec11828a44b4058f30e7153aa7de26de066de932da7a7a824a3b19deb3ad9bcd8aba3bddf98559ad3f441f36c85b4076a999c51f2ba01b9d32ec1f562dc81d58c69fadc254769ba8874e5f643f36225224762976e7f8e342759feed5adcf9938f3ea4eec0cda91e4765a08d5c7ae17646d2b9f1c9ec5be6e34e7ec00595ca3f4177dcf835203671a361db9fea0b7812ddd9dca85cd3ccc2393813cc38d6b93c6f2c48ada8e3c731b1ea808d88f09edecac7e6e351bbf3fc4ff67e08956074b1b3f9a855bcf6d5570b91e91c870e20c64a8f052389140e39d376fa3160ea44a54087c4bc1929ef14fe6beefc98cdeca810a546d1c9b1aa5035fb2787ab6128fa3837a338192f7287282afe3ea8a6c5bdfc63ff646d8ac4749be4568888a27614a841fc825eecc5eed2521cf44e3a5a90201d132e3c6da88472c4afc053bd49b1adb5ae4ac765cca6443d751eab9593b42e7f2985d24009e2d1699ad6b61cb22e001b6d5ed836ec67bf1ca327e3587850ec6e6ff7e772dd77be18a0551a99c9c7c1d2ef8c6d820d2d41b7296270062404f36b80fcde4af7e5a252b8e3b017a4366605ab809dd7ef83fa7b2b2347c9553e39062698b10b259c11d8b2a6be1c41605cdb4d4a77633946b6d4afd11f1594b43baf378a610dbffe71a6a5fff10528964eb7f0c7762d8aeef60686bb4834664287e82adcd34c00c45ea150649a0e0a596ad24f08dee405b44646f98716203c94c3a9f29a4ac726e6b39c2efd7d9525afc006a59d8ee5335676c4d53dada48dadd263bf697515eb86b85dcc8f8330514b6498f8f37e006babe41e06bdc388c6dde8fb3f1f9148e11707a3facb812aa684fa2979ab255512569671591c66e2135cf108e7b232b6e01447799b6002d4092df41f169b8b36a7399f650aaa89129caab107490dd09910280cbf8a9bf8c016b74a63b0cb38a1d14f25a52c4b311fecd6444da3b5014a3826bf0f2ab47ec7bc0aa2152bcaa782c2a50ab4e766c762ca2b00ed0d6475dade5791bd92deac70b2384cfa24ed61800fbf8ac372b77661bc7c18e21f060388c1650454584cbb941c78c680908338565fcbb1b62dd9fedd41a60db6288b761d1f3cf3e4d3fe015f66ef5822900560b6c5e3471ee3f4380358f8b98017129befb15c869fe8873accf303f38e82e6337106be938ce61fc1f38087a59d8939d54a2600a1299b6b1ee3a83d0fac96f88277f913e93934672c8afeabadd505f457d9cebd3ee31ae072c92833d5357a30048991e9d95201194e8f4baefcef433d9632162190ad476885bc1bad72cff707547105a5832d6d284120b46e619845226e8d3bba6b3a137743fbeb48653157590b6bbe1627b6e8e8e2037f65ba9795a10c7b0f3a5b8e66c4db2275b8c556b76009a0d46709e0ba107f8b231b7659f083eab100dc5b510577c9854c3057d75407f510aee2a181d6caf0bf0d20ecbf80b06e5a437e79c7dbda02095befe0290fb9805a6856cc0b43f35c75f962b27aa2b047ba6dc6a14b58400520b733fe96cdf9206cd8a2a843af442a55e522428c1afd78be8455ac99a28067f73a9eb51b3f89b8e36742dde9f38591f457e8a96cfecf7f377fb1627966d8755a531d77ed254ab2897bc5940b8196699c756ada40381d40bd612e58e97990dc0fbc5a7c85bf9f83c378b3d4c6d9705bec1b29a0b668da53ab0614ee84cc4034000dfba9e42e0584bbb80afa28167cf4e217942600377e002d116a24fd66eb1f783c01a7e6caada11072c941f438111256b92f5cf194c4303502cfdadba7226206ab2c22a7640d9e4bc0540b58ae9f175a502c5e55af869a8bb41d39b8c8fa3a73634c4f2fba5db491a7d57083804d2f6b18ff5acc391674f3364b7853b30fb6ca13a188740fbaf5438d647786708e3cb2ba5d6050f35049d3bbfd6d988408686b059d651a950c687969ceb13c0857513d6a50514925c82c6ab5d296c77acdc8b829bd90b8f9ce74dd3652f4c91577b88cb14c94906df9c49d95e216b937ef20626702c5a397016445676ae701d8ad1997c006ed4c79e1b21ebb758bb16f02a37d838a3ca3acede555d0d32e1035859edf38d2aa4872d6634595de2ba4c38e30fcfbd9d518d9b76a670b8f1f3adb0ef577687e9f9d9e9eef9e0bbd9b9c1edb62d027c4de2d8f163160dc8320e5300b5d4bc293b43d6c67160e839a54c08a07f796fd025b63b96bf8e1cbf057c5c232f1e4059794c382b83436782d3a0ba00dc43cd8e639c2c41d0e40a66f434037f7552687d987f8374c9e61bbec8d7b487d6c498b1c2d66c052191fd6c7fa6b9700e714160cfa50e6d72039994cd08411a431cf15e420a5107ce23a2f32b79dde8f23b660e0c81f25db8957a0c6bfa72d5aec4d48ca4caecd896889a9adbe63a4a7bac2751c0c189ec1e70add7f59054e97be801bed8874be910a228313dc26d1ae3bb00f14834efd460515a100b5624300ed25dad5076fb8e87b6266ebd95da60807c32f6b42109470cc9a08cac39f59139fdcd726f2b417835c9dd22f63bf36b01cd924e832b403830a4000159ef3292090b4bc4b0b7d603e3182141c64036164cae06c1894e6ae75987ffc2ed4cce95f1a582631606960b62122d4f2f41844c4da3eeb746f81d00596b61f0c8163de4e8722f03ae8ce61ef3d0f02d09ea88199ccbcd8d3970acf2bc261656a8e9ebe5a1f70006b4d7fe2a522b828d6e90f6b2c188f0b64c2319abe1cf5d5f1106c10737e22404dc08c7a817c07ddf3e0e9ba6a60d04c0a8ad9a4eeb0cc670182a91d906b4ba711002aa288b37276b8bf0e61e1bbe2ac09e0d6615fa20541cf6cf33badbbe4617b56d0b4bb7520ee9ce3a90e113f1eb04c46df2109cdf96f126604528e47d18b445617a45733d7ad5c16937e7c22a9995ad9be3e9fd695fccc065754106d54b1a9f53610d6bc0c5b58e5ded1b6b2c16fbe723010b6f763c67e29c74b7dc195ab63c59fa72ae1f227927129df4b8b208e8a63badb69bf06079c6e9d106032cda4dfcf6ed725c52ad5744c469c5f1a782fb28ec0fdd0d299eba07ee6e2648a4d667c9a7528fa76ce2196955b780aab40eece227b12472de6344d9fc399b2de648c1c31d636446a79b42b61e76f33a7c014278d308532176135aa8763cb3179fe378492c66f09c4a0b5b5acacf0ecd1faa84a8768147f4056570c336a91881ba9521447f2f972a9adfeda40a55b055722454d2eef0718b6975d8dd88f4417e1abb897562e758648c25f832556188553181354006d3713dfdfa71b8e71f80a1589046a3e51c4e45f1a37e6041963dc4be8def493f1acf7054da4abbe1ddeea44fddf5866aa25d6c0338fc3ec48978bc826aed5a99dd9225692f26aa2b99cb50910641314a056a8564042c43a4def79c0729d99bde64128470668d5be101d6468589e6c2af9aa0d386598e40130a9133399460bfb94480dba437f7e312fd22b12f3b018186d30f3a8333184ad0cf24754b2a78d631e6a123bca01790754afae1fbc7ed273560b0ea9707f30d1f758015e5a4a8cae491bdb8e0c13a9a1a2cbbe04d5a36c587150df84310e1f25a6f9b67e259cc9290c79801e4368201c90572e0db7fb4a868cf2f7269b9e0dd32bb50306cb70679eaff174bc1c22385c04d04003a6e3073a24cb568e48ed7fb06d187656582b58866dabd8b4eb3ade61ba5d36ae1f4a8e612dda5a12537dd1b693b224f1e28b30cdcbc6b57511b62aa1aed88f412beb28ab76be95881025903bf57fdd5e8bbc121e0f105e288a10b7b0d9dbc5d481200b370f08e9cabb70876f1803dc7786b131d50fafeacc2d0b96d5efc03362b10002ca4b55d135262480b0c17bb0e05fc09a483be402f07822d9c265fb9f6f3e309e51de85b2523c39eaff9c390dc045000dcd807b821e68e939f4645e0bca6bd7b956c130d67133d975381aa09c10470ef32ae0e5083eeb65bb970c43d06b9f40c17596daea9ea970ef830bf9833bd28c46a6c48533314446681bb7f66894239ad1c6b1b6bdf4190e63e50c9965d301e7fad6a2c7d089157356dd31ca06194a52ff9238bbe59f3c12bf213ca67fa927ea79d6e8d3481086404517d8ca51dab90a273af07bdef2ea1a66d4070adbe743f7c7cdd578e6d1c3b2d4c1db647e6a5e75d08f0019ef4025c04ef993a8c2c4938c51261146bc9fb491f6324f451d10dcbb8b8483d13a143fd25b29822cbed5a44ca2cd6a04293162365d9933a5f5cc6ca64015e61413a5968ee0c46d8883f5b6135aa0c4189d9f69a6f647ffcbcefd8a73695c5a921dc1acf7117ce0183695a2ae1321994fcd8a05139000eaaa22fb82366c4098ed7e20f6bf80aa8bdaac0a7502d0348379f7a2b3c1e09577e780bb2e9fe55e1fd26f97eac3f209df3d5d24468dc5b1f838f1e867664dcae621068b3ce6348af1a4cac759ce290732c032c730cefbf8c9946d1c8c479b6b612e5cec82046024cd97779c31717a6e02644600efb5aa01fd2eec787018ef8ad3580403ad9e7312fcd7bf508f39bd8a38f83bd47c445fb49cd634de1cddc172f842d520e5690dc66925b5d02523d98a587d85337f8dd2abe5eea246d6a6b68c8a0ec5de7c5484bb20748368fdcc6edf3f244baf6e4ef6261dd72cae7319919caf14d633dccf3dc91a37784cf7c5ff6b67c8e2d871b3dba425f90729d637e9d62aad322ea9bd0801f4163d89bc2a90917f9fde690a1aa2a04b64f430a6cd74ce161675302ef2169ca1d8ec88a6d9f4934a46b707166f0daf135c94beb5cddf69dab4528cecd8b324b52a0bf455ea91ea27ee8ce8343f16ad6ad67e2e7c606ba919674cc0ab7b6b2b3e536d6ccfa1a3d0bad1f0b850b5ee59c4feae193566e3caaac3437743f97d0727cb09633ac489e013a2de5b2a370d1a6df08399e957e8f1f104b391ce89b9c017139cc1cd8984ef867fe4007ddb60135afbfdc4a759957b288182f37a32dba5d0cbd474559a7fb5191270e72991501fa30d3dd9c04d8eb64f84f61a6935ad9d37a7f98a78399bc68d7904e0c0744fc20b85fbce5d5f1dea4d403f47afb4fa76bfc2f91f75308f4d2da159155f1f29709b5c95bfbaddeefeb4fb6933b86b0d504efe7c6d713f0c60a3a3880560564adcfe5a04947db14400d1d105fcad33ecc14571e508cae7f7f50bf3ca804d350097bc912251cc07c8482440ffeb04aac9bc60fef03305a20cf3c1207f05f521013962033caf2e8c9be35d1e735f80a97a5213724a26ce002f8b7b06b5809cf0b8b8a6695fec2120eb504349791f46e2cc22c79b2d9585405c503298f05f2589fe43a17e4a094ed9831cd0416a8557935462ad488c0a900842c0a71e7b837fed05b4fae9f09fd1c3695f687fa137f6e1f16eca4f63d14913532b83181469dc1322c6470b9c425081fe078896ad1794c0c3568ac54ed016807f3bbd3c2894c5b4f882f72e3088c88bcdbffa3e3cfa17bb703b1f3ed08ca50623688f6656c13bde48d71d99acedb7080be29b85552668d67125c7bf62d681150b43cbdc208daf4501329605e105d8c99e42f8e57eab8c91f9062d5bb65611d54b2601347e3c1710a561e327b961cedee0d4872bf2d93af800d9c5bb5260ba4fcae233302b784386415ce10dba59125580a5fad5fef3916fe86fee89894b2a192cd737a6f07f957a51aae2f72ae74ffa41494977e87a0a6518f443e94ee4ac80ae4c87f0edb1fab8fe99986d22881260f705cf57df3a66d524a244bbed3b7102041cf8e38a92f4e310ac671a841bdbd4fa6fe606600f82389b9f38e082272c79bb77c39c2ad530caf94fc3d6277170faa311704a42c0f8675e4ced643b3aace3bf727ce93b252142b81dfd3f37f22a546190d95797db0096a309109a05bc33597407c8e5ef1673d02cb9ca6c5cd661a75916fdc70007ccff83f4c6827d8126d479ba221d11abc5f7358b8786b90f1fb24086b60690c830d9dfa698c5780f4ad263ea23e98d20c0cbee50321476f0fe5377c22b9f0f00f02c7f92d13fd664b7cf7c4f287945fe20c074f7b2ec83ad8f312b17e4cc85393fac7cfada812947f1ebb63d4457353a018f3d33e49e33523f80c482929df4eb9b27654c612130c221ff57447ffc3c9c363714db9830d7afcad1035f7b1f22941f14f7e7f7ac23e7f9353da5bbf2d001a4f6c3bcfe53d71238e2e16ae2ec1dae29dc71ef10790d7d6295b15ba5c36434e756b5e91dae4efd6846525cb3b9a9c433bd8cf0191fc7acb373ed1dccc704737b926162b5be35c52cfdedc3e34bf4abcf757f9f14234913ca6115d7f28c24944d3424b6d09328513148fc22335a2660afaa15ac65ec8daf35ca0c1c6a5d3a287d76a29d9ed22cf90a09b86f35a54be369b4acfea7c71c4034862278face8431d374c79ccaac0846d02d29f9f499dc06cfd92ed4674da5c02f751ee0b81698a8aaf5b91c0489b8399519b4096fe29ef776513a4c0c61c4a58982fcb347b810267761df0462909cb8946992e0f87a105b25c0ae92ac12bedd18fe110a841395a2a3003e67a62c45e22311acc6cbbd4036b1f49e9ffb6de79f9fdd891e05526fb02a698adc2e032310c5c727e19b199211fd6f805959faa2865cb956f17da84b93aa3597c86be39d5e7df47b0ba561ef2a9c4d4e842d62183d9af30c066599c1ce574e2d76eb14bd5456c425c7622d7ec948afc690288fdedaf13d4c2d05f439087e4f8a797520819b3f98bd4e58dfcd3d17b28b63481ce5c8ed37196453835c7b6c279e692b15a44beaa52c2036bcc29521c85c11a12c81710170c2dcc9d7c786fc0682212e6491aba60160b5626b9feca6c40b79a5715cd94d2f8429ee1a01c94640ed5661c611e30bcfc2697400c6f6f5a61c8df7cd53b8ce41f8ffbb165685dd600f43118dce72854289299a836f377f73d70a76a01f8b7bdeaff008dc2590b3dce396396551e940d73f1a2d979ba76275bccbc9e9b4ae0bca87e5e6a196c13f44e62bc1407a0872e978e0e13f4787a5b8398431d0981b245ac64f33e2b36bffa7cc6601a3ab081055809da2a1e0c30f41de16f2bd0688b6407bd6623077b6693484aa77ee96adec52c51dc6e4bde47b4d33bb5fb6c28a14d26c56935461c11c8e7cd537664c3f184cfc89a8157f90b3649d8625a3c32399e34fccbf6fae599621a9fa9b67a90d365ef0b6fd45d5a13a6f0aaaa47a08306a1b7e38a7c9762d3a2529b6e1a63301255858a5c36c6564b880c0afcb94ece73b93b793517702aa9250472dfe4f5930181db36532b80bccc3567a4f5b9a06dddd8475d8bd3df0e98b9412a3c0361127f77068ab6a7c4b875da8888f3dc9408db460549214b9b7118e9401c0edb677d292e602f2e625a0ee19865b71db56d5d7f6419d60ece0244ab88e9e32c8421b57e17cbac0f84888579fd85a940812a61085024fb3f096c6f400298cd6057359d47e28990723c0ae2f439bf2a2452da5f1702bf639f483169b85196406e447e9fd260a34610948c35c6e4d200fcdc9e998b36b6e106b5c15cb7c341b4e38bf772ce5652b15c44ea62b12657e9a2f4d0d27223049690a6063452c027e1a47a1c03dd2f7a7f0fc216089f8536a938cb79ed411a6c6cd2ef976c972959fe82cfce8b39aa40689545135147ead04435d1b915c2d18dbe2350cb6ad3ba33c5fe2d83a31d00011d50ea1875c034e6606f1854467597f901c0749b280d2c14d6264928b5133d6172e9f82d5a99998074e57177d74d3d0ea8190e67c626217c613d22fe4c657fe483094427657bb9ad7d0b2889d3c8a44001b0f3706f93521fc0b713e4726f134102504f099f533000cebe1ce8482204d4ca6035a53c3ab551040ec381decebc8915871f130cee2040457b8781b21a390908a0e8bd407d0f1d01264c000c241ff104ed7e96fd5f70ce1ba87f1b3c158d2a7829396703e8dfcc831fadbe88dd40e41754144765bdb7b4b99529201ab0a5a0aa20a4728bb749be977c2c042e6a3503b765cf992572b053007e1a1360b01691c45277170788000b946748ca965b45aaf214694ac9162b46e619092a4d293864999ad6159adabd57fabf57a5d19f36fb9cbb1d451a66901c78529039021b1e9d5a0eb3fba901807395924edf26724564991a1caa41c61fc71fb57d2a73fc642a47cf57b532eacb2e7a5830497dfdfb39ded57c3fe87ffd5b06690c6cd680caad7eb873687a8752f17bbb00430afa414a448303c2589690dcf788856c2cb880453b5a8a3047327207bfc3fa63aca2430a3042305151a26e7fb4f6069c810225d5763282df96ad8d7e9fd9c73a2e097fb1f15785056ca9687fa9f86a1c2f1c9e5bcf0d52d4fd22dffe9962369fa3ea59e8f83738d7c546a4701a42567f8b2a79fe78cfb79aedf8f45e9eceeeeeeeeeea693bb18b5faf2fbc7b2dbe60a279b6bbfed310e5e301193d209a4e5fdb8924dcbb2d57fb254bafabdd4ed1e97655784db5bb9d8326fba11235f5459a5c804072d8068638c3562d440267f254515ce94b1a161441633cc90c99752be27e54b12765cf9458c1501cc66cd4c98d3cccc1a62acecf851e68c0e694409c256832ac5e88aa42125c4e0a0bd2de8accc1a4a6670d8c26392d2dd2de718a3450fce5892a34b16576438a2882ae6c081e88aee0d8ec6544607a4324abcd1793f02b92e8f8c245161851662728d3c924ad28c7374c6388721312446d0d4f937d4c6d7e590e7a77baf1e4823e24c9a3b56fe6ae6f2f552565c3c70238c298cd2e8e0091d293ae87046064a789122e39f1e48a6825dc400c90c1152a68c21e36fb99823830e6e20c49834d6c02093685c91c586227ad0061318311da04069030621c8a041f6c2d2ef8eba23ceddc141f89de90ccdc958999189c2c71d3740b9bbef2880183130e24c1c60e090b10d6e1c9d210311574819c289cf93a3bbdbbbbbbb794c517fecee6eefee97dd27e40835770e9fec27ae84b3bb33d14b9d85afe1c1b7acb1c34ad6128c205963e8ababff98b8e09a8a0484d2ed977ce7490c19e44ef87ac882ece93f6151471673fb590c2775bfb7a45bfc4a6bc034a8c2e12bbda801468d326eea4a2f6a88b999c15121592cd18fc342f8f22f711147baf819a759a9c795543441bb53c711a5da955fba308345558d9fc72fbf9159d7f8c78bda1d3f60e69fde4b1ac65fba30e3f2e5ef40c318e9f2afd030e9a50cedb20dee08b2dffe13fcf6a786e926a3a95964a74aadb7bf5e9e6ef1778b71bac54afc92dfa3484c15ba1377b2a28c7fc7a550a02864e0facdf3e6770f76cb3df4cab8b3cfa74c260cbe7e06d230faaba5aa94448a49dcd5bf3a7add5e314f55657d49f1054ab13a675d68218b3afb651229915eafd78bcaba5afd92197d01cfc013e5bad979a0aafba5a7ea16b77854155c4d9e4dd6426671e5983077944db75fb7b140430b29a0ac310796236467cc31668e199ad28c918d12e9033338624a0d6cc481c60cb2512eb1200a2eacc0c18926bce8221b25131a346edff6a29fc81ab77f49c3a417346fdc7e8f67516aeb4a2f686a8046cb8df372e371c11b29bebc492508205855ab57ac13ea414d0d8adb992ade088301512031c41b55a0b8624d126a8d0e6cb078c55e3f2f17c166e2d6b8c1b11520d8e2515570f5fa890d39f115456a700319305b6ca8f283900f6da071e28849cad211b2b1852243cd104c58cc01851c4b4c1c5be18650126da47901531858c21803aac01f577a59fa62690b30cdec2697823fbc1f99fd39c4e9563f93d611a34e90d6d979b35b607be1697ec7cd707cdd34759cdd37d8b0fe5073ce70ec965f387ad23b85402e4f0f4422e4df447569e85db7ac2373f26c76e7cfd05be26b666766549fdc73f9737e37c7d16e7a7e6a1483f33f97dced11d1456e78992e7a86a31cc801c265af3c28d74dd6e5df81451d12fec4d2a87ea597252dee286ffc4d43ed2bbd2c85b963ad40dac5a9aac4a99cc5d8bafd1a63098bba8aa14e71c7d664830479c5e597fc1eff8a0a494615f2e88eadcb3d4c01c344e54c125d64e35faffc92dfe35fb92874030d46a421058a97a21d64fce2d7b5a18a981e6850304da9020062664062892ea0f0a20c9974e5db600938d2e022892b3cc8c67aa9b8f293c80a70a586284c692481430d32f912043284cb492b961489b8e8b98b2577dbb9fc1ca6ae709ea761636c15bbdf2dfe1f326a00a207723401c60c9d39685813c618668eb42882b3713cc50e37338066ba265033806656bfc221e29d1c49705c382ffd448c7409abaefbb666cdedeff64d8e196e77f7bf563154697f38fb7a9c15efc8a21229a1617df98d20691857323fdc7e12aef442a676fbbddb5dfdb8625de965698ecb5de96589e98e2b2454141f45aaf26577bbfe5f2745cbe49e5345daa85d4eb9cc54116ad42de78ad008e913dd72caa55b383bd2d4f1b95c9cc69141a922b39b23e3c9ffacd4966a4bb69cd5c7dedff3f3bae5425170b9c1e8c808232acc90f9c75c2c81ca0c9ab8210b520c6e90f9bf7fcb5f070ceaf8d7dfd2a754ec19907e1a2661f4fa23c9729dcb750772ddcb175cee28c15c07c01de5d1759974fd29532e0d1b71a851c3180c5755b5daaa3bf8fbf476da81267d3ee53a29a5678fa8f2393c816c51b4e8d2cbe107b2ad20c8d6bb5f8a296dfed83ffa694edb7d9a6dbb524a297d1e3616a4a1fc2eebc8c8f73452b05bb275e7a5d71e514d683999b75b94b3e1b04f42f7af0c397c3475fc2b2d1255fe2755aaa9d2711b75c118f87e379fe4fea025ad47ab9cc72caafd0e7a437425d1d5c15529a5949f0fdd9bcf4ce5f73a5a7317910d1dea96fc144a7e966ec9e9b66e81ee524a29e58e35957f4717952fd3e6ca9bd369d195cf85e3ea5222e992b0f94954eaf43151d9f33a4abbd2bbf164573dc9ad3c578b9e64cf7bde5465e1eeee27fbee722999c8d0eb160ff56ae579cfe1e87ffd9949180f657425aa0865a3b62bdf93c3f207e0a7c6fda0878ac70e1df5c626057e208070755c0f470e5c9b23d923df87cb37f21dfb1d45fd3bc9ca5dd3ddfd85aefbe7ce922f74a57d3455fe8ba9f2275f7ae995e1a3a9deed76422f1314f8bda282f9a72b534ae66ca6846733d97c57226fb21936614df9fc1cd6a24b8b2e87ac23fcfd1d3eab5fe876287485aed0fdda3e9ada2fa6f6b77733f2651d09477ac7262cd92d197a45177563f10b5d0e4766fb682aff8ba9fc0c127d32483ecb1ef9283ea972307f7477f7e9f9ece49c92c714a3bbbb4f96dcf74495979bfda09aa9d2c255c0794b1cf774cf6b98ff4c82e7b702da854a7747ba73871295dfc17777779f61a53ea7cf39e7f439e70c418fddbf13dcaeabc2a05cca0f0465cac3510548d7d3a8fcb2095774fdc1342da59432f4e4a03ca6a8fc93be37933df3d973f6f7507e36a3d06d11cedca61ae7b828383a5466d2b0861eff0e374e279dfe06e775ec338a8e6bd96ef47f3de79c5f4feee6a6076f61f96085f03c0298407aba6e27e40982426253468e6eff8790a383d37a99112346490a432c2c2931f1100b38a82574ab1f2745c40595fb593f563e5e238c300b30aba813840280dc653ba45b3dc35851e5ff7cde2910a716e0cf3d2b85020b2e7d8e09955254fea1524a4a817ec5545f2da6ca3fb66eff2a45ada8730498ab2a081fa46815aa5411da2345ab707717c159a90b78a48a78f879a9fc3b52b48aaa638a73ced83caad42655845651e773cc26c5b5550f94295bc18c851a13cae7ee923e53d904955da831a75bbecc687c524a29a594524ae933fad2e984839bf48b4b292913a594524a299d73ce49299d73ce19699a387dd9d922cd19a72cb7bbebbe0187ee9e673ee08248094690740718729b24929a363e353d7023063770b8b9d28b9a31d7bbd28b1a3192e89b699feb778fbe7347e83b0be614a2cc5d7c9267a4b52bb5fbcff342a7e9c075006fc73716d285acc441e6cf672f32c843d681ec99e08e190af5943b85ed85e3caeba7ee4ee8b7d09241dd813a6bd4d169de45c2e8900db2357ff4271a66a561a79fefb686656918eae77b9173712319e4fd7ca751a7f1928b42b2f9cce4dcb4a661e04c4ac3523fbf876410dff95fcaf2b5b1728c0cfcd9624d06fae01171a71fe154a46b3e2d023a4df6cc471551e7bb74e729c7cc4badbc3656ca96c89ec997b3cec5baedb38eb29ec5ad74abd6ade93477d9f0c41d6a987791adf9d384be5ee846b267be8e240ed42146f59f2f77cd47923df389f4898dda857c7bb968f3956f2eb292bbe6cfaab49a3661cfdc35df2d7744eda7557177efb8d069dd9a4ed42d35d59dd6e264a586b13cd06977bed7e6bb6dbed3e63b11ad01f179a09494524aa994744a3bbd070cb5634443428a832a7ffcb95e873ca254f94278218757da9bf54ca95f434bdcd53fe42233b18bdff36a65d7d0e5f0d6d95ee2524a1bd4919992682216e24b1ca4bf4b43f6f48fa8eb6580b8fdbec442a8117b1a328836d19fc51dbb5a19ae56435d1b07193b28ba5a5773aeabdda6b76e8aa33b724946dcbe52a9110be1bc904dc8200e0c31b2a79f48eb00a38e5c4dccede76a35af79cd9fc3daed179b4817b3100dc820fc6f48d87c382e33c93497996e4b33d8b852f9df4597f1953fa5973bb2942496c81e7e6a3bc0dfee319d72f0c551e5735a98a50d90b4b481050719ae8041288b145c7439828b2992ba90f1d7150fea4b059fe401afa8f23f1d46d49b0ceacb7df7e36429e13c777167594aba27d55d2c533a64b73a649920a7a8610c4b029e8c2501d49ffe14b6807bd44b59a7ba2d130f594778dc7e1eb7bf99f414358cb93cae5b39450d44b72d0b3c5812005b807af0a5ccb32c0970df7d17b6a07beea54ca652f8be0b594abad3775c6894020af55cc852c2bdf75ef8c47b0e0cbbc85d4a95b3efa89b747ed98913a2fe1d5b7ed16106548421e38b2fb8c8f83bc94521176851069533389cf9a149c6dfb73eea4e88f684e3933ce3f7b1903ae36870fbc4d97a48f674d3205dfd4d83a672fb9997dcd536f783a38e9ccde31049698999188d14427d90419a12b521450a8474f5bf5e0420c0ce0e8b7579dc9197e41775a4479cad8f4890ee1ae9edf6a368de910cb2b9fd9ccd45cad956dfd1e94c1d1d8c1fd3368b5c4c7d7b1cd29b64101c5248921429cdc150c39b1e88db3ba0c2b1da703b9c51ba705c3171e15897a4173a8a883a769a134eb7995af67160fb4b7ac4423cec1ad32b6410875d84ec69909f39d41146ca724adcd2edc96191aefe55a5c9c073a27eb9fd1c169c4d8ddbef2907b4ec0bb92477f5b3e56c9c0e2faaffc848f3a674a7d2adbfd5fa57527a258f9b373a6f7d2bbae39fd8a8a344eae7b250a95c51c8d9baa532a3b29ad66abd120c0d8cde457ae4ae16bfef55b75a77fcdb5d7357bf47c3d1ab331c2b3d72d917f6cd5dbda58e9c8d9b6c384754fe51753fa653d72e3e095451cf977f549f9c73cee9631315116f1abebac531d771848c99ff4bd825d2495cfc808ba42e62d8420d2c73fc9001133f3811440d4eeca0c3883ab6993623835a6429f91e6429016d6e5e0889a5e4fbd4a7c227292119ff8ded2377f19f94aa8d95eec2a2f27f6a2a10cb02c327a9b0be90ecb32c25a927a970f542b24f8b3ad6967d77f18356d4f12ffb904be9560e7ce6b316a5155fc846ef8e3ebb7c479f7259f6f57fb3ed09f2ee54a93797e5ff0549cd95a9136e6eafe9165bf1c56da634ddd466b829f593b828a444165b6c31a58a2b3ec021e34fc145177af061073fe480a54b4dc6443ce4c00a9a33c4c440c66fc4c514a0e1021d9076d085b646c6ffbd515f2e1269f2193132f66dbf7dc1ca32c87b95ce14a1916ef10e95ee4f2111baa89e96b28753b538654e3badf9248f077af5c9a9eb3ccff33cafdbeb3a54e842b798676dd8da60838d1a8fb2a9fbfeba56b2b9f2a88da4db85e3abbd3696eee8446d28b9951e47557a49c3e58e4e246f9a2c35b7d2a29485b94e1baad1bc4ac39806602ebf07e1562ebf0fb5285d478deaa4857afb0d3532083f97cb3335593e4ac18e534538aeeb3a2fb553a59e5e76cbf35227b4463efd37fd84934e0eaa178e2e748bbf5327f4a3bed334ac439e758b9dd6305458e3e0b454f03f1e54d781a576f708b8e932e9c2f18521136e6ea7913dfc5c96cadf371753cf4849b7ff5bbafd2866fad1e40097a5423ef2cf8edef5bc70eca3cbdf597fd0fed816ba2599d4ccae13f1ac610fba90a6e9f23f71228f9bac1313f03d854e506f02ea7e6f02dfd33d51a1db96864d57be872c744b8ee0951e848b2a902e7e289586cb4ce5f24b6717b828d56b4ed474f9553ba8a3135d20dd92cf61a9d28bc0ae5c303775edafddea9518d557ddea06d3549c667e66be60c3383c6551758c51fbe7f7f8a2363f8f276a3f4bb9eeb54b77cd70e4a3cbfe4dde74db6fc0df9d9a9c7b5c8a32995d8745cada9c501fd8b5cd959b1b1bf0439d38cfbb203aff948752f67064beeed27c92679cb7dbff9d7e3aa06536ff71f44a5d2283e8f37760059be750d6a42b5b2eb519c6c18c2b5f0352084fe120fd2c1426931a32b944ba8f6490f7fd3f9c70e8362ad8f36af5ae37858574953bf214dba357c7d5f877645a1fddeeef2a2ca4c17010efabb0d73657eacb94045856c3272fc86ec2497317918b93c85dfd46f78b6e3f188e2bdbedff7ad66ebf7339f2a2f62c6e03c342fc0819a4bfb1c89ebe6383b9fd3d84a8fca3db403e72d1652758dd165657560239c7a561e765eabc81edc5a0e366cfc993bbbb7b227174069e57eb7fabf57ac5623db8481ae50ce54e3abc295b92bdd59ce2743a79d53f06d2eaeeeeb62c5b94e5741b6628b7d84d11758c5dcf81883aca2325e34be62083ac1c238a74817c2531e2ae6e68ccc4c1e1e1010264a6a298f38c5ae5913c8add24de8546dcb5030f7080548303a4716d0c3993ea94636a65a4d1d2d5224ad5e30b97fb727711963d921d0d66660e9bc390228a722b1cd4e93467b37b0a67b7aaaac96d90bd16c08942491e741fb5dcfd7c728f8237bb5c38a99c6dc3852c7b7ea8f5db5996aed3e523a70ea44c5347e8edff4e5ed799e9d93039248684ca397b82b41a4c4ae79c73b628a58b9be7cc976aafef68364433d2b0719564082447f51a49812615494155e58dc84f09ffafc7a999292222c32cadc0c293860d5549e2209678c65398c6445c838dbc25a9f36cf5dce5df3978a68e122949094ac4d7ab05a428cbbc8282b421ba6d7390f932758465379deec6a474567f8fdd56d23070e5e2b75c7c49571391ae368224c994230b97ef9cb31d707054e06d9efe39ce392be2bd1800a48bdfebb93a783a2947156e8fecc69cdc9c93e3388ea39c5f24edb2db86650f77df9f86cd66e9d38627a5c9563fb9eccd99b321bdd59ce110ebbaae8b0d69f17bd4cb1f6bd7ba52c988bbec9076c57430e2a391dbef5e7884b29e74fdac30ab0b1e9df3748a354c72cd712183082a4512319b94ce39e7942e7e5902176edf123cb9dd6b3efaf33673036975777fcd96656b3ea7022c25a8f7478554c9f31b27933c5ec88432713b7c92875ea91d58a15bbc44f630fd07b48c8fbc24eef2f7fe49d2f5cfb39c65f59f5e48f684d521cb01dc7bdfef854fb474a8c4fb53f8c4df0b9f7c0c7249569c1975863a6452d6859ebbdef3a67dc0898dca920a75bbd18a35a92739ffeeb8f2e173f20317635481811a4b6c21c50c71458d9a1a325684b962855e3922952445194fdc80c5eb71561e4fcb1b37c65e07b8fdff068f315e0d697545061e6f743df04a206204c9ea57e0955fa024dd7185d489e1dd015e057883892b9810a2890c3551e8e0850d65683920f3c415292f310023078c03dc71d583ce5ef9050a0d2eeaca2f50b46cf1bc4e3ae7a7f6ba3da57abaf20b142b7c83fa5df9058a0f506cc0c1d3a18863c3872e897219f50331fc4add7185cba087eea689aff6ace4e0afd8eb2726cba1e62e89a682577e99119d51bd2bbfcc685f66516e98a152217297f4aef4ba0ec5adfa63820778d389538aac6b508553660dc7a2bbbb5127af939213ddf33ab79ebbe87429bbbbbbbb7b7edc1e176f3673400733daf8e18d1e50510389460d381c79d9d2850b3332af5fa47133c1e981adcbdfada39f830c9ef96a398a2ebd8222d2276f8e038bec20a37238cedb04f0fea320ca525abb28a5758b2a7955ba45e9946e511b7634d59112dd29361baca0de0ba2494011d5a80dedeaffe833c769413d8e5baadc83692aa54fa7d029947627cf0b9bb0bae6425ac471d148fc2ca59452324bff98991964a105179e346cd6e2c9e91c73b23ca65d6c833ac1321d2bb151cb8cb9239b19c34bdd6aa66454fe91951a6986f9a484c966299b8a77d79ddb74e8675a77ca9f6335b3c5184d6cf1060de428433656a12a6ec8b14506331db0b124ebf6e2b61531b7bf04234894a4d0bfa4bb7b7200eea8ba0ebbee5fbbcc1165755534384344430e8cb0e2c60f32cfc5140c7800650735bc184309999286b52891fc9718b92ce63a15459071fd4b68d8773d1c9bc8a556b74555f1b4b0d49187a74596f10301c1b823ce973bf2ac59ba00b8fd5e7fbde17a91834c0f6eb77589343de3e3977fa57b2865fba98872b9352c0c4d1273fb653bd21a19da435a03838ec34cff682a061d73dbe55cd1da4492413dbab8fd7204716e532b3e55c3540da3a00a6432bf9e280da38ee03d819be1e3709ee7795ec755afa3a06a9e2e0d5947c679297869b86a02f2dc8f3b75a4dd2f7bd8923dfcdf39f1790d93f2b9efb8e7595d6c6f521a7a3e5fe86e17d430ea38af983a4e663ec1c6849b3b9fcefb71ea487f0d72ca84ce59f6f0971c8c6e0b7da7137ea7f94b29d2e7b03df79fd4b2f77cd9c3dc3f7ab8e5b1c3a9784fbb99d050f56aa28e20ad81033f1aaa1ef563f76077dd9d2c1d792e772c9e3bd20b8475847ef76113f04e0fa378cfa33f56af5b070b5fa2569e9348f334122f0c5dee9957df3fbb05f68f3364d2efa98e68304dada193799b70d3ed66822f37b9e9819f2a0b2925cb1ef9535a504271461d273308ce3975588ee95d793f0ef4c87412cf5dd5f3bc2f7ca5d931d8dc14de7bb42b83dcf31ef59f8742d9a48aa0b8540a89d09d2cbe7eb9907544e80a79de0b5d2f1cf93e9adabd98dafdc72edb66e4c03d857c39ee852e17a2a9f35f4c9da71ba5354bbfe981eb568591de5e1a7504572bd5642e74422ffd26ace682fe944bfe398efea4b4057a27d82d1beb9694b2f32cf8213c91aedf9fde93226a75a58ae3be0beb87b25ce87704ebbcdc754a43d61127f3d271c8a5610bf4468d601f5754d8f89416aec25a553ca6709ea02747d76eada66ad5f4b9baa22f74e70ca70ed3a7735f970a366c3ec7b9bb0439ca4daeb5a84dd4715efa9f5396f5833ea927725ec7c11abce3f4de03db93ef96724a0142d7bfb9be3235bb75ba9fb7773633ac530877e9524a3aab94967129e51c65d4f8a6bb9f51ddc970ee3ecd90a122d6aeb7d5f1e7026931d6aefe9f38ea7cf99c42417567c8a95a1f678a3afe481148bbfa5b14860ab6bc9b145b3ac9492abbe3a86df79f9ee59312d6edddfd0dc6279f4af9fe9c5b1976d82d3ee35bc9a05ec9a0e63ab0aa563228f5a3755d39c295ef438a12fc0641f047039c70fd6d2a5c8d3e406055b2b55ae1faab9a9c2ce81ee82f294ff7d0996e689eeb5c39d4307e2b65cb876490910cf26faae44e83847543dd12a3c56ea8933a1ba65ca35bb4c696a63ba231ddedb61454524454294503956c90a92a77a861292ad2688d8dc8e6c69c733b9a8be018d04c4704a6e96ae09ace9692d215a5a67446285a779b21a8c43fa268b79f32dfd06cf0790da3ff4d2969db194a29651614acb4935cdb7458fb0a71cc3b98030e2afa0575c7955ee0e0d25ce0b842c6ca8d88ef53a3ddc3d1dddd5bdedcdddd9275a46f7fdf0ec708dc69348506ae0bbbd29d65ea486d2099992567c3f7044eb8900ec91eff9e46b2c743277c47afe675b55a8b3e66362eb730369a989a119823a4245ac3468fa861635785d6257d9267a453ae0c474a85862b5f8aebd3c87665874ed89341dc098dbc3c87ec99962da5c99e1b9a85666991078d72a1371a8626f1400c1a0455a25928188a44c55031e8181a44c3c64aadd01a0d8269dae0933ce3ceecfa7fec2295c91bdbbcb1b50832dd14dd3c71737423e68d35aba61b31e8ac69881bdbada98a3bdedc9aa6dcf1260c8f3bde20dd285dffc9bd6a6ad878b35af3801c26a6a69a5f54ad4ba5443736da1d931b47d2a8f68f351c6f8a1e80a6facb3bded838640a6b395b3eb8c19126674bce9622260750d98dcd5dfea732d53f07c9c55593bbfc57ab5a7390ae0ff150ba7e53744322cab8feccaba6b0267b564d2ee6144997bfd1ec36743d8796b345f644a963ce16abaa42f6ac9a285d35b5486b3e66537c10f9b012074d7594652ab9b1c66dba7e2a7aa3ca1d7dd0dc48baa38f203eb8a38fdaf51f7dd87c145d7f3a5975d4b03187a98a300de31a70a13afad03facc9a00faeabaa9041fdfe37326867a623884ff28c3d4a773e1929b922343ab05b5f27bdfb71a0537a620ec789baf2a50caa2fff93428aaa216f91a93bb41d2517a5e8f81d3f7f67a945d45a9241e0cf6f31b5d234cc4909788e6bf32d78ada69e2119a4736f7ed449ba53678b3b75acb82d332d1f2e99bb43a58c3bbf5a1f470cb9e8030976cd9f3e5443ec4085a38a4835e4c3468d2a6ab6238584ddcc766e3208bc89b203e6ce1aeefc314473e7874c32e8fb9b1bdc64504ab5a6c78cb357863c190f8ebba1f84f4f9f518c62a65e07f6e8a29ec699e2617d6469d7f461eb56111f59bad5753e6cdd5235ed784307a961a3aa49274cc34e609a041e379d2355d3747b336b98cad63751e64d0d3737b8f33fd0eea8b0ec80d99142e7a673d3b9c99e9c1ba4e67b4e92ec99ff6d54d0da9bec9921136a66534461b8f351b3d94da2238cc273c8743c91864176b1c59de3bc53d5d48595b2cef6b83aac9475b4eb68d7e9dc7c14a54e688e528e727fa21445298a7296a64ed0390a7d14756bee1cddb9e33b7b4587eaafeca05c77e2b8532885769074acb8f3399d23d933bf0b3b55a8d3f178be5778844f5e90ed78b65778fc298daa53e4a28e9faf63e4228f9fb34b8e920cea7e3e674f77f461bbf379584a7317bf0f9b8b3b7ebe8fa2282fcc643a26f7a3aae9ce1da1277b8ce890bb4e97bb5cee514af58a884e29e5ff023cdb02bd72dad8bb7beddedf9322f71ece9f9c9d73ce59bb5dcd140e87283e1248b8e30a5481a72bbdb8f1039693b7b35ae13c0f112325744932030d1ebc8029834c1156f460849721a8247143b77f74d96ccce78bcfad61fdaa1f453cbea96148b2a75321cf4c00b356916bc8459d9055abbb86dc664b1d779446afd61d2538aaf7630f950f12856279d826978d42b9a36b871d7b4cb9fd3aea4dcaf2fdec95d5bbbdc2ea31b47a4ed9be223c21c24d84a26e89c0a55bfea99fa1b4f356e57511c0a4ac084fc8973e483e480d73310dbb496a988d0e47c150f013ec0437c15dd88869c04cf00c980bcb8097e0224e82b330126ce318b0152e826bfc020e827f6022760157611d98c638f014ae8187580696c230f0ec85272b7001052d386121841298e0042950010b5a20c450380ac7c033300d6c03dfc0393015de8179e01ed807068285e021980886011bc157f808c6f2fdb1241759cbf7c7945ce42ddf1f5b729195f8fe1853ac4946c433bb27dabd793e3b4aff7dee4e9d3653493b9b28ec085e47044d988c215801041ff040079e656039f0bc84ddc0b31236e7b9c86ae0798bb5cf49d825cf5a6cf89cc566e0198bdd7946c262e0f908cbf36cb31778be6201f01c03abc2b3113600cf56ac059e616005f05c84adc03311b6f55cb314781ec2ba9e5f60537816c2b29e83b0137806c20ee0f9072b81671f2c019e896c049e7bb0409e5d60953cf3607b9eab58083cef604578d6c13ee0998a0df24cb30e78cec1be9e71b0499e6fb0233c4fb10d78b6c116e0b906cb80671aaccff3905dc0f30cf6e759068be439060bf42cc5a2f01cc5c29e61b00a788662c5e7993df24236f62f5823df026b807f624f7816d8a05f8135e1556085bc0bb6c8a7c00e7914d812fe04f600df824dc09bc092f04eacec4b6011f02cd8fb215822eff6e6a62c01dc450b5d43dd72d9380a4b826728ec089e9fb0227876c236796ec23279ee62c767231b82671ad8159e99b020789e81fdc03317eb816719d80e3c8ecd795ec272e059096b9f8bec069eb7d8f03909ab81672d76e7398b5df28cc5f23c236133f07c8405c0b3cd62e0f98a0dc0730cec059e8db00278b662557886816d3d17612df04c84753dd76c059e87b0ace717580a3c0b6107f01c844de119084b80e71fec049e7db0409e89ac049e7bb03dcf2eb01178e6c18af05cc52a79dec10679d6c142e0998a7d3dd3ec039e73b0233ce3601df07c832dc0f3149be4d906ebf35c836dc0330df6e779c832e079060bf42c835dc0730c16f62cc522798e62c567182c0acf506cec796615f042d600ff823df22db041ffc41a79165821bf027bc2abc00e7917ac099f027b8047812df227b0247c0bb684378145c03bb109f8125822cf82957d08f67ecabaee946eb58bd6adfe54e81adab9ddfe4aa68e3e48a36be80621ea20b36ef5dfd820526c109f5bff8ed2f7efdc5c0ce1fb778e5cd4f9fe9da486f9eddf417211e7479fdbed1da51ba4f6ad51c71f56c620b34b821fc18be09b7cbf0f938b4cbedfa7c9c5f1fb7f662e86e0fb7f865c5ce1fb7f682e82e0fb7f885cfcc0f7ffd45cf4c0f7ffd85cecc0f7ff14b9c881efff31727103dfff73735103dfff73e4e292efff41723103dfff93e42206beff47c9c50b7cffcf928b2a7cff0f938b16f8fe9f26172bf0fd40331729f0fd40432ea6f0fd40341727f0fd40442e4ae0fb816a2e46e0fb816c2e2af97ea0221721f0fd40462e3ee0fb816e2e3ae0fb818e5c4cf2fd40482e36e0fb81925c64c0f70329b9b880ef075a7211c9f70331b988c2f70335b9a880ef87cd5c3cf2fdb021178d7c3f8ce6e209df0f2372d184ef87d55c2cf2fd309b8b257c3facc8c5047c3fccc845d9f7c36e2edeef871db948e4fb61482e22e0fb61492e92f0fd3025170ff0fdb02517877c3f8cc94521df0f6b7231e8fbc5998b06f87e71c8c5d8f78b3417c5ef17895c847dbf587311e8fb459b8b3fdf2f16b9e8f3fda2918b05f87ef1e6e208df2f1eb9f8fa7e11c9c520df2f26b928c2f78b4a2ef67cbfb8e42290ef17995c24c0f78b4d2e0ec0455628250acf21d3927a193cd97f7f6cc845d7f7c7682eb6be3f46e4a200be3f56733100df1fb3b90880ef8f15b9c8f3fd31231777be3f767331fcfed8918bf6fb63483facfcb07921bcebbcbb17f1d4092058963feb85641fb5a20484d44b12581f249f241f259f251f269fa69fd9cfd00fed87e8a7f663fb29fa31fab9fd1cfd20fd24fd28fd2cfd30fd3401cd8086806840444035201b50119011d00de80808092809480968098809a80936830dc1683022580d668315c18c6037d8110c09960453822dc198604de24c1c1269229158136d62916824dec42311494c1295c42591496c8a0dc56831a2582d668b15c58c62b7d8512c65afb0feed90276385b1fb354802fba36804f6879108ec8f5b13fbe38889fd8134da1f4921b03f9456b03f9640607f307dc0fe68f28065cd3a6059431cb02cda062c8b480396555b6259b60c585611062ccbe802967553c1b28e2c60594815b0ac240a5896520a96b53401cb629280653545c0e2cc94589c2108581cda032c0e91032c4e2d89c5b135c0e21431c0e2182dc0e2dc90589c23142c0e92022c4ed2118ba364c4e22c9d6071984cb0384d456cceac049b3394009b4393d91ca26b736a446c8e0d0136a788049b6374009b731b62738e84d81ca4209b9364009ba314b339a2cd81d91c20abf363757cac4e01acce0856e7657582589d2277f58b60758cdcd5df637580581d02589d01581d97d569591d2677f50bc0ea3405c08600001b028f0d61c78610da106aeeeab736841c2b85f5515e98c972fead142932bc4c4a9fef6578c9a41c017c9d322450a7421d25d9d33e48302439420e0c4906a5be3f36934139b7ff71504797cd0709884df6744f92ece9c7b13f42b03f74ec8f21fb83a85bedb2dd1e75d0b8fd9f1d757670fb514166b7ffe483145b331a60e8b6171f82d46e7f973241e7fab06da9a308454d2214b9e82346c3e6af4428f21163f441aa7054bfa308205829e3140816041b040c2f33f7ba53833a53593fde30dd30a196583696e42ed452ebe4e0b050472eeae4a08e705047ac233555823a3938dd63a85b9fce8f9eb3747270587c7b486952ade956dba42ae0e34108594a4078d6b3c22720bc90ecab6a54ff91de7e14ddd651fa328a6249dd8a81a00425fbf1326582ce8dcd648f4d125585f3a3c7faa61f57fd2b1773421fa476f5e3781e2b6c10563e6664d01b55ded1a74e966ee3ff0388e9f6fbb033940c68c95ded83b4b2b55d2dfbc04a191743fd3bfa20f928b9e852c2688a2c66b4b1258cacdf67c9451666492061049825c27843d6ef83e493e485e9082155a750e593f59352ece62b36fbdd257b4865a321030d36f084577a3113e6e673d8eebcb38debcfff6ab19166b3190f327e8f1f54e15ce719818c3f43ae4b306176ee28c548317adc518e0133c21d659aeb77946baeb31431ce55aebf1c39886b73a51cd77ffa7b307471fdeb1718c6b8fe1f6589ebdf8a72e6fabfa478b9fe31223a5c7f23445cff244a5cff149688b9fe2bc440e6fab3a0e5fabb30c6f5211974409b8109a21baeff97a11db08dc69ca9957ae59547d0809166064c1899518300a2a19b4d8938987890857105099b06c11fbcb43184540609295064b20158e2483305142f88238cec06b61c745c7f23485aecd96c36a3c9fc95b4386532884179c7294529ebae1e0a6559e6b9e82f7fac37f5f2c7075f8e2fe9455ee46ee4224b89cda3fef428b746dcc53dcab6d1f57e64a5ebd591872e0f8196c5bd90cc912c8b0b934871214f6a2933904999167e561455ca92b8cbfb7fa245893ff84fb43cd1a2e47bd4874fb428e94f854f88b8cbfb7e307ca24509f81d3e79811e3e79f2eef2fe0b6f2f1b5fa89732cf5fca3a6471e1926e799f62d2f245134ed06633d90aeef2bce78870244f72effde6defb917befd60577798fb23fb0d49187aee73d0ff5a3429ae42e2f9f28a8140c1667552c955224228000008a004315002028140a878442f170384ec5d90714800e85aa4e62489489a3248771140521638c210418420021841840866a64aa046db76a1e1e604c429fa5968caea05192f450143d4976c2f86fe21369b4edcbede00cdc5953c372b0fc285c7e0c23b10f6430efe671bb9fe85f7aa67de433b095a75bb31e6543145e9d51986d43a611cab9d584e7a23bc67c474c3bba81792970cc3220ea83a7718854ac78db8b042b8c66753e250750b6ba79d342eae069e696ad7245c1d6c476fc5771bbb84d885aa493518a84f2cf7a824a668868a64ea9942ab2ca78f5ae54232cfe01900382516adcac0fb79591b91959779a2db0c4c84889662aa81d940d4bfcb13c4b75b8d3eee8239e9f50c9c6682a9de8c9ca10bfca9c9886a66f28717fe4fcbfc3a8e18d34256b772d817c76b4f1612a07283fc94b529f59f3d390c0bda23f4a03debbacc64fed49ec85bd7a21e8bcc80a2f41dcc538ecc2e0bad02e5d849b4b78e4620071e1355c88f316f1b825406d316bb630bb1672528bc0d2121bb418e22cec350bc19445366409662cc62f16860a0bedc022cc57c2e31503ef0a2f7185b8ad88472b01c88a5963853957218f550457983bcc4e748037ac17b0e7b8a12faa6258aab0d354082615d9442508a818ef5318c629b4698a304c09ff520c945278671562aa221eaa047c2a66492acc45853c5011c05362ed14c3e16a0a1b95ec888e7eb4fb86cde4894614a3a271a009c701e20e7015c1c5217633a12f20b2ef0c141257fe9949025c765c36b7c85ce63f39f3767a67efc7329e37d6481ce5b52dd8d5a728a2458507c03934a938bbeb45e0a7c82f799835bcf6bb96fc848c6d257150b3f21424a8027dc117063d436383929cd283fc017a07b6a244f99b3233b7cf2c4c1086e9b3f9cf7e4d5086d881511087716627088e096535892a279bb46011c20956bfbbf57c3b614f0ae0f2f50ff38e4ca301ac7b6c564ca48440bbdde9e1e6aa3f2a8559719ee67ff3b829727431fd4ed3d239a5ff8debe50a2fddd55777dce2ab8d568983ffe6c1588dbd4c389b8197076333f7e2616ce64e3c8cc5d88783b29e3af13016531f0ec67ecac7c1d80ff93808eb190f0b6d3be4e3206c673c1cbcad998783b734f330d0ae7f6aec3af2db25c39918f637e7104aa4fe376511fe2b45d0ff9a52347f941ae47fa62e827fa50cf27f5314e5af5282fe8fa945f2a7d441fc6fca22fc578aa0ff35a568fe2835c8ff4c5d04ff4a19e4ffa6288af36cfacff3e6d13c75f7ae7494d99f0e6b70f85d92259ed5bafaa85cfb8bb9413a5d9a928d07c4bce8f11ccef161c03628a8b5f1a2d284a44aef37137dd7613fb8c05b37819f50222d086bc0dbd2e6268e71c70946559f4ea71f953fd54f4fdfa08beff429db8b8476201c77aa002fee8411cdfbb6eb97e49c0489c980f46a7bf2131911d9c0358d481db1832ca4995986034b37b1b20f8104f141fd8041ba0830cd23cd782c07d20b4dae4648b769ec357d78f117f1c34c8ed7aba6c7297a7b14e3a94870bf178a9b5030414f8850ca060560c83af9511c9c20dbecb3348c8738ffc8cca5a33874048a02e01ba188e7068a46a91e4a6b2245c404aab9294e0e17814fa36e5f2c2583f53a6bb1c61eeb5baa669315d5b9564a5461b4301f0bb3cc5e76cdd0bf84d677020a6572fa8fe1974113f5f4852c99641760e5d924b690d0a3d7e4c6ae842f2af9c67ff7d0e5417fca03b4e86567a5870240410d965ba5ddf09234c8de47790bfec789b65353e34cc7c3001227ac84be0048e5502c78ed6ea7f87daeb8f400035a5ecfb47f874e2ead741a40c8aa53e1fdfe172551487f12b4be40c3796088300b5dc02bd07f6c4d42863b537b82a557ef1b687c94715f1fadb54618fee9e3df2295d4b9540930d446313e9ac25f66c0a893e936aca95734dc93017b6768f88a444351a9e9e3aa20fef567dc0a1a08b946d00414728e99d87260af001b8388674604afe5b7b727f03a77d1964187aabf3be754f09737807f0df050d449d767a1d96fa0f8b2ce3548e295b846c8f0742d133c3d593121beb5525b211018b289d93a65b465ee51532e6558eb8d24ab70df8612f16a1f27836598128916632f52cee589b9cd649f8e2d20fa45236c1a105a36c3e6a1ee618971f729166f197e0e45ef2916e91fa5dcd99be2ade43138204b86a3e008ab98be4df10d45143bfc2fc4ba6b2a26aca6fdc123778366530ae4c0b2193a07f509d338d7177d2f419ac0d1198195ad40ce19fe48bb5e02650f1cb579eab9f1e3a65e4396640f945d5f357bce2084fb1c6a1775c8464efb3a6c643e9e6df3363a0a61b908ed68a930e3b0ff6b7b376d784cbd8734b2577473913c947c390fa8bcf5335c8be3c0a0271745b74da438ccde6ff204e6dc42c0546b0e373b5d0482fe2aa5c926014e3771513dadf699385ba64ba3a657540500e586f2e8497aac5e2e5174b952fc57065390e93ff20f5f947770949145c43b89406b2a08c826194d6834d70d3a26d7140b64f96537aee00248589012a09a45bccf7e815a82a6ca1330fbc42ab758e11d54a52181f266358ee0940da9cf765cf6efa5aea3990c80c67459dd1d633b073a862ef9f2a439424997878b1a58b01358ac19aa6628d79083aea8ba4da363b6f02741d2aa9268f0c31904a6d7963987a8ed352006a6f891e7be024e93c561547dd3b8756f9af551bb69e21e592eb2f099fc114853a4e48b3fe078e68d63f28a060457a67281a0eac7f6e2626a2b5f5b61f35c575ae82cf6f25d5c982932e7f8c6cf61b87118fc134b411f236570a0cbd294a881266239e3de7a9c4e8a018a2f8cdb9fc9645f6c0a257e264a5d801cb1ebd4786cbaf10b299ff4e436020613f03a7fa8c88869b4a4f07e59924c2cdf6a2ad4088cf1ca7362da92d4ebf4a304e564fe549579ed0f314fc856eec6d5c3d01bf141025dfa2d598981be196def2df9533e31e9f066daa0893ee2f900b3ef845035ae4fcfe03e82df7f1c7280a0a294df869b1a5e7aee272c415ec2370f78073c211c693cbcdf3da2abda1facd000c37d9bd6087125989f3cfc808b0f21ca54b049c2fe84fe24970597a428d8b1af13efab30b82dc3b89e0b9fcbe9f6c6b4164f7f69fc5863c5133aade7cbff8ccd0fd02b822840e05e4ea0f70437a1bfd7ea1194a9212a82758833f6a41c14c185e052eb69029f519651bbd40b737a798ae516a8f5e15deb27930a334c04d989c8116bc312593caa489e403cebb5a916c29c63d66f31db5b8beaba6786871f1ecc75c0f42cfa9e7e671482229c1ed436d8c8cb8f9315ed78aca7fe15c33289e5b663473824f6aab7e7555bd82431c1da389fd530f612607cb57ec89e0eadbce922cf2b9402fd7c98f5d5aec089eea20aa6daf8b1ccc257e6edf9b59ce76ac9fc9c8e6d8ce91dcedcf9e082fbf8f895f85600e69eb48ce78f454c5105251f4713e421586f0ee3f6c3535e0b31014812faf32ebe7db72e807bc11cb4e9c641ef6ddc667b3b5f8f695a4a03f20f48b65060f3868d6ce58c63fde622928732b36293a0f879fd7d10c5e45e7190452003318c14f007364e188ff61a29995b2ae4a181ad9c03d58f3ccc8e0784e9003f0f81d300fcc14599baeaad2e975c53498cf65902b32d340725d15f256f4ea4e027b105e561721c8c517513a2ef0316f9ac5430ce8be02523fa781d0d61064bb7a698a9f16551b15e3a30ebd648c89e033634681d7b1f1585e7cb9739d4b6410534e0973fc1a6d49771012b555e3801393ea8d5a821e9945aefdd1c323220fd4a1f2f1f79a139499e4a2989edad843a8d54a3647b62f64ec89875710c8c47f2f413f4e69d3fc43accbcc3935a68e1685c6a45bd06c49740b0ac1f9e32f1d328ce73ddd9f291da37e536445c562c0ab86949bd7a34b7a8396826ac4760bb704ad66f011046b5b04111a3003e686c93a74bc7fa3d37ea1f03d1e566c22ca2da6d723dcdfaa06a6c625ad5c856dbec0d5110a3d9ec7ac5871683c05c078b8ebd1475e8a05949c00bf562566b966a4b51fd52f71404bf51dea3cb083bc899b4d8278925b18cbed8922269699c0ce1cb1c79b983d5855b0538f6e91915c3bcc3ce5601218325951f3b53222867d9c13424a9499667306aa2e19699b14e21c060164c5d7de6f755c750eae903c998d378cf93a3cf9cdf61f23e6d3d88890a3603027f65e2f20c4e9a3c1b6e5c8d5df763c0a13406abc9ccdad5109b0672f9c914cc720d3b598b9425c91f9af9f8968371862ad369946bfca96ad334cd0347ea1ae6837acd300a53187bbc0aa54339a83a966ad08318ed43dc87ed19b8f88d6387e4bb880aec42865dc491cf9d1627fce440243171306d25895b38000e1fc0021b4efb7927b82249192e270cb1ceb3ccd5638bca46f08aea45480126f16668f92b6f8cea4e58fbdc925e82541058ec11fbfb95e202148e77326536336e33ba0203c12c831284f4185a911a29796e4af16daa3115d47f2cf8efcd26b80bf6ec61fb5288d2d4d883c75898352db253187a7792e327b5e07e9647d483fdee4563c2fc0c25c6d6ad7fa0f7f2644038e5a96973bb1643ae36dbbdc10df1bd0bebd4c171abebbd867f8b9c3c6616f44cb3dc96ffc818b37c144c33c9dec4dbc407af833415132bae51662153c2004d7bc9a33959556eda46572fa0ec79d04e90d79a6bc7bba9cda138567027c66a0573fd3f1addeb286125b07e036327c5d2e14f14d6f1e039cf963b810a71ad268408e40a51e7c91003e741dbb0d1a55efd1c61292841a6a2fa20f99699f37cc4a5429ad1195f84e28e40823539138833d3da5c67d880ed3af4bfc2e6535f625065e326dbbf21e511de3d22e01a9495bfc16c4a04a081a23ee2a33a0c95706e628f0f50ac3dba388538dd0f323924c14a0dd9fb52b919ec2b2e751ea5f21d46d433b4b139258d80187a360a705df97e6d31943aa4db5f0b006a2bbd838cc6ecd6a67a33259a8ad719c612ff474165ccb6c90cb207c7eb27ffab11dbbf01dd8d95a3452d8e29dfd029333f6a72f1bfff3acc8a00b104119c557f986d952815dc5a1355fcc5f539f148888f1ee1d3a0e730acddc9fed583870373dca1da12cca43df09ced41b5d93f4b645b6f67418843be171cca7145f29a4f1589044702a93262c6eb5e6201581fa6107608488cb6830cee4bacbb65426866b59d7520953e742713bd0f452fefdf87f2acb200576d769e1e5735238c0717166c2d4471b92a615e43e41a8e1803f144a2234b77958aefcd4a37f68937eaed9f9f03b7ab199c5a056e2f6c43bbe082bbc76ddf2bd0d6f5b4f8c6a9d3be5911794a378452e264a9b60ad73da228088b73bd33e9d6e27e87fe9bd8a60394b6aee88217c4a80fd945a5f2febdb50e35c73cf877cd5e33529efbc615b5b4d21e2f3a18259aea433fc9d0abc29a88fd01de5ff09043774e2b093b438649f57bd37382838a073f52e81de9caba8a13abaa6ec1e42930db97a70310adb72d94679f0d95256951c1556c0bca2ad664ddd99730ce9d175ff7716e21db9286b0ad2b5bfcab1150192259913b198515715fb46c0d36e3473ea5b9f46d3889f08c897b35f1ae813e908938d2f594ada590113d6748a641882548d3eee59cf47ad6586bbfcc026740c0d1118b5d3c55d70b11f50cc4bc0cca02c9606250d2605041ffae4a42fb1c834a4dee269493d349a064dd1764c23eb6023511f9833262f34bd5346908092cc79bcbbbfc4c045d722aaccb2e54a617bb4c177d5fc9c5473f643130fab8f4cb39651a378705bd56d56794ab6e3bcf077a59bf2857002050fb4ff12bd2b69d1af1b90c790f65d6de74448e916be95ed0db1dfd328b1d70d65f47d1808bd3d9a2f11411c00d34c080ab404f95e2afe60dab425f2143bf6340e80c1388a7150fb78fa84758e8910563bbd437a6c5e4edd4a61c73e43a94a2aba5090ee871f9cee14f4b89beada1090c9d86cd3df31c7fe82af584a6e5c06e7903f603b4efb46cdc194758c2c1af808947f40818949ca0dede139c2baaaecc50959d4658b48b386a4fb5d9bb00879574acfaddd9ae52c2bcc51f40724237334c90507d0cf6db2d9f70e01ec781fba42f6e4569590bcfc828a0289800431209e4c93b9b4d4aa4e2eadc3477126c5fd203e642d700f1fefadf4544c1ffc981e1e0194debeedd0821bc3b440eba19c5871d40d896399618a10f6c96ab47f166721bc5b13878330105f3903dae0dc497b33bbeb0ec45ac5bca5c31e869683ab85cbe526d8fe7cf0b8c929325008e08aa358aadefa24950552e2b88592693fb5d8a288b86da52e67534c39aa7f39d959f9eaa62c871322f96f03bc2e00ce552c26aa1778c73dcdbb1eab5c6992760aef9ccb1d5e50e0bd48f3632b96fdce93eea22268b7978494312d7004456618d51b4f14e33e8923acd6f3980cf374be97e5916dc3d8f34f465709ddf765d4f465e0ef13cd906021e314e883f8324c8014ffcefe8a39bbc9a712c8ddd6b7edb22369e678fdd123fad6fce46d5443c2023fb8032ad526d678387345628aac2419b5bf3bccc01b805bac01b0db9e647351cd6960644a5b141cbd4ee1e1dbb4b431d14b22d25e4a72a6dce4b6ddeaa7260ae5521efe5b41823659ef93ac730e04e2be6e12554bdfda4de6556068a295024c6f6229fe66e2bd4056d7af805fc8d05bdcb84b6abb1a922216830ef57cd8b9c626c013ac53e0d4ac5637f54a7369942719db5b912ab785afea6131128e54dbe8c052a8edc3891513ae1bef7670ce5dea34fe9084790dc19fbcaf378b02c53e81178d98ce989d05b6df65d35b5f944915eba3f9aa19e8c9a09e995aca9734a0c06cb3abf970e15c25579d6a2fff3a4b3517689f9fc2bbd69b6368ebaa112e91ca523761115fd3e60890a1bcbf7a54f50429d901303568eba079d0b7794e7e1f89c174312a769cbd96051f913532d1176287f046a4bb462f143158f8a61ae4dc877da8b3360e4a90df01d3e7d218f846c73534a29f2bf3bebb0cea3c8ae9649d5b6768550ddbbdef9c293da9a4b451afe58bc0eae475b50a8799a3d3b69822aa399a1c7db53938466ea7646669355c3848577267cf89751cce728d7ef3d303777207d33e859cb6cef8a81ae3d14b730fccc7ca8834c9a553f01829cdce00a23e96af7dfc1aa990fff0122fa8aeb112c4d497c4a7989c9af70ec5b43c02c74428b9b4883bf7393e64cdd5f3e7c81ffd00ca57b36d0c580b752ea60d030d68dcebf71d6b220a5b8cd3174363385f479f6ac9beba2dd4665bd79f49cc9f52630de46255e0b67a9e6889dbcb45f90299b81cdbde01d82ed6c87914e5f75cfdba4b9bca28740a6b9c2da18ec2a468974d7dd39e8d888578bb8f39911936e58a5f097e76de4b2e05a98b6e7edc8ae13d98ddd48bcaf749262e0fd790aaa659e6adaef1a08bcbf34e10d940e91be4f2c22573535b80eab8f2e781a5c8c926bcadf5af8917b83009a62a36aa47ef8ec7805787dd645ecadd81a7494e4b198e0e9e2bd4ac24411c773595ddcb1aee0dbceaab69dc9f0dc3395214eccbe9875f394f7e34b0fc0e448a3bf53558a37ac31a4420b333626f5046798047d1baa01553bb77281fbba59f981fadd8475bca2d791a43f584793c87b61fec0c3e6149aa0fa043ed6173e1d68d196569ff29eb4a3c0d85cd614330b01986e94a7533c0fc096d372f01cb7b53121c6f4b00c10657e1201bbf76eb251ea87d68217a5e1ba4de8bb5404e77118d092d36e822dfd12d18223d721219d809dd9b623781ebd194f4319e64e3c7b222e33ab3cfe0a1da0f8b9da6ee504505562bc319f23a2828c1f2b8581ebc5d7c668da59dac1f3532affa704b551b7b89c0121dcaabc5e373831b7d08cc869d04e6276691a0cc9c4363400e8e057756e6391c949836a7a2afad4d9876e984fb715662ec9f1bc3764305703e31ed431a91d83d94e61d33023187155d0f8ae6e7688c15ab881f29e88fd776e7540556048a15747c59ed959844f791f984fcd7e13add161cd9ee6b6497648815eddc4cbacb74ed74f5d2c5259f761c7bcf8872937870ad42e44acb5e3a33952fe4a909c3de93ee30c593a499a2a54e720dd950880070f8c3a4ad45506b1d6f7a056415014ba8a3d82441f9e664bb367d525e84b26ffbb726a6fc71103681eb0c0cd33807b2f81b0b32e7a77360e3865aedcab34fc6b037388f8b46d4deb948bbe566ede70eb326ea5ac5aaa1498315479fb79c48eb568e753d53a4962a1173aae03b1cce5f5e8483f8078fc6e73d56a3c405efb0ba034a3e489c76ecbc0a24e20526a63be1ecde1736b85f5d22215967640a62364c361de81e1d625189403953c04e0e692c06896f4c8c536c77b8904ecf623cdcfffa8db3b62c6685962f2e23512b93ffe2f6a7d9bf198f4628beab0005475afa433e3e4c1ab899f25262b1a02b0212ea817fe4afd96355db8e8ee03bc8420e95337de17e63da10044b552896b8c1b319db5f186321d89f67b33981918a2f8a62399a207051b39b5823d2a3f70d1ece4398ea55f6c830060ed146cc34c53da63f28c0ddcc9ceaae6b58201decc7c099e1b7a0103f359d177080258e333effe242200112ebcef177259cee837681b3c0f32fb9982221a68837885ef8e520036da43fc070968d6280b4f958cc8ab2721e2a03a934c9e04afe078f91730243215ac3de5c30791dd6ce3125759175ee49dc6d01013d8bde313093e3054e9ee60c1e5e96d12475a7cdac8944c780a5ef7f9093d6ad44603dd228fd9dfe6f972ac4aabc019eeb112eb5f6392224f6a75b7edfba1eceb524fcf3d25504379d68dfb2c2fb0a03c09bb7896831ded9f0299483febaf770997ee01551227c54c18e26371c4d8cd6ba2f97a5de6d293e1b0c013390fbaa29ab39989d9012aad818b3220a08a4c11328704e9e23ee3c116588d3560e689903f842784de531ba6a17a1c105fc0d3d9df4ac9a65c5f9e99fa7b7ac78b182cd445cee641f57798b9618484f97034c960b91af652aeb400eac2952e6de723432d9a046578b91fee347d3d75801ec0641be6677297ecd5200fd347e5dfe39bbc78ef2e7a2ad21a7ef88b669a8ac87559e3f5b1421c9dfe6592523a2893a1a25a289a1039575215989a4046d7f01b577e57056b6b6cf9b81aa7fe55f09c7f3237b296563ad0390c1a0b3cae40be2201b96be1fa265d7ce4d21a6960398a3acf71d66f9c91953a2caca80431645b84f9ff06bc3913fa94f26604548f312cd3968b05215a1218bb73c643cc00993a0548201c130a547e0ad275ad87afad7f9f354850682813488fb9e00e56d0cfc3d5f971d58c29b54afa4b1c1309c1eb88a058197ebe3cd29b690ef9470dfed28df24a2c1843c59164b9b7d56dcec780e864ddccf72d634767b71e98dcc5791c0d595fce1668df1143a66c90518ace897cbe003db1e3f0dd13b4f91064bb630e807b6d3167c6cab510f31a6917d37ebdeb4d5ac00400c6e180887769b91f4ed729d1bf8c2016cf83e97fff77d712c3afa5b340f1c17143668d0f7a253fbbadf047a68b3cff82d2e7aa9619633ee2fb1b175ba882994c6e3380ba52c1f485247d33c91719ed164e16a7dd9fecdb570f70b59aacea6e21e26092cc533441716e9d23f1a32d61e5248c95e6644b8e921155871df4fd15fb474847b6bd7e31903a1d86dad8462e5850a06ccb657b62b00b53fbf11eb5f19a18a29be3edfd87bff134437f3914c96e921898240f225818f4972e659a9b087463434900dcfb430cfbf239b7b0dcb60497430d49188f678869b3f1fea1053804f90943cca66b375449f28ed59b9fd1527ad2d1f696bf644e016756cb48839e0ff4a3262683f9396f7aa9c275e067c50723e05855a095caf874178bde1ef7580bb600662b594c2a46745d811f092946dc7c01048bb672a2cb0ce0fe3078d2599a8f5cff1ab3e67de6dbb894804d172089c778c3b741cced089d0e513b9dab7357723a17aca1c256ad0afdb882581c6b77d269fc758fe2608e4f15aea0b61256786146c3ee7abbc2abc530c4abf19db2d6cf40421e76254da1737ce088beed3e0e848b2e5425c792ee8413cd1fb367a17159f767ca7f9138d91f70eb49b716797c854987dfd85a90da46652351741387d6e692362b2fdd3fdf3f6143d6ee3d5e4351c4af354d46d1ead1b45a8abb72d7e0c6722cb56619ff376d5d29f0d47282dc1ded0be37d40288ea9ffe7de05752be8600b8b3f83fab3a619fb32d418d3e419ff7355e45af9e1debe4c921051f3f1f673d838010f59f9a30167ba9f2ea5cf12bdcbe1fb35f2f4fdc6cd4f7de37c956153529d8122c1a8b31afbe12cfe82318e86a3b6105e95ac57cd68c100ea9accc4974fd143ed91b5e957792ab807688e96671ff9fd59ff41c42fef62f87c5d3d03c0c1df0b374ae394a4b25bade23a36467708831adc7a4975d4e213c7cc9d0abac2636c243a5c9c892a1ea354a896cb721310a86418e1d404178e412236677e02cd0ff5c9a94aea8c347068a2644e957d93268acdf739927a3a1a180b0b0f7649427e87aa8c11144face35365ba3e4d85a9bde68aabac37d2e8dbc027517d714cdf18a0ca88c3b689bec15cbd0b3eb320f17508551f7d77180d90001395730c7b3e839fa47005f675fc4759f739c6c6f37fcdc6af53f7ef167337daccb5f28876ccdbea9d85914f7ac4bb5c957dd70914c031b35688afcdb0f77909f6dd4ecdcd5079a3bf09382066e1905e493f1a6950d68ba9599ca5e96f2cf80ad7ba43ed7badfe3e2031e853fb7ef9b7aaefd7290d932e6ca587867e66014836d871639a43a1e1ab7ab40759dff4ba9a9a7d0a626c6acd85d410373807c946eb69a7890928a9d0fc11d18b648ed19adeed1a688e57cc83660e60da12495a35306be09bcf0f3138e37c46b33bdfef35abad9586544ad044b3f007ecdc919b8830aa7de3e32ab2fad561c3ee30b8c6a658b1cf1ce5765f2804cf344020dc75309b0c86276ea91180ae1998237c925a897497d9e57989805cd626378637e4bd1c2e891e98093c4f4d36b5d255843e350e5a3162e87b93cecedb64d047f91955baad4ecf08e41ad66403172c41b43cfa42d66dc3aa73c2c0a3bbc02d4f93a341fa7cf61fad41e81870b735072300c432ae1f650c4695b121c8d89d8530b1aa21256cb2eb3f758ea1ed20dc3a53b523997e8a49c142a02a3fe9100fd8ab8e1bc25e1b17d2112a848d38f05fc1891756271384ed3fe82530ee32ed70ec2aa0d25a5f883f55b6e9e5b4acd1eb045d6212a42e7c4ee2fae65c1cbc261ae27879a7b505e2b9587dec9a02a99a4d3c7623cf68f28b82607099247e97e4fcc0c7c0e099f21ae6a11a20830d74fd1b92488da7dfbfb401145efa41fddd8a9ff1521179695b05961492b49a64ab505fdc780101cbbd047a25f7aedf8544c933df6f129f602f8df82043615608c8c4a7b8080c791e141dd35b5b89463de23b8fbd68570c9a2dc6546e4f023c36ab030952ca3f1f2463eb62b57c228769bcba368a6c1f601c3d75026a402c77a01f4fcc4eedf3fc066fd3de1740244e345f8d64e458216952f5e0dc909b048d493c804b30873628eaa3fb645d1e8b3d2c732b964db4337715320a74b48e45204f0d788de4365813385b271ca6d1758ee6806e9a8d3202084a9a6dacfcb6080d9c8b66d6410304ab8d1494e4e9ca79aa4daa5eb1a847e6a50198ea79c9ffaa33cd9e0c94102d2b83923aeac8db8c0b96f8a73d5d1d736b4c6edfe0824623f4168403673079553203e06843bc7cdd085a5ea7ba0f563a10a0f330b1f3aad9d51e71291f194e34c86a4fe6c85dfddaad5ca593f6568019cd20fe623f2a6fd326cfe4a976a6eb53b4a09d5e8f5b8e80ddea389884d6f694ffd46e91f37b37d66e1213948689a5424fb115f6db1e3672b4902467bf536bd5c2d12ce61cf3af0e7d0a887eb33a5956c0407b2566c218ead457d6557833dde3543b59aea9a1f1d5635c93d2a19117f55619d22850ad7139e35854cad03557633cfe164dcfed5f7c5e56b20c5ea5b4285338c1a0dc6832c8944924975282cebe32c86adbbc28c3c413272e363cff4dbba4c1659fdd91166e2b27ff8d5052ed8947c6a04cf94762b22e421efa113324141817e87d1962f7fe596ae4a73f690f4f25152b5486e3545c91d23fdae0a657130de38a1031ddcace3a77a6a2f05a05fe80c5e82c938caf0b94bb578cad2d14927ea0f74ec8788211459c393e719141b248d8e5de06aa2dd557bf5e479b232b4cc53e1e4eef96ae411503ef02d19913400decdba2536616a2b27720e88b5a0121d2136600a4526d90b1b6b48380d5656d8d33b2d03a69e660c9182f9fcecd390de46dc8bc9427150674c27db10a7a6faa0196f3d37303407db942903f956682e26b5658c9a5bb46f8979a57c6f556cf206e5fb869292619c2e17be066d22ad7fc6527ac5f9b7c2d52122b759ab02a1e03b8a07b4f27dd3e65a630606cfc9503f33053574986bc40498af533c2222394d8c9b19d35f614cb35013c8c528fc3546fcdb303879d90ae463c7e01fb2102b5a03e424ba3b8640e1301e4e3c2ba4578010224e63b2295347729eaf6163f9818f4edb2b86eaae7b97c3f8ba408cd8c20db9244edb7c8346b34a2bb52ede1ae085523ef6b4815c8e55a755d3108dcb974e56e75025c64f54d1a13fdde667ae5d86e42ac86e8eeb64083c881feebb4e6824eb94e24b1d40d960a52cb19e8f0cb0faa5e9918fe4c4b97d56457e4f47b7a6c2b16eba590ce63f548e9e53cff4ee1321d75a049b922debd82298410da9ef9e0363be1fb6349e1ce11510fc28d000212d712a6194b9ccb4fcb896629eb6d9cc2c5d5bf109ca632dd951f58a512211adac4bd8e86faee0ba3ead881a2fa96a52e070f9a14083e0c927faed7acf567b7d042eaa78e6b7479dbcc8aa401d363eb23e7fefef02d75c565e24f2df2131d40abdce48a379508cbcd9d378271e21e5d12077f0b3942a6c965710b40eb1da4bea65fec057eab7681fb13557f91b8535f0d690ba604a87245c9133c343a440ddd75f55a43e13ee86293191ba4e5a85278902f021ce566bd59175f1998e27d709667a6c81bfe6242bb0b58708898a375f9e96292929b03e9ef62c3847ab6600515e2645bc5b1278c0471023a8ff31e5239508f92d1f2c9e015825512ad1004dfefbb33c6568132f6ff8b8b82a33a352937c06b0787ea7f267bfa8d79c57c9e6a863f868c289dc88e74d8066bafb9ab2f65535f59bed1f999fd1eb6275eb6171993ce246b4e1d589a69df11d70a18fdf9027e6789ce2c6008894bb8e49a133e95fb224cc43633d5db26a7769810552c4ca38f19f9564026b6c3ded5feeb1e16133f6b0f1e3f0ef3e51b52115db424798b101a3b62d1e0b586f1a94bb6d075775ffdfe44af578f230615954ca2328b5ce0147b3fafcae80470863fe2e9004b151ddb728096c4544753dd1d151da000af03383ec0290001cf0bef1fae449d9c4cd31a171c4bab5c6d50e837aa94a522b675379b494514dd6bf81c7c241654299b8fcfc6d35d4402e178a1454880ba8f08909dac939d5f21e8d2b699b072a5ac0d28b45c36067394a5f053d3f25ed1fd1ef9bf476a33c3fc16e024b5b97ce517e1415b96e57af659183fb7f75b0472ccb9e4759a1484df24e35e852dadda279a652d509db91393e98da19eb1d2f7dccf090894d08e0f7a5b24c37c9014b1d2790a188f8b183e8e7a96096663e1b5e5f93544e01d1929c8ebabee5e767f99d557c0e4b1ab5da6f9d20318e9a3d4a1ea368a9e0edaff61421674429ace124dfd5f8763811829f838ad7664b4fd1085776732063bf64b24499586b94db18f15aa008461293a80e24537631393061204d922946a8a627fe3f5f052447f66d07d1a64de1f7df7d7b6cbef66873f8a74f24e6c950c05aa37dfaae4ff28bc6647412a1f16dd8298cf2bf6694c4eebed25c87a7e51b78045c168404edc8be3a3e385616b77f3defb268bb11af14967890d78bb88a56e953ad16f13a8a832169bd5432a7c77dd8936e2796495cd9a4212b3871950ac23bce4ad7123fa40d152b35298521cad392a07247d9a68422fc26c2dbd75e1fc549883f7ce53d883303c60f477506273044a154f5a6b5adae5cf7bee1352b3baef272f716f3a0d15a26caf64f13967031b10c0451f1f4b9f1c9965165156aef576c67c938d02caaa5f6d0e4e619af88d46c523829d8cc3595361f22f521bbb36143f59d597d398d112d324095fdb9c258432e3545fb070edf95cf3b87e807a2772b5844fd571ea526eca1cf17612a12fc756a141edd8d3b8f4400287d8c3c449ba49dab03699afab9606a315a98dc7253cf232bf245149a31b0f180afe0c0a9cb46b15a88da77bba66b83a5a0920fcc848d50296dd8a9c629432f3b74697d6c16da89a0be8df4cb60c8a7034515ed9442fa11778df92ab1d8a20cca525ff2e07d9216867275c44df6145536c7b2c97c74c71824a56c9f4106c87c018c32063dda17bc8cc4b448ceeccefcaae76d7fbe092ae66a2151519695ed6dc11c336183bbaaccdf811e99fb28ebc322aacb2c7315421628275522b52371bd4302799de9de40e10ab2d7b6bffd96228338c6a010e036a7e4295b983626fc6386cfcd24746c70f375decf69039e02d2cc31aa8023a9a6c5055ed9388641aaf739ac389b6c3d40e38756e51f71d9b9997e5ccbb569d1248931afce94172164c03059e20fc1cf3f6d0afba332bfcf80c340ed2c119053f6c12d70413bdb3ed3917c495af5af15824a66b069713adb56d761afbc21365cb6f4f0daa5e9ff66e946d10e42050f1493e2ba08475730aabb546951a1e6b00eead2f7c9ec4f6f2093e08124bf2f9772a651a3d2267b31f01f3e214ad4c71c265c3bcf3a34375a9845db43365b37f21897573ff17caa52417ea6a004fdba658f690339fed4ff9f1be65d9bc90e49f23a2ae2a35e371a630b911077223a87858fa951c83c66b3528ad9284a08bdbdf139b7a7c0a30cba7cc35baa93db8aa1f63014c30f78d9f6e722306c7d9e5e6c699b5966d0fc6a465d67d64efdfba80dbec04156785d12c29ab81207c526dae35216956fb49a521dd8d3514703849ea79d372648fa9d681512f0960dce64c1d3cd0521ed5cfe1623262ca04560b5b5ab87c1c29fc4f933819f412f897a279bf97a4a8db109bc5657be2e5d3197b16e2f8d23e06b945f1245592e46f1e6d923543230f0fc0ec19cc56c91cc4979d06162df58f12306c4abcb6189f1e7f343cfbb91c7bcb34ce08979ef8bd98f55acda9cfddd3986a6791ab15e5b64eb5ec7d7b5d914b9496c10ef9d13cebc481622ee068d07451fc1313ff2a049afd2f9d070c146cf0a1820541572c2489d90b71d3bd0b718686ed821f4f980c1f7ccf079df0299f590c7a898183eed2798886689b62a8e304acac9858558561ea03ac4c7402de39e86585a877cec67c7ecdc9c59f1bcece3db5a3eb50da344af5b57b8dc7e2ce73fd078edf625d6df287eb22516bed958c4cd786cb4de74c9ed3bacac7851c9dce4914c1617706d55248b7659ba3f07fc2d1087a5a608bfcc61ff946202f785bb567012027dd4164d95633d4d654bc8af1b23ff4196bd1f4436b18840d189d5f2dc8001446506409d31f47df0cd1b52c67a40fc84dff802d001a863b06a1008241c55ee5f170845523c43ce0d4ded2d3802078e52d6a4709f70bee589a2f24fec98b0eddc62572a42e703e141514f3bc9b5ec8d7a09dbda24ad9303ab05aba22036e52113e8c213f2cab3823278195eca0c3c9b3525033ebe22f3335907a526c8e6e031f70c4ae79c888ec01cd564fa96cb607d2fed4286784b1e97c83d0bd3c0927c01a9fb8483bc7fb5d8eb264538bf4dc394c19e1b93e5f523a58243d7017e757c598e78affb883224b8c63d77d0ec99399d706a1ee0c221414b52f1346715a6dd040f15181bc949c2ab3b01bd30773ba55e030607678df3e37d6e7703268cfa1aabff7e5c6dc8c3d818e8980625ba22287b4105c96f8e508cae50a325ba1ad2f3e4d76ee82d1fb8608dcb2c259aef3316315b5f34964cde4123f29f3006d3a2ac3924c605d350151cf89df9fe050fb65a395d049248ea9434ed80f00ff77c7d5a8072fcceb3033fd321db6c1b4e4de7b7114f4909393ecce977296f385981c5d7e731c25718a1b031e24927dd4fb8729921365ab53ba1af3e620d4a7477589d8136b73f010cf2e4e10c8beb1a1430d9408daa05b0b49182104a0b0276da7105c2e0b534472aa75934d5cc6cde41c5b164f6d57bb091b68355a65ba689546565b7cf3c57c7ebe48e4b66f6814bad310d05be842ad91174d142d2897dc0db18fbf667de4db014532d0ef34354c3337965f166f0948de026cb16703d3e50ff78d13372cf7b4fcc573608f9787aaf13a8a74b27fdd01bfc2ea8b612b7d99d2e80b3afece17f05f13cd47ae2c8c5c16e2f4ac135b71543ae1ff3bd11bbd45d30a98ee6fae17238a53a6ad5e0996d0f76703c37ffb821092b7d9b33277f49ab4351c50be58908968666315df88b953489228b6de37fc50fca2dc47b1d969227ecef5cff09c0baeb6eb7ea634ca24befc4ed9f04d007247d0f1ac3b258381c6609c205aeaf93018c03583eb3e41c1b76859c8304a6f4605991d4ef5539497856bb5f0dbdcde00f602a674c04c31c94e6c64ca047d8477fcccf4a15e2f961256ec329ec0f66399f161043910b776b07f11f138f0eed96396477d6bbceb2dba9567bbb560fb3ae23902163bcb2f428aa86905a50e431dffc6abe2c6b85b5503a154697ad07167ef737da1e13f6132c736951a0dc2d0be0b72ca17373a0b5cd2451b1b8e77bb8fe36423dc48dc22f96a98c6f529240dfa890d3f004043df0b525a6a4dfb4c28b713bef5158b4e4644684c4973dc10a84ef4f0d5584260a33c7566947c3c63ff681e13fea4a1cb04006aef0842fdd9e08995326abcf32ced731160ac4c155f369567d8ba41de9465d792ff6ce8c8579db315727f55c4551c0e511aafc18f32ae698d57fab484298e9e8742ad15b1122de143cb4cce2360b8ee3980f5802886bb4998e35fdc3bd5e8ee858a151b6c2cc8d9f18f5b91a9cdf754624522ad0b3446b4bd85458069e28ebcc136c8c368c81fa666b542640c032f5e7f303ff5c8c04c24a96c67dc5f290673a10a26440f832584a782c5a899cf8df91e7893c84057dcdb1a5dd6396caf86f3530e814d0e4051098b519a1a29009c276e5add10913c53377b1a09cd8a51291ad0583f54fe2bc4254630edf8138c754e04cac2a7b0f1a0ec7b97e972e366917a4d94cf9d333f45f7e88bd91e5a6825605a9154171eb9ff6b8762656c535a6dcd778722bfa73c96779f300c785c1610562c48133035a4b46be19ae49f0de8d02ea1cfd5889394584131456a2581bb91176c51d96eb431834a3b6ef6c1d4e616e1424e8e4d7f097782edd5c551068c6fe081cadffe223501e63e0d43120c21b0e826029dd48192706627d0fd94db3b663c98a7903d2a277cac259c1ad0a51ebc60d65f6ec144edd808d60f814c6d23e6ce26c06c0e18e94f9b0169c7a9bbc7e40b2cc84c9eca168c74a66288931c552e082d7f9fa46f0115b8baa8b63d5ea97d489603f666347ccbabb869a3364cf0a6f2a8a14daec559e6960dcbb1cca898db08130959c9524b89eca7b31f81a4c7180f9cc03a679b69440732c236b0e6ad688e94cf3bbcc2a80f480d3689966d9b9a46a9120aafe50670389ccd0fe59c0b47d62aadf2710452a88d657a06bf335d009529219d268e69a7b91f5e2c4b6a66d3bacd8391609b029bd0f6a3ae94a715532e700215ac1ad383338cd66a7ffa9c8d6449cb9610bbe2b199cac37ac04d3b10586b0e2616af5e886c28dba60c87554d338e1acd2bf111f014dec01da101975917dad44678101702b52d61b23938fa0a82fd747e8bdd95c8fdf25f94729433c93326fccb0c06ec05fa81730ed96a1add61d03c156a894793dcf29e229e1e8c1176905b08e6180d62eae973122d11a34888a8991d1ee373a5aa77380422be7626bd37cef09c3fffd39b90d552d8a5bba25bd3a16180997d7e551396c74a887a8cee4b27bd2cfeae49f6d9a3835f71e71604335ed002489e3e2e987757e3f60ebfc7db59558a909d8eefaa1ddc0f18741b3b0d0a6981579b65705ee2c4f88b117a34da5f97cc072b1d1cd0ebf46511ddfdfaa5fe8250cb1be938824ed106c0d6232a4c19cd068f4e493443a71195833c42cc8c82402b99fd1597a8d42fc5b87961ca4f525641450a2a595ba881644fef11f726824d4ffa51f8ed3e269493a875de864e8abf461043ba93b4475384c89effc29ae39f3d4c669a303404ca4ab67be54f89d33d9c4c1bd3cdfaa65826679d2404b033632a7a8c300e5e77fd10a538fb017f0114a25ef7b756e40160a5b0e8fa84853fc4fd7ab9ca4d04bd5298f0191d59bc12910fe28f4d5b5ad10f547bd46f7b112bbeecab8a5b0357860fbe8a0fdcd879b86acaecf9b4c49d506533aae25b08fe89ada9838e8cd014c6eceec277090ff8c265eeae9a018c5f695c63ba35a22d0826330f654a6147853818c938d2004c92aa14d974c04a9f7fc81e402c63406937e33f9ac1d70b9643af085fb2e0048aff2c2f19f98493161d5b8a9f5b449a652d39fc8d5c41e28d97db67d7011c64d96a6a5d5370553407828faa11b722770225dd7381877dc875cb9bb2f75048b6cc2dfa0acd1f217566f55790e788e2056818ca51e870b780575dc553fbf56a93ab4cc4e628a9e829ff9eaa3f78d548741acf6f6944881c9a0caa2ee8ec0ef0bf2128b564004e75c92729e4aaa38d3b05142cecb5d16c65612e79f78988d06c9f06227a7ecf48ba9d021a50f745dddebeb673031a5deeff13869a218cc76454e14af875c5a50fc928c28a61f5a66c87051e41799dda68fa3bacc417e5e76d5114610037e38e41f1dbf804a526535f6da4f6fc065208e6885f679d6d7cfce493129ac40f6b3e52109c657d667a07295044e1a4b1793af187e16a3f1bdf330177ad3c3a95c6195e8de77e6e690682a6c5d6afe7f80755ccef1a1507a97e61e27c05d8850222b3b48c0cfddcf05646ce52fc74c60ec458b1c9f27b8c0ad9e4031f63379b3c0c1fa36b08ee1255132cb4985f2f37444c549abad3bba72c733ea0f8409abdce6e9c74af864a367a5d6102bf6ece44dee4a06db56be65119cbe6671d58801efd589608fef238371415d1ce6f0927c48792a10f1027336dd9792d79fc7ecf437cfc36cb5191969a6c3b8b56c666f1ac8ce803c0d5ee4b7802a37ac706c51ae7aea55ed6794e4f7b49d0ef8988df481614e6a115635e7b18a7d621fbc1a0a351dfd3a98fe6e9b52f60d89147a1d7ce98048e31176c75c31fd2470d1b0310267949e0a22af8daeeac9f0f2bef139444b85082c36158d43d772ed5a965e50955e4da6a7fd12f5fc13618ff78bd5a00509615151f659d4d05be69c1f0000822163bc4dade5caf501dee25c141be8701b6a7a1f20381dbaa964d7051c3367ba9d6524700b589321a698f8295344b00bb1931c6317e204cd7dd0ca20a4cc857ab64f4a1d304f7cac5b920e8ece2666c5012844a50ba885a70752dcdb7215b8aeab3705cdac571254679c672633a2ecc755cd51d4196d416d48eebfb0647fabe71670691a1b276b5590484610a895091071c179014f3d2cc0966e4fe9330cdf463d9e1cd5d889e8f350af098d4a3b408ab4b25653c42f3be95e83b2df285d15bf361af04dc6c73e666ae57a2faf072cb205b804b43e1541e0f70869674efd757e2086ead9bba9f8be02caa19fa56d91702bae353b3f362e15f143d20f921f0a81288fcffc2ddde9a3857387431759fbd120d9aff1a1787bd22e24afd98e9dfefd3bb7320b081b201d3a35486befbd9c294797a91583f509922908a750893d8ffc1a4a5a7d1274de2d2410e53c9204f57309d9f64bc39822551e96a6e4049c16d8bf9fd4a1e8101ca2293646f03031571cc1305dfe4d585a7cf9fcc07d48f1a223cc1776ec95624b2d82bcc21bea1d3a442a82a904abd9973d6952b93d8ec81a6a30a0afede069682518a0bd3e460679916b4f2628d7ac3e213cd1d47860102f6f228764dc5089bb156ea931623301c0a9bee7022a7e0299c11e22f52d0d7de3208919570260bbcd47c0db339b84922dd00894dbb8b202c58ba49a528d5fa2efed8acae1762afd174c33cebc02d4822d78e20ee2cde8e141d0d27bdd72180e8e272cc434b6a5a5ac932f2f82eb719ebe28febec46dbf74cd5de6d24516e585b25bc835a07867fbf81fbbaf0e5a6986ba3845d5bd537a3c65ecc303e9e4244cd48b7b10c7ab119b7f83f3abdc84e2f4cc7c2c87b1f70aae3aeb549b84f7e25ff3058a70c69200b389c5f979f4549219b03074c2063be3820421ce0f66d2083ce07da90359814afd17a4332d817685144b59760a0c39c3ec3ec7a15b719bcb0aa2b87d6b193cdc7200ecce096cff070b8088b98c451b3ed8d859579b5d289b6823a21eca66ea8eb9521aa7be1e5f7278c85b5448ddabab205c77988cce78950bd1ddca1ecfd5a8f0dd1657c69245148a6ddab55d20aba771f178426ff9874bfc86e200de61c6aa50abc65ed91bd1125e8d7f8a977dbb8d11559334a0d5467ec09382d224aea20fcc5fbb4d7d2d9cdd73594247943c5159ce2580b8e1e93c1c537d578330afb119faaecfc595c90e035f851d37aa89c6a59d1dadd69308216df44e2fde72b937231829ab4cc14ee6061f4cd468fbf85e7a0da0f134398a909ed0ac6bbf3023e62b579c9f91167d017a31d6b09dadbeab2409136cfbefad4a86e74c5496154047dfc2e4600b9aa25a72251300c2ccfdf21fc30114dac77d183e365ddd372f1bad8190ab7520f49c6bca6ec968f72339f4442d26c6a8527f7010190ab646a5900b59f8a1b254256e714f5cc640db412fd329683d8a11f2460f8e1feca1d1688c336d246f065e0690d00c52258bf9dbfc88319bef3d35acb44036622f47824c022cfff01e0f6953473cf9f0be029c2f34efbc35ec653b747275a0cb7709b8d92e195d6ba9787c3cb5d3c0a35f0159dc726eb898605f19994e114961844be00e4e29fc5a371c8376ccb0e387621e38f0035c98cc5f3b3bdf934774005954856290a2aaa37b7e948dc2a147b81fcd5e3097d5efc84f68194d33ac7b99a0abfa1e9353c4767785dbf8ca939b92e879c4b636e4ad3a900d333eb26cbd507817d684079ed54cd03c758a6c09879c53f4e93db59446ee594118aa5d4b332d1f287d8338e38d610dc16238046182853acf8d401c13d921ed018c4b3c816fb515a0f8d931944f2fd104542157e658b744aaf75c3684aced82a3ac732912435c4f191db6a1f7c23a43197863931d345e8f4e3987e6f91c3630bea0fdfaaea59515c16151d25a6aaa75ee553a56a7354560b71ed12b64fb979a09852ac8df5255dc5cbc29bd3ebfde844aa9c120900d1171aa448bad1b27af1d841aaf13b07497c4a6fa113a36809f076cf66d206a020c1417710fb2acef415db7b748ad96939763854ae4962ba4a333f650d394e89db2a4e8c7d09d81112de6cc365768ef63e2e38a37ad84f1c6437d434886a7937b8e3926b033051da42c361213cdfd1df015b1e8fe7727cb50894217443a2550be0dde6e6be29b11d045062f96b881995a22d4e6cc419f8a7584a991d8e767e8680ef527055b0e4dc789ca8557484d424a6e20a4d749fed153aab8b6de0da7f4a941851f2650311bee9d5424a20a7897bd84c8f0abdd1284924894e1450f0eb3790e0da660432ce05a06d49b4c7a91d3f45b70ac56eda3ce541079b272531de172c9787a7f6cd401c6d11b47023d23ff6efe2f200007588d8222fab182b326cb3f5d64bd010250265f0567c69847cc03a2c247c53e39b20a52c3fcd64472bac2dbc892b88c5bafa55f50e169dcfabf442f66441ecfce1852df4fcc7fa56f08a3f28a62f1419b9a8f9895058193cf1912e0a0291211f2e5bee83e3fa2328e99e3ea1fa949d852d98b47d226d7ba291e33c353943340c339ce67e969b819288cb35df315c7496be5ea95f6e96a81b5ca377b8552616ab4a46696f703dbd249a880401492d9fd37c44f9984d57d84621a2dbe277be582a5a7a518f1669efc45542ad7b3842d857c69ce795e01a71e84fa377bbb818f8df9457332c370f3a81af065cd05d8876df989b25eda622ff1ef9dbbf04015abde1d5a9f8f4bb87206642464c5f53f91a829125b7c2acf438405da25366641e348925d3e87a84f698f66cb618a387cd2af874018f4b0f6cd600a8b9c16c32e56ee5d65adcf9415992c0e5a759ef4f76a9875e4343fab328e61097f1d5b994d8273ebb80e6eb4fcdc6060c45c9cc2a5cba9257ae305c211c469081c85f415e10435e5366517b3a6eedd05910173dd93f8883f26d6156b6699c91ba6a3aeeb87e414c2537a15290906c2d209811be60048cc6900b68dfb323a555e32f7ce818f43f6324f4bce1f0d749d45d78fcb48d278c0a10322e10c9b980b8a1b0a9d118b2bf76c6948077f0041db20ba57a157e41e5ac4ec61079cb87d885fe1729ecb54b5fe456a56e2d976ae679e53dec84ab2b7aa1caa560fd32adda2b3fa4a082c16ac90aea7816101ebb7b6c7cf2bb0358d35a579b23957c3bf414fe2898aa09f38d40a10f7df60097624cc58e83a2717293ecc7b738f98bee3adbf9247a0d2ef522a0658984f90f805c81b5abb1372a1c619f856f342e3a0baa5622b64c87604b09f455133ea653cd1b6e4aa7651595f01d4ac7c6ee0ac02663004c92a41429ae50d12e38dccd9284e750339c3828a743d283c2f8a0946e5e02f56541f16204606144cfcf06d422efc7ea1fcbafdf4060a5dc0820cb783bf458f2f305a6ff7ef5511558f6ac8eb138bcb4eee2cd9ed97e09dda338686c6df8ef2cea06919300b0ab87423bf71070d985a206a8d4c26814c2423a37b5e308bdb9cd124d7b565bbde7b0ee106f2e15c8225db12598deab2bb1bbed364719bb214ccf899df946573f96801293932038b782f82202c0947239bfb7a8195f544b34f8a42936d7f9260c3f1385a077277992e028733dbbcd5a1b96f9a5c0f2a0faa2878224e05f65c17b7fa333eab4368fb850268e5b026eb10a84268b2693d8987b8e14e09697ca086cbac2a651aeb5cf47cda9d76f84c0bb6eba77b93cde5d16432160c4c8999a66718b12ce9c96f4b5f96a6b02a6f025e247d859b53b91297156ec06277c69d1885e382728203756e27cfd7f1883b0f98b941a735d3de3937efeac62dd27ceb1d4fd02c09fc39b1598a8e4329a3db20f16133f4db841338b2bff684743fb24bec2a764b5f7a21179d619962382b7afe28427b007c4f75d82d780e9c60fbe9cb43a9487e8bd20ee4c1ca07af1b4f08274c6e2ba18f2c3f1f049924fc91b9e05639754b32969a3c13a68ebc738ba57a3110952a430117b601faaf735b889ae98281d59f4020aaf85f9ea08c9361c2f273f8fd180191160713557666e1b0116c672750fdb1dc2dd7cdd2f8ec3a506871c95b50c35378db4571873581df9f0cbebdcd552d11e588a53c88d2e3d3422bfda4a898ab14dd9ca0f2ec8dfb4133189541fe40b0c682a24a581d8187687889112702229d7724d4b7316990c67bc38f5972d9f460517154ec5c580bd4bd87e32a9988bd02d2d00e02d7da0cd31588831f3b2b7adf665804fa5bf1e26f97b1319de5e53cc6ccdb15773efc1a1be3efaaa3955b2df82e9affd702314cbb97dc47be18750b012971239bd3dfb27e39d0f596e906b5313b2c4c9cb5c38153b09ce8cd5d708bd619cc02b8ffd1798b3f1f49dbbfe3372588e07eccb15f3ad90995df8547016a3c45685eda812e5162774074b5c0c0f183b838f0a31f8f6308633a0c0b710cff2c744326a6d869c15054076004eddf9219e7150b02a33b41618e51852181f8b2e68a204a3c602475c5595c735856e548a2338831d237d97c709b0143a7f76500704ae17e86d2492f2acbac728b5882ad4a8471ab8bae304d04108fb14968a0bce582a6ec6bc341cbd4c37995ba4b53b7b53cd46e54aa0c508d6c70d5c76353d3f40a630686055ba955f542ce8f351806830a3be06a7c3161a360ab582ffa5801bc1c5508f20116b9c14dc81057971f0a69521d37ce720413d8aad2f70b45763c6ce5a2432264daeca27bbafceb95b0dce50680062e91c9f375070efc0ac04575f185dfd81e4d27d8694d0646390450c294197bcf355485c02dd647d3afd110967459e683091007d15dcb4cd652a19323086bb790ea415b53e59bab73c560e19180a79df88d4c9653ab6fb20afb73a329bc7116ab8ae7a6fef846c309166459e6b7b0ee4bbae6ba12ecd59f200802b78daf7eca6cbc6c99fdfcf7ab161500e961788cac601bdf6913848c629fe1ac4429930aee8747e969faa63f4b576338d415818e34a1e225f8f9252dff1af7ace268fd74273efdc87206091c15013b418a7e360533e28836840895e8fda74d726417ab060067e18e029b8849dc1d9971d94b89d6e75613ec497bbc2e3677c8bba16ce8d9e0c585b7da6ef54281751fb007e9eb345d7990b3f8c7fb1fc6ff73f1566ae16876931b8fdff20bbc060630166d91317d3172ef52ac43fd8055022dfc191b9a52e1cb8a22af34277a7ef3e3f733c565c834f580c74df61ec1ddb5f9524b319b34022b062cac73bb61671316142297d1dd8adccb80abb1a3a34b32a81c72224e88dc826d08b315e86e1e3e2377071c0ad0c9c335f5d1ab8d5172e27d64ecd5a8a89cc280e77b38620b0dd7d3db57ac585f3e8a79d6e2abdea226b8dc1dab7f1d7a6afcc71ab695d3e39ab9584a24bd3a5ecbf9ead6bc3a0763ff17b3b28d15e0228bed2f4936ea19e8301dcd5aad6c8dbad39ea37a1619abdb13e7740a5680f2b76fdc5b8e19887f6b5c97d214f979f5c33b385e8c9b041941557303999844ad52f8a39f67c96e339841dff717dc496c440fa91303db4c60730345f33925916dca24cf3e2706bfaa089666a7785c84a0eb488f00fac589183dd8fb98a282548502b5ee46fe0f3012f5df5bb5121e5baaf760a0af427e76adb8ec305d74c371c938a6710d566185650df22f1ab63c67195a83792199cf1fe8b5756363469fbb9a60e69eb8bfb3751765c38522cb1af9ee4f901f84628ba8d5190750820a3c1b5bdb82cca9dc230202405bfb5254bd7f62496e027dbf10199f1a20c8a198523ee3c88f3eac436e422534661731ac310482e1832302450823a62d2f86a6da4618e171b088b0fd62885007654dff341540360f0d0d1dfbf7928f696eba02ebdeebd1ba63bc31c2a71032300a45714e078c771a7200470893ef0c37af8d5916f08d9e36410e36205a0d1e6875f47f56da33f92a0c2c23c1f054c3c3acb9216c9c05b1f1cddd3189e33d1a5a00ac82a92fe72e7fa43707ee19b0c537f8a48a63180bf17f9125ccc3bbbc7f48a25da3d9a7c70b313617530516e2848a28cd818213f7e97dc078206e34bbbb27cd90d044d8fc249d75a40ebf56062b13a4489d3ec5c4a081e9a160b2413809170f0cff8c569848db10de2fd10bf6c90c1cdc0d3fe37f68831a91f7085ddb62840a218d21483d2b0b607f669f444c4f00c82640c5f5042d7692852325597a19449d74b3b129d692e41bb3e6c01805c308487990989d7c11bce02f2bd2848ac452fef925960df8d0528eb74d92ead9bca9b168afed94b41fb1d7e45f1979991642da889b6a60c05e5bb2d8d34d0002c3ffa729e936f627bab1b0c77c0a813a603cf541a7c4f4be7c09a629c9530839bd9b50dcd902ae821b64e3160ff72d3cc08b286fb8519f90a1edeb33d549434382c2d5729206010ff544b00aad593933c0d0c7c84a4407a9f6d9a7b5c2b52c48eef9f8cbdb293cc29ef752abf4b77a93390c8252f2d8229aab4e016c803107529faef58ec01f02a8565ba9bcaa71491329d1484818fa045ce3a63688fe09ab85a36741eda634048615884b2b694f8cc2370f8a2c09d97ae4fcf1751891faf5cea6ee1149683354b6a44212176f47c5c8b9010ac547fdafa6b62e7a6df395a3641ac2bda763c3dd9c183267b5fb7385c3e94362992855e39a9364a7abd41734cf6bf88f2d646dad9287391547a814744e86d3015ea315c03250518e93ad17ea10534f8b79ec7ca94d136fb4a30d5a3580a4ecc461c44ba37a54e79fa5f09c76adac3a440f6e164afda51c93af9724ec99776491f5830ab9899d38d584f8d0d6e9e9977a8e3551d612baeec93048e8dfa1a89317fce23bd7413c32ad0e5bb7aea38c4be334eb4a0c3938e46fb7aa19df6a238aef80f60cf6f5e82942512604cf2baac26a07527c077afa9f119c277d2996882276b807ada457fc55532d969fd69e02740214679e03458ca4f0900804055aef700361486078609104c079f4679305091004eca27e7f90eecd3b89ce8bbcf688c42351f0ed636b8e0fc07808af3298b6309ce212861058f533ce276ba4b7b4614aeb7933d271dfc36698a5f1196abbd5900a0a25e119780460e10b06c03ac8b03faee46965b3014566d0e090ab09e4c5f1096b2c6a46e414cf0526fecadefe5a1532f7f1f407fd29ddc16a545e5cdfc03ab8cc097efe1b1c09fd80088f0733bd21d9cf30122a6c5af2d6ef9508b6e2c4243c82ebbeeeb97e9eeee95dd5bca946486094a0924091dd796ab5c70d3eeee77e955b50fd2f09db3e66d9cadd443dfc211fcc6b2064ff41847fb16dad4efc63a5ac6d1fec5e0860ba04360e8dcf074bc933cd50a0aa944f8e6d441bde75c81714cf78c2efbdc41d33a9a6718478e26659a9cb47a8fa81bb452b2c9e936f490eeca0537addac6d9eef3c015589be40d991c33acc3f3e9343b5807759449bcfd9a1dad0c2e7b6961260ecd06049e8e1c4c0c3e7168be85363d46c0450b6d9a7a0d6daa4b0540d14e95e69f38a78aa23070b9eb7a0417cf290bb0064a2883081333221f9210c1c10a9126296c64648aa52418b181163a434e700321a6c091c28812f44064052c4466c05d3817455a3a5892640c19112fbad0a573bf15888c81e2bab977e65b2106faa0b880d270e7b257b773f4bcee542b57670df06c92326fda93ae230284c7a3c9169af4818a700631f1581076f724f281091e911dc08e761d52f8ade0838ff779df0a330e01458e4019e26ae1830a6a6b055ab7c35a1f82a035e83c996e471122b687d7eb67c9114b468cd1c412e8038e898bb9041ed0a08c2e986002308a189dac056211ba3c66fc047291d19a0cb61a742be4603d952e5e1e9f50437800038a1e92ae1822084828f05a708730b344154763084167091ccebb51664666e4b499f666a7267ffae1f9e6741478ce4999681afd99f2734a40f4e6786adc3bb3a0d94a3fbd190769ca28b9ec5306f35196e694458b702fe93e2323d3020f18805055d78045b83cdb8670b3124cedb771f911a308a6e32838f661d59aee116c3ac5dd7e02b962f08ec40d0cd9dc0eb5bb1d3b88e8c013d8fd0472ed84c129b9e5a93b8810fa362a3c4c800832d35678d63612baceed88ea446fb2f3ae099f751e4d5a3bc3d87292380abf1eea851905902b08a6f113c8d5fafb138808124ac6f1e09b293386696abd33665ab6c16af5ecd3b2a37600fbbeac63fe7410b4618862328517b42929a6229316a6d99b8a985c3e3ff4ec537ba6ec05794da827f384ea97b34865055ca9d5ebf9d686d470e2901a14a46bea31f134d93445a9b6d3ac0ee98544eb9e26df1acf776b49beb5ca3dbd2a4d3c48ba9a787a557aaff75e1e8fd7639a3a2bb046916707e7aa3a337bc972f32c39cfce1cd770fd5c5196269ed96b18310a27f08e436a3e96ce5ed30ccb9950688096e33694100572e2909a6f0bb521359f16fe78794d3cc2b967f28c7842cc8e499de2db4b9647911d6167c67417b4536a7627889dc3b04765b1aaf8c67b793cfd6ad2e3a9c08c696de7f5bd63a4579ac6b339f5f60a4c9a095696b6e353bce16e9b08863dea6d69a1ddd2d2d25279b67c28e590e7c4596382691d83c5d7fe9918701b10fef0c1cd5a6badcd16853abb7c541919cade5bdd4c0c98a12af6994ab5d39733cf5cebfad8c21f5edb19f3997c30909b1c72b05435f9873863d8c519633b6bf201d27248b5e10f4ef919fe38fde872c873e18f7b19c07d7554033c53d955ffc006411004795a141bfeb03386bd8e76c64cffbcc99e87a279f8631b67cac6fb19b88c0f3c1db72cbee93dcfce44dc094464e77936392ff04d18afb35dd7596bad9d4a9ec845b3436ee49917742a71111bf1ece8a907914148cb341c30d7d9d02778d3ab8f365293d4d9a849eaa6266ed9b296cd907af5397f3b111aea155864d4abd0a9f751af40a7e2fc761ecd799ee7792d27d6ad6d91e3d1dee7799ee7793d866c63dc928dd8a8577cd4ab6954030dbda261b251eb2973377bf5ca8d2dbbe25a2f6e0f19b593166a99f6e40aa181c6bc99853dadb5d6af5f5f95260d7b750e623226ab5f1da3aada45be360f5ffb86afb5f6ec2bdd706294b5b9a88a3a75236f2c51336d2c2df51a31eafda296bad7d853e76992f63449b5d78ca11b8e36569feda7c66cabac3e4fbddc7e9ef2e8b5fafcf42a49afd8c2b6d6b36bcea383284b737656d284a88a5d48683633e2b2e270c5a9f54b6a922a35d9483386860be89b2629d5464dd673cbbec179ea7dd32b9ccee9d5d6eaa64944a0e1a06ba02a4a50661df80d9708ce972e35b87527900f4a5fa2c08ae217f818284213434d989ec8bedb64d3d387ea0f85a299cf4f883179470e9313b7bcd71de43ff56abe0b0c79832bfd8c70cb5be9b7db4933b52317f5cdf680e9e71349412ef2cdadc138dcc9831cf4f0912b4e609c20f83805f7f4d309328078f68952562fedd0659f0be05103d5bde9fdf459c7d2865a5d135dc061451365d4f01c64169536bc0674029806824c295c5f470e387b2f85eb3d199af34d9827808a6851773b57d59dfaa7899b7f0dc4439219199f6fcfd13b1cb03160730e484d519f359a6f3733c906453c30c1d9297244d5438ce8879c239a34818a56dc88580b147d3104105b1c21a1c3067eb064093d38a2093bf0a2a65da67da65d64da5ba0ed32b47d86ca685725df8429efebab8bd5c811352bb313bc9634bf508d1c5153bd855e3111d1124ac55923ca7292a6c69473ca3abcc6a1a1c9bc3a77e7baae6b4bd1e995c682a155d599e00057afcae9e4eaf48a9fe42c8121868ab479c7c25455679b62f324d6e4bcd55abbcd90d84d136148fbcccc94a5d5bcb4727634aec62be7a66a434bdcf6d569a0acd6344d4b0169efb106aeb9436a6812ae4c8bd745552db31e84b26066a6ac1e49aadaea049a64e609a0663e1cfd2fd6030e97cc339bbf962e58c94f2013f07c7d1a7a687d75214b9d6b9aa6a5341ff2d78532868f1d7e67185d97a669da7555ffbeb832987e260d02be7a0c4d56185e60a1c9eafe5bd02da7d0921996960964738939865a376f7293a159a758751a6e5cbd32d2ab09c4c311e37c35c14d3da1f2eb2bf77ce509f4aacac4d02b6e62e84bf0b1a8b5ca50d6048c64268581aab4264cd63c421a420c1e7c61839793c91273e0c30d8844818219485153271265c1d0ab1fdcc3b0b9ae7f3991aa738bb26c5001154247479ef882a7a62ee00b590e706e9c38411535d565a84e8391236a28174d20eaa969af0ea2288bfa4be6c83761cae90412b3b44223d7ffa4d42bebeda7259656af50dce494d24fe4a7a21dc2a38c297126410543688594fc9392123e665a93069c349f77056bc05e6027cc6ac07c9c504580f4a5f5209aebc337894766784a470f66106349c29de1d65590f5aa8469fd0cb1864fabdaad1d6bc0b6205a603d302207372059020505768ac8a20a2894f021065fcace55f5f40a09ac579fb7ab7c7a45bdfe11123d426a1200b326bb8841ae242cf4b614e86d32b98e7f61188a286f7a501cc0a7f8c7604a24408fea5baf0212e0a7c976702400acc9949fa08251e86d2cde7e526271eda4a4828f0a3ebd0abd5d859f30e5e1091ebe781886a177d823ac95b2527e4305272a08a9206bb2fd0ae1d2232e4e809e4903aa00b45221e60480c5084d9ad071b402b6a9e801368965d57cde73163dc08f22962cf49e73e2e73928962c44b83ceb55d944aac830ee29e2963ceb79cf79e6f54595eeb9cce69ee73b7258f798c7c53bef9595717ae5398f49c3ef39e7785e8166d51aaf9c4d9493c97b738af7e615efcda3f792def3609e7bee79e1585a0b8e13c61b35d0ae300b2698008a8d13f83470c48629ab49a24c117148711507f29406d98b20c5e78b350ca949019232a638157904adafec299ba788380c69c55e2e9c9b12dcd0aac961480dc7d0a4e5c1428e26ed0a91ebf955726d577b457dbe06792cef12ce8928773439bfc93931f4691ab967526e148e6f260d4eaf4c23fb3469ddfac74e5cdfbceccd477d6e64d88cb17e9bb8a09b46be29eb977c73e301eee93eb106b1ccf1d65988704b86754c24724ba4a149eb2b35b825c360d4de8b4279c9b01ff3ab5bebd6bae5bc9c496fa7b596073c20bdf51ccdaa35d68158b7aab73ecb1d6fedb42a10fa723ab1ceb3ae41247cccb399476621df84e97ea149cac29ccf5a6d0da6495add9b9c4bca934b9314753ab9f44a66840a5e3f8184f0f901fc041202e75d34cdc96659d7bc6a4d6a8e030a48ad96b74a53e27223ea36a979e9726a5203756e75ea1acb1861a90ce5c682524a293ba5dc57504a2965a7941b084db9814029a5949d52ee2b6028a59452cadd58cc504a29a5dc57504a296d2c28a59476134a29a5945da3573073534a29a5dc340873a6b9f8892e6e349710ceb65a2d211c14ac545d4ef0a074c58e149c2545eca83d43b634e1c28734ea8e8ecc601acd19079933af0a248000044bad006715a01085b50c7c8078f66dbbad56cb890c0b1255c040c60a4eaa4204d1032709d158b3f156abe5c48b4d2d8076f0623e0872524188265d043959b1bd64473cfb154228b75aad96102a140425802a900002ca8aee566b3056d204131aec0a975e09a942aa103b37b3cf6f6e7610544a7b540e22f32c485481c4f39066eec199296df6d6e12bbfef3ac7eae3002e1d3b9cc3395e6978b64fdbd5e4909f817b4a79a4e25302da31fa01fc040a62a8b96efbcd78d019384b3771fe370b3297b6ef13bfa1a7af4d4ac31e1e68a7d5294891f026cbb66aeab88c83bacaf3cf70aa306740ab152cc1b99ad9c412f57503c2b9013e0523bc9ea618eedc127c4aef56c7539334c8e94e1a3e6d9ba7941d78cd5729297fabcfea73a63e65536a3f5d736d2c597e8e414e3fc910e39bfdcd46fdb43fe7acf9e634fa07f0a8637963893b9d4c59939f3c9a9ccea3799aec41bd53741cb58df3163b2543906f4eab1bf38c48ae6bfa8562faedc165b0ab9db447deb9456ec9497efa0dba25c37e72acf1c0f533207abebd87bae8db8f5c7e02fd20f4dface14e209da19f403a4dbeec8a30817e487aa01434f9989f402930f2462415c163c451b9e57c7b4729b37fe3697409523dd2b7d72435261383cb9af3e899842ef1817dcf77e579aab444c68ce91b6ed948df7e5bb7ec590b356d7d136e49718cf01c2d3969f1f9289f4fc3e7cff0f92c3e94d384a8a84952cec9e7aff87c159f9fe2f3efec51901ef4229f254b499c0c1d7de7f3b7d8db9ff784de86a8f5364f8c7e8979f4edce257151925c264f74de1af5aab4b3a39b6fb7b3a25e4d209da56fef56afca166a1cd6319fb266cd6a3e65cd9a09fba1b15ef158216ea75737bd9ae258722f1f4b9b83c2585ad90963699dbc8c2587e4db652cb99f4f8d25b7f45d632c6debdb6d88767ad5373fbf45b421da3162e4d5abc6e1e7a3441ba2170f8f51afba043f9f866843647474a4d4abbee1e7cf106d889496968864bdead6cf67116d8864444e889c08f58acbf8f927d18648686808a757dc849fbf22dacc707272827ac54cf8f92aa20d51509326b356af78e9e7a78836b3d6ec66764384d42b5ec2cfbfa20d111251125112d1ac57ac849f6f126d8866444544454f827ac564fc7c14d1e649d093264f9a20f58a957e7e28da3c414a4a22c2e91527e1e783a20d110e510e51ceac573cc6cfef449b27b3a22258af18093f7f136d9ec07c7c62bde2a49f5f459b27b1254b947ac547f8f956b479a2b4b4f4d32b36c2cfe7449b273f49923c91f58ac5f8f99e68f344f6c4c9132742bd62a4177a32f46488a8d52b2ec213b5886e886e6c9e18f58ac3f8f92cda3c316a72becd93a39fa1cd93a3a64964b0911662318e6bdbe9d5ecd5e49f3b50c2cd97dbd2b76f3c5e6e3d2f03a16d8aefd7c6e4dbb7a1de8e98ac46357171f0adc477d1f7d1b7e7e596f4edd632335ba733f073fda2acad45554d596d326dad97b5fdd3adb6467c2faab428bc35a2ac6602cd21e74b6bd4432dd4a2acce62aa963059db0d53d58e846f2f5144f876ad5b43f8f6160f3814e9e17b13e2dbcb0e089d245f6e38bd6adf5abd9a403a3edfbedd74b9b5849aeca126dcedb70bc4f5c63208f8cee21ad6a48173cbad55fdf3ad4559d37e9e6b9a53917ea2e673c6f053565ae2a426616e7ad6424d6a585c4e6a96864435a5ef926fb4d6cdc935a2698d5ad55e8246dbd24debdb3524cada905ad5de4a1a1252ab859a24c1ed8a5bb6901bf5e516ea9c6ff47cccccccd6ebc897014519715671d94b52eb0184acc28ad772b408283b495048ad7406d4d3b6c9d512e46c67bb15970e7672d0e18b254770a204567c44e85962048a207084745c272fc7cc0efec18a6fb7367e02fda0c49b7e02fde002ad483bfb4c93dd39fa9b33a428d865a7535018dc70c6b083a0575a06019f8e768bea19d55a45172d0564f396ef7e3b9a1e778f332c4b6b6dd7395531bfd5b46ddb2e55f16b94daeffbbe7162f1cd1c5aad4d52dbe43cdd5ac16ac1ea63aafacba3f03c9a715425be3975cc8d7168edb4d4343b639a85f0dc19047cae62cc3841d3aa566bf3e947a6232db79f4e858e482992c25ffca003cbccd4eac57c9263664707d147fa68d32acd31b36386257431c6131c4e10c40f807eb8399a31257411a4d31ae20708f0041659323252b4842a5a00c514562c6dc103b7858b63306cc09020497a62c415b11f7c0f410993209804818727807a0b21be7800173b3c59284145127c20064ac64531b5e0f901053b0002113e506861a4694104cf8b19a22637687df1041227d802872d09b6fac02180470b2f14c1e23f59d187a26d53355d1b4bdb1ae3981b7b5139cea35e71949a6ff403cfd9702e90e0b7afcd1cb79249b9e582aac165efd36dd2d6663a85f775d523a787644eb276d552aeb55a43fde93ae738d7eadc3a8d56af4ed06ea1c2387a1baf122e768bcb5e3bdfc892eb1440bd3a17ba3082efbc8a9da67d1c2ea0736104cf7927969c530e17c039f5ec33440fa22cad87aad863b31fa1d7600500ad01402ab60ae0ac2b908a3c3b9141e6e737b14093c8dbd310671b0035035271a27c5ac5220d34d85baf1cf71d00a462ea3f1a908a359e138fd0704b8345bc3a402ab63c271e99e128e268778054a4f19f28ba831ef640f934c9d672a81f14ecbe660c7b900bf5aadaca799dcf89f64b0048c5d37f3c402aae3c271e71712b1e49798b988aa550441caf49a5645495124afda45aa99b144e2a27e5d2523848e9a490a4785246381711054305a19aa09ca01032a06b66388a3dd583faa1ac94b3a790348ba587d270984df9a492a096781332e584452835f4f243a282282b0525aa5262ae6ce034ca67ae6cf4304946c1c42b83a9624f89f7c854b1dbe861ae6e1136707a755f4dca60d29c9cfdc660d2a838fb4d62d2ac38fb453269529cfdc260d25c67bf484c9a23268dc9d96fcfa44171f67b240525cab2e1ba46dc174c9acb738b98349fb35f175c22ee6bd26c365c2928310270dc67078e4c0d0d2faf0d9efdc27a051aae0519a0f42b666e642bca14cf6efac1b33715cf7e9d3c7b4a15cfbe02846757b1e2d94f42cf948ade831923c58cf181cb9efd37d199cc1828664c14a237a92771ce9815f1088e4c4dcb4c4d8ba7dc164711416039378920b820403d371e69194bcfe2d9759071a267f72ba601f8b94f892ea32a761a1ee4412c3d94a592d42a7695a567bf79ce89e904ad1879f6925ce1117abeaf13421f33be8e2a484a6e90a6d9ef412aa23c271e49394a6ab4e1a22aa32fbd9c21b2d4105962a2a3448f51157bd843592c3d3d0f43410985a5265ba2dfe8c07dfea757aec424d9d9c31865790e12e74119b93acf1eebf912f56568f4ec34c4971faa62ffc4975893ecd745592f4b5ac5fed2e4d95d3e50af8d8ee34fdcee8b2205253c93a923052567b7a1d3ac19ce6ec335437c49d22af696b08737befc20e1befc3cbb0735e995e7ec2e7327bd2a8328f50a747654cfa4596a16008cb48a7d68a8a8e8e8a8939296be64e9792e597a7cb03c48519c57b1e336d76e0f276e224f9782921043a4a0c412f6d89c25fc51df85e5bd11004ec52d51b0a017d829b4e95a45ce6bc09e5d7bbd9edd8a9a6b13351b2ed651e4d95903e2d986ebd9bf1a1640fb1f0ba00d704e1a979fdf0d18008ca25669ccf8419b4d282e2873c6b4b3786fc30e59e920627c13a683ca70f273e967101394feab606dd60de73a780d3726517dabb4d232a579f520a8df9cb5d105ed35d7461a9aac0e36d9f6e7321258cce309d5aaea558a5beb0c176087f8e6e7258c75f959fd136f3ed7c16bc06aebf8752027ce9f60af2c7b4e390fab8736057041861335efc21e9a0535919f1f043b7441e63be7d7ac17f6d82a8d5980ea9f386316a0ba279e184775166f93d6bbea431bc1266b131fef70e7a4b356fa3c99523ef27da6d924a887e7a6351b4af2b3a39384246b82a407e7a668164b62644729c9894ce6c691a6c3ceb226487a2a4ebd299ac5925023744729c9890c86a4731ac7a868498c5f6c6449690a3961cef153c6ea70e78c21b9252eed1c935be256cda4826fc29428ad6f37f2f56b653662b93af2acfbb925a8331bd2d92e8ac96724ca9a35ed3c6b6d2c493ad6b144690f001c4a5067a759211255e9f48a82a72f7956823adf1e22d11069924f51784a4dcd4d15753ac9599f3f1bf6601ffeb6595c341b79d6ba3c5a0e515a9c14dfe69fdde16efe3137f8cd664a2b8af635fc9c315bfff779153fdfc412e637b7d74b4795b462807150df52dcea7053c60d0889247f9b7bf3d90265590cb00e1894a0fa81e2754b59240ceb608171d0494b98a7a50d7fc7203386cad02475b273ea2c788e3296a8702c6fe7f9927e9bc3ad3e9b14fbbda323cbf97d4e33f1d6032657f4fc0eef34f9ee25cf44c8c9b7c7d04596e4168316875bf28ecef70d0eb48c326a42d7c16b9298de0ce8318918ebd352e79cbd196c6879a07f061b5a56ac5ac3fc8c69bde6552c617cb073a50dad17629f1d1c83c07062ca85fbecf799294ae73c3a86feef13cb1bbf9532df95b579d659daf0cf38305096b5f7a250ce9f9d42386429b4972fcf2ec31e3375c03071b4b38793354355ed9d6567d15271d939ce190025b825e77c33bb58d4461f2d4c1f95728ef6c2909f62aa7a6999ad1d53757481fcea759469b2bdceccf44c873d369f62992307ddb4d95463cd47322ed7a3df6ae53abb6e28299badb4e1e7388e718fe0d89a10072ea326741ebd859ea357379a6487a155dd53a8a7504f21f24d40b8658af3e95a8a1b5d20c79214c9fa757883afbd7a3c5f366966be3a9049c37ded3a14a7aaea9d77f803e581cc98ea77e99673090b93861590b2a1290b8ea9d0e79b6ca8a75cb8297e7dfe9ddd9378b3b8d4c3ef2ba99b465e115b10532aceafe2a12844fb94cac8c2bf20a642d79270fd2740595d144abcb0828c1718a18a9aea18a02ccf084750a0e4490f4cbaa8a90e84b26611be60810e39d842891c14d40cb9f1a10649512871a254a4a6a25c5ef744845b4e19102fed9d4e515ce63dc00199d7c074d3e50d8bc94a34f6edd58bc2cab2ac25dc0a9c5847b79efa37c2bc6e0903036591ada232ac1b4393ade22d5807771565502e0e43364be66727064f0c51831f245500a62848059aa4304f1d666ae31744c31f35043f678c0d38df80518613ebe0a76e35a26fc2a09cdd321545da472c5531e9151dbb869680b2d26ba38fa82aee7c2d4af00d5354613c185cee586c850577020de1e4bb287e020d11fb0934c44fa0217afe3e47e0c77c991ea89e745362c1bbc9f415b76be2d2ba6955085ce7c4d5a273db795dec56d734b79c756fdcdcb3de753edff39cedc86dda10644e37605a55bdcb61fa49c92ded57b2bbb6d6a6e272291ba53d417b390c670a4ef1c778623aa9cfcded58dd6ece713edf32b7695dad702decc1b5cbe12e59efc13763b893c90e416f9d73db4d9a0236c9d6ab83acc3b25827e7dd580300ae6b7d7ef7c210aef211f7f56a824740ef380f1f30a406e4c0f1f36e4435f9f9a9c92f850c98ffbc3cfde72cf4ea73985efd9837c8cf73f4eac77cce3f7fa157d5bfcfb9cf7e43e87c3983fefb1c9c305f83c1041331a09712254d38d12ecff332c5f36f86dc12dea2c98eb3f3eec639b250935efb4c9a76cff9a757dde8f947451caea7d47a7dfee63c3ae5def17a15b5b1b4dba65df62b4ece69d2f36410d2a4e73cdaf340bf4cdc4fe4229eb1bb699bb6699bc674738d7dd4ef916733c6f30b743b6f2f65def34d6e475ed457185d8471e4c59117475e701494521a0614dac6519a02ce529a026b99d8a0cbfe040f76b004c8892662274aa9174c58254b24d1410e70f0f3529598c1f8b2e5fbd230597c732305df5c6bd9756467c70635f0a1c10c288b569fd3ab88a2aabedc1940794e9a6c2af44d95beb7a06fdf6ef065cb742a13b986e31a0aa3b219df29712d4f878e7e4da98f4be3547a2cc762b19856a9760425e322a59bdcdddbdd5e77f3816948db4b4b6a5677b3c1e86b83d1d706a3af0d465f1b8cbe36187d75ad0da6d54a5fb0585b0a5e5b5ba84dda86a4553d3b3bd448b3b69f56f5e6b36377621484c97ce84f6f2d8d0375be74f9e609eb9c689d4ceb5c5dacd36916c8d3c9b65827db629d6c8b75b22dd6c9bec157273b8517d6b94019ac6acdcccc8ceaadaf66b4ed1c354bd396926eb4a59c9b9f9b4ececfcd88cecf978644dbf5482a3e97bda4af31be09536e302bbbe07324275eabd43369aab7f752b3b61b0a23298c24298c249bd2716b6dbcc174e072f9ef77f8b2db5cb4f525756d2e6db6a2e4ba3ab76083b103e83269e64653fd360b468a6951b747fea19b56766dcedf5353df96b4aab718a829f5aa67d270de9d4eabda87868a8a8e8e92b6d816fbee5cdbcf9664f3a13d3edf4e7b2892666d4bb6d8698bdd98d267ad533ae79cd3ebe4589dd4aaf6a599e43c365273be6d9bdbf15eeb30cd429de8ab42f16db5ce39e7dc7eb83c7594c39037ae25c51c33e28ed0070a4f47192e6e3b07224d5a82e6ebf2200c4caf98e5d2aa76541928193e41d354052d4c6b794b5928a4cb32b8ec934637a3f358605682b8ec25ccc9c600046d1297dd2241012d0c2e831689cb7e440a687b2ebb3d72d9ad1197ddbe600668bfb6cb8360d0002d0f0ab4455c76eb821aa025e2b2bf5c40db8217d0b2e004d0aee0a200beb8a46ab4a068b8a0a070020fd2537f661ecde2d76b524a69a9e2c56de7416990815f94c543d629e7747440ab603c5e2b709647202cb25b4e241928ebd44894c553d5de91324fdbcb19cfcb964f79eb65f7dd8dd78e37be9d278b1b7950959f9a7469d4e8326995b1b4000c239e7a0b54a3b54bb17962e42b3f81c000a2e636ecc6cf19d365f5201ec7e29cd65621d5ee8e50278bfa741c934547203c96ac6f9e2c9f2a76b293997981c507b7b4dfedd65a8bc42db2166cac4428fd0422a2a7003f815e49782b9eba07b83569b81922ca59c4197e12597c453cb98ab8e29ba8e22d6ece892ccf396a86b3f36bd2b0383b23758cbae8ac9d8677bb8ab8f98aa8e22771c559c493cf10591c25ce702b50220de7449637e2a96b1f129eba05973cf50e88a7ee855b3cf50f0c51fcb35e7e46b87c4848795e824bc41a9f972110156cb105f432dca24554e8258a124f9d068a73608b331ee7eb50506e1fe52ccfdea10f96a761f2d2c379ea34c4536bc65cafe20a6cc6985aeec56d694d9aea3485079d214e11c88c613f89bc223292d831da229dcd18f61453eba99bc4f274c3534709c5724ef14c048bf1dd042d52522d9e29b55f726375ad3576599580cd186e99c1e014b3d7fcfb1adc6c6bd26800f47e27c22def6b45b8a17b1817d4fce3a655db6c8712bafdb03e0f0a8af3b522cd35694eafb9b633696693e67b8dc66b1e58e4d6d8a499f1da87129b319a5b212ed55c0b7f7c0ffa0c7da4f0e0b8b9172ec0fe6cb21b2b689ad52c3efb759efa3ecf6ff4aa9f3ad8acd509f69405824f7dc6c853dfc1833a0b5ec76137a65ce8effc477f37c3de9cd35adbfccab11ffc36ecd1b9fd2efcc1ff7aeb1fd71c731c37398eab17a51cf2cef98d7d0115d1836fb16e5e7dab5a95b53e2ff6dc0a6e5e73e67c7341b3819b7bb49a5ae36758e1e78c6170d60c691bb8b9f54dcaa2359acf9ea3163392f4d5698cb236afae691ee4806db42110ed87aa3671fa58f9ea261bda4110419203d5ac1d93d034df9ce3348dd3ea5637d73c08ea394f6d9b6f9a462ba5947b763b5c769091fe14c60d88c4b099bc04b5130f168cab71d585cd39a7f5b5f16ea3e5e1fbb8b605b9df9e473b6372c854d3c66975b3157cfd74ee749a5d6b41dbe3e26244777efa37410b86618f53f745b9955d6b1a4d374585992965ca945c515949b92b2b2b2b2bec2ecf4328b3b0e09b30a58d570c2efbc7e10c1f13b3325ec87401f5d38b05d11eca0a7b66f8741aa3ac1a3e9dee50568b4fa72fca4279a88349b29754e7a7d322731586b39c50d647cd0a6354e59a349d4f6fa12ef236ba498243296ffcf44b593749b0f8749866dd49c3a7fb6745b0d65a350dc5bf6ddb42ff388eb3b6c7e75fd731b3e7853dead763061ff535977f2018863544414131815d10b7d47a9edd74aff52f25450554f14fc5a48212aaacaca8a8a8a8a8b4701f088afc9f27f27b218ac8cf3203a4e28c6f05ec147883939342a19e2f6737d0a485ff79e04f938c82a1849a1c7acea79bc21ef6c2805454317a795979adf4bcfceccc8a8c8e9a646f4508d97dbd7a90f8a82039798da58771b0751cff99341b4a08526fbcf952f3d17a668c06d3901c01836724deaaa878272fe559586ab534be9724f4e5a7befc34f992e4e54773174e3c929a7d7983ee8dddd7bd2ffff196df388ee6491c07aee33ef75f7e7e5e622f412f4d5e9ca4441b3a365c367a90b0b0f8f4aab42baf494363698816792c2c3d34945e1c27878e650f0d7d63d94545de38befcbcfc683ba816f0bf29bbe57dbd9abc3c4df27d69e0030052d1f42de24acf8a8a8a8a8a0a4b8d6d45a50c65e07dddd7eda1aa7befcbcf12ab82d4aba466a56e50b0a2a2a3a3246f2c3b0905a3375fde170a4673bebc2f142cd5aaae54d8e3f354f8a33ee7ec390ae09119cea33758171e00402bbb0400a9185af1884bca45e84b16a120194b0f0bec0715cb69d2d5a4cece92268c24797ef9a12f3ff4e5e765f6fc920a9235c92f4e5e8650bf8d8ea36d9c8d1f6cb8acd7b14906a422d88394a4b49442923ae286278ce9e4a0603f4996682d620a41b300b6002015bfcf71e9c8847e62414d9c6c56a50a7b78de89d35a6d00608b5cadec962858b7f62d62aa074655af1a46358e6a20d548aaa1d4240d11c76b5828113596c2d9b397a1d0cd85f92461b9af5e693cbdf27a7aa5a55a29d8a4b9e9a1b2878abae8081c51b0fb42c1ee0b05eb4615a48d05094bcfe47ce36e8037c21e9cafb8ae0a2015eb6f628d1a4b37384da6523c42b2140a86fa8935c94b9a7863aae554a4103463d85f92bcfcf4aa5e1ed47da1602858af6aaf6c121ca0e642456ac523359c868882cda89164c937a27e8ad4102f55059ee8a8848c9576514e32552332020000c314002028100c88c482d158284e956def14800b81a84e66541a49b3208851104431c6106290310400000c80214245431d00cd4fa821af035db2c3020b488199c7f57c9729c4167ae13ec8ba8e7ed7c78aba3f2ba72e209311272771787f3667571d5505e647bcee0cc5b2f404b66d4ad5428f65885d8ea93660db0471d452caccc9cffe9518220b3930a34c6259b6e3a54c556177cf145d9aa93c04af8d5cea2bcebabd99ddfed18230ff7d02436607688dff4b2624c32cbe297fc852456f1296c009a7a08a130232a6097c1c45f7b5060390a088183a5e62edbd57ee271edcf12704e39c7f0c7b7e4fbf987bf87dde9ad8ffc1f5a22327ddcd9eb96eac9bec1ae5d6f169f20ff10b20c0baefc1e267c74f0e1cf7f8c145508984c5cd59a1cf86ae362f7c9acdfb7dfbbcfd9ed4ef7bacebe6976b1422978006d8d83dc0c874adea54ac3604fc3086268149713e9f9d45c55a5aed92310adbf832d474f5e1cc1321477ba118f8682eb5fdab454d30f13fc23368da195df4c21e7e422f25e2f1e93598d033d292e1e4d19972f4fea7863d3661a7833d6b66e9c34483534a0a8652a7f1b384a3de8940d72757c4f9b9621892e737df1c050da01c59bc6b1529f7cadd7d70b976943137976a73b9dc2d8b30d36851c899af2dc2345a1c7d5d27b939bfa07c386c5fc28721fc4ef7f9c8256e442f6dbc2de364e7dcb26a77e35ab680260c53e826ae79f0b9b4214325ac6241cd78fea7e4559da59b177d4727d12df1eedef3216148f9d7bc0ec8dd538766e5f5a3e1ac5631c7c44a9d8d0b6e5fcffe185b4a75f4c8616f55c46c8836b037ce9b6bc591f23dc9decaea9514a9d62508a1398a78341022eef2aa7a5b2688f6225f21340eabc6df6c34eea4ef47a5dab369085859ddb695d9ada2874ff25714fea8fd050168b5dd5385163eafd90f2bfc1a6698edce6b35b053a4067d67ae16983204ea2867cbe38315ff1f2ee9c0eae3d5ac1225c9d1f7d25f38a41bca6abe48b2f7cff9875d75422ee1da2178e51ebd42e1345e29933f88aae2f372ed850fd64a254514aed5f484ea8d83018b8d9dfcb04672cf538d3bd49c4691a31131ed3f34c646e8002e516c0639a0d104ec42b44cff84c8cc127507ed5ce8046784baeee3c657c2e01eb7b7d36be3a55026c278c72c2936dbc1114fc3b4568474356cc56376d679b154dda6c675be6f47cb455f6b3141a407ebe8b1087d8071ce303fd3c9947727b825185cfab93904aea5944e3118ce1a9ef4f2d95427f99b9875d8dfb942abb179f9369631528caccaaffa51917c8689a38095947357310099e701389dc5b5909a8f0d95c7edda0995c9323a6bc7f832f89f8d10e9b0b4311f9747cf6c14c8db2fb88cd2d7495aa9ee5bae84eb514959676d9d27d4fcd50c5524a222bec2ad4e52508a2a1da3a29fad3c717c5480153e25c3c1df07a452658d81dd6e4ddada8b0f6ef16f5b8dc6db3236d79dc4a850aea83b37c508cc7e39d33e548a4d0905f4bd361c51b9c56f6013da401aefb6a42ab98cc2b892734b983e0a94940376f54595131624664e86909f45904205ff282892aa43415ecc94f7b3da0e2ca66344cdcb69516c95f997d4487cade501c33888e2a0b208223d913f7e11bcde09943feb557bd5b8a5c741573f2e35f5a870a528aa4aa98b42a61ced25a486990b3c45c6328b8f3f2745ba3a0e221db373288313a92ee93a29c9aa81fc144e120e388d8d04d688f87d38cf16ca2b6c6dacc1f03d1e159f8414412129b8a2911085276aeeefd8b5fa2be0bd2248b41f59e20187ddbfc4f04cd02ca59aa7ad78f3fbbeafa09aaa7fe0b0f353a68d21ab43c2c11e63367310d28929ffad22f0507a4814065b6076ffe5f8e711c301171f50cba8388961008815302c3ae0101f18282d91c374f70dadc8a3079dd41eb686bec9bc4fc8b44944b1f70000d7705a816d4cc7c96ff3dc0300258de154ad50a8570086e6d6031b2c7102545933e0feb9dbba2619a82a00f0875bd813e9d76a29c93fe342dd41f5dc2f94150ac49249e4f1970955a6fc4b7ace1d716e838a709b5bb17337a0c9c3ad96421150b55bf857ed00d654a913ae0975dac99be2cacc609622b0394e8753e3eb41c4317363cd4b3e770373fa2f14b98fdcbf7fd5a381de745cc80bb712abd309b4d19eec3c737a58e531a27b26b192ca4c45f95640b5966eee80f018c15ee1d62c7cd9176f72585edf8fadc1daa9465d84272c9faaca66aac246a2a06ecde0d5ea08e4a83fbd81cbb38829b0e21958162a76a0d722c4f6254f8e04d3eb7298602a7f2864b465593c82b4b9ce13ae4deb88471d0a621af4f8041eb77210fdd2844743e8a0c561b23dc4ea43c61ed966844f0907a891b11a39288e51df0040f1f84be872e8d86b277eae369ddadffc5491c0b769215697255e9f418b38412838e4fd121a82e0edf5f0ce9a7b902387fb961a24948cd8e933505036824f90463b1859a06e1cc35815dac3c2da4a23d8a12b9c1027dc347406c814b0460f813f6283a9354c7183b61320b2cd90abc4bdd0bbb3543baafda4e003b40df520810beeef8fd2ef47ace161e9bddfa24d52a15d852b553cc27b75e95d19ffc151a7efd76b8e3b8862edc98a806ba073b44b1c0aa4f430d6f35dbffd42cc20ee22fe5b58051abb7621ab87097dbf6211f494691a72a6aad76d559c1676c440801464cbc3a470ded073a58f2d7b5a3a0fb6b3ebc88859e4f637a4817bb1833e90e3f1155c05b053cceb5f12fa4d2d9a5a3b241347502c1a3fce3d9c72330a1d68009b3994e4d63f35f27a12ea10cdbb9263959d37c8f80732698d7fdc378b14c17fc9a906b60dc18e8ff0bdb575ac615239894335c5ebb9fa11b84a9c6e0524415836db136690045c09daec0495966e18ba2534c0308dc2f68cedfa69fc61d4b16d9c7c09c294c75a61853486258563e94f895e9a681b19fb47c9f42b42d5180c55d6270202a22f2d862c51708583c58d4e86e7529f81fc01f27947b4e1be5acc000dd93fa437fa2a44e8bf208eca85a33ab9deec9e105c617d03d304c1be100b326193e683990feb223cc2c1a06314dfa7557d0efa6c9cfa4e769c40e4b7c491dd95ccc13330f10a5c1663b30c59a5c9bcca97a1ef3e5fff3ff9d9bffc113b93d314760d0a32a4604ebf6e23f0eccd49c4418d6751ff72cf89d7893902079cde59710681254f2160bb6cdbbac94724b043dca3bbb4de3903bab3c4282c587a44435d2561115d7829ec678d113cb288e298f0124d1b1990324952771a11c490bc2dd7692b5409b6ef1605f0149109e411f37b2b7c7fdb61982311017644d147883a65cb3be06eef9a7577238309f8371f6a04b66aa1d4301b67d26bc50da4520eb4ac9b877ffb4351e15398260d5451ba4ed595f638e951fd16f4b8282e13e5e653e52a5879c98fb90949093c4270cc391aee7f85dc8938f1b3ea98c74f2be1982a4885dff5b61ccc98061b842a6695cff197dd65bc041dbb2c5312a4bab94bf8ed7b03113ecc4a6d5ae2b3158cc01df0d54c9babcf2c0d61eed69bc31ec579d41af24722d4ad47895b149cb72ed60840dbe115a757465d5bebe5ef9790493a6a958aec70bf526cb3791c1b70355f580fd0c609ee8eb810fc62124c27dbc85b102495874fcb03721983a897d9f7a3264e96043076252023a9c42767984ca1005bf6733278d2ad7dc24fd4e57b30d5f7b21e211bf47537993f296b8c1e070873ce92c480c917cbe9acac3d2ba466cce3b819c4b0bdb8daa4b2ce02d6549b2cbcd1f8c2ca609e9474733237c2f7b2700f94d34ad18eabb13648688f5c4fdd1211d362a04a502d7463da0f29c44e0582520777db84001e8f86206c7f44cd793a78d88e5b7e02a93ca99f9a0a92dead29c2ef477229d23a488d808e548e0d5bd6a2f95d2f70d5a575661ea285a05399efca9ea898ceab8cabcad64ee3a214ed0ae13277909be6f72c58f98b4a876ce70e876e7ef633d9975fc201f47880cf1c689d0dc6d767d98ee79247c25f5ab6600e1518f614d06c0c3608e6573000beb5dfdcbab24d8dbb4e3fbf379476d7f07de74fc72fc95b1b66aa2ccf1c35a3828498c62e6953010adbf7622233d1f8caacaa4ca66347896727c91be59a118005439c4fa27ea74eddfdcae16c79851e91829baa3e261fa50952bbf48b9b393dc8f538f2f59b01010cfdbb5620e7e1a71a8f266500498e5dbb15892d43450674a51d92a19ad27014ecf1af873a6c84cdcd25b694672627c93d418e328fa1b0971e5d77bc5bfe85441a7e709f16101ca65a345d56b8f1ed32fa26141bcc34172f40fc89e0774bb9cfd503900888ca375a881c70c84fb709ed33873f123e33373d59da02cb328cdb6c1205817c3c7be4e9fb073a6be2ec273056b35bc87dc53ece68a24c5d57464bbe10d3d157b3e81f071fe95221422cd140741605d2b82e34b546759d9f36f75cb784029e074447c77485c44eb7fc2ce776de535be2b3b874998261276f41aa5847ea8977f50b8982b38976edc2a8dd5237dc68cc61419e52f623f0b2d6bcfcf067d075e2235968d4530a28923a25b8952e530ed2d3425e4845bdc5e5025761255d0244a9d91418785d7b7cfd1dd012398b39a48040fd8e66196fadd8b423bc07aeeaf4f56e87eaf10b47f7b835f377e8ab557d33ede4055b17f27cc15098c147f024f72e3c17b6ee179b029cf08550c372e8e72da09a2139be7fb828cec9d46227db9d1ed681ab3016046c82aa20058ae24747cdbfbf2ba65252eeff29b048a35f7e8303eee6e8050b18e41ea60d0357a9d1d79c8b0e08338b80f0253f1d901a641dfafcd50c316b50662073884443615bf7211cc97ebcdd2e152ef8b186adde83fd83e0b899f80184c50f641a24b7a1cb346283c8df35c431715b4d3a75181233202b6dd745b788aaef12c4fae3e0178963089a4dcb2770c7a0061d9dd7fe43bf01a50c1cbd7010d91e3ac6f7f33635c8cc95c6dcfd8695e081ea0b73ea8926236d1aebabeb3b378419a49d396274d0ad272d1b752c7fecb8cd19d1dfdfb66d08042ba5d6af171bf36230f0538f328c45e6e92eb9731a5f98cfc0a502d846f36e13680979222e15c02adf568aecec994ac6e5df04d016a6dce31c43a1a2fa04af86397bf51d7ee9e5a0b22832b6b886fa4660113aaa7be8a7374e6a1e31792723a52112a385098388af8beb8f6b8e791b302fb91f121ec4280b28f1d36a56e6c1f15315e89889fd2e29b19c84a729e225a0c6af5a2a9ab2a2860adc8124863229765ac3e0c3301597074522f7f4e25bad6630ba7f1e72d85b46220b0e47b7a13b6755a57cb9b739ea14918756ca1c2312e7a8fa79429038f106c2792b65028a88b6d14fd0e3090b8b3b26022d4e24638ba6f23ded31f0d0d3e96fd9410d2e091041ecbd45c2300127cde31c4cb8474319025206fe7ccc1390d99755aded9b0581ce093192cf49142db0409b564859c420a15379dff4f8cd5830e946083db4c78c0824608a5e6fe4834ed9aa428e9cecfc202d39d56b33c7ec4831f33953df46187d2e87de68ac5600b66fa1d85bac5a22f73be524ce052a7e85c0c1b63bfaec3fd6019853f9b549e2ef16bc0400c6c79b1c5ae913046a4c9d4e21bf2f056c4638196e4c978681c0b9641109f0973bb26f1f5dbe3dd7df96fc346915b1bb6d160540cfb73cd72dc7fb1b5d46f466a084d490b866c590008cefaddd02012becf3f94b69d728859924807698bd0d6eac7f6df76c313191024645028bba87c1c94f184662b4c7e975a43b4a4c27dd8a8e2f29c5690fb0047a395919ee5c0cba94678d8ca62be75f5b5f3e063ac11599609dae1ff581b2f6fdb7bbf108a3cb3498eb20431a304f1852296763a7f20c33b8d1ac82c50f24221f2529dff92756bef51cc3bc563648775e89e4f264ca981b60d8b9c466f8f39bf9e44dbe99372a368f8f6bba73c131e9f658e27011de6d999349a7bcb310de161f608c1b06b5f3d1b06ea9317398527d658a4a65189601c4be410c6b52d90d85c80a11d98473b69441dfd4cf18d422d16f1c30a28b1cdb147fa8f8f4c6ab7ed5f4ac9afda0e370ba55a2de00be492fa3727e9c2575b67c9c11c67e1755276f8b0ed8f84bf80c3a6a70e1868b5e2ff1ef98463e1abd20140e0216128d2c2cfd50362060801712cbcb43ac4ccff95479f8c5f38c097c396f511022ad5f089570dec4d08613bdf063c2a8e7b4357a8c821894eed587cbccdcdcea01bf76f6633ab95768e437bff71ef8aae8536dc8abf43738d8279f9cc39d4de6cf9dfb2ad73ad072d58feb18df722f7b7e92b5a78ae92fed04ed45aace95b33e504377ecf94435abf86f0d590eba776ed55c7bcff9a33c7f23fdc5d060ef49f15372e90d921e9eda50a460206a79a256094536d1bd0335d3e8f21cce764eb2f644a0042675260182831d4e1c33193a07ef1a52da8f64dd7ac9e9e226fcc7bdee9d7a122345a4d1db209600577bf505be11b6e0a2b8512916db35a9616319ea23587c37fd4862bf0c14ed8ac54cf016e7bb841c13a7a9525a257ea2eed06fde0b115a797a6655589300f9322a370c339de133b9cf2b862d53555ab167bf943ff4de93cf7d72b6b94614f5d49fb2a4c3fb91cbfabc1bbf3041b85084894d8287dfe3b7fba8dab9c7d794d317399b026d34b7fa9bedc4ee2d0bb124269e52b5f710ce256e18b99186a9f9a8f574952690c6ee60f5842d46ad931802d671e0591788c3f2d8bf61629260dc8cda4da9449425bc2115bfefd8e9ad1d24909f3a042a5b6c15ad2836b39a3a71b527dbf164db7a033e4311715287abc51c737f921d34f0767a5c7a8386a3558c289ce7f0f147d578d8064e773d6272c7546ccacb9ae056f4adf4d41e4f549698c03a43a25f551bade5773b66e330c6e05158b453eff12c29b34eec2bcf5865342cb8df27cf9ca133782675e2bbe8f9d88e8c23a2327c456751ad473a2bbfea782569342d1586a1c8e7b9d636387f017813e1c54be2cc777ff9c7f2492aadcf6f0b16bae2b22dd554193c567ba1d585e7aea84b9e709c25385a876253d595e56d290f642ab9c9af2c945cb1d886e4f1c80345592ae48c0942a89e61f2e34e102e11c7310760616c38931db254f30c67f483e6cfb8e2fc7a88737b40e62d8f6f73f9a47a2c2a7a1e83aa25d1eaf2624733eda7db1945694da36417e62f2e6b10c7594c9f95012ccb3d8f3170d4cd712cfa038d6712af42f94a8bc78298bae21083e1ca3c592e843691a966d50d370e5c0a80bd0f7983ae986dc6154a60f2566cb68e5f008039ddcf1ab5e954d031a698ea366bb6fb38dd7d1d3b3190d4c4c3ea10cb461836a1ce02959095cabc1f30c92b36bc186a4a83f035acf0fb5a5b8879dedfc1324902cf11559dc1327f8d95dfa6518599826f766c59e42accc23c26c1be495bdf4b9cba086446adea0a30ffb49f31b9718f94868b25a17f75e3c9b516d86afc58d529fd50f5eaf317b93563fe4f7b9c2d813c43ae1f6daab5283d7d09345f5764cd3658d63013cd9efa8734d44d9522d0a0fb19e4e984caf12f338d675f986b05a6db3f782fd3d3c3861d65f126e6d6f864ce020629ff8c42005233532815d7c3b33e1f363a15b120cdaaeebcb7e8d5d2f55da2c1e83a501ef06cd09f261d365dddab3b905ac15b18217d9ecc55bc6bb28c66255cae3704b3071d812218d744160fcb7cf215580ca889261618a977098240683c5ba458285e8a664c16e6a219739984e6327a0efc6ce40a8ca80d01e9fab7cc73c656717d2328bcc2d79d776d7e0aa4cd6b5f65598175977ce2dd5cb0ca12295141c5aa694fcd1b59e4e18af230e8cbce4306ac4d53c1f4a4ca316c3e22475dd097ebf4bec97729a230de3d588fea5ede749b345f8d8006f1c15b33d26700ee4f6a3da04e70c736a1caba4dfcab8a3caaf5fc95e632efa2f73fa833f7e7433c1c6ba952835918268e7f67d420fd841a228738444d43147c04a131ec164bda666cf2c9682946ccedc4c87daf4221568e70f41386c072a62b70394a2a6678244da4d6d6011dd41a06d7c94e766b5805bd30f9c6dbc0e5904fea04b9e2542dda7b409117d0b1080284051d491ac2f2be765d5dd8fc0cae56c58523b54c50f7ccb21badfa58a9296e089a96efb1553af4f3a1bf7ac8f356e72d7d1d5cdbe31287ad254f6c0a928f14c2392a289214bc304b460bbabda479b3b865bb075a26ed4310cfaaf8620a5905635b61015a14c54dde3d90a1f7eb62a60280a18942f6c4050c53ab01c7c2701cb93d00a227a088097f462077d211a7937cacd0acf26761eb1ff9531c5236db079840a831ae1712c1ebd51cd22a47263b56e68aed435a8469e16afd2ae9d6cd1f3d05bc63126c05a1613ed84c41424e216178abeec10dc887530fd35d1b03653ac7167a15fab8d8a69c2b1b3a7df430ce5236b842905f576c312c89cdc731d73430912db11262fa7703b4443800beb481476ab72e62b260a28ffa9ba4a7ebdeb71d424d580b32409a79aac2a974999f7bf44763f77014ef73a5f0bd61263d354834f40ac54f7fe90d30146dcc836af2d1c0204a3046de5f24a76358ca85c2a4b6326e4c0729ec47104b3a85ad4e609e9c2c067ccdd4b35ff6e7252efc19908448ab343bad7a66b00f67de0104e5a5417e8d636ed838d4267797ce24128d48479d7eb00a36d18fdc9a9be19ca6f97d4e15dbab054e4532c4527a8b5c8fb232faa69bdbcfe549bc185ff46d54a73911c1f35469d817955c10919973c6d0d91258a53be3869f3199e670f84f03b48fd26cef213c980d0d919d9106a4935b7c1781500fc1abd78b17585c747765fae5b0d47c1a1d07bb3e6832fa8d1407279ad1f6a9656c30883576a5e48a5955b570aaad351420b900bd2bae90465b4c11f1e90a36527349bf1c5fbbed7e00e9ce2e6004dc7c96bdadb12912f8f881297be6512c07d2a46ac136b27e95ca791c1ee0315684c6b624729ed9099193d3c261ae17fa1183bc318f0b686c216594db04ff0226ee8dcca0c24d9a652280772d289a58b0d2fad2ba7114f7eb1a0378e8a73fbc3e39f33817e84dbe7544c005086a9d2703c26c5bb95fe416188e04b75bdafc5ca2b13ef9a8610411c4c274c90faf0aa5bb8dc0dfa280314b2002142c4dbad1bf67bad06aa526ee084d86add77e4d9619f2cd15ea206e6fda5a0cac1a27b9029d60134dc315e4f607c1be40d81388f6098a7d41643fd0ec0b22fb0261bf20d91b28fb0591fd40b32fc8ecd78d32b769c1935ac9556e58ccb012ba0104aee8b15a229d07ba992a17d742e366d7f524c331b338de6cbb1eb28e6df6c6ccea58b3ea5ac876bc591a3313af1599c660b3d6c9156a5c18487cce7a85f0c0cf564e820be4d501f411f3a9deff177db8a686711a61bfbd2308ea0624fc3f9dd3d9a8baa85b508cd5bd25ea6784339fa979d81ec3f1725736e04558291326d81ea3a9b9cc0be7c100df1810cdee56dcde2ea05afd84a1b2ce5e077a6dfc5e78f990ae18ff97837765300240ea4a6aa0df8f77be8590bcd72df4917ad133b147b4083c5737d7dda2ab86157509ada78272af8482ccdc277f32da4deedff2c76b0fdd5af7c5e2ba5c449fa90cc0fc74b8661c51eadc211e96d778704ab2ee6c3df3107df4865cddcc3f3122ff8a06a9d2d62d179399a70f1df945dadb78c626c661113803ab379546d4758e6802eaa8f308dd4248830aa2a83692114b79db60e6c126200a46ca138142397e43677045bf301198f6c0ce1c7e373a141a266383215772a695001a16b3052fe3d152e495acf80bc22d9c773e544c5c8dd33374b465d11adb831c393faaad6a2f23258be90a5f97619c21def67d0c7fb8741d9c37188fd63bb0a5862b3d6d0da8f196baf6ef98f56f8343a085452e9231f4d7155abf82972c425a4c09fda1f7b67f539e8d0802e501441a9e081bb02aeb277dbe2854f0400b951bb20826823cbae3d20d8b692327125311f59c6867ab8a6ab8a050a200d4ba9ff17d724a727416517d95877d16dc0718e49c5e6ec68059bcecb0ebe338d0a266771047811574d0e8201425b6d9653cd0df79d6bb03bca614a1eb36e2e3156179674ace02d8c76497790aab00f1a7d532232e2d538591aaca3c9f8605d3deec0d9504b2d660b20f9ca628683b850baa1d42bb7b12d88b7893ee234270dc7191307a55c026cb053fc2e9981f130a4a9a0823e19a473c380742d218b8aa6babbfc912a875963d467019f4ba88472698d3d00c9a6d24c84a701a463d25b3d4a63fa4ef794268fd8be91a39230864109a17ea1b29e033dfc6ade1e1fdd6b72dce9a31f8d7ee7df6f7512771ff58f7c3d51a594d5fb28ad06830639e54819634bda90871ff94d2e809bed61e871a6adcaef6b63c6d847616ce6da17a5899adbce888d1667350e20638cdd1281e6ea80a0ec03e7c727471a2119a96603f9a48cbd1573fd45b21bfa06bc2ed0c30a5285a887a9b658e1eaefa2173e8677c1662f3d7985f30385cea6fa5329eb43a34e69ca63c31cf19a174275f28970550f5d4a69b31419eb87ffeb7062a2981d4d25c50037124d71ee22baad0f527cc90e33acb10e536c3acdf0bae1152a3c44a0674acd01050d59ea5071d601022301d9f9e27919ef8c7809452885cb2fb92d31f779c2c80f57633cebbb42552b17d7b238e0408bf365457b318a0bc4b75b21a740991cc6c2b7b3d4996a3194768d9b2683ca37f6206d23a5f5c6f6a163a9138e437199ab61c86320427a8dda0f41cb4c114af8dcc01b08831121779c86f50235d0c5d668b4a38d98f61535f497dff7b1cea5a0500a276f43c83a84d8c88683b40fb71075248b00657c587df40b9ba50dc5172012c7abab1602746faad49788f02262a5975506ec2f7421728cd030880d9050e40b125bda9460a5b51173295fdf93ec4fe92dfc6ae207f97ec97ff8151a09c7e763e97197deb90ec4d2aa531f1137cf4a539b520fcfc3f79a8a5228b115708292c74513ff762c20375ba5cb3e0578818c6e29b5019d17496a56398b8088db9b12b16de378d87b91401b86f9b3d51fde7379d985488f5fed441f28c34923d07fdd14e44d86f5c180bfb235fe6482b4157e6e0d34022e7843d0ef46480898c0bc84056fddff126ea3cf38f30cbeeabff1966576f39f2fbf830308e96e7f42a60d95003e81aca68d45e18b8c6efbe678a7f2af26e089989e08941086a4fc4bb21cb559bc711611f247d21f9a004735adf9a108a1be58a0d9abb859499d475a5428bdbb60b21d4fd988ec1e4ee81937d69bce040ca75fa1c5c7d993c07b4c8f585295a80676a5ada2ab64fb7251204895acbdaf0a99b58efca5394f0836e030a5217770d46e6a10024f136e0dd7f454ef94dda0656e7c0a33323873e09217a54ca06175847388d96573fd319ac6425cf909c9636fb35afdb8cc42b6b291744707b41173580061314a423b67bb72226fff378bd49406f0206ed8df9238068a3f6a5e1fa694176c0a516a59df32b930344119eb31e7df281efc99f15ea2c070a053dc21cbcc9edf9cc3e600bb875ebcf507d6195121ffb5ad4fba89bc5737096899fe14d5c78cde30de54b6b4464c731b331e3273e24e4d2e50356d01ff933947c4d67ea97cc3539eee16d8f9ced3a86e35bfb223f0f78bef67fc4e1e0bd3b0ee87c37e79faca0d01131e47699ea49be091e2711b683818057557c944382deccf3948ea9956e51402555e0005fb5fe2e02e797d863f49a81e27caa0481f7f0577d9d2379f6ef51b6ea32e1697ebaa06f4088f08052971375fc939c6495d5e6373da973d8d424868f964d0e92eed3fcf05114c1800b5b35ed77fd7ac2cabe32de758c8108d5d744d7188bfab6777947de04b68d7805121c37e2c4cf18c33b26225c6e734d6a9aca5b9d4502cfea271c470d26167c8046ae47059696051002a0c24a82f9010e435aef51c83de7a321164e013d46e192ef2b75589352775ff2dbc234e4d0c20d410dcfe973a2deb1005a068e473fee58f114449449a00a83c639e66e5852983067ab3c2f5b3b0160a5b26a45c7ab163a0eadf0c079506f0cbdd1bcbe6686d0a00dd57cf620b9b5f2fca2fdbea224f4f2c43f438aef8c4833b51a16ea956720de24cbfa50e51ea42ac3315eb4dbef272e486389fd69cebd187ede89e971fcd47c9f678e1decd7e9de301c8e0d52a0972fa8f36faff961c24a8aa49e2d56a9b538e8c32b7035e2f4fc9818e1bb9291d213f20f1a15f0781be392df3616a06fa824b9448514e449586225d2c557d0611c8c3ffb78a84ec11b975051d664651b9cf709facc4dc9bb87ef44d08580aff59fb13f830bf828b24103e88435984f14391828ceb90c4871eed840098c497ad11eec43252b1786eb4e2f29a706a8b0a7bd524b0801229e53aaf36e004d23035ad8a298158263e1c0d509dceddef279b9b53c836b6721a4aa646f4602c3080467b2c0ac29d292094446b55a086b2c35c86385bc0a5b2991523fe77ce9054b9e833f90a6f7550d338fae2bcb022d1a8cb1923c50b9e0dad829e4efc6cd7a647daaafb00828e2e7ec9da72b53c89bdffcbe4603a5bc89efcc2e32817c4ff5ae698f50466fca07604a5f364c06f5b65f1f38f87ab2b4cbb49ce16d820ef249586fa5ae2b4f45d4766a8f713f89828684a19800af1513ac0ee442b7d66c3cf1475cb07aa240c0612d95634eaa0c4c63948554d96a624ecc3e1d807a34dde3b4d2d08dd50819e070e3404724b6af58d4b9a201ab2f7ec2ae55a02be247b083b877078a2fdec12b809497726e3e3c3edf0d16ddb1323f0d31cd0b0d62c8f7a4f106cf9744db3f2b19a0cc8403c66989031e12e6a4a130e0a622835467c50ab13e2bb4422c0712b7bdf0de2bd26de21b4f1e3f98e4c79b9e089d4472c33de2a29419e2882023e07c25686f5a3daf93afa645934cf5dcb0eec854818cada4e2fedda6cec3a63c73981d5b1b597138b23db89a1b9ce84ca4461fb0b8ea26dca866cca2131731930aaaa70491971d2a610ecd0546d53c6b6439f660f8a1dd428cd6c081d57c69cfd0e7d3ce67811f54b3d77ee46aaa4ba9e1bfae24e7fff614047b882e383c42c412c5484c3a453ee86f0dfe564bea2714c2691ad319ce7ced1ca9866ee0325be0a74f6edf7b0bb20a72ebce2f745282e8d9fd336fdbffb6814388e14e285e543b50c780ebc4261d94285583e69934362e142d42390fc4abfc343b8851aa4eb13b1d9516c84deac1894c2314f09ab76612f5832f53933a554d16ca4dad05153dc153cbdba1f8b9184e62c018d351510cfbdac433a0ce87c6cf72356f75e71ca103ca1465fcc242363a4e5af44685cbe5205f80e09e9d4d1d74da8d1e1b6a206bec126831d66e104d91b88f5e0ca8dda99e4a2ac4a2e3f1e72d5219182ebb6ca8e1074ead6b734aed449bb4aa4b7a265e3385449a4202450615118c1a778e12413e84ffc1b61e1cf4f2a0e74fa58ed033f56f716710efeb4ecf635f7c0f2cc806b11a9ada66bd19fa3954c0a95d844643628181ae887dfdc254a25d2bb69a1a504e5b86fe6eb4936eaa3e8ea6c8641a1a898003d136e81d8628826bc060bb649316d9281ce7e6306270c81526a575f5dc96915d538cb769388abd9a6ce800c986f1e988780cad31219e7e0fdd74b8ba031cb0eb796505151458819edf8238558e6081f5c87276336998564217ce4c5731cc945d1967f572f925953abb4a4c15d04a03551b3a0c29302ba3bf79429dcfba6b7e338614f231f8cdb962ac94f2ca31be266fdfe1e56e72f050e839306311de42dbe2c4705167426bd96f481bedb07fc4393d0b739ac1c2f6fe2d5489b3d76351bd10d8d766b99725e278c5e8cb24d69ae8eaa5e8fefb2663a6af7c23c0200993395c7f07a2af4ceaf1ce637a21cd670abe95a18c50cf4d06fc3cef0c0a4c8e77d8bbcba2f2855141ad5b75d057414b94e41e32879af0485914e6444b3ea1a13f5c450dc18e41024ac83e73312d9f0db16dff06d9d9e019b3a29ccaf89457032e79f19b151bf4f6004ca94b191750946963a46c25aabfde2f573fabd00a4fae278daa8a8e07453552af7f366522a017436585e67da1afa555e219545cb70446a53671a1cba35f269dd1e518445549b0ae1dfbd400ffda0d53e511003458120c509c87c42bdd5149dc460e0f62eb72c5a392656586df173e780c3500bb6a8d683a13c36d26278341d3cda6962920197da36e0265a11290ae5c02532ec486d05362eb512a7e9859158fb6454daf4d7a44884464c34ec504919e82e76dee4af1290694204b85c3710ab826cdff5292d01488962949bc34611916709302aa63eb910b167c4866f5ad08d9b9c1fc79ef82966fc6058d1f3eb810fa2adb64d4991d4b24959890781d7fc0d261e06659e528a8250d5033d37e143a3464b4a9e74075d24b9cd753682e23851165e458069c2fe171dce9b009302e402e305fd3593d1a127c0f2a9eb419ac8d06e23dcfc02daa3c1314b549cc8ecbf71be4113976de4ee1929154c705c368de0d1b88c0014a8bd34ed8ed133f235b5cfd8b04a6eb6e274c432bb94ddb381898718e1980e492eee7f52412710323a3d636a89a59770576a58e1ab81ecedc143aea7b6864533bdbf887d892480324036b36b91ce07407bcd007bdbc5ec62477260d9e1d4fc4d24663019f67e32dd55e596bf709577b50eabe11bab46ab1c060804e7ab9206fedf72fdaa843446182461deb8e860cbda27833ec40202039b87090825d7f3f16a9d6587c597beac04533b031baba56809bff1329470ce4be666ed0a154626875a979d867924b41ac316a537a1c27d6e7faaf209d1a10e5f589909672af375cba7b2e59d42029551bcacc3a4388919bab9e6200906ce893d67b56a293a04b4ac0a7f7aa75e2a61cd236f2aa7f0d3a47cbd3373dea894300b162f552ff555bac4dc87c2576fcd0d704d31e4d2635dea13be56cfe5109e9253b6a6723f86322e42d093e645091fdf42a7633da6894b8c692aba19faef6b65d5192872fb2d05ea1842e7f435e81d669b37c18d973417212cb875126021af2965ceb704dbdeb7c8f77a5dfdae61a8d12a1036bd15abd2e4f4a1d6729757d9f46e8c456713597221d7cab65de44041794643c755d351c1c540ad7265c460d96a2ff5083f29eae4ebc760212a65523e6d62f2033b1a93aa8565f90ea037a28a913a4ecc318ba7cc8a41c1720b0a3a4090d48e7d2e6364f67750df4e4e3ad71b731bdc87cc4fe1407fec33fe8b27aea6ed1c33f6a08d5b586d4f87915250e8097e3a80932847ecc05402519b656dcb5a9287e878ab899b52802bff73e49f1b57245d710534b234f1d8ea5ed51d54a55bcd385391bde3cdfe9946701852bced9406b8c9b28e999a0d83ca875f9436f04941d36ae78cd8d182c93daeffae42bc1fc1d729cf4df15409618e5ccc6c78278c7561d07d748ee13fd0f44a9b426648f9eb428a05c2831496efc713a941c1bff79aae24ac71ea2310163f3b388b88d586767dbda134431a313b89a11cdc954880b62bbf08931b585ed5e0084c31cddb507238de30c528f0c14281da2eb6c2410118236ae495a9bb9e5168d2277689730c42a992dc979beb24e0685b937009bb2295ca49a6f2beec6aa59e81e409128c11d35a5609fc8b188dc819578933bae598c417184f441aafb9a18402730b249d5b41bef7ad81451aa191232903d0565fe09890095f32bc401b33d076813167e1f723b06b94da63df50519112989ce468e1481c8fb7a5f32b1a6a194e6fd2fa2ac11f69c9bfe664b61eb298c9a083b038c20539951caf1f03f51c64779f85d55dc6036a0ad9500a1a01c10a231f0a70011f55745a4626552b5fce6908b1c903c4041e9806ca124c9f020b15225d15b3b86ab905e123cf21094f4b34a92bc80f8715706922454a234732686122338a59b1fce116191e707f3c7bc54cf174c315101ce5f103a2916afec789a3aa45926efcd499466400371bfeca3d30f62e1234492f6a332f08ddb6e213d57f15b898949e56c4d08d4d7797ccd16ffa03e866ab0ae6315c9b388538c150fa93265979c03690c35b02465145bdfee0852e62c62928a4a610cc11f2646fc1f9366217c29956b74823d81a8decdd6c81526cf9e062ec6956d73d180ac70fb14d7b10a64ad629c1805da406da4f1910cc8581985317123e235a1b2864dd5be0880aea8a49597d30c0a1b0d26e178f6a3d0b721a94c2b53fb03c66ff73193fd35316664c53dd7dde5f83ea648ccbca1b0ce3a0240978dc6adbf366700a8e61634e2755c74ddb02abf289961c2fa538a8a8884efbce4528ae456c8d34d6d3fa8284838dec89a920bdc550de16f40c2e0f4a00230a836dff8c5bce782b5c97a00c326e553638c9c81c251a89d9d69a81678c1d2f2bdbcb714468288142490eae582dcd75c77367a32b0271829a2f56afcdbcaf81dac6f444a4acac44ae39bc51d15cde5347d13c324bd2c857cd301f36916751056c654aa03aca84d275c60e4c98885bdbff8d579205311ce82b83829b3c5a39c288058294b45d065f92748c7fc21adf59acbcd1979a98cb674f8f870aaf3a0c609131153d520e903e99aa6a0413491b8d033c03955c44b5e413161ae5985ec7d1c02e1fa86383b42654e27dca11c543d924545c76ced0cf6a70cd4e653b42cb39a42353c071208e009a0f75644a0c7783c6b348e742c471a1208567e7ce28f7c118c64e029de120f9f78b20020de1e4cca0370182b21ba3be6e60f67bc3f716206b28457029f73c2128af8cc3116817cbe2d6f1e8ad04b44f8c3805b960f3cea62f53d0a832d1fc1fc2d48865dc8206e0c4f7222573d19cf1ea49cea0afe7f711549b51bac804fd7b6748b695a4cc282f4888509a49bfefabca1608ec47403032758cc60f2c17819767058541fe670935c1ef6223206780f371ccd4a0980f428899f99d65f555102c9ca220c075f7d60b752004caf0776fa21a0418d48c1f1a83e559e9f6a3070c649951a65a32bbd84a577d299023d65139737e03e865879f2b5508d2d1170aac786eb0d088e36e83c027562b86aa3e0da1208c75bba19a1fa1d46545d4b23baa5c5886c12e0a85ed7919ee1c0d51200a7766438e813c1551d03a7da35f61809a427acbd1a01a3ec4543072863de4e4dfb99fc7c271ce56fa31c49e0ecf9692ba12e5ee8b44043a88042bf89ba20b06f57fa1c04fea51a44518876460e7100f6976b91fd4cedf6522d44b5eaa6502c6452d0193725e13f8d9a4d375f25c2b55c3a6f586c24c06320ff9d96d7285e309f2dbff53948b41c40500d04e217c4d962f4aa592d3bef8aa40b070d1865b4d4d598fa09fae705c53a8746f9f711a6df239042857b1980c862054cf98eb06208ec5409682c082b20a2b71bab16050fadec7989036c4ec4005bce6370702ad3bb6872ff4d94340cdeb41939b7e73bd0a55ce7c3cf30fe2130e5601f92a8d74a3215912d1e60f669b0845070d56570949170624c4ef0a5768a92cf9a4df6cd0797082104facb40a40483641805ad96bb22680001cea4cbcf596c17d6c06fad0d39bb8941d4c4f781232a47c67fb652700236f67d085ccf07bc26fec9988629d435a56cdb29cc087227456b5420ca66958d6465c98a9b26ca1f397d4d68859da73dcfc8cf0df9bcf9bb5e225a57ed92e466dd46172c8ff7212c243202e5e50bb3113448845ae604c11a31bd13713299f068060e3b7ab30293122cf023c776c8840d028d3b0aeda94d409bc6d15c684c30f3f483265fdb70b12b200d5d490ea12ee921878fc393461d153a60187349236ece665e9592377c9b083d063c30ec2d19a3106f0414cb083d7046aca98e399a81f19908a52597d6b0c75897b990cdbf8c8c0f518f30031f303a82805b0d38ecf807bf849563bfc4f161a1c973ba43067d402a58523e7b507712c515eebe5c28b3933ed8ef1cb2389acd4c774efb64036b7dd77254808d3dfcb2b0a1ce061fd5e998d37e88e39de4b0931abe7bdbad988cb4e074950b673ea662ddb75aab68f3800e0052af83aee42b798e1e5e60e3a598d1f6ef413179145705d3c2c511bbc943c689581ae3aef1c5a21c0ac040738e57885aaac78f5f734228409d47efdfe6769840ba4dba204a05291c939ff816cf8c52256e539332f2414e9b24fdcd66ca3f744ad34aa47cd8087c96ca0968fb505ae0fcb2961c6ef64dd783b4271135e521008a1d00ae3204aadd81978eb305d044a173c0b76b24f13ee4d05fb1c620e61d21047d6e9dbdc83377892efefc3b8904cc1a168344f86cf0c16da3065f5b3d5409c968210c4ab90f8af49050b68bef13129a48ead9aee050d681780e9622b33f5a78043b3c5c40b7a27b280778723e7c8e173021ce8812b6052db0c5d8e42f6216bdae25e2b69c1446a0b8a47fc8698e9427191e282911271fa7b5e759ef94a19120a7716a4e5300f14f45441d296e89e3cbf561ae3eed856a4869961ca180ba0330c1b82c43973e158ac165afe95f16076f834b0305aea7c6e21a927ecd4b1c110fc55d4a4e6ab2d293d85ab8d8f78a9cc521e76c04013d2d00ac4011b1ea4ccadf7a14716508f0a8c6dfb9d2bd00a462ff47e986aaea0726d71e0751788d004e9addce1d4d12140306311a9d910cffadf26d172a28dbec469a4b110ab2842098dee7bf4a00f49dd1c16f5a9a2f9b8e6c76b35618dc715063d90b86599c1fe2adce5f5786b6451223f0dd0e1c6b6cd0ab15e787802427cd8f1a80535e4287c40d3a7b5202c15bc7588c2c984403f1184a652c46c2210d0edcf49daf05ecc2e5d5a4f38a800773836498a7124f75675872821e184956d57675bb95e1a70c01583850903f70bb34786920b69fcb6e0bc2c66ccc3b3feb79926e14c6ef465802449fa693a1ac9ec36d2c4887e1fd8d402bb67dc45679f6c70ce531dba4f09c4ec2ddf294c1f7086f3c57333c52c7fea1bc6b43a865a80f715e8ae38b19a8d4000582b554c00db9a7b58a2280d2232c9ed4eb92b645be7a7c3a8ccca4a5e64adfb50a9e6b5b6dcb14431431050029a717226ebf2b8f08a5e698286e5fc3ba83a25d219a94f12bb03c31ca64ecb4f552c2dd445c9940e67fc474bb0c51d42d805de6b1605626f20367091b479e9d7fa24b966920f87dfcc06ea31add932f6687781739203e9d1920f9ecfbbbc9ad2de98b9cade07d6c8327038592b6841e93a911c45f72d8c1a7cf1669515720fa3e3b43c7bdb68abe24f93fbff59b6331206972bd534af62bc702802d11153c5d24cf9b4bd6a17a6564a431a6a49630e907aa057a7f4e90bcf924bd89623bfbafd9a8016bd9b5bd7d26b399cd9963b6db7dae38d306709b7ff019418a0e18fa74fba9cac65d528f6a425392fd2548d1c212901a1bf99c6f143522073d5a7995a53d722d4ba69ddf88d2564308711096b9624f511a49969e80a9853f878845b289b30e3ff186b15015c6ac581179d2b65f8b28647d1cd115f5b58cf05cd814b105210e1285177e76c807950eb83c6ca0bd57bf05979624f22c53c9db283cd8e7244147d9975ea837d62a34895efff9b28293c53f8c4ab75cbb7a887b5556bacf0dfd6db95fff49af4d220632a7ebebcaeeb077584ebcddf088a9ab4f31b17da217ee6f78ce66fccd554dd0577cc3459c88d037fc8f979fed95ba8550c8568bc264afee273cb50ae6cf5be292c533627d59997f799f6fa66e85fb10241fcad7d55a9cb36efd5514fd82076c6068c84ecac263794ab9225d1f21ca6a7a04ed7e56a9ab55515114e4b3ce89fc6d6c13618567f7c0ea2d4c0d1f7391615e19df6408623100a807c064633efebe1f0786069dd40f8195e734a178c2f5010ef1c57f299c4bae14dd6d2ad176c3a05045e00a4ae0265ca902586241483f46f13110874450e27f60fbbc2e971a4cc4bd32f951b07292c88e880fc8bbda0ba6b37afbaa28d90a4937fa78e966e3b43767443cb46e07cedc5f74f8f926615d51c3d03f63f0a50e80fbe7dd714362bb4a2d6c8c82e5aaaf141bfc269c71d2a001fb913dfb5a722950d349ad9b46056a41001d6ca427e34202a09a5fae8d75c1c1b9882fbc820c22911c3af59dffd6013216063c0159a24a87c779dabfe8325aa26493379f902a7f676fa0aadd424b60f5abe656a071b830943e9d7d6e2003e2e0f2a3143eddbfc08410489f8f51281f696523fbec7b8a50d39bce97da2d66bc81138e6fb072fc5aa6e393eb767c816a915f0d74fdf1bc7cab5bcd85d540a50a2ccda0383c5a1e0ec35cf9ae226fb663d8ca1a6c15dec50dd3b38087a7ee45e9905af201194b2420702eb80fd87344b1dad8aa89282d007001523665c450c1cd78bafd8ac86a60945fc691455b934555c9c625bdc447a34150665928fd4ae00074e41964ec5493cd383f3920274feaeb1b3d235a86a10eb5667128425588c81f5f169e9c9c2ff9478c273342b669f6e712d9f540d4dfa8349a3c72e034c95af86d4b6cc91aa08976eee05105195e53615a3061dad2a06f6780cc521f37af25396c6a305a2e17d90fbcdd670445cea5faa5c128e714530a4cf944381fc0010ce7721de474086763869200edd67f208583d303b426303f3742ab5b15bc03e24aff4fe61ddc7d0f00fcbe087001f2015894ad5eef7b7b68d25868d21e4437e31b3f78ee8025041f6a00a705193185d0eb10c95b49025a2e3befa8263583e3b35d0633b31d2e3f2d15cea330b88095d9e41f69ad7c85f07d2cff5630575f1650a80334870d925086741f7cfe8f6b5e3e31429272f4c169c1f095aaa0949a8a87b75ee2cfeb5010a1feff65c4908c94166435f259829a015ae32b1f3b4a127524fde76fe1698fc5e3f06e4af8bb9c126025ffc0ef30f7abc62305c8c3516f75786c03c05233e2db471c494f7d6ef9a5f7849e7e7b68997d16e27aba8f8814621035f375b2d9075164f59c2d985a16acf0d2bfe2a3f76e29e4d848b092ccb71d1799535ec2b8be6b33fc6365cc11ba6718a77f40ed8c2ade3672daeeb0eb7d1794be00847bdf62e3de1877a7cdccde1cd86e1c404465dd212bc924048c748f4c81d9cd0f394434d40cc9a40c37b8d40b3e916b33d47ffaf6067dd743a1600a8b1fad8083a20a7d1071874989781c442910c874c567f98fad131532e37c4abe6d0de130a3188f4f97104be7c52e31292726b089e3c4f3dbe1b0a1f732640922fba96ae0cce04f4281618ab05121bd324c08e8e7c64b58128270ca7e9a0f0f0024045b761f5a80efc4314dabc06a9460db2a10eda518dfa059580f34fee598838ca8e0e6779177dbfb23eef7f0cb41cb82880ea68388f098c09d8a10cdb94477f9c8ed1b47378857886ce58f41d4ac6c562fd9875bae4bd382c1396818eaeadce8721800f1033f03432979806a1303134c901d461b22549147acbbeb4a94d90bc64b8988e0230593606b4da359b2cc56308af25a325ce55b62534a9081d43f325caede4253c093814aaa987f808c7f9070252af21a4aea3d6e7b364742db9dcb3b0052368752c857961be7b5df0388b3d4bcee138dda80d03007fb664b21f9c01e962f7b5dc98a06ad678e1cd33cc119bed20d70b65d0bdc99f02992000b31491905cece56c397e092f9f043e007922403c4b1031a67bf13c2c2879c93a57c3411debf84f26d6fc74f1c98c17e79d926334f3f3fb59c34b5aea178f003190ff9d2bf1ff9fe181976b19a67c6d824e7b3532b4ac9642dc5f53576a76ba58077c831cba34c9b92c7bb800cc4364e47b59f083ad2dede6c4bd684c81454b0192a8c03a7d317e3e51275243530f6f2f18ff311123492d38a22308c75c312b1f4ec800d64e28eb854fc8968242c588625e53bc00c73e895345121ee90fa9d33ac25834fb501e8e660458847230ae728f210e70776905da09e7bd566a0e5ec50e7def7cae7ff49640a8dd86ba664859fe1ad3c2dccc21d932b92a71049b8c3770b3390db1e818bcd59fd3178c11f2eb3f99b398f1f8b61a7787a6067b07cd1881ce83534062455f66425d53327336955754eab944f3c3dc8352ce167c5953b7e6d94e236596ed4849b95da0fe551e71214ce4a22801ffa0444beba39fb5c36110ab3f5a2cb4c4864c3495e894e8bf8fb78b2d5a8b15f43d5bce8b8f9cfe30c4ded13d6ed8da21696c26018fd09c66068fe3c0b0e2e922278e7892b2728ec8aad95f7fe023d793029db601e54ad08212f5021f7aca7a082ab8435ae5a4aa277059acdaef1c1cb136d53e12fa8779b148d6d141e7296d6c5abab14fde09d7443a47120c45724e73f5c67817b8f5c4cd07166f42d28cda2e4786db0dbda415c5b0e0a18363c221369bffd2cae5888213966d891d59ed895ee27a6ee8b95beddcdde92b719c59f4b6884e26f80056ea95ecd1da5ceaf898d9258e4f340f327a21594b0594f1832803c0e69d2f0352eb03c8a578a3d0e3b904378041cb9b3eee1c643067868480fd1eda4fd5be936634d3643cb4b362814d405c90c78af7df2e0fd7bfa88d203bdc1276cd6dfd6a6be3947da74341fc2642a241f78f84bad31e0aa0a8666b3b5a8450d610791221ae2bccc43fa986954a08e0d2625aee1922e1aaa3dde54da78c8dfa2184cd2ccfe72b910122bda3d0cb70d5fc0f944a22942e7b34e941e927a9a2fe0abd2def995a382874e0fb225d01a5582587565b307424a7f4c4a13bc426d5f8884bd3ae6b4cd9b7a09a5dbc0b5c22d4936a584352ef2d1ff427d71892e3e0cfe64712e260024a714bda80eec7cb840c3a9069a5c89a0d1882d7a5d389e13572f3f109d626b470f1e71c26638551172e2624bda8263752b1fc5b809a72a2e33a49b57a8f9d9b449c57d0288182e114c6e88c989845f2220702a9ed23bc6cc1484758fd1dc6a069ceaad3592892fe42946a3e550a7114fa575b448669e455b4d2180c25878019c75d7277fca10acdeacab846b353f0b74875329702ea17595c170a4c25487e60b26a0bda70d809ee09633ab1b07729c45b08f7cc46db06cd420ae33f08f28dd761426eb1d552f5ccbee9aa477947a4bbfe22c434dea1d85bd4a74352f0352027561b74c11b4efb0c514a449bc8d0a842e1611e818b0cdbf3877a5ff64e1c2dc5c5465f2b600c3d77f945e43c11b43ebf340ff87ce3545e896ca6cabeb5f4069b24d1acabe9fe6fbe77e1e5da02e5169258e0d38e30f500d949632d1c4309479aa63c059c68d2d652162a874a9d2396800fcd2b0eea570d24f6a7324796d78e71459c2d8864fd1fcee0c3c67ea0f85948bf00bce4167a349b016496acc69b150007f47b8611566e5275751fa1e229c0c25a8066ae375279344d9e608f1b12911025fcdf31443ba388fd88d26fafde68774fe1c52073cfe58475b22b94e11a6efe35fc3dee625f9659cc4086e6222386304e01957288a82c5fd9df63ec888c9ec779dde1bc4b1ceb557fa2c15441254f801bb35333de0436802f7d7a371adc2b6e109e9457b6bffab6e1a3e8bc9a35f61dfec13063fae683f9085d407babaf5a6a674cb4ee0fe0bb1e10009dd557ec4abf8ec30132ac1016c95809d928fa384f025d9dbd4559276b75c7439ce0edad5d9cc06cc714bc51d6252311b0ad1bc4c2d76e999e2662659023918b05ba1b372e71944b8161f0e09a8200f20014c75401b9b4104f14ad74368c245918802b607a7393ef033c30de085445c87c8e1bc0f0cd01d4205947df5990e23d6c067b503181632c034860fd0cba70ae41802119bbea3ecb011ba6022e0e3bfd07280da97bc5e037b62c3fbbfa4af6bb188f38f93aa03798e68d2d382f12dcc537d3140ec0c48e1695f9f529a89661b71120b816c57217df357148fd2d46314d70757637f487dec2fa80de1f81f3269e5f436cd712704eb6143f98b6c70d81dd8fc151ee9017cb1accfce86b5cc3b42a9646213e4795dd02bfe46bab332f5977065058dffc431d1b82c8359423fa4737f4a8ee45c8d04eff5012e455a484009c4c5d406a41807affcf59ecda1e1a4414051a47c5be960a20939980af8bc924588fc85c606d1d1fd526aa62efbd3a8709cbdf574f06ff6e1be45ddb1851516479ed7d833ca4446aa45c0aa61398962498f8a1a94023aa36a6a44c1d2ee90326d5ad93846a4a3bf79a9ce8d2ba946d224e20508d1c71663618bb350bfeed33a1180361cc394c68d2c8eccb10e626c8a198c39ecb95b0c8fadd22e20016adf84de22bc013613e5084358a484db87ae896b8091c26cc9288839618e1d29c25871d5f93296ce0553848747a47c677bc571db70f653fe2f8ce3aedcf0a110bc8bf29be5b3c951bb8fb59a83fc4fd14be98b0f007db7ad67cb210a3040039db4ce83ec8b29bae7a3d47310ca2c9e951ea68c90d0ae81a31aa7a25bf91ddeb801b9936fc38870714f526d2a3ca3964a3d62b7fa2318cefe1be6fdd5697dc956b0b507c2b1ba82db03712f9f84c305733e2c6ce606d6c6fe64c41e0a83100e6a74c3a54bad2359b0de4f2321e4a709c9bbee9f2ff69e2a357cd21c951eda6445029f05f74b9d7459269ac2d7d3e553e1b57724f698f27cb2dbde40fb8b63a80f72a8a2aaf484a3c381aa0ff21d5fe15efa02747343fe716b76fff661c28eb2f2cca3403d04b9d70ff2eef6bdc8fbec64165294962a0312091116c9d892bc84cac3c72120be1edb49ce0049bb0ee6b7b53b5835d97f8a4984a19ca45df7f091ef2bc26395afdd39cb0032588e3b6f4bb2601cb592f0877a5b44729043b154dc9ef0412ddb35ff64f1389188d3c339d645adcf85bc87bb22e4f2b3929627c7467e1efd1ae5413c88fe5fde28be9952c4147cedee0018d593682d054021a390417c5a921184486298b9cefd298ba009989fdd6a54bcc867b7eb74e356e48f415d25d744648635f33e67064803b96f1c00eaad1ae2168092fb7e19a2a7fe7f2f2936c801449259d5ec091909d388c192fd37e9ab19b34fc9b5272217526ac47922600aaadadd46a50fa46a9e88d8c4a0e49362c93ed900805e9d8a2fd38c3cf98d808d9b1b3cb228612787bd4c4a827bc7dc5c240fa1f21b3dbe45b68669ce49298423a40fd4e694f3c2ea5bc0285670adb5cb5bb97f896e4eb5012c3065cfc8442969cbd583d970d6f4001cc1803999eb13ec551002acfb2a2fa031b366d5943f451aef5ece28efbc591ea322b7dd4e43776c42817e3df949c149934fd08a24e08dd31dd0186c984c20b29237c75fd1f3b5bf846e78095fc385e5c50133733a7fc5e1eae53270e502211e22943b7e494fe03e08788988ccdabbd9a64ec5ba75a20bcb1689203774992d219806621644350951e3b3448930bfe30bd6e6f743156505320d35be5eacf920f58620b7251014fb15738003bfac218e44c415be865d0f01b24534f710641888863c75a07fd5ed582b41c99eba4fa63380ed07481116b9b81ea5edb2334c37121e1e496b13b1eb30dc18f1dac8907e1d79a2cf64dbcc9c35f41240872f7e08527d4e74f8316a0a3f74c59368f6a60503f3108a181e6d147f8f8aa41d63d12a66f18b1f4ae3ce583e79e1a59ec2467396b4f30147dd319b8fcda605ffdfea1de43cdc5d1ee9a683b027fe61acf837e2c2c1648108da02860411c11a7a938f1e2ffe36e77d11450ab064c96dc758c7eabfafeab3aafab33f4b8f254d7e93221297ef217992065b80aeca3665d752a768ac90960c6fc14643543c3da1e02d443ff7f5e9bd6bada64b2fd042397ae60b8360a5dba7724324571cb6c357b1a8dc867bdf40bae1a8b22667d8bff9dab04b1f9107d85f6e18c300a326d6df65dd0f4ec089513cc69cf0838ed372313d86b3be7d85185e70bc4cb971c1a727b04c3d9692b4d072e5e0635e907e7316c7611ed0fbf4823b9c3f31ac9042722d42d14af2290ce024381752190748673300d4e48ccba7741cc5569489e70ea1d31af85bbd23e4ae5d3100ee5f759c055ecf335b0d73b631ba420d4cb918538871a589284e5f08eecfc1be92fd8aeeee9178a34cb2494d739fdb48b04eaf02eb49ffdf24987e4261217ce51792b6cbc6884c244ad44681774f6fafbed20d1178820a0271f6295a9728dba8d41249b87bc960d8b2a734414dba9387873d15248d1455e38857a0b9dab07b95bd4f60df00622c1e671f82873f1cc6857de35d63229a38c2ee627c1e5fd17f09fe0503bd196e4a653fdb2fbe09f9c10cf1287a755ae9d052f798741fe77a22a315c67ea4c5bd70679466b03b2040e89bff02ad1939dac371419161fd1c3a87294d264a50850e6294038a7c3d82dad14efd6ac0a6f1eb992bef16aa9b2c9907aa5fb0af0581b164eb08bd0de8f409bdb8ea7b10b24bc3434fd6a49981b7b455462f95b47eac8a22edebb1ae4baa5ff3be929eda355a0d192a48b0e202e1a52352e824ee48255b813f7057bd63cdefeeb598c0194706e1ec1c48b18cc218f3383452bde7c2dbba35f6b8e920cddee2d905e2892cf98bc85e42579795c91c0a739b68460f97d0b8305abf58d0382b5d200fe3f2e0dfb7e2c18cddee516e556ee58f0475771258567a99f46989e844f581ddbaf7dfd78db523fe3e3b0ac3cb7a219a3d540118192b6ae68ba8bde83eee90369ecab81a6092c6b606277d819c977edba1abcfce40185c80a46c6ae68a2e69b0e2d9c5737d041c9634132b67b5fed5fb03fd8d92b8c3070e5a9fbf7067b6010b8d97677a6bae2cef9a35a8ecac11562d81607cc97225b5a54f22671c1a99f500646f56a6a5c2ed632194a0e748740fb6c61dc58fa3eb49aaeabb5e101f87b47a4e1eb2bb5202df2e00d218787f77d701c8148ea0be119ac93037221b74272fa198fa9c92189761d676368a63552f882a0cabfaa8cd56720864bf9507b297e4a0f9fc4a58eaf52767baf696a0cd7542cb3750729ed17649bb8f868d6421a806c921ee34120d6a393e20e09a40e521e83ccf00cd80186dbcd16874aba09e0ab28540ca318a03a15832c580f4a5fc67f44246b2dc42703d1c7bda15994c731bdb68fd537712843438ff4b686566d201600e03865ca1f44f7903834af3572d7cd6e95149a9d3d0d3d810020b573322939fb470f8b973c44612d433f322744c436b224013b9f68c02a1d25dfb5eec657ca8221f31b6fe36b1ad09e043537c61ace45700166749fddc73e6d797613910a89791fd4c941386b02fdd6ee2200c241786026d41eddfe9e567ccace673d2c35e684116f0583cacfceaa5e257c4a283795661dee3b15bc930c1a52ca0e0ab7f59b61694a70e7069008d1cd5911d96b3f1361d153349111644e9fe5e72672bbd009f4f148b772f9b293b8918f7b0ef41202256ebcca8aef086a4fb17c79dc5734ad5e44000e820cfdf30d8c91f31022c81036acba2905b309a15a9033941f29c0b843556f8d9598e159b18afff90688d5d89a406cf89db861be111e32d69d5c999fc5e08644cd929b8886e57cb412fd2ef21be8aaa7e33054d30e665e3a643636ff046c6b84569bb96ecdd64ef2da54c49ca49090409e60828120583fa8bfa1d2e291205937a9bfa1d2eb6f4c1fe4969fa0a3f15614efe963edc3f29df57f84b4a8c272b4696622599af185082f90a7fc86724b164bec26f49d6cc57f8c1aeb5e928747e20d767c1b56b47c6df7d8aa42e2892ba9848165c9bf85368780ca5d032fecaa2b2605161b0b9c9814dad2ef85954961f9625edea212c387fb1781e8bad4dfc26d2cc219c910e9942269f2cb68c9f05d7ae93e5a7d6ae13dba86cedc2ac18cb8fe97174e95931da52cf14db4aae654a10502d7b6922cd9c526b970990949b149c1eb989e94b40da855126250d9d4d3c86cfccac47bba8901ccc6ada15d6fc64fc259bd28d89c959b1769d29b6145bbb5034a83228a334f07bac9976b54dd6ae90c7ac5d1f0dee2670b489f197c81d2a89dcc18e58b18c7f2cc1422cb88c5f2477b0f924dd32fe903c473e2459c60f224f122d63122d489388d01619c9c65f9e0bfe510d0e6946bae1c927b6f9ca9304cba02d8c657c9e3cf25cc9d886646b17ad65fca39bbfa80b0f2e778ae11fddb48b9e6419cf327eea275ac6a35ac6e78848c6f466937167bf9627dfe59f905da274a8f9e6280dfcfee73d92718acd57d809e37979327e177ffa1a4c7ca6d832fecbe32fdccdd1169a57c81abec21daaeb4ab07eb98095623c4ab4d28f20670948d77a5891cf107703119460190be9b193cf528f8c4b3519976c322edd64fc5d6d6c73bba9e1c78f81b4ab0e8108f90c7113f9c43819bf70e377417a24f5555b155ce21003ecee20b50c34f040908fd0c7f82abe88df871bfb7b895859e50ba3b9e2afd07b5fa35de17b6fa35de27b8f838a3aec8b9e8a3aee87648e00812f92b6a41e198e21d2eb18a8af3c9ff134b3677aef99fdfa7c566cd4d0ae9bbd87f13c96ecd11dca53bf5d67cafbc87e9f0b0349b6b3bbbb6d1dbed66ddddd4db28df5bb0b024822c2489f4404d117b246a850725239a89c931c1739a79c16392c7250527258e498e498724a39a49c514ecae78c72c61c514e2847cc793247cc0973c01c500e59e68072be1c2fa77c91e3e574392f5472ba1c15183930629804219352a1e8a474503a273a2e744e3a2d7458e8a0a4e8b0d031d131e99474483a239d94d719e98c3a229d908ea8f3a48ea813ea803a201db2d401e97c3a9e4ef942c7d3e9745ea8e8743a2a307460c4f8402632b77d0b63fd1db5dd5edc791f080cc590681c914a2613162d4e2e50523ec4d160d6064595429db8383d99a2dd1beed4828589e99225aa6b34979548a3b17c7122c33e5d138544ec93fbc3172a2eaacc27ec54609c32fd935296fbbbd2403218315a64fad99070be182cf20b21464ac2911182be50089a24413d2dc074d055d820ba886a04151529ac0055052d8aba33da4c85d09050bd308232154223020e9a104cd0420508bf8286c410a3285321341bb8682e4081690534133809c6d00bad8271b4c283185b2ca1e28a908408259c408411f9a444d0b640040b88889d00a40244f924184959e89bb14445e346174570d9e835e134184d3a6882064366c0c36f30b2f0422d329a642a44064772cb8c62a642645024ff0c3528e0f4268884d30d8c0246db61a2a606418ce0831d3980d17e789458410b7aa0c384ffba24c84600032094f003081b76b00412b523354424c1a50b5750758e1019e8804264d0238b3215220325b2672a44064078bcddddad086ca59452eaa1124a29f5bcda0b438204091224486aad48ae13e1d656c156c15e5b055b858b6d156c1570adb50a9de7757e6bcbb2b262a3468d7657f99f619aae761d39dd1c1ec1dee3ab5e778eedbd9652ec94864a6c7b96524a318f77b7e1c5a19338831de8859f6d976d53a46d6627411904c35c9a9810865d2928e4a57dfb0eca7faba28a36a9b0365b6b1283da27f75eb7d6765b6bad758b81ecf607a8100b2794b60bcf9e6c0b4a31be2c3a8ab14967a234c442f51a098a91e6ea37241e8458b8189340d02804434ba3e5517c1a1247cfddfdd678cde97477774ceac158c5100bb3f09672dc7d44e9573aad874ac2769df4fd2b7d7f1c2ab62d3c80bd2a308b5329c7ddddddbd85ec1cad3d85dea9d6d33b71d1a893148aa64265ae7a6dbf7e4f4c86304fb25b77f79e23f6d229eee3ae5db466fba6af584eb22d5760804f32bea0d1346780207b005b9224277babcba52e4744912489244a8c9210021448842421042449dc7b2d14486e48bb99902411024bdb6191249193c426991182040912244890b8db1f4b8e5e12ef070a2442448064486dfc486290e4892448904821899116b4808a284c8183c2139c50a4094c402205cf129410c50e144950a5dced152a35ed53eb2899ba7b3ed280caa7368ff054a633ccb1be6ab0b078ed4265daae146bb500cbed4e29a594d6e6d7e3ebf1d57c340bfa74bbb5d7edbd34dcde87c14f0c89a111a964326171d2379b0dd73c604ad7fac65749fae69f3c3590b6699bf2058b1f353526b7e7768fa6b58a09c6d703c65793fb61c0f8689fed23f2d9c2590cefbbb98f565d3eb2672d93b9b8873791ed88b13e498a2fe14ef9e285f812eea8c8207db41f1f5f25f141f10969b44549bfbc22458c18e9e951752c25fa6858c35e98a39e5c2e9542c1588d4670b89b439dac562c186098c112d5223c3c27260c37177eb4eee95c25d266bfaddaaedf209deb5ce73ad7b9be379ddb51775c88f5d6221a0843084378a341437c0929bd3ce10d00225a8b18dedcdbf18a7846706ab59b3b65ef8694c48c9ba371731f596b2acdbb69578eb6f8f77b41fa25ead1abfe22458c18e9e95112de4eb714d1dcfdd442f4516d2a0d10889a6149727fb4f006fa08194100b456be3a138bf190d1d4595da9326d56589b4802100ae05632871b723c6cc0c787363b000a60003e3777733f230c032c90127d4800851240e8dd46969bbb36bcf57c3d3eda0c38da4422a2896eb405ff0b54f2d1c2db470b6f1f2dbc7db4f0f6d150a00fd93dedd3b9f016eef4ebebf1d114f0d16a005958c4177b63b8167b413c1c8fc8cddddccddd9c7783bf1e5f4d9bd74fc417b77122d64012431883f88263b82e90f75d0b4af29137475e25f7a7cd139186947ccbebf3c458ffbcb91517a20fd374f5ab86697cd508091022a9117e3d3e5a2edc096f57044d80fbb01b3770bf3ba771cc0d31841356587102d55a6b5fec82adcb0e9a097e2fc65620e16e838cacbbbb5b4bb3f7765bff603648dc267a8e2061dddddddaeaf762ec7ec43aa634d34891c025a8b5dddddd5adbd769b411095b04bf185b61bdda12c3ec5bc1c49123478e1c39e27e778edc6a85975db09ed736d7473adc31d173e408b53113250d2ff65128f1e5f6e34f8507e87ceec8d6965e2a057e2f187180bed0ba817e4015647f3025457c69fd68d3bf6573c18ce865e645d6afd15f373c9bf12637ad8500093cdda51f7ddb78ae0841f63fa9d950b22dad0fa53133d668ecec28c94d1a8d4a1822b7ec5f0bc693d65c09a0b519fa657aaf9946a4c7cfa2e9eebed567e8953f26472403dc9638485b68fb260c8cad4d222489a4be1a91ad1a7fd9540a3cd1774192e2cb074a800ef50bb987318f2f02e5f0de821ffe7d2ae6003f449adaa4ed6a914f79c430b7361d8688cd16922032f5916d8a24a842317100203b580a623c2d2d0725a4294f3e492e8186d4dd6dfe2a9524cf6bd95ea8541e4fd4fa43c148f31788ba6e5041cd20a8eb062e46e62f524df63f472337a800fddcc035e807db276ab31adb335a48435bea37c5e8c8bd22572a854a7d1830c497ee653c415fa5b286254021e360cd58337f9dbc1f67a669faaf58b4ecbfa2b4b503fa2a9520cc57fea4b1a504cd67ab26fbcfc7821b38d04f06d1da8d5cbb58d9ff464fbf606cde7903977da554c468eb3207cddd46c4f787e96957e87d47c94aa8cc41a390892266cbd64e6e15a151ccb478c8d6ad656b1169d35758daf45f296fc69335abc94dcba7b7628534dcb1258c2d05e3cc67d9ff6ca1bd4a4f473133fd2a9530b77054ee98ac688191fe04692db07ec1106989d9f20c4db90546616ca50f469adf88f164b9919a01f7e6c682018676b1c8f4c16f05a3cd0163334d1fa387b1f9cb776ea771068d1c9f10230468da85aa61c3465b4c109849e0a7067e6b8f5c0064fad6826a472ce80963cc4c4cccde7043e6ef194f5a841b9324202088ff02fc1170d3ae7e22d96d9cb40837798a231c99e593da8a70cbfe4dae3489f3252d088096d70aa9bfb00bfdcff4e94a48db85abf8f2c956724cc046697895c00fa5e10108006dd7c900c22ae6007d7f9904156d0065344b586b45dbb2b5e974a76583b1f1b4eb7e088687842172db69d77d1c8c9176dd12e616226176da0c91345f1822244c11185c9b3e22c1e048240ccf8884b9c1d83e5a8b8909a0e6f63e2477a8198ce5706d56c497feca7305476b8b21d1e82392bd2593098b16b83bb93841a55428294f7a5ff94205460c900c73c5026198410300ad15ba42776c18df87b1f54b861acc0da6084c0e46494d8fecd4486c674976bab393fd473ee94ecf299f74c727fbce4ff62860d91f5f1b138b99695723213b3d12eada230b205539c94b74df321409b1efa66ae61289d1ff0479a8399c9db72c3d59ae4f93fd0bb5ec5df6da45297d2cf3e1c2548f7c86f9b4aeda39904d08475bace8e6c62697be8ab1ff14dd64b7b937188665da754bd47d6ae4c385a1090825ccbef09f2168e6afae0ce178211c31bbb56122fb9f62f61fb9963bd8104ef6b7e457a334fc2f493a31762a83640da5e12d7c5234da52df2d0ff2d982ac21f964ff124ebb50d4927c483fa55a0b5aea27fbab720923815f59a988b19639683faabbaf612307cdf5a97f2d4313dd194b20238d6917ca33924dd9ff445b6ef6b780bf75bf321b265c29b8b5281d5891f5b6e075613c6d0e31696b0edd5a54eddad783af07decdbbddda2276bbf29441168490e7e98432ccc2300cbd0f79a00ff47d08f495149f00319e20e3796534cce9022ec39069ce4f1319b4611545f81a69d3c7f2f288256df3f2dc641e6b1bcf6bb379b5f168577551fceae5100164e78e2c863ef45414953a74397469c83b6b9347cd976673657746f3a35d627967217969dabcb47655bf34cffb473523f2d27ce53f9277e62b9785ac30d2ecf631795e1ef5ad27f63704a4eda2d5878c4f1e6aa8f98a2f5f55c00ed0d7fc551a5a72b623eb50bf50a26aa019f4396806fd8efc91e7e7ef2b795a208f67edea95e4e1e6aeb42ea82dfbd88e65d8ef4778ddddddfdb8bea88b0c349f282c5ed4e50ce52e0dd04305d4a4d94b03f460016dd17cdaaf466d2b7455ff9319bb41ee7ec50e5dbcb0cb0a53114412ae401de79aab586f69dfcb76a5899bdca01b5f51613c2fc8f346cff33c553eed4df640372010080412d91150c174bbd764aba52b6ac927f79fd44437b9f1c684a0af8fae62fe24e96274de58927cae72fd73955d74c075b9b19ef114dde4ee17fd80be2815dd8890907b48ee5a8a98c8eef8cada6c17aff401042e5d69badd1a90aa9c31c0327e90c2a8b5fa09ee064b4ab36babd76ced3a2f4fdf32c63618a79fc82726c28af92bc5c3514349a614cb25589b33b29c32c3232545c63d05d6263e536279099a198f8c5f4c1109194f568c159bf9e3079d4491b589593cdad5283319cfd0304accaba79b499b989802500363dd9898526c29b7230cb9d5b224f32e5f5030965e120573ffe44f4a1fbc4bc4d834a858b13e592d70193f6862c54ca6ee59b17eb55832160dab8605c4878d15841563d1583f5836961563d5327e5397724be169d7e90296710a9176b51344528aa0c4f20e281da71f506abec27f7aea7249940e17282e9eba84a4184f56cc5f35329b8cc1320994980d3cd49c72ca3246a1c91803009771cb2663d6ac01d44526f5f75168fefa21e5e431ca4b5403506f5f07ea6df9c31130f7edff7093f1ebb08f7a54f9c32dc713e587945bff891163cacd575d9e283519bfbd7f52a2d058702cb99a62ab29b67ea96c526e29455272294ada45738ae0484b320e537019a7f4649ce293cf95fcb08cbf7a936e249e769d2c36d24ebbba0923906e2c3916db5982a1dc6e89d281fae1e4514f5d4e50787cb0254a87fdd4a7ca1f5c2e5845095c1d27250aaa44a959db057968e00cedea463ff677a0604e4eca91cfef70b12469e62b4c929180b837490a42aae1b409023de9c644926c4812109274d326eec720282ac1442598e869bf48375fe11f49b7f169936ee33749faf1c9f98c7efc8582b9249fd18faff0ef70c14f9f24dd7ad4d559b1aeb5533e2738f851bd8b40caf90bf5f8493efe4a3d7e127ed2ad5d26f169bf5268bec22f3e2904e39902246393efaf47ba479bac1aea3694f1e817d6ccbd18779de7e1be0f070a81b4d9ba01d98060188a228b864563cd288dd04c487c61c96678b4d9a34d5c436994066ed1bcb4686de2d66c0c3f20c6d18fe20b8b4669e0076180c120d3261e892f2c9a36bb8e356b13b3686d5252abd6a6d9a285d3266e0569d5dac4ad1a4e2b489bb875d32636994c4c58b066dac4cf427c61c9dac4ac18a5813faf1b68edc8efbb07b1f8d2d9166f70efe4795fbfafdf759f75b1de405b66ea2c03f455c357de7b9547a5a95d41b770d61074168869d3a3409bde531f85dedf1aee79dec9fb4eccf1df83b44721cddd9043d7753ec23779de9b5e497b55dff354b2378386bb0056237a00c1fa0320e0d421d488a0836a00ac35439cc8e533d3214ee0321de2c42dd3ff321de2044ea6439c0092cf4c8738e1042df70552505429d4898b530b1626a61269348a426208823eafc3d77a933e3a138095c7d8990a292207d505632cd3b799654a69986065a2891a040bf853186b08d61c8cf52d1d0d00a42aa788965d879afbff938d276816a33466b4c5e6d99bbb8223de0ab2bf2543364ac3c9274610ed17d13ac82ddb52dbfa4bb80756f75bc3e1a393dfa6256bf6f2f499bc2e7cd174917c5fd90fc993bd0ffa8aaa7f9f66fa3818ed975318cf5b739d52edc26ece58b1d66d673fb7d6ad97349b6c97474ac3fe986d484369d44775dd8b6a81765259b101cbb6661641cb274bb6f9ac912db565fb1df66b6fed3a439a5cdffeadb50ba75db58976f9db6a5024219fb7c80ae8e6f5f704087e408cf4a905da5c01a9ca124246aa522b2083910e3182483ec33cc4089c4c871801847e97e910238ec862a6438c78002cdf076b93a8307eeeeeee6195c9f74958be3eb479edf9d615521af74f97e1545bf7e9fdd4abf44bfcfb3356586ab4cbff3a6d175669f3f6e3e8ebeda1eeb135f9d0ab5b3b1083d17ebdc15f14e8d5fd9befe77202a843916f137250f33e481a80dea0e6fd93029caa0c366aebfebdff912b6ddef7489636ef3b59a3cd3ba3cdfba936efedc69e1783f15efa83619d10a85beba4a8d640aaa2f2bad202b1406c4c76796e919b4a7109a4b6988938924cc46527e570658b9947ca657f0fe7e53e9b0f882823e548b9163e4d00a9ca09432de307abb5d65a6ba9bbbb7b04b2674a65b0bc320f77f8b960bc7f8670ead30fe1846cd85a6cbdc77faa78f8f647fb6fc99104919eafac373b3f26323eaf8c06940f41c658e6af934caff0492663ec7de50e369fa1934c094669e06f32443a317664e80603475bfa710cd226e32e59394a037f1563f767ca26e357c9e0940d6d3165fca91bfc2a18fec761fca110e319e32663fcaadcc150f36ac07eb0c906b47f8eb2dd566bada5a9d0c981bcf3c97c329f109f109f109f109f10f448cd5a4a695cdbd8ddbb4e7cf91e8755543282fede2bda6002b62b811ff7d0925008e667e4b3f31a7d8f4fbb4ca020cbfe108085aeab868a53a1f8b92d5b14e3c99a594bd23c2241f214cb1cae4d0e1f83bcef05a3bd3418fb495ffa3c7a2fcf5b634909fce068d07e0c2d66b644ad185f1cb59858bbecaca65de2cf62665c3431b4981eedb2658caccd181e6dda1a4313438b898572f82fd4d7f33e30dfc03511cfff86911bad9a2abe7c113560ff12f7de7b2fc6175f7cf147c2c01481c1c1d8ae18c33f692d876b032251fd61d9b269d3c52ec7cee2f003028b2fe04f9bce5a921d08fcc1603c59331f503a4a4f7a52f903aabff4265f7aea3222f980d231fa01d5a50f163f7ad38f9eba904c4816248cad63f0a7f52b0e1275800acb5d61b9cb9a3b9b4c317ade389e4ea09f3f413f1e763de3498fcc483fea2e0b1284750cfe26b1ec6f22650e6817d04f13e38ce232e947a28ed17f56184bedea9f5c8be1d12f1cbdf2bff5b0dd995b03ae0b06c268ffbc3e264818cf96edda684bfb2b86a657fe8a89f5ca7f87466486230b120302fb91bde5938dcca8115991ec4f77765a43a80b6608359dba608850330aa7fe11d8791f080cad37c478823630d026fb0f318296807ef08bf6ebad24ce2392e81ba2b32191574657f4d2e8ea06414d2ae80cd815e6067a9b0561a09f162824e2966db56cad96adb56405b62213f35666b2bfc5606972f34c6e2191a8d5b2b58874d9bac228866e5071036722b16661bdb476830a102b086b36b266a00c2b48f6c760486405e99a9b76e1b74fb3a948f6196d93c5935933168ec8229259b7eca00c6b8745d32ecafac1b26101f13102fdf86b54c6ccf4092efb77a27b8283b1d1169cfd2740a32de1e84935af1fecf2ac36a471145f5499bec3d8ee15c21b8206b9ff3c85c45bde18a5d1658ccc3e6b56cb8192c31297bff2cce1c6f22d5934d64cc878a6e45aee50ed894a410333578baa31b5bea15e424fb9cac45c1a1ed96978c28f88b49eec093f994563d9b066a09f2ad6f048c9086bd789ff04fd4c31daef4b7616c91c403fa0253770bdf207f3e360bca11b0a7deece0fe85e91d583f563c6a209c912c8d87e8a99e9957fc89aa5f8e0cfa6f8647f9b71145f44f776e313e3f8a311c61b3e377027add5684bb53eb4c52447998120231e36d0ae7e99d420636f22c82f992fe7093eb2bf056268d9ff867699e440c1866f6cda75d22341b2fbb780b4ab4281337093812036fcb158001259b250f437f13489030b63e8e62fd2bb11a8e91f92389348927aa972c2e10218ff1b387fb56a7ae5ad9a1bb821634dee445df7fead9a76fdf007d5680b28f7ce130d63a33046a0af98980b8a973ec178b2669e07b68cd0b279a0181c4f6b7f7afeca1daa7762508cc1c1000bb40b7f0e8cb509ceb4e9fe202641589b3e430d0ab05d82728f62624e63019dc9fd1e44f644498c60aba74b7307e3e9392c77a823e8a7d5339e23ddc19d2bb93691db0e8f2d826b1969e57c949e661fa4f76ff5b47c5a4a5a3fad25ed1257602b322bb176d9d2c7e8fd5766da85ea129469d31fb4e42766a67bf50303d69176bc3218b091b6eba44c22946424fde8362a513a4c3ffa51f943e94d4f5d4a3cfe42c18c7c2095281da4377993f287d1939eba8c7e874b1de92895a0a9046ba31109977319182c86cb91bc5677c5f0f117e9eb833ffe1a7ded96e51acee46aed0c0f189bd7401f5fd52f95600d05537ad39b4a1f7e72fd5249bb3c415b8ccc571e13f3953f782f8c8d3503afed59bbce968d45e32d5bbb6c26d0c4447c196be84fe2cbf739f0778b8d0dfd2577a8fe227982b11caecb42641163af98b8498bfb63ec9237faea1a3176971806c272f561a44388d023d3213ab701643a448726bb58a2db7677c7c46a15296969aeb59489246d539ca14666d4084da64668d96362359fb436036db1d94568fabb105f6266da6491cd4cbfec418c1a39f91331260ea42a67db64fca0fb06fcd5e2b1c9872c1e6ce1cfc2c4bdd6f0579a203819bf0d8dc62fbdedbef30678e8c82a9634745fbfab81e6eeeb06786857e8f1d729f09f8efc15196f21e3af9e773a61b17bb0234b241dfd74cab824be93d55a5c3d532d65cb8e1f44415fef9d612a954aa5b2879a4de5d97dc5a1fb90bdb71bfb497a339637e5cd0d786386d4f49b1fc130acb2ecddf82e7621599bf8861810e3105983b4596bbdc2ffa713f61b208c2b5fffbe3d2b4e26635c4bfcb5a72ae91fedaa0cf0554e2ceda9c7d83495e59bf54cee6a50d37fc7666623fbe3d088d464c71f8a6247d66001bb2ed7aeb3dedce0af41f057fc15d79e8c1ff442ff6aa45dde63fcee892f9d571c6da119bb888a4a1468139f3593be8a3eaa37b87a532448bb4eea53c391d9da75561e387f6dc057f83d8c49a491f461f2a28ae3a166b18c916dc0df7b5c520f3f053ed232a06d448dd2059082351ccf13ed0c7e0e1d38007d9de80909a614e09f748a0c3ef540251904bbae92ddff2892694fa6428cf0c96015bdd2ebc893255796ebb52fbddedbec95270872d726187a239310238ae4d34606ffbe0dd0f5e0d7f0e729f44aafec5306bf69d9957e25fdbe06dae2197c0578a97675e59fba072bcc0bb57c55219493db2dbefc835515423195a739bee7aaf2f46e406ecbf7cf93b35bdcc65f32fe7ec7fc25a3bcb8d35bfd399ea75589c3f9aa529a55ae7a1053d35fabd397566425eb10296accc6e9c24ad6ec36fe32316cc7c5f5eafe0d99be7c91eaeba83e4efda394e7e95565097608c7f27df08508542ad5ab7adabc285f49154a49437dd5ab4a1b7a1c1eaa535057f9f7cf2b857c8fa4febc4850f76221df2d841e47e36819a4cc11aa2fc1bbc8403dca871e0485d447639b2fa8f5c2d1744abdcac5229b428db067dba45de843dd335228140a55aabec441f5a66a7b6abda14da1462a1377a3e99452e9c2173752b3e7a0a20a85423ffa8af2a1b2879a556f3a8db4791dd72e557986cafb5e0474bfc2789a25697a10c556946a226b50b3bec8a65023950c92d2187c982f838cbd8be9b9366fada053536983a66c999ae6699294ae3c51013bb2eaa9aaa46d863ef426b2469bf5592c154b25e3697315a2839e7c73399b5c95681715a20323f9bc3d55c5a22a7d87d66bbd290ebdcda1f204411685507f71e5a92ccb0f912fa872a5cd50e93b6d5e93371a9f0ad1c1127cfa4e4fbb4e5349bb4e37f2e3d32e6b964ef9c58f481f32bebc381e6a4629bd88e92f1bf3d5fd52798ef74966965196bed3aed3c23a76ff741a4733df8ea94ada8dc2365fbc7fa5dd686cf3561f3260ee79e3783afd9be60b9286023f545f71a8f29aea698faa577de855af52bd6d17caab9e8a2f2a1c8d42be10c2ab2ff365bce7fc6596600836be8b2fff6e536548fd7d4782b6d4bfef4950d78bbf5e36195b50fe3c6593a7aa37f917a45353f52992d296ea5152b2ea4d52f53248d55732ab501e47a3c813f529182a15213b5092455f9f48aeff19148d3162c4888161c0f8182a2a38354251a95436885e55f650334a79d60fe1902abf763cdaf5e2ef77b37ec9f8fb2dfee28ce44a3245ca58fdb4793f065997c0201b36de911d816981b044d09a7d41be7fd6b02ac8f7cf150bb322b0b054cac2527fa61ef659c5aa7ceafdc50b1569db54bdea6b0e7db6300bb33228256d53559e398419a543cda1efc1e6fa3a889e7c1b445fcb1e2a0da11f1f47b3f8db737ddaa552c2e3ab5ba6c8ea5395b4f9ed0a9567ea43a2bf0f922e0d3894cf43cd2f3e559649461c5d928e7b417a11122c5353c6eacf2f5f2aa879ff84f96b555e2ad0d5fdfb8599a90559965126c9f73ea5325c5c6ddd3f3b0a16a77acf53bdea737cae3654394ae8cb24e379e2c9a11287d0f350b3e871701e6af6226ddea7f7a6fe05597bdabca73f3b86c3060a5983c7db55f2d07073aa34dbbc2a0bcbf9eafee8699f5e1e959ef49e33fd6dd3a73c97efe3701599f224793a6b3ec928e5c5856063fd94173fac39d7ae94bf7f7bda555d9cb28ba7ede2492b43da589b1724e2fce536bebaefa194a73786ca73545d5c4a69616ddeefdefbd3c28ed4af36a85ef5b876a1186957cd613101aaaf291415697ba839559ea8f71c45d27c42d2ec82c49dc893e2b020cf9309b94367224f5b224f533e2fce34224f9b4f0bcbf74792879a45e5e986e4ca1d3f9b0ebf8949b32bdb85b602191274bfbef066baa56e2a33a85d725e993b93a9ede997c5ddfcf5fd7c3fdfcfed76fb7e6edf12100fd0cc0e4826f73bcfb7a45ddf9f2058ea5479727d6fe7e4799ffd75651eeed459dc69715d04917cfff3901d5b767be2b160f4cab3debe1f5ff58360e3f773fa7e9e7e3ffeb2b85ef5dfff3f9dc611678dd8255689cdf6e47e6c8db4ab9e3667828d1d915cdfdab2783f7f48e0daf452309ef6b438cb0327579a7f861b666c76ea0f4dad8dc47edc5cc9cc06a12ddd890758e5fbb66b7a5dddbb8d19e6e5d166bfca2975594069f49f5da61ff6ebcea80c5708daf25430f2084da3ca95dd9b36cd7eaf03fdce89c848713c1b993e4bcbda7567bcca29355e1e7dfad1655f1e271364321d2285927c7e3f52d8ee83b7563fbdbfaeac57fd9e378ea7d35f599985f17bb0b97b1d44b92b6df0efca1e6ac6e1febd69b0afadb46f08447331b35cf880a0d4d22ccd921f9e1d20362ef3999e9c0da747d31ab6a408cf0d101e55e69303911a542aad7e83005296d1fbeea3c0653a240a990c43a643767832280ae98bd2ae5eafa4d7c930daaf3965fab6a577b2dcf65362acb90a04f971a3c9dfdb07ef155fbaffbc8bafcdadf9abf6f4aacdf7aa929a731c5bbf2ecd71daf5798ee338ee2e721d597f9b6fae363dfdba40ae4d7ffdca6be344dab4715b9b5d6d4e8ed3e67dc7b9f1f941eebf403a1bbeb7361748bb6e5a4cc0d7919f257ba8d92b4fda66d8665752dbc9ba2ac0cf06042bb5f762dc759ef755f2c70ba80604c350a494d24a86dca9534a69a52fa22faae46974c4414a326b254df44d5ec092c96462c20274c547abcd48851811247fffd9abb4c25c9ca35c69a02aa8540c1737452b19a21101000020004315003030140c874463f1789c4679327e14000d77a4466c5a1d0ba320876114c518640c4186016000014306066a46a300c1013f703f84e0e822866134805a21eee75a26a8e73548ff2085b405cd77af8b1592afddd243774074684b736e469374d749dd755461c283b49b928efde4984e61d5a4b76b4d63a3067c7d1b42e1484201ce981e24e47ac0461b05a7dff4df46399c330e68f6051bb0dbf8f4d5781de45367390c53379a50a0c0daec326b467077c7223f3f24cc3562ba5957142ac19d66eafeca2f26276eae8b98341412cc637e8d045b9f1d52d858a4137c3dc5e7ad489c6687ee0fbc1906abc51be8022bb00ea9a39ab5863202fa138dedc5abc98574422ecbbf02124af406a167a217908ff70b4797f3269c731a03ec29f39404bfa0fffc232a862d6104f297959379ff00358de6917dc88788682469a65ecc920b90eafa956c6f53265c8cf632bb79ae3b4248b38648a01cba0e87bef69e7663c5082f97c838e94e2171ec9c00ec8c110736ae974cf3cdde38753bdd25a78505557d6eab652f7b65a93cc63477b5ae111f731a171139460629605d4d090aaed20d074bbcd2b67a0aa1e7b97cd3722d4ed08fe98d4617ce72726c5d00eb4f6c09408fe383146aa0e26cd5864b503d78817077e2adf0b0d4d3c582e9fc95d25ab444a77db8db93671163d3d4e38f0a8e2f7488a1b4d1b30016cf040cbdab54c80a71ec55ce0fad64c8e14aa10e78a186b42a13016e290ef4c51251e8f01842a6322789215a7fc32e9320d5b17172b695fed3fd2e4c66793bfbc12a9940cbc274bb16ad950999e83e7197b87e56354b4e6b12aedd5fae3e93b3518b45390a6d9fe4fabdd28a5da0423a3171239ba59bc058a1158384a797eef6938a496ebcdb68394468db35784b40948c17b7e7f864ac856e00c3757204222bf51084b5c7ada967881392842098be017111f77783b8ee4f3869889b2629b7d9af01bb5b3835f18e46a02dc79700d002fcaeff263e3b35cfca1371b61a6e2ad5c806840bd7e6bd9d6cc162337b20ca82893554d1b92f86b32ed28af24c0a314095c465207fec750ee8def200e84f37a1695b64b8f23319e80250879d829613e9dc9f19c2b8b10f3d9fa8189010cb47cb512a5d3b35e4dc58c1d7f8e00a315b6589d1351d42ed54edc6933c7011e649b00bcd6648f74e1829a6b22ac51608f29b17e1583398fbc4de86899ce0b7f62c58c8acb7a85edb56a6fe9326a63ee03c0e3752c60e8cf32dac717859506e56ee3d71c6420855b5a109d2874f0e5ff8547ba330b667ba4d7c4572fda6f36447f7532bc8295a54ce133e0f7dce726219b613ac6ca166afc00b4e4b14a152a144bd69e6ff0528de7f07e8d88f3afd6118ef57c0c11bccc039ceaaa64d5421abc00a808ea0b86d781f85ca3b2281417d2b607e66d765e698b660810be671c62626ea11a3303629d32e5c352bc07e2e821da3c2c571a4c72c8a084a63988ce6f4017adde41430f3a10117f493f0b5228485133086e44a5380938fa9da830c2a40b4a4a639cbed8e2dba39cdc0058600d266d90d33f8eac5d143e6a2b548053ded274095774ccc9425de6a01c605bab4af2be5621794b603f2e1a5cd6b6a3e2edb0ee0c4f3491c335befd4ac1f748b15078859cb5cc5e122eb96185c66602ece5c90b7c07e2ef31668923f83a36095ab6c7beb61922ae6e67f2e8155acd7684d32012c0a5ba58d1d70051f3cd43cd1a366429a71365323d97c404813b000437f0204e88b84b398e89b0681150a2c25d31b5d09707d232fdc7a82b8cf1dafff0bab0cb0d5abbdbe048dc62807be6293c7cafdce843c576d1b62a143e269250fff900be253bb5cdf50b1d06a2beca74fafd6e9ff2f7eb92a177009850df13880039f1d324057defa280bb4e53b9462b979cfb61b4cad9e577a48ca6fd553e7a2360d48db4aab6d9a765af9cca73359b1c6863e699b66ca6a880f216091c8f7100ba081d969d96cb568e47506177802b2285e92e8383254866a147f18caab8d518dda9fd20d3feda5a8b8d680cc3ee068e6fc582a67892d214eafd4db3c58d59c00086a42a8d07eab4f4f9d4d432d3f4e2cbdbf5647e9cab7111a7471634b1dbc794cd3eb16f5c9a033e7e528e4d83cd18fcf125617ce7aa417ee2ff06620e177b277155e01baf5c2d1a4d2a8856803d0abe1d4d40528e57f88e0253a004aa5be9b01d800821b06354a97dbd7f469a6a660c517c2dd3cd344139fca319775d55dca1f593aff461c0c1a523394a6b8394b4cd52aa73a2f395fca0b2a4bc6597479f2cd3b2429f7f0d04e8430bebc76ada3ab4b16d678f3632811938d1c92a38659a2633c40361f1328150385a49f14116e146c62bc5261a1f7d61d5b59d3c231dd693723b680e2438278eaa77c60c1e5272cfe5c5821c1153a61a13843ab0f766f65221c527e18c6eb618b7e20721816a05d78025955e7dd56e51e64c712892d0d66705bfac18ccd43991ad1e2ff49023ce104f4c21e453e706fe4bea91d879b006e88741ab28632f8b721cea05856b1b3a16855cd9b12d8c7b8e68e875087d0fe905797c93b76f99c0e29b26409a180b4252749686a244200eb8feacf12dadea158248ac6c50c81feac4a4042c12e245a1fa5da253a7f4fb8a45d7557be946ec19a6945343f9cee623d82a05b5a654b511d424492ba936fda1c99e9abf221bc08116171b946b2c30239e15bd14db01132344142e3b99188e24d5d63f552559cd06961a967305562f138b4e8c692d95a0c46d0df55f80f59159a003546d210a09b80624231c339ecaeb270f326ff69e60cf7103cd51ad9677f9eea347f49d0b9cfba566e0d3211e62c0bd92ee9e6cf3cdfcdcdf1aae9ca5f04f9d425e0a4708768b76925b89cc73fd4bad35d99d8b99a9a98318a8c65b3b97eae945ddabc6ec222ca4fe93e04bd5289b7c3bb2b69132a86f8821c7ea92b7172cab1226e88dff9ccdc48e452415ab7a044dcf6d8735fcb93424dcb6ccf9ac61b5d3696b01259690fdac4f7b3e622c35974d10fcde53d0244fe91648b2dd242efd6d374fe5c64a920a74350222c0bd40e401b225a873a376d292bb21d3d31156e9cd74a0477111c89581290c41f53171d764e28542338049aced2f80e2167d1abbde3a4dc504d5876662436b395eed92245a60109b483bf6d5d0422aa9c66d03f079c56cb499155145a0645671253050f2fb5073aa57e8d96b8cc0cd2252ba738f2ee23fc09b11b9dbf77238a14893e7157486d09a82575f857de959be8fa14cef1f924dd485b6f2018908915e52a3d5bf33998fa1c100a7871840f6ea179e5e71ff1ecbd3b2ecbfc13c43840d3b034964b7c3d518b30b44135ff93685b7e56aed65f4556cbea164f217d859c9c1b0279ac7c21f8fb40d74d088ad17800d9add1b705c5afba59cb17e4c63af74567c84bfe19fee92c582071d39d22f9a8a0cc8d106b112f92fc25e729d427bc216772b9d16ef294f4c6470c798c5548e1ea41cc6ba340061fcdec2259466529659946fcfa1f9b80d37c5c6921e0502d45703907354aec4239ee9cb7ae68591c174030aa5016c2da5e35e3a0918b7613cdea007269a24915606a0b030c6411421e2beef68b1460a2b889740c7e08e14197aa95bcf38b4e5b46872901a08ec4a64ac552bd9f83808c2c18d398d2a9736e3925c3268b94645d35a6eb53db7f2316dd2f81d4badf72692d1d3e57da050ba7a1db33da2c7b9dcaf346f9c927bef41b8e7362af4b091db3d67f169978f51f3d296a439a2818269d485e26785acd203041eebb78ea85be6f4d31fa30a2bd36886dd06045ecd97a5843ce8bebb001dadaf478b08ba29d0c894f9ef89d097417af0c65410084ee17e16d1b74a4060a314ab7ee9548ef6de32a0b189bc699c04a67f5fa166940cfebc45b1677a675290ca4a04d8a8876506c81601b124d0a0a76b7e666c7858353ef1b08b3136378eb002554a87bb0077508e29213060e302a941f195843c6790cdafef41658b307b7f2d5a98160de1557572f2503bbf0a821b259808bbe9612e6a2f90a1756e67b25fa9578ded20ca8ce9f272ee63feeaa1d55e8b22fb323c6c45d0f3b1e8cd9de9327ced98d8b8325e0c62cef141be16b962a714a0c7f11b131972f0525f421a38cf07b0fb67b92ee92b20d329844681df1d3a8e597d6f9a55faf477412865893761c91fdbf23ed2c52d27b40e088f2dc061206d6836cc416ac222b867c6d5e34f174919ab888c5ef0bb86fd99c6c1c67ee3841ef8a51a9a22b0d8304186e5d4e5706d7c679795bb2b57c44418555309515e07a67e50a0334dfab608a0c3b28005cafa229d546eba97f01b13dbaf94329bb86943335228243d02d555c36b2f4c2eff0dce0508e4082eb361185e613ec082b21b10322a6c81ced504323dbfe479b1b5cedb639570d083063eeda3a0b17e65f33327a18b4ab8ab35a3c622bcd957abc993ac8b2a40e4ea0d513f72df537fb6351d706405095d5e73c886f1cdf5030cc9e2ea23b6c0f042f7edc30facd95729e4abd91c4cb1066dddc934346ed0985c4bae5ee90139c6c30e7d54003dcbcad2850b39714b3d785478583e6c3c8f931e002287f1727f1cbf2145fbbb66541ba157b5a7b420e6fea876df5b08d4bab9f67265160a084f44d900ede2611412247516f92a6666b5fc85b60df82c061428177cc8382fd90389b42f76b2daf82f6660882a21aed63084cc7619d6f7c13183acbe52d333f0750f22d7b66ae62aaf1cce18a976ff26822d6a13080d487f5ee0471c8107b446bb37187e02cd5ab620e65f0a23a77abdb84e6a99ee998f0a260c3f044702872e55e3a022c7afa0275ac1c0d2aa3ae319181900efa5373f7ebcfbe864b1f2abe058276a3ef4109031a28c2de7c2df92da00fa16c0be57e4f6a0ab0146d775402c241c32c2c91151781e97816ebaacf3eac693bd874d98af24797c0d38ff8ecd1da6a68ae31a48a56cd5fb39b5b5f4b89439138ec23eedec1cb81156656b303f174a52ba798dfbcbae6768c694326a0e1a318b70bee468d5095fdc60918d1de6b68f2aa40700f2006661e0df4e302679ce3557e59d88d506fb3ab1af9c6d4e88daced3630809ee986f446a17427288f658e1584abff74255a3f2890cac6402c59152fd668a8456ee4356a08fea06db84a40b95d6493ed070bda8380fda9e5209f5b177873b856849f284f49cda4748309a5afd700da4e8d351aa32a5f5d376e2925633523502b20b841160ffa7d4b8cb0b3e2db62deb02057c95bfb88998a77b191a9c69778fe73c52b8a3f0a68b6010e8c4921e0d6bac5325851e80323b95b353fae143a4503816bd30233442261f021b31bedc964bee18d6831bbb8485884c8e0e0678f33ad1fcd5083cfa12a6ade8fd6752cd5c3747a755add21adf98e95ee766351d208accb075c4a89d62e5401adfa4e64190d77f27ef327ea4ac79f2eb78d967ffbc134c985ae79a600dd8443dd9a2dada96a40689709a3b0ac1680f9b61a055ce096bffecdf06d617aede3c08958bf72e89bc4d35603d7e7812b66c8d6e84ef79a63ded2e33607b3a033b34ff3fda8f3bf746b0b5f38f3453af43c9cc39a3dc88d812f66c3597b5315820a741d3b6cee179fe8d85d591f15dac4c44f8bf23090b789fe5ed50e2a5058575f2752cf16fb6cd236e052640afd92351402d67e3c267b385840bf78616c1132c670b0630b40bc3367eac1a379a9de75e7622cf3669b09e02aa12bdecdd48df99ea8bbfa312339afce1b0af0d77466aec1206b6baf0ee01f2f76013a6e61609c02693523d279efedbebf2388b23681bccfc4e15b7d9ec01f99ca36b93c43ca59c31b79d60a47daea7cd395759f5bb4e4303d8cac3d498e4e329bfda0def0a22a1e7700914e9a3817aa582d0c93bb799c79b24482f59c371cf8d247f6ec90097cfd7b8602f15886333e3fc1b9f5931bcd5435ebf7e28fb64659a3b2ce497f540a6b8a186ed974e9edb02d12752dcb99135194ce38470c66b99faf10543ce78a5f24b08db06fc5d0a554875e266c3f196b39689ac976f1fc633d13d6e8407c55c045873c6050484835e9af85bc671f9330796130c3b59b89c44ddebef2a7d03e9013452362fe9e817cf72fa5532fc12ccc41cc6cfa6508dc393119b2905f467f6d64a9de24ab682f8009ef8732908d78260ddc30a879376de76687b0b88721bb0acbbf400997c0018301b6e1e664d8094085b4e027bb30038426d613e5a0b119856de7532fc4de997e0b3baae76d6d669bb5a7da22c132b24648f982786bcb02aa3aef2022aac7ae1e8ef7075e5a3003b80ac308ec13b08c228f8fe18f4c9b7d36511731062fe3f896feb53c0b7d3add09d1459fc53da75c65e620bbd8db48d54eba37363e7394f558cc5b274b2f1147dbf43bb4678045fd50568abe9225ddea2d20c4fed781d836498427bbc47ae966694f0492238f92db9d91b15768351ab3847d53a559a8df51ab1893e355c6e34c5f233e2dafd9ef9c4448ff51c95f01a79608dab976ce780ad0c7ddd1e4f15d406c418b89381be0b61b592ba9f9a8e84f1ace00fcc5488dc4e46805f003fd451f5ad5d1ba8657e0330876bea4f7aea3658194a05ccece7660453162fdf796215a22ec61a3709c4850080b22a1d2cb9f020d0437283d16308738496e92034460f535b45bd094dcac45d204189b17333de5566801d372fe5fe0740db641bad67e7afc67782955deccf4860bcceafde08a0d4dfce904a3937735fae6c1dcb8c486f271646966bd8bfc18e86130215ebcd9861ebfdbe6fe3b167e0b6f654fb51b0d76aba1ee35a0ab0676d1e82e34d8ad06bad798ae1aec46e3ddd1b09b1a745d03dd6b743afc50ff1eb9be1a9a2f72a93b73f1e4e189db62d6747d152cabc31dcbbf4675d75a8956c9e0b47ea63fe91f9d8990ee76e90eb3e90d5a7213d68087aa5286e45c1f002a4db719c1b1bae20ab90eabdeb21043159a276cfc48102d2d28a76693f96a2d81699011b305218acb267dca13d8dd16ad08e82c9f93b03a14e0b90c1abe8d434c59d7d2f8c9ed15d5010ecefdde81d063403903422cc71fe46dbab3b01751e1f5ba39f21a7c70c5cbda827e3f2b2d167df0cb748063268121250eb670b4a9cae55d22158e4d861c426a2e0646ae3fab058e57320fa7ace692857fe458e111566d9359c1c3d4303e3e4080ddf3ba2294ce56df476032a1620a36b0c2ab3eac5e09c2841efb2a0e3cb0e266a428948b7028ce82eb85e1989c1be7ea23dce10e017a69f6c6ade384d1d15ebe3846881b86bb60867d52cd4230cfca82f2f08a28e5a415c6edf13489af1200a3559827f1daa66065b9aefce310c52d64d2136a317dbc9b87a9023379b3b83141bd9beae4ca890542ec99015800384e2a59400f97b144a40a53ebf465e6918ccc4bc72df75ee5bdcabf4310ba53704acd96e0e753d81ddea8708296c92ebe89e6acef76f921141cf08a5ee2f0f1bee68abcd38228c121f921bdfe28663e956862da0dbe4cab27440e2d1b8959462c77aa0e3877b5d90235350502b852901c4831ecf11699f96b4012dfb2a7febb3899ae6802b6dad400feafa4ae1e5d2b3ab62058de237ba88e93360e7b7f16ea95f6712a55bed32658e2137ee77df3026a2ce926a122546030b1cd267019e0a168bef9cf66b0effc7b5f1d2d2d6b315cf005ae27c67f720fdc0beb01e404d47e5d62068b44d4008e00b2dc0310c6314a186cb7ae5dc392516c51f424e958f4ddc8ce791265d212e2fb630bea3a8d780c650eb604a4f1115c292815b6ec6f1619990405d71cc9bc3080f4ec07a6693ac85a441c6bb9ac3d7cd67f473f97bc2f7fef0986902adf853243a15aa80c9a8aa31c67a8de130ef0948be991892eef7ec8a19df2859005da6b7168fd02f04498727b6c1a02e966a22fe240995a3b6a0028b223f50c179418d0ce62d71376fe555c716446b3440cfeaf137a962b118e71712285ae780589a00872320a905832f9ac72fa72eb98591e1852e88c2e33a4f8b2703dde726514bdae84478482103570b7e63d7c7afe65b10ff7cf504fd0c97c7050b943d8ed92e6ef98c6501fa5d97b6eb8741dcfa59acbdde4539c0c23a8b8f60b4343e8f3c6f674e491216c7477ef33f9c9cba29f466cc71bbbdbd5fe63a1e6986a48a58d07edaa34fd1ac556d5f42dc5542d2fb408eb9ddf009a5dc64a98fedb9a35140a27c02260270b102bd8342bd50d67df620c7f51cfad3622419365eefab5197e9119ed59cd8ce38aa8f971afe7754749dad78c5ac4039f566ef6b51056033a38bf45a95d84ca3cf4ddcf215752036508d76abc0f7dd21c615c9406485422141fba7ccf22e84d29c990c0ae03eee589f06471f4db33696218b1ecced4b9bd08b3962321ba544e851409611412bab32190fa41b11486c1a32563b9c3eec93247c7231e70fe4ef1d348ec7ab550f4598692797d23d540deea09a134c6a78b32307033f4879a20e4870a6f156dcc3ed002a378425aed45311b3c24deeab6066fcd1e7bd1e90d007a373acc3ba3d98677e1e21ae8aa14db4f2ffc8eb49df882c0524940e3a0962e07e8d62f08f2ec9e4d0a69d7afe3b5c5dd59afefac869d30dc987102a5debaec98cdd00e05827a571f104f8c4ecfda75a77f4b0a2dac8b26608662660750b5dfb29fdb33200ed3352d74e843e7adc01905c77803f23bb83408d5767848adeccd6cdde8c35a6b30ce38f428f1160c0c183ea4363d890eb5a516e24bcd411727bad8b62a2e088d104253a0497db332a8564131207c16a37305406fa552b7f9b8196aeebc43b9c785727709ac3502338b502748fc17d237734e79d1ebe8766229d6f2773c5ad9263d81347789a5a324f968b5f0735817838723fe6443ec99ee7d98a2166bd38d1a1f5b7d54f15cc6d243cbd9578458933503fda85676547d74c6f2aa8bc7a34f51f67767cd31d756d3701b7247b50af0b1cd2b887ec60e0ea708033f29fe0a908845a2337ec77f46b4d1328264377fc03c77854270ed70b62a5c413ac8ba017be8d038cb8944aba2a640856e1bb9e24427482efd7235058712e730dcf5de90865044bbc24ce70494f3874ca76d81f952da0539252ab0bc1c449abb20f158ed9540247aac651132f073ae889a148d4d4560132fd5f1737fd986a0ccaf09c1448303839919c951b7a199cc9f940e088548d91efa509df3152dd2a6e530cc7015be7bdc3922c245cf63a39ad1aff9762b4a87b871856f1f6ef3ada1a0d4d4410e28b449db25bcdc1d3178caa25f90a99d45a15a9ed7b6ebedb84e5048034f3897b0235a52d0490d65d2b1a3f1464175263bcb811adcbb74bc428435228926bcdbe49140ab0245b85860216afe7a60d12bcccc9b0a5f486c11845daa80ad216e262756430cc9ab04ceb11b44c27f8df64b95d334ea1a617c8815c34309f11cb2228cd16b0e16aa90159e1cd36318545aec10919eb9876ceb5d8dbfd2dbc3f74a64332d2d9a6fd9e8a4146f3b9437ad1e82b8ebd940d3139955e421bc8a9c6b73ce48a327be6e0596efccb7c6780953be5be78e7fee845660a7ed756dc6dc6d5705bac8fd295e2c64212ebce5aad425bb78bc5e4c96fbbee81db3d8881b02b4714d6e01cda300bacb7d6a051a36afc0f7d1b7fe47227220e8cf15b2b7525c007552dcb9edaca8b54d49351f562de6d0c777d9e9299c61150014065417be045ad37498a074665e653ecfe02d0053f6e88417b8f26cbf24497e89deceb2e5e1b5ff36122fd2dfe560321b1c41517949f8c8a9ef6ac8f0f0da619d5eb198ee6e4b86a7618888dbe75619f74e7bea413e093a9ff39b1be7c11d7835ef18c3ff25c9750833ac98759517273246dd40f15f1c58b2d7669d22148b4e96d84579758e7457c3a63e6f6f6dd23c5f632abfaf410cf240c5538d0c73a71c983ad642fca1dcc69b2c6f71e26137892417aedd639ed920d0d50d3c62da7839408a449f50fdf3f523db285adde358465f4f347100da4aad1fa38a7c9dcfa4b5b3688e93a21d5731d030a5b71d8d1b142032d49e28f0f76f4b3e9f42aa10e3c16046d53720c70b38ff9728f74a8c2f74f29b824745ffd0b7d00bf20c2773640834820945261c3c0c8bacb64f940527389791273d6927a9c1670eaee51ab6e10f44f017dd4e528535968f6576c8bc44983c5ef1709bb04225ea4cbf746102033bb4755dcc0323159253acf785bb03f8a3022c0e183170a8469410b078696607872eeffd3143a7f73ccebb89bb10d291fa12485edde3657aad8f6dc6e66b190a6898ceab08767c67f49e00d67180f02b5af022d2f0100236a3be48d4ede85d744f3ddaa2d7f93d3e641ef5cc24c6166d73ca09c0ba939726704ce71eb6223aabb5be69999bd8b1490625afa1774d1d784682c5bbebb20092358b7283ca90b89434565565c858393166c1f5e78ab555dec3353c54992a34c6bc859b10b720a3f4d12d76b8c34a814d3d2f6f51d730f0ed46a553a3559c841a2b9caccf27876b83adcbc6ad023dbefc7e749fd48a8566489f47e9c1e2ff08043646b583127cc5cd0850d831c609bc9b19f3d8f5a25de62c95b5c2ff9023963da64cd845073fef23624ddebb4a7c29e8190f411fa07dee8c6c51c275e9caf2518e3ac15eb2958cb5a7aab9e5ee98d03f543a84b253afcad42529a24b3a96ec2881ac57c6b28902fe56350ae3c2fe58eeb7847bd8aa6bb90fdb63014f780f283ceca4279c580b1cee1913b02f8ed841c7905bae989c3cfb624ef311d0e16d389bc480b1f60d3cb6f231f012d354807b90b08ee8c99ddbfd36e050335b75998bec8bbb2f8ba46fb34c6f380cd36b3febe0c6341da6fbab8bb24436055126af2d955df8c3e7a62e103a0d44a9e2d119271d8bc8edc5186bfac30f86ffacc478d380f87f0464297941d9c38169f9a0a4ad8e94c2782cdf56cbadf2638ab7ab35a76341132cdc7409b73db977d0153e084bdefc58a0d9135bd7ffffc37010e4a99789fb1b42cbc1a1a9404b763f2070d8e2eef9a270f1b42f881c952085656e54c47d1bc66a691903c751b641170941bbaf96d519db42a302533877abc535a6ab4f0e2d802c88b7dbf68f643aa08177bc4ef526fdf593532eb722a32f8b92aedd69ab0514f12958849355bf167edf08da696458cfbdb94a929b986fa4e0d31b4bfdde71136017824cfc56ae889b69cfa423636227b19d1a43c8bc3be9d22eca700eda768b4e728de67154943de3c1902029fa7a4d0613fab04ac89658b27554a0556d28b0cdac2319b8e20b0b1b2bac5822dae8eb4a3c4b74bb215542434fdde22dc6e96b8bb6ab38a3f90053529172447f0ed24e007ca32a53d05351faa3fc7aa6830ba4b87216913a15a339939f2e6521cb65ed68f4b6205155644e042e8703bdadeb73c34606b61de9d7710e02b496d4e858a656b84c9903e20a9e0c4d3bc89d9bcc006dcd63ad9e89794bce132e8f6aa60c6d4824625606ebcfeba8f6aa3ffbc7750c6b0eb566245954fa64d7bf3d4226dc6849665c1cf8775c90d7917be93801bc9d7833f1c14c98b90bca0c3243e4da912c234a4308d0c656a4fdf007d902ba280c3d7098c618d1dc2784ea9bbdbd86ba00fc7e19d26017e8584d02a48dc3dd61b4b603c0e9affb06ce2b758fbe1c843d9a0f6c3eb70d85dabf6847912d5d21608bd638f83e13135dc51cdc0f04ad9c995eb61817b93e8e78d63519f2c121cf2c8c7174cced1da201c5608d4535c87abeb140248495137a4c2c69953a12cd21a63aa8313ad8f8b4b6a70f69c2f8f9f3f71b1610ffe3324d65f94c5fdc8f21fa7f36e60b2155a0fa4228eb0270eeb2af25ab46720f9438e9744053836b5f7d0c27c9d8305de89610f18d9f925582d30d54ba49d706a17b95c7ac20523430cc55bedebdfec47d4572b30912aebbaae0ecd58fb2e46efdd5c9c604731b42c632e617a3bb495ce7dbd84f9bef04bf7511f1495bf3b9ed04223d9e0a460f8840328c2cfdb445f549009292d86b7e1f122ae4ab8812088f0446fcaa6ffdb5109c7480b732df0cf95ab93c2d745274b8b3ee9a82137ce2a2cca61544c3b06581abd53efc47cad0610027889f5dfcf5d880c34ed9a716ac04903f73e9c0377727a90565700f7a6d75f3edf1607bafa714e9e538dcf792dac88398d4fcf575579e1059088abdd16fe0cce239a5036414216717bc4082c2a29d53eafe15a6676f7ab2d9b2fe81047a8720c80e6496042d97c615a30fb7b3e0776a3df4d2cfddb05d6d57386d0f643a490c73a77eb2623a6203d7eb8f017133a25e72430db316d250950029e51a596fac566c5a589a5192ac157dc39afe82aadb093fe8c5efdd388672cfcc47f8fb10e979d69705087e09309778acf10a36bf0df1cbf0e8722f2e9a7b6360fa957b04a41dc8d535a8ff137a35afb08f9c5c4780b8cd37e6f4c3b381e75de46d5b7e5950889ab8cca16fd26c576db03ac20ac8e21861323f25e778271414817144a88eba892d188e97465e17f4ebaaf62fb21a10b52499de20e26e4fbfbb0e00f6b220f34786adca9ef2831492c9fb291424f57c05c69c248a7bcd26634791a3cef1a6b81a5658ab50f7220eb233ba84e990209364b5ba82e1bd8f7ca735a609df88e83f6f076bfdf54dbeef882beca0b8c9340681996a856b80146b4679eab58e1c6547f890e0449e3d53454a53b02e829158b5fa8a8cbf8370ee28a6a971d064abd509a773e5eb89dc1cf9da456952b54bff6db190bf3115b93c86504b632fcf73a48e41428552598b65c46d89e5dd7ed795342b25929cf4dc37f3f4155068f1db871d9ace8c14a1ef7e9c436f665d563e31c4ab730dcd071a972b9dbcdb17015c6116e80a33388d0da191e2fb5c4e741f9cd80ab72f4a67fbe01e2e951701921f8a48cdc3c734c4739e4e48be55649d86741e6f87b0a0764cb0cde6d50d3bf0c4c4e64e96a0fa0e0eae2d02fcb4087d8fab39898f5c31924878111384a545a5c9ae97f4644702aff1bb7de7a9147bb264b74b32c9e5dc84644759e48f22cdcd2e730b96cca641f2a62fbc1023f01f0c35e257cbe80ff00a026a9611b4b0f5f97bd9d276ed06c496e8b13d08d85e1137b4c7b1844a9e0804f9587dad3951e4f959a100c0618dc0650208254001e3cdc6270f0f9da58d18d6f9ad02338d2bf224a831af0b02683b21864a0b38fa4f6c4d4f9ae8d8ba80688f520519e17e642e5ccd394dc419d7ca4fe79563a5152f0952d357593c3357fa554515cc6a82db21661b724636a05b3783c8c4986c53c40e0ff5ff40c0def33ea8e25ea28a27d7864775ff1880d70dd06cee863d7425c195e02f01ac7adf534cc018e679ba2d2a3bd7d236a85487addf6a4aaf7d707f785dbdbe35b575e61e9ea5ed4b5d49f304fc0db7ee119a6f746881f246687b92892418011a04b7c8b15e662e46d2ff94f37191d3b7aa4f0d430f27fbf9c08db1fc1cf7cca7c388b79d3edc7aa0c30b14965861354a5f901b837f728db1a18c0b129f550a64710119cff5ae77509fdad8638509782bd7ad0b165fd24d301f75293ee8b9b68b61471f8dd57b1c472d92b789d1cbc752d70bd4a1be7197d5abbfb89dac01dc12efa7cde05bd34bfe723d3513595efa6d9139c9c785c2b095c4f29eed53dad3bb7b2613e9de7e8f9df952ae8f53e183cc775b73a07a3076e56c94791671140d09744171f9822ada6319de5ef04d06f03d8660b95ec0b5c5007c0ff3bd5b86d2a338a95bd7439a678e93bbf5850214af775117b0b05ee241529720d5fc780726fff490b77a89080d563668f747824a96baa6ed23d1b62a936455411215ee509c35667e7e42c07990a8a32ca1fd2659b839d93284aac775986ed25eed2baed2d792826cd2e00db1d9578e05fb40ece18b4e70ba1cfc57e0aa9ed5849267a0961ce0583d8e435218bb099362b3ce6089c1a28a45096054208c2c04511d5d415650792d46b82ce77623cf6ea4d6acaa48419e570fc7beadcfea30e0212c551064e45ca6c1a7ee2f3f050e79ed5c08528be02ad26e2ed8f8315141146bb4b21fdccd055fd4f9e95f00f62d0bc0793f19377e55c669436758af7f3f13ed3a503e85d70567de714f6354a528006040d341532b02130e8bb1c1ad6e17082aec516b3826ad83ecb1caab8b2c5e4d61dba468db234fffd13eceecd890202899c5cb3e16a8c408657c524c0dc369b2745b5baaeffc7339beaee7776e69a4a7a5058cc45e6f118bd7ae523dc441e38090b21810dadde7c73a9b300f76ce7a5d0ab2d3f8efa888314cb8e034ceb19aabe9c79269dcb2aa77a79fc5f8af4c9d4d8a029c4fb856c62e39dfc6944344e5d1e16bc8896294d7b6a10ed69b30a09130499884430ac6f13a4c459b562d089b49c79cfa647fb8e30f189badb41c42f1b97bb2b6187a215924d2d4a385181c6f8be696d0d51771aa35c3e9e6c910b747f4bacd62a06470f3f18ba28596cc3a2f31f98dc12513fee6bc0ab0d527921c1061e84537245fd99c4e11a0b7e4fa99516aeda37368da80844b6bb3a1cbf905281be7fa854ba23eb543c13f863d70ec250ac46a01a9097a52a61c6149e2c7c94405f46642b9d52052147dce834add05942f7c46e9c0ced16126c753470bbeac8710153441c09389d595ccad6767181aa73766a5ed3c7d1c4ba3972be29305d0a21ce655cc089d74435511a79d5794e365a2def0c6e332942bee32162ce25cda2ebdeb120acdb12ee5c899efa516e5c3b27904ce2b4ffc54e4dd57b1a2e4a241dd4fb35c047793ef0cf485f21b3f70b573817ba1f75e99fe2eaf48cec904fe4b5a8c73b13abf3b93c0592d97d7632eb433a2a167758631cf41d3fa8fc01f44da8b8f1034055dde86c3594b60d37bf39e85a0ab12d7104284f9a870fd97d601cd6b05a4c9f5e7f4c032277fc2b693bda7504957045aaf32df30432941db11ff534839cfe525c520204462328aa6b6fe4d2c61613e0999b62ee2232786196b191c6afb28b68a88e89413b052cc0ad9152e5a5c43bc3b883bf4d590a5c0a34c512eb48d7674376e07ed6500d1f9af2486aec9d917ea385bc54d27008f19ee58923260fcce855e878f0d93b02134f495eafcd393f1c421c70e3df2249454c264ac2b4cde01a74678329422b334c1115d8798a6429e44a28c5c69b0bc582c228ddaea229495156a979b8d349079d02b87bce172d6b71b6450e1ffcf0170f3b2ed35ac311eb6ac141ee18d4ea7bc5abad7ec3be6b1d605b70a63727a9284dc0a2008086c7117182cd756bf7064ac5e81286443541e6b00b72dde5ac7dce229ad03509e0c347adbdafeae905a619fc072a547cf30cd493d8f7f1e4b18e0bc8a62ebcd53ff398689b189b0fd440d827d0b01f8f4a6afd92ac3b2b6ddaef23325e0d98bb5cb7e8d86448d5e786014e66d4b42bfb181bd3591850458bd41bc6f33bfd1fc1653d6a62566f37e6bb7e871544618212e4962a2b7ed8e92ce6e580156515d5e0cdb6cc56120b861789972ee463b0e174efa5c91029c186c18861562dd29e0a5ac5d9ac67fac7ca7f4bf04b4a8fcfe9a8ecc0532363282bac01bd510e8f6fa3ee6089030bb10225b7ceb64b08415ab462b5732cda69200ca7ecacb95a9c93fd27f4aa4ea87b98901c316fd8bdd6f36d0d99b131ad769407bedb43428f873314bd3b1d2e97fbc69303e1d7a3c7047ca608d2753303f14d6fe951976c9fb1d1f18273bcb41777cf3421db1471977543d92f37e2ce106efa5507ed0dbaace3e2adfd42390c684387cc8fa1abc0a353d732a583ee6256df3b951d2340e3f60c96fd371f7aa79b9e329c032f79fdbcdf9002e16c362bd426cbfe7641b2316228c434489af698a92134152994dde59c46ec0739f67c5da81caa1faaccbdae34b5768749dc87ff6e80a179336379c47ea3a0479a6027c3ba48743506f2f70721e06d1d65e1f9d016056390a62fc1b40bc1584906e9653359ff1830cdec2f5ef6b7ffb7bec2e299ac06b4f3376d8ae84faae14e6bef24eb63facab9c899d446f0796b2f2cde682f61d17939f348f729bfda9850a42cdbaf170b9857251d6543bd00de88b64c19aadcf8b379a455a95ac0d2932a709d1417cc21d1d05b4b3486c22d4212ced7d7a425fe0a3636a7a2fa3e0a27cdc379b4ec568409df54bedf90eb2629c3239c218f49ab46da1f7006c1cc00a5c478ba8c55abead4f1a04e217a1ff14f440319b80c3be2e94ed3a3c3d1f9cc750b4e2f90d9b438395c5faa8f87a3ac31292939807077f1224733815efd17a443fd02d2ba5e0b17ee9aa73091f45ff6e490ee2284c515b5c3e644e7696041e970d0efb07f60725f7b3d23ae125b06ed459a735dbe72376bca89638c3fc4f26021d5dd632737feb173994602d8b84b46ef2700dda1fe0358e45423be24f2a94df479c330d234028869f769779c15a5b9ac4adb38ea6c1f68db29d553f1d80524c7ff31a63c8796bff8b6e74643ef1908e8799b5cb58209af3313ac4f4531d3ef1ba133bde31e443c8ba8463ea190ae985224a7cafcf98185833e85fcb7747ba2ee18102e746e7898e3403c1d815663ed02e102290e8495b27bff7979fb7d9f8616f276b5373aa52319fce4ff17323df493ea41f6f25fc371640a0056f3339c0310e40116ded8307db0a4d02d7ab16a956d3fa88e18a5ac8573048e1f1ead13ca1cf068f4c2da80873a9c263b23db9a5bcf4e9cf68ac34c1369f226dd7d1cc32c1a5389a9875d9b7a59c254076f09de95abcedf8d43ed1bf5dab8f0e065362f39d8c6bb111de40da828e3478abb3a4dca40a258e8df535825f8a81c267e09a4f261299506548b4def1c0a881a2d6e941fac80c34042a9c8b898a18cb51c659f0e9ef1d59f1a1c856907073de42936a8abd47087a2cdb5362d934ea0508ab2a7427268733c4186161e39cabd6730270b4c542de5174cae03e4c17ee822a040a2bf57ccf4ca25bc2ae1dbf5f109f890d2d4f2cabf237161802ff6293f2897ce6782c38c4779c82f4a613e860a40810837f1647197af7cee7dfc7393929a11073581e4dc37ac86d00b201038de56fb2b4de6686a1f359e7be128663ea5a42a7be74ac4d694ac59237f4b852d28d1ec50a0cc450d7584e8178dbe552a1802032da9a2110944ea07a55ae7194409a1aee52a20c8ad01f83c48d7fe212ee601691e5fab48528a15a1b9a7b636921cb1d4f98a55b8b2858ee16196f777053081a92c1d878745b7a848f440840b45f34f46105f35facf81266f04ab557a3fd0b0d71dacdd25a3bf9f5c56b1caa51363d92f1d390b74b03d07c1baef705073375a65dc20ea9a0533534202585b295319017b5cae754379989efc82585f12ddb070f966561dfdc81b779a8451d26e782c6c5a97569d3f6a9bdf0344f0778d9dfe8c65cbc9946fd8cf51c260f1e3543dcf90221648b156db62628870d1d822472e8dfe966b3797fb78165c2df32477737fc2b35a282ae84913b7c0ac9db135a79ac8f0b9460bc26c65d937a816d5329c8f5222713c9b210444b86c30aa76a5554afb1c37ca650ba6b4861db848696ee0d9235877ecee5423d3a60733adc5f78b24f693eee335686f577d49e5e21c337b9bfaed800a3c768a23ec7f2d3e52fe87d8c5b9d71200516cd36744d7b8d770726428e04f9461affc8f5ba9d681f902ef0f1bd1590b2b1bb89111d0dee4a61e88e0446ae4c59de203d5feaf6f69f85dd44f664bda2fcc7e45857edeb3f354eb5b0b1fb974fc11551af5e0ed9ca39da8cc4f62f1afc27c7a5fc43977ebf19559b8fbba5a90ade90994cb7acb1ccfeb559a6bee723649a37a14b8c22ef84e1d349f1a887a4b47a820333ed1e40dd95a1d05392b75ea72964762e33eec76f693dd77bc0dca58a1271a27962d371baf096d6ca5b541cfae33e215617034a9ab7f70ea0c7aef551d86ab7028d0271b325676838f83a30863d7fddd52eaa68a0cb18bf09630ddf491a0ec60ff13918f4b35c2dbc89583fc59e930cf780d8a9046e2e243828d51da219115e910e24c5c1fa314f44d773cc1c83b9f7ee1cb630ac596673fd174152aa2a48a71128138b1cac291c5420182738655d2adc79639ac7b929a58a53e7842202542c736922c00a5c6c0e4fb8fcb3ab68a7cf51a6e8a69cd5b056e6e8ad121f57b3b92b13ea55d25f4dc3cab3804b95d5a864432a4621401a5069bb9be51c4de5a2e63bbae8b9db8ac667e2879763f53768b5728c5c154acd19d5c636a679b1c902f8b9272911d7aa652bb2bddc4736a2bf007db3f91d8b15fe687afb535c145c32bca4f18b9d1988a8734529e4095a3ee752f5b11149559d6ba3469110d86378308aded4e169ac6dcc312891a354d666cd49ba500a7c396f636ca624bb047ad1ec449380d51c9ae5a29d4127370aadd0119a5adc314b98df63bac9d816b56160d45356d888211d0b6b92a74b60f98250d4a69b65ebdd5674f250f4c8a33cb2ce658d8aa7c7dd6cc38150ec3aac28b176b7f7fbc7728c2f32546696d98cef925e01d9bdd9b15b590651355a74292b26841eed990d4ffba62b3fcb0a78ee405145b53aabafe5eff39bffc4734f918fc05dbe3f5914e7d18c19a6a61eeeb6133a88618b5240cc244c12b6cc177e5534a62eea581173171beb717f793476404eeaa160f04c34214274d341c6370075ab0056fbb2628fc7fa507f355ad69fd2e178bc16c79ea1e6331cca489c3bd45d118f365d850e86ea11d0fbae38cf53a7ec1467ef50f2b33b06e9818ed85f48ac17e15fb0d293ba78454778482f279648b44405073b53038161e9328feef9516625d4fb1635ff43d400ab133df17c69ab04a39da7ad52420fe4a15bcf3136ab46c954e2ef8755843a940787dd76c7b4e62ac4549f1334613f5e9d8ff34b9eba27aaf686f50d5c80e12707b1e262882fc88f145d6ec15911199ad9cbcf418888cd86451df65778a62158f7e907e7e0bfba5dcdb85b695135fa380032cfffa964344e3ba4ba1710dbdca0b0509930597b7ac46cc05230080c70807245c54afc6f4d2e3409f4ad35b8b1c6ce1c4c924061163b27df091caa2987648a19e6d7e5944ba062cd603230834041ed6485e3bdbd5e6e5ec7247e360d622745e9cfcffe48ba9a6a0dd293479f9fae04db230102137a81c0f4ace342059d3af33e2d7d3b91a6b70372397b13e0c41bc762118e68573d72b927881b3ebc92ae8c043abd8d0a01aecc104c0f339c6ba9e3b41ab69a6da37d470dc50f965b6695e259f0842b9630e022a1c7410ca40184d44bd2405444b77fd11be04c2948e577d35b718b2afc86b0454004953d7a031cf3d67ea8d9c7716787a816f431901128a0b17a2971b085409535621e9db160162f1d05ce43fe3bc54113d3d09680f1fdf23ca65841ebab724e9eb76872a78bfd82fa083a472d8b43b2ba3072a8b5c26032deb1a86185706462ad641a5c272b01bcf8b92cc86d8c6317b5168c67b1b63c16aa9be7a1103d25c6aa0dd41e8f59933cf4c6454d789c299dae0986dd83451399b79504c434a79ab50b024c51ef1450dcc9664bb164c305367148b3bb2590d8289fe4c9599e33038f0c0448cc45067398e6e8e3bda0f020838591942aa51fe6739ada8dbd0c063f54c69d7da502301d6f6006bb000f4255c0acaf724f386659d02442accdda315f76226e3ddb08ca0cd66928393136401b6ecc7366662ccd8a170ce9cd7e292398498d01de39d7e83f4e197212d0340908051591b687eb77c24aa5f59d5b21e3acb874a5d0fa90a5c6e3a84cc1f14a5266159fc782e6023507253bb5afc5ade41b1d7205f256473d7dc2e1fe64b4b0be68310c07b9a51bd288996c02a300a336c64ae6e00a7c9f406d00d8bacb2a02f53a4a0a22da40ccfe31ac3ed2f6b0d0ec09b42b9be01cc02a0aa0decdcb2286f1e0632fabe5c9e3ed00a92fab7b05184acb42b6d9f35230fb9288c692917efb652936e89b76359ca9ccf3528770d451edc6b70b27631bb21815315c12138e54b00400ecd6b7fc3eff65d49e8bc4990da3945d983851daa0e4e965257b0838c1aadf4e05458c87dfd95f0972c2bea0431aef92b532f149ebc8a76f13831621adfdc6f4fe8baee6475ece5d15325c104727f45f81fb0ef8fc7724548c7c0759a54c6013b5b01629299596f02b95d7195a746505a472fd1802c8757f4fbdfb871c8823099d6b7c30b2d17d666e9322cb7df6686ae9000bac472cd17648c573b7f399fdc461a1b69cac0c267c3c81e13b7ab6bc746f69f6f9cb1170c64badc2842ed7af71e3701af7316e05303d6e3608f929f73140bf27c6b26ba796d9c97e1a602e2f7e9a2aaf964e8dbc8bf367bf96d35a1efe93b299faa72e9e779d5c51776e81b0eb54a974b3320f45a9514a21617ffaf5eb53f8d136185cf5b19d9c877f4109ad5f458b1b6400be1cdcb13989adf9cb038f5497d890229460a5ff12f84827d5c9801d1e68b252775fbcebd0b647e6e6de84c7ca5ab68c3a1dabd27105cb58e51871193ce8f8f5608110ba2c6ba8cf31fdc9b053cf6593999a12ff0554885376473518b9d125da11cbb32d3fe1203bafba2a00c3d7be177d419d6598615d7a852de816026f682b42c79586d2582e5b88be5066dc918d6b6dac829fa9de0a1be0e6a709f542237886f49ea19ae45b80f3ed4a7d55c16b6814e000ec8f19a7f18b475db85ac9d0509c4ad1da2846ecb153af3475afd75a8376013443cf0939f4a59b4c68e68e82b7e0ff53c2b960c74d3d39674613b6b93452dbd9e566098cbb4f74a30e20a187f90510a8992bceaf2fe1728f7ecda49ef4692fa3d5ad925fc466e2e788c237af562d1415e98fdb0a896ab90e00c3477dbcb555e0c53bc7910d74678795a0c06e2d445cd5460feaa6e354de531ac5b028d961dfabf8c52edb9021a78ca409b9e41e2775f55b5d8c208e9af0711ad93e4e988de1826c382dbc91234fea54ee2a667c1713f9b5c8e310b73d5f4a847f8b00725afe9b78be1865a8622a9cb5afb98ea69973f791228222ec14325b750c74f899869a9c2be88e342ed98154546bece09007ceb8b8791864fd3969ed587b9cc77041d9ecbc1a95e47dbdc957aaf01b024bcbaeb259ee33841776da012da656e9b39111afd2f8bb9512ffcf02b1bf92694f10c60c4c66459c1aaa89dfe566477735341e3288114507a468847cdabcb553f84c68a0e109eb3c522f4e53ca4888d451362f64d149e2fa13dc516206f4bfa9ecec32f01db550b41f2ed0381eeb504ccb90abca3d09ccda9d6059928869cb198c25d3319692386e266364708275e914662c27b22f320712f464bc940093add38c2552b8e692ac18a472beff67e08ce13a7178e0e2f5ff86132cdbfc43c02a188b26e32c258cb88c97844319f9d1adb1b848aaf743981b26f6530fa3bbbad3668f33494ddbcb0085cdae297043c024ec34b0848d03a8d68371691ae606ce992e25c6c0e824cb3ae190538face513305a3a63bf201543937b8d64221d2d27332c4cc5c0ee1ce63273d8eecef39f86d31996a722ec250c624acc7bfc8fddb99010bc0afbc214b44989152f6b3973882603749269d76cb3a16a5f36be7b04039e3390c02b4b4d8db9c4e4b9742bc071369e3c20f02f668a2852d24e42f3b74f873b3e03f80ceb0c81c4f5b9e31924a1fb37bb5d9c5733a4bab888fa98a3778641433f95161bcc70f900c4ac27fc52b63acf09a1de1affe01cf8e0ee606c0fb2dd3f20d1c293abee5fbe49555e41e175ed5e0104b806da4a4569a3544ed076f9ce264d8a9c071e53d62fd7a353d8929b832229a7d7439d326855f255126ca5bb1c7a66b66830f79b3099a5b2542e1b4cdb60c84ea3e1c1240f24fb24203c6a2f91e3c9ac5d4ee803cf76d3d09fe1378a1a11fca27b896b2f9fec97a38c0e549528a91444cca85420945725e83f331ab4cc0a644814a8f12f15f6df85031ce2e219f69479b902012a4be0889f6d11d607fef28452caae17301fd0f2e4ca22014024050ee0c442087ec58660b2a2a1b731a27a7a85125c1f514fd3c36160abb8d3c7d7e633070e81c5fc6f7a710ed5aebc9d4d0de29f2e05fefd1c681a4c20e883a10a79ad3a370440ed6b84baa9f5dd10781f9e0c2698c7a71dc3cd8f52bbe96583f97cdd402321d37c88f6e373183d16ba072dc9c2f50a33ec26b17a632a09cb5627bd6979df3bee28d7c24c4a49ac7bc10e1ea4b64a4a9aa17d30223d434b1ce68568d027521a5e8a87007d8414880a37ae74bc81bf811b4a70ecfdc08e57126a1e5e856bc01a9c4539c45221f7516e41de16084912b787de58e0f525b1c2224f12748bd3f34eba7a86b663ff9f7ec435806790d0c48a51500daaa2a06b57e9732dda915d3eb9872aa043d0db46c9329f387bccbaa37d3261e2c9bf160106fa8b9f572b7615eb456c04f7942ede1bce84b30e3eac00bf944e5335286bbbb2366ea7bf47d116b05d26bba818e1508515032a7d3147d3f617683114c5991044d418fccb0e8a0962c1e5a0d74600eff900a0d7e3b24d32483470110b5dea3b9d1a4724e66d835abe9d8325e68bbea247917cf39e1d098414176e5703e7168021f812304a1f32822b47818fb423d39e0ec0edf701288c5b5018b7a690956405eded3ab621702ce948f719d09914ad5a5f380e7db9d587ae5dc258c5197a43b969856c08cd9296f202e482593d11b8246cf59e0445406fbb347a788acd7a7fd6c640f8288d9caa411f7ad30fb2ce9a9850f005d89767ffe41937f25df184141ccab016b21540e26aa7eaeb1997eb77de25aee46bb288c2c4dece5d9cb4a13102a12ade2b6d4586f5d9048c8f7213fe0b25bf3db51f004f01ba8053165f72e4415a43819986dfb986c4cfe4b1422e1c8e5949300fbb582cfe872d5d5c14f2914072c0b3458eba81569703a532a9cf4bbe63a8a72fefd4c1426e57a85968fd9356a4fd9079e6ab346e5db9796a18421b42334bd365bd6e9243ec82933ee895c6b9cd5f956ae944fe4b04a2b51ab4c663da9e6a74c990207d19261280634c6eac926ba32ceed5ca662b86d1d9274f6912bec86f25cb3ae823557604d75a46b4432784fe2f1ad6c9cb3217fbd9c16670e1f0a7749463c474333365a9a583fda41b37cecfa01ba06474ecaa66ca68246fe7cde26827d4196c8363152d00767dc5687d4bcaf10df0801cb9f4237ca3e3806747fdc18a11a0685afb407d1dd47a0440dbf039af005e89420893cbdfb1d74c7750112e1a291e0af705ef3b781c5b94b41647a2b00abae390485cc27d62a173c0316c96c21c20929f179ef646928c87c5198aa44ef5082fca0cd116d08513e8942f2e0ead1f09b43f51288f125b29a474161b26b7d3fcd000a0e2f4143b44e20e083efb35836707074fe25ce622310e39708fcf3033500d755c9a3e106271b93374c10f2a02b08665d3869d348022ac9dc0f95798bdf3f2808a6a4209c3ac70e094f2f9ede5292c79478911e93aa35afaf4c12787ef02b54c54e06f24c35254141cb9b6939900c42e4738b31fd152a901d087b8542fa4a9a9c2118f8fdb9584aac334caaade79b4bc7abe0468292e5eda496dc44c8a2e772329c61c82c5a7d9383487a202c72dbe8454c76e128c7ad942ed8e79780fe79a8a91280cba5c8c2e1917795e86361b97405ab4491a5e97543b74996c05dd4a52bdef006551c0ee4342945505c78e84359a56d17681b65f46eb3adb030a441e1dbf7fae0c511f975e4de4476fa6d7597bd04972cb19c5f82cee2cfb51ec61970ede89b5c8df0770078217eb5b917ea5dc3d30d70e483c1303c7fe1803dc1e1dd602eabd086cd0b03b1d014650486367d77aa17c1c6cffc5c2ae3dab839b03f777506b0ad4c668867e6cc8abcf39f11ffaec1bfaf97141fa18db7831ad202f8ce139f61921153d56aa957b7510f37bc68ae73ef1597686e138f26c592fdb3a94a268bc66c7c7532cc8e7293393c476573376a0e0baf373286b1e9441a63dd81089925a9ff8e1346a7cec84f50770d8bb2b1126fe07fe2ca0d8fc0be65cf77c0950af83778f45495216d0715c15cfea01537fb9536aaaaf6ffee5296225e72ea805af400b5fbdccc2fc08eb3f566f6d11549acf40f83876588d01b90ffb8e0ba79ea264881d9c404807f90bfc20a871481b7b97c59cd0a86d728f1d591d2ad0abeb0e197c4c6a02e8e5c7c0b9daef6b82770b4ed35ac8661c52c7c860730ad6021dc566a18faf429b61ff6301cc81c38fe93212a4a479ceff7e70b239158115af0ad57898c468acb928550a85f860d13e0fcee362702b4c8c1404a5d470b92e7337eac59f03b8f0f12e7c993ae2222cff39b009784b8ea94fa6381ca25bca06cf3eee663f3fe224865d7dd1b4e121ec85ecaf131b25ec1c4b3ed22bd648deaba89e0fc47300b45b26112826f237ffad32142197f85027f7d31305bb3aa6474ae87af55aa7f8307b0e81952005917d8ea838a8972a61f6da46a5a4d9bd7e21a203d04595b32650412f25d0b49e08e51cf2406345833b538f6edda5fe508aaaa02b0d0e06be8049a76cec2beb774a1ea0f748a1139aedc6b8933faf43dedb2a6a49f9b5ed01a8bc72b0502cb9878e53a17d6489b4db20b34b79e810517ba36b2de0e05ba9b012228316ac10910345d1815c78700f8d173122c4f1cb8eb3b5abb0c94d82b25e707f1d7eb9a40a5b5835ded3158b8e80d1037f216674ff8884cb65c67d2a624f875be24f258f2e3afd9f4db3986f64f749b040f2aea606940addfebb92e214d345761a6edc825e4afffd075a73ec01712ab134e3d4eaad5e1ee855630d9ecfce07dd0779b3f84feea521b211ceb5fd75c3001b81d060e368de4d235dd6d9eb827c55007a87714df6fad3887dedf9225359715705912d38e773331dc1acd44d2b045aafb0b301285c6a26a61101cb6c05c66b1369e513846f7c49c49ac9c72e415076e95419d88bb2e18ec2dfa30a50b5ed2bb72830b2779d143ea56ff9312e8a6abc3d1a37ca13c247c3302dcc12e31c2bbffd2b6303aa204560d3ab3b27b2e03de211c65203a8088739854002629d824342e4ed110e145a32aa79a87ab937b04d3c0522ef3bbe56aa8afe5607e11396008d5d665fb91c4ba3f049e0397bd31b8ea6df8ceab7aa722e6fce223d754b6a2c07e7b8cb4b7d989d89fe17dd3b8c175b18c5d86c5b7478daa61c1eb8a8a9b7e8d8710bf048cf1785fe2ce0d97b4aa073abef35c92d615cab842b9e0c8c6e60d686716635e4d092f79e250ba71a18b2afeaa3ab598621ff29ae75217c34507641607bc568be8703a1ed8d43b91564a4b0307e228734ddc0206c9155ee0bc8b4c1b467b6a13d917d87b2d2060c360ab9e345114606b2a770c8036aae9ccea7f1a44e0f10477e6779b8c4fc5e8960307beebe4481a098530c8b344b593f907b5da53a8b80d0443b81576118723537579cea018ba108c221433acf57fbc5335c21de9d78c26723b81675b7a6a94fb6da8c774e182a5d6493f94ee7c11efd0d1bcfe644562c491eccaa5b216bc67b100ea052eee691985b9c8ecaf466f911e8e47d945fb23b9e09979c8fd193b933edce7655ede3643946097e1503be0a74c5419bad0ea94a5bc9762dbbcef9459bcffc66289004be12fc52e9890c5a3d536a824eff7656040f37d5f7318cc52315c0cde9e051f8878ac8100601171835ffdddae92970e9c98dc1bd74171d3f22eb28b60bff3af392762de1aaa131c11145532215dae1385807392fbb86e12e7b7e82b3448db84ac30ba41f9f8bdfeef64187c286db1c89d23ee5e58d972bf910c528c65593f1a7b894004f387754507d608e9d2ba6b0331b8fc90c30bb6029435c464f2cdf029577d651a51d8aea80d90a19197ddd7ee6d205160e6c067290e75491ab87509c77c839005ffe66fee5300101cd4aa8c1c373b097945cd6c3a8e9859ed81c46f328197388800bd8d343a5e0561b00aa317024d37292f321294d2c94592053bb57a0365ab05e8a4ddcaffc67bb0fdcfd69e4a1b7bde49d40f9c369f02722d5d6b6b094f15f235e5643254319f90286131be7b640256fa8f478c1f5ea9c5f2e5279b4d6c2e87d048669cdb72a58e1e9de964d80c617f2dc59c105a19bd79dcd4c29e0db2909f4508742d796c20143f127f85cae1efb2bc035cd6a334885d5d54cbb8eb9caece60387bf4a9676a3db76603d1d741d95012b0581ac4c7b77133a62ca8361ca3dbe7d717ea6f7c0b84f3e2635c32e4bc4363f719d14b420b0c03b9d587a13942bb1f926502e42c159f0ef79b8930b0c4e4ffed007c1d158202795e8105a0dc2632927bd8b7901379bcf4601e16245e369e77e4e3a0712af8183ccbabaa72d08171a1f03736603d90513dd87f75679ffc13f071ae2646a623dddbaa39cfeba7cb0eabc78b81e09c62ec2746607c1d758da84831f1698d7fa0c1e96c0d1f55d77582c1fece3e1b09e26594546556d867e4b931a810dcd3004a42636ecc026d9a53619cca70b5b3923dae7c9dd283dcd8004a0711c8f4e2250b9c0808dd6463d942c562dfbcfd99305037467244734c19c569eceac4b62efeefeb17ab8a9f5ce014fb8d09592b5e99e2ced1a80670403010eb80c24882c7189f7936ada576a93bef2f1685703e7134c11e4cd123498599ab5d4d401fc0ccd2ae17680cbde852fd2ce4e2f16f1d1ed6015e1c997de4080ff8fe53232f45133a0146994a5502cc452dfe5fac8c687ab12046676abf2ea97844c0b77e80823cc8f9aabd7e9031c2d7758fd9b100482e1b40c8a89fe73eda0de306370bb5a69948f45977daef7aeaabcf7f3eb8a675ad185a1f6e8a71a1594e3638437c39d8af7bb936702b5f1d2a9f04fd7c6b66d2d414acb8d771e75486f2031bc0d1c4e4061610e4ca863c5ec02690465857cf61a75ec3bf6c2661b8f01f531e7387aaf428fe931dcf06192e29b20eedc6e83f42dacbae36e8313b942b3de54fe50641f31ba3aa41435f6a0c8bfe2e5c073fdee138942d575ff3106c895520b5a486bab770771c058b9caa7fde2dda1e44d71233d2f5f5e5e3783cdaf789c459a11a5011a0e8c945c0f518d6834594a49535384251a043c3e9da1f20f78b8a9b499e76c874920f5634dedb024775c74c49970ef90e2b4bfbc7f202d6c75ff5ce847e0273b569d7e5ec6dbbf0b068459f1fe9211e4e4ff87b36043e04e15eb2d4a6557ba4105ec0b225f4a692964b6f587a26f50259a2224f48cd5fdff9cc09a06ffb94e69e20285c4ad8dfa6426ca5f495a19e2411fac88c841b99521ad540aea96b228f44be9e47fc4da1c8a4c1bddc6705913e99726a1f3281b51ae69f488cb068e31cb7087bc309901d3c27dbc8607f9116c2926ff7319347397867118d3c1c02c86b454f875b60074d45efaafaaf637c3bc01dfe78898e1aa0b1d3a2c4e7ac139bcb21ce45a047ab2dfc05720504a4e077ebebadd3bba413a385ca244f1104244121dde55ed51008a2ca5a3e75a5d548c91ae2f411d4d9759ea458652f921b9dc7e59a50f67bbcd30076b73c78e00f5677b633b7e076b2424a4eddd6defbda59429c9750b6f0c360ce390a12c579c6a44aa0c4cdefc6849dc10a756c759e32255874c6dc837c588548dc8c462840b5b7454d488bc82a859329c5a60b8214a6d42a13465a936c33845d154e32655a024d5ea1844a506725cb72a8fbe7d46a1a689a45a1d7b90d4e6172c62a46a4fd49ad21280f4d4ada95d76cf12d5403b0ea16f6858532302ca6048238169aa11c9a1830d4b6ad6eb38846f3522734bcd9253908459aa1101aa236789218c24b55423129464ca87e602431b2e9c6a43b80810646a44e891daec034ceea637b580ba62aa564790895a93f4a8db93526bd672d672d6d65a2ba5941ea1dd9ad45ace5aceda5a6b9d94c697690dec2cc7614accd64ffff829a5b4bbbb8da8b59b99f9fbb8efe3be2fc6f480509a1562ceda0a6185b801b04f93669554242c005f5a2194e8d356752a270c76ef37d5ed20d779d982e13daf53f4bb5fd7ea14a553758ad6299fe209361f40f7416b203984484d557e3324cf6e95a85da296e97b8cf23d6f38b14b753c743d499680ad716ebdb68c8637a0fe9d3776462fb754715e93386fee3a7208911a47322db9b5ce26bdf65aadbd5d16b34499c04e00d82c96add29f64b982256b2ac8b24a942ba5475f048b13517fabcd2a55e63ad352ea74c8140bf01b22ba706e7d4875ce9244b8871bf870aba94084bcd5aa57d246d11977db2970fe9456ea79c89d5cc67cf9c9458c932fa9d44f2e62d83c559a44f4893acd78e2961e95519a0a0e9d2fbedc6a3cb582d51627ba28dd6adc4f37251a668c13596e357666a2b419756ba2b4a66345e9d64c94d6ec7deb24254a7345c120cdadc6de4b1d1515670d194a6b29298eeaa99e7a768ed2c44e25501a75fa22268678aab1ff00d24e97de286dd66aec4394c6b5d924d3dbb3952a0376b51cedba6e5a5187c94c0c7e50634689014b1c89538495179c69c346092a6fbef3b08540f8aecd7cd7753dc4de23449697f1134b141533e8b2042cd927bb17ce1b1d4271a7d79f58a2c299832f6b6d2de0990b9be29be29ba2fbce19c23e33b779de10e0499fc09f027676f2538c80f7dc006bab2d633102de7bf3c664e6eab5cf160a22d0f718885d04d7ab655140fe594578fd54813c43d497e7196eec2716335918765ba8b4ded6277f51b77c3dd7d8efcf1fe62038cee7cf9c94db9fda7a2c81d27ecea82f3115a60c47b5aca526d8da2105d5b2e979cca36f6f491d2da3466308534c6f51319f42d0413b8eeb382f3bb71e9bc0aca97cc87caab1e07316a8bc556fb7eaf37d3037f64f31e6913d54e4fb984fb5d9799e771e09e3e7be2fb79265d0cf2f886e266e599f32fdbe5c7602aaa02840cbcaac1503992a0cd276f17c44311e501ac2e032a5945ef1784228975de5354843e530e932a594d2a75d1ab0b9af96e3a1f10abaae07c57015f2587f04af7fc5260375f03e0f5ebbd3a2c12dbd960c6ee975ed4ac718f5efc507999907f3f74c5a2fb7f42cfdfafc204782f0a0373ea80a796c5914eca760455b2915c5e6f9853cdcf9f168fffb78ec0755e1a567980c9f2b1872a5b06a5fb39b9ef7a0ea13c515bc17875231484899c34ca9e7dd0b83b9cb6436896ef5b58538fb5f9b7e67ad53766a9f398e64eeba315934a5f469875adfd0254a290b5928cd49bd4aa78ce37ccec9bdaab5c6f52d498947da1b0deef4ae55cfbbf636653505d87f757bab0ebb8d5f3bf076c7f8d641ae4e9552adc362bab676b3d6ead82447833bad953b7db44ab07bbb2477da666be748a7b8c7343582d629d5e6e03291ca759e772f0ce62e935925ba95ad2deee09e72477e49b01b05bdf1a7672c75a5bc07c652957cfaa99250813a801cb70533178a30108fac64480157539f6793265107a63acda807e79cb4575ead9986558e858a1a9952156a4fe47c7f71bea90fce8a69de68f7e4dce9e547e73776cd1b51e89cf31e94f6795ed4442105ef7b02594f01f673def8a628ed1b61d6fad477c981a73b489e4c571dc9f386a5b5ce7135a790c0f9d3792fd513deb7130563f14d42cb5a477c2a066a01a102c3e975bed842e5795fbb8a8e83a02a1459419f0a0c59caf3ee85c1dc6532bb450cebd8d332981322fb20bbcdb8dd6e2b4c9ae7ed4e691ec96982f81dd80696c1859ecdf976a46f6f9f8175cba1201064331f61333c0f060dc377b7f05d729d0fbde42d44cf0bef056130157993795883cb52f3c693ab7a8fb572ed8453ea76c5bc3183efc0586aceb098b4cfdbf946691fc95ff0161ff993d23cd25b005fe14a5c85e04af5adbc6ec5d9555dd1660370dc6535d731b20067d75aad7ddd703f2f7fd69440695efb0faf69ada357eb4fb707c15ae87a0bc5f05e89eef2d942d5e52075f9146dd5e546ad62dd5779f42d076918637cf9145b945217613e25633c1e843ac753eb7d97bf78c6595fe38e4fd1bec6a3b73bd7eb75d7580af9eb46b435de96dd4bce3a7a4ce52949daa09fd77589e3db7184e0a385ac0fe530d23102395f61cb6e3cac02829919647d2a1557fe6857011d309f1ecdeffbfce8bdb174203fddda6ff49c27f56e3cfac951b7d48d686551fe2972149442e9a0b4708829e52aeb19536166366a5950d3847c2aa7b6853eabea5ce5e0581e3d586b7511e65732267a90ea9ee89f1f3d7379c5718647dfa1ca79e446230ad250a5f2ea472bad6e2dadb576505cebb5ecc62019adb4bae7df96a3e353ef08ec865b86e5900e3a64a795ae323aab4ca569e17c0bcec611de176c829dada0576df89e8a395e7990951dbb57d6b60541326cd9f49eec41b2ce465090edbc9475dd411ff88d41321b32cebb2ab311d491e5f835985ceb1e29f53d8175ceacdb7abf2bb7fc79fbc395d5e6b3651dd86c291370ce39c92028b70c922a19ca5ba7540849bbb7dbed66b9cb715c6b04d233eb9c577e8e5b0a71bc75202128610424fcf0d142a15b0fa169d72d8ea6f12d47d338893aa55d9295e8ccfab5a46ac877201d57f09da7e080f93474903dcf7311e67ba40a4d373a96fed4572cff8efe6385be1acb8efad0bbd08da8188664c8374a9b3e6df5a08e1345a8ee552ada54b506935b9dbdae460c5c055be5423b3f672db5a203e673bb154738fa66cf8623156d21331913613e93b1ce83903598dcd80ea6deb9ca8fbec7322c5378ebf9377ef6e8edd8473010e83d964ce541f7c652c8836e44c391aafc2b693b282ee76ed4747c3a6f50f7bcda31fcb8d13b53b2b8a3036ffd136d1f57dd0bc7b764ad1d1270fe949dd4db2fac1e70b7166de3175615778379f8a9c0008c4402f0b95107609ca2223d6c95caf973466aa1f2ded7109be4f425772be79c217ce36e9c92b7dcad32df3ad04beef63987a187e40f126afd8ce80f12b82293d664b8187ceac7373294c6484edeba0f59c2423be4885b992839776fc3683c673e6e3f252d263e5e724ec2cfb9221f70505aa8a985da3d243786b71f78c9d1f0968bf29693f2dc2d1c3bd176020f7f15296b998f773c862ab201eca187e40763c9efe3fcd3321f0769c81dfaf817aab82491bb71489f950b3a67a74aeee60366b997f421006ea75aa85d494949494989060d1a30d99c777ea17fdfe7df57bfd04ea92ac97dd49d8ab6d17f64400353e883fa398f7ff079f779fdbeeff3194b1fefbeebec6028ae00200300ed56f5fbbeaf86a1b7dca841b1fb71eea8744e327ec68a34d6a4fed232ebb2b1a37a661d14c115df5843867ce0354a6daa4ed5499552a94079eb1f7cce638f160add7a37f257a5aa5499d425b27e610d2fb95b8b11b861e82d329c122526f5f6e33d5a2824cb6e8416bae48fa7c0ff817724b9c535ea9fb126552456385b8849cbacdba9f44db99ef778074ebd7e494b1c1317a585bc9893b71c94b79663f2d6c97042d55b480609af07a94915c9724921b48cecfc83b19f3a4bcfc8309391955849bdfd901d39a42acda9760aecc097efb89d527576ea1bdd6b8c3a3cf0c0fd73d2b91b87e46e9d5332597335c549fbf18d21b48c248dc6b13259e26e94f683ceacd79024e36455ea29ab12872489068d189744e3fbc8d2c75d6e447dc6f91e8cf33b18ef8bc60cee368797b8db245356ee5695cafaaeb135a6c07fc9115a66fd07b52c928c385b56ad776f509014d901d4e9b690d022a2a060cc807184a72ed7842388eb553173bb24a8911b6a6972bd30cd745565aa1226da85aed04fae0b4a75e17a55fa058e73e6c81630ec6629e3d59d59f2e54fbf01efdd99fc74bdcec371c4e51e8793eb556973bb246a70c39f58c4685173ad88b9220762de740c6e6784a1b82d24b48beb559973bf2f6f551a33e6ae70b99f58c65ca1e3c2dc4c155fcaa29a86dc87fcc9830d4149bde73dbd27f59ebb37f5dedf86dedbb9551666515d9a40ecb586167ece2f515d745182f4029d36b559e689d31b2d4ba0a9424a8d996e58e3040e48bc847962e6f0c4125e989c4933268b5ac94f454b7878c1c8d2912fdad44a8e7a1f2850bee0028a274ba2d44a2633357b8bc94d3fdffcf4396173e8a7074d1dd3814c67a449746ba1120c7d101fb20221d37f4c379a2e9b7e67d3ed769361c279badd6e4a6ad386f00563e285b76e6536dee2187aeb464f6f3deb5fae97730c1022de5a24cb63e3d4f036864d5212c34b66b2f4d699890a116f19cadb2852de7ac9549c9f5ac87296b750fce52dcc5a672928236fd3bce5356e188e854af396c7769212264ede7a333d79eb6543796b5bca5b2a6fadbcf57e4af2fab2b3940df5e56d8f69a92bdeaeac975db69bb70de7adcfd964806fb90ed1d6b222c4bb5c2e97cbc75dae2728ef0a5d5ab87adce56ab97cba5c2e09c021220b132e5c71c20a974f4a83ed2045141642d8e04413aed62b8b2f7bb2d8c0e24b1cdfeaf22d33df728f063c7c2b09a56f2521e75b2d0faa010dbee52288b6d6504f4f4f8f952ddfe30d106d3deee3c647cac7ab8fcf116ade078930ef73840eefe336d1e613826873097d075bc67c07ce00d1d68117e3636e3ed6f258cce5b1d80d7596780267092a30d8a216838013115155d2dcc00b175b92f898bb5eef2a7bdea5a5e95d2e979628deb585c9bbbc26da5cde6ab55a2d7fd1d632126db125c07ce86118fa8f8d16eaf1d083bab8f0618c904d183a09610761188661ccc3d083300cc3d0c7c3d0c3300cc3300cbba07977f7058836f77c7c7c7c7c5c01a2cdc7832e4fde034f8068f3c08bc562b198e7b8f11d2c41c577e045a2ad8356abd56ab55aad56cb89445bcb89efa1f33d8e00d1d6e3d5265c72dee543a2cd45136d21140cbed6365fdd7f6c34add66a857af2b555d9b8bc3a09334d8572fa5a5b4c9c4085f9ba5319aa85625e9dbff0183e73b424082e3958d1d2444e0d2ef8d0258b1c335d60d0a2569b888326491d1996c01283da0d3a524e45c82083261b6eb572d3578f79f9582c167321d116f396c35aeeb5a086f8961f40b4b55c2e97cbe572b95c2ec721da5c340ca2dc058ac987ee8550317ce806106d6101445b95f2a7c1c58aa7e12088361a3366cc9831c38366ccf0277e060f411f7a90576b75af72c1e1ab0389b6ea04106d33866033687a98df106db021a0f0780bb97ce53f365633b8e157ab2c56fea3855abe721256e16ab5f2550f4e20a962053149702162f5b42488245e56102385ceca695fbe867802c01036f8d06d88b6b0d58afa967bad218cf8960f40b4b55c89578f8d8943cb57f79a6ef0d52f95af0e7359d0d4d7a6295f5d00a2ad0e4d3a62caf4e034870d961bb8d6bc8b898d9b1fb4c010c50a333557d30feff2996873b94cb4ad645071f2323c00a24d86f772d8ebe53f2f0f7ab9f7bafff2f9c2bf6660e6c3027ce800106de107a2adfa8f687b0dc5e0f231bc86688be1bd7e078bdf716fa1d077fc6767c7839ac64ab7db0d496d4786a62b7596dc7c59614b6dc727a59150a58c981998bc608a30b5f2fe8ecf19fc4ef9eaf9fae3f3a58d32c7eccb99e5ca0a34aedcf0d56157bcf8eaae0497af2eabe1ab076131e2ab1b6549f2d549d156a13a0c4337a10d5566a0a44508264b6629fbd067e86168830fddbff8d08de47ce81ea58160a4a98a39388041aa8b5af8c4c587522eda76ce3c4f11659ec77d441b0f115e9e52354fdd7f6cb4102502ced315e525688bd22a659eee50f6425d4e77bc6427515a686229a2cb53294fd37cc950fc85c73c254324ce9418285aca84c1a1468db0a0050c103430e28b5a7927d4b481122d4178591aa20b256a06c882082469a6aaa841105dfccb6b0bcd27fee51e88b657bd22e86badee5c7cadd53b106d75a74a92dff11ed1b6a3812361a2a0428a2259bca995f75dae2bdee51ea5152581832a5ffc10869b3935571523eff2986873d1f81611527ccb6988b69617fa2c5f1f86b10f432a6c3e24c2e9432a603ef419a22dbcbffa95c356ee51d9f22b87b90cd146a56ed4edafc7106d97092a2f8a4dbce82eb3d1422b173d08cc0a2fee885688fe4374124411cc162fb6c446237a35d159147d8aee892206bed8428314255db4508438bdf8a18a15350821850c6220b6e007374e766052226507d127a50d608a2e9cea4cb9811354881ef4e50bcc0c5f6bf50ba6065f9d47b455d897afb267c6849aa7589ae8e12913569efa4bb4d1300c430f7d47b485357ec5440cbf7297685bb5449bc8f2a9e559543cd83d28f5600df4a0a1301eccf1830411045d08110f3a15a0b3520b31015720e81ea51dd1a0092dba68a2260a39526aa04f4adbe124861e6880c444530db5f29633ce8320962f2efc6ae52cd1b6f2eed75ac5d73a8327befa4ab4d5192f7a51f3a28ba24d5c4189a82b45bc1173840bb54a450d0b2e52535468c121861aade2e63df472c4870e8ab6d0136d60140218a1c5abfc136d2a21f1bf29fe7397d9f83ce8f3212bfecbf1df99ff41695eedfbd2fcb7e63ff7288dc611533ae400050c242cb56faab949bd400b183c11c597031a2ea0886021cd53ad9c4f5f0020ead060871e92c00187cfa71131f8cf0824be7af5bc25be7c3da57ed53c75ba027bdb3765e9edab93965107750cd1b1b4e40886261347d62533b73671d526ae027ce9aa4baebae4aa4b2e97cbd5d4e47235715fbad8c997ae09e64b57e92a5d49dfaed2c5f4ed2a5d4edf2e2d5a5ab4665fb6a65a53ada938df3af39de6db5b5f9a56917ac68ed41af3edad2aad365fb696be6c95adb295f4dd2a5b4cdfadb2e5f4dd7a2a73cb5cd997f7cc75f3672e9c6fbf495ca42f6f0cda6fd41d73cf7ca7f9f659dea4ef5b5ea6ef5b5ea7ef3b853585457ec96a6235b168138b75e63bcdb7b3be348d42f58c1d8a35e6db595a5825eb055fb24a56c94afa66b158b4c98a36598d5faee8d28a2eade8d22aceb7afc4845995ab355fae56abd5aa5c257dafca15d3f78a16116911d1bf142992e8e6299208e7db45316544518b2fc5265114c55264fa16a3683181b4a8f31dcef99eea197b19ba09e17c7b786ba19e607c1996210d5f8661184a856bbe7d9661d27758864cdf61193a7d874f5a2690963adf6043810d0536140882e097a6f5993e038ef97650cc1b50c997600952f9122cc1a46fb00499bec11274fa069fa6a8a6a8605faa9a544daaa69b4aa552a954aa6ef27593ef5bfa96bea5ef131346fdf2fbbeeffb3e3a13884e9d6f8ffde6f5cdf38c745f7a485d7ce93df9d2fbe14bcff3bcd24bfaf64a8fe9db2b3da76f4fcd045253e7bb5bd3ade9d67471bebd43f2ed658754f46507c3975dd9755d577649df5dd9317d77dd13131c33c1955c1417c545715c0daa2f398ee3388e93621e2610f350e7db46b1516c146bcfa4a1b1157bebd222bdf9d236591b45850944a7ce779df37cab6b6eb5d63335cdb7d72f4d63265cc77c7bbd55f9ae4852beac4b437c59cb5ad6a4ef5acbeaf45d9f4840b5a8f373be85507a43a2ed944a25f1255d43ddd826109da9a5cef71c1d7436d571befb4c9a6fef2f4d23e1cc981bcf453726107bc97482e88c3ba8bdbd34d2bff0652f35959df4dd4adfa5adf3ed2acc223b39cab74f2ed9e99bc9d0aeb5cf92a1ac7822be64a431df3e6412cdef9ea7f5f48cbdd61acb982b66996f0f6a1dbedd6befa19e4e44dd96d3457af65611b7a453cf5b6458b2ee3f36823cbb65c99b17c0532a349f00e2ebdbecd0abc0a050cfae92734b6a865d0473cbca2e367139286ed94dcfae9a72cb5e7af6b0c92dfbf6ece111b7e435cfae3a734b8e7a764ecd2deb7369d8c31c6e59d9431c6ec9b7671742697589adf5699f64f1d6436821f0adeb18c1ba0f1280787569e939cdd7a5ca24659e79f630885bce25378c5bd62f7b9e1da4737be7f6d579880bab2fab302b312b2faba870d5c46a4ced1f1b505db80273a3c09adc49f6c434ca0b574f7ce18a891514150c574edcd27bbb44cb9b870478e672d7afb5c278ca5cee4bff09e7b6739dc0b4961c42a436e9acbbfb08087259c165e4965ee59c2387300e627c8853abe4a4d506236a963caa710c4be834d5ec586d30a236451168915b7acf5fc4d89b0630a6d6d43a6a0a2c986a31266749b599e605b57e810b315235a4245648d56eb801863ab53afe80e12ab418824ead8e53ca082bd9828ed4114e4f4c359a19294f35b00b6d16e43e1e296e17060d511acb414fb4f558f9147794c040d58eb11d6409b8a8e4e744587d47321312b79de5ec568c49807abb05a83719eb2cd0ce2263dd518d9be8acb61c4667d5a7f860f9f54b0e99e2e37a8b1c727dd62a8b5481a583ceaab3bace3def4812c8188f2e88e79dcfafe2033cf2071993bd8d96c9a81881922c0103556ff101961c010355b7d58726114741c0a4f10f73567d680804106641cc14c44c65d08a64263aabced97099be1e2df55045cb97375aa828d56a9c26726813e50a12401c714bb2334b50cb989bd88999384a3d52b52a071d2b2aec3e5781dd58c2beebbaae1b551eaac68f478aeb623314c445aa559c960c3788d23ac85ed1132174a3164724919cc27d47de96bdbef36f2c5fa2873eb9280cc9f203c7c9402c36e0734f35723e82d7731d8b9dcf8ef3c9f9d3e8a5af20a3761ded41ed431d0536670554920d79104c76fdfa68a1180fee6b0f2e7a7d75d6946aca9707e956ea601523c091432d7b81714b06e207586f1f4df668590f4a664acdeade24fa316f541a06e6acfad0100820cc66e33863c6d7d657e71e7456b9237704328496bddc5cb6e36472fdeb5891daa2ce134b4c62a8d51c6c30358585e9083a5bd4aaf7a8fe638a8b03ce1f1ad61086cbe65687d12a34a9e7c9829a9ca44767a10bf7ab33491dd5acf740f2213b06d159e7d73ae783f38e1c32499f354baa606174c6b6dbab3769838cf1e820b296fdfca1dd3cf5d47bb4ac65944d4ce547b5282e72828b422e02bb34776912cd2b4f9de3501a8fc754640fa496bffca8b6e3a57bd937207426c435b214cc83791ea9c28e77464011e5569b358e4267d4a7883e6b53623b44ff5c24d90a19e3f1b9e82219849de6b760b8252b715148963eecf8ce8eef9044a680bee3d4b90b1781646c07e8a283648c47e8a0836410d043f2045ae7453216fad137d191b11d5fe79f1f09695996164aa165948b40a71c9de4d80206a2ce8ddde8cdb119887d677cf501d85b4d6ec9b720a287de051183701e72eedc183a37969e6beaca38beb58c8b9a1a03069933ac14924ae27c564a32bdf82249993935f0a2cc990fdef020070c122f80a20b4f92d59ca7d5e75bbfe427725ce8e27802d7a953278c17bf4ce1ff1b4fe017c91284cf914142f7c021afaf9e870e8ea17f630c74ce45262de0a28e8ced705aa7ce7f64c9df9d60059f83e30944077da2c0e73917471d9f73e0a863be386f9dabe86b6c9dc0757e253ee765083ee7a5ca04ce4b139e731164da0e597b06fa6c59f820cbbf7064f91d990947f29253d1c622596989e64515578a20020a1b2ad30a2f50841802e906226ed487b42005955f212500015be34e8b77f8a836e92c96c49d35970fd119f5293e76a6f868b98b1c2223279ded902d2f654f777cd65c3b23e7b336051c1213e2d2ff7cd656a075ead4a604e11ee02019dbf1b9e79f7b203896b0d2eb31e96ce8e34972cb790647d22de719125a8813777cce8d31ce45efead4a953e7794ccba80ece45525473392439aa652f1bdc52e5a0770e8e9e6accc140d3a718818f2462a0e91ea9808e84e79c8b8ebca6bd7e04a62b459dd750e728ea4ce64ed9a355f32099ccdddc4a2d546bb5b65a25f2049b0f9cfba07506e074aeb4565a5ba8f21ce77f6e6e6973b04c93366d0e93a83a5ba74996df4fae5b7c39eb4a398e1c42a4f6340478e7f4b900f04eda7c2a9385921ca061418a216817a8e28c9727b05401c40ed3bd397d1acd687243a54e659125ea0a2a635858dc6461f77ef0a106418b4481944b95ef1a282004ef1ab9c11ad1c182b408089e9ca4a1828b34313cf9f114068918645841a90c9b2f2c9b396ca46051aa2a580cebbed1fb3e6fce3a29ab89150509acb5d65a6bad75cedb25d4428ba24f68bef098aa00237c011a25236890d3c6290b1a8a38138592275e544103707ae04ea832567ec64fa8324caadbcfa19e7d7b6bcedaef9d37b8156e0e1c2df312c733ecaab994f421e66308e72a18b1ce91310b742a70de91536a1c79e98c279d3179bbacfdb6c3289b2ab268f2a6d729878618248142058c2647a4c4a801030a216ce0644a8d527a7beac391a7d47d78fdcac285356dbe1bb6262a16be641853438da24a526ea6d0b030a6061503ae4869d3450f467cf1c4a482cb972fe8d46922a5a5bab70509384fdd4b03f573cb4f2c698a74e8254bf472b5f252647d692f837ece6e5f2f412f55aa97108f500c26c3a7ff08a135693b442e9f208d1a32dc1452a825e74cbbcea0e1f73583c67802bfe705f1bc7255c833356aaf96e1cfa01ccbe99633aa071021317cfc20210425b410ccdb47d04232bc3de6f9cb5f4efdf3d7475abfafefe5796c0ce2b9375a07cbfb5c328fce4bf6d74ca13e8dc5e6bf03a1341c6e6a00c308168ec8d1a1d65e02a51dd1c00ba43851e8bc80c5975ab7477bd0f018ed7c4e8fd2603d284d46d2204bcfab942c61d3e76132468e31322b697f8d3ba38f0a40f1ed378aef1b2b518a76703cf3acd4324adbc09cb5cf395cbad0e2dbcba16f35df3daadcd2b39cc657f01c7aeff9c472859c67fa1cc9564c32751ed1e055185c53949495a6296e4d9c8c3053b069d205cb0c4ca0202a88a4274eb0a0e4450ba580fb20b36535c0d942ed65cfcb6797e0fcf9f9e91cb447b5e93d4e6593881ff4e92f1808ba4fa1f2e8ad6803c7fa3daa1cf4a7dbed064548e5dff7fd7c17ee00c9d8a722e97fcef5f0e88ce392ee0842d032ce5f53b7bd9c69e6d41251cfdf31ddb2967504ea3a6a770853c8c88ba2516fd45e4014d853f09e73ebe018e331bdf37edacf29f9d809a9eae132134e6a9952cb9284aca7b0822141943681501a181414144eef5050f9e746cd4b2db3de779bd6af07bb0e0b7a2b65e71fdd6ade85b9ad7149979df06bea32930c6a18aa1b962b9c74530c94b05471054b154b6154768f6fd6ca1aa49f58b080f308f889050ba7bf2f2c6b9ebab1ac71faee76b186e96204b8179e88d50beb75d985b514b4a70be0f21468f2a8b96a6ef7659d444d93c09c512f6d933de60deaa0172cd66002f441f30675ea77d2409833ea3366b85caa2f81cad5d34a02cd1bd47170fd813c2b4db298a9b3c50919d41e00668815a2c0cca9f2458d7a0f4a0393849103c6083869b4d4a8ffa0b49d304a3051a5882429236a534484eded93e73bf8409c339e1dea70cb7076735d9547cf6174dd330cc04f2c6c94d0b45162c9f7073fb164d1e655689ea09fe5badadd0d80c1123d1c1115678a93274070a1a58a2a78807253eb1a68d7f9663fb1b029028d1828e80c4bf09b269070162324d13451485a882f90b40e06609529126785a817a0e9d242b521893a994e2069322becd001873649a0b872c51224cd048b242c66a8e3dc115aa031b00c487a0a8cbab97cd91790445596e3ae7eed757bd40c1a301f89c6cbbdb4aaba171663014d964702da2b5446aca719c3dce9b32bc1173932804206a7362b9030878b259e58f141cb9411356d3a0c2ebce0dea2843634cc20032750924041fa1075648a254880d182197bc588946d3a416d96f41668bac01c6683286cdab46901e6e100ba159f17aa280ad04a62d61a42a6aa437267460e09b75f7cba7b5aeb3e1e30b564eda6dd4e432578382cc0b0071558037787b7eeee56b900aac8dce92037d4a7d0abc9e6b37834f5fb27599e4043c99d0edeee1ccf38f914faa7f5677204e24e3f7a2ee4d13271a7db31cc832a105a6f1f5cb16ec7d95a69334fd5ea4ae8c39d3e96edec20334f3a6b4abd698ffc747261913b1d9ce26af52774df6439c2f8354e948c9ac48c172d5c55193117bc428acbe64b5914172097847b74cacee39ceb98f4d33ad7ca913eb44fad9d0b97bd561fb4469ddf074a0e21526b72d2d917e09c44566423c59c39893c6e91275187c5c42285144fa25a83c96507bb9027913881898321c8686103178450c28adaf4429e445d83c9e549c435985cea4d8fbdcef3ba729e5dadca21df7e840b07977f62698af261993b1d7c838599319dd499db0243c5e512c5158f90e24e67fdc42245105f7affc49582877e02642fb5f5138b144cdaf0d7e6ae5dabcfe96dab9c0b4bb041f3656d21eb96d6ae3f7d05a43ca79006398ee3b87204af9f6edd885af28a8d96d12b734eea15b9ec3fb4b283522861e632645a2c54cea8d9b35d04fe4927a54dd494e639aaa74a19a884258a272c64e0b4684f2ee624633cea4f17a1fef426f7a453ea4ac8e582d3d92f3b6cb46bee74d50e77b6ccc8cc05e1dc6983d28e6070c2250b9924559a40aa2d600a28362f4c5972854c8da3983344921543d0b1e205005891b2441155bab0c1a2c6dee3082d9bfefd130b191a1e94e2cea05b4f29012386a61750713b23013276a30627e80aa758ab534a291dbd395bdc2d514a29dd81b5007e2a30ecc083aef3a00391870ab47d7004050175d023f25081b6b77a62dd4892359448a39eb5db90a3c64a8bcb72c468f4fc7c20da90c9687c20250584671d7e80697ceb614ff59aac44b5d010c3e0db0c0004206452d158899730d9d170f96786686700120022a6d8ce4f0763985feb075957253aeb1e98d2d22c9c395c25a529c36c1bbe73f430f14402e6ac73cc1b611841e5a8e1b2830298011379a8407b005d4761326cdc08fbf35ce265a076dbe4f2282386c8c304ad7b8300a157ab5763f08004a05f795e40b51ae590ca51db0499c99123478eb9001248cf287e82995c94a494a49480cc70d941107662883c5ccf90b3f3b4d229b3ce2c78ea4c55a06ed4adb7de7719e4b155e79c575cb142f0b2c695c87366390e0443b17eecf500a10010e07a7cdef759177cfc71eef1cc1bd68d3a46d91c4f90cf53815f4c04deec185fcb3a97419e3a7bf503417147839e4aecf979311c411022f0d4f9734ef591a39d40b6faec58d0adee9b8b98d9c57debb626907526c153679047db2d133cb5df5b67153c75b62e784abf5a6be65aab05338320188a620836f93a9684a7ddf926d25c3791ee5afcdd4ff5799c753a0255ee6b0bbcca79e5c8baf239837e258e2158bd5e3014c3d7ece1cd5aabf7a0b439a3beef1343d7832f158d35e0f94fe03a3ca7accef0d2f8e9aecfa77faa14a8e6acac15739175064170ba8a5f9306faecf9098eaa911dc8b353f63caf24276402713e27f75c0bbe3a6787d4ee291369d7a4740ab93bafb0b968f633fbe7e5f5e6ec2be47a947eed496b8c7e5ae1dcea595c19fced79de24837ad65e23b6f30d06057530087756535d7bb0542bb3bad8e2d12343603ce7f8418265762140acbe9c708438261db317649e2f33147ff9f888890d503dace0a5892b5e6a4730c86186225fb6685204925a799f26d48cc3ece485d37ffe799d1748beb3cfb9156d9c8db74dbcb5fdb51ea08b189e7a7bded1c7dc1ce64b693737932f166db57ae8dc08f62d3982d7571cf0e48902a7ca6d7ac30202074064e1f9e10662be7aad2e7e4009cd191cae408962a516f495ce106bba94497222c64badbaacceeab1f0d5875a684a71d9e2a9c2dcb2a7876fd002c823850b3564e509820ba80ebefa7724031c184c61058c315d88408196263778b1050f4360419178d8c1a3bc850b23dfde3dc0099a2ca4e4b0c31329970b3ed4d161862d4d38d0159e54e1b8054c61b17598db33a5c3f8758b241896725082862ebacc00051249ac9c996a52ab5ca911285021d310ce2d7bb8d26a8deb164b74d8425e9df2750717c407526b0d05b0450e35bc3600ad7f100ee7de36ac672017b5103ba5b1bce5cc54029d3150085a56e78dea3c2c5c201e98b4d605e6acfa28c27c4a81490ba24366bef6a0b406cc5975e2cbb9e52b52cb449844284c1f1d930805cee7bcb16312a1d08d0e984428785ec2784c2214be1a234c2214543f0f984428801f406012a11002200293080531000d984428acdc83796335729179c3c8bc519d1b798579a37a3732d2bc51dd1b998579a3fa37f291915b08917c7591934c60d690589874769d056e51926fe37c5a4b00d2b2d79b4b3d470bb153b2878158fc768cf1e020b09655354086865a568beccd7a6da1a020eb0100bebaeb06b7e45be9c11090965547e224beb54c06b3c1453db04964bdfa8c49f35830285e1a999e356973d622ac1bdf84b4ac0261a0cafa9b94d252b803b80a1ba45f65591617a3136d9cd4b28f8b39a3617391f51b70119c394d13bd93969828b560e0b9dd92957898dcf60e2463d5418e61d2786acee824e2a7b14ac62410bae83e405f81e49029a50f20083a481261b90ae0f54bced095f80b0f079c83a7be125547dcd6913ba5faca45a75ea3c98a1449bfa1833c2bdc92913a27429d8c1217f5122e62c245968cf1e08e32999d23b764246629cd594458fd47f2940a891b3ae88c9434893ea7ce48a610af6919e53653465d4522719cb16f7446b9cd149a933a6539d332e8d93897973c9295da3b5248cb2240126120ea547c8025873010a534d0a9eb98441c67c7a4b19c39a33e34040208b3d938ce279e1225d035906426ea1c456989da98446919652506a26ed47da3de495371bc0ea3a8d5888bbaaf1e420bcd241d514c61944ecaa3110e6e79795eb8250e1e186e8943e6e3418c4669428c79a3ba0c514d29fb5aab5359cb82b85c6a83c704f3d4717c084d8bc1b3ea1e7c95d1a08aa365d56908355c1de4ab8b5b3a797fb8e8c54095ceead58dbae38cac5ceaecb39341174185575c6605f030aba98ccaf3647b17e0dbbbeb6bcd753246c9767bd4dd1607979f48bde52c3786e30a286dfeb06ec4453b6f9d953489e695765b3909663d0fd55ceaedd429ed73eb939223346dd6ecb467de4ecb712c29faa6e5aa9c94446943b4a350da2b69ca531a5a9a5194934ace7fb851d7298e9b6a9a8ce328b593169a4a88b951da4c9ef652337594a7ce555ed34254893169284b85a06794893b9fc75f5e0e7953493c872a79d5ea1c526f6fb9ed6ad476e4a4a929b6c8d718b33ec38f6a3c63cc9231eb9d7f60cb09e677c7613e78fce57694008fbf1c7c85714b8e59ea356ac9980462380db7800c8f912ac05c86d3205598e203e6325c851d8fe1b3c6705a469de3f054cb784ae4e1c524b0e331fc07cc65b8510f99f2913e5efef2213bcee3cc14c473ebb011b633d670e1ceda14ebb1cf617e548b7d240a3e761c368159939530195ecaa6783e6b31b89d71d660966419232b4db1c78e933c45a73a722a89a7e88c7a085a464b0092e692311e753e75ced98d28cf386baf71d6bcb134c17a6942e7a5099e7f5e9aa0f2d204d04b13422f4d10bd3481e526ac1c6c9e71d658dce122cb16f91a670d6473190ec799e2a2fbd4af935fb2bccf1a579f0aececd00798b64372139d5177186cc799b643aa984ccb9a288de12051254f29933ad5c2b5249fe131af35b764a931b4a5f4b30691efe8b68b0d8b46eca9935cf463adccdf5c6ea794524aa9167e90612d83b2aa6d19dfd7cb2018eeca55ab359348e8a76a3e79df2bb273d528a3b34b22250dd5567ec4ab21211df11ae847826aa18bceaa7ec4abadbcbd3f5235daf03c1cdf3150a1c553af9336d51061e64d0f31d0e0065335ea56b4d109f0a5b2713667ed22082094b46f039407f856713bdc4a7a33cd7d40c93e994c06ea395e73596ed45756115fee97162aa7ca884b9d554485623b825a562b2f59f7623c52c091b1cee7fffcea23b450ecb6acbe5a5669b356fdc27a603fe424aad5983406cc5975186c67e74bff0a7e39c137b273aecfa7280e8ac52c83fed46f973917bdbe3b887f64deb2dec17d5f6e3ca87de806750473c2c23ba9b5978bc05f919944f34a79143eacd92d194a7167fcacb20b6bf2f2f4d4412ac5ad3e9d8bc4e7d59ad60bb7f4a79492d5bb1f9b29e0af2d8bf990cb40ef755f414394f5449d60e2b8a95775d0b6b71b175528234c2b810e3aabf3cd92f946480f43995252b8f9866f136ac9f33c1de56b6583e778c65e4e2afe7e75a3965577ea4dcebfdd92946e49486eb7dbed76e31b9d551fa1878e1b13185c1416f9e9aa225c548b1459159925d059f51efb3a308d95f0ac7aedc06b7979882f55349829e62567a1f578c95fbe3abf803b2075f4ac7a257ff4ac92b3674dc2bc3a095c34c3ab7360129d2086cbf076d1cb5985f515e72c2f279aceaf972acf5b5ece2b3e777919aa7cc7cba906f417991384cee3e5c4c283008fc04533481839575f4ea8927bb65157fde48206ea9fb48b3a585f7975de61129dc082d2f9f5eaccc3243aa1d5c3e72e1f54be1305f4d70fa1f3783de104472f83e4e60df618e49c37a857e719bf7983fa6bdc19bb919b37a8b7463b6f50bf639d37a8b3463a6f50eae2c83cdee89e390a3731130daf7e5b9ee7791e0d9299588999d418ade281478adbf3d33b1eae7f961a50e90215e60b2b476ec839b204cd162482f8a1d6eeb22e0264a7b483cc242ea24f9d3529a53c4897c2caa0b7ee8d93d2eadd38e98c996c76ca942953e69c524a29a594524a39b247a594ce2ae73e09a1b3ca3109c5785867672e9a6b564e9e974c86b294087a37021142692b926f94e441ba485c74846947515622c94faa8f0c01370281e19641dfcf7b9fcc5955d15bc3a4cea8046c96b5b1a0548acd4000000000b314003028140c87c442d158340c5449db0314800f879e4668561809e428c9410a1963802106100000002002000333a82000c004692ef8320a6389e4a36d12bd2d029f14334b76049000625b7b03a7d6ad9f493cbbebe7a8bb3813e8d89ce6c314dfe612081f8f3f87eab3beeceb902a8091d9f07e03aadacd1bb1a369b2ba05fbddcc80c20806d70270199e3d1620ef30bb98246ff9390b0e2b3e631be4a28548b9c19d796713fb6ff24f480ba9e2152d03a89db5c1834833ebc0345ac0e3ff58594e3bcd165d634225d5e92489899b513b14c6b575147a19813e4fcdd02e1daf8f842a7bf67414549aa102595e742d2db0e66368b35cf8fe1944574425b1a0cc55fba2b44bd6953a25ee9e0c42c50ef09ad560258499f9c52afc805d38dbfecae1b49b1e136ad7eb2171ece396e48ed038e5bd83d13b7684c668b4c1deb8216ccb3aa3e73101f22f805812db839f9640a81eacaba00e5a220136512efa83f87ad073ecc2696abda46b420866a76b4526a2d345d82b45d04070cbb6151cd4fc2d0ea2a0aba7c5aa9fdc6b0e8cb656bb028deabeecd2d719465ac7f769b6fa0810324459945e746e9d6c7b0d7e4b2d733a1b8bd068f85f8ce47232b9f47c12a220f403fecb710e0399016b1b00d9c632fca55c0d26749e28a809f9b9075b005b8fe26e611dd7856795bc9c7709b4d9c6a4b42d097b71e8a7f40e4fabe97fac4f32d24d8d8ff6a85b594a67694330fc6542ac09d9af26b2b6ca28786f854bba8109ff1d32434670c2bee76123605c517e15af8fbaac15cc6cc929a5e73e6912f0f337b32c11468927a36c3dd507094ff187e357815e4c3752f83861a0bbf1557a6bd57a86bc6c9b889d1139b3e4c718fec5140a75efe21382fcc6ceaff47cbdcacba1a95533068a39b80dab702aeebc1ab0e38fe7fd016193acccb145e5bc156b70181276b91f55153c563761e4ce149774f1fb166da808202ee08d489c8f4c38ab73a049b75f6e52e16b24bf124ef123ee015e1068e291ac3acb5f3fe7e6d3e4870be0dfdf3d56cefcfd2b6ee695c5dfe18b5cfd0af0e6d4f0355b8f1254335be781c7c6e91fadc0407cb7354885007956c1444ee75c310932da4efea288534a5de205366c2111b8480a0d4e445d72b64e18962c9e32bfbbd3398a4bbd15c22e70c1604d1425eb05e75dd00e6456557444642e64551d6d469291b0ce0b9aa6a2d702a303c169bd92af653dfc1302f1916a07bb4047b4dbe3d810dd88d1638ebdf8a383ba88f365ceb7b6759480a667d80ec5b31e1c25648f128a070ac57e6d25c98964327b5b339220d3c89af0045291292b434119d4a2c1cf4e87e32f905f54336b0b6b05b80b1f6d4e1a3d49158e49647341f1dc8a8b037532210efb3b3558f1bf52cce487649add58a0d07325bc867fd95674910835de49d380a92b7e7b6b84dbb6fd414f277649d08d10d8453e1f54a32f81535fe00413935df3585bd960fb1161950465342532631dc8365e916fd3a4c8ca59ac61f61cb6100305b726f5f4c29b8986af4c5d253bf39901d2981330929dc8eac58b3b5c8a2b7e80995521c09dd46ff2690aef0bbc79b755188fd55845a1dab279144397fc72a94059ce7f8f82e710d3ac6034151082695f9b8b10e925b8625381ed46ffc905e91667df9154be7e3298fc6e8691415d6aa694de342194010f5b1d1a0b74aea00bb70effa5ebaab1ca7409267d4d4378f8b56201c7a02b670a95160f44514a516ab9bfc69bdb81694ddf331ee3958e335ad4185e985c6b816e18e77062d0c277024b4dab6f560d67a505704807d2a17d448056ab73baaf3731b4a0d9e9eddbd6e87cff8be87335eae9c4dfdeb1882d514e9a850bc86d1739a87ce85196c97af9c34c258c938c75ce272e4d98f43b625db0f0835ffaed7aaecfa75ebd62564fedc4075c2867078ae61659b01287b15d87352f6e02446ee0122e6e318d08801a833a7f3a374ce49c43996b3434f3b83a05c373afd243c4428be39b8f4149b5563ee55d1665033ea9284abdc0d2082b97c96c718b733f97b484783954202eb864d5a02b244dd5eab836b00a79019c0604349f1d009d43556aad5456314c902c6fb1eef1f02b3d85eddff3a7cc4f7ec345ddb61e3bb44131ea1ac7deecfe5697837bef85d85dcdd6e8d93988ade9ac598dc74bb1e2bf0fdc36841fbf199fa413723682c1d9e1b9ab3ee3afaafe356ba5c5ce3bf759012b9dbd556c985efc0460684bde952c95102b63226ae6187f715da0aeef4322b3076d92ccbbf9793e6134c406cdb4593841d7115e3e99af0b41d9f090a58f91a84579c54e647fcc4d046341338fe7332b5aff50bb73ae7ca5e38f52499a4a95c4fb07bebc2977156be839885a95308e5e4f552602005b09d36d93dcf2cdbfc7614f30216b1801d07a2c3e326dc99ec0355652253e576aa5935788fc20d065334b4d5174151cd2bd7ed45aa5e1680a377f31aa06630cf8df68f25939300e7841c1efeae8d23019f9ec7a1d231e493f19037025fc2be433f50a0ba0318f91ecccf79bba7440f2a461d6d1b5d60b4afb94466b9480a2a0e7bc4f9f93ac0646b9b3f5b07cb33f80a56cc66c759386e702d5b0ba5a8d82103e4af0a1b4e7da0303169986a5e18153e35e2b9412824dff11a39527434756b05515438c57c2c07fc136a560d66727ddf84835baabd63b1e37dcf114d325eb00d5997a426a3d6588bf8022beddca660cc8c041c13660e24134ef97dc1497be9884269cc9e79c3c1beb1b080a302c54525a3ed34028a230a4c14c7ca69c25a29bb5ac3671e2b83e300111422ecdd4f1290f7fba1914eb88462743a850717739e258874072ab5a7daa326017dc49ca664b5d1e1e653e36d759c4dc44007aeb4c74b4a193953f5699589455fe0a6b42318787befdf40a02b92ddd47850c40a4ec24530ee0868b8b9870416193976c280026ec8c5203b89b8f7d297a50c85735b5cbd7b8a1c83d250a8461e7335d0778d9bf71aba003e584ab647c9336d98ee5ff007ec19ac23e211f989fb123f9a690a637a54a8609cecd10c38b26920f90d449e9876a43704345d7114a087d84322a6007fda35560b456facfc5f995047f3db88afff0beaf9371d7b10c19e1e727a7ebc4b82fe09bf2b516734498f7f258dda840b75f9463ab22fcfdf09d6cb909d06661e14fca506ca5645072139fc18ecf70230873082a0b7f98ebd2d2caf30badd0dfb1d90726ee0d30f4950c97b11d154b23bb6eece8214193301c9c26b2a443bb9a7d3c4621d811784c87e11c2b5adb3c5d5f2d05610dc3e1449580b6b46b73167aea7587bc15fd661c0e895be44ad4013e14c3426d8477f3330b988d5cb146ec77c06e3ef769160c2f0f51efd65d81e075375f2481abd77c34076c133845f7b2f026d6bafd85b104f58a169fc44d6f3ba640a9874f777aa4b8fb1f69672caa1d00d9da7706401b1728d71c68037b946ef340cbcdc78041332ae7980c8845d3b44d3fd7233e5716c54e7d1d8ff436b8fec0fd9c0b309fc11b01f9a133204c75f0178c8af74f8ba016f005db9822383e1cd9085f8c375e5ad18bfe5fd4d492fe9178e20e114fb38eaf4178c01cf208ccd97f4bd3a022a9278e7da5fb4ab02fecc1ae1f3487b93531f9c21eaf9e89d7b532a335e1c11c79f2ee33302984aff97dd274dee706472133359991ad1db21b2698b9723d7c8abe41518b53b79d69f39b62095bc7a93404f629d8b35a8d67023d164b5157f80e2aec90b4925d113bdfced28910704ad167968629392650a97c36d242dcf859e58f6e3307ebd0d662747394f9435b6d8f7120880fa4cf535d62a370472b21a9f194043d05e728c5dfc0de18b156d97d2b376adcf55ff1c3e18239b60adc4e8d4b179144c97b388f8f85e4084558e7a142b079468281d0977093334bb58365891b9dcfa2e307e5f30474c358867f79935ad35977fe966c8ef4ca17ec9f159959a5fe01536f3d9c23908d9b37308a3a8afb1616db8f582c037daeec81a12cfe9d52475bde221466b1319cfeda3dc149f5611015aa87c6af600d62c97ae436acf36c9a71b47b4146fba1f04480a8ef36613ea6832dbdf8eacf36b1563d08a21e93295a8803a27e91f17ed1e01a4568f755a5b7c854a8692fd64b46afba512ea336ce9aaec2821de2471177ca1ebeb590848a8d3626e2150bee2ddd827dcd96b6d66cdb9d9cf200a9e516d0be27dc205d1943eab3a74f8aadaef8d3f1230d1c11cfa4a33017ca5182a6bb39ee39995abb096b1c1a8edf551b864ccc22f496806e2457027bb2915af8cf4d0942f1ae7ab4aeff72654fd45dec24f752da0dc54b00ad32d27895c10905852836540c51f650d4884158acd33c1b2c8df3054990929aa074a2f94d2b04e9a9323b816cc5c59998124d6f74e94271217d12e7722f52d6b5492f610d023c5daad3682e919924786aaf5718360b31102c20257f93d2be3272d203eebe7c0e7914268e597bdb770c2a594c20a4c92194ba0790232b9aaef31b45fedac03ee1d524c6c3e8e547aa6dfb4811ab6257dced25a690ee000606c95901a6cb25504ca26bf9ecdf927ce33208319901f7b05ceda83def4fca86b6b74ae0517d4ff09d563484568810c1f4284ed8c8ccf430cf016242033ddad319dc3beba16210e9fe5591db8f4632303ad5631bfd361c9f51c90cbfd50e1957bdaad0a2d58567d0d30e604f9ae5f20fdb84bcf0695c46a530627a80e8f45fecaa594a1d063d6e0288a507f73ef11de21b0c9e329801514116d9c4c467bd0d9de933e11f2f6d12cb280b04739b010fcd88813ec35e393c6302dacc078e9922c2f70c0539a3d4466a0ac2a979074bc8e6245d15fa61ca148a644d50f96ba38e7c0ecd44c00b08995715130f6000631dd235f22518f52383213a04189b701ed32f00958e1e94de7e2443c9a1c965984ce55181cd0b68ca312cabac4565a282fead0ae80aebbbb53f3973d26ac02eadaf02a2dd6929d4fa01924e3d66d4bd318319ece8f677844d6621aa3c0408a68a46873a08d4f2a5ec24c040bfb5fc917a5714940b7201fa44bc5ae6ebc51014fecbb48d7cf7e002673747e8a8f5eec7d3322c399aa849062e62adc3af444dc4bfc65e37448249616e99ba6328ace331130d85dd37f888238fd1452591d3982defab8b7a62d3f911a52f832765a19f621f206860e815ea5df5ac5fc10222bca35ed42fa1a076d7f01d9437d0618dc82cf579d99bf407f13fa3060c65d744462045950947b55be1eec16cda2668e9412491ecba3a12761124386b32f55afa4bf96cf4098ab910d81b7fb357db54ef7dfdb21480b8658aa85878ea539dd7b574489190466145d9ffed53926b826cfdaa95f1c1ac894ce7fd15af3adde46048473a9fd222f4b84ddac68eb005aff782c499ba67920f4d064d6de9b90422f41a2e64d484b8620933d27ed1a10a8748c5e1df962b3db954a8f7c1e18653296f362348319d2f483f3f0406c3600dc41459753a77b53170dc8669bf54dba3513d2ef95d28954dd54f8fb8b76d22a9b3ab9ddd15ebfdc452923814ead7447667ceddcd5736313936b56753f0e954cc0ba906c8390a8838de741d3283a9254f6f0fa05f342720839d854b05ef43f23ff895604ba20632bfca2ff5fb4e86d5e7f3c94fb84e5034f8bb0dc66215162413a87d6fb5415a252933316dba133ad7a65e017482ea9bb39f0bc47fb8b8a133ecb334b406cad970e237029b028b0e7a46ac0195c4cf6fd7fbf7219df350fd3430f98364916b2cb62e1c701750f21af944b2f9feeb356acb1a0ae9f007822a883f25f424388b41c0fc16d5a7966079ed1432d37b5362ded9f636d99b30b20853107590bef76e0a84ff2ae6eb41d44ac6febddf9460b2446e9fddb45727c63cdb6f60097e5719527978d5495fbe0114494459b4c65e310bc9a268d5c6fb7af3aa3ffc2ac7c0cf105fbb6442de596ec354d7c215999b6a22c1d6db9b4dcbcbc61addc40350702f599e00ffd75c9c3a9d12174826f8c487ec88d129e18588f61105bf3e2482216978e6672c0eb423fa460a1f28e4946861c79dbdceb3166ef22c991fe0dd6dae8952a845a80dda446f1adf993ec08243e138e24fd72b3c6af62a20f2fb7b848a7a372b5edfe37013552eaf6c05feee506273b0c1966cccc65b5b3a894431a321ec09bc53ef9926112ea5958e28f8234622a141ccdec6055b4b3a273db70df3263dfebd111e9292e1c824841ed822eaf59267cac6fddc391c1b62a3e388238cc16435c336c57dc85a2b15590e222a75b35dbfe3cf26f68281874c487bb809f776771d064e0ceaca81fb1a96004aab46534ff864110f5bcbeaafa34d5b7dec684e114c82a1c3503a644dd31ff646c39134af2b90d265a3b213b6be26c89469ca2b118088fb10e7406c9a3a34a8a5f75a037bb20856e6994ece5fc9bd4d767dbcd52e562d9fa0faa7295a039476a96a800ceb8075b452b56c882868a8c8097982ec026b1bf9c83ec749b4a66cfc5a18a7c5b7b2d6b36f60948599d473c3b773a5311fc8ea4a231896d519411576d66a0a1a54e3fb43be0a3bd7a723a351e4668d87390ebc5cc0a3d8e869e0caac3fa2e68a1a4b94d00ca1a59b495685d5bd56704b09c6c061e1f308b1a44b57edc10a27a65aca8c3f18772f6542dacb17c66fe600fc13b810cf7851ba66ab5d87ac73990e291c4601df413e41c5704f5d6564abd18730cd2c07bf8c60d1b60371231f68d59ec96bc21d6fd89cab352bbb9cf37bb3e3abc924c6c6afdba05421dd06a931251b6f8050d63cb80fa93719b85246b7a29837c68a577c665532d21c17278fa5283d4d3db95bdbbf51563cdd051a3d4c6d52f63385060094815fb3cdcd824cc3d5a890710f971a7f9c0965ebbbc61f2069180b9cfc95b2dbc573ac3623af72a714ce87c390a57cefbf1ae8598d7a7db9ec91c2fbf1b97a4398724363fe26cf630df03b5f46a4fc6112852c6cd9e28e0a03d16f92c8c721c613e366f284f0569c448c20d35aa377c4996184dbcbde3540e70602bf9c8d897be5fd14617698c8eb60747e237059547c2e6197717639c260d2109847c94a2438578f07e79cd805d10ed5207a2a5aca90b0f3bddbbc553792786dd1c3131bdd9f06bd211416d736d938d2920370a32223446f8f15f406200e8f7e4c89939bdd17f0682c9a32df1f55b3785ae1293ad895b1787a51bda6be7387093f54cde2bb092e8853a10ef637a94223b2760ada3ee03f681de4e412b79a17d07a86e37d54fce1f978c26922413abb7a5c5421c5899d91828564af46a1bd56f096bcd9cc2076fe48a09b71c6443017970e25daaa92fb05cc79dd24b115ac68db012a954675d291436be807cf0abca3c739be80db9689d4d1c13a64659d8795055e1b8a2d4b21b5b298bd56f2aa0bebd4039931984c44fa246a74757560352b27d79d16fc32ad166317917e08632a979a05efae8712c4c211c7317eb7c546e51240aa9c88ba50ed9f2fdaa4e12bea8d475d37dc84267eb6eca0a1093ac511bac6f46f697412a347554150dc70e201499c6d7b5a739f5d60d31b3ccd65c326f9acf48941a17a25249e6674a2009b865d99dbbbfb8aab73dd938d2e752d4d01e23b10f5fe52598d9bd594c113f98a9b17b4e58cad5c806192ed5838e969e589d12122478eee6506f031bdafb55346a672f5d3d386f0504bf63d12acc024bae1ef00e2e55244117ada4fb549f8824ad7f60c3d6f63ea10b79423ff53887ebd56ddf1132fd5d51f9e42c833ab88631e0c970666f3083ef92fc8a89672e401b488598d17c89c684a18cf802b6c5c597e8cb9b2141dc8dd05793ea46e756480f53d26cb3f3a6d48a9634be4acc95b96420afcfbf44c87d78bf810111010498b344a4bb5932ec7dd589e27f64f4fe6bc9ea030ec092f4cf6d5547e02d623a01e7ee07379af30af625bb9a45a76e7492f93e53ea7e5960423238e6b23f7b6887f393b08633130b156db508110222a462ede1a11c0ea4c211fe250f885d675ca7c5f1cd0c275c77f0d602bdba3991a4f4e237e403152237f3aae3b4f7840d44c5625e5fa91540de5549a17e8c1878a11932659e9a82b67b2304db4dd234f69e06deb1510a8208f3deec311396f0e307ea4dd7d187decc11958a1b9097420efd3cdf79e4e21ca680275dd14e978109cde939af773318c86d64e408b51aed18581675c23108115d840313084348b9454be49b64fe24845690347a5d9e562c5734cf2c2599b6e7b0d70378251104d8182e8ca3dd47f7e0286c2053d314603d47579d59306502911848b6c8149946b2fecb9162e009e5fe1ff0f22c601688ab29a03d08a0b5e1b3846628c2b5306d82057704dabc3852a6adb5eafa468ff5424517dae9fc6374bf31790ec74185c6a92d5f8a88f75bb3a7f83dcc74948d1efe0002d9e72904d05d332018b2215d5331c30078c6c6af5730f30df22400ce4b2c32bac7fe4a73fc70582ce2981e970615904aa6f863276c9df0196e0f6b704414e93380335c6e162719cb181d888029db1e0f85d2ab45e5f5a40e31a094e51802b94e376244bbdd15436a310c2fdfe3bc749514695bd069a72e6d25d51a55014bea52b2994068d9ec40147c4795656c5daaff2e69bb07f5ac166c9f5a44d5d647a667f0215984032b00b28238266c182e2183a995412ac697a1253f06e0eb8335374db92836e76616ec80d2d064a1bd969ced05cebe73e6d47e252ece69af7b96f30b7acc03e7dc4cd0d2273d59a9e6bb862e642f4272668e6760175268570dc71b3e66d48e5c5bc5f62e30da88c7d92a06c9d8a2be4d7470e44243043166456d620f782dc488fca28574b4e322f3bf614e695b98cd80dad8ea667c4bec33d71036ca815694c87bb8033794055989becff7b2ec88524cad2f5692cc677c17326fd3d91c557f2790d65c99660a3cca0a49467d5d244d318761f52199bd3a70a959c127816180b31b124d7257b9c6735305e406f124e2f26047279a0080cfae0ee793dfd7b00203c089f378f89aac82a627e861cd5c83b0e13414e63c7e10d89591f094c05049bd223d5c0f41815f3d1986ae380f864d16b061a2d8ee0067bc7b0ab38781e3326c2758767ae767147c0de541d05686b92d0f635ac1d462e576ec5af8023d030f02421d487b2d4562401ee166eddb01488956042b4111a26a4c0ecd39e59f00b06fb6a469100042f39bbb6d3d5c2126167c688b5747635c2987f50a13953746dbfc802704362a94cd63b91474352436ae9f5aa7226820c08803eae269ec96b34cc562ef69dd7fe45ade86a18f54bdf7f08f1541e2af71a5f724d549b38958747b6e7462da94d0d85fb827a680eef75e5e65f99d8686a7f06c8695cdead08426d4fc67d993ff68c514cdab3144b41ccd88ea5486fe4a08cafdd77faf81f1f9c307b9a044a087535b150ae2033498a150b9f991742b5eea48e27f9a22a4c626163e38cf20fe6abbf2bc6b84c922905087efe58fc42e9e65799bb2cbfaabe164f30ecddee5f8723c91e189f5ebe54ac9596345eb7fb55580109902016efab55d32b529bd72483ae361e8c61425c7b492a5a46f9fc51bf03b8ded5e65049113c37309d1975ca08bdcab52adf744df2c22cdf6b43c57e4500d699d861448aca71c22703d62b2c834540dc607cf33ab44de586e138013c8ed1ffcc04a59045338735b673aa30f954b34aa43e0170c874f264be924a9df0f19fba8b3ac586ed273d49493aef141b916fcca9483b0b3f801661cfea9df6927b4f925e99b2b2f0387fea242ba92fa70e426cda58081e283367dba38842edbc7994a79de4b36c447873e058c47ff95345dc0ee7ed9bafed193d39a0d702669d1a0b844d230424046d0c8b696e22d7f398acd419a241a4ca1086e209363d1d29a6c6b609f272d35569ef7be5ce4d9cfbc2d0512203fc04e8853ed465e94230e4b97d48d198a6b3f2cb3819eb0dbe2acfb0119c332a683ec9473c862e380007b18cc6b5d03f10bb5a205ec09f84c2a8c4b34b2543ea9b95a6bd11806381fd4c8e4dfd4e9a102590d0a23b3e26794b864c956997103a5e1851fa6e497801223a4758ae6589a2f7fc3be5801c6b00020c0ec4d90c78d00cf3b352ecc60106e3a5fd92103373a86db92e09847f20fd3bad95106bc70d98785767e34600e064af12d811682c5e347e7d004b025d9e06fed14de8470fd42438480e529aaf6c573f4858c3217e41a515b2a13b49b72d04b51ed13290cb25eaad5616f458a25a4a91e7d5ffa1d05fb61a6899b5420f670e6cdf2c9c5fe6f629b29e550c46c3d0927d1a42cc69f8b14a98030b4546252317716a381a98baf6b3e9515a19d6e529e1af2e0c98f52457b30235db11650911503458779f1a05d55155ac9c249473e996dfcb794cf40a44d5ab3f42bed71c8bcb917dcc99035201244026b2283c21ec193605c8893b8225e772c725b4e6f9491237097b93d1c7fe3df2fd26b10b29d11a1c4302ac388c35dc7a156eb94d231895cc448dc82add36c9b6eb163d8c4e42411fad3ef2a0e17dcbd04c3140dd42f5f0ca44581c29959d94ce64fdefa3951128d06eae31c11ada5359e540d7d387324d785b48c0a7ea22f8f8c7422276fd348fcc3be34ddb510fbcf81765c8492177f3af5cc2fe61291032f72c381cb64c45ad2ad8773dd465a146792258d0d6a2bd6c489a0fde9dd677341b604eb4e4b374f209c6824d3a2ee82a8489f2e3cb055154cc3e0e2d2ae73909eef31a5e46517be9ac452637ff256837518dcacf4122b45b719b1070077223cdb0ea298b9f9f97fdca32e70ecc63435e57519cc028ec4ae2c3a6c862878e97747dfdf86043a4f1023dd547a7c1ebff4e455ca708e29c4a0859d8c012c6982dc63c76a3a0172f55d86e8e19536c107eef3ba2fb31e557f74a728bd6130b146bfa0887508282d2bfe2da8bbbf868bd8a47e81403a055241e0e5e4fac10b901a44f077104417d9a5f1373a5d6a5a6ddeb0e3062da55fa28519edbd117b0903872ec9d43f36c967c61cca2633d61fc5fa7bcb9c0e38b626bb7c124181e4323fb08541871eb0f2d8e3fecc58e049f98ed81293711277add920a587655278e93f6c22aa829c7a553cd452d6882dcaac52d5242a652b0b1b67a7a7f0a71755841db29e04eeabe6f41354818a1573deab65961eb994d88578c9983f114d052fad0e02243177261538f213848ad7ed52337ca0cb715aaf1063a25b2ac24a3593cc89495fc36406c66181ab0797305aae91972b7f4d007c727b0866970fc98546cb29b62915303e44a0a481520c582c8c15f089f3aeafa247533cd11b5a16f8d988ea8e989dabe2a308237ea13651a51e0c6b41044793b40fc604f857ff38dd7dfabb0e901223588d3b5ed6d64f940286b16d99eb732879701b913fad2861459134542ca0589de9d50ad2cdfac5498067398e1d67895ad23115ac15bad5a9a462c6de4b5dff3bd60f2e94e148703e0f25eae973ac85dd6b2e9b3817d182656cce4a3383173b2eddf9bc1a1857b421b1771f02481b9e02e279d270fb6e40c8d0efd2f44f0cb1d6f0fc632997beb284046bc852eb14d950a4c0281cd716506ab2f8abdeb73e1d06b93d8459949351cc5676705cb4e053076820f3bfb918518ccc63802cb0ba0828d031d8dcd610768ad8a6acdbfceb03ffe1d02f0d0b7a40a8fbe1e7da16b4afd2128826f4aaf1d5cb02f0b16474cad5a9fa8dff96cc9d063dd069bb3ce4ce54de48337873463fc7d2bd3bdf1c88c746d1a96c62191908a3e0890e5bfd4114d22cd80ec07b670a53c3f08f482826e742bc06b4aa7f4693c1d60576069545f90e245db1e3e91e15475cce6693d8cf0893d5df3f5ffb1e330c2cdbace82c4d09ee3e932dfa3ed1b375bdfb36c16f3388e8b91a6c923aba8a8caed12f53d15718e01fbfa0d240cbf0d9f82384f72bfcfc8463c9d9f753fa2f8b99ca40f00a80273c3f93c900a3766c574c2aac839d1a2a6d40d495bd6f953b5d88136a971db418e9cbce9b28ea37046f5c6ef63e68f2914117abaef12773121443a0f79564f73945707a6cdc012d3cd055c5378bcebfab9ede8fd2fae51f4ee4921c72943c88aaaa8d58b3876e8fc31f5448d9e6f831096524e0888e28214a0f569cc5d71cb0f141a247f47d59a52966be000e82e1ce55c9ff074ef5c9304fda46767ceb5845c41458a5d7f94ebb4c2389797de2e6c8dbdaaa927cf4f505de3812a8bdc23f2b0e94868e0e3afab3a6f8215589243ca15ab28fc0cdd30aea3de3b29ac71655d84a507061056858b5ef5163445e154edac499ad7375028ab491c81e263941407d7a0e30f1851360db95fb9e767ff802bdd91c17dd7231d4ac0dde6d6509a2c6b4ce53846527aae74f800214a4b4f3747b2b2a020d07371f864f1417630360063214945952ab6ea40a2ea586cd3de546e99ffe8cc382351d6ba77a75eac09b2c8137a09189c0c093a446ceb1ab58770fb5def5a08a1f40cd4efdb5a3f491e26fa6ea10bae8c9780100f0ca01bc97333a2a031634b28bacc5a4255d601e1ca146dd7ee0b99249316059b6a3079f1181b3e598c88eac061a4bcf18fcd2e8314f9978cc2f37ee19c215671e63540fa677140a263dcf7e9b24ac6b615fdff52367d5cb9b238ef777817ed36132c1b3f13a28ca009f18705b1d1418a8a6745616ba2da456a4b1880cd2338b6266148a98decd3af76397d135c6d953ba1a3820d3967a9ada93480b5d725c9d9ceafc5781c2041ddd7484217b9525b5f13db34e450b63dd050b187b3dd961520a4da6eda88e1b81abbb0af39da0d76ca7df81780bc52db330e56aeda0e2429b5bdd7f75ce62caf1a248c41db182f93ee8ad9023abe8996fe30ff1c9b471b1b05b602a8f51c895993143aeb697a70e1d90ba9279ae15cf20ac2c64532d079ed4e5ed07af1c4cf8f3051e5dc416477e1749786efe95720bb8e6ea40e65c7b70448643cc46a27cccdad6886835244f0224cd6e2795aa08b985a363b2e2ac2335ae56682c4ad49ee05d121fceef923255f00a77548beb2637d9fe1b58ed67c99d12fa313674737ecd99650a7d6506e244a945d9bfa6c52109adae0fe9781a2e157cc71c4ba23e1de8fcc3c0f1574e2fc837a08adf2038e1b90a43f7bb740ae03a872538a422ee0b6e8aca28a62dfed92d0adb99ed814a51313c37d90de30a2052d33ffb78f52ac87f498fa5a0955c6c0cdda6f26d4168c6f6d08033944e4eea7451918a884add0cca24a98672a01340a44269a0959dd407e90598c5b155121a32a818aeff7db33317944cd1c21170e05ea0453d26801f3a08bb9c3a5d4bf2a209a8de9a6899459d2f2446ea7adfd78f22789f7cb032418f1ebfacf34c541e4ccb76d81e774192e036305967467c7b0641837da8de1d93a79dc200ef0bc92a13e763acede354923bd7f8be4688c7b52f97edfac8a86d3a761e1953ac68a9ccd181af5102da1a83fda2d39e47d581e663a131d8593be66605b5789a2f53dcc1d0b02125af531bf8389550cf17024b2fd4ecaa28d3b7a9095654e2c6f4458feccea849c038aeb94f050d287986dd4969c21f5223add46eb9a0ed94b7e39759531cd25304b889b58596348b5ad89f34556c9fa86faa1784679cb17f6242dbc612c99446a63886dbef4b02cb7969139c062be007d3a512e5cb5a7d9f20ff37906d7474fe847e73102957acc70475f3e4e50e84a0c8d052cf9e003c5f16468a29bd47fc85514eecc07c9ddd40f12ad5f9ad8f567c78a09f444cf83c59c193ad078e48fb8629701b48e972aa7130afa48f54a9024c51bd88f4cb04eaa7422f1ea59f6f04a9093376328e9b1859351a869b78b5e7063f6437f86b3861defe23ff8b41f0374517c68f2f5e69eae5ca67584700fc95fd702f2b3b196dbf125855d4119cff89140ac940a6ec7e5381ccbd3a3978c317a0f5d700cc634130ffaede986838a6613be0f66cb1416d2046c2a65e45ed8ed169323f3af651e669c1d50be875521f10c0e86917c547d1245a9f9f54129fd7fb93648fddda06989c462cc1bcf0b1cb97bcdd475a7e61e99f66aff522e58e360832069a8c2d442393e5dc56d44b9ee139daad0f52cd1f26b2ee5b20184c6274557a925eb9939c2098c5df6628bda044cb15622d0205fbb2598cd2e830027a55e490ba996ae10105fc0a4eca8874ef66821d8e7b5758f7f09d1d405d778a600232b5eee2a846be05f267dd8ee53fa708eb06e6c1d8245871e14926d29ed0352053bf74309171237f022ad1f2c1d90ddd8329ec21cd8d2f48e66844e0c9ad10eb2d0c6d05c3dc68cad5b8914e4082a0db2339bd5cdeb71283cfc8a29ca68e1b2bd080c37479e5c3624391ff087720a1166d4aa2cc361d264721614ac5d9cd58e95f2758d13c6cf238b3abc00638cd0f06aac949c198aabf329c48744cf9be6b9832cd1f79f32542fd0bc326e1cdf5e202cd96e28ada80a1e0859fef67aa82615ef9f959c3f28a6e3c24b6701a6ae7a4c3b7a712d985f44fb5f95d3c9e45de1989bfc69f0f52cb8326e5a481ccb941075c27a1ca6654a4ba94c4969dc5f099af47a0f83620794c73194b755de69a3c8a9bf60b555d70cd8644dd185b2607ab3caa278a75c81f412b0462c7c3a06ac1947e6f99aca6f6788166272924d827e13d0fccec32c1cb97cf84280f2f90e89565f38c9a2d2dc0ba0cc532946404324e9660dba87d151ae10288caae5182260ef50fa0e648d8d053157e4117e8470989a2f72445351d61ec33aa1cdbc3280e14b5eb0d033c62bec7cfa4e6452001085ca25c10598c130ce33a184b3f8ff3c0eea686b7d1e9d32ee4692fa821590bfbc381c67cea033209a15a5dd48d0c783b89a7413b725114633e9b27f19b12f9979c825b2e45142c1c368c4aa91b5b4bd6f2a59c6fee8dcbdd72d0ae723e2aa974deb3c70af6a6ed98d04164f487d5c3e1e9b878439a3f9e200e2574bed2612e96852a6d02dea9165710f8e9bfa4f81f2c9454bca56a2fadb67237d5c15a04008dbac9bc32c6d47c2b759edfef4a192f5ccfbde2b78cfb0e354b21b134e2f422f8e606ec9a5d3a551bbbc068afa13bd5e11469fa06b5c41c1015aab21fe95865f9f2e6e8a40bdd3d53bf03456b151dc204d6ade1586d31b61eaa8f6f61d8352f40d46760ef9ac229c7a23843eb391ef7e024ea6e238024e6adf0ac2e8f540c2a8f637272c28b746a07f560e6bbd0d3487b83af2ae8036b062a39f3eda40ed596d58bd3910b8df051f45c1511458eff2fb593d3c7a4568517acd692a23f8089edd29cbe1ef66f8dd18e1961c47b55b627431c533607472f4b81ff6c6078afb5f15a4281a85daa982f93d91eb2d0d1d9aa837bab921a9888ec781a6d00936c220e867cdd7ed7037ee607947b5561da52355336ba55fdfea61a8f781d0b7b5ed82242f38514d391741247b4a1b4d8bba4888998c514473bca99efcc3dc9d88f54c1b414369f747552a0d9de3c88f14f8e7211a1165fefee8c577146b298867d95027702a43c890a0842d342c0f8b620f3388b8c99a70d5048a86a2e6cd601b04e65d0b0ecfcb34db549c42be5151324c97014294e4fba6054020963e17209dbe8cc1fb0c340759cdfedd3166e19e15fb2e1183207e51bcaf93d330e26aeda1619b39a807b841541a2d54b6210a14b8c8af4f42532cc28b4091aad5f58a364a5d30d17e5102f8c47fd651d3f5318c52e501834d8280275246add7b8229b5d965cd48753c0ab112cd3561ce52401476ecc5937da96089dd9ca4dff7f92b42cb7e9eccda079f1366aef31ba09ff3b69f3401ca68d575bf05c1f57860906bfc825b81a03b00b969aad60bce1629d6c5a63ca332af98e0e79a34eae51a58fa3ebb5d7779f39c4790034352f6ef6acc19c96ff2531453250b81d0cbc9e4546a64d57f137e05dcc32e914ec3ee2b6fb0406e4939a8d1be016e630bbe43fb91408d2091aafe34d313a9d4647bea3255f8c2ef03e6476c121ec5c979c584bccb5460ae8e8ad4dab3b38f7f55892541926127b6e3555d97fb85b1dbba78e982693fab0bb795c1d7938d2657d7605c06200acdf7a15cc93d56a5c968793db8e396bffb886da7d5ee1e9435aeb92c992d5cfa6e3b230a04819d78955d492b9e098fd5ab80891b878303afacd77ae3e56c455834a2647ea9643742b43f73f1713dab94ae62401a77798667d01360086120c82f55aa8d9ad3cd213c501cc6ccf1abc02e78056fed7ad6a4dbd3bb38e590d5c7406635a7d3ab55583a0b89e04012d40a417b22812caf15c5b5d8845b6c42cefd1e290035085802a6f192ff54c7fe25289ea6d3547334b99f2d4a0ada27ffeee9d01cbcb28225055b12007b84d3fd026be005fb8a0e40ade051fba18f27a42c469a968e798ed82d041fcd140c228dfb921bb8c457763b5d57a819f64b879e168aca8d7d7fa6ccc15dbebd45a2a29ea08894d40f02a8f54bea85260a2ba46f80d3a040483c2d6320555132d4d6e3b858e76a65e6eb22f080df83a600d09dc97a561280f891bba7383cf8691b059e1aa1a4377a2b0065ed87bd12d6e491a7a647f465e066cdaff8282571423b6f32aebd5e9c5b15f486e9bda3fdfb37f2e2c6df9b1e4cde98fea97c471364ed757c9596d5580f9dcbb897a0fe7d8e70b36c4ef9a3b2cf5059b2eb3a212805a09ccc37cbb3c6b44636f801b70546348bf3bd3af1c233610b771485767b804658981c684250deddb35c126ceada0bad83ce58e74aa853afa191ac02dc48a5195367fa32297e236b759d670008c25dae6d54c59d20e925f4adbeaeffa2772201e713a54d718f4ccc32763d9a9f053ad9ae6cff87f7f63465a0a83dd9f01e436367a3de439b0ddf0a35e681a68cdd3728571da8921c350ea36ea8650e615fe4dacaa07024364336d20c6093b51f272065a73fad90b250701aea7e95598ec7f7efd0b7eca3afb909cfe819a639a392b855d8a54f86f8dd3f20fec25d1698c9bb7bca682f953384391af50479a60ba28aedaddd2c078d10bc616995fccfc63df35f87b4a92e8898b80a81d7fd6ff4bb2a8da8d0035dee7af096f9a9d9b0ac6afad2df264907aed061daf1d3a38b78947e727098bf70f22a0e9fe69e429b517dddd31872d18379019493c75570327193be5b15a7d42a2854d373dbeede0a8e43c795f146cd76f1a241296f48a5c41167d3da722c0eed3ca1399f2792aba21bed6783e3441cba8986d3f9ec5fbadb603882e4c3f9a8484786245245a09f751bd104844827c957044971269d91a8759eec51312df587c167b302d1ea4abf475b36c033b0e070a119b936ed8e30c7335c9613f56c1086b2fb34e870a17db5752188f0c3c765247640753bdcb5a609977381cb0e5c280090f22bb6f0990e269c1027337695026b068a932558487e0c8aea421e5c18d5282a8199d5a50f089672cc67e737f083302fa78c78d4647c06aac4a3247dc93a79fe77266442034fd71a29c572c7c675c84bbb9226af821130d0a44323593111769e851e4d9364ab9f2e14a873f947b248dd194a030c0a12f1290035ff2f50db806bc0a25de519eaf36eb2e91869620f0c065655e6cb3f2657a532c7434a3f73c856614dafd57ff53b6390f11522e026634d408ab1df1f69e065219401e9aad68ff675e972251f5235ac9cbdd628381008a30fd612e69d03ad1af10a976daa1cfe26ccbf328fad0f1050e69b68c6c51c63c068807b19d06080eab98825b60063907bd0f623bbf6e5cfc72b1c957ffd6f2b2b5fda8e6595f70dba80e9689a422854564218ab7106294fe97747423d8c39d4495aa7936fb627a7500bcda0f1a295666d8f0bfa79455f89acb46be99ff993e855062c6f0374b75fff001318c249c063d0d0f547cbd9791fd07268f7c67e48b55853ebbdb9d39336c458d08a28749e4262afa0d1ab8e52862dfdee773ce712cefb9113871d19c4196b5e87bcca915d29cbf0c91f10a8bccb9ead244040d7ce275d9be772baab84139a3219393cab681b71237f8761faa54d483d687c78b7c83948717855564965e24f12f4471c9460a73ddc1a42c5035545a7a403591e406a7a071ed0a930267a473142b5ad7509d4819d59b74b0959a0f48f007c1341c96d75dbc0336659e6957d2de465771f6b09d466bceaf3f55e593d8efae35000ca22c55ac3eb638230ece39f0cd33bd853169cadd60c8a5dcb5e7cd016f7b066786adee7b1d2bbbdf4cb1489f267ba285af36cf5f2528a675821f5652410918b564e4b12832ae7707838582c8314539e2e995cd4bec05f04062f888bb378c25e36862b7620830b5b6f2a9f21b1becf8b0a766c4b4fca03d46dbe45e4bf44198359d398881ce53e6584f8cec4629bd2c733a1f0857b639871c47478491870364faaae453e79ca13c1a7f9bce754b7ca16f62779d295d10c0f9d68b0c0700cd2af03e457bdf0db5a5def9525e03548609cb049744e7c2b70293b630a1251d45f606d324268030df3731cea53fa093b7f7ccbbe8d9ae9e7e93d2ba1b891b8981df9f110dd10b0652a88b0f1aeb372bf826fe9a1a51605d8af9f71fa5d3e80e6226bd58bc48e5a42a2fa7336b22be44dc2e5bbca68fce2dca9927fa9b87c00db4d13ba8824f4fdcbc60ff21c8905d974ca670dd5c365a22652f6ce641cce48998ee64661f185e2cfc0e7cdc17b61b07643a1295d5420cfbe277e3905e66707bd9176be5281440b05601cd1cb26b84e53a00b70b38ab49b44b87bea7a276aa6214f5cf517498553ce5a34cc38fee3494693a354c7ba38e949f6eb70496620c19846aada9332bb40aec077700bb58142fcf9f20cf753d72500c68e4fec2773bcca0f787ea84311c412f02950e26e3c3e4a717683f3bcca656b36830146babace8e3b4ad739da3623548cfc532963f06224b91945999bece6d64c23dbe842a322b153889ebfb59f4d640ba56226ec70678ba9ad4367fd195d0bbcc70a91287f1001e109c7f58f83145c87cd7e716447b089d02d31f43405b4322b862083f6ce1648863e240d1351245a30e4574aca15aba6456b330c8eb6771355e4735fdc628f05c98144983ce6db7f107e08284e14dd5321920b0a1c75e3353f95faf87d1135f9592501aa5ac4f1cf7493223d45a5536569b7de767e9868369360e3058cdfa49b8cb549ea086ac8b0d19e114286744800cc1a0fb7227839601dd7212356b1c67a97f4b5393845e8580f7fbb8591e06d9151f30b7ad58c5fec0256dce4408081f2dc1eed3c1e73bbad43bd9330af2e8ef4b1245bc052d48c042c08dd6b757a939acc9db08db77146cd48418d485ae663fceee818565c3f5736bb85e114956ed7e3d0b7da0114e80f4d086b885720f01af3e30dc2983c437785f77752949791badc6ee148bc6823bd91658fee3cdb3cb5a9b9334b37394009ad9c7e3fcf52b207278dfcbefa92d2216f5da3a0637e7d2ada5fa09598d96e8f31fd401acde1e448ceb570b4d6e1c9b7785c6c732ed96c024a72ebabf4952c2c564f122ba9d3b440453a9bdecd620af1aaf80518a222e29c8384baf921dc2e0eca8437a0778bed25f9ab29c05039b58877e5c88d3cda8b7467cdd8f488502956362d003bc1db0abfc3da7a0f0b5ba139a551c1a77624e469ec8ed8830fbaff2361ad55182c11734516c65464ae7baf8567c8a6bc69b9fb04ef717c45dbd6571f098046206f45b9b705e2f6d0c3e9c2fe9369f79ee468d2370142c73a3d4d2e3f75ada9ae3b28dc095aa1397457f9747e832af01bcc4ccf876321a5586cc6c62d6c1739c9ae616ec4caa9d622ccd2b3ffff7cbdac0d021bf58d188e329f953673701844102da50e3118a127b225fbc91363398bd0fa3755881a13031848af443aa41a11fa3ab30007d9856e1a6967a8f092e89c050f4adbc659eef2d57e0a5486cd94c6fe5ee986cf7b518970716ff052459774e6ea96afbf35a838925413b467e446d31cf4d56c8e8d3589f3c43e9d587bf858ec28c1bf405239933130ce61bbd9173713372010eb216360401996283a92eac0f44a43ecc8d00829c67b1abe85c5473b81d6061cec196eed953a18b0963eb61b486991eb2ac379a1b523e43bf5874076f59ec94ebfdd9dca8c0b66eb968c53eb2ea6d484c5a11b8e52ed4a7d994dc9631c8cbc5684e2f46eb1f58e83fabf54d02a19557a1f200a273bcdf5696f8399b3f2a80843b1541bced6f1bc196f4c3207bf2fe590d1e11da425f5de91842f65edc518d70a201869ce6799560385bddc2acee5ab8d8e7f86493e6a04ab9d52518c44a4a101ab620d097b22be90a8a00552deab9c53506f1ef21b1bfcc67a83d640ee1c93de0af65ce17651ff866470f38d308b0c27817600e1117b684db837743e79bda21491b6f56fa57031fc83eae5c47ca4cb9a8cbb31e423b25f6459b0c74d81fb5ee6f79c904577bd557d736e2013cb9274033eddc5a8a88990e176640d9130e7484850999a7bf3fd16a86443b20e7c53a7a92ce0b7223e90512cd92b9bc60d593c15483bfda22806a45e5fb777526405b98c3211ec7b26bf8a749ef0e8ded593cfd6b3e4c641b4c53369229cf7d53b8065f82415880b464924963353c4dd50d62483e5354518607bf067916568322a2c6a5820f47e9340fe7f60488c3652a662d650ae98781d2f5741ae90c918f42690b4184424e731b8a8a7ed815443d65e56c6578c634130d9f10a1af6611edaa66342ee6a93c15f911958a225ec6e71866a25fce9749785e92b90762f2f1f9e4739f5c70bed4d86c528886081b231e2e255f09073a681cc5776f8ec101827533aa4e0f31aafba844432b58029826589d52ef0f3fcc5c391666fca8011c270ca445a5ea196e99c9323d4bc3389dbc160aadd28651345e04b3fcf5b2d0ef3ac073512347f15a2fb49a58af459d0e7edbc9fb356531ae9d0a73d4cb41d1044179b1279c687b7f86c6d7804349174906a211276f9b497a03f94be196331af07da0e5aa11e7f140ed2c4727509673620e9baef92cde11f90c735e31413462e0144c795e2147bdff5c0fee510a2fca85b058d0a516bbc5cb567646fcac4c3fb8e054a98bf9cbf93e29349b3d63814a470e7044230bf263807075ae3881f58d8bcba4c7831552f8fc7edf4db231ef857ce7eeb508d5ff74898b7f45884bf4698093b84394d0cf0e79e703eac67c10c6d20e1958191b6a89e22c18fc902676fd3bba0f175f7145d1ddad2311001d823f310c0250d19ffa9f28b80254773a8a44523aa2d11597a7b4257239d01676320ed71d972146630ca1d60a4147e78d9971151b069a026b9ab9cd63d83204b382d6cde0b9b6404845f8ad87ebf048f341026048e69976c7d1f3a8e51cdf9dd11716600ba0f4e02f88c116254e7f81530fc635bbee3d340345f40ae2495665394cd0641cd667e72128269e03da118f860e03e18970fa004038374867f7613a6c46e699fe56c6927078a1d378a70e436214a6dae434e9b40c3db24019c1ed197192a1a6d409cb93d4f56aa80c84b549ec77dad4effc21ef043aa4d83f16201348f7c2b50a62847d0d81a768401308beb22e86a9564843cac5e699a7fc00d9aff2ff4ea45dc41b2b328ed42d1053fd3b6801b202445a0935f76e1c5c780e2a88e457cbb98cf324f768b313ab701375403f3144e6a4d99eca7cc8a8fa838ffd39c9a884a03c1a1b7a4d6932d4c7fb5fe0b83a40062f07c17b8600b201d9874e6aef2b2e08e8d926ebf683935dd90e39a09e31da3962ca08a22765fa7d5264422d929e9951cd3d2dfa9f204c20067481d705a4e42680a809d161382e1d2ba8cee889b30b9d7a259234d8337474fccae2d5d064a6a340448e7f11a9d995de37d613cb280f455f6b98a1fa9388168fa0f0d41d7a7255a6a20d2b288348a80101cd38942062897149a8eb0efb2a70f29be53b71c553d19da0e235cf5d1ce2e4d239d9b6593514a60b03340e4ea148ef51d7273c037beb27d4c8acbfe558a7d56cb43a55435f80b703b0b41e77a6b593b578f5a021585627cfd617822524af2e4e320d9f455886cf8808e542cffdadfc364e1425f6b78a61148dc9c714df210e71e32d4ffd56d110c345362285a4e1f91c372f1a42c58e68092057a705c0fe61d2da4e8e337f2b432c11fa21e2567575226ec47703b9016117f002f21d066f5dc31dbf0179a9f7a6b6ad5403f98edacaf446ad5ce66f544fb68ea726db91f9efeb46e9a0989a7416fee681c7e6803c5e007dd44cfdff722069d692cce1106d069632931be6979a29e11b6e6033d9b136cfcc2bb71f476243a62c7d591d86eab7cf5bb7e234a02da35a33071c318d2839900636b2610bd2598d5563122a6a6cdc673be81321a9a28a307e108066d24b2af24fb9518b03a0d0c270d305c0d1d0c6cff063c530c4ec092c9c53b79b44e7ffc54d5690d9cf019aa5a394fa868e8daa600bb64f8e9bb0034109d0565e5cc048593bd131ccc61f2f566c8fabf6465ef469c58c54fe167311f0307d90314c30484be1721ec894fb45deada167a5d7b5c730b330b265ff6360739e377931a9e0a80bba189c652364bdb6486235f4dc27a18cda7a8b2170bd5509babebd98ed03cd6712c9d8d47eb478ca701162dc173618a116df9ec82841ef4a39e1cc35ab0aac3c6de0f0419f2b681011054d8eef15ce435b19c41d927ca50937da9ea1a820cab73f88c39c82a4bd4d6e015e7d554fd68784f373425344836a6dd829435cfa9db0e99b66979423648bf5f527de4fdff380ec19e06fbb59017505d55b3508296c1349d0fe2cc81252e2a939104d61ae5f5584c60f37df8a0691ca837b458ce7a9a0c844a09d254008fc6dc70e31e4298e40c46e23a47a2ff6ca2a1c81380a42d2f747c35a683dd40a6bf9c08c750e8639940ae0d830321d34892b187fb4f9a4c420c511ec29e75d2b4b3e7b45c212e60e72c17ad8340877cda5d1bb83cb32ea62b1e2913650a8126e0d4cd43855e672e9164c88cdad0810c97b2de23999fecfe0eb1840d677da171f63c2550f3c267ad2cc60f5c881b78da433f0853b24edb1427a69130dadb6c9cf4e5caca039e42349b4d0092152a27f7de2503583f38aced02bf2c2e88e13b3c3a0efce937c2aa3de5f557139cc75c84391208372168a7e43f0474695e9b8152a160dd955c50088d20330578bbb4803f7f9a811e25cd6a41fc7f1e8883f71fba2ffb3d4b97961b820c21a40b94ce60f84cc0c4ff89790ffb6fcc76736d54281e41e5250255227f3416de44f60920ca8a82fb69be1ec83ffe463495d541141a08d71d73f3db7372fb3bd91c27936303838bd8b4db2e6ae0c40ed8c509e95d22580f0c1a7bc9bcd6fae89fc4bb05ee1a2db072045406cc7e98d9e301b5640b246af1fc7ed7cdd74f428ce63fbd720317ab8c352d61efb2841ca55e1148e35523d95ce4dd0a11df4d774db07abcad56c819a19172b57096070b10ab67b18b284ff6aaf4b1507b9287d153c8b80807a52bb11482bd39711aecefa3c1b8da19b204d5ecdc827a04ae4123eea9b683df483020f9d56583f22bf001949670e2237341d2647baad636a02ea4bd6863e200ea45622b1fbc471d24cfc0f93c33412f83d44518cfbce1e256a5ded23b8505baf4bbb923dd521e6f7638e4d3bf81bf6188b72010e085dea89dcc9cf5d75e3344b6446d883f03085edf49a2dcacb72e16781ef284a3d2a9eaa1f1958d1a8887c620fbc0769a4cd9b98f2f65d0ccfd1b12c7f0b11ea0e7fee173882ddecfd90a5b4f554d1ad8a20e59397f0c5500ce789e2541b3aeaf721ac23df2b2c2e54b690b8c9e5e3eb5528ebcef2508f67c77462e1beb8623ee74226bf67521a99eef53a3ad741d5a31c3a570bb67f3cb08005f18b2d4789fbc37466ee7dd5afabb8d6a96c739f8f45aed26fad9a2ab5a6ba03b7a83bb693c963baf3f6dc935075f45407097ddf3d167a0567ec49cfe5f255d4c09b4be97d64acb277f489f4a2351c039979f3c6eb6a269f8da2f2a302bcfb9d191b0a894364be874e923237a3554d331dd14a28df1b67b7c7ad241b78b3374059e3baefc030e3b858331247a805738bbe096f53605cc021d76e5cc7f7701ef648e4fc2347fc66eac346d32429962c7cf53ff10cb8bfe3de8842fc83ca2856979cec9bbe3989a07f18a17b724eb0d88e295fc99b3ba310bde5dfd9cf3913d2d97e8cfc02765a1f544c096769052674356a5e0a8e12eeb8d24671a621aad99f2393b435e6b107dc8805d92430a213909cf1ecde65ce58db7dff454f12a6922734a55bf4edb953049cd5884934b45a1b5078e0f478f63e6bf1ccb15b84dc6ee5bbe38b5f8437fe560cfbea85aef706d7d917fb2e3aa6feeababf9583bcb1c085081d47d17382bb2e211801895a13a5fb6602d9605c8a443de68df77829334b5bc6a479db64ef95647624d0c10aaf137aa60df557051e8c7043d501ae61f575282837fbc2885a7fe1952e3aaedbc931952098698793b9d653f0935e1ee96a9eeaf0a774a2538c4c35977df18e11f4214faf7bea4fe9dc8c7a486bd890e600a38cbc85c6dda12029a43a9c0820fd8b9ee13456a82442ebf9d201919b9836cb570134000716d9ec96312ff43a8e5d13891ddbb69ea42c9b06f0197c062c9f1e5d05d1873e306a11be8e66dbbb5ac86352042fc1a4e2796c277463f496f8345c0a2495cf54229bbbce32d10ba614da962189efd7cca4899cc761dd504174c1b42e8352241aa1e130ba6a6b9e331d347cf6a66ea880b58ab74d9f093188b890f20cb981db1ee9433ac4c2c28bd5d9728f593e0e498c3fe7b78703cd5bbedf805e26c245511751931814017303b1fc85d4cc812cc7497f3b679558140237f0f2fdb77d1b14f7832379c2e9e014b6ab65d782114bcd393f4030bfd19844933efe372825d586310cd01ded7b3a4de645bf27f228e67cb4d3e2f7f67b102e164d949b15bf3f534be647523b9163d538fed1796cf8d71f0c01b8d5e98fd1462bfb75b8d320def9a34cfd9ad3b9d26fb88b5b56a926c84fc5f4a09b1f969af75b6e53469ebcd0f7732bdd52d6ba2196e5fe35804c189fded9464c22aefe0955ce82400a5a6683a7a2c11b3ea4e59e8154bd371b4e445855ec551484ab199d12d1d3f274540abdc3606cb2095819db0f4ae4115d7e9257037ce49606b3e2fbf65c5878375da2bd68835cfc3a6b5d0b6fc0788267ac3400780356143056ce05264b8604f9dbceb3626f610b4c37d1446bf7a054ad528fad1fccd9f777825d6d30abb4b06d0b962d3b95f844e9163d3273b603b0c2fec674f6bbc7fbdc82d31edf68096fb7031b243c809a625de7d9972e8c8438dbf59a95ad04fab4732d1667b81633d3d9d5c4ac8332d4e3480e5e4fe9dd667efbe263279b9fe5fb30372133c9f07f32f5c2765e5069ce7e420cdf26e6b5c6223fe1121b4b22f9dd6b48a3d4c2b8198fb523dfe4f530404e4370228a5e729c6651d3e24655d6e6d4c4236915dbc974134a0a4ba03c763dade7b80b24aac6704733b450a132ea3d9c36fb2862d6100908d69b2c815d59f3f25a432f0c8c2df3bc77160afc8e8209bd4ebe8934d0ada0bf5dc180743205dc760c8b57f86ef112f3e8ef3eabe8663d7b6446d077a65fbdfc089568e2b7f76f5897a84ba86d4424e94ef37ca9e9be5aa1f0e3961092fc74cd1a4369ace28424682e1cb227927ff845b5621da0e95627fd5d11a134325b7477080ef427c61ac52ed081e86bc032ccbad57c5ff0ae54668c82179dbe6aeac727567558e3dc1ac1b502daa073f13c4759905d0c4a591eaae7aef12e5b0e7d3e219cf2b98c4a83e6d45e47bd9ab772fcdcc1a6417302ef38727cc255ac2db3237d7032613f60394ab3638ad58657c9e9aad142124386adc55b631f843b1b5c1faafd6a021a4e7a2e6b6cb7c8b3edc6b061995ed52f9faeb190863a20de186e425b2bf231c49d5dc6ead46f21df7649381454970fbb4f673599bc34a2068bc941c86eca1570f1a9b80d56c74b21ad6a1f3d876c70863d45cbfe2b8653b915d9acaa6d62bfc3a5be60977293e96a84e3f36f10ce2fe1c8bcec8e5479f17d884b9ef46e155e06b16567bfab22ed332d0479fadc0e8f1ebf162c54d2f151ab78a89d07142fca37c6d25d55b7706602fefb6111a52530f23dcea6cd05acfa7b8e1cdae45518e3657a518554318215e1be30615856379d38548dda6797206b5713bc8e68c4eb93c0746bb1b83c96fef60ad48ef6270a944e4fd13bf5b727967da2d5d3709d2aa90af9d065c5f455c5728d3a58a578131778c123c2f8ada68ace717719a0c23c2341b5f33b4a4f5a96c9d62d3c2198d20884ba5d2dc74596335e5f34796ffcb29aa83a4156e5ccdfa2792e8b85f916d87698ad46ac418382efd8863cb3db192d24ffa20ff3319b9ae62915cc12f780d261a4835e597dcee382cfafc132a0168448fdc1a9d80e17d683c6e412ab59ed431fafba3038b949dd3a60902dfbfc12a28fc162031514b57dda77a680c44252443012d6f43ae41736b84e247df709b4505624f636ed4c99aa103319655913d22cd3fa0799df7fe11254704ee438fa7bb27e51e38418fac9c02dbc15815215fab0870f9fc8fab0278eff4afbb0c9964f439cb82d219c8ead018db44540ba3c6f2034937f58160b2b2e454fbffa818ae18e6dd0f50d0f431b38409ad284bd54459312edea151b82f486f6ed040ef138ad0515f7840494014eb6ecec7da32b011cde938fa18b0b71d7eeae0bdd510146eb07f402b5f23c9013b9540f2772f8c823549c55747421a86aa862fa0a6894ec47e96ff0d03bc884982593e839c355f1539d4d0887a72c2ce84467450dd536d0914f44979ccbf849cc2612374b3ee11fe1d0870f01651b91b9c5c4cbbcedec0c9864f2248bd07b27687ccdf73472c4dc8bc9fbdbfd30866b39ffc53c12845a3ce29cc0a031a2cb9540cbbaba9dbb2a81fad9af7c6c8a977dd94876e9ca53eb08693ad711f94b36a8d9aa34f06f960637bac8bdf3c1269a0343e763f77c42b6da78f771e9dcf0c5a9997b453d1d37adce49b43f03b3692532a04c0aaffae6319445286f0f0f837e1d94387f493124e09b0f320ce5e365aaa299882e4c31216ceadb5b9ee1feee35cfd5126e6cb1e2312703a3b7ece665311c1ee945284a98325c9507c3874e56bcb2788b8dbabbe57b4899531056f88dfea4fc5b2b2617920298739daa9004ead30339c2262426794a864d6d1f86d90229c943db931f285640a14ac774631c2d2d2b88ca954f18228952148c2c7fc64995ef39a906022513e0f08649bf159368c4078aee1b3d34de05ebc75e7295a5dee2326ff7634b3a4248edc76090a4cd5970a410b3b9e142e2c28247840386cc8d6d1dbf8448938849685cc58891a3ee796240acf95392e76d48f9330d6b8aae3dfc50a60e5603a465b468279f4b6143d3eef4a680b59190b0ecf116413126d6d2221268f67012730b2281804ffcf698b73c10c731aea6ed9f0823496da2ef89db360b1e73ae11a177834c08dbe5ad66ee7fa80a54e985c3de0d343f2c15fc1c0b519f390091fadbcec315011511aacd6d4d540f48facdb92ea4e4c1a21b2b81e15826d1f32c0cff93c2221a7490855104bc47e28fc4d97e80c729448dcd8b1b798cdb476fd3bfc404a0299813b43f74b4e9d87773f32ff7bbd7a65fa34bbdc51d8ad466a359506e51db1b52185bea75bc6afe39a608a5fd9e3f47afe0b7097736c569556595a5884a43210301da4ffc4e786722242938fcc74d5dd59eac5b67889b06d77bd1c854cd3bebd5bf44e6ddf961cf6f0b096e7dff478eb3807dad88937eaf9e569c1b1c55e8732cd0ebfe53f789f4ae8112b0ecaad23866032d5ce49407a3284ace0ef169271ec063b503c0e65c83b9fb1f79f8fedef9654845f20f0436216e61afbb821728321788f2aa60f699583563642caee02d789f0148244f38920ff1cc22363d4a3bff2325afdd4ebf5d1b1337733574d588822eb03138b727a74a83a4f5a840263f7a3ca39be5323594f1ee9832f8f3f6e19b28107e2f2c52f9320d0ca9e9dbfbfe1f860e2715a4762562300eb937218bd76d1322e04c73101c91de24c876d6c278db35cdd2ddb5013e02203dd8d10a445db5cb49b7b8524fc374deae17520e829c589ff535606cdcf6a2da475c410020c383fb893a61baf56f55eb82d2b0afebb3f435302cb66c868fa2134dae9cb244881c0274d0dcc367555ee1735d80b432a4530982e3d9518761f995231994888ea08bf627442775dd30bdffc9666ca1ca332fa278a682404dd3c5325728db7c06d77341bd65b3a664a3fc476adbf82270274b6e0e962f89cb6f1269d97c310f09c22181d861a351545460a9eddbfd1151fd450ba4de42001f1f6dbb92e58903e73f7df78688cd0305d458149c3c9fef130466849e286d22e86baa55d9e3c9192902d6671082bb1e9f7285307793de2b2e8064db913e63bf5caa8220b342d273a2a748291bc98364138fa306446f9e41ea50f2687aedcad3ba0094dd1f36c33c78a7ef0b8cea9ddc3697c771857cb1e8781041537ba39df89e5f673520a181d70cc5427b0e005894c413066c16719c3cf91558e09a6533e4f7874324983b3fc5a0e1894ff7e0ebcc8683c8cc82dda655c767691a550669e57b229bb4cbf3fd34f2f9a8b4125037c2a661dc22807bfc72ffccfb1802842241ab621582866441e328f910948cc59d07a2c9026546c5cef67fbbef1428c7faf446fa89baf7cb9c6d4f14e5145f083435e8ad68a96a448209c8cc41beb377a95595c61728111c6985c9d722ea66018aeebe67181001739836d0d8c8259006ab2b9f28883285c6930da6efada49ec03653af78b36ed0a94d3f77f084178f30b4733a9c403613cba0fbacb40084b2c9bd6ebf80f2b49f201560e9e0fce9aedc809ef6abc34f01a105d464a6ba1a0b822b82fcdc467a7975316076f9ce0ff0dd95bbdd7091b4ac75e55aeb595f5545addddd55d30dfdac7636f086d3ddb5460409383343675812fc6752ac7ca96eedeed4f8a9a018814f24b07cd8e8281ddb276f90d23093c70fac0492bcd00670d3e78454348a889bd65e2d618b68056b3914f8cbd13e191648ebb5e1d92e519419f485ef67b813efd5857b61047fa7ed05334244c5be51a50114bc131382ffdf2022e605afd621bda84bef83d69d40c53e452fb00777b448dde8bce877804fec62e36c13b22e409680f5e6a7c203b4c4e140a73e59207011241d5c46e6fa27716416bbe00c5e9e43e6c7908c3b262124fea7966c71ed8f288d7dc9bec056c4f4e62efbed492f863544402af1963e6069701c56f8bf623a0101422e30c15b4550a53304bec29b1068787b2bfd82781531cfc7023322c72cd3a7f4ef12d536ca5d7845dc2e84540776f997c430ede6d6c5e4cf300e3800c63923e67e8f2a484ee8dd9b64a5212681bc751535a0f76009b7670254857f890c2d89c6465c03a80185d6eec110193c546553f1cccb4dde2e964ff48905667a4dc90901aa2af8f8146d239421a57337a485731c347169a998ab0a556196f74902b672b606844d955da52fffb3c59e451b04f13dbf8e881b8656f242712855a63bec06c6d0ee51cc471ae341bd4284a02a23d0d254e7b575dce2b5325eaedbbfdd98dc4b923b57a215835a44a830201e20ddd2e4285df7234b7484bd704a6f4c408f192eb740ec9dacac3b7aee4d862bffcd78016cf89bf86be9981dc9dc382b57b3fe1a0b66bf05935cc5ffcb8aac78baa72a4366fa3374a6588f73792b7c6caca808268b8804d7420cdb814173d1eb95aa56269a98784b62ba411290555d73570d1bebd3b91df0570cffd61367890dc654890381554fdf2f9138d726f96507ec371905b65d3d4fd24ffc2b988f81eb80c70df09ddf0577c5323a3cc527a64006af0f00a93f49358cb7b4d1268d26d5f34255af49a71640bac1dc20999a14784c4e42ce8297f4a98e363512b6f079ce15d934c1fc42564f84da8d5a4277933523273e46a17991b3c5c3e421773a0d09e694fa252d3724a816edfe1228e13b557dc4f0ce34101ad224a66cb1aaaadca824e53c8a6c860c093432d450f8dcc6770fcbb32bba3ed30f3e7167483cf0887b19d2e104ecf0dd9103a42ce3bd3dbc864793c2f0aef980827cc8a009c9f60228b0a4643d2a599cd5ca2b8e079872701df6bc2c63add9c21c4e8a25f6d2d7f901a30112de81ec8bc15e23fe9583cdb7f9cdc770831a7ee9a868f91ab4a5416800ec9c193598a611a5bded19dc25f72ca5320d9f1390645339b04287b963dd625188c8e2a69dca8fdb6b42c4f408f6a8c755506a2a11454043b0eb09ad0d117bbe4a335dc0a25c4732b80c34e5373eebaaeaff18a1792d94c72aed200b0c6c5e160ab1f53ae81fc8429b48444e666c48de28278d2c5ac6fd083fadd598ba2f6401f255822f390c0af81895a51dce868dc4cb1565c42665291473870252e1d5366ffe12576b8db8af00506198a4f6276d928c3c590c66e15f8a4545e114bdf6e2fae5362e6d529e2c106a9953bad2a7d89dc372b2467200bece58885ee6ac1944f11b4fa0050aa07931703a04ffc96572a305c0637864d2c76196ec0b19059b607eef239cf01c3e206980e21c199ccb6ae877a78ed97fd35debaa253983feaedd088848efa56942de1e846c4b9a7c432fa6e5920e8fc06b74846bca8dcda4d73f68c9ae0706f1e1d0d6bd0c82dbd3080f273b2f3d2385ddbe4b2f626b63aa9520dddb8a35ae9cd15c76c2411ec20ffc8afc9c07d1c368a382738b5c1d8324bb04a4e98e23b79f8b40596e59809e93a23016fc65bec2cb1120164c63b3b2c8e4b9cb1084c15272ee9ad6a498ec367b00a9f1ce26326edf214758a41aa2e3453467c38908e6edf04c4fb561b671feab66c55f2bc3b77b8e7fc62ea94d8aad9cfa07ac0ed0000e560acbf1cb8f84a54bb583af8d6b7e69954c6ae68877963c675babf254cd8f091f3a129462a376927fc0024caef541f45020125ee7301181f552010bb449bc1a095a34e88894e887977544a890a1fdbae13106b2375f30e60fc133348815644c92ce400cf1789286ead184ae714a30f1689c1833b0127259d9e05fe59d6205f47d95810bdcadd8533bdac8b9c34207242347a020f6063e2ce068c018598e6655f778659a25098830d09c898da9f27b5234d4f7d39de7f31bd7185474a65e3e9f46885355ff3324fb4e5bfb03c7504974cc6cd441443f700070c5bd2fcaa7e2e148fcac26002bd376189d52081c8ef6b98d7375d42487246e22b63d83036f79ab5a94a233258ca8e534bb29548a0a4bc481045c905d102d4ae87d69416e8b459a61474b9019d4f80f0b12314a683503b9085f718e4084dbbba7de02087222117edab46f01b7521efda1270b3e0facee23d228d2d4a9772667722a7efad2efbb3107e1211557a1971a2bd274110c404fe943fe5f2fc0b45636610b6e5e5045f1d4e71c0a8a1672dfd247314115de7e2df07ffc2b116f6fb66557f374b3b6bb293cbbcaaa1aed63b06b74d7544b8081fd710422245e1410e54a2d0b1084039b723c6a8c8348ef2a11bedff22bb4f4cfbebc270c4c250daa1477938a71727f70f6778a564ab8ee851971582d229e6d4649a1218d48b6843b939dee4f335a4012acbb8f43d2c5c7a94a159cdd22882f0d103232d87090510ced22948ed9e9ad8488f3d54b8bed7e5021cafe84f48cfef0513b9246be7ae58d9531e07152c0b965fa2903e6115497394730495a0f65c40ed3a906fb7467ca23ee5a524eb3c6fae70fa96f95a63123fc4077903e450d835ac9663b62d561853e823c91b2d1bc1ff12e3ab4a7fd8fca240c7c8f3f7b57dcfa0a34b7e8527e76c9ffd2fe40407a9a44c21e725dc5601fd3c6d55649e3b7a1c20371aa19aa2db2eb1fa9d713dc5a517db33109fa68100d4dece10da595953463b5dabbd7eb37cd7418bde51219373edb91f745f1db87d83c01dc7a2641ce33362ca4f6689b13a3cdd098af9273509620591e31fa3d094a96e0428ad1eafd27cfbc60ccc51ff06e7d4e1532aad9a7f0e6f115374ea02ea3ba196a523303c5ed739f0395ae6ed03364f0dcd042e0a59b3c7b57f9f058d9ec122261744137d562e4bcf4b82c486aedc690402e14f841e465c40e2817cc4f75eaf93aa7df1a036971f02df1179380d284709643420079568bcab9e04e0cc56d41adb26bdaf87079e3ad7bcdae582e0cc0153e1235f8fc32a4ac9dfd1099db2c78182f710925410c8693f3dabb86a2d9575bea9f9d57bfbf528e5333072aadc856b241eb38285db484af11fbaf029406ecacccf64b625d33fee9c078c4b958392020ddb7889eaa09856dc3d7120ce8e8883c1aef1c0db1443dd89c7227571fff5dab5c8fd3b15080a8542ba90e2a0f8340aa182b2595b13c8dbe89887769df770203afb4b4a5b7b7089a2cd69b8958dbcad22b7b4531b0c425f368a7423f1d93f7cda1a56cb4730f0cf2f76cda5c77358cf0142d84b731cd3d45bb1fd794509b58fb61100a3dbe475e615cd1bed1bff2fb45c584f82c6e89d6699382d1b75fb17307ec43259da0c7106204c64cb44c54b410fda495aa4d3a5fef6751c5ab1155eaa697be33260df1f0593d5f856b900c0c5367b2acff6203fcb34520dc53b5059080658668a7494933901a48d353696b2720c99f153673ce35da75f490772be4d86a6223b029bb43a391babff282b9f621eec39567b4057396142cd471f90cb10ba1598185501bb1334eb468d16847d7eb1ff8f6009e62e6e29dc2602470a127e1dfbea82deb14abebd20fa30b151e0ded942a0f8251635704b2b1f08117d98275a83afbf4393f44acc951c4c1729ea918155b47cf3667443648b071cfbf4f81b50bc51dcf463d0474045a9cc7bc59208cca9a0e4d5fea1f4a839e3ad8d332762b8b370175d991b7075bbebb0fa67cec490728235510a278b80ac5d75d0446cf27c41c040246ece93bb9b84b3ee363bd0ac49e692bd1dc273fd87d508e24a4edddd6e4de5ba62453760b3d0cb20b5ff2d490a963837eea597340c57e7f27d98e84f4cf6af40f811b6516f645b785f4acdf4b9a5be372993198eed7a04c249a534fc8b091b2e711894616489eff623d356e7c7f37d9f8d2c2c8b0fe53c9e767a1a18da7e085dcf81e5194d1179fc91729f8ff203d2f8e4a6e7ccfffa8e4cbd08def7925e40742b1e2ffdbb729758b2ff692d36cfc8d2fdb6673a0f7ba17bd7483b97d83fe8d2f226574443264e36f8c44b1b103268bc872f64cf6d818bfd06792022ace31b3a9676dc3c6a8d44a9da567fdbd44234bffcc26259f61074d761bf5ac8fdad64afe65db848c2818d9693d6333dd9601194398b7977a160ab592d3a66cd94ae2053790df15562612f5510c28402147a8f9b7d2b46075fbfb8a1d322df011025347bf8fa9a3db5822d302fffe72024d25a7f5f7e441e84826ce3351481145f2887f23bf196ad0d7c7b64d1d4da44b28d2b49e3cb060bb499ca319a76d5d14fbcdd44dadd44baf5a146b0068f1b18fc33e06bb8ee3388eeb3aceff76c4741770b90c154ef7e324966f474ab3a3a4db383a1b857d3db1abe77002ab7f1d591ecda369f843fcbaa072225922933ec389f5ba71057606d7eb9ef3c6b27bffb2c82dc2a5bec5805e180631d8bf0d7145d39a32da242165cb1025c05005431870c8fe9f51327a8a655dbe3109630c9b73f9c6646a4edd98a87122acbd7c639204dde19d2a6b8b13af4952d358a9c952d3eaaf622adc9a44d6071b88c95a3f56ff794777eb5816f1b9f56bcf6cb54ec6348d6ff588a6f1259d40358dfbe3b0c0e4c509e49152154850a04032992a83891326794292d3b89671841189c2936adb82d5a5443b9172c291902a41cfe532527cd1c2270382a367fcb49be37ed92f03720570bf396750f7cc69ecee2cce833a70b2260332c51b803bbddd89cf198e76af7550bba27ce675f7a26c53778f4d4a1d8c7287e1ab1f8bb2c476da518f0a7d50abd5af422022a8d72b08f206fedcb3bc3b265660ff7821901088084aca754cb8739496d179d597f0eab469d339ddebc4be9476ddc81c9cd94e2b6bf5fcb11e9668c5ae5de7e10fea633705fb879fabd83ce3be9b3eb9bb6737cd6233cab3d9cfdd45adf507b5b95d5b8807dd46c830b9e5ec6663466a07a5225630810f24103650854102136ed090387ac6e3793dd7f3b9def39beb3df5be0271bdb7de094d5c8f49520f6f46852d6733e79514b6ac7782b71be3764fbb9b11d4ed962cdd58bd1c4797a04c509a047d6b74e9ad04272e3501874b7798519bedbad35ef2c4bc99d7d48d84166e37173103125fb515b453c775365f6c596f361c6e77b5ef657c2c96e8ddf309527d5610ef6b4e5bfd1c328d8e30e80b70165be5ae56abf7d140d58abb5aadc0b051ab1533732d2ee1d3fb5d61cb79f44cae64413c25df7bcfe4ea87f08e79577f01ded1fd8a7ff5b38a6b897734e0ae1e0313a8326df5f60ae6e2ae9e278751e31cabf7c42ab2d3ba709c396da50383fda7a0d8b1c4d50882b571613ef629a7d3f53cefeb31bfb6be1b87386da8eb46224ef3be882ced5df5cf825aacb3a967dee78dd3d6d636c1cc313df3fe6b8933298b30b6a00eea99f770aca5b21e8fa6795f6b7b5e04664abef477e3ec1d4816a4232a22bbf149efc33276f597f59fe8dd668dac2a5b4416917776d7880371effd90ce9ba217fc0e59ff89327044b28190d7c0ffe31088ff37d67ae67d2982dbac91720e6addc31eff7d8b20f4ff58bdec4773b7bf88863f7a649e8900c8bc34cc80def6fb2c917efd958f9ed5f78c3887f7def760a0b98469de7b3d3d3a3a61e8bdadc2fa872112b6a4b567deb7f7b55a1b8bfd7b4f7a1fe479447ae67d8f437ae679de74fab8484d61bb5b670a3b9178bcc36f7f03aeff171a31adcf7ae6346885810f1ed52bb8a067b220e0871f8e4abed407471b7320591025e08763cc69fe65d1a514031f3c7a26817e19102a03d2815284bb7a769ae18fd5653d6b04410684459f35faacc6190642ad00ffae07ebf020ae9f8e4f839c49bf3cbc0257478654ecc7df819a7227caf86b2eca38c6c3d618fdb2b2e0d87ece40747e19577d74ac81660b484ca02e7d1c411738e598615275e90b355093f4b9e66abbf4416a0685a64b1f4699997f7819716ebb1914d05c2ad54d5ff8d8876dcc4e8fd22e8b8a6e1884ed9fe237b2c81ae90ab3b9db6b4305d51e0f09f1e0c6502d5b2bfc696b20be02e9288a8b31e6fab3d3182fdc12bc33a9cc1846b79c59e6d2640a29978973bb334c1948d79f6a9452ca71052c0e79d0330efc58347ee7abd77969a3fe508b2dadad16d4b3e7ef302463ad03d5da5eaff5ac5bc1cea32aac078a467a5684c8073de344f88478f08d43ace79210b981e37acd80bd5bfa6e8f9eb48458d76b060c89efcb520fc6a19eb91b2ac4150bafd8210f7ae67afb3fafd073c422fd43dfc569e4b2e25caab9bfe54b450f721a0b475b329bb02a41495382953652c268d982f4a22f51423469220b335d7220fda7cd7f1ed5f77644d9d0ce7fe9dff922928628139aa4ce17919f8bd3681ecd273ab38a536966e9d952cfbcf46c476452e74e5b151b547b63f9cbda7cca691d7e32c296f6520dfa6dcca728f39f398dfabfd344998f19d01b74bb2ab037b6ac2c38763e4d12b8a594d6590448abdf222015dff7bf298294e3e66a0447faec596e2c6397ce7f4abfe97cf7a1d60a36adb68e1606b3f4bdbb9cb76bf156e0e828f3efb9e5a4742c02bb9cc38ee9764072c1f53109980741d07229801c12ee26a126843ec45631a7f15cd654f36af3e5abfdc3ccdc014f2a266bca963400b7d4b9f4c34b9f63a018d3f827a867f3c31e3221ee7fae00eed852585338ad74fa28fb41653e39cc800d336dae7f5cd1ee9ec575efa27763759a103bcdae714b29ad3a3b701c0569ff709c531f8b5c706bcf2e801941e79c1346bf9f07002bf4530a8381305abbf8dc9d79ec99f3babbbbad53503ac5cca06f0fe7e0ef3be9734c47d98f9272dea6f60f333ff72c03761f15503d7ee7eff8b9919f8e65ec7bc238077bf1ee2667f371e7b3a482b88984de224177d229c5371d69fad774ce3941ea600f7f5a7f0bcb8d948ae5fc6f2ab940e66a79b49f0d236c0eb452aeb3b0505358d6ce3044376b88d1e4564b8410617471cb1a1a0b5ad13ad82f0adbd374c2b62e970983cc741306936b61675c2e138615cf210c24aa3048682dd66ed14e582b0525c1be9ee891056ffd643f31dec5763a380f5978b0b0cb65c0403203060974056bb7486373d47492ed9a6835b69660a2b1ac21dc8c11a30a8716aaba3499a173a84aaa42aa94b9daa95bc690a8d6da5aab8d223e37e80d0b29c8b03451506b6f8c78aaada09542d5a385172ad4b0f224ab35362c3c3d8182532d41939d18623e44d149824a4a43c376690186b453ab5a545161462da856415016a92c533a560b283954b0382dbcceccd8c2895dcab1e2c82543d52b4d0a2d298ba64948e5220205f0c6507565b0b52c1926dfc52215d65a1827ac6a2b68abd89cc65fee94a42d4cae962418a05c294d4d52b85b98ca6441020ad78a129c2b546d52b854a29e787295ce98e0688625a7717523440af70a92d3b84abd056bb531ee72992f9aaa5301d2d0a428ac88c28250b40a162c81ab605f4eeec47e3b3492756d996b6c2885ba10850bfd421450a2386182615763f8962e9c06cb519dc0d629bac47e507411760595c60812a0b88101c5081ef00553a5ccd5ea5c2e2335c68ba95bc67098ac3bc722e0b53ef773f07e1c38450be3a77b80cb41c0726a05f70b6dabba603776bf1ca8fbc1d829a653d2cb73e7580476ed0e3845bedd8fc68e0e6cc68c1cafe3e87417643c96492ebf8ba114e7e91aee314a8363dfa13a1eac7a10a533669013cd61bd3e0bba2b6c852ea63fd46dcf66157c59ff725eac9c953b8c32d39e554fc7c16e8772de153b9fc69899dddd3d8852e7a911b393ce3927fde999053da70e77e74139aee752194f5b40a7ccba624f29a5b3a9831fa8cd9733695bd0b3a78e575b8f0a75d1164729a53476e9ec2ae831e59ee338fafde41ceeeee08ae551a93516b37632b347857a6037e7c859d03d7bea704ac7d2dd9dba6acfdcdddd031fe53caf2a0b8e070eea639f150563ab1779c77cbb81574320542cc74b6d776fb9108805c41fdf55f63d71ef3c13754ba63a6344a7c9ce57ea9ce8bc6b4309c30b1f818d5dbe2d1151c5be2edf969abab664854a73a51587a30a83ad71f9b664c4c54d121824ae3db14a194aadb666e17d395aa559a1637aaab5faf484ab05d52a08b261cad3c10a256f70ea6a55ca14b761a93e69e184aeb682d6cbcdcb114de35b565b461426a59b13372d7c89721ad7da2e148ca88862850a13bcd8d8e5326cb078c226ca8a5bb593c6fe6b7316148bcd6a352a2817c8e3d39626b135b02d5114c165e9fa8f311c5e8c10b3644d0d71962e000494119625bc10e185afa045cc6b8b2d4c06b8fe62e5b2420d2d4e2cf1b6bb8db89d658bdb3cb7bbbba930c02dc12c4a542d5eaeff8db0875b2d5688dddddd3f36e805b7049bc822c5e9fa5310f6f0ee26e0d0a8dc63178085c9f5976199d2b932029e89e58a93568e1bbf8254801a31226033b4b9dddd1f8b612913d298cd00c4f5df097b786c4b163a162060062334b12231532421c4ed043558407591963565b88102e9062dd690ed485baedc7e0cbabb5d57aceb8dbb2bd9aebbbbff8cb0873f54f7c48086013240b9fd3119a66e7fce178d8902cb161be0980083141650f1e2a60913ae2cd1054a112f7e853de8b4b19f710c47b7df4e31d50215292c249139019c2b965ca9a2061bc63041baaba094b4e3d3e36c72603d3e382ab062a5092b5edc7e1bfb59cd15f6e82034a0090a704b1c545a38c0ed1b955b1519aa70d1a36bfe4db4d4d072777710d6e30374fbab8dfd9434b71f9cc51963899a2e61de4c654196f68a3186131c23a0d06051854c618b1231ef41a3644fc46e590114495392b8909282142bf836e506830fb76758526345dddfc240e5fa33d4f5aff6d62394a46013848116e605bd50c56bd1972f9ea67c31e2090e932c5734a9c0c31299386ac86e7f727b86a5dbdddddd13b382612e20dd0a5cb8bd00e5c678862877f7353f36b8099f16c230114585285e6effbbb0e4f6d399bbff10dfe2745de7babbbb90283737464e5f7112b7c4b1c40a41dc56288205292c748184c5edef1a0c168618465cb230d1850f0f8822830e6a96e0c1cb15f27dcc772758c690ddeeee665561cbd8f58172e5ba1337a4216245d8128c01b1d4046ffbe0b8fd048cdb686ea760c4edb7586e7f4c051eee0d4a0bb79b8ace0550d13dbcc359cf3ff68cdd5d47b9ee2637ce5bc5c9016150e2b8cdb7073c79d03f2597b9fdcd0fe01d52547c0ec214c03b3c870d0005301d0682b5773c7b08715a7f5490bf106f162fb580c85d4f03053508e31d7db90c2ae21cfd2e2eb6e4a80ffaa73d1852442b655bd7c28a861a5a629eab56adcbb7265f784dd42646e0e6890b43a869c225022d98604b1546534d6150c5c8d0700480264a2618618210b7a937604c81c416494e609001a389362b4781474fa8265f40b9e9616a8c0f17332ce164b312c5153fb4c82c1d11fa518d799180cbb726656ebd7c6b32825bc69ed87cec535aa021e68fff84dbef8ae21d0ab83dc4b4fe3ae51b4bcbb3cb6daf7a2cef59abd5fb4bc99613a9fb22b2f52deb4621a3a59638957e78bd6d7d6b24fa22e3a0f5af1f6a754fd41a875a6f47a2d6f8484cb6be35ce35375cb1658a09466c36b2e63400b8c0e49710583d8084ff3df815012f2b047ac10fbf13cbb22c3f0f6e47e4769fe41e212a715cefbf1518f6f0efdc4191ef478ff85dcd27f3c81ba7d19b2e0aa69e713fd782f5f76173250aaa137c886a52c49466e904b715aa3cd1a613bbce3be69ef54fa58934935cac96096c300606e13aa57448ff34d03c81c947118e6a52e5960c877aeeeeaf415f9780734e3ef62919641fdf7b2a8250cbb8f3e96b309f8e17dc3a96fe21cc4bbffb221741a17e21fd3c7c6cf1b10fd1081620918313f9c59ffbfff1b13fd6cf950b8347bf8ffe5a50961b98a524b690800826c8fe7243e1cb104da8b238e98f1161220b962a63d06481e2a06aea8423c0d8e2099208638471fa410d12562c510123b6f850556509a937fdb17eae2f19ecc789f54c1a2d6c643721430c1ca87210d3448a871f94c0624910627c60c1fead529678b191b63fd6cf5589f91ff7ae25cb6af9e8adea5b98d7fa5abd5668a58e21ec60e1228606374cd848b0068a232dd0b839825af3926287d46a6d2cf63f63a91a4b79cf92a2993c67baa160bbec74f976e4743f26b27c43e176f98602983b5ebea1807487f48ff7f33f2052a47f72a6ae9bee4ea69c237887f7b3c981603febbb96ac1dcbe9f441d3261c1a36d81f395fc7399936e8bebeec47f775aac1623446aa4c9c273010a2cc0d66a658f2420b930def58c23ba27a4ea8fef97eceffe6114c4c93691ef1e4eceb82c296478cdcd50842ebfd5bdffa722a7963e97d9984ded5b7ecb55f6badb5e6884738e76bce1802bd762c8d5c10bcafa5915b5f6f73d8e9b74a3b26a1d7f5ae91486b1c12126165feb2fa3cda9ec194ec09be6c6182282a18a8a64082864a9c2b2cd460050a8f570cb6bce0732d59ffd796f9d4b4f9b53ed9d8131cfbc43721c448b1c20409d6984044820e5a34bd6042959a0834d08c9fbf5365cb2217dc243d9b457a5693fa03233debb468c00460209145102a7499d920c6042a299449a18a0f9a369fddd46974e79773f2190fb930403347542404f1c48c9932264c1d9d697263b4c47c32d289457ad685fdfb81164050c1e58d91192872b6d1028928553fdcb4d040ce9f4fee23c7856da630546f9cb0d0c55491162660c8b0a2855219241420872ab62c3b64f10517575c1184152c309489f244066af022840fb63064c842ce22bcb899828a2954472e90f3871069a69ca63185898767029f418de75c625f0f35e8eb7a8fbeebbf09d610ebbb44efbadeefce57917b4fa4ef12fd4e29071af22342cf3aeb605e6ca65ee394727e62ea5e1dd3eb4582d2ab6302d344c6d2989e0dbe3aa6d78ba1507a754c609ac8981ae32f15ec7c42430dbaa73d6b0f35f07fbd46d641b2ab2fa78d055bceeee7131f3b5fd6cb7ad6ce043a23fdd38d463aca932f71726394d3494d7d3ecd30706eff4cd33ff3c9dddd4892468a2242b39952fe5694fdb0fff68beeb7d3344ea69e7da8e529aa6748f535bf59457664cee92deed945ee4327cb7d39918828f942e3794622b2203c2f7bd9485444f28cb1779eed3bef772736b2aa6ccf53f0344670e7679687bdcef7e5c49db10261790809e2d113b881468c269287e3e197fa1023d0b32a4c4debaf33c6f135b2e959db2a6cf752734e4a458c100f7ad6423deb6e40144ece74a391243d6bd047cffa2718a15a6df85233212322f44f2b9c4d4c3c2f0bc2a3c32041dfe1908d27d2c6587357596f3896965e7eb20dc99e67249a5e2895e144ca461f11e89f3a4e309e38997ad6dc65ded14eb95b2ab94352e27453c54e2687b9d4a4ea9f55fd534af6fd350e83f0780e83c8dec64824eb81e4196be1101701c60c4e1f8fc824052211911498281bc9f33d225108c8f08194fd37b929d540f30629becdfda4916e73d485fa87fa85c489739b491e77f7300847021952f61c0eb90c462cd9c82007e2f9da6d9e1853ac5feafb8eb0fddf9cdebbd75a2ba5d5dde93f3dc0ed91529a0365cb22b0db8d429e5e3a0afd9303894ceba71dc017f0b75fc8fb85385587c5c73ee5ebe9f687515afa3e2b4e201b9b645eef0fa13ebd3f581f8ee5bce1cb44d9906cdae2c07922655f44f288b2219ea7e02918897c882079be88fc78c2ffe651d3fa8fc02afac36f1d9defae1b4bfffa9e58a70efa309df7b0478555d853711ec1749e75743e1a3bef630922f50f12adac6901ece9581601918ee897f3e8499d1694ddd7a943e775ead39ee970cf7490c43a75f8c344d6d4e1df61067e69fc0e8d9838abe01cf593e951d1df4120ac441725ba5c1d2c6cf94ae2f6cf38334ecf7cd671fccb09a76ac601c19fb4c5e99993b15d1f2717395ed809878b7e32a7de279ba3fef1714af16d775bffb4ecc7d3f57146cda7193258216e7f974560f7f54f13caa594f3dd3f859843f08e4904ef288277d4ef9f46f00ed8f7cf237887cef74f2478c7cef74f12f00e1adf3f93e01db1af319645b7c6bb484524b422e1de1391788fa4fb90d447027b243acf9c634744b2f3cc39688848683c738e988824f6aa21badec5d653be34ae8ec81726f2ad9c4b94f953993f53efc836c5f612cc0a1bba75b5e8d847b62a6cf8abe7e149e65db1530d2e9c21655a489e9d55ff78d139c1aebe93fcbd7bf7de7d2c3defbb71a8672df3808fea01113e70e352af593cb197ba14ac37cea5a9e4855dbd4c24eaa86411350449340217877b26a303c9f32c31961b874c1d1d342c00047e66666666d89335d3c2ad4851925617049f40db486ed26ee744197d4e46c70c486e3c0aea9acfe893dc7b7f142339ef39b1bb7e6449ee3dccc0bb3e86e0970b08b8efc4a34a72dfdcc829a185166fde903566a9fe8398002edf7ec072bfcbb7304c8058719d47415ec29bb71178b93c97cd2c41e2c62edf7878c303d30e5cee177ed997bfe7a5e276972321882bd280cfcff18eef79ec2e10ee8221d00bfe273ab9475c17fcafb3b89f63713f6ac5fdb836f7eb40296e0d351839baf2d56ad5abd55cad56dd6ab55aad3c9e565994e57e7fe361cd6589253febe9aeba58bef1e074fd5725b7bef51bb44068fe72f55d587a1f7e2bf4c12383d5f758b5c6927ff5ab6f3c8344e58223738eef592ce7adf469cf388ed2d583b07a07e232e328571258bd67b0fac6929ff5cc12fb57a57ba0a832d36f766aa60b7f294936e0cee7f9312166a55ce79de7cdd0051732486182344cc2d860421b29e09c20660c18b7523b8e7a0541170871db610b0803ebe5db0e31543163ea2c95d4d393271eeaca46a582102a64112285aa1f3ca030a0b0d0a204d5cb59132c985239fb40a71b3503c31466924c3003c3115aacb0c0e10bcf0464d01c523a3439316929c103992892d30f950a0c1028bc66535803b0915122892a1d71cbd9cae6468b2c39359ec2b0e03ddd30c5436d2aa91e8c563d5cf921ccb1b96d8713a46ee862c48aa98c1aa419948b36a55e03e9cc9da05315b79cdd7208e396c3d39ce01a3bbf35a0b7a508e0e2db3d151dc89f8978c7b55615eff8b9fe1da882edee27ef587db953b67a26adfbb2bb7567c633f98d43e013e53c38ca58b47f2a93bb12bddb610f99d04ece7bf83d117df0bf7168e7734622ff9d5f89f5d6e98a0a67c8581f4482a28c350ab9d2b8a06a2ea823b38ccbbd275a26fdc36242fba78f3aafd54ceec712bdff6628e3e0f5e04fe0f5e028ab13b02faba38c03f0777e08fc9d91e84b7d22d74e6b863d8e0099b77e8f9c6789dd65e5789525047e074c824ae8831f641a21068adc1995f887deddf921fa3ba38c35e42f638d320e66fcce0799f13ba3922f433b9ff34a68fc8c0f92b3c3dd6f47941d41f2a3aff742b03fa2015fd677c024ec775e2644e3651d3049431664e75735a779ddaf667c8ecca321cabc51c6018dd7f9203b0f1b95c07ee77546255f8660bff34a749ec633993303a6b3436386c8644ef7751cf20fdf13bddb39b1d35c223b8dc996c8242832190ad5ba23ebd353ebe8833f441f2487fc65de4856a775573a203ea3340618646061028909b27b1f0e5464dba2c58a1cc0f860860d59b4044a1b3143309d41820ca9c3062f360881e606259248fafe6051d761095e5aba8d88e872869c2f429223dc8837d5b4191141687e9d1309dbf76892dc1b9de00092fba3497a6f89be0c71ef7de78d44238011a20699506784182548ee4570da1c858c386d3e3bcd5f48cfe67c1895e5be7d2c2d518f1c6583192a2588e28964b6ee4fdd0b949d73b0b119cc07b43d5fddbd67a30b8c6d06fb87dee6cb21c5d13f3e3af9827ccffa6ffc1c6c3920d555ad9ef4c98210cd2b9848d6af3ec9bc1390cd3700154964002af2fbd5cff96d50455414412c45014206b2680464c0a084449821823022b7c0e2053171a8c0c0848ac40085a71b94bcb0820a2cc87e1687c3d39d5dbee1b08403d5e51b0e5237c7e51b9318d7beb86fadb5d62fbaccf5c674027ef2daab3491e370a508f204281b6a706a2f94d2d87c2a0c972724c88f2eb146852a0e7491d14c99e2886cb1070592a8c3f4108313720430cc9935443530e40833a2481f692b607eff60420f51648b0670437e1574712ad1a04413d9a20f11e4b7a26a93c4eae20c9a339f910d51648bb228c80f045d6c1a72f09244b6e8e304f985a08b73c9842826b245bb84fc5a608b4c4607d245a24e0d1167a2c8119cec9980f99f8bcc0c626c648b9f17e467cddc82787a812eb2102c5051912dee38437e39335a65d13d0096246c648b4c8ed0d369f85a1462ce9e453d43288bdc7b650410fa34083157672cff942a1ae2c8f694298971ac5f5866efa3cbd9e0dce7b03363e7730fdb83b34235da30b1e1d9755df71af4ed5e533aaf0525c8907039296ed8c53ef71c17b2e17e7429285977da338e653c663044135104780ac240c883a9cbfd646ab3e496175caeea4acdeebb14942e37e79c34944097829258bfc30dea8719ccb19c7fbbeefbcbeef9a36033375b836eace3cca7671c0fe7de87735f73ee6768b17cfb32e67ef7dc4ddb13eeeeeef475ef684ab949bbfb09fde9eeeeee66a7a9fc94525aa78ffd85bb37a5ceccdc49dfe7a6bbbb1dcd57c7e066116d41cfa9837bf69ebd5bc0b37ebb8a3501825cda4cebea73d72ba6756fc12ba8ebbefc8efee8deeeee3e99d5e2c6d993e7fcbc8cd9b7bf7412ee9c73cec93b9cfb865b56126e73a2f7d4b339a38c8d7370d3d96ddcb8c1ea98f8d828d3c81c9d143413efb0d1751dd7c3b4a05f8712ef293efe668fb67fb81f521f3b1039c98ef3d7ed27a70a441fb3103fa4b9fc968a356297c68f7aa9b87375ae27764c6b21b9fd13a4549c713f0fa462cefd2a48c5d7fd562015edfd5820155df7035bf703412a86f70b412a82f76b8154fceee702a9c8badf4b5cddef0552b1de2f07a4a2d7dd0f065291bb9f0e48457abf1d908a7e3f1a600c94c568ece8f0f0b4e85876d77f76e26405783fc723f3ef69c1641deeedb79f7693f021a19fa4debe1cf5f99cc3431ee1cea7237bf34fa52f4fbcb8e9a0adebcb98155d62d115bbd62fedea4bef093e4b2cebed0b8ee52cba3dbbddd71e445369264da4795415876aaa7b62a8db9de982bad9ed70c4ba31d651fef1be8a2cf108d1adeeb7b6d789653b7512d599a95475bba7ee7978774484eb7d39c211ef7a4dfb36d775cf608572379f8b1b487ca6f97ba27341b39bbe7ff380f013cdc753243fee2f5528b89489025fbcdcbcc479c1d23b479ec0375f1003cb9dcfad3897a12edf6a58ba9f8bd3813d7fc8d1b208ecd60f599e58c44808fe05bfd65c57ac4b8be9a569dc735e6a48bab4cbb72e6e3478fd1ccb0b0010c5e7accc399a1cc8c5168a9db3ebba2e27a79bd35f625944478489d569dc87455899f7ec34d758dacb4f361b29f346a1d9e434eea793d3b86f7df8dc774ec4f00095c58631481046110e4c6080c325892d504cd17aef3bd11b79625dd8128aedbe7cd9eb5d3f2f1565afa76fffabf54f7d4fecfe7bee71f8f4cf97f3dce3f8be097edfe7881df6c8f96ffe683697e595de7f33de8b6e92be33466761eaf89e874fa6727ab9dcf4d233ee91fcb0630f57f82e916f4b2c8bc0a697315dcea5cbfd6cea64b07f955853c20b2970e1248a0f24f7410e8463890f5f5439824b123190dc3ff733ee75cab0e58753cde53088800edc0b0d319284af074586847ce0bd375a8e2582d0acef39d40008eb57af01eb1b4bef4398ab2fea6789fd9e17eb19f7ae2ef62ff09955c0d56e9472f5cb499a5bd6cacfd5cafab1ec5a6bad95c5fd4a3c32c2a52c916f157a213c7c08395003902039aff5ff566e2cad5dd52a2484870f5617de732cd628c6bab0657deecbaf653726a1973ea780eb44f38d0c63a2c811c023294fc82ff4bf2762568277139eb8c1cc0f56a6c0d9610510d4608554972653496390fe3fa35cba44e9f2c4b5c137c14e9c262029e144beb2d892a9849e4098a38c2ed97226d53cc96792d370bbe54ca261ccc73a4358be7539e2de5b97db9d404cfafbd3530540147e32424555a9a8849e2cb3755b73a0298569fe33d08043cd81980cba67923887bf73c0861cd8e82003124b9a901e8124bc30a2ea852e8e4640fa1b1161866ab874748e487ad07156e9d94cda5963e79733c969b526d62cabfc20bddc7732ee396c7dad7f64e0f3fd5c63cdbf9a03f9b4cf133e3e5ae2acb3f950aaac557de3a316e48938663e65f0f0510bb230251e3e6a416077493a5458e71d3cc5dbffb7fc5ad0cfb8284138ae7397431be33a6fcd81362823c41194324360412211b065cb962e3d40f1e204b2ff672dd85bfb5ad0cfb828dcddd967379df96b2de65c53cacc4c9d3633e7d3bd646666160cfe22e7e0afb5567ed91aeccf0f02a5c1724efc2bc2ce7fb5a14c3b26da39ce1dca0aa7d6da1ff297729c3b9415ee1ea64abbe75565e154e41c948ad73fcf21137cc69d5c87395d3cfc7d74ff5023d6c4a09e716dfa70b9f1f781c3471e3e4af066c6cd7da9b165edba19a8ebef5e637f1f4f4d908943068e25819d338ca166dfc66828e185293053aef881098e4c950f54555841440ae0676bf383e6fffcd97c9d37cd6c2e37da6f96899a9579ba7396a972f956e6c905ba7c2353c29def2301ae7219bb1ef7fe1c97840b7b508e725c77d8a3390bf6604bb0b3f361936e614b4ee2cea7df3d27964f574f5775643da54e95a5409b5582c5a4bcef8e78196594217593f4adcfe10fef7abf128f78b78e471cd025e9dbceccea55d591cd35df12613f0e82ea06dd8298ba734e99103b8d257467ef3416aa5d22e0cf6fd67a5633eaa9396df66cbef73d9b73f2e8a060fb7f358e389a6c89a34cc2ddaf2088c7735741c31edc536f6c39a1ac9e2953a6fcb44cc2b15816a95def9bd2b954452525e5347586eaa98a7e3963e6a7ab23bee2eea7fffd7c1e3e6a4135e6dae59c2eff27b247f465e87bd648c4fa8fe81b814a49e8f2774cb7f96e40ef119f48211c3039c42a80f588b19fa47b60310454008e512b6869b0e5ffbb603ddbc1c6e61701679369013fb9f404b674c0edf7672fd681d8a9b37cec537ab6eb5fb9350c54470f7a6483053867ad23f8fdc379699a3f983ae62684737827d5c169a04ec9a9fa87763db7eca4bacea8673e6777d4d97af6e4409d94bf270e0945c081be69527ee6cc7527a7a0a6b263ea51bade52d7a9d8b2b3799467eb9c7c9f1b3b9bdfddddddddfde7f5b11472fbccb7630053001d00669f5bbabb3b05003776a2f7f5c6ca068b82af0794853cad1aae98a5f1dac9a99ed35ce7bacf80c166e8e4ecbc68d898ab468b2794813d1f052c1bab1bf53db11b3900501f0f400b006466e6010c400001f001c028fe0d1bb3164c8d99139e6e8dcb664e9072badd7f3221906f4c94d10f29a532fab3ef89c2f78862e317915df7ded7ae2b83389249d797f57632ee8538ade346241d302934128145e4835f4486a36c28fcefc35126645f36543f7cf21bbf74808bf75cbe6752c68d4246ab0785c0916892ab677d1159f21921ef3fae9b3694baaeeb9ce989cee9f6c58baeebbaeebba97f4a5f72a6ee1d4c372ff71acccb8d46f6c1e7d1bed43f6c66499bdbdd90713f491bf8b508fcd77fa168b36fed7ba327793f4971e81bcdac807493f8a5ff1abf700f8ab2a1ea4a4126597f92f557529d3381cf64f7fdeb8358fbaf51c997215089fdef434ab21dbd4423e2d4444ab21d81e23c12bb777debdb35ca66eb89c09fb3e98b8ac8ef13417149363ffc2292099ce137ce23a77520386d4eeb38071dbd91fb72dabea2d9e00da42acb546cd3bdf1e4cebff1a47fdae5d433d7adca72cf94386a0a304c60c4175e3035e1a72a35547961020e3684c9c0fbceef713939d024e77c16f9cb1fa3ba9eee7449b9a65c4faea81b484a627f6b8a770009c54a3e53bf1565c10fdffb46998f32f72762bd8f439f10a7f5cf4f94f1b7cec8f85bfcfd10ebbfe7ffbe6f7de3cc69dc27f223897defff89ecb221f0bf07c76facb2a15a32c771de58731abb9cbab92bb601ade734b71b6a5af7420ed41a89b890a921fd335b5fa489f40fc311a167dd3707ad0f95f4fb50bfb79ec9209187d3ba6f8941d3f67a26bb9f47b209b43efc20f65d1f24fcd7a8a4f5e1bb46255f865a1fbade8eb2f94c86cf647589b3ee8afd9f6726d36c126a8d32ee87e6ed791efdf195e930b1363e74a0d8773bdfe97cebbf9c4f3460aff3829d46335c4da6ee575f8ff8a5032699d402cc65282edfb260e276d8414be4f95094fd0c65dc0c858c96f8b77e497ff836c4497eb3c6c79e4319d7b3da31ad708e0e68c63069dd773939b30acb8af5aa88b17a19a7f3c412e11ddf77bf01069a38ac78ea1b2713e7e81ef6c511efbfe76fecc19a5cd803c9ea65dc28c423fbef0aebd1f81a6fb4f3b19f675cfd93897754a94e8df58b84de72daa611efe0befbb98481a615a675df4d2d29dcce4b94d6e5c659857374afa3c6f62d6795dbfd0c651cf07ccf0b913d053f43211bcfd9281be264725af714f4d834dc68a12cd4ed64423cdf01933c5c2b54222af9e2bd12ff967feb87fc5bef8d43fde1d710edc744d7d310737e477c3d4c045f479cf12cb103268d8c72debed1eb5dbf126542adef80c956f8b7c68a1432325a02fe8c3732ca7923fbad377abd91ebc39f4edddbd78cbadde7cc00275558649b4cf388079c62a77fbf95ba0c8011661475ad63c3c73ee5d724dbaebbbf03b19ebd6fcaf2f538ec2164b41a65dc13b1febf918887d33c1ecd126b32eebf2f228364dc281b628d445fbed5689de63d113b8d357a4cae4426bd6e8db59c83fb17e7787fa288c7a17e1f89fa8b98f8fd99471907f4b90fd2efa312ff1ef26fee953c93f499642a76576af383e6fffcd9fcd98d43d7759452da21016dd7dfab7b27657b6615dcfa823b71d482eee4ee33fd53f6b753dfa69a5b82b7991ca8c981e84ffa35083756a7b1d3bae94ecb39ea7d2ad30dda2efffc9482aebf07ee2ea7ddf3ae744bb0bb9b72dfcdd1728e097a3f1d9d87bf0fff9a7fd0cc66b3914065b391ee64b3d127be19e7a05fb6052bd6419fd98210eaede73276794649eef15b63fb3907f5f7a137f4659f5109082fdf53c67ca90ff7dc13e15e484827d440a213c73dd193cb719ce672d3d6f5ec1f4e86cbfdf76e67313b6321a759a9711fc4fd733fe3fa7bcdc001eb57ef2961fd4a497dd6589df6756489ab9145cf73f3214952effceef6551a6752cfbc2df669263d39500d2e4e9cd00509179e58229bdfdcb048e121ce9313b840f6bb939f99fc3c7e6b2c3f8f26e265b59c37c55101e1b8cd8da54f8f85d539966059c1edb1ac60ea28dde2348d2ca110f619a472c0e4f7333c22849d36ab12c24539ad1f4936c47af0c191a8b3398dca69fd330cc22ec47af6eab4faab3af210f895eb94b84ea98166388171ea8ee81fbe9939824a959d9715d50f44dcb26bfa21ca2dbb9bab7bbadd41ddeea26e3f379d5270ac43e0af46a2d58362d921d96ed36f648d31a75135714e1394ba53ee241baacf7a5649bf885c89b221227af445e468eb4c72a2722077aa8ad9a772a7f71957653ba2ba49b7df9d9cd61d537fd7d4df29754b2b29eba2df7ad641708efe293a99a9a39dbe29dca9a3ea3ac7045dabf18ebe44234c19d2e430457e993fc20442892936f28b0cc804a1fe1c651ddf308880d0f5395d25f82eb114baad77b148ed6210013676bef7fedfb78cd51265dfd7fb8db50f83fe019f7df4b19c0fba44eff3b00738c1393d6f0cea5957d033a0497a35ee8b66adea076fac9882cd142aa218e248165db8406305141055bc5a822df9a92c52bbb2f97ca96c7e2df926e4e8c70689b50aa4d4bc8092445397273be0f0859d0803c51a2c8080e28722c8ee580f14b68cdda6420dc45e485d2344fdc3b72f9878cae907f1529f258edbcf77def618880809f13b5f03bf1347516b82544f58bf2ed7751da26bd2af76ce49bb2dba6eceeeb8961a42848ecd397cba948fe5016235cee1ff019121b036b66428297f217f4bd7f5876d619da8a22aa754ff4cbe8d20cb9d3fd9f4cf7473e7b7d39dff31b785c980d1439a2a5e2843456a858549d31161e4f0840b9c088632587f3a8020a4d040440c62883922a783a9eae14d9ba91168414e22ac68e3c536258313121429edc0c50d642ce9824d19e4c462e714f71d8bb5065b26e12acf227e76160ff7446789493866f6af3f2f9b39d5b3d98d65112772fd45582ac9ca1beb7362e9b6cbd9a2aa9ea8ce4cb5939494d3d419aaa72adb1fcd902e07715c3f8bf4bd2344d7794cc25dcfe2f2cd8727530a0acb57a964a9cbfff1e8a060c79cb97c1bd374755cbe8d39baf38c034d364d9bef064eebc2aa6cc9539c63a6919a733e91f9736af2d4958a8a79673cae93677b652dc2ede43ac14ffaf6f22d4cd365fea13324a650e550460731b82c200c134a60614b1627d01401e1a6053039b850c2d112a47d224d1451b4fcd0c595f93fb3b125ee03d024358d1f804609bc73fefc99c368b565ec5233574ab004d5c5852666484a6d53d165b98509a66ea8f40c3685510b9952340200000000b314002028100c88c522914824249575d50714000b819e42724e17cba36110e3288a318618430801c01002883106cd117103361d7bf17ef21b87b57a05786e42424e9176cc55ccae26e17fcd6f59dd22c92b0de12313cefcb9ee0acd7b52d6da12e75d9fb17c0a2b24531d8744ac1644a677bcfa6f6741c5560a1c713f4b8546ed9484741a4ac3b274455c549a8d3e243fbc820fdb4f42168b29d65eda09aee4e49bd458c61eb266959589c6676403e25761e53f90a8de88be4276a4dc73f1277903c6d05df22ea69cedf6c73142401760ecc1fe65fc75959e872d7ad8c2bbd9ba8e9827320b3908e4223e511ab4bde1b63c16a897243f9f2c1efeedba8a17729f7d90fb83243a19fd48f49ba4d3a2d269fa03be9d30a6bf2d2d3c142cd1709b343756e95b1b68ae4fcc268666813188b27486dc1480e26438086f134c902aaae39ed58b41ebd7e93ac8f89117c8b95508612e10af65b1c5e58b6257bff5aba838a2fab455247efed91a0e675e42da2a66bcecffd80ee54821cd352c2202dae4e55103b99b378686e9c3db422a6165c5c7a0aad2905a0351f434ef54b653aa1021c8eee935beace546558daa17470cb51a76b5d67732aa5e8b33489f845dd68c3491c2abcdabc41d67b752b84c4af89279a738def83a1d77b21579a6635924cfcb149858cade8f7fc99b784c605ee6dbbb7523ffa7dc39d3775121b84b1bdb418976a61396cc247f8430c1a2b5ac37a2da56772fdb39ac8e71ea24a441288d28db6ad4cac5d6be3ad5688a00d9c47163832ab5e22bcecfd6a10602675481b6533ba81a18f90632048d39f62a6720d32f3f1755a767ca4d38c7f2a3f596cca4949462d4b9fc046eca498d26d347ac872f6b5b4c29ab90691605d916a57140bed5a5e0369af4bf8574a67fc543b4d69ea2d50f3e86b994b1a54a533e575b0742e584c6b42edabd1d60833b62924f8906725180848de2d7803003b3361374948601dde498dd614da0957300b7026215ff8b88b6f729f509822615580e527d653f3a993d0540f58efb6264ae21ce3fe096725a71eac7791b6d46404702cfb65f4e885680c7b04dbea3e3e5d90116ddf9bbd62f94c23ba7dea10681cc4333985c0e55cfb365286417e602278011f162d8eed43fb1c58c94b395f36b87130636940a691cde7bad78877d0504f9e53db246e37673f1730f56f141a81520743f11c10781eacc80b2bbce6c48bb068467e8ee4256d63b44d0625b1e644c595629bd3e695d0ee734e3214029eef1d07392d09d40ab28b943465d390b97b54555502fc77958e4671653a64e7fb6ac58e7679450393fe9ae313a4e2afac54897d329210aa5d862e4a170293a2564b68cb087c80c1178461f1c3a57dfd629044bb41501b5aed5eb2ab1f38804ed0e43592be3ce60602e86b0a051831130a8b472f7f59e83c2bd7c9b124a5442c32f0a0d3670b39349c78e8c585bcdc35aa9ede42b8e2051f751ba07c42fe181aa4f427b17b188efb35a0772418e1d6be447e061d8e7990dc2119c948d3a5a06067dfda514fa11af672da8f93a65b8715a4648a50bf245ebddf6e2fe00923f41ca2d608a1c48c1a8185a112d3be38cfb36326f0d51c76ad6ea18d6599c2ac39b958845862506623437cb0468187675d194516179471d35167ae886bfffd6e7508b9fc8d03738f888a98e97019b1aee5c686f2bc342b762b2ad24669fc58af43117cc3de853d2ee97aefad9ef8d49d736e937a15ae17b127e975335a06fd9f014bff4e6fbc66f75cc86a64cd0128f37b1add262d2225857405d74119d9e6c6d21f9c3c79706ec65349486424c9d0a16e7995ce1890ace1936a3344864524de6ba509250a25552976392c0318f2847c07ea534b39465ee4360d8248c8c4c76d2b143945ff084f3ce612d7412f23aa348ef02685652ca2b376e68e42fe65f17aca9dc22cedf3beb879a2eb0bbe7e00c6684168d606c7e3e4fe215b2218f2f1a81005ea00edab82b81b87020f90a84891c20f1c5181e5431dea7dca9b0474eee41a4e30e489944351838385306e614844a85c3379fe00944d7cf477a89793555bac6a20130f4f00b931d50e20345d60a31ee04128b9ea9070fe4a1361effacdd02c384a497771ab2cb668b1616c7ff0e965d4b213d24d6b42ad508a3a8874318dc6d0e37d47e6f3b03f74004b482014d7f51f6dcf39cc2a7db70e64d8e1c649d031d18ff1ed93026047b75c38e45c2b0481a93e46194302c12c34e625a24878de4b0482c1bc96921393697b879cccac4b76adf99929dcd030bde9885d62a10c18dece5eaa8611418870ac3a8330e9586a1661caa8c53cd70a8180c85e15231980a46a360bc548d46c57828318e22c3506a1c0a6160bb4a57ab1ba28f099a03cea3892ca151624a41838da6662150d7d6634575d348fca98ed39744edf1345be2cce09c51f1c4fbbf24faab2d192994c963e45aef0908dc0f50af50678960eaeef9abe4406e77e1709c3099c4f6385c0cdd5638b4835971a98803ce482910f5d63e7cc1b99f2931fb1b396617dfbaa028ca4589d96fe6785dc07b087bfd1f2dd27ceb6a1e9da0da9303241304001f918e1180da2a5cbd41c92070779fa70c1c68ffacfe4ea45bebdf2abc237c1a89d804a5b625b63ccea4daa6e51c74cca8a3e6db88c56014940a1f31badddc9e0a13b9c2d28fe45128cab9c6eccff8f18ac4759c5e54cee639e1ad82c3568d65df8e44bc137bd3056b2b6a7d7e7cabacc1590e8335aed803153c41030ef4f9f8df16c0212b98cf82827f6cc7d7c27d818a8c048235671e9be3ca48c464498eac766a389f6419a5485c3fe6c5c5ec8c5e20ac63fd51d486904dd74a4f76a1258ac51f3e1b026075193af74e887cd3cf3ece7b9397838039640bfcafddc921607a5bf850f605dd86fbdb32c17ff6601e94b4fda426ce496926c43dae99cfe171e838cbc03dc2610f0ebc068c99162604e373fc16481c7c60bbeb0388b01c121db3eb3c997ed69fd09148dbae5beb8daab8515d5bd10cebcb9d4059e92e4dd5d955aa124c6fb0a2c62eb73b8d7d5015482c7c7448cc7add8d3d2eda6d38fda089734946a3679a60b23e75c2ac8736b1b83588bbcc6d8272777625baab36070a3d6eb5c82fa9aa6510137ff129f842a4a0857e082285eed1d4b69a4c42397defc978522dd5c42d50c2b8f1966bdd30561e9525e8e141193525f8c45963b38c5c10b67b27c355bd4ce8f6fadc996396c769208341215f541782c74a09aeb3a06f12e37a4a5ca6121bb83ad53b4c2947b92b67916d6f20014f4ba7017ef904ac326d21d53bee824457ca1587df7129a6572fc5ed2d1b1a8538945da56c71e58708aebaddc30e48ea32c6f84cc314d5765129b15580b0dd5f8b38bf7a5a12ef6d46cff1fdd5d4251e30c92326abcc4db0d228f90b43697ceb309db5ff583018c9cffc1ccd0182743d229981a1c576201e95a321aea7d2b8a4ca5aaaca5ad58335b0db21d8962f5ac4b4512219401951c6865f1619f0e6459b815f77176ef496674400321382d9b884f0f51ddb6f1001125aab002fd560c31ec776ed09759cf25c5638efe93919f9bf8d0323e9e10451724cc5240b9939b16b4d9dce110041c9eb820213608b9b2778e77e034126a4e87b8763d155f158db3dcb17667ffa43cef00593ac98a099ab62a2a2fbf4ce24dee97e161005880568d724a49a933a51254b3a1d3567eeef063e17bb883d5e35ec99d8c25e413ea720c90d42e390137d88fdf45cd680e23da00947cc6c09ee280f0f4c68f89fadd9f0069127b641bb897187df3221c8394614a359267b0d9fc1052baed2087c7b4a0817bb5b45de950188eea32529aab89bba8bb39ef4c3d0847b8bb52e82acc16c8bfec054272ab5f99393fe9789c1a107e77e52492b96c8b602d332772bc18ab8306a3e8e7fdd8c5e304afd057753e9bcb504154ab8dd0368ef9611ad0fc712028896fdf659e63d0745a155e3f0f93df24c4b2a1b5dec81024084c37fcf346e78b40643fbefa19baeb06054b01b81cb3c748ddfc8f0e4f47ce9f94e4b8334d01fbdaed5be15e24b104d18c02de1a1cacae30f3030a7a09d2b8192af945961e9994630a1f7a2d660f5c77cc96f810cdcee3cd4fa1045782303923aca61e908d43998ac64090c3a3a5444b00c5b196607d94d6febd04bbca9af0838372bc696ffa034a90d57f841dd04595b241aee9980bd77024ef3702b9d8d6d62e3c312829cc8fc5715a5a816d88d05960fc14e2c32ace52f9be668b402fd72ee26371056b81c961d0dfaa05471d9048ad03952303d146f5cbedb590d1ad75ce6b3ad0d92cbce5090f1eb299a87b518c5697a5bda4f5dbae3c9f2fdb26e6adf02bab7be8dbff65742bc3583b7e45151499a4a8fe26e210d8351a4e9e9d5db7f33d02e9029a38f712b798565dd2cd98162c9f97cb52820174879d548847379da6b2b31b6f9eaa428ede67cabd2b68bf74346b7fa831c723d2659d0e4eee6bcaf226d5a426ef2a0dc0fb4b204063ff3f0b06d7b0fade285105a2373ab56b907069121ec20d188e1c4b06376f779906759a7ed9cdb906ab77acfc1ec7294f023080a2046400626bb70b48b841091f09f338842c98e7f42ad91056b8ebb9f028d95f9c51c0198c2374e3e48da70a1ec922cb6a0ffe80164f218d1782eae49a0b87393582c27fc875ca25dbc8f51696961568ee10c4a93d221c405887a0b6257fd31f718c512a52c99b20d7c074ad1c84f57345f97162218ae083232c09a1cf7d10c3c1c0824d620553dc0739e8b5ba5b521fd3dab8c1e8ec469c0948516882c6e035e1184cdcae2633e6fdc45d7da5195be18f977c9bd64b36aefd58fed2391b01320edd93c89808b8acb5c2cd0a231bbf729375dad9b11c52471e4dfb576f47850d32609e9bc62157ab540844139da4a9a1c0ac2f55bc34996d9bbbe044c05fbc13d739b3c6ffdfaca57205a8e848808d7015d74972eb557a03c8150c177737c91e9f6ca832809df1b7069908079b66eb800192f2cd5028ad111cdfd580e89a64c3039ccc1de8ed6db2d360ed9a089706f54a2646919a74cb387edaef487ae307ed10e9662fed400a417be8b89703edc4a0a2a83e7b78ace9587aa59bc656973e1cb23cf86850d9650db760fbd863b9a6e85e7a238edfc4ec849364780c6124258aec9ac6358bbf306321e0c1471207fbc2fd398baa60f319f8eea672aa19871fe37323186c0f6344bfa0eb183bf18f44e9c9aa522dae27380779c4a526dc777a7a372f2d6a02e14228a6d0006fe5f06a27df6877bd61990972256f2506fafb37528eed6412255eb40c075418494440cce3c1b35fb7a5310f64934ef606662c28b440d78e97902ed062e244e0e4ec1fdf949a640f21f671c7e98b89e5c1da249675868a21b1093eb02e3fa63810a4a0d874749380ae206775689e122ba8ee9d8fde734d1832aa7f548c09bb31fe43117f5f63319e7c603d52ba626ae277371771ed79c7c9e29aa8ca645eff9b908182b1b56ca5200976d8023097a186826b2bc9928204a98171af0dfc6ab2dd4b0631c27c1688031a46d27be66049abfebd63238593c12e02ba160911505e12da461826ba80741434971e62080cd1a53e2c5f34daa6469ae465ee1226ec272eee7f0dafa8336054c626eb29b3610d8b5b876c914955e2a99d7b4d32de8aea6eed5b1a093ad45965a55fa2ff53e6a73e21fc19b3c419097df7ba7c6e0001d8324bc46a482580c5c9908f7445a277533879f5986ee8bea98c05291580c67a31afc42452107225eff5b19ed7b5172c6c97b30dfc42e6b4cb2275db04b92a4ea7caf2dc95c869cf621f5a425c2242bbc7c60acd35546258591f40ccd5c0cae4a009fea1305843a1923d2c107dba6391976c35e2058d8742d77747efcf899c2ca9f0de847834668df5aa502989b6817266a3a813038fcf948877e04cdc464804b28082b2083818e3f7b8ec48f892733f2dacecf9f0278f44b8ac6906bbd0b345eab79f8ea3c4350f23af26852d44be8f2cf486379af9ff730222af72362041b0d01296d5523fe9f257ca5a1ebf2dd412ca7f32b60eb82b68247da67879380c2e1df977708426815a701e31fce916e7ecc01fd5eb775cc7bf8b7cbb7c4b2fdfd6493880762c683b8ba157675afef55595b3fffbde37ddcdbd0025b4dfea8f3928e74d652a87bbf95b18fafecdf548cb62a92c6fb861161e9f21177506e8be07b493d236e12e81e8e21eafebaa7e2331574589d08c125a674d86fcfe143c6f18f885725534f690b54cdcf4df13a10404c437b2e3b7978df0aaf031d7f0a82b029780587584ba51d545923f353e167cd8f8985bde97a69e63b9917e80069973f7c62b7dc1fb4007f2dcf57e5ee2f5aa8449b19b0ece2a9f236419b8d154a7ad1b15f1fd4520f499ef331bb285ed24c285b2575490ed1c85a96db802293506a30cf8ee8528df62e888a52191e015e1a3fa086d8c96c0b67ee640310ed471a13b60830b0421bc6437d3ef06efa6ca0d4dd29a85ea35387dea50978f0444e95c2264646a70f88cfad630193237d42bd367a1f0c0a05b43b0e465a03265027484b0fb2b1cb3f0ab0fa19b29efd987ed7054e090b1f8d22647d3863299c5b05a1319d1f60e2645af85af0aa80281621667425d32d3903900d41f07457a7ed95ee0b184613c763be292ad70600a290d3bbda5427ab1e26dac54a7218c3e922b8ce4a181fe53202346029886c018790ff00b563f49079c1184dfae66e77efdf55ea4a49817470caa9e9ecf7d8b912a65b12d0d4bb0f9fb061826aee821dd0cb25fac20e57d9a03eb136b8e01ddf7d6b1c25f19322a047822e51e73c5402f4f87d1855af6007207331af89a79dff67e9216059a6eec3cc0620c313f8d1eb8a53647e66e9dd4fcf01960b18113ebe42127cbbe6b2b2a30b37daec49c1d8d52bed373b0b14b130362f57c058df35029269f98f362b40247ca3350b550b3053b340c489647dc851a1d82ff6135b762b6494ae1cb37e8ee3ce019e5631a1a504aad3704ffeafaf14d348d8a8fcd7af06e9d0ebbdc9715e3a2af1c2df9dbce1c6e0136c3003d949f59968a66eae36f205e0aeb565ce3e5e48be41ddbc0b5e300472e87b77e3b7a43f245074673cb6d0fa42f726ba9c994a8401c9397fa272ca042beceb2ee68df13b440e8992889a784cd783ae3997df26f82e87806b3875b086591cf6baa003f15dad1e3450ff785ea2afeae5c470d0634a760c33eda604c22cdb303b1a7c4a2cc30998a720284a8ee0d8e5b0b760af27e4c37184549fc1837cd1fdd08cc32a7dbc2faf100e7b6db8541795791eb482f09e98eaf1c8477d948967b172dcaa0f32233cd92d9df14c466a0cbbb1f071cc7ba3fa4ea9e8f99aae3692dcff38f162b406f800de1e9e35c57165eca80417974069e62904d8fafc41881010f2c6c62749db8b45bdf33a78f007490d05ea3588fe535acabb564fa50d71d1143343606b8f68fa8403fa9a97c5e4812e1486073ceb940f5f2d9021be2e491a64db4ba275c73d0a273d6eaf5513c382a96f2839e6367948c50d6c0930868dbc5c8d35620ca6f860e6013eb978050135d16f3e6baa063eae019160e9c7932a8104048185e4530a9285857b418f3f57021ee0cae144c9e92dd024eeccd03e6b31059c997469af26653ab61394a2a2d647dee23820eb384f3507d628039e08f965d4b630852b59fcd8777322e111b7d8811a017185d858d50f20a3404786500c166aa2716a2f333e3da3de2d7c720b2e6d0430f6ae760d79f07cc330b77e10a34045556c9a026a5bacdbbd12b253daa1a439cd875205571231e252f9c9052787f0ef27e7671e5c7f8f469431b6f7607ba96bba7bf797b7a92904fb5e3058d2f476ffbdd068c5d47e8da1dec280ac0cc83d8fa08cae7b8f6464cf16965e82dbac7ee0dc5372949a1e05937769ae9e47ba6e92035ba3fcc878101c48dcc3aace88918bd47a09f17151a91a606c5c5cd531c4abf09fa923912adc4be0ffd289226f9184c642771da5b0d5467711008ce3c380dce928766d69876d778a9a0067df0b5c1989d0979e18b3caf2823848fdc97124f602d556c399744380bc27edc8fd4c607bf13a621217e37c3f2aea456bfb29c0b4d954c35b35c79b5e080cde4d53c7c2c3f058224fb5a1f562bf2615ee466e5019acde4d779a5e06bb550598e383957a37e555fe68c8d876c249685614d507b2b1353ff7f25e58c5b135069e67c422c5ab38316172188c5f6f611f4ba8f278165b901bb49a05e95455903cb41729b49e45a77701c1dd69d74da0ac20620617bdff8037c7f40d4a74eafd568c337bd53b4bce55108702443b2ab4491f2c898d1810ffa410d780771c5deea12aede50487f89443f8a803d6e04c069dfb314ad2918b0a3ec1656ec482ca891498a1d198292ec11ce0ddf7a8d44a3d81d8176a0708d68a38ecbc9679f882022badaf9277116f3ab58b4aa70723d260df757adb76532ae36bf2e270c11343e343cae87a03a43fc48d82ea607fb47e07417b70c8452a92933930181238519652f8a8a0363d7aea1c08af61f46342256842e3cdb205ea46c5c6dd376a32bcc4994746d2e135cc2535834507144121fc84245f5c6f242814b1882ef658ae003c24682673ad4551dd90c86974860b6b87ecb8b0865b8543317cdfea29859962b1375189cc8774c57f9d9f2b04b112e9e180e8a850cc43dda16035d9af1667e66c180fa847941beb7bda205990f9980f9169d6f05571ff72c04730d5c2b4dc21d150c3a2b397187ffd6322c97c8cced2cd7a7cf7f51e5c8156a5abb1a245c7633404efe2dfa85aa0c289761fa154b11a049266435a549c03359022d24b293973cdb14b9c77b7ec6a11e1ade8dc61f8c0be974325ce5df25a66d3fcc6b97d0bfd6b0500c72567875572a9ddd3861dfbae03cb3181f3d1fc95d6c15227e549b67dcbb9ffde20985f087b3f2ef231f084503b6ad711e2486c0add80c9eb2470de6034929f3f633569d6add91ab0723ea80ea4c77e5c68699c2c329476406dac605d649f7094110eb276b48fcead2d40051831143763d407b54d299d40f2b75442a0b83b135977904205d99420b2f133109171307491d3a3f3d68560c1aca92ca244155236bb65d13c602dff114a3317617b936c1bdb9205930f7d931c82c997225034168489ba6efd05c9199d74314dfcf88415b404ae9d920046f7b1954a127cc6c1736758b61b0b517373c0ed9fecd8dadef76de0ded2cffee8f5017bfb7ed75854f11a3f3c965130b388c55e23c10a33226b03938591d8c43fd6b77e19767f549cb91ca6a66779848b66a51d8a5392a7f780e0ab45af592b6a1831fd724847be1a41682564d500048236500702bc633d772fe01d1cc59ecefa6e60132e060f266a0febc59308ecf005c400537b10da289c5816736c825cf60411c86a22af70f8a64aee8a273e229024a0232b413facbf25ed60c484e24064132fb6629c05a903cff88af4474e3bdc9a67a9d70aa07b563a8348327e6045560dea10fbb46a5c3d7611c708f6947d8846c4f5d6e6ff2394fc5db4d0a81bb5f18f23c22db6103a28c583a833cf7244e429150f11b5c5030d797624305a1e8dad582283795d7e574b32eb1052491fe241898541eef08e02d01715f512b9157c475c66c2d72f1460606261c8e532ec17817910d881257ec98de02ed2b4a61860542c06ee0e0cb04c449ad2ad653b4321786472987be87f88b6b2e71e5a918548bad810934667eb9fc58b7d0d05c4ec86e876f50602e09ab7cff6aa3f199f6dc507c4b6eac3ef974b3f89f75d235931efacce9308be924076f5c76b388cf36eefe3655e9b0bb19442f85ff8052de6dd97c37650a830411f25fdf45f1539c771840b403ade374e864c60423ade51a405fd795ba6c26f45a119c626dfeae532a62c21cdffeaa42916bc5575a0183cdeda33be400f781479e7e5435f0dfb0ae98d224b892aa8d32bb2ec103a0c57ce1792c045d7b97eaf28fe3748a5070492882cf9f746048bf9932ccdce39e49c7d97c9de56e817f9e45148063af4d823687fd5db50a166ef15e68533d6ee0187b052a3605211c6cd4645506dfcea1e879d220e5f13bad72400db6f64db683323034103307537fc1b7c6cdc050440b439e859c858e70d4878cbd190a4b14c8e8b4ddcfff7747c18758d16fe0d66430f5e6548b1431323cf02806b08c14bd87c26ee36aa531eada113a851d33d94294141fcac57ad1f70f1c038961b9ce69301d15881010281a50342d84bae13ae15ff6ee19795e3f763c5d7cc37f7dbe3b509863741a3f15538ae21be2f45847dfb97b0014420bb07d25c2a860583a5260861a9c0681cd797495cca2714d8c1f848f58d8d0fa4f1ef857da92c0e34473b76dad102399c4109ee4d5b8c84bd8270d5eea1f4a27ac7877f77264719dbcf6906a1ddbc58b140a23e335ec046af94895ea8d15408be13f47ad18b08b8817bf59653ed0507d4b661e7d6c5fe8d10937d46a5acc7f1df48382c0131505bb9a587bfbf759b807e0c14e186880f5cbf640131fae6453515da4bdbbfb7a3c3af57cbbded4e35b5b52ae1ead677537cb0947460f63de9b423f63757ff3ac263b17697641536c4ec79a9cba4112c3888e98bbd0dc42ee7b9eba839ef6e26cbdad6802b902614543a8f2e252b13e6e0f5d8c3fe07dc1fa8ba134e85ce864f519bd57ef511d5466b34f7950c9b57496aff02f3114117893290d46c4da0cd8f6a9a2a8dea31447cad7d55ddddca20d9789f6a6ae78d8830d6cef9451a1b0268c65315d3d66685006a84bd68a94aefbdfc841301e09b2852e4f9bd01bc014c911a3949d384554f03ad3ca90d7b084696baafb1e968d875d876bf98a885b4dafca75d5c7a459c1b386974b09a0c680ee028e98f9b40a384dc51069fd373b06d2103d3a27d4b7b341b14b8d424ba8d859ae75b2756329709beb8ce0be18cb78b24ce71aaa9d2c45c898ad6a957fc6e443b084de2a16814fb70d05b92cf8082cbd67ce3d0c48284323cd5afe893d4cedfa054968f8a3d4dcd2deb056ff78734bdfe32b949d9149ecf9c56f4990037ccd426f4ee927c515bde40d4dced30e7d860089695c4a030e1a4a68400a52648665d0a88e6a563f6df6b04296357b35571da75cd91d06111607d9ea61244729977265255caca213ac0f3fe97c468bd8cbaa8fee51163b7f040989b339aa233cef7baa1450c29f129394d5ea87dde776d638a49986e80a62f3757b50bfe425cfe94f5ad9323a3385dca87a9c212d77cc8ad3f979d9745fa0e068ae3740084484d04f0bc1c79eddef6963a5710965abb3de00faa199a60f8a8e656c7d20c96d6ea2895e5405f9b3fa7c56ba43efd4a98f7ce0811e9e342df3bd4e13350460f10e31ca979922cc2c8a4891afc7969679bb4be83924596eceac47a8a5e32c7bc84e69a84b9e8077b23c3fd7009384e697a271bf18045e2dd2f3f4872b5549a6f46d2cd179a9c77542664ac3188607d2ff3772d42cbb5d1cab494d69d7ff3869352c6356e4accf62a6e597f84e60df3f4f3b2ed1c213bcf960b2023c839f64e1d99437a45bbcd509433724c5591c5f55774a0923adffcd54d226d710705effd7a576b45f8423f449ca717e1f41409da3b0cd9afa22a300861dd6d1fe07fe992fd105b744d2bd0c6d972a8844e9b3a9738b1a7ff8817c7c06d0e8d49e75089c8042f01cd094fc1c064bda73afdd7d0a72c9bec3381f2e7886ed12290eaaa07f2a211afd0f91cf94c2965269c9d84d81483b903a5f3e5e2bc8221fd405466c2a31a3acb4c71a4fa6a157dab5644673b38e61247d37d1c08d45d3004e73245666a8300321da5ee549454b3e483dfe88bbb06dda1949d26787884754183040baa997c07ab683e6a354e06ae73a2585df8eb5a3b731bed6616b03fc89afca8aa25b16aac0f880c4bf44fd94bf89ef1006b70bc671747159fb0e93cbd01f45783646912852abbc668952b46b6f5601820a9b1a58aaff820c144d82878ff1f10cd6a694a1a99ceec8406c50ccd53b9002a47ea62a25a24e8f830bcb40a9adca47751d9194ee3c8f4f04dc58a067f9251cb6a28073c70f1f49ce8546a61dccebe920fcd10c34bc7f93e7396a1ca0044f6d6635e70b4441b45735b48027c7a63d0f53a2bd1759623d0610d2999cfb7114185f7fe71202e3b8d90491d03ecf0b4a892e5aa04d2ccf039d9b7c3daa1fe4394ca4b21d0d38e0e7b26dcce39763e0a1c3992dc65e1b33e62c857a749ecb7e6857a8d60445e32ec5ff78958762827edc16436918513132cbca852a97dff0565fde6e53a1479cc1e15be1b099cc494108efef6bd6173d09a9e82910e9c022632fb00a01f3326237746a877ae3d0f4a8313e30f61b0090681e11fbb195e20bce1c4b69a7ec9183be2eaa53f9ada649dd7e8d7163f4d11fa010a3294d20872cc3a45a2625c9d4a443bdd443ce11568945cf4e460b46aeb4bbd7fdd02081ce6b0b2f488e9adfd4182b5767f818312c1347562baefbb2fc7b9ce2824fe45bbbdfc2f7a4331563e67563dc363ebaabe1c13d22ea840854f9014565c2159a5c7e3eb9b32e6aaaaa7180c128d7ba47293f594d196fe1ecfb0b6a5a630037cf7ff5096967a2318c71168f4ba599fda8dcc074f2e41541576f3e32ee48c78736a00e57117964c2fa7f9ecbc2d4a0e9b9faf0c963957f0b40c1c4043219ae6b3ceecf06dd3729195660b9032e250c4a62692351e42de32c23054d8368e96d6a2cf52e0c0870c7ae483df2b7d746bc8211c3c7d8245327eafc8b10e064ae1c5d278e12e9bba746b10e9babf2b8819734d5167fcaba42cdf3810f206edf66b6ee810731f15be490ec726e5d1278c09d11581c253b86a17a2b82992d7cd2a69f7f253adfeab21ea3f776f01cbc540b7192a826bf5d3b251c3ccbf833f29df6de25f5d4ee02f45deccc823389d16546fb3ef2fb66e4b65af7d26ff50ffc546789b6e4439ab9fa6feac8507c2b43a0ba2cfe45f288c689515a3f5b9f261c73599811f1195b714c17525ea8980746f6eaba45c520579b3cf77e639f72acb0b3b540c815a9dfce5c15b2c2460642a91f10e85addedcd301f6790cf2f9b160d906db8aad798b427aff97d226301d41ebe092b6f064689e8b102893347e2b0ad97597f080d3acccc5b6b462175ddec57cdb3044279f730c5ec02c293bbcc8119c3124a3981390cd15ee82fbfc3e5ae4bd6e05fb5093f6c9aca568fc95838fa3d7d50ab4ae70bbab66d4391b41a19ed4f2453e1e38e011dd489b132ce25e8cbc50109641696af1d589a66302282287b711504db0825264fe6e2076dbd21840fd5427ec5aaa0cf2ea9e146bddaf82daea236d9ebacb02a4179022cb93dcc9480006f074da3703c9aac19ff3c2a9693502851508efe5d32a973198fae2fdb991407eb54f3738837a17d3be7da790fb16d74cc99b2c76d2c00d5a33b0bca395cb887131bf8da28df477796fe410c064c16055e54686a5556f1a6e492e551a1bd77bb55a90db22cc11101ba5536afb5b6c9e96ac2d8d8c6103d2ee5770e9e86665cb38c3ca46f496a8528186a4ed61e709b58dca569df4891641d8b794bd6cebfd3334c1179c9740facdc62b42b70da743751bb7de5d5d48de515d02b32eb983d3d49488a7f2a8299e4b85a1c1850524ca58372338978db5ca87e8658cd19bdd293c36de66a7a873e1f3070e17a7692474f46bdc019cb26b68db79814bec97e304778c8a1f909c696b0152b3d997b560c5fa15caa975903fd3720b39f8a2849e8b03dee50432a4429997d7592dc6bc61cc6224d6047fa357958a15a59cd428129791adad1e5e62ee353e8a0249c2ff293d3f375d9b1c1a0f47c107917a12626f64d48e407630b8b8923a7ba7f59aa23b4813e8b9b196f7f983104f55cd7c247d3ef7777afef1ab6287dce7d6d96009d4df8b7d3b4a1bf334d05caa4c852f21d1b6ba9dd411b58dac76364521fae381ed79fbdac742811c3bb77619b30c1078dff9d47265fdcd72c4422a8dfd24252dc7282dda6d5c9f386e00b709cfc387171c3196aeb6393f7ab6afc5a01c948606afa4a4b534e388c49c23c0568c88081323da6a76be6fe2baeb5c129ba64f4a4a35790a4a34aca4200e8532380495421436745e1d5d19a3f12d96f5f18043f2d3357aee266c232e4ea473c81c27aea2cf05cc57652e62e0b0bf1479b8ab3a596a78a1fd478cc28c698034b816704fdcf29d05315ec84512c96800e113af80c173c7f24a44bdbdd3982a6edab2128d721eac1a5c35b6f543e9dfef455b47bdaea9e11a7c33cc10083112ccc25d6267d4fedde6454874236842feed3e51a046e6445ebf5770a74d1446afc88398888576fa4de0603457b2c4fa4ad3190aa08978812781d112988c3f18ae1385a9acc92483b780defce0ebd90d87a937d929588ddee79c516afea4b051ec0148939deb1463a1302aaf9fced52c55fa6351e82753b1ca28324da87a255a81350cae67536d4e6f7d9eaaeebf4847732d8e27a41ba9b44d3973e0913148b54c46f39a173bd2b1e08fedf8eb87c45180142aa5218f380a14e11672f444cb214672648a2791a3b00c7301d359a490108979455669ff36acb172a56586a76a1939669babbee51f9988e36079c355b6e2581ee4043970eeae2c578c3589bdd3e41c18ab99afdb8c5a2ab0a64c2253e60904c9b75d69eefc8ccb04fbb98a282ce638ce9d740df01d16ee589dcaa1f6dab8db278a51f5baa58d65522b470ed09c7ab226c25a7c22eff3825188a6e62e0e18bd0a20b615880a744008c44fa13aa845557675e6f23fef2d3b5e349aaacbe1892331dccd7662d41786144513900e3c51a316c856b24b26ece4761c9feb709a8600ce529fa079ec598d77986a85ffef16b5e4378df87dfedc1c439d8f004bd4bce7a51168991090e3441c7402336440d55b70b1c27c29dea3c6ad3066a62c3dd6dff1e99ea620028d1f3c87a9bc73399f9666236678d241b5b4bd688c007cc481e6f099ff36decb3af0474bbc945934d4d00969ab0513b3f4e1787d6a1f7a83bd035df497671a807c60b075e036d55cc0864f5113d802cd9d51c5a1c36a4b33dd97313633ccd106708d4b0d8d77473248b824eb8cb2aa6b7469185d951c5f57559900761249e7c5d2235f29743b102622e9184dec4805c4d06cb416010fb397024a7329b14c0643f50a0e3d20160cab06233ee01601b57f4eb82f333d6867567c2b0cd3f6cae3915d33564dae2ca225f4237eb8be22b67e3ce87839fcfa7f4bfbd5a1912e2342cb7e7133d3a39aa067e365c071b3482638f27cc3477c1cbefba1e7e217b7995b7b53f486ed39972da55889fb8e5ad6d12d95c205438b10c180b5462033fc0e382b56911beb4df3d7c57e1d83ff1d239ef255e33c607edb7152c3e016fb4db996cfd959805d7d6c0736aa840a1cd36ae6d00e0d187daa5a9805ab15da83424ac557207dfca740febce4daa38498774a87ff53cb02311b5a9d022cc93f1376b0055ad0afa593ca21308a30a3d1c62385f326ad7edf396a75c41d5f46f1221919f94876cdc7d708d93319845c9295279463172f806cbe71abaf22b7195f7216dad65b4694bf1d71ce788b6270af56774ba52aa90fe2334afdfb459d628e96bbe97d03385b2684ab57cf2281025219afec3048091cf0e76e96cfeab1358bd571c7fc32381126421c39e9aac360db272826a0f664ab0ae67d622ad2711a7991700b8969884bfe9effeaea210634c9f9066783e891d88864f1b070c5b0b2c0b25ca00191db7fde84a2420712325ebbbcf1c2050c09da84656b03384425301c06d6f9f725b3bd318a101c9c16c2e060ffa05095e8523aa86bcd306f560598cc3edce4b61fd7f2de905315c07472f1228636163ade468d2eb41e1ba6fa999085d8a5e6459e4d72054a932771eaaaa17418956a1bd963a026ed4a82065218af7e1142d9e73d171dc667261d6cbe0967c5d6228373b20236ada6c89c755c48aedf66a8105641863ef6d96918fb20ceaefb576ef29bc2e06dc7d9ce0fd12c6060f0645b9e5caceb9041e52a0c716e7bd614361933e560f4cc31bd33c112793b123b83914d14a562d4b9ed5441ec26a6ef1fafb3bafddb08919c828466d41f9fee89c362cbb88d862f76f01ee6f7cc8cc6395c196022de17e7d5fab9024459cc9a812ee4d40a6c1fe80b0ed1f7a37be68040b53357630469c8b867cb04c9b109b20405998adcff49ae2989fdef012177731c5c0e9890ff7d88b8f2ae4423c42599e620fa0cfb64613c54623fea611562cfb9d2c01a3576e9d14838fc4bc191a0a64815635a11bf237b457a8cf24ef3845ccfd7cf0b9e339dd9d0d7bcd59c07adeb1c65c687643316bf6862d50c59ee674ec682730b2b389bff15a3235f3a044266458968660a588d9f6eb358b0012f83761e7f058b5a85e800c8d9a401678de8f5afdf5b76d9744df0a3af0b26bffeb8ca3477d0bfd5062593846738999f044c7662bc9fac42efd921405e87bcc73a8515a76592c2a7f5ceb1fcc1f581dcdef6d3520f804149634e8e26a34c383fd2affa4787ad0422d03accd0fd621e23ffd8379f93b7ca0097fbd14b187b29fde04e9aab14c324329df524cc125376e5dfb1990521b2eb8a939cd23de76c45c2bc6891b89e741c23a19ef591fd8d6b2f62535fd559427030ea0882ea1844bd6cc194df2511382444480d649d6027a0314987c18de44a33b21f9676993df5300fb12f380cc19fad22c264dc106fb97b6cb9c486192f8ca6a18284b9f82566e1a69b7128ffb6caa53a261a598cb3ade384e37971324c2bb231450c75a0555230dac776263a450cddc4812a936cad21a12d93243a2d11d323e7ae0e22ea4ee0454750372a25c7365bd9c8b15235a1e368494c7ebd7fce46050aa9172613648ee6de84522644ed20e42329786ffd5b9335718b46e275a3ef08293fe734823a7e4800e4c8e767ec1e205457b84c6dbb9484556571d3288e0b5c6e64d36281bbb38ca202eeced00338d13fd75b2e62d4bf0c5d7e11a17bb4767b24b93929029c6513a0b199306e1b9e34cc005ce1762600b0453a08b92f89e5a5b58ca390f8ba1aa737f39a0691426e71cbc56e5286b5126edb9e379eb4dd32f778958bf9cf72620616fca252f0f988c99d37e2bbd8a397722e4c40a4a10f968a71d5787742991b3ac4817e73d00435821a14bb457f54a9bf85030efd3f0ea5222171c93aec295d7817c908f8447477ff2d6c18a38d17c61f25df28d4146228754bded89855d43015f31d8af08252ed423d3bb118e0522f8bbdb7c7528d0adf00bff0758b7630b0df805be0bbc0d5bf2b07b0615d3cf5ec1f7c161ad83aae2187f1e04d4324fba2cd25c34325cdaa91a96f49990a6334cc8be20e59f84452e408ac2f7f06bba660918e3135e57ac1af0c877975819168bac28e8ca711e53e5c2ec1b9c87a6102e19a4a7e42efeb26a24cfd1ab4e0f68d530da8dda1c53af01dbec9f7f3bdc6267118805d7965ce3517e6c905e3b575d023b2288deadeafafa0b104b7f3748d6fbb8b9d51f2909161b1eb1b3fcc3f17dce5835b8a7042a2b0e406d9edb7ccfbd16d3761799a2a8555a39986b4453b1460393e5b4c0ad1e49311648833e849dbda13f8097b33340e462e4d61d0418fa0888fdfdcd5b762fa8b7d5529b3aae774a6efe16cac3ceb6db1889eafa658078f0496795ff6810aeb2c312cd47a77b4124bf0a20d890a144eb648405bff784b5ede65034059360c159aa339db095686157e131e6808112c5f23025d23a727ceee852c4546b159edf1c2e11230774d496c542435870f382a023c40b3c2641fbe2acff04fe17106ed5b5fecad35bb2ee4c786cc8b33845a56e9597ef4f92a992383c472af31d1c7bb1e3b6f79bec7142a65c0be3b9b2b6b7c1c2c3f02929a5b6ec021f5c3ea3da23cc4a3fd058e23b8720b4af89fd0d400ba953f876463e8229096e0a05a506938e8e012564cf9fcf8204c6ca709c879f99191d412f24eef609fe69a6183599ab09fdaafa4dfeb8d472df6927d90c991f9ded40b8c7a9f98fac16a653304fda0d7e936a44804184f15d30326d6816df20c749692b84978aa8c46a41f92ebc1a3cdc316b4c378235bc1093449a458e8f9d0692e209b642dc9536f3aebccd085b4429d277821019b00624c471445b3bd0e6ff1606878b763a5db8a9e46812b39d4e1a4ed2805096a4ef96574763cddefb4460075e9dc1d7a479a774b02e4f0ee6d704126ff613c6e35d8237ababb62305e37347f6860e0cf335f102bd4957822d5e220e30a88931b3e322b850accb95dfd6bffc4f16017f5bf41a7034b11ceaec29f8a63439d7142f0adb0814bfccd02a66b8ce72c2897c824d6a016e84d679113db2ca9238f8a47a4f63befac2781a69f3a54dff1d09393324df544e6402ffda68382f2fc8c693bcbac703cc3795eb294d829f4c4d2711d0b07ae09be2e282ffa1cd7dfafc14ed2259faf8e6276f7f7c7331d8e2b440e9646d286970909f2895c8ca438b3a1288034d8680409b74cdc64ca10bd9055d980028af78995d6ff65d401226c10419312553767c5a480c70082c10c9117dd92d9c0c13d291dea7232e51804d4cbc6c999c8f169548ebd688b1c81e0e9862159343eda0e5056b5412836032121bcc0bfe7c2874f29f48457730eeec7ff6f6373f5a39c05a74edeb398e496187bded9c5d4ca4114380791f89ad23f89d206f717df2641f41c0a706f0f5d2940e61b09d03e5f4060a044bdc2a5b839ced54f044600654dfe3e3a9fa6448fc10e8cec21b0d77b451a38cb63ace648f481dca0d26c193ba4c740f0d6de8eabcc9144e1ae84716c36cfdf1f5c9277f59963f2f4b3fecc466218b0f96fa320c96c32f2a49f3dcdbc726e3e02e9202420ccf9313c6470961c9a428f2dd158e5f12f7aba5c5ee46a890ec2456279e80293fdcba8ab7e67ff2d01a8636a35d04e07a272bac4211638fbcd91bdab9eae1db10888885e1304096d997c5b90f88c2c8374e1607b6cfff6f0d9da21c12be46175e0eb3b2a09bd56c17718a84f2b86427c987ff6b65934286271a7174ee3e97bbb9ea20aaead8a49eb2452e99d181a5cab882c29336cebdf5704a13fb7896cd3dd315891171b43998b3f6ca755c5e0b0f862d700ce39a009b44bc83a4c09958d2f80e0c9873523ee7a333616f498d24f32a1512c37dbfea3a962597cfa2dafed25b91a8565a29a5a62695158ca58c1a4f690933711df6f4dfe870cab9d67be1a5f2c17b05709112df4334494b0a1d6551f161c8410e1294e685ab331908314c19c74a4fbb3c85a84de4259e7bc4ad84ee0597b41e83a055e216218a803d79af9cc895109ef6444a9c2d82e0632595ce7319702cd9fff69343e7862f565c052a7c48cd7a8b292a26d2b728a4b972693ed560e38e2b938241821b18b226fc4d4360e3830b0a3544d4050f43e3856b69a97c02115bad5a32ff30955506625029790a93fc188527620aaea4b7c4aa586ac16fb0916d0d4f41fd7e935b8a2b0b0a46a815188c5baa9c932034a5467d1dcfff29695f7082817d49e0d6347a4bd1f0d2ecb35384b00488be5a6e0903ad29954586acea5398bb7498d450e62d20ff57d1a7e8cb7f8cca88b76bcc78c7811f848ece9c7c03a36ca1afe78372417dd742a5d69ab674619fb03dfeab78d51505c87ab6b3d7ff18d4fd28a163d509d6c5061f8b0ef26953a1efb1218e5f0f53351c64ead9a491863f1678f3efa53a245cd6daef7ee855dbb10133be9ed75e7638427cdf1d928f60715a5c0b5cbad06e8edf2e9f7968b064ca1d90a741ec0cd52a952ca57023214c25f73442f6ac6f1b73787a0ad7bec27bdff68d892cc56e389a9a1d7f4cff0285ea6a1ff4fcced5acedf3859fb1dceda264b7f1828f0bf2847b22711c2ffb13f9711e5c37a30ff7b7901228c0e54a36bce6f9e3a03a66d1f849d72b8418aef50abd53179487b3b922c92de9f2ce91b5cae0cc46f2cb2ad833cfe519da26050ab09fc40f4f5b2881eb56a39aa214aa20f8aa923dfa80f8c3d86c8f0433cc892c494d931dc2e12fcbebaa7a78cfa7d8d206abfc830220a918487075593156eddb626cc109361d1dcc9cd1ac761385feb9e53c1e5ff691b54e720619cd2097be5309dbad88880116a77b046ed01163f54b65c07b2e26520e379329c2a3d4b3d668e1d56e4cd7ae0e3b2d1927bd204819b30bd936383e750361c40bc670c2e62d4bde4a7025e9067a54859a1f037d33e25ac9be4d14bead615b18ed287f2ba814e152f34b0986db1670bae06c5a1bc2d6c43b14bc6f3b92d10811d795398abd5901a0686992d2acdba22fe24ff83e7ad196e4beabd88d74e676f0777d57a15b3dee3867ab25bd61f4ccc304ae5d32ba27a7042cc05708cbfa698827df9ae400c0234a60f733aa3cd8f718409d3eeb7f1a9c0e928fa244b319826426d1f9e8d643c658ed7f7e33d2affe16ce5f1c85df07c1080a4fa1f1f2424366a7aa6c4285dd9d48ee864c5e7e08539d7d77d406839a611a7e8d78a4f95d1ae5b323f06b19a5adbc5c06bb38113636c3b6aaa760b645c95dc6263384a34f07b7a2aa19661437611ecf479e4ec7560ca98520dda50930a62b7f37bd403b5c8b43d29f383896a12b01209025010564d501ef5be08806db334a82b03705742a22d08086c40e25cdcd933f047f991135ec9ba1ff0be5e1eac1dcb7574883d646b65e6a5022122353d529a57f3a18983881299ccc4bb14942ee4a9753338ea5bb332929550f897da6cf10a78f39d83bbd5924a8605bd97ba874a2017c7ede235443615c25f19fd2624edea81fd922fbc5dd78975f186070bc7d751534d179f12d6ff91af4574138c59d6cb5f89ce9b255aa8ea09fd1f3b791bd0f75ef988bed33bbdd996b3c39633ab1a2fb0406c2469ec303d88b673ee4cbd2b5e64ac65f9e458bb255458d9bda250c74aa16634e3b123e4b3e186300747358c81d0652279d8e7ca2343a0e118d60fb8bef94497ee119c0c54e3dce70ce4d2d96fbe2714e045d8fba6814b57e61f075acb5a84f209b964370617857ceeaeb4eec0523a57bd2731225345fc39c71c18d8a563865f491ff705c01960078435361590ada7c083bd72439bb6dc07678a1c9938e4946bc32804f8a727a5efba93c68560694c63c2d23b604bc5e39b2ed245a5c501f8a5b37181681076b36fec0f4d4f963d94d24ccc2d94fe7aee004fb3112d138c66a3496aaa0e30c9f65cdc9a9a30acb7eb097e33629218def5ed98f109c7bee962c4d12061904de94884c9e5bbdd242b0ca8f4f8339ca3dd43dae557dab861f7c88f2932fe6d5ffb73cb5389cfb53c7841d20492fdc46a78369ec1c8af88159f205924162927da722e59073795b18afc4420071ec7bc7268161ff554e2320ea8e54c01d662993e3dffb0e30a25133d37797bacc8dcdc8cdf099eac830dc47d1a5b2b44bf0b9142480c9d0d832c1cc78ae0238ac55236d1548ecd502bb0817d7f38819124b422f6a5b7cc31dbf101a73c4046afd49a2a1a0b0d38d33a1f71e6a04e4d0a29c7b7dd46972a7c29d033904d720a3e1389572a6a461df86ea930d1c2bbd5a08e29a49924b6fe8e089e3c70b2c776006b0a82267b72049e36077be9bd00ed79bb3d1595adcb85ef62966aab817ce63dc29b5791f2516b73c9152939812f1e0ecec56770a723969e4ed32ab17a77d58ec4862a84fd033253c9489c7fe75931d4ac8fdd3e01638d3fba94c3f1795f855507edc09d6111dd2ed10706041026d5ac6dcaab7c8ea3eede9f0d8a88b86a77c8861d6f884aca3b456f0bb9a83cc9af6b0517154fd55e95c8d2fc1d80345f496a881db09577f27e8f2e11db54bca99b3659e2a3a41f2f17c16171991987e5b9459e6097e7e593a8aaf69b47af8e9e5b3b021791a58cce4dfb6965b4d0839ea360bbd862d24faed45da96812a5abd68cedfd73a3770dbedcb3a03e6d216230a9642d284b3cedfb38371008d133fc1cc1979069fbe472636be983b0559a6b8d2f08b7527203d22b63c5105c9adeb53f9d50846d77943a8ffb1b9b8d86819032e8ddb33141c12a48f8f4ca4420363494ca5e324311a6f335bb9c86b56fb7fc4182d8448050fb347e17933554313e39ab044ee2a36632b2c317a87bc67ccd55d3e8a9af9148419e73b1002c3f5adca282791b127b344274bfb71bb10498288d08cd480a3252d0394f065aa99ef57c058d90b4afd684a7ed001924a54f68939a63b661d6e40e6730e089dc6bc8ea60107b141c78b1104120b8be1633b93b77c227eb1325c993e0523060c0a0044164f05ad8999f0df1d4e9587a74996d5c7b09326d226bd2e239c6b1e486b4ab69a589f8155d2c3dae2f036114ecfbfa45071f208c0eff2bbacd8b3ff847619887db611853cd78882a34f15388ac219432043d29e546434fcc9853889a3894111129c500228ca54f84c5e2aeb398a87437898a3ed440a91c71181229311282fc04e2ea93f82bb9ca24dc67f4a9f02fa27358b430959d4410b3702d118bcf1ef689ee16a3c045c0c21d2730988c2f1355f9f7c96ca325f6eba54753da1a93eb1ad676330664ba35002436faf9ce627b74c44781b311088c440d380435a7f21c7596a1d5996a0fc2ce1fd06d880d05a00fefde86fa47cfef0a84cf7fc76b1e2450e6ab77ebbd64cd4facafe99cdaa0d0751f2a0ad44016efa9fa49bcb543d25f1c5f0a22595994381a0072b3f37a34aa8c98dd3c073c3d155879ff2339275fe5b7de077c27cbf9049afb5bcb9207a81380e3ef05ad08fa5b521071fc53158768174e8c9160d9c3e287ed2c4602bd9e50439bd312b401a1693e33f4ab686eeef79c810d49ffdafe86cbe9bf16726af74eb586f1b52c01a5fa1b0d57614d70edcdc00ad61d30bb570084fd99684e2754a477973babaa5852bf185f7965e878a41fed829994847824e95b1bee1f8c22631f1d05c7eacc275352a4856d1ec25a713b093fb2653fce10140144cc4aad1fb1c0645510a670c84405037159514c827fbaa733fae621810a298caad59d38f7881759932d77aa1a24ffff25ad6f9e3d892d79bae2ce1138eb031b1830b92420d8169396a64e4109b391a8d86929e8abbca928bd12c8ed654e3ff30f5139120ed02f97a06edc920b4d26e4bb9a5d196c5232aa8d39c947c2e353602947141f21c30cc415793855c1d3a140d26a6f2946cda6b19be40e54abbfc34f5dcebfa3935344ff2c455671a4ca5079ba30a88e1dde4ff96e9cccc1e13529dffceaa8848cb5432c60cb9c385ee160b9ed7c4c69a582961dda3330e72ce4a8e85f6e20393a359578c010d9f7d81eb8e4a88f8a7e29e0a671b7681a01eba361e8fcb1885aad4862d822325c5e5e1c71f1f640faf3077de3ac70383adf49be52706443966d705a9eeae0fad710076b840e071040eb13e617b630a9c4b98d367d1d2d583ebadd707a193bf5e72c5ffd6d92edff46786c980ad4800b3dca8bac507183bbddc313e9cd85da06eb8cf8079770a9f19b1e6e093684cadffe5209b3c6349f8d4cfc72293e2f979141a69a02125c933acf2a9868db18d8d726f10178bc9e4f2e3ae34fd869864489d1b3955c824fe22c01583e537324114b2bbedd1f3d5c099701138483f8df7e3a6613b3c0c28ddc3994f4bc48c80d4fd579f2775a984948626ae696322d5cf80974f3f42886611e6573ff8dc4714cb94ec9261521b77e8ae7dcca0ff2e51cbdb09126689e482e114ccc02985e291030933c2c154a12b849710bdcf084cd6ae42967e83aa374d3bfe2d4eb7282058d4f3b49828caee6d57e75f63b57a0f131248e90acded0a4284792d94baad242a4246a9e77517f8670dd05fc152f2a57a8aa9a7bba9518419dff53e69fe2b2063973ae8250aa7bcc4a6faac6fc3d33e882ae1a5bd7b522bdc2a31b2b5a71979913a4ea56f8de5f8139742946cf7e7cb6d99bf49e229e842db087c1262f25da695a2324cfb3e0afb729da728347adadb6590bf658f7ece8e335ec2a82b934311f02c655d720ade120e7e425df4d37c943e4714f81f05cceaf9ed9fc87bc9e8f0ac4e04023ec9a8cda50012da2247fdecd1a6547bb71144bc7a0dfee83c458be0ef50cfef377247823ebc01ec2a3df29c10632fb87fe629ef5b01174db48b574b0056fc02c3596545524c800f7dbfcc3a428c2b6e627e7bbc6fbf227676efe022323208e938b2ac514a667ca90bd9dcdd297849ea4507c3dfec4742b0042e4dfd1d67b379cc30ce8ec05880318d0ed48645c8b8b5667169af468746b88c35efd3f6d45c6fd73e8893fe28d948d931db7d523a0b657988aeac34e3b5dc5e46cce02a04282511f32f32c0654bcd9c27e86242f89d32df8a0b088d415e53f3e2958d4922e0a10c8ecdbf7a7d0fa07128d033bb039383ec841172567b7fa74f9eaf636e8acca5e3cab67fe41a16792373522bb3002802c694a001bffe8db28088c568d68bca04fadf3225b71e55b2969af33e659abc540bfd727f8ca080295278ba5ed8481d47eaa6480e374e51573efb4b55b03520a028ffe2db32efedb1c663ddfe049bf872f6421f93f3cd74f33df9f19b895663270ca41511673595dbecb847a117324eae94503bbf379bf958dbbb4b6666cb182789468324a4ed178578ad91b2145ff390f661554ee42500c524c2a5d26364e49f20c5052ef7b803d03e87605f02f2bd8eefdc49e8d7d26fcad7126aec9828af3ee258d28cd821a297e9ab357912db8e369ed1d76da0c2974ac5cc916ba73f13b0c0be1e7591e823d9de2cb541a467aba8880bf2788f94d2efa2a4e15d557ebb0544f498d0cec6b03f32b176117b1c5219711060b7180c3854da1029ad915ea8586ef2d232d578858efad298d649645f43f8af8d47a27cfc9174b5ec12e3ce8bad57a4796154be4fccb37255074bbe4ce343f94209b99fa21266e20bd8afa394604cbe573c5c3fa6be0ca0f8a9fabcdc1077cd4f9783c4d1f75efc43183f749015f2639d3ecf2ac2880c70b3703886168741fabedf4a0713afd76e07f644ba27c302f086cc67dcc91ba81c40af759258bbb4db725f10e789f8fcf1ce415f3eefe38637a079258091e9a7a383362be1b65e25210974b30a44677fbecdcbe1b4bbaa9cecf3b18005e89afd9c66caf9ed1ee128ded3d82bcb692399275a64d14ef916271c48706be24335ac9b99b56932ed050db9603e808e75f69740542ea0f7c434a8b3cfc72933863d76e61a324ff898dbc7bc29b36330e6a952c8c814309f09c5d253b192c77a2dc30bdc9bf2eb865608c568a35d938d9cfdae9d04832f55ccf83f27b158a1eb849ac17a4fc378b038a11075ccc513e8cf5cc7c4c1a3feb0201ce6c22685015b0ebc21f608d7d00c214ced1d1511e409f26f4a69e74cc7003007afc6f06468a4033ce3b40158102534022712aa2260017eadfd185a799344d7141b1f46b532a52ba6e4a1d97ff33c807785cee2a1817ee5f28e6df495efb2e54d8e00688a3268d9e13a6a57eb7365760f1894342f314ba759b2072f424268e5cd2dcd5d070d3eccef06800cc8551642518d8db0eb76e8b57bdc684f15292c9d1b92f7d89f1d203e52e7dae366fab838245bccde628c373657d9804adbada52bbcbe33c0a74f2602b34cab1fdcc52ef458ec4a5a40a63c208965dfb09b43bef8c3880a102fba83ae7c2119a00606ce0cfa1f6b1e405b379538c1d2627aa97cfd3209e56eb0bd660e088791c5970ef9cbcd08a62aa39f46a0927728ae240388f964a5167f0f349c24f3cdfd33e8207bc55134f968b77047d0c9f491d25afe87854ef3fff9f0a6ac0e283d974ae80807eab01922328e3848795dc04847471d41ecef36dec93e58f57e031078b7421ed5d2c856906c94208120bf5ae3fe41d553de380811b312f9ed9b8b955166165e4e17dfa858bf4e050cbb8397335686610224417a7c64527c5a2eea397f5df025f06a39d49d36cbdb11f1bcd1d55bbc17adc5d5dd788ae45db0619b572ea9b903a0d3f42b08af49ac6d673c7cde3100de5819e1cdf872cb77eb07cd154125f78604cc2e4f57012052b29fe75f2adbc635b4e68fc9769378d142b2966ecb3a76a79eb546cc4744d9c1257b367c6e2c00af45175fd74ebeac1572861cc58cb5a7e231d336834bd99e41349df19e8b9d61882f66c6a22215e76b801c936fe340d4f133965389db24ce4c4bdcccbd51ed21463a8130e10675018c20b99d090372368508b09f50638adcbfa0f3fd04254273c3e24d2540891cb8cdcabff103ed027373f0f1986eda0823481ebcb99386419772d64018ce8fb452cf331cb209e9ea9c511c312a3f1a7ee31c8695da60761bb1ab4bb1302e6ed918bb08cf93ad3423418e67783492b284f3e2af2c425027076b4b47e2b60fa7a74cde2f111a48f8bb9d1ffb7182a3e6c302d59b48e91581b727b95900eb8a779cd4ef357212f13d086445c7bb4f7ecbd016f67f2b697ee552693ee3f20d2daaed9bc89e364f5a7ccfc632d1b19a58134374203dfe303fe53b542273fa167487927f11667be1d910944acc0a6e26e3bb70745967f0d94d278bc798d42df256b11bb8687ed5a00e4a00b80f2f7dd558e031e55d27dfcfce380cc41b96cf59a34d6a4a3611189a4b7fead4e0900a7158bfd13a7a9711155cd317c5e17630f9890090f27c19fae0470fa6da8af55eccc5bd04b8773529d27228e22ca30aa39d6d69f096a02dc9877a290dc289c549238e901224fa24f2d9c86dc0a22ea9b03f55c25312f39ed454588bf7f31a40b2f980d4fea1ce7a121be24b04b96f2d99d418619ed34184dd446d73e23a38b430774758797be6504008a9e8154c342eed8d79ad3c058597dad93da4705e5f3a4824bc21cc9cab347fb85eb126ab2bc651144542a7b62dc0ac9b8e1c95919594f008d4055299fc762e1c47895f8af2e3381b0c466fad562488ea6d012f7714df8c4615212805c851db077945468921e3eb9f3c3991848d41be9b3369d93f5d1e396a00ffcee40c2bbde0699bb2773dc629e36af9db33570ad56b7cef85fc19ff7344d9cf65b31d3c52411781ff762145b2df5a385380e8265f888f2cbaf63e193286a6a35c5ff72d60dd1b4d2c6da57b808c7b58421d424f402405f942b8c94356e9f20544814093afa820b271f25451df6e01fa28913fe01dac99e5f866b59d60016cc5da22c58616ab61e03dfa21d8e32d17ae53fe13fe4de84e11d25c5a540cfc9b7d8f84f0b408ed7654eaaabd993e80f2839df583c47ada559483ab240c78ca9b6a5136bd88cefd6f932497bba5df8b7d68ba319aa83394cd232df8ccae7c2b338f216864a5cf73a2541cb81ccae24128a2295d82fd7cecc5035ea7a48673906382b844907823800e02e3c79b4e87b5c53b51856e7a17993c1f4101053ea1a4eb50bd9d10d91f772357c14efa6452d7c587c07e1314cdc093e229971e2aa91dc6ee48b48754b155ac8ef9e8866685a03b56d402e80661f0c1f5adeec71d968723e603b764e5531b1839288152e34f30257ea9768837a9e7eb4cfe9bfe79c9f3a751608e00dcfad2f24ca339feab6b9952102e18bdfa08600acd717129ec207ea6b41b252b1a6821ad4c2fd02f7ff6513760f68f8ff3d641ce6997394fbcd291d1fe67b3993a5122bede1000e2095c851410087ccac2406f21c0bb4946b25443656c15919568665f43a2cb537f020d644ed82daa4104c4da95c3ff4782488ae4dcc61859ed6cac70078853f18ad5b191b65eec9e578fc49abfc4ab5e97492f2b4f10f56a248bdfecd2896ed10c0b7798d62b7d63c6c527b18ea4365debce0ac5fad8ad1f9c2d6ed90c2beb1f8ba393470f766b524a7c06d24c2d21870ce69fac8eda99c80ec58be9ba029c982f5784f26996a9ecdfcc4a2ff5fb1435ec19ffee46179011f9add10b0a1f47089e8b65320110b4090a586f03d07ab29525b32b60031179aa81770c2879a790414a65496e8ae759189739b0b63150413654da8f707147ab37a357446aa3de3ba72513a052a63c5f050cc0605d3dcaeff8f9741bc4b11034f18a2ed4ce4c5e9783151dbac6c664aaaecbfbc2edd117dd3e9596e59b09dad16607735d59d9bc049de5ff042d8210c57a91129c1d1fac78195223cbacda5368ecd948059e2dad7b13f49a77cf65b63eea94e66201aac66d987e15c5d15b4dfd7d3c0fa5f1eaa6e6878c2b819302b3785cd8e8cd2c740f9e80bad52e75a4e4a1b79c003f44021604af441c1dc810884c6ad7e4428fcc0f84641bb8960a516606f3cdd17354ce80c564c8ac2f1926b1e4280c531e27f401b1a379d7dc620860f2c160834cd7274302528e3f929c035ad3c99c6e2956e0acc10d930677dfbcd27514d84e9a9b1623d48e2c9916040339c88f69e2de89f0f082a94e8bac55986dd295e9db807ef0e33c0c83d28ebe604cda54e83dd67b767b689bf02d65861d518dd22f319f2e88e1a89a1c3a28feea89f8b51aef626df1484621463441707f25395f1bb375920869e500c34c8cca7b0abfa74005eee9c1642ba2e87a3c29a417334e74ea22da336abcf0a9618d7e404d6a4a07e298f7bd27c62e866a4e3f22bb3140c0d015710e6c9f4a9593d04460f4223716bf99751a46a4a13a1c407b1957fb71b105ce6df74a9023f389d5adf7cf0d83ff6178b0030a72a12ce8b9bf9ff08759403e9fab189d5a2eaa0df01e6417601be77cf148da4a1bb2c6b09194f094feaa794ce00155f03244324dd87b53d0e54e4c65cb18c24e285db5ea3e4fa1a5f32ff785506cd1d557548adef9f3f6783d4a06c2e2bc869d88e2f65dd7ccc84385fab555dfc5be4f2f479417b208fd312f35a2ef20f58d57037136558931f23b9b8047d968c6e04af37ec3a161a68f89fd0f4ac38a32cb78b6c629ff587d8a21175c81a3c686bf51871e21f238a6c21ca271dcdaa238166bc6090c9670415df90613dfd138b9648b59efa8010891cc1c75c892d3f5d6b7bb3ef49a5c74e8c009adc8864f768a9af4342b24bb69e84606a064aea09ef59a62d40937f8c6bb062d8b83e0dcad909a922e3f285befc26ac0aa9ea6b20519a8db44871d09fe401180b861a3941cc6abf45304b31749b81dfdea4283cc05cf1e41353536bd2c696817a144919a8dc49525e06ea776209ac3e4fbf2c26492578a0d6672bbe1a28853e2368d364b4dbba8bad03535452a6a378bb4cf26afd38bf82ef297f3016a4a2781de6d168ffe161580ef3e511b9e4f42a387c9ce600db0cda29d84cc0bad2b74fa4cd5c314d6ad244a51e3424a2452c326b81b2b5889855740da2be211a178a4475c3b411a8110c2af6d81202efb679aa499c03705da87812e1e14727e282879efdf9636befa36b5b835f026f1536d6bf09ceaf46348778b8b5ffeba71f818f1120f3000a8bd78cfe8fce408cd1603e8fe009267673cf3945c3668716c2e8ce6d5b167d8ffb4217eb50b49b26da92604f37e97a8f7dcd3cc6cc8d021d5e27295ab65819506cb637ee97ca76f7fd45646f8b14233813c1d8d79c3cd58f4156e10006e81813cc2410b2bf4012e66f1d6dcfbb91d33582a20d4da7e253683f652b813e01b7f112fb710b53bdfd40bda4d0501ab8cdc25d4174b9f1a8b006d912b87b9d6cd95c299accab395f835eb32b1ee6b2ea843507b9b620be5f6a423ab5951ada40c6b6cc3e66e230b5966d922328973080213a366274ee9aa3242ec40481fb49f6085c34b02a125b43ded3e1e618e1248a36b63ed4285f0eb63965e09e900142d9738091de0c07791b9548691bdc72e7179a2ac7b7ebaf7546fd01cddb4267332cd539ddf63f9756d1b7f6f0ddaa13559e4365d6067b25c570516914a93ecaab0060ecd06cb12b3e6cfe4ad37080da6630947629561fc28a6e0e0bccd61c1ce4ea759dbae9acb736cb456f11d0da1d95ce6acafdb9f139f56e5dcf92f3d7195bddf4f60789f975b6d3faa897284e12f806363d388ae8b5b3036300b7349d7f7218ee62f55c9952174ee7046f5e46de25b9a4d9605cee5eb64718c2f3780ab66c75c3d483a5effa53a6ebefc155e7747deb0c6058f0997b9b4d3c2245906827930d09bc50e5a5ffc51b21b0bfc9b844ea5c8700e8bfe062300727cbee2c2c9e1f087094c1427cd53806cb555097a126393649f73c5a601d33a46502e4ee655835c7b659c5392bc95834080b2d1d2cfe54ec631ad5d463eff12bcb62e937b3cafd39991c277527943059141c2d86c69b92ab3c0fa1d9ff1c9f58aef844f098bb5e31de4b4023009732456bef7c10e8af7e7ebbf2937eda84746d06a2c00577125b73a246927dbdd89d44f1d7c877d4778df513417f8e67c144300c87cffb672c4e30a07ef93e22dae8631239b26497f43954c4296ebb3cdcb6ec8103814b36727ded618fcc2b200cf76b7a55fbf2f90583f146046df107b3de4252754ebc386b9c6cc37a1082a302a7de4c106a5dc21292cb267ff850a5f24e9c3ad2d3e11a602e6133d27b420656342390d32ed2b00816e17f954ca9cc20f7cd78f11913de81fdc0f1fb8904edd63d10659f05abaab88692ee3973b34ef8272ed423710bbbd69494fe72952928f1cc3c9314572aa69207aae1df478d45ca8cf2fdfaa9270ccc988ed4d782d62a7dfd1354140c75223ded185cdc2c38638aaa0e9b9e47c752cfd986d8b83120dafa889ff57af071af28adcb2b690c5ee135c920576ec13342cc028e14e83d2dd4eadda2035c6426e5c05d3b9fbdecb1f278c26e7af41a117879912d6a54f160b5bdaa958d1b17d3bbe270b39516079ece025fbdb53b5629fba21b46fc6e919effdfbf1a44b02778dce1d725d6fe61a5a5f73de5bb16556f0023dba8bb370937a702b0919b4bb7e9a79f44aa44f8c0bf3d69ce51f502ed7f582e1d550a35614333a0b3a30f6f67020e40eb3cb9e6e2b1dd66125da67bfc5ff1669ed8699c5511a14e7cd29cdd4d0dfa2e59b413bb2a21c05fe5751ea87f2e64f7b76390c7ef89f8f7ee1af419c7314c47931ad56563c137185fb96788e036c699612359771290b77c78ee7deea1086554b5ce7f2b20fcddcdf6c349d1cfacf864c36f433485f03c5f4a981050198723ddf10a8c9440f6e0c33f25a2f28e8af1dc56cbc6d368aca8331aa022585c0627f8e939a365052b76dbc702edc64147244986599d6bf9f5887686fd58fc6f56370ca71eea536368ece4fd2c3b2ec66909a6a5514363f4972c2fc9d8a3f5352153e0877d61bed18e4331258873aa961133556b7aae62542b98f68d81c0cbf2602b12217fc76d98f76d0c5d85b3112232eabe78cbf195dc249ec8247f551a324395a22e6ccfb47ab276c663492c289c4a01ec72967f8dde5f59ec2ba55a7eb7429c4878bacb1bdd55feb1e06eedcbf11f00ab8bff363191a5b291fcfc3e35c56711bdc1bb194756848039121bdcdbe85d36844fc54e2e2183c367c6b45dd9563efd28e88926f1acb93d0ec48b68ed4749e2c221ac07acfaa47ffe0570caf22f85ac16ff8d3ec13372dae6f5589e3d974f0b6ffb04c24ba2913ea64e3757a481084b07e57c5032ce49285dfefb8fad9c427134d945123e942aeecb7d5cb623d075d262f073582b1718e491811496c9edfc341ac64bec71664a2f94e3cad4ec1195500d748474c261f8645ee804cb25fc7bc4f222d7d47ab954c8b3a8cf412c166a2be85e1134941601b49e28838145e0005863a2e9e4ed4b56fb65cb1ea61c62cffa46d8ba3806393b4396d6f0dfed077ea6b3b786cb9d466a50c7a86e3c6fe17fabc828c3b6a16c83a1b1f4b58fe84ff463010643db533857f8ad89bd08d440adc6cf0dbb129035b31d2ad2504991df6bd987d454529f4385d42af92fb55508d295c11664fb559b42d23337f153f102c2475627e142aa9838e5bc31d36bdfd9648f1c9620e53e6731ddf266a66dd091e0a73727f9708d420df2db3ef4cef04f21795eca7f15ef159db7ef0cf64b473ed5c1e11b7414f39ccbe09773a13c8311cff68be02c66b3088dd617055fd960b2686fdc4717c0abf7c806bbf963256bd50b9500e9f56a992a04b5493847a6bae207aa3fb8b6615dc500506fe19da33a887712060d41bc541b2d48beef3597625397706ed134ac0b50b0d6fe8f2803b9468c976fc275cd16ae945303e1dc9acd5b0694402756e5a42b5b58bb6db1f3ad2b13354f12d438212758947aa91ff7ca9dbb9d93bdb1b338837e0e712351eaaacdd504f3d1c7daba352584b693f1b017f5d46c5ee384e0d56b9cb9679a618ed9578dac2a23c39520740b01e4ac842acf8ab18e3f87a3ae82c94b7a0902c6123596dc87cde81812322e0bd99447a694242b9090697a114d108d031429dc032260b45e6b35adc57dcb63b07a175bc28be198168e4a530ad0b5eb5dffe5a6062810955839da8b4f33287a9ace2cd724ccc8f2b0793aaf2604a5bf35252588acd00311b0d05997306b2d2415d294b8980a33504465f4b57978de1dbc9c98f52c4c734be91c66dcd8244387773ab94a68961723c3a3221acb752ad4eaf5eb892f1b12a601e236ceaeb5dc7a8394b5717202a6529350365f66c4610c4021a440e1fe89c0d6b5b57d09f4d47588678c65ad4f7d5952298d10ef555957a15f9454b9c604df6bd65aaebe2a55510d40cf19b67abbf6aa502535003dbb55752dda5741956a6438cb505d06bb81e0b790a89486e3c0d40e5f80125a0c63786e9a1766212f5fe337294f88d7add46391ff5789b71fc626fc2f133713c522f957096f1bc6baa124f1c14af64c58404ccccb3b3ffbcac9e842b761ba4ac7a709639197e0b75371f9fbc8b008cd7857815400f73d1a0f804660413b374632eca918dd3447e8411772b949862be68ecd0532836e93183e6b1a17aadc566e5f824134e72949a40dfc1d99ce89f25a44cdb3a978357bfc364431ccc84066091a4b5a4a73a489fd6301b74bd169b1d8c1a80e21a811c241bc6c98d2020e493a0326d6c264644ec4c887cb042d56475e555eb6810c625a8c0255c2a0ad99fd8cf0b6cb2cdd19f3c1ddf6929d5fbf48c8f1674c96598fd7ad35f999d1c64f94e6b01f74842e66792d87fa7477fa09d001c3eb0ae8b8d40b71ab0c2c67f334eabb36c97885b59e44465ee43b425992866d9aa5b78ff28685822378c801a5bcea1ab9c26f5bd5697b7784e877ec6e3db18e85605fec1540cd3cb4a141c5001082c97156119ead7b518fdf35725c9a2aa0613cebffa6711aaa3b92eaed30aeafcb751dcf044609edffa793c1dd90e62c30e3b8b45bb6b4ff333c10c475aae79cf40bf28c929543ab94bb0470fb00ced9a3cc7890611a984414698427e0a7616a948d42e18e16c5b63053093e5899b526ccefd8460d02a5f934f49351d6341dbc3fa8b8e91df3b4629ba5cab40f5b650d6eb2407b816f2985cb49c91b7caca691bbbcf454f2591ce6fa7efa173729d6638ea43a7c5a909bf72313dab0d61308fb303d7c96fd22455d1d78ec56079cec2cc6a0b7c5d6c8c1929a768710727440bb2b3a80bf66e36a8e4b6e7a0f89cf52757c96f9a62b0044c1fd4de21038450033b6de47bf9c33bebef6d9470872cec817d26e2039a9507b3efc342aced3d8c157a1e31b54105905742387c6886904250f79d0422ccc6d434f96d9588cf32883948c26c64f4c6f55f4a22072d438b0d9d24ed4343486a33e22f04459625ce2eee4a4321367ad9fb727943a90c65746bc6025df18006b2bca9f112e4080ea957105e3fcf802706bab67ad26499f5c6054c9b619831661b77e0937fc76d8e05979375d63fd4e6b457d18c3c1f0de368b6e5e0bf8412e10c283f2b383a4807373d261ce8d91fe5c46da18abd1cc5df424df288dd0facbde848f8a046e8ea48c6f9d503c319cd2cf41b83629ac5055a171c552e2d2ba014646952614c7e4b1fa5e1803c980f98aaad87dc683837b0c1856b2a9516a703993c4fe1e0449e1da704c1e58302131b7e6b437d62e25f1239380371e6fb21f6bed6e65b0d482ae86650280a96269d6f99c89396b8705f6b84fdbbfd11620297c9b94844c6248a42661cc8994504a7147f9e16423dac9ecb8c292cac1bf52b4988b714503e1ee1c31ec22b26c151db0a74e60460feef8493be32a6281cd3cfc88787b16199fce15e3593b4949e9c204c9c967b25e145435bdfd4615414b493b31494143189ac070a56baa4dc022e038b83a9c660de396694746acf23adaa8518b32986b2a071c669c4cde4b1893beafce1b3c912c89721ee26e262f195fe05a2e05d8a428d9c5f33fd9b08b69d5af077bb8fdd61c83a8762e851a4e92efdb26ff5d95d50b1ee3f70eafc276432e1a3a4fa4c17b04f5cbaa3c6f26f1e138d49a03aae356955a2010b34a07023e9d9fb8a2fd0eb7d71911278fb9c0fb728d4f6df1a98b838df5654ab907eabc03d5e638a950559c0b0c385415a04095f6961c5106efec93ed305a03f78ba2bff69231b0814565434412b2b7dc5bee2d654a520670090d0927095c839cdffcebe6bd202f090889df4f4048fc5efffdcdffa0a0ca0ba488df4be65b2f6f6488f06c6f9b454532532b14cf59a65414e5ad4eacd43ba36cc249f471158a9332fdeb3ece0334c50055069ae28c481e94be2a9056e5592479d06f7dc1f3bb975db805a6d9049abf2026dc6ccfc9fcd0ccb7fede8039fe05e2781bd0bf066ca42dd39d4cfb29a54bf4fb1cfff37d0effef6bf8e33d8e10a8df7b207d037eff02bdb701a558034ab1f5f2f1beef02619e0664fd0c885f065c7d0b54bd65fd6a035f3edf4f408adf0ff15e7e1acc0f0de11f52bdf7f44b62c1d0bfb7c87328fd56146e096ddd0a627bd96f7fc8fc2d0ce27ebe0d83a6fc0449d7bf64fffc9f39a77da0f91dbea490284169a5fbf813f107e22fc4ff251fc9ccaffa3f76e697fca029f483faed074dd1c29fede707d997e1ab8612e8b7ffd36fc39ff9db07a980fb7572545dc13629a5946aee5ea7f61a582b3592258c14ae20f2a5535addddb56d7377b7bd3352f953baa437caf654db7ef484d1f3d4be740b52d0010ddbb6e7b6f62c968341185c974518ddcd12c6f5b284e16d1b0925e032f540fdedcb1286cadecebe203586d3e994bad418568cd1c6185263488d51eb9439947279ce29358665434a297ff450f90e685857107468d5b6e01d3058d56a1818e75fdbe88dcb15426b86ad4d62390f4b0833db9b13df62cb0b33e02fcbd996211ab4d4404b192b50bb4293e758bfa2e5a90a8cb39c6969d2c2b46d9d262dd6729447573dc385b15522aa4b3616b8409b386932c4e04ca02ad31a37b42c2acba472931875316d51c354214905253c636a72818911131c8216238b5d35cb991652d96b6206ccca724685863ceacc33a8b4d084bd2c675450e8826f96331fbee878c13459ce7c78f2c10727275895e5cc872780c05a96331f66216811d5ca72f6030d665a40a16bfc3be86a7094575e40ca483a53c943524aefcd52a3b3bb1d06524ae92ea59452b6fc6f4a43f7f64abbbb5b76774b29a50c15dddd5b0addddad6d575c97724e9efa62cd0c8fabec5c985ef6d05852fce983cbf25d23d4308163b26c228a2828b0c6967add245d3df65133e5feb652d4df4abde36d91c74eea273b72a6450db99b28f7efd0b9228beb2ca093a83a15a14a80932324151aa9b1341079eb97e3946a28519aa230a30524b0d4e00c2211065df410050f27f4f00619ddbdc588052765c4a230b9414ce20564746181922d80d822ca1975002a28c480a50ca72c2b882e195801420919941c7d11bbeee578936ff28893bb9745e4eebb0e8b2eb9cbe287dc65e106cc4767efb92f88d73758c090efdfb75f90bbf403a7eb584f479d2333122c4947a96769490aa6ce7162cadc73bf7d41389e0fae5822265abcbdbca20bbbf3b1acd17a4552aeb2675644f917058fae599eaea6fce540adb5f6890b0d771b5554d226b4224bf6afb13aece0eaee767d41e8b4c24a155d647f1a0c458bcc9c99a20a18b2bfcc05d4c002892727ccd0040a09450f5ea2684202cae907c943142f30b38ba2e288ec4ffd5bd69b9a8408e2062849348183e80f739e1d175c40c30e533079a222fa3c727731b2efd0c491bbbbc75098c94153d131e80374ff904b4db2dc4e34c5a0498d183c21850db95fa7470a2a723f901e72cfa668234837e5c043377730854116d97f65a7680204284088620a2c8a2ab23cc902031b7a584d58ccf891fbbf2f48b3a0c052c54deef78ea2d0babb7b87fa4b2c3164ffee0be216567b9ab8a2bb5b4865d292e763c08948735f900e42e72c6f3ccca05041ee7ecd4651c2ddddddf444164be4c9123038b1c69798119523a628523265c411d314e2508e96b81b0f7874b9a66bced91352b2fbbbe5e10795d7f2704b004eb82143e5c689598fdc9f84ce0c78b4796e7162052c3209d35296b31f8ef27893c8f377643963727297b6251dc9d339d9da4f73bf0b07cbba649df0d30e4ff2d425f7913c3649e6cc974ed35a9cc7ce29cfad93eaa7b09dbac06306dec8f4c776ca2864fa5b14e5b19d62a66ca1a44b1ad84fada59d5480df89822fffbae43cd60532673e114c4ae4f9636dcad3893c7fc979a4c8949b9c6c92e491827b0deba49a6702f174634446174aefc8591352f2bc453879eca42e529ee27893f27cea7d4484d43bb39de4f9736c1af2fcd935e469431efb499e3b635ff1345493c8f3e7b879c9f3e768a9642aae02af8a151c2c20e4711e69e922860e799c5ef2cc218f732ae3c7cf4975319be494e76f5e7a6793b2b14d6a93daa436291bb3325bb449d9a399349526524d4267e97e271b366a49796a4a758929d7a1de19ab5195555995c966519ed528cf7a94a7ac265d11c5fbfcd331d10b7d3c677a9f335f7611a5d8fd289f8678df852f9feeaf8f17be3aaa9d9ef0d84e56093c721eabe439f36723b9f0bb92fea99192946c92e7cc5aeb5265b2e10892a81a648ffe10f452f84a024483ece11f820fc82e392a16cb347ccdd85097dca0ec92634e6444b22e2a72d244bdf39a46d326e539df2e59269b6495eed257b91247cef9529ed0030d9870a1e4cb094788f261ce0383f44693a7315a682a42948f5db7e9117e89237d983f7fce23fd49ba48efc8b0ff828141c8ad01c9b343e6c81e6e7442eed91ad88c1d5f2ce003c9f33247fe1450e4e6c9ad002a9f28e5994d31234872cf5ef024f70e2773e905529abadca1d32bc8a3f774244911238d81de915f001f95257b346d3e9572bb5bcf99af9fd0be7eb6d77e0b353a22f1ec2f3d9440c7bcb91a6e6b79caf2bdb5d027f9b59d1a26df2bd5eaa6598e729cf7e4eaa6d98db3ddc6d98ebb9d673dee76defd3cd58aae56de7325efe7a9be950a7b2b2938692525cb67612b593e8c529eead8d45413b54caa090b154d58b43831cda3f964429947f3c994328d5a0c2f51528c29a9fe31136182e30f8985e9626f8559442c98988a94e5b7aa146ddbace5b8eed27bbde7b55cd7ddeb79dff5be4fa55aad308bb258de93a55a61cc62c1c0c4b468abe53d5b2c989898564b4666a62533334343e372d54c9b1a9b9b178e9b1c3874f47c4f84996dbc06c7960833df97d7e0cdbdf11ac4f18930730e9a2387f7cc6155af11b87004ca1387558d2390f944c041951a9cb934decc47f3c1803bf4b08dcdeb355fb5bf7387a305728363975425cb39bb241b1b6a63e36d336de48c6a14caf33dcf69dde8e6bd4d69333f903fd22c250f5a4202cac848fa67961f095eee708606b0e14e29b1b5ac11b82ccdfc3247beb5ae235fd0c4519ee18875b27c21b20b2094c8a18b2836581013e50b711e0b74d1b284ac054b9a5811a5944dbec4bd52de4e060bdc2fb1c09e25dd825cd508d2892b3af7b78193a634f2ebf627c22a73d882fedbefa01e9b0f6298a1d91fbc306a90e9533190f00e3e69477176cc257904e1879c498ac3a1643aa53c31add0e0884c9fbec5ae87e92c91e9f70011e20305834c9f889cd1e08d4cdfc89126997e122f64887de144c694e90c0a8aa32f5c80a444cec078ca7416460f993e5d820205fb17c4311bb9bf314680d1b4d87a34c456f248d171075d5461b15774bbdffb8370bc571c372f7b9215e10fbff71ffe8a18b1458c7c4f47921431528b203de5485204c98bc98abea7573dccd39a777d546c161d6d1b305224aa4a11aefb3bbd1cdf7bffc2e0f72ad0c318ff87bd7f81538401836efef53160d0949f9b7f7d108e5f7539b6b96d7583a718d19193272935242bda2a92ec08ca91cb9cc70158b00c0b9639004b4f8f57443edd1b06b15fc31108e5cd841fe2bffa21fdafbf1ef8e25ec70b891ff8e2c29704f07bff83df7beebdf0e6559fe385c45ba4796c928c2089f9604536343b4e463433f722ccccbd2480fffb1ffc5f0834a5fb1c21108ef0c5bdffeaf177e18feabd10e8267c71feabfff9d7ab3ee65f20ccdb80325f03b65ce08cccc7fc50eb613076b17ee68786647e28e6f1ab68304c4c4b668625625611cfa143aaf79e0883453c47e515c99e6499be143bc9b6ccacfed0121df17b19169da79f04ae3cc328434bac387f0916fd47ffd13943321dd17f0916bfa70f841619cd236cb4c247cef3aaaaaf59d5d49762cdabc25775d5804fa3644792d02f7c714a32ca25dba929b279197524894c6c9c471549c36892230d8b9aa936d5b6fa97cbe66b1e87cd7b604dcd7f6f53f33868fec5d5bc144720d2804f5a2145a6d6da6d8329736274b461a339e7c446ce83012dd8488b1106b4744298b81ab08419334146c91a64faf34854f7f56b18c4cecf841717fad8d4fc36f3343f24f32f4c0346c2357cd808e790e94b6c2479549b773d919abff90a769e9f0f8eaf0183fabdb701836cbee68be0008f780efd1bd0a5c9f0063060034ee1be060cf2ff6c763dcdffb89ec6f535fca1f95708d44f4303bafe05d2bc0df87d0de8f97fff13fe74beaa9f01592f03e28f01efb74018aff524494c566474849474041f61a38661a3a5ad656c58512a45da3df74354dc5f8e53714b4c494a494b4c494a1f4729a594d22e7c6918534a29a59445f153181af3dcf774f5b4a31e55514b875abfcd24fa1bebf1c77420eb3910771dfeee591dfe18160bc378d3a64e9fce4fd230fa5dd75c3797989294b82e69892949c988eca13da54f29a5946e0ff3ad51fafdbd3423f429b7517f23bd3387fe03cdd34fff3ab879acc74fbf9716fa741d97c4944429a5d407261c1afafe0e510974cffa9fee59f8ae54ff797f87bae7be528e7e77bd8fbe6a6529a5f413a2cd8aba151012eb05a3e65db2872acf9d3cc13c730690e7bb7e3e109f3b7b86a6ab612e31bcfbce2698766a9abfa262364929a5924f9b5b5258ca77b96bf68450254f252c383a5dccf2f883c95b2af58e95def11674fb780fa4dde5db6bdc5b0a48b1aeac5c6d3ead93ced5d24ac9257f5cfd8a13f2f69458bbc99a6c51e282c2122e4c69b0b0e589cb0c5c8a665ba420e202e539d27291d4556145d2175092643093e50c08a52965a5b5d6d1ab63cc29bd6ef58ebc851be89c7edbc23778035d7a29a4946a76563a83614c7550d82810337822fb12323afc0c74f0a0bb65504577379db09ba75e93a93f89915d0646649f810a4f58b2bf85799e24838d2f454cbdc0449292e4f2e58a339ee84286c314de430e55d09e2daee4eeb74f4e72bfe6b9fbbbfc688aeceed3cb9d658b2759723ff53c77876294fd4370cfc1c57a1ede6185eceeee4e9dcb0b3a546e5c2d309d479034acfb5b5e8400a45ff6839207c898937becc91b0081f38440e6f45472851b6a7c40f2681a1a29d2b0fe961958763b1057c5fd0480e4e1c20f8c04c83ef6c8ae05ae597e812a61e60e481efef3332279f85f2d78944c42ac65c259ab1a7dd5d0c788e7f857d164d847f27097cbdd2e7911573ee892c77c58c3e6ef08711a36bf6506963fe2e860295f02b958ca7749f952cab752be7ccafd97fbee87cc976190fcf95d1834e5a7fba0f91c97a461cd49494d39e4bee46418c4bd74a0293fdc4b97aec74db99fc34ef7e5ff5c19024df1f0673e170205c9e77e862f0a1434c53f687e47854421a08fe7f45fb0fb6752ff549adffdcf94f3bb57229ffb0b069e49b2c796bbbf48c9f69392d702967916716fc3d1168556ba67b9dde7cba7adbdd8ddb6cd6e2008b539e73ac8beff56b721f76eb76a39d417525fa77e4fedc29efa5dedfb2b095f347cd190d20d94f9d6966d944996eff6fd7fecf640fec37d8740fdda2cf872c2811be86341a3a234788652984bacf80dc97ac4ef9758b15d62c3c4fe3186f20c2de911675e66c59b1f6b0264569c41800c26cefc90f58833ad76d1bc8c72337d682e18401ca68ad2719e666a7218f71488f3786f53f33b744258c36053acca02619e536970f8abc0f67e1cabf75e7eaf0df79521c215562bec87909fd593d402934b128b53d576c615d3ea69d565f5d42b26e769b5564c4cad569554cb913c4000cc1cfa0d0e2d7951ce028caa3c0d3012205318acfead7fb7d0c7bd7f0442599b01ebeb573f64f3de5f07bf6f50f5dd0883c91eaa4c67fee687ccfc4df8aa4368bebff921dfdfa83ec86ffe260cea57bd145720cc7b20eb5f60eb6dc0987781f86b4099d6c3fc50ccb35e5359d19322875fe687865a3f04f3df0fc5fc10eb55200df8d27e067c69bf7a5b5f47c6b46428141ea2527d05877cbf7a0d9480ea8356ffd9eb81af124cf0f1be8409ac40296281d14dfc5eb5c2d230fad25ee7035f5ae8e34d2b26d88a290a46c836cc13edecf6f78768df8541dd6b7fc3a0293fdd6b0fbe7ceefdd7101346e83cbfe9cf9ed3c73afde933b4b59caeeade822ffffbdc0fe9de8641f6bbe7c2a02941dcdf6ae46a20a61d483fb08186c92eddd40577f310a4d3e963b3f265f7fe43ae5f398fb69f48ab1fa2f282beb9fd6a7bd5e6b33d91ed816c2f64fb42e9db7ba18f10cfd980b0803d0c9a523fc8bfbb3fbbfff1f045dfffa5bdf7e14f872ffafd2f6dd3b9449bddb8172276e08b0b7d80780ed23c6ad8b625796b449f0d284521ff1f0fa8e61dc886fe074ab107484f4fbeee7d60cd5f9f1791efbd1fd2ef3fc4fb5718f4bdf71e064df9f9de0b5ff3c3d77cd1bea7e580e94f24fa4d5ae4f275a3e578efe94f3af3f4486673d2303a8d6851974ec41ba0da4822126b786ae3a848346a6aa3896883d194d40b220d4918cc72b684c46bcb2a0967c72c96ecc99b2b07ace910e3a955d264c24d588e80285e7c1a6e12400a2d68a395c38ce5b53cdca25b72bfc547b9514021b74b268a0cb2db28f0e8e1c026ce1b643065bf12d372e50422b2ff6cb58476c0610a2e5cbe20428a14645278e388ca17255e1842f4184461faa6e4d91b3de4f65adc12b7ff36f881816796b32929790327532b9079fe9c3b5722c192a908a8a3de914c4a51d9998aa892fdb727bd3337281b7dfbdd6fcffd10fbdd6f2fc4fdcfe5fabb10084828091311239f14c204259d7eb8ef58cf3d0d57521df8a21cf8a2dd1ff607f57cdcb3422097e738100cc8daeffebae8eabb0f62adbefbefbd7f5116f8a2a19ccf81f8615e48544da518592b049a48464a48329889559d6c1ac92085af1afa0889342f45fce35482f9f9ac079a0234e567fecfea6142a009b50a81a653170241014da6399d3826cea99b536a43021b7cd5b7dbf70ff9272da47851e3281613550ff3537ef0dfbff755ff735f2543fab90f1302f50d1bc9e8fed8b26b84e4322829974149d18033a0c641b5d4bbacf5fdf881a6fcc4fc7d207f990244981f95ea71a80a815a616327a08e09974c11a699582f45d68fadc40a5ff585c42d29bbafc25735da903cc7fd5f48dc9fe27dd5af7eb57ad6ffac9ee5bf525a3d0e817c15ba0a09c973fc393005588adc8f6ec421650feac22f94ee3f449392218c1b6e608ac54467f21c7f2014c85aecde0b5ff4bdff7e74a5ecbf810a588a4e4e4c6e658520b264e9d2854128f8a2a65851841145b13b02955199e7f8bf5e3e503f3847b9a143798e7ff7dcdb50811130b494251479a448dc4f917b232ae336a44c8d5e43a6d8fd14bbf7d1a1b214bd1bfa6c4647a34b657fed86a8ec3f6e46d97f8b6d322d4a93ea9e29fb8b86f449838aca4e99a892e738559a024bb113671ea952136d1a26089067b682917c34e0f9012fd3569ed4b78d4e1f5b2d0f6f5ae7d708af56c366973dc4eeb3d5db465f0b698bfe4080a63bd47b8996bdd6bbff6cb5d7caa387fd89ec3c98ce0fe67729d4a56df3b6af3f6e4f1be66d3fd22df47ee4b1a7c7d62a78c4d85fa7772a486f7a473e6d699e3d2f18ffd0aa2b55fa76db6828b790229158f2a0b4cb985e10ad6cc673b94e4943af7bafb60bbd2c25f59eaa5e4339dd5dbafb7b69e0ec9202e9cad10ab60c56e52f4b1cff42db2895545249259554baeca9ca1ea0efdaf6bed551cb1af8aaafbd0d19307328eb691d87d117354b652e71dba80c8bda6b1b28b3a2f655b35c77bd4fb5c22c9898964c9df9685c3536af1b1c39743c186e80c341071ec072001000efbb2c1a57065706d636cbe9c881e3e66553e3a2999109abcca92feb086438e8c0030f602a1a52c9a37e3dc16b475c896339a79b50aedad641be96039cef68148c7e517e837c6f98af07e6fb7dbe2a1df9ae72e48b71e4cbbac917e6956f8c4dbead9a7c656668f2a571592ee68b2267c035ad7c6d5e30f9dee0c8a1c3e3fecb170c6fbe1be0781c071d7800cb014000765070e60beb80074c4543cf5e371886b6e7a408f3205fef205fca41c6d1b42f0ad636c8770bf3b560bedce7dbe9c8f7e6c8d7c391ef7793afea95efca265f5c932f8b26df9896e7291c9132c765ae4c2bdf99987c6960f275b1f2adc1f9daacf27da9f2bdf9f2c5e1e59be3e6abe3b97c419b6fb881962f4ecd97039a6f079eaf079eed7c733c80c1541e4e214abfb6a6c57ec11e044e104b74ec54ec0361cae64f2185d38e35661bace145f677d5a088ecff6c10657f181b5d041025da7eb2507098222de1e6ec2a7a27b7940aa4d0f802e5792074e1d2c2be2ce57e49bdfa82146c189186438dd15fb0e6853371995e9c60c0b649862dd3bc02734924813522a80b5803c2a5f026c5b95003ca176adc80851a2bf4106a9c80c61a47a45186175ee8ccd2d882a680b72c676938a5d1a4695c9be175b1a205ee8ba3dbe50922fb4553d7c5081736a828ae4bd20a1a0d9e6c171a66a850b2ad0b110b5030d020890b2f62f042c6851429f082898b590b5da481f42c37ec92ddacdd98a8e2830e555430832a2e5026d8cb72562585c9068ec9720644d4101033a032e056963320b2582a41e8f991c6104d96b32160584ae15e7941c6dcdb8a817156e355ab3eaf6fd79cf5ed85788e6c0a5babd47bbc7d7677b7b5f6758caedcdd322a0020a92d949f561fcfe906a16192877ca17c9bfa9b804afa32fb4b863ed941990c56305f5955d6055b24532be50374e4391dafdcdd9f52ea9e1a31565a8d182beeeebe6d4d965a6ae9a6d533a8ddb45a049dfae2deeb556a37cdbdf9dee7764e9f931661a9a59b56cfa076d36a115add2cd5ea7646d5b4ba1541ad568bb0d4d24dab6750bb69b508346c3bddb82f887dce3bdfecedb44a6f8786ddb44a3727a2bb5da7e4deeb558e3b9239cef3be20f63dff7cb376b34ec4f77d41ec7faef2cdde4eabf47668d84dabd43a11f43f6de59bbd5da5daedd0a0b552ab1161b74a3727c2b16ff6765aa5b743c36e5aa59b1381dd63ac4c295d6e9af67daaad08912b81b052640e9539c491ba04ff44f9ac56b86a5527bbe4199bdd1eb0bdfdd5478208b0c4f80b521f53a308fcf605b1ee5bd5963c168b05e3407a7a7a3a29ac2f88f62c1bd33e2034cf2c2afa411400fce39673ec1f9932d8ff46f4b3a8b347c27132e58e0ac7b914356531315f10ff984f84d9e964ebd27edc787c1c991fb419b38a521f993ee614f941bf0da9481efd5a1855330da714c9a33fc6082976b376721dd7c2022f654f00d7fd00a173b870688afdfe2558e4deb95f82c5ee27c646181fad5ef543bac7ddab3a2d87234926e8f2efdcdddd9d0b5fb5ebdcdddd9dab7177efdedd5baef74fa27a779af7eb2b776ff7d9fc9a1e910da317fc9e057a35dc7717e49e0576ef02277eaed3fe55c3064720d200f7add67677777777afedeeeeee4618d0b2492192879b407f04337709e08cf977ee6fc3235ff0bc558a332ff32a508aadcf6768f5aa18f03e0d08d302a7d8e0cbe7a3e0cb87fb094891fb21dddff9f9c4acdaddddddddddbd03a5c4719690d6303458bc84db48725103983cbb280c2bc46562a71779ce2e1deb9deee7f7d09cf327549e515e5cc8f7e9fdee0b7229878612948933d008b259cdcb1501b99e51c58c2f9800eee456f806eeffc396e1247b1960648f5a22bb1946d967661841c62c3b6ea37c27b7065ec2f885b0d64209c2e630460daf4c3f3bfef3aff64d82cedba645a0be3fa04e3fe1cade713a028dc5a6845590045d2b102dc1df981aa163333441933ceaf7cfcf49d0599b92aa4af0ac8572870e31ad7bf777c3e87cdc43c51a8581481ea128455336f090e5e90534c4f942248f10122ff8d2c3540b76787286387b8a8f17037afae8a78ff388a9830d76f383f95a138cf388b1e48140174cc2c09285951f8cc4f92ec9d38aa1c9d3134b98803213a714b5d6dade72ea78aab5d61764b9d65a6bad75d65abfd62ae5d471546bad454fb9d65a6badb3d65a6badd5bbd6aeb5d6eeeeeeaeddd387e7faddf4d138550d77af9b66e3ee5e5425bbbbbbbb6bd4df9d524aa3b6d7b66936eeee2e4c65777777f7df344a29a5deb9d34a9dbabbdbe9a3f3bb6d61a6c885994c930b4453662903e96e9a2d34dd2a3736e9ce58a1f294326785721e21b3de58f3b0aeec3ab94757cad00d79bc44f7890524260b4479bc5058b7ca55caf32b6d1a82e481c7ce4be7a577a46c96b28763b794fb65b260f950b2c7ccf33b99fc41964f956a51b7347d684b98b2fcb16bca5d972cdf1b02774e59cae943e6f9ddf421b33dd12b123accd8fdfbfb23e104b4865e747baebe9fedb51005af21a216ca3c717b191587a41cc048bf8a5bb8248595a87d8bbde3f563c04a4a3980d13f12dcbb8f564353e4c473d523b5293c0f5f3ef4a512999581b49c69d45a6b6d10ec77afb5d6eaaec504a52771ebdf2a29955eabd75ac34f0dafd5dddd471d9d5a6bad5bb07c5b6badd5ab173332a5d6059b96a6a0cc46a274af9347f945f697dfcf0ba100c8beedc218170e2de121722f8b11eddb6c508475f2d8ca141c63ea8f5b0d81ec926b18456a72946c64fffa13945fc121e27c4a6b100a64962251863199a5485cb5f29c21907c97e7b4b2fda1252dda9725409ccf81b20488168888e7f8cf9ff2c3fdd89f2110ccad962b5fd3344dabf225b869c1a107b4efb207a4d5344dd3b4ee39356d7b9f9bf7a869ad815db63d5859babb7b0be6beeba14496bf436eb95d64471d8b64243577fdf94f5b9aa6699af665399baa92e5574d764adcce876c6badb256ea39617f55964b781185277bcc2c354da334d3f7af2f7ff340fdcec15a69ad74ac5c681a48c2075728f10650aead5d51a1cb6cd7c2b102f1eadfe53b5d00061979dbb46c54d3aa04ebf69bb6bdb6695ac5a15576e55fda06a5b4522a434d0c4cdfab94b28dfbd3872bb3ed9d3624a5b471b892524ab7580f5d3e8d1ff02d1c17b9b4637c197e6a60fa5ad02c675c2855297be4b1beacb2beac52dadc18e0fea7b2c78e3c6a2fb5aa895043291bc605d14450f298a513442a64e90491932c5778236b593ab142176be50a91143b7a22b82014efce2916bce66b42a09a7785342fd3322692441997cbf5ae10c8f5adf0351302cd84a05d0282ffa04ba603d4c901c2708037604f183e42943081eec44a02c33cebefdb572dadbe1fcb648f03e486227be0877920fdf180615efb7a7ae45cd2c91496e9d7d878afbd0d5803badcfd7f7e0cf03e86f51f08f3de18035eff8268aef94b245a8679e38d37320c4c389fb0c0e9049c3aa481c72965498759ef8c134aeeeff6f759c5be0eb2870832d37ffd37935e5ea5b2f11f388966d1946dc1abf0ad0c2440c20a275a80861455b2782a362c91a2c4088515546109336bffe1d0fd6c42a2e52b97acab7b0747245af6de5270ecd88c3949354531412d3d51ea4deee4eeeef61decdebbb5bb0fca3c33b7fdcc5b38a540c19fa568300845c1218b2b6ad8a18d1538d1000d54bc3c9531c50b3a348fcc22ab142973cb6c3a6da90255a9cfa19934877ae745642e0561c9828aa4136420c6196273608819a0704852628d29b17f2ef54fa696e21195acc80c6884c911cfe96f8149545809c1f4cc13579848c944e6152650f2bc2b202140a9645c20ce33c5a9f3451704eeaaf8cfef719e7e4f096b2ba863e0870117719e12fcc0830b9e1ce9a08311e2ec22c9288aca96246ac0449cef43e436c1d2cfb812676ce7918961adbecb7d0d5f3f40db57d70b89362f24debc9098e385c47f21317c2111e785c40e5e4884bd909833d382c12aef35ed85449a17126b5e08c70b893a5e48045f48dce085440e5e48f4407e0e887bc030f03d005d58e00e3800619e331f3b611c7003b0270987a00f080a09033f58440748c40b9c03c4011a79c2a3849ab1245f0c78945279be0d388b6ac0290303bbc07944034ea30e0a1ea7d18ccc8c8cdc50e081c2b664a515d38a6135f1929ab060c089c4026792148cc1a9e473a98a81c7a9a4fa54dfccdd5688a62529ed45089b9b62dddddef5ee8744470d21f1dd8eeb380e0a9818141c93cf2620f0387f4e4d1ffd734ec99c3935a77ac9c3114f2ef383f9736a4e354f4dd18eccf31b8908313a694eb593993c36943c5b4a9e5d25cfa7deed858b17ad972697af873a36a7e614140742b43d7832e7d48e62b1180b491a155fe47e985a148bc55c10c252a146ee67d518129b92dc8fe9512c1673b25df162c8fd2b5a148bc58c6260a3e47e150c587449e4fe2f6a72716390fbbda7582c4603199c7fd9aaf092fbbba8582cb6025d21f7734fb158ac058ac22643eeb73478131694dcbff5522c167ba186ee88dcaf25c562b11aa0c064c9fdd505216c0b487c567cc9fd5e0405a724f7370eb11815ab14e4fee9b52bcf8d0b3c3ddb3c9e7605c56183d492a6156243427a57dac6407658cccb8573646c5fe486c26435e96a903050a615e243427250b41cb3fc9f3e5c86a32bcb7f4c454fcf8645bf87a5b9231d595e61424576657985891515624d65285d9952fa418599520e5e28c98005cb6439533aa15b304419d309cf64391b028b2e43303151220d259b124218f9d294941f20f4fcd05172844bc90b727f595e5192a49531b9e93dd5657b6eeea2ae4a35dfdad68eeb582fb870753b7d6bafb5d65a2ba5da9c78b571d6dd7d14caf21231e79cb5c874e94770b694ca23986ed5ddddbfc8bb3c82dbdd6b75c7c1f9e26e4f4d9cfd608949e7830f54dfca66d50733279701f063a8dc5a3233d2c3cffb4810010bd3b47737d7ce079200ad1ead6f2d698551330257e5eac05c1c8d80645111641f816559956e15cc00982bf54c298ba3b4939139fddb370e0e8ee5965aaa8bc032e45107478a12255e03c6697815dc928143815553a46088899ee156965786a850273826cb2b434f7a0ccccaf2cad00aae03c6595e49810d1b6ccc1b3514e11a9460de50a168a50225961a4e543644611a147d333caddc888206ef8698ca8d2516ae11d2e7860e37743728796ec86c88b571860c33884f8edae0c2057106591b4d31d0f0d48695a259a8348c198a921422a211000000008316003020100e8604e2408cc4992eab0e14800e6e964e6452329688834990a3280842c6180208300600608c31668a6c2b00587eee503c70f5865420a8f70594b782e6782feac973bdfa411ba7386e89319203ef383da6cb50d7e3eefa96d71842323813565fd276ce46d2e9d8329b0efef62342217caee420c6649b549e84fd3ca32d426489036282598fd6b5094d638a6191956cc72275dcc41e618074baf354cb154110c5ec2a027d66789657f1a489616faf00fadd37924927dfbc61e19837e3a49cbcf31565c64287ac6d7dab97c8e4e276e7c4e1fb5213609d8787a13046878c647ce2756e6ef0405cdec20df3bc6f80fdf69b4dc7da1a7ca9ba96022a2e3ef82afa5d4df7bb10d8a9a18376ec8d03e16548e67f13ddc13484d74540e0142e03056ade72391b247dd9cf4c8f03c982e35e7a7daad7c9b2fd49dab26c1f2eb80e17d6116a0dbd2d7cec336e5c3fd92e0563ef523b4121f8d289cc63f4e6a90bc76932e049ba26f462adbccafb154bfb273701d3f5a1f58547904662253e2bb5123831fc6ab9063859f5b09a7004ca9df7eb8442d9034f406cc99851b44f8cf0b51d9fc0af5628b8a19a0825b1184dac742fbd7d99392013a874248e722cad73c88785d0d14a8e2521a7614bed8a8bd05b076c2db1561685c34b6ad6f8e6eff9aa058876076c809e13bba8991ea73c4d209a85a6fd939b80e9f6e97a728846f50fdf9f3f67a8a6182c8d3558b8f215c2c3c64bf7ad71db21b812541b858aca66fa3ef4805858e6b09bbce764acaf5b93182ce721902f22e4b420dfefda39b385bca95264ce57e30373f457685a7fa89fa6b48f9f335d2246f23c7d3f94266106d2ef76e80a393562723bcce44f90afdd989ceb03d1e589195c9ec6066ef4c9e72edb35ffbfd12f57c39ba878b018ee74a03b58d0a9585f9204168374abd0838af151e009c9bddb0f8ac4c4a083d715363f1ffb5c682d8ba21b9a994b7b98d72110662b62de8060d7439179aaa94fa785d7788eb4971f9900e78bc00e1ba7bddbc9780470203a04819fa07fcd3c36ddf45ae466a2bb951f6cbac888c3e71ab6444a82fd1d09711ed886e0f19458340461c147351e3cbd8ca02e5dca16f7abcd1c0d96ec7c30578a4fae697637a66b23e570b9026308b57122e3cf3b2188619ff72e60dc4294ea510272383313bcf91f72a0aa1343321678ca38e32487cc9f50943904092458e52c3bd5f5d569b03fedb5f7e391a9dd0a7c3a2c6a76ccfaa725dd3c17a553b2668e6bd0a7fd80f5085021725067d1d3839f77feff129b7f5800d35b8c941e2b3bfe287950fc8ba170990c2ffe378dafe3e84e48d1e81bd1307ba9b8758c0a7fabcf6a1df4f9ce87848b10eaa810f6746fbb24d6a11d1b0da907d389e431f014e699538dae985f593acee1279a58cb15999af94ca66122a7f679827407b30de2e6ca65ba320784050504190a160d789bb0200e80a56995e195dfd26340b508e74e31aacb1549b39c5af8a7a18bd28bfac5f2ab8a79a01092aeb052212637fccb4a6388d41c769f52e1264a853e91e652ead477a79fd0dc0b46ae8b7b37852c06438b49adae822ef96205a19de929b6c9203e75cbfa65212d2ed0d36db920614572f03e6763415f024a1548634c612400e186683fb61deb2047e0dd8bce3f9f284064b14c4b100983b9e34c2973d5c733730aedb1119c4639d7483981e1b949a7aa0d0add5e2d42715874a204cc47f472ccd99fc982bb5555bd33463f24e54e1498def3ed6a29ae8df6491636c4529429aa9c7b3cbe9a3aab2d135d4b34219f1cef1f1c3c365f4df47b7daed1231bc2bf1d959956aa48341ed2e42c2788418044b25ffee9f03438f865f02b75cfae3f381fe4afc1d883c3a8c77ac3113ede3f37f01e6fb51ee31144fd779db4baf152722951dfe0bf201c7e8f2e21c8118ead4490f06ad636c71cf792f3861b7e730bb8fa06ffabf50dbe84f3854aa41b46d2f6ff8169d7bed7c190db1b7ce30a20709a80529c690a912c34dabd0a2eea1b1cd60a1eae8fd708af3a50ac8c050621cc1b36d946f839f63481f54a6968166da01318819b106adb07b3586dc31e695f7b14b7d04d7504c2924312332131bcf94b311518b7b832ffc9b844906d848f2336815dbfb328fd20c0c4af6cbce2a36c2fd1ca59a6510d484a7636e8892ff1518a00ac11577e1844e8680acef86eb6fa8730dbc1dc6c91ed02e85202e0d8c194535a42db3af4ef22c5a685b97d60c6f346b9832f416c5e28ecdd45a4639811b7159928663103beb22c17c3a6985aa86d61eae375b06838785dc9cf33746c4e767eaedfe21236cb714f47d419e2103a69db83af2b5017696f0b0fb88ffdae3f6d31c72219ea631dc29fa415e283d7d7a82c189daaced16e062e792838cd4de133949b49bbd93a89506c9fa315b0d3d443afcb012e2810e6a672e9dfeb031d47a632d4967233d1aea669888291c8d323a04a79bc5a456594959a81d41974f110534216599c256d338f8829c812f9c3630236703dedde44b3b9b091251edc54e0cb0bf731223521a7c028a972527747ec42b00e82bb51d0e15a72a9acb974a31a3a6603fa9c8daefc3ced463ee928f68615ccc2c45579fbe14fa62bef46b7ab6549de312344157644735fc8fdba13a0579fb359e4fbd8cae2733658c0192131936d523972ff2ef430d980c195de9a409a50b883f5676d34439a2274df8e30107c089a0427906a5b66811d96bcde98ad29354b9478e57170866476760f076802704f9b7cb4bc1c8a958313e0ea1a88cc908e254c1f9b48e8fc9233f2760fbcbea9346c77f59e3f5c2e6a9312622e144b535fb4cf90e12392682f697d04fea3af5a919770289754480bb91ab85bccb12e8a232522e80b3d330ee587181b6ff9aef7f0af80c60352d31846d368e480f0e32872c2a161517b1d3a1dbb750bb1b3a6f9892e9aec622ac89ebe782910861b69dc8d2d2c7d6af343934727dbd5a9d7c981ff1acaca4c497f872826bf5843e0e711ae85c1b26c8300fbd0ec324e1391572c11523c03af0df9ca77a7d7849c4209ef14051d19e8c5c7126b186701ee0c50ad76d08e5c759e2cbcfc82aa108514290aa7ab4254293f1d6ca89535651c9707bc3cb925efa50864c43f9924877d3c32073450a0cb0c8397e45f1550401c39a366b4087f13e9223c2a6cfc40f7fc52b5ec28fe5b03c9daff8f1d93a0f2bea80e3b21bf3a633ffafb1f0984a6b33b97ecff522dbb0f1a57e3b3456f5059f943185e72f207aa8a3dc21518bfb86f8dbf03dd76b92b509cdec254564fa577b80e2021c6598fa72536b8f53596650c1c588e99f98e9ca7d9cd8f19cd41881f201c4c66d9919b5e8db5826254647c29d88b63ec046530798af00a9bff31ae8ed184eb20867798bdaa1651ec42c9c09c152fb513ec19dd6936724183c61e1a545cf7656f051aa93d93f134b3bc5ba467fdb1135226fd50cbd47aed47d64f8d45e60cba2c80e6adb79ee0a83e81021b274b6396536bb5681147d702419b99605d1a8805479e230d22a288a21cda59ec3e55c416fddbbc29c1b24472286ae85883c16822b072e0a9a37a9f5c0f20938925f611ee2e88cf5a4c41173b73d4bbd9e881f1b37c4a41a2bd91c9221d46129657d620f14fba540e9483c3b07dbad1e09f4160761418fa24364251e87d2a53d9672509004e3d12a1d2cc1ca733fe22a5beed739b6701e660f4eb5c7deb94b0b4713c9fd4c8a87d3486c2b4437350e64753a728ad6877f3167aee2fa5f69ab637f80e6830d040a3a4a72455035f3c67a40e3a362322110dfa7536d7eda13182d38a2ef07eca12ce86ad34248a9cf518205a6999a1cb46454fe8e188b72d8b94114bb441c58c9bf7008801451c9cdf9751b516da4eda4d31b028426385dcc44a51dd9f8bdc8d497f97dcd1d9841048126aef042373c3f2b70330661914acf6ff6bfa8fb1bcfca21ea2aa0f65910b5a9e57c5a620753bea9c7b986754ab89ab61631d2db47d6d7b0ec13fe768769d44136a1ae4280c5eea1398352e45d407876685d7e206dc3ab4c9985fed2079316c3884a8dc266b201cb398d99cd2e1016482d5413a5a6523356b5c8f5fab0693893a168640878961179ec9deb75090f654d2c078699d16342cfdbcf31bf6f7039e5220343e1f9514498021ae7f4523d7bab8622041d04b3c12d4ed85953858b14dc807bcc259108fb1f83cd478758ab895a90495278d594444859da1349ca01f980d957a3519940b1c64a25e4ff3fd7e03b90d4c46f71d6ae49e2e75d7eb7e0e5972d0491ee268269c9703c6ef4a53f3d46d86d002991e679b733e6ff13b4788ede50518ee508d002243c52e2196b659b6f35bb86bbccd8a2bea40149a0ca9a4ec03b187b110ea4641724ed46e512b966a9d06a009f7b45e8bb59c779271b4dbe5fc3447b363ff43531f96f2c41e04144dc3390ebd62f34fffadbcc06d1a57f7c3e379cce9cd49362838e6fc199c284a46dd08b89e157acb7c966a85e77231da25e63e80aa49972ffb774c181aa1c171100d8285d2581923279c4fb8dbc2efc62b17364be2e0e03f1ec2a67acf406dd32d0a7a719bd1d041417e53f1694c192f4fa8398903c7f1d79e772350e4144db0a2a57a63bf5888e777f689285ac1023086627393a482e3a01abfcf65902d64a4a74684be4534de20d41bdd2276337b5da02d22a79d4d283d7a8833ec8aece8605daefc004053e26c4bbc286af440b51ff94f9111d8873e009be3521d6b8eb10882cf41093f8c10e7d71d37484fe09b6b5cd133b806b652ac09441918143a04387173ed32f6c644cee956a415576803d20a2047bd71630110d55f915f70a01289751ffc2b3221cdc7a838c605658df066601c8cc0fdab7c29746ee54fcf6bda7afd36d7635c86f7087701719595eea458a9c324cbbf154d4638f16c68bba679e2c68a2d5710f457a78324307635d596621730951461bab209515e8d5bacd6d558b1e10dc16736b9fc8950c526693f110a9c6913f219d03c5c28862d7752726508beded4004d991e0cb264dd09d747e45d7d89a71cbd3ea457cd0410085a8eec2cc4cc70a3d1aae6016bd04cd945ea5fe6a393e235b9466e6a8314bd2f7c2cda0c52753b2dae821eb1b08d818f6b0bd5fb0672380de2c7c5de678abf18ec2da1cbe47afaac78ad64efe6b8cc186b1c0ab207886e396072713adf43f9ed04e66f26752de798fb7c5c86700106147f9c503cd995c5c7032fad8c065316f7d2915bef8fc67583a3eb6aaef0881015be94e917f7907edd764e6a4ad47b3fc1d144c1a9bb8c31ec958589f6783316d046cf93d632164b5e8ee65fff82827093f21fa008891e6e82b5af5f23fe5990da1574d508e9cb49ce8fc11ba0e2e82568d4b31b2e31377164561e680d00f56bbd09bd50f701fa124d0ac12b57ede050509362e068252a45573fb40ebaef139f6814d695411e8072a2bdf656018ba0d70814cd27f60b9fb22e065dfd45308ce57a2dfa9d9af0bc758395f753a2e21650c1350c32e4e22ce638057a1262d8bd3efd5be45bd4ead94e6a2859e0632834a50802c1aafe9371bba9023faba9bbdd500ef8b29650ff12101300c5a71689dc7a18284a0759ccc79e528c8cc0dbb16e6f12bf296913592f712b64adfe579607af2bc733311a0185f2788a727d3e4da93c4fa15cfe2752aacf53c2c1f6f1cacb1260fdba7079785d189e0891882997ff1394cae329e1b42d65fd3cd1049ee5037e167a0ff0345b42f5c4c887a0511982d57c3bf7e4de68c2a2fe438d04833937f90885ac2b13f59b636f6b1f0d3b32f0cc4e4ea1c0c97d82714cc6ee28c4a2b1c28efcce8b537828453fc05360c3cb1a371692d5c3d568b2e99c354d2eb92bf6482c92581f28e20c0bf1ec9074164eefb6cb36a9859540365bc25f2af98e23367b3c7542e5fb2151d94ccd17414d27149040ad0107fedee0205207755137af46d5b7854252449f794e2d582939f2c13493eb9ec0c525c18a14b8fe3752227c9d8f4188781eadff7e9e46eba249fb38707b59c814fa78593a6dc7c1952956923a656b33354aeac9015c4ce521c82e75ec2a3212f48a75226cfb03f19d166ce19108bdccc068b5dd04ac030111a8809b7cf49ef74ae38f85bdc94d7f5967075a42dce89f244bccf2b590b9d227ece2e69833f1176e65ca3339ec0bd7c736c5b4bf0761f1834c33dddddf1ce8e532f1be1de2a62601885f01c04a414d8c2a079a70568ae012c82c021d5c403d41b8bd1dc49473a8e206e96a9ace959bf26db7f8de4c9685238cb701bee2d5ebcd3b298949642b0243c71369cce6cea7938eaba56dec42ff7195369377d9636c794aa9799bc59382dcc87752fda37470fccec4bb9ccc2cc477b7a642d4ede1939ed48441fc42a469b58ba5adb0b46299582adfbbe9bcc9c7b51a079e7de25c400a5eaad61838b5fd56f66321f05cef00cbb6e4d54d645433754e8acde803881c69345f73bb11522713c061fb5fc437dfcd142d4ae77a4bb3a547e8ceac3e8bbc4d13a808b66bc4f6cb2249a7490a2f3e7c9a312b6d251228183de0b9e53a15207d4b6be80c41b0c87c23a49f316d390c0029405ea9d14afe6d6503d23ead7b661f8a932424ad0801dc670674e4dfd6facf4545907cdd90fd90ff64b85e49e3d856100fd430a5e5441dbe942e2ce65d1868b21fbd7c49392d0a8269adac51bf75dc6665a25004161987e3098fae5128019cd7de5060511c701ae94845964339a132b0f162fe30f08ba7849c81ebe298a8a6d204ef851a73f357b590a6b30d6e1defcd654bf575ba3ab1b9073350dee1ab5a1431afc1715a4ead4c70cc3072aad7bd5626d04676d70ceeede7f9001f10d5f84aa5e74bcba463d717f584ba1dc0eacbfadc45a0502a90258897c6cee2175425a5fdd9f41cef48ed812072caa146a73b80f2ae0a51f966b78c9122639a7c0d98a6b77706d25ac0ca588cf489d3d48f02b6fc685e82f4deea68e4dc7a29253822bcb63808a1221df602ea5d3f1978e81a0d9c81cc34f377945d5d04b7ff7fc0834d1703b21f1245e4d206dce34e1d20ebfb92e962577f3a348098c19b49282cdcabb3088560564b0fe1657e481fa492af8f13fd7333d114257f0795dbcdd313712c7aaa772bc7c1e7804b1ea872a546f9481a58dab26bc9905b24e5993e6ec41ca3abb1b6ff11e231b6dc9c4ef554449ce8d3e7bd64f6f647a4eebbb68a115ef7fc21f37cad51dcbb1725732261d2c1e2d06bf32dbb91c5a76662547392b6d94428bb27c3c71818d59ca46da91914ba24cfb7d564842685685fcda1d8051d3e4621c2d8efdf2ccaa08ad9788baf17c17ef0c76454315a282f0685d550a50cdee25e0bb777dfa0bcf88ae8249c1817ad9614334cb8222dad6d25adc97063dc7bbb08c99234d520a271e2ee375fc1c0d074d778ed620bf024fbd82e223df88913dff429cc25ad6455424767b5679605d7fd6451c203e31bfd4d348097f3e708f67836fb2450e6486c658c119000858e9a060beeca09e2f3e883b46d5fff50978e0d30a19e01ad79027bf014b03a8bc0ac90bd9e0deb0a731cf3e7f06da1ab059fc1600bee859400877388cac6c5835abe7c1fd2633e69322ee3bf0835fa5e821afcab6c71c0f285823ff4a88ec18f66819ebbf25ac2a48c7d0489c5d939764329d718c8f8627861b109d94572dd42a64bc0b741e47282c62d1fe69f41e6ca1c02c41aca3529231c2e20ccab17d6cdca75ce561e1531917e2f0256a86abfa1f94b1c8c4d5893ee8315c2076d895de8f80ab9e6ca9630c313c2389a21b62130fd2ef231d4a746b784735007c0a4b8d8e6de9eeeb7ba817fef017b6c254c9c3b3e7598c70882c061fd64fded139da506ec04a4b8ae6a315886fccd0285b547f47942b631286ddba58f24f463fb2d83622efb138e68542d9e07e93f4d57c8ce1a0d884c0ee24c2b6233cdc5dab84ca3d11b7d56b93ffcfd8639516396103b4cae3426268c342bd2fdc510f85cd78fb2ef833a9b3d2d515a11bf0523dd3aa831f10eb572a06fb670fc4536a231efd10b669ec43d3f913156be6c46ed822663efd019e1b029a8cbf811bdc113c79115529c0b45233e083a62280b9bfb81e3501628186393a1e87925a5bca741a6b0468fb2edc1d0b3fdf25761e01f3f938bc07e19dd1b5c0acddf932cc9507cb304780555ac91cd52795e86da57c78f10cea5785ba6cde26170a6c9d74e2beef85f62f54e8aca510c52bba8acde5bb3c6c66e30db695fba703a4d982d47f34f8ae4d81a7c3fa9a21d8b403116fee1af02c7532820273b48a551ef623813d08d5e81c08663e97229929f96bc9fee6390f9b02a5733f3fcf8516165223574d39f60e35fcd2bfe2a4763d22986f072ff98abb87caf1191cccb119bfa003eed3ec1b853da267e139f3a314418f84cf1aee0059f263885d054a79d6681033726f0d5170595833352d704d96018667a6e251ac0ae437184b3118ea0d25995da951fb49ab0ec53f7b5552c12973080c412e1e588e34dd2104416c4b9a5c34f68a95dcfe4efb875eeb73fbc3afe6381be853ab85f8e1748a591b638e7d5690c30e5a8e2b090115692248fa15d11eedc757717b9f310a3dcfd8b01267a54fc411dfab4207a66d6398b751b4f5920c0c96e77fad722a53d5c35e5792bad71c6078fc80549642ed6824ed858aaf4d309ee8139081c1a3bc9b4ff76371c63edc14b4036eb8f2f1254f92f686f6230c38b54f135b0410794499cbb2cf5a11c9b31523ff4a0e36580dd8376c72c6640e6f4341d4ee7cf2f164644786e0b573ec2c7fec8273a0ef2e98f5493927c0de5710d3a92d5c3785db3730b6a0b9cee8aeafe464e27bcf593932007b4c7bb8bb6b36caa226706f3513eb42480a4bc4f60ad170f55ee6592dd0a000785b213eca6063e720c9a988a6f3966e033d5200d9e5dd5d7446b47625be207fdad05452069adb65c1337015929c4c8b41cc47fce8ebabfc26ddeee06b88f1a391d35fdd4a183cb1c92245c4784f9e5e93d0835cfa3c59a8ed44344b471fe244c18fb342c75397525da15b16bd1fd8bb1ba8f2879df74a7b7df515a04342fc0afad494fa41682233d113833fcba4bbd6e9e5da41b3730c9f9a4679a85f91fd35b8d0b282316fdb6bb569bc4be571821dec92186f754cdb63e566802b249bab817254bc99424ceb671c7a020640c72762b83b95375fd7c5fe1882d52c2069fbefaf0448c3b206f211a469a936314dac7660f73bc4a6d7a192660cbdef4f086cbd97c448234890bcaf28edd0058394ae09d7b192d4d7be18afa2f996fae7c3f6ec0a03a50c30cfdd5cdc41e10770a7eeb28b7e835a7712ed1f17d9568b8c7505d8d6506a6e2c906a14c8f40e361a5b33106ed05b7da0ed376013bbc818d459c4a8966eb8ab856fa1b80b99c1e62dbf782e3459420e3c4d9d936039a638083b47e4db94da17e51d120462f6ec3e424d45c361207089cdb794e05baff946c710405ee54746b02ca50341dee908dbd3cb6b1a3e316100ce46d47dc85ac45d09112002484c112a7497ac5d1dadc6438ba4b539ada75af3e74e67919eaf39caf86e3c0b729d62a40196eefe29444e62e639b7c96cb65d37db2b8dd9561774db0e5c5e8eae510a6d7ef0b798ecc733e36860733e740921f7c56be0fe3081e805abd797da60193dd5943205d968989d74b995fe973450b70d78a23db0da4c6e69870441600cbff4cadde4870d516277bbb75d136d85bd43437f1b53696d8408d07677fb3b65cd2b1b62d1cc5e8cb8023b319381e6177df685b2e1761b803738ebb365120a383110a72382623480d397f7e7116b7bb4f018f65fa56af6683ca8143a680fb9382d713c9ecc7b3b0d52b2dca4c5992dd34f3d50c2ed9b7ba984b5b9f118c543d23c2b67ec3180828449b738a894e5f2531619204894adcadf238f438c44fcac976b5353410b28fda77b2910352b7c04076da495a9879f8ec94e36b7f83d57f6909979fa984843f179f8061a8fdb569e42e3620ee249455b3d3b0c6e940904eed803b958539a18019f8e07c0d9decb3da081286ceccf8a0e8196fbac198b859d433c9a60abeec42c8615bd9b719555c34eef6748a49878dfc0916ce198ed94d1666e7cc98dd2289650d37b79b9bad9dedeee66e77773392c78ab393c984d97ce27c3231319b9e9c4ecc26ea14c834475f8eb6ffa5a1de90f7e9be483feead23b36682e787b53696179938e9fc4128f67c578acac7db86842f6b0d9b79a93af4963b63f7342ed4a871b7d86836e778e90c4a724242db2bddd657282cae41f312742318bd9583440987019a7e63b98bd851fbd071a59e724f857e045a0abadeabb0fb665ede73c6abbc45acaf58e44204658d1975f92568e8d9f769e7a1ff328fa29ea480db57ee784cb40b89e29e45d48a491a8cbfbb011529b5287b776ff886b50bc0c5fc10c592b6b5d9520b4b67d7228cb214dd1d18e2e8eb14b24a99956d0fadd11f6c99db8530c2ac953bb121cf76ac33c0a079dc8e0132fdb663dc6e3bc5efba6d47094bbcb6f729f38e4edb3378b41d8f5dc89c7c36dbbde2b27dbb4eb66ffb637b0a0d2db637dc34f551e2bf5d33b6e85849d1ffe46088b8963d2853ecc5f7c08ea112470871e27ae63137bb0bd7fdaf61ae445c514b76da94fae4d21928aa318d8836ed48d293d7b5096a2fca810a0d57508a2a41f152046caca7c19bfea23aed6d52e5221aa69291c80f9d65f026765e7e5a84485ad8e7005a77765a7b73c54a99e8f3afb43310caa8a529e8086fdbf016cdd53d232c86a63e738f6a70fa69cd1b906fdf0494e02ee8162cae7fd435f4e2a9ec656c0f9f2446290f0fe7706b511729b494707ebbe04a8ede9e772456fcebc5587705fe1ee4fdf7d9d5c186c47cebb175a7686f2efd53db11c2874b855165b5c215464cae09bd647ed2204cc57d4b4dfdd08415665acaef391ddc7fe69e6b5b8272643a26220c9e01062f2eb62e56723e252c8a51365fdb3f25bef83c5534e87cb9898cc30cf4c470eb4848235c66d80a5ca3eb843eacd0265f5dfbd6ba76af1eca0f64dd12367d4b71ec190a9ba7627cf867e5681c92bfc309361d19e9184ea8d2f5bccb338981436c017d074582942cb59fc3cf76a7111a5e66f765bf0ebc938132485d66179bb9bf3d7bcebc31b1eb3deffa5c911f320a2f2019dc64da36f6a0ddf190f87c2d49e535b9977d2f02327c272ee97dd2528e68218fd5228b802597e9e9ff88e3aa51b53fbb1f2ba2518f88da8beb6a17738d1b67b30ad1390ac28e8792c7c5042eae8c4998cc798185eeddf433c1161dc80f7958bb9e477503bc7524b9eddc5404b1ce41d21ca820ce9ee82e2f6c72188822ba13693cd619a467dcffbc83db9d7520b0b63c79c529e0e418ff0d845aed5d7ce7b378cc4887fb2a4113cab6bb2750db95aef199e19970c0488d0b6f6f9d42a19b72f9ae2c466840e8db98b6f9d11b905c79f3478b6a2896ab91c2192656a445332c57cc8c0c2837b3867ac0930fc3c9ac1463ac88d630463c7144b5e698cb42e3fb9992232b44a5080610d6acbdba87c9a0227f3929a0c220e6b4cadcc17e9808809e455ef38449646ad4aab9a164b3ceaba225225f81b9be2fc21980c5a298eee446e683258d3f16433736606131b918ecdfb9bd51976a133a71e681034c3c58531d96eefda7f74f7adae4d09a6a128ec851082d3eca3d31396e9575399c48b5adfdf7fc4f2f9c802f64eff6bf3763236143f46efefac60d0476be38a577993881a9d0ee0a0ad07ea8e6e65f50ce2c0ecb1397d888da4d6d25c0b10366bdc6d14775cc8f7ffa7ff47edc74eecedefba47716db3650210faab8bbb8836296b987f862b37ffe4f20414d3b66d4de5dcbf5a440278cf21c05518e9d6472479d07786071aef326bf660d5085e77a0236492ef0f1bec96d00c167414de23e08fe7d38bb6d3409f6e63a8eb652b32b409c3148713970ca9ce03e6100a2d68e5f16662a729aee3903d63524d353187a5356f212dc076b56fa5541122dae4ce9c5ab9fe0390427fa6e39bc9dd8e826335c3a915518a94f28c983a954e174e74c19273c9215d1b9bacfe971d2046e54f83b3fe7d9ce365ca27f7d60ca7b86ced0fdd6415b94a0d28222cbefc3a05e873586974be7c20ce5c13c2cbe9e6e8840a1e2e86f695c2840e4d32bd28d25705aa0b928e9637be9dfe5722ffa3efd42bc81854f1c6eed59b7fdabd690ac20d75c9fb0f48e96c7885be11dce19a2ee94280560cbabf700bdcd70a38482e2cb344e8edf318e630f0af12cc2df2050f2013c143a3e935d55682b5d8b80020421235f8673083df7b5a1e53f5fdfb47bc32608b7c4bdaee75aba2dd16b8ba910dcb21270324e709d3c57113016eb17fc24957701d14db5b2a495b09875c2d4c6cf0ffc7a9f86af1b793e3cae29e59442a6d97d241c055cd6e2858e61e146086934d1e0290812ef6e0bb0bbad93179c1cf1b0e811bc597b2088d636dd2ce6748263e9b781dc5112dc55834162da7e51494906505957b9e47b0399aa9bd795024d8c53c4b219bb1910318e03a6587e4ee0d40994b3d2774a12804ab82525fe1b644abd7cd79540e398863bda643620c1697fab6b069182a63e3864f3b7d4be339903036b310aa47e8e4ace4e67ce71e550ac04ae8e3cd7a7ff4390f229da27f793638e352bb43c38782a7c01625603f1ad93f21504734050e70165f0b39d5140fdc9311a30cf90818a067ec23194166dae0d02c8aee728b11f00c0e59e11b7c1983233f22736fa75e27a3cad7014b5f5883bf144559229a39c690d3738f426ee6a78b18fc2c46cbe4f391fd384d495eff8755f0f971f1607b23d40d8b140adde5d90c638626baea803897059316867bd0382f61e9db6295f1979f74265241272c8fd9d4ea84e2eaedffc0d1c2389af7a0f18930cdf2980e2a5c4451c344df90b868e45e192f9187c21155b9b5e2273424cc5e4c622baa0c299ae95031bbc240c08b73285f58a1c96f041c13969adfc8ba10146d0910c958e0d6bbe7b259ae367578fe2f3e1a3b2f96aa37759ec445252d49ce6c49dd3b4cca669f291673b26d72c2cabd354500a2816bf2338c9c880664042ed307157740f71bccbb5049fe903bc8a220541a05a0d41563c617284962f0a516689ee40184c4108e6a9bf879b00093e26771c9b552006a1252d1a7e1e1d4ea948b5a80a1cce1e832ce5e27b783e13a867049410db6c50ff29ea7c3aec9178170628849f01cc997f0fb12a09bc355a51a492512accf6c69dc02b4a78f40b9488998b41317cdaec4f9ca013d8c2edddc36ae09948c42b39af7787eb37e34ca925d1da129e6cf78770058b9818ef7ae5d1d06991311175404e24c2af40c5039f344a24f4932ab7e0163e539484d52134ff377002a240f10b46b35e21fd4c6b96409a3986c1f382dfe8f03834707532cb3a725a15406d7e264f6e59212bf3a2b72163a39467f440f093efe3b0c7d6b61fe174cee9653824161ca054916556a32816e57a2161ad1195b47333113c821b473a27cf61d6a9e81c8dcac95013b7238290ce4717cc6838aa3504fbf9377352a7b3dfbd1f7d36c034a928922d7b1100003234adbfd067933f1f01879b7f02b79627b8d127d38e2e8c63cefa5a890f13923aa8502a54fe3261205d10058553d10af22e84d440cc12536b18df4af9ee3ac29d030f270e7dc84003fb1aebb01ee57832c29e33fac85a84959af0fee3e53a3436bc7a3a987b81157847cff24cf919856b8d6cd7d372adcbdbea5eef6aa8445859014a064e9d4d02a5294fdf29ca5353c52d4aa6554cc01280484f3144ccec60b3d117952c64ec2b4ee0e4c90f7f08f913effba8cc2eceb1b821a55ed60228076e47650e39f406cba5ddebd7b49390e08d825738806ef888a8f8454a2c7d935ec8362846c639039249a01780b32d80bfb8be4cb69c26efe367459eb60d9b086f73ba58dbd8aa95461ef229302b9ac9da9861d94495b3f14b0a91b9a7be845b4525395eae2ee4de6748cc9f76cc0ebf52f7cbded9fe23c02f1d016239c31cc84a275a4299c0ed8572493bbb803895c25af060897fef842f349c88cbfc71b6ec1d7a90d00940f1867d5215352372498376d1862345e9eb4ac2073348834bd8ce188d93daed0b217ed004a9e8ae76e00ae0b1e822f01d4dbccd57bb682d149cb43cf1f692ffa0adc2b45d75f2202c929aa327b3ffe4a54e2c9d357e3b007ebb058828ecc06dd5f989d53fcb3013177d148489479e6860cb4f110a090202d9616502568c307323dabdb2d3010a65485137b16d5fcc438aca5061178b478744f34b6d7300de24687ec7cab46982188b2dca11c1815e6efa6c200a5f9d11cf944fc42011fcc130548ddc5286fab8a2b96f26ffe023c033f1e0ea11412436855bbc3aecc3315bc340e750dbd21a6804ae6684bc4ddc51de1a280769c034252bb6ff2e24c51fd82d315d72f4d4f74a5b69ba7470f202564064a6bbc2ee3424663810c9e4e4ba1444b94d0a75243f956878640d379484f0fe42f452cae6d8a9f1b4df3140013025642040c35c54ddce1f003872aa243ba6e2bc7ccb7f211ed9bf5d6690d242462ed561f5e7f50e0819b9a0242ffe5e2e4da1633bf9e2624f43875b0c2e5060445156bea82c7d0b5c6e351008a03fa5400e5a4b54814ef771fb09c5b1cebc92a9353e09935170d06810db89cb1d8818f34cb0714db6011e6bf64d084588f882a46c9c4c91da5916948e41498b4f263cdca98c59d6cdedd26a77be6440f75550c42c67e017360c7eaf62db56f7137fab7c86df8c413dfcf44c69619a1e87e4fd07d346be2c04943d12fc4e0bbcc3a85a336e4a524ede466719eb92af56ccfa202b82f6b4d6b5d06964b8e6154a1c859e8c779cc0ba7db640a75cd336a8d92fa9df85bf4c8ce800fd5c110d75f857cb38258a30dadf7921a3a1317d8e8c10a2dd2807cf06ccf6673b27945db417a7a03d88b482261482858c89af25ff98591d2b1328ba7e6ba31dc1b4ab3799b10cc8538f65e94e839795f534583e2f04b0484edf69300723f3345e6d255c7d1bd02fdd3a30c854ffd5b79a64e778527ab6abb0c971b037abad5896dcef0a2be4ce7581ffff78e610eff8b0bcfe97e2954ccd5d20b1a2cadab7a8a917c51a8fc48b666c2d768b0c6a9f5a636139955b317b14944fb5582850506b8ef2f817e319c2055942f05572d3610cce119f477a70392449634d00639348a054c96aec97f7f3c6387199e85477eba22fb3e662c2555ea59971d3db4282d8c9cc26fb55b3064358aa608eb54f1e9f88a8197db215f52ff17ff7037ad84bb537eac72242319212ad58e49cc22067142e90e891c63de106cdbec2a709f5cf7998b2cfbcc9cda90fed571002fb4145a013a2f9a45918375e4dea89485b8341303407fc93b2cd1bf5b1008cd29aa1a166f678d83a84621ba781595222d4ed86103e429572d107c9acb2ea35ac9b5f887d3b14011b3419117531a2011fb4f79d2848f1afabf75d2ec2d1a30869ba4033cd248eaeb5fe417bebba46ac79b6855d4376eea9a805a756f0148644f8158d5712d853113a3d61351d47df01044007d3516589fb1d6e0f9b8a418a08a523eac2ff42593f30187c1c0bab8f9b70a069de64ceed63e18c65e1febdc96c8f051f304f077f8592f726e3f9e4723438cc4e724f7d4560a6a895b44c663251dde06e21e070c183de6441d2b620bc78f2a1d77dde987a692a52136807bd453f43607585860f949a3a28a6e8db741b0fa9da8c5b56bd4cee9e1a7408b5c4d942caacee480bebd8b7f6680181029719f033328abb3a0f6995df415434c3a94f58e4329a74ca77c3fc17794815032a9e52da9aae0fbae8e4a0a40e8a6957f4058af846798453f879d37de4c826dbdf16b52eddc503360bd7db6534a3ac3f41209130d529c2aefea27132289f95f063963c29256925176baaabcca87b57a3b40b92d7b2dfe25751f0e10a88fbd94df7c35188a185e216470508e56d4e63e1041b86c5556b6c50aa3965901c113e3c6610ebe0bf35a0f1911b0849af134932ee76cefe2fd91092c73f23981895a620a0ee4232984072bbe066f59ba77bb442e72ccfd5e721c09322790e251eb108ecb698b73056ba0dcaa119daa35eed5d6a3848a6a20a161cb99bffd1037ec909f8192a49813fe1a9c3a60841625672f4882181b6350a22e8a9d813547979c2bace2e61162ab55148bd2267d9468eb05549a76bfaff4ff5b463692394a69e09358ae981bab186e35e9f0f9af5b04660bf07c1007c1684c43a216dfe189eaff1b424ec2a564d49446c82b1b5a4d19871cb476257da3fda03887d2151d2902fa531ba926d68fc2f2bd399a0793b52f104c0405afafaa78229d963bf5b7cae3577ab73a768f5ad89b56d71905b1c20f47969f44f86223e28df0bb96de05704fd9642f8e2be38e6b74226be25bdb124fd788c7de6b0e5c6da0621f320e17c18b5dcc087bd831880e921eb16f52ef0203697ad77b02d8b5fd7e03b32558fff2c8ccf1f3c3fbc3a51274b0fe062cc18636f1c5b439760882f1a9b43875eb33657ebc48319fd2cb36b327ed730fa5d069dc6f95dd6061c022fea17a26dd09cd1c37c0dedf704385a6f44ac5a5e88bd1e306846a51cc7081c2dee9c0c8d758279a7bc2ef8ab865de5e37ad65026382531387a6136d84585173416ce1f50ab228e1516ca0415ce3d467fc302692862202b128bca63c269b6cfdffaffdca0044507e3a98f5a85ee62376162a364dca20cd1f04edad5ec9e5d7479f0341854ed59bb4953a80b94b3790a71a85d0d41fadb5cac69dcc667c2e5e36e273d192e011824cf598823075a087b7803fcc7096044fba4e4623cbb900300582e78ca30772c5cf18ac3331cc70e6075e33f4860c5d9f2a891388d383c233e749dd6f4395f6c9b9efb30d397a3b723e69b7f9c99e0f881157162753f9a2992aa0802dcb4d308adfd7277ddd79f23b92f5fb53d7a22ae4392547f8d5c660ede63f710333a43e9baabd39926285914b1fe6809323abe89831cac996bda0f7656a0a417e75254dcd05a3748266151c9d11e53f92035def8880e2497ebfb6f42f063ea17de1220027f444f536bb1d4f5e347886c7170a936e58721f211ad9846d1ef9b29e292d5f43209aed9572344dc2719260633a4ee241c0378e7b6c915c1d80301d40e721bee7a3d2aa21d94a5a0f0e3a645f7c1d01cea92e78e4716f5847f62030d79f3051c5a821cb673feb97b0199ae75a7fd77ed0be37bbd068aad790f1692f0e33078ad8811fe27eb6948adc1c57446d9741f73636f38443ca5a57237ceca7a6391e6ad9ead1b312eb282919b90437dbe4deaf75408e450c4425b2c8706b2552f61c6afed1c2addde5eca28354101d8604928d79e6934d98c846ed7920d34e3c3373de14de5d37b861ef815e6f78eefb4c44ede6e6343a957118eba066d0670a25f646dce22d9aea95f19f16baa7d23cdac441510f56be6b0ad5a434061ae24b66d98af5542750a46ddb4c6de1eb9537ae0f85f0ba9410877cab4d6503d83ab3db245d0e68bbd652152fd3026055794148d0104883f513764823518e622057e4cc9ad0d87ca89a146528e748690073c5823d768663381bb9d4b0a9609f18e55cea107046875f72a1663b9025bd78b1a948b953cec35c7ba7265b69e92650d6225b60586480d79729c2803554ac8b92a96e2c3998f0d5c5942a5bd264598d58e5f74063ce4bc753c7c7444ece542f8a107de1401f8fd4949e7086c34bc4b65ccfab8397c45e22443619e7303e1e551d9573a42cf83105e9f0afc7023609abcb2efc2c7cc9ea05ef4b9128af20454e129691427aad74fac492bd6c2a6e6419f571d40afb9deacc59ad25b9008869e5b1917b47bc7a74b4be409dfccde0e7618d169642fe74bd3799d396b01968adb25dc30976b0e55c96ddee2b1007bf5a5bfc5f21d1a9e32e131d29f382b35ff829b358d43dc4649b3d657f50f0f78a4e679a0c5c5bbee721808e9414f92d3c18017b3a087a6261617ea89d28be4b489563b727bf6e05194ee4fa76ec46e0e2ace2010b89b884dab8539b57c26fad087074b60a16c5073677a4dc3177c594a46e5f39f83b271ef8dd352b7204fe94dead678b18a7e4739a8719af2c13627add078596c5eb72e27b034abaed820e0ba597d153a77ada14e053d8ed32ef925e62c2f03fca3385c1dd34fedebcbe9d62748f151bdce6c8a0df73bffa49372e46c8ce9041a947f03ba2df81c4cbcfb34909a586eb6f9e37785fe27164cfd2cc4cfbe4e13ee941d543a4e8bbea9d5cf891f986f8182367945d7ec29a12d623858e0e92d225e25517dff8701e41279d326d5a377837b363f1157a83d97f6b0077bfcdd5072f53a95caee9aa46411efcc87466cd16fdc1cdb014f59c9760777544ba822eec3a84c83174684775430d0a437ecdfb6f02ef2d6beff2e589dd12e4a40cb98036460e20e2959a80f492405ffa0c03f6701fa70014e02ae5e0bf7a9e9318a6a39b33e3b3a9cdbc56158f4afb1154b7cd3fb41f58e1b318df117082a56202598237f17ab15bbc5319a178d2f3a8ab4e0a34f971c0e8ff804d2a10d0bf95cec268e482faf2e66b756b15d961edffa3b73cef0ee1a17f659dabee5306fd2b25fbf156b062a2d203422c6f5ba51147ff74c0b9ff6178345b88c1bc9f9249cca1d5512b0e1d224706a8174183a280b9c91e9695d496c31c01f8898da3466659c83e0da2576a3ba126e2cab475177e239814d288fa06a9e408adaf2caee2e5fa09da9bc0f2286f4ebdbbef4689e55a5d1393ec08f516484d746da409cffa8747dca56445d6dd26db5f99f8b6665d0e1e454b20d93b74906fd31122f601b9a082006c72ad6a79bdeb4aca7114b13438f1cc5aeb8d97c2d756172b1233811b04e91ed98cb6ce54f88b4bd6c108bda0836ee300802b922a71f8cfaa0814ec339e398a39ade2ec3c303d270f479ef119f966120248826b8734532fb409a77dfc243373008b103b8bc311237624e8bdd16cf6bbe05fa769d85d25eeef47636b1cc6b6fa2579b86e5988e84a2e438d5377b0a6f2142fd56a577d870cda76e91ea6a2b8c6814a4dee9cba3e3ce25056650cdf82b5ff4ba28918636489b3db78132f01ad1fffe2232a222287d86cb696cf2ea62dda12e34fdd53f41eaf543f85d3b0963329ce971446818b5ee029d4ae3a3de08d7ea896ef9c3d72887a67b4f4aef19fbf70b4e9643863234b2213d17c714b7b1459e8cb4f28848b17e2fe732386c8629a5e18b9a64bae65557a1f272c42e8a4365011b9b9f85fe5192611b037fd4e9286986e5c3b54c0ce0f26ab87c765ba598e8c39bf52f36b214363c17b5260b52c4f6886c5d3c6c07b103175370cdbe79bf53696405ece7179687bfe28cfcea9cf7279ad8b6a64b5e6b1c68bf2aedf1bfac060d43400d147a9810266c5d2bd586a26ecdf974383885db9b65939eca6db1a70d4281b31ed731c874b6eb969bed34836114c883acb03ffeba45c88f8847a754dadeae0816ddef9d69ec1f1cce3747d4730f7d58235484291d008e9f6ba92583f4304a155f253128c5f28956918f531ec72def5ae9c72e1e3fdecacec8ea4be95b644f52e84307824d89e0879db15fae36696aa77f0d3cd715da3afc2e1578ca46cf7618a07f987a0055403ae18f29cd9bbd49ee0e9dc8419d1e4b12b3ec6a3ffeb33ddfcb7b59bc201adf433aa8558995ffbe3c9f48433ef434ed4ad39ff3d830ea780df9d2880b0c970954163c414834bcac601d0ee7ae2a89ca3a8c905202561e841f3ce72da7c619e99720c6c01c80c9c80862b930d6d63e91dda6be409d8003bb7f8e49c29a8dbd887ca6b1a45c4aa3d24eb038ebdfa69e959a6654e145094eb2b68175baa4d3d29ab0c633a6df5cfbbdd98b9113351be7c43b324af17cbe611e6dadcc629eaba554c1dfe82dda67e34a103e22c39e988a10bfa933151efb11f2b5832cbbeda1191b803450609b51e4819a355842c28ca2cbc08d1b08827037fc0d1483f2fe7020daad9f228a6bb121117aa179bcad4402393dc06a341c20a337f8e0c370503e38196b815958f4f07f18cfe5609dca188acc9a1b20d00255cce18a1c086ad72413dd0ccfb1ff62f4bbca023f7145b57f4d9c602302c700817054ff84dfc4f9d31f5c543d1bb50fa7db3b50d5fd8552851c8f63bb60856b427fafcb81e64280051821103406d3eb0cc327056be11fb916874a8966efbe40510ff1d83f023b47238924bdfd90e3fb37c87c01a617f1528590838ce00440580dc95e240a0b013c9c464fb8f7dc4aa40cb1062d04a40190787fed36f7edb19b138581b0100188aaa77b3c2c8ef83391f2d1061b683337c2c94f728c472a79fd29d1f4e91843e6bc3b77e953f0e4b23ed2b26159d265b61635b7b20b0b53806eb29c2c71f05312e2082e947198337be03e6b74f517c41818ec78a3916644325b64c203e0de27f727582b786afc09d6c7b52470b790805cb7ee5fb7a7814c62a550c142c2cf2515e48398becc56424877b6b9a75844718fa815f33ddfb0fb8c2fa3981d7d9ce046540aee0719d3d4f26d3aeb2be0339ebac2978d9ececc67606f84b6f2aa1607e40520ba95194bda2b4644f29bf6d04359ea7d13d1cb6996a237701ac5e26170b5a512f7d4b668678c86e2850d475fd99a66381351f61dfa053ccbbf33d19e83c1745fc2f882f94ac33a14980a74c0db4b3631c54d40fe17c22e55b0fad37a103fac789c854fd4a5bd0062b9f609042ef454dce84d18c1f275ff23d374be4a3cc7047a7155b48c3d5f7d1bf9b4969a91b80d22c49fee63842d91ec1220e54dd2ed22851ba9bcd87d54f13eee3dfed2f4c002034908d2ea59817cff510547ecab84aacce25f2b8146fdb73b85b72db4960af70ba3e9f08f50533e1f55d0adba0c49cb18d80735015c777f76c6b32cb496089ed832f1ede8a0cdc027389bc0c0aea22df1d8a78b15911cbeed14d5e0611ef2d8cdf9a54a59139382b2c1eee7728963d46d3f9b93ca806a72a90f1eee02eb1f30fca26ce9ed73c9b446853f4d19a7cecaea031a60a2919f5e95e2b5c6955f9875c27812d18115e4050f623b26485181de0648e1e437d198e333680796b9f99e869ce2e908b56734a5992ac216b8414ca83fab521c1001c4786f975969558541f825b97cf85da5ec38c74ae9be32ae22c887186d81a314c9d09388f91a031c8257a91bc6e07d900dd9d9c16abc97c9e75a3f12d237d261c8fa26494b86d09e95cef693941b43a729058f289ec807707d6eb60890d5ce90c7e5d0622a48aacfc58d579b7969c10049bd99a402fcd78bc2f549d57a211c843d383007d0a4f0c80a52626c1ebe88dc5accbe2f0af8a493621b1c8eac653179ed57ebf3cca2c8b052775095f446e01c860486e9db89f49c16b18d53e228de02c3906a5ace7bbc2bac74fe0c3e426d4ad97c7cc071996d1f99c7312a211ee0d10cb8111836d0ee17a6cb29822428c92551206dc594ac48ae41c62c74806088acb5491bd920b390c9589981da3353011e71a0c0509815f734b88aa91661ce77f4d3bca0282e0219472fd456a0736cfb09f618098ec0a7432d0fba87ead24889b19823ae4baaacf00d52e62a1a88f207899aed890e039b47eec3508cfaabd628689d7b71294a2999af980ef79e972960750d8eb8282632d9aefb9cc1db0d51c0e3b85316685e6afb1b46bd8c52eeba4bee09c64e292bfdb1b13180ae5d4bf67211fd19375730afb09eb9d76f93ea0bef9aebbc3853cb659f9174456adbef26b217a50e72001a4d41a9b65e0094497d30bb3b57cca9a9d3e950ea5ed409a3d8ced0a974d2d8447d089755e2f15b366a393df4a41a481ceb32597abf1090a575176258220bc806994ad401a60bd288d6bbbde566d0041c4a401e024e89bf3359a8f682de6415dbf2d95eb31fe2797e7a884fc89325abc3224933329d906bbe79958658084edf74d146831d47ef7ff03a5a50ee3dc32a04402a706290fb1385f15e89941b9a958047800a805929c8657369bcf811c3b7ad89d83439be1e2f71f3996b8b89d22c48ed55776901fc04647795024befeaeec8236f7f4e75a8fb89afc104a8a5ecf55e8137162be1b82000d260602e2e72a15be8d3a8b88826901bb3e4177d856a0c4acb2447e9d14e711baa8b365148daea04feef11058711063a4f433ed786e7709f25f33d2c0cc741a110713776161f0769782989f6251d83be1bab54037821052b19b99c4508583ee011986611bdd7b0dac0935155a14577973f1e275f99dd499d66fd476cd461537657939097f389c5dc15c2a7c8248ad299997ccc3edf7b3f6defafb82abbb4bd840beb534e9258aaaa4bdd60ddcdb0db5fbc4d0d67d8f616e7e64b4bb52b489a399709fae0cdbc0153b64e50e25268d8062e62117b711135d8825b696d5b369d265b49a9ef0f71dcee82ad70c42c20b290d8533fa0b112cc17d86012a77ba1d4223990abbaa6345108f30a04eafa06fcd39311fe9a5d113bebeb493075c09663a5667adc5ac7a07fb6a04960595da44e2ca0acb0686d7ce15c73ce1e05708643de904ab52e3ebf673ba08cc46826e22cd7fd95302f5ccc8c9a1c89305d4656662af151aee2e3d4f33e1036acd3fa44643be9e2ad29a29a9a43acaaeddcf2e9f78c5b559ad1867abc267e9efdac44af2f9b0166aaa2725ab218b7ae3fbbce8476c1e335f449749d912cb609900c90f5f076565c005e1e11c2f4a108618dd51dd5815c00e4fbe16c6b8ae9a566ce7608ede8f2dcdac7bb9c9e853f0ee32341e546a2b7c7138e3271693f37bef6d156fb90bd4777bea552beb15e594810fd18768d95f603d4a57be00609ee9e1c1cdceec5d17f96796c569f9c540f035fe15fd112616f517204500f8436c7c65986540116ec3e037cd9d8913f6e7add39c980f7f4471f0527014292548265d2931b4421da674173f400ea5e8462d2a5a74b5bf2f2e28ac694b4bbbd82f120a32ee9e76b74a38ca05642c31912f607eb4e2f8154d0821d9a26a44bb848322a47ff8d5aaa54992e81271d156c81c9070408029b5a2b895c8cd3e9c38de8ab23ddd3340aa77a2b6e4f40f940c41cec536a2c28d2ce6a565b6b67f70866a19690923bd28d9a779bf6707365ac8fb8141e4570c3fd58df3ea8a89ae2b9178960b01491a68497ce5dfe03aebde6a78cdd63acdf6d623ede30f6afd5beae1d3a2137fa2482f4880318e08989d15f1491bf23c052a3e96939995a7b4a71f2db24f6bdfe33782c234d098c0dad395955133d8209246a56355a0eea5c0632c169d49a1dbd82adc0013a885d9f3415adadebebe1665cdab26502c18975e6ed6f51320bde7056fb6062027e87a88a8eafe0e57a544a649771d3db7d7b4d6cc2815398a8ec52de220e92d9234c13e63623db0631f428977bcd52b997327dfe8f96dcbb945feb4b5538d0e8a0f4d0e7f9bf783e655fc7203cdd3626033dcf88e5612ee4478d5dbb967d8c28091fad3f87aa0daf2fd4faaa10fd3e0f3931ee206485e7a64203bea16f5b4cc1b116b0455ec437cb53cc96662b9667559be8abb6787fbef409c367321ad80e31be01f92ba02dd5435198281f136f47ee2ecac3463ad58578608685a3f40607e5c79ee2e035bfb0b11144a9aa197cb701821bc6212415351fa8d73b06ab579835e108828fdf6ad7b91baf0579808f8560bcc13d0954a6fbd4a6caafd3825fda686f4c590ca7282ec485ec97d8554f0bced9966a3a8b9d1c591cb859875db1ef64a10e50db31f7c5a7addebd7a65c412396f9f91b793efa8e6a41058730bf242ec648f9acbdc582693d84e20ab73761e91f6c9ab305f90644aa74083f56a6341a68f5ebd91720bada0dea721adf92ce5ae5e3789284aae1ce16c71b9c78e11ef339a2620b4db2e6938ac28fd26995a17f5edcf021f02f03fe9b0b1085d8dee921a5d0da043698c1396842ea05daa5e7ae2a4f4b1361620069cea744a394e80dbd7d76108b09a09f3be731829c673f95145cd4158b13189ef35b48175ea811dc41a753a0510a4a66feac45e2761c6492e30d96e14f649d6e45150126d103034807c0f389c8b741e4937a4c8df3dbf7ff5fd561cb47ad9b593bf3740c20c9ad87da762b9a46ddd084a8ca49dcd4e9141d353a058820785dbc3c0da68ffd307057dd8bb9f0ec2f8a19099d238f3503cf0a4e94b398c832b6679887d430ced3b7da936569a760ca6ecb276ecdbe9d586fa9d0f4db9eb3f7d1312a2e23bf09ba4ab61aeab8b178a28573dd303fd7b97546d39ede74a820f5317b2c0ba9bff968f9c1a0c9b4796748e8ccfbef9aebb7f3039e9f9e75dc71e306c354a35bb618693debf24a9cebe4cf36f7b0bf35a758cd9e30205622efc1618a2a53d86bc203449ce9c7a700ed61dae9830acf144d4ed91dff7eac248508089acd9c1fdf28fac44451703080a33a34ba261b1fd4c0a292f811f6776ebf1020ba9f6b46dd436cc4bd9f6c5accf193f085341c019b19d9f7019f14a43577706ecdbec97db5e606d459cba473013987531dcb443f5702188f752c18e6c5aaa235d6bbc3973286158e5192bfb64d40810d3bae51bf56b499f8d11df1258101c1449ef0dad0698b6bb37eb42c0484da981fe2e38528463e4adba1e9bd8ce901d867454122ccd22521f5c681f3e11c5f1d9e4d6a5fe24875b3c8b883c7653101299b51b83959be46ef702ffc0a0a88cd321b3ddc12536106283163b22a3c4ec027ca9920a75431376459370643c3d97d47d83658c39e1171e08236b0b4c5c58287345714cd559d0768b6f31fe3cc3c194ca7652688d1a441a2d063fe9202e63b9336be69a1aa07e7ff6358871bd890daf5d6b524e5e724ee69245d21c4c85e36c4ee5f26f045d7a18e24c522e7bd7f0c473b7a725f859a806ca9e5ab79ccecb210e489d138690495c7f9de31ef8c21ee5067a80215f6eb3dcee73b5392d4045cd7260ccad4ea5617fadcbc9f4964f68a7b8cc453bc2c471437e04e0efdc8290845f480725363e20e30bd5f7010f11f8e93d49da2a4370236d900c52263ee53ef3367dc428e7b15b8029b765ca4b67f4c092483373d2422e0b7275d896b4d9524d6bbe04b3713ec2eec2b0392a5943dd2fa2f4f20114830b1c462bdad712036685f0e1155a16cc6fead4174c906e6da51db220d3e5b9fe00f472ec8f2a725f89ecbace9d932bb962d89085ddb06bc9298a70c90d0da1876aa72cbaf600fbb835c8a8827e5cdc35b673c7a2fb0300da99853fc985e9831a38e987e43164fc904564c0420ee31c29bf894a357b4608e0dbe97c8e059612ffbc3894ff688b4eda0fec58a91311486df7041670a9ad14e2b823f48eb138460683667609d01c99ee971a6285ba57269e124e57e11c89ebd6b1c7d0df495639f70e72adb6460094e0d7f04d4189031bfe4ec80e5d78a07e145e39168edbb3bdec06ae02ef17b74973ceb32d72320e5859d1754d7e551c18ca361e830e43ca8198fa92f3b5e426e32a854918b801a93837b8e73adfc41efc2a32bd6aa8a4cc21da590a966c5f9de3901771393a770d32d9924a560e1037e34edf694c8dd1cb1de7a9dbcb1c4f3ace17665e0ce40f65929039fe0e549a5fb167700b76639f60edddfdeb248ccf9ad046a37d3a1bf1238c397cd4eb32967c787f031b00905914cd21490961e6c7ed07ed96cbaf7380fdd8a4c15a70b41e5786179d88fe5b0d2843940636a36c24a6e0802ca335f2851ac275e89c9d3d89e46ea79b12deb8710e76a53e9f9c66e488d0649e44c13ca119b8e153ed1a1a0e4c34f8d02027dbc93c9be8a3d7e4ba951ab95b696a46931a183c17126e85787811928cddbf02fd6e4e311baad46e32eab0a35e519c685caf810b9bdf175231948104e0074cb6585b91e879ea22361a841d98033dad279c80b9e283553b7ffc9362998a5ef2e0abbfb1c3526d6d202a9a34d737ad5a24384249aad873012322734bb977083f45574bdbcf28e8328583129281ffd9b0ae4e2f4a32833b247320c0abaf469f2ccca03c08135c55255d434db273a1dc1d6be55ef348c2aa8e883f89c7bc0e3f2a3305dd2a05ea04e0355652407765109085193c6530cb4e9fef656c20f62b21406e2c48e467b45e6304c6ba12f800a6a29b38cb2a2c2a1c1373fd4350fd327c29bf7cb003723a7244c75106c0c4685a1107a33c36123b4d2b666c42e2903f98f16ce9cae5392812ce4f30b3dbc294eec0a208c40bb310b6d37920510899d50add62ef1bc30740f0589aa301d8f486619a2bad156005a48025134c7031ba2097f11ab7146fe07e847fb648897a11b2b3bcadaf048fc8c68f8729bb32ee9eba41947e9f381ca81d1e797112aed05263182b0174e918ba75211ab40a846262961dc343b91bfad2a5ba4bb71549c9d0c61b1f4985dce35ac4798d683fc7cead6b5e61730fbbbfca614b4600279d0f2cf4357445002b048ca8deee516517306837ce8bdd4f3cacd2c326e00e68ee7ab5ab855615d79281db7b95ec155e0c3aeb43cbeac23d91367c324e7f910dbfea234abd306b65f6828fbbeb03fc49a802cc3a51202e240da258876a6c503cc7759afac48bf0f96b408041ea84c17920914905b6d46fcd517d6e710c9562e0e5a46baae88b9062f414fd477b2b93cc606c0223dbb0654a7dd62673fa614f607c2a2ccdb182b6b931c2e410e7684db90a26c02c4d7895d96f4e8c89971bd9a3d31d259640f2c253f1dc8b837b8bd7096e70a89fadd5db15af85a9ca8c928616ee1d92c255cd4e32f0f51365af87b7224e488293276c0044309e46f20b2471092355c8d1adc28295965a3d4f46eef913a079b405846f8b804119d145ae7668b28425010025de7eef32d484a650ae9f6ad4ff4b7e52efe8971a9ba19691f3ad9bc7fc065490eccf131c8acc07cde97560736a53e66f58fa88ad27c3bc6fdb3a7980499f6c1a61460c018ebac0836368f9b2430c6e540c8576860a333889830d513cb574c4cc31790c4702afc9659360822739f2105cb67a983dca0e82af97dabc56e7c195c176830bc1e3ec55bceb24720185c3e54615306307c5473f5bc0091de28e1978618f346d5e92e025292f6575a0f20d0304c846bac02b85b1b7a1f353bfac68e57044d0731d0d8d9222c22289a4754fbfa4b9b7ac03f4524473481c905f566b3765cf03a8dded0b3652aa614028e3fd01f866263d8e3b1bf329e3f72c04abfbce90817991a19951ac0065b13b428df9d1d80b617a849e7aea2f51fdd99a92aa1671b2687d699e6d87ebd805866baac401d2d2fb3a8d1e5b7d6c56d6159ee9ea52cda1b6ac608783021bd136fddc7600a8f377fc40b026ef7ba0281e085e436dd63dd76d8d31ac9ab3358d7cc929688f9d9b15951dc80f5d42a4bb9282b54581450bac73471a6d168a74ab4deed825223a9b2851d78e37e9a991ed44493a0a64566d6506bb22a231a892ea008a66cc7057c56c174da6aaa3ca2cd5587ae070fab48a6b345b3a49768dd879cfa1852a140ad657d0acd6c4664eac513f6e3a22a65aa94a28515ab75c076775e028672b8c994e90c898f02de2311df717f5b1cbc976e75b95e71b2efc3bcde8aa575178016e65e1d5deb3d1959e7e4087d5e1cbbd003a3318dada3052a4afed9345e2d366e960961f7ed09f392e9aa3e67224985f8cdff41e6dd0e1d82f35a833e18d1c3ffeaa484958903f82467056ea2617f2050ccb7e23210253550815e56b27589e07cd75968665809fcd2cefe35cf462f277f01779810d5bc274af7dbe6bc07b320013a4728581f191c72e105a431eb22d337be47cdf619442289bcd9c56dea659c78afc4cdfe22a154abeb1fa9299a8273a6d7dd8e3c544247b9232878b128c132ed80759f157e5e7b3e97e719b9e27cc345026a2a3a004898a60149460f4dc88eb7b83f3b02c72f4277048fc47ea7711f2e92c7ae866878afb4dba5163746a586727c70e5b4a1623ce8913443243c1fc2585ce24c9e7704b733a90030235b4bea898a640f4b6f7cd065b375af032126b16812de6725fa20ab8a6d1064699ca152393208c521d80da57625401ce57c0817e640464b4038ad14a8d552098b24907baff14aa6d42caaf220cee696172a7b0bf8036993b3edf8cdf047fb6d157784da84fea6c0e72cae9f51d5ef4da519ec5732ed06876a349cb75b964a8897d0ca79e3c5adb26c99652ee2da59452a624036d083909ed08a5ab5f85ab7d7b30597d9bab7dcdd5feb6affc67ad486dc71a554bdddaacf2c9a54ad2aaca66bc3433b216fd79f23ed529ca29d3ea5e3feea959dd5bbd56ef28b386d476484d083f48dda4144f8a1a79663db33cab9c3a5fa591b52ac9948f6a2fcb82db86b4c0f259b7e06393c25746f88aa7c332663a2fca29e59329c5b21cbe9a2e915053f6941fed0034da77d01e3d7a605cc48387f770ea6c4f8fa7011e5702322e725cbe9da504f1463cf7b63d363396f3e8e1cf6f8f8b078f1d3c5ee5c1c37becf01e3c78f0f0d20e1eaf477dbec3791af2bf40e487775351b8edb5bdbdb5fb4de754b76ee58cee8cb7c7d039343935eeed32381d52120ff43049e274747040daa7067678f770feb63e3dbe0796e5c0c3791c8fcb8636edc06ec03440ba9888bf5ceca54ded341777b95888cb68cbd55e5d0c0507d1a6293ab8662947dc76d740bb93b6c340df6f4c1e5d89719412be28811a52a2e8071429caf420488e2b8ad290821b3f8cd1050ee26081182f6a406a1be8c3753e2d0d381ce8b997c1e77109c4ae1b1d853ee86298ccabce397fd0b9057a875538788c66085b83adb5eee69a192fddd59f070454c43bb13e3d3e62590e2f9f3bc7c3f56b573937657c8ea22a8a32e361853dfdbca1bbe055a2da4bb3bd244bb1217c0f3eea1ca4aad8d13c5c9bc2bf87b978636539fcc3241422f3ebd99d3919a1eb39a9394723e7cdb573d0db941136f7dc9176e78ff6e5dc79bbd7de6bcd00569603c5500ce6e8eef17b9557d494ef39e75af3ee76559e93baf1ab64c3e832368c31bb4a1535f9c9861edde51236ad431dbe6bd3959bd5f7ce890b0177ba3edcf62d3e1b488641d660ca8759a0ebbe0d1d71e59b05e2362f2d41258cd5ca2cf0f34d37e1e4cbcaa0c8e0e56bcd9f409b033577ccef2ab57b4f28a7a68ceebd7eeeb9e990c0699f37ebdc6531824e2184108a376786fce4e19bec25c95e8aeca5c7b03936c2ee987da8677f489c736b7fec6c69a09e9bb3320934c6e6641726ba59ad94dbaac69ac432f6e78422df4608f0ad9df7eb2be3926b1d9fbcfb96c112d5bc344bb27909b6fe79f2dd3fee764ef3187be2bb9a0fe5a245e2fc7ddb76687dfa7ace9686e9288b04e71b6b4d88c31ec5b10bb53bbcd983b3469a1a1fbd45027c6c4ba2438fd87c6d6a5b68233920d40728403bc0a27a9f9aa5403b590c05d5dbe9542ba51240720370b74d3f5c2a2b5b234f52509d2a8c80921a7b90d56d91a646913654840033c953f5ca92fc745ad51723334f4787e4e7b53d325ed3055d764aa91eeadde1b66f275b9bd3712729a164f249faef559e51d32be9254a7aa9a597a68c3f4ffef1c7079f4bbef89ff581b55e59dae9556a77d29d2dd2869e002ffdd923958c2e9f358203ddecea09d4f6709f33ede893fa29b1874d135019325a1a810ccfa33fa03df518b125d4dfc8aee0424f02a7d32ba39c49f5d429e56c8db435a650e2cb0c6d8d2994f8e2e9b348aaa72a67914c77b1aa3cc64863f5e465cf33e8d9f4ea2a41ac48f5a58915a94a32569564e99192cefacccabdf4ca5d9288551492e99dd399047e4a2820750928b52f51bd7a7bd565d263493eee272fb359a2cf4bd5f312f5bc341f4bee187d1e663300658c121573c27a7d107a6906b75e4f58afcef60150fe0d206b5e6230a5b7f49627a01ce18b1c3eb8e1c58a03aab77d00140cb4e680da39f811448c042d60e1bcddc0276f54afb7732caf36d1a1d7cbba4ab15a4f3e56875766ddba4ab67a89562f55d54b54b57e9e7cb4a2ffb838b251ee92ea6fc9f4ecb96c36ab58c65f9ff4c0654e59a0a7a03a591f1801256af0f1658d2994f8b2c614544ecef66079b8d59d1adfc4df2ea9cd72cbf2677bac8cbdc414b4ae1f379fbce554bd32ea59e55974789528e5a58af252a4bcc414b4ae9f276fa1b56eb1d291da9f558fd579dac27e38c95becb3ea9567fc4b66167d62cf797a4e2815c728d08a7a55512f38a0f292aab172677b2a9bcfac53fbf5c95b77d79565cf33cb1b2b527da9951e56a47a6e429cbb7f1e67a7ffb89f745287d6473ac5b291bfd684586f4d88e5f41a61d69551871e33eacf5b4f468b506faf57741eb76462251fe9cf324c43012f706001cddb06cef8e6ad0368e8e0d989d0831c40b8000e2b824e74d4f1841b619ce005114df0c24940a9019632a400430935a6a0828b189ebdb1cf212287c5f3408b144d1421471b5f9c501085873a84acd042032e809edb5017579e31275c009cf75cb71d3eb86de8082a9f918e90f2d924fdf09b5292e9ed9534d089f22b659e7e20729a2e659e288afabcaa7689809a5e02ca0f40c57e6fc0d0cddc8db949bf93fea0a9a459ca3c4d6f6d27687ae65cca465d990e32465ee2a4ff61d36ba69226749a6f09da5ace7bae61e8d684df49bfd7ad357fcd1e6120a026f40d732af8e2b0527882f004f09b2861e83452dcb018671e5e250858af5e83ad94caf85e51a0bc8bde4ead1540fa647ff56a27ea2ecaa1f53980b31685519e31c6e94e6633bdb244ac418161d076532dac943651c2d269bd9a8fccafb2d6cb6258085e0d1666bd067741cafd69645a9887728272ea28d5af8b62dd0522ee4f2373a2d4c953cd487f805aaf2caeccab579619640609726302125b76f7b4b4d62b4bd5f206b4d940af2c52fa91f79553d95c614ba0bb875d1fe793c3437654b6a72805afcae915854a6fad00b7732a1b327ea6549ea8192b4b832b53c6bd27e995853ee91945757705ad89cdd63cb911a108da9c4e969725fabb9ad0781d81df4a981b10d84e7dd72025cb0f915fe2c4fd74d34339514e7fb8cc535714ca7fc8f243e49db80244efcbf1672970d6a7e6656b0dad89e1d02f190848be275f16f91c46050723e7143e2c83f2ed197c471cfa92b6d3be093982b61b18238c2ea343189dca0a9fa4a1f290f667eb1bb7e1f48c9a0e2f7e4a5538dbb3a2bbd755d05681db7c1085cc43ef9cee0b6b8be44983ef7acad68670f6e41114fcf3e9f3def9204a98b646a0044022d08c95748a925489b1a0ea708e36399c8b48bb24f684c29ab8900c1cd3c66d7f0ec7b4e93d306e06c7bc7326148ee99cd211e67ec75890143f4de9b35ba74f2d6b5e8ad0ffe1327186d691508626d3769ebb07aff67c85e768e59b0b2988505ecf3ac6fc8c8f4ba5edec78603e2cbb8d719b7a5a175754f1ad8b2b843e9b4f7dfcac7e73c1cd98a8094139512f311151187a3118eb599454a64aa85b5a8928652d6d1abae2e50df06de88a114f5dad84c4b436bde7a45c6993b33e4ca0c3b7247ae5f209662b28be48a8aec8437848ceece9ef4b9bba78e1e72b5dbc705013d2fe9861c8f8e1129f97923625893c846f1c9783be3d63def24dc3e321ec108b3c849d8915cc2cc4425644cfd80ae6e23ccd448d61e03132279fb1c322ecd3795cc58183a8b3154e8762dca5b98b1556389d776a67a1188fe8f28d03136c0821087528e1061aa74642c40f8a28820fa488e284533b13b5b3962d5cf40dc46de7a0b6238588a8759a13d2e0319d43471a523aca9426c27c569fc3f01c0de44e594b61295cc5142b4d80e12a3da4309831ce5a989b3da7f3da18aa6bb030cb25ec502261874e1d4666ac8a794f407ffea2cf29a57c0f5b02b1f9dc734920e20c1b22a13259282e86aca0d156baf89a6f4356b648411bdbe0b6212684e85d029db1eafcf9982083efda6b421e96b15bc22cb8f7a13cc4da8f29e7e4c9524a296105e59450fac4247ce9ef9748aced34ccb5881d291d29f93c20a07f24b81fd049e79c73ce39e79c73123ae72084f0b5e7d19fc3779e9de0dd7b29e3053f0ca5a4ce291dc1b2e88d958eb80d94ef1e62c2ca4b7ff0ef92e88ddd5abf394b67eb63827f2ef95f13025b834b1e46f202864207e1334da902861518b4003e77311185df8b3a446e706280416d445aa47c56877af0440f311144d37484af0dc5a0e8bb877a00f45ddf7bcf5df6c803dae19d67586b3eec2c0d2e0efadef5196f3e73cd06e4b6b33f1d7e1e993f9f75f58f2e6ea6eaf00447e053a7b1b5739685f134b597d54ccf694010df4ddb84bc8a6556938fcdb555515866ff8de07b36d3f3ea643a9b5ec3ac7e5544e718639c3f3008fdc5185f8c4ec6379d1959700163bd58e39561bd780187480c3660c0c0872d42785edc0b23238482a408e20836720083262c218c319cf083239a8892c48d12747d4104a48648c25130ca0a282fc8504b2011d12eda171dd4c145cc1757741192c201845023066cf82045962a6ef0a6088017517c784580ef0dfa9e60bd1e924069d1031a0ba01c20c30c33096f016c7c939c6403c6bf2f4844140c6d4bda3d865ba4db9f3b81320d768ed3f807a5999940df7bd399a0bad28494211f0c01610744627085ca0e415e60c0860f860049c1084b08434a1a5d382f027803880719f840892f4ea02202265c300516357020e607cf8b2028d1822644c95287eba28159a28bda083c4df841095158e1a28332929459830c2ab008117406172088e3092bd882065b4c210a433f20c21b5f68a9c11969c0408946d4c5882ce8f8e18a28488c110605a4b0c11238b0011852b874a1a38b153f0c81043692d0628b1b2b8a30f40327ae18821a0d8c3096d8024b901a58b610c013a860820cca88028d2f5a94c0091ea610850f3f8001930511a8400298a02f430811c71245a0f8e20a31ca08e3092d0dcc162220810e20c06029c30915b5210331c6d47106143d786d14a145085a5c91a28d257698810b9ad00229ace0e14484105db060826807301c0f0ca0441551c0c11276400508b7031faa0114a82c4185139ea0841bb17551250baea2857f1baad2c457df86aa2401a938e7b0f66e1be75c7715ee9c13f87a0b9b96f3da39e798b9fd4187b0391e44f0af6b769f79360dde7bd573ce357c0f3ec7cdc5dd06e50a6e3b5ba1d252fecd00e57d14e132af1123344d9c78d538b116e37365406ef5c783a427a5431b292bfc9cfa3af223020c9586017bd8ad3c846d1ac2ee76f172024997793829fa2239200e5bc264dcec7d93c1ee4113847e65251ffec9c263dfda0adfda1037abd0ab1910b6e610420899d838e7dc18cffb31fbe3c78f1f3f7e0fbe36021b8d1b5f9705d7a393978509c6fc9bf2cda3164ce094387c7871b3f9368f54db741923b536f19db575780778838dff831062d5dd36c5cb09fc57df73cebd87351bb435185e3fda1dfb317737773712865e10c4b7a125b07cd6888694a0e3819e1f0c33b32988ab2189122554996b43e7b027e91c1d063a31e3bcd033744e4b23bbc96268ee4a5b202ebb75caa4c66cad8a9273f2688e66467384958ebc3b294d0bbe428db39063e3cd2f6f3e43e7cc8c8ad88b62aaaa86a06d479b62c414d3c88330ebd705e7e9a09b2000389d5e5dd25bb882309f57900b5eaf2000b85f4137be820b7e01c059b8692b4bc1cbb74b90df8ed08444b77200e00a13bf591b7bd9c071b38e7273d5600cc62a025a6b6d122544103e8dd2118921da1e2bc30c5e1af23840888c1e22e468341adda00130a31747a3d1c814c404e768341ad560031914458d463e1ae1bc80834597b687067381ddc1227032263a4afa4182d6034cc25094e5371e2d83a175070345b17cf657573fa564cf4829d4e1492323254561590e6f4d5aedbb36774a49e9652d660d21abbdac1bb70dbd80ccb7212eb63c3f9db26374ebd6a1edb1f36229313ab5e6a4d4b4284ab9f5677bec9c1435298aa2e674cb29cba2cfc1b62c66b5e05b4adba9a295cc14c5d78f631e59abe21f37ed45513c4d5114d543955cc83921caad10f7496d27637b556f81c6a97ecc9b6dd2737d045c53eb7594ce49a94f29e7acaa49c917b9d0566165a55b232da80da386d2191aa736b585169ca7a99edb53e3d4adabc7a6c9cb8aa156c52e2643c4c3230ff73aaf20cc29c644904a314ef826460cb562eea5a1719eb6df86b808e3291fced3232d48626efc36c405971efc74852a2feb36d6487fc9da313e58a05328b9bcec1c2a5cfc2bfcf0abe09447bd2e0e6353ad122c5bfd45b1f14b3a0b3545dc4b2ea1465e23afecc5788ed1c56088685c9cd1c2257d85abc6f6d0600cc60535f2b26fdcf96da8ca166f5dfc148dbc6654b03d3e2efe196bca95de420f5b84df8753158678177cd81f7e92d5822b9d6facc46c10f7ddfe70fbb0c20e78050b2d5579b59436c5284d48f40ae87218cf3a4a917e0673711a6d8a5eba7277780b33d10a146d0a45b0a74eab8bbada4be9d3f648165670ca57606185d211aab2d8dd0fe7773fa8e51656e594f4622a5f0aa2f2c36f3995d4a90bb5ba28ca9f6bce514c5a57fbd4d238d2828da29fcefac93357ce8bba774429ad75524a6beabcfa27753aa7539b49fb672e6729a555ad5a41586153d2d12531aeab758e99ceb9f6dc058aad8d9cb6e7ea68e43c2d2f3b44bd4c6d627b317fc1986f3fad6a6b45599665c93abaa453554a697ba4d3aada911c5dd2efd57e749db4aa55af5358efd5469715732f552f93edb998dfb429ba15c4957654ab48f9667b6eb5d777d069556bafcb2dc47079ead20523ae7c8a99da148bf45bce9eb965afd359d558d5aa344e394d0d4dadd5da5a2b465367ec7549a7a5b959fd51f5aa8e4623ab5a75e4948f6a6a463e1ab1936ccfa81a71f96c08b76ed2aa56e546e1a820447b5609f7ede8f71a427795e28f7b29a17beee7c9977ca8c7e87456e9dcbb7edc978ec0e81456ecfc95f5e9f18c6539504a7d76ce6b42daf6bc26846bbbe99c944e4a29a353e728d316e8004c7bbb69d2bb9a5d7f81a4032eeffc8723dd76298d0891183ac755b9ffc4f8acbe0d637a3a00faf79e3f334c5c05165ebedd6603ada4c4cd5e5fcef6b804dce6ed6aef98cfa0ec364cbb307e088b2bed887a08092d28684ce0149742830db6f7bcb5065b83104208636bad41302d4629a38cafb586b5385a6bade9b015cfcf3fe4e5a1436c3aac87ae50eed6167bb9828ebf9d037dcb43aff01e69df615a01c68a31bff354887db6e7a77f6299bdb214bccd469002ca1f569dba5a1352b1ccba735b2d610c077ef648ff9c0ef419758864e72956fd03a2b42bdbaac86c4d0857143674c5947f3e87aeb0f2d6ab8bbabd8eec7ce593ce678b4c7f259f379d6259f3d38c7a36dd517a496f6d6709939daf3010ec7ce515d6a4722773ce2684f2495d2ca14c8650b85c80bebd5d5b7c797609d0f6eddde0649a9d0c6551c54b0fbac818a48ca1755ab06243e7bc7f55ccf16a1b238df6868c90e4ef55293a3dfff1185a646eb34a5e95a22a45a76695b410728004d0a99d3b1a7419b7c7b7a124902893c40e7d834bfa3684849866e2da7c1b4242085cdc1ddf869010c2a9c2cb2bf3b6a0f035d71a6750fe5da1b3765f704aaaaf2763d5977bd8f4a5854622bb2d40a0624c182aba402a862882ca0ca61831440595218a08d343c594a1249030940335c498463910e3b9e639088e9b440823e7b39b299c78e7cfb929e678b7e58b7739a862ca9161fe7dc13c7be2fc6b6d87141cc7fc2283232cae8670d0c43ba79a1c68781912c38b2bd610a399046105708c79410f3c18e3d424309ae012c5cd4c26a71385b07262c7e9e685101a53804eec35389dc87e43e74c1210d0296b445214399f5e7cb03af216f881209820c4841bf4400575d88891041c5d30418b26f88004041a8c616332914cefc4afe2e17f480a1fdef9eb9c21ef261843e892e50a11b294b141106e10c50dca68d9e21b0708d714a4a8089ffdf8ec26080d80bebd7d5e1a6cf1ed24266a00856f3761e14196242e114efb8a003cbdeed6ddba47426daab43820140f3783542a2d532015a70301787a588b55dcfeacaab668693b34abb4bc90d361c2441760c6c851841c6d9cd82b2f4e670044b8824b1d5cb841e58a137ba5a5b282a888c679dd1d43dc4c3e476fd3390a5e8bf141263548fa743a12b3c121e226d976d8e1b840b8140cd3d1845cfff8e2cc3f54b8521ac22bc33ca93d25042b4a3ac8886f1f9572f5a6bd04fdb9ff9d49e2f2a87081b859b55f2e7ff33be7accdab1b695e1dca534f2edacdba0b4a851980877ce983ac5fa763b19b06d2de378975e884eb0ec5063c6ce184942ee0286207a7056021a5082184d18324e238b5f3c8602f1ed78ed34ea4dd4db4aba269f37cc618e85c4ed6884a3ed0a12072d239ee070f9d56d59c8f346f92e73c1d544a02695c00e2b653667a38f28cc8df8bc669a859517352675899152583294c51143543735d5ac971a7f70749f1538d53a7afaab3aab5fa024c9d551442b0aa625567556b85e5073eaeccc127e87556592b7ae8be3c742aabaa7223fc95a5a1f25291f796d7a7164a815e5da524345e39cec72ad76237b4894809cdc5522eee0285eb4e2748d11458141104279400c609ba0e4e47062e74acd1c411b62411c409fa0dd03d00bdb56695d0f8c59e947670a2f166b9b00111d06926a8c66d00034c1464288aa2b8564262d87aa04d306a79ca69d8b895499ba006a85b79cd75cbd0f1f7e2201a086c60a4e450b2483f8531148249bc289980f3196f76024fc9c867b0273bb0f042e874bda13146a8ef35e3a38bc6a92b8215321ec54533b8d2d60897f99e19ca4b93b9507352add3cc98c2538c80565a073a5fe91c2c9006f609faaca81ba06b000ec960cc4367d2394c546133b409d25c74c609185c96d2394e8619aa093cbfce76024ec98c5fec49e5729a71b64a687c843d5140165d844e3434d7c867aeebafb947394fcb0065e81c2aa772ea7aed74af769252a0917626aa9a8528b648e2cbbbf06d0b248abefb878393c70e7709fbf325943376f3b02514cfb7bcb585654c9c3ce51c1fc5b239fd5d4bd8a3c7c83c2443c1b3371e929da0099467be32eaa74b2cab4fb5cf1ec523ca1fc3509df2c8305ca77cb61deb94536d670710f7790f4131e507f06de889342c0d344efdcaa8dbb4e91ee1b257a738f0b3df4a436968ac26c23437887c7c3b93278abe5d044e682c4afba91be9a717080808a74dcf3353c972eaedeb55b22acdad3434b50d229a5b9fa0f2ed2fd45add087f75cef6307d2260c34abb0ef481f9f61798996f6e9e57af3e6be7d078adfea35e3759dcead98f77ec868691d3b87515b1905caf334e5bcfd438a9719ed6696b6869575243ebf0f0f61b3440f3ed4c74681d776adf6153630a8263c4b7bfd0869cd0f24d54535353532fcbc278da4483d1e05c41accb4443d99e19a7f19aab6439bfe53357c9f2f6752648c99ac178da4403657fb8cc1504a74dcc33c7ad472ca78df120e1b23f8cfa8f2b53c688f49b363d765610f7619969362194d78b6a4228e7ebf110cae91579c8741e5775654caadb21e6b6f63c2df8e13725e8efe17bd77b0cc04a1033e1b4a9dfbbab25a98147069be63114adbc7bad83d353cb4f1dd9886c8f18b6b0a84daeb58660fa8264b4698cd73a4d884658f4ce6d48633410e7cd92c2b8191c630c4846e7c039baa8752019370608378369c0343a27ccacfc79a39c3a94937c64b49d1dff1c5e794fcb5f708c0b5a04b1c51a57b2a0833a07215b16dc6cc89796b86d280e23de0555a7b0c9ea2ecbc6cd86546f273d2b88fa754066943a282ac297222e9f3534dc9343fcf8d13926933b8974eff387d9fc00c386d4a66e92a94d7daa7caaf60937aba7f6d4112e2c9fb5f0ed9736e72c235c7e6e24e9a4748f995f74eff18bfe73b6289d94324a292147ec8bd7b321f62264cf8aaec3dab379ae813c7ffd6c5e84ede6d5c10439a63be754ecd9a6e98ea29c369b9ab043efcb097f3bf439a1cf253312e91c88e47a8891dca7945246be74ce393d9b48964c3821f4d9a608638c31c410e1ec1be3102e4551d86d539c737e83bd0335e7743aa49a18d454b91e3dfa8fce991e2b2c52734aac62238efa03da6c78de747c7b954510ef1f7dee54b3f2ca29d3763571c22f297549e85c5ce2de78e811c9f5d179dc9cf78e604e36f2ac857723cf7abc1b79cb89eeae67fdeeba73d91c9651147cc19ddfda84401f8d79e1b3faf0059eb6e31cba073ed0769e431ab73c7a8906f3313d8dd36041da647dc6a1c760679bac5b666ea185e76cf27413fe7b35e1cf6a36dfbab2f716ab8ebd91bc25fdfcbdf7ea1c3727abf57a6d7acd590d87702b871526dd37d83b70733a3c0d04d6c4e0b2d754b959ab0c033f8f03a6c481bf8db13c78e33d212c6fcdb84342507cf61ea7a947a12f0fa3b59c853ec399f13e6394aa413ae7b911ffcadb84c3cfe8d9655f19ce3b9c1864507203131da24ca972658bd017323a270d6a5d51b2d0a6d2fa54de58867d745bd9d0a7ecbd4d8c58acb5215974f6691f147cf4209d432ba7984f15b9d09eed187a7b3edc1ed9d4a61fcf92dab8d9cdbb0f8299b00c872854f41a0da37f14f6c3410ad084b8e7f17a2143c13f6f382fb8d90db731540dd87b5a6061851f25157c907af0d861534333734796adb4a2a68cf0b96e410e6328dd7dc66beefc02ee98b1d08680fbbcb18d6ef2738b1c23738ceecae28dcf46ff6c111f1f63c4b21cbee3a0ed86ab65eb25720f06cba97c23cb56cc5ccd3927555d2cedc8a9ab677a751969499c8e0e73cecb0a41751d59d6c15955ca29ac125a24336534364213129de6e2222af1fabd7e3dbb360a977dca8ba6352a641a1532546835536bb34728cfd4db39149d5f532b29e79c92fa9c4ed5e9a5d1f49235bd642795544a1e3392ce28e954a15e472795cf00966bd6870fead20adb228dc494377d1b2262cb531e334ea9cf29294a5da56a598aa2241dcdcb3d5b234d0a2f25d64f47d4475e73f1573bdcc66d3a67079641f91d3b8c406185354e5f1d5dd4a9acd2353779cec97ce346cee3aa8bf21d3647e8089b3d3d3c5d73b10ddb1ec96e25665570b9a293721a6bcdd5bef23a6d8aeefce11ff91219b15c697b244fdb237b540a1f6438fb5d5606450632bec89163640680f5935a745e39e36c8d3480c84b33b567328aaa3f1b4853bd8e2c3be394cfd0cc8c463695a23b662a12ca2baf6c4f656bb5239f979176519ec4e9b0150e48f47849564a674b5df2a4d4c5456dfa69a638baf845d039d62315e7a4ed501e49d6c545e021d1ed159d9a3f44c773194d0895237cf4c850c848623ebac4a830194d8885c2cd1a191d9eb41dfe91b5ec4ca5459f711907749b0051d0761329cf9a16dfba7cd6b2f8968002489303d23b1c3de0807821e221268a6544702a2cc33199dc490ecb48dd85bbf010969784965dc68be70ce380300c0d050f692782836332b993485d6274c91ca6dd4d261c1c37c545d1749a94c5bd428a6f7753da49f73e37c5b9a00d699f972ba299da1b0a86a1bff0904ee2dbbf7c3b14ef6e406226b0a0ef31539a103adc941deeda5cd74f29096785d26f9ca230ca369626846d4f636942dacda8b773a04fdb03493f6484585f21723a8e0806d2be04194e80794783300c8ff8f6d6a2447f61181c113ca45d0a2f517cbb26bedb1901047859379c0bdc94be32e5b15811cb670e8c191a7644581d9dd3e0e45879b602f3a8d6b3f8cdb9ed5097d97bac470f58c1393956b001a128eac7539e3140520e2fd7865058463957d0b9aa20e50c678eab6685319c932586f39121c3c738ad6a99039c5b9b9028e004dd19dfa19ef5c3303d7330a35ebe679b701370339392229c315c107430e66db000c3c003294f794fa7636af75ca4851e5c191806e83d83c98ddef935f972cdd48650deda908cfdd1c04f61494a665cc69af83b97dfac1102fc4f2b53c7c30c7be7b3090ef12977d2cf80a730befa3d0948ef84f4f048137aee309c20455a17a01e5e094d148a6c906186249dd313315390295ce79969060eea5cfaab6816a9c9d1410bc75d47720ec87bef5128a594ecf0ea794eef9cd746b7435cc74fdad496adc1e1e040fe203b813e594c071bc7cd1a910918483b0fdf2cf8268389f8f647861b2568425a8726a4dd92b959234aa2a487d476a473f7822aef1ab674fe96ccb477983174c51bdf86ae28fa8cc8d0155ab87079e77d958cb8cdf6d030ee7353109cf6dab86d88cb97cf883c0e1c03911774f8d4596bcd1f66d3267e87dd98719bc7761809bb6ed3a4093d0efd4d70980fdd49fcfee89c3ffa30e021f6d3ca94f9871d39630a0f69df3b0da04c92ad49795bcbae52a5d494b259692d563a12a7f479498f33e339259c82cdf47a3ba79a2e298acaee55bab6d2585196fbac46d32565dbb8ed9b1662d0f1366d82b74dd025b4467cf8f8b0dc72cb9a981de2368fd44ef5c615236d51e51b4579ac3cc619e9bb4ab6522ace26e7aca6d3d9aa0a9356148fed1c8edb4efbaf8a9ebb9ef7981f33f37bd02fa95eee803421555ce98e9f8d11c68a9a12c6c7b246cfa4f44bb1a561e27c662387705b62de3a7c9ad6a3ef5153c25755b4aa2074861073d4940e4208bd3d5fd0e17b0f005696034ed55614fe9609d74dffa15b3e3a44b48498b2babaab25d3291aa653dea294755acae545399d9352ab5a95a297bc2ca7b3c76f848816280b194d095f5d25ebed8d48a71ea7f3c7d99050acc7be80cbcf221da19da8442d77744d2b15aa1109000000d3144000180c0c878422b1502c1ccbc2680f14800e87a2466c449a480325886114859031c81043000100200032333313074082aacb7a8120dd7fdc6eaa563fdcc6ce6b6845930912be5b163161b2112e8c72f8fb09f48055282d4479201e807cafc8f80dfdfa8ce691debda618239477f686da7a7147401a52f21697104e330b3d21c3627d2d384c0bd2f901c100bf7fe3cd84dff705f71d4cb218a845093143631e44460aadfac57fafde631761d93841c749766099f38ac4c224dec7ff61721d133eab7363bf5d5f9718db2c98a6c64ff52b78d5c8fd4749c7b9227d08062d9fe84937a8073dfc0b8dc76eac378b8b8eedac579cc61e94de86b59c3ce4646d60978ba4f1560df665af05499a12a5d27a75c5102fa83dfff31fca7b9b5fdee6cc036fcd3f15dfb258c787cf0331cbe42426cc29e684db8f3b646c5eda6096a39c0f3ed9bed3d40b9b7fde2343db117e6e1e294031743b0347ee0a45a13647253ed5030da83f33b812449a6b3aac94738810d400f4b0ffa579b02e7e7d11e6e1a43fc36fb74d67f8e3aae42390302a5caa57e173fbd5a7b7281e0770becc9dd1fdb0684038bbb114887c81bb31eaaa0de42f95b539373b273d04986d90b00aa378716d39949f41b51906dd9c565380850d3427b3587c7010e35b6898e4fcba760dab170089939d0cf5ad1e64a55fd690c45cbac00ba1fca74ad2aaeb95c2bafe3e9ad7af9a7d42d4cad059d8945a5d27c9829a419af880173e63c150ba6e102466a1be506a962e33da37226d7ea8cc4b8446f7c80ea02ff716040cb2ef2555f29abd42c182130cb69f0673f4bbc131aef3656bf3d63adb3552e9ee31b3a7586d521cc9eca1528004780520e1f4c71904a427a32af6c3a762d3858945ce07bbead1bc0dc4001328bce82f9306504a799735295cc7ff5f2efd2e1eedd0de6cb4070e8c9975fb5521063be8532b79f1a24016fb871b2e9a04067c93a2ea52e8db66feb99aaceef77766bef6cf5a03301e16cb6bd12eaff7093f188183dc6be372f092ce44123d187e7c28e7fbf5087f50d22d69dee14627d7d68bfa54ad522ee40bd7292afef63fd2ad6c278209e0dc43697bcfc5c8c4bfc5d1b00514c77290bd2d8c08d1f2a0779f898acc61e21d0f434feb6a6f884f3497df01ee3ce5f2ab09dfab0117057b49905045098bf9a66a780445c70b800de498c551b9f5f0255a36612780a562797f89cba05a185197741d2f0894d59bc01b0e20b8dd76c8c86e3b7205f37487bae80c921bf1fbd475f88835ff7b4910c068279ce80c02ed402bd6fcd1bd85c746df3c0f3a8f4c9943a0d57676010fc58b7ee04b6fc94c002393352314904368767b1c2f735bf1c32cd56176050ea2d9ad4ae860ec8ddc46656f874f98e9042726ef50dc0e997e08bbf94fb26b091209cc48fe52ded19a39995c8bd5ca0a1a20d585aa648975ba0aea32a9c8f118e1a60e5f6d8d9e1e308d3a6637bb2a92f0267fb715d9e9dc77f3aa68bb4cb2515343d1b701fce5ec13cd1e159fb4b13791f66e96fb1bd4e664e408e85b0c3b3f87ff001e4b7d795e83397a3a2b1eaef7a2291e0c7628e6c96d68fcf3199f2e954dbcf66a4b85b76c2e51b5876ae39b84f2f771310dfabcbfca13c8f7630bbb5294960e41598b3105d04c8bddf9beeb12cb5da0d0931ab2e95d7d5202c5701327e5ab6ace53cf02d2cf246f9a8c8a6edb3569028a778579b9fecb5abcd21931884f30c3e4c528ca3f3c29c2b4b4075cc8cd79c5684a8f95ee810c5e6cbf9b763832b121a5914ba034fd9a5e8c94fcdd404bc4075f110c7e505e420e286ec43f3049e0c30255b88d3160a6de220832a4aed034f4e87c8a6abcf3a540a7c837af1ea0f3caf42fee7445529332b41069ee9610de8c8c8328b560e165e64aa4159177bab41249240f70d7bf288a8f0304cfe364fca90134118b66e4959214365e7141042e192098f1f3c7f03b38f55fc04ddd8c27edbcda9ec69cabea71f6249d0e974fb5fa5e51ead00de30dc2b9200424f531ec23fd5990ea33469fda5dc5af3ff860bea3e1e19d5154513cdde7ae1abb675f1257e892cfdd21c4a1127bbcc97c12745bf6f4ed375499970cb884e932cca3c5b9a4cb322da6cf422b8d3f458950f6092b72a0fd79f51b5f4d6f71829a50b41011b5cd88b39d8281b7c1a8ead271ef7cb57650bca3cc48c6c703a032dbb240e39b8b8ead9de0f72efcee8f3096bae49468ef3436d95e38c613dc918b97c412da91826b9bd7d2e6474c1479f192803b41cb0c050565c087b691d2705847a48b83d5a82ac5890839f75d55fd41481279983729a49bc7213392e19d1f7029059e658380f25294d63d1b83a2d749cd6897f588910dca2ec242734387a0a964c18992e373a7cb9e3fd560427bb7b436181d357f701102da40dd7e9d4015dcfcf8df4dd72778fb0f0f338d57b492e9df5df0c1b3dad3090e70981aa949468add80b4da59e1dbdd2255bd8f12e73e2844329160c7d593e8f8c1e345083e5ce0893b89a4a3b98e524aa33d65c1ed38dee78256418c2ee877831923754c6e93a2a4734d2637a5c50db5ca8978c5ff68234bb891d4928ee1a4cad0ae3f7d0be599ddd70ba6d8b03b1a89787875a3eef7b7e6a665d04b32539e9f03f60939c9f7b2a0499393bd254d3624298f8734db03bcbcff74a8201b09cef153d041b95543daa6ebdd3fba6436c6cf92449e3646d25a09987c928ba51fa334fa09119a4428b152623e39c69706e1e1d686b470bb9599f0a18a81341b6a0d5e3760e3a0bac5163f2f4cd271b8db7a29912b16381aafadf456af3612c0188f368e12618c46b80330f42c360c0d4bd8d7aa736c6dc00b3b0a072074a2571f22324393fbabb93709b3a75b5c1b8990bb4c1bd2794dd03834fcdc44714ffd45713848c6f5568755bc7bcba928b1e749af320cd8542e2494ad65d84a7f1cde95b35f8796756fc2d10afccb58f94acf358f1904b5246f0e8233000741ccb31c908d8e48083ef890074d02fbf9d02b78a6304c33248e7375b955b780b9c4ab41b545ccf35486a345c9c98dc91e17ced23d081b1e756e34f29f0e917ab7d8633aaa6e841a0169f6d41a400f8e8fb8709c10b3bebfeccfe28c443732ac4800d10ecd8bc8bad2a0a109323c2fef5cc0d3881388f5c5d9b5d0aa771592974daf68f776126a6f39da9140fa86ea22261c0358c6461a860bc35becd4aa3bf21c556381e84c8d12ddaec92e9eb59c5ce7cc42db570fb7c3e5de74d1a0512ab26a2a3e81bc5e8ad4f905923c586ef633a1a2ba3ddc8fd0a84c5145c9c1b932beb5b486ba097e18ac923252f331c9444de7bf0965b955465ad7e984f70754d2b279d34a22718a01dcb7b45c6b95d567138fafcb26259d10d57217c69dc8586accef89dde209db011dc7eb635fc11283b682b897da03a04e89fb201b3d974c879d223a8562d7956cfc8aef9f179c7c45a672f3d42ff06d670f98be3efc5e7263fe563a78e36c2df79eae299d9ef4665e6f547a679db5cfcf1a9f2363142037eab413aa22d6ac597a7c504223a652922e6e53f5cc8b503fb71341cd7f6ff37a2d1df10ca5df9b9b03a531df6254154fae276f9989266ea175a6e77adb3b5ba9cac07b70e01396d43dbfec83845f1de43715b91e122949201e53929da0d63d8acd0c59d1d225977b9bc9e38e6617f41b3b818a2984b1ada1780bb8026daf30d31580df70aedb03fac8d8dc79957e6c2d0e65945792bac4608ca109553c70b85985e426feee50dc42484a235c4931b0795041e1c7ada3b22c0e6800f413524307093461cdc6c93389e1d50cc8023000a613a17fd04f455b6af7f9abaf7d47079c223e81698ced8ef39b1f8439c07e4c55269dbd337c3ce5faecc9090f20be89ab8936ef5a207d8910cdbfbf03510aea283de90e95f0c16301b3558384f01cdbb907654271758e0265cc7ec83fa043f2bb91787a7978e11deadde6aa29b76bd3c368e40ffb1ff579af9a1ed8f77b2ff00d14e3578c1bc81d52b699d281833b5035683ab0d2bd1b0a8d7f966f8bdde052d2b00d6e405fe80a4cb99c5d89a973441239c7cd4b4313c4630d7fb37d207b171b5093389f2d1ca95aebe4a93e4647d9d7442c2b99befcf172804a5bb8ead74d33a8e201881eac953022928514d8b5f7d73b312770f5249044fb75a79556c4df725d21e0504bf38ae248b48dc0f44949459bd88e0fe2a8284478a51653219756430ade7d515a2d12689018944e3156d952eba61f5e7d58936244cb16c9c774cb1b36908909836cd006d913371cf7640c68507686997d33664b311ae300adb98e4d86fb20e8f25c998cd66ac62ec907dab25508703a6d247138bd3cfad85eb96a9ae2525f9efe693b12d517ca28710c246a563fea66728d9de3de6f555a9a3cc01a406b43742267a7f17320cdbaaa0cc451060d7e62d6d2827b911abfafe5a3eabec77f6e804cf578ea7f3432dad214c92e22fb8c7329452e4a27ddf38937fe6f3154008f95970baaae1e5d40fc76bf781c7f258c83e36dc4e1c3185ae0a1353218b91795b4225d2989453469a9e509f5bb01a45cd530080179e3cc4a492a05b3657581f3b212baa24a0a1a07a32e2e378ba07823f5c3fadb20d263f653103920185163b1735a06956432e2f10861bd74b8fa1e3728c4f92bbef3e0ac7c2f106eb543ac14f5258d73629cf792eb093236de4ac63291a448e69ba28acf380069ea9805669976bee5cf57765310b4796b0ef2a8809c2680375b92f95778aa59b1bc5b6487a0da09fe2fe438bab59abd12d543b786a9f735c082d2c52364959a4023115ebb9b703becbae5897a23ee634499a2cccb6a8fe3e8c404cc480770b6ea8f992357876572ef24757408c0e3eb8aa0d4a552da5ed275933a414213b78871b258e89172f2aa34828854ddda0f2d353132a1105426d791cda75aad8bffc234fa66a9012430a842d2408da6f0dd0c0d05ae4536336508f8938d408914e7b428e8888a439ecf7aef9e2bef11a38cd6e711a95000240dce969cf1c69db09146788744022376b6ac0964a45f5c53e29c0c515babf4b5ec6f3110096da48d473d2b98cf515e1fc3646e5e6b959bb596d8ac62534ed980236c06cbc4be6dfd1aa1e96798a7fbe3db2a792c626d15196920a6bbee452adb62fe0e34b7ed7e18c19393e0c59fa1912833aa9daeea5bd8d4283e5058ba5d31a8e45cb9fd4f009f339d6f7f87f47c20b89b50e388436d623a4a599a7d408b3e05fcf5ed0d61a8955614cd37014b9e0ec2949e5b0a798688e443e6ae165864e7eea20bb46113672482b40b3c3a32d0650ec349d2088e66f33e8cdaa1c3ba5449e25d5247c69454dcd6dd511a51b94253862ce6b5a2714b03cb0d535a5d642a20a49524e41c52b0d760f9bd338318d6c3f27426ead41c6a8922d483d7e33f88d759e324fbf66b603cf8b6489a2a600135bd5ec4010c43df13a9f03f95888c4dae31706e580d436c0640eea5b2a0e6ef9406d11d44f27374b1c69b75766e3b9cc277cfe5a9181f77a1352efa3a7c0b8350ecb74ba22128180daf16f67e8c4781a88521199320a82a57cc57d1424ad05834adc4328460dc872a9905ad63117e8889a5009c1ba9ab9a156e235f5491de701c4262621b3f2f5d0ef4f75362d6d6001323b32e3b17a9ef38404f270b4bf28502e6b79445e23fc5ae9502e660c15b91087827b3aa9679c068c8824bf88e5058c31fa36f27b8206d34a4f3de4e4db751944a16a8e8ecfd5c5ea4c8307602c900ead44d60cf66481785296018c3db08ef7d529b16edd705df06a95e50cc037cc8ff7ebb58bf3231185978e52435306d693dcfeda84ea1d57a6f6245586ebd5ba97100bb412653db7a23c63e40068e42a695a6ce4cb9b371bae598325d373cf3b8cbcad66bf5afefb1ae5cac6c5991dbe2c91db6e6b45e402404fc21274067cb63976b81d0ab319e84ede2662f6e85c541924c3de255b7b323a61d0067465139135f844aea52624c3789e188d25dd5bd8cd14111073e80081e213e10c0025f8a8e448374dc660195fe9d23b250d3d8bf398aeccbb0910796f3d1e1c45c51b79bf395b5056c8279ef997469b11bf370b762b0be381df1a6d323e7370f99286337ee4c882a399fe02522cfa27463d58b975656986135dc6a80fe75e6e00e9c2724969cba1ec77bf41e7997f2f1b131e7d24b9e0bfa7e5b131946d4328539b73c19630609322ac17759401f680e8482c4119a4d8348b70641e9a10b48fab732a7c7fc211137ecba6d7c8bb62c9aceb610c5534494a5c0453082b6d9c805f35238249c663bd3201c0a2eef1734afb1a1acf18dc4ba1c7c34e5357f14c0e4d31b27adc6c64872f148cc3c0e31221f8fa0e14690d14818bc351b9163305f741392db7e3f90010e6d3ad68a6a5b39b76e8cd9802d19526b046b8cc9fc3633632c98b2688bae8cff80332f79c9b2fe21b08e3581f6ddfc47be9cd9eef05c9e011100d3341980f3b7cd981e62b49c6c8e01991f010dc1ffebc603a4c14edd42bdac06b834e56097b45707f6bc181f431f3356924d8aa2a89e4baf0f9e0deb367b0c762ed800025fc94652d0589ba2e589039f7ef87e09f9af14f723c296947a071fbea4619d5dc7b4e4de9c499580aa91f5480a38be975e0b8287e14abd662270f13ee5bac6e57ebc90198ab27cb82815739cb9d274f1da6fc3511a324cddb8ad3fe1bb693f82673c912bafd3ae6e15606065737b820e761516fbaf64f567634a2ac0401c2eec527c921b9d5e742e93028b1f8e13dc00f601955e6473d0fcca767041ae3ea73b1ea8a814ba9e36c871ee767ea93772eeda883fd6f7402bd51a2dea05118f09505b1c3c3fbabcbe6842f5bde811465a0e51e05c474d28f6a5ab8c0de8accfea766a1cbf0213a3926d2c33e0a03a9deaca9bd10426f1b449da402a3dbd0a3251fa031fc8d26c3e66ba5c2726a07c10a93707e238c60e1c5401dfc249248d5704c5c8c27762a2c97358a32e8ccca985bda6119d0cc1b8234844efd0163e729b5cc713f40fe31a262cdcd3fd9c64a9b65c8a5984edebabe30404d01b18ae5543a5777668fd8b83fa30747b6ecf4d808e65dac0beb821a0cc0b01e10ad9b1cdc119961e84f2eec87d73ec3c9d29088606311104673a90716b7335d99b625b892dad4353704665d5314e9f7c3876df32f6c00c7716a44d1988b66f8f53f9f1be620249e18f32134024d37b407b3c1f4c821fa5010650c54f942a82cfe812812d714107a9aaad46099b9f48b106a892ed6a0ce8c5288bd0b007919d233b6a26fb680048c133146c63c15cc678bd2c7f5146ffe899797169e465ac22e01417c2639ff7efe7b5e348151b3ec820e258cbaadece9d9b7d8f6cef340c7fef3605457762fe949d6a66c80c3b628a30d11281eac796878574599022e09bbed2f1cfb1d1abad6288ec60f48fbcde96484136347959847771b42555c88258e0125e01b9a5f0e7212e6953fe3a35bff51388064adfa8bbd755271eb307fa1bbe0155017098d62c7fc7c827225380fa516c52913cf123bd9cd3121ae0aaaff49be8883548864a3f0b6b9338b37b1ef83c022434ff70da935eb7b6aa51beb8d264ca39a63b92b5f9fa493d0104d3c60af350a11e8c8750488f7af29f3b5df760276cba435d3841d35e0a45ad656882d1e7584ca73bfe7f636db71961a1272c21d6987ab3487187da4074977114e550b002a9c747ad28acb97af4cf1d2db8695ee1c1ff0a1331173cc54a4e9e9f4e4aac9e86f29dfd25aabcbd2948e5f6c0ae4aaf4592c888eaadd3124b074acf554ebd2d0368293f3999034c5ef88e7cb45fd3c9a9e6981bd5207f21ad853fe4df20fcd0c884e3c0cb695d1f3cde1231a460492da630d72d679c34b8173fc34378b6f99f47f7d36ea8d361d39d80e28097c1a66d8e11e3cfeccaad87edf846cb9118a3b714f6460d2cccb5b8602c64e0860c7455d36faf18d91fb45d626a141a443b478d616f091e041448f022553f1dd43510edacc5264411179f2b9a01e861476017a238545361bf2a8ae38c00bed58a0fd42f057b36a3de53ec01605ef8e3a20839545b972617ec21910f9bd516d81f51ea347548e6af5d5f24a2b7002a2f3f56ce09afd72b300294bc7b00728901d86f2c836408b07cc829f62713887cac5bee063794e917a6e408acc7fb5b1f912024670d3af481ba04ada7b4f9231d7b6ec2805c510d7ad86ea3703059a7e5232268eb9c85aa166ebaf56af95dbd253cbd056040910d820cd84d262b38994d59eecca1e8dbc3784e7c114f0180cd3c76bb16416d892c73843118e41e5cf0113c93bdec1fbdfc35c5c8b88ae30c41a7fc7b774529a7af7fc1b6c893fc07b5162928055504a083668dcf8ca7975fc6ab4f6235f4e6a16ecb34ab92f4ac59bc16d491bdd95600091a81bacad6a7659912638515deedd683d001f5c0710dfd6070e48b82f08daacd3ed2763c9a0c6f38c99cfc975938e4e240d3f5b6e1e1a8c726475eeadb9b9f2a08820961dade9277fac627bf1da80c359c04e2b1c92367c8597b6f07d2ae9d974f13d71d130da2468c78a6978cabeb1dfa11697e941ea98e3a5b61ea9c715bfbd4d88db5edc211582db9e7df3f1f5d057dcdcc1b0ca3d893a6bc649fc587803d3525c168ab6664dbdae5ef9e069e65b0fa7d07e5ffba7ce880e733041bb3f7f77b8ae4086c7751883295ec5ce9c13ff71d330b1c152596fcb16cd1862a005680a109050084bd0b58efde83b4f5edeedf25a04b323e820a9228c316554649c13cf282e35076325543e0df19a5ce126e1a5546a1f626c2ebf01c71fece05a560d748b673ae77b310c6e62bd8466108863fab0c40176c4c5dbfa9673baa8028529691ddd131bca26cbdb03b420888a59cf75c23948ea4673b3184149a968121a26a186a544684d517190eb3ea37d06379250deff5d403003a6a243eeecae97f1557ccf81aa6934c18e27befe40bfcdd9ad9534ac5ea054c01a53fe63fb3b37cca90d063a35e942c03546ab93c0d2d2ce3937536a342b533614488ae688fe4ae963be7037251f4a435fa5a3525affb08dd8d3f9b09fe403df2ba8a8bb769bbfba9e0232d1db585d2c520c401af146d2e9767869751719708ed5bbfe2141fb5c0ba555310f38ad42e2e1b95b28972cc93dab0600d51d8f4d25e19b1b3b03313706bd7f4dbf1875f58b85d3aa09c6693e8abcd3cd4be3c0ac622fa5d41ce4064e42d6e292b4cae087ea1f4d4bf76ab468ecc8ac7b2b43df3c322caa736fcbefe39aeea1e07eed970b800026a1745593b517a63a2c9b5becdf5c2837bb8e4d62d9c3e58299fa50c86ea7f70d5dffc5ba9c339c3192e5fbe2eb8a2eb2fb100d9584f3a1512feae9dfbbb77df6d859ae13ae4778389797382807309a5a800de933462a5f9ae8185461c95c1588043acef270cb407beb10097e3219ec09b907c3b4c8af906f0022e532b9d4392bdb7f0d87cce18a93ff05aec8f38ed7847323c2ca62733ca41336f98fc0ac00348f311c622f72df0a906452458ddc87104ebd80436ba08f6cbeb1fda267e9c8d53fe4baedd3a4fe5c27379a535f86766e81b5e16137d4d848dec1bf8d89fc38051bf7b50006940833a3dfb36f685df250e224d5c19860f9b04e285b59d2ddf3dbc48354d27cd9b26fca5bc02065a1c40f5a1fe0c64a3fa46474b8070d945334d18391fb5cde525003489258a2512efcaf953dbf8989d2d78b9a145c2a4571aca12711bd7fc9b0aa665be00c19c7350f73fcf777399b063e56efdeaf33680e253bb86e4f90ee31909ceee96fcfb7ae85b91d462f54e5ff1c0256b15f11808ac2e18f94964c9495d48171da85e54fb59c1c3f8a9b7f22bb1adfbf16b4aa3cf438cd7eb83b8a99f1ea0167322b42517282fd1f8d1cde22d82395004e3c180af57497bc61adefe3b0683e195ca90aab51540d5c51ddf37404d03afc7023a76107408ae5ae9b763f87b6b879750141ee84cf0d6531988ac1d4cf7738ad5f818b135afd62d10bab5f28dcc617554507cd415c8a9e8a345e94daf63a73fc8901e31dfbc10758408de356e0965c93fcd50496672d28d43c27fae0d8a313ec65c954b27905c884b696a376725a58809a947cc71eb25516e00a587ce28103b1d933eb6cff10fdb8ba8abe2fd353bbfdcee5f314b310e08c4532a809631052dfd4999cc504ebc39e1939ddc7e3f1b81c4605f8ed3b0b4f30d2b9aedb94917b6cd1e9b53e753a054cc13bea366a14b340133fad98420c95c80b9cc0e43aa8251fe7cb2b296f00dbf81971da5a24f475e17fae3a2ed430d08d604ce0ccd76c0fea86f6712fd8e0fedb5f87e5cc893c7d80d50e861f345e3c29b1fa07310f5e06b427e147352235ae64de31850c549ca32bcd9b6f278905947f1bf676ecce3a908f848eec175ca4c2138e52a5098f456cdf94e8d51952a791726e0ea12a01b0777fc144715f1d73ef53051b370447bc434ead8e14f3203a441de389a0d8809a8f6050730607bf7492ea032af19a69d3cff88a17697a1a264c123112f119c9d0ec3e1c2015e184fccc2c81d44d16f8c8f930726a51f2af2c28900011f094ff4a940e99a5f479d55e064d52809c8b89107e567568669f73574835335b631a4aebc9f02c58192f4d849787c56e8150f162d4e9ea093766e32887ce38cb1cbb861b742c05825cfde581a77fac1759438e13c94002972933ab3d17ad81fde05289301a8a4311ca267f5e2029231a68075fd7a728c67181fedbc8a726fc170c323a3e3dcb38ba7978d35d044e3da9456066f3a3bdd9adbd6c961d2b24494dd2921720aa582699522a7ceb574a27461779b11dce1cce0bef1dad20c7089829da4faab779dd3f340b820e60232427aefe44e232c3739a9f4c409258386bf1b2b5db654bc60b11e0722b75f56da1b035cacf6cf57624aec4ba9516b51476a57d3f036072e0d0eef1b289be99d571f407f8c9ee7a3c738d30e64c5004e790dda4fae8c44c20ddcb92b847565394ac1c8a35afcb74cef909cc535fec91d998d87b48aec4409166460ce26ab4f5aabf11d53ecc57d29afc11150490a987f56a9e4cdd446af0dd8cd696f148036d06c706e2d6dcdc0ef6d8d7b1e457f21a5ccf4476dc6afbabefe5bc0e75b8ad903a4f455e99135e11a9a866e4b577d552829ab82157d10b8ac3aac9d54b514b8c64cbf3c133eb6c95c0dae37d1908514967e91e41cd635628f3d3c92a57a4e7a35e4d43e0b4737aa902960edbc78499007d565cadb6d21e9c7874fa7c8a618209d05d9132cfa1bce8e9b8e11f007438b5be0608446e60ad408c8e0c042c35d3fb54e217f4a6badbaaa90e2ae045eb7590bb71dbf6c45b378ae304180e6449fce8b7e2f2d0321afdc0b39b4098a8a8089fd7d8971a24e776d701261d7d09369980c05ca89db7589c3841aad36586fcef4c45d8e12c5c60b7613b9ff1c7dd8c675d0efff43f288f25c06542c28cc422410d7bb73ebf08e8d8437190d93c4c7ed7f3337ef0f0677fae209f9238b39938f508478904a0be7cee074b5a2d97cfbc2cdc3ba4da028ec7d39e04811559cc20f0f0813aa656ba204aab1e3d0c49aeec0b404bb961aa9cdb53d69fb836e8ce698d14e375b8166689ba53efce422116d7bdc2e31c81a679640ab4bcc9732a5494d53bc446e94ba7c138112db7a9850622e6360c481ca700378a632f552c046057464588a17d8e20ab03ce4a34b7e0bc27f48bdba146fc59e4783d9706d8a6c803a3b708bcc5ab43a0028c502a6df41e2ab25d152bd7662ce4698eecfa55833e93afeb92fdaaa943a18b8d1dc1ceee0dd11d773392170885386f6cc5c0448c40ae681fa9ec435c3dc3566bba50ee24e16153f21d085e37631510787833f9a8e2144d9bf12e439b7d1fcd5668e3b879f2f00ffde9819c86d644300d1c85ece0ece5ebcefc95e9bc8937b079a15d0090145fb0012ee77a2e565f42407de3c3a369e0e31199d588c8d84988eb2bef2387fe98a6c0ebc855398ab97f7d5c0828a88c3ceb346e8d2027dca923e0902e840ab48f9096d4d319e2a83b65f933328f13cc37fe8426f0c3db067a3f9ab71d7b868a6ddddf538aa719aa11a08762336e1eacc4c33ed0f4307a69102cf7a98a8941f115b7cee4e3d0bc1d73441de15304061c11fb762e8da3ac88a403b7f99bcfb930331b3bf0c399e5698cae09675ddd985ae8cc5f94fc0962384681ba26f5edf805fc10586925b1ed74603d39a80b14cc51a3658a16d685ccd0d575dd2e8b7a748715c5c46497307a7fdb72c01078a4719a05e35e72b813b4b6736f8612f058edb652ec8f263df759855f79729c36ddd221d659900e039523701e4263c701eda3f84612e374bda63e8c61b4c090b88fedfc4145ddb357662207660f12ce273dc706ad6f8021fcac3d8bee59c325a1f66f322defce2815e1bf587f1eb745733da2ccbae43b653dc4163512a37bc9ef8c57eadc83a93fbdaded76ae9e38077445de4a55257ddd4746d5086a541ae7d9940990568d735dddc63b4eaf4f71f148f1b378ee98059178222e1d6e87278f0e1b9e59466ca3b20d61b304adf866efc4ad7ba6bd41963df5aa4fd8ae724dba3d7a8f12ef9c8f8edf1c6b158f0a73845a93bccda230026eafb759acdd124f6cf45a209daf91b4ef25a5b824bbd56b986742f9781b084ac20b39238d09ab3d03f605c5460efc9f0ec7a8e6f05f1a70c3f51711b7143e3bfb9690e7db040ead90cdb9840827c47ce8194247732d287a10d6bf1bb487e6f3aa5ffa1ab7bca112c94f707ae7c410788c93d9d67fd5b0e88d10c40d7377336b0b04b15b0d469b1c943129b241074e160d32d11f591f08a0936afd7473769c6b23896002b96a3bf67c057d359a18b28cd8b5f69c5fd8b4f0650701a6dc1022fa7a055902661c8e93ca75b433e0e7a95e6f28e899d5543f6d845d128fdc9a4fc230819295eeb27a77613aa5d7784d31d06d1f3382a794324011593e37e74c84493d52b308863742d6bf78a8409b0b56456af7cda1f66b938b9b17feb541e8842f59b51df8a4a06e9af1453252dd34d08497c3d6129366671f170a46225040bd6ff2af34c0ad2f6b6cce9ff031c45872ba48e75a1d834879492663f2aff6b9118904e32b95e83feeced6fc6e5dc43feccebfdb1afec60b6c6d32b3570a2e3b8137bc5a30ac8ea50593233d43e5a6fd5b06419fe0234b8513f7c8c900e79f12a1d3aeeeca702076622ab54feb0b4afb88a63ca804c6509d65efef222f72df4a551612071673b8b54666b61c8653ce9639e8ac888fa87e21358cad05355dec360961f5287c3598601a97f15a431fcf00a6ae2bb06be53d5a457995050e881a86c678bd09c51dcba9b248fc049fa38020b529f04a1aac2cacac66624ef60f789f02279aba226d4821458adc412468da05bfdd861e707df9d548dab07b24a6ef1b1294d3dc496636fd33c1f23645493df42f5247f44752b1e5280d9833b9410bd0831ec09034972741894e5be5b88af22cc3a49d40a4509f1facd5b8a5af5fc4b8e13b1cd6fd3703c4f03bc2058e45fe20c24a62383e9b6e7ddabfccdd369cff07ecbfdf3e9022d71b792c1f4a4adbaeeeea5102741a2a240b11d6e06b675d3bfc2a1191314dba9778e7111c6cb20232cd60ebbac4707643d71713820c89bf2dba3f69ab518f947d27e7c0d544534f798c52d55d8ed061e42fe0afb71b4142edbd04921f400114b89eda11d950f23c420dd2e70991d8c310214e80871f6ae471ccd4bc7ee6b5321ec548b6c9203d038824fcc94f9417c7ceacc705c05e245f002864e32d1b1daa658b8e1604994cdf1144fae8939c84d4881733e6988f268bcb108b97b3ca1a3b4638c968f2f25fde325605e1f190559fa2e6c55eb3d10519e370ec0a220cb0fb48c856e2971f5c40031aedb606783065a40015fea6b121b1c19dc3a239ef5120a9ed0d9f2cd785345aa5ed9c5915305df38754499190dba97b32824489fa9f86049a780cad454313937bf2d70e504ed33b9ec036d0f39f9365084597c39122150e249276f51113b027132e51be6f50ec37192e994002fca78447e46bd4ef1ffe212668b56d16b7508f5b6909c45e0961c8ef99144ab97a7ad802a422058295b8d996aa71b696eea74de797bbd9bacf7aab446e4742f4767a9875b1ddb1293d5ee017b1b2654c026622ced449968f3f94e3929a7024ee2ce9bef073810c62f455c30ec0d009518f00d4c6f81412c4f98f6c9b419fcfc11d4eb1a0785010a0c641e941e7142d261c9e84c07d4144f5ad79145b22aa33354d2344c440618a86badabf1064d8a8a78f616ae6b5ef27de0666feaec23030e03e0d888998ab44f4d0890cecce96200f951c05438c9f35ab3105c09f28c7eb43c53dcb38c6ddc3dd1371831381ea7cbc3ff696dcc54d00329e9a9ed2c815c48cfeb97716a48ad7c4dc166902eb667fd82ce90ae39c6a44060ae29142ff3fc0bc29cac277d8032ac9e7f057a481712d8e6a68f5088e7a8301333f4e3e4b1d7cdf09627f973ed4b66521e7c27e25d09c359e29030eae04817d2205ceeb63b190c03d5914fc6d258cf30134b9ba68c91360230b667c79bf61f534a8379cd3ec7f758c02010c387e296e96d2b3c9a397a5333045c06f7e05c90f72c0b14be7819546ac008ffad707ed3e98f963d711ebc6f84febe5ab034fa9c4ab1d955d37959af9faace28f099fdf694390f902f37684819967e46dd431df27b57ebc3923dff9ca87d9e53fd91c8606dc3692aa067f34573c14af4150b3b607a8ce71728de900b7fff0752980fdef25a6d5abca9e56cfe27ef316ea92f4249dfe58e46d1830529cfe30133276b7e7e187c62ac02dc4bd263154b7538b1987c0b45a2210ecc17c5e75b31f4dd347dba0551a231d45494aa820afa7e18ccd2a65fda1c1396606888543c3cae0c333e5d215c6e457211ced96338b8351bea6debc85cd6368cdf50c73d3a3dee187139470bb42a9c88bdfdea4aba1b6a364c6b68c2968d816fbea3dcc901930d3ad7447b523a91fb78fccbe7cddb11346c370c56870e30b980f88bf4547a81acf105589d375c96dd6775bca610cfc291864098c98a26493b7296bca0fed1c191c93b93dc1c2cedf581f86c711d30890de0b418d45756266b8799d22115b0c2675c331e32ca1f4f0efb3a3c80ef8cd37d11f5c51aec9f44e4a4e2a769205391c04eddb73580e237cccf298dddd5445ff3b46143b32e115b89c5d2659bd68203fff2b24261d0ffcfa5dc981b97c38351ecba0ac343e661fac5719010ef63223a40c1666995af931053a92813124ae110e47044278d692824559987a5c9d09f3555a51ebef99350a6f0705b3838947eb0a58f7e46b000c3ab13811a0c21ee65df20b03932b1277644c781c4e99fce1af6eb6a6541af49a87c238664c299b55b2a48223678ae6cb488edae2d6729535dd5e35b8bd4517c6d3850bac380038436b89f3ee6d21169354d98eaa0aefd3de48d1d1b2b62fcc0aef852aa3cb6e6b58ae8bd113450f301c3ec6de14c2e9c45fc7bc8b20351d6cb88554f97a3c093cfbf46411f3d3089341e7fabbdc5453b4cae3228d590a2d628da222a40034cc5c79c2e24962fa6e9e66d3ec3095cd1c802a61126ec762f40b5439fb291e7da2839e866a7e898d4a5f803ef6b9ad983d2deb95cfa138fb6f18431187187a5064816e06a43ec60f2a37cbb23401a714efcc29d282e34607a0cf4d23f229d2d981373f65796cea106db3954b1471237a3671fb41e9fba1808c3d0f3ad0a8d41d22c5e36c441e35680ae5369d91d000e5429effdb2e8bbfbb479b3b87b4a7ee3030fd0cde3f8e058606a811d473f8469c92318e9acbbfea9a9e9ac6197847ef132290514a3d1512cc9d4cbfc683cb3c2532375d888878e92ba2a784ee325f641cec4746552faa619c44de9ad996bf2253ed42e890e9dadddf91ab2ab6635530b5f36eaa11b4028f480b8640295ca3b0841c1370b19174c16e927f13fcd16b1888882801df37f241bde00e5d8987661c6eca6224b154d76a48aac30e0824c7a22af06ae21685b664b17e8ae60bb3f989791016c17f63a62d9a5fe09ec2f2a509ea9c81b4e0d31db84710e5d5509c35351c212b0da32efc3cd71b6a739c3725fa94b7008ac592a53828968f3bd13accef0028b96958f7fd978f05b9687322e2116309eb071f09ce2eded77e3c0182319cf56200b18c1c9b7771dc8875c53dc55e73efe1c485f1106af5a124d0dde4277e1bb5849e42a43925f8220590b3ecee9c10623f6f64759b98f8170180be9d52a8e0e0acb5f35309552c358790d8a8f820192f824b3be1f49faac00cab83a1949d30e52a773fff3ffb32f0e14d527682c28dee9cc113b9f1fbc9d5e48a0c7437873a970e58487c04170f9dfae7069240854a11c6b2f3310fac0395da22597340ea6c68b5344a8c356bd16f6b84428611997003fe712c76ec193c84839e86efd712f68408a343d1984ae6aaae3a189255a473b734f0a792f76e877aa343968dd6fbb028bb735343f12eb1eac0ef7405753d00155a5419657dc6124663727f044233c7a56eb4cfcc0c6436662a485dcb8f4335a4647f98d6697858de9239e822e8fa107283bb24d560c9e8bdc0ee85a9a47c57f2056e63150fd8d32f72806968b83e0d257ed9d596734538bdad94138d18d1e130d9197b138ad2da273f9fd60cd7139ac6e8876773283ee56f578d3ca967c16f51f3be785e007b0b6d9c85c2729633c25d8ecf27d1998c0dcc5c27911de87d4ad89850e78d339c4caa14dad6f77af21a278b013f165af7ba5b17135ccb58ed88bb4e4b3d47464671aef78e9f0e84faf1a9aba99ecee2e5ff18d25af1a14e7b11ac224be681795452afeb308962e0246e376c12803bc6e74d5317eb0d4df43277573bb7cd2b58d01e07fa96ddce6f4e87b33c53807999d50126d92416f7f5b1d8d91f0db8036e0ec5837ae839112f26779473750a8743f5ed5556c40284fabc626d7ff983754b030041e14ae2fae5022e4b1b36d5e3e10c7bd60926ddbcf929f55496be3bc5e0fabfd8fb15e85e44d27ce370320f2e8bf963bd33e3c88fc268af4899b4fb23b743ac5860420e0420d4837e1964ea618b71ec232e08c8026b7fd2e0b576d01c13a2710fade819dcef2775e02230d3a5e60f2c20a3af383bcefebad80b71fc8b408033b9a53220646f864e2d7e6e73b1bba508aaa8284721ffa45892dd0dcf76c76a5bf686bcbf190f0e0f28ac98da78ae9b2f315c279b0f52ffcad7e2d5eedd63198c34a31a80e38085bdf22f3da5f11e6460479c1c5f3933b513ff0d8725a923f733aee56885825a5b275a929ccf620e1194fafd75b400c9f7a4ebf86eced99c6b6c2439bc4627388fe62dcd866a3f38438219cc225d6110f98b0a197da2e4ee2235234249a79024ed925cac0c05c8ea70d0758549aff11ba541545a37c603927cf586743c37eca557d6e9b11f2b33d518eee83dc96c7b84bf81c5b14cbd0dd60c9ab1a7e5ea86a8e7d51c9f45e7d8026a8ec818e8d8e6a577c71904577c579b74fefe4cded656fa4fab8a83dfc931c8bf903cea5809c3b6127192a84ea6d50ef4703171dffee1c3c05cdac2c58a3f39b7640427d83dec3838f312f92811f70b161883a299ea8936f635340f31326fac531ac656ee84d0059ef3f5d3d409deae049cf141dd2d3c5aba509748aed5c58f27e0bf86c6d4e9c38fd07eadfb845ea6cf72421fb8782caea8f21ef288b8c3fe5da7cd3fe2fdcaf27bdcb737c69f0dcff858b9dffbf7e267b81294ef9458349335c71f73ad29c485dd1cd5d87bacba4c20fe47a8a0da27c76cb37ea6e847547e9b114e3953a4cc94b9889614d545ef20a2d4f1844f00d02c412b8c391656d331b7032dfa38902c6761b52abf10dcfd4af18410e901eae365bb987c2911191378165dd0c8c9797c85060e9b8516821d410937084081fb79d1acbdee3ecf2275c96aa3755b2915a4c74610158d6dd6de01de990a81046c602463c89b88f0ff2edf3437d01d38d600e4cc64e4396050c5b390b72996f65aad1deef10ac982960b4fb8ad386f7d42ae65a99e50d5e0e3cdffe72efc35922a5b639b1db2d4d563499cecddf954ba50b284edbe6134bcdf2acd407e29e62fcbe5b72fd3d254610e35ff7e6a61d5361174d17b734ccc5b140caa444cc4d523cb5d1ad1030df4e83431b7d2320f3a42e3220dfe47536654302daa596414a7c5d0e72bf4d99015cfb0ca40a7a188baeefef72541e7a1ea605a609cd5a79fd8605ae2b337b5d3edce0466c0247937600cee814ce56e80bff8c1617b7130ceba814df31afaf1aa74680d761cc83e00fc1da2b25014caf745148371696b9a31435d09340a693baa2285352c32573ac7ef6c9f2913b103ed2cfbab8520d7da9f81fbbddbafd6f1864499eacec44b89c772c7f6d6272771c7eb4f6911900bac8be2a2a537e10542a09a19f50e7f76d9fee662007b8c0368072714c0bb70950c3eae7152ea4e4dc28a728398a9eb811d2b6e14dcc2bf420ee83ccd6f00900f5800024afd2a3e2aa3d4237752b774194496838c128a70b21d50b64dd45d97a46b276f592db6ecc9fcb6be83756d5604f78efb84b6d44e84f754315580e14ee2e128376849aad11e1f872b75bbab4a3784085a089377b2581703ae95ed7e13450d773bab554872dacf7a553ede608fe5c1e37f7bdec7a2db8ee063da7a0e32f3e80dac48801f520501c5cafcf72f3bd65c448eda420b567196f07f35dba1e47fb977adcc0fe4645e997a6ef68fe259ebc61a7bc579f0cf190bb77ba656dc84d37da81713ab586627d07f9867b2bad0377684f9b66264f496ea7a68a4039af5d9e7cf7969f3dc5b06e27d0e2effa061aa4dc24c3600a209588e0cc816756184bd27b9729880a4a41f79340991d54161b04ad6d00aead1ae2d3ba9702834f782114c85ef8d563ce43da8e93d4f1d612030fa5290e3c7f88e808b3eb2f3531c8472f7b11dd4a90f563b5d680f551f2a213a44b7e1b02ecf8852565285430917aa25a690f958e5c542c5ecd6cd4aa09907aa3d310182e067294000f99654b0261f308afa097d329f84d20d62511e17343ae4d192385f266388c8d589ddbf9c4b246c096e033f20d685f0f98fb3f054a452c8709994a1d4b23458756eb60195f7c47cc7188435cb9ddcbd39f32f31489c15d22de03254eee27d6506b589f04af2abb5c9bcada973e6b278230f9fa5f57128f96a0abfb6cf3099b8fe42ca53859ebf6096fda502863d48221c3a6cd92bf99357e3901bccd4439a5414072127cbc930df5082832fe82074d5ac8cd83a9fe417142a37a23b05f58a5f82b1797868806c62de6c18c1c0e4960994ceedef2c86c4fcff1d1622c5aa50862403f4711678d64de3fd07a9354b2197b9acac6326a3ee8829cf1c1580d907db537e3e9a38e0783274fb4dea7f99a280999c07a80c9a9f53fcee0e28229edc534dec17040c78cd75ade79e345b9efc483bdde7175abf38f1bc04cf5887d89ff726f70851513c290701232e0c960444a61a560d3b200fb04b854b8970d8786c8971a29975889a92410e72d135fde74c0a769e0e4dc7a66c56f3bd6f4a4bc8564d66447ef95134efd46df5b3453a142c793e36ec6024c8dcdbadaef3c1eff459a09c825d4e10048b3b8bfdb65a06ceb0f6006642e130d42a3c9f6e769430034af8f4e3f9470fff29932d8a411fdc8ae4d48d0ee667d53325032b8868fb56d99c543f49c2a27f2008dbd781f35acf863f27b97cb70ebe092d923ea714a502ea25257bbec83fb946044c21300924fda5d7dffc7e9e411a8cef48a63c152f183f42080e2013f191c204a413ea642c2f1e7c22a02480bb9ce9d08c4750f19e98dd2214d18cb7e0d0d2e441eab3b98c56991dfe9f67d7e8b5dbf94d06b22011bebfca0c107b90006ae5ce55df8275208885f2e396b31488573fde59f78d9a2748b6d86a4148d3e24dc36e8619ff040a86ff06ffa8e4b35c1ea5a917eceffa668af251c1a7377caa0a8686fdaaeebdbf0a3cd0a0268f4b66f6c7a5cc4b7ab3d40743b3b360db1a3108127185ae1d7bde126f30074fd13209642d9373148f5f6f6ac449f25456af6f954161d5767c8a99fcf78350e2cedf883889ccd6db115e2f7d9e388a5656ffb38eb5a7c39103b08486033e9dd4fb06fe7f398e56c9e007a98139819c57dfc8a90f1da499bc1021afa52ddf1706e3e45b00e6632a05ea494bc486cbaa794dc4bae11d0dce80d767d76c474895b19dc914eb8a90e9a8b722b092bfbaf8786a66a5041352a7100b8b33c804cc9bae6cad467384592b8615d23c2f4b6ee1a9910cc1957f90def95be435ee5881039d1454a08b1980aac95c948aa3a83b2d4b19f8543c114db04ebc30c6d8c24f0cdd3532edf453de89ddca710b716469d57610bc3e5fd992b0c2d61a0a323887fd60546b3a6eb43f33d190805720d9e3d652833a4738d4c64bf046ebf778ebb9389de397d92945d2114669b465a70f4dcb31ec9bfc0259e1ee245b8677c8b6b6a2b7ddc924f4ff09470da7946942a42b9406c7af5b569a2d57a5ac6028d883537a1df960c8079896921524e4f9ecc8acc602131c0778445454222debd46ac87d0641acdc0cbd08aa0c7dcc88faf48a54ebcfc364a71629a69272914e9cfed4b5d1559c1622954416cff19d52e0fecd20005a9572985446173b9659a6c2502cc7e8031654064b0a567a66a967dc6ca57bb5d806b1d4793a6143fcfee3d3bf9d02977263a0112a36e04a5a56fce86752f019e6029c99a4936ec43f06eb6902e12993c672d4a49d0450e1dfb586e975a944a048bf1556600f765a1ef43bf66d3a42cfd8b25d0648cd2fdb7ea5254038a40c220d89e11409996fc347dccec551a2188ff5e1649931ff688c23d224af487a057ba7d20fd5ccfe16f6b375924056c44a00100f81dac1266cd61447ac0e665487a7373a20421183c293fbef8b08f4b7d05b142bc2e7147f9cd8278f8f341f05f28b2913a599f959700d7fb8012b6c0529f49e6839fea714a24c1922961096ba5ae09a8f21282c5a45694b3bcf97c92b65e081870667de070d0a206be473c63f12209945294627732c0fcd744374fb642dd2adcd3968c32b895bff33f297602a55a743623fd09a987e7ddabc1b70199dcb379942a7bdf7f189622c3ef54a1051b19a1a5df092c87c6d6ac93efb8aae63be171c162dae02efbdc3d28bb02c0cb6749aa30e0b4fbe114c66a3519ee2c934fb91f444ef36380c39bd0c66fa58925858ec7d7bc5de76b5fad5cccdb2d3fd0d522ff1b5fa528fd258e15682f02bdf3406a3da885f0d3c131880616796f7187ae209c098821bb018088b6c8198a64c1599782a46fd0d6f668288ccd0dae9759b787a08773882fc9a27c723026a7fa148e6671185424fb067964db8471d3e31f31c823ca80556eadf22f57199051442af8ea99dca578b98bc0a1166d241e1585ec2b8231846ef9a8157d2e08da78496c685f025312238016e6067306edff0c843310b4a297b569e3304e525430ecbc1903cb10fc889bcc9b06ec2290628cb35395092f9dc00cbfdfe620320c0d9bca2cb0b76faff43d49186620f4c0c63d2a396348a807dee93d09e52b0864e6a00120e0852f5a0564bc3337523791cd8a2fbec49ac0bc531e8cb69dbe08e50a4efb19db700b28391a6b22e5061efed4c66b859a2ed6fafd70ff9add0fd92ab9cdfbf089b0c94b52fb396106f9d8cf9a7b58240292363e58b1257e8f5c1e445c60e0d82b4b56ba038385b00513b6cc23974997cd1f26cce9ab8217b612a06c40d8a4d761e2c85028f06183ab4594d77c43f6a22337e8f6915a8f9e6f7912a5ffd7d50f390aed487a6f3978bb110d5258aa705c9ece5f7903b291239d36e2e23e63dc6954d6232e14607aed6862033a879f4a246b89f68bf83a498dc4c23b140ecdc48c6d0539f8009e792315ba009120cf9ef3f40f191f52e8456853ddc8f58c9374639d6b5efea84b1d2648a085962ab7543443e28ce11c14f3b01c7c29240de6af95841a84da2965c60e02f2875461b488e439b89c1cdceab565b42887d742ea8962add70b3b91c967c1a207db47665922aac1eb8fd576d47407160dd17c508fdacfdae871c40bb70963c4c457eec9827dfd70bb8388ef297ddba5bbd7f4de4a8ea68cedc0d2c727ad57681467b6ff7974b372b4d058e7344e64820283b9425489a6972018ba46a5a2d6900cf1c6fff768504068820f47f29f183394c14cc2818a25e37698ca7fe00495dc6723262282d28cfa80785254d9c388c08ef2951e0b043ba8e05a1b8827774d2b7a488a54625572e0cafe07ba5a382c19dda3e3c4743bf91c945709ad7332e6e1ff8ba799fd7603b666ef6bbaa466f875247e187e4bdcf41d1f6627f7e061874b2f8b411bd78a2464e9848d8328df0859fb5a5db68065ccb52db66673713ff78e7945bc1175b297eedbce3d5ffd57f434d179a3d10c5849034b718e29eefe7f94967c238a81fc914dd39cb240afe1b91f90aa45b98c45f6c1d29d8b23fd4f94e008bca7c8b8e82e61055915440eff8ec6b73e1c07184dfc438664683511452897726924377d1c5957f6ccba1f72062d4b43809680c71e3eb20ce6b16d566b1d3a1a0ac2f0fd03eac76202ef5c6cf3ef39e12d25bb14559f804054fa16db6b5cc2294e40d8f811bc3ddfbf76bad5c5721cc8ebe2e6187da5635ddd0981ebe65e17114082f2fec295c4f524f31b42b938295ff7b98d7cb5dcda2e122e883cd0899a16ea6ac510d5e0c3af690ea5a93a135f87fcc19f54d9293a88a33f857953fb94b6c5b8092d4b5191d331c3ee3aa3b793cdecff1ef2b3bf4838920c0d44a58b44c03467f10b83c76d485cb18110a96741ead70d263be80a4dcad6e5c43bda9d0c7d8c78107c8887fe87bd5eb568fc53748ac29fcdae582536b661e5a8e4c0f19c2e65d1be991d7218da723ef342e5491b30f082654ffb041a1751ac37b847a2e9f092fa09f52233e9beff7372998b77485ed5aa1da41ca4118a64e3bba6cd763f4894582ee8024efd4954d33ab480b4654050edfa70e8471b42a343e3191aa9441edb320bce24daa5e6549f1529aeeb900d36f0b1d113b4ad8d8c0cbef61526d5c9a12ade9a82c727be09766710dfee8a6b52ae8908605c4931305fd3b2544a91acf4196a23d8d420fafb9aa4cd01c9db791faa13fe5f26927c1f6b35adc58fd6f0de199625bc472b8db3c955dbc825292035015f4913af21fc66b8defbf3bfa1b4cac50bdc820763a4cb7306d99aa82bb9ffb377fc882f38ea9d850fa651c3e0af9af625cca7a34448095b7ae50c62d1e5ce6608d062da204ba7d1e8bc22b58a3fdfc5745a9c2f14401809c0d135d84ec7a8f0ae35641d28cae9665867a0ba06c784a75d3bd29274cc11ca327a5430833de0cdf99927b988290fc019e0ac5a3bf889a92240ac87474f27ace9a6377ef24504f3b842700d656f898c3abe26afa851fc8be9d1393f7af9196bbde8181b570a4f9106c60cb2556f3eab2b9112f441415255bbb318409613639ad39ea51e2f9b62b9a9f6c4e4bf68d898a3c3d6a758e7463bd4a11007d53ee2c4a26364ad5872f9704d9ee35684dd0d7e965aedd8343344214ef2ca026cd2ed6e484d5328cb3f405f0d6120a8f8876776b89da6ea42448dfa1fc54a4fd288ae3a39fb5d81979da35d855640e874a66cef8789715cca870e3fda99c99876b57548f7142d1eb4ce44303d2ff4ee3c12a800672c9ea0a86091c0ea06006c795cd977827bd491ccd092201657ff590995b51a50e85024fc2ae61851f4a613c71b19041074bd37976bcf8d7cd075625d55ee46303e4181c82937e6c3aaf048dd8db98cea02442b4f7d2c04228bdae441508ea64f8afe8c5c237c98ace909c1771fa79a28adbeac77ec247819274d37e401abd7794ae07b44f163ecfdc54a42a039d9d60395b1e947af2472c172c864944978acbc262bcab9759ced286c61f601e5e17096c5c2ac4f8e5298d50f82383a8f22549ac79f15ce1a55585d477dc69faac48e6452ef34578e35417063d8cdb4f7e6b7bdedb5f7b4e3e82efb2be7710e4773356b7e262271c054a1ae8ede84c7af2a5e2878a0bc6e529a148e646e51e196e3c9328f18be13733e9b5e9164535c65f3a94509ace26421b513c7cb5220c5094f1f417d9f3d3cfefca087b358aa5f765b54f2ebea0f19f6a6865d769982f46d154c330ab05ab5d85f9c1c4cc1b2b8dc0540a5d8e3772e93d09678388b702be051c70848c13beb173cc230e95161f1f4c7a25578e1e25446503dbee8b83b78ad51ee558e0bea9082bed16abc12d3fc619eeda5a2802fac1be0b03edd668f28d5b6e127c2a0fa6d7782e000c1247e2bba06851dce35d21651041ae15f6d8d2ea55c4398d29e98424cd54e3c2c4dd0083a7cd8e5b36f7bbaaf04f5e4ba9d7866d098d8b6677eb36a74ab1338022d86b98ac7d08b7418a9a26a9bd3c970b2a3ca087822de92b11c00eb13426639d4a30cf586172ae41106a13f71c04498fee4c06dcd959b54005c8ead383b82c143dc30a6f6a4e4d071702d784f148edc42700ae92ae2ea71f851d9721a75e0b5db61ddd911abb23222ac974306a410113ef17e5089bef09ab288a11f681ad852eee9c21477b0ed7187e76257818a6ff8630cec3fc80531751aecdf92845afccc10cb966b6a655d82682c32315718cd8d72df3631ddf86042d79e7cbfb7b13cb96fa196edf5efb0703e45ee7945ca0d6a4064f8f7c3b50a1209373910c8b28be949548cb88404ed91b314531d92535aa53500a80d8d880a902707b7d04e6bdc1550018fbd80b064a087878b6947495b5a5d9c0c0cbb90924f4bd2d3bca65a3843a6ed492134e4ddffd5001907abb7fc48d3d3450fa4b3f1c980cb02392b9f394ff0cbb175cbf190dadb4501c6ccc5fd2877ea8b5f5be91fcac0ecfe38c147b367e3669c9afc2dd3ecb6d57219e07213b844c13d736735d456f2dc1f644f60d2acf63b7a802c0b73b4a515c86b0845dfd94d68e7be8b33c49b444ccab9aae5c2286c2a1e2371be4ef8255da2fe2447e352bcaddf183ab5dc103c6fa798492ea5035a305ee2c3147dfddc462e65b8300388e93dc70e277a0391979a7296a908b7d898c877f4f50cf2bb8e876307a66934a44bf7b17d116622bd7c448f57bacf63e6f06c3eed4cf2d771e42eca7c1c605d3fa080721063251a5034adba671407b0fc77b6aedd59ccc569db1e455d62487d6acb1a3198cf350d008447ac415a21decaa6e8d6c4dc7794fe7563bc579865c81d00a885007045b002b3e6b0dc56a9be61c5c1f20bf24e4944cbffdb5ea58261f889a9c6bc7bc267baea055390b2e8488a3376349034a60e45af6ce6694d43ecd114c029bece4c6748a8d727b284e508ee86409e01bb0837ae62f0392dd7d8059d742dfc973bda7ceff2c125129be2c01422511bd28aae91cf23c6c2393a622c04f537839668527a185cdb7640ee87333098588f82278f8181de8c71150c6ad85e430e5ce8e346798fb965d7096fd41a04c22c7bec0dfb324e569048ee078fb30ddcff384a25e14a878e89010747ecbcf6b90714ef9678a08c4f8a748f4443d950796ee6e712376c0b6429b62068828de3e1bb62cf43d23cc2d27d9c3c08a42da3f68e448bb6c2013059be108bd348bda44f4f694b60c8c1a31abbd147569e44913f4b18a16ecb49904be049997b71353d114477a2e62248cb57e471040d5b9d188d7d4beb2caad9b685945facc9ef26b283ff267308a3d62549fcf352c94b75cb539548a40407f7a7fa2f00cc6ef70c4560be15d468660b2401ea16fd8acebbea90473931d3fbaabab06d9935ffa5f5e6246f5b0e42686b37547dc79902da2b4268eedf220b7d38ca6eb67d6888eee3d94442a315109df04a89a1392811f04d197331d8048ae5c3a9e46461785445ccc92a61364cc0e10757541e19405c384dbd9612d9385aeb6f088f4943f92ab0700ef4e6d25b1f29e0ce98902a729fd22ecc50c6b39f7b0deb60b2fd8348dcc182856bdee8dd12e6c0e37d53e516925491f0086daa657d7ddc18e11a42c9184fa9ad79ecd38a0bc0a273f943360758402a74eddaaca7160118fb1054112b1c3104c399b8f7ffc34bde92081a2176fde0b4f835b3805634307b93993dd9110ad69ec12e4b0d5df48e0f246ba47658c300d61b0e38b456dab062e72b117ac3f09e8ab4be2137505943a6205df3c444a9ff0b603eeeb4da306456fba03b024ed64dba21344c964ebcd0f45ebd61732206a5d7adcdcba7a8a816975bbe04358eacae481464707d198082018298a1779b2747b70912ac0d0043e09cb37e2b1e08388e034b569e0f023a8b5d9c2516d36eac798d7f021305710eb302c5b092ff6c0c721bde443f452db9665c715765993f7ce580300172bc619eb7f14ae7c66bb4134d37c754ac4c126bb55a067080b70bb9a9691982e5f53dfa332c1df732b379400a98ad0500349b090ae73eebe4924419d3c7783c31a149b933029990a69c4238712633e189168fd5e6fad8f7729b9a42a7aca99842a7480c438c540052463e823a492489a0d0f1233e64ccae95b271fc5a602020b7c5925a2bdae14c7948745015d3cb057b0a26b19071fbbab76016dc12e22a1192f3da4c08cda8fde0e0b27d4f33cc2b5bb0a7018ae815285ce978495218bf582ff8b04cdf58e1b2102b35e55d474fb586646f4ac64a862deab4d6a60eedc2ccb5acc867f7d23aee2df15f52cad11108719527898460d144c404286e3f03a6808abe46b5096af2be151330ac98bfc11f94ee102170271f3f2f89e01828393e50095b67586ec358124eb808205134d7dce624c4a185f9e8f0cb70e5c4a78b7841eeee6c5126cc76074d9c945b5426b206754a9c03f1ba00211f63b5b5bf4f685d70d50e34c7852b221a7af50fdbb6c4f6e00e6bca846f133128cdbf311f91b2538c653e5f16e6c8573b7ce6813c1a21387dbf18e89fdb4d20c973ff701dfa256a341b944a7354e7837392c9ed7f108df53d7544415efae08cb1036df9483edd47cd9e9c0ad489d3295960c8307c04850f22e67a232c12bc6a45d04d31c24b081d4e204140bcabb441e741bcf1415e2b3c8ed587d978fa05feb6e183ee105fb547d8b0ed0fa9647fd894e8a81f7fb05ca3fcba086eecea8b5341fc58654881ca56a30f1bac57211471e94a1a2e9c8fe4554f0a63f27e1897de03971126b092ceb75e1ab6362c5aa742b3e54ea8f27b520a284d232256587aee749b974443db73dd1d9b73725f02868279b206f824e8de8458ed43a7a4b14204b29e1e717817c44293887cfc7e4d05344f205aa2c7e38362fc53669ca2c7eb1e45fe449c2bf406b6e5b7d18d72a25c856935dc48a19cd34fc6c800f7018a519e9f57ecc2430042d107d5bbb0940ae10dc99aa6a708e5b2709764cb8e2ef485a258a68a5fe1ff013f83cadd1b630be6ab3338eb00edac16432673b991bc0a57b8ec37b5434322a4a9424bb900e92fce4efde8194a5e9eca6ce977989048253e3f6001b469b3aaea856710bcdab1c56ae2a0eed5f3aed3b13c36a00db1a08edfeda0a2ee6c2932e4cac952fd93bbd5b0ee82f0e28b656d3e370aef1ba2beb10c5d0fd28416479441bfb5e1e2133e62d2249f74480b0f41666a78b7f947fb4e3b4665a3084ec65fe3ff7d23afbfc7e2bb19c6e04c08890754265a855eaeccf70433e0956aab1c8e0d716087279388902973587573998c7e030c48c6c2380da4249daf455c61dfd7cded3139981776a75d467aad9bebfe35d289969ce1ead3be385eed4b52c167a27a7985463c2788d57870c1adcc2a2b4eedceb63f292854b20d2a1a19dfd455d109242997f4558841c3116a362bdf88520dfcea8d37c23f7dde09c99b57adf435f35d447223de6ffac146b5926442341b6f92e31f75b2058d0a2534c10b6afa25e452a8658ada959c48fdf392a71f31076c9763d2c11251a91c6fa43c306949e9be6f6f6cfc58b2a6ba8c606c0251cb41eacd307107c1d4dd76a412e39ae2adf87134d2a00c818ad567f72af996f81b19a6ee5c3de69ef94bd090f2d48adced882191a718a1254912e7db68a01e77159e286e482017761aa62cddac51e65071de56611c4544667c0747ee4b48a5eca4866fa5df09253fa9c045e30665c41aa17b14b0478a21a141b78f02cb17307813220b622f2809271fdca679c208b85d8c9ff28cea55244703246eab5dd2545a8fd6603565d4c0196966ba8d15ba440b37c070cd61e19554bf4183c5ead33d306de0ca21f6adc65e5a3aea4a8d31febaabccaf41c36d057638cf11d485db1216ce9475eaf0513aaa22049f42893dd9870c4d0b47cba1b214692132f2f8f69d14e94289323f9f71d493e84f11ebdc8006d6b12b422a291b9d36b35b8e00bc4b2f73cbf63145e1f7694072c0ece0c8af62aa5d45bba688c394c7f02bc42507b6b7f84152ce7901734b00c72194dd845ffb72bd60dfdc7f5c7263a4e072e8235612ba9948b932989c4eae833e49c6ca9b8a061ce758093e99e147578bad94c4ad79aac35d7bdcd0cd1997097a01781fc60337bd5de66950b037d8a699503a573005b6849f8f04fc387c2ebe6677b227bd46010012a9ed54c1a031c77445b677521a4979714423c7f13cfa262d8885e35c0a61aa682ab970d60c970fc231acb93a1fa25d8ba5b15142f5117425f850127af6ea262b98ec51b12f2cc8274a93e8d611c4a78190fc57138dec50695c2847cf6a111e349b093c93743195947c5235bd30508fa16ebc3b968bc13a6ef87a52d31837147c4e7df3e26c023b0ca76dc53ee30b03b1f3fddefe6e823cbba5372f128b7a28a46a7188268d767069458a1a30e38a74ae958905eb8a4636928c92179aa6b2fec4a8c056c2e0340a80cd16312fbd1481ccd225490c37b22691bd534897c9b2b2eaead21bed3c669f4bd390ce617b4f8c9d931f068f0085639b0997a316fab1d95f607ee9da6ba623131bf7b8f556b76ae7ebf79b0362ae2ad7c00689e3f9a2e637932df54aa5fb97de232aebf179f3b794af4d96ba1830ff5b565a9c154fbe034865e9ae4841cc256f95cc7e29c6e71659112b97d9574d860582bf579da63382c725822dc020f9b760c516a5994679414ea2c48ddcbe2e55db5d5fe994c1d26c522d0a54b399b90ad39e8a395d70867feac47dc214c147e5b97136ea7788d7835208f7d897c6f9e4fc9ca97e2aa48c9d6e670ebef6b6d9ce81dc3213008c66ebd59fea3f3c114d3dbb7598d6cd4b2a6641641a500624a07cbb0ec172e7c20424d4fe4b295872baba5569e5ec2df2baf3e948dcd66b0522adc1c9dba9a05242eb7578fdf0198021e0b90e2996b3bebfeba0b04bd3e4d012cf04c463b332daf1c1e25e80ad003e85fcc96cc32ba82135a00d38458100d7d979be664123cd45ebac20ff0145f41a993a9ba7c95f6518a5075502d620c53149c33665a1a3641352a14e4b85071040eb0e346499744679226c9e1bfe0a6430ac155a247284294eabadb95c1071ee366f267460d8473ab01ae36ed6afe28f74ddf73d480940d2389e769a4431de7d8cdb996b7d10b6542a2c93b15e09b6745912b96c7c6f751fe742b518fc692f17ba484700b8cf9a4c3f3f4d15346fa9caf7dfe946fe1d090a028fb7eca3286ea82cfd88b08109147836240640f0680ecd14fe1352ca7c33753191a315b5420b97098f4cb4789aeeb734e07dc98ee178fcfbb493bd284f8312f6c1431dcab8585be18d5466973d65aa92e560763796dfe12a4ff65834c1df5413db3c2fda6482b5a24d26c025a6f891169863c2bc0b9ab0d75ac62ca1708c31e51ae600e684fa24ccd669ba7e91008d14c0e662e8ecf07fcd0f783a5ad270bf89930f35a428617fd975b6450ae1329db248a42e9a2c9a68f70aa2d0f88c0705c435f2bbcb171f0d9315aec71b75b5f98b1add4d8b6856df4c80ac08626d5d1a707a0a8478032aacee895b3054aa710e1a3e90fdaf4ae14759d6be28fd78fdd7d768e0f4b7d2e66ce3ac34a51848c97081ba3cd033b540d0fc39409b1f87ef0e0018000ac7fad938666c560f4a574643a87747d1be073460836fdd28b67b656f912bb74c52065e08a5087108d66ee20c88091c683685ca8845e64b1340330bdb40302f51f1d2cdaa7c24cf7889fed5685418db9435e2a3d0085badaaf256356dfb8ca4e9a2795078da0bd61452c1a33296fcd0976a02c554a026501228a97e34ed4365ec14fa12ab26d0ac9292404da034ea67fb73768a8cfb8f23d274c9a02bb468c7ddf4b9fded720422a14157e8bccb918575a919e3c52c592cbc83cd98cd06618efcf5ab1b0216042a1b0b2f755e7c37848559d874e168b1fd75a0e5c83937d3c5ffcbd0b0e992c2a664979a2e9ab55a1d7d670e014673e433c3a0334d593549fe99dbb56afa6565337f0bb331fffa7535d0a585554ddbea3dd1b10c6db48e9905a3321b99a3982ffe4edee08bbc7a3765959fe8587e56812cd056665eda68368ef7f4c31943f7f4e7544009eabe64d9dbd36f4161cad4a75f63627cb249baa763896398f953f7f35b70cc83dedbcbb2121fb99fec98c47befe9388a7e742f41980235e615ab923cb7b2ab929cdbb04e175ad3bc52afa04886bae9d34dc9f2864dbfd3be1d04d894ccaa2db466ad56bb51a59984758b51194b5a2c62a019288d9cb2b6d67babc582ca84e8cbac9af4ab82d2a0269d85c562baf8d791345d46d3c53f446510305f60f60028c9b3cb918581bef64b0bcbaa6a9aa78a39ae62abddaf5f1660cf2f5fd8f341332a63c9107dd1c8395d66db5fe49e595012b76bd70aa36edbb63202e9f9a8824868edb7cd6e6f371b5d8a27d82ea332a0187df11f65414d2ef8ae4d966c7f8fcca058c6810b94c91e65186c7fcf39d8fe1a28b6b38a06babed6c93a33bc6461dbdfc2d2d837658dd4b1e332580e1153a757b6e1fc01d0c9d92e94c3471ab66489b7fbd65a6b2d102135eed37d6ff0f1ddf8c347da832ad0f5c9203bf8487b1f7e830706da0c92c7dc9c9744dc6b44e88c111a7ac44b397c344f4ab696c347346ccfa3074943a901e16cfc35bc54c3da2cb4e541ab1bb6638df9f251010e78e9c70d14b8809726f7dae7807d44030df7b7b734e478a2e7cee126ed94a997a3070ddaa8ede0db5a7d6bdc1de867e7e63ca15fd36d63d4020c5e9a1b6fa487395de812d34e8a4c01fada66b6f5fbc7037ccf53abb3b543327746fd211a1a47355de0f3da97930ae8cb1c3ebbf3f32ff0214b7c5fbff6c9007a4d969d07fdfc7480c2f20c5dce96e7bdaf8fc3bdce48778efb398fbfbbf1b7eeccce7f8f416489b5264bbdbf902c43261c93742f94994d9f43b33fefb10d3ec7e66683cff9ce38f7b7759d0e59d20d7ace58723edcc137e8af26cb1cb6ee3cfd7800a15736e8b70f021f52f351e7fd71d4b0ece0d02173f86cce7f9cb9ed37037dce83c6cee3a89d716eceb8037cff6fcce173ef1d39ef1971f0e7bc3796fe1ee73d211abaf3a00a34e7e9cfd3edcc003ee76d5c1bf4006081be8f833fe84bffcfd7effcfdcf387d04fa1d86370c5ffb74849d9146fffd20b07dc73e1e3b3f3b23005aa03b5f3d6f9c9bf3f5d3b8e78c221938afb31e3ddf194bba3b1f8ea50ed0ebb104913be674e9fc9c2ee16bef3fa3e77d149222193a0f7e2724cb1c3efb7bcd19c1c98d1bf8ec32879dc3e7b327fdcba1df1219bf634d7b20f6cb0fe0701f6f1ac7711cc79140b6b7288028d07302a1fb92980462bfbcf435fb638931a69704b291493472d617e40fa050a81ef6b491ed7b9ff1c6c1fffbdedaaa3f53af03da2b5b7fd636ae7babeedecf19c33d4996f8c1afcf8df8bf21ab3dbf1df4cac665e6f203d138928796cdcde9b201d1be0338e0af59cbda6f9ff1e3cf9804c2691f34fd30db0f47fb7373507b4e174d9696ac9f6b7e4eb6f6f39778e72fede7b7f5856c5cf1de88cc2b39e8620c349cf08434ae9c3c3f027a9ab9271f869c3ce4244b9cc6de362094c7dc40eeb63f6b1d7768df79dd9743564356bb3e10eecb0fec4af2d0b2c12f2b09571208f7e5f63cd49d04049ec7ef83fbedf1d7dff0f6907392ca8d040292498a78de07213e0c397d3c1e8fc7e3f1fc0f374e9e17e2217525d1274284c8cc8dd3e76746a7cf1399099d3e3f834f9f27c299a150a1d308ae15223f8c4e23a869a04e9fffe1c6e9436a1ff46be3d0fddc5f125b48995912c410579c3c417c0105b6022745b039212162059125a25801e3855520c515427c118516454ef467f75e3964b5bdcfdb8883bf48066ed7cfe16e1eea9015529a7b7a6597f8bb0d02f7ca952b4cd8db46961c99c4f3fe2599f9938714325fa725156f6deb408bd5a68fa36caa831b1b1e30500ed91bb87b9301dc1bb943dddb57140a8512cdb07dfd8d74000f74df1ceede481e2aed309129f5fca9120800a11501845604184d76e40083354723ed491031841e8bcf32a90b0182ff8d3972e0c85fce1668c31edd79f39defad53b316678cbdee7e3a12305d36dff467fbcce53167f2868fb6bf93563049cbb790389c65a4c149db87c6e907f8c8d0e58d9dc32948824512706b94ecb9f17873cef971b8fd74e4fc58cc789ca0077afe41c0bb1ced25b1849d6f189fc723e7c591c8120dfaedd3117ec661cc0fe4c21c60f8b9f3c4919e3e6312f143e3cc9f42cf3212f9e14f2172e64f22d9a39272e8c0e1a38d031a7bf8086b1c3eda72f8687bb048170a61cf4f0707846160e87877fcc4b002dbf9ef0a46eee74f12b1ad7d3ce84e22ae60c4a9bb4f0b961dd899ece1a3eddbe1bbf3dca88591983f1f101471f7e9b8de678e25cf1d72c6b93da338ce53e77addbdf7e67c83d37d5344d9e5ec62c2b4935f94003f29017e626386951a729841c624cd3d270957c1f933f54f07108fe338eefb6ee24e08efd3719fbbe46b5efd2c8fb9afe7799e0ee07fff79dfe3d1fb3b7e2608a716c637d20ddaf0d13771063df0f372e6e606b187a9e7795ea846f7d1eebb6f87f5bc245edb7e1ee945a16d843c5a76fe1c7adf48b7f6d27dcff3c091f3fbcdd0b2738731c69352dc919e078e737bf82fb6913dda7df8f1d2dc9c8f47cb0c2d1b9335ec3a5e3737c771ba13c5167ca425890fa3a3443fc4ffbc48d29908ffe7c5078da21f2c0f7a16d241a408bf487a8daa923059839f400f223d453a0d767d3755855ffafdb1ab9a40ef8fb1e03e1d61081afd5455d58431ae2a5c55a3c7cd97fa5855435a67acd2da695ca2471ef0ee3e7f593920d067c2dcbfa7343306bf23a09c308e1bef836399bbf7bc0d7ef2fc4769f42eb1eb7a9df78cf3343f9bc37ddff6fdd475221f9dec9dc743061172f23c0e9f8fc9ba799e513b793a7eaad8855db5caee10ed2c46a000fb7293ccd22acd5264163de5d17b6d4c925906c876abdacdac2cc52543b4ebaca0242de45b17a3f9872e466560e80bea076aca52c0804e68cdc66c18762685955119cb042b06758275716654d1ac1933afb5d65e4ab7ed05b77375567456d0fc4317cba8d9c5eeedba2374b1ce8ace95599ded9f9ba0809a31389826eb7a41d93608517c4c17af2108dbdd612ac9c1cd99a1392468985b31ae18d3cca2f41ea9c12ec04dbe719eb691db2874e138e4df384f4e68add6a7a76e2442e4873f7dff03cca97bf0c76cc43c80ff36e61a25a68bbf506624b617a0cc49ecacaa79093a0ac06e627bf77da39fbc51f423480c429c01cbded8c5441fd9c5becfa3e807f8f941b293559293b392684494ecc88cca33309c12b4c615419799b55906781100be5f76367d9829334d9dcb334b9ccc7d2e26699a761051846980ce554dd6e572752e2033025d97599f59d59431ea2260fb67d40d0a95676ef8e8c403def8879c849c50997523011b93ddd39d24db96976cbcb46516ebdeba69acccca2c981b58d574038605a3330b46d3b44ba5adcb4b656645718fb5d117fa28d821d807b09a3e0077cd9aa6216092fca793ed3738378ad0a5a50961d735b469da966badf78642d60779dab01a69a3da70c18698001b35e780fad8d3c55f4c0095a961bef8d32b7018d1a59dd6da59dd346dab1aa59ab5333bbb57abdaf8332a53c971852684f4d560137ae525676d7b439696864993cc1d214f1b254b2b5b6143059db5c0108bf095672116d355e6d9ad9bd57e1bc1869adb08a0d8fe1eaee6c873abb2b4aa29cf6aaeff2ed0934a014c2a4c0135854db07c1645353545a46a6a6aaa295cd514b17a16b295996667160fe851270dd90a0d5f95149211ca94108611ce2c42d98c710c7e700a21193117b4cd6e282ab391e16a43e5594ea31ac0a332b9455f666950d30328c93fb71cf6007ab3a94ce845f883108c3cc5f6a7e12b8a9ef4858ebe6bed38177dc11cc7699aa30390c3e17cf53511c4830f0804aa21ba50340a2291682ca520457adb985f4eb29429f215740779369bfd388e95c5aa69a95ce574598d85f0150bc998a6cc841e98b0dd9ba942e7d6cc060b2cb0306b54d8949d9067e036b313bc147acd4bf148fd2ce519315dee9c4750927b43a43c94a7f296f066521e8d47d303cd63bad46c5186c5d9f6150b6a55e3d949ae224bc95a6894b29a78a99c3ae00173e3c62b7c659b1972abf6b0b535c32c8545a43cdbb8c2d8872b5948464d1155422550928761cc9193e1cdeda0c22684b05016fa40b77a4c5a2ba594525a354b69aef93a310242f56556f8100a4e7419a6364c4d19b1a95502498cd5c29ab0098d7cfa123651c322c25413352cdecc746102456d2ae315992ffeb9091e10dbbf24b7cf4229d34547f89a42c3f8a8870c53cad4627ab1fda7ad1aa55ad5b4aa69365cd5a858db723b012fc08c3b05616a92fc613e1ead2d34fd3253b2cb812ec5d86cb557b319437766c2f47af08a4c6f88edef427e79796179c95f0993263633bfb01d00066f1b6568c048838f7cb87a58a1277d31c00b2fbce07f23a68e7423c0d3c6ec64bae429f20f76e0ca2d2974f8aaa63967f8aa5b11d3c7834e6bf30daf56edc6576fcda971436d33d3257c511a43c8445833732b646252a1c3147df127ada84cfdcbaa268caf3d62014f7458934a1d09b58aa3ce95f7434e23cfea5cadb295560f0d64a0ac1698237f1f73e6fd3095906719e8a1810aac726b75935b3daa4903d3144a09b5986484b0f065a3c31a1f79f80a5fb5661a2f9561cdf652fd05d054d1655e80977178da28c37469c0dcc29b993ff050dbdfd363baf87738d065b80a57219390e531dcaf39e2231a1f79f81263a26cfbe7933737d48c125ed1c36ae12b9422a40125f93c556edf2aba1461375cf915b3f4c20c5f616a52999049149630554d21bd76ccb05535e52fe80b396b915d5926451663955fb915da199659b217f92615a66e6e6d0f6b7ee7d6cd8cf1629a6818db67d7d265ce355895675e6a7bc7d265de50ac5d4e57f8421253222bedccc392a24750211b83939a3130b8fccb71bb879b2cb9161e74578d526dba7ac86c68f64ae947e90a4368ba7d3a344a37ada4ffc518638ebbdb915a572dd8d83620756bdb1d81544ddb8ee04c97eda7325c155cb836cca674a4557202a1955e4dbb9aa65d4dbbdacf8fe2b7c14f98e2e942e323acad9539f719340993e46f8432f149855a4ab4869e605c34475f4946fcd47dcac974694d17d674a15350520c3b58d55baab0e9a3304bb47a192606186895ed3f9aa61285a9150471ce377fcd631d93e49097e88c8b668902f114081ac51cf99ffc531a6a35c38ad5f1f78c991bfc401026661f388284a2384bc42e112fc164a046df40011f79d6429eaef63520e30d54899b1b724829a5b40758a32fca4b3d6818d3858a419bb05d09aa9a4a19a9dcce750cedd68cf1edf3c46a3999261ac624f93b19556c9fad4097740a9d0203372569ec0c7ddf7e98e3380ec762dbcd9ed8a44cbcb0fd1d668efcb55dd25878842e69cd8cd1b63ffd6e4f283cf001c575e4b6a67dbc7afdd3a1038ff9d93f4a2ba595eac063ee24dddbe0a78e0c22e4446b680da578baa47c04435d95c6fc358e7524adc9577489b1a5b92de4c03f39d8fe79d639c9f973c8ee6abce481cd98016c3f62441341efd2d2509a4d638ff888d2d0d0d0d4daaac20531b5fd7356a9668c7d27a071050998e822c583f98325bea882082d584448e0d5a5713c154276735dcc7d3a34cd086eca946aa750196fab9ea75fd5b26c132f618ec359956b37daba592ca84c253ff4450391d0f59201dbf6d74fd0e5effb1c87eabc5a3dcf8e560accbeec8db53fb060f8f0d281c7d4344dd3b4fb94fa88138a40d702e080992efe01a0a649bb2a5466cf177f0350d293246c7fed04ed9933ae07fd7ac9548079c9a1e9e24fcfd0d347a15ae9bd75ab75ab78a3a15a616cb0e16923011c3eba156649664e72744325b904666985f919103dfa02d6ba9de0c60a3244b69780d21ee6c8bf23476237e9cc7429f285ae61ba7468e8bf5f9f729cd534f2f3d1c53240a9f5baaeda0c50194b5a608231c598373e3a1f20143a561f875b9a2ddb64ad56add619ea9222a45c49727f7e13b8246a497d214b5ee41da1ebd3af956e1bbdb7d61de469a3d41aa6737a9ba554084a652c99c37c81711998c550716433a6b461e80abb66742e4208c0d7e173de89a04baaaaa6f043a01ffc10703e7ca7ff037cfd3f4211256b005fbf0da0266d0849bae2907446db8d96c1014a3d24b4aef8031259ae4ad57935baa4332ace4f910ff0e7fef1a00c8c369fe0ebdb6ab57218638c5b3c954aa5a98aaaa88aaa549a84a9a4b7f184ae233a72156fb5aba07d2d735ce632c7654de334dac4764dab1849cbd5e9e0d70ffaeb51b373637207ba5de71c8621c7c2e22c20511431c65743d2728df84b72dbf018f4972d50ba6d2387c373d63eb098db384ecb81be78e9a9a2e2b4cd729af6c2344d198a84bef82c6190d08b5f071e73f33ceff3bceffbf965527f0e54268754c6fbe64b383ad9f4c9a65fb292c8b943a2715bc338056fd34fc72433a39326b51d79d01bffc5240d82cef440cf92aaa0a02afa82198359aaffa95437d84e9616894d5578a4309be8ce0de3adc6866b7c586b328890937e1c8e552a8cf598d238aeab5f9ec700b1a126ab8a2a663385d58af2ba815191adaea89430594d18589e8d893fa11fb5007383d5c4b2582c0d6b7343b1f2b451da4caf88b353bce4228edce19bf32856e5260a845d3511f784b2839873f8da318e58247eefbd3b986dfc28a4be1d2a6c8d85c3908f280ef73d4c7eb0c8aaf6b61171580b31132d52632282ab48034a15b0eddbad56e525edab11ea562b99a4f3aac9aa9ce46f555675d3a9b69bbaa7af3d27f9fd4ae23aea811955383e6cb041235fe68b015e78d06366e1635e714d9b3be81b946c7f2852904c0141d1f34911b60f2fcd2745a8d9fe3f6e30cd1af05f528475dd4ed0d1a09a30899a43809deed3fb415c909df06352147a2b03fd21fbb9bf8f1b74e0e19a86e7cb07a5d8d2a0b6c8d346d9b9da4885d14794811c9899f87acd8cf18d0138b473e159c85c5bf181faea4c93325875937101f383da4065f4820f9274065e4aa26819545685a8339f56eb4c1582caa84c2571d0972a0435b9404938a88c5be1000fb3f5e174f1e78186369519e74b87927c85ac678cbb83605acf988f476b1f323738f003fb70335c66961c0d3da70c0d33b4bffca51d0b4cb92f414cba1341495e648efcbd66fb7314e5476cff4ba240306d77496bb6adde0bd374979a03c1be4fc7f6ee4a7c3463c05aa5cabc9467cc6cb126c93f08db7f86a5c4644d568de2261f9d10153d653b169ba226c91f33d14ddc66fbd31b3c9994075b97a1cbf9f290d0a1dd3d95e56daa36644c532d326d606048a4716c6909c33a833f1d95acad2368140b63ff984069f8eb6b5523eb0c147aab1098545e2f1edebddeedba7befbd97dbaa8f6a9a73ce099b5de66cf55e0ea91f1c59d9feb81699268a9a78086d44a82a81a392fc5bdb13f192a59452bd55aebbb7bbf7de7b2fb7b936fd1a65d3b72f160a6569306cab9ac7d3469f992e291fe2abc14fdfd39089065f7f596764ac3ac3da74d4bd3f65b9739bba9633a574eb2c8dcda6a036ce0b3aa1ebdf6d6a34873c104c6b2878b466c650533552837092cbd42213082694e05ebf737e359de0dc4c17709cfa7b1c4eb5a05500e07da3b3183047387c543f4d764789aebafe762b0c9825bf3247fea32528e9ca2ccde9256ac41c71e4eae5829b047cbcbff7919eb47e4d06e1fc4706d9645298e024a422e1b4e4fe97447f246555d2485b95e4cfe1ca90f9cb5f546685aeff31a1cb3a4305115c54235486d620ca5a67a60b14bae4ca2aa36658084c2adbb2741cd785384ab9d0c77d1f44085767ea0cc77de38869365b03c515db659df152d951b25d35dbbf06e1255a8d6c7f910cdaae6469b1d8f43babec3140815d2010896f6060405f62187e819cad73a6b50c6dcb591c459d67f92127d028ea32dd6159551c0e0763ee87f82c64109617bf1b7f803e945946d18f9667f91692ce44dcb37ccbb770a10fb170dfe357a8130a75422ceff13aa1100bc83d02b68bf739d805aecafa02d0384f2276ec72799c05164a854ef0f297bffefd554d7ef21fa24806b94740e38993104742a506a725f6879ccaf7171e895f7a6cbbdf541c8badb87cefb73d1d719f8eedadb5e5909a8d032d87d46c2d042c1f44f4437cd08ba40f434ea1077de8fd61bef7c7e334f913b3bcb19d8607a5cf32060981105650c589e5716c05fa16d00f39b5fc10452ffe90530e8d8e1a7da69242a14781749488fbd0a3f0a2515483f4191129e21e05d2552b8eacc14f2ddf12229d33e39b711ecb700c9bc1f9ab9ab00b74f90bbbb00bbbfc55862e71cc69fc75c1d017e625eefdc6f3fefeaaa696f7f7295eeafce74396b465f4138e55d38d610e8e753ce18d79de8d7937e6dd584ba725f41eef4b1cebb4b484f2e49ce8e0c8395d3059d2327b600c2434273acead39b16ff446f16df093f8d93dfca3ed20d1be36ce2b8a7c8044510451512483083989af8922481445502c164a7db6e0f4c0e9014402448245c63206c65a8742ff23ecb2d633c54bf4b18bf5da1507c12548cde014c4f342fcc80f499c96d8ef384869f8025d776c60c2360e5c8d809f40ef19c58ff811c56721e98ce53fa3e847e83f1ffab0886568936257c558eb50e87f342ab1ebdecfa029bafcfdaea3f385ae3f6aa18c3d8ecc6260d78cd1db9f25356316e0897e781ee4f921a7ce28fad101e5cf48670122cdcc4d9df7bc5d8a4474097a75c679e3b9bb1f12a14bb155f16fbaecb476cb498e3f32e491e57f4796a3d12541af1bbb145b37c496f8852e4148402d0035414d220806201a80a400515182acd848f684828403ec0925092ed8db8ee146dffee9b82fa6aa0984b106bd522031b5412f6a47d14684f2aa26910a4af21793302b828c8b5815b300c1442b6eb68b2d161ae812840489aa23bab6bf8b36628ba506faf7d48110ac5d7a68c294d6de3ef7e9b04f474bf72da946dff71d7d8fe26b0c26e49e50923003125b44d0a58726cb6852493a9fc5a00e43e7e9db3d6da860eddc1941587428097aa1f4bfb236412fd0cbc3020f8d18ba145b2ccccc98036cac3d7d0f0afd1be6efc5fcbd9777233a99a66d7b8955eced4694b25da2169e157868362b36d724f99b40dbd7f053a1271424cc404cd8aa555075b3c55635815e4e92b1f68482041600f68482049aeda1a926d1468c52b3fda19041048acc0a154110d904d813ca6c8a24ac5d8a2d976cfbd44113b1ed2fda885140ef258a31ef554da24b6c792f11e6bd40526c812c5d7ae20bf4d07858e06101e5e2456534b2d39a2fd574c324d54eebe56d1863bc69358a4d7f7329f172e266c336d766c56605cd62d350198d04bde68bab9abcd72455d08b7e3ce8e6388e031f87831b3e69536c790987cf1ca2cd0e4af267618c0e934e4de78887c653e3a1e9a8c2988f3cacc241a24b4fc9f6a7d93b68af3fde91ed6f247b373ef25e62abf5f2521d5551a620d96ee3f21216e28dd7c0bc8f077ded3dd06bc63c47a54b100c54e5dbe11bf43203f40231316334122465ba7c3cbe0d7a51d1e111ba04bdbc648f7082a4871fec1284c5f60fbdd0a5086a89302fd9a75a87e3e891d0e2cb4323bac4964b13d9a5d8125b5ee812f4dafea2ee2795cd7d29b680a0f1d72f41af97976e3c34d5d47979686060f0917b43e8526c394074230162cb8e9d996aea30f1ceac9a3a479ce4dfc43383647ba7a3eab4aa299485338d0acd745abb93da9dd8eed04c1bcac0c5ebc5977823b6fc4597d7bad50d7c1bfc04ba2ac937ef25b6c416a5b25dce9bed374d3c864466b36f94c8a8b0b69df936e35bca379a1da54663c1f318bab03299b6327f9c3fd3a5053366d68a97b8b796fee59ee6fbe9b8f437eecbcf76f20343dbd636031a439796073c6a0146fbf2c552cf8e76cf4f06d0aee467c6741d15ad235b5648b3b24adac18e9c5585ae5fda9565425a594796982365563663b8edff616d9a5a6c63b68aa5e2a31195fd8dbe9a40925a4db6b6eb404154b4dde5878e49f26b63128f9cf95326edead348bcb2ac193e9e8f1c6fed86ca64b25a41a9cf0479da285348dd16a5ab556ac6381154b5f7bea8783521220575d693968f56af26f42573fe93d9119402bea68b833fa0247f104605b8050b6c812bf005727eddd6bbfad2f8cee0bc4cff1294a4c9551a2e90e9d476475512cd74a9992edf8bca6ce4b7a22ff65bc9be337a38839a26a5323ec47c7111142103ad55772156fe830c0f71ab0913414997bcb34aaa11621fe10157e0caafd771522ba8a0f466ba709e437aab9262ad59493733c62b6d5121d01b0aa3361b6db5ee0d15c22c5d21cc91ff855592ff255d0b21ccd29c375e7229d3b7a024b7b7f5c5f6af17e644a2305223aa3ff1f8a95cfe60ece32e0705ce4a50b6fd413de8129cd9e10fe4a691201468d946e6f7de820ffa4d35814c9c6413039b60474dfa84b6be5525390b0f315dee9339baad7b5756c8206263b1582c90891fc03f73bc24e1b7f2236ec4a4272da4407283531021b74aeaa45f08b58206270e19a400273805117280932697883e20848513875c32238282690a46013a01abd833b4eb3841294f66e983627ae95bf9e8258322ca5e7909ac628efc5f3e64b1047512c2ade0e6b444647f6ed10c7383353e998f2e187374613ef2bfad4afaccf026fb82314bf4c91cf9d3968f5ad544efec09c645e6884306a14fa050b09310af04b2d39292ee6bfdc32f7d23c229ce6f348d8ae676e9377e3363b6f7772dbcd825cceec0d5113d2b89b4919fac9a40164896a37f8f2c43218d94698e2c474838248c127095862e412420122f95df4a89caeb476f27e23563bed57491324d5f281486dff70251d1e02efde6872667fd11aa24ff9004ba0c6dcb7d2b4beea0af11d944977494cff8c851dfaa62acf5b7eab62d7ff43f9597b677ad5aaa2b33c295c998706733c64e3cc42c3231ee41d3a8ac9a38b61ad1343ae2d474f17689b1112f814c7c44534d20cb492e033e315f4028a64b115a48845583263fd286ef55534994c6592c67811b87f36daf8dbe399c4dd35ed5c4d196d3f978382a83a8f700ae50a827a6e328b6834eb683558c4057b2fc669cbe88ce04b16b4ad3acd5448e0539ca695c0977c257e0aa074dc9f29bd9e06abaf8b5f1d175dd968f4a674561c437335ddc5f4e54b15d09271c1e2aec2de6ac99ef894d6b9cf86894d8f4cb2fb55d1ba7a6659107a2a27d97e02b057025659abc072f026ae12910e6a81b68bacb2babc005600ed076067210693fb7fd215bc33407645776653552482185d10351d1749738a58ddcaee3c4a91933c434814f80516023c016ae01f5155d7e2fd4eabb218147842e9d35631c355d3c8a697247b11ce52c4739cb0351d1db2e716a834ce8933be85b6d04594534bda4e88621e872de388a5c618515381c0e27b330f73ccdd33c952cdb240425ad13d53667357eb22f4ca2cbfbc9b6eb0f7f02fa4332fc09705e4471f89579a992a2d148cfaa495713e7c3116c69d6cabe5935699233ab8903320157b78c2be3d45aaba37c4424852e50d5e42c4a2aa3fc6457e6a54f364720e82c14b89a317536636e6cff2bbb32b005bac0953fc86a3182f69fbb3ad9138a184db66f9005aebc34a18891dafe2093265e0daae5251b2fd914b80257db6605c0e160d48aca5412f7804700cae0ceae8c7365200d7409ae64dbdfe3f212b862e1cba500fbdc023ac8d346d9f90b1b5983be58c720484d01d0b60f005983966a5099ae4a57657b0d5b35fbb2594cfaf2aa26984aca829a4a94443a95c1f4a5847bd82cec2b7b7906e03fb01b239ecda8042d1547418f323524000000b314000020100c0604c3c1903c102541eb0314800a7e8e48625236170864418ea32886310619c308010610420c80a1999ada20002011d5a1c51008ecf03fc0819b077580e46b3271092025552cc64358a3ca2ae2b8d61b924988a8fac707846a0e73cdcbb04936fdf3928dafaf775d6fbfbb215386b63049f91d849af4db3c993dc67e7dd63e101437e128cc5055b5bbf655cbaae67250266b92400eb0b4875aec5e9fba3083046e115c2cc20923ced21f5640f03ebe61e9bcb4b48922a62cd0d1c186139e8579696fe8e96abd79449d34a8a50c1b42a8f7dd43611cae50c73761cc19d5b98d187e3434d243f5e601304a2f87c48e227631a3d3b631001a677457c3fdbe8e8348917e08490867d19d6213ad34edbb556cc08c4cf271b78b9374b915bdedf51cc17ac4db42daf4c5ff775ffb35935aee26f13a52dbadc65770edb54d721f6cfa1531bdec551a67de9bc7b423dfb68d23893a7132cfa62558984d3bbc1b9f6170c0ebc0cecb063fb02345d6bbe2b008037397355b0618b8021c167ea07b47edfc208d61b81479405b953fd3baf6568d8feffaa9baa61daf8f406e9d5fbfc1afe82ce1cd3823fd1beaeb4020640ae389a9d0eef26504932d3d85d6ecf8152d257a9625f5e88977a1dd849dca9c670f7067391a06c0c3140ee92999f56d7208773d8bc29b083099fad22030e993e21cb639b87a9e1dbfa6620a8b7566292cf6a4b2732c5c830ee7ad797280a7f3ccaf072cdb21bad9318829641ffcc53b16568ba65c7bb80c7d2106451a72473566e670e2b36ee0fe1a422e1a2efd9730706d65698e2956c3f0e132ec216a064d486a9440cd580a2e7b34919b7a8409cb4c4fa3a7fda750d1d5ba90b615ee1a729deb89bcc2cf46050c7c408a25e18926d8748f6fb98c1aec19143cb5e38e229c2610247a632cb6dc5f0eb1692a866d72dd0ffba4bb42a34fbc21856b689e8d46dc7c1d1e124ea820a2f85df8a2c3dd2b33fac9af3d32377df7c5ac2d03b1a75738770f4c0c81323284e5868d1b23a2a8433e4a757e42ecf4f23e45c0952365895f1d9486d443213891befcd1861bd2f0e899089b97391e655046c9b3173a86da67e99e15715db9dfc5722ae0e1eabb4db07a0cf91a43ef6cba731dbacd1a9e55d975256d09fd721cd16208078edd9546a5c3c0252ed39bc6b9baf52f1e9737f45cd6e9c4dd8ddfafb50aa83506654989c682eb97a7776f0c7797a431465008540df60136a8a473f4316d8ffb269f3457c20e384432289e899b47984bc87bef68790824d8db6acf68d9498bc66f87a309b3a88faca7c7710733dda983e3ec4f7c8305efc34e2beaa72c6470d3e3a5e2c72b3a69bc2eca3c088da8674588b6a83f7b9d224741fa5774c8c20d3c6fe88b8bda7c35556028092b5fdc8b084fe3deabc57c57126d14da5645658a13d29c0a4f151d431c02596a8434a22eec48dcb9bfda0c8568b36a3a038d3b258465e9c7504a8fb5937f3aa3244eabe4a2d8c532247d1b2b203b5d8ce2c12a76a5789238c82b146284837c7a2aa43069be85ae0dda2a16a2f95e3bb4e2af5aeab3d514079ef9661c8c44ccf544a671fd842f83198fda4312751575080b1c768572b08c41a0424490d5f2a3f0d048b6f7a0c7405c1c7e63a2adab82722025ac0c1d7da1ee05adfa4a1fa78f4318e5400224a2f9d82d700c8b2cac6e5054c09a73626439b9704f6f98d88e47b3be11763d3283950285d74a61999b31aa8cb4adebc4c4375c15e433742ac8cf39a00432322b0b81534d4734e8fd76ad509db68ccab07864170188897ad4eeb4a79db3bd62cc8ae4a03cf742a676f48871016df8d035be63ec44d88af07c5f1e424c1b6e20002fed5ee6a498766d52bc1337b7ca392eaa0cc2a9e94c5483b77c28359c0c37ea65cdda2b8ca4872c340921c3166db99e45a4311315484c3afe2c6183e4bc89a2fd99c2e3f9e1de090e17926beeb259ab0c9be77ec77b7e4ea75d4ca921bc323d3253929a8457b09ea9348546d152ff7c75743522cb7cf4cb9347a9250af8745fbec403807a2a928981a58e237aaf23f96485c0b9eb01ccdcb5f77e05a4a9e78dd233e236e148d16d933dc46608544a7fe0f9776b34434dfb4fc527f4f08a1d1d9025951b6ff811c9b84e19a3bb6000e4890c9b8d358ca349193001d7ad78593621614915533adae0ce1d9ce90bfb45c161e8f25546200590c0497c4cb5b22bf1673048634f36bfe9906e50382f31cbf54528fef303156eefaebafc336419ff25bfffc7c447a3783319548049459c3818aa85e4f9c547215391e9ff1723e186fbdaf75b92f09742cc1b0069051422e0ff8c7191f34fd65b6850435b129972cba7183b0b8fda1707af19e2faccc1e52403db3ab2212eb7ad71e86be7891874ca2aab0d9380d6d6ea8396c1711e32e540b9b62fa4d1d115ea526516f03745c3e03808eb44432a9d0900854ccb72c830dabf16502f57c1667ffaccc4eb5699b6404e94e6e373aa8bad97e01f281e7e98e853fdbfe708e995050fa3b8f58c162b9ff77a78d47e1406e22c7d8e3a14f22eedc47ac76eda146a2436b35edfe2cd7d091a09140b4d0b935c6a066eec491abd101b666d90f43976e50c92dd6e9103abfe097aa5a06fd38f7aa88dcd4050284f098c38ec5614cf849345b941ba15de9edc179c25990f516c47b7670704c23433f4db350c909095fb19614603a3c7b01c9bdfd76d6a846d997a887d460f7fa9cf68da09c94f1e526de4f7cfb3c00642ad1785bb580aa1e0d50be5b163cfb3f29ef080d1b6fed43ff637e024daa83dcbe7521387d5a5695775435b1ca4ec9a3f22fc809b9a1b9ea1252a84b1843402f17b811778796004dd40856d141302652d302b27da234ec44035e18e90f2e5ff9d533b23023a08302cdccdd3cf78868a2f40548a96550448cb4c20102565a212330c56487a2bbb1c0f6e5b4d42e1e6898087193eba7d01157c333b5cbd90b3e22c4126a5686607f0e11666d462d0672991baaf67bf405d4f3b850efe02ce4b30adfb2e2258fa1b2615001c0f8648f3dc1a6870fd9e81dcc05794927e72669f3f6dc8120c797e0273d3e5038ba8cea2edacfffb0ca2f10732e42509150d32151ea1b0a3ab0a4bc3a8b451b50016ff8dc435cb3b690085ebc1ac8e5fd912294ab4eeaf3179362f57187b1f7f5c7b5b14edfccada2429062e30c7355c0aa82d1b97d7883fcc5a90338a4613952c242f9851c0b9216ceba7737d8196f5f8f5f5c96e027c67adcf735d238e06552502bb887b4e12356557248c4d1cfc7e83973596d28aacdd0c41c93a648948ace4a73df23188817ac60b7e25fe30d277898899f0533864ae7a81d7da653cc9b665e37bbc6e953d4530fa7fdaa096d0a09cf7d6d37bf41cd39c7a034601f7a762f151d71b84991502b5d304d4f87e6932af61dfbeee2335c28286761e782f68c673ce4429a063972408c5fd735e11a46cb03dcfb25ee97005c94b6d6f0a326d2bcbf8c4f3cf9a65c7689007e89d33cd9f9cf4c9624a628ac1950ef0715e1ccdad4bc2131dc55eb2dc3209649b99a5a01d6a6aadd913425553852c74170565513299661c527832f07ffa5876c84441b7964d307fb569f78ea722bb22283e078a288bff65431afd358cd7226de39aebfa3630a9f6ed6d2386215db820c2e37544b65a30994f8e508175bf380d24f6a390f9a0f915a97f4cd5e1aa6224473c36ef60296f0e3d28fc0eb70adb135eeec7e5390153c609373d9450117fff6a56b1f968bb7a125fee7192fcf2b986d06145cc8ac771202364b2bb5655c38b688c40ea2de25d8b7d1995bbc8fdb28867ab17187ead7ff2101a81872587914f18ffc93a4f13dbd149b1739a7172eb4ea1fdefbdb905182aa218f8350e1329b149e94d696b83dee9767cce7fb2301ef994209652e031a8dcd93ac5fbff06461762f77a923f630b40c2ef9bb1cd0383869800593499f9c5bfac4b242a3e50566db50f8a4abb6fda86fc6c1972ee393eedd0b917b4cc96636b8151e5cbddc19d4bd834fc2375a10556291ee4f31cec05a998a95aa50c24ab7008417aa2b98b0a2f27dea693dc9df8a04e0408e1b4d1fb867ebced49c13c111a98c8a882b7818320a283bd385e9d2d85735cbf354e3890067a62f3fc82880832880f36a3bf99d6635aa4d215f00943fb6a1de5c30964806876bb130d45d342b4e6731d216460eadf588ed6f12277c7f03f16b1c6d514c9dd90b4772fe2623fe254d80b627dbee6245bdc0276416f9504ca9bf890b5a1845e47b7774e4cd7440eebc50a83a625a2f756f64e31d96f0bc1c5c6ab4ae1628f85565d54ceba3f75d61d5ac05f0f8af3546814931042f012cfe02a6b4717160eb21a90efda91c35ea47876ff1e6d989bd7d5e49f4449a4b2120147ef48c1d8484b4ef342a8e7ab96d4913ce42534a874602c14c09a03ba7b43c093249bae5e2548592b7261a226a6d40ad58adc6b02cbbd9e8104c179dc3525aca3e10b94d8e7e796d0ea5612cb4eb17439dcd1126c0ce5f1665bdb0f44909b6ea48094ee9e4ec65a2b6e90759ee4c8a92ae3c34c02fcbbbc5756d2b7dabe63222061e536e1da4a490e951d8197448ca59ff9c230778038323e00f49d4a6da16239dbb4297ddedd12abbca5e110f13ebfe5045a4bc23bc7e6b82a70debada5e51baff825b16852971829b8ee124cafc20676e5ae77b1987d3b882f966b7dba0b660270abf6fbc73c3af5324d255313d04b1d8dd17080688d507a4982b8952afdd8e20f3bfda5019c16f6cda80577663de17550c66e6cd6d65a542ceb0db01f270b45f370bc00b778522844f44794d15611fdfcf82155f90c98492ca5ee7c021474bec4b65a237911111e220ab2ecfb00404b96d326e519ac19139e408cfb1447902d077d6915a22f16a93c9698a51c925260b25c6a30361e3e9fea593ae1bb99af28da2c2cffe49c5ec467c9b1a5842684e5b42a7708c93e0a54eb273bd760de539aa798f2821ac22af744d025c07755a8f6f11c970141f125020ce6a7a8840c179062270dbd572d9fe857ab7044b247c377976f7616a263551ef28f94dc2a02f6a454b6526bf4944c4b76ed62f48c93b92ad60e8b437b6efdfa4732201084824f292df24a8f6b1bd0dd4dd0296d9369aa9759d7c25b6c1cf97cc7b8de729393567fc209d570433e4123b062612056c40ec2a7266f1843ac04b35a22e8434c45b67d36b12dcca1b0bd5717ce1ba850eff763630dda7c3da6c66902a44debc9db306cc6d8d99c9f8c81bb0b83786441f01a8ed4ccbb1d1f5cf0e1e5672e588118a9b5a9e004ca90574a9836899e75a2035c36010d12fa8fcb0164ad7f574bd8740f34a549c623d028ded048c180813a154d93d484a3383dceace7f04d2833efdbd93c98e1b7e451003342edcb75d3b0c963508f3f37637100870ba67aee949bd3b872b6ce192f74c9c92f8652c3b00b8729b9233231ceb4059b46ef0193a878487f6c74799c44cacb1ec7bf3124589d0497e4120a8a0edfadfa803898a834bb53014f1fd48c75485cd86cc36bb336a2574a95cf7058526248da79aa9857fbd9f02a7f4a79e9b7a480f272e85cf48cc4e73cd81294be55bb601ba734500507d369e5714edd3c636f1fbe371ee7d0270afe55b74f9c6d58fa48adc7a33cb7080de3a187101057bbf036bc3e8d3c9f31812fc57b884180adb09429964bcd992ad0ea334958d7458cc5430d05bd9b6b1d160db66ee2dabced69167589ece8f7fcd75e9a3589d4d0f9bd3b692f402cd4987d82da0c8450cd0d40bda5b4d0f5ac9de0bf5507e93dbe6182cfccaa46995622e8d00938d5ba0a3f225a1549ca75f63863bdba40745312bb3379ea8e4b290f7f6b66e490a9acfa24b3140b53e13aaa95d9ffea4fd63bc0c73bced1f91850646b7eb0453c0ae712960874a925f2e883b03b8712ba8244f04a8ae045adeabe35e2fff934f00face72507b76ae0fa26c0a89206c47555bb680bcf3887218a20c29c6e02eb4ea9272a583dce85e5a316935eee5eadc0d0fb03287534dff88d272d17565b25c36f8c797c70c8a9c19b8cccb0b1e006fecd1df8b971c04d27519e890bd05e75bc67b0fc2fdfef3f174ea4b0868f53c091321915e80fcff6e3f7862b6e466734f4a6962864ffdd26100b8fed1613a4efdff588c9e6f75089031dd8d1b44f7ae62f374beb8006debe62d53aba9104df087cb9c2098fe5dbda61eed09e2c4b2f325a191922ad007dbec7b321199774d75483c0e09f8ee134a64309f9259a4b59af4b23ee991dcc62eb1d1f712c13173001c6dcfd5e3ecce9565d1c92ae2cfcf93297adacb421b3dd038082ee0b1e4ef057038eab9b83bdc68ca8a0c634a192149888d175087f242b45f9483554f921a26bdea2f416f881cc12818d8e8af5d07f17739018638ee4419ee1b0b5f5b167b2dc7d776708d30dc073de7c7a9de62c52e210f0f360d406a3e5205af3d6c0d324f2b50be5382c2491d9c1a60aba04ead4f6025bac6cb796cca5081b870862e186d20faffc383772f3b8cbb31010c5b207b27b092c11c2184c007c01ace45c757d8f091dd5e74fa3780f27103072f37a52c65e280594b20cd55021acca85cace806fa9d86465bcc7bc190a6441c78f0331f7707835c00f9d2b42d57ef7fd2c933518b7d441deaebe584f0630a292b7047c01be9125b43ea2e762ce1f376705554e523b51005df0cf30d86adf795e6ff10876fd7d6691537d60dfeb71dd7f09ae2362d8d2befc018831d8633328c25092985c80dae860db003deadb59705645943d9566238071f5fc6cc869a219e072a8eb6f022104c2180e3b357624bc846d6aae3186e2cc9b3967f3afa87687e4db1eb80b10bf6cf2f0e5b93740edfe32d8058846d0d98c9bc831daeb1fa9a81bf78def0edaa3c97d52591d00ed062ec9d810362975c5267a8ffac576a9d3be471975fd4400838ac762f779740e09d5221264efddc6bc06b137cf994ef4af5fefc37844c11c03e31cfaef4ec318011472f3ed60ad40139a5e7ebbe47ecdc6355a198258c89545a574c34f88d24b88df1c64f35afca3e5a38fbec75e90cef48cb2b5162291cf3fc10e6561c5edbbec5e022c859932e918b5736ab7f74fe45a86b161c430703e4efe9d16ab981ef93ff545656bd10dd3b9173d3b1a7f47f2daae551142c3e1e9d24b110127c9fec6988e8383298d47bdd509e087b3712c22a50e13ee6455a68868e1ae32930041fdb71dae9169af18d525332cb42255835a66516075425b38cdb51591b6396398ff70dfbb211e37fa69b6030588b273dd17a6f1c0145295e6164d7bb8a8d815ca1464c9fa7434fafac88e97370b9402dcb667d639548777f7e0bde14a93cc3c93a75e09959f9fe2dd802e05821d30d64b3bc69370ee530a802c90d6de3544c29c00838c755530a504829a1f119608a03a26871b0c97f04b274c95876f017f98aef9c0a6634a9d60ea4f597f4b241927fed9adc02d6f05d168cc28f31b44da21db9ed1776db4279287ff4fba185cdde9172574902e2f48750eb860d855b7ddf08a796a9de21e4f7791a55bc06ee1a50f1052504d85d450dc5bf712a2773322f72d40c32bb67cd6a5edfa31e531264ceb9c72a955e3c4d51dde77e3fd66c372323d26b472c4403d49988d0a5afefad594ef6323bc15199ab8d006ab4c91bfa193dadbd9240467d2ce423a9acc027d7453f0b0382828d1675f43ff820d09143678776e091bc806e36842cfab274bbd6afc3568fd782a2acccbc0ab6416cdae03aa815ed6ea366b6f299fbace8236ade0f20d34d600023cb8d69658de2993499fdac2e66f8da4b0b81f8341376ff0c7a4c41bb6495213ca6bc63289482bd116e94494d9970bf562b60a7a1eeb96a6617b9d46c8638eff4baa30d8088bdc17bbd95f1cb840868794c1344000060c07dbcb34c8e0351d2b4083565f17ad91558d3b2b6c8d6913d0404b296533667d3702cd55a68a3f80ae56e81704f23aacba083ddd010353dc07b139702de3bd58288e848f353a6a7eb8c027e06df83d92274ce3b4080c056b1a4d28ea67b1afc210370139bc14698967d4aac8ff76a0ce376a0220afe6fc35ef8c77ba1223d6c99165580a9e849016c01b70400b8aed6876f197989447342b9f5106d8b86eb2aab5e8a688364b2bb25618c7d246f40bf079682fb9bcd36ea2dd4dec51ec47e4b51fd34889e8e1fc464183768b44fb3a36b14567d03dda0312fe5be04bdbbcaa947431bd23f947e573f6213681655fef0c3566fa0bb82dc773281f8c35b0b40cb54a4b3ea7e6a4443224a5034f6268071b4defe7c29f4b8d1a48d6ce212d9a8f21db1ee6c610e6aaba6d4463879da3801a9d1fe8a581bb3090f5504e2b5e378a7a154933cd84fac394fcac741e4da49f0f261345ddf97302dd2b781b8602d2caa0a91267452fb44b03dc86625ab6079b79053e93d36c62c212a55114626a91c12e3aeda46ef720f917a7612c096177b2191a72644dec2c8004206b4625a82decf10d8603181ee9457db8f1af318fdb2550fb085d6dd58f0c3fe15ac9da8a6067b1210c37882aef824200442d8054ca05e3e331daa6edef384ab83841f64a75aa53478b73b8be62f7b2bcbf635f763ec5d83201714266cf84269beafffdabb613d3c18429bc0ee08344ffcba48b9494d098eaf3a9800f58bd72c8b0a06c71cdb2173dc9a985a5f041b3478f2d3a1496c9b58f1258c7c9815352411eeaa3d412874849db0d772ad948171a9d0b5b53b7fd757f87d3567698f72c59a6ed30a2ca9a6b2992c116ba926299ba381811f16af28e3dfc30a307f1f51d4d8e8689b5d83396274b7b35b2aacaf17b0e390feaa41a378222d8fcf91846890b20f21fef92ba663a67e43e6efcc7ede963e72865043c93266efafc6046064068881657943418dc39f11cb02945d4c25da0d4fce441dd4f0857fe3626445ce26f1b9021e8eca4bbe2997c2cbcdc1019837594a5f0042a7d9d9b6c40bedcedb88cb7af89fc0fe1dadc0db5daa07bf01d4509818acf0030993c876431030a5979403c29f0331e4d5a3b9d543940c4cae7a0e7a23627ff2a9e23479b86d11a2e500e4deb3463c09137824840b435d4ae203298b6879a93fb27741834ce8e0d99ec8ac39a42853c1f322b2a3f54b183e08683571f03e1148e88586829c0d1fca925d735c15c4c66e1eef2ec2fa04e9b2c8094a5195703c619f4430a47d2c89e6280f3aa0b845d9dbf3c236f06adad99d68e453b02686144f2a05bb20e01eb271432325a650d543ebbe76d9294d583009418e0aa91541af1b10f55b8649a4aaa657a7dc6b7675975e1b1d0ada7e038a8a1805bde04264d4e54e64127b0bb760ff29a0996b9c93fa962ab883c5657928f4166b517bfc49330f897402aac07c7f20a8c48f70c21b7862a90eb8c9e58c4c10de07a8fe27636043bcb68181f1e9ced5e051f6374d05683e8a4aae413645a429d148e63f7a8cea9944d19d18b83a0b6a9c921387598db49f63c6a301f1cf892b013713cf7db446f93a4812d618c8895f47605d56ada68ef5e69bd39655b802a2a9cd363f8ab0dbb28b906f690de186feedde7b97a2526769092ef8b45132aa2e0c4bfda281b366e7053d9279c20e7af5ecbc0732bf76121128acec470c43c0a337b5458b66c2aa9918bba570fda6732c6af2b6771ce05bd0c35cf1af9fe75f607576995e71c13765b689fee5730f8c2fe10023f3ff4a561d00b6ecc955ac9361c6d7b3e2c82676298d4634acbd2ca0c78e6ad297b2e14b67955d8d4af97e562fde4abd654666896e4caa2db15067bc8e1b1a70cd7976d1dfa3988adcfe8a7027d0bf1fd5f961e743985fe6004a551021ff2af40b496c2271185cebc19e227da680423fdcc3798e15fb5e24d7132c3b08a0353ce43a13471070f87d03209e87153fa2408e1d2cc082ba437550fd95ffb744ffc1d079ee0a77f2b26eb91df4989bc2cddc520129db2cab8d8d4ff4cc6b5bb6b2ac0e1d74520861114c2166ec8fd29b091686775f720032049e9106fd0f5e042b10621281450908d8ccbf599995d3396cc2f9cdeafac803962070d2fde02e4b179120a9d303b276ea620ceb7cc9537bc47468c886af415579d2b0bc8a51e4e7bdd1f11247154b000929ddfad0c2331a58d07e5562f4fac87ef604ce8e58af89c9e45cf7f78ae5e79b6433ce5355dbc9e0c08403dad9584982af5f4000426e920844382f591fbae187e3b84d873998fdc7723e1bb0067162899e72efb4af44bd1ad6ca51608153e90118cdf43934d81cffa6b9d89883d872a5e9d76222936af241b4182101fc3e426b27761b1de5605506efd1eee43032cb2a2033d9731b6439cc8c204640c9dd171c0262a02b7e3daadef40f3df52e89eb6c7780d0b82e56d4fa6fb68143f6e423141a7650b1bee2402907e0dbc079d33bd25a374bc57ea994a97d0c58c79a9582f349f235b0b011293f0d188c8df9457295a16d0f1b61cf1501c98f7bf6ed118074a6d15076981b1b3975cf966e9db4e5472b69740c1224fe92155c80a3c96b0638a0a240c222b1ce4cbecc59676f4e09a30125dc35286016d0781282d562f0ce5abc288416045fc0baaa899484cd6f4eff383c86036eed0d5879cebad39010343b266aa626292da11fba92b6ec25f1c48e7e6343e8d2f1873ef4fd3c6cb981401192fe55956e9ba6deec0cd4685dea54ffe138e075acea5745a7ad9a1af65242b82646dcc5a4adcf144c614fbcb06df3cd1f655152ecff7efa09ec8a8c29465584f613926b9df612e22cddcdab23cd7cb82791858921794869064da0bdacdd5e5cbc060d0104595d655af5db9b9b3b8d19cbc811cd80f051aac3d2a7026c171d918eae440e78680958bac2caea93435699f3f40a368eabee91b17404b21a9df60d0c7e8cd11e89e58804f1d5e5b510c14a89a2af87d04f4ba3a39f0844782a50446025101a104637d0f9b2e13f1a9ea26a3a570d605f58fe32ffebb9de3a4830c436843888e6318a2508a82f61ea838e50528e12c4b64d85819110f655f93003383634aadaf92557825feb83f93038772181ba4d6146a6fc385e04a71ff4f53bb4b4565358d5a86537c01f52d34f2df495c324b3206f4942a41ec49135ddff20910edd5ed0567af17f3973977722e61883838e4afbcaac76ec42a80b015c4fc5f547296d186ed81536897e730ded1724e603a8ed875c485dd9e105d731dc6ceb4cc7ad81e1d460709b969b9ffc43e111712737518ec2440647f2e04d6f18d983f0120897e402471ff4ebf67343f5668d6840876b70290dce12289708cf189e72740666bd38f1aea884007a09ece8b78b5f03c03871d363de650d914c42d794f285fac4130b07b000d6a739c08978726052b98adfa89d29ee09558a57ef074f1f2c1c171ab58d473c2599714ca91b30855dac9e0a0d78b1485dd1721fb92be80b2f0707d80959a761727cabcb47995af8db58d14ae32b68d60d4ab486570af0bdee626f703772b385dcea58fc948d42416459c2f12f286ade8580cc3c6bc751e31fc12a9b481c3afaf6dfb7e740504c0b2e5412ee79bc064c8437ad015a2571bf60219ef924f2d40313374c1a3688879b4388cc993560992e1958b6357ddc0aafe2455a6995eb2bd403c0cc1242c328f221bcdc5f3a8236984373a45f20e31478ab4b588538afa3ae12fe6265c2fd6afb509a6e0fcc545de12b3bdcb6889c3f1f34edf839d1cc83edd395c3157e91e6e01a3520baf184fe4a57092665d4ffb1c9e920bee40ca71cf29b596707a7b451a0bc9cd30ec9745cf9722a1012f79232d5fc0889a50245cd581213f9530e42b59b72170d7c195e3756c635c320f51f0584a47a79c100e6a36a23654bff2a3a3d772a407fc4f59064c2e81c4213371496b7b8bd2306751d0c25c3230364850d1036635582637d1954d3a11781f327e00ad371e4509628a37569d0603d0e5d9d29fef818e5dd6d057f9c0a262953b8a27cadec9348165af441a4c2ad0cd3042f1e6f9305ab4e054b3ab38c3688886368af0a890963ac15fdb34101989007b8864c4954b65983dd3c235d6b8f322c33481586c040d931c45f0044e731593a16c141e524422d0e61de73c4d48962f12c0e8c1ee79ef198e95b7a63d55d287e98c5a50da1476f00930b94db456327e7254e176b3f6558fa7131f0a365cd8f5b042c9f241f6aecb75602c0584f90ad5757316c76ff9fde88d3977bea38db22a0d86c5ea5c74089745b7df6655cbe4c8246c9119c983015a249b648916f5786a2ee1ed0b134c975d6beddc17063a5a84c267f8414afcbeae702f8f0a8c9be4a21c4cb67c5947504a9c7aa3010d523c5ea12177283e4b1114dad56e5b013f1dac20cd540e1827e7bcf37621a5700e15a85916ef018bda5fb8b5a0c2865bdfa3f2da24bbdfe35fd2f1830e23e4fc37eac40cf85d9576147f46a9687ef25178e5418b8f7fdade3a9b51a0a5b5d0de3fae41800574eb964cd0d5f44a2d96816106d4e76202ec6fd56e2dc8fb2bb4517385f4254c724b9d08a325111a22b4d7423b153aa5e8158ba6a9c152d0f9b3f7c5386aa5b551a44241c9225c115a1a849a004d85f1ffbc25fd0add587e38ba148ae48936ba325b2fb3f9915572b0206869a82108858a2b6de7cd5bcb3daa74215697643a0b3d83feeed95ccdd605174e0fadafa95c2a4d34c4d94c99e09a2520748cb438bd703c9800188ba044a1a9fd5dc52035a62cc6b5d1a3b0ab6c453214c859e2e68e516530f6047542bc8df6185ac34b4e69a9932a19304c67d0d25d2e455a4b03aec6212a93e19a0a68efdd1a13354a23d8f230e25f5a9fdd37483bd0c31bcbf649884346ad6a6b5a9d5c754a3f2aebe2be3eccc52286f917f00d7b1ae8a5262c308dd6b22d7bd0afb05184c92814caccfd4124649a92c10dad871d083d87eb79e0206332f6120c03868b0d26a620ad24a1f8029e386306a51c0a4b465c643ee62df8550baea9ec3f07bc1e634fe52a4e2625c00fa857190675a7b3eedf75878c54578e8d98330d23e374221192cb987f46b106bd57e620260b56101aa07c4a0aa3893df0e252078a0749a393ec875208647cc6bc083d41ca54905933fd2f66d01bc97576b18a57821280394ead1e547d74f8a741825292b45230e54a3c93dc820a2e6d911e40d5aeea8c4babca8e9b54016d5e0a7b38f10d4283a67e4e09f82e7fd191283752a0bc53618c34509fe288989709d6ac0d4f93afced45b14758ef670ded51d05043fdc0451a1142d2c8daa112a3045b028081b22bf3b1d031f986869944d4afe25a0435d95ab36b7a4bd64ca1c93eded62202149a4b8ac98bd879a2dd345530a98c968ca305f5644711909871f33db7c69d175980b2a205e7de1e580e4a04e1a2e8293936cc2034224b1dda6fcd77f65e7ecd74b1667d54a0c95b66a07ed291d95aac62b118899e34badb54c2ee4a3502b26bdca62e9227ddb3b416e9136c469c9bfab4507075ff06a69249a136546ba081cfbfc0f983d648529f58485efd49eca9359e4207c750b9c86773d0c5a0f47992665c5041dc319a264ec93ce8c606aab4992fa4b83cb2a8246e7a7ae5cdb19700a93c3676be603249fa7098c7054168cbaf7a507981c31dc7fec407dc9faa57cf602ec01748d88c1c2d1e41e01959b4bead80c90a5f85db166090ce2135dcd34567c532d670f14e1015e6a9d95fab4b905c3e54677ef4d6506e9c1035cf07e90d78cd2b1f3518d05227ab9517a87f30c420ae825ab9c66febce55bcf74c8b1159a8380f7548cfb5457530c924903b3168aae66b83036a9247cdecb1152c74376787f0f9317f0a399cbb50185806aab6381a5a0e95a9df3e485b84b79da02c69dcda702cb8df4f7d3919a746b3029a655e1111131bdc42801179b381dd5b1da0aea9477b73aa9520b9865f8539826f16013d02af8f3a93f10324141c6b47f64aa1f6bd68133d14d8d8de751c95b0d5ecd4d8afe1c2e67feb66c9e79f7a9daaa801b45f561733e82fa88261bf37c9cb6eac2cbdf9a57d211bb4f754d2f807b33424f0719b893f9ef59ba4dca2073e190da5177ec1b44b252383eb4073e02186f135a17cf488981c486acb7cf323743e887f671a3ef3f271674d6a3ef1e473158857e396124b1ffad7625e10ce17b18365e49acc80827cded063879ece88548c10afa88cb4b343433a11e052d658ecc6085ff52504c2fbb85d9cc7d209e3313bf39ad6fc710444efe81317eea1142811609dbb290699f3c94ac7aa31d170817833d74a1557f60bd9e5c29d0038a7fcf540aa921521aa1761ed932abc6c69cf0c9316957a62bc91364c7da99cba0c0191224367b7919a15a58025d0f99db884a4043319e552322589b6e9f9589276d49f2471763c6569e77aff870ca5cbeea5539bc7e1006f1a078d2b4582e6d56b470635c85de6937d64f9a74d83ff5e75f6a11716f8876ab05382ccb3ad0e42536ace05b56ed67a7b9a220c8cbdc9da742edab8d52910cea621bed61acbe79127a8a53f70973da62ff7e204ef13688e96a19924ae1c8f243072ef13a418ab396c5b47d5d900a08f9667bd93d3c078703d2ac8fb5633aa0a85bd1b8ff09206b2d643d28bebfc10140f9c6b4cf44c1f80f5c1f0bae119fde351a5d254980d56805fff9ef2fc0e3287f28dcf6f3b334b8f0cb156399f806db6c9e107d40a1c9915e1b27bce9874ee03703061b66cc1025e80e0082c68eb44b43a6a8c4a85a864491d4e47308c78502589725969988a6a94438142b4ea9795fc9074657b21919e6660c85e8cfe3f69682642e5c337dcd0935e7c21441716bc05f50b1589432a3ed5b0a30cd2bc3fb703bd52957ca85e1e817a67ba158e790029726bca6516ef278b4d526c946c97f61350550cc5e3aa311cde78dfd6b073f95043b7ff622a4d2c56a0682c70d176a77dc1c8cfb8cc3f47705c3aab9699fa8582b94eecbacb5fc26ff9c14e82c96814fa466958078b249042cc5cb5a26d9c7fa93d648c630c31a81c2d9e25761eb0d765b601e33880c9c90e252899b8770a5b69c879b1e3f1c8964d8b93f112365fbefedb5a5fe7c86635fb68b4e51b8b41b6318ff538cde4a246ee66f2f3ed500290b36ec8f350534c27f31dc9a0bfbaf9fbc1f1ef6c88b629c8347bb923c13d8e26e1d8003600fb62610825b6430f58c2428c0ed42da963af2f155436b39e529053ba0ed73d38f51f351f440fa55870ab5be2178801649bdc2dabbc03744252c36938b6482dc4a25e35fadac458fbfa46bf6e45fc4c79c6d0fb66f772f75985504b9c62faf71b7ea827414c1c90f57d9c94d2adbbaed1b4c2914f512654557563f723eeb427dd7a091c0c9fe8adb724977652f11c2f24cd6d1802a6620d4e5c32e43113d43fe2387c00940b11f546b0f506f9f29a3d96daaa99cec40bc5c0f1571880e9b7b409ec2361d2860d547eacf2ff4ae51f6864d8319e34d3c75060c08bd267749bbb759884f777a6441c19a4c8b09f84535f4159b33ddc59e10ad344e8ab14983080c5d72db9e138c392595cde5341aca4075388271a32c1d0f8ed0d3fb5f9b02fac54c1defa6e633e119643fd34f20062cf3d5b45c347b8e79e68631a5d977080ee6fa32d3c303eceefdc50cceb64fbb411096048b154f740d173afaf75ffad438e2ebb14d4338823b4a17cf858d533eff7a0fc850b7a754b324e234f6719d1ea3db6371f7d3835fbae36ffd11e9cad42c584b3a3b77d4019c7119a0ed542af34812f816ed7436ef97413072fdd77869a868c76d3f4fbe03166a6921b7b9dc1a6ed83f03ff7526007e7bc3795961cbc46e2441393fbcb8d932e7019caefee984c5fe323f6384cdce714a8630829dcac07735f543e1c7405aa7901dde9292720704fc0d73df6ee5f8f73011e8e97675273229b4edbf459181b5edd0df3bab60be1bd138ea09291a5b872d73609aa16baf8fdaa2e744616840231503a160ae84643661371dcce5800f43ae3bd70ee39538bc3934043e955122b2ba0e80a74a1d98b8aee71f49856fdfc0e2c73bd5ed0996cfb20517b72446412c833265eb4797b4dd8c3492e9dd19e4195cae8cae04b09336d56b27002d48d9ac59b834d42bb0ce7b363074d09113fb3fbed81f14e00b8bd7080b26aa525c3a9a8bf4eb3909640b5a9fc9d057a461ce0df41bdfc778c01f094806a8067c190c6a8a6433628f644ac41ac22721d1e4642e4d15a3ae61f1fa16c4ab0de62edf6a4e2b9432ebae14ec98daa407fd64e0994337b3294864358bd6b73f8eeefc17db234ed86446228944ce8f8dc62a88e644609062db2af1d54ea95a4d7d78b6f806bffd4003648a637de8397daf1bc4bc6b9506ff703ca7bf8c4c1b13376a7bc9c358f8687f54d111614ee4d2e97e466ba47bdb52dbde7b42d7c0bd24888e888a448b5d53d9a12a62b7a7d2e9f6ff5f0c636a567ffe5cfbf346d95d3c2f7a4d030626f7c9c5b3563d948c9862eb34aae84ac24ff4ab69955d2bffc383859fbb0f9fbdd491f7874d9a521e6b0dd9f8bf61bc0600e27847090c14246304dd1b8b146ac91a20320f785edbf3bf24a07944ca2bd5f8770a6fc6a2b7549925518ccd32885648e646c65a51c34c3b85fb5a0d18d0d703d43d6c73374b4ff7dafa9e7394b4d891ffcf4f33977b577b6a75bcc5a1779b4c450cfe090edb8b05683b52cca232d2800bd4de9f3ec97b2d6ae502cb0121f0fae1fc04c33969015058fd5cb49f2c6310f67cdeaf4dda52e3a56cd27be99602e8a034164c79a9e933a981799db4a1599d2ac9cd4ff3cac28e6a2fc019b27fc68ea578d62f7cc7c2f0899155746f32c22f89c340edd0c5c9df886c4ecb3b00239a979ed84be2f3e2d3b1cf371860dad50902209ef31e736c015886893331f8c1ed7d2ee42560e0ffea71499534927a2b156ea5b3403a4bddcb84be6df8641616cc444738437ec8bd7ba70901d5aca4f94b270d882e83775234a1d498b32e0300af1cd598bb8d8bc925b8185ba61a33d852977ac0746ccdd576034040954a2cf5e723d44747a8ad5db40abbe7df2c02ab56ad74150e0221799dd01690888cd1ed202f312dc311e726396ac8c2944ecc5229171161f24a7d4255612db2c77ced384cabec1a7da14ef02b52e36432392dd6611b362787ae80ba0249215314d05f2b04007ba52cde23371bce2af875ff161eeb179f871130bcde2d20f9d8e27297bdc7be9b0f169edb9c049014433d366bbcbae648495f774212c1f22da2df003f6f7d10730ba418b4e6d679a0f82fc280499fd537022644bb0ee042fd00fbe3c3314800aebebd9ec82b46315a54a746350e7e5038de1886e536aad20ee6e6f551f68f39042987380f5d0f255c1e59580bb433eba7c70d019f84fc59aeb1cf4581399644523cf5e63a811096a08308b545b8ebe623ccb828c759a685962e299875ca435c953265938df503306197f9a1a40b3d63bb4a0b6ded86db8c5cc3d3caec9c06a727be363ca48c8cf956702c46b8ad7b5a24b256777b5cd9198ac64d6a986b422ff17084d68a020a02ede9910638918132a84b0a91522d915da8c559f1da45b2324d6f88bf3b5e5ad20fc7cff44c8538bcb0122ca467c0889176a19500c480f9205844022a3c6703aaf99a87931c0c9a11659f1a59a407f366108dd9a208a512240586a14d3bb4e2875e01949e345ce6225ae4c0b3c7a4b98a1355227c8a6ab91dad5ae63f6ac47f003231b82a1803fea5d0c8c3a738715731051335ee6e0f8cc79c3662fa9b0e086efb5aa46846455e87500f22d4d3e18116c4ecc1e99278825b126c35304f08bb3d8237ddd409677c59df7ba98f8113800b4450841afbaaa7414885ea5560d91fcf5163d83bf319575950f9da09a137f8a0aff38b381d37145214f5d2c235c22839c87654448fc9d280be2401fce9827cb8edb920fdb7b070ee90202607cecea3eb9938000c2fde48f1a0a042c0c26f81f6d0bfb295b00f8b7bb3f4fd39b0590190196ac7713df1f07383e01e89de927c09df2c2b0567e41a3c1a3088a443442dfb1bbbc4efb6b97509bec496d947782a016a3978282824acf5764cd5199d544f3754899848aed7901753b0c340a330f4cba3ddcf498ece354a25ce7cd6223e61fada0609b7ce8f45c134e42d917ecc77ac4a29d5eb56458716a5a49c33ceca3f2740844730a7b7300a1dad2dd3901d493a15e2ce2fe25c1a66c408164ce08855cc84ccbfd4c68479079b6854c31d0bcbef2d41ff80f6e3168b517224b03590b5779d7984c77fe3d34b54a410383142cc5e644cdfc42b29c71ab7e3dbc04765b1c25e1f87fca4fcb89d5815cea918e85d0e8857e70581fbd898cc6234f06d1f47ac1d1ecaf5374f2b0e6db8ffc00b49a66a15910cd83888931619f2beac4d1dc0613ac6be38bd0292bedf6f64dc467bd515f7b77a5a1fa993f0947cd9881cbcad329aabca5bf76284bc738a0e62a7147294d7b22da409239b32c24b2ec0a6e9f95e9858b13e5c85f7c805b76a3cd5fb3b057ada016af51f38a1925de4411702a7ad6c7a3f036da0dcc7249de82fb6eff81e84a5dd8aa20cd5f02ea36ff062d2ecf872d57cc06bb4da6dcbf02137c2aa2162fe420abef8eacc0d0a072e81704bf0d408a0313745a24524d230589d98518da20a344ac0fb7a81c972e817ece4b10e3c46c10093b217de755c85441968fb9e35a261d6261892d8ed3165c155b7fd32b317934c91404ae8cdde30953f7c5b1ac1a3b4180354a95cc20280d9980f91d9f389d85f142a4351dea9c1b9822763a311fcaa55667acf2c445d1cc703093b611a78c992670b21883a66b9d41587de4361a9ef1e4ec93c99e532c264d4cec72b223e99bfbf22df61ec1af2063c47873f066afb5a6e8fddb3539d01efbf33b213b02a7198bae81fee739e635e77192f60afcf1b0798ee7ee9eaa73826a94f5b6beb5c2efca88390ab549cf6b139b3256a4f0e385396c6b9f49bd6340ee60398658c65cd23cf202ebd2d9f93aa918b8828d64ab0454642b3c3cf9076324904da0931ec81eef835b55a00c5419334bb22d21905d22ef25696c8a304ca4bdd4f90ef14cc5cafda2c5959a72b31e9a8a1b7f6a6f26dda14cd09492e04a58389912c9355831a7c43ab4db146fa52e0a7f1b314bf5d58126482c69c35f45323472246fbb9f05bfed049523060e1e9bc67405c8a406fe0d3d26f4d07a1e43656e7ae03d7a1965fc1039f435b2834202e57a4ae264176961f5f0d5e22f75e840d606c31df131447f43022b95e0333f09651d73d21fb78954053cac405d59726585d46c1bdcf1c65c1f78b129aa881b08c40bf961a53ce65f59516c1f5f88b66d8f5047ab7dd9c51f0e57449e689a139f8eb83f6a2f0cceca9c759d3841fc7e1392f6e03d4358fbd5732902fcf8bbfa5bdc10271a5482fce5ba3a4575431472e09b3b14937d807f084546881704723a1ace4c2031573cded232488579206891ac2940340aea92e0643c26d362021b1e354961c84e8942251ce0f3190dc8596e9a78efdced7e88b9d37948ee810098249c6b43f43cabe52ded088cab0b2b29597c28614cec7c36945bc859d4e7adc88963e9432a979a45989e4374878a9f2b40cbf23fc886f30e8b53ee85574418fd7a98421f187b21fb1206a21f820686b597b03b3c032dd2f0b891f966be17438759cb9a34f21d0771b0f717949961476bb88fa8605a4251af841962efec65d9a6cb4474340c2ca9d75266e66357840f3729ee8dbbddd259c3ce20c2252b6037b2519fd6422c32f03bf6186c4d951b6ccaf08483718720700c393896de944a1b3fcd2127b2d43862b43b51efca066a50028c6c548860160dfc31952c3ccc89c6bd67682abecc5684b8c99a95993a32c6de91e6a0a485c035520fc3060b3ea6cd237e0d437cdcf727f3d0dd2375e85b736a2c84e81c13e0305e3c920e36454528d7f428a5745c81d76d003905bd074d9550a991e5aada82de2b9d7f3336de5536d0251330764a8a11e94c88ec9e36485d74299cfbe9e4fe98be9d3bd78e59dbebc95cc564f25b7ce13a04675b1b22109a7103db6bae7e7d86e3cfc67b88ab3d49de6737c0cea22ae046cdd86428d36c47333f6fb15165b9d75e219780909a368e201e8ea4ba1c0762d59881c2da19bb493f528e15c2413a97a7d7a6a5beff6bd9f6ac0d32a0b6e209be3fb0dedc6001b0b1b00774d68b94fc8b1422427c28f41f0b49390db48f0854206037fd741bc736513cf173c7355ccfa8d9f993633a7128071aa1561e23226a140ea34dce2347a8d700ae0a207bbf4ba1af90c6139a9c2daa6bd99d21a5958b39e46cc1ce4684c8ba8bcf2cf40109c0f15b48a023df1c02a3e704919a50fa58464b6a598c60f8b2b6c4eda4e0daa5718b73016d710d6e18c7de337e090321c9087fc70f90a2061a1876749e896849a21f8e8a1d5a80e4ae8b89d1cf4f7f3b067373e8f110e4440eafff17aad8254475071ef62c315d681a57ff5fd04c3030640cfcb738de6e463e27b1166f14e39f873f754a2992b7b6562f9db9644ad74b6789c4e0290935c526a7dc2e40752b165924c7742b80278cca9c921d07e93b4d8801095743011646d666f9327814e0beb252bd07524cba2f25aef03e6abaada91fe6fc3a55dfc84312040f4290b07797ddcc0f060cc8bcc88048aef7fd3eeed89b98b57d2361c57dcf40fd914ef02eff6c06edc51299ff47a88552e3fcff58b507c6f2898414acdeb211cb02c284f302c30111974473042895b042acb2215ed9ddc4bd284f0e6fdf7f4d294671cf6995c223f6f8d670a6f5d61c002719b4c114e9571c5282f36382a11ecd8638993bef6b117dcb5ae06daa80ef6a5b4104af00feeaced34e1a43a073d2904e3db128564b61c2d442affa47cccdf018d0860ec91182e0566b6ed4215cad61fbb89a1410951a2ef6def6304db2ef0c64d9b562c31ff9438ddfef93cc54391dc9f0402bd89cfa44edd0f3c98772fb5a13eb8fdb3220dba5faaa44bc93d30438eeb32cd1e268d65457defb690586666294a86b6b66457202e8bf55ae100bf9a425e472fbd9fd7973d9d880484023ff170f17d5ce504806482a3457a01509220f25745bc0a5167514dd4fc826fdc6b75ad270c4357d10e622226b7615fd60d8a7bb5af26135f998733866a955d1be786c9f0f2e526f510cdc53a5f482aa6666e4e90679438d728c233a1f9c784440900e5c6b1cc4f8c243adb0dfee3d68561b0d9eb573ec4eb03070f5c261349e9f74c78d5bc6f4b3569cd668b6f1eded56b63938bb6882fbf93e1f37431c7172ea3c6274ff37ef3ad37e47e42ed9806e449ba9c64915786b4a702d357940fcc89ae5a45898ed708f2d10f3de7d3001f7989fe70e65b72f0c85a18c190b05526e74e3ba36a9d919a244a4c7a44efe5055499316ceb1100b92debea0cc3a405444c6a7f21125b71e2ed7497cc82bd63e8aff86cfdcf023976c4f82e13a12d3400543a3d54ea92a4de68635bed3901426a421b479b52d7d049be1224e0949668555228d8d30f9167d983ffb57cf7498c23555efc2ef3e95a67ff592f158c1d0bd760d2a8e3f1eeeba20c2a7fda8d4baa37d977ac00b2fd12dfd3d5d8592012aa03a9df03158f7e865fc210e15a1d458d4618e22a3d31ab73779cf2107bd3845807a3b86b373cc235e8055fa260cb0dea0bcb619d2c64b268b7f803b8aa4973f443444462acf708218e223ce31b4026b9af2fb152add6f1f4574db496f95bf9ad8d509e0cff6539c7cc8f472f92a863a97ef4ad552ae62a56d73b079a54aed1ef5e2267ef4026be1d436f41ab883c3e3a6507503677a3ec676c33112e2f1c502c485e62ef82b6ef146cb5eb98dcda9e68a76c3acea61d92890dbd5028af2dbf7010ce95cde1a837e42a5b6c558f1aa4716ec231a0d5decd1145aa3b1a4212f772d9f297260e11b9d93214cd0f0f080cb7808290f1a2c5c85fdb1a2ce7a811372f076116034340870e9fdec5f93d0dbd2d0ea5031de26398497353f09cb9ca624a8836d5810c0303514d9fc6fbd17165c09959f9e589e2356cca2aab5f7610d1911bb7d267f7ba3f0fab8222b13515794946b288653cb49d71a01c38990cf816f43f1981bbf0e9abb585522d06853f10d4646dfc8b3b8981b265897c080bcf8c73bede91817a5c8cbb1256b936386d8bc50314e1e9b5a4142c82ceab88a6847649814070123febadb4f214fe4f520981fb15574c5f9f7cb929c92b5bfc0a61dfffefaccaf23fd36502982035af9766777a18e5e378cc6edff2d7455b0516745a02da7a6431605fd4dad44045a8dc658844b49160bfd00cf80b12226ea1f3168b79412d784b2b732c244818bbbdab4ee59191056bb627148797a1d2f31b028f30b80225f830ee37b7706918ed61820ed4ba3886cb737311e5a66e62926e0827927121a076630f9d51ebf7568aae3684a5694c108f351ae6b743db73a613ba791f824a5b565439bfce2f29895e65eaf19502e5f74447509649111e04196006821973e52ef78363e9d7995e86f69a7224f1fa987ef1af01aad41b3c8ecfce2defbb59ae282057150609b4ebd3591a6e24e8d6e4f5da17992d679a24671c2288ce00b188a341c94be8d390d164755ab093ed651dd34c68b9206bcecb8e5c35f5c99015a50f3bcb3946405b599c31105fb169e0d5ea7211308c626a1707c2921c10445eb52c250b10ff12dbf140949d9c1b6e999d1d21028c00ffe4f37c30b9130665f723c1f3e995ad4dccc5ddc27778d85fa6c19274bcad741f99de48445c3d7b604cfa6c6d811259c72ca30ebf5d4e40e598417267fc3f1109c4acd23eb5fe019c28ffb6034874b2fd0b9e2c4a30f7b466f5863b74dd2acad4b3317d6c4a807d9ebf1472d730717c703d753437c77e94347689da52f384eaffbecf92e66c18b902b44ead935ecb0214fe0f46cfb4cf8e68518c1dde4ef4c7f814fff2f69e523a20b6cf431b53fbcc21b47cfc40f39d50cac8e532cf4d5625fd96cfe95d68648cd1a8c2e1b36843265f94a36d54ba937b254820c29bcb4f5ab2703da62e70c078b43f66cf760c5d9cf92c8d046c78dd7b710e57691d072ce5e92fc974fd774c7f8ad4334c386708f3216a9e514f5a288ec5c76dc32ba5f939b98494d0ee5dbe9c570b8c821d4d6919169790c1b679fc7edd182ab2cac1e5b0ebab5c8914c55819e7b99e022579742a100861a411673170bb3988d350b7872020bee3f82619978bb673498184451a46f684f2348741841e64b0f2deed5d2405d1ccb5a8f79190fe434a0c1c0243e291339c4dce8c745aa29e20ce30d140ba14d1d235a6285f97db1c0d01457914abb03eef7835ec542a3665bcbeca95568d03f3e5bf6dba2602402e67643bfa4f8293142cbbd7f748b4737dfb9225a096ae87f6abc331e6e758a899c7620b480cf4e81b18352d930425673f736124dc40653919cfabb75d3b04e63c140b2ef567890c53114df62a47f9469f47fa54843903382e9c9e0162f740d03c4c88695bf94725c94690a173ebbc7381b3ea1556fa3d8cd7f1ac5d19427c3ad79d621025d1d35fc3a90c0c3ee28628c9c33253c157a109e299435119b990a4160a7de360e2a61049c3930f6c371c708dfb5ebc278eccb22c80edaf828889fe477cc7d63e1cf662cbf2d80f2b5996ab479c28060d827321baec0309bb5f9f9681cdfe5d88683ffdc180c16fd7c63f5ec6fd92337c7a46ef1775dfb4a8be659e623089e35087540fea07c0504831b3284427731f4e4b3dcb8203d57954b300fd5b76d1c444f16147c171e0ad8c406b0b0c8a04ba6ca1877cc83310a504e49b4e2ff352ae80f67dbf6551a512ccac8b8239cda5b53a62c5d0def05dbc1a489f1049d79796a901322a08cd44160a4bea0ee23292b0d943b293ed8d0caa9dd206a447c0e6d7f345f673bdab70f7c83fd97f5ecb87e363b9fc837504403c562bab2bcbeb74bca54264796345a432867e73e458b41923145b1012f086c77bf3c9bc70041c8d3ce559bf712bb5b08a28b655618f936df232b22fdfe362caea9700c7a9419cc3b80629cd510bd8cbddf55dc79f38a8ef6523012d767f6b8364ff3d332a640d5c97e21c16e2cc91fc46b143b74151d9f13d378951b0ee1bcf32cb397e06e6b7d2f13f0e68183628a0d6dcdb99867ecaa42b26fa3094de7cb654cc7e20a830e6d28eb0e258627bd7b0a1e38b85b70d4953699707099f4c69ef1843c27a30c22f0a3c6d58e376428e02f68e8f5f16a3989a0f2f3ada39b92097a51ef781377247d09b86a8761dabfe26cf00cbc7903779ab9675eff7b5aae1e69ce29acf38ade8b63d75dde74694fbede40bdcb6db5cfb011ae8897811b4e44e6c90df3f5b700bf095df8dce33285ca2f917503d3184d70e0c6e4ae6f4ba244518f145c656afbbd69b4154627211227a08195eadde689da7a8067e80c8867591ae1af5ce435502d29f57796728465a8f82be9eb452ee1c68e7cc6cd2f1218d2f5eb6c53f7dc35ce8e1d06561c75a4810c3c58b7e6aee3ee513856a44258d8f500319e856a9c0e51d547e440efe434b091803e07e655b39ebc42383f56a581d6318c51979eacfe8744c5fd4da80cd049f28271f17c6524341784a4d2c65f273ce5bcc829a02173e570b666ba7081875468baf9bf8001a8e389abebf2c664932e847305f5e7442bc01a930a6c1d8fd02d4667cb44a281f28be40cbe5a46800c25490f526013d9d19ea6956c2431924f4856d3bf97764e848af61e7f93401dc2286205abfd22bcdbfaec7ec24b4cc5ea291af8e2284d8458ba198a7ef6d8779080d24c51ef044c8128d4a8a0b5558cd99b8b492a2424a0db6a56ab55dc4c709e263dffc21a8340c409617e7edd465445b34e431baf827db37d32d8229b3264372ef8986ffcbd043be9f85341c5028ce3e25400a0507000d45ccd58848255b3322e0c1a1e5ca78df9d4891e4343d52a5832ccafb904a7606785e24d3f8aef5ea3870ce2edfcd86b63780b3bfc5e903638203a6e4afa463bc1ba5e570575f514109e5da485c1d136059d56414c79ab0524a3385f43bdb82a323647beba970a1ad0ccca158dd4e4077daebd287c64166610845d3996561da58747c4e40ac04c28787fe3800e875e85cbdcefeaf472c9dab5152916c6a16780caa9ce6b369d3370305458778d715f803453b6cd825098701a7c1eb4e84f5f9ebe88c75d3a5d2f43779995b888678475129cf0d39a84210906db3777f16730dafc1976f72f9c938fe67183090e8cf632f0d11ea45ced8594009c1fe53a362472e4db9d54cc75db96671137868b31ef4c7ecdafcaefc99f9fa8a0c217b5041b383664666553ccf678e42db2ce236e7d4813ffe1f3b7072ac73dd3a05b6cb16736f250d5972963c1c807c0fa03a108f13e9f459784584ea0333026c36e148d29cf4c413930c6803a3dc12138081059b52353c312c2ac48443fded3a6559610482de5bcb6292daa65e6c24bc22974762a3263cf21b03f33b6980b1a208f4ce7bf34b30414cd6fd32f9d67d0fcb2818275b1500b240b45c68e2fe2546a38683a4b9b21b8d26fd48c24ebb0e5f2e187dba986cb5e345de5e16c393f9595dd597b08545ef03365b570e8239aaa8fe9b625b0bf12bed1438dd8de54b544090cd01f4f97dcd79046aa2c762f8cbe41b289e3f81af6752362996b0a8680e45478489b2d869b2e2ebb32163f31f845524d5dabf5fb0822e7d4cdc7d524e0807b89b8c0a2988211ffc778552b8c0f7fd499cbebe16631f9792261307eb367c3057882759023024ff345eca56b82573a66e2ca62ea2d3b575290a02f45fc8a73a7e46ff474379c2386e08fa8a641cff003d7b9da6cfd0ffd17aee59928c4b1db48dfad2a31c095017320b29b302687b29e8db543d127720f9ab85009e4e477087a00849bb5f911f2ebbf85f74bad18bb75c5b4be3d5e2861d5b46ed27c44eb0327a7b5212b9504d042032228b4ab274052960f4cdce0adb3e2fdfa019fa2b6e39fa7f19680c98dd30fe662e02a6f0c2ff9da4d1c867cb976897bd3c3804c1ccf4c711439fe5e2fba8324080d84ea050bd77c500d13ea03b773501b51fd7d17f2d0df360c8c6ef53f99eb3c779530ec8a7f273596fd576bf836684448f220e3c699b6175b169b8abec35193b714250c8d5894bf4680197773055bab167146f09a8496283fddbbb31d772fcdb2c6a1a138423727a3d30ec8f89264b9707824e3b1e6dc9a6362bfc9607d88f196abcd3c3b234327d1a178f8b30fa773c833569a61441f131ec2e14adb2c2291e041bd88bd248c95e377c539ea504f76280300eac4fb05685c85dd70fdcc70867669625d030b827a09fe9073dad116c40d282425ef84a01d269407109777cc5d2d9048b4f95c2f210ef62f762e649e541fd1a7248f3fddbfd875fffc71568e79618afd4e11c80fa16bd1607d6941444dff1bd7b4fb1397809bd8e0369e0ee42010058a4f5c6f0b58894e444aec6d2c27abf61a6116baccf4c59f2c0facccd14df5e1a9c88eaf3750cbdabcbdbbe9ebed928120d0ca9dad18b671ad95acf19b32da64015cd2bd48d41dfb43135060017464e2ecd541d362af326ce74ce6d0c8e4ef4638d9d689b8b37ba4720f7c9e116dc2d2c23b21b914a0314dadd6f521b79484035c014d1f45360c49b45a69c3a8096ff9162609816cff6097048939ab35e57bf53896416821ddf22f23fa39d6f22bacce99d52d254b1e07d1e087b175d04b1afc1d4f7d7529ef701a5487d0ce7884dbda302a80c82a8ae35afecd0b3d1c3335916a013ed187d83782d66a68f3395aec65b1c891bda7292b15cb98d4adc11f6878fea197e05452434c87f9150fa9e705f57df1f02465ed4793477d7ea98be04014832e70f5ec92b34d6c0c37ba70fc7abd780349001d48550bed5dca1462027de042dd68335061be980b992cf730866b6974d61d2338a0d15028c5c912ca1de718e0cc9288b5d4fba45eeafd00ac0d0a28f39359abc36eff2a4a596aebeecb55321f4694ae43f1e52099faedbe143a9e27d5ffd4596b210db481b0835cbdd5ba7084ea492620a477b5ab94833b55d88bfd3637cbfb9f9472ae066f791088e9dea517e5cdedce31116b3059839573af4a027ddae1c4ceb84033d1b94eaaf8d877b1b04f687d54f364a3e2b4961cef8e12d6f154447973afd8a5c2c51c0f68003095b37a4c77808d91b60a777ef6fb4a6e309c4a4cc9439f8d932987171fc4fc18a8052a9ce617378cafbcac26bff8278822f0f6b0f4402b78a50d2e6952902fd4b18a5c2591325065f9bd1172e91dc1d358506d6fc7e47bee0883cfb9bed6a6ef91c5f0a5c3d0d9138fbcb5aa2d046877c350e0efbc0c15788559a826d981ddf5f735ebaaa148c2c8f6fee98cc73f57eed5991070c6c8afbe68113cc687a4891d545ae98c125c5fcad66e3a7122ad7e55021d26fad5e00ce084a26763af244653a92b3151234e35295a050191377742b6c421c730f05705a6313a8a8ea23ccde173dd009d95b01955a1b880221fc2fd0a929ba3bccf02b565fe0c9a78bbb4ab9b5e9d539893e3dbac1891abc92e2c4599f04248861a8d627c3f7cd76fde12252c2723e041f8e82eb41fa51ae04ca9999e818b5c67043a320b9e59405a59a5038d9095ce4d2f67307a6aa0f063d750003c7197aa289b691735439c01b5fc212aebf5a052330bb86ebc81db37168c624715e8b5c7abfb0feaf9065265a68405d0da2b0d81629089899584ecbdf7965b4a29534a01f509a609a50941d9749ca2ca158924787ad5454d80a894e785dae32340d4cbab506d23bb82bdfa6824cf6e394f2321ea243fda6312139599ac0be830dbc29ef92ecc8b1b8181ee00d849201fbd8308f9d875517becd663dde584e7d9ad5ef9a07eda33bbc0554167695584ecf3dbd31e67104229999d7cbd72b2328a908993561db50a3a6c204b0c59f42437321938ccc9c30e4684900c09f9294224c6de81871d3a92dc20c1d45271a66237433e8ff6600761642925cbddadc9932450abd19e8df6da37a699c49c5a9674cba16561324b59d70d9903f5188ddf907215bb45766e49dfa38f0f79b4574150bf5dc91b104646b7b40bad2cc9cead93a3bdf61d6e18a93232cd6317bb057ab7f0106f00d58fae28cad3ea4985b3a008c9e24f922810794ee2378868f5d96ef40542282510f6e9d15edfb00edc81871d3a1a071a3ad88021231f762c84e645a77ecca8674f41779882dd0c199b9b3c794292df27bf4149187dc6e2b5e742945ca67d933c95f2f05f4a3af41ca8b75ca649dc8e7eee248973a0fea2b9b497d82dcc9e62874eea52dccd90b24b5935043087f62c1d3c5d9745725294360fb98fddb27821b37639bcdcba8428b92c79cdd24243bb989722d4f6efe5bbbb18a5a7a04f776b720a76da9f7e1b80437beba919f2a1435fd7f807050a429880f3489cfc0621f9f11f8b678ff90d4252e4b3dd6822a9a8ee7f8d4344a5f1d41dbb4662a2ee9321db16355b7d944e2a450bf0d710d4cd499e437b6bcb4a4e51ed492f717c848d04a9de4be95711200e22bb4fc596ba8f739e46e9d44bdc534ad9e772e9f584622139e619895bc738cb829a934aa592c7d82f75a9ea384a6e79c92daf7e6ddcb7e3372771b544da6c7ed3302cb6876197e5d329b5d8a2d6d0444277b7cd431a6cdbbbbe87e6d3a2ad80cb65b41cc2e9395029cb726bce283908210ee8f5b3fad07d8390e8bccd5bdca7fd8ebf7c72df3ea16ef31797437bdab93523f30fd1aee8e8e407e807a8f4734e6e5f56ef3ed473a5b08515403dee7f29ea24dff648dd6793f39be7403d2945bb19f2e966a3f39b97b25537e638308fdb865930538259949c725ffc926fdcc7385fc24a9d4c5b1bbc9854721c24875e22397452bbcd53eed35e5b3de61bb7b4bd4d7b2db3807c363e6f591df7d41904485a52bf5384124209e34eb62ca42ad4cb3187de5e7fa8eb593da154b44af3e843ab2835b9d1d0cda38ad7b6ead13321f5b379d2469375a9148ae3b09ca278e6363f67e53efeea28de2c55cee62577d580595020bfb90c6c4f6adeaa6d338e424a3bb678b18bd314009dc4a4aecbec8c31ced97d3b28b5ba1733b6f838d755ccf5e827d4f4b94e6a2b888cb4a442af2425ea773a552e76ec110c1dd181d5ef111c40f2bf4770c0c84352156a33a9b2472ac6fc0b84e9c1330b5bd6b7732b725b8bf6a06ff7cdd9bdd8ed5a04a1b6787fd975b82b65e963b747782004bf5b4de991c8484ad4f66c0cb07ba876f318bae7e808764bf746e33b24ea887a4201605754a0ff53f1103a5501c333545b17ccaeed88a0becc219e3a30efee076c66a643ee03363396f3e6009b190f4cb75ea4d7706939ed7a40b77a449fd36d66266a39140cb49d8d064e845d852deb3ad02ad037bf8e7946c38652a75d6a7b50bf3a9bcb3df7d74450a95f6e394651280bcbba8f62388fed6a5cff6e852d188643bbab4b2df51a975378b9e53eccacabe1c3d5a5b64b39603af51ad22d976e3323d316e69e6196438f807539ed7ca07e51bfba54e6c3e55697ca76c692812d98675c4c7bd817f3986b3bf55b231a962f6c869ad7807ef9e6fc34731f2e87eec3105b57233a751f606abb94d639e072e8352e875d6a7d26eb6a508fee43ec52dbe9680f731eb005d358505359d6a51c70b9e511b8dcea7c18a20674ea3e44b898af85753878470bd9b2d09df9ea36fdea286c814e399e4921a2f205805e3a36816a606e753d3cefadc6e5b3ebe1b0053e6067504f98b9726040d12d1cd2630d9d1c852d95b91785f469e07757bcc06e22441091849d1d9f9f9d9f9d9d9e9d9d9e9d9d231f19c8200943432b218684181a221a1a221a1a12fa590d0dad5e30f482a121a2a121a2a121a19fd58e1021f366e6cc9b797354b4742709ab95d18fd58fd5aa68b52a5aad8884961a2581073c18320408480e0d0134041090101090101010119f2123a38fbe1190faa14e464647464647464645adfa4e431f7d5a91d4769bac46c951b65ca3048edc6a941ce9a07ef548a504ce57a3e40957a3044e1135fa1ea1e4c9ef16a346899baf2a9b772570b8ab5172f47d8dc55ea3c4a855acc448c91325986b943c696fbf460939a4c44dc36c1f358c1c52e28495385162a4c448491339a4c4497b42ccd528592561892c1ce108471c633f665aab8ab8db86a666c07dd86db3a335e6d86d23e5c2e55ede5e9642884b68c20846d826b2ede628e5a4b15634526a5ad5eb0a826159a669a8ba2bb68de6474622f5c4286d3459953243a1a68d26c50415769f1c42e4a4a2c22a2929a7d346a3320349a8ee114b70fe2a41c580da832ebd28052a458a1428565452a438a5a44891c29402a5a64891e2a2dc00ece3673339ef25f716017ec98e94adaa59b2d3defe929cbee125394b7296f02c9172094f7bfb354b7eb4b7df354b7ae8929d86d9253a4b7496e42cc95982d3ded62c5992d3de3e100a18b0a18771ce18543ffa981045b517ab507b1de94d94f461ac141bb26e62179a28a20819022210a10a5818c2109a14fd06612189df202c04f158e7fc06353942e237e80a485e4ec8bef1b38911ee4b0b6769550711d22d907dba85e4b02375a96dde681cd56847ac9fb82877f2a9bccde09b9bb7ba480f698fc81686cc9beafc039d8940671f9527d48f7da414ea87e27918bfe39cf3b434c68e373132c7185972e4200f997dba05323333e4d835db6c4d3a411272b220442984e91fd1e75b93a86d7d90e4218c3f60e42911a17ebd13795ab5bd9392d1bfded9f6a64c7b30b6d73b10554495326ebc8110c638e7c6eded96de5d94ede873c92063788a4cd4e8ec352b278f44d167037ba66a7657d87ccdca49cdca091247cbdbb7e36757b37252b36af2370dfd6b564f6ca665d5ac8e6a9644ad66f5c449c3d4af59193de456464d5a65f3fbbdd5ac9aa0d4acbe5ab332825dcdaa497bfb960a9020ca4acbf2d964481069cdb250364e0089361a09082894f4da1eaa086ba554d9fcc73bbf4147843e7afd0d3ad283bfe1ad01d6134fc4d39c2f2d0ba5049fdf2024843e3aea37e8880b7e3f7e1aab6ce2ceb09e78e28932c45944e66df7761f7da0162232240819b4075a4de1dbb37d89710f8632c7025baca015c5b743674175760c0695dd218c32d8028fca6f9016a6f02a433c80ba626405289248242f5512974367505c06c2683fe016ed070ba4fd007a759b191390c9880fea97d29362c8d5287955495203c5495eb91ed54b2a48dadb548d52f592dbcc90b81eb44bd520a138c96d66b21754d3911c15547541fd4c47df283e2a105a510ee4db578e6c3d4a5e9dc4f520398aa712445df159099205be949485da4eb5ca7df14d1d0e4d2ac94b7e51d7b68bdbcb51fce439b437f98d5655a7be030fad4a71eaa72e757533e45f7e755ca43dcc590040d414bfbc7ac6c5d8cf6aca4ca929355ac565ae790ed4578f1b4ded525937437ee659c7a33dcd637b9ac6516faf7a4a47dbbb368d3bb547811ef3ca7d2c4fbdf600875631114d73ca3fed6114c5a960523197c1b0ebcafce2a13dead78df6a8f7d4bd18a79e61de0246aba8bbecff7561580b80a742e874638a856c4b4cd4d85e2adbd6505a25d1a09b63f47a8ab107ca47c8b693f4eeaec5db38db3731c9aa49113402e11681ebecd31edced5aa77922748b639e95ad73c4737ae8437f8546b042f901f61b348404292081bf423b396bc4cc37420c3bbacb9612aac4267eac843da77c69d1de7e1a0aa02e2a024073f67b85df6ed48a995062f4df0e99a00ab8414a8a7e89f8f5531190dfcf2d0821dc68a2cf9902c84692182674fedb210024592d84104ecd274f67d952faa4ce107a2714e4ee81bf5d1bc22998a8ebfbdc84df2026847cd45a34f1eb2e4ce0fcfacbc6fc4208a1842b5dda5b97dda916d52f6aeb427671077ca7d0a561566e5ac8e060a30a4c7e23904687ace0f3fbe43f965d26bf3e25646181477e4fd589eaffb9fcfa8b85b17c14a1e0c8880f7e3064661dc6c2b811a640e4811f442148929975b93845864cb694511bfa2af4c8d8dddddc2c2f2f64305969431ec7861042c8db8ae5e5850c263fda908a163c65d4946831c6183b21d67b3bef162f51a1eeaeac90d1b4b3678bedf0124f56a8f9d41eeff6b0818f5644d5fa70a7b5732e66c44d7a867d5a0b77b2cc9901c960a751a36130bfc1be43ab02408521ffec3b1a06ceb05f74aa68c1d0679b13ebc2baf5c4187e7d7296151d46c97d3be2b7c3988af145c35c4630683c3b0f457e9670e13fed770914f012241c0086cc7059983b547b2ccfbb2732d4259560653505219f879ecd2063b051084654844919728969957cb824e7e1cb43a802e132d43e6da5cf07b265612d46a7b208c2a4d8f21a56d76308b6ba1453ef31e7bc96c87b1f3526665d48200a1fdd89a12b7cdc255ab467cd25924432e785c846c3a08c9e07e34cc1490ceb2cd11aed9398b313f322c6bcb49046dd720c3e1f59db4ffbad541249a26e89ced1b1a375d11e2350b6d3847df271080bc3c7ece6630ce2a3633eeb427a8c2e8da41379249fb46fdd6373adeb6a9034275d44ad4ad23075992503bdc543b80833cbf6556cf2d125101c6a9524924d589594c27ad163648e2ed9c77bd1b84c4ac18888fd9347da10db306a2d9b4b7137b5266269dded855dd197d6a7670edbb8db34e6e4938fa42591a4935d11bdb9bbdd15dc797bd13f6e1b894422f956628ec240dba99f349247b0253aa9bd5854f9fb35dffc6bf99675219dd81505e817c1c7e8e2a3183efa97808f462ced45df38ca1cbd319fc8eced45ef1986e411cedc893e7ffcf8f84d201f63e45189d36706f9e8b239c6e8990fedd250f6f3d282301b77bda52dad246ee6c01659c3ced34ff142d89d97f7b46af24f11f5867d264ece0fea2a7ee2748bf44f5361aa4b05bb7943ea42950e7de2703759f79d6e485ca8cced1144763e9b9a258b38d9a43d23e9a43de91b278fba457a364367a47ef3c6c94bcf6416e4e5106cf1a1c2eabc5c65227829b31effb01cbc6c97d2c2913e7520ccf4ad41f26d7352c71dc94bddce0953a7cf4f2ef9f64faeac215ca4869c1a7e601bf8670d3b7f43007e7d1f6667e493972e8756ad92452da9b02a8985f5a44bf9849fdd17a1f0d3bf8582cf63dd17f3e3b950898555fd4d51ab78bde93267721589cfa836b9d3fbe0b34b13f219a64d2e45059f651a7329f6154a82d1af90125ef0934b71d7032cc3cd4367f1aacf34300821b269f30b4982c080f3b3eba1c75f60e57790b4c9999a1082cf4adae4b4317c56b5c9999af80c4563212624f1969f9e7a66d2268721e12d9f5a865da72591dab7676e85982084b772745ec698cf9dd64d9cf6a4dc9ce4fba5a8c185cb1a6a78e97be2c0ae902e7d8685d9edc04b97293e458aefee9b2640d9e9e3658a9737bb42fae5815adb934ee2e88c41ddecc60af2d331d9033f31a58a99c3337de62ac93787bcf49d374a08f1dfec79e9ebf3df0cf272febc9c445e3ab5e6a711e126686fe43f3632393eb52afb49d94236a95f9c655db4eb516968d09dce43d9b2cc8f44bf9b9a7152da7ec508501fa0d3aece700c6c917eb90c6438830daabcba548d8e422e6559310d03801f191c6cec2037c94b6baa248b8b94d22b0ac2409737b355a75f17428c325a3da28cf6a6978a90813774b48afde276e0e1ba5eda9bd5e2e4ec0abddb6187aa813974d8d545ed742cc6e952769ff69a4b7bb323a27e2e3f5d0684d916bab12e267495ff249199f3b38333d820a3302ae69cd3592789cf4f179e294c7aa38419a40424339b70c2e9d492a8e9b308d16723e152b344fa74148469873e7dee585fc8b0ba82e2265f6ff2d8aa3d26d60d6a6bdef457b08808c9d04a6a30eb841dafc5f7e2e42e2f310bd4462697d52ad4d81e86619ee22426951df317babd789eb7c7ddd05bd3ba3ed21ed646dac34a41a0280ff3ac6bb4c7188daac23b1cda6322d90f0ac2f440e1a8e68d06056dd9ed2de5467df3d3e9141d07f42b764be914aa5095cd379c13c74336c5338b7fdae12219bab9b9e1c00ce62c84081b69557ccc79a8091685234c0a24f88f8b7c50149c3c1f798c913cc6491e730daa3e0a8b1ed31c8781b487b589339196d436f298b791166a9815c71a487b984f7b18156ab37fedf398679b66e22caf5cbb0973b9d134e6d946c338ed615eba41fd28c95988964cd70b3de6dd8275a139e6ed0212f7c5c7fce27a05cc02f3c27f0c44eb5a05bb02f3d2116afbc7401e73c69c3167ccd9876dd8c7fce31d1e8c7f3ce699e6996f9ba66d5a4779fae4041f448ff26b840f23928613d4e93b9ab6b7b3e7ec78b4b7b0553e5d9b994e29b70e379a598d54fe4d59be9eb2fc5bcbe54fa773f6ecd9bebbddcd903c64bc3992316bf3061f21e29716cb9ec73ca0d62d10c53e9dd99b07441dbd89843e7a1b31fae82c30b007b644a79475589818d8129d3259220f0a01c5fc2e6c99dd87024ac141fd7828e5a7a6045133cb270d40d49e396df0c043871b3bec803df007f469552fed21a0c6e1e6ca08094cc2a4a849ab66f7cc59e408f4e19f2113c8c8ece08ff67a9afbb42d0581b417a190ff79f2cc3e3906c2740f6c41a16a8d31c698c4ea15f01b94840d3e63d6e996e840504b549987525a2b0ae5014578a45ba23341257988e4a3d3e9703610e6ec1fec11001075892e873d10a6570dbb25fad08b90f735901fa15e2aa5dd4781bafbea077b3ed8f3d14b4d5418a347ef9e56c92096e50364c88ffed13e427ed8090e0f50efb44a76f1894eab28ff20f9d9494ea63d86944d01d0a7b7e41e300bc9511eb37db7391bb24723d9f68bf61877555baa41fd4ed063acb70f3527955fbc18820dd6611df6c13936d807eb6841a7072d6df8601b74bc900283210009c2d98c71bb076e5f588a54da5e4475772f30045d81e0f2d262476cee01dbb0446213f5433d03be3dcea0a28a64ec5cafb2cc231956dc7d3c9eb71aeb25e4e10d7ce4985bcf76cb019a8059ac338b5e4113300b1e9007f26c478f5c6c2f1a35554184fc72b07cd4c2508568235f3812af1fa01f1a6a4637edbaae8b5e57365bc6cb2513435ffa0d7a32e40b42e2178a30a1c91be0b708422b78275f8ecdb5cfe62f8725ea1b780d6ebe9bd665be713087ab06cc827ad62db3c81c72579087ae519ff6e0550366012177098919d5e41623928aeabe7499ce817ee690bb84c8c01eaccf32c86941613812378c3ae4f8079d387c23c3d0852641bf415d00f24fbef0a37ff80d72a2d3446dcf4abdd33d43489e2c117e839a40e49b10e437880945fe631efe1a0944e140635dec0a4844fd50194b8be59efdf5ed3e7e72c3b32828dbf10f9ef6983d56e12c964f5fad6e5eb5f6e2a954b9fd6c1745f3f658050be76d9ccb0bd7828b79212383c3814687ba42e58fec83c298930839c618494d90ac50b1b853c6d8f5ce370fa7cddd75384fedf16e572b5cf8d528039753d11e8a88fab9b8bcc061d7bb1718ade29e8f37873659bc1d49e58f9e4a4d972fdd9add0cf95ce4d9c8b733101bf9eea60b200b11027300696f8518a176276d98b908d996b050ba428d9984d9cf25c7cb60b46ab9e3af955287c11de75020eab7463cc30cdd10275fdf93ab389f4e2737dd68d55e14c5f9d2ae8d06855f1b4d444141718a8282a34514160a2ac54693a24ba1505c1cebecb4b7710e121565fa76f9ca8aa3fcda68505d6aa59b217fc5573a1eed652e5397e34071cb2f14b71c253a9334149eedc63958e5523212b7b9892b3973b5d37114b52ba328282b59868292a1b84caf642819675f8e7d8292a178adce1c8a5794ad2ed3d01483e4d5798b61f20c853bf9cae5321005c72283a3514387f660b4275dfa8d934bd7ea499248180a0a4ad783f5a40d3cca67f328cc5a2591485e397652ed5aab934e45ad7581678d98830163c84c477b260ec53907baac15ca6f8d2a60f2baddc012b71826af4ee250ed49534a8a7ff5b3948e1d86774346c3e8e816e972895e7aa6a3c73e0d1ea82667e71ce83c2612c9651a43716c739936994c2693676ef2cc535cabd549a414cec4281585b3f95ac29c3127615ac6dc53a9a62151a3431f95560981f5fc34e458bf414900a1c107cbcb75962a1d256504b2deaa68921062bdfd0ffe37101947272cb823ed0a2454e8a418d129eb60d695e29777712c16a9898a9f3cc5331515151a356cb40a73cb55ba19f2555ca5d3dacbfc443a9d4818e64c553818a7935f9e03f52a0e371a952e75ea66c83ff9a9e3d1dee511a670fbf5330bf5d64ee12da7ed65d9e9d451ff3254ab486eb90a676955c9ad46a9685575cb9fe52defad7a72cb77a3690cc330cc33c73c731527edf814ec3a7126df2de5c4d97c8aa9fa555168abb676dc439d94f9e5189665b53dcbf28b5b26d5a2945e17e65796759f8df62c1aed59288fa5850a7779f9eba2d4ea70ec0a4b22db1655c5f9af35798c675c8bf6aeeba27e516d05c5955dbeb989fb3437f98a8a67590a0abfb1030fad52f10b45f5537bd539010051553cf315d7b818fbda8a0a545951a9d1aad57cc5e146b3d2a5b46ec6b665dda56528b41557c94c1b776aeff214eeab5f7de5caae0b8756d5d85eddaebd9ca572f587da9e79adaadbe697b7d8dcbd14ff5efe6af1977f317f9956fc72d3ca67f329de281cc78682fbb4cf5c85fb76bc0a8a2cf3ac5556389b5739993c33c5b4cad4710f0ab779a66d9443b577398953716559c643d6dd68eff2626468305a95b9bca832bf3ce32cbb32220cad3aa77f762d5256b24a19098b813074ebbeda39393939b4733a07c2505a73380993cee12d467f47ae99e8c5d321f28a8988622c7a26222292a9428d2426757aac9b6f739fb479e5faa615109d393e6a2ffab6f99cddecbd6d31a7737a989fa7370f90d669d5feb67f04613aa75ba26f471f4bbe59a4acd4d1ef9cae5605f8bf986da3e99c86e199a53423f554eef939db180893e2d4e4266e6fea76749dce61428d1c4e7510f84ced86609fc1b4d1340e36947feb6ef2114d0ddb129d08ab8fd18a395291f0f4fce820423a738bcbac4bc875d560bad553db9b4e29695b769b9ccf38cbaeb8d160fcc433335ba5ee8cfbf6c967256ebb33eceaf8c77b692fd2c082dafe79b47f524970018994914629ad962dbb37a2d4ac7a5aba94527ae7b22ba4979050a34bee58daf368836c4b4535b27c94e41667f2222325cfb28d86c41717864c81a46d64e85996f14663a5a474292b831adc684cde34b6cb25f5def630cf817a1eed611edbc35c6e327a7acfcb49ce1b0dc9b30bd223d628b659d470b443b7e12e0e470fd65fbe0f7bb0deea70b4ef6f3410520c52eacc41a70c31ef1aad02ec99672934de62a0b8e68c719b43aee4570fd47219e869321aa6e4d161b44a0040d49257e75297485aa43eeae5df1ae1c93cdadb3c568fd16b3d31c9b907ebe106be99314edbb08fd9b16e9905e6904bf2d03b638db94c0966011dcbe4465381cca1c7189943c7b8e8d1e5ba3c7389a1c103f55b2398c3908103ff7c272e1e51f2c0131a4250db6376bb19723bf96e1530f90cf9344be1f64d4d6ae69a9b4e1ccec941e033a76e084afdda68a4fc34a9b5475329bebe4054a4a8f3533f7129dabd98d96e89698f09557e31291cbfc9944ab93a9329e6a1c9533c87f697c7b40a739375596e79ed25f1b6234456e5f2d07f5ab52aba053af5e5202c6d2c9ecb8bc96166e2485ee2a474b8d1c892c94b5eb9cfa64ba5380eead2a94b4ff1cd6d7e3785a36be2507cb7cbe62f94e5be582d12e6bbda47dfdac844626e59968a1815d7d57d2c2a626264506a398c1a2f6470a0b1962523af507a0342467d59208490a7f430c63ea55da914547a1949beb085c61849306a3950af699625a5cf39354dd3bad4e638346fdf346fd718c332da1ec5b04b3ae52cc93f2fd189acbb9f83ed134ad85cb98043c3cb96ae19a1c6de68b86b7bedc9e83c990e8bced6d11e8c9085a08e86611d35d33167a0de37d057c8a8c222218f0684d1d12dd0a1840bbb0f856aa2b65fce1c8c1f2e2f2f64264babaca8024a1df008f20d8c3e54054e7e839c60f2f21be4c4901fa09f55c2c752c3b8744b74926770d3b6adfb481d75d9a55f455dd15d5a6473bba1ffea5c7645f45250855e5cb12dd115501710947dfc9fcb47bf4abeb0e5926ed156c0e673dbf6a4942ebd8dba4c6f94fab4b66ddb36879b43d2e51947b96f9f90b6cce6332e87f6589729417788fe9042a4a3691a17d31ebdba16ed51dfa6019e599cf41825a7a6cb48e3ee8a1bda398b9cf5ddd09e83d5591ea97b1f7f9d7633bcb73aafbd8db17b42c511c4491729c21186bcff16e10822df98b6add2ba0596340e256773ba24ef3e7e3a037bead9d2893a712aea9cb0142fe95416f9ec4aa2629d6fab3e7693dbe8b455d695fdd5b10fea57b73ffb601672a3913a160732c86cc40872de7f8df051f4596bada56adadda2bc496b9b61b9b5594fbe8df031e4d7081f400cf06b84088e9e92e1737cc6f2bd6ae64bcf2c2dd2342704d66d409b1982badc6ea035f3a9cf902f29f5dd6afadb314081cf665fa63b87761cb34b4d9771886c27f5a959b17bfa7ae65a564a827a6f34a7ef8cd37268ff628be02fff27940a16bf7aa3e1b9dd504aa2c6c83a4d8553a6b34ec73c07ada39ec1e7be48ddea9c6d32a640b2da5e183cc67a2e2f0db333fc1ba3fb3ab442b6ccddcc1ac89685b6077d5f3efe049c30610292b7e856d3f231d2a7d4ebbab89c3add68e80bcdb42eae071d726b40744b7adc6aa25b2ada833df053dac1a0db0dfd960bb9b00bbb7a58ebc450bf06f2c906b22e2c87de32a057cc817aa41ea35f1cf5e838d0c000bfec6ab4d73aedb1d691f4d9bc8cf6a00bc003357a7418ad727114a5b5a250a89213ea97c29cba95c2ba19def418696845416d671bcad710ab979e59d66e2b08338168adbecd6e85a2718a632abea2b27263c48dce9f5cc533d44ea048f4495dbb790d079a63470ce9fcc9b194143f79b63a506729ec3c7bc98df0c091df25fc1ad181a3cf388dbb2fd4d293bcd3785d78da662c1dc77d27a721000148b1a8a838c95350a05652380ae52bdc970295da72484949594959515151515949b1e5a0e22b598b165b85f900768614294c2856563cda3a29edf9f4ee0b35c553ba1406e29fbc87d29f1cc3fcd438ed598eb2e57072950e03fc296eda6e48e94e5d013aa3faf50e01b4090451a85aadccbfb87acb53fa8b48deb25cc9bae8818d9edff21424ad824431c9bad8b7dcb4cd883edd84017e53f7993cc5e391567d581cd2dcf2687956b7191c05a3a7aeb9e6b3669b9a0781962ff42096e55a27864af206d22a1c989fd6c58a5b2854dcf20ce3508e82eba1f4285c85fb501d8aae77dab3b62d8793637e84129efc4943c1edaf70fb2adc8779efcc38a9601c067adab31cfb52b215d901305fb1dd90b568bc2e38c577f0ab7429dd77f21827d226358bebb6107770740f4f7b96a774dd16ead73b383ddf89a755384e9ee2966f29ae6d35a7140468bc2e6ec0d13aed59be83bb2dc0ce0b96e50dc42af9e596b74fab7094b46d0675f66cab29754d79a1245dd32946dd2745f16f003f3f0054ff547efab630bc822d16d5d685e6130975ce19aca58e39addc474bdc173ff09693b84f7b96e9c66915742bbae5ad133fb02d969300056fc516bc15717685d565dd8ff6694f5e5dff90fec36baf57527e6abae55ed7e2ebb36559947694ae54d88b8c3e3ebc9943df53c805e855680b3361cecc7a0b1885be8d3e0884e1a26e699f413e5a6f72be27affea3421c781dee5ac77453f9d708443ffe8b457a629108d4aae845be3df6c49ed803bdf638f6fc8d13563ad8a8515a42dd186b766fefb4a7e10cc10e029fd956c0c7432f9d85a46750b2506f6c64a81a5142dd1e76de69efbbc7093dade2ee8bdede4e674f926af3cbdf43e3b74c5ece163f5d58a6f4e971a399f2c893972f9eb31154952dd9487bd29350bf65b24676e021878e1d4c9ee0a4daf7bbabd11e921a3070a02ec3dd39088924242b79c9468c907260c40fa35f2358c0a4fe1ac1022434d08790aca35ed416bf4eaf2722009ee59bf676971942082124421111b560258322231ecb89fd1ba2790339cee118a73dc928d816e954062f8778e9dcf1ec0ae999e50417eab7443a93899c522210c6869492773eca37366c03ca29a72492442ebf45fce0fc879adc372621fc0ce1204309adc266e1a5175e42605b648d5d2119889056e1e4ec300e0b789e47c370233026fcc0b648974c82978c82972d609c5d21bdbf24547f88f879488adb3b2ef022a6e428d4b7443238250781cf94ba2148dd2412a9b32ccbb22ccb370e00bb8256acfb2a6a89bc1b7e72c4f59026d245da09db78f13cf766d81b03b5d7224b56a8d26791565d4d24e50415077b8e39a461a83584ba2fbb39b98bcc19ad59dcb7831f8787234a126d4fb25f4f7bc80eee22edf590f6203ff1edc4ae80cc9376912e0259fa1400269dfdc2ba1ae9ecd2729b76d29e122ae70c6922451aa68f625e5e3ccf1d851af2b08d9250e94fabd837e8c9901477317c755ac503b33350881025e7230853eada08a2f8a855cc3eb9c8d94913a39692d25aa111ec36ba800edbc2feb9130813f379539838936307dbc0bfdbf476625ba0c30ec353c8818750040fb98d7605f492508d460f6b7bed2c500551b62c1ff4618d99598358766d241499c6f94f9b5c07b12bd84b1cfb301066224ed21e932236e21fd34d6ef9374d26eef9e8271ede69ef06394073761993e0a32fdbd0fef10fdf4192d4b43ce3c439a7c9d4993aa135121b04cc2246e7ae3f7084da3d403ae7eb1c311cfd0689a1e73fde11c3075e9e3c655d601e9d49b02e7e601b4c5e8241e1116665734d95798c5ed7496f93fe5e3e9afcf33e9afc735749f961e2502a730b894bf2ec4c76c50583a7d1307126e2b00edb10f3f23136fb3c7710cf3fa00f490bd9f24fdda031acbedd3308e10a614108fdbdf6a04308e14f1832286188b13f1dba0d1d74f05858040b6eb2c9a55e200df802595c585e7241f2684fee68efa53df9d22dd2ad2ed40d7ad2b333f53aa4cba571d1d9b994846a3b0e4a462c4b863a69ccccccf237c6057c7400a84039aa3b2d1eacff344d4a293576232017ca6f8a5f6708773f8fbecdd1a333f4872c6d841a7ea821a7861c1d1d1f393a384c982cb1b2b1840d263b3bfd43ebfcd03b3836a4c0861d1b7640d045fa074da47fc03f45ba08f78087e0684cb425b455e7684b748ec6446302824c892cc92f4eb6ad92d1b2aecbb22ecb2ac30d940ebdb92bc877273d4218e1aefbf068d80d21a4b199f204c10b11223d18d2032612448e5d5d41a8cf25844639e1b4ac0c0c21e8053b004288074360804f083e10c4134cc842116620189859e805c8882322041d11f907a201e76cb78c31881cf2c7861e1b786cd8b12105db6d438fcf8e96d29233010968d162045f7c6f292d2965cf2c6316d239b6431ebdd33bedc94029f9b3f9ddd683c856467c39644eac61a7069d1a726af8a1869d1a76b29211dcdd10ca0bec0af9b2db1deba2a9b6635df0468f425c70078f1eade980307cd3ddbd0980a7b65b31badbd15ed43154bf058a2e23e849cf47a7718328a3dfcb4b11558623478e52fa063dc1798fdd02633e680c461fdd73d9c8bb6357b0f38eb5c426d1d1f19163c3874e1186a8dfe98950d95fc40c11139359dce591fb7044d9fed197ce7293fc0eb8bbd8f5ed6879f112cc62dd921faf5e46b904b3906eb94c472b32694f46cbe26d2e9540302ac3cecb33cf4937f01272a807a8142e3585450b191a19000000000314002028140c08c462c16038229663617d14800b9fa64c74461789410ec31442c400638c2102023030020019482a007a48212baebd1d298a040688076d766c6a9a37967d9a29083cc044f0fddcb070a7318c634c75ef87bcb1fd2afa0c04899b662b27973311caa7ff67e0b0a7127904252460819c37e1edd10d2f59e13cc3bd06cf73e2e04cea4d491f8167387311fb69d8c10fb3fdf16ad3b86f1be059cdffac8e245b909a47468025f53fea95860052389d1f2f2d9dda55003cdd65aa2dc582a79d173770b37e23d68449a73b8c1fe58d2e0590ec372e041c5f5dabb720619ea889fae988f66ea418ebe45afeba63dd865cf1e4f0fcbde6e4158371050ce787d19569ae58693e879f1cc5e0ca012c5c2b32fd8ef2c8d45c760397fcc7d69a21c6acfcae4dc6deb1c0ab5bb9dc48ef99248387d6f339662276042f0089411bd1fa7b4ea80494fcd8a84e911e4d16045cb03bc6f4eb20cbcfce915fed8fd65de393f5a609b817221b2f48698595a1a666284949e5ba2cccc73aaa39d37f16353fa61c3cc59e5cc381a37667773734fd1d795c30ac685e7822137d36bea984f0f4b81b5a00364a011e428f5db2f88d583659d9d70132715e59b0b858bcb5cf4f6442b6a652a61642e8d2ee5007997b7a8035d601d7d72ff503ae59f194f76f8fa9ffb23dfded11c29d395ed5fec8657d8212ffbca8f78904d03b4f5910d996c1aac451c6b5bb029aac8bb17177da48dea6f22f3f5ef917925af313341e1257fb636b9686165ea29e8d9dfc475e751505589244e57e53ab0d8ca77eec31e2fcf4c92285dfb6226c5d0106f90dcbe315f6c3c9d80317f53c051c375562733ce3d7cbe01162692b9c83a5d40b882da70f4a6d5330f155fd3418fc8fef5dedad77254c997f8687f90277b36c01ffe8113b0b2ceaea71e0a7833a81eef201aec2bf51d66530257e04fb7366840954697dc1b646c7f2668708fb15bf60e35e13f42dd6d6a42fa040fc9d014598e7cb4f245356fd8450b6bfe81af88c79e478a621beec3ac05811a33cda761f1327a267c826257540fced063d687c1404e1e550899cc47f8628f725f8145a89cdafdcbd9ad33c865d13f340eb1c7c9f61e10ed91160b3629210a63f2c2490f5b0acd6a0ef52def4ff609fb45677696f01bafdd17e554cf145cb4212fda6151cd2ae48ffe53c334c8eba7d663c33d698b84754de62d623de7aebb3ec6a47cc290f6db9ae5bc0889b8d5719ee40668c4389a854127e8d5bd2e8c11e123c41f451ac457e2b1531bd517e72383a88cb533c536ad12e8d37db23614578d0330d9fba500972a97e089ab94542675eda4a2978cfeb9bf8a88b0f91164e18d1319f51bcdc252e1178c3dc260970717b1418d902ed3d24cda5c41020465c0c153f54e8321361dab42e9bdbc42b000d5fdc2a172d9fb4cebe5bd7b543a1b10a4c550ba88f11d7aabaf18c7896460cb51a1f1888696452a760b493080a6bd69d2b001faa6ca43caba7011c907af6edabb570bf017850f834771ede786602a481e4a53a701f58388be2aa535eda0872629db291b4f6cb5f8b41650e06dfa962bc92086f1eabc76d8fbec0d194056c748482dcb0c719f7b15b3f300b2148768629f1067a0d7477388496856cd150d9ac0808e4d516f0833d42dde52a7143f720790302265de509649b41e24b95bc93b8a1acf94abf24d1f8a46d480128977102a371111cbbd6488e931099f8157fdd52e761b7bbe8b67573d726a2afe886419b59db99886ad7541d910976504b2bd563047fd10ee5c554ee9483aae7ef328ee2da13d75d598a267c6a5f88941eccd79bec65103923ed18610bc04e15b7955143f9c8908cdd1b243e09a8ff60ae12dad3595a6f7efe96bd0ead3ced2fa6e73adde701f875c1c1ab338c959a9b8e9457a4c95fe5496acabe69d03b1242b00b08231056cddf31c7f4af1e64ebbb746acc6ffa0ba851c02ccf36c2611cc9735254ff9714c47aa1ed5fbee5cfc9c714997d938c60d248912da3482a070801692e7fed0b9fa7d7fd3051897c9145594a66c518f05d90d1099ee4ec5d4b976743a5e29ff7ed7a9cd004600979e193ad9a68f10d4af4444c074d4984b6201db7826a1e827156cf6b9518dfe3a3b000ca51bbffb11ef06b1b90cf86cbd0331f5db19ccad6ebb9f13913f70422774e40b9ef2ea8e1a3f10cddea9218ae547b31309162562b246f0d1d57674523de98b6b63781ab9307bcc326d3d068ba712d62f2a239316dfa8dae9e00231d7d54256cb69611025132c804191883d56bae819a2a82e2a192019a1e897899e60835e370b9050e4ff47f8eac18538da83330910590ba25c68caa8d22a53dfe6deafc838f9632c6169aa31cbae678cb5c07d5a101dbd8f5c79610b8d02ac315d80f7ea8707a85a4578c06e5a682aca7536ce724b607a13bcf45891502223083aed0b1d3a64583707d0cd886325906c9043528c2d9d832ad4d6a91ac5e62cc74b3b08d7bf8218883c092cf401ec9ac3ac65b87eb53f2fe754415865ba064d95fe3afb4771d79fe9abd9017d09c8b84a9325ea6235c2d9f5c80b7f660f8ae660d64badfc7a61e0b726d52ede1391ae99b3acd21e99f38cc05a815f6c2315b4ba1ab6a8ddd27c5beb9d849e123f854a2dc1c9915f991c36a65ec4ed28f85fefe7b33b33c483b43650242415f1403e909aab9c55ee8d2f16ead7a197ee2236a98dfab1c7660f72711cba2f35e3d74527540c10e0cb0b5498873ec37b5a4726179a639b4d0f40fb77588284c34e0a9bd0bc517832083517618caee7e5f2f5bc60588fe40b2458af1dd2877e7ff978ffc073ce520b07e8902ef5143f1b44a59353ea8e0dfcf1a8509c5b9988a8cbab19cb3fea52528b63dacc5a4336718fb860c229b905bd41c63de3768402020f5577a9fd1e667a6bdbc58692c1d55ae7bcfeb6eb84563fd035e185b9e3e2bb9fa3c1347f589bd15f14be97446f5dc82b8cea60c9fbe4012a08166da58a319c2d8ff68ba667abcff015ad4b3a2079ad2aa78ee5c380cdc4a0b3b8f9055a0789553a664b6ca7e4d229dabb6bc06963f2c8a17c6074306638430cb163371b40390ea93800145a284075884d946760efed22a10e1f471ca74121da02e56fc39b2a33fda946b4152254451b500000722908cbdd062f4044d5ebb79adf1b24e08266b31ade37d1e8a0aa15bc8f91143022ab407887e479a38638d8657a114937fd25b17941c6d0aa8ed0aaa3dc5ebab33d1d773a8aca00d799bc9cdaa8b6aa2fbf2bd18cd9a299492bbc5839fbdb295690888e217b42623854eb72f20e5ee723984ad87fe07add8962923af42117b48f77df3d2780010e450aa742ec432747922204e1f1d2801e45e13dde41f8439995201ae3da082cd172c5b6896a4c060f68ea346a835d09941266204c9f4ddad1556e66b3263102d6abf308ac260009656c4dc056920458eae1847687d91b767618a40fd24e0ca9ba3331525e5efc3df9c9ad764dc1ee5b34fcdcbd3296753acc1d5b6a656e0cec3a46f9049f91fc0e58e54ff41954a38574b75a95240b44895cd1109c5d56acc15123fddf3dc05492cde3e3a0b5794561b5c2de2bc09c7caa320e7f5182d8a138f20f2950954e0419b921ae634729cb5c6c6661d96fe8161e8b669d54f72db733984bcd6dbbe3052fc81c899d69cd47a0a7e281fdeb6816b1bae5134f3e6116a217759c2b14759e680b0af533e60d2f770903d30ee1fe053b92215b1bed1adcf1119aa380470982a8025242a07a4658f45dfa1ed02755f9ea3a799e7278ccab5ab1e08611bc49a9d2a8cc5fc11664fc5c1aa171e1fe57af93792bfe5afec6a2649c3cdf2f4c43e0943d34b59b47ece2af27684aa50a3f4a065047413caf444c3e9cf2c43999f0c55abc98b16288482b2156c1095ea98a002c068c11f020de9de33529a55c4a95a71d65150983c28baaec9a4f43fa534e7c12c754950539335507d88155377024030e90caef2c16e484017c45cf7ffe60c0970902c93b27cab3742dc989b821ada105d94f6b4589168a547886ed1b3b0183c968314c786982e27d8d40c560218f4e69017dd3b3b53eeff3b8c0ddf5601ee19d29397d59db690d70cb1fd12a4147ea09c0e762d9a6f1a247ec34832d8d0d57dc2a624404f54140b868934f06262a479df60448db196b94297576755b31e69dad56800503cadf9f2384ed8bb5638693385fdac627d6f518ce31f04a9ab0dd24f170b8c02455558644c22262c86017d1326ec8bfd93e4a4780f151d2456152782615d6047abbf388a26071308dfe3ae355e6bf83057bae6a9bfe3cdf36baf44643c5b1c64ca91355718ee481c4abe7c40c32601430b13681c62cfe206358ee890969428b2297377e53a7b7394b29d730a23339a19a2d3a0102a3587d255bb19b927c883a8c72abe44c7cf2a638cfdc4d8872533a7ebd12746e44f2bb1208785d988f50e5c31925dd20ee1437b260d46b2775375758dcf1f88c15ea1fabdb11f7cce166a0e512edbb9b193bcba347d8849ec21bb1017ba858d179acd903416f2f6183b5c64f08c0db5dc5ca4eb7a60e5e6ec97efad562f52ce0e938ac0aeea5de36b00fa800d4be5a715571d2c2999237e886917ce8f7df814c643cb6ac237c7c52379cbfcffdfa0c03f9b4d23f601415b2ef1c269ae44e06d73b30680c761bc42da076779e5828905bd4d16e453e5eca8f05b58d73e1c645f5ebf323299c98a3d71c82752ee44542b78afff4a9413bf1ac4d0ba03e5899c52554e742b02fed3baa486792103705abde5e2c54a025fd5f4eb79f940c8553b9d0651fd35e1924226a8403451c8577447ada0e19441e82167e2ea14533c8131b34b267bef5745273dae9730d70d41fbcc6a2a801994fedb2ae72a746f334f49645b58e6a6647169aa5f422c8150321f8ba0df850c775ac9bc0f98d548793d6141a1a92ea3af8711f74a32c2032d6ae67e31c4f028ecfd084e93b43da0f2024e54f031699a686b83843a968195d212149acb867c5d15fe0f97e577336c0bdc34ec75b3f340a27034b763fa8cfc79f1cdec58dc6a8cb446dd6b1809a62dbeca3a9de243042ef7f415f66d6e491731091508213836cd0ebe5b3ba56015b17cdd129e8c8a96975bff8fabf8a72c8ddbfecf9421c324cb87c9db441afc2918b962e8282aefa03f6e0f1cb02efe34c4adf17a259e47a603edbe01c369081a3cb500fc730ac7ba455a0bd595bb190760a49cb6210185ed9212c2c847efd1d15d333a2ef9203318c9afb4a3fb8464e8e099b75785b38513ad6b88fc57c74cdf16d8f0d73f004a5de7855ba5105aac101dc7a00e9322c6198648d7b6b1ed0859a31c8d21ca2b1296d91ed557695e0dc0e5e95c2aafca8c3bb9eb228bc96743c79348a8c0c696934d7ad07c04f5986fc486422d16919fd778165639886cf8e273ee1d1cea3702cc6f6cf3f25c8a32bcf65934158c5cdd096d3a09ee3025055114bcc48fea6b9baf1e8a665c8c7a778f01bacbde08da5b7d97cf45d35fb87aeb7d20b28948ae3fcd0d00a0fa4ef55210e61a70904086417e1b6ea04f719f0dc47ad93e0749ad7c71e1714641b877795f50c1e43244a290bee8d782d6d008e6f48caa945953b42e14b246a70aa38a5d45df90e695e58f684c72733a8f3424c6a12c9d6c60b7975d9141c6c72401403993ccf6b386ed747a02e193efc2f8e7ea7afe7b1517518aad5c004b64e6d3609910c31058802ee9c8cff97648313de49a4dbe0cee2c278845f648862b50bd47a173cff776a6f4b99f2b39041b3215b036c04d3bc140dec0badaa26aa9d1cff812008f8aa119406bc77d9ba49abc44a8d52d39be89154efea6ac939858e6c87507c7c048d307f1063d0382e8432bf48bbdeca436cbc9865ee00041d7c74acfbb308ff9819040553218d913731f75cf1a0ac2353f39b2985a5b9188b8006b068c118c35ef935fe9c92aaee7b10365d625955c854620cbb5b5ecbd84a75cc25c073fe6cc7916d7a19c583884304eaee09790b5134612992d00c4aeb02d2e4b657d02158db82919c80b926dbeddd0e1b92188a9d0aba87c0975e7711ef80ff10c1047e90b01585b05831f7c302be295662a273ba7098d790677c9d23aec762f79c37e1ae035b13011d81cbb7bbe2b2f692e753b0b07ac67e8f8f85afd398f1d65f4b644c42b884619530e2afd9e26473ca690e54ec3cd105e98128f5bd6e0a20481563e03df0268e1e1245f50493a2140e54357c94c5cf6f2fdc4fe67f21ad53825582ab3a5b0f3a5048d72afb95fb2c466b3c5fd42baae2c3e1862d36df1fd484b7c5b7e9573039f21d6b8dac1e8cdfc480205bf8e01871eb49a26d5412476903b23d432600bfd5c07cfdc3d54df998763c0d2a89d83974f8c70f42393ac102e031b0749c9e9cf56f3a03ea7d166d3c446b636a0988156ee1f75959033742de7ce54fae2476f6e08a3aa3599b9bb80fac0711c41b35fce01ff5081a6c23669ea911cc838508710aa65267564a03245a66991e18431836d85e25551c01f43eb6321363df217ee7460bf017a6e3fbfa7e4f2d85e4a7767137b04c3b0d569aaf0a3179048879393d470d99854e38f365216208e23f0746d9ab2d9b169b6aba5a13913bfb433f3d92039343722b752641a059acda0b436fc55f4f728563d55caf0ed550d8b7a48664cdb172045867bcf142bd93f31adf714910f727f2f484a3468656509fdaff090d108bf0c0b6c7c489bd3b974e3b18ee9e79c3c21d7cab0e4ca4150628c95783b6de9565fa0a59b87b72fecd93b8af87063953e388ab442afa70dab381a4143e648a0f6c9b8d56dd0fc2ab44204a21683d7eb820b6b650bccfbf05f3bcbacb5f35823b56ff5b3081bcab36989237ce92cbd9722db7ab7d3bbb0b2f8197a9969f7ed39e952e83bc5d87ec747cb62d25e7bc0db645de40f58a99300108a387734ced8b7049b9d429bb661db2401db06285555bf06ba54f0852b395b974d120c24c1ae8dfffb962a0bd01361e446dcbb6e47c83f293e6ec8bbd9fcd1279e21601f161cc1819159d996dccd561fe94b4266bcb0e70aa2cd8e1055981c56e8be8cb75cbd94d79ec35b66da8fb680f8c082d58b0d4605b07af0aa7715dd9e88a504bfe0df08c05905b3aa70220a935429f4628462110103dc088cea2af98e1a5e67228405ae93c025940a04a4e06ea3ac8cc7af5e9fd543f4c5f18098a725b5b945e307488b951cc6956ca1079e400572a3c2aee1e14049145f3303d70fcd64bf570260eb15600851e4aadad63eb39433429d94ae9d744f00f06e065b55e890c73c2176b5545c6ee2375106fa017122031d615f310a5a18c678c8bf6dc3a23716df1dad507cce04f71f1acd331ec316666eb6d3434c9d137c29ad4c1884742c992501f887b6b8003d0bd9b0881cc860c5d245ef20ba1457c89641c245a1efd9e153f96c2f74ad34792db0e7a16bf14851f69623e7eb7f52e5b81d8e656ca84592a484c9363bf10a347d012874be87ee365d8fdd2c8ea565e070e25c16b5215c6c540dd1c603da88f7391b5e9f4110896bcf2e04a45ec3af189fc1cfb5e5b1a1cf61b675ff3e2035e57ea01dcba5f23a86017b173a582c55b00bc971c4f8c4325aacbcfc785e3bec3550991e14d4c6e6aa3b539539c40fb11170754ef39c9e77036011cd9e91fc515240d07d3305b4911c608b0dc752ad50a5df12e2c81ce8aea115b99c0a95bde090e52d0636e2a773d5a360e58e97baecda6eb190cd43025e2eb85c653a262b97b7783dcfabf257320e9beae1b7b417799738fe2b5c3522c3ca5696c45101e2ca57964b832a8fa4f2231aec5501b042b8b3db1857614f0092bbb50fa413fd5efdbfa86ec741dbe512d11ae688f7eecadece5d4514d8b68eec12cbe59a94d1b1e3387f2e080718797cf3e64cc08e8b04a2638eecf8ed8e113ca03c57ca9fea81e0432aacca51b3b16e49bdc1f335c66d02ed1781a4c67c7fe9933df160e9aacff16d2874668ef297c03dab960b8c0d01271ee32461cfb1dad289d884d72d237b2b222b91dbcc3d46df8881156eac561a19db16993b08212ef1aed8743fb7a48bfc8eb07051722cb37f156a444c4fb1720c32bf31b57214db786171f24c38c54af7dc46a92742a5a02be941f007dce851e8fd58a81dc05108abb7d88437b7a593573f04aaa01b26f48a8195b71145c8cac1b12ed63f4a785a9358749f6ea48cd8b3a06b1ef757a50ae88b956442e4933f843adc340120760138464c9f5f586012d55c5a8b4578e5de9184f766111af175f715d0572bcbbcd3477fc79504c59ef8069fa10fbf8b482cc2efaed13d8e69fdfe46294c37b25ab94fe07b4ccb0dc61eb8a30031121bc54ef7ec4e8af0de8a6015765ab857405fae2cf3421ffd1d5712147b3ab35096a9cb40ec8457ee8e14da1b96963ef4a394881eb5a2cc217f082c03b1fca063a184e0b47b6091f13e5b39c54ef7e63e5258cf4567255a2fe0fe120b271281d7e2d8b45a3baf2ac5c829aa838d08c412361d9d54175a881851159f987cd0523dbb8b9a92a3ad424580ac8e8cb07a7aaddf4264f973e68d27e1bdc4a8a5446bd944fb50f80b07d69bead9d7de45cbb8574a99333631f839926c65475286c0c96b2f1746c3efde6afbb88e46a758952b0231541d1baa020c011088ab8018550c141889324b99c83a0e8dd4051c7040e0a8ba56580b2599ee0858aa99c8130159fd0464fec66aa5122b9361a55ff98a810aad27021f480f3d624fdf9049ba4ff9c1280cbd13ec4731eeb1307001cb92652ddec4bf7131355047f9015c45275e201fbd3458ff91d2cd81c38de7f91c10c9e0166b6dd57f06421c8aca9c91a45a307968c4327a05dabeb324c9ccdcd2e359a5b94d34ba7ae730e7404d9e11a25911365b7578be1e8370e5e5c388a7978645e97285fb159ace702039e5df2870dc326ef48eb8dee54bcce93a621466768d7f190a2a0c70c47ff70deee02e5fb20218c65feb89784c4f394323ed63ba4af49d5bd60844e0325469028741a4a6db4d2258163470c14ba0bf1e004539a5d32aeccadc3032f8611fb058e0029633af08aa2bb38080066769459ec1ad06e390676444998e8052156ef42706c258684fef1b3932a4566cf1712f57780d83b3a1cb3b38e31c187f753043dfffae0455a262e26e081fd82f8133e7c3bc4e377177be6d2fcf8ca7e67f05017c0962a84915d4dc11e31ba769542e99a517b1a2587900357751a2fecf5caa201647e65be763f10bc131c812333feb7446265e7e9cef39431304df381fe74f440937c8f564c91fee3a5b9b995bc2680699f5d0d27ab67d7ff73a4d76ffb581f7065e35e06d4dd814401efe6d5d54b78fbcf5d8780fe1af6fbf03d414bd9f73a5491677859e8725ccf6a534cb49e96955971b713f88297b1acbded5bf0cc00225bafdb872d12fb9d3d585e7e2407b407365deeb2d5ef4cf4699c47ecc0ac0052f475c9185ae2c011d8bcea422625ff90f4da0d413c19f15745c4da91d22dc4585fc12a8be85cf7bcea66a394cb1b393ffbf1ca1b49ecd1a2080b68f841f96d83ad197108d6abde00112ec2b7da4e7a345367ec9cd00a5b7571dfbc8f85aa28e632b91c8a46278d8734e12fcd358909c6fa880990555c324b956413333441044c49e16a90ea822ab4be08fed51934fea4f5a2e037d70b3c6e6cbff56402cad7f48ac10aa0a7950a36442e8d692be06802a9f4b8fbb89d0366b3df6eb69a1670547cf1e5871206d3f3d1f221ec06f62a60d95dde142674f491680a27873409f3db3cc5d375c1d05147bbbaa0df3eb1dabad224ea5dc31bda2ce77e76ac541c5a77d13392d33a1bf49cc0e84c222df3bb6a3b9a1215607aae33b98240cda24eeb2ea584317f6fd5529c5ebe3986593c1562a741cb982ed78d8bd7f21c589f5fa8cc3e7a3651d0c9327c4c10419a5d77337fa9c876b9ea86989ffee3f22c8ca1a152b414cccc8216a007a5f707f37d6845e965ef150f2f4ebe7b9d5909f3f14f72bac60479e668124c6036b5ec8cce6f80daf2712a8b0435a94344f1ab10023921214301a405c80b1103b89e011c7a9029d35130d78b210214343ad108bc58825d6c93dea9b7253f15bef1d6b2ed093a6d0c4748d8a01b42b6ec923710612880957b3ea8f6859eac7b2dc51c88b0670c99a122debb2c12b41ac033689772a898959fa1dee9cc575b0e938e266ebc585cbb3486fcf12fef9bc5beaa1cdd2c8c91be6f2aad0689df150ea464aab916e7001d4f18e885de30caf045146e56a7a6895c130201b8ca066d16e44f8bf1ce0af8f205399577032eb13e9907659f27cf66a8d538a451978cdaadba97ed61d1389ce7dbfab5790e46066035812aceb5bf100283b071f38506e9a3ba815a55da57fd3057b1389fc8c1667549193f461a56b417ed37fdefcf858cccc44f8bf8fcd94d1acf34887bd27c5b7061a524d67b05a7a79660998beaa99cc8291396add313c11fef3397e1c9cb9cf443868175c01d0328bba395d6be6481d7381b0a004ec9f8e53c984a2775562a93899f9f73fda2c1d6e802934f02e9de82d1ec5eb011145fae819cf185ae78bcacf8a4524536c8db9bc8c08f3ce3a672de8941f9ef40589ac4fb0bb10fe437ca951cf528e03e5fd637d3e71fa7c29b9db0890921c450878bde2d2389d269de2daf5acb330284044622b30a1c89864e6b5f962a03b101f9713ff7d0b85ddb8e67b94a75ff9a253a308dad223bf1f54fa845e136b41f0313377a0ffb889a65f4b69241fb0600ce24cccc0ac9fbbff9694c3c0e1233dab4e99d4834b92dd85f284d77bf87e3a529d8b8bd16390ed2568f41aa83d291b9412c4acea82992cabf926bb7cc06c0f409bb6fe6abd666cd8366dd1df60bec54604d9c568ef2ce3a30629f94821b6497afe9e2b484a55ac433d2c9ad3e9be5416b98793f47ee8fd6472152f7a26304776c2c1405163311e6b4d2afc058e6d7134fbd892a811b7b91dbd7d585217254a6b0561606acd2a9a2c5ce4c8f093c8e2f8dbae2775b9df25fad201b5fa17eaf21d39bb6c683c81dd8317443c8f78755bd3ea93082b08c25af758607975bba8cbc161a8f9c51085192c99c75c1198447bc64635967cf60bbcd991e2d7efb729fa74a2d3acec7c2e67cd2ec6e4c317836d8737be177f5eb56a32dbed47591895fed56a36e686b36ea1e3464f32e9f343c7ac8a1e1939aa981f0c078aed48b0a7b566d2bf270eb774fe9d18b013f2c1c1673bb42fb05f93f05aba81746f53be78277ef0fe57a388d481e467baa56396fbb9f6132aa3cd86b32a0caabbfcb37401507f7ad41a6bd80263309fb85dc52120d5ac4de2fa2fd9d3d49a3f60b67487487c919a475bb338361953d0fc2680be7cbfec9b6a480868374d1c4bf1b6291002423d395214636748db582da68d725386542e4d4488e67d9c3418413662a77dd110854679da1708c7fe94395a95621bec3698349ba53c1738c07b88e5c0e35077a9dd626e471a3a586bbf35734ae33edfa68e4a34a8ca6fdc4b33d5f94ddbb4a5d8b85ed8fccd72da54c76f4b8601c5eced925024d0d240cf47cb07b138f5509c7b60d4394d742ea04396a78e2f3d622dbe6a1f997a9bb2bb2441157aec32e8dedc03f604ba6c80618309cf12651965399b4f4dbaa765ee1db2cd5b21fa61319d9b85c1e2c91e11287cfc907df8787be707287c0617adc81f85fcd05f4c0ac7b6b0e3f5cf8aec6fe31d60bcef0a951707a6643833c565754c4b6a083f5fedb78c427836b56f2b07d31090ca1b84f8b0e326c85dd26243bedd2f275448d2f6e01a800b97047d2851a34901ac08c6611fe8f08f738af7c2bbe1af585bdc70848ed3233f64465c91a15ffe07a3a3b4444f45c793d534f5fa4132056952bfe0a55f5a23eff803697e582850455bd5777cf2eb9d8f03a0ed4fccd8ce54fac85ff33a93ddffc80bf50339a17661327ddb401a60c3aa5968705cfd5859ddcbd4ce78b5f1cf452187542eb47029738473a4ce7b3dab0b37365231707ce18864a19838a193986c04214e3341a7bbe8a7bb33995117d69449c42a710872f7d83d0f32921ffbdf0d46a825c002338e0ed517b008392be32544534c2102370e736a125ac40c5efa33eefe9ed119e1288d04e52d68cd87df9408c8af828dfc48e5cb95ce4511868ee171b4f431480ccd0ea71b3d24e8e8d2f51008aa8a3ce5d2c6d27f7962d3d7c7b5e10bb0478e5c78fdc2b7ef5a973955b546aaf8b4f46112b5cf752a31f15e5ed18ee29078649203ae0a41781ea035ae5f99eeb34f8bac4b5cc00107c63cd87567e9e60f4955d8da4ff60d27cbacc8a39d4ed635ca691927791f3e7cf6ba143b9bdf9b664b78d3185915405cd3adb446482f19756267815d033a0ed24a284e69f0ba2acd65d3d7c9e756125ad8cb3215bfd77c88dacc8630548f96ed76161f95a8a516233195d1916b64ae03e4a21b440c087aaf15403ad6a6a7ae7d591352dcc8ff3fe8784a86ec18985f4970e5e91c06b6c9674c45167a8615352a3b246067cf7a2131a51b022cfa57ff78c0eedd32244d5fc2391d4d34c019ca92281602b61245e320f371981cb04a445508ae3b98e10e3dc3e414ca84cd3f8ccf75e89fc9d64ae4f8cf7ec12a8eaaaa661b37a257a6c3f53e4b9175990bec091902e0c900f0f084fec3eb22cf6166c79d70de1484615508f744f38f9cf1d0cc4910b3513bede5b2af429938a5d2e611ca53566db5ebdd32d426ee0be6fbd744a687cc746576e742e109dd876fe6fe16610071b41e93d7d789f592f47ccb07f851b929c0efb385130f0e9b88f95d0c8434119c04311022a0b77d2aabe59673c10ce5ea772c85b6e71e88ff42c82ad689c550c883e5bf4fc5a79a8cfc03e4b129e3fe39de1478e1a8e74b4ca00b8b91f7e62670408315f2980089cbf813a1e26b3a3fc1eac66fb581473b642f4c50e422e82219db6d65e141a93a93be47f81746bba360726beb943f678fa3a3727825272497c5245cc1a296cc99605cb8ac5a2271e3baddd2abff2640dd9686bd3322b55653d49faf5b553cfb1d630c101a7207cf17066a2a6eeca99fee944027869c81babdb98ab22415c9281b4e76c01ce1f0f10c8e2912f168a5093b16b82c09a715a3da17caba2f71ac9cac9c1825dc760e2a44295dbf8869132c8545888871633051c74c2206bee3be02ac913f647205316f8c553d8e692cb96131cb77f4781ab2935e5718ed942b08cbdc422eab8aaa3c5be8ea8b74ea72490bc56dd59d04d1334a410bc87e0030984c37fe0eb5df73a2dc8a8d7346868ce4e35dadc58992ae28304f2b08a2776e253dd6ab53e75c1b8d797f24839e460de64aa23c3dc866f87f720d3b7eebd3072ddfaefc9ef79253137365e7ba6b34b3adf58027d415cb244786f7e2203dbca4399832b71cc922c829bc9e108418c8f5612632ad4c7b3178988747662697dfbd550407b50f80f0725abc89a9c82ea37310e502589a39c1776742444088ec1603f8af2016720ec71b3be109f43cfbcb47c24c56cc0d2ffe12d9890360309612d1aede1f14e3f3ffd1bc7bbdb59975db04d8ae903970c04dfe54e729bc834339446d1fa971c838210705629023d53e6ba39b5e9b10f2043db60ab13634372933683b2d624ef50a6c9cd5a461e6ba2f491af944498a8377bd4d8d68de45fdc6c440d86045bb13c1731156b88bd5e19050e18acd819a85941f9bfe36ace3fa9938f624e46f3467a79c58dbbb426f96a7903f4c038aec1a2736f1ece995d6dd22ef6bb342fb50a20b426483f8899dd7bc4515b66f16160cd0fbc15e4a4c2920140ecdc56bd5bdfad7162976ca6498e4e0b58314fb89727350a9eb58df16504af153c50f69e4d8792d0c46ed1054c641acd3f4aeee9846c22be71858944c35607573bd0ca4553ddb929c2a215a446a3a2af8d14b7417f31b702d4d559af70ab2fb4681d7d9b4031ed4bb54b117ee00e02318034a4b15fcc362eb7c23e4f164d5f0701591ddf9ea1492d7ec10ece6724898a4dbdf3d3a5247f8c86a0544256adf004b23d6b185490ca17adf74258d9a6c2ba7cedfae1477681597a4ff56eed1cad3239e7f42ec885ffe787602b50910abd37e058dad679a609eba19aad7cffeac3540bd6d43aa14f22246484845ae2194433f32f77fd95074e4e8bed7ab4133930ed583278678cd067c7e4ea82800e563f10ab4a3f6c2284f5bfd2b87a23706689c45154ee69e6bc03e76a6565a3d2a5e43c59ebb8ea159db2b45ad4809b1d49e9788e6d4d73308063822172439941d28e9750fe396bdb73c2a3212d8a0ed64a024d4b4aaee7b37f563de973b726db934f7515785f077f6e9b5b6c38bc5cda516062ceca5b519353a00b03183e5854f67a5579598cb9ce4919045fced31b83b511cf5be30df4a7f737efe90db6ef3c9b2473628754961e3f47caedb509cc5ba2e8d523d5277324d774a5d614fc09716d251d8cdd65263382ada1a7709b3c883ab4cc0886eae0c3cb576c413edd61ca49d24432a9c961108e5e20c350517f6cbaeeec68db8300be26b245aa4ccb1a0e77161f330d84906c65160601917adbdd9708e69f09c562ab0807694b6181883c16a8df315e75ca1f0ce0f45693f2ba7d7eb6c425f362c0beca1539638852c87275a6e008237ca406737be43408ebb219248bda98271b17c3a367a08c9d4b3094100bcc2d42c630e2b1fdf0e827ad3da6ab2c6fbb022310447c5033886d8607f6f0587818d537c85a2554dbd9f9755787372f8992b2d5ea3c2dd609379b2200c199e9e31a415196a7d53782d02ce8ff95ee3bd8c0cfdb7ea53131b8815d1fb68ef80168f1719922ba21daf0e483ae3ca66fa3e45e5a04d2cca8cd930ec9286002baa0a2843a9f34adbcd55e1210aebb04bab555d54261209ca4e59c79521ae6eae2aa135dd0897188e1974bcfaca908d850d78826cb15aefd232f464320d27be05ec615ee7197ff03d78b44f2bb8db6267fd41e0316187067edc80c003c1eb8450eeb3d74119b851ae748cce148da1f99469b6797e7b3a695b34af1b16534c7269d1ce313b12e9fe0aab466dea365272306b6989959018618d2630e328d140ec4409395709096a35395026e5061f97b2c4c0ad82419b0a14ed9a136fc9b6f1010bc3433e760f6fdb41ed68b9de52efddc1780b6c514d6eea79d78afb96b63243d17467a454a1515fa70765d695178fcad8782a77fd191c990fa1bf0b181192eae6d3b44c16b3850999695e8399c5b4ca052a479d4275d0c8443f1963b7f15e5c90467a8cb0c1a65e006c3782f842ef6539de9dd87837a7d2660ea1dd985f5979512ae9b03ccef0ff16105039d1dbb1b7f6cf1b885daa818410852438375a8caf96abe328af8be6464dd95d24485526d0d244588f0ba0d783d3576a037ea395e06dc2ee3d842f96c77860a29122f91cebcaa17234c046d8c6841c5cc62e745b8a1750b5979cd959e29f922f201e651dcd6e0d8ffab061baaf7f2e3d4c366f37c39992bd6c2a9b8e2fd477db583edd74a6c01fbe888fd03420a73f5e9d51806191a43841c446929ac8936826567b79edc3362a656b5ccc7a2b51a8b89277809d351290da8c77d9eca2801e873b1d3b9c23bc9b2b60ebccc79c1ff7a8a9a9ba31c115e4c95fd828051fcd87ae40c59924c126cf5c3b21e0fd0ac53989ae0c8cac2d582952c5ba607d6f5904cdc6fd66c17d701ae67e9b150443a862a3a039a1acf73cae2a920970a6952e9e9241925c84de21db39eaecad49505d921a56ca9e9c3ec9497776579fb2539514ad769006dca739e2fdaa337a45c974b9725b31a7b3386ab76b22cb8261b416e7a506bef0a2aa27896e72526761295cacfbf0dfff9b0a448f6ac238938bd9a17946caad8b2ee4d31a0316e7faa11000f2592b5e37cc988ca51137d5800d69a2d11afed13399d6664954342af19a8490de7ebcdd7949a76c53b47acf8c40ca1769340f33f321eff66ab653b21732f4628468432b4989b7a1dac284cc9b2106d2c572c05bc1b89c641acb234598ae5265f74c5f39b339ff9328f13fa7be88f06d5d1bea31a71e6ca6a669a78c530db0f20a3e368c2e9c43fbc20e3c658ea7ac9dd061e892b35a094ad30d0ad51c0ae22019ec458c1f9981b8459bfacf1cf6f2afbbcb82fcfa52b24089b0a7d602f4e5d195631d9192ee885f36929b64eb1021c28394867e7b434fe5cd2c79b54973f4dbe02a01f1188146deefd0c62b0de54dc9a84513fec994066fcde72fa02e204163d8c3f9c462468113c1223bd7dc2e2368d0bfa1459ffd320b245a9285e5b06e3bcb7dd0deaab1cc509929c72d0594a67a604fd9f7df7980ae1bf25872675adf905286187e734be3fe825ac09fbabfd8a3ee6af9117b75011b5337c7285c58e1ba63c853fc42a4c942cd3af30b9100c92b5cccea9d1c1e15ab22bdf7e69e0940fa3ed1dcd7654e379451c9305eea21d049c720251bd2769211b10a09704082b43c479b82799786bbf6a315f704e8d03dc17433e48a72d15649e220206f99d3b50b6622c1112f56d880230b33e94fb174baf9c3628e302577aa1d392ea684616ba176519b163e6ddc982de9e5851130105d395e948b280541d2bb1f268649c23c3af48e41fe075d4a98c9e184794eaf7d7a92c0e638e39fc61679e566d6953572210310b021a30aa3cb9baf5349476787acda776002d41d01a17b9c02378ac8a530400040228ffe295054ae3bdb702f444f4a5122ce88a34606fbd60df9d111bf737ab27fd85e69f7844afd061b98e22429d740a015d0cc16fa7d332997f1b021f61244341493f6a78a6f3ae0a0f4224374afa127197384ccbe2e0169f719105b703edd542c2052f661e6775fee32fd71f2d1c413f8d9ad0d3524f27e1269ba75480ca3f81fbc95e5420668ff27491e3643165e0acdc8cb01cb6e954a4815370a7a86b9a8bfb6cb279b652e4565c71dc7f4477a3efe2fb5ab95b13281df8eb794d52763d5d8283a62c04967b4c3ccc2de1de9b1192c5869f77a2906d9cbf1c24dc836c73cce79202cd345922f4ecf4e9bbff928e785b02f0950809f573f68759527586c14aa5d43a838a1fa2b32c1e2f3de58ada0619c08df65460bbbbc10bdb58da1cfdc706606b8da8fb025c2ec4a2cc024a099f5e60462d5150ba34f5756ac2a1072c295b85030298caa60436692820e0622eea86bcc0edf7e9873e225008210f541161b8478c82eeba600dc21b74f33e195423c6454876d9a48a8cddf5a926b448c6a564ca8df883b121363e844a69117405d24acda3f1dbb728d2e5636ad8f657211bf22d32a7856e22d382326dd4243fe893c70c0c7bf85c118e9db6e20caa30a5d411b3acce7ef0fcc2b675526ce1b303d73514cdf692b3514f7b02be86ca1104c18215526dd1d120c92726a67fed4d4f079b25cef6e75f25445d176230273f3c19f50db15e56558ac7a10051a9762f32f21bc78b17b054b272b9715c93a0405d77e323154c05df72ec5b2c864373cfab83770311e18a411938a888d31a4b0e40b2a42c6c043010ca95f02e3d3f5ef14fd70986deec37eaae7ad196385598190ad11072ef55b598112ee0437b9a5ecb014c3044f13a8a8f289d0de8b010ed707738c7ed38d8d5f1a69a3bb6160ca54af3f6a4d61b49dee4270eba4386d62109e260737ff15cb250e1fa05741f6829a7429f5b9d67fa5f206db9d48c1c6fa6ab872306a30a2629a9f86f19c03ab62e666d7cf422c5052100a621c79521d50cee698fc68a3791750d488a329c85e8e33d48ee5a6cda3fd13c8becd78d00195c9ed2a1e0c27c57e0e32e0495502aedd3f561a06960b55860af6ddc0bdc0f9c648f0fb4cab98885ad9929f8501121046b71c98f69da61bff590ebc304c78fb91be79f65a1afad0f8379f8e67856d7956d0c9e27651ed01370238bb0945b0e044af3de24b8e110216c7a588357130407057f5b4ba6c19f1da44c174196182a5c9b2bd281e5235084cd2b076746d407d1b48ed021f2b5695b7e1dc34dd2a2f89b16bc1b89c1559106629fa50f602648930814a96fb9ba6821f48583bef8be8565731ee858331b676957a0baedd9151b92169fa180bea6f37068673c60a84fc63f8e706257a61a0d8ece78cf62c0e42860053969b89e1d5e70c3b601a37e1002ddad59c84c8ea418d1abc211a50761a0053d52483f0b2262ccf8e912f9cee30e2423ca460120b45741ed1d0a2c5318d3cd47dd02e66176b02722b813f480587da3ed9cae0873094a0ef196f3d96536054e20bb82cac47d08cce1d7fe4a852754f10d90e3d49ac778617a4eaff6e97bd56f7bc65a010a7a196a7ebc99e43065ef502f6f55c0beee094558f81e7f0489a5eb27cd5c8c089c3c0d1a21c17c821b30346dba1790c32ec6cc77f3afd29a1170dd1c6a81d62afbaa05a3934ed4833c77ba8168fed82c78f71a6addb409065d1a2491ed61973b34ad5979782359ecb7a1b9a8bf4a6075a5db3afbe301832da19e649a5a746f0c79bc0b1a7bf2c332ffab10b4684d5e79e46e8ea931f3e1bca1e2cc0e99766c91ce92477d058276418183d72f9fda731d5128325eae538b3eb577744e1b000b0ada227864aa42f1bdccb48b24e8374a828a52b3f8782470f8394cee86e020f68aca8063d0b4a4e2548c10dd34d3dc6158a9d90052fbb7adcf9e24c3b32f887a2b0c89853c8f3dd0a4113546bd3368f4dde21a36b282ee828a7b21d80d50aecb2a8cd025d1c600cceaeda74e64e1d6a81d8314012b985eec2f5514b83667ccb7b9eef01eda048d34ebeab0f18b70530ba857cc5e36b88720d645326aca9b74a380caab2e17445b445a53cdd737cde6aa0637337f16dfce2aa13f4283b08c71bccc06f7f74895b7ebc331676fb69ef273c5fb013fed1202a2014b25ad859d01500fbe569c5e792ef7ca809c242a18002f510ea85ed13e923065914235a738fa9c8cc5ffd892c528371a1c2285409f330b86a01532d17add8944ae22e9c0eae4e2f0b25b8681fc02634a3dcf0558db59f4d7168c23b6cc30baeed8676ea80284c3bbf060cbc7d1628df0f78a3fdb57c93d4be8927422156801755a039ca014154c6b5b562faad571c6f66f6f4674b545d78c5f048481a4068123b79f4b8522b752d528c3f3f1195a2128ee209c1e7f3c095cc40eb0678ac38b9f6d563ea7d6bbb78ee664814a9d008678a2f5dab7afec336767d93b20414842dc72b01457d8633201027a4447e518e7ded8679cdffa8a838ed874f6e29be815d15642e516977667196088a1aafb07fb3bc18f8440e3c7fa3762b284f4e380215240e3b295b57344ee88372438390f57b5841c5af464e4907d88bb95e45ee7c569425f33b4d6fd05ecc99c7b273d6ab12302170c64bb23fac02e163f808f3ca9611bfb6f148767852a7bdb3ada580d5a0e2d01f4157ad6a5c72780488b886be9fe2523e9e252ed3255a34d7ace96fe58f6f008f3bb1ce44e1e9aef51bc34538dbcd09109c1e31f49a133ebac5aac5f84679915078fd1cbbf32b819162f65c92dbc4fc8d08a3b2093513436d85932aa7d5f1001b3856ac5feead3c4b4b1c491ca03e8cbe2f1633b001cb1249e5bc086a49e0dca0cf31e6c406740461fc3298bb416562dfd99ae2f88902dc4279c84501d8391ddf8c5b5c3d1c35a1afca36977518948068fa5013a9c6c5c01404f1cc2813119e94f7d72bede6c2af1db9ca5a95885a1230e693d15082211a1b5e3724c50ed47a18a186586bc6b0c4c2f446df4bb5d89222753f58af4529d632a1312e063f4c581dff3e2d9e80469a8790a68831cb7a9fdb5feb6f4e92c7425648a5bd5d9e5763cfeb8a70188f069091e08ae06148e2f87736e5314be6753d1ceea123bd774f0d104caffef26c78e62bbd4898f17d1b17a67a3731be34f28dc91be0525e0abcc28ada7b69207a0010c72d7e4d0d8309237eb8075aca7bfc1934eaf0c038c7093489d58aff8e54c0ff4613d0efcc6ed840ba5d28bd99197a117bbe13228ccd4da619d7bf1b04665830da98a51a8f9388934918027965d725b8f9d8e0daa826eef5b59ddcd8d8a6cfcaeb76368a4ad149a2abcaf8cf82c5966421e2dc93bf381f45aa61666bb0c1a33bf563358fbd05e49f9c58bca3ca9a33599eb54d5177ad4b31030a76f8a056527dbafb4ffb7cf92b6db6beb3e432bb9e5d27aa465a53d7d01ac1afef58abee25a012c426e3731f7f30d9e8a4cf3b58cf0e59bcfe6281285aeffdf121b5a76d076bdda18d3168e8f918f9801835edf4d7d66412f197fbf44b541670bc23851a470de1282fa8dc69047a75c4d11d035fbc28860c26eca14daec9a5daf911ad122d58f59dcdebd39480469241b31fe9c6988829a731cdc9cd0b46439a5f21c26bb67168bf904958d276a544f4d97d7fe61d246acf2adc1350fa7ed595ec4bd82ed4dd03b7e091a9e70d20d9f79386c595401ca6c7500b8621c9a1601802a088932c1dc7d5a409438dc8a040df294aa908935becd243c2e77ecbb3c13855672250c1b985019d2221a1b1238398e9e3e6a45943c8708557b51a55a4fd6c9c02ec78ae113886073cb4242ce41b5f7d9a2ed5df3efd408c6a30861b20f77fdc542334a5f3a1ab97143ff65a07ce41c506d4e3bdc51554a764539175b6cc48212f8392723cb8c50a7d5393d60d407f577f50c8fbda43333f5c5199b154a81fffd12c18103620fa899fc9430d0bb714d6afad86d4227d924b58543ff6d23d1756222f642c9249ef9ae635f75f4934f54348fedf43bfd2814d1ca009efb6fc56c7cb0a24ba516701445ce8cf602615e5dce2e8230884c8628e14e2683e1e94d1396dc8a3d6acd5c61078f5cc68eb90ab743d4b7dec6871a3f83eee25e8477c5bd1b2a54b65487ec06ec15a8b92f1ff1e0069d240187b83c52d68adfb8012c5a36c21436fa57a1ecfef873c106cc5cee692f1e724619a743869861761849a4cbe262f9b7bcba633871ea1dbf502e6bc6abe470a3d923ca80d3920b611e7a2ca8262609b799533a656a96197dc6214f72d0913c3c9b3bab724a8d8b55d62d4e42c97c294c1c828d6c6509b1d6818ff601521eb64c6d15e82543d64d3481000b2d4e648d266dd987dd18094662903f9d0b31eba19789b166d8865d719a01a3d56c1f081152a8b451a120159dad72a8993195a06f512d407d30a6120b42ae319bbc2889c579cb8bcb15a87eba324291dde9f8a342d263b1e55efb11cc01fda38c10c84da45412e755be3426a318252d94633e347d6184ebf67b4d64d3043219b0bbd4cf5ec06ba0512ba12ec633589536936244f8693fd26b4a2274a1490a65205e16122b3241b6a63761f7c5e4eb1102cfb0d965910afbae07f8e75f808447d7b3c6c82edabe9890c850006d5ca9a53b271ad9b1a0ad579a4a2f2c206d29bc71b0469cfe7053a2a8eee5de045e20b67da0bb13b19331fe085af77aaaf554a1d6de0be575d8bdc3c2d8f1880e07fcf71bc110487d31d9390f60eb80ca65dcb9d254a61c5571ee6bbc8066f0a02b10aaaa4a1a28505cced2c519cfdfdbf81c6630fd107f118f55bd6902f0b5fad79ceb63e6ee3fd795db85cd3cf31b4d64bc7b32bad23c6b2855987503fe133cf373846ef85719738d3d1786516d51002d1b5e222ef1a44e7055499c8a0b6374477b474228b4215fb552d61fe60e0ffe8f01953d4e32d3beccd5f136e61e8a0a510c8fe831521f9d35562c13dd515b07898e27fcebb73cf5ac00a7054469d6d977a4e2aa24e1f64db28e21d63c8c6724733e4292e3ce35727c3d244782f4683ba3dabb51a25f9cf711b4f9f7c6372c1e1ac7bf4375057502c2d5b7b2cd80b02739bddb3dc8de6be0cc30611a2eb96dad4fea4ae86e1136e732215a9a1f7317667c17026976eec7d45e2b9ce3a9db9b2b1d2e951b5ca6217e584c8bc0fb97dfdada4276c48982c77a5d9d31f5c86ae5ce76e3ce19b84564e57d13d8acd6dbb82ccf2f8bba15c4371b6d0db93b6132172f6222cbefceacf7fbf1cdca3e161ae7c09bb76cd12dfe046ac5ad8960ae4d2584349ff36258f35f7929afb38b4cd193b17bee422021b7a2912cb97419a6368133bb34584db639906b65c025a853beded00050ff66df425755b813c8064977738f447e4fa247b094d853a81ce8ea6c9f7d3f10fbaec014fb1bfdbef2695578ddbdf7e6b5905e52f2b5363a0bddd55b8821968776fe65b3f33ce0bc1be0cb4cd5d39ba7f041550845c8ca1b2140d6fc741aa9283bc964ce9fa0126b85d05f294bf29a5769414fbad99554ae52f8d7b76f110851407996821f32acd977a175c5e66399a0a00e8c3fd8ff2b9e4e41e3d89190ff98dd7001513616446afd38591d1548baac85f6bb9462f4c3230448beab5d4099f879851940d55f3fe3376a5e3e0758e1f69939c20f5f15ac78d3f0bb2d3d21ec8665a774df06879842c033e47003f96442514115aa8003d6b1c492a42795d4a327fef01272ffa9c2fb4463f2742c27da3739d871047f15eb946fdf44800c97e4db550f94e69242a39ea504e90c60b5f18d10ecc47764a2d9480988c108c15d6c112ed531d77717ff5e3bf2b42029bd29ed349f134328c51a3a9f85f86b1734e069c06256c9c2961fd397a23f4ceb08f71dd411b6d889071b5ee2378a7ce58667040267d0ad0ad680f4b84f64d91dcc3ea4668d77d1285e8a5874b39428de9fc8aefa479b38d47c4d140c8d2243a28588c466d84360b4cde75aa0290500d18623cd4b63db19a5181a903e0f75153f80e0a100e9588b4564ab7e641a29548b803a1014ed81d94172ad32f4b7e070b88431361c846ecf37ad95b49789a08b9374ec133c703b91b7040efb45ff8b083f1720a001a3af74986123967f920efac567591b40b00abe0082e254f2975849825c54b839deb3ea92a548191ee2b1fa2183e8d9e139a961ff1abd1e7a5fd75cc6bdf74adcec2ef0ee0348da33c29cb303814f1bf8bb1cadd398152327aec2311f200789f922b814e7f89e3808f0a9ae0977f766a2cb3e507adde136ecae179439cb0f2fa6553e81bac4bd4620e75a7516d156855d72f16f25b7234342d5bf7c70ec1298c08dc867404f4f0b9014d7e0e2abc8128ad0333a616fc327d9a2e0df589fe2bd0d41d7bec11a0351588a627294c048bdf8f5aa64164d02e74cc3ddc21065b94be86275e5a84a59b34117092fe6b51c8a2b1e694b77f58604e4f0aaefd7e8a0256f42b58b80a68899f56ea0ccf037bef01a8047490a8778e1332ff008c28b5773bdd18196356478bff7e0d0a0e7a969d271c279a8142d812a234025bb9e0fd672808b71ad599358c0186a0474510794c57372d69dbccd2f14b4ca63540fffba5f04864d3299816e38e49dd9b106573f143e71a8c110ae31e4bf471bc660dad16c98f8e8fb115d79e179a36c843c0a773098a90f55c618a2f6b89610f5a7bb562810bc632618ea25c96756745b1c388c789871ad936a84b08a9790a476c14aa7a2a62ac2515089c65514a7c0e797ce2e17a533d0426d37f35d32488e0aab5525109fdb4af9a65f65a9a1b058deb54d8d97aa9133ef6266b89b49b47cb3a4b519913577c8d758ad2a2112686e8e063de8162928f23ce2f429d97bc2f9c4305aa48241a98d10d62c6f4ec33a25066c98fa1debab11528fdc4bd59d7e2c0fc571c57561cdc876bf4cb0b85fc29348f34ad1547ea853e5fe6ff294a42999cccdd294058e8fcc5b4626f049ed984b339daeacdb7fa2929e64b92341be61f84abc970a35630b660d2b0ec7431fc3399fafb93ce8e1338bcb47986e4959c00cbdfe094c0a3b24c867fdd98ae225141ff13a3c2029b3fe852b96d5661ef62acb8ddfb30a3f7c02e89e301aeba0876971d6f412d9cbeb07719f1b131ea26bea9b13eb1148bf8e11796977b6d9615f04e2057a67d50aed1d2d0cda511758b3acd6631ce3db71a8e1c11877ee3fbc6a16de5a470f7259cc265e7a632d826f0c32d5dbd719d01e65b30a92ed1443387549b68431eb5afe1dedde9a4820d50d445bb533e46fa4f1af8e7a78a851503a5de3939ab35417b294caf4cb8a290f8451a023a930bd5f3a0bc8bfcdeb77a5a32ce2b00068fee204f837055306b7059e09e7b17ebb2c1d6561dcd2c65e234b9ef0a9ffab511587cab35833dabc134c306bbf3b676e25b03fec55498c12bcf3f8c08809e8a2b7a9afb3bf1e420dc729852343ef5b428a96255e28ad32e612292f8920de19a3b80ebd23c24136eff084d013d280f3cca90488844bc48c1256a62a7850a9376c3b33ad49e7c1a74bcd7086fa45701e9c88558843f6552a4c24c474098586a5e824002e8c7d515b704a04c9f069fc29b2bfd9124a0de0f96c11c010a9b27d371b0a861caf4f59209a2e765157c87a7a16982e5b60a1ec1622435d62aa3d9c0c39308b8c619c49c60cd4d9618f2a7c19c5a91a4bca9824f10fe8a44b6a6e539c5c74a08756d8c9594d10227bbb56fe4d642fa15f0081b44be923d2fbaa1f10950a2d7946b2bc59d7d0b457e9c50d154c3479eda2997428681892883e1fb45cb73786a6f0de0028ab8f3e91d83ff1f0b6418754df4283a73f64c791974ae682239af236fc1f0a58900d38ef4428bc9f69da33fe91fe52433cadf7fe7b59b927e12296c623125968a06b7b0fcb313c8e72e142ab4e583692bdeacaf997b1259823c05ace671bfb0b12d9401d90b9656353b1d692910723a026e5cb71e104ef2a9058f61b2a92f38e3f7024092632bd21245532b2aabc57f3d54dcb4db90a5d051d74ddf4e6cbcd6622ce203c66b29606baa42f5b93279d58fb0bfcd83443857181df8692f04b1616512935d96a3bc1e87c6d19d1681d8f5fa2144b9851b340d262484be2cd20ed802493d466e94de2b8daec9887acb5dc79dd496b5a73a38e4191d6f2172ba4b81c0331ed6dffdbd07d3977f772473bd9378cf243837ac57048cf9096ec945df4c121a6587fd3ea906f3f0a8126dd236ea25a47bc79d313c2a159cf65d08cc0142317e689ac0b0c3a3aab6c6d3791253a0fe3ec3de62807b0c3b9533551d0f62da04ffa2c1a83b5e1b7614688af210f488df65aa5f40f28167994bd80e74d26364d58f982fa564f744f0ce0431b24c48602c710063c426066e6ff08ddd2f4b85cfa1e2666a9eac73a28fbe53b098735e66bfaa03f65c09db40ae0e07685b4cf97b778ce99a281596f8e6dba3622d351b111ea5f4ce27dca212aede81e64a927ed14bccb14b72f4921721794830854c31edb74c479f292e4d07d9246a3a4853ab353dc26f21a6fb26e1f7740cf735a3229b5258b29949ca855ce69fa2747cacd87c0bc1df7d3f5db19e942a5562d31e03ba9704f4fa22c37f28195f5c2a9f1886c49bf89adef3d77afbd39e42752ddac9eea3670ae309d4b9d69f72a4d121bc4ed56725a55c382c3254a7428211cc32c79b0bdb6ff207c2074ef741edd053c972c0c9cb1f390ec9113338273480944314bd41285a0ca8b25c1c8c96b8e7e5c422f74742902e074bca802000ebb46b73e755e1bfe5c88ae5f919a525594305ba611e1986dfcff83209beea4b0c99f0d9a813b190a10cf134f0c94fe5cf6294aa37c54932862211b457a22af6a0c28f4cd8f7e66a24138132c91523ec6a01c742de76722ad1273a06c50082fbe5bee1a69faf37106eade008ebd8f967e82c98ddcbb2b4354589a1693c6340c296227ee89ff419bba5677bd8992e658299023896262796d57a38fe7cb301ba34a7cd6c294bbd92161974e6034292265546a221419d4d7214259c03228ba51b5cadeeb580c4a9da12445b478d229964072c5cc118dc93ce0b96e22978a87697448245d5ca693fc8e76c42848f03a68457cb83f1b2634e3fd1594a4fa13b9ebb5a0db64543af9604117d6b11629488200c56a953b5ded2a1f70c463792de4ef240fa8504c1e945181aec15c6e4a37b9939408df5d5aad614bd7a9a330a8cf6802e56f04a1cda1e07674fa08a3d80e5a93f1b5a0b055943fb1b45cb61b00f94cb0d92b951375171cad6f44116fd4e9e1bc79373a693a107c5568f225351d3ae2c6c8fcce76203d430d58787c55adfd9cdbbdd2016ead83d8059c60ee24f3fc48d13ad04120408c75c2e8c62911f33696e95d6147cc11e9ccb7c262a149dd6f6cb829e7b9e54b9ae72b32233f9da4b79c23a8fb9e00c502a84caaaa44a1e1fe73fed2ee3ba3205ccef88d6807af3a968505ad157565915aa86b33c98817a316bdcb7c4ba3bf1bf31f8ea5f65c3834071b20939946b9ed9cf0de40b01a03b9cf38796e0e39c01d4d031db0dff29f147ad5cf5eb9972d84c74993af115a4439ed328a21957dfc1270f9cff81e934e1c4b42a21ea22e240f9b4819df9ffa75793e887025c3338698051815ddb5dba4de4a6168ef7bfc18bcc4073da38469527a2f6e563b6546d596351279197bc6c9d60073a8f19256f3fffe22c99387ffb22c6310c8e2c496e02707dc6e6389d437901a6499a46430e0c852fe384ca4c1fe9d3a974b79cd1242c62803a4de29098cac142c7517645e8f1db31c325e5c7054db63473313e90c1419ca6b5c29a7523c69133196129cf687093c08a11f12d8ae3b86129ea793ab98b4f72dcc770180e8f5738fcb15dd3919d10869a3c817f0d1be97e8bce8a15711bf041d46c8c41c64a164faa18e09ffe239e0e6db236e24ed21b6dd6ec23ecc5ae15ec11780c88eb97af5423e61e82a9f334dd21be0518898aba4c149a44f02a5601feaec687e503e9f6e5926692c6d95fbcacd314818b4c7fd4f29236f6c2a8ccabf1925696678c263ec31a0d0046b9cb6986c9a2be7af0c9d792c9622b833e7b06144bed494e206f997de8d4b6f2c9b278c8496b59bec472e4ee1d8fe05d76554d7921fc60df510f3c19eccd5ea60c7725e81c6be6b437638ae10f8e5e508a3f1757c5385d4b4b399476343c6262d8af6a67f111331395900e5404473a6b1e839c8b02c3082830d4864db4cf720707927b294b467007a700b16c158e90c034a5cfeec80c1ca62ce8b2d8468cec8f498d1d45a04bdc76d1f6c056f863fcaa96a94188bdc62cf4dacf78e7afcb5ba463c1351360d3d447ff79f7fdb53deb772df5d39087b9f02086833e6f9b161789d83a09b2f58f6dd6c896b478004c2ac4616027c836ad9237bb8ebc27f087d7f60139ee22e0049a5bd0e0850cd396384a5095a78c8c4468e066d2d2f2aba46065f5c0fe57dd6c2df2fe7d8bf18d9f413d16be8891303ed5d6bf21f53398c690c4cca43be61b941121291276b0571553e6897cf6c367d344ec9b6d114be83318f6af717172e6a19d918076a6977b7e52cbbc36e42d6d6150375f7803e8748864fe5797295dd2baf80ddd683608a9008b62e3c0f005d8df474b6c7e9b38fd6dbed73270ee05484b0700d063150567da1d2e65d6d500d66330ba97e4708de4746ce26ec1629053cf60143bb6629b2dc5d6fa6d1d59f2e8d196b97897502db6c92fef7c356cc348cc3f7635a2225bb2844d0eb335363bdf4b8e43c3ba6ca33c764fd8baa97ce780063be0d912edd66ef66d5ad584aaf2f330723895a6b5bbb8274f6c9032b4a2bb6e92af168284f654c67af4663e4a4f8f037fe1d231c9af3adf5c7ccc38161a4391eb34461e6492cb401135258d96793386fd0b4f9cfc8b038b9044b687f5ec29069353bf03cbfe3e965339481be28666b2bc0f1f6a794d4b7efed205c6eba61988028e2630be8c1b47a9997b99f52c867b8bbd471f7ed685dfed9ccda4d743c1c7f276cab694820035483356ad10a3d30d7e5c5d05d0f097887466141e679726cd51b3d1363a7e4b7627ae9db390582204d9854a020f60ea9f92e1b3d3203f4115760b8bfddf9c9a3d1b8c3dbb398a862f7f191c89013661173ba28fa805e3c5282a4ad508c1027b283025336a456a6582ca27fead4d63ed78efb809b972f8c3929b0d8d928170e037cf96f7a28f5d0d0d50d0a03008af6e7138164bb01e03eebef0e88a24ac7088eafc81cd8d529021d85bb3c40a119061c06776f7a3072ff36085a4d227ed4a09a4034c8ec9040d9ef9869364a1a54391b83feb0d2ae89cc36ea85f27b5612b4dac231e40dffbed2ccacbaa182636e0acab38563a1a1ae9b73d95a77d3a86e5c6a853aa92398c0f9c58c4934f2470428de57af931c0d4f25c89118f92e65ccdc7fe203df8acd96d0126260ea9324aeb2a81623ee1de05757446f49afce116a84768729025549e407f4491867c900c058cce43b034f288cefc5ec2c078b586d82cfc1316b5cebca8b8d51096ab4f80fc224d8220031d2c30777e824a8e4c831cc6794556ec2afe70d42212151a602853b4b62d0d8d370074859f8041a318583f1d4488422dd9184b13e6d07bf41683de539ed1ac7e446c998114421a495d031ce72d55bc68ab8e3e0557ec82b9c8d70285df473053bd63dff9a405181bc74f2b4e7f4739d486e3465842fa1f4666db8ce2600845dc9fbd4251e6c3c2087d262f73c99a8435dd306d56b1d504ea493881d215cca8158122712876193be9da5ec9e3ec5919c436100bae9be1f27b5888e3a30c300e090f2c446dbfd62728de800bd0aeff6522ebef5445f83ff016dcb738d7bf38a1f976708a33af9f1e601abbba8a5e197ef1c2d5c29030ef811ed004c5eb4f5aa9c9091db9a231feb3d27fc03e72c6dc824426012df16898da00191a339f59d6f42e296070b42981126dc8dda9ca01f532815be5680f336f5f23e24bffddd56c5c1d52877aad718fd4a15ebf16a48a1ca3fb2364c50ce871c99a081155ecd7218476db59d8437231e7af6b38809b9eb971beeee256755019a67d7bec1a8f842d3fa92baad68a2aa39c52c95284c9e771bed39a31d6e2821182224d3291dfd8a1c8811ebaeb5d86c00a5f648d48dc9a4f90f045b321a274cfa75a56b44d83802a9a8d49ca83c045eb3e6f139ecf481ce3d7edc1b88f44cb22ec4ef8506611f72e619c1ea6a10f85e5c611283b42c67e2774905e02ee9016d37182efba99263feb29107f9147f654124da69ad62d5dbd874999aabc0b885948d6f93b71ac7340a19603028752b1f8d60616a1dc798359cb61047806951449ceccc869e495ec3fa23aefe8d9412c9fb00af67d5458b604e25449f9f697a31e8ece65befbfe0a048f158f72feac8b1bdfd45d74f3ae110694519bae286d49362470618a13de2402dac19750d0fa9d50a5d84655afa78d3f19645350c3a46e494f6fc132d2ab48aa1effa4a69097a7b93a523c1a2d31ed76c9ff15f4842d09bd829d082e3d14128469de2a641fe353e82656210a8a50c846d2adcf2afb58e09be11199ad89a5f87c990f1b78e5aa72fc01fe7106c005c40a37c55a089d71fdca0af99ae0845e95c50c090e7177ff9748ba29f2dd0901d453934cb8fc632c98763499b5f54dc1318f44f8c58fb4e0ccb6f8b759ef0db6dbd8848be138e4e4935ea5d356e8148db95b9c3c2dbefbc62153d8dca68cbabaded9abfbd07d7a4518eeb1766fafc527eb56f74f5bb054d339b43cb369875eb1d7201194729abbad291e390a24a26208c9fcf1971060db280f477cb7ac11f1085494e16b7d21ab72a75a52e431a38e994c9aa6e8ee05d572f58f3cc4b430d0951c08dcefa019660029c82df543fd6a217e523450c8cc87de72568f97c2fc5b20cab3a65273b1338eebd14c4ceaf7ca24554d04f235eb1b7053ce4a665089df57e753dbb5ec5110095b246aa0b351d5c14bd11d9e2306abed048c19d84459f4264cbcfad7c464348b32841f827e668a9d5622877a4ac43aa2e853b150873af478e9c8a183203a9e63a03908053685ccc5b03477b7262c887097d453afe8b086c5a78976b438a0b36d3e50d9e8892af16827826034e5113a413bfaafa8929602db5ba4178a01fa140a484fd7bad6b308baae319081b94079bed3a3a4290b89ba6df8510281440ece450001ed6e276b514e22ca95d24c5289aac7dfd6a4de4a4ad88e661d4b77437ccc056c07d1128884fcb1287d246632929b0bfbe0c99d1087c610b6d03057213d397e8532b3c054ddf23d921a311c706feda94109228aea7fcfce3fe458a905081080e412b206ab2663a8b604ce4331d6459813a23adb91b4e9ca1c0caea681bd2526fa7fe00e575b4a9d42a35f5ea02070db5a08389d7d69d8d4ea67b25b36cd4b5ad5404eadd242257c226dd37e66a2d9c1a4bdd672a81fcb15ab247abfd55e465ef2ca5de91a45ebf2c8460397dd34af443f5b2051b80f50ab2facf308e763de7c8b1af0527133b8746419712c79440c2b38fffe6c95a311b7a401fd9593e21aa32eb9eecce25c3bb4dc62148193f9f134f982a797ff30b0b10032ec5975c20eb6cb4be968a30a12e4b69a997504e34636f7b079e5b7663ed0419afb7a74ddfb667bead49b5ec2253bab8a0d1720fd10aee69efbf3bf73aebb0549d3fa5173a4632161d4f51afc61908a5ba8b79f5ad71109b32dbbba030caf9bc539f30e618216c744b0765243ba0e1f11d701b1316f3dcbf9672e29a1d339d5e7411d36e7e82a7a8b7a480adcdd719b4ea2a0e936d2c83f557aa0cc8dcc972e60cf9048dc103ec104830af3428908e7a3ead2e5a2108754952f9376a9f44de8e31a318013758d1d01fcd5dde5912eb69aedd2448f87c2162189951341f0862ae43a11158309c7b0fa391ba04e0045cfcd2bc457d21891dc494ea62798ca7d16293149129d9c47de5995c51f465ab1cec0b692688e91ec19211996eb49562dc43c958a1e3a0fcbfd2c3242b9aa6d3f9851c694ad3b842da7eefe150637b7e740001e4078d933dde0184d99ad0a5e6231d36c18e70adfda373108dc9bb44d8d65e51562f03434728f941dcb138ad718e50b022236181e327f6230a8c8b9e346bf2531e01a1bf0591406ca91d9e280cd792f0a782600996318fcb4dd29db0500a3ddc4a224bd52881fcc77bf63539d45a2c499ead0d7f609d6e214b1313ece49ccc64ec5f060244cd40f0e4dd8795b6cd559878e514272a52cfd150f64445b63150f73f63039e4b0cfe62f489fa788b1747c3ae66ae9ad9c80e5264b36a42d4eafc353b9d297d5d47a31921ff37ba43b17ad46808f235901c0f439278c413bd5728f2922260530aaefc572d5066c61ec038fa883509829def1b93fac663f97ff6cbde7e7952e8cf1abaad3ddd61a74e054d45c53c626f86313a19283181661696425ebab594bc6da6b2c1e3c45b194544f40836b2b1589077ed0b8e8598513d55eacc978c4fead821af1878df9071f6333cc31b433496980efbfe43de881d08a040156566fc5edde73e9f21db7577914e9ce4dbacfd77b4d25b2531f3a98436fcfd2b7e737e6d229d1e2bb81776181b8cb0a71fbd8494793b45274296a8b69de715579e174c70104fd453c60fdd2aadf8d6d67a2038a1978d9425bd4bcc51d663d5b42a7a955e0c382e179e87d99cfa1d9d423cc7d44b1de69de2ef53ec2892e096041bbb41c557517d3f8c330f0177d0d06a1b04da72d4ef6903b2730d496072417330b7b7a4bbc067221d82d0cb41ffe21c4e40034ca5c376215509a4c4c93a8aef2873e4161a78f886a2a7cc3d560d390110e9eff757c2a9144531f2c14858f0bdae9170b2cbf48f43c78937c7bc8d55d279b417a917edd55ae11bcab0257862107ce95026f03526a7432a628de82f0d2971b414a4f6a69f95b6100088ef19a300abcce4403f49204d056a25283742dc39a1a0a5df3c6395c574261c4faf39644a29e7a895b062f84b1852d3052d9e0f519ab52fac53e87016fb85bae97a50d4a36d99f50caff29f171671bc595d0c32a6b6dc06f19c265cf77bde75498f8a1749419ba2cf688009f6f7f06bb7f235d1d12055bd6e389997c9dc46c230f85dd63386e3de37550804106757962d1e4e02e10d3df4e4bf1c90c71f1677e49739d08aa6b7e70e014bd0423dfdf4280691e1c08b804239cda0365628c3e10b01d88994d79f0efacdd973a94a931ac1c6262a41c8ec85a6e041e73b2ea9c5b0c6eff8531e8e98f3febe920dfe4f3b84bb41eb3a05ea61ecb1943909c2a7d5ed382cf9dff28f0e2945655c0779ecf5d8d5a702949f741dc460b18e98d0adf8f5e8865857fd63489e520bc36ee974895a81bd897397063140317ad62b40ffa94995ee724353249eee0552fa792f4589ac87fa9f3be612ea565102a929f4aae5aba15bf0de62a56ad112670e8261c79c9a279942fd7ed1beb1c7d5c29163a2568dbd864f44657d3ab3b6319ec21701ac73743af377a51ea949027d13b353b9c95305cb8412fb889db121d59eae5eae9169cbf2cf715a813b89f51efb7373cc0169423d9bb953bdc95c84fdc578cfb708f0239b17b19f5787b83076c593992bd5871c75db9fcc44dc59cc582293c7a3e5432089c4651275791b1679dd96d12a05aae4b7dcf7065d48df10df0302bc30fc2a6f77de9266aec77ed25f01ae52353cf777a53ca95c921d56b553bbc95e327b095e1e3d147a209007d19d63b56e1ae3f9a5e96de92557f7b6d164d6c7f26bdef6ee88057268754ef2aedf8568a9f708742ea0dc207ef5d3addbb66772d0bb953506665ba7dd4ab2c764abb6272a47aa96ae7b7720d7ed6d99d65380983f74ddb0fdbdd97a733e4700d59cc58d0488969baa4471ea62152797ddc5124c87f92b359d3463589d000eaf337301e4a54abcb9a1ef245eee16b3de16abbe5612fcd7bb1d103610d0a6e00c09191b3f7f081f4b3503b4a10c18411baf2f43e9c3a435a15a04a50a07f2a518b9a5c7478ac783f64f0b140813e4049d560e9a3f66fd7421823421c738801a06d8e87c34c42a36685b810d9b4ebd462b8750255db893b8e780bf8a721028b503021fa94df4cd9a6022fc8132643bc3c8580cfe293e6013e94de66a7d355944deeaac44d4255475529ed00451682d8644df58bb60e77b24c3ea1b41ee4ed920b08ce308dd6ed33343e2506ec55652def5f707bf2484bf9f4fa7437badb0b93d15c7c71b9430b47a92660132227b85861687c0951e8b54fdf52c71d935222c2a908ac78c9491d094547274536e387eb6d956274030655b37e1df4922c4827a93b2f767eaefcf80942ed9bf0e370b8b4a8d4812e974ed4aafd25c4f93c24aa89ffd6f9b2ef2db327a0b8e20afc2608cd45f65e27978d30bfc3bb02beed2762670a9c57c0a4e482bc78355fa1d39af5cb5ba0afa16200d7ceb3d7e082ecab7a55ead3eaa7b9d1955e99f8a8cadd10cace33bc853879ce5975440cb4da14ff8d7763c9502525031b34dcb43c2db6680dcda68e13c2c87254bf651f6ae17d5bad701701c3b50e0fea6c51b70f6e671939b102c37a5be786c9acb65380de3bd5788ba532588857fe20343d892d0d50128908cae5f8bf7b4f182cb0ec12b5665307d87c4a41b72131ab32cd499184f25826e8606425c05f2dbc071d4daddcd605f151adb3bbab5492a2bfb49ba89f01923bfa91cd4a33c8220255b462fddcef5a26889ab096ffb47082d98a9916a794c42fb4eb27e20ccf60a9c2f11d5b683c4638373b85e9d49080f56ee33b19ae9863871deb3af279b406d5720ca58d43f4776a2b6a9f5d6d49d2a08b9317975461a3ebe5737b54d202357c0a3ec28a26a45d508a02af9f625582b41c4e777793294991cfc0db8c7f0e37a55541df55ccdc0a25023f98085153f510450bba413c755d5cff490aca70eb2247a824d20d93957a5440298069ed0e04ea773ad2464110298ebaee282e9e6c62ecd43f4d0bda8115b7e2b4c478a7f10f52915d88752542778e17df3388a7bb2335afa28d6528eb0be1efa17a2b7e02ab41d13a0e304b4756379c9c187b4aa6093a0a9cd520f9c44b6d1d81a4607b788f46a499ade470950271ded6794cf05bbcf9b5acbae2c0e04f14d568d0eb1c2d3e9895bdd414b4c358ff249b04e43bb416d04bca3bc4c0f106177bf8ec482a3091c94e7577dec4f6e0ad9e7b02ed428d8f084eb2ca6107b9212d4c3d0c96b5ebdc7157637f0318b10a32351b05a94333484f23984ea01ed7805d6dbaae79b902b4d898e3fc187e0fbb8903559a424880ecd691627420c95a8f6ef2700109b44b1e6c4195b97607bfedba2ce5692f0349e51aab944fab5f73a3ab57f1a9feced5a38b1b988c5b7da594a7d75775d3b95e32f99429186f17be9e12cee4a245b156d7df0e03974caeea40a2e24bcff550aaf3f630a8df97b3e7dbdd73b60883157b15dcda713e3513c1643c2dd8d4db252d116a073f31629642d365d3d1b96c2fc1251c7ebe29f4cc178613b8af54f6ed46af60988776c1a079ca93b5c0d6ab45426dcd2d5c079ae57139528981f2e93a8ad49dffdd42f70a4d9191a837047c4331200d5a94168f0fc2cc48deb767e7eb142d02d59b9eaeb9284606e44711876ea6445297c6a7b1f7b7f5991f07ceb00d8466d8fe9209705028dd188366068cd626fa262fb4225a48ef0c29b36003a90103dc79870b70db0e1da1dfb18dd28f1260b1c5d26a5ef74a5e38170bba57caba97d04a56d43bd3ed09226b0fc4b94e180c00b9d0d0ac5c24ba8189724d2d16268c12834b9151270c23bceff764f08a892a43ff8aa1ea2291a19e7b4f5d71e7b70f16c0724c2b41f20386c10a861ca1e51186f3331ab65070097be77129850e58013ece2796a16675642e0782e36a49ca47cc38b63ecd28eb591e22562ae0aa8923934957b60a864ac1af9284834c81e7998b67a94613f4080c98c324503a0f524f7bbf4ab1523d738550ddbbfb3879fb09e99737b12da66aac634b7649a12d625e3444b54cbd8189effae305177a70b66dc7954d4e01c487589efda9d1afc62427cc9093239ae5a2f3671733ca0b58c62ace70a61556d7052e5e3601fcb8140039ccf73cdf384d807f76aeac6c975a02af0a1c41cac149e87955dc8fc1b119c798d14ed2a9a967bbc7b399a1f3d81c210f7625c51f32fd08963c852985e2bee66cc86e1769901fff51a9120f7a4a133795533ae3b49ce6cfec06355f3e304f31335bc785eb45972a143108e93e3e7c97902208559a6b696123def48ac9c2ad7b9f90152dd8dbd0c10acc147e0867b6102f5e0a42a01210eaa66483cdb9118be064affe51fed08576bfda1dec7d3b59352b4faf04dec798b1619f6622d64ba37fa669c13046274dfd110066e0f8fc8e1198c83dec00f5e0431670aa3017ee7437a8e156dd8b6fe0a0e7700334b8d122744a80649bf73f74b5fd2f0023c55b1152600b9712a49801098a383bee07df31892bc7bdc86a628f3472befc76438f04cb6ec2f9733caef02798e408af270bd58fd7bfb5a254d6dae2b97250fa5cf457d28449c6a3a9356a4638e2bb31e1079a9f39120ae398cdf3c4e0f2c4fe42ca645a313940008de1e734a93320d3615d53948dc24c1040153b075ff4e5622147364ca1518fc0354c120b5244c7806b2daa9068a3f017ae1484a76f72dbf8fd44eb67b93ceec64220ae9ac18c2863321557d7a37cf5dc869c0a3751e0efdeebcb104508d0e1b9a7a8b50f21d559664632e7e27655d28a785dd64373ea6f8a4fea6dab261a002f4f1105a754f32bed5d2a80447822e122d3aa7c7280c5e3beda1301dec3cdcfb784c9e2ea61db4bfbe2bf2599590b123c2378f603c4d3553212326a77dc094432595d432669e0ca3d36a3cbb8a9904ea1da1a760b8c4fc009404c0214ae957f3705ee078975b43f705e2ab81cc54eecce1174fab67a43669aff6b84b38049e77a0327bb27d01fd0f586240ea6a78a08f5cbe48398aaac20d8dfee45be9d5a24427bf229c29c8386bdc1af2062f1f90e8c7aa1077dbb275b0b00fc3216f2e660ab97058daeeba42ebc047df7d605a1cfdc0ecafb8f89aa366f61a7e115a25d42ccbc1177b25f6cc62e7d87b2b6c8ad0805ea508e9c931e1b6037c64da89b7c63d8877939e76aff452f58d59a9234ec641a657a65bc8d8c16fca7cf790640d7cf60797c6db026778f86b8e5c7c29f0e18fa27ac8b93a3e97129e28fff14a08aaef945d99e1cf05315203a71150355ff1d6358b5c0420a1d4e398132b594c7ace54f122e8eb02c972298cd0c57990cac3195362c7ebb6de99f98350d5915003affb73f3e947f9585dacecb6bac27d4707d6e195794cd6b94b9d5b472c61088a93ef94ec77ebacf2a8970c16be1480dfe2c735c1510c9779eaffc03d3ea31237075a7d2a753edcbc56883b2e5083baf7cad93d8f3d427035ef10036c06fa37e82af268b749a573c12e96786d9cdd26f1d729c9ad6c74d111993e6d9cf9119d79fc551e2d6aedd36cf12a9eed2cebb2862049050cfba16f06729fe64e904e55b91c78525e25a402680c581bed6c8fb7475122a4c2b71dae7af6856f5e6324463edc3096e64821d4ceb69fdb3b4a2879358c31998c3a7396799ad8e98fe98346f8b9a2b20219552c82b29507a621a0c9cc6682331fe34971377001a93c89767f3521a1a776b6cd6c542caa27547b18d208d27e6b008c25935bfa594fd5de4626edbbd02cf07da4a8e94e470202682b29a8859f67087ab141a961a1805f74cd181feb06caae13d6f1f22beada373f71103d92ec6235b99ccb1959dac38d2f72c4c21034a7f127e55302015a70359c548ce020a26868f21b33c2ae8e2f37073f0f28053fa7b916662cef57d936fa2f75cefe698a38eee61b64036fac37d1d1c123e2cf9b0e736ddbebede8ba887b26426ad957befbdf796724b999294019d07ab07f207446ccb2ddc767a346dace1269c7ba6659ac8cafd2d11eefd334abf7bdadd691938df8235a4d251530649643088a31453e8c1db27f38d4f8929c5cddfa83e86f598bffd8ef95ba8049659be0cd2d88604902b34ecf6828b8cfb1e7c1fffc88fcb833be79c330be1996560c61dc1d9db9a2e4d8bca7e205de4912fd1bf3f753469ea1802081df4adb5b57ef7f5bdc73230db1a4c7f5239a90b70f0e49e0bed13375b9c45940b33c74d6e72dc05b8e7384e62eebd0b828bd386bae99b8df78a4423bc71a006661360ed2d986960eb71d807719c85530ab982bd05c2ab0d1c6528a1497ac3c6d401178aef6d09e05d1016b4b387fcec77c8cf4259df294600ef7643cda9370737df3943b8eb94b812e9a297bc6f0fd4d1a4d65eba24e2db6fdbf63b22de4214ee816cffdccfe736c902b9e25fc13c678f669372a61464f0dc42510f6e16459d510aee928dd2454a996eac943d27bb171217c2e1842b9fbb3b73b5ddcddd3d461f72a4028e3fb05a6b8dd187302381b5cfc08a61188661189601e148e09c09a194d25a6badb5d6f93192b209dcddfb632465da0a58e418e2eeeeeededd2d848643fae99c73cef7f843f69e448c05c8de95c0397b2d8cd1874c7bda43e21e166bd97f12d80f1152830966f081146db8820e5a39a810257ac08514d40108457eb0041672b8bb8743b0100a6d84b3774a29a5943e133872d01f9284fd15b0c8314408566badb5d66702478efa4392d07260a40836980113a680ca918415125ba93b0cd1e1d1021ea0c8719d24adb5d65a6beb1c72310cc3300c7b2670e4c042214394c841c321b149eeeeeefe4ce0c8e1e19057c285d40e41b1c524ac540d8c69470912d569e6c72727c991540c0ccfce0a09cde9f5a393836dd0d87a7a4467e4cb9c2447523386676785c469fcf4fad1c9b139e2e2c1594994a459f28a17e6caf0c2f89c358a4b65387dba674362d1bb522f0973ce18e78c535a1c6badcd329a373cea910a8fa681e9cb3007f118b5084e9caa553b712c9d52500ca37335a5a0383d9234629b596e82d37b2216b1884def9998a701c3dce569c0bcc77b30fa14ec3935a99de1c2dc179a179a971bbc9c5e6ef042f342033365646c4ae7a947b162f344270d289d335366d280d2799a270a36c5c12645b06d31b26c7793c1b6c96ed92e7bc61ad1c627756a14232adb9b358a1bc1ac2271a882c9f6e40be1587ebc8163ffc49d93c0b2a57be195c2feffd8a5fc6447a74bcbe6c116b9387dce3944a592ad8f74c52660709402c7299858e1edbbc295dd0e8b65285d47b8b285f3c4999b54860a3217d325bbe3a4492b8c74e50a83fbed8efb0eee1ee99aa174f5a84d57c62c5dd6470e5000010a206cefdbfb1655b6205cf95eb92dfbc1a5efdf6384bdb95ab75a7fd46d9ffe7c95aad5a752a268dba847600924d6421a3fdc433b5cec57f306dc4bee25f7720bc28d2da349f8baf4ef0f6e7e8ca178285ed863847ffbefc26c2da6853fb226293dcafeb17f95d126bfb1a75d11f239dc20ca269f1be1ed7bdb421a3f3a9cb3433bdc7015c5167fb8f3ad754277bf9493d62cac6fc129bfd69fa0fc3a7b8747dde69c2f259513a4730795dedd966b3a279d2efb892dfe703f0f2986d322edb3f7df621682b1302b41b3cc86f63390fe665d06d3491f63d167306bff6b9de0f44f6916da94aae0194631432030bc70f3dd42cd323991ec504ee99b6f0d2b9b49ebcbd3b7a36b4384e357a389a934c956471b2c3e8f429fdfd4364ea26f23e6b0087364c51548a542a17e7c7a44df5922d03b06f5b028167a98ada35c24b23d2a57c54ae9c0c274891cd71a3c89b3505e922a0c95a11c05eac2eee99ff691f1e16361b6e06761be2f2374344412fdd00d160ce9f0e112983ecbb506362891b4dbdf51ee2854cf286957f7b44fc5695606bef488ba2b087f1018d2d12c3a7a54b3a4a2910e9c5b3fbf0011ea6059f1313e469430af08638f627cdbf488a2842fc2186d5ae5a876d4136e8e318a5c1743f88acf36503e8f547c7e2cf392b36cac08b30d94308f5e4598dfe441365d0c9bb669128511b25c29619de91175222c168b556badb566ef38a3ef2e47f9c4b42186484cb35807652a50422702ba0ad0653cef41ee3de6de67ee72944f1b3c86baaba7c5d3f71f7ff91253b3889efe846916164f7fc634cb8aa7ef2c2fb5cb49f4513e5b159fafb39ca65972db9cdc5d4609acb91c25cc5645982f287461fa5b067eee8a35e87faceb22cc51a76dfaa691344eb34493cfe86f2dc0ec4560c6029c2b405f314c857ba602cc4270160223f6d0d7cf422050adb53ee86b05fd76c41d04657f725239d0ce48ff829fbb307dcf51d93930fc1ef9c4167cd17145b3e2399540691fb28092c11f8e269bfccd76f7edebee750ad7dd52ec2769ba1013b7bbc72cd698ff5961096fe77ce9419852caef97352b149f4f9f624f89a5e8042968e164041d2ca9c21b72f4df88252574b005229c0107397560031672740aa6c3959f399987ad65e21c638c51babb77cb76d313e8a044f2e420c1f102848ed034429281c70e56e0ae3542af66dbe8ad12270b54c4e166ceae607fd73ed464c6e19b44e808fb7504310f79c8031e720a96b665780487b1b004b3c709b4f0032da0300d81c8ef1df2fb6db8600bf5c8bf3fce25cc60cb9a3033296ef4b66c75b2459539bf875ccf96f02f68af246ca7b592c48088bbbf368ac41e1b618ab343e2192d32defb69ea524da5664c6acaa4e66949b33c1da24b65b1ecf08a2da1922ed598189e9e9f56b3805a882eb5a6860b3ab12586aa4b98cbb572b15c3937cd923284e852618860135b60bcf73ed3258cc5721a560deb08f65ebcf7de82e882f1f0f80bb0f74e24b6a0f874094ba55e2937a57a9a458486e882e1e0a8017bdfaed8e2e23d2c464789d7e209d105aba981024e6c6191ea1275b96c5caad07bdf46a20b06d33bc0de372ab6ac78ef1ba64b94c56a22ac9ef154dc21ba501e9e3c2c892da09d2ed154ca95f249bd9434cb4917a20bc5c1f9422bb69820e9128d89c18949a283bdefbd9745882eb446aed09a2360efe54d6cb95d9a2e9744b9529e062303ecbd844174a13041ba34594ea2cf5ac2d306ec7d08a2cbe491ef3d12cdb2bdf747c4164fb9bcffd1a59972127d9c2960ef794497892357e8479c9718ef697469c61031446ca9effda859ec7bb907ec7d6ceb4d18ec7d073a9e115d668d4a6c99efbd6dcf7b195d268c5ca1efbdf72cba20bc151ed556fde921ac2d0084b53523ac2d95f007d397714ff7fb5a59a95a2b0bd307851e586bfd5aeb498c2e05ab2e0cab2630b8171886a560187651361186a57030fdcf85d6028bc16ab018111683c5603598bec7220bb95c2157e7c26030fd6e8555c1e2f15821168b3e07aa27299c542a457f33c13e1a436b4434c60b694c0da6af5daa4d1785f9c2e99aaee9a230987e76ba13e79a64b278582c160fa6bf65927a30987a30299c542a85832967bd7bcd989a1933636a30de2638df66a63ac3dcf5f4c0f5d0f120e1cd763c94d3400c37d8b9b8dbd3dd18e2ca3cf56949f7d39521d6e8c26e27d6a8c1cdaec464edbd31dd4ec7d3a3ced524fa9e09dfdbed5c57d22cd6799aa5bddbd1b8eb79d999fab2332dec37f39dba1480ae87c7c5819246bbcb4bf6e5242a5db625a225f427d86fc1ae87837979898b59225db825e20a7d8ac2f45ff6655f987e8c2d9c0a620dfa79c303a6af71b706777efe56d7adfd565eea76be15a6499a25773b55a759328769e39ad32c60b7d3f17489f4f4bb9ecea7fb6996d6408a5de5a56ec7493ad2e5ca15fa9cc949f4efdd5161ea3ad83993e9e4917eeb3cd638c2b64bbb35609f3b17a6da631718c771bf71e07497db2f316d01801e4c93e86fa0673279a9db69127d6b2f6782b9b907242fa6596c4b8f967afe1367a0d4e911fd0080b2d524fa34e8934011f82aa31e511b3edd8e97426fbb1d97a102ce04d3253f3967e23813a6ef27f750973a9e6e070bbb6e07d3e7be1c9526811076b814b870a4028e532c41042fa1045f8c75cf75cf79cf758f615fbbe7ea63dd632e44d99c2f56133dc634159d1013cfe985dbe4c25711be6e96387c5d20412406b2c140692162c1424528347b645f7c520ee11c2e7de7ba1e1fc6f0f6b1b1ecba8e761ce528108e29685f701c98e5d310a9a47073cee97a3931e9b44eb374ad56125bbcf7df3c50e20683ff495704f75d17a2785ec7837b2fecbe0b6ff4487ed7853892344bae9dd32c40be59cdc2753d645744f7d8733cea635ce51ee37ebb3e5f857d81e7cfd8627cde7758addc7fef799d8feeb9eeb98a799cd77ddcf61c07dad92cdc37eee1f1f8646c2fa300dbd938a3a0b1e7d8034339dc78efddbeeb703f1db1c5e4fd0f105b4ede7f3b0147f0ddff4cea63f53f10fb13f0b188bf0a02a98ffd05b7ae47f7d86b1d0feeb1904b410b4735e038c5123d780300179b05858b35e4479c3b2c517838ce42b09558e2f91bb76919c751af6dd6de176614e01a62e0c4e8742f0bd9bc65f4e979dc775c16e11717ce2ff9081bf8ca9437aca6302dc1d83fc6344da3b4eb8ef448ce1912f5911ed9f42895879bfba687f092b52cd68ec7d8f74db3683f5d646f7febba202c27bbc85263dc64ad75d3aa8652b510a5d6af32d411c626718f71cf7540b0a73745a88f655a86d53e354d93b0bec9f5b59bd8228b105bb68a64d3be763e28fd397fa33f8930a247fe138440773b1adbf0e4babc52d85232151a986cc956ab0bd81656edadcd52c5321ff4279f6dc92422e03e105996ddecb3a8657aa60e37cb9a9a1418adcd9c37a91e51dabf3d10de92e22c5b4128be01e2e8118db45b40b427db7288887bd606e9b4130c42b1164e1ac8156bedb6cd39ed9c73ced93394eb99fad5e16e8fad4b77faee4878c96d787db0e833a238c61ab30698965a26b60cb2a88b60fa99bf344b16799fefd7324ea274f412858b237ce911fdc250ba42b9f358d29d1e5116787eec78b0c092272a69b5eeccd66a1916383e210f3238c7556e99ed056f37f046036f2a1bd7b6592a2732800f383ec9863005432dbbad4f4da24f9f65c3c66854c3fcbf83e90a04400c41577858826fbc4c93cf23049cbc833dd32390a5a18c4ccbf4c8040f57723922982de28e23196bc8186b7c41c898b9b347db941d3de7b6e05a2ec62cc33ed3424a372588689ad530ac33c982ccdacce3671f23a516a434528c0644e4caef9f617c15bab36dddf1a898ebbaad13826bb55c87e9d3c73e82148bdff1311c638c94d6ec25d831d4625d8ccfad28c562c46a7d396717f199207412a16307970433e3c0619ba7776220c16945ee3187b5b1456e6efd3bb024f2c7283770afc73fe2399942f1e09a4c6eea063dc6184494419a45be778c72740412b1e5c7471af6ef0b0a679584a5d3fab2703d7eb62ef296740e369894528294e39134d6e046d1f44c8fbc0932fe4ee4244d3877daacc0bf0b5e17ea7c785df7bdf79f17765dce0b50e22e47870a3d3c4aace079a16c0c0335535115555133291cc7711cc7755df7dde7893beea38f8ee3bcefdeebc22c39ee484adbb40f9ad5ab563510ba97ccebf59241d9b66ddbb68de3b8e7b8eda4f3c16d5bf7dc775bb86d78039b480fe99aa6e9996e82e34299924324272787880b4dd3344dd3b66dd34c3a1f9ba66d9af69aa6f1b80025d6785c63c0f24df2257d6419b64dee60a998542a15d322cbb22ccb324dd3b4ec763eb42cd3b2ecb32c5b499cad70a250a29384099a16b6001bbb30c160261891b5d65a6bb32cfb2cb35fe723b3565a2bb1953412256da0b249c922b1a5995aad966662516badb5566bed5b5bbdce87add586b5be24aeaf257190339208cc1c58808d45364b6c6c6c9660ff6d058661188661b5d6af15eb3a1f15c3ea5b89612be215b07c9f1c176b270bb586aaec255d36945c7191c855504a29a514c3b0c730ca753e304a2b166649a90d89a98d1b9ec4b5d58a10b2f10ac7de39114b361ef0793ee180cf138a067c9e45f8f127dfef748825237c7c9e4b30e0f35c41119f270c8868901662499a7a7c76302ce0b39b81c7675fc3109ffd07f71d422cc9d48ecf8e04213e7b1382f8ec51d0d126dfef2d882599a380cf3e831c9fdd09fcd99f00a23d34c4927c25e073bb01019f9b0e07f8ec4bbcfcf784586a94cbe7a642cbe7d682013e37187034f7fd6d24969a55fadc3e60f9dc43f8e17323e146777788a5f629c0e71e4280cfdd021f3ef70c6c7c6e9ad8a27dbfec422cad7c966318c06789861a347a1b7d963aa4cf920a01f82c9f2080cf320adc2f8b104bbe7292ab481f48233d7c9636c0fd1206f126b6d8ef4cc6674924fc2c87809fe31dfe738c03ee0f412c4d1927794ae7d885189fe315a6ea88d8827da37c8e38f9002d3eff80bb06ee908acf2d709bcc88a5b9e3a4d842bb0ba2ed03c26c1d10e6db80f047986318e13ec26c1910e65b44984544c45626d323cc760161be3cc22cca64b0ff10a69497ac6b4798ad1061be41a45cd85f47986360bb5240986d8e305f9cb3c2fe40843906b6a70484d92220ccf700f2e5ff225f282f551f9730db96305f038459e483fd71a0585eaaac52982d4b98ef0f2cff1b3e5eaaa80284d91220ccd787b0a2b0bf8d30c7c0d8cb49fe2b61b60308f3ad717a617f1a618e9183a59ce42f8030db0084f992c22ccac1fea395ed21ccf60220cc7746e8afe22e192f61a6a9f2129511e618a230cc225006bbffcbc49830e68be99f3277bc446d5c537989c638c91f25cc31442ec22cba2dc27c6db0bf68ee581661b6774598af8ad03f14e618386b271b6a63c2a6da6cb654121c63886e2814e69902818d4fc0c6dbcd648490ca50d969c2985857d64466b22feb73721266dfc1f2ef4a0cad1c1692cf9eec11ac8d4d59d4f513968d3d1ffb021b634daf1fcc3ac34e2bc7f3c2dc398d37ada298a0b2491dd95eb50655a6c65413d736a70dae9d164f9682c24a65a3c95586370c336139c04e988ca4a9ad39f8b876ac0d737c61d998da5881b552619a2ad6700d09ad1e5c01158593d604ec7f736023d6684cc1c61b0a97b2e9c0467b74d950b2bbcb20717f773e6868bb7b475302f6bf38b8fd1b4a53a132c5f259d8ab0e620d194ddc3c4ae144a38bc2bea19c14abc5715722d6e7448a65495335c95d6202e248fe86f2920222897edea0c053c0f2e9e7189c9493de90d1c4d554988732310db310ae03521699a2c80d9c70c209279c70c209279c70c28922458a14a1a1a1a1a1a1a1a1a1a1a1a12952a4489122457a54a0045fdc7fadbdff5cace1b147f65d2492dddfbf92305c52e4caec5e410e9636b42fb970e58e2943939461c0f36974914ae4cafcd8425ffef7ba2842582cc31ca4e2969d0f19da1ea1f0b02e5251327fca904a2ca6e15f1a5c7f6a9a2253f78dddd4638d2913c3b09601836e3a298d72a782618b2af9cbc1b27d52acda4cdbb8cefbe6ea041452b18285a8850b9494173062e00de45c4a39ea3ebe0d1a230e02467449002f4a727a51a9742a8ef16fb8ca6974716fc915aa6a49976f656f0bdb2bb91491184d66485cf95628ae094cff5bd556a55f957489c60cee050072351caa47a626d1efcba5ec91d6bcf900f0df37e3bfadd56ab53e95ffb6d7eb93f1dfa652a9545ff8dfa6a3f381ff6da7d3e9fbfebfede6e68bf19ff68afd7a7d30fedb66be17ff69ad56abf5a5fca7fdfc7c28ff692a954af5b9f84fd3d1f95afca79dbeeffb44ff6937371f8bffb2d7ebf5fa56fca7cd7c9f8affb256abd5fa42ff653f3f1fe8bf4ca552a9be93ff321db942753e93ffb2d3f79dbeefe5f765379f6db55aad9fcffe7cf7bf47a259b2fffe88d8b2a954aaef7f74c9aa9c44753eabf39dbe8f7dfaece9ebfef3ff6ebed7f7fa5edfccf79abdf9befafa3e3bf37d33ba203e00fc64ced49a6183fba9b45ead56eb85e98332bc7053e96caa4da583e93fd8fd76da6eb6d376da4e316270305edbccebf5da66307d182fb694d64fabd5fac1f45fa0682e3495a6f3a9542a1d4c3fa54526d24edacda79d34ede469a71b4c1f85855d91bdb4992f7b69d9eba5cd60fa2e54d450d6ca7eb29696b55a3f987e0b107692a9329d4c95a93255a683e98b4c6c7029ce354976ca6eb25376ca4ed90da6bf5df07b29fabe2fcc9e8c4ceba7d56afd60fa17dc3e63b16d9bcaea5895555995d5c1f437d0bf5be1f6646fecc99eecc9de60faee6f5578bd5e5b7285febd9ee26a7a14c3c170a6588323525b3498ce542f60fadf1c6eb62ffbb24bba1480e76076d474a9cef83c8f00e0f3bce9e1f34482bd9fa86619bdf7d389e8527f543ecf1c60ef274d0cee83eb47f7c1f5b71fb8cd418a35700412db1779098b69527d6bef15351633c23260eea87ed6f5a8ef6109aafd89ad633e38ca20810f78a082279ef079c27bf7defdb3977207fbf777777faf9b6df469136902816d9968826f0f6eee15ee699f66d17e4a9793e6d7ee453c57899b4ca1e98823a6fc0e9b488fb29b56acd8429d76148af0f728fde6e1ef51a7d3c652af226b35a50b193217887c3965d83331fb114fe23571b3ff00e90f2279fc95e70ad37eb98c2bfbc9f5f8c416cf0db1e5bbff7dcf81f97aab4753eb7c642fb3975c2bebde71256e826952cbb4c4cd6e8a3fdf61ba64f2f3b7087a0af4234d8aa9ee76782b0bb39d6669e73ec68b5ac898acb3dfe1d8e49b879a84bdf25270810491d85fce13bae166ff89b4c72872ac24ddc3a34487c3e91109a63cd223154fd2a3e9a958637ecc05e2730291dfa698ece77b0b620be7bd1772e1ed7cf44b8efef4684af7d097d4dcf9f3fda7595072af46af66419172266916ae8b44d2fc1d5820e0f94d043c3fa5043c1fa77bf0ec562267124ca45924ce7ee2cc5f22c133cf5e329f03a54d9fbc245710491fa385282666abedea55b39c349f6a60f7f42867bffd7c4fb90f620bf71348f6f6b3dbe0117cdb6756cae76496851125fb1ea1fc3cc2aa9e283cb08c8935e6f7348b16d2e8d1ca4b9eb21e7aea6df6edef9f3d65c33c9adfb34e1b63b19d45f43b11440041e1e14010a1230537c7154d22a7e971b0a948d9616422be4c9044b3340ec6feb157a1618a02fbcdff630b1831ecb3013086612c24825070c65008faf3354d888944901f18f611d4b470f6e8069e375c368d54fb89b570ce39e78cd6647e9ca289199ce3ab8a3096048661d8a7685aa6fda68159c8e5ce97788888a7b4c3118e4892fc2d823b403d718c428022c08181983c08c710b83fd6c79ec6dffef3b8eebe83d14acebf41937cb3283fdefe82b907bcc51c5018121d8103fb0f414da0026913f2a7dea1108aeda5cdbd1ba8bdbc607c8e048d4720c48437b07f034920c1ac82dda482fb3521261cc4e6feef1dcc1d1ea182e37baf81283d2e8e7fbb07a2a5aa5972cc4142ff02d8ebb20deb2f041f69961c22a247f4a5b5f78efcf3881b42a5479446a10b29a9c249307d89240a2d1d4c25112d25c53523bfc82a6e74b1f443e352b270230d537a44a5cd4d8fe84f21e2fb7b388598618c1b4abf1ce1fe56f9e125162f6211c6488abfc25a1561288c9bb4cd4d0e671cd87e7ec1f6e38d1ed96ef6c836d60581552a63edcad9d04d11e5514a69e6e88a18616badb5962601cef8710a264e38c71f110cf52822d1a3f82b10ca67ce39e79c65983ee79c734e77b731e79c73fa9c3ee77cc39d73ce39e72c831be8901b23861cc1f42fd06096d35a2662701ee12998a03fa2bd69f124bac052be8c9d8c35a48cb44584c3a57984e94f1acd3222a25976dc0c28140a8542a15028140a8542a1502823468c183162c4881123468c183162c48811d47cd9cd19a58c2499e330d82267c2aef2a1d083407f72f226267fef7fdf7bde77dd73dc6fdb6bda67d95bfb15fb68d3e0da8e4bae7c8cd6255d3219b9e2a22b635ddb078a24f928584e16316631d850994c4b948c74897245e68ba038922c549e10637644288131c94d01f3d256cd8204fb6f359aaa59e214303ed85f43e21aceec66cfac89251b1ff83c8f78e0f3bce94087be3315073ecf1ca87cff34c592111bf83c6334f079ca64a041df19120cb4925892a60b7c761e0b7cf69e0af4c977b6a2c067e742a88a259932e2b3af26f0d959126893ef0c27029f9d08602cc91c08788d03fa7e67ac067cf617bc4f2cc9d70f3731a0274b52c4e756438c24b1d428225ac9023acbe1f1b9a10023154bcd1aa2554274f79de904f1b977f0e2fb1b2696da47c7e726827b264773df590b7f967948d989253f01217d10d0dbb792037c965f4041124bbe7a91495aa46a47aeb8015c7cbf3cc592bb70c814cbcb1f9a27c80d1f3ec736b8642eb9e22dde8a6cc49dfe1f353ec729b8643d72c53f009f23ce0b0d1a95c537e9730f78f4f94577c66777c97ce4ca0a4d25fa80073aa0922eda0d07541bd040986f06620b8974d16c3080e402260b982a605a4917ed080556464c4002291ce9a2a52280038107382087255db49a06b07ef8604012e9a2a18a484204aa076a01a81ce9a2d1f0c8b1f6b24438d3912edae9a44301395ad2459bc12d201280804c8974d164e48aff0194ec48178d885ce1912e5a8c5cf17f59b9ac5a5606d8c15162f981277349170d46ae643dd24533c915ff1b0520808c0f2ed18a6a00357a321fe9922d912b3fd2257bc9157f1a3601d821f9e097ffb6a16ea4cbdcd950fe9b4a28140a8542a10ea1743e5442a119aff2335442a10f854249544089434972e64e145c3bad294c32cc98114a1b1b1920100804028142a1d0874220179d8f100824e3432f2304023d08044ac9002506a58e3c8183e4a607a15028036cac92c91cc96432994ce648787272727272720202811e043a69d1f9009d9c841ef4215098e5c949084a7c02ce98b9c444cdd394992a00814257cae572a540131313131313939393933f393111753e4e4c4c407ff22093d0c4c46407042536d9e101c3929f1e319c9c8420d8385cd5ac56ab9abff7de7baf898989c965d1f930b9f7e44dfec4e4de8be441892f9215125a392c2598988427d40915e3fbbeeffbbe7befdffbade87cdcef33f9fb2637fcbe2f86d3f80cfcc68f788dd72006d8f87d687c7c7c6860789ee7799ef77ddf7f9fa7a2f3f179defdefef177a9ef7030394d8fb79b9c1653cc64d70f8be907562b158a7175dd7755dd7799ef75e9dc1a8f46b98cb92a643330300000000e3150000281010864302915096c7c21ae30314800e799e4c60549dcb84510c2419028851cc0063080200000002200032b401556a54009f20ea0602fc420e2c5247d5404e792f095d0cc555248b39b12b8a39671f9995ba869ac0f66a03a4318c21962ba9fd2d0040289ad4031f335c4d3392c2d7a4ef1bf7b90016045ffbdc50a7071dbf617014d874526f5c3a1d0f252f1955529c5d55f00d7a7b03e9c6375f3efa10c15e4d1b81520e2977822a0ca38c03a90ac7b4ba8669eaf7fb5891ea03487e7c342a971936ae701a68ed41406e5ec5df852ded724d06420da5e94756b1d094da86c0d91e279355ff371826bec603e168b61319ea6e25bdeee827a7417c96c5472f0ec817c56be053b76117563576e5b6ff2531a149840c49c0c1221d316aba1e722b7b91b8da1c6186035e424324616685bd4242d1e18a6d7b2c8f8e8d2f6575d5c89e983086b0ee6c0bc9c2190b19b742208d3a25a3f467c8e0f4adcd1b6e547a1712495349318376420c9ac0f2151a8099b7a2421f21e00d73fcdedc32ef820de26caae9efcfc6d7326fb140eab065defc49e5e6398483e3c7261650b193f9b2783dee0d36ab9be12ced7d56a5ca0ecf5afb4cb53145216751bc05922a550ca56847cbcbcfa3d28a8fe3057762878e4f035f50b2fa71d51696a903075cb4281ad5391f2bd9b6015d847288212db588555cd10a479ba0024d5c071a70f4b8b3f0fd984beb30cf81c8d5c83e0bbf7e02e95693c1762162b10e41b6064f3044c6514c52b52b406bbd990f36a9ab0065c0d87fd7e76041393da5076885f40e7073fe3bc1344e2836971b9705de41c7b588115e551d46d96f81b00703d5b0f361d63bbbbbb9df8481944736139a8500f9e471b8f259147ae5fcf97f6f8b0eb0b6d2d9cd31b1048d4542461e134087a4db4196792bbaa871710e8feee0d83f1d203e04f9730e52456ef51a083a1729b5a29190ff20189ec48caa0e456414f41ed2784c34cb6c961458b28925b8405f45ed8883d290108c040eea5faa23401cdd61a756552a3cd8c0d4b83fd77a6a21a46811f38ed0c61f89bb98ee77e4da05bba83add5bb40da5070387bf2a6bca23dcc3511d653a983da56365234c0c8063122ca40538cd3f6254dcc08b524a311f11e68907187b5f65e2ef3d48aeaecb9c7c848347a54a82bfa2a4a1259151766a1914e3a351f5af1c6b0430fea4eaeca2bca28b724cf05946945683d9b510811415744bc421258998b86d0e5c68593f83d54062da89b3a0e2d6e0a3559bf208bfb2adb12ac842039b20e859c504bd7657d0f692ecfc2d20ebc6a2867d30a3e8a5eec2d01343ca82f6f82a5143cef5d2bbb9d2e9f6610f30145bc5a03f5b3157e3dd79302c240dde4cbbc939cb1b304378993197b70f0005367274ff0cb120f74f37ce0447f1da995c3369362ab75b4f749c725e187187873e120e8835ab79063fddf111b6901c5dbe438726079eeba02ce8ca92cc33e7a87bd6b4ad15784a72512997c797dc93793961447d4768020b4decdf79d576f32b417753225c388e81b3e41cc8789b6451ae74ca713a718a2c17ea21e2f3c8a125bcd2b8bb38f17c10da09623d4a360f4e293dba9b07a5c91b2ac4dba02b008f4a1ab1f9981b97ba93e3007ffc770f62cea53d0f88afe8cf52974ecaf638bc88d155d254312550b324b68cadbb4e1f17be8b0e735076e558f53f7b66636421673f45484ad801ea139a27363966767ec4cf421b221835fb4aca70ce92829d399e849be94e1e108e9fbab95804cd9f3329955de1db48736a26bab76b5116805ee06975047deeb987b2849c8bd337e3b101b62907612b792c9ca80febc4bc3438b53ab96bba4af2fa3d5b04854febf8ff9386a132f6992107212f90561352278b74e5d16256e2e183b070c0a6e701de6dd62abf3ca7d584ea37384e9ca34848e5deb9105df38354da04c4d599a23a08e26155181a219d35ea07605453b571b84a8a1a061bdab08276dd50a96aa441bba25d2a72781505d119295d2a18249a31622802b5a68edb804e1313f65c6856a9930653c3cee04537e488a08e62a66a016e160587a2ba4cb7e728156797d2bb812442c0849e1e206d20eb9c064daa07e65bd94e31aecf5482bf95b5ac6e0e0194179032c65dc5370965ca630a20326043a14d6e5f7ae55ab005dd4f1a15b945205b6f97ec22abb9f2bc607710e71e498cc7c0d456022f1f7cd9d3552e4a168d335a30e1d69bce62e88e8407835d328a1d44bb85f957c4c83b9722b9b052000c2afff97e49cfe2e56682a1e6cbb52ec9d07890f8baa75ce04ebb073278bd4f5d23f0ee2544406cd3b22af6a114a3241267fc337bd0c0593ba648df235c10fd98fb9f57e4d0e460d29baeaac939f46135ffc9bf8d4ad5c4398d09c94f20768c6d594291bf5f14adbb524a6cee50a5cf0ddb0885dd3c9fc9ded0ab8bd57c23506afcbe346e6a125517233134c51c0f11523e4fdaed526b58d96a27251993d3bdc681340b53aed71e20b696c6386dd34f2eb3299b9d816d2c5616036dacbdfea17d3f40948d43a9c5f4463c682001b9127c9cfa582c2174105db4134a5e496bdb02925922104149f06824c81e4f8957c3373b75f896f11fbe711ec8e062d0770626266fc5e397bc497c158021d980e4cdcb18b750ecba600ed7e339414d58ca0c736d184d29270b7f23d4ee20bcadc4e2a17612012074474d1fea9322d3ac872ebba2513b11c2fae80a42b758828de23d92acdfd6f1894e30933629c0c65592089c59597b18b7b4932548036499760b762fe1a81e315f88ff4ceded92ffde4cb43741346a83ab523fcd0afddc965f39037d5606422e134330022e0605202919318b670fa0b48a014298d014d6a114fd585c9a34e51863d2a9ee379da2e80a42efd62b489644a6ed8f40d1fd1d2c49dc1052fb49686b107c38fbfd7ec5bdc6a05857020b2f6202f5aa7a828ac8457497a628037c298e8ef56680347167ab0ddda3a8e60aca1a594ce55cd09e29b18bd7992b14d665a1859a04d032f13418644bf7c8e6e1cfa37fd1db467eeaed139dd8c4dfd82d7cc28503fe0104d41cda2bdf31f846410781a9ada7618ba627e134a72ab34a5e673f7baa171156f148e075f0e8ff9e98e7a0c6a5408c2fb245106ea8f0d2e756c694a8136598ebb6a2a39e751671c99c4cd35910eaf4268c722db57c585e8af459782e6b6916fe43ea644f0446f1e55c9c4ed7558784b5006095474916824f4d2c13d1148b4a12fb154e706d9a5234c178213bf1b3e12d720f2cd034b3e84f93f5d1b6e9140c92da432a9e427fcaf459d8cb612e3979d4c2c3096b9494614667287a7ae193fa925ca72d5fefcc451ed84a63b37b95a60ab35c9adb21025db82d8574e2605afacaabc55eecff7f33cf293e978eb4c15e56197849847b9904319029b56718fa55d00feeab40a7356f562638ddd14c99e36003a8562fd6bf5d8ad44bfb3dc1fc97538a79a87d8758d8b7c825abde2e9663670d493de738bbc8ac12b70a68314f2d94b2e6fcf78528cdbf469cc5bac801dbcc78b5399abc25ed6c5e03f05c57420e474e63b70c7b4d13e7f59ecb943ac8e818e4fdb4a2b15648f62e82ae566c0ef9954992cd0880a041f903c84d41bbb0ffe871e1e78e7112b0bc3981ede11b431ed5ce7c1846f312f939b4f40f493894c6bce5921c70febc154350bc356e8e73f7fa9b463d458fcb40f332b92f5e49acd85e414464b347c5eed96d21e8cee0272671f799f30ab0f733630b01022cc5545b06d0d8fc88410d5c0292ad277807821ff42e10ff4e4c8c4adaf26ea6119be02c11e8ede54810fa1253c7d67f38e5d18060c546437e5e0b28786a9787d2f2b5dd6ad4fe4ebffb143d14e824f57ed1571bdadcc9f24f99d09e84420d67a477c289d07c19ff199f3e193fb35099f91f3f953b688adc1d1a3f5cbc9be63fc7b5f850daf6e7be2522bf349078e367024f423d4fa0f7033d27d2f303bd27d6e3033d27d6fba15e27eaf980de13f4fe909e13f4feb0defd146f8e3ea01bbc048058187a406e60a58063c5d001768397048c8d410fe026ae7401e8add4d7c37adc00cc6c38855d1358ae49d08c9cff18977a26c58c342ecc1fe4febfe531931a5ad2b70fc7855c3617dac7c5898c6327498873c9a51247a36109d382a5b0527cdf24bd14fd3dc4b7085ab0fdc08c022de5b65f20b7eb5f02dab09ea717f1e477dbd2c54c0549371e34a46aa26d62772e514d7c946233f248ff61cde1bc49cb4654ac8494ad4a1222408d6a7eb6a60d2fe886023a8e9f1218e15b390901a4b4b842ef1cd09f47d9e1cfefc448dd4a15dc1dec25e292f0d3014b03c99d17b9ceea406c9e30c754eda9ddc529204460d894df38e5bd9a4e54718b3ec255d1df1828eaa6526b125e8222d7c77d8d3c862f145fee6e55d8f7020d29efc39c0d8b4171a2a921916f7b12117601a627ae183a2a24515f2cc8f002ccb83f8a9440b10900f76e0c179f1df00f700dcd88c9af61a5f7cc0146ca82d025306e1d92706604382d94cba4197992c88f233df733cc9f01fa8a356e8e517d3f84a70122cf1cf02c5304e3bd6c6a4c0d16fb8ec5da528af7c25f3900804890caa0d83324b536439ed51050e2b54bb4ab88cf8a28c44570bafd006af41f8b9315fa1e355fb3a25a2fc51de9a829607cadc4a8c7a73ba0359d6ef79731f1cf5caec4f0c71713a04bcc2b9889919f5db190ccceb5b1726639af889d460ceadf229a3596ea2be0e2d6393ebe3200dd7f791879c0827246df84bf1e9e34ee232ccedfa82b39faf8fd958dd984a63e2c50edf8f4e667653d46bed6cad23d3a67c79e187ec722a63c629ae4be5bf52392ecb9fb8efe7305e18abe1da55cfa24398ef12fb368ba3327ecb8131bcf592ea063e5c8d74d4a47b1408bc19c723d8e1e4a4f11dbf1bf5f8f96d65dace1958d3df83955bb775a34f48f13f8dac6238341432f6f921c93b558ab6997fa7441b92ad732081a2701b67c04f0567a45edf43666af4a361e6a39a7e8d67cc5235fa877ea8327aeb571cbc05e4fa426f7e3a2b78630261a7214a237dfb10cae94afa09e00809278fcb516b9f3cd6e5f30a638e30a84e130cb0ce0cbda9947d1d2d6e0f6a11f9edd0ec540b2022b96a0eff811744722e4753ed780fcc76b378bcc44f13467cba51af6fcea9ab9d5209d21312036c1fbb4a9b8b607176b4edc93c9a679b009451a890104b18a5d76c177ed240551d719b4c1e82614dd74d89dd12d3e4396f63eb8c956d9853a3cb8c375bcd61c6875d092da49cd67228cc6187dd0f2e2c2e12b25e48e3c6619e00fb28bf596493372fda79718bd992fbf5320b504c8deccb6c58ddd9b825a39064a33f95b48106612381cc878dd03ef8664ea93c1545bc5fe725a34db82753f81d596f92620a94364b33ac6742b89ac15fac816c7df8b0d17bf0a1d5cab9ad1f0b09580296b5b3db1e68caed86144edb539ae184657951ba083abd85d1f1d5db65965bb6a2b5b7bcecdfc581f49e76e4c9cd24c047246bc716dcbe6183fe85c55680ec11e49c86ca6ea84e1ba29c77615edf8e6e6b1f6bfdcad6f87e08f7545c80bce1d90906e7a2f0f554253460f6c439f72ecd256200c23c65f8e1ddb0e43de08accf1c3e861092c548830ee5169c251c652261f3049449b3a17b028cbde7415eab9a26ed6e5beb08ad8681349e03f15dbd585a57547891ee650698ae00eed2af20597812e400d66bff6fc2dfb3946c880fd2af0bd3b06da4ad714700b67eb28d22c0f8a21f6a035e2d52a4747b173e767f19a4a6e641681f74414fa4b20378903f5ec80061658d8f37aa805f14d3ee984ab1690870010dd22940ef8fc099cb8d9a04b35604ad8951afdfa728b48563f2f8acb2355cb6001ebbf3de2508a87b5d45e0de2e00ef89711a4ac2c89854feeaf75a202b0a15a9c3e6c297e15e9e0a59fdd272f2b158e68ab9ae0198edf2beeac67515f4f8fa6162b54f137eeafc2a610a3888059cb3caa116a0d5454597606f62a398ef250ca210d29199fdeb53ddbd356d32d280a6cce3564d6f759685ff9203ecb7d026a57717537c1204d6411ef63311f7d2f954b8928647807f4b11829573e6d544b013df47289e8bb1082458de7b14a248cf3b2b4c36657ddeee48af625ed82e6c6c7c740a5963c7843b6b5e41b39c8ff8712e8b673d8070281cd879ad36b1a759ef315d166190493ae37835aea60eccf7791ce588c9db454d74d82ed615f499f82ae12e08383788bb3a80578a172ddfd2450cd33920c40f91d56a049b3c033a833290b3e92c180be48f8ba7002c748e1179ad2a4cf6e04d5444617f8296e80f5bb181d004e2e904098ffe30e4ff5ded0ce22765f6d5a0c2a264eb2854e36d8c82a04a138d631153cd65cef0b295b753e8807fda2a049aed22e036228fae8e68216932713b110568ab77aa8c04de2a41fdc4fb5060fb082851ccd9be555092ed2939a555d34d376f6e55ae2e302f3c1b1fb00dc352d4b60622d12eb0911d078134e220e58cda45d1a1585cd536916dbc9577f089b6113297664c4c9d8b3d83c356deae1cc844cf84dc5fea445c0781902e41d072bfd16d10d1bbe13e362063a98565acbbf01aafe168412abd73035a0b3c346b839c2d6b30396f2fbd51b12d6c172d6e3f1b85ee06d321a22612739548a9b66c4b4032d146a4230ac054211094cdbc64e18e4da0f7c530921b43bb721a4a14499961c2f858a9dd73bbf36dcdb29055beb0fadf751a9bbfe4b67611ad88cf1de8844ee185b2f597d7cfbe0e33607e07759d554317eec7cfeb1262becc00d425d4589fd1ed842eacca938ddb2cd244c690ab87e68d3cdf5223ecb1d0a6ee14fbfc9d622fcf54637debb81f50ee143fb49a2e51289f7a1fc99cbf148f9cf43c5c20457ecfb67eca1b0e21de21a266c77ce420e26b97819b63355ae7866bf3e78bdbd73d478e80014a02df10dc0865c6736af50f29c22ab57f29fdc3af91461a00c3d9f1c5340816d7687ed0edaa072526b412cc7118b40bc183fac50f1346129a1a153ddaaea1fd1e34bd9d0e3215b43791d2043041e542a3a8849af049089148a43cb67b4da6f33f44d56db9f83bfce72a4d154ddfe8d7da4bfe48c0e92699faabc56b2193fbc4e72759df5ee5eee560d2a708ad037df375b783bd4f2c0f07600f9cb20b6683a878a4db07d371f9316b278a4dc2da369647166c378a12f7411ffb5b598f34e46e9abbdf30f7f07ad82a9f9778a44aa87eddbf3194f5c8cb184c1deb7ce07779060f5aa8a94583fef0f7e2879d99a8bab8ffc95ddc072e26ce4dbee0fa0c6cda9ef5d1e80fd910a0655246a5b88867c04714d8b730ae960a056682470c11c6e6bfa0afa33fafb0ad25fb86756501901c3faa912cafb7b16dc582746a75f1fe6b0e1110637e1e2702b441b22febe4c7b76bfc71ea414d6ff23764d33f791043e00c033630a3ad437526ae452ba35544a10c9027e4e5a6c018e318a229947867c495417dd3f6b7a0da25c05cd474ccc2e416b6109f58eaae396c3ba4c7333769d73654694b9aebe98fc1d3b469a97b4f15c4187149e27a37e07ed8e38799369823e7ae8c70410ec1ed02d26d00576985513b56030b1bb9eea1d2708270d4c6a0db9327539d953fe608d0ef883781b41261766db960d4e483faa1835d5823fb6edcd408ed6dfed0dd7b4f33694a27e411a8197c56b81a6cb3e6825fc7e2b63e9004e29cdef5bb81e8aa6723788e50d52c6320f5afdd7a4d3cc1ba6fca76bb314a84779e53d90452a6b40e57a63e3c72f372c92ead55b46f51e4841cc092c898db4abc57ddc841eae2bf9bac2589d6e140a3fae0c71a5e373726023700d36b6b4eb1f7929971bdb98380fe0de60976268585940fcd98fd745c49ffb69a8f4de83d399ecdb0cbead3b13e85825e41a861a0d209ed69616e09e808ed98c981aa8a32c20e0f9ede2f83e2aef49d588b68e88407baf1c48b8a29057864fb172f8665ffeebc915377d26de7af1f107ac6df1cf7821d1f28f90cf6461b6ad89083ff25be3acd65b2050b15ad87f170374593a7eabcfe833088fc097f815239d9add0511b480ed8065ffd0dd9ea598055d5ae4d328505b6809f5503ed8bb20b83f090d8f2de8e7535035f5481538c0c9fa9a437ab82ac514b81ff6d803a2f7cc811f09d651fe495aef4d68bb6e45d5b44c1f45fc505d1a628a0a064b0ad39b3e0b310925c202b6acb02d64a40593a8273dc41e747ffc2be464c42e9e9609457592379a7d34ac41a7e5ad6ccc4e64b504a08e0dc49e252a425c4ca93df3fe125a70686231a84105301b8288d6ed189b43ad00fa9614c8d1a4c447dd464a94cc4cc6a571d0a7589fbe90e535328ac2603995e46bd21837428c98f1b55f99e218f47cf4669bc852e175f5ae87168eb604e20c883fa1a2f34b20a1de35c8a1f6837b251bdf6a8500505171d1bfb1a396d5ed16247616380c432d1cf4d3777043c181efb3b46d0068eafadd712e7404e5b1b0074d4b55a021890ef90126108116e70c0fa48f851b64e30727e83282c9803c32609fb41c0718a3abff3215d5c4f76011caca56403791e704ca100c562cea3c67c562604c328819f29d545581e1c9f05dbdfa64fc91c5401b31c8c6f307aaa7331ba4fadc205460a0b4b252c9ff938c357de52e473885eb1886daba02060dfc868c29e4c812d2aab8f1c0f33a965fd61fd793354ca7ff5672b72b4a17c3048566928ebf71fb46187a1d360ea82157dd2ef46af9300be486e052b47762b5819d94de18a48b7022b45b84f5a11017dc76f3aba29f21b8f33fe42f7082b0adc445a51e02ef2ca02f7c82b15ba47ae9ce036829b8edd80e866da3712e85dc1ee85a6cb5f78cedc14855804f630add858a11ec9339fd90a155c7f66b72d16ba1740d13f8a8066c6ea1cbe3f4e20385af6398a5d0912b8a536fca93b9b98c1d672d94157a86902e83a4e3eedd6414d53e2cc1da6a4a80515536a574fd086ca912cfee57249c324c012cb754a4394d008e7f2e27e2b4da9a8c5709d099178ebb21e4aaf6b912bf00d2cd1afe6c84159b24f91e0138737c254e5af7822b17051e632596c2e153afa2d225495266378587d3006d2463f672507dd6e8d341e07525f1a83560eb7c8dcea67bc25e7fc7a2c5a6e8fb895cd36872f6033f7204b65d46148d97b4b8ce7d3e828d7d4f48b362639d7ed8af32e58141cc60a2751230954d5be54fb172c4ad5a6ce2499a3ae47455566065fb6649e255f76813743f9b892126b92ef1938a4afc1d3bd60412b5d55c12451ffe9ff601e2145b2ea804b91e82d7b76cc582057ce520972ae071efc6b73422d3e04a97c901d3f843f170418e40a692363df15a8d79c42c8e87d3a40d76ad2065e614cabd838130f6db58b484455ccec38401eaa6addeca7d250356cb66afe691d41137dc68c038bc9a99c3afd112c45cdef53c4215df1a6a4651192e0944425edb5b9140b05b118996e582cfc2184fb729269997afd3764df53ff5b19f7a87b93acbd636d30bf07a5bdd91f77828674d8f56f64b7a7e637b2ef51ff6d997b582deb31a547098db0f0f7cd9e62985da46f01bfb6ea4f3b8ecdc0f0399d8316ec05663084e9094d51e61401e31265e4957aefc8173bf724a5b1cc5f1e5b0b79ec808d30fc6db90a6435a96aa0d6c412d70bd95eee354f0978e550ee4698047992ab564dae1115a8442dbefb67e67399acd0ced013b065f3292aa361a966e44bcb6ce439d7214ef6e9a80a4b17002c5b3be069a5b546a3c2209b3ea824db1aa5202d5bca4fd99416aa09cb51bad83e15a5857fad8d0bc8edeb2e553edce08d617a71b4e2eeaa3c8e8c2ba16bd5464dbe13cef8e9e682abebe78605c74e0cf4e6827d454879674a4b81f228116c3e2f26584c2adb0ad91046ddfa0b420fae261b3fddf94335d0ba2824990aca6308ce8c1942e12e4fe53ce1aadcd459c7974ed0cc9e219852013fd2e1ff08223f68687598b24f3ff17a3998b253bf7d0ebf64917f007a38989aa77f526840989af1af562438314cd95913c392e031961dfe21b8b5c3148ffd566cd0c1d45c012595be6385eefe8bc9ff2cd260989a37cf596b6acab62a4cf1eb2f15e9ff079edf7cb7064cd9b85f4dbd09a6ec999fcef46fb0db1f431a3b4ccdd29f65ff3ae04fa278cff9e690f803254277025c3035b77f9e387e989ae7bf87887f09323fb325fb17be7303abbb56986aef3f0dd2df3f9edf69070c9882b8df420d124cc1995fb1e9bf40b73f8b14f730d54a73932efc0bb6df235830a5842a879a54749d205860aaaf2d5b254d6498ef5ecb04052b12c41c873ac19905faa031d6fc8300a632bdfd8d67db2038fb3e00a6f811806e8fbfed5461609852753f667dab3f4c654461d64c52ab070b3f6b920aa60edab96f98822e89bff19dc1e9de4023e52d47c0b507590910632e8e81a93ca9ebec9e7a94eac1a94efef98457d827221ab0d48963cbad29e849f3711b7053de1f42c336c1c7fdef471c78fb13c24de9d5eede5bf56ed89193d77406a46576efebe1d87bc1bc78852487ba9dfc18b138f6a1709b0c3e86fc558fc816e3c0196a3f6136935f5e0326b507a3a5892261044414e43a6976842daacd6537080303a97a0e2b233ba07327865888191f27fc868167689e1c003326d30c8e93da5d1aeb2ee96a8f6007e0fa5c8b71652ca10ba87ed0da91416f23613e972ce70a87d3ac991e4db632352dc15fd2560a3c50e177179a0e9371ae15b480d600dd6c10709b89bbf52d1a60b69c32bbea40422aab1de8013da053c62c21de35252b580f42e1151af61691f2a10acc7b14ddb556dc8f952aa8129c42ee9d781629e5356626b100327451c949fad080dacebe81aac121bce45e02e576e48a8225c79b2d291472fbc0ee22eed674335f95d2c0715012f9fb20e495ff8e0051cd844d689f741fdcfe124884ae0ebaba437d523a668e194e9d0dec4f5580de469b5f424793b0e370f87eafd6901b61e1b7164c087c4a002f981c3c43fd719e1921936cd5cc497a47deb8d607a6ff1afb31bf1781637fce57aa3f1bffec7486042c8c86419ef6ef2f03ef67acd41976741e2066a2f71cec791bf8972f0a55ca0234357e505f4b2e541d578312c06b8ff781606131e91c45c146bf3694e4426f6e14a196917a3ed579c331b9d1859d39ac5c8a5b24f1efeb2382beb1018d2001836eaec0c9f29b39f7071420163ddb7727c294f3669dda19018e07fb81244354f6b6db2d9ab5c7b19d6311bf61034e812e185dc9fa7e496210c5d7f341c75ff0563e80ea37e8daaa5ebf1eab56992bc5d0534e6340d178cc280b228bda30d765f475ab76e92ed939a55bb968616f62e9145697086c6578c0bd40d3b9a6c9ae9ba1601748db4e7880fa9f218796d676e356f207eb0f7796c1ddb7bcb746d05248f4a7898b273ad2c9645793a123a0fd924aa2c8860fa37f5dcbe4bb05abc3b66a499d4c28acacf8be889986bae1e7c3d8adf8fe080ba98a9b9d71531905349b068413121c0dc59cfc7e28f0c339d610ce09ea19570235acb604d362fa1f6ead1120d89782d5a1f88e3eb67f76b8efe29722bc1c0c94cea53ba68764d981dd8b228034d3f83e1c8e6b4e5716430d86e90a5e265baba096a137efe31534ac933c711adb13838b0f219ff4eacc8974b9063c54456e2dcccc1763664353a6a6e81a35ba919b94a06586765529dc3c2060d6e3d53e82b430a0ba695198354c846947be154dd0d2a6c40a8a4ab8b05c31ea6b9ec43993717a3a168f0030e78fb9dc238006fd3088475e5019a530f65b2297b1663624469e812e4049d0a97ad60e18e0f46ef8d806625a4e6354a1785b6cd369f76322c48c9c2baba1f313c93c6c2c7cb2553f0bd8d24fe9d6819b797ea2c4123bda34a21c83ed6152851a2bd3bbab67402ebf63ac08e260fab04780616c7584618be9e446dbf9eeeb187f5a9604027b4b427a06988d1a28c801ed716d1baba9a686d56136b50d28ceeed8dc69ac2870dbcb3a479c3f08f366819dcddee096d3bc6146b20ed0ae30a8fb29b99794b1493b747f79cc0e657e97959640a7327a0eee4623e03bfe20b64880150221b928a088c329759e022446dc6292c7034892de49c70c00b7695434f5ab199a1b3745c4dc3fd14889203a6d9036e5fc8fad5fcf92d3e73ed6ff6d0d45e73b6e776be9ac65259750a042a8d85a102fadb5322658cfcc8c975e8082f61f211396f6e79858db11dbc8246c58d8064efdd5431d9a7acd2090d91548faccc5e6c03fecb81f9fc9b705de9f2acbaa9c7d54144f21ed1a0ae2e9d99d169bd3f92b3480636b3b612c0b577c31d08ccc920ef64f7b1db1b165d4ecd9bd4034e229b05b07e3989c486fd9cdac5a1740852aeeb4dbec105ab33cf57ce951cf7512cd13d3d8c87300f0223af8c02de697b5b8845ec34c9ce0dafcb91917424d1c2899719ac8170ec471574ce5ab8b5ff2582e1a07122946a0f3845be2234d3cf751c854ff242b08ee0b1c2bc86c1b9b8746ce3c3cfe7098958d201cd9dec181c581b26fa6e5a676f3cadc2e5b7e2c3224b8654940e8547e85a17292fdef0c5252d70ae854de5c0b1a531d6c0b3f0f1895e017179ee3d3feb78572063fb11210c6e3c8195cdc7e8ea1357361365d29dc6ca87002a9102c86aeab95af7e8eecd2694726ce8141c878c8c77fb84e3ced354c6fdc75c2a6033c27514c1d7f30f63705efd3cf4613331b3b122e50dfab8cb27ede096151bc43cd3d9b434d478ef5ac761e1e6857eae266b480a6aea6eb976c2bceba98c94348ab4ba983576e539bcacd49d12238d2ce82b0c03acc8448bab65985653dfee4de707b675845f717f5c0eca1ccb0e9f79409dcee7640c3665d99915b8702274462774070590129f60e6e936811105e258529a6afca0840981c427d775d8890a6c0405a98b6fcc2b23a9fb10a3749b317287d2306fd940e92803abae75b11d684f639b25fcbe23a547aa0463b50acf2718772910b31328a912767347d95dbc9ca386292ecdfcd30266ab1c4ba761f0fb27a08cd29aed7fc5f68bc5829f737049e2966560666624be395c0c3a1133e73155414c3c741531ee65c4e61c566063e681b60cd0ffc486465e726baa1ae994a9d6a5ed86d5a9c3aa25f65cf6e265229536484a01e492fb00daa08fee7a4e9bbbbe2351c640cfad5c9fceefe0eccab5a3cc3afbc26327aca755c7a9f4a027ddb0aaf9ff151267b723197b55786b07cf351ee897129ba0d39112a8b6cc5c70e5e01b7effe8efac4d827aacba6a2d89423ef598f98ccf7c25235cc45fe148a4b12da09b064efc5d3796f7a8b503356031ed980f73b2387b8c6c38c45df500581a3e33703b22190fa699b6b77ef0f9855908c953c900b616255f24d79e42cc13f40ab8c46ec57def26f16fc2362293e3e6c65662b17f9dc0c2ee58d424905b9fc4f241f41ce8b1e1bc78f1e0ace5bdca5f6225ea2c6a723b826dbb2f0ac0c9b3bd682bc5e25540281e1af85701dcf285a5cdba68af6419fb9ca13b590c1357149463a0bbde5c4779bc3514f860637fe54b18590f30e4400c00f4238d3b8668ef328ca23eb46f5b33b937e4b3819fd250bbb13aebaa61f1975a704aa5af725e259693cb98c1e6b5d212e020070f23ce0a03aff65eef39410a60aae141151794f6af4ef8faa1168aedcf131c6c6ea678db841ca4896ebba0232b7643d2fb152b57a60e0c7afa8e31ea2462d6a8c335acbe0a1a369ee3e5f41065d7f77672ad94c281318b17bd83cd002f203eb985b9a3d5baccc60b0f09091b98d6dc7bb91b2d36bc05ecaf1c55348eed3602dc91f9e3cd897df12ba9c99370abc41c588c5360e758677a8d007a007884a7512cff1bf94613dcd2b71a7e6b05a7a067df2195f135180509cd59b2574685e9f49738d8b3bd69a1c8d78fbf303d98dd8ab1ec806a437b66371bf17147266c15fa6a9a504f110c7fabd3c1664c64e640a12cd1b33a8e6ddb484c4e690f3a90c213e56d50200a4043fba51c633655e5c863d15ece75254b8bbf91a5c945887a989ce7cd9f9224472c41a79e19287fd6dbde28ca652eb8dbccc8b3d6c2a455e966c77c5c4cd0057036c41ada510b480205a5b9a4a55e75f678a88047c8ae0053e90ae3102b98bfef5f95eed621e9e625048a703439dcf3146f963fa607ad0b9f5b2e1f2f188c43c41f451b2409806ea21a84a87504e5cd765c595161972cd4b451d01b2f0a88c153e82ee2836d23dc4d2404502b1ac4c40674a136adc7346e6d730f001f147bee21a574688e16d5d4ab5b17b1f6ce0f0b7eb1940be809bd42e039d2b25a4100442b7c2899730e64692ac4bd0904c5b85aebbd966e18c082f2b546b9c01bfca0a9095618341a584e982a96d608cab8de9840420660ba1dbe0c4570e651179b3344a6e010032651608e6ab2613eec96df33f03fed7da4530c29b1d170f20bf9f4101235d60179e8a41507c11401a1f28d402a6066c7c440bbce77e6856a261d528c7e66d6747a365e40353251700ac8b185acda1c6426219327b668ecdb2de8b10d3cf2117a5b04c59b702305f4f2854d3b34af25bf2d6e7c181e934fb912360a71e63ed8c068562e089935df2e7a9f96305a084bf3aced67c4691bf5ad1ce6821afff8c6584fc2f9253c665999b59edc5c16a84398b118b1bc45f00380d40303c91c22ac950c189a071e38cab52529fad25e10c2255b95a17310f1b2759a187d27a03c030b74d71067f9575787faa3e9b3007ff0d13905733c11b37e3ac3fd369bc003e8641004b112c8d58ae0e39f7eb37438d608537fb766d68a2964826bf61e42e7365803865dea2ed1e422979058c19fb816c03984c31e6b424f0575b8017ed0a2bd3fdb6b00814199711abf395d4878c28182df86d3698aa1e89a11d4647c991517bddbd4607d47364733d44f18938e594c94cc7eba9826231bea2ffea875d8b715572caa029693b415a8ebf434b4fc7a10ba686a8fdf6f04f11d5d070dc373680bf0bf00497ba657aca0276056a53977d2f4d3ac77eac1c839bdbacb5a6f7fad97bc51327e89f1b47ef026c9be78211ce25c6817e961e051c70c33403e07883f76c8a020b3e5ec4f8e719ba1da23d1db9881402508f8797b04a75ab1a8c1d035c1302a024ee8d2e0c3528a9d8bf6c5155630bab76b0ccfa09bb94e8b134c281962e88870486068e0f36cf6f45dd1aea042e2a742ccd238c3fd449e2daea57c08e719431d3286cd59474179522ba803a97275153c3e04f9b50c09b8ba4813cd232d01648bbef49cd18e19ac0d1058feb8f40f4b201b84694b039c8b57da990cbd2da9c0336fd5b7605f813c76cf760d288f0c04280385052a8b93be1020b3fee119fa2913ddd69a251f2a1368af5835ea0bef5b63430bdb952aeb5158b5968183f30cd3d94caae452c907a544145e70a77fb52d6ac2696439b7d6a07e9cac7334a611faba10dc795714b7f42fb12057e300cb78c2a602193dcac5c9d6f827f72df9c72cc587ee56b3ce9aab4e2e0c41ca4558dfc476dfc64e6f38d3729eb459bc06ca36c4ccf581ae1a85a760bfb65636dc70cac56824adb46b1a7bfee03e2eea8b304f033debaa99001134b626bc121a226f90b89bd23b66052b1aa90b7ab3e23bcbd1ebdbb3050675ed20826bd7fb2736d32f3c381ebaa1d9846847d9125c603dfd49d32c94e61550ffcb4e30b96121aa3f99f421300f20c96458468823c671710056b22925cd74fd4b4464303a33a33c8f5faed63c88e68e89f00fd5b0e6c62c5180d867ce0af08c07ad264429b1cd20e846e92c8673105de966147b892e8b2d30b3fb4d5284437e8e644166497096985c039c89048b427059d9256f013e3aab82c9ff9e5c2c14046d08f9615065d040864c9cc80c4d2441520308e07312716335cc707ecd6919351f69d8c43f04c681c7e811f380c2c20b9246221e7f2e350c1cd31ff6ead9039999c8924e85acc76a077a757fdc0a2a914fea3c8aaddd60f4166e63c7fc239af1f45cb3279993867700ce2038990777d7cc4410a0e1b690afab4aadb13587558dc967a26293850e278154ba76deefe5cb16d7caf95ca2ef6dc6a56cfb93342c1a58289eaf3cac0bbe0395b9b48056ce3ee4ef89530b78caac0a284d51087b5eafe148953aaa2c0ce766f53789b83941aef04e60462cb04629a56b4cc8388d531bbcdb31debf2c61cc2105489018b6d6b8dec28437fac5bf70715f30a8cc359cc5a008025236683be3acfad684545426854b89c024e2609c89f571899f10566d9e91183aadb205fc5e3a5b887b8518f0abc6f7027c118c0f2bf8b58b7655de1ac4be400804634bcd8731a3380f439b1aaf9976e12c589e68aadfec728a41013a9e508d37ae4592a2ecfc0c3a5e252bbd7b69216f39a2f06637255fcc5aa1183aff57453fa5383b86a63f5a78d486063f10868309756b81768368a9786d17225851c3085db9d032fff199e92c208a6db084d0725517fe7720f43036a97ff6a11d3c2c0150d901c1b108e92e0df2e1651d4a0fa9f60e48b4244abef96b5559c8ca68894568fcebc8ae61829a0e20bcb2f13cddca71d1190287b67a0f86f35e44e3f92df70385c5045594e1f4d5c74a23945612e4495ac8fb9be51a3201206a3ed1638cf7f5ad4f66131da8bb98a2eadc2e470e7bd15d680a9a29334fc0434c32b1e9da8f470ecbd95d75432177a379ce5fd58a15037338971d18ee764b74db26ce723f11c8ce270261050ec113026bd1334251d304f7107899d300f49802935ca5becc1ca2abdba7a40fc83683265616ba730be0a7bce033f7e15ee5adc2dde9001eb8f7dabb56c0b77631600ce8315cc8117cc69f23ce1e60d75adc4d570c8ecddfe413f9d125206dc6cf50f93a0d61444b9ada18e9243016f08078b46c787ebc16f0560ef9e28ab45e2b65f1747a36c2e888916c97311e57f50e6bc7a960aae650498fb9039f264c0ac9a3f90950a26e7ff9a27bbbc1edc11c698e5932408ccd59930b742b589baaf22fd016f6679b021a037347cdfcaadf094d7ae7200082d6e0642f959316ca704d20cb77f52d2f48ac31718ca6239846a0c910cac17298c3f2e250d2393ef51d37087b22cdd7e1c6aa200d2aa9725d1ad38dd010510cbe4aa03c4b968eb6898f46292759566bf8ac8eae9cb4af94c9569ee4e975e31de3d24287d314ceb289b75c454c521f78a14b8a9512aeb926fda7a70b0aacae1715c642bf365a3c724ddda0b4407dc751b949acdb1de3f1c232c8c64e5462efb8e390084e0f78b070bf673184b41442d5731534241050c6270dc99213de877852d24d6c10daa26ef1e63d0d3a46ce0f5b08409643939440098a2ec67a844461f6bdb26c35de3219a1704151e71948162cf41744d1822c0885f4332d855e660e393469ab6c11e869c45832631febab8c029a576ee4b009d603116b0f15de3caee84eebc206c4d4bdefcb0c2ff8a1097d158be13f5a653273d6d9056710ad7c755db2e67d5317dac713f1d38286534c9d0c9122ec522b4e93274d76af25c1b995c685573e70f64c7e772d9aea521a1cc215bb2c030e31174a13e86572ed6c63373f6276d151a915a02472f0b2473b44a9302b68a802b165db5bfa155b4056ec3a32f6d5dfeee98eed7c814e1af9f94680b068e64b1087858687962716fc426b03087648512934b9457fbf0c50e2750f8c122cb5c697843dd30daa7e92555692c1c9135691859461983091f7c20d9285b74832a1831fa4192c8a4806daf0e0406245dc5d754c9dfb8a6ce4817b8e9f0604292a4b912d1241c7b8cccab27a30e7601b5d49db306bf4828290da325d013661a14c97860ba5d356fa9530867a7dad44219da9674c9e9ae7d4b1d7d33dd210a936acce273c7a02b93296b1025d39b5254337a61e2ca7d68d430af3fb82daa6fb663edde1eb3e5da23007bd8157fb8644192985c1e784aa5fc2dd76784a654f49dab85d0236e17ea7b7d3dd53c50fad2be16813b30a6fbfee6e0eb3ed4c0d28e43130fa21c700a1c284133eeea4d8efaff7b0d96f98cb0f06503f04f7999c2401e54daba86892bdf9b7324f30cf60372862ed7116c22274fcc1e42a512c121df41ede782493cda3b98c474b7e89668e9af976e6d300912290884307d25984895e1477eea2660ea84d9e0f862fdd5d17f74dc6116c427d17c2dcf24c3836f7a1161d8f0c74dc5af4d2d9d05d937d6cb0990f8d565e5119898c56da22356b9ad98ef7bd478e7d3a1617f8d78c706a7cd9eb3a80ec0d1a1eb5c7fae275c0541f9577386b2c96003a6e615b0c36fc16e98fe46c98129d6459bcf139e9bf8a6770aad68a3c8d5cfef025b59c3e71a1fc9c8f0fc3ca5769ce2595237792baf13b0deb4cf81259c0bc1242699001024168a0490849dc324f7ecd4a436ab805cce07d7bd0d5ada0ad68aa20ef9e01f4c4ea8569d554096b12c7060ba54d6078cb27e950831ec854923f761db64716ab61776e629cc942b1a0da84c8eff16f30f9c25b78449042976e2f53ba82f24fbee6bcbc3fe95bbee6f670ac0d541d40508030379e7845ad04d4ab046383c428d622cca8fb833c8a4695f37b6c628b9e28b3f2271af9433b15342c55267b48a43d02c666a5d31efced2b32a596def0e875ba469b52c2311fc13413fbeec9c5676c5516d62a50e84eb21bffab877f15edcdd74ea72ed73185558808dfdc050faba0c022bfe27a6423a209dbcd035a58156506251c367fa5d807f7bc51fa3a407a40199587182ee0afaed85ab1099a1abe8c84406eab816ff7645453bf3af5fbb214c12af5d5614b88238a82b70677c57876b4429582654b80f05bf5d2a2fecc8dd81288bc0510d72577472d8040be760594c398ee2adcf7d92afe3cc8ad36dae724b814098779308a4d7aec0c8f6c8af84344192c6f1ae3d4df8d25db93c9b8afc9d7945b4c710443034ab3fba95bef0b716820234190c4aa970a84de59c849ef0a06ad9a47e0ed430c86a0c8d3c3b0a5419469f3a16f86d3c10defbb620e523e86a0b9baf357af5e1557a5c427c6e41d60f6d5999114c4595c4da4f0f31c6b9e5c71882c2b184ea0facddb9d3ce245993f63f2b4f53650d8f6165b537d6bd6fe93d56deb2e66d0bdeb6f6a6156f59f2c672efac7bdbda3b2cbc776b873ad7a1e34070826155d8f8a68cc146d9924c694df05f5634f53a490b2cb63211358d600632c59a6065917782fffaf61b99ad78d3baf70ffd3b2d78cb9a372c7b6bfa85c1c85fc977e8933797519a0ded9d2d586f19e9abd25b457710ef3766d52d8698b68598e58afd8aa4ea4f1acff77b018ec5b83186510ba5a4c1b9f29ecf5ceaab4c739fb93de18a3157a5afefb3878623358e5e4339fc743dbc50c78ec2c85d9e2d20feb1fcdde01c3ab9648033f08bac0a6d647ac6871abc2fcd399125b8e2031af391c3879278404e0988df8675f94e3bf4b4a5942f3882139465a173f9ef9e08ad8ae5c25d35bc97334bf2eb6b03fd2de672be4e279a9bdc98ba6825291de680d6a2ac45d31731e7a8fbcf571a30d51c936d823e970175d191ae33114cbdeaa4e6ae79e34751f1a86cf16585bf7935ebfae06c0199df83d666e03615b88e7eaefaf17f20f2b0ae254f3e2e89ccce311198d56f7d374ffb8db4d0b9ab882e7e619938b60c9fe6748221bdffb71838cf6426ce3150ea4c2e7ec35cc4ec418f77ffb7ffc5073f3edaecdeb427276c26f64adbfb43e6227ac132ee9e2f8477e252f7c682e06cfaabc26fab1d7f939dd350ad7e09ce85d1c0a0cf08a89ca86587dec151c03d81acf6ad6d06eb2974c836b77ccbd136f70686c0d04c3718087a0ae755aaee2769c3c2b2af2d85552f59bed1b9ff45db8cfa616d9edaf2dc0d8427c72b220e5011d5e7819150be232c801a1853cf299b6189ec73746d3c17b47b1f3b0fe1c70c47e4d69cfcb481ca2d444509ad37edb19d5736b9596ac103a39a03fe080d2b415ccc80734349b064dfb0d0edb0c794f78a3edcc7092b210ed11466f4af8ceee560d0c48e91fb0117f40a841a7801dc5ae1230403b72acc38b3c676c090d0c887257db1ca4ba97d9978923564be26bc4f663e19cd0ab7cdc86efb1bda991c49ff68881b11839948181e2d0f63e91cc25fa2536a08aab588cc99dc080b258d6645ad8bc4e4846e8bb6c3cbe3bcb323412a60c63f5e11aab922f152e969b02f490333bbef10b8d96e90d3b32fc6d8912542aff653b04c0444223201912b79020cac994a766c3f3571300ea0b8f14c88d9327fad3028ddb06081486ef023f05492dda0825d99e96eda18ce8b5727b9ff0a0a5e8a69f2d9720139202b25890051acb54bfa35dd6178241897780b0946cbbfaaddc15b855fed0931408cfd516c9947287b4fceb8e8c93301f692d3c261b0c670f6d1d519c83075a504889f3266bdc979c8d7ae705cc5844c3aa04f5142342d4aee05cac6abb21d47b3cd17ba951bc9484dd2b8849106bd56d1b632b332b0ee161a2fd496cbf033e84b18cab6db4e1f2926b3b0717df150899bdd1f244636b1d6d27c9881ef433edff2f416145bea05ba98e4e7c31aff0b8da390efa326dca2de023e2275a0a0d7a17e74659bed5b8d3caa2a48ac2b03a53a253248262f68b3629779a8849a811cf7527abb47cbb7769e8da1d98671dfcb03af7982ef7d7440c2708071dffefbda1cc6b8ada46dd186318d48ac6fc871de24c0a0cc386c68f72151676cdc7e04d7507408ebbca58f851b2bebc5f49464552fe0dd1a9b9c58d78010082e3af08dc4cb148382ea35d6a3ec5fe88aef34007ed4fb2a1e725115718fe25f4077cf7773ca8d833df3b72cf14ea1dc951d1440ef52a2f935734d46210645ca16d15a7bbe47690fef386b6d7cc2991ff6645084c3efc839e68298eb71281536e96d8716d48fc8dd1ee496ca6e2d561e202fe8b303f1a67c714b45c3bb730c76cc0655234af67969bfd33bf784a9168737b48fe99fdd034136180d2ea929e82bb0dfe4a969aeb2a7beb130833286046fc9586b2c769ff193a4be7d05f73a64887308d6a48a1b8ac42731131d077d9d9ddcbc54070affb31d0ecb805b9e50af2e6d8ede004821b53010cd73e4f07e707161e2f08ccef05853223d70bbda6c59b96b80676d3489b0fb0aae943f49ae83cbc1bb8aa87c16e6096d34ff722089bf762d26eba3783140a61dc9d59642f7363e7da1fa9318e8a4f5f287dcba52fe5505d427512847e2e599e8b996039f3d842148a256593b04fdf4c5fa6de9733f6e3f9ab09cd90591510dfc522da5d6b253a50b63805719e16f4a05ca6436d435f320b462e83ae6138e0a68418063d6f0d64a2b4c8b76907851bc510fc3946c9982681e24db41ade8fd5c90530f67731410bd1f05c2836240fe13832e448d22585b32aed6011ebc0a36a0d0564424aa11ab7b4487c055bf070f22e6785b1c5a761b7567b5c60a9c9ea98366419eb9a93e12b2c7646322d1484efc961615f683e920dbd6b155d64447cc010422653dbf6484a0c522fe81aa025e779a8931d8db720dd4aeb3f8a6bb081578f99d548070ff0be8d2fb1728098c63a0c405ce0583a123fed4108e2a8392441a010a9dc40626c4d461e42570ef4dec1faf3b3d96689403d900c82846a2112e371e256c983af284c4b6b892c41c5f73af21eec5e2de86abe7047e74ae2989b16db5e157ee94057aac3360535c9197bd4049d28c2643bc6d62ab508b7b1f36dd6a6948252df69d659444cff0c1f06e4c3c0448ccf531f0141f6a5ea312130e95c92eb573dd2f0c74f2122f93f87240b0a081a226d25eeeb53c9cbfd2c1bfa759208b50c87049c540498ff31754de9f475e903462d0f0e4f8398756d235cc5a23e47a182d1bd7ec3ec48c4dc0b1ab83e419d350f75c6e5b23f18ebbbd5cc0468ef97c2fcf4079f2a4c952848ac411efa077b7c65947da5ce098cf379162f423c6104d1c4a4e964633bc33c4f1e86444e0fe47142365520f946b599cc94b63f2dd5e150e12bd19d9a8f3489bf94427f7845754a7929c178804c30dd311bf9b70d0eb513d7b60eb9a7224175b42177713e99b6a70e497d9047da58d74f09f023dcce20dcbe00d873d7662e9540701db6e01b0c73ebcb1c69a6792772ffc660670e736cdd070d3054d74597088cc00766a53b30f66c53306a4e97af04c61d6c7aa25e2c9c2eedb67ce5ee492554c0ebf7642ddcd12e2b1be37b159e6949a80dcb19c7e1070f509e60bbd7fe02e9d08d677e8126737a5bd717504f2b3c4d33fd1223f4109e23ee5738cfe643cc87323c35670a3244601c3e8879641d50e5dad520aed26bd49545909f30122c657e1f50081c75ed5afc1689994638f603a104a0a75bd5e5da0c7f9c77152b9986e632d70b781211f0c7b2bb5c2ce11ac81567010abeaf6be8bda683f0d469401de7d5209727b8b82df8821309323c6f6f820ba386b292bba0324d4746465a74976245a1a11c6683874377c16d5ec89513a4f0aafa23bc80b541522645320ff0256b2d3b58f820f236708357f0e372ee890cd19045000b6fe9ca1470dca86156336e2e8c26231021a9daf782bfdebcc22d5e6be37560bdc1afaeab4eb123deea80d6dadfab7d7049f66da29d977d2b05940bc1a867ddb91acf62b74f79d688433f6967b3b42cee83b88cf3d538fff29993b9fd59ef2314c0d43b782ead49acf5c120ebc654f056c88864f2c9fcf531b8ebb3fc08d06f26059e81de44b2244b007956b105b1c4c1590195063977817e3686657d61f50a404c17d0d59047df14f4df895cb47f2782691574378cd7a2299af9568b85d0f754bec03f00a353c17949558f7d0f42afd6c87316c06d43e32f6481d63749d4f41e195547e284007eea73c98e517a6a55021154cd00fa00a630874043441246ac11e41e67669e6fe1fcd3d35632c8c89a36e2c2e291d6a44bfda896aa4c82291bb11468e2c249ab9463c3797140333228a3346e9499d6d6e6f5664f5800283af76d3d65d42b1c9945714c6726b4774a384a7080d08e584b2fa0577b69564ddd28d42c6567c19830130de7fcdf8a484a302e9fd3c153098b1e2825b4ca10cb6ee2e4a36a4c13b0df929b4db1a6747407d325759222c2d04caf69902c2325099302f4303f9f658c14ba3ec5a5db9b93c06c9c5ca8a3a23d001c23f429fc4c8a47ed647525985796ba696b15ac5390e259ee720c5a21fb2c237617c796bf95527d0042a69dc759297b6742d03b253529e92bfbc8b6ef52aaf522ce6d36972eec3cb9d8594aa56128955d23e560669f788392c98c0f2a1050f53eeebf881aae18be569c570f9bfd5f2b1d455e0729845664ca106162824f502eae24e5fe44fb819e848e726c5754be1a9af8ad3d80059d69bf909c1b564187d413f394b405695697d611aeb1d4587723869b666b3cff06744f6b81986ae69ceaf293cd6de83a88477987ef5fde5b4263688100328b59def322a2b1c0184be883ed8da931a47bbadd765720d63689468f5135826312f812cba829e42b15b722b34b68aea09cf24376bad18a5bd24815b18ae0abe0e1905af5206b3036075833d02a838b3c1cd6266e458b6a8de069d506b72bad6bc460d3b7a105aa2e0d4b4416e9d42590dc69df8a2be52edd6a4ee45261ae1347eca09198326519d55d50ac8379fd0d54b6719c188c263cb2b459982c0ae51475bd2e7506fd67a31168e213833bbdc91442f39e44779a2e69f286c3473fe9423f39a2f9b9611416513e8ab9795a91dfe6d6794d17d55306e2067b089ad03668fe546778ba1ddcfafb438b86d51ad90a75358471b5eb4225a76e2b65dc0b342612acc9803a0cd51cacc0e579ca11e1d9c7bd8435d181b5527b7bacf73bea226c33cd6a16ce659b34867e45bdb16ed5d56642798f9d417861ef6259f0bd7c00bf0f6a4852aa661b6e1a1610fe667d0b2a54eee3c7a7c7d631b3c112d55af9b7bb000d0cd785715ec1cf5782152327f1681d623951113c09202014d80eea3d0017ed8c8ef8ff8791b694ced3f768a21fe9e3a11f8cb9067b87e1a5cddd903df9c5162a2b45e95129d425b6c28262895177bf303b0899f3936302ba57057997a4f0453d7b215d50d41dc8534f2861098156f40b90bd8f1141eff58c73a4fcced6cca96d70e6bef2d53ea64663c49f924ab8bc63bf72383762408de270b068a4b7cc5fae10d6e544929faa9b66bf9eab2918e50988430b432b641c844580880d4fe422c34ccd015ea70811e632c1dd530bbcc9eca743b4e52aeb28bc29d8985da1f55040a26a5d1ddf468b36325169e7c6d16fcb46062be13ecbf095cb13c38741b6c3d47bdf7771b5343d493a8f2937075e137e9bf7768d6adaa2e05c0b85155dd88be702cdc1e1a052c35a4a9ea8a930f097d836b0bc02a1cc3491949b52ef7302d4ce5971bf47ed0d25e127ec53ac828c85c6b0b332dd24547de15621b02f1eac9ab89d4110ed2f6d7fa15d4fd0ca2fc5d8a67f419dab18fa4d5d3956e6649858b7c79c6d648a29622da9e8bea3febe7a370a53a48c4fac84972de7e91c0b5ae1b8449d0f87efee169a78dd709bf01f632db2eb563ce71b752bd940719573a0534db75618799c61663605b2bb08952b0d490ee974f1d2d857ae5ecc083f5ca6aa29d37d8d80816b7db3475d95f1061c55478754d65ba5238c51a6cc046e977fc454fb9b576cdd097d40326f37d025e1ad078f7771253a1d3d091bd1c5ba4da2bae502ebf81ef961f0154f9028a6d3a7a5a309c55a50339600f98a56466517776f28f6442a2c347d9a0e665c83922b0a55f7160679b72522f008500309a8fcfe98ba51bd802c3be43548ae136960f8dce02075f86c35cd9ba95303533332332b2f7de7b932de596322599024307910784071ed675d9679c23b14af32bdc8927c91ca92365139cc671dcf723d32cbd59e71b57613655f6fe18ab6cc06c9c76556de3344dd3348e55d9e7015671d79196944d701c52b6cd1b649bc66d5cc66d9e75da0db68ed3b46ecbb22cdbb26ddbb2acc3b20dcb7eeb302cd3348efb4cb3d7e5b638b3389be03ee332ed058ca7df6d305e685cc76d56be66e7e5f177be1049c8b8a556cf8bfe9947d9ee9e79483c7fd065eacb6780cbd42fda34aa4a9fcf3eabb5e479d8e9f4d9f090cd953fe50dfb46c9b1b98e2d8905fa59f6ecce7277777777777777f79fa1b98143478f1e5a01ed95068896899146fa91e55762bcca09c68b4f4171f12d4cef7529eeb78fafa353a56ba6a4ccf75adc7c441d335ec6cff8705c199f8e06e3bb0791f11e793caabd6beff37b7e47283cfa95c66b167b6967fc6fb6f49cddbeb3dc7b2dac09867df1270be355ec49860542041120318b5bab473fc334164be3572ccbc7b02baf62637c66e3fdac4d0d663c07bee67b0f89178f9a62df44bca40fbbf514a851f4b3f6bcd3a98132fb2178b32f6c9b0cbc322c5f4dc5c6fb168805b2c7361fdabb6b9a8a2643060ddb42434433ac1be16914fd0804a358259b360d126f26c3564d46bd2cb6856c0cdb44b68b1aa47fb26dd447f4536c23755283fdc48958b7b17ee3380db2725cc7771a2cf25937d228fa9af5233bc4eba5378a4f7f6c5cfa6134ba543edb1f1aeceffe9e52ca066a30c8092f8c464dacb8f3db281ec526f3ebea9eaf340a13665ae6e428fad5a7612ee59690e546ed19a56574388a62acc256dbb3e452963d8795341d2e23851a459fc8a8725cb776640967b912f7e914a5943ad0a5cfa12fb9f49de5f4c17f16cb59fdc37d52fb4a5f56d284361ed9973edbb4a1e84f5ae6c299363d712ebd8ce45cdab2738d5c5aeb9655afd699ac66b5d65aabdfd4aea27615b5aba85d45fdc9325d05c7546df3c1651997655a6d2310e7d2faa1dbd076d2c4cb5ed33c4cfb5a08db786475f3917d3d54fa266a9076777777777737dd72f4974eb59eeaa5bd57b9e349eec4911aa41e135e78dd5cac232efd0b675e37cd2a2e7d953f1c94755dd6c29db4d86950ba3ff7fe58a9f4dea5efd277e9bb1fbbbe6e5fb7afd9f7fc2831ad03429786cb4c3ac073b7af3837beb41cdbebfdc658b7cd4f54fa0d5237fd13cb44a4158799dbcd477f34ee3d1ac43acc396cb3dfdf8c8d87775fd8fdf632361ffe5886030edb0ed4954e9e780dd4410dd2f8fd25abc365ba87a769c02ef4dbb60cf885feb4cdd9de6cdb20bed0c76cd7a08f484963e311bf78532a95745837441ca9644ba5922339922339526946e97acece2fe1348a3e9219989cfa61c12b7de9b7cf7b7b1722af3f90eefa5fdb5baa04af3f7b9e29faa196892c7b5be5b6e976e5fe371ffdd1dc087667d1c751f47f92084ac1502c8a47d7755dd7755dd7755dd72563cb71451bffe24d58fa88d3206d1ef0ff74f23c6f1e9f1b599115595964f595c5958d47fff585dda77d4635cecef716ba8208e1952c668558211e1126b4b2f9287d0b750a6b56318fd2f7873f4c2f44bc2ddeffba7199e6a99ed771be0576a1efc2fa15fc42bf858d3736e2b8f785b5761f3df5973ec4be146d606c3cfa31476a9ee66117278ee4499d9ab2659ac751f45b5a0f0aa541309f15b26dda88b66155a96ddaa66d4aa52cac2c9b8fedd3c2d27bdb8eec75f8e17d3fb42fe2f4176fa28d4da756fa834809e4e4d267f9c3d53b3d68e3a7663768d19de45cfacdfcc9a6f7b28ee457b816dc09cdd1e132fe0487da5cfad5dd5ff3a2a3a121affe33ee2b4ec9187f77b1f9f0eaf5b3e81e6fb65def9b76e1a0518f094f06b12a5e2011e9fa4fa7fc33c91fef54f5361edb273d243c47ba6e2e9c4eb13a25a3d154e979091b5fe324c34b992c73dd308a3eff050296712447a59a781a9c5ee0a520bc9288ecd16d8b8b1ec032917f60557d151593296e3ab41079fb8174b7bff4b541fadce623fbfe84c45b3f0fc965a48602735d2c9c9b9c46d1473273e4d20f61c09d4b5f4a29258d8c524af961c1abff938755d7a53f8f340512aff640a7259e924b2792700ad5981b4e1ecfe8349b5cca40743ed9b2abb57df6098957fbc218b492bd945c3d17127b5df662b10b7dcc5e47b00bfdcd5e485c390db61552af7f3e8da2d74ea3e8ffd4206fa8e8a8e53272a90e7d976015bdf465920462955fbfd78da3e84f7ca1df725784c8bb3d90ee6e5f3fe36868621a8c340d466e90caa3a0d30f0cfd963e2d27195e4a0b2efd70bbfd9365640b18454bacba300d8bd8737cb11eb164db863137be34c2f4975c5aa2255aa22f7ffe47c3bae6d978688f7d59d4e44f5c9d6ebc2fd44a5f387f745fb7b4161d41b0900cc5274596f4114e4bc893fa56db3c3eb6af9f904d87ecb5cf6a686eaf9bd91cfdd55e37170eab51f4ff4f9ef77eb52efd8ba7c1f9f59118c385c32eb455faf8b541dfe147f6dad79610f16e5f1fa996a7c47344ee5cfa4aa43cfd6ef5005e3c7dce4a76e9c75e7c200c1179c30a9241abb1e9d0df8fed6ba2eceba19290d4be20d29d0c756aa53a52f3b856513c9653cbd3772497816954ff8c8ff7730aac72f1f36515bca249f165264581552854f08a3e5902af2a1124f0aada148157f566885542ac52f9f93288552bffe4099748136c947073843b5f4ec1ab8a2305af2a2bbefca007bcaa2c3f97b02ac6cf973eac7af138446009210708774a1fdcf972be6c020a56c22ad32aeac497d983035e51567c99485855575327becc973cb8f209560eeefc2c86a5e15fd8186fb22fdeb3a6afd6fb19b67e66514fc3660000800d1b2e2e0108c0cb0b0c4c0d35d860c30d37c4c4e080432a2523333393430eaa1a2d317c1f0dcf6265a8d8953f599587614f8f626170b6c5a7a4bc66bbbfac56b2d8cfb0f269d8d2c71e9701823e0d0200002e16900d1b40412e2e4142010880d0d0cbcb10110c0c51510d351419d96083d1d10d371c358989698284030e484e52292749322ff361d327333f432487cfc146755303a78515c3f72a9b1a372d383706d6f755c73e0d1dabf34f4367c6b3e40c1bce4b9f867d1b6e97beb59f0d532efd186c8b0d655cfa35acca86352efd1cec8c0d5d2e7d191bd670e9a76c88c3a58f830d73b8f4636c28804bff061b720f2e7d1b6cc83fb8f46bb0214b71e9c3d890a7b8f45f6cc845b8f4036043171bf2122e7d1b36642a2e7d00d890abb8f429bbd0f76c6517fa26abb10bfd17d66317fa312c0abbd0a7c19ed885be0ccbc22ef459ecb30bfd15dbc22ef4552cc82ef44fd606bbd08761616266d8857e0b4bc32ef4397b835de8a7581c3a7ab00bfdcbf6a00076a15fb20cf0815de8a3ec0fec4259d3b4d2b6c3af1fc964ab412492057e4a869f1f7d5835c3cf8f3d60d566024e8253595c39114b2e712395608113d1cfa89414b42b72062b835d914f5734bba21ddde94617eb8997f5c4a28be5d5f3344c7ef2b1c71ec3361ee46bdb0ef95a2c52129168acf27ebe648255dd4fd9698f7936deabf3a4f3acacc8efeb8227445e2011e962b2155748625186511f325eec334d2bdd2c01df56ecf473735f2e33b9c9b999a76554d218656701be1d52a1438e9a574e944400df9e549c876d380d58a69bc0a8f931c4b0b2e2c245673ce3f9fc04b52ed68a7f1079e5f8c703bc97923bff0b83475997559a24ea54f7f3a592961942b6e449c8039ad3f34e271d0ff85cf032130fe8dc8c9b394a2e1ca2e33217cb5194e5a8f92b34de3e7b0c355e7c38430b241eabb00fe5933bc170e7cb2097f1960f4159745fb6dcc7e7c973d9aaf185b5e50b6b0c5fe87d5fe8d92f3cfd179e7cea7c75ea807e5384271eb15c262661d47cd6cd9d1fe30b9f3533c312be082729583d60296197a9d3e40e4171e74f1f9c6f9bd313cf894e34ca828a47c269e807777e58e7177bd8a5c7939ffd4dd26db9cce446e8c6e6f2d53e3369a66d07ea76ef460dcea2062f56831307dec47ebe4cc22a1eb04cd4798253d9cfbad352421361ce1d2965187b78c85e66eeeed1af7685be2c3a8037712730a44d0b940f5dbc6c49240dce593f6fe5a22dc05bdfc555a9ca09c68b16f4bdcaf78b3a40c90efaf225e581f20f8e0778bbef3ee5a3ce4e5c451d9d4b77ee7cde76285d8f6118866517a7d9ee46cd729add34ab6936d36c49b39866ab66a9662fcd4ecd4acdfb82d06c6b259898ae0ed12fc402babde2e5c0e3c97262d59c93851808ab11ba8438dcd97214cf9ff4fa92a761358b975ef33b6c5eac6772cd7639e5b28ccb352ecfc0dc6d3a642db4ec69485f1a5df9852d378896ebddcb7637eeb04be9bb7b592e89bb97dd84b67b59ada5ddcb668e93ddcb968e4af7b2d812ec5eb676917a2f4b9f5c4313c9bc9795917559bf41b04be96fb40ebf97eddbc22ea5a7f166295ae845462d93008983800fa54d0f1ffa131f1fba930324e0932df921e0fb1ebe938fefab3788f6402c70b90f531efb0cb3b22591685b0e0c5bc15e8903bcb42bd8772fb107aff729de83570691b2e53207f8624fa3e6d7eab9f842afc5275ba62ffc8fbfd69ddf25c1935f7a2c84a15521e4d5f8d6af5f9fd6a7545b0922fd88f3bc665778938fd92a87e89f2716cf0977823d2738616a6cfaf2d2fe5ae4720c44cc213b3a2211450956d0c9eed9176bf311bb7ddad8a4dbc993b6b9f2ebf555ab97dac8e2550c01bf48551c01bb481deaf52fe2b08b7c0f055e1873a394f2a8ee74c4e9238d24ac9516f1e4e51f43d08a24b832aae0ca08832bff1ae284b71c92b5d8ddcda403463d82de7248564e83f18b38280df6f71071b6f9f1349d1ab44083f19b85fd7025f0f8e327806b66a87d1b07624df75d0fde5784f7d7a6837fe6d7af70bfc271cfb97f40e687db0bf1abc405bc2f2203446451e3bd11436abccf8816df6d1f90f9fe3ec5950d72eb62f57f65fe2861fa16968822388b9a1b951ad3e701efbbaeebbaaeeb3acff33ccff39e033335de13e17d9ea3baebbaaeebbae7c04c4df779ddbd35b5c20d6e8003df382deb386df3ac2b71df6d734e6cde6a2592ac5d9c37d0b86cebba2de3322ee334ee061ca76d1b97711cc7655cc771d8778f715c86719f7dd87db66d9f71df611ab769b17effac5de42637e72ccd1297c9b6520a56719350064daed6c7ea7752d3ba5a2bf72db9dfb4f8cef96bf5aa5cc675da57aed6ceeb2ad675f531ef0bb1fadd2537f7d865da949393a5d20ccc567aaec465567657fdb4ba5dd7bbd6711997751a97691ae7eeeeeeeeeeeeee9a5f1bc76d767eb4f3332b3fe551b2aeebba162e4c1e9682e2a245670af23317dd130f0525eb56cbf4de47281f7615eefc36eaa24ea1689b0f94efbaa8cb361e282835b21aac9ee41139ddb464b5e6699acda17d276b3d11214ec12f404111a941d39b3e7ba1c94e99a22926c97477b7c7c4a7052fec224528b5fe9852acdf4c4525ebbce085f127feb04b8ae6751769d2a91613c9c1ffd3e9c7a77a444e37cf72502725fe701111a6106ad4fc262723a2141b7fd8a5e5799e77bd28046f2da98b782189559e664ad1ba8829c994644a327d88457631ad0891d7f440ba6bfa9e3f89f2b541d3a354c9db0ea60f05e5bb0f05e5e727fea07cff2098a3599ef9f9719f96ffccd0a5b8a68f1fdb7c98bef36115f3307df285c46b6ad5da7df7857cf4020549171515b10fabe89def48bea402b577e83ea1fbb8d0349bc3f4addb7df7194a37c12ef39b097ee939b55cb331c5d25b77f02b0176315dde5c48c4357d2e655eb0caf4debfb091519de6bd8a8ac9d47d88dd68ea5cbaee8174b7fbf84b9b0fda2d9f9fc9eaa198537ab1ed40dd2682a1d93642d244190cadb342ea35bde732eede3539cb71fce6a8c1268d8aabaec2e6cee9a4a3c050b833e5eb227699dfeec3aa8b55ec15c9f3a413913bbb5b27a23bbf8196485fe23e3ae898647a94e74e99be2417b65b487ae28f8d40d7ed84c02ef3a314fc12831c35bf95b4d7ad6efdf09f06e7922f5ef7e9d44af741e40d3bb5d27d5f13759dea96041a353fe2b0d1cf44418a3f39ad562b4bf181baee31e1c519c6225c1f282f7f3aa50105a1bc4c49f9c21f292f44bc51e87e7e57c1abeea78b1632dd725411ab4c3fbf8d3ae575ebf4844845b1f2859662e7f55264ba95e2a57ccaa77cf8291f823743b1eed3e0fcb2e0cdef074a10213ccdc61b9f74aa7e2bf5b59f2bf54bf125289ffbb8005bd8305909b00b5fa10add9a31a78924b5768c78474e3e51c99d30bc23c3981cf7f272db0704bbccb7f1c625ac2a7d3a609f10f1b2d1adb2088e9eccfdf4f2e40025edb77f6437abbbbbbbbbbbbbbbbbbbbbbbbb3f19dd378e9ab38bdce9742586ca09c68b1414172d4c5ec76d5a56c22e5b63cb88dd2c3f83c56d107f96ef1b97e9eaf1c890d4ddfd72bf323fc953ad33becac86ce9359bfd663522885cfa2cd53d1e6dc5ce3859156b9da72ef194dc89e444e343e7c29d4b1a35bf7adee9d44bfe0bfd87e5c35ef25f08deec64e3a5c1f2dbe6e3743abde4df78866da0202119d6778a346abe6415e53959e9b1dd397f165bafb4f152db3f2bb681e6abd83ed91eb24dd4e0fc17b68bda08c5f65193466a279dd44f9c88dbf88d3b6bceb7d677dc482f79c2f3c6e994fb0da30c78e8cf6ffb03108deaefee0fdb78e8250dfe384f2f694d4ae9b7f3300f4ae9773367f7757de1755d2c7dda4112279c48c243ffe9d427cd87742d72fbb3d825792d769992553ddcc32ff35b3c160ad333ed3354a45116bfc822144579ce7f00af6814318a28dcece93b805794890faca2f1f41bc02b2a85144db8f419c0aad2d35f002be1d25700abb0a78f00fa3db0ea7afa3cf08a0a09f56095f6f477f08a0ed1d7c1aaeee9e760205cfa385895f2f42ffd1b2f00025cfa34ac6af1f473585dfa33ac72f1f47190b9f4635885f2f46bb8e1d28761150c272f97be0bafa89324005cfa285ed124fa3578459fd0b7bcaa446cb0eaf4f44156a93cfd1656adb0d8d0b8f465f0aadad057e155bde1978903e3d24fe155c5a16fe25565b1b04ac6d33fb12ac6d347f15865cae92efd8d5735873ec6abaa437ff2aaee445e451d7e994f5f6395f7f42bab5835e3ed5389fade7c5049e5bb8cb57a1eaf64cb4d06199e7986199e99061a9e79b57a661a9a671680009e79000378660210e0996fdc78e67b9fb9a6e6990b508067c68123c733e7d0e19975d8e1997778661d3a761880470ff0c3be3c3cf38e6736c033f378e61efc023e0f8fb259c9d2b82cf69abdbeeb9eb329dfc272302c8acab3d8959721c3da19cf830da3ce8e4e0e0be7c6a6127992e404a9c9915111d190501090144c74681451dcb9d339f0e2f5e7ebc7514591e8ce135663cfd4697045fb207247fb7880577b6d2ea958bd589da761d7acd7c5f2b06b5e75ce79cd9ff90382ce83a93375ead461d49c296099cb07f4c19d4f9c9af068707d5e10e9dce9d4ca755d7f61acea9d4e60ec99e1c3b6d93e6c233a22cd26722145a0303ec1aaf93109af280eeae7538f6a94522ac3830ffe85e4323de4387135734e8e747328ce75b14a9fcfe573f9d4ea79992c728d07dbc3f2b006b06165ddf93bac0ebb830dabcd9daf83cd6171d802d81a7bed0d4b003b002b001b52a23b9fc6ae2c0d76062b830da91494098de2ce6fd00601800d250eee7c1b369449ee7c171b4a28eefc00d850f6e0ce7fb1a1fcc19d0f634329c59d5f830de51477be0d369445b8f36fb0a144c29d1f6343b9843b1f071b4a2aeefc940d651577be8c0da514eefc191bca2adcf939d8505a71e7ab6c28afb8f36bd8507221945ef8e6bf0da711d3037786e0ce70c8bfbc3fe3c31eeaf19e7a674e5c5dac9c3b7f8680571408680438acca3cc02b1a1404821b56d13082575448a80377fe9c3f35c02b3a8bb8130303af281151164f5875798157b4a8e80b49acd2b8c02b6a64848513567557f08a1e1d6de14e2b78459b34c9c29d2f9bb0aa0abca248f165225de1ce9747ac6af1f3a5142615ee7c6914f3c3f83438e28734f19b0687fc1f8da353cdfd386ed0441a1c1d230d8e3863a3052608343038886ec0e820f28186a6d584669ae02311181a1cddcd4b74f4b870f490b247a7a49415870e5ed2df4376e3e8d137626cb4045482e0858c648125420c11bfe31704100dfac7d0f142a912041bb747a77a30e2010207a3fc7909132388442e18481b0c68d0631a15637e28257dfa3fe4cfd0c48f699026e6c697f173af1f63661a74a671a5d378acfcf900d3a04fab80066362a6e01f81b8eaf757098217e343a7523264c55c8f6194c7c85311663203a12bbfd0c32efbe00858b88c34bd90714b0e76d0df46fc79e3a7f9f7bfb7340b14bc16427c900aa6626803317072032a4ca001199e385a02055c68e20338a889efc507e37bf14f4419b758e1853337c61db73f0d33ed70c2d19d5eccc707e37bf14f4f48b242a80ad9f439e50b56e3c8201e1bdc10e45a4c64f0022632d8a1b21fc508b76fbbbbdb6f54ff8d669658e42088d509ef081fa4a2209c20272a932382b00083243280c211474e180c47556052041eec10c1a13b60c26a8980650794c5bb310225d88142169000021f2041871e6ca0084b7660e0035624329fa0b17d52edd2ae2d878be74e458c5e35fbf0c4a53c1b31edb199c1eece784bc09014b434b0851230a901129e50c38d2a7ddbed0bb5d066ae993cccc0f5dead5502e55b58256ebe06e5031b75e796c323f2b45a19dc9eb78f426856ca6d086e7bd736ed0b33704b9f8c528252ca16af2f18d8b8cc048922ae77998908b0888206ee041b6072c410124bdc1697998cc047eb14054ef747ac3d2d9e2231b2faa6c1388405de6d8c1892840970a8b8d900163920a8999f110c348229b06200051f2b9ca0467e3fdc246e08227143f639e2863cc4ba21238de086f146045786e086b14786277052d0c4113a1cb8424df8577c410749fc180102079aa8e120126861062258c211aed0428d7f2107c5e009461f38c2e6092e78a1a6bf9a9d154891852c1c018b1c4419ec408a1c259490c4889a30ea0841eae9a10209269298414d185b37e20c1141178c38c112596c60051ee8610a249020410b8a88a0055f70c291245918c12249a8263e8ccb0cd919820c9c38d281a12cb4a0050556d0a1c212273028aa89546091051646c8c14d914d4dfc215c86a11045912f50d1039608aca889439cc082091ba19ea29e286aa28d23551401029f0f0425d5449f7ba3af2ca69452ca39a594524a29a594524a29a594524aeff4c48e37dda59c3edd5d4a97d2a57429dddda5113773b2e68c485adeacd8ac2576c03136c0b00d311d4304056877bedb7e7bb574ff0cebeedab5db62b2bb65cb96ddb56bcbeedab565dfe8d89d43ca8fc8cd955f1804f71017f3525684552c47edcf3c23bafd9d39c1fd72e9b29b8bb42e49498a1c422dfd44e3f8f77b3f61c3cccc92671fc529a3e43e62d93d8596b2dba8a7d0477d84a4032f4a969e26999b9b9bd9d9b9999d9d1be47effc2205a076d05b39c4e57a3781ebda897b05a72a1c72ab57ddd85aa80752093524a29b152a66dcc723a6919d7289e97953a79f910aee0d336bbc8af241f9332f386700553564a22b64f66399dae46f13caac91b63838d6acd8ae8f64a99558d59e5609227e5c6567871b2f466e688710c4385213a554f27fa4374eafa533cd5215ca084676666389e50939b04c1a8189f48729a2bdf691a945078d2079e3ec32eb289b8120042075e387365942f445ba002344c8057607c912fe5a936f12bdf064c4ca77856504a1aae9c4534d112af8669f08ad7cb4e5d50bbeea5b5c72a1fd885012d2fd4ee875c146de2f511e721c0423233403c80570a882fd75fd7cfc49957c00573fab93809f7dabc89615c4425cf6795df398518d8bce00557bc205ea19f5b9f6245b78d34181b68a8c128e3f6ba4abceedf59ce6ed653c2ab4f3f94add655fa53e9c3be1656bf26fa5aa841df6168a751bcc3909106dd993a913f611f62170e78582873a4ccf6f15d49a71c09a5a1f3dc185feae474aaf4f1e54e11565d1f5fb6805599f69905d295a2bc71be37184be2780b49a36efc65361f72a246b5a4bca91fc6aa8cebd3f8934a68721626857c7b29d4a93ab47d3f781aecb6e0f9f38dd208c58e74aaf6740a53523f4aa20683c848341487d825fea02d47d2a91ffe2defe9941256c98fef50b0aa04a4bbbe30722ea59106238f3ce2022fd4da880fe5841209c873c49f4822432ed3516054fc2bd42d785fb8f1878a882f91747cd92292ade851a85343db96c3bfd22fb9316c237ec4a741250df63418bf8b5c261ec1a8f8583579ae12695ca0ee548c5f28dde587f21312afff0dc7b08f17fb7ef8d30fa91c6a1996d4625f7b6eec14df5a6ba569d0a57ff51f98f98819897df3e1b57ae94b3d380b61cc752c6ecce2c60e548051f1e9c78006fd9b5ca9645776c8ec8b2c76892e6ec46416378cd7b19806b1a7ee58fdeaee37da81e8d4ca8e7a6718effbf083043a1523069617b3b8cd2d0d6af1b397ad4ead949ec539110ad99365afc50f79d546e20b8b55a58fcf1e63c4be5a3d2fb2b42fec1bb611a0cb611f673330a466935f2a62fb0c0ca9d95eda901557535cec23112ef6d9177609e8625f38a475b7e7eb3d6cdff698a51820729d3e6f09e09aada1b851fb7c5074f9dbfad020cb221fa2758d234992245192248992244aa080c289c911a73d3627ff46fb95dc929b9300bb649f4939d3329ea326d819caf3c3b8b8e1a8c92ad37b3fa4acbae768b2dd6217244243f466ae55ed42f199995dd7994cdf99be33d1ef505ea2bc44f99b19a854ac180a8b9829442303000004058315000030140a858382e16810c691b6d70314000e7c9e5264501e4ac430c9611432c8106308010000004000400446880300022e0327beee649b364cc30ac27550b78f6988d48537cfed3a9cf0e022304c6bc351d288346e6c29071d52190e9c7e2782b3f71602bc8b01cabad8b6df584a71537c98bb2aa863bc4295aec2a6e89b3d540299fc6a868a39bca219081d9c3de1b493dd84cecd65164a91c9a1b7226fe3dd9d58e5b383abb0a87448f6895713b0870b240448f258640598b64276e1d84e143199509e17ed292a0a59087aba5be6c8771c5b18ea2a1f011a86f38a4171caa970b2db391d34eaa0c1562158548201d8ea720a387bfab3916222ab3afe9e796b140a650a26209e528e0450ee44bb21fda011624a330794163e09a194af224626ddb5c04bac759d4c413289de27e19342454da831b98fa0c1396988a0b93f1935bc7c6a0147c8ee87beca9335cc778f832f857da994b1b507ec553dfe6aa8eb35e55b165f34f1adf059f2989c987c3661838fbf43c1c12800e1568c7170262da8a561aa36764319696c28cc1fc49a3ea6a174b8b50c5684c2a42567267ee80dfcfa3135ca690b2c16ccd149ab0e1f0bb1c0d4a645148ea58f03eaf0a234cf9502a06be3e152600a5d3a32f3dc249508cabf77541ade41527d8fea8ada010eecde0af6aa22953125e55321f488c3a1872606c06ca1d9067857f00b41114576742eac55cdf297eaeefd8effbf47e32fe60595ef976d94dcdd6d32160cc43647268678b49335ed4d47e412bd2a19df356b7c1b27dc93f893d143471acd8bd88836c4e2432db18af3c127b31d0856d5829cec93ca8c0725e46e84635f58ca5bdacfd14e30391486e1a72a4632cdfb1cda8921a36be97c6d52dc1f440b67836ed41377a301ffd856fed724cc07d13b6050898824ddfad12f608bead836365e7062dcc81576ce034aafc690aa017cd8bff817f10c7da514554552e4c34fdcc3ac9a402b8be46955f19db5c37d27892ed6ef7f6fc7158ba4594e028ea151239e3f7f46f340898788eb9ec517dfa6a4b03a03eabd71792a0957a107a65fb9dd09be53451496c6d8c7f7f219942cda8f5c9c6a6cfaaf91c49f03d43e82ccd1ec0ecd214f51ba94ecc473d7551feb002e1c3ba3533bdedaf012882893a9eb55bfb1c06d15ddbfceaf6263e948dc0f247a495c446e467e844ab8756425730c62c9d2db466f7bd58d21d79365ac363b91abbe37c2dcf3c4f8ea738031d1244fa2e80469606ac29fb0aead925436f1403ef58cea1eedc93358d00a1dec0359f23f09b9803477b3039333ac6618f1ee1e9c0612e16e4915b31e79dbb2fb83fee0284ccfed75f3c87d29bfe224b544ddaabcb03c5a443b43190f4aa9f1e02047e78bd68748f991857648d88fee5a1a6c5a002bcdd7eb33e66d957e8c5e18a97d73d74c4d07e27d6d4e4c20189fed7014617b8cc42e8c28750546d7a4baa32cac9ea68b1776ef020a68d5eac3b55df72e059abb007d46f38de722502c408afb6d5ed6231cebd033296f991de0226b1bf4db55e834a93ffbc064eab93261b007e68501e1e707b167b6a8313cc22d2de8ae7d12b81e410ac4b2b4bd6a2a6b86cde8b4c508f63c04a625c88d6199e35c82c374f8b9bb95691fd6519706cd15f3465b3e24ced41f2991e3632cac844822917beee8da9e6417f5f2823cfac24890aad7668a67dcb2f156cd982c8b9c0c5a628af59587507d58858d967528cc49bc04075fe000f25fecdcdf0252e647d590d695d965f1d68d61d793450f123a3fdd634e0a6aca1373a6bb927ef8b83e33819be0cb74458dd9125ba5db9fa095a36e40f54616c17d8a6cea50af7a7fb37b66756a10f05e45a5f59384787655330c1d6ed2e4f2364577a56c239ffdd4f89238b45e333694f8402b20bdc4927080ca8532b3a5d5a055a08428b01d45264bbaf4a4a597c84f7a607101ce109e3801bdba35e0948a5d6cd14d774b44c17159fb6b12e82fabb2f169c5e96de9696160141345652f498ff6d094e66a89109fd490499a95002d493a1898c769fb090d1c8a99c25c7f1c4cd4e7b607f5985ada5d0f44897025eaff1204e707ceeaf4d4066ff2ee0d42ee259a72c4ca819ea8d796e8c17a191dfc1a584ff74c626cfdca712450cee6d0cbe3015c62cc347a167a678a8fd137fc9b15fce0cee0dfb8bfac067ff66da037fbe9b42a850431387878c40e292df2f0e47835128bd9b69df5adfb7a4e411b69efc99b075ea789e5f8e8d410b3794c32d4e6a906553d3291e74e04efff2d862b971f09e8e76788cc9126c982098a2c8a703805dc49548c840db5329ee16475761cec4a99e247fc76f045acf6f20a8cb65ef271aba4975dbf0ee9d1beb8ea0f151783493409e434f8c0236918801ef984a7c7862b7ccf0fd4d9d876c1d108bba7670eeba58b1d30059299f82ff428158efa8f35be5732150b52f03fe2d8f9a3d0a2f3c9bb14513f48badd40530e84b427760ce7ac0f815e1073a3cc02ff20432f563d5a642aedb7ead15610a1e2119a8a84046209d5fa7bc50b2c6397007121c90304417fb625141ae96636ab2958bf0e56aecf82e9ee3de958aa4c6703c7cf0129babe9b2e85355ce8961b331bf86c714e2caac3ce4dab0c5c7f2416f3792f8613eaf77f0fd2fc8f7c0015be57e7743d8392dfd1cd615098f48fbb5a2cb76250ad613bfda22055d825acc2b817079eb1e0640371996f80e3dca43a8caf2e7cc470b5d385e64815f5b4368d8026f9401e91418219020a9116e4eb06fdd11e04c278cdcd2bacc61dc54da7a5507c814f645f6f8e5bf85a5f6115c448900272bbe49267891d692c118847ee77f68af99b8a59884e5840555eaafdf46d6f300ffdae85d0caae359161fe2e5c610d2ae208fc7a2ffac1d13898b60875b0219a3a63218005e19beb237db9018df615d618b101e34f08e8e2c642d1886e7cbbb074529f5a394b4b086a49c87bb349426cc726a9a09c430412e865e31deb28844cb44c70189a3dee928c14d7b13ea5f638f97538f2f4264015f50630bc074ee426599157c0899c0174108e40822c3a807268b6a506bf2083fa40c2f01f8ab740effceeb5029af22a24593bc5f0db65c711d5c6446a7ea244cf2d84a0b1077daa8633d732816c2b517ae243c0d1b8fe9ababfd925dfc17d1df7b0d80b80a3bc4214a20c955b09f1fa82ea09ce353b9a2a479e048ba616a6fef8ff6ed0496619e81656691ca6ef4004ff2153073ccfd891a24a08d3e0d7376333cfe8f229657b7fc4e287442c6da37456f840a9a8bf4a8bff107e441fbee6f1c9cf70e8c87ffe14475a9b01111744c6c65dfcb1fd134306c9a5638bc19ffb0c033cc3f9723ccd97734c76e9f1a3085881789f1ea0a15f9308809083f44c63dd1609fe0cd518b0e5b3b49cc6dbee9e1ace438d9b0718ce1c14eac7074ece4c875a753d07d65cd1dd4f04687c3343a18efbfdaee17cfbb8619c4eaf8b5c95da04a99913ee2f4e5bec880eb9938de6908ad7ba53dfcc4a69633bc72402520e73fb95300c5717ab5d4a436070a6b858bf14e97578a55665571f6872b1a1bc8e46c43e7073e142f1aed3dc45f0349fa6880d6651cc99d1017dc1192d3217b4e2b0cc97a35c9f505ca450f0f0af8c0086bad8f18291a4234d07809ed82f02bb7e3150c089baf806ec28ea37a6eb95d90160eac30186030f65f8f181932bd7a13662758a91f73c69e0c23d41a32bd01225bc5eeeaaf9c4f085050295fda51ed51522a92100f4d0745f5f5209f3ee0b8ffe327f40e6af81064946af24c5ae0a887aa1713083636b35dcbc207daac393424f18f17458608ca77db99a719a81b54982c7a379fc895ce15c74dfde7bd9a3730bdbbef91d59bf6fccf4cfdbf775e833763aee3b63277ecee3781bbae0d3dcf7fa80554f1f8453ef1061475241e5314a21c95c8be306465751f2e7c8c24252319f3c8643401d788b8ebb8accf17d54eee6503abd39f0d2e68cfb409d161a98941ce8a2f6e6b2041d4146c7dec8a3440aac9e436cc09fb0b143c88b4c1df8c84f20a066de8933de9db13c47c2eca51b6caa4e77487d69abaec818bfe464b8dcb5320eabe9becab4c063566682ad1277fb947b8a17cac1643d9f22b3a2ec694cd7fc7fce42dacd48a4d93b0e7e991d62854a040b5547115c22ec0c674cfb280d2e00aa7595d6573ed19d1a0043730d99237b094be58e669328f61eafb00a396a28340e7d21235d499336342b47edb0df208a918a145b24328e5b318c9507d34bbd8e1bdf3a557a8923b37f6356276b29578053e33429b0691b3f7532b882eaa59f8c73290de6df5ce685ccb731146000c0d4857f59e3e596e81c6bd1462501c90967c469123307ff3513caaf214e9ae3ce93379fc774dbe9b8d50e33a9a37972708afaa9ad75bf2de01b1c0f19cfbb3ea7ea0ae1de0a27f527b0748d5bf0f3deac05d687a289d2a723cb160d683a80d5f5d19160698f0fdbf4f7647d615691cd17e9a55659fbdd243384479f129d5ad2e26c4e3cf3800db51565e1299c36b5d7ddf33981e3f222150b667a002077ca33eb00a213c11889887b47a2e0ce30e8eeafc1b8775ca2af7d667daa024d3f79fae991eb3f9974fa2221d31ebfdc00bd17c85ed1a5e9f55a91ce27a258b1314c18a39e55690cba35e417a765230907e5cf187c3dab0c26be785af85210b79dfefa61be25886e4117a619cca4532b66ba51cbf0d57dfbfcbd7a9205dfb643a3c02ef92f31b26978b5bbde081a4f29dbd5bfb400172b9de358f1e832b9fc13576434764aaeb4106fd6b97c9b82f762d85060fda3509806232cba0f51d00ae5efc265462b932c0eabd25eed460aec876aa49a1c2c6baa53a7a3c68a4af9a89aead70735fc882aa0d210a738b797e99f51bd13d1d84d0444ff1e5c410e21355a87048f4010e33b62990582490fa2cfbe1d376983da7bd9dfec59402d05a8ed46528d08ef4cd5a223649c6af450aef5f3e3a90ce90934e3cc0ff99c4c08ba3f2a57a7cf44c7d872753840d4c92b422a5aa56864ca816f07a2be5f9e1eb8e7fccd6122372f80ebc98b0740b41278b1b397d863ec3f54c694873eb3bc1f30918bfd3491e02e5ada0d9dedf29a210727ab8b030db03613ad55bff5aec3715b7860325c275a5955e75c67a5f727d1522f264a198a9f547c1b1645cae1446b6783715339fa2d89b72c60aa871f265d813802e3e46a4dbaa3720ce3be43ebd5a446f870c31537fc8028916604bc058618e2229e2cc2487159eea739a77b5cfce3ce37a2155f603855b797a67bc2a95ef3f1820f4ee90d52627aab059f47b44a07ef9ff829002bfe9cbb78e81f073fea2f95cd9eca812c548047ffbe5c8c2e4f22690d4205b629a81d0a4053fd165ba7ad00fa525025fe4f29020a732ba7ee4b1a90798939ec0ac02aed742f5ce2cc5bf691dbb27863d7781e1203c48afc1ad77de62b332036770dffdd6efc52446709007b47a3b67feb607d561f64b352afd32b7cc0d988986034fc17c9f2fa44a767c4af1f942c87828a90c1b3b1c26f3204446c4e35e032e5183b1963387037fc28e2f1d07a1fa341f03d55fbe587639dab3c151f17916b828c68fd4a2d1f61930ab979da3f0a2f8016713fa1c3f09412de8547235bfd751ecea23dac48a571c5aa35928131e5ec70b37efb29fda49771fc530a5e9205e959c9c24473db6c72909e6165ae0c003e6e49e5746b3d7df48bd534ea26f7a35b587bc0bd6f59f16a27e8bbf949bfbceeddadd23cd037b496286ef47b0920c621218f96ee152213c15fd3e23539ab8ac395503edda52c275ce7b2ddce59c2b16c38dbedcbf63c549c27277c80668b4c6ca3028a1770aa0ccd78f4b3f7a1a69c6f72c99ac47f275e8ea156fb72542b06e6b8d9f918071ae5886ceb6ba3ebdfad7776a209f2d71ebe524e76f616427bfa63ebdd025919d4604aa60fc582294a4cc451716d3fc3d735434a4b32add8d9959f354e6f5d15f664f8476bb895d67cc6c4cdf228c872da1e995017407e42546c196630f666c852a68caf6f566dc3d6ab8859212493bebc06e4c9ae178b0cf0892dea9cf08dfa3e33ec4cd024eab4b2f55f407abc08059aa997c5a27b6e40b00e6a69905e597bce40b9fbad2dd2a086f67c06492c79ee34fbbfc6d4298ea51f87b26cdbaf2bc0d8949c015d8d0e90a398f1f96a8b302ab0610212b67bbc8fe80fbe73dc19e524e1113febd877ee434a563cf7ce1795126a7fe329b1593e2a0aeea76425e6adc2b6dd43136bffa77522268a6b1b4ae2d8bea29876cf50b6a7646064d5306edeba87d5a4e4e62cb5af923b17dab9aaa374604cb0b5f35e753377da370d6ec53067fdac6003696c7af57466b355dcf12c974f3ee23583de2bddaf80e95dc5533e7972e0054a7f3ae8709fc5d42cfb07294c80634a95a420328f111ac73e0fc7380237f62406f2e353897b258ea56d0210f3115f0134f19f81b683f3b8812d01b237408bce7d684f105b3e12a573a010cfa5e904c14b8a5922db39e94a2e3d165303e104e8d0e4d4ed9008526af99cd5bbc887401de1cbacf65c1ce37f2724cbd64d3f48e0eea05a54e563fbf9e299afa3f37b7d7e49ceaf5caf71ce0faa57721b3fa5de31ad17659f0ba533eac0878271d1cbc2a972100e9050a63ed4ad8f2e9cec37e60d02ed4280c8fe2d82747e7cc3914769200a2d6f22bb951e1787ce78bf5fdb85020acb4dcaab562ffbbb1a3f44253ecbcfad48666d81271b65200ba8b1301fb3307cbaacfbf10272cd8a6ee2d19b286596894b66958eb71c7f01d424295edbcb7e6c7fd63c5d7cd4826c55c116f6dd222312a2c1d7906703b38a56697ea4e7d4b54e0a99848e8684f00d698a3c14fbcdf2dd48fdcd813cd4f9bfaa7190ebaac10fbc2fc895e439a587dc782c027ab73e328a615dba5a634eb6b71d5e361e7f34bd2984b951edfe06141272042fc33b507af69869c40bdc3dedb73a2ec5d8866c1058abadf9edf7930364420e6442f5c92fc0d22b454915b90dc9d06a0139d988adb17a35596dd7759127b0f67a224740f68a3b90c5ab3caaca268207ce790fcdb0bc22d20adc9003dabc726e6ba272ee887b2b29047ca61bb62f7090f3638cc592ece1267b9364315bc69e579cc72d41b266f7afbe91b1694f1cf31924d6c473b3319dc9275f5d49f895ced0373b9009ac9dfd3fe3ce4b333f4f43f2fe77cb508ad92a7614b8f83efc0d8d0120b074a09d09f93ffa264c52275ae7a8ac5cd1d8c2a74dd74a3b92d85cb947aec043bd801ced870d239551fbef41f80ed3b38c70885e1f01e09b2d6e20a3f8445089f01db2e850dede439aef54a6d60e1f323f514530eb59c5aab112ab24d0294b68415ceba1aa9a959d5a89c8188c0b72e28aff0c8e35c65545e37f5cac64d6ece8789251dc5b99b7cf97f683deca8c1bcfd717f049a8fb736cd6c893d97013feffaeba38b1dd8288453f0c31c76aa37fcd6b891381b22da49f3d561c0a7a4c8b5ac1dc06d3f23aa5a62ea20836a83febd0303f481f651aefb6d3c1458227711cfae1ab3c83e19e4191bc2ecdc33f889acf0789151111fe368c91049e2de25e0b597dfc814380f653159299a7c7d06e198f54659a233a3bc52ac6af708aeb4444afd46138bf61325e4f59cf234d0e83a90670ec9d9fde48154971e17334efc10bc882e9f52b0a24a3f45a412090c8044d1f8d2cfae952333b9ff6c8af113b8452bb50b5a29b12d83565b074f1b16e6f4a948e48f8062a1ba244d00f22fdeb0c31071b9122af978c47dceaa8c091414ff2c9dfa8a00d7af618b96df1379f5a60743a559c9f47c37cfc774d2dbe1d192a512bafb41ec950346cd9a8959ad69c22d4b929cac824ecdee625c683b2934b5c420fc77bc17fb07ef556654634063de6c1aef97a3b1179ab584c9adae537f33a8998bd8997790a634e9ee00beb4e55941749342626dbde527448219767eb0ff2e790ea801e3c85ec5d7a11b3584cb703fb7767060d7d958923aec0e827a48037596a7c18faa10093b0fa1c0f2ce9f6bc026bea82dade16810bd81d99e1dde7fa555c2e4e9ab9794ced35f6d4f642fefbe0c6702f0be289c687f870f64a9cc4c79847e9eda3ed81b1bf0e596c8e54e67d5289a269ce7918e9100a9c5696adb2afd7a2631cf90851c0d8010eaac52ac05da0e152b2cba84ddd034fd7ad60096d8d6f2f60072c731889be64b4b8b652944dbd10bf18dc1013450f02992cf5e990a177d7a0c924c3201168a51a1005c992f2d6ac66c2e9965dad027be6b2294dc9669a39868155b2270c62a9f7ab9732ee7b8f6857cd6ab1fc3fcf6c16b9f2d5aaf488edd0a522fe8dc283847fc15e113588c8333ffc3821e4a68e5683223721b616e4b3f0764873f7cf8f9001f43efd93b2f5eeb7e3579dd0ff85aec6cc4d2d4db797167e8c8b41ae3453292e5cd219d8ff088edc0cc7d8f5f39d00476bbb5d0e9d347e7b64dbc6ba17399d87e317b9da391fb5bd8b48544f76075a88b48779035e03fbb0ced9cf111c657194f38c13574b235a88c03059aac79dae394971a2ad909ab336082403580054a851649b93955f75bec005dde6cbd17cd326e888cc8c69484cc6caf0d68a15c0f22ac380b20bfb0066c2e0057c1a2620a278657e4fe7ebda99728ea16975b13e7f51a7933bb067d21ec7e30b19263459487a84704298555613eb1432ae08cd8be605db580d2f14ce9670cc9ab10409c597c91e6630d25cfcf9116ad979351558c41f7fe8b06321780b5bbe7521b6d86f079a7e3dcb23c77445614288b5aba1cd2951f542cf08c0cdc4e56a0b4d0e228342d2e25ce1b1ec326a403621f50b42c15b9ce69900f40585e7ddd7d91c05674b032e0b93010e7fcafcdbb377d72cf2d452b704457c2c3fc5e525ab5d853ed8f68f59fe91eebfcaa1071f2aa13abf6005d607238c43f416cb155e0654f9d1f84f9df7cde101bfaa823e8413298156c00d0165e55fb29e753bf2ac5791961a4a2d2bb2a9bda9e8c741632d60a92e113c36e4821dd9fbd7dd54efb95c097c845394460626f3fb342b303e4e82ed83a4701a8b8fe92b24bb0bc4c6729ffa218a98bba5da54dca0bacf7a9a0e7a586ebc866447aafbe34a5d4552983a5cd37249d1eff7fe7af31f4464ad040d8f393027d5a24e2b600acae04cdfe2423aa89e2690088d107ad0f080d1919cbe9a117bfe01db3a0b73fe27a11d334548226679893be01036c47e38980d1027ec89143f5fe58df9b9a4ace29ab20e1c8495438c936c97802a16e73bfebbb93b1f354571343f223f8dc85e1f256ebb308eeae8c225c36022c25884e93e4f5bb66d96f437d1e5a3b3fd2b3f6b212e05dc948e83537e431e535e6d238e686a3916b123a9e9071a9de7d6a214b144cf52029301c474dd90c416b7888f5f17eddade927ac280bbd2f1bcafa4a6f1a6dca25da962382835a64f863b9860c7e51388f735a38d2d4df7c66a234f7b484598f2e68b3cba557364c7ff3cd5957091c3711a0d90b84c847fd3ba1854e9074d9d8ef4ef6ce14a9b2bd2e86d61cbcb3d69ca79fe04cd6324dab402ec6a9c1fa754791c52a757ed18a923df1bb1e1107813eb7a8f3047f0579bf81afd233c9bff1b0df0031708b992f3f9a790cbd8eb7d8d993ea87946776a61f51bb287e628eede1887743aef9de1f68c8c60eac6326fe89eca737dfd64b0b396ac2efc72edc0300f8d9d79a0b2f1a668f9f4a05cacf29fa37bccacbc365ae7dc0d4bc7b51928fc1155274dafb0784e68f31098304eb7df479a69a5f3cc4b6603fa9f76d9ac5cf4d900ac0c6a2b90e416175c255ba79f8acfa04af8a4978dc5011a936cf14cd73b86663d72380297c9569d55d791a2fb398b9b73e4c1305c7f4fd1a9a0a1cb0ef222c4676b6261b00b8a484eaa4804f32c41dd000f5e8ba2cc60979958380a983066195b3f9275d730b92515c5be8a6d53aff81ab9e06cd85328d4a13012411c8f29f98dc9d6c9dc3b3c15c2eced0733f070ea786d0352743e4e9dd218ca395c5c2dfe624b476c1b2af8b7bca28e4845fd21df3569a5aa19ced9dfaaca636c99121be95f2b6c94fca64133fa72feafc6226d0acd1229c967bcba01df25e3c1be0dc09addaf65da4e3a172900aac12e217109687e990a54797bc781116ab669a0422277885ba3f83e2ed4b019a56ba0302a519e76eb798fc407e2ac90449f27f2e7b396b17d85ec3c32122fa9b763619517160d8d8fbda4b99c774ed91547f1fab0c52a57ef8318d0b92a87eda59a8599e32c4c98d454398c99b9ed1971ec123401b77f91190b1a07368a1c45aaafc391ec3b8e0dc646be938b137f98047f4a08bfb84dfe28c427617c95bb769d5cf2164019d6e393decc785e48246c383cd684aacda51ab206aa32ca42e902ba334ea90b100a13742aebc638d3c9860619744fff4f57b86107088a70c14ce9c8d9759ebcf85e37b19549518a8ccd4d327310d26ef05ea6c6a8977ac8c833926cfffac8ebc36fb7993ca9a0a4e2e3e842afb4855e3324b7cc1912978b4ef21a04587ce29ba20f171043a51e6502bd01a94c6c863ee800262726f605275fa2e288321185f878500004921cc2de2c00cc6124d3c01dc07450fa4514d6a1c8bab2ff566ea16d812240110b03fa4520b884953ab053d7ad58b4eb89bf29f8588626d0ff19600b6c91e02a0f180b4294b66399a9164b50068542979198251a8a723ce5f28728a1b26053e01779085da8c6a8407a50b7c16ba3e22fa2347ea3198b2b5c2104356949ead84df56016c41ffe58420a44d5a73d75244d4675f71dd938b6290bc172620120a63320f2a8f8c57486131f15bf98ce70faa3e217b9349c8234cab4d9d64dee891ea093b941202148073e6f12ac3912b8ccbcf61dfe00d825479006579a69d046266f3489ce36eaf4a5418bfaacf8afd3cddb1c03261154d6a556a31ca25cf4df220c2e5107a8886b8150993369b7adb905ae810142d1d6dbc7e8fa4807eebf0c4115dcecf920f5d34a307b82cc0ceada426ca14ba7a19c7569113269a8efaec7cecc0504afe52ec2ecd7353085604908361ddc4ab6820dd0ba213073bc668f7339c39f3f67b21e3e98620c56877cbaa6e98886779275c428de7157ad3f714c905420c16c86381a550b96ff3cfa7b261c44b4d90016c8c9374b4f754c99e324549b21d42070c74c998b1163c3974ef796cf2eb5c22d8692db57d26d28322db8426d95a50ab188c81d90ded78e39b1817b7b702993d665630c4e66b68d5ae92e1837dd5c22fae850269edf0b5142292b78c012c5e2edcb5eaf4cf9391afad1d9191fddd0ed35fcd7db3fbe15dc3e5f06fe0c158b52748a06db428940a7f1a26a10bffbe7f71ad571d80c53566c0deec21b582f80012cdc9a5464e89ef301c21e5714a1835cea5e32de1c1c521188d6a1cb6a68b1b7cb8cd107ec6d886a88a686f215b960a450959099a1f90421505e80916047e206954b523b1e9adc7db549eaa14b6fdcb3dd19d419454ca09f6399a0d866d84b7b7f88d4019b2bdaead55e96d2bd66194c9653ee498564cba272c1e110173d44df94c01caae1e77b61e3f52b49a956fea11d8c33bd2ead8ec051b08756b7321d330c359765d8d3f164d00c53a0eeb5bef10a79bd76d93112807ddece63598b6abca032d98ee5f838fbb295833f06b8f6d72622aae1edb1da71e48e9da7046dedd8daa41040fd18ca14cd2db06bebc0aabd37fe056cf6c725a696f2252841b2bdec4110ae2820c0ad0f4ee097eb358218a545de2165153524da3ed9dde51a94407eaaea33dd22bac7f8427e8123f2f462ddfb682e614ee9d33f411a85102055bba0086307cc59c5a634c13ab99d49cb41809aa54c2271de1bad215a08b4e7c3a917e6783dff99771593c600065b7fefcd31907f8951f3c77cbb98addb914f7a6f4b10bd49774509a4b29ae028be8ce5d951b229421c63f90ce06ad364ccd99e74c2f6e3fd7e139d2ec330cca4455187ccb0329fef834176892ca94029c16fabbd68794b144d35e035eb75419bf292bbf7903d743616d59630697365054d8612258a0108b494a548d02133ae33a65e1f5dd5de2cb1625a5985b4d5026f1addc63e85f1d05bed9d8a8528a43aefb1cfc87e241b25582a3a0d21fbb5db05e28a92f727641ccf0481492878f60841e82b73759bb91f5404915311424e5e11118240aa20920513948a16f90aca73ed405b2e4b8680cc0c119b0a32a254c6004813ed66ffaa4894a5c7a263030d41f7f5b7488ce4732320fc733150d32741269af8748d6c8d2a589401c76f1b33ca0ce4454fb441a8d3725b6c202d94ae48fe9823759e26c956ffb96ab9aa5fb8ca10659729c65529ad7f65536245dfa79e08db0702985101790f780cf8778a8e3f16673ac8fa06a3fdaf6e33e456f0a7d204a090daa6ceccb4e05ecd1770eec1e422ab52a6d5fb1e3ce40cc477bc45188915434ec432850ff15328ac486a4a4f5c52c9d87d4b09f5e91fd037b3b599e53220228669235d9f976cb16b78e1573edf7443540b83cfc546bbfa759228fed66f49c1d3fea79f584a3fb303a31b32becd9acc00a9fd4c85047b0d3ec65fe6584a856e09231ea754dc9538ea51ba0a1d09c71ea7aad82d61e4d1b48ad50ebd7da3864b78bc699a38b6cdd68a375a3b0e45b96bec42dbff2a8573cd2cfa917a5b566100d4f60afed0c7ffa92df4279030cc36653350c19cf6f401547079e6841c54205604400d0fee4ed07bb614f11a93a47b2095cfb128bf43a97c8e45f91d4ae5732ccaef502a9f63517e8752795ce21e89fb1b3f7be0895a18896e91feef3108166e872404461d68b7fb5dedfcc9104c3240598b15d7757976ca471cb3f07adad8af20f2ccbee571416bffe82e94d90a05d4cd240c811626eeaad2e9ebae406a39868259ca13000925b4b9600b81e5091f6b173af87a6ef19d56c817993b7ddc742b1daadf679f043a8d88aa36c7c8e55f34db8cd08e6ae64a38420d39ef0866f0718a3dbd0a3f7c3d16af466a4a970446333f7f9931e60a4e5f7f50084c3ddd1c036102789c817f3022d706b579ea0e13b9b02f1b9810c92f6d8be22400c1ad5400513c60578e9af67137d5f31a6dae64e9722542338989423ba409d5c003822a10824f21b4793a259e061706ef5f7fa72d443a0a3593e052c14a5cd4d1ea028ce7142041c6297e6c0b709cb9846938491db9fc85aa69342ac9888da2b053113326beb238398f5d9ccab7068605155f820aa29198bfb4b56eae154271cc8ed6cd934b77f64d872fa0f530708a9841257063da2cb9203e1367dcb7632c035fe2dc7192b01c466704b0be9e792f6603d00a2a5860c1e10f8a1563ee5bf6636813abdae60067a103999d82f11c09c350cdc9c63660c1c352cd7d33a25978a680d4b38fe699e6d7b976cdde759a86bb2a8e58dc107dd1a84c4d2d777b79da645666481bc53eb53cdbb162789eb8198be25a0ed0d9401b282097a119af9b87e6cf4b99232ad6ecac88e138d0a1db06cada720258a66bbeea09e63c2617ea0cb6e80b8be489c25ab9d3dd31698ffb0e52fe1684b620ab27a45531248491acd2e8c48c721050c9d689a406f51ba0c209ea4068afbf2b80131260a3dfd727535510e5330e863f7ba36c0cbd36bf484366c9181e1ebb69d23e9390112cb363b7b1b36403bbf3af58fac13116c413afc1b4b8908648bf4ab1b58a88544e2350ee5618d0ba3fe2a00aba486220421a8cb5e4d0487664a2c31eb8ddbe1420987ce62c8b27e82264476f5645e045912afe146886dc75d02e944c47bda24078a369e69a88e6b635a41662a9ef33ed256b6e48a625a048e54364e6dbc2c46065ce52808d31524c1477b98150f7b3094297a72d479c609d53c33116a85485988c81094af2a97ada88ccbbde876cf82a945f01b5ae064b20a6d5da1f0057da00e6d134bb719a8035677b17e7022659695ada6da8765b42d05e9839f6a030bb0261f8404baf481262b3134bcd5085576a164fa40f72526e622338dbe94399a2c9e436a3d6b446381ebf9bcf8a549d84fc04f086f2785d0223991b8abb622b991395ef7a0cf018baedc0bdae81c019dd065cbcdcab4e1326d14ff04de27cd3f9d20d257184b8b1d7041905939120979a71d85b2c8b3ec2b72052760e4ba7db05131630dfcedddcece58b1865ce655cf037f73c956f5c9074a3582e068d92969631b18ed2007de9716d0066a7ca19c5a21d98a00ba4aaa375a4afac3eb2235d74ad752aa10db823b1a1d962236a74bc84e946faed0b31be1b6ad80fe973a51e8a22cc2969e7e9975745f36ed4c60b50df9b050ebaa20acddb13f7147715251559e11248d11a2e8d2a16e282edb20b062fd8a99ebb6c3cab77e392eae5778b9ca4785c82952c92d9535adbe17a80db03f121fd03b8ea62ada9c3dfdea8c59361b962f48d196242326d069587f1d44ce36f75b3f60cb778f54fd422a6e662985f8ca1d551611738b43c5fdca530a5a6a2f7a71846b94056b131ad7d073c8bd78d6311c920979d533e9ad88d1a8811425b3cb26ca9e57264a909602f8852ce0ff960c6953cfeda498d065d961a5dc974ca89305cff4618b66ee4b272adbdeb937869df75f569d4b36be23fc88875c1ce08aca76f08f44578226646d1a615a988659ca8a35009c3783206909adaaf4666df39c74df297399f620b1f24544a82075986e200b202c2a8fa0d771ede8b02e009f997299c6572451cc7c76dc8e61ffd7eddb9cfbdee18b35e2cd8fc75da5dc769c2e38bb29b404dd90a912d02bfbba8199b2bd86a5ab02c12f0ab509dca178d1271de5aa1ff8aea62b5917e36a94209742094aa446be3f6c437e928d612791592b3f0dc9006215c6343b792e87da90a11bb5a188a7f5f6a866a8a0a253797ff66d9f7d21eab85779458a9f910bb65df9c10f904658fe4a4363de02ea5486ffff3a29fe0dd68c375285d1a9fb5e42ba436bc5ba1acaad549863d863efe09d5fc538bfaeb8f5ba6517dc25cc2983247dffc98fe5ff855e8f9927cc1fb622e6382d338848c3be8380fb698e84817b7b0c448e27b51e4f26c231270a31b927924840cf933822c9c71400a078a1f3d27361f87675d8f901b82c7a27d5402db51dec5b974c881fea10c07389827784d615dd4d1a652ab72b3fea614ad73fb386bdac87f3af530e49f8598988e82d13de1818c44426f406e145738fddf7b6795f5575fe3a46b8af82bc604e858d893fa8f7bb67e1da98ce1829d97fd6e47a1b20fe44298b176d6378d8d603e5613a9d8a97545aa8c0ea20a846c1dd7bec311646bef04999039bd684efba2e6a62c52cbe6db807494f250521647898f5898b43abe9582c2980c5c8995b296a277d5bbd65371ef76d0a4e2932fdfa0248a59be1fd044c9064effe250dab644a721fbfb4e145c1d0a6e277d57f56e254de677625415d3ec1b88e4cbc92a6819f8c6936dcc60b3b5a54e4feff28d27f5a58b6c30c603446e8d997ceb6914ebf99f0aebb679d142c3ac3705d1d7a1daa625f5b075cd41dc0b2b5a07a99b3c769d29a67a6d5e244778ee364115ca126f6c8d81271a6ee8648c9a2b7e46ff42309b06211619b05e7baf0f23119d320aebd014df537684bc72b22d8ce256106e8814dd8b82ac1162e72673e64f5b5fd8eb64e4c91d395e0f145341725d9043862791fdc6342fa87334190b92e0e768ca9461302f2a59774bb98efa0d46d3c2a089ac192187904ead9b51b5f2f9e6485ba74f7259de2185b8f086fad310f1d00761f4e0b5e97030db612946419f767841eb81743ee9be1a5b64309acecb9ec72a140262f349c1486da2ad6f35c80426cbf8e5a550615a6415dddd2fb6c69209629f2fd67867b0a842d96fd6d011c5ba67ea6fa15ee6a8c89f780a6531ca2d7d2b7923ceef185b111a88b895af15b683c5cc3a311275c5dca15c93c48fcff3bb432709bef113167f3ba387c7c7b83db3b315ada2d8d30a47633de06eac8732cde03be3aae83e17b1912b1ce257ca47759a933338aaadfa1bab256aed6c5cbf5db4722bb6f56c0754e82a01c738fecd320d41aca982ba5197a55d9e7fe2d6d5edd3a1fe7a2daf5e6f5f62c36ea67455bb749731408c4b362a395a1c7ce10834dcbf3d2c41e8be1fa01443a5008e2e487b2cc7b0d391cb316664f976c09ab42821a073a19be78b48365e2194f59372a7a6c04df3bd3e14429f91657c953411b371571b0be3e722969872fe2c451d366d12aa0373a406205d7a8e698dda7cd08da129237962c4d043ea4d7a45735f7af49e37bf216a3d9e6525e76def03b814bb68115c287ab5facc66b27897e635169f72d014e5174c640f29a2a78388a6495b20065dfa2cec3f44c238ab3dcd70c1c092614dd6a229badd565ba130daa25a88122329119a98ec0a882c34ef5424835ad8e206468c944a38103a083866dbb15fbb76181ea48d52b8178aa12f256a5f401cb32fb11599da60de5c31ddfb9c7b93f4279a2f03dd71566c448f85a8dc82933417dab4ccac6d7bc0a12274b52a6ebc7fe1ba276e5fb3fefe86c58a47c0986bdcd2f62747f9f84246d9d89bfc25e31f67908d2bab4f9d096cae9846bb07ad8467ac72aa952fb3fc7a052f7473756c84e3b7b79840806e75cc3e5c2049bc7714b7b3aeeddeed4f50149108493fd2f30cbdf3c16f0a73e090f3f1ea9144ff156d88aaa54254ac098106df6baab15526ef6f2c58d5e662cf000592fbf6ee9da9992f52d8690c09d9a5141a843aef0ff0245163733df11a92374837e5320afb33ab34ee4f02e7b0521a21bce1fa4ede5a9c16e7d910140833d7fbd19f96417b008c9cb9fc765d4544a9e4cba557233d88ebd4d44e90e52989da51e850937172bc9d2f5bd4a273007015957bda51fc8293a310bc003cbee5ddf8e68b23094a39ea2e38f0561a8d185b8722be4078a19579dd73f4dc8a82892acf3673ef1adb68a3b98b391e2458f1a63ee24acbb2e65ff458fb46d7d7f3636b6ffc3877c1c052595b17b9acb2c573cc9c9e263929c67aab426718f6df687ddea31755da529aabd654aedefbe2f8ff71d05959bef3afc55cf229a99642859490b1e046f8cc630c77f1509e092824820d79ca3eab7f979be0c6b98511618741cc010d9641ae281767a3d08349787fef1b8f461a3581227a2c18e137b10fb8f1c9a68768d98eb9f0ea172dda218670b80dfca6083e023ea98bed4b7d94177d68c57236c87d2e0c94fde982bd8c6502df6bf601ac4b9bb459c1443512b412e7fd188716773c8d711cadd7143f1c84aa548a57a53d593e2660839e3fe9caf0de2ff5054ff954931d99aa4a88d197175c8aa736b013f69a6816c234d328e07a2c0d50f558c0dd2b82e0ab674a190d8274164a636f94d276018797ade28934f6df23bb53ab16b67b6dcbc66b7768849891e674a577df45c8a13c7aeb4329c1579b0f96a239b3eba5ca363f69db9fbe7ed371df43eaba004ff251fefa6fbcf91f1a4fcc2b82b5c997d97c9cad5ef4e3fe1f933df0b548dc277f8188be6eaed2dc5fe21f083fd89cb6c5a031a09b0487c05d7001380462f7363f053dad66ff3281bee4d307b7612853b76306540be0ad5221de26f288750e71329cfec8484514f66febb1eeb4cd39467a61332045f9b2b8fa490fe54194e27cc854793138cb602259f58bed25bd9b23570ca2d27bef074b78360c8c33fb6fcc3a47cf8d2e33170c2f1aa08394f704b9b9cb44710c6fec9c377ae643b74efccc8b644bfcd5d07fc8f964fabff6a642babe6e22d8fa3c1e9abfbdc3bf433050d5fbb49955fefc82338dd16b68b2d48ac73cbb97747bde9d2234bd7d5948a4487a0233353f1d97c794bc85324aa247085163a0ad8e2018df7bdb0f8bff05ceada072fa856996d7b03b2861c023adbdd9b39e93add9e4b9b9fa066a2fbeaee6ce13c7ef89b5737b83c8b8d9c3ab49e6d40461c435aa4670ca79a3b908c02e6004d3e72d1a29abc7033b3fd7649643b7910175f8cea2022174dc8fef5457a2a77abbd5718d8c506233e9f08da77ab897331d2fe4d924743adcacbc133093204dc6243474f5702b4b12661658480746aa45b1091bf1a447612a8306c6a6eba84d7e15819850ddfc0d738e6a4938b74c2a29119453e6d8f16137b4f355854e907fb40e9447f68d0b103ad065a7b6a2e967d65bac08889f94e3f4c6b168c7066484d03b9e3a4bdb616d5316e2d46c905da8d8db48b4342568c904f955d0b798e811f77a1b7bdb5252905497c9a33bba6ed62180b01e54e189238b2da4d8f5a6dc757487ead67da6ab8d5c9b5bbbc3b7d92ed34795f1f7979962c8fd510afef2d5e7f1021ba89c0a46e0888b337e0b478beeb955cb182f0518072a47c33c5e166a167cbea422899655ae76dc3871d064fc71a3e5babea81aee04a8c1abe3b701442175e30b35e9416c71d52d97c92736d46c17c7356375de6ce510c305833fae6a846a4a599ec828d7ef4ce4af0e3f96ff53ef1bd166d5607a905ece6b36a175afcdd82cb46dcd2c1de0593defd272a8ae5b3f68afd160b24f8616d02b5b21322a66c4a9633e73d702a019c3f1c6eadf72e166127769cc10d6e99a547a5db23cc45f1a1956089b4f78bf32c8e69cafd2861e61451bdd8dadf978bfc174c14001d725aebbdcef26d562b8569f8a6d5b3be68b557ec66cbde88a2222ef5dc7177da4a1cdd70ba6c1212111829cdf66bc35562fa30b8c3db964cbe42490ef4d01e4be288c573b0c98b7583c980bfc4a35bbe3bd169501b44e0633640c20e79a2f75cc9763bd6eb1c1a544ab41968e7752662370aa3f83846c92dd6540c848f9169bd0b635e7598e520ad78fc28b5311c974b2cf109631834f588b9c488b009d731cfda056594e20d9803ef7bd4a828359c11c6ba64d121d6ca2f88f5bacde207eb03385dbb3872752382f5c8b2f8fa50cd8f7f59e6d10fd34dbca4e491d43de82fa8ee3a6252eb04fff8720eb41c5cacab7db5830857e8c4f209ecf51a5fbf3eb4bf3d7f9ece46f74e1945100c9c61078ef2c2346469596616182c90ce19d3b7ea3e10bd0fc2bc281a451194e162eccccf4bf04337c98c09043c32c85e2e014731515b49214ee0b254a40f1d73b87c59237c47e906b4097b10df6d5f2cda75ca3fbd1d32e798a13fc148293305739f633c32dc453c0395e7bb416ed08cfbfde0dfa04295439a0a0086a51e2dfc2e2e3010029b357a25c604df4283015fefe02524b1d46cf7028b351ed407997919b9c164d229599901f41e8b360488bbd377fe6de4ab3e18afa182809c3ea552f3e552598a46fb08a3bd3f4747b9273e2ada3440a60cacb1cd02618ad058213478144ac5e0e2d4182a47ba38aca4eb0fa05db595a3c75a9e6163057adc6c391a73997d68d3a14398d0581a42594fe70dfcc7134928c377d339086a20e0a3a626315466fc6a1db39182dd4ba567dc54af73a7083d07d4243a13dc12b10fa6e319f39951e6b2a0ac8783e0289053c1772c6983c13b1d7ce0d5bd4cbfdf36a63118724ec601ba455b929d4374b12adffef00297997164e5a952e384f1dcfa83d797a750b8184f713c98410b1252916f93398224d45fda1cebee9566f7552c2114a0200e855482759818e7fee34360fcd4a2abfb349ae483863a5021071dedf0ca6419cc8957e019f84d611907809c46b176e2b479743418f34f16f4d80c9654891192e6525cc0334fe9d4f2c68c210f1e252e6d946e9bb75672ac34c04ff7faacbd188ca92ede9d6cbe7594dbe7579cc109fe35248df394a6a619e395483888ba5acbd055a746bcf1ddc463cc82c8816b5713a9b63ccc6843b739fe3181f9e347c4d330aeebbe8cf3b99560210ee38be96adf3d72cb27b2dcd6e645c606549b0971eb21a22c7e15cc383f0a801732a9f53e1f54210cb42d6453f69c16dff48ac63f532585050228d4b1087efb650021166684fa3a747c3f320d89738b6e98dfd60dc7f51cc2c10f44d8f7e43e4a0a3c06b0bb761d7812ba988174807074970089475478ca32d3675fb8701e23cddd4f1416d3a73f5330c1ea2fc6f02dad57f13dc35acde97fbe66d10f998f95bbf90cca0cf153564b19d96d0a6a68c66699ca9664be032bc0ca3bfcc6628b46bf433590d3e98ab811702791352898af934b0c732068a88eced5161f5d4c5708623842217613678f180f1a1bab93c26255f60575f4c4e456c50f8462ff8341e24f5c17d3bbcf25ab2a330e2c0d4e6f15207b9f3126267637058092224d28ec89b7af889f9ded19ef65b426d9c50b868407ebb828b71ae730d8b61e621b07c647c504d5bdd1f2a3ee06ccfc515a7bd122ec404191826bc9b3cb68b169ee1a751109f62c6857a423017162d7d7294b92bd265a8026f9246ec59342e75b26f1165850c433ce5333cd06ba78ec971166cf86c826dc35b541d1710b4fbacc037eed4d59ac32bdf323f6a869c505bc78a5b46215b4a86c9b42f3e646982dc01acab9c515e110ecfcb417d5dec7ad5938600155bc704947a897cff2b5b7729e641d44fdda1c9e2de4a0e4b921604789fede0daa44c49dd230f9296af1ebad445f61009699a95a80057a1ecda6df20baf756172bee380ee55ead2cec5c5a2c7172b526e838e3b2f2abf46e2f62276bc91ec09fef1fa27974aa2b5a4f3c8a05aace61c3fead7ccd22413dbdcad265fb58bf7e97cae4b68f4d536ef9967c9092c4170d76c5fd231332294182c74c27858e47aeb2bfd7094709277c733e888394b247c6541d5e8459584174431f17a10221a5a11972ae6a603d298edde2a03058b9a2bb64f5cb8d141d194cf39388238a57346df47e333ecb8d9fce9732ea93ec8ee0030c1ed988f85917ca3e814b43ca9152761c94426387ae635563b9185808ac1a30921555d08b24c3a4d192de438648dd18d926fc55b923d4c5fd59792656f24daa360657a9b04d14f75bfc5aab2941653d8a6c7cea52ed89c9b61812762be36431776f614daf0c2d3330b054225991d0df9eb5a13703be36a8d2a6b05a533d3308d0bce3044e9ea3c1cede75c844ea83042f107feac3c6a91071a836eb921286be0beeafee640531015fe7b62a879a1a709df6a1fb4b57beeecc68a4801f30c28c322766b61db1cf4911df3866c88dd0cc964f08ee2b8cdeb1a01906dfd235070de9dd2e7c2eea06cdcc10bc52cfa59ea3d56ad2fc498317a4c9776292b4c4794e3b8d8b9e1b41af039e1357b1dbe4c8bea86df862f8c6a0576a18c01a4c4f1e204166f57780029d7c0f8a7e894e3ee8689fcd32c4b5832a559f5982db895a89040272f0b60306d800d37860f2edf3a51e43955cd09b2f8df0f22877b71f950f5ed34d6e62994f6f01d4c8a505d455528dfa4be626ac3203a6e4614fe1d6c8ac96dc4412d111346198481d8c0a60dc89c1a68aa1a02f2d7da0d69c0f1013768707f6d82f5e811514163705c3f0ae3ca116dc722feb089b380af2147ebb660223b3508702b2dd386acf725f541483e503985557c4a69f3914fc1b0a25d5d6202cf55d38d9526bc04cdab06c37196c205f2dc2c53852d10664e1a6c0f7d37178aa573fcbc403d6f73796bce43e33868ffd7bd444b831df53a3de078103838358891d8a087ed73c3d3a6983550a2098aa0d511157cf3e86f478375ec81a547b32b6928de44e91e8d2f3417a68cb20c5bf4c0891cc512ca2e8959ac6d76e94fd4b52319fcc862bd390e137838eaf299927841cd315197bb0119fe4b6062e360ff4e221555f66a40449c49a6f0abca002c7aa0f31b4d015580d0be824673a108721802d6df9b156f1cbb1f4ee705b2ac160d41dc97189acbba70b168dcf759f7b291ee72fa55042b1ed9cdb9a3af5e3e00611aecc237d8029b30fd6092b43f08c7e4e1ff432f11674a115220ebabe9174aa9124d8c805d842b66538980c400e285eb7e371ae811344a0dd12494012146594d3c38f06609882d0985c488ab18555e06991d9a6f77d220dd1cd8bc421817905859cee5c3b9fb617d38d42f04852d2837d42f8c34a9831181c6a951f6bd1e0311899e7e73f9e5ca44339df8970bc6052f74145f5c616a1813510f72e2a517289d1eeae17f47c969a02b114ff3206bace9ed6d55cf07207c4668ba3da18bf5702c63d003c494065f5da6e2224a4633eed4e448d838bdea68c87144e2519926466bb448f4ccd6cbd85ec2cdaf919dca4dc925613b4f4ce55e64ac45523293b533f59528bebf6ed792810445dffbe8d6fa7595ca4509257bb3621d74eb2f4dc2b7a26f7e61cd414a2eeffd1df9d6652e2e26ad574db600739569f4c2a99f4dc7d01755cd9d4089c288bd9e91f38863960b13fbf995a1b7891121f771254ecf6a984460b0b6d0bfa72af7c8b37603541ad988f6bfa0f81972d115cda037da8abc7cc517e30db3697dd5d08318ecf7ddc55fd553e8c20847077442f7ed9b38593f6188283557142748b3f349d10f3fbbbc579f36460b06e73624dd92813ecf889f4d9cf256e30f0827a57310be7cf01e7018ef1cd14dcf0994288c7d29f400fb83e6c1955f7d54e52c837d47cd1808cd4184bb43e3526d6afb8cda5f768845c0a2885b3b823140c7b3adbf7d98229a4a3d8a8eb074628ff81407b152c0d208475b2ac750cc2814f4d05e1be906437709643909145a25a82003b8b9266eb4e8022d91ae538a3feafee18989b63ca8da1120765b7a61ce21cfc76c2bbe8901603708ccfb18a94f603afdd7cc995388281ff50993f8105b60b213653d44182347b6e421221f74062c35d4aab6130b86168ad47bbf29905a6f21584e604015b6e4088072ef786ea464552b4a74ea5e2c91fa9c12690e739c53739f6f10ddf0e35f0bf2fb6d219ba7b12c84cd165762fb9158d749527c672da150f40268423078eed02f818402b689f30d18642a9d6ed4d4be77f09b5237124c1029fb3065ae15a5ce44aaf3d300511a49a7603d76f283ffd5cde8697ebb1f42e6b3086eaa176a6b5a31859f89f1e43ac27f84fe01af895c129ffafd496581140a49b3c9a7cd37f829d7b03bfe4e84d88692a6b7187c88f6cdd81656963c1a4378f94951297d168dc81a1d74b6a54c8c29ae6c8c20dd380cd76af7657da2626824bcbeaad9a55c8aa2cbf864e18d7e69fb455f9b1f482a3828b0620f87eb9dff42979208bb93916a2e09b3e9e50d0498e40f37d522a1842ad9b0b2476c5aae64b929e0bd2f0403e9d944eb9cb1b50cc17ab643c1430d30aa94c8d96e481b03ec0a51d27079102c089992a02696df7a6e4f39a38eb5fe71a01c966ca9fd319ac103ecff038ad4ee905a3090ba4a07aa71dc3a36d3de05587ba84af8c474b9f4df8215fe3ca7f64eed95bce2059eb767e5f2a7e319bdacbae1012a74ae4128c0daaa7ef37840816b452ff581b9ba019819e1bd3adc25e2fbff9290bdf7de724b29539229d108c7083f09ffa34798c84464a249ebd13e593542a4887cc90ab0d86bcf4404998bbdf6da6584e3be47fb70efde23f5370f6056ea6604ff1ffe937a1a2f1a793d90e8a0a8a0814a1a444499792a3e2ccdfb483dcd77844aa7c0d4077e0398c1a6befe865c87ea0054802a64b8028815c020424bd1d10d58bc94012649142599c77df5b68f21f743b69b9d20db0b57370cc3484290dbbfb517ee5c2ecaf6b2d7e44baf8414ae9679f229878393f21b425b48945c67d96c0110d9534f7bec69ba303aba3cecb52f2c22bfbdedc6ef464787dc60e4fe467ed1955a58e40ed92ef6d10bbb9b693afae3f84687fc7ef97d357f252f1a1d69d06ffae5edc7fa690f16887f10ff1e3f3c1f3d7e80e14fc488fff438c7b79e3142e31cbe78b095fecd9c3c45939191910a2cbe373e095492badc18a7a4aaf838f19fc98d4c4234eddc4829a5d6c6c83c21373333ab5a277e8c31aa1a8cf189e2af809a7e9901989ac2314626ddeeb24a183bb91c1ddc257e7a5db672386cddb69927d65fc3b22b1c0e262e4b09c65ec996b24c6699771633f9b13b7729a937f51f6a6ff931f384a8a63b899053ce5495cbfd190bd6bfef86bdd06ace5df5b48f048a1d857a629fd12925dbd33a316bd9b0e7c69b10fa82c03cfc7de36daee8aa6a8854c407e3dbf8aab88d805fd352c4c657c5e74ac6fddb6166ee89537ea1bbfba5b2acd3d33edefe61ff4e833dab06e3f7f44e833dfdf185f8d7b30a776eefac7ae2f3d0c11de3dca1b9590bad73cc6839beaa04da7cef6eef6e4e87f82a28ba91b048b840a1a1872a963082052f9ed8c24403521551beb493efeeee18638c6162c7cb1c142ff7f7fda21e5cb0a2060e5f24ada1820c9a9b2f262002ae8e8daf8a01f7650e629ff8cc7ca78a6b6c793b8d1736ccb9eeed5fb5f1551d680ae2488715b48044464c038caf8acf3503523298f353be8a7de66b52cae9d9f994e77c21b2ce489568dc63776e8ccd3bdfcc086cffecb0e2ce1d6acb158ab85915d7d884555d87a99277d0b908b32a8b5de7ddb3ae1391b49bf839cdfcfce0ea0429a3472e9ec5cececebc41fb47d30fdab49b8891272246e6d0bfb6b392d32736ebcffeebe7bcbe3f5eff393fd4ee3bcce3afd97cb1d90d771840e4e949f53d2ebd8100f6da0781faec3af3676eb873773868be3f0fff94f0b41389308ffff6c4a240c547f6f551d01e7b14321c2c0a541a85fad9cbbf51f1c5f9a23b93ecabfc8918f962fd47a89fddcccf01d86bef037bedfbf3513fbbbcbf874f9f3e7772f4b8fd853d6ed31e77c86a7a526a8f079f8ce211112348b3b91dae07bd4d76ff177bdd70bbed6997e7d90098d8a75f78d139db05ecafc54eafa460fffe836db5566b57f4e55f177dfaf2fd4aea9b6f76631efae176e7a5dc8e9a2bbb9bdb2184e6886bcc9b1c7ce7f785f44f884557be7b52b0ad75b8bd6e0d761943fd44fd2ba0a6eb8b28a3ec52afd02ec7c1c1e978110ddd581aba801a742998759c46a9b29f20eb78335c5930366a72c3e1a07eff0ef8670298eddeb91dac45767bd5bf421ddd1075742f20d50bc24b744b2262044810777720cce34f2cf6598b8b7f5df487acb0b7fe837d43f55affa92c690448904c06ad531bbb7be49ac4cd8b4c1aec8814b7f819697029668955e21529344fc47f68b6d50dedede13afdb6e929beffd8bceb08e17efbf8e14ac886c0ede07e1bb2ba1c181bef9600cb4c4364b9fe33af4994cd972a5e2e33554172c3588569882e3756f11f0ebe3f36d99a88c4b469336d2e04f99c7783faed6f76a4f80b91a71b07d07ccd8f40f335df08dddb0c59dd90034577e6fd69bcce7bd789dfc3db675e9bf9eb7b5c9979a819ef86fbed67fef26eb8ec539ead799a8740cdc7ae833dcd078194b7fd009858aa7d52687ec88ae68b55387bbbbffbadca36aa08ad5f26f9fe87c8eaffabb6171b2d2c07a1ae7c7fd0316fa9497aab9b79d2c8888579cda21e852189c51c8e1e2a335a7f89180112447ad1da5a1f0dae68c0b02173f1f1e33341de21ab4be9ceb4d6da7cb1f286d67210ea165dfa4d828f5a577ef5b842fac3d5cd3ef310fa8b2f7fc8877a75a9aa935eb536d8bffe44fe2b7f207faab4a5e0c61761d3c276047ab08625206c36f19fa46f004bec3c6210b4ae33771aaccf49d9c0b021081ab9f2a7d31528c0d0254adcf99ea47faea52b1c149dacb4a674695a72264f406140f1045db2c4394de99265e9e9295cdda555cf92ff704cb82759b8284ddc942e565a4c382d3d7148e1ea2ead7abcdd818678fca80063e126f6329d588c4bb07d96aa1a34744a9a419924a6c9458319a60d33db7fea7bcc3aaabcc241fdd7cf9f324825661622b8f3db4bff5c473de79cb3c7dc7989b913e95a423d21c39ddc922c3824e6994fbd2b65949aa09698677e35e3a23d5f4c9331495b19252455eee492dc399b6e98212ddd49bfad15859d619e4873e34f0ddcfef91d9d1d1516851bb8f6ca1b29ed13d8a3d455ba3b9b7e4b9529b46091b1bb3b85748571266c713888dd639494be7f3d423df49d4e4a29fdc2e909793ddd406efc1e20a11e21a12e43cdc547777bf7dc25b6f0efd9f4fdb5cfe9df208acfdf71c823e2e72f6c6ee62fbc3ca2a11b0db6ff8da166bfdc3f21b03bc810a418a37b777bb3b3b3bb777b777b37d9c8008d73e25ca272f9b380211e4088b912c791986eb85d4f53b0b856a46cd9f2630731e6ca7fa629536e9354b9671bbc64b7831bfcbefd59ffd9b1fe1359f255d82567156df3e77ab0bd85bd0108c87f72564240434042434043404343404240424043cc4043dc03fe0ed0ce90d0ce8d1d0602020202a396d8f1d9022c637d1eaa2f3f66666666668e6c79604173368bf0197d90c0e507093e48e042824aa55291e0e307971f3e48f041428f1b424446b2708948da47c624478a70e9ae0b452312c6fc884640c68c29e2838b4ac5854b479b8eb182e58228da30b69fb91cb5d6ea54e88690c418935262f59a4008010dd55c66aa5266aef13b40437288e85aba6e10d1212222a2a11b4b378688a61c22126a051982b4d4dde0e5d633cba1a5252620b45cc94bd711b2ae2ea11bf39a938847bdc183078d92e8060fe93778cc6f0808cb0d1e5f887a7cf9520120207923fbc80639ca792713104c8ce5898eb13cc416d823140328ebc175fd25a763b4661a97ebd3b0d8f81abde10d1561638a63a36813713bb810e8671beca25e18a7a3af90c7e19e9c4e25d30da219022b2f4f5e14b5a4b5b7d3ab66da86da52290e87dd543bcc926eb607fc71a7c42a96d56c126d391bf7ef77667b9028daf01f9a432bb0339a697fb5d7382fde0bbb15d3b48d63a3b8ecd3be2dc370540df6bbcf0461e9d36ca8e7df8936fcf9f2db8ef973c09487f286b4286c7c0d9b0c562cf440e64506eb57105cfa91be86716c14f67125923728f5a9d16cf485da87d63cdd967ce88647345bb05bcd26d43ef4f26b12c5cc23256fcd11a1b22b25e6425b217109e8721499548ef1061cae8d2f545231bfceb7364c71e7b3185325a5f51c67cb0d73eedf70a7dee0af2ac1f51ad0b8de648aeb8fe5faea87596d956ed115a91429e6cb5f3f0bd0c0840f388879e2c14a95168cd1c39195336050b484530bba18634913564851f4448c2790c0800b1334a145259b5c5903105a54f0850d41202d5c6f261aa010e0c9b1c8c8c484891b3f3e18dfaa74d0e64b6ec714d2718ddb947e0ebef41b00135b64defefa63ffe42bff068d73c2cee8d6c9dccc87bf3199bbc586a49615170d92485d1d58050613863483956022f807950dbc84ab08fca74a32de443af90f45f2a3277706091b26b54fbcf5270e6c8327943b5533bb9e8392b44e95485aa7b2c03cf5c301d8902af007f56794362d1b6ff8cf6074aacce2da9ed8eb3b42857e47da891e9678615d9fe527604862f56bda26376d2608ee865fbd34c82c1befc6077d9bb7f98e80e08445bf9f1f7aeb56faf4c63ff4a65b7f7ea177b9f5afef481401194eacd4a062a1021615ec8b581a175947580a1c56b003eb480a9a161695d4a740bd18b1a86020386185aa896566699f1ad6a90fe54369c6ad328c6bebcf28f632616522a9498098cc272c70f7a11cc1ad9204b786d2c9ad6fbfb049f2879a53c286d228ec2e46dd67bfa86256e470f460d7b9c93ef42c5a183bbf7e8d1207cd26ed53f395e6ebcb2cf8471a4925637a32d13f3f7c3e691517bbe5569e58a6953aa354596622b9f5b96712cf9d98a7be34f21f07e36494dc5a3ffb1cd02cfa7916d7a93fd4d3435dac0636942d4c8c0d3d0b15fc03c43af56b7d0b835bb3b8f503e0545f8c11ae974eae838961c3766acdcda665fb86dfafcd046143d91241fb507edbcfbcf64ac8515f87f6c99f39c2c6975f7db07ec6e5a0f9649276356d9bf1b2cb1cb797fe895dba4b27f94f740afb4badd6aadea993a2539d41d2a0379b3458e713d9ea52abb52ad53f08aeead315ec8ce5c286dcc5c88458df0807655fff47fd5a2dbb53bd298f6f3b614fb7d616f3d46f27ff9146b5daaaa53e79f449a306eb67180aac3c6a1fbef5a59144a2611c0ead6ad816e678b0a104aa2fbfb40ff7f5a59868a3bfd6cf9ef32412a31ca8ab7d72c608ebf5652b7eb5b625027fb9587ffd847402a0a2c5185dfadbb46c7c7eecb506c45b9bd60fe3cf9f2fa568d5d6a0d970b1915be6405d39bbbbbbdb9953365c6c7cf6cadddd265c19a6664b61913a0737be6bc9c96162522549b7dd2c5a5b774c94aeabb3dbd6e13031ba687c39e00f52dc7095236589a681d52e332519a25560b1cb4c497c7062b9cb4c496c58c1cecb4c4998844002324b1b5c668a21862b2f339120881baa2ecb17685ae82f99f3c14b2cf935b6c5767c6c8bad0df24dfca21b6f4288b7324f941faf1479a3833f3e7fd8162b3d13e41dc2adfb647694ad828defd23b265dc65060e3fb106e5dfe6d0c4fea83bb5f159b948231c19059b06cce2fbcc85c932e6516c961534c6df3628b59a894fedc9cf20b2f50110b01b7a2949bfc492ff74aafeb0bfa4591cb5ab189a3aad909ac7ba681e1b4500e87fb07ee1ba55305305cc6c38c183362d830368cd6736ed1c67c6ddb6682b0f239dae0ea9632d04a4ec9451bf3f23f7581da521b5f13e2bd13c8e4302aac7c39916eca2f7f672d173f204c367ec6ada758d566368e36e2dda25ed777a37de2871ce6867cb21b96aad150ac6233e840962531a2c90dbacc548497aba538e787caa29492ad603f586b88b06087438056fe175fa04bbf6d6e659eb09b5fbbeeb79d0add4209c6dc947cce6195f53afb5d3386192152047b2d664f91c9d0f6a89ff9c9f5e32f54a17869c6d69ab29653a9501b7f61f60d5909917f69be3dea21b04180fbc94356f752f5b5d4e3c710d196f5758228a4c51e691f23eec7e6e313f1e851a47d32ed4775f9dca1fd8eec518ffa8464cf1785faaab769b2416ed0768ffa42d41776b7db81fad4d37842509f7a0d554393f26a68be9b1d343ff339688608dd9a2f44fd09f1d27cfd99ed69bced516e514237a2521f5f4311b50fca07f5a1f8a222d743f38c14e141e40db54e14ba317e218b59ddc85f680ff66f28143f36891f8de251d757193e8e14f93852c431a564a5582529a9d689dfcef37b621981971b4625294aedc3b7882d979fb8cc54c4d1d55893fca594ec95bda67d94c24159900f1ca47d387106e619c2a21efb5000d56e57eb3f1bd6e1678c879dfbb22fb402b8d5e3316efccb0b2b654ffef4e498f844e21b890f2488642232d160a411c2f233c7d9d2975dd9c26657fc078bf3a87de2cdbabbf0b51dcca37b5171c3970b5ea6e28617ae2667528e0e2ed6c43cf13325e718c05a5c5769927b2ca6d1bd70bc971cde8479e21bcde7c0fcfa55e92ccc139f874ca4ebcf52b0c7beec8a6757ea0d4065c5b7d99506e3d760ff863329feac127f5e893f93a6526ae90a428bdedc7d9da04a775fcccc1cd6b0c815c23f64bbf5eb73fce0fa1b4abf7f980a24b0678847e5f24058b234f555378be5c65709717463c5b991bfc8efcf43b63b25d0831798264f9844a37844c408d0508f2051f0975f1d61a2207f7eccfa8eafb10502eaeeee06a238d8b7aaee7ee9b9679927b62c43e31cf9ddc42f6235f19ff9ddc4af0712f9f48b58f38178445ca7fb8f503972848a8ffaf37d5c8f7d4740d591ef486d3db3aeebcb22bf1bff7ae3df0d04e65fef437efd8e50f1318fcc2f62318b7e37f1236ab07bb84e531d2c917e23fd40fa83b440e31c259b61a1e2b104083b086d6e7fc741317accecdcfbf35b7e153f5767793b52157ec50fc4fffca06b0149338832c5183418fdc00af3041513985145114b4cb28728f76fb4cfbcf28b123fa8b0c48a1862c022001a564c414392962356604929a5ecc4642d5cf7de42c62867addf5369a59c720594667f5d9256cdf28f75fa7107086e96fd7cab527de1f5d887f5661f431a3911b21d12c879a91281db01824b85d0cf7eb58a2ea40e9acb0b03bfb3ae3dbbfe7cac7eb2c1298f5c9eeaebec6a8ac62083f3aa58a66d1c2af4713d07fc71fd7348b88ef340364f855381ebdd3422e5f77151c2a06925b0d16eee2d9d3bb60aba60bce5325f92660b10100b556090a185841759c4d0001a60681dd9c0a40c2554f2805d28ace103134344d9010d18b0422b77605262c114443091418415359ab610e0329392104a49fd953f6eb0ce2bbfc168bf984131470ff3c44bfa5429e727e53564bb91b7a7971382524a29717aceae1fce3985ccf7404b777dfaedc96795f5408bad0dda505e69e345f7d150c9f8fd6d9f54dd505e747eee461c6623e3c79850445e2946372344d6fcc89adfd1a6c37fe31fef8d8ed4f54f5dffc2a22be503d3bd4caaf9e94769a7acdfbc312497962e7d2d76b1222ab51a080e8a9fcf4022d19748520925892491686aa5a916c72ebe955cc98dfc87df3ed3be504abf9338e87a9a7afaad03fb481130489fa63e6fbd8d64505fb8b343abf68536fba8a5d847e511f3d0cfa4c426ffb9190105fba9cfe23fdca5e5f4c44129efc8cca3b0426a048bc2ccdb67d691d4cfa43e2a37b48a2f7916afe25728a594524a29a594524a29a594524a29a5e0aa33bafc5dc4a29ff28a58f288835afec32cfafe449fa9b7e412d65b1a18f66118866118a6699a8604182a182e0d4b122e6831509b45a6e48afec902149204bbd896545762034a86d6dcf3ee5b902986324870fb57b5ff81fc8be14a7b8dfd271c0274b36ffb64ab7e57dc8b7ef33b8096283368a1444c0e4858d2bf1054e202cd6da05b59356434ed0a8b699f83d32047eb4fe46bad2b5beee44f4e461ac923377223ff993e0e0306e5cbf97915d7913f3ffc50b5b3734337aab55ed652959c3330b0dd25dae8cfabb4151ce49f17c13cd2bb685958ff7e3264daa88f1aa99b7452962c4d5d5a4e4fb1495254aa7265899d821031c24b471109086888a8c70ff7e00b5badea1d5c55f19f2296fc6e6af97dc57f244b2e718e8c7deda0714e641bf19d021ce45f7f11097fd0df4c850b584c99733adffafa1c88ff6c9fbdb26643d8d8ffb56c4720fe1391b04e7f1227264f80f80fb39c98cc65214ee90f230bb7bfa34194abe713cd84bf44e61bb93efb11ea631f0ad8d7cf6af628d4bfbe1b66797305f460e47a5c0f068b78f9ab17c1346bd2a79f86c51d6a237964e3847aaff72d7e5f7e1b6dc46f287e409f3e0d07f5c7621ebaad362d035a4a79465c870eb90e7daed6cd5a4da5cafe3f06eb47c475b8d0693b5f7e590f76be5435e8006655d78949b607fd1ff487e813d1d722b786edaf45dd92068fd598a587185cbffe35880eb458f1c58c2296ac9084758802c5853244085cb0b4c49415b4066b96589c9ddbbf03e2bccaa969680a143562d06282020a27f1e082140d581c41450d4994b2d0c09d87dff85f49afa7c5b0394d441826a0814b196994f1a207283c34d19608c02811c49213325441e305b852a2078b179ca891c61258b48852f0d004f560055f01284a5f9c743922045b72d8c10c1a1b5a3061c1941f9e383981fd24564a78d892d4021cba9002a9e2b04315a6628c0f2f84d1039924b8b055d8509593a3c5863939e03f51e4c405165820468c16944088273bd8c071174c568c9a3c9961c508b65815cee70c11dde0619b0100564023f6b542991a2551011d0d30451724322e70210410426051e6871850a1820316481a142c38a9d2c9ea71543527ae80c0028414b7bfaa1e082a40d070435513b6f4d8045608a38a0a56acc14402313ae4f0b5627e496c62d817d60e6cfa85557efe5dff4496ff50851730a0c1861ba674b9e28631334e48c1618b0b2c488115329490b7862f809146961dcae022065668af7313491b84e88a966c41bae28b3233c8e088e572eb6dbe60c3edfe48560f35961c985c9ecb4c3840b93978b9e1e7c0e5f6e7ec304171bae1676126282db07fa7b5319e96ec03e44f22ff91df0dfd964114505c1013c60fac59e5019e58cc92b187eb349215d08349479799a090b9e133e160749f833c88e36dce01cca23f59882c2afe3a3ea2d1c7b14bb76ca2c9d7640b3df1fa39f8f2d80b815c7e72ab777d7c3aeffc846e881fa090c53d194da0b9c45267672f04fb7eecfbb38fd5c8ce75cc931b7bf28bf8a59f84227e20df3ffeea2daa317e691d3b1174c93c22b0e16a004b6cb326fd57b55a2be50db5cb1e98d39799c75b65849e6848777edc3e5a2d7a1a121d6c4606c99d19991e499fdc707ae92f77b377dbb6b79ed72da11b849edce9a57d3626d7cb9dafcd1b0dceed1b6a705ad4f314b23b770ad1feba849e5c1cc771dcf77fe0cbd5382ceb2bd8277443f56483943524ea448b318ab9f236450e87e665af7d772473b06187251ab9d67acfbeb0bfdc4c9565afba59f6298fb9bff4cf8d6ebd878936e2cdc4dce091fda0de7f52efffaed39ff298756c4bc97521d84f1793f9a685da7f4541e956afc8bcd7e761e207455405580d2c3603db2070b13397999c4411c930828be541c949132748376c512d0d32c0c09d7194a28105255b93ebf01309d0709a410c696479c108cc484a0119a4298ecec86285046a344199a1cc13d30c30c8604697326a1875b1048d242f4aca246d413ae3a9da5aad8a8356c59a8312b8096cea32130c5b5c066b2f33c1c0840c81ad979960b0e2636c77990986240e5a5a534a2995524aa12b7d4ea02929ed9194522965271b8b73b7136d7797b7dd638c919f70ef7ead2a557709b73f1a67b66861bc373a4c40dd035cfe62945276f7b709f416e0c6cf849b2e32afecee19bda2eb234aafaf8ef88e43af0945e6bdf98bdd8e5b6d34a494d23f6acef6fa90fe74fadce320d77ac5c6bf24d0aa417ea1cb44bd8d81736527a2c0f26459299decef57a8417eee0c8eb1bd9d5e35d338d4c6e1982929a59c9b76b9bc30f9492398a65d2f7fbbe4d472b8ff8cb31c26e955336d73416340fe669986551c95ea4a493923e955336d1bd2a4b0f16e18f652c3fed2b09720b853c7cc30ac7e7c4d3072c6e5b544b3d56c35cd5ddfd0355466098c9cc2514e7a65dcf555b351e104c003a75995393b437ce3fa00a0c251712ad506361ce008405e1af7d3315a33a2ad725f58ed379d589b0d6866ba9aceda5426b0746ab28c23dd766973a5f4ad4aa3e6d23fedc5cb972f62c494b9a1fde6d7ad28ec9c5b37b5cf0697db91c6a83e407ef9fb6c1f963d0dc69752b68fbf531fcbb44cfb84642fbf155644debe7cfc9313c8e7c584cd715adf93f4af12f8e57782bcf513427fd29fdcf585567eab9c06e3d722842cc04d52ae84c08932b44063063192a8610b1041acf102193819051952d2431233aeb4c6a081041a2e78a28a154028517182b1d8228c245da0408c195a70c48dd2d2184cb0d083152c600086234ee025063057d0c0082b5c850a9ee0420722c620f32488130ab040c70003171434b460028a1aa06849236490428a921155ac11821660c0a568229ec0861a8451822c4f489c7ec040960b042173b4c4cb0b4384a182225ed80286056a9031c395313010ab0862060b5dc85082c5862f558860400e553051e38b2b2e604a800c56544006172f38638a2a591669843103259ec8218c0b3c51c59513242911c30d3cbc308410122f41f8608608bcec80010eb3c59332559648638b2c428080050946a004531369f880018f825b4182a868218a0c8a3063853154526812c58c155471e58a162ed00414247620820a15d280c19422293f388199b2441624a80471a18b2621ae4899618b3032880888c1d4841148c860890c622ed0557f0df812fc8c811a5f3585146e74e373fcca145f1545bc1c04272c3fc25ba610c10aac14ae189460d506217ec502c61141b052a05270615d5abc70410a560a570a94b0ae8f1b842296d65badec37235c8fd59b11eaf5d857a54b6c8b9d1f4e83118450e59757bf230c45134f2860a5e05e34d820f46328b01e658cd816ebfe6d3020f59532d30aadda997a31316cf5662d010f67dcb0c50939e5125f28d5eb8af22589796d9877e3a33ef658fd8a589818fed1c3415fb361904b27f6fe452c2d7a9827bd8a79d8877d11ab8835e4553eb75c0c3bfda32755d7232b7a7ca5576ff52f3e6daea57d5a8c57b7bb9493d2ebaab57561582bcb324dbbb6ede238140acc954ac54fcd0461e35b0e87eac6994803c6468de39c734e7a451a238d31ce18638c31721087da3d0d644b57487f75bb22f782c639e16cbad4b52400501ad9fdf9f2e6d5e2b5925e651e27fed95887fef6844326e752ded95a3c6dfff893a45794660a2e9d9b3f3d61de66d43fcc2adae4d2f7329776f792c38e5a226172e9674ea675687fad8d27773df9d5df7783bdfcf63ea2dbe74f0dd2975ec85dfa28235bdf3ff4272a9f4a025c6a74e9871d5cfa8536971e451dfa2a95b5f5d2cd67fc57d4fba3686304dc4ab8531cd43fbaf453dec53af533cf19ac1fd44779f539affee535e71e0ebfe655bdab5ed7e5d7359baee6a268176639a8aff4aed49942573e563bbed2a4e370d8cdfecc91be25c51cc7d5c8d875d9c79aefbaaeeb6a6abe8b59ace9baafa9f9aee63b9aafa1f91a9a0dba8ec6bb54c7755d57d3d5d474355dd7755dd7d1745ff317a7a3a6a6e66b6aba9aaee6b3afc998439bd97c57f334345f53f334344f4363e3cda713e2a5f9783428bfc6e3db755d97755d9775351dd775af655dd7755df7d6d6d4785bd73ff343bdc14b6fe699ebb61a9a1a8da3d9c07628145793d5d43ccd06d486d6bf50a80d3e6984d9d47c42baaf799a2fec9e4684ee6b685e8bccd57ce1763d85e2362dc3ea45e727b98b1d93249c92c072ad5cbe7ce94f8fb1051b9b502af84fc422a42b17c275a3dc5047b66efda37d83777ed14b83d16d3ff584d0ecaff7c7a1ef391c44000ec266a53fa98c27c4dbb1e98c3c5148a45197d1f89d5e7c31957f51ead4bf332c07d5efe7596fcbaf97cb8f0c1b9d7a4e9414a46883c95cbe4e1ee6272eb9748a1ff4fbf387a3b68d596eb7ca29da88ad499fe2b6bbbb2fb14e47c13f326ab9fdfc31f360b1615cc2e26e3d2e87a5f29bd24627891ff895a37be9b8dee90b6bea4345a78825892701e3ba13ebf8d7d90587b106d75ffbe212f3f8a7b04c6e54587433cf84882df9172f3b52577e4b32b23b2a4c0109c341e39cf0626db6ae7f124caefdae7bdbbd7d9befbe68742bd379ceb51e3d2ad3a003e0da996ba3056ff7d38b08f69b5fbee9d4a00b91491af4a306fd3f32d6fe57860dbff36412795486f5f6890a615efbf9873961a9d137c934e80cb0dffdc5e9e8befbcef248c3da0fa5d124c3419d57bff3e265fee9c13afe35ac331f5a9a77c26ef0f63906746ff394d361f3dd479bb7f9721af4f9c4a3c1f6f1b75ebc636ef75d833827b05d8e993296afb5df14d3a0dbb71e6d817990cca061572b6b64add16bdad61c0ebbaaf1c2be353fc5cca7f6f1ef3ce61a8f8367cefe504fa7fe6156f6d2c8e6fd3525cba404925ba46ff721454291709972fd6d3c0e8c9c599bf68560f71955efbe1edddb7c4891502432cba5dffab9360e5ad7065f58fd5146b6fb84d8efdee60beddb7ce7e55afb8543e2985b5f8b4ed7be4d21c9b529205d5b4b48e1766fbdd09baef6dd0f752d21deee359c069f0130736d885d6b3ff20fb3ec470e87654a22cae56b3f7222d8ef5eb35e08f132f3d8741ef7361eaaf36a83a92fdc6eeaed338783431c8c925ef5c248a5d1f59f5ed85124d79fc81fa77df87ab2895dd31312464db48e684a751da6c476a36bf93d42daab54f2b53a37ef1bcc3c99e3715d83f1a36cb0c98de09d5771e5000861fff677fcea162bad992f2cc7cb4c56906e6839e77ad94cb74dda30a148bd2ce5f309f57a45a209f16fb84119250e36b400e0a01b1dfdd89bf094fbf8f47138887bfa5dfb08c9be9f3e7d55071c84fa1252407925c4db9ebd9a2700d4ed47a1fe6ade023cb8fd1e7870b55e5ac3b7cd8b4657f3a2130ab8fd0ab8fd98a780abf1f54d24346e1cee3969959ebf96699bbbe538a7ee2e3d2638acf454339bf4682875eaee359cc672ba7497ee2ebfaf74775719205b9a3153b231b6ecba5d3113848d717ea1bcee3ae89d5f659ed933dde8fa4a4e4aaf39a9a4556e495d6755adabebacaa55eba68483a37a27d5b561acc6bdd5c8dee5fad74c65c3d86ddb9eae8fe12cd7d17061adea519b0d636b2a2705e6583b3343b3855ee5ce795d4a77ee14c2da5cd0a50300150ea155be83294c462891e139b371a7f1c71a6c686ff7955b16a3273ef1fa807373e2132dd2605397a730238a1b9f519ed3606d70d5603f5083fdfc3b5fce7cbaf24b0261ce7521d3935284b90304d7db3fbb5a0d55b1515ed1d87f986daf640ca4a3a8e42d97743dc914d908001000d314000020100c8704228150301e910375fa14800c8098486a58970ba45114e4288490310418000000003002303234c30000811011fc4640313a6889f5cecabe4b06acc7b4509cce547c962cea6be96ba6bd172cdbf9f25cb77174c1695501404ac44eef835b2a2b9aa379b3672ebb6eba828254de6348efe5ab27622b83720bed98be3634ccb965f7a46ee53ae3bdf75c6a51c4fbc9a4247456b6f1f2b3e0e9e9859e089eb3f8584b55dd05a76d1b087fc1cb4efeaa896e80b9b13fe2fcb23bd0dabf6b2f1eadfd00c1f5d03ea1d2d0e75a1bae8921f60dadeff8b0d70113512568c54ac0d0aa132600dc2b8787952c409138e0d685507f7ed484c6bd4d70c7c418bc5fab3db8b8bd47d06ae03a6ba0d6b9e455b584d366206160001449d8552b7c85ed365c875bd9255fe2c05ba604bb3d963e2b57ba6b8ca017fa011b8fac0681c68e58e079098c6ad8062597c2878c8f4c2f599d8b17c32421809baa4bbfac0a0ff4f2cb015855ca8c880b40965c0429e25e1ef4b503c6e63a7bd146db0deb3ba14f6cb24fb5d91943fbeabc33e3945cba5ce06c227c44484eb062a1a2cde33c8512c1f1366e540fff8f4ad4e733457d13a8a93968fb14c7e73633d0745859853f832e0ee8102f6a96e55b3741f26cffa2bc64d1ab26d576ef09b5aabdd052a5ccb47c143ede1e69bdb072c2091320290fb687454fa776accbe9ede9ede52729ca552562b93d73e469836713e5a7684e072f1ae3f71bc72387ffbd69a3089edcd3ea78fe438d552c38afdf74c5a0d53742802ca146804b9a39563b8a09add5841e288b90bad5b5da1084190a0b56e8a0b6727259f9e18cd3986e236d5d5635178eb4586dddaabb6dd13a73cf5d5353a5cd05e49c6755da3588ad74b5512ac00475b52ce165062da2c2931a2f5582419aec0cdadcb850f0b9a341cb245bd354eb309f4b01a6cf7d879dc246447a52b368152626714e4086c3bfe9b0e35ca438f8bd6964357730c9f3b4b97ac163b9424fab4b492ee937b26a4235ae3ceb727ebac350f23b455b5abaa456aedbd20e4748d50209b4698fa451cc2c81f6a29364abeb5cfcdbca2099cb0c27ff817586e408aa8e67866a4b278db7226e9a8cddf0f56d3714d3a4dd45e8f66d9cb03870d625808244ace29f8db8b1407ae4d0e6d6ce3035cef4be7f296ecf9f17304e033a9871e49c77cf5b39583ecfac084e4126de4303a087420d7d688b2253d064423eb4aa5099f35a8950dce3248d016f2ad3a2ebff105a1d8b2042ef4092ebd9d0f276a988bc5ecf96d1f24ee8584f4b2af59ee55af8f48a6121f07d48b2df46d00ae19e4585a0fb291289b576e1e97cc90b7492e5f30b2d583786345eb118c9625514c1bcaa6bc199cc33100350625595e1eba8d70b1feb65b18acc761752c6fb7dd05d25f5fa13ffca2b13aca3267a44e89097cb0160c2da02ca1d7d9d47cf7a02a46b2b2b27e9fbaea4776d67dde159f7efb1dbdba3c45869b7f50ac155c34d2b4b1dcc6e48a28633233622f1c33a527c2ccea1fd2f46c4d08f2e66c71d71b11c2dd4e041ba8233797df73ec362394a17568f0e34f42b53ccae70ee0cf19f231f3d098cc2ca689158c849c6d04b569f4230be64968c2a3fe77a2eead5c769f4695345c2393ef514ac833b57735fe52776ad7f849707d47550d5db32b9992fec3e615182c386ee0885e96b89216a47ce2106c50b82578bca298f5904019179ea88632b182ccade249d0277dd88f6bc8ea8168a5f4bda1bd4602458882919b850d52c6e6a4e3add7e280c7089822cf94cfd027fb77f4634ceb55e804de97e32b844601fd4859cc812138b892a6e3acb2fd3857c453b290bee7e6b617d3d27f7b01117231681d90bce29d85acc8b4868d6b3464cf109d680b15a8c09294efb053a4bfd4541b774aeb6a0654f6370257a31057fd8953fcdf5f1e7922b01411ce3caa936b8bbbed7715bdfb442594ee93f928429ed6aee7a3d5c278c8959f18583e7db653e104e1d4f2cbe1cc3f214e9c90c6673f5a3c2d661d4540c19e4019a3c8f9857b12827204c113fc797acc9997666bf3bc9147b1a8fd76da3776d768ed7b95eb3c29309d836ba5a3d86cb8f720db692e8cb308bbdb4ec66b46a1b9db70b979e911fcf97fcea203ef9d1bf92253ed06609e77b9754259101db9f6da33b7360f0e466d3d1036b83594ed928acf05ce637e58f385c47d84814bcf3ea81f834adc4e6cb9b683efeb71113de083107c6dd4cb0913b1bc5b8fd502aadd277b1f2c3c790c50ea354b7a05ba517b08cd3169cd320d219f2d65182a2f7b5ee01c48463fa19367035b71981a66fbfb1bd76ae3254f20476cac7c2ae98bb47fe88aaed232a2131297e46551f7d30e3c241963f9471eb72509f43c00dbd40813124ed03fe6a5240d6c6421177034d7b01bf3dbb4e83db66df010802fc7a725e9758cb077f1ff9cbce67f89e8fd3d3cfa2cb1220a023b95326bd056ffb01351ed11af8a21fecd0e358902d758d1445ff9e39ccc105dfaab73bd2f8a6e45d3ea346cef46ed7bbc791cc495059e325c265541d50e1a1fd89e650e99d684df0d8319459b8ca3639c5b059f541fb48cc3f2cd38b8afe1dbc8f7c6e4eb8466e1f0ea2326d56eb1812912f0164d805bbb2dc7fe3741a2b09479decfa1c95697b87cdfd69ac43ca8746ebafcb73217ea973dac7beaaeb4266e5770b840270e13e17d9ef500f6e5e9855925ebead5cd66e79e81fc820c7f9ee80baa57d6d69ad81d4160b48bade23dbcbb7703a55c8475124f2efbb38ef1858024fd175df2a2c17672197975f3e0fdac53404b17d453438241405894e6a838a3e90381f3cc36cc72ee7e3724139dea3a20339b485fdccaeae4f76f7fb611b2afe9569a065b821b9fe1d6bcd3deeb27a56d2dcbfb14904f3c0b548ab919f1d759b00cf029ab6e95769142595b943372f19af361c68771be16fc9ef924ad3010e93e18372d0202ef9e93c3ccaffefe7889a8a4ab5cbf4a5bce7fd68d3de8f736111155b2fafac5f4601b659c0faf7376b9cd8fd7ebeed445858b00e27d7b4a14dce1c92b30408264ef785aab6ea52b5ec870e631b842fe92bf4266860f0adc0c3f992b8f42048338569891e9e70244504a34cc590699168a604eec0e5f2ff994290336017d1ff7d203fe5beb72784f741031b7cca5aa0ae125a3741031049e407dd3780813b16954f4713e4f491fcb9ea7632a5b5fda080093e5dcee39250be58159d481f3a13aa276483e455eff2371dd3b00de19ced4866594d4d046efd05ca7a04adf5f4bcc75f522a3351dc2697b6fc4a850bd337d10abc4365d0738d670c68a74274cbd4ed51fdb5037d325560c9173ab711e75130042e9174588f826f690e661b8764eed130e6cd8ce61baf001c9465332c83d843331c039e9fa0d2a8152b7d978cef2834e9cdcccffb7f8eeac94ac9503ae8da9281a0275af460547968f6587e28dd2f750e73d35042345312ecaa434992d9c4d0a1484f348bc17ec96c28796de630007450ca78c386f604527f903c48e6049434e9588aa2a144ffb5ef79364f3e4feac9746907a037fac40c2159ea6b02240ee823db4afa7f665428049570b33449b3fae7ff2b144d771f8d881c59c0838963590caa7e5c00b40976089c6ae34856b6b6673f4c59d8ccd4a08196c1b30d5a6483c288a253e3ae8a2e234051186a42a1dbe1eec13c8db3eeb489888b9ccaa3bbe68e4b8a542cddbe88a3b7cb41a217dda6f2b32f672346ac203880b9a0140691622719c2508c94d62a5517b41a7e06b441d3c961ef182f47937202af79c65a4f616f530bbd63019d0a50a96712740086c305c7f01073f5e20e1c4cf66338e05084c837be788730cc091a971960b8831b788381a545a0d8eee4a967f0778335d316e86cc270c0e9e4af15e643b9ebee2ce290f08f1769d988d8ff639e3c2a3fbb95eeba373567a1272880a06e776fe60e8d40a11366b9369ebb0dee14cf2bdf4c125c33645519debca3184288e16ebc528343599793fd2a11162e8d24230d1f9bf45c897cf32d5c9fcc4c71094089312b90b41874ced09b48e1d0e60b6865b7b726c910dce43fcc3c93dd5f702398f40971918256846f00ced03f91419bc2d09fc078acd19780f0f745008fb6a21723f5f0181b0f514fd6621832a6e06c4cc1f7620672380f76bb5710a8f08a824bbd5ae8264832722e059304d2e040049e4f726af0a8d48aa394b4c4a3bc2ddc69aaf5e7e4d20a14cd1d0c3aca03d916b04201400a9b6dc2e48593cc74e0d7520c370a4d47d751d7ed708991837c4a244df84d6379575f19f5354f463b396910ece8359a94550e70ad3d5279ab0e6bf81b93347750d4acaaf55d521d5dbe79a6603f0223b396b6d15db2803c5130cf1c0e63c9fdbd9e7a582aea1dbad886a73df3ff6307bc7059dbe5f3ef19f0c3e27522cedd319293774867808b102dfbf3c1bfca980c14d2ec20a96206bacf56787985b42bc48e0a1ed022db4f1c967961b58d948a7926cc83287823660ec7251c98e46bd61d05a01334c50807c0e511fd8cd178981492a1770e4537e682eefe8c6801cc7f70a1fba19d9ee1c9594249237f2706871a98ebc052508295f6b06e0fd089c9de2a05d08562f99d8a13690c75c23d8e47dc11253452c8a0d1f3a71f0ce6e1f861dc9f9a8cfc04e1464629c365f3b81c0ed1564dd6477b585501febda684414babdf7375d80c9de88862076447c0183d719da20b3fe8274069c0a58a6512ff957cb0255479e18bc6e3951e9beff68bf8697d50586043ff4d19cf8e684405711be1ec67baf1780a8b1581bce4395a1f03dee1c74b1b0f0968b98f083f5dc474cc1a6ade5c4c2e867e26999ac9afecaac522086a492d353ed5026f63b7b94f3193b7b0528f5b96c83359563ca6b10a713ec984f88e0f871f672ee97678a04ac15b465780ccf2929ea1df18eebc584040240d05b6746ca9dfc63016bebaa20d60b75f77f10068c042971d127900741d9c7228a504f78d35030d1a677a83a842acfa7e6c87742824251806e1a663cb000135114eb52e6db9069a10141d26bb1749d0dd27499c6c0297e6fd8d222e84f6ed0e90e3c54528ac687ef1db381e825c3e467c65855a9f9c2c55a3e33e6a6ae14dae0dad543892011301cb54465301714de03edeb9e6f36e8261830e8e7c717caf2d419a8657991666d4a4bbdfda4dd0446ae491b1e8a4122110d7c98092e8e39f679da026fb50e8732767ac45438dc153562d001f4ddb8aff94f89a466fd8b7b78e7cbad9fdf9ea867046dc9f70458f7c619f44f0a3e893e2d18f13db13837b6d46fd0c0926793a857214103eab141789f0155987c76bfdfab196d9d537842914e4889823b1fca361088bf06895ab9b6585b45543fc74b7a320c7545b4781b0be5107ac33822a056b0f3fab1004cf1ddd791045dc9a37d6ef5d53f9525d67c333174efb0b8d3ece809efb18cd85177435646c5936051068c459ac0e3462d55f0043dc58c66a9e498a892769c2ca17866528ce7aea03d7c57223501f517b4847470a24d87896d401db5037cee96d2d123555b9420aae0c33d1b9e9d001fa7e8f52e4add2eb2bdf5dcac3224df99c3a36f024b6b91c0a51b1d526a32074ae3097ae371c334b97067ccbf1a2b3baacae4298da87904fab2fdf1cf008895bb8fe2f1698ca4e1e5129b464d360a93c54af929fa89256ab1793a3bd94a2a4efa4e7bd5984c1a91838f4f0f15c1ffdec1e102fbc03001901eced7f6a27dd6272e5e116e061a6703730595a9ab1369b1e00ca794efd708105afa65157d93131ae8cf3368649d500361d0deae3f1ab39599daf2801dfe9df8ec4fe7cfc1a33e99a2543becb72f9cd704c99ae919bfde179c5d87d8a2cb20e3e9888a039e56f482096901b48b80f4143733651b61b85ada66cb7ad1f2994e9f86b801a96cf0bac5abe826dd32536978ac92d311bd9adbab7c427de75dcaebcb1dea7ba3f6d4e3a78cf3371a5542a2f30dd06c0d825f8933e79ef3e60d54249cd5b7ea4b7a934276ae529d7cd60dd509e4cdde8748340aacdeace461b6dc11310cf54b0355416ff8d8998e7e4c1804664334b031108c333eb7124714c236ca648f0743d66aca38e6f92a41ce1242004a6c7788f4ffa557a6d8a3bc16917cd1b421290401c2307c56978dc5c6245312c6ee27ae15585fea993bedfbba14d96030802a0f461e952f793d807ea0401a9479c7880b67755d6182f26b91f86185dc074cfc22b5a9c9c900c45619068a597e6d71537cfea2ab95465799de42d42cee5f08e1885e99fde38bdc7e60a9e7587c05a739353182e3932090cb5a5d00368002381ca26948def2a6a04e24194cc5222bc1e42d0efa93b62d8ecd51d41d5832e90278b92f201dda86598ee3fd691e4486364b261248f2c80d79174f0c716e8b79e7d88f1f8c8dc667e89751b2058a850c2d2d89be63815e9a6646747f1d7807a7c5dbfcf54d697c801ca9f04c9c352b9aafce0b440122f0dbee02a1db8089845be2fa0e6673395e7ca72d8ffe234f4356a9b49878405c65e551e2832e1a4263e0c4e61ab0df4fce4664dc896b9208b6923ad5eabff96862849e1d7291b676906061c0fcfd5eee3bc98a0062a5d67cdedbf73d4b715af1d826918c0d68c92661f374230b56477a44747e873b1ec8395a81790ded18806efb3a5280a1880973e381ba6dab575cddbb3b7cd327549fc5610cc7bc57e121e37ee721d0168966d67aaddeeeb5a4e8378b1d71a0658a582cd6d08fac829c3eeeb126b70bcbe6dc3310d0cdfa97ca864b997ce0aa242c1f1ab508a7884192688f653b036112e3456196e861f3620f7f3c421448c24c0cd5db4e8477198a2ff12d062bb4404b31579061b99df3650032d4b94ca8e46b90344fb45131edd3f745b27f47bd4c1b62112f8b39fe18c207f7deaa2bfdfb74588e7576bfd9dc9b6e44cf71f9a0ba57760ebb023f3adde5666317e23688b2515fd95078557e075ab9e6ed013c613dc73f4a5d55503b51ba4172fc51fa8098185ff53d825d30045c15a8af44f49194d5d55be441a0badc39bd0c306e01a25f68c16a7928e7eb696a8ad212c293dfaec50d5ad9ec6dd43c3f59686a974a01bd035bd07080553cce1e378b0c0db2eb2d0bbcf696ca0872c77f186992985456685fe54b77167af4afe77574b8a124133acdb941c7d01c6d7006d4a32087b0e41fef4832dcd569472563ce0012c2132ff151a7db99f759ea6d7d80390d3981498d995211fdb866d1bb468b8a5d331f2268b46aa9a1f32b998d72a34ac06288d07b64c2a1c7eaf5000875f2cf91b465f0939d466e36d3063e2cf755cc1a033ba01f5020e22202f8c617f5c29b10c0552e1a91f0f5fc888ea67d47774987d301f88a67eb6fd2d93874fd93f6c40131a6751d1256a7ac6c46a901ab8fb37c57a19fddf683e7fe2e31ab64efaf222fb054f14d458029f0be18f7285a8848b447588136e03737f0f3eb134465a2fc1c8a8800ce9b7ac132a6ec2549ab14a1e5497f4eac26bfbcef7432cfe42ef5ce757385e426464b47bc925cea59b259aacccf48a000ffc8219c791f5fd13d84a8111359a5cf14885cb408f86bb32217cba99e0f7eacb1a48f3f496fc1cbd14f15fa9812b26c0e6c90cbabe342e473d1977651533e2fc2001f81bcdc8260580360b4b5230d583718b029d59b1fd8f8d64eac0c415a7d4bfd9c964c6644a712ee9eb512dc22e46e729100947fb3a848f704dfdd1ac87014090b0b474d710c58644a0cd287b09a3c6c1682672576bdfde34e6b6b57d76c289065532537c78b0386515ef5e9051c6668278f0bde95d54f07f836466005079ab2b96c9b2f028474df66981e482b68f905f28a51c8f8d59555cdb3d7c08f86025a6013fd7d14d86422bc737d84fd97b0edae5ff5c7f49d0984d9f8be668391d8bdd07fd165b990f4ca2f7f5a99a979860d72a137d1cd77dba0d68f76ee0a719215825c12f6cdbc4b7980e25aeb30c0675f8047775811e051f46a9e84beaa78068e1985b77fbb802b437548b7dda386239e7541649046101c47e62f4138b2845ea7e68cd6ca58ba912a249ee7f02813a5c59b8251cf4a94cad80722681e3f228fb2291931338e0a9038c5c28a91faf4d7e7c7505e8d909a5c22cf72381c05433f1904837fe14b7934de0dd8fbe62904af3b72f46e5f2031c0b9b21bc9d5f8b2becd9085912bcb4e2a6f348520ca7c55a97b1a1cf19870175c4f156ed8e335756dacdb8436c462635d45e87c029e0783a2b57c6480d6eced7ed4b8709c10da0c3bc14381245789994e0e9cd87e52d2a7be1de363c57aefeb0f53c6b1a70ed5c42f7d59976e1fcde02aabd8c886503868bb684022375aa18c2d57c3c6356565cee53fab2a103cd0dfa4506f892a4171b8bc48d80243c9e2e870b032dcdea16bd7fb889a80c6c156ba8c59825a30a32db30c8018ca893eb795619080bf05b021c775ec433f46a4cb739bfbe151c2a57f5416d8e5b3d2e7471c20d5c266a71e82b857c0ed9a187cae97b76149838fe86013f81ab6ccfc3b9bd224ce287334930542c3e33d3523aa39beaf41551e267d62da77798df0bea30ee352635cc3e3313f423ef895fca69b97d3e0d9cdc9530d83080b8d0d29b5d6f459bdf72672f1fd98e9c220f5e03000cd4af297a430e3c6865d83de61ad9d10d0a06b033cc8a5712ba4086eaa9248c205139cde043d93109bd8be38b4f2ce6e0d20dde82df7288aedf05691ae58f827e28e4877df689c97c431022ea11a8b3bbd00ad64fbb699d86209d8a24abe5fa2f376e6d91fb3d282dc18fed9c263ad46954f9875e0a448d3d460f16912828abb9cf52a59bac84dc9a957c68a14988843c162f3dbad2f670b59b8e5971280206cd44a7208cb44e8e2e9111ded0aa80988582f1ae6281e407c0306ba396d11dddfa39a435affee0295ff89b82f99cf5a5e604145f1e10215d66d486015c2a5e487a8337c129d2ef83d2bbabcb547b81a8f17b6f3a888b6cc102f354715e9fe4b244d9919d01dfbd3b20fdbc7b9383a3af62d3f48d0a74b498a50f22f5f619cc9b7be3859e5c34a2ab867fefd3608721bc9ae737eda78b3fe33422a43f245b91afb4b2a7bfb5ae1dc7486b295d63e8c02ada28772b5be7d6bc0f6cb3b31266cb7ffa3435f206124f3aebc5c2a500ee80415d21e9efa9eb3ef4514ffe55016f00abfb51a9b1f71245175e62bc8bc49010ba97e968069715694805dd56d37cad0abc4db4227f6d8e9930f2cd20d098ab4695fde0c35c5bcf36de4c7057f96761246835b33b98af8880a52cb8428beb21d8ec8e55f7086a5b69a5d5e42248746c5c21472c86c3e4585ee2bc1a041e6263dc20e2665fc5a598a2661e6be28776e63a45224d45595c329345a648855dd4b242e4b6c55420df5ae3e953bc996fdb04be7073bf84496444103da9fe8f77b73e2c72b0b7a9b1af82754c5d4bc86ff478909d59f66952e4f1c03baf3fd44e69895a9f89e4cd59d44fa6950304404f02a6c913fd682b96313423cf607fac69b26d1dcd0400c6ba939d7f9291935f644b4fc453a68440adcd9b80bf66a1334e76fea92ff9e3da73f2baa2a0c34bc9e12020098edbfa214835a7fea7a9cfa719c92c389934f02f9eb07efbc690727c312f58695c5a7a1ad0661fa80b20739f2f1a1032a093994a35e90f953224477f7fd12dce0cf2385c46a4d2396e252f5a1839428239d555494494421bcf7f920f4c4887b1fd29ba70963b058ea5c82d45222d5d5f6f6015c6777215baa3873aa4dac26d57fd7af22aadfc24fcae54920e62c7b57e207fd2906f5112d1433643c30e7d540bf9a7cf375134c24234d8f9528bbe764307c9d018a9f2eb3bde74065f1ebf0d63018dd815662c958743f009840a2089611e04148cbecb3e38901202ace039ee545f00fb31bb2c0d6a04d4a464dd5d85aa0cad4d9f27821cf16342512d2cbdd5bd90931381ade3960dd15d3b0612f4053a3534e800c3209822058b3f7727a816c5ec2a8bfc4505de047c38e8897c20e743bf8ac296e08c53f4e4f0279379005848b2b43a7c1867aaafb3f3651f4d19523327da939f23e7021f6b0358a198e137bf6f09483459bcfceefa652f49e1dbb046387927bd60b69d13d0d4fc696a48ad019df1bb16e5434932fb8390119fafcbd618d97b64f3bda78e61b652170940940ddf6998a9a003d805b995b176da885d1eda38e9acbde12ded0d8c666f44b2b7c42372e89fa32190891de1e7260465d80c0913e706543e7d6a1f3b6f2f4f94a7673801bc5da23d7c69b1cfa7aea8cc2f1bdeebbdea90a6412ad63fd5fc81f9c47ac4f0ca9705e5f1a4bb9f512e0c4aba48399aff98ec00f73a58d7dda118d1bbcb82023793a9caf3e1242fde66425b1ac1b0967c53d211734f9761617550fb9ea43f26d459606b0f7878146e3ea21a6552af70f0c7192c63b8c89765bc07bf0b37da1e691c3d9020cbb26bf29081f75330f330aa31067450806d651f1567a0ae5d0fa06ac07a41c3712c1316e87b61d59cee18634ca7fbe7148a579d472001a405380066ca1bc1de087c2733eed2c0f596b142575e02bdcb7059a0ae3c72d740d382cc189c8e7c7e51cc677794d0f32bc61c1dd33757e714d7068224dc919af9733fdb2c9d12b5cc247f1760caf6d5e339aa4938869e9623d5ba58cc24a0d64938278013889ad40ebbc9276cd642b77740c384e1cd6fe9e1fa7d4055d53344324c57d0fb40a17199f978df5473baf31f4a01b1e599c2c057e701c39858a8709bdfd9e78915a4cb614e0f09a55e699dacce67ff1eab92992828ff021b3466ddb26bf60f7385521a4b64bd71bc5a6547d04f623112ec549f3207dcf4fbe84d9e489ab05b415f344a2ceef8d3d72a85b9b3f3a86de27e635aafcf16d833cab97ea9c9ab413de83446b0f78bc34d2611eb04043020a29bbb68f5b110122580e913e8a14ccf444ce43946f4b9659556f1a044b4908601ab93f6e4844df9bdc46cb247b0270a22361f0219a3fc8552c32fa7f9eb49e942b36f342ade04b0272876cd20faa61249e59427501a5491a6161b19313c0ddc9a46a08c771b7ac38df53f5238d75c4debea4f9ac5e095de5a3e61fdb3e7af98c03b3702c7d40db01f584ccc9c92fd0621956dfa1ba035fa09233545cd37bde4cb9cdee1179e9c9a50dd975690ee270b8343a761d21def82e866b954f3288d3547bd960db2ef8b3aaf4f2cd5f4ee0b529484e54d3087503be45a15cb418434778fa0c33e2d53ebecf4808a0e6a698ce6e3ad9db6f67123ca292419e903da4ca233a6eb26ada444468a4266e1ad9cc81983da779870dba6bf33e6d8933f9e8e029ff764e4103a5cb8663ea08cf87918d2ea2a3621a313755978e7b3628a8d501577374a1da323d6d12aeed64d4846aa1921da17ecf9db282050aa9a86c19fcf7a8a6e4777795bece3524ce35f04f03b0e49388ce8a41366181bd30c228d01873c5b3371747da4a6d0793e45648c0067471bf5842f3c9cae5d69f15e39a8e1f064f93d3398e22b1015a413623996819e97e7af40dd246f8141838d19d2a7ddb91a1bb8b77ad4f4f7fda646079915b0f2e544884ba4d7fee830572cc72ca1a5af1d254ded1c1e1ec37cfbab9afa4d73f44b4f09ae735c3751cb800be3c090b6619db80b013892aa1fdd5edd21b1496b7245b3303fcb6728190e6e94cfb4cd679ffdef8bd4248238002b84b682f6243e112bc2d8dca0296d8b28f1e9be1f2d2493d7528aec212e4c46094f4b9c06c37d592c7a07ac506a0ade2ed67ccb9ebacce8726d485224a550e3b02b7749e4eeffc7f02c6141a56be5c519d39fd72d815934d78d165d7059da549260cb6d12c482aa46ff56f7c35a32e95115963726e925d3cfb5386936e8a0e1438abc2cda82dd8969013a85ef08dca339c87a97b29e731d03e481dd8e478ff294f8183c38c7da14d41683adf4e2127ac50651ec70e58f6bf6b4c917feabb6f8b6635d07db05d04cb52ac7b8eb31edd1235f644b7ba46529f2d47ee7ef8de39f76b575738881b729891a1d1276ffbcc47faa24573053730ba8146bd8b44e75feec0149952d05e5342290e17c516c55ecf8e0bc9268528d0efcf1c3575b8e8a81b5553986841f4289169eab6ac3f8079bec83f02d727c5600b6dc68dc71cb83ac41828d49de140a657a8e5d0a7d39610a584f3fdd288c3576037a98797213be4a468222046153e4dc7c1bc2698d13b07b8ea21b467cd0f1d48a4551b4a6dc04ada47299fa0f2296efdb08d3594bd7a023ee96235e760a467691b2a67774333348c33611b47aab87d5486e6dc097a2acb6f490f23d9c9b5586bcd61106e7137c11b19a9228371f6726947e22783aa11e8b0f06762c625e83b2303e603b0b46a00e128b2289eda9e974940499316e08cae81a1105ebdebaaca495aea03ab59086a1e1c1483b2b5dd555c546cdbb7eceb1577503972a628aae7a82e34209b388c957a214362095772570729298700998a4dfb4b3d9ba0d60436a464cfcb9d2bbb5be861df84801f0409228894300688e0412e9601a3e9dbdcccb65a629cb4cb2ae52a70e6fb6fe09d1d6a39627c5d0519d6582aac3d9c1e4996821a35b63e4c53a3a3f4234d533825156dd6cfa48527a1870e200d0296309dc07ee59f5f7267c9a9764f762de9b68f76698a04f8b91bbeaa1d1ee747323797b929b91f488db6e60729956f2c555d4e59887fe33cd326970a1a6d053bb2b5af601b46a9c19cc6c6bd285feaac68a184a897c39655585803d7ff0811c87da1fed689985d1f1473f672d9b5d05948075a40d174ff8f4b2d387150b8604a2d8021f98ea21acd9090bcb0e907ca2556f50a0d3e9035f7ad5a7a1c77c249a922041af91cc69a298340c0fc1382a1de7e39048f04935be9d3e5b01bd13aaf9ee2f0aa2002121f829a6e4b606a875e444d0df41c37a9adb1b508a9cc9ae48c6ed635027a43f7f82f2a5f4bb9f5cef51d9ca19b0d7dd1e89615403f1484cdc1a8586ea1e006bf2307dec1e0640de8719b84d5c75ac77bca60f73e9d9f034e3f0820dad6d9b0c611c68566d9288ae1bed7ecab35b203519fd1fd349e4248b5661900ca89d823a85bfc6617a14baea4035627035b76fddd4f5cc7530c631729fa566991cb7c28cc1e349d019ac7774c9acfa5c5e5df0561e1687eb088e4751d6ec5d3e21778b1ea1b18fea540329161b860488d0b58a32aecc6b0a2d7d02c5cd462949fc3645a6cc7c1c29b62106c403a9789ff0e9cb837a7b4311dcb8e06bc4eeb6284ebe7ade906bde5e735a68c1b48986bfca1c6c308c32a210713f4a18eacbde5311e8fc0a6c285b32193ad5a219138378531505829d2fa99840339880193b479881337a5da5c298766d6afa3188fa2de6ddad4174ea464a7ec9fb3d362f164723ef0c9cbc1e2a1ca97c398b54ca36f779d0a322e9732d7b49edc070b72d639c3a42e3ba8f115e52aef2da49ae20fed3fd04479e29491005d5e950367f4f06bd3d240df656935583a42df06e99fede218bdc714dae66c8853eb01156faa478fe14839cc7bcb3085a34abfa733baa464c22cbbaf091e8d72aebf018f2e32ce40abee428dd6e80627dff3bb48822606e7d053137c8ed5f8bc93f5e34fd84b70146c9c47a99177a29d317d187aea287a0028530168da1012fda81fe97c79f597d378a8e7abd0ee8abeb1ffcaaa9a35269dcf3e6a6bc3e93752ecefdeb697820bdb042ddede4fc61cf3949421958ae63cd98b5a0edc10cb3f9928a48d31968f3f63f739b0e89a87c216616068c4ff5d02e057b3cfdd6612665e8b6cafe405a19a2567aac2ea061c6d95cbf5bcc18f116803f9fe09b410159153d587a309beca04cc95b73290c0d6f86543acf9afae8bbd57c4f44c22e07256967b1937e80193fa09a2dc0b8f8d01f12c49f53bf2334fa48ef0d0b412d49ddba5358ac3b811a534226e6b6bb300d46270344b280e123af63d634eb09c425d6e4a080862b71cb4c79c193eaa0b2a94080add8bf6cc5b3702623d3129341ee1808925ee16931d1a402e56963fa924ce2e7ad7a12cea5017926e0ec5c62308e62b1571a03b4760f15a5e7203f9c1467d02b5329df250c72b3d3d35b5f881ab415770082eef33b16c07ffbcfc8bcce52e42957932bc63b699641a00ee53d8826e03bee15cedf16ada808431a95e31de7076aec6993d8006150eb9e12ea314ca2069c2f6d7242d772c4a3c5f126e47c90827813d32f887771b014e7ae9abdec163d7940dd7e760f5318b0105742e9001ade1858bdfaf7fd07e96ae5f4f6d28a60e5c403e144de28f5acc256d4f2dc5702e1cea11cf2a95750ec1ef82508dec10a997e8b7ef586f61ca05f370b01041500f5156195166fc9f7ab4355cb94c57a2b04e72d6ff9fe422bc51b32ebe5a68a453a4af4a2ef028b1beeebe5a68a457a1a3d6d95e970a4179c845ba2f5f5a5ea251d2d3c656fa1841be73f5cc4e5ad0b8a4528b7dd62f92baf77c36d5391ffe4be50d1a6d9d584f62c40cfd314a0e3cf3e3c6e59064ee903e904ab2d3e6469369adea68716ae4bd1cb5fd6ac182eeab302420b62d2b169613db8cbe5001355fc78f1dc2cedc1f825e660c7c53d169aa4e933bf22367952a51f90c8c4c161cb0c42b78044366e87e84886f58c7a2b695a936635fc26db85f4b45fdadc62958f5d86ae4ae6e7ec879c3a8d0b54b0f3a3f02901f40edb5ecf235fb147c183b20025e96e442e68d0011a0f62a05466b55e0a514c0c8c5db34c6b96599f055366dc9fbbb280c8929b8cf79ba4457db09077d72783f8d36555342a9c3470a1877953c3dcc86fc5ffcc2d686176c4e47c1816d200f71ebf38ca02bc98225c5107f6e3fe8165b1f4c41ad47856a0260858296b7ca46afc640f7b72701834dfc3d7afe82d8d5487f01ced67e4f6a63d44b632b852d9395b9e3846c8df2e15e7c3cc67d0ef16b6bfeb3d6141931b8088c16e335bf9ba804fce0d2fb8cf9688e71a348b33f4a46d458c012f142f5045416a05480e5e89df2975eee25b726cb11fb160c9294bfe3323bff08b612a03e06cc806f1f177e8509dad0ba1c8daaaf486846d165b5c8899a3ff134b1ddb57e6d73b690d4e406f53a5240e8f76c7785eaef7d9f2fedee0c5f6dbfbeeca598197cb6b49af340ee0610409f071632bda1f1845e9539448894e4588c6150dd0708d38e9d4c62b6be3a91e5562e2c946af842227eaada5a4500968c3adc588ce7c865c8273fc799c06b295f1701dbdb5926798d19ef48d8eecba32057aa12d28f1061ae5f3a0342bc749b99e4870186f2bf65e8ce6c88186d246a3a8d57bf431b66aec48c034d70ee760f39af4bc68add2a4a9344d19fb29b38e143ad727297ca3ad2ad0fa82f1ed38be50f559d1706832143419ab3ce584ef5d66ecff132e703697c6e61f59500588e2fbdde81ed6b5a591c6194a54cc46949fda7520dd6ee557e223e8bef62cd93eaffbb2c4f0e12aec96493eb3b0cfc5384a8168aac639d71bde01804ee36d40d32d511e0d9e65c0a4695b047d5965f2fb9262d4af453cb79976c372ce8d61a88973cdf8fb144e09136a8359e8e94360848cabca7e8a4bb22c4e0790ae973d5c5cb4bb73cab1b435193be48b2d8f1e5141a3206b31be662843d65fbb71c4a5947910c6e99b046a741c8dbdb6c7c109f06852ef86ac47010c74f39020a8529ff62fc33cd792b1136024053ce445434af1979fbcb05139044a43161109db5e9439f2314935c53549857710b4388667ad19496fd4302ef171a975c5dd3ba2169551eb0509384e2807a99c295442055d15dccb89758f1d0cf9b6f9d55361f65955cb39d6eea85f4812176076f8afe83d964aaf7cb2e8f26d9ec4c42f6dace87a45e304aa76179796eff22bb9e4418b9bfa04c4001512be471a0d1f56103e5dce164d3ce35dd1e8f19c2d08fcde79440e0582a497a8f63b8a81dcd7139b069110daa6dc812da4edb203c85634893f68f34909c7fb24826f87e6b16cef17333bc80c8a5c5453486b88bd0134a9286a800fdc4c27303a780fc71fb7c815345c2c4d4f9e3ab611a0f93edafa1abd263b97b6a3f0534e2d8ab02d6d536153c714cd267ae6d38add4fd38e9dfeef75782776e21b4b89256080e60047a7ddf07af4ac6c43a1b9d1942d6d5b67e163e95650b0c0e5c75aeada98d6a9d77de67fa5e7ed845ff60afd2caa9131580708b1146bb24bf88925b866e92877c68970320611b60f6373f30c6a609c5b0ffff0b0f71187d73405139da5affb85841ea2d97ab6898cc5891589dcd31d20db26be4df840b9534991579bb9d38599035efb4153b510196836f822d1a074bf7fd8d6293c0fe71e11a03cb669528bbaf732ce63f311e83e24d2d70baecddb71a72657527c69c58efa1fbc8f12e1d9be04efb2d7b41c9ca101ebc3cf129f46574adc53a0f9f70bed49485867c3d841163265f9ad8d3d4c87bcdf50dba7b590a1d5679bc50063b557dfc172b11db77447aaf3a93cbfcc507c6fb4679eabdf1d00525194012e871b8e03974a9ccfa99afec773df29102930c5d2d32430a7e99a944624d9b7de02246c04377078cbcd85b7a2c81a137e0c4945904a6726e410a58f366abb1d4b32cfb49bd3982a6acfb599911b5bbbfabbc029d2962c0b02f095658e85aee1e9b01f8b77fc6e0962b2eaf878585e64c6f552d18a84c401433b293c1d61ed6754176eec20a55a1ecbfa9d9f91dc6f4ebb183287cae8ece08f442af9549c8aec3058bc24c1e82eb44156ee2018db3a97a6cd022f3f9ba94faad816a59176e0b126e0a9cf05af74ec0cc4077af6611c617479ee33bdcb86cb2300ad566a4c861723398d3f96c12bbcd90a213bab25a8676b514387fe9ede58ed52867613d413232285bef01f5326e168f8004f6ba2b28628a01b98d11a0070eb9473b236b6ba349ba6a69f5a735cf7173bda836d51ed4f3d6b1f3a88e211040b019ed3dc37bd619ed694f2e0be37d365ef7d59858b670b247925963826069c0a1fec1da847d7620f33e92190c72f3132b77d2257e752ed6048a7916fadfa41e2a663d3a31e5574e451c3ead0b70196a7829aed37346899ec538339be7a6c2d97473ab4426be175d7d9e34a1fca48e87cfbfab7c2cb6364ffc17e63c1d597b33f5e6e54d5187ce060fd78844af584806911ef9219dbdae7ac09bf7f11653c8601c5995cb8836cc95c99ccc0255e45b2d6761a84d697503088c6dd02587c63028fbcf5866da2943f9e3f326bd2bef29d7d0dde5304648e63f6387715bf8666b58013a4b37f36104618bd05923b1c69906757e881eae2368d8731dd744b70036f06ae832fe9894769dccc0d4e38041e2c75791e2f194d0e49f998b53488e2cdb20804170513b39d0707eedb262df71810248bede0698cd023b9fa1682b953ba402b077e983be6e1cb71ce7f8031d7d2846ef23dd020e50ccb6bc6478bcda54aa8c05d1de516d11fd69991a60f06205e3f07e76f118c713124f96dadfc8ec103cd2a6a532bc7753ddaba90824900e1bcfc8c82a7f17d60f9d1eebc1cd9a16b70f316b993d70d4610f20ddf81d1bd205b398abb59c0f3d1c05460ba85da111597311fe9b9cc667c1724eee85236856649c81950ff30d3bb19fa195a59b829896e78d4b98b9d3f602ac0be9358f10cc8f586fc07462e1570f00588120dc770d26d467e0037a98e49aec23fb755850014785d4966cd79959fa472c5d446128541448cc105c441f4d83b8b547e0e64698b9919c11755cca3de1553e08597d3c13c0d262a22f814599d85290fe7e96cca6d629a48e638e1416bb1c8d5dda1ff85398e79366523e23b6b13b53e7e69db56be7bc825d578a1685eb4e6cb26ba4775c8b808525c9959aedd13c8246414f960d7ee15286bbee4c415cba9468bb0c202b1c55c908e9a5b2c3a3264fd1597c78c119a54d61ef6ce610dd144f9c8fcfadd5fbad065a254fa949eb317e943617bb5d4f1e7764cd1337b3bbb1f326fcddd5c2f320bf6f2c45058b43f0a634812d90cace8560e5864c91a701cb6668802c4ba0cbc500cac64c0b2ca78d2950c7fdf4ef06968dfd5fb16d8ea42a7727670d1f3090a83db5dbd321939444b9e06ad26a4231dd3fa84070b476f0c5c78dba0d2eab0f9351a188308ed6108e64dbc804c0d1b259fa72c60ce941cbab45186eda346b0cf4ea0b13be6cc43c2cd87b4e361362742ce6a3cf1b24db9b0283d67680bb07a2f8ff61c3303ab0b796402b578f244229834a8fd43542fb8408dbaf8f9bb605eac40c6b094c885cc0fe0746907475093967e256693e54f8cbd5c0e7a226058b4fe8fea2eccea7d0b960d91caa6a946ba5da23718524dc7748b68c9c60dc83fa89fb393edfffe85a01a2f775c24bc883888d5fc36482becab9b03886f5a4d9e2e45884a4d5736c70a05ada8a95eed1f37e1792c018d066472d50736ade9d58fe7f0c54f02112d3ffa112288841142ad33291d291b6a7a8c5108c7e1c19e5f3d1c321220d331b1cb4db2d3baea11e3488c07507cc5c8a7a13d76c6f5e1f11cf63f7ec7d9e33d9a57817a647b0f72ba4f5ed27c693bdefcc204468c9bb01a21438f184a6ae20c45c5e425062c32f5fcb85e3a29df4626a64b365413800a0a0722d1064979a6246988a1ce23e1266fa5907e5b0ba15591bcc90bff2e3402e94e154b71cf34a66f226fb315e4bd054bb80fd80ab36b532cfe69a09d73ccfc255a67e9228b448618e7068440d898204e1890a024bf18a323c4e686b8d6b9a611f2ec81bba58e6031c2c4c25bb5c2c8e30ddc1f87fb079b9c1ec3f0522c507d4abbe5310e41f579c606402818b95c759844716c82482da8055ae9f0c102cb77919a99258910ab70966920f258c55260357f25b5405c07d3b7b7ab49f64006ec0d10af02a3b5e003e40f4d931c9309162ddec6c8a45c8a640a9da5bf02c4f85a10d77af14e348620d85a71aa1903996e1a995b9b210471931936e957f9437345a6d9e2df2d815920f3614ebabffe2cfe409d3c9a0f07ec1692ae3b79afcbc08fd92165e8fec1b0b8337cad718ea3c22b99e7ec24721c7d974ab5a054a9be2ac557c5fb3dbfc87c5e71a0e7886b6d9337e26f817aee942a9d8ec2da15ee0c54681f449d9f065f1798feb0df0bcb7963b4e397fe7286f6604bbd4235d41d9e150c359371640d7b9594789549b927ba53f822fae5c2709353a695dcf0c44a8d6030762557c7f1b9c8d32c7e6397781c72a10267a64a3cd80b2679feb159ee546760904145a94dfc22e3ae130f0d2d3545aac979e8bc0070206d4831cd6384d157b43853b04c6007cb55c6acf63282f6df3d90b88fcc57b59128901dd72d1b8ae8f3fab9192db9a9d5411cc556b4c6faee2f3722e61cfa43acb97db7adabb7e58bdf35778cb4869e32a7c30dac5d1a8f915a788c8861f445d9dc54a3e7b6c97ae42e2ed65e7d8613fe4b20b7a0229aa11709a89f85f77d27e269443da637c1e87daac395e27499d1f5b857e6d5bd1d74367e9736fefe8be9e2cf6f6e3c9dd353abc0052d1918af358446e230dd60b388df1717f8afd4ba1631032ea14bb59ee2629a4f7478da2a095bd633ef5d501fa91c5c05ba1643ede37fd1da5d95f5c0d6f2a66f69c842358e3f2a7ebe321ea4c176f2d1fee67ed39b874274c6e3a1389319cc423d59b63c446e49820e0bd9d4a2d10dd61a29c8602796f75cda8b23cca2c1744e8ad1a42502468802173660a57568cda550f2ea2791824011d221cddcb6b12ab924ce475ea43d2f8a59b4ba8bc454c2b1839bb33ca9914a2061281c0adaeb988ab84a4572bb690a82205990c733e668ea3b99052dcc6e7db6a417ebb5a2068c7e3fc78bf291ec9b2036e9acdc8d96c1d6c4111837513391e85b07c169597613d6576e9213a7da074f7d9364ff45dca4e1b0cf0755c2dcbcb3a442bdc2ff58bfd32bb4a81477bf158ea2abde71a48804acb533656604f1ae217a8c601ad1248af18d91fedfbfbd9f4e457f54202deb7c06792eb66c0b07d8535f6908b625383eefc0cf10cb9697a84e9df60727109fa1432d196f049df6e0ca41a4eed361814d7f80e0b4d6541861d8a5006f84b608fad94317ef57e4d93d91d5993b44ec02963484a18d4f3bfdd1b5f592c86ff82bce301234e734f1ae16882c005c0d02961069b9b2b35d64709dd5125db609d726445c95d0098ba673b7689802e1d188aade5e956c6ba94a4fd3230650e2884603282c88bf91fc28fd0995e1eac09717a459682027e7d1e56802e98697620668acb2cb2eb97261f70a2f82207f50a5fc9f441bb551c7011d12c2b7ee330fd449d00a77a26371556b147ba68d28be185151a287921d0c5079112703ceaf276f8e59b4edbeb1dcec0972757fe79c2a63fbb243c5f55298297b36afaac620256ead91582e4df2030ed57381fefe4aa164260e727eec1db8cad234e6da470dfdf21abbdbbe7463a7a60733682aac3191a04d9b47576311e4df4e030b37605f0275aec20a130adaa47934359684039d6f9160af5ce9a0c6635dbbc2d402e63d6ee587b46475dfdb78e4e1595314d4fb5344d3060db41616cb6afb12effcfd75c27b273b12fa075306849ff4d94dec24f691158e444c13c5ed107ce068d9a29c93d81d2c6076ae77e42a6bd445630e257e7f86c4852bf44a74a03b14aa5e0ce811bb4258a9f6f715534f2c16bee00180d4b502b6e511a61db591610bd4f74a5689c7dd47746ef61042897b724761f461a1527c2ec26007cd811da2fdd803c4796963dd7319ba2ef6b267691183c5f509681849f5d7d76b3a0c0e498302c5a0ad1cbbaf188804b08b810ef608ef60bbbcee697da7cdab8b18a5558b8276009d61d84729838d376d38c234989aeba633f8a17447d995c1e1f56595eaeff81423c26a42c067082083fd3adb64957b612792211c034858db25b316a30c67e79bae0f2345c1b636a54f19b294de50be54006d2b0647921d038a71cc5648e564fb968430519cdccc1b1be7adfe2aa2a398112a3e8e36f34573615000a231b5ab395848202a81804fe64d76567986734862500249028bafe8801ff088689141db8c08d78db1dd2344b9235540eba80d339a241c043d1f1eb3d21427941ffacbb0473db47bd71adbb25724f866b6e029bb631d88cdc43e359914f8c9ba40391269029f4e730a9118305d02c507167260d25f560740465c05655e78e73271adf21000e3da2aa183061d7419840ed5de566bc5ae259cf0fff884d035ac5eac5d73a968f0c00e51939e1d9829f30e67862987018c26c239ca9034b8fd7a789e111c828b58c50c411e128171298d26b567d62ec0a69d52719d41e6cca5161e4f94b635e56c4bde9844d8700ea3c88555ecc344ab1d3f1df79372a4b1d60a9cff3caf6984947c62ce2f793e061beba10aa6127067530384b31fd8d8d569c1def1188632d881f97963bbc65e4a97926208c9bc2f69b8be5c03f8482dfc743e1093a6a55d3abb761bf20a4d6d05516f86d66330de3e4a12b9cb165eaa69442f210513f33dd6f235a4208ee9636fb1c426f0184564ad25c95a6daa37c35cd6543856b40a4071e916b603d6db346d2fc7fcdafd05e2a3e33f70e184d94900993edfb60fda1794e9e4a4fed0554d987f6e92b0bb574ecd5694ecaba2f76c4cc725b6bd2d315d8681d00383b0a35d5f318062c44bf5e10f4a6815aee8a73433c49d115fc7594d19a9de8de09bbab1094a48db3a44878c128456b3bd6379637196651ceba6d4f7c528a709a060a82bb619a86bab20f470ecc5b9160faf25fe9237e210e7f22b9597366c22dc304a073627c25d527c75d3d1f40f3cd7f86215a2284d99eba35022352a1a35ae8ab194f82a7f7d223ad672ca8db4d00db6f8225cdf45aac3d42db45c91e1b04dace13c85ef3c76d59f357132af4aaf279bc8f57a5a54edf2079bcd64b74fa357617b36811f407067b8c4b4c84701d5ca189260d2ed8818a6e0813f086c1bde7b60d71873cabc951a2605438c4e6b5c741c61221861a3626273ae8c0534ce59f3aa983172be74a98f1bfc6f6d3a444331c9cec390bbe24960586082e219942972ca16d9ccf15173b81cc9a240a332dc6cbb4211d2c9189f02848316611f5e481192c66211ab6c2aaf5ae3cddb45741cf7e668d10aaa384164f246080d09a8531d01cd05a1c2e982c83301224d8c5c29fe560243eaca73580d5140eae18e6d5437285669a842c8a6624167ef021c937f857da22dd99365b251ea3f4d39eab3dbcd9436e23e313699ec31859b936e66263c7436c036fe6588374ef48699bfb024d67a711d793584240695a8607136fa69dde0c0a54f71b423ab1ccc4c48f4397e6c31c0cfa0ef2feb2fccc5f686c816ac780f1d13eb34f207831cb3d76d3d3d1171345d33973b7c1f485f0669347ad1cbaeb8a1fcd54a59f92bb2b9841d052311d3d9a56fdf2ad88f22366cac8fec129580e9382536e766bb06f0f6a713d58b19775f90384621b6f9d6c01c9a89c3347fbe0f3d4ff2e7a131e269339678e3e13d90bc2b1c8aa8d409bb742b92e8c654f693c9a37f509082a72e81a0931672996c383316c555507ca64de274c4d16a9df217f2fb15c24ac32b886419c8da814ef0138f9a2d53dc47f8ae8eceba8b641af797963776706e178e817529bd624f6ec827800044a0c018404d02469d5230c03d5a9454180db1caf96e7a7dbff226fe1165e58e983b422f64cc6163b312bc1506047e94b9d0d0c9004ed652abeede1e1ae30c209a5c80757110fc10d79c1e2b18ea10b4fbb96a4d672e3be8c0c59505213e389dca4928e980a41f2cad4f5c5f1c1591326f86cd66e5cbe39c4c8ed9e08070c7b7a25078f7a96d20f3479c96943ea520a48ddcf58f0f9872372c8dedcca04510632aeb5f6638cce8ae7a7121510fe1caae240e64005c53331b647ddee2b9af36d9b386baeb15fb66b8dd06c6197d13a30a72f1ced31bdd8ed0777a8748956e5e20635cdfe9bb9cde9440193273fa1667fa7d9ed4d6ff60d3307113ccce99bb1432251f1b93e6ad501c70c0a99bd83bbb8f839114b280e79ddfa007a6cc0edc3a56a6c0ab639acab4a2aa01f8e2c4c7d98b9592a5406cdfa153f854318df6bfd22d2661d3d6891bb40d2678e179c784d359e4e528b417c21c446533fdfbefc1bd09c1ffde071e1aab214375c4246893cf0a638131d912fe6228ec42d68b1c9a6f9de7fd66657eb9b2d176690951231f53cf9f484a0d91d6dcdbc951521ebc04945cccc0e7a6180f9b1ac7a2700b9eaf01001d26cfa2880ac1fa6140585f43fdd63cfe16dee9642bd4e06f37737028a29570df1074a8c5a95862acea5b7b234ff9430d03d79fa980136a19466d4166665a903953d370ab8a2bc6be163e411e815784967a3537f5bc249eca9bd6ddb0abad75307afc170700a1d1eaa8290e1fc0b592c792ae356e443ab29fc3ed17a6c6882ad147579a81a3a07f1a625c9b39b4a9a8dd69abc6a7762466aca20eba4c4caa4a7fff795c6c85a8f1ceba1fb76b8d0381566bc2d7d39b7f10bb5a5eb95b668045948d18295b968762705ca894f968234da879dd855b599a100b7cd8695f84a5437f7865036c845215d70f938aa2a30b152af328e0eb29b34b9df826524024213dfa2056e55659d48555e030e36e15924c8df81e0cc6191680c7c8820a38263ebe0eb934c37d03782e5ccc0b9b0ae757abe4b32e093277b6ee366c37b54e6ec7f56c559bc000246b4330cdce533e6f546033471a8f3ecbbfa7b9f066a9ab88157066e8587ece1264cce8007866997440b7234bc6082b22d88943535268c53e64a54d54574ab7de6cdf94c77ad45aaa1552b76bbe4d247f7db649ee4f5704fe83f1a1180bb27ed6a22841ad9fd5dbfa59b1e6663adb6742e04304d42ce5266e0ef9e6df4a2c279c9aeafae2c6464aea4b7476091ed46fb32dc5a1cd7a1f08f7a4488b51706a6eaabb769679f0fbab034c3c4875ddda649c8c4c681070678c36aa084c13232a9a12e01ec69605a0811fc1135c1a349db9367ecfa5e5fb647397a12759ed88e1019f0eae9d74e5c3a1b5a2471a7d58369871e9b907503dc0323654d822a89750abad55f298cc68159a93058b714b256cc8a2a4542db924b9d6442e974bd5b8f4c92bd436339a9b1fb554ebd0aa001b73ddca5e680dae7a880808cb6e7ce895b47e79df3b44aae040541a6c5443674d6a8c78b9774b5a766e28c72d9585cd9a323f035a1647abdbd8f89210a2c03570201209ea2789f7c39db5361f99198f321b0b99e69a7139076396d7fde6573504df38b2ad3d4bda7af36169011c5f1f9d0dab59b652a901d9bf1f4773671627b6c6b66d895ca7b04f33e659714942e9469122436308fc7986ef582fdb5a13fe247903105a3f7e215fddbcc11c78ded33403b3e837782a2800f0f3fb9c88af85a93a721125e18e37f6860e46157ba64ddd3a15a5a66b9fd920427b32da039bd7da01bfda8a41330a98f8b5c43cb0d67b408ab28c4745a1c5d73ec31b994010c109639bc5f691b862352c012559cb33383925b4333c3adc8f68f7a2459b2c9bb5140f1ae2ac64e225f91c29572a804a6a6fa88d9feb1300cf846895a1cdaa92dafa2c06b30912768c5ba1c0fa341a660013435d424701f9864a73a3c9c6174639c0c5e703ad61f035e69dc65e65b02193e1addaa18ae2b7e1548cc8699a28b336080dc9e16083e3189a6459c53d8db56309372dc3fcc54a6e5134d746f6c4398b2568c6e4163a2b33b98b815bc048bebf59184356cbdb2cb9d0454122942cd57d505ead1a946cc5d77df3dc1c602e54d973e7039065cd8e9340b51fd844a49c10d3376024941d398bd4c1409ed16766559d41b77f21a6bbaaaba0f0fc4b52432a10f35b8821c32204c9ebd144ff2dc4d4ba0af85173d0d851252ef3a806dad1d37ee8fe39b45826f7946dbe12620e5124ef412f7ced4a2d60b3aea8c718df7ebecc644b4d762143013c1e2a57c8822067ae52c901941c1d0dc08ea60ee37c2bb5101b4839949f33665cea8511f6cc81ac19f01204c86fdd545d7b328a1814767434a8d6e7088863e8e2d7f82076f385123436c6e5cc7bdbaa432efafad46f881540415abe192f83561ff8da7cc80f648e9f57e28108048b6ad693438a085c74943690efc173c8ade00a385052124f2ada7d29336025fc98435eb14912782564650501c8c1161cf2e3c9575a0409d11ed2954ab4370fc72826c11d03b1839e053ac7a40c138b7fc840fa1f5b09c508894a61a465a10e9103599330999a889cc1e09a0052851da305f3cdf5b4ba0cf7fd4a2504ca52698f9ede89bfdd60fc134c712173e2d51cb5c45bf09efe26c5bbb01b0ceb1ff35b07eee835cba55eee2edd102a2d9b1a4f029f0480212d5fee0cd58bf7b99938928673c09066607b7b7925a6abb9f1ad45ab03e2f580d3375591237cbfaa87d5fda557c9476a47178edbde62263c8a533d9853ec66db68c15b0d924ecc0acb9f44ca8cec055d710f85122193cd6e7ad40a24da55fa4bb0ae9753003ea2d5089185a0faf0da35a4ce87a473f34ba54af7852a5552932c47c0735f1158ef9b20aa8674f483f404447d3ad68aa1c74c3eab6fe1aaec613a9826721a90169b64ae0b1481de7e3ec0e008dc0ac40c5c43f1f816719b3cb8b847583ae6a91acce0703bef94c6b8548101cef7a9ca5190ac26724dc555838f4f6ff13be2e7f8366dbe85e15cc6fcd75bdd27759a72a938f8a52f8bb1dc25bae2c46dbae212eeefa0d6e44bc5fcc7621e4c3c051cb3bcaa5036e6d343ae457ac70b78901047e21fecd6d400193ba2d7558f511d4eec51197e1135996372a405f26d294f825d286e684295a315b25b36af0d1a41843ebd3eef8a72a5deaa74d35bc0f316f207ab63e4652484ba37782177810a97ed60f7875fd5a85747626c905963d7b0e0eba69761bf2e17bf3cb075f1d012edad0152e869dcb0b886bfe11f0f594f67715899c2ccbf27f31965ffa360b881320bc1cc9bd192d9298bebfad9d19bac8e03268a473cc6c88d0f1d3fa3ab3151fc31e1cdc99bcbee3a0bb802167b0472798573012594818c1182872e2e2b772621841f0f0472f10edb1dad159bfe71c5aa0fd0a872ef0f07082ec149ed6c06c524a8a9c4d363d55864e4cafa00ee7762485cc7a5019c50a2c1b6488006706ef4815e9ff1621360f58e676eca158830bd5625e1e872c71708b163bb30210c02433b540ea737a81d664875285ffbd4a931291d3d856ee9df762474d93e35b58d73e09e501fdb84654a00abc46ba11deab872d8484c294004ecc50e966b6c0bc2f89109d616b1d49cf427194f9ae67504b5e3e0f7a5b6e148d93f71a4e0bad7778fb876ba2e18e630d3217e629dab25e426640d4e16bbd6fd195eea0a3b407338454fd738cc089e6dcaf32bfed12e5e9d3e27a41a476eb8bb9d1bae99e9868bb5bd6df9ca6d0a57587c14dec7b0915dc3df3919bf6328aff59aa45743f211a4d39de0a184a3889de7e299768721b035f4dc8e447d8af6e83720f4a5622334be0e392d0ae1c2eef7b93f7aca01cd77022be59ceb384e099e3e576551c42be6d998573d5819d6e7b8b5958858376a31aece76ba07097072a7d87bd01fdacf709e65f50e7c063e31b44714c5ec181405b14834be03573cba468e281bab601ba1ac748817115a6cfe736979fd5d1a7944867b1b723608e6f64c8925d71f9a16ca57e457e52952becbcde8572bd09179200e006678844368c309a60dc95fe225537078b648d0d867621bcb869bfd29699390b86f2582c31a0558543142304d29cf5312bb5a1ba59ab34c2e00dbc7b776d2753d809774ad51f244cf8d3419d5bf874631b19535f8fac1853454927e7a208f41cfa72a7353ec8fabcd03e59be7c42d36b2227085781685d5964711c0f379b201c08883614a80060036d0335b32f600a36776d88a93de5280d331fa4077cb0ee8a187f1c833cf3d585ca0b66942afe86282b86d343a680dcda016f7bfd5edc60823ac1a91a7fed1a77de8c70a8abb0b34a9a186455c439b87b1550aa4060d5f48bc35c2646c90ea94f808d4dc0125ff69d0a169e16fe94d8374535aa422d113779fc8030e0fb9856201b45916a4a9c1cad6a002445f624157441a78f82ad9d11085ba07020b70cd565da1a67ce9d9842b807c1789378ce4b72e8b5961e01a1504425d84be840e9a5ec7b2d461d9095d85e120a9c477905d24467dd80bdf5bbe369bd73686b555946df7fee2c558bbfeb0d7044bd39191f9f16d1982a5c3e09892796e7d8602154ef989edacc235949941c0769aa831cbdc9bb6aca2cf10466954c56295cf9e32061312037657173e286067e955b23acd3ff564e248f629aac4afe055f5d884595aa035cbba5bac105195006def2e14cfcabdb9aac021b1172b78abfa3b0a12e728ce4d615c0618ec5639a4b943c11ac34244319bdf3e984a3e45df32598e231b10ceabcf11d513a493a50f99f54ce9bc9e628cf47c60a6dcd6e7541a4fd1b9ae737648e0edbc5d2f85d6f165109795d4067caded387e56a4babb6d864b658a6ee2125c40a2d6b4efd26b60ad049bc780bdf2e87f05a147f22ad4c854914a5f2c841b357564f8db467692991c7b89d171f345078b14452945165139b7d76afccc9986c7faa1db5ef0c5a9580773094f72d311cc36b5c499ba3be8280f9bdd4389e6ca4fab1c2c8d98fc3a5fd0aed6dfc02e08e9ef88d526551ce2f7aea815796a633c41cc19478e2deca3c51a6fa20db968c69206a99acb476aba7ab51e673a8ae784803768c512118631a561c5181d31f83bd2bd1f428c39829af669c729ed0502a48fcb865d9f0d75d379b090c80c1d6a3ce8e3e4f424788a96dff3e445299b54f7d5146b90a7553b7bd21586ccbcb42a747421472225d08e3c7fda5eb093895681381769708f6b72fe13bdeac4d92fa12ca501f3c682eaa1421d6b725da04cabc7eb2da9b3981d2f47b7fefd848d3f224d229657256d71e00bbaa39ce031178a2d099c88144360a8ae7f92408a1bba64a15354525dd6064cd501b6007555ceb9db6ea27d2bb190642f932a530f1b4774944b260f352bc53b02e2b4890081c2a7e5484089884daad3da77dcc95b4d465a86923d6f35700d65012cc5f31c11266b2b7cb7d3e8908c816717c49d098205ffc73fcc68be40e527d3cb94504c4c17304607f62aad5790d8261ccef28081d06ec379ab137bf355175978eef3c8b76ac4864ba4fe508c9adc5737c8c715a9fef88a0022a6da4df267d0f35d1c7d2ddc8b74fcc50c4d444a6aa81e637113815129cceecdbf81bdc1fc2214422364394a424fac6a4c7b35998b86307a027580cc3f9c011db9f95068a20125142708f37127df5cab6c6475476e5b2f8538216b8c45d90e38af5c470a76e731bc3e6168b0335fa9899c22b0f2907938283f314769081c2932c8c57d7f67e94300c40ce3c4e4a26a75e902406e9e075006edda4c45475915f7c04ab10ac7fb7757a8bb17e5c953540e6c3bfac2e8a622d68160f1ad1c44f4122c25abe97cf944b6a74e226db9a1ef84efe046bc05d4b9371fafc85f2736c3611c7dd510fee91aaefbdc1df0f9d42f7714d1dbc4961a528058abb3f4dfe8827d66ab588bd881ee6968004e3c0909aa916656458c204d540b66d18041fe7a1f5b156c8a9012c5ead384a41b1a98aad92eb77956219c73d507a5a497b2797d3f83e9c23a243506cd1913920083f6d564bfb4ffd323a8eabb14937baea597967741bea3ad5fff06c31120b7dc6813ddd1801ab56120973c363237157fe3ee87c9b6399643518e02d1b87145c2c30fbe399c9337f1a68af055797b266445674a5abdc8b427f9244d44972048982c684a76709911beb8f8ab103bf7e1a154819552810f5181a1a780eea00906e93b1ce68d74a65ed12f1731133de06b9908f661ca49da577e44308bf0a20ed839ee0db909cc02a5d97ae317df2bab3c2d45d8bee81f59512d24fe7f871e292931e7ffbdf912d9debcb00928bafe692afa697049d00792a794ad2ccf433f07cfe026b0101d3090de47ca17b1fa560da14656f62a0b151b49889d4f474df2b2d79239646738db2154c2b5b1a86408e262ca7b4b772052e620abd84f096a45d00a5b0fcabc7b9bd7272add61ee36410be9de8397db0403f38f08ae4dc585573483ebd05b3f0ddf764ea2c2be2d61b1f17edaa4121a7b4c58e4ceecbd8ea536f2e5efb585b652ca288c236e98e61e20c99a0067378842e43aa0bb52b9a651ef538c12057ef315159a7e91d0bdfd4bf6793cbb1c4dff2e11a2ad827bf62e90673143c5c8e8e8c6d7d49c73df052b3b493bf98252c8bbb871e17c8d6ed804063cd23bf6e01e4549af93507facab0091ec7efe9937e44447228a25c7952fdaa7f0e409c633caf103a307d4a168e5c777536ad48ed718491f18603c4f583ad5cbe89895c38d989b81adc1302dcb5935b39c725eb649870463af2548486d3b1d70f034c05c7d5a6819877ecf49fddba6c92efb629969705425fcd9a4477e7cc0d9a30c52c9b868758aacfc82382eb9084170c3baba36c676d0ed4219204497ca2e29aa3e96915f26495429468f5b0918fe3ef843801358c57781cf4e888d73ff120374b10a111201eeb35e38c6c338a6c6be369c6d80dbf07351e4f324bb0aea3cc33c6baf5768d184c387220038771d46bf2db3c77890c388f1d950849369eb5c8c48775e444210e6e966a832a1353a54a296b7b0b5182bfc2db08f1e2e69d3dee47e03e217200c3ac785d9cddc7107de1f6593ed00227a6540d0b08df4f05981529e4605e8294d39a78fae0a3f484e8d878940969e9632cdc4531685cfbadd87abf301a9f3e8667054a73d9a369f7b03db5089b0b3bab53c474683b9faf91248011e4ad89bdf8158b738b6db722b7e356fe6ad324540af95ba4d69c79cb52ebce7246844b2c0d2a87bf6d2891f6c6f411784b5dc8876d9073bdfddc7f89f830ddc989e78c6239a2d0e540acfc0a22c8107f1a0e4388189b6f42ca0381f3f97a6a617cd64357ef831125dd81f481c8b3585dd66d358a8f48d5a1cc365b9a009a62d13e07e766dcda0641c20c8fec8d79dde8523a28d659c6d7a58cc21106ae41ed436346abc5caab3da0446fd8892a21741d3a78b3e5bf21c4e1b5f799c1a39a75a0b0eada2ac71ab28bee52a0a26bb8ac2c4aa4550d54de880bb8b174fcf5614f414312397ace89ee014aebe1fae4a7d4f0b8140207763e9997f2af83fa995cb83ece68f79c2723ac1ebe16bb9c65cf65b4a4047372ccbac6beca25510ac286875a31066ea02c7b0d7d93bb05cae55bc0dec238a1b31e1754298ca2a5a4b89094e7c04c0fb8d0d227d26a691c60b4dd9ed9982e89a08b45a628bcdb8705f313baee62bf203d1e4ed3ab6ac9ea19be555c4fa22db35821927bdd0a217fdab0244acce9fc2ca558275895f157b9df1a5abb25857471417123973395cfdfd2909214472acc9ebb7fdc1f50ebc3f18e50c83b9372926c9f2e6d7050f8f83a9b7df4f824264cfa50aa239c6a9745f9590bba3ce67abc223e70f9eec1af4a54298d8bd3b6aab9a9d16e7b9fbada051ebd5cc19edad61f42cffd74be2abd09d0ba316dde9158282d7978a30b6fd1c3141f8ed31e68df8aa9ba0d4c0bb92f6db963da8b5eb33b6337cbe1cacc6951894d25df906a4bffdad81cbebc5e9e6b9a877de9c000ec5b3b750e708eefab1d7686a5f22139669456e4563f2cc2f5b2a688d1026dfc8a2ba5b9185cdec3d9740392c7336a4382811e0a0b629a6c82c916ac6655915e002db266ba07146186172f0d48ad3a1a6aa31a001dcaea99fe70b46f6ec3a59e113d66a685d067014799c669de8197f8bf08fd4221cc1894fb1dad7f1dd8ec1d29596afa87173d30d185756d7074b2832858899c243309a2c887a90600ce54c8aed576e9a816bfb6e5f1a6d37c8685230c6bd77ed19c5d268584d76965ee48962c57e506d1ae92103db06dddebdaa3381b3d427c8a20c0a4d01a2cb050d51db2bdc25ca8a9e7f809eb0c74bc1c82aaeb47fa3e9cd0a9aa1d8ae72ff81ecaf8b43d97b01f4872454ec1eea66f85590c5903dfe7d01822507cd1943d0e03aa29ab940f8e40c6d9f1a8298237613a4f6c909735df124cbe03ec049ab38d01d0b0a1b427e520aefc4a8f649607f6a718f524a25796358167b04617f06ee51e6b203de0afecb4dd8667bddfef0d01b1079e384c476e4c7c0ae45267e05850b465ae95abb985aa6ee867ffb55521f1b077e3a8d4b99d43c664fee2868c26a1d324cda008d3783e7e57baead162243e188849fbdb0bd57942d4029b92c607e69adfef4258be39346bcbbd5152db35b89aab2d2fa410eef7c9cd71b5ea126a95d94f5bca9f3691c9632fdfd0e1e57d2c40240fc24d7287127eb8d1f4577762158cd8b8a8534285b496c2de221a16ecefb3014b1de06174ac3f700abd9063c6233e67cfd719e29ac710eb1a10f926d3ad8fd04243229dd239032e56abdb9fd255ac800b51a95eb640a880d3aea6742b8678c2a09b0ae867b32e849d40525ef0fa7ebb535c0932001ca8b95d8541046cc51f7c93f1100b417dbbcbbfaba4a0d747473bee7a2c6ee3bc7d250d0886e70d49aa62561a4b75a3b87eca5c7fd5ee675aff8eb0fcc15b274c13ce4c34652f8603fbdbab0a41af8a899f709ef9f03d841eb946f27631c9e105b05f253f86e8cc52e1dab0df0d8cc08888478499c3c68b8560f18e3ab37d9529c197ee2373fe487a08b01304922be15904adbfd9adeb3c7d37dfbe267b4d43216ef567e4d14c94a8d9b2d08e825eb1420fc1c0881e93b7ee786227bb6b846d12f1a7e61269bcca01ae4e3fb303f3984c6bbae58e30604aeea705f6fef3e30d4b552f7779d1beb515f4e2ec45b6922971912a868190aa8706147a7456c262447cd05c9ac5adfb10b58ecad704105335cd56d66393ad866d5602ad3f389a8307cc1aaba382cd9843058552d4c4baa8085699620ed6428e1420dbb861665740fa4c71ad5e61416ca52a63aa0ea6c719ed5a71377c2890612cf9c545b1f6fecface28abfdb7ca493115e9b0b00d1c70e15f1310b443129c45c0a9e2baaf04b07b70973255b1141ae9ac6d10115b7c7edeac0844bb65b42095f247fdc688aa219feb98782bb51ba7039271d83127ded62455ef571324ea803f6f43a71cc4990b4f22bab82d6ed8c04e87cd10be25bd4330b6f3dde54986274065d8bdeda899dc6ab21c2779b41b97c61b5fa3c94fdc472776f15685b02e87fd7f86811a8df65952a37e9c224dc58ca5716701f7a9d1efc93bf30124e6f456bb20426452569cb4b37da7c56ab781fa6f52c8ae7d33706ca1e95e2dc65721c7a4c9b6cf4326a8ca4f9a0a82a058165eb0c98da816bd1b1fd2bd66e2dc2550c26963b586205044570c2acb771b568e42ea3819044e1d1c2f551c2574f46493b8e8f7fcd0d183d509a1a555b3e00726fe5c6b91495ee0e8967adf129a56c4dfd547011c4124f8926286c34ac923d68ca7ce4c8a902990868ee97998d465fc553109ca69b30633c69c7a25a76c0b0b1df712a26228872df7a8f8374a0cfbaaadee3736caf7311bedbaedb03770020bf1e40b51418f6c7e711d485ceecb70cb36ca8aa700becb7065c37b1ace5a1b14b80d02e85b04b8ec79bb76b97082b63b1814054e8cf615e5fa09885c6c26a1ccb2374f5c71b96201aaccfaf21dc92e57770490b1063c6b7f7c21570e1115628cacfbfd90bc29ef5625b4b9d684c8fcc39909ba8512c0b9eeee9e87b640665176c617008278ffeb97488e453092ee72eb474bdb7bd99ef7defe0a1ee535543616d1fdb35a588acb0321ef7a5558f98a63610fb5fd7483acc883d7761ac47c4c22f44d1ef2640a7e0502885a4521a941c59809552709bb263753eae8073f0fb8f8a54ac9a2f87119d6a903d9270ba814c1324146eecc4214da4287949591e9c22412540e181ab4f035d21986fa76b0d14b15cfb34a20b54ac9c363b569fabcf839e0fb074aec2e046b645cf5374b13b5c6511ee493263b196f945bda90a014056810ff0e8703d72a319484039a3e9e6f58305816a503c58e06cb4ddb312f09db52950f07315fa16af6488193252cebedb860b08d7b14628ade1e26d7e67c862c40394e8ef3c26142d20a451f295c27eef315287d6cdc4bd3eb41d867eddf846c29f79652ca94529201e106ac06ad06d656d7b60a5c2ce079d09bd4a072f80857e2dfe89e7a866df8a4642f288078fde23b6b08ab767584b3a9f079c5cd9c60ceeb76d8cf65845e7dca9be253de149ff2a6340d35536a5a1be20867d31a122e4d71a5e7d2ddddd7d168b59db45320ad77afe6302e3142329211fa2bcd7c46ca81add474c0ddf0e9c765694b03287c4be096c06484fefa87a74fcea7b4b2bbb553dfec0fe9e73464d6fda9025b910bf3b8b460bab8b8f8836d59daf27c4f7a8542179d560ac6e72d237cefaa0442e2c3ca4c871c580a4b49c00d527c80e048c1712543c8da9f0167d39a105c02424a50f4e82e2b77555b25ebb1ea2e28be67a420fab1b47d706a66b21cd508c9a892113e7a3db7daca48988cf0f9156aaf29f9563242ab535b855caac845f2cb1bd33df692ea4e472eeec7a8ba9ad2cc67a41cd80a2b714b2aad826205754b507997a8fcce75a072a96e0bb43c2c4f9667081cd5b9e7e26af07735663cec0005027bf5d0356609b8c147871c24101c1c1b826c85190d69bc66a949c00747c3af2403cec635215e2e20801688c4ebd80abd518b0b0e16924b8e1c2b1b33f7e3bdbb8ca216bf8bc4ef6789d563758d164475dd0ff72e75c2c45099aa99592a38958ed165e4c868d4c212a383aed41c59753338b2aa324c4a8de76998af583574897474a07246cab1025403d4ad006c79a4dc05e2010282a16e0bc305dc0cbf114e92485511ac8f09748c30c4aa5153f2c4516151c8b930ab4bdde1123987101eb45efbdbe7a0830e3ae8a07bce5b56d65c3a93390d563a17a1bfe7b0d93989ed76771b21ca6a7783ac49af90c839ac64814a622e74c5958b7a1a562563954da1f05c57a5ef1999a3ad3a279d967327281bff9a0d7777df753424d27befbdf7de730c3c2b9e16733ab669e68fddd9c6a3f21bd8fe5fc130451606d657bbf2aff3f60b783cca27dba47d94667034fcf04ab2b5a60646490047c35792ad38281c97f9b7c2704fa257215e84a1a3429dbe993b6e865f4a0cd37928c08ee0c58e4e6b222855c0f673381a12e575d343aebd6ad228767476749ee09b19c5ce3b61bee369509e0a0b975574f76aca126e875cab292ebbdbfb1d4ee80e1d3ae4d1808f54b8ebd300746d7777dd98527900ebccada8ce5fc7e0c0f0416e7f311b61b3b3b5a8c0812b84bb17ac2f061615704208a1c88a18e4402757c0d6ad8b1e6aedbdd86e07dbe069e69c98f0cd5462e634019b394646558ac350d58f63e10b2687ea5dd5814f268b5fb6d42351664c90c031555a7c09e55799953141429ae4e7e098aa9feeaf6147ad6271b3bae08cb0df255562aa621292ef8543ac1410d5f72e4b126b6b475e847f81f818cc46573b7b03db77ce3106cbedef257c7789056cbfddddfded74550318dda2f4adf874526b5251ce57550e56a59494523a85a82d4b2dfeb45ed41c4208330764b5dd0a922b2fe6834bec699e4ef3c47bda9c8e33ba8cae14a5b05625050749a4efe12b74e3b1bb8771da81f2acf023540773ac94e5c4f2e112bff50357b29cf48df5e3c33616d00f9c8d6506cd81c9fcca7a24a469bef5d337561420b6b1a898e16c2c375c897fb59fba1d7033fc56b64bb819f8ad287d53d3337bb2dc70367b448d15659958120c609efa6696c0b92596a873050f053b737a869f094e4eec896de6894b27c0760977339f7f3b30e11ab135f9a2d0b42af99790a76debbcc11c1d754f8fd9578aa898a78d9a8847b671aa24fbc9fae2b7cd91b3bbdbdf7bcfddddffb9bbff4bf5f71ebbfb3bc7515be31f2e3d312ad83f46e98c1a3570d8c0515b7b415c62e389d21baff31375b8c44f489d20d7561c0d630fb54365063b6e39f452bd8744a9430e3b3f3b51f04d3fa15305a34ce28152e4eceeeeaeb7e664b08ee6a5f242b8bb6f035348efa154cb3f9de37ec06f6c0cd219af06f7101cf5690fe80cc8048e12359049e98d67e3a951b951282e3113dea8077415e1dd5d1985258a26eea52ee926e2a86e860b6c834d2a37814ef04d338152a351a44a270af07fc7c3fa77eb6ed9eb4aae69156048ba3bad02b6f53d57e2520b173b752b5567fd387d0fc228ab28839046d560547e28e0f679d73301bc9e139de212bf13606b5432aed13c83e8838eb28a520c2955950dead4eebebf6f10a4e24054afa4921977aeaaaa4a0aad6dac958c5288c28ac843856d5e28102eb14c816d38953b87a9548f843459f0c70626c195d8c70642e1123f6cc3cdf05719ace266e0873e50d80606712909ce064ec135900f6cc3750f2a77aab57037918965267e509989c844e56f2648d4989c9b618b480c801f02f54d1bc1cd7015279230881f0255e6f71452698ba5be1f3037f37e5b5618c436ec4aef1962e027a4d6c32aeea60d775382821443ae6d2cc263ad34794141a7806de7d4ad532f15b2c8a023cf17bdfd5073edfdef3d290f6e77773750cb130cb643b1a4569843199d4cc39afe013d022ca4b6756989b026331326e16fbb496de3bafbde5b74328fa5d0898991990c6f90d536f9cf0931f55391b6b6bda5716beea3760624e6df881453dfbf9b203ad5872818bbb63eb093282c73b05116959f9953110a51409111051419329b0f9e5495559b53b3befac9046cabe51bdd567e59a5ea8a112b53c07e803c5209ecc7fd88a99087c80c758d7890a7a6ae06931a95816d2f9c52f585986afd381ab67e60523e78aaccf73a45ab6d23ba21a9f2a9923a3722ea7cb73584fefa79a1816d5b7f1855f94fce19daddddddddadd61b55996d3bc4bfdee5d660cda921a195c6a04e0dc648d7f95da7f6c3a81e596d1b6d49ba4a50b53424efa76e1258c1448ee6852e3a2d094847f35e02d5caf01c13e91a5f9f2a13395511cbea576a706015fdfcd9046cab4814d433fc382dda8653c3a26d352b2cb5adb2344c5b8ad115cac2a3d1b7b47c0bcb8ab6494cbb98a9f01bccc606f16f90a5559ad47e7e7e76dbbab19418c9b99f13a7ce13aa67f8a524912a6d51fb95d29f9ae3d2d4980a37c36f45e527ecc58851a4c7f19b7c61d4a3481a0e291f07f5a985e915a6a301cb91aa52c73e9c1aa5f32d2b0ab695887cf87d115907df254be5b77e2f21568e54e5df5856d8c04ceea19522a2a32e0d6af51b7cf25e4c5d0d078fa3f900b6d1a0202b8bbaed5e436aea6aced13c1c34a8f2478d6a3a805e1993bfb91b0123de649558950edd8f24f2b7fa16eb47f35d9edf723f92d07ff991e47a1ca127893e07f62d54df422673903288237b2f99bb8c326e592cc34219cdacaccaa4aceed1e136f2a91bacfcd0fd48525dba1f49aa57b3fa5fcf6fd1e79ff3f969a8fa5bcf7f89aa7ff5fc21acbac8fd48e21c4d84a26c1d0d847f65ed68e0d3ccb397414703bfcaa2a3812fb398558ec6e5d8d7c6915165b80e67a5adc8b2220a5d5483306a1b1224f53d5c4cf3c7b423579c6a0e4dac7022c6366a22dcee7ac89d2340f519aacf545f59c609695b4da944e5052a7ca8a43a5e5909248229d22e54fb6db861ddd6b0b5dfb435c0efb7e106af39cc17e5b81fee49eddfa1dfca64329ab98d37c020901cee26c8f53d4080bba135cefda076d436599d46175e68603768a32660ef49706570ad9fb2cdd6b0a42e31f9bbbbe8615153dbc59f0e3a2737c6df81e4063e54c72a7437f29db6c18f3083f0dff74cbb8f9a7c323e24a4ea5cdbc818637c323af750739b10ed560a2be51cb10dd311750d6b86ab21a1d59d0c73e1ce9d736de49c73cedd9d732eca6c9f4e9d36ea517fdce0bb6e52f4b8f13968b273f7f760949665cdeb9231d8d5ddcccccc5d843945ddddddfca3c69c226ca973cc8e1dd73c87d2a90ee6dc3a29a9c458a23812bdf6e914ceadc3569c5b9763850ad331af4c004b1918899999d94a49d9853c4e589d3945b30968601b7da16d496566cc394706760686b19881b14c012f214f604e087f6c04c41d8ddcb76fd9578e301d4f919312339d107f300249a0cabd35e925c439ec72ed9c0bb90f8958cac0f6451bc9b96e8c4b8eb4d2d29cb570e69c6b19895c2e21f3c5e5e5e565d4c2f2f2b282bdbcbc885e42d7cbcb0b7d62fa73e7ce9d3b7777ce9db34c8139afa1ef4187d23f469628d8864949e54e4559a6c058a2b04ce12c53384b199873ee17768d204f75cfe2040c233dcb1498fb736c6585c539e79cf3e7ee588e98dccdb284d53ae045133fb33a2f9ad862778268a28aaece8b2678aaf3a2099d5a9d174da4a05ad579d1c40818a0839c275420dbac9493ba512456ca2d99991a18f579c284cf13545d1c202f4830861724f882045a54d6b440238a4a80eab440235527bf029e06057c205c6adf8014fef03983a1c18def2ff563fd248c8c9d9508bfbb20dd2998ceb9dd023c5f33e07b2b376612c6dd8dbb0d332939988e872ac6e7efbd2dbe7f7519815fbdbc8ac4afb4ad5d46f7f032721511021d1e49a3c1780ec2eaac775de97bf73ef47ed9fd98ef439ac301f59ebf7765349b19bba3795fd55761bdb65be0dbee52c6f85a73ecfeedeeeeaed1290cf184784918e2e1e0004989b323e81f64ea917ecaa5452223ab580616df57e71b37c921b6aee6da0f32156a47fc9f46b9f481c90f7fffe11b52694ea2413a4251411e4cdcbc84a2aa34e7192741eefe99cd044cfbc14ac9dd004b8fbbbb3b7753c9c6ab56726ce8ef391bcc6f096cdfebb640036ce58fd819747fefeea3510b4e532ab8bb3b8e7b4d753ddeef3dca86fb4a0a463f98e3828911f8d44d92625e06faefc2c8d230c2f8413a66526631c6766bba532ef97b8f5ed46dfe9e83f5c5ba69a03e0d7334d64e6d5a549a2a9884441dcabf0094527e8432340a758b442291086651c20fc1985597bc74d878e1b068c1a205b6ef926c15ef2cbf6d1555549ebfb3352cc0c9f09e87505fdd76678bbad1276414df552675703bb8d2fb1c1c8d6b8bc556614515ac433780a24a462f99079e61ba04ec693045e2bfa8d9b0cbc37c20e8db584a88601bb94c80500d0807a1cf577c906a416ce0928c4ab8c49b1303882cfaa5c43012e9bf54aaa92ac7ee0e53448329b2f5c87b251e08323020241ada72e9e3654fca02dbdf48a8a9c4966d9466245e29428693b9234bc3b49119d8266576847fe32ec318612bdc0d00ab198db2187853c46a5bbf354283c4259662ab8f0f2b082574acce11c9b26c8e581fbfb2aa7d9790aa8a9a7b254c9704735b60f14695a96e0b2ca0d4cdb677a5524ded76a46fe70f7034fd4a68cb844bdd2ec5a4f6ecf7dc907985582343bcea624c27b3c9914371368f8ce5018604844badc99f0b298dbbebc63a26b420e1ee46b661b7e06ebf6602141b18577aeb6c48ee3d97d5b983e95fe2eed79d0c97b65bdb96876a9b10431a9e1ecacdf8cfac49f5a743f2a74475772aaaffe698c0e3681c15b597f378aa3b0fb0fe0d9ea44c5d18a4a106f472aa6b30079eb4c0961a613a1a300c73a7fd52092ea3f30aa3e659a07424ad49295b313c333552129873c9b2acf767775c65a42a8fb8d37f2f2603014665a8c941d550ebe9d4366b6bfb840e77d4eabb54a9cb18e9725116ad62c5438d6e47953b80558c9514e91ea594525652a4c8e8342781f46dac86ae50e80c0c26f44b6ae8f789b809b1b6bec62c08af9b8322b796da2fe52f8c11be57a8c1c05f527758791a3672373cf04cb3e143e68c2771bb95a7814bbde21ae51293540d8988bf921a8968d2c664259e592a638c91542d524cbc992faf808d5c74256224a2ca9f726b7c57a2ae4268397418477566471c4af92ea52b5573e98fbd8c74954a6a45448dbf915e0a70cd9d9c2affc484b0c954ec47bbbbd8c79f31a365e05474df5f3d887645db375ca68a32a0d1a83efe8d44229148a438c2481a102048648cc43859c38cfa3418238e09015b2069605b33d9960d06f280a0de68e7b43ed7f60dc756f2c0654f88ba4a6a44027683c75f24a42a61a266e429f198ba95984b5cdaafaaaaaaaae75e6f1c6afe48483c0f08d6c3af2cf7835eee87e8e187dc0fece18bdc8f95878fb91f2c0f7fc5fd6879f82c5b831c55b7046c2b84dc8ee6fde58ee67de8c1e868deafb0b4682b8ee63d3f4bb692891c4d3f9685b2cbd1f48732ea68faaf6c3a9a7e9a595925595686eea52cdb6bcc195fbe1861c6382411d5f7d4fd9071d70af4b7f9710c0ce6fa25eea1e3baa2f9e895c114b93ef45728946d17115769c649b6ca10aed5bbcaf01202bf0b1e44517354d7050f5275524ab37e2be3cad7902bdb88b87a0409fff5ef2fed07fea797107865cefaeb22e29a84d97c2b08215ca77681035475d5852cf8ab1db1349822fcde7a1a2d2b9b5c6955a51a51e5af7ccbfde0ba2ea7c6d6bb4c3a1a8a5dd7422a4c5e72aaef976451fd830872e46930450c50fd0d50fd9db75da8fc417c75da013c54f983c0aad37654e732aeaf4ae56c2bc20821ecfa3dc956f12330460c50f983a852a7d38d53260cfcd772026c5fb6b583c88e2ab5243bf61a82d5241b34e46b9205aaf26365c4949b842ff45ca480f7d67756bd95b9b5d785c33b40759791f7db01aad4921ca0ca9f18edb5b83d4401ae4340cd083c02132a153e8c11f8efe1a600f8d5b66d95ba55e08b6ad45a545d4b22aabb564491e2547839695441ca0f30caa5294176f0458d0f5d6a1b7c49c0fc8f40f831c6b8c5f8b2aab22dbe8c10461c6015e716505a66e66ef7f758a680314a8a61efbdf7dea3ee1066d6a474a965cd397dcee6b973a53ee968dc7bafbe6902e71c330ae63277333373dc01c6fd6e0c0d6688acee9da3dc871eac12ee0ada4389800520d1841a14d6d74c0358ef3e48df4ccd079ed9df651fb8c0360765877650eafe34edcf59495969a493c3a88ff82e8bcf393e58816dd4693e706ab69a8df249fb552561dc5c8a9f3047ee9ccb5833a2994b753d46a6ba6b1bfcfe2b8687082c4b4a392d522329556eefccdb9b29f7934d225faacab6c773915cf074ac5f54df84b4b7d333fcefa12a3f272e70364f07ce09efd3016b9be49ff01f4fcbd7fdf2f91141b0bed2b6f73cb3f0dfc8d7f9ba21eb146d562af5be0f7f3ff6af95f2b7d77b2d37094f0404487d33b0fc36d392a3ee5e74fe868deabaf62d1a8bb6f2a277ec4299ab9784fd6fcb51e1c70c0990de5e5f0115f59baec45ce25d6d7b19fdca46f4fbbc72972babe2e97e583374611616baa625faea077ff5a1a73fe52584ce2bab9bed5b6faf21ef63cc908ca0866464440026f8a209b55fb4100d2030282e84cf043acae3b1800e9a08414453b1dc7362e0a7eebb02e317d9d6ce6e70cd86246c01af95eeeeaa21faa4bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbdb8539e7b464da7bbcab1e6fd9e3dde3dde3dde3dde3ddb36365656565a5478fb7ecf1eef1eef1eef1eef1eef9979797971eed3ddeb1c7bbc7bba707080808c8811aa80706062646870e175cd8b1e333cfb2e6cdfa851eef1eef1eef1eef9e1d3b3ecb348d070f991edea347f3f6e8177a9d78f778f7683c64647af478018692974acd5bea177abc7bbc7bba5f68eff1eee9f1420fb67f55504c22d9aec01d86fab1ea2f080781422720481a93a5aaae6fe6bc2c2b93d55956acecaa73349291147b69b98c1c198d58565ca8cb1584107f49ea9bf9ee49bf4148b7ec4543d79097972b0821d6471c4f42085f045fdcda980d3708911812b07da10d5d8e6dfc2251c73617843f570ba693d9f607fbc128a1acac499dd2e6a54116bd4222cc31ac79b1a010b6c2d292f2d9e20b9f94183fa9202a6cbc4125e83179a720da727261a244e57fc9c14142e5f01c399a37c7c949155838e1d922c5d351fa8c56a3a3341b1dd440a8264c38d104f584ce16fc45e5ef207cf31f2eb1a75a52d8e62c433be85fd775d113ebf08e139fa094cf0f14a0e639f1cfe9743a9d180a5094202a938787878787e7743a9d4ea7aca5a5a5058651905c2ad8899453e226299f1f2840a9542a954aa15028140ad5403cacc3c3c3c3c3c33b3cec8453ec63792a954aa55028140ac5c3c3c3c3c3d392c2606849adcffe40014aa552a9140a8542a1500d140444854f9cc3a82a954aa55229140a8542a11aa881801a88870e1d3a5cd8b1e33fcb341ece8347f3f26059946cb23abbb33c3da452a9542a854aa15028146a7d7e160a5094542a954aa55028140a8592c9341e3c64647af4780106870186e6856145278a0bf2a0d4a252a9542ad564757687679da452a994a77ac8f478e105186028956662f0186268de18b01a89a393d2f1d1713f3a1ed443a924a36041a43fe5903c287a10f4a0e741ed41ee412fbcb059e9895214957f666786c6701189816eb6bd2a2a3f002e225b1f8f0ff7e1a3797d38ed892a0f11604fa7674abf6113677329e97e7edecfd3793a4fe7fd4c1842d539e79cbb5ab2285dfcc3362e0d4f110883e7746fef36facd5d2973346af1edeeeed66477773bb7bbdbed42a82ac6232e23ab659c54cadd20a4412f57c9188a0d85ee119251bfd72d869432e67a752e475cb8fbf953c9f1dc01197c5e031c1b8cb0b303ac5a819b006b273a0b5994a00ac6d57591451375c3301f3cb324df20953727b3956a4e5517592451192361a4eabae041944aabeb82076360efc9947dc3fd8e062f489996983a5b629a8c4413530b6e90639abe7345ca341f169a982654638d1c8ea28920d394558c00c849453b5b1b3801324d4b8a20d39cb4b395c11341a64977061bf8b98ca062c7d4590094c022c83445b4b335038a11d0c034311238e959c215291367306698260bed6c5fc0819369a138c3c7b43058029069bad0ce36d5c68e69bed0ce568a279c4c13c70d82a0c489d4c2c93461781dcc175f5c7132cd1c36704308a91c3030609860c03899660caf8bf1620c25d408da42c7345ba8e209377c60c068e13901b31f938429268993a933989369eae0753a3ce42e6d303175b65a3c59c2144ea609b357d0b902d0139dc1e8d03fa58029e2cea8fbee8cba1a8c08eafec9e4217f9c107cd18394696e0fa48c11f49c70adb3ad011486f063e20c060cd3d4413bdb228440c7345da09ded13537c4c7307edec4d799232cde7541646ec641b0233bc7052534567d815ae10c5c4194c0c4c9307edac881d0309275311ae0b2a3f3ba67ece8a8849c2d4548687963d0f1e3c78f0e8e16a429c39d3922d827986e0a786d26a13a2764bedc1c0e2d74a4af954fe64323cc36f65a49ee10783849a3132beea9d8e4623248c82fc40aa47aabf814b6b031187990d7b830d6cc3123e18a8c5d46f29318c44aabcda6e9822befd40aa47fa97547e2ead93793273f449299d9c01a54c44853ec32dc487cc017c60ee3c53c3251f491ca0f21fc1cc39e8f01e902034ecdbb710e001b3e98ed137181a80dc50b7d5a147153ae6eea30ab56dd1681819189c21bc1e5920cfbd33ffa80de1d56947fcbd6b6484e0cebca1e3645b0d892506221f4829dfca16b3a65f3d847289a558fafedee7ec19b12ab39839a7dd352ae837e0dc9f17119ced079c7a64716a7cfa547bd790d5e4c34b48a4d90f3875bba1fa76691b4ebddedfa2a994864a7f1b55ea52a98e4a7b548ab9506dbb7ebe4b36caf65bb27d966cf745fb216db5ed7ab71e86ca3fdf8543ac52a5ca1af5c19f99574bfe80539f7604e397842f5018d80e574021756f1037a33bc8efc003f7e03b5c01e5793f929362f4e8de6190b290b3c36f3dec90c6936298758030473cdd0c8b0b283f8e8b30a2e0028a12cc84f57e0909b28285f6f5bed741e8bb0bc6c8db940f979889fb219fb9061e5606feeaa9e8350fbb3fb56dc65ed9c7f6572ed5168bf941da22d5986d529471a0f256614515d7bbe1ebba4831104106440002b6395c62d9c2836d5b05e74c6bba2f7ec4601b981984f26322c0fcfdda14979803ae86dd5919f81906a36ca8242e1994d8a91901000000025315000020100a078442a1583c0f5445ce1d14000c7c8c3e6c5a3a9747a328486114858c41cc18048090010181999101090510517000c63bf1835ea19db37bbf953e049dc07965895c641345debe40c9cd11e770c9a0b6a8e9fe05fd6d169f540a012c3d3ad560efe6d6586f334ddc2c7723bdcd64ea36b9ccb13273e30dc135899d4c666ecb3d8ba599ab6e92db1c2b33cf6e05f72456329fb929772d96669eba4d6e73accc3cbb115c93585166169fb9da3a0c41515b91abe469a67e03c5bf388246330af05e774d3d33c63ece837b85bb501ab11af7e0b6f28e14c618c77b047c1aac79805a341aff8a46fa4997e902344a2df4686a6c7205ad122b7a5a35325d804621951efd5d5407d53f437c2c42ec348c006f2bef4661c6729c1d14061dd74940b64148000164e140388748b4d9443f8b3adbf14bada4b651ab9e7bd010a4420f971561c5e5ca6156b8c46f414f9b46a65b502abdd1a4ad81c10da00c1a1a57b39da061a32fe39665d30c35090322e63afb4befddeaef84419b0f0b9d14a5452e4b043ed96d9dbb284cb17e8cf4000ed919e491d638b2d607953d758f8ace115f37933c9a450e24d1b1428efc0b3d5a359a5c4157a4df525fb25d51fc59cb1a9dee6f04076f54cba787c6a049b6685276bf6b2f565807824d9b671d6c22f48626fd1c0cd5932e5da6f66bcd82c5570ac431680f47f5c91e909bad0d38a123265bc478eef80d9c101dcc52d737d32c3fd8c748004dbec97eb28ac8a2ae9f611d10366230cfd8d9ee53d6378fb77abe557405b7a15f8ebc01c19cedb01675cfa9ce3fbba4aa25ae74ea28f96e0649cebd604aa651b1fe196d225116b27ee870bfda58149bc0dea0bbd13a88c37ce011344806af88826f3caadb1ea37a3b87aa42020ed2cfe6fc8cacfead6b69d81c0cf5ee43e2c563d1355d3e830b86f0f7a933c8d4c8ad614c1b2ff4a6df5b27b59a654300996fcde3e588d2b0981e3e88533632c801f254bf66744e31394d54ce33481577181b7bd2ec60a186691faa809907b9da190b9181a2fb3dc8a732f6c1e77ab8eaa4b44878c0ce49738eb263341bfa42986674a252d9ec77d9bffd2ce030783d7de1361a5541d887e2ed67f525a7f781d36ae615971c114af0369dd07528a5365477ac0010296b5d1ef8fe80155bbcaf1df5ca7b4207a96ac00b10b082b05960b795b1d0ed373ae1b53a5c5f88036b9cc58049737aaecfbf453529ebc39c5eb967db7e6091b2e5f3c7a2350bfe64567fdcbd15da652b63a3647f8ad6540e519b7f7a995f24762ad81daf00b666fe585453c9556d3a6f2abf902fe5ad32e42e65cb9fc5d42ccc27acbdb913acfef93a9f5d2be204a1a49678f19cd6d25e826e5108106b9a248f2386ab285c751667ee795b05fb4d73f8f34e26571623f685b4e85ba9c4b0779f493c2aa0c8e61045f68ac9265ae066cb8b42f16059957ad538a215be3e5be3b01c97b40cdb92eb059b7589a644f060d273ababcaef6556336a850dedade3944b944963ca4664f5c70f40667d6320501097ee14915eff80b89aa42df3c86fcb93a5ef73a2d372d34b9ff5de570a26e5c49e6e8f7463a7d41404a5a7eebd639ab3c832eda8bcba5737737418be5a39013288a7923271aeaac92c67ce90ebbfd24356cb21200073aa658f65ff01a194f70d000fccffcf50f8dcc7c12036e8001c577b4fc6efda53f8e658f12d5bd1420bd44a77d3c78339bd30bcbb0d81b2e39dff3e3b1a30f9ae717d840853e9751f28fe2e78dbd50bc3facdbb7162993d1dbd1add7bf02b90d7ce448ecc5577a733d5f064cb3537e440ab8c0d52ce3aebec199d3cb09f5dfb6c2e2831091318c1b76c6300c3ca178d433b321e82c0f0c353f82d855b94bde096a61eeaad6a059f54f4e3b7df9b0e34eb93d4bdf11aed3c40923be3f23151e6d3ecb62d14b246c07cc9acafee94c85c286b48618bae22fa803813d2a9931c076542aa0c11c92efbd75268ecc28059ce5c53d62458acb09b95ec98e9e4ba5e3720f664a6d51190823d5a7dd34c0d1eb56fcff87e5fd87429f432c98a5be5872faff0d8d934d1cc2be49a6e07dea35fdeea8ec8f0d24e71b16cfc2b4e91861df39139d828a6c0e9cdb172b36f899b4ab72b287dea7030911bc64d66ba5dac2b8e0ae3d5bce3a79066690857b1b34dad381ce7e27cf559d3e9a5cd6cfeb2224466ba33bcace0023e1506998b000c3831a896e511180c08a8ffffd10597bd3fc4b67ff4647bedda51d98c997e73eac9539e4e4a5db855a9375b67e140c5f9f7a1f3c109ee8dcbc7c49a9abe6340dbe1cfa7dd969af7819904d0f982cbdbe2738b15e497c06a8edc16d50f7197b35b270f5439b8f9c087e66abed2eb3a4be677892f046230171d54cc4046c83cbbbf9f1bd9b1f1f3a953e7f47e59130bc852a376ac68ec4da668bd84803bcd7f52b4dc48b90d914d272125a20d4186c8ec47a7f8fdadea43444d427a54eb91897cacc147f0bc16376e8f8de66d62260175bfecf29677c2686c849337bab55ccfd587b989a735e3b29a96c1d938c52d8ba31804299c7be3799909cbf48b2fb77c0460dbfac48664e9c72f01a66ea683680c0f464904e21ac9859fa2ccea66b685a29ed492b8eac978d81559d6ee04d2f2fbaf10de0afc85488ea06668a5026dc33a0404ab43ce7b7111c8bb36704192e09b5c8d3d10f20ab6ca75a92d7ad4f7bb2ef9395def43171069d33a4c6653f3bb15223889a0de9b172f5a46b6a2312f90d47501b7ff030591c7e0eab172ad312800bc45a795088bb8ef850e051f3e02078409ddff06a7e60c10b5fa44e86f5edbef1c93c7267b42978d453811eb2f2a3b15fb91e95b4142edf443680e6a6776651fb7b12712424f9da0c9b0c18ca50aa3fc13251f23496f3f1f870b5467536b20c13ce39965f40112daf3dc2cd48efdd4089c4117fb0cc31e47abd7b498c58291eccaaafa6b6e4b780e1fe9dd216a5ed05eab2d3d8c198831d2128ffd402b5ac979e4f1ac27c5699e33b223938c5b80310e28d44ed3c659d0196a4ded201345cc0d314e40a1b7e1dbc6b92927f290f069ce9e7001db6e246d2b065695d924cdc194be4c21f74ea584e851b090407571480f87cf3cb08a70dd72b5d251cdbf82195511718690d0c35950542c3337641c6ff0048e572d487d6412334bb0e1ecaec244124d74b64cb6e914c4bea2719bebfa551fefb936cf4802b514520fee78c13bdad3694b43de8ce28bff7dd9e4e77bfe8b9b0d228119bdca9e6161fe2d9be582f6762a7bf5819d0daf04f4aaf948b4f758ab4d5aa9f40b21133ed899cf7ae6071dd29b1d9e3e160e585526ba093bf06a81ff685412cb21d19104abfd90af43f5c104b43b839713300837409084a8966ec2a5391a08bdd8a3579006e2136a11e3b94aa0b63d51fe714d00b6b080e698b0892433da0c21444ca1ca28ae80e91ca21332d8345588f49d6732de3cda784def8f63a47f890f908822bfe3860693ba9f9f20c2d68245ca186f2b9d9008b3a2d31f77979fabfe96a184a1bfe6ad8d96f7cc9bf4075c1ca8cd07220491a922505709ea32a0d90e48b1d0483a74c2a880ed0d2b571834d75b5a212aabe07a96f0a39ccc10423917430e763d9eaae30bf64c8ccf18959cc81495c07c0cecf1a96e47e004ae78e6193389f7d8061961594322b249832183a9e8f157228c5178e7fb3ed9c39830407d0a2e23c426b688b6e0052d19c3a99321128c46fe74b040758761c72a91c4b739ca507abe7059dc163e98082b7febe720a63bf7d45d01a6f9017c210ac7bd31608d7a20feafa957057b7eedd307a88e91798be67c1c404f6725699839a0bde3c04b60e53719e1ba8c9997354defc1bb5bf52b05a59646bd2537a2abab4bc18617b300c19fd235b029d55245227f799d77a967057ca5a08f5fb91fee90d3f1f3fc4c865aef683a2410c38ee1aeae36f730fe599b95be1f38712b9ace6ba43481a75373623e37368e622903eb998ff5d21062380a9e3e0add2a4738821d2f492058a55e4b54c836ae47c9672dc585d7dd05663e0241dbadf9411fe2773abe3aa8610d10c4fad5547f291d3db58ff2872922fbbd346bdc06f3c2a350acfc1805e421fa9bde039bb7a81ece255dc1defab8c4c77cb4a767e722e6249e7cc6fa61d5a609b5673f9e08fb3a6ba25a344f1a717ef416fb31a6eeec1c178c8bd2f773d8b25334bc17a356aeb8839ee0e9049b7730ba96e2836c901f05811bb4504417ad2e219fd54527808adc5e0dd616fb0c37dc789c35797b4594cd3f24427a07c8362d4b8d108b6a0b3bdf980334591d3ba0ad8155cff0f6fc947c26ea671c19a795596747fbc8dfe2f6a325f79c3f7e6758c9dee8ef9000865bd1f2b11d90756ecf9e113d3b5406a0128c0449e825f1d4990edb80902226116cb164e5d78e16a670192630078f81b2ff224948759814c0c0bd12081e1906b7ff3f7615b170b466c335e3c4a83d1811393ded0479101eb1bafad3196345d52caa2cfa1a2f4071c041d484fb0b10b02908e71b82ac511c24a91992e06a7e14a27c3de8160eefa070755355ca8676d0fadedfa3a22c04ffbc059981c72e052e7a40ab1457fc18069ca881bbbe2e0b3dfc54ae26cf1d464711e4fe5915227e9163dc3e41fa1a3b8bfc458acbf951526741812c6b1ad046b814b0601aafa0b2b2a0fd2a88152b01394f7b0b31ea693966e4df095b445631ea7eb7d5b18046934e214e4a42c811abf0428638fa0077b7ad7d20b94469c5657074e193c3a0a9148088cca9fafcb834f8057abf5eb36e2ff7efd07b10784ce8c25280ca1ecd82ef5b2ca0d2d0dae09627858efac2509b5e55426f79388786e38687c6724950442153287c8cdd349bbcf2d60cd632f08e4011f8f63e1a9786f6c85d3629b9e394f5dd76e303f1c17bb146956a28fd932b167189e8d10a31d56701801318df0e00bd46c48a6f809d0709bf88967a517724fc6e626e64572f9ea2a0260b356243411ce5c88ec21b75c8656949eb3d608a22c26dec7d549f916dfdb9138b133d60f570bc3034b1909306e9e24b8a1ca1a2476dbdd3fc5f960d6c3fab62abed28fa029044acbc2c7b6edf0c1b2efbf55130c1592f00c7e5b199c0cb94b97bee4e71b923ac27507cb11c5ce28d339a014ba4c97e7ba8774a03f5fd61511a07dd21c7537b857a47a120620cb66c1352608b073477fda3bb57e1d495b8f93d7dc1311fd96e0f0927149e8c800d1d0ad13387a2f85b0dcdcb8cf2794be0f326e88e8e6bbdc8cf0d1634d3d824e2d899a5671aa53a0c856ce469f32eb8ea3320395e40c53003a9d661a42b34eee53a804a5558b62fc074722047a136a2f016102125baff3b562920b51a94ad13a7917a6c005aa7fe4da19fb58ebce05c235ee936a5b5419a94d43468a8be5ae0804b2cb6b918dc94de06c94a714d5866f7236a2844003e8bdb20480419724674c45a4271d7977a72e6860d8e0bc5ed02e67b7b4abdc81cb95813f2dd76d13647d85013427c82bd435f20eb1578149e117334f4885be53c442595b2c40cdc2e46f0d8a635b56d00a1dca15fcfddd355e9f3a3e84a8fd3522acf6a2e0a15b181253ec3ce0ee58ae2607d9655d447612aeb31b257b385f890e9ad331badd8d95e1ea0b9403a8899b4dfdf72b5770f1c9e2c651daa9e246b0057b5c139e10f3c9b6401a2332de517a72c855277113d0757dae01e1fd9a922227c619d0b27117742b67ed2bb2a1856c182610addd684a704abe40fc10a8e32c244fe352bb1ff6bad9706e20614961e2cadfbb9a12dabd633c9d442f53f35f97299e4cb596724eede98fd2db984ee7735dcf9925e3852ba36d9e4362b485490eaeed75bd6e216be2250641dd6060560d56d38b26e38ce6424a8ba974c2232f984cf60c9a6ef546e3821bb29a491f4b5b3721b22e42147032ed484e4ba906da7b8de2c5490d507158612757a45ff638e3c24d8b73964f109952115c681355c90678839e584faa5932c40495d55a5757eb105de958fc64c8db9300495abcb120a28e7150511b340c49a09740ac151e663986911063af1e47abcdb1b8455425ca372866a10b430594a32c0a5bda99a282d113f52b8a866f5848019e2a2a3dc0412db37471b6759c66a1d249aab968982526dfc5a960252b270498929fc3adddccff88097223644d7a846974cf998eca9ef29aea70cd01e33e717b63a87d8b08ce94466abe06331fe94b8138c60fa120bea2b9e3686576bb16f9e75814d6a91503f5d407091c294854cd1561823027f69ac23f72ee184b12f70e1cab529d3bc08241f6ecaa1c7c4a6b4c4ab2e279d71b280acee80c53dcf405c78df239fa807f54e9257dc261a0a4014765e70e4fa6723da613780ca4d0ee69b14fdf2142c09bef521b22a9e9c45af4d002dbe914e3a6ba1c565ea856980f11428306185b5d2cb5310936356fa2bdc8b5cb4ede7c8b732688790d8aa3de788e9cac210309c52912280b4e26f992afe7a258e7b2712c66a0026ca31b2a3afdc19efcf867b09049196a4ee76eba8eae2da6f54f5af3a8ef4eea40bb09996ddbda71790f7cdf25d8c8aa13ebf5ab1ef19251f90144675243f0319dc3419037f06e38c178a7256aa4c58323376d50423ad779c1e75331cf10dee938a89430b66ca62441091ddf06c79e45f4c30af3dd75ee00abca15a660d4b89f7264a0bee63df09cdc9c149ea53fae74ef4d76d3299b5d2f90355a40f1754084d4845a9c5dc1159c4606e5278cf0c1241234ca46cfdcac70efd3e95adca4060569fae0b2fb9cbc99c04733b1bcc6ee3491bab5ef0a7712048ba024464802abaf0d0e39a41a6b04769ad97b01d3c5410ea33487fdb9dfe06ff78b7f1a39850b4bdc8702e70d645e37520e288d1857f8ee1e5684b4e9fdc45847867d0a09b8f53cd74fc5fd1d80481f2820bf30828b474e4cef00ebc7a56d0c875f3c73b08abb0e0d2aeb83c7ade5b4794406d32c272834105b9e1666e80bb580947f2edf83b039fb8fae688d1dddefd8017f43f6009d02665f9914aed48bbec961eb1b9de0af5f7775a60c55492a211ec341a1af26071bf6342e6fad5b182ea8f9b839ddc3d80f56cb54b90a0c720b08b167147e87f4423911458976342882c2f1897e4ad2dafd75cc668581eb20a240e06001c9366902411c356adc42c27488d5a9c5d569923e9d4eebebaa7640f561412c835a9827578aba770a5ea994b4e7044c0528b5c87737ff9c65e8cf77daf2f2515c4f681a77aac3bbd90c0f857ca426f6033ddb2a388617ccbf640640cd1a29d44ccab5adf3e1e98e2fccbae8b6e09f47982e5b2312c054c6f96b4ac4a8c1e26176aac342d23bd4e760d899c40cc23f512bb7c2c3226a4d286648dced8b71b12309ba59fe220e7d0eacb8cc94fabd4c99de39c0a53331a6537e91980965ad4c5a8bacdb33abbe5cd5dc63ab063bd6aa71bd48f1f40b8b04256fb18a01525c2f515aa86fcfe9a3bf0732d8bb5728c25c214912d3276279def0c23a6f613efa8807e8114de11422332026dea5c95bc8c10cb791eb660b8e71ca55a490832169130534c202aecc4882866e917250f2757ab1b15178771e70cbe1fe1544f9e9c02cac0bc2252b8e7f9b18272a88e3cecb305d2c31e834dc07735390d5eef5a4dc28ba1bb2171616b4e2bbbfa91c110a2d18dff459e5c0216736519ddb60334e272aca2da47bfe9446300383f9b43083a05caf9d0e2fadcaef393e5a7d217838cc771deb0f25a54c3ecd995c8dabad825b52869c3f45710fc22481e4b5ccfc265aac4b0d74d96c66c4de57fd87bb97f5ea3adb3cf955a1205bb78bd5612368ea2efa11c9d4c3631e831379ea6a50ff9e010ccde18566328ddd510ff8344ab9411d15c067f20d5cd8f9ef7c66e34afde0f82d3dedfb675b307dffd50c6934e0bb42a5320c07384171beda427d837625c935cf053e713938dc7e2921dd6b8a3705409143cb8a13ce645800e63300d82eb020f07993d5e1b69459f7699d3532aaddd98035fc788f1136e1e48e392d3e6b9455894bfa68a5d7669cfa6e3e80849d58399bc3522fe30c6c00343cffcc3cff25c675d7d5ce3850bdb010a8c0b5b25b91da280aaa8dac3da76a22a6d0cc53026566771fd0f6ba8a7c5006423ce7ae2a222136331b2193b0c5cbacea0b7a84856efc8289e05f2e4e4de892fa54302b016e7f429f7c1aef236916731acdc813657a842b5d0e792b1888b4190ddbbd61cf357b789a5a45a00593e1e738833e84b3de2f84234332feb1d8876d441ec6bb1221f1f6c7092f3ab39bb8552eb9efcced2afe06811e08905f4c01279b7f7569b206b7ce97c7bb6ac07fc742b615e24671c522f892ec9aa312e9072a8e9e002034d9754533cbcb9541c1b22baaa7cf4dc8576b2b039f881eec890c08067fcce3b3a8a64643605290d1f5c09a918136d239d5aa8fd986157779ee09978bbcd4ec3b9eed5fe6b8681181333af27ce194d65e597f2b9323fa1028ece4f1339f474587e88da6dd6412bc70a2880619e0575c4829bd330fd9eb05aa76e5402ebf599065e9cf06eadd9adc803686ee0e13d6e0bef194b9f36425c68c8877e817736a1385116183172d0bbebf18c54d76754db4e3811684db0d74c6108b0a3e606390e7d2aa0a65cf39cdb00d454b28656475e70dacd90f8dd5b99082eb680423664ca50b32f7e0b60ca4b6294daf88b2a7b31455b692c024910dd2306da6dae5fc388239185a49093d1bc98c968551fabd53915b92639276bd7303447c2d012ba8533ee00b8c554560931310178ca43aa380b33e7090756a2ae330994ad4236fca1f5f35385b52118a2f7166d19aaa85420bce4a0473a6a5e104ae7b624b585f87b1fa6c617083d08d7f1e6294464525d057bf399a308040bca74b807cedf3138e18a95d9ef2c2b1aa433826853b086e9a7d67254a35975ce1e0c4ea5d752536bc9554d5269de3964963667afb88f90f3c2d64d780d01df4ab61e41e5df4c2314c8f020b511db729be39d803a66ce5fac332dcfaad193b0e3cb472a894c26c9514a264a2c093a49696e56ac79ae9e3abeb72f58b27595895bb8bcf6c8349a5b8fed6ed3ea7653866615c8dea7372bb4c315e32c2686cc11c66c0c8dd2bb4378efdb7cb89e4b8238b812990dc790cab608eb2180996be8b330dac97a99122b7186c8ab046e5592424241bc0c14313a50d7835879b5cb08cd13282bae355e6760a79ad17ee4303ad74039071fa6a393ad0fb40960e64fad5d83294f3a8ed46640d4f2a2555c4bdfdbda400f24d5fad7a54e75c13402fa15c5311d3c9d01f6a38b1103a41bb47e1ce9bc20bdc5c6070aa674b606d1bb2bc3038d55bb4ee093395530836ed075f8d20897ff704f10cc096aad54761f3c73646a1c95320eb797772a9e2a5a6169ee6139e6eb592cb1a81238f839eb519aa0c34fa07ae70e2880691a536ff7d833defe39aae995686adb3c60741cf75095f61e9423211ae2060afe27fbb58192baa7afaed50781a59c0b604268784cc99ab161e4408762e977f1970fbd425407df5cb00c8994ef88d9f1ecef1e85365047e9a12aba1b6bec841d9e7463112e9133fcc70f370d50d9b0ca425fdf06d2f9d06fba8099613d77352ce200cdc3d044407a930a6c4b384a6173e055928f2b77943546e131cf0f288f086599a4e41e31f663b88715d1e74f0d0f8cd85806a4fee224e8e1cffc88f8dcd4e1e131e3357a59e1cb67607164a0c547db94c00e7de9705bfb64102819664c49cc0f5ce2e5f898e6e35168e48aee03cd21a036a37817ad1b4d16a3607c39221985878f8225a6a1d7f59a12000e224bbf926d5d12115cf8cedfb3168a4b79b0643450aa9c88bd105cf12fa8d3bb2337af171f149dda47cf942b6e28a84309386ea60b6788a85655cc212728eb287869e4d71ba3f4bd85bd02527ec62e81e0d618598dad7f57d380d51854217914de4b794c0d15ba7ceb2fec55d9132379588c23a232978a1552b6d4b085d0879d6f67072368f86525e339598bbe227112e3e1d798a0c1131fd4d3d6344cf196e24474fcd67800083021a00343e0c00cc3842a2dad6109615bda3d1849b8a8d8daa0967367a1c53973667112fff29aceb751a0d29e50408d767d8562e6b5c9725e1f1bf130f368eee8e24c84eb9e2222f7c02fc44ea7a780f00d83f825b8f7918ad1640c29f5479ec1f9e5daabf1d83842cc461e70128a44021ddfa65f1bea6faece2afdaca88e1cb8ba289401e389b4123a5b140a09bf5891d711c215b901e2e5e2216003377fab31b14dc8fcbca4e1abee17a78b59778ca05c054c8048ba8c2086b1a2d1d6dd59a6a2588384c582d4860841c284c11622214d1f9c325c70c34883df02c42ace5c83412c1f5fd9e1e46280aa9a934fcaa0fc812c0c0b5d85edc44231a5e541f93e864c0b6ab61f9cc250964c51a17a8789229b03597db6b094887ffd4c74c89213fa1a09779f29f3bb4ef64482336941b4f0b9447cbd5b2c7438115fcfa319a52181e8418284615fdfdcba111ee2264d5a74edbf8d9b668cd2882990efb4c889390f3783f7d2a5ee17e8e597b89a7541f1dd8b871f983ca58f5c678b6144abc295b40ecb760a1c28f59ee2f8f666cb67630b35e144a025a812f545910c7d9553a4b70249fd9f42d5351c79c493b35f94791356d454f37d51d42239cd53ed47c845593d1e8748ce0c9c5029e359ffc65adf8448fedf799140e7aa45f8446d5d35e1165c5165f8e0c39b3061e7290abcf02a2abb10ca7cf893e3a1b1c444a7972c02c6cadf2ad1bfd7f473e8e72ac735f79a9b891934f1edb275b076451a4f0d851efb28a1c2f8bcde5010e976d60366cbb7dd06d7627bde105a9417afb558a7c9553f89640c163f5abac5e74c4280b1d0405f4d07c8128f493c926d64888e7858c8633c2a3c38650cda8ce09172f5773cce77f41bf94a9877e46bbd372cda1ddfe78e4e43be6d18928d26097d6386dcf3ff215e640f19a38d1d07ec83599fd500a324bb181b2434b0c5c64dad915a612224f2ef3a039757e61ead0e7a21de891033039c4a0619644c4d7711b17ae7c49306e21f7e4541e6097316b17020248043bfedec2b353c8424b6ea9ebcc952a91c0ddf4f9b90d0179cf589e3d53f11d330571d4e8edeaebf7776f21edb3fe9f555f67102e7dd775138b17d8b785255488e83da5ef10ba059506fe875fdda6f5be11f9926c79cb1102a7460ddc6793d51f5fab130f6df9d14d04b2b0497672d05077426ebaa4ddac0675cb6460f02b9abdb9b7ac45c0dc7ae9b6cdc25a06b0e39cf76175e7e4ebbafeb5cee20f751d48777c8d088e6d4f3874af1809898d70c19b54ecc09b71575500ba3fc34b83101e7894bfe79615bc1484a6a43f892fc4bccc3cfa0f1651aad6fb0a7debff56d501e8564030d6b5f50c77be7bb898971af371c5057dbc4fe268546f6b847483a0e2ec3c7a88b3f7399da8ff9b7ed32d08f4dd2a1a95e906c48eabf786ca43fc0ba14a1e011c518afaffd9f299019bcf77eb49e6984805f43c5fbcc7ce3d4f5941e741d929c8a3b7cb5f329e88663da68856257872c0b2b6b91113bd5e5c537aade6d9039a5d8d850436665046eb0a1b87ad0cfa2e2c86a1d767285670f4049a7c312a93e6cc88ddd2e1759d71dae47594de32a0712efc22d07397fa6d64dcf3bf061c1f1c6c31862063d94614705c8f2d57d278f9e1539b034ad018fabe53fc0fdc185340962e8ba38f5ecb46affbf245a85e9afa34d59d39566d88ab0bcbe0497407d559c3a261905fb518f5f82e2369bd051939c13fb3371fe47ab8aab2cc2faadbe3f3cafb111f041f1249556d728b6ba59310dd6fa180d62579a3aeb37347d6812cdabc4ad6fa44e51b8088411aeb9f12248aa1d21a7f76f2aecfa3887768390dedff79eb760168d4be074d88d10ef1ff29e36dafe79b491d6bf7bb98a69436b05bda991d7272269e90dfb1f647550f672bd087df114d449160dd01b7a6770ecaf8b7b4440b52002d9a3d6690675c2a960a05bfbd32fdd757d3646e9dcf2408632fa1b85bd644e7833528b24b580562523bb82f5040e0b048b7a715ac239df1b7a8f7ac6224dac3851406838f27b8ba5bc14212da955513dede6aac162eda611858bc2167c862a4475556239c240a4cebb0a53af32be3ecbb22cf4a7a55f96fb6b44c4cb9f291a675088a97184a17a2f265507ee08b427cbdce07e3728acaf5d2e54a256840bbdc00674564b65a5214cb02c2fbcbded07d9644220e27eb215ad972b56d6949773db29b8f559a9de035fa6eb7973fe8b36ad7f81f23487caa659595263aa3249dd624dd6df492874b7c5c8c9535a8fda8cad69b6183d095a7d2a9df9842d8da8678488c4781b1c8d6e7a6242d29913e9990bf278b34f6639027197581abb1f0001cc294530b6c3cfeec3f0322fdff0cc5c7b9e40b1c867657ffb108ca9339d009bb26a12dd54cda853e2be2ef910910e4e75b4d5581f8b08f7f78236391cee2faed375c66304fd28b79ff0bd988f483af2df42b8b72c56ae60c810e93ebb624ab7a4fc2b9a485e71c594eae5c43b53514d664313789f8fd54fea30a520f692e3caa23dd871653d902e219affa05d92872fd8bf0432583f3ed393863dc3c2fec45919f933064149abca35ff858d796dc0602d0ee399b6a5951727dc34e1a571c0e62b0ab0b81b736c2992b3382a460e8263785f2ba82024be07af45c883fc36e1f2a7ed55e1325343c5fb4e35f52b81e126bf4cf076faaccb644c3642640bee039e7019414155dd841bbbc46cb070c4c51c01f771e0b9a98d7a5a220b7a34f3009e555f2fbbe9886ecacb379a4876e7912f72d41ecf3eca8cc336164da001b3a29a5b034faffa3d92e8b21b3f447b335b99b8ee81a5de1fb475d354dc160e9a65f1880f0433d36e792606aa2018de1d14e421b56671437416e22007b2f14507352af451c664ff92609e55595341d4ee195fda2f63d3e4be05ef577873dddde54ab5f34ac517d45711af26ed975066fd3b6b4a1ee4fd6a391778df0c1672f3e2310a26ff13c23a68bf3300c2ebba9865747914e95e6c8c97a5b70b3508d164cf729710b085ddbc900e2940e2ddb3ccef1ea92f10900310c90b054d3a0d5445c7347d3c30888d0f0160c3660cd5142ee498fc0b12034a4d1b1107ce9639802e032db506a04edd0b16b5ebaaf2b1de2046fef991eb01c160f731d64e9f69d27881a1f027155785e32003f73d5b408c0ebcf02b8458b4da0e69c58bcc5653c0439b3aca776b77b2c815930334c527f0623d8a967076ac5236a8805f536b27d781de3f0283717b04d96d068c980217fd26d822ea6ebb077b888f5d3ea6422a180d51517debf23266c4f0cc3c9c91c6cbbc4469e9c7877b473f8f6c2699a2109bd37a22c2fad9454e6825c6481cf97a9dcb55b503e2d3d10b0e21511c76868a522f9a010cad8a6d170a78cf3447d9843814bc30ac074ee739bce6ff1db323c2a5e3de82566643200f7bffafb14ba973557754df07c85a717d5246ab447fd7f9fa26d7279a0f1e82eb71c7fd102e47e572b4e2eaf075391797ec46a4e707103b2bdf35dabffdf23f0dfe8dc46d1a182b87027809c595e544eef45e34b5a6cdc1c3b81bbf6a579cccf87065d7c867883e53db9150ac665c668c4dc0f5db7c26238e3973d8855fde21abe615af3e672447b03b046423d289f84afc101a5b7f0fe02c6173d034785a56cd837e16683f7465f2872d8481b2d0e822226f139cbfa1365fe907bc3102e703bf60d00543679183cbc21b6503acdb6d7925a49b5d22fc6671b6a30933241fc62398be9dc6395a66708dbebfb2ecd8cc7db52a5ddd185da01b01bb7ea766a80ddb0573b6f18288c1c765b7646625a084cd5234914fc2097480c73854a37d26a9d170e1394844471014d5d88430af87f0c12e8479c131577648351aa659024d4b8cca128cb5403df6e8b6354963c16835d30d4728933d8e599d079f076a48f75b7dd83277dc80fc83ed225fc8a8272fe8cf685d8ab4f29a028095f6b564a867c90817b3ed00e19692ef7cf4dc821219ca49d5d68439098862c868e6c2aa7c9e950e99fad1baa83d97d465e607d5a1272daa9d15cc65954c33a417c294c2cca0702a6ccda973aa0248ba77a4f65d151e2be5dcca33e0adbef344555d3613d7b0ed11c85fdb81058b4786da1a736fe6a8feca6e15f12e9c09d154df4b5f37f59aa09e26fe4f1094aeab46aefb28362c7aa0679ffff56bb726cd10cc7379a861a603176a879e62bbb1abdc39987568d6e06f428452d1a6bdd2246329482ea130ca6f4c2c051733528837e3cf2e75ed5cea984eb6cdf21af1f57e4baf7fcf44fece33da849449cc5f55a3ed52f2d01de04e2b697bd47646085683ce3004172d5471e6d706997a9f2b219cd4840aafc781db43defaeda8447741fbc8449a90b442b5a964d854d814fd1a79c7d85f259cdff7dab7b4c8db3d7202b7894986082b824fbe73cb783f7e222c2f8d260d073688d721a714169d412b39f7fe32e201c6a5e6a565b84e1bf527f24432743f56e184179e83fdc402d295d30e8bce1a1c8c9395d92f1fba123c661c56de39c631cc9d0ce96762b5d79a0c712dd4d4c850a9362442d6cb148ce20e9d68d8d3b496f384bac4ae11da98ad13ac8b72f10f5bcc2cb0be76c182025cd75b1a882d731fc11aff9fd5a55766e13761b61d4f535795b8a9ea0b31105a65c3ef2df83f756f025b0adea851ae16427068141ea4a9fb4e11eaec99204c1d069ce343ac2e564700d7b57d1b6280d0e0eb6b2641b09806d775669282d8d6a8e340127d584d71ef1134e99e2111338e85af37f8de5548995e97c2a011ae27603ecd58c43c20845d922eac24afd6bc02687bfebd99d6e784cccf240da54f896b52f1c155b49e838935befd5d71e468f65272222c7ddd97a9138890a8dcf2213dd294b359c3207c2206cc6a2f0a940432119825fe32441ea116f305b7f85db60eda39d4ea17f3bf0c5abe26d386b19c661fabb8fbec3cca9366d02a5eb01077d5d51e699b10e269df556410314648831ce9d3e20d035a2927c34563562851b60134e7096e75ac89a8c53f1aac21bce15522810156e79281df0156e5784d1120871b910db68c0c3be97d8dc4baf31407d34846c23b655f9cb79c39d4e98be00813d923d1799bde5f935fc805ec5a819879c296d28485b1604b79f4946a9220bec828788bcfd8a87c27536e2031d21ae73a8632d3bba04785f52362360aa32b487b2a488c3df89c8b8dbad75f94fff154390b2fd00cd957375f70883ffbf75bdd3534b2c8f2862db11debd69526fc69757a354b4bbdd822b6cce8db075aafadc01af816a14b4296699f3cc00511ac5a95410c51949deeee8d4c4fdfe1e8c88060d32b88477f19bf2ef0366f02c281e3dbbd4ddee102c87d1f5dc2ef3e6a95cdc5e26562b689c92896587956b6e4306848469dd0494c3a096c97a1da53fef18df953114bcbfc7de90e49a8dfc1cbab8c46ea7ab8dd069f022c1bb20cb07214fe710c637f93399ba194947383e71180f304daac4fa581155a2ea47e3a3b24f33c91898c8463c32adc11a8b59a6ebd2e03a1cbf5c3439a10ddeb384a793dbe495a61a90375aa9fbf24795e27d3da2b691e6de41d1871cd6ad275589fb11fe695330724a69de7eac538581bc17f0ae10b24761378e90ac1e410f3c93b8c8335a457e6ac312ce4d9f932de886b1e0d67ebb561724c9d54dd891926ba984fefb9ecc1bbb6fd74feeb05893cf7aa9c8cd5d224544403e02703933986a7db5ff6221246d9f234e91c550a464cb19a96bae436ac9ee66ba06a9f8e54165c4edf4379711af99f7699335a6c99e34196abf9c42f1290deef49408a46749d5af793a0c62cbb645756fe1d1d7dd8e96c1794e44fb484637d2acde83666d04679029bf2873a6ff47f66027814158249f3e238d207bae8c8f2b5f92b370a2236fd813952ce9d0c226151e7835187e2a99eb44b4bdfc57c76410a4d5b89c86592255e619a187c74bd71b54c5af0296de54a22c3edc903dd37292594cddf99148d9383d70fa7a91b19b2ded9db80c8039720baddcbbe73663d251dba1e871fe5dbb2e9d9743b367e7d1fd7b32f39923571961e0ee2e43d74ebdf225c5ce047ed4d75231170b31b127eb5853909616eff65c1663b9d1e808c4e9c33f7aecd3420613a9aacfaaf6f188c7f244a736b8c87dd9601be139a5c55801fd3f477a13d786a94c91b27403b1dc6b28ae94a8e8dd2a59e9490314b1eae520dc7ddd61150b216b67d0083d58f6e0f15d2053b86ae9ae25000eafb00cf5dc252d44605345431e91974f3b5044706704959cc71b4800919ad78351feee6c8df14150d969d0ce061ab0d69673d7186f5fc08a6a0179745c97b6d404748cf43b4cc867e22fcce225304780b0382db33609ba4af4cc01d9b814edccfb5259276b0e3617ed464e15f44f66cec8fa687e1bb28c581b819e35e7440e7f9029d793ab989adc368a5fc5e824412a702537cb81c11278a1e363f04ee37563e480cebcc623a433eb00566bc973934be49c569735884590944f6d347cb5ee44a6892af78e7c22e1b4f75dbbc21f3bb5c18ea854569c8283ca5bc75695275c2e61b76231f2b44f09eab1023f017e7c0a5e4e441c4bcb0ded2e205d324d90dafbfb450fc158a97a4130e015645230ee1b64eb09b604a7d605c7eb6ef66b664d80b7c029f4c2283ddfd2f342e23c2f64d228aa8648bcc9cd89241b3a18c57a0a39a185f1abb7441d5d2f56408f5cdea305753a250118461c334da1fae45a6add027add9cfa4b57f7fe08ae77ba9ccfefb5a7cb427082538baab1496af1a8847bb5d572139dd8582cb9ab23ffea553e37326f16813dfe72dfa91ffad56e211c78e7869d107347131e8501806dcb7b1e5f79c896f2c509d0c69f7007fcf6f4fdb88cf4c7af34c66fd2927d9cc8657863bcf8edf25f9d0b283590f97d8dc8b24f7062dd8ec473013bcb8d33c446f481349b290ec8ab4ebeb900607a84c86f41ad435aaa5098c4e137c67df631219f490c1d6e5b127332f1964130531892e23e0d9cf7c7512b4e72033f034306c8b37b0a997a295ba59b140535f4ed92dd544b2d7127d04ca1a472d602f31282fa1b7d41c5e0bdb4b415605d599046505b541929e19e52e0f60e287666a85468d3b924dc4e44f51e97eaa09b4fbbb89631cd81ad7707594b2dd2adbf2b6155c723bf2842d1b88bd46d4f9e4af9fe146d4afd52c2b911f9e4f844f78cbb3720a188e40043001416f1d1d2e78040187044f8b2bcee5f0d9d52652b4506511821694052f6876089ed077d86717991d75c7d70a2dfae8ab1e6b24a07b8624d30e4a60e5b10c6f8e94cbe7c313f35dd8a57d79a33c1551ef6b033a1617054123b1122c2a37206f26a6470814b1269560544f9f84f206702160cda8c3f4e2e317763969043e057b1fb29c20e1ddd2d8628fe1f6fbc6ced3fa8c1e4d92d1e050a6c47d2b00ffb8a92a4f22949a804ec4e89172bdd061a7a8475ee07bab2641ad5caabbd3eabe0da0be2cb29e886bb6d695f627e17e165bcb07a4873ce74443963406f570437e42b47412a856c7068d557fe2483350a35f57f962a2b78880d1fc35ddffd84358102d6998d94142ae666e285c2d10552a53401553b18bf0443814315abd16a7fd66c54c471c08f6eb2da1fa1ccf2e6df56e86dc15ec2a3eae73c29d22761cbd8c2a75fc2ed23c0242446762097aff6e048e875446640095662a0d511cbcc53454e72b5ab27613fc1ca1e2ddbf038e433eca238e4c733d0205521de50e96b68e86f3e37e591beda3e6f4c1247a60bc848ae80061634b15096650444e4a446fdc83db5f755f2760166a51f26ae01a4f50f4aa6fa3ef7a3a64f95b0757fe524bb25b3984c3bc14da116915f1489cc7919958661d4b8cb6c0fb4ad7a2889c918dd1edfd8a41abd32865d13fe776a3fc36a921a4886ea3b05f6ea579b265c166415e417a474b2b9244366c2282d5febc9479291a16acb177cfd152122735dc7362ab359f2318a1511010030473e3e11b8c10ad759f6dc51c4ceda775d877d6e97fe4eac25ec5250b5ab3eac4b1f91df21009c9b5994300831fff397a75a36aa1243c68a8957cc5a200949f7072fb993e85e5d3798d02e2bf05779ebfa4fdcb472b01abfa9bc6576c04d4f7ce537fda3ba9c16e9a9768b0c887e5bb9d6b97979233409b02f238ce30a0a95373bb8e40ba856609433387be629e4e8f98f9aa54653cb39f8731c517f2d7458b8e33feec7a36d3fa5c527a70d86293676ed471033b6cfad944e1ee385242e8bc0066c685892734d8bc163311d6552a93e1f04f3de1a95b4bb4eecef0e536dce43f6a400124428aa4f8a3d20dd3d0679d410a14ee949a66e9ff0744b264d981a320a3ae59d0ccfbc6a78bb2786c88d3268537aa874e8dbbb050826e9db9dd4cc89b6f89b68db3ff47ca48bf789dcfc952dfec95fa92a1f552315e56b35b5ef0c563b0452e0281e0bac3f2edbada96634280cd6e675c05a05d57ec7481ebd92fb7461559cd098cb613cf3d13bb60fd2349ed8ca7419521b41f879cd0183d90d67f66e794f8f354accfb59702543364a081074081564cf9494d764969426f979fa59b6df72104d36acf32c6cad7f5f5cc73e864867f3333b03fb648443b178037267f01dbb31e5fcb2f1f8a97627cafea0737a13aef4827ac69256ea975edc24205381edfa5f85a19e4ace2d80dc1a03465d6f3a12ce0dcab9e1eee254c02d62a79016413ef131229c39a89dab2eae9053a59da070800214d4491079b6ac3e78fe94f25ac567eef781903a3844783d26fd035a6ddce3853ac99a8d3e866d8cf20484d01675ca84c9f6d88bf4dca21a140998a9c7df2b7f7279dc10232da0af6674b9e8f95d2f944caae19957b5407421075b7888d68e28712e9038227d260d0f792fca1ee73c275d04d31e31aac19728e03a5b0904c387e68e5b79c00469b852b44c1ba6fc1a37891b40b2dd55e875f5f739f8b89e541434726855e110e80afc5e64ead9f019e67d3f1007f32cf734da53b4b4ccf9a154c1c441af6d4e3bfb8a954ee8ac2f83fe3163e8b851a1a4748e4d6c8ec6c8b2445e6e8b9e4f21e4bc4fc9e2b1075457ce2d635d2cda4431510c443603cd442d7dc9d0a0959538674615dc8c8311a5ccf9f7a50776a2b9b8f33ce49843e464f0cc1b8a32eb5e6b7e4bc4a81282ab35d1d25b434ac17565a14313015b486611c8b6ae35eebe47d752cca7970f813b26201d21f513854eaf33e0df10a3efff16906f1f755b9be3649d7f977d4691fabba6c167548a563b0791e0b8a455ac083cd599218c946f5481ed90ae0c2474dca667b265468631d262d19721ebb4472ce5db6a06aa990122117bc4c261a55dd2e9f91a2d9686bc08ec9df4760fd3a71e0839f0e8f93eebc0be05befcadf4dcf5661fd0e2ed24556abe90f3450fc745caec5de721cb7a499930ce5c7465d56a6261d608e4da086ee1ab70ca5bba2d61b485d3baa6c5cce1fa8ad55ad714b4280208a3afd01815c3a263dc010cb2db752bd6ee902dec585f46649312211551f25c6741d5ddb571bec0c2f880ced9219a735bf231ba3e7a7e409540a68dd8b9934697a886920346073438fdaaf788c3f6cb284056e04ba136e16485572dbba7425ba01a7133b3dbb4a49f625422177043289d485f58bbc04d17532c9fa07a0ac6435c3e160b39c0111af24c5eece98bd0a228cd0fd080b2bca18830ea402ced30747e542503f253387b0991829dcefe2aff08a724303d66b269e48b099386e5549ae9e5275634889504c6eabd8e9c4a200695926bbaef2169d134ca96863146a7b318858e8b6eacdb46c900910bb861f061038948f1e7d4987a5c337cac6ada7c653545aa68d19939f09a8230fe1734bcb970f06c7c66460d50a40423d45fb210ab1f3314f3426a3bb40797cb4cb5ee47ade41e7ae28913a4703f0a803a3cb0e6941dcf360ea827bc21bc92baaf87557aeb871fc04937d664665d141063daf5d796164bbf8814f82a186694e009ba17bb1190150792dead32a0410082f06e25c5e6acdb737b954ce7c434ea184003ba043164c340be0a1d4a2e420b450fe88d56cfce3e711eb9257004bc905e165434c45346b7395ce02431ee2d70c3560e90e12da55d901a8316a015a317fbfb9d7c94479c8a392ff51bab5a988020eef50f69d741619eb0a58a82b42f78cf7e8fa60b695f0ff414fbf0d1b416eb49da20985c487d4bc19fcb96bcc269d25b877010530fb5c89f083646d82fcf792dd2c2c99057349015b2529399014c4da55563c38bb5a361585deb5ca8057494c5ce0b4c04ca97239a877abb7ab55e3dea7633dfb60952bb6578fb95a5dcb09711000eacf47b42b495caee5545cf1ff7e563cd9107352a6d1ee625a23325abfb35400c8c949baa0161d7b2f236bf87f9cf02ae18fbce944cb0a081e2b859037d5b56915a1693c0ef4806baf5d38bb58e2b3ec51965c56b81b6c3abfc5090df68cf692c5b201f3e34c68da0507e8b3d15ea583998bfc3ff038dfc6ad4542ded4930e11c12ccec264909c253257e96d5439e059a8402a8d12b6609e8c4a5ddf3304caaa18381a2154d11b94bf1a4a58cb1ce7475e48fe51d9a71a858b253ed1697970b993dfd0e5144330c5f26e0b8862aa358a8e10102f53477ae7b61c4143624ed3ad113f7100fb2cf40bc22bd0dc5a2a0467dc51192e62c0554cf0dd67a81f60d8adfd6b1867c920ae9af541a1ac457f7f623d5df55cc1d22e5c1c682e06f735bfd992b414baa0b3856690122dec9f701fec72d21061da9f1847d80b876315b20081556b5293719f7a1b50dd60baff3fead1280b8cabdffec999c0b686aee05b6c9d3b56d67d991b74f960287e2e772bf1946c190375c37a39c07ead67a9d1fad92a50378ee0cb660d45e26b819a219265039e02319bda40fd97ec5eb7cc5211fa6d08f45239d12defb3d071b3332495303a2d78033e221b3fb55c4b60823b9bd4a7a746f5afebeaa3012ee2c27786d9d34195897a88da63b9cd64f41904b3c8b4279b74894ae03c9fefb1c1b3304c53c1395a13117935712837689beca48d63f6d2a61b2ca7fbb1c8efd8da2c32b5f3e95d85e1f5b864192b253aff44ac87da5c614bc79b13fa84cf4036bb2c080ed75cd600f020ac86aa909e9b620f62f9f78cbf424d5f64786802956daeb19c378cd5ecb4ff341f8680be7d5b169b41430294e1c104d715195435c7614f80ab1d793d039d885e926a0cf760abde86d48fb97f015567916fdc086383e83a9316dd1d2274282ea0003154715f8dc54769f4e69564a86a1f92cada18ecd6e06a9d926ab48e97642929fb806c2ac260decb2510ce916b2367d281170a2460879f8f803371b588ce76844c3a71d740ebf520a2088a8df1fc14b181c07442e502456f1849f9986e8545d49f8ff4fd0a8a21c0b0f917882dcd1ae20a34aaf36b5c2b8d77456aa6d9935d4632695d510da1481e57b8edfd62ef9b508e3a1890b3f3e592b8d7ec079f4167d9fcafccc999558d6c2ff1e7602644d990db72a52aacdf159c876f52c83d140f20122f7b276a50856efcca411d24338cf7376b2cbe2270b459191fee8e961cbaba9f2f329aabebcf50951759f60f66eea1a0b44fe5ed713d0f33336699390e6e29e103f5e368ea9a70806640c46f5aa2e78778278bee874f729d4e69662d946527cb9fdfa4665633cc467cfdb19fa808402a68a45b6a949fd44ac90b115e1a880bb3ec3d691c49785a4c0eabe4e25e804a422bf046aa6d2ea8fdc59bf29c3678dea95eaa898473042d3faa7df62112798e4711726625d82833528dfbbf7fcbf64134dbfaeba4260fa95d687abc2aea152d19da796acc500d644dc22cf975a441ce67c33509ecc8deae954c8ed9bc0e7aa6e198059a67b64f81a1fbd5d62946cd5e1fedebd7063a9083a776a0906f2c8a02b9c20b5448b8447dbc3da55eb229896938d7a0676ac2c89fdc3cf02780b4ac3705f07511329a0ac20feb69b2e93a283f6a70f03311262d4097cb1b993ee1ed4cebebeb9e7c82e5010a040973afc22ccb91b912ee0a7bf596d739610c1205d4594cc6c6ca48a97442dfb705d3f05423bd8f0314f3130014d5eb6930e00e2dd695d16d4aae85635084a61fe9c30d68576f84142fc96d6bf78b1c1c8e006a15024110680b746f6fa78141e6ad5c94235e8911e302e56ff246553eb2489ae15daca842b738a2f3ac206ffaa4d22c82ef165baa41ada13f78eadbf6beaf549f17c23fa588234eebdda38bb7775b1f91a617ade0013d56d52a11d742e5e3f51e463a167101a1bc674440299ab5ef3dbb5c941b66f97c25df47fccfc14f6626eaa97b25dbeff33ce5521702c854d6a38e8dc7e46362ecf01e490e12123f1890158716bdff6355a5131749ec0839895fb1d8958fb6390960ff922364d474e32950090c3c5d25302e3b4edc8bd41b93dcaa372df1730f57c6b44001f35a4b3088bfc93e44ac517c1810c3d58e6974568989a1d8ed60753563ffffaba43f3023a5b81b5392db599079ed7c0f855e187ab3664ed73d438c87c0adeac57e2f3038bd492d76474f17a3a3ce39da58f8eeff0642b26e1e3c9ac0b73a140c928dba64f532cafa41aa3d9e7b5198407d7a456addbe21b5d211a6718d00bc1a52ab0506d668bc8811dc5b998e640477215801f3abe0bfafd1c52b43ab6e0e8a10888dedeaf52f741bb805398b297cf36eaed235eacd73a9244cd04b3457a2f752b089fdbe0519d27f702aa687a4e024533bb5506680dd72dd20d42ab67b58ae9f2a3cf759b5e3c8bb73dc73e5e85fec65a1432f52d40dd89ae069d17fe060829e8970cffde9f3bd24b73ba436c3a0f2e6ef7503d0d31f19783598f3ca00e21e391145dc2bbce23d42f789d790bf4a20984c93e833d6db731e0d4605d0067000b5f824f7b05d5d20d05ad206343506725d0ba4dd8a3a9c8e4f436fd1ddfe1e5ceb51e43683955aded2dd4d2fbb0a39db30a911ae6d11a8b18a719446cd8d73219a2e39cf5213cd6b655c6fa0959f4dd4c4cf08c526042f4da3b41e200bcb1937a47276ba5fcddfa91679c07d5b0ab6c4023f661bed1d40181c1c5082cdc137a4f39714b0bd300a50d9d3a55267a8942c49dd03c0c66e714f2923dff6ccf1641d2088b4a92256ad8c573727b5cf767d4bb8dbebc2224cf690750788c7aa89aa3eb02c1dde55d3c0430e92117dfc98006979ff4c470cfb122ef5445a8946d281f4e940d3930d690f7a827bf57d260bb6eb0ab10361f88b6c210f8c9ab6f8577787eb8334ae594e93f88ea62af34a6f0f4d5619a5da35bab6400bb144d8cc21077810d09bd2dd28724cb7a58c80404d4571b62cfc00bea492e810cac226d426054f2c9049b83bd216e71ae84d2d68f5dfc156a4fa1174297853aecac17a80e2ea0c836f6a9a43d8a1aafc8ed6a1b45bcf88e7a891cfe9f3e4932728272afae6620b66d8057e0115e7884d51d517c984695d108b0b9947d5c13260e805606966dbc7e665560981a64761ec8254ce0393711a81f8602add6ea0dd68fdd7dcc0c5b41f4663a60482eaf1c2185f84440073244d6a9c4ac84b087e826ef163583e30c4982ef15e1ea9920121d61c59b36d44aa7d1b02a356ad7ea78a5c85f9dd773aa9d6f3b889d20628a0d5aabe36e08a2ca122aa82d913c6eb0a5f8545b986f0932007ae498b59eb673899130e775e2129767db3a5112c6665661a0854ff6449190ecc7e9caf5c4ece1153dc48a8a5dbba78d88cccabb2f2227a2fca1534b50e5d7e730393b584e1c19485cff1c04cf8c6979b0a84508924cad725c0275a1d208e35336981d2be677cb65c5173bc7110c387d5d637b9953a108e6bce348011fea73013692354840e67f73704af7cdc7b0787245613cba064141bdd7e83d4c29370f191bd08ed1c953f6019ba16d4314d0e7404f430d9244f68bc49b9a519df025e522bdae6116fa3d48ce7c6d7c60ddbc3c81ecd53ab3b5c9a72cd641b3ce2a2c88bb74aceab77a9ec274756b52fd2453a5376611d13d9f2224867604e86e35a917a5f5f7a789f98a3d932b96e0c4c9567a070f7bdc305222b6dbe7409959009161fdb1e85b022c428117a0ca5bbec0c49877c9d124e7c263710f440b79c6b29d21d4aaf11fed5526ed13236d1242335191fc724b7ff3136bd24a33785915c0c16c9521b6db091dfbddb4e211655327e5eae7d2078baaaa5cf507afa243f1fa2d07c68845a4fa937c31fcafb2635a069089ec686e24c7748cc7faf5928761b887f855f886504b6df71ac862b68c082a781127ea32cd64d0b570812b35a3250e12f99284ef0609602df3ff0d2ff489f75dcb516ec9d8b967014164e1fd0367e164c48a34018d6d266b73db5d9bf55c2dfdaed10c3c10ead6ac880ccb869b6aec57ff93677cac4f3f38f289132d60108c83cd57e262b78f479d9f203009a03c77691732e985733a20ea876fdcbad978d1c6d64c2e5ee25ccc31424b3a5fdc72172e19df05ea630c42db9611cb19d89b2d31b2528de40c96f4c4d25483bb0f0838a55871a65609429505f9b97ff42be54202c29e8b7d3da5b0906177063eec863b96578f382e80fe3d4d8615d1618394dfc9305845fa2a956ab5c554c3a8932e0805b278e08b76b1469cd448b65864c7fe4248eaa4154ff60afe0de409360439c5f18d54663c749131962fa99c431334ad2f59e0b7edcf2608776905b6955ad20c8992dd47f4392e6c64abd188888e429504f58755d84907d4d0705e06ad7324ad52e746616c28c206359719376258ed826dee1b1fc694c6f7c2556ecee3fea2269345dd95f26a16af5fa38b1d8b14b244892bb57866f6cfcf9cb56237759733dac3ffd4e9a7bfbf667bb810b3d57558d13afc1e2af762013c7795038e487ce946d5f27465b085d54b25420ed527d6e3be2f5a051c342fd39a0ab54231cb45506e4ed4a5b35350b5cee9e9c543325ff123a3eeb737fcf407f691cbf20b72e0beb7159aa98e94a6868cbdff8086978328d871016ed220d49049307566dceb05762f0afcaebb0703c9c05d7f4e056f3ba867951712efa30806f4ec8edc943dd3e0fb40346b523e8a5dd78d46a7fdb36e8f342c11157925988ca9b0c4756029eadad2be0ecf8da5bff6da75f5be62270f88b6a95630e6a748b86c3ce3a00bcb63d2844ead0408fc768e67e094b0e1b732048476137327e931012a38f24b5b20b64319e0be43a630ea8e8652c1cb5cce3b5c7cdc74059057a777dec22277efbb2c188d7aba02acaed7588ce736d5ce9d2100624edce8374ce8d47c28d5a2db3041afd413936ac3a45eec91af648741983d708b01a054c8f672787a730b95eb125c7b15c1aec778b9a757558fa33a8011c8b5f575c892a0496e0a280c76c614355056ef45d2de6d9d9fa4ca6945b2822b5619dfdde46a3cb9015d9b93adf7b8c806519a84619381cad76e1fbc7e677d0b0198e93ff3ee3ec8b142f4ed137835690d3998bf6fcb13da623077f6ffa126b454619fc4b9946e1b1abd8c31c765322486dc31acf3853cd6361dfce24f096112ae9b263ad0d7a826d3cb897680426996036d347a8951da26df10c9af17f053208b9759e006a00977271e385680da3e98ecd11b1fc2ce4d1e91f81993d3c9048a0a57e2cfe816c64981918fdcbca5c493c52c3e822db7662340ae60de131f922399e9de607561d0b48f0565497eac30b7ed575031644472fa3cf0bcd9fb7f1521f9044047aa2ce88b4a28e2553f1f80a16e7bd25e79cbd86e9f6cf62f909f5cea71a7bdf6015d75fc1a7fac0111c36071bcd3fc8d146b499d2d44c538566af9a27aa73a0dc206a667dfef5d43bb3985e24a638802581db6de7911141af4006292105c809f1d8f8faecb06026f5cd09ea17e775a3995586745296ab633854cfc726e659c0d2b96992c8ce1c874d2617cbb6d301f2150a332cea3ab7f7e6121271ee213a6b12026faf34dcffe1434c0dbb05f5b50b0689deb07a9bed21404e18ed3e992c3b0e5f90b5e44f1b92ea4dd1942b43f8c1d6e0ea079881710d634326da44f11230e670b2616513035c50ef81e4c3420c8f20177bca0c8f9efad02f1f95f21e1a87acb7474708254804e6f8fa152860e130ed17c2d9e8ce429cbd8f6ddb403261ae210a8a6fa07f65ccf2bb44c9199a307aee80c0cdfe508a2885c8fd146119ea37a6eee3201f45564f7f0b2ba47d56ec6346ac3de846a479b15c15a807f5c63a9b7bd26583a3381c6332e0d5103e588ff1ce319d42d539314bdc6ce3103548cd4b79a89167c25f25dcdb7eec478afea322bf7a842dc5d6eddd0b49f7086d4124d49ff5ef46e1bb8abf166eee8faf91c622bb9719fb089365def964025095ef5c958da405a8a0c769a2e5bdb58c339bb82e5b822f09dcd40d12accbba202838fa70e14b010f7000341d8af76222202ccdb6875a2da5f68babd41a4b334b22bc774ab3eec2c2c79310e7dd081c41359fc3b4b03f5e214c372ad7964535572a238410499a2d1ad38ffaeb0c6b4cc206606fe6093cf3610b28a3bbc930a5c26d8b6bd4e5d57e4841c1211cf8a2b47352bfa1612a1e689d7919d1b484f28bb944410937cd07a251df8f8ed37a2eefcc4f035287d21dae91140fead78c95983530b30bf2508e1f22032080d93cb6e4aec464c5c64d1d009b40ef08ed95967e9111495909c5abef6eeb6fb16c9aaebfa7b451263afac99a9c2dc4695f8924bd0e71123bf2407a88dc95511a6178d28936500397dba42f1002920172221637c2a4822093f2eb60f5796a4431c64fc411721731ba3e17f7b15d525b05e7635b9088dd0e9a64bd7fddba8d6400fda84fd3b84b21815a66e89bae8186590ef4870f1040e36f82433c94815362394f5b75d31b3fa56c0cbb52d68f0ef4370addafe5312ca069e1c900dfdf1cf7eac3ed60ebdde9eae05e7959217760e5ebf4ec5b745423b5d786dc64f7b36b59477ed7c81dab042ae3012b7abde8ea4707240ab157201a1211d148c9bfcb1f901a3043eb3119a7957de565712d5938608656d13347f863421ddeca93ea3b2d8a6c883c0542879acdee59096c7ef6b0c78b5dedae795406d25dfa2046c80a277a11df3c74dec5ce4960f10597638bef5da8dcaa113211026bb758ac2cc18f503dc7029018c0ec4a4b8efa5f0592ad1de19083540412d273415629c4380fbe415b302612b826eabe44b8497a3b026dc67bf701414b345d203e4582e15868b9a8c316a75ad8d3ad86f6ae549d29fc58b34b371e3009ddf76401e555e678d8419fb21f8a3cbc2eb9119c0dc9bb0f61c8066f40f63bd1c190c4d4344e653f7181bec569f456f6c7069500d2ef48b8bd0ae6b1dcf496681e63a454e0b16f8de8eed59b8860f7e872a91cb75fcc5a994322e550273926c92dbcc86a82064ad27cb2e9bc305aeac910f52be8d06f50ba13942015d9a2ec1709a536420bd2888d565301fa2d525d84638afa7957127c8e5cf05959525ffd35632c0861afa4af10d498c12c9ba43656f33e12f9037df2cd2239a965b1818c723786f25bc9ac051e3d0fdbc37ac35e709b140dd7f670201a95a4547f8c0d4b4bf7196e6292f4c31dc12da9c455b4d6c25f65eb723a0f8d68361843834aef9f0f91439836bbf439d87a4c53c9fd9e76793d5f78542ecbdccad3bf0388cabd268ac4686188161c07c0d12719576f5a62eb26b3f9ba811faeb77f36ac151822f4d7adc527d57279683ca8e4105aa9a9799f6869c60e5576fda8fb3ef90161f74e5aaf915ddb1a81aa8c9b4bffd6a51d31c7dfec8d3edd9e51d822f9407ae1e363257245b8b5b2cc013a7ece7aff005e0eed60a5308f54251c240de2f814aac87c7080ab333590d3f99cc645c363102e0292b120b898fd37db1142fe1a38890b26eb3169a2c04265bbe06f5c081812c4f00a68ff0994503ed75e75d422b4f4a06dd4f62327d1ee535691130824a677f474bd76fd2b0b8920adbb8ac9735cbd190447d212d5553d58e2d29e73795877ecb4928b44d65757a15b055ee11330f2e6526d4ffbf799fc8229b76d47ad36e9e0a045ca69145a6b584f499701087901baac43e022a6da75ec4a4db999fccee2d8a86572dc620ca555ec6bdcdc552a6cf535b14855a31c6c4c1c6500e1c2fefe459804f4b2e9757a9c331e3acd6a622f3139e0d47eeb976ebb0da558c9ab7f357fd6836a3cf0c19082910b387a523af655e0db9ad96eaec58d37e748526ecb122a4d07ac0e74f6b6eb80927a34bb34724117aa59bea11152ea4aefd6116e5aed35a255accc77ec311e8e118e571c250bbebe176288d1e19cde8f8b600386a3fc212c5720731deaedae646cd551b586bce7848fcc93233552f3b28b2c276372183dd7aa7ab20e881b62706e1dc793edcb76fc1afaa26cadfb1d05499104d79b149afc2e6b99430cb86f0e9a431f5ffed66773ccfee2d9d9832da8310ee679873a1c763ce52a064c49b1ca2c041b7ef39ee7cf0d0ea4fbea97c1883b185fa7770bab754d9fccca7bec0fd1b164091f5b4fc4e37a72d05bc88d723cf3660853ce7a719a772da7d8fde495b0e5f40f35b7e70f833c4c9d8448558ef74c80239e571b564e55c3e8957331e5dd2212402d46101728f1de183a8612ddfd8a74d84d239e1744b6f6ddfe1b6a286717e2e2f29dbeb2a2aaf57fb62d01c0d25d2fa0c4b1bad17800a25c35b619b196d2f4324efe99f1e74298137b27d06fca639766ef6e39c28f2167529ef63d0c4a6fe434c482a52d43a74102a8f94f2dbb185bfe008c918482b7ee31d2d6e071068c39a65cb7826612ef69030a628221ae30a088ba75d3179c756ce1143c9cabd0ec54ab40e7ad1eb251f534a6c23386d29e210a43b22c41d95b020bef51b28701f5d8fbebb832532974276a7241162fb36604c1e4388288a9e78db596f3322992948c4812c15b92abfbea8a11cb60795f390fa0767d1cdf49d94e3d6237f588ed97a211fc56447169cafef4875815be8dd30adc39ec24b01c2dad85219a55eb5c15cc2e47ccb4ff61c5d770fdcc1d8a89c48e5f5cb579a0473c360d3a8f28012b876f77ee10092d6a3acbb5093fa2b33cba002fa8b78fbf36628cc19f8e4059703e50131bd84495118b2fc3cea49e3773bfcd0dc413ab3eb40d29acc6101860e8fcc9f66f60afadca36ca7206e2b5904346dab9f7d32ef8c8d7d76eac652811cef337a3a97123d108244bb48963a81f97218a68ab3875242b28609226337f332646cb88746d3f629143f6b7e26ef422c8c9d3d99dbdae6eadf2314a762b0c7c592d7766b4e9b8281e34222151a9e8a093f835afc139e090ca3ef2bf072aa44292852b8d5b48a14715ef8eaa953986130b55096a791f1c7de81b3ef7b7df8bbc6e1c810a723f22d203a22b86289b554c375c8304eaae22c193da5ef3c224037265ade30c40eed5b54f3b6f2d4ccd1551267bb10f38b4d6537992f8a7e4059a884f987bac4e1f723d81f4bced4cde6779fb550f9e0e84c4e9ca51ba9c9d5b3ba9a84a9dd7f110575c9d74362aa40f9e53b174c2f224adab5dd28728bd31435f9046d0c0d09bb549d06a77dfb755616a1cf509e2f61bcb3589f0304bdad740de56db6202016ae22c01a675b28264e2043ef80bb2004fd95616134980bfe9b8a6d8461d44a1d2c982cb776c26c3b8981be9ed14db647e5185a5db658aba255f5d11e5e01bd68e1c2211b0810be7ff0922dbe4bd7daffea7ad566e10f410f5fc68becbd84a8ad95587c227932dd336b2804e57625e1fcecc290edd5e6f889a9e38a207cfb5c7edc9d8448890c03a4c55d36912f38cd8e80377fc27b345d2f4b07d27a85f10ff42774742778d5e32366a19a5b8d2660f837913d4e3790d7b5d1c70c6c6f167c972b8e5a0fba1635c27e85d8c9d2ba29b2bd5e02365c18bb71ee34381aba8e5d4610cafc3d53f48aac4ada178392d7ba7892b5ab05732c65c87a47100db8593e19ca8973c5b207d0e083e6eff989b23b6c89a0f7ce712309a36e302b55b683432d4cd7c62cca775ebfb6b5d0f6bb738804be5c012cec6c4e717890ba4c42337a8f144cee9184622377487a4009d2c7c06b97e2ae4698e12653505fb9d2166357eaafc68206f983337d21ce5620fcdf8cfd5469bfaee08ff8abe6a824aca64f27123921d2d705895770bc64e47b1e9f7a1c90e9ef87b68d2cfc944362d5b821d9effa2302ce562cef4445ae4ead8346d06908d23dcd4a08cda63100082ac99dca8c277335417c5de2e2362b71ccff6717d05ff7d46048f61230007e7721672a7084af4551886ad322a12972fda8ea710237f7165d0eaaf4c1058e8dc19663063b64d8ca0d7370dddd7edee02f4b0435475e2c539ec03c124213bd8acc1f9e53d6833251d6e14d61ce2e13ad0258dfd978b85c7e8e31dead98f9c31e11b08dc671f3c113ae8f659c9ce2a943052104ea1b21e88fce9fbac507a3f38fea93098fe142a2b61a3f46e2c4b1a9a2f550a944002da9d05586140905d710e09d83aaf7e1545b2bf307945b4ce8a4f6e031b0a4ef18c381c865b6504cc76e27bc019d9b2a53ebfe21cd867045977c03d03ec3b608bf7d47f30ba976cc3186c13c8e26c25dae84c578b3d5195d2dbc77eaba09f969636913249290339054b0590055f987b6828228e4806fd9fc30fcae74273905fd20d1191ae8123298638ad9e751616031e5ff156350460a1051035e5a5358ddf88886804fb726bcad897c354986e39e660ce17d539fb86a519c3148109c3a49935eccbcd1098203069303f60ce60ca60e29831eccb4d1854a60748f0cc17e60bfb72b303a60be66c084238c28828a820eccb8b487b2788a0008188274e7e806a424289e2a950ff559000f2a03d4d28f2f1444c2ec5119edccf91128da756a2fd67fd9faf4d3eb3f828da0e2414f74934425eae9174421e89776f275e296a7d5184141d91d771985374425eae89bcec93d71ac6dcca645f988feb4bb72b5ae769d27fcdb8b0a98c99155860a1c4c396f1d1c868c4aeab9ea5dcc5a698af5636b569689fe6d580fedcbeb2d83306fa3f0fed2b7317169e66733d81f34373354813ddae3c1408dab30cb8881ccdab956be2748be1ca27d3bb46690d1791a70dc28a564d53b189d5b52bf2744ddfb44dd74aa8a9a9fd0caeb9bdfa34f13f9496eea2e1ff8291497b46531e9ef6214ebc56ffc0513cd120f1ee4987c463e916cff04ec0b2a2864ff3995b9bff8e609552e9d69a17f37f7465b55202b26525ac74162cec0a7bf17dc1f6791addd3652f9b4fbfcdfff37499ce758c75eee493db35fc8193d53ce30f49e3477e485aed5d30ed0f0c651ad5330b4dc38dc161a8432d03a7638db1c66803d36819f88535ede3df0d3a47cbd0345c161a868ea143a06934b0f65a4b9362e3bff106c8c7deae71838e26810ddd723dc3b2d0326e0c4ec15ce7a4d8e858e7a4f048e1816764293b52768840c61b3a67ec89b71c5d43dfa0655c167a86b6419340e7a4d46aa06637fbd81517c7aef87abaec924a6bce117bc4e8966b18985b52131d245eedd32fba4c0ce2d3c59b68c329167f80c41e1d3f2ad678eccb65620d35fb1978ca6e79fe213cfcacb679e479b5933d862e13bb1d699a368a350b0b8bd029aa9191916ab4b28ae17eb9e279d6af8b6369ae8c2bc3ee90ffebcc28e1d5ae0065f0df8f88a311d79b120f4072ba2e13813a50c9052caea599881385702ada3a166de20dd38842e22aae251dd815eae79ace437e56adb1e9e25c07f3d0397f5a6b7db59a55b54ce136348f96010f5de35a2745c796e7d5ae18f98c3cc233a262ae0898882f4b1739b0c19b72ae34cfa979e89ab6e91b298518b3063c1df39289e6c088f508f05de153ede4255dd40c5726094815756404cb30dff77d5aeda41ea15fbbe25eb5935f892ada97a388f6e5281feccb51bb7d394ab72f47ad70a194eccb87d8b74425d9975b14927d39aa07fb72d4917d39cac8be9c85e2c15691e8e1d3ac98ec1da85043fb7294102b281deccb5141eccb51b87d39aac8be1c95837d390a08971225b42f4711d997a370f0821a928665a876d4ba2f47dd6084122504a644d90056a282a028513fc494a81aa8250ac84ea1aa31286030239c78a52ac883579ca2807ec6db9787451bb4f6fb7f6d79b6b06c9a289bffbf24a2c9ffffaac9befcfe974facb5d6863c205141a10cafdd72cbc1afd62dd7f9312a685f8e31c6d85a960030c873f13f983513adb5d65a9346e5902e65fddd3bf4ddeb040c7348ba01c79c73586eb30266aa248ae0a8bf71c8565e0bd37803e348ba01cb9c737e307ffc861f9a498fa230647bfc9954ca60adb5d65a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6bb3d96c369bcd66b3d96c369bcd66b3d96c369bcd66b3d96c369bcd667bf96ccb6f33f1627b11410517bfd61f983f080a28189124788a3d04350966d24e04bf1209a2607e3014b9155114de56838210b6f05f147fb0ef386a1d96dbac804992a5586ef38864819be79aa4b5d65f7e1d86f70b625972b1442f49f291fcbe076f6ff1ffe57d25a4cdc0cefc8380d4e8986b6e5d9ae37b57f26ab07f59d7f01d924b1d6ca45df353947df9d568ceb90c7920cb1e61c9a63ccfa61d86e536c5d467308764c9d22a5b50d94cad2c9ec139e7179c92af329f240c850a64917d492ca0c031572dcf1425264185cc8df172e644b91140349af2e48309132f2f2f2f2f26d013afd0af39f9bae73ff1f77a9d3871e2c489177aca6499ff976042c94f287530819442daf1092d5af47e492041850a152a549020c28bccbf8dd9988dd9988d59196bc2e5b26f4a155458c1bcc10a0228c9220220b1a07dfec58309269c70c209279c60020640e9a245ef25016c02b0730250a240bab128dc9c7aec9b425900155678d97d0d70ea7107905d6417d94576915de401e4132f100c8d088d404079b5d60ab0d62ee0fbf87fb7db0394190165862109a0084e40d900d28d024abb8012c65b20fdff6b0694640b257882284e0d563fcd1c3cc5c759d9809c7400788622c85b0079087214309083f9010f8000042290738ec07f8e80c625cc4088903bebc1d75a6b7f65f57f0ba650da2dbff8ffc91e6df95f149039c89c4bfb57ccffbf0d5158ce5b6046d027be17a88396863a64ffff3f721b1ef1e3e5743341baac2df74a27e42effe593efc96bd9ffffafb88d9dfef98f3bc9e74464db7ef93fd9b36f4b97fdff3f99a3853ab198a815935522454295572b95b52548a458255458268923b259b40ed9ffff9f7c9c5a5a26deb279792d2cef14f42cf3ffbfce29a1f94f3e5cf6f785e57f7884891711d24dc4b5b06f84d292ac35839c20dd586eb3e67a84323cc25a58ce39679892cc61da60df9288ff7f4ba280e11814aa8e18d28de56fd51531b8f89ff624daffe360179361b486c1ffbf921d918bffaab8868b1fcafe377addb3fefee3353caafedee803f50a423c83a2af1e5f75f534aa0a638be148c26c2ee2c2d63a11e61f4cb762585a50fd5709365ea3e21c533a21a3ae2e8d8caa8678e6d5433c135324a5f2e35f7f423b0cf96a85829b0f413d7ae8fc8142567ba79ccbc00664fe004371246be7b521476ca383fcffbf3638f14af1f7c8088a52a381cb0b763ba19dd06e375e0c8a63f8e9f1483c0a8f78faea1b4ef1a7857628205febdfe9ffdff1ffd7af1f4d6180d3ec83ff074330ca06344bff34aa82ddeee8e868955209da35ac3fd0063cfa642b6cd343db717474048369df7b7378ea1c9cde0b8257c96e8793a01d376a20ffbe1d351c1d1d45794194dd6eb7dbedf427748faeb57886acf3f7598338e88b22e27456b23382b3063f4aaab392dd0f699b524a25495e32cab5b0915b30e4e078b274cb01d3d13e4a29fd403a22b13681929d929d929d59337dc0700af0ffdb6fb7a49bbfd7ec61f660f23077983c983a4c1fb3c7cc61cec09481b9831903530793e7ff8fcc1c4c1898384c1ccc17982e306f9836cc1db305260bcc1ae60afe7f67aac0a461ea98293051609ec0bcc1b4215f0bf67850e1c145237353aef64e39f78039c3cc314bf0813aa78fe61173bfda3bf7e4c7b777e295e6ac73fe1c3db6585a9af166dec29cf1f6342bdc6e2bf4d8b271681c124288db2df7568ff163fc183f5ead60613fb75c76c1e642442484480811d1e7702445fd91bc9127f2aec8abe9db164274cbba7ff933335146773efd6934cd81a7fd311e418a4e0d5d7673429c9c8ec59a85b53a19837d3540c4e3f1562995dace1f188617bcd646e7fc3978f89cc1f0fb1e42cc0331efc3bce731ed71fcff8f1479a8735c847ce4f9a620a21b0d897a7820e40ffc720ff1968341f0eb81c887cbffcf2014f0fb78c831886e34ec61470a187e9f431ec8fbec43f99c3f639c032844444444444459e70f1462c1e7ab154f01dff2a703b44f6fe92d25bda53730bde5f4f6cae9b8f436f6bf4ab8cfc6e9f4a6fe232f5d6e2e3fb8acae1a5c38ae1c970d2b554a45245d3a2e3fb8dc5c56570d2e1c970dae9c95cbaa7259532eab8acb2abaaca4cbead22151a6f963f9285449f231d54b4551cd543e543eaa9bea079b5e4e82cb6252195f6dd56a41331525d553cd543e543eaa1f543712aad94a3553a966aa996a76433553ad26c85b605085746382e50a5505722ccd53e72673146d5f95152da6f412278eccc973a7559e16d0fc0261b7c005764fe1612a951a4b381613962ec54b398949f9aac54b825f58cde19405fbea92e42cecb2881d49110da57478261604928ef998a4631d5a09c762927292e29525dc9770a4126e9770255c0987c4c28ed818cc33aae62c8ce3b0653baba8a44837204f3173be3b2727cf1d948fe70eeb7c81c3e43084362f804318c2106c7058e002bb97fc4f13cfe4c4d43bf59c784eb513904d6f4ccaefe9d62f4771e8591ac22f5d02714e86ba898767624194ce984e0cc7d47b9a188d534fce89e76962304e40311a4e353c13930195c57499a9a762ea8926d264ea997afb74eb989fbad387ebb214391deb4e15897a848633538d507bbc2235094e4d54cd711c2188ce6cb4782c5dc75cc5e22a920ab97fa44e9e3b272fcf1df444718a77636e4f07f4cc99834e50a70967612c5d09b776590a9d263606737ea6c849d13a53e0a47891a2e5547bfb549fa83c0b53756a12271df314efb2508fa84852bc0f557338b6ac8433e97258ba905495680cf72f9c8b8e724fd76a3a74b84163565a69e9b364b578e98cd9b0b01c0b6bc56e589d1e9b616330ac8c8e713b437480fcf4565da6e6742ba6f066a775b3d3e225c873a7c5c7164f593971b84d0931c98de1e1195187d3ecc4ce88442297e12ecb451df3dc7b1a91d76369c61cec0b8fa30f4e35909d1977c4a4b937d64a94688bd74378c67031a118ea8cdd925c16b1213646248a0511757826062446a4632e627e3a63b353a66761380623079c8e9f26e6827ded9031c207cfc81411abf5181d1debc06f744ca363be51d99ed1b19a1b6b253446e34eb6acc5cb9d3c0b2be15a67eb097e614e9ab9bd62b1f46f3955d2a9169d2acba9f6fe857989d324a510d34354d5e114f37368cb56ac73e56c59395b5c501288b678ac4e9a58f9b34427cf1d162f59688973bf90405958563e9daa3ac9c2b2f2ad906e5a4f74abd7e2b14ebd6f04b39330222c649dd6e64fb0836189d315d6696dca33cf667d67858f56d7652d9e919d6bb93d4d8adaebba4c6d59795db673d7c22e5f21532915fd697d43aec14f45c524ddb0742c5dd6f963e970f2a751a8d3e96432b578ad2737252e842d5373bc8eb9cac333b212aee35c129d5a84676415e836a6c2d7ae9458a7b529715a9b19da0ab7d093b366a299e47c4df081d8da90f95a5cfaee0f36b4c13637058f5dc048b226bb6c638c83b0538e9031fa814d07c3d9610ed7d824101788db3bd9a56e836c3c10d9723881ad053bb0cdc044d866008212c3f5639b48b0905d16c13d08f23fd8a6cf3582e306403496009160070402308a08583708445db6837e2cb950f6d86dd08f1db4982132830de625c6aa148c61a3b0820f3f6e7f64a7741bf443c70f1c4060a6e0870e911f31b08ebdbb0dfaf1c291ad2a7a26469404fd04e9b2fd38827e6a1b28e867065db65b10f46363ef1df47382bddae62ae8e7033e1bd5cb6d12467e063b2c728fd826900d9b942307b51bb8033bd56d502dc65611c22562939a7c3a3f0a2b1060af38a964af5bb7dbed847642bb9d919151cfa8676484afddc1e136244e45a27087e425d1f7a9fd43475e12ad6af04b4625229a41da27f9cb2778071118f1d163021e3d4243a4dc40c7901c2f784c60d478d0a0a8c96e090d40a0d8154a8e1c3d2110c110517e6631a4b28f1ee4201fb59ed26d900f22fdbb0df2b176d27e2972d9c86524977d5c1696b7bc280739492a9538a9746f0f3399630e013c43cb5ca6ca4afdf22fe7acaa2add06dd6c5055a33555d51ab5c6d6a832aa2a53f3afd6906cd8aa7a8ba2821de83275fd22cfd59a5bd322b7384bc0e9675ed3a2a685aec195806bf17d38cb02f3dc6b6a827c08ea1995ed9a9e9788427ab82e987f189cca0cede7df2713869f9581b9a70af3321706d35c1bcc652e9a92a80197c14000cfc8b00c86c3d817e621cc26024606b3829bcb301fa9db201f8a7cdd0209e51e66452efc4c414f2d932a951691b34d142d1d456e712274cb370bb7dc846521e26e0c2671975d516ab55aadd6da6ab58a5aa8219698a76ed515ad3a9dce853c775cb83e633a0b8b1911ebc578ff2ac2291ec2adb9df79d142633b1b835d562c1c0d426888101da36eb858505c0b55579d93ebac247abe404578e12670e0d941f449a1a4bcd90be49fee0b0776435e45385520ac0acc5f4eb5884d81b989531d6263389cf250545d752b0ee90e294f8a43ea93424979af17f08ccc8e27f5497d78ea634a7dc0d4e78503bb0185dde032bdc849979a0b90cbcd15836be6a2b962b04a9058a9905c39a98dd10508e57273c5e09ab962b868b5181da90efcc68a06c9e5e6ca496da436ba48aeab2a6722491617cf49aad7c353035ae1b2181697a532bedaaa1b6b88b4822a27bc544fd5a3e25101a96a2ba91e2bd52b91ea9148f556a9dd533dd5ad63ee620d9158431df39c4a6522479144d57555e55a482c278eccc773e7244fdc94c2a5865246c6d2ca5ac2caa592a49688644b972abaa1d0aa4aa5702923312044701dd350a595b524b52495442cad64692dad29a5b5b49656221636c4c608e1b4282ceaeb6a52995439f2dc71f1f1dc31c1c5173854cf595c3a225e0e367c769058a990ee3dd552423a13674908bc99682813ef94c3c9c669c7c987046fc5e3d1e0cd30f156275c2e89d065a10e6163d42529a16ea2b1d9baaeb915a7639c4a64c84cedf18a74b921d3a90aa95075d5ad672fa7cba95ae3b9e3e2e4b9634274711613ba247b66c2953a4d6b6ea5812e670a9cde139cf2707aca59988a5385907475089124ebbae6722b89e6a2229926453b9bf2dca0310346cbd9da381676cea0c9605f2ed8f445bfede8701a0eef3275c5fd6b6dd11559986a646354263ae82834365bcf73144d2d2c4339242aba1d1d9e1d48ab7d1a7d4a416e8c09d72ac2af96ee86ad3376539d315bed8cf958188efd88487888393c13d301d4315791e1c9e844ddd3c45c1877647aa3ced3c8341977281a79f08ccc4ed48da28e86a87b5107a3639e22ea64e8989f441dadafab2a14e4b2508128622a05d9686ca65b75ad22dd8a659f2cfdd1535dff35c4394b0b6eed98b75a56ce16b46c7592d4529e2e24106de970da7a295ba7b56919cf9d16275b2c2d2294adf1dc69e1620b1ab64837ad22566ed5e572ab106e28b7b65a2d165d6e5d8570436bd18ea72bad50b64c5d75b97515c20dad30650b26b65aa3ae28b7ea72b9550837945b7545b95597cbad42b8a1dcaa2b5a575d6e5d857043abae685d75b97515c20dad5bd72a4a21dd94d655975b5721dcd00a7efac432636109cc30732a36159b99337333b47c948b9cd8146b19ec4ce6e11473169fa769912cd735f0cc7e91c24d14b75cd3d02bd03b3a45f026b45dcfce7a10432c4deed1e81efbb23cff58201eddf2acc3ce94f8c994c347fe0247c961e03625b85de19693f65e8c7366e950e54b853b2c9eb35e81fcfcb9ea3adc387d2c71c4a50e77c951bd3c7738d767ac67613334cce0cccc6246e01417e972bcdf79c1e23084362d513ae6b1226c0ce62b9b172f60506d4af0965d922344340bc36789167eaa3ad0865563cb603ceff3afcb599ea7c3783a3eb24fa7f36c395fb4b8380caa8d0b47531e692d052ad3db2b86d7ec457bc5787ec1578eaecbd2531dc2aac0dce55497d81498a3a77ac4c674389dfd0bb7a06acea6c08196f24881d25a99f2486faf185eb3578c579743a8544b5cae69c94606000200731700001810088543825916855920797714800e5480485c583c9a4863d1481083288aa220046210866180010a21a214424add110097c407368c02c65efce8928e8983c1b7e59924b2a21c902fa82ec00be1afe8858f31bca848c8c38adc0c73e504c42015c2d2aaa187cbf341286e0c183cebb3873315ae39265ca145c486508e9df5537cf43ab4f492ceda37c7da75b8b34b0526e4d0e2d0e87d274a7116d8d4e33cde805a05b1be17d3f0df15c2e44ca23cb6ac0276d484aa55b92a11d974ca8bcfe64797cfe24a7ff363aa8990b996eb63e198f6b5d005d59f28394a658be3e9471513a6895015e94fde3a70a67d4714d0e3ff66653be28739d4bede2306a3217316e73157ddf75a14044067523a5f5fa8aa5aa71689e9653bad13c12a126c55ebf47c4d8fd397012d02ffd09cd5f3414c6b83065b4d21c41980e5f4f69f505bc1dcc07dc13843e81e402a00f3b528faa0c8f4eb969e92f83f6444bf5c5b7aeefdd49bb23ce6082569080a8118de026b62f566056e53f2966c8f1f1fabb72c0f05e4c21d5310eb59b7144a24070da7857b8b0c4e3fb3f9d221090773162516d477cdaf782790c2fe296a8989e64018522b9ae3b3e17a65bd596cdd42f77d2de9eab0d5e485f6e346135cbd90aad89f6ee1e7e4cdb0f705375dc500d34e52192546eaa0eca634e05576e30a7957e5c99690b680415ca55b238282eca8c0900470b518b0c7aba69c5e89a770abbf96605532b59011fa8a1bd184c39911253b2818258d2991b3c6b4bbc7a32323a4146c151124a4ead6eb2799d0303e420f0ad93a8c5c4a0d512f3b5211124f42493de6a20def7d516c21e5bef70b1e8b92bab009a64c9145959ae7ae499eed877d6437a14db740128950ec9c0dea11528497168d08f951b39e12a97a7222260d2ba80e9ddd19d0064a75a3dfd8cf9748f8224fa2264b2c5483991da00cb04da65331bff8c9ff46c0302bbcf303cff86665ded05615651f57de1b5fab887419a3d917bc0f36839e707ec6990d922569d1b238383e8a7237adcd753510e2a32507453045b910820222b54aa137a8631c4e875c874064f1d1385f617aa14e81b7da73f00800edee589d06e9461d017fc030be278bc4a1b463d2a85ecf659d3aeae3ba14115c7d22aa4b23e98c30427a6ab9d844462a327d3012293782e3e0985a682b0e85d7977ad920eff6b1c8d557803dd3bc964a11f3d555597d85298cdcd7d0ef5c97b3eaaee9f290a19147a513968f421af08c7aaa471123222323b7a1431d30c187499f11294850a1c91a71ced12974aac69914acfb99ec353a99900ac033d9585dcf56115ef93d2c51c4ced110a76e41c9161fa17a49df4f2af4074390acef7df6a1f48b0c18d019fde568e1b7d510750806332a5aae20f6056d9efd621a189746a882347b60f918b14a1301d92ddbc539c5b83630eb66c6078bd140cb2ce23aeff5bf344329aa1cfdeb088a31fedc108b0763208e683d61ea1756db53fa626c1ed1da8b7c8d41862350de02a25bc218b0af394d05058080a0150ca8040213088006008de0af07be37845df4c17fd6b14c02a241ae4087bdc8a480c8c1f3595bf07a806d3b2a8f14a97c67acf00716b615d0f95c46cc9c66115cbd391c3164cc70e14a191087c821b099d0d8ce0d0d65bc8b4b29f173c292c8a1ed9d5d3bf3f420fc558020e3d802f54b57f93fd16c77bfb704c9efe16026c913428b6337cfb263a425eaf905a26bbad029f48bd7a78b8596f507ca5e35a544d69c657436e36bcb675424a362a1b08f8906e4055cdf3fe81d1220a90a806000a724591c273775b32c2574e8de51388e8a6b6743e9331a5817c5aa9ef5d4ea0116a74cad789e377241474a08772643a184a0071479c43340235be094504994aaec32ded4f2191fc22e3c57008815e7e18cbd119f07d2851186415199c32a12e65e8086416040d7db78eec5fa5b2ffe5daa90b3df4ea5547c0a830c9a30ad2a6476c53028d034bc80e8ca42ec520ecf104b439484176a830d008b2469dc510f063234b2e22736a1888f97320eeda25e56883800c9a76ffd023b4f0d93cd0f6b8c3090f62410fd123c62ea1f0e40c1c340b1bdb62360843a0d549372c6a9d88781b2a620d809ac0a4fb6ce1bc56634252b6c69e04e0b34bac76694686313abffad5ac22c3460447cb7b1a6a7c34423c6550a9b30c63634c53cbf24e53f11a965a1c3cd02a0d0e194fa81d15c2cc5e7f94f48b7a4794adcce62d84852ae991458454662620a4a733aa22771b2f265f1368fc4c63ffbe9016dd50ed3f80665205f212d470e8a382d3f72f1e0b63c8c63761b3b61bd9993084dd9e54747ebcf585edda7aca5d91a972c680e5d7085d40abfe50c14e70e2ebb8c425ec3821023802ebc4e43b696ff19666c2ffba48ba0e155185b28f919feb983e50144bbebab10e1933b703c023a8fbc98a5ac785394b6d4f67837ef457b3e2e279b6ed784b84106d49ccbb7cdb1fbf0797c8037d5de8ad3731af747b922824736a10699012e1ce8e220bce0d09850a8b5b7f3f79e188e539899405675ef09d1b39be4e2319a03c7849b7f57f2e0f2e9a3a0fc8222fa5bccf01c09b6f784b6855f9dd615a9e05a71d14cea442f5c59d270aeb31555b49d01d1acbe43b81ceb6629fec052749e0710a67f916a1d0dcfd35bfe5b8350279af234d8c83108b328ece00e236b9b4f203e9b0d88c2f3ac2a0158c53b8f5db467c2cea4d43ae8087a1782e7b9476b6367ed8f4e26aa5bcf56e5791eb061b9ee727ae462b91e50689e478f3790aa198bd820b7680d54bb249a9614930a2cd132d376c92a44adbe35b2f0054ac3cfd14c75ffda08d1968b0482cffc44aefab9d5a0225845be21e021cb7e69024604461ffe7d18e203e6e7705ecab9de8ed0af38e5d2f40b517a055ca4ca0479d97720966ea0150a4b6daa474e2b48d26a9be201341f8b102b328824c8b7f2d7bf0984b466a2a898c4d0c02103fa774524ceb0df1374a2a1843966247de6c25283fdfd415b995cf28aa07bf981f3e7bec7c833bd6a4eb9519c2ab39832e754a42f3a08ddb185dab77ba4b329ddaa4af9648b528c5a9f8c19f324a89cc92298b0f8b24357b98465b2375e5112505a4a89da1c616dd8310ce442d03ee50af7dc571388124249114a83d1982260a379ba1d9554a286760b15310bfbf267a4567917de453246ab80fb1132d877375e6a838081293ddf2e03999dc12ce79b4207b47a2da3d6a0972b212c26bdc9da8c0b1b8520516aef2cb44250a0d65598cf351c1c020a398f94f4441b46facf17c8cb180144c1dc3da9c215401745124b2a8e361926b53ea93576f051b7c4c60565b6cf7fb80399c7285e0690b1bd10250232189a137c15d79d67cc974c28be805379f4e2ff3aa2959e0e42c408dfb192044bc08e481da34204628a5eaa1a9c69db2058a7241a5fbb17726b4e358154ceab4bef3be12043ef93b2ed3ba4e76b2456fe71e3729bf2030b899be6eb1c1a806209fbf8486f5477529ab9601670a8529e5feb028a06a36afc1bd65c2328a65e3b037ee12df9e08edbb1528c9fbef3cdb30d84b14f497ae2e1a593c906bae15a38cc3606edfeb2d1d9c708897c8461c28b7220d4ae2bc6a7344356fae0935f836ed1911df93b00472a257ad6c7f83ab27c4247fb5407a45ad17210437763cf2edc80c559cc1689ad51a924fe57f2571a977cc89347f1921b3566074303b31acc921259b4be0e69ccc01414de930280506a48c278a81e5c7f110379363ce52ac12be84c154e1ffbda20acf6a005971617167af5572ac6a95984d9abe7e9560ee22b699f645fd65708111926887dee859be0c10c01c2060fa3103f4b1ce9b7e4f52a52f88582908c7f6bd5cba559103070f97cf86d0fbbe911912ad75a8aa35a11db9f54ed8b9cc018bfeae06b2122373560fbb54299ead42f9af31ae81c8b0a2f01821f7c3f6127cd46d028aac17d5522fa6a73d2145ceecca7cd10d3e5eec6265798cd1ee1266ed368c61b71af7817ece8813e1d72bb00be046eff600b057565400b14e33d495fb7649811fd7bb06589db710946a94c80c8cd015e6416b112869348c8e18f276b3712cb88a473a28da1b9b88f5a8966402607f52eb62da5b9e84971ad88ca688e16b41759c1009f783b99f6d5c39c9a998e33465bd4bbc1c4a969367b1be3929f40b5c11d7092878e72e35a0bb11b4d6500e387013a4fdecfc4361a62f3032a6a80f7e0d36d1cf0cc64acaa4e7aacaee55a7c0e282783a129d8f3d7199aa870c92934a854f0507a44eea67f79b6c75ad50e2e9ea8adcf016ec08f0989006a59a2f3fed47f2e041f9c1da72467a76224dac01c01a9436f665189eed4ffef0a0357b94f7a7cc4f24967fa080e4f01fb2d18ef339af8e5e75398304380ec530636d2ede229ede9ef7224c0e5ff2e42160cc6837479510d3f1eb7632b6cd0ab589fa42c989458e319e8f2c83176c59844fe8fc447b5d32f05517b3947cc64e0f3b2053a6f6a92d894419be55875736b0996c210242fc622f5465b132e71cd501be7d0a25017cdbaa0a143a2f35149a8e3dbbc4aaba29f01a17213cabe7f96382d7d4abe3b04382bdc4ae6415f99a1b0d6a40e60f622771270698f92651dbdacb194509394d4889cba26f26c0def5b7be74242ba0e00caf868303f9bb022ef9e288c92e1d698c2740c7f5549d7da228c7842f5e2813c16c0dc4bc4e202e424939bdff69835ffed97fb67de9c10db9b434d3fa63b273f506c3016be7ddb2acba8e6e8891b69bb523016f78b703f4baa2234883bb189d534eafabceb3f060700fb5d028707bbf17cc737cb100c8e20555a67fddd2d2b667bb3ba40452e760bf11d8fcf22171b11f937e337c3f3b673ba28a3fa0c1a5e3a93de4568a8f22d333e2039e90ee3b4b9863b79e0d3da1605498986a216367a4718bc8c7c74548e8b161c21a50037577727414338c884f079df20678f595b565b0c95255493a5ebb295eb7029d6047ad02ac2bbfca8ac8908ca5a4a29c7ced4b538995e00525c7be73996f02dd1a95e728cf5efeac53c98d792481a9e31023009df15c81abbc13d24729d795368d456e4515e0d9ff1217699930091db4c19d49ca17ec19fc11403cfb6c6bb71016e25ba77f3d5f0f454f2396979e09d58fa2b33a55fff0ab4acae488136389411cf49ff987f4d6d38689b6f2f5b9eef63fdbc54a914c254f539f809a0aec37ed5da0f1263642b4e40c5fc6708a906c671ba49bcc7fc045be2af0b0fb6c8ad4c14276116539316cd8d756f2a99a5094450e6a1f950c05d81ed4e64c585aa2b5dbc1623451fc9c148014d3a85ca9ac3b4abc3064ba1d08d4168e5a6c2acaa5574d0b2b0bbb260c745e64666ba44aa20e8dea5c5288d3494bfb038794c9608af43c2be01210aaf1d2453444b3d995b51bdf2a1acc9497049b9949d18d9ad3750b4acf6ff9cce69d08cd6e242fa8a031cd2817ef5785385590e6788500cd2eb622cc9244d42feaa0065e4a40c8bed0ac81fd6d4831e212ad7a583784a967986a64cf70bb88407c8488548f8201a51019cb73ec01ef0101a2ac10319b1d614047c08bd27c52e8a97ec8f9981b4780c783355e248efea31a85b39efd5fdac84a08b2e2586ae9cac6d2fc63060a17c15a14241fda7d659dbac026dcf72f9fadc3ef6a15baddb2135ad26ee4a385e4f10acb930a40e17166d3494585512638494c76d238291160ab1cd79a173663223c90647823de3c385c2a6a620d2bda110ce563e663e9402610321581c711b86db775d834cbc58a74ebc1a6aac849856f03a2f911df04a153127e286239a8aa31a99fa18aa64d603cff7945b7bada77d6c0f923ca80d9ded061fc83c4116310b7a5dc03ab40b0ac4c22073e8e779a0daeee2d3d665647ac69dfbd95f0824cb6d43e256c06c35332f4c0db40c29b1a3925182d0610ffa5ad8f2e13344cd7462dff28a73b0a678cb51431559e2fc4bec0b909aa3e14e9a8835074928df2d4b0cbaf02403b86377174a823247395bcc4b5a3c854cc78310c9dbfbe5dd1e0dc34b0b7f809810e870824ff2a7f96118fd22db306e2e8353590c7ebe5b4a5630d3325025fd684890776ec08d23000d8cd8a9a1c958d668b1ab11134ed094945a7547ba4cb61ee5009d8fdb4421b67c3fc2e833883c14e64bd44f0ce742019e698aa0d3db6a9429dd83a968ea15835180a46edeeb9ea4fa4e9bfe3dab5b21aa6ea30ca2a140437575b31964edf403f911e142e0520bda3e2bc19b46cc7353a41e5c07e0b764b00f7435793cbf1c384f01676af26d5f7f2b09f951b08dc17ab269e33ffe2262ad84410de564a1b7c8a2ae12dbe116edd1c6577f8b540bd820cdc85554344a12b328c3604bf52388d2358ba5436048c22f9e10b5f41d214b420546232a1e327b667fbbdd34d1479c683eb6ac030c74b56c9124efbcd6329a014c844c85216d2814a0a9a59efa50777d20ec49a53b70f9d59dd587c69aac9baa8bd7016447e88d114818285e571ee53d73671be35d1512fae679c3ec2ce3bdadeaf0e451c4cda477510495abc339033399c57aeac17abb57f67875218af2375d61f5ad168975812c880a1f97ed49d63523591f2554c9599d8becb10682e29f688d1c43b3bf4b33d93ccafeb3d25284585da715bd3b218dc29267f2d8457b4c183931cb8384f7303a361e0a2c29e2284fe432e300dfa06750e9175a9e04e19a769fa81ea787610d4e2c9d483176c01d779d077fd06da5ad44e76aa75536ed08e64a54ba3db6774baa9d0c0497d64b9341ba11574cb3d860afbdacc1377f563362b5062fdddc884230886a94a6516f596efbc80b3061c19c86839475dd4dc012ad864043f044398b7aa28c70af8928d207e620df8e9e6220533a97c6b5a4fce45636b7057d7aa72f655851fc1ea705e9eb036395321387652098c35d27f499bfe489c6576bcee36783424237ec63bc879c0955903210f2ad2643707d126c1146589fa4254ac78dfea9229b4dd9274690c75c4cd0baa9bd14231d509e0e3d91473144a246d02a58359eb4cfa9728e57162cdcc731925f2e3138d418320d4191a32f68ed82d0c43eda0491e2b5f28f74705aed4015bd400e5e270a4eae6689f1af40b4cde25785901e5f49ac168ce21ac182cb57b2480ab4fb874c495ccfe2c0607f7cce684a9f5d8bb078e044ceda82df99350da89fb767917a2a0c190aee05dd960e70d6e06a0f5ce4354f9c254f1518ce1163ba087441d0797d38c032225b0762c1e16c1b4833262d3aa4eea0937f62b730b14a1e65b7f4a6ecd755c0ce406fc63447bdd837fc22bc8c4a33217a55cc2d736b026b3a76fe7b5b1ac23c26b3a9a81ce6721462a510094a51f7de65d797b646a66cc56940cffc74aa0d81a608642c11a72c45e26444d49bc3c4a50d327a775cd6e77ab2e8ea153036bca5223bcfd8c5b6143eabfae3e3c372ea9665e2fa93a28042ed421aa6820d6957648d67776af9bf8479074378882b24759fdd5b1bf2abe47c213017cd48f9079353e48102530fa12ded24a0e8b004d1b76efb5a202e8af7971fea46fb26d0d9e0a99b6b5cb186194b759bbd6122ca58e51b4486e8b2eec1c70e1798769d5f0a9f26b8ed93b8957c1a191be5663967716c17dc301c119355481bca9ae191e946a83693a2738ee9f22bec930b0d6e7fb4a6e14a91aee0f09e60e27a6c17f63bd0ba6747361339598811abeaa68ce6f52894f0ef4344609c7828c20aaebf2a7de51d3e0d7b9b9948c6ca371084b81bece3e628953ca9e101f28ffd74d4d0985729d5b59946ea49e44a9c81012422b116a03a0a11741bba11332d62d068cd64514f0d96f73b57c48c695c1277218680560d1ddb956dba02b3b8981beabd69d9b3855d08cc44192f2f0cb05d854644e17fb82a939d6e2fc2f6e8eb0c88345cdba3ba85795a056da5fff84c72c976c521804c14051bac54016444b5affb0fca8dc185272d5f6ecd6d05f50cd5ae8ffc81a8416b9ebc15412dc004cf646042b64066c933f449ff8b741866b89a7a5c6ea934ecd08d540d05e444f62725a07ab4184513a1e6ba29ad81003bc40de4a6a6aae9a22947812039b672a6cece40015d6829dd875311d8cd147ce414889c8853da32ff9c53742a227b8a3126f233847dd2fd20a9ec1739e09faeef42e1fe923481c9aa2b01d320bd3c166df34a695de04281aed474cadd2aefe4a5eb39762b116dc8675cdb5dad7c9fb46985a2220b950bac3ef42e665449901e1ece4b913e360d0e65506e6c6a6685598d995f5e1e2a8f97650c33b5de131310606e81b4c589b2f56afba2121ad349049f0559d5f5a7a573736f2953be8eb1554ad3bfe588a884c6eee9d1e86497297d803f24bcbd60f9b7c308c143ccd641aa84db28605930e907c60f455b32cad3622661ea32ba904776fff3bee94b9dc193e9e06cef31b01472c215f202ecca3d307a2ad1aec27323085b36b3292fe4d057d0778337846d801e9c5790654b0dd1deb95ab33f341ad1da15a3cbfac812a9399b96636162e6369701c4bb40fad6be8b9612fc9d28472511a51ae7dd8e6905873a4727c39d41c2a08124d33eb3041cbcb491c86fdceb9b7b326bddbbfbd5736b32b0c9fc2a60dca019832ec151544509d47c0bac4f25a6c8cc0d065c356cc0a179db698aad9ea427a420bb0591ddf30ef3e01f4bcf108242d54a6c150b0b25709b1eeeac93ea3b822ac8738bd0d24506932c5dae5ad43540106521f1d1ebbb5be4bd57f035ef087f6fbc33e0406a1117af18cd02a6855f5129e0940c16df38e57d7306c98ddc66d5b14f1c86d2c8bc6715e86fdae03435dab7b737805ebcc80a8e33fc62031591aa60f7a4135a88996b5d8a1629e7274ff648cef949c4ed6c54f7ad935e2ad16596b648b8bae94e63a275b611ec1c9c9d3c46e604ceebbfea7884be3908f6f9149f449b185037c4356463e74379b4e8744de75b5bb52721f0133b11c04e2ed19b4b4af4a3b68a6e0ff57bd901606df481cb544b27607ecceab2314383959608b08ede41e3d81fb483c66b3f0f4ec4d17e9d0407a47a18cc65d931a410b601287140a3b97bcad3c65239a06e4a9923e4c4fa21bc1d4ff58d069d8052ade87016adcb7896b6390d5cbe4e0b9831d75ccbe797a9f0ee54497822f311f9446ecf3aefe8036a7802f57134c2f67c35427760586f30f1d65008528e009329540bf0e1a1f7f059b4e823244fd2d0bd522a0d6d49f4c262267d2824a2ef77755b1c982dc0cbc18b35cf59606ebeffab53012679fa015fb8421f7bbfd8af4cb78e5edfb39ec28317217bf43ec9930dfed3519d203af8148746040c38cd54fc3e4ce69404ead1d29ddd3f2f51a69284ff4585440d778f18b1d521dd36efe85bdbf4dbd94b7d4bd6b167a172d79e1386afd44776b4032e98e75e488878b8a106b00ab8128fe0333df904fc33314e8e0f684954a330ef993d71713cea7e15c5c9ea72bbabd09b6cf7c61635509091ce16063f01fab94115c0b7b0c40a7e820d4489e3947794db8b26f4b1c599bd0deddc2611905a545b5ae7bd37771987f8eeac677a792210e4dce2205ff95ae1fc9f90a1c925d3e2d9ed4c8d04ae179f67d32d529c60340899444499cb7a5dd0dee41430a6a79c37d1d04e25c12c8b99201d290f2889d8a916f6ba34fd2ce2f855c4de8982ef3d62d8fe099a2235295f68c2c03d2ca54d879b21405bad919e698fc20920ffed0a74aba316c14418202df27971627d87a523431b1350ebde345457b87d2a115000f7bca1ac31a6064735a9ba2a12bee3f44ce79e8c458a4022e2926a363af11696b3d4808a326a30f9cf95870f87e9d0b87cd8d16b94cd9fee56cbea682e188b88ce01af251755abccbb6ec25c2cbcd293e96205920a55790019471f7e28f34a8d3c6981d13312284e6d492605a2a2d9db39a1b3e4c6ee23594df506866d811dfc9b8c329807467a953ed5dcc4707c2b45a3c49a2140f3158d5659ddb1e43fd0ce71c7566eaafad39d4999cc2a3da1f12558516dec73d69dea4f52e37e4a40fa262d877516658009d4aed55f2daeaf7260aa3b58ddbb0990f8648249849e48b5aa071b766074fa132b170d49a943436850e2b8c2a2f23355da113f20849b37826231518d4d32da7aaef4e1b24a3703b94bc966980366b3e7a1e90b3ddd99c64330fa0e12c56d98744fcaa3437355ea0f67510d2b32809cfb34b06d51fdf86c119fe5b5d617fa0ed162aaab5a5e3e27ea1d5c811f860ee6c0836ac94694af8018e6abe9e5a814b42f05e7bfe8bff773417041ca34522918f58244068b6b688224e031cdb4ea3f9512105a33288d69185869da4daed2306534121f30ee13e8509ae43fee87529e9b388d97e102e967a2577cfdc58c371fb16e0062a1a206f2be2440d008e3a2abec9622ba27bae27d0511accaf6b893e0a0247e8742348e548aba3894555ce81ee251e29a0b6f623d39829ee6a05eb7aa2905c3afec26f17da33d8d34617475e8747e5d8c0e017f4c701a9d3b4a97dc38844500cfa3a82446ad401b8635ca5a7958572fa15782d003cd900e73df0ba3c6b624fbf02c5d98eafdd65c17559e4899588538d8430814e81659d7ba691e1d1a85cfc41689ef63a6fb13370cd28223ad71b45626155dfe8ad8fa1deab66871007dc582a9bc6a07f4ce58560168e4aa51751db56a88a478158c2e881de80a004e9745d4f8f566485aa7d0b5c7f4a688b861a4ba7c5b8852bb3787c7b87cbfef90ca08fe43f47f2fb21d72e1497e1585657f2701b525f6e5bc74a4caccc313a35b8a5d60427d6b1cd529f4a85dbbf966ece7618796c78915cfcf4a4e59af0a461e75c096ff4cf10b475d32261aaf26a41b3ecf1ebfb53e076c9fa1b8be2b6f5dc0d7310de754cfcd78c0aec85cd5413079de43e7fd3bc851f840afa08b1235782fb6cd35aac4dd143d3d990e1fb451dbecd7a153d79b63443feb712a705c54133d37a3bd14d57b8b9424bb78b37d307984dc026dca823bf40ecebfa1843b7dffecc99ca47f1da90873801d4c8e0f3b5948cdc36e0bd773af9102800f8d7f9a7041797b21ae8fa4ea517c5abe2ee11ced97a28d528f2fb3a7812e963d0500ab071e7193ece48756607933ebb433767d422349ed606c1d27a0a1f53c351493a903e0af24948b4f6a68b806a5c4d351ae52107eaff75a3608da886a859b0d11cf3efc3861100565149bfab732a95ecdf590de287cc74d8f2785bbbc1c08c7bd16bcfa0a79164714fb430dd8e9794f16b1a73765e4a7562b8e23e9202055d1e4cf589cdc26a8725e2c463cc5db22efa4c8b70b8ea17960025f059524b7f03593fac16982e179ba182f8a29c150885c89b02ad2e423f1e93c1d169f9b0a0de81e80079ddea4b99c6e0b596b229a6e103a4fa32bdd7e1beadcf5696354a5dd143f68fe881feef97c96ff044c3c0d2a7cd2c97ea938c30b817d99288e21ece9f462e3f6b9a1c2f5881a84dbf5cc0c7419b9037498d194d457fd50559d5be998cecf71de6a6ad3bfe98bf83ee379f28e9df1ac49d430cd54057a9143a449b6a69795296255f089f3e85a3d3c8ac9be58c45a854d13627236d35bfb66c97ad7ab5929c9f567224091d5a83a870ac56648b330aa03ed44cc62242b4e9445b5a5f925ba3093cc6ffa3b359ccfa009a86c11443db6e00506ca3f7ed073c54350626d93e809a621c70e5c432077fee4966e380ec7dec6e64d619f97011e39579897392781b77824108440696f69e9c1c0d60338eb89d5bd656371bcfb2a10856e58156930c2a26dc58a40c89ff38acebd2ca1b050243ef85369490ac56193c39332c8431df2ece549f57c87a41bc8f7fbf2af8cdeb2f598a2209202dc624b2ed0e5c86be21fdb43606bf8cfd4e9443ece1227d8eb380b3007c42afce8b30285b6dfcd95c38d5c24642266c6c5d25e85dc1ccd795d8d94b0ece4108ca766c3e5f38ed617ff5f088cd5ad1a9f3b8a489f3bac5124043d5d70ba3c79b9ec76482665b13765f602770c89dbac41a843d1f6f304e1bf982d6a48bb423c1cafbab3037d990635cd90be743ba1f7605a73a41507d9b2b284cdf00c11fa4dd7e0c509ec051340e6605baf127f17bc2a61c5901fc3ab6f9c318043d150281222c3b8292d484313b760969ba8c5f6659f22872305ee4bfe49517cc4903ba7d07b6411bcf2c97c943d36f94fe6e0423a9ffc5d26e3b135594c0de699786c1ec66c51949ea4e094b8572487e3153148ca1953b480556347daf4590dd53718bb1e336259f13531ded729b008cf86f7bf5c57ec9afc99f5700988ffe7b30a56e4b5b7dcac3c9eb0025c02d2dfcf516af4b40c0f582b32ab1e86409a88f0fc347105522a4bc9ff713ae46e92ed18f6d51b08e4b45400a01553e35a730860afb89f70e6af6b70871694adc2a155c5e27500b6a854aefb17ca2033c5b50ef4336966878c2779600f30eeabb1409d4fc9767fe049ebb8b0b1d4b33f618fae8f4a6de4c3c5f55068ecb8ad3b40ff0b76b481201fbd7cbb8610ba52a0e3b81d4c4b97013153019fd4fe2254fc490967a7dad9cd40e428a882dbaf60f626bb1d712c0d6ec16c075b5b38ab4dbd44009f0c30350e3e804bde8ddb5497c3094adc9d02eac555268ff2e43fb5ca18fc006d83abdac87feb7b52012fce02a172d6a57f03a8a0e4cc9e035ca8e1852d9147a69498203a5a44d3a9268b207eb6170402556c2efe04e68ad58f142737d602093f4e59e2a5e4d4c0b1a0b065daf32cfd5f5e4292ab18ba5b52c5a334b0f9d002baab0f118aabea719a386bec511d72cb41e35431e42e407919715559b7bfd3abe5ac2a1ff4cc5f42ac698b926242b11c2f4d860ea56f0b32c636e1e6e9db320ba2f9a7284804bacc60f2c1456ce43a4624616b5287f6f3f70caceb7148a37209b1a02123147858c37f5617fb4b0705d444bd69146db50b2d9bac278ad7f94a0392b8be01a28622ada4ff824948b02180e1807b998c49de4c52de7c0bdac238706c439cd36ca7509c38de99c7cea577e7d0c01dc6ffda8b4e44ca8f579b39491b9198a31d2745d141339fdba74d1d39a9290238c58c41b4cbdcf00c22d3a2ebb67b29f86632e5d74d3ecf28e99688e44eb8a7282e738189920663c277e2ba8ca7e0bf5a6861890ad3252748faf19a497fd2b1e11ee01367033221f883295abc0112023fb10c0542fa54266204222ca551e4150a54bb165f0850175acc479edd5141d13340369473f933f92224cb998b4468b40867701d6340ca9b1375c6a5d0a045cf05dc852a1ea2b14454902eab35fe7d185867fc02e213d7960789c581e8006732d0f420cdb56603c39d75df152b1e5b784746b0de57d3425c054a051e922450007def6d19be66b4d575a48e370a0b134ee22796ab6138f391911f76b0639d807d04e119e139c9b516aa4e0e72b5836f2a07c83eedd7ab8c57dfa0b7815e9ed2a5b8b510edc86e8ae1051604e0ce852dfa63c627b857d69e677e41b110f660599fec28493c30d66b30dce38a928d26e003b2ba348e6b1bcf16fab1ad0756ccb7b75fd8da8e03d413c91f4907e431c4310b334585a19c611f5054b8fdbc47ba1ea4047c584019cc8360fa777416546277ddedd9d2489b78365452000c9e696030caf6fa40f87a87d542ed560c7e15e11d1e5d1c7f04897b06ca7daa7feabb052678c355ad5fe6c62c3ce9ae0696c4abef480fe289440eda1589985637a4c9f5a98df3707daba49ec9b2b2580178dd83083723f3078ca5a08bbd7c90b1b5889c7ea378e6c98e74d4df0dd3fc33236e044e8efcbbcdef6e8a90a28e960e5729880b434235dbf24c03bce9244e2b3e32ce9ea3ba00bc93c9c5d71dd338c7d6a9fd80989480f92edd2d09240fd3b669398e15317d5e22d6f24bf8bbd08449d3b1611a7a5f7fa0ee70416ae3c8b1a3d1707e5e05a066472572a178ee632dc3e70514681ca6304afcb850f5de1779e0370e78b6a15e4f17c60e7e47dc5ee6e41c7109a36315dda3ec0ce3af98f2f5728f90ea5bc840baf13599a06fc61a684501e08ac99473eab8f9f591e7bcd91c08e2ea930e2f7741acdec8c1088f277282abad291ebfaa6ba624cb1bfb43dd963b79dc5fc0c405093428d043ab2b99d833a13456335833613123d8dd9ef4ee8bf0898213e1f4885cdea16c25affbc8e1ad29b8d60cdaecd100a4f8b44c4033afdbdbb9ecc9dcad82fc9df4996d146f2ce8a233a5623bf4cd9692e519a2ff73bcd4c398641e5c67f61ffce69c86d138ea7091107ad3a394a231d0e4361ddda3dd616a25a008da454127860fea540fed063b510d26a22c49ab4e7e6c0051216b86472df661cab28aaec3f681a53d6df1a488faa63d8a64b311e2d2bcd534b077d0aadb67a5e2311731df6e5870f2193403a9195e4a9181a4c5189c0d3836aa4dde5ccaa505925fa64ed2e3b9e33685090ddb0d1cd3b1a6bd3529eaedefbc4a13053a7ab3a1db4880a81275cf661707d43b185ec486f1589df930ebe494b462b8d1ea4e662e7ce10f27c430715ecf6837136b174b41953c266f8d11f67178c3f2f2178170ba5dff6b8ab0497bdd460fd8d4202aa9c1166b98b507c8bdcb269ca6b3a271bbd21ab218208b69ff4eaea83bba2c51d40623302060d60113184cb9122941c48c796e10267388042dd2073e8d5d20726b6618fa6711002ac0e1257ca573d4b7d1a174b6c4e8889ed669654aa20799a904c32c82994dee159edc97073ea995b9c5b687fdae4377d94ce003e2e44c6f1e34fa3b482560d454bf5499e1539c6ad60ec4dbc7afb5bc6668c60b34a8b3f9d358bec79fe894a2c842ecf80a5e64f71e244ea16735225ee1eb2b0afee1e6c797b2e99d72b937d72c3f6bee8994b587820442af9dbed632b86f2c7dbc5349e5abae726499dd274e8bbd2aa143010e454798b5a27357227e5639a2bd365d38ca5d2d0bdd57aaf1602328308c0e5e796d62d2cddd12344d426c4034e9a877b5a9ad2a568ee20699ceb057b7d1afaf971e0c689419c19c7dd71f4aa81aa3f6e15739dfaed464faf20417c83973a2059596593af57430e998c3f749cc7558d79329ae57d0f488a2ad19ee7879339e73187f76005779318cdd826289e51faf0ca202959235a07ac92a79953814a5a41365529647236d46def5f3048bb99f3e9a850ed643d07bf7b999a335d862b9074d9c67a89c413319ee5e65d3316ff27729bd8fede47b1fc669cf896bcaadac0ff542b5e5543c48c11cf11cd044c4056dc581ac928498c08de544630890ab461029db1684cd1d9dcbcd36f5edc9feafd4857563f6968a78c88285cff730d97a760b89fcc9239561765743bf31bcfb60231dff8758b537c62bc77d13395f5f27fe091fd5d683f1fa1f7f090c32664ac388637347a4e96b540aa98af83b5bd5ddbca4605628a6eb9bb972c441c37b2c2b44491b033ff8d34c3d76d26e5e3fd8638f5b5b69f999c10d80a6081d8473c72af586f82ea1af9e1b047b04c0a2fa0f3c184678b5f9fa789c522fc42cc8e8314f357ad69446a517e905e2bc113061399542d4cfd06d20f85591fda0c52aea83e3c048fb9fc43a61996ba8814583b1db4881e5955cceef6ded3f5aa7b30636a122959f1fc0f3fcf41484a12fd85bfd6a51a90ac02e4a7bbc989fd7d2b39811c2b327c161bb9d281a4e79bafa0070bdf2a52314434d720f07c0e6ec907d90a464f35664100c5f6948c5608c86d592b3f7545bf57f8205d44a06fbc26e3250e8a88249f2cf92b1c4353529e53fb7c9c02c2251fd372438a35960a1ad4203d23dfa1601fc193f17817982eaa9c8a198c21b12de36af3365d8705bc61644f0a82e8d42db2ab7bf59679050cd01e2b69012cdbdd963250092ff5b5baec38a66f0abab003b3f10970b32983ed7f62b09fe96c1fde522e3e1e2fe7c9877b98d638a37e1593b05a81eaeb13bd95159cd348a299202d3d6ea2011231c4f6eabb2e814d3fc7314ba38010cd9b9612121a32e04556332a4f18946e133a34b82de52e0e5b2c43b63ea9ed9baa1ee1d49d1899a7d453b7694bc650ad591050698ef9b903ad3c21562b31ec78d80c7b72aff6c8ca475bad3f662ec8bb49e238f546b09620657cb0b83a90c25516f755200a22cf630f09eaf51118b6bed3a9b39e7de314a0a42ccc3846d9fa58924bf616af33f3010179db4db0a0850c0fade203cbf487504708120f3bc19f588f49a0873b9038556d6c40d17e0249637267d4bdea58297e82dfca43c95d705a33d05a03f6c069a19ad0b7488fff41150774e09f162894b1e35d11459cb65ef105f5a6cfd54b629c606eaa3557986955646f42edb95950c871c38f99075ada022c3826e636d8402b14a1ff5d5710c64b2eb90bdea30216489ec13850faa79360f470ca4a9e9e9e55d0ebfdc5344feb569ff0f8d161a4241b78dc17946661440fc0b39de73885ec573b8e88afc3585d0e6b21caddf233313947776ee24460d2e38c3766d6604d663441c7b84ade8bb16d97ea7c093aa21708124eb0e713a83f0003c1493da2b704f10b55930715c834ac7e5523ee2b0221161502e4c2fe5d411ffad4fcc7239b2de8bf0895b7f0bb6208c692fc0307fedbf50a700f385978cdc34192b784f75990f07d87a87ecc56641d3d7d6c1d43438222b246bd33de6938014e116ed3c37352eeb68ddfe5fb35726cece783b7dcdf208420973011ec45d48de6c7cbcbe6b2468376bbb57e38f0306ff05560d7224e929e53313e2b4220f709c03f7b56495d215b2c8284df57d7556279eaba4e6bcdabe36638b88e52f6752d31a5b0683a69a9443924d3dc4881f19280297760422306d336b427105bf6b7600fe71fc965f8e41a454cb1bd7a66c8af181f49b288b2dc807bd4f67abd498537dbed406d12ff2827b160c340b709572ea79b90058b90cd62b205a8ad9e3a645572cf6900f8b23aa1ac748a6fede3a55c3dc3a7885006c14dc172465338789a5b6201de08527f21d49f945ab02f5d6770cbc4123ab8659d03d1aa2f5557adb5063fd48b7a784a655dbe9654983e3b6e5903292235253e87b4adad586da45a666f3446633160e8bc1223207efa9d796749e5f5078ed47235e18dbd5bfd6a3f3112914c88df3421e4f855bffc861cbe28eb84b64a72c6e8c987d032c868f97cfa757c53b5a1863a1e77923f6a5725e15813e1c26b883c33ffe69bb5c0413aac69970aaeb046d9c33d9c2cc953ff1736c71b985f0ec4e51bab18819900bd383168e4e016aed78dcba33d7dadc3803f49da5fe5f9dc43be71ff4fffc0d3bdc2acf676d9e0dac2d841af47cbaad93d39826775b24903360f4869271fac00179f00a5e78b62f1e987a8288e783ef192981b3e9ab72ca8b4d694781c90cacf5f6cf6dd4399391e0e91be527e454deeab46a6720372e504a5438405293a6a38d812c8db04dea4c3ed7c9feb3b043d738359af0c476e66aa0b49dc6151dcf9901695892ee7932a329b3a00da5ed9c27329a660464b61673c5ddee34d9d19c31a053eb9866ae74aa891d4f19059dad633ee54e679ecc380fe0572d9fc444ddf5a488bb3a21e206cefb27abc84afd11a1af33454bb1a65f65b9121775ad26445cfb0266db05efe8ab5a4456d45f113a941fd37a91778f25b66a115951de8f549135d2afbfa2742ad53a755cdd3b288512934144710da19f2d6195eebcec5fe2d643cc0dd052ec778577dc12647602905d0f42fcb86a2e99596b01c9ff84fe68ed2a32a267e7d0e336b3c5547c6e8bae34a080aedcb87b48481970277522710cc6cf067565e015e6281f8ab03a000b1d7d765453569e7ec4b3decc2cf440f0d8143c0ac8746b427ec569225e2efa47ba4c4d70f08f86b0eb689a018f50c0cb002b19976d673a6105f29e6a871f4ed68719a0b06d17cd003323aeb3e258070bbb2c2631165f32a55d485680ef628f487bf9775c3515d28741959f2326fdbc142bcd63e01c2bea93c95d826a4fd3b86dc2a2854de90b82d7d911138fd268961990f8620a3cc0b91def2063adf71a57effbc0628e3f1a02b4fc031a15439d5720da55491b79926f2389b533c1fd20fcc1ef1f6f6a3bc18bc2b7e2a88ea7ddab8d179a4e0bc528c7ed3f49e223d01c720a06f4e0601743ef22f00a9b8b9e9bf5fdaf71cf3621e2fda98d8db42692109184480aadec4d3b0d0a030a3d09db85c705053f40ab552d5add5e58b5e8638c727b656fb32cb31886613ec86654c11d3a7238c15707ed821755510b5b58222019a44910213148d5b16303b6526aa12e4c071e62a22a08eac2ae6b59d675b921780737a2071ec48db846401cee37a30a7e3b74e40803be4dac0e4b0ade1ea449901f1ac452d7216776a854ffa81889850b0759bccee33c3c3600448e4e0f1f0f88332a39e9d5321e6668685010e53c51db417bfad7828f3d7a1f660f336e08deceb343067e8079367cb87dfc0c401ce08d2a6bb5ab05f6f00e2fe0ed3cee3c1a659f46ceeca8bf038574331292d5a1a97d5881d8c08ebfae60e5978396df6981dd566badb4b666a7f56bad96a472661415e251d2e4001fcebc74fbd0678d5d60db0554d1574dd731f584f4777c0a9c8ba22b642004294688e0c066a3e094220730581db8800942a210c2164bc881cd7cd56b32c0980294221c218307704918f49578420ba818fae981176e80a74f010bdd7c3c5f257164626d3094c408647c81083398b28019851115b21d237864c093021d3041892f2c1224219448620b45b800e4082d34a1896a330425a420230b2f4c91c40f22806b9ad8088d225250cc0ea630020308585c21841dc8a9c4e8093d100105222c514410a23ca1252fa695427c67065d7841050da288a24919300a125690042a18e1083c50016c82919e7a2e91832a822c29c20a80aaa0f1006f2c75fc8fa1440880a20740389882470a44409924464dec08e109527480b485d091932c4809a1f01a55c020090a238e906408db1344fc8881118c785c5004859110a78412538c300328a6e0059b099483304419c28824e02d502fdcc5a80830c6a8a2e80b19c84c244637389180083710429213455f24513a12a409523431042c1c3901b180484646e0a049a3c44058c51447301ada021584f800ce27c0c02b2c8001137a008627907084166cdc095f80938e47661e79cc2e00464932c5e3f9aa39e79c79621886e57dd98a69b6995e9c7129671139889ca0042046acc0670a2e53d044d5009110275770c109901d401803a3f429a20c2024a608e10924a429a713437a6ab884086490f102214da430d192c0d6a170d16b9044c8ce39a7f4f8843fa4331029c2c8085114394892c391244198508c5ad082a41f4f924c6133e79c93feb0534619546bb5e65b537b2b775ae07dad5a75b5764e0e9abe655d697951c6d25e6a9aa67da5b91ad69aa6e57ddf7e763fefe20ab50561e05b6fabad37969553377b6aeb6a2be7e4a0e9dcd15616fe03e314785f2d639452e660444f2d2faadc934bb0f474fc3969740e46a4a7cc53fe487c19e13db51474a65e3babb5ae5bd46646cab9d64346555053e9f9535e49857466c9481d5a96f5515b795b20d33910aa9775426f58f442c31f3a0f39e33d12e6b25c70fff19140b4a9d97fae80dd01523b00d63841a1e845f54a10924a3c6a3bcc8ff325102f40c899fbf079f490bef21e39c3fd4683d7171dad7fe1a25d40fb2ca340cb7e086be3b000d7dfcf6da28663da687988157036d9471bcb6657f623fa7a2798e0da0d74c26fe0117841a31da33734fa23dabed584ae37f0c8c4b28a4654bdc01af14d4978b962bd22b3518605b5a2f2dbd693672a7598dbb49b6197ad169d32ba862ca8960d4a988802df9151fb9172daf9cd39bf156dab9530b406d83fce39e79c73cef96173cea972e79c53f3e1eb377d90d3082d51864a69a34c8b86cfa2517a45459f74fd288499337e35e992ce30ac399d6db77ed066bb3ad359774db75a9d79d969255bb9a8cb92b9a45a3669021ddf55d1af286ac210bdafff4d065f36853830f6359122913d863df63b3614c7f6d967bf6343e31713b58fdacca9ed707df62eb7d48dcca1b52fdac4cfb52d03436a24e9d1d326d40a8a94047188af520371c874751dbf93a64428ad0258c2501cdb73d947f65bb638b0bff9da8752c2d4cf3e1c6fa80fb508a0244cfd9a18e347ed95549f071cba7e8e14a2020b5dabd7fad6a35194d9340a5d12659c48d78f46b9b94295336e13b5f8d8c7a3c495b9b823619708531f6ad408d6a83f0553a31a1dea3fc07efd586bad50e08d424519ff4a932e26493e40d8850fd1a3dbfb850f59ce06688c138fc0853d2a066583a523078e08488d923334312ff5ab6268f66e4c92e4317fc7a6befc1e72c6caa999776c2a8d84916feb5bd8d7ebb3eb6df6e1032561e4dbeca3623969db4a1ffbadd2b25ea0fef538acc7b20f2572b53935330f11a091d5925f6450e301135db18f353af0f080289361157d80adc17226c64a6d7d506b2f04fe16563cec082405df358c2a29fe9ec47efd1e6acd38f26df62d1c7af621d1fd798880bfc51885fa9fee953e0f71c67940a403081d289068874cb43b8ca2dde114ed16859452ba77349cfed877f9bbbbbbbbdbcc0fea0b2567a08dbbbb13f1e02e644d01221a25a1888ebf8128e3d473ec8880b59faa00fdf840c8199b7948189e1daf040eebe9536a71d0afd987caa271c638334d8d4a661d38a22a7a5098c828b9e80127c906d416f7848bc23921e29ce8f835181361224c8489b0f778902950b0e67a200e36e8a844c729583908f8947e98084322f8a15e1543532361a20dd14ca25b582d039f079853b0eacf8b2aab084c731818feb6f0b72082d108f6035c7f7b111410f7d15a74be73b9e62659a555d7e77024ecd19becac6c72c8196883a493a6f80ada64a820540e09131f368137f85f1f8d15e9116045023ac10e8016dd53e64061a6fef4219d94520a9d420a27842eddddbd06f8fe11ca4077a7451821ca1690c2a710c24ab394104a082194902271083fbe0e19edcdd3f3e2862361dfd4475f44aa8be78bcb8bb6830b8c96e516ed6eb008faa8f23929a594bab8b8b4a490fede175389db5a043bc968d0b07e40c3f24c83062d82068d30dc6294cdcecaa606c6c8196803dfbef778b6d862248bb403db6bedc516bb0f8f0bd911dfd626ac3d82fc9263332ee43072d3ce840b4d8138d86091808f68f9ae24de5a6b0c0294e4a746b969ffbc4854c921178a2af93fc011cb1dfe4407617dfd0c4b61d8f52e14671cc86ab55aa5004994398a32ae6151511327aa82de6e44cb2a044516f476232896c826db91986085c42e77776fb1b97e3a7638c43d98ce24ecf82863200cbff405de2e5a7e7c69030cb7c0fe4cd0d04adf82c18cf22bcdd80aac13bee0524e1fe2262dabb49351f9135ec9db7b72deeea371debed292cb199555194e9100b4e141bad07cc1a6dd89641ff2f2b11fe06de3f32067dcc6628c423dca7b7c7c8583581af5a8574d9900b4e1c1eac1337a49424519152ccb9252cad8c5a66191110b2e2f4e3748aab5d6fab45ab5d65a43532bb5284d0db56107101bc82167fce35719d0d0cc22085515bc8e39ddfd63626a135ac62fd0b7e69c73ce39e79c735a3448524a39259d4645344834280150c68d84b210434353435363adada1c9818626871a8bd6c838a38cb14687a026f2639431c6ce89964f307181de34d488da84eb6ebebf5dad562b221bf8f3936f4d97ff8f6958a4e4887f229e0e0b9717518842053c0146388e524a979694284b7a0c8ca1a11155f12546c779a76e94be7ba879ec54966f4adc77f8a1e6517aab7baaf1e0bae5f1b7f16b7906108cb3ced4dd73dff25dc669f92ce3a01eeb4c8d9ffbf69675a66ec930aa56fea21e3ecbb7a73ebdd47cf0c71fb51b549e51b5929f3e3efd8caa13f703f783f7d76f14e88bfb1ba9afff61e3bf3bf47663eaeb87cd3df6f23e81be9ede90fafa817bcc436f79d3d791fae2328c2a53de3bfacaa6a7afddc4eb33fdfd1965b2bf3f0308d691fab14fc7afced4d75f7f8282533eb8c6ef1a3f9771b2cfa91be7f2c674e6e4478b283a8b97fb70b2b79fe1ec6d86bfcddf166541a4337ab96ff3d0317ce9619c7179ee61de5673df7d0cdf7d97af46de4f7beedb3a73fb84708d7f6a3751e377cd07bfc16ff3ce1ee36f73ed068c1ae7ed1afff6dcd7fdfd36bee1becb35125f0744bd3dbee1328e2aeda3de324ef6be6fd6993acbf621d6fb7968b8d220a86594514692d691dafd59e2152383b1c8c9942b1c8df10386298e34050c45c4386121458c26623891018b21620c89f193ed9ed342ed736fc1153c5f089a9204638522538ca600614ba22c41d250c992230d5fd350c9122734a6a1922543daff5e71a4e3d7acbe8949138804938c20893699152dcb85a2300625928210b09514aa20052126cbe39020212209509b1a446dec0cf0ae3f7588c524aa5c47cb89152dcb6b104de1c7f2e8e4e88991133f621265e21339438d66060484a34209236bc8d693a8aa515ca6acb642341059e163f4e4c85a46d623909c99d39a12046feb48d7faf547ce54210953bfd6215d2d0df0b69ee86aa3244519d7f52d295146fa1075e6f1faf69494de502d9f5a4ba2cae8aa41570d8a3316a90a5523d5a832e1a95654a2baa41ed5261549d7bfacb4a6205919f5f844996d39d1d59af223c8f535517e6f21b92ca378643571620db182a28c47216b8828ca58d9837cde2361ead3cf5712a6befc7a4495670bc84754d520fb83b705f403a4eb5b53ac31563c40fea3d3c3475459d1b2fc74748590e5114af1954e0f1fbef21e0f92044e39c03ed4d65154d5abfe542151258095154c4eb0bdf636fbfb36d755b61a8eecaff5648a84c12c865d14080a3cd865ada3fa634db19ed8cffaeca36f1dd59f2aa4aee4cc131c3974ec00824794b126406db2ec3f12a6d6006f6b8aae5f83a24cac45ac2951e6437d0fe10cfdb495fd66d19665c1d8f9d9a79fa5a121ac613defaf346026e3872d9723072242752daa02125d6bd01279c484deb742618a0a85217abb11bd9da84e9bed47babee5b10645997d85a2ccc6435166a388a2cca65189441947a2ebe4a206e9ea84ded588ae4ff4ae4874a51165ac9733d88b32b226bd5c410522afbb5aeedca6a155615711158e22adf32d5823d6449f336f99b1c7e8494c41ca941f5e98a2d2e489177ac2f83140149684b102e309bc02921396fc0b4d4111fd695854858f2eaa62a5676858f4041dc46fe778454c889c9ae0a8b7d4b04828ca0c45990da77816f49646741548da0944b0a88a226e44bb0504bc235074a4a8827ac7dc23aaa2cf0ff07d158b4495c7217f5a05bced8f280333122a50624695fb4f18e1d476c8d1399e85ce0208e35fc4d10c9ae00089e78912494598a2fda1ff8e2be7297101ef281485a28cbff3643d7ac819771e2ef0bb7f248a4630628441052886a46461c4c63f0eb924aa3ec8ac3ca2e16f298f68f98e23e59c7332c0e55641998970e6c7497390d1af96e6c30e139cd0f3ad76038f58f4c2681050000da15f3eec34a1e9cff9180e9dd68dd43bd427181984386817c20c83f08a31c61863b52884f3c6183f461c638c114208e1c583a3210d8b9c1044ef28342c3a32d29e0b0ae2603f566b82c1a3e54b01d232eb442d0294de3d56ab95d641694e6fd9d674106fe9d7f7086bc8f9d4da76574df39e195bedbf2402389c4c2115461d91f9670e218410ee441741065f32c8c575b7aca5d58a2eaf3d8c114acf7e1767509b4632ea6cd28756a31f35fb52578c888bcbb2be94056cd58f0a7d36ca9ff7699138636de45b4bf0a63ff40fea13656aa6446890387333158a30f2239d026f2a44cb97f2a9100a0413a9eb9510c4610ed1546794a8920131222e3c0b2e5e54fd8c4513638611c6ca515e2d09de5747a9b3222d8fa0b3e812c6b97553cf0f2641c2125a7e97766d075c049c29c86e0cc0546537bb164c76b36b05905debd9c5b0ecd69b5deb5ed9bdd9e5bc7b4fd9f556502c2d2997186498e1554aa7d27732e5192f340020002a1801a80ce0d4021a356e8669f75e0dcb08d0d580ef25edbd64ccbdf716600bfa394208d0bcf792f65ed200f7de7b001b6e9099a14100ca6506f012064b8a139043a6dd0ddb34ed33ed33edde7b334c010bc05606201a32b2b8e7af1b033055168c7d202a14a5ccacbbb43af36aa03ff7a98f84f1bf19b795bad3d53e20d4a33e94e5bed01e9788e1db6cfbec2abe401986e2a41b5d41d5be34948190f638c0d236cb6fc74002c850e3bab368778738c08ffac8a1a1164088030d335e66d0607d4d693bd496cbb67c18fe545916999233aa5c80b755c500e32200ec198d1aa81e02d400dfc402bca765b9bde467cdd076b09606eb69b00a6080d25050124484ae9b0491212122490c0959446810f7d9037434a854d3064c030ccc0def107adda32e693d2c73edfd4d8fa042802600e6000670a5ce3e4cc811414072624266b44d81d09f9e20f603bade06b932f5a1b916fa45c08556e390801cee8c32530177c6997917601ff718434b1a7e0077b7da67254441294f53e02ddffaebaaa1ed50ab0d393650ab6b20c55a0a70c5a3447d8d0e51228a446752f0ff0f674870af7d2be0c17dc67d7448fbf6d115ed7101de7488001a6a56ae41040d5d3f1a145552b3a1d2f333ebca4f00dafae82aaa78224ca445aa35b306a36d6203ee8c3374d563eac17bea550d00a0e16506016ad018808b00605431345b64ee369442ef6610426a512b83d942092184d9cbb7b2ec294d54cdc73e9c659845b139a7b4209c561733fa08a44871e284091324488a14f1b0884c102961624843254c04e94d7b34644288864a98f8019530c1020d06ed1cf01d2811e2c22f0d95082169ff0c31907d59f0f02ce9f1c94e4de400432542474a849068a844a888de584321221a2a1112a2370a2a1102a23b0d9508ad34b083e3673f17291a914f2615473ea9389241815a4ad08c2c6a842d09d5124222044b4510153db890a8f8c154f450b1caa648b2f7092f68560bed7248170ad6650a27d025fe780a235308e9798325780aa0e90d7553f828513279484e25309c6e142631b4b0b2228514cc0a2c58152d33359d40828b13445ca47022459321298c2612ff24ed08568619845e0a20297e1c4910297cf0112cbeb904ff642bc5cac73fa908342c41b20070a02338d0d7920b05ff6b89ff25ba4b84ec12a0253ffe544459a282954a141b8515d9915b2908e0b6a0c0c85cf2de1303305214c5129686455104691a378a9faa6151143e51ac8a9a20a5094eacd09106b5a000c3a22630d1f606584b820035c45c24d15d6690c1bf50c912562cb1446ba86409249a06b86aa8648925682ff24174da0dee4da6c718e3c79f79ae33f73e53c9f479bff26dd3c33f7d4df4bc3c0308f6bcdf56de7a93e9bdcf4c5f777ad3c7e510b83e3dd4dc7738a70c821b18550ed0dd6732e5d336692bdd4f2fe3687fca38db7b6ffa725a1e6f2aded6e2e5cda2a2d2751876b1ee7a8f39eff1eddee33a8c42a150ddcdb0ca0aa77cd0a6ef32cefdebb7a7dacdeddebfbbdd87734da7bc77f4e9b96f7b9ad3de875d565654defb524983ef7dd6ab985efbd327846bd347a9dd98feca51bbf111d6c4fab0269aaecf4c1f67e21e7fde9732a9dd94fef450b381dffb9a78faa27683df33696fb9376937a5879a8deeb11755db47ed06e7ed61c6b95bcb399ebef9fab0c63ea82f154d8e378339b5e543cf79a3cab77a78146128dd47bda945c5e36e74afbdf65dd63254b9570577af6dcf759a0f1f9abbf77ab7c5e4954ca652a9542a85e1c68d66e4559b833d2b6329c6d1e6e4783972bca431566ef6a83769dfd23df75da70931833e75dff6f4b66ddeab647fea3e8ff3b82ec7f3768ec6bf7376c9cb4e9ef61e67ef659cec4f19477bcefb1693c6725126d3bdf7de9595959531bc1cdde1d307a36adb1e7fea831106a74e9fcaf1ac673d4efbed793acb16432fc77b0d8accd69a6515e3fa3ab2a714f3505747ce8b8e9c97242f064bf69786fa96bfdea7b62fa93cf7759ebddeca772adf6d2ffac6e94d2f9ac31ce63087734a25df9cb289c3bff2ed1246bd09a3be266e9853791d3f70df618cd218a74ebfe59dba61fad2f65ddea953be3175af75e8ee4b18a5827a9c7150de8bc6df7d7bcb392f1a951f7eea7a5ad6726f966559d7651c0b0b0b8b18a65cfaf68b0ebdfde97bcd752b5c5475dbd35cd7a1f2c69a8b2a957cfa3a1595bcbddffe74ca1bfef659ef7d3be74597baaef4ddb75f7457eaba979c1768a4e3e5b914f8f444991ff9b3167a63539fab650690bc4b90a4e98fa8a27fc34704487ac3cfa13e35f09952527915963fbdb7f2a8fbdcdffbb5acc8b7705e386fcb638dfb7b7fbbdfe5adfb966f670f9fe5b5fb752c5f13b96ebb29ed46f61da7e59b0cea122469fc3b6369c9338060ae63f92ee3b0bc9671569ecbc12c5b5e79f8286f45c574f23c8c4d2693e93ec7992e572a954a18638cf114ee76df0c2098fae8fb92fae8ebbaa80ff6437db8a01224511f2d84531f0d67eca0fc4261c6d6aa63c1e8d0e849615c1786a5321694cb8bf65c96734da69ccab4d49b52998e49c7a4a3a393ca726e2af5a68cc3927353378cebbaaeebbaaecb54baae7b2f8851378c7bdfaa55e7bab5668f83bdfd0cd30122e7621e8f48b92e0c1362869c5bd2c9b9d6eae8e4dc9c8b619e94ebbaaeebbaaeabbbaeebf6b83dee05312a6e4b98d3663a1fd6ec23fa88bee4bfb8ae95c74c8f951ef55ef6db67dfe9f1c76d9bbdde7d2e6f104c2d440c5a65fbecf4d929f7b0a355baef5ee354ddc32ffd29fbb492963dde3efbac1e76b416b710ece82e8b6006ad651fdb679df6eded4f5bd6895a2bbd96714a7fca382dafb3b3ac1375297adb53cfc34c8f993013866d19866d260cc3328cdb56b0bc827d2bd8866116e330ec8b2ddf6b7bff6dbbb278356d07045173d7f559d4da7bbf7ddbee1e1a9f5ea5fb934ed43b0452fbd29bb6df6054e1fbdad6f13e10d4d2975ec3d189ba94b74ea4d7953f4dd37efbbac79f94f8abf6dc1735bc5abe20b63e745cf3e2ad6a7758f49dfedb8b5994da5cef07210ca53554fae0933254ea532b7f9fc5d465dc77faedc3f67ad85e4fe5b5102dfad43dc7fdf6edd7dbb66da5dcc38e3ea97cdbb356be6471bffd3c7db7637bec71de6fac39ef374a73dee3bc756817821d5dca2298417b7987c6df3db73d6ee5bb6f777fe2569ecb382b5fca382ddea743bbac43f54a865195a2269614eab2b0a0507f3d6afb6c436d1df71b8aebb62dcbb26cdbb66ddb92b877cd71ded77d7b87eeb62def19f436830c32c410838b4b2ad5d2c2c28242adaca8a89c4e9e6732954a5d8731c76d9ba6dd9b6518765d2b2bf9f42a1f84354e1587964ffda62b8f4ae56de9ed59bee583b0064bde96c6af821fa2f29e1abfcaaf7c10d650c97beaed4fdb432873facdf4dde33f7d10aa70def7bdaf91de07bffbac37717fbfc471dcc6715cf712e3a8314777ccf79ac0f52d6bbef53e55f2b109337bd8d1a9eb71ecd7bff28c20f86ba67307145e7827d4a31eaebc0acbb794fe66a5cff4dd874ba567313dce1b04580b91d2dbe3b7b41bf74bdc97beeb3a2ef7b0a3b71955a5d2730f5f2b7d25ed6b62e9bb9fa6bf5ffa360f5db2ba94533dec68ee31fe1b821d9d6511cca0b9ecb9ecb9e732f730aab2cc43dfbf5fda5c497b539e0104dfac7d29e3689f651c962f7d4de43e9da94b8fb50ca30af51dcbc36f5129b1a04e4fbf94f78a8acae9f4d79f4ea5ef6ee9bb53e9769de7795ed7755dd779517ad7a552097f9b87c6a9c75df7a9ee6b64a7336fa9542a955ceb61a7542a99ba4f728f83ff3e87ff726feabe4696bea8bb120f50a74a8fd33dfe52f7f8bb1754dc8a9051ec6fdeaeb5d7d1967edc7eded0cf7efb6cd06c7d76e50d84b6f2b60fbd46da4fcb9b8a3dfdb60eac98d740a17dcbde5c6fbdfd6c5837960deb6bcd57ca2fe74e1b4439a9fcc5e23dea575a3ec5fd771fc6374acf85c0f5dd57775deae65410a6bfdc5baf01ffed3ebbdfcdb6e57b737fbbbf71dc67dfbe0fbf07efb7af891cf7dd4f8efb9692e6ded27ee81e5b7d736afbd2f6f731ce965341645ffa1be8356c1f1a3ff41a4a0f75097f2997be9bcfc6f6a6cfdca44b1fde972b95f2cf9f19c7fb2de3b43cf7f7cb29e59cab3d96eff2ceb9bae5e1a756b8161695a7cfe58d5a59c158454585fb8c53e99e2b75cfa9e0ef4adc63ee743a9d388ee3382e4af7aebbc7f8fd31eeba52de3bba84bfada3b737e18751c66afc97c3cf71dae36fe7dc52d775dd77df7623bb2e6fd7f7b94f6aa9204c8fffc6e31ebff7953ec3df8df7f84d9f0dcf87e66ef0df377d36f0dffbdcd7c8ee8b9abb917afb2e1544f7dcdf58af41fb52865ec3f6b4f6dc77537aeebbcf46294fed86b3c17dced5c9b95a08972c1127a189268086454e82aeae155ef9eb471f6a3778e819319b61a48f7d33dee0a1e9ffe6a1377c9d19774cc288df1314fcaefde0da8968614591164b8ab458d12c33b5cc3002eb48bd43b0a3bd5ff9959657f9d3c328837a96edf1f6697f3fce1f2769fc28a42c8ef43b6148cb97ccba50bb493da73df7967603ffb6a5b47c53fafb3572fbba4f7dbbf4f07b68f96cfbba871a045cb7ecedbb7c7ffea03dfeeddb3cf4f696f6c37daefb6d752a7b1c0fbf658611784f7d3dfced5927c2eeb7f571676f6bd5fe62bf719f66651da92d69bf1940b0456dec1d1c99e39575a29611c7df7a7f2b3b114e84d710b34789c0f934fad1f3ca2e86fd9e3f742561a88c3147d7341b2d8ffd8c32116af973b51d629677c89329d3be9647a99c32eda53fe68fc92098fc1a29b50f877b1468872eee31ba6871ebc870837b19f28eba7e4dc4b8edd9b18c539f7b8f31efa9ad1d1ff1a55bdb7a9d88e38f021d65c534f9da14a2b785b98bf6567d0ccb3a5147cc8461926292629262d284ed8824a9a492def847abf21ba328175fd6540c6f3df6317266c70ccff2bff2fde6fd70e31f6ff8cc209e80f8528bdbc2be45e33e669cf82dd8ef90333132c0d4f65fdea8cf1bcf90b78df267c0a426f3f68b3dfd1819b11c7f0619f2f650aee85096cc487ff1db11c3b781084454d1a7c1d1bd86aad96889eff2ddf72ffb96fdf4694665bce58d3ae58dcaa6acc2b85a0dbbbbd78c631f7b4c034fc0d6e2131db3f5d99cf723d55cc6d1be3e761dc3b0fa37e3d7f2761d9abadefafa3172263ffd1d7226d3f0fb376ac66ffcf23464f779b1764696d85b53fb6fbf2392ae9952ad65cea74e1a60cffdc57ecb3b2269aa412d5b3f7d260de60fa534b8e64903afc1028a21ba78e1b3021e9e231da361121e20ad02297a001a26598d51445f2ddffe18fa060d930c814427192288566998840551f4104374a6fd2dd3c3aff4598e28e37f2feedee6ed5b27db341f306d35cdc696f98f2893bdb64306b7cff4b619eb1d1f36fb1cf6678dcc70b04781b6305aeb2bef513a119e80f99e6dcbdd9099cb3bfa0fedd6e619dfddce8c131f7bfb7b636deb8e0f9bed1348bbebcf0fc73e0ab47f5bea4cdfcc3f47f6d27df4ae20907afb8dec37f673e6ed3f7ee66ccbbeb1ac13f59d3fb91bfb59276aee072cafe4e939b5f2d9cd7b8e1e4f807f9637eaeb6fffc1e1f863bf4dfffad3ce8dcadbe69a66c33ecebcda8dab6dde21c88c609fafc48f067bcff6d9d7cf5fa57b4fdb608ea82a619f3dd45ca9e45c16afcdee6f1db975647673767fb0ef335f99f843e9b7bcfd2ae514f6f5a5d49bce6f6885be8f3ff84dedb3341bfe389bf654bb71b57bdedadfcf01f5bd3fe6b45165fd45a36d7622bc869a4d5e4a02194c228d2849565668f8fe148891165a95569f6444618161e9f7322715be0a3a1225592541631a265909dd180906920ed058a96f4a43941841a382c48bcb10179ce817edfef3f3dc2f85995d7bc04e1c223ba258d2e840bf3f72815546121b057224a445189098d283841d1c8001451631c002a80c2d9471048b0800e8e945193e47cc2a56a4dcc9419422325c10831f3d46d0b0c20632c84110b4e0c207504e49562d9036a0e49c11f533cba9e939a7f5734e9fbf21910e93baa0f0d4f3ed0af4d4735af95128949c73ce395153cacfc2145047f727bb8e9ca88c239491442cc34796b1d227287aa50aed6fa3ccb61389f67721181685a188de330c3e08c38ff69f561860a0fde31864488999232109489a204a6243e64b70260881fd6d80dd8fc0fe35f1004564382123c9d46e81223288148d31e48117bd5f74ce8bb61e42683469626c882a4fa2e54f89836bf93134d2860d16b62f5f25636812f65a998c27b4941adac8bc735e5482a6cdfc5ebc0bbd511b0003132434d10594257ed86c4c86133b4308030a9194231b78a10c9b18f7179161e412d128a4f86858e4e489068086455d78a233cefac79e8eecc421842fe7cb2f0251e54db4bbb720015722d83d7b4f54455507056fef89ef59929e5f10aec7d0442d48d2f283442e08f22bb2e91255546841f0ccfcf8a82e20e98d62c0b421c2c4581476c11e51106e1788e88d8a712ca74603bcaf17b22c3ef63c8b18a5e3e3484a26047f61e43a22a39148c7a7eeee4816e98b95467262a70502c9fa4a070909297efc1e7012390f3dd2f10638c59bc4ef21672a0f9ffddc47ca734a02f6e9e3f08c83fe957da022b4d102cb1c8da2929a23511c8236d717b809c441628191e88ddd8acb0a8c610ec27510ae21846f05ce71a88937b9a2c03b0e0d4523f7c832c2c5062ef8e8eda23703682c9c9158081e41a2263ac4958533b325083885233e91292b629a836ac3231a1c3439c8277a5649407ac79e950e7826d045c248e0285115e31379a4059e3eb046fc0904d688b36725616cec99ab5554f548604e2025643c34fe38016fabad2cb08f8d3e3d4ff48e3e7bc620fef02331f02452d9215dc6840289fcdd8118c35afb1a69d6f8d8c3f6555de06dad9cd16102d9e87064ca49f3b613665b0159467ddf028fdeafed8482840b0ffb512f2817f804e5c512bd510c701b506f04a689892a322812d425c27846d91d83a7ac42c80b9f28146485de5128caec4905912833a1cc3a69401869608d1885a26a8809ded86202ef19142467a20b204c7c204247c41d044de98135bc8984b1c080b7b5771e3531647601a4b70fd911c8ca28c41dc144e0101797fb2faa181b682c9c37c4af41f81a03ef08a4fdc765883506de9e878a4213891c62a2e81828b0940576270e91600e3a4c9183765554c51d9c3b82770e3a7e0e51c65f87eb1a1d7880da65b641aef08e89345fb58037caa5674a895264fe106f631fbe44afb5d65aa5aceed6d5f1116f88d35a62b5ca788678f872834fbc21bef504bcb145045b72c671ecd18291deb167f25024f0c69007ac112d4b7a93267a634742dafe64634fdad848da58591e05e13d7926cfecb9d3674a995a0832c4dbd09fdf8d37dc109fca00474f5aad563088443894a009c5f1750c0ade9785076f5f3db9281726b0bf2a8c152a496f5fe17843fcd412ccc2838780b7af2e30f0f6955c451b646e035f7a38841042772825cd3a5115df471030f49f500ae6e24774271aba43cbb22c8b52f7d5d7c387ce1578bb13294e9ec499bf9e4483cc6d2c20e0ed3dd77b5cefc8c3446fe7891fa15c32f05ee97d75ca1f3e0c2c44f204486f2b7f88b7991f43c38b3adc10bf43c2db2279c24f848140380825f443110636e009441186264639e4250b46ac8f7e437c8d08a6b1b122c4dc608b25a72618ba86455878a2f7e4f1957c2b20d9f8074519acbbc18228aab21a99f98d3d473fa20c34eac290fc21512625dfb5cc3a8b4c276af9d033cee60cfd07997170e2fbfc01a73e813dbb0c62c6811f1ffbba6df6e2ae9ca3a361cec6c18c131f4eec3deb443dbfe258ef635e7b5f9b7ad2cffef4b73ea8376d738e8e8e3820c03e1048bde5940f9e2375b4b24c67c6813f29b5f12fab6184b15f23af9ba85d52faedf83fb1a53dc4524a9c6196adae91395f23e917dfbff8d8b7737434ccb9f6e55b1cf870c2169a73e0dfc8746ae69b88d20ea4454c8acc55afcb068665ecedced1393456afab65aeddc8dee68d73723c398357592db9f5423d86b57c0bcbab6ca6e7def4f833d3b7f2f8ebe2e9bb8f01a49fa8342c990a7b542aa2110000007315000020100c068442c1602cc9f2505b3b14000f83a4446c4e17cad3248751146690210610630001068088080d098d13eac871f150e686a9fea7693e33334e5009271787088b97944e100407fdb28fdf80ded04e6f11e16140c112b8e099433fc3eb6842c0bc53ff8686da4752ffd0bc09cdaf00d96636ef14d0897f738e1d671235ac48a2acf415f9062e281e49008719e296097e40c97ff7e8e473078e139af76a0d744a95496b734e960fe1f86266ad960bb2fc48495ae1cfc4441a598fd1833a76029cf7af93cce7b75edb97456392b16d7a7faa390bc8f414e544e43b1c1782ccb2e37d5d5ba876362f2de9b80d249cc583d0235bbf02d37a1fa71b4803000d47a34973fca5dbc074cea515d75ac7889912e04d924e0efd2a478066db2851bb664951a1dd62f8af85a266110b4a2775ec7db5e0b3de9e5cb159bbe7b128584fe856637b6121739547128809bf027260958a13c63d3a7910eb3d257c9abc8550c669e3e62d09f78356b425675e57280c743cf4b86105c0f8f9c76520dcd728a8f630eee663eaae10f7e68f1fa6303fd1142184885d177b0d5651cb5cb4d228f7f8585d976f31b437ec302c5a5b0664768197e6e2941767b2a28a8cd4556d849d6181ccbbc5ee387660f1e048a6838a50f3839a8c27a8215b02a420e6b4d6b97215540c830d0a26edfd7e2b83442bcf75f9089cb94852d1e3dd89f9661941cee4810a269449d84251a51458ce494dc84aa706c23ce2b2a4e19bce7df1cb9904ad466a37fc3675c157d22d680af063596946b20682b5ee9a4a5a7e71248443392c7f49b0017c7b0c77816b3461522094d5293d22ea0e948f03eae45ef268a8acdb3572f46e8acf019aa3088564c2bc8247c495f4c83b9303eb7452c1cb8eaf914f4a9f3597755ecc9395981899f224c3852b63ede1b1f76add895f3454ac7e25e6dce7c982857088d206ed886217b3e82ba105d660f749cc643fea5e40385b2c3484d407fd21e724d028682bc8b92764824cb518240dbc08f980cc718c8c40f6caec409b31e2afd6fdbca53b8779092ef3b67099435384ec9932de4222c0dbdae4e34c8280b189b30291fe310fadcb31205d3061e46bbdb098699a7169754a76dbfacdee7b330f9dc8e04cc286b302c941372794742f083bf3fdc29e7634dcc014fb731e5a93212e8ee5e9e79f278da5c01bad00ff960b5860b36cf888835631b4d184e506eeff6bfe9e8e49280e1f438a4aee2d9b6de6a9c2034e0fe98e086ee1b3fc7708bb82aa6c0e188d89ac004bdaf52a56807848e500e6775b3ed50a2ce1a1789bc0be27ad28b9c28b922a04d4a4ea1bffc4f6ce3c8f10b77342ac3f6c410040b77f26b133a91a2d46b3b4853e06b1ead4186d224f50fe874faf7c6c1e70f81a80d09c365d00aafae091a2174486a5b86cc19dde6a577820c7f67d5da1682528640e6defbb90d8bb64eb6dea8970e236bb9c9531156a050a735b0dd10c9971de648f4b78e8c2ea4a495e415cee0f1c63260d6efcb94fc2ea18cfa6f3f32553b4f3289894564220bf30fe6c5d74108e81d8d9f41040287ba558b0df339d3ddd635b219f3438621010c5ff700b8068abd7a01cafe2efbbd89c626c95daeba9c419c75380e24b512b89d124386fc6b412409e8dd7b45e178df2f47b5504b29c59ad76feedb9a0d27a8a8366acd2854185d4c75d2637c22d8988f2f05124044e8b8376692a97dd3501027211b173bb521dade650423a419063c6bb50925c280a15b9ac55ec1d5e6acc325ad2e32d3cc4d74e5f5e6a8f60ed905ffbd8d6d610eeb24b5ceea74c12d1a0414b07f28c7176f83661d34f7f8a1279324942bb93fab5509be1c472e06074ed0b41dc2c82fb74d9a04d36da14cd88791343e42e372077a64895019b9aa03d826fc328adb12a61abc255a1fef3d7f847de5b91f85d5f93402379fcf107c3da18e086f0452992e41b265e5d9784e4acbb33b13baec0d200a59ca2d550fbb93092c25c1263a2136681482c61bc60c8df6d9adb89da733147d08ede91a6c6a1df259c0c73678520938cdd68928eae6761dfec50ff7a0016b978df53b7e6bda82e8bc66deb88db89d06efd535e2146ab09861d2f9a0cfc554071630bda1430333f4fbb6f75d2c7c585a60641851510278d3fe57f279f6018043f5050b3134ec7d1e828f5357b34dfb1e6fa0384fee67e869ba53df9fee7a209c7888a60953e46ffa2bc70af91bdda3efa7b5a202e8788304f699b73518a9278a54e62bf6e414d7ac005528a26535b2c3bd78a29083377d2f62e9b27f92f25f4a8c445d66900e43ccb99164524a6eaef81d60aa6f7d8a946abb3e6f6fc0f69c681601690e754e09d611f1833fbfa67503e3cc34e548323c242f0de5fbb4a7aead10c7af006f01088dd8b268ba81f53f14e8a4f3f3d1ff89eed00c8a4c0ce7449854c121fdab15c898c6540819c8eea64778c7955ebc99774958509d9f80177a9c304da6deb34cd72afc789e9d421265f5864466815c540a1f510c5c21d040ab87f89329dc6fc0666457a51c4191252a23996a1467adb4d78d0e5f8cba24da38b9d73e1bbd2157433a4bef5d9a8cfa822c41154b4d24e6c9bbdd9dc940006ddbf993e4e2323b3b392189a957478c8bef475266e78fa2e7686607b9b7ba73350a9a43e757af47cd0137a4ff98cf716a577a55c5444f0d425a3a429eda4b8c4a43ded8d52366afd86b372fd1456c70b298353d23277cbc31ec3894f74dc26d568e96cd9ceb0d1b799a805fbccd79b73f91105625c0b5145e40f6711883c23e6f009cf3a55430a57fcda4a74bd91d1e1be6f9f727f103f4d70d552c18d271fcfcf5eaf54014812332776a75bedaf51a65fc3c923394c19c25b85fdbb8d00d01c36d873dc27d49ec7c14d38fea4739ac07c8e5bc645838391600c0f306ecd823b1f9a1a0b06d61a9e391843f45e225dc2c3138ff5e84f151ffef40b45cf1f0e9dfd24fd9897f614213083a1f8b13c89d233a982ca976ea9078a3c9888c4d7ea1a8a23f0e9c1cf0010cc33eb014868059972e6b9e9c9f39df470ff4366654e32a20aa41a230ab232a3e040584c52c0725eb79a4a7a203733c2588441e49c078061ee15086d8e6ae58f9e8271e10dd92b34203a8f23f7ec3b68718fe90ca4c287bed855460a37d6b4db049ada51774f898a571935313d991bc24c6ba0649e96ef97ecea9c6e815167467dccbde4556863645fb7cc5f9d95fdef42f611ae0de69081304d6128ada6ca4fd59fc40d666522e71fdfce9374a56e29b666567d4a8565c30920d64b2f22adf962bae2b900f9833bd61d0f9c486dde3d888907c0ac17c41b81eff42046975a96ab750578f222c605e9b4d8a462109ecedef3fa9ae0ff2638eea8885737fdf51c6ded8defd2b9a834e9f994759cb48568a6bf631701440969896074d2bad26f07bdb89c551f340b77dce27d814ebd3fa31bd8c856144ff062f55dd3bdfa42673860a6d9870d5f156efa533761e88261d9e467ac92e222c623dea5abfeea60b69d26343ff114185b568259d5c4e7078d21df9b583b0cb4ad42a838000ccf814a2094465703346972e2b3088c020b04436927e65608efe664781ae636e5ec9881c4f0c999894b78199f7c9ee13fc85a1bee016afaa662f2f77012c7153d714b5fd02a969100ba4a9bc84435dd955011c7823b1aa6621944f75407f8259c9c4c735e586810ef4b8b6cdef53df6718cbf28267c04825ea3bf6a354ba5046d6ee720ac96247a5a48655b28beeb9ef5b939730deffbfdae016c5eb2c2527b4b49e2886c8905aaec2678f829e63de41d63d559a651dd0c335d76c3d241497c5084d90b22dce744ce7764357b8b8cfbbc4f18aa4d2742c5127a1acdce772c812eb8edaa437c6e1d32148a2184746098981761bdfc7b121432e11bd9bbd1488c683c5ce7ffe95ff9ea14f417f197cc87fbfbe3c6444b613b08d5dfee99b7041483ee9d27c298771554ac37e04ccfe750b51145dab07e2dba538fba47e50a974813d834bac0943cf4b54b6304a38ee8af3485c533fa26d463857e82204772a21a75b2ae3d4257880693033166ff7035dc69fe920cf3dfd217acbc3569d15f6259f588202c9a07b637711510abf0a83e9258410f849693fee97c494f7af736ca3811aa1175055be366b7184cae314108765be8e67f98d99390e43ff1d0a2074f7bf1db0123d754b2a57344a5fe4d61385e937b2949d018fe6befd533fe67cbab45e2b85d5a78b30a014a8ffbaf3cc83c4f1658074642c4d54b1600560a6598a1dafb6e11512b206ceb5375c6f2efd06181372fb1b81ded872d1156b722141169e4eeab22ecd990492d7d8a0324429d8979936a55f84f3c46f998234b336cfe8e3580f1932bba6721538b0e97becdbb4aafd596f69c576dde53d278649698c82ad8f68fd3531a4d6c18a8d3e532a0dc6d971d32ef9936d3a3b0c92dfbc9b86dee51cc53fcd89078e945595dcca3909d67db549b8f06b584fea1f68c0e4d2ac71879f2bc46311cb53c72e985993e5c75e7097cd588e3b8afb65c4b3298f9a1d550c47d199181a16638494a6857338cd92e3671acbbe6e972947dd16f2488d8ae1546eaf935baafea5d620e68d6342ad08803d7b1f3dd166157bad184872e49371e54078a6f46883b8be7641113103c5a440056acd8746f8905c5a0493ab8d70305f7d825590738c9abb537b5784d25f2ce380fd8354ce5f3c54651e748da55c6d4e206d12a987ebe9f5f6f1acb1c585ee70cc0313fa6b1a3bb76857a52d3da7350b159850dd51838bcaa4adcc4307074bec4acb214079a1b5bad9713c78a057891cb554aea2b9f2809d0aa6462d7a74bbdf2283e8781422e7fb8825b24243e803afbd23301ad2132d05bf2f25bf2e95bb0adc3938e0706e47aea6faab575c3dd733a1fda900638e81f2fb002c6a2814bab7a70ec1053050f85c8b352081b5a895e61a91e0abe2e5f40b79eca18c5620ce8cc4ea7ef9644e35ddbd86b4de1b3b8b2f6f74990664eafaa0a59ff484cbd8feae871fc732e0e4a58fe98a2f2b399b6330ac7d66c80b03e042329d30f7c14e6eb33d4a0eb19f734291ef3519190bdbb2bb79d0b44c3c8390efcec7f3cab057877450787da341a537dd363e53ea6d753560a5e8052ac1c260a653ac140f0b8a120fffd007b6ea19da7205402790e29e254f972747d373e0f175570e457a17e7b66225f99e660aeb2a057ca787718727c8d8d33929a78169a52944e31d4612d1281f1152658d9333ab1b3146e814d0489ac35b5ef92030e5e0c8095770f0a1f4ce62664d178516bb06ad18e123f2e9a3dbc823568963f205bd1a7cef475083d05cc309bcd605b559858646ee5505736d5295369f2c64338b161dde9aa6f0185fd09a00cd64141508422d0f20358008c0d4f1c84d86a62d47d1d22e0d150e1b43180655151bfd71b8360f10d38bac4b8914f8ed5cf80c3f1ae0631377a0a43b0d9d245c03d41e891e092d5cc97a971125f0c276ed436b688607b1e05cc1bfb7e497b622b13edd03ff159f4045e16f7dc46bf3e2e82ae49dd7ebbcb35736666c681814081314ac5bf55434e4c2b92d6cab31be728f7013fa24fa0aa429e35f53426453661a7cf6229b10d6bfc27b2d1fd0a4c01215d6f561a1e196859637f301d98c0d1252a469fbbfbae36c2700c031eabded0f800e78968530151eb32f4802b00c8182ba5f75b20d3813b4d32ea18dbec466af45f293d6792783dbb180a87b843acf22885acf1b68d3ab5c1c0717a8e8903ef68cd74a6b80e9788c71b1c4477a4ac2100050992854955d2babeeadac95cdc7a13d58a7a2429293f3bf3d03909e234430ceb2463dbb2f7712bd851835bd30de7768ee483949bdd2ed370dae3872abc8b643ad9746d63d263bf51492ed763d9a713f6ee2425d86494834f50361387a0c47e7d77a36212b2a6238164045ac64ec66e64ca0cd0129561a25ca4980da08cb2586f0c190c35a79972145b4a308dd25b09502229e3ac5d725774f45d42e4e497f4c97cf36984273e9965bf8af261723d7003cd753a698e8161483c8623d936c6332a93178036343857a67ed3d8bd373e0e9d1d159a7a9a14cfcd8a0936030d497fb9a07ab719e74096582199c2467637b724fce86506eb7a17bae6dcf1d1f255dd59b7ce69f93ff561ac2f1df524a62a61d5d93a0290350a357580f7ab2366d015fb3554c853885c3143406d8ac6f408152ec212214967a6063434066a5ed089574f4c7505f28513265f99a030459941c11e7a5508c1aae1080879dc1c9e09b78357d40e55ef81dae60ca26a868801bc4bd36744d48f18b5900f1033fc57ce8263942d9f33fd33e1a3eb1f5e4b0a6a985ce6ac372bd7b63b22a0854cdab186f0906e1241214d58169be9bf9f542097b3c0bc4d1e2439fadc219c8bd40bc7e9bea157d23546b90fd81eec185dea04ab04e1d8c83a935c28b2f327076ecb14d9b9732760579e4d8d57db454511f56a6be08ad322a4f3213a4fcc11120709077874186639265a79b57fb84af588132b004d97fa1b0eb5680fcf1db41321e37e3bd3e9110e28b6d1ad295f79e06a267a24ee44a34087695398f57f0ce934ecd5906d3363c0b714b8e0e3870391693eff15da02cc63852ff97d89837524c01b461baf0c711c84965b301405c1941cf7815fc6d90ef2cb349856c6a0ad429ff58ad03fb0d35dc79842b1fcf064cce0cf3d0355e70a313cc18746625eea02b41bcae7132356b9755efd5a30e3bc6600c7850e46b589d992bfb76e7fc5b0069c1597150bed3812aac153bc2f32faf4bbbd9e070a944978260c0aa49cac016151ced08530aceebd27221fb3bb3ec2aef3a0de6c5bfc6ac6f71bcc34e674508f7b10540467582572952fdf2c0d356d9835fec6cb6bcd88b0940045592aa5946a924ba84e51d226d3ec763821dec1546d1c57152cd6c294d942d14e8f3c0beaa32d63764f443e8bf14ac7894c29f07f1ee86c06da2fdc294af56c4be2ef9ce441a99705e3a9c8bba6c970d340a671b519a2a9f3d21af8f9ed88651f938629761816fb5655d305ad99281b7106831feba88509acb84ce1974f54c615c76664ff7651f9605c92e0ab108b3aa4018c0f26c151a48a2aa5b594585cc071202dc20514590440a9bd29ba46bf5043c4b93d10e910f4812261bc92c7ed93d6cec43009226e96711052c54683f4f4aa556c10b5ea212f4bf8c9cd7612ca0f2a0c130ea048c6f32bbdf1ee5be829bad2c232bec1ba5b30bdcb48c1c604c7833fb968eecd6e9117611b223295665c7bbb38b80e363dc373a39a9613e8f634e2ae00e504b752faca4a06f71ec8a6cae2f2376c7788dbda9136986b47a6647067e742d7170f04d5cdfc3bed3953ede741e7971d11352f274ca4486567394dbd0baa152cce9cf587e4632c2dd34ce459e240a3ecff05b31184316a716664f8fe535e1c2be3b97e892bc87c5f2139fd81249666a2af1185b0be87b317a8298a545cd2a86dd7a4d6902b0c5805ebcae481d6a4b78615fff9939e96e2962562f605ba29692013badff842caded01054cc7f1143193c40d58784cee9b10cf31d94bf45a3289d67f7fe8b85cd1c129e892b8656040fe0d191c19a97ef4ede1f8d5655ba0408632bef3314a98a3ce4a114dca4a2a421e0ece7aed72b0b8d4e1b76ec1e3d1451d802e54b5d1e61018bbc75505dc4e162d21df1f60462aa42b9857b507aa168187e3ae27611ef652e9dc2a64c7d7e744c006c4165f9c9029dd54cba0d9a4e0b8f0ed9539873b89338fac5c3f1a3b3539287d9995f22ac7a65daed8cb75db5229afe6a76284b6462ebf3a0fdae851ffebdb38aa60b02b2e4b914272e672beb57320b9cfb66333e9ae5a608f0e4262507ae1fe8e16c8fba39cf2e4f3c100f7207b5fa170e140acb542928f11d2192805d71464d68b1b71529d9e4d3ae859e75f2e9fdd208285d211d8ff4fada898daf41bfb2a954580fa0530dd4620fa3ae16fb210f29ec07bdd69794b2811f35196d08b9294bc011e524c83659096bdc04ad15e2b7314cbb6ed40acaa648e997eff01c439d72c36c0a60834c2ccecc9414fd1c183f57a4f4e4584253061d145221c402d29416bc8021ee029c0da354cca5fd31c682fd188c8b52e0aab10bcebad8435a2c32ef2529f2ff6e2c4b2a37538f2fe88ccafdfee105445e960dee0f8c542a6c66b385cb0d758df734766ace3269fcf72190a26cc699b2d2ad8bf4ff0133ed40097209177e068995f017200477dbe60a35c5c65935df92a3b50a2f9411c59029399976fb325f24493786cdd711947a9a14a4732bf434d6fb25be55af2a6a2b0f460d2a9f13740cc86f8125c0a064ca38b70cb16f1be7e8ad1d08cb7c8758099c923e12dc5ba83402d51587c3ee313c1c5e3d73c05db1907177416bce5cead83020938ca564ec00935cf90f96ce1b8ff2a953cbdb5b40b31936590358a24c4a59d67d8aa42d487a8923631168026624dc5453271afce45a32342182915adbc2be5504bbc8a8bb07c923f9e0749cdbc792b885388c0497bc7004ed5c41b511f3049ddf89bcc10a3e5c5d27e0247f03b3b6324bca6726d5c2975c0249025860632955fccb2612908f642e02ee313b636f0fbe6ddb275cf04cd6fd5a33b3e23b33297faf344ae1d5c0f8b11f236e55c2ac2c3d2b691c564c149b2f4b11a6b3111706871b32a48550383091c3106ab5ae6305857933e4cf09174e719de7e90de62d7f58928d04d4f1808ce1dce0ef84682568f943d113f923298da2102279f5a8ac883806e3e0d7bd9360bc1eea2d883ee8628847118d9569170ad641a1102c87ec5b9de10c5ac72ab313fff50c202819f8a078ef7e3072847fb9ffa028f1416ab991bd8291acae55b58aed103812219fbac9c09fac22501127abf0fa59ea0ab00a8587252af484ad09855631ec2c4a3b2215df789446f0b1f3dfb8da08574f50c212db26fcd48e93232c0a9ddbeb79c3026399930a3e0aa414f0002c9ab622b5c5cb00475ee17768c8fa0abdd2fc441e32eee417c6e9f8260dfb0f5ec875a6cfb3731cafc4465325c3d9f50ff0f72a2bab903e27b66ac3df0c09987e12abd131572dccceb0eacfcf781221aa32f78fc0650bfab2d998feafd779d710c92d4c94085efc9c76a8d737c82405f97cea1c46da3c420b4a61e4dac00a4fd22374aa6eee27b852bb7328c214443bbe2667e2b7756efc0ce790127d038c5987e7c77b28aa8cbdf21bc7f1344371aaabe51e54da576b547e0f355f3e6f40658f836f01d9e10875edf4797e4286450df093d0266fa5287a1f59dcc3db24a41b91b1ff59aefca73e680059488ec73a83402a2a10a87cdb454bff893dd107a45303bd8af6942f6ab88ab50ae4be8466b552fa445a05d4681a724a5001a0d8086515f3d94049ee637955ef1a0e198773654857f5d16fbc9faf6fcb48221945dd4623df425709ead17fba2b52b82ee7751ed918d334abf9bad590c227d4fa6b94d908fd0a924a669c62908946c49fdeca11c2b765d65d5112915e8187d8454932f43ccb84dfffa2128d043ac0fe575c13139a009cc5e240a6d7a1f8de9b21fb731405d2b130e3aabd55bb5f85a7988c635d390daef37fe0b9369f5e96c1768681df28622c4d79190bca33a3839a6003fd88c57a39799d3b463b6f278f339b83a4bf97acceebd7efc9ee09ca2b83d70e719de72dccbefdc684f89dca0b1dfdd3269c5d77a449f89660ccc769aa8b19656e9fbca53a390c20c18db917a6182336e84ebade50118417f3941408a093f0a7e240dd06445fd2de290ed1903710d55fdd68a30467a40d219e78cf2a02a09f8a8e06ca6601886151ebf59cadd16883b9ac5618d2c68ccf992f8bcb8b968fe0fff6eeb15a79c10c7d7850bfe3ac733421ecfffe0ae035553ab469dcee1438aa798ea70011d16fac1721a14c71dca4000e95611030107ff014a8b744e61343af8429b13bcc3a3050e9dfb97e52fb5a851aa88627ee51c05cfc9e713fb9ad92d5d8657585f5afa6e3e684451dd687f8549f535aee829b62a4ed5d303e46a0aab7523271b1607d706f8a3f33bfadfaadf7b4a8f71e64cffd9ef32d51a346650449f6e7b354e7cef3d3fc83c119b3147b000467d66fadae49d6047d90186e8ed8a287c65953576d7167bbfea6c671cb0c2fd0e220fadd95b504121caaad60767135f0ea083eea4a45798bb66458006cde9d4c9af94d2bd494976bab816dae19e2ffd72655471c6b29ec4595ee214b8978e47d436b90a27ab7628a6a1eee0aaeca1323e5ff904765df666cf47f60383ef54499fd9e33c1a75edf9b90294b6e78f7cba0a7610d4fb93dc37b807c6da7f9cfe5ff0cd8cdae2e7a5b510ffe5e03d7ac565a673928ff6d1be45a847e33eebe039f8364464cc807ec7bdfa4c8fcf2f84eb057f826a74991f3e7b542a3024fb6347e6696cf1943c9e5511fc3b6c97b07a4b62f51a391cbef5eece325b5458d5536a1b872a94d2718803c9eccc397d3fc4aa9f99fc3ded2cd1dedf81f8cec6dc831102be29ed35e9d03a5b6dfb85169c18459547782e069d7077c57d383bd3fee9c10464d35524b614b9e5215379e48a83e25b585c207fd001ccc670aeecedc476aabeddd119f37122cd0073cd04ff15b61ef4f6d5ca7de0af7e2e5defc2e4c3655eac3505707a32c3c07126a146c82f73b6c533025d244c3647a872aacb03247d0182f13fa02fd452f00c522a0c9786241e0bf6d453ecd1c268d2d3fc82f236471404128bff07fdc9cb4db5e338a471d454f825c804c11ba03041758922f576a47e9ba24338b49cd5f8b56d92abf434b0d91d607b9aca51cd8e839fce34c9d4795022cf7e3b699d0742af69f0c38713a2d9e5dd6ac98a97d87d867ca0f2a85f3fa562369c2043f991fbe9b927c24ab4dfc99e85128758e59fedbe26bf42cef2d66314082093aa9410355be33f408fc6ca17173ca41fb26f64e1afb615ed840e838da28a5e55010cb5a963af231017d42a7d4725ddfec736ae7a3a62a9aa80ce6f14013a1e6cf36f1fa79fa1492d98473585c2b06b1fda747b224932e950ac450cf9c6a89b23f641c72096030e67b64447d8981c612581f17e32f3a71f281f7ff89e4773455ca9cd0c0e73936738fdfc9690f26266f4a6386ff02f6e2700d5d4e0731dec8c500050d7a6a74508e6cfe1f6ebf36b0dfa6687d0aa57ac65093371c83e2da51a44e289ce570dbc8a55ce598f13a31942a8877b9657cb4c3481552fa00fe19dbc11b2522c6cbf224840c58ae828d5a0fd9a7ea49cc200a0c59305b2867ef4592172a9189a4c263916ba8cb15823d762d77578fe137207de7859d92999a88c9afbceffeeddd75dcf5030367b072bd11b497f50ae2d367493280e1dd3666860c4cee9f6a7b0838b0faa9d28f64546df8b93f8c8ecf86f322fc494d5697a2d395706dc984336480983d4f23523d3c369189aa85928ecc08100f0963b0e44a47e2cb7af47cafe517717d7de672b0af7cfc2aca1ef17782189850a7a5eff171931280bf226f085a0f940682e8a3d6eb75134fd39e3c4cb4229b154473bdd09a4e19e000632e3a1a54e839a7048dc2073cf45382af95dddc630ce821bdf2a3d61489009611e26b0e04c0d83d1326ca5251f3331c9e6dfbea15985596a4062445deea46ca616aa42d8d92013e07eab7d2ea5375496fe2d22778ffc7d537946528b781b27cf9a90e93b2fdaac56d66e23f6fd8bd38482a6d9071c7f8a275fa79805da091b816d2037fea2fbc441074a816d3a0cadc5f6b33e4741c51334c6ddbaef90c54f6d6f5a0162ae74d882fbd44f29a974746e63a9dc93b8147455d66de0183531e95866721e6648e4b386a5de4a2f8ed53fe41653eaeaf27649d25e2fd05a9f91c0e836771e3f376d8744aaa1b0474b18aa8961191d3677b2a2f12d5ce34bb89ed27d9386dcf94ed29b6a66c9eb435adfd043bd3ed26b29b6c739abdd336a6d89eb269c2f6747b13ed4eb163a32c0f572c6b46426048882eee966da72c753cf1139f73160a2690633c0c75ba409d71e31342e04b25659eb621d37d62ca8308f496cc60646c87db9bc3817db4d01450bff85fc02412f0ce2d372df261cdead4b7a0e9b319661a9c2fd33e7ef7d3e0b255732d5f4b985262c4910b816013dae5224e2801f4132b9985540c2228700f0e6766ccc9089f5c12ae3d8bd22321965326d6e0f391b661e1e2164f8d94fa6ed3aa216c8c7c3061a645b75ea84a63c54fff03f43fa33714f950eb6bbe88422b93192bd503f19d3d566b892bb14a6705a1a9c85756d9a9175cbc303170b35e21e5da3f6149935e51c5c9301113d32c4dc35097e576578a3e522b067319128fe394860c046a9a1de3409330f699fefb9795ca82bc9e5dd5b45329afda12115d7185283f15f035ff8435a9e4183113ebb61f371bccceb9480d8b63c809f33d751d4b93e8cc0daced8215800a2836834fbea2d5a65a097a9c3b959cb8dc5b92b156c8e5375adb395e0c4fe3b69f4581903cb3115c447b2a3ac0976ed8b779c0251d8d999c82fb46c32f71c27b4ae666231cb95d526b7c7d1c9a24b7f6ccb3edfb4efc111a6d68aefaf2b3a0c29fe15004369c45cbffda60a21d0dbcf6b3bea146f5e1ce20201cbb25732a269928e69105f2bd696ad260600a5a14eb40463f152b9df84d00f45669542d997e00932af8b02883c914b3806244d5759953001a5cc242e5872be4bce1d1a76d0efb8a7096e9704f042e002784e306a4766fe8bfd65f6b1d00a1b46d0ff7b51e61acaf6a0539124fd705d14559ceae91cc88749f6d1b60aa0bbd9ed4613fdeb522d47802388f370af0d11dabb32b7e1ddf8be2c6b61c70f2f6fb215e3a9b2b153ff56ef16654812f3c3af21d420b7e66fade03ec5e726573993b7ebd0adff91500a4ed339eccabbe564bc2ef3e1706b5e5504b32a9dab276ac10fc5629a5d571acca7745ab2b89613ae746000005c63253348a32d42b2f86a5f67b43d8b95b84d77e071eef27ebb9c36ab6357cfb99ad6bda8a409fdc233a4409676a25e88acbba16e403811d8130b18d88f32456897084c59cf2578f557f13afa6fc0bcc21264de2a4befe6d3826472f8a37f222c22cfa021a62d193b3421615a62a1d34340e68d8fbc48591225e1438d4fef27e09840e59e9d4370d1a5aa0222706becddf34421e795b05dd444470336345f19777cca4b677712317230d18b891a38f90c3e06270119fffd6327be4b171f20261bc9d1d3938109b30e03ee762e19ddb4af9e21046dd6dff33d641343312c610d7b9c6c455a22c9e0feb447425832b37f005268bd3e910f051cc91ae302bc5e9a5d365d7fd15ef1a2716ee7cf024a800591a6bf68af87f5ae09d39f067ced5d96bdb33f81a4b2cf2ece1e244c6bb8441faa94d37a14c39ed4e3015a8aef39cdd75067fa66b4ed3b54eaa1792e477f867f888d157899111b6ecd29496501b18aeff5162ddfd2be9b0ec1d08202340efa2c5a80b581668f1d1af92881e56bf7bd7dab10bfaa846421da83015c6c4a3c0e016c9c1f9d4aeeab9e4dc1d37d6a9302ce0efb86ac51a03adf2615bebdaed0338ccafd01d6f27db2436a40954e7c17ebb803315900b38b674fafaf57a5f4a69e03b040c32a8b0ea6c18c1e47404784c4908c42694b502cb85a1f74d03ba3c34f7b1eee6eae65c1000f551b28597da46b20e5ff80468b8b06eaf72dfac905940dcc79486df72b5efd30b3210de6d380e7793cf7ac1e120bebc314fe98f2990e0a441ca0ec2d0d0f6818a8a4ab0ee6efb1b869b451792a029d0738807a5032a03e4dd8fbf00a5b0fece46b1fa5c2cc2d6eabbb802f2dab7001ce7bf10fe20f90900b5da9b8c829d63f394c92c2861c7632ebe1fe5a90f00846b707e4ee9b74c59f320f98449a827e724f040a61fd2dc683bbf7075e92271e37c96ecb2a89a65fe221619ee05b3f9bb909ca8655d265fd34919f0938a96beaf0e281a4bbb35dbaec3cacef77a0cecfdb836b4094eb257b994da77357242dd26e26c77298ff7ee4432d0e8058e3c2904a96b00778417d4ab1f52a4e3f0d749f9eb9f99c34c1f82061ad5cd5e09fc9c35cf16eb362b32fc217462d8a70e5a9af2fe2700d72f7d351658c8a3bff4fe4745feabdb4b3394a49fb134ff6e98866edbcaa2870aca7fe0b5f93929cbfde53f31fd41df780ca035c316862703c0ccae4bcb4c7b43dc4a8183aaa4af8f4f218e597fba4a98b8ddfda6a3d652ee75022c96b820c7ef28dc516d43d5cb362370df254a5f0cc0bf29adb58c2b3f87aa7292d05f7cd61ba2f22ba014f42eb9577eed50e4a17f619f7e8b925b7f941de82d469b9bf73c89d6d14e0449141262dee2c98fdeaffdcf040de8c09ab35edf75b22de2e22afb36de8a6910bd396eefd75fe0a3534e415789def25780a202fd45ffb1272275a4c5b7a33ede3c8859a48e44181982bbb4322fc61302d7bf77630832f7e1d7e20fcb45438972760be23d8384b381d8e2ac82a63410e37205204520614023018867e2535e7fd44dfbe6958a42a0fb0ed3b6f11ca5e16abfa531366363dbaf934a0017ab8cffa8efabfb36d608095c924140be761adb8dd2580113ee9a71d0b61c361fb4a5964a3c0fae8fe7bd179b5d10b1f71d58fbc42f6561cfc61a5abc7962aabfb5c4c7d3a74631e3e4c1a34115a38464efb5389d03ea3535e2148b80255d6011f1d373e1bedea1fd7453eb234c372ba9d0f7afd6686a696cf39fed97dbf3cd46ef3ec807330b8ab5ff2eff7ced9702a43d691a399400ba49310e88c8063ee1766dd00f1ceee3a337015d537014c38d2d17602945080437736602266718a947f599d00097bd8946a9fefb65c9d4d898e99241b7fba619859f2e256e1c4886c96302b22726f31c5c77ac79127436c38ffb6e7f506d677445b18b46084b4acf33f10237b95e30a6765bc1add388e6e3bddfef40776b68ecab289bfbd49f31a4ce24a39b66d20118c18b49b64b4e2a4f9b5027009921e8a9ee38d790e0157c11a62e1627291ea68d97481e53d52173236846953f3e03b5c804823ca07391b18e351b4bb9b41e0b87701b95a304c895fc7af1cc7e2a0900a17c7959892ce51d283aeb43f65e8179bf97ff6ff7c4635b532e4a0369dbadcfbbe6045b14a6db7823f683d61847d4a8f1ddbf8a29f4b14ec3212b7835ae6b2ed991a8e9c0bb4fbfee34c7fab5e458b839915b400d888e88969b68b5290c15a11d6c93e8b088ad6b6d44896ab5789b0879f1c2d11f50ecbd62f6b7ddfa5eb62074ad3c91967ea660165797ce2dc6d330912ff20142386af153bbc107521e48773a7666e6ea7a79aebe392dd89ea02db53f62bc46770305c27209ad057d6f494297cac1a53749d069bd2722e2756612a3e2e69b4b13bb6f53b75f3a0415c795d6d056ae0232630169f8c802016513be6630f8d102bba2b17ed45a8b0392c0573184e9dfe394620bf4bf6aef842bf64b7d4cab580bf4f9e7390b64581b6c6a55c2171a4e5838395c6ce13f57bb7f9620d6d5d42de04d305e3575edc7674b2fd56ca46ed8971d59aa349d45a3ced7be344720536b5d873bbb1bd3593e7a58f353d85034fd7cda77ac3e50431af4691810af7406c9f52a0dbdbb3deca7aca455da82cfb367ed3e66911ac0454a1e9eb4dc353d800747a467f843528d98438fbd605cea49299e6f3ceda52a7f1d353a54b45cd54495493ceff2f0d451a41532ecff50154a3c5ed90797760ac70bab95eedc51fe95bffceba8bcbbd7949f94836b88103f4b8e9f5b3b1481ce25f7865f178a79e82fa2ebade8bcd5a1e843efc2f6ab51068f36fe1bc60b7306fd3c887d6779413c32c784451de856449b7d4d20dbeac1ac4f990b41d26f1be956bd685ea8e689d16e230aeba45223f66f00affb4b4e35f422a9a988e5ff1f8e6ab2501a27f099bb8bf82b3d03024ba9addb3e75df9ebdfd5ebe9a73bb039d79827a22c9692d89125f73c3b40d9c5a9c38297f6bfac59f4ad7b3f3b79c6cd88f45f968dca7829f7ac144783d4254432844592cc175462c165fe9824a75431540796a1a71d1ee5196444f12175aa4ed73457121648d1fec0edd1f6ba9a3ef519f71532eba655a549b8a7972bfec6fdb332af8184d3e806a70a32d3bee727f5f29cae48925c035562f8b188e53615461914068b5501a33903bdab3ffb0b6a482fcbb41ec9c0a3478effd6fb0434bc96ec7fc912cf0b1664ea0b5dc75d11da938a248c566b39dd9c4e27deeb918a434a3de5e77b5797f2505d1ee25bd88b245b69d3980df0a56a0b35d73439f1574c68635ac008ae2c2475f960e54b05ff16ac52506f300f4c57b3ef38dd7fca684d08fc86195b21ab266d465534fecfe2bfdcf0cdbf35f472c6d7b6a448067236242be5ecbec6e23bc526f4b307f41b613219b8a6dbe5e4e20b2dea4c0feb4404228149f9a77cae56915df49a1b31ca5333db6e76c4c7ef0676965d0939d481a1b156683a317272072dace4352e5fbd2684f7b4681140e4878ef2ecb5bc55eb35e1d7cb31ccb58e902eb04546553058d7d1589c8b08dc8e7a0648f170c5581362e1f460fcb24ca8691433fa33d49f95b09473ea1bfa0e99542616db819e80c9818162a4c50df7f6d8844ce7b00eaf137d639eb49d729ffd6e1ae445d96a31b3b708ffbe51e9d5e4de64d0c0fe3271c3f7a78e15d109b46e347a635aecd655563dd28023fe7e37d863b9b27df496cbbf96d0e2c541a94d6fcd43f210c8e957023c24e4fa9fe85d5cda9fae84111ebcd4a646f83d58cc8eb5ab51711b43910a6cdbef4bf7bb63094a2cd722f51909daae86914812a20c5c62d1510cea4100d1aa044ba51c8c890098dcef9a6d85437209694ca4553761564b94e5d15ba118f4bbf13bb9636b1c05e3779fa4ec51032642e2c61b4a6874ef5d2d838f1d5407c4f21e5d3fc01ad36bdeac3442a2db7fca6408ceaad16eafb2a6612a662efe7c1636f06a06be36d4019d29e224109708c39a7238200868e055a99cfb597ced64aecac57c1700f369c02e01a235c0a5a0543af0e1d016ba8c50ad69f7e31be140e58cf07209e46a75375f345945666d9f1a049363da5a845bf7e67dbe4c67f349998ab0c08ec3e8f7ca97b8f6ada2247f12091f672914b4334c175e681226d7f6f46b64f433067a699805a33cd1eb5e8ec3efdb0142005f4c6dd71a24cec772fc9c973b3364cb6d0342a7dc2c5d1cb6d5089b313ef7ae3e3773c9725435928521b649eabfb41473f37ce0cede789c64118fef880d7db5c2bc53b3c3316295fcf824c32032eef411b032b7ad6737ac7a0f944952c4c790afab7b37bcd4effd31d29f8df060a392c3b7a8bee73e5da4f8829c01e222e24a01b48d65087a2a387794b3e10647414584a2850bdc26ea718450c394a7907a87057f16b4879aa129adcd26603f4f1bf3a294db8626a389538135ea7127b040abc6ce7b39b096a1f2f26d7dd86a377dba1d20f0aa9bc6041209315fb7b0d1781ce5a402c0eb61bc8e75ab766b4a4261984273db29c6e5094103315a448660a81c816e01730dfe2d62126b6004ab2a48182ea44bed1162d92b093a472bbbad315f6202d66dacd383ba54f24fa0f85ac8f226e1bced54845d903e1753dcc66b904ec7a824d3b82f990f8743d8f76f7da5951731d85b60fb1f111d06ba3d2f958a79abe9f35ec89d8f6b77a4afedc72c298ace74cb7777a2df05596496b9b672182c117f09be8edacdb59b0ca72212c28814297340bc288989786907c8212987002d13579823bfb4907349ecd15226c45c22687dfc458d4a4f35bac8e638b32cb783cce900d63ed0c27444cb303027df35fb4822e554f2a645d445f8afeee41b79862e066336577e769ff88fab29f438739f7a7824f404171dfa062d96b9b1bd230fa2919eaf6f0735a3cc264c52b63f2d3925a528d7d0e42e1cc45bf71b9f0c31383350cbeff3ad56bc006f12364258dee83ee223e625f23f76a62a1154e3848e919e1b22debf6d6bdb758be8f925c7c3a93b51e881d37c6959562756242a06f4a7518c1aaefa7c8a4dbb4defd3e54a6ad9ba400ac2bf80704b731b0325ba02fa33584a36cb0d4b012e2723503387deb03607f5c7ad6fe473cc524ffe7cdbe051301409f30d177dc51490f06a500378c7f398b3f790f3f7f45ce4f3d4f9c299c336661891399d1b3ea16f4c187bc8d3a8174f212213f7ba90e5ab0ec17d82b9be52da4b7786a8e49264e83277bc9f677e1dce09e24b16dc70f0203e2fd69012887c279890a973e805286ab96fd6042aca3303ea6b7bd92dcd11a8613202526cb087175eb1b17464b0ed705d975fc2128f8774f30c4642723e78fffd56a30843c27ac07be7b728d8f0e4fc45f1c574e91acbf2796c733967776fe4586dc412a7ab63a95cbf685cc97d922ec4a34fef3b6647e23e2f1e1da21be9cae1b00718282e29811a9a9c343bbb6b56eae13a854e1f2feac62ca5a1764b47a804a842c6e8cd4bb43250c430410065844ee88964f35c2d03b0338ded5124358798771650e85b7125d60c7b43d3a20dc9e69167cdc0af4afb9f93e1d0e01bb0a3461f3ed1a51cb17d72735a4a99c949ef82c7aad50c93d1c9b635ebf2f7bd83991fe6cd51deebb81b7fd85182cdea44d05e57c3a6d730aa8bf50f8ee5571c20c9692302046787298a794d977e944738863e011ccb125e773edd23314c13f411a09ab1a55769c8d5a780c26980e4080f25a780fc745611e18502349a791c96c87e996eb9196f56540ca3ed18f715d5fbf5be1e5e427349f359e220c35bec8369cb548ee38ca408493ec6bd4be7e9142611664785f01990c332289f5d85889c00c9c8d6bccede8c00cc2f131d5a3da444138a417581691e32fa93cc4011bf62d145e08009c1adc7812e78c7fe573807611ef07e2c7652458701745932f6bdd27e46e8b77969d65e70bc3dd0123e209fd1076375429482f8408c4eab7fca83e8b866195e22a09c07667348614f21f7a886c0ce31000cce8368615ab0a2df8b0c6c696bac438d39683c0393e6e832949328ab5f859bf669b2d3022c69974786b6d03a625027c4a1e2a4f86feb49ef30081fafde564080a8ab185a662505675b5691a2605c280d1caa3b967c7e1236a32ee0a67f0c8501277217f3515c92825a8462d34fcc1377140f97012269e6c30ac9877a57996a88cf643bb1934e72402c114da43b97c931b305d3d28bed54174d65fb55f79ec02e907dc1208d0071010041f7c846bebd6d983bf1c5316d4d4043b0b7a849e09606f3f2fb045f1487c9067e8b702063f754ed81b463c753bc68078cc24c3cd17af0bf16a36d3b57dd9bdc03c594260d685c762347ffff95e01c05239da945856f1542a3c2a1e6a58ce489f89bd35a47c59f6a88289f82be6f689f3825c66eafd13f377c2b1516f56d03f3f0ed01fb910dec053d30fd31536f5da2d15e03645699ce9392288ca16da229e080680a5a83f51b0563c5027e0eb41cd6e12fdbeab1dcfcaa8f51a5918c539de3610ca2f985bc372764ff8c29c3aa60fa74ab01c95347d63d03e4090b4f6a93144988bf790dcce2d8d92e974201510e49a8148bc36bba68f834363d1099c0e719274f17dafc9929d9310ca9d28ac83504edbf5eb0621e42b299aace4841dbcaf4a46f37b40cfc0428018c7ca58d05efb4b2d071e6d79d5e54bfc8e4ef327d188467144dcef6db9f6683b1a0056afdf151d5648c9bbb6a3aabdbed2b89c415c20df10649ed763bdb32bddb5f3a376b4dbc2d6f94decad789175b69a8884e4593bb3583fabca589d7b5282018cc5e4ebfd2300c61236ba9ff2dbe062a1bab1a0ce3994d441901f39dace918441731e2f6760f5f3aaf8b4b6eceabef5faa11b63e001d28ff5d314753d38f77cbf00e64e61cdee5a682acce087bc4f580c79f6a688381450d3f723a000566a867cc044feb7cac1d666ab1bf6b56166823310a7791f70f6cbf32b6ef7dd72bd42dc677b97cfed4dd655d622b9f6bf1bc2bff5269a4a5500eabddd6b9b7e3f3832bc39e173714ce818b833103f01b7e4d5ccaa79456dac807847844b51c6cb65f1c678d0e2494b1332654f3c2b45f5fd3072e77bd77136e361870ab3e362cd610531ec3af7b903ffb61c514505296b8e1840eeb083f644d1b900ca2414ddca3627704977e32e6de2cd6a4350b3285ca74ca9248ec701018060ce94ea28bf8e39ba06b4797d2bcc8e52d70a69036872ededd60cc52597ff71a6c47e8066319fa5816705290d0165317e9256e26ad0798f9d80b6528773353461af0b433b1e9ad3db6ec266955a734ddf1670f5eb5df532eb19eeb0aa250bd2f24e67cdbfb98423f9128def42a1559e645e148015ac5105f4a0bf4e189cc1471d0cd8051f7de5bca86bcd8827551093e38ad79263bfd0cf2aead4ff3101870f23141472edad81af14f12f9321464ce2599ba120e9fb23f170d362de750cdffbfbe0572ad2811979019720f936d81d3f2ed2b114483580dfea12d465baeca69a095bacbc53e3c64a4f1d2d6325ecba0d84f4c69e280fcaec4f0e0f4a30e8d898e23783591d7ecc12744c2f67f8c41013f6f2b822860cde424e01274aed426482da71a2489d48e367e08093c9760934c58e92c89fc39ed5e88a85b1919154271256829852be41102d2e808d3018a83b1c5de448dbcc5dffecf6f61c4ee3f38a8fd3b22ff898ee1df16e26aeb623bb8788cfbb2f3e5798fbe12eb3de2e66c9ec5e39b6df2d8e7732a39974b7050dee0e83b4aba579e2662a22c81cad6bd21b88d8d5a49cdfa04f22223f288666fdd45cf75606176df4dd7e938b526a28f45e0eff27fe64bdd465a01aeadfc90ca72ed1b045115ad94ce9ca21809c5a48ae01268a2e3556dd0a4930e4ccfc6cb55b0c2080260c418daf9a87acdbfe164fd50190757618da596afbf0a877a60a0454c499adfdd43ec5ec18fe80592c47b155f9c9233f68aac1cc142aec6f60fc3de14d54aa4d5be3ba356750b453e44aca5fd05e2149d4d813d54ae3e6cc4f6f60e9a09961e429698e19414ffb23e853367e40830c50336bf51de92382026449d0499f814f073df99583eaac87bc79832500adde2f85ff70ce0074c80572022e2481088b42c7dcf2757c1fcfad032a8d355d395562010970fcfe39a117164dc267429156f61e0e8c5738256f9420011170401344a675884459786b6534956dd346551d39f20ee8cbc02f08927294469e5b394f7591644fc2bb77749a43830b2b5a3402091363891f8fc3c3a5d16a05b7924a8002528ba660e189d406eee77f7896eabbeaf2c67c80cef2a7df1e69faf719d2809e0dc3f68d261825356c89f7947e6c160e26a9985ff56a0d72b7cfcffa60921bfbf22624e00907f5f91f9a387659012a9e8363cf50362555bb4c45cc7ca26db80a514087453f4e708d183ca7c8fa8aceced4744ded7cb2620925ca3e237d2b2d1f772f86fc5b71961dc494e56601afc311a3cb8cf6ef49a366f1867e94715d326d63948ffb8eb3d50a5f5ecc0c66be7f239da655bc2edcca793ea4c842b43d4634782a836fcbfcad2bf4e449de737c27e98d86448444c7459c86189890191e1410774b2bdbe10155a92a41c344fff7aa370b86e3d9d56bad8ea7784ae63613025cfdf02667b3ddc955fb1d64c343ef6b08063d634a5dd23ddc24d98ffe1a464b9cb9d15ee0e27ede5909edfb6d0fc748a5c9c8034efea8ab4e95dff81020b1ac02edd56de2f5f629630d821681ea56450f21ab11e754265061dac9e004dafc5f9829b8161935f68b7f913a22feb7484d217a03f50606421db51b0915b78bd028968d5a37d96173c1470226ab08976e63ace0af05ac13383bfede45d69cc515272545f88be840ede3832f50290e5703ba8b3ca603813695fa3f4c30e705a1a992184a8a1cc1d517f6cc0c7c896eb9071a33786943a474214b9ff19642a9f70cb389b2cc428ba2a7e4a3394503f37c3b818900145be6c1f1888bfe2947f49bde33b96d40f41fc5bb85eca2378d2f1215e73979f891093b9ce74a413d93adb3832fccb13957ef3dba9843dca714ca41315b021b4aab86a95182b089c3549de70be18434c9460b6f610b286d958c5055483524c9690d8ae0f0304ddd7936e52155cebebe4d93128c267cd7d0ae034bf0909ddd756e17246fe66c42f4faa9a9a711f0aa47cbc5929f2be44134ef7b1628153817f0e018f483bf1359c74316f0ea649f24ea3aab38d0681d9db984fb1a123a625b89a2e39b80bf0cbb406e0786632104def597bbe6be9c1f4292b9d1e3aaeb6f67bb6b10642dac59b17235306a299d73b44aab285629545680a4a504985ed327ce09c769aec597f684c031985504bae1aea435265029c68d14fe2c02815bc6b1664e2d53f53f4d03df2f8f172ab849870048602c3d9e58b848be1052a48f0973d1d95bc9b8d56e1b63d0195040677e768753630b3a66d3b745175af6b7187a81d275ab869afe0c44282ae33f43a57e7e1749f7dfa10b3a76b6e1ea9ff16919986ba4f7eb3423b55b4a8caa0409b18779ec2d978700365750c7f1974d7e9051d38048f9aa2f36941b47b22d22e644851a11a925030955f845bf9a1b220809b55c85453afbaec8055fe06d27806f7d36e1a9f507309c02d8e4f5a5ac2458719e8b9ff2b1b33e087e293cee457fa4538af5b818cf6786006102b5d21ecea72b727994e81ea4de620c58da93fea4ab66efa10ee5262ae3d8c2767295eb3f231524964cca8ef25045b4c16c2c0dda3161221d27ea0fb2a1638f40726c7139a5be5fd16dbe12c2cf4d5251fdfb4f01b2b95324ed338849568022417c8589cd0323e10ecf2a4e0406182f0c061d37a6b2e7653463b35829d126a54d37308833f8565b3b91ac63acbd33b0a57ebd0a9bea21650d87e70c78873d272c5958e185d40604a8b5fe2c97f245de8edf9f8b3a7d64e8ac9a848d1b94fa485c039b6b27d4a5a2aae0e1b942c13671e8d73cda398ca7ca1870b81ee528f2a8391c5b69a208016974cb2ba9c72cf9b7f71443444f8b0f1e6eb952fe07d687230b7dc4a70143ca71b020b2322e23701d549d6010a4204cd2a2194ced2c538766ca350dbe720a43f9b77be1d549976472ce2022023f9e6d48b83144153f43f47e25c2ae5bdd506dcf5195121032827a27d894054afba7c44312022da3c00328c9df04baf97390ec8ffcbe8946f9fc1d2420421c7a9e570d08f5a305f6f4a4208eea8043efbf047f6b9c2fad5c624a01138bbf27a8fc9f617aff83ba1f134128dcff762f978e871ec67ad46c0e15733fcb783e8de7da43eb3ad11fe935f3ba8b55e6d04788601eb2069e61571b3ef3714463b4e53cbab433a7c49a3fd7b54b67ed807ebc77cccf98551ace6e4f24f0bf93777ae622de1551f77a6c5b99236ce99e09e7fe3f16f6927be330b2cd77f3432f273c22fe5080a4beccbf5055dfb771570f010259382847fe9b2076b5ca1d6d5ba068107612fcdda6ca82868ab674529eedbb9a482a7db2b2ecc3d47e49468f1288a6584d02213e546ea830323ace3145cfe671b9e63799354734eb02f53fe7996ac3c71e394269e180a7d8a8b5f9c7e9574f51ffcffa17ac863586004243a792f3e2eab470992d4f54d6819c8af35b93d7ea6118e13d456766a791cd7556f25afa666ec9d95a082f01e5db90d476f1889b5dc5aedbf73c38dcd0b0016a987d12219fd9a9e99c78cabe17666f55a84a1e174059b62c3ed2adb556a2b8c723ad93cff6dc4796ebcc16b12cb26fa8c52b4ffd8bafbc50e7eba3dc1ae9c80b3fb4e85d7044bc5bf0e9b267f956c2f0d36f211c9a818092b8869f08ed66a23b03239d564a2a79b856160ca4d162e6cfc149a7a2de5fa621e44ed75c37490637d07b1d4d54124f3a6390cf2fac76280599af7e2649b2ad3fac758ca4af59fee5c45ccec1ba775d501d908611f28f9242f8c5e59d15121fc891808bba46c8a7c8200ee733c45b44371dc1a55ea4dd427d8976ed59db29819cba187ca84c89ab68f5f8a05db7a1cc795854d262fb5854a4d777d5f2895ea88df291c6169c0df20972203e5484059c73950f72058f3e1899e408628d611d3716e671dadcd890ff82ace36215cc404c36a0510f1492ba54031583f33859c714f73ac7a99fbcb7ef1f01fc73757dec8b58c8ad19117842fff82c4964f9dd633d40e8b3e55a85c782e687027e296f19470b204464c0a464d00251b9bf086c0be101128d2b75532ab3329878dbd99aea684d5cc6ab2d5ac1dfcedc54f4ec557991f66adadc94825aa980f9aebaa18dc064d896e049d6be3eeced1c271b0418940baa37d80b2f54b098bdc422e7c1109638f3a9d6586d7ab26796b3aae003098f2a048ffd89f04cc6ec99dd72436e3c1acd1dee26632adfd4a982d2b7846d9368b0d2fba742ab27220fcf2e6fd204a628404a24e0d362724d68ee202cef6cb636b21a9cdf55f3d3ee8ae2f48fd1ae92e3e59d5e01f38ebe9e0729d9f0278979873380766bd7fa9c9aaccb95b7b5a02d9b725813077ba6d4bba84c092c1d4cca989c6632eed69ef99679edc00fff5a9373dbfc7cb2a537e7256e33c98fe305db740ea7e39730423319f97797a3cce2c5a032a6f21d0b5d20059823b3ec3e2ea3158dbdf1ccdc91dbcce71960a43233504c6201fdc8863189c10bb227bf1fd6f805110157032107f4e05681c158645466f56b65f25ee2714ce3b10e6d1355bd8a25866a55021b1ff596eb850e414cdfc13185794e46c299604f70a7ccd41534b3af739a57d48b20426c7925bc6aac99d936d6c5947addef6ccebb01ea2696098716afab1440e36a8b53a91e52c70241001b9432aac869d80f237c16aadfc03edaacea525a769d049c8d2e38c889d08aa1f14f8531cd3d2799510d711af89a87c308a0711e044f42c0fa07f5440190f9b98354df122f644ffe01d598efb30a2e8c1e83890b21accb88e9ac4f4482f2ac77caf484f56ea2b3e06e4370eadd0786d717ea6bfe7914f41f87bc3396ca7f774247a290ffd16bd9d32db67a16bf609682df059090e46b033dd92b6d25849291b24ac2d2ad7e3bb2afc15f0067b6299f0ab394046615371d440387aa2d6f8d174c646177b6c01a984421828bb27f32c4ebde2616179faa345060c7d30788108c3cc74fb54c8fa68465a0bb9a2cd462874e2ccd49d5a5690229db74788cb8fea0a5e4cfb2be801412fefe6ac585078de84aa8d1083fb293560b09174263e6b89f994e81acff7cbe1ea6710d490fc975311e232b2e183e5dea021db8addb7aef49bd90895f0d0d1adc6ac706b9d9583d46c84c1a2bae2e56e0c7fba4babf4b02ffefd512d982a0d01fb774d61272a588c64101839d8f2aee0b7e19e6219bd24a240a3ae1ea001c4296f5f1dca31feac4be073a2e87535bab39e3d79e4044566b027f6908f3182793aace07e7981ba8a101519d1d58e1ea58117a73c521bf21f5da35ab363cc6e70939664f40ae70adc20543fefcd174462ced0519851e31842f20d0d8eb112322adc965d1763cf47d0427ad98a2b20bea11571fe88e14ad3a325690b246b19dc90ceea5904fbd509872070b90f3d129cf29c820b11ac30a1a9c7cd64dbe4faa5eef29e12d668f6721a9838259076fd6b06ec6b3b3c420f27017effffdd3b9534e4888728ed4121f3f2c3f68ad8e9661e8189b106a24104302a4cb0c79e18cfa4ec42071add93c1885b13040654760b7642aa42da12b5308950cde9f5029654b79c204a76fbcfd9e03897b3778d149c7ac1c1c6bdcee73ebd9a9e093550a6e4da1f8b618c5d73887ca93145ff297bc8a743de884a0ae2cf5cada3b252656f115a2efd199cd46c0b854ad38be3a207b33ed2f333423fa00bf5c997a016ee86da74205742353191b2efeb55d816d346875735b280b484de680eaa14369055528168df4b95ed0c76ca50671e4d10c66aa0aab32515bcb04ca4a26682b3a4159cb89d54a4c28567a82585313c55a4facd6ca4e94fd51119565f18e25dcf09813085b5ffc4382cb99f580bf3ae2dc7b9f93d4240792eace78d58c2c52bd683e3b4ef242f9fa86bc56df10bde00defb20b86bfee28c5417cdeece3a291c511ff501fbf521f41930a209b807269977f84afe00a2954aab143ae3755e5555bde4fff41e61f9300e667c2c93499fd810a05c4afba9a1b9efdbb754b7fd6bcdb9372b51586d344932cf73dc3b5a4dc949a55d561170e3792e537413daa953c856dd9a52f8d3c443dbbaf251e56a2e5612270931860be5f6d3bff6a9e31274e339e3215b336d241ce11c3b353f78e302c37db1ae07a96a9c76bcfd59a845dcd0c409ec3bb5a74115e6d62e4ffc919acc2af86bd01d632ebd0df7eff83a80cd632bde7f098fba05f0a09d2f9e6dc9f10ce8426d71e14b0a39c599cb4ff6dd301b9df644d8e094831ee0f409a04f0ed00272599e4955bc35615409641358c2e08e7b37936b7d7d92f42df4fd7875768f342c8e707ff2cdda85bae53eb08400a1ac447219d9fdb84a9e15752622e226c5701cd36761a95fbf9081d553052476dab034e4f8b270d487ac58bcf5af481d4cef37e05e32a695b32b57f7476a0f84754963bab27708baa8f9e56a3d634b04d839d3acb3b87e3766b28f765a61d0ee2103528a0645701b190de2734b104a2a5cd3f41640834cffa6d93e0bd2c996c64792202ce6476a798badd8eda2b66106370dfbe1c41c166f207755256306598a27b4aff0afc9801efbe7d05797245efd7ea4bdefe61392884bb2e2e6c97bf4c33acae06b2466c2066a988615d303e571427c8ae6854021253ca437dfbd8f8cafe488c9c7939046a615c0cedede2cf0f67eb8d0f6dc34cecca442872b61906d638970beb906437330eb52e8935b4354da7ba684e858de3255aa3007eed23d1e74dc138ff54ca13bb581eba38deb74c9e2c850c36378c99a44f180ea8f068084ffa80c09ec4e897ac08e05c96a37fdf16cc3f61aa11a1f3e31860c08d242b0da89d65a9af6c8efa6b1b37fed5d00cc09c5736d85104aada9aba7353995d6c228154628121303a0348f560cb2879c2821db62ccb07f2b26854f6a301cede91aede16aa6a97b8828508ceb3250d8edb8015af816df5f4813dfbedf0f03b7f3cbbe2c788e6b79c7d674b3c96336d809422793b720d81f48724c30c0015d123629ea9d0b2946af8a7db1d1374b1d8378673149d98a76141cff9c77c32e5f1303ef281c03ff7721ed3d1231e83f8b615049a611e34a3692843297456d20726638b30e544a988a147cba277e224b89e599518d6e5dcde00191bb252acbdfe71f2098c965382ec23dc25db3054e03218f3f380c8dbef861a32b2634646adeea60659f0a7940eca8fb7859875f1422806c87292bdc6b7d90dc0b6796a75c8dbc41c6273b657aebdc03d78105b56062ee4101bd880ef06f76a73f514ea12d4b3ff5ed006903cfd6e5bc0e06d7228cf25e9c73cd4116fb83546a3ec41d5179c927be22806ef3d1ca98a4d6bfca3c6b08d3ef6228ab669546028b56397a0436c5f2d3ad76db35ca594535d2b652c7df7cc5d79a78bde592e71e8810a1b4ada2479295e084458ba22a89ddd943bb0403a751f5ea7aa2de04c31900ecaa0cdd889f37c759e84712121c54a8794319d08384709766233bc358e9feacf85136974c2c63c0e79442555bae3020034d02ad9ba8c4ceb60023a409fc43d359237d991e6682df5b1e5904ce6ea12f77264dd03082691cd92728224248383634cd090539416c931a5ab711975f2f8c49145fed05ca2b52d144b7f6d4d291ba33ebedadbb62f8c0658891265e2827a8ce6c6d6897ea27b99f9a08eba8188df8f70a00ecea0d0c25e10d98e72b72393d9140d5374b8290f334afa2296d700cbd05935210c896570e69c427f3d1134a2a2720079ea3ada0a432d659e388c11f37783d76fb212a68aba31c63aeae0922e4d2e123175eb279cdbe080136d6a2e23b289fe1af6065c9a8a11cd4ea6f5ac7afa453d64a212eedcb0c80b037028e22da12ac2df294b03bcb197e550551acc4ed345686844367d2651c9466802cdc18c0c3a66e90bdf19086d85788d94f589ac3284132bb8ff2a9098e523386ceddf7939e56e18cb372656fc4627223437db4083d7d53cfb0f024629fad3e5be030fbca6b4d6cfa61180ec1086da4bc5b120f5df5549ee8c050c434b738252ce80d312320f1fffda8ad3568aadc96e85b07e3f3193669087c5ba2880bbda1ab4650714689d1962b1b7caadcdb24f5eee04e05afae32fe358072281aaeab11756ab50ddd3e9341b574996e44e439e5addcaadc13f0ef39d56922b512a18d2e4a34755faa988cf264ee0144c7f59e90a700c166753724890f0421b8a2ca23418d45bbef42b07b205e9b77b8a049d5cbcccb8e69ed94b6b9557ddcb399d426ebb06ff55e7c2d87b22a6bb7771d64e61d364a700db59fa27213a8ca863bebfbaa7b131452c6382deac7ac8c63f76210292ea4c9e73148473a2810ef53b2a8c741b7e24c18727db9ac34aa66b96d95fb3ae24297360f6f304b3a4c78c3c1bc01fbdfa2eceaaa092173d3ce618a34a3cf9f5a39c00f7480701ad9ea96c564c2f0e5bbc1cf249ddcc6a590c8e3b9ddf340a92404397d3bfe18363dc74b532d137be7f81ae4d3014eff572395d84442f143e015c7727f9f268b330b68c35a03f3c2a522857fadb753371bb1687c258f4770d817401fa24bdc01b855a5d7ea6d5a214b062669cde99585eaae5188fbbc70ea4a8471136f8701ccf68e783bf4bdc5eddffa8f0f4a6208f2e0b8f142b65b97aedb391c21dd0b9133b62f9ce3b9642ff8ef5b1dc1e864b513bf7f5654151148357303fd39d1487aca3020824e5fe2f4eaba3022691e8d3fa9f559cb582c368c1d337ab154971159de95a23ea83c6730778f86047f28d561f99fba54829fcf990f4ec813d95baa4ce5ff09d27c1b978440777563ca38df5d56d67d1a813fcdb98a20ed8c6691539747f48c60d5933c33aba98c6ef391d9b566e0add4bb6ab1e38033b87591ad512071c0bdb78cfa2799e41ef71471a756de3e245d58ef45008621d9585a0ad65bb898ecdc26a5701c90beeb9ddfbd058989301035cbd9fd88e3c7f15e387b9e99135c85fc56ff5121b08167a5493c84dc933a19ec81dc73066d4bf60aaa031eacf38f8e56f61aad2a9b94510863c37f1bdaaa1d39df13c7de5e4cfbac15f3661f225acf2a1ab5ad93edeaebe49e0b461d150e4e400e63350ca589442075f805366c7e01d99e8cce281ac5a7ce42791928bf60afdd8f716024f6d0f1fcf23b776f3ebdfa9055f9c89cc199b299c803846c5bc53034fa178c90ee7359472b95deef1638df825bc3532965105a84cbede7d1930aa76102a9a621fe65aa2e2a642bbf3aaf78c789a3c7ff002eac2a0ddb2ea19b09adf24eac90866040f20034a80d3ed1f200646e2142692dcd6e518990013de86200d0de0a5c5e860608db959cc85a704ba4814f60de236f871e0bdca9ae7d84a49ad2c7638dfc3fe86a99195fac68b67d2c10107d39663c13c2bf2720ad59231783d9e0a4eb4eddaa6b3b0e993e0e3cc74f12882ecd77c42800f92eb6ae34c4b671c0b7b7740dbc823da94b3edf15fa448a4a9a095b5e107fb5ebf0e26354a8323c50fefb5944c4836319d676f2d6ce43d9239f562c9a25958a771fda5b0d6b79d2efa9092d5655de06a25eb7b5ce1706a6e7c4e95f052c6d36616f26936effa03819881cbde9b35fb131f871c5b87ac6896b67a58b36e78ae9d0673f85fb55576592f2479050597e112c3a52e0a69a19e60dcebbf306f192ede843ceedb8ab71a576186065e5111f2eebd192e263d95ba0e84bc6782a688da58aa5812de2ec61bae1eea6ddb76410d27132df09907132165a91a4b397e82aa53b9ba4f0ad91772275a06df6f62904b67fdbf8e9231bbe29accf3a3005129cccb13d54b7581f05367630a42e08db58aec6da257cc0cdee89b2cdd0e44bea6fee485656f3fcec9613f99d86745f510191aaa76cbc23a5fe78e69114c728454ec33dbd96f3b469e2c5e8cbca82ce2a8e27ce9d767b14c92a31c8bf5c5e35a43a06bc5786b3f9588fb8bc0d86c31e4a21008cf54f9396ee4e60d18bc37269aa6294e403ac3dcb6fd3584c088b2a2cd608b3db23efb0db8ed87b6c6e1dfeffda5d50c2163261f393efab0dd310a4277cf7fdb5921773f2a2171784483b71dee3e227f6274be8dbf5650e9acfc38ba0eb526d1067eb121bd0d12a7c4758fa949531c44c3508dd9fc96172a3ef6786ff4e610479c7f99f3f8f32779e644804bb89ec556ff6921d125c5cf43263ae0a2c676b9fdbb100360076ccd5dac451e5459530bcc994a12e0271d6763848bf1d8b12c37767694030676bdd1503bfa6715a918b68ceacdda907a8d52fd8e9326e2d0d2672258a68dc2d7feff9a64fd8b214c3d9683f1cf568991306ad2c76ec22704d92815aec3408a053f0841411a95b9afb657cd76f04c76fb022d84bd395f2144451846c26356900e846c61b65eb258e97cba10759503b2c4d564209842f07c3a1623f1eef658dbbfd8b3be6fb17bd9337a609f0ad46af47c7537bd6624a2909718082f29945d28e0b55be04564088076426205736ecba45d1af9f98b588433888e1a0035fc8755d108f4a0b5445e39969090a00891951473511d65571e751e671947258308d12357939170a18288dc25ab08245d97f08d143c7d16d7ce5800d392e0e61f348f6321341848d7681858e835b699891f3497ebd6aa7bedd204d4763b4780723c50857f9aa8413c613016f44c95371f9ba1c36573b5e0ff84498dbe19d1017d04359f34edf0919a8619b38115923c8afddfc394297a06e3c2faaf0d9dec32516c85b8a9b9ae3a0164387af576d0f6c22c3c8bc286618236b00b17a24c047be01f9734597e0f5cee7e8b83125d9de6a0828137a099e478d1a1ee50182dd61570c17bb5d86db76720994b58ae02c47dfb804d6b7bbc2390743ed76220e725003c4b652028e4ce6eafa8244f2b3960a306602c2ca645611b88e581eb9584312a905074ab771971eb93e203858188bb56431dcbeefb230416985bf78cba52cce0bec39879293ccc5963119dd53931269e4fe111df62779db97dc46db003af680cbb54e695c4364cb083eea7607d047d8524733eac892e9b15ba65cc2c50229118903baee7462f591237a6da15bef136cc76a5a99363a489cfca40480b9c5d438d89af3f8c19278dc2cd0c7d1a7f3a75df8f7c555c050afe80453a78c424ca93031e5629bf19edee9de3949715f60138f1da5734b2bea038d676d545d2074431f705bfd39de65a1ef10e492fb28e9729b6fa3c8fe8d7b22023141972239086f855d416708e02196c0e128e3c01c1a6bc8d265f12ba051d03fea91ab1d2ab6a8376810ea9e060b9e69b421f3283733efd18c62e6f1571ea7ee678f7b50d4341a9a6faa29eeb0e69a4d36313c469e63dc6c6ba60cc1ed04e1728f3f9997c6b8d3552f6616defd99453d8b23403eedba0bc672f30ef5e986ff6a1f0989eea68c449a7abcbe81d52329eabc083ae80054b0d999f24ca227085a5a97307ac9cce23b7093b446fdd97f45a92632c791463fb6b18b5b27ea93d76a8e19256575181b7b42d2fb8b03581484ce44c3cff597c1c71535bfd99e3eb4f39da1ef4ab9c586224c69b2828840375f57afc5922523141321e202fb6041001a0b56ccc036eb205923fc225c0da5b940b7cd312c46b09bfe3a781cd3cd44c87ae8f68be000adc86dccd7ca39aef52a1ef2aabcd73a07ead8735d183ee4b13b1f075c8f7a4b9696f2ab8087d1c4083c43f70164402dc9e020aadc5555c40d45da5034b3b236b48bb92766518dbb179281286d019ee73b6b5045178795d5c33a1eb5f34a0dfb53ab053db4bec1310df806c66fe099d65efa9f5d40611714b8394c1418e000590b117b4197e8f80ebf5edde9b6c29a54c322519d2045e05490547ac4c23c0e771500ff64cccb62154923be280c12e6a0d99d252d204359062a5a49ce0880e468c90e2871778122880a50844f881a244871b30e987fd3afdf26390cdbac6a358f99f579cfe4173a8f476a0363d19fa3ac7a601065bfad5dc9c93636c25ac91cf24314ee93ea98c2beebd9a71c6e9d33d46193dc6e87189a5925229a54f97ee2e9d0a9592763be0adcebdc4dcfad39f52cf9c274b9f4764e7440bf4eaaadccfc7aa963369b4a9d66377c7b9650a7686f1bdcb005fe7a5ee76f6f66e29d14a1ae3eef3679c3e2184104209a1c378c49c7535e79cee51468f317ab432c5ef74e93ee70e789b9d230c30ecfa2c73afb1bb63d322ee32a61f523aa5f4e9d2dda5c7a06394524a8fe9f13d638894dd7c6b47a59cd3dda3841042082184d309066bd8ecfafdeb9252daf5cf2e06beb429bcb4b28468b9306bcff6cadf61d62b8f892fa5a4925229dd474a29a1c62379b2a332974f5b103dfa7cc85363aa3bb3471ff77c4e9eeb2c397ae4c8ccccec1caff8c7e8b516e396ee76ef6e668628f78fdcccdc168391eeee156231527e9d754d949e4f4b253e0004b303def9b3d499269f27a65f522d2793ae6952f6ca21ed628c18849a7c9c9ed33fe8c2d68fbdb0e581a5ebe3b10502a20b5b1fe8b99f8c96078e2084106a7e82feca45c418638cfc3d3d3d3bf2b6078347bbb793a5bbbb3beef45111a9226efc3dc6672dc79d99739a99f965a0397dc6957f28a533dc965dd37984dcc3634fd52b7feab94caf3c5564eb7fd90f0cdcf03858081b80df3ffbe15dd9f4e349155908bd52e99e0e4d096c40badd852d1b8a80bc3c7bd09d30763d7bb5572d48adc0ead097f7fb8b7dd75c27184cf2779d78f8a538517a2f1d87a13899ae99d0a513972916d8f97cbf8f994c6a0596eff74c4fa0a961e37e7c3f16c234240cb18a2a5a3610ddefa30d4337beea0416c234bc1779a57be6a70cf0dcf91fd3af9e578d90eccd9fde173f674efe79e23de40fe63d608cf32376274ccc63197d0c667a80ca757161cb034b2e163339e44231a889005d1f3e3dbf7ce97dfca383afd78f12e6b5e79797d5db89577bfa9d3c7e1adfafe6e9548ffe977954dea9535fab9e4e7c7935afbd8f1a03e48d1e0b39e9c0ea7cac8bf98913b198cdccda8fbbb58337a65b316b37df7698b6a2dad73aecb1dad9ce7ba6d2eff892651df4ae3d83e27e7830be8c91476b8d0accdd75bef9f167f0e9ee8f75a42fb25ed9537ad18b5ef4a28f13e9f559a773a21a863da519fdec82216aa7d353ab7df61fcc6b57efc46f276a339af7edfc8b0f6aaf79d6fb32ecba3cea7d17a667160f085d015cd812b27485245d1e72610b07262e0603a3ffa7f7c2f363fee9f4ec338374beebe5cf7067f75d3ee94fff9dbef2a295f2cd5808d398307f7a7939cd7f79c189a7eee3201dede1c93e869d4ea787991fef37c3d5e1d776b0df8ab7f35fa0e4fb3761cfbce87bd5b731cee2c5fb32c0f3adf076fa9ebc8f218c57e7e9fdb58e8564d83d79df553d54af78fe44492fb34d83f0614daf5b76e7c3e46384c3935b800b5b38f874f3fcd0e46bfd5a6bb2a30e9e0f7a9fcfa9c1d7a6a64d0dbe3635f85a7fec743cde091b2846ec3f4fd33a8979dabf90ffed4c9de97d8c354482f939e78ba75d0fd3793c27cfaba84c6b4a14c449909f8bc1b0f7eff4e52ec8961b800b5b417c9a5c035cd80ad2743f7b797ef4a030de481f5ed8b99401ce58c7d7833cc8857c6847df93f742c61ef71f646a8d01963fe6711af50c847d7e7c789089bd0f63a16beccbc72e1d0ff33c21d8cf7bbcce7d68e740ae2ca867e4a7a2b0f5637c0927ffa0ae29e1657df11f0b5de9c91dbef675dc0708cb2bff877cecfb49afe4abba66f58cfc17a9fffa8881d8a7277a5e94d17d7c65f8e895bcfe1f83f13e7efc5fdbb63d84dbe374d7b950af867a25df35f6516d8447ef798cff205309ff79100dd7fbe89a171a035cfcf5f3c5cbffd1e3e22f19f89ee095d1c15b426751bd922fd3c1e85eb8e0ba24aadfbad97d9eea3e2672e5b760fa38165d0cf47ef02883f1befa2235e9498bcd6659dd484603a0082d111ca582d00a811622d9d30a01526b07a3d60eac960e575a3ab0361a9abdfade11075d2f6619594691b5ac228bb744d6dda0d8cf2f23dd8f9338696362b3ff9826a92fcf9bcf4aed51dceb3dc9bddaabb8440496fa81bd5a3a34e1d21a22c425680df9b95d3aa51437277c863cb5e6944257a4a0be18b9bcc829e6c216d04f2b87a6560e44e02cbbb095030f2e3f06354f82c9b8ccc119b6c1a9d70c4ec5c9bcccab7054c8d12b2440c0e0a840e9124754e0d384891302a84269e80728764004238e609104f1b8704fe96451240a2192183282105364e8c92189a2185cc9c1092601b872e98c4b9b705428015076e957a14b632e9d50ea949c4a05ee57a90b5b391855218c05dbd87664a35a477a6ecc852d233f37f5c4a4e9958d1abd2a410d2f9432a50fa5b8941ee9e1524a294d41c95059aa0696c6860d64c9e4f0c39d71610b044c4a489fef4c7740d845a9cb5217a62a7a92226b3e3d9c66f62e54ba187539ea92144980455bf37c21bce199cb4002f4d32e063c407347d66f70e6cbdc702ddce460c105ff1d4d4970062ac1196e09ee68628233f07af7346150555bcbb1a798e5b0a0a901637b6822f69f4c21c67ff35696f27a025188ffc9cbb980299c1e3e0c78c3c6cdf34fdbdc74006e8cefd1c480b1c6b0487d8e1c37396e707244a6161b334d1a0303c3434c3b7d57dcb40dccb1e223cc8bf7b90d19ffd968cc850be8dcfb4b78a384f79f9c428c77ff77f7be176e56368eb0fe1f4d0d1b4fb8c70526c3fb64dc12627409601af1653a1660749d0b9a8ebe2f3c084014e2739d0a49967b7f7e26026f34b3f8a8e826d5c2e34d0d377ba28deaa30b0feb8779ae83bdda54dd0e2e54e00cbc33ba1d5c8ce00cbc5eb783cb119c8117ebba6e07972438036f771f77b7eeeb9e0b6d70e3a7ba16dd572faadbe94b69daa6da483db1f05216ac186fce1b1f380381e00cbc5d82ba0c5956510a076fe3382227f151af6e68689496e00cbc4c5d7a4eb88dbd7bb6571d0c1efef4a9a7f3f2ee3152af22f6d2395c5118e6f388777a497c9e93f8a8e8a68509dcdcdc70e9e1e2c305884b50a534931293b4e37bb5ce210c3f6e43b8a237f66c43d813ae0fc11948549bd81d5c56b086be9f70e3dba2a2a25befc74dc00ba30d8c918fbeadb51eb18aaf75bb1ff77cdb4df28fd398a451c219fa51868716973efd0778cf7bb0672603e915f7f42a47afe2bb77d3abf81cff4513f119a9474bd76ce11b63fc62dcd18508cec0267006dee915c11978a3cd8e2e2c3803efc741377ef7c4680f0698a79060dd47d77081377a3c26bfb0a5848acb4bb1c8dfbdfa7fdcffaa31d654600fc2e2f3dcacd33a1abb1d794ff4afee6b2447f58abba926bb05b11f177111175d8f028582289870618c2b43bca816b35e29348428f8cfceb3ce421afe2e83b33150988c4fc69549b4afd77f95797285b5106b8dded7e246d91e0aa210e12a7eed32b88a1f637ce1bacd74d4db30fcb8ae79b0675c900f8de0d23401065530e2d307d201ae020713fef930e243d85afc24b476d90d1547cc952cae7c0d1e407e8a06d67b2573e0164fba666aef1a0fcfe31358ffbd8b2c268eb42cc5261f22434b8aa6182129f9145dd33732d1dc351ef3ddfbbc8b7d554046b55abdaf6b392f1e8434344cfbc86302cddaf1758c6a3c1cfb8a558d472cea15cacb3a78ab664b60bfe8e449d7603cdc8b45bd92812f256aa20098fb4c4fdac98381e3932805a2101f7386fe3fbb38c5bdc882284423f68b4e6efc2f3a894550f6645d93601c440cc6441431c5044cad13f85cd832814f0b09536a084a4a47472d24545a488ab6a1243a734f51b11ffd50d723c31b74d2495356ecf79752d409aa156ace39256d1a52483cd1523a74c27e198a9371f7eeb7ac85312cd6a5944acc3973522eb01f7767d7a8569945c16ec6104a99294f1a545a939c9eced7a1dfff510fc60afdf4db93eea16aadb5d65aeb75d148a912c584fdfe4a57adbaa67bf6a40142d31580511343ac2122b76560a1123720920236c5968039848191ad191781e81ebc22eb0f0caa3cb584fde26d78835b5e2a06961fd260354bbde0cb7a60504b2961fdfd6bb6006c0457aeeac25611a38b71969304c60afe3af2fb3fe9c158a1bd2471a6aa40256e40e44e5b931851398185ad2120b109831b91852d1210b9f5e7bab74840e4faa3a0f799fcdaab58c4720f573418562331eeb49d04c0cb4042b0ecc3186d609e8da88d659652db30736ae3e7ba39a3e570cce334b33026ba865bc47c57226dc3d9b8f8d47f75fbeb5d74acb4795e1713f32bba961f079a5ced3f4ebaf2593cea5f64c7f3828a7916311fbbaf91623829da4ce084657fd272b2f82f3f8388c55e7a1e9ff9b2c6d887ba1fb7935411ec77c34284213dd82baf458aae7b10d519102924ec80973fc6ad06cb0fb71a64366b4b09315af905df0a3da8c69fc065e619918e7480611fb6c3f3d6c1a3232855050603bf993bd5c576aacb4603736f34d87e9fe185080caafcb1541596524a293d7d77a7ff9e464fc1024c831f4b75b1b608d1b5cd1d5f2044a15a805350310dce3c955207f335daac549c420ea651551cfbe59be1c2782f40141803bde25fe5b86ad6ded7bc1d61fb1b76cdc9fbe0962d997c7ba55775442017402925ffcc39a5ec7cf8010876508e4048a887aec02fdffc153daeefeb337ff7e475ba2eb51dfed8d472ba1fa26e64e1d2877961a46cf6e8c1334545ad97c5378b0ef60c76dbe377a41e7307eee6d410d2a574664e11419bf3e632eac2e041bf7ef574e06dff0bdc5c9a38a4a688b01f0da7efb667d8e9bdf8a7579e7375df0c77d21860af6a8dd43b3d4ef48ca689293f46ffd4139436408a9110406045891eb440024e9870c2830d94384982a36590dbdd50a6f458c3c60dcb1b78844041931a18d1a464a4030e9e233b7092c41129504801018e8fc607202d1f6c68f5d0f4c47f7e8c0cb57e68d2f2e10677c196560f4f8c5252b0965a4149ad2022ad202053b478d0d2e201484b044d29295a3d2c69f5d0d3e2e10ae646362ad8a91edb68b0aa8e09f63e3862d89f3abe8620e0483e0fba41f27d5c89e36320ce3e4e2e943dcfa8c17efe73e5c97f7a05e47eb147ffe99a6b03d0c65e8f752ee4433d23df8b5c06c136d2d1cf8fdfc386e18c7d78017171ed7f4cc4c70fef3700e5fb803784baa6d26071b832f51f0fb91f23814c7de43d4e9f30cbdd093bfd2965adedf1f163c9663fffeb239b7d7cda90e38bf4def392a8be27d6da7d74d447998bbf5cfcf5e4bae0930c1f736a39dd637c72cc83e24c9013456e65832ab631b1fe17cdb7baac74a165669cbe6aca080bddb11355b13081050b164f311354dda9bbfc849dec5f8f4d5a67987075de557a3a9d4e9e0c978eeb75b0ab977493165ee758e733baa6d22bf92674cd04ad4017919f1f0f721bd5cbf7265ee42c47e24efc89135db9e4ca0f9c109c91ed061c0b38232ce058c01989b2fb38643e112f19192e888c4a8584ead6ca598f344a173343c89021ffb7326265e2cffd645ca27e4e996233a649046fc8a6b6b99090b468d9b2658ac99aac78014dd692b69953260b75c9200ef59c62cbfd1e026982ff62e989595f858a4343d80d1996997dba1ed6445b4b48827ded30ac5321cef4cf1e10d0f1e24aaf0517cc172e736957a39b1e0da462837323d3ab1b8e6b86ee30f8ad7c922cda5adc10678523c106053702ae0827c4fdc0f9c0f5c005713c7022e042c055e188703b703a704338202e070e04dc079c89c382050b5785abc205c165d9b27051b8281c144e069c118785c3c2cd8023dab2704bb820b8197033e0a27059b62c1c144e0a27858bc249e1a27051382c1c160e0b870317858bc261e182b0cccdc0f2671891e5ff645167b1f2321096df2fa7c0faddb2d8c82dd9b2d8bedc125b16cb77cb62e1e58fdc0c38281c969b22dc105c0cb826e0d2732e2efcaeebf26f8fc626fe27e37e978c0ba18d7f9cacd5bde8c1486334736d28b1dc397056b821b82338168b63714f3624b82adc109e747bc3411623479c861c314e12451b2a47ac4ba1984d4edc935adfaff753f57fe9eae59c152dbb620f083494494abd4a4ad20c3dbe486f0037091b9fa377026babd5e5f1ea6492d422b72cc51926d9d4ab991b3da9a424eb641237914dbac649db482d3d93e42a8dab2267ae77367292d0c4192b15091b15ce870bc2ddc0d9c001e13ac0d5c0d1c0f56c556c5d362e5bd396840d091b151b1367653bc26684ad08db149b141b11b6216c4b9b10b6206c40d8b66c3fe0aa6c3ed8a2d894b61e6c3cd876b069d974b04dc1e198cde95c155eda6cb03db1216d4f6c48441b92fdeaf6c45683df9ed8ac6c58dc2fa0daaea8b625623cb12014480439b19a90b353e06487d8248b6ae582091e38596d4b1cd50861e5ee7a5afaa474424a7a04944d4e4b43752eb97bb7b76f4fd8f6b8e4fa47245188c8f59feb40ae4d643593f7bd109b3411599995d78a4543d34cf1db8b3e42c49fd82970a2439c4b93e8c4b2c1c9892a272768b61c9c582d805cba4f1b7126ae98b051e5df16f2a156bef2a6f9355beade6a9075d635be19599fff4d29374acffe588e2193737a2fcc26d7878c88aec358e102b3c9f55e55e9d81551656763c99620982ed48cd849a38add325141dca4d0b49808d9103796c7950ab696b498d470e785ad254d5b9456104ad27bec560417bb1d21814e432e6ec0a04a0849a822c529d3a38c91b58a3e058aedaaa532b19cdb78298c70151f3e437677210c3677331781619b11167a2ed4c47474c5499308147fb628519982a4879a908e8a9c30d0d20b2aa8b0cd08cbd20807d4016c45702bb2cccc7cdd37202c4a46d52af2e47e367cd88106373c51d2411244c0a51b6c20e2870a1cb0c0c06fb5fdb0bf76bd506b1ae6014b1d2efc168eae0b2b52400185890b80280247008a60c52789072444b1048e540d2cac7c83ccabb86701081d70297a72041d7c400128c8220320b4200a24584790d08e18cd90439cc024d1b40b5b4ab6cc2160f7cb8e086140971222941031d15212a4dd1cc1e244ae6b3e28f37136462ccb300cbb3a188c615d3685d5e1bf5e890f1047f7b32cfb1df4b3e7b931d6ac3b61270f0927563a9b9b731baa1368a28e3bec15160caab05412acfc2fa393a6b35412ec1257f97f283f59fbd884b102eafbdbfb563cea792e4e0341e5d6b8b045c4ba18cda8025ab0f816cf73af53d75c2ba5945e3eeea9c3beb640752cba15d84b2731ce566d63555d63e95bebc28f6e4705f68357eea5700aed5dbb31c783c183fefc1dd4765fbdf65f3ad8fcb2d337a6637c9c5859b32ef4a840d7bcfc75a59e6c6a0a6b6b5aa8f91a369ac7f4fce773afda999fbd0f3e4f8a0a5b5f66aaae81d72f9c9dabb8e75445cacb5a8b68e8f66b8f7936a303b69f9f93e99a18fcb1f8d5b0b93abf5a9704e62f987f111fabdec75f16994da884ef1346b574341300d00033150000281008070443a14828cd1431583e14800b7b9e406e449908448118c7611405311c07114308310000438821c618860c29006111f9dc8780a656e5ff21ae22de225ac9f0fe0528dd3f2275a6c53f0f1600b50406bf8ccc3db722b2cfdf8128ba0fae9984e94ac7cfd7f2d8ece38236a35f49813e3cf60626564995efadd186602dcb2464c52fc740bf01bc44839c4d39966b96df844e46594b33c556ff565d9d46b2e26abd0ef34f44a1711e22ba8d1321cc802cfa656099c08946ace38ae29ae08fd10f455f4f9808c1c066bb99d9d4e4c1acbbb0ac11b2da26717252db1ba5b2586af585bec1ec61044a1409a0b526256069e0c01f6db6dcfd4d483b525869274e4ea8795360b4cb91b6e76f2ca065e14140a2b4dd95474ecb98bd83e7faa1df59bb2a4a891ea2c65c70e31e83a0412636a1743f9200b16e8ee8e69ec8c23e243d1feebeeaee6bec442649bbac217ff29c0a241afe5b90a97fa0e93a00b1ec9c1330dcf2aac01c4e463028da73cd00063362bdbfa30b24972ccf1f2c6d0c35c1ffe30ede59664696baf26e0b4006c187c9e938301c7133af33362d225fd5313562d8435966f393309786f5a6275b24f22275af9bfb02515bc1b7597707935f96e7dd4ac45d8fcbd11c8f239b48cb81c9fdbda984811174bfc8e5f4b2c964b58f2e9e4c4859fa74a3ec6df64352fe45cf98bc6002a5e901bdce8123ca32f2ee7dfa0813ef9147ce8f8515b57a50b149e55d7cba0446c50266668f7224d6b467f0b811d7dc521a980af4081d58a3ee33a266d93ebb69d92c5b20392b75626aa11046f87de66a3f16235ed830120efdeca07e731ae1ea3255daa280d0e5615ed6e5391c4cfd3ec4c1dd3ba0aedb519f600115142f23e8fe2dc187284a4be9f31e2096ac831e038b540c22f3b4ce345c136e2275d270195577b24e5b0e5cae9b08b4a4375c33111f0c0daa432413528613e812b41b5270e34b48ae76b0ca217d1b92f1d8b2cbc0d2f4dd981a3722d466e54d15731a58784a8809d7a5f17500b4555401f6ed493a99dfe2a9498acd390c1ef500e407f7113d12f4c5a295095df5ca484ceae26a7114bccdb4aa81ad71fce7f5d3bea3d1dc4f4c749af97b9acbf23052f7cb531bbdda7f866462b4b75939cc206b48ff35765c9eacfa8934c370f4ba3c5174b6fad38d0a31a232c2bc501b77f8879ac7d4620a5d51cdfa226385b499fd5cdd93cd9b463bd4c660e5c83efe50d309261b367bebe9918730903c461548380f09816ef6a74f7ae9a7154b5cb008e8700206b38c4611ac8e6bc05f5d8f8df53e9fd2a835f812873b472b369601a20f3a70505b8f8889432bea4cf0613140da1bc87cd206eb29dbb96afd4258e758999d1712ff89f07c0b03c75869cfe80e209fb81659a70b5386cb9dd4da70998175a210a3d05088cc61ac06c1efc3e39abeeb99ff67960338b1f949da98a6241298d9d4254ff02a36a72c256efdbeb08f8aa7240401fc6c0d62dce2c6f6f536079ff0185d1be04c13a88b7d6797ac8c4c9c57ea9bdd3c6be84ecc3313a14cd8a70867888910c477e168ec9bc70d57b3a248600b3a76a447c78f422fa4afc2333228508ce155319c33058caf884915bb8aec939281ccaaa561ee128334d980d4db48119803ead0510ca788428c51e0bb235903e560fe2ad003577c47f6bb4130adbec10f1ed461ae84d6eb8c4fba426dd5d2ac603413b4a12b768da496c13eac3d98ce802161712cce27dac4bd02cd1197c1fd4a0b7394903dec2dd5c38da76650f0496e2b5097273aa8c95c41852adb56b2d9c5f3c4a9bd23a740ef0438e2eb96421fa0900ab938c7fc3d032944b22f7841414f48bf3c9dbede6885e4506aa5a847b7214b12afdae6ce1f017627c2204d753feb2ba4d931560f32a3c46d800454c8943ea9837e49ee0961d441c505989ee2155733a5697dafbb39024eb1b7d8548b5ffe5064aa97c3a74f52c50501a6ba818f90c753707dd6d08b3d4d556008411444482d8f9ff8f1ce3cbbd282761f517d4545bf6f00c6ff0905614148fc01d373fae3c3d813c7bee9c23445b50a95091c10627992c5925274e38db3ea00c76f163755dd479c8c56a01bd36825768474735375d3b59819090277f8dbf5cde48f31275c972e3f65e1275a7fa361f40d6300f61d61ff64697cd10cd87c04a0bb122ba9ec321071af45b4530c45ab2543570194ee8418b82517a5467d447ada22652dd7426ab9f9b71cf57934d2345351f5e055a6d4a0b90f24d4a8077a79ea522d53af8a557072bc76156071c9c36bc6528ed47043c4ec82941d6f429919c1d386c946c081a98fda31772c788a5cbd25c1dec8834cc9d21313ade1073bdfd5013f07c03d412e2f25e35430ad4117f489427c6428b1238834d13f1e89883e8db9b664ed1d89dead1033a3334abf8b2f14a89208266c666e8444fc1e4bfeec630c2bd97b97919ea456c5907e220c885030c9c7b4376ab8f0b13a8bc855617c106760777cb67e5818391064101da6eca0fc79b2027a1fa4e447a93dc120aa23e118c820810240772631cccb61158f7b9f07a649db417e289126fce17ac4bab9916cfb4caf164f488c127f00bd5bd620e715f66867d67d12af534b7101cc1349febb4c9dca601bec4b7a1b04310c4f5c2b239307980cef9d0f00d3313ab235f861f6e86854c6ae82a7406049064594e85e5a28f8e304c2bdda75c4c328de4da0ea4e6a77b21fcd04a79ae1ec5b302a567dd79e83c2d0df88a29c7589740a51d933f1e8ea6d4ccec54dab96a8428f1a2e205f5c5edc4ad93611995d6f4b47f395676b86b2124ec2cfe195f9949d222ad37eb38dc7f17afa3a2da2f52f72f8001adddfbeccf29985399ce9037b953dad8377dd2c05eb54f68afc151772021ca43cc78aed4075e34069cd1e1025384e50afd14baf9fa7782a2d2f662de22a40f0be01d1c08489656f0ce82f916b86fffcb11c532cb54212f241839f65dc7c7505fabec92f7f5fd9aa2f1abd528910d3a34e432c7d9f38c4adf7818920219f95aa468865bf2502a5ad33b6e0825217351ac93d9dcf670745e35c7490136fe63d89166e56c07de0a4dedcacee514dd9376c99e0f41e2c47eda3429dc121895f2e6e05b1ec0f804554a872bb0aedccfb881d9203a21f1bac1dca91cbaa1dd7249b308fed8c61fb2db7a5e5abfb1005880af5baa1e2e45447df2a52559626b1de092bbfeb5463e5e368d5c84f853bbd7425d0b1b618076d97b60f8669096fb158fb7b35656475caad3301f82abaf0a5b578c48140dae281d70ac37714c1a3f8a2398417a07f7fc6802544946e5ec039c6c669aa6be256e25a2bfc40090fff81ab9b92c6bb4ef3e40281b990250651b7b2e03351cfa01f4d4c9e4a333eac8ac06f28f27fef88bdf2865b96d961fda88813402513f1450dfd8a5baf2e7e9ed4723b7068763a8a2984b3f89f1023d5accf7eb63fc6b975455040aadf0679099c1195610a399568ebf32e16c9466c7286219c8a451e33b513f59bbdfbe530b10494855400bcc8b6594c9491ec9e740e3ba7093001d140b84ee424dcbec0096faf44f605e33c0a3e330a352699eb53e58dbaa6ceceaeb95104c153515cb44219a1d3f934aa1db40cb860917001737ae2a438bbf5e6904c06821b9ec15ea0d0dd12cef14252f11cc236bb130a9c908452dca84a3f834154343e4dfb16a68ac040533c49f8b69f294afc6a9bc057d00366a29ab256659034735395374c9440a82acbe2091725d9cb70df83c0e70c1202cfa9380606133ff132a31c0f0f8b5cf007b7d649e31715c1d1f055e90c3001d919a18b6c5b9ea8b630e0fb68b8a1eb1c1ee079e42a801932d2ff7abc0f71550fc75e59cc692e6becae9f0621299f8d478e9f0fbce8b148613b2b0fefc5f55de6e660b6a7c8e08e308a5da7b80a1469b44d96216ca444d8800bca2ba6114609e0e1f6311e992d8137df0f5e359f4b35953d2899ab2512e3114b8e198337070df0c11c80676f45f1ae56bf569a57ee1440b08128f484b51c9d04a284c9fb270929dbacc277271abcaf9ecc8dabc5a1549ac46104f911ad24c4962ba169be254c1c7c280af46a4ff5bd8242bb1930c4387b1f602ea0a370744b8ed5696bced71b2fe1aedaccf57a88eaa03ab5d02360e9b890ce6e23bac6ac8dae8966a56ca4e7d69883023448a7ca3a3c01abc04580db54a65d1f9ffd0ba6b9930990526a101dca2ec533c53ade55f2a91ed0ba1d434fade32a0c27b6457661f75d259faa557c33e79367caeca7e5cbd62415b6c2d37d3218cc22a6362e57076d228782dc2483f159985d357645fc2cdb053918d1b55c81a2f66724fed5047c49b993736a8ee67612d55e76e1927e1b84e55f9b7c73436aefaebd74be1d70a6bfe9d525bec7cf6c2f4f2d2dc7fed6429e060e662fb6454145731c0ebbe5e27c009a5c3cdd440c4ac7b6fd26f619cb502efe9e89dd6e73e61e04bffb5f177fd3454cd3e9e59d94b2d113f30f59350fa677c3090c9a5f953217c3ef5899c213c2e5175a126c8e6f3739d59bfaecdd94aa44bebc738b13cd71f3724ee3cb93778a90b8cb7abd1d5c59a18cbcde0d616aae73efa6a6012eaf131f801dd6f1e4d00a31ad2cbf9a36cfc025d41420eafd484cdff6dea8a0bdb7f765f6578680d95d384ee3ce892982f84de3a84405b0216190932d2a64e48f38fe241d99d1bd205e1dea54e2d8456b27e18057a6ed33d51099bafe50dc8f43f9a87f3575170b2f62e990a9fa89b44b2f39fd06eb3f5025803574d4ea6d0722f50900a026857833c749977e04784456da2bc6212aa93c485ac22ba610abab788844a2d70c2155a97d9c644864de1d04418a725db21aa753429b4f300a5155fd2372125e321da29ada83a4a5bc630ab5b2ca432412bd46a634d4dbf0de3430eec5910cd4687ef9239820ba45d1a076b85cbbf87667613bd00cf90cfbc97a541459754bc70c3acb9011b89a5b06ba67cc2d5325204c8e3eef20a3ee7ec20ccde10f042848f88d4e61aaab9477760f7b5aad9b29376585dad68bc2abe7462dfce14326d4a5eb8541e8fae4626e96b453e80d136e7f665ef48703f5aa688093330e12d16ee04d14b44a832428a48060659b365a48de43f1ad6c28736bd35aac6bb1774c5e6c02d182962668050f0e2599b3e7cd5140df513816b1b2a103149f5bbb5220c36f9d2a7043f3b9f9a9b3c27241d3ea55dfca6028f43d442b930da2e7d24d8dc9ae810413e6e5816d1a204d914518440b1c795116d562257bbf9686668ea67b9244d05349dea790a49229864914a5c59ed50465ad5f1909c025edf5c6d15987e52a2bcbf00bb2cd9e84a3ebd552aeecc590f3f75957692c81ed0e8c410b638873937491af42f5581b2b40ff64d724a02e885e6b31546ac9cc7748ec6b7a10a739e53c241cbc2edb9d22f9a6a526da719297f990d48c0545912d36ab8abd562987645b30df8e287969e2a67418460d4ae3840f951b8a074fb7b80bff00e46b6dc0f9dca78533d680a7b2c822d09d8cd74118d107909212a69a5b321d4ec99fc2347a5277e567df3bd6d857a3e0f3caa21c43c3b2f62d9641d3b2c3ab3502ecca437904be978b83dee2bb1ca6a14ae67b9df88c99e438e44a8f49d6b8dc18e32f97fd7705f5eb00c74a8fad345c533807b9b2123562ffae016e1b69e004c943359dd06e81afaabf35a858091ab605de163bb720d2a0cf39a82f4a6495262ddfd04f66be64349e415450f3afa2397df4921f9e30bf768b5c49cf90ce7ba8869fa1f24c28ecc5b245f44b33581799b01080f5e0177e523e56233d6dd35d4cc09544329d5e9cf2bda8c36ae41d250cbd4948c5880098528395a1b8dac301c5ab6a87000e914c7a284a2c90e511a9e9a32e9cbf76b74419fa3d8e15f532a122e594b24e061880dd488022fa67a0b3d66002e52a44ea9387055158f745c8da14bffe41f5b1981234a10a3dc3ac130e4f23a066e5bd043d557dbb1cc5685c8b61c4cd9921898a96d338d7524cc36ba2f4324cc3dba64268be97145cd2b4325e1748e5ee1668f4ca8f0bf9d8e8591128fcec2c8c420df4e8d0daf71e5d2dcc57772c9fd59880a863ba663696ccd54c8dedd577caf951da3a41206fa7c280ef324d9ff0d71a70726c8f8c759d7f38e83c0e4c30dadd36d85d0378a8915be290f39b18e89f9a16af482ac33d23ce1519fe8b389dbbecea3cb84347bcd45f19c805a244e99958fcf497873de32a490182caf9a70368014c98ef58d1a77bb1b1a5e56983022918302d374e39be844a6e5a440002fb1c644d3f3c405f8a9d39748daa112ab6e7c8752596257716ba2401660e44dfc081267eb867a1f51d5f56810e458b7e3f838aa591e9f1c95f4a1ccc734b21d82307116ec1f575b104904c7f419b3e7a82880641f4c1e76bd1154378516dfa3413ec6b097a433f39b8378f23a493da5073b4d01e87234255542df5482e5f00a4fdec100f2d43465fd19a4cd66dc90d1e52d16d23c0a0e09ccf771a80b9467d38b4d4a35bd306128f5eec977c28a627e6d79000a0b3470eb11d3027a3134f628633f3acfc03162e2d4e4f51dab9cddc6ad14ba317ea4b923a5f5fc3500aaf01e0e0ce29c7f90de881004552d3fb9b6c0d46d46e6636780234944273f53cb17f61744b0d0a936004f0e753291f02fb6ead9d81c5e77836a8f0ad68e1a48c495c62c3ea1e7b5bd3568cc02db9ca05ae3c958989a11494384214a9f22c53419fff616cc8500da5e861a9d9ef617cf28b801b46d4a9961c2cd5a86504d6d6b1070570172f53784fc6a63c258f9ad220e09198d7d00c772c92147755a529d3f201dc3ad92023cfd3c8df3f9722672d48e5cc397f3e4b04b204dabcd5f149a5d0d971207847a9e65cfd2ed702d9dc3b11b59fb9bf7e9509a3dba0540afdfae65de8c645714aec070aeca6da36d38fe35bf68e319266b599035595277e4e0b0b52967a596feed2e39521b2225953bd1e47a74726c7cce6043948e8480b6b5d1ec01a81b97a625cf9a55b5075c32c3b75d13967cf7dd34c10feeabe736d24bbbc2ce5a741cb59d8e54f499119555a298399181e316d871b41230530dc98a7f2470425f5570696b5127981f87f39bdc4fa716e8b2c9d3e38f9950be5e265ca4d7df1f706a8f17dfe121891d679727275a5daaa9944410b8ac0939bfa14e20d47c5057af2669e4bcdf00284628214c6f5d8895b41609df9ae79b95fa41fcc31a07d65b84f77324e9b69d015d35a423fceabf5bf1207d5080e94d70b42a283917d2b18bc42741296ab14c8f2fcb40172f3959ae8c928279a7897b42e75e21b0b98cdc5aff3883e6e62dfa924d2634ee7b457c5449bf4793e2ce30fa544f6199344ef77757187855ba6ac6edb19d95791ea765cdad2465f56bd6e6b46103d3cad661584b673c9a4ce47d314133d89c2e5fd75c6fdda32ded7d22089cad6461e8baf9f05e3ccf22c9973a0353101d520b9bc65aeb8ab4fd3552ce35d3916165c3069f0e94de54b94e189ddc58400b265e48ae06862573c37d5c14a79680b99ad5dc7b1b0f576383bb5b0f16f089f93511ce92133104b0062ec2541fb76be49a5c86d48967f8b61e72631b3dd36dd6ebcbe468255d42185bb7c98e2f70a62b5de5c77fbc691823688f05bed8a63e0a77e609f25d5d3ba56b6db80c5b0a802ea4de95c297a11545397914892aaf09145d0a32977bcd21b9ab70cca5c007a868dfd28bf93ef1a9c9ae2cbdc56d03964af1e5d38e1e29606ba8f437cdbe1f61f92e9b5331a985f05862199922046da088a22df0698d5e4e0c14874a590b2e2e6fb4438bca7187b3a1967f51a80f2d714f110703e34b6908d7a5256dc68fb8fb01e7e478ab731ac44e6d23e02564773668c396b0733756fddae0826781bae28ca32460ec81143c44e2873e912a89c341d3373deb33efe44654058d8905decfe74a692ac2454c4cb3abced055d2607f07c72cecdbca54cbe5562b31a4c8fb002f428de02f7c428495b85b3da05445277998271faa46f416aef5f57fe6e74a961fa3c2358396f819feb442f4e1dc1b1ab3dc6f4f5b26c7dbcd63080db5390ee9e357fd6c37f63ab837b29ce78f7e2f350e5fbf4004e44b1f5871a2d9433b0544bd575898334b5d1f222b150426b406e0061e6ea73c8eabe2d89eccd404a62183a240613c10d114ab26eab842d3b7fa32211c7e9218543e99f332faf9bd0f16bdf45a5e5a83ad6501474ee8a8c140b155850e9ed6c35984c7d5fe05dce9ca4c02116a9c75bf651657b5ba0900d5c042b04d8c0fd1fe0928a4e8b52466b0e9e0518b8ba23c4b039c80c8ee57791b8c0a10f433f14fbdbf475ad68c484fd2642f2888a7581104f5ac2f6293beb5165c19c03fee3481b9b854d0d8be20ae06d0aca00e6228328563f4b1f4ca673e2a0e2763bde508c4617d72983be4144ddadbe8b77b1140c1f2af740bcead25e5dc3acad60a7961b116aef819f20f4e6be2fc6123ec1561d250620fa3b0ccb50488c51861343bf09f082acbf7a85e895fa4aab7a4a2a2232f4eeee4ef37247c48e33a61ffe60b8065af17bfb05e02625db8b09d62f443ddd54c31896791a32b27a461b1c4fde3666bae10ecaed9bd0c030f69d37e656ac3374fa9f288185f9005b45d8493bb854f97f96f6f259d1c70ec472d42521c42c89f79a640be0614788080d623a8428c3f2a4b0e86c043c850dd1e6427c544bf0b95eed21a3ee9bc064ddf317ef047b7bf8029dcd1280b971fa3e0860711e297aaa30e4aecac2cb3177c09acde18646136fe3a86cc6fa60aa999deedb2d10239e10c9963a00dc38ad8e2d4ddf99fe9919f0ace8d4bc8c7ddb9ba698731af56f2abcf0b022c222bcd0c9b37f5c81da3ab56a6982349c3ab3618aa17d74ca722f0103303f6ceb8e6bb94d9ee3a07c5ab7d6b838b01be308ed44eb83fa051615ce6fc0914b197feb8f2ba0a14104e28cf89e7b8bb5f921895ade155ff39245a8b2f2c059161bc302085a8d8067bc3cfb0f2760f4e7715515e6c71c9665e7d24455991c4bb6f8bd2c427486f0cd069f577759e534736f019d6553ed8b030e73f8d1239c7f520837b7387063a443cff786895cdae591b1465822da996ce1712f51b0bc6148d98b1763d321358e371480a655b47a7095abf9ca0f1ff4cb09d7445f5ca320e413dfc2f3a40e9d1eb84971188b97beb88790e2d7a854d63e9d84a1e9f2cecb2a9e08bbd60b59bccce97fc35d2a266e96209bf6a25eee510ae70fd37e00735d1edce55c795c5fa3e48abe728c1d4dd0259f72f3bf32e8a1530c90d5b4a6b6d416d22218ecd225f9a823211b2733095d55f531f2525e31845859e52132a9de338554a1e6c364d2bc64862ce4832848b19aabea3e7cbfd6a28007c94b79c51062659587c8a47acf105a958a0f9349f3c230f42a758f485689e44d2e2b4893e1ad90649032f2689690278e8624094d07c2d2da743dadcdb48c86648e8bc719ea4376484bf4a9a8e613fc78b7ce8f0a8c849685fdd3d96ff3420b1042f6e5013ddea4479bdd32aed8ca040c2a9d42ca0fcfa515e63558d78de5e1fd49abf7e6464a0d0fb37b10ee4dc4dde502542facd127d05924f0c5bd86f83f3d0d327898cf9a870cbd5335ad66072f2ff43347d40057cfe12500ada30f166e4a7472d672bf38b3c8dc755c705485474f99242757b98fc818914110fb46a745fe9c29f441a390db1f917037e3d38b43c04d6beb9fec453fa13b01fe2ab4f7abb4fc013b652db5b111c6024e80d804a3559c4f1c9c6a4a922fd9bced37f9fba137f7d1807764db8bd126103817b39996b203d7cdbdaa3cdf6d975c4bb966f2d11b41ff584cd54f0cc9bc76cf82ef2769c428db0abdca2970564bb9519a873e3421793e28e7c6c1be23f3444ea34f01ba34ba79687aa7d9a900f92d8d2bd9f0e0985678a81fd2af7bdd885c8040f886059cd519e110c64e4fb469fa4b6abb8072127a1c2067ffc60fe2e74f154d3414acbf9eccec2a4d5cbd6de90a6fcee4bc5b48220e5a216162d61e072bf772f303227f23b56bd368a5da9717ca9859b198f9d64ad77329d6138a7ee11173fb8d69a194db41ff6ca6ea539ce5e7ad598f6d59eb45a1a32f349c1f7999191f6f918374df61abe2c65faf95ac1e44d151ee8cbe7c1352f48d4b66305830956952a36d3e64b30e14fb1f6b53c3eea6ee3b7dadd1bac605cd5ed9bb84bda0883032c8a59273c829b9993945aa938ddf6fec764d41344ffd628d704d842825c0f79504c3314f87d7dbed00674ddf262c4eaecf7f8183fae68bc10795be22d5b7deb07afb533713cd39bfef2ca9fbf23147f3b38da901d173aa5d5ec1c0b25bb6b4db9818cde5c901b35adec961b83aa6eb6590c888e4a8db98d5104d227447c1d3603418a84a8b1ecc25f3d27b9986ec2bc75ffc9bb4428cb2014708fe78e471e98461924d9c3993ff105a06893173209f4ad72c2341a7d1685b6f83e134564a71aab7707ae2079949c0d095cc2f1a6add0023e0106b69fdafc994c65ae90928e5b180a2b6d2068a30cdb94f05c3803ec0a7c0bb9e9790d022005e031a19bedf4befadfbc8b9cf425c5f8f092c78457d75bdc9b1c758485999500c0bc321e26b242e4b6757cc26d701331fb39cac81b9b1e664b34c23386c8df278cda8f642de3527bb87b06116ad3d8ca489bd4120052548844d5b2890e2ebc74528eda51755ed435fe0f78c0028e35d42f455bac446b28dbe0579266eba5c9c87faa0a18786da1ebc41d456e5c77205a6160a5ed0153b65b183967d7182b71c5db4d03830aa897ca7840a6a2d1701f2c727f29586eb3ff901df62e2499226d46c22950e9717118e89ab00a60b87e703b692e2d6f03120dd89b0128283cf7ffcfcb4ca9131a94788a8a832ffbaea0a2be513012b0cb6dac9797b94fc6362bf4bbdac3ab89aa09f72f194f6dd000e887a013d9255d78be861c5eba1ac81b144dbd622078fe43eccc4fa989dae87de614fefa09d49d670bc947be606447d0233d6f00610e499df0450fbee6016814dbe561bb80537eb7d26c7fe2ef037da754200f4f462122c0e2cad5d8363059446d98f8b028e15af0104520e9ad50b1a10906800acb8a278259d70d46391c870a7781e694df0358d5e7939e66f5581d7fdf2b79035ea158880049d3277bb34899c7bcebd9ee07aa58159b2d5e087771e936dac69203182840664beea069ec6ce58ce1e6dc15f82e51e7af6624fb9254732aec93257317b1bdcc791472c53f7fe3bddc9260185687f57e98ae66f7582b4b08e6197406e0061cf4cb2b614ca0ef1ce00445f41cf870d1c1ffa32b6c0a242aaa8326479503e05b788b4125b8f450c04863c750646e2054084a8497f9ffe8fc0968778b9a7a9522004e82832b26dfd6d96454454f50c4878a4be9a73f16621ce50d825b2eb6861ca1df89b6b46b95eb6e15e2cea2b1830275e18099f84cba27780e79de4c33fc781a4b067fa8954f0918058abd25de5a80acb36eab3500c43c278780ea3404c579160d6e393bad5dd58a8778a5e0d7c9efe4134069beed3b67324c8366b677a32df29f65d3837d9cd8e9145e0468790fa4bf74eb4378aa219a19f502abbda9da1002c3daf03774d5d5434770a45ce74d97d2a4053a60902d5564516b39da33a9b2bbc84ad4a4ab282e36eb74c1123dc72ac5f9a79302f9cc23f53d02ee128a2657c67ce396ca7eb9cdcce3af80db2f75f3356f20747cb0b8d53e505dd3ba4fa1cafa3d2b276205b405a83e3193422aac5765eb3bd33c4a0a4a4be8f69b208c1eadd9212e6decc39111b2268a8020b98b5b33587c0989e830c638c3d2aec20204c7fc9eba8176c5c57bf9edd695d5492821a2792d084e6a85c03ea28394586496e7b63e769e377c704e4df8004971f59a648db169be3f093b8c5c65ba7105deeecd28135d64a05c1015c112ebde2422a85bdb17d34379ea7c92fa496c6d60277266e66d78217e2106360851222e05499a2d1d721b04dd308f009f3a183f5b64e701bbd13d36249090c9502852b4be18d83fcc014764a5bbb3c99c6aa93e120bc49f7be929050ba8fe067c1ae055c52abb0db03bc9e1c5b5082d51b4aa526b51db5bee66f4042377304233d37a61587caf0d3a536cde6d1129edfa08f07cd9fe02519f5a9496061eda3edf912c5a19c1236d97310fb28b5cd0f5a27545f59ed4247aec4ca14a32613ba01dbdac7acf5e9edf24b0585c2628e0916e623c574a8b4f52c6fd4d358502500baf3ee93ad57f263df47fcdc35b8dd334ab0ca344b2931fa73b758966c76744e7f369f1c97b0525369fdf422613c6c6daff8a0f461c3758fda5a8ec0d002ae2759f45ed791456137a070f610c97979e3d00f698e07322c903b91b12c100de4e522e756cea4de6f4a8fc287ee2ed075030049b65b77807be02a64a0a80c37207b0b03393061b83d0e9f788662f7436876434cd943c7d4ea6302fa8d62ac3b5d862f2bae34ec98bf0d89e1dc465e5a418c9600a769c1f95f2ef5d1554477ab3414608fdf0dc8bfdd94f02a2deef70d0579708cc9aa46a63f4f594534dd29c51ac15c0dab057407399d67cc16b07220372dcc3384a8c61774a06c4bfd865bfa74611e9ded1e762cb31225843d22dac01166fe47508c44f81fb24468bd6559f0a8681df082e428f43bdb9d825bcf0c5fa04d4eb2118b76b5276406faa08d10c295d5d8d5861a60132df572aafb79ceb3f9a6788673b60d961bda40c86e995620181be9e5bda50f5046708955a2df50d54dd8215a8b01ed48413277961d9bbafda3b8a380011e6689a9b0f600cba226442038c0df4674d3a1b3a9b3345f7264322a43caab89b669b985e8435fad67150d76616f6a54e325d84b3ac2ce8defbd3e07bd165e481ab54c90e8151b78a5326b7734537adf37c5beb2f2a41cf52933179baedccc524b1584c2d619e6923eeb69b6a0203e157a515fa056e5e8b38ebb8e4e990975726601160c2d396f2646b467cb16f00741e24771a8b56682286ad84b7fe45437cd24d1bd0b8c5a5531c927920e44f846a7d9632d29728708fa09fb62735d398377c56c0d2a9d4c0ff86d8d2bccde9e447b45651d09673de0718274de7fbca93567bd72ac0e7468feb975db750539be45ecc15cb55e3075988671455278d6a4b39930688551d8cd152681191e09ad9040cf34dc9f05d5495fdf0e056e2b4c9c770045b19cdf18cd088630eb77eded92cdbc08ecf6ad46bffbd4b0f9ce4db12ec7c0adeac14d855d8e77da012954f39f2acf37d2f044d0021f0dbf3743df21ced488044054de804f39555d5a47dd705f8ea6d975beebb7bb4c572ec8532e7cea219db50efcdee1e1a8214870311ef6d030a82f4114a8139060292666da5f1e8ae0f97324bf1f1163f511f2c63b63d02e9c6c562ecdc50bebb4400c7c882cc97c58e8ef125689c88532ca79ea703fd5b3c091cbbd0c01597116ac160b0f52dc79893c77fac4adf3a60320040d9dd77679dee639405227229a1609eb1d8ec5f1a05a919df02242958be63c9da65a09686865eddca4899d034af38edfcfcab61bd748f5dbcfd0e46ecda27d1b158d62105bae9501ab4b394d812234b90e20740a91918c6559750e1747018028843905c5846d46655bda711c9dae3f9bafec467fd572f64276907196714314ac19ed544b55afdd55b25816deae1506d73bbbec16a9f2acaa825daa52c50f8858db0235e3a34b10cd4cb4bfc89b042d33800b4bcaef0dbabb8223ac6616bce494757f9f6172340e0e67feee9015e1e4ddde82f2fa20dad1dcd6ff11af46d49507fc18aaa7b4951250954b3cfe37bb058f164fa374cb923c2106cb927fc6fd91ceba7d5c098d8ef9a218e11068391f5ad4db2239c46160da1e6bdc227bbe0035df566257ff2ff4bb76c7ea94ef7fd9807d46d8c7fc90a97759af6a74550039acc3c63987e002e4e04345f2c01255f903d13f85bb1e42ec50959cf42d34cbcc96e60103480b14295a3c7f6e7fa28dfd2d1f941b080c4db89e74f1463fc74610c5ef11e09a133e01221e3c6ad791fb8237e926c572e14bb19a10ef010396eb52d2fed7f68835fb7b1a0b19600590541ab6803604e7de990c74358fed36f908c5cad5a2d34c49b4e9c0d171554326d12452855bd457de32751109e85305ed5d5b925cdcce2f0279b844761a817845805af62c11759be12ff59252f9e8db6421e332b9edddb05f890fc585f925c7bbbd4b1518944f545a96e51a79a29eca7cc52ec926e7d139f83d082b39f98c11b25bf798effb1e846c674285ddd826019a8f0b4a9840134326cc528c31d9d99b4e8238724643c12603a332cf42382aea423fe24d5f1d298a88d82cdcdb6e31f4ddcbe06218bd466f78aecfd46918b9de4a41ed0142ed0afc63633e57b60e0a32ce976cb3d7e0a4682a80fad9342bd221e6f714c32472dcd254a052af044c02b95f424f28914cfb10abf2c7ccaeb01499a5b1c8233edc118e1fc703f3c23e28889ed0e861a4765868ee3dd88533c021df4d4ad8e32e1d85944a3489928fdcb8f8818d22b48d4b33140812de12c2f1bc87bccf9dcd81d9df0e558aaafb5320deafc6ef4821cdb2611b2b02c89adeb9ca60b1a99e3f3842fa1eecb6d1f3f342ec883c8f700cab7981d8d7ba2d67c7dc07cec9ecce4828ece409693a3c94bedab17fb91cc258e03f40edb3a8c39140966a0c8ea868caf04dfac8e78473db34c24316ae58d43c634246c71315a77aa4c6ccf3c25c01cef6e80c078826a002081dd1ccb2180ad3be599127216a5c6772125c3ccf5b8eb74cf10f80a48894039707dd2275f689ea44757e55b4f2cb88fc2ef99d442fd1414c866b4f580d8a013572315012baa517218ea6e43a13121daa0f73d5a3db607f08e3e85d86eabac083e138b102927faa189c0b05a18c5a1c7223f9c4befc57a3f1a70b6bc53460ddc27bc223f18f72b45da98bea940b9a0abfbe2531d45e8e42939d773422decec5af39d988c1392213eeea3542086f5f5c988740ff55e220e688bd2775d4d69bcb3057e992456912d71b47b042390bac828469b11b12632ec7dae861b0f887f652ec46273d36c990aec6348962bc9c8524a765a41dc7d51530edf61e71da635c303ead93bb2f00c0f31d946457d2b98cc56fc723ab5bfb22ec348f396722786600a74b27c70aa136b95a3b1016c9dc544749f2e24b37b6d2839b79b8023cfe8b2975c2a8ef1c32332aeb466804bec3190aef218e8f594025a9d6472ed569e18e6b4e9971fb814c41a25f0842c7098309446172e250248df3adb0cd7fd930d241c528311ebcd26e3fb10f43ea5e424d707278ce32939a945185e9557f2d513df651bf314580bc0c7191e365a5a7ed40672cba229e341939cbde52ad4e6693175626a3bc4a5a74d0bebfc9e0ffc02b6c0a690f21ff835b1847c9cea0a5eed0844459d631b532db034e8737f770b9a74088310448ff8c20099ccd5386a7daa16afdc9c27fb50a4617ccdeb295b7b45c74803fd4819589fc5dd7cf9658c8895273dce3d20af045f475ec87b112574649e03d68f2fd48c1cf278b4371d6b38f566c6d6f40d10f9c82fa4e2ab26a8e63e440867ae9222cb782a0793677b91ae5b1410b6764da85d645903d1e8ff9d81e89b990ffa743dc500c49b17004c2b8e27b49989bda6888f647f5739f924121b7b92d1b0de7fd574459b0013d89a251841383342a89f5acd27faf6ad5f9362ab7c7d8652813d080666425988bad9ab6de200b56747e65677b1816a5a311cd6f877871a31d2fe95b337834e2a15fab7e4acaab612b0e750d51be858209066d8b5309ed312ecb1e4401dbc506bceeb82081193857e3178ae955e4c3d7e16110866a971b87f01044d6343dc3df2fe7ec44e33a883aa84574e6589476fe0b68c62bcd276c93af6ec35a6dcd7a8993646f8ce064057a5caeeeb58a6208d307496a7beff7068ea899df3f5f41c2a11ca111682bf813199c21f45e1641291b10a1a79b2f6c7d578bc9dd6851a779fd89a471c0f592130d3440fc15452610db759142a9fc53a9414c79f13c4e8dc3887b63d4ec712212495c8124964e262b25be6853aab489c89953a0e422ca533c530d73e4b6bf5818e9d6881ace8a3121fdcaf106137b692ef7cacd7baf065f98c9e420ddd58e7a6c83b5ef34e4ad7f33915e56e96a0ca5ae0c602e3ad97471090a84f8aecfd7e470c1b04bd0825d97877a5677c2325eb1df8f63025b3500ddfea2a347783a388b28201f5b22f62daf461d35f64708d37a953ed9d723ae0abacb1c829d48ed7fcbc55464e66de132939a017f29522ea160208de9cc316de881c6a1c61be448cb00dc434df1ca8aa0da9e6cf4f79ed83f6044ecd6df6135921ac5a2b4cd7212f6319308cc5ea02e7399050c2afff6926bfbde4b5886e73c3a4dff94fe6bccd4d19bcf5ee5513a7f9e13643a3ea231b809c49e2d44a300839eab886d890aa0433fa2007f48d5fb7d34a407075f7cc19eb3323ef8a30bb8ad513b4f5d033aa0fc4d990b58b1589a70a2456e0b38c85174c1abe77a3ef07008a9147a16e4622fc02db013ac7a965814459dc5bfe0973f421d2938d6d76c4a07242387ceab31ab3ef29dbe18eeb8a58e4ef37715daaab8c23c20a555d391bbab687f36a489ac51c64f31011bd4a03055fa776d953ef021759d6af732692e09a1fa4b71b7e766944a9c33060d1f3545b633c5357cb4c8890912c1a3f4cfb86a65149ecb32872fd4e25b19181edb24b15a39e44ac7f906d44ce70a8df4d80d3698818f02e8a2ca4931d98e883c008e9508e50c31e8a7bb492fb18b8c199817920fe3cbb71c98eeeda1489e450acedd302c4892b8680b08e103d855c1007664452758e1aef2547c67da987162dffba8e328ea6e9aac543db357ab21a2b34fa6d2d0d90b563f00a2b8c8533f1a89826003b8c26edf4b6621b368b494e17bc053442d43ffae0471597dea35ff509d402f9f4bca8eff1f2a73a19655f878aad9fc6025e2dcfb227bf977c941457e0e0f4836588c4e70b21df0597a2643c4d4f35830754d40b02140edfcd90ff625f846ccf668c29b0ca03f48527f75abda8aaec6d9fb61d70a4e37ee34f67bb7f5cb2c54f23dea54fe51266f36a4b1b62587438d17656567c3b389f1eeec52b009a91ab048353a533162ee5eabf2f8e246155f7cf9b38067073cc4c27c093686c720ce5ffe9346b0a8240e5a0228d79ed572784a490cbeb9c1ec1476e801218927cdecf7378303c995955ec3b37f7bb5655e0c9a89077dd4acdb6e4192f3154b6e0c4b2802d383ed8dca7abb5080de4e71c8fbeb3b003b8a40385d611f4fd6f48a45c12d438622a377a0395790b6d96c98d00f11cf8aa942502184b3f3a9171c468d8aef12ab4a3e5144399d11a7ea66254fc1f930960d85e6b27b97ab82015c21da9057a6729fc2cc45975dde466517df52321b1ccde6e524f10805722271978f1dca28735c8d7de1697e70cb7c367744044e54b47f22a2cf5eccfcbd29fa36f24adf07b41eb3e2256de2abb6bf9190afa0d397534604836033289a4268e71606cd69aa7f24ac49c821ea6cab090355bcd44eaa9019258606b43ff3c76fdaac8244653ec7b12353f250111aceec87092417ada0eb5735613719d1f703cb18ec2f61e4f23099c4e38f2fd3c86b041d9276dde2cec2f7b851ff2a81b09c66a04121d76814a5bfb99f6110610ab92d35468b2e0d0f75d31a153c7faedb5b5f317cb221c62e591764328b672f813543262e4d005fec3a66490562e244e707d9e956ed255e2742467562c7d8a409dba31dca77ef020ab96d2670c22d4b1c4d560e67772b7d619be63757942fe4ca8ecc3714d91e021c53a41a2c583307b6390634d50336f1dc499540f8b31836085d46994026c6e8c4c0936fcf24dd8f0704e3709334c9fb44dced4c7d7e99c1022368846e88c48d596057f777b903ccb4394e99d78778a6aab195a1703a106c90380fa8b125aed8c5d540644a749bf7d8e5204dd4722b1337cb4c9a4f5c70b7eee7054491af9e1bc32d2e99fb29498692c00a9794ec4dab0c28f04f97fc7e2b79bb118fc66fe070052de4b029e8b4e720921b6e01d2af3271932b7fff90a32e6f2b6dd5395d9f70efc3bf0523703383d951d8a107ac9b809467bf1e1b1868aea5701ca44f26c4d4c71d8efcbae5df4d186266cb70e3447eea176cc00df729361f4e1a20e36b0c07758a948c75fcc14ff40d1dcb937397d3bbe3fbd123a33ed85b385047b8daf11462219fb940f82a3b6214efcd5173832e28c2264a3951a5f7dd7c6a870bdf79217a406c042345cfe107ef78b67e3cc4ec9c9db0734ee8028fe3cb44e5bb33d447b327f87ec00e18b96d002c6ae7edea8cb6173296246c98fde397103c55c41db92332f8a799abb39246586c1087d04a678e717c1fe24bfc6918c17650d7afae5db920cccf764e8572d2a523e4d51dac5debc88c70ddc5522896663c9787be399cffb9a0b39d172624bc5fcf8faafd1c5213bd2f3220504f1ccd9fe3fd3dd6e99b4b9036f1337d14e76fa300f34822522f9be38d5adc7e7e1516ffcc001a2b4881d5ddeea82fe4d00a02df73513aa0ad9dc1c4a439d4f1b8af3fdbde40f06c901f49101521f97fec32a6374b87d2777ead3d750035935dcb1724b15ca3f7aa15230c6c9e25c83c72aad3031259c181ea7998047fe0077dc15c5cebfa67454b4455707d48d88aff9220b9b0464e0d4ee2ebdd1f7d155de45c8b42b307c25d44325092cf5a1a0eaf3d6112445910713f8007842537c70497273e25c6e09d92d0a121b49fdd448990f635cde765b6180182a427c47b81a384978905e7eb95060de3a2b077cca1aed6ef44a814f1da7913e0e0cfa9f20e73083a2fa707ae6712add729e1d96f9ea030fbf48586839b7935da46564066dd0405f905732f76d7cb0a51e7a4aa669ffe06afa1cf94d7c1ca47a3ab4fc32e5aaad099b43c6b8c39cf5ba23390802a9ea9f1f2a2ea3a34232f98eaa36395483426019e82b8d5cd9387beb93fb5a8c215a41a748b1aeee4872783051d8e33fa2a221a2bfa22c5c70d799392bc181a39e4a582081804d3ffddc4a5aa30c902147a4311c27d134a4bd4a2c87ca0c54ccdd947f8adc1e5f799aee09ecfb1475ff206a19d1de3e73b9a9d34c83f21bfce0132099ce66e0bedb728c767481a1c889e1d7723110c1b2dea261e57e7248ae31f853f1296ae348aae6068a095d4829e0481f73f043466bc17c9683fd9d40d35c88578d4bc9da4501a0ba945764985092176ed11c4edc9e6325bdc892e65e556f3423c1d101c5cb8b0448b58f0db9e51cb816cc3fab05ac2aa680e8f138fb0db5f31b4a68b44855be699ccf4335f932e796d30f9b9b224bfafe4df77171878e055a3747f22282871f5efbb15c80aa5a790a6bb8b93ed3d0812bd170da842f7a53e6e0ca7cf7b8d0432b045bc6b4168a704ebcff99870651619ec59df5dd00ebcffb987df91224547f852ec70c2f5e920133e69cd9d1cd17e1bad9a7564ccc02ecfc1e54b92a88aa2e0337aef5a16429171bfce939bf24dbd7d82d0c48f8de9aabbfcb66c0c16a2e24dddd460d7b09428080f0011f0e938227cb164a81517e8c5e290fadfe7022d595452b7f6723d1178cc8fec42b83adf4bec0369d71033eb53d90300657033fe52d9565595297e2dc349fc08d5801a82d913c155a8b69e9c3f10589dba7e0d97c6d6a63fdcc821e1966aacbeb9de8cd8a694b3d54302816c9e089a976d655b618712d7a14580881e932d1f6d056a0cc6dbd58202a41260dbd1e6e7d075a479a37c7d42676ee5fe53b86d7ca1a938a1d817307b581e6aee81e81f56b7701530370ba0d5d6c8ec97fd93a888e58098d22bdfcc4872919f6668c8c208a4b2bb335d03aad23a77f31a3e995cf50892df72b9e1addcd4521a48cd97df185787ae6ed8a08d3db2527e72a3984ac8846fc4354b6e7acba06c27cab98da11a331a66f1a4a5a26a1080f56c1e421468d9eb1fc9b0eade4d6f9c8a81cc7c03dfae7e8458320229a54e0af8a5d5e8d392b1aebd810342a00ac6bd428a51949769ee3c43b7dae501ef8f2074ca6ec1f3eab77b27932c8e479b9080d533235fcab06bfb681c1fdae69bed53904ab4160c33a97b2763241951587393d884ae81f606b91f7006c7eb08cea6d594f6605cd0219ccf838959870926c9944e93dbb14eb720c51dcf9d3f1a16fc5bb4aac49edcd1e2253c788a26f96570a99c98dd5f3a721eb933b45a1d81e8bc39495cda34b4c5afb301e2e4a6c50a68b90016ba8c1f2c06f024b65ee423d5e437e47ced685034adb61d7fa9ba6cd26f4984e83f11669074e1f5d4a1c4cf69471ad9687ae65c8311e55e0e4c7eeba1654b994848d8be4c048510ec9de3a16b0bbc0eafe94c4b1676a41aef1d8036c76180eff7193bca4d7e099d9235ed0d5e3a3d46862b340a1d9f5a38b735448f1b61dbbe4d08caeeaa6fbeda66747d0ccd81b6bb83cef66aab78ea3d2be6465c46ef16fc49ceaaba3dd7dd4d24ad8d7aae36530bbf23ba646923e5abab59f7287ca132afe80ea7913b3f5993c125c98cf2e2e4c1755b2d3216da2a2f0d756309c412f70496e2ac66bd9ec5b1e611ddf755e64aff4a1d0bc5cf9298c82038e8b6dce38fb31220b39c04a706851aec03a59ffd5539437ebebd02d6a3bd0079e8ecf8db3d78825108009952016e31131f4a97009745c7e10eb160122ddc759bc4c45469c94c18f5b319c39c23deb10c81de4168004fef320701d7ae784113076204e38d1fc76ee11f8b45212ab9960bd3bcacc5b2d857227d9501a384b41b6c144416a8de5811e32ea18037203b47c773123d60aeac19fbdabd13dae62bf4f6b880834084d8a5080b0a2ec43cdadd39c2abf5a5028fe9fd0106ad1cb32de2e30db494c950460f37d7f3834859ece06ce141ab2f81304eebb95cf65f8a792436a41cc37638b66e84ce1fb62d3a382a8142ea653c1a5586d7ac58db8c92d768781337240f2a908494eb23690eb711250ddb2cc61701320cae9bdc185a9e2054ffbe3fb7727d4263f0850f908bc31c7f3b21cc057ef7511fda23348bf243d03b0d360aa38b1323c594b4e056b11ebb58d76109ab506f55f7e95ca11b846f5de4f725dcb44bb09ff465f746a36893232371c5b77bdc61ba2abd57ae871266a8f2a50f388fc6f8d2d0a49f3c4c727b002e89d0da537aa45664579f9cb47ba54f39ab98a631b3669a1be6a553e3d94c586e483b0aec566499557e8ede55c5210004de3be16602f767c23993d8bb192247be6f894653fd8a38afad478adfcf4e1158f261307ce93a5a31e11fadd8f547ed9821d4b726491e0f98f878bcab8d9438ecfa94e7e08513bc4461d56d27679f55a0c5106c8fd0adec8f7d593aaa0d329cb38ab3b893ab03a96d77f96fcaf0ba1b861fedf77f8b834ba6e8153ec2336e8a92cb86216cd9b1f63488c230b7b684bd86713fa01730e48a5fcee3aed959978f575d7068b6f22dd0f9c3b4627c37915fc20ccc39ac559a7bb5fd2535bf127838158f9b48cfaf7856d37260773dfd0ef32e2ea395aeb6326cebe564988b696c1d229cd0fba43ff9c617f90199a3c4dc97d3b306f73c7a81b6b761f12e3c5c52b23e871aa3b6303089e33d4fe217cd20a786b3a186c46de616c588c89782a70703a311abd76bceb9201403cec33cf7f384fc00fb0da74338e82526fa8e74d45e62322d2a832f7a4adce7b83f800c2cbbd637e986531819ce939094372916b743449dc3aa5cf752ff1c013aa990eff33d6b38da99c3f2e3ada567147c369781b2609c0c83267ebed3d28aa80f670992a01f45efb1e206abde844867ed011799bce2cd13de7d7baae551f8fe96de45b99b2113b44c8cc46d0225cc86d3535c13470f6351d702c6111877bfbe55b19d5b5b88358502995cd879bbfa8f55138ff84e8b424b0150fe9bb83784cf66aa93048b88fe2c00a58b0a20e40410e7704b5405f687e24786aabf501a2b81746bedb77c29511ccd7f24b63e669efa5e626e606a602a2a4645f54a706be27d99d12ca18fac7f51295a25752246aff5f65bba02e2f8f3d0086728197e22cd3f8836e6f114e55c90be0d51dddd918071eb67e9cdd889cb19c1fc47855957e06aaf85c8ac7a64c7d9802b8adbdce3c641e8e841d5c3af9ab17cc907392d200e639903d7a71823a478e5db3655c52a0bc6ad64356e65d905bfbc286ca7e118c1c2343769abe1c0421dcbf895b9737446e8382e2d6aa5b53011dc57711ae7b44d59560be77b910e371db319c341395942cb9ef2a566a6422f4f355b19c32357f8b8a02859e85078a222cd3153ae726f60245621cbc9673c719df4a05f4f11a418037bfb86fe31c7043aa6ff494960db26f7ef2fa438c190173c015ce14718894903a580fb8cb6803459db55cc62a4a4e86881d33ac674fad47ed5e2fe45161c301caf039b8b15573f5dc5e70c4ab3cfce87c5790e116ae0f284297c7c020a9801555e400cca9a0efa8b2e5e8fa68471a7e75311936573905df76e73e733c6bfbe361c7a63cfa8a82b0644ea4ac26b33da6f1f19d5e8e898338e8abf31f7d7aeed7db7f4757fc087dc160647886f6c2fb6ed58d5d226166b6d77db5b4a29a594322a055a05f804f7ade75491e85335ccc30f967e5a26add7d6964ba9db5bf60ffb071a3305f75e4983c4f6612f6d1f76962d448ac8ae61d3b0b9ec2dbbc82eb2b5eca1ed652f6d2f3b4b066e941b8122a2222129355b0f537cd88a84a4b5d65e5bb5586badf5f6be73566badbdb6ee2829d010594aaf5f6be7c7d1acb5d60ad16e4ef474798568b1d41199a2a5683289b76f94524af4d2a567e958fab555fabeed9bf4ec6473c93963afd6eb6ce2b8739662e2210a203c46f579a9500481c6a4ba2caad8d345a0a74ea71007a4e2f53dfd8d5329e0e63b222088705eca1540e89b1b1f7b731cbdb32aaae080b696c85a3b33622f91d4554507261da09ec2e890b48f74a01501ed23d7954b34e6a52d87a31c8a3cd193ad68f6d2a6c3912d8720d686b5875c21ddab36e49cac5f9cdf4bae0bdfd4db6149cf715aefed5eab18a4448f35a803fa78ce79c3d01816ba5094c5751a19a27be668470dc8e324217f23c21414de3c66aab18e4675a87798e93b9a508d7967a80ef51d342044428e9ee2da378493be23f8e64511d1d1aa9495ae6ac54e5487a9a361a6a7ded1ba233456890405d58f885bda5c3697ed54ebcd9b4c2f9d2ebd945e99e81298a7db187b7b326739aed2c9e1cc755c97f264cafb54d2e527559286e793e16a6875e4a5d3d086f492975e43c4b22c56a5934585284c7a1499335164e80e3a1b938484250969e9569b41422691193485cca1977e857e025130615e7a85024366cc0793f67c8f44e29973ce496bb5f65e6c2fc639735c97b2a954a53395b9ae4ba53cef535995aad2a94a79dfa752ad563473d268fdcd9a9a6fb26cac8d4da5d3e693ad1b89e3da76ef4ae79eac6fdacc70fc3898372a0ee6c4a1a2ccf8869b1ec24f8f612bd1b47e71aa4dc85a6b4e9445fd2259d49a4fc83a640c83c1639ee2fce33118d71398a7d300a3dd61795c905b88e1a9d75af36c966779566badb9d6a559e9929e4e2b105a7bd4238941f524213722b43e1da9504baa2cbcf93aa6c6f28cce6a35d62d511dea4e49606e61989e76649e7a77062ad731b75c69ea520f072a28f0951c6ef015914a086a50c14a10172605f061248532654c803ac3244833a1e12b4c7a68332b2311d4183541f3d2862405a922bc711c318659eb5547de4b3b4b43aaab4ece39cf70c6cdcb19ae5e560d50d716a7d4762effe03555f9a5e26c04456564c54a2c5fccb4e065e84717236ed03aa0608626224ef43002a319ae1191ea330b46468c887cce2e1f9020d1d5e83402b2c3101797d7ab898f9c5fd9479e9e9c73ce2fd70fd6c524fb5a29c09736243724547e7c39e16d2a9a52143f7fb89af4000460c1cfa6d7cf26ad427435e9f0a7ab49fb4f5793aee0a7ab4907e0a7ab4903e0a7ab49a7f8e96ad2393f5d4d1ac5cf260dfe6cd2fb679376e1a0d04173373f9b74eb6793b6f9e96ad2ac9f4dbac6d5a4f5cf264df3d3d5a4573f9bb4ea6793fe5c4dda4bfd6cd2ddcf26cdfd6cd2f96793c6dfebb3e01bc00060ab2a39dcc3db52f4bcb349a9951dd975d0702e8f5efaaeb1ae86037801bc473ffd00e9c331712ac40fdf2b08000052bcf77daaaf8628c0ed7aafe6b3a97ea3ea80fb69d3bac1716df043919302005f0d53ef05e0abc04351c5cb02d857c349000158f052a1035b55b15e606fa52bdc82b77fc80954998129659494b3564a612678764a29a5a4524aa9654a29e5b5b39d656ba19c945288275f39526ed9b2b76ca7bda52ef9f6968b31cb4bd57cde6785845eab6ed425f593db68a5d25cadb55e4cabb415567d4ef5e3dea98665d3bad97acfb09db69387a4899e5e29b02f8a1b754905736ed42515458aba444faf1b489732858a2f349d02240d3b2abd5598b3383b4e15b6a80eed3890145637e86c15a518a6b24eca6928edf8bdf6f52e871307cde1512b8602ddc00d64d0420317bb070df221d193d3a1ddcd04d5842c0b568805ba4036c806f1b85efdba9c21af74b902f4a1ebbddade7b6dedc1628cb1bc564af00848038f48253c1e1848cb13536bafadb5d60ad2f4a4b4dafad1ecc10b05ebd84eeefbc07d80345b25086fc1136cd8b75ecd39671bd57a3978204dce39edf7a2140522db949bad072136aaa540680f1a840ac80304027980b4223c1326adf6621a3088ae79f6decbd929c112f404675a8a79358ef0e00d7ade2642e3fe3b6b8b6ae3ebcf5710f6193d69061446b138ce9ddfd46abdb73bc7c5b64b8ee32a4521468f5063345156465571f47fb17ae25450fa133d314a1c3367235018f511c01f5aa863caa06707893661addf00c1c67ea7306befc5588ef08d2d59e3aa0bb01d7b2fe77d1e4761581c53a92efb1d65cd5fd7330d1c575a6aed9477e5a3bc49b2b5d6daf002b25156656fbd0b3d97530606e9cfa9d351537a77deaa686698f25538c278fe8a35ece822e57d2f06dc382a8111b45468ab6c352d9327c2fd195fcbf3c416f486e7f13c47615df7f9f5578522dc9f71dd4ef72e9742fb4e81ee7c87a74746e35c4a5398e7f92afc28cc731d6eaae3b92ab414e6791c1e45f1b31609068b68ea1e278e326a9c3d401634e7a34e91e9b277610dfb1ef72391706ce08429517fa7e7545e404671e2376f94cb46c107d234e530c618a4ddd146952819276daefb7bf8f1b87bacb1385ef147f62db1d6cc58c9e1c21345806851497c58a216c5a61684cebd41626121e84c97212bc8f0a44c171d96280aa3c4932146b2882940506ef8e1644b919a0a35351a726c2823254c8d14276eac50991c43491c0531a24d39f3454a15295a5cb43216bcb44991e16f5edaa400a1b2c5c41ab02592c4d2f3527278fab5575318f5fb25a1c3fc503a3f2233d5091a1c30513e1045c948992844e4261e57b91da58917658667bdb44501aaf19861ba34c0134b8c6e6044e0648222398a9228419414a6cc50e4870ac89ae624d6a0858bda87a5320146d9c0f65a6f05c206045ffd6be1a2d65aa118f1b54221c1d721b2323cdcab8993a7af1d20343c01d2c2b621d7b9ddf9e95ccf4fc7f74559749d67f7badc752ed22f8b56625d6b75ce0ac10123a124284c48e878e1d62099988a80818c0ea722229a6667929a3811458926ee10134c474b04f9a1c41412f84897326c50886c4f9ed48ced5729ed4a91094644c930935d9a8021534212430c71e6d2f0b5d65d26df197e9489b112e40459506064e6230681020f4ed8d04211147c469e27283cf9f1c484a9e3b58f907159fbfea2ed4b9b93277ee47162c65e224eca385902eac27065b059e2aa443782bf57832f2b2112706f13a4bf397f9ddcfede108ac090420941864c40d4e342142840949172a68922242a84b67bc0a6033b06287d9b6ce0ef75a2e32febeff5c0df7bedeee1e19a30b1b91478b7dbc4847c69bdb7898f16958787333cec477988da8104e77a69e3a188c77969e3e1caad8bede8666342c428fb1fd95f4e666c53b01c685d18fcfaad3cd4f0b53a57e9d70dc5556edc3cfc78ea96db2f6d474bbccd4bdbd1130a93b31cc6188b23121a734a2b38e9426476029822f88891a21c96a6d444a0011f8cf125f21863282ddfc610460712695b42fbb147c919a23b64eef036968d6563d958887697dd6577d95df6957dc5c8de72802dc456d2d2a644c8a604682769695332b32521b22589b229994db19e8039eede20aa9dcdb29d72059dee5d9a6da53388c99544cc296b4dd588909b897efdaca002898194527e3019ee882f24ad5572e2f86fcec41d0a9b0ea3b0e9c362e0f674cfa0e50f261a5fbf63fd059b019de8a57c860a219a13a58cbfbe5f6ca12a631ccca1ca930de8399fd9aa2cb971e138e8fb6b4d6755197a967f426c55760c7d80c857ff5a2254d07216aba6c6131790e3572c1c9cb1d56ac9d0da1b7fb68c168eb7c2b1d5127f360ecef7b35be2cf7e1cd5cffe6f7f2a17b8b7cbe572b55cad9b9b9b1b30079b0d8bcd26349dfb0099e7dc5badb68c6fd9e81ced395adbe4dc78cb6d6cbe9b70fcd9cff2cf571c77a3b55b2dd7debaa1722daa7cf7c8d83432d8d98437ce108441cfea551c6b54b761733a9035ec4f297952df65fc349ce1b869b5178b013d40f3812fe8f15b5155fdac7753b8cb5f8bb2a8624bcf1665c1d91fbf095811c4414fa72922b6137afca2aabc12b85163fe5e2a42fe19b48a276f3fe79c2f28ec32613ce79c73e6eb2d28bed465542d72bb01c26799eca53dd6ca80c2a84dc80a53af1a6a69c872e5b552783e65558935eccfe794054fbe40239a5e51de5cd019689e794edea491ce5b504b67099698923e63d920e70b48a89f919df35142ad54ac1b9b1a8f461bb9f11a1b2d83f1d4188eb7bcc6c69d15da14b2104675b2e384597e0ac65363ad1abf71df2d562104bed0830fe48aec3721477532d5c9f947c6a2d7c9b3591c659fc351dbff5e7adeb95ee5995d95fd9b7b84f1fc146b588ee3c4ac271573efbd424a9052567c6fcf4e0364322e8806f4f41b159248b057cf4ba25b0c379b97d3c168a3fec8f9284ed1cbe960da9f628ef7c49c0e3ef7dc1347fb9e7f9fe7788f53a99c5389dde7612c6ba38fadec82c2ac0614262fa6d55aaff6be72a8a635e3e225a882eca5942de40ad9baf76a0f5e1cf879c13ece0389e8e977dc79e93b7b0890b663a6faae15f644220d91486fad0bb0879e5e2da71b2031b821574c9ada0e8d794075a62c2acc1832328e78f2d5a2b19d8c428c0687f4f8eadca6a02cae57f794387229b72f555d4afcf92c4f0d9eecd12ab73f21d0c52610aad30171415960aff1ae9b2f7ce763eca5cbcec70b5eb09eaebb5dd7390a28a952715d3767d775b70381cc2793a330aeb35dc7e55c83428ccefb093d44895051fa0d67c871dfb990c1aba19e772a15d40d3fd0328986677fea67563bef3a0769e83aefdc830f26adebbaee7ae71389b25079e79dd87d53de54f6bdd0fe0d65d77548df79d7752e5f9d38637633e5e56b21310041ae984e697a523ccfd7c47455ad76389f72324e94d5a06535a17cafd294531a98571d55387fe53c5e632c7756c8559da90a65ae31190567d01ab8e076288bf1474255e7f1bc7adf27fec83ee555c500d690920a9f97122717aab0e841a5a1f987dbf768309e33aa83fdb5318a32fa73cf030a8bd2a304f3d85140e971668a7d0e512cff8811eb316aec85f1278e1b851820d8411930f6181e7c30694142130808f753b42fb982c2280a319a3a68838e713ed8776434267db073afc7dbce2a524a09aea0a72f7d2f7f7c90b5d65a2f96f75ee9145f6aadb5f68ade2357c899bdf75e29a5e4340eb256cece27bc8a438b84056908890a521492d37bf5bb4356a812a1419ff36351c88b1488c2329ea20d1ab3c1e2b8f2ec358e31e66accc6abcab5dbb042497534a63a36b24a9c31677ce23889ee77e20cea998a33a6dfbfa278a728a664f5be2be3edcf5b2c2363f102fbad3863bab5549cde5fdaa63cbd8cc2aadbe978bacd2a95036a40b4167b9127d1cfb9e4a79db40705128402f5a041806a19d320b300b4c78b1af3442cb6a8600a9aab33bb0dc54b83d0a87fef8a6a1a0b1e5679345d48531b500f92c2a8b4b9ee77d26211008ec0e98aedce6aa9a77012d2452849c72b8c13d28e5718a71e74bcc258271c3ebfb4390dfdc8b3c4932febe3f79893c91657d35447fa28933aea5dc865db05e8a59697b62626799b47bcb49ea45ebc78f122317ee2c2f418db309fbec09062fb4ce80445466a63805488c14448192b28e88081861cb830098db8d4d0711992fa5eb837e4743041263d4a2690494bcff1397e8ab556216b6dd0bdf752204a690f250fcbab410b171436b9acc07141a1b356cc99b7feedf0d65a6b6d972d48bcb5d65a0e6bf98199bc51fa58a9cf8b712d75ab4c6ef08267ac7e1d96baf5c5ae3a321cedbdfaa6ae9d7352eaa2eac8db9293f47c31be14a8e224052838428bcd880323284f88e9c08f15be6ca152b754b959925b2f6d4b4dbcf7d2b6148676a10e2e1dd5189e1833d11e4f781e551deade0735967d94637e16f500e9f341d5a1d7a78f0d5f541d12b0db1086258173ebcd2f3b85d1171cf61b38aebd7e9d0b6f20813149b08395990f093838b77e0307f6ec9c88037bb62e5463b41ab34e2fa84c2f664869d36730aee7c0b08ebdea502a447bea9488524c028f9318cca7a1d1cf5931700d092ceca96a58aa49548367ad06dfb87c0323382c957b9eb79ab7b01339a6314f5035aaabbcec2c678924d47876e9a3f2183930586ee3362209d8592e7dbc96dba86260b7f11839d65b9ec3c7ab610dea306e7cee398dc3b8a15de529af4123068d731e23e52bdfc0488c9a18d859fe6207cbf3e7d95962ce7557cd7c8123caaa7323ce5a36618e155f00551a646984309f068d07481f96d388910323e5344e2392e079caa54ff6183930681c3b164950398d4b1f9673206b1cbb57e3521543e5d8c3f9b926ccf1b1e148857ebab783c6535ec3a982e179caa92a86ca69bcc6f8626891f6a83ad369c49cea2bffbc549853c5179db84558a6e20b597572f8e060e5b0943bf2242d020492c7158415796445941cb183124a4a62a410494d4f62a27861e288998e4907289990596b6584008947d39920526a5607d1348486a2db10537c2c972e6f2d9723dedabc55f2d65af9c15e42ec58f26af44a55165dada7a8a2de4c04a17aeb560fad3d5992f80ac4a7f65058f5b1479601117af5d296c509c665b9fd7d69cb72e54758cd526b03ad4be241c13749121982264844e1f14393264cd288231c9c3ad04425045f8676e661331844bdb5ca2ead4be26d8182b714815f5e3b5996bc7e69cb3264664b90962237979c5cce4f308bfe797d06628fcc294b0c3d39cb10fda4e58f3a66f50e2c45961752bcb208f91b11ae1ea671e325e721ccfb183f16c7e9d6b138ce1bd77310345b961d3fee5bd253dfb5a794d61fa787908346b5d748772e1dd07570af4f9f519df3acdac07e34638c710733aacfa87e6f38c37e34362bc733027007990c5cc2713250c9d7e19c7356b2923f177dceb9fbdce916f4dc4bdbad869a1d7203ea7103b20308248070f23e8fd66e369bcd4a903dfdfc01ea0988147e7cfd0065c18f3d19f830c6565ae953e7803ea5f3c9abdbbb39f7c66a6d369b95e03301a7a7b0b7b31db20ec8e6c3d08ff266c342e647e90465595ca2a7f308366939a4680457a627c2932ef7952557867efa77411324274f3e60bb22c40213b405b1296db99282066c0675d0a997b62b3a3eea47094e80f2e1623bac8297362b4a6ff3d266c5e8479e16289864ab218621a28a8c39a34290213422509c74211285ab622f0eb2a21a2f64f1228406259204b114831125844e80841216a5234a4593495694853e67b0e87b69b372c309e6eb25830f6a85851f2f2b403c5ed6c57698151d3ff2dc2794809288804a4a4b262805a1e365415b0aa5306f5fda94a05e840a3e841c585e20111790a88249b45291c7182c32624b0262b339791c27e3b5de9fa4019837a8146f9535b1636668000014010013160000200c0a09c30171401485613c9a0f14000c708e3e644c2e14c842b1480e85200882180662188618420842c830a31033771b00989e5b914918a02ccb6d0416835a848193c8158a2e7ec027f7be103623e33ebbf834e0f38def885faec17607f8f4aefb8437c97fe2e356d89781b8121d651c3ccce06dab39f7f19da82702d3f1c6802c784e13024b422a51aae2e1b50515c296748cc6db0d5291a248304bfb69ae87c0eb192c0dc20895dc036ac1e93e8432b71a89434e19ee4f57530456283977590cb07c90d2a9f646458c1bc282c5f0ae0418a4456c338a24f93a947c18867e0cc59314f41437665f19d8965855b15c16f28d9f19284c3b2ed4eb5a868f78c327667a5c5899c9cf6cc67b04f455562a5204e91b16eee4b9cef904266efd19dc931821bfc6f2f90c2e18521a18387c200085d898bef23d793f22fb09eecaa5ef8d890787020ee0143b91c1fa8fa54bac50c8bbab31ab7d53dc97f07636559f015b5304b13b1b2a57a1621d4047e8f0c1d7421b3984e9b46291cca1fe1bba0d63ac26905c2c02aed201e833b778e19548d8d010512e37db12fed7286cf60478e699bea61b47355e6bf00502a9f1527b490d122a34e33ba27672c97a91606ec95e6393af7ca51cbdf248e90675ec29f850262a51951230ad6e5bd29f3ad6645bc61245bb9c0400085e2c40e89571460cb3fa1604425394aaf83712cc0d4ce872a4930e68e9073329d76ae66e2b91b77a92932e01ad141e0673362f46564fb53b04d7aa9c358f8bcc9b42fec0d23aecda2039bb1f014349b9bbb6eb766c23497a0532883e238aa46fb3a5f2ba3afb2b85cfd8986a3047ad9d2670f5c60d9393e321f452a194d656d064211f21a44665479fa94fc2cb4cf7eeaa100af89fd77edc8e15658e235f355c6cc5c378c77230ece3ef818d58c17289fa2598d2ef586d41d5faccd2aed7c0095fa29e3a8280d6c5385700532e1653c9449dba25f126760aabad2a6be02483d063bd875031c61475359e0e1d4afeb7c7bb670e346dd1d4fc43dcf0a45e575a08e897373020bd21b69a087fe8931ff773d7c99285f53b6737f3974ba323d5a415089102330435452e9803d74b378df1cb39fe2b87400ebd4020395b4b68652b773ebeef05b9b491894433dc0ae7ce39929aacaecd3e0c48649c3ce14d1d7152301a083da03c2619b9b7c83bf0547a6e9b510b72a0e2e382ad7329210fab1f30bc7ccf55dc28b8f3c59499878af43356fda9ebe8f44423fda22a7951cc2e50b70a618c4649db4a0623276b86eb59280c3bf5342d8033678ab32882083b5f0ec2cba64b65e186fc5ea5d0fc0fc17132c68fbd2ce8b1ad9d4025b8c854dcd86f2b992110f73984a7274344b15618c42c251e991a390a02a4c23bf309d6e703191813c68b7693db014aa4246105e70cf6c16f6faf38fd6f34a89f217585ffc819c2624edcf9005443b19a2357dcb595fd403b57af08c3bb192680deb2a1567981ce40f46dfe515bfd4dbfcff6f0d28c31ae519bc24dcbe60e4b6bf329a1a8cf552dcb106f44a427daada6161b8a5ee902f160edaf5643de349878afb583fe58b7b06f1152e62451129fd3590fa992d16f4dcec95d84cd70d47cdeda2c591a4a6ed39bb92edf0c425ede26bb8d2edde4f68f86433ebdd53273dd32788171ffd3243c2286f6cf308ad06cf6b006afe4c3404cd10ab62bea468b39895559a9d0b38e3d9d101f3af69ac31f7079c5762221711be29aeaed2038d7d8de1faa94833f4169f108bdaa843a5f6d02d3921d6e9492c0eeeb74c40de7dad9ddd2eb877bfff0284b34596470e9113a07291e009484e500edfd1682eb56272a550f558bc726d95d43897af8094442b596f1bffd58d54746ddbf89ab910d47fca733764d5972166179d08514df1a237eefee1b60dc344f20a60bc54080bdf67e8f48275c68619e63235c5f357e8282404557770d43d2aaa88975faa91f95cb7c3511cca450ccb072223b67de9c7584c055bc19938ebbcf748a84109434f0f7448e8a394bfcfd1adde39e286bd7fa4c95d99b3381f86c91a65ac2202360170df0e451a63c346e79513625e17bba1d3c56b0e724e9dcab162b01748db176ab40781e25d804be1d309fbf18e9c595da9e6e90ef7bc411bb9e2e95ef9f858be2485cc65e2db166dafbdfe285d186f73c82e5b2874200c0ac648a1e6031007f5d24352e049e67cf442c6fd0a06995e8dc71ec083911330697e2d1c7a51b529cebadef5cac4bfc8ee9a21454fb29e3fa449aef128da0cc360dc1339ed35955815068a22526c742287a1926a9905ee78aa38ec0fe17038791039dc3f14194011af1b465203aedbf976c0d581046356c82c52c12308c5cade897c54c111e9d9131dbf6ec436fb20fbfe7d3b04dbaca223534d72f6ae2f43d628e57ec637da691ef18e7f60240c4dba4152f829f9b8b2578a1b6470b775bc7452c4d03844685acbc33e1edb1d67dabfac8408a32c9b64728a4ca8e7a42c16e7b84a6cab0339859cf47efdb1871103aa318d517b5f69b4a2ecf8469f6313e8e49a3cb108ed74b9f8e9e8f80b1215a8ee1d0304de3a0bb15ef1294ea0930e1cd3e97945cf2b92f318441bae1384d850d33943dc40cb805e344765f739872926b5fe3136b6fdd2d61dc038e97f7cf9303c1369b2d58637a6c5f07cde96a100d5ec6cda2da0aaac972f1c05cb797d4ee1272b6ca43ce8d3de36877b084eed6ca013082c42967476815541d63e754bd315f95c91d3be7d46c3f26af7024e64c827d9eb45249e353a042d402c4edeb7faca78f123645c9cdc84ac435d293e5f6811f318b0e2dfd7fdfcee2945392a9e6ea26aeaee385813fce1b286cf891cf5032d585063a745df640df76951a12259b1217168e69e076263ccd0f5cfee0b3fd7f32eff89ee6a52fa96316fab9d3b17461f276502f39c0fdb9aa29462d61a3d409a46140a38a29d74fe3672929288b93bf136fc2bd987cb4fea2ebe44d59e68ae3bdadba3696cb12984692f2a4930e471b1ab988c74bd1838a75ea0f23ed56f9854521f9d02d37ff693fc8195e07fc31a32176fcd1e20c27763fe34894b636006e0b09ee0e837eee5b9e9eaa0275d894bc184d5c447a82b217a6684bddaa4eae7ab873ce8eeb230413f672b36e41ecb824c259d54025785b952f8d03825b5d5de0cfd3bc8e99ae9d6904b46bd69f20c2e1aee9ed84d0ab9d45c082a15749180a9211eceeb420e3df13452cdce4dec06e4c2177c80f66187fd2da9973691eb71d3c689031f7b6f691aafb82fd4be08d763d738c4d338e57a715bd4024380718e1e2979ed5ff44737e4c196f6a08c7bde0c2ec00df9f718646009c9e9844492b5642803482ecf8c6e4e9ebc29099a5a99dcf6feec9172ec34c8b945fa0e5057cece2a2607c3af641393d88600916ec31ca9faf1923ac850099888cfab3d4016cc2ae32980d8ad42c2e0e66a72d1ca45b29d38765ee2fc1d9fe9322a77080b54b06b682d8630653a12bc83d1264da7aed4cb3b43a9db290cae5b4943ed4eb9ee4481452b99ab278243404a4ff96304fac13a1169a3e5c6b65ade5094119efd164c68aa88ea46ca35e0b2279aeb8e9714af43c0c34babe732b1fc98921f9bfc398572d24d970126027dcc98d58a9f24d873ec465b1d9bf4777d98755a05293aacbfba963f2f9c65e725588ded043779d880a067c2a65e96e5d530dcb7ca5dcf7b05691faf5a56288f57018dc60c06a0bb3655ea5eeb788fc4b5b81fee55dfe2567041769ea457a596f940eac4fad1d5ee5339c47f87ee914c3be06ad2885866c16250744f830bd38d21dcdcb45d16d3b1724022329532a6ff7481f12ee63600f42eace6b8fea91ba49fd2085c69fd8bb7167ef6798e617c5a24e843f4c85391d53f990fac15c3d98e08018d16d05ae4908244e85fca03d767ce45849c6595477fd68e8bdda9dd746d78463c2db9df5c4795a72f830b0bfb2ca5d7f25791efcc5f58d6fd1fb13787e5f51f0bca311d059d7dd972a1c4415b590c4433d05ada780fc753c350bb8c8aba87b2f79202e4094a892354d901cd410462a672cd75afb3647362ca52bb43974a4be27a15e6a214a685b2c5ce585aae6b88c278d0835222b968167798cb242f2573588386a02110d9a377b1a31bd5b3d98598c3f428732f5c69ecc6768cc016632888872d32ce94caef3fa6cd33ceb3611af7c34a2e52492ba8a8f30168426485bacd9504b26b2d6d1304960321b34bb06ecaaa622418e853ac70b59f001e3ccb186d9520aeb2bd076bddfc9b1b0a2f582e6027e1269b1acd8070cb600ccd8a2f85b0d5eb35983c18eb73b182f774b2860042d5785f4c5663051c0004dc1c400a33ceadba733edff8e26e991fafb93be53731578a7f5a2e97e7d85419d39a7dfed74b59a53d983e6f4843e04540c820146d86d133645e1dc719e752d0693982620fdd8f3389c1c37dcace79805215823342a99e0c7133813602c2cbc7986e7aae3c10ca6400659cdb0711d229a898668d61034caa1c02ae4596d43feba41290d46d045215febe4dff193c384fd58952cd04dce819c8dbf4f4095690d24c1f8158726c99d7ec4eb01fe810c43dd326067d402ba721c04ede7babd2c67e910d79a4fff0b6d2d21e02078f7cd0f1460de589e7af2c909d7a390bdc96c85da8caa7cdef99e2764fc18d1d142343bebd81b4b8b3f343ab621dbff133017049f19795e1401768e5cef15191406166d205cb780964b8ce7711afac745d7be8ba6f92e9afedd28fa7cf230186367ceca57f6753916aa8cde5be30c6b1b1065a26f8229621bf59322661a3c8850d69de867da9c27d2bd9d880a031300e613b7e335a8e989e812e2b5aac98e0239469209b00d34b0321035d602aa04f2a711a85aa0f2aefb8be72b3ad5dd595287aa92c3191a01be4efb5747c2f71c573e63e981edc5d114838e8c861302737b7916c324f6d8eb7c298a1b4a9eab4cfc4ab5c3f2512af886c985be2e5541d365f81b1c6e0eb7f544039a233d02cc5a8c183d07a91fc9f7c33234cebfe34be61f571b1190e4a67acf0c0a78a37a85fbbfce0e548116c26d1396d6c0ccc708cd1b63e2778b87187183a6237853ecf31fa6b97099686a15c011d16133e849e189a53688977b38dd8c13c43ccb4a0326179d5717c3ec05b7c0b54bb576c4f2df007a2495fa6e0fd0fc9adfeb89b8252a953e74ef28e831476e11a82ccc9a6a991dc0c709d71ef90f5d7d803766936745cdbedbd1fe4fc9ae4812ab85d2adbb8cf59e6e326d979755ad7a36011a2572215bba538e1ea84b54d55cbca088a77640d451722848251c511986f92f11a6f8097b97715d89922a9f7b49977d58668188a8cea179c7555318881aef46b0823a5be75c6266f95501f2f34efb64b710187e3c4b29f47056fcb69c8dc2d779f22d59aa062312601bc01570aa70eda5c221169f28f3added6675906e36bdaa88628970700c17812281244195e3e9e7283795ead410dcc50245352aa1dd851040fa1b7275b6d15b1c0c96d41759b253ae1acdc01999c99d63a429746f005ff12a556edd0f80770948b44d066cd34570587b2c99beaa4cdf9cb1bae45575bce653a9b239ccc9b25deb010487fb2bd17c7615fb824e615bd93528da357fa7a5156ff16c500c9aaa9158d6e63c80636f2d3bf9af538c9a78ac0c15577094fca81f09e56e0db0e9da2e3eb96a29d311677d47210123cb1f5c280b9dda5b40e4300203008c89777715ab7f1e6163b93c1c72bbdf90f822f9aded38bd2ad68687281cb3c43646c6eb96f8a9acd584fd7d31571325dc24d1de874c87880cc8102c4bd9b5bb2513e744a311a7053fe5e9afa8a4d3f0d0f3bb80101cd0126c40fc1627572b5683f3e5a8ec5f245d197855824a38f270a32d87eea8f8f62c1be8a5ab489f1088ec1d332458daddaef6f29d81e378161af43bf911c63be9b84582a6455193e3838ad4e32e9070c4eeda73d1624e99c169f8bf8d010eb11e47528c40212e2c55019ba43bd867c0bb562bfaab3c5de8103ddbe764f44601e2a9f1931b52602ea4469daebd1f51cf29b31136b34f292c278bbc1ed0f10328d2e3093fe0c699f7a2b9664432ad4d38bb5c759a5fcad2d651e822abad4cfb638cd0460e3c1c592b58201ecf467b12337be038553761d5c39db6cffe76b1843ff87645618c183e5319c429e8378480ee12176d5800098c994a3e701dfb8084500e9495db7fbfcd21a52854f96abfb7ac4beec6081ccd818b01f89126b485eca1400c64f29eddde56568a8dec23128d3872bb62bcb98d88b339afef8178953607c60c0c41550f79021d9e421e32349517676f0fc2f0793b680d764cfa4ea9b8593502e6a04c4a9599872951bbf4e0c17d10c344d91f43be25c7c599cd36307298414db393f72278d449e8c6e06edb014c2f86a358fe7bb3ef82698583ebbed308cc6a74912ddb008ce60ded223441826b86618a48fea40b2dfbdff7cdd7dca15c09040831506ec6714bf9a55993b6a1b5b3f79f5eb77dbb53637929bb3ed543fbb6a3cd8f434c710a6264a352ec3631c973ad833468cad12ba0629eb3b0f145ca0f0d4e7ce7b211dd20ef45a1df4af4ece9f944c6363ce483ccccf5b3a2338ece139b89dd0a63f41c926910273c32d29b43ce89ad5c5f0272fdd5ea5e382a0db2d8e18379592d2a9a9af8bea3d4892b3e93d8bd7d391b828f131bb91a2e2bf0a4fc7d41bdb47ea4b28846ace474764432644b7ef7f4a8db50bf10c1d627eaca148ae0e3a94cb841aecbd07088f09f39db94318a6cf0eee722c62d8acb28d322b8a866c9408a4f663ba13cbdc87d8c62e388311b8800250c8a3699ae98ec3612037463b73af619c579494025a94410c08e0300634f31e0bd09020b2c470ad81c500b84327e6731a65068997c88375b3fffb265d0b0c8c94fa31eb680e8fa4835ae03397f3cfa37c7587109311041c521f91e48f1be5eebfafecc8ef0f69dedcb54714c855d5e48c05b98c609423aec5ba6d29e1b1720a5fa69f7363923ee55bd81506e784013c87138ea6f7f45a12a0bad8d0df6e1eba13e449e2526018a000185722362d10a790b052a490e810516f96b5efde7d29530f09db88ae2f3494ea667e0bfbfac394c6fceda82b35570205bd471adb24299b28df9186b35eca6c69352e5e3aa566557a6b40a5f66bba500811996e59fce88f6fd636849ba5757be88d86493cb4bc9b2e28f4ad5093e0303fb79732eddaa3a966247aae5746eaea670d3684035205caef2dc3daad48b98f288f211502dee4541bd64644e1ab8a2f0b98bdd78c0e041ade0a0371542644385b0115d79c7746050bc39456c511b9cc7b460a21aaadf00480d83f2babe0e245891bf4aa1363b04b111a929a7bb841a9337c4dad568cc172744ae9db165f673b090b40b5e378d81352d9ac507872c3dac047f74974f574117a419214323984f12cd69d60c35cd3690e0403ab2c91fc8ca32acdaecd5ee65dbda7fdb14297c358fd04872d467e7989b79f2fb527bf0e1a428de0307381c91a6df7c3ba4b736c4822590bf0804a0e8a742e2de1739e825cf09e47362f7816aaa43f1bbda55d2658791a55f53a1aeaeeec5a471107611ddeec8146439ddacc43c967855390a11a7821147d1bf82b605a77564d89f206d2b200d1a2435377c2cca092347caa74ed3c5dd0704506fb367b8d12c06e50f8d680b01ce01017553dc9d5ffd66f1d56e35e8ba0f6eb90869923bb92016708f126b0bec78d003c2433cb61d03adca888fdf929327e7116c13d1da8c6564c2f2363d5007e48e941a848390f15b5a25c74ca0239613b3a5df610f2e49c79c92f743c8060b5014c8905deb2efb254979b01ca89e9ec70df822eb13420ec6797c2b3af0a50e8393410aa8c1ab6507a745761f854e37478f5ce54db6529afa1bb5048e9f834da64ce15203e31b7db6653992e51648a5a031f3ed1e5550de6552788530f1d63d2e27cd021e74f37d000327638d7a08e5b8ae12f030a537efb13821624406a7c36705c6b9b3e4027f12acc6b778f6a5a040ecd3bcee0a9d378bad94b97a9485aadebe2ab6500edd0279e1d085c118b2ecfeaa87c8630b5794aa51df3d4b2022ff58dcb989729a6e3f341d3e5e1adb25bb6924f7fe9a72efba75f221a78289b13fec963ae515d8538f5d8054d4aa5fbdbf7ea9c128ee97d24792aef99736df33feee7761ad491ad5352d5c4678e0314e84208bbd17068745e7b9415b2c933b958479831f0c328edfade14ce9f85ee501794ac75d19444782796bae7b5871858810cb0c5d41e0212a7aa92ec751a43b09d8f22bf5615e3c7fee33a5393a0255f74670d97dbd2021ff2bcf97f11be9fe641ade23b06386871a8cb6e71c82eb23fdbe746c556a108a4dc7800eb7d4674132e0f5adfff8754ec6fcfdcaed98667a4eb1fbdb677e06a8ab297a9df14a8cfc21efbe87ed8e480aa1d01309e09712bb01f7dbb33e40be4fb23d3ad57f4b366b720bdada3ca76a015450f2c53f7a92a83b72f51b62baf7e4ae5bd6627d48b04705697de4c190f68e22e7f179ff5607c0dd58bd89a30ad2261288540cc561e97df78174cb3820b65636029a43a14a3109e2a4374a3fef6c246fccad81418b6071dce7d10136c1b44ba84098bf7d58b6b375c28d074a666be0a5f6cf2b2de83d5f3ccbb927657c8da5aafe15b75da191ba5c005fac88593c7b8dc0d4d990956877462b51ee5bd9e3f90a382856d3a352bb911be0644b85d762daeddc6be7abda790b4dc95f02a594394f9083e133e4ccb062f0fc65535b2a8f4f08955181238de92ddc74e039c3f846da46d400f61773383cfb8da64c2be1c36a250452e92628715cee3d9fb94d871a11d0a6ef2979287d668d68936821ffaea0aac1f274f4e396343c548b83c84609b0e1150c5843d70f82fc0d0d7a790772cb121672942b007f88ee9bbd79269cf4e91b6ea77051c09507f383965d4b82a3900526e949c12ded965d35b96b497d15252ba1210c95df063d29ae342015a53f470345228501473d6e9a74fa613c8c2a3dd63c1c5fd072c161c432edbf025cec5b5af29f17a9fead5e50974898f4986482279be1f17349c99cb9aa57d1e71ed3e0d127d01937d4f63018f5c67fdc6a67622e1e42168576e5d039f188a2a527f1b1dd1f988ca81ac8c3e0f83d81002ab3aee53bcac33279dd5374d1ba16979ffdab7413a2430bb9551f472ea203b638ddff41c05dcd30cadd116a6400fe68843ddefd5d5580a681ec61c4cafcd848375912513038c2cca55ad2fdadc7e93d5c506e23aebce8a2927adff6965cdcc621949a941afa77449caea66e6e1810f8623f00694d85b41f81c1e4db43a8b39e2fd5a5b21699af41625c32177861d92c34d0844ec18319c440736d198e17803991d32e998147ff04b7e5f6eef5fd0705112c3db9b9e04ec7fe46daab09e53c22c0b600604cb65b8c19cb58587cae1289e9f01160ee7d82a289c7021bd75b5a47722ecc3c26ae6864005e4be6e028b8dcc95db416b950f50f7f6fb57170826489268f4bc87526cef05970c4480989cf099ed8bda3ade779067f2d8c0093b27f0dc003ec048cb60945a206c05646cd5a4eb3c500660b4560b4af0120a86a404bcd9e659edbb7f9278009bfb7789735fdcca68b9e6d5a2cb19413aae73e87dc16c39e48509ca94f72de81cbb718aa03e5051d062541650e8436d298e78fb38bd26b02dfbf76ce9105b83e6263bfde4e28526282a7a8c2f1cb15c736de9b13f2dc81803a077ad320891df05d0e8d446a487f4a71c445e9b11996ce27fefe63e4383fce7f7ebdde2a94b9708bf11bc88ca8724a1cf7e8c4f8a795ca8e3353eff372450cd6327caaaead97cd858c3ae19a085bef96a5f47d2e3d89817149d93f835e68dfe7f8b4fe5e5113e02037df3c9ca94845a23fe07ef2e3c7fe58594535113a55b652e4935629aefa55ca3825df96b8b56527dd701653eb8475378a4a785c1ed3aca9ac6d3644264221618a6b037575f4448abd86649e7742e6f912b13a547434fc205cf115126f7ab7888458fe8a2e9a5563ea715ee34a2292c91aa81292238d642aa2940c670e1740e0749025b4cca8da944a2891cf922762c6014023c2ad8865cf709d6ef1a1fbbde239c299633b9c9b3142acc5d28aada54eca349fe00a443ec7076d67091ad02c17ad7690a7ef3f7f38c3617e6380cf6f867417bd0538333f3435a090005035f0da842d32f4b135c3f511c40781574c8d361bc36b14f286e0566d931f76b419d7a29b47d20a786fa940e6cd6995c8db55948e16cec2a1830ddf0590e7eead4b6a33d1e21daf910defb2bd191f8e57ba228afc19b1346e70252fe2c2986bd104e8280b8e5efe1d9f4f215d7598b2cbbdf3e210e500031bdc08894c8377f8cfe3c32603d211ba7a4b849b82c1fc526d7f1b1729281e95dd3c8500b9b33e5b9002c74474bc8d910e240d7e741a3cc17f9931153642614e0328baf1ef35051d82f47428ca9839c6ab0ab7a805295d8c0748b18261016dd0d5dbcc7e12d031986b067ce84c89638119e81776b7ad322bb511ca04afd103fb17f37ce67a5ced8e2b190d7f7d521cd75e1df768830b5832642c82d99e7eedb976bb8496a4091321a9bc8de97025536044c416166523b7df181f7dbab106974ea4c6732931df3909ad32a056f3397181acd64f70dcf68b1826e46ec47d44ece7198b756bdd67e805aafc7684b12cf49e3a8768965efc4b964cad40f16e5a979bcda32448fdbaf9929301a2d3cb145011c36ecf2ee0e81cf649459abf00e003e0ab0b9fab99e24e6666903adeaf6f8dfd9ac7491afad69c1f5fafd031e0249b9edf7b20829def75bacdf5d8c49006ccac5e5cac51cd1af40670d5b653bba6418c9fb1336feb9467eaa902e0438ce862cb5eef2c9f7059453c00857756c37c425e153d3c944e4afccc99e0094080c12ac35db4a6e52a0ad50ae344345bd97695ac400a1d0c8f463062e98a34bd25677222374e829f26b9924ab9e703b01daeb1083ded6567c8f6bdb4027a62402355a4da9923dfb4ca000ff4eaac21d134c38bd05c5b1588189d88f2196a09687cf2a2a780e992afd03336a5a390b94662c1e5fa8d1129bd943960583c0b65097d0440ec8fc8c689f29f40620c38719a36cde0939c0e53c2d6a95bd1ad755b49e1f339fda32230935b21c22e1c9816788c05cf67156ccadfd1cc6d691f77f2ddcbc51876420ed62d09ca8343b184e8d760948b53c7ccfa4eb036f06e64537cf07e73ff373e83c0245509e0c832f08702686009c309ba3d77aaeccc416025e75bffdec0698ac90a85965021e4a2c42d6999900c6c8f4fa56aeeb399313c1033798a31bbc30a0c0febd5c1fe906261b8b31073d4bf1352e72b6489b453c4b07509ca072fe8853964af4561c8c2037d77705622b73c321716b68ecb9c5af3f4b11cb09cd4d1034086774a33b0d472ceb84110621988dbee5edb972a3f3158aa29a1acbf19e2a27d72f22bab16f1884aa700871286bba4bb8ebd4c71fe5b04ee2acba62113fa1e4ecd613785870e25efd81138970d621315db34fbea3fae56868c5dc290e08d10f85c95a4f545b9b248dc6074d2a3f4e2f08a4bb7d7cf51c6a6ceda59ddf8b3db3f8194dfd57e10fa10c845d9cddd4edb5e0752cc8e656052ad06d032864ac243a41ac47e987e1407a0129d67bc554c918249c5600181026128a62bee9d726be0a0a6da73030893503f5988a7efe822824f68a57c54408496a3903f4902a7d395df98192d62f75b2a2d5182f2f248e6a1daf0f1cddf12a06c26c7d27bd27ea4b335a8c544d8228aef7fe4556b94d3af6289a5d7e8b45f95b6cc8ae96cd6b4030d92e2f1e090fc9cc54b005994d07e32f93f03be491c338be22422cde8911ee503548eb9eb48d0a0e6f130df0a347dafef88e4c8c04f45dbb453b3585bc565989b3a95009d4eaa2c91ee9fc04d6e699146bb786b7f3829cdfb446812ce25239efcfbe60b851f13e3bbfd419c7aaadd21ef552c585fbaf8204c9854c5fc49f07daec8b2f0b8cf517b273e933473841f8b8ce4b96d8e9ed177cf5c77f84ee2ebd709c7b30d5d90f6d9d47b00e071c90db1733bda5a0d62ab1c74c3fa1777569c6a1ba4056a60020c835f6bc5eb9a13e668667b0a123f794a7e20639d7f258a7932240c56eb802616ba1fc2b8d229476cdcc57db331849d8e7844e905d752266b2b04a65debaf453c4363809b859dd165b7a33b1143b401a3194e29d9635dbb52da1ed8610a3d5e9b51026dc960b27da8d0a3f5cc496f25362d26b697593cd27af45975df25a314192f111b36f0daf876b4cf9f3b7d1bc18dc66f21e352ac4209e5438ccee0c870d319bedf80f595551c92cf8e851f31fd912b11fc887d405ee0f50b3bf1735c159200cec2b95bf7537a474d16fca82c3983681be4bf28a0cc386f2805467540f4389bbccd8f939f7ca4e9f4f2501f3d555e0b1481ea260741a571aeaadc026676de7293bab0fee0fc083022ecff31efa53baa6d6ea943d28af89c7489085cea2123dea6224d5e7b30be4118f91ab836298354e3e63643bbae88b8acf8983ddf4f864fe16d33682895b0f724e3b644553e2e725f62a87dd6e21059ea84a4a7a4e6d3ba6748627875df80ecfe2720df104f9bd2c4e02e2531ee5ea60656b6a592a42435ae4e5b5c56a20c4dec0e32b35f3d3d3910a8416a26d271d2a37743e7b7ec35df88cbfdc4aba41c0618bd0e57a87dd55190aa3f505db4b9a14c2efe16feb6ef67297f0610a097317a76876fa5a4913df44c20bc035f40e8bdf27b11455e8014523d3b0d9b914550436927068fbec3f5d221eff2db982a2f24b7f077eab8f6a101d483c2712ac74f203ae5e50b2099ee5de0ca44d39cfeb552393a854dbd4c19358b406bbab3c699ddc12e6ca58e1b6ea04211c46ca4ef877bc207af2d20719748b166e0fad6a024135f03d5d2beba20ccd89534f9b09ca4dd56300e35ff8729ca329a1a5c4ede60a96a1d29b4e27a87940d269d09506b254e2cd69ea6d029ea00ef0d9760a2ede76fed5ef807e7fba9f9bd2eb4d75329cc9060aed016fa9e490fb8c2cc7e81f56070c2862205e9dcd1c7916dd3c153aada1c3e7d3c35d6bacdd24069d9abd810266dd821183b0afb215247120729cab3894bfaa2f9dd0aa6888abe7cc3d67eb3725f154a4f4ae92e6aab3b017388271fb49e930b9383bde460c3d3cdd291d99cb9e3a26649a2a5dc1535e9a76dc85998458d3c89e2a646e82354afe9da2e65e5f90b4b984829db9f9aa23023a48631112b101058b1abd63eaa4f08b1706e74d3d835ba48f2424297c4dbb9746d7358c0c963f19ac678d15e6de3851102f71e4144c82770f32705f484dd306de2833e55edd7827b2c6e6d5e6e33855d8f913548358714ffa018f6fc35495c50963c147b51637280ff2452b58d1446e7b262d3336c19aa885bd053fa826128e299e55f4bafa309c44dcc79fc262f2562076af3d2a271918e43fc2532e89e3117934ac24e63b648fa44d892a7a134d1e79b4e9804aa692ef7b7376bb64d8cf9758a4d10bccda29f62c0a684330f33e01857939a961336dbafc69a2ccd298bf5cf286f4e2f62e6b403e7616005d1ee4605c394f62954dbf11c5f2ed6ce6ec4321be122a9510da044c404f86abd0ba2bf79e3dd63d771826361c50580ceb727574ae7b78662fe4d6cd5d91d7077b86edfc1d5582e9d6ad654f1938d73cb253122baed0e42698eeeb33d7eca46400fea01ad96ceaed26fb680001629ed44d3b916b10623afa3e49ffbec01c185649cee3e1c4f410639d94eae10363e6733b6328637b412357301d66957c39a302bbafe346f4aa2131dc22d18aafb7ff5dbb5da507c97c974c7cf23c6c812b3af8283ddc0aa2d8a283526a0a92243a4483bc83e7a3266c500bc97d921ac499dabd7ef82c20d4b41977d89c8140e6e34b73e94244ccb8b731d9dbc3b52d30539f0879b84c441c22d67057ec66dff583ed8bf0e0f4d99d93ecb3e828bc7c3a428120d4d1aadf56c5cb4b27975983b21e77a5240a7bbd900fef2dd92e953ca066da7cf0a9dd1cb9c6122440fd6ba6aed433f29a149df1fecb5b98717aec49d53d2206576c1363e4806fcfaf0941b2d0625b2d923aa8d0d83bd497ad5ab49e6ef6d0c54088effb038cc7e78a8690b4fbb2d0c0e009b10934ce02c856fe524f8ac154b9df090b3cb112457259953e4c1cc5ff96940ab17f1ae828e0df741978b46faef0f9c1b40f6d05d717c8db81998bfcb72ec962e2bcbd8afa246712e1599288d6a21ba2c02b864e3844dc33b4058a086d7971096623c282c4f72539aba661b56b5d2694e4c2431905617b082c510acab07a176c99599a5f8be0b5b99952339d3651bda34e21499927f8da839944f377e08571c2f2d2956453d26b2c44805ca0f6eb00309092758465c337f621ba5535789104766d24ebc12401eb45d4a0d8ab621dd9c064cb781c29298f65ed41248e025dc9200005511adf59d1a5603bbd07d8ef56b27998c3def23b11fba59b376bed320662ffa3d15a5d738f2a4ecc8263131e4f38c45e8c04fa7374be031260839b70261be32b0fc68c386549c02289c58a02f7bff68622691ce6fe65b1f61df95fb3149b3738f85e2d1ccd5c2aefba17d519ad611c2a5607d8e50f58941f5bfb01ed3cd5cf1c78ab6552a2882d6e54f9d07bd86b16bb26bb5f9355b8698ff3dd275e74b909fafafb2252ac78014221294791d8cd4b24882b4516e945a3e30f0e18a5fa20eea3c2bfa93132baf988a47052641150c4c7110e49751cd1ee6e09d14c2cf23d15764b5d25f24bf18fc46e5e02419c1479a41795199f46b0cfdf11ce4d258f68221e9e5068ca712476b34180caee9ddd6fae356f902048ca71a477cb485003d8e7ef09e7a69245b4481bf8aaea355b5bd2ade886e05ca202e7ece079c4b5bb0e2ffc3c4e4e405639c5cb609bac678159f1155ea867ceadafcf77a25860479f1880b8b95c895d55bacae1d3cdbc7e1db430bdeed1b332d6b2f4166db12ff4f7425bd8fc8010b4f2207ea74911d25a7255eaebaf472ad1e2ec45b4ce9c6ff362f2b317db711dc7c941ead659765139df6850f8eb0627ac9241276c0cf992ffbeab1c34f594fc431a855b4f4c5ded52ef21342581bc618a8be87050efa7b297ee5497697be9f27b8dd90ac4de0ca2189fc649f1d6043901cb9030a0209487296e14aa48f18e3942ff9734190c9ac1e79477be06be0354973b160f13ab9600f80500c0c9e289a9b0a091837273e372dbe931a235bac364c324ca98d5c630aa90172ecf4efde6cef80ab0a73de01f670c25ee55d2d07e9e5cf730f9a46de300b0a25658fe2d91648a49701d4a1c26bcc814a42d4f6e7fc875be9fa32e116b096926d240adb5df0f8df12bdb057638f2a5830863753564977c77be4c5159fd30fac61d7f9019b336e532a8e3ddc9cd1fabbd14a67ceb04cf4c6afb8488b8ffa1740cc9b0ce4a2a5d7005b2bfb8a4aa9a4480f363450502bfa5870b8c34ecb25ab2253fe36ce0510797178114d08ba1b16c5fb50336fcb26e6ae784dc27cfc498cf6ba6c816998c0cd3611d04a15cc866f1830a3a0137a0f203619977e0fc3a66ff4fb49c394c79aa228da0ae7234abbf74e8290791fa8c3c004c70af813204e11584d341e1f411252d2cf29de6787960647b6a2cdf38f8dcaa4e6992627e1107e2cbe0e8805898a1d1602541c264890f363884839a328ddc88cbf44e82b2038bc7d87f2523ea82a2e9e0063ecf478cd55ff0cd9f1ee57cc33b7d60a4fa7cbe7ef8758ed9a84bef51ba6fe91c5d8c51c94522c4ee085931c1fecf67f6d2176cd97202061d9eaaea83f58ae223ec22086e91ab78405d7cc3c794fe9e9d7061724cb6a513d62ef7f2f604dc5abc7f644470a48d406e34cb3404bfe426b4983715fb8589ec296a445432e2689eaba4533d3af6b4fa442626a3c4035a70a1eef8a65b182372a4278b6f0552aebfee3ef412b8721bb1b2a5e0cb3e396dccc9026d1b16b03ffdd25f1bfc5b97ee7b8fc338b56a9769d66ae2e9fe04c8b2604e790a12af3665f0e5f8c0fda92c50ba13bea615276458d40cd25719869594053628a86404c366f55645a484604c000fe6c8494cdff65f7be3c983af618f68f32b77d7806c7516f058659819d22a02cec012f44cbe3070953879b359e3630a930c81a152386e31268bc65980ac4f3fe001fb1898641976bee1be8c58833c9bf5fb0d5651f3610d447ac4021db39bcb78759a46640540e2c11bb86eb01a7f94ca03a0bc2c57640c12fbf7ed8573019f8b4a3795602a9518500f0b6fa28229f27de991f25920078886cd233cf9760b0e531789f79e0374238bb9031ba824f33280bbbb54cc481a51b38ab9830d3c88fbd1de85d1a7db0b10051a704df5b185e7bf866eaf11c10335dc822da8aa8fe9e14384acd96e5e6308841fc09ae10887ea8f0ce1ffe8f0a0d86a8090f97af0cfa887d6cbde2396b3b334b1e98af4d43e7f544602db793a5b6deb281040e410382d446c4b4376e07a24dcd80f6b45bde0f24b48a4a74057ce1203ee59aa86c59e049e835b614884e3d09108e76f81f32a46843271d186cf14460815ebf44ab97587c4cddc1007c1577d207208f991c066eef0fcbff30fb0660d180117c9703c0cb2c2198f71f036748136f84dcad68710d29c9ca8096c2c5fcabb1ccccc6935d0c1209e5b903cbd2d6a6db3682bf6cd28eda60d5187effeff440d88b33bb4d8e5b4f9ecfe93ad4ff73edd7cd6de189f3540cc3904ba391360ffd9ce67db4fdd7f4eed8c4f1af8e4ec00ee0624f8dad9cfb73fb1459f8e36f76ebee17eb6860854cdfa8be2995345ab0df8e161c3e448918a645d6e947f711204aa7d04e3b7a191c13d74e409a81b6bedba82756a7c2dfa14f53bf8e365fd372ad95f13c6d14fe822739188704789b5ab56b5f19fd709b95100714c17ce51facd0082b329e702959f1976f15e55a9ce52e3eaeab6aad778d68334ebc7cb9f189ec84f2829efd039d32557eca8ab91f4f1bc1bf021c530a5bfe9c9d78c0b748b06029d9c8a4707a3daac1d71ac6f854fdf908bbf65a8cb9f4a1fb67843b3f85de5d8b5df1918565ff20727f1d72a7166cbb96bc0b17ac89d453254f3116cbda815a9831b1d70866afd43ee884e2068eaffdb736f1f11f33aeeb180046c5d99e553495d695bb48ea7ab245bbcdaa78a5ef853502a74ac721850ba8840f1a411d4014a91dbcfee1b75409eeb45c87376e3559e4b7b213e096ec8759cfbceffa4099bdad484e823d52817df05c2381794d2827218fc3fa6a12cee8e20e039a4e903ba7491895a00b8349bb4f596f11c0938c835e2817efe69d1eccda905197b1116800e96a0ca1ae5a06a8f69a5a38d0b81f1417edbef72a501b74864505ed528cee60c7088646608f4452cda0531409e6231f8aee27785f5bfabc1fc4fbcdbea8bc4df61a890c4d37cc400cfb81acf003f10526b8a8ebf7c28e9cd99b981b8272e141b646e207c0b72f157a24d493e209d03a8cb83415ee09f886b0429f9f80089b94193b077d2b747eaea045a29e612f9260614f13fd9a1c0d43de6e768e7f899ff61a30f1fcb41bcb780ce589478994a05067398c3b72f3c66c537e48a6d11c680a688a8e97d637249fb0a5267b3c3690611be43138a32e870b52fb3f21159437cb3ec664268e21c7062b880a277106017495af0a0a8159430d780dc7d82ba5e475b2ee154f90b6aec093db5c15da29bb806f6b7ed7e558bde232dc75f60034402ad2bcb37582f880355ff9d4f3df4bb763f9a8899034380cc315c831699d1ae655d843e4a6ea27f29d6a32597cbf3c9032119f724dc5c4ccdc602d18f7365e690b00e7df4125339ec5c44e92b5f790ab75e89bded6f3de909f2bb18a1a5e94ac654cd0eab3e22d257d85a3853d706441dd209fcf480a75db76a961b1c25109d06b7055f5b88598312d3a84a537ffcec37a82b65d2d666859a22511ae03382eced532cc1974c5eeec09242584a1aca28be03282f243f947e643348a16b41002ac4516a078140ac8c73b9d94229395f6664d563ea26109b68491d070019627809a4b756ee2fd95229c6e9d7859b28d5e2cb9e46f12628d9b3d6f4ac3ec91cd02aa8f2ef8efbfc5addb33f2c3d1b89687130bdbefb5c642ce92935bc0265a986d2b57358c9eeabc65498d500dad5a003d0132051f40a5708003ca111a00a00701ff298af84bd16e602e52630ab4a6dd8cc7b9b7533adcb3a152321e902c3fc8f4b6688cc33370f14da751e68d291c81eb0e22c1ceb7feb30e20998779bda58a4c7db86eed347bc880272bab651b18cc1b132d59a7a520f4cec3c6c4497ec6deaa824d46f7f20ad1c3562bafbb96454c551f9751e2e091e6d087873e118415d85f52cbe23a1d98256785376e719d4e737e0b881616f6a6c96a8489ec410fa152a74042fe6a1181c7decaa2ca411ebe2d9fc6aeca92ca411ebe2d96c6a7643052e010af504c309f0b42f41bb16db2e4dd4463f0f669a7c7914972321d382dcf1392e330707960cd21ee1a578b7ce0bc1cba10377ffe220e93c38db3cb5f744e414bb6354eb576053d16e59025474619db36d9eb764e16387bfbed1870d5f072244c9f13d54e18e249ffb6e6d6afdc9a4e24fa6368e03bde95f02c3726af40aee01ee0ba09d73a24fd312f001b55660271805afeb3ec7df2de941706ce48d44f41e60df90106108a4509cf621b7cf686a0f62c6b55247074ae0e7fd389e0c0144364ab42d6e5880a07b753d655fdcd565dde3005e89e0e1f5bc9480ad8c3512f7aa08dae06fc5d22da27dd19b95909e421a527849e6f6e5018213a7b86b1335d043d0dcb8cb03e0597b74a30c63d41c724fcdcd772ce7f68fd21b9336460714a4fe057a2343a806e4728b72f524a5ff3f3a2481d0da240a54d565f903557548e1949e516a616b5c836823f86f43a0b3501d187efb2836e3cdb7da4829ab7a8e500b849c0c4810b16afde7b822237b9909bf88d09096f5df11fbfb1c810268638216a5a74c645a6ea32baddf47aceeb9695ebb57ec2c70d7ad428d756925482bde1de323973ebb52d713c1ddb72fd24b7dd177716f7ca95c9166a391b40a521b02b7a303ef1ec97dd6cef809ea4a256f9c6087cf11249f145d32094a7fb4ed5d050583d7830ebb4164da953ed051661833e084221232e0f24ed9aa9c649d0ea3423681616e35ea0451a3c27a3fd63b6ea25008a3025870c0a433f5d540ff3c066c075b43f8c911f44f15d8771e93f2875abeed9110241823290e86745c73f723aeda1e656af63343d12e2dcb0a93d5f8ea4eea63b7a8940b059b7a53fe3a1dab3a535ae3ce6756e5b23f598e0dab8253a324e053b567699dcf47a752842dc87adf949ec1535205ffd99fcf361b8a239de9b9794877adbce03bbefb099958432ec1ef77c8a24f19bc7bd6424b2c852e116b36315288908658a7b238131136da0fe3c19984612d69885c6121b83b4c3d1c63bb5548f7249646b3c0c876ea863d204b1092b568d852e7e00c1d7a52531bdd9090504f8cf6a96fa83d315c2f300b05b4d02eb5775fb748bb2a0188a4d5c89e2579b5b9fc1cac830ebadd64c7a03e7dfb3cf754471a9d3ee89d3b1399cfc5bf418c584106e1e223c28372ad7de1a09b6ebb5ab79261bd9d3dd7c6c9605167be20355cb963b35aae53ff33e2e0b838eb005b17d292358115b5de6912c744005b0990879690f1ee6470089cc66f8c3befb8e1e0b9ad36f9273db00fe397a0a70fcfbd0b9ea95c35db3c4e810aae382caed2f4c2ae27af5d6df9a5e16dbcf0b74e04e82bb0b9b5edaaf849430db8a716c874a130c32ab04a01724c2d5a8e8a326ccc726c43fb2e3ef4af61f30b8d8dd3cf84f002230935d5c3c5d753367bb36c5cd4ad5f8213d75044687b32d791eea09e621cd21b5ee8a39647889e064a5d2b4a8713af7440ad457ab5f44da3fb0a129a55b6f44fdda5b827574b88a182490a2de18e10a1541a6db1b23d3d922eaa731d2d493745fffd30c9304fd2c18795ab144d5af9ddcd047240863f84ac4d7c7f83c28e2459b71e636da72d487d98125e8c5ecc157264232add7b2cceac3a53f4e4040a801538cd18ef546f69ba6a8bf9c423880401522ade23acf285e090a874c2991523154866c077f18e1cc3ee7711d97bb56c17b0ee9f20a3f421bf3dd4c94abf6ae86d2c90d8f18b402e7f8398fda9f2b1cac3cf0f880408a43cb699e52ded9b5d0016b282e8da9657b914bfa7bda68980990040a959859d7822ce6b9b69820739b1fabc95fd62251fa7bf7461152e6909454fcb6fafeeb4aa12436620a6e04f1dbca7d3ccd3d41ff95cbc1ec2457052f1949f7ca30c53d6635ccb162ae221ef680dc4320369e7ec9a793e033da29df53c8947f5064965f3edb18e6a8ae122bdff99fe171952feca3fe8a17194795c3a37037905804280b53d120da0c23d36548b143a6c9613d772a3fcf12a599d3ea6262dbc69ec3bd4b9cf0532f2408f3b3701463cab0321321102ec3aa3982e47ee59c8783a856cd6fb0e009ccf7af5f5852addc9256ae7d528114de7051b73b5cefad501498dde1987cf70de596e5f5a5368fb15a7e9bce3c8b85b76f96da7d7e22fc7b7b7f11d6e7a6b4fcd07afc856e25fc88c2e3d8581046f1a08b10d4061b99f509953bc788c229a819771868801594595951222768ab64579b6a1a2467c804ce2c92a8b74e071c2e6e4a675c6d3eb7ecb8850627dc0a32733d4008a019401b8557a07ef6cffa0626524980954515920cf4018b282be390456ad41e3dc013a723b94196a6a9295270f75da2241b31909c88ad2db46d4e9d9506709ee7179da5121d000eaa70dff69ebf55c459ca6b3cf227c59e7ba6854b4f4761de18313876b3ccfb741e83d5b785a3babece90f10c1ee198f24c774f9025891a38034342b77e31b9f78299a56d2bf1d2783ad7f31b7014cb403dab5f28b5b304e4a4e07b5bebef2555b5e049161afbebf8c241c4168f0601d65f7d361bf2376674f57c7e04d679c9f6519f23a9eed158002a8c2b00282d1119abbbd30e79835c8269e517072c993d7f26b00f7847d696defbdb7dc524a29930c080946086b08edf1c8c634a39836e79c136c49af1ea408096cc99c2306b1d5edf43a317842bbf4d61058ce39a99f406754923dc858d76fd8ac863c75fce6c95357b5daad0729420a21c6a45b8f396210e931d64debb27dfa50b7a00ff5d61078baf4188b4843d54fa879031a7c7bf7389a2e65932e4a1ab5c65ab5dbddeee66e6a130cab479b87e4952fd5949bd4366d4aa772725ded6ae79b73d53730bc74da3c349d6b0b4384c18250c1989ee8c0986ea55306e023939b20dc44a95c34ae85add366719157cacb5272e364c94b29a5c49c662b9d67dce8d0d84d125c71603181c3a0cfebb49fcdb28ec0f786aaa1cf3d7733c4f3fbe9f0fc6eeeb9077e7e411d439a73774873ce3b79358f5ffb053def4f730f1c6aefc0f8f4d3fc0335f740cee3e71f38dd03371be31752bce0e2c592adb56a5e35bf165bf772383457f2abde69a0f50aead0ac5bd7c0a1ea1a18ffb31ebf5a87a6abec163323602e171294bab4b0b468d1e2e2e2050f2f8c4008b5954ee9850dcdc5e5c50b2e0af3543d6d5ef0a14b697aa1b5a9e1b6d1c19bb531c2b5d9d86c81d950816203c66b8385e402c99a26ac247aa4a042268a24aec8408402498c699ab919e28619d8f8a07a8d0dd36b39af31b1c161d5ad69b139d235914fe0ea22094f172dece42c604091c385125c5081b1982e4b893652da3091c282b5e50c8b69cd12f991694d088ce8ba069c5a13c35553658ba53543debeddc24a819ad9fb7c645213859a2790400ae9cf0df424027090ea5598450587de74ebc997aae62b5f160c4950491a9e4ad52a0f5b4f157adfded3b72fbd7eb54c734b07f596cdaeb07ef55eba915a2bab4acbf6ee1f60f523d31658ba8f4c5b4c99327600a4df5a0b447e8d9186f469e7df393f1d2d93e9a073e680eb0e19398834ca90445a20e565f8f3e3d2a9d24baf6af9d003c281e990cf7c6bae5407ad9f0e2a935114e403facdd3dcd333a4db8f85022c7bba83f83772d0dbb34cb0002449a3637f64f5949ea6557dba046c8e2c1ef0f4992c1eb027797a7a92b2cea1594262d2fb4854e2482cc6a214b21e9694796a851063473da4d54302d3a1cc971ed41df4cb7eb586c0314600294550a1148bb10e7088c10921489e843d44cb21cae3e71248a1721014f6180bf2a59cf3afe3c00e4c39ca7da450eee522cf539da7dc47c7f9978b52ce79118e77df4e9471bdd5ee1ed8ea0cc487e7f8ae702e2a8ad82886031621f9c009a1a43c95f254562188d0f499ee014d9fe99edf8c339608b821100da81c678fe9b341111c639f7b1f6814f340a3d88e09b6acc884e9337d84e93353983ed38184106319983ed37f841063280f21c63ecfc39679f1297633e9234c92309128f7c094771d053ba3f043b6d2f4992e3f203e528eca45452847e54eea183b42b5126abad04cc558cc033b16bfceaa28e3e69084d56c51ef9a5b34efa02374b9469abc2460edb0036c079764c9d09435036e8bc153d702b77bc1ed33d3a428a38d6035b9f4360b0431ce0952954a07365938e026f83aab094b09984b351b638c91523ae7c4b62dad946a20e794546a4bd09e4a584a245512638c9146ca4282b76f24f822c1da37126c5948706521c1948504cf6f96122458d280db5948584870fcf6ab4dcb0a016ea794524a29a59452aa52e9a828be944e4a5938e0f61963ac32de15a51aa5b49b2de79cb46bad2c2594522ffa997790be03448102c294245b929c208629c66861e43b40942f67cea49901cd39e79c73ce39e79c53071cae5673ce19e39cb7351f8a2ea68023539a294f4f6efe6f166cfe038f1e5a6bad8dd1436badb5d15a6b6d64e5809598d0cc6abd1eadadb6d65ae9b49212790a93c689c5248b34ac25787e64cae24c165eb2a8a2e924016e9f79684ad60cb876679aa34a75463e9d916ae4933c23ddb071baa2746549e90a9759954969add66ad4abd66adabddb9cdabddbc671736e1cd7759ef7759ef77d28542a8787bab2f4d2534a575e3ac65c5eca2af2255d1e9146249223d288cc21891c12a6294c99a630679cbe74524be9299dd452fa4a4771d332377dd432376da487a420b9cc2e61e49223b69473525a5bce4969ad96566b35edde4dbbdbc6715de7719de77d1f0a95fa50a914c6383839393a2ad5ce0e0c183c52f5e190abf0e725cd2bf9923f9de44bba7421c97a82c3159d450e765e7a4d12398805d0a16b2c4a4c44144184a524c61815c072e244b29c68b6d2e9c4495da26389e04a9608345be9942c11605994a16d79820503ec5eaed25ba516af02c1808260678ed8d8f485d3165e38d1a40d9a58b8fa3349ec191d7c80628c113327315f2a1140404e5638ca801c4f5503bd7b3396af36c10726164ca8d0ac21893cc2801c5da6d0ac712793d3101856473c5c03c71549a60f90193694c62d031d01b2a28a154a0c10eab282a7ee619aa35e2b66d58a2426a5b7c68d01c1cc3cb9cb0c1066a67c4c9da093a87f0946a62c72f8aebd323fe79c9252a633528c6877c00c922a4480ed56271582796082d9302198072af94aa2c2660d06c89e66a4fce4187004476eced913435c02faf198c4873026b228e2430d5bd00491442c7cbd00053b7c31534273a44d2c0432c3431c63a604fe32f3e45b2362a92853468b2a96b070bd76a62a6a20f29a2c2238aa7c581f99a87043859a0f557e64888b2584cc93146e9e6e5e6efd71c9d74b4e31fb5a7175d5aa66d70b38ce7094e972359096f9f295a1c2cb97e5028edfeefa9134228e2994a64ffcd536859029641fae7678f3e6cd1b1a9f5468419a249a847182072e463d680145922f42b489c2451464ae9216529491228c106b2d0f27786bb1586b59b21da458a2515cf101969a3a4288d28d41403020ac13667eb8728407d2a0e04817315428a18225a83481408a1c34299cc0a8430ce129d1225df0ed59b91430a09c8b5515580b4e9313b8c90a37a6070d4d0c02823551a130996de229d117b468eb54addce0fb91698c920f8362b8006b1f99c680e0e735a6850f5f3074f4c6dab3f218ee16fa02dac4024c16c5d3d3354fdd93a591a274e385010589b942886b0531511471ad406f960f5d4a405c2ac4802fc460111263450c9523d60a626a78d447263143aca04c5184a9428871616611f3c24b0f53c5732c16582d285d1b6b50145cc68069b2816b12016a5ad16982728515309cf1e186cd88316d56a0810898a4a622b429861bb7b064364c18314888e942890857c2155704324d6773a881b0f80384376f5ef09d47d88746477e6e79e621cf87b4104669e8e510f69e6b8ee3dda107040323e7405bf4cd2f2a877786f73def6e60f843a578c10bb5fec386f5ed8705c009de3c8db03ceb8d967c8cc2e6b0fa09465fbd2e3df5d68e4c9fbc1db2bee33960683de785294f7dd3a437411da7608c323cdfc0d0e8370f04c3ca834eaf461fbfa9ba3eb7b9751b783dce3730c7afdfaf478f945f0831d6d303b6d072173ab6c56fe5f56ede75e1f4558ccdb5fa7d3cac7f77bdebc791e33ca88773f32db776f8159a2c6ff9e769de722179abafc0a11d8fef8140560ea30363802b9007f52d87d6b1d7fcb9d0e4017ff4ebb0aee3305ae01dfa747268f4e1070353e0102a7fad1b7149d6d55abdae7ade01e9bcea5d3de16e5ec1fe6e5ca75e41ce7d82d68b32aedf4ce52ba8072c3fce5e986151eb46f41792fdfd48e1888515641fe32b42207e8c3fd486d3eb037ae61f454a4d5049a3a9bff09db6febc565bd10a529043617e98c2134d1256f5b3c1c9bf1c487fbb9e9d4fe5079e4f974f250d569a0c883082075e295cdd607c169979012a020546c880a4f1a4b1005349cfeb3a5444c5ae5deff927bfaf537217f7b9c6f577b7ff0075c65dac46983ed289f584a3377e8ef39ee3bcbf4e925f5ec95777d439fa3e8ea4111c7cd5e0cbc5dc3c08fb176b7cfd6c2003e61cc7b739a7a48f03beba2e056a29d0fe571f83cde2fcdb7cfb6c7cdb07d2e732f7ed68fa1c9802670a94ff695e0aec323885022978a7c061885fbae639e0953e9b7f9e4b304ab951ea71be81f42947e94b8c92160ba2d9b2c9022b585650c9b2828812d12fedad99dddd1e0289c0c2a287eb75c373d87bbd06484a29a5ec8a57ab9b43f7179008d2477aad15264294219d8506f7f49aae6bd3644581af4b77d1eea15212d1d78f77af6b1a052ba63ebd8244b4e9bc5ad32561c77eaac2cf7973d8deb9259a1c38f438c2fe0dfcd15f6d77bd417d4a30f4e5fd09a996c3e9ca02b75ad6ea977fdf82aa10a8d6c054d258b1a25881b9f463a350b8c723072bef0d64c05ec1d0b565b74473477c43694f3bd8617c2f8f0e8c9d9c18aef215f62f06485dfb6caceef57b633c0f8c1d70a503624779fd6c7c299a42b9457d207d0fa4fddd906ec190045747c2aa6b1afa965eefb1eabbbb810c3845a9d7cf06ca46a6df8ef8e6cd9bcf06f6542ba22a65aae70cac16e0d0557f5cd2ae41debc7933a33e58cabae82ac1153d6edc4a487a608eef562136bda7fde8ef38e7724882eb86bcdfac2db0275f783a392335cda70b69ee9dc0d231c24f8f19943d2418ce2119b5ba8ec8012a72d03fe5356fed68d7bc73385de5b968cf936ee60292df9ca2bcd3d14d90f39b43a3bf9ee3f53acab9d6f1186570ae02511e3f1d280e54390f1b281e170c8dbef3ee7a32b7d1a37ab4d031a3e7746c4e1d1c42f9e62a304439e73a60880a8d1e80f2cdbb94a751cda7bb70b04f30fcbe1bd7edfd78687e739843231ed43b94779c7b1f0fcd557e55b9b50335b79973dcd5a3858e4dd7f11d179a4252fb78689b4f774119126301c2ebd6773ce53a60989343a3276a1c7008e5fd181cfa7c4be51df04e1f0cfb78685e8f1739e8e601c7990b3e4fe8ff1a608405c7eb0f07fe6cd04e035b3aa8ece7c74f07feeb4b32d95fc7f9ba0b02f9119f64b227caf9ce2791f71d0f13fe02f901c2cb28637322fb403827b23c46f8abc10f10bea38ccde3d780f8b3e5f9d9b8f2cb21f431fe84d4ed0dba63668dfba603b564f40df9f35568231df92dd959993c453d3d8d1ccd73cdd2f739e79c4a33c8aa6cb4f6c9fb6cd8cf46671a03c46e55b05923ae5a2c0cac67e0f2bb71abcf1cbedee670c657efbacef3da3d0f1c92aec25b1eefba39a777eeedf1e4a12e46e752031e3172285fba063994df85f4e93b831cce68c220872f303d39f42558395c19d1ca44acb2b5411ee8796881be6d177a136554d428eae6439413c9a1493b4df3da3daae64314fd788428cf51de79c8b9a6e5903e3dcaa503f98031705eeb580336a3e6dacdd6b91ccd343581f9b28456b504bc5680d772484290e6b545ad1e203345938964c872946b2670f7f338533bee30a6db1cea986e79586fcf85e67b618fa33ca44fafb9cab32a4759cfe10c0d72f84a79061983dcca324fe9adb0275b0c7e1f8ee9433263f7a6f53a7378829106c3fa4eeab37e6d6ee510e851ce7d363426af025b4a27d989722179e6ad6b1f0e957b8e02a70b4d1ce7011f06b803a6c0afa37015366b440c83c1fe7a38e34398d5b160ce8f7ef3264c9fea393787335ebeaa787a1ebf51391e8736efbcd1c0ba8b077541df6deeb57b39047aeb759a7b9da779b6cb140db5ae45993e75c68cd7cb7db5c2b5766e49087a94872404fdf5140ed81983f7c38172ede3e13dca3bcaac404ff87401675fbbcece2109411795bf4cd1f40ceb144d77f0d4523aa9a37c758ac6a8a75d8816bcbc7f9cb1f005c9037d9cb550e65998fd003ece56b872e6bde75c26f93b13326576e46676c46576f4647614c6e96f4e52534fe171ea77d658391932b8a993c8387512e69a8c8a9a3aa96976439fabf037dedb3b1c1915ca3f1dee731d94d3b7ef64a79d87d7c3dbf7d23cd44d46454d9dd4a40695c479377167502a0fdb89f334ff74680ebf4c24dfcb1aa528ea9a8e873d856a7dbfdc645a3b9dd4c471309c9e3ae63e8e0c191819d3cbf18044343585a364c8c8241fd8647650649ab00af45c074cb904797c822bbfa0e638389ef3354efb874346e33a0fbbce69e771d6a0f9ce1ab3060e0ef626d31d5cd73e9c29e501e3f4a1a92964c8741219273239594001060c10ce0a83434fe5a9662b3c99c9923e7e938a37683ca0c4174a627882ce5698528f60b1e0e54a7d9cc93cf0f4e34c26458a2efa773187fd92355c48d6f0d87de90e78b9aa112fdd8b36e0100836e4e54cf6e4a50779f01207d9c7742f1775c6b9c884e9c365998b5a968f1421f96897b9a873d1e7328f307d34f71c201d8fb1d8b4e331a6a93cc676c022a41eaa5cd431ec38ae03e68041907c7499f3201bd080ad57c7c938f7064570ae6e3dc6b81ca47a8c859df41af51418fb3ce92d841121987c1765942828ad1ed6438831eb12e8587521198b2e2d6534a5f683d2fcc0cad11522af7d9c5d99724357e6ca132b4f6f63888438c1e8f36b1b42570ff6b09bc0bdcd2544affd5c09dccf0936ccca9197728884e99e9523da255032483229ad14b4a8b4aab47c9860602d1f5cb115040ca669b321ae5005c05a3f5c15ebe32c882bbf7d9c05c1c686208c04f105568170faea415daa1d470831d6ee1d7311528f5cd45f8f23cd6f2b02334ba01581e99afb98b908c9c7e6d287746ce6a2163a267dcb472e80109b3ea463d22f951425342308e4531dc9472e426a45a03dba8ff6988b90ac17b5fb68bfb9a8b3e7f6d0bf1ecd262ac46c082933218068595982e1ca109736abe20311576b0a6d01f17d9c5599a28a172a653ef4e28c4a98bf1f6754bce08f332a4b135081d34f975deba4b1521a29a534c61969949da49e94f5c7bc3da33d4e39371a656cd59794522a3f4e8ece09b62a8d94464a298db1c65a639d37b2cc593acdb1d321ec7926c618638c31c618e5129d37259ba72ebb83d841d84e443fb41e12ddd79c883e77a3df7ccf094a7be7b5dc6dbbe5d60e2aa9a451a737d89a9552cd6d4b6b6dd55bb6d24965ed1f96724b6d871ea2fc73ee71d66a9ad5344db31a8eead4a5d756d334afbfd3913b8c9c312ff52a67bf90f3212ab7ed09de5cfa50276fa8a2944a09d257f17c284f0357a90ea742a32b32d99f30936432d96b19c84cf6d489b82ef2d331d9c83e2ac99e66183d637a7faa9e31bd4502dc71cdd39d28634619b35502ce69bf2a72c0f974cd3510cbd754d91d5c8b079e9f6e6394a1b2e0fc1d158c8e53713e7d07cb2ae7aa5673b68882e1f5d66d759cb736ce5b95b3cd511dda0f537e18f2fdf130ba7244f62718614992dd9855644f93644ff38fc946f65c46793d637a8b04b869951c8f82f175a66aa3d3e3367bcfa963abe18b31de308731eef0873d8cf2810a2bf0e1953152f452ca7194e39e729b5bedb3d128c09c47f99ad25a6bbf1d9edb7c673d7cf99517250d6a290539ef5c761e3bf08e0073435ddee139a5a07c8aad73976a92730ab6bad6d6aad75b7d29edb7e08fa2a7d4abee7137f28d18e63befbc8b9f0e2e87ad6921e774e6c390eff2c68116149a1944d2cd39bbce2d1d791add96437a48f2d365f509b6aad08c9f0d4a370f43eb726b69ed2ddb15fc51f472f2a0ff63ca2c6768396939c1a194721ee1604b09962ea7d704d0e914bc73003116b5514f231d6439a8f988a36a0050992e4adc1e673984f9d093d1457fc5b9c40c87244f7ce825c1e1fd399f50a3faa9d1236888f2d5a6a8b76ccb4ef71c7eface95dff18fcbeb388f4f97461e0c3b6c952a07293f5d878624489c6a7755e521cedf0f07b6a1a3e1fcd5008f069efb76e8388f735fa700530f3f97383eff3e17924252fb76ecf8e79cd5c0211c9fde21c681bdead8d0c9e1e6d527e7a857e168e03730c409c1a9e0600227a610620b9398f6e9b8afb9edb494a7c070fbb03ace0e186ea1959f03b60fa977e1868303ef79b83dc781e77248bd52c72e34bf1c6e5f9d0ecda1ea1cf80e0cab8d8aa4ca6bdeca61caab6b51de733c7bcf2d922faf69fe79b70352a7200cffc0211851c686e316d4e80dead8b79473e0055b3b52cee329e7f1ae7ed4c6cae990f5a1947fd7b92863f3cea9cb19d621ead1736c6eadf20da347794bc78ea77cc7539e722159bdcb721e70c77940eb1ef5185e419b873caf3abe5557b9d0eca4c7037a2c1c468ff21662b80b3116a063314018e06ac873cf3b9c0c6bedf03ce5ca43de971b60844585a72ebf0618d5cf01465870d0a20fb2390555f8cde8e7e692729d13d9dfbcdb3c27b2ff43fb1865a4bc203f34f8cd63a7c25f2e6f60f5442ba3bf39ac6eaf578166f780b78fb31bce7cee95c42f9881e04bf71810cc3ece663853e3e36c86291fb49af2d289972d1ab00c38ce66c8414886ba8297ee3325b1d0eb160db83df98a1987ee062f3d1f673754b9610437d8e0dae28729e8e32c0908546f3e2082054507890d2ea0d87867c6a0ba08a1c383a7c3ac06212c2c5a1f673474e91af0eae38c862aac9608e28a07c68e4a2727068a4a173d7aaaa8a2d1c5b7d1c58fae0ee76c8d00b7cfa9f428d82fc627787a9cf49ffe87f628e47ca96e7e28d86f20ddf42878df405af63f40f87699ac3f1d58871473ab47d7c720e5511f6730287d27a9172f537aa1b17a79493b7644a6fa54b48918aec418d47ccf899a99ced0750d180748beaa4826138621f4a986b15db4a53b65cb81fbc090ce9bd4784c9ce9afc78b7ca196a892803b0790aa5d708b319224826d03beb8aae0a59b9731677ba1eb12641824c0991599159915a1d2b32251be9d02b3221389599121b2e7ac20965db3377d3abd47beac7a344d53b1cce055cf08da0532d01df46b6e82a4d1af39510adaaa6552ba5884e3cc03b38f33225ede001f67449a7cad9652961678864493b6c7a202f7f0214277d05f5f7a25c2e4b11c8281f2b86b8554a0abaca65a2b8b0b4c9f281afa24eba41ef2d44e928cec24324e4e4f5d745daf935cadd1c3d6c3d5c79eb71eba97c3d7c79fb739b4915a6b81647b740c0ee9d359c3933ed4fd69f51c87748f06bde52c0941bf658aa66754afb602bda2bd7773d7fd31e5d4bc355bdd25a5a4b4c768eb7a249b1199bd5045d0133d13291afa449f96b88ee372bc0273d92506872e1feaafb9c2f8a7243d373f901f48a72e49a373eba469ad084c4fb904a4a3847c2e443a2a1b3d078698861d726eaf77d273449493d44c175d5d177639747de77feb4579ad7e6bcaabcebd5e0efd596470f8f3d537ff01aa395edd034903f47440cf5328b03f1b5fbe60d8f9f4ebe5b073eb1d5f530a3ab4134b8c844081c4e9ca13332ea47860650a256e7ee022e68858124bb0751225a544c4952763aeb8d0c502d4103173258a93a72f623324d2bcb54d7850b36486364b36d0c14c2b895df412b108201dfa2936f1192c2d65b065498c31c61863c718638c31c68e1e9b59bae80a7a29251baa6977ce39e7d47258a98d41038ef2d543a64fe8c10819288a1c50972e820975f32e7ef7f66743d35a36412ddb4ab938f3f1f4edd369f49034666e27f9aa3674d115cae8316cc05d721c0307808771e6018ecb7b7c6ee033fb8c4a2d87f5f080c31fe73807573ebda7e498357c5e3e3d855943001e80cd3bca0bc68e14f7d0c34ed29d6ff851d0ac0f782569c4f0e95d0c306c5957c3eed29384afe770408fd99a5b8d8258152387351369af65ebad784021114c48a148a69383037652cfe4ab3d0576939a66d36ec0d5f4697f81020003008e000017d84ca64ffb066057993eed19ec2ed3a71d041dd420030c7a5a5f9e7e9c5c4d3f73c80b481ab6c8124764f1f1a377d676b7962d0d787396f778d85d5a3e3d9fde6a30f069bd9dfacc4fcf61330930eb3d24c0e1cf0f5010ac9ffc03fb8c2c85a23e8a32da37b093c8573b1b37f2d58e01d803f6908e524a29255108f41a510af2d583846587405e4a6cc4235348c4324514c8c00aba3b6b1c216961c2bc0f59c387cc316b7ca9558fc3844678751405bea64fa7c00b05e516953f7025344294d12e4115a65127a5134d31ae803eba099183e8e5591ee2181ebe1e46811e9286e73d2d8fde7de0d534d890e6a82f7f3dccf128179238393ad7793cce1a19f8caa3b49e01880118a50f4f0eef5f1508347bfebafeca97a7d10f0c51d9cb3d2dd03b201618c37ba468d1e9d96499011e699fa034768931c618a98d31c618638cd50ac94a3523dbb349675db3b3d65aab47a7aef35a35ef3901e63c8c6c5e7aefe558fdba06aa9aa60c43b5eb4a80fd10f539bdd36061500d1cb7d6facaadbf38a7d8edbdfe79e00a74c9d7bd3ec2775efdce5ff2753dbb7c5d4f5dd8dfac552ddf39c6738eab9e76b5cd7b4a804320a020980758bebacea54afa742ebd73afba24d572a5667ba6e0f0b64cf6b4ae7a4cb0dadcdc0d087d159b14969ac820fb7a71f8a0a0c9234b74ed463cf9389b2d7d98fae8411f67b3183e7e3aecff08001692d11541e800808d3e7a043bd706b47a987aad194b6fd9ace5e8ad2db04b2940c74748b47aa652d2ac019ebe806bebb5aa55bcde75d5bd4e2dad1960cd8f90aa758f01835a6badf255dde5abe505eef9a956ce1e0c54a4bbd1df6a69da55c997e65773aa697305a4fffacd50b6497366e123a4eadb56ebddaaf55a6fbd5a1ef2e9421703c911474078493dfecc8829d265b39270f853bd55f38ffee940faa76728edd23db64b26a4ecaed34ae9b302f9a7acd4259e30ac5c3c3146183ee28d3e32ef6002a8eecd3af808a9662a5f9e44c0f4e9ad2eb0bcd2dd8b3117fa871c177db82863fec8d7f41e1b70f8c3fdf41fa0209807393f7437fa71f0f49d0ee348bb143e4292d33f90dd32a3707702ba0f47da59abb21eaec0561b1c7a6fe50a483f7597544e0f573f429ab6a514d2f524c11cd6e96ef46ff8e2486b572bbf1bf2ad7b2b16305df5741604d26fdd7a43d15c48b6868f90a66bdedf2572106950ebf5dd4d67f111524b0448a7a181ad797dc0748d5a3a35ed7694a88ef1e2e888c29b0df9fe1e59fb8fa4618bb8aa7b4ee84e006e8f33d9775be9e8c4d1a3ed6647c83ece8c7822c0c799114adfe3f2d5f202873df4f5d32fbd6b4f6628d6291867464c91f808a957e81a1f21450a1875ab05d86ba9c1144b1a3b68d85f33ee978d43be91ed6eea36d0611a524aa9aaadcac395d6ef7c5dae69ad69adb11647c59e0455f2357178df79d65ab9e81617764a9fd28a2e5240a670b863baf5f9e9a0b54a3cb73cb59c1a882096eed42af6542b78418911284b20f5d0c5e8861b96bea8418812279058a3c5d3039da969b2983195a1423aaa5d3be5183bdbc28527a7e860882d52d005095e70c6cd6ad544572b125f9954f0d53d2e57537d9c315159e1b0e5889625351cb1210c0b2358e30505b11086b74e9966780b80b75a08408722c6304184082ab868c1c4c2162e98c065bebdeb26b32d5e3e3aeae36ccbd2e72d533ee7e36c0b938f468eb0662b9db2051c674c4f4fbfc0c07d4af3edb1fd26e04a962225284325298a8ac6e88618968c3cf1800a982c510205539295a52c5e10822474a0e2041556903ce9a25da1a5861cec0666056ab4bcf06e96ce7ccf96a4f8bcccefe36c8969a9ca52940fbdd9d207e4d2d117df3da3894b61dfdd65c6afbbcc1a940997431810cab51cbe6a77b1395c751995e3cb670d792494476040afd75ce5cce4a7514cce2f43ed2dfbf861bb94cd22a4ce5dba4bcf22072c59cbbaa865b149a4bdb5d25b96876cc8fc0305ed650e8d5ef8c731166335d768596cb6f9d65e3aabcd4bcf91454d7c451a39b274115ff17bb6c1111cdb7cfc30aae0e715476db8bca1a18b196631232b3e60d1e5cb0e3c286125e601952b684ea0a689a712c48c4600c5055046c0464d165ac4e2122f2051811769940859226684030b2c90a108306dbe2cd180082e7ec0c20217bcc02236a178f2c1890c38b029a24d6cce8b822eca2f5fbec469670f5e514a29a594aef0cfebcb972c4e78eac0020c6857d36eb804125a685962a20a2a26e046091130d143134e589005062bb228a164055e8a9839815981cac31f675986c85285367d499f7665e9e143579559961acc6429c12c4b088aa8428416231a9e90a2c9104c54966698159146832a8c9a28d1821400a1054c0ade8029e24b11557031c28817238c286144886ff740a0dea42d2764ed300c111af01268095149031e10d8ce2a899029c530232205415e4b0ba637e7e38c88274f3fce8838f2124a17e5527777b79c44fd59b0283145aa4d2c5386c84200274f242961e1e48627b170f53325d95b3bc505b840a22407304a0ca1a6a524808f332c60de7e9c6169024b2bbdf4b8fa6e7241384f79070641f2c1e5387d344f79100936e7d47d704ea573be651f9ecf5c84ea104b1ec7c1cee35e84e403864bd73af7d1de753e569eca45295fe51ed347eb5c04347d34c7719e8c938b84a68fe65d54e4d347731813f41c057ed439f741372fc24e7d0ba120a8d4ed55753d0b19aa91000000f314000020100a07042291482c18a9723cfc14800b89a4406a541749b3208761140441c418638c2106100010318484c6441d0a216325327ee9f33406513c96560c0694fe45f8176ff7088460721d9fe9e0fbca741c622deb6a516734f2c802967f4866a508a5346ecb58a9a3ac7ab447878c8c4e3bd6a2341cf532c7bdc0a1a796bbc958c14124bdb4e92303bd4682d84084112f69a7bca9d7c23c7ba27bd49c8883a36a1de2d21f47907c88e2c26de3082af49e9eb442c32800736d3b80318363aaf1bb92a0f036db287950a86ea7b66352d078f24192a06038f0930de742ecc62cf7fa0830fde3e08c126d3827ff38bb42c70264defc1018613eb8cc76aa6d91ca4cf105309504cb171275a6436ec1c82dbf82d21888ac988f0733b944e96923f34a335625b7695f884e7f3b04e65ce9850c6a4de137c9ab0945f0c28e92b22c5aad1990b614a317e58dea99b4803a5e951ff2c3275a5ab996e751c9fa34764a1ff1f505afc0311a9ae842cd8d0872d9185b7667c7caab5e397da022ca0da2e77d4fa9a4086b2e11a6485ba3b544f88f2b843f1048e37e52d61e5fae127cd3d76eb785ecc027a437338cb3ffb78402956d4044a79377d0f2e34331ae9347c9eba3266d94c828d066574e5047d08687504caf2b51be852795030a9cc16f98f334e695500c3bdac3eaaba782a7e3aa3f64201a7719febe83204afc561e87c9823c62a8a9772f09b3f9e6625e4d8191eebc93f2e35f1ea3adace2fad187681f1789bf83b84a4136fef7cd5670394ffbb202e3f77638b8b0fe60567ad69518e3d167d91daab70708b63330d37406768c4de89282b4558704bdabac3e24318467ed83c52860d94ac1c5b7ac72c0b15bc9472361613d58627d0a80a6dd02baf4355c55acbd1fed3286f58e6f6afa47e045d60d52a0088e90cfb3b0f82ac84d85ec22dd3e603dc8103123f5087cb82686e09f42479a3216056b804f52b01a5b98f31ec82cc07f8f019bb8c09b710f6057ec0a9b2d80e5c17f4f9a1e157e885b4878f14c251975e11d40690fedf32c1e7552c0c1929f73ca3ad12c622095fc1751942448b70d7857db2dd327795daa166fb24c6a3ca36cf5e4edc6a535e31e6acbc45e2bc7d50388ea5d2d0c97548dade1e7f21edbc4dbd9f3ace1a6424f35b03439110c327cc9a4a790aa466ef1c71846a30f70850ed42b0b3469435d671b623811b6b2361ba30a4dff9d107fe0294392ed66df0901debff147213bdf7d01becfa538786d45287c91683ec5f2c5283a8c8f00ff38adc835908472e1b3dba7973e295d1ed9644bf859a95625508987106ff00f955a78d0d440fc340bd594d2752033a4cbd20a78ceac60db278e0c3da0a2cdc79d6a918b963cd42e3dd8135f9a81b659ff3fc55a4f7f2ab34bf6ca32b14333199f0577bd1103e2d117c8a5219aaf8adaf8a2e69e18e1849816a02273dd2e28f291434b3bbbb4d44a0b37c78696c64b8891557b291540ac7cc2c7fe5d3f3ead3850b1bd3fbc8fda64ae9f2e614dab0e40a2d2b4b46139370ff61a3f141a0b9be084da5be535ad4dc1f84bcd8c479023d816f0ff4779ab4e36545fbacb8f848490d807fc4671b0669018b8237d1f90425c7a362471064806d756bc685f68f4676837c5c2a38818ab591c960054193b2235501ba31a21e421cf0831ef025c6acaac5a2e4cc9bf1925f5582706020dedcf0869a803451618593f6d626a34bac85e44308f3c0f74089f03f0eb80fb993d8db91cab94a5b4e188a886a04001f44d5525dc5319d7309a704f13851787632e55183fdc2fe8dbc8f3ad4af80e2a7bb7f6ae37ba81cd160e0669692fb28d04e27d6d242c937d1de10bb01ab7114ccbab252b3bc0246dc8acb637a7296c987280a94b77ec004cedade1cdd5bd990583a6cde3d64d7073690dcacd4ecbe340d726967e99e987347a3b6e06ec29cf38e13fe7987e88ab35214efe0416c2cbcc3e1dec71bf0ada07cbdeee8c44a5d8a91328b76c51527ac5dd23685a0bb66532907339ede2bfb4cb1ecca09a7886213870f645f0be8a44bd83a4b4c1703e87cd64f0b0e427661bb1248647cf1adab72b45abb7c58c73c760ac9928e76ce7a3f6749f1dcf64eb82ef3fd40c8c0fdbc5996ef069a64c1e7bc3b0e29b0cc6b3954888332f25d1b18579a787fbe06688635e4c5ac16590daa484cee0f1d995b58cbb277ca2d6190184c2a963f995b1f5addd046a483543771363d0d46d005097363164bc0802f2ed7ad4b4409077aa14474f531dd66202be6955e13e3920b886f16cd769964b36a5aa6032bef948be391c9b3bc8357947115955c57891ee9700ec1775e4fe13efcc12ba2f9bc7e04b8a497ffe64635d532c5766925e75dad9e194d01733b66032fad94aa3b3b8bc14511e4dd0ea5488009073529b3dae281b979ca6538e6b14c7e0940ba09d307b00f3b573802395dd3785d8aabfc64dae5135a20c70011015bad31699171aeeb0298d31ee2b0ae88e75b4b953200151582da524496853c676e5f9a125ae6fa14dd08d0d45988391832cc0c2c9ecf7d95b5d5b5faa386593a30337e2eab50046813a872949d9046763931bf576335db84993cd26589eb39f3bf75cf6d68d4873291743289bb00ca6810674ea08944dfffdf782fb54f50d137b9f3ee83fd7e792d0d5a90e45b85e3ed924401cf133186df0d73844196cd2357a1613c29673e360c851f25beb8352368dc5303472f8ac6346af0265d3e7974ddcd00c38b675cd2fc0d34db5bf747c85151811266e2c0e5fd9a3c9575b08784734d509f7496794ed2b13de3d9e4cf605dd630fa071f6a0419f1c39ea95d8c806064dce4de1d13a9e456450ead79217de672513ea18c09260de9c4cc26a60579d48cefca3b9bd49af2736ca7628e2af3b2506d28082e25302241b920625f63f24cdc6eaef92b8826024ebc4b7099933b9e565360f6eb310f5b58d5044010c3bc5338eb69d8b154a5f998511578876b312b64ed1ec34607de3e43dd43871d1befa5633b11998153763edb56623b6864dcd9ade4954abc41e7639b46c04350ecc877d78c5398c65cb7a78401872744a277f4e30891d846dd49b0586ea49eee218fb488081d7e6a15481b98bf105926d6d204b7cd550e647f323b2afac1af5273fdc96b35f1341b9c73ebcadab441904533e68627d8fd9538ff9df9d39601d139bde3015e905618ebc44b2bdfe598f2db835d7f22b72ec0a49f0aa00de9da947eae32deb5c294389423c51c9e610fdd951dbb7b0e99385ab476df0dc1baa94d581661bc2637544d18207338225214d3e6508d3a275a5dcfc323f19ee8ff49304908dc6d16c10d0feb404ac0278f35a9b77be70d72f4a4ef8bd1e327cd277e5af522f30195c8c39e249653fdb699a34f07232845656150ec14c218c37d46c776d3bfa968c0f9f17d0530ec208759c33fbf67cc8fccf203d991b7993f20d0e160e1b9533c3023c5cf219e341bf0b70aa7e9a05148f1a8a11232aeb591c3f8b0cec00b24868a42843cb80a97a8ff82bbdc592bed88bf53efe135dbcf36b278980f5ec5b2f50f8f098d73f7cc996500f9da954f5e8f3caf2e8bb30398de96bfec0a09581c889cfa51c9148ed786768b388edd8af76e451ed99f1bd56c2ab3a7402bebf03899a810b12b74578e8c803659c94944920c3d776e815f17268325e24cc629883874a3128dbf308158556c8a57286731af08df310e68b8492d74c8d5130945d8723cb92daecc629b5431716d0544179cd50242b0e4c2b5e74494c7dad6603a7b78f3158ff2d81396302b540269f5c50368e7e00425352951f2059c70ae3d1c8dceecaed78ab0bb9f50da0b53501683ead824b5dc9075d032878377e5e1dd4939c3ae0052736a52ecb97ffe9444fdbd783d3bd2b1625f93111cb23cc41ae31734560b56672a8333ab209fc51464ed3b823238ef71024269444419081a58c48601af35a356d7cc86782112b7b81ce616dfdc3df055d35e505804be49b744e0d758382e0141bae0a82328846606e5a3c6376ba88e3604cc0cadd5d6b7ebc39fd6598429fc36bae7300ccb6f3b8a0ce216e981ee48bb10fd2bc068b4c985d3a7e8412751b66e2725f0273867c7404f5e10ec55260122c5bb61d58755e2890d5b9cd2cda814c638f5d461281640b33d9e34de8727cfa01237bfd93456b1b9b0cd481adfb7c70d90fa6cd50cc37997f02768310d79322eeb9f622f5404f7010060857350bb31d9ba22ead984b74210cea4d9eb3ee55d32654ccc60e981c1b4a89997fd808c1a7a56a55b32889cde09d3b77ec6d98f33bb5757a843dc2e16e387e2e38e40767b2397e3ba2f52ef4a59c54f1004bdd079dd0e0e55e284568a089553369e4975633d06500f167809384c013bae1a0d0d83fd54e261ebec1e7d7f9c3770e4c314daaebf87aa8cfc892f29da24be0de7bb280096080d85359c0917f8f0e70aafac9297dc9f037b19e1a144763c0567a299ce7c5a6033c7f9a1473663a881b7c33953191d4612a281af65b2f17dd2f562c8554e7d756cc7bacd262d52e4e71a3b654e517b8348bc4722d80dd2f0721870e15dd58a32941c026b054cf4ee1b1bea65a73f5033ecae457f43d4647a551cdcc76a5c7d6099bfb9972348bcfbb10953b7f4c665fea52468c224711a02bcbc95b4f0746dcb51cc9643641aac77a759fe649375126f0d3e1cd8a1e367de46ba13b22c89e35d89aa3e7302053ecc787ea3e0620c9903912874cc6d37abfc1ab91c3a803936b1749609d210380083c8274075229f25784a2d31f8d19b06391f1bca71547aafbb7d4f092816cba37983851dbc53951ead86b3f37ebbc9d714193c1b42137b83779f5c4e333b489bdd6fbfc7a12b661a49c19d64f8e67981a8c3f0db15db68dec83c250a96060fe3c92871485dc9b1d487139f0465dabf687c73e601860e998092a4a85d1980d6eb8fbd07ca006e4208240bb2b0fc1de47f765bb7643152319d8e7fc4636f2d853c419cad80a8845d5597e07877f3a0175c5517926d16732148645d2da01a9ac3f541212513d98d5fc43aad86d760c15c2ee9efa43458b9e00602c40ccc869da85181ed873af9f3665a6c8675bd77d49304e055c66af6a5038216a1749724f6467736e8948140700fbde7c10736fa45bf069036a3a5f57f4ba4810c672bc37733b9aacd272333e3662fbc8659e183fc6aa7b16a77e1960c58034312ccbe1b61df9764f4ec378e49db7710c77b35b3a94a1265d0738f98fb7100e3b3617b3a231780266f6885cf2013f38260f0bab88ca4902f2ac91c907d5baccea71247f5720e4e5f06a7298703d106f637af1137e2e62b84910c017f12663263c020fbcc8abda883419c6cd394a7b65459492587238f19e0243cc53b3945153a782b330756beeda44d720a0776c7157b558126eedb044520705bf58ee81046527ffa603ee70b98f3bbef507c4088d8a49c939b09de613cc4a8f04bb01e2a4be23e70b671e464da510d1fa16440b40b78dea8b1f2b56b4a22e5a9152d15b6506df07e04f0c96310560d85675a282c27aa9619ded6c557f8010911fd687833bb0362d68773a9ade6c3e8098061d3edb84b583826ad307263e8253fd72679d66ebe52a57482a16941abc096841849c8428ba696d83592415379512db20861931a0078258513b89d2bf3d08bb7761f1d2961cd48c4c41a3a1a457a00f165b2349ce44d1c9e3ad49082f89d251dbf26cef7ab9caf9f7a120ec67a38de93c4cdc5e6c1105312ccf2b17092cefeee220cc2f44fb808b821e829b7c293472b7568c082f8373be16e09e3aabffb2eec3e03736679b129cc05ee64bcc894b9916644807917c799195db2fc93b35921630dcf278b1aca015e4763dd372e0c3b34434a84a9f4ccab5743f4df5905d10c31c11c265f7d301644dfcbd176686c9a941596bda5ccf06f4a68b157eb69dcf05d112325d4f9fe6acbf818b9b178ffd5a5f04179bc42bceb2f60a2e2e6381832a3c25661b44730eeab9becd3613c2f98a85a4ef1f0e0d5d0a73d3cdab8f762aeec927c8fd75d76c1cf144ea3921b9f2b909299a5f44b60af36caf5cf538e6b894129039aa390ec9ea3ce134c162598102d5c719d114aa7450c8d3e8537522c74791097d51057796d5e88be4f337f2df56e3f76075e0e2805560fa236f703a3ec4a29bb39bc1f7995fd3fc69043d4a2c5c96b2d34a46ca45118739fca7223bca879c5781978a48b5d804fdccc4b4ada8a0ff80ec30baf95fe3f0e89554717aae7f207a007365f4aaa2a8ebc19c10e9453195d06b69ebb5c04ee1788d9376e2bbadf9842bd02fae4b2e09331399776315dcd0e9c134f75661985ab19be0d45b630e223537a257b2d0faa9db9b520f9f6bc00fe415a7b51b3327b6c7bc267d785ac3712bac6188125505b25daf9c7c9b8e606d1222404711faa262781c506f4337518792a30d9edf6dc16fae88771f66a536157db50f634018c25007421799ef466d5cc1f4104418edca14494b05f28ce9d28b0dfb7e73bd0b324e8d26439c519a7f718c99dd1a32c843803e52acc3dfab89f9d129271a4aaa9e9bd62136f44aa4e50b4265944e79f988d22a55cd53e1fc6278be27a0a75f0157d388629e24843c6bc669845aaaa76cf3dce79d158a32ba61a0429e3e548e98bbe3aa1808dc67c467f87b039567d972f107d7ca7f0e962ad41836dcbf99f91a5fb93cab219c16bbb5ff8a66461c5ad5128aa443954aef1abe61a439f9f0a574772c3d76f90652ea63bdcb7fb252cb1daf8b555654fc89884c6d8520d47aa68d334a6eefc3807bd9f61694759d50bf6f8b63ca28f211aa15fd7cf5535893ff6001e58fae8f6201f05e4156c41e39e37282fb9d18cdc881246c05d4cc78fc1ae2320ee9e018664e51dda7d599f9454aa7f5be75c500e7d42fa003dcc0d797212b1f68e59649e68207e4986bb1fda7838a1ab06a7573e48f7f485952b6ab551826ec0ebe6b3e3a20d3f20cc289b2f308779ecd6133134a22768c1cb93e39660a843f3917b40557439bb02c827dd7e603a04e74ee2582917a44fd334cbcaaad4a0f4a18e292aef43fb23f3ebb5844b674ca022fdd69d0985111663ed85bb0dfdc5c098ec38d249c959552c778a6d3ffcaf37f3cc9dfb3916694097afddf7c856a1b6b6df7c43b985ef5f6fa0419f42a56c334a5395ae4b3123b322fe714180d692a371d0a7ade5d1351b517ab2bf798fb0daf0c16ecaf3ec1f2dd9bad68d8a0a741030e0dff792918dd6344dfcd47acd6bc238d65deb019625188942526a6fc5111d52cd2f765be3c0617766ad8a07fc5d4523223758172de104d97b34aaaf1e4cdb8c745b8b4aeb08299884754bc0b540711bec7d5addbc411eec0f5c4a2413987eda85e59934447da81041f153b2260e70935877f88b71ff0749d3d11413b33031cbea14b2394fa22f666e31692cb1fcd2426889575e2f109e3f947623cd069e654cf657792787ee0c9271357d937f77eb88a6a82d7e4987fc36f5c745b7e211308c4c9861c7ea4a19597aff269902ab87d5e625ad8403ede21dffe5462cb9ac046a35ae375e3e1920dfe76c1c33debeab653c29475b907ab99e1bb014a148668ed1d242554927271b8706b82c12b2b46c9ae23b2c1fe12316c11c1f5289919b1df0bf07f3900983c11500b04f042a3fcb188377cdc8a30e59f1caed50b0523fd187b57bf3b4c7a9751ef450626b0e4cb9ac6fe3c9621a1d87184c7820182bdaf4bd3b747124e4c27badd05d88902a192344bb73a0fd0745cb8a92af323e17db3f866f409c6f3d11a80101a8458ab6e153eaa21fc4838e2d210fcd341ff767d76f54aefaaf8f7855e4092d05358b76458b8c5e0abf4da2ddd1b9673e82d6feede4a82d0f7be4809f1e5c76961a1b372d2bd0e1b7ed9c89119465268744d13bc9509add710742512e4e9f9c3cee82350ecc1d1b1c948ce69623e39f473f55f3f7b29d744867a1039244da2767fb76eb90bd146d60a3e23a8561241386e4ea6d5ef72368b27e244e896fe5a556a7545c9fd840f4974b1a2d374f9e39dac067de219a3fe50a100c6692fc0554606c86d068dcf271fbbfffff8d1b6e35db7a4d49cc7a9475f7050204e903208f976127a5b4c443778d4741dd4946e80a4cd7d73261b1fd17964b48073d5684299a08ae720b80b28ff897a49f47bfebcefcefbd6b316f077fe1a56bc91b4bcefefb5c98084968cb57fc4c2478984537c417f191ede3353d9967730d16b43a8d4ae61f30cceda6817c7f19374bcc7d42e414b2f9b68a500123ae64ddb1335e58ceb6724ab27a8a8d74ad50d2299726dff31141c44da89d030ba06bc42072de2aa6ef59a4e6884acca4e2985c555c906000ea23b2924aac57b6de667485739520585aaa770fbcfeb43c298ac21ccc3e9bb28b54d7e25be879e0759e400c81a7ad171a2a851538d73937fee2fb5fde1391a2080c7cf7f4ca2b9281a7242a620a81296bc7301b46965ef23867537250da638bfdb282d1e837cefe76fd45d892dd37a1059f352baf4ce1de1049555a64e46e9917455219abd0e4c3b2ce1dd2b58cf9f88a0129ff0c40fae33d1eba61df6d1680f2cd461851ba829142064ed8e43afbc99e9a149024c3b590adc6aabeb2f2510addf3879cd864907fe8a6a99e19ce83653d0d9dbbe955160d58c8d2152939cdbfc7f088fd1c53724188b2699523b15373ce4d4716314ea7ec3e7495fb1d1af0e2f205519e43251e337350068f40663c35f5d2dda7b703cdab0cc5377f6b1bd79f2c0273b2b239baab3a55d3c180d7e014f5d755a8146df1b74046690d4b596990308b934743f3fa0e86438b11566b5c69f0ad02f3b2fab1196518be30a4e2243f228fbc09bfb03308d5c63615f1db8c51e97c496df9913da1608eaba62323c61aef4db34e8451c4df81a022cf5f78999c0359d2e33e4744991c58b44b5c7f440321ebe67ca6efa6ed091eed2cbed2a616f0d16801ee2eec21f49d871705da2d8404bad8b9605f19ea295aa53ac8ec025a48386d593ec8646136f7bd2836907e96d228fa06012f001607448307a692e554bb4b1fb09f332ae8d07836b959fe1ea37c880790b2a9861a62a2a3f23cc0f00892f9ce9f6bfe093083d8a13c1afdb6173c658de3ea8fc9e21bfe9b1df68f989a3cee633ddcfc03f5eb2f43dee8c0abf36015229cbb54c3c84178fada7a2774ec2dbcad06161389957ec34b6956cd6f244bbacd39de52756b218014c55a03ad235f06cf31913e89552dd47dba2fd1fca6ea9cec0881fe9243126d4375e286f662ac5b4f4b2ea7a19ba4ed6ba9291eecb2474839ffda6ef5c039351cc78cded883239e97a554444377a1d78b804ee628c53b920a459bbee52cbc69ab6810840287be5a777f158770c7930b0e1dd23caa8cfadaa0e51fc22f564a3aff26e835931725581c914ae5426e2cb75af3a632b7e07d4fd774639a441087f34266885c41b2bf9ff732cbdd35aa824acb31c612ed881397a50e342b8e5da90f7923222771e78f560b50d63a669da3577fa53e965d6dd13147d39b8600bb3d3fa7cefbb0e404975eab2c38c78a70ed388e3653015296392d34b2ce9fcad7f1e014cb64c44288368a746f3143c2483a108e26ce83f84d4d14510f5027baad743f7c466702d069d00abbdc521de94b48630b47643b072294c837c2e69e6ae9c8c4353344a2c74c24ae69d4eef2812e70075a7d4e0c2a6ad18cbfc694d396a4c2b42cb8904925835c586e3770a2491cb7402c7ae31fc3818710e80be9f4d5a5e9846c778a876c766938b254d3127d4c658793ffece073296875e1ef5c98e06cf105444e4f0fa752f239db32b60a47fa0455183a016ccd591e383f8a626ba1685478cf939ef9034a8fb84387984bfaddcff167c9d7ef53a983e42c536b1ce1485acc2e9e7e7fdb1ae0cc9e64123b41290bc22c9198c233c050944fa070da93b541e58d7a3bea4d1b32634298a73d585edcdd45b86db6d0a56fdfd1dc33639820a906a37d2fb2fa1e1815ab8494c6383ca2edcbfbc60b45624260e79a2b8454ce07794551a394c9bcce6c6df3b3859a727d8e04690936229f994c1fbc66f4341c9c9694e0ec0dd0ee6d6223594cf678c4359801a0d28185d75f759248c415f58e6fe612a9b99002f5fa5d775f64b92784230c0de6851448fa0b7ca7caf0dc268edf15886e1b461ab7e8519a58db5e0844e027c47c91216f6bcb77541d523e21f277260c00d0f276f000ea11d9840b570c9e717a699e6d8cf0a28a8acbcc877904a49d8fccad391d2bf495548b2002bfcf1615d54b831eff1bd411c78bf240ad72958ffd063485d67840592af1b5443dbfa6d2a733b5afae6394b6cbcc00d778aff4cb9e51d88174fd7afe6bcc607689bda363ac2380bb745670620adc2076eec5dd835242f515c6a64ad61ac7096a925c3f45489f08b3ba0bf5ee152dfedf8f6163dd844e0f63f9542730ceb6d7e04c877700582d45ccf0c864d822ca740e99cd2abf1a13cf849a6d0cb8dca3c94c11eaed27e911136eba4e9610b9969d91270cbe8f90662f0c770380834f54c04b9ee0bc1bd18015ee5990d631df1879c6f47973f20fe6697effe7adb09630878e551b3a360623dd21307ccacf4ff70c379b6c1be1306aef5cd5ccbae82577dc4715972c05c213f463147938c88d9f3f117238ae9806aeebbcd7c67a271cea01b35541f198a510da262b7363dbdc9a414b8af4e2c4d61949a184a858d2116b8fa3237c11bcdade4bb61a18990b8f20b862546cfcaad372fd27bb5ce53baaff9c75e9a0be632e77eb9c07426602ad38efd6ae9524a6306076bcf1f29676138902864952eda396a3ad7c1063baee6572b2b56597b2bbacae4d360db2405f0a3577d1562e476ecc4052b6f00997a1dd3e86408ef219d40a6154d68c514359e2aa59790a22c2a968b893b1653cdc5904880550e64573a73ac1521d9288fcd6d18cb333c08e769bdd0f4c6ffa2b4719dd6f1973d239fe430fad560113b0283cb2cba80bebb6735837ebf1a511622bebba935bdafc72870f2ea088c1a83241ad6a6a8642b9bb84b1d7dc9d1cdc774fafadeb62187671834c9dc029905139f951d9fd393a49bcd7a031b1f5498798ee520206e1ea56e20fa53c8a17689f84c7bf38750aca2acc358903f8c4dfb321ba6277d21357940c41ef8d4516bba19f5d31d2c1f70082a57cf0fcdc5819886594be4318be7050a1e4a44d21be7c26862bfee4a3b140725e3878922649026945a51168835c83a9bc8550cc5c31485bb8eea3890429a1486147217ab078c0b22552a22cbc8ef035e648d2712762f2ef0f56a73c2e9cf5cea538b96741473a6caf4e08b3e4eb069b62484ddedd873e06bbc91ec1238b9c18acce59f5c3e166c47c98c296f21aacbd601a930cb0a0374c8b26b3b73b5019bdbbb96d403c8662939297c3a9fc958489f980151f275ee7709583f89409aaa8e58c36188d7e520037ea4a49741bfb470458e21c6f8ff9d8674439377df1864f5c44f73d6045a82f3864692ce946f5ef28674b8761af240f42db71362fd8e2ed646ef04b47259c64070cb90ee9ed0694d466ede9dbaa7f98b8ca7765bf4e8fda7df6a74d5fb2d3ea5a3fe35d7bed55ca8d59b3f1a5f98ac55d60647ec47d1ad36d97eb73cd7884bb2c3e7eff8698e961a33ffe919b80991872d08ffa34c7a1b81c45ada63ae9e8e5b7d35dd786684d61a796136589b1e5db45c68b8c72430cd3dc0625cbf896498d3da8e5c701be4b53bbcc775ad4b3efd8086f37d4eb2c2f0189a575033a1b7c7e78624f7d60e37858aa0e7353c0070c68a0d610b65d698843b5041b7811e659397c64577702db3aa2c038d971b55d80c6ce54d42c2143e1edabecc60dfcb045e7ce08b200553a41bfa8417285a636f3d828d4a19420be580662f961471d76589570358fb8fac6186f81b17e58ce6d22d907c09646634ab13364ab9ecdd1a9b8cfc6ad55d14a4bdc9b5caf1b15c19e5e2b801eeffdecbb5e47459a84a32d3f92b89566ce5c1f8ecc6a7a81ffc0baa4048cb585a6451d86990dfdbc270be4658b11ba41e4bd7b9722bc1e5117aa4c92a2c678391bb1271512576a8cc67017fbc923c9acfbba8dd365509e50b777db5ee009598e2cdd0541668c8461e32678c222b0b29f7a9e5b9ddbccb14d8246c8e0d00eda51300cded7282e4d299f7bb9786bbeb2810e545db005e2397c71467df9c5c6d8ff54dadb3454321690f4c61b31c2af606dcf4ab8d8ee24393d189c75409a784796b65be9a999c07bd80beed87ccad37fbed1740671e693c86e02d671461b8b940549c1601d52ea97c0021207347965c44351704c1181535878e3f0ace41e778a64e37bc6925d6863454247661dfd9a105f8d80861cdc007cb49c8155ba2a0afcf3e70f7a90db2990d4f6cda8edac96293726f715478d5935eac048da965f0b9b6c55e6b8b53f434afdba2d7dae2eb6db1d7b6d0ebb6e0355bc241e9dab3b121af55230ed02bf554877c06dc151821d8b657a5fca5c1c04b8c061e820989934dc0fa76ac13a7830bac420abb0e093dd718cf01aadfbf8a322ed7b672626a6c7fc9ee53cb21d459f5220d143813477f81404e1f8c693192bdd76fa6e9151a34b038b60cdf09dd62bafd7128e0a9134a6305f104094218a53a62f1384b5d26b58c52f57856b254f968f0d80c2fd712548e3d16d388bb8eddfbc6187566c59c75dbc327a37b08b037549604de415e9af24f6be62e13c39e7ebc405af0c32522cd58e485a2164e0c408893d43e7c93e7993d3975a898c0f3e618a88f6ae83b98e76e40e42330631f1ba8390de1f4c53a689905778b2ec0398fe9f90cd96070d1362d0d86e0bdc1cd6393d59200fc87c25cc6f4e1e1d6270d600a36cb8362b0d22798858d406a2ba3339e06df3b38a2652bc6dcc16cfc303cf771fd29aaafafa23524e6cf27ef12eb79fe31ed30bf782eb402f445d14636d524c40d76245548accf2cccac2cc9d2ad64b81fb5ec29d23edcfac1dfb2dec12a508a20918332ef71baa6603a630e5185c3355bf5bc3af10ac514105a25699e07204ac04d64f8d9774dbcfd773e8bd8bb5897d81b88c51505f10ac522498c9e0c62e4569c13f123c37ba70decf3b726dcf73c7131d7f8ca15b2a13895fe82215ce3c8187bef031e44014ae4fe5bc42871b14af3ad9b4c32ed87e85c3da199e8f4f5cdf85f8808d11f5b1ad57cb5e6fd97f5833483b945a3cc692fdbaff05a650de2ee176072e24c70f4e2ac9a9952aea19d0a957e0d8dff1a2d39a97aa241bcb7f1fc8f3ec00f410530e2a4c7380d0f5bc890f774085474b41c0626c49313d383c87529cd207e5c178b4f36043de1db62a2788e92c4cecb97b1b663597044695ed152e7a2290ab5954f3884a7f7057d6e20bad818da8e84cc5123d3028d4283199052cd08c3c2651e1a1e6e3f6c8f5858378625481d755a3564a535daa4c207439dce5e6d3e08538d5c170ea8d41bce0fa2d1d0fb60ba7de850a0d894734da3e92699339f03b271010870c6e142c311991b74a03fbe20e45ed101a00391baa65d67208dda0cf74217e298cd2ec1a2bd0f98b2b00106c2f0530d5147f630fa248954f7324b4203c0e21ff1544138d2348eddc117af5ba43bb0b9e420c00de285a6a3dfe72d67c9e5c5b545450a7d9e300bbe3ee46e709ac05013dfe3591cec89663abc6a4f7a55a8a32d15e1f3101a56e2845a465c2a2dbc8615c9549c86ef42a254f2345713c7e0cedd4b2c30c303c3fe30011230778c5b84a126d152985fa9366279da7dd6088234dc563f6c8c0fe777678f9ed0440cadc488ff2927c5359fd07f09028dd003f2c46837f02eac695f418f39ce97b7ef4a9e95a4203432f365ad3e901d6ccd9d3076d20463fa30e8d6b0afd940e37e7bda4d260baf4cd50616fd4de7c3ae8e7b71831aa9c29deb84a05fb8a8977a13dde4ae15a849b7dbe8525d1fccc5e99778379ec1fa4174a0df57005ae0794c569a83d8a8455c813bdb81598993b6d49e5019945ade79789a6ba601116f92bf54c1da17d5a1d0f98e75c0372a136213a43ccd4d3e2276f03651c0b9b894d41440c35488057db491b4014a04dee653de6ec5730285f90a571a428d4e809bbbeb253e1654420ee33082979256f68cff991971ea3e91111ff77c62d107c72b81f8cc273491174f739e0a89ab82bf09b20d07db7c753ef81b947ee2c184fc7465b47288cb135d4038a3507e830ee453ac9a560183ed00a68fb3b1cb99081d5165de1e57a6eff10c73c74a75cb8eff819161200d7ebc557525083d127e0fc0c819c21d779297e855692e3d5e57862474b7e7b7dc628e5249a99abd73968f337e3dc5498d129b7d5f50743cc9911aea572d2ed0cdeb91b24110aae87f373002de91c4156a16d78871c41f7b26a4dac30fe3de46a306352b44dcda1e2d9dbc2239004021ca36532c08ba597ad2da7b26bb5bd21f13a98e9ccb1281006290e8904fc3ed8037f2f99c12b6a1ba5ff109f7daa19a9c6dc21f46e98581c01ecc8e55e29137fefd76c18efeb33c4bf955197cfbf971c81fea30f5450b9094b99aec4c44dc01d72a3c23b38f78f56ea429678c5d46f99dec93df626e90ee3cb9899c1e944a186bebccd721cdb9dd689a6c554ff9c0570e807e7154a3b930ebc4342daffb0516c2f63294a62d8b5f02cda399a1993f8960cf93b93d501c5cda59a3f33c777836b6e72c6cf716892c0006bc67cac9afd914cd53d5ad3b8a55c6a1bbfc4113bd446096fb3d35677f09a70b1994fc42d3f6ecfa94c7495a0007a2e7b6bcf4cfb78945a78accd202e18d0c6de20e53bf45a54205803ec986cc82b40e26f83ac62b411200a92ed323e5fbfa70c148dfb53002c15cb87791fd48031b9af269e837a6867e33a3471b22c831dd61f5f056fb9885ef45a8601f6ffcade969650f07871a1a7102ca9bd4037d6e590d74c06e5081b04a45df78bc2eb43fb894fe82878596e880316435cc61e2c283edb2312f7846eb16cda3e862dd86cda0d20863f5174951acb4f181e61c27b5831cf538a7b6f526622dedd5927b59e1292dafa3dd6fe2bd3323a0c01fb2bbab330cf2ccf5b4ef7159d21af8698b3aa10dd8be460331a51f592831cc06cb0034d42f4f997723d9c0deb98ff8b3b5bcd891985732da9b61f79513a11f3be5bd37cb9873978ea9ce00b7b50b7fe0d2ce91403acc129e508b7f3e5d9b31cbcee1b5645df16abb0d1e7ece55848c3c679cf888dbc55cf282047984f09f775af76f509be30da57173569484baf85a777c4b12998fe2068728a32557d54b7c860a5773d6dc6248d50fd49354342ec7a1591e9b1333c5944a6b0123eeb7008139adea412633fcf7075648c4103d897f96387eab1e3636c25ca6c2e5d4a3b37ee88e6283afa03b83dac13b5c315889627acfa4829ec0f3c83851fddd0b152304d7d265f0d6383946e4cc1875997cdc6876cfdb5a7b1ca9acd6e93f968bcba2b3939c79bbd8d9042796f53582c9c336b27620edeb55214c8eb4c56e98390cd6786460582d8ca80c013fe518f84d243403fc9bd9ec00a2451a4fb66eb5d298f98e2f3ae45b1a9e945ddc763b2390d47eedc003648a452b1dee1294fbf2e0d9fb9b6660a7f97b01176450dc5f72e8d5558ae0d2c47c19f820b76a8af2513f0127a62b4dc662f94845316fb70e665fb78d6a3aa38ebbed6884c1bd71385c9c7fa09908b6928491633957ac6be9384f20112db71ec1e2d846cf7567942899db21be67968b0b896c784b3172e7d98f20255438e434044fc76634d2ecae59a02bbf11417d0c08e9ce46eb14679e639444b7819d65f594606e895976b91a4bb0ff79e5b503c6b39359c617a731c598945787e45be2a4b72cce7192ec497acb30c868f48e427b6a233b0eb9087450ca4656ff068664515d94f52ad619605314d05f232848cdfc4d6483d9287adab09b06cb82ca27b56253ad8f04f3cfb7a66403f387da878a59044ee4f144197cab0cff956c8e732294287a10d6c081297655b29b2a022a4eb7420dca6d07c4b835040e229a1a042af752dbbe923f2dcb4a4c20c05546b4a823e3ec45e333d5ca35c9820e74cde2c90fd6c92e3cc70ff26896051c7bd0c6b0472580f4c9044fc686716e917cbbb942a3bc04ae041544587350157d79b295d49b5f2c2d05adddb7d9acc90f5c4a8f09b408a1abcd401dafce97b29b64ba1bbb446656836955a59c912f99f8e180afa84ee9e3abf6e02c0411fc94204b9caf5a840ef083fcc61c07b1998a4065621901c959ced8d4ece4a13e015abaff3e3b802cdc795468edbbc90678485f89798b8b703626af11e938edd1fdf18c6e96875a3fd0deda8e571410b6aa13a5f693dcd2c71cee514a49223ab95dd5b0d40555c3f9cbfecd777543ad497ce0b5468406c082d54457fd17b02392027a406acaceb8831ff8b6ab509809f99d2c4d6db76e7eb8a225261cb51d80de6417c0624159113f64e2b5de57b6ac9174ceecb279f0450e76a5a24a8ea29f12d2506436c89a14e96e9502d8e99b730e0183d4d5334503b90ee56360d83ccda07f786fea347d9676a000581334da699afe7266910ffa651e2f3d9f02116f26a8b813c8f321773679cf6a538d96038991a23d3cad237a4b6ad4fcd0e8a0ed2435e1c9aa679dc53b138ef70513fd0a75db03c4d26b0d137ed8a13e91a08673ab01293afcc6c80ee946965b83cc53b07d6cd12374d31a15c8505c5bf5cb27cfc9306d6613fe388d0c48833fe0b075d8cc3987f2ce9d05cebf58ea885e73bd40342439f01ecd4052320a40765090c46573c7e6699670d3bd180336f61e153df22a2a4b132b33e8f270066814db8d18fbf599cbe6bbf8e6f9cc092738b8a671dac9b29ae2e6c5588bd39afdf02ba11067721f6b70bf53d4d86ea944ef63c4cdbb3ba040e78cb6e7db01dd366a90441f7e22c6aac3401b3fa3f35ff9f57a70d02f41ec8f11890c5fe80de80017e298074da6a80e638c62edb399d7b39b28decfeca1da4e4ab581bb5a9bd38b032378eb70a548869feae1f7a2abeba9eb53ca4743a8de277457a86854542a094754219cf53530213d886c9894e446c0b8e58fb2c8ea4455739898411201e0c2dc76c666fdb62cfd835021bace20f41f4d17d8f6b6a9a150e7442e5f890ef7492224919ffe1f248baa1d7e1522572d21f613767f667c9a3d8e11f07d3640c98309ef77e9e92fc3b4284d42d7fbdfcfed401a95d8159ed8bb22c59a0532440dfc79f90b1a48bf2c361e5b11092e4ed815625044730de717cde6ad1c16c47de0564bffa473eac5d1be077a78ed9b78e82b600c86f5c1bf2ce73b56c49b6ab2a7d9714d5fe819d18330e8e82d7702654c4fa3cca1dddd5b7ab38670a5cc40938dfe8b39c71e1486e5be944253a2dc2443df743ab6eb1343554b22f184c51c0150e6bf8a6c64396562cde78fd4f7d395302439da877985507294b9e29db02b2f85a230aea1802535c4eaaac5da697bd6777a682658523d08a9303d4fd1d50a547af00ac9c9408d55ba4098bf010141518aa91b09cfee250563768d3edbb9fa973ecf57431a6dc6f6cc2953914aae63c923dd184c6a9da5e9b20082b066d08ccf001cd313ff97ca17ed945fa1f7cbbd933db5573f9a5edcb53c7cb467fba93218f169e7fdb007c14d113cbd37c747b08392cc0a57ccec44835bb2be213f004f621a818beab1e30063936a421cc5132243a040dad106db7bc358482d175395cd6dadf3cdd964487d22893f1a0c120eedd614000c37aaedd5cc61c8243fac40055dfc478ccdc1e0a0d395cbfe4be8ee57fedbd49da6514b62e72d8471e10c03d54e43e92d6fb8c42e3caa3b750c9190388b26bad52a57a28950561e9b2e5e0a5124c679c863baf9c5ce6ec492cc2cb22f26ffadf8135d2c88d873d0cb4bc711e6aa655160a8499372482eb75e84453b0d54ca9e066b4c06d71df2314c655bd770e7d56d63927eb659e1e21a84b88621de16b6455b791894b9359b2ee17dc3276254d603c6a41e1a55990740660c1c25b167ffba7482b77e156f33fb1b46c65b2c975e3492a8b593acd6a997585e64ade1f117a670f038f9450783e20b1747b792482c8b8a3b2c5f2ec80c664104d70024b6f4265eb01750b596e7f7c2092460b24def4a1595073f217cdb607541781c486a96c1d6a586d8a1a4e868b312bbcbab1bf5fcc4d9ded0c0fa7d2f130f37a59254c7fd8f23a9b1bd1f03f581c27896c1b3c0dd5bd3c77bd0cfbeb5e2071a639e0d6c3dbbe506dc176178e52b2ee0068d8e9dbb4170901fc35ac9b91db95120636cd26ace1b0895a5eea8e99dfd15580604015548e38fd6b876ccb88353956a451bc547d00a4c15c05ac63a772eb500ee855bad61b8f7aadbc24a9a005c3cac459fb88de7f03766a02f051a71f8b659b5a44823c4990702fdc227097f458bda2a588b4d3d2c630298e9045c13b6f5ad69b760da983b56d4d9f0dd609191ff670c4eeac98b41e5702684cf4a1b95a3887b5001218656aa3f0121755cbad47189605262b1019ada54bd926d942a9bca502d95775ba145e6e3aa3f7856c4cdb8a04a9497d0715bb338a40a2e2aef509a923154da121576c28e741a16a3bc59fdc53c06ba61725d00a6db691770dc61c378566c8d5feb4f4ef30bf0a51aa23dcb2e9fbea2eeb16673ad266d0fefb68f48d4963943056ae17df4ad71537348d2438f87098a8b7f68ca2bebd4784362794bae1a0807ab30a2d863c11f53c3b3b51ef219740fc54aee56453bce1958fca1fa15c8373282cd88ab08b3f9787ed572a4ecb0c780a87add98d95eb57fbe1906fc4a01f4c1c13571ae53e6f2df7e86d5841dc087dffad1d4466a98ed264ad4ff8366560e1fb729ef909a94db290d53c572dd2d5b4327472e8b5302a426e7eac2afd940fb0aa8d64bcc2f73a25c1391d8091a77caf71dde7dadf4ac80159b24e32f69e626057fd9680c7afaa9c6307f332616f22271744be9f48458b62bb9fa23f37aba0a9b6962e6f7124d91b98654748527bee08da6afa9052feb232ffd144178f524e99782b48a72eaec771e47122c37d80b6230011758aeb636a610b030de7dd05c8b105ce30c70076e6705d55eaa2c5d01e2a80a7320da5d6ed096eca64c7e282c4fc7cc417acbcc608ac7ba829140ab6e7e79545700de4e0c75341f68684545ec9f93e96188ed9195af4981bbeec83196981f7fd420a05054b123fb31d505a50f38b6dc3a22524458ef3be92abd0573fa14f7832a971a109c70e7717ee05e7f8a28920a7c36384fb86372b9390872c72101d273ac4c621819e2792b71ca06828e864bf3b5c450d72078b46edea5160417af276766bb984ddc30976b0023aae342473fafcfc1e2c3d97590d0a1c7986e07c622556146e02f35012afc8bd4c6627bd84c9178ac151c19163019481d94f9d83c561610377b28931ce133913487f151f8b3fc93a6c72969b6c2720b06a02ccd955b2e065952a7f4d9c68dd759ac2acb4de9d6e4a34da4000b89e3a6ce95a66c84ad36460d1d2c79c90436aed9c0e1052d52cb41d5750bd4948d7cd11542e3a4ec6fc04ae185961a977955a1b239e25eba48219f119d8455a521194e7535e2f2c544695abfe5e810cdfaa8660b98c019f8c9f256938e2985c2f5d510ad88ce75718dbb113cf19cb57d6490b9c4cbbc32712e02132a2be40057ae29f4e00cd5eaa9e4aa2ea568966535ed25dd58cafc1c0ec67110f4485f747aaed69f56792114c45a1636ff59ca5e3636fa2aa364be6af0031c6da15bd3dcf5a43f9b10e671aecae0fc5f7959471c166c4f752c383bc046b9fc239c6178252ceb5cf3a3f36378e2da9901b4d3cea13b1f1a33e19f03de72cef7a6383752e730db545527a0219eda03f6ca784b2c31941d216249e3dc70602e3a129acab4c6ca17a842cb230035b072d451c633b2899a0ed2dfe02b97075dd4a2a0f34b014e82e7d55e9c507cf9ac1912d0f14bc2cf3ccd674130942fc8c29820f80c09c9786128c287aab1f83ad3f79263a24562ce3399390e14f6333b00307c60400415e8fd39538d5d6752af734bbf1586ccd09600ad3fd0081e8053b99ca97203fd7eb7163abb169616e730c565d9c1a56c88149e8215e6e4b726f2526891e480831f06645f3ad71288f9d3666cfbdbcecaed1218c362a9d8085a99ce3bc2150c528687e1b47050db0017e75aa19c86023893f712f8450f8ec23a4c7d9b40b0d1e9e018cd747dfbad81324923ecedb2da1efc462fab0712d053b301eb9f6b914744dab71a6dbfd1c49ce6ed09f2d4a593ec5581c3a49f700b349f52a3e7104f24f29b4f0bdbdfee82c4b5380f66fa81130202e6c14628a2b4bfc21cbd7d4c860022dbd54c7210012e3ee9743ad92f4cae7b611ff2deec9a442b3c96a2a0869fd2215343a99bd1af9a413eb150f34f10daf7513a92b16c8b0785e76d492a243478283c414930cc8bc2c3584d9c2306246441147d2d706ab9611bfd89900706999e6b25c2700c469096cabe5c181b0be65e02e71717452b10352333ff3cf2ce79037fdc8c641200027ec0af11389ba0e3a35e761c89ad4259205e7e7ec30c0b2dad090492b531869eed73c14481bfaa91af840757712aa26b39e1b504aee31ed01c0a6d285f121ea8108a601314feca1cf0652342b8d42e462b1a8ad0fb5146f190c9cb909878b87f68776ce95a5fce7c4e8d07d13b8c9d4c57966495397a9c9f96622a73144e1d0ad83387f02173585cc9c137ce59a804f85d8aca9c58caffde53e68c83dc0204106b83943910c38d2873e0cdee042873c09b11770d4e7332a7dbaec99c70e7e284af02bb99fe56535ad7f9ddadc0644eee6aefc7b21de3f1d6dbc45ebd141eab2773e2e33bf308a29ee486e8e5cca12ca067246773191313dd96c6e87045e6203af1fcd5905990f2d5e5d816217302cedcfea30699f33dc717aaea254deb21530fd83d8b12c89c59a94a822ba499431f5c053f3d93894eceb1347d2e41bd2d4735892d220036fe74584ea0ed4edb98d3a03fa3da73d956a6c29249ee82ead66e9da5bc31678e4efc1b692dc5e70f957ecce1925e391289487aebbd7db1e3f6318749a5cc613dabf26d6871ea14c10f4b47026532451969cbad7accc9a755c63f0e1dc3b85c8909f1336d71063ce63cd82f18e7123b46278e0a5366c174cf71dc08640e177307469e59943b18b39535ed19014b9d3107f0bdc097a5a45aec8593fb0c003e39d27ee3145c5e20ba5afc31d4c4b062ceb1c03a06feaf5f127354841d71ee368ed39fc4a95378f8717b07c51c49bc7b825a23e62c8b47e42bc59c32d2630ee9633628a4a53027ab4115ae5583efff823f701b42441080620e1f3139dc27e6f0e800e07ca5a27693c41cd0c7fe10134272eeed0d7236c0fdf9045128c966e1cba49939714025e47e1235af8b39a85e44ae0046c76708f11314146eb79b806917c67b5ba6edd8ccbd799c501daead661b12e60dd289d8de99072686ef53b76a2e8df959ade8e2e4b5b3b6b981b99aecc0e426489fe681f04e4d521d6cea7df27048b45f56b7da9f83020983f27ce0c5c4802bb8a2fb5f3a0bda04701767a9903d9ddfa20abd6f89d917530fcc3e761f03179aee0d15517f3b36882b684cd107c318554123bc2c1853c9e32667c287908472f5d46bef9d7429fee202a98aa05e6f126274e42ef920869a9fd492d6dab199b72279eb7777f2c2b8dc0e34b0bf8fdbb8997defa13a3aff66e2020a0f67e307794e0028e13a1bff1b8ded28777d2468c8f8623bc246579074ff598974ba53e205a4f3dd745d3d414139eb5fdacf37879ba084d5044b50586d548113d9aaef095242cb621b49a61323ff0f057ed19681fc78edbe906d654942fb1a71e97f0d785c6240f46638c6c51bffe9c18fb12acf930d4a7f0eff079eb80e2126b9b013ef38e8d87552eba0116e981eef355e456aece611347ef167a7f097ce5a607dcbd938e19ae63e5815bdb73e396b5294534720ef4a244559097945d35348d9b4c35eb13380728c2619eea407b0cf7284e160ecb26359cf47a763d0a762f034548bbef3cbcd4afc59d8aa5d8631d6656a5172871943c1b69e6ac6f21856dfc485438dc64aab396cd675d29fbc4e875b6aac34c4ef5404b365ba1562213e4879cce46a82e25afd441eb860c215ab967b3d5558141bc92d2b17b061c0320fa39e7b36b63ea6ac4d8fca37a36d8f05cb9c33f09251c069c89625a446e584e4f1fe0660011e74fd41e0451be723f0a4d62f6db5c3c0823c53f0f4e2226411cce7ed21d70246d3431f71027e500765a213fa3a0635d09e90616013d78987a710aa6d90186421f0707488182cb8e381d5481b2a606a1726e25ea9e5d35e9f59bdfe3a371547426d9282391930f5199dde0711fcd0959247caa7e99cc1b4f14d6188c0e8948b487f9f35079241c6d6675de31504c2a0ce46ee632a1585b3ed298c5b683aeb96db1cc0dca68645158e168641284e3e560a3ee215d8c083db4bf24afcc10054adf680a0f226373053074c0e270df43b0eea2908d6f9a0496f0697aebb586bbe10e5a32c836b84bb846776ca9ff5744fe25bb387b62f1d263bacb155e9cb45ab4811cf54617b1f31028fc04c6d56e63d5720073e63c0ff252740c064e1e438dcdd25fbf13daaa751403b4812a7cb7c566a328ad55620fe024fb02d7ddcee7af6335794f9d638866927f689d6d74f824126b4c80969c422b2cb4732e1e88a0f646203ecc78718662edf80e3e16d9d0d9e4c61fae5f4d04fe9bada343e766bc1096278cc76bde57b6a984f0db8230fed89fdd14d70a46cf584825b818ab7c6267829c4c4d18d71d98ee9956ba607d94831d0ed12513778fb299889e932d3b8a5ce1caa066bd76995b396da479eaa3b462f892a7e7846d727f2d050b3b8fd737ad1d48bdbd6737189433393da36b4c4556dae8a7e44e45d68e7eb6d5053ef7be5e10a8123ec37ec650f650f13705031c36f79de7261ebc0d2ba2b00598cf2ded0d4f646d119e37be9ff53579ca9df59be3d1413a0d9613f5908c217b7b427e23a35670d8d150f5250a06776ef6d0b112b07fe4b9d7489b6cf47b812497858f25468a050e3ce5867cccc24e3182abd59c436953ce4345ef4e766376491a558e1bcc981b77e20d3e01da7f763f2ca26861f2ab999ec06ac0951bca586c25e154464bdb1d80ef02cd0192b7004cdf4208c9043f31dbddef45930e4b25c672fda5b6b722120cf8187f9db40daec2be89a18930fa509a22541a3ab34263031e6a46aac620b759a8888e793848ef2c6ed4fb893c92e23f2cb68310bc7f8b04c734f7d1f2a14e64766df7b3b5f95e7442470c03614268a31e6ccae94694bc2ce3c475707f3ffe1a4268bede15fe9321c585557fd7d693553249256b05575664d1fa1664bec6015b2e7f55151537163f1b8274345c00edae499ad4c26fe951683a4d503d6ae7bbee6c0b6b0a0c649dfac51764b68b970dcd01723424ac21b1db4ecb22009a704e89a03f462869bb2947e27d8791e14e9cf35ad2a8191d7068dddf0987a204c0c907035d224cb2e875df5bc121c2882c8570a1957d96ffcc5a1b55dc636a14761956b9c20f9cd2bbb9b7bec93432e699ca030849ab806e4651bd85200826d587d04024f98e12806d40363ee5904741c18fadae0ac53df9ae2ada49a8228de52c265146d35eb5be0102a75266d65374109c893a77bf8f087bf6b534ac0992a5a9c41414c51cf912abb1618ca37f3563cb8ab6f71f3616a16bd51491f9e268414ccccf3428ec8660c061bdffaa33d7b8d02c413a45d0de806f33d3ef48db58a8d1dd2d8860a0e427a8872a96f62f2a1697cd4f36f98be8803d5cd5d1a74130b664a588d0d0f399d1671575fdc10f08e77bb64ba440b3fb1cc60a4f36af713329c4d36820036f5ddb23687e4427d693e1bd6b7bcaa47c79b17dad4d4492a0425645261ee62c35cdcbb17e5ef4618e214ab376d0e4443b8f075dc03907bd26716f0133a5228136c804a46eacec7df468f9e964f557b6b324d0552ae0304b2a79e2c0632f273a3f4c36f23877b2036f110d53924d032b21430e840705c3828e58cacfbb995d5c87cfcf2de1124a08ac77308dfaf844ddb5b9a8f8880e13a9ec4d9380d8005d0026e3bc0309e44815d4ffde22a368780fad74b2829916354318a5df2b403d8aacb9316eada0100fadf86a60244134e6584a2e92b6a8c0c6a90ea2ce6bd2e35e07612e1ebfb6fd6abfb39ab45fe4889280a41a99b68dabecdc73c2e9f0a959d918efb3744faf23a196624e147ac318df76e330608f99669c9303ca7a6ea32d82ac8464909debd69319b0ba39281c9701f153105d40aedc42a0178955394316feebbf03e315d5f063402cdd4af845ec1356a2c30835a7d83f3e96d9d847322f331d5fd3f00023b0110ef16970585225bf9920ddcdda2875c74de5159f9ff1964289b057910acc4301f260571c6e36de7c55624fda7a6fb751cf3e9ffc88ecd8e7119d6acc80caba373450cabc2c292b330dba7aa3853cd83c6f1527f1860f76f0c060d7633bb02829a6dde012fa469a2095619f887bb4a8bfdbaa9ec013bb18393b2af178cc6aa5deb236fb35d2d7efbf8144eeba7a1ad7ae2b10a318304ad91a6b7eb98e619975faf9973f09a8640748524ef2292dccb0b962c8a8749a7fe2c5cfe17c87cf185392b120850cec81078071c885c40d8e309aad1ff5efa99d8b813842e7a77174ce50f9b081bccacfe69739c132cd054ecb4a89a00b1a2e307c5cd826d0e8064e089bee9ad4a5d1a64197992d0c48519cb6002a70dae8bebe7275c3345e54f39e124dac108d5d0a593e5e45ecdffefe499a67f4b8c30e9e90ad2cb05213f476664f6c79bc5a8d403f5d227732698bab5e16814bd0cf45041cb297af9ffa7269bfe0893f255d8f82e112df62fedb8aa3e39442394efd0bacb68fb2819770a0950a69db33fff82db1ed404457c6820b40195a15f018321c75f0734cde670f94cb03e4d95d338c9230b08e966b46f1aeba360c4051da5b132b3d0cc193af8827a7a628b45a3b2a3832058d3c5c570ada1dbfc70d13d1471abe1d9852ac7ef3ef01a21d2294a5603fbe905e644ad885a1bd0da3068aa48258eb3a98f7dda3af6a9baff429467bb4e5debc330f94d02ae29e78e59006782f316615d354ccc39f41c12f2db6c500b5185298ed763fbde706bf907d1e8fa3896276fae92951ff6148a8e48124944636627922aaa77d9ba7f4e0b51757c2effd68c3e3757d51adc2e1a3a954b15544f7745c45db4deee660c0becf4529f0bf4234420fa227c1417a5b931843f449f6abe290cccf1de486161a38f19fe8c4d036633d260d7691aaa78618b21d43fbdb204503675149a1adf0f042ca3014c385c7cfeb2bb9d07fcd2039cc88e18a6be3358624ca7fb4ee64fc95dd5d2824639cd6e68cb40aea34ef7b556ff181587a83b73e5c2b77a85d14c1006086d7de5cbc5aaa2b049c833b187d81483b2e19e019dba93de195078e9521d3a656ef4ee4641e519829796ad777f3f05a535d4c204fd58e5560ca6dfa7056f955257c887a1d13696c1c494d721ae75ce01f6f3eb25c77fe8c11bb74cbeafcf24410a4a79f86af2706d3aa40a436c218c312900602e2d0584bc3a523ce548a53cc11d38b2b6c4c85e77697f732c938f1cba79ecd41ce463450c1af6d61a1b99d47448d9e9b8480b9171e3dd3488b1b7facc00b05e0f002b9a68c05e12447740a4962e1b06966a616811383567d64218edf59f33da8d8af018dd5aa361063362c5c2d319b47f646666dd5aea4ac9a7b7be190619af5309f3a8cd8760eaef73cbcfb056db834a8245f860c0faaf502919a5bee0af271801b48f0328f41c5fbfe0badb4f1eee453c75f62778f61a09cb2a230d9d15e713c78cb3cc3a970bcf4701c7b95e16f58835a03867c51f4c92f38842a737742336bf39cd02b7c95e84f9893d7ecbf6e8bf392f29b3c837b1171193bb24601c68d9a3dbdf48030793250d3b060ec44af7583807e3b0496ab23585c633cf272c219ec4955982dabfd9bac33405c15581459706e10776b7ff3230be5225071406ca01f31560eb7ccecf34f2ef160adacdfc2122aca4a95e1a9ddf041495860df618e5677f4263e9a5de5ea942c0f7d81be4f81c46bf23c5ee6983efae0d56ca1aa297d9d4a96d77ac7102c58785dd5b2380a040c53a6741db51f1b5aa17472feff43b0057e14958b6961dd773f337833bd5ae013b7ca9f057506082207acedeef99e420cdab5ebe8b0db6da488f30284b0c357e73097ac5aec1fc0b29d4975b9b28c502542493e4e5d11d17bb34d5e8afc2d2e4b7d2c3ab30179ab5c5aae9e2716adbff2db2e98a9b8af7e827b4b62dc4f5ffc0cd53c4b7701a29c5fd2731be8578d732a776c643148c046d33d0bf5b52a4b224935be6cc42561add060c910915800cf19d64f6f8219f589ac80f915a929d90b990b8a364f77b366e55eb01d0bb674a2df8a0abb3ea3835557633fd94071a6dd9fe4f4513e8f614920f36ea9347d8b04f9181a27852926e922c6e3a8a25fb2b8a1386cbf190416444eb7bcf683fc64d9211d5a018f5a40a12cd128813d20d95ead5fade2499a342de3741d51f4f14c60ee921873538a985d286fa1abe7e107972f109a75286480d595fe3e414ba30a11e7d3035f6e6fb72113770a1bc383a3fe89581b4cd976d3627179d5ff56c5459751b298338a4f833f4562af435c1c49eb07c7f37b05b84b385593bf11b1f3ca1f34f09737fa1c22043f651270f2fadbc6dc26660b68f92bf8f686d8c58f7a7e295b9a20e7b8b2f6a105baeb5efa1b0bb26300cca4672ba9e894104b3085b0fe0fc96cdb39786f8d5c9bad716007f4ed5806b0c62ec0f0583ac949bee33b860785e0559889388058b64e08db9500aae8b9d6481de490b210a6454094b1500f99496296dfc240d0561bd78a4293e0bb54981dc1559d09f00249566e75945a81d425ecaa5e7fca4197fbb829d0009fb525c049bd2f321b04dd400fc35c71555cee58c4051350473cae6587dd3083c75e93f884cd1529eee2d81e24377b2ec6d08c0ae725899bd0314fb3d5cd0485c8f7213639c8587e86a4c413f67cb95570b705209f38fd3008b4450b943cd7dbbe11a496965c2ec370b64fbae0ca8fdd8b2a4b966ad8b87465fe15e8f5a2702dda00685cb8d0376c36064c9bcb964611c3681a7ac6620023d0046ed8bc5a07a4deaf9e60ba03e2027129e76c6aafd867d6b8cb64355dca0208466c1962bfd9babff904b2d060009f23324c27572f3198bd83cbe73fb184ee3b5d2935caaa80440e7ce2f948ce84a4f51bcd1677be7e0674a07eba5cd531ca20c00cf89af2805a8cd9ce4c9c839a3c0d304000cc3c5c46cde020400cece4fb1cd5e528ed7d5ec8514dfcd0ee140b6e9b208b56d4f3507b3d72e5b1d8251cba47c4e30dc00809d1f79341386ae48d16fbdbff29fd83905370cc9952664bcf279e721c1c26db3031307020d05376636a0bb8eb2820e139f12bba12f57d22513323771d067687d7b292ee6a7d9d91014a700061c60960a54c7449df62fb34897736eeedd3b68c87d5594eb81d54ac2d63de9de90cb27a140fd83f0041d8b7f05d706588b16417973da6491a0f379806e81bd6bd37d957124c9a04708bbcfb61c3eccc9e7c4cdf169403684c1299c403810a2167eec24eb1cbbefd110fb7a3bc783aa9564ad07cfb991575d4021e53981b8fb97eaaf9ee3c635599422bd9ba00b7040a452c069f89036dae791057cb0dc361aa0ecc64b7bfd73da9ebe9f098804af26b01dccd6a4ed4dceb10debbc2af72603270ad49842b4162782c0de0ab1bcf45c90e5e465a0956f50fefffdf559ebc6ef8df3bc161727686d451571365567427d86d221067b14c71b11fbd7b07c8962743adebe17af2414f9c8aaad6c298dd8ff5c7f10ed54c444991d389e652f08fa704816d3fda574cee9cbd2cfd3c4d0d3e2de8371d305e556c2d0ffe9a1f9b2786950e53acf90839ecabc633228a7674663c542c4f69f89cb9a87dd53469be62fae4e11c9428db8b4a53e3545ff2b6462fbdf666eddcaa03c8988674b2f42d986482d1247c1ac0334daa22eba1b905edaeb71aef2050fa481f8dd58636e605618800d69c0a8074645a1a283525833c3a21531b09ab398155922046ca8dcac0ff198a816042c04c563c5c60f1b0dbe4db9dfbc99a9964d2dcaeb737c5878f42b5e97aaee4cb82319d8da35a28dbe0a232fc30fc17a8dde728471e921c5b8d98cffe2c3d6ce49134da6ff2f23d763cfab8b5d293c8f1a2db4df2fda6f1ac154894d8f5e6a8144e83963be83fc6e0065759ce919409e734df8f075b549a188ed8414b3840211a9398271d78c399fa761011ccd0dc44959029799aa342ca2ab1901024271956eb36a8df25a4ed28ad53375cc0f4adb3053128057cf185623eb2d31da7fd3886b70dfb95e838c612178d6121fc1445490d7bcb05a21a1459e6a266639636b83c514618ac88a3c8bd6c8f5837f543a79592025d3b476301bbc927c941985d720f6bfca59e078a682e7e794bdadd77408cd0ddc01930a0b4b2d8722dbdb8f5b3643f608f29aed55e54982a9739450c138cdbea7cdf7dcc53a94c73b506ab31ae34d32d198a1855aa3a28ab55623886147921ce22fffec6d68269a8abc1f87eed4c639a2ecf1b40a98426cb5f906b94cd7c69a89f94fc51d305a8833fe98942e020ae1b5158a33e8863d53ebf13eda649928ab765531e5dd43ae847af95ee5f669eabb11b9a9adf3a20cc5b81b34c0fa57b7c251caa0a9668c81f2d3fa65f908735a801ac272b08d34caee62cf8bc0846b942d2b5aae0bef9dba1ba9b3875afe3e030902b498c6a2da257eba344a0d72c36965b3e27ac92b087dea011e020c0cdab5ecae1e119dfb0a4d908145dd5d3742b1bcb7826482150da995ffac846a9cc586bd81be4dd245de7a44225512f9d8f611a4f0a7ce08118e4d1dc925d4e83212d5995861b5f1d1d3b49ccb75dccc1a9b1121a6da628d6c4ca877b1f3cee155bce0545598f11fa4f90db53b447d2329b0d2382cb45c6e12e0557e7772317a008a4e355250bdfe46fbe4bdc913624b5771eb03aab63ce00e4b57fd9d52e92c7a86e1294dea45a65e17d70963e9c2d458695da8952ec9a98d62fdab412b92cb209a09cda92c9b9f58ab837b9a82153d56cb84b478291bd83925a20ca977b5fc4e8f0f118bf8196b90814ca94d1d0ac20d322ab4e441db6eea1d5983627130c7bbe56057c3e1037d106e2cb5408760919c3ace447f43fd29cc293732a6ee80ccf2cbe1e29bc412f38d3b4b7ffac4756bf0f923d6a44428b8ba7aef910831b0ce25080101cf152036e2ac98cf1227cbce52e9a970a82ac8c3088ca813f904e516c397e3717dc2c6e898436c277bfc037e8f406c8cbf6c88a75c5fa82f071fc17e0cb1ce474830149f37023c8c9bb416e034caedc9337e2514dcac3d14c9750ba321835df097f2c5518390f0b21e17b8e9a18ae25f47c06a5841aff814f76ba4076c4ff83f2c45d2fc03810fca06c10d99900e7c79a988b30fc66323cfcd6e51570151847957801023e4ec07ed6824fabb2193540e880235604f65ceeb04f4bc1adb3e7c5cc3c57b432f3e752ca30635d1fcc8b28aec45b62259bf70eac0e044b9cc76519cf9347738625a80e6a0cbbedc5d2d2e89138f4cebf86a7cd0ed407de5b62e1ececfa59cff01b68162b57b071556b03cb0e3132cc1573383142de245f384b058f59c9d91ae8bdcf6f5c5d21ddf2e9032ee889a252d446ee83f90e6df7c9c55e9b31af9aff352ccc81533e423641d70bf99c7b152fb0964b6be5bd2e4221f41c5d930b4ee59399f3d6006bf603b4d493e025108219ebfb0be343b2133ff24830c7218f908fea6c1581fdb1fc6496e576971de38d69898fc6aee76e47cd78141e6eddf9ec98fbdc94742214c2bebc2c736af05dd6bcdab7b843cfa05c4804f65c256f4a341ec527439ffa3067329dd071734f08505d5892110f04d6876ca77c3421d67d01cd730748708cc140344a1570479231728ecfa0c2ace67e08de94715dea44c87d40c9dd55b47449f01da2f05445940cca4d50669151130e745848045711245e220a63c410500c00dbe81447932114c6778168de8bbcc9d9a01a905593b77cfdc50fb023bf95e9cf57f070ec4a11226aabffe0827566593247154914ff2caa095bdb425b74c29a547046804bf035d733f5e6f5f088395b6e99797361ff58c27f5f92eb01d7477e99ced8bb55d5b85bed66825e7d87e7a4fc243629d183dd0cab99274b8887a62ae12371ef87c508bec0b61b054235d6d5d67605d584deacf7157128cb82ba8cb668e8b0d4db26bc13a9bb8828c2857d2e722fadaa32a57d0e62ac187b6a2e0c45b693d2f4fe3969c8c4c194556e99071cb2165498e7c9b32698fb5c25afbce6565d79e2fcb344db6c8faf35d5887955bcb9fe3ad1a1f06415f6f655f3c70d38ad35afbc220565b06a84eb1ba649ffef2bbe4782bede7782bcad73e0b20f69a8bbf88e2ad2faca62f3481fc1c6f157df2e7780bc6477f8eb7843ae06299708b7392a88cd9d82101254859356a72bae290c65f26fdb24c72a3acd6648c3d5fcfc7f67c6c4f6b9ff4aebbc7754fc8f2dfdb1678cf9b93653aee1de9d5193e9ee44e9de928aa9a3b889669de2d1d8a4076305b75fdac76a073507b9d83ea0c3af25709cd2f6ed83aa6a6dee9b6c0df0b1760f206f9c2cb0719bef6eed52a8481911981da4fd948a1f0b9592f321a622b1258982cdc4a02095a471e6c97d5d17763ace7cfb1558c7f614c5d465891f8e7cf71d5dc17fa389c994773937ce4a9debb477aa1d6a37ecd91ef1209ae68dd280ad098b88a2d2dae4203c0e85eb94457ca3542c3074ac81859599d52c74100a21a1526a06c8d90f580ecb307dc2363325cbf807d4833d70daea30fa9eb24d3db800515939eebf4e21bc610c1c2864e8e361197e1e46022d882618ea2002a69bca10f7808ec65053e9a724283a12e520376c0502b9b0181b3913ea57550bdc55a48428248e52b24a69e2b34a11a29253a9211da542ed3018fc1e490a5f90de36032336932012555a763e8468e31205b3b2caea05832f57b3f32528389bc0c81600c86564f75703af469cb5d3a4818eca40d8601570080e139d45839acc40a7898e57c0ff800432b52841c4132c0500a1e83f57000c3fc667e60a2ab08511714dd89055584a4b68342a8f87bbf512367b1d1d06b4ab293a025395e8cb00306d3511ba8b802b70c6558c143706fa84928c2172c0cb788e82c06056652021f81f7575c42b9c305d8c0194c0311fe51b594e0b00a1c333463b20657b5672c437d35832e5f156098806199bf80e4aed07cb1fd60e36349527ec8ad15b999ea3abb5191d315780a3caec39b241e5843d169173f9e6ee668602d85bd6839bbe2c93a1ad6f05175a41715056098eb748abcf504eb1a1eb039c4304c83359a188c80219222b808ef1830cc6098a5729436a291642fb61b6e3b709e3382290cb9f45bcf10152f2748c0a0d48ac021c170211426d76d202d8175cc4199066205c5e24590af20a013f4a0d2428b080a1e2aa844f41a454f9ae0de7b37c7de7bef47170ce7f25985fce4070e8c0e7b9670c09a049550cf5f7a04194c80219c04868373d584a18c6e227b3549922449a6258d924670ede3e849722ae8936427fa2449f67a7ff4bd9ee7516a70866159b49f7e91260e4b504aa29b7039c1583095cbb001b909d043aaca53cfd44c6bc0e24b163548afd8499f3cf3dcd7beecf9eaab7d5a9e1ff25ccfef66ea9b9aedee774e6aa633640e29da4e32813b35e3c50a4fc6ed85ab90fd5ba8e16bd09de96fcf6e61303fa1fae711eee7b7226735e5b1e89f660c5beb1132968c4cdb8e8a4c54d62eac2713459cb0241355e6f031a12f455101510d4d889189327d3eff3665e7f4f2f2d696f3a676f36686e3f3f9e05bd69437a918226f4e9d1cf9bbae3eeffb397e3b2243b3cbcaae3d5f5996ec11feb602687deb2147bed7d5e7ddac7c619044727bd339ddca80766e477a4c566bed3fc76e546e4c27dc6e9c709391e3f6e2c64d0509b71f1cb71e9b11039fcf07d7e69eb03d09bb414dbff3e66bbe260f660c20cce43f937f3067a07d6633b0f3a637df1498d9bfbc94eccb0bcbfeacd39f7ed2afbe78ed9e14618720373781c6c1d9c0f83b8642f53708dfdfda87d03a04283950828a19eb030ce40b10e018f02c86f5810634c87c90010d6c801d7f8cefe778cdecf39fe335245fe8fb3c5dbf85ab5a1b4fec1b930b6484568a115b020c2115aed29a8f7bb476d32ecdb14d70646b6d5592b92fd6c7152b25cacd21c1b5e19176c452c96897b07051a8fdb823a8e1b042e8cca428614371d6ee08f391c556c5ed91212d091f2c151c6c12a216432750b837693a2d591a4d1b45c5cdd1c63a2961af8c5d69b934a462226c10202d9d0e1d35dc122f5aa5207609131e1706939af6491536cb8dadc204a76c8c0b0655bbc2a92d5a728b769c2802835d1d29d8ab2525b496d8b47072ad1414564dcd25519ce1c53ab17293a05a2a425228b1563790c468cb56c85062c21d524222c915362dca5b1317c96c04185b87d5fa18714b28c1460f2648ee8f196d8e16ad17da0997085a8e5b53c72299e2c44911ad1d8ab55c475826a23ba449ee471b96a3050d56898bf60cc8c4d90e3be44cc48db856c813976989ab4336b7c5ae4db5318ab42282b82424b9426cb06c439689503bc3aca7c96c046b66a57d739bd25c154886ba7054813db5344c5546c061d40281e12ea9609792f8b43592dcb451e6dc1e706e90b5a9246d93afb6e68a6d8b724790d0a2f1b0398292c18305cb55fc69818a383de8582b525ae2ba631baebb33373197488b2d9b6a4b38b526985c174aecd751db0caaa1f60ad010243cec199211ed8d9c8b0337d584c519db43ac85a2a536c5129d5a24a6b64b891d3b62e319ee8b211da09684321ea8b211ae0cb93607ae756ae2f69cb1526240b45aaba9284e6e0d26364e29eaa88419ecd6501b04c443c6c386918dc892c38223d2a4fd712626e6f2d06a6f4cb13f9c5c23a6f64769e7c8f599d14e19720362a18cf1b441c6461cc9b145b896ad89fb73468218eba5c53e4dc539b92998da224aed0847ee8a19ac91a1d605904b23c653446cc41339d7071c5d9376eb8c15137345687d4db5444e494c3b945aa623776706db643587ea5613a827aca7150abb699fe858342a2e0b371a6a2c96d9177a2362bfb502b6f585de7b6fc660549ffb9173ce7d3183d86b0d67c7c94a98553f65119e2e8404e995d4337a11f570af153d5e3d01bbd7e7d15455dfdb164eafaa2a0755f5ba28ddf1d40b2c1e26466607495f02356c80c00e929af46edd3af280a757530d4218d497e5091343fa73e7fbdeed5eb3882af9edaca52fbd307d0962b07bdf6dcf550ee638ee763b9d5fcabdc4bdde7b7f207ddd67ae2f0483fcc2867dc1d66fee1eec20e9756e0a4e60e49cf3fcf636bf10b363627e36ab3015c6fcd257ea37af9ca758dd269efb8ae780c473363fc7725162b9786f1d5b19fbdbeb5f8af5a7b30ac795fbdd0442e8a435c757d23e2f77bef457be4a9d2104fd3fbad78c61dcebb610c2de01c9bfb6640ba6e75add79529d71d9bd1db4d9d50eb9c90265598ea54679aa4bb07f1942a973b0ff92f79fceaa033db54f617a9aeea0e937f05dcfeace1bf805e36eacca165ae41b5e82db6fb5c3f9a63bc8fbe87f352b7f531813b8fe44acc217be2bfdd83d063f021ee874737502f9bb9cfe343de937aff428a9c7cd2babfc7c61fac738aee88f7e1540d06a7a7586dc7af3b847b5da81fea5cf2f595aa19bf351e540922449fa92f4a5d7c06e9642d203f99ea13efb3db2f099fcf5ab7dd7beef7c0962377e48fff8a265c0a9ed83f64d2f4cff787a8df23c0a3c81421ecf6a05c6d1f35e9e1f3def2579bef37cf7bcd7dc411fe2a37ee755e0e937f0effb26700c81ea3dd6db4d23eff46aef9df4400fbba3bd939d54d14c969e54d557b87f3ee941ecaf55157d3d78555537da3dba7ff666d19ea7ceb078d58f796bad76208b3727a8eaee51b78beda1e745d87b97db973b485ddf72fb685df674a7f00acd9657b89a6fda4b7dafbf2efb95a960c2eee965a97a1616a156bd0514f4f6a83ab3cfddab60a772409b58802d400d1b7670dc7af7b0f8ee49a0f62b10f51b48b2a42459be5a2d35bf307ade8b7a307df73ccfe3bd2ebbf4ddb0fdb8aa40d5a7be9451d557f8c1578ec0a328eabbca0195d1b083a3cc1f7bc69ac04623c5e64f699af2f3a344814b5bf1d3bffaad06c5548a3195a2784a5c3c052ba69293a2f122cbce498bfa15eabddf749ff99f3b274dd1b685f31cb94755e0ea0380a22152b07d59dcbe04b155a0070a5e84bff384bdf584d36fd8a999ce507a2ddc16f84dc15bf00af7e7a17d5d010f2db7de7b97af079ea7e0b7de3d752b794e5ad4194eafa669fc547929daefbe7ccb9297bce4bd1ece0a4ab543a9cfbd29687ff2fceef9ee4bbef7f6ba78aa2ada89f64bbfaa2b05cf5bcb161eaf5cef0ae5f6db7b385fa14e7705ee79bc4b0bb86f7d791005a006ee24e0e6b16556edf79b9ae9b4f8f7aafd0460ea7705dc7716d56b16adb5ca62a633f4aeb93f539edfaaefa7af87d3975ef5c20fbecfd36a279c045066a3f7decd71c7d04ecd9893bab117bcab12d6c6621e562f6864a7a20d487e94b86a0225a9cad652891f2745863892d0a8644547bdf76e8ebddbfcbe83a3f0d1b2410d0ca448530a935a5a12e3c0188cacb5b41a675f26a6786336aadc30c9d41c92f81a8a42132a6e71d191b1287a21b55821355a895dc086939b1b595838aa9480d12111c10aa2da3e4f3dcc73b09ddf80e8886c734a3fd69c98558122036eed8ad4cf891e98114992244992a949fa985e524535b61ab3351b1ef92b6612446314c79555e2adfc59fbf23cac87e45c24e9f38fce27fdc8b9b689badfb59011e933e277afa2ec4544edebcccb85943614e43cc9798231f5f4d4b5813ac4126dbc7301793af03aba103640604682b99fbfb0044c7befadb5d67bebbdb70278c21045bba79f3bc854573f7bad7690a3dc7e563bc850d4f212213f7b247099dc12a63c8694c1cab255905c75f533185999151d6b5502bda532062061c00e49963c6107a818b9ca4a03ab1f84f2b37fcd7e35826f01b8b16a51f1a3c101844c8446c407b1bdfe5b9540efef571882ad11862714c190961416ca3ecaf673d7cf274f4802acf2ac0b7175866cf1f3cf3eab11e84126d7cf339c681cf9388e7ce47c1c39e7e338f2515bf1849ffff8d9b334fd8ce1e7376b0db22f5d300981aad33ea54053cfce990e40ee0bcdac4c040dae273538a0888d1d3db13d80a7ceec569f73ce83f429fc4ce459fbfd67220f9a8df9b24118d26424933c2e768c809032303231bf1e303c883d389f73ce397f851f6482bf1ebcdc3bc49d16733f1e439a8cf4180fac65df7947c427fd48dcf1f92499e3b609197448e4087322578716f4c488d9d70ed28cabb391499557ea9b4af98f96f8932499439d328ebe7124499f571075627c92d4f1f9bc9f893a34e812079d0a2a5b116a4234175b9dd1f42924394e641ca9399da9fd9088396e441cba751cc71f8e2e15c2860f165d705c318288385742a8f0b9ba8a7a71c4841cff998863a508ffc5707fb451f59892f6e4e6022e261fbaa835222edc4ee28d9516e24f86053f1371d07efa3311e72b06d18fe847f42b2292182392702b126fb07e367e46464abfcbbdb3879d9245ebdea38b357be1f89b81c1a5c3f6dd87309e6bc670fab1f4208830b6640ca81f813967e0bf0974c02f81eecf4ddf04e6ba5f025d3a70f0b7e780839f5592a320dae41047a4e866d9e3cf39e7afb0ff6a98dd08d106c626daace04c7b1c2b7cd2ef38b32e5f90bf90a5438d5bffb5582b7ce0eb34ade0e3c742c54fe88782eb4db37f28be56a2081e441a232597ee4743f2e2d884e68dd6455959689f5fcc9ff3379186e6bfec993ab49fe77e8eafc4fda2b9a0af8b3b103bed771ac43677bbf3dce5ecd3d1dc69afdffc23b1eabff3a44bf63b9f5db22fbd4bf6e4d7de74c939ee8f1fd5a9799e9943d65efb519be0f7b3fa0fe93761c8bc9a60879e2ee7e9cf9d1fd35b575618219ff4a67e2a79492f698af234078f89a8544b5a724a88666c00400193170020200c088844921cc4510c5027f514000965ae3c523c24918fe490280a6218866118068100000010006018866110062219d6fb84e64d001cc21864293de77790067585e041db12304b4b49b550ed9ae33aa0953b8a275a1cf20ed77cba7ebc70e19798327ad062287a65060ad98e3b64b245c87d97b2f84f6625c48865731b06a97fc1a47ad5fff37429220ad743c46aa038d26913b7475d2c31fea44d5ff38e49081d8378ef25b43938964dee366a7a68356735f16c6708459514e65b4ddc7934643585f21d827014d105bda599ed15ef65dfd8dfa0082996236fb5ce1a94f1e9a811c1bdcee39c0b7c1bd9014ecdd97027e3da5ba7dce35d1cb9a5396e02b6d599ec8394e269dca170c6bb9bba356731a0246bdcebc7214f6868e381e7c93688711749ffabdc420c968089622487ea938a50a7f939989ca71637d575f3c9122150d2af83717f5826f7268c2f0bb7548166c66743426e2b9a88c5413581d9f1ccc4aa1afbe9b0cd6895a47ea49c1665ea21e9228a220a96a3a2d99829c21bccd83ab98a70607c9ea1e26cbf1a1f2467ff8da5bd4ad42abdcc51467b05d1f3fa1ea0fa8503fd5bf4a1740dd5f7951c6cec9b29eb03f5726f1a971aa6d74219ec75385224a331707cfa4d242659e83fafc53e77129213e83c82f369e2bbd668f4ef5dda3dc08c8a4a6384c000a620a14bf633ee43c7ed31654da7a0b2151cf5ce3d6e46c62c67188bba327b2c7e6939ea68c13e1e9320a68950dfa55321c452e29f286fe1a3d612a5523e624fadd0d7096870b1791613787a594d8cd30bd9c6c57bb2bec6fdfcab55440cb5aa713f3d34f9f03a8aa7a511165b8cd81d89bca12c7546829f807c157d2832d32abb7911035978a972a5965c8c13e831d96b000ba8c2d54f44097ae551ff87af33fddcf295e1d512e92194251651581eaa390868b4aafbf014670b1d706dddd87db06925a42eda1d1df6c4e91699d68d5d3a6140bc3e149d5a63579fd5bfa70f3885f3beeef6bca67c8dc29597eca11ce4b954b463ea54c11072b68ec34e638d7c061c52bc793b3f52164096567ea3c9091ed92891ecddc847442f1139501149bfb2cbc19e2b9b5e8fee8f2870e53fcb313b9bb81f163a1e80673dd6c34dd6b109165c29c46ec38f06274b302e88c46d3c58fe882ab61c827e2c8b658bd1902becd1afe4969b699c2a4ce10efc875f3c005b635f036cb8049a4753d19466320ddfe096b24fc3bb0523bde708a49012199ea7788679180f275f6e46c577182135cb761a523bbb40e12164e29109529492005c3426224b4087f9ad782fb99cfe29ee85d1fddc5dede3f2e5d08bbdf153548e3b1e8f821fbfcc1e11be03cbf5d13588692f719b17f85f6d8ecbb384750c848e1d433fa7af92deea9aeb18f914a56475f6de2c75131f1960fe2b5010af64fcf9a5d43d01f35768e5e4dcfc43326316dfa53c0662c1ca0c84c4d616a145fe315f3b65653092f38252cb480df2b7c0be60ac8c22921a6f25be10ec81bad717c2dfb2197cd7f0421a328ee5a3c9b660a4c6a1df2274add4cdf90415333125f2ce883b2012867c09ec66817437f6a9e1dd94a6a664306aff0bdefe81281b3d7a41b94a882fb0907c4890988b580d0ad71b84c8ba9252676225afe83b0f2772f8176c875354e24b3c09fdd2fc054e5bd25cabcad264759f73c02f4aca48d6b3e78a2eb69b720b9468bf0107fae1ca87de49c102f081bc8f0518db6f03dc4643145c316837be4dfed2b08b4fdb68d999f10796b25a3bde1dce2aad9efec3f0885d87bbfc6b750f093497031726b43a4d6aa5a73a8b8bed9a078ecf4a422491ae974d0548385b610419c40b685c7faa2d6d5b8048880730d9c89408507c14a0c79b32acc79d2a61913920748051d88d92e4ba6a852a5adc34a0cf957422f8f54da3200adc3dc906fa0dd3bb8a29dc4d454815c25738aab32a93ae195c829b9f2af4e54f7931f4f3290544e3b71077337c41f75f91ba128575bfa539fd6e0e2ae4faa318b6713168c2a62de468e8fe36a12df8e2c0d9922db1a3af007b8c2b46faa18aa03096338dae1db224dc6d4b175356207ce3cb28b36e7cc77058ddbac218fe15de1d568fceca1062449b1ce7900938457db22bec94b12ea3ded3c11ab367340caf271cca54259924fe05c12d97c3da5e0b51cbff0d2624fc5f13a2e04025f42bdc662857c6dfc75428f9e208ec5afe27659e3e9183473ca13fe7872cf9df654af155a5d183b7de9b8eb998ef60d105d3259e2a4a3e73f16b540c899000e37d9615836fd80977ec1cec161f43b412c062720c2151fd2188051d6ce61e87d34078b702564c7665830b73c81f4ac4dddf82fe393fcb11c4e2ee9425be7e0624f2dfc297a88112be480c15f9a05a73fd8816bc856ca8782bad514123cfe0a730a6edc53ecb14a369a1e2e02ce652713df34e87c8caa2ce2e84cbe1d096538bf2718939a4aabcdf1c15e1cca838f6571b346ace22ed5289ea9a570a53d2ecdc33c30dbe7941e602fd2a3bd9bce8a4671d6a25929f74ed558277e4162c9574d8ac9f6469de91fc1435003585fde6f2e0001eda7580e36892ee0a065ea1bec48f6b3a4cc781a032354ad1314efad0731024c5dd4259dd3b25b5ceffea0881dcdbc2b1bc908dbb292b55903228e920a00bc2b6668575ee616eb6f521a6248de1cd34d2898b24f13840962713f8d63746f5e80ab3526654ac0c9f84e84e49bf33fdf0d105f005b13d725396ef7191913af0a929d407824f62ad6fa4c496c6a14d68edacd00c4a18f80be76c1160a164bec3a74c3110e6f9661e012e3e4a4f7da08ed4c51308f316536a83ff5cc661db34f1ba2d37815fef89fe3efad8ee718f844aacfab5fa40935d0d261c477a103ce8224e30b10b1e873cc1a6bc0c1eef6c553c136adff4ae398d93d6b22d085e9c7e87b69978fcc1db5945e98027376a6aec81e04c866946773c8f4cb3c5e17b092499ba385cae589b00871048f91981107aa3771d5a62c8eb8bfe4bcfd4880bcae24a36659ad8406c5282941e25c923d0bde5c4eb3d1c1450bf64dca8d3795219293b9ce83251cc6c7312aab828e1743d84093be90cd310492077ea8ecfb42235e933f791a4184bc4dd5103c2faae917630b4bcc110a5dbc77dd9eec2a2e1df61fcb56e8e2b1f7db70dd685da2ef9563b5c818950087294fe44f9102041f5bb31d254965f5436e26d2ccea64775a0300071308cfc6d7b31a3b7ed119a76cdccca27c0ed1192d2d5b305d94aa8b0440485eb96285d07c0041b8ae35d18c26b60e7c877565f9bfa3191fc98551c3841bc0507911bc0a7cf420506a90c0e6e4a73e1d1430096565920148d79a4d1a69841101db1ebd84aad3740b3de29c5de0de867eb0ca66f73c37c6e9690904bc7bdb64ab28b8fad96365b110c0c466c84b7f17ac21f3c71ba304bb3d07e1af5d4012edf163334df1f2fd8a1cd1f15877f6368d2b082159308de5092147ea2a16bd2b5dac8397fbb0f61cff72086402f77e77a100cfadf68925dee6e36398cb7e0dec6fa93bcd17d1a97ee95eab7b07236ee35a44277fecfb55082fde77cd59527fcad4c579a4fdcbe3417cf6920e583f9b0ae16a45193fa269b127647660d4eac8259d5a4ee8884eb82033c2fed664d645d9738db092b4323b0d343edf36226dd8bf4b2c11ef6164ba47c11ce161736d8bd9fabc96bcb6946ea52df152b4bb3ed47996612e05ea77dd79203fb7616a234e7254b2ada2a386df42f03bac8d4c30af4e0d27e05c696dee83101fe7bd1de7fb5355dfc8eb9da1933567963e0fa87ae2e0b5da15404aa9d8fa87fa8d86b8ceb2f481dc2c1f8f5793948301a09c762000f73a0b20270cab1b1ee24504c26b860415845c87e4d16c622e78f173873130e60f503edf46f94d34c81ef01d80aa0e345db8a129e6f32b25beaf70681c2e2321199b542dc2fa8320494635855fc9209bcf21c59158b3c0eef42c1fd493745425bd6fb68d03fae8cbab9e94babc08a06e4cebf94a413a5bd4429f29345182d11be96dab7a9a5427c0853e6d55d6386e35ad75e63b61ec4caa4df0633211d274e95b982f754cd3fb31bc18e169c6370731409baf9fba6fc0d7c9d4ac6053ffad5d9c9a47ee97dd1165527152336cb3569f7ad292e105ba72b495f894646431516b6839520ea05d9b400866879252a0aca56d4505677c3c0352a7300aba1eacf9ece17f41a5a91cf269b80d77f0648aa6854507fefaac9b8be7d4d095142d025009f6724c0ed91527cf540f2148570094bb16f030e532a207aab52baeb230ee639bf9f03c9e039e38664369c470ae3e475eed7af06e79021a260ae7b70f416f53c22216e5ca4f44bf3efb896b5719c44e2d5254778de26d0c02fd35b24fdda655c2a50c599afdc4a57863cb665ed2e75fdd7a5ecf768b16271457bd2dfbdd2ae0f055c627024047dc8cced7bee071849f319c5346e88835a2c99fb814e744d0310656797189fbe23ba25bec9b744fded36499bc2aa3b4dcf38496bc92ade902a54f2bbe66ace73a2ebafb93ed36402c721d8b97dcf2833021ef9d03ff2ef33a383dd468a9c90222ce34b29b7d14362672d0ba588b61901f822fbb334873fedba9ed261fff25e14ab97c27ab6d0117ef136c2d486daf32ebfa0f6c30d0023d7b47ea0454c254ce7bf750fdcbca3b476658e9e46f77a988e44c2c203f99c853076740ea917fe83de97e8cd6264b25e858f7464189b9f68a1329628663bd65d096b68e1419d1bfb761addc63ba142ee6864d3392f397db20a82566bfbaaa571c40c7329fbe658aaeccfab9e04196138a1daf26a239f136eb4547ac0d9eb7cad6445d6712b066e2c345557f337d12c8da0e7d2a37bcbc0e69c33c00405271f8bcaa27741c55dfc31860213a3bb34ff9ec34a7852174b66e5d595ee861c369939a8862bd672ffba3ad6cb1b03b5733e66dd05f0f031d92ad7f52ba12122ecc030e75afb7f725c9c132d8c6be2df7aa7a0d4345f8e68bda323a6deb24250d9e6afc76ff27270b30428755f6859600f9188e5a180cfc7843cf42d918245b53a04c045827b0800efc7e857c4b90d49c3bbc00f1a87dab56d9769ef19dbc5c398e5e877a793b09a235e806b9434d814e4af50518e81c67620541b1f32d60b9e280de10176b07e6b5b2b2aa25f7c18b5ddc0d1d41c14ca0d9ff1cd80e905adf91333c2573ced56dbc2145759100746a2e844875ce513560bd8f0ec77077d1b95a00a4d78b4340cb0a24e53eef16697d48e0564ac57ec9574bcfa87953169160adb2597d3a74427fa7467c9f63660cc5802bc905d079ac532be8976731339466d2573b0b1b18a075912cdba4e6a7c12cb938702c99c57953b4942787295539c698131eb0a7710a4888c0816adeacf98a80ab37604cd0335c8643447772f9cff7e43ac08b4004c1e18826dd1bb3d1d5d49d99566fe73e720627609cfe71aca370ce7ac84068af7879774994f1e2ecef17fe891eb28637fac185a0626d29f1d3c3e5c95d40253c16b8c0da78d14b238376f8d8e08057a9b63ed1bbe5c5690d355a1d682c78605ed68f4cd457bb13f83dde4b8f2a93d587b2ffd54d01368688c4d8d56b6581b12526d1d2a9b7b0dab8445bb293a049eb375fe0aa1637681fd59dfd6470799a392eb38c2bcb0c3a5bdb209cad59d8e7a1a32266b8a531012dbda616cd9f276f8f0d971794304b151ccfb9af86857d328cb17effe36671754f6888131a23594aa2cb189537e91d16a6cfecc82b192acf1f0df7d0409d302434777eed85baa4e83b2b500193dba96993310d8b5012a68edb49a78fe40f97d4c777c3dd9c801eb65d2a0e16b3700e052b25dec57b91ebb704f0839c0e75a81fcc0d0df4bcbdb60d38623a1634ab2625de2cc9267b5725ee3a3df802dab0b3d96ca6a26655c488a9d68020bb8a299d79dbd638acf57d049e3d45c7cf70cb92ba154ba1aaccdf4ab08592bc2c94a6326ab7631005bb6e7348bdd9b0f5850da7c1ca4bd6147a3cf48a1e9e2731878eae9a73df3f30665241a060f54a3b634f61b48cff46eee5ce0956415177bb7d2a408bd705ccce4208e154cc6750d75d0f25dd060fb68ddfb19d966e5dab402fd99d929f7fd339ccfa2dfe326c2b30da765b74d1a2002108f034fded2bdc899b3670947182f10852ee31587bcbcba2a2d2b0e397995393547812dc9438e3c40344c0ce8fc0024cc4306163a4f1fad71c5bf15d99aee2584a81767b4b2aaa6c61a57f1af783dbf6d4543dcb82969c5c801e2863e752b04d543a18a2ac6d396483c8ed8a0885a9df24f5cc48e14f1c1110643321cab3fecda3c4938321c77d3b830a1394b0e4d5990f3956a4d2fb91e38ad32fdcdb8173960660c832b62b7300ddb610ffdee45de0ee1fb9b02bea2fa97d9600f0dc10d2ca9cadb7f8e42584c7f2d0b2fc10297912c2d62c318a2d91f669f75f57177788b02ab8ff30097fa542e15e01de1d3f5a9e8dd112ec6395cf8a0afde6a2fb877072247808cbc6b485cea264a850ea8b223ab1f50a599b3fb9258824dae9249029d4fb1649f129afb53890beec50df0a88a513f20ed565f75a2167a924f3ba8a0f0d9e32f54a3f2f21646057c5d4a2064929c64857187815e20fa7e35104e6b6a8efc55d642f23f0ae21a3869a0f81c0a0484d72747ebabcc22788912b605571635a03512d4a7ad3c276f80c2c0e76cdaa7e3aef21cac5a54cfa52952de981601961fab6ab2656e32933dee346b66c4a4cff843ed8afabd0d8c13f5b6aba1ae255cdceb316b8c1a0e63900610c9d37a72127e88638bfe5173a840a14105b77855597c7a7a407d7119ba6cd451bd20d68ca946e9232aa19d46fccda6b6486e7a26029866ffea1f3f2d698d2322ee41d5cae327f4400c290fd8c8c2564572d00c8ea8832f293d83f09af5dfb7f316aa68d34c016701d9bebf8f9a78af5979c8fadd720e8d055e8d621b108f1160350acdba4ace443499b32ca6b7aba00e4d5f7f57c1e3cfab692ad17b9d9596db4e25524a0e265e1bdd5914797211e38543b8eb532055ab54205920ae26e684b29295501b90ed6051b3c1ad9e671be522ca380505af2ff67654c07128f38461977caae77909a90752e04fa0c216a012e849641354d4a0fc8cc221119312d090ef9d2c267f82e306c7ac02089a14d0e4cf1e2c7feb37e0a0459e9ef3a32c6e3682ba4d5e5dd23951610f018c332f93975773bc56eabab41243fa03b5c0051a1ba783cf5a7338414b46319033311228580ad2efa1c88114ad7ae54a0434ae39984bd8e1e1e5cd42abc35dfadd37ba513b399f5c0a69e3820844d4f52109365e43cc9d443029b6f1e5791ee2d218c2de6144ecdab2f5a734d2aa3b26772cf4afe7866c0038415faf7c86a180ce6ef895b5b871c99fa852c19e45644a2070cb06c1523b7614b6d993b44888e4b6a6150f78ff970086410230490c5233c098243151613b3085c6dc9986ed25bbff254b8fbb84e3f0146edefa25d9a8dd0b93b39b086f70986821479425920753107908df3d70d883f52ec4acc8bc855d62aeee10bfa41ed21e0d2ffe29c41505cd011a7aef4a86230b2106d0b6e18bb94dbf407a87afda3b020909998a04fe651bc1cec9dc287e536a8b78855a71548538175f2c140d49debd784bed76d37bd0bed42a81a739109a628e03d8d78bbc9ad000cc1e2b53ba8f196ab68d0d32bbc40e44959efacb92e912ebff9bed37fa039505b9b72b0bf950b05c2833f5173b83e9534d857e6fb6750eef1a0432bdcf6056051e1cff08bf20eaec17737d6c5bf06cc2abebe02569be20fc87ee64c414dee581089f9afda23364446212acf4a506a46869e9dd4e9b1459b425361091d0cc2f9f0709ee21f12349922e42b152dd871a1f95e8f467eba829eb99f328f5af31add25001858ca25ec4ad78f1c5ddf44620ff388906db083a510abe5c4b5067f3c420414e101242ad0402337e67c85abf649ee406aaaa62033708dac6527b58fd4c3ea2aa5eb68677c6b054227faacb252948fb80d95115a50f2f22c04bb43d29e29833e646325f6086d5bf168f44bfc530df1c49d8abf058c4111f9b3f0138bb4ddc72707dc8a456081660114a1aff44a1f37c47afd7d8f270ff0bb50a67b1d13c6a6ce6a4ca67fe04e16927e3d957d59ab6bbbced3b88284ac9ac366c116c6e15dbe814131006b62494d17eeb0a50bea0aa0062ec944a730c2f31109153049b8ccc50226a9c521e89af9a959e40e484eff2c1c38033b3e80a3fa6da85b36116789c960a283e9e486786091b252463cd530d7905610a38e18aae5dcb55458d867348f9c4789714b4f8aba6bf1016080b2dfc193d0e80a8cdf177dc225e3444030c9da46e60d78e06e4e6125675bd1a42313f6e32f64339eac8bcaad637e3ef944717a1c006b31931315840609d4c98dbf7ef64a5edb0269c3a24e7dded1cadc989d114c7d7c44a1b99bcd6971845850be6ebdc7885f5f10116866a9c8ee8a8bb9ebe3e0c73f2e879b5c24266af16b1b0c0cfef4fda44d49fb4b42a4cb82afb9640cceed52136cc543275ea8fcb769bc854066567c54d3bdfadf531b8480377c7cb67c61a6e56a6053bdab70ea5ec5ad9c2cbcc25a18965e3bc4ced916f5c806734dab359e991ffbc94884cb83ddf4a892d386d5d1a5279cc3dac77ed7cd61d6482a875f1f229b70aa3dac0b4ec304afbf2be74e53bf9706e989aaf4c27f6d83f553a10a153e9f62f2bc7eb33718c47cab6c9524d0e9544e7f80101d2cc7cefd6a6b515fab0146d8277c63adc8b46eb6883599adb7745c669cf91828658bdb47e5e7fffb4177b67c62daeb721175d9352ebe0222dbc16fb57508a5e7bd05a34a4172ebbb97c4f9fcd3570f4c03f2edb6d22571b949911bb3c5a1a2b1b7bb549653bdade5969e3d7d35771030834b6178ebbd4fa0f1b3fcec591fb720f8bfcd30a6212ed8167f61abe43178eb1a0f1d868a1b37e2cefc0c849da650bae56f048b58ed1b74b31f52603abe7a03824e8f81cc306159d8f13ee77f809fa75caf1253f628805e9c114deb85c0643410325a40ffcde2aac71ff9ff938a19f73719e5a0456a0a864d8f5a571157c11801404a9caa3009262827ef4f372e4b1ba2ac9d808c61f54fe071c4c62ca518705710a244767e9916a70bf8428b32844b10656ee321e58b7b0ac0cfb05ca8a81d49c01fc40705e725e430a617df15f0bcea1e9db5921076dee6db8963fd0b68ad02ff117b516ae68c483322b4d43e5b77eabb30a99588867958d8b8591fac88067898d4fc3c5f4892041fd94a33ed1e4ceacf2e847200af7096f104ce2c9d90a3e3bbb522470679efc06cd8e390736a3ed5f3f1bd97c024bc7d801af939fa212a28afe0cf0f2c3d64372f7797ef22d6ae658fb8948ca980574f5f970d69f7b112606b750c3feff601340be37810338913e60c701338526d8d6a2f4746c11902c522054b7683fa615d1fbd1579f95378da5b4adad2fc0a91e465191206f448777294ecb26e493b8a278d02065cf4980a9c0e955868ad6ce0873a9f4efd08c0b05b5933e43d0d9b7c898cbb4854277aa69ff4046cb4950123986c07ccc40abcce8fb132b97b0c7ae74922c3888e2222c0d79b58f12fd906487f46cc15a40206d95b28a8b942dd64d14b4e0346c0c52b2f6c29931c908d4e81543c159190c20ac25250b26d0c43c1494d97e6306dddd5243db735a9694ef8b7985db7bdada6ba428289cf5e3cc6453d9eafed9ebb96fef664f3b61eeff1c98cbd59040df436afceda6910c89d6119c28e6cca3d28497af33133bf8320b120d5f5e343baac274f52672571a294b9e835b7f06e5f74aa1981ec662003caad9bfe28c12c6334cd796b900be50c616899b2c15d4ea331dd17baab92d5b4c62249c864480396a883472155b4844254662c6ba099e35b9fe9fbd93be6e8b6ed5877d015833672ce2007f643e764ca48c0a069023765830c5f703cec3d83af58ceca382d1be7ef63072858846332fde938a794ee0a64f31885454410555c0d4c359c0c2a00156592ddd5fc765e5457057b0c9f4443fffc45d010b95989e0515cb191dd0ca81c9bed0e0c7852207bbfe34131870236b159495b0a9bb4ad3a868ee083a739413c51fa7ab1380ce35302fd2e01a8ac7ff69c9c78f568889804d755e6b6fd956bf4ee92aeafb60eb009a6855d680a856766f591cb290dac8484f14194665b6188bd4c081aec08c7b48072141e7d25038348642fd27959ec6e19fe0f3fc8893fd233c1a56c9e62f9a4218fb0d583ccca391776ab490bf25b37385ce069f6f41f5cfdd4e8d9611ac7edcbe27daa7a8d38f1729c80c27188c8512b0b8e5909c1ee07e39aad42cc7202ded1615389284b4eefddd5a6899e2396d70a60ec0d5ac34df8cafd7b8e0df4c3d4e2eb9f61dbb4aaba9278c2dbaf34b2d3c2cd7f7f10b3645476e64d31dc08496b6f4b5548b987c0ed17e1d4473e8e44d917138603b0155304319afdd1661232fe8f4ac61f8f8e72ef2ff6f8df5d02f1d2d2ae8b18c98a30dd35b6ebbcbeae22692dabb6f892f11a2000277fed755fc742434648be510a296ddae1bad793203e7a1986058703cf7101bae05be44649a6c8305bdf093bab09ef478c4c3d9557fb9cde91c70b916676c628bcadba7f918a9fa061f4f2447823a6be343a0d62e70a09032dc5ecb733b94eb8b7200a60bd4e8b67ad118ed4577076f9da92007b3f562eee736c2bc4b5119f984701c70f565a0ed82178bbafe8efd9e78226247f1562d2699c4dcb307bf53c541b8ac2bd6a0b7cbbcb39ae082c1918f09eebd28a4f3e1abf78eefbb3a048a9b160057f71a98d46f8bac214b1e150d3c047c08386bf6eb7036d8ac8275fd6705f8457aee65eda4fa5525206015e6d7382acb97823e9818f81ff79f97fddb1c20e7cd875b3325e125288de7ee22e0392264b748d72f269a3db3188c5b25c64193f0522c48a714e3abfd59693d9227a800d903b70f650c131f9745946c85da2d1459d53c21ea39a4901134ed5e141db20e6487bba3dea197e3eba8c8f1ca0e123fda6ce5fccfb46209d9515a3c62e1703be81db8cb51d647a3bd903ca14d5bd217d3e0455876a8c84553cb8b1a57c01db8c751d647d327e9ec30244f23723292a31d4b2cd68ac8488aef70c94a03442e1cf8eef27aadd8391e8e0506fddba46083e536c1b70ebd741dac72905607c993b67b29cd198d5b32644c8b11ab0e78d588cc4218a05727dda827c9cb0537b485282e5d3e570e65e8b915116688facd15377548ee683d72f418ad2d65b934bda48383083e8d48c5103c8d0fc9c892962db90eb2ee384d43e33b1959a4650bdf6199430307bc1d66afb48082d70e63df345e14425e681c8910c7c81e6deaa46c9276802c73c83b20b183c4459bb590f582d64dc01cbaef48888fd63b32e24463cb48c7a2562f898ee18e417318c24ae34c29d2a1cd56caf267c7b9584e49f23a472345b42fa4c861bb17d96e8952193caec4ec5aa96c39d209d201de81c681d1218203dfe174d077e83bfc0ea8741459a0d50a1a479803d5f1ad8eb2623462c8c8082d56e2a543696e1a2d0a1117da72a410709a37c9a20ed3ba34238925c7c82cad2da20e650e8f0ea87414b1a0d58aa23a920642ebbe1c0408cd43081d5d471847ba235b0e63c7d01af2a38e6315343a24c1f1e00ed3d0348962e778e7800b07111b5ad914439434ce90912e6d5b1c1d92eb48c80b4d292f0e74073638888cd136127187b2c38f83924396ee5a760e634813481a43445931d263adf4a336ec4ead60afe3d80b6d01858e173412918c63049ab653401daaeb20f9a7ed8953071e0ee378e40c7a121a72d30c3655a4665eee3906499f9a2645ee72bc7298a5834483768384da51882c8d1b323246db1831c44ae392822c8e6688c8d251d60cad586464448b17b1e838ff4d5bb510e242e3900c718ce8695c4b904dd08c92458e798e841caf1c6b3a761d7f47563b8a2cd2ea11433aca86d28627230aeac4c676e80b97232f4340c21a1ac6b6def2c736128697b82fc1069098cc16b081a0b11211c7b2e3cb1195ace2edb4c25a88a4dce71ec652ed708c633f9e4f7f954dee46cbeef77aaf9106335930e819cac808245a53447328383c38281dafdc61889fc63a1971a635caa803971d24ffb40de9d081eb70396870e8e690bfc3904adac2c8c895465a3eef28124d1bbe14124ef34ea2c841b64b3b9050a895cd46a6536be9b63c39146f63c0f25923ff4698d64bfcc877b8fd18b1230506f297261a56edbfad743dfa2c4aa2e61730d35dbbbaacb9bd91224d0b66c1efa1e1cff58484b15aa4831ec4a31c83f6e5cc18fd3c091fe5d22dd40dd0836b61288f8ed38c291da315cb809eab4f925082e56c0c59f8c9772ca6fd49c86a2f01dac967c842f7c562871e700c97c297c72c70163f026f4684f63421d434f9b35f6266d8d27915276e2722c4064aec89a6723e8fef9e92eca9a53fb7747e09d3bc4b6247df118223d511ec0e1231da34a590312da6fc8583ec8bb626ee1c8fc641a4bd62b53a2d649902cae615645f40103a6e0e3210788f405fa919bf20fa87af4c184b290211bc67dee760b6aabc8f924af94b76117decbe1b8d4fbe1439a4b13e6243ea03748bc7c57e09832a19f822516a6684519511aa708c112ab608d8a3b5b591f5d2922da594522629039406ec0505061bd3d9c2ef0f03ea4983ff05c4608e4f8c71c5f6afd4cbb9566fead99f76c6283918d8efa2d2192499389568ce607ebef899465311138f09e62ddf7eccad0545a6cdc6c26c39cc6db697b77e6c3eb61e13e77bff8dc7b663d3b1b5b0f14c9c16987858b0e5d876260e0bdb0a361cdb6be25cd1c4e3236e42b6ff363a035ede9ffb60de04f32714ccaff0ab4015be8d3f05aac0da38b40126bc52260d12b3e55266cb5fee95ed578aed7f8b1c04fffbda74055ea2bbc4acf14f81978959739bb853668dff075e2ab3c6df04de2ab3c609eb8137ca4d02bc4a8057caacb9e09d5d23ee11b3068959e3cfe15cca78c38057caa4f17f01af1393c6b313fe9788cefb9a5910c6beb37ab36d77bbdbdd72b6ee37874c5edb6b16967ecbb7bdb657faa698cab91f387fce34eb3b8be59a56dfebbb0df5ac9935f339d3bfe013edf6a7fbc6fec0e7a3a24e0dbff09b35d395727fb761431074cf75d29f3fc7364382fefc26e8bc855a0b75f55c9f8bdaa0210ddda4da628d1ab7548236418735c21a95067b2efaf373f65cdcdcd9d3516d779f3143f3c23ff26daeed1a52bd4ddf6c886f3853823d6997ad027be37a8e82fbfa737e5ba4d46577fd39f59cb65a7bab8def4d9fa3f4de536f8684ef4d6fc2179a50f25c2ebcebcf2eae29c2dc38fcc067a3f92fa594d209ac2c8fe5d9f3ddddddabe7cab502d55a6bb59e0b5b6bad75ddeb3087edf9f75eecb92cc6d855b338919050d0e0d3a0792ebab9e7368cf573e18c8d8d3167eaaa67a34bb25f6ced560a3a30b67ecf0503c3a8c9a16889f67c4ec7b10aec0dcebb9d1765b2edd30b638f506fee7d7dfddf738bf5c53b43cd64bb6cd66cf9e88bf7f59a3594fe0eb26bee05bc990d9834febab210c0d9af16c4db06def51b3071bcf767c002268ee9fd153071bed3fbe34c1cd4fb2760e2a4debfc6c451bdff8d0d0834264ef7fe0838800126ce8c89a37fd205f07c082b05f0cc0861f5e2148201abdf26d0069e1921bcd408e1e53bbdbc0a54416f146a17afad7d0a54e1dbdaa34015585b0b6d780975a5394d10e873f4debdda1406841154a96dd347d13f7d25d3a6ef7d75d3e736fd8dbea6b3fbb6f8e652fdfd02ae52aeabe04ac8df47bd124cc0a10e2d48bb6ceab9e83685ee71bae429b8b65ddfb56de74cb4cb9e9e6bdbeea00afc467537e2519e501f7213ff31527b78f4ec6c1bc48a1b248a4df117d19b1bf2c141886ccf2121b12dd23d85f808d941dad3688b56df3d875c8062d3b72e146dfab38666e17e48093ee4904f934d831cf9e0b0e96b11d8700306224188d84189122058cce4a085cb114054663eb678c678b4b2b11618f8bdf7de1a503c562db6ca0e3558c1c1919f2c9cc4c47220ab5c11440f477c5cd1388b204a9892606ec71dab96252a152c6812ac6445e3de7b3b7defbdf7de7bef571b085122830b376822880c5bd4b821060409932e32e8c06592204398aec58259d052fc7e588b86f197b9d47ba5608cb1b6503801c30f21a680c244162b40628b19d0d0c44812319ae3c82c7340e4881051929c3499a288223030ca52840e5c2c942b6245519c20c1c50a768680400cbabc7c2802062e49b015bafe06c3dd71c7aaa5a70a9962890c1b6cbc8048e982072976d0c1e7c447ca0e3e7a089144de50c71a18800486860d318b4589120c0487bd2317ec2306aaa4e65c93c8393331e1a29c738fecc4db2a7c64c95992e018c67247782dc94207452c3082cb0d263dd07044febcf0a448101e25ba441bf9d8e22da14e6a80040964c809213c4c2b4db204a1c1131de008e2e7abf0a144a622e79c73cedfa5124032a285a31f19b000640eb1c5080d5870c3153698e207c94d2346a24d4b199f74235105a185247a66c042100ea2b8400f43c460c813566ce1838ddedea0267143c511c2c5121d46253f5222f06385141d418678818b8f1e21536856886c083890c2071521598078d0c28923a02b74b820cb0a804801002992dc7befbdb7d34758f0d044081e8874eca0002439a040828b2e445a4c51ac62e019b1084202c84845173400e930ea790d5d59c24b4aa0d02284831e2ef8b971430e4a2d4ab22052b20045122d4503486480011519cca8055aaca8e1091d43560471c93d90342b39e79c73ce2a6fd9fab13ed5ac37e7a9ed9773ce39e7fc7df7b51fae42152f046142c78c0b271d1842a2c8107267063f7e60a1a98e1ad02a5890b860c7280b1610792008911e37c460f623c30d4af88924d4045b86605d3c0105f6d3ed80c4022237b092a5861f3ef50713535113386cd1c10f2c40e1f243c906443899018f155818fde8919df84a8481202560d0e2e7881e35b85c88bc40423922032c02424246464040d42b596bad965a6b2f1005ba17531e1e9cc54944447e76528cf56b620a1bfff6da86575bbfce6ab5575b871674a49cb3e6ddcf4dfa297a94fa9a387500ab8dbf86628e7d4bbdda8bb3d636aef34aa6ef844aa9562f30ac181931e78633b3e6be983514860731660dfd1be434fe4f74947b657b160f1207b04ba4fb48946556c288cf4eb9e213e1637ddf9e4342ca4d8be223bfd9e742110b4276b04c606d8b07f0f8e0e40a2b8c7e902dc032e5ca0a86e0019ac184b5a8d1a95e8070f516356af4ec14c142882e8e28e9f143128e24aee4a801ca100e1fd5d8516387aed1a95e183193f4515145de73c8051e432eecf854b169079aec18f2c121e76c6b74aa173e4d60ad888f8b01c537db628b89d9e778a807d195df418c20bee7f1e5269fe38b51e513bf18557c5fd6ba8510b4d63a3f12eb877a8ef6cc9e433e40b6b7e790cfce165bb7059c3f37a3eab848a851c3d69bc35d2fe773f844ed3ad872261d3ac24e0e17386bb4d6e974d673cdd9124fade95279f65cdf478266cad9bc12366b9febbcebbaaea35397b4e7b2dbbc38eb0d87f3524c85b33f27a526d7dadd65c3da39fd8704ce9453023869b6d65aeb5497eacf1b4ee9f882699ed9fbd36e71853abb852784616c0d9e3ca17a734279f654daff2d9e4aadd48ebc6529a699d2d7555bed6e98bb1be672a7bddc694f2b6d26adb499b8af3b915bc77dddc9439552333a14fd147dd5a4bfb21ef3167d4a692914f4442828ca8c74fa958e7ea51acd2b47e509346aa593da907ab5f756a7d7abbdb7b317e70e67ad694dab4eb52e6b4ddb388eeb36aeebbc92a9643255a726cfd32999becee4e97c27d40985aa4e51309e2bc58af15c2b9999979999ea74e6e4e9d06d41cfa5433bfabdac5e5eaad3177dc3185d9a4961db9f1a635a4be20740cf13f29690b7bc2742270f752a8f4ea77aafb5b5d64ffa6af5726036a795def2231be0b6a186e4ad976e8b9327742a2b4d0e5f625a5976930cf21b8fe234f477ea4e52d2d151962c57ae4cd9a25696a04fc086da863ef3561d5f4a1052e5c4b9f82787434b42a46d71716c4217c6de84ea4d09a9d2f83bcf4dc9a06d91648b25a45289c354a9ac9567d6dc97bd3d711adf84bc25e42d7fe2ad52b9dddff4721bf1ceb6974748a5a4893375aa8cc11fc927da5d5fb6f59e5e956d07b8c8cd9f1bccf189a62316630e2ce2a32572d6d4079f7ce2e5d92898edf91ad0c4d1beeacfe3e5d1c212f9557cf4453dee5a2d930c8a9609f8f866ea23376363fe7dd7accf995cf5efdfd894bad7ae73d9bf36accf50c7da997b59b56ada7dee3a9dbae45adb705d1562ecfbd5dd4eea25f1c6be9fe7d2d673d91b82b3e67a2e3c43427efc39b45063cf756fececb9ec9c5adbb68dd3b4ad9690c31a352a8db65d8ec5e24cc8f8769a76efa340bb541bfe97bbd6daebf6865a7bae39b9cdf3af209769f77d9d57427edc7926e450579a4a633d4f84b96fb5cf599fba642df574b6145cdbbee1b6ed57cfb5ed2edbc5694f47dbded4de0d6d6c74df502cc1b6feede038137765d5d3c1fed573d12e3fc39743eeb376d12e7b7bd112cd39e79c1a10a5945237dafeeeee9e410d33aab5da2c64adbdf4621127c11e0aafe4d3af75d98340dedd73ba945fef9c1fec5eefced53df71bd176ff7af3168a1bcff64bb43d14f19d44db8a27986d105c99e6a82604579fab391ff87c56b629a594d208e45db46b8ebb7b1deb586b7592cca939d69665cebd34466339d8cb79d937b77ed9477fbac40f6cfb1ebaeeebe5552bd381b17d3e8e516ecfb5eb563c36a62db3e5a692526a2ab7380d4d5866cb4d46de72b0fe0bc87a1830e602e9305b3219b1b555a08ecfdadf66466e73933896697397e460fdcbe78879983779dd9bbc12647a9834342e991e66cb7fd5c244a17ece99fb02cedc708684978779135e1ee6efc3842bb8e08626c03c2b5c21e6617e05d6bffc8d106472de866ffbd553d4732f032443d69b18d48b75773f27eb0320dfe559f18cf506e6bdf4b3de9496cc96bf586daee93395a950646dff18504f1afa2c70ceab034a464fa02823b45dfcb6682a474059e28a47a6872d3393299a81e0cab678651bc3f65d326d0255aaa040bbe4a042858a575bafb5f8de8b31c678894f745fa22c497289cf8b8036f56dc2cd662a8fc55228923cd171fc665191694669cf7f2231856da33071ef8dee547ea3728bbd1ceb1fab662fc7daaece4e5f7c2fbeac8fa36e6d0e2d08b2f0892a8cb9e936dbbe5e4ed5aa66278e9d35d4ea50dd652ed5cdd747b84cd9e28783091d443c4a5089c2c411ff63f6c4e77b0e11814284881d6dcf2122558298205c2124471053aa50b1048a16b040c961684bd14f9136d2e88ebcc4ce6f8918d91eec39440487ed752982e366d4635e56d2d2f1cea2191bb8a32048e503a98054be49439fdd2cdc8bbaadf6da7bddabb5f75a7ca9689390c4bb632fcef627a6895628e889509459ceda6adbb5dc731c15ad110be338aeb35ee95a93d1952c4647e5d77d5e8eb5a7cac3455db5b2ab5575baea9a78cbc5ea03d066b77780d7a2f1884fb46eb1c6792694ea2566c6035086ea8f68f9952c3f7e33c37198e14d7c98e1413362f4c86f4e48f21de7e1339f9634c86fe838d227238d32d229e3159a65cfa7e4a42435427f70209b903eecf91bf01b5a561a7f9da54c9a4fc713dc06ff948fc27af2cda001bc0c1a7eb3f98cebbaaeebbad38bdf66fdd36a65dc9f3e53c9ab9cb6228348922455a3cf388e63aa08b5c96432d9ebb5f37abd5e03f0e084a2a259448e5dd7755d3763a6da3366cce06a91662a7955a5552e45069195e44812e5554ed3a74e26ab4daaaccaaaaccaaaaca69371e9388ee348721cc771dc092fea8fa5d5519b4a5e574f5afbc820922435921b7dc6711cc77aa516d5a25a548b6a1101044083da94244992d4344dd3b4718abef28de3a89dcc5e573953d61a19449224498e3ee3388e63016a68a9b5d65a5b6badb594aca2ae244792b9c4ef7595d34a58db8d0c22499224677405e8fe882f168b85d65a6b2d2d6949cb2391d212d398fffdb9b11bbbb1f7ac2ded11674bcd96da96d996d89606e80c70800320804687008e06083620d8d854a7363e6bfdb358338f692f6af18bfdd644d7a9542f5ec890b1c51b9b89d7019e7d566fee14222f9390bc7dc33b6b62a6791bbf32500ec1b068814101bb4209d88c06ac08581232580f6c07cc4905aefcd849e2c2852e32108ab8c18910586260c396dc428d4ef542871aa88061062e5692e0814300701831c50636a002a527f3e42b3025b32eb01e28603bb8187e674852d19023d8ce95214986c8f00d796188cf101f435a18f21ae2c39025863cd962cbc149b5cb1a29bd76787c4663bad6ee488ed472a48a43bd89f29ac27365cce21d7949dcce86b4257942ef848ab7ac303b835bd206eaf089b7dc92ca235b7a3de16644a87fdf556b75a9543eab87dfa5b3623b6b72adf97e9fd65aad341ad7ab6bfdbefbaeb9ebdfaf6fafcbdf3ee7d9f077cd9a3d1deddd70c686b6c2d6b625dc948171ce1c97b93cbd25b6f05fee81f8f2cba6c1c78562eef47361e6e69c73ce8be44294524a851c66e4eef5c276fe5a6bb5463be7b7d65ea09df3df8b45cbc3852fc40b51f2c2191b7a7bafb7178a296caff47a73ef9ecbf4a59068e72f8599f342d19176fe50c44976ce446fc515661b045546abad75e4464d411d3ef1b321c0e44ce2e1a3ab9159634e185e826138493d52874c1a7fbc64dad49ed9f2afa3b78ed4182a0cd5482d525f9838442a6ce20cc1b07a8365554875a1fad49e1aa402a9e3c441c930acfe5424dbbfc650a7cfb452a5b0a6f3c695bcee05cbb06ca34e9fc9ee952a85359d37aee475a8d3675aa952187572df9f89ee92b7693abfe092dd1bc666f96ed2ef601ea2de63788bdec927b61c93db14dfe75d574d24b058ae504f95ea039fcf7eeeb2d6e6ae7b21cdb32e954f8d6aa5fba1f581ab3f6588f8878f7e80c75b9687b7fe874fac3cdb5e226fe1177d56524a6904b2e8b1d2887477b7ef4664add588b4d68a74dcf7d68ac51939417c5a9bb1a1f7fd14767e2dbc15ccf9c0e7a34f3d170dbdd3a9b1ef483aab7d79785ef60d7de62d1bd2f7518b71f839d30f7da2ddf8c69ec1b8d6cfd5d53a5ddbf7abc57adfa7f47a22dc6bed65618cf1c5f729e5b257df1361ee5bb10b670cd22ef739d304eeae5aa35ac9feb612c0a113cdcc30bc41bddacb519ca3f33a2ee79cf3d58f5fb7bc359fa494524add9b801727985dd910d0ebca6e8023c803f4819b1081c508398390253847bc86e8d184069e2996b032a4ca1456ece0c30717661437c6204d604fa83cc14411aa19886072859116301ce51e5ca680c190c3123178c28a0c3166b6fd3b5aedad1767725a9cb5767179b3d6369c1ab3b529727ada676de33a99d63a4a29a5d3528ab1a6a178b63f87da41f1d8fe1d8ac767fb97466fb97d79aed5be32a0263e00c98248996be5e5e7bc4319a1aea0b2a08c5045a82354892aa223ccc7086cfc898ddae768a450d01321d2a6a2a466def214e9ad1452ea289594424a953baf5469a97badd662cd520ad379db6b7d624f6ec9dce80e1c883ddfc989a3f910167beaa732ec99278b098c15989e97a095162b242a292f7adb3f574b431693ed8f5f84b1b2fdef5656989eed5a235f7cd9565ad41592edef5a25856eaab5b5a1e833994c2693c95eafd7ebf5fa4e28544ab5caf88536b1a59bc9f6cfcad7630a2a69514272398f9d987c56be9eed8f4d415ed2a284c4639e44e6404eba10499224498e3220940c2543c95032940c254b7573b5eae6cb0447606138986e62bab9b9ed96e2f1743d70557045e892ed6fb7d293b2fdabc7b3fdbdeb81eecb55c1152991fce53c238c149a1115198da8225411aa0855842ae264342eb41cb4137407db5fa3e4f664fb7f1a17dbdfa4e5b0fda97682149a11151991244992e4388ee338c2e862f49881c059f890a6a3d51988ed1f93711674d391c2688c2691019124499230ba1819d3b03d0acdb308d3806f94132a0d7da352154352c554b156aa4c9562aa4c95b354992ab7ab542a954aa552d1a79b86aa98b7fc61768e29b03863dbf0e650c5eacd8c1a236542402a72fb2412dafe5c8cee6504748b312fcb4318f39a353bf8e88b31afed31330b20d9f22131d30194185b3cc982081fdf115fcf5724862257b6cc9e4345b828726465b4c8eb589db4e5a5b1f0f5897316bec2970ecab2dc9c78a3a88e4e963466e26074137ce14140056346c64ba2093c908961d5927882182c9897952d8928f85b12570071494c41984ba20a36f741a84bf4ed0f2fe88ccbd418cbbae107403e3bc32915068cd9cd68eff4479838f8a9ccd3a7e5c48979fa4ec23cfd5a34715e9e6a7f5f03579bebbc92e9e36228ed8f7af1189c41b2bb173f2d767dfaf269f1c27bf114b4eb3bcc2968a6f422aa67d7afac1e19d38b282bbbbe8d415989f97ee665c0fb2f4031c584757a918be9ac4b305e6f187f71bcec17a0c8c56036fdd4369b3555b5bd66cd6bd97e058e403f06a4e5aca1cf029d9c35f461c03ace1afa2f2bd59d899b11bb3e0a3c5119448a85e840881508e7d537abe11b6a201733cd268ea671316c55337423e2be685165e2f7255a2617477d62d3176bd1aca12f66641c8c89e1ce41567d98dd39f87239ede17d6d4a5e13c7fb1acef7402ba31cedc25aefe328c9664dadd5f4c2f2892ad56ce2787f354a7b51a69489cd9aba8a3d159f28b38aedfa316213e73efeed2f2823ca94bbaa5eabdd817373a64da6949161d7d7aad9f6122d93d58dc151cbc34d19a27d61654e678a5cc66b8c936e59a55f8a5f64e85ced49ad0c07f1fa884d5f04b799414fac8ce6d9a6ef801a320640430133a808c987a16caaf267bd9041a3c8cf586b78e2a4fd21a2bc3408d1189e61a808d09e4d369db35ce4678bdff622336cfa5f911836fd5c03eea5f81d5dbcf8547b0e15d1b1c5d60dfe49ddcbe1be8b8a3377a534f5411d64d8c000fcf55993abee7eaf5fbf0ea80e5a9f618120628a18505ee011e1633d12112a5e38524d1beeee6cfa17c7b4d1f8b4eb8ed9aa5f714c1be7f1567da05d2b6c573a0b61ec5be4c2aed135ba46d7e81a69b7b9a3b7aacd85d5f71dd326f7e4d15b63bdc9b04a535febef63b1eae79610099a6e8f69741b5369c88b79b0cec808d8ae222ac93542c5664d7d074f65ee41fdecfa1525c36cc132e99381b22cc760ec1ba666b3a6fe6fc1372c0979b4332ae219d930b7f188cc2e8bcfe8f1e8928ceacde9c869ea9f92ca9d8bc46357940fcfae2823bbbe88c75d3d3c95deaaff487c1634c1664dfd29346b36d8ae523efad7035a55b12e88137dfb6d79fdeae9b43005360ded2e6df77250b8af170a32afd76bcf9004f457788fc05a0f676cd8edefdb4391039bce4ae347be4a955aab755a96d65ef77b2fc6550299e5a8c4cd5606b164686e0400084000e316000028180e8a43a2240ac22c498bee14800b608246605e349408c3b1589422418863188e3104180200200000030c84e84c10001b6331d82306f0345464a64777f966149541cc400920b8de684a298dd1f714409a76a29e5301657c9aa9d97a2eb582c6e78b4513c92977cc822edaa0d7322628a08782bfe28791dda817033b35806794f3457370e964050d49ca122fa3644a0523dd0a2f0940bae79d0b4de3a80017629ac33ed3c51784929271cf35a737c5380962ebd64cc3b88fa1379360e9765ef340e86e22b57ef5e243d4f6743d1483c6c4eba85029fc4f13ce1b94f889306f948d75f6216f8aa2341db3fc9bfe63a9ecc6c3abbcc2a5bb6514b29daa64ffdae5f7d014d41de1a550ed2c2d296a1a48219c142526550b0fea55b7ee6ce5e4ab3ca87bb7652c7c02aaf2f549867dfb83f11225af93a90aba2e435b48d0dd69abcb497793f60f75a1948ce32c5f0d7468455f43331ead9bb8a1b00d4b1c45ef771ec2a91051c0c6e222a870c83d80037fd40e8ec20f838ff255716c5cb32b439e0efbb9f70854bc44aaef4f8f6a8264e07fdbd116f3ff17c5207c04fc3efbac75269b77ae19553b634a723304dbb387eaec306b1bccc92326025f46e82c820f14e4035b70a15150428db6af93e3d40f1ba5e0a818fa00aa16c51e37ae77f477d88205e6001105b5bfb81762a169561967ef6ce1550bb48315cffa905d9c8358e9e210059a46d8c165803b6584313c0c5d1460551e93212bb8a84f654a17accf0cb38d359b968809198d50c7aaaa5fea682a33a8e516c445bb93aac2e459c27b99bb5d19b704907774400bb4d486a7f221f670d17b6886ac4194d4459ce59886eb18df25f02448d8a39492a64390af1b1b3c72c397e229ef953c5b809e869e66d4cfb6bf10bb8bd326e908704ed215fa4ba743833622c3f7465ca9a50da15fcec8fc21a393dac1f922bbdc292dd36e012c1e50655e0344b692dd5ccbb751f2cd0c59faea1dc5efc005d38d835f06e5b8a160c13340e03abd3131c726df71fc3281f7c6d1ce4112c61dd4d11d0ddca11da33afa1cd765866420d2d6aedf055a3112d751b5a3a0084b6a5f88b8563370e48eaa33af7d3ebd50d7b8664d04e58f07d291acaca1a0f4f3c43a85853514a8f2339027de192e8c99a8da5f19d78616d11307d0c90b5e17b406a2315dc52828326e57f9848ff04a95dd70797927e81d11419957850f815364790e9009f3c604d7275d296d97fbb8c4db144c94eb89e5ba096935a06fee21ca57c3d27bf827547ace57a283165e663ac093d6780b8a3ac36df869e6eb40b2643f49f15b5aa31b7662971742cb7090ab7c4c81709a00f8a283021a16305814c0659a914a6b06056c8bf29be552892a1bba72a50bcf14822911bf275bd272d6dadc38321e49ca500a8c93c3c9c73a84e42d212dec04d60ca6595b361c09e94e3a82c9c944e61f7afbe502437c74399a332db1c7bc40fbc94cc3eb03eca73c0ae001cb602be290cec3c229647c5a44ff5750e261cfd1b646d61ab8677a5a3c75d3a757c9280e9b0aea7ec8f0d286a53b6bd80bf4024140e5ec1fb8e2a18016aed00f8208350683198417dce202fc34a32ac497df02e20df445e3619accdbb7a674b29658972ca65f86aff8408df77cae4b680570c7367cde6850b57e04bfa0deb94be9a06d6c13c5c0451ef0a10c7f28f6470192ee0675ef7b5dd0c8e11c6fdc595a3b83ac8acedc2bc38bea8d03e4e20da72b3a399443a9e7ad399726c7544831fa065a6669ca6b7873d625350c492366172e51f3c0f21a417d828e3c9dc1e090fa64d22b18fa35c8b1e394cb80c6be32bce11e0c670b44a2f5d262a4d560fc062a51264336f6da173fcbe6ab267143acb63b714ebc37fffb07e473cf71043b2e0bc6f00d187508f3f24a0afdb81f3114f202be59ec277b4060f3000b4e58014817a010f84ee67b96d4f7c10b7bf6260fa61be5066ced8a48a91cfbea28ef0a8ebe5fdc2fdee923c4f8dd207a8bc4bd98d982d67661190ac14d5ce44b4dc07b7b554055a4a05aabf786f6788cf71ddeddb3d2b51bd8954e18786fc2d2c43a67e4c2ca8fbd8c00ae78cec1e18ea29cff82be0f25f1c06ea50b4bb0abe86ec7880136e38180d5f5c0bd7de32c3f85387200017e055ea3ad447919feafd2a76875e6d3b8c72cac9da609fb71d969dab7679aad663500d1d4384a06b0867dbd6238c84d159a23f2e02af8cea6c19497a68988d3b117092780af93dce355478c09a157f8ebbdbdd8f5091abd0f65914d8477efe45304c0b6b2b7c1a3504e0d5c5bb0620bb1321dfee7b162ba684686cfb4a5bb6a8f7cf8a6768946c5993f5a93d7bbef0315b9e0e52581b16f8eb061f108a2525fef819af9658bba25003ef63a8635e6263fff959cc34c59a490defcd8192fe4216cf4cc883692916237804a39b2187735377b7fd403cc08f19bcd501cf9669fda69288d324a25de52dff2334602d5bb4843b7f0c82a5b2f2d007e13686002144b911c374eeeded28e75602bc4d8b97ade1ba68e2c35e1ba2a0c1e81778f7949ebfa8b53f9801b8e63e953b77be05ce9e24ae4df3cbc187c413d8d2e251d0a0158bb9ef3bdcec0a37ac4db07b141a42a11261165d2045c864a5f3365d3856364b7b8003b2833aeca404a95e1ce4061fac534379a1b855ddbd2a6e1823635ed976cc3e7e97dea27fa77ff2c8f90e8283047d8d01a1608b6019971208be72e6fcabaeea8014ba9c7b540c17598201fddfb0fe755e62fd94329981436dcc572462e29a2b343d096c531de37baed0b28b680671e329476acba7010e57082c2b7327fefa12d03c8890bbee83fa40b8727b1de82a1927dec832e19a19bc9a32a0dc442a8c1982eb9b3fd9cf03eabbba57703030091a1e8775f866cdc7cb9f25411010ca334b38d18a1dbe831dc28d551921d5e8004b7f0708e0ccec7d5a299659c41a0340af4d613c8a9136a54e89b9be879591c1a73e5fa0a5b874da2f7d57a41505bcddde0522e25ea726ab96b217236a61537363cbb247643ba3d6a799d143463155cc038c75e6ac4340a5727ad1feaa1aafb9ed5196c3c8a24483702b14a84208824258bd26094c4222b1bfab15cec41dec342c8713de18cbb93f05909065b8fecdaacd8c15295885747db7ba26c33df5a01ca379f3beac476b2b0bbb5c70d4ce0cacbfe10d68ce8c6e869fe9d6f6a6f7398f2cc59b2c74b8256a744bb43c27e0510741c9a39f11d087c090e3d362917491af0d19347cca497b20c2184d182a1739be370a37002df359e354a75e7c4a836e55e310a58c93db3221128e510290c5aa8c806b602813f802b30cfdb575782b4722105638d097b9f5d119952857d9517b6175e079b3201b2de56181826f614a4a48e98f0c3597a18f477a51029c7f29e36d9e58888763a2bed6ab2b7be09714309e44afbab038cd3a172c6c848e50e20a90cf8861ac38bb8c483d4c07616f1576a05aafee8585bbd67e9496670e2c364b343c637d2c7b7c0714d56614025acd6e22aa7040e3e242f42df5ef9ba5cd7f5e22cfd57713a7d8a0c3ab27f0d36804fa5e253a42a51e85fc5b8062862be46637ecfc4b06106d901ce76707047c92344309e17bc074c0043d00c998a1b4cb6a06bf4dc7fbb1af16604a44348a4613a676f6e5dff2527a91e16a1147920e8b88754a5b0930d919b8c4a3057824c7306a516816c98cd724bdf98aee62997c2a568faa02107defee690e0cc5c91d3bf5dbf143fa74560140272cf6807053bb4617c429b875302725902345e75ce0f09572163b7bf7d7625c584166644304eba295e1fc0c85362bbd955ae4c09e5d50dd623bf397646907ebc5aa29050c45f5dba6ee43856bc6fa72b7b6c81ce69ccd9664ff400374aef617e9f310f38f6667b560263a40dd055948dfbee97d3815f86ac39520a9dc3349dd192104813b59d8d0718cb9a8d28853d89eae65237ddd313c433fc538c576938cd79a6fffb6d687ca2b2545282b1780aa676899e3401b3d79513a08e435622d43f275e930a77d32107cabab1772b5d42216e9a15ec8818c879669d89902d342b46549bc8248bd144f95c87a254076b82f958b43e3b831a981ee96150bb831a576cd70801f2ef7842e847c037bf44e18663389042e04bb7133e9a663c262ccce365730eb0addafbf39c9a94cee7a84a3fdf26547560303440ad4d12a1c8a58784501d8cedee368f784beeef0db6e42101b03f27d987cb6c9725293c8629ab5db6ffdbdd6b959eec1e53d0d221f2e6c8c280520e09b9ac8242661e3f325dd63f6f8738e6074d89e0fe6a8a519a40ff3b960c935b6ac66500b76a36b85ea09a3355707d00809524f1896b77ddadc132e59d62a9694623cb412d92db92498078ad317bc6d11681b73e774b5f3dfb0ff7d420e2f73337d3b729ed0fc28acbdb66fb41efd3525942084c4ed9ea7fde9321a3b74fa20b9b58bafa2e075175858852696cd698f70dd2097c37f968de744f2fd9b08cdd1fc50b47f3f09621be71f305f8696a946e07d09d14c8fd2bc08395adac6e7bd61737dd5adb2e0218d9b2d04cfe26a82a74f82f1f70ebb3efa7f1d4a461f66a1325391b5c3738da4534d8325e4ee64b86a921192230b521ef9b24db18c2e0fef33bb0ab065748ee95ce29e78b4fde3195565467761fd8c8faad816a36476bfa3a29e7c8635b39647b6d1b371d462ab6b92ce9c56712066864803001c73ea64294779a8b16a17b5fbb1d19ac1d11a03e9b92fae87ee9565ca11d999c54d762766dc57593df07f5abbf68f3c303520ac76443419d1f598cd5d65faa742dc25ae9a906404a2e5e37bacf2dab996d9b6bcdb3cd5c481b74b1001cfcd3a4cdf51ccea8ac9d8a82c22b32db9eaaa85f1b16dba6f1333c5661a9325f7b4b3ddba943f2dc07321bb55bff6a53d5319051b64fbb207599a75a39c233bd1c749ea5d3fdca5e09b96eed28e050ac796cf621d06585a3c29dbf1616035db60c6fd9b80a1a564730cf1c073dc903418d8b822a57be63752817aad7d91a3363d3f5be2e58c064299a002da317020d59eb9befb5ff168a97cba341492443453cf828bcbd0d6aeeb7221106e598cf75f89801d5562674179792d4af7f308a9ea1c82ce783b82a06097c4cd256615ea6ffc36641858298afe8527ab5cb775d7e6023a9a10dce05d6741591e90e223df12dbba283c7311a3d707c67eaa2a8ed98a6c0f5b70ead59f909a4f2f9867986ec01aaa5e712bdfcb60b420e969fc8915911df3d188d42eb8235fce4e6367d545d5bc0037080a6e0e1442962fde2fd56007cb7d53841d9708f16d848b00eba70cac10b8da7eee65127229f181dfaa23696b14e050902547d511cf9a4f518c7bf91eee5fda3533e0ae4da49395f2e41ae52ea49c34715351d8a9237b8cd0c2a79060de708807c3d48c07e0c7e681600430795f3d085b224484ccbe1a5bd28b0f2181b1b474abbcca4633b96a84958e10c4f10e3a84189fb9f90314ae9e9c3ac13f8f7e61338430d103820750145d5a8761dee27ab94ce6c4389a1ff2f48858f6d4453dcb4063d4c83be5cf3938080b2d99ef34c80c29c5b5eef4343fb08a2446b71e6520a89288a06239dad0b0203e31889e92f4303a726ade9436292eac5d464e7a459241d65cb1ad15487303215b7e91eacdf4b3904704215c1a8cc13148ba98c62cabad71ed50625330ff2d958562238c034ad27110c8234bbee19be4a513228b612b1adf7219036b40e6ac49f1bc158797aeed8286b9ca015877c9911906d25ecb59e1c9652a2b26b9d9a1990f2bd8d354b5641106c0f94d42b8004d918ff532404613fd43efead12f0de68870a3c4a252d13bb730c5a8269d6274bc472984b6449d14a2f181a0d0ed709c4b49c8e447a0f8354f325fb8cdeee9347cf3e81747b63a7f3042195500332bbfe79806c74ae78d37d4e52405a31ddfdff0c931f260f21dceea1ae6168fd99ff87267d0195b4793e26b39caad62d2bee6b81ebb7e774cbc6f2d369cb3651635e051b55778325041b3d547d806ae96774868718729336b4f84e0edbb79e8de9cf0e2de4a604915217293418b84d93c6624d43cc8d8778ad3f7fca05523fb0cfbca16377672049fd346dca44a7f41e3fe7f8e75509344d916e02382ac93d7af510630fe07dc2fdd58b329b02f64e92450010d645679c423c34bd50c6d6bb1f9ed60783fc1795e092d4472e90d3ec7eb9e4a2ddfe2cb4dac3ebb3ce3d96998944c059c041073865824965e8d032c83fc681321104d90873fe96ef754cf423c18112b40540b3fe398deb0452c1d18df05c4a7b3c2d7425303cc4cd9d3164e2b6701fb54e4f7c7782ca55b3f8384e30a9841175b8fe98f26c619842427f09f6ef7164c5249384f4cf2476d44e11f387fde448bcdb7f74d3a3aeaf4478b0dc28b53dfdaabe506c021ea0769eee28c5adb80a72db20815ac8c313d94ac4cd788e180971c7c9eb73d071ab7dee21a80eeb0195d4ea3046f6170f67471ab6f75e19e936db8d12d01391d660c585c7ee58ca3b94869fe338f90bb410470ed4136951e196d29b5107116f842350c4eb644fb2a6fa45dfaa7b4fdaf97b6349cb063414850ae5b91f688b1b9192acd1664eac19dd63a89753327c3a4a307e1bd36f43c5e6811a6bd2be3b152bbcabe214bb2c2df51c559179eb912170846e14208c61467da4869ed304793c1e886cb8be20879d8e5d142ec3bbe7bb36bc61eaeadf95b85f81d2a7c9be7d62a02e59ba0773d8ef05d9ebf5e034bfd37c32a02ea0db1b03cb8f2ca4ab59c04de9cdf723804802228e74f54c4bcb284450bae1a5c83640e646a858eb96a2fa8e52118954d78dbbffee90cb3b5fa7d4629a02a80815ffd6cd8c42a4f34f1a0c057154e0b3c69c29596b88e396b6281b9e76e5caf87763ee8a7012f9a56feb1791980fe4382cc7399f8c0119413e65c0cf485cbe82ca35e4befd1536cb8acc64502a3478b27cfa223c7301e234484ebca090b2c50646f7dd47d54c36e8149f67549dd8605c1f84cb383fba3cf902b970e442ee6bc540c32e3908116838da188498ee5d4b2d31ebc2ccda45a53850bd8a51eb76a113634377b6cc0858c10fe7d54968fc33827cefd5e68d4fb5f37cb9351c12ed089f5d13f579b1959efef8e66e73b677b4e04a1f2e6a6087befa0c16f007b03a50bf5c55a63623b5a6a53a097c75b403cec435c2436068840377c1fc8809d5584e4673d8cc74bff0e57c6d99fd26fa54a5b4784373e40e68ab98841f737039b6e689116d427885e3a057f69a4b229f732e6741533923e734140e8daa24be64a9922c6b8375256534064a2dcc564b23d497757e159d463e0d8c5d1bc6be22c6fba988746253bef230c604b1cebf1a172bb69efc8724a3214d4f72dfa808ceb8ea99bbd28bf827a99e89b599d80a3ccbb4845c8740c3d25c1b42d7fc73b5d0d91ab5883ffcc84058774491eb1087b0ed98965dc64b6d19db6edf639e89114dcd5029d7cee99cc6a98b53916ce2fca0761cee7093eabb2188c770b6cec91d381efa903e07aa323c844e73cafa12294a2445ad694ed4c824a07c99668c8c9ee5257042daca4f021a83bf005261f02ea7f16da79f92d612892e0c39b5cf5b5023ca6d2839ec181153fdb101073e497074af6e37036ba5af1fbe79850201d7b321b8c0af868d1aef02220967b14fa9285ff3533dbda774aa989329708ef05e6de5ced9dc84b880a49051eb40c98abf8a1015dbe21b09179f751f842c70166112188e64e52a56f28803d418605816bbd7857120d3b54759d3f6ec4ec84d86943e46a5c21e20ad8d82035296d7a2c6cc8b4a3fbc72b4d7d9f803291602667b42344c9c85591af17a4f03a90b1ba48ab2e1c0e989168d1f1a72d56edccbf3ef7f8fe21458de0550afb6287e6e2eb8c282c477f165110669915db7e218388974b61587e23858575a1eef5092d3b8cc9fd3360e91d85a62867eb58097adf9cf2d1bc15dc7de039e28494cdcbb9936565a675aae7fdeb9daec2cb71dbcaf45fd52c7ba9d9ba84c681324b94dd4b695d0867649c1a56b6c9ddb98f21aefdd54736fe86c10050d5a2051a69e03b02cc742280014ece191b5e5f387e6810d44d2e768a03e613e94ea2a0b84b1bd60111c20479385da201493a91db0d94c8c095e7ab351adbda25f840d2fd3c9389243ecd2192da35a9c48309e6baa57d44acada98025e1679e713adca1c025070e9369b82d203b036d1f11673f70f5ba7766e8b8ae36187951e9120149f7ee3ce9b20971d707882371036c9cd706cdfdd592edd146e468ed2d1633b1f80a6b303d4dd144759c4aee5ddc3881eb2ba533657ae0e83d8a256077411265687cc6cd6aa03deaaaf87309f5ce8973a1d54632b4c41c110a231ab14b6a7aa774977e65ec31c0263f1b8adf6398c5d6110db076fa627b731987b23ad5667243a528532b0500274246a441c1cd4bb6dc1a8ad91a0665f29292c25126969ddf7c4c9987e3a1b570891225c6afc5433c1b2747c0a74c74b52baa0fd33ab976ec077dfc7ed4bcbb8d3449c5a351782b383a21b1ef54a6d6c048b3665e00ef237b5347f498b6881bc798abb56486c37270577557ebec46bf7575a393ac4fa8bc513f637c294bc59a4151f21932b84f78e62f02a1663b974c43d7d23c74e168fb1a42e27408513e441787405251335af0b71c51912053887229b90dbbe1349f2e5c77e82f74d41211d7e8a90a9191caf4e9e2e7a3f0eff30dbc4779854ef4e3ed27e509f91b7e313753ac83752fa3774c10987a6ae759a00fc800cce431f02fb6ecc4554e8241315f89a32a92f288941ad7870fc58d0c8bc3ddde21c86480ebe2a5ead128ce5997200cebd8daed78f53c002fc9561b0ac6ccf64fd3e3e02eb71b042d4e9eafbe213aedb81066f9b0409058262d75d8c114ef0eb56f776ea1a073a5c10235b366ff44963362c40af6760370a46ecbc7837bc5b1213a13f2abeb073779d0b75887a5296ed0aee5c258357fe158b77cbf4c78db85ad63198cb91d16a7e74a2d68b903c78deb7372bde800d8ab9e44241a341fbab917ec15e2e8ff3edb4889571bc346799205687759368c6bb429b390145bbda42ecf2bc46e4185d322568e817e97d734084272f0fc965017c3976b151a36a86a2d9ad07cc185474f50a35a1b4a35633567fdb29601f917b9232fccdbb7496c187b58ec36c08a0abd58492dd051d946cd01edd2522af6ea08a66a3ded44564183c83152330caf3c37c8d792f14e814e31ffe82dc9ee95fe9e21513db201775a3e7bbbc5a168905b9ac4f5564010001fa7102f2b24162d50e64d7f9fc05a9112400cc186f511d75c5b9a2c9d733c86121b98d6d5e41d85b0b932d90c346eded94cf339f53ec65c9e4ea6ae85aecc52cc6bea9b1d5c0c8a95def63bba2dfd8b38f8dde2746ab1a09d9faa576e9b9aa9f77eb669f7e29e4b8f1807cf33de9317988ec63d581f0ca1277c2f2badbd69a4e221631cf2c5e1c84366c0d0f8b9315365031c5ac23c29ee3c4ac75cfa4c05dbacd56555cbc08b2014ad9a76e515ea20fb891df01461778ae9d123d57a3ab1b974e51b4d53c74081366cee647db3ee29ee93b3b7321ae49b4b3cfc1be6a2513976b7fefea081f7c9a41ebc4831cf351f552767cc303d1f5755747acfb0b056386e8a92cc2e3b64fe8ae9e07af9bf081ac976e054eac93bb7a3ba8224449b03d48841872efeaa7c7a0fde5ea2deb4054171f801b0ab87057f3d47dafc65bff860cc9d30c2403a6bc969ac3d4958d8dcca8cb968975405d43cff2ab9daf56fc9a4287710af10602ac6952620c7f91c4fab83043b0ceb6d046bbf4a2dd5e718e1d38166d5bf3f5efde847090d021b3995e386ae9b68c765e7eb7ffb257ae8478cb7fc6b6bca7039a2f38b4669fe325d78c5cb34e5ffb1ac308a6cfc69ce4fcbbc6bf8a66f300cff594b4d1b907492b068a620e67836daf5d7daccca949d36de936b49dbb23aebb5913c3976fe4ef26164c911fdc43becd713943a8ffd2e263086b7ca705fa2111eab3461c04220df4fdd99d95a615f9d1078e3a5dccf0af4e9c7636fab54c787f6598c231599664912af2f5cbb251923523a5c6b78a533145b215b437fd23fb8df90743352f7b0739963a3c57f68a0f4396181615e4b202446d6ee590983b8a41d184cbdaf9c78b3ca19d7a7e0ce1808e86851d47b6c4c07bf898fc46dd6da68d3fb1aa9de1317a8eae815f8d26c85ffe41c0576ea662473f74c7bbc0c5e591dfe06b97fe36004383027023aad94dab25e59be00c8cbc1b50b1b8efbebd4628aa80b9c6aa35ca99ca5c388bc5ff8335e5c6f0e3ce381db23f2647ca461245ce9d0070ac58757d46f66778687100c40cf6970b506e7a5b0fe9bc2a04969ea93c5a9eb4ae8d3d94d87ff7d793765e94b495a3ebbf1a8183bb3a0022da2725f6903bfac6791c1943e7ab2a3eff1a2bc1fa425fc92c289d41610575d5446a96ba37d23d61e5f45ec64f1f7e32598e4d5f75b586ede1597f78c9fec7a764e4a4a8c3f444f6d5552d64e4f4df0b2155e64868ff42d306eda8f34d7b814bf91b53430ab3784a5e97665129aa1b62bd79219696cc10ebff43031c3e9e5bbbf8719459a1bff441c2d302724b774bfa4f5503662a06eea62cd8267d5398ce493da8a3cc2598c4bfb05bf9306a99b55aeb5e733edac7a59d75f8198e8230cab54a2daa2aa3c948fccc8e2e38669491cb2a1e87bb3a572cd2be80d85613a2612473b8d080e75ed4d3fd94f8e39d5712a255c09a6ca2b05251fe09d9823b4ebb2cc9021974e8a3523be69c6b8bc61ddb32fb1847183d41f63e67a7af7f81c1f3906c6e3f660633a19acf843d79f7af4bdeee3a8d0c16c5de67691553eda0e71604768d076a31315d163b5a034aa36748462a898ab0671e6238000f0666402eb498d248bd9827e360346d72794d5bb5f3e7da0eaaa827a042355470289673f9e0ee731bc307bbd64888e9f52e53304693ee503a782017db53af6628a8e3dcad43672298534f61075675d6fe1c7307696aa56872f222c9c82ec1f2516b6c901c8d583efe15cd884ab7776166405e3a380d88ad1a1f70c609f91fc01a72be623ac39bdef06339289158a35f5648563980fa6d54fcce9a6d313c423a09a8bf110e3ea3e0f395b35cf1e2ea4580f8e77c4506ae3155f6ce258db611dc7ce351b971514fc4986e7724796a7cea43976c05282e3bcdb30c5878df8df4ab2d4ed35d70e940908b9b0578e21d779bf26585ef57a1d4984eed28a6689dbf81afb2ac1ce7f70ece29acf0ecb11eec8ff2d967b3c5e53f8cf0b5109c76ef172d13fa2616a105e775b8f4252c87510840e6963bd51032ec1c1c3bd88c025cc12c3027b2cb93f76ccf6a812532a858f2a7d9ee31921adfe0c01a5da35ce4efdc36720293253718803f73f5436e8588bf4f03de6fadd2dfbe11b6e499096321348372c66603b5fe7e97688c5584d51b510dfab5fb6cec7944571261350eb667be4fe5b1f5d1960fb83d50773f2b2bdd2a45b07961697155585ee130dced372f3039f820e3b79fbe755e24e5bdadd835334ffb36fdc79b1bb1a9f00c84df462379f9b6befc887e1f416635ccf9f2fbfde3f7cced6f87b78f720b9a4f38b43b2ed43f9fedfad1d3bdc243cd9f412afcfc5d6ae8defb4ab637b52a78b7ba045642c68fbe6f1ff082508123e3de333ab36c5ebb5c7c2a31a9f44f01d51e163103179af9992bdabfccef20df3e083ace33df22ab9c4d5a28ac1440367964e911da8c4351b2fbce8e410e42a4f8cd3978b71599f630350451f2ec9ecf860e70704077b5bbc5cb159eb0a7035ecfe350030b10f90006a83f4e44749005e9eed29e470fa63622c50f78bb308833fa839d6035545d451f7500a94375257a6407281df5ab51061d4095e6a20322c0a7cbc9ebe91d11b0d43e0715f70c6c4c9ac0fc3444389a6ba8fe18172836259982b20bc569a3ecd40cd998111eda2bb86ca3c5052622d2aa9d31afe75729a2939b9ad6f2150d5f9b58f72e2addb4f7e4f019674bc309fef7f862788b9c1890831451c507bfe230d5ddf568d24a35e14cfc634ba6bf9813b5ec47c89450d0502b04f479d48647c77b0df2e3a65bd20625ba2fa318697b30132319ef2a6013308db68abb179447e3030e7ec0d6095bd739f53a74bbf1cd59bc3d32fdc6f0bf294ee50ae2474afc64de7fa98f0d52a751231ad00cd7bc5c25063bd4a0f42da1eb3a57e0223ef6e04acda9c1b11e1a25a33a9c07352a71f6730e90de7065713cf0d7c3be3b9b62434f139ae8b8e94b198af3b472d615647e41eb84921cf4bc759a3ceab7b84e414d5f2f6ad403a838c2d08f60e25c89e5b2b5c5d35d76e75b76c3fe01494ecec470cee2be19c91e9796de73620816fb7b3e4c504e742ddbeeb7d3d8e417f78e10d527726ad9dafc1041364179e0b05a0f62e926615f8c6086ba878dd7b1caef3e98e4861c5eb327365562486635fb109025c237f03d6a587adca169cb85b51557018ffb81e6517f0638fa23a11e6bdf2e3f5d9c1dda5d6c30daa2c31bb0259f2b1d036c018897aee220b997158cec15d772f0cd5923185fcab8153f886857021db37e234a20a9f47b85f32946c5e0beaa04f264bc8450a8bfcabf0f6d0922a695e10f92c8854c8e350ae1a99889ede36d2541fd77f6619a2fbd0e1805bd33850cce8c973c3aad24508f69dc83ae58ee397e90ee86d89bb9e193477c0eae38f57cbf938e1a10fda64806ba8fcf2fd08406c2708a71861ac998bc25146ba49ca08de00a75a8a7d12249b8b8ffdca6195196c7be5169b4b299f2fb9eb18b996d6c5454731de9727931026b6a7bdf331726b35c2d05f638da1d67251518500bd8bc96f72200ed4b28987a7edf1ed879f09a83189396b7a65ba5c1bb516d077f68984aeedd2e7caa501ea6110b1433b3baf983837e91bbf3618b8e31d58bf8794d91d6d6cfa8efe7facfbca965e433d9407c36634760a0e2a231b31bb313778f88f2bf78f127b129da2944c6dc75cf5c94010afb8c1eb070f9848c52818039e74c98f9000fc50d5da49576c65701c2092a37843ee4cf98a89b7d381264ac8641c0746bbcd5992403725dd0b00cf593ea185a54999ff7741b70738e5fb1b50dc2db7a297280bfd811648d13e97c346d46a3802b3f31e7ccd63556c31ba06e119ef9c701f6b3bfd76e1109bf53d0e93b0bfdf6ad9dd6c2c1a2185914ba35c47b9f91b1aade322fc2cc8387643f94a7fda4349ddd4c55ba953d48b739213a7d41b7feea7265e77b274c4829f613a751b08c6556d0d0e6a5e420e351af42221b9365a3e63559f8f4662e4b0ba2fac96846198ec13c8dae69340a0a174d3071404b0a1fc16162edadbf401458caf3e7f7ae2ac9da13fdd9eb34c89fe3a6da4ed25e68eaffebda18a0a85269a7bc0545d04be690a216268b016ce0ec0649439dde87be3b6b0860b4af47354c05b3d193df214a2b40150b02e9901f11b81a684700982e768481aeb319665b1743761002062b4aad193ac621dd76dbda07ad8ee6c18c80d01f4007e009aa3f558d5550edd526c74707fcdbd87584ad8d0052cd7247a8af0ca8ed6443d174cb76bacb2431aaf621d77cbf718d1b164d77f970c6ebdc9155b0e9a126f3934fd18621b1afbbc455d71168b773f8e26472747b1d848128b0f1ead479440d7680a273d543217a1fe630f10db2da51783104a2b8e60c4543321fc2d2a7e9f6d1ee572a6b12745754a52cc19079b0e070f9333725f2fee4258bce924f28af75284e3451f3e725e6936b206bae090dd072abdee0b26045a70357b35d0247076dada2ef87422640f4c19a0e98f1948130b6bc19e3b6adac36634379e864bd43aef9e36312b5358ba43d5cbba4c12b4ae35555f7aee7fc051d5de6d4f5d5d3e55085252f36805deb278e2a5c7d4d9639aeea2ed493103654e3b5bbd2ff7d6f7a88dfe7597559fc4dbbc6401cdea5abd25f7cc135e06eeba497fc386b8ae1e8aecd0b2d3111d880d8c07ca59f7c939478ac7a50b97de06a582cc9417b5473b63560df056823a79cea9b03d52c6c969cea1315ccc7c6fd65691cee944322a3907cecef99206fe690f0f652e36af72c3d85c60b11e1092e4279549f79eb7031b3d6879aa627997744aa6165ae14dbd2bf621f440938fa56b3a6aa6dc856ea7aeb824309c59e7a10d01aa130005faa2fe5a062b446484bc3422d518ddee0307c3a45f28f20b729e8552dfc2218fd762db0d497d9f434023e12f76c60e3dc74964c6b60f4cf8191979a34425bc79fd1a17c6847445a70fcc1c762ccf8b8e670863b4189ef08a7eccc03d35f4b0b11ba32c6b19878b1310a3595c7b54db00bafc30a788946c90e13741d310ee4309b1ce1e8109be89ec9b9eb2222eb23708c121bec1da790d3bc2e635e55dde2d19681ebc354083c214e05e063156aadd0174e1e36636c73053b4480d37277e849317f65a5d829c6a113d970bcee0d9fe021de90ed8f667752e591af8080a50a719c9010f50cbfafc1f7f4a9b94e475996124566345d7423eb0f6ae57d72c6eb554be93c533193d3f1862c70f2c8f45f9186c9540f646765833759c99813fbf25b87839c9f053e0afac98cb7c422b508efc8d0ca93df70e745b52445b29240d0f2c43ccf59829df649f022080a4be8a29de7d96cba1de34a21d585671b91853b8f27a74fcef7a00b4479ae3112f6a8da9997046083b01e8e821edff10814c5ccf54f1993f73ed2b6faaa0af431fca737f9d2c820c7b362e804d9926a15b6fb53f599a013f1d73ff1fda686a6cceda6af6152c7c49aa09c68b44271d51ba5e336375283a008b66c7b2ddaa928bc6569867bed59eedef8e92e7aac16771c06a1e498409d2e9664c95cd52a6e7959d45d1e70887d0844677472ffedeef5997e96a9be7607a5cb656bf384f4a61873681b9134e03cd6e34962a17176149d58c9cfc6732afbfed2ce38643411c605d814f7474c1ba5f8a81b4d6350a8899d7b6123e85e8eb9123807742794e1a2bcb2030e9352c03f49f526820d6d53a4e9f0916985e2dd632dad3508bc5f89119a83e9246f0d3f4f9dd3e075d084de126001cd794bfcfcba014f5d857db80b82a454c4a6e285a44b2a7edbe570a50846c8b579deb0bc0d7d951a9cf385f75dd2697198acdb225f579b06fc58d1912a7f013124d366eb165567c9cabced4bce75bb12036b78ee667aeb9e2859a1e757d558a72c984fa91c775a3ccb51f2efe9ef1c339acec1a0bdbf9b082b84d0c88df1009b81e93da27c05fa64d1956609981186a56797768f3d53d7034ffa4910c535870b16934a54d8d90dfcf37a699553997ac9a2fa408d7fb2d4c2c2253f51281752add92410388ab1a81be9497a8e980e90dfe300f95498ae6693c573983f8dbb701521cd06cfe46ca47db5076c8ef48f6d1227bb0f4fe0e93be182f7c0a82bd01bc27ae9ab16c461c92021a27ffc5d46f7c9b5a4f9edfa1030ced7448c0d10e75116aa4a8fd101a601071431b76d98b4378a6aa68c08cfdb0fdca2d70766d1a4a8bc52ca37fb1966403aa8434eacaa487b811180af4612ea5de25438b1757eac2b484276610f1356c42e0c8eba4ebee18fdcbb9f3d8f5a390c8bd259c2c6495e6ce2f2f5e689fdadab2ac86b73d1c487abb07084d9b43d5b6356c984844e6f6cbc43819ce444267ddcb2f96b818188d40a647f69dfa2d70e2c6cdd07e4a65aafbe5350faf0f6f4278dc37e79666803eff8bde416541574e4848ef74c1647a3bdc257987023b63ba09b53d16e9243db82cd336de95aa6ed12e35f4839b77ce8b439a2d145f4537430d539bfe6002e39f2fec50315f9e8537c89fc3d60fbc9a21274743910fb3072e08692d6fbe03f8991c554559df7210f65c6faa12e2e8c37a1f4d9d62549251929f869b708aa590b4e2ecf81055e1f5755a911f06e4b6ef6279bc279c52db5da76fb917fd72220e9c79bb9f2ec5cc9687a79d68b43bcf0ea52c36ef6a1f582d42b59cb60ad6f571bc0af4e81d4324f2dd733581214d9a8624b1b2f22161b32ea1b9fa1dfd7160ffdc6010d9200f7dcc601597bab8433fe9da3f71f433bad9e76ee5660fc1425f89a4f49df88b25c495de25017d8a6111a29bddbb38a1ccbedcde910d9ed3b89cb73086b7d4e098482544315190dca4533d88a353e9598535e4a15b26cce7eb0fcfb70d6440b0058fa556e8d5fee711339982232ea3ad80db461bef84a51e2b5bf600788d0bea52841402f5eab0ce076eea476a1716c7a4eca5539167df15191a80ec88be8d3d36045aae80300a4624d2babd65502c3cc579df73ca88949ba0862d71f144b518952a9e0330b59f6f223f70245f01fc0176f53cb0830d2d5acdb698e378e2a43477c239aeb9e60b6ac8975846589396075d20be2e582ed545bcb5577cf37769881b9ae3188b82281c754cebcaf01333e4eed8c42dc1f19583cc2c2ecea405a1d77e2d2110d764db601d30ecd43c1221b1ba9d841cdfb747166a8aaebf210c4e66af3202351f2a2a6466d19f8d621a6f86d6cf4f8cdb9cf1e4e9439b3fe8eca0458f4163b9799b51a0cdff7f8ee9a545ae4764f300675b737adba8c358a0ef20b7e027f4db6fc780655d1eb4051a33d4dc320cbb4b69fef13daf2d69fc359101015723d0358d890e9a18cb81c79882bb69e7c1675aea82da56618947b67cd09ce6baa55e3e06ee1ebdc9ccc60bdcfaccb740fa9510975f5ab2793404d1fd0ca45b06b041d9b2d352622510d23f0f504aac0710278d3402a4e30acc322fdb5feebdb5b6643d2f0c7575fa6f9413feabc84607b4082ee0755a49a4eb7053b489b4fd7c9a4d00ffc17da2a7b4d52ecf463c6e506ac2016bd0ae65745b5a8c2bba7e23da522985b69ddc716bf32b8a9824bac850e05fb2b143560d30a1d2b48ab2258158aa80d50f855cddd188845bb9f2027cd0a664c14740a9d407d1251e0f02913525b4ec0f20422d5e27a9369c62311a93b15cfe45f624d1641eb042ef1e509c9d8ca7474b9941ade1cee0b1b06e3a26815be72242fb5b2546e8e96a4c0c6960bfe2a6c063c5b672c8c7b0f195d038f1d32beb05d8484b7e77876d3c573b68ebd09d2fc5a9e2f9e3e6099bf066e9171297be176de92cd4d2fd7640bdf12971c43cb5bde8697e19538f3dbd4e8f96bcd51076b30a28e9dcd69f4aa89135e645de0fdee23e148302d2b8a5bb4e680900ef72b807be87452715cca9b7aeb33fb824922a19dcf9b7f5377570f4ad932446786014fd81ff0b3f04ea9215b65518a909a7e8f249f2277790307ad8da7958aacf97a270bcbcc796aadf0d8f72780c94c56457d3748d365f1b4bd7da84d50e3a07a5916f4759907c1189542c0ea89ee088593d38ce6984ff902f9a7b60f33b8e600160a2c01d69de50c610829b7ced242df5c367fc78d8850e9b1855fc02f93801ec8c7574d9169ce78b563a48e2531f28389c73c4e3e574e7050ff5a7a26389c1c6f02b73748d9652e66af3cd7080e95910f8711403d0c4373d0a86932374d797e048a292a85a491b6c16965386c2df9a626bb62bf850fed1130fdce025ec36b8ce3815f56db8889ecf8aabdcb4f331353c94401fffbd49ae7102fb2cc93f350c977dcba0eb11b0f02371633c35f4db7fb4a5d8908f23ebf55fba06818866c062f0b2125b3966b45bfd8c01f24191c4a09e5fd93e543bf5ed750776e241934720f554298eec35eea1290f6815c5272610cf719d4437dc3456be6f6fceb1207d2c5820960dd314f537e052b7283fb883a401d3feb2015ce46cde494857a2995ccd92c92781069817e171abeecbf030141cf9849c5099f16487ba3b6cac5ffa410aba1258791220b0ac7fbd663361ea446c5b61ceb3c3fe16189646f37e3df20976565fe78501aebb63ce944a5641fa7ba737093aedac6dda2246ac421c2814159b392717b8418be1920478794befdb5dac98ab9387cd16f9b768496ec8409318f37b78d02a4d4c549034add31b6cee317221610a16383f98637115be572c2c7fde4bd951388bd076c8b468c120076e91c17cfd01abf851beff79c1eac978c11ec3d5aa7bd4037d911c99db3e3d2354234a3dbaf43c250e461d0e294c5680c53e0286046ab66f797f0a391e1a7f2a9525e38d51704edba511ad7a1794839211f08b8e3d5bc936792889dd2a89fe9be452c7035d188e3c7f85649f4b3f15fcd24a214847bdffd9be3df0e0a5dd866f7c944c3a034b7543787501ce053d3959fddc97d16d59010bb2d40b6a491892906094742480697713ccefad837dca610ee143b2e142f234c65c82caee64d3fbee6298c50fde568eefe9efac6eef31de078aefa17fa1c5f1a3badf2dd73e00d1475d82ae14b23c0b38176edc1141e4438b9619df619da31efd3bfdee9d1b5ee194a9681bbe750211ad9d9a6b17ea886a84593929105bb7fcca869f492f8838042a1bb3ae093ee3a4337aa69947951170f103b80a95bea74ce161987fb2866f88972bd53d345918f5b480e3afc5738b451cfe0d287c88856f67d6f1c0ea89993343004df42a4ce710c2d918e06e07685c751be4a500daa81704c77d1141e07ae25c06602721124da039c8c59ddbfd48b7c7b32faec534ffc1351c90ab60233c2b889fade0dd13cc1347a5e4bb668ebaa9c7d49d9de1994c6f8b690e74cbca6f825d64e3dda8d263d9d992960db2b949ea9178e0b461723d4814d37f754dec77413020258fb140ee54c2248be5128120a9102963df3cdc16da36db7aa95b3d238846f4b02c698a1f2e3f2b7b46e0a3ce5ed19feb9b7572cab8a69c7e320d40ce81622d81e18f91d15f1da91b298166dfb6ff09dbc076dc243a59c70dbc948be7ae3221145522fc4962e222cd46df61b7f410d8479bdef9365a9891463943ed9c9fbaf5d2d5fcf08315a4d68172ec151c98a80eff96a7198acd5a2b5d5a997d05b8ffad7476f3d6d8c41729b13a8a1c9990958cdf0ee46ba8dc7126144a6ff4d3e73b90fe5a9cb2f8d4c362d912d945c91882b5dcecf3b4b9a0e6d41721bc7030539d966d3eb4968bba272972da4f8fa9486476622911f72bf47986ff84d2f3883cec41f6af66c3c43adfba6bd5e165de08f000f44910860c0fd2e232a2e44c0c047a44f67176eda20d13b506eb24dff9854f596711269290a2050bed0761193a180464e196144ae406d3f8307ab3fc5c2e131496c2048cccd988c7b4969028d5b317df71fee5f41fb105447df988f8cc0524f6c547629beef80264a6fd31a81ca4b6e84d166522c4a9f8e2f159b0079a596e7333e8371606004885cec24fecc7b23597a897d9906b6d89e29e83dd70323d95b08f50253f9da64a8229829a1c906824e9279c6a48fa8f8b16460807bbc08e909f4948240d7f0a9b75eb002995ee30d2a630cc848f5c58d82c3c8d9a207fc156d92590ac7dc5891a10e1a58de12c62bad3fcd298fb82f1f92834d69d3b23ab0a488d4ba249daaa825143165bcd58b8f50a44b738240344223a914d9e1e4a612350bb125a2e9ad6df8b85b2f5903cb74645d59d3973280b5ef3905bdf13b66046b29a1a37b8a8fa60275ac13fda8e5241d3d4933774494a0316ce8bad6ccbee5bcfb3816bc24cbded0695692bb44a3330e6439318e7f061b33c56fd452ae0af410be8cb5926f2a08619b332502714d65b21357be290e8f013a801d3eafdf086fea475f6001cfe80835f5862fc80016db634af6c6726024d662c276cc9366340a456a29dce6b447aad8e79539ce532bb9732c2279e8926067f627e03a6a1bd49733a870fb92cafdd6e8267a2475fd2ee303b8ceb1c108f9a50155d0d5ed4aed40c689f8cfbf13f4558477bc9288256c803eb5b89d0b9ed4599c49a45d31bf3f6224b86e121d49efb6440e1982973dd28b5e1922831187084255e4ec80465ca98bb4cc8d8f05465678e410cf524dd8ebb9b7ee5f56256aed3ef43ae77d3e6c421cca83ea7adf5ce7c551678aeb443d5b3428743f14e1d7d61ec5ec1c7f75e703017fca62396e73421b8f49e7de02411f779c56c95d6b49bb915201ef5c8d638283d3306b0891e999c7a1060e22e2d1ffb3477802de2d243934c544a2f92aa2c71065e5f041430f691e9abbf1496ff6754c32fdf0674399fc0662b88996f0773812d66d7acb91332b16f11159f319651f49e666e381661ecde1da46d7d0496347a4726bf636374cae3b819c16d71116d4316639648efc5e048ba9aec123dbd74982bf2c1797cfd8c7a238f1b75ca2e7f031ccc6f11023da9f2b34060023b6b2ef41566399ec089fe44f8427f767d744335336727f0e1e9d1522ec9ed19da6d131f11a895fc35cf9aaa7b27a5a88ca9f9c97daaafbd52c65c54e1815fd6e24d9119fe9d2087da1a99cfca6223d6f78052e728908c885bc2a96ad6c493c8df24d0e243fc15abdd54ce4dc86585f34bea67899aaf14d2ce710c088dad246717019ab97c05fe78bf546d0cdf203e4421eac887f4d587d0b7926d33e8ff93f8fe1b3520380e7ee5f651724b11681447400db1aef792919f1de84ed82d9171d69ffb1554fea45c41ac5f1036141aa95387ca473449ebd2c33d886c562361afcb193978f08ce468492cb2c0cc89f0d4d3ab5559799340d174742ccd95fd502623ce8e33119c2cee87ccb4bf3ee23d11c8b629ca550f9fabce316f36a79d01cd695160333f3e27e432b602d49d5d0e3be40706834d118fbe4de668903e877334f98b500fa90ca709335b986fa83ae02e849b44e0ef3ce92da8b62b85c7ff4bee1f381d330d245dae0d2a21b18eb7de3d5c21164df2f1bf612977ce3417973265e56558e491ba1495865e2c4c3ccde708b11194e7c7dcb14b2be2413fff1264e66bd5cd6b809e16ec590179d96dbf5e623820b96c7d245c72205cf0302b887379b34c476c07a14408766e563a46dd52386b3a43ab481242bd42dd3b432ac7a036a9442855c3012b29a3655d310b9bee3404c0031b2d635525b0235533b957e818cedb7d9fd0cd68e268f65ac788560778ea869542545a4e4ee67ee9bfbbe8ff7c78912adb7aae3687693191ed4f11a8f54147e91902ffede6689482291dddddd3b8c085908de0758c2176f299b3e3fee746cdcb431c7c14e474b7eadd331b76bb7ad74fa96d3ee1de0793fd35f6e2aed1f42eed169adc94d79b613dc98c06f467fb121bf59122efe6629900980bf590a7a78462a82edc3d722431cb6a277c36e38501ce8a5b50897bf6db4cfb93bc581c79862407cfb763f9e5f0f47c222fcca48af77636a3fa323b5dc05eff5530cb0bc6b7fb99662c07dedb5ddc36ecab3e70b52ed01fe21e429b7c8f529ec72d43a842c1fce1d8f42b80443a8e232d4e109150c0dc19a0b8d8427cb9284942486f89b2511c42d7fb3249624f18a804e029c25810fa39002884e8a22abe2d9182ebbc4185f0c824c6125094bb002a868c78715bca22c5183254950d8214c9e9dff5c44208e345be92c808d03249925c1018f7f9fbf5912152489c9966008e19c70c2e9f24c50024378c3137e836c4e21fe78f8fc18f483cf974259e65399b5d65a6ba9b5364e5aedec99d55e0d5b6e5e6dc3f70a37b789b96ec3989bb39bdc8f39bff4a33405b6a4ccf9a6c4d79b12812291a8e419cd409a814575250b9f0f7dc80fc02750ca0658e09105217cbe6c01f6cca730e84021d1cace4f957765e7d5775c3c3e8c52ce496194724e4aeba4b55a7baf66afa66d1bc6dc56398eab5d2d99ba6a32713567ae9e4e2dd4e565ea9e028a9b30b6ea175678d52e4755f714f8fc9717ae6ad40d483cd687bcde60f4b65c418af937bb7c52922460122251a27c98140910515c5c605e0d16e4508d9c3a360e30457e9e2359600dd1112cbcbbc05821858b8407de53883a49ee973f176292fc3eee1dfe10c6a84d095f846f7719e20c307c1cb5196584523e9450e338c6181fe42d40a2f524903401fc22157ea36a06c3028fbc24ccca34b2045a9a525b603928576342db92d82a9fc14cc0cd603d9d0b7f33244933243f4072454662c509091447c05e705ab840232e9819890263648998999124323323af19147f33233ea4808ed0e28318f0310dd010efdc0c88490d7cfc33a012000179e16f86e4888c1992133c3d43828aa767482cb1818f6920f163498035d0114710fea300d1ec08a13b3b4248035f022344516ba004fd57c2ac73d69a23cc8eb0471831e7bc73be1ec3e31145cc8ef87112844c0f31311f03e3b50802892d4e80840e821cc9810c17d6a749099cc0c0e503a0d60c7ad001072b8420850a88b4b8b1ca8853ce8985cf39e7a4c1e79c73ce2348e69c367cce398fbcf89c73ce13f89c73ce211cf131b28420644cf1d92dd0507a9e09203549f840638487183013f8c080f5fc904a1232f3832064745a78b22b6224122b7c609040e142c5fcfc1cf2e46f662409528b1e971cbc7081ab258acf69899e9cc4079391179092111f8674471082f34109f014126c4c84d08a0071814a40020b040448457244088ae4043d938a2124124b7e5e40c43943e287cf39e79c4788380c7fb3243b1ca1c2fb0a45348aa010f06380c8f60705a802045f69e24ab62e28000db209caf7902b7fb3224245827e4cc9c1506ee16f56e404bc6724e4137fb32240949071a8b1225bfe662f25bc8eb0c3e56f5644c92402c44fbec8277cb27301f2f0442edf9e90c3fd8604a1a55de17365d083952d68d557941fe8ab89199700913a2d3c190b2dc860bcc7bc807eb410f3aad716bcaf808b44b8020c17c36597ec12b3828d02bc84e06106901710adc8b964979a1dbc5a7cbf76d0814e196d702e305e28e07d86cc072b7490028813d7cc08253c68203131af32a28a1148e01b7f3323aef0be82e59915499a1dd1e26ffb88f0df09977b58727872534ea939eede17350d6ab44451c801a30ae6a0013661095d701ff32197372f5a97c3bed6e940a166dbe4364bf4b74e070a52d370abdf8d39333b54577639aa7c5d9f9c25ba537c8994524a2961c481eec10671ea1e661841840780bf59115722b633f46dacd28fbd625cf0d098e68108a4225e5c7bd78c8821ac4d419c7b18202284100922a284cb9f9ca9b40376c14b6fc2af234b3a7fa7fbe9df9774e6f04fee4ba5af9d03f09b52a7e7764fed805df0fc8f9b764f9db60ed805cfbb87a0889bbe87a08873ff78088a4e32cfe53765ee75e289a3311ce36050dcee2fa5e74a1cd7d2d2d2c2691eb88e7bf8dcac882ab322625c09ce88f8c1b5c779f71d9e4fcf95fe54ca9a06bb1da692ce2fb9cf1ca7a3fb4e63311a2b8ac140ee0a6badb52f65758981a14d3ae9a453db2e775fae951f971bde295eaecbee3bdce5a9ee3276fa2e95f84892821143f6d47c973fe0f714387c2e63015307a57f055943c696424471012f475a716fa6d93dc7d83d86c3d8fd53bbabb496afa514924431471659f172e40c9e4a48572e67f072501f5fdae0e5e0e0a1e0a33e95b2290da38af22209254a4f2e8b2494282db92c42e9c865514469c8a50dde0ede01de1340cf4631010768795c4ba947a1b4e55a3f7993da6f46bfbc8c7ee133320f03f3f202f3b231e45a78445a91962f5a5291d1f5954346fdf6da85eb1cf0bf882fa35b8e64f449484667ae73c8a697d126ae73c8fd5191d125ae73c82f0ff397c3ecce010ef31d8fd130fb45bb68f9547609041e9350d467ac4fdda98b4719128faf22a019648c4b796b114d341941069513462a2edfc7cc09a46b5f64fc723c39ed246740c6787d7cef53ada3fefd52e9b99843fb0ea7228071fa5d044838dd780322436e7a2251b5bde0c3bdfd3c9c4b65f7e62ceb35bc53d989cb5dfe78e18b143680df873614f1fb79b760da80f04e735103e441a8469c7642ecebc4ab6bcb157cfb49e5dd80bffdc3e2fe8b8ceb441bf04e650f8b972b7844c582d0cdde4dfc18c8e4151d0f78fcee68073cdedd11bd72df7efa898b972b50311a0ef729a948ee2d45b26f3f2d453c7e9725ded0ff717bb2901822500271aa84d3ef9d10fa7dbb3b2645158d71faba1d3346d849273315b56c2fb66ddbb66d2341863c9f4a2f765771182993355edcdbce1a722881208459628d2c63d27e329e6fce3132cb24a28fc170eda54ccaa44ccaa44cca6212efdc2b89dbd7b6e9e7a7c8bd2221bd1b1a6d425f4756241311ae0829066fedaf5af7573d9065ffdaee23f6958bc7dced28756fea5ee060dc2e6af72fddddddefa621eeb5dbc67539b895acd3f6c5a44d49166e76d5c3edd74dc3fc12e65f68d3af5a958a11ec76d0701a8608c2eb76c4eba974eafe044bdd97563e10ee1eda5f0c4d38ae7c3acdd44d43f08a74744d6f9fa32d0edff4a5ef30c6b987d1283dafc99aea67538bdf2fd995cfca67d55af9ac5c26246dc252ef5ef94015accb2b4798a317d94905454f0c41e1e22bf0375381117f2248280916ce71faf05944b3153ce106e06fb6821ffcc914aee26ff64409c7af02f9cd9e58e19873ac1f7e392e71f4b76da3104221084b0f19b0753b52cf72b186b07eb62e0785f76974e9a9beafe9d4c7d0f1694cd6d05e06e6e5c5898bb5d6fb34772e48ce3daeb5be7623fdee85edaf8fd8af162f0c60447c462a1b82c71823471f6afb05f81472faeaee99cf4977afa1bb3fd43df31d1be86b5a1f01a7af6d1610a77be0bf81d318da862cee59423a8b881603d3b0864096f6f55fcc89817d445ef3f45ff702cdee91e3afd93d72ee593fbcbef84e612fdf691198a7405e0d1a9337b3f56ed060ee31deac2135cf7df7a6cf0f83eeee02cbc5120259f45ff3117965fdf0f829ae47fdd4e338138382f12ef723c47fe96f38bb287d18f4337d13fd8e5e18ef25e2295da3f3932ca3972584d3d7fe6af83a9246973e86e63ea51f87a1b3ce2eddef63b98c6476bf7cc36c1a43ed974d632efb058d512a5c0b6b48855b9f36235923bbe4cdfc1c63c4e7e3169fdf55b145a7ee6b147606c0d34edda7cf6597ac41a9c89bf9d7b4fbcdd845a5d7f09e5d1db7ea77254d5bdd0eee058e734fa9c81a14c8bb8125a108d2109306a1c2e7b386401687592ed610d68f9685a2ea4954cdb759280bb1864015e87e91c96c815f44c07b1e12b0038651465a6b4dca58b2133cb5d67a9491321172cf546427a8180177c8e34665bcb90f47eb2664f83b9447ad79a50f82fa273e279d957214076a78ad1595008e356dcbe1f4bef03ee7b4216f22c710735839ec784028390a1ccb18a1dc4af0377f9d8e8dc37d1fcebc1c00f8b5e17706bf3238d6b8a837c71b17f56b01c758caf8f056922f05b79d8e4df37b63d5e8bc7167c6aa84202b4c0805d5208828288aa027829804190922d2638290970042900e6a00838862501432e8892026468288fcb84b6059220b6d09207048825aeb8c2550f083b684eb87fbae7cb7c08287ea035aa58719f335e041eab45063adb5d65a71906ba4e49898572d11b4840b9618e27d85a2d7b37e37eee38711b2b47fddff5852430d3e32a7c1470c975f838fcbb5e7b08638ee6bda521a7148971f3c3c8e9747007de256bf7e2ac4af5ac6a3f16ee2732ad4783751013c7efffbdfffe552aba77d81a1351cb872585f1c1607be1cd61507d638ac290ebc71584f1c1873584b1c98b3dc56c2c1cda8eaf4953739737cb94e4b1c78e33a1d71600c5fc4b3344b2ef12676393a195f374b9dde707031b2ebae842fe6a9b3bc9137f14a8df9bba6cd6a2dfcc67b84a9d47178d3ae9cc18c52431303466a46260606f5e2f2a2e5944da58ec39b766da55307fca2ac0a150cb51c814c08118960c2c5df8c099e2026041de14a22414841580459e1f08fc07a8b0c9f7382c80921e804cc0920fe664e08e13df30784c3e79ce069220b7fb326aef0aef96b02087cab02a714d96d22d6c4ab09571340348183a559fa2d0d8163e20a7f3326aaf0c7c41426662b04f53021b334c02ef83482f51514c0255c7cb6048f9324f02d64c562fac04915273570f202229c0cf1377312c439fe664e8e387971f8d7898bf7e9244a8175164e7670c2c309fccd943052a2c8023540886111338a213521830d1b2e296cfc20ad6b89eb82c20aa1042720808d1f6e4cccab623c3145469072ca7aefed41ee4f6683cc825c2533496a92e4c351894a13a2265044253f6c90049a3511329bfc609285432649fce61024c380c9d0bdf7de6b6dce319fc5d0e3c2860d283a2d58699f88f920419206367e48827f9057e05044152c569aa0031d2192e84113396822075782ec308300791de8b4b06dfc709930b142effc1865a4b5d62a9468a1a407bcd65a6b7d1df2468509528040a1a2c4090f4a8c98a244c81549284115e30263c98f25449608c941ca053924cb0977e67df21e743e08e89fe6a48f5f79f3027797e132cb9d39e7d401f9d53ce542a772f713f8eb905b6b2f9f48608d1fd6d6c7f3c5882ac98778c2cda5c09f8acb6ec78cc44dc837e6dcf087811590d49031f7dabfc732def0f0386c4403c08ab50dbd444a4a2fa7b7b7533ab6c8e5a7227f5c2752ac9f4c73fcea1f1b86d1004be4e359830762b8fd1a7c5cfe9e0a3e62f87b38b09b123e294b52eebc695a42b8532e3c9fff31fae1408d6b974b1a6ee0e192e229e3b5156a256e31ff1a6b116014591546e4ba640a13200e737c4e08ef0f83c90fde67f0ce29f9c1bb0d19fce4f1e1dd1d5400940509604230b2450e985851d282142429e2888764e3877b69aa3c00bfa738bcdf60a0157185609fd41fe80d6612f9a5cee8e1c4ef5c0f273e278b4f307e3d9c966d26d978b0c85ad2bb11c3e51f7e9797d760efc686fa4be5ddd060feb6de8d1bf356e8ddb0f1098f2ff3f5e8dda8335f7fde0d9a4ac2e3c3f899f46ec88f3cef468c7f2fb75207f8a6fd7d5be9cfc7f76a259abf9c667b1943539e1a607f3128d2211162748f51c0e82e83a074973c789949148717ba06f862008b10214651eafa1677c4e1c1401ac92045f0f8370a217019119e20c1223ff0f834063780e1e1c02431a0c685eb6a17e4f850139ab1dde2f3a7d0c399f1371712f8cdd82f845cfad8bd28e734dd497544d5355153a7e34595ca64ca0f673e97834e187eecb0830ef870b4c797ab2e1bc69ab6c56043deccc75b377ffbd7991e630e7631981e73cf7510c89cc9747ad36f9d8e8d9f36c627d349df87333bdccd1c437edc71dc77f3037b28f7adc56fcc256bb85c3f3fb16f2df9b0242425ff8b23210e4d42420f07fe6791e5f7adc5216d691799d4026f2a66ea471a63f01754b69852d1bb315fbeb88471f97d7bbda0f270e47f162f136cce57dc8fb6e44d7caab98c5181e4c89123db082d6246ba12e634fe8c4bcf7100e66d44e6def4dc9b3ebf8ee434f798d35c89cb98e3be64da7d6f23720f4111d7e112b77b748fbb9cb3911cdb886dc43642a220970216f45051e5f563edd1cf4fac3ffbe8a7e80707180c0683c16030180c0683c16030180c0683c16030180c0683c16030180c06437a6d24868ca87071ed79664341a7171899c7b3a12120ce3d4ac86ce807d06c0a22326fea7eb68cee9d4c8ccc51aa3beaf6d1d151172393df24b37ba09e9b81fef452ccdea87f0ff302f5d2e2f2e2454b4b4b4bcbe9743a6d24a89042c56b0a2c1cf7a5d2f7cb7ff6cffed93f3f3f473f2f2b2ec42e3e5fe9811a4e81ec88a6276f783c79f393721a60172f6edaa2adf8f2e18ed7c27cbd5eaf9795524a29e79c734e4a29a5b5d66aadbdf715f72b4ad9e9d0b1e9b089d844e8fc9c5aedbdb53e8f94e2777261077aaf5a70bf3885691701218410bef062641465b218a39552ca3ae7a4484894c2d7ab4abb8bd84564f84f7321caa7d485ba298fc471c628b44928954ca6687a6cdacfe94ee3f812ca3ce3bc77c7e3a6a75d0b8f9b2890eaf2a7dfe1c5b77ced5231b8fce979b86c1e2fb6bdf577e4bcdfc3e9b465da7b88dcedce3ddcfe75af2339a783ea903a206d3d1cf92da71f2e8170f937cc9d2e4a25fccc389f4eea6aad5c2b97fd39e76b73ae7a563e4232fa24d6221262e523c4563463cd01bf191dd3d88c73bf0ff069593f5165699cb3ff7c1c39a8427caaebee107ed410be408b36152e5f27d2295cbac4b0864002c097ef62c3a6f0e7a47d076a21594e7db16b49d10f6dc91aa5a72e0e63ae0f100bc92e24c89dc6722bf7b84fb1d5849ec88688b4550b68d314a6040816733625404ceac3a42b2140c48094c49cdb8ac582849ec8b6954f4c484a2ce8c9ca675bb5b695cf97baa96dfbf7ee0e5b312b9f228d287621dcda943f406ce1de3eb9d3a2b781e41eda53fcdaeb44bb718f8dac70bbef58964bdb3a926e3a4489a894a8928fe950cc9944540a8e6f52c8ed1f1e9f944564f7e4fa900e49d940322cb2dacbfb4731e76a33288e3815f9f2cda030e2f2e9145a85cb871d6b085401cedf2c57e7c0de974e8a7495304ba59285d65e5bbb4aab5db5563dab1ebbf2a989b54c492b9f1f3c3da6a496cb9465e533644a8a624a7af16e26498aa7d3f6898005a744b2991fcef68d083232a2179eedfb4c1217d8c3a14929a34cbf9b92389d79f59716a7bfe9ee92e4c5251305a74735312e621c207129b99843a5fc1c231f4208219d911184464a298410429db8116d2cb2945476ab4429e59c0f2d2ca6481ec2561e7943dfe2b7dbda21ac1fc872d5670da995f533ed63fdb08648c97249d69047e21448ee519fe62b31271f652c31c74223a498931473ac585ba5cb4650f29cf41f4ec96c85327594bff2c81a3866fa5e432b8cd3bc533fb16bc2311ceb70ec3e87639c622a9c3ed62f473249b797bbd76c5b4ac669ea88d3df3dc8f47b36e2f475e4a6fb0b169cbed6b3516a084e2b0feb873504a99404436eeacd4dee5f4739ee57adefba4eee0ef90bab5af78415f2c45a2bba6aad7a7c562ebadae11c842b6ef75fd15fd1d58aae285c71dc8ace3709c91bfb25fde40deebed324dcda7731e2f6f16ee51ef4a9142d2ec3df2c8a2b1c474ef7ca27e6fc0ea77de57af9e7caca8fddce22531a3e65ef867cfba619d541a0df4d336e5f520ab9979a86bf6e07f7b464f46ed4b7df691941e417042effda7fa9b56dc662dcfea53f1c3e57c365ef460db7af23a7ece1d887fa725165df24b35170fb37b65aad56abd56ab55ab918e1c845d1ad7a3a4abfabdac6755df76ee9deadeb3aeeb98de3ba9b396ef719ee951dbead95cfca67e5b3f2e9a225828b9452f9ba47b73fa9a531ca79add4b62e46968b252476ba077ea57bbfdb4a18ff8dddedb619aae476fa7dee6e1f37edeeceab1293cb1863bc61fc10527b1fc3956be59333fe552bdbc718639b33ce261f939a4cbbd317f2c6b437ed67ae421cefde7178e5b3f2a1d4558a768b2ab32862b3285e33598f69765dd7d1be7dfd1bb6aea3f7b7fb3332826c1ae5becb6fe7b4b37b1fb147e93467f7d97eeee67c9d787aa1f4b6fb994e4dbfd3a9a9fbf9ac21a54edb2e963504aa50a7d5418bd1b27ea2b5d55a1650b431da68adb59605146364b9228b88b5ffa2b516cbb8e13d83650d71e1b288c22325963a8a501457942c7c00fccda2104929bf93dfc9ef6457ef4bfd78473b1d3bfc3e9e3b36d8ee573df2a7ee4125b7f0e9556bca79eb775d1744bdddcfd4dfd1c3ee0e35fb774e6bed9f7669771c87adddb60b777378f3e7bd67dfd3f7543e7d9610caedb3ac1f8df563adb52f63fcebb6a3d46690ac21ac21ac215183738b1560598114d7bcb24251c269f037830205891380bf1994273cf31d1b6e78f2ce2bef9e91b172bd29bf5aaede96bf7f658dd3cb7f2dfffdd33dfdfd16ddd1163799fa29cbddebf6786b3db6db7d681a7dd9037ea5bbc39fefa9dc29c5da2aad642b577dcc710fe18e33db76dd8ed27dfcfe5bb5563eabb7bd8bce6ff5f65897a03cb5408c4d7645a447f7377078efca64b2d8f49d8b75d93df2ee5ffacac5eddc185b0821de104b6b37fb77b37f574478dfaed5717b7c1faf84f078573ea6bbfbcac5b7ff1be7cb8f31da0e3b34ed0e632e77778d77eae5b78f6f6db246f7ef3d5eb283667b8cb149d352840fc716654bc6a9845b2baae884056d304e7ffba15b0f7d3820bc9467dbb66d6b6d3d2e4da3943ee58939dcd3a73f628e8d39f8e9d31e88e3c91af337f9db86b96de3b4be5ca779781c4bf0630c71bdd3d4c4fdd856c443ee46409bd136653382fa05b72445db948d8aaca17dfc0d461413c5f6c4a684ea45e76f1d95d3405b6ff586a5f29ac4b72c1bd23ec186c4630d8f49bce7372f17ab414c3b489eff849ec88688a4144da152c5c8cad115242c495958435c3f3c41e41971c4aa2416049f0cc51c222931472b9a42655ba147f44acc49d57f5c7e7c4d83f5be8735b60d0544b8e66f0645d2aab557aea8a2f4e1c8df993141ee9606d96adf8d4763396eebdbdb1968eb75e49eb2f803ba5db9c3f814e84f0d5ff9ec2214063cfe8b3b085f0216ebc5c362b1582c168b25451211d20fcd5cb39869d5b3923ace89f1ca55c5942aa698551194a2e18599a2d16cfd4d453e09a968d068364208356d763968acb5b6ce994a697ff5d47d035c9b39b4ae054aaab0c2b1b6d9ba7539e2de4f32dcd408a9f2c49cf9925ec9428f28169a14ef771e54e4a767e4a8fba1c8fd240485c790bc0d882a498da24a9e8474648cf2146fbc9b8578926da22c4f42f2b4677946d57b2721222afc343425e6d427b2939493ac71d6e84fa68337ee753bb6d7368db7f94e8d5cef46cd772f835e81b746bf8c2d6b502f031f65236a84823468bc8dcddb6c1b6cbe66a2643d6453471db97cea077584ba82424261c9add2cb960e0b343e7e8ca16b7ea364a8a19853a5c49c13709097a37723c6cba39350cca979f9a72731e75ffe491673f4cb3f0dc59cfdb28583a08e8eeedbdc9d8a81c6db3c0f1a6fb36d5872df069ba771370fd5d3781adb061aafaaf9ab750ca316972721d4d1ce0956d2d0b0405f3e8a48d6a011f3fd7214ea65be4b0e23f330ff640d9b3f09551a9ac7969ba1efbf8ee642686b8c1d1e67a02d1e8385aa63a35391864ec59d8ac1e6693c0f9ba7f1364fe3b5afd1b4d75e86f67a6b1a0d6da36becead6892a293f86de5c0f47765bd32b9a1e512b5125bf4653b81d3d1cf934f486246fe4db68ad3b09fde44e8d665eeb72cca47ae6a97fb2462a7512d2ae3c69dac793108d7e5145f33174dfe1311e773962cc39a7cdbcd6c01a1a9aafba6f80d3bcf818bae5adee2aaefdd6e578a13d0cdde94f4a77da9ad19cee14480c0cea0575843a6a39e99ea712a693106a282b9167b87bca725e0a494694f1e4cdefb837fd0edd9746b024fe08b837bdedbe948a817bd3f3e0deb479745fda3a910391e32fea5d45a63019a342f4defbda16ebf2ca8804fc66749b223e1fcfef5c0d18e2cdfcd7f2ddee18e753f88e92b95c30059c8f31461a7988ecca43642478a3fa9be7a1fa1b9c57a9527855d532fe6aeda2212d74f9fe72147b81d103a305e3070c9ea89a36fa7530fcc0f9141e6f1664585f06d503e065b8791446b084470a8fc28f0067a7e403e0550f801f410a3b2577aaee1800f0aae70100d5a3f0f72fc6f1abee9cde43e4fa1d472965dce111c736608a9c0dac873cf3aabff98e92c1fc0c52cca364a82114114acacb91cc4f9997231878a83ec6538c32a2feb87fc6471b988d9298736d8262ce09ffe2e2f353a787f1fa1573f4cfdf2f63c6cf9723576da97e0747bc79d5f3b87995ea6ff6e681c2dffccdb6e1e651d83b38a2feaa659cf2cb119f28994d4cd6b8f91831bae43434fa753596dc09bafeebf0eb442961fc6b8a55eff068e211551335ffa4fff570a6fd193a9525aae6cbd0a9249dd23a85f4490f67de68cd236f66ad22bff84f7a3778648d9b577d7595e63f92bc995ffaf7722a4ff71dbbaebce9dec3e9beea80c4d3fdec3e6fffba4b5eb35348487cbe6874a74062e84e5f3074cf7c467719dd6d94f4ac044af7a9c48beecf5d747f25f8fc17ba731b940b283182154821e9570a49bf62b298539fc652adb1abc1e214d1bbc19dfebdf8e28b1d4ac667ace1dd67dd6378f7260d756ac6e7cb56a9b66aabfe5458eda9ae2aa412a9af0ac46d2af29337dd26c6e7dbc0e48d0dae83869f5014458e1a763c7edfe2ef29a41aaabff99e6f34176fa04abf780385be0daca62626a656fd8adcae1d14ae56cee5759b8a7cf32a17eef70b7cf72714bd1bdccf9b57edee634a0d8baad9e9d78e927b0a89cf4f21f1b8620ea76b0a4b2a299505c60f182d183d31276eeed5e080fbbdee6be1c3893244d5d440302551076921fd24e6d4cd23aa26571f0c51351f6da25f3a2c8f5bbf1ecefccd44d72f3ebf76f2373d238c32ce52bd7abe07e12c55c8ebe6380c3258b1a93b33228d229bd10dcb5b5cb8ef2aeda2b94d48dec8975da25cf4362a5c4a1d1dde66c4db8c75ea13ec5ece6fd27d2787a9dbd1fdb52ff2933c5ae44dd41deb3d448e2148e2703bfdeb203ce518cfbfe9be019e354e77158fbdd7e598789b11e26d46186d088a7847f74f86316bad8c20248d4919d34167a0b1abb5b29129724350aee0f8e3b83d5988325f47e65f61cb0e206501a24b0c8c19aa14a6ad744e1e1ceb21771ce3b1632ab985a9e02ad8085b8939491d07f1389320b4817dc120f804c6624e50cc118a394f624ef7d1061b950a8bd520d8bde97770c06e776f83e9f3e571fafc79db90ff8403eeee63e24ecfbfba3eb4710fe5d8158298a888c73bbb1d43e4d71eeaee3bbdc3e1d5ee15f6c52b8cc714b2291b29c150e6ec545132a510061e7b8a3cb71419bedc851279befced7770a4aab69fbca1bf8383c6f27cf930a26aaf20f72725aae2ef15e4ae6a4005669021e6c8878187052ef05454dfa89af3003aff906a0ba776c497f1dfa73607e2de3a62c426262323da0409a9364142b24d9a34b94dacd6646b82638450097bc95eb297ec257bc9139bc966b299b8c8389c09a0f6a8144dd666390b15918800000000c315002030140c88c342a14092e48924990f14000d7f984c644c1ccbc34912a3280832cc10831401040000202333333423006fcb0bdbe4cde89be0308a19a927e739b97bcf6275488256787ef44d4e2525e69e96f68dc458cee5e42b89e99877aba153d56ae726fbd4e67a1e9b8e7f22f3ca3ee3826e0ab822c74e2145899beb81776e7f9e281adc9202c3fff47672991d24263139cad8a4a12ff10021356e3f9845b91f6593cba9568ebe3c47add3609559b40da6a5b9614258e5b516d6ac2c3f423fd7e3c2179c9ee35dead6cd975a2f0282f12658094625446eab8c71b850d72b122695fa1dddd2b4261c76d2021bd41dee1244140b1f0633f3015b4f19bd09e5e641e0d6c5f66a2f2e6a64fc2f3c684af451bc3068eae1dd78bef220fcbfee2b953d184485c62a583cb1edbc0e2986a37f537b46b1283eabc2a350082c59b0d8431751330c08094d2812e8a1ed73df209a8f2a290a8d78e09bbd6abc527c79b39fab01364e3e51ecdafda8867c58b137dc931fca9fb5b32fa5967dd521f38521ee6ec8e86445105006a11e2ebdac1f68980e05a4ad5530945260037c53d03f62ea1657b51d7e0b422351070549ad8917a606bb08886a2f9e069dda69f45e7a5811e928aa1d7f988e0362ffc1add00dd1f3ca74d93f0d22e6930f3c733ff0332b80ba00c16dae9252c7d855770663f7b1d8eca0f7d23892a081cc18a2bfc303f70c657405259fb9f7ed9849b815373b1a2201527d6a77c943854a225b0d93904dd63f0cbf2afb403fecd8e61d9a2e80fb600e7da027a31ea0c270949f171034607bc7c4afda6663b08f21674b4cb5d1427388e89735e6dc77324026df5dd7db10c7865bac6c48b551e0a32cc851ae8bfadac74136d07621a2fa9adfa6c435be2198bb02466d341f9d189399b6e4bacdb6ddcca5957965a920a55f17229b8aacfa2d400c107896c625c9eca4d01a5b0076b05446cc89b0cd2e36068e1893d40f99c2b663bc420638b711c6a4bfb505f3b8a50a58f8cf6a829c14c2fa9035579122279bdb76771a5d23f6cad672feb1e70169a14c93f6bfb4528fb6c741e68a1c915562d09a542fdb1783c0fbb03669fcf41c3d94dbe35cd5020d546e1313e6ab581a3d7646f6e9ce586bef1355820e04f16378e71dd0aa8950d384b0c810e08cd8ef75048e75c3c4cc2f30834a8aa58dbcccdc5f1e9c86135b6047f14552c260145487fe5e0aa4a5f6bb97d3e065175513ed3e3c1cd108d0c4a45fd26bec876c404a28965d682909aff45818bda256fad8f75d9199ae8b018a0cad40aaa9bda596d87807aa23e929390737c0bdef48e325643fbcafe1ff2d3cd6986fa083cfc769f5a35a5a8814bb3c823015242a93b2fe534b74fe0170eb86903af43f54ad82bc0dd8ff713fcb605492131eb2fef8da51c147087bda4d01ff17d473bf2c6909d155f6253c23d09e582c347adb66eeaec744525020169b597b780f8c5204a6e1f88dfdb2f522ace82c8000ec15a2f441a63f34e686ca0fdfa4c32c5b24e9b038d2129163275a539e006f0877754d75ba645856c775afb38fa06029a75a7c7661940ab39b5b6346298081a855feb045939cd263d627828b77d95cb25e7a12fa414ca77c9f6d4d92b97c3cec612047c1ff6ca8214f04a6bdc34e7eac33af710cc68b5ecda5f4bfc152f3fc726b5340bc05a52754705a757d9fcf0b2fcf103d55dab83fe2933fde7d225ab7e448ff909a00229ffdaf8c0222d39a04720bc0ad7296cbd6cd6f4d075e1458e896997d570d851b6093423e69f1127130af18442d2aea1667e6006cb409c532e4b7338fae634ddcbda9f277027396d02de9ea137f1d1e1da22c0811c4204ecc882cd90659bb47afb0ed375415f68c71f0422b5d89126451178115ff46a30bf9f30552da7c925222b48892af65fd819825cc61bef889534a61a4a40866d6d93238a2ad665264c633d0f2106ce52e2c6fe4a73df8c945d74f8e599ad8ea86f92796660f7cb48033ce0b8169892993c141efd6ac3e8d9f6710a221dc5708eeb623fb0c3770cd46a91884c87faac85f2cd881b86eaf2aa92590def4d13b98766ad2851f5c9228966b65a384aebc1496fc7f9c0217c9e833e979b39a27b80554affd0b65c1d4f51471f428ebad739013664bed4a190030c46371903df35a9dec8573e34870f24be2ab8c2e1b6a2f37b32a2ef751faa27c08a78c55cbab1d7a8476719064b13125dcf39d592f22d8c909eedb12d69b1480eeb96751ec44670f0966affac3318eb5bbc5cec40cdc8f2cf6cc433943692dc12a080a4b06fafbfe3c4f4cc0642d5593c199efe534936d9e2c1b8216e85d74600f35540868f474586ab29518116caa5d096973dbcc9f7a6f7e29354d84ed1638cab582e6b3e515937f843a42c07443281c74843e6164fdb8b3b738480458d5ac95fe8567fe74d109ec81932464de96203a8e362e04f43869013c0ca0e9fb325908d9a39d0f1faf2c7edc785878e1468d1993fc823824ac557646ef3c751ddf3153a7f2734ef591e6f0ee16a380874eb22eeb58449ef636cfc0096454dd98df24de76280770ca96438600c7db40860ae0e486d594ea9c4391dc2e5c91011a54ded0a74d04ec95472bb2cb4677ec6f0153eb25f669e821d6cbfd0208c74992db9ceb4aeb4543c22bbbdc53c4c1395fa9928bb86f7c13dde6133b4724b36ba26381ea124ec566f15c36f25e572678a95944bffb8d189cd6adef77d2e0402537d0336ec2adb608cba9c5265da7d777a8390a3120221991ebe565cb27a06bd6f1de494148c49b521c2440e6736b57c471e1bc40dc230368b00a650d5ad6ceaf13913a8a052f46c9ba2eb56ed2f9552a5b322473bfa73bd556fcd03fa660eddc586fcb7ad0653076cf1a5fc5c1696868bf2a1c85685906f8a44240fda5c86a518fbd442836ca8350bff220d17fe856a5cfb175aac7f0dc5840efc89e545b57bd90680ba6fc8a7d6c946702397b5980c43e1f112bd553eac2614448907011be6c2fa5c3e7d116f63827db9641fd4aaeb07ffb5de268bd88d0e72185a6203b587d39a55ecbd05c7d3350ca9ad5cd218474fc181deaa5762062068f7f20d64f9b2e2ddbe32ccb2b47946a4522e1db96dfb2219965c077b19250330269c975148f359425d75174196cfa29297242e5aa62d30eb2c2a8f23c81b22f5f21b526d652c05977048e17576f8e7796f8e1729651049ef8c670c3523db5c3814bec7df2372d9013eea55dd9e5801556c140e47ac15879e3a931879602f101c263716b8887a9be920bf84345add2ffd88356a042567ec89cb6e4e0a455a7c1aaa73cb7dee320f76e917718bdb7adc7a2a6898a540f8ba218c702ae821293988f0d85ad8dcac856ce29284931818a8d82f4e75ed7b8ef88862a1cd83174fb37bd30b0cb14b2f3fa324d7a8632130fc06252650bf69871d9ad7819850bfaa2a3f172f95d8da280da49c317e14b68b64cdfd226200a4fac6b902c0eb101330319a3d2db0ef26fbf5825aa20251ae0a6debbd1d7767f04662e42cc0f251f3b3219c956f7b10204524cd654b47d0c3808527d082060a483f0bfd5968e6a06c911365cd755839451162f253c8c0554bc6a2b8cdcb690eb8620da054726e3750866f9922062a8ce7a6b4def6334bd866307b88c7a0b2c67e10afe6190a3899d93af1ab1d1914e984fb51ce1025a416e53d17751a570fcef4d813bc7de52e4cd77f12471d2a15d41292c0685fbe68a4af32f9450ff9a308b7c04993b4a1d8405e904346cfbacbfceab7a869c4a0f05086726f73954dcb202adffca0457b0bfccf367eda246c5afa91e710b1e2b13d7a4e8cccab66545778e972df4e18bd02254a190b0632af8649a7597e8a15a292b4c92b1f82113e8254a6e1bbc46507fcafd43910dc73327cdd460d9fc329eb30a8b3f3919a31a8049b84208ae58af7d045788fb17d41a0c62a88a76b0d90b2deefc91976a22a546b11c8f374dd1c02f82c8d9a5ab3c4c9cc9d294bc4064d965e983362d2885ad6b1679a0034c98554326f1c1dc9d3a4ded46d894c584b82a9af1f9cd37a6331023168d7932337a8f8599fa32fb710dcb319147bbd660dcbccc4dce1b77563c75d254c310871ab2135581e697c9f96deed90f342086bf488f4c21f08e9c4478c2633cde5fc791f9d42f8f727dc57686434664f87941d2f6165ba2ce65d2fb2cdb26d4dc240093f091ca386e9b99efbac27a73c791d646ea455a99df6a5d04348061262f70bf058f0a9432b656d358e01a02e17e90a9e642ee0e8b2fa061f470e8975212d94d46763346a359c6b0582b6d0c64994e4dc6316e2727a00e1a56eb7ac4e80dfa466ef63f09cd0321e22219a7321037871818e1b9b47fa20578c82712ff6345e8b8859b24e33c9a217d17d9e2182f4e7f54e891a007ee1713181bb876e26ae64c184845704cc3bd036227da0fe50f000c9360c85f38a7f048f06a5f5dbf42d8c32ff5896401e6a9ca01c37856e121880e3f774ace0d36402a244c70939f59cefdf3a4b35953036812590f97cbe3d5649de7523a918e81ab3a9557ded5be2a067a1a6bbfb0fd5756025f87e84efbdb363b06220a8b79e15216ca32f56c8671aad9f34c2fcf82de7f418fa1d025c110d13404ae309773232d40e7f24969056a844fa04304b93d721386936bafb35580e4ba86ace5b40a5cc8091d4c6b1d959a5a38b7ccb8573e695d266370a19222680606120eb94feaf9358597abe9404cb26e2842edf8fd111b1005481fd1049cd404496e3a2f58a5cb2c96dbe26c360680366fac80537bb5a8a4a87eff750c604c344f0b50ca673a6deb4a3273dc11fef3372af80e2d756d3d5f50a30805128b7990e6be148c9696733a99bd0596d7fb6e7c4d24f1d282888ba4851d426203e21e4f72f07c3a20b5c1c8ff734c5298c88f7c91b3f0a852b3eefbf1a731435e5af0cb745a8d7283412f04b9f42604c1f81cff95f10d296ea4ed097ac2b663917bfa61109b7fbe72af95ccd4aa78e8b3906380390e52ec598dd22044215bc8375a65803991c6a20444bef3fb6a8a05a993d62aeb79084ce2a15e6757bc9375b5b31d7b2604ae8cd49392bffacb7c3e8c187fe1fde755b603bc0da87c0e2aed3651dd4e88ae0ef07d36e7cadaeafcd4a8843302de7aa012d695cf790d4c7350f5efb9ab749df194d0782f7842597320078013f0d4dd28ddfacd8706b78daabcf4ed6d885759e5b78957d2bca97ef2719668bfef3a9c90a7297bd0aa6aec0242898a615ed68d25b4e46cbfca33bf501f20628d7206b3ea994f04a8b199f4e7f7dfff7bb26b2f2c920f413f17cfd313de6ee9a0ef11c8877e3c3afdc896961e6e66d6490d68f6daf72bf003069cab5615a27a6698325c34ce5bb27c0589c88973065776baf264063095a20d079f0ca2e6b960cb0bf1bd9c30ea0bc06721d17df6e6824d1079ea263180c1084e02098b3b04a65d4822f9da7b9ec0e3067ed06fbe77522773d475a279c3cacbbbc6490a8d79f54ab335dace2c4e22115a0c8bf200b8705ec1ee85a92e572853886602de554cca32a8af521177fce278810d44c475c988b0a69c15138e1dfd82ebdfa62208d6993ae5fd842cf8702d5b87ade7b28ca027409d48e544f7e7337780f2fdfafa715de81554b1dca2c8ab26e2b14ef3509ed9c2c4d4811083202d407ffef085661e0ea5bcb6d03f973a101255240bb28c28853079ea00d20046aa250a0b5a3494de78b4e693e76dd1c9604bb784156d2b35eee9f93f84b4ec4ceebb67f4439c865f6b83ae5f845e81c5e742653f9d38b55937d614a761c1fd65a01a0cb4a2f2f8b0d2b08fb6011818f451adec2cc93d0a0b0f7ca6413bc6a1647befd90342e5904f61434a63872285cfd4a9644ef4969fa4d21515a020c75167123b277423b463632570b004d8bfa0ce5776292b2f2df262428e640969fd957688ed2df415419564923a366a25f925df0cfef1a4b7589cec4ea4d30f579861a10ef1832ad0c56b101b522967fd8228066917ec675c19179b374c71188ec29ae459f8ff5ddfedb3e3de91592cb2ddc398b62e16c32bb3889e6105a44067f3ce76a8f6cd497f5d742450d46ccd1f6199a6a34b8a7dfe060f3328476ae3ea74668643d83547a15ee47e58d8ef8a6ecc3bfd6c23a11026b84d5e908486bed26b0ba47407a750307bc83495ac57dda3156a2a143b37263d9594f68deb60a19b9c61b6144262a8f45c16c4e19864541c83f17e2af477a162a4f0287f5b2a7203e8b193b68cbbf222a9cd81710db8614c7d983084530da84547c0d06c7884938da3cc5c39f9e0903bf456c111153a698d5a5a47f986cde16abaa69a6e315f1879ca0c6099edbd614ae3da82ae3918e964a539838e78cb6c1499500aa431b2511cf8564c96226c135764e27ea4465272d7a3137e434b2916889a32b321c341f09888d2dca6a6d2530292d17875d8e3ba4c5de0b4cdd49f77ce96ccd7ee4ce20ff61b4c7941c05f49577a2b0cc17e0cd06beebcca3c7bef0f71dfd9adbda256609b4d58d814a0caa25aa51ce0022a4889ce4f0a9b00800150523084a6d9c84fb80222001856539ac6ba3e3179d0d7bfe033a541ef736acf0e8c20ccc40bb42e66d918005bd45769ed766414721deda63b7854050fbf226f752d7a6476d5646429ebf8ead50c066b6feeb24ae330600fbe8a2dbfa5199d84588e7cb3cc29d8e19c6077d17b97532016832ac960c15dbbd0b39dc942d1cf19932283782be7906e0b0e3aa3d40a66b001aadaca63c222e40f06db83b8e90f8110f7e49149fd44f5c679146dfee1267c9e9a07a8d1941e7cdee2a5b7661dc128a0aaba2d271cb2892db31dc84919fa587b4b5433a45baf09c4a1028af991fd876ef737456347f4d1acece8574120062e5d98d4d1f6d06c27c5f929bf72082f1041963adb0049aade806067d6cfc5e035c18abda049027fb4ec6ce05189434bce6d592ec4e01291aa0990bf45ef2f7fe11c99b4af990529c033ab71ef33ba263bd5c80477e6c1b46486c17e030d35e7ff355d6850be790ecdd730322aa625c801acaa41325302023d51ca728f8c8c47fef501710bb0187a45bdb504b512d838b68015aed9ace1db2a09f50d10c4fd911ed896d4efc38bed0ac04a6768d95a856ca7a101a0f2764926d78f8bf6f2dfc6ccb896b08b1f185b7ebff4793150f030aeb3c8f4df1ed8ceb4b29797f8e19ed0d891dd3686bbd7dc6d8404aeecbedbc745ed7bbda5d794f335ee01a4f7badde2788ecd3587fc5ab51a02f5f2ab2bd5578702e74239cfaf4a7490f58b95e10668bd2f83e64cabb0f9f6295666bd59f7be5e2e73ea54ccf84b0e8133cfaf7e429a05c6e83ee1f3ab62ea571d13f654ec44a426d04efddaa68a6dd6bf168fc2109353bf86f2bfeb6bf8042f02c0aaca9016f70522c2df507a853978df55188a708050f2feedd81541187b0bfac22d9a7489a4b59e77d87ec5cdd2fb251fa0f84b7cbacd5f424f0b400292091853cb5485861cb8b1efb0c6cecc7b14a7714a8765b8cb13d7b8c7618db956574d96f40403b6959be2b2fc22fc7887372cc26d7c55ca4c3e2cfdbadcf1288b21b0d421fae8162066a9e3d1402b4070298711812b80f8b29de98a5214d1bd4591dc5334d7c5e060bbef246fd8f990cf1bb2433baa60d1f7cd00c265a71fc44f4ce419b780251aaa71a41d15a121fc2456aa2e7830ce83c5c27fd9d71d685fbbeeb81ab780331ae633e1a80c9c46dc8b1896a80ffb024aa3334616c83aaa1f81897cf95d46131c15d06a36ab1603ae0d69dbc0914d39c7aa358da5e19bfc4bd09ffe549e570a13a246505a80537e583ac52aa4f66d191993131c55cc3e3a115d2682660ee7ca123d7af2a296a70ed06bcfb57ce1ac6764fe7ac9f2efc757ba8d66b64605d559c03935c15394ed54c33d70dba65b6a58919490a17f639d240a177f7b17820680d04d5da8ec22e40a690d879526c733bf704b7df339ba51676a56746855ec16287cafc2d100ea9cca7d7c96338897ed90b22da680584d5137b97e5b0500c4f9f541a0a847b3bf9181095f26b59d680b20b82c9dc00bf3c6cf8287b07a119a8188e594d641bc5ca718b4a1621e25b830ad005b18d1d53c50a1b0e5a03f783a3b095bef2933c2d69d6505c83a49a78d0b88f5728aebb99b962ed8566383697ad2a79908e7311d931fd6783eaa5755d8d70788614cbb35452cea01ab6d6c11e9fd883aaa33bce07a68c5495badc08b5d00e169e9c5d824a25a9d1202c50075fb54410e7a1d491a05f97174bb831c18726e0fe9b04eeedd40d2f8f65bc5666004fa585a9ca35eda38afcf1674f4183c628b6fd05d53e513a6752a5050ffd4b280f6369850959224b2493742adb61d7e4fdd70fb406273a4b3bdf425a21fa464662cdbb9f69afb30dff4068e7b7dfc6a2e38d150e156948413dbda1018ad7d5abecb581d6ff133a1e1f10a82963995086472edf8215cb49f162e197c01d59fe0a07988abe5b92d8b46c41e311db0ac61313492dcb518510bed22740cef767f2d0b5e6884a1a3e3d03d0dda78b1394a0b4d2d802b3d0b2f456802a27a079cfc273328b4f114136e6a096859e6633e74e7f24c826277a91efeed529c98d74349554a62498a3f788ebc226c72bce8b7386c3b8a8928243621d25ba54ef6e645e0bc115c816b93eb00f80ca3416f23bebcb90e48807780e624230bf8f704b763949e5cecb8101e2c5a62ec9d891a06bfe8175cba764e41383351e6e4056d02e21c248caf65a66188e2e2ed103c149eebbcb599ddfdc9474b43ddef4b880864319e3a1b10c2c85fa31f2210fd5e3e0790b62221a666c997e5913db6dee2c48cc43f339ae17b199a764184eb806a846227379f2937be6f09908481143cac85447c5b7d32e347e21d24519a37b669d78f62d2865c57aecef9376e6fed4a7057b075507be88cb5091aea5315292027f7a8bffbb861e2b5a727527af436fbd1e8233abc8aecef389f755791f27e8c5b6427767fc6ba4ef52714142eca1bce926856763f16f0fce9b46d27674ad02c22806610a59abef07882f14d1a987c9c8ce61eb74f77e2273ec6f008492b9293952926c21eea0849759e676ca1bf77ca16cd10ba1cde095d97f28bd39be379505d56455373d9bec98abbb42e003a1d5bb1b80c99b78d9441a5afe8528dd9c1b496b1892f557267cae02da012b32905ef69894e24553b98bff01280841899f17dd4a6a610792f760111e16b945ca90929c190c6e5eca0bebacab4022a1a59c8239abb1ef509b86d35d082a5305d7e244cb7acdd3e003252e6cfd665a6d3804e2a6702f0b7f735a156803901097435c49e3367c1b5ed08d959cc57b68cf2a9c4fb9e5053d2923278e51e6e0a9a8e99a4a5662a8fbc335accea24e8fcc5a9b82e3118c8a265447d02efa8614745a694c1029f386b8f36f650b7bc0b2e68af76515e52498810035872e385b9109a83bc736ec4442bc0c28b702d2810123840bf13faff50bd3dadc238afdf52ff827a46ba809d55b1c2b7ec811a49d3b7cc9790194ab5a5cbf4e46c35ba56f01d58ea0d51bb1f722c811649a740991a02203aa88bac5586ba8ba15a55d4c1e1febd59c7d89398684a34b11f92fc8f9fcb5f87308cf399408ae105f27dba749960055b6a86550c250ff2f4e63f98af1064c530da4c0240c5c8065a264e087dc4e736c9d0e6ea10e3fb2458802eac443573bc7b9b7ced16a971f57279eb5a4950614fbd265634ce7948e1a7100406d73c551e13b7c26020b70abb6f904e1d4793a6a4100c3434525b826dd56760a07173045bd3179ce6d8f6e5f9b10d7b90da5a246f615ab361125d31e8e2163e7f970434d4956c41055ae4aaa8b4f3539f3d1e6200ea5fdfddde9cb9c51ab1f78dc9719a0d24bb8c20e2f2fb8de9a20405fc93400b2e355118e425657a1268832e9e26bbffcf931cc5a4f2ed26ccd14ad7e1c5c9204fe1db25489932b3911a8c40abb2d8c774d4570e3d83244176ed03b080d471ca028b84c8a068e50a9bfb02b4b58e39f97708a2c0016674941a5b7402242d4a0863a0e1843d40647c449f92d25900052d56a332a5057720abc760edcf602e9012580911ba487765381cd350cc5dd2c97b393cc24b4c355a09aed8bbf8f8a2ed93e2c615ff0a52636921aafcd58ba381e433e0f9723419cb6a3fa455ab6efc07d0b798325115594f17133a4b0ec64088c10a93d224f81ab0eb72f4e6041941494ce3f501dd2f4ec234dce322c5e0a364cf148ac2556bf6bbbde64941a3e4fcf94764122e3b2bac890fc508a6456b587cfe71bc83919ad568893b4e7997ef3d87984a32729565a0f8f79af00fff7281d979da2bd651293acb2134e38d5fc2816b7d24bfb878e4ec8b299f02bf80bf68ea151041024f60e9124ceb51d06b01eed1bdbfb72003833b8a796116297e5dc47139bbaffeff12214c380113f17c92936084fb7ce610c34fa2b65b1093a6019ce9370d10247419e70cf4911e0e30248bb3f2f89633b8bfe282503f6245bddd0e5a046bad427b6013885df8bdc542cc647de37152d2808d363a2fa6d937f3ecbe717604cc52b6c4e3e99407c2fb9d5949600c048a87e30864a189d46a8ce51f99451be63ba1d69f78478b05bc004c7cf2f5f0386a7720a82ce452ee8ca7f6bf8b6e62462da95e965ac32bacf88acfcb23bea1a7d29c5ff6d1850df3e38ada9dce725ad10ade4a8b6a08f8ed569f30acd65e9d9bea29a17a6367820f3f101786101f3f03e8e76eb995d30f75474bd30f43dc8e56597db9e9733b02bf08a104a5c721c9cd78930b4d31df24ad0d477d42833153528bc3115c996aa4b7f28f0874e613e76856276a79782e7c09026d6f02993da1bbabdc0f3a4973ba6ee4a2106573cc36b5f21106d65a91a95e1ad0c639daa6378f905e354976289ab204334c050968f64fcdb268356d4cf0b2d307f90fb4e51b837a8e4f7e2f26803123e88ad3f40685186fb0217519cdbd770649a46c3d56d011e532b81047e221156c5d81fb7e85e96a5644aa81d6582ab69c9ff9c3164157b3e23a33b29037f0b68257fbd94dfbe197c68f197ec1accbe3e818267a9f935e905593b009a9588b4067c5a0b3ecc6a4c6ec0cfda57119d4b2b2c792f3d3072e635d0e9df715d8ab2fc9deabc15fa5ef2130283cfc179cee84d3dca207c98b0bbce45b3c6d453c4adfabc6e0b041349aa155686f2995be27324cbe9ad8e8689320205ad263eabf7ea7d2f761149786d19923f8576df465890e01ad7b6ec711e487b7830fd3b7d0c6eca8f9ab76a37829610f551eee49dd5f0c6c2d45d16764a5ccc3ae6ba5db421da9f623360decd26981a7ced755e3a53695f6b7bb5a816f9da29608c2b2281c1cdd3c2f12412d2257dd1dabc0e5347adf76832192c81348bf4c077518e82482c85f014964ea2adbb55e7993cb97a5c391a9280d3b5b774c4a349eb73f0972d92d836e248016884ceb3b92520fc0b8e99d067a3dfd79c4a707def4b55598dda391029dbf7aec8d028451d99863e7e2c73878185d5bda69413a32f13036047abbd659774db1fba83dd562e4bd9d9c5247724a6d1cb7710c3f586194bc93b57a635901da020b24c14f746d5fec9cb8ee5b0abfa1196e458b65fb4dc53cfc1bc781e6387d151f89793c6178bf6fede1f05fd1201a2a0d661144e9a57668af76b6f2a139a3374ca2795dfd26a2d6793a25478944146642d0f3a65b3f53dcaf0cf644b430506a0a2a3610c745eaa08257a492c3cd9f0cfd3e4af9989377e7aa7e415a88e9360327fa23c55c8f4fae1ae7376024228b44298c91c718ccc0439876154ecb7a9c1ca346c25a09966f9eef4a560dfca620665b816bf7d1fb91c8b23cd3b04a4152088cc658167e80c0674fa96849abb33e6d983e0358fb6e40ee800f7c011b9013bfc21f333033f23b8067a2bfa586e9eb2c3291301db278710a13f8d4d389b4e70ed3baf7c5b8ec13390f9da72b64bd265cf60b05d9d85b909eced1abfafde2b83f32b05b124a0ab2fda7eb29f29b3623f4d48273f7f71dd93aa70f66b974dc1ccb23b29e14d51113fafb90e3903a160ee122316f2ac7fdb395af1b1c99f51162e8cfca32b22c41fa472a9806233d8df36191e461d0da78961584de44c226216844f457011cdf064a35c72c5112b2c34864cc34ccf14f681ba0094c84fa6d50a27a2febb0ca0e12927177405f8dab41639298bf4fe9f591a4abbdf443635b0ec38a809ce2ea5f790d9c7460452dcdebe8b1381c07d2d4fd09665a38eda8e82bcae294abd1bc1e372ba408469e0617be81257bd6ac9c489da5e6fbdfd0b3448f2477684d00a5b7bbc636a67e58a00345ba1448ac23b4dc9edcf6288e770221917685a112f8eae2028e7691233e4519e2ef1e4d3e63874f94091e4ef67411882d9334e85ebb7f4648a007b3f1fd40750f8d38807d1bcb264e31df61e338fd0d0c35c11b588b891733ea9e369fdc8728cd957c12367384a77a0b8a92a1a182bb7f5ff91266c938813c80e801a2691ceae399edcf0b0a4643e4786645d9751c09eaa55da64f60532c204a86cef6ab9a3a833ac81a6e4994c983ded95570d18c6c4b3965666812cc00f5a2dca2d0e577c10ac4975bdafb961c836fa165227a643e3a322150535c508bdc13d08740286cc7185b9e4896da35cabcb17e404b10a5a7c9b426d12dc70134fc5bb9f7b55e3f2bde0dd42f1df5830755d770eaecb9ebcf43420378016b507bb6883de233f82a1960271e563ea014788547496ef596ad1cceaf3b2837802d51a1535e2696fceb1e73ef5799966d9905a68dd939a99115d393f48c8d87d3f496f0e1d8c210fad8ee5693ab38c1b72889ee7a33dbba339865f9631a56437259b100888a294bc22cfb38aa24a72c1ee50ebb56267763a2056c5f138a169649e75a9e51fe24f37c7e11b406381e3c57758d8c1f48eb45b30a9ca2098dbd488169b6626fa4c3af3c2373f013980098ad110cdbc55392847846bfae6eb806fb1852aacaa6d6773a86c6615f966508b14e6eaa64d1588f387ea44a96486019f02eaacb8c57f7b6e6c71f7c0121236f36c4919b5a280ef391bb07d54af52d1955b2108b9fa63d32399c4aa65e1293edc5101d93c3473443cd20444825d1957b031c0a139b61e6640249cebb3f5c56ac52478cae0f7f4a4d60d40b3a88ad240358b6e25448222d3bbb7623d60f59ef57b59e2089113e7e552efc45cc1c02c7c070124df887164824dc301bbae0ac35a33d61c9a7ccb1fa0de31397e4b8284abf12e426952ea3b31512e2bc222ed9fddcb19b04d0273fccc8b1cb14203af2a681c88c1d22ef425d37b7743c5b724839c3b280c8f84e96a07cb4f2fc2443bf3261a2055e4d1c90920c7440ecda44f85940c36bb79238f7a582b8077f047c57b486b82f13a2f069a855def2a8e1db0c6bb476647d0ab30b172a304577a0253ffa84e8db9496fb80c8b751d74ba35e006e1704ded8923d8a6ccf8660cb3d77461a2a2f3d88a9491b6be6a6f18a55d1ea69ce35e651183660edc617458618e01da55276ad4875b8c788ec20a240642c496b6637a1791719516441316fae9be3664be4af517c59112205f5045c663a20e5e7fb006bb411590a95e929d1bf0d4154bc4854186d5ad129e157cb443e371421fc6a07d93145394c56c776660a163eec01154e4bb2bd866b1a86f7042d0772c2de74546d887f579a444662f013ad63e51d23259c0f62f9f368292c52bbcd979434dd912f86b39923007ecd96cc4af136892c13d324b26ce7d1f9681c50f832d36259763da59ffb18085b68bdfecaf2f84fb9104c9c19467f7c3266ca43bee94a57d84ec909907612cd19c4be89c951b8f4240b0ea75a46b1dd48ef931d762ec84ba5d8ea3203acd2336b09b5a80556128a58b7caad426ec5231c960a39b04147a0842d897948eb9e0b9aae548c48f0ed9ecbca5a14730866f97cd66d43460bed96eb876f36f0f46811181388a79ca5c3f353145b328f90c01168ccd6a69b735833d8ad3415440efe3f46899ad892f9c1b7c7bf3c6e1b715997130e989dbf20321e51a65f41acdc6e4ec4998a452e0c6da1d3702ad8d7e0b87c9e95ddbf9dc8d23d7853fc70c1c921df9d3636c9470f6b93ab713e21aef53deaddbe5ae9bb42eeb623a90e88d0a88873422d4838a22ed99470ff2297aee7d0cb893b5a7c8c417db987cfd542bdf4b88baca97c8e148963354c89b4214bed814d8de1d4113de6cda6334d8f5c1e45d7a27145b39c5c2957943f591e9df169285f555c905410027de53994357c0fa1143726b588bd79f3a30c0377dc98e136a784b1e5da4dd2b9ee18b88bcfff012d944835bd4d820aae0893b2a69acda5e3f116c4706014b62c1cfb8ed8f5688423db8a01ba4ccf405d7789e154e08581d6631fb8b8855e96073d90e8dcc96c4c7af2a4b515f9f67c344ff5760d4976e6a9015f99a4e4812c762f627f4016a38c17250c741bb56dd2044aefd47a45a5bd25c97e4967f57797d1331bbaa06c06c64fdd65a8e4b53f90b8504142dd5d162ac010bfa8e2f52605455488b1d5a7528528f003874947c854305a61dac6e0f83dcb4fadba7bec3ee160ff2ec90749566d3b694af3cb084916b2c8242c4212b5879490acc406e260783a32f4d7b9cc226ef10457b4c9985fcfaa07c26390f210f84c4a48b6d40b68528047f2882424af084fba85bf7c87cb08c9fcd831881f24ab5b125feb2428505257744a670ac833c0bb80c95a92c1f258e4c63a65ad9c49a421790e75918fac813137b9ac150c1d1373b051e58ca9b415030324d6debf5c4fde501c75b7b37b3f92a51a0059a4d48ae06822709aa804a9301a9c757803b1784e160332dc8c3fb6f5c567a0dcfd2a96aa17c57ec02a284e71c3e76f8832da23ce49d47edb2877cbf15c936d3d9a67728e78053ebae9353306f2ebf2b7f04e0573e4a266cb411bd4b8928c8aa906dba5a02a8b1067fdcda055d78742d12277f3dea62d8227823c74dd048c4cd02ebefcc35ab5de169c00290ce45ee18f0de37c46bafd55aa9ca25491c03ecb1ab034c274f40d6a6ae4e1c52c2b83ecaf6a6a1ca5ab920edd9119b06775096ad81c17492db0f8111ae694710c5eecda24405d50e6b1dc30c6cae8e7459e433af2313adcdde6aeb88bebea3c0bab25f3b2cfdaa267ae0258bf8c48e97c8f8ed6be848f678ac332c7d57962afa5bb0248c5dc9185548d565f2d8a30afb8d6f0f844e22e5be3b296c113c00756a2c40ce91886012a002d083cd6ac7c3985e062fc06c56d7a370fb103f890d8708b225918677d182511810365c045386bf4bd63cdd6073b2457d91c32f6d5b20c23c69125993e18d1384c44bbfd24105dd1439bb0f4ea83cdaf72b085a0445e983a37d91c1b3abc70e8e22997f5ea562b3adaa83770bb5940b808f646bd2a5a3c0ffaa5155eea3642af3c5cd545cace9629c836fc106b2f5a0e3e305813b85f99ebc091612f399620fc29a8ad4caf8753475dee69b1793d44c54c17b32ad6bd563cdb51513905d9622b850b13abeff32058bc3d0c7e2113b8f932297b13fd0512a4c0a35b5420b37c5e8e8676a444ff473cb7a61f75595f2c4d71eb8beb236b74a8abcf71ee03ea91139aeae2e0ea8c3d404cbe6c64a3ba93ca8e46e8ae87c393a51fc7c608c0410f60f1ea46c9889d47f43e6fb67d5eec80bff7c245e813e2f3cacb1a9c154a408b5bbc6b88d63c0ef11572c39f5ab8fcf0fc168c65589ba5c89e4cd8d866033c94d44a116eb61a8dbee688a3c93588707e4b3ebe6dba1fc8d334a41cf4b125a40b3244de139dada1b7b84215c3eaee96084e0f09e5d5de105a3bc4792df1b8aba187da4f62a0f33ec125c7918613fa2e79c188f648d58e34043be467fd92975797f80f65aeefc3569e1e62b94a065b0818d332deca660c29abe45bda5ac53779dc96c54ecd11b37395773b8b391bcbea5eb9b8735b36acab6e62d3932a6b709d29f4eafa14a140532c574059595567b5e6306721bbcc8757513898618c770ae1bdbad69d34343b2efdd5f38a2b8d5b781cf6deef0c8e8513a2529d3fbafe1b6ad189784b721ba7d1fb1e45a7dee90f97f3fa1124e25d356eb3e5e2234c3c88788987877849c90974fc66c1a0286118e32823c121f3bac783fd63f68b0e8457ac49e6740af26598f9e86c5ace17624306bceef11fc1dcf7908b2f5991524ab4fbb74bdab334db9b93814065d6f6d843c651570e692abfe6c43571942f4a3942475c8f5434097d61639a0c2b6d4ce7aae6e0417834b413f148af17719098eed88d38ba5b9a2571014fa213f625be53a6bf714298c23ca1fb6d29900f49e37b4c372a40aa92652b0b2a7397811d78336a496eeed57dba1d1054aa06bf2565f003cf2394348faeb9ef60871b285d2c904fcd21669f1b8add9173adfb0ae2c8b96e417670df5306917f2af8f4ea321dd44d9a4086171ae824c2351d38a8aeea36cef649789e4ff33a98b59b2b6baf73ae3a654e882e9935dd84835823e0dd9a6bac04889a04e2ba807835cdd18f865148b10d6099d5e130b1cf66f8e1ca863f7af6c7b40f13bd79984022911bb3bc76f2c821081d6ab3434b159bcf036d98cc66fb76ea10ccce5083d3fa3de59dfe17f1f7f2fafeb2c86b7df228fcc85c150d9ee15674d05d053e93ae87cf3179030bbe3bb1fbc42ef0260ffa05eaf1c958fa27834bf58f6c4306d6e71af09151acc3ccb6f7fc93158a7690c90ecda2cc6d27e1bac7abf3cb57f074ce451453264c34f5e5f08a78b375f12b4197fd215b8c2251dff15a7ad807ec99960a93a3488cfdbcefd9cfc2f11468def2caed9ca1c7caeb82ff95d8a0cf239fba544f5eefb6c0738244237b7e8db6bd9bacd002b57fc2371e38c56a5aaa2a948022c84610b6e53c01563716abe81a9d714956066d2d28b55941274386fc2d7f657759addaa16eb9739e8eec06183cc4c7fdaf1498a389cd6791a3596ec0b1cedc4c7d50ac6d738acff0271c80344d07ca4b516135d001b32567d7bcf87b6b00da0bd2a336c830ae3e93e0256b854b6258f0cb122bdf405be8ca8f17aeae7cbf7312d7d85f6d9a4ea250670755b3cefe441ed12a019515317b9873e09df63322b655a3e391acaa02daf662f5e648e5fe5dc41e774aeebbf9dc02a42450ca12fabe29d028f582c6ccbaa865cb728e4e927550b10bee3b3383ffa4c1d02b99f0d0ab2ff3b9289f7766884af4f4f4c8c71ad07f8fb308ca949b1367024eb595d8f3a026c6860b504550906d22c890e8a3d3b0f09c43115504a3c540dd806f36a01ddfe9335c70fba71bdafad342828e99212ab95966a29edf8fd4840e95ec253e83c929b8994f3380b72bc2aff8383b94653bd32a861c25d89541c174f3c76c2d873f81a6f3cbfe76770d5c4b28732e2583041cd01274ea1f30dab389ee90114902828360c4f8f750faa186e7e406c5acedbbed88b9d5a318b37b860fb5404ddf2d5a1474b862d5c9d21e77a9a495b0c5030ed38c93a629c6a7252d5c4a9dd637806976d95b67b3c544ae2e43208e382d4246b03d8dd5a7a9e9b1a561e258693471bc34983eeeb44d3526ad268d9b5653c649abe9395103878b09980d1b041a79f5a588e9c4eadaaf7909bb7ab56b64d9a1b2d1f043eb0e91460092a9889cac8e692051817a2146ba7dc6e5eff81e013f6a7e804a840f279a9942141eccf834399feee805cf1e6ddf4a4050f2412b7784633330ba01b2a42c1fbe60cad4711d551924be5c17c5324df61da6f9df124c901dde3568e8345f1251b121c57d999851937e95fd86217384a5a76f01a0a94092d913d48824193f80076050fa1c66255014b32463f72641f9f606b131a1857f1a244432d7761c23aea3ac4093209f3e5cf3a0d2d5a035f40895edeca966c43f4580c04da2288c9cb1b9d0c61624b106f7be97ca8b1065523cc3ae3a5cbfa8f61987a66a1f5d32f0c0012f4654e6269220d154672f4728659b39180066c674c694fd45ac0acc3587a07e48cb23d490201e591bce03f864d785386bee5728f27e9d9b38df3475f3412bb47548fe943a45ded043f02304ed120e418e4ea30e47d0c1fd4a4166fa95713e17913ca7d00bae7f37c7123c6952fd49f6c421f05de90fca2b368e3149cdc46f0a688086688dd5e33b14b7ec2ea421f519e4d24a30d7703bb00ad7a2fe219caf4ac9978cebe56722400a6654812e94e9a6f83629498b5d43678651008cbb13ae4cd404c18e34fba9ba00dcc24eacfd960ba7c5f33542186b898ca30673bd3aa0a18e002bfafbdf703a6ffe363eb8d78d2ce0f122b469397504e8f740931146131e0c7123d314da56aec9f6ae088d55c68e9eac04c52e9aa17011cd95e3ae42ed5a6b8368d4e9fbd942329731a269725f0f98667059e6597ca09a9f907f499f1000df6d03b8bf653a8699f00929aa4d270c801f56a0ea23c2316c8b6a95f73099f48856a4e3b412ae3b7f5e65c90aa8ffdc348bc309c316be1250b48bcdc6067ffef2462fe320db2bb3a8a74c1191cf185ada828871d390a7369abb6fabc539ea2909c329b16545a25d8666e57f6e5851c1846f874468e2583d76a79927866fc69558093e6ec133bb5c2e3e5668cfb578529595c99a82fe03dbc44c3bd9cb19e1e4a394e8039eb347cc3c05ddfcb9b12b88a1b89b50e811d8f59d24d7cdbae72c885473ac73efc1b379389df6d44aea5d6d517f02e4c269f14379651a9c0122b5adcda45c3d7c15b3dca8e28bd6ee8d721e043d65de63240dac4624e96ca3e421a9a0e05a5e084984de7a5aa4480ad3ea292f21a9fce7a9f110bd0c8a22100b7e870add6f28cbd743d5a205dacdc36db6e3890fbecc8f90b601d08ebddb01e1a9ab5f832ddc509b6aaaaede1af33d95201d5470454d484d2ea4d6d13d37d2bb4596e76cae16ee1cfe0727995a8e9f4c0ce8b94bd0626ee3ea5e6731b713945680c9837e6c105f66c1e91c3f55bc474bd36ee9a6f72921851452e5e61d935138b4bd16d66a4a1171114687e13398ece656f92332f109c00157b16ff110a6c1ec19bf9df557a00b6fea3f42ea78b004d7a3cf3ccb451c211ac0b81fceb986fbf1a3c42d45a869ae3805cbefc0d1a4442d6ef831dcd0072bc5f44c0130d710d52e60aef102be5ac884cdf0d689b04526f130244d2b73c7136dfb7e4497a2ab13ea7d40a6909f898db31be2025a5b8c3c9402081b114e173d3e95bc0739bc6a991628af4647b29b1fa21e720b998f40acb2076901b7aa6501f136962c1a02770419a015e0d8fbb4c17117ba8f955efaa4fc291650348253f21857eb986e2b219256a89cb62f948341a718419db1a6086d57b12734955ad47c967f9083ab621be4637748deafe90ae32ee3c49645b17d79b189f9fc77d11060a39829d0c5310e1e4f6f53982fffe9e0db5d0fd854e1f0ce028e065d09899f1abd35d9c6a0ca3e96667fe64f1173b1a98ccfa31e0194e75add5bd0ff74d7edf99fcfcebd752971d956f67f07b757199aca7c6abe7f0ba8f902626d9713133fb9e2698fa3b8110230c123f44f95b3e31127eb9cb78ce9a884604ab343bc5287c7faa60708e7c240e5085e608d8124188319d123a64af3720dbd25801a2228a1570ee8eb067139f104298eeabeb54aa07c7d8b7f23342ebe71d807b99e42536dc80b6d6996cc81774d49ae27f49dbb75c67ea49b6ae75475623b863e8838aa1db61e7f207c57b94b390a1b14402044075823a1e8a96c3f411487266f15eccc7fd889f7b1b9c75b7928f37c5b9c13d80d84530df7acf24b2e6b44cd934b8062407283ab52ca03782ddcd51c02c301eb4cb781092a5fa1d15b81634a80872c40cf1d87251b32e10c7c600c2d3f07160c100e4825315e446c6b67c10fb8888e9571291a174191752c16b7c01f6229ba590f8fa8780dd3c8cc847c535191aade872cbd1479b3093687f8ee5c21af05dba68de28e84c0d7462d3316edd32d00164fcd851a60bd2b2aa0b5579540dcea49bf32500ed0eb1fd0ad099c4c420772095c6722573d1508324c168c0b2cb54aecea400c24f62302602e03af43a60e6a296d5e492e4053df8001aed5be0fe2c8a5f42068d81d44e3e2ebbbbe65859930c6bc22527eb0af9721bf24e0482e33897e7d82820a37a5c13946dfa3af1ef5804cff0b1e69570218caf194abbfb211abae617bf19cac69c25ab38835763b34bb285a8c34e26a0e21905aa317c97a6a14f2087f9f70eb2dc8fccccf323d45b05e4ea3431cceaf1acaf33ff867dd9947ddd27f5829fc44a2ebf2644adf6f8da1b3238da95f250299fb356320e2432502ea344d540c1118800024b181c2e8fa600d40560b699c524d44df7d9502729c986e7de30ef10ac0e1826ac1e5c0d9ef5f4adaaf270ba9ef2c394e417e5a0f9059d84aeadf0680adad973cdec0297c34f4d323c9a6b4a212ce93d75612d12b7108d8cc7eb51ccb2e4bab81d549a04e2a6d678a1042772e9ba8a609885b0283e8aa0f1bf4c250e849d0f84860aced59800ec27101d035b48a02ee5d5eb9fbe21167d2b67ad0a4f50bfcae9715ed08715c78522c6cc89c184a151984ce313668bd19ffa8d00ab008079f03eeff6f5a0726919e8f52a09d2224cee688316cce1b90b632fa75a21db7d3b7173ed20d5a5d3d319d049d74cccb68ebbe6aa87fd7c3791a05e14ea42a81cc9f12cfd56d1fcd1a3d05ae224e6ff2a008511ee64f3d3492f0b1f56c3325847397b28a5e0747f988fbe31c2e49c6eec66dad0a0136bf6928424477291156425e045f95a1f8a5166a491db2a3c2d8ab8f4b169746828192860469d98d2bc420d7f45ba55ec46dbc2e3cec6c6e65924c5c1417a5a4c31870850c1c1b69a38fb59d795929fc4b044ec6d3be580648f5b8679618f19d3842fcbab5264dd196b1ebad791ff7b9b0bc13c8906f498236db0c14c9c2712c3181851f5fcf961dd56e5746feacf55a068e6b90d2b7af8249344a44b7528daf02c7376d9ff188210c0897683b81479570f25f44636d370dc1fdc56e5cec0deea1827f45787afe62f344f4505ab5cf142a4cfa3994c20d044560a5e77f1509821016c07aa0da4a5cc3156d3f946616337a4a304f5d20e8723d3363d22ba776519825f58b4e22ba68af01dd1afbd058292dc12f00d0f5ea6908043cceedab87ac3201aa8f091ed51ca72aa0203723910dd7761ea6fc635900183ef2c661e86ba2ffca053ac0053cb7f307031580ea2b0e0847edc046782400747690a2e847ba28e02ff1209afe4d41760810883145313a30720845fd019b292414a6f839c1974eca2b83c203f9284774ac133cc51e7fc528fafa71c5ff5354bc718dbd00027971bdba031a799053ecd51dd400a95a9a425608d22b06d4ed69a0e86d37c9dfd4f0c2adfa70eb2df62acac1c3a1f33f0c816fc89a1b3de23994b852d2567f20b2f865d15372f24501e60e0e20d2ba1d876586ed23ab4f1f0f9041c70f51682aa00126baa54d9279ce77058298de16407d20c86cc0c2e18e0f452433900ec098c680445743563aa4321373d588984236532c257b0487799ceffee7725ff039804c5299615de956d5322f31ca22d0cb6768b9c0359cb2973b0598210f1502393c2f9bd88a7468923e55c02ddf06e1c3ed8e3632cd02bd9049fa5a2fdf9550818ccf6a71c03bef585acb09945e6995c3dd5336b9fe607cd1dc31821554e572a025d26a1b6d14075343c5f3efaa300a81fcc757e8bfb3962ec5af748a6d0c33d87542cf708644771b31c8933722f7fb38d183c220dab484a5f95a1396213a5937e6d2f4c2ac9da40e4272298eae481ae3c4ed9fbc5436c81bf202e6880d421c787eec8af99f946ea77690d05989a0a390e46d70b2f18d05f1dd5c90583beb72876db80e2e1c8b4aa2e39b4026802fd6ed49bd32ba2f47c00bcf494442f10dbb3ad1d217ba9a8fd9d8bdf4c0cecc32f01a5a4c3c224d6be9a9c967771104bc60b60580eabf854524ede020f336aa530754c67f00e46ba9feff02495b9556877144846e0316d0226ebe46f1613a7478428db98680421aa5aa89d6f3e7fa1a753e6d5ef82a04ca1f285fc051bcbe1788d604f582d33d64edf125101a7105a20f3c124713f4185fecc508f8ba7386d36dd00b3e540794c251f7a5d505f59a6bf443ca35bebd699ad6016a7a50920d2bcdc493abd9edc429358e55868a5eb0aaa23713d1b1113a6a2262ab038b11eae3e1c132b362aae903ed0287ca0e1188b50af0c04e47ee11f0c9066e94ffe7635838f87b0a6148b60bd71e178386504ded44791f7187b36eebc7b58c78e4ccd098e9484339160c5d2607a8def8d5d4cffb96fda94d584aae5abeb8b7674fa183b4c0d6f0a666418043670bb0ede564109d5742a565837b1ea20ba036901d527cecec9239d4daf6c1d785283d6a23be4688016aa1e208691804675bd695289a6c2f0d56a1813b0ba471493db0f8cb80deedc4973c9135549ac8d90c9f26bdd7b40586571e90dd71adc85e66d8e91d7ad14ee5e5059563cd9b1ba696f9fbe045767e81516d8c75534f94ad9dd81cdaaa762b1ad1615c319240363befe02c7e5b9122a05f953a596063599c9de1174cd2be84ccaccf45f893aed07b9c6a13bdb64e2f108c1b15dad50c8b81132704e56f1f15b2b34f33158e7d74a2840e00e78624165c1a466192aaf9e5099b013b93fe6f099479962cb51cafed45bd297023a2d5ec88fc82ffee4e5bc6a805b498c89483500016c377570c420f1bc8c00b14008b250b3b7221164864288a5c31a978987557d96ab5f2780ff4ba8279a5f2022bf73009a8e4b24b94de6f15089b53355b48b3e391b7bae599e75a5fd74dbc6fb2a805ba7f1c58e923388052049daea8bc7be671214c1cf1b9d3fad54f0ba96d4159ed1ed93fe06b58d053d5e07aab9f6cdc0e2d832d72adb7dfe4b195b2e723d642b0ed11aee56f39ef9a6316b2a8408b12baee6f8d64cbcacf6509b194804e8b206e89a0938cf338e43edfc23919e11328fb9fcaaa232b6ebad58f67a097e136a3f49213e94ab34da93daae69bd67060496b778117ff411d4db1f36654eec512214e57664d55c6a8ae450904c682693608aee52b4e49c50ad570b48c6bc4cac5d16e11b975b06a15c548080c6fb8cff08ee415b22218b70f9fecda07624580db84925b9a16d3214add8a2eb692a8393b48718feb410d76d5a4bb00c8f1a343c9f77622f93e312d191e481b18252ab709abdbcb620f7ec650b5856720c884466ae70794fb725b12fcc8255fd8c91709bdb92a2c4ec725d9886f598e3e61f8b8bcfb00006841577be830a782beede0f094deff6cabf53e50a99b50f26cb4051493775054980556bcfca13372ca2bb829d90e192ddfa48e5d5da26a1fedf89952953fb83aa969fa1fc9ff820da1f9af1edaa356717a6b514d519e8f477e5ce1abcdd0c3fe18102d04bc650e07f893e7b9db968ba2b61362866de25773ae0d2ccab0dac1cd362797e0a18af17b66543956316b5c449fe5da6a424e08b066498260f806f83d481128a92b82a70dcadf44c8422b4e987938366103e37e7b7c1c9bc72e32c4aecf62c33e5d355f8ed3c5e9be0e528b4a9d5a139d80890d296e5119bba0cd99fa9e6a16b8cb00955b66125050014ccda5676d10e2c9e656429b6076a34591a5d904d22112252650cd4d6a16226d03364629ce2191c22658badbdab62fe99ba69a0f5fef2eed4fbab0e95728e8df3f89b996cfa12ccced4a7090f2ba99db52570947ad07efd167e4099014d04cbbd8ecd4ba6dd43e240520dbabe30410c68bf957b4ebb525f21cb0113a57221c166eaccb7f68ac7183a212bdaba7441d60cd98a0c780542f5ea04289dbc5923ca3340e447441d6e468132d17642acc5832007757ea9c8a9b43bf5b5893268d596bb1be9a0cb145e4c4b41228eaeeca352ee9487e4822deddf03977f4f5aa395bc704e5ab012a13d5decd89ecb86d3d9b9b08ba2762b23b5862bd1b8355f1cf9406fc1f377b6b68f401dcb493eac0d9e08a5b14643ec6b317bd5bdf0a9df2a9e999b33376f5bc8005d19561dcff220ae41752fb7f9156a087db2d0f81077b79a5b1be88bde21117da2d0763cdbe71cb5b90ff77b5ba3a9e431fe27aeea85faffb25252b4bf9e23d5077182a532a94a8aef49c08a12e0bc6cc5ae6f0f83e2b97b08ee4e1f1fd78b964758d5c1ebdcb05254d5de9f71c6d2b298044ae5513e88fc7f38e84641cb1aa854c24a09c3b41781da0c87367f594ecc4de3961788ee9919343e232c681b84e0afce214991c036420a54b5cf5f1f23e2e96b0aee6e0fd2e562a615d920bcff7bb8b92aba3fc3cbd8b4b25aaa338797e0717495647fbf1fa9eb324893a6467deefb90a24d775e6f2f29d06ba1c7ddfd3c94a1f34dcce8f23c324d9012b242bdd85008d9df50afb71b445d9dbc639d24594a073ad6f13e4a37ebfa323070aee4ee40fdabdc1ed436b1d3f5fd61fc75c3c4ba603b0652689f46205ea0e1e9a0e1e6a648a2139c7331ab84817124a5dd1c711b66cb90e12a316a1434681ab06a60ddb4947bb5517c7848bd11f70b1923e2e187d6d5ae5bd1d88f28a62fc55dc3f836a3dca16dc4e1b7eefa8942f08b8547ba37732778eea3f6d70e3e0b1ed8bfbdccbb51594d58c7178e373e20833a83dd1a9405e3454e71ea8b8eff8506e87bca1b9e995481895bf6a4b4abf8e92cae44a6ac0082fe89ce4e16555f618b57a03c4c1df464cd1ec63af0f8cc94a9ec681e8f2340b8e6cd064d24fe3835ed837c0a852235d558dbb445a30b2065a09740c9e9055614d83791e330b4b0ca486ee6b45ef534c63b857e64223d0546afccf365c51136ff6857468a5b51303233570a4c9a728865ffc2c1c722a3e44db7797f3242481150a143888778bc9561d2374025399d451f0b7cc7122ec48c7ccb7b734141238b33d45a088626d4a1ba08a371c85f7e62962ab415df9664d4e9dc298ed326bef98399fd19f280b2bc8ae397f7e5b10c3b18c591e6669edb2790fade260f8bf9c8ac2a82d6f65acd361a81351f4a71063b7e6fbc7be2e9fc24d091aeef2a7d1b767a9b5b6a91477f974dd939d3be87728ca7d51b8cd48fe9b56203388e3c3e69e756d0ddcd78b7e3769bb9f9a58dab0798e777017ed43c76d7a27412067338e7646d461909c606afd260a85e74040e1f97f2c25c3a94fe191f54cf8f4b6d07c777410308e310577c31f6ec3edf55aa625088261130795fdb238b03746d360fcc48bd830c3a31ca4040babb5adad46f1fe5c582e467f7998754b33b72bbc9b7dbd6210e041438d629c361248224f24f850205b65093220cbcf01432523997af81006c53878fbd27143918882bcef05e0d3f44168121017525c82d2345cf06e203f7627a168e725142d85a5aaae00960a54719dc265b53603e618965b5797de1985cee634993a066f070fcadd096e5675ebbfea2f91e8564597a12452c22adfaf6da23ac88eaad89d1ea63553d0070c30e4bc1414e927b5b508ba6b7752aaf1126008bb98a41fe6b732162194f2d498e8d9b92a97d0f325444b077e542f8875457268a9fc06ed1d95b78b85da41644a510cff662fa431ff91d65e28e951d00ae58077f387003deb7af12899a04a670f653556a86a673a6e7549386ffcc55a6afa1caa62bade0bd26619887b86348f598aca6602283497badd48e23e19219e2b3e10824ae15ecae86a9fd9d973a33f77d10b9f35a18a8309394f1246150f74d952f15cb539b2557a253f052acbf7c22c37a136c327d7d62c27879f7601d3fa92763a678913208309169fde6519e56a001673dab6b21c92528f994081bd93aa36b081e2f3f35c49f9c45841fa6377f9a5e72ea34717dd5f18e805ae06e7f7624ec1b152ec308aa10aa335c7d915cf954581750ea260f5746de2b992df822fd76eda4228581a47feb7cba301f17180bbe62800b2ee470d6261a0980dccd1438b495bf45bcdb6d973e4f80cf92042f188d81f1bdc7a73800ea657c03b9b229ce8bc54602dad1d43352347625fb756e9d4247bf1dadf6b8f6fc268756e30e48588d234cd32f4635db7a8dfd044876e4f79f4ef4678e78aacd40222b280b58b0bfe474f71624fb801ac5931b8ccac0712ebb93f6725a1d53eeecf8c57ca84e5bbc6cebc7fdcc332ec223479ac0632039d73d527f3b1ef8cfe1f0e441a079092b92965714cfff5a2750d0e40f79e93f486a52499905848fbe0a202d9dc801d0d559c9415391c5f2d8d8c1a51766628004001d54fff94ecd7a0d448136adb6c0e8d0f79166651fe2bee0f173a954ebcada566c14359a6bae8e88720ba1a6132583a046f4497d6865551f38a3a7d3bfc5f0839e93a8cae8992862525ce38320ee4493ce18a9106028873c88dddc3688dde6221558c8350c045e10868a02ab81ced8169bb3fe5bd45ae0424c6ba64574f5ffe65b8075f8b3040ec8ae8b595595a7d819094a894aaaa5107e1b2d04fc00042da4388906cb34fb545e6e9fba1ce71ad4289b39a9aa3c907ec26a470480547248d60b3d35525f8c25d8b8c6910447666bd090d6f011582b44a2445640ad1ea7dd4219ec1da9f68a4b48b0634d1257408a07ba45688a2a0cf227ea0b5579ae0abdc4fda5e5c6597660005d70a27b928f73472a827730dd48b5489ddae22c0fc6da63397ff67206cc29180a4ceeea4cb2368f88b86c0e3e93fd8e74fb47359caf98eda049cb08f8f08000c74a239b9e1781916e35c06ca595f4c1863465b655e52002be7bf8c3e169d89d172ea119f2ec5c94d971d033934181e941e2a11cae7ee279fb0614e4f3d616b78205226737e4ad680c1a99f32ab04d43debde448d1b06b554d2438e1abdb966a8ec4f1081f39d05b286339b403c14ae9d3b8ecb188f7c4694c6250b278e0a76aa10e7c9c35a29e2815211062f9070b828ae6a681b80ba03bcaad0f861fe7ecfa4392bea222d151619a864a2f197784d733be0e3a4a1737109f0c7014099ba86473bdcb12e1cbab0baa3222979d817c76a4f0adc17f85e1c4c905f988c4e194bd62f632644a36ba33596cee8ff470766025b39f29af3852a909d1920c53c69300e483d14cc4440bda1e4e8bbb5032489c6e04e6fa7d06ca862ae302e6370ed82598d9bd4c23e0361e0af84174900b07cf2a528ca5b5b54b99979a42be5293163c1363c6bc0a12a57d492c165122c57ee8c668357144b1606ea5cffe5fc9bb3c88e70545d722e538f67ba89aa9d928648292df97fe93d29062f01a652a26673a463722aba721262c5492459bd2cb0d781aacf392504c56c09551a3da9c92b65ad35e978ad75d1688023d68a1e94c226cc841b3a7979b9f297a67c9b2673b8a05d9dd0e39b640e48342700f6061aa29497b68070140f7402ca119b9e2157176a083fd4eb6490e6bfa20d0ce4d39ea8b2b386c7140e464d35717df87e513e7c05dd2415485e158b530045272355e9cc28063517128c10bd963b75fa6bf37b2f25090f4e3ab9326a87cbd00e72bbf610af3b13e756fa63823225444d4f7bdaee62b3bb8b3be694a7194c748632e4b1c48ace82dd8f8d8a7ed76b9923bd3a4c3faf36e71a5375b946ae061ffb62729f32bf351b27b988190747b7b470314895d07fcd2a0ba30a8046033d96b605aab2aa314b92c7679e242841b7a0a340623a771e930668dd9e0b0a2a9cd1e7973add595945e5dfb713c88a06099d1642004a914d0f5a5e06d8c2c2dfc54afed42544ed16a3e77d66106f501b5af43ccf12699efafdab0335d2896638553b1d97c73581595230453a4a7bb79e482d7ead79dc23672e1f39d2b6f7ab39d015adfb0f1704be72380a3078f2d886400089122941470ce01689efd19055849d92f642dafe2b96350318ccf04d7c963ea3a27189cd84719b276b53683f2a4ae605909a33876e2909df31866d923ac9ea0e9e609aa907b8ef7492906655741b55a59632143d060cc7c49d46f9c23aee061d759eebf19a0ff27dbd09f398e34469e629e23d15905d085c900266afc326cd3a0deaf7982f2cd0b5e7ace24c952be3c57698aef1cd4b17791750d21e350521c84db81fc4843921b170f2b40d39bc2287dc37e241d7306c2329e4e800774090b470415692fded2fb10914e105ae9cc5e712571058e9381dcaa3ce103ef3abd0f70fba700ca833f6ece953dccf48397cac90e5815633467a82b6941c5b64f7a3502372778b607889fcec07c91cfa8953a9df7ce2d13ef67a41536cd72d9f371eb332e0bf9b90bdb74c0171141e13b211ef7a1afeffdfdd5b707716dc7de7c70866fef5c412eeff5a8d20c40834ac4658f27fd5fc6bd3eaf85f23dbb69acdff9b564799aeb670d35b129d2449dcbdf56304d76a841bf7d77697b37f6dab6dbbfb0a2ab8d7bc7ed317eb52682f25b1b8f2da65948c731ec2e19c71908d06b83b08da205736aaac6c1ca19cec7438dc3a36d19b0fedda225ad4024f132170f71f587c7e6099bd92cfe2738556ce44e0ee3d7c95b385e89d2909fa8055c0e0de85d1d9408b194c1a746347a40b72240128f053106ae00e86082e5e23e8059f3c8471ffb172f7be707771eeb4729bbcd598b620ad9ce9d48b8b647fb1dda411052a8044124a58e0023b3f441e0992ff693d92ff16fe051c9ceb96cfcdbe8a96c98a8ff76ff256f7a6b3c60677077d552347a96dae41f96aec808811dc0f6c8183c1122f080c304106422c61831d1440e2c5208b20252cc0081f988009f19cf8a166440f00969c01c2e54560043a5ebce02531031e1f5e0f5c963c01c096095cb1030f8f4ca2f530981d1163e7863705072b0590e100236e1670e31d51c0ea88323908e267677ede639142182b0954e9e22ac343f580c40f6170e005237488d1ed00044c50a04ce088252b303a2cc850400d303862024b9078d171400c0c548084c5061a20428b4e015d84d9801645a4e0f3caa2cb010c8e198040830ed2165574b42ade0a05b0004b53049ee8a07829030825fc8005eba289eea7035a8c0029290722b062890e8710a2484086009806604962961101059440880c8cf8a0c211b3063460d2801020204ccc0646cc131c808525b014a188301a18622621c5102428a420224b121fa6103c5ce141882b0a80a2045d266e89242f1c909b410e5c0d13cb0f689a6858c286a51df60c7ac00d02084840183818c6f92306b307a20eb2003a10278e1051ac4b023b7060c5fd074f64398108415a4e4840929309c009543fe840a2cac03d04636850817c904209314bfc013c081ff093c51364fc40e25e1a60f463851212c01a12e2b716ac00e8082472c0c5e67224206e0062050d3ac042ba0339518415344c91224103ee28e4e08291a63186a0e9e2ee29d1b403289298dd9cf9e28b2c22b03a6385112f947146032ae8400956ba30a1bac43883001f9aa882061f79a9028c3337345146250a91a363075e9c09cd10c0067e100047010d2dce1055c0870f04582d040bb238037a8165f5040b2d1c415571e606025ce8220a2c68c0218927ce20420ac6a830a5fefc70a08933b62080cacc1823a841c2d212673ce18125a4018010a3802b923883026350207685976dc310479c018404b60841039828c30410469cb1b72002ce07b973430886386306228a76f021880fac30c587335c98a28933322124f041ea72860a0298c54e630d30f450c319351bd88012622a70860b13db8c3080d0c51806a081097cb0c268460b208004cd0a4e2c064210cdf8800c92187dd8308b40172c668431c05203ac00810a53109164c60e50cc60c90f1d2c48c107a098b1d4458a2cb65841142e1c5962c65106806a64b03024033f2031634818426ac094c04212658498b1230c0f57a4a08811142186cb0c7fc1de810a1574789dc0471937f842840e30901330463ccaa0a204ab21884421834a911b6560400724367259386045959b3288b040154441bcd084743bf39541830e8c60e17af4a0072aca28832e404b124028218129362046194c58100396d6cf940404008c325c05c0220525bee05006122fcac811019520c2802db9e0460b3284700687813244d08416465990a10512e419259c200151a0e08c2ac820c10d745ce125d131b485bb7b8dcd0dcea4319fcc1a802aeed387fbd452325d8bf37925afcb916c1a49506c8922cdedb4ea0deb98b6e08e2eafbd81626b56ea985897c26a0bc17de90d147d0b52125113a225b1264448312bb0289f44c9efb46e1d415a3923e23ea7178104eedee3ab5412ae3378718d66b12757ab9be6ad7bc22a02d923ed8434849816615821c6e581165cb438c110a634d1fa41254218255431453b119e49a281248805339c4002111f4a44411bb34206b4dc161c804c8d2b60b8e4120d8ea2b041428f00c8c0a00159042c10c01530600dd3bba21ca4b0822781203898d0440ac6c4e0894f0b150bae0802183db6173d35480032c3db020134e001944ccf61e4e5c005228811830914c1830bc40371044a294cff7ac073835dd921893072e8c1c30f3009dc714386709b1d94c0e70f8f3b0a5db8b887f3827bd1bba7b07077293a283e9f44c9d33d56b1fe4bd32277d7f115cac9a678a4c57256ecb99557bbbb155f9d66e0333bee8c67b40a77c7b23a914cb83725e1ee13c67d0fe19eb17871bf584e35b83b6b7522dd59337713dc89dcbf9ccf7327c17d04f79c69c40765f52df131f12f2dde12cf9e867f97f8f18e2541f2eebe72f71aee4e4308f8c3a3ebce7966dc8b818f23bd21619c942b8d56064d727671f7197ce51d55118755f40187803e3c4043f4ac87f6e3e333e487ce66408088457e684478b00575dd3487602e6f6d6b35f7e05aa621d833d28bc51e9dab9ed2f3b9dbb80f01d1f6941bce4cdcbd4615a4cbc2b71d49fdb24d65387cd5bdbbdbf05527c67da44cf856f3294c5764d51171f7127cd5d5dcfd86af3a24f7244d55bc36571d56a69dd7b6f5b78e8fe4ebecc5b1c436fd3bee0ec47d5e7737c157530c77d7190c6f4ed3d472a44c2fcb7948f697fec52fdb699134e36ef97aedb1d4558aecc53a8e3474f777ef66ee9ec357f38bcee0bed154ee3e3de519e75cffd217ebcde5ae79df7aab2379b3bf2dcdfb6bd7ee4d6f19d39efaf083bbebf09573b19a35dc9d045f7911c43a5a4a7b5d776ef64fc37fb1ddf47319dfea4d67b0c3e1ee3c7ce560dc3dc757be84bbe3f048cb95097f6edb909234d4190c2b530c477388c791ba3b8efb1ce2ee4f7ce52d77bff1956bd7b54c5fb42365ba566750c4b79e7da3f58459f7d48cc39e5ca67966c79e2041683421f4c787c84f0844459f2245421f1f22408ccc68919f2243861801222244a4448884614fb875997bdc1de5ee27ef73f78e660660d8b8135cb8c0dca3a9811436362aaf480d35dcd0bdf737ccff6abe862e5e3ee87403cdab6a5835f0f04127560d37d0b04e8f62dd807a15cbcb07799f62dd80629d5801f0bf0135af4d0f200a3079983c7c5dbccce7e163f5f0a1c70fabee6d6c964eff75cee3de7c62e3df695475d1210758f7dd373760e3734e1d4f4729a5c5fbbe2f45f37ddeab543f3d256f7a5ea74474faaf06a6ee55acedbdea559eaa86948ab551a925140d6b09f5fde93f96a7ea7e09e5b053f7be345f354f636cdceb6c6c68de4f797f4cdda372c09650efb01a96961ab4e480a158db7332612a0f46c352fa7eb2b4d400b371961687f9d780755f0295f718c0eafb1caaf91e6473a3d3fdcd8df7d1d074f9fe86e6d3f1209b9a1b146b0793d4a39652ac09e4ba47b12690f3de059807751daa86c5e5fbbaa86cb0f9f9dd04753a363a3cb810e47d8d4e172f33c87b1e5c08fade6f6e6650d77d2a1617efe7dfe878108d4e179af7f24135affaa09a9f362c2e5e171b6ef0be86c5c5ebe2e5836ebec399e146c7861bbca76171f1be7befbbf77092bcef6a74bccca09aa7d1f1328368de46a70b0f2e04d5bc971964f3369dcecd7f38433b62f8fee667f07eb26cb0e9a2aa8243d00dcb0625926c7ebe0d35dfbdce0af533a887102b2d7e0686622d4d20d7fd0472df1f753f7176c4f07df7494708b0517945baefbc28a1c5052f3a5dbc7c2c25b4b8c083125a5c80697127aaf884f9d0a1b939a95434a9d4eb2ca5fefb94527f4344a3faa9e383a6e655a8997a1a4c1f0d1d231aef513636362926a9473dcd4947e96607ea69fc37513a386fa39462d540a1584aa93fc16e5e6907eae7c7a2f134de6bf980b57058362ca51d291694aed529f950f2311da6e4c37523e406922754a716ac85458d1036de4da10519984f210330a69081135a4c3183267aece089b1711f4a2a958de73dd1114949a17a1b95a75239ccc3219a27d5cd89f5a1503f513f535fb07062ce474da25933e7ac614d550a85fa13172e5852aff2fe24832fb0d3a3726ce4e4bc0f1e23e030994ec0522ca51b9b7796928d4e172578f820259656384fe6ac81e3383434a99f1dec05ef26870f1f244e92646353972f4688994b74443ad8474287737343a33a7da7fad42be550427df734384f661898178548f5a9bf2142b14eaceef3a61338446062e35d8742d580790f03294e5fd73ab2ea7e3af108908139ccc98881f94f3030ff2f60fe645e3006ec7ba51a9ffb8b69c7c7d2d149bdeb3c99b0e9ef1f0d4e1496120e3b3e7f9fb06fced3f45ab028a8f7779df6974abdf7299c28f3957080a55c3e61a76f7e1fcb0553c15c65a433df7bd781eba8fed3f1dcfd74aa79af86a5721eef3f970ae651bcff5ce005cc7b940bb2e8ba16ea779c5ee983c13e2596772d1f9d07011bef6c2612abf99fe7d498af248495f7be74621561a5a2f9ef554ba8af791a94ca28f5a8d4a394509f7ad4fcd52c42164fc052af5a02e630d5cf208919f800db13e6fdcd2ba5523433353f1a9bbff954ea26b523a5d2d9917a54ea26a5b2a9497d9ff2683ca60ff6e14499acf94bf353af7a25ef77a876a858deb54ea954ca7b7fd74c7d8ad512c24a4b0dd8749ecf7b9419ef8f1802e63087b1a0cbf7dde85add64ad56fe3be6dbcc6f3e0e8d1a30a60fa6fafdc14e3c543972d8c03e9c3fe130999ff2ec3c38373a5a264c29c5da5143f334ae5483faafe6fb767c9ffa1ddfb36858ad6fc7f773a8d5fa5c9f1262054fc0dcc6f5bd520be6deef98ffbdc7da315933954aa596523f5fc5f296e6eb1d4f5ab0f993a565c24e3a1dcbe5116009180be653ace00bcca6461387317d302d35604ff37328955252ed409d7476a0fe44837275444e3bbe9f9f62b194767cac272d580bf6795d17362ed70ab8c05e309f42055a94a1c517b0ecbdd20eafd5b55c09853a9d7aecb09a307f25d58ed3bb77fa16ec7bd489f5a405fb58adaee5df827d2ee7f1ef2e707aef54df2435bbf94d9c85aaf9c9f28c4eef5d8d8eab5844a925d492d74d326898a05038384c76e0d0f8e3e8689951683c1ca3ef532ca6e9b19ea0de594a13365d9d0a6c3c152c01b379d5f7ce644fd87c98d7b526931d34359f72f7bfd132a3a8584cd3591e8bc97c94efa079d5a7be4667070deb490ba662b55c5d6bee095b755074ef75ef75ef6999666046ddf4973fe998e6981a5f4764e9c65f5d97011bef882c79dde97beffbd3e96767f4bd37719e7cefbd0ed3c4e134e705b480f9b40018b0ee6dae6802f5a92ca4a8e12da59e6805d3dddbd878caa686d2e93f9bb7612dd97ce73a4a3644dfdb7cf73636272d3560da9d47c9e64f46dddb9c74749826d3547d87d3c486e6776899307fa60f365f4b0d188e11ea532ca609b361297946a79f2c26ef3bef53aca5eff784b196badf1376627d4cb44c989609eb589f04b07c9f4a02cbf7aa2b8c80a91ef59e7beeb9e72d7fd282b9602a1dac332b2dde07f3be21140e940f8563f4bdea4f3844a8577d3727f7a6ce93ef3b16d3849dbe57e10c7d93680736594b4aa8573d0a8708f5aaf770b44ca68e69c24e4b9f77faa2c60dacbb7183070f1f30f7efd165a574faf92e16d384792c15095860b0c06081a1278cb5831dcc39a7cf1d745d97ea7660c68ce7a1bc1d7ca7ef74fa709a7c27d60e3c146b07abf94d3ad60e521e93a1219510de6aedb0c329cc176fe766c87bd590f7279c187c00be73e39d68d0781c96967986a583558dbfd1e19ee7795f43e746a7c6cd0d0e0d1d142ca55383460dd67cd4d3d041c11ca7c9c98bbf4e7f43f34a29a85837377f1ae3d57c37a9ee3480d4dba4be66a65e751a83fa14ece604c65f29d83ce58039cf87001817a820ec70e2e606c7179b1ba7316e26ece6956e60abd318a7314e639cc60893440ab039553663c88cf1549e0d991b2992388121851452482145f737ab530daa2655a3aac951e3440e8f75ca01eb9cc0f185842f2ab052c2f1650718ef4fded3b87b5e0d8e146027168e2f2b2e707c11018e2f6476386193031730154cc71858e7382480619d60f0ac1145c56ac26c5ee90483c9ba31a6460c9c1a22c0baa749fdac0111bc49c289c68604302712c43855011373127312731273129303eb52ff8d61a16e70810358f73ab8344101e6b16e8ca1c04a89043036588441992085bf68bef3583837342a168b84303ac4c0ba3f91c005460298aed5b148c042c718551833371d919b1b188c018299f9b1aa50fa927c928474ad9b396950363573ce316680e0d97c2a6fd6bcd2698c5547c4a72372c2c141d530e115a1c1aa21a38095528d14355274ac1b2a18cef7e13c0e0e8f8933dfc6fba9e319f1d2b1c0e7e4e37d1eab868bae45664566c26ce61821a7315652c01c06b0ee953e324ea44606deeac8a452a7d3186360e07923584d26dde98bef7c4f43c7fd3b9dc2f8ced711390dc05b32984cc0e063a1b89cc6e860d35bb146b03253838c1736b0810d3cf5a72054f3a3f9f9a72f5ed0d7d1f07e7eabeea43a35c171e2305587f337bf83cd8e1870fee69370584936352c15918aa5659e9941ac1aac944e0360d530e13cdde7c5182fbc183386a686092d6ac040797162c20b1a9a1a33a923ca942953a64c993265ca942953a64c993265ca942953a64c993265ca942953a64c993265ca942953c60958e7a8f91f13a957fa3cf0392a285583158d14ced39d6ac27cdfeba869e2fb58df98309eea6bc2743aa478c20b0ac5aa69e2bbae668953982554aa200fd87867c5172b7cb0c24b0a289cc063870e1372948083841b23d8c859d5a08173635343a34aa14edf14291883003653cce986102ba51bfe4ac1bac93a62a574da42f5c52a478e1c397270d18991822f29e852451948a6a8028959c503ba2ac054e1858a32603e051560c09c8a32b02d7ca8c8828a274a80f9145428414502a8e0810a2eb08982792c25265804a64081992950d0050ab0e850f08487822660d30b6153089b6eb26e9c057f0319b05000068a0c00014c18b7d1a9b1ba49a956aad409a749eac60945e39b7fa3b2d15175448c7831e2c30f4654353a9f4fb1a23162e407560a6543274747d5cd31467e40bd0005463841e31d214289e66f3e1adf7d0d0e0d1c1cd609a7c9912f4788c0e972f0f06ce67ff36b4e343aabaee57947be742a295629d61130aa0ff5f37b1d5abc336760dd9f266c4c87c5e98c262898962360dc53709eee3d9d9318e7e99e45c44a298514fce55e91d5173728182b01abf92756e7850d8db78ce1eadd98c992b1512492225aa2254d939634dd4a9290d08cc48cc32a658c5c86309071308b0c0631312e758cedaaad841406208c491856b724faa28c1139b1edce9424020366916d2bd61cc6889ac02c322227442d22cf65bcb5b53921e3648ca6b63097a4971889b3e844e6ee23d5b19de97602e4b12a96638e8e554a0d6b78299348c95b398b8d14576fcd4a62e36867b91e61126732b6349633f1d6d8c5b65673ec5a91d6511cb18e8db48a36b64b3c8e35b675b6b4a5108f41b13a525d331612714cd78c43d15252bc550979ab5be7f4b6414b9a46a9190be98bed2e6736ef8bc358dd94c966b2d61c25ebcd26e972d38d2474b1ade1a5230daaa1cde44873196f2a5e7a4b1ae92de38b69976889f87a25d93475f27a250d8de17e2b4952dbf35cfcd768880c496b1e624224cb976c088c0f89e16b8a83ad86fe2f6c091755d39ac32ae2f0382ef152cb25f9b56bebec6f383fce750bcfc537c8574b5a38e22b2133ee0e66fcb28c85645f0bed5048f36eaa8ff7337177177c2524c6c1baadc6e40d87cf73f115ab68435b220975117a01c4d52b5e9acbb056dcaeb3b092fa46ef575bd22ac80cafb65c7da2737569566a25b51c29955bdd5649ae3ec9d5a52ae230084c93a5d54c06d962414e1ccc225bcaf45673d03b9845a66b8d923192565b6c570d33036691e9d82e71157118db55c3aa884358985df509be82e13c368e766968dfca5495249178574d6d4755531ba9f7ad36b4345aa975deb7c442b42a856eba846e2ad6f0e24bf3500d2f2e7abd9232be3676ed2d63257a8b8d54c9cebb8004295bb98a44454b19e376bd30ec4b71b92e8578dcb596e9c6d12cdab6c5c5b655aa377a6398766d6c09d32e51bdd11bab6329e2db2db452452c5467391a656b7c8b6d1aab4cb63654c75989978c230d775d0aed8e35d1dbbed59236ac59bcf64925733b96ab78abae5bac8e35d1db2d6cd24df4268448d9446f19db5cf72562a2a4cc5b5f222461a5028409c92db4f27a0561bab56eba7551aeb35b79976c5d6b56dc18e7d82e499ba6b17d6ba6a4935c455a6d4a869084958a0eadbe36efa69a054890a62ade2c3e40fe0850794509508924ac544422987b06dc5de6ab241e7071b4a5cf0f088407d3aee5a9230db5586fcd6a4d6d9b1ec59ae84dd74a1b69b943aa2466d3d4c92db422da189121409cd834b529d96921b985566ea1958c73aee34843a032461abd5e5bd74dc7d7eb1636d51b0e7789b7c6a14824da58edda1c2591e0581d91c21dbc3dfd8c43bbe90def925efab65a89b36d8b477c7017a9942328bca4f04d5f06782931f28583bbc42f66fcae4d433b92a5f8d46efbae5c99eabdd13afb1cbd3d488d6cc0888c1a51edc86ea115f156245dd64dc3ad5c71af6b6532c557404dee0e94e47eab86010d290286835a93781749a20895221e110d20f98a888cc84dadb7ce1ee3dae7c6199de14cbeb6b732e5ba2fbdb932e1da8fb4bc34ca83e36871b97166b5c6e457dbd625ceb576a9b8b34b5c6f76e3fd19db4c8ab4e6daa57fedd3d62d5fdbd7d69604e6465d62cb5433596b34e3ad7f8816b6edee4d7c354487212ebded4ddb6b61e0b62fd68c2fb6e134b5092143c8110e8e230d1f5f59ac2ed12dab5dbb44732215a224e406981bc792a6750d43f1524d6d6fc457419c08a21424c758eafcda8a75d79a58deca9b6da2376adb9feba635d75edb0762032040000172072f264b5a6778bbde95eba6e3d35c5f5f4b6fb6ad2b1673b5b9965aea0e2bd93404c4c57ab3740c7f34c50dfd7c7107c94b3fa42379c348ee6ee4ab1f2007b52e9f8a75eb5a6aa9b956f12982cf112b9f2307653b554b799748f42edc92d55c6e7a6b563ffddab54cd416de92568a5f67b7d7d6b6ff886c1ca990ece9e37ded8bb7b4859b92da3e2856266db5bcc8646b58b3fe5cae650c3e36dc9d8aaf7a9a701057efe74d73cdde300ebf58491267f135c5d117a90dc8573db6c7ae7a5e2cc7702737fb7a339eb57e5b9d046a6ab3b6f0c24029bcde32ded46e7bad2db436dc8b9692a5969ac130eea0add96c04dac08b5f2f8578dcafa96d05fab83bf8fa070f163c5feaae2379c3e1b54fc35184acfc48430c85070a28d69d2bd3b562152d13cee4cb64492b1e958b09f7590d29a99f867f29a4e3d3d724b5e57a04eeaaffdadf012b685b5f4bad6dbd61fd9ae292562ed2fdda5baebb8a2e29be72ad7c29c4a3cef556ea8bc31f47bbf5d74cc55ac3b0d4b78ce2ab1698a0653a86557cbc33b68597f2d4dcc2979ac38b439e8befaa8517cabfe14ca3afa9ed7322ad79a4bfedd7f05afd497cc5c218ee7453f16bd78a1793bae68cc3afb6bd14e211e6ee31f88a055d2bed37cd8a6fdb16f77ae35bcdbf3326c95263f15dbb6a4db462e185dca59f31ad666bae4c585b9addb78af6efbe250e43ba6261e560ae7bb434fd5f6d493b641c146f89692fd6f0d65c69357fb525ed8011ebdf5a675f99a8ed75eed2db639cb443825f33fd7dab4eda713206b81345c84ab5edbfba66b2a97e9dfdc6f7d2f0b7056b606dcdc2ff5b996cedab2d69d50a035e9c2b896ddae23e476dfb77c691b6fee270ae1787bfda92562d27eed7525b8837e6f98daf90bb3bf1d50f31c4ba6b2673ddd77e9d3dde5fc7995875f9321afeafb6a41f5aac7eece00e6efb78d7aedd25ce4fc39fa3b8c7f7e96bfb3557dbfeaa4b1ad6d9e7c691e67a6bed5d759c515b486bbee56b8a136bb6ba8a5f6d493b2d254ac6910ad59bddb794f27a29a959dac542afe9272141720badd41ad5badeb6bd5928315c956dabd98a8b35d11b9020e5ad6e1bab95a604c92c476fb94c6d6869f5d6d92db432623c13aba804a6048add631945ac549034e1a0adabb8c20be2ad7a05d54a05293c47b31bdf589dd91cea59a96f0946059bdf4aea52af54f0c995a62fcd3b569972d535abe031b16e7bb3a30f32601699de556b1adb199375acdb8798950f12cc22bbd8ea5c9962b7b029b6c792d2aa18ab61c63477cfe12b1f460e6691d55d86b5a9be5ebb8e233d925df95a916a76a4758bd5bbc4390ac5cd709179ea96f2cfbf24d35361a678ca9929af314f38268da902f215716f880f8554a7529d3e6f4e2fa103bdf319c3e7c2f4d49193d7404d9f739e4e423a9bcee79c5ee764ced4ece6f4505bbad9cd548743ca9ca899f26ee2805e8742b56a7e7e5df77d99df9c5dcd0c423769fc34bfceab732a757376aa29dd8e6e76a8af9b3be8e64475338659c29c5ea732c1c94bd198388c7424a8bcb980d94d543767e7c566f7d5d008e96ea612d53cf9f092cc54d77d3f5e4dd7cd9d1a44260ddf8f0d13efa8f3cfbb08cccf6b7da76e7a7e3ac0ec627ae7abd5caa7cf6f76b30753d5b1306777ea3a6fce20b367aae64dd7751d4a68fee8baaf9b3e1e6863826a858963434757c43c7526cc6f7ad3bba3ee6be6e79d45f9cb66013cd731c1f417a2e8bc899a5f6ae24c0f4cd7a95ede04f266d77ddfddd0b4e669ce94cff79382cfec6a50aa2e35e76b769d0c3cd4a4e93e8f69b2ba724e8f67d2d87453959add0b1d0a1d0add099e7b3e6b4c54d74d9c6fe57d9d095dd74dd4fc6893c6c7b43975f3346914d9d111a56c68ba3953dda4ba19c354cde975f39b4ee6099d918e4767d3a5bad3f46637bbf99a2774365dea9bdec99bb3c8f4666bd2cc9b39e791894257e3a5a6ea9bdd9caf395138ba1bf3ebe6e99b463a9be975284ccfebbaaffba691ae9b3aba9a4933555f37e77ccd13ba9a94373fd537e72cf233070b2a245e0ba7e94d9af9e59834342f9b2b3b50983dbed975a82e55e78a041f1b277376b39b73f278ca499f01876946861ef8cbe0802fb09041c70b30aad02e2c30a5065c78924e0c1cc9012aa848f40a97e28026162045071bc5e00025334754c80b501c8002109c501e3e461c90a3c708a58144911ae0f828a2533389d4609a414476860144fe0c076564a0c02313d3b9b8900076bd0f0b2d8471859182ec6f52f8126c789811b2b8ec1484ff170077cfddfd2786778c2c63eeeee33dea0d23d58b8b7c5ec9e76adb58c82379bd6dcd8a337c7d26e1ee28f82a852f6a76d6732baffb2c0526dc9d86128bce602569a82bad8ae18c1a012a4264889020407e7cb0b81fad5290e90cd24dc5184e0d6f8727022e5f01b87c50502cfc4c0521879504b89c4e37a9156290c3e7809faf849b2390401180cb078506470d8f1c01e04223c337838782cd46dda898a8805035de911c35272ab8a898e072034b0e3445bc05fce0660b2ea7335c4e373a5cc0e566b344c08526078d2e75e4d4731ac20b09362614a1c3e703971a3a35743c9e9c1e558e9c333a9c5a5001a59078353c24aa23b878517e7a5035a824b87836281d9fcbe6c79bdfcde7aa61726a2125034a07aa06a57473e3e6064d0e1a1c29193c337440e9f0c6e87092828b0a4adfed632a9cf0bd6e6aa072bee9f17842dfd14d09a82e5525b52355742281c644d978a7efc6f3bcce4b792a8fa686c7e7a5a6a46cd438aac949a152d34b7d42be9e6faa4cf076e44093c209092e3492c82107f5ed502dd1e1db420756ecfdcc19388001191560318514650d29882f43412e2429826f183de8f9b1aaa14a5d99c1a8e88c1559ac2005207cc014f14202b678c115271841072e30811e700522ca0d84ce41f081192d5a9005141bc0e106006099c18a5151132629a050028e264080c3052c70830db11378e09b028d2d68a0e5c6e5cc19431002962b25e0c879c109a220c1083ac0010c00f1c300620090a18a5111d115564491821080712283185c710228462002091cd1c30e01f0819917b46004226822035db85491682807c74c192fb698020a107c60090a0451802ac60080e54a15a2a123af9d1c9c2bac9862010a08a24b150100031193a1235ec68b2bac40411420f8c01218a080103f74c90203519223af22427e766ce47c7ea68c173440c114514001820f6080024204f14301ba7411cb82c5851eb00c32a03ca94163063cbef8d083952a3e0f28400fb9262568ce786774669cc8e88aa042e2ab4047816e021348f7e3f94cd086c76bc17b1c29743ce68e940ecf8499e32b61e2a019c1860d6ff5d5b8a1b1c2d17163820d8f9a1c9a940a95ea50a8d3c99b8eea52a302155c5234299a8f868a488ac63be12629872296aa85aa51017d3735e677838a7d380fc7cbf9c80420015c5034ba14cde7c23901c8025c6aa8dc889f8b460e9d901da729df4421290197245096e404a0fb6a3e283b43e072031d58c02287797ae5a4f0420edda7c3e321a78e92530b2de08242a570d485841a413b784d721000171368aadcdcb8b9b1850909a44ad708810b924dd34426c42a45e3e19c96be01f89083eaa3813a61d60892030e1e40c3820bbaa8c628824667737a212765e47b52af8cd1618453ab8649cd0a282c1f0b29233a78c0014d74a8001038563e5d7042280478828b4d495340007080d49854787847522610c9a126650455a3a2e115216ae29d50c344085c6a524438482a273b8698d4d038b941129178804b099f8b480dea35020eaac6668805000970a951394161d6039793b73a4d540ca89ad311140b4a826c4a9a1f2a27a89a9409384b687c7c453425dce0b1820e1c2ca85a782265851c6a54602a084e90224447a99b2fa5e3f4f288d0dc7c3ffe85144daae6eb393df9805e98a71d9ece09870f8d2af48c0c1dc9a1aac141532407a1221b21aad6e7e3f381aa001716687c4b4e2d9c50a0f1f1f1a8f1e39da00317b0677a348fe7f34e34b000600011e07b010b60e1c4980b54e00802e06043935ea2d55006002c3358a13205e9080a0c4e5e40415a2ba8d0e3bf28a038130618387041890a2c1d26a4c2a4a08a0948208621175e27907063837aa2890f282166024740c001611630a5f5a3075440029290ce9421c66c86307a308218ce1102084b5372a4262526882f456860408602625e46889470c3a64695e2b1a3031cc05245a3221888980cbd84fcecd8c8a181f331e0870108c00617434270010b5400872a548a10c971e353011640a0a22409119a140a033c7c20030f20c2003dd0d00006300008a32225477edc4c32bc2274637c66be07dd171f0eba1a9cb89831e85ed0b980a6053759742ae8aee89ae830e05da05bfa94a68f9982ea84130f1c13ba123a12e68d9c114e36ba9cb9fa687436a79a8e46a5ea52a953f74d6f4e94d7b88e950946f838a3fbda4cf6541187f696d3338174135ed0f64da06142cd2a4719eeb2af5d5b6db8dff92448be9504c95f5babb31c58b83bca573950b0ca5182550e23563982707799ec69f877bef55f45abaf7d6d7fdb3f92cb34535bf8d4fececdb2802078450c51435aa7a0550e1eb9ee4dc99ebcb57f5ee773850306389eb876eb2afe6f7c5f572cfe4eab86b9c41a8704707c71f1d64d5fe320c55b573894e070bd6dd76e1d9f86bf8676d49f312dd3adbfd62ecd34376876d432efaa474a4b459182ca53703f91f1b1d1c5dd7bdc797460e4e7957cce65c882112340468a182162648811214682180162e4c7888f1123404040458088000d01120214040808d00f900f90912240458a142152644811214582140152e4a7884f112344808814214284c81022428804210284c80f111f224686000d293284c8902143840c093204c8909f213e438c08011252440811214384081112440810213f427c8418090214a4481022418604111224481020417e82f8043102040848112044800c0122044810204080fc00f10162e407e8a7c80f919f213f427e82fc00f9f9f9f1f931e203e453c48788cf101f213e417c80f8fcf8f8f8b85b77dfe1ab1b4d6ee56df2c9e2eeae1a574dab65c3db50e3aaa1e10375a9ea71a4385797beeacf62adda06b7614485db302a81db30ca80db304a82c69d68f5822feee36c66ef0cee53062a1d162f00723781af5c307aee522ad67a5db98c6ff546f1a86d6ef69786b9bda968c357f67a89f5e28caa48c32aeed38afbac426542c051700780af5a806514400cbe58a940e53b2d5d2bcd075974910516593cf1afa7b798b6ff2f5acdb17fd54aab591ce1ff92622445cad0ebe8e86411cb0200592cf957cc1673f5fc4bacb947c75c3696c57f9224495860060bbef067c1122ca0000bba786ca4ffda4dd5f5af6b5f4b0abc60811077d7b9f49358e0e35f2b2063053ce862054eecfc4b57bb732571265b0ffe4be7625b83b615eb0a5a2b38610524e80ce66a73a6331588eefeaf331010d0876726f2549bf7bc5830d11384a927cc7a8abbab669258b5fc11a42223a224a1a22930c4acc0a2e0fb19db29641309db1529d751bcd44945d2e548e61249bc25ad4ac99541b56bc5113ba9bb6948caada1ae4b32ada350ed5a8d4721b16eb286218cbc6527b7924663bd97da8470b588bc6527b9d2ea922a40985eaf5b68c58a06583184fb2d6c728f801bc00a1fcf5567f0a6292ea4349e1e5d99ecb6379b49a1891aa9fb0c7277d584b94f17a612f799c408f789c47d1e719f2ff769c47d02b9cf22ee9388fb1ca29a42dc6710f709c47dfeb84f1ff7d9e33e410354f1c4e471f76fba8edc8daa4839ce0f15388c55b4b721c85ebc96365b709f2cb8cf1df7d9729f3fdce70aee5305f7e9c37df6709f2cf7a9e33edf7da6e03e51709f27b84f1eee7387fbd4e13e4d709f39dc6709ee1387fb24c17dde709f23b84f1bee33c77daedc678d89336d268dfb54b9cfd444c9dc4326dc7d9e6c2878b769ca34c518d719eca99bf2f44c21007790b6434aabedf7ad48bbead8eb1513ab58e9a64b6023457232627c74b1159202ab17176d8ca5e0a894a45c8fbc4fe5850dbaa801175128208a1adc1fc93ff819d38aa2482a71ee8fd4512472e288288464ac7319fe6eaa4551bc4771e34486820b87a20928beb8bb8f133ea020dda1b0e25f6b140a249b6e7b89384063033d80e273d7b7b08987c7064fc8e0892a3c892b892bc9ab8ea28d5d6cf4c402dc5d8b99e296423a7bd1d2a35a99801a6fd26ef26647f2466562d574f6e4ad9cfdae3517467a10eb91bed6e5575cddb8e86532d91fd969e18fe428b5327916be85af95166b7d9227ed8eed3a1ed921ed6e85230d6349fe771d3366f23d3defdabacc3299ecc1dcec5d3ba4dd8f6febb758cd931b331deded9699675f1aca467acbb848a62fadb7df440fea8bedc5a4dd4fe99ec9446d5f96db56f6d96a8c59a4ddd932b1beee92bc69d9488d64b9da91acb4877d154cbb44ba92b93d5abaeb925a99d41b4612ab90d01078fb8ba73ca8c54ab3a5a4d083b2bae5758ee2462af868a455d36cae4c8fb738625b71bfcb19b638fd15278b5d7cebde36d7fcd7be2da4e16bfaba32e58af43a833d354b0b9b5eaf8b6f371cc6f4eb750b9b42004508401082302ed7bf4230524b2504408e14820f4810a4265cc064372dd230b1d25bc64cb4d5f5d626af33983108b6707f6d9d419e5bd8946bec62ab63204802821ee2b54beffa57aebacc952c9134ac488d0f7c0135b5d1a3123eb0c4dde9fbe081315c8b437880094f80079a40b16e3a96e148c3df14c9032df7ca64992803ac36ef4fa279370d21695db328c262a558ef149dc11e9ba6b65bbe5e4ce86002e532d9ae42dee53680810e88717741a623fb6bbf7671c6fdbb74b59b4a29611df061d581121c7cbc3f081520546ea19598f87ab9bbe72b0e9080031cb8854db7b02956bbb646b7e6e9e1216fe26eaa3c34977437d518cd25f5b901d4124270ff17ad8ad58637d1838fab451f812f0d30d3a37b6c9a3a79bd429bebad3552e73cb4643444d28cd38017fe2f9266dce3ad811478a5512da4e991ae95c99d22052986d15226519290842a49d29ca46f5da24955e72ae6c45a9413e9947d2b122c03fb56260c88712b6f7d59c6d59654c55bf59811ec5cc9df97da4c999ebe164a1a472a44a4a74c11dab8a8ea299748bc2566b271d15288a1ec1a65e3225d2b13a48d8bf45288a1e03094a45d1a2d85d5262422c19070914883441a94bb340ac649554a6e93b7a13ace2cd1c6454bc619bd53c4ca44bc1569ca2d6cba008e0bacdcfd5fae7f6d5d45122a99dbb7b029265e1a4ba20689338680040e5eef7a5dc9dc7e570c8b2b24bc208103125a949008ddbf49b43cb5d2dee5fa77bdeb6375e38bc4f7af5bd8c4d3730b9b7a489e0ae4e08e7730a20b9dc150db5b4f4fbdd9bd6d2dd4f6f67ae9d7cbdd9b7c45812fba6756ea1e5b58776edb4cc99e1b0ec15969dbb6d6d3f3d2e4deb6dff433f947c49a6bad66f32e2b93d5b7d2aaf87445811a285083fbbfba1f778ff98a02379bd62c139db50857ef4901365c2c2e571225497ea749b4ad4dab505e52b2d1a65528ffff170b0ddf24da58ad8935b614d2bc6f28158a0665648a2448be85130a9228f95bc7d8a6d531268ef844046f069f16fe1991e2b1b5f849928459cf94e488c010ee5e457cff75ebbfae113fcf431babfe24491eac35b18601c2ddaff8ea08325786242221d8114ce8917c9368c923863c97f7ad3d24bdf5d49af7ac478f380cf7ad4ce2be9529b66f659a9531f21636691dd3a2c5545eaf58ac26a6cbb1bc95614cc9eb15ab379a69b92ee11c94db76b47bca925b68a596b58c81bc8556b4ae4875ac48429abcd1ade45d48483266328e5468a442af57cdeb556f311cc6741563b78aa2b5c52c4963a47ebd6863d5af9792d08eb3f28824615270d2ebe5e3357d9a4b18129a4baae5262ab169eae45a6a13ba953716430019bc1f014d14012f7c8e8eff1786000737183260be80e2a5590463e53398162e2a420abdedccda70268b2035b615e1a32d2e22820b076f992d115fc8dab5302292be8a385c1111e4005de4c716a76d2dd3f167789cfd686baeb64b34c58b98298e2c63e2ad3a86c5f20047626c87f4d603fcc536b6ab1e220c2f63758bcdd8b64bba94e92dd74d7131f2966d4a445a6d30dc64caeb35d218aec544254e445a6d319a291924563dc5b6458b132f9dc5c4aacb216e0cc0010765d886937d6ee6aa95f632d26e190dbf4b562b2d267b98d67414d29a8e61adb4d8486ba5c574a924d25a69b1aae9ac8ea4dd4a6a6542542b2d76b1d5e5185edb446f315cbde2c53303a8dc5d14a9106484182304178fed2ac4916b1a1322b6ab0ec24c2c0829f6b5b1ca44eb1844111b8f3a1613471c132f9e8936a66d10404541ac2e0efaf2c5972f5e5c7f1902c28c83bbea1cbd19bdced525d18a1a0831977e6e068417100684cd41b15e8b9580f8c18c8fb4d4525f5bf10727fc072ffe83951f5ab600633858803005b0e12aad4229c00b3e7cb1e938e23047966188bf8ed6867b1c1e8598f0c18bbb0f567cf07190f6f08578f1ec73e1b5385c2deae18b6f2a5af1d270e351bffeb1446d0fa17bae772c992ed15f18aede1e5a041803cc22938200606204106fa5b6696a23c08334537266f5d3a328529c0cc0cc00c2b8def6e2df03c8b752d7fc7a8595e9f512b78e913aa6737529d75aa3474603f0924518eaa5c98b90971ca058f7b6b7fa7526002e2e158018770170710705f04229801c97d631ccb32af2d045ce38496bb1ea3276e3e10b0f3eba6cbd2ce323999869a8adf85178f0df418bda0e63769861071fafb9dcb7328d55dfaa6dbbc45af7a59996b5dff8ba6c6189744b6dbb5cd1650877b0766d2e6f9e9a3f37ab4c23d6358b976efa34dc56bc949265972d5d5aee0e8a23be4fd29a0360c64b5a594b2daf6d0098f000d8dc416d9972d55f6fcd8d36d38cc95bddaf6d001ebc96d67408827b8d1ed52d16e9f54aaa354ad61a2575f8e2b932e1980e4a99a966b26eb15a491424453a977866abd97a633991d65ca3475bd3b16eb1484a94d42d16e95d758b452269758204489029785fa277019524ad36264cc69ae88d6eba44a4d589486b9193588e8e352b4942b22b52ad392928071e2e65b867c1f22efc5caa00a30859e1a2012e5d3c0b9617ed5fc1024611b222668abb38bc64df7ac3515eaf241cbe5c64a8ba76ad4d5327e348856ad7e23086833830e15e6f58e3e00586831577c7d58b83ca7df6fbc7b57fe46fc0c271957643933bec86d6915cc58cad0d666c10e38e2fcc8626077fa7667c6b7deed2fde38e2315b2e1c8c18c1fc8d759115fd9b07270e31ba5062ec01ac48c35d760c5c11cc5e52aded2ba1e17d590038f381a4ce056ffa6b6f11ae96a338ed934b52951b26978df62e627268ed8a66bb6edd81627bc6e11c2eeb1bcc5348dd990d49b4dca5809ac89467957156f8983f448997026497ac3998677ad99a663b92f1ce3fcb9d9ef9a93021473a4fbac8a39973bb88377930d9abe90b95dd6327d50bc38acbae985a61a3827341e7f97d8b564e87178acb3dfe50ce70577e40ec2702a702763cb446d75a6ed8de90b90498c3bb843574c5e9cc909b85333adf522c531e598955f3848afbdbda6e517974c566a6d93c8f273dd74dcbaa4b6bdc9d41bdee2889d8823b6ed267750c6644bad99b65f700765ba8946917dbdd15bb457e368977a34164c0fd35f9c6e2bda528b1d7fa56d411a884797b7a06ca68a3f52bb6fc5fb7178cc4d94b7ea9ab57d8d8a122461a5526ba6c570f5be5e4964b9843194ec24bf16339b5631a6c509f791c6c85a97625ac0389845a6c5368bedaab5bc3c56459a6b6459a58844996829c450442b455fac69cdb76ec199566ba68955d7e8c884e6dd34a46b74a49125f871a421919f52897ebd929034e1204d9b7010e9c364ab18d39454f938d218179409dbb6380c0693b670d3193e0269186712e31cb8e87ee1e01222b1285797a4dc315797be6e6a43ac35bdd9d73fb67dacdf5599ecf8bbeacfd5273a579fbc5e49348c2f90fbaefaae3c579762b72f6e4edc484d7149e2886f396c61a6558f66dcc13c3ae1e068ab5dab2daef53fb696c65812e3eee012175f12e24a44501283efb5bfc7528f15e9c1dcf8ae71acfa52dc579c521677a5d690af2c196d2d182bab21cedabe6db9bbdfb08d0b91dede26c6bd2ed16db3921b71f5beb6361e973e0d8ff4da1bae895193404de60eeee44692c4d58e99d6afb6cd431bab1e478bd3b6a672f790e605ed095a1388f41b8b7469c44795067377508a388a23a65527c0d49b38e20ae460558958b8bb6b2b7aa933d189bb8b2b7710872fcc57a109dcdd43a6f0857035c457332ca8ee993dc0c17adb76e75d2d2dda18aede19154ca341106b6e1c3126a906e88caec0d9486fbddd705833ee656464611cd4d6e6ee2ef37177d734c6037707452bf68ca3c58d193389fd107b61071cf1d674bc4660dd74c4ba66aaf7c74ee0d143010016eea005c07607b52dafdd1787bba9dea67a014082833bac345afdba44f76b3bfb24777ff92a4b081c94d58c43d9b53599ec66b334558db31cb97b961c2e5e3ad28df7575b121633221626b070d9148b15108b0a94dd6ac3c972ad5d3cbec657b8b812e6ca2d6321253b3e3e448a0ca119e99de9d1bb603563a1d6adb72b3b1ccc35b7b10d370317eefe9786335cc0414d713370c1d53b83135b105fcda0a2a20c4e78ed5a199aaebdddec6b4b7196e1054dc32f830a57ad6001663a96a1a55648e7e959d2747fcdf8f6197fbdf8f18659015a1acba0a7e12a66782ebeab2a4c3815291eab7001c53a8e35bc34845579f76d331d4bad6d21adaf6bd792241d7365c28f711b8754c8b82852189531302a3edcfa78a6c457548e4cf9a2decfd15b93afb65d9bc2843b78cb5aedda904e91b9fb1495942426c02432c9c71d142d2577aefddc78f1b792544863f6adb71c25471a5aa4a6fca4b5e95c2fce68850424858cfbae3bb4796b2961745315afc545524877077363ed5a292e7c51439c495ddaf6ceaeb9d66f7cb5ad23458ac189189aec489294c690c3c1aa7fd8b6c5d17df1d117b97d34668bddf81e35ed23215f1db978eb571afd8c8dc6b8d71cb6b9925f47aae9ef9a7b232f172f656c848d7250bd9beafd7ac361ab888cbbfb8515e5a2a39d3acea8bee5d78c6935b75eb498e9b5fddab54b9ade8a543a0a17ee3e5aca44fff1fd9ae90bbe8a0206ac5d7bfff7b598fc8d992c135f4571e20e5e1cbe4bb7c4f8e86bc642af4b5c2fdd976e7d89fec55a6d49511edcda36d55bddf6bfda92a08ce1ee61537d6dff57509cd09a9256d32428a2bb8365ce387cfd838e2494264fc47030b4353cd2d7f447fad596b4330ef72df18dd6b114ab2d4412291e9732c6dd6ac331c96d3bd26b69a3dd014d494838d71996c26a13e241063f311e8e686c1c690c0522ec0086a4370628799286315cbd434e25078777ef6cbadb51541056503e96667fbca816b86fc57dbd61a407f5acd4b6f0d21c849a800d0f854f8cdab53a5d8d7b47a34a1de144bc7509837ba772ef521dcabd3b8d91840e4fe06a510374f072ed782d950fe4e8b0c43d278732c05a62817911a3a5791f19a9c53fbb95397cfa3a86f7b5b1a9c30774b5ed4cbf32e159c64455c445414baacd492f5efa7acd6e65169a478c96ca76798b6d4d475965fa51715c78e80c669c83c304fcf57ab9779f7be7b9fbd7753f3fe00f4f58991e7082123a19a80d4bb4a61b84dcf175efe63ce33ecf30c37d96e13ec970f7318ad0448e0d5e74066b78abd6353681726cb87529a4b358b5794f22b88fe116a8e146e50949a3d4dc9d7a0e0d4fb897b799586dde3678f4701b3c6edcc60e31bc041b3b27b88dd60fdc46ab09b7d13a80db68d1e0365a57dc462bc86db46cdcc60f1db88d1f2d68e1c7bb8e8f116d3705ac1a8fe137ed5ad65ebc387c12e3b10a4d0da899d0d480fa5692bce1905eda8fd45219b2e019fda491870e7720f874f9149a644c94fb0cdc51702b80fb1402de431eb6204793135fd2011d7531dc13fe2e1a2eda5bba1bdcad5418f8e35a068220869fc027107ee04e450e93ca0766dca1c0928a8c66209262e4645f2c8b32a52836d4048684341425b6440aaccad1949815581459f552e670f78d85bbbe653ea2957c13bded23dcebc5b5dde42fb1e6b650289b68bb76847ee3dbfa1c5dc6eb654b22473f51b3b397fe5c860feecea3abfbbf6288f278bfce60e6228bac6bfaf6ae4cbe9057f9bba2e5055aaa68526404e58d8c92fed5e3b368918016217c70ff1e9fe58a96981619dc8590e765483a8a32f4af1e5f6baf1769013124180741f0758f28e476f71c12897c42baf07ed7bf6e38d328f9b93b06230793f17f611bee5d7803eefebbc4399807acc5fd5f9bda70effad8dd2415692c17e65c32e702f98d4b732be3ef2a67af979e12a4a9c6eaa6d5e67d73e2ffaadbfaac99664c73d1d0d0d0d45c1a94dbd98a74db8c7bd80839230f5093d8d2bc84011800010720b034bace204dcdc52f5efa17d6bd64b11814549099c10c4307358ba3b585330c7797c1732c14d7b526d6dc8da70764dd7a89c4295b1393466ccab14d71ad04496e56c3a740be6eb1e57efa7addc2a6da18f77f61da25d2e9e139689e53cb519762230d71290147c27f709f3c10228766e507fce11929ce96e9563076e02ed65dde485a6daf6f4a8e78460d6bd0ef9d5ae6ea524be480ffa6df54af1962cbdd43324e74c3fb52db512c86322165c50d9c3805a106a1cab591191915dc01ee80996ce68ef87c418867f11cfac50fe8c3b331ce38b8c137cb4c1b7061032ebae0628b1a70b1050d66e0f39b362d58806f712d5ae4c472c470008645ff8a65f1a4253a836115f1b579fb04b7e49a704ce5d6590b89ef6d49c9da6a33c860a50a952949485262382a8a02e5090c4e9a30195a2214043bd3020b3bad1f2ba8e0a3074be75340e1041e3b749890a3041c6748b831828d9c33ab1a34706e6c6a6854a9335572b210016f3297c32c55b8bbec93f02c5f64596a56dc5d97599a00c9645976e464b97177fdab962365ca81014992a945093c50850a7c629183e5bb1206165702b06f450aad5c2112a5883468061db87b138d02669191b7d08aeccacce650579146c33c553c92a34bd8c7c7e7a7f5d826f4e02e718ede464b69b9712c6f56cfa20859b1ed8c437ba33727626d296ecfbef2d023f5e22141860c2182c3b9f6fa56567950267bd99291ecd28b711bbb68f8a65d952757269ce9cd16de3aa378cc5192d6baf5b536490a771f47faf58f247571f79a364ab2d203d7257924b7c9db8f4b4324324847b883b9a4fd912348b81c24d991712c69483efe52c6d052a4f03b25470a18f196333c06e548b1e2e091bfd19ab796f2eeee8539503c8f210ca65d9b1383cd9de7ed16fcaf2645444552605572620072f75aa3242d061eee630cd3dd6b8d923a4762a20859f9cfcdea5268938e6a70bf854d2bb46a37760b9bdc45a21879cb4e4aa39c2394bb0e2212eda9653ec92902c2dd48742769b5fdabc88b2215c090c3ffb5847150dd62916af4082929ac4cb9baa4ab759f3288411414b87bfd1ff70983494627270a1272acb6d80b40b16a797029631c141a783950a4e440097aa284fb6c4116fe01e11f02dc1d009e034306f4486b99c7b124400e0c2d5dcb7402c0ddade7106121c2c21de7ba651cf3d3ac4d8742402260109eb08a38e4f9d19112c3cfec26ca9dd8729c2071cf71f2b957b1add864887fd1729a58c969c2e35f596730870914f7e90177ef628e61a203ee73031c5862031af0b984fbd480e72cf1e2b56b8fd42e51ce12558e1010724e48c2dd1f073942399cf4c3bd3b93238472d7f2474422da255a4292225e1c245e1c2484ab454b70b54814ab28c270b508b462bdddece764af6fc6626db24c1ecc52b3b4250fe63485f2a058c39a7333cbd4547779fb3a93692d7b50efb872bb952bf92e1b6a22f1621c868271d20d672652b485829388362ed2759cd99a1d87709509c6494a8a604a845c1c94a34447248a02ea8bb77dd738b3fa56fd5497fadeaab12dfc5c62191ed455b44ce5a69992247d91051670f46bd012c6b6cfcde8acd47f3159beac9679cb1eef2a0fe61ca940ce911cbcc76ffa8fabf756b5a649b76ec199c914b156f1da50572944a214a420b1ee6ba388d5a6e98824d64d6dde94ac52a688485b63285b974bc48ac3e21d7a8dc979ed4094f3d2e2ee7aa4e5b56078bfdcb8e8419d7af1b62566a2b4a74f1babc64bfe55af1dff86f7c6410f62fbb9dcb596a3375de21c125ef24f9f2cff5612bf96b4cdb9c439fd58cc95a9e2b09307c51aabb90cabbe5656695f6dd58573dd629f85cc028de8758ca40ccdf0453027492f6528093624a5c90f057d12d294280fde4a62eaa140e76ba8e1c5fa49947c0d35fc4e0be7ba25a62d586ba63da8f1173db85433cd3543ca5dd883b694c99ebeaeba94e532b55a267bedd2341aae22cdf516f432990c36fcd34d97bc4b3c7abd0bc9cdda90481a25c9ff3f0dfff8ca64b2a1eff12379a34d95c9ee9056916ebd4bfc340cea6d6ff9402ee0ee4f3c07c88f1fff126dcca569357fc6b7d2baa476ed8c8ab7924d4352a0e4fc30a17375e9c70777077375a98597894495cc25e5ea935c5da25476b1ecb5b5e170fa3759972ad3d77146b5159f86895effc8b88a584b6babb3af5d8b5f571bda1bbe38ac63aee2d5b848e7ea135c94ab4fc42522110c17d130ce47392002dc6b57ac4b99deaa9471b44f8aaa889403aa90c363460ecf11d01024a4ba44afad361cbe4bf4c11c0b6888d6ac071a8254fb1fb325605dc24c21dd54a4619ba64eb6ceb6ace2885b4fd6ba747bad5f7a857fd046ca6ab6edd77ba7f5558f94c9833220414a99ec3715cb9cf4b27aa337aca496693cdaf6e3fb38dc22cdca769aaa78895c4a929064cca425ab365d73dd9546c3da5e6a0b75adddca54473b863caf43bbb50d2d09435269b8323d4d6afdd3282f53928444761369cdba54a2619e261cf420cfb54fa9e023dab55fb5c5d19a77f91a4a322a7a70dfca34f499922e2732a4dfd13f6e2dfda08ee2cad5b66b0defdf2539d29d6bf51222b1e25c67b8b84868c9c5214e22c2495aac35ac2452bdd1a2b092487eb2418e095b6c54bf888b2890d3c3003c74e9a125a78798d3234b4e8fa41e2ee4f448b243e624fe1d155adff33b2afcbb54f81789dfa5c2b7dea53f4b1571d8c3841cd6997fedb4e8e7b092004591be58c711e6ee29780eab4b0ecb8abb8335bc942757162b8795c3ddff7358a71c9d2f5ec9ff6b888c1c9d24ba99010c78393a5c7077239ea363c45d0b4dd483d9f4d2f146095f7cccdd41ed9e93c2122980f17fe90cf6e4a040840777d5b9bae492e55aa39746f159031d9dab4bf64625041c18a3af68c2c705393954c83981749d6bff07d3aecde1f1450e0f9dc3237c29112b49dabcf5eba6290e49ad656a13da5832968b85866586050b1616962baed2711588b2c9d1718506f2f9017dc01f9e8bb552ac8ab9ea9ac4338eb4e698e0e3eecec4057eb492b84f0b4c2594e4945081dce843d2ad6f76ef712ca702dc6702dc270254138c3f510411f30042789183e3c6b66da63d9ac4df09765a4bf86bd889bd4bb756a8e15dad5c5d8ae566b1582ed36b67a0d6bae6dab5a824493e97e187c4899543820ff719726e64e1eef89e7c726ef4e01bdf7d2b92ae4b60484c40baa918db557fad480fca644fc337bc75193eecb55df2d5b66dce95090b59c125d170784b7c2fee28ca94d9d74ab36315bf6a3adb21a5d5eedd5583a00e5f5f5b99a87ef15291e211a455531ccd7f1b6bb669925e3dd316ac81f55dae244a3e0def913eb8ad6d5b5b6873bd551b59bbd6dec252c45908578b6457ea0d23c95edb515f9875a1ca83d5e62dde708958b7b63ad723d9158defd3ecd33a86fbd6524bd51787a1bde5ed86c32a8238c4d5bbb30c2d31127abd74ae2ec562e35871a4be92e5ca8fa3753d0fae95af2b93ad5d8cf56bd88321d534d4fb5a1a5652d78cab178ff4ffab266b5d7a308b6c096327bad4b7ea8b8564577866186f2d668cbb440f5e0ae5c53b4584891b17096d8d9dc0362ea29b2ea152b3411827e582c47aa4a718e99cd30e5e97429a93909cc4c41a5e58ce9785bbebb85037dd48b56bf7a54c75ac525e160b63bbd6a612ee73889558f7adb75ad57fcb1c3ad7fed759103de47c9f3b92945aa34747606e94e9fa7ae94d7363ddf466b7add5f156cb8c693bb94b9f665b8fd444a380b97a2b537d9778c36bf4e0a56119eee85aa35b83596434a35ba134d128b22b9f9b699a1bb7ad66c791de5c1a93557c8c6b0ffb9bad354a6eb1bad25bc5edf05c7c5be23d9a7289c4235c546bf4081749d9b8e80c187750e80c69ef52ed5a29677cdc5d26d2ea044976461939918e365d339333a670f7d71950dc41bccda8c28c0e00a105be587322ad52f4928b6d4d48b4f4e85637d12d6b3548ac434255a451c411e323b11289f548ac39575a1d674764f0808c1090318e231502b56ea251a23c58f4221128e2a3faa058bfe6fff1f358bb566bfab85d6b34fc58fc9a71f815b773cbd683dbbaea48f5acd4e358436d6f4fc3af7321add57147d3305dd274b75e674b360d8d14572f2e1a47bb9174d5b46abc0427d5aeb56d5c74a76c5c546f36a97671aeb24b2371c448778a58439bc95c998c70d1a523b9947115d1622a4d43b931d3a1ba29148c933666b2471b175d6c6bde05e103b5d4626ff97ae5489cf7ad319af7b5af214cbbb7d74befa6fa7a8931c6eb0cec428c1b3aa27b310d2084bbc39a6894d72be9afae63d52310be80b576f1ad11d15c5220cc000420f7f09679bf6b86f90111641b8f48b25cb7606d99acf896de6ad66190c0e3800f9650baf64633258b0409f263754efb008c0f7af860849d7194241e9a4b4a7349c3a061c498c4d55bebd2482ed1ccd3be9549b4984aaee3488578706b5f38e1818c07463c68c283170f5a707794af78a082bbdf422b541cb11330b870d92e49d9143076f07a310e5d4cc05802c60e71bb3e7c699a4b7a0b9b30ed12c1682e61bb6988e612760bad08d5e03e69d8e23e73eeb309c7e43ecbed3e7576f7bee8e2c305ee3ebf28a70bc268f2020fe0a020c3ddbb994d827d600303e8c0dd3d19482948b4e0c61920b8fb27e60114381a0104521471f7e98210578cbe0c60014db8fbec610729ece4131224dcbd8332e442991e7ef4300477f74800028b1e1401a68915b83b2a0107186366f13ae30577efbc084210359451840d8ab8fba700590a01362a94b670f799c50c0814580aa065063c38c421ce319a4b0a46016532bc37c5fbb3c83492ecca573de54197956d4a7705913e972b93ac662c045610b4246c1ca910147097e4b5b25a99e0245949eeb2561aa65d0bd24a73bd256147b65dbb75ac9516c33b16ab9516c3b45bc7dd545a1256c30b565b1228a3e1af4d5e08ef97128be1f668cb59b5c9a8d083b96edac556acb51a4d026bce8ee42d635aaea458b596c9b4aeb7d437f16fa675c498fc25cc74ad6d572adfb473dd21c51bdf776971ac96fe3dfa5c8ab7e2d1a51fff0e6bce986897e358d2aa98bbf42fd64aa0ae99ac59267bba8974cd55bf78ad058b8c9060786ab34c26f49684d15cc2409a4bfab66d71196b5dc37a9fe808f6606ce3518362d5a5b67ad3d2951b692e619f310daca225e9cb82643aa6c16bf7e7326502edb54c1edcdadad7f52f2549982561558c404bd2cf7529635c8c46c3e0a6d1f0eb5c7d025a92227dae2e7d0b8fa3d98e7549dd14245ffc21283021a45b370d2f0ea53c58bb366ffd3220da2e652fda91ce1c6caa4f2dd38b55e702abc4a884508a06aa9e059942ce08880000100000631100303824180e484442c180380c95f514800376bc6886509e8ab324c82185943184180402000000800001000068db01d200ad186d63e854cb8a0619ef88cac2f1aca8e5fcd9628ec015c4672204c9769e9153bfb7dae666ccee06c0a004d0e0b4c42f10e02860ee07d52d44429cb622fcc6954874a3bc095a1034ed0f2c203b43202b56bd2b148d2ace3f9d30a506fac261a2b17b5a964b72c37c7ccbbcb67689c1ddb5afbe80389646517dbdd7f85374610176fce4e3bd840272f19b181c9b8f3b6190fe0617836036bb2e8ec02bcb7048afe403b76727c8ee190340a86fadcd807ffeace31fd08c1ef3daaefb50e66d47cb0ff6d1bfcc13c9ac5c9cf00ea19f40114b9a9eb8b752229c3fe1104a8a280bd5fd25d9dce3a30155d01abae39041fd660a797c2ef2448ed21e5fe1be82e27e4677493ee41a2fddca13a19dc65d85b2e35c36930cba0e967f07be858afda57feda7b4efbd3c1fb0726b5cb0d48c63d91ac3a01fb3b61da2e4cd72991b928373b3930f294d41f02849ecabb7e04beb34b9aa64dc89f6f94ff3b6a677a1eb79a0b4516bb15717e3454d07e5d99429b9541321da8ab8ae9f34ec3607d3ef776cff369eaed24ad059f22b883cec9c15b8ec59ba8ffb54666ca83bd0ba24b63f4ee0c7f5cc1b9d078407997599035dee4f2790c5b56a2883beae5d99fa62f511d5ab5de60264f017822fee1ba84c68a0288a793cd0151c345350d07bb049d435ff2330f8747a16a347485fad07ceee48656016bdf641df3e3d9e7dd678a1ac406281442071921e92c707259e013cf6d1bf40dbdc829b4fa0d0eaa60e97f331788339d88fc180759b9bd9a3befa907bfc6e548dfba16a9af5df39c863c4f3ea9d36648aaaf003485bfa70f8ea75eeea3fb3fe38d3b734d8e45cc1e2869299ea459842bccacf758695e886c4d05d9051bfaa06a6578afefaad979da72afebca40c765b0d23ff342cfc7988fa0e2c4d88a2d0eba3253f1dcd3fa4bd910dc8c7f44c838e4241d2e11c9c2af2ea8ca7478c5221f74d1fa8b8e33502dc2f080b89190c718e12206da557cb463b1070de531a094dcd7b2569488dd1978c63df63adf5208aebc71bf5d306b5329be4a5a0a523152295b4674a2fa2910ff25ac05ee70fc99664e277170e9c8431d85920b180e9cb2bfd1bd2221397dae90052e316f5fb9282e23759d74cc5f036fbe3fab98d4e1b5c775225f7e72507f6bba9ffd58e9d6aa81a640249148e79fd2f138e4000f4ed11f3fc1cc0ed19caff55fd53fe5183bc440b52fefc9a3245f3ebe842ca98347f3fb0689e03daee50175b2fdd3c5443658014bb51e38a449dc3f4cbe39a0f4baee06bd20a06e98574c68de0cfb4b6eaf2dbdc14458aa565e07a027b47c552ee81c69781bfabc58021c2acb136b72e5850ffd9a6f8ed81a7edb9fc4964006103c68b94759452b4c742d008dc111e0c1c4c63074e6559bfc54a712e1b5306c66a0f34ea97e3e9891284c4884c0a732536ed0a964c168851855974bd67298614e4c17d43d4c97c89294d1ad7f705ddd42a3ed89878b2d9b49ee7e8714f2e0901e5fb2fb21ff980c6ef173801deea332f975ac36f76bf66a6117ed2e5050c762e2ad60b80566d2600a12caf71126e62b5a31a25af73931952704b2b173bf6fdff59f07d61e415e3b0cc659b399eafd1e0105c2637162b29c13ae477fd84f5574a34ac2df54d85d820a7a2eec075f3ba8ec3f706441eaab6bf019f06dc1b2823c0138d44e784b02865209d1fb34ce09cfdba6e266187ff63d8bc0b6ab21bd2ad20fe5dc0ffd2019b81b8588ed77e6c7b6b1d325de6a035ef0805753909b7452287ba6640c0acfd19a2b5337f06f19870e4960b9e7843d64d1ff944c953f635ac5e21c71ae3dfb8124b763298d500303abd12a1eadc4b019b37e96cc37eef5f82b8788fdc00765a2210f661b5aba2d9041698178c7699744fe7ed5e6f6652365d3b44bf229495a4075cc0cbdbfbc00c73b567c37728adc71e4d12397bdeb72eb72cb07b084385179668f1e5790c23bc21e93a4101763b4e25ae87f9fe85a5e907349580c99e7921761d2726dcc72cac11c976fc4c3a6f6dc8e9dd0771f76d929b46fed2d220c093bedf04d00a6b699907cce98c260a11dec3d3e172887c80823bc805fefbf85c3c6f510fb2a6953593ec3df69c66bd3900d7c9734314a6642cb4c36ac13a90e5dfbfb5c8bc59aff56187c0619596c11d21c28643a4e23c12a4043dc0065fe6e7b993eda4bb855ffcac6b87fef183f3b8b4a4e9af5d18698c02f1522db822d5ceaf9c2876c3744f0a90fe9e481ef4b871e4ad3d42215ab5c18c28fdd250d5ca75420a2ab6012cc50526007dae0a8b93ff9ccac248ec916a29ef0d8e9ade0225328552c1fa384fd069b5c61f12625a46484af7c353e213d391b2dd9157650b362bbc875da8809d2e95c3b23d531d437fe50c7c5ba3ae66015c35765bf65bb25cd26da54c6bba6de413ec49c65ec45cacaf1a27cbb26697d540919350cc7b66deb1570c1f90cbf8a67c20cca171fc577177c8c0eee5adcb80956072a9fccf77eee4b51a50a5880f9490fdc5c26d8aa5af2e8eb4aa5d49e9a730a1f82ce731ce223dd53791ac8fc7e2758abd14513c8d05c799ada12ff2d022b497b124bc154746cdb4cd12768fe20ec6233bd94df63385e37a2671220721dc1f45676ee16219ca4a9ae9fb42a3ba1ec330ff84f89fe0cbeb29b42968e2c1d6c180537c2e71ac7694247d1ea4bc163482b2ec20399f251c67dfd80223158174b9e88f53a8106a3606574bc9b4336237d3b279456ab9404d2690f8b19971b1f1f7165cbc717487af3de0cee3eecced9fe9c9dc4d35f2807629bef111c24030d61d4338119a4995e2511603abcdb082a2ac59cc05a3993ed1692b96bfd67e04bacb82252173ef96ec4ee4a2211d4e05baff800993990afd2d7dbede841f47567ff57638a969eb09091bf81b76bc865dc9c91f3fc15bf1a80ef4ab1f19043ae1a1e61e757b2eeae29bf592140979f13ef16dcb4bc6a46295896c1ab15a97614a879c0f5d464e70859472c83e0e01ed741ef5a74d519ef605048e9e5d1e8fc1cc45ced26215894e88c1598a38352cb2c0846f7282453645e7c4903bfd617b02c139590dc8f7d6461e1ac5e0a9c5c2168ea5e1c0a8c9712043f8605ff6c2020aaaebb14aaf836350b5b5b7afd26a8bfd9633a1c19648204c039b01e71a92ad3a4ea5e08848eee2da85ced6fcd3a57f7c7e489bfc8414a6307efc2b3e3fc68bedd8d5a6e49c9ccb673cfd019072a3877f3c2276b94bdd72a1eab64bc46678f87860135acffd44bc1ce132caa5a31fbf4644e7e6c50f476ef331a7b8dda90d697cf0f6726a03363d8be96976f4b1cb7bf0cc9ee6e03d328118fd16c0ea5cb8ea775c6af9f6fc7c71e658e30aa4e0593f563dcbebaeb134a2ae0ee808961d7167ed94cbcfc6d06336df62cd4155c5f7f0eab28df97cf8df5525f7b7a1b6ddae959b77bbe866d3da04b6d1939400ced0c9e3929a855aa5b1b33762ef5c14191be6abb69a866c54095200329a552e8421cc62b83de2346c88b5c9518721ef82cfabe55bc5adda391ef9fb5a113f4a02b36d76138963a5f8a5063d5104834ce4ae173a41c196135111890f617bf81848249b63caffb6ad30837a8d8c8065c4db8ff7a36b3a9fda3d92c26e52708c351b802fa53ec46027fbcb79ba66d18a80e4fd81f0aa76c16fcecbd04741a677402da0337eaf7876be781b23c387ab11a8d40f97888891022fbfed11a67616d98461046ed44db342d6dd519717bee8d6b6ca4fa7b21a0f06a006d0d6e7962f085703dc3b5c60f612ee2e291b16c45887ae846698e543f1a0c05e466d81731c249782185eb1e412d64d8b4783fee42a052b76faa6ed8216770cd92dfeae78b3198d1a85560107ee502529b6dce85a4bbd3d2edeaaaca2658eda5a3b05749634320aa3cb127a2d93166d0ee315bfb584b49d3534f01cfd9ab6b75aa9cf48faca20f9d4ee209eeb12e09b5d0b1838702946e7806afef9172f00c592d3c675c3bf1f02dffb5d86409acf942f3fdfe5f1a5878b1e7583d6f75191df9a442b5551cedd300024f21cbe6e90acc9fe4633da5731fd1602fd75b74598743347f4c091b2acbaebb775f7d52a23b5cd2a1e8c3d72fea186cfed63a27430d0d3fc40425d73caab084894b0de4d6f8cbf31653493ed1793c9ee6d277678d2de83936a96f2d00b4015517f21d055fcbd0d9f1cc05776c914ed87e402fda946922b671e105c92e84d7163948b5bbd87f2adfc68291ae49fca9b63c5bd8ea5ab0ca452065edc2043fa81738225dcefdd80e64cdd9d19ce2a0824ff2bf5c2e46e49b0bac1ace8d8367e8152b1f9e2b03c41f2b3f32bebc03a2d5595f067492c7124618919f139c99b640a3a2370890f4998ddc12abfc8f95fe38effe0d0ae1f464d2b0eca99e616f1ab80ffb3edd1d0cc10fe994933ae414577460e13ce27f4ee60f0828c7d0e88fb7923ad2e49fb2487fe47e72fcc46a367c04c8c4b3306a3674be0827c405a2ba142af3739a6ad869e793cbec29377a342521f7a08ca57aabfa5c7f99ef3e0cddb4893cf40090296c3c52d12d9655753b5d55eb79a55fe686caa513c5f20e73c7230041efbb9ae83b01b9d80195970f2ac8e819cf4e0b11ca205b0cfd5c183bf03f6add664f1b8f9472149af265c7c0c786f2da63d5b97a4b2253fd5315576bc4f5c544ffc9c27d07bc6cfaea77374cdbc74a0553bba40d4a807769bb4c08fb2f29912fe41d89b9291c1032301c183492a782fe261912e30a20f61dbfa83cede6bb4487071da8a2849bc49ae9c8dd4fa873c721b2092ef9a0349c49e2ee992d2bc7d8376549857ba88f394abe24ff5f22b3dd2056b034072673d98eae908a448ff49df08282df624b0c4780393990dd04acd8199b4018d66004c63424edf01f63a887d57ff9a1f86347f2acfefcfef6720e67d1f4e0bb33f19a92e2509f033edfc5b9094bdc288c1168e3acd056231a39c81cc118b080ca0d2387b799b7e370079c247ebc24efbf13507d221dce6c4e685683f80c9f162867dcd8c2a43f40f06c1833fa7e9ab9d547853b9c2e878db994990a7a3f76376b2ec882f0e65434f3c2c739071d0a80dee6b22707553d9f9e3ef2c4ccbdec484ff5d2d6920cbc29b992262a704bb65e887ac9e9122793143b71a9e9701a5de8c18b0e178224c4fdf0d46a616f2803d79a606f6bce33ac48f8604d0ec97b9c3968a95347a9f400d6d18e1e7b81239f46cb036156ffd7d3bfaff7c87dded0990f05c658c9f54b66e94ec71bd7d67a9fcfa33fdc7b8fc1f05b083879620582543b2f56245065e1c6d049ee5f49e06e0f01653a4f49f360dbbf80c5005fb3a285f55e4b78f1a3b23fc0443fc32b5d3da764cc22c31701d8512626243696d3278eec1bfa44a15554f2ca3ce4673d23c050101173b122584a5f69cb21d424e317e630541f48f57a097ee312393a36898246ae144f624808f8e60498df32c088b8fb48a805f89dea37a8aaaeed2a4e62ce7590c340ed872b5e29d9cdc1b57c7f63892d3026519d4590424e0a487c2518de17d476036b68d758232d7a8d5b9395be3ab572b8f594986e34037088ed410031706645a8f0269226fd5a6e0608432b1207426f855ed0bfed1138fef1993a9defc850e37226943f8708c4dad4560e3b0feed3919f892322f668bea0faf03780e114ed96aae52eb12844f63d119914f17782d2e5960ffec2999bd267274a4c690dbaa0d6527fff1b8028fc94f0719457219027b3c76f609ed8dcadbc4e0a2605b45328a6ea06802104b20707cc54beb0b76309a2ae3e375a9327f7001cc25b604b587b91c323382661f77280317698df7facf762415de9653c209c72f72bbf9a8dfc3b3e6ccac7aac56f681fcbf95150123f4ba0d680e864ee8e02b3ee79077e62caf89ee06f8aee2ae1732ab51b928bc31d90cfb56fa5273f64bacf582cac99723d4158b6fad660d9d84419e26f45b12073bfeb6e28917ff8e00d64befa7e9727d8691d0151171c0280d1211ac98de46995a5055b1c15c8fcef36f53a860709c4eb9c43a08e02a09783f9653c1019d7eae0ce492a0db50513be89af7768f810fd4a23f24d9465758ff0cc2f4922448c8122926695abbfdd73acfa0f8036dbc0549369b80dc2f0117744da9c829e88e4a50d2a458e3db8c283e34b26094127b1dc0378ecdc1fa9130d6fc288ac1a0d5b496a654e5c960e670934eb07990e14372fda52f88173a22fa98a7a2e65122887f78145705f8f65fd3f8c52f67d2dbe036fbb6b152a938fda386ca47f6946222285a0df30656508f9d7ac4886f34f5bb675c745a2c9167c35ae971aff79da29f387a7bc6677c8814c4690a8c3bec478448219ed2a286704fe83012941a5e0a7af1e6e1ad1d4f6fd0b5067efc35bc6b734664f30a8e8cfbf23e0c8fffc59c3990e49e01aafc7e59b35945a72db0f66b4def3396cdfd8e9588a27bec6194b75f62173a341c3d41ded78ca2c40d14cf7270b5c4e234f94469691e49336ffa41507493e291d64f6a43659292d5e8408eba773dee8e6c321cdc3fbdbdb45fc7842723b2ee9f59b4d8fb25d30d685cb8ad603d4cd2265eb42e7aac082746bd433ac0f627af622afb3e0ac032f432b9c83003c87cae19a0306aca97b353f5e141005113ae75279109c3872ee504394c9226840c99b5120af8f3629b7ac0bee56fc720d5447cadf6ff3c1c71f02366a5f378e3d698d56729e3f9caf57fadf64b3bcec50c95602991c1f2d077f802090f3df76e06a7451685e6ba1896785a39f5b27a965a25cb64840a80aed2c505169edf5e8287abe83588a51f971e393c81f9df26c206b2c4448e0311bf0c751d86bf7ebec40416d3d019a4157fd36b4ec4016195653c5aecb0d154ccf532464b82e262282c53bf15785e20834f3f24a6166b4e0aef28075e49b7ba999abfc94438f48fde7daa97d0d893e7abd126e85ccb56ca7ff9f0d62731c67b3d79660f79a021f1e3edb38f84d215bcdcebcfd191bd639f0d446863aea51661af9e81fec22e271eda08d0695b49dc63ef787c95f5f8629887fbc2afd4a636aeabc78ef9f768cb3c45f27b98c11a1441f8c1f750878228ac3753225327505ecf4e6ef31c660f6bcbde30e8e671659235e19a52d778f7056b0a1064d70a1c1d9b815da5a4a276aeee37ab931b47864f25bda145e5e265f9151112fc05ce5584dca68d5a74657d5667f077401140144dcdc954c88e828aa0505b4a86e0b349254ad86810c3bd7cd74a04425ca4cfc63384bf4bc049423a5b650a3fd595aa9c208723fd8422a812b9b7052e1ba47dad6190df384b9a3d9046b7ba1c90df6b4568a44cf35782b61c37cc851226ba8d0efa47dfb4b73d1c088aef46550883b1873a462d79dd3380dba1891d783274048627abb64761b1a5f37678b196c8b2071f426fa2c3d1069afa214692fe0f497b2457c7eb47a28abd5a79a198450ef09832c0a740363134c85e6a6f713a8b360eedf05a59a7d4de9cf41e49b16c003a98925c382d309bb109f85445d11e056b0cc4361d9608da979b98511578a7750c4fe6cb293839c11d5d8c685f4987e823f0888e67de819000d62e63ab5e178695d1706ae3f2a3f1a75ca3863edf236f9cf026673510462a81dd0e8f61e1ff32dc32e8767e12e47ecd10b74d4f10c0cb3ddce0c0ff963e1e27db53dbc927e1c10203afd8093cf2823ef05021c3866f4dcd76457dfb57c846b59ee558c7f5807097b292731f670d2278e294999a1b10818dc10a05d481e4371ecda1ca00d9c706674da5e5b34530f00ec3c246e465c05374bcb83bd6cbe5047b36c0d5618e39f2f639d6e86b57ab11da058cfcb5ebba8fe2c2cfa451415e3d20c54cbc510d7ce1bc0029664fa096a9ea19f8440603673366753d03c2e1b5cf9a040def19c9cf1b98daf4bacfef98a2278aad14c2030c9349917741595eacb7d721bf30358ea0ffc0436ce6140d3d2c5837e3aff35ec88734af8dd2e2f2073a218624c7d4f1eee0677c97099fa94d8eb935c1419c28ba8147c2aa4594b8b966ff7fb1b843ca5aa93504aa91713ef44ad261377c65a19ee74e22fadee11a5a6c41e55380f35f229b8cc3246891b884683ddd88878c00702bdb7c0f0a53d0d60bdc3269d8acc2138dcb6c4631a70b42b48a9a1ec1e042441869733d01d2f1191fc7a38b94e44c90345b35d0df365a00005b7c947984815502eb754746e8c4f6b2ddd9cab47b5f0c9a48c24adcf7aa2a8ea76596f7997e1f87992170a0800f91010f5d2ee5c9f10c51f1b58a81a4a8114de6e5688f510cdc5cdfbb9d4269858ed754bec559013e4582ebd0c1ef94421854d634d1dcaf527fc880eaae99ad0ff794a5cb0a161a6abb9e01003f1f2a26880f0c9dcb485596dbe4040e4337e65c0643c961887bcc7936e1c6551b055d66066e5c63b872466be8950566d35fa70cb283be1c8ae38357943ac77e9689735962bab7a89d786f51a69d33107d0f60c3ea77aef777d2f7452fd9acbd7221ca5858aaef301fa1ca10749f155c6ce534aca7000460db145cace30fcb27108080d600a7ae13aef67bc020880bf32e7a43c40491404c09380b4395ac32fff800850ce604874803b63bf7907fed997d3de893eb0ba423b43c23ba59cbd237cfd8bfd6b135f21cb8e26eaf019c7ade6603f23998dbf3a82af42b1394d45727eb7834bb6c7fbac86c75ad3fe0e1fafeb6927830d33ae61fc192da8aa801e54bb7e778d26f931373e81ae55119a9b7756a3a8b1dd1055f58f829aa75b9b91c7af0dbcd8239e8dd0ed3cf846edce77195af83096867d651899f0fdd43f940ed4f0c3fc28e212515893e8c0ed51384a074b617fdc754747674883b0a1372b36b12fcb8a71c602a35b223d14db4abd7e2cb85909e2e0ecb5719a20ad3467ba5d049452e77189230684f0d37a2a23c5d62d00fc1155d3ce8f2cb0e73974faa0e23a6f90519d82b229c69a7153b333a7281f869100e25318fd6d377f63f5c0e5fdab618947f202f4318e35f3fa453fb01d45bdad30eb2f896eb2c8bb0b782c95760460301cf652ac2b93411970d532bdfb92a741413f6e22991c343c2c62145dca609d3322434f409a8eb9ad8674f02e450d9b9fb04ded2025d29cd5a35e3833e159c525245a84f907210acbbe2678711501ec73201335f012b7822a161f726abc0a246c53e96eaff2cbca868ea16c10b80029227b95e0df2d74b33a6e5b17651c9ca4671ad564b89a873b659e994a364f883fafff449cbad085737ae9da7bb3efd9e7ec34fa70c1f813e3ce0779c75f39f65dd0b8cbecef2c8e0242769a35fb32ad514917f121ef831b89e006121cb943f1f774daca36886d4340471671c4a4e2acd43e5fe5f94578935012a67559c0eaa9f9c8cdec48e9604d0f9a5cea4fa0b9bbd4e4d12c04a91b98adcb22aa526efaa86e5a3ba0c45d10e666d2a5e3682ab19a8de4ee3e23d8265f6851dfc881a5c3e55f86832aeec4caed410f3201002432a5ea7dcda392aa1f8350c312dab496444a51339fc06f65c449f9312c0f48381b997258f2cea29ff238197cdd07b8c0c734b67797fa4d2e0201b3895ed27028b3e4a3a52493d40572d8030e0b3f1c2071a80b5bedea58d093df0699635dd40c923c58ba5ef5e7f5e254cf7d20d1a3b39f5b9df15f5bb0391ebd46f0845a6a15047895baaea597e7efb967a5cdccbdb2d461af78bd4ef56d2af1e4eb172bd2d200f8b16c338ba7905cd1fe4f5d7176b4e7c06b5a75dca371031a04fb18c74663430ad6474181f041155d4e200e25ac9e256a180005f64e5c6236a92a9e614f80c8e2df12ab719022322de6a89448984965dedf23e22a06751c7dd04b3f139fa21ff9883744cbbc4aa7aa0ef15930ff94bdf8c69c17a19767db097d36214b39448a86e26f79db42ad0dcbaee4980205176b0ee9a170fa0daeb03f346fb6b3c3a0eb2a11f33921b33a372e55f0cf1b694b28306b023ab3bb26e91e7112f1cd6e4440fd40d1691746b12289fb00f3192428cbca0cdbb98b360172a69c6403692fe21b6774323544ce7ed82ca75b1e23c8dd3e2866825b4e5ca203a8c58d92ebba66fe4b8e428fafba336e0b2bcaf781315de796edaa6f28fa60af4ac1284586df2d841ca38f92c26ee515dbbdac428108226b4e4efda985610b052bcda8058a23fc584a965bea5db0850f9a08e6a893e82d953f7ec63feeaee5683ad359e1e25cec9a5d38731d28422dc3471744231097034450a88ef0ae41b37ed9e6f90e18443e50797cc21c1c9eb90c555d22b319ff3434147e99242fa10a86431857c43b406b4358ba548d1f7cf7b7d47154cac4f00b41a20e4d9f7b50a645dee975700ba9f635be7f5fdf006ec5d2e09c74e094e439e92c14e6ddb7ce7b78cefcd56fcf2d9ea3f97035211f31365c288c3972b2475be25727e4a929b14ef61ca67221b68d3513973be520948b3ddfabeb3c672230734c088636f38ee9660da6d24494a50d2ef317a66f233eb70086ba153711cc47d5b86b1ab99786ae1b47317b5794d4be6e7b141634b99e482abf3a46b697b6402a358e11073e5fc6da7ecee63149f7710fee352c658ab262d5aff7d20c9cf28496c59925f95fe0c265f6198e7dac64a6df7a3920972e1c1f5bf49e849e83fc33bb7c925d97b4cf4f877fc8b7d170eb560463c1cdd5563f9fe0e896a6b6ed4c5c611b21b2ad6774340b321705646cb94c94b9e0498fa68382230a4294296835c078fb8c708edbb87d1d758c4f8f58d2392a2d581c100c73101894dc2bdb9bd9a693b3c5337d0c404d858519fbc794281616149a0b8a7e920a5191ef471cd8ebc2f1a5eb7e9c3d0987a72841a2aa7d51a000bdedc0730707ca75fc60574f51c7071cc5d661bce4c2edfbfc1ec95817f6caf1a64f28a809098182dcee1d07214d176e112bb6b41b5d05e67b10d060b4152774de713d96bb78136f04fc9a5ac74502bef5aaad9011b39e40c7950f4dcdd7b249797c5002e7ca483f28d1a39c0ea7d08a7c571ba7d29469d6c003e58ea127900151ba8709f06e4e09fb8756d5382aa4bde25fe88bf544404eee0713ea21edd670da6be5fc7bace8b29cfbeacaf9ab5fe200b5b908ce53b5bf43cc237158257b8c193155604a2ebf94ff7c78f7c8741aefe41876e1976fd548e8bb3de8ea0c175d50aa7e4cc209a77601129e67a209cb81a4fdeb3ef3a7e7956fef26e8e8d0822bd0bbfcd8a394d7d2ddcb0659a28f15853a276c5e358319a69a4dcaf301b2c8f27fe188ba68793b7acbbf541b230ef0c1cba735fae9b33ce8736ea4f5a81e4101835dc0c359e9bde2a090b159e9708c5f5d931c80e7e3b9ff6eb6b4c13881141e82cd35c83eb8555bf5d16abeb77fc910ff01489d262c5e5f68bb80ef6900daa1ca817103cbbff4055cb8464884da7101b3f571700f550809ca5122b98c437a8afe972af8c0a837592d43074297b89554f68d2981aca87a1f9641c57aa82dde7719bb749d6c927bbff39220a42f41b7b02dad4f54fc681e444320a3021b35f7a7e4153d127786aaa1450262b2010a4662d2fae3dd0fe3a9bca314383e2f972b387bcba0f888921b5b272b081fd6a104cd55d418287871d2c96001a77f1c9dda0f50c50fe88ac5616eb136ff677b6095b069aaec372e2b9d7740c210452a18e00479e56c5cba69cdd91bdfec12215fbbeb897edffbf2aabe3f584748b4d15c7e6b3c2e756862913474d1475a6e303936aa42a3cef04f0aa08220770c22c161f7b86a8e6cad07b5ae73719d196baa3741ec6e887121365ea5b841a7347b22ef7e9dbdd24c8fea180ef0bcfe06afb13417dd742810848a4b65e38e96518a866cb0e915801e887c11b1a95738979eb0635c4dffb0d6bd13a798dd575b530710c2a269950464f04bce87e18486efc38df89eacd991928b11da6b7246895d1c397405ddba891b031bff11fa3212a40b634509c0c213c2bb94f68f96ca56bf6eefdfae5e4f5654eca5a5552cb04ac7265a6aa6f780b338c43a1e4b0400b5303c3ab634ec43798d51b5d4b512222b5340af754d3f023b3807e26a4a06f860a72d6a775aa0e46c2bf965e2d4ba82863f47f83463f9f309db562e1362dd3997706bb61efa095e538465725d0009311765259f5f7470ba3dcd84d0a1ddfb25e28811a0bfd9299101c26a46cd098352536c69df3c491d8073c9b73e7e019b717098b261a392cbc83dd8ebb471961626d0e89f4205d5f6569f752ce08fad34c4ea725b428edc596470203daa00ddb010a49a71354dbb8f8ea080a0a921db85b71de0bd29ea1a09de38ccb92869de455c51b3f7b6f7fe50a922ac74d138db1a4c8934e50d662de69e1b3193ef91fa83aad131b5524ddbdc2b0bfe05065c808d1438b9b767467d2dc44335d8f06154060f3d622c3dbd5adda5cdd6f26200de7cd4e83c8c239ac6ab63bc281d59e2d039b2102582ab54a34415dc17f9f51c57292324abf0e06e935aff01bf95fbf848dfb170b17d95bbc48b805fe3739a77d0b3c9e64eab5f3fdb15f085f43a57da77865004ad29c3bcd0c65057984a86c4d3c7aa0de9818e393e06531c4d009ebf65c4426c61fd8f9e8e3b77a85215d8555ab902c65a45f0b625d0ff50bc623a71eb75c1cfd1970feff37f630fd825b0e7595c58d570f6366beeee0d3242ae814eff268ccaf86a5646d1ed73d5a48a4e984d2524279aec52d4b0e410723372361de00e09c8698d77482ecdce165ce11c4b0af43fd776f28a7156be98e72836b963916adc6ffa7ba0a3b3d4bd449ce0e5d9b1a4bb1941e7e4ce0f99c4e2aa4cbd2cc9e0136d7929783e939587e9cb7ded8a685030148fd231d595c960e6970a3359af32d11f00dc17180fabf2f54326588f009ddf9413ffe201c34b2cb679e0e695b95e35744ecad9826b0f24a069d96326617f6dc1a6d7570bd5b2ad3189f3af8520577bb7132b32ee21a70c53590c642d27da585105389ad72e9d33e517cfd0465d89282d733d962640a8af692b1a2a6b0327f08b48049e9c332d04dedf84785a4f030d83d0fb09233e12691b823eb5b8b6e4bb95a2c35e9c13a1598ba87315d88680263bfc0f0ef17b70a922773e466f27be49b4627bd7151b85540be0fe68b1cefb5c79aeafcef45fa217939c52d26db09c1c3d45afec874974e03c517df4f3e38579611912724720247c204feaf835a7bc5e583217c093e291c2ede7d68af67c01335ed93261d9ae91f68ee0a4d64031a3ba26a279d0c6d723fddfef51ab8ab94eb208b065970cc9d87fd82f2b9f51427f3eca4e91ac68ab0732944e206cfe59895a779c071c44801c7c90e579aac711056033da25007b4fdb44f0c9fd9c8b8c4d01c1a42d092c0b6cf6ecd51950a3408210510013b6aaa8fb4b4d9d384e89831c7f1ab8f50dd6565b5069850ec406d5ff2bd2fff3682971a08a4748d37da83c6bf461c71a6f2ed2022111990ca43def168265fe7400bb4b57cd34c8670f5a20fc06a4816d9e32d06dcc5970bb9a4046c09f25c39bf29c56e17404c2274fef3e445f5e68fadfc0f8b94f897fddbb4506ebdba43b4d53c9ab86a361fa8eb4d234a238fa091fe3e9d13fe77466b4a5605f72e7e5f7f5f1e4903cc74d7eea8852a3cfb40278c686bbe1dacb368ebc9dcfff89a3cb41b72bedbb11e9ed680ea19e919b93d2bfd42e68bbce6848f01739aa0362219d0add5019dff7f8d36f53368fb02d34e6e4515e46eecef041803a2a171c9936a96976b11cdfa8b71a0c2ee7f80bdc5205f3b19e103054fe0acb46f1218ff26a152bbc16846cae9ba26068e9d5e0164fc0eb54474d4f94442662ae301e25545102ae3212e5e0ef89c2fc70c043e5cdb19dfb48179890baaccc3134999c4188e9709d2360cace41fdfb705b605318dfca9524d03530c9a99e2b0e911802fb475f313ad7ea8289137ef55c846374852cc22766e7429f0c54978724c2faa2ec6871aac0eb2a1fc7a7aec7d8263914aa5f8923bc270b02605b36ed6d57e5051407872c62ef357756a70feb956958d29973f68060c48ee44b93b0306ffd3e1625e9c8b264ab5f1b82068696bbfed997dc7e3d3c50b8e6f3e9d7d41375b1157b71d6902b697c649485bc7cedbd8bba0aa09b1b3a23d6fe60d074d315d9c120e923bc27a64ca355b25cb1c6c3a18b59c623f8a5e0a4159ae25844887409c2de8464fdb1dc0cb32132d27781715a17467206517d59c6fad5da3c63bfc6ab6bea24f045957c68fb5092685f82ec8ea899987487ee311e28b8dcc8779c982d401ee7b086bc75ba35e2505b74a0186f146e1e0c2f62a5eb40c218d925077e1fe444aa14aac974b67bed220b7021168809167ddd8afc99918dd69a851d4f6c60089bcefe81f94123985b20c1019dc45519a5686af23b48c1512ac86e7204b5d339d1529daf83b5af41aa34f04bb93af4ce777639b0abc621c85255daf88703d415a4853a15db35d1a620c1d97a26f0f918b60cfb951bb4be13175031909761819559217572504187ea8d7a4649f0a2bf8ba179e5c557078943f1c8fda99917ec7b5d4444cc0d5db9c124af4ed6d7f880fb7536e31e541a3a46019d2fb51ee9b38abce3a5a5c3f18a2d144ebe2d3cf2e98cd6e0bcb24dc268c9f0fc10a9c1dd3d142b121578641901f150aea629922193207da4982644242f02f78fb68a85b33bbd42357cee403e4532ae45e23cfe603847c91210a81494cf11879367d053dafd1a4ca99d7b82b68af0baa872d431aff31366880ffa0972064b1613cd9b4ea9680adde842a4dfa4d6dd18af8e58c205ae4eae5310698d32b0a8f94c5123f82e95a599bb8703cdb816929797e78b4607acff1ef1c0a30ef9dc0b9da93a90084ad057080c4ef220427bf45c55d3d5de41db9957d6899967b440a6f30a55418c358550c7fb4440b45979aac71f494756ecc861c54ded51141c2528234c0a058da89f0716470eb35e59d4df31c3db344abb918ba2ea1b4235873bb44e55472c16e6535e9eaa6fb27469c70083ee33101db3c4115cf39cd1cfdf75112000e5d30c81e777542138b524cb08a7516bd9ff84f46971203103a160dafbae584eab462747c199286000dc9445a32870700050e49273acc1137abf16e94cb8187620961335fc68fcfe140d8022b96e4f607810404465eeed42780fa35a5e697d8861e1d6fe0d43985d26add7839b16dba65557586c004aa5710b4629ec66e6b2680c7dd88cf5fe512d38f790bdb05010e40bfe99371ee73b42f32f978efdcdd05a6c40a4f2de23eb2ffe65d97d45dc65d535849102e63c7b6a0c9ffb6caf608a5d0af161cd676327cdf4fd999eb70bd1fd675c62d111590919f5954bfbbf164489916c6c6713838908716ce2066c71cef8cb0a7ae30b964263317eec96ad69e7ee6c4c99ac16226a6c2e2bdacfac6b36e82f2a37c66c26d9ecd8603e191897c4a2dfec3016fe7f6b0fcfc22364fb07fc37b6853fd3105c97c3ff8914c5d10cb6798db722bb7a802e9d89b6d88fad789e79d74bedf594b6a084101cb11f4ee52749a138e2eed2439ef8a1c153d821e260a22ebfe11bad783fe3518a19420d2c11d1c65ebec745abef2ee1ca83239c91487b36dd3467148773ec516409957de972db464395c915ed7613d259e3e924895871f16268d9f5d39bbcd7ae3402dd8f41fd4c9227c2b2ffe19dd4104f2e8aa979ad89fec8d4b430c5385617c29dfbc9b5868e783863ae4dc2f5a64842a7edfee48ead2ad955d4034aebc0b338920275a13155e15563dfcd3a461d211dadf96ed1737d3f156111d772741547ed517195670cd3ccb0b619cfeaa92c9558644dff9aacc8caa75d1c9c003b1264742967f82c1592fb69ca53798eaa5fd5bbb8a4e49ab1a42471a75756b68de2bc82dc250749bdb0efa47ea934ffbe388757b19b37524011a90f74c575f05110257f35ba6b41f3bce93da11c4c3d44de880b0372fb4dd3227d436392ae97e6466f07d53a6db0110f01e72c21318092267b7c6ff72d237758faccc5012919f627d4f24f6db52ccc4a48870854498c7c112f147d43aa0f5ac03078bfe51fd2009ed392c1bf001359ffaa891c57fa32bc55bd59e666f5eb9115bd171972c397511dcef51cd9e561a78edb870b375d2ada5b0fe2bec2f48232f3e019fc8f2875d994846edb15f9abc06583b8165a79c0e60a34dbb02d1b6c75ff0610d2fc05ee922ef1c70eb4012c34080e56637f2cf11eeefdce229f4dbb3ac18c26a65c90fe2a8be655d4e40f0027f52ace629282651e43fd72f8a175f4ed13481d29f4e991c1e7207bc7050946e622afc85d1c8c92c97f7199a746392e4b139be78eb4b6617d3b89698e9af9baa8fd4d4f5fc2f2b9aa23df04ba6a1f7c5afb229d6df1340b2837a30f3613546647f7a6e05a2fc22c42a2f6b75404950723f7e40bf0b02e832e99515bdf8d7c4147d8ba5a3af5ffdb4d619a40eafc435365d37ccccb4eec2dbd6441d5b58b44d001312e35ffb4bf226b50a96c7c5b489e6cb884e2b34065bfc91e1fb7d88d922df99fcc30586d42dd55367fc370f4326604715b5c55713cc81abb59b668f45314737d042f4f7efe5b192e7563ccff43dcb7a0eb1b295d1fa39856a0b6a9f3571ed0aba943d323f8d93b17faceaff2f9780246bfa7e5ef6e4517879c0d674e26296c661ffb2e3cfd89e3ecdd6dbe3be8638eabe717735c8d3341cb27857635966177693d742655a38ee5b72a91063354d0f122bf8f31aaff201d17562931e13587ff22687d845314751c1e0d0d05f5cafc12422807e7cef1d3aad85a93617f319e6bcfa2176a34629a6044a9348aaf39041fb3b52197924972a9a623cbfabe0de33ba13e95a8ec07bef8a4bd56f694d837e6738a8ccf24dcf672a518570ed303adc85f169caab64ee4c64f2be647877e74b174e9cfabd87a23ebd54ee092c0b3986020a069c9abae86e44606e5cc2ac96524c87bd209ee3fbab0ab6207d739b81020bf49127c5ea8ace217beab674141a17cf5ae554fe17090cdaf13671573cfd00c9fbe2c923e1a63b5951b9e53bef615fe3352137a52b837ca52af2feb7e1cf8b1a0537ab7091a6679eedaa7310ed8ee0855ba30635734ec4fb0c32a50c75f136d6349b0b256895047d486f9110dbdd1b4ac5654debf5d7087aa34b2185be4f938fa94127fbece38724f04e2a2ce89fad5a31f7d9c6d29736e9772a3f4a8e4ea6e2ac863ca4062ee86a3663d2f6f121856e28ff53562a43d5cf80d70ccd1ee7b2f15ad6e6d72bda07ea325f0ba7836d725c41fbae202308458b7ad477458eb91114fad31930eacdbdd8f5489b61ce8a70981d53d83724a57c642314b10a4265a82eb9c37beb57cc2a7cdb43eb3e758dbbfe45bd7ebbd81deefb25e8c5e609642cc21a114050fd71760f7d05c751ac10ab281d3d9e221c374e03b1a1393313ea178f7e1db063923c484d2598c5862ab7ca07a2e646340d852acf59e6782b74aabe10484724e904268b65e5513e42707d06c6fae6b8990621eebe40c2a92167fa7f47d5e09766338cd5c30983e3eb5b2db9769f0c2e40451708f98bc65f6068c241846cc3834aceee1fc5600651eedbef333c2e075803af636cbc41f908bd933dea902e1ede3ddfb53874db22e05ec97942219e95afc936ef1c8f466aaa00b17a9a1f9e6e9e1d5c58d60676b59ed8bbf91a2e70dcf91c882f76e5244cce8787f9a61ece62dc8026f018dd34a0cfd6b9bb499bf82a21ab09c50051bdffa9a839ef106bc91e974f8229cc948aadaf5cf51d137925deaa13bcac6e0fea4f6be1f502746633fd65f46b2dc5028c7044c2e6322301ded15363cb1ef7b841ff705d62d7b4e3297bc895eb4f709e98cefa9b2608b23544cba6248d1c8582e3ef398326d90b1603a5000a38784640f786066fa9e496db8ddd176e48609bdf6dfd682352679fdd4906f563effb9cc1d180301034aa500586d249857c1197ed4a45da53ae3ae9f278e283d3d89728b13d14419a900c40d3f1fca03e659a8271ddad97f3761197e6b610d1e06278846b08267378fe7a38569f0a8fdfc4cdcf460e6640252ef57f38b12335369fb0a1fdb53920151c2cd37f1d2afc9f66f80ee97c1eba0bef2f21e355640fca911090ae0e245fa59c1d4c9b7686d009e4d3e21d675b8ceb8414e61fbc9898c44b191ba7070c671c82af43b4b121188b3dc7f4fc9532e325ce86098f8e1dfc080840255ac8a50822461e55c621b5760468ec460f2f670dcb82a6f72153635592e99dff657bf68e0ad93296ee84d6001953f91a24ada9a6a03c8dbfbc444605d4ad240c19da6204a6d3bd9e8df1fbdef26f91c83e22a09e8cea8cb740dbfc5d146bd17ed70c447d1904eebe0236b78d5590c1b1f75811ada6839fe7f0bf082c7c2450a36b060e2a254b7da7037e5dd32495e2fea16250dec065c00ff7b0bfb1d123d2df918bcd53b1ae4b785bf132da336eddc28f4204d03840bf53b4542c547c4d1628b2f3f700c308ed824a08fa6bf53d3dcb05b48a4d9934f52081a58a359fb092c70fc451b446670c0c0387da6df18c99626872b779d9b298f5e997a5d115fcce29f8e427d1b705a48819e7e04eee84fd7295f04880dd79fecb6ba56baca01064513cf9097160e85c894dc6df3d936c6c319098c580efc8d5760179724899d38b2d9ce3c703e2204b1803dd3dd1f6e3c0ced874dc056c807adf8607c052226a18273464179cb83e48934ae39862a87c0881938e08ff8d8548d85aa42749cd0f0256713f4f172777292d8e32563f2b81ca88c8c76c565b0ed9e36d54a9efcff93d9042b6ddf4589cbe5ea03522da11105a83426d82dc4d1d2c224c2429f30f765c44bfbfa050fe277fb683bb2c375814f57717f11291ec6fbf5b80bc6286137162f53c509b13e1613fb2dc2180d4540a8c6f344a913abcd7e79400e18fca70503b66867dfcdfa690c2170a21bcc79a0247c41c11798371fce431f11b7b34c2dd9c1fde89d4e2e9d4c175c0dff58b57cb03966c5d549e60e807b1834e52bcc1147622e62136b6391f023aa458e83ccbdedddd2778c62fdb14fb0089bb51e27ba9eac4ddf074c84271f02bb82e27d4af870aa0e70f0d2791128eb872cb2ccf43d8bfa24c620c395c95c2c2f8bf72827d34c58b8d20e97e1e0d7c74d4170bc45e474fe02e7c813e71bf36ae4337ef64da4e2a818f87bac14a5f1eca219a7e9721bd2e00e7c01b51cb3b3e8c65a3cf6185a1acd57d09bc988b56363b1926045557671c300bc1e9484c288a5fb1c042aa501ef0f44e75e8657f4c9ced3dfc2916838ac1c411d443767225d615aa1129287e4e5ed88c4b9dcb058cec6a826c937850fe32878762dd95685f613eef123cc03cc27a1e661e1898c14d4f5fd550ae3a1342acc8c0b3a2c9e03b34428fa89e1238c30731137fdcc04fa2cbf055791f7c221f587c71d2fc8c150107f846ea51510e9e542c05742bdcec7a1a5d1ffce578477ac58ba9a557da93e6f1f3ac2dc99bb80cae89fb2945be85fa194d3474996c449d427430fd4895cd625d5b513045608310199365b833f46b831ca20cea2584378e576f34421b30839cd51e8948ea6549530980c85d4b08f9c09fdbc74214b04043472256f27f20641ad65d81dd490e19b83ffc13fe491a01ecf10d32b04af5ee1c6bb34f15d562689e91896adfd5289d7687f35f28d03000cccc02103b8b19a914c82927f7a4440dd5cfe02e374c669d28b42c073fd92cc3353fc74afbc3d4aa5ef17edac3c34455506eb46f7cdde3ab6659c16100b632d6d2843ca06c8e1c8352196c6522f2b5c5d1ec4088c801b1b65cc7eb07e0db584581000e5a0e4c082989224044325786fa06eaa44ca65abc6c53806fbcf7cc1d03e8b98c56d95d18a9d949b670ecaf459e22b4b5d308ab9155e0196009d8aaa45d055b9fd89b022001f92e49c902909a22b01d9aa15f2942c59dbd3dda91d89d60847b68b16655d2650ca4958ca8b8da92022dd2df9a6c46ae9bce1925671ebb4b7154e3b984e8bbb766a9c42bdd3a6aa8c69155741260319e23dd59b68984d09e097342db1a486f6228812bdb2bf16dcb13e6c9d9d10ce66d7dfd636fa26025786855749c98345a2aba36f0a5323ad6fe4a76d51abf18601f89999990f5bad1394b0c07c1566ae8aa4e27aff28a85b02f54c363ec748e378295446cd4acf7edee9070e9631573f0aeb815860b909c02b6bd2f1d67b6ad50bec70f40a3b5d51f48bc9e2e75fb47b666900f5d310715694d1b76393542c67a1fdfb87776f2b35403c2e06cfe4027b6630ba0c9dda63283d5645d114dff874bb007c66c7feef60a7e20ef160d85d4e69e29469d60a362f10bc9c5f3d1326233f041191406c945705535a3075cef507bd1ebb51a614cf2a2f6e970b97db81aff1f6f0bc56e80e06d619e86cbc66fc9d82437315b8cfac14fee8a35382fb0905a2248dfa447ec8aba7e739d3fbbc6c5f8c4e40dfa037637d15ec943d393ca80b711d8352560f3d7e071fc5e9b313195efb83e493a1959d2f934454ec097130c183d0a38a70caf41d8eb4b356f297736c1c79b68eeb9a3debec3b8f223300165f36952dd61774c0cd98ee7d5acf149c46f7aefcad769b7fcb26b89e244c400297277af88ab66468be068ba13495f28ea0c70a9c158b6adbd004393ea242ace658ccc5d3ad64fc6cb657dc11c274268531b48b57971d19fa4bd7fb6f99071549350848e826b64c994feb1e82042630c394a0bb203b3c0d3320f23c857d2daff06644611ae7ced5fe1a5a32ef2635961fa532a4ac1b077da198b71909cb4f80a9d2c3a8348d51f1d06f0219619d5771ab62e24aa2120a970d748009e9309c587fee0a93d624fd8a8ce4fb402a27222d5ed9dfbd40d2b00743a8a0af69fbefac691a64f0472d7fe9f92c23e7c304c242c6dd8606a369efb80eda60c60195c61273f89e5d5088dc63f49e0c0afd25b6183ec31f36cd6892d6dbfe3045d5fac725f346721dddc58aa35e1b5107abc646d1c30fc38960c1b679f3d94b0873b247cb8394078d2da506bdfcdf0ff62db7ecb58fcc08a3b05f71e427f80033784a4264853503cb7fef989d363e7fdbc4d20870074c69ab2e5e607554e815fcdcb49dd5612ea5da2518810bb0b6e502e6df42610d2366e5a80cbe6c9d5676a73df8950d3a10485234abf51d90c05b5a1464f46d4c40c533c8989e29a8081030a0a5b95fac6c96cbd249c19c1465f06cf9e31c4f4423b121b55cf5248a8a7a5709645cbd79a541398a123ccbfcb5cf682ca10f47d4b74d4d0d71cb7ba67c38701a083f2a45eaad17b9cbca57837acbe5f636813133441363c7279a4986ce496309e5461b51d489864365564655e03f17bb2d2bc4900bc88fce2af02dd7b0f79834b087a7615d76d8ddf1c71e6c329c11181360ddb13f318c36e90e3e69a815780f36e9569f7ae0072fe7a15074985a0dd4ef252d20524b30f04e160f9c1356c4d6d2a306050b3819f41ff9856b25be302b56f9dc01a153c1a74d1d37de4d7ee89f58f26959aeac6939312f0c2beef8e447997c0ffc57a90ad4ca322c160c24d22eaecfe3c55e0334022bbfa1cdd4f34adf5bfddf30593c31be59f7f0f7e2753242e5529fdef98a876fa731270c5a4c01b0dc080b4b300551bb65fb121e1fb98f678644886eb5376de450dac5fd52b2ae734f0c8243db78252ef6bbe18baa0333c74a12be8a37f23c777211596b0380860aaa50d7009f76e1712a15c3226ac083d6c3a6fee8d86c98a5a2e2ae327a4e1fbf34b34110a5f79829cb81ed608700267ac5c2c4bc6e8f3f7f18c7cba5bc96e90657381a10d3c5ca1cb4970d0ec2bcaecf6aaf106d0acfc8c62843741138b687367c7bfacb18c7ec0fc7fcf57673d512cbee1a7fad5ea481597668ef615c6dc65c470325c31e3e23187b0b3f88175c2b9e216a77f4a221da110c4aa4d8304a9a13c2ec565a7c1d2d7a21f67c1c551c4dd0f6da977f966985b1297050be7e2900d5596426dec61ac57fd2147992708ffddfd62723288d0296ca01f4aee0f27691e690595978f29737f37898e289b111c5658d711ab82d04d391aa5019abd179154e1bc0232c751105906cebaad4432dc805494178dd775db2638344140f246f1c87ccdbedca43a3b37448de6da521c4786cf085818f567f1b265abc4e627f5e6e1a4025ee4404e297419c49c6d987d9c2ead2ab2bf6cd9b36fd9dbf1b89b449ee438698aad271aae759e2b1c4fde682057a4e6a2f6ae5e0c6c58662ed07620b28e5792f192a7eb609f58714572a0fa426aa65e6c41531a84dffac6e09c0e8b08dff4b49b2637dd5c13216aaac692810b2b6767f048223d1758b026dfcce1f513ac479d39dee9e6f6957ca010c1e9bac8bdc975c4ca69f03cc71099b20721e82eb6444551726aa1b671c8d544cbaeb98f821627565a40111c478a30ad7fb14af574d0233001e2882a396158bbf65976b46ac0f00b7da9a4fc663ca9a928cfee7dce5f81ceef61bf735ee0170d1d3acd52e6a0507cbdd496274546e83a469989ca190583b255c198ed0d3c96f8a42ecf25d2e4192daa1ae6f9b2ed13b4decb2fbd11afb7275cfea35a61d51f1abaa84d26e6074f067e8d4f1593d01383bd91c46c59ac609d596fd691b96aa2f32d658cd7da343a10a620b6ecd21adacb72259d341ae6c60ed730905b044d6c8c887ab7a10f73e8b43abcf278f0dc01a809d72460720d6fbe43b0ce8b99ad3617de8b3dd922adf8f7c680e15fee65187d0c8046c78943da06481d19aaced6a28432d1dac5341b7e152ea8b3d4b404876987ce038637bf1b592461aefb20dc68b14554a7bd464376339f8aa2ce8c87c0def3a97ecab1802e3af18fc1c966869b7794a462320a882b035d88ecc3a8848c076cd8045976a2cca351681c16641194c9d360dd67b5dd26a4bd7c4f09260981792fe088ea9efcc3dc31801b6c4b0ab54deff4fea692b02c3d3abf6162c3182037dba96f4e5eeabdfc27e014b19123dc2e0b22af787de309b6c7b0005c703a259b72143e6ca2da266c10aa0c3275f14842d9789e3969eace81919ed0664c23cff53065ea72e6ae82a6bbf758dd649dd4e608ca7acdef7af5b9df424d2fb862ba5d43790b9263db873e2f8e7a70ae43677f6e3175bef45f579e0b838daf17ae8ea9d9c412be0cdc90dda19dd63031e63f068a8ea4d792d13f85888229c15a32e8681560f71c2cf5b8672228d2968355bf793467225c2cb989a3066282b69628146d9776c617313c10fb8058fca80c5910a50289f241f76ec4725b614d9284560500866ffe7096168bf95c87ae280a968d16bb554c66df37684509554af8f177ebc026d222fa1f85e5a4f0d8b0cca47b648b3b95befc01f2064a000610d3b211cc213ceba2702b343cbf7a39228bb676468b8a704d3700a542da885881d6304a6f63e420620ad79341a32b4761ce3af11a62556d55c69cf3cddd5778cf030eb2058dcdc51f2188c1e1cb3acf078f40aa3eedfd2f4462b00a204f65e21fb14e533f896f1cdfced093f838c5f22a32b94f302d4d9c8d1bc71d3373c75292fa4f0b8efeebb8490fa5c629a9b3a30a6a380c19c528ebcf983827d234953210bca3d4bea362986e8df8ed1008be891792ee9979a687309d19655121231ebc55b7a33a19145fcc55db5604974fdde3f506cf13d8fedd93a4ab2dc7abdbf80c6c4a8cc7c2cbb30581ca521cb5a90237e38521144d2aac6d3127104b7cdc5326199700214e4e221645c76e1f1fef5411e6262d3f30421eb93f167b1bb328eba1c982e74836c618c259e8dc769af2901d57f82291bdf8ab74993a4f2c78a42450de9c870dc06541729b3ec5d4b35e0cf912698c240a4fd7d9c9befcd40ee1977ea7bcd12b3906d715c047ba5b510b5e89a51aa20a1acde8c1f86ffb9f58efd3011cbf58f54941fa2ee6021275379a8c25d7421565c03ab20b25172269ebd8d9945284d5d786826b5908fa03b22086c0f57f12a20dc832d51011839f7f2bcb1c17d0a530975b7255c8bcd2ebacdc2af126c26e10cc3dee794e0bb3bdb18d9843295ccdd7a873d8d9b5a462236073fd12626c5568c008df38e1efe361f10888deafa0c208816010a8d140d2de0aa0ee44785ea073d162d05ef77bf0b692be389c950e95afc4cbeccab48ae4010194e7759c3bb385bc1b9424f6186c1552c058b8d9a7627ee62da2d889150c278ace47a98c552c1f07fcf59243003fcc2c8ee10e53189b6e162296f270dddbcbf9a4c5a804eceb817a18dd99028f64b8ab95e9253b2ac20006e72185ee0c309ca4f6a04f9026f21e2938a1563927ec923dc5b710ae56fc5fcb52f722b1173b3f7e60bad148ae592a0493afa7634d572711a7246dfa9ba092acd5b748ec4352386885025e5059784f6f84965ee5ee9ea2b89705f11d900d8417f9a1461b7af678a3af8274283d78356c57c49f42ac7aa956bfdc7c7da65185e25d1e52b3a7a4eaf311862b04f9600449389e1e1de6c1b573743ad3647b6c70d87dbe37fe39aaed8398437c142ae6537f07bdf1a3e18a38dc1b58d8570f9349226de7617d743e84c6c371ec716a434d31bc2c5569b6bbfebeb2bc2e2d0321e302207454852b1c8a34a01f49dc35e4669fbb2e2aeb3df8fc866dd1824108f073f64e9ef122670c5400e5eed8329b51f8ad667aaf6e8d5d65385624787c32174929a2c8d71885bece066ecc35ef6d51f94581469b90ac79d64f4baee9e8bf787dc6029ff105c40bfecc51d8e79e990f6c932b3179dca806ce1812efdc7b389ed85443adbb5388a30d59832d91b3f718e63d5716e50d98dd42366618b5091c180d9f8c0209cf67aeda7fb12a5f93da6ab073a1ad58bc4637352fcafd4021ede6f0a7ce7c001e9124b039f7d8997214d30bec63dd498d7a381377260bf6afe94ebd2021d6609fe75d52063b5e79c6f436dd34b40d225f086f70bbef8d74a39587f1dc352e580de08378ac5ba646f10331c50389f7009856a0c04ea1280c637955112183bb88b328472586f20b06a3b4c6a266fcdbddafd224156e778556750dee8e0eeaee82c5169d7d4c755ca59155962b69cd2c82223a9a062a21fcb748cc6dd61a531290cfde01e7a08dbbe9599d42d99ae15bd28312f05cf714512aaeea1d64c8902c85d020b64de27f53e73b6136092586f659987e4bd11aa6ca69fae8a466e51a8fd7dd6e3591819686ca4cd40d0820618522db8c0b410e121f01631c41f9e81d1542eddf6c615ad197822724632c2d5253bee792a53ab6a94d573e423da70cd81f5e2fa4c113378dbb9a973bb644a0acab79cd89a3e17ff60b278fa2917d216859a60b264da5b7c902974ed740956085a8de63f239a4b7562b5cf98b4493cca3abecd52bed8dd62c3f9cc89d13243b947f1f51edd338b63a39aa10b3f0b0b70b2d852617151140d34b00416368c137df612b5fc4d3834e81cfe4ce30231ed4a7ef3630c13201573a1ac463b7363ea2ec46ef15be915b9103970db07c4ef00c33aa08dbaa2ec832042b928fc3a3a9e1bb5cd788bd4019301fca103dd9177af917aaeea6cf62ae77a4b324933af821f4942b6d9beebaaad26ad26d43ef7ae99612960194c2b3e1e6939fdcec41b54ec24f6cf06ce185c179420fb544fe8b673993cdbf7d95bbb53ea39fa7edf0080a6d55dee166903c1fcec5f8cd2130242c229cb51626ce740598caae74dd35abe3f939f11df2c56d3bb2c161a8161067aff0d722a5089702a1042366f3f9c3330aece723e6259b10385eca83869015a11ed3d320de57990726cf4442806edff3444cf3bb4531f32e8c2a21e75194bd6c99db6684f0cad652b00d48fa98608b31cccf42d7f01a3190d218087f106c1fb836e75e67cfca400152e57312a10dd89f062aa15a0780cff8684e4e20dcaced90a99935d7db5b4f9af302063a20e18e0fe3528b396fe40aaa1106c6a47bf3600e1f07c9c7c5549c5f1e3d5f3a7a7c8512c36c197a78aaba6d16f4520a1964f09b544885fc7c9c6eefd887d32b6844b212a30cbd9bd416f7caf60d102f0709c7847c077d2d4e0a95c1c65ff667b3cf6931502bfb6a26805e7e3a7b27fd6660f5da380d013a7b0d5603544cd17032995b91ef2e956d7f510b895b10354e9712752bcd3951c072a646033ce1429e3784d94a2ba3416f38c6ef9da9ff2a362f94c462e15624aa4c017f6c4252c96a65fd752d27cef152dc4d922f7c11d1775a9060b4493463f972289d581c340abf57f1945342e891ca6d44df10d4626a3e18cf32bf49932b1560704c29ae7f585710663e712e036cdb380b61ca1331f36a7e9148142ea15432a38a419a984935ef91b090782ee9c4679b039542196c216f6240aff8f39f3dee33e1cbf0115ee32ad79e123cb8184d2201a7da1df04c6357320e781c09b4e6e59364998da943fc16b5b24eaa103fc0fe78f4567fafe9ec51faa5f34fcbd4a5250d542755367e18fbd814b079a85c17354c6ed75a372b85773449dcb80138aad0e15e4a34f1692a1413e5da37a19670191dc7a6a1b611bea7df229bbf6e22d01ab310b0f682396c2500d2f37c4e4bcabdf64531a7833a08f070ddf5d8f41e72cc09d90831c10b5a2cfdae4a1e6943ca8128e0de618206402d9855ba2a892a702f29a916f36a01a77b48c26650389ce7405b54b10dc2848b99c1e2fb9989ddc35c2f69341b3f050d7f60d19e2a80e3ef3f33950b8687a89de964f41aad76adfc942300e2f497bec7c796e8047f948254aade24f3fec40a4a281b3e48142ac6b7b717117ae42d7eb7f0ce83aec8c38a6fa074be565c8ea78fa7412ce679ebacd34d34ce6a96b8afb05720afaac839769b309c465efc29f5921ee5eb07542cdfb1e2b0ae0c4d91d397b578cbac39fc1b3bd430fc61e3166ef7de72665f802bdad98c652c30dd0e2a0dfa33bb0f070733746424ede961dfd75fe68a299eaa0a2a312b46825b4e603fb7afd60f3f7d14508a00617c345c25d53508e9f60ccb2e0b562806e9222e1ee44c09c8551de1d86d8c02c45e1c4a2b62c8aedc2b32e9666f6dec3d9aadd9480282e1e6c9ca4d219b6ff8b181cec76936699b1fcadecf33ac2993152fa4bfb73f7dacafb3393a30667069996eae84d0b6605585923acb0a2c43fbde7b7ea49d4848ddff2e70d02fc184ddb750b5ab8eb6d28e88e945489fe0fc4290901be8a2c8985f9006cbbfd487d00a67b272c30cf0e7924d92ed7f6927cc747c470a23624c17a0543c7b8478fde8514b073982ed35e1976e105e1213e84c90e5330ee2d72d10d7b0e19259669369b9427e673f4928c52f42604ea085c499e32bdc5d78fc3a989ec2a9f5d3223afcd0ed3d6a9d073302fb8493bf7894b76af9f0930f47e9cfc42e57adfedff7e7b3541d54067789b4158738aa3556c113d887a7b4a35498231973a5f6b2cf53c14b389916e1840b1792d8560089d37c7640d273c4f4207ae37fe14176b1d0dec5c3969ccfabde0e761cc16527fc08ae7444bddeae4ad2c251bf9001ba9729a3858dadb9a00ec82940f65aa2e8848469f973e7ce2efff19a485b665d4c2a9aee7049208f64663409c92789dab785bb788ac8153cab712573edcabd27f416fd720464761b5a686bc7e17b6685ba92e8075b77e5cd03e2568e227619b88d18513c280b261325db42f617224cc2a0e63929c3352f0dae821f8ec46913261256f805af65ab73d9d25e80fbb61ecb04f66a0952be6f43c38a4ad21e1fd8701287c991096fb4fd4c34a983db0894e2975f7614d34289f2c02a53596c97b7fa7458c88fa7dd0d33290dbf8152aff0c30a9c261c7fff013426b470bc5b20a7ea3a646a408483febe7b92b8f07dd65bd03b765a944a8fe15c65750c85cf1ca1a9dc9c1141892fff9dbd557d448c9dbb349c168fdf2b2922254d1b7f9dd46e57fda6cd618359aba7ada6c53b8b5ed132273f20c532b559c2a8b04427ab7822d720d1014017544f1a3e62ece67f78a35e97b3f53e4ce50ab148c46dfaef49219f407580df8d0346e122c0fb14567242392aadce95e17e4860e98c2f7fca7fb3725d62519823b2e37fe91d69d250f82da801cce8fc15663512d4c83906a311b5beaa4c88c9e415fcea7c2a58b6c3d854ad43321ffbbafbbc02eda090ee109a3011cd0deb116a77235028d268916ed985e24d512449fc70c3792e86bedf3ffb73333e6c4c2bd55c9f69b6ea384e8b7270cf898e8b9ec7f0708fa0ce1fc0968097e7869124581cdfc88dbdd1ec9896693d88da2ce7f6eba8afa54601e15481dffb803033b2aaf78b15c18b028028cc142bdc842e83762a3c145e118ff9443a4c368850fd2e2b5df879d476bd7e6d77d986c2765b87dfc859bca0583a8f13b7a304ee5763c2e4e786a9586ccc8e4178cec0965404d12ebd84bb604314834b4815568d0da382797ea1d2cc64fa3b7f2b29530709a95d0b48b10eea22b585ef20dee00f668b7b0045a376c09e61c517ef7ab9b84943114a574e77a287af317ece81890efc3e0898478c69173297991e81d230e88e0bd677b55eaae14575ec4063797f7b5b7df864c82c7c02d7275bcc8f12e4333ddf9ec6968564ec13015275b6927502ff76efb49b789c453c0d7a07905319f32f8dd1f641b7f8e1cd1415d8cde606f02fb128daf7d9683cb52ee13ae7923fbe568aadf4b5dcd9046382a7f8c7aeca189b43b82a81a106d0b9ee27f2a458715cd3ed736a746e7ac8017d9133ab1953e016e12a06a4d7841810defb5187d8080b0632c43c14907c44f8c5fbcb3814c55e610f8c7208e10616030f4208b81b0497d6e482c6b3abe3c42a9c6cb78bcbd3a384bd70e6db610648fd9efe5b473e58fd6791cae960f3369917fcc84fc5c6c5f803bdde5ce4d6032c6cb778d2e8bb3912f007e33e69a8e1ceb2f58dc3240b598a115a56675407446948079d3f8787d9689921d671360c16acaf872873efe552dcc03fe6a018ad5123e33de1d338c6da512daa89bb20750dbc61acacb99ebb2a3829e16588c2ea01269b7f825a711ff84a73316f2faa1b107cb41ace7088522cbe6082b465cb92c465379b8abfc2ffda951871d0ecea8efd49e9567ac8c236581e2d732ecb5043a2185eb6f5ac35363fd328dd53c4c94b08c9edf61cd2790d5d72ac53497332eaadce5b5b8085dda8b0a196acb1a76edc1b2741310545e6437f8832371259e65d49c5fa4bca1f56e4fd5adbfa098fff1b78faf3fa5fa9edc38057bff3ef1f304afb69d2403d38f7ece697cdce780e5ae779dd5cdd941ae3c34eddcb710eec420df61abf95926faa7ca72bdeb38513e3727ebaadf6b2453aaa351f180f7f8237b33e47e88ff88ff3ad7f575e9dcbbd1b929643e6cf8278340c567c06b7a2d5dcd9fdaee54ae63ced5595036aa2362445202477107ad6cb1449d31f1932454496a458e0b869074fdd6ed5b259f2bf14727bf3916858211e50666279125fa4b73e187aaf4610570c610c4e09bba44f321f15a5c27f269d3fcee32b8adf97698324c545d9629db88305ee8ac6af6fb314cd8f6701a2f5edb6b5a1ca5061b43cb72da48ad821f06ba34d97c3d4b5720df71ea73c415fa106c6a361a4836767dbf9ebd88920a5e4779f12e605ef8b7fdecc618d97eb0e35ec4063486ad5fe73c53f8a55d9b82c563a27e71898db6a97118f7fe83bf04c6c77ccfa51e3231c3b370b9a3bef6c774bdc007ae346d5aa6680de2340edc968620376dc9285ae51b93acfff2c7f23189c206f7cfa82331217af23b228aed3e18b50de44692ead27d3259c1904b35ef22147c295429c43af10ba9052e06be52ca64aa10b1dfe3bc9b593d1f676688fae097cb9cb6a8629fad6310e3bdef3df119ddab7e8270c46126ce5d5d177e93539515c9df9cdf5ac9d3eb2580e7db4361d0202386210908e272dfed623fe4c0a457cde8e9d76b789fc2a45e27607b07feed4fec46dafa41b388a8eb7b9c979c79398fb42498be12795be187c1c2ecd348d86aeb4723e54b2e2eca34a24163eb74462e64b25598c3ea9f4c4800fe3ded2ee359afd1627d13ce2f4ab969af5ae0a96e1ebc4faa8bf25b87116629e9ffda19214639f503a62fcf16514131f2c65b1e783252b8e1f5922b1fc792514f3be545262f089a527061f57c6626a3e202da11d17ae982f2d69100bae7c7b1480d838c7e3ee3171c35eb6faaa6a51726322adc7ffab91643f894271ef89436918b9fcd70ef3cf9ea1bc9c5ed60477b55e9dbc4df2cd83beec939391aeda6af0a7783ac9b3a5f4e5431b7effd1e7c7d83e3f6e7e61c86d31e2e74cf35cb4b2e081e14dbcbbf36d5cba626249c4039ef2499ec22b4faf79647186cfc5dafaf93cfebaa5b61fde7d77cb217133c72994ae8aa1a656e907157b88bc41e31f914e76b894b55c39ec2f0ef6e71b170f20d505ff92f9f6fd8ecb4fb9f6ea1d6aafbf706e1cea7dc381fabb780e2f7ae928435c13f6b01b6e70b717a245fb0e00b76bdf2da63da5904366fe33ba85fe2f29cb60c90f18bba8add403da00d5418d3f90e5d0b20f98dd189cfb78cf965204fffe94a10a3c7ec0c9aa34176ebeb854cbb3fc64c0d28613aa22f4509dbb486102d767ffe793511cdb334937364b22875874f40ec78ae9197085000c3f63e167fc12104536077634c4ac03f90c8936865c752343404014952f18deca90c0ee144977b097625614fef3088e7d83b3875258b5c0430062efccddc2a738def73dbbac799bb895be3ccefabac748b241fd256fd5971f26d1f07a998a66146e9bf2cb45950f8825d2a8c7d11294751fb420ec8689509f2c17650adcff44ed7366c040c04d9a5443fdbb1187994eeac9e5c0d90b4362218b394170a0c406ac103485d07b2713c1189c771218a28919301c047506996cc069c8b529f4399cc0d380e25e71fbb1cab01f0c506e9c4bbcdba29c4071ebd6911caf7cf0bcd5309e1c1730a575ea064737659f768d3e8a3665e5a0fa5b33f2626c0e14093b2aa73d0d19099bc5f1deeae91628c2f772313f844648590ad643bf5225c89d22bcda8e8ddc517b5514abf8dfe8f19afb92b4c1594bd15d6726974326a2ca097c7ff56794258afcdd79d04ad12676fca33a50579106efab61bc0304fe66b37bfaef6d2714f57e9be04bdec63945fcc179c9442b4df06ff440b6aa9a95a65a7035ce0f3b84a7589da1e6da36ce900e8bd5365bba3332ae56d416b422ee2b92ab8603c89753ad81dd376e96e5988fd974b3752dbe426f7b0029b2296fd196be928e433016f453e4457f0c390189c74532762ca68c71580dd40a8cab054ea4ff22c8e46a6a75a5453093d9bc76aa8683b89a39ac895130a0625328b4bfb65b8e8f8d648673b0a260ec61bf5d81216fb55433b9bdd2617097d94b14b511cd025c4f78d13a0204f38c329a2eed8fde4ebf0206bc201bfb44b8acbd40579465c1f2760b726854362421c5e49689e0681544442cc8866ffd22b13c7ecf2d0d53fcf2e6cf9c5b602d4c23e839a3d5e057b47b2c9619162daadc9f7e834f2bda17ec2a6fcd1ce404ffa4be24c740a50f047f48783eb3ac2a46b8a8e726dbdf6b45f1cf9f21cd6e6ecf089115ff94f07ba832e637235587d1661562cd0cad4333c0b8632771fe7e3b1374e6ac9d0bb767bc44d09199e29c0796e3b45b48fac7f4304324deca62399c4e774e61b0ac5bd92b2d14e3bc036287cfe9a4bc70fff4e8701aee337d4b3621fab0df98d6859bf1011eb19b7ca265db5ff62657f807bfef38ba2c4450785e7fe881ae3d6772807205a8c48cfb217150001839ecc02c641f137166bae76c532f9d512876a162f9ffbd44dd6e3ae78adcb1e25b680a45687a0e7b690eeb3b51bd096029028ce18e470fa3158622a999e22c9c039739522e668e13a13d76993485c257c7592c3b68bfa24f6c2678463144abb5fb36dd26ec8bc2d0ee4d272616ed6d0467b39372b9e8b979f8868cb7ceb981e07e76eabae1e8fddddadf2f1ccfbd7aaac58e4b7082d1d23206aecd635f37749fe173d56027540af2ba0cb23237a340c14c9c2081138b21443b480c5a4f673e461f9283a291941a7e035e921659999b23e7b35ea84908c8f9e6f248ef8060ca9655f77fb4f2158b869d851695b99167878efbc4f32091c800fc8a39c3f6f2d0dc6e46b62a199508689fa6683e788b39c3ee1359099de272ec0a34b8ca8eb07dba99e4d6e350f06964603e42addd705b1f3b4b7206d391793477cf2927bb9a44dfc0d07d6a2fefa389fbe730540ac9f28b155899150c4d1da6c49fee7447c825747181f6acf2f81977ac62cbcc7319453b4f7531b8115c8bf32cb2027355cc66b68acdc23bd51fd616242d0657d28e6028f76f57d5b78317771c5b8bc57e37c7d468ab69e30daacaa0e7128bdcb627eaf8fc6c9d923c22975e5e42645732fc61f20e8fcbbe236633a306ce217d3810259c5321244f3d0077ddf2a8d859527e8b0e8bf8815d9830c5f85ea190e5c02d743c2efd9db43078ae1eb1b6905bcdf9ae9490051c43ffe20f5e6841ece8756f8dd0634b03e656ad5b3358949144b9c0c493112497735a44c17227e0c22213c373a6c87b078b93a9fee76bc8d04898675d5c58c98aea0b7095679d9a8b1c34a25c31f9b9952b0706b54858eb08824a5a9f22c996cea19ef909e6e4e57441a5a05a5de9fe43ef38dcdd4a5963657fedbddac32803391b052871bea1965934b87b9d4c356462a28e38226fde285d6f803c5fc4119884663ddc343139b57395c7929ab4332e13a48e03b2306a56149d768f9a22426387b1e1e2e0a9af225a202beb31df1cbc3363fb8de05f386e9265316bdaa5708984a28158ae2a88674ac2fd0b232d890842c6332d04f5e2ae48756fdd424be5584d59ea65803cde0bb146d48d872c192494919cb21f991d20380b13f2eccda16c221470dd966972638a8b5ee5d89afde86c950827e8164ae8e6fb23c6f2724a91e771563820deafea72e38e11544cb67c8311362cc0d8b996b12c7a4a54223c4c51414f2f031239a4932ed46d745be9b2182bf19db6dc1d16fa42fe652d02259ae8b22de8d5b0e183d75dc727404a3d1e00246d5ee69006d3792a7144012c2140f6258e4cfb768007351ccf4c5ef63c60cc1385afa10efd21eefe77f5fa34cc309009144702f1e3f32539fa78f17485f4c0f9e4556c2889d62c1c3e2a1d650d7e712212147611d779de9812ab4c379b4843eaf68101b4de1da1f4a160ec4fdb34799f66a2067d8abcfbec2e5dde04fbcda46f1178f88b1849520ebb1b96a7061d657a484c87f25aa86a9d78743b162fa2cfcf29c26b382da6c2dd8abf841341189541ee84a5f19065dfde3201ea126e14c42d08b35cd1ddd39992141aa702f60f72641156cabaf5be88458cf4f0f1ed93c288c26c95f4bd24ac735bbea2d564a6263402604672b6914b987fe09d3ca038d177d34cb37d89619f442c5e0bcf85d9f1a6ad04814fb0a0f04ec3f564c7e27aec4d112dcd6f87d7592088e70aed75998e880d91393826cd64d0a4bf332dc98cac2ad86f9ad8031a4bc6b7aade3490a2203b141509234de1ec51a4c5bfd5a11c7f32cd1cd675196e3f6c4ffb93eb3ad7800bb4ea29f7d30ca4a9ac919693a130e098080972d39a2815c4ac5a26105f3330cd0991e366e62143e39f3657cbc261e469513fd188199b0c7b367a7244f757614c3bfad1a5d2959de2cf1ac1534a283f90b1421a95a01d521ca79c60c4c9e30789af9261ad64073cd37ffa3127d7016b5b06beb8558497fb476e8afbfe7c00fce266cad19ed665e80b70cf07988c170ced62afae0520be408ba37934c17cc6dc1f8601bde01343f424cc2b8e67d1c8c64ab34644a0942785234a70cb231c5c889cfd9b4fd93e74d3fa7c6f2c5a4c948f8faba708b7c345d6f604f9eb6b9b7c6a31d44562f715659e1c5f262f4151d1d2f578018a9aba504e7cca287ae74a5b42f74be7d1c5cf62418b4866e682a6bd4ff35662eac8743cc1633c4b37684561d73cf9233105419c8242287a1a18585d2779b359c73cb0fcdc99f6ba61c52a9661d8a8043c52f8c01c7212216fa87f3c4ef444ee501469cf4d27b9db353160a473a38108b35b8355dc79346e958ad7812415d8fb6b9f7903e6f456b9e03821518ee35278b42c05a339d4739c08e7d2145a1ebdbf8d30a1536bb59fce852dd0c2f18d45bbc3d47bda5c8645dcd2664019eff72ab82ba5994181b3cb288123f64d2eeca00526d24d383d49a935317cccb2f1841df293af607cbc938c91aac24f9625d3c31ebb45704cda002e2fda08617ef917d480d78d57a90995788aa9aee9506a4df6a0c040970e28fb0c783998516db3495acdcb58c4003b1b634a163f7a580ab3d9b680c4bfe57e7da90a333e12b7b233a20c4922619602e1fd505fa347865e76d0345e3cc5c1a48ab15a5d2baa0c3250246e7f78f6b3c00f5e3cf07079fab89f38e566986ebeed05bbbcf5eea6cc169b288d44baa754b9aef2f12ee6b07dbe90a968d0f08ffa82fd1ea7ebc3affdf972b6e7c0163a1c9d6601733a1ab46ff07b18582f20baa5110aa472b74dea475c5e4a0b528d9952f8d2b95ac421633c10688e820e0b2008c47e334900452c6c61b0b6bdda82c6a1ea900082f2993ab999e4c5d3798e3204c19de8dd2a1a53f9d721df43f8bc8d736d48086a1a34e7ebf16dec63ba52ecabbbcd2025a3b8945b8a59a9584412607e206b034ffb4f5e337d3565e9ac14f1520963ae6ff504684165b29dae5993bafc24c3dadf40d951fa2d2d6d09b7b47d0756e91067c43b96049b682d493f2f8d4392fb2cde853afdd86226b0d0c9a32a89f50152415c9c024213f0f7453172716a4bf74f217eb960ab6ed0a25a4a534ebbad99699445eb7712212b5c282178780280ea4d1b0bc05973cfd6f3f1dc76636f432a3a8b9e779b0ea8239e2614ee04b7e47914945a72b12ea0c7caa7938d4d28ce88ac860330993d50d27e44e25a514f36783ff0509de6c036b3cc09b8469a87d536e19c608a01c801e16756ab05efeba432db1d8916c6b878a66e7e37d8c67977e4f7752ae7828054ce456da99c7bcc1c146d1da1a2e77dc7918fcf263e46dc65147f98cc2925e8bf519e4a4ccfa1ba8dd52f6e81bd027cc84c41d840b50b6b07a13728753f73161808890c7a10844e4f18481a1ac719c0ce232b492c8dfaffbf08cac17c42b3459435281d1b74a16826a6e89dc4b084da520fe29040640a0ea8339c54cef5c4d6fb42647b9918cfcafad0975bb79615ddf833986b1900e527f28844c748c128f10c125b8e5d3d38ec64c885623eb1370e8b1d0bceaf08998df02b518b2cce0a62d02d6d07d39cf488ca6a9b66ce6ea7828eb1ab7b01c50ea5a0aaa3459987f8e8a55ce3f70b4209c875d72b03780987f9212ee3163f045a247577b617c3d7992c31ba0907daa2992d4e4b06412adaa09cef8435b37a4da9b8ff8d6d4fcdcf1cab5245210592af7075c36bb1fc9c1d06df0d36388c9e6c8a92cdbc0786b9ce666bab298e6b0085943e39ad5d13fac9fe4546b898ba2bc454c7d28665ec0271b509d1b85145e6714b473df19b093c04cc6b64b12188280109627564206db1302583f04e22b87a9615069b17972f341b55fac9eac1d508e181501cf3d91c0e51bebe83d37f13785554d9b192414a26d288f73c2a1329d9dc392773a5c44778047c2edb90d38de3c2bcc96b17e4319ea443ad857c5767dd760c98c9ae8a6db65c7286402472998e1391c58f57600c2b947cfab0b16b0fb94055ab941eb7156ef74f884cd0f0e25ee20663d22026e1f46d4d889ac990bcedcc7d768112d2b1a5b625ec0d4b277c3be3d9bccb2d4bad8f3dafcd417e7b117aa44b97d173397ebc1b6d6007d3577c0a8d1b8fd61a7c3dbe0b1b8c344d3eb495a213e2249c254f641aca6a2ffecd1f85047f21cf03e19d7c24e9ac7a12fcb7d0d33c52e8e6bd06f24f527c7a240708aa478186c2ee9039dce3a479aca4e03464a82b177a803e8256d6ced724caf5cad266e2505c13a5644798db2e83ac8cd0035a4ed897261085499e0dc91ac74c9ccd37cd86e714dd426159d74b5f1cd295e58248d6c861e2fc22af92c65915557f112236b132ef6ecc19266f230826f0a99c39f39dee0914348c903464aa8ba53cda3510f7cfccf90a7400371b16073361af5d6ac652c924c312f41bf4f75823c696f7ea1179a9db3e8b85d9994486cecff6d3eb71ee5cd8ce87b50862696f66424ee16748ebcc84f2ea4b88aebdcf90bc5f14e45aaf8a08f0010862f88cdcff26846d0af9ddbe0e99e50b3fe64bb785a5cb36acea7561e60d3df596702a76431beb54115936a739e8f664a709269fe30f3a6484cbf99ed281a4abd4af65e0aa9dd7dcbbec3c1bd5dc9fd56cc90218c4fa64498a922de9d1023ad66ca34d660316ff9fe1890ceaa0e56bce95da156d3942c816713fe253406ee6ec95d64c907aff21b536c5a5bd4041b18017d8cf422bce7221857448f3adb8e7624d39109a82ba3b50173d2060eab1d3b7399058604739c5f87cc74fb22c2ae2ece96f951d7cc1f02649b2b97dbdcd741358cc66ed13f8b503a4b9744636d5a0245fbc0ebdc29eb35d28b64b414b1f26aa353463d52d09b35b39782569c24dcc84ee2a06bff08986afd4addccbfa897dadd5511c24fd10f959d4da2b3ed7cab7a17b0e3d21876a87868fc3b0101541d6d6c4ba0a1cfc546cf2ccdccc979b7019c334b69fd33c625658f8d61a69eeb5a759c371b43aaf26935313e534799780ee9c78a18f6280c5015da8637eb0fad51cb60363cd563f314a1ac391a9275418529efff52e9d51528d046cce4c5aca4349814a2cbf9c62bad44f1ed1953a82bf38420e7d339cd91682be55fcf9a8dd9beea17b62bfdbe0bd3290d8a56b18de3956c607420405dc426952b4be28f05ba49840910c8730ff7118931f39e7dd015270538fa2ded29790294e2da7304a18b1218e0255b7c9feb20745760cf81dc33c81a114f2bd455d800cdd4f2a1e23e83fcfeb88e213d5ad0fce48ea4e0be8e4d6ad33646679dcdf8628583fce0c6f6002f6b207edbabbb3b2d2ec21df7939074928eeb3b4ad18c0afc27b8a0dee17b6fa73f4649c3ee04b6d521fc4c6479c14ea2a195b2a7339432532040347084182852ce08a6ce20cffd88d2edcaaf245f49747e50ed577fbbab18909990f921b9e648153a7c8bdca3822a0e6c47d612d9b7fb368aabfd929a44c709456a108c2cf29e8636735ffb43cc112140f01d303666a4fbe08f6a9ff9d086e17046f966441cc0d4d0e438c1b97adf4ff0c1ef636acfe03ebaa5dd42b7a13fe786de981f4f41194c181ae21b74fbb7cfcedc3dac6ff3ad78c4386c9015628c434a97b0f3a09747589dab7dc9c2b779b67b4251ea4ed09abebad837d8fdce5e404eeff66eced7f67380bd7e3ef4ecd2aaec7b0c19930d7ae620037a162d6fb463c9af1ec638a94a2cad86ac09a38b441e5b0f841ed3629ce1c5fc11cb700503d9bf886753f8472c75da62d0a26e89ade612a228cf16bcf9e30a229efcd7c00e858340600ea50755598b3a09c8d272c0d883337dc3bf9fc66368572ba4a904383ee868385681c648bba3dbd437319e63441c370cd630da77b6062115c3087d008accf1d36921d33c6f921587b0a51738ac0a0402960c4630dadcacee36a51cb609c6c8e6e2eaaa39eead8baf398a29315066e7830fb0f72ec021d27c0f420983720183aba0e7e21464b78bc70afd1318cca840121bdaea61d4636d6d01781497c08769cd7b0c22ec77cc41708a4a83453e52365f924ff77c7a0c550207e64112b29ecd919abe0cec09145a5c4536709aa3bc046210f96b847b73f8b8bdcc183e46c48a60124c1e54173d6200d928cbf1e7ee1c6cdbb93cabdeb59d7144a08433b31d59efdd22eb6f8f9cfe6219cec6d0fde94f266ed616d3487e80a55865f2cade806dacfeb55f6a1e355edb5ebe1519d6b6f1129c56243209238a1c70eb591b90e21fbaa53f7c5873390395deb13088788f7f69196a03f16756d154f7581b1c1a52a5895d35c0bda229b640b323799991767cb4a1b1d65eda0ad3939fa45adf05f38d0e4203ed16a5594bf7ae56960f602f3830d8a0f3ce87031db113becbfdb49c4f5386d552965230e1a55c4b135ea6f012f041d2a603f931abacb422ec804a34d3e67a395403de013104da42eb3eb997080e9f99cd9c8f62d225cf42b05eb308f927cf881320d06eddc90333a37576bb76fb98e4c376bdf506ad0796d697cd444f44c3c56228542842695c5089e561a2d35e8c8961aeed104b17ef0cd9210121ad5a770a9e15170a6ae3512cbf69de615ac7028a80bd6b0d39eb6958edacefb53c23d2bf30bf8bd75eb0ceb57683a6b9eaca934c2b4798ec50db43d3a2d7516d08f0a3833d792934d211485cd2df30537ecee5d033e0bcef495722b42d4bafc26b8485c4ee6fd0e8ffc826f776197e0f5db510f5fe02e00987baaa58302b8880266ab211b0811200a4adcd59811ecdbca6199e726e564b3e4c890e939dbcb10029e2cccb7091a42eeb23571c2bed09faaac575ba6aac1c87bd750ddbb8850c3508ed7e710c0d176ce0fe3680abd3c8b57d80dd93949d80b75ad5e6873645a7b40c3298c63afdd888ac872c822ec154a6050da01636832e52f7ac78d39046ac888cd8913e49081914932498350e17b0012d894e56053405dbea0c4c72b4248ed4b1ec5b39d09a26c72a9b487b209b752fe66d957a30b00fe30b7f2317d081f920ffd43f8ca45e563f4517c201ff00ff0818b980fe8c3f8887cec1f5054fe381fa20fe1538ae41fc547fc2d45a50ff0418af00f28421c16c955265bf706f0ff0d2c31f70cf8ed29c94f63b19ba561aa582289fe261058ee010c70f6a7343919a1005bdaf82421830d154c617c16b9e1832efc30e31d797787ca7737660248e6bcfa889cac6659cf316e79eb639f85586921e1bb66bc8c0206ccf2284c2ee7c76dd75c10b36d846f50984b3ce5302d7a9c9436c10d7326adb0f3c470159597180aa4e553e0430f54ab9a76a9b752438302c5f01e1b26f814889e2eda800d2db3e3fc20a4b6c26694e168088aa616f01a2798ea21d8a55f2f8a2e8743d67684a0732f92a7971e03dd713fce566f060ddbc551b85810b20698fe400d94a45421a9857df735792902c1ee860ec5026e840e8f25dc30dd890db9071d125b770fba3856714b7421b6e2cee9436cd94de8a058e086d0e9319c591a35c9f0f019a9b4b03762774af9df50b2d098ec37dc9beef8d10c8d6f853bd5b27ee64acb4d67215bf37c8e0907de56f374f392ee2dafbd2e0e39652139b6239ae1edcc1b08a3c76bbf8fd989bd639580da10158d7c1cfaee847d882ef3316e12ec2e3deb2ddff0892ccca5fb0afb13f92b06205430fdb6f8c882851a0a1e744fe3e469ced565514ebcd6188d2ae384b7cd9e4d4da317449826f6391239c32c21549c3b7e9d7a41cd5cc3036068c9c51e04713bee0d3813b06c3cd67099233684a3ef6ec885500db6042575f9a5727d42d56320b27e611eeef04b58adaa28a6a081486e34f48e1a9639ac1ad71980e8ddb285575258f801e16ec7b8cdc75c2a0fdf594e4eb3a5dceb9f15e1a09597febee5b7aae504212bb7ea4c2e7c0a180a30884a67c2b17c033af72cc8a33b69ca7991a60b0b3dc49b5b8b7d02f04d5d079450bfda52fc3c2be446a532db7c6ba428491c764857f094cf95a4553e96f945926fd0eb723dae6c8b0ef3173055bb61a500c748f0c93b316617aefcf702b8809bacfec86b79f09bb997bebcbb28fab4299ea94e02193dae915575f87c5a3302d6896656e3548da5c4f6d8098ff4e76d57dd14421e11ec384d7e36f8fdcbec1354f72c084659830c2c50d15c14f473620c99b9b8865cd20f1550521e04d62b2c29d022b719df4d2fd133b7641fc8d725304fcd172a14afacd3f3ea71f82aa70d30c7e8bbcfcb52913136149903e64c3d369a46b44b0cf9c23d57a88885124951157c70c686c02ac50b485210deab2affb3d884681f8a340b712cfb27b52f2bb5f43fc06ff9417a0baf0d3f6fe67d99dc255535407cf087ccc97b81bc17fce03d689c2079aed43a06e2b2f21136b0a978308e9dbebbef8ebd79a96d0aca68ed6aba5142a70fd65b0c49e6420469bce5957ea6e5e1a753eddfaa67b7eeac4694875570926661187bb5fec4c2894eaac96a0d00d29be73d0f179258583461d3e2d51005ccd2e83a68a8e715af34d13230b8a4cd77ab05892a0773520395c9e3e5524a365a79c8ee4d7ebcab434a330b15d70131957dc9b94d5ca026042f07a9e670ddda3c92354d66f11214375d31fa2de9bc3ccd02870c88dc37598270d15f90137b2afac1c8441151ea8fb435cc47a0b979708c9c1525d50fad956a5e180cb1c00ac6887b89e12356159c345b94e977eecfc45f277135a36eebe58596304187bbb181362c02590b60ce02a0075ddec491795dc6e789529fd4ff50b7b64cacc8f1c4f2d7b78e418f65a024e5e504fdbb36fd26b4d6fad585689d0f421e30b630a0b2f83f1b27d444096c2204aeea05a112481020b3366d90da7cb777a7fe511378c23f88451bfcf26aabf4b6dc1ccab6b5747747ed46922b5b053b2c1304c14321340a5f911871657777f7d2e09b355701bb08cc2c9d8fffbf0327183a12a50faf932b1b22b364054cea0a6be815dbbba56348055a53bd5e78b754aa212e9f0060a78ad6aae87490c347cbb9638e9c3772a09820ff6b860ad041490e8ebc6133c3160b30c0942d607186336f1091e300427c308315a104b06c00c48c192000c1023850821042063f8e0eb9008fd7046488220b2e299cc0822132ac0451218b46c48e0c15ce941d5a6c8d0c3b17747295b8c44d0c7614f1a6cc073e688921093451dc6840a58118760392d4a80089126220a1cb165d08493081211308c290915502070c6e34a0c51b6d80606110420a0f49771c6902c30a5658c132810e716008cac10e27d244392d20922407bcd8c46a5980195708b921841fb02c20879d447478a092c702badce1c8144282020ba82011acc1252b28200d223940b14004146648e345a5301c40f56916d0831a33968b561a2c0028818611c4f890c6870d275dcd16aea540241c0da049b365a90a219e28a1016fa82cbd20d042c2156cded21443229801166d5862c0022b74948993a394070cd395820290949a2062872fb2705428216121f4c111256428410bbcd1a0878d4cd07852748254c4893268de0829d1c62332b841438496604d1ab00334a79da31136b9c185c6833bcef440c21a326728012484287c8861006720b006212ea4c9679ce10109910bbc3122e1ccd1970cc6b0a9e2c319202b3270a1c5933e628dec7462880472481203e30e4f8cd0485123464315ef40035648b114a4d883902e6d1c880d808b203364109802abc0035e40363ed9302d50a8a1110924e1042c96871d60606926800dc55e1024ce1b09600e4072c11162aa6040d6c79843b458f2022583a210313680038647a65a220d28afa31a326a88c383853375643a463f64309c1c78d591c2021cd1e469f1428215070f4554c2c34b4380012888e2ecf11ac19317134f48f2e5854b3c61830014fc10c80b6d4039481a3f0e79010831cce8648815925e18d30012de9004615e38c0151cacd104f1714192b598904530e22ae3830e06d04616472e1c801cb9b266072257970ac0e011c3bdc345411b68d0f0a6cc0c2d386b8ea86345003a5a6e62c02f04fd5069a5d152c2887243112d6c811008496bceb47a0c29e20268c420028b0250348841934c088b8a358a20b1490d33b05e48c10b219c2029c12a218b0ce208af20585134f0820d356c3cb092001840cc12ec70add61c11e08c061c92c8aa63a1451c56b838b2821a841162223b80aa139d030881091955058764e48437327943d50021cc58c2c22101550b60b4d006100fd8a042401b325007a8cc244a74e650408b8390f4001706e96486285924ed0066860793ce48fa8226894a3c08e3920cc0c11a0ca822122d2e2ce2488ecde187065cf8021239429d428a0b33200294658528990b453850a0479aa4205c9020d5859537611e481572d4038acd953e5259001102411d4292a4608a4ce0871f9a4cea04320ad9620ba336a906d6404ac3450a5ea0f840ca619334f8208382c2004e684fae644125bd1cb513210850d3112922c851841fa89c1df41023054d04487404200349ac087204e988171c40e6110c7840ca9500d1e60029ec812482193120c27385013dce264834e24213b6b3a109b9c0196e32e93fb8f0099c530d4174313bd0218603ec78a06fa0471f9804e10095bf80011e404606a5fc6450f00378992cf237a080434f25703cf2467fe861749449f0137011fb832808227e481a9714421fa0bccd112b74340a09c397b0045edc174afc4a258251c2c61bbc478479c907a827362085841963e5044ff6145f28616102096e57104424b5c9618d2d3483178c4814776c1e78456d64112a341e967c39410284836662830c3e41a4eda11f0c4494c0a161a15f0b38a4c1a3e9903779a3c7255fc807f21b4244220451a68f3cc49b9986093128e532190fa63936a92477c0c61e1cb43869c3cc24f30c0e2b20a163268d0dc40879204913667430dac2a40302bc30e3858a303d3ce1a5123318f02106cf3186054e8a08424812004e929cbe28002290087d8180930c3e4831410b8ebc4e595c362cc141838553043f4c539723da2880902c6008a0889819148045942c94caf8a14301301e302398a1401f0a3801ca95a02d3068a10000b059453124ffb4b0070d626c1815c45a60d3b718a1852edc68c1052a85643102ceaa05e9c99628837411d3429bc395870ad952193908a9a0911f2f2c943162862c670c5100863219b231c28e225726041ce406875cb18585383b65161103880a0b6bac49e18b1b8920c1820f2310955142033eb01046cd9a224828410a1636901203d1184e6c20f3c804340f0b233841668c015850610892818c0d68b264e2308064b6f460852514bce142a600513ce286046c4c58c19045d2486541011d2b7431448200ce04c1c50a4a92032a307949b2025199461c19c183355608c0263e4a5986e6983fde4ce00d3612843152e86188a5e18333c6b4ca4855d2ac4460cccd1a08d166d218285bc0c8620b9088c1a3ca0796b0e1850f6294e844009034b1482162b81c590705b0000d621c1496901141500fa3c91a34562043884a9808a4e05078a3084fc20c21a58327f2e899230c0b2750a1e306a39f301cd0e10995f94700c048e29a838710810960ce50440b3d943290030c03bc4012889909a20093000a5042802fb02c02e60222325043c60bd95122814cc0caa49232470e28e2828322da88e128062b5d44a1c313a62314503d8471b57070f46306005a80c395c11741e2c4f41f5fec2f5660d2c2225c94e1f2251ba100161013c3035faa74e1431793642ebe48e9410a08786014e4458f2818f932fec0c0cb13490200c0072bc0e125b5c16b654617d78bb4008807982481c34b238003738c5943958038d020448b35669a04148104056124086f126046a9023e6d80592500041672c4e001b3802e960c60094ca05cd15dd418640044d0262ce8a28613481210c926a72e6090e08002082061862e1ae0310cc901024a7071240a08e0c1c7272c7011c3023aacf05182005c6a68d3c7230190c0878b162d3d44505446185c08204514b13d8a18c2c8900b6ab84410222b8cb6d024e58311f70123342633fa10040e2a46567a78a3059c27b811045bc0b00825f1c4163fd2f840026fd250b0258a4ece08c0dd04852d2cedc6214160f2da62b9ec30624226966cd979a574e879082d776010a3c2b5c6022d49c051000694b8198096cd081c386c5072450b098140c18242c64a854c62d822491366c4a8e006af4206ce96085410a2cb33a40b152c54204301232e50c0c9900a4115d0610709e2b0238548c050a904615549c10c335090c088185c0a39e43cce08d2891a2924c08200444006be440a1628400629720805518408228f0d146fb2222f7040c01760b029530443142a1e398a6f1461491a2312a2324e14f940f2c60a77c4a0254b200ee823ce046f96b2546189921b85b0c9595e2d68522ba040912c54f60792b451868a2c0cd8a043256b52c000853cecd003040240e1050a4e14800c2231290b5040fd6472c712d02128442bf905c7161bb0788207138dfc01c30e9637551cb2019638d66021828c30c2e0611500cbe907487690e22608cb075556b86c7c680457f20ad124113f34c06a204011120cf05303e6019017e07882830e3ee2a29231e0cec4403d802082073a435c69448968099026c0b812c6083a7054208538576888e48e285bf868c015152a80d387219074b9328036182885e1c30944151803c7cc10541a91166bac908cde34a233524c0e7fb06944436d2cd5426868440f2459d2816ccd4a1f68b8918110ad5989c2ad41e484d6acac2a28228a9ae5cc22ad352b3a6c4e4075d4f148f881c3fec163c884030d98b8d0c60e419cb0423b21a89910c9cf4f00d6b4ec656aa5740a694d8790d67406112427ce248c189233c80f0457b41f08d440000306ed0782a3d69a4a15630109bd6b09068183a00308328000484804113c78c092071e69ad3520d62aa66a6d20a067a562fb5f595ead5a4a8f426abd5eb1ec592dd5079d951a818410805e2d20a36c04046b217900f4b0142bd581b287b5963ee9032ccfb95899119c732e56c60320550b89955f663688a10511cc089901daef826e01b1f22bbbb070c13d4019e40396074baf7c7a65d456bd27511a00c01f0058d35a53a1fd00008696bd4c5202694baaa5ac7265a92b14684d6702ade900f2472b137bf5180ba66330c618e0a43520111878a4fd3040470bc84c9372c80f03468ddbe7afcf9e010f5afb61a0a7b59f289834383f51fe58c558ff13858ee6caab9f2868fc4499a23534cffa89224414185a83a558b11f9e457ea2f006f413250b6ce75746ed9f281e9889f2c0eb911ec64afdf06cf2c33389193340acfcaa564b2fe5d72b23b1726b3a766c11e2870705854d7b91f9810227bb485882d5a14347e645a360d905a4520d0909fd40f139c06be7084ab542039e2f7e74dc60f393a3a4486b01c69f364427ccf2d3a4fc9c945cebe1932db297e9c45f29d5770af62b9f4f7668adb9c0079446602472b0100277e96039630193e831002a66e6e84390344c5051c49213d428c20944a600b1c5ab814520d04404b290e20624336c796002903c80922a5e322102a1f24ac2874b36901a22b8e2b8014fa245e01d2b5808926459e10a0311c8d4e07941042fdc584241c5804a8e1d4b44a08a35624c60a9b1e1132d66c480414f2204cfbec2a211811254946103810b42550c705ae2069ac91a7b18c08f0c478c04342182031102e092a0c731009140eed89901c89236ce5c1904112a5c3e01e28f0fe620818329161401459aa10ee810c4cb8e16a6349c032fd42124d4091a9d68e9e4b5067bb5f450177a4648a8b52aa82c77b1b2594bd950b64262a5366b29cb4b59f59c85a6c555add63e9d5631d6ab4e4b2fd809c6180ae67aaec91731c68b848432e1e3798b880b9f4ca6340e30c10313333051a235202a53808084cc98018265d905a4e3864e1b6c5c9249537349964bda6a8fd9d1d9614087812896603264c915968c692615501eb2248be94a4c1cc6582555f8549200934af568b20c24c22f01659f0df1ff0c054b89416d58b642c91d4730552ca304c23030d6a7366be885792f93d8f065122049f2682658f64848b14c84cf32ca4812265a9304829694e5d5e9934f92b20c3b9d1e852629cbab7fb5760bee41e2c2ea6145ad2255abd5258b1575593dac284bcaf291aad5eaf22a5ef43bf7556bcdc217cb90b20a4bde596acb3f160b78e163811152ae7c822669722320b554663256ec742629f51a61e9935ad341a3359d335ad331a30c328fa0c92f688acfe44660a169bd342acba8473c0002426539cb23177c211212823156e5f47a57d26ea994f2aaca14a5bcaa02636c8a525ea9f2512363b42cab323018d9a2b55409664eaf96192bd98b0c9d315a6b75569103152c4246098b64f9d7c352a755ebd549d87f6691115afb7f61617d520bd6b29749955559919d6632998060ad57652a551652fd99579d845a6b89ac90889844885a33032484f24924a7c15e2d5406d46ac1843e7bfd997f652f132acba82e74b8d8a235aefad40ad94aabb38ab6644bb94b6b2da3ec5768c1664bb9cb7f3f654bd905670443a6306407363e15a0a11008b456a54a1521a14fbd6027577642ca56f904637d9605d66abd06d9d2c2a80063ac4a9529fbc39c4ecf5b1bcdb34e192ffad7676919a954312c199639052e7052caaba5bc9f9f608cd11753b55afa94a926b005201300440c357fa801885d42478924fcc0c48f2c3a48b49661f94a1297d60700f8f0c1880689196e0608014aec01cb5ea6936bf542e9f1a6b5e6831e2e3db23c9210422708207e684dc7871ebeca07483cf5d2431e4cd91fe6b45f589d5e585501128117c162ad936b7572ad6227186348d90a8f26b8e4a4604ada59b75e2da39c3b0ad1b9638ad6a2dcc19b97e67ceca8c404fb0cb7a6a3a6351d1e5a6b509a8e8f1d535a75a851c79b038739507254e223871b9f38e0e8e4d09a0e0e12e8dcd09a8e0d35f8bcc1c3e74d9be6f3068be6f3668a2843f9b3e457eed25a0e1dad61d7ea9585a8c8b57a6581b5545f5499e7f7d29ace0c4b2f180bf3fc5eb6c05a2d2f5f88bc58808a0802e1c384281841248e2b0099c2c200a2cc20258c067cc2b86308a033d2e8b02811e3821c0e21830301e4a045090d8480001ad10418608c30c904474c60071f585c91218f2335540689f2069bd6722cf0464ff632e9541a1f36ccf8ac31c51a1230b0841a56349d25a5d674d09cb152a54a1509dd9b02231858c66a110189606353248dc15cb18cb7a6f3e29fc54e2d239d17745cadd65a159f0714359f28abe613a54cf389d2a5f94489cd270a05cd274a04cd87e793e6c3f3c803517c4c58a2f998a0a6f99870a6f998d09b8f095b9a8f0927341f130ed07c4c90d27caa4c52e590e653058fe653058de653c54df3a9c2a6f954e1a1f95451ea69ad07020b0a20418f9b0d9a8f9b9fe6e3064af3691d349f1680d6f30927ade79338ade793445acf2782b49e4ffc683d9fd0d15a73e0a7c7811e7e9a4f0f3bcd474d24cd478d21cd478d1fcd47cd1dcd470d1ccd470d18cd47cd13cd47cd0fcd470d0ccd474d52f35153a6f9a8d12200293f0280619a0f4ca1f9c0129a0f74cd0752d07ce003cde769d27c9e22cde7e5d17c9e1b0228c0cf004890d27c48d0693e264b9a8f6990e663ca234a012e6940ebb90487d673c999d673096f3d97b0d07a2e4940ebb9844aebb90484d673c905ade71201b49e389cb49e3892b49e388cb49e3881b49e3879b49e3871b49e386cb49e3863b49e385cb49e3855b49e3848b49e386a5a4f9c1a5a4f1c58eb8983d47ae2b0d07ae27c693d71b0fc34108008a434c04003ad09000010480922a3f90461d17c828e683e414bcd27e8d47c82bab4d61e88a055e0268ad6e38688d6e326d67adcb0d07adc5c693d6e4c683d6e62eb71f341eb714380d6e3a681d6e3a6b59e368db49e3680b49e3673b49e366ab49e3662b49e3658b49e366b5a4f1b205a4f1b1e5a4f9b175a4f9b53eb6923a6f5b4d1d27ada0cb5d62a683c11b4067c1c80200013487160e70793199f32c040359f32ae9421a501099141470312222309202133404264780024344624ad01098da14603121ac387d68084c63802121a6382d680e00009f9887185183020a14c8c29404261e0d15a0b630d90106f3e61383030011202a30830cab4d68084c0f0a03520a12fdc685f94693a3f0e88c4013a34d312ccb5ca5e0ffb558b25c4b3153274544c74d0019003a2a20110ecb3de5b3c1d74d00110952a409cf53cb54139a341e1028a0e5088a05881320445ba89e4d5caaed86310373bb4d64070e304d0068c01b43183471676b4918008054b896969b891a34317b0d65a172e63a169b154e0024e6bb0d44ea95c4a988b295a6bbc281b4ae5d7111765baa8fecc6b71b58e3295aaade1028a8e065b90b185520312c292e534b14508ad69510628cbb24b878b163dcd94f964f15980f1c9624a6b2d4bca476db268008b488084bec0c28dd6da15ad692005165634c8409c95ea57a871c514adb51c4592d2a4b297c40a4ebaceebf0d674f6fe5566e954694d4767586b3a665a6b7a64fffda4ca2b5646f3675248ade928a085322dd8a74965cd90d7ebb0a052e5ad43c68d0cb6c2eb533944ade98c694d474c181d306d34358ebe78494097a6c3c5a865aefc3aca965e855651d6c2926562f8674baf024ce98d32d69ff191c2cca3b8141b9010850fadc5389a96aa030969e1a9ec6281c929d5d04eb95a3be56a1dc1fecbf3d696ec1f0becbf7cd26ec15e2d55ce5e7f26c502f3caaf225a7abd5aaf1786ed7729e157cc8a97e8f3041a4f78d1565bc94118d1642fbc48e9392bb7d678ecf0712290064b0d39e14af271020a0371b4d6b4349f26aed0a94245674ad343a7841c2d8474aed0e964c4a5e88b171ce6845118f2c2e5e8cbe924d49658a3c69a243255feacb5d693b3c6b6d64e2730e8c8f9311bfccbb5a4a3304427004cb8d6b6341426a1a402852ce182004bf359628216a6f92841466b9f7ac1584241d04025bfb28ba70805244246f3497c912d65af4ff5146cc7812424683a20b4d6a47cd060ac5ff5b09a0f126390b8c094c40508d66221d1d35a52cbe7083a5a3b828cd69a8f119cb4c64af16cc508188c40edf0476b4042d923e52e4659e81921a1ec65323d931b618422948a38027a576b6740acd497fd674e49f9d124e51703537aa3d4952b5911ebb5642ad5d01555d642f4fa2ed90ff1fc59f60b5b5e585d8165590b9787114c4bf525cb3ecba82e7f2605db995504cb48ff42421aea822613e35abdb2bcca957a1db58e8ab2182cc3b2a55781c3b29496ec1fcb95229e3f4b86e52ba82c67e902cbb216d87fe1a92bdcb57a656935c7121d0f701073b455965a05a1ca905e198520825a6bb0962a0b014147f63ac15aaa8654e6e4f343252d7b99741080e68d7e486a5846809103bdde95652b2618973ec9cc071f88e0416f8500245599672056563d4aa5ca8fa6a5a5a594b7a45aae9611abe8f5fcc5a57381c5b87c316a19f1cf542a353c3cb469adb5d3c994a95459c7b225978ab75619abc53a5282b59c1db2f8ec20828f0e63f8e860852b417ac6822efc1c379846dab3b3773faab38c0f9e90d30673f8a4bb344ee8e0eeb5d32b395de018dde66fdaa76dbff2512e707edebff3b9a794d55997515be069377ff5657fbeef479da305e6d2bdbd67bcd07dfc97e97bc1b22cb08c6f470727b7f5e99e292cc3025fbedff55c2dec99d20b5b2d7d058ed6d5def7fea8532af7acc030e6a96577d6521b6994591538d3a86ba4b5571829bc3fa9c0f3e5fdb6cc94ca9975a5720afc30671a25cd595239fb8c52e077ad7552736975aed5451805bebcd7bee5a4ba57cdab9c100adc799cd1d27ba18b8fc68aaaefbd9ac306c3defb9632dbc7fb8e1c664f60ae2b87cee91e6dcd7ddae8048e7b4a0d9fdc5bcf5c5f874d606bf39c1ccea927a46ed2d389c235785e4b238455f64eaf9d19551f6402473db7e3ce4d385f5af72e576c092c63ee90c6eddecdd14189aa4fe951a7d35302d307798eee59d9bfd6b851f53d4c9593c0365ee8ece694cbc7f9e54860feefbebff255fbb48654e61c81659e3a5e9a39bf3243fee0508e115842ed369dd67d8cb7c7ec2a02479ee78db0f2c7ab949008acb9d3aff97d3fb996bca3eacb5a5cbef9826534a70178d62e697753febd1f5fa2ea43f3ac68ca1902cb5bad9eefc1cca17e3785c07dca0939ccb6421b618d627282c0f45dcdf6c51bef73ae5b303940e058efc7c86d8eafd2396dce0f38f2ab6ba5b4da37bbbd4f4c8e0f18ce9ce386dfbb9cdba9f20bf660bbac5bffacf7ce7c2daa3e0b5fec045b759ba306eb38f9dd5ce6e7ea9e5d5bf8e2298707cd298c5056d7fb965bd2d8e9b35776c9b78ab1e2969c1db0d57ad20a339c3adbfa14c62c393ae0bf8fcbda2f9cb53a0d37aabe137fd88967d77daf875d13721880ffc20729a43643dd3974acd66ab54a5d38714e0e58e72aefbd373b0b39bc1996a5b4dc1c1cf03fea669f7ad2d8eb9c17f6d6e6dcf05d53f8dceef8eafc47d5375fcf62151de5d880759693536963a5bdc66d5d4e0db8f22ca9bb3ddffe7894f255aed891cba101bf5be19d91f79839775da3eaa35466c050dbc7f7d37d76feb15a547df3cb7b16b6ea5106cc279f4fabb37a4f0abb1be2b98bc994bdde52233227a418b0ae53bffadeeb4ef3a86d7c14c280ede5f5f6bfee5f86cec13b8dc89cc62ce05508fb737de3adee4533695ed3dc79af6ecf096146d5178d96f09e4f47fe4ebe9bb3ed7f9f127679bf964fcf17dfcdb673560a0d2bd662a1c151d60e63875a660a67afae552aea33f8ebef4eb9e4bac3dcb96c7556d14eb1721793a9d559a953352273ea31fc974e6ba1753c72fe3e3ad8cb9e469d2dad9bcf48b37d298dc89cf40bdbfb92f23ce3eb1bc2fcf151f8027ed3e6bd779fdccdbb3944d5539682efbab09633dec7b783fcddcf8aaacf154b6ab554949ff20b693ef86a0bbbc9adec1556ea789559a2ea8329fde944330a66f595515b7e61e14ceb9df03eb4967e9e329659e1173fe6de2fddcfe527abc9a452fd5e4185f9752fc6976eef7bdd8ca8fa78eaf4ae25580d3a422168893564322db172342273c24978567bb5def74d98737f1555df84ad7a072e6c9b75a63bc37bbfbf84d1c552b8c39867d437c2db697d5b891721b1b21793c964ca5cadd3ab46644e1c85f93b7ebbcdbcf23ca583fbf9a9053bd55702127e1c526ba97575f27e9d46d5c759b1d6ebb42457e8584e0bf5c3ee667d9c3ea58f27bd56e75ee78b35576d27c7113eed667696cfa78eba5aa7fb6259ea8534b56c5c27ff6b6bddee659bf9ce4a8f45e3ca79bc993ba8a7dbae3b547d53848cf57ed76abde97bfd6d7fa8faa0bd66707496c20aa39b1bdac837aa3e58f6f3159d70e6955719b7ed97f37e52c556ee39a9042352ca8aa5531480ab7b73ef096d967c4a7851f565f621b15249b7051cad8efbced8efd4b95b8baa8ff52acefa93847396c19ceecbed76d73de5b64a547deea169b94eaad8ea525b5731961516f09e55d61ceb769ddf581d0a646295d6c64729add639eb20b59fbbebf36a999f955cc7d7c38a884c26fe29576b9b4c99098b9720e8de0be6ca8962053cfbedb13beb6ab5b2fe66b5ee6f161716166a33574b680cd65c4f2ee9d4fcd5d2f9006270d5d9c9b73377ce3974b2bf974a9162faf984ad7a7485894f77b86f7f5be793f21581898ebadfd2de7e2dec10555f54e1c8d518e1ccf146ba6ded1bbe14bee01aa174d055da7bcc9f23e7adfbac179c6d9d564f3afbbd7be78daa8fb7841280ddd5f176fba08cb33b4a396fb9db05e70e679473d2fab0eeefee72c11ce668738f7b3ff9e0d6a8fa54ae55eac4ff955199ad46f8d528a17393e7d9fb3b0d61095bb09c705bdeedccda49fd322aab540b7eb723cd8e77bdf57ed2b2fecc9f5aabd6cbf5a0900a38f6ca9fed3647d71dcd16559fabf5e2cfa580f5cf1ce1bd503e8f7c3a546dc1e28345b843fbf8ae96c63939bdf3b453b00ccbe07b5930ed17cafa7ede2a399410559fb582028ed66679f9b34ebee552a2aac914e70be6128325057cdd8537ca19639450c2ebaa95d942e8ee9e56731e7b908331956b959aab182ba2b982f7c7c9bf5aa837a5f34293c9ce4cd36944e6048608736a2fa77b72ae2b8d5ca2ea7b8fda99696944e6e4ace007798d1aced7b393dafeab45f4ca61b415f9a81199531dc2536b09f7f30937cd7abe13f084f17539dfac74dfe9e4a446644e0a3001c7e7b6a3943e5ea7953cf6de3a5d2d55708cfd59cbaf8c95e70925154ce9bbbaf78ddad19fa7f8287dfbcfc4a22978c6ece08dd4d5fee2db8caaefb45f19c6cd5acae49512b09bb3df08a79db75bad2daabec96aa9884ca667b554db643299a81199130b42f84e9d61d65bdbcf52de8daaef041f85ad7aa417431e39fc87d7d249e5b6a8fadc7bde62c9f9de905db55a27157f9d4e00a898774df3e350cafa6add12551fec654fa038d67db5745dd3d74fe745d577aa7662396577b9d6c721d4d9be2ab1edfcf6c99f963cbe6d1daa3e34ad17d2e9c1f8e2cd4f5fce9c66b97fa3ea7bc132c8e36f097b7c913e2bffb61e969073bafb9b993e8d37a2ea3b71567eb0aee07086d5c17861dd90fed30f551f2a8bb94eaf56a7434144414768b297fbea342273d24282aefce6ca25efdbdda827aa3ef71e967a8911038baddc3422737ac184bf3a69fb73386d8ecfeea0231482ecfe3026d3fe332613955d46807957789f7b7aafb4b5a2eaab318bd0fbcd91eafab8a37a5a8aaa2fe80885a04f93ca6241475a824eac14852f982b4c08eed6f9eabd9746eadc8b76d2675a9d51a94cb8fe83dc7649657f3e2747d5f7687661ab1effd5da2a808065ef94bafa747f9659df0fb07557f6ce79b5d6ce7e27aa3ed8aac7a02314829062faaf984cb0553799fed5da590e723016741484c54b50d09196a0139446644e287870ca62afd3a9020428e595013a78a7960aa9a5a28003a0a00d0e70a21382b0413c390d1000e481013cc840040c1070010816b80a4e1f50f024c56002a5161a580605a013021100be13fca4acd22724560a956514d000e0eb00127010015cb5f6e9f5675afb5fa7d34ba213baf667f567e9743a800f027a320a04005bad57050148da59ab542d1020e0f95f153c908103eff4481434f032007820056ec0c02bbf6a5b10e5029e550650deab05cb17ec6ca0f34eb6c36218e4bcd3a34ea79da5562798d25fd00e7004d0256be4fc2ab3a0005d72c9030eb4382ac06668278e283400324006185c604105144c50000922f8f1e91140002078a001004861200a0f941d9df689279d70b2898e263a996062019f47d4683e8ffcd166070c075a1c823c32d4a220b2e244021798d25a8e052690460e1a3f2b0958c0a38109444180aa8ccafea8ecebf74b07146498618724588f942b3f2e44c200162e1401803b7e52709e70a2b5353a6469396481bd526d8b95d7b35829a01220100740ac57b15e357f505ace5089530917adcd6b4d09218208d3a559e042fb4102b2838e3ae8686d678e9ca2d69a941d374eabadd4da8e1c6f5adb81a3f1d48e1bad4bd263696de78d9d08b8017bb5da60a3b556aa1faec60f1740db59438dd65a8e10db0c04dcb4b6f38086c482e52c29c34eaa9ca7c83bfce4097e5a60c326883270ca1c11a521466b3b689cb143842aeb96ca0cd82bbb5adb29434a8665deda0e19632cbd0a685adb11238ca54f4ab5b60386e3aded7cb16ab16ed8516aedf54929566b0b2cc502b382172b54b1da4aa82cffab45c44ab5362c25445bc5b098d66eed9617ce7a58f6625adb718017ad25bd5a5896acb4b6b300374b56be1cb5d6da4e9bd6da4e17adb59cb6c3456b3c75daa211adf698d6768cd8d1228b06812c5adbc1e28a1d2b1850453c232444c514aded4861471c6e9411268c9f3023b45f65569819c2c05e315517ae4aa18896542c2e4baf82834b2fa9d273168c503436af566ae709277ec07469a2b5d6dace1a265adb594289d67692d84122fbc732149376867d31e2553ab78cf8b3c0746919a9f25f69197155ac2526bb56adfdabac52c5b0b886602da32ff88bd06a2bb956605cd9a5845bada3ec1f0b122b65f4ab5456b55e2c30b057cb9526f525e3aa569657e9dc326a6da708952a86e50563816181696d87881816d080216e683b4204c19f3f0b8c4a153362e52d5d60597e2db0a11796ecf57af55b7ea75a61965eb12cffeb0896a558a9151f7a554eed148fa5a0ca5248af4595778a85da7f8461291698bcca594c8525d610e4ac940a5c00e162c76a2bfd18c91fa3023417b610b2658fb6e3436b704c6b3b3da879600b6c304c258cb4d5568a61323ba68ea163e61839268e8163de987f7d162d4868f121832a8ca1c216baa5b202237d5607ae4a89696d87017fa5b59d1c70e0cf45a5ba81bf4a6543e7a2520dedd4b043032bd65bdb99a1b526654786c6534531b4b603c3ab5a46af8a6784847e8a20f92982b3b30018d3d0b764959a5cca2f34671a7f56aa3f6781c9603c232404cf5469755651d6eaaca229acd7f26a5561bd965f6523a5bce5579995619957e1453cf57acd8b84845eef8a65ab16ebf9aac57ab55e2f9c651957a5c45499b23f4c0a8915c3c28a75be59f459097be52e4bbc6505f6ca2e5eb4c45b56aa5481d1c217b3b1a54f9234c65330c67eb0c4768ebe3c2cf542c3f3bf5adbf19280d676baec70913406cf9cf01c388d1fbcc5074042bdd5ffe501166a992bb3b1fd61b2946b284bb932124be55aa55cd915011ca169119db29c417e8878f82172a04dc99eb7583f567640a1ca8f150d86aca0a18605c070029cd65a8665584e3862bd8b4bcbe8c7844aaefc9800b3b12aa81f2aaa1d9cc3cf94474e4a3f53d8b46f4d712490f0534224ad297196d01442115c3c5adbb9d2da0e516b3b56865adb3961c784d676aab4b64365cad04f3da3fdd434eda75e2c06e8a015e0fed40dda0f0da4fd5028da0fb5a1fdd031ed87c2f64323683f9393f633f9683f734dfb9930b49f0baeb49f0ba6b49f0ba294a2dfaf58eb0b5e82a5c0b48c5e3c5be1d94a96a160af94152bafcab02fff8ac1625854aa4cb4044bb1621929956525a44c405906d259b551b0574a03652096fec084647a0f80b2ffbe945d402d1810ab28bf3ebff09c73ce39a594524a29a58c31c618638c114208218410c2f7de7befbdf71c74d041071d74d041071d74f0de7befbdf75e6badb5d65a6b6badb5d65a6ba594524a29a574ce39e79c734e29a594524a29638c31c61863841042082184f0bdf7de7bcf39e79c73ceb977efbdf7de7bafb5d65a6badb5b5d65a6badb5524a29a594523ae79c73ce39a794524a29a59431c618638c31420821841042f8de7befbdf7dcbbb6d229237c5b56452bfc88a0a5b5965f4f42088db49f1004693f21d4d17e4260a3fd848046fb09c14dfb09618af6134212ed27041fda4f0830b4d618e87980ffab5a465cd5ca02fb2c1b42d352bd9525158b0b18dcdace6d6dc7eed496b58c28cf567648684b594bcb484b6b3b53b69d08a5b51db8f35a6b39e31b7fc1b056cbcbc3b2584629fd7bc98c88b215572ca995b15279d58ae9ecf9bf46d3b394528a63e1cf42935dd9eb97b20a4895b92aff975717be7a58d10e093ba62b5c888cf0c90b172f5ef0096b017385cb96d398a12d42420fcb48d9d57ab9b49ca982948fba7c52eb4815e3ad2db6caea6145482dd5b352482cccc101da071eb4d6c8684baad7154147fa9465d9b543809659a955eab5b314cf565946f30a6aade95c12a7b5302a64aa0ccb3da99555a962631996b92be3afca30322a690dcb95d6742899a435bc811b18390a969552fd57b14ce711475a6bb0bc7ab5b00cd9997de1d98a9d9f652b3c5bc15e5ae3ff6a8da75a61fef5b117b28b4b0b92b680c9147d395dc1648ab40c1579c15f4ed80b98a32123148abee48cef6f2dc83e5abb026ba9be481a6b4d071138b096ea0b10d0c9e5ca4242f7cd095fd9c96580230b5f2c0339b86450022ca52d7ca78c012a1824d1da211c642f53767abdeb07031f5a6b260c7000c346ca0f3f17b85a1312c24082f6734124ede702345a3bad5a013be03761ee75d6c9abe47beb80f757f8dacd48a1ae773300cfabddb39be61e61b73407acedd3b9d73e1de5ee511cf067d75fae5453ce659d506ec03aff9d7ccebcb5ce6e42b101dfd7b7be9977dedf7309a506aca1b46fbb9ddf7ca923141ab0eb9dda3b399cfa258cff09eef7d6dee1fcdcefbeee3dc1f4ce29bf77d8dd8cd57d27b8579e7fe7de7ba4ddb9e704ebf933f728efd6b3d6be09960eeabae584f65a2bbb265877adb3947ff5a5f2f24cb0d61dd23961ae74c2c931c10e72ddf5ac9cbbec1ebf04575da9fdad65fc49e58e83edcb47bbaeb9763aa3b604cb1cfb53e9aecdd0ed5b097ed3393e69bf75c67796121c2d9cb9724aed96efea24783e5da77d7edde651524970854fca781fe58f4afd22c1f6f9bd6f3fcc7a5afa3824d83948efaed53d7e013c65dcb96b09a58cf01db7007e90f2cc25e58f3e7e1d7f045bdae394da4e5effd6be1dc17ace9cebfefe8de038ffee6c6d7f0d61e68c6078df6f59e7bc8e7ed58be05e77eef365ef51f3a815c1115a289dcdf3bacc694e04bb38619df5de9c5d8c1911cc23b5916b97bbe6745f38583b0a23e73a3ed76ed24330fd4adf39b83bbddd4e4330e5dc4ea9b9ecfd4e1a2b8035e5f6cac7abdd51bbb80bc1f4edbeb1d3fdece4156e42f073c9bb7614e679bb837b10ec2ead92cbf936a453be2d08ae16ce98a58639bfe76e0782e5bc73f3dab9b3db51b7298079ce59d76a67ac72fe4f005b073b8c9be7b751f307044f7dabbeefda48a986ff078e1552ae357f5bda7bb91ff8efccf372289f9bdbee3e308d7aea9b6dcd525bbbf9c0f179bfb9bf47e5cc57ef8177ec77db5b397ca79fd503cb7c777436ebb7337c360fdc297ff1fbb65ade2ba79600ce36e7eea28d3a565da5c6035fc9f773bef5a3777ed477e02777d4f263d47bcf1db51df8c50d739d7b5257dd83ba0edce17692523eff257ca7e9c09c6f6aef86f9395a779f034b0ef5fee8ecf3cc6f97035309f58e15fed77cfbc78127cc31badbede6f9c17f83efe7d93fd2aba3bd9dc381afe3d6be4dffdafc9bbf819fbeb3b7ce98a5858f4700bb4cb5cd515a1adf3aee06be1bbedabb945acafcbb0dece6751576a9a58cfc6a3670863dcbf8fbdefb32ea35b094b53fbfda6e582dbd6ae03c29e5ddf1aa5fb5dd4200c3fe9e95afe3e3d6499b1f80337dfce9f97adebfadcc69e0f8a08b155a7ee58b1566347095d1ead8bb7576f2fdf219783afaa2b6b1f37ba57bd90c1c298cb9bbdfd34efb2e9781ef3bfe647f3cce7fba9381af8bd3f6ce257ffbd13e0676ae5af8b8b6935ecb5f0cfce4ee793a582de5f37e18b85fde79ce5b777d9f7d30b07e1f25ff9bbba5eefd17585e27a57dfcea4defdd0ec07a73a7a5ce34c37ddff602e7f81af2cca3db575eed064f3a67afaec35bbbabba0dceb5da6ce995f3c1ab7317f8f2dc21df956e69e5cd5ce00ae9de5dbf2ee3ccf26e816d754ef6fa78d49373ab05de99c2eafaeb75d2c86716383f9de5effefe72772716784737e3a6d2bab77ace7b05eeaef75edf7efbb8a3f25a81a5836ff5730d6bcd1ade2a30ecda3eebb2ecaeeffe2e1598df6c79ef4e4bbe697e770a6cefd4fad9b7f5752eba2b05ee0fa99333ee97af7e1418f60921bd77f66ddf4381758d9fa17c336f1a776783b984cfd21d5fbd5f737f024f2a25bdb4baed9cccdd09dc61ff78b3d3325b6a7b13f8e9ce0ed2b7db464dfb1a5c399416c67a337df77526308df5755da37d6ba3fd2530d7d3f1cf7cbb5a9d7c25f085b24afef2e4ef74df49606af5e3533e9777be3d2381b97d99f3e76aced6f67c04becff5e7b253be6bcfd9089c35742fdef85a3eaa6d1198d6686da4df6dbd725722f0a673471d6f872f464e1b80ed8cb66ea75ddf31673a04ce3047099fce0fbe4ba910d8dde9f85369f7d359cf20f0cf8fb73e0b2710d8cd28dd8571ce7b65fd014b6a23b50ff9e4ff66f4016bb9bb7bbab374b57e0fb8bbecf84be7787dd5aac194d21a2bd7b3db0b1fe4014f09a5cb7dc2677776c0996f4e75b6f3dffcf7ec8e0ed846ce69844efe8b4f9ddd610086f95e2b73efae3ece7bddc90167ae7396f63be75dcf5e7770c0575e0a5fe76c29a5faebce0d18ce679fd30b75b696f3ba6303d60eca1861e68e6bad77dda9013fbf71f32e75ef7dea5d7768c0f6a9a3eebefabbdfa9eb27783a3b1d755abf7c67cdd5130ca9ecefe0677e6197b976829de536da08f3d3faf3564eb07e53beb66ebaac67bc7513eca2fe0bab7dce61beb66a82678436722de9bfcdbdd64cb0cc36737933ddd0ca592b2698c2bf8ecefb57dbb769bd04dfebf88df9f747fa90d638d8c55aa58e333e9d12d26a09863dee0c6bed77720869ad045fab2fecf1f29adfa4b3528221ac0ed647dfe57753d649b07cb36aca2d871a6ee9aa24d86e0ae9847bdadaa9ee3412ac7785db5a2a35bf7c760a09a6d9c1b87b76daba4839bd00ae6e72e9669596f32a37b500963d47ed2277b1cbb8357d04effc64bc12f6f84eeb4c1dc1b4d3ca7be45bf30c75a68d601a1f8f9de7f79cde365346b084db3afaaaceb64e9ae922d8eef7f5d5fd6c8ddb65aa08de7be6f9627d534aca2f4d04e73ebfcedbe3d70ee5a588e0fb19cace2bacfacd4e291c6c7b8f363e97293d04cbfab74f7b79a78f5b4a0dc195c67755762be3f73e6905f07d8f3ffeb89e5bf697b4107c5f5eaeef3baaf59492128233e4b93abd6fa7b27fa483e06e9fb630c3d8b5e3365241f0dbda7f521b23e53c3f1a08eed1697d3bb4df6def3f2980fbdc56caecb4d5b3f69f13c054ffe4faf7953946f713105c6b75eeeef95ac25cf9fc03eb992db7b6c23cf9ad7cfa81f5bc1a4a7d25bff4279f7de0df0ed6ed22bcfd59c9271f98c2cd5d7cd4493d23e4730fbcb7851bde7ee7e4f1f1a907de79e61935bf7a67aef7cc03ebfd6feafca87d79ca3d2580659d3372fdf6ef7bb8271e38c3a8dfbdada7dc6eeb7907be564af968978ebeb57ada8165bcb73a9bff5ad7ab9e75e0596deeefe4e5d6baa8271db84318f9cc97de39b075eef9ed4ecffb369703c3095d9457d7fef65f1b078e916e7bedb4faf13be91bbc73ffabed7cc9e79e130e2ceb9dbc736d7f5ffd06b65abb47ad8dbc67b86304b0bef55d9db9d6b66f08ddc04f39fd0d5decbcefde06e6146e78b9b5ba67cbd9c0d34997abce79ebcff1ad81e3f77d9dbc36df5da19b6a60fe748c17de9fbcd28700fef8b6d595665e9f73fd01b8efeef26bcb21d74f3f0d4cabd63076979d7dbe391af8693d357fbd67b6739f811dbf8fc3e83687355733308cbd7fbdfd5d2b7fee32707e2e5207b3b67cefa7c9c0d6ea2cf57b5affcf1f03cbeb6ceed4c29a1dac590ccc9fe6fdf6cbf6d5586d183857472dcfbbbafcd982817b7edafb9cb247d9eb17586a5839dc9d5bfbd401d849f8609efd4228a7ab5e60c8e9b6fd55386fbcef06e7a7dda3953ad76b9db30dd62fef6fe7debecb6d17b8c327b98ef137dd717281b9db76eaf75cae37c6b805763c4aeeaeb514f237a116f8651be3d53cbbbeed7d320b7cf58d50d6cd9f8d933e1638f647dd8dd2bd0de7bd02cfd75dcd3b4ff91e526e05eefab78ed451ad7fda2a70940fbeca1da72fefb9a9c0f1a5de72eb77b9cd534f8177acbadf6bb37b4af39502ff7635bbdc75a44eef2870a79f6b847666f8788502f32c63fc2afbb35f291b6ceb8d37eaff3bb99ef609ec1e7c5bf3f32a61e64ee0f7e47dfa6aac30725a9bc0144eda617e71e67c235d83ef7e75d3e8f28697c3c904a6b73eba2fac5dcfbae5129873a7ef9c37f6cd9d5602d72977eef671fb5ea631091c9fe48ff21b679eb32381e7a3b53f1bffbefa283c02cbcf194248a9d3535b23707ef2f6aea38c9376f98ac07fbbae9d4f4bafd499086ca19c34bbef0fb5732e3600cb07f7e559c79bffd621f0a5b6bb6c73ec9dc6d885c0ba4aeddc67993fbeff20f0d3b6cedd758db7db0e04be3443db67ef91d75c7fc0376e1ae74f6bf38693fb8033bc75eb5a6dcffdbf073cabd3d4de3ea77697abc153c3772bd53d7799350ff8c9daabaeb3667be5db3be0f8f653297bb597d7ae03762ebf7da7d6badf373503307dd9d91df38577467a73c0704afb7346a8f59e1d073cb5fc19e7e370fefc1b30dc516a3e77e67c3e6d039e9c3f3ba9ccddea286bc0f7bd7cb4f258a10e0d98562deb9cf027b4f152f80976f3cd6ca3953a6a7d23f404cf7f90beaba5b32fdf083bc19a47b861bd93d6fc1d424ef096dbbeeef4ee072f7d70134ce38c317ecef0da271fd404730b7bad99bf9bd0550733c1f5ffc63bf353db5dec9860f9303e7df949bea5e397e07ca3e3bcbf1cf9e656c7c1d1d599e5ab5f7bbe505b827b740fdaab757477f25b097e4fef8e114e29b57b9712dce98befb91cbbbb37da49b0bd5c5a17e7bdef715e25c1fa9f8b9b42579fbdb9be48b0ab5d4eede4ebdcee4d1f24985b4a2dd73ad277012ce7d5b6c2c9df8b34c667013c21a4d5c90adf3b49e17b0467f832ad5f37bdf0f2f71cc1b7f70d797591d3b7efbd4630851666e8b8ac56ff758f115cf79c51d7f91e87b9f745b0cb7046aeede749a17e45f074afbebdd07d2278db27e3ccbafeeb1c119ca5bc0ee6b7b986f3391cfcf74d0bbbcbf0f1fcf621586f38e7966fceebea1b82a5be70d30beb7e9d7905f0bc2fdf93bad2fabcea42b0767253e8decfaba5bb8460c737ddd5e929efad7d10ace1db39cf3a6977390b829d9b50de48a37650d34030a53bc25ca1edefea682980df5a6d2f8d33d2fa760298ffc77ddfde9929941510bc6bde8fdeedb8e4bbfe81ebeffd76d7f7e3e48efa81a9b6f573cece65597ff6816d8750e619dd577b2fe4033fecd0dd5d77d5d6d93d70ad93f3fbf9cd281fd5033b0739b5f6ddf752bb9707eebd4359e147f8744ae750f561093ad2129485a96f9edc9300be7adbf97bdb69a19e9de38127d4b5eff876e6fbca3defc09de777b3b4947eaccf5a9349522332a71672ecc0f2d658e5d6efe5e64ecf3a2e94bbba7c3b7d4773a483d757e9963577feb04a97330796d5e97f07dd6b7d1d9403eb7c698d1b42aa237de7e2c0daf6a8af937adb9f50df6944e6e425e70da6fb559a9de3f65948df8ec181e3fe4aafd452f328ffe63770df5bdb3a6de4b7bb4c73228033b4fd9f9d99f39773dc909943f7f767dfb5cf47d5276975ad52b128a70dfc7aac3bd3af133e67756403476b9d7c534b58f9d65bae812bccfde63d61d55dee38d5c01d72fb2cbdd756b9f37310c015561de9eb9bcb689fac0fc03df2d9e9bb33462da77d6960d8edd695d27fda5afb321a78d3ea6ccdbc3bee36ec93be33f07593caf7e4a3f72b87cfe5026306aef57ebc9cce47e7bbfe29a5cff27a342d2d0ac82903e7791f75cfbb7d5adbaa25ed6672c8c06ffeed7c3afdf4cb91c687ca1903f34ee96b6da9cb97ff9cf6cbaaf5c26232994c2f5846573116528e1878cfbfdde9dc2fe5db4509c6646abd3e0dabc53299563116352273d23961e0a7f98b11caaea1bb16f20906a6d6c9fab4c35ce97fa4a7fb66ce173877d7f9a3b352c9a3bbfbcb0bf6e5bdfa826537c7017857cbf3dd79be8fb6da0e8bdd0cb6ed0b96c598e3059e2f9febcf53ef6e238527d6abea5b72b5f6e433167414ee9d1e14511c80237d92cbece69d96eb7a51f5398845142f30bc5cf6d735ddb4ca9d2faa3e377846d99d9daf5277b37c5ba5f31c51da604df5eb71c797946bfaae94224a1710d20d33df2f4ee8eca3ea4b6ab5502a9e82300251b8c0d7caf7a285eeb9fb714e11650b9cffdedd6fbe9dc358dd44d597a25444d102ffedd5425ba9bdf1edc8e2428482a5c4642ad5501051501051501051501051d097a0232d41d2bdf9a264311db4af531a65ec8f473fa2608165941df2abe98b953ffd2bb086514707bfeaf9a4733c8d2856e09fb346abe17c3673ea3aaabe4fca3039254a15d8d5bfff37c2fc56bedba9c0b172c867bc9246b8a9ec53e0a867a57d3ee4d3d2eaba14b84bc8258779ba1761ec51601eb98df7a1e40f05e699feb45fa3754edafd6cf0e65966dedf6518addcff04aed55e57f58d5b7f94fa9dc073de9ffa4ab8e9fc99bf099c7b76d375687774b0db5f83a1def9f548e3db4ce0a9e9b5bc772ee9d33cef25707dc91f4208af8b7dcbad04b69a669939ecdcfdac7127812d75b4f2eeeaa3116ab791c0915feaeedcf9599ea1db47e097737e73e7ce69dcb56b2330b5d2cd6875ac6fd6c8751118ceff5d7be7b9e799ab260277a85f42f894c6da69d50dc0555be8e69674ea21f0ed59f26de5ed3b3aeeb410f83af824871aceedb4bc3908dcafa56ff60cdfde7dda0c04ce5d525aa79e945ffa2fff80ef75d9d5281fd7f0e15f1f70d4b2e76c259d594a9d6f0f98c60e2bb4ef72e6eeeb5583f59d55e6bab7db59da7a79c03556cbf7beee6e2d27bd3b60cde1e499e6799f7d0dad0ef8d54eade337eae8747c9601783efe6afcfdacccd9dd1a25071cebc779e9a379c6cb698d8203ae9cbb4dddbb2f7378658d7203ce375fa9e9d3b2bff7648d6203de97cfa97f7edcbbf258a3d480eb9ccfd1a77452e722a75168c072eb5a759c1c465a21a79fe01e757fa9eda354739ea72758cac72f94b0be7e79b6b3135cb5dc39d70ea1e5b46ec909e6db5e3af9a33cbfcc596e822785f63dfbec73b7d32a35c154f75e9fcc9af2aaab9499e03ce78bcedda831c10f76ea7a84f7c6bee9bc0473fede513ba9d61ad219e3606b21bcf05ef7f8b653464b70ce3d5afddb715bff7725587ee470d3682377b36b4a70b7bc4efea8d693604da9aecfba9753667925c13d4f38abe4d1c248309535e697b2d67e39bd0f125ce77ef96cfddd37956f5f80c639ebfdacb97c19757aefcb7c16c0163e6a1dedd3fdcb355a5b06cf23984e4721d4f0e6b9b58c998ec1e30876194ebbb7a4553ab7ed9eb0117cede5355f47f3be7a7e670457aa9f7defed28259f9aa2828e50e0aa544cc24530e40fee0b69e652114cf7967b7ebcb9677ef3bb46f0248275ec536efdcff5a48f57227810c1dd72a9dfc7b963aeee4d3858c37ee73f4b7574f7bdbba721780ec17ce74c6dcc35f34c637e547dfcf44919061f8486e0a95fbef66d086ba58f3e93c96472eff4e4ab00ce96d60ba3a4fd664b5727952a9f6ea6520d994c5952ab857a58f01482b9ae9abab92bb4efbeb662f01092f54348397f30cffa8fe2c13308de16dededf3daae1e52ee620a220a2a0a1a0232d604ca62f7804c15ac3986fed915b27e7f720a2a0232d41a6f74e2f69b7547a068225cf357359a3bbd43d1d2920a7834fe7bb2d8fd465d33b3d0703e19900ae13ca77f1e9dc9c77f880602af5ec52e7df6eeef8fc0f5c5fbef372699f73af5df6033fce6dedb0c2dc63beb9f681dd864f732d6fcd5a67cd07fe092bbc1c566d2f9559ee811fe757726adf9b8fcbaead0411050d0575d122f5c0f63e79ab734f5e4edfad79e0ba9d9bd3cacb77ac7c5348331e0960ee72b7f44d5a69a7175a5496b304110519051d690932994ca69d32b9777aafe7f95174a72a1eb85239f9745d6b6e39a53b53b956a915cf1d783fae5fb6fb56be6ba714559f2bbfc4d881afb4735ee932acdb6949ebc019d67afffff6cd277d6e97e0a1033f97f3efba73b7d74d2951a74f93cae6c0d3e69bdf3ebdeb83973a547d2d180b2bc12307ced63d3e257f5ccb7e678d03cf98f5df18777e3cbaeade60aeff52a76fff1efb8e100ebc67de7a432af9bf81abb6314fc9fbcdefa3cc11c0afeaa7b3f2b89fbe9da71bb86afab346a761de96cbdc06be9bda7ce5ac32f2f9b1b281f3d3cde3b49adbbdefff1a78ce28b57e10461b25bcddbdd37b6b78d4c0dbde087fefcae7ccf26acc03015cb78bf4dd2a2dd5f3d6598fe07900e657da67b79daebefdde4e034b6adfbfc82f77b0f77add0d82070decaebef55e5ae7e6fb3df767cec051ebed7addffb6750fea57ebf5c2f3071e33f0d3f9aebcf152a9f37519555fabb34c267b7ad4079e32b0b5f161af3fe9ed50de8eaacf6e1e3270e437dad8f7a6dc3e4739aabe68634441415dbcacf618a2205e6432994c415db40411994c5db44c097592e01903ebfc2895b55a0eed8b5ac32e5e8282ba68b12f984b89478c982bc31306e6d6ea78bfe6ed7ad4d9d2333c60e0fc3a3e1bb5b351dafd3026613c5f601af9ac97df27e385155a07e0ddaffc2779e48ed6cb21f40253b875a7cef558f5a6b6a2ea9b71061e3738cfda6f7dd85fc32b6f46d5f7f1fd2b96b1307c967ee16983a973f146e7a0a6934efda8fa5adcb278bac092de2ea77bd1ba9f30fbefa7fdde44e2e10267aea57371ba6a61d69d675836bbe0d9023b1b279deedf7dfaeabfb04c9a22173c5ae0bddfe9ae2d77fdf78d0e55df2a95551b662693835bf064819d9433f2faeabe79667a915829eb050f16d8c5b865bddc6aae39dcef484b107dc15c3c573cb767a49cf23dbbae5ca5ca26d37cc15c3c56e079a975996fa86fde9d529e2ab095595bcaed7b935a4b69a4e2e78b595b5eb59cd7dd6d3241fa82b9d2f04c41a37cf04a09df8c93ce0aaf9c91d2c8dd7eb2cb8eaaef858741472804bd804d26d76a6726536632c53326931199530e0e3c52e048e353f815721e05ee70d72c6f87315b2e9f45d5c7e262329d582d2870aebbf75ca37575efba1f29da1a9f119953093c6c70cc975ac9eb8dbfbfee8eaaef3d93c9641a72b55e574ca67c7a2f0b9e27f096fbc618a3fe3e67ad50061da11064f212441454c48aa1beec1475024b3d63d45b734debd691a3eae3d764da596a8583884ca61c1e789ac09a576aad9cef757d7dfb1abce5fecadfe5abff69f94c60faf72b9cd371f9f8ed77096c6594934bbdffe6c7a733d291562332a7178f12f8becb10de3cf3eb37a3b3647892c05ac2d9ddfd9eabb4f3724991c05972f9f4bcbdc35a39a5301e81e7b53cfef7eaecacf4c52a8f11983b6b23b70fb9e4db3a6932994c63a61199d389a7082c67b7fadda79008fc4fdf86eef1af974b6a024f0370ccf576b7e9940fabeb15555f64618a02cf10d8eeef4fe3cb56c67f752ee90b8bb95845738847084c21ed37c309238d2f7f10d8c24a79cc35ce7d39d516089cdd8eb1bee96087bc4afa03762fbb9de3b48edf4eb70f38e6ca2dd570df1b659d8fa7076c39af9fb775fbf2ea6a8b755283f37e31432bf9bb4f75ed3c60c7edf3b86fe5f965dd3be077fde17fccb05aebb20ef8a18e7566f8a474705e06e0b85d9d4fe57efbfeb639601d7b9433e66a379df63d0eb8cfcbef74ae3ff8f6d61b30e459c74de3cdfdea2eb90d3873d96f775d6a4de5e335e09babfd0ba5b63c34e0c89dcb6f3e855b6a4e3fc1eeffcaeffb1d85f6d1ed09ae544af7f2d655f2fbe0ee044bc9f5b57b3a68f3ac6f7382ad8bff2f5de77a130c75763cbfbdf2c218b9d604ffe355ebbbbfbe86b9ea4c30cf1dde6aa1ab1a13ec2acff5e9b7effd7df92558bf95565bde39949ac7c15172fd53ee4b2d7fd312bc67cd7a3e0be3bd2f692578fe769c727b67b73dbf4c09de8fcabe617e47f9db3c0976afee3c7586324bfaa824b8ba1a61eebbdeeb3a9d37126cdff7b73b7deeee730b09a6b3e64df3e53af75aa5bd00e6ddee4bbf4ef96f766d014cbbbe16d6d7335668f32398733ee3ad7757be6fad8ee02773b7755be7faa56f36826f841dcaa7bbe6f3ab6404bb3de386d5f24c5fa57011ec2c7dbf75eeb267d95d55046b07e9db52de979fa74e04d7bf5ae6e86074f09d45044779f3bdf2499df5db48e1602af77e9cda0a1de4761f8227d5eff668bbed3a666d089ecf76cef3dbaf3eddb702b8f7196775d2e52db78eb310ac7b8c944afab285af6742f0bbb0d3ed1e9d7cde6907c1b0d22767ccf39f5b4905c177c35a9dd3ee5acaf394816099af752fbe7efa75fa14c0bfb9a4b7c64b797c29e304f0fbfdf8e557579b7f3f20583fa7a3953b6bfdf6f23f70a795d2c9797793ebbcfdc019da1c6bbc795269791f58769e7b957dd228b3ce900fccb37436c29adf3f8dbf07bef36a0a37977253f9b41e98baf9aeeebae79dcfc23c30d4d0fea4b14fd969774f0278579e1dffcbf9834e6e3cf0cd39be83b2c7677bbd034f5ae1957567faae8eda0eac1f97f3c21caf93f0d53af094aed7fcd159ed7ed38167a45257f7bceecba39c03c7cbe3d47cf29fb65e2807b6164aeba0ec50fecccfa1ea63bd6aff99fbe6e9649f119913162871e00be17df93debb8754fdb37585b98ffe5fcbc65e43fe1c0d47668b57514c2abb97c6f609bffea0c3fbb4d9de50e551f12eb794562a596ae506875fa8012014c6977eed9db5fd29a5d7703eb9a259c0f2de514be7ba8fafe5fb0d37bef5a3a922fcbe1034a1b98471ef77c164e0a23fccc06def6fe9bb0d7db6994baae81e9bfeddbf1d7e3aef327aabe33499652008a1af8f12927a47cef0c29bd0f010c63cdf0527925afba5ef9000c2f9f51e7fe3ea2ea3b9374eaf95527f9c2a830a14e1d50d2c03473a735efd63a371f4703cb38e3dc73ba4b3b7cbb9f81f9c7fc2097743f0769e766603a33b54fafcd764a1bcbc07ac72b3bec5b6edd1fb464602d77bc3ceb2d779471ce31f0731166cde1b415ca77a5183852fbb29d4f7baf2eea785599f5e2c29f85868bad8fe6c4811206ce513f6ee59e4ecebcb906035f173bad363aee9eb4367f8179d639764b378da8fa4e2d6e5b80e200dc2995aff2edf2735cc7f70273cae1ecf74e779db33cbbc1f04ad725d7f12bfc7791f8bf7e35610b4a1bcce9ebdff5d354da7ffe5de0fbef64b5735bba61e5910b7c6fafbb5f9e6b7c2dffa1eaa31dca1678e718697e5ccad99fdd5a60f84ee6aab7cb97ea5a7716f8bb7d345bdee785f9aaf2c3b253922aa68fb404c1941ec6b2721f0a16d8e5fa5ecd1febee5cc7bf02437b9fe3b2f2df56e0b8ef75fbda77db6ed7771598426eebe50ff97c32fea6027397297c74c3e9a6fdb9a7c04e775de57cfdc11c2dcd5260db73bffae53e5f8d13e628f0bfae4fbbbd2d1458df7d337d29e5a533b3c19343f7df617e0f4aa9e91398d7c9e57655bae7b95f27b08c32ee48f5cd3d3b5a1daa3e24d6e93d12c7f9b510058509220a522188280816db6232bdfa7b79de3232994c26937b50670d9426b07315c647abdd6e5afe6bb09c5ac6e82a9ff2bd7e26f0f319a97e95ef79e5f325f0ed306b47217d7cc69b95c0f95a6a257c10e62ded4d02d3d8b9ee34ef7e637417093c2db4f2719aa9dd13da2370cdf349175faf904e5a8dc052be6721e435736b672d02c3b9e57d336e7af5cb9308fcd2bebefbdcb076f9b20158eb6af3d4b33ab9e78e436019f9a4cf6939fb960f85c0ef41c9dded3443c82dec41e00b6984357279e194d4752070ef953fbd7977b972e9fa0f78caec5c8c10d668b973dd07ac398d79c76c1dd71c7e0f98bafbf2767f9d9319be1a2cabbdba572df9bbbb721ef073d6eefa3a971d52be039709a8c44eeaa5a13448510c832000c09071470440033314003040241a8cc662b18822ebe307140003457e66b0382a1708c4b1401406410c84300804210800000cc020084232b444631d8beaac2e00bab958841852b068ffa970b87d558eed33d92601753b5cd03b79b7b1512fbd9848ece40f8655de801789036833d1196c35da1ee7dee52bdd3c1b10346c973db80f339070ec1f289d79b4c54269465fd597c037b481544772f5ac1ac84be229a3933e229fc2d80072cbe34c2df3fad89cbb2d03e08e3e22c41d4db2be3605caea93c68909b379e831d0f416d97d3e5893695fa8ded7fea2e31543dd37e7e4b1d4589efe5844893db573245f0ee26de1d5f15fc22207bbf4b92c69a834c09ec1e79d1c6205cb50b70b80243012001ac0446f08bfecf0ac262212a8129709c964740244623269a9645fca45ec0d605dc52ee29631c958757c45ec1a938a47c540c626e3d6f18638c4d863dc39a6106bc657c5ae6292f1c818e8d88471a3ee2684953970c74c6256b19e71d5c492ffe708c1472b8ac7e0e97996c5e11488d8f411e38d4ca7c040a2f7398b03c4dd9f59a0c5980446e289acc29c020071baf2169dbd37a0d6370acef810b02fdc29ddde6e46290f3364610a8497d9c4a88ce22f12f5db0d70aeeb832ba06e7af2ac0d3ad6c0d5ae46471921ed43b61c9423c4fb3df77882a3dac2360a4df057ce6839839f328d566bf05f72dcd9724541d42b2c8e9473d7cc18cd6c40f1a305c0208531560f4cb9e8c78c96722db34403f3a62adf7de0c9f99a5436465fa32879863d6bae274a65a6030bf9f0d7ac8ed0d532b0ea40edbf9829d64bcae3fc08ee07dda14ac4e220941cf57b4c1a8ecf08f771df72b9d65459c5304a78ed7aefb4b8eed80404f91124455359aa31e8699bbe6e3db43181fd8e3ee44df11ab5f1926c043922521eb9065621702921003b4f927eebaa57debd01319850d33f853562a5abeef486f9327be56a26eb974bd7f6e564644a80ca0e5dd10f2e1ff97c99ba5138e12e3108f06797e92266cf029dac6d8d7feca456994ff70aa01b8283bf548bad435e0445f287a7deb530d4857572f2d85a01370b4a6182d03b492c2b54a7e05d85311ac0905c51f6b63339ec2e512bb31c1eaf9adb6876f49e3372c56cec57c487b7f84ee0c5142f4af63709eee639b188f52cf5b83402ec99ccb9d0f4fca3227e3cac7440fac2bb431d42b92fe0f1ae89681fd35f678502111df3596f14f5d2819ee412930787ce2a6c7bed3df16ae056a95c7f20e13713bce62873c2abea38c1f9518dd343bdf8ccb107485bb3892a10588289850ae6a05567bc34605f88ba8cecd16ca14a6c85eaf16b2b5a85e64f178b0a12d05a56b729924233a7b1f5eb30aca15261981ca19f5cdc00c616349014932708bce87a8c55e418600eb0b21f8c4c045d853556baa328de82cecc70375b710ac3f10a7cc57dc83b20968369edec9e99570e25ad092b56c0c86c3a01f72d358de02e5ea0244d25ec2812da446c48f8571d21149355ce01c98639f04c9ecf94f4b19486a93ee9a2a95e365ab046a8133d6298d121005169503b3a90de4c1fcc72100dcedabf6df27fda17433f5676c4ce3e84021cfee321f9656a8b07d79cfd97fe8ef3e606cc6148f7b9322c5c90331b04699714df12dcb476314422e9255fea0f23f322489615eee94897d904bd4081979116c3d12580ec398516275e60714d97dbcf63e3e91e7b64abd9eff89d2a50a39f13ea816db9380e7385b67e5f07b95c362f1e0a2275a2d6515636864a2cb1c13801340965400a7ff222d5738c5cc3539f0db54946caeb4a599a5c76e1ab9ba66d319c67711613f349425bd0c5b2f7090f686d1030f9d206249b74692dc4d99d7cda48db9e81e8ba4c5d3ba495933e1ac9c676325d0bb7bf600c96154c3f7188c2fadfd13d5b365e642c1eba1f4c2e702d636aff087574c0381b50178e924a49a0761305de09bba7140d28fc46a33e45fe64fafe0acfedc7de14ae875aec0f6ccd731c75113ae009400975328d73b4ad9e9ae7ba4ff5d3c078b4f15622e4ee483af7852dc15d6266975c98b887d8683e5b715786b194fd91a8eb88bd6502f9ef3de8a0788776a2aa9af51b4a0f6f6213489d4aa6e71ce752a1a1527638ed14f78d2703fc00880ad678037a7d3dcd703ead3f946ce8947b0e5712d89828b11408a68c385366e33b5cc71436d17b863b9b5ef6d4a8d84f080c399d8b21afab437fe7670169789fe7e544f92823c686eff85e4f3d40b6a6fa1138dc3c3ecf6765b2aa00560a700900385dfdc60fbb2728134abcd1231484b2fa1a150c1dc977088a8a76ed2fc321440e24585d7da468e509b05894d1102fe4bdd387be16a89d5253d2a2c879e5b26dcf6a23663507bb4dc420bce8d3e071e47954f8a39391212068b11b4a3b5d748b58a5a717a2fb23a14d28bed2e132cdffd8a66b6e1429dfafdcc2f0b24c895176a7a3e4fea01984af9cf1d25a23ad5c7a2b09d4fcb275b38c4b68ab46dcd69f1055f4bdd28bb78466959069e412a9d6437627c02799d29d98ac3ea2396659eba4ea9c2729b3a9ff9abc0f5e5c3bd336a5b9d2c4eb946e4ef2ad43ab534f98cc6cc32d591b4efdd4f47c66f15993d541de2fc9dd833693969bce57cd7de2654a756ab376464a9995f59d852fa52fb21e42805e6b2062b863a7885e52647a278bbad253d3040817a5aedba1d419a204d500f2c1c7a10fb7e73c6379052236a7975b962472f1ca1944bfdf679f74c0397e6584aa786738eafc127414928d2869af5549acf5d2dcd83b009887a77bdcfb48769c1e18511e0fead5f1508dd694316445f82b0968fed8a6467f7a73f41058f78746db9365666243b9db5b96beccc68ef237a08ce9a6dc4f14f6ac4798f3bc8ffdbf236479e9442a7232ef1f64be3fbe93619686c894b825b2df6addf1c7b9913a6ffd2ae8d0a5955bef5a2e261ed913747777c0a508d5e8a3aac488b9a389e59f26979d591ab4a1c6dd66f5d227716e3bd3e80cab2f0160dacb1f8d86c6750358041bf83f2c0cbbbac9355a0beb8905f5a005f5dcc27a6401eb4d0b838c46cd6ac7b1905e68a0872f343d7e8611286df1f2ea08a9b601baa38f0bdc6ae5c03c8b27919ab346ce381ea0d62e7c9f90ecd8fcb21119819086f4c3246a172410cf9fca11e6e2390bcfe09bd3d13a434e3677e7087899ad32154a32206b75e8c1feec9c016fe6a3e9465d2c570d194e32d19d2200c946b6e9d882eded5e812ea6b3f98cbe598ffa33e66478978f482bcee8e322ace03ba41255a5f9ab0e9322b4406dcf8a0bea1cb96b0e9873e059be211d53b645c15093c81e094d0f15fd27f039f86e1d90eed455b9c09c33669786408c936d12881e55b42ea46beaaa9c60ce99bbf0003e279dad1be418733b162c3581ac93d0f4105155429d93eed60172c75c9d0be0397c36dd50c7c85973c2dc038ff285b4265375129a1ca2ab045c72062dcc818f49b775815c63cece09f01e3e9a4ea873e4ae3960eec0ab7c413aa7ce54bad6204754e56a0d27c6360b9b94d575ca1db0bcb14a26d2d960489bd49377ca30928fee398920257dc9749a88f0d0041419e52673490ab49dc82689482b9d9720a7262a872240dac86c9a967020d3496ada449c8a567d36d7066ea973429a92a8534a2e49278f681982803c23a5692e71818a536cea88142579e9734288e4900768c4089a487cfe63d20493cd9c8537308dd1b5e704b60723ad0c694da64a29e473faae1ae0d199b4f0063626e5d605628d413b4841f7394639056c4ee14d09d41db11a2b287352dab241923167e704680f234d182a1bb16a529873e05d3e20995369c50693ccd8c20cd89a449b49a07cf2d13641d1f179c7008887b1a60cca1c496b6e1863205a4621e14ca96cbb016fa239899c210cc834729af61219ead0e57c659fa3a7fd9d730c3ccd6632cda876508b537c8e1423a9492f9d8120af9e6b793aeb808e08f8e13cdde49c64fb30229599ae2b4b04a5416f72810639bd644ae594e3cc95b108b1e3f49238e59c188a39c55ea85748d17fe4a8c3aa111423222d62d61dc0b61814326a0dfee91419f5a2bc50959b937f6a433a33545c0d5220b423e5dc098978d3a8e93efd210441b4cecd3983794e5f96ec5ab3c9adb6cb7d30e3ef7bc004bdec108a9e82bac9ec8a0b49cdb9d14c71d8e2ab77445b59028b58606dd8c02bca02bc8696f78252f059f3624bc049c75ff678d7d0d5be5c440b8e687905d42fd127e5371838964d431ada9117484a0d8d2d1bcb38eadf1cba0832d0bf0e1ae02f9267b8538bc03890a131303e1295cad4c024ffa16bbd56a41b4d8e05c7a6c55e09a790458edf575e4843f9a3e8df2264b248fa601588097e37937c430bcb9a7f485f5e08fc29bcb2ff2d00a0ac18e83d5a9bb6363da917b8a708b1f260fa9653a8c7cfe964c7176d69648029de0866b761bd194b03aee5b000a309523fb0a128be8d08c32dde9aaf8d0f310f0b05b1e8ba6257dbba4bbcbfc16af0503348e1ccb2ca2ba247ca799443692f5a648235a11cbc003f3492944a2c3a646222238bd2989eb1b710fbf0862f793f0ce5a53f5db694978173d1c1089ea533f2cfe480300d5957623150411d5d9d008c5f0218106bb0685ab0acba5a0f4e0f8d8a3dd48b08c765e19d33a59f8b9260a010f3374dbe127a49e91b48bdc3c600e42527950b9270360a538054c0097aba18b250527d670aa2684c46233d3353457bfafca8e21844f738d683a7bd5fdde93ddfc3f78c0d6228edd6c1850c5fae41444b334a6334d498098518addc683bd4d3e6b0ed3bad0a3c57da30ad4925da70c64ddb25b9c9588daeda9d8bc38462cb132456b38c724ed075247f1f0e4e1a45de60718f35b804653d2457d56eec4ecfc3ad2b55d0b5d9908d1323129101d4c15f79c40372304d1ccc1ed3c0f5b6d83b9ecb82852195c3bc5c390dc1cb92bc918192736b1cb3ca6c284c2ef828523cbd2112d673d91abe964915e473f1d9b7120b34730fe19d3c776101c606437d49ff2a6a003e1a071e9ccec8242b9315d05fa82b548e09ecb55bb1786c1db9c06041beb4dc43cb7fafb9309c86b3054815a534dfd2f515d0a2d225298d0ed55d808b98d8cffdbb55b2240834183e843fd9ecd3fb419e214ada002aaac606bc1f5c9e7fe8be066eeab189525a1b2fd882707c1bec69e8e19c17d63a1c86866185dcc9b174e76d45444e66bfe178b887c2acf0b8a630832b279065a3446f8c212aca642b78c9813047832a015dc3a2c0ad7fb08a4b9a75b962d6c478afb0710e3efc07b4d4d298b82c96f8a1fd42d7dc15fb7bd806bb59af2617fb395dbea6f1ec35b3876ac02f12c40bb3a7bd73adc7d1aa17b905100e03fb90dd3905ebfd7e22b1ae9799d5942ba3f7eddb050a1b8f24057c6d1e3a93fe5923402f02fec18afc71c0e0ab8d02762fccd0e11239f8b990b5e0805f7072b08d52bf15583f89cf112c3b228c7f3779f4788e1804ac9bf44318b6d0d466cd0fb74e39f7382d1228c0f1403ea33704c9c25ec7805581c40aaf1a65c1bbef0f8448502f73511c66baae1ce5e4b3d01ddb53646c6478a3e1aefd63871026f0bd3d7879fdf1d76f8b3e4cbf1eeb947d6e36c36dbf5472cf134b612f2a1db37f1e8396e32bad437276ee34eb6b1563b1b285f12255435cb810a0d45d64e6824bad5431a0778c0169a6beb758b5f8034d8799921aef0dd3805f754fc72addbb05afcd13a9db600e2a309865953079265d1e9a186774199d1c89a0ccfd11d11a059551ad4bba74c66eec069da4db33335056675bd5ed37fa9b05e99807aef7736f4b557cd7172faccd445909d731641e585adddbc757398ef9085913d5bd0fd348c34ed6ae1dbdf6d43d69e39537686199994237c5bcdca2e170acecd7e7c721bb84bfedef11916142e0d2ff3b7440abf8900de9fbcb8db5a509bd9003fce915af497e0e34148b88a082976217433cff16595a5196f4063c13e69705fa53b6241aa6445a43c196aaa7a53a49a6f116ea5b5323e12284199ab01b42514d17d5a465bac4ff000a44890347400fd22bee2c897ed3ed09b063e6c8a02453e468bce8280d320706801db55c61c025b6ea7a970aaf63eec767bb5f543c12b87051259575368bbf9675d8191455f5ff106b839efcddfb4a1b03e5726592c5d66ad34bcee5f670f6dbb15c510412ef046346673b51c074dc8b90ae38b20a192a641ad24be9ba7858c65e7b646df1c346814d2803d98c2ec8b7d17224a8d5314394498d9939fce0d1125bc8a691b3292e62dba411bea1b86f10f57003de1fef1bc58f9aecf69dc34fe9d56cbaa11394e44305fc852c20b0613c512900f31b1766033a153f93f9f209ebfb6c59c908df47c90c215a82d7883b2036b47a3c25ddafee22e821bf8b2578aaf9b9da34dcce8f1ad6b98fa09c41018db3fb6c126294a535758a6e85e155e244c3cf31f05880ad33bd6899a8ee276dfc33d098b889d6d08cb84a24abf68751151bbee4a2644e54b5f2ba35e042e7382cb218aad62e4adf66a46f534c49878f644f348b019adc9c024396edbbf8d9878c90a545e3298399b0e3d7a495d4b75d3ed1b50525d75d25d349348a3c4a0bcd878c589181b8415f5f1a8eef4084fabba488341feb019d38462621830ffcac77e81f880d0b113e1342efb464687909134a0cc2f74a8e5c0eda93777004f610be2decff51065951182c55a8dfc3a6a4100e2b325b3658319920d53fa29a45eec3c8dc37533274ab5004fe25f506ed967e7e3256c995b163ee93dbf9ba1a27bd65c9e864c7e06485ec58436a6d7d746f796c467760a1392da1366fbc3aee797ca27e685d3f9ed5a1c9fa25f2d71c9aea1d96cd7b264c9b7d5ca52346bf426cae5cf1aed1af64c3d3fdf80a16ff496809ff7015ecbfc7b46f610fa06c17bd9b5125fa7407fe3cee0ec26a8b177f5e9e507ad68195e6887c3f1c264435695e8616ff9cf543f956cfe9041c88962e6adf908d84f0e8a79e098d5d411e7bcf8cfe3cffc9b52d9c3c56e195821bf26be92ed17a79a324f2a0e320b7d4d174f669341dbe8ed7c0183b64367d7127d9fb4e8cf7a3ee9002b01d6f527e49991e3b779247e24f84e79ded4a0ba4e125fc2046cc10a91c5e210d5c67cefec3f5e35b3c5d1234d138bcf940d3fd382608e59bd06415ab8482582d6b22838a364e6b08ca5b7899a378efa1bc10a751149ba155fbaa0cfe6fb681f6d73967e2efc3136d7e788aa8eecc49e39f9c307786ed088c975e8643b25fca218f92ed0b47368b94b9b48b6addf001802780c55b1a9a3e4079bd6b4890f415eb5699e42459f007c1c1ce72f921c73942d4d867d813e2983899d953243c8a09e506e5d0896d75341f8e3433d9606dcc5895cab099f2335f8f4e2c7328b6648128356657d6c295d0d88c6cb2216d59a2001d0e5decc9fe8c2a63e595532ac492458e11a7df7123cf9f1e9457be71e7242a5bdca0feb2b141e02777de123e53c9e9f943dfb120f9ffb4c5dd3f837988440c38cc0f9f7c67c23951207702982e6b8e7813ff84bbde1ffec31ef458dc289c3fad8a68cbaa8ea17c8de195131e89d826c60f4fcbfd3fba96ad87a1ff7f3568b3a459c307d1d1cc0d73d30d06d82fbcafbaae7d5cac4e33cdd08f7d04764fbc7cc6661d4145107a065bb2c15fc85430501bbd707f9afb4b4656b7850a7fc045bf6702df3d3cd37f1bfd319a0c50ce8009d9e1f0b6e92d81ab173ec0031d60ccb8a0c5f4dfce51dac1c0eb5b47bdee370eb6a4e74dc0fd40874fad848694f6bb0dd55dd4ccc5972bf754f30752397cf2df559aa02969eab617c5fabc3a99e673d10a7092d9220f32ee43b9f10720dfa7ed07dcaef299b9456b759b8cc59275bb737d7a6150b3b066dc5878939fec7159e23c860c338e18612c81bffaa2589228e0f81d5091811450ddc0316fd6e540a362707f542afb48a9be86a09b1133ff4b541efb087d725364fecd79f0b126148772b84cd6bc4fcbba7444ceb62d23b4bf9ea6ef00f6ec85333184fd1f43f586af7c43ef1d2b7cad01c8eb86149651fdb2c57fa48e6f2b8fad5c985383fc42fe7df11796abc5990f5474708eb2544fcac6690c83ee7d837e03befa3913de6ac6e5062064ec1ca0ff4c984e51782ad5448f825a3cf5b2e0900f2dcbb29c3d3adff827dae32fec7e832a00eec9962d79eb4ce75d6b2264603ab9c135ce767026049de793f7175019c3983aaad8a5945f9708dab586863709395b089ab77238498b63d58a49485e3b5ae955cb37bcf0005e990f594581f7cef5752b04cf334201129ea453f15b1fbf05e7ca52b32185e5ea4829205d4eaf30240dd243ae5274d29be51b679423757e082aaefdc26e437257b7929228b404b37a1e9342ed0c1981adc393c775db1c69ea85b82ab56f2b6fc54f2bc3cd39d7908eb9b7911c5db1a2115cb415338f01babfa25c4a1cd4e6934a2a000c13e57c7e999b638ccdc75dc377300a978c5bad2b910d6923b436c98c6354a938a1dc0802032c9edfd3bc863617917bc8008c2b42c06d39a1ac2dde5f0c06cd8e2ae53a7b0d8a92e969cf648c65623bd01fd77cc9e8507c74d98050ad114ac4af4a20463c972c39f3689ef5e17b1ca0cf338f776642a7382aa0811bcab7f7be93b4beb4fab8f460e44a58607dbd1a334ee3701d8182834422fb5d122f379c3c0a1f0eff2a9b6ce16d899e295c505b9f16289d2a3383e4e51fe4296d52dc3e481a81259a9482f98df64992d80792207c70faff1b43e4ce9d1b84c63753ec36f49ead553d95c9d53f25570976e57b3a189c195c4d6ffed6ddddcb677199e80be12d315719d2ae27712c208823ab3b795adc24901d0eb3a8787a95621329d32bb82b9ff0010e3778ea4248d4b402eef06d55847187908a0b7c25e5aa1135dc6d35e73e4d1d2dd0e8efe213afe16a8fa4b1ce9afe4dbf7c35e5c999a05a584c1bb88e87c060939a7cd55ffed0f8cb7bf74c692b7b2f7bde3e082f58dc0204e0a4ff4e8dc414889b5137286d78e6e7ce456b2b420f6e2e5ddf11e1586f1ed543cd7a39816b5b33a3ed5a154f3da19f4f628d7283297ecef98855490692f6901e20f9a9bd351f6771e5add560455673c33e39e7e0e1c83b083df551187bf44e87e202849bcdcd5e18d26c1e8e409745dfcc58928b78f5beebbd3e890af5718564a87ca1ebcf0333c91e91301a8ecfc4d5c1e81b191f1b8b6c23de4cd015d716448b00041a8fb8a87f2614b191e9cd011d9f783418d09446b91ce86f76d73f48bb2fd0fc503f2d02dcf0ca82238fb1426abe772d971120f34a4add49945d4ea5ec499747a9a195c6017a7830b3117423b875e7eafa96f3f917037d0f57baa89ef9e718e71cbdc7a0cf1f1652f97fc9b63c26d6a543030f50e0ddbecb766be80949fc8327821dec4c9b24dfb4a1c249b598f1c06d80423d17c29a181cf84cf493ba81e4f8dab9ddc3f9b4cc71c0aacc63ba9cb086225c5069485389a10cc5e6cadc4d6f0b803a253dbe351b8bdb5fc2ea235dd5e365c3478e5fa42a60fc12f0773d4332b70c69dfa3cca8bafa5ffd6f293f9ca150e010c3a73c68cfa190ad8acc6837f3eb6ef5e32d576d2eb79901d576054a3e2e15f79dc878a5ef90455921c178b0e303703c452215bf36cc98ea936aeaba23ba185d29dcbc72a49b64be6bbdf27eac466a2572534473c43f84a2cb08e2047dc4ea902623031d5d3205e49c582cdf01a2079a1a82406a7feadc78cbd35cc18abb40cdf12cf113b86b93e04f9dfb611f7296b1dba111fcc6314fe38ac77fdc93ef127c00dd5c5485a5242e5593dc926487fe7c76a8ac1b32fe5100ec796edb2f84ec5aba117edacb8a5183ced9b81b8046ce69d61a905bed823433738d6ae2a4b71277b764965bb6917bb026859a4cf54bc4f693151ee894e312b2f87294d650cdb8a27bb81c07c96a347ce8f8256360e02deff34f74679b8794e962f6978987a9cb30d36ef2fc6dcf6a240efe25bed5b8d45409d9dbd62297745331f74965fdce93957bc7446bc0cbe58c941061d86b1e70278fc2dee29c94764526fd7c849ed60b910961a13ec4beddf18d297933e12f2a41d7680a777a054f0c5a5104e208dff59d748a475a0b60e1552331e51e36d0fac0910c546fc89680411df1cf8469404c3e3b392f87c3884b0922d373778b02a8a8dcb00c7f2f42dce1ac8d093baab79dac6c92e8b0b0af26e364f8189dd37e16f5c7bb1270d4ca451463b6548eb2c0aa81c722d5843311be8164059cef94bde348c0b4ef0ccb429341c9a65c6512ced83f9183862ff20866c0249a3237cef8a286b79ba70cd85eacca1c744129b4f274a9a2a0bac4c6f3363d396c2eaae1be044a14251f8a7bfeddf23840464b556d050291bfa97a12dd2ffb00b4ad59ac326e695b78472bf8011d3c4b82255bf0512f3056830b76e8492d3457028bf6c0532b3256830b9659f78328b242643a287c4322b9ee60d14ccdabf3a19a58bb942f5ba3d99e50ba961f7693d59a58bb149ff606db9654ba961fd646bb2559b9159ff606b335b970975ed646bb25b1742fbcb626b335b9702dbe2d4dab2db1745f3b3c5dbab5655cdcd66d73585bfcb22d6273c3b538adadaee612d4cad2667089505969811b062196173c4d8b1e8b811d88009d07804d4b878ecb078d81c60c40a325c0c2cd07c38de78248131144e33084e2c267c3e25329a0231980e31070c3f2c869f1b039c09011d8e06562408a45e41b489ce70c676d9a3f0c174b4c061baafa725d43dee231943ce04d857a37b80e94637a4c258019b0429916a785d73e3a711dd9bf5c055a84d1b7c120be2b04c8dfc32507f61094c0205d5ce707ce2a47bc79252538a5970a4527b6015a4815322bccf0037182f206e2d1488313af9c235878f99d306e83de0d0ffb2ccd9729d59a81f1d987bdb6f3478dcbabd5fe929ee56968d0539b0697dfdfce7aff4758ddb30e90982f6b67369428f6869ddfa2faae0d757d654f1d4bf0111026032cb28965406495e2abd5d3ca947458cc9ff0263cc7fc44aca5cd3387616c2ddfe9d39e82e2728ffa5ba4a11feef69e464ad5cb1a8c03e712464081629d75e6de9d2c4e32c2c6a6734f0f2b10a51d49e28362cd077c0e9556156dec7cbc97b0ba78ee490a99ef9317817eaf10955e8644ce38171cca3363970ae1bf5ce59c4a7f2c477cc38355f8c5dbe74f75dd78b09e3c3ab77e29e801615eff7946960d4ef90d81a77df1d6d6422d641790409468a28c53b5ea00ee3b32f5e0c81dfa803d184dc98daa2b9e8d7d927956ddb1b43c8afa3c6571fc805fdb9d66b0ce9d34097687a18ad97faf53aad20c396496d40e7db759b932d360833e6a13f08f20e5b0d93ceffe7b91c151134319695c827a65bd1352c0fe64b793121322c8c3798fc018ccb7e0417a74a26d62520468a98239ed9b21ae651c5ddafec1a091f77d0c30becfade1f44db9eb4ead0ffbf427f95959d4b1b973570f0fc8fa0e2a8db3a3f68424813f51f07a4b7f5482eab4d99a533e79ae69acf601c4d7bb4776373455949e299ab3a22f73380ff8434318e3ceaeaaf413879193b0d3524712e391e1eee8de46d4f6a71cf293a27207aff687db5c1ebc218b366c04deecc1410dc1d0bb20b22da28191e31e317d96720c745087e1dd7dfbbdf57402f0891ed92c74fa00393e219de3808b27f5b8eb8e5025ae12231e4a19d15e307d74052e41379b0a61cb1c28de9c92aae175095f51f3327745051a70e7796ac58e7817dda9da2b729f06b9d67af6e68545cfa560f6cc72481b71e2d303a22feca1b9e40d86e2967609645a3bdc72b9591bf330912139e1764284590cf9e70fbbacb659bd7b8f17b8d3c060c90da9d353481682d1242cf2f6222979b745f712c8e85e895cd863c41eefc1f9bcd384f0a60fedad74868fe83b0bad83fd43e6c76155ac0f141ecffa22ebcba2d54cb05706f3e9a45209ce57dcf77fd6adbcbf7fab206a98de7b4d4cbd2b91b537dcb63a3da17e8879b6f686486bed3ccdcbf4a24fa77698f2d694fd51b375d316cc6336af918d0a737a7c742af68e8c2ce921e2e3c18299c125b93517f9e4b632d0b0519ba23ef3b8273aa5a3be567948b782706db1216bc458ef99f39086aa7de77d3706ecef21a52e7abcf245f7e8fa94e4529cda4f9aa6d44c38a1be1f54df5377c228ae6013f0de26856d074a8207cf68db208035ed049406b2c9311e8bf2eed01d17f0094d0cf4ae075f0345d94a09f033bc3bc8d759fb0e4113b0a074e719afce85c4e4cd66ed6dd9869eb7488a3a33effe91c5f911571ca849e81b59771ec8fedb8587717b5bc73e8f983746be557626b75c784593a6138cb9efc7e2f2ee7e49a672ecd7ae44302ccdd35fb1e34d7aabd55bfd67add0815149b9a6b84f1a18f32650b445981d92f62020b6f61f7339cc01b438d04e72bd810628047591cba22bbc060a1db5a88c1409289cdb48448898fad56516657676032b9a32cd5fa52e37a897eeb00ec2fff681140c5ff8afe30c80b0f1a355d1e18bca1c7fe6b0db49e4ae71d35d08266b5995d8d05defbd2bae7b7443309d94d7e0cecab1a57bf804e0182037bb9a0d488c37f36a6629b429a3b0621b22aed3cad92926052e4390a756ec0e33b7610a127dbe9873043526267033a8beb2c7b1dbdee88bc12516b19c5d9b00a3b80743bfe9feca0d4ea573ea5396234937afcf6b3c96573bf0fd9322c85f4726f68fe288e76d25459251293ee07bd358cca4f8dd337a8c6fc77fc07ecee6d809763effb392924dc48ec73e367afe0a4fb169925a59c81eead0ac287fb161e4b4945d7beee34db99a63556f179388559315a8752a9b1158c97912da33a11547c684b4e15f5dc9f4569f637826616aa9fc22220e806981edbf6004002581eb5f9647442789ab2a0de455fe87a8bfa3dc4145768d3b699936bac088f2aa84ba82d8337ad15716dbcb0236f78184ceff78ce294e147686fb9fa920fc2d6e6f5d992cbda4b4fb15057b961e84bdff294409de6da42ec75bb589a46e67c9eaec1f4ebba368a5ebd7582d15bee38022f3418786b79c1d5c363502550d3c0b6f79a9a6dd841b93f1a63b29bfeeb2de0c19e647a8bde2efc59a96b7d54b18ba20faa0317921b683c2ceaf379be0a6a73b00d99c30c884935cfc3ffc800764ebc0f5f7e334c4fa2b78fc2100ab1ac0710e36bec98ecf40980b9a8f83f89ea8c9c72471d8bd055384fa149486d498960c3911385ce1b556cb0c9cc946db2d607dabfdf9260c55c13f70cfe4ca11714824c1236fc1fe8f5b2e1d0755ee01619d3db54af974db0e4dddd21455e7931f6cc1844a2658cd03f809fffcf4e550b63a6811054b8efd5f2d0cbb95ed360a4cebd8c81bc4c161252cb6b6ad0bf708d0d92f73d3a84b364b8d14facb70da50a258ad30ee9c859513cc0d102456595a900ae9ea5bd52749a6416ba3950cca5cd342a0bebf3c2a2ff241bb1878f5a77e5d99fe162730ad1bb72bbaed8a6e8084b313cd2e4b3942a0679e6884ba5574ef9dfbc6a9fffe9e6b357ecf29071ee15a1ddfc8ac62af1f4cd20c97f7faffb47b3ea60d2c5c3da417845f8cf4e12836b28fead1de8d752b6c5b4844b5d881cf4ce6064634b745b3da6b57a132ed2e4eb0837ee0b345eeb8e8e5fa1eb2024d2f774218135b82c8a60d40345663c0c0dcce5dd28487af9fc75e5bf9d66a3af3dff3e848069e6be029713f93e05e24c122c6f330445b084ee890e83516c33dc8d0edceb2e925471d13eb3186e4001cdc1efc12fa4987499e3430bd286f97ed18409918847847d00fc72506e93cf74023e7848390ee70910d48069b4441c40d4dde34b45933d6a7c2ff9f5c9632669cd85e0ffe377442308a2fc8efbb17eee45ed823ce0cd1da1fb488e9f3c890f474b8520b88b0c7c47b3cc1a4d56a3a4947a695f0a47a89a7f6001b8cbf0d44ee1ddc66c4e8371636edff2621e40282f7b11fe0515b3d387b646051d919113506752658cb3b02e8f0622d69073b87d311d3c7eef4b1600bf06312545f011a49c6bf83f98e19d15ad16b4bb93982228fdf1a882669af2af7c6667f772cc919b22ec9fb7139e8eb64bc194f4ec1b0425352a200957ae9b73394af9f5aa5eea6543db5707828e16bff44a565cedd1ed2013474d4b2835e81a9760af3f0c426644d34712caca212efcc881366f6497a98a46522838ac29fce9b0c13874aaa68630314d1d2b9854b0679cfc5d6bece90e39198ea3ff54ffef50a76f6b3ac6fab633e4315a479ce598c1c55f1490bff691d7f77c850d23f7b2ea3f8341e6cc99f7c9784677795ae89c4e796df8b83fd27b5aea9122297bf7cd7d2f207f27a63f13027b88cea3bfe06242bcccb54ce0a2d78e264625db507ba7e6cdde54c3c1352ada5b3b2c55b4242725d78b4986b93dae9c4aac5d27f5368eecf4a7861b0780a3d695dd15585817a584f4413b0b23b696edfcb5d0e3321a18141f06446071a9c8a9a6223baf047a7b55d311020afa26355094383b8baffa1fd81179d5c7c962265fbae2916165565f8c75b31dae0579d7f252ac94dbadbeca355f085b4469d7f0eb0ab6c69dacbab8dbcf547aff85c2a80953eb94d6cdd7bb43e3ff53b1a259bf1859e51c35cf7d035743cef19dc7340646bb11a781a2fb9b9d53f04f3ad473e4d908d30f7fad28c59a6aec90addfe8969e8f0a33ffb8a70ac1b8becc38360484078c43560bc09a10bc9687b6caf9c58dac503b239b30fa3d3b7d1a207a97ae85d60b6e5f675d5677c9b6bde8a5d5193cc38b1b67c25510b52ba92ee11332a228250985512e159207411920255153371466b504ac0187a05ee44805d34d58d3aef296ec520c54e8e8b32b840b5f2b91265a1b29a37151d728f6c471a31a9926d008b0291bf0db9a85b975333998e4f3d05e99f7520402e0d06747caa79db5614c093b166bd320c87828f3f19d091fe47c273d0608fd11fcd2dabb188827be6d75e163a4661719761028c52022d065ae6dac024cd38af298adaaba7b12988649a48dd4407526283970696f400309e22f8d76c7da65cbb10d52867af268e2e8e775e0662757e4cc60966db234afd585ca5fdb7a1de6330f63172c1c853d35f4e9cf2b6d3cb4e7cd57346e28abb9b3cef78f94362c749cf2a4fa0ddbd50f40f89f79239dcd0e414579122f80d80a63e75d2bc78e9f32b6ae43354efd0c2b8765eb2de0b5125788e14ed6324edd2ec34d83f40e7ca311d8c531efc622e7290b61cb615cce31d748e86b2a4161a707d1b264d3829bf1d2a6d4a52fce5c4dc3842d5aebbba7426595ef6d240b4e8d1f4759132abaeee6a72e67f3590ae496f8c883931bd32e723ee6a49599db7a89572a19afba26fa8589fd26ea32491199ed652cfeab1b90c869e1f224d72b845822c146c56276ce62ab94b3273b03b69a2dcd15ec9e4fe4761ec076d0f1a28d4fbe510255a01e1310161ad9cf172a0645b2fd022da668ae3170678c7d8202f9198f18ca3d90bd10385176c6ae8ce3e47004aa63d4f5a99010f167e5078141a8a06640a9a432c2c5c3889aa85a1b22cf13e39380667241c404a2cf0a67eea4c2c37e0c5184facd9735aec88c57af419d8805dc8569245b76940406305edca8a3b22a1f3683419b68256068cb5075bf9ec41cccbcd626e5cf064d1fb875879d6369d9b29642bfee1ce5eb6081b6fca47171c152e3130ccc34224a39df0a7df0b7944134f04c09cf09e4cf03532fe4b1687e49c33cd7b3dbea569759e78c905a23442bc41650ab68cec87c3318d24dab089686ee25be84f0048d2a7ae5ff5cb9c3ed9760f76f271a3fb4890205661a4d05a567eb90f7573621caf2bcfb0e00b94af9a2cd226714a5b8bc758ee1e1ca70f4cfd6b57b0ef4e8df4dbcc6ca1c188f2424a7fc46a3370281f5d37073ac96022c04e65fdd2ab4195ae67a76669d96336c35823105ff37b6f6559af8b196f608ef00f81833271271ed2dda59bc0ac58c5709e1f0834a0d74e0bc2c7f5e9ade0910d68aa16b032a415ecf09c5eb5fa22739276d5d148f01aa7b4afb11552e849aa80a2b22105c413b0f852b5c8f0f10071700e4c184be91374d8e8c69f269d4bb858a19f2851021e879a7b80ffbe06f28a44b666da367984957f61ba5562829a03740b76ec54ccacc42b711ff0cfe7f771c502e76eba2770b96fb75b67cd658b15e4e3d798a9bd52c5b729c88b4e5504d8fbd7bb0befd04f93ffed9c1fdd2507bc9f9e2be768f3b38bbf82ec2eb8a86d10bc7f16a5c41d15c485532f9e377fe4f23f91bbc7f49058eceb19cc62d53928ea97b1d5c155363a6dfd2d9fb538385b67a9fc7988b18268f1c8d164a3ce88f19a6ad6a1c706916368721b043df8ca20d536b30ea1f585c939367eb35a05e852ff744e61cbd4b1e891a7452ea8a5279fd08b7e45b97492fdcbe298547bf3d00bd68f231523c3099ed63a9bebca39c23cf16eae6463ee9a66b4943b977fd95cb8438f69d1a9d7de0e4ee74c0b9cbc4e0d9cc925e117112fb2c55306dd5a1525690feca6d662cbcaab6d5ec87e0920bb56d7d218545f1678fa9f1c41d2c23d25c7ada4adc364bdae26ac6e1205dd4e2c25b0b233443f63bbc6bfb026505a73b39a1cfa13b9f8b1839d7c363bddcd4f40061c0d0cd1173fddbaef75d4e8dad60fbcb2cd51a97bbf2f33e1433c5becfd7b713ac924b33ff491932db1e00ff9fd183a31e855ecc8746e39a361507df482fd49ee2fd9ac6e3b1356e521dff5996e121878e630625921690ebe4c7092ae62073f27a1763856c691cdff1a49600ca9739866fcb7a2f19dd3e5b3e590b9114d3cb00c264e7fecd1823c3b2a8c18df6923695a48ce6def01bbef8681f9f364be29e53705617b6e78cd906cb93e797b1107bab1b6aa65d90fb617e90e395d9e4e6e390d26c6ffe4703f9cdf9a26bee58d3c8fe379baca0c531afbcd309f4f0cc449c05d20d9e4ed8d48d0da2429bfc37ffc2f9e6dca5dd0d0ac52ec276daf7d6e1c073a197995d247fa3ddf86ac27d646cedaa16bf13b8a7dd20cba1d370df2272c2349bee63758df54959b8c643d1ee40cc8f00d2c46e7cb088cfe45ee21326a697233d07fadccd9fac07863eb6418b85a5e7c38b176b92d97b037f6e3e4cc2505f7ebebe361202fe55893d67df6d4c76877594fe8db7f4cfd9e71e75fd6c30fc1ed14f83c3d201fc6ee131363047d2c336238f5a93c2145158268c4a652e3c142aed97e0599767ffd2a44cc568f007ff9a357a3fc381087008fef698d0dea968213ffe7d36b7ede5a6ba1be0b71fde7408d5c373db90f7c6f9fa6c21f187f26cfe369ff8ecefeab9e5e2eb091afd55dd19e056af8c53370bd3319005c18f708e6f3eab979c4d476ab71ca45febdfc0ff8bfb41d27f879182c308ec2076cc563a623f322ca55fc335043dd504e5e62eff4cf8593bf6bd56379f32beaf1d58c516e12f96124269b0cdf49159366bba9d045a6d8da0de34ee929720ab8574170a7ddf3381280a3059c87192e3e011d6b38f1c1d6853cbd786c05972b4562aced772cef6f889027ab3c6ad8cae4b0d062309ad4ad2dc81656754d6690c4ada49756e7b2aa7a5f8589d4e054f59c2a8c8f9926b97f474d775e5287880dfc4f820554f2623e8f4af7a9445fedf754a5c3ebb147cea3ed6660f5f858d06e0aff30ebd37af98d87a0ea5e643e3ac914ea2d09e5f82b5b76dcb8b080b990fa71d4dfe8caf2bb34dd7ee7d8bf18dec3d367d8a7a71bc2fe786e59fcc0feff97ea6f947ba7aa1c4aecbc2b47588964752658cf12f6a20c09780a5871ab227b3a3a7d4e934320bdd12f0c7e3b6c04ee0a034bfcea90bdbdc015eaa42a1ae21d7a521edd22c324e7c20bf440cee11afc89ac1c278f72ca370278226c2629500306efddbc2fdefc205bbfb2daf4164d83286ad592f85a4ebe5cde68a8da6587ce66b65d1fe93ed5355e18d98fceeffea22e4b8af0ac4ede6023f0c11b16fe2bde6b23b37c8a252c41351fe972ed094f8f76831e5dbe638e70039101cf91372518913d40809ae6bf5a5e8fc53d272eb2a0c137e1749abc136e99560a3e97250e16f8af2dce84055f0be0acb6f58fff622ca6d5427e03733990edfb25c0de46f11ca6a53ff812afbab58721b51f13629d92b4ee21b534d433797d72b63c884e9625a7042e62b53a477537e7caad69a00ddee603135339078f817f970ced52064b3a83d46cd0449b0ffe1ba4552f64829a8bb6c9cba58d347226d54c04ae06e46d5fe59c1d6fd9d947611122d1f889f36975847f479aa743b832f6d59fec8b99f3230db76ee406a54cbf47cedf04ab6ffa2376e9de5ebfcd172065d8d7dbfd68d8a4cd59cb44abd9ca0f1acad666ee68f72f16320fcf0158cef035f3ce05283033418d719a3744b9e5df4dddcdda62c63657f1807b962a4fd6d57e973debfff32bb84355e9152332d61d99cda9ad4a35118624fc5852033ec47d216a16981acd2a160510fe33aa2b831f382afc62c1bf6c064da2052bf2da11965c19cfaffd905790f3d10b3d200aa9b3e0535fefa0f32b67b89b271b6b76b4022fe75632dd50ca8ab122276a8de486bfd73843ba13a755fae540a9f08a6be9c25a85b9cd2814503faa7b6a573bb3db2df63511503831939cb155651eae2d140c7f4d03bba941970e32d12a066e3e80fdf216aeb446576c53548a7da25dd0a204dfb28ec30264211e50b4488b6c46471f70c625b7aef2e019d087140af9cea44b2328507184dd813a75880be3ecd46342bc51676931cd5892f548896455dd93828ac01e93c3e9dfd4bad54821a6fd10737b3c566c0e3a3cba2f1e1027d44bd9325cbaa0a6cf7a33ed9cc349fb44784c06278aa664e059bc3e7be7d4add898115de9a301cf2e1851f7f423da9d3c377d9485ca964963f0392a8368c665ec569af750c412bb5aa1cf0c5ece90942741106c6d807ca27944a307d854d2f4d6b3e10b52d33701cf978cda45725f02b79a9d0d081386af7387997493da04eae49f07420d4db1ba087e2f1e36d56fdba3be4e7c7d33c4265eb86c49acfbb6f22140d79dbe1259713bc1bbb8c65180e898e9372074ef62c82764a5114bb710c447247dd0ba8ec10fc6487dad9c358068c1d498541e3f9671d557097c7ae02dcc4ec41b89fc8c98532c67e1c3d4b2f7c8e232c5e1beeb1c0eff181bfee966f83ebdac6a7e873753d1de733ffb08981d5fbde199959b3652099b6d4f41e33769b31fd51154f6c0668ebd3bddcbe2e4e780d8bfe78baddf620415fa1db7dbe188ff48156aaffccd3541fe231952c94c012c5be7b424e89f73c69b1bdd3d973f68c2329736fbf2fce7d1c6400ac57014fb37f5b7ab6a45a6258f40f627a3affda946ed5577e076485e285771a92ca2ebcbf20b2919ee4cbbca758fa7d180cf2fd867868d3483f4283d1b5c9b4d3f487fa4b16ab2c39c47f6b9b0b53f53c5360481760c80d8c7d6ebe06b2e3d1170dd8f8fcc5c0de574061a1fc15e1bcacf849ecee266fef1c641b5110349cff0e9b868200188e8ac40cbc03c0c9ce3fd40cf0d41043dfebd203acbb79100de7e6defa6b160d2eca5110ea8840910b8b96de87543f90a2da4511fceaab0bd18feca8fe45deeb7b871e404d67b7102155448fc30c6bc734e1e1b6f1043645889d02eaf3e773d1b04391e057d85941d464da085b056d85a2623156aa20b5efb2c84412ce8242626e6f3c83da3f49fafcd142357176924be2a70738c71c341757c0ca014f48dfd2f52243562781de8ea6858ba93e9dfefe2c11d84a13ccce7919a7a8bcf04c4ab49e98549669382112aaf11c0fa8b65eb609e2b0437d2006e683286ec96fb7c2c62b525f1052cd7c0dd5943219c53add9ff0dbdd9dd7766047fcb50d79652d5f5dd4a62fb907ff26dae12de3614aa2e0e6e09e9beeda7cb469acec1ea221e85f1ba36c80970d96b54f8a9d19f3aade328a3f98165292b700831b180e7d502dedb7694f8007f9f7853a653c70f07fe154ffd53dab175f2ba0fdf0310fba7e4f92cbedc55bfbc3efe35a629f8c624b83a34e86b704620ad70c8c930bce00d1a780ee57c7db65399c2e26e620171cbc01543b0bdf84477a71abe2a41a164c6be77632f1eb6c8a2ef97903e46707a726afe9ef2e3839f784dc23065f50be41f7e548486231cb34bdf82fc7ee9878860b67d081c97083371600286828e93d90f3ae8f15275947468350ae991e5ef969dff41c7f1ce346f971ddfcd1e7d5dbf3945bd8a6636a52bfd9d425e309ed947fc9bdd45ec9462edd8ae8fb4a6e230e503dabc1fc9fc0cf463a048240d6c6722168d0f451efc41d19f9bd1470a1c4913cd1d77890c82a85b3ac5157440dd58f691ef2a874c7f47ef376f3aeed52cac0f5ba9680c0a5c82d53a939043af91d755bd9e79f8818c5093a46004c60aa077dc0c0d2c9f8b61e2d56be617b651b675d0aa7ffe22ae9c20c672f67a00acca3576e9798a11097de9cfea5bd52c9f5c24623428bbba4ef5261dd43e3be87acf4a1794bb1f18883805cd56f808fae2ee0ef22a63e08a795221c2a7486c276ab60b5e78109abf1f626e59ade3d90c3749f87ede422ba455483f3cf7fe6618975a43428b25d63e07650ae127e18f324f6a612140ea4852946da02a0237ea6aa163bf4cf2887e2d0a08830284d89427d6a061973a58a833c0f6ee122458061f2bc802974cf6e24e6a6dba8b28457a964d71c443b46e456676b778a12991065a90418e17c5fadf7bdc9e416037e5abf777dc548cd4d393e29a733c8d4ce85523251b819979853c0af5c3fd49cd070cc0029e7184a80b3c50b2a4d001c33f3f3f3f3f3f3f3f6fb26d5bb0ad89421264da495ac1cb5b7952e450644a292599924a000000501400000000000000c012d2886d512ede0b610b8a0b28a9bbb55a9224d70e0809a1d1c516b836c0c206a555940bf5740d5ad5b1266725b9ffaa102dff8d13e010c1b123ed131c5ca064b9f042a40358d4e078a13356538cb5929b480a72ec601a9cf33b2fef495abea6dab0d1ce09b8c180909090101d39c06206a73053292f9f0c33391b381203c06809848480d15f8484d4000b199ce485aa6fd115c38926236b3a540658c4e02047bfb995ec3b3ea291351d8b82131202801960018393a8ae8e93bdb1d215c61722088018c878c5299a5c32a653731b7532b226a2a3cb742480990b2f445a20c3158737ef3b1d96ae4dc6561c84d8d3e021eb6e639215a73442db5a08a1247145236b5ffc9e40c62aceb6f35e663fa62cd69135551cf5f4c8b9c57713ed32b2660219a938eba520e7fa54c5966e47181240c5e1326f7ce3fba57ce27c8ac3f22821de6eca6219a640bf687dbf936fc40319a538492a899633b89cec1a1da080111d3de2001a5ad050c002980b2f4474c820c53108a921c4d6bfb8a3389e656c0b33715ddc17c57163dc5acb7c7979f7501c2c599ef0ee256f4a4071902dcdfa7c13f5cdb553199f38a5a0623f7e32a8cf124f1c7783f055df7d642d6db9f042a46474e2202beda49fcf6cbb513070e4482c1012e23942429813e7925f926b8826f14345c6264ee9274735548abd698fac8deca87102eb02c9d0c4f1627e3f259caca07429132749c7a6aa2e71729624983868c65b0f95ef2d69bdc479645c93314dce329c96389bddedd8c85989e3b8fa6b341565254c4a9cab4dc95a558617112791ccc8f8796212499c94bc75a94a29938dc4497526b3ab144c2c1b12c714256e5350b944d1dc234e52c6eedfbf77b476c429a4c87c82c6d5f49a469ca40dfd9a5515b766469c6a549041d6e2966817711e0bca4d9c2064d2cc38204311c7ab12b39a6dccbdf9449c5d34f3d9857ba97442c4f9d49450a1c45a1e3f39c4d1f2ff43fec5c92c19e254ea57f2882e298bde0b711ead905fa56a421c4d548a077130b9b76346ed9998840571b498ba4af3b7c810e2409cd4fcfd462fdb967301714a516247d4583aabf50fa78a6133fcd52549c9d40fa7502548bff8653aa4d887a39820ef6932b3b8a8f0e160a943afb65bf670f212d4668b7a36232c7a38c5942ff36dda78417c79387798d8a0fb4b12e73a3c9ca2a6a44c87b69325bec329efdf9e24ddfae4343b9c43c9d4bdbd318410ad0ea7cc57aaa2c9191d4e2b7e522b25cb6f750ec70b1a5c939ba49b52e4702cdb20ee44c47ea92a0e0725e447efcbc43ec9040ea714f775c48a699e3c47d66ed410f91d6d6f307cc912eeb3b36e4b1190e186737b25b199e69555e2369cfb3d9492ffb55495101bce275928e933ce6c8ad9359c920c99e792694cb3500d87d90bdb363126a9eb8daca54005bd45ae1064a4e1e8f5a55e92c76c27f2450e1c29c7835147a38b06a4fe2db2ec908186f3dcd5952825e80c2761d48ddea6659b9acd70b42044f528e1a7445a86530c26c64c9294d1aa9c0c322caafca499945bc65460c818c329069549b8d433311c12121252d9850c31202f93704ad8f0fdf188411b32c2806f0a5a6b941253e499bc37181748c1472024045321030c5cca265e5ef271a6e5829c24b642f923de5a8484848484d0d022051f81111ded002d14b08014e4c0f1c54b202404252234bad882c651c0d7c8d14508971c3bc0280258838c2f1c458e9832492f88cd0970d8d061722440cd0032bc703a1d13fcbf52be986d644df3709ca08b90909090624490d18593b49979938f880ba259e1c20b9111195c38a9cb3dbdd94ab068d1c2828c2d9c4a85d8a45b7317080911b1355307195a38b90519835c58bab564164e2a8bfa56b2fcdb8c61e1743f16b3c9a5d377935ce19c6f62a8caf4e2256c6458e19ca75fd74f3e9976375538c6edcda3aa6209b9a2909014830c2a1cf304154becb16a2f311953386f989469db1a195238669e6ccd1a2d178553ecd9af144fc9567b41e12458658d5f5f49529a7cc2e1b4e9fc321116271c54ccdba349f5cb864902c7b145138ebb576ab4fd494b73d2915290c18453c56df90c72ac628604194b38da86b8a9cc745bdd240f50c2712ea59cb3bef1cd655304194938b8bf8ab0cdd258263f07194838aa5da6f435ea114e77a3a225494c0d73d1080711d93ea7cc62d452e020a308c7aeae334d8d7d278b6c904184e328a1e9e566a9273b930619433856894db292891563a6e5cc204308e7efcbd69384cbd231da914146108e96224c926230a9b9495ae8176400e1e87ec137a478c925b32dc8f8c1e904cb574ae53825ad9d05193e388d12f4c6202a6731770f4e7b25947b261354ee932bc8e0c1d9e4c6dbd1cb2b652a1906193b3808cfb459e75cc4a8d20b32747050629e94f7ca92cae88241460ecede1b33e24fa660b1ef820c1c9c34933625c91bd456753738dfe593e5af2b8913ff5141860d4e7af3a14f3615534e54460d4e92da921bd43a2f992c0d4ef26b16213fbee425a529c898c1c964acb064f9e45d7265c8e0fc9b6e55c24879175964c78b60c7372024040d175e88004007326270f8cb1d37edde6c26282464970b2f446ac880c1c15f2cc7428f8953999118af38aee51a0bb1b0a9b554cb8517221ec315076919325a4c9bef136fc5e174fba2fc9828e2625871ca936d6489b9a02449ba8a83124f0a4a4d84aa7739b2b6ca8517222888a18a63da6f6e926e3193924dc5c9f44893c2e46f9f6c7741430b1a18a041812d261003152749368b33315eeac5f8294e829a3ad93296c4556a8a83a535492d297d259a60298e7942ec92bfe553ab90e2d81637a524c8ac3b4d8dac89a420c70e33cef13b6a608c511c47758945df64525a518043012121c9a30007e21d3144714ae2654a2da66fdaba9135065880061b2046280e1add3e4ffa87dc3882e27cb14ac55693c2e8d0c5f8c44996cba6a04a104afa313c71b65b139a3aa6c42c3324e493189d389c3c41d6bf9ce6157f64cdd0e8a2013a4242caccc5e0c43137693dd1f2a49da0e44c1f626ce2f09d419b98498af52a97e310431347d7307a8366ca26966864ad9881438c4c1cef6db47a895f0bd947d69207dc98c0186260e2142addafd428a9c4d19b895ce22488ad98949ada79cd58e2a42994eca3ad41d94975ecb8d1976254e2642ea2c415b19872967c2006259cadf8367d61abe391b513740e11cf499c2bad5e4c827755786f64ad6c10431227e9e4cd621f27a3f686861679881189f3590a27a9bd98478d4a49430c489cfbe5e24585f635dd1f719e313f7d9642a659ef88934937332a2d8485188d387ebde689615d113c430c461cf76294cdc6918b3187c78517221d88b1889324732bcc04993249592d7e0831147132b1cf4e5f87cce8bda317a060889188d32929a9ad7ad10b3110710ab1e9546598d8e396901033113bc4d9b3d3546b12374a44d4d28b1886389f5eb7b2b137f19a8eac318d2e1ab0e375e8e81c359a025ffc8ecfe12121c785172201c8418c421c94d86c49ca275e051927c4f92dda059954d413641c1212122262a976883188f309616a54ed6532c916c43194204a56d05b79610cc4794b6f94893dd167298038e87237b15df3c9b1de1f4edb27ce4cd29a6f2be687d35e6906d5175a93d8f4e16031c86eedce922a347c38e67a0bf2b173529c7b38686d9ad81ad46b8aa91e8ee12c5cb63f49a5b45a8c3c9c4da5cc7625dc25919303c4c0c361b46d5d3231a2521cdde1f062afd9f756291fdbe1b417a237e90cd66fc7a8c361545410beeba72e753a9c940695e4680559eae21cce1e562a4a2b996c4a7238093f99042d2553b55b4e881187e36fbe182ca53ca6ef86c3796344299d3df7255b16a0a1058daa000d0a6c41636d80f1450d5d428c379c46b4c94fbf902927e986738913dcd364d813f9f11362b4e17062b29a20f4e54cb6a60931d8708aab232f59abc8a02c6c5b88b186831ed98b16da5452a2aae13063e7be65f1f22bc63611230da724c824f48f7c15eb120d2d6874b1058d903a2ebc1001802862a0e1245d3e41086da9ee3536b28636011a5d6c412324c413cb991634ead0a0c01634942911e30c67cf68ba925535b296dc781d35d20d1c5ad8b081e3c65f202424c78e1b383c2424d70f31cc7090295b22b2436878885186534c5277ded2e4aadf8d88a5116290e170422d4f685af18a97861634686841e36968111222821a3aaeac21c6188e2364a524c6a06b2d6834bad8824648488d9c38ea9a021332ea75c83b6daa2162b6221ea5386905f53afda1694a6a642d0548e4ee0606a4e0418ac38e14ad9e117296d691a5d1450356e0318aa3eee8bffc728d288e25d6fa629a04cb1fd5113c4271389345cdd2c93f77affdc00314a753255d7bb7d88ed6641d273c3ea198f64c6a77b6bf24118487274e62f2ae24b59c7c71d2e7d189734972969ea8919d2a3c3871d4de53fd21834916c581c7264e2afa94cc4d99db60a30d3c3471de9354dbc24b9938280d266ec8fe5c36194c9cb6bb2435a2f4366ca420c78e4b1c4e1a7513722527168eace5781b3652081e96d86f940c6262c3e64a7892921a7bce4d7958070f4a9ca477a939e1924ce26cb65d66e1c2ffc837b256e62189b35eb0501725ca9b8047248eb92e6c10b515a192d20344be0106061e903877b72995a406e121465b048f479c6493ea68beea199366237838e21a118607234eab9b45d97fc92763b9083309a53f5f29ba49236b366cb48848927448488dced18515527828c25cde26e46c4ec6fc02478e1412c2fb098f44d82173d6e90cfb2a4144ea74585e6e5232163e44d9b67c73a98628866890164b9051edf02844d286b960c29d1cb12e21b274b2529d97d89644c0631007613a75567eb468cb0571cab81822c34fb734e81188c2c26290934b71b1dc3be3ae5c6fe4648c5f1cf000c44153eae589bb38a34efe70d2b7936218d11b43c87e38fda553c9849365739bf4e1ec16f3f533f4d2c332050f3e1ce3089f8b2dda943c6f0f65b111a53296ebe1a04c74292dd9d138417938a5ecd393c2b88a50413c1ce3e62f6d821455792b1e7738c638cb7f692dbaa132112b07050f3b1c5c5c63452b29539171e8b881c3cdf40c175e8840c0a30e87eb11ee3fa3b94ae8860e67bfccdb272c4fbe354181c71c8ea3eb528c63b296d695c3d9a46cac932e5647ad27f088c3717b4d4c55ca649e89f180c3b964948d7793faed3f8f379cb2ce26db12965d52dd85871b8e712aba727c2561d5c2a30da7eb2c75ea3773a46b980de78fd327c967d667e2ba86f38996a9d3ea4acb6847d6540d477d379584fa52f1ea3e4bc3c1d45ddf8592a46c7d828693cda5c95c9f6a5a97912df6090e2e903dce704cb26a9a37d9352769f20b0f33580897e1b07fe9e4123dd9af4f996307186438a50b9e969ab54c56d0c85ad2386c8484ec7811885806b60809d12d4bf018c3295c6350bf3b794bd4aa54c1430ce74cf59139af92a0cc1486f3062586d25cf2c8dfcd46dfc8f123de2e0246182224c081c3c65e058c093cc0706c79bd0d69276992c62f6a8ce8083141a1171e5f389f091a5bbbf55f474cf5c2f1be44788979be4cd48cacd9b0d18e371870e6d18593fe188d969b432893840ba73c9515b3666bf11df1011e5b38c530b5d164d0efb05f0be73f133329134db270d42416644cef5a11212c9c56de94ae51275a9a5ce138dad4465968cb59da0a47134354e46cb08a53154ef27b27b987f2d60d15ce2fe2c4da1cbab4b83c8583ded5b4992c4f96b4144e27c6fd908d7af6e246e194de33d32babf55f85c239dd4cebd5c87855c9279c4e8a3108939d130e7b9b7a1b47453db535e16829467d3f4c90b6b991b51c389248311d393ee9b8f1856f600d9307134e324952999896349794e70a782ce1a0ccd2df5cc53cfa948cac95f9c04309472d95a69b7f4cd794ef14d88246484848888e3070ecb8f18090101c401c3c927094ab3413bd37f15ef6408285781ce124f6284b8dea61979b043c8c70ba16f565ea4ab473e4781130fa8b3508f028c2314b5ab756d0984b8a236b227a8907110e9f6eeda6faddafcc91b51c4b018f219ca4b3e0276fc63d84602123f0088207100e1a677faa62fccecd073c7e70bc9333fcca787ac9fc7f11860e14860edc80870f4e317e2a09776ff344529063c765c0a307c79ca535d388d390a98fac954004c70e1e1ce6a445d514622563e628cbebc263072721dfc3bf84b73a31d1c1e9842e3b25f31b8492f5c8818594070e3ae0718353dcd83826cb86397114090f1b1cb35b38c94dc818ef441dc08008d0d08286038c470d2c84041e3438093f2a2549bef5baa8a1c70c0e1f4a9227ff09e25e2f29c8b1a372fc8e30b658409a4088221a3c6470aa92462d498278c5296370364df5dba2e1effff380c1a932eb8e122709abfb445023ddc0e15ff8068c1158bce274f9a6b792924fc9edbef00d946905b070c579636cad643a5e4db7ad386ebbc87171b75362c5f174e4f2fc974ca94bab38bfdc954ca6a575f1abe2b0e7164b36b735a9245351a95cdaf29794041527394f645eae99df12d461ca290efad2a4d097aa66bcfe0216a63895702aee72b88ac85a8a63b84d6af43fe66d4c529c3e35674cd047711a73b51394aca01d8be224458d3571e54efe3df90116a138652ba162a7c5503b1f1487b32b7d952cfca83af9c4e9f73b4b907742be483d719c4d2ac6cae93227e63a7150f5e69969acd336c9032c3871d079db69f9dc4d1cd74f58127b4bacd4af268e27ee6535c75ed00dfa008b4c9cd48e87759b92bf49ab02169838e9fd10da7343a9b7984b1c56d3ff87d2722242678953896cfccdaa34e6974a9cc42cb12e64e68a49959438463fa5ccac32e5c47f12a7ac27dd98dccf122f451227b94b52b3d4a799a0148983c820d694588b504a84c4314b292dee7fd94b921f714a52c5ce4b2735dc061d719284abcc917933a6d41b712ec9f29d2435bc7255461cf632988755ccdaad2ee2fc61c97f2b646d4657c4392b26135b968269d589385998b54a9967e28d8b8863d85897ed7dafc1728738955cbb7157742841a60d71fcad144f1a7d2bf171210e6a5d34a8ccfdb72327c4b14fb832efcaad16e7419cffd2066dfee5994f50102729562af69dce6d2b05020b409c35c9156e9b2e7e6712ef008b3f9cfd378454ebfd703a25fc049d933f94d4f5e170296ae94aeb5f8d277c386b924249cacf4a4c16dcc3d9f45af8eee78993d2c3c1e7379489367e1b5b1e0eca533679c95782d2141e0e325f46454b2ea5c4ee0ec7dc95df4d4c2556c8bc1d8e49143b6194fc0f37b13a9c774f9a95a4221d4e2adbd24f9afb127299c3d9c41436096697d972391c84f8cbdbd3b41f31e3705e7fcd946f576583090e272184ada6fc5026e5cc1b8e736d41df66798bb56e386b69bfa424614d3849d786a39a504910f2c54eb08a0dc72b319eac226377957c0d276bb378d2b26a9574a9e118d53ac7e4ca52d89a86936a89dea755f56b8368382971a62594924749a53e03b2dd52ea461199e1dc6d2d32653c29e8f5ca701ad5b94a3b631b2d27c331cab56b45bb30177d0c07a1ccfb5490cb8ae189e194da71963c4be81671188e715f4f5566b2929703c34989a5a49167d29edeea0b07a144c456d5a9a462e985b37a9d90a315f5a26b5d38092fd968696a4b92e5c2e1e42c336d56e25a0eb770d07995b405573dcf590b47efb1f495aebf4aa7593829199ad28fb61394ba5838556c8e14f9b47cdabac271c3e4b68a0be6a64aac707a3733ad66a228bd60158e29a5ba0b25bc44cf940aa773fbd09535c12f8753389cc866db8f2add51a5708a3da7d36249148ea14acc5fbdb493520685636fca196f4baee026fc8483266d773dcb7bcb09a72a6152f4942ac9b41c59a3916c18343e47183a70d8701a68c3a021c207072c9a7094d55bcd6f3a139c14b060c2e132abe4e93271848cc512ce6d4a4c462fc7dfb88181911d3534101212042c94a0fd9e9798e269dcceac58b16282b38145124ea3e51bc45c7e6c4f4838f8dfc8d1b9b9a9ab3fc2b924d5250679328ee5d1c89a885d13b030c229491795c4d314c564b50807997367eb65e3a9da8d1af9856f8046175bd09040081f010b221c4d8edef74c92faafa4211c5334b6a858cfbe6422849329415d8dd91e846c53ed695c160d9b64e4cc0c5800e1517ab6a299d6f192fee0601636e57809f9e0bc622a6a49d352d9ec1e9472b27a68b856ccf58a4902163cd0f592f63f95276ec80258ece070b14413111376d4963a38ad9eca7fbf29b30c737092dab6bfdb3b1c703f26af65885f9027bbc1061f873889a89eb2b425dee9df10e752194a5572edd1275a8853f8ab7c6e25f79a344d15e18310c7933f4189d04bf9bdbd8f419c3a9334bf745d7a2c2e860f419c5594e4a7328a92aae4095b8ed75108f01188738a8a49a952aa5d52e60310a79dcb9c9b4c18a12da7848f3f9c4d63bf3389bceac9ddc0c166840f3f9cbc2ff4b2bd245946cdbfa377842101ddc48a818f3e1c3786f0b09ccdc81a8e1b66581f7c388889977db4a5f7907e8686b494a23bf8d0c34934ed050f4b5fe27741f8c8c3b1b2c4f678336931fb236b08840f3c9c434e448eca88f13b6d0f3eee70faaa92266f1093a406d9e1b44908edf378917a771d4e324fca9e94f167daa6c3513bc77463377338f7a6f1afd7d196c42b8763ae6d8b41c76457cbc5e120365799c59244dfe904680f460abac8a101331f70386a3429881293a95db747d64ef037446ee0c004e80b3ede7034f1648b1ffe999499b8e168f2757456bfa46f501b8e496d6d16212766fc101b8ed699dc64ab681e9759c349e5e59e70d5701c956694d0539a4e491a8e9f9e49ac39f1b73744c3c9046f533dd14e432f6738582cdb5f3d7157f4668693f5c6cce8b631c147194ebd554a3c69f15da74486b3d958d40db9b160a7319c825f5e1216aef72d12c3d9f2a554f1328815290ac34934f50da267e7c45283e1642a54af89ce5f384952926795827a967cbd70ec0d3bfad6444d49a25d386612a6b13f363fe4e3c241699b582f962fee2b1d1f5b382551419652c9c7fa762d1c935d10cbdab449ad958573f5ff8cd0eb8c395446d6ccdb385fe0c8c1007f302e1012f2c5db782ebc10e90f2c9c2eb3ef54921d69a97d5ce12dd75c418d2831d9c8dac88e1b65031f56d0d2ff96ec53b249012ae38f2a6cc104b5a0662abd287203070d2d68d0d0220909e182a3f8a0c279bf57b429b1af848b7f4ce168fae1a2f7a2d6c2fd2185b32893e43b7131de09db35e0230a274ff3136eaf99b6e70f281c4efb66ea90c16694f0c89a4866e1e3092753491691d7721614a951ca153e9c70729172c2ff9924be660a1f4d388593b3a441c3a6fc98f0c184d3e8516a7e2b9994d71f59b35bc2c7128e974a36415f8492c25dac0e1f4a38fb9f54317ae6f4d99a0e1f4938880c4b52be36ae493e120ee2746c6c2d7175137384534a51b2e24aa6187b618bc387114e19ce77eee5c229a152849330538b73a7f64eda140d1f4438990c96de425aca44cef03184a3ba867b4daae40cb9a30f211c84cd5beabdd37515253e8270b23671fb2c06a19695233e8070103e7b4a3251d2f296ab888f1f1c36f89ade688aa5f408f1e183539ea033334666398d25e1a307a70fa9255d0975644d07f7e18307a7ec23539d387f91de1e3e7670125654bd5918a54a6baa101f3a38b9ec5a8f92ac446a81f8c8c161c48959fa456a4aa91b3d7ce0e058d952123fdb9a956cbdc3c70d4e424d499acf7664f09f0330870f1b9cbef208f126877a312b0e1f353855cecd1742c375bfb564f8a0c129996c49c2a9124a8cee0c8e49a92eb914946ca7a68cc2870c4e2a2529aae569dba3040a1f31389c98d1f4c9ca542549f1173e607096d754ab9a2d4b4286bf30e315c714a4d949b549cca0415e98e18a836c7f11c2db6dc5e92e88ac9cf97b3f9515a73cc94e66cb77b159dc2dcc58c5712caea9fa14d1b4550866a8e23c7b1fa6e2df9d6a5003335271da983309e1997f6222e506335071ac31b972faa73859fa9bef9850f216c1919c290e5e92ec1d21d3236b3a7411334ac12893ff52a5577422381266c20c529c4bd82c6b1b4c92f29010be002862c6284ef2b5e49382d68bfe25519c4bae6bc8f6b1cce287e21464cafe27ce5fcca3041427dbcb2469ad9f38f8ce5c3ad1b16282ee8953c538a6948fa749a64e1c3fb4096acdb4cd6738718cd7aab6a4bea2897b1367bd114a7c1f8d260e62aaaf3b53a4298f33714eebaecdcca3b4e7644c9c6c4dcadc93d94dc3bdc459eb438bee6a2d718afdaf49922d84285156e27449c89bf81b2a4f474a1ca39a920f1b25bae6cb2452f2262a4c8a41a8b1300031982189e3689c4b7dedfa793912275375c9f3843d1b7d8584141331b648cc80c4b17534b456f6ce55f811e7f1d5fb122c88305974c4d143c993b1620d98d188836d940d42c7283fd9352ebc10e96206230e234245796870135e2ee2a8a32e4693a4132766a388f36a123559f1b35e3a0b6146224eba96334ac333c95741c449c61199fc926a87384913b55f4e8658d2dc10c77a15ffde6df32cb310a7cbce0ccddee5aa13e2e4bfaea14a0a254aa63461c620cede6f6234e12717f4e83830431027e135c9d49b32891d6a204e76e15aad227d4bbe50600620ce7db3567ac25de6c98cac89e0488c0b66fce158b25254f59f9afcca2d98e18793d61255192c6e92847464cd060e1c6088e048960533fa709cdf529ab42519a1a19135dbc10c3e9c2ec5bc259cdf26d5e960c61e8e274cc5f7feecd37f1a59631cccd0c371af62ebc6ae3899f59135111c89da60461e4ee1b6746375aff4b691351b39f070129723bb637143c532b29677388bc66c8a552b25e99391353b9c664bca272ca8d0a2088e046930a30ee7dfdc2a2a637355b047d6c2a0c3418ad85eb514ecf4c58caccde178f3f61532a3c935d3c89a1c0e1a7bf2e4ff950e251c598bc3f1dc4d6dfb95ca8d9991b517c1915c81c3b1c2afe6d26f388b9062c9a2c6cc5a29236b6088e0482c0633dc70789591af5296d7b334b2f63650c360461b4e318979f94a52bb64ab604f30830d0729224456ed06919a60c61a0e7732fd4fca9691b52a2b98a186d4259d59649d5ade46ebc091c38c46170d102181d7d8513684196938a812b59cd92e8c9a9b0387885d0766a0e1f42126cdb633637b7486539235b254f6b8c5c598e1b0794ec652cea02fca33ca70b67c3dda72656acd35830c07b16076a19592b03a97e28619633859cd28f1e57cbbcf82838bb2841962784705b3fed126499543a38b2d6890614618ceef31a3f93797e4a21ec30c309c3cf3df745577c5124576c6174e5af28a30f9bd6412126678e1b86f16949413362ac8b898d185a3c818cf6fa399504ac980610617ce99f635b7baafc9322464a130630ba7fe2f7f3b8b75694e723c0970e4d08251653563da330c33b290283931ff95e592225c988185d388c9ae6d257c56aa0833ae703c0f3737dfb826ae3fc30ac7afd718459e2ef9a2e824a884195538a6902347e93e13458ca6851954e0ca55638c5b0cb72c5bf115639942b69a2ecd664ce1945e4f4ca6415aa59547d67686140e7a2a73fe468d10ff8eac7d0e30ce140233a27018214d9c58137acec60287195038089d1f9747365e69dfd430e30927696682b2dad02e1a3713b1b2b3c30c271cd7926b9954def9966fc241c83f916f4aec143361c249fe53dda66a73e4972ce11c2a35883d519ab4e64a3888d6cffb7ea991229484c3c9b0194a0acffc1021e114d4a5500debed12ea239cc478ab13947c5193d8463808e19ef6693145389670ef3527225c6386080779e6ed35fb962fbc4338a9f18b6e32eeb2092a4238b5885da8259954062f08e74aba2b2a5c0e080795de4c8592f9459c7e70d215548c15d4af98693e3876c9a4736e72ab05abb806337a70f8cb384955185bdf130f0ed72647c8ff3093b5dfc17194bc92a41ad52625131d9cc6620c1577e14e359e8353d4934949aad5549e0607e7cd24e58bbdd8921abdc1c12bc32565ea3acc441b1c93d4a925d7d99a57656530a306070f196a3497954c23448393b013329f70af331b9dc14154092fa29270394c23cc90c1e9472fa82498ec118d5261460c4e5529b5d7f7da52a73b6ae8a8610243a38b06e0d85143478d0c2436be0603444442424242161012221212528919303889899624947cf206599a2778bce2f47a2769a9a879335dc615474b497d28297635c06843058f561c93343129cd14c3adefef3770dc48c18e1a213bb4080909d1a185162908094935727c062470250ccd800dff44040c1d5c8c0b2f443e92e0c18ab3896565c2a570a3171129b7048f559c55439688ba94c4ca2253c5c1a2080d9d1fb1c14ba9389898a9cd848df4fd0c2a4e5b416a4ecb250e82c729ce962376f3a50189dc37e14cc5e80c0ba990051bceaf49c6744d29838f46a38b2d684c218b359c0475714a3c33534a9dd0d082c6aba0c60544d0140809c9420de7d875cdb167764ad2ca81208b341c3c546ecd9434dda8e390051acea3393efb19676498ce70ec7b518216e96b41970e3b1926dd82ca97e1f82247c5d36322c3e9db4b8a1b948ccfd08ee1706ba5f169d9ee476238863f299609539238c90cc341d4eb9e9a68576212188e399bb23627e2825abe70b450a6b7349fd0289abf098c0c5978e17071d625e9ae2468fe5d38877e96d465722e1cfce4fa67186d976eb485b3494a6d873a91168e1a9e553d367a7de92c9cca43b7ed49a54ec9120b474b177662b246bdb0ae70d4a826c86c95a1bd7d2ba45a26af3126f5d42016d3d444933d6a3689ca812caa700a97b229df2b5aaf4e85b36e6d09b7109766ef299c32aba9fab3a449f87b802ca4704ecf5c5194264da53151389fde2d75993b39640c85933c13dae6a56e37d2271cfd94fe2b25b75dead20927416dcfc6935e13ce9a74f48e98c9b45661c2c1755d633ef1259c4f2c95b6e354d7d49785124ee2b67f32572d986c3b218b249ca4fa522a852a29bce6d49005128ea5ed349d993431e69ced0c591ce16c23e3a425db58d72e0b239ca41263be98b25c899661a3d14503b228c2a9dff49b10da44bf926464edec8e08c77e33719420ba4343164338b549bb6ba979296512219c72aebabf247532321a84b36aaafe50b94e881d08a733d1e4504ab8e88ae5058090c50f4e526f938eae66afa4d2e183b36c963237c1e82f44921bbf278b1e1cabde4b54fa8bef391a01c2c183538cd135e97f9d944b7e64ed068e1a2228a891ce32078e1c393e0b90c50e4e52e7afffa8a42a323052b043448404ff602c05b2d0c1296ecaa2a4249734336eb90c649183d3fc9f343397e4220b1c9cf662fcbaeb1f992b6f700a1d933445ed6e1f51043770d8e00a6461836334298955d98ddba7acc149d2a752144d359ac9bac34016343879866d5262b9174735b286829fc1a9647b1f59a99e410651134a200b191cb5ee7425d94797d8a22f6af827658b2c6270b09a91f95756f4c9cc02769f1c04b280c131eff3a4aca056329f5e711263661284fc52d72477c5d163c45bea6f5a71929fd113f5c4149dd980b0e27041e9de689298087915c7989113839204fd7221551c7446c6f5cc7373259c8a93ca9b2433d94ed75e0441c5f1cfc243cc89d1442f39c5414f98dcd86aa9674f10531c67449fd032a9529c2aa6bb345933878f8e3c0021c56993a64c57270833bd19c5c15d7f6318dd26762da2389989b65431b9eebbdd0024148775ad203ada82e21467abf39468322629fdc44997f026bd78a75dde3c7196ebb62b419bf58bba1307a5a2661bb5931126fd399046170da01106185703104e1cd64b5d123226e9ecc29b385c7a1393cba99a386693cdf72fa9c9d030c406209938057da17b25697e51e2c85a9e18403071749372a5946399790a528d1d9738c9a0414993d637464605104b1cd39d5ad41aeddcd0ae005289c3a950999256ecf976b4884839308050e21494b4dfd014adf6173fe08b1a3b42b60032899385d6d5ccd4162c566aa01c4f81909090100691c449976ddcd320e719cf1c2724a4737c0189c4c1477a6f9d88f711a1c88d24f2858e3e8188088e1d45012090389fa4dc344d101acd2479c4318ac6ac714fda104adc11251719730525a86912a411c7f3b824e66b67c431955e4af2c60ff71a2de2a4a96b7d53fc5267b2220ea241754b875af1cc26e264ea7dba82cac52a2522ce6b6619c39de4218efa6bb9c1dbf4ef8586387cc65ed2d1ddd07b21924ffb86fb5d226960b4042e704988836b4cf25dd8e4dddd0e0244109d6d4ad1e8a201852081b01010409c379d9aee8c56429709c81f4e62bb29316e32932c2941fc708aa3d75373a5148307d287a3ca5f12b6d4a268b680f0e1bc49e651199e178489a501640fa7a04dc435d9bb8951731940f470f633c14d5d969a09291d40f2702e2d75e048376aa48ed75105103c1ce7c249c154984d728746d68acdcccccc0caf6ee1c20b11014001e40e27f55b99439cfa9e7cb301c40e5645d1be3fe9f4e607903a9cd38476493341868f8b1640e87012949e609be2893d1ded003287836acc255feeb7c4174b1a40e4709213839f9c7ae24cd4d10012878326e1b4a587fe8b25091c0e3b6b61e4dbaa2bb66f385d9dc97bfd993280b8e15831c9171bc62b956a6d388d369347ffae44fd0fc286a3669156b2a46b5c908eac5d0840d6704cdd55256e3c0b77266a38db49f94bcde68af53a8e74a34601a01420693889b1f4f9254d7f270b090909d9000d2d684880861617f862878e30469024e09f01c98702040d279d3d3237430472066cc346e3dd8840cc708a49e570711b1fb5ee034242ce44ac98e04c1e48198eb1b22deec42ef91622c359364fdb88cad028b2319c644b3fca6d7428f12e10319cf5d5847da67c4bfae20490309cfb45968618ad703bc17092b2d2499224cbad6f10e40ba70a27985213648ce597170ef2c5d409f515bf1407e9c249935872590c53599bf1000817cebb76f5994cce51e2650be7f6907329e8510b07378db1b2a45f0248164e7349cca1f5269da4435838c62faba4feb5fdbebbc2298d12ca425c87bc18df2c8058e1b8f2fa22c4b45538fc67ca5ca1c92449c30208154e992ed3880dab6f9b640ae716959be56545e5aaa57070cbe79dc95d2bef5b0590281c6be3092daa4b669e7484918888e0460d912ff81008140ed76f4a383529fe4c44409e70eedf8bc1ff74e4853203204e38c83115e464281f1317a30490261c4cc9a16288b053a94946d6de06ea430208134e2a9a142dba614e2c08204b3809d71354920d277692663000a284835cfce67aad7a8c6a8a009284e349bb24ff5210114090703099a6369b54ff9724a5007284638c139336d31b54f46f042bf354b6684caa004811ce5ff23b648c92cf7a1194128010e12c276dc491180e90219cdf5292d4f4369b8a72642d87888e1ac56874d1801c3842ec15204238f5596e2b11275bed07e1b449eeecae418070aad45d4abf648b9639b237267061981180fce0cd7899528a4936312f1fa07dde6209a5843271295d00e9c1c162a67c45b55ad36ca01a1e46f239d676f883111212802280f02015ad64e2da4853fac89a8e564b6e60a08c0520f5e912fa57331e80e8e078f9747be92af9729588a8f10640727036f17abf944cfb7d494d00c1c1d1f6634e8b3cdde02066626fccd12b93661b9cadda4e562de982a6ca2801a40667bdb43797bdbf6a411a9c667f4d5a926e5bd36483003283b375f6ccdaa59294ac321040647034492a61829762709633217b553716ae7902080c8e77a1796a5b3b4a8d46d672e8023e5e71becd0c5b27dc986dd21547ab0da5d17e94986434818f569cb3727a49ebb1d2a97db0e2ac1b97a6ed9a65117cace2a4921855e1ef4f896944c1872a8e192cc3fb43a81fd147d6ee52712a2558bed732c70e303e5071d45bb7ae2d19359ee438c5494c2b62954906b3e0fb8df6b3f1618af349f15405692717a21d592b1bc14729bc78cbeda357d223c5b924559a75f3a237d5519cd289b7934d12a14d9217c5f95f638494b1b6f03c14c78aaf624952b3c9d2088a5356bbb859a3892663b6a3c6278ef2721e4a8c1d397fee87274edb632932335548eff4a313c71493d0277989fa2776e3c4419f3aa5924c9366f9b4894e08d34b79e2a877dc7813bc5d6ae220dd2c37dde67459dc091f993897fe4cfdb16226631c59631a5d3420051e1262ac580066f08189b36d29c13ca3c5fed0ef254ed7f1215b49d01ab5a4860e1c14b0c4415fb66c3661443bf4800788e0b9f8a2464888880d30bea81112a29538f688dcb3b0c1237c50c22eb17dc4fe654dda91b53b1b7c4c82eb52b9f2e92c830f499c344c12940c3ab784ba46d6443e121f9038663f13aead94d8b50e1c60146bc2c723d2f199d7365ee788c37a09328fda8933b53105c447238c6d561dda1adfa6deea19373458e6d10bd1c81a1a8d2e1a90c888f3bb6ab2b31323564d43f858c43946d7a67463bee1641471ceb024859e9ab510f1c147220e76729249633285d420441c637f3fb36788d3de20218ea9a8f4b145b3601c0a85c23010c320100ace3b03e31200000010181507a3f1984017b6f5011480044d3a32502e2c222a201a180d05c28130140e0442e15018100a04c3601404623051e21cd909578674c7a185446496372aa357a01a88a1f8e038510bac962de644064a15be548c3f420c7d432949d1098293614b1320b187bc87cc32345099413f9fdaf7f900cb1d87ebe4a31ad0da56be81d663995fc62d5ae9bb48ad9174460c46ec4758d5917734c5cae8c3cd46bbf248612416fb8833524c33dad52619abe088120e512164e8c8df13df594e621a528559ec1c6507f7a98f049d651b95f47f2282a3aa6c0b82a9f844fa037e9d674cc3081864d5320eafaca96da0a74628bc6d546eb4d755b7a51778b1a58c15c7509b2646ea132c6e7829d330d7d2e5dc8f0e335c3ec64949821e5f3773279b53e57ded03e3387061bc131702fee8b09ab42f71ca7a528088cce1e4558e2d298b9a3a0d658080eb885c973402f8d539634a39bcf177594a017e0ab1cbecb9f48a32103109193bc059d68e83a68efb4301c90b50e1ba5b8ac9094d3f2590bf603cf88f481c6b3fa94d0a10e0cbe45ff702b733664b96f369fc5f7e800b98a073c9d29b24195343a8f5976e1ce5ca1ea51c61dbdb00b410db5cc63627188216ff89660c4138835247b8ae997c0c1be91900e4abde7ee21bf0b3edbf7200ef2407ed41561dc40b346b7d3f3c2381a1b6820a7caa3d893577b2b66a4174f77442905df9c8b54a496416ba6cdb790525d3aae67dc925b8d7b209425d000065efb18b53bbfb3698307ab737959cfe8fedf2eaabd086ea0851c3ca6f686dfc1d7aa6086a27bc0261e09c29426890c0810d0c52d123708ea80bf5ec22bc3715156dd9f6d1643910611f10b611b8e150c8130c926eecb959dc8c6021f4dc6d66a7ecb63d561d2cc2f1798fd8b1cfab087ee0bc6081610719ca067d2ccd485325a6023248c4036718802bc68fb058fde93e419d0a69631415f13a2125c500c68112e558a8ce3ada01204903549d9c754b3af16b48a1c249c75853ff2142aa5ea9e12086145830c506d3a65a4cea96071b0410c2ec286cde2e086ffc33b563305694da2093df5f26a80d728fd2b21c0a61834897de652d6801398802d7322c350cf4bf05e65f3f757bb024cfe05254acaf25972b28b08840de367f88ff88c635c269c3bbf48b88bd8d5f4ef3842f6db4c02d8662cb973f64030bc403800232a49b6f14b0b195dd3a1d248eb7254a6e9e82e340d28a5987c5426d45e0e73a74951b99058ba7fcb35b89bffa33ece5b05fcef614e1d4231f13e86318286cde08be066fc734df77f5545da6e6b89a5f7fecd243554ff2c87834b0c9a90713a9da862b2842cee48bbd41320c249c9c7c2b3d70b032fe0b64b8d0a41e3285af1c6b34184944e210320530fbba14226ba5df1b2b9c484d1de371ccb696b86cb53252b41b2d041cdd19c6faf5479d2f9ead14be511c961129462a9d767f5ba4efdae0fd3d4687c6672357aee62e0d4d9f8dd42b9799b4797cb6febe7b42edc76303ff33b3b1b995a9d33b3dd15c05565f588f77095a4698df372c49a789b648eb954caedc9b73b5fcdeb2091e9178f25978e085cf7c17b3b1ba206268cdcafb7e80e682c93a33791968e910554b14fcbdfa077b8cf314b2e85df77d983cb4faaca7a414ac8eaf4a5a5355f63a58aa4f964c70247970774f07eb3269a32990063b1aa64c30bd56c894826d28205b8f6a35368c0c467ce5668217b72db21d023c54509ea2d0b01a0271018faf23bdca56d1e28e7aa36429f6b87bd44263a253f2bf7378cb53e041bc1b8629d8b989e6e664595202e44492bed038a860dbeacd9e33fea847ca69209e80e67e416f1d6f0ca26a4236c751e41e0a4590c0ca49bc8612298441a172dd059e856b41f33725c86f7f1081494408a1cfdad701b52384d2839cd5e8be13f8bf83641c63a190e7a1d88754d949585c1ddfec3591bf2c80a6318860be09c574789938abc323233adaad25009cd1d921ccb656ca67afdfac111b614eab041434a9a6755ab1977b74487a9c16c9a3a547ca6bcbe50fd70677cc65ef0222681917ff1c2fa27830c8e497560aea2d097a6ad60254806c78bff12b8f35733275b6ebd8429ec6db722bbd15757539da94d2b7ee0778e16a3c705db7863d3ea829457a6d8c5626f246b9e4180cf4561b44854204dd132907ecaa72339fab6c7af99a611a5840eff153fb7f79ae3de5248334ddc6c08ccd8d5879102f0c9de54f43c0824100666de8a3bf09613a23d112a4edef6f1ad5ed56c00a9987da6539989c32710f451460fd29f2bc284ab541975ce3a77dd37551ed2a120c58735c0e5e555382f78dac38fa028719809064dba65fbcc24a1417a8ff4ef8b03b0f85dd51589495b6ff3ac016acb21d54921e4a5bcfc0a4f3a0389b4613636a04ca40e4cab7415fc1ba7cafdc4f6b7640571a70e2bc2608937fa866aee1f129567e0aaffee3f045d44ed9a39d214b7d914f21319146682292a44dbd2c469ec71ede61a399d7c1149598fc328cfa98462f89e1cb87441f480b9a7e732b5d22a02c7bc8d6aadcf62f0d922e68ad07d2fabd9caf384f0347f5c96ba928ed2c0b70428e62a39e153dd6f4348c6acf8d97c4522957c60326745509631d53a1374cd943c82891e4b051930af08a0a698563b6070d52ac8e7e5000e88c20a953f99a16c7c42910e0e63c36e1e2977413571a5f955c2b87936b7f6bb6f9f74b1ce1376358f0bd72ce1e1166876218ffc069e87974625e8b7b7987acc35530e23ecbdf31aed7a060393a252f5defd705bd90bc746c75667b9d9db50176b6759125e812d2cb6cfa6a290d8f0f80ce2371068ea293184974c288ef02922c079233ab28b79999475693848dde1637a9fbffa8fb59b61a89cdc1fcb426ebe993e7611c332f400edef669f06843874f8803cde06cb2f528581233946118b2f18fc9d5a89795d67777ec84d8a9a25b8c1cddc0dad9c28f343b6b26f0b424bc3f65e4b36b3d7d9fea93faeb1f42a2ec7d60f04069f56890230dbe945ca84acc19a80838e85cce0f53c550dd2da1021221bc9f7d5567e430d874f5cf902ee52cef1c55d971a4263024d3c937b88ccc2e82f47006c9c1700752a4a8517ca239cba60480d52b9281332b02d328d5d819ce55b69e04c01c59f3f1630a0ae857adae103f6284372d4f48dc5622ff97498c8308591d27f13c77e488ea463352a71db923535e7c7e4d4016ecb1751dc4326623f2a9292dce5e95801a1ccea0dd0a39ba8b40dea21a3ec9b167a322032fae66cd6409ba38699851e673651602ddd2750ad03c569e2d071f41274f27718485ca1bffc9669eeb0cecf466c169c22ab9c41275a9e7c55f51390e672aa3c843ceaddaa08b69a1b15d4481c7f171e2e8cfb3baa45c0b9b2c1862319262641122936986bb1af39d3ae5558f6b96f8f529f5728e49ff4a9ef8cd9675233a0b1b71202f610f65a659e3611f24f8875c751ddfe9de791933e4aa4770a9d9c39a3bc3ce353478067391d1064e9643b4c1e02f9503e9b724ad5da251f11ba207596f219c2b8d47630596e66a5f8052407d70808c1b8a0e14a539548a86b472d4abe1f588744e5f8ea0dde662e0bf27521d7934ea0e601b448026f439b507eb9e5757f6635eb28239cd967777909ba848d2916ffc30045e9aec0974137a8d753f2a73cc7f7cbdd4473e455b2cd75d1583e52af6ae524de1ec7523f5227fd13b3f533e0e22b1f3803928da4fee26aabc399737100992b26ed49d4b8ece939f2a4924a2f80a9af507859a76e0109160329488d108360b05ee20a32ae781ed028eee0111efd7910304ba524bb3b7b53af78fac7f6cbdb3386e58aaec871eb539ca2c04a9b6535d91285212d6e676296b1448fa0dd5dc7343490c327910be14e2459a8bcd416eef1746cd1de69819e8be109c35c41d154c114a170197f987a490e2b7ce433f0e06616f49dc42951d58b81c3016f65248633407104d452bb83d5b36704b2652b83e82776c4f8e0ea521d62860a0fab30b7a33a7c0ca63d4b2286d7295093fe849efe228f5aed5eed0bc69e4d91ba455b73f68a550e3f0b1d820f78c07fc5315b9849075081cf18910b3d434645e209c25846946ff3bd06037084863232b891b3d0788a9685c3d79bb4209aef83ef33300de447f3b7926d8ae7e7208082325344ffd1bcc264e2b046d3188943ad882c924fd9436df563eea10b19f6edbec4c170cd30ab1a87f7514705f1cb31192be494ee00605e52aaf27ffd62743446a45aa10fc82eb551db98cfa01aa0f79d0e096d1a43e1b99369280e8c1b2b91c2dbed1f590fd6ab9a52d62ff41e1d8e12de2b44065a05f1d001e7a61baf5aaeecac5b812da03442eab885c0b2d61ef458a3a722ce9aeb18e8049bf5070b03b9562331f59842127a191d9ae0b0d72e729ec97956065b8bbde18e1b10762efd0ebb999c84040110104f5126767b936ba2f931e5f538f7f4c40d1a1a997e91d999bf8a7c29bd498ee99ce8073b1ce61b83541f60199be4cf270b7fe4968618af6534da7fd9af4c769491c9bd852d181167a770cce385fa5946d5aa9ff836f88e6089d11ba4c02a681cc96106d127b28f8915e461430111ef956633fa8c923e2ff75176a5f147a10c02c2c514839c3f64c9cf1ca3e09f90ab8847521e4022997bbff9696fd295d0e43a330729102cec0b2901b8f72d09f26c94abf81eecf7130a6f8cad9810df368965728f2aa4252109f71c4b3d7438317380e66c380038ec96073ecc001f12f0db51e6f51e9fd8c6a011a95e340985d0831b2b712fd442513fe260031852e021dee139bbc96ff09e6470c13144d856db04051c6f4e3b43e45fde178f36942e654b0ff61b08067d76c7052b2e0fda7f7eaf33995bf78f49efb2156aebef0d39bef399534bbd1e8dc50478dbbe41538450c1a17096ea27c4e30a51b36d03f151279182481463225ef9e09e5e592b5f64fab1b800c07fd18c3227b869554ba6408e2b30446cabbe68adae04c6ab24143a7f4464f85e379c5904911151959ad77e70efc7d2a6fa271140add135304c70c06d064593cc75c3d59e68061c444a2a98e08a0f399b8535e4625eec860ec0243ca0b16aa0f61c8034fe9f0137e2237167927f1eb015318f072e43b0ab9053da8d883aa89323295113744b8eec1ce10424979113db101834ea445602ad6b13a943572b6aabc70fe5dd226c32ba17cc3e38965420aa63f352139ac4a322d52209fadd613bcb446ff034b6c35aa16b0ff626a963d26433e6930eee7bd70e4022cb438429a769245513f364fecd145f024261848524ec5fccb79c6238eecb6a9fb4552d32b54c470bfa8ae4aeb55dfd52bae1555fa57858a3332da6d137827111261b3763cb034e8b7f69a8e95f3d6122cc8953ca81e80b79c45e3c09415973ffeec90cb9ad1861e907403aa64a3074d3c3acce9128dc240363a2361dc3cdb78459d603ccdad3bdda5960e42aa125b560b53a9a2059b67a38c2b61df4ef4d9d47f7410ce10975132da7b7de4f5e742e1822105333c4d189c5291a894a91b0d54909d6438b067639f34802cc1da490737ce0feda02762b3e6341b91451301a1a9bb0d44f2d2a487337e53f3bcc24a6ea1a48432c861c053c247466930472343cbc4bc5691c03e6cb31d29ed8b72938297b20275dde46ac1404f88d20f6dfa2858abc727c294e918cb51a726e39c83b7ca222d6107a4fd4ec6c96b84887d85d2bfe1d64984c8850aa141c823ccf25ca210e1d2a644432a802c9a8cd52071633293369a2640ff07c0725622113d43b518bcf0b4851fcac1b0b4c28a68e005e0dd71dd080cdc81d15faf2a118b76b4f2e67489a16d33b9558d90fcd4542bdb106dd63e16d18646618d461917358c1306989a0c16dfbd408e6dbe4e5d3e2bbad24eff7547911a8f0831350176ebb37f115f1952ebfc31e5a0c23c3f43b7b50a24908f1869821d477bcf7629dcc9853913ef1430367bb3e435c43d5ab0fa56b0a5e2dfec33b4c9ca6ad74eaf7438ae14fc6edeec4b980eb51c32195cf9fe5bc98d938e9e12becfe21660abed53bdd783b001f5fdb576d61f600119952fda664bf4d4a5a2cdafb846d88d4e4b63a52b7bb630d0cc33cf62a98368b8d7ac263d1907b580fca861c090450aa96df48c0344591bd2013bfafbe007b929320414199b2d112813ed31d6f07454014951eedad8d35a39c6136ec50c38242ba3f08c0fd120b1e3bf32fc4568bb1cd561f22cfff5574fb61cbf8e0d90cf622ba6b9f1460c2157b195008b786ac75ffb04a6f2aaac20a10757702582f601f0ae5b9096fffec03f3a7924ebc716ffc8efdf8c8d9bc7d14c6b58b6159fbbfec04f1f79a07f6552e2378222066d439f1f9e3169bc6e9a54310c4067154d9a58178d7d5b23b6f7c7f1b05bb158f8cb1fe370297f42bfed796bfd25e141591c802d097de5c4cbfc9230b5220e9aa024344b7dd6a23872c2840b9ef07e1298c62acc6f5aef5fda66419c7cdada8076ff41c5ddcbf1fff5fed1451f5c00548f0e4288ed91cf45f70b2a1a4c7d1b0c9c550840a7486e22af8946c3cd797206810ccb90177b5853e2d0f8a90df9d1f3e23726a0a0d878fa2218d650bf6b1c250278f392a8419f505e95e1d53d3d041cd85c64f6184c42bc9311363aedc8a884c05c624894330808de0d8a2d08c1ca6c792338c311f24042ec129436cbe21b57ec440a4ba20d57a876f6e15a22f9064195d7ee98b532c35dc2caa1d062a01ab2cbda2e5fd52f191cc960d589c6cdbf4b0f41327e894a1631234a12c0e5d1bd7b578b14a0d49f38b387180aa23276fb6daad1575cd3ca1020c636d453882f49c735f69ed33d1515dcf514006540d9d04c54a01683a217c0564ab6db81729c2c70cc52524bb75182cba3cc9e051722daabc30264c35ef4e3a6ac7716106ee444da9b223ad0aad89ba3a155816bcfa1cd999ec57568fd07a89916eb55ccaf2088daba87705f6896de956ce269ca08b25c4b4831d777a6519e8c8e5849f2d26ad2fef81e4004be123e0829f0d8411ab285e64566635f08c24682e7e9ff9723cbc86a4b054c93b5de31756fe31d3f73685049706ffefa0284dff4b857949dae7cebbe6e7cf6fdfba13e8083c85b3225e2ff8e18188214fef8a08406bac347d49c08a16efc963b8c93230fc0d81ba73aaa1f62d3e08c01b831153fac8b135cfdbf71704e7340fb680ab06b780f83b1b722572df74c1901080a258ba663b28ca4914d27b3388bb19e4ef219b1695b7bbb529aca8917bad9da0c143486d6236d99f5feeedfa99b1ab423517cd0b9a3dda202424d402d1d854d40610d73d244235a2fca155a0054939f7a5a313f943f2cad4a651f94418e36d8f5fa4e2d4c18bc286a28d2277223065e5caa985262c23b701cae8a027447dd12a4c1e04a699703ebd3f63a7058b53d514c6489cea82d6a6dfdf7e86475c4080195ada901664998fc140e37c9d3179699747ccf4e3d17e8e3a9f0708756805167c779efbb067b59b5e8fd791fa2d59f87af7d47c45ee2592c7554069c1aa966b9959856667b280f3ddb1ea2a81ecacb4e4107755bcec89fedf97c9fab414ef81ebea4c9e29b21eb0e4e69e15b2a632f8b0802239daf72d65672e8b44a13d015cdc00c60d525e0b636388056c03b30bd0726072e40311d0980d3229b19a400e9c2efdabf81820dbdc7f03ba3283845ffe1e4c40ff0951f118da7646728e49746bd90c300c7e995a67cf771f750440516ee4757b5547114c2477694be7ef75db038b5ce43c485e21c781caca502fde24ed917ca5051d32345b25cf8feb3ca338a86132d63e8740089df1a0650ae39962f4d3dedec1e30c344ef879be899464bea0e01e81f7c4a91ce04e86a7c43ed02a69e36b04d82de88288a4ea53deeec207762376eb2e66cba05cf1696c28848dc511b100354ba018f8bc6d8dd388c0d99bea2718e240c9069afa75821d8984e9a90b5bd845321f9b058a132f388beef94ebadfa58d4586204e37e12a158176563d7522ad8648690c4c85dc2984df09c66ba068d40cc41b28e3036c53c3416f19df65eaf0fc05b1963ae352db3c2a1f5e6c127c22b52d48aa5b369d02c3c267599d08ed1739455c6f36c4916062811b85828c5a8003a2f51b1354c5616d15c52ad31813f0504cae0ad0d6410b6368955dfa018463e21423723b3a4bb352da4ba042be327747c839889e13956fbd7e2a78fd4954755a29df9dadedc80313312a18fa7d171f631422c95f8a8a273695521cd622c155b26143611c288f1cc6d465fbd7042b63bdbe2a05dc6c16758ad2a82b710f96026eeebc82b9cd11a43fa1a3ccc0e0c87f467438832f84f1f632b774c7fb8fa346e181d975782380fa993dfcdf5543facb75d1dcc5b0d27933cbc8ad68bf80c1a885b00fb0964fc15f2feaa188c22b1b969eecb5482fd7a45c4b1ca3646a78c05e5f80e6998d793f2447e16a7627a29f90cd6359353a46f31cbc5d5c71ad462564da26ea4c315d3ca0aabe1b6b4f50fa988d0c70856c859bdec86ff5b559634cac36485662816e29f7ed965c65b6f75121d1c71ecc484e40480a98e245f8768bf3434cd30e48b3b84b4f7d3a71b19b88346c8ef61f9e44fb22c1033e3a0afb806bc003c7466e8e8af355b1a0417a401464c0f9abbec312b21f7e816351a54305c0be79d80892ea0cb67ebbdb6f7d592e7fc7056c6b83dc12c70feb66e1550b5bbca9701248793f7293c8056b95131a25f4329f38ba29b80db8cb58cfc19e90dea46991ba54b18b276ec9eedc295362be61c42ecfcc0355615a757e7b48cee2bbe13d41d9cce575bd20cb98a2db0f412544bfa311e78647a3e3ea68c05d1f24d0c40c9bf2083b36f4bbcac44e60f1a27d54e0e156d86b6367329e6e7db1854ed16100e4f85a1e103f094e63d6e30336b562576832bf30b1eef17d2add3353e32f8136bee0dbbbf1e381cbbc4146843400650da942cff4e93b8884cf361c9ebdc79c1d4c9dc0c0aaad61ec0dacf97069402c85f56c1369e5bb35bda74f0880d8f450c6d9fca2f811228afc5173e26b2d9aef84362253b0f15cebbbdf3ba2fc821f313e396564df9aac349773e72c7238ea3df9368033fd8bae9bb0d444505f8bbabf8d82d7eddc75f2f8a33aac073ad251783609072b7e2fb1545d76fd92bf31abe24317939c256795b10baf0dbf03fdf44aa0012f4c30c9a0746f598d846989901e2a4be1e405794a555bbb979f2ce4265e3a5be6e98aa95d75ff133ca98c8f84dfc6ea73ec0203ae19bd5113a80c9a0ce3d34fe940b5568f1ed9bed53832d8541772a454faaa0c27c172f6af976f73918be10c36c2bfd41cbaee0b6fbdb486e52f2ecc564c64e6179cea6939cf86e5a666abfc42ed8bf13ad543ba552dd0a21b77352de45c878be8001a06aa88d516c01f4f23db260a16e7bfe099bde9f36a098cf6abd012caa310726dde05a2b824587ab8555834d1d460b9b064f5fd3ac52b336536e8cf107d58651790d4fe8e63b7280e9bc2a38725cdb8e2bf57d23f9224350d8feaa3ed371921b3790eda626f45f4ef4aacf84c9726091097fecf172ffc385223c0199fe591083304438b4f8714baaaff33e8edb26ec5244f7352498510f351a22c7be0bfe2cf7560791f0c769789fb36589bb3511a4af37b399acd98488e1ec93983fa594b9ebd20c81d47e12302cf42864058e2546b48a83cfd1f013b5e6041ca88db363d488ee9904645c7315f6e5bd2c9cbdd7a51d565bcc1201b6695d715e8a266585008c0c78bc6ec903daba632f76b718eb11f16f56e328bee020a1412922b05a8429d362d05e7e014c76c5206b19d9e4b283cdd021d600ab832b9c44e3edc3e4214d88f4494a1cfe68f18c5f532d2e6d9606c57c2aaa410082f13403678b21657a9c7bcc80fd5eb436e58b2801f3b6df878fef3ead6a374ef48b16a234dc3dbdee3a1a7a38c0a68f57aefab6078057ad5fe09b718a8f442e009b2761f1593e3695d9848f0f1351910d20e3112d4d17e0992f1551db6659167f27f32988d1b151861dbf601885b7ccb49a226e106a6c6e6f11336fc19dad41670751daee2586d51e63a7b3fcb1d67b546f4929ce3e0aa0e52d512d55ecb4623fc3a8bf89acd80375dd15cf69b5e4d2ecaf6ee98c282038cfd1b9696103d11a741cd9d4fe1ddc7f994c6457d6b24978f5364983bce1f9a78357c8fcac5e18581de3f3c9ade1b284cef16d82ed736332f355caa3b002ca74347b12e178bc95b323b062449ee0f1c6112e649ab02a6178b8f612580d0dda771dc320c1167ba21a280534882af21370177885765285acf06bf6ed1f49c242182683c7b962cc8445c438c5ce250f7d631466430e821850fa2f7fcbd3548043f2787927695923e7ae69187b076b912c6ad9afd79ab33461ec4a0375d2d17ae9fe6588c2eb1282007b3431d1125582dbe953894cd675f2b2d52fc399c09048eb348e0af6c3441ea3b7cfaaa0e68160806043f1f154c17b992bab909573940c18cb775f698f655914e7d19ad71f56075a3c2d11407a1d92e6458117d75e9bf3cae4a5002fbb79f9e8c5a4574d5e06f062a7171dbdbe7ace8b06af427ba9cfcb939727bcc0cceb201818d9943e396d817ecd30ffa1d021a3b6213c13a8f0f0470a2b87790280f5b1d096a5460a48c4b98ab4ddddabaf22f9ef54be328135c4cb1e2f9e7931e715265e236ec40b4141f2eab52f0481b5d4cb8b1767bc30f78a50af39bacb6b072fa67bd5e865a017eb1be9433fdc4a5ee2459117075e9bf4cae825c344f27f8757afbd9af3c2c4af0581d5e3a58b97d3bc6cf322c8ab1d5e9e7971d20ba35708eaaf89e94b54017bc5e7554ebca4c3d851cb08d406c7558c54cc009f4b991f148df54c4a16f177b347463e371a59153093c0305cbb607a05c10752754f24e0318db6e97cc8dbbc109756d5aaaa549bc419b2ac2c314b0393fc13f1e871d096e98bfe60f959e88d76cafe8713023f1e648a4f657c0263fe8d48e2a549297b5a3e217bc7784219a4cf2f47588ec3402f327896100076bd4dbee5da8f4e340e5892559fd120120ce881756556baf7a5263c61822530413f8648200f805f700d4655bf0bf68574c80c8f89b651c687241425e8b41918679c4429872f9a469774c2c8e7c5c2d68b1fe41a94a7acbe39985baaa8ee8ce1bf08512d3e0acc992243887dd6a3c8497800046a24830ad0556d58691043444aa28e8ff07f75891b140bb1be840500f41170d99cdfba9165f145b084ca77e993b10c658bf2b8edcf1e134528f66a39c05c9f09f623cf78d5d094f4cc52bb971fc7d8ef3b1ad033867dedb8828c819b4884f98aaaa7841311566fdf861d388336e9989db874df2a700347375b40a1815f8f9f7509749cbceea3e20ac29ec428fc93741bc18c50a94dc03f58e50cc92a729d11a0ac301bb56b8d1fa5ad3f0b588826236c60e0bb4c4c7d39a000cc260eacebe74f64098cee8b1a27db99cb63e3eb95b763aa8557cb9bb3b14dc7770df649fce81413465479eed7609ee7aefb5a62e4c9ce9927e2cbf3d3361ffa608e807e85004528c3b01782ed2959760af9e403f03e334e94b11fb4aa490437ff4d858df6b91e4a18d7cd9b3c80104b80879a888e526fb2d62ead77206a3599f30036b691a2379dcaa526a47fb628431467fff24dfe8a0ec39f695d38b90a5f1bb89c76488f22b37aacf5c6c591abd03bb92d7c9e2052973b48f6eccc3594c1cf6cc1170f0869538c43f6a15d6983c613512c5f75e8bb3e300cf48a9cd8e3075a3b6830e017e43645b35c59e620ee0a74cb26df8529314833e0dc7125df8dbb093d4ea2e6b1ba2abbe1327fd95d1471a2e18ade06fc4616f84c615e8ec6509a2457c94c0243d2ae5c278a9ba43d96fb810ed1f43c2dc188189026954a4402423e206fb0c5e2ddbe08b89d7e40348aec69b127a32f459f12bc9dc31c37a77ab463c64ce27e0428b8c76ff3abd96e74f84b90b2baa044c484ea5d10578a8c88608e808c1b81091740e9810c2e8362f461352e76e111ce12c4865a2d4e4ba4f8876427473db86e3022dbc9b8621cf54a252297ff5bcac4852f0b702e94b83a580ca3bb85132d3c6f56c54bee603fc8c97282716644b76a58b0f0602799a2538041926f95fa8cf82fd2ef923446402802684deecefbf9d8546d7fad544bfeabaeefe3ee000cf5fcdba7a3c3c0d2fe4f3406317da10b30a3580fe9c1e0097b12a588e536ed590380051ccd31fa8aa8b42507914d78ee5812d0ae8cea77c19694d790bddb445cd10af1567ef714ec85a2446047a3d0af4b94726c734ddd011a6370149bccfe6f17a4805052f579e8838ca19f14064ad092666916f73100158d308c268a24c3284a301286dc4f993431c2d124a3ed9fc74e0abe386a08a2643236ab1798cd9b39bb8c629d11d9a1ec31224e85cb7c6ce2367e142bf81837d03b68414d73ed9c6b2772eaa81122bc61f9517a24776921d00017280a861d39664e066c34f78aa2a8a9d387ba888e4c553a10a24557b7711ec574b3937307fd662afd9dcc45105dcc3c6c607bdd113f663a50482a0a3e8ab484c147cb93ae50a5180ea8fbef1cd9a2981b437b11226c4bab4944583167536ce7fe125034914dcf26ab7c36350c8d9ea4d5f7207bfb0127a935638e60ab20159847c68349a5693b6d08110e0bbe90c03a5a9b9b94760958c134c576abf5efd48b8ecf86fdd730bd8f43880158ce711a9c7a38c9a9d1a52268fea38986e52c66cc6a77e56aa645a4c46a210baf3cf4ebb8d3613676e45100c739ac0ca51721515e69278025858c099319d7cb9466734b6a268f931aedd6ede318f38b75c3cf804c6b8b35bbd98cae3f56e606b9d299ab4b5fc9a5c9ba89afc4bc184e6dffa2e52bf0b4d36e9650dd5069694c875444218413baf2e5af762ea94ae0935f23e454cc579c28b1c549c4bc5a30179a26ad8f948ac01fd7f026399945e4ae8547132e554b7e4dca75cd2b67935836780a3ea8ec2697deee84be8201e3f3c860a0ab9a6f6bde2421ee4ad32c8acdb80dedf15a2b6e187ea64f68d8135a98c36a8c286aacf53faaa825020f068bf4497a0427f4399df573b7e179c7fc973b7517b650de06e33c73d675ec191687db3129727054a29c8cbb9dd9affde15055753656adc41d17db2381b153fc3f250ecee1d75ee417c8aba62eaea089c60bbd3f8c3926048daa9e0e3edfaa5a1cb76121de075d931aabb2194ad97f910e58d6bc4abab66d26e8af7a51b9aa46db17edc22f7aae9a5c40446b645932fb0d1a681d24a2e78cee9804d9f8d6346a47a9c8498f5658110d0d005745d5946c3691dda9a553859413226982076d365a95c5553219e991d386988a41028bca0629c185557f9914e2bd4599144de9dda7a40bc1a2d59c4d17068a0b04b3e62f40aaa57b8e07c7979a5c49195e845d970d5cc06cda048f8130e6e0d23c8c20a6cf1675f6b8731daed96384a187f04eeb3adb2f0c334b1091a9ca2f972fd7ef5fe02493a80df9d534cb4880f17cee3b2b9a89d97384eaeed990f8a61d7865461975375b5ca3df4efa38f006228f9ad1bba5f63340d593d1399ee8f2146f8809a44e9e53e182bcd260e4b0866d077a25636bf3bacdb2ad80af6121b074192276101f72e81a42a9adc7f5d436b29e7f822ac103a15e8626eb42544863377c12ea9fd048482b8986f23d6b782a8ddf44285a1ba41532de81d81e052abaa766c9b53ce6e99d1f42755c07f1662231104f649a932f7898f3e298f7bd37536a8d3102c29b924da149244ab2d0b0f249a131dad721ee26951cc0d80b361e183905641012b696a847bb735a4980ca9370216baebcfaae9aa1707c81ea261a28c48ac1945ff5faf58d1e01d7a8831b0105789b8c71d51aff021dc085ffe86160655005afacfe26429d7cefac4c735b2f5eea460c05220c1bf54d0c090192a1e7298f4f9b040309c3037941d88f02faecb3663c11539388d7c69de4ba6cbee07f9ce0e1213233b830e9e6246ee7369cd9f29e33c4b95e2e1a8cdb9ba6d02cfa6d34e28016d7074077c1d906972d32ba54f34ecd8adc078c7fb165c5258bb186c5a442e374cc0104764b4281b26fdb050a2fca2fa6b6295835f0dff8beb190a7633c821e0a6b98f298b1bcc7d51cf6312578ecb25837111d99cd893f45c3871f0d938427cdce612f7722d6dad1760d8ffeb4cc91a01b590886f0702b2b179dce6ce1a741c94456a127e8cdafce282c0622a59b64c5becf3a7baf210c6ee86c0c6e4637ccbb557587817f0993100a44314498242eb6652bf98b8483376261a174ca44a6d0da8556473fef5aec89af44fb2af26d3ddcd3a6e246f0c48ea28da364f9c4881c2d30b92889c6ca2d6f99ebf3c55cd3689936ecc651b279bcc77cf67b085bbc1522b290380bc72f115805e2fe1a1f32a68ad44c1c3df96d828a3473a99d20939f92b61251e0dadaecee6fc56f48256355768048a2890ee982ce3e0934e011b2146da83be42e0e0beb7830589e3b5ee6c3e3d4fedc00e2040651d9650aed8d40ee509c6802ca764e061ae0e19780318f35b7eda76d21f835e8363e38634c203c13b42c697c5e012406ad34c7093a997b37f1dbdffa199bd35156764a99917dc9c2f4a51884035f17f209341a6d294136492ded658cc7f4d7548fac13d7fb32415479db79930b65283b7f0ab67cad5a44c127855ad402adab10a005030cecea958d54839c6e71ee6fae119eb1051994c6503070b1a1b641c02969f6ae3003d2ff9c4c5ba9e4efdaba0e0098f5de0268ae24c5832e6029c5a2857f5730b51940f652660977f62c9ae9ca337f1ddf7f4b8cd72b0914dae603e5eaee6df23be5ec8b6259cfdfec699d82bf21968e22036c6102ae1e44850a3860b26639ff0000000000000000805ae02082cd3654094e494ad923bd50c6b9ba292529534a49c24c7cf47466e2d3e566dd6829f1e9cc042eb20a8e0a930a687c3af8208261ceed6f2e975a4dd7790cc16497b535b4dd88dc721d0e3e84608cfc96ba93681995936ff0110493082a9fec8fb8fe2de2500382c943b47a8594d792c83f309b88729d21c446dbe7037344fd208230b97f175c1b7cf4c0a046bfc2542ed78e0726093a7e7597eeb85d3874141a7cecc03c974fa4502aab3a3004512a654bd7109d4c3c52061f3930a5ec594f33110f1c986542d03495e4c41879e4d8c27be4c071821b3d3c043730c7b7b009219a52f13f061f363057949ce23a296b601853aae2bc93dedb9406869cf5b3de3d2266d583c1c70ccc96a347cef94f6ea2c6a1562ef89081f9462d2c967a9994e5f11103b35ef8a417350ec1070cf0e305a64f5591a023ddaa7c1cfa850f176c52653d9e12aba0c4a12681b31d3dbc40438c5698f368869d0aedc95338062bcc1b167ea93fdee4f9ab30e508a16b3e7755185363d65452553141a930463ee5e12abb6684890af36b688848928a710a830879ff74245f7937be48416f512e03314c613cf7902164ff5ed2932d85f125aa04b5b85a0d597b71c3cf7801314861f290347e252b56b7ef8249116314e6edd3f6d7364972e5a388210ae3a7b210792686a988110a93d25f3aef641f879ea077a41a59d4b861aa88010ac3ea29b917721ec5521c6a68f909d35338213eade60973fc293d5e92d3b25bd888189d30ddb6a57748f7e16f84436dc7c5e084d93a89104b5df8ac902bd603058e1b88b10983b6386e313b07c5d0846994bb589eb7ec023b7ae8309809835a93623ac48a50611d397a47b2c38479d3b2b45e2921324438d4eab8887109c3f54ac891b37b56d72d613eddeaeef9d47974b10552eb11a312c6f4a0431c6f47108312a67efb52e52526c94e78600fe7c11e63122639edbb5421ee73822386244cf2ce54e7244f2c1f231286536d9bf59f5e74f801312061360f4b5194d9d64809393511c47884294369f99474f7ab0d88e108d32891394982987feb9880188d30e749f954c65975ce0d3446986f2cbf88b4efa93543333116614839c47daeec77426715611a2d9353873c0f6eca44982598680471a13a7588fc023cb6f0828b1c8830e820f4a56ea43d21f11a59d4c8a24616356cd84033c43884f93b5a8a33926dd255928ebed103f90e1d11b04004b47000c9430c4358d925c48a5d965ae9465954af94c61c5ce4d862470f1e3a72e003b2a881811a5a38a00662e11bc4288449055b49fab9dbb3840861f8103297f679c743671026e9611e2dadaba3bb823076aaff4c0a3510667317df4ef7a6a20f08838564af272f42dca7fcc160ea46c8cd0899b1a51f4caacfe257ad57d6df07537a532d2fa9f2a97c30a754bb5036b24646700fa693d16eea4d9bc829a607738a9c27989ee45a57e1501d396ee828c18eb41e28f06279305d923a394524fde4113c182c44f54f37524736bf8371928cdc113116a9467630e76ce7937abefe3c5607b396f60ea7547508daa183c9bc928cf5e59ca434d511630e2665e3917e44ce2172580ea68bf0733a099d389857cd84ac5aa46cb9858331ed227624fd7ffaaf37988358cef515522de5e20683654b5a4907b70d86f49f93fc1096376b6183414711b1922f7a2925b20693585db4a02ca60693b0330be2ef7764490831d2600edb8ba73735dbb295e304b945a32e1ca0f6858fe0c6168dbad8821510030da69c72de855c366c300c629cc13412948f8c24fb3fab19cc2a49241fd1a7e35b57088818653056cc521b13b92c888a0ce66c4252f20cf11c533406b3658997d868fd8fb31e6288c170953e794e108d530983d9e46d7a909e3cf8e4701d6280c1742d3adbeda96453d3178caa9f23e8d28b15abd2218617cc419e2599a442b0b9bb0ba6eae0d9dac9d511811a59c4e082792b9eaa109e924bae481c626cc1b81e5346f35399fa241c6268c1282a82ce927f9205636d95850de929a7bbb0601e887105930c31511752cc9411b182517fcbdf3d4292daa22a9862274af41531150ce165f4f7ce68b9e731a66008c23727880a1ec4ef86185230f76a8b4a518da0d646c12c427cc56d7c28a02cdae824475f9e606c1165af1226dee9d7090625525b3835aa4788d586184d3045d8ea4bfa2f86e7b0d8168d1188c104b351622cc11cbb6997ca3656a288d710430906dd75e5254d64e813e1e891e3044930a8cd4fe6957ab3f9b9e1c9300a31aaf2c617e7c60d2f7818a0070a8c0d1b3d50e046887104d385cba48aed938b6104738454e7bbbd679e3d38d43cc78e1ec510d8c00d00c4288239b753ca6f11644751952c6210c1a8b5f392dd6d84529fefb891a6c5099a027627e81dc810d8c00d07c41882b12fe66fe979c918950a6208c1a45fad93e4b21822df41308c25f50f31cc3d7d0c04531af555dd624ac4ed1f98f4d67ed657acea087d605eb90bda95d2ed7cac07a61c4eeeba477537552d0e62f0c02c6e26ddef93e8f7241c6a8725d881797b4448fca8ebc0a0278c641fb15c4abf1c185f3db7a2df7d77663830b58bc8282d7ff966528318373069d38be8dfc9dcc36716c4b0812167c5cbed0f493bec3530ff7eae1b1de27dcfa58131d2bf099d3e16969e81f1e5ef57d67cd2478a0c4c09d1bec13688110373ca576a259652e2843a631003066679f5dad5f5a062b4f302e308b1eed1540ff1f4165ea42eb2e0182e3089a016d4bb2605bda621c06885b9524572486bd94cc71b5614062b4ca276f3c3be69f190afc2a42b65767c30550951855947d89a5241f9dd4752610cd90b2ee24c67890515e61fd9515697a27ed04e61ea11b376dd39b7d14d61d0b0fd9cb632e7712395c29043caf6af5721857144ae32bd728b998b07608cc26cc1df54d64f558b4914069dbb5f4789142f212914a65a53d232239f8b66ee15d0624161ca215b8bef8853bbcf270c163f54129ee7a672da132639e969bd94a513c64ad6b9e47cee941e278c736395ff92ccb5693d50e03ace0a4002af002f8c4d18f4277d3c75a344148626cc714489aa1445e45c3b0b8c4c184ebda3e5685a445a480930610e3e1ef5c2da7d2e2ee1e8ec7172be99978b2e7af028012a5620b0811b278061095347bb68da2f6b57a6e8e9088c4a98e4863e914447d5e9144a1867829f65f718d1e4641246f7e8dfa73ac7bb182561505dda2dd56f47d16044c268ba39a275c2bc258543ad402279e163473c490e188f40c44cb86a9c8c984b82e10893fe9e742f29fc071114008c461874df97c593534a2bcb1180c108188b38188a30448bb91573ca430afa121ea76024c22826effd26a7ebb98f08a3f7047dda836629593a844989f230e2226b08838d9e10754902a310868f09b22cc439cf21088310a64bfea21d23b470803108e39c5c90954279b6480ac214b5d6d2ba5f0261f6ce254b45573000619c3427c793c83c1df63f183beaa9581b162dc0f083c975bbf6527caf2474187d30a7d2779e9b5b7ad4a70330f860d6b14a6169326de5e35182f6e2068f1c6cc3869102c61e0c39aec85a104238d4accc00861e0c3af3aa245efba49371a8251d5d144b3a2260c346e92760e4c1a8117cd28d6ae9ec0a0e35af3b040c3c984b8fe84a21d77690671757438b04d801c61d1e0f55f77e1f0eb5ed020c3b985aae75d7b7e3028c3a18bb4c281969e27b369b0e86fcc18425358b969152038c39987343e73e4d8aceed09430e86d159b77b2e77b87b5edce8d137925fc38883417e3d5682ca6ae7e6173b7a2c1ccc4929291f84083597ed3200e30de690f1102487939f6ff322c70878b8c158afb5a2ee715eedc7a156a6d7066367e4a4747a5b4b1a296c30be9ba8646245d2b9670b30d66002df88ad9158122f5318542b8772db89e5dd970215b133a3fd375a52f039bbd342de68e65b1c26838c5118d5234571f5f07d551285617e6f76eec5acb60e8579cf3d9a10734161b6a44fdc842047e99f30854b1ee3965208f1d29e3005a1967bfa8308a3974e98f5f3947a39fdab0e274c422525dcfe52470e132bc8d88439f6c37f67aba47e2c5490a10953e83f91245f52a1722901d7801a59d4309e828c4c7c2103139befbdabb5bf27ff12897c4a9c102dafbd2550774d113b1dcb93ba12892459f4f88520b2cf94402f8697eedbae3a89f3670f8f7a9bf24949782ace3272f01d55aa48ac91524508c9c22511725cf53b5752b9bd682eca7674d1a31912869d51cae48de48a91f3a21f501c20e31186bda04628fd9caa2ac911468ff3492aeea811c69f381a722d6b4fb78c30f676f976a893f9a933198b307cfee433f1721daf5784f1f2fe8ad26a4a84a9322be79567366c1c4106220cfa2bfde4892617641cc274f13b964a712a88a56d0b320c61caea9595edaaa07684a3478e4b7b808c4298f42871d94f6adebdb77c90410883eafa2cbab478e49c17b3838c41984a9f5e93d82976849021086388ee9895678212e325a04616351050238b03ec4046208c9df6f3274f7a42ea1d10660bf5345f41f207d3785ea80c71f5a9f27e30e8d2fd20b7ab94907d1fcc611bfa733bca07b3798e73b5bfb3773a7b309f485eaa5a173d1847a8e84b9244c895cd83e944d2ea50f1b73e8778304b5a713b693a12fcbb8339e5a810c394acb7dcec60109f62664b87aecb791d4cde5bf1bb3fc9a8b8d2c1dc267c5c4f821089dab0c1021973308a70f11393dd891502c89083497d5e9a0b21a5d9ec71306593b27ff25386a7281c8ca62eebdadaa5abe46f308b28ef6f112927c8d573ecd0227bc8708341bf77e89ce29a04bb0da6b3911ff27a49c99183c0066ee890c106934e237752e4dcc9fcb206c34910428c3e4ff9cf83434d0da6542a5975eacefde55c461a8ca2bf629a89d160ae7caa3dd29f0925476730f7a5a869a9f3e568130eb52fbad8d1838727ed0202756630e590152d490a9243a528c8f15c06a35b955825f91ff92d19cc2df6b9a4a4a8a6f3c2a146648cc12c41e4158ffd1143d259e0e0d10ad8f3a2b960800c3130c1f3445c53c12ae5c360be1c3949bf46d2ed3d184c36da1bd6dd6ed1c50d3509c8f8c2712e22575d48da35834086174c3fa216ee91b43ba97ae4b8512220a30b4b8a1564b249b71017ca1a9193255dd56dc15849df2715c29e5c4870c8d042714f8574114d4d9f05c3c6ab4e554a414e0c0b066115e3c39d8ed86b5fc1d82157be9d88658a670553599d4650593c6ec9ab60aed73e8f7a4aa65eaea860ceebfb140c7b6a56645ce44b139182b12d8c0a3251ddd28551308950124d65bf3ef7950990010553b5bc9e2ec9b177949e601a93a97195a2552aee045310d2a2eba8785d13cc393fd4f928755a62aae3045d9005c860822984a8f8593ce87709598279448589dd72418b694a3048d2a17256ca26c124b4847fdb6df6788b04536849f1b255b8b0321ec16025b5548ea22e5cc74986118ca26de4c5a75abfd8777471c375e4d842478e94510473cde5e7beb020026410c1285927ce4891233d8f56011943305d8f1a253caa38d4b8f01e39180232846052b247cc67d605b9054046108c975ecdd7cf73c9bb38200432806090af2351aef23f30fa8dca362ff314268a64f8c01494e5302a8817f5e8f5c01872cfacef523bbac83b7264f0c03c72aa1d4f7ba4337f072693643a85ec900eccd6973fa99f545e2bc98121a7389e7c847060c8e6759542957c49eb0d0cee71c2c8f8549ee26203934e21f58a6a76f69cd4c09c3a24b1e05e6769cc0bc8a0c137427bbe6bc9bd2f0eb5828347e3c818c898c10c64c840460c8ca03baac8564717396cc880813969d719f5db0bf1de1718c35d941a093a2f90e1828f5618748f1c95a53bacc4cc0aa48ceccc4921c5a1050f1fab3009efb3104e0921bf6fe1431588dd16fdf954362acfb1430b367ca4c268a9dc2cf72f8a52692b45f84085d15f43b8dfec79afa7ec071fa7302571b19c2a3385d94e99e7b471f928c5d5f263134ecda4308a34f5a9b9fd1a261d853177e4dba8f56edbf8218a748efa47352d59be8642ab90747ad15a13165070b9fbf127278bcba94f989dcdbac683e50a9fadb127cce65154259f347a6ee2502b03f8e88459cee6aa73d529d3951326754979d9295cdec9d9001f9b307f8a154fb84c3e3461ae50418f962fcf0f392d3e32619058e5e915422f4926f081098350a245ec558a26455b8257077c5cc23c6bd1543be8f68f6cf9b08429efc58c794e5397a7ea47250c62d34ca29c05edef97067c50c2e821a895560a49117e347c4cc29ccd74a77afacf0912fb9084a94bb79b74e468408d2c6ad4c8a2c617de805d37277c44c210cb7e3f88644992c8cef00109a3640b2a74ca5e86e1e3116651a9f2ed22e8d241a95df87084415dc8fa13162e65d31b61aeebb6eb12a7792d62844972450f19ef2c67d922cc3ba7af737a8f0e512bc2741a6662325b612a7c858f4418fd634c69a66dc71e1161bc4e767929f8cb08ed10e60bd5d9cba6a64f04b7e81dc6064143f45a6af4a4cb1b22a8818f42182c5f6951192aa6224a88dc3434a29ed2296e8a43ad043c6e2057e1631046f5135a7218cf49545b086ce006013e0461502a9869959055c72f5c788f05142021bfc0165b341715b06103a9f0110873b2ad24feb95d844500c1798714dff172169e638716850f1f7f30f9289d75d783fc521387da7ef8c11cc7fe4dee33a2c71087da08dc79e4471f8ce77e2ff1438e5f0e3ba0dc2ae0830f8628d122ad890b1f7b309d47bafff1ac1e0c39db5b576f3fa8892d163ef2e0e7483dd16329f3f504bd63f160daf43ea5de65657e5ae1e30e085167397729c5ad8c60d25454a9bd0ee2143eea604a07a3f79ed82c9917324e366cd89883e9c3a4bc973ad5234ebed8a145042890b6c881230b1b49f8900371748a8f35ab3f53c5814df13737e1c08d5b4ed9be376c5a5dd4858d99187a3720da4776d9882db30d054db50ba3573ff5c60674d9566dbde70ae61aba6c9752b4bae814ae1a76bfb87c233b8c270da6bfbb7d67bfce514343a2bee3f14c8814c22f5291f3a2b9c08f331857544afaefde7192f002663025d38bd1fddbbfeb2983e9f53c4fcaf6116dc43bbcc70278f04106f38a4a3217b4a8205e31e1630ce652e9b3e74b73e9622406c3c9ff7995f0c1530585c16cda492f720e18cc219f7fb43026348485c717de802f98d3a45b12d2e64db7f782f1cd3736275e085b62171052ff62086d8f767be13bbcc8a246161538415320af2e051f5c30e42b4f4996daf9d4df1c7c6cc1a0d56a7b94bdebfb480b06114f4d08bb390b5ac8616ed9dadaab622f488b20ff72c84ae1030b461d5bdb499eec7412af6058f3caf27ce2d4bc680583faaca24d5f84921bab60b693f03bd7312a98ef2428a16d4176f23d059336ff5cd92477c55a523058dfa9b78d3099de47c11c72ccb6d3895ef001058359ca6231774f442e0938a0c6c7138c958469f5c88d4357f0e104439af861225654f0d10473d00ce13941f6e434ca7182fce283094617f94fb6af11def213b80e371cc2c712cc1e2b690b61db02e14309a69044c9f893f10a55151f7c24c1dc5539f6372498b294b4ac967b418888024f3a721cc1e429c52ad1afb311b23abc878e0e01b91e7c18c1b0bf66e9b4b6894aa122986386ddc7c72a3d7dc74bcee1c14a021a92305cdcf7655355c95da41b091a90b874ca5e95c338d4104081b332d078442a82a58f1d361a8186230c32f12dcbd2f7b33c1a8d306d7f9ece0f9dbb9fc6a16644a0c1088348a22e3d75e8afb82fc230223a7b494c4f12941461f653231bee12c4542811e6ea8f2222a7542dde4184e13da89ccea25edaca8730bedbea9aca22f2d586308739bf5163ba92aa5288ed54e5180d4298530cf1c99428ebc9168d4118562eb69ef75dea938e1caf05175dec40808e1c08604dd01084f97fe4460c179556d25f1cee51022f7a94200206a011084310d7a6cf3c87a5a0a501085330d7fbbc3dbacefb3f1894a8147207d99576763f18ff2ca5ce6df7f95ba6d107e3bfbd4f98df4965691268f0c1f0d7a5f3bd0753f8d3c184c795ecf2ebc1642336eed1dab4a487438db740230f06c92539c71011c243bd800a785182e407f0a204c9135a81061ecca274444ba71942362dd21dcc3976d8d31d7fb2f376308f10e69d26416d45f7041a753058fa8f24750f1dcc6f2e6afb6d3e45b4ccc19462b9e4fe739940430ea610ed3e2dfc648b368a83f9c542c8fe37b32f0d0e66916469c3dd9208617a83d14d6d4eca66eb041a6e3025c996724d34112425b5c17c97e3563eb282bd87c80626e7b64e1d847e0d051123c7ce5e570da6b8173fd48d38dbde10d360caeee7a29208a1c1dce92e8b9acb229ec1bc3161c6d4753398bf4ca5fda0efa3e7530683ce1372ce31b4c73515443298a4de4b88da93839824d3188321697d0921a9490c265133553988250c77b23e99fb49642dd00083290769e3499c75051a5f30e56e958e96949ad3712f9824a4d331c23f9467b50b9cbb8b98985ca9e40a090d2e18c4c8251d4dfd446f8254a0b105b3f558a85b6f51af90160c3b792fd69e3a0be61492b24f9fc28dca5a7651a08105e3a551e15373b5408fde0201366ce8f01e3d7a8bb71fd0b8826177525291fffbebf45630f7870719b7a3bb925f05937e55dc8b4e6922f854b0dc838e97a5fd14ccd9fd21eaf5d2b72849c114576e5225ffca7b52144c29e46c0f1392ce7813148ca63627f566f2644b7a823174baec6891134c4185e491d72c057d76134cb975a7cfd4d47f88996010223afebb88d331ee12cc5f7deb49b3a20453c7af9c578224097dd061a6ac4a890483d8c91b3124e8b4a03c82d146be46e89817ec934630fb4e32719d54048390587542a9b67b0e11ccaf97a7a3840aa51f82495f562b2569cb8488423025d5a267ea07c15c29c9ec9b1a08a63cb9e3454b4a4fb7fb8141697d7c93a126669d0f8cf62aaaad720f0c172baf98ca7255d7786032a1f9f162a990fc543b30efa5daca9d5babd2a203433691f04977d4eaef7260faac1d714f6fd775690b68e0c01462f29561a14b8c7f0353c7959830c1533d4575010d1b1827e86bc9c165b42ea9062691e3738cca9b9011d3c09c52d372483a7c9093cec028a7e276b608399e90d0908149dd87f3b577c949e53da0110343f449ba6e2107e195631a3030956b884a4a2ba5b0660f1a2f30e88a8550232e28112637767471e304bd8301345c601e6d5b224e54eaaf120ed4c3df8c5839c08c5698730a5e73e954e4d2392b4c3129538448f0307fd262c62a0cc922959f9d7c56f8bae87103078f1278911898a10af388b58aebdfa7aa27db8e0ecc4885f1b25c72edcc0c5418fc2c567b9ae914064b1ee6b4c75ac8222e6698c26c596cd4b4d95e0a4308a72b2d377c846ee8c811023f6735b4484005b868dfd1838742600337483083146663c62850db79940cf78ea1a328ea30ded5fe21c9271199118a9c018a6aee7ed39cf109b3a950f23f69f72c08333cb167fbf4b192ea74b1c328cce8c40c4e98d3e585052d972f219db109739e66292b1dd78421074f2622ab3dd984333261bc14bc52d49b8bded112d0d1458e14e4e022470f2f2290766306264c123bc6e914ae27cba765987109d3d85ecc7a5a67c878675ff8f1608625cc2ffac4fe544a1a6654c2a4c7839af0cb79c20751c2a4ee35ffcf2e6911ed9961c624cc497685c76f8db0fd6f6186248cfa9d7208ad22845d50cd888429bbdb8f5ee913f9d70287199030681366ebd1bb4798437ea5fab10c6086230ceadd92b05c923c4539a31126abdaae95772d99274698e48b4839574b499f2c6a94046a6451a32250238b1a05811a59d4a807d4c8a24639a04616356a0d3316614a3951fb238c48e64138d41461c8a9aedb5bb2e5ad236624c2d46579c4af65e77769c7891988404c0ac29b710843bcec13ee6dd9b96308739f48fa3cb7606246214c9ffcc4e5edbc6b6d94984108737b8a306676394e904b8002939831089355752c91cae57e6d4118e737840e11dd21eb06c22cb77ec9e60584a9e3e5c892b2272556fd8341fb49b9a423cdc22f7e3004c915fdecba5348227d309fa8f1b872963ee97c2874998a593ab9076dd74a4fbe93512910b83accd083412439ea274bdab9370fc6ef4b9aa223860783e594950f56ea8c3b184c8f09112f3746d045170af8a2470ed4c5167e013b98439c0ed7f73eda2b6287197530fc9c48e1dd92ba41cca083494df474a5252819676141cc9883295c332ec58d4932f4251033e460969f181fb225bbec901b27dde0d16547991107e39f144f5622b9c5169d050270f4c8810139cc8083e98307a12aa5bbc8a5df60502a29292337a47e8fa40833dc60c8a1dec6236f08214466b4c1a02bab794a4a5d499c3885196c30a5dbd2f9cd2eca85bb06b3597aa474aaf56d5229cc5083495aae9dda3b6172ef341892ece8c599e5c448a2c1e87f91dad44e253dda8c3398929e0a41e8331de1c00c33982c7f876c8de9182a550653aa107cc24c0a2a9d14871aeb98410653cea6c4732d33c660b6f65a33af60de956e31430ce694e485af533944ddc77bece882475e0d2d12405a30230c260fc9ac3a0495a3b60706e3a4fc74671b79667433be604a496f569be105d3e4b83d595444c9f9ef82e9524e3a56ab1f6d3e5098c105837b65bdd788284a9f5b309c1239c7e649be3a9d166664c1902ecc7f5ec8f5974d988105738a47d11f36df199611f0e807d8b031021ecd052f61c6158c67724be9d3ec17a5b782b1f3a2c6c9b9a81afa2a987290ef1d4d7b2a1864bee6e753d949159a8229798ef1c9f4c78858a5609e20424e697e89822994983591ac837a8440c16c722aa2bc3bbe444f304b8aa13f5a7dc98ee904a379129eae3e96420e9b60cebb16f14b528b3e1d130ca34cbb87eb2472922de128304309660f5274fd74242d7a49826146c7f08e914482c17c52ae798e388430e308661f9d9d33547453cb19c190c292951ef917c1a8a973127bab3a8812118caff2ba9f3b4330fe8576dccd34fbd8118249a49fb56c2525a376100ca646e28b4e1b08e6b475d7cbbad06de11f182e7fd42e11533ae7d60726c9324947bcbea473a507e636a12dd607cfcf1ee181b16c8264c9ade629077760ce33ed60b2caafd781a6fb6437452e1b368a096cd8b01b564c703cbc302307a624aee31e724ef9b24ae0050ecc6aeab48c1851a3f20d4cda53c8f57d22bd6e6e03634fb6f0092aae81e1ac93e87913f9c10c1a987ff497756929a5443f039389ecbca09db166be0c4c566de5f1241e0353d8a710f48c9dc81d06a660a1a6f37e3c5961f402534b0e9e43bd544567860b4c2959f794148ba2d4a715e670f94d820a8f172cca0a831af3bd907672e98cab3025a1a1c3e72861cf355598dd74decefc94694152a197cafe753f316e54183e07afaff414273d8730ba0895b591d35acad010a68a66213eb95f08534a512d95768aafb4096112b2267d4821de01168330a891fd173e47e599920fb01084f16767524ea14ec47c02611c8ba371fea132cd826b032c0061f008f223bc5c89182b167f30a67fe98caf10f6e7112cfc60ca1571d9d53c27cf9e3e982d986e4515990f79c5dcce032cf66012b5ed793f276cb585851e8cae7b395bf2f3602ead152a5808cd49723c9823841525b2ac94652b0758dcc1ac1d2de8041bd3fe931d0c3b227d9467b99160d7c1a422ebd245e8d0c1f0b15a74f73772d93d07730e4a9f72f17055d7c9c1209250f25db3dcb4567130a73f5d9ed3727af01a0e86b72c29fec9c7f818bfc16451e5a299ff7f8e123798cab2ca3d459b4ed5da601242abfb535cb444cc0643cead0fa372b664466b30c5501dad547ec892536a30e4c8312b9a472aa54b8371b32ce413f2794fa768307fb56ca8a4268a5cfe0c46fbf7df4b1f9bc1a03bbd79548b2062c432183cfd468e2792272d8f0ce6770b612a29e9919434998bf4bea5d42506537b88df78d705fb2a0ce6d7bef7a4a2aaefc36030a88a0e3d93922f98e3fd82e71f75895b7bc1a444570a2134cbc4e72e985dcde4c24f485adae482a95f434417b5b1d882f92de57aac4ef657c3420be69f0b9539592e26cd5864c11817417fead39f76d45860c164d7a237679fa5c682c5154cb9295b5726e2d39d5858c138b1b46bf6bdbac9874515cc9595e2febaaac4aa60410573f03ebd6c1d9f4472584cc1a85eb2c2cb7748154f5848c15cd1e34bb21d89f2611105c3f958bfb667fea88b05144ca73b257dd7a39722098b2718ad725c6bcf2d5e1dc7c20906a574c8717d3672870b164d485d55aa4c305d99beb6a41eba935f8231be52bb4af4541f562598e4d554dc9266120ca2ecaf4ccc0409a6b6b80df73862fae4473056a834298fedef85d408a6fe703a4c12a55210b708c64ae2e39ece93114c02164430a79061232badcdc7c8100c1fb952daff10bbfb138221470b313dece5917e10cc1d3a2be5a0d4a47015104c16fb913f665d1e15fc81219a04a54cf5eb03e3a87ed5f88f8bf9aa07a6d8222b847e4bd77de18141b448b4381def7e523b3085124af4b9593a30bf781e51ad1e59ec9203634dd09268c9535b7638309cbc9c32e24e4e4a826e60b8ec4827aa2a1b98ef63b29a09df0db506e6706791437a9006860ba274f4bf494bbacec020353f8524b4e30993c9c01c6cc28575516360ec24944e21a7199d9783814985ec94a2443ba5727e8149f372a5521d2c5c6090629156ab47c897aa15c648e165e3629b6a7fac308409229dd5a79f49afc2e0e6417e9bf0202da80a9375886822fcaac5445361feac0e17e6faddad830ab3cae9e4e1713bc4750a8387f0ed3ba23ff523a630a56c8c654b103ae574298ceb215a369192d69049617e55b3bd54965118279852a3153526465c14c65e4bed5e173fe542611e1b532289cf75f52f280c96aaf2f1ffd35f073f61f4a47de425c67ae9d113a69393d5d1f1634ade3a615eb1ca8a16448de8c909437af132b16ad984c1945a123a7bac0953467e2d4bda4c1865d4c67dd8c5fd14c584a9f5b4a414e34c55c34b98fc55b66267dd1286fca9b78448f982b2b212066d15cd632799ee28258c295faaab65a65e934998e424a5a6f4d8888c93244c32b2e4ca919c7ba49150d2689177970b12e6247164bea89091527c84395e921bcd9e31713ac2a0ee933b96d88f192a8d307e7ef6ff20bf5fc2cc08b3ffce859092f74f8e2dc2a4729478caa4c6fe0929c2f8167223b95f29ad27c29cdef7f3be2d88309c97b8cbe79ff0963c84b924a890bf8488214c16f4d7d2633bc87985b864856aa57d8d10e6a06c2cd8e83c0883c81fd673e54589941384f9654bfce532997b6120cca2ee64a4ebc997bd020873f409f227cf4b9414ff60ce395aa24790ffb12e3f988246ce59e446eb787d305712f94992103167e283713f840a3fbf1cdb720f263d2a7a7a39f5609e9cb5c24b4e69246b7930a74a19a9375a4ba7f0602a3d324705fb0e66919426a684538b90ba6149b8c20e064ff33c8976aa9de48757d4216fadcc180b5791b72031e2e9a415a6345c4107536b69be869ac4d2990b57ccc1a03ce9c6c53e3d1f593998d524e91421dd489e3f0ec6387b3fe1ad1793363898928831611e532ec5fa0693ee96ec5851bd2e88ef0a3798ce423e937095bb2bda608edf3e21fb74a5cf7759b8820d86a0a37fd3654bf9488870c51acc919410cfdab7fc271dae5083313c3b849c538e79bad3605ecb39fff3ac58e7091a4cdbc9824ee92fdce9601cae3883c9bb45478e52a3c0938eb3335c6106e39587f8d7f59e4e71f104dc0dae2883717ffd3e92b8a4333e19cc574a8753dfb193aad3184c5fa16bb74243851289e19e1199d3b59f309873c4cf27b98388a574c060bcb95041da5ecacbf517cc7dc22ad6342f98725d868ef3394b56dc05a3c5af2525aad4dfb65c30861227644794f290b76052cab2ccadc644b7aa055388da932f2e59305e1a75374957b0600c753174c34c6c85af602a319ee6c92bd46c690593bc9f875c0f17f72a18f48c2425a236e29c900a26d511cf45b897a8f4144c2fc99229ad9723c39382c9c2abff68cdac5c8a82e94b2746fcbc581a81823977c5092b0d95b3674f30283deab2a550b74eaa9dc1154e30a70c113454756f89dd04e3de96d223d764925c99604ef5d9e2b9fa9bfe540dae5882b183ceb594c2cb0757bfb84209a6b9f03be99764860a5f910443481f7f61ac37f2ec3c6e78ea4287f115483088525a394d57f2c9e708a6e0d13f3c558e118cda692e849df0fb945204731c35c2258860f3272382b1255ef5a970a777ab1d82e1728891a74250094ec7154230aa59a40a2a5fea0e3a4130d8ed9c8fd0394030a597481344dda378fb0393aedb3e30c991dd3ea5a3cddb035312219dca394bbabcc203732c49e245b5c8b32cd981e96f720efa3d44b15ceac0745abc4e56169145e88a1c18f42ca795cd884e3ae1c094a294fa132998ce9374035312d5309d14bcda3d3630e994fb9c4a486b604837ca73cce8ce17131a983e8e879ceba3b66539034314b55ab3fa64608cd733d5d2978b25c3a17a450c4c3d22e63030d6c491e9964a6c86fa028350513ff8f8978be40a17982e57cd639412513dd20a73ba77e96826bc432959619eb12cb7a2c2df4dfb008d55183d4a50ebb29e127d5685412425ea73e90f56c1d32215a699099a7e37d34085218b4af3f9917476ff294ce6f75ae17259861a99c2682afbe64c3e55de4e298cf2efe92227b344704961c81d6e44c2afa33087eca89654165e4ebc210ab37dd2164a4eee3eeb7028026884c2381e6e2adb7ec869d4a0307fca0f7257d4bcee2a1b008d4fa04fa993305a797de9c8d13d7c07f184697ef227d91d2b849277c294c6fa4f6f44909137270c41e46ddf9a4e631366d51bf9616b4ef77f0cd0d084b9e5c4dc4fe8d0c88479434bbc3e5507252e0d4ce0258c9282d895e861a31ae3502b858625b87e1f2d71f129fdb7021a9530875862ab663da56cc2da1d342841684cc2e4a7420d8bcda864afa60269200e8783e150301086c201e61373130000000c1894c54281604c24ace31e14000358362c46382a1a201e1216140983e35038100805c36130180c080642a13020200c8f8361381f7cf932fef52b4c2644e352c12e1631cd4aa40e9a692cfcbd9f534ebfc3a78b3afb9dba9c1b905c46da4512b39f3b17a5c55bea8821e7f73bd2d2a5884cf3741f5f125c487e4a45f6aa8c1b2fae4230aa9d6d11a9ef1050d82319f5d01c220996de28e1b9a669bf8d1b8cacbcc457821ab0621a1f49c51d1e0e0d354cacbd46435046f3434ff95f4c71bb6bca36295a92a2405482949724e2a267a7b69c08f80915284275483c0e2c2150f04f918d0a2a1dd44aa81052c03207ca6ba87ea80ba85144514a51014545a1ee31411f0124854204c507c546cd52de3407284f28581aea1e40a18930d44fa89550520e05ccfc90faf69eac9e103cf1796af5f4fb747b02f9c4e20985135514b2a7cf276d9f7c9faed01df7fa680a0ce50795dda1800688141061a1b28133c4341d5364eb0d55010514839a026d0fa443412d14a2a338a458428d77d4bdb78f027c857a071506ea2ba87b2b7f03de10d471280ca8a117545ffda72ab61a95bca474548e91dc1ad402a8770aa56399db76a8424941e11728a0eda2a94bc0274c288e46f1700a5a0a08d49451924ae940dd8e28a0bb906a6e86fb132843b905c59f8a0c14202828282051c032dd8f02c674c2ad521410c76c4aab15a5236da3db870dd43d144c382a8ef729be6541a521ca98d405148345f12fb59ea90b3f79838277d4b8d43c1400281250888a0217527d311358d3a1cc7e545f9156d5c477283151400d60af0aea8942d5cb6c4256a19ea0fe42cda0004291481422a630a4c052281d7062a5e72eb55dd42c4a01758a1378f81e6f3f4b116d42c0381e9d690d87579c41d3bacb152018d7b3916e7f2e0f388edc6b7c15d2e360d0f53cbb37705aaaa03ed46657e66d85e59d721a127ea6bb3ec49b94f3b23582d3500dd560344d2ce2abeb5cbe9c9a7a7a212efc3fb29a92d0d73dba09b6879a26b588eb17ab35452fbe3eb362ad3122c11c41a512f033f6ae0dea4b4b990e3f5e3b6df032a3d41cda5b4ce9a98f6cd86ac48fd54b7a228b884ca9e3c235271b040d702681f2938628ad3a53aabd82386d0e4a6d982b93543854aaf94c9e75135469d6f01512c56748bacc3dcb9db40586ac23c036cf14c84280bc8c0a49e810ad46dd6e569c369e81743f475ebc42ec8f135158e8d051cf421ea3e9058d82eaf55258d345c8ef57fd088546ba58558c9431030ff206f9d0aeac2ce88d2065ac2e23ea293be514994a04d38c5867a8af441907778ced4a092566425d9ca980ead442cea91cce2c84ace386fce2a07ae625404ce99ecb515f4269513d923c45f8caa93c44fca685f158083e5b4f222fc9bc226df89e5a38db2d3fe29852ba0654790e600ec47a419c703beeab93b86cd5d4f517aae064c54a82e9c8744bb871f303d50ab1591449037022137f38c6b1c83609a170c4cdca03dc38f31205e27f7fba92e1b81860aec1c11f2e70d634f222b2109211ca52513571911db2008900c8369039630be5ef80c460655f408728c0d2ed00758287f3259f243f7cf98a3fb6aa6ef555cbf149e7b1cc80c0308049e085928f3b406431d38e63043c51e1abeefe67a5405b827594479d7618e4c8bc38358400f8f75dbd9058dd0bb2163c5c035f48ac67f367c36e432f373359fb32079d6c66bb53141e1bf44f166bc103933e34731aa338f23557e3a89f780a2cfa4f1f872812f3c61ba7c62b28b26ff86c04b70aa805ad4f8a830c742f1936e438484b311e486e8766c0f2c23f90806da710ec476295cc23130a66ed32fe69caf67581102d9f5d2c4555f0f19b2f2dd7fb44d21627d92caddbf13be6ac85360843f4542701836c89c9a4fa719d5b9ad3e0170a9626b04d2613fee01e7b6676fb8ae9362ab45376fffe90dad36f7c5aecf270e1363430ad23163c4bba2af5b46cf17d5f03d3b2c6198e658d31e0313444cc54a4a3fbf4400cbcea55e6ac4cdf1a31cae2634ee740b9c978dacbfabd6d9e027e5141d45761d9cc08ffd390b2d576826e2187e4c695e1cacc074dfe3bea58722cc88c621908bbc6a0a95b94598a9a92f78ec0cab2cd2090a860d733f665b2d49f185a913393c1edc979c67fa4bef2e6e266dbf4f2dcd94dce9c4e94268c76b37579fde0d7cea985ba34d294568d21fa4c74930b6d2128f0674980a5cd21f5931642e834189122e166d8bdada4709742b464020e74a526d3b6fe99342f16fccabda2393f83d449410e4d85278a672c942fb711be489106935ea5ceed27b6a717bff88311a16501fd1cb029614d0a0400775d465261fdc8ab07f04ac85b37aadc42d610caebaa9994d7fbcd23b69c984b0e93889b4ce45fdea34ec9c638e49bf3423e68a9c307265ae6a1d701f9344604d5f49ad162b24d99ea3ba2e9cd543f1a13c4464905064773d24327ad9438d4c52214d6719f14c98d8c44751a60889610c9806ce199aa39d1c7496ab8001d1931f39e7a228f79695eb8d59f645ec2f544e5b17933ac843a8587b397180bbedeccb05e0d537c6d3343b1008ec7d2f99270c67be813033bcc72d07ad63a71064771995929c6a9ca269596d0e62a54c575301963f59a80e881e97c56fff29889b8484d77a13ee7cd2c3646cf9fddcc7e5574878c0b41bb3e88096ca2a8d5e937b9b0788c3149998f8ca8598f555a1b5625e5b8893d5df1be3efa672a63424e6448a2b26caac91589ea15879e18a5d71641665d2a821994f45c7fd66d9868a456447bba556fb596227a286b24c2ac44a86d75924cdb2689b61d5dbb39fc01115f9e7adb79aa7b97e63b7a40653c138f638f742f04781318d1b3280250d103daa3babf830e60ef4233df414c22f3c3ff7bacb5fbaf50f182785fde9bb03fd09c1a17420b5c223e76ef70b3f210ea03e123c00ff081010978fc096fa121e44156c1f4f20e93e70942891510235809f87185c6cb766f0d0fca4bc564bc97fe904860d1070af2262003fe46c34ac9d35fe39d0174c6ee6bf1eeb44a2d801f137611ecadb942fcb46655ddd8eef688b637c97943fdc551d12b6618011ecc76e44dfac0c5a1a99b09235d619f85efcb4781c215c2caaff03a0d2c3fe5f822d1f07db71cf67c6c4dfd0851fc665bd21c8fb04b8ed15cba41b81d8af289e8f9ad7b1b7592f8e3c4a18cda644581fffd6054e8e70ab69f8538765063c8bfdebf9499784abe08e0822b4b265b21ee6b732b344ff3263ac09dffa0b6a5404e436fc511e6098778c1dee79f79d88485e6ac68cd90255d55af85de73e45de10cc9a095097b9a68f6fcb3e379eb7357a717398f8ecc09470c09e5947e8295c53040ca13b526f9a51af86f8b28185c1c4b0130b1529452a65f9b9e17ca15efd33404004aa13a65195d694257843781208721da2ce68f38bbe6c130dfc12f4c1b8c1013cf990b4eab318c443dc8069561a161e2c1918ba00adfe66f75439563b2af5fb9c2dda33562753da62f42818a0a06558884d7471b42a6ca6f3177daf4689ca850bb68bb1394c16d2e1d9375842d20f84915c42d9b5d44aee038287f10672ab90170755eb9ca21cea98ade775cc789db9e99294df3ddd3f35a99b5625141477ebf7920bd3265b7e7fd0c92f03332659f51a5161aa2ced07163a5d17b11ad56ddc2e92c25224c14dbfbae4edc3d13ee14ef6ccbd5768afda9d9f68b74aac4ff64b5d1763cc2520e9622cf13301a56fa9e62b0b44f3463f964158d5033b6d11a5455d8600b71cc2223d5e817bd33021695b7306d416ebd94bb6d8c04afc63a546505a6bb4af5a658304f54f8cbe0c1afb288ef5daba958633351700f0b3f57f52aa23268381abc596299eb87789608a9fb47844a9cd7730904604b2ea32965c617ecc2df5e0cd274028c38662485107acfb283f5641a1b0a84693c46697652169bd5022d7a912121a5ab5e8c0b682d8c0eb1ffdcb31689913dc5962264f3708abe8d42503c095626f052d6d0fbc48831e3d29a51895e1dbb4d477f8c51c6d1687ce6e83d00f807d0ac31159346f91889459c4c4352f8a840ec6dc2026ada80f8a30182b2688863ab81e02ac8d16bb5e4ec6499d16b6d9866cb02f00e76ff0d88d56d75ccdbdb9e1cb726a17f53a3ad19d89ec3c592bfa366c052d30bf1b8b5631a9bd75b608ddc026f26cd10b1792f89677e0ccdb18b8a18940d51c91fdb96e013eff6dd6e9c6a882e28287fa63f81646c941b3ea84405180f44ab7639866ea0bbc020fb09f80d55cb01992882be52b4aacff44a93bb32a8aa8c321bea96642d084e7346e19f83ea85465941a5fdada0c272cf852c61177af5a8bfd6f3a0c04dcdf516465e761a17ef93d4b92a09444042130e5b3cd7a1fe9140242b0abe9b1b1190626e1a5b99ded87759b3be84cd79593098498e533f8e9308ef4bcdf383b589089bb850ba1e721008b62b5794c9bb55ca74f51b4710c5967b38da8b1180dfe4ea451e59511cfd09dfeaadfdc9b49e411ec9f404ad17b1c350bb1db87eb4d516994a2074ddb7031d2b06f1104fa8e468fd45ed1798fc2a1f18b94799c0a527ef7a83eab07a1defb959ee7df6a5fb07391704e5a3f42776b7e7729c1dfa400ad08de9461be601cc8aa74a9837e9851c26b462e24926181a62d227a6cb26b0c92955fac29e2268976f2430d03e7a15d7dc41872b2e23a7f70acf51b49236679a4db62b4d60985b790d3f12d2d25f35d2250adad98fe6074757ce42f38ef2d2882ffde7590594803f38f19728cb4b403b380165b28a6fbd32afb5316e03aad2a57efbff9da1b7cbecafa1255015824da5722aa4f65602d3d3c50a693d580e1c2617747488e3b2491504103f3f53854d121973d05cc3c93e25ebbeab8db86c38d8c6ebb403b207721111786a82ebd784cd611ba6e60b13ebbe0b838e792d0879376659185b89de57ab630ce2b9c1f216fb6d3a1bb4199cf70793538d0a7c31b8e260240285011506a93ad82819811499863f513328669b03b571838da2efa5c083838de4f30b7852bf5aa65c4bfc5b65fb46b718bfe85e3f00790d40b8dbe81930024400bc60018157c81de929c0150032803f00ad00ba0180c99da9b7b51d24a5f188a7cd55676fc6a1fb211847bcb45dbf20834c3e75d4661e50ecc31e1dc2fa32858ca859130841008c02d916f30a802168ebb9f446c296dc6688ac0ee20ee4e203dc27624362c223f023602078415c41a8b608d0720b3b614f9d334d88e3473a1312905c912f78d2676374c1924643a8e0643708048cf44fea7b5478180181c3ee5e4d07801504199426966328ae9e0c4c9cb0361ab08ee7fa636da7f895924860a61f797441c9d75056ced52db1815d06f7cb8bb2cfa497d573403866ed2062779c5569e338e432ef97a8615eca6bb01243eb0ab066ce7065bd69b045eab645220384e41bcefa668722756c222dd09642a936341657e45e696e874aae926854c39c6a1b9a681c571e6c0d8f2a079b711950f1107be37a29f4791c2de4c100041a57dc170e0a542072a0511fcdbc3a19cf1ce5a9965495f603ad946e7bac0282743adf6adc871301befd99324902209531dea933e072caeb32f8e164c71fdf44a69979f73c1e752873a3876725edb681a64080389def191b2340985b16dab654c145f629bee846283f3b5b3e65ae9bc67ae24a1a5b235165e4eb4756fe24efc4d2712e5e16ceb5e850d197d16b64b9dcca035c8ecafb9bf2b4a35f40315662ec5271142f55576896451eafd451c52cea40a156defa8600f567b1f6273f2a74c8585d8368857c2667e6a6f7eea92f75577a195ebcda4fcb7f3260e609132d26251d0b695df4e3e053ce64f94fb674fd8161a57cefb9ce20440bf05835581a95f7325c47359b3dccd32a79f70a1804c1f74ade78d898a8cd055e3326b0963c9969d59e6c08f689566b80d309c9e703b33d2f0096dc745be1047142904810a10ce085cab64a9f6b60204d2a0d5823fa2a8883a5f7a08b930f68abab51e412c4efa2651166c4fc8a643f65a21fb08ccb0b3567971922f48b55c18e690681b8100481f504687a65c53c32e476f7c10ec09888d2ed4e8dd3d5dff45700f7f8d8f86bbca857905ca82e5907fb4b40f300e479315d849b384b35eb163c3cdd6ca5fbd57890c78c51c731740f0c9398d11771b7990fe50018068e0efc17d15556f83142e4f518f09f18c230fc2acac32ec01a7936d4e3115a160392e8b68d19fa3e391a2d27250ba7684bf02e62aaafc73c3f73d1386870f4e864cdcbe36ed476b6a9d5c458244186b66e3af6d66921bd809782d00018cde022ed650b13eddc8439aecc4b94907c540b3830496cc581d862f9533230b2f94bf878b7bbd427902f9d8723c47aa2400a39fd156d10bc9e1e4205b0a61bf873da8ca96b0799436154cc28310c5bcaa40ddd9531e9788c20a0095e144dd4f8bcf8bbc8811756ce1958265488ba1061d287f34562555e8293a9507488b1c6a45555348f49f60aa712555cbb385012ef339fd6a1c4314c5d05e377dca8c178017ff828b302bb2289ade20730422a7af11b1dff353c2e29581b6262d74ae6090713685ee325c37c78b04f6f952127d2e16c8444d0112d5f7b7ae5826d262bab6802da6f56141feb1a74a2adb5e83996a7982f063d5bf90bef85b82838fd082b236e3358760ede59abcbb5941a3986f612d126e2f409e3c3feccbb34c8c424810a3130338094366b2cb9d5f60605ff454abd26419a7c4ce6d3478a9eb7b0172543f050e4819a0da86936d7b3d8574af05528ffd793324c9d6dcf491039cc2a75062defc4cb2de00544085d30ab1fc54153d71634ee323d55e4129fa18313c465bc98dac976c8d742b4d158c87eddb411c53df8b2060f1f2af7456308e2d531f3af77d857c143b693f2ae5accc3d740ad4da299c692ff672c1c2846ec840c4bf0012340386fb9905b959eb464a88e1cf3ccc60f5810c6832f9c71894e176f7aa1a4f26c059f40cf786569c1be65be5b1ca0408fc8e7f33f0d18f72002fb565924bbf8c0e305daccdb64f455ae39eba50b81d8048296fe5698f70bfe01206c7a85071d95fe05969c634317714495d90e98cee1aa1470e1c48c3888ed7f5fff3b23c6c3a683a5915e881f637c1840a7ca4f0b9ccba19271fa2a26807278ade4c13b47d1949d2754e9e6dab42f75a7ea0644488e90e59287f509f5e68d7cf581832e16face54aad97f9bf5442015140d35a03c5b6d399e313cb22355af5f25590b8fb48bc095ab70ebe1c0eb748eb08aba80c31462b89ced23eaec0b866121fc2cac5a58242cd6a72b388214a28a61291c42407101c308112ec36de0a245ed0719ef6545a9d03d92a8ea48c6cb194ee722ad8517089e4d95a57633e98d4ef1576964200e1b57ae32a86018cd7c3512b3428f52ec138d5329375ea8c668912ab494e1a30c4335c1e2ae10852d164132810b9d1f5702f616fbc2b7923c43405731e8607f48d8cc613323848d8413b5700bc680202d5388bca85b0459bc8eadd80ac2f172aa82741a58c19274acf6960220d65b83a0b6f0acdaff4255bf2f2fc6f34426f90e92691791862e8aaef07245432b9b14813d50809544ce6dfb7165ee501fecf2d5995da6e61dcfe50a8b979911f695ac5c1a70569c7df6c73285fdca915cd1231741842c246b7126ec9702f2060ba71cf0c2d08412772dc76ccdbd34aa1770507c51b71ce93d9fcaa51fbc6f6b0bc32ca90ec1ba28512b09125020866a60c31cd6296cc2658058f42c69c3e730eb3b3b37b2070bda97b3659fb3b597b3de62af66a07e246d935e3f0c108db16529d2c9b409c962b8d650c3c6f0612320f664bb490271159b24162d31d46fdc00d9de70dbc1bcd879bac74379f450f759f0043f2326398d124004e5128ed08d69ba62307e6c6cb9513d72e59937fba46b90e36fe7beb5c8980331ae3f92f9cf19c84aeada588c05c22ff3c62685432ba4579153eed743c8ff4622cfb2082c23687eff1c45b8fcf4a0d1de4f8ea8b17a7327e2d564485393dfd1c0f506d229c45f0f95a17d05cd869fa5318a4cb5b558e136de23ca4c73c109749d9bd13c3cc5b16af993fae8f918d17030334ba390466a964da2273f5b6a1cc9f1d1c8f3e317a0019cbd1cfce42f80ee53b3e1afe4e12f1ed501e0d4ecc03fa9dbe322fd08578df48c73a3bc30b9939d0ac3d2d607476270daa668080a5f2772225efd8e5dcba048bd721ee296c0119d50a56978032ab9e3e1f6690b28b0cd29dcf5fc559e99eef43805d9a3e7ca21ddffc3de06895e775b8c60f2cc105ab253fae14e35c40f6fdf7d1bdaf4bacc32df9d0a22c042b0e67b11b4f5460493a31d39704d34bc457eed2cf6ee7d0e48acad1789f34747f83c7f8b4c7eaf3c1568dd420b28e6bd017a6549b336a39538e43fc56355317789c6eac0e68cce66c61c1682dfd9a05bd83001a7cb1b9c22d2a79a8ad3d98eb27b857f9943cf8b9807a628d8ea30e1eb9d0161c0121c9b3bae289d4a84f60fba79a9569104df21e090b8375991f3fa691c0596cb77a0f23fa536e0e0120e504aff489937e026bd8114d0d377a6109f3dca3346ff80a277b3cbd8e4f4973cb5c759b415df427438b600a5e45e0382154759b836bbb5c3956d43587ac5de18643bd6f4239ccf49c08fe78a56348909def6584c8773cc25f771f5c12b1e160a0e345d2084aa227319393fc42900216beb4a90e13f02cfdadfea450af1d83d9b8011227d8d47baa97116f8704ee91399fa8dcf7c23ae0478d25d1306c5633a01f9160d539fc3f1e9f66e757de978c418b82014d638b35c29b190a5306d78e38e43ea2b1acceabaf2c32a14db366d7e9d50188c680c973fc127141d66b4e696432532e5b2a2a9bc5e44825b832a2e85885abb1f6e2cbc5b74e5cb2e43a0b22d46dd2787de1157ef46f65b4ec551f21eb38709a30938167844d24d89592e9a8df5cf0b8d8afdc10bbd806784e24bdb781db3024776a1fa21328f0acd701b513357a766638581a55619c402070cca3f3ac0b4d2587e97ec548b16d5bf34aa8b37edf0508e0265c9c2592830a72a2d3be9bd155c9f530aa1f073326df5495a415fb8e37e54baa5a5a311f7a6e854ac0551a6ffc96b5db154269fd4930a81cfada77dc4992a7f15254a2aaa22221892a4503cbf3c61e5a7c71158068c965d5601e3b431233d0157695fa1b0eb00f515e4823a89742449c633a6bfcf3cccfd213156fcfed6ef25fa861499e63c51b8d85e6ba72d63f992506e054872c75e77182d09c673e773ec7a7ec85264db99489dbc72a32751bdce18efa169b416c111cc412a0cc1a42a885b7fa233c856b8d3834be3d8443f2d33fa3b98f0cc411372b02564cedd8de155dd8daba938ca75ea5993f0e105f7cd6e72f9913a1570e867507b1609bfd891cbca822054fd75e1e81f1d736148eb5945af592723d3698722f5094d31131f6399864f82b54a47428f6a8455454ba582a8b4b8928158707cd95e27a9c55cbb90fdea9e91ea3e6b71bf74454ad442971d18bc85caec8079b2ed1e8daf3298c954911dd040ce4e8fffe3ab82680e4d035c154d38331e658c32c24cd8dd138c79c725b2ee7a1ae27c59f85a61e818779102335183f4037b1d8052a1611409b7cbcef491b1928370fbebe8298a8f101bacb575334969b745f0068e06fdc618f5e5e750790471585520b9cd4262c9469a48e911b6428ad394cda2c3ecfe6d82d17113a86c27f0e3c5e4c7c4679f820302be446134e09ef93897c6162cc83223906e2a3aa95ec9a8bb43c45425f847054999ca1aa2b1144402c3422a851c32a4b7e51e5e22d22a24ada47a4a123982a6af0edb02bcfafff7cda1cc9dd9a7e014d4ade900bf67a41d9db262e00619abc794519649ae1852298f7ea51b649f0ed441d1ca38fd44d892e38bbaac15725a9a6e98d0c4b37f1123968d6229b17cee0de12143c8c12aa63819d047b6c665daab53930544e40fbb2af6b715288da3520a5b944e0cdc69462ca312ca29f2ca9db714bf868223d78b7d78fec34d5bce79805886d3ec00b7c674732994574366fa0addaba541cc2db83d64796783422362b1f1cf471e60cf617fecc85aee84fb4e96b217d3b481c98c0303b34dac63e20101946603bef6b8b76d87e69d5f35a5cdaf6d184880f47956f303b83bbe452096bcc462760603372f452e865b5080d5224091855bdcbfb3766fe460b9f2581bbcd5ab596cd1e0c4466b6891967fd0fb49c9146a935964c63474d48148b320f27d880b8d3f1ea2ef396ee3daa56a54e23c45be013ad8359d8b0b41291bc649ae51d911bfa6f8efb5a60bb7e32aa5acde878bfa684c993e7eade7241fd6050a23ec6112ff645c4f86368dc0e190d025bffdce7990e78fab27897927a44f41710e7d5c093b551aebc6fe6d758a35d6c0b104a4bec978ff054a147828a87925fbedb96a443b9d2218880cbef15e105d5ac50bee69e8fde00426788289d352314121a779051a128d6183de757a4e4d5a262f5a63bbf820fb1afe643056635ddb20c683d3aa951f3a0e1dd256aeff495cf55a692715e334bf0b094cb810611b7c497723dc7a60e851e2a0ae4b22b6a211282621f8785f2490d5d30315db591a6cda79a2b4388e795ecec2df12499c63dc48f846b31c4b8076274a401452b08da9da4b271338641f3c2f15dc741da5ff5fcf3585959536aa377d2fcea6d04508d171c4d6aba75c7e2f6bbc032681eaf869e61f5c9c0d0b9ec9f53de26cf1f882b8e259dfb1ef0c1603e6f102b99a009416c79eca9359014e236caee2862dc06810377eb455a8bb1580dedbb76baff0df8f3c58a6489e20ab468ecc51d689bb633404f520e94cb50e84b012d9d3de3a7ce56fd3ec5cc1d0d14b9da4a119f13bb0af486e1b5fb4f0dcdc07a37e3f399b09ec0ae323d430d25c2b0761e6ea0a8d9b12011e7e802caea49a3a09cde57038761a89968c31202e2ba7c564e3abef885b0fa14b04ea3b5db6f51b93a162f435e79e1c11e68218fc3d940ba5bc0bbd0006363433d3aac88fe0157e136ec0bfdd14fd3a29ffbfaf004e3e23b04df7d4364a5c090030864e4ac6b5f42e61ad6b1a39454f33b086fe4cb27a433a0f4ced43ec1f60d142667a07986c5c2201f6542bc53533bddab8df42a044c87761c6b0b0f234b959c2e154ae9b4260cbfc1b2d11b2ba6264890732c97233931642208a753d8c882d37f35703d5d352a020dd662671900dc4e214934ef4bf12b0563256bca535cd905634a5d76dc786b02fa83c38ee6474f483c7794b541ad4559498ced9fc6e956dc71818e42a45291c50233e489886ddc60d533b63f43fb2684a795cf3016b83fa86e15194d95f405e79cbfea52df80bbe49c07ab83a86b14b7df3f4cd0a1b1449510d0add5892356113be2e6432f885911f02f00a7c89514587379dbaf5a9518f6384c14cc79476540c85c54023beedc864f1a66b71ed4540a652828822093e9a08eaec3175226f9893c33c35e8d6d8ed9861e2a05e2378d204c59ee2111ea44096ed1c3afa9d13a866a1b531447f98c9a36d4ecbffbf4b8e8429a8a2a3a9803a6784f07c58420678bfb0a35d20e1c47ad1f3826b8cd7e974812cfb752c5def55507c2849166d6a39e19d09576ace1a995d37d7cdfb78dde036af699e32ab247267a4ffdf1de9d38cf5d9bda4563ec2f52ecf81f4410bd833cda1ca2b7c8126b8e4ec2662817e3e3668fcc0986197d5f18a5c24e20f1dc942e7ae3512be686a7b4d090003302cc8cbb6f363067afb8b79ccc81119ab9c4712f85a9f9dd0da7442ac2bad122abc27a10ad1250cb250464e843214812847f1779b50458f0c37211e7c72e5c505db811a778b84834537033dca3a1b868d84aff58c0b94739abc382cc708147568149212346e1e0ae92b7170fb3f8259522c65548495f65505713543340f6156dc9abd845eb36467471684827c7ed77fad36d652fdb670d68e8a96e1bf8f4296e639f1574254b86d001fff5ad584cc761e8d2b7c3928a846d6b46392d5d094a17218de13f7781a2f55ceb990388b86f5c2cf63f10249138c7e87f0bc7c84bc6a2972e0467aa601be4f814b9f50f0dbf1736d7f23be33752bf8b4d3fe819be731c741ef5bce647aa7638464207acb185ca23f513998e1a30d9dc99e9ba029275a949c983c28055fcd1e5d52a97e1c38085a08bf545c82ba01cd768492f880c2225c7f8a85984ae803463ebdef896ccc02ce0305c60c3650b2a4d001c33f3f3f3f3f3f3f3f9f73db826d1684b6206592e5273ce82a8ceb524a29a59452190070a0c0344208213fd60100000082e00c7a0cda0c99ac9244edc612b6e008c5d0d5b249ba6c5de06184c2f848f93c9a6bfc4a1a6c386cd0607b8147114affa969294245f75834d84c0ef333ee860711ca315396d039dac8345a0c6020d9b071030468a8c68d1caaf0188271367eaef4927193347864840214c0337808a1982b32fdd283d225a73d8280e838d1f7536bed3ec2030876ec66a9edcd8d76d7cc8f125d925cc286a9088f1f144c506dd2d745cf3ae8060f1f146eb3a44ddf49e7786a8f1e94f39938fbd983ca2fd38307c5505b2732779e069bd5e8d845617fc67428552a66372f3a745198bd2bf93d6f79d297848e5c147daf3cc8ce2d3acf0617054df2b3e85862cf56efb845416384997909eda2ab1e74d88291b74f71af6bb1ac16cb3ee124c1dd7fc51d43472d0ada46fe6a8e7799e6170d1db428987a480d6d9bac4549cac051a16316e57e3913b6f4ab850e5994c4ad5aba8d198b929fd4920e5814636ea87c6dea31a57e4549462cbfcbce0e5794dc3b3393c9d090b13b5a51902bd1fceefdfba10e5614c4c4f1fc9b444922933a5651ce0d5f3b5451126e92dc89cc0e32753a52511011da3747733de9845051de13d4c6f3d6718ab2891726db7ee3285987294a3a7e924950213bbdc47494a2f4e1545cc969de7c263ae8204551454b8ed7e5675a991996898e5114d45f44b8b69fd09b7688a2b45e1a56e4870d4351f4d3aad07b3d0db6f64107280a1ff37b6652718fc9a6c18639e8f844d9d47a1a3f951d46d534d8fc7ed0e189725e8fa737efbcd9de75343a3a514c9fce34fafe7f9c9a13257127a3c9e6eff966ae14746ca224b59a7f278bfb74bf431325b964a813c356e61a7926cab231d293927d63eb888992206c3c7bae6910e9250a3268a70cfdbac312e5e441aac6535725ca5f92a8a612ba74d2794a14c64dbaea2959c7243c93bd977b4dddf1bc4fb2d434d8323b2491e83a42948c668a44496b8c923d3ae98c79048952c92f31353ae811651369ed1fccff557b47945e369fcadedc56ee6944f9c3fac7dfcb3ad1734694f4fece8692f14e1af522caff1a3abaf3ac88624c137fe3946968934414df45f6893f113247444997ecf176ff93f8f61ea298a36bc7d78e99e3470d51b6bcb80c1a4c6dce17a2b031dc36ac6ace4409517413f6c4f3978328c91be4d9692b0551fed8b13393246a92740c447e179f9ee41110a5cc31662741a9524f5dc71fcadb9bc428425ad8d8d6e187e2893e9f3bc63032e7601f4aa6ff7bcb94d89c6d75f0a128f2246125e84fc71e4a67976dd669932c7277e8a1e8b71be4a7f38bd375471e4a2647ff26cf39c949eec043a9c3c7f0d9a2d2e3ec8e3b982fe79956b3f26d59e5f9ffaac2b78499da3bec50baadcfb31bc3b5c3bb97e8a843398c69b5ca9814f6b90e3a1477dea3c81c32364959c71c0aa246f57930bd77deaba0430e653f194aea11ab8d8e3894bd4e922d949ce452556dea804331c62cd64128d17430d18e3794f6746a6b296977f2ed7043b1acf5f7bac5db3dec6843f9838c41093b772f1ad3c18692109ff3a224e96a2a77aca11cc793f49dcdf3be7b40871a2c0d651ba1ef1eb29329b94243414963423fb56730551b1c3ace502e1b19a99a3e62eced3043d9b475108f7992f09ea40cc5bcb595f9326c7b6a64f0d63cefe26a43ee2d5dd33c9b6a0b15a6ed443bc6503495ad6b42c80feae60e31944fd05622776f93a4550e934304da1e48c18c1b1d61289df00e6aefe174e83b32d20106bde492b7933a6c81102c803bbea065c66a86c7bd5d66ea6d0c99fa945226167478a1a8b51f9ac4ccc7934aba50b60d42894936efecff7670a1d8b2499efac9883d5dc716caff9a4a304f9a1994dea10501746441a4030b3316d071051b098c1a3328d0800e2b544715bcf0c250800a53e89002033aa230630409e880c2013a9e80800e2728a0a3090ae860c28c190de858821212d09104910e24cc90d17184900e23c8e828c2003a8810a3630804e81042003a8250800e20cca8118604cc8d18482046c70fec739393248a010c50050e2a811d8a010cd0cf384806ee820e1f944b65b744ea5a6512d3e01937728451b6dad18372aad74cf53e32c824dec183928572cf156d4ad00deda2605fb297585295924ba68b6288e724b928684c3ac918a1dacc7d5c94cc93f264ab26b728f6ca9afc9a71cde4df16a58f416dd2ee259c287b2d8a99326734061f21eaa2454189e9a15f76b298e6b328b5673931c8f4d3bab32c0a721e6abe15961bec5894357b5cd16d3513198545f193ebd8c9ae7962ac5f514c932f4ee6126aae93ae2887f7ed37cd0d5da5b6a2a0c442cdfa4cfaa849562c2734557ac87315e5f658616182f02ea1524559368939bb5364be87a92876e9b30e7d16abe5a3a2b0c94be44bf493aebb539484877f39b984bc989123d5a081630618366ae8c530454932615486d88c065b598e1b367064296290c2f09c51cbf82a37c6280ab2539da4466fe8e5288a82f4ec320dddf11ffa6e448c5094c40edabf9ed384690c8a921846cc64e658c25b0f448c4f1484d57b7ad173224b92ef10c313c58b6dcf3ecac6d23d313a51d21d9333b6ca0923fb36c4e044496d0adda064f5e82ec721c626cabeb13adc44c8ba8e6ba2dc4974b46fc9b6269c68b0e57b11031b34443032328111ed438c4c94937c3e33557252ba9498284831511e4dc9720d312e5192ff2f949897cf9e8769886189628cd624fa3b4dd817fd0c312a6131285150a297fb79d64e269fcc9804a2cf04259a1a95248aed9e2956278949189f08312251784f6966a77e23c48044497adf247a868bd1a68e21c6238aa6db4b6f0e9bfc2b3f420c4714732c2d3f374a4604237b88d188729974c2e3bdcd095d69b0350e623082d39b842f3fa98ab188b26514d51acca388923826997c233ff64d1e2311c524f532c6f253efab921888289ca989a634cd3d4417e31005a1f493d68f218a4907eb14a23c37b235d8dd8dfc10218afed965437a83289d9c5ff48925c5a8eb08a2a454be68ff7135cbb0c608c4c60044597e53eed7ff3c9a6d81102cc09c10e30fc5ceb9bfae1de487829cbedda419a3da49d28792249ea0c4c96b6d4ae97c28e832bd61de312e88b187727ec9bf25e75b0f65bd2a51ad24c1d48c9c074bcbe3e7d4e9e2a1f4396550f2b747b38cdea1f87e429b4e723e49ead20e85eb581d346d8b5187c28915da2b64fced8be85052f26fbe8fdc584adee7503a41e3f576ffa62da1399b618c8288218772bb464d92eab4e5399b22461c8a496e38fd0db98d49d26658dd2862c0a17892d85964b7bcff4a6f287a6b58e69da004db911b4abe9ace6637d8a8926f4351ee648e8d73f9a57c36143d46cd60da534d89ce1a4ae2ce99d23174d4500cb2c3a7124a8cd61d93868292aea4b292e36828d6faea090fa29ec33e43b14506fd6c614adf673394bbd327e13eafe4937319cabab7333a9b4b86a2b759092657279d9c8ea1f822734c529d88a124fcde35bce4d12a66188af7555f72b762ee82a1ec6a15ba4a29a149c52f94334b4ec99d747ebbadc7f0424912b31ba46948bd1575a1704ac996b80a71a1f45b82567f367164e8b750be8f2798557a920411c6d04241d867f5ac29c7fb4359289df41a7ed407045c888185527799e89ee4e9e818b510e30aa59cfbd25cf5e3b135562869909feb25ba68783146158a3183e8afb9b43ef98e4185b259e79274686a0b18c1057050600114f8e29ce0d06064c4171231a650ceeefd245d75e5692f8562f2f7582236d22c3c51286fb8abd57037140a2e42a8756dc7916d3ea1f8ff72d29a50329390134abe1fabfb24e1fbe44d28ed6ce6adccf7dd969850ecb3f7cf4bbbff13b48472763cf9e1e45c090531e5c1afc449289858a7d2c44e3eaa2f128a71363b469774fa3e7a845296dc5127ab7dfc123542d962e38ef23816a13c16e2438e92f9940e11ca31f333636949e5263584628a66506b5bd2b69b8450ced82509a6f32808e5d49b3f9694a173e9402865f0ba0f1bc2d39ae607454b4d29da2475235efba02c326dcc264dd3ef447b50f2591f3161654f47110a3178609e3669522fde455173c9a7eb74122a6219401705d711eb273e7582017251da50633aa60c808b92a4cdf428930f73c100b7280972eeffbb367b8d8e2d8aa3debee4c9bdca19b160805a14b46713e4867b0e9ff306a045316490a1946e27117a8661be4003cce2dc28779e245da2e3481699da9cf427a144b1406eaaaaaf8c115b7a58246b63c9cdbe41d3785e91dc9cca735de39ab802533d22e3a2c4b25bd18928adebd9df99157efced1fcf679a5d5e45c2e374da8d314eab8a245b2b0d7a95399b8a748d898da202dda0c453692d79844ec168bbcc5adac38edc147dd6334f8d2e7796c292e172ff7766424e8a53a95ae81073df8de2bc8dd63167505714d679cc6526a2a583168af5dbff730769428d0a147ff6a90bffeccac2305f600d0cf0897290b973f8c58fe724f2848d2403744235c94507ff24fa95697560004e9c013651f8204cf2a4ba49e7fca3180ca08952cbecaa863ac9c4ce9b60804c147fd7a451ba7f1727c644317efd65b6b5901ad54b944dbefda46ab2099b939628e596493b2567c1086128e9bc4c2d329998b949c050fa9c459e18ec53d7c9bf500e4bd377eb186f52e98572e78eced72367f2490640ba50903eea36ab7f3b1f3b350308178a49bef0b65ccd516453dd4249cb5e28af3d69a17482c6c64d7f3b2fb1aa66a118d54fc7dcf9c4a614a9a501040bc55dd1b06ad27acedcc92b14d7dc449e68d2d3fbdb05102b943f4e88c6ae49ab50ccdba293c926219a9404102a94fcf4d465dfa7e7cfaa4ea1285729df7a1868396ed800818d1c60646064a40637dc072052286f6abcaf13275c3f4c2b415b5200240a05316baa544f2cd118ed408d3024a0ad6c008142c9e49ff86e56234f89419e50f29c7382b666e98492d8f9b426938cda13648302693218194993018234a118ed54fdf6b9da668f16409850f490f7a362d7ffe44c16204b288b6cde247ab2cc98f500440925c924393d96a73b4e4e06902494af84077dfbbdfcb4100d204848446d5ffe3fbed318801ca198c13f3e9cf4a05fd59111318018a15ca32439491d965a82686404c77b816aa4f5024811ca7e3e9aba64dc04102294de33e7a4e924086a90a30639ee0a2043c06e6dd5b4e2f35a773c94680aa5e3685272b4c2002284a266859f0ceacc8499970012848256bd0d35c9fe53ee5906102094cec3bcb985c877c981fca03caae22263ac689bc707a5cd928450db670f4a6e4ab490a2b7264a0c840745bd39a57487981c47df45514bb333fc7d3e17b52eca1f63bcce41cbb928ff8cf65ad7a751e37fe0620d17b79b717b51597dad8f5b1d936b6c4ee22dca2e27cf8f8e48d3db7dd8c2758fb6a557f4b5b0c3eade2e74363ed566b3454c12cfd6a3810f5a149318a9ba419da7aa8e0e1fb3284932c95952e58b870f5994cb3daba4a90de213c6173768988151c3d0a000afe023164593dd52e2662eb1d4d672f88045e165e44d92f1c354c97fbca2702156d4683f6bb1eac315b57d5c7e6a68cea759efaa83ea5c2b4a26a5c754b2e6bf795694e368491abc3eab28c9af79d3f5acffc85b15259d46af9e9467b757a6a25462278fd1b5e22a26a828e5ebb8aee8fbe314c5d40c5f92f0df14655beb4dbddda2ed2495a218aae56bfea725c8ff83149977bd5a7d9a5b9b95b7e7ddd7e8311937f0318a52075d9224bfc6eb142f081fa22897d4fb352376e329f9501474ab79892f49405152edd2de4e329360821f9f282739cb8f984c9fe59dc287278ab9c6b24b4cc7da0e7d74a2185f43e93edd2f27287d70a23ca2b6712659818f4d94e49363db8e90d9594c1f9a28ae96be90d679cf44494ef80aeda1249339480d1f9828e9a05a4b499a36e74c3e2e5114f16157d3a93e2c51f8f0adf9a5349ca0592a7c54a29c840e7a3d9495acada3f04189e25a095e3247a926516a93f458b9067d48a2ac214e337ff73d29f547244ae727ae09bfb924d9ec0f4814dd4566f8a04e8c1af1e3110525c6e947939ab4edc987234ab29408a5b1747ab7bb11a653a5ad296345644449363133abf4091751340d6772091d234bc828a2a44af6e57a86921d950b1f892889b69693626eb265e7ae0b1f8828a999f631b945ed3e797788920efd937dfe99f5b2218a31869511e9d7e939548892ec1c0dfb4968ce8cf9204449183b31ac3b9e6c62a3c1f631883485b42db1fd66063e0451f0cc9ca46749a289a913885258e92e9d4f534eab1f802877921d6ba46f3efe507c37517b62d4e8edf4c30f65135625f3c7b7739041ec4349266165bab2a2794a443e94c3275945e434756bbc87a275fa7a0b179dce45443d944528a993101e5682f020e6a1249d28a921b42841c62c1e4a961b7583ea5323ab535ff8b843b184899585ff6bddc9871dfc3aaf6fd9584b1937efec312af64be6a30ec553a5b972446e4cf67ed0a1a0694db4125c338592ff9843494cf24d541322264982ea430ec57b2df94df8ff118792898e613d69d6527afd8043b9c34d0ea57dbca1a471367630bdabf6398ae1c30d25d795ad597fcdd4b12c7cb4613b614b4c51a7d9337cb0a168b96372121d36efdb6b28461d3149e9f1aff0a186b28c162d61ef5d21f7471a8a3907a5ceba35d442fe4043a95db4a4699f9e7ff0e30c25af2d91fd24dbefcf1f6628ea95e609994d6dda4f19ca9741fb9eb8b6bbccf5e1830c2549a3277153ab499265632828b1ef6b5b3fc450ccf93ae347b1cfb531f7118672c8d090d3533fc05052f72d2a23f7dd5b64247c7ca12c9ec23b8a0cca6ad60f2f94f3dd2f64caa04acafda30b6579fdec3fd9e45c79c285c28d2cb9c4dbef606d6fa1e81d3d6e92ea27a70769a1a896962974f688979585929273ccaf5546d5dcb15050656299395e098d5da1d8164a4d8e5aa28ad25ba1184d30ef244f58859269f392e79324688e692a948377fdbd875cc73c4da16471f2cb968532f904a5507ed30cc2476993949751284815d52784ae3cc98642d9bed77bbbf22714b64d662d7154271454658e9ff5f7d18472301931219448abea3f9850f2f79125e6333542e76309e58b373186db1c259453777cc60e1f3e92504adfccd2b10a9739cf0b1f48289b249f10ea3678e68e99f07184242bff12320671123e8c5036e184ccb14fdb44f3a308c531ed71b3af12a1d4719fe48bb7b40fe5104a32b8c91eb3be4228ac9b8fb9462f0805bfd2dc9899f97d03847289d161ea6d4a52a2ffa07492d866e2f15be2331f14cc64cb24e7c867177d0f4a823c694bfaa052dd341f3c28a5c6ff0ec2be5d94434b7bb3c61826dfd245b96fb4493e97f1f6cc45f1328c7dba09429c24c34561bfa4c64dfae41685510dfd119b312baf2d4a1e9625696a0a994f6b514cddd39245a89f3b695a94aac246c7f3139308cd2c121e4ec9c8a22ce7b1932449db51cb63511e252766d11ed4fffbb028e6b5aaff2b25af280751279be4171bd3e38ad25e8a7a9243d38a72fe4799edd292193a2b0aa61973bd426615254bf9f938aa5673d854510ab1b6ce272641ea665351aafd31c94d07a1734b505152a6f49e5c6a6c93fe294ab2c895d892d372359ba2184d082549151d44be588ad2a7d53771214dee2891a2e8f226726b93ad0977140513449c98ef7470f59828caaab1d4acdc1a8a927589d9afe53b47e680a2bc41fede73754cfa361e9f2827d1243d5d5f0f4f145ca4568b0a591d1dd389a2c7191d8d797b70a2fcbe2597ee125aa33b9b28ffde2835e983c9a4e39a68af349758265c86d731132511bfa754f746b61e98487a4c3f2927737c09bac41e6ab615e3d9266b9b6e59a28c70ef4c9e943c2c5110756a9fea5387f57c021e95e83cf7799b32a144d144647f5d6f96d8781205e9d93e7fca9887244aab25c939f5c730b1241225abbb925d52b989152151d25faad7cd45a7ed0b051e8f28079939aa67b25b4ec911850d7dcbd125a711e54e97490a1d3f8c28a59f68f2e47399d8f422caf2d1440ff76f31112ba258f2eaf74ffa1251dc1017a7428f88d295a0e12a47fe29751e6273b3b8d0d2d42fd3d2b59817ddcfd3c31005d3678214116a37e85588828c31fba7d599102525e93e73cfc14194bd4f65aac77c1dab1544c9e3e57fd50b44a94ae7b3f7d879641c102525879149beab3cfe80b00e9e4b92e18e82871f8a1b4d73d8b0ab7fdbf7a17ca6935c4d157bf0a12428f927c61cbdc71e4aa594cad239316d5ca73df450da981521225a645d24018f3ce0e1c1676db6324fd0030f360286c71d8aad576d237ea64abe3dec50f64dd1ed6ae26d4a4e1dd2fb50dbb91457cb2acd071e742807b9dfa6c487daea4b0b1e7328c89226c764072529ed3ce450d68d9353a13ce3ce1f87a26ccf1e7028be9b9cfcb4e9fb8672965ce2c4555b9fcd33c2c30d2519d2e6ea53af63e990f06883f15ab736c79ca11ce6c320c1044646cc3cd850da8d39bfe9794cbfc71aca66b57eddd1efce75f4504369cb3ff7cb68e5ff891ff4364ed9033cd250d2bb95a7eb3de9781e68288c79a6981cb467289595b45d995366289aac87da29cda30c252f317baf3e175b2632947495c97bdc39efa03386d29d70a1af74530f31b4b1f6b2d7fa359a226fb2ef1b732e3166f48e3dc25050b296f67a8e3cc0806768d3fa7ca62f94ac94a851ff8c2657c7c30b05cd9334af64aed39ff5e8424149a1574f9aee9b6f3cb850d42c2dc1ca4afe5482b650cec9fcbf4489e9fc1b3c187868a19c937d1293dc588fb67a64a1f0257d8a27319b492c14ad4f569595acd649ec0a05a57793a07f73d767de0a25d59aa41159f6d9522f6abc007be051859210b1bfa7d337e7493a1b7850a1789d2f335e6e63a90dc7144af2efc44bb81b31d39142299459cbdcec77d22b0a05bdffaa29a39ce7d06ae00185d26a8c7ffae6c6898d37f0784241c355e7548f16cf0a69e0e184a226b147eba7521373d6ce8647130a9f317fb0511e130a671db44dcfa5cc49f570782ca198324ad09b5542f932dd379c204f2c692f3c92504c733244f409193deafe8507124ad20a226228e7db304a8ef6973e27226128773a491ead131130203aa6fa6955636d9b1e9ffd4a9293cbe9d251912f14c3f3e572fbd38925c671c380e00cfd79a19c7243dce24c2d742a8c2f6a8c8cd8a83132b202912ea03fe4bbcfb30917cabb694a2e4b75bef2b7505072768b3cd14413db988004225a288f8fbcca32ed99bfa4b250b0b4d22be9ae2ef7ea8d1c619c40040be5f120dee43c29912b94af933c795bdba294dcbd88154a25727443a3ef09a5845e60be282b13a902ef35b6b2a19dd72d779e3ebbbb093731fc7d225428c858c8d12d6b1f5d4d81c8144a1d646798cee615bb119142e964114a66d36db7441460814814ca9fe6b7f3e96f101fa7c166a3c69d08144a1e4294183ecae6516aab40e409c58ed57432eddf86d733449c6092357f4c9f322dd284528951f328f1ca3a3c4c28c67a79c71c14594231cfd6c914adf90002e30323105142614b890f5a7b73ec549c1e48c10c0e8824a198b4999cf49b93400409e5dee022ab1e34ec4f4728092594dc5eb57e9bdecc8088110ac23bc724b674e7f05b110a3257874927f7bb9b9208118a1f2eef93529e366c5e6408c512eaa4ee54be41a6ce8808a1d499d4af56f331f002dd08835b240865b1f6182dd4a5c1366306088cb5098800a198ebb3fde99e69e43020481a394c1859831c97223fc04bc3b5ddbc63dcb473f3c8244f723149c784061b8d1c060423233472e88d1c61d810f14149f4bbabb9ebe05ebf8721d28372688e6c8c3d1e23f51af902111e94db24f3d86c7f33f9b48b82a9ce47fdd8da25477551107d4a0751cd344a45b92869b4ab9244966873276b317841082e0ada6a639bca36f9ddd00521b728bf8c982872d5e536a95e84d8a2dc493ceb2ad9e74394d4a2bcb1a498ba8649fa9a105a944e923cb39aeabe517221b32837354e43576c5d543ed3eaa6330fbdd70d1b161819f9e2868d3432628410599436534f4c7ab2897a712c4a42a82c71ae6449b2ca1b3666807103b1dd401e088145d14e890b8fe9f973fabda2f026492599eab02b4afe2163e4c751a30d87173572c4000221ad28e9ffdc3a237b3a644da8023208614541292194d44c5a67bb81701545352594f62659939785a8a2e0e9d9c14409278a9b8a92dac84ee56e314aa82896d2e6379bf2294a3227d82615b9e94fd0147ccba589b58e76ad77f8e63a19299795a2fca52707d36127f62691a2bcaaa3c495afa3f8440df77da297b8284aa3c3753ee7d3efd786a2243a46dd248ed82675028ae295b0fd9b2eba3187433e51d2243bb88fa73d51d0d1e8b9a7d5904e9436efe793994c385155d8a9905fd29b28e9fdb065923cda36754234517451aaa3c924ae724d423251104dcfc1d44b091a3b4c9434cf5c29f524278de6258a6b1f63c6ecdb73426909ac46bd4e432cd7aeea33b5f43eb737b69c2a51cc23f35d9bf426bec4aa81104a94848f49108f6ef71de42193289c669a13939adadc9667d80c354968a19b7215b6d5b1a57aeab954cf6f12a334e98114cc382191288ad44ad77029240ab6f39b74f2244566465e0e306ad800c19ad98c90471433eff7f396b21591234a25b69f20c3b5fcca3b328276086944499ac9f0df19fff2278c28e6cf66eab39e421651da934ac9b43ef9449b1451125a2b3faf9549d678224a6266ec6eee300411c50bdd2aefedecffce218a31d56a73f36d08f4fcc5cce95121ca2774d2a4e45958ad4688822ae17e73e209b2de19443974671d354166def409c2bcce38b9d793bbafafd7b8ab12b3a1a7be3187d60f4a32b541342460e3023585104014b37d4db03315931bf72b84fca124674b939b99a44da3635808f143b1644e46d3ddd98dddcae0bc0f0525f483de58a6fc248d0fe5b85b92d819738ef69c07217b28e7d218df6546f4899d103d14649650dd1e739824ec6c08c94369735052c7a45d0fa460868d103c1484de6ca610327b89e5dba040e721e40ee5eb9c6a946ca5f3ed04c01c42ec502c253285d26c9f25f6b31a6198195fe03033e80e84d4a1d8255e3fe4e77428853a31b7ff666ce5670ee518f43f071963c6d235440eacb58baecb7d8dda995dee9b97da8558e9a490381433667dabcce839b41f0287b2a732ed38e187bc211943491b43ff8406dbdec88123c40d2513bdd67d2136cb04b5219935c814ef1acb5183840fc78d18500007ca5183093421840d2539e953ef5d22df3f9323061f0859c3fa194b7efc53c611a286ca5275f7c6ec43c5abda3b7a2e2d0d178286b2762e49c4c46555561a6c680b18c105104a23233b083943d94b99d628e26162fe65806a7c61038c1a786103040859a0cf0c66f253823a19fe329493863449a7b4d1ba3a198af184ccbef50e56aa8dc18f77d92fcdf43c1f2bddd4394c878d188adac9947ea8fee7100a0943b14fe76c36b73e7c4908180a7a920eae695b4cc809f10b458d3313a573741a4fbf10e28572c9612f6b8314e5e58574a11cf3499650621017ca41a55be7d175c816ca29ed24cda4d3102d9404af8f9bf673507aa42159d05356eeadc96d271f08c1c2b916d7329b369af7e156a384dd509f734c1231845ca1e0419be878b642ac50923fa88da7e46d74d5cc084248154adaad4789d1ac377e1b4285a2f589e94ffa193285624e7288bdc925d4fb0b9142b936e4e9f01bf64a761711128582d021b4272d4a6a986008144af2cc933ec93d7a5271c8134ab339291394b4595a73442794a432ddb24cfac3d8ed869026944a66f493924cf74b0e13ca49ca184ecd374b282629f5f375f4cec728a1a0934c1f26c7950c52938482f8bc0badf7dc316a154290508cdb35a19ddd7cc50b3942b1647c11dd7ffd9d232a8418a1fc3532c75a99d87f9a2294373e093fc9631c25888950fe0e4ad093b4a7d11c870ca120e2ba61571e64fa324408c5901a326a92857e1a8504a1b8a6b4470ffab6a413464208104ad71ff244089da74451c80fcaf7efaf1fe7723656213e28c74e9a9b5b46875142213d28bcec9bb9ba9db85512c2836ccbea4be76aeb4c9d762b51824c21ef5d94574c85d0de1d22b3d445497dfc3c7a32a9a4997251ded0f4a6f1735c143ea9ec78cf096db2bb4569ab4baabbaf9c248937882d4a7b1bd7d6c554c6e46b5116259a28a7dd26ebc7d0a2bc62f719845ab3282791c9b53255c87de64f009145b154c935427706132a8f4529bb57439c929ac45e7604105814c604ddb9e35e578be81505134a952ed94e7bfc0f07105714a3c9dfdefa4b172f6945314cc3e3b5358f922b2bcad6ff41876f341d34d5559446937a7daede52a307514551ffcc3349d2998a92bc1993b0569236258320a8287bf81d9dedc6e3d807728a728e57b641ee764c7a10531463da5162fcf5b414e54f8248ebeaa83176dba428b9fd7e3e69e334b8461866c60cf4400a668c808ca2a4fd496acedba5734e7a91540320a228cde97cfa2493447369c30b0c457376eae521b6c1810405b369f5951f96a59edda2e4e81ff4c488500b5a60830361d8f0c0c8480b6c78a178234718209f286988900ff2999ac1f74441cea649d29b5827ca2a4ac6a7daa04b300f270a3a7b10b3b1bd4d981a6319dea55d16b6e923aaa7f15b92288368a298e477e8db9a2d259932512ca594f0195da14f483151dcf0bf41fdbc65494d2f51ce937a26bdcb65d0906301c412658db9939c37bc4e00a944513493e8a24eee7462cc05104a14b309f550e9a964d3220d904914f4c2bc7743064412a58bad0b3f51aedd3a34fc22513c31d78e061bad9a36386c783181b33d48b4671afb3972bb769b995bd25c4c385593c601868d1a2323ae208f286ef6b65bcfbe238a794bf04f57a1be46de88a28ee890ad9d64041046d8398986380c0d10ccb01a802ca294fd7943d45544e1cdbd3af7eb7e4c992f8024a22ce6d6413f44d89f06828872850c27c5fe9f74133a44492ef9fa3e89927f3cc610259d6e9e3b7c4f92c493422c9bd6f44977194294e40d9d84f48c752739889224fd97e099394f4438c30451309d6a939ea851fb830e8e1a5f2406a274d249bd9a9e3b4926c9df3031b8c00d5403c3012f0c0f400051fad04126f1a6fda1ac9ed566db19cb01094ce0031cb8c05a00c40fa5ddb9f08c251880f4a1245cbb5a4e4394924b0e02207c288e321dfce4d42675d21e8a21a674de2911881eca9adf430975b27d893e481e0a3a99709289eed4551d103c944d9897704a3407f1afdfa15462907a23646b8736d5e66f6e96741440ea50d46ad13871fd0413561cc60b0ab81440e8508e41ee2699f192fa371c35302098612073280693a4b6fff6bd0f53a6e3eee363198a43414b35a3d89e246a74e050ba11eae2a93b90379493eb2641ce8c7d9534881bcae93fb5cd96e61cc56e83f3f6e1e159f261666aa6d9bc3d986019640e80b0a124ba3a7dd0de63c276206b285a299dabba25659c41d450f03621931cf479ee29014943e13668aad325e7eb7041d050b812a7eb69f95f27090a206728ae9a7d4982297947c94600c40c65534a90bb51cdb214678461be60ab41370640ca50fc9374db260f4a0e6a024286c2a8ceb8166bdd6d2563286f524a2621427d99b8e6001143c1e7245122eb71b207057f286db4cc25323af2f14341e89c537f4a2cb9b93e946b4ddc865fcd9b1d1f4a72d3b5dac4f6501c213ec7296953c99a1eca9ff1b964b83a0fe58ff1a93d8ea777d5782809427e7e3a4977289ed650bdde7d9f931dca9fa38971213c9f09aa4341cf27213347e950d2633da636fcac99cca19897e139961fd75e39943b633a2dee4187b9712829b3121d6bf6bb5a3894e62459c546e69884f20d253178bdc59f782783ec8682b6f5c70ca76a2f721b4af2a9141bed3dea346643a974aa6693b38692b0ec4db29b9cbc24a9a1f8b2f79b41bc6fd2901225e5a7d4203414f47e92bc67748682c7cdba33a16fff3743c94ad23f36f722fe2f43e1bf56fd640e194aee2528990493d1849331940419c367d31231148389139485d8b6d084a1f87a629a9bcddc130c858fa3b32859e3e6d85f28fce968ae75a66e5b2f944ade6d9c91d7dd6617ca9945c885728faa4e9fe4b680d47ca2872cd14231859c93493688df2f0ba53599fd5b33ac74b050aa923d7fa2b507b84239ac249de4fe70134d7a002b146ede32f637b504911ea00ac5a063ec9918a64249d908b936fd148a2e1ebca493c6c4ce91424198f698c39a44a178d96a72473f49630e85629097ad39f6a9623fa1184469a74fb3138a9ba22c4ee79d1173130a9ea2be64d11a4dbe4c2897e86b6e4aba8482dcbcaeaf99983b5542418d303947359350169d047ff5bcf9848984528715259860215aa31ea11ce38b09b111ca72d29450f7eaa3c322947457858ebe61ef1d11ca67b1ff7672728b368472c70ca3fb59e3c885501c9d623e328d0eb53408a592f934d35556e88150d69031ea1ff483929cb2fff1faa0249ea9d36963cc9ea8078593ca73b4d8a8c173001e143666e7089322e3eea2a41d457e9ed293a45e17e513d67d2753f3e92717651ba124f5a3041785ef939fc4a8b945e1f73d739df43ea1b145319774223e63f0ca4c2dcab949dd077957b5715a148455968afb0eea79cea22474ea6c1fe65e67a72ccad9c48da2ff4a878e3316450d192fb6ec653b4e589433635dd3ebc92bcaa1b1941aa144332597ae28559da079630927792c5b51381d4a4d5fb5fd24212b8a65e6213767f568827015e513deed8314f1f9715445f13ccbba2971b2841a53513825b704bb1b15e5d5ee9824594acc8c4f5152ea24af312ddbbc29ca31e8cd49e64f827db61445b9f564aa7d727f9414050f256af44bd935d9284a423ec7d1a5cbe22a1445494d9c56c9589ed6148ac27aa5ed9dc922c5038a52bd897b92967ffc924f944fbb5eaae8e667d613e524a81b8ff161270a3e32a88f79e544e9d4d7a7888e4e4f6ea2eca984b63b0d1ddf34512a49d97666ea51b72e1305cd78a7366e36314a98287b7c8df9f7106dba44f9d2cae3a42fb1794b943dea482b135489e2963625f38712459735914985f7a77e122591dd3993acb7f62792287cc7c689db27651889728c31e91a3226cf194894bc35c72093d0cdd51f518acd9ee411724441852c372b69443174d09913c388828939959cebec12ed459404994cb39eb022cab7319fca642811c52458783ccd7ca5ae21a2a04e924c4e663335ab1da2747daa79543e27a19a210aab277f4ecc9b4a525a214aa2b64c9c933334c919218a41fc466df3065192378ef630b2a6732688823ca95594249f92a2b24014c4e49ce4291e62024429d44f73b4633ee70fa513dce418254cf864f243a9f563959e6899b9ef434992e263ba9a24d7880f45138359c79833cf4df650ce994f75e87ed5a4d143419f87f63413b5a73c9483cb6fd4de0c6e311e4a6a5d173e9a9e367b8772ffc98895a4e122b543e14edca01a74307dd7a128aa1b633c9652a24351c47b6e6a9376a33887728ecdbb317925430e8557538fa90429576225230ee50c56a29bfa094d3228030e255193944abd36196ca6c136030c1b35500b6ed8488776fe86a2fbdcbadd68f87c90065b9a0cba64b8a1d855e29a28a24465b4a1741974f858d296187e556543b9dc37e959c69f99cd1f64aca114c2cc3e0833ddfd4d066ed49811068e34196a28a7faa4343edd32d250529d54ac8e906d3209a3a19c9370929049c624e9279da1a831b989e9acd7a493198a419824991a53c92843e9426357dd668da181f9c23720830cc556bbcc6f3969410b6c78318692787210a6d746e669530c7a9247a8951c4d0b43b13dbe563c5409e2c468b0e1d5b89123c150d6b06f62c4a6f0f90b45f552d1f1619b7412c6e1857289f01377fea9f46eba50cade387f352587901e2e14d3e8b88d9947663b2d0a646ca1bc1bf3bcc79216caa5192d946ea837e166a1b8c1938c3135454c4d2b90818572e6948fcff34f9f357625907105f4aa54e55a8b99ac9f0c2b68efdad6f932235eedb527272fd5cf79e2886454a198defde4a047092693dac2f822033598000e1c0604231819a9413232a2051954289f8ea3bdb12537c86c0632a650126b845d2611d536973320430a05dffadeb232fdaa220db68e423196e01e5f763695560f0ac5645f9ff7e327edc51d90f184a2e949a74b181d27146367cc7193a4d1605b0b818c2694e783547153e2cb6042317586dda8eee8657234d8d240206309055963423e9e12f254641b810c2514d47b58dc864e7256114712caad9ba42f1d7b31ed414261948dbb9c38d1396326907184c2291d6a5b9d6401194628853a134a78d0292a7e1945284737ff7ca55a5f79171944285bf6c946bf90490e6f08c5136446113a46dbfd1c096408a1a4226454c7d1ca0842295d3ebe58e9fa0725bd800c201476ae439724934ea9511a327e5050dd13a75e5908bcf0a2c606464664f8e0c1a83103306230038c1a2d40c90064f4a0d475393df198f9a899d1b3d66b973478023278503af1ed3ba693f8d817bb8b92cf956617fd992ea694ae8b727f2acdd1b0d160fd80482e4a7a9bde64cb694c823c0718b8287c8dee28594536bc9b038c1a37c2f0193372e0b04163c69e8d1a33c2c0a11e48c10c0c88dca2983bad98a4bc33dd98d8a278e925a84caf355fad482d0ab75b7265ed4b8bc2c61271f26a3e1dd39c45b1fd0465f2268ba2575b6ade189158942cb48b38d5ddf6b9128145b99478a2b7ac91525a062c6081919113794549ccbb99aab269ec52115794f37efb97c96b2b2ccf15af8d8b17bfee0f1de6af4d93242bb6f5b96ad9b94a7115c56c7af389eb39aaa8453e35ae724b7490714f9a32194f91549457cdc45d880b9dd3455051b2aa76bd923d6bdc1811444e51ae73dd6032274b99ff4c51ea68a2ded52e62c22d4571e343f4f967485138c1744919fdd751944bc96b223e7dbfafdb1608c1025a441405bd27c59e505993f3271465399dca549e76a6394151cef8334966ede6faa4c8276a173775b5dcb76c35750de59deb94443c513a61948cefb71ea3e78fd02c20d289e2e73822f7408413c53aef35214b1265c2641325396ace1ec394b449e934518c2ba2a5add3673069c581a31d209289b26765b2ea1c732d8d8ccc98d18a031913453121b73e5927d35c5fa2f4278812c73d5f46554b14a38a0c6d7db513daae8472152b2f776dd7161ea764cf4c6f7293d250a29893acb3f95d9346d13e9a44f957f43298127672e5229228963cea57b389b14a12138992ed7c085992f698152151ac2a21a7e6497a49a1c8238a2a5fc2e6123bf346a97f20e288e64b4f9077b2876ed8383c10694471c39e5a9ad8ae90d6b05182fd428411e52e7df31954b38852a68e7ae53fdf88410e3332826ef00c3338fe20dd8188228aea63e19e2459220a27cecce7dca52eb71301114414dcba843dede33626e910c5923b84cb8c6d08b46cf55bed2adb53836a1379224e8d440a51ccb143e7786247ed982342889252e9a324f1298434c90a20416410c5b4b226099dd9464942396c7821829191198623870d2f70b48908a26872a6c7fc7154e9c98904a2983369516e3297f0944500614ccd697bbf3fb876d5f65562719af5a6995b9e53dc7e28c84ce5d1bdbadc37333232323232627603079b1b3130227d28f88a7eb7c949880e1e3e946d62dfb6617b9b5b739e6ba7d23d94838c2173c9ccbd6550e3b102de679e1e10d143b94b50df41764c72f7a6a2209287720e726dbb168be0a118b4ccbb64521354f477287ed0a74e1a99fae49ced509025c8911dfe4594552275286b2615a7316ce850d8a4576723749fc9c93914a3e59c58279514b2537228e579322f1db13657c6a130a337082593b857920e0ee86ea79588a9aa76cd79d49c656b9137143e7ecab57effe7ac4646aa20e286b27b9b5e0f9fc54e4d1e8c18d8e0cb2541b7a19c5bb4af49db9217ba919119226c289cda24d6733c712f746b289ff413423f65a83e25226a2856789c704ad4a4a170a2e7e425a9af5e2082864f64d2ccb9936ca019376c989da1983e9e996df27c2f1d1a3c22628652671ce5af62d260a301a2c17643a40c05edacd99b4d523672af21428683c89ad8f399f40284c2400343640c4531c9ed3fbbd70b18c1050c0a013a35bc10c1c8c81b7483468cfca8844e8522d250281087c4e170301408156f570073130800203c200ac542a1603412367a148003542e1e3e30241c20261218181889c4c27030100a04446120200c0a85c361404820584b85a007f0e66eef9317615963c4ca3fc56d9183de214699be4961a9c246d2d433f7266d13d403830a4747c9917a34be714fb3f9a225c22785e50f0b86c269fe5bc355fac97ebb52c3eebfd72af2e2731bc222f8a968f2e0b9796b2d659c1ad43561bb9dec1f2e0722a7c8abc018082aac653be53d4935ac1bd60e48fc4fa46ced2353e159cd12e7619cbbc833bfd91d7991c5e4c5c3e6c8c8615d3938079e80eea9862d607ae594ba1bde8a5ce4b826d82a9ef31f16bf4ac09fd7d22865d1aba1bf4156cb56efc787d6f8c6a6e85ba0c20ea4ff0e3c6c267d9cf6506ad8d01edd66ca7b9e5398e3435f56ba1d309df083f4c5d019bda7c68938511e7ad2448f56fb05c96d0a4d0ff483d088be2c88dd770986e223c518949cde6b278729a97d1ef1c78a8b6ca75081af3b7cd143053634cb4ee5d133c65683ec53fcb554a287fabb2558abb6ebfa1ec9b6b7b78632f979306f8a2a50d606d1a9d8e20d139f19d951287586a5529e5216a6926e3bacf5fea8df22035da553a24f1471e97257eae38e9f93ad9d884528139837bd0923d5beff1b9364932be726b18194309722698a8502c9af678481a7b3e708e22add3336c74620fdc444eea2995931a7bae95318f80b89ccbf41c0feed5ef0ade6b0fb893b53526783f054b6e00dd01412e6d5e814bf044d5c91ee0cc5ee5bbfb28d0f40384ec959b25c8c78f612552e3cdadf55a8194f6cecb46692d7c300ba77859942af449e351ab79e90eed5a44f5f931918813dd8360a7fb30ce6cc6edbfb0e061a5507856a58bddf4eee726217ad6ce7265be14384f28886b78a2262309c56d13d528753d3354085f90b752443d7dca533a6a34d5cdeaa22b524831ceec2d36a6316f01f710fb9e211b02cd02caac8bd866e09730f113692a52059373f0b4bb4ea7166ad6a9fd1d0e903e645f0f51d20edcb9d6d833f0cb8b8a036fda388f282a04bb3446251af8277edcb9df37f37ba344906635d971d6a2a01dea030039a40d600f21b9cd595651212242654dc716f76ceaed566f1aca6e86ff2b0d363fb4c0526f9bb231993e7125c91d2c9dd7baab0a9248a187fe6f11b03310a155ee9edf28c0859ba9fffe6d9b4a913a0df1513eb785bfa31bbfb7eb7227c2b3068985ec38751274c02385eac69fcb845f33449e39eda260eed2cba00355c61bb2d993a6b4317ec3671b13682d988662236137e26cd12068525c24b3297094c1318e5e91acc91a97c565032a3ec2329624a8bf0cc9481eef9f4f94b68692274e092b78060257449335d49743f3dbb99a31d812c2b6cccf397b911aa00a9a3048ef2552bb1113bdf3c0c0f3c3159d52208a11cad9ed7b472289a0bcdeca2ec95859ff61506b2691b424ecadbb81b8d87e37ca50de1aea25153ac63a02d9aeae846649cbc367f87a66a1bbd794d7993779d83b679427b8c0abaf888d5b7752676b101f97cb1559f9894203bc012011075ccb38a88247b0d7db28acfc2cc54208084260bf9f50e30c3663f2d25e3dcb060842a625225790585453666bf5339635755aa37b763b0c9a8836a035773cb0bdecd03a922252481dd7e051b438afa91599ce01ad9802c1efae356af4d7aae3d9181a17e43d9df295e57e9086112ef037981e5327d424db1872320f9712235edf4a5ec11a33bb35093bf4b09b5cfd70b7534fa59d6fc328f6f7a703544d610ae890d9639b1bc7e9581056b42385358805ce047c0483d0f6e2030b4c92e3d15dddb5d96ad0a2c7f8d19f6770dbb51ec672a3ebce7ecf37f52a55a63939c6d07f8c8e5103980c295fa374083130b8978999fd9107fd747e9b7da436e0655d98b9f7ec9c6dab30107c672662f2a3251b22d4f356eb2b9b17efda7f8831af274300a3ff8885b426f569dc2a2e2e889d311591c75cad84d7b2def5fc938aee1aa55315010a53ba7684f3467e87725766a157359a7150e947c7ac416cff1c3cd5467dea857a19cbf4722b39d968958a5bc282702d9491bbfe0dc0da66d185c7c402d279889dbf6393110a2bda297dba243040a97f31c1dc90f511af58a9c276249cc168118f3e0e106c08ea86f238fe1ec1507819cdc797ea931fec78efb6147723a86b4428479e07c0f68709425094ee8920eeeb8574d42308f477b1c3735f495327e6a2f5463a9af62664243af614e3f9c3f3633f565ce6847d934507f80bb2c7322d2f4d000321e42ba29b56325edce6e759a5f0c33e3bf2b30b118e1f5b3f7721c03714c9ba3456fc52752eb0d0f2ecead2fc69f7bf494355cb8ee5197efae02e0374a98f2d52567b149c8d90b88ee90a2654e98af51cca8eb4f8ad696b3354fe484cd79f3706316296126cdf07b0a6edc85e7c9def21d6f678db3aec125654059c6fc8af6b09b55b55da3b965f5730d621cd7891862fdbbf67ad95b273ad7c41b304a1688f928759d24adfcd03cb2e5ab0cf6517568943164ba60cbd5be3f7e8156ea882216ab888daa9fc966c076d4182619b07f130bc5d024fdcb8fbef4eda4b1d9d36cff38ad81439b3637e08506d4634538efb8ef813b327d364989aa2ac4d50de0496081a9a769da43ca9d07aa2e7a2f4d24d40778ddee024508cd3d0c2ee69dbb668ecc28e89606db326e5f4006104f393fdfd5078495bf1d0fdc4070bce8c6ee98fe0594a68b6cf7adbedd60a79d5373d467af9222a9958d4f5ecc6a17557830b968f4ad285f0d3e4e28e4825027c2e7aee309ab8271d31c197e0dc853a35f1231f42761a455a0091b7f1e404f5c33017fc86d381093a1096169afa8c4727c576313c4c1b8d701a459f2ec822022d766a186ae5de0c2bcb9aa9d8e223a14d23d57d20351fd26bc906eb54c7a05b46458531291667e08e27d23b3114bcbd1d4c0b06419871f30989e39436c9106232eeaab1c738b357354d7178ef625944deb96789c51c8c0eec9c5201727dff7a1aaca090c3ffcd2605f93ac1bd71a72f8b904edde8a278f4ec2ed1ced5a75b433603be0d4d8e3960a0ec5f0fac9a17968099a5ac85478a357003494b5c9d0585b050f9630a27558043cde17dca8daabcdbc9fae14bd9e99ad00f40bb770f42c6216abf81a6d29c6389ee7b5c540754da004a48c4a0ef64b86050d48ace841d847eb619d86af690e82b5a9ef9ba2f6fd5e2a0c0a4416602443b90d1395005a6fe2c1f5d0e5f3bc61b2e081e4c6542ddfb17dae94720bf07ee5c3a77015e74a85ab7679991dcaeb6e254f5072f679b64acfd5d8ffbac8cf60672385fa2d6955fdd1a22b0249f71d606d4426d53382cafbe3d4a1e151c05e78ecba99c25073b4df41323a2d4758f77d8cf3f06d9b006d745fcd68112d3f0d075976ed47a758c4c0929a7d524e808a4bc24b29c6cc34045c5c42932c696ec5f380443c9d9c48478c4367b2038dada914f9bdee74ef59dd369884e832a822262fa62a1db589122d8941b37f51019246a67a2bddd1a3e311da0a90d44e3760d46c14446cdd67e81aa533394e65f9c64ae2088c952100d1ea5814713625d749e721cb4da9d91f4cb87c7066097084ec31bb478c5d70778e8e7c104001bba1e9291064b899bab8cec009f5701958d117c02b268332f1ed63e527cc30c05c81c0318f0225225dd22e1dc420561093fd503c3036bc8eb56ffa9854a63ca9e17f0949e1e60046ccff8eb1f8bbc81879533d5475302cfb4ece028fb2d5a162132f215f96e4e0953186d7737e7edaf2f802bbbcc88872a5c7b242d915f50aa149191384a3903ead589066f07586c582224ecb3ab37c09e7b528658eb250de01282bfea8066985fca3f66e665c2e9c06a4d728b3f669295f587366c50e143ee6d8f7d0ed22bd9a4085fc47057e8dfde1409733bfb54acabb504ad3ddf8dd5152fe905564c81a2f2a1de0ed32377eadbf971e2482b9b0844145c236d9d2288f8067ef621caf6a2f9014e13d82f2abc2ec65970514477bc7503e6ba0485dca0b7aa2f5aab90f020da876f393babf00e0063721799afde578969228053321ac8150e7263368246964a1735c39db23060cf0b68bd622188d5da7ab00e344f8b428829979c12cfbeb32c8176f1c3b5771068b7b7e576a229ce6e0a938651887162b931434fc8d254241f79d6c942006b82f5e9211bc0af831c641b91a2469a8ec838675da7d5b52a01b9650b4a29dd3d4c72564dea2bda1a3cd6576da15bd90eaefee4917605bda69c1c3a8340cf32ba515d3a8642085c3b9436d5509afc206d0bd9af78bd0d780dde929e69da0c1c271ad78902fad6279fd10f270e407e763162ad49ac064e084307566a39fb4810413a0fb6c6ea04f9ba5afda386fe5dadc0bef8bac99605c4d12459a4cee918599ad2120c4e85e3eb9735757dc3e07df07c346967c20c07b651c825c048010320a291d0f2d6bc6e53edd078c52c985d44b0074f07c086c0efa4eea7a3e901e61cfb0f4386fbb9bc687a04e56dab9547db21e9872101f441d13cb6891aef2f3c10619f56556bbcd6aa2853e830f3b9c2cf4572d7aecdad55c85bc409264b19cd33b21b37089844f5c510c32bdf855f4a04db8a7e0550e7305c866f35aef17579eb3770817e97d0634a1490d191f07ab911154ea820bd08e882a9b702bbf34c95630757c1d95e9816945a256dd3c93f8e543047a24dd56b022d44d0540fa1d43c76cea437889e461baa2023a0022431c04484ce9aa30168269afeedc304b4f70b616d62c04f7cc03c676f2023df3c11a23929184d36903292d42a0ae45ea463fc9574ac447f2d83c54acbc9ead3811b927a9d64873f614d7f805e9eafac3386ceb3f10d2063c31408949116aed7644b9544b0e7e76e1776956a1edb8d0cd156b15176b2600b151bb1eb10ec13cb055dc6e9dacdf474e18a853267e5886d63932593303075cdcd80421680f7d1af82ef69d95aec84b2e30f03514b6fc9819c3a7f16f06d0940f9cf79ecf44534d698cf4c4b03809cc940c35ed2de8f977ea132103ac6b33665563fd1116906403d9d3b362ed4e146522f60b82c8ed7a2218ec3ef92d96c4d9af26b1604f372798585c2952887935fe6155e3401c33d83fa44b1f832c2469af09ec2eccfbba4f7a10c5ff3085155f8abe9e69d9e1b5bbc9ef7f6837f612619bd44e0253dc8fd5e0e1d3649d8633575c9843a78565a5f745b215e1263b032790c37070b368c11daecb43d915f02a7fc967c5d84dacc4bb842cce7adb05e2558a9a772c6f89bb2ce156268e14c2dc239000a4a48398fb820c11e7ec4621f55eb78583ecc8c1d80507c102a34d63522f4796cbfda929d1da166df5589510ea6508a429091afeea6e88d0671225088f0631664445e9100294d8dba8e87ef266580b3eeba1bbb34ae961c9944d83858f58652a115562276c4035d0cfda427eb6a956907776e7d719e866d90b683b787a3619ce3d1c1cad4c3c3330adfc3211ed480591bfe56b14bd0f106627035c08685c2737f23fdf4de4b4b0f7ba37752d8c4d39a353398045c3303575410ccd4d1c52f970fc1e6e31462644ee20b05f6713f4a7a10188610d71533d205a3f43eaf4f9d382f8a35e18638d20527341e6662bc3ed58ba844e8a65fa38077659aeaeae648db576f77673e393fe0a27c82d38aa108bd83eb6ca9f4feaa1da5c664d080568e5f861fdb06bec083bb4b5e9847f9f93df523b986ba8b0554941e52605604dd205caa197510d63f91749718ab6cb3c6db66bc95cecfb0389eca1e4d0e9a34183c74a06b899c5a16f101aae57393395900a718f91d0369dfe3728823587db4607449f1a0e40dd2970c87276805f7dbf9491bb3857cb49d430939d2db474c124b59d003c170e6e3a72ba893cc1aef329d737f1da23ad3954521bfd80598267f8a7a3d4f7dfefeb9c43cc7c9878aa80f74d240eb7a2b52c7a7b9387cc25a0ea70053539690b1854cccc9e1c30938f7c5c8443cb86716ef946f9e1029e21fe82bd55378099b8da4ac9298d580d4f108b3732d8b4fd8ec2b5ef1b6b60d14a2dba79fb67b207ca4ffa0a6ca27aa08988f650a51afea47c4efb4a18b90885fdd0106db24b93ad09aa836a9fbed5f0aec906c153d82e4eea02c1df914c19d523cfc7a12587d389ee98434be80f5de34eb2285c7765357e2e2f2a2b8d2671d2a9712d361225428c0f475bf609fe89eba672761cde87928e2fdbd9063f88ef9b5ddd2cbee02c4150d1f53eb41558705b9cf312a89238f19ee00b27532342984e42e38fd9384fed31dd341a5bbd075f5a0a2ce5df3b5051a0842107f8ae5540367f76d8a02939ab608bc8731c85e8cd5d5bded67cd759c8cf3ce6390cfb642a71783bb01e5958101f68a6fd86fac6ba07902e764733d5a891f9d3636be7c6b5e633ffe79249e571bba60254a48535c23b0250264a71fb071b47061bb959416e60f1e14bd017789053a04e87910b4c6827d7b7a5fa44ac5f94a13b2ba82dc6f87302061fa184365203b4d3b19b7f0b6d5988a0f04b0901d17c038833e8fe41099882671190a2c5613addd0194d9574a642f79914f0c5e9db533bc148043ce2ae4eeaccac6a936b3b70ba2471a1b750aa3ba1b009b7aef510df2d51a8c97c2ad6300ba80cc98cc5624733bbd4d4da84695c89398aa3103028e3e24955b12c5eb53ead3b1452875af3a9c127f4bec735b3bf57287aeb9e163efc98981cb888687de82a51a29532cc6981d9d60c349fd5310c228de6fd3b24e246418d13a55e9f5a25f78a5b80340048cc44036249a2da6c6b6d2bfe24080e0175ad3401a91f443ea03919504358403286414f10f0a3e52d96904db6228dc09f068aa8301bd49ecf28a4003f903abe253630eea3fb9622319619e1724eb0baa1dd5e7c2e84f659474646bc3f01eee49322f26562e1c53e7936efdf2b97161917141faf6735ee815fd1334c691e788ce75e49eb810e52029b4a75f97c95bb972db83a8f52ec61340b258db676d0874608cbd9030e62d53d5709cdf424d19fdf6da6060dc8e0275409da110bf8c453a175e422690317d185aa160d421984b1424fdf40622e2b91589d1a2c838c3190342fad45a333d1c4c6a316edf8f026f2e9128db02d0dfc77adcbd897b2eef52e2f4cea698ceb25f6c883a6905222bdf4067461862e7f4c455b99782e3aceba5e8efbe97f55892abfb8ece9e967baadcc1fd663d22117ad4adeb10d16e18f5bcb6f720cd7b05091b0f27e9115e149f9474fc1525a1cdc7dca2e30eb5a10b21630773ee4371c8792ab48b57ed24bf919bc7f68061b8137ae203d933d38c11f45448118a8f10c4e44de019d901efc292c535c86cc32bebb327f693d33fac6cece45d19074fba35222c95905dfa27f0aa5a2f3aa533a0fcd28aa834f8443e58cac4b039ad53e601555b1b22c56212b2b6ef44be9ca134579399b172d7a890a87bf2f6696a89b7fec8b40b101cf3633ab6aba323861823a015aea9da2f22a69ccb1ac7b76c89d8d737bd18d734fe90f79a56343d42b44f4b59745f8c76e92180a45318bf0ab39862b8ba45332f88dd78c4deecf5a9205295e9787bbc98ee273122fafbb52fa0163823448a9425640c1f845cdf5a99e0f9295f50343fafe8d2b000d0390533534012288a1de3e51eaa2eccff7dce2c450ccd2c2cb570cb273f5059189868641bec80890a4b15c9c7e1ccd113a2cc2ce08cd68f08dab463c006cc9f4d686967497c81fae80e039a61dce54480c6c4a39ae4e9fe81eea78878fd97329d805d55d5906f6a1807c46200e43d977da9d53b24712370dd53acdf0039d2fb450e86e4b9ff5500d3bb9231a1214a60fb76972efb6489d7d8743a282703edea11c3847539b5bcbec822be90d711e98a471cadd8ad700ad79b8d044f40c9af5da83781ca270d31d0775f8e9ceb082bac32c0decbd1b262c9d575e9599944f3530e6b903cf8ecaa21061366e5c1a5680d794972918a608065f2bd06be59c73d53bb8f87bb2f08cffa6d36632e2842243df75104432a14ef344f00f8074c780f039b3d6b405f50d19a3334acc7526294b2a1b11559d1b4892e6a65ebe7ecaea1b32fc275a80dc767f3f3d17dd253a1455931948510c0c6d3454c410d25bea4a298e6f05da2027932852a5b1380dc2d435895326b84ee93ca2822870df86c9064a520daae611c7dcff426f8761a15f8a72ca92223dd269918e1a2251c2fe1651774158ec6eb381342a156172f8825321a3300ae5d31a614e9b840b4157bfa35ef134a36d1ad70403153b5385f84f101bfbc640449c4d7008689bb5083303c8e902a2df0014f12c819ca5cf3a04393131d6174a63978ec234e70d87bfb0a732836b3fc5a03ad9d86d62b2a6b3d850f9c6b1fd6bda8fc45b69faf6d0a700df9576cbc723869faf7187edcfd2ca603ba7b07e1761baf2e3b1c21a0e8a5ccf9a72f0f25c8ad3c449da32412b7ba67e84d1706d604182a267ac31bb096cbc4daa79c35aa5a6394e218fe4dc68056dfede9ed8329ab87518cea53fce49d31a10c6313e7815a7d10c2efc2b1b7cb903ebcf6661ffd099b1c5885b92985097c079831dafb130b980958829e70201fe390938186ff610460127a120268244d7ef97ee941bd7872a87b4c7590307bd380e86e4719a1a30cb393057b4ab7b4e44eaacf9b98da6d1f65e053c4886d6faa954f4564e283e200ed02b7c8caa2a57ae6ffd7b0cc763c9209f8b034572f264204e72e675c30c0fd3076a8c27d534dc840af81e8489f8471031f1d2e8d592176faff6fdfa0ef669be361100f9316ebcb87b41f10ac68b95be224bd8d15ad09b541c5ec7f6da6b51f5752c55cf91d83535d7cef22231730f2ea2d7b1343f0202bdb603ec21f50559830c5b5eba4f97814da9cbacf2165fa48d5eaabc27b32a0bd36971d697d2b4780214bf2b2c99a32dd597fc541bddefa601965d792fa215543084021aae3d0d45202a8edd5506b4a951f9526f43718122052a6070027a6bfec15a2849a380941af545d16eaee189e243050b7501ea0c28e88bd2615a8fbf42a4eac882ba03f5e240f521e2c30d49a27ee3541f0d2a4ef5821284a1ca9e0ee6b56a0f3503052214fb50c440d18142136a1394d6507a57545f0c25922481b26528609ce0c4fbd3c25522964d3c8e6515993eb4620d0cec06de742ea20adac54feb0c462d6522408d4970683e35eb590a9f168692e4646ed17f1eb8d50b0ecc5dec5952ca8103dd0a2ee2cf63b7cc3b55174855f31d638f9a41387294803393e3d0fc5a8498d860659db04fee8304f179f33d2198f3ba554a8abde8c7db0bc11bbb5a14516977b4624652975ab3dda5a404168f07229964ae46381784acdc88cd64c37e6a57f2e8bdcb7c1ca713408395af3a4d8ef8b259214f602b9193ccbfcca2f2af5d7795f445eec675680ca64c80dada54586e2561c7edd8ff44d322e9e069c7733c3207bba4c02375e45021a9585b7067a397441c5523eb6173d60822044c17d10bcd901c6b0b4f2ead8646c5e960f71578335572b12882f5e36d05c22e7ee1e4c45964a61725fe03da7c660c1219dea4d14de5e0f96bec699307f02c36d7a1459cc27d3c0eacd08f04be256388576194df787453df0bbe78e5ecd3efdaf6e24a711ee300e524e4531cb5c3a02ab02bf44d803ee8b09c20d67e2a7a3ca0c92b41ff620443ad6c41565ee7a8c126c83154146183eae6fec482d36ed72981aad055378c691688e502aec975204db62b031e4aa6fc9ceb95f833095388a2b7a60ffbeb77679154c42c6843fe281789e08d8d9c24abd59716697a64e3e6a1c3c277374d10e3c7a59c95cdfa04ba3fe7f4d910b48258a44a3ab7a9f30b9fb68307dbb4b3186a638319717a957466bfa67490b53e3acc8a6b8f5ba6d3db318b37976463fe01c392e086c2eb9102f26360bcd4dbdf308200d6c2bf1e115dd00a06487cda0a87d059e3b605bf2c306bc3a478e76e708254de8f13651c734bf6c83aa11f7b401f22f7ceca972ed5ab1e1344a6a0a6ae55bc02359fc0fd46924080774d98c184149f95b313a2789e449dad28c19b05388f9994ef9904e482f922c65b06c63857605ac43451e3056878274363ba5111b1966782543838f924e0af9cc0556d923cc2611338395d2da08f8aa696427b895b5212e2b1b490f80704ae4ff417d6467b5042e3f72430123d1904c29ebd56e88c979f5030e9766295d8479ce7390290019b702ce4c6703658b0598ecdcb79fc5be307436dda436a9036e24b8c8ec71bbfe52f816182aa4f6a44d7b163b5434f14489c96116077f2ec60bc23abf0d12f84d0ac0bd4056394f6ea480ecc6440e4cb73ae1616d98b5e8f1c16061b6cfa2e3dff873e0ce8fb11b99d257c00e49adf4e327778710a1f19839aff7fc39e38461b3c15fcca57f0814350baee37e34c94139316fe630c2b7cd33392010ca1e140ca87121c7a409e2b91a1947231dc0085eaa5310211327d18945bf8640586db1bc0f8bd903194a49542103705606ff5eeb9c88f03cb8bd093ff8275f9c49ba1feee60a5e96925ce24fc72a2b275e329e8520a2fdd0fd1214dabdcda864fcece8335b09a73322063a326d6e85af2bda09ff6591b389f2148582c29a1a3fc9c512d8564308822384d3a4086603e0989496d44eae6d33e88e08ea75041759758145203f15641b5395ba9269776f6ffa58912acf513cc12f144134a47c47a9735dff9be7befb9ba770d69addfa35b5bfa58ca36ad44832675fe58d904c0810a82cf15375645ae8efe4966a09ee9e020cfeee7a73c4645d219cde66468a975bfe2e5f77b4e12de2218a4bfeb382901d0d3e68988271e85c82011203d05bb0f3cf51f53c517e536326103d30c537e85cbf8b6857959bcfb9804cef94b2d1ad0117bf7f232e307f95fda93029d305d8bb9d57b395dd82190a74408b653be3517abc193c4ff3c983627a5c1edce2343097f7098d0dda53af54a52aae2c67cdfb4090a006d28deada351588756ee8628541b360d1d0b0694a7def200031994ba3eeff070677cefd67529030c93dbb4ef6855dea11fc3115f7209132f2e30852ed7afc9101b40ac77cf30e95a6cce2b7019bfee0c213805b0c8375f9c09c8c584e9c8fff1bc436d4e86dde24cfa3da774850ddf8e4eeec9c9933b1f569d6553a119f7b1534cf0818475e389c614d33d59b57312cc10d4b01b7c1fd99fe9e748e3906beee423d9511a7724daf48b5ca38fba21d26e08db80728dd4dec6cd93c9e82c14980afcbf0aaadcf8e7fec30d54399f4caf085d9d00be04883c6c51032fba0c64efca66820f4778805428bb360f7f439250da9901a22d796c28b420d0fd1008201d9bd1ee71e4118b6b15ea4f0d59ed7ffb28c5c532a7a34e31d4c31c13f97e60ab291bbe8a406b068eb0d0b7bcb925bf51712d70996b34fb9608379067d03c6abd552b52757db3e2686350ea94864e3e4e10a39212e5d50d543fe0dce6a41ae3c69b95f419822b364c58bdc7c9ef58f20d649c68df56d3d5b0f764e1560c0cb282ba5f67d17fdd40f24411ae1838e40ee36e8d22dfbfdd831894acfd011d807f79e7317be1ae9f3d3a853808fd6bc8dadcbfc85f91ee5cd7dff4c83aaf0a57f42d941b2eafb76f84ad5387ef7fa5082b52a2a01f0e6473e217c0d4656cfd51a35c96c440b001bb73412664718018425cd137debc30cbb85fa3223ba37b25d09fb388fecab905db541bc24d3a22e49644188b4b46ff3607635cf16dcd3aafa6ea33e8df3a6f9a09ee94cd3d9e89b67b006b94afd7acfd29e72911979f88bc803e2a7b762cd4ff4cab317dd556cf96ce1b7c57eca8f083d003673a9d512e38a12940820600a7d443485c032314151059f400728106e88c806d6ae9dc0313710f0031f4cf675cf0ca91d80ac7bd506055eecdc8edb62a30816f983f321f980bc5b04da4ea722e84f7adc3a70e8040e0b01373032e80553ad4083e0eab93d755a71c6ed3288427a7568ac1aaa9e458ec3e1e7509b3d2c3d3bea61dde9ef122362ce97eb29715cbe48a25790d13d0f50442808254c9f2270f340a3971728d89ab4ba1726264820273ab63afad3a497468dea84570c076519239c73732feca4db2070e63ce04251e5f3ebb254c21f3ce44f786d1a47d8ea7b7147fa4656fc35cf798b20c152e52dd2267140345d208c984d916f793a0aeda075a5fb73c136b3aa448a915c5ce9ac9764162c8df0dff3b9ddc2974b2ddf71b4dcbd4365d672d3b995983ab5f1d2ead2e5b5a037cded8809d06df59f11da4e60ee2f01cddc7463906419d9f75c2ff6a824c4d36e48ea567a2c1ca892d2e936b651208d8fddaa2c0742f1107aa7e905e6a31ea1291dbb6fa3a8d5b4aaeb9ecc20e19d12b84c1f419747b4821d41dda7dc0eccc50c785acb962a4d4cc57b4b4f923bc789020fd548866a50bb73ba2f3de9628a6656c87517327f793aba919a1210897ba91055b000d50f8feb7d74e3788ca8262eebe10dd25dc058743354497f4754145965f3714fec9b5a5094d604976f32e1cf7b8e2eac6f101f306dff495318f2a5ac6fcb34220dbb09f8332cce2e02c91d64bcfa9ae0518dd8a74d437872984a64bcff0880989cf7960e13850655d0e967bf9a0eff441706850c83d87315b468288874c7638a3f62f998e1e5da68fdfd399c871e4564ac50fae0f8c47b883e21a9a589886f1dccc2c111bd6c6da9e03cae59f3bfcb876ee0608adcdf4c93d87b7342195422d86bba05c8b916cdb5329bbded574bd77943e1c55a8e6b8467a50d0787a61d0de4e09688379aaa76fb77fab764f2637a5568cdfe1c639d353616c580f03a224501985e8db7c15555b5dd2368bb95a2ea835ffbe1b0bca786d67a1bb9978c497d41ca3ffd0e9ee359aa0c76567a16ae7fbb583205495714c94289a0af7e904600b548095fcc655131b2af36984a28036f659fcdc1c39ad1793599747977c5d9075610bbae798701c7d751119bbcba51f0c4c8bee5c5d10746943ddf38d0b89c6a3ebd1d55d8e26fc37f6bc61b32b02efb574eb8dbd7e602509b9cf29327987143502c1290e0472816ddc380ef561681f7bde6b30e7bdcc2c00425ef5a88daebc40006f7c9cfe11e9bec26cc2f21b0418dc781e639330093e38e56ec927384a2a513ca550d01422f74fc4135708befde17a86c47ef4a48cfa3c40885228efd1ed5d9554130f5536166d12f307d85144d137903f23927524b8b4ea8b7a28ff815c03dc56146477b23f2119cc31987e0d36100c1f916ff3b8f43e717c906a5eab6bc21e08720d0e8dc1a68557c8cb8b06638027e85c1206b20d4231e09d0c66284c40d11f0f14dd340d7ae6af72d0ea68187030799677c420fbe003c2b60cba194c180ccd71d096fb8b8246d85c14f971747131829482639c46632a363f877c174317029a48bc2e482a848270e392109eeb595447b1f09a261ab0a579318a3f56990b3b439a8e1f7b85fd1d403b9d3eba646c2813a212ed00245eeb98c12b06e493c159dc61391b34f5faf14a1c81e9f733835b4f4a6a6bdb6787b08f6e7a63c0b1fb1010f6826769ad249adb7cf3308feb6ec5802549f4ac8de18e345c05497898b25a6b428c73fcc4931c672209800aa8442bd16fc6ddfc060411e3d0f7ccc3ef23abc94bb0b39ac4e39cfe5fd27b4b62f19c887fc9bffbdd10e6c29ba7c5d38d38eeafc50f56b90731a71ba4a2c5175211fe50c0d8c1393aa680c7783108961fa6ab263953beee1782667d64e291034e5cc33e91813ba335e3c1f59e18db9a042e8604234af33f4fd7af5fafb4ea1b20ffeb1b54575bf34493f0abe3ff9576228b1b5581434925bf015a19f77e3540b0a6d0013c0c3c0c3c0c3c0c50633cdffaba7be39afd5b2629ecb3df444b04924c29a5949227e800f1092124e340f6bbffee73fe9c07b207d7076a000182398dbe9babdc8c9518e407e6fd6c4f6b0b27f1d10b93eef2506ac7e48317a6dc62951f2b09b30afad88531b6624dd2ed8bf1a10b739812f4da9d0a272529e92317868f25ef44ee8a3e7061bc94f4792e51564b9f617cdcc270512ce9fcecf0266a0bb357f268e962fca885491895839c12421fb4d05464285d37266a1b1fb3303c5ed6927a6d5aca6d560a2abad4bed9ce1fb2308d997e6ad7db62610e934fe73374c7860f5898acea2a5ebb5de55c7b0e1faf30aa5f8798f9b330ba7585713feacc2879c3ee746df86885f1628bd262b9a72a09470d6785d9b58274b3247f5ecf9ed5e9e1631546b9b35ca3bae7274baa30e7ed0ba5a77da4c25cef6a41b493deeb13eae00315e67c33710bb10a4afc14c6fb933f29d929f3fce4d6140625c99fd7a7e39fb4998d33c647290c16cbbf93cc30cf69e50e3e486138295812dc774e92621d85c91085412749f435c92e3b7ae8f80885793dfca4784ee984c107284cba53be3b4b9e4c89a14f98534939cc7cd6bb2a714f709ec26bd4763a61146126d60926795d9f78a4306a3c153e3861f2d1bd64a2e9b47eae18354876c4a881a94d98342e8778dfe85c367e68c254bab65dc1f47f2c158f8f4c9883e51ca7b43e3db4a3c1b628684c18744f12b191efc7250c9e44774a92c9f86e751f9630fa08bf687230a5c7a424083e2a614edf2ad7caca7be2a68449597a59768e7f4cc2a05a646ccc7f6fe8d887244c1ee72b2977531f5d7d44c2acaaf29d5292f67a64594af88084497c3749278f264abaa44718abead3b5726ece424798cd4c12f343670d1f8d30ae5f899f37f24b4e3f234cbae4d9ff24d729d9838b305ff63816aaab0f459884eaf6f43b49da51f747224cbb9556296a08112641a85767cfc14d5b3e8451ef74a553eaeebe9d214cb23f8fea5aa8f7a8b9e0a31006515238b94a9ef25a4e088349ea4acaf22427ffcb200c7263feccfc3a48f3431056acb016532d2ebaca5b651b55a256129e5a421f8130e5fc0893d493c94909204c2aa4e50a5d52fcffff60ceefb8e4d72927f7fd60dcd1aa51a972e90aea83d9ca441153f3694bc407e36d8cc82dbb8fddd983399da0d5f721e753470f66f3184a75f0bc33ea3c9804596e9f26cbddd378306ea751d254ce76baef60d271bf3f5c76ceb9dac1609724499227eac94eeb604c2bf15574797b9774307a0ead50729ed32dcec16841ccc5f0510e2659ff3d6798ceb7c6c15c52a8ae4f82850e0773fa19694af0de603cd9cc72f88ddc60ca253f4429b1b46d256d305c9c24da351b4c522ed1b3480f13ccb406d3872f35495091d6bf1acc49d42acb6e889e3d0d7d0c5db1653e68307bfcd4a94cfa0c06bfd8493a49cc60142dbbfe347d94c1289f22d779d40996a60f3218ebc37c56ae7ad165fa1843ca3f2d5d4e4e0cc6151da2bdc5cca31606f38921ea83ec3e1d3098b74d99a72476dc55e90be67db12e71ee52c78917929ee48512faf41f5d30a520272e983ccbe3ad097372a52d98929244b73e5d0be61f55db6de6dbf57f164cd5a62c282db9f38c1e0be676538f63f9158c9e2f4ab6cb3197a458c1546a73f35e42bbc35530a6c94149e14eb27b970aa6cbcf22dc4a0ed9760a06fdae32d15f5216510a06257cdd599d0916541f05b3e7a5aed6095ea27a2898cdc3e725259e50b1f404f369569e146e9ef3778239989a3e537e13cc7a69727f599fc9ce0493f0a827d67f9660325953847aff24a2a304b3a7cf719affafe349824992d2c7d11ae1626924183bd5dc74ef231884c576ebef146e172398d74c25ad69714ebb4530e830d204192b114c36f2e34b50f937150dc1206f317b74524a47454230f8f7c997ae24d9f6d047100c7abcf5dd0465ab1afa18c3dcb7dede26a9b82cf90082c944e5dc2711a54afff88149f6a4eca209aae7792f8c1d2b26a964e72a3abc30a738af16e7b30b938ee96e42ce3d4f5a1726dd784bf7613abe9d0bb3ade93ca6a39e580a2e0c97964fd413dfc26cc1730e257fd0d7515b983ce7795275d6c2b8651b6fd2c26cd208f5246c5e1c7316e6b024a5794911fae464613c7df36c9ef358186f4bbe9426a8f992392c1e69a5bec2ecb57b729c5cb254922bcc2643e8a4a6d30a73521b258dfe529b21569844d33a5d77afaafb2a0cca2aa8301532ac735518dd5b46092add27b55361302997c8ae98a8b4a0c26c39e59e49de1e4df614a63c41b3abf4c549595398e478ec13438538497a4a61125df5c7548af57d871406f9b1b6a45fb18eef8cc2285a595289ea88c2b83b5ac7c482dc3485c278e25ef06b0ff6c107857943e8b47b498c58d1274cea71c4e8de13a67191a14d9f3022f44e68e5774af2ce3961f214a71aaac47c75366194df72397915fe543461788f267992b24faa4a264cf2cee54b21b792cb9830f97b52c1ff7409b3976c97ad0b95626b09e3e51069a6cc4a184c4e51d3f7d2e81ca4842a3652abffeb4914b5fde43c89b5248ca23edc739da5d15647c264a293e8a8d8d5510209738ede67ea4c74f7e9112651f394883a315f7c47987212d524392f2fd537c214164ffd65c9d0d733c2202c9ba5143e6f7a5f84c975fc8292f357ff4711e66865fa7e4b1a0b9d4498dcfbd5a2bb07536a4418cc5b45e837efddfb10a6102643259376fd2e86307ffcbeb25249fcb314c2d8394d12fc654298dfdef4e4b09d3cb783309d9caf2a7c9c10a20ac21467ee925aa998495a336c1c331e21673049513522474f34d86c943319849801f116d4f64cba8494c19c4aacd075413c855369b0a5ce21840ce652cf17ead636c504c760946b933543b613438818cca74b8eca3b56e2ec9030182cc8df106acb3042c0609239e9e7f9b2c808910b215f309ca586b8242272c2e742bc603e13ddab9313843b4c2043868e1b2806215d30288f3aa6ecac3f5f5008179236162cc791bba2902dd4f9f6ec1e215a309624dfc4c2975c532ab4119205837f284199c917b3541c0bc6aad5b992d47d0553a8b0a62dce09e2e96205e36cc9dfdfa7d48d5df04648158aa3764a9dc9679a4c05834a992fefda15d3d190292c6b9b957129eb82dcc89f27651ff231bc0c9182b14bdaffa9925733275130079d6326fba8772b41c12c679de6ee7d15fa2798abbff37379a7a4162798841efda34f68966853134c92905f925c55aac43531c1943f4cc80e2ae34abe0493126d642518bfcd0433d1e37b3f9f04638925364f10124ca2a9f2b1207ae49e8e60aeaab26d8b53428c8c6010bd26778ea51cdb2982712b98094a9c6c280b114c71be6d4525e1f5726808e65c73f247b949934c42305ff8974ba20fc27ed5ef18e678d9aaa49660e517209865ec2e971cf5901f98b7ed64a8a69b18cf7b619a4f6263c2a4de3d1d5e982f2feeeebccd69d32e8ca53b435c90e271a1d685a9043373612ab184ccad6df9898d0ba3e5f0cf8aeabd26d7b730edd6f9099f7350cb6d61ce12eaaf2e2db5307b49e3abf99626ce420bf3b88b6afd549985e9f3c7ea4ace9e3e2f0bc377d61d9d262d7e251646354b92a68baa515158984f2c4b72ea14e472925f6174cbe964937e27fbc7ae30c98abe8ddb5b611e953b44a6b55589b2c27cca540edad35d85f92c5a78758779275715267d922c234e1ca173705361f2fc514e2b840a9349c136439f0ca5fb29cc39284fcf353f723ea630d9977c39e7e82679ba14e62074f59ae778feb192c2d425eec7c498144fa5a33089bed65261e67a7d519873386d35ea87c2a4d3275733b7947e0785b99309515ff98441f4cd858a3af1d2f684f1cc721495844952899d30969c24355aff52893961f40b212b9b2cbb9d6dc22449267d88565d53566ac21442b5985c33132631ba544eb61113c6ce2596aa54973774f012e69ca4a857769afa1db484414feae0fef9456d8c953066bc078ba54ed3b44809f399ac12d77bddd3c44918ce4576e9f86fa6622809735cfa9bfbf97533b94898744e82343f59fedc3f4898c29ebaffdd1c55fd1e611297dc6beee5aeb47384e15e4fbe70b95439bb4698fdee4f4a2a49a3d3758c30d5ac5a4a49f49a4bdd224c1f4c5a6df895c9c71461369d47ac9bf892265b224c6284d2224f10613cb976f6cfa25d8e8730dcecee996d9870728630c7adfe59492a99a0b24298f40515d479f5799810a6bcbc26e9094a8b361984d954cafe7a4f82f492204c1d3ea246a938761208b3ec7538d10f9aa7030883a5d68a5c93dc24e13f18c48fd65e121dcfda02f183e94bd492cde2ec433583478d5e1e80f461b77c27679384061b1f4aa79af6769666e92a6f82aeed536f41f660bef8b2a773a5207a3099f6ac6996d79204903c98b543373ee5f4745bcf063340f0704aaa72ce1aa783675e5a00720733437df41bfdda65ca4b01881d7a91abf332af34662bef9dfffe04611ba2930b5207d3e54979a2fa25a1b4e4338c870f40e860da3f35977288b3d8d13994b5ce3d55e6bd65e633ab332e2c4c6799e460b238a7d2446c89cb1e240ec64e52cd840e11a29b83c0c174425ff00aa144c71bcc9a9d153f3ea72f79206e30bc8b8cd4b9d829c90ad20693b2abf413c478a935d9604a2525dd66e11a6ef758cbb12997cd63cb241517af4afe206a307c28b18e7f397eecd40d726c40868c1be4d8b1230d66113222d6e4fb302b8902081a4c494a3141589e77f4cf600e3a7a126257c6fa93cc607efbfbe8a32148194caa73c36a2fd6e64b40c86032515d845675de13da3118ea6e615d46de3dd6bb64f5b4247d2bb7ab1483d98336bbf4cac1e2c35d04903018548ea32ceb645cfc0f0206830cddc1f65f3e445b902f983c76be9df3b0234d07f1822945b992445ff81cccd20593eed1294e3b8f55ea34d892936c980e102e5ca62956f7a2dda59aa925698ef4f82e59399203c816ccf924b1a4dcf149fe2404d182f93ef8b56569133baccb91e000c1dba84163035d5958d7e484ab66c9ff0d0bb59ca9d99d5c6ab90b17da15974cfe922be46ddae48ed36a238815346db5b513ab9fdd8478d1cfb60a26394b6a85561a9373ee0008158cf6b142dbff5357a84cc174ba174568e88048c118d2e44a56e2c675fa51d8ccbec2a6bd9968767ffd2929092596205030892f4278a98fa2c54c409e60ca91e2a14f496ade94803841b11013aff9aa51b730add40d91a1bee49207698249daf0d0222dd776508230c1f02987e7980b332a27c101821cfc493b6c642008204b30967a7cfc93c465c890214308204a3028e9f38917e3f554de20493058ae0f4ac51242eb7d204830a9b01c9fd33e204730d7f99c09723f2fa89a57408c60d2fd99ed7ab245438fd603070937005204530e2649fb17fda49604214295ab62d3523697abdd18dd41866016b3136ddae98e1c330a5a094084608a7d2ac9f0ecddfe211c67c78c3070d4c081e3e8e03183470ae3d38ce4a442548004c158265f3e495f84e7141bc330e3eaa7bf74b6919674831c36663c8e1ac99d8e1ca8c0011b08c8bc8b20f20993f09d92794a829e3069d8299524edbad127aa4827cc6349141f5dba2dda450a229c483e4b337fe522b209c38dcafebe5c5ad4cc434d9847bfca462b9992c27999782d29152a267af7c31d3d748860a2133fadd66891b1fee725ea24e5b72489ae191c442c61523e4267fa78b0249688215209a5c4c91099445be132c63aacb25b66ec645ccc932459129184794c465ba7f1bd249e9130ee785b6a881efd71ee410412e652a273c7295144914798e39d64dfe7a94fce2ee208935e350b27755af3d35620d20863097b794a2593126184e9ab83ba54a3a36eab34d86af02825105984f952186f1d3bd152caa61d3a4e11e63c3dd20425965b76c6e338ca02914498e2b67e4739570411e698a74d7a7f51b3beb186c821ac78ed416baa69131143980c9142184ea5a092bba550828ad260cb1d3d749c408410e9d4254a8e35498a2832081411c4d565a65ad153eead522281308ad0134098b3f36399b0fe0f9f4ae6e549a7b81f0c3a899d4cffc8ba9374fa701247e50aa926850f06534af6f9d7ca1e4c52b23cb1c45d2913b31e4cc28ca55a93e7d3a79b07a359988f56b952b1947830781a31272b99cf58f00ea8a96d1b71b283497bd62557d349e6bd3a18ec4a90f31d647430f5487395df2e7d199a83b1d2a5bb770a16dd7444e4603e79ebfc49de2c1207cdb6cc656b2beb5decb3d604f17226a2938ae1600a932dc73f95edc384de60d2cf279750cddd60f8f8eac1764ff6748e481b0c2a498208b310a5665444d8605ef91023ce654b98157b20b206c3982cf5b417ffa2c3c7915220a206938dcea1e470eaf4c5d704913498528eac5297eea3e512418379cfbef366897e0c11b1207206f3e7bf6c71298d98cdcd604a7b2a45d1fead0ab24819cc17774d66af2b47692f204206e6841f3b59a1640cc6f7a0deb44eca7e2a8988c1704ae5891c655541e784c1243e072b77d33d26cd6030afb87ed8ff225f306cc99b9b7d362d35f182f1bb6449113549e9b6bb604aa193feaec5225c30f88bcacc0b9ba59275b7053543678bef96b560eafcf639ace434a3a451240bc6d835f9ae6963155f112c98f392aca54ad21626b21682c8150caa25fac5d3a7a45eb782298c8f95f5779f566d8120520583be2862ff5fb9649a8850c154a7ff763b8be9039129186daf2ae85e7d638848c1143a985032c37341108982f1f43e27398957c9d4250205e3764af9a2673d61647e46107982e135f4575c4eb6ce122798540a3a7b09d7324ae8459a6018d1f956714449755b8409e65b2bb9ba8392946a576409e63449dc9c8a67ee51748188124c8290f58e964e56253d09a67855a162a8e79e2446822996a444bf13ac23a096c473fef7b007448c80ac96aa757ac5daba9415f25ec9d3b27e9b448a600cf78e353bb1f472132182417cd2ad761de49e884586601e31e1b6b7de2f762f0473d68bd5a95507c1641c0d44c6305c96d6594e0408e6b8ac3357f18bfcc060293fc686e9129eef905e984f34d11c2da35bfe0be185395f4fe894e19bf55bc82e0a225a166a59e912a20b93b45f628d34a1f5e6e6c27c5e29c8fa2b39744e12820b93c9497b5aacd7f4a413720b53c8491d5f4ab6e75d43882dcc26850c95b49fe81926b530975e963bc153e4654f0b93e41d357f64c7f1cf67715c279d67a993fa8310599824af3a49ac105a498ac5c29c4b5eaebb3d4b1542606194cf2c599f0b7945ba22a415a6dbb7eea02e7417086185f9e295ac8b65073bd53e10b20a8388ffe8d94c8ead89790e1b61cc50c596c2855cb05896ab635d3872ec4866702a0c22b663ff27d9717accc01084a0c2e0f5224557e5716ccce851c3860e1e653cfa14c6f0f578c2a7da8e275d1b620ad305e13d26c48da530c568ffb5f898fab691c278a2872795d3a88d6914e624a769e36fe29615c541586fa69c264648284c214f5adb37d5b5350a018539efb484ac132df9d6397ae000c10d423e61369ddb2e79901e42db219e1823a413288313b809f64a548b16008810a289c458b1dd3125a67d25241326031326e32e61ecec597212b1a4252cfbae345e5fc136cbca4d54088b9f06dbe120a412c6d84fd245359157d9434a187c84d64e32da9b84492cf1e36f76940d21923009937b15d3947c72cb3c2261d412456de4bbeb585e5f10020963f688dceeb62c69cfbb47982e2b9999d49fa4934cee1c61ec1ff19ec3f392dfe8ae1186bff9144f9ddac17e4698bc6664573f5c3059bd5b8429e74e29e331ba538451b663c96eb14f89267d9708b3579293b88e669d2d7c87087379057daad41c720893b7d8b7852a65d1ab358449aa2466a6cbc95936c72b84b9bdc365ece42384416a0839424815d35db941183b4d6664b572da52c11384d19386a8e974425db4f00261dc322f698400c294e3e77592e0fee70c1c3970cce05143adee04217ff04bb55bec9464cf0fa6930dd929587cbc93e4fa501c6972bf5fd2f0f86012da5bce52f6d932d587ecc124eccbe46ac3fd42881e0c62f2fa43dd7657cab20b217930e77026e2cc3cb5e2c283c14cc9a33c897ac81dcc4965fb8aea775b855908b183396647f44c539494fdd6c124cb86e87237a5b4c65608a183d9fa7a66a45bfcec979039986a94a7676c89a7dc24440ec6f33cfaf2d746aaf53842e2805b3459fdf2352d84c0c1a42e09faaf90375c881bcc579f9498afa54efcd8869341831036184d3cd194a89f4a3c863670ca87903598479a94a355124f4f9942d4608a4f4af6d139c19034984f7dcef324a5fbf84d03e13869470141081a8c16a7774e6afd1cac0a3d70902680238c1a3c0e10011e1310e386022210001e2999a100097c0101ac09944d00af2ee401212503598635800000c8814f20015ff4e021060a06008014c611230c1cc7c60102c063070248c0a3868e9300006ce10b007cf1c51702a8800234f0050f1e2e630001383dcecb2000004e8ff33976c830c0170260000272e8984103747af0983143015f00600106c0190700630a3a6e48c1006044016bf4b04183c799310301604021073ad0137a241e37d28d0280e104a35c52ea3f4a6b82614f3e417fed789924648249c776cd94fd8df7c98d7483178c25982cab9d9c092a1a6c39d0816ea41b7b23dd50309480357ad8a0c627016bf4f81c37c4983103016020c198ae16bce33ffe6f8506973331ce6ea41d336c50e3677cd2418db61e386a200f1c357ad8a82186cfd8916cd4d071230762308e80357aeca0c1c3c68c190800c308e6ff525ef921eb4a892a7988e180138cc0010609308ac0d77b5d148b75e15c2c9b784a308860d6bdf4b12c95e55402c610cc9e45dbef09e59554900c6008c17895258e129f6e92a4c7716c9c207d8e1294f4397024821104e35e66c9f4bb4e5bd605c01823bbfbb4e06131e56b43030308e60bd2e4bc1565b101c60fcc324aea4c2b2949f1a47b243568f0681e3a72cca80a8cf4c2a05aab3af8bd75a88959ef082fb8ca6e3223ee61b14accfe950ce1710d467661fe524b2a86c5142bd5882e0cdaf1eff63f589f58a2c1f6388e8ec31f8ce4c2a07bbf2f9432e1de8c341c23b830757d5ef59443442dbc8579648525d1ddf0be9fc7b1610bc329b12a494c30cbaeeac05a1835df3fcb2f577c2d62e848946cd068841626f95561d3e7e34489bfc30423b330e8a0da3d6a7b9a945368b0d5201d4a2c40c3882c4c9a9e1e2d2979c4c294c72a49eac4d584117304162649bc8af2203edd72a85e61708b6196e604d51546d35df9bbfbf5452eb863a415a620fea2e2694ffa63498d15c63c93224ca466fca939500d1b2928810c1966bb8a5585a642b7d7b20a56b12bb53b2d79c89bead022351a6c09c7b58e1ba80323a8305a4e35224c85a6a8dcc829cc7dd19328d3474c61b8125f43c52941c9b58f94c2242f0555965be9933c8730420a1c058ae242610ef9de19429a2a955d5074f1159fd915ea274ca5e4d4de1bb1a2e48883844355308230762412e0ed483d6ac060c4132671f92e09364a4e42460b8c74c2247a674f68b919f9493861ca71dd3454da74dbcb260c2bea63a9f956ed3d35610a192d3a9e3a13a6bddbcaf6922b99b83061ca723a4d1aed13c47a5a18b984f93c69b1f51454be545260c412a638c264239530afcea9a8373d1a5691214307239430a52df19716574a1d9021e3c68c94929149183deae849654189fe9ee888248c7957f23c9e2044a509859148543a67eb24b11b2390d02451b2b7e4ae998291478c38028fb770b7b57011bb4a2a4a97543b9ac148234cbd7a7a3127ffa8ab30c250e22df6a2c946166132a9aa5484a94a3bbe97141a49c415d36bd5eab5dcc2dd783e41c9f2b6252388404976ed667be24d872844542b996cc410e60be741c9af2f9f04b91026d3a32f99a02c9558b28430c68995c43ce7537b920661ba52aa640fffa4e2298230c5da4e4156300361fe7dd329ddaa114018534b6811267a7f30e59c53a7b5cfd1bad6113f68396a5efa805aa5e4aa226217eb2b4d3c1d4c900ba547747a8cf0c15482e83b39862a314e6c640f86d1e1498f5caf07933261f6c34feed5fc913c18fb4bae0dd17761fe64040f46b19cb36c27f9c81dcc722e7b3a6233dd53e3066260c40e8dd2a2c43f7d60a40edb8a923cdd59e5ce081d8c69c9f793786a27db19c1c81c8cabdb299b2585032372d064ea9c8bc91b188983712fb793b0b2bfa3d23c56042370f02cfe672f8dbc0100401871c3b54147d890236b30952e31ae53b53b7ae81851432998a6867cd855ab59ca3293ed7392449a687054309206a365cb1851428c92453d82067352ea4ad049f070aa62236738335c194cc60819cceef184d6b0f4188c26892849b7c5236230969c6222ea3afbd61e09c30818cc41b9083dbb7ee40b26438c112f98bfabb3fbe9f8e06232d20593c1059331b20593be1484b01cee112d9894a8a7aa732a25479547b2605c1344092a75d20b5ac40272afdd5e5a61c166e672dc7a8ba7e4d5e593072357307dd80ba6c4782356309f965568ffff90591aa98241d9896e56e8bd09f96662840a067962b157d2e3494a1e9982c957fcdea3e59a4bd1458c48c160d2ba5434efbd523d0ae638954f5e754a3aad0d05b3ebc6a965879f60126ecb94e67c4e7a197182f1bd2e7a585652a32e4d30fd5af59b5c71f2941c831126984a57d07f69eb74707509c716f532c788124c95bd2dcfc59732fd26c1202b98b87fffaf2cc24d469060104f6e712fea82c9d1114c314359aadf258d18c120bcd2747d68496a74468a604af357399560619fda112294cbd52a45d5ab2cb57bc62d181982f174d0b1f7a0d527eb4230a5eae7fdbcd95b4a07c114cd2a9e28ff1926a4236318cd2dc88ab858927852882340307a76bbd6ab10477e60b02a534ab8fbd58d13b117a68c4fa3e5b922f2c2249ed826c9efe3c1c46a1786ffe07f314b184574611af5b515bde74e9c3f05915c98ee73e89ff5cbd5a9435c1844b96a98681ec5a46f614e4a522949f1a3091e7d5b98e3983c3a9a7db5306fc7f1baf3ea86082dee18d555aa4df65325320b59a0402416b0c057f4107185417fd0aa95fbd20a4cde82688553970df14ecb922cbd5c7dcab3c25c7b77722a3badc23c63d9f3c9792b7ebd24a20a835cd549ff1f74a714a6c2a0a4cb2b39bed99612174185e1322c7b124dfd7f7da73096ec736df21626c913408898c214badfebfd52097272a5308d099d53714452184d4ac274aef551985297f8b8919e53df2343062212444461d222526b67f3b4c41b3114e6137f39cefc642f538a80c26c826f45d323c38851a8546e66326924108902028148140cc3a7970900c3130800103c208cc582b1581ceba2f801140002562a20342e2222281e14101c1c1a1044c270280c088302a12020100686838150482c95785a0f8586c3a807e85baabb031791c3d33dd556759415c0a112f08bc4ee86139a0ead8e45e228629037dd3b9c8bcbf8cd2ce2dc6697badbc7840730a46989778ee93ffa5913aa1601eea58a88bf8dbbaec85a7483d00e43efeb2ca3c790fe4bf209ec308647a676e55b134bfc9fb4f0330e38c4e4f27fd88c5249d23529965c61bce594509f253d84be6a3b39929a56334f1ff59f61a84671cd5abe64c6883a3818f0ad36fa348bfdf3cfa93d90f312b9ab3a5a2911a0ae58bc1b1e3253a0d3d9fa1ef0afeb7aec75d05bde4a35e9a23e283808b3a0ec11660649a4e386a1582d438f2223e563c6125c7fdc829cb1f13009a65e109996490e40e86123c5db683023d928abbca3f839374b66c2761f87ca63f4047eb8e2951d525649c4d7956bf95609d0215db13ae1972010b012bcf7e456040cb22c1a5802c116133318a1b1fa282eaa37e14828bfc112e4b5aea956c54369f48b20caece51aa95489291ca3d5c0674d10b05a8e681531a95732bb0c3370e06d13b1cc4bdafdc3c727bb16b7088380877f3727eb8f23bdb07e575e21c10673b2b0e63194e04739d46573c6e903cf8a1c85d0434a760138a8cece18ce111e9affc868908f44763861ba757681a115df8e246dc6d1e22be3e4c137dc42d5ebabcce0f4a4f5078daacd97962fe7fbca9bb40b07d1cda5d1e049c45ede48f404777ea0b6420ccd712c71d3addfe0af4df588468c11494a8b5f29b4825a9362e27ea5fdb14f00a117b1d82276ff0be8961c4d5778fe73508e1113831efe7a08415d91f8a80cab6ee1d7c0219354fc17b002c27b8ae077f3d8fc0a9e18b9e3f3e56e07a02f1888a59dcf282cc4b45ed14f9b7a18a760226e6aa73a0d3b4dfcd586c560b3f1577112234f489dfa2afe2f4211b73d04f9c1d683e17817178d92e4fe9d2f5499d86205061b3871ed8a1201c8f21560a0dcd16091eff99e74b4fa6a4fd06e4e8f165ecb6a362c690ce12e4d414017ffaf03e3b62b57c543eac2acd22a2c2afa82ac981ce9786b43bb599ac8efc85e358f7d6db553f2d4eb84ebcc63a9dd9593c83209126c63b6302b07498c4cacdf335627fb5a0eeac5fe9108c97a082c8fa2dacfb1447938654b16b10dd1e8e8305fd9230ffd73c156b76eddb98f4af443908c86bd39f3491ff3914d3cc682626f0c4b3605067be8aee7b69628aa661334281f11d4275c3bb19abbbeb9eeb098431c7933028a5be3003309f7f629714cd3ce25492bc75929fa9e65c8532df2346a211e18cee714a0594335251d715ea4993a8fd2f5563c0b7628a5f8662d75841840d36d1e55e4ec2b3bf734a469dc999cf3da1f65dd12ea3733d9c5210521772854c5cdececdda59ebed2aabbd1d48dbab51ffde45c59baa7b822c494624f949ca291bda8c17f41572aee45a70e619e74d0af7fa402d7f032f7f8a284acad046f4999dc11a5fbb7e7fc8bc2aa905d4a35f0963fd049c0427251ba1b4d910548e274c8da88460aaabb3a8a7bc4e12e65299d51293368298c1014ef42b55a9eb9d54bf90269a9c74b1cc50de8bc028884dc03c4d1a0013b6af68e82bac1b3bccdeed452b4d5f7641d0d7e7e0503f2bd84feedba7680c06ce3d5ac33dcb6220d818f60bddb148ce512fe600e326c19111afc2aea374d1a7fb73e46e846066f928a770ca173db7fc5232508c35b5834daa6dbe686a1f6c5659b0d725c8069f8687699a8aef64f4b0dd55d8a750634b9f34c86db3bc2145dac51fea1ab890b97c14a5aa848261e71d61d101382888dab7677857b6be6899d00d9cf455aafa7e615ff6d6ac5623bbb362bee2dced200b0a8b7b85180d7b1fb5c16f45ef937c99c595719db54223da88f1e11b90cb262754c533067821320235560cf3dd85a508ec46bd95a68625196accfece1c2ec954c929eb3aaf73a5f135219dd5e73ab6f08989f1d0fad8bc7d1c350bce3de1db856e7de1005a355ce7b2bf76bb1c1585abadc8ffbcb3ecae760c7eddf8056912ebc5dcbe3579b55a97101906d80e85e9b1f6241260084c1d2b09fc4b37e1ddcbdbb87b8868c9f10eb5d017abb14ac4edeb7844946ac8f22169495a2ebfa20887b040e9476a0b6802614ceff7e05108592ca4ff88c74f6540032fd379ae4e88e859bdd9ca40aa8551e2cc08aa2f3afd9ddd5d604231d6e6088c2206e3c57897960c145fe005e16c26d533898c19eeafda32a35251d6f19c867edcb6769c1e25d0142127011d5a164ec89cb4f787667677c24d57c433bcb9bee73f7580af93da639c64b25fd50a7bb5827e4acd8bd054d8b192b9110b8814a738ae75655009cb8a1fb26c6ca29089b961c82e2e46aad7e90d8e6fb32b50946d01d31ec42f86fc703b85351331efd157c7a55586dd894afc3c985cf00e771f526c335596ec353b5cfbad3460850c580d9aca1d1526677e7c61b8a8e94d7306d4b33e637dba6fbb9f2f0ba511ae822bb76060b13239fe3a677978581e5a79a285c1dcabfeb5c7682e270d81e84b6140a8729361be7cb969f38c0e51031adf527f72e25a505cd6859e4841707504003022804732bdc8ed0a4eb4dead56a38c8390d5688aaf1196872c03a0cb8597fb5599cf5531645851dcc3e1f53abeb61d88feb9e6ed641e7751b5ffcaed4a5490b240144ee2197640428a46ecee57f0ecc2790c342e49fe31136eef55d6fa86b467dff152b0017a2a181850deeb6947210ec04252cb68596d1c5a0f052ec02ce1054517c936f9da72b8ff288094f5afa7644dce8625b346e1ad009d20cd00f61283340112aa0e6411d7d16eaf6ebbbbc9160dc6697a3ddbfa968cb5e46f19b3e10d88059bb48ae2268d7e9a6e38eef967a8413158b937a0c7970648b7e7055764337b3bbcc2e34606077ac271f802f1ab7d3dcfde5db4ecc2c630a03dfef539106606a44fc6a3d9669912c051d0735d27a153d5f5bb896508b063b3dbb519f4c490a4f3b7a455d8db91ce3770c32acfae212ab00fec432c871bdd018a514b397df3a25f1c569103971d0321173e58b1533aa909e4afa4e4d9917e45245d6cb15e373573392e764f9c4080193825595abaae235679b48c4c43620a30c009bc08f6eff52c29a00c996f05d8398fe68a026d1b0303d98e443601e5ee2bbe246b7003ab6ece6a46faac363818dab69002b2e2945dab3d8687dd2f5dabda10a0e5448f3932c98e232371278e8c38d575509b2e65e28e6a2aa1565ac4d99b3f179bbd681eed7f14169354f39f5a15e7e3d6152179eb236de8911e63afa038ace68f75857e40ee72397e96ddf644a28e9927a6eec6373dd02d62a9ba5a756b9820bc1735ca1143b4d1921283a6e20064698f83aabcbadc2112796365ccc954add869cc8fa5283375678370283b07ce84d3a0d09717250e0310d225857583acd9cd6a476ee998ab1c34cab614f3e16a692be27600970c5b8e21768d3e5c52f213e00090b3e636cad431bc775772bc5f6a3fac0c38474a63934d65245d4a6aaec702bdbf521c3a8349732acdd745db8d39175b169ae2e3b8630ee0a89d50d8620d615900950039eae17a02b2082f102127e11c75805c917ff13973e384b949d0f6f6c0d1d293884bd3987c693a6d791639df770afc81a26317f99c15758db7c4e6c66b928916f0460eefd1f969806531c8582c621d8d0505c1e1c3db56f5b108e2085ab5c2a7bd8620c599f526bd0cef6326016f6b459ed857725766819b63b416170671716a568de5ed9c55361107fedea58e38fbaa6fb706938b4dd9b393c961857b548c72792b42edf5d5320d5c6e294bcdf9f973bdfb23509f98d7bce6e8cc8a78a74f7f03002ba31ea732b05567cb10fd64649682680e9ab8950de8a83aa9acd433c408feb921ca8065237977ce348887c4586520fbec6bf0669d42c36c133e9d779771d4b757a507e8934471694da9e6079ae5122b49b62b4f99b85b187a9565ed61e4efe0efe269dceb3d7548168ba333cedc502edf6700454efdd4d2ef013ef61f5d8820ed31df5aed57b08f815c8ca8713b12747867e0b35e367647d09a8abf897ff1c39003a63138ca332e719d8653bfa19ae460ba035bd74628a1e32c362f85b4bcd2e7b1294aa0f55a3b86c469269b9766007e6537af0589cc4299e985c14ed45e8aa81884b9843063d0ea0e369adfaba7bf10cb0792add8ca09a4c0f80fa774ba3df68489970dc437471d68022c14a64ca4f5f1b9b7d0c8a3e82d360936b3f754b4b3dcd3f46754615b956f5e510e31067ae0ac17ea6cf87e6c1a02e83259acd7945dad46dd66234ee3e51958876ed747e5ae0b65aa3212ac83debac0b0180fb754bc4693db84e8149b8170e09104822b6d4cd676ebc4190185ab66f95feb41e86c810b0f45aa9db58cc978041e9d6cd54e86a0d43ffbf3f227642f9ee53e7b23402b158e74dd97a94c62960e084975c3a3e1059f4c4c15f5b82b19b9daeb2e3d58ab74c0949cac69b2a525453e7141c288669a3e34dcb84d0245c5595b79e7a9970c128495f34a709dbe312b0989890c79243106d0b68c0fd3ee55fb26f4319cda16db83b79da1c324e96249c6f0813279fa0967167ff08e3434cff3a90299440b9d4b68e88498864af5246ede3c1c7894081618bc609ebada9d1f374e20f2d0d418526d1cf6a974257f72b79717ca98c520367b068fa42d99698e1a3e128764dd848b19e396d9f5c3c4da8dc17c7416905b4f3e1746a07624e644eb48bd18cbbd9233e5397714ded57afb19ea9f351e9a7a6651a9329d49f2c109ed0c479412db83758e0d0ce1f3196cf09b4ff4c2ba23c28fdc2a4c532f49d160bc01348d23aa812986f441a94e4be16c7ffb23af809f55e4ceaf466ba0695387a720cfe09fe365e219f0926d3216ef749a45c089aa67e15054aed69ae4a271069b93c24ddeb58836c37c5fbdb3c560632baf2f7d4c11d3246c1c002c2070531640d48b82a38401ee48ad6db5547d9990ef28d70458a57857e5c0713640ff8af85697da9560c001b019d3985239a1ab3491094dadf55892fd95392f42415eb03f5c1ab217529af9adf032d1cf4c830ead491411d48c6f9dc13433d02385a7d019660392721822d5462c28e080d6a3c43e11971462dd42172fdd1ad05e311dffd56d2e268f41e01ce3673fdd481700c9b5d878cfac0b6a810c12bcc63f8112b421a0d712b4fc2a2a709ca865f72049212ce3cd0d8aba5b51ff277bc2fe071486e949f9af0d8ad78dcc47a5593c760b726fbcad2dc48e6a895cfa9acf65e5354417851425c6cc9fb39b677a084338490356c813358b084d656fdcd13bc60c55eecdbc10d28947df0e1b4b21edb38f43da42a1c75ee7b919686e770174cc1630e56f51e77f394a0e79103452e79196a0a72fa5106a46a394e2294d62f6fab207951754b161f2dbbba354137a6c3ece3699c9151c5def5519fe9b500bb5ff367d8162e48245b864f2a8f994e4ca4586e8436f673c0b4f14d13236ea7879d28ff291b2441ee319bd20dcc315931c66b5d205a03875a037f17bd132c09cca4cc8f5291c7feab2d7bb0d7cd55de46551cc305da5696720f5a8861f31049d557f87bedc6e2157e2022955e40dd6ac094c28956be2e96dfdbd887a3dc134cbe442eae0d64bef8f3c51b2533cd909f2a72c330e99bfdaa05fc61bac4ad93257ac63be82317499f1f92106a80353226f0a8e235e1d6894b132dd64132e04bbdcc42aa8bf2c16883d3218dd7b452c5ca217da4d9212a74a16293f357c731c67ea9d209be9fe4a6a1bb1d26022e19dd20865978e84cddf06dd5f899341af6ce3f9f1dee6bf62d5103eeb63080593b53beda629a62a65145428688b4c5d021dadc9bd6983f6da4a620b0aa6c1ffd5fe395183b4cff2f2f62c20a2e70de3b74a985152698d29a53719b0597c9888da9b5d7f4a0ec4692cb0b2e422ce4d3d43ac8c8da107d5e0194bee7826b77e69db2b517ae4e2983739b14b9c83ce090b3628a5fa7a04e2931f678383bd4a384cdc1eac32e5144c4523708c34d86ca415de48203259fa996566b8c8cb17f2b9667e0d4cd3b09b722d8256f53bd09392ca027eda7251672c4446f5dd4455c6fd13d7672662549e58d16193ba8f3963e1eb8565a51850932ef7d35afa96216510aaa9b323b8ce660764b953f022435f2484694462c342109b2276de449dea44a86e4a42859ede24295e4ef1b64dec96b2a3d916632159cdb4d692e67f9fa7d5a44b3ac9a948b1467752dbf96a452149ada5709e5a91b8c9780b2c687231098d5775608a482704a81dc9d3ab33c3ba7d4f2ac8c272f9b061e039e2397067586553f2bd5a4aada73867571752e197303615e7ed9d1ceb84c7e020890d5ea608d9c77b27513a3af150cf8fbece7de497a91ed57eb945e171e0cb3851bcd48c46d391a8de44dd32099a01ef30481d7823b89aae4f71654e0e521a9c6b544bc5e7778fc04bde8957c594e9da279208f7121183be842dab376e3870e4a599b433936bcc6484058cd75074541e78937983af9b5685f6e4f1ae01916188bdd1beed6eace4a3f6320a7c2b6eb7f9f3562113098ad469cd3a8ae5f878831f6b15a80f245aecb83110f7159eb722285c298fb84563980061b8e83131737a8613112ec5032c0a6a32e5adfae4a3343f2de4073b3d2552337ff7785720f80dfe0eee64b3ba8f3a1f25918b947054ea687f56a257b38247c3d74f0d7d9a912e8d214361776ee9e5e8e5528b14566cc311ca210b263bf56848c888fbbf0a0faae0e678a3c141e29c16f2adaf39b9c2fce5dfc431e58fa01200043062fb75c7d01b9226d335ca340954789b15aeaa820dabf980a6471b71eecf5461395eaf721fa26eae08d7efc328b05af10492a7795a399ac6166d32290e792537c711e0dbb0e7eef70f6c6d4a382ed927c671bb9df750848a09e7a0938c5898c9ba0a9c5086cf5484c28b1159683d4478324dd38febe3ce663d5d27ec2d5adc0643812887a5a352f4af0dc326edc90ea6da116ce1613893bfd39a9beee256b7f8d1f768642917c88e64c876cb8b3da52397c7598fe5879be8f1b1d854b937dd57b53cd50784abb307203679a1fb8e9122b6811035a8355849165fc5a99b6ba836d2566ce64d251a63ae37ec3afbd775fa5fe0f4569e4445092b17e7ec5652ea56367547b2afa8c0c394cbf97d94c7698f9524a2ff1c3face632d3318d5e57c964f8815cfef69cf435731a0b4af432e80429afd8d74022aac4b3f1076efb2a1f166f68a0addcb2840f550bec34e8de083acf292ee58314ca5b583997899d3ccc9eb56305df1999dd365aa0a07b617a547ce8fc78b12eadcb54815ef9acde66b44e3baf51ae47f055ef03eddd79f1ad849781f7603aa41ed08392fe28ca729e847886b299b539327eb0c537f08ec2e4a4be6d43b8d5dd51ffb3d0c6bf121ec8537e650408db5ec0b083ba9838591705dea8808cf714f88c4378b512c0046227005a93a1ae2912b120ce73fb6ed3f4434791ede482b4bd2a2510c70fae0966d9191bf30a165b613e0f9cc3dfd0b6c371a5321afec605709c57fe078c646969a9b3ff1b7f2e4bbaabbdcbf0fa9513e8347a6dd121b6113e3fdd1a269939798e7ac6ee202b1cad94c309cdbca202444e4ab90023948d9c74182db3d787d1899780a09f66cac6bdf502698f87dbd9d9f0c0836d61bef5d9a7c891b326607eb4003aae38630c06c453698cced27ef43bc010269ae7d8856d23b21f730fe5a5b5b5e595d35864c3bb46d4f920b64f4acbcfeb8d17d4bef32b5a662e31cd94fc83989e2bcbfeaf399399137fd7f9b3dabd6a1ec6a1e5185297676482bf946a793d5699ea552728d75fa86763ab4768a9d72e98bfc9c225f2ff4bca5ecd4476850a17fd3eadc4eed2113c0e30e7d20270c39e60b1bc61fe3329448ab095312e507d48b3283cfad8d4e2674651cecc2a33cf55df901908932763d6ab2b5fa62e3008da67630f1842d8e3bdeee362c772b7cd2cbaf4bbdb9307d38a3d1c39d96289140d26321ce76711cbd7068f3feb8f9c652d86c205f7b0fd17778cde980a2bd3baaad6120e04be9e45bb2fbcb3d88fb08ca68975a8b5242784b4ac5059f57cd9551aa7393e934dec7137fc2ced32976ce9cd26b79306fc1f99dcf199628ec0045d883e5c7abb292d18723f922bdb55bc6148bfae8dca08ec6f47b5fcfae29290072f44d53d6f0fdb8076d8aa18d16bbf75436cf389946276c120fd259c0fb7f1579daeaa32c7a8a5d01d90a1af5ce547a59f2d8d1ba61836d155e4d94ee192583bcb2a1741779318fc2ed3b6ff326e565d899c62231334015b22b07f77114e8de0aba74e7fc8cc2b0d02c2db378e4cee1da8789741591e9d007898f37f12465127536f23edc8bc420f2e37920ef0e2ed2125c3e447f4c38a5f4e0cada336c6a10db5871e8cee62c0289e40204915d91f83618b459627e7ad36e10c52b569cfaa49ed2f33c9727e1ec9d6d33a6604295f54160d1a58eabe2e93fbbb9485cc3481e9f90669601f03cf09ca0e7f7949e475b4454b77772d27391f2d6f80b7a2b9b524f422686517932d42f5337292de72775964fcff37342cfc8f379098edc2d3f5b61f4ca0f2ba1763ccfc3797e376bfa01 \ No newline at end of file diff --git a/cumulus/parachains/chain-specs/coretime-rococo.json b/cumulus/parachains/chain-specs/coretime-rococo.json index e69de29bb2d..587be650629 100644 --- a/cumulus/parachains/chain-specs/coretime-rococo.json +++ b/cumulus/parachains/chain-specs/coretime-rococo.json @@ -0,0 +1,69 @@ +{ + "name": "Rococo Coretime Development", + "id": "coretime-rococo-dev", + "chainType": "Development", + "bootNodes": [ + "/ip4/127.0.0.1/tcp/30333/p2p/12D3KooWDihfWvwW2vU25LWVmTFYrRWodSdSgo5rB7m3k81vedtt" + ], + "telemetryEndpoints": null, + "protocolId": null, + "properties": { + "ss58Format": 42, + "tokenDecimals": 12, + "tokenSymbol": "ROC" + }, + "relay_chain": "rococo-dev", + "para_id": 1005, + "codeSubstitutes": {}, + "genesis": { + "raw": { + "top": { + "0x0d715f2646c8f85767b5d2764bb2782604a74d81251e398fd8a0a4d55023bb3f": "0xed030000", + "0x0d715f2646c8f85767b5d2764bb278264e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x15464cac3378d46f113cd5b7a4d71c84476f594316a7dfe49c1f352d95abdaf1": "0x00000000", + "0x15464cac3378d46f113cd5b7a4d71c844e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x15464cac3378d46f113cd5b7a4d71c845579297f4dfb9609e7e4c2ebab9ce40a": "0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0x15464cac3378d46f113cd5b7a4d71c84579f5a43435b04a98d64da0cefe18505": "0x50cd2d03000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96": "0x000000000000", + "0x26aa394eea5630e07c48ae0c9558cef74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da932a5935f6edc617ae178fef9eb1e211fbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x000000000000000001000000000000000050cd2d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da94f9aea1afa791265fae359272badc1cf8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48": "0x000000000000000001000000000000000050cd2d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da96f2e33376834a63c86a195bcf685aebbfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0x000000000000000001000000000000000050cd2d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9de1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0x000000000100000001000000000000000050cd2d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x59933c636f726574696d652d726f636f636f", + "0x3a63": "0x", + "0x3a636f6465": "0x52bc537646db8e0528b52ffd00585436042ea60580125010284e271daf9b00245216909da40993fe8e859b1148e45cb8729243aa1823da08d0d96910fa75d49c70180540e8ee08a87d2f3dac77eac03c73195e4b93bb35754ddfd3da2664efbdf7de5b4a99640a4413f1101011d23f094e79b98eb594e2761ac16f216037f105a2e6f26122cfaca8799e5991fdb8e3db07f03cab42e73b2472f4ed47603b71de2eb693e6ed451d12e134cd3f09caff64a8f9a7d929294584b68b3a94f89acb5001fc9a734884db35822feb1d635f39ce9f266747fa23f5a9f99b7348a4fa537f1f87f38eb09fced9d19f73cd8edc2e129ef391db358af09c8f9a73bbc6109ef3a739ed76a5603f5db3fc9c1d959efa27c1cdf26b969fc323f467b552f3a753cbed9297b64bfa26a70b5fd769b56f2b5fda31042ffd63d9bd1a47f0725ae91c42d597f4dbf2c75a22f978ea0d08449e55593381287f747d7b3fcfaa9479573bb5ffe0106a8b181808ff5383ed144466f9d887c82e9d3b3bcc739e999d7bf065e21b7cec244a67e7eee376922c9ffd63713bf1b3733bb58fdc7f32096a8b330c84ff931c4eead3a5cf9088bc2c87a0b468d32efef669b95dd3bf094a2bbfc3760ee9e5763d35874468bba6cb9001b1efa796667cfcdd2ebb2fc7a484fad8b907db51940e4a19644e9752ca9efed4724eef39e7943e65b773dfb765a49d7a4b28e97dc7f6d9523af1718fd1bffd630cc48f2f10b95d5386454890c964547eb6d37476da4e926b57fb534f0bb6ab7d00e258f4edd2a98fdcb77f47edc4dffe49b0a89dda8fda497ebb523b4d6fe790c8f4a77e6a6aa5ecf82831eea5732f6fcb8874ead2e99d923f2f9577942ffda97b4ac9c4c7cf3d46f1db3fae9dc6241e6144e923f81d44947e443a9379a9b4fdb397a2855f83cc43a48fd3b9761ae54f67ffa6ad409ccece2107b45decf372ed627feaaf4169e983805e6a7b2944e08a874091b297dae0a5682fbd9dc543a048d94b6df0d2dbbf094a3b3fe42150a4eca5367829da4b6f07790814c9e7a5802fbd7dc543a048d94b6df0d2db393c4265b297fed4328412652f1d6c27fe760ea1a4eca53ff5533ff553b3e576b1738fbe4cc4671eb196adc5f7310f4169a1a65dfcdc2e760e89d076b13f352b7ddc1ff7c75322cfa868f991fbea623bf18c8a96afceb513cfa8c8be3ad84ef2ab730be1d758f4d53f16f718fdab733b511fc167e7da693a3bb7937476da4eedec623bf1b37308d53ecaa7ce2114f5f6a7e61ef532f1671e312925958f650e22cfd4f47929fbe91fcb1c449ea9e9f352f6d33f163bf718a5ecdb3fb6f20491093bff28653fb2b7f7f34c4d122f5f7a8746a4ece71da5ecd93f0e8f884f7d5a29f4e99592553f9ded187b76e62123f51694f7f44ab17eba900ff22357fdc8defe34d9f24fcb0c84fd93205b7982c8849d7f94b21fd9dbfb79a62689972fbd432352f6f38e52f6ec1f8747c4a73ead14faf44ac9aa9fce768c3d3bf390917a0bca7b7aa5583f9df17c901fb9ea47f6f6a7c9967f5a6620ec5f836c2512a274f9cc16b0cb50ca7f3a8752e2cfabd42ee94ffdd44ffdd44fcd96dbc5ce3dfa3291b2671eb1291bcf27eb88d2b95dec0c7e2c4494cecedd3543c24123f37864e141e5be71afb87bae16178a6be7e6b9565c2cee13568c2bc5cde24671ebdc3577888b83a760a7b8586c1996900564d3b071ec10568d3dc3a261035935ac0c760d6b854d63abb07aec1d6b84a5c10a619bb0782c15560b9bc7bdb048d824ec12566699b072ec1cafb24a78204b8625c2866163b033d81f6c0df605cbc7c1b063b81f57c3e9b80a4ec67b7033f68db3e06ef818f7c1cbd822bc057b849d59202c1c1b84bfe06c380fb6059b83d5c19bb055f68d5bc5d7b857ac1fbb83cdc2b2b13e3814ee8485c18e7122dc8dff60ddf80e6ec7ae6053b067ac19dbc696b9567614b1c3881d3dec106207103b82d8c1c30e1c76b4d9a1c38e1c76bcb003861d67767cd98185c90da636980631a9c15405131b4c6b3009620ac48487a90ed3164c7f98f83069c14405531f263d4c5c3075c1f404d31da63c4c57b4a460faa2d586490c26305a78980031d1619aa25587c90c25314a6194c0287d69bdd122d472434905a51494c628a1a0c482520b4a3328c9a01483d219251894cc28bda05446c985962025354a695a55ad424a3528d1a08446c98b5217252e4a272899a0b445498b52094a5994b0285d51b2d222a365468b8b1618ad325a5fb4feb4bc68f56975d1daa2f5446b4f8b89d69c5613ad295a4eb4e2b4906845d162d3caa165a6f5420b865699d697960b2d312d145a605a675a615a29b44e6899d0da2283904a4835ad125a595a555a5a92f024e549b2931445d211496b92564852218986a41390c84042a325432a03e90b242f90fa2075818407690aa43a484e203d814407490fd21ba42290e22019817404d20c0988a3318eca38027444c6111a47818ed2383ae3e8cf119fa32f8eba38ea73e4451211474a1cc9394ae2688923218e72d081838e37497174b8315a43070d3ab0e8b8c1688f0e2174a0d1714587151d5974f4a06307a3318cc43032c3e88f11193ad61861619485911ea32f74f8605485111ba31c8cda18e9607483110c4631189d315a632483d10c46668c70c8e1270718493de468224716ab311aa00e0d911e223c3988f862c801a7ab81888a1c457430686574317c33e4981161419487c88aee4cf7c2d09f4f06a22a3a1b7220010a1ae2026990c743a84348c4f605898d8dcbd665f312b60981200a430403d19e1c468455847872bce96e20da026c8353037483684b919e231d884af8bc782584728af2708188ae7c7a86000da93174461215958a7008222fdb0b4429ecb821dc81a885ed86d04dd210442b108d0107693d886d8882c435c42a442abc339e190f866f8a4f0af14e4b07710d6b0dd1065620510d4b8d0e894e0eeb8da12586e40c2531a404cb8d8d8d2d10ab4ab42256a952ecf062e4876585e80d56151c5558b21d5c767469f281555592119aa01d27e090857b880a855c6864745274518074be33ab37566e20a0d525d462d5c68a506b85708bd5a0904f2b8b9697169721328e76a8775a6f92de782c843d10b9b09921124364064482080524338854406a8348860d06a217b6185a2a20a5d1e2033e31148626464885e6e7bb022681830a3805680794a2150618855d13ea21aa01a98a1d3f205d816487e8cb76e52324e5e4f8a2c3617be3e353a3f86af868f06cf0d40c8d914308b04ea746479b30cf87065482e543121c2330bc304374be2fde180f8c0e1ebc2f484a1065d9c020090a7fd8cab494601a83a80b12145d191d15dd14dd9d2e4fa7a7f3a2aba2ebd3e1e9ace87ee80675823a36aa9e232eb42d342d3c14bc162a1e26346a9ed6182d31bc324431ecd8a14251f7b496203ad382d3b5e974e888e876e87ab07f3a3717cfa522c7114844dc2a3a2d57080b468e385a218be6b321071d223044345c4220143bde6c3c6c6b6c6ab0bc60f5d9746059c1ba82a587b5879587b5058bcfd6c6e6c6366823b409daaab6424fdb0e2c32ac2b2c13585b582bb0bcb060609961bdc06281e502ab0cab051617161856092c145659b0c2b0b0b0c4b0546075618d619db0e262a5c58acf0a0b9616d6175616d619560aab16562eac58d8da6c3de8804187191d2fe828a3c3051d2de8604107191d2be85041470a3ac6e8404187181d617480d1f14587171d5d7470d171820e13746cf9a0e80a21f9213a01290caf4bab08cf05a4353a1aba193a193433b433760c115a219730a2c1084d92092d1e9082f05230aa81084be803d115564c98436706094eb7069317e21444652a16d5ce111b758aa42298b2e8c8e418c285a83ee42063ed1055dd3b0ec47783f5a24b93e4a65bc3e4e74321b45389006f68d9010979260cedb08901d5d82d2c0e200b5b16a4243c2e445c9258204a035a49ba82340492109e16efe3e901df8036d42186e0745a845158173c159290f05e189ae9880316f15901d98477bc8a4bc5b362a88d77021119eb4652178dcf37c6764184c6b9b06498d2b07d3e2a55087fe38909df301102c9d42d2c0a1e1622161c0d6f05ed0bed4d5215434770692005d2b248926359f027be2a1c1a5f0a476b843c24116a51613ac37ee16df1b280558aa4289a02acc2110478a556a1b9f12188b47857b4a0600a23a98d1d441c6d4164828605911aa4429e9724379c0af00d8fc2eb7c7692de48aa6a6901caf120c04244336c5590d4f0c82415b251483ad209d9840423bf482ff209d94572992299b000930b481f96c835218c4004502a20d9482124e041048a40e0011d1c69809105402920011b0071493b72ce8f260b0220000aa46c517cf259b2ac743da3a228e10012119444858004c92727084ea29020f18000317a6165540684264b46e040cbc805f6c0920e38791235a5240aca07519644897212c5410fa3163e40f2a4034ea09a34798280a90fa29a347982000a8c58086244a64913251f3469a204012b8430e50127514d54e0a8a80e20793285642a040f2c89024193510a1ca5c9122553512020898aea800fa331fca4034e9620090194a811a4902c11e1a79c447d20044a3a70231438ea03274f9c2051826489081ff58193270e987232c2930f3ef8252331203cf9200a841d4661384a08a298208912250451469c3c5912254a5404ac111806c112111e4a1413284f2870c41a7de1a82925202c69a2440a92a811a246788007204479c0034a3ca0c0c80b4761f24154081f74e128534ea2a04485e064891b7171b2a4032da313f88325519c2c81324542149210341141042548a04481d064c9082f261f3c69f252323281a324196d612548948cb4f00790289952028292a9a8060c19952082254d942c995ae264490ea32ccce483274d3880246a6a840fa248882232c2c2509e200034bac251a2964c2d81f22484a91194e030b2c24e9e2c995202650410904c3d691205c912115e0994113e07cba8261c5032e564840e2099fa200aca12109c2c418204c9b91cb6364c6cb1e639f6f14c267b199b48da26c5268514416eb4b56d776bb55ab799d2c94c6b73fdba72ad9556eab529a5b5d63aeb9c3da6e4cab567d35a99a5ac952b4b596ba54c65adbdb1644a6977af9af2e498bb6eb576add4e36653ae9b22c77dabc935e9a3f4d3666b1da555e324d3eead29e5ae94997b1a590057aeb26bd38deb2665add5db6a5d71ccccdc21d795d649b923e64ac35e6adab356ba35a5b3b68f5abbe9ec9e4ce79cdc7157a69425cbcab269334b28daa369d39ecc3d9999bb69e59e92b967f7a4b5d639b9b9fab8d9899ca6699472dd95ce6e36d76d5266d994725d5bee6eb1721cd7dacd9472a574ce2ae54627ad739b54d64a694f4a7b76735d65ae95b97b72ad0c824c6b55004b5a996bad2be61e6a5a290749495c3353aeb76e52da71731d6f3c9bd5719416a1dddc1ae5a16626c25ed3e666aeb9e6a80fe6d975cc1ce5e6ecd56aae567376d77573dc9c1c37394ab9cabc6d94d6c9d55a7bd5ad3aaefbdb66524fa65c731c4727e55876b3945276cf9ecc534ae69a39ee9bab1d93eb49b76e8e4eb159239294cec9511e47455c4f59abe4ba9b73524e009db267d39eb47bf25118ce150264edbaae63b138aee3b849a9eceeaa647577d75dd7edabb252ae762177b737dd6633d3d9944eee9a39295f1409090969e38d3362ee5efabeff98999959e3902957a3a63d2995cc61184ae66e1c3cc2f9141a49d69a354a99bb63d6d106cc9da4b3b26a53e68f997b7077d7969293956bad95a39443d6e00074d249e547bf6e1e94f6eda673f616f60c299592992b737377d72c6e2a2537addcb47677e56d6eb46bcb75576616eb64aecc35ed6aad95e9ac1918a02947bbe9b651ee6d72f79cccbdf547bbbb6e937273dbe6b445454545a2c8949b4c7b36b7e4e6dadd6187cdcc4328b37737d7ee6eda949b32f7e4ae9552dacd54b6ec5a6b77ad5dbb7637334fe6ba6ada3b7a450b403f26666eae94007476d75aabec6e4ae9eca6dd3de76c6e721dc7cd2aa4525a75701ca594d6ba715b6d96130030d0c19a3a2e00808e29a5acdbb6b12aad75ab750002a816485025901b959b646d5cad74d5b53657a994b4d6de6a5d05e1e8e4689d1ba595b96a95ce39bb49e7a4ccd5da85b5366ddadddd5acfadd2aeccccd5dad78c7bc6c4c11d02284f3e10f501cd630ba2a44435414282920fec30620b3cf0a409120f3859e2010f3c698284c387488802c1c912244e962809e1830e74e0c9ad008428285120407982c4090301442d813235c1009a3459c22448007c0071fd70e5f891c30705134c100407084d9684f00192a9262328e94014084d17382d91f00404534c4e1808c0890460011201443151d28403483ce0644908519484e002e0d134a5044a9493280f4091006401444589120545840f3cf900099428294f3e888282444914103e8842620113270c0420c20751518430756049012cc0000301801085e4c994082180f2010f284aa6a2f8c01105698905f0e4099424261f28e14093264fa04ce0521205252904514c904c9110e58449692aca03484451a6a22c21214a9bfa404914274aa04c21995af2810f3c71e560012ce940141411ee101425514d3e68e100c149940822284112e50125509e4c45916cc10798382a0a4a0790407932a5e483274d9a2851620ba23eb064cac908502e013a3035c29214275173882d40e2e4c9922850a2a42021212a0424534e96401101c90751967c00c91409514a529c444d17e845f346553b2ac94962d28bd1189d5454b1d8c654541c8bc5382aaa30494c76311615159d9d84a9689298a4a26aaa992426a9629d844ac6a8a86612a68ac566929884c568128e69545431fa2561aa58972426633199848a8a8a2a569330151515552ca62589c999844a525175128e7949988aaa93c424954cc254924b1293b12d095351c5623409958c494ec2312d5693c4242789c958ac67128ec562319a8463b14e129331998463320903681b9299e507a228e1285cf9e99e36fbea8909f4d33d317d3ece80a4a0e6a0d3f0c874cf69a88011c497d24e89bff9e775584406790b9e43cfeb187bc9790d8f783eca6722dde3bc76397ade3e6b48446a0c8f4c97b786443eff34c9bd92925532f4ce436f3b5576b56badd567e71ad0c0cfcaff38e4c073240f5b28a0f9e95e2b4461cc4fe740d041ae4b2a12862b50ca2516abc5e450628b6929946dc270290cedd2aa864bde2dad58385aada5bed36a11d1961b798b25825216ed988276b45a361c9aadd07578e85f685b6bdaa9e5d53f11079324f73cc8e3088b24b9e7353432ddf38f08ec069794c2100a14c8e4a0e8502ce71c64021d14ef28c50aedd295a2fa964b3b82a095afd46af9532f597e9048cba792e507bf7e2dafadd08f3c9456b345a473fe3491ec283f29f4248b8464f98f74d84aa65dd58dec0cd4aeea9d0dad1d613f6447d813d911b6b2236c0a9a82be7a25d34e7de7abcf40edd479f54f033dcbff7dde6d414d67e2d437e75001da9a760abdfa1786a177e8d2ae507083821c14eea0d0078540fc795afce5a0bbe717e61ef835f4ef03c3d09ffa03b7ce57def9cab537edb4f2eadf6ab55a791e4b044128509ef739e79ee73977c70fb4acb196f12cbff8acd52a74e9e1956bda55dddd7a244ca172bf7eafccdd5a6bf92539aff53c9b41f15f8356b2d1fcaba094fed45e788443223cebb2e69b5e5eed4dbbaa77d880eebd3b82a035702b4322a05391f0d2dd4acfe22f983b156c86317f642febb2b9678c31b297df2b59fce5cedd917eae49c977ce399453dace3d3bfdb32309df39870d707de74fed79768eb5cc57d7deb49d7655af23f855b6f95abdedc83655baf95af4d54577feea728d57075b03f74a430facbbcfd00377d875bfd6b5d9330faa196bb58f31c6a39fec5ce6fc740a3e07b1dfa6a8cf3b428d30285238d7ee1475cd47fa23d5d79104a91dcf3987476ab3061aacf34ae1ee66ab33bb3c23b5a39e6917cf78f8e93dc322ae323ec800608c04607a70e1a1e5fe7479c5fe7429f39f0edbf1d34960fae9534b3f5d04a59fdea4f5d34348fae92020fdf424473f3d033a7e7a058c7eba07397e7a07453f9d01387eba02887e7a02867efa93f8d33360fd7402ac7efa05e14f0f02fef41fdf4f77793fbd47f7d39dfbe94adb4f3fd27e7a51fde922fde9e0fce95c91fe795b46e4b7cb6fa73c7be93c43287fe95f75cd72756d9cdad83ebdb2db191a7149a92f9d43235dd5c736c99d5192f43c9b9179a50638cba79f76525252529a4a4c4afe4d5049c99f5a14999898fc93a0689998bc43224c2cbb62d91521efcc534f72764e1a60937b7efa942b5ff2efcb9f9f9e64c7fe96330f09f22c4fe201466c79901f65cb9f9a798805dffe7960120f30a2e6417eece7dc0b8db47cec0fe5b77f1c1629c03303e162ed9a1d8bc45eb3b197b6e52c3b2679fbe78547fa35e79c03ed7237f6d27276942e3d74d6fcc369958b7440173aa0ba0682219195b32cbf68f93f8e505df2a5a5a5a5bab4c3772cf9d2d28ea525255fb9d26af54934497694dff2c9e42b671a83bc928f2d6fd7c222d35bf2957c7584b4b49a7f9656abd5ca2ef5eab68ce8f025d7e14b632f2125e1f856df5205b35a5afa9696ec072ef9d26d1939f2cf8ffcf34fc942a1afe449ad22cd0dcb396c807ccdfb909ce548cef28f653f57b2dc7f5e8e952f4589fd6acb237f6965f943229f11f99a3fb592e597deb56c923fcd24cb8f64b73beda27e64b536eda2aec3562e7684bd6747d88f9a1b181b39cb8d2e27a85dd459579e6917cd619388f3c72dcf96e7a973828a6c12b17fd4dc686e9efa76a79d2a171c3689287fac609ebad6a69d584efd9b7eda6968c8f33c34e2e33d3fede439fdba7b8ee71d12f1bce5b49374511445e7f0a945ff5803dd9ce028d1bce8332422bab4fc43965f86479a5ebc2da75dd4bfae939dd3ced9fa177b4ddaa7fefce30c8079f3409e6760b85c7921cf333074c2d079a7e7599831610485d9a3e6979e6762b4bc983baff43c1313c47f44e0e61f7f1fc8217747d8732eed28be746bb5f8cb82d25e98752aefc58d01c7f9f781d6f24b5aea1a273bff40b0eb14503fcdb6a4f3c7be658473cd39e0e69fa72e5d937784bdf4d8cb9088b453fdd2b7f048d3e72cff9c752b97767d4efddb42233efe0bfd6b508650d239972194e63274a95d6e97bc53fda08f1ca190c8ca3f0e5977a47a966b76e45e7369430b052a74cea1883c746e27ee8e50a0381f7228d1390fefa839d1e57685ceed34744729f9a17377e476692eb22c78a5a8341b5afe959592ff7d1e5a7ef0fb3c34e2faefb68c78deb977a79f7651ef3c69e4083d75af4c3b75579e49c280a83906308001513e93cdf9a96f494944269cf38ff34fcf494a224aa7dc959b1d41fc29f1b59b468bbf60ede6cc1331c85e54d40f9c16e2bca68400167bf5f01282bcb20479b1915eb9b4d3fcd34ef2cb3cff38017dcf79ea4d87c7f4c3a3e7b4063c4689e6a94b35b7e55c89a635b84e3d890718519279fe917beab49d5a9aa7d1e22febdcd2ae07a2f57ef9d4b935b04e5dda235981f46a93f887f41a420dfd741a7a70ddfa0c3d70eb1d76c0e38ab349ba0c3bb8979b4dd239ecc05e9e4dd23d1a5bea00089267daa9f379798411e599a7ce9cf4cee5ed5c5ace934f73f27b9f043d5bc169579e6c079d4322de4d23b6a639c7b9e7711d1e71bd27ddb3a06b76d334f76cbd9ae71fe85ce89e4fcb39683f7f9adce7b463ff2c7f589d7d654739d5dfd53ffe189436f4ceb68c4cef7c761ab09ba4ce77acfeb9bc69449fb6fac7217847d8839e68b5f84b746e0dc40ba3623937069ec3b831982e1e71fd537b965ddacf41db2e5a7eb12c1bd03f69c33bd2970e5aceb3352ca2b9f4693dff2ce74fd3e39cfad3ecf8db4ef5cbafde2191ea9a1da7bafa53571e604479e6f9e599671e541d035b33a18699ab9d3210858d6cb2d85bb3f6a2e559b63dcfbafc79e619dde3491b10fb79d6e5ceb38b5f6fde76a49bd5e2af0ddcb60bdb9caa023c7164af6de397e234e0fa4f82f2cc38d53f8df8f8e969387feab61c12a9332deffa097bea6d39abc55f1cc869f197e6da1da906dc85714eb53937064d093df5afc1b6ec9ce5178747e6b7d32b35abaaaaaa7eb3dc188c3c8b81cc4ff5f79976e279a4e9e79567fa4a6d541dabad95f1717fdcdfc7606c26f1c74a449e7109e2ebf3ec843ccf43df74ee31b29d6fffa695d13bc69efab4a39c763a88488076625792726648443c6aa731489076ea6f27400b71994c267bb53fb5107fb52ba09d18c043e6b394c437df5ed44ef25bacc598e4392cc27b9efd9b206d43c18aa6825a4884cc066a19b4107e9dc04593b572f358b1b378085f6620d3fbd276f10ae218e4a90900e8db8304faf60bda49cacfe0d94eed7347d2cb5dee3141f039406c17eb931410395c40ec29bd522640089e084032e530b737c8de210362cf84af14d5b38fed922fb78ba51126dc799e99e0869aa0e527fd64c880d873bb46fab1d7ee374322b541adbaa51cc8d7b8766a1591afb976f9a5572b9f7bd0cb446c349f039848cb030529b9c8c714009ffec7ea3b9d56ad7d7aab48fbf4a9b9acce646aceb553bf06fe533f754c4a39e7630a881fcb843e94013179b97651a7feb1182045f594e5d3cb818f7bce39bd9dd239e98cfa38d07edc630cf2d3bf3b722fa574e9ec5bf81011fb47a59f5bec28f568a7f1c78f76a23edddb290c7f74fd14c2dd4429e5da89493bd72ee9d2b985d06e9ace4eefc83dcf216e17fb489fdb89675bd43c3b65e75a08bfd839ec22edd4e9f4204d84963725002ac18fa4f2c922a411a29422ca1644295910a53f35fff8a40ae2ea7956029d97ceab354f5d13c27264b217bbec3f67ff58b49d3467b7f2ec1ff390957f5f0cf495650602def193eae7e0bb63ffe7d2413b523d287f3546a1facfa97bce3ca4f3150359ddf1f3e9a1779619487847d027bfb4525b555555a1a70eda3156443ef5a7fe2cbf6799d02b45bee650fd9acfd008f5be63ecdbf93f97768645345ff9675b502f430e40670622fd693e3568a564d573beb2ad9083cdbb3bcaefdcb3a37ccf3fcd8ef2350f9d8647a883fed41f6740e459096f9ebae61f7f0d72c841e8df1de97fb3a570bff2d59521147dcdbf8fc3d51d63bf72d04ae11ef4cf8ef23f671e02de11f426439e19c8e79f3fcdcf4eff24f8d9e91caeaed47ccd89681eda5133425d9323abf29fe7ec32e440563d7899818cdf959255ff79750e15c0ff5de61f9d4fcff27756ba8c8154dfecd8defed4b14e6a553e9f42b0b0dc9d37c762e49a0369c782e42b0fc0742c5ba41f7905ce530816a40b23f299e45876f8e7ecdc14822508161d8ee4ec47530816a30b337216cb91869c65ddc861461736d4c3911c66e4a0b31ccbbc308e73f1c244dfa6c3e68571778b7418e74c3ee4a1b38b530816efc23ceff60fe9c2ae6f3cdc87f7e6480e6b47bab05a5dbc30cf458721f9e758a8275d585191135dd8f4eec23ab79fc3ac7f1736a7c33e6f390e5174f0c26a75efc2e6852db9e7e274d161a08b17567138ac7a934be030d125b8b0a222cf7161397cdb9ce9c28a983cc796c32570d8e6125c185337991cd6f5b85b5c382e0c87e7c8e12d1c39725ce7e179ceb4e4799fd7d91c48464353dcbaf38c26f7e5a82c5bc1e6908658cdd94d9ca2b7e5f82a688464c459d650f5ba6e7ee2966308148d3a1069686bae3d96ad3966cd8134391f13885fb3ece7140c49e0f9f08103e99b5d5393c3da9b9a3a23a3eb2e91731738c1040ef37c8209ecb6b1fc7a13e8795375b91c66dde5c3c5b172887e7d02a4219fc02970989153d0d4e4b0cf9b2468720a1cd6551f3e3eebd75d3587bbda870f1f13386cf3092ecc878fa1e9144820c192c3405feafc7a13932ff130a2c09b1c86e44d2e17005c820b73390f09bcc9619ef37098787b380e1c8de4d77d2c2d390f26266ff9120f5f72d8902f71eec37f388ce53f641025a7c0612ca740f6701e14f80f8719390f8771dee45252baaed4e44a0eb3ae241df6b9924bd06a390fa60b5bbab025e7e12d266f390cf49674587509dce530d15d12003e1cb6b98f0b03800fbf17060067627297c3a65f8775fee3c22698c07b5c58ebc25a8e03872b5d585292b72e4cc971e0f096c37278ebc2925a9ee430f03e7193f41e4e010f90c8972e2ce9c2927cc941d0afc33cbf1746c4c3afc3be2b02374927720a1ce65d12b8493a051736c1dd229b3e97e0c23ccf8b2eacc83f09fc7358772bf05d98f7b9d285790e760e3accde0eb849ba92c3725c05709374d785f9c8e100b8b07b61d725b0dee3c278b8df0b6331ae0ca253f5421a62b4bc6c14258c81a20d335ac012c50b8bf527a4cb7193747b617edde8323749df717936b1332d21b9d285b58e3ce9c26244f430869d3c35dc5087881752cc852a568489a367501e185e480e1bba47dc241de9c28e2ecfa60aeee87a7618eb8adc245dc7e56613bb91c3e60d819ba41b5d588ebb45beb00c79d185b11cc7dd12e485653ad1850dad9c7561311ad2bc9186064181c838e335f90a403dcc10c605417106bdb04c67394cbc04e026e9ac0b5b5d9e4d01b823019e1db6dd20dc243dbc47b3891dd637093749072fecbb5b5c2f2c9a7b179601106fcad021d01480707875778bbfb0ec80b3860f475891a58d315e58da378771d7c54dd2b70bd32ecf2620770cf2ecb07a9d9ba4d32bce2676f6d8a46a6a20559fbce18bda258fda2571f82229fa4a0c445e6e97b492037e2959f5ec1c860ca42dc840daa73df323fd66e1a9449e65993d7b7d9e6519f323c843a6b787337c9e6569c3657cd429ab91f345ede24bdbd5cea194acfa6a3906d21efbe96c47f9ecb28ac8331919fa1c0fa9dedef110fef66a791b02dbc5ed1a8f7e4643145fd42ee9d4ca674ba59c65b9f2a7bb7bbe99d3e7f439e774da6366000b991fb9fef93cc3227b6fa776da63fce18de40a98e799953e3fb27e3a05cf332b41fcc7e21eb49d623fb61b61226fcb087de9f4a5932093c964df943a875023094f9d5e2926d2f9c7eda58b57248b6bdb3ea70c1f6bfa9c73ce39794e8d634b25f20c073e5f9d6a9ae540dbbc6960b1582b0f1df4cf592c168bb5e7fb3ecf3be77cf3effbbe4f8a8f99999925f7063290cda5a51235af23f7dbe6200f69df3ce421fc9bb7edb1f1e4f6209f94fa524e5f4a94d23f8ad27130d2575dbb23c8ed511519b9b7f57311bcffae136fa47aea3db637916b7cbd4ebc767a47cf39ef3d1cec7c7dcf3f0ab6f6dee5768df4b53a436f825eadb765055a77deb665059a7f536addfeb5119e7ddff109e46da83acf9e6738807986f37d69bb34ade3b69fbed9b109f8b55622b493f5cb07b539a5d46ed4b7ce3bef9088c64991bf51bbf9d7ed0c8499348073cdbb4b394aed485d76fe71524aea9c94523a47db3929a573dd35d75cbb6ccd52966dd1b62dead42ae06973f93528694bc92a2853e04b6df05204a824cf71ec9b1d39ffa8cfee4291624032d94f113de7734e81cf1d11c1b350a436f86620d4a7b4f73a0bc5f329cd0892ef7c87d4062f1908a5dd65fe413d2c525dbbd4729c9560bb84422fc7c92dd0acfe4dff6458ad94f3faa67f5fec3939b673d3cede7cf69582b14fcb3f2d959a727329a5cd3fae5d9c735864a3eddab6cbede2eeb4e37429e237a1322a3f722eb511a252f552b88e09f5f6cfb7cb5970e4b8bbf9c8b91477a50a95872265fb28b1dffc696e5673cef2b31d35ef4a49424fa7faa9b7a0e48c48bb66e5e69ab795d29cf757e7a4c62937eb1bbbb44ce4ddec6cee8ed2d937879a3f46897d117e7a99cccb84bdd9a5a7f1152989ede43f9f9d9dda15e48d6f8ad8e10d7ede817cd2b9c7284e11572c1ec2e7a580ab0e8f50990c4a94bd5ce3634171ce3977ecdc3977ee39b3f5acd87152e4739cbcfe495073d093ff791ee43b9792f3cf0335cd08e7df65752e43898238fd76f7e3ecc879e7de1d63ef49effc69f6f7791dc7bdf4ce6e1aff68af947f7411fab2b3b3f947fbb880d8112ff947fb0262473cf38ff6cee3ce4a31e28412dbf26f16c86b56a95dccd9b1baf4cdb6e49592af5d253932d953f0da11604e109954f7f163e5e78fe22150827c1af6187fe1d299af76af6401f2d25c0b8e1797762a7aea4dbe7a901f8b7e642f1ec0af2b9a4b2de228b978f1d461ece26c52a30c103000d1868f4cf6d25c7e9a8ce2e065862a3214f1ba9205c84bba161c2ff62b59fab5b9160d5ed235ab4583178c8d07d2611dcc26ead20e8c8d079b6b17f6349ba86f17c6c603cde585f96ca2aedd203c9b6633e923dbe1354a60220d1956dcb085143c5210f9154b814e1166ccc0c9c3431a2f7eb18f413c7099ec25b9b4938fa760ba690c9f34419c4d46df9011caa34e29d54f975d3c1d35eadb75a2dd51f3267307405fafe6e3bc9a4f5be7cb6bd547aa1fa5cfea4d62657e73c275c07cf55104af6dd709f7f9aa3939c095d9d76b478d1115e0897347126ec873c39b4f0363a76255555595797569644b5d681873068a04677498239b1281fb7c1a590578e2c8a41ce0ca8c0419d701f3621f45f0b50af7797557c67d5eec23eceb1da54fae60e4999a403f253f8dcc288b1dac842193bdf8c2d8a99c9889410f154232d98bbbb22b2375398ac04eedf40e2750011e38551318da228b1a0a59a9aa7a153d1b29633b1d78508176da78cf53ff640fd78f204fddb5d9d1bdc766997a056405d43d6817f50e3a98429ced20613bfe813834329fa73efacf9eab31c66d22481282082448594de3ab556c27ced99d876c50d4ab7fd57ed539e4a03af52a53d0fc93cd1f053924c275486c97f4ceb53bc6be16d96a4769a5c81fa5c8a7d4bf66c94d57d563227dfafca69e7e9a6d41719fffbed6c721d4e6e7bfcbb282b1bf6a9c6665f35cb1aca0faa4b609f8d49f3a0551fa51bbd88bdac59a6b9789e6d3f9f9c5760af2ec9d0df2ee1569ee71cea114f74a0c446c17fb669d81f0e54be91d419116faaa738f910394451cb9d9ac9d36a7cec9716e4e3b714e7de4e83cf56ff6123ccfd0b0f0df4453abf58048a773cec999b58bfac831a03a77b9393200dc6c0ae1c0741375cacd400e88d5b91907a65dd4a3c47a5b502d93fd742a99ec99dc31c74ba176c018e1378ef87a9b546f2980bf725e7feacb4803f0532e2432bdff9b600a14dcecc88179ca819106e8a7ce8d11f3d43932ed349ffa2767cbb96adb6a4fa3658357e7f2ab95bfd9567bab3acfb8cc69d51b017e75ce3334619e6768c03cd4fceaf3eba512838754a7ced999423ea7cee59942e48b3ac7670a593975ce8f3400e7d43fcd5bd54140e741e0c4af6cabba7cf5ebb3ad7a1fc07916f9fadce5abda0e40e7ec0882275e73fadf6cc993aec6d8b73af0bcb539fdf9ad0784deda6e07e1b5c255823aa7df2fffa9e783d68a7c7db7a55d2956d5a7d172c1ab732bac42af2cf2d5f9154e269379d7ca565555d5cfa112e9b2b34548e7003df3a0d262b5372d3ee99f8c4989c1c72eab4c4a6d7529b75a359fbed55a3fcd2ac91d68cf509d129192554f5dbb4a945af9b47b8a4f3ac743e44583e78bda359de321d3b98dfc18485f6e1737a5dc61b27f75cae993f3a9f9d47c3a01386dfad47ccee955a95d5ae740abe53aa4b9d4bc455d7e7f8bb2d1bc6e57a95ddaa51c0361f9d4b6145f3be521cd924e7988bc52b2aa2b03e1584b69e5e3ea948768ce5e7988bca05d55cd079923380504955a88e7d533e021ce4038affea39dc476719d7713e73d5a08d74ddcd8025b485137715e676aaefc78c1576ff110f9d53babd42ece270d4fed9c4f07f49cb74b9721e7adadb56dce3335679e676a66f8a27671ae59f9dd556a17b7d9ca40d839a40c84e5b38cd59e6c3ef9df274322de6643affe7db648ec47d0bdcd797376d08e9b4f35659e3290b0886d0fede69d95dfce711e4aee8e1c67fb73f94dee9b20671bbc9f7f13640b3a871c78a07b1f0539dbce21075f08762e432912ae54a1227ba911046ebc51f551d88e9a31263c7b94d87777043f7024e1bf06847724e13f07f9825ec322debbe74f938980978957c473be52b01fe77bff5d269cb78f1ce79d3fcda78e7d9222f1f194483d8ad83f06f99a26d08f475f09d04ed52f6827a6af197c75d16badce3327df2832e3f8b816e100e81bce154aedb8023af03bbfb957dfb8eabf691e459c3f12e0b734657ee43cbf1d3db5d3c82960f3cd3368272639bf39b7d38e1f990eb7abfa532b7d6db73e928bdffa8fda896735f069c97325b6d3f4cd8bda89fab639d84eed9b738fed3261405d887935a3edeae00a96295960b10306cb1259f479f16cc2f251f080021d3f83d880f3e2d9d4ce3d04b68b5e974b3a4f21dc4da3f8decf331a043d0547b13a6d0f22effc047f74652064be46f0a5e5781bd22ed8ae7ac1e7190d7f9edea276499e3df38855d9823e56a2221629f110f9ed200d84befd0807191a426344daaea128a29c3339a69f6ee4936ec4d6e179f666876f189e67438879d7f34c883850535600fd187ba3fd384218259e9d25dd8833cef3ec07d94b39cf33376ffec7f3ac873e32e4c07b82cf4b2579760e3c40665e8a6af5e31417591cc1f0e3941a183e2e7e9c3a818bfa63143d3e5030849d1fa30461e7d939992c84a232d973d5b3cbff58fedc2990f98ae7a57f2c29f9d43f6a2bbda394a191e97dc738749e16a12ebf5adb3252f13cf58ae7c728b1a75e5d8aabaaaaec18fbae748ed0f2f6ed573cdf76c7cb9003ff766aa5e49077aa8df8b7cfafa564559db705257d3a07d2e79dfa1ece9c9feaaf776c97227f7aeced4f6bbfa7be678f55d96c7c43a4ec3d1e32c47b766603b0ac803a8b87f01b423429b5a723ee3010ea217d36c0d311527005fcf48e7d47aa97d2ef0128f2a577459ef88120cf8e50f352ac97c269d200fc73ec1f351144e99f0c9f882db94ecb912111292a93311f1a44dda3f5616900e967cfb3b7f4a401a8ecd9bf0d9c6111deb3711cc769cd7153721c575d2be9da9d1510dff38c86355fa4f4f11452002d3f64b15268893704bd40b89284151bca9cf1060e2f76da2e49fb08f5a7d6eee8af39c77588b6eb8e53f3a5775ed44edff66d9e77c70d6ca7cda78bede4f9f46fb3f23f1972b0f4b45d9d6f53f33dff64b39c2bc9ff597e573bfd18955efa74a5769277d4bcfaf46f4aa959fece721b4cd59745df24d8917be6b80ed1b047bba66feeedda6e3bb5a37c29c9aed9a92943227ceb15dbd56091bf523bf94fffc143e6cf1eefc93a03b390397952672b853e3bb550e2b3cfc9ce781a0329abe34b44e9231d45b19da301cdb783454b9e7af6938fdba9baa5effaea3ddefc7d9ecdd0c20c33d041239b20b5a3e6ed346cc0f4be745e26a253325f9982d43269a75ec306f47cb16854fa7a994c6f1f7d769d61851f95befa573ffa3650da7e0ea93f354f1fc5af5e1d9406e0af3eaf940668280a65c13303913e73f82675bef3dd003932f4f9f6e93cc4f3ce69c880ead46978a47d3ab541de9bee496f7ae0f47c820e4ef73c9f9f95ee8dd3a56be00c8df49dc2b9a665912fcea764912f4df3299a6f5e01cea77015e07c732ae70a9fcc7b557e3e3f5d7a9fc334cfb2399b30063bac0e88d53dd79c3acb875cde21d7ac15ce35af96ca7b55671eb2b976a9bc97e62cee404be7b55af9ea2c1ba90d7e8c7d0c33ebc4fbcf410be5fdb7f21916914e04fa689934f91cf4d01bb44e3e0ffd6912d931f643d2592c172de81c32405ed61d41fc91ca64d257fed41f4b8631007afb3c3bc3860c68bec7f34c06990c6e5aab30dc420efc6ceb5bd9d617d6300c8d841ec398d742235e07dab5c25d58ece5dd2c9bcb574da36503efe74f5f2f4cabbe75daa5aad70a4b731815e7dad5e22fcdb5f8abbb54dcd5e2af7ab368d9e08525f6aa5e7dd3fabb4c2410abdefa2895c8c14412ea6d7d5eab4b795b5fbdb1333fab73d841bd3c9b382aadb92c3e2641e419973fdfb31aec3c3f071aa09dba9d7ab29caa022f7102a153151d857e7484e4a116fa516841ff1aa4b273f68f5690bf0e2b009bf26a79d02ff10253921cf429a227b90c3d4872f0c2562e56fb7d32bcc0ca7338cb4e5939cb872c6ce5432e5ad8ca45e7f002381cc99f3a8785b17c878316b67230f69f7bfe3558ad7cd10e79e83016d285891eeeb05360b0d045bfde2f223b050603f9c5b230983b930fd929d6a7b84f617218d5142527f21c0e3b729891c38a5cbcb095072b1f720e2b203a8e0b8bbd58fed44916265fac5bed0556d587ee14d187cce479a4e7991940ff714864f36a9d785f7db350ded7323f5dc2c0650339bc00920f3968435fd92948bef22dbc008ea10b5b790e671e720118e83b1cb67222e7d0031c1e5e1892832bcb2f223b05741cbec34ec1e1489ec34e81818ee49b1d635fc30a808ee34e091d87d7d003245ff99185858ee3524dd1e13b3c74cd5e00c957770ae82cff38ac0078ade070d05997ca7b0d7968a9bc97c83ca4de31c8a7d1b272f052792fd0db872ccb451bca57871c48e79c8613102f0cf4f06659391bed3269527d73cd879c79c877c720bfb97747e9edd39fda49754d5ac1e14317265fad3be55e5892c3867c87779673d05ac1e13b5c87851db90edf03c39affa4d6e5cc731d305a9733af797dfa66e63c47f11204713ca25dca702104c31f18089de172a6cc993567de8060b52dee1ae95e73f9de6f7e9efb6c7e5ef3f9fd1c42719f035c99512ed8c85ef3edb5ff5660b5adea9c6dd50bf59a77cf3d875015e08923fb10ea005766afd501b3f21d17265f307b77880ef31d4ce2a552f2d0972e95129bcd45cf21e6a50f592dfe1af296d5e22fd059968ae5393ce952819e63e852b19ce5a1e3b0b0d80be966595d36521b3c9391650523cfc68079e9d5f9e5ebc86af1178c835961c1b4f88b0af4d071b80e0b33ba5420e8391c4645e439ae167fadbce86af1178e4b4574b5f80bbc5986ae950d5e430e7a78adb0469e8dd1f2f24ed197de8547388a97f703629d1f6b9a36df84edbcc7ce3c0782be72ea3c8538f52d9cc0ca592e4e215658beba5a862e1bcd632feadaad97c97625107b89fd5a39a512399894c94412782693dd56f59567f1d7ca351f4578edb6eacaa58f497e0a61dd29a1834e9d930690d7bf70023baa5eabd0419fa107a0af2e6ce5e02a04a974c4b8168108329819c3842ae07421c60d951fb87c79230c0f40482b720b156f8a40830e95417d2a10431270cc98714315963870005520ab6cdbb65519360fc91a4d8881c2123ac80825608c4127544d9127061c3849854b632b80a85119fa42f685962fc050e65384c16cc38eb84513b5282420ca9c9214ada623aab5d65aeb9f2142493bcc9913ac2146174db030a88f0968b8f002202f60c820c5981f66de0f4df0903220c8d037b21c1abcc943a78d78a441c147cd8a8d1a26e668454a45474a79ce281562c2e056b1c28a4345d037e34c59121f1513363b55dc5a9bbda1c56b5da8915f14b5d6ca67d6f19923825cadb55e50b94160187dad72e1cc0a27d45a3570ba65d6b1e2311b5f5ce9e3851b6bc4b14301212f8840a186237ec0a28d405c1b84b84262301846a43106a02d6ed294800136a890c327100e6d5e78230623adc32301793c041184a02100cd188298010b511ff00621d0bcc1c68e952d53dce04612566608038a2fb2bc34991d42f4db9ee8c8ba4ed3ac0071641122b16d05b84869f85ca1a38550a13545f00953488f1755c0a0a2882c67b8b16ddb36069dfa34c69d5adb60c16b63062604b54107edf9d84c267604c00e1534a81933c31837384025893588a8e104356e88b001501b6a7094213341d334ed7546d02b069918470632bc3486363c03586ac18626a800a443156a4630051870c208ca82e58e3848d3344dd3b42ece0e150d3f19705f9b06b939b3a981a05a8b94a8689aa6694f4c9ce93a1b5c8013080926b0e081028aa127f810bd71e60b387f76d003e80941fc2710d20d7994f0b30a033c40d1d1126d5adceed809c103507186761ac4d1f204b7f14329771acc59ef747738273c67de0a30475c0b52101157ce9420c4164b98a1031635a871050a2a73d830c34bd4d003183e90c1041366f01473f4f031c3882cd658b3c65421cf347a02872c4354f1859d2fa838c28d2d69d238a3439d1c8480e28f1a52fbb36ddb06839f5ae1a881059c7166a8321b0d9920408d070dd145106fc478018839d786312c2401c6202ca6786db48a4ed2073ac3e8b702bca050810c1762ac810344ac8d9d1dae18438e102ca45045e6ab9ac14b638c9a678b37b5562e438d2e74a8c2091d702822e6260a4074c80082428925aae650387cf2ec40c36917ae9231b10307665046d334edb500c3d12774d2d07002186a445147db82cc6b70b67861c7d5b2440a512c01e88b225eda195f0ccb1068c4f8a2860c1accc022873e6b9ab8c1063332146af31a2022357ee61531b6d0628715d68c49d3a4d01f1fb43061cb0f6cbce143e1bce9634611732aa7cd992f459e5aeb50a069ce54bcbce654a3d33c3c177c96900328f351400e1870b4e0018d365654608597146af892c60d74926833411969dc0377bafca1820b3536a8d183196bc2cc79a3ce0a5b5c71c99042b8577d5a6bad54bed1344dd3a8bc795191c3c4187d03193d5f9dd65a955439a30d152baa9440c102266c81850b6d00e1468638367cd19dd9fe34897fe664e1a64a17308a5042d01073ea2021e78f115d8c6103fd6aadf575822090d3a0d65a8b28971cb123eab811268929bed0e10c1d4084e1849f22d2d8e20d98d73431d46c6484f0d369f04380919c531582362c60b0cc34423ed8f13e0540311eb880b1218729d89411080c198e822e7240238941587e60e115061c9a8406dbb6714e2f585ec30a2ed47ca1d2660714b6e0d0470d2f39f830c6a0384abce1f2630318368841818525cae8e132f6b040430c5ce8a9ea0386e6bda6699ac6c66c3631a769db05b5e2f85a6baddba3c0c39e144e708387405ec31183de0001c68b365eb5d6fa05172b640146193e787993420c8c183764e860b185154fccdcb8423d2ff4dc24298029b44707316a30c38c34c450a14687362b1c81c49c1e7dc22040ee5b0187af0e56ae562d0cf00043276031c6cf0d65acc04187291c54e032c60a17dc5cd105ed4d84e3f48ff862ce7462952e2e44f145081d8cd0d478638d2f5ee052a606335e9a1c2e2ae0428da669daeb86391c05330419366ec28479a3063855d2c4c1e189d7b43b7ab630e30da13676c0e2a56d01c60b4b10e0ac58cad020ce952d58662b1f8ea40e7e280a43ac51841c1caa00638631f42041a60438568e38638538dc0a4df0f901cc242288ea4387c41d244424e81c75d9f2db061e40883644b28889220fa03b29d470866c4e0967bcb146883c70bce0d069f14db439e2defcd0860e5e100263f683130170024d0a5d7cf963e64a1631fcd03826626bb0a091a5882d60c05042cc8b9c36b4c8c172a70b3f58744f4da88162862f427ce181cd173775500061f87a5cc16282171b4ca062ce6bcf1368ac3498312202a900a6109e2cb24843042904a52964258c405e5e9bf64417a42bbe961510a883861279aa6ce922852a33ecec61c28b37e49041e9f469595145c7a6dba2cd38555f661ca76168df2ce6c5ce9b366bde08030b1582e811620d0f3cf409c38c0f308ca1674d7f5138f963e7043745e83043a0980a5ba00024061880d270237bd3e551a3a591270d3e3485d9d442246afd669585382dbc2904270d12258c50820b60bc40424c0e3b1432630e82020fddb66ddb36a7626835c8342d83d945ec4a18347252f0410713a87871a5321364a071451268c460039a571552b870c4173e6ae6546186083d9829a387074072a0a0c3074e1f40455438f59294c4571c5f6badb5d6ea2087029f0a421f41627620230e126d30c539638623ac28a4431271e428f1da9d1b8ebed65a6b551c6d00b56a51e0d9b66d7bc9ced4cac70d3f69b451850c83ca788d475f850667457bb8220b26e6f8c122cf6b9be28a4c088e89b903f7003a5ae0d9c30215616811a392674b991dd44093850736cc746ca479a597a2e3c8d474e276c75f7bcd8f5a08bf1c20288a2d81d00c61859748a3cc11596e30230930be287060fd187c34cd3b8017940c199841adb5562c41cc26e6c8981a2881620c3664b8fc10268824b09421238d3067da80f1c212080e9636be563bb5d65aaba0394f82ec884ff4b03d318447a7ea6b0d0740460041dcf95347901856e284897591610b4262d058a18437af384bbcb104c566e7cd6b4eb503783185cc1946d8e0460d3b81667990c0010d3851e85153c7cca76901784dd3348da3da006aa89ad16fdbb66d6a64737274fc88a2065a75b1daa3eaa35854efd1137bba89ff893bddc4af798744345144a2cf501e9139cac99923c54e03f1482c3a6242c64756b85ad8a10637e6ccca0033480a324ee8410525ca18e2892760d0344dd30eb06ddbb67551339b98f2540c27b4b122862f57c8bcc6a3bf627b4287df1cec81501b3f5061236788422f3af322e1050d629a208307880ab6a4e9326850153f84e27429e2eba2399102196540a182134ee4a91a64061979da48e20f175a1da226bca82ac3843a6eb4f0058f911ee27ce105193f645ce062859e11b2c34c68426cfddbb66d1b196766136fdbb6b9693083403f6c9b5717c2088a83450cbac467f59c708295302ea029424cd705a132eacc310207165e6f58788d8c394c839a0cea7c91a7900c5d6419a3021f17866235a8a1858e1a3c55d630f3d296e82f402d205757d8f3b55607ab09b5d65a6bfd3182408e4f1a31c2f0f2a707165450a3aad006d73191c5202a296cd1d3e65595a82a38f1b5fbca39d11334307cba89fd742f3080c4a341af890982f5da05d3ca572beb6badb5825c2d84c6d75a6badb32a32bed65a679e1d67a05088893f847a00420c32b81884860c6988f1461354b0784d4bc206d1653259151ac6986ee230ca7062109e9cea049b3074aa7421e38b27723013260e1561f05c31e80670d00f2d874b63bb20876fdbc2dfb66ddb8ac41d5c30a1ca1e32aaf6bcb082c20831f6cc7153e78527e47c8c44085ec8c9a2879097236662147a5c9861073b56c42974c56fde6f338efdb367853335a0918510e7c1328511720871d1439e274a2874e637f13738221d4342c9c2e029f4c3173eb0211a31068f0f5eba28414850a1efb559ec0516c434e1830d368439a39503196e4811041676bc6ca0e306990f6a3615c2000f10459e158ca05d7ce834c8c3c76955e725083152809aa669da0bcd1c8ee278934317333b5aaef88953c312afd5916970c50a50c0f9e20413785e1a88dd87abe0d75a6b15c3cf6ce2efd80d37eccc408511794a08e3351efd0a526870bcd832823275c4dc50e7cb175cbc0e000b23093e570451e80c1890d02893268c13cc00a3861fc84c385cd28019501372701339148221891466f8238602f4f4d0039a1ab40c32224e107a5e5bc3006abcd65a6bad7582afb5d60a72edaa150e95335f6b3800909b428a34374d8c516626830a385429644b747133831630f4bc2a1c990d5febd7425e7cf5be0ef95a6b11f5a2229f552049e0469e3e5c644185062acca8c2068d2bf6e020e7cfac509e9f0548f3718f51d434cde9e69ae645ada4699aa6719ba54b574c0185126d30f1a5cf6b3c7a2d0a17a2f0e208d9a01ed8bc34678e00af695abd2015fb05aee620a8bb42691431fb63849e2a5a08d2069735eec8b800142609d92a092f4542389103c524e6486e0a296233d8104241d01a65e40122043db8a003a0384aa061039c26f8847054b8c339fde6ae1f2d4494c964545e454a454757a95df49d00339b98fb2225d9c71788474fdf9f6e7794bfdd9163ce3bdf5cd4aa6f7ed44282c864322bafcd9d87703d7e73de2cb795206ebe5d2e5037f11a8438214f6c5ce9a67af44fddd9a27651e7ec2a8832849821ce0e7c78788d47dfc60d436d1091839df8a3830a2dc4f122839b1706e2d1287e11cfea3c85c4ccfc51e28d2d5fb86841e1c79e16c498c1a18b306810340697c67601a739a5aef953f314226a77e4846ce0868c126474f8d24516aff1e83717a710961e2a82acd8f1b24513af6dd096df7e9b09cae2c3dfdcdb6900bfb96b0aa1afcd83dcb109015ebb62bba86f5844165b08f7a2ce3da826eb1073e4cc713367a4cf736cd09e6773668013049b59a067ff9e677064e89e677058a0cc73f2e439adc8aa171b9ed3320391ddfee3db8fd8fe68a710d87b7c3be7f9fee671d4af2029f49c734e6e4a2b6522cfd4b829e38b666270379a6f89f8cd4999af52bbda09386324121288bddaa74cc7326f091bbcdafb52b5f44f0e809d576c01a53e7e94de639058e5a89ebb70b69c574bed087bea75ee00e8c55d19d701437dec7efa78e7f0023e5e4e2144881716754a6d4b73bea2857b715ab8d7e66c472a0f5af6e2bcb35908f0da5a50f2ccd7abdd0e36e7f7407c719a76a5585f6f1ace19cf07f931f6d39fe6739be5d934725fbbc1083143ad16faa23ead07e28b4e6f41793faf14ebd3d06e09830b7336a0cc0bb34a56604648994ff6f38e52c678e40b9f2c41642ca26c97e449017b5b29f94aed920e9331d91bc8ff9aa790cd4751db2ecfa6e93c9be8e69a4f6f8e48eb029d6bee01e71be7f57ad0b976616caa77d767d384e281e6dc8589b3693a7508f0eb6836556d7a2f7e6d3e8a3ff9a5597e513bbade7e90d953864f3e1d9b783f9d7a3ffb37ef48bdde349ad39003fe345afcc566fa0c8d744fefd8c1cfd97dcbbf636c94c0330fe121fc3dbbc750f0494591df5d26d23bef41ce8f0d453290ea53dc4b7115e89ee75f953d6a5ebdb3ec1f67803a78e7c1afab60f774d0656804f4ce3f0aca9083cdbfce824e43239c4b979719881cfb76fed9b13b29dc4bcd42b267dfec3825639a6c313e5622d23374beee70c77bb8928470ed9f1fab94526a92a5e62c7d4a7b96dfa39d2a14f629cd08926fd7da59f665fe21ef382593e992d2331c588124b2cfd71eb8bce6d3837ce5395f79c8f36390afae0e2ad04ee3110398ea8fbce7abbb2695e10262474c0ea64be92191e9df085e73d89429541c5557a47d7277c77626dc1da7b38f9aa6dd29dfceefedd43d5d6ad788f4f6ea4a62d16c072eafd9fa623bb1e6f58d42859ec32afec1ae5959f51ccaf807fb536bb665cf21545379e93d01717e3e9687ce5e74d44e9ff770b593e6b1f76ce89c8dfdf77d9e4f076d8bf3cec33f4fbdf38f3340a50e22cfdad079cdbf366f9e7ae81f076a96faf7c5a466c7ead3bbced64f82f5f3073fd6e74c5a4636afbe6dabcd08b76dabede3fceb3ce7efbc5b84f3ce3b26d5bb0b3ad7819da78547a87b9749f5917a94d86b5ec323d43bd0996847a86f77d41cbc9df3d7819a65d9d959982d90af2b2ccfc26c81e6f2f53441eb5d29d87416cbf2cbb3fc634c6a1ae92e93d029111e63c4d0c7cf678746a87faedd31f4efb63edf3cbcadef729e6fdc6684dbb8ee8e9a7ffe31f1fcbba3fc5173b0cd9ea7fed911f456e7dcea6e91ea9f7f17fcbcf3ef3203b952b2aa73ffeee839683f7f4d3e279f5e3066f0ecec1c95675f052100958c790d6ef9b89df8e360b6902b9e5f6133fdeb2ccfbabf0627d859e6133280864726bffaabdc3f1710fbf2dc91200cc8014fcff90c8d34eb37ff645d8d54605a014fcf79871c3879292a28f077fcd6e10262303c572476e6a592c8d56aa43af31af38f9173b980d8119a4bdf38d0e3ee28f9f575a067f9d5597e7508d5ae5d6fa4fa1ccabce62d5aef7947eee7e47669779ce111eaf3994caffcdb1de1e8a78e5ebbcc402613e9d2a96d191943f0edadb526cbe10a1b376bf8d421763946644b3f045752889e999999999999190ac7adc6c7d36606a26daeb17b3c64bbdce6d2b72bdd7b599da7107eb5b776c47b76efc8773d06d2db66a5ecdb99817453f97a451f62c3f9e41851faf7b1ec41a4229797ce3d3e6aef57f9c90e19007a5be9a065d21cb44b971fcb1b449ead29f31ee779ef41ffbe09ca9003ce3b67f2b9e7792be4d0dbf6871b489981b0bc7adb95b3ecd83e8a45da5745da457f9aa26d19695f79fbeada9611efdbbdef9bc440666fde5308bfa6b765f96a0b8f780f7a120f995ec3232d06321dbc4952f61c7220656986fca9c52964e84ed61db9d79c49bbe7633b33207684e73df547db3b846af798ac18c874160399b2a70c643a11a98cca87dd175e963303e94296af3a3bceff7cf5f994f6abd04259b1407f6a16e8ab10f4ce8ef2bf1fdfeddcf3b6fccc7568bb62bbb47bbfde225ff5e6c227c7acc1f263c4fa3c5b2363062241f79c93e59595ef48c2735b2993f74b188621e89f87611886ce3dc2bef27ddff77ddff739f7f8dee8baaee37cf3aeebbaceb947b7c6b66ddbb66d9b19b6c3b6f2db396420956b5775599dad9489f46bf5908710691ee2e7eb780891c9432ef83804e2b6799c68a8c4c955ea23999a4461ce213443244d0248331640303020140b87f33c55551d14800d88b24c52469306434196a3208661108661106300008000030c408a398ad600bee2f76699a64b19d322b38210575da53fca8b3c2813dde7acf76dfde7aae1f7121ce521c267e40b41afb14085cafb883c1ed6c12b4b548da32e8c240da96019d65c9d48d5aa918fd6511f009f9abd60afeb281acd6a04eb060d05c6745c8ad05830a7fc9128e3ed767d234b9f82039979f2456ca52161dda359a1405dda54468088db03627a34e1dc34bb24cbeb080970a024480559eba0d37aa540bf56bb256adb2c11e843c66792a45a1e6a9a81bef8572b60f7f8c33094ac7600a49dd691abc63e97165d9395c763b24689d6c39eb4de312814aecc8828f6a043a24a22ad6c2512dd8813b75dc86309b5f60d4d0c760b8ce6ca787b5c04902682460d372022a8de6b0b496e0e4e1493d93f5d100207deec71405783a531d1cd12fb14ac2debf994129472d08623d77a7b5eeaf663ed1499ef39a825ea15505e105d193abeeac9ef1c94b5df6cd18d5f5acf501a454d927ec2afbf9f1afa99daa14f0348c6591c18477ff08db5cdcc8f294954e59646e2a67e81b47fb57228b967ba7a94f6e4f713a8f45e596ddc7c097b9f758bc5353e18ae164a1e98fc2fc926c6b954d4d04ba2a9831c778ccaf42cf02f6bc241e285cd2661a5504ae08cfabfc6fb21a1653814bb202f5b0b7dc5753f6aa8901b3e96d2848720f124489d31ba2043d6b465fc1f08f25300b1a7ef70b8e7149ec601d55b0736c6982e380bfae8e65811bc3f5069ec21c580a47b338106c6a0cb2debc54713411780a152e40648591ae07a5805ba7a0b3e4907ef53cdc4d0db75f532868e2652499b9c986a035edcd47df57ca7fa915dfc24ea1f70c37764b7c7c4d26b0f558bbb61ee23a6470403094762127a16aef287d8d64007cc9d8f51e1ba42dc5624c5c6b0618899071ff8c613cf662b0eece892ad25a8fe9209d6e2d36f44a936533b6fe990e57a20a8a83be5d7d5949d10d2c01a0997e0a6c65daf58fd6ca537d2366d5365993f079fbd0f74d48f454f80dc4cddaea1e6bb9b02c9e2c4835e05e427566f8324daa64bb74cdb6725eef9ea1a3c92e7ed69e169a5d85d8f2c9e7fe690ccef2fc69bbb9849972928fc2625074c8427fca35a69682683102c45e071cab34010592f57df6d93628b53e057022b5be00581c349b337162adad44293a4e4c8718ca5e3aa71aa58d1ece634b29a25aa1122c7eda2e366d02dee72513ceef691cf8310f0290da9b68fcb4bc29319040274936b8d41eee1333e81126ab6408b324905329358757aaf31c781d4e16c8aa5496aa35478ca637ec060f8e5c25951f36bf91d5f361bb545dfc60ec026e22c0e45f0453f391dece9f56fae7b75147c38a402e0bfb00492cbd3ad69f82500fd786c738b9538c4c46b0d68f92c32f1e136974f91c73c9f52684396bc8804b36921b0c6a89145465837114bc22fee81cbdfe26f436b8512191726e4a777b3cd2460508c89639f3da8619a37893d582802b10ff1261b038d28cc3ab5c20aa6139b12af4b8f11ad89e216b9077b135d7dc2f7a6185e348ef6f7fd35de87ea479e9570c6536bba2f40c12c3bafa8a13e62831d7c2d0fb87dadbd9e9e697005a2fa37eef941210666b84e716705909683cf36e5c36b28e0d1eae4fa1e495c776f148ef8b8f834d960765db875e99d4774472345d79fd8b47a0d3f121952053d330fc45c381dad3a477bdbd4f542a9935be16d5604dc7d5180a45cc927fb87cdae173f732955a941503a1171c46c7ce4fa2dcb5a5fc0c3a0597c4ed358f6c486261acbbdd1fb123cced1e52e091b647145a00cbe06d6553c1a1a577cd113f7fd6abcca1c5df3aaaea1503c359b41331791a544088da44b15dfe1266decb5a10f7d443d8aefb062f22ced6d6ffba648da4c8bbe4e03c2ec14ca8bb4402e175054baa4c33ab3caa858b21e2c9ca01c8ee178c57dc115b187dea51ec3b1c148d06d943e5c9e61dba7d8d48bc4b6ebf4857fdc2500d85fae1e9dfa30faecce1c94de9734daa8809897776e9fbafc97f456807a126b47e2831461146637af48bd0c72c7fee7bb723ab3da2bdaf9bb245d73df38cb47aae7c2c8bb8ad1ce446c88b225838a4c5cb1814b4b9c413fe1a28c88fa11991d269b03a053325ec80e81e4a53fa4a9176f34190d2815496dbddea1554ffaaf8104c34c539a26bc12ab916ebada60a80f195c773ad7da44bc761a6fc932a14f519abc4c58cbbd61c54840d3cdef2462605f201be62cb71c6dbe8a64d10cd52aba9b3c094907be049f6f8f03ee9e257122907446f88525cdb2f27fec49d20eabc65b9c6e45e00ea4094f6dc48682f7d5fc0f6b46e8b3d800048de06ad591ff2883f1fe0781b1d0e5840b4481fe8dd54ec2fba27f7445db8574515ef608bea917a28b80523f58006e284b4a08faf57d0d28e929e523329ac855f8c89ad16775d533d491b1615fe4c38f432a2a9fbdcf4f885d8e12ffe9babef7bd41ac2ddc39c4f9cc2d3216578448a053ee2d3821584d57493582d1402a416479c29218cd2ff83e6ee3e04709f159bce648f59ca289f544dda84c1785583e8b52ad432a72d26a20650f664691b35f1bae07dee977a11ead47fef231db23bf8e5ac6da5f9a080f716d700c42d74c2c400fddb5d69e967dc7dee7ff783468f4cbfe75edcd32534aa7908fc53d685109559b58c4545946f55b215e3e5af1a3c8686c4233f0dc9e36f44a11b0258cb4a78cae49b40247ab1fc5ac2353097cc172d95696d91063cbfa05820d1d204d69d121d2d493534c7a12e8f0ca9ea6c4cac9ab1d1ec5b198802782025af531c8b735ff4c99a08fb8ac32fa39894c0c8b0f2f69622d65035e455419d7c1b7ea341c0c6e0ce13bbb7e9d21448b70f912da59de315fb1c12c131a3a2ef48ed674dc912a41bdf784b9252b401068c52c1a71f127851aee30ee8bfa8546f4853435f9432338f54fc730b279baac6e6a40620fe8337736dee647572dc4ef6678ae5f0fe47754595a0f17d17299e64a7d1e6ab0080c8e43c654146384540ae32660cb5ab39c48459f78c73e6d3864d270f847d1eff131c37f3e250a263800980272738d5bbaf431077dd8791089da66ae01790282422d191c56bf554cef4db44080cb8b2fe2e124c04afb276182317dda7304ee68f50d0d8a8230b05c2b95415d10e17379783311226e7dc0b92e4043648801a831e0ce09c49a46f3ab5db1e124e62d8671eaa8cda8dd90e90bba601d40322b990e94ec00d580b428ffa2fb71ec966da900ce8fcc926ff9919df9d9d2e621de79c3e37b3e67f0b4f8d1becf7fc3010ae35dc3748e5c78e8f4a3df1dcd4f45c57ccab6c01219a222c4a37db55b9931836e526356e63344f54c2932c643183af5957337ad2e157fc40ba1af65cb6f201e803a5f89a0088380105f9312f4498fc14e7a5b877a2e20828bd41903c8981f4f079c418def5d4fc420d1ba42e3244f034133115f75887cb81d096a32a0e526e20f83ed89569bc3350abbb2a012a8520b10636b808685a9c3d494b5b0e3632f9649a410c3a911f2781399851c8141dac076be682b46ee92e2ca6a09c15d015e3591dcdaebda9b644bc0d071fdd52649b9a10ea4c4df90bea630d1ea01a18ee8aba364be3c3a18da65216be8bf9e0ed20b74b116a09e3296a2be45e7db80d0088fd285fa102bc63abb67b6d2f3dc93e8bff90ae9bbc8d72af66e694b2d70640c1cf9949d0371aec79d0947635cd2a30194f13dbcb8115abf86ccd15ff08ec5735f43ae104be5506907563ad0b4d7f8112e97e83311ec0b9a9b6b5bf83e5620b316e2c29b3535010fdc9a084adc5bebc0c26e7de0e968961e28d1334a420cd91194a634f4b96d4c34f880ed3c034b322601b01c4f9e636234ffebac605ce29ecb39957ac1020bbe9fe52164e2b899d3035a99f6ff0ec110c20c895af1c3623b27e2a56f111e849ee5630b8961f65fc8ef6b9d8119dad18bb81ba5a5a035c744337dbadbe026b33a3221d81e920d52c5143919afb628905aee74f88e08e813f8f9e4addc35fa8cbf95534c2492f0ac0837021ba5142a9b5ad9f026a9c4e4544deaf54f714d0851ca6c298ce4fe83e8896326f55a579392a6702e94746490b8bf78016620404881695fb4a1316622bc60fb93d222696082109249892d390e101a7a2d1b30306d3d0ca881683f66708300145e16516835051df0a158fd9f294ac68f0b14965b2e4b6f53a90c0272016b04bb4e23cf8717d890245f74395ad32fc77df68e819dc2448d2424e54fd018edfcca993ad5e40c8791119e1fa131bae76b7bd5b8935b052edd79559c137360597c64e567671e5d130906f907a320cceaba24150f8e2d8f82cae0a0e59d8a61acec5e57975cc51c1e1a49c3fd0605c1c1aaa39b93f90d00b88af18057341a99cce3f5e541332dc8d2a6a3df844362fcfcb5c55617b82c47c21dee8e9e2271456bb3a92e74c851e22515cd794ef94670d78bc7d11e93fa9c2bd0793b27ea5eb7a1885ae5a8165320cf51e407a7516cecff4d3f301f47fa7b2f8f16e0ca6c56ea50a099c96dc3f97506c412a6b7ebbe1adcfb3d4dc1aa449bbb4372ca8de78546430e8a01f67595d13e05683363eed1b0ada7b1726721bdc0bf458da4e3492267dab5925ba944b62ee2c3acaf52844610e42379a9534a91c88b887b56bb8c21f95edf7f322cdd69c423b137790774c1a87cc47b1d0ad5ce1592ba2eeffa9eb7cc45f3ce3cc0c8ea94043420fa13ee4cc3af43d2930292d834e9f33489bc3b7904fecc53240dfe972aecc82ab67a364784e4036e7d960b7d92fe0c11349fc40e0f176de24ab5bdf7e144fa91c25e03df1b90cc2bd51a6ccb06e81816978f091470a64415e7c90ed6c9111d8648d9224f14e648449385c87e19e7f81175e51d18fd7322141494612cd6c9ec81e644936ce322a760a8057a3d40a6af352e222f5c08597942831bf7a57c35cf30d351eab36a4d501a98f28238b836d83828a8a664a6d5b86b7177bc219f8c27d27b94a007a6c1b0abba7e324931d2e39c835a52a08b5fdc7f0bd53039c871fcf93bd43bfea355e1075b703467a2231a761165b1484cee7800f45a21e4c76d27333b843c9cb30aa1fcf88f4306c485f08e0e5c0463ba670304a3f19d23a567aa4d9d79e4740dcfbad534f09906cf9a2c311f2f241d60e25658d68b97e6ab3bef6e7ab1ee89ddd9275c3e6c64d61fc2561169bb3f2a3feafcbad2badf447aa66bf217195a2440e3ba785974cf8d62f867b4a0cd37d5d3d7036c5402e254148055923ddc4097dcbb242be20faa8c25cb5fb455000f5193944b56245392b27ffcbfb1202ac0c01a3381b36197fb0c0cce95ff46d3d9a9461a4ec37581828d536c6892e550f5a829311ce7e647080f056d9bc96b94664d3b1f0b98b4d8b91a9d69f056f7c4f9cca7e23fe22ce6c3ab76310483c3960788f3494192f9a7e41d81a057799d5d6850024708632200a015d08e72162020765c884df8162a186d9f06af888516f77a53d6208726481ae2a5456be99cb2076b779955bf91d5b8873f2488fc863bf61784aabe459625f10441b152ab4d492e415200064b0554f702702d9170314da43b78f84aa0509253765b1849ef8fb8638e66f65cb1745c3e07089e3c1f601d0687e926934ce361fb3db4f08e89244726486b2396f5f9d907d61326c5963730c3ce4566423eded4bc90a51dbd2d28f5040abc6129f3fcb829e5ca8cfd11f3dd486bca856016d40c12bae982f9d2f39c91a107bac0af11449a52b01646833dbaa418cd6a8f9ff2adb6c6eedeb81c8bfbf4a7c127c1d4436f42d09c0096eb12ba72d580cb3ba7f1c428c9cc38289cc92b2e47a96d9ff76aca9a8e8a0f4cfc80d7206982be25686709a04957cc4684da552d285a28535b730ea7dfe1118caa35eb7dce13e26a462e3ac883c200f8a9259c7ab048225b263060a752e0b3958e5994decae3eb9c3c0cefb44f0f314017d4657a4d3b1c1f004ffc23cb41a8a3c730f4419bd934893575db1c17480bd57cad772a904c8df24d972c9c8d1f42fe2a5cfbb2c913c4ff73a22f6fa59353aa4cc563766abbef2db05e38f7657eb08dfa2510514cb79a0b127ab144f4d14be855867b05241a308c1d8d3d4919366ef5f425e70701d61b201d5d38ea671a5249f554e395edde984d3c962c76aa64471c3d2763b702ed22ebc1c426847b23725cac77b5f182e6f947911da6b3384cf1ba67b5c67df396a4d157e5d2b5ed13de319d428c7e462bd38a9c9eba441372da695985362ea7ade74d4c5ab87a91fb54177b6e76e0b612ba7f8b646165cd667a2880f62dd68e6d3e3c0a3710bec093c3b9bb027c590220db8da828a9a71a20389b72b46c930b2b7c81d979281ae6d33898d0b6c4aff3a321ce1587c791875c5d24290b22b2cfe5c80c9eb0676384807992aa3beeeadf6ae678a1eb9adebd3e0cb8d4ce2c1d4e6b3532da28c2ed88268516ad1176229afed97d07ab105f92b1fc938d9e948434415c2714d3a207b2ddadfb18df196367d9244582982ad78dc81ab1d5c1925ee42433601298d8349b5a134325f2837023cfa83d9caa884307bcbe9c71a2ca3197b1e426cfa58f6410cd4b43736ee434ffd5a6aa759dd1825bcf589c927769d55a4a6b7a21a04d24d806877ba4d67dc9714ca5049e9b5e5c898cfa8ad268afdaf3d02ee4c3c79d0fd85ad644f9b089197eb23ee609a8d321f7832fd72a7f2708f8cf48e242f929b56957550fd842427ffc3bf47a62f759290e900fdf69a27dc8e8ffb51970070425b06c1313a42f145a970a388af824f3b88b72382cd6325331ba2cb5393b9454f032a2b311770595a803df17c95f9bfd0281863b12297c3bc92bcf703e803e3d2c166c7647b322c1752b94170d5ec8f04ecb88561ea0bb1cdd952045cefc84ad045e7790aba712d265bff2aa22b3f46826dd203c4304f4b12b5034b49933c421b1e36412f6fcf062e1e794e322da9a5429a7f84f33b8703a516ee9ff23581d574124701ad5131510fffd70c532644a8d0844c519b9d5ddd4bebecccc027794a1880447b3a95b5e363db95c697961737b29b368a5cc9c52c563a5b8fbbd229bb860518879a8e5e467629961b191f899580c4576a92489bb7952d37b49fe4e3e487f4030881d509b781aa26f26e16a58a15ce85915ff5bd4dda5497a6312809774aa058bcab8b891b52f22e21d56e3618c3009e102a6a392c6a00fb224a3ec9866de38299c4ecc80b527a65c38c748be16486362ed1c1007ea69803d257f4f729c70f6c4a4b995de2a73cc5c460971905ddd29404af1ef388cd8b74338a9a646ac9a15cfa1078208765f7ebcae4c3abfa4774c0230e1c77d336cb79bcb2d809aa1e386291de2512d13071bcd14bac51346471dcfc6e5f81bb45fa3513987ca7820248101bd841e5e3a028165524d01b7d3f144996e2049a9322d30c4421305a21a54e35b86637eba3a6eb40a4b46d2c999e3db098a44b2c049b156b24f9a2b0ab3c6a517ded7b28ec7d43831220c6dbd49458d04d28c8f1e741cfa92263c51ad8138e957a39ac2c56ad18132ac19864b3e4cea1abab89a8321bb25ed48318a1b2d5a4a7c0b862e1bd469b9bd34c6a7157959c7eb540812e3e13a8c2fbdc8c77bdb4d2b02accd4576f94d2dbca8f45945a4390234a37b285d2a38b19e9acf98684d802be70c5df006191da1561bb29bfd8dd734a76b22662d927554c2f549a7183550004d961c22e9f58ff8848cd631292378e514f21a4ac0b701bd803ea3e03f4b745d06ba319dd0affc531a235f3b547ebb608d27e1136370abb16ce9407bd69562ebbbc417b260ebb50ed1c4ef11130053dea3ff02f2930f55e4161ef39b57420a10185cddf3e104a7e724889c466337451ce44c9e374ae99e9994331de9676750ed96f5405800e03ce072fd428771e313a4ec3af41a0eb844c55188495ccffa56144a690c9d85ef922aab3e90022c5d62043dd071b5407d0abb797fdb9999e16ea6fa05a9be09ab2270e751753add2c293deac3acbe7867c9198b87b383fd9d04b7a2577a81c5f97419fd3095c32f67fa035445e7b292c3a22ee8f4c11233490bc9efa0d020c84a4943adb9cf1cb199e7858be847c6cbf1443c8d09ad35b546d284d5414996bda43d2204799abb13ff5694cb29a3ac266eabf72824b5e4939d23e40d8f35e7069e3d14b3a010c4070f42e17f21f706c5ff38dc464abca7ad6e839eb618d0b94299301c4876c6480ce2a7e4e03d0439568f44b824b67037b871d605e785a62bfd236238d65af7f04638c0c1e96b3c63a9a9df102ea4c60251688c01ed5340ea2064a0694b69e5d80fb87834c50bcdda1b007d0d169c663e25e3f339ec24cd699eb23a73b6bafd37b5d70a389bdda4249fc6a084721835f0603664c5b77929fa64d4edfc14e387c616214e3ec66ec65c244696cc5b73130b9e92c88d788cbd6a7d15b97c134c347b0ba8e8ada945cc381831d904070e78d40c912e542cc3a5c282c4474ea4bde74d891a2077353eadf9fdf8d07223547eb6988f57a07b552adac1cbb019cd6119b3fe330891cc788902413c29fa43e46c2dccd3e1500abf78de70098d3fb459658b1bb23177a1816e71c39ffa1740c7f10806d72276fe15ebe3f659b36d23e27c9f1158327cc0afb478c2f6d0e523efe5fdc85337bbe1ef1b783448f75f26077636a794cbaac188d4219330b7c2ed4b30f0f74b382f19d19455cfc1a71c8e1aca696aa1a2ee2622b118d6f38c01f9b2102c8a6d9bb31fb79869805961c59f168b7053b926408655dda8da6e5439390943baedbc946a2fe8fa1378128abd0e8755138391fb233e8c4e974fd63dfaf390db4872fa6e2e64a2a14226c460cf1057b1cd4eaa1a7372ef32effd00e82889ba416ad7c1798db4ea4b0ee3ad5bf215725eabfb6253303492ed856b97926ac477c9f4898646b400fc40d583a4441aa7e538d0cfffb4d1e6e17ec2558abefc325fb8e1b10b668720f870c8840622251269118d34a97dda05ad091b3724b931db937124ca86114300a60a3e61b418432fb83848cfd6f3db05ab1e0946d87ad983775c57781c4650dfb4fcc1314d70c51e8ac5a019b49395e76e7327bbf0f009070286caf50701eda260b6ae58f9042db67055734abb2b650c3e11fbc60a8859a1618b941cb7c5cbd65cae260275b92b0073a0cc086e2e21697711bd6b96966fdbb05b257a8435e158e2722cb844a715fb91b7fb9f3d423f6d55805749570a3aaa26b6472094420e01be32dc5032665c12d071a0217f10d7c503853cfc172e6d264e58bb49646e731ec21edafd54a712ba1298cc1160c4a0e69c0e60e9d714fa5cef55f80b01625cafa610b0fa650aef170349edf5da572a00f6fc8a49f76226759be69d7fee683b34896d6fba75f096d6b773ffa55ca8184aa1cc31940e588aaa3ea45df8dcadbdfbf18ed5dc1df37d96be5d6db7d749400e94c6eb4111ef8a561f0cb65527393b29c41bcaa0b9cbc00ee717b3d81a41f317839014d5299a983fcb2af6b0ea63cbba3f50f42aab02aa6e3a986705d37d94119cc68a0bf8bb6a29d1123f307845b87de87cb794133bf0021191270d672410cec79f4358241489ae1a02e27d99cd6ae67d6d9aa90027691ddb2291ca77e4cd91a20512604ec24e231c10bc418c76b6ab6bb7068c37d6863b0ed8367bfbc104d5b48de13cf13cf0688ece56be67ee0aa15fefb8caa336e830a9c6ea143dda1701636739909b8464faa1314ff7e736a023207c934e8c45bde6980ca3ff640257ee7cd9c591269e080feb073276782e42a1a72a5b6ee5da08e1e7bef8b625696e9e0c691496760b9a8a6829fd6ce8aeaf227ab18ce788b247803553a6b1c9811c04aab25e6176d4ae81f12d6320e64bdf9add83e5210cc463a26ef6d5147a957be2a581398e431af785b28a2a794e83f55d664bee30e4d2a15f01423f07a0ee683256d78f56788b63184504eede90b621f1e9dab5a8b76c5599c0ee32ac6c05c85887f78aca408d213843e18eb1f6b359212cacd4530a6f9a7dc563db6dc810c176e1fdcac4bd2fea5c6f616852994244c77645782518a0b920bb965146e039debd0e60a12345f976aeb5b57cb243d5b111350ac2f864980bca867042d121da5239bd2753f76c7ba2bba72d85df577e223bd475487ba74bfe717208d02c490001a07e0b2063c7d42e1aa4fb757b8de817f481eec2bd154fac931103a1a3942c8bef6495ca4c4aa40abad4bfe59b1aa244e8c4512879d40d4afa789aff7012e1f75b462a1ad9aafb4d992e12ea2e43e2ac4162f39a184097a982cc508d1a8b3b37e23c49836c4488176d59b03c4746013b27918736d791aa60d79059002102bd2b8f44c7252177e7c5521f9eb279c200685a5a9b6ed1c3b044bbc3e813ca9d8c0aeaa1b0eca408d02cc04f40e1aa28e1ea624b3bdcb38a83ec4683c7cc53e3e0712d43c39aaba8510cedcc8263968c732767cd08edbb3352929f7a0955c0c978da535e2bde84e113b0000d01324022010cc1a200047a4220cf4957a0400d3df9b2606006625dd744add20a09dcff0969fc27d9efdfa323d9020da846122bd7d19dc6ddbf43d810b2ed61cbd899462b423041aa9c265903848d289789bf9105ad02a491c080605b9e2f941e66c969b207b5643c876eaf66be38399bdd858362e5e1d5623c3ce0019d94a6ac32fcd16934a22cfbc859c29ec6abc6801ac4cf45a37dde934f267ef39cf662cd3dfa3826dce906a4cf21cb9ce05e98d8ac57cf853ad803a16760cb83a284723ac133a863e2f7502804ab452b3782ce47e0375a0a91fb014d6399a4e6d62a92d6cdc9289760403f1ca766268cbca6c3e10fe7bc7d32c84425e1cfa368afcdd6dd8f0d876f33d449e82fdd5d6ea77dbec52c36e92279382ec75dc06ad03a84fa2341c659d7d3598365d78bdeab1db174d5f0fb67098e383068788bb5312e31c5fe448c9ea264c778875bc6687e756347a71da8f9452ba3918d5acd3dfd59949ea73a2650e70224a15636e00077c6ae07d6aea7b9690c5f1b3f1ada2fd4d3d662d0829a072e28ada14b8e7a26e51ae8d0069ba78b141be52ee24ae2822dd1961a35a47924b12523b2e1e254007f80df4f9e2be837db83025b7936db3c0bec7b05ae0c90680214a27d21295fe88c754a70ecb040cb979f6d632916036e4c61056e85a91096b4bd395fa033e7b8157aa16eb85bce7f8b16878c86775e8c79c98c4d7aece3babf3c37a58718e169531043f4e13fa3335e93455988ec3f83ce2a15f86313cbb8e62a604175a927085d1d43cd4dbe3fbd0f91c824f20bf99ba47540c3b754635914cf51de0668225faeb6fbebc416abd45817cf23926c063bea64f56f1a5959bb43a291abbacc8a6d0266b5712fba7b622004195b4904202e90b5625b243b99ca96ec9044180dbb6f22dc9c5d9f5d2703e89e1babc163f16348201a66593f552f0c0fae12c6f27b28799960bc7889eda95ee09dbd4c0ad0c0d386a5ed92e09d6ca5b5c5d9d647b63430a9abdbb6894b246b4d94d4716fbd24ceffaf6f192a685129e0c475708e9075e97e27969e1a0b5c293c7576650ff44b6ae45ade253b1b442bbd57af7e2d693df40b3f40b777cda0ef964c52210de683309b62721bf355f5d49bcc5e9e2a8e6f442eb3a2e48b8c2a7058db42b52ceb9a3251a385c7f4d5b114a908823e79917ae66ce888ea311f111f1e03790965d90adb0c56e06c4c5237efe8a8386ad682184718e1e37c80d5e4fb7599646bceeb85e0b110253c3836e76cf503e5a9c6e4a3576d6e9356be02057bb93d65d0545d5e431f0870fa82136f62e08c725df1fb4d38a05e9161aacfac56a06a219e80ac06427de279102bf7916a3dc202ffd678ab6192b939e23c8db9e156768468d59e77d3a2b808b38223bba04753ce2eef48512611e91bd7bbd99c336bdb4bd16fa9f2aaec1a39487a07ec3b127e07d483b6c2a5a08f82b90ed2a8a926d22356b03f398a32a21c7da74a9856c1561491b2b7db21f6ae1d8d7595a10270bcf8247c61ec3393a77c077bd30cec739cfacb9169cda94853a69d71592a5c25504f81c25679d387c1001c2f29403a8dfe2f66a1a7ba0126a58cb595e1b7dcdb6124841594ef4490defc76406424ff79dc56a5e697daf4fbb511e8297878ae2beb8d5b2c4884bfde83ffcc98792b4b41ff3c1dc9bbff12cd9cb2a434a87f9667cc60781653f42230f911bc1adeb4c3ddff09c1177819d81fd5e50cd93b3e2864a3e0467aa7c7072236b453a0e712215ce802daff2f06ff795529098518563ccf0d0421d661821fb57cd8e6787b515d70fb349a59a022ca4d032d83d9fe57619a2b00c104997fb3a66a2fb516d811e63aaf69407d7b3a678252d2388e8e19f6c4a2afe2194531c92fa4f73d762303f971d138860ddf1ae2468416bb1f610a28218a029c2728e0f7f45d3a57d668a97828a0353b21090b37079487a969539c7bada90b60714dc5f21c52a45153f3d5f06fa5b67640be6d3e0ac0facdd33e66525a9a4af386259aad17e183435d381ec4b0da597858b17add18c424deea350610f8fd1dab73cc17b2c893e4ce9dcaa9fb34405a5f7f8813ecedc6b61871c1820527d9a0578e257cf47ecc6e47f95e7bc035fd2935d13805ddf389a29d20813090fe11a711d7d6b5783c1416c8ce02187bbf1d5cd697aa1a6de8af62961197589a319dd078a270aff8a0b5f3d5191f730814a62b308dcc69442f98d647dec0b44c23c7c282a9dfcb3b48f397766ab6acd2aabda8e73b78126a6068a0b95adfde8b96377195b2ba05e8bbcabf402068dd97b13a3393b15293de99978734633fdb044f938726d77e8d4c330fe0949d734457e44bfc9420466d85bee1dbf5fab42dc0b73ccabc9f2a09ac00696073a9149efb68a3c619117899792f8c92ef5ce30b1668f15a8ef1b1b83dc4d98bfc185b9e02366c2451e8b8ec9080dde9a9c891920d67fd4c8837c378ccd5fe05a0785599fc910abe3c4039ee2beadf19d6820b7aab85c7f0e1296de72f7612eea50c60f6b8b56c606f1dba9250a92cb2946ef6b02cea95e93a88131bd18195c2c5464932e5cd432aff412851c20a99364cfe88622141f6873d38181183ca906fe34c99a6acf1d6c8bc536a4cf92cb72d27f3860278c3cfb599cf2bcfe38c66ab3418baa66eca34b25700788284f8ebe6b2152fb56d7a0115b8b1c551f480ede5e4177f8c555bf0b1e313874ffc366fe29c5222d06de7c7aaf3a9777f47a3deee12cba84790786d0352fcb161871a7c95f06a162c97163f839a36b18c448f103a14f0dc8ad1ba9fae576a702b8bd171a1d9070f154fbed3cb8a16000b7c442aed3c5b6a607cbd1c6ff7f87d3d5f45b1d1653134d625c2c38457e552f363c5c6459dab3d2cf9b6b389c0ab544321603da4fff74f5f908058412a1c9def28bcbe08a15dbd7c31d2a9272230a1c4416c33ef0b8edbc560967f7c2d94473d5bd1cba2bf64f0b1974c627222ca800b629ac81efc47a4ab6400d97efa7df26d26df3287b8e22ce7531ba1c54c0e00dffe900bac4c2c437cda9e59edf801e08c58411b53077a10ab4493bc430c9592841f2e4984024937e1919d47eca0f05d87cf56b01d93e221bc072077072dfb4f1578e3e8270e59100aaf8b7b35bb12306a1215ecf7ebed2f22a1250270b3febbb4aedd300618d5f8c1a6a170cc560b5309f7ce3386bf00fa497c31e6c8c373371064d2b7721131843a1611db286f0558623740cc3baa29ee926b72b78a6692f91212a778225086c9089983029766777e8877bd2f1b9e7f52886a502eac8d2d4e5e80126cb3cd4c03d6280b4d1934a82929da3cbd5838b22a5ff733a25d9b77f8204ed0b06df3273ff9e4934af9a46b168fb6cd0f0882b3bd6c786d9da41840367f8f42a8f017aff7186e5c33cb7072c4266100a41088afad1149b9c8213442ea2e7233673ef316c673c89ce89887f91f12340b4f44b499c184036547f93da3ab80cea293c63880cc457d027fc72084cc5b1d8f88e4fa69fa1871661b50cf8cedf2915642abcf287a3735e102434279785877c62948b44a06d868b8da209a5c4b63217592398d2b4cccb4868a44a68bb8ec855d969f62674d252fb1213aedb07680fc662a09694120043f05e2662cf3ccb56bd5cdfb8e70924253475322f97f4aa9491376168506deb0978bcbea9752689b84b7bd04dd2fbd98bd2b4f38a97319c90b6380d03ae0481afd8e4c6326c481c3a6e4df10edfe69f16f0bea70ff876d1d488e3e185608a374120bd190aeb1b09ec88ad0a7dd2832eeb6c739a82d6ea8b8781d8900c2264d1ec6e8f7f102e45f5b971b1cf0736e2d1f4ab33863318a270903ce82bf5a65ddb79d61443f2092b6507d9c7cdab268af05ba3f1ea239fbb1827c2d019afed016139291f7c8f256c0ebe746aa2ff2cb8277653f3606262601dd55f1637b6b80fa84753e827b3466646c2ceca36b6203aef61b0acc38c322e3364ba50699b3c11f581fb2154d7c91e9f13465ba151ba7f54007430a18c0df0211d51081fd594916be86d500bb6814fc3828145639ca5dca543c8fb7e6ea6c04e061a1e6bba78f5c55014c65735a1199fd4738b3d18d32250a42d1178c7e2d1129bd8e5cf1ed4f6b4dc77bd710dda96de00aa673a6f5b402041d2d29f2073c2cf862e5bf8d364545c60da67fcf657ae43374aa3fec1630563e61b5af988242a78ac67b52fc708d91ce62a4ceff490e4ca3f21ea3266057a975abc34e2af005a6496ddc253be8c0ce104c53efcd1affd8dd44085747e59a97adbc05820457f2813461ba852f826a32aaa04fdd58b115c50284c144a7ad847406ec2d3fd86fb78f93638db888485731e2427e169f9bbdad22b5e0fc7f3cea746b9ef2c45568485b3b51a3daeab075676f73852e9fd49ef82153e2b6f40744788aea56f38e014af6e6546ca8230382aef4f34c66c180ef0f100836617b9f0a245b848ffa71fafd13206ff77ec7a5c20b2bc9271b84597902701b20d306b1e374cc602a170c2702f1e0fcb6f5ecd0deb9aea06dfcbacc12c17965297270bcc17b847b05f35b85f97a279885f236734328168d19fbfa6da0abb5894de4fed69747d6d84ec1f974e44b8b3ed093181e865a74c9da6088148719716c603c5f264fa880cef7f6cc4cbb685785c19df3b66c492218cf46bb54cfdb3c2364c09f66672d5298fa1814e7475c3a57043efe8f13928a4264d5d7a6ae611554e7c6355dc152b1557c95e5605d7c42d3e7c6acc066612b3f1db919be7af815e5887d9edfc2810ad3ab9d869a9f9dd79cb47dc9f94dac3756f5dc210066e333e6f9200495636ee9858913bfaf2f0c87df507b1d22b981af272a42989ea2a3009dddd2e3cec3dad3ddb1d36b0824940994cbe73cabb9f2862815ffeb9a1899712d5514a3ea969c47948069126c4d0ccfd6c4656c29bd4cd4d7b2cceae717727ecad484568cabee039f132b6a520d4260df48a6ab482c49b72ab1863b5581176309f1252e6046827da2c36cae22aa5a976f1872f3aa9ae0af0666e6501864e504f4ebeaaaf99665e6d756fcf2cece20e69a5b110b4dd41e514ab5f736a7eb3f93d93640fb50055a95ac7705d7ab97c14bf6903db5558c639cdbe1f665ec10c3cdca88f908b481b557b8a751a03f8a61e59404eba4c40e66c56119b45062777958d4c070a37863328669d970944831b6fe5a76fb9f2ec5a8b09502ae4421934570775c97bfcc3bc26b6f4643762705f82b6d45c5cb5be89750ca3c5cf1008c33ecb400db689c25edf891193bac3306d4b532b60bf1231cb366d28c7411c606164bee6558c890546d6cd28804e5e37b057cd6bbb3f7e8812731e04719706d4372b2f69ec355d1cfee324c0a24d5f55a1c0f00f82c781dabcc3c42d6d35a8ebe6e9949552c46efa529a1f3a7e06890c79e0844c9e36a7f4dcf126eb5bdd66255aebc56d446ca3b3fecb060e172c85d8239371655aa754fe30d589103c79a1028f0112cfb2b085e21b24305ee6e9910a60170c78956f29520a896446bd7a4bc0882aa90428dda0454d0a1f33dddfd28a83b3e61e8252b037ab6922fa0b39c85e9e6e588a6359c41c0db4d8b37d44cefb84cf6bc16adf7ffbd9e5d99690780d341296668385b870a0996d16175f57abfcb09e19da06daa1143c5b48e99acc7a10ea1e95e6055ff86f6fbb42f8102f84e4aa062ef2937a376675418ee26b0594597e44eeab53da6edf81235498deb2b326ef30b99c2f3031303054cb92dae795f0381a82d1557e568185a4894df1c6dfe55070d9321676da6278dd8c45792ab26f7b7bb6796cb4b501ee1940d00ea2cc969cd2f055b36ee6bbc11169918d7fcb9f064c752e74b039689ebcade0f410a2e357a88436c2eb7557179dc89cf435864af971ec6fff4350cb5de0028e54eb383b10e3424c8c6d2d5d89aba5e1a550f89ec470bdb23cff8a6d1f52e4ec475a2332e6c244e049d239100df498fa7155e349573b9378b532348cd9a598b75d88d7836e9225babea9116b7de2ee97c4f986af485e76a83edd20591c53a632946b658e6b676e6bb9a0e5b24e10a7f83b1309d69289824d39d7a731be8ab5f9e8b5e06fecb396d4024da3c44605d661a15971b99e804814c38321ddffa34166f4412ff7e1656b9b2655ad0c113cdb144b56c7869932cffcbc9014aab0d8edd7f3a73e65061aefe4624f6eb84b573c73f8f951581f0a709c771d055780b3728c973972d60259dc5ac26e4246c8b0ebdb54bf9d404ca86165a6ce4361a125c53e22c1bfd8283d5fc6af6164115f05313bbc4b49b6e3c7c2e27bb5ca40fe1e079a174d72ce8e194232edd6215f97ece24ce8e75288438d06c01eaf94114aac66edef8bddbbc1abc5f8d3951664da9bf68ddae38e6a7ebfe373404a846970d3e68b0b7966bd18b461d2f4f8a4874378b99949a7a663ae1bbc361f72acb6340a40228a265f4961bf378d5b9d0e5f88e5a59ed06b77f99cdd9ccb2d02ae99da9f11a38e3ccf6a59598bd4ed3d782d859250c3f635085192a57ce9c7559c68a2dee7e3d30a54953a321592a097e76a32490012bf582966ed493f93463e56aefe6ebe1a37799cc943bd71b68fe423d42b618d8ec861789914bf5058c9e32b781d3b48f4f25ada7492de37f2671ae0e5e7019ecce469e703e706de8175efa26f54c1a78333ef333bc1c6a0b30e0d063ceca9fade6fb46ab307f810d9207dabb447f857d6936f7a2085aa6b232fd66f71958d9166528a088ff3a725dffcc10fea55ab8f8e220d6c7988b7300b9dbe96e15f0e77b7ba76c0951340048eb2635cde8641ff41a9277b9ad923b4569e4db408d0769113b6273f5ceabbeeea65fd6a220df2284a5022e2705a7b285ce51828ba832d053b90f42dd582866381c941c1dbc75dde4db359aa9c985e320ddadcf994a1ad3a9e039abd6b00b744884a1fe139172441e26541fdbe213982261055cfb90ba6c4e7144ecff23b3287e9b89f2306b79f91f167f5d893dd4c84756f8d5328e24578784c19239480b320d760ffe84f5d5447f91d8fbfb2290d09bc800bf8d438074333e2ddab0a54c28903c6013c82a423b6b19f45151c765a03c0f529f41b351b2c313579a0ada1cde24700e166ea1a9280e4cf00514c112d0161e16e398a08546c56f18aa08b45e9093f2450619fd982eab6a13099724ec8904612e11820d699ebb4edfb2fc0f47221283d7c8722282822d9a2c61114cdbbc038b6630554b1456116cff6e60b932c19fbc68d7765bae0c11a9df4102a68f093d0b49af05f5335cf41f78efccc70f236e0820a9284ace23aa7c0a6874983b82ae5683cb0f3cc3c436369f98f2fefd630446e5c437f29cefb72bcfd06ec8712bfdbc4db0b2bd2395b5122141e4f648199c5afb4e8580b42bd0faace1d0984eca27c2111c5b62562964000ce950c32d2bbbe616c54c59157f89186590966798b9417353590d5259e18cdca9445866d532358ba402640fce861b5bd9086528d24244c5f7f2e539ce4a63afa5d8a04c70341a04d0a137efb414eb168b1c1a2683481ca754e90fd2a691dce0b16a2a5fb504930da8620dc7d06321550818da2124cab40728aae8fd8f2c122ab6f2ce9c01b6a1fdc1f3bfd5cfca415ac51a2f908745f2528686aa006714c74c32cf15757f68a7c576cd4acd47411089c49784808de2ad7d247d9272ac62258abbef10eb5e39db5c23f128c998001fb39c80f2408a7ad1ea3eeefa74bbc322e78da6c208153420c3210f3c960a31856e46ea26529bb9e15291595b21412c5e803c34e70882cbb41fe0d1f117e3f770eb0ddedc994b240aec0931380fa11d135c807806ac798b1d6db7ed41d11dad31f4bd3afa0e9a756b532e59024474d8e7f478266358995153f5749022095fbb8c9115a03240340d146a95eb521cd498b526faf98142a003f25412281aee7a022e1b4094800e88e7a3d4dc4de812e51a899873c5b82be5095410639455703f6aca54393f9c98b0e8a6eca1ea880109c2972d10036c90a4d005cc39a404267f2a53b4e70e2b25785306d38ea2a1ab17449fb8b61281de37ae4f37e19e68e30007a1fd862ede3a9eb06edeceeeb7c40ed5a627ff0b24e7e11d57fde6f55c015fe08040bc9ff46fe28a957d21b9ecfeaea8999e26e434e5e8e042e517dfd0de0bd8da06d927a6d118f0a6ed4ee63494762285184cd34daeece7e2a0c231bc73f0596a4d0a77181288b86bd5d23e90f9b10feb87b14dc3cde3358d3d9272d169c2baf5c95473e8d18d1670e9d8989582be9f4f185e5163d268011d0e320f7295fee2699301b46c599a33af9ff9486b3aeb3a70eb93fe7ab95fa14bc187293ac53a8959e1d5da273a2cce6ca7b5ad66dba3264426ee94438065be776e5d6d590133cf6b06e52f687ba942170b843bf4cf4d1c9a489907c67093116455e420196a203787383e65d71d97890b8e110f818c0bd10542ae700588a9a6c7629504fd027e3ac06d16944f8d8260b176d3729c484a8e6f30ccfdfc29d22a8971cf8651d79f45f312699ce110ebf0e748a624c76d1ac65dfe14dd9588718786a8d39f45d89234ae7918ebf873745622c73518e24efe146995c4b867c3a8ebcfa275f721ba1c1aa24e3f8b604bd2c8971be68c8d8e89d17375d308b3be208b521d066615acb270aedb634833fc62d2b263978df6920d2be072b66297aad84fbc9129bef5902b96dfa0b66cc247b9283f8c90f525897449158df78e2d1e3b57f0d51a1a139bacb5743b5e408b7559220673ef4a791ba931a19cc6a7f392c945a67b80a7939909532110f860346424c0311dcbcd802d8c1d88d89df7cacafb94fa5390ed2e958ea963b3db66b88154ad7bce0269a314fd966614f560218e3498d3896b909ba9846200c65fecba85606eeb8d23751dda9b9afb5cf7bd2c3ab959150103d3135d20184fdc642beec576b8b2b26b5fc40d5f4e2962cf7a10bae7dd2b8ffbc0ba4ed4eb203da024ef3ae696ddbcfea0fd03e743c45c13be4cdaaf83af3a2992b9d0a60fa4cd6370ab7a4caf000b0bc766b2e2a7e27fc65f1f8aabe7352a8409ad8966995b402b1dfadc9275bd517a0f2921fb56e535630028c91650ac77b4b21d13cf008ae8a504d3631ca0024bff9f879a4059b5179b5c841176546210d2232f58f1c7c81d58cb60bc9f4c70958afaa6515dd03f6a1e7f1282fe2f7f1196f86a4a458885f3fdbc17b474976ba695e430357d9a20e3683ff629e22987f468ebe9c211ec6e4d26b403b26b451d9e2caa21fd2365a362787aaeba2cfbbe9fdccfe02fbea233d261e972f3519c6e8ba606e041b328ffcfcc9fe71d0d1e66760f43ecae5de06fa2f9722c0616d95e90f4c6bd8cd182fd307023c06eb50e62d21c6cb56ffe6431c46a506754f13a50d19a6ada96bcac91dbf496424283db1a841f0590fd5ef27ebc7c7108c0bb1f60abd7c54693d63a95ef7b880270b90c9176762eee812910e3d2f43769e37dd860f9e1d730e0603c25c6fab773c8532b7159a81af966a71110143fb17404c40497c9ffe8eae8a5991bd92427aee06665d4607c2dd1e280c84d3ed8d569b5b8b48fca58d704958e5d578356ab1820499336e212edc956e5d3d1a29f7b910c4694439122161544c1979a8330caba1f2793b3ac606c1f7c441566b32f160a03d124d5001db0d64f02b1a181c1dfca4138abce816f9d6e9c91196794e22850949a736c1dec974c3b095f9ef2383ccee1c4dc25f4063133c551c572ad88a8958e0fd3a12e104664c08d56e46ce0166dc8eae1478189ff085173aa4e4b857fbdce36005bce25a017b3060113058a55376a8893310b43fa93cea793395a10afc03e62665c926144392d3b2c6a4b6b4f1785786ca60f072f062c43452d340b44291274cb8ebd0d1451cfae9cce65b81fd80eaa67cb234cd2e827d0e4733cb5631a5b311c76735f428107687997f089d9d95c2b9f57571d52950845f54dd6f835ce643dc0007da40a877ee0f5ea31f7f0bbe6ab127fc9378afa6cf261d154400b8faf90118cd82f9d02733b8f29183835e48ad9d62fe4a07282a0cc80fe0fddd40447c57310b02e8af60e68d81f366add608a2e0d3eeaf27609c0a20a4908f1ead4b7f8fe7eaec73751e436175363ef2043f0c0aa5a89d5a11c354482fa26b656b0eef21e17f69fc3fea16e760711ca71a8344e48adc669417791877dd69c5540ae4193598b2ac3d5b68d280b13f2afeb414150bc35075656c99aad2051f5104d945921ab5e3da98a52d42520a5328145fff28e8e2496d282e623decd020764c8fbdcaa53c333be13d2e0b831bc112c19cdf219b06d670ed87e0d9f54167dc683b3b7d9e1bc6df223a3d72bd8ba0628a902dfe501cd995796c8be667e68b594eedb2063148c43c50b5b53ae34d3da5b18ff5ecafb17374f271416653bde9baecc1c46c4605caf05f377c20141239238d8a3371b66c141f86202b39972fceee98fc82ab725f99d1267088f23675b537ad2183ed63d8831fe8c8fc27948de812ed9478acb94a301bb4eddefdc3692cbe72c14e4e828a62c62ded7b833b1e8e2a53b438d91c621df75158c41a4038000dda40395d195f12d86a856645cef11992072c6850424bfb92a25ea2ebf14688681abfcaece31f24ca2970477b227b7e098c27b2e8d1a0a44d8b4b0081b23b0db02d42caadc45bcfa16f4c55e2470150192642ab8602027d3a24a787932492f6a66a4ce1d0823c7d0fefa2c352f651cff35e95069228b9a2a1be862da9b0a74f78b2e2877355f64e28d1748179757b1cae6030097fa4e667bd26acc630f0bd39148e3f172289698ef7f8bbe15a51ce7506e86f39164c8097ca7e54ce387ce83f4811281ad8ccb3d45f3cd3871bf1a40c227113cc8fe0b4f05d139b0fb4db9e5b2f94c906b0a96d06c184b14838a0953c22088c841c96685c19e5ba32ecf12c68b7ccd343e4460c2c9b047d9e4c13c1319bafff948128efa51144ca9b63f8267f82fc0e7a5e0a4ae8210ac760c0812c1ab9a85905a1e8858b94d780f690759febd6569e7853871b50190bc712fec0c0b362896ed89e27a89a44358c9c26ea021f389d3a381e0783082810d8297820c120a9251c3de60749ae022d2b410a782d9aa4247d5675e344b7d90e00decf88c7a8ddf429694844168c07c1767e27775c56e3b30185e726aeff1bbe7feb2a9203162aa43f53f09f0ca5b6db7928deba260a8a221526f45e45f4ecbcf0d695a348fda75bd6a8c5f8d821c292904c2c8b1595cf418f581773cf9dfa50c044999a5d5a57660351e2e9e158fe345fa2b41720211e65b7bc4db8c64080956a2b66ecc1088295261d3b287b5576c6102cafc05695d400c4a930efabeec3e4a0391331be6acec2ce40d8c50887980bcee5da1cecd595aefbe418ce67f93724f7e0078c94f13cf4ab979c2c6a3f6efe0d184cc2d1006046047c21c5199b3681a264f845ae907f868932df7de5b4a29b7946907c0075106c605562cd0a06b912671cb86c8d3ace0065144f22b6203440493b5201015add7129c550e5c979b224f3a3c4d23f289547d12a44271418716c02a51ab49820c4703062def9a3ddbe5366bb13e6b2d1ec096bb96969c91ba218c53991eba964982d160b1c08509a2a220bad0a84e5b682ddc258a6896960793725304194ab5911267eb0d224c6c691d3142cc941d376c708243942ba72149984c21b18208a5948e79eac6447563a4baeeda5a6bad4df269cb732c3a5f8ed496407255440920263b6a579e28a1b283940e4dd65a304b148c103103331ce5f0c2919151171a3ba6c5cc6ac4bc909582d316920f128a90e0432a577d9833aab428a54f3860021e656a20e28923570ec871f5248921474bbcd0a0b6060c5c064e8324278a1c99111152c40742bc14b1e388091033496e0cfea47768d55a6b9d4f42782c20a04349d71618aa48b962238a1614aa5031a20a19a9ab1a2130256fca4071281d49b9fa81a307933042703a825842248b129125b62c91e03040f1218a51561524924441a116250623be1021d3248aaefec286446bb2e928f2c229840c2d01918703c60a1917b040f952e5888c0e1f60b000f1a389231c2e10d98a1640022845b82025848b099a42550d85326162480289041ace246f13318cd406384d3b5c1745e33a0ea0d028a5f409bc37544142849618ce68f5a0b163fa08968af5a8b2c31366809022a251026a0425343a0203e15d4f9dee8a12ab6741a0e756b8b31f77b6a09452daecd92e07f40611c65bc09991f50413cb38a1ad071980f4c135a1c2c7254544b5d65a6bc74451dadd89656a314547a4c09bdd17a82f49be507db1fa12e50bd697acba85ab8196e3686e63a66c8d0912a6899a1206394ae8c28547932a39f0405b82755175597d3737705041414b55112360c02104151e5670084325052b4cedd0c3822701a22f23b812c6c8941d42f0454c0a3e0c5135c584a912b0000236dd16f092224b6dad83c5a6189922a4e2a02a521e4e78dbe52e0f5178b0923d5b50157b9800761c4461e29490c1e0063b443189fa920037a82aeac23454a27840793c60d1883111166ba2f4c3335e184a297de1a9eb400f04da72d4a4eaad14062545e9ed38b0d6de184ba2bc194f663274562c30189385e304222a2a6cd92f1011d5b8842863830f34e8ac006b9238b42cfec432539c4691a8209cac142d46658b09233e98ac787c5865c07c0183e4f4e50a0ba521315a3112a65aaf7841916644431269396aac4ad55254a9d9b3ddcbd58ac5c98428acec54919c5871a0b3170c3bbb22410920a53706a594524ab1aec08b55a394163142a5062156d872e4861b2420c1870a53527e20d1a5c30987b5c53a09b6ab1ae6429138a39543cb285664f3c40c0bf8499427a99c402a19865a2df5935ae1010f25352557ac8ca9d168d90175a48992150e4b949286d870d6da2e6728570e91c811474cace065044e709499a24c6e24819ad5ce84292247170d57e15a20e556229c36b158266fceacb5168b102c46b040c5b86d72f0150aa751e832b2b2ced178a188890d5c6af66cf7723aa6c0985b4b5b42ae4829adb5524a610019a3357bb6275d3d01d3162d1c7a48717142a535c4aa88aaaaa9aa170a8aa8c0919848c15a1498e98e5061bebd3a800f2cfc60c3162b4b78d89680e1d2030f513ffc70f4a3d65abb66cf7673984224053f3831658932857405424dd52d4a5c751962c6cc153f7a1d75c9a8b5d6da4544446442adb52e41933ddbd5ad895ab1ae5f820c0f1822d9b351197a86ecaeb5d6523c802d3d1db00ac2c2d313558ab26880072733426c78022a09d50e163e86843e9a6a8d4165789aa2c55fa21ee9872c668e9c99218a07143d4e40a2ea8c8e258890dad299895b93101a4d464419c44c70aa09ca03819e16a9e1b689c35a6ba328b5d65a3b858349d9620426c5851b134a00c207095d4c6004d1036428e284cb902cb423557a7a28316408232f654830618a93187ea052b244133f5a601283f3a8b5d6fa63566b4dbc316de44c0ed122b9ba5ce78428050f2340360b93ecd99ab23c89317bc358184aacb5d6a869f66c4f78d66e931b240c5d253811228814225c141004eb29c81114104e6e782285153b5888d282414c9817cc700089099ca68c08820b8813e8e0c58808a59466a029a5943e4129d647802f493aa6b0ae245144cb095d82a0a149989a901b47c13958a2e952446d88821ae24e4151e1a2f4ab4f00f0812d20475576d09cd8e1024da0b04002a91c3af4507277cc1c4a4b381aa5317d365a8a66cf76bf21be2b7800226d41fa48e283ca8755ec9b25bcd80017a91e8610e234b56501243520479890e025062a222784dcc67973ea6b8e5bbbb5d65a6b0bb5d9b35d20eee9c94a8de7860b56ac3029e291340410381c8182c3102030d4304409135e8423a618a2693e294245c8d15923ea3a3006406202850b1313c4a060010d4098ac90048c951a134710ddb8091c0ea908e00812a509929a951f3aace8a8610cb08060eaa2a40424627c0495b6e8ca81aa6b2604055206c06566a54bd28e286138196cc4e01ce185d91acf506a6955445b440ab8582b96b1378073ea8932e29caa3610f5c0fd5039e84189de8e032757378692aead5ad1f82043694729edb004c0de7469c112a4c7122482a802e6460950cae80003d4921426127eb02458b90e2fe2b5a1cb2f27799270f03890bb2056d19c8167042247b0e870441345ac34312973a447511349703169729383068a4c0537e881763b28339ac434b9a11d37a7c5b9ef2bcbeed7f77f7d3843bef2ceb4f5e905df3e17d6c7d9beef007f87ff6cfafb8a833e371abf029b5f7335fb0ecf80d278cdccb9a5c9e54ca0e7459a12cd1e3af3761db9e91a178883e48783661661e251e7633821f63cefa796f7da52489922cb2c96dbf18abca5b65c5afa7b96bf3dbf5ecaec55f9d3e79c64a6ff085a4e2bebe3f97876c91473cb7fb09d934b7bef79934e3aa9cd32f93e6d7e4b2e9bdf32abde2b8ab1cdb183b1df17e7b778f3923fad7d9977547c7def5d4c1f11583c8aff9cf1c31d1ebdb75a07fe1284dad4f21ff913cb71d37872cdc9a5bdd7c132cbe4ebb8f7224c1f172b7e5fbdf39bf4d9f971abfde72d3e8bbcaf64e1cdafff7ad0c5942cf2965961cecc7b88a2e09674c6b9254711548c15b02306e4efade6796ec9a925a4233fc508be8ff57b9d71d33be37ebdb79a8eccb2e662f6d04791f78de57d73f21671f2167598774c6f17b1d7dbc5f3e8ed8247b4178beeee569c5b5b7269995ff2c19754bfb20cbf7d0f74cff33c30df2b8ab1cd67dbe6161ea2fabe7d17d327e7bcb72b00fcfefc3bd6e2b758c1ef9b7d367be8efafe0de16799b5b2de76df6ecd8dcc21ffe9659da664a35fefad867f8e9cfadb995a5abcf623151e30de73d44656d6e4d2e112a50abcd2d4fe1c509957ebd4d35897a9243bbd0db949328ba49931680dea6aa80686950bf7e724d01f1a409a0b7292b327acaaa4af3e86dca8a494f595de94fbb4cb275692afed6fdf79b06b74cb2b7289a2e40f6b827d15ede2ef3f6107be0e989b110ce7bcfc918eefe32898c21df1fc441ee8d1c0e92799b37bfafcdd3fc8e7d76c4f9bf799ba7f9ef9bd9be9cefcdf7a4bf37df93bd7e043d371473baa3b02e0bff65f396faf53b794b1d6e9944fb9cf9b5dda72cfcd77b546fefe7b8453deb0d1b23687f99a7dc22d073d71f65f347d03eeea9e573b883a9c1ed5acab7524aef9a3930f5760cc2967aa29027f01feb7979cb24bafe90d4fe20f5c02cfb5de33f0763b1a79ef7dbc19bffe0e52fe708a53defe87c7def7ffacc983df4533c86d57cd0c17c7f7ff75ebe8cf21f7f69a5f65d7fcb24da7b9cf185855eef59e68ff3e16bdceefd8ce92382fc7d75ce6f3267e753e47dbfbe37e5949f0263a1f932e9ff7a70fe7b72ba97f7d063e99f226f87fab87046d709c704481efa32c4e9196c19a5e75b2c84f3f6ebe88f62047f8ef57b9c71d3b19c71831a67dcfc49f2d4f7799c6ff2beb06c93b7a86bf28ed164d13d87f745d13dccb2fbde8727f09ff9725f2d3f9d163fc4214ebf3efcaad3e2875803d4af2cf3de3e18feeb3f073fb0da73707ce5ed50f2fd1d7fe0896fb38ff74331ef743f7d44983df463b12deabd496df6f7d50ba0ded7d963730b1fe21ee2c01a35406d1fff76280d7ec542fe329b5f4f3108e1d317c13ef5bc3d70437bff7a30cc7b88d3de539b770d507b8ff376285dbfb669f0e509fc67d3e07338084ca2476f9c7100c943ff8e32c42b793e6db33c81675073cc633f4c325c1ee306cc153744adb5563257b2d6d06aad158bd338428352ba9981834d69f66c94523a0526e543a22591c20e54de1841a42767a05998b8a4de219868a51d073a90e1b820ae6615ad6b254a0437d82e779f4489d602c1625194c6f08fb006d44111e170e51328faf184cad11248a6cc00a2ca095a4874f930e4861d6290785cb3b9424b6d892c60be6c8dd19a53474c1df1107302948e1ea81a5585c59525223d5848228a151719483fbca420490a9594253d1cf15c50a2481045906c0991c00c880b5aba382909e183850d53065756951928199e082201244e3d9a20828731597ac841abe146d4f23a12e5754574811bd0689c940d1e4c8ab5d64a516aad15adb5960598498523f292b0f024a26d44629ac0ed69892d62915a58a54645ab5464ae54a51bc812a43a1a255489e09d2a81e644e96fb789094e81275788c8e1ea4a871c4b62bc9c90c409259adc70860af4a7edea832b320829c282630b880de20a8e0f45b09c40e10ad51134a80928dda9026b9a439a381b040c82684eaba8ceaa763b0e6e8c1c6a2bf080c0e5e94912abab261d25f0e2820e3194c0881d3e70390d4d494a0258d243120c4bb4b62c4962aa49323060045f9458c24896ad291a33745eaa36a8b5d64a290581766c445d4464cce8fa6991f2362c52a2dc408399155400820425943839f13006091cb8dc08910d054a94521a263d4441286d005111304cd4463084991a7280418c94102001d3de50ce23ffb13f517c61ec5dc626929e373634f9f79c9f65f7c3f7df376cd48f6972f8fbbe974a737e55eefc0e2792ae7fadb5167f3b79486a9c65f3c33cb4596b67c6b1f7f99f8e9d794767c64e8a5731f3eec07ffadbff7ecefc67fe37e75e81a4ede78c58e8fb9965f3c30f310856c5d7c070e6d7b7df8a6c2dfef276f07bfabd8a9c227f79277f54e1387512307f6f52477396f312c5883f36bedec70a7e4ececcb28673bb17e5f7f3e8cef97d967d6f311e3fb1f3668cf78633acfde6d1f7619e479e417dfcb2368ffc67d3f8391c84271238e300f3a8a6e3395a64ddb2607ce8755dd7c96af7dbed3a29bd5b2b7deafdf71b7c8cf386a1e97f370f492df30de6fb5bf7e5fc4276eff6d56d2efca77bef37a73d185ddeaeb1079eff0b0b81bebd80216374413e7238a8abdd088a376c54f92ee4267547d9274ad9fd7d17fe53ffcad0dbe63b2966d9fd4ffc2abfab35220cddc9fbdfad5f7e713bafd6fadebd0bfff1ef320cbd6d9efe86a1bd07bfc7fef4756cb2942016aa2fc32080bafe0bffa9d2c341de96f58203a70b5dbfc342e0774f47af8ed45ff84ff8da74f57fe11984ffd930efdca7ef3d386efac590c46305f38b2fbff00ce87bdebff09f4d7bcfe1200f46c7bd10457f21d548202b075abaa969fa1fe83df8af1a8b5dcf4040b0508d6fb2d6075a92317050f57090cbee61e3ebebd8fd37d6bccde87dad5469f6d4af5fadb2fe3745a14b95beac24bf6f7edff7404a1f50d31c65d86ddcfd996c6075cb1bd8cd065ad2f5a594b24a29e57cfc72d6ecddb0d1d577a026bdbb1f9232f923e83aeed9c1d49fac0129d50dc4a477e77d5956a5cdf7dd74a025dd3de7799ee7cd2cab2fb7d4d2de6f3206ccf33ceffd5eb9f978b4d9633ff09c776ebe7b4f6c0a51e87c4e07357f2025ffa9ef750fc90db4a4bdef452c5483ff55e3596bdfeae41d43616dfdaec693dd831f7af61e4bb75ebfa6dba497c19cbc63eef5bb0ff3be16b4c2631dc52ac963ff6614ad248ffd398a34c9635f8658ed6f40403c83ee2b9092aef9efbb51fe8c091b5f6f33e2afa9b1bf6994b6efd1a68f58347becefbb45cfa369fbef58e8ead7dbd1eb128ba68fd8347be8c7bcbc63a2287311cd18dad0020159d2f3bb2f7fbb5f9a0b04c4e2ed7569fa62d3f4a151b3877e2c268a4ddaa34bdadf7e88edc554496f4edb570dba44a3ec530702b2639b46d94da3340502e23f5b1008b4f48955a2955825560101b9a9e9adc50d1c57d1e55322d9ac1c0fb4d666c2e6cd7cfd9438bf670dcd8b3ff31e9a527a089ec5b390ecf785a3ce6fb13b676d862063d4ec1d65e18fa0e7b633a7e3f79ddb027f7843ec59da63138773fa9c73ce39a7cd32fce14fb7376cc82abd4b36395cbbae65718bdf9e75bf5a9bb767e96a2dce565a6b2dc538576bad9d43f36ab0f3dba6f85db58adf74058b979b06fff37dd360fc1cfacb3c47cf3b157c7d8be20120df6bf77ad6f52c6d43770b8047310360a77d704e1b00004824cff2158c15e091e73d8bd7f40c5b8ce0e7b1e6c791e67f149fc588f32bc6d7ab186f3ec508fb9dd1e667387eaf03ea84208a39ee39e776ef397eb3ac7b99e359e4ddb2f4fdfedea9c12c936fff62bf585e6981cc9ec533c879db4ddd7d4edef1bebebf3829955f3db7f021eea1a92fce0dd5feb0aafd6dc66dc3a066a419c5f135721b06150bd9975d6cffa987796f589ec57f2cce9e2504cfe259727cc943df1b2bb8d4b35830bac8323603a5277123eee57db556faa34cd60faba5df26f790a4f2cbdb8d34e53e7ff9df87ff39f87d720cf3e6befadf577fbb1197f3f617f6c00bb190f8b66ebec38d648cfafe1807791dc5dfc21b36ece645fed695c251066e34d686ef45fe233ff459b534608deff01ffb95c64187bdd7800f33d235ef6bc307430966df11d6bc53f3d347b4792ca57cfffa5e54dd88fe7623fdbd38622c048a0f6210c6ed362e6d3e2c245f6633f81e0601d4f29f936e833b1cf4791271ac192b1879240ff732447f893bf8b4742fd2f22f1612bf3e1dfd69c6efe5e8bd386efae3406abf2ffbd7ffbe0f9b9e1f0ef2aed206fe87e7f4bcf085ffc3f25ee177c57b8537375f4d7b3f7fbbe7a1bd61c3abdec7a577fd51263dcfc3f21fefcbbae23fd3fb6ababecdd66699d7fcf6a23abd1b7a5edeb1f1fec3f2e6dc5f4ddb0767087e68692613cc25ce0df6f27650e24c264fbabdc930a60f075970e6a354b219e512d377e5c3d212fcf91aedcbb17e351704b72b86f7fdbbe2f3b71781e14b8c410c628cbf2bb7c867a0549a3ef7bb82fff5db8bb405bfe2f0e97646ef1adb19ed15e9faf7bbf25db160dedc770507d9af2695e49254924adf95f954e33855523029a5e48c16e25aabac5fadb4e26fcb99e42167dabf2c7b7cb12c924672266392c7ebf173328674592479c8197efda5b1181be1252d836d22c6b2c80849570c3ecc4a1efe83450b03e54cd3e42d6af1ba86810fabd20358cd3b344f1fbfcc33a48ce9f33536b248c6c05f5f1ac9999c69fc2fd80b861fe706cbdf3562b0f7a484e11a292579c8a01981c071860cc9431abdc497e481718e51fc9245d3075f31763f043ffc0d7b10fa833f7d64cc1eee451167c9c37f62312c83935b86e662babee42179c822c943ce6400c9902179780674b3e1921d566764d234fdefabeee1bbdb6b445b595ff532754e9d112b252df4c6d783a3b508d8e4b8c51b36669d4352e66de09c97a96bc24f75821eac7302ddc379f71e276fe9d5dd3dfcb5bae3f7dea9949deca2f4ee9cc3f27ed7d43d55fcd2c97fe6773f3443e271cbce88ee7edb7c40b0f550076c3e1b980dd83480bdcd36537ee76f6d9d9f049d48f6501fad94924cb61efad49da96b9273ee21b93b23dafe6bc442f2256dcd7cc2b15d8e042713f90ed87a64f7246dfe724ef738793e7558afb173923419455e491e2a69dd774dbabec542aff7be1b3d7c70c4364eb431499e0d4c1f290582cd47c2883495e14ba9e933a52493cd6732c11235288aee60e7b4d5f4fc5d63ab7555e22ecbeeae017e8e2f4dbe795f2152fcd7c5d25bd2a4a68f134d269b8f9bb0f5d0ed3550d2a6cf063aa71a5b4dfbbfbefe07febe421ab06180ffbef2766bc2b65d69fcf49d68fa3860a3699c778dada66d4dd3dfc0f4d964e7643fcc9d13ce42f46592319cbeaf33e2d951d264144993b4ce69d26c1c459518cb71625e1c954be97a8369388ee3f2b6f76fde365bce6e216cda3e47256378901d391cf47df277469ab7a37c70ccb98f4247450afb2b5e6204bcf21675f5bc635cdeaf6dde16e8ca71376cbc2cf72f8e66c11f4173b0ff6ee8d71802f78265d97c70c74e8ec5733b2cb8717354daaec829f27e2754e41d1b93b7a8b70beeb78de3b8bc6b5cf0e238cb71af2c9b96e3c62d6a4edeb06139a9399adedc8fa02d37ef0dc1ffb5b9aacbbdbfcc9ba3d2f279461434bbd3f7fdfefc3bb3cc3eb715e139684e548dd9a474fdbd29a1af0cbdc5c7c5eca9bf3723f4fd6dd36067d7b8e0deb77b68be38143a1f807b68eea478f9f77df6adf82e14c78f75c0bd7dfb21c818f7fd3929ffb1ef79933cafd71e929ba3d2f7735e58c8e67cc8ddd88f795b20fe6716b5fb152a32a7e272d2da2ced632cc4bdecc5d9e7f2f6c00d6c3f665fb41fdaef6c5621fffbc4e48c9e6274a4d195244f7d19a2e5a4e5a4b4055f8edccf983b23cdeb8c368f62ac79d808fb1c710cc71dd3db675c0e41f2b8a8bfefeb774cfeb6406f177afbedaf1d6fdeb1d0a4f96dfa887023f3b6e067de1f7be51dab378f33ee7c0ffea6fdb7df7459e6fdcd94ff60dd2c912b26e6cf68e77e7b0eedd9fe7781c6defbbfb2f7f7fdf5729cd7b887a6ffcd0dec4598d5020bfe63b17adf5ea05fbf6b5ca0bb1761afb735d93ecdb86d18f85f2cf47a5917bede67d3c7b79e2dc6b6f16c1e1cc627144d344cba76daf3ae7181be2fe6bd617153fef3ba1f3efe10b8a9ca51f96c7424c953df1b5d49579fe97a3337e519d89a652e95c257385155c52971330e49ab36c489622c762f9724b91997c4295571330e49724b5c929296fe9e65ad7242b81987c42d714a5c12a734c4d56cbc1a97c4cd38244e89539253d6aab8242e8943e266f6d6b8242cb586b8216e88ab71495c528d4be29286b81a37e39238252ee9f34935916a2288f19e48f435943d677e471309c441d37e2ec79cdf6e6cc62ddeb03182accd99fdf66492be5df7a9f30197d5a8942c783635c99049240000400023170000300c08878483619e4a52e80314800d5ba8505454308c8623a1380c83108601180600100000100060188681488c642ad7063040a752ad3c42b16a590bf50cd5e8211d7df7daf7bf36b0bec324d8fccaa04accc1b6250849c3d61f63bef8f20543d5ce990b5e05af81ad0fc0f74c6c2d100ce400a06b6480357b4e809f1851e7dbdea07ccd5ac75554e63ea778945f8377ebaf6fa2d5b0958b38a84fadc526f3387843035e2e7f92f648e9069690b1200149d2622e427ed8171ae3b40b3f41fec0666a0fbaa494b3a286240188209386ea27646246bb178894dd0cf2c74f2ed303ff1f28a673cc9c09ffea470031606ed6548cb2c6cbfc6153bee9e25cc11006115e95fd7cd2c4382b359acc44107d218f4e2f256121955ee9634f20ef7fdf356dd2e69bf3ef55209a1f40bd9ff63a4b0005e0f343420226a1b3203cef72696fa95c8ffa10e4fa4630afc6c2af0507f7739594ef2ada82f5693d394c23575de283adc253ed8f37d885a0cae575632d85a70e1ac061725e00a592258e3d2a8d6a4d28bc5a25175c387ed2887ccbc33295058d99f7af3b959c0c6a9e5423d7367698e934f64eff9bb071e2aefb2c434467d1efbcf52271775c03e3063cc6344740178d517317dae07448b9312db161c41b29d117254521ca70b93330ce9cb4a584c75d031bcdbcedcf746c5ba21bcda25331105df25b6f679f1bd2560ac4277cb61441b3405f0348bd4a945b7a27213f2ba6ae9bce4f99bfd379186ee556832273ccebb0af16f57ea5698d18043150ad0d23e8481ab61d2988ac633abc2dc99b89ab8591f83cb9b87e3d0df1d8c470558ab78e32a28f3d8ae18438c7cce49942e617c2256e916f1de0658729045cf1e8f3005c97c33b7f9e985fe4340e8e8c794b157f69580208c8af7f0441a36f138e85ae6667ac7cde5e81841389ae1b3b4102d90ede8bf8ad9185bfd07dbba8fa1abb49ad6b5fcc34057a4ddd9713785c8d102ba9057b60080d5d847ad403cb28cece45f4531809852f98de5c4c6c71bfe5a2337ba85109da795a8206c5e614de3d8020fb33ba496ce1440bde8793c0f15372d718293b75b1b8e5f84f453ed2f56a562157b7338006accb60b22fd4d7d92193d81a860820f9fa5640413a4404a5c257d4e69375629a3d1903bdc6360146242f90e7a5ef6957e3876e30eadda77ee27057dcccac91012a75c5b2c5e0c2cc613b84daa044f80cb952d2fae6d7970ada5b24aa5055d17c4e5000239fd42588aaf1d50d1d0ff3da06826bee54398319fb367818e11cc9b86d4778ba3318464e6d39eb9329e255ed323d1b99406405258ad6465e0fb9d535512cb80a526ca8e99bd1a584f2d8526f13f8d46b0d902e6b90f5a633d21ca64b5c7bcd241d184f169b88889adf39f2a20b05f844ee8432d1256f2eb08f3ba52fcf0887e45162f60b27fec7b0ae6036e6094097a8e093b2449389c66a38c3a3120c4db6a58727d15a036036e6e3b91370129d179a1e9f1b0470bc9637538827b72a3e0d815f4c2ebc2a3cb43f89218553bba6078f51de1a0feb9780d07e9566378b2f31d23388e9ed23b9fbfd969d5141005ab5efb73966850fdae315e233f9ab5f43ad680d0e7b6590c3bac4354b472d90bea8dc06310111395efb76d870b03f40588c60539e92dd260bb0882a5e39b9fb01a0a802a6f6d17f62fe833388a4dd8402cf640dc2471a0143813970d38161126584c4cc891d4095916e1bb1c4fae019d987d38cec926bc43e9b661662340d9bc4a8d733772a457d6b5ee21e3154591d4116d196d6c8e0d8bfc818bc2ae2f8a138f0d457f17864bfc36adadc880d64dfb6f8a4ee5f6738a6f5cf0d6b8e42f616047d58821e7226dd8fd5137952a1c328ee917f263bbce3bc567b7c01a76640d9a4a09396fbbd71a20fc08b137f36cec5efca36163ef1c9c4ea63ac16cfd5e3a8491be168f1d9b81f64b26ed9cbb9f22bed6b94668739e4491de202fc2368fefb6645789853f7ea9ca901e144300bb51a9e2c8a935a433dbf43ff228efa35e209699f3e3593f99da7c95d9a004fbf33e77ebeecc266fb4ccf4fbf068f724690476a00c2f0d9474ee2b9da3a3f838f7dde69383aac76bd2daaab332f66d912cb8fe6eafd1ac9036610d18d236b50001b8cfa318fab6f37175fa1253371679b009024fd60836cac6424bbff9b08b054c5a2d169f725b4e72f291ec1145eef6397943b110a567afd7518895bdc5b34263cdb1cfadd73cb045452e5dadbef15e2c7e717f4792d3d2766e56dcd9623c9be12f9538332d28659463cfb4d9ff0222f47a97adbb87f6ae4ff4913e6a737d772d6636420d1da36a020db92042b579d74cda03cf5b1e1094245f24051842ed8d5241a573564f3d724b4f9cacb43e18ad04c8050a213a09b045e881c2c64a863417960638d48d7076aa4a0c7409c244597a1a751295d7705a3d8f31034f7fd6d152d134755d8ccc766ea862a0e1fe589041ef47b487b7d1bfca298bab985404b336e1a2a3fc2a666ef8f3f235586904dc0cd628c2e09770d416ffa0bf8e1ba4e4bb7670d56383e1e28ac9e23c63f3f2a314672f72ab1410ebf61725a515a0474ef1857c117448674172f61653be1c2d8330014a8f98447ba75777ca8c65e5be0cd6edfa928522f5c62f10dcc7a5728929ce06b6110bc326c8ca3f92b90068d7a15a02c235412cef5621d9e72090c3306e327216b1edcbe909222541cf89cf084c7ff905c92be86de4cf7148d002d52a92bafbf1e8e2d21a38b8cf02cab61079668a3a3065370a2860ed0be23e553247a78d10709f366372e0e9ed20c253c4e897a8aa844a1246078a9a3eca6e735c8918ee310e4c425acfe099c4a2e8e662fcd8baf6b94dd32f61085efacf78c19f574f3e85afeb5e657177cb5bcac69582c332c82bd77c5783c6e1eda3a7e3e762545ca3a1c808ea8dad237f4332a7ce7410f3fe0342703154b4abfecb1f9b8bc74b9e1415a2f2a44d8472cec97534fa34a8516716bf28cdd6187a159cc94662fc1dbb245750124dd989ce0a34781c645a948ea5f5c310b6dd30099a3a6c56c97f0a6ff71173ba9d26640e81669bbfede170dad0b118886019bd502fa7134f0d621b7a6c3d159649057d12a4633f5c1304ad82f90c8b2674763c0115c09c9eb8add0e0463f02156125f0f675faaf0923c9d4d15e20d0806a75ad7bbeb225bbf2968b8ef10c3db5439ae12f18a22b6603ad78173e98a1a8290a0e8ec9b0db9edfedec9603b48a411d9c479e174a432786012babfbeec7e854baee28c78c2a0539e7c564348bd61f444720453422b925fa372b8443225bb0b6ba9594267621009a9cc42b22be415801b0c551744311f8ada3346488823329e30a84ff4425bc804ae2c5fc4442e42839c494e6ea79a75db22f1afea10d1aa48fb6daa527986cdb79b648312be8a59f13205c5994bd4b7ba0a916a648956a0c5f08d27b6ddf752035cad46e0c20487ccd2baf712517e27ee5a5ecfa6fa10903942c0a810d1aa550da664c63721ab2806881c712c0816b62bc95902cdb4dd006583517daf266ae77d4575630590e779f9d14cb611c98761199c578c3be1384d21692628ccc37f0d63bc59a03bb9bea0ac80aa7975364585ddb1b3f8a57455929f81ac88eb52f4098bfa0f3588397250313d6e9c44c636ceaada743363d0aa3079f5bc248a6872bb0810d4d5946bc59d6fda2c8d32682df60f92c2efba840fa8cd46432a8b7a48cff7826effca03bd3fbb2f0c018c1f6eb5f3f52ed01fa3e1b5f493432234009b68c848833326b606f36afd7d5ada02b3d22db42eb6f4c4cabd9f63a15ad121903e0587200ae2e60203c722017fa087f4e845603c980ea7a1071149342aab7c38143831efbe2092d9cda84929f25278c34faf82de0101fc87acabf99078f49657f7c7f7e3b8c77da963dc5f4118ff814e8b4268dc2330b043d12af33c14a345dd9c043128e5de31300c09221d11afef8b71bfc49585daf0826369ec2da6d0264ebf75d3780381117d12870d0098dd8bc08898feb20ac7210b8b03986298d9c0fbc8309b9c073e9c8183e324a756e4d7320678268191914121134b669bd68f99b067e018389079953f4cb5fea1f84886ed705b2b0cd57e04b50b02836478dd377d1711b35c28e5354323d09891f9ce0a88ea3f60cb0559e4f11218858ea04dc26f91054155ddd75b53694bb0d338048b204a6064d407de448c0894dc1f545b25aab2cdd7c87fb60d3f7830e14000a2f1a6687c65eb3db4e087e23d3e5198d562491c055029847f390a3b63070dd968f0f3e3f95479db6f25c76ca1f84661bd43c5cd21bfebf3c7cf0fe0e8ac478df10393887f7c12b59bae838edc18aa23cb79373f03361e0abf1e5172d0a56ce294eb2371f13827b41420def06362699239d6b288b32bcd0be64cbb4b2754ba719d0bfd37752257a952d9d6047a985ac37692f05ed9044c5ce08a1695a5c759d126b15c74b9738b561a437b7404c94fbe2ace6e056419e5e6b7bdf202614d6ec3261da109d83b6c0a8425a86d335b4ac485d1a55f7dee499804ddd55208969a90a7c00b08cbec11130a338630961e0c9e22ee9254fc71679711629a815c9bba665fa4afeb5638a1cdc43e9e367b5c58883d46118fa401bf99c62f6c60f2d2c50a3b3ca1550fdec0fcf9fcb7bafc1925f206c88ef1d88c24c7bdff39195d7bbd8a112b8517c5f601d0ae385156b1bdf15d05a028d415a21028ffb6b401e80c5c71ffc059bea3768240f08335bedd5f8e6cccaf30e1feaa6308519d69baa6c455009d1a7ff38a8640f366b53eeb579161bb6287ea0a77184c3f8e7736dc6660e0516855e9a77068cd323acb83e395d651bd7c02f6a808e7ec8dc7722e2f333ab877b2ead8f5f1efbeb193a963d0530fa6bdc0c0bf9c15de844370394c8947a8e6d3023c439789fdd528d92d9acaf483d02279958a999735626d7be59717075729dc5f951ac445a54da468f2ab1967b47ceb26d18b802b96d105641627e4b661e0580164c6f65520246f64889cc80157f8d23f6f6e03f3517a3532e88b9e4f8486f68f411f116694a20f349ae7a52499948981605956eab8003d4e469d8419aab5c5e37e0fa0b5ada5b13de86768475171decce00e7e38c9b2c1bd2ebfffe135fa13f3ba8e4ab9bd2e45cdd23ccd0cc6ff84fb56454e23d8b09439069dedadbb7a15e7ab91824b9a0026f7e46108ecd99036e261e297aea186c3cc22953a0239f13aea82744e2faa51917831308bc03a204aa968eac832d99d12d8ee1c9c5d046627eadae7b086a77d1243c98cc199fb644c5d158e5eef2dc476e9dbb82a87fef8bf0f818b80b53271d8521d8ee09d1fa5892ceda94da4752573399095d5389a14a4d5718f268706e809613231c1f97d2716545414500a3b04d6e189c1c64e59c97a71a3022fdf0ad9ee6097e913ac39d2f904f3bf6f6e26d132afd054879674c93ba0b801c0d4f38a6fe7bdeb18e8fd176980aee10f40c6a80d16aed3c866dbd0cdc4cb76094b3bb0d0cd12fdb2a8a51043fb8e1c295627b18578a2ce2ec812725468412f566a3cea9968bbc78f4b4b758b666379b19fb5a697a9c4bc4cd6979312837d29ed605249647a9431307f7730769aa954c0043f00095fc796aac132bed19e1243b58c51dd086c6c337e39ee726cbb24b409279287dfec87502bd6578ce791810242098869c4993dd0fd58da03bbfca14b582898f207202654c4bbc17340641e35d2eeafc320c3680c846a859768c52518f2071292134c07f86628b4c1b64941922b486993410889e7e0ac8a9d4650accb3feff576e2aca57db7acfa070925095ad271af845e9d81bb5fc4c2fd793eaf67616f29a02034c5d2a9bded5b2245a120729afdc891fd110f9f720c492e7ae7c3601c2e066e4cac3ebdab9dd901a8ea9eb4cccf9d5a58eb0bc229c7d12891d40df4a2764483953d1a3e4c62d3ed8bbde220c86ebf31ce0d4b74abfb31372bdec7983980ff1e1e9c20da1e9166066aac4a003a48706b71011552a2df45f81274b87ea42f3836c8520158f071ecc4d87482c7fa06445b33368a7a9586df7ce6a7810b741c58f897196d7626646d03c961c3584e9ec025078eba5a0fa1c837efeee0835b573867efc7032fac8b0e2b63ccba77b8d5e853ad531abf6191d9cc07c796d4245a2733749cb0da71116ed2f49f95abeb64a19c1c11d274a77061df6f6cd512e198cc725db210512b0ce196e3f149c431114534ea65e26ad16eb6897c09e6b96644f2359abdbb431a77ab79a3dfdd13c0e7b4ccbf108be5a32fd752660711c12b63799dae8e1a310d0c621d40bc726f106a39d17b68f4c12c0db142f2e2bc7c0e6a080381814ff0e89683724e72db8a0f513fdcc592ec56f2963c739dd6e688f5eeeaf49033cbf3b196a18d227b9d9feb794aacddde479b8b303ba34cd3f1c57af64ac5ba22bb2c5241c9e78de0d08c8fc60686652a7b973bbb5d110db9832940d2cb0e4377a759800a986d2667b498de36fc6056fcaf1dc68d2b828c2d5a988003427d253d67f4cbe62349515011720c18e2f798d7e60e73dfc5a1dfa5e4b257e0b4c78838acb2ea81372d80dfe0a67f1c3f773e2385a0cd6958eb5e2255118a1cd1fac3bb5b1d305a96b2224703807842d87dc192e9cf8c48ef57dd85cd62971f4a677aca8d6dc0b994cb14c90c5aa4a47e682cb0409514e43c1e0a7dc6cd30c5286c1c5e70369f8125f3a9f2990a9669222f71c98a8eda7604a8d61a179b7507818be3d617f2cbd9474213839a0e9af851b61c7c64938989b7af6647e90d506cbf7ab3db4b7e6d00935785ff1d418a21b6542213020f0fc194dcaff38e513245ea769391987a3139ff1ce8e6b357d67a030db8fc47fa020d32e8db99637f4990c4691164e49990ca51d4f816454f63182ccb7a150c075430078fe0ac6e5416cf2985ce82d89fd819666055878870f617e3e8ced608a1843326b9b694c0afa7d238034e930770231c4dca905a7ebb76b5451e881beac6677bd3426eb05108537cb02e423c16a93ecda3006bf50528eced9ac8712b149e3c809187a2d786756d1f93c7048d31ff129e89a626707973c4aa0c20c9a3eb59d62190fe256942bb6e31c0cb976d0c1951726cb7604763a65f0fa21cd7336aa81c33ffef6aac29dfe12b2eed46f0df0124ad97c941f920e9ace19c3fc2b9b4f65d033ef192391c56b09f3910dc1cb6b28bf5004430d81c1598762bee819b22c0a18096d4cf3999ee59c64f20221ca2653f42a16bd3eb59ce5cc78d79a182e6e54b29d8ccd259dca0e2da1fe470a07eadf6172518089408d7fc87c7047671be5a7bfd6f327d172e77fb05ca3ac38c9e202686e1cfd216c67a70b047dc54a7a634d79d616f0aaf2956e61950da4f263da26b75e119291d61d310de4d7e14ada17ec1fc1fb3a3cdca9863d4d33fbb8a16aac49830e730e65c6467bafa8da14dc667d70e296f14aee6f25270f03c3383137571a7e6d58a2ccdc8dbc6653e62bab1260362d2450e01295149170abdc11422a72746b7850b811185afb06685671c8564ac7146de8dfb3125cc16ce06fc3effa16b5a69595225f545184cb6ec2f11dca78c1b7c6c1ce3caf0d878d61ebecb41270604c44eadfb7b6156ee2e2290f39f11891a0d103d2d6dd2c4837c0f56b3fd2a46ddafebed1eb2f65f35b919c7533d0c7e6a2385372fc3c73d380b80aea7db7374177b682193592378c76aac894d9b6f6fa61e4ec25b7e79d0c8064ad4e34d5b9f44209c35e225bc3db3ffa812875b143f8d91905d0aef407cc0220da31e5594e1316d4ebdbc0ee34f1cac3f29357bb89c1df2280f9e134dadd6fb29269834288653a3f6721deadc2ba8ceb7c546a96ff6fda36061f2afeac83803fbb9899487c33a9bb9c7adb7b5d53340e4dd33a153cf101b46042040524c342c2dc9a3944648baf2bb81455945ff672eaa41bbd2152a7d5e69df7535960a298f95e90975bf9aabc63d94fd459619c34ff91b371d33a8b42c2d3a16e5fc17df8dd33a293a79bc680283c2f098075891570088c0b2291ca41a65b03aae2b70487eb4790a5c4a650074c369a15b65cce9125fc6bee9c00a2cfb6756aaf420a0e21b4c43f026da8f604762b6324a5330261a75ef3ba81d934a4f4a29df550dc8d503d6c914e9442a604c3d8dec888f804dab502a7996d0f8ef21438dde2ed138355270b7ce3e17d168a87d57ecb8ea45905931002b970ad0a8ae862a73f0586ec1de793c196a732e0257f9104fcfb7c9168470680ff074a5c182243deb58d49bc9f62ce7933d6c9ce2997554d0b33c40d51957dec9a40274fc22556841dca05aa14dba1666d71857ab8c2e511d72b62a1024296c8fcc95fc238288b6d9c5bb1b3f386f482a0eeddec14ae93b9181e54b39651b21f8d8500c9d91f10cc201df04bbde2d93b1cd98aa79e482714f8b54612bad201e5133ab8aa43eae14c9548676d8aa860575fe911394d7edeac9737d459f643b1514c81aa37573c89a89c8d6649515f33907cedaed466face2fd0047f5199fe2dff8d4ac45c5d573054a2625333acd73ceb7dc15e38ea8191ac37d10416ff76df19152090844b8e4480f4d83c8a822c74356d157411e6c84ca098997b26764dc8192f25dcdaaede1d91748f1d5068d19ef9bae8a2c3e1133476bed9632a044ace47a1455543ff201466ae76de2f4ca816b9061dbc0e5d32d1e3b3dc8462e188f455e5d2debc826d785353cf8e2f066caa4e8e054834b832fbe0b19b4b82670eecb89fe12a1fcbb4e699730ce02f2c77d2cd0eb57fc14001cfebec8741b97ede1d8c1bf39fc6207100a5d43c4b9f1cf61aef3e422d5f378205a48f3941766f3233fec650f0cc2d616013235f5d2c97149f0aba5f1f7bde07d6b44f6991414f270985df49704aff5745ce1effbd2c5f92f4b32dc50c98ea029098a02cb925ec8a48724f70e7657ddf36ca7da7d73521d056a8542cb6ed18d1ae2f7b529554e923491b8325dd549e2de50e4e65169100ee77cccc893752f9a5aadd89cada15b8d45944cfa0d9b1c32b92586b37619e9b44c8eb4af2e79abbb4849ed3685ff03138429ddad8f4c5724ed2458e3aabe5f14591047f6eb3eb09e155ef257e3aa69ea7ddbfd709e2ac3a1eec01bad88cad8226bf21e38e1a047245cbad9f968e5e3edde01e5862a939d2cd35d13603032686c2dc7c13a85ac3a00586b08c14146937d9b6aad52af35ae37fc5830e62a216b48f750b9c3e533e35a660a094a66cf4c6fac77eff53ec88b6c182daaafbbff3beebaebdc0f01ecb298e72358053c71d72ce150a4e34c9ae497f1fe85ae52566c27a8b418fa54f5f466c8b4e5dce40f9a63cc65aefef9bc840ee51b09d98d0e22c2de604d3e995a1b900d7d0269180f5a8e2ade8288d2e938ca49c1fb69bd5d8efa37cd156839f0b74f70b79cd59c6c92515a96328247f360cccd77c3358f5571c88b2637dfa03432ad52cdec3240803f11ff9aebb01770c047a379ead924eade479d4f60e5d982b6a90cc13442633510b110f34778f26d459a7fda186e3bb2990ba56eb0b19a0989432c316d79d04400d00daf87376e3b20a84299f18c670854497d724cf424038e1cdae4e17ebd74248f6b2530d459b63124b8b2972fae762fa8db00a04bd733ac1b49238dd3ce1c35c25da322bf4ee6a967ee258765e8103fbc8a93ac08b32928261949b2b897209665abf0782847a5ff1da22df481d72c1e6ec12516c29f24dfebcf76730845eca067e986f24d2f716226fceb66203279526efa827421c9b56d534f14c39f742ed0ebe6e8926953578759110c533d3c9a5957827da72738513e766b2d8cba3acc0a01d9ce64e13e8608ad98190e34a2ff5e7c870d3d8c7b603774c06a61e565bc03c7b9875ceff3849fcd78f89d73cf8f5ad1e796d3817b65382a9d9cf91388ef4c28f1175b2d46f8804f28e3d0c9acafde808c1cedecc53e46954ed6aa9ec30df92cffb1e56c75a4c8048dc385e364b14e78ee02a227b313f5ebd5dcac84da9b9527aa81754265e2f546af324840f43e9f5ae9953e947a7b4c949f3ace2cf1713a8e383d4fbcdfca74bb4c40ef97cb887ff06316d712670455d8fd5cbfdb1702ed1cb2ad7248afc622673e95be4ff40e16ec0df4bf549441a4b85bad24a619368dcfefc5d09918a3e16e35af806405a3b5aa82e862485c767f778870473d666e047117192ceaf72115ec9b5ba16513d207513be314a72ef54c8ae50cd57423e1a0ee3dfd30b3a2d70e41e4373a28417280584cb640269b570e5ff66d0247fb19c05fda74f60031370a73f26b6ddfa527f4ccf933ea8ca2913aca1bebc991489ec6e9d6c25c6c330a1be37e4bcfa0918eb7303c14530270e8c52cd5d0cfd6338347ad1b53f2c6de5e236e9bcee6afa5253d7ff791a249cd1625aa306fd8bb5a9568941b34e348b44f2e3287f33151dc2b61c15d1aca9d5cd0504129f1702b864bf22c0d5b5207e2c245b8029f4719d0306835b7d145e8740047f7b94fbe7d0d2f8823b24994d3bf0f437a361c226156d62e2c52291d632bfc22985a7702dc2f4b3a25c32d7bc3491c0a103d9aa39a8f2f22e6d59b6ca2daa88f693929779c9db4afca45d83c40277e43ff2e43b38e687de9765a4d3e396dfee2a645fefa5f4791765bbf091e7642984842ed464c8d4223ad421ae5769ea91b3ad40f7468bdbfe7e8a8efd78db033dab553bcc408abf41d5482e002c890f9bebb518711fc8c921ddf3eee632a32d95962dcffd2f6a1b5e40796d8c668f49ed5f44da5552848342b2fe739b101e055ab0d97479ad635a969b29189f5f3892223a38830e63812b584c2289f29dbc083d09f77432599b8228ccb5e180991ef1d598b35f6d725c8889f556f9ac1bb44de5c252c8d280c930bb8573e3e558762985d7a88784082ad90d213bc1d638e0949407b85800ac90920f33945d96d1c7f58c2303a4600819649d56b479c61f7bf0ec29ea928ec66d298e5fade89d1846c547ea47335dc1712bb2620826dfa452122d239dee205eb8c5909ac04dfddcdf22fb6467427aa742b59c22ffde5bf6023f3ade49604a4ff1c8be6577bfe8921fd974ee2fdb65f234ac0bcec2243b16f409e1c98ad256ee30c5b00451111ec3048ad21e547240d08cb91e060b98548d4c06a2cd445d720adb76fafaf64cdb7363af53b33d80501a565d31417874ed906f43a419f596e1bfa94934d64f1dcfd5879f5623a9ab64d20e603c80330d0fdc793e6dee96e84fb5ee853d11877f4f97d082b04c8b3eee3748a46c8282ac931ac3123a07a003f10e5948fadb9837221e5354c56aa40442c5ae98078d2a02d2dfb9a22a1b42b828e2af5d87e21276ddd0ba8111488fa426dd77eb3bb03cc9211ad8cae56bc5a1be0bc8cf51d0178f627aa02cb89a692c040c4b33134b7011f6af55ed8088e60898d66e792ec2872fc3fd79514b8eae2ed92535ee228b05e0940a9c812d2a2fcd994326de01945a84460e1edb8aad8dc803a54a237f5f28d7a49586daff2e9205b4967814fc7c023953545cf49effa7f8a499b50075de8e94a40c91fd8cfb1c4f03a01bb66a3cabfae2191433d2bff5f0495ec9bbdac661f3d102f814226005fc466ec0e31f78e6f397e9fb1ba247d14c6921cec367a36e45e93432e5d8d1c0a1930fabec2b58493596d8c930b6446b2a2e53f536fbdff480852608aeb8bad32acfcd0d72ad1ebeb43758e9bef4b8f3522d56c7bd35bce7101778755f4ba11e07bb13a7b0d12d3cbdb142d001d2e31f6dee44da4004b77d670aac28792867c740b5b741c8957521783415bc8269f50efe36e8716fd5533a5a2e5442d40b037d229c249db7ebc745167c18af7b51fc6b26514661b3537a0036cf76f749ea0a3b68ed855521ff4441b11edfcc79936dfd9b0139d261ebd9543186488a4803543349c6be934545537fa8b21da3326a29f8734706d6479ca5e6d95803b17fb837b65aa6c444d56ccc4b237ca8d6719219f3971cd910a41489455b0b8f29c50f06570d7d8e8297451bdcc408ac26621a8c906d54902054435fb90b9e1c1a82275901e21be20d25bf6f4dcd44a08f6eb3556974d08eb445159224a6f1e41cb636e87b859d83497b99051d344ca83ec49f7d3208a1736ccca00700974d4c86e2a6ee4d6bd6c1492f7b74ee2f6abba680c0f6c2d847a45b005fa73e9cec6531600b97f00a44c1c765532652d60dba69540ad060d861a0812827444362ebdeb3a8fe7e9c8b2ce60f4f02f47c9bab9240d3883512687d79a991a209ae1ebe8608bf9706e93fd8c79223939f147d18b12f7c0d030d79c3ad931d08766e5f81c3184feca0d230971d4439b81d204ffbc164584bb9144362e5ff8d610a65f4e78cb09830f511238d5c83204344a93981bbc9e2c9dc8f573af9683334672e2812cb69497c413ceb290adbbddcb438df38bd8adc1c8cc73ba2ed03c44480f662f21ce4a6adcc651fd551c0cfcf5bec821892b02e26ab92314641444e636cc1dfd875c3b1c50ef32f7b5670a51c445470d4749a2484511d4171346e245d15ee33642f3eb367eeda05082ed381b446010dcdfc6ef64c20a0270acf66ec4ea8224c6c3c2113668c43556bc1037e867a482db29daf30befe6133f2cd2a0d4a10d0c2fa1b0f11f2a6aeaa70becc13e2af9a60b6c117ab0549e2e73190ce8a16d978c8d90fcc44eb5206ef4ce12fe57c0846adc40b1c837d41e38922763ccb5fe7569b31120ca85eaa34111c297b5a2c13b4be9f9338738373a50f30ba73e30689d77a9b3638361bb262cff134cb3c43a01f2b174a28f8783c6d789fe41466cf38a419f8c031b665a24ca7577b71ad483daad88b6e6006db53129d8e07ec1ea61448632de81e396344a4f53a9c4c0d5dcb63c6a09a4a454b340d36d5ca20474020097d6d12db2a7ad5f61226acc83d744fccd8d55dae3affe824dd735eb969205f82aa3994f193b80ec8f24d21f11c188fa0f28feac3b7c455f01117661103ae2b6e1b99aff00678b4317ee6adb4a642d0d70a65d4f23629416e662bfbba02c32c2f54acd02e2d6e24a5cc8682469437e5242b3ba01aa4de573cba28b32f476fc3d00e1a4aeff3b94760a9423bdcbb05989bd8a6bcac7ff8540c68531d6e817097be81929c126bc308f591c4670dcab68b39f35375648b8dbaab36c837683d935026d05cfc99e28615af44e56833852894d49efb8fe064c6438dd779a1c37035c454ad4fda3333258bc5bb1f2717b6405966b3e1fd5a3edad8a09590e1d37400539f44824aef47692f3494b4679f60739c9ddd87cf08f1e4bf4c2e1888a43c51dd9ea4404c450e3cb16d0aac8899e4954f4dd69bc35886ad8fc63a57d92d90514c93e93fc9e6e97e6f8bbc5f31672a78df6399148e20f1207f4475882e6aa76c7234e74ec0048fad89ef2480fbb8c082eb13ec26f08128e25536b4761fa13d51aee2a8e820a7f77620df8470afe7bb98e2c7d9180334f1e20ad007e3ec4389c62952e6477308716ed1e889646052b21b223f7cd98ae9637ed955155856cab88f6383342e89856ed2869eaa7ca6c085dd1a1010b2e1ed7fb689c1c021980c9caf0319d70680abcee1ce9d61b861a3421416fb04b36e8debec4543a7e3f4dd80875833892116071d9eb4ef7ffe604098c75bff6eaac46bfc5b3840a33f0033a538687e0060b1018c174be6bb2d99a073cabe1e0c12e8ceb1d53dffe1eb2be7bed9a967684fa84cff07c6e96c893d43ad32e6574dab664b7e6ab8b1a43ada8d9a6df9662f105f75da8ece71508f772867d1ee50301d20242192406ec496eb3614cdf82b82afa570b50106fe506b1db440d97438f392746aa4acb4a7f24c233066855017dd965576810e34b9d6003698a32e6c2ecbd3039e0fce83a6ff10d94016e5e5b75846d6c76f418710e1a7bef4c12bdea600dd70435e20fc6081262136f852194ea4ed0f27272292b4726587d4ea7c50feaf37dcc41275ed79bc35200d03c28302795c9fce872e2e36e96c00f50d728d87d5a5ee0b99ef8f97117f1adc4447dc9ebd40860fd9a00d2a0d72b452762d5879ca1a4be4232443752612122805b06e2f5cf0da123d48d5e9138e09fb94f124061dd5d8d81cb1fe10f3852f924175cd11431eeeeabb7c695545eb9eba3eef7911fe3dcd837873b3710761195bb24cb338d3e9225614c78693f911174a249047a37d1499e8f822122af11a0299ec4a443bbb06b3f7d49f0d6dc8dfddd5080d28da4123a8fbd78b69ec2229f652de6f6454c07acaff65b6ba4dca682f70cfec82d38b654f746799ec8f5a4775aea4ebb3e829e30015f4b47af9550c497740c69c4939da6327ab0106290182689ec2e864a1e2b322310513a7d374b6ea2462446b61187350fc6af2d73a31ddb5b1828634186b2c358d183c02485b5417ddf06619324afd3986d58fb8e4615bdda08e8c71901c708d48da41d8bda8bc439c588b4c5cc36d143a95c4c1544df85e80d1ef93e6016b3cb9ab83764c895c73fb03dfcd41feff6d9c0781c060e0b8ad1e3b4f4dd9870c52ad88d8e1d431c8eedf45301560ae6e20130fe03829faf92460c22d321b2a47cb30fced6a5714ca47b8df7510fd9cc4752af47cd7207a9495c8ea6bb1626d95ae11ab97ceea7371b613b3d45b0ac57bb28318e06774341fe468bc078de51799f7ce28af6908926ed6025ae33ca61fd35f6a8cd43492426afb43629f1752235e3dc518fc063b98d5cb251fed6158d94f33def66637bb91f4b85fa679386e1158afee698e824131042527291b7c6cb4d438ec09d825d1e60487f86c0981fe2009d986ed3a85afe6d36e56ba86562fac5059ea59a432343437681151fc85c9e9aee0ef17678a406c60c55d1fd8ab19287731d52e0749a69253b4cb3f39e4888f91110d42ac43e3387a3ed4f024bce886959deb1ad2e6a06c8020d9196e42d9b1bf872e200ac14144490d48d34d41c0a14f2dbf2920c5be2e07712594231f491cbc75cb2863102e636157918ea6d339e41435f82b4c32ef67b8dc1468a341b613dc23935d11a294e9f66a9958ca59d84de43eec211334ccf526c07cbaac9600c8a1070d0107c27cc9551ec13a26a0b1d4c71337ef290d49d21731a20e02e0b14018bf0b9744b44f3233e94cbc8c47059abb8d6a130f5325db97598d17767b991667d88e90824dd72ad3c2cd2fcce7656c72c733f1c7d73586e855a57dfe5cd757951ce822dd3da614d3bcd5c90a19df98668296c2b54681b63901a8720638b476a2b3d81d85f15c6193f13dc75aad51d61161b2abaf20c9b5589f461aae530b729c86a805bbe0b427e4575b2a24cea685b913c62e24a66573cfd440d811406b0ec19d44051c174caf5c976855dc37eda56d50f5555ba3989c20ea27999ce9d1fdc0e5b8aeaab1a9b8a7d77426e590266bfe78d0eb61e1f1aa9a6cd920130abda02a2477a41ef9f435f46d50d235da1e24680daea8976502cf93f9f8a7c0f9b69b7d0384dc9dd26dde860cb1370fe4402f3d02682adb4fef8838fadf3a53b1939db36579336d3813e23700bdd9f022ec8bd78a1f6cba24acfa570b69356ff1d299b5db26e67caa594e6900b0d3a81c1074cb924e27d4d5b4ebab8f9d61b9bf6f56902a2026b8462fd9e37301714aa003a4f46a454e98727ca55af0abea9cc2e6f2e565afeb65b23b5a3b8dc889dadb2fb127db26123ec114f53d890cf65b7c058bf6f8fa8d8107dfeb083d1be2d484d527155694651083a6b7668e1a863283315a5f92323cd439b4159645660a6317278a18be29e8c40631fea4d80b4bef728e044328890bb56907a3c2d2c0adea85e6ab891df067f4a43007e03a22a217c4ac54ca0b9d97d9e44402240ab849a32fe80da56f936f5a083a9a10f37141af6d0aa3b4986219ffaa3c9d682a0864e380e251a9d8be0735c1ffd315452f3fa2417032ce2d4a1a6f8933771f87ed531aa68caf46759fb0e9a4780a38d35abe24203c577f887208843728ea420265ecea3bbd3c75999753f51f5037c5bc8ceaa2352bf521ab03330bf4b8f4108105d8e5e731503cb91cfe4cfb7720b520c1589876f2df0adfcd800feeb9a446679b9329c6b64d5b300adb6998bfbe93936f7d9223c29732f09f907e7305d3bc66c9f4e1b7ab4ffc93cc051f6d2f612ac4983c758a324cb31405bab2b3e34662fddc286bf0caf6482386e774041d7c7df0a168f326d8fc1ecbe8628520d2eda9a843609069934073e1e525e8e37e1b93536adb7b7c55607943237fa142e821726ca67d40a20dae90f9a9290d4aee5671def281c4894a9a42e6f2d471911d99f3aa2190a7d4e0c0261277404b1778b9e00e854b82ebc2b6fe2a2de0c1725f097551d294d7480df2c017e1f52ede7220ca3454df3ed38fb70504985661551ab999987411bacafbf53daecfc15c17a825a87e7fa81280964a1573dcd38a1f069fbf8076934b430adbef932c7e15dce77f24f398d492785646a5c37b7ab600d608a9f0661d6e447fb4dff1b8ba4dad0560d4121dcbaa215feab99cecff677485e8f653b6950c2f51b9a7e3f99ad358337757d34a75614e67021b3aeb84759b486b4f7e7571b9ddfdfd158d9c2b182f208e6b48742e25d7f82022f86169503c322661cc7bf1a77b33350c922dc0dea20042a317e90b8245f9880f23c8537c70b969cdb814a6352fdd14e6f9142a092f9f7565d32121f3a773f8075d05ff8de09a7ee3e951be3f47f820611bee9149f8ff5aecd610b86030bf94ba69c7bcf1478a79c540deef1167b901106a1745d557cb5cbe24ed836150bbfd64f347ecfba6f92b5c9c5150162285da3ba071916cd13073f283c861b2c2d3c4dc9246ab274f050b44476a82c7c702b6139c9dddbc5033e80aee34bc0db798acc117ecad0f4e9ed9d8dc75411a9300c63ce2e509501cd50311b93e02e96a5924a16e60050a26f7566f1441310b00e991e8bbc37f49e5c3279544a97ffe6cac54cf429faa1974058ab4fbd807b7e27c147866dc48978f38e9b261b823fe2077627f8040c954b1f28c4fb5f42d921ffb2fafd147a0950b6b888f8547c67f2cd9a3dea1e714d7cc208a4bcfb98feb915627a0716a32c94a3ad7c4d6760e22381d7775469f0d28e14c13381d8349d3cc69c9ee00f9f27a887fab91a06dc06acaa836a6216c5a7175ce7175d625adc00d4cf03ca21fc64b69ff0ea16cbce10cf20b7a3ce38c709d6813ab61bcca2fe4b242664b186d9cadae0d8898aa1e0d26029fbebdaf36eff9624f6af348e9b08531666e0ff18b4961ec078db2544bd35245e200ea0fb040cc63a46bc0813e213c1bb775550a6c73990c844f0c6a0f27ece3e82ea7bfa1c14b9060c1dc8bc20b1c2155b669ba834659325703e1697245ffe8a8a87433c65141cb8073275d60d61f2ee16f84e68dc28f7376ea8d21e892e6df911e93f5f216c04b64627c4244ad992995458f3b4812b3e708cbe51f2f35bc216928542116a609fab1804c18b1274c5456e8dfdb003c84ce8e2ea2cae5a08ed33956919e39b5f71fd5797554244a0f4174177a90d2b7396eb0370e494ebd6337d05ebfa55824cf1425d8bd045e8987ecdad43c06d143972090512b522538148b3b8e03ac60ebbc9902c7186a382efe0197ac89695bf3ca404a98c455a46b553ea190a768f27966309f77e2600b1b86b2d4f83bf636dd5f403d21530f502e3a47c7303821d63d2316ddd09bba67552cb878d083470c55cd41a5fd40315ec538440be5af0ca127b4cf49315031e400882846f9721c733313457ed10d7172bc9fa099a865919ed97693cf33431ba9d243d9bc7b32f412e9d024db477d4deb0aee457cdb89478bfd7e5de856df870e4c10b49d97c472d00103d5cc6b5e92f3713765d78604c3f897ebcb6a4485b5d5c8b684431e0c6c7142a9378cec94cd443122015c91c9e32d95993d210a712c2250135d2e67750247af735a0484d7badcaf45858193339ac4b04dae7ebc157309e15a5039d3d182dff2d5d6d1af314525b6aaf32823e0f3862c0f9b3a81d65229dbc368ad537d5c096e398dcddddb1a1de07aa9446b1e792f65d08edc8e517c3728bf622e8ab4f3d482c217293bde5de524a29659232760bfc0b090cd89308afae5145c1a38a82e7a982206bc57eaa4e8eaa899d27543c4860086b133b4fa8b027984fad393a4fe428d104f6045bcdaea9473ec31c55b5b5aade568739319563cac19ea8ca70253402392b9580d7870838c39b24b08cf579ab85f99d10f36b59ee3a699c4ed2398dd349729e9c4ac8797d98c0d461e3744ea36412182281383049a372a012d70974b177657344f23730c97562b99b22342ccb45e7320866328637310571ae13e81271ac2db27d0f065a7e21f7642f0131c84d39049cfde39558ccdec3edbd040296b17c7ef6b7dc477ba3eacdb009b7acfacb30ee4117f916e7234e8eb4995648a6957e722e21e7842e8580a967d28dd88a040286ef2cd16d78d9c1037ed6015d2e37b3640a4d3e7b0e1f3d4ee18a8fce62c3cb2e5723302f992757ad7c2cf1424b83212b9f274f7cfac86b92df2a13894f86ac863cf119f2c4670e590d79e2f364c8156d289e5d6da3d72687ac82befa9055185f7dc80ae8ab0f5981f1d587ac7ebefa90954f3633e873d1e7efa5449e435ea95bcfe7290a97e9e9729948c417bbd7e3c3ae8f930e9f5833ab539bdc844f2ed257bfa00f2f3ff0f287b7f297671f20e92527732766796853321af9e532e92bdd32a778022247f198c5d45add47bc14d336ea55c9c87df4ad58b651bf242072140c6f23d7b6ccefb5558719e544f5c2cbaf2d93feba2e1f6d589f2e87289bc8474ab0d72d46b4c93e61a6bbad74e72c98c37d823e4f7c9ef83cf179e2f34484841d27443b4e88442251133ba3d1cfcecf4bdef1d489269cd8f91139b1236ac2899d1f27442291f43aa5903c318a56c1271e360177baab19ee7c1ee590d3ea91e4f429972fd79e6793c7d3e9a497a734ba1559a78e82a3087c713e60af35975fb23ce2e674c969a24c4227200e9893b95c9baf71d009cb5d93834e40971de804c5ae74a96997742845205f06ba65798d518252a963efbad55ab15321be5687db0ff02b4a90e99a5fc9c9eea01292cfed9138db278c5d9be52f0b6265577739ca66fb745dde1910cbaf89b2911c6e57756d3a692bb244c857e03f96b04a50bc6e31cf924c2bae04eb1375cac11de884e31671e1c6c923a3884fb9ce81c7c71dcf61c69c7279c7f54abd693bf59a1f27a5cbbf9cccbb129b1f5d07e617e364a4cfbf9c8ee688f46799773cd5015d289def65078d52c7f31d54ce395f9e8e1d91ce47b7c6b2b476c3fa3ab65d1a63314c9ab9e0b5e26587d4f1a263878e171d3b74e8f02b818085ccc78dda2151d2ab57793d0bb9b559bfb7725906c142d6ab0504e3e0679bb5852ceb56e698fb8899ed0ec3a4eee00e1d18b494b8d1eb144306c5301aa8c178d93fd62fdc3f2f7dce11a924034371ea244b72eb25eb32b6f74e96cb26eaa58db49d2c1f6def9d2887a3088c7144e64bb7a05f15fbc42e85604e06fa7c697116acf2878b39e79cb37f6efae726dbcbf43cb84c643617edd35cf4cfcd6c2efa67b64f73d13f37cdc59c5c4017e924b8b88c318f8f7ef183791f4d268c6fe04d3c45b72ec70f0602b9dcc2f3cd675527410ce13882fd2daf268d9b5cc6218b04d6e30bb2411f2917a9bd9c567fcfb2ac65b9ad1c7e2d916ea28f19de64d3771f5f1e7a7ee99fe602ce19ad473f37ba9c393249c469240f9f7237cfc523ddd5cca753cc2967f2199ead0c7f2f5572eb35b75ba2d0889ab8f74ed4dfe90abd13e53291d98397b6f74e227fd8a9c849224711857cfaa8ceb7d365739936dd72f996931171d6a5c825c61169914f889311b9751127537dbe9d1c271251988944227f191589bc57d1261e7112cae8a57cc453f44a2bac95cbd2271ad1ab68443c22f25e452344b257d18878241a2112f5ea7daae4d13da64a5c0ff114bde4222e9b64389dc191b86c657028256ee4d7b58832724be4974f2eb3bc8ff87aa83404ff5d1eda7a888ec2656beb9d5b66f929fb341db3a49f2b3fbbebd335c75bc8214dcc36e3a8b9b68536d9d9b0bdec8829dba708b18d47a211738e9a84840b311a515ac829f548a4e3dc288546e89039a71c12239d911bd25ddc94883cb429a9f11f22bf58f5abd139e79cd187c01a0e1ae92e6297439f9e319f5166ebf1f97491e69913897f1de6904fcb1189917abdb42c884c74f9192763b9cc69b53473cbc9449f9f85b848279c535e3e1ac8a5146f22a73ee28d18c54cd8f65eb48ddc6ed5a9e36de42f0372b90dfe68937dc22cf66cbb98ec93f5bbc10c4875eb173ed83184b98fc636bcd93e41bf364c824170d263cc334fe594320a1167b2cece3023c5f8947f4baa58fd8dd8c49148e24d1f7909bf72362f396864de3c39223d332030f3fadc56b7aae5a78bcbb25a98dbf7accb7f9ccce59eb55c96f3a5c5c94c7f422627437dfeeb6b3eed5a1fee2e46ae72b9e5261d429a89bcf4b975007bc9c9402070a5bd658aa54f1112110189bd4e599eb1af2c7d8a338b81dc566bad4ff888328b8154360ad648e9d04804aef4d1f6330bcb480a38c6184da68f41703ee28444401739332be57e883f657757878ac0ec9cd88ace0461af5066ede521c75659c85a2c86ac6799a5d3a3cd2c6643a68f9db5097b823dc19e604f9ef0a49d73ce2893abcbe92fc3e9b6d2685d98b5d65a6bede5445ae6fa0b598b6197e57e88a17bbd2dd65c86d33beb68310f79b6619c7716c24259b4d77a96718d5d8e711efd6e96e5f2c3ce60058235af9452b6a41e5d082ae5957e3bd6d06c6bb985cd0451afbf3c95cc55b35ab1ea9885dd47679757f7d19a5b5c2692fbe2ac550f655cc62c6fbf361dd0c5b295cbafc1a9063c13c4bc60cceb7357d7c94c10ef36d1445293ae89ae7657b006c39adc455e1369198b44f362cc490cbb4eae93ebe43ab94eaa181a662dbff7ce0451670592c997d3774939abf53aa9bc9c068e222ecb27f6c4abdf2b9a0902faed9a5b459b4cc8df4389a5ac2e922eaa57f4b20884442eb99adbc85b52a32ea7c873acd1367c3969799e22bfd73197edcbcb651f4c555e9f1edab027d0a566d8e5f265595ab127747258773321686f7a3ec7bf255524f92a8e3c2ce2df921e9abf9a55697f5fdd86300cc364b2e5d385b0302c14823cfa2766d52c5fe479c75bcf3bbe3e40870ee88239a68542a110a66d32993f1c0a691a16e27e888fe23e1a6f598897819e65ee9ae791632eef784cc4c9b79eb108873822fd285c06c14c1e61cc650d73e9d9a603ba60dc835903ee532e5b9c0ee86239920ee842ea0e4e4e0774911c86219de2c6e8b56782a8b4d66aad9c09a2d69a63770db6823834f6536bc57cbad68a430638fb60a297572d14db721ad7b1c4eef58b6f761dbb17c3b02bf2eb8fcb18a59be4da4571cd495a6bde8e32d2b81ce27c30bde5b439ce726fbb2c23d81312a6b5a5ea96b32dcba2916ed5dff6be6b8dfdfaf5b3fca525a534461e9f3bb685514e5acfd8e588b4b4948451234c11468c376e54284145112a805ec7bf25543c1163748b5ad1a22ee30ff12d0ec8cc5bbff86782686255b7acea3e628d2e379919bf42af55569757fe101f7ab6fcf9b3a26559d62d77ecbae5d9072d730c664164eaa555cd43212d140a61d750bc6b087b91bf1e39ca488435ee6d197739ce090913b51503e75bde159e09e2dd26f2827157f7aeaa5f36f1d421cfd6f2b6892958134f1de26c3286619c86f3edb026a646de6eb96cdf3ac61e8b44210edb2c875df5d658d731eb5e57b43827d7c975729de0e0ae3553ee787edf7b1c9d0942be97e7323edd647e08026ef9a9e4b4767c534ae9e5b27c1c4560ca11e9a756267216673d4b6fd70171a89c0c74c9e9802ecd912e943c54f8a182aaca8cf97c8e176e53e0bc00fe2da1c2143e5f807f4ba6d0f967ed8b6e1d5bd917dfda647e08e2adbf7f5bc6803ecee9f3b27c229d21f7b88cf97c749ac5d818eb2fa39179e8269eaa5b7f9ded5bccaf47ef9b58dd625cc6d5bb75ba737b6e9daf9a57915b5cc6d82d17c5d4c82d9712b9f51167b968b38e37cbd193c57196ab1be6eda10d471138e36a1bc15104be9c0fa6af97e719998b936e791bf9e8d3a3634f200e9693815e8540af94c3babb92c39e4097c8459daceb134298cd5d459d9ff836a9f5aee6d5f1ba4eeeaa51574b994515c352d201bea1a625e8069a0793b9f51b86783096b704dd7073038e7d30fdd679b0ce034f4cc11f165b53931fd10af0fd42c3f9fca88083819f07e36ffd01d307587a7e54c0796c1e8183b484e1a16ec8e9cede90444b182d3c78eb2d380fe67a0a130ddc90c41651dc90d3280d40f1341e1c45bcbd1c0e9b0ca82ed703d04c82b3c6f3351e25e8b558bf17174c58546fafadc64f8c34463b0f2a88430f617b087a3035b4f86c63b53ac30d23bcf52b5baec4ae103ddb58499dd712a36716550a93b7359b47609ad71263a2dbc8e2a158546d83c983b96efd3d144b135e673ddb68f2365af0d66dd43c98cbb38dd596d2f35aacb33421e58ab76e9d45d5a8942a5e67dd7aca106ffd7ab6b17aab30bc751babb7de17a9e76e337a2e2e85e6b558bfa41e1bbf7aeb5896e3ad5b0378eb35d6b3c6d3294c00b0454f368fc0d0695e0bf416a0d7626b7c0bce6bf1dc01b5e03c98905b6f017a30d22d159f25139f3ba0b721ae071f03965ba67a2d3604f45aac9f24975fde7abe546fef1758a6e6c1dc780b3dbf263c6f9d07554c75ccf518074410f817d7bd16eb416cf8cb29d13c9a4cd2f21045cf1e601e78bab37e713ca8bab36e71b97beb24313451bdf5c7623999d78555ed9424ee63914f8a6c77a647db552895cea3535115dd8703867000497e60489a283e63960d90cf12a02662fcfc7e3e027d742abb6b54cc6f8c8f7e848f3b9fb1eeee0b7b7baf83fe945437c5ca65f6499110274cba7b34d1e73e966c43e7e55d423787f9688266d3280835249093ddcd07ef17b8069307d3bde4791f3185fb246b1eeb6e32f13c572f3dcf9f977902bd5c4077f2b366e4a51b69948a9c38b8720ce84e7a733eba1053fe4ed2e9e432c65c367d36bdd5029712a6349b7892de9a8dff00735ce0acd9a85eba66d3a83e728304a751cd05799fa4514f5342d369940af4f74d348a7ad66c9e50bd0cf2be3d6b51bcc6f3d235295e6a3d2acd614f3d6b57fc93404cce6236742a146ecad490235d81b1eeda7a8121168136e2b6dfd7affdf97d2dc2dda9a81e7ab6e1db552407a45ffa8342164c523856ed3b7cf4122b68f25b459d1e7cc65245ac8a868686e6c7126fc9154a687f363feacfafc9f311b24592eedec74d88939a4d881323ddbd676954b66fc91535df46804eac3ce841e0434ec816339f314ce8430f281e6104d68ac05a932903eed6f4041348897a2f828ed9fee3a0073efa14825fe607f41909a11110aa3c7faf0204fe6bfca04318396ce1d63f13a108626afa3b8de0a3c7f7636ef0c7cb226063c316742690920729210e1007e892a37737e0040d6104fa6562b320ca179fcbf7dee364af40ca96b25dcac829a794b2094603c628a38c71a53dc6187d8b2812a2054d77ef33f4e9949b8e752749dd4999b1976ec230894a3474fbcc5fedc11803e467240c01f498638c5101d83f1f50d5f374ebcde9b63f57b736c941386bfdeafd1e7e38efbc7e7a4fbbf940fa3921161e97f1cb4833f54729b5dd4d2258b09cba7d29ebb56e0f6b76bbd4a1b47af06c3886cc13faf49e9cedaeb13070e41e6a7a866e1b4523085806baec0e931b11f9107a8144174856286098d92dbae51e9e5e2cb3ac0ce3f2f4cb2fae5903a45b2e6b40067e5e9bb46cb56e58cb722aed9513c17ccac94c0e73368ee184ee25bcf0a4ad29608a7b9c98403a718e6134455403a4d4a709534aef65f9ece1a94f9fb45a49558438e544305f7637c53097cc59473bd717967dc938f3dc85f0a66d2ffaf0f2d65281ad67f9d1665bc55ebd707588bfba65ddf0e1a504042c8060ff65f3e56ac90308a594375680021a8107960969b1203927a4b7ce3927be9cf657ed87a72ead7b65089ec658ee17275d8ae0a94b21d7534e7627abd359ed934a58bd909ca004c32415d85aad794dae46c14763fc96acf38608e64b5cf2041cc069f2ee25f3c0f45a2905b696e41de672f7f2f9f5bcf0087199876874b96cbab8ec3bc41489433199469c889bfedeecc1aa2e7b989edd12a11aa52fb950cf33c01e69bbdfea85218b1786b7a67cab0b0b2060f1562f61cf0cacc59807014e5b8a2987976ef11516c3241289aa4816c339886aa2e8410e4da040d2469d97f2694bdb300a022e7d5422268948e29168e4652cf2d25b8c4e455507713128eabc9454c05246d58daaa88a2a1b552f2f9fa3aa8362908ca75cac11028e46620ba10923a20e05a2397254856987da0763f974ebc15c3e6053f873b9f4ba5421fa2f5ae95b95ce3a27a595ca184808e513e484f039e962c54ae105890640524a9927145367c914c284a28e8cf0a60e5c02144b983a17108e17242872f022ed9cdc9c734e3ab19f120a0eab9913a4c51a4224a6c9316952871042698315968ec233a59c3452ee493985482e72718c319ab824e7615acf38355fe2c93320f12967375356831729b93c7d660da021c81726375377f129c9b422492d905a0e96ee236224ccf38e97def21200afc64b5c7aa91d480f8692403a46b202c3a41d4870e3e78dcfaf67f6cc672be56c782dd1af0d869e5b3ef218258982113c1eda888162f375f77cdb0fd0e29e159bc294052cbde725271f84b2e50c2e89d40d4d3f08f1b269b52cebd372cfefc4eaf458a5f462663124d34a14b572d675330c6b5ebd1f4cc8eb86d589376d0b6dfd5aa6679b7c2dd3b1edbd963bfd9a6ecd49823a21266baadbea73b35cc650989a73460a7178cf05dbeeb5f5dfedbe6ebaf6c34b21f32dfc3be1eb18bab8ebb54c8bcbf7670862ecf553042f5fd2496be5e0a452ba4025ad9c128b425a0c77a31e530e2c808085290556d26038e8a58f9e60f97c5ebe9f97ff561268c88391300c02c19f9770f5123279e9b027f2c4d4e592eb1d188445db446b43b9ec91e7b3694702f1c7c5c1558e09fe60980483a4cd921a0b8324cdbc74ee280858facb82d4903a9d270f9878e95287d24c1b264f8ba79e270f743e531a1b3f39a9a24cc892896903852e52306d2e1d294079b19016eba0409b36b54b48e975ce29bde0b20b317a0c86b07dd6cedd43534f97db0f423ca51b269f44c2f083996ec24850c030c914532c94d41d8b1458c6f89393af45ce9726a832081f714aa710ce24aed61e2727a5849c9c89102281ea7431857cab6eb2f4ca4b12f652baecae0a3ca2b5320fffd9a42b6452972205174490ddcbee56164a314a36232fb0c45aca7c5571a9782e263cf57c55f1f293c3a41b608aa5c52ed5cb2d9ab0027ba94a36b10a5312995c76b8c10f08417abafdd073ba9d734281e7b4b625a63feb70bae5a6bf97724e3939e985d74df9937b41fc9c724a22b2013dc618638c9f527e0fea74f8a4ee62acfc41fe00492b90445a59b15c9256a6209956e696a74bb7b625a4dbac01d5a9d74cc8943e65cd62acd3cc01332f1dfecb84484e6672b833ac0b96645ac11e1640c0020818edb983fb788850184392d6b0104bb43f975b962e5d660dc884486f97911c864f80905228e10c145a725276f7b6601fccecafdc7b2d70c656da2ab01890163853285ebae4b2c49e202dd65da44278ea9942b1f2d356818180d2620da9ce4b9c9e1c4b751e036a315c395dfe7d06c05262d365779813f0f4f9ba4aabb5bdd7519776b3ddc5972e699d9323121bf068a59c8a90f6e9ed9313417c1961405dfe6d2c8bc1ba8b99f4b237d9103e197aafc507d24fafee23ce17fd619cb1f5523a7ca98ecbb63b0c052c8370b89b9af69d01994f39d26b898e9f80a167d2472022a59c0fa40614c0065270f132c9a908e900e965f05305e1003607b03980cd018c1ca0e6003030028d40230f12b104871b1c6e70b8c1e1080e3638d0e0b54d6d1b5bfb7d5fe931c2ae911b0ca2acb09b60f39a8d76bb3c6eefda2d8bb92f03b25d1b16b71bda82bc0f39e62f8380941ee2422e1dfa0c712a0c781ff220ef439ccae53221a77e71388e60152121a71ee26c7733efa361b65dee2362d0efcc5b9b0fa6b7f0cd5cd84deeab24d8b183524925953be4f4ca45e0e9802e9063b1214a25e076930e52dca1046c31fcc2849e2337488e603e984ff4dbd3467a30b72e6a77306cf5d221f6448926742e974d3d3b57b65cc63b4cc09e604f98d06335cde2c29a464197b2e523c15d7557efaabb3abb2d2939534c5d1ea94e3c459792cbf2e5467d6ed0a57d6e94cb107a6ff93679e910460026f9a88a2993e96374b904dcb853417c6005fee33a8105804170117a0ce57e8873cb42e419b8cd25e076fa64ac4d91501da9375f917c3d622bf76410ea9d15368133cca9484ceb42387dd6aee9ae062dd22fc6a6122c1d4b2e9b3e480cd1c80b3c1a6531a38c524a29a5db8c191b0a36632365319784cdd8769e78e9a52ca6899732644019d4fbe9d47912a9549221238b99519a316306096534638608cf9831439b11ca66ccc0ee65d93a834e0184de6be172bfa402bebc44053c1dc5afdc72e4dc2d078ef49c03475e2e382b6f9576def2974b4cbce5f57295cb112f7501457be50df21efb951b0dbf1b76d146f2d2a6e29a9215fba2ed7d697b1ff22b83cea033ee4884954aa2918c50e8d2c03615d38a295321a1683eb398d0bd9a9215f7d1a311f697c58c62b05f577914dd59a822dd594eb3981c49bab37c950327478e0e4628d5c1a63b4c071bf83ad848298370bd946e2d1daedc74b091417430c205e18168a0d36bb128d7bd164b72f9f5bc25a19c34b90055bce51206cb650c6fb9243180126f390fae85c9e984e534a897a6c0925e2a1f2e55690a7c371d6cb44d879a2d70fff597b91eba5457184a3a0fe67a0ba26850343a186954c82dd7c1a651d72dd7a1a6519a5b9e2327474ece4bef41450f9e77b25cfec8a5dfd19623a73bcbe59603a73bcb2b0f1e79ce81f316f591cb0dbbf3e448d228ca2959f1915b9e03a75138d4630a2fe5aa3e596ef97ba81e56bce5da663f074ea7ec0fcb73e48cb06f2ac0f949a1e62d4771ccefd479e9a4cb630f9eef1410f46068b895e2a64883c95f5c96303a6f7989c96716a0b75c86bb84d12891bffebca30a8dc38e2a3c170b0a9f2793b77cc6670320f196e76800245e67f9f494cd343720e08c2dbb20e11286b75cc6965d82def21209c55f1683c2a16abab31c45d39de5283538a368def2d18a8b36154cea0efb0fb0abdef20bc8c2dbca26fb545ddbb00d7757bd7a765330bad5df816fa8debeccee0d95d6f3da1531f8dc41f1d42fd583c9ac2a4f1e23a03c8d5dfd98c5d012cd6f54c0ed749302532ef700924c1e0c75cbbbb73a20359e721ace6bb1dcbfc0edd905e72dcf17d08b02e72d97301aa5e2f396bbe03c18d25bee92f360e65bee02f460ee5b5e809e0733e32d9f38d8b122b0ce53bf6f367c327479fc6b3a76b90a865dbf803a059b00ba828a34caa651f32dbf4890e41d10c70a597cc6aa0a0b9ecfb7e62d264d3eb3583b3edf9bb7ece78bf396fd916fce5b8eddab074fa3a05bde430acb7bf4f460d2c3f21e3f3d807a58ee83a651d631267ceed164099f7bf828e133cb139f7b849184cf3b3ef7e0790b099f9faac85b2f640b1ffd582c4ee6516183d21748721f4bd6543a0fa6c63f9712755fd7d0e7100f6527cd83910eb364e2a14b9d07131d722d4b2fe585d35dcc3c02676b5bcacea2f419238d914e9bd95d770de4ca69c9b36602ef47759a055162b9929a45bf2e7addc9c9693bd9b2fad2e1e6cd8359108b839c0a05e20febf095582e08217e546e5a5fe01c1ba9e934c1c4b7f716df9e45df1e43abef4be77b02f3c795134fed3edaf20243cf57ceb7a6ba78ee63c91dd057b74a56e0cc9fdf6c53c1517a197f63548444bb819f3af15f06c4df5a48709e366e5d894d1d4c3d5f3a5f5dc3797e017537174e922ba751d7ab4d0a4f4ce1f889a7261ecac6165e97c2c443d958754af5949d980ae5949eaf29aaaf5e3db4d978827e6d6ce1a1de8b29533c41aff075d02bf48c03e82bb59d3d60faf56ca37e39f461ea98983c18ebd5ca2293721e663140849c887d259a97acc0f6df5fce476b5b8dfd11f2db58fb8d31469905a9f1d6e57b96655916e5302a2756b2025f99e5b762a1cd864f9f2ceeb68d5577d5a7bb0ae46bc011d4a87c01e108a3514a2c303a01a11f1c4017d08379cff649ba8683d243e20109879404a50a0d6716f98ce347469f360fe6f2ea96eac140af7e15f150d74d77360fc6f2eaefa12e1cbcae7a9e452e9caf3e6d8080d5afb575170ec0b86e1ad579f1baead5c2f183e3e7b5541c213c10f0b38d958dd56ba990c361f35aaafb1870756b0bc0cf6ba9b0dde2726783af9eadafd572ddcd6b9942f8f90e28e4731f4bae01f4b164051efdbb5fe01a370f46c747fb71dac4e879de7cf7a11e6b0538db0ff57cb435808a70df0e7ca9debe06f4d41f967de85fa3ac2bca86f2c91ab2eea3b5efb021e0977f89a9e8d479c49474ea0c68544c7d8167d014a353d7a96b370fc6e5e903eafa645197531fc243a7709fa8531269e5f3eb61a1d4ad0dfb02ceaf67070a54b731d55ebdba29a6a457973d0fa6c6579f398d8a5f7dea34ca86af97ea5f66bdfea53e45429cf4703b744735201fdcc7d2410e6f01438f9f25056ca85efa859989b482bb93f0717e1e4c019e67bcc34f4cbd3c6c816690947e5b24c4c94e77ef87ecd01d44f25243b2c390ee60ec10e428d09dec6ec80eddbdbc93746b5f947809218473c20927742da73ba9e9bcd4925844e0acbdbc742dc9f322783a4ced104f721b024f2595db41eee05bd070341c2bbdb320386b392f694828355815fb4ee17640628cb1469f33097e3daf257a95dbab55c3d18e906e63e7081b4f7cf468e308af8b5ec38b0a440041293b2b3b92abf153b9949d8f413a9ed712e5f66ca838a0d712b72ae04cd231ad5e0b0e0e87f279c7d345e1a14839285212af8b9e3b293e3a49e7a30b20e8c1548f2aed2609249fd328cd062f1405e9d9864a006720e9e0e0517df458390104bd9678e1d8b29bd7122b17e2b1381fa7cd75035f87a6fbe8fa74833f250e29ba8b387a70f090c480a1671c3cdff59ce1be2418eefc53c518a5cb4d66312bddbd39e18c5cb6807717638c5246196564e9eef98a6902ef878da7d7a1f75aa40aeed55856624329432a42e4c3387a82271503ced80ce599b7d0e5b98f7eef69ef3d6cae465ae0c9a1d8bc0b2f95171066eff9a80b2c21d7cd5d5be9bc32367c5728cfc42c268b9192d25aad7d6e75efbab4fbf2b5401aca330f2916a325c1f95df1cfafca31e9399602e7c7f3cfefb3cf6ad81de5964ddfddddd11bfe00bfe3a6592830c0cd65ecba58f642b086f28cedb7afa55a16b5a68c56434c4548f63fc0319a9b7046cdbd2fc6f6d158770fc7f89ebc68630aeb13f4ee3e3abee19f63f74e18637fbc3d670b118db201cbf1cf516a70c66ca34e32f6848fc6deb9f70ac8e49ff715dde49f47267d85cf4a4e5aadb43636b48f566b51ec3d6b5d179318161b62167befba58d61392a1506c18525dd87bd8cb9e86bd2d9424a4c43fd77292fc738cb1b7e56ee29f8b744672348a0d471d14861841617491a601e289420a9e28aee851c11b780422b98147601268d33e0f8ce737fa8401d4c30e1e6fcb393cfc1d2f8a87ff02bb6394725249696c4861c728e59cb4ca5a63c32a27a5b55a6b5df2ba62c3ab5acbbaae7bb14c66596c985d17c3b22c14d2b0c43836c418d4340c6291088323148982121ba28cb0f7b66c5fa9843d1932b037c3244da6d8d0744718dc50240a0637922561b09405296170939105818fdf0c3963466c38c3865484580f3d886faed22963c3920da908b10f1d04df3ddd3d6f78030d6e3fec201d3b66416294591029e5cc824c3ae79c340b42ab8d0da594d29a05a91ffd6a740c9ca5ce43cf52e79fdbd52ada449b56b50a0808e2409ce7358ba163d8ec01f5aff560473969b5a13cf392831e391521322f755ecb73aa82fb58320d9d8f5dca995eca79a2c453ba82a7d4a494535295a428f594989456536a3c8dea6954be549a141a8f9452ce1fe06ca97c524e9d982ae5c4537477934967ea08811a0f1097d77aa480f3b5539225d54747b1c1b9f44490957fddd197a59c924e4c693c259e8f26ade7a3d3520e901baff55081f3b513ca42c42c480d4ab96b875e4fa004a19ce152c949218df29a3a1f77ba8b41d431d640f3b472d71394bb49d4dcf81426af8508a1e83914868ff94ac9a28aaff1924b611254e369e02802c79a2ffd8ca0eea2a34001e76be7a3e752ce47bf15d6174379a6b31072ce1d28af9d46416ee57aa25196864e6889fb58f2ebc2aa5dfb715749b0f5f3f23f00a99183ad0b48fccb2f84b0bba4ee4c31a4eeac94504aef975cb6c05fd7004fa3620e6963d5a8c8836ac35cb812c317a3d45a68674845087de8fd90cb1678db9d8c5309c69a5be7a127a6a65be781494c51b7cec3eac70beead5fdadbfbf1050f51783096b3740c8085cd1f60e9f70b6d5381ae39e4944cc7ded03e98cca15b0fc672e8219e07736d37e8c49375baddb0134f09a0c1f109a089a9be41a70d70c3f6bdf3d6e90daab77ec3ea6513e81f93bb21279eec18f20d396f5398584038db58d958c514fc61e3a702d4358f5905a6638e07553c59d7361e78e2c9ba25069c53989464803bb76566dd0cc544699868d8d8301c0138e5a01472365c7ec3c64a0d1500b44cd984529594696ab137c0d47f2e4dc0514616135d28954d4bf0917e84f4850073ca1919901a2fcf00a71033b2181ae37bf1c538371d110c6088514606c409a52c26de508058228d50440490524ab9634ac95d15868eb3d9043ca796ed300036a3c013cb6266369b800d30650a12ae74897a14c22598f45933f5a949b20c587a26bde7ed373a04e3768a63e9d0137014563f9f59fec68d46c954c7f2c3827981a1cb29fb5f7a0517cdb7d4993430d6a0601a62918f1e87782818d45dbb183861dc8061e3f3b16b9a7cf4bea2534d134f340fa6876b9d6b31f1399f6d4d8fa58169b0456050a3ec103960dcd4408b429a98aa57f4a9bd498d8f0d18df358c6faf62e47cf77c9e34edcd551428f0f33c691ac6f72e1a5a44cb8a4979bb5aa3192b98a4409fdaa5d7bcfd7bc3ef43a802047ef408e30cee9251a221832ba9e0c05ea36cc02cff2ca9533b340578c494e5dcf3f3f97e4d2c6bdbe3090b183a7d1cad4e1d857b3650708c705800c0c8fa01781100187dd928bac1d7cd29439583337f0320003925a41e7dd2444e0058901a4fb949935fcf8c28598cbc2b1c475ae0279fec301b53d69f3f6bb3d817f0668a4a703c7d017750a0b09ca22800a3934800d87c3043b1c170e6c064f417e3835a1633b9fb040c4f52c6c81c5a0e2cc65016a47f723ba830f42c8b91723201c75833804b6fe8cd9e7f386c1001df8b300dd2e1ec9e49f31d673ecefca558dd209d9256b9f3606adab33c824eb566c0d0a9f4980199f909c4c2d721a730faf497c5480ef78f49139d5075a19237e862e708d8f46f49173862c032fe2de982885e42191a0b1cfa790117564c810b24441d60d2bf255cfc0086818b18c41b5c42432c03cebc20039cad9ec033a250c511d6c005254d8351fe2de1c2911e70a1087482edbf253e62c80067ff96f880410b78f46f898f16b8f0c9820bd8fab7c4a7c787c7078792c162acd97b558af2d055b218eaa329e06c2d86498dca2c9f9bf381e5e1163db831658187c6163288c18c26392964d0810c2c4cab2cdca09485ce8c55143520e9c858314105284c7e4af665450423238b2d86adb0435a2121727283b2a2810c301636a3151146342ddc8856344484aa00c25fd020abe246d3228b22b02b84b498020cee1535997dd14275596c315c8555157e30ec0411568fea2261b5a0ba90bca0f6585ac000069489d5a2052a9856d8d430dcc82cd4d017ab8511f185c7cb0e1e4d56d3be5ca1a62d86f88a9d28b318fb12ad14b0fda53b1eedf9e57734c7030b4f582c44615f62cac207450ad2d0d0d0b8e0473bd6a9f7a3ad77bb73d90796b7d0a74fef7d5001469f1ef7a0a81dbf446d3e37b55e1b4b9f30662d36cd7f4bb60086cfa6cf560048b8ef07fc54622079d13f551a72dedffed5e07ba7977ae9537e57589e7390e29fefd028ea3c16701f8ea680ad0f2c6f034b77b06302632d58568067f0f417f08d7f4bb6800414d8ff2dd9420be40bb08d2e7411704a15a0c0222898e08a042fe01947c41cacfd5bf2e4c8473560f96fc9131bf903c22735945adbca66b27244050cfde5a1f3c8a151d0b4c512dea1db4e3de8af558ae0f76f4915c4f8d1bf255838f1f2df922d90f02cd0f644e23e967cc2f97e38ddc55c7f0f26fafb94957ca9cc9fe3e0a5322ec5a74f8d8a47c82cc6c6181d6636c62e2c0a5f0cd5987ffe1ce6fd58406f06fd73f85273154f9db27a2ded252a703e9d8a9c6a3a9579fbc9e674e474d3288b24f4279ad7d277d4e5f4bda1341827a6ae913eb51fc139df292b7a8d5c23d7dbef914661de7e8778a849c4eb681eccfb9e2ff8f67c8b7ccf2298f8f6ab613bd6db6d726d97c92aa6ee4ebe373f3cb7e7bb3ddb2e4e9fdaaded2a71756e13ddb557eee6dc8ba4bb3ed174772ad25d4b79aa39d174d7279a134d4ca92ab5a6ac3a05d30094f29312060d9a46c96fa761c44992ef4be3c8774a9093263ed328927da65143c386c6cdb7572aef4da3f25c3d4ea3f289e644d3a8d545d22818c577133e632d659e45489d3959f03965f57d5f5eaa2d30fce991e6a1e7942ee611f82dc9c2e6618defed849381e1527961823eea02435f69f8847b6316b3f23a6eb262d3c2aa8513c64d89987bc109218417cb20845906278410c60d3a868ea15f8c455116734558dc301c79817177170513a16473ce199d84c5ad94c5dc1216a1cb802e03ce980167c01286220323cdc04aa692c96422a18c4c261136994c9a2994994c2608fd39f49909af24d69cf3bdf9e69bbee5eee70525fc2b651693c54c2f5981a316d45df5b9696274d798a6bbea76ba8ab5d049399d823fb0a1a1a119e2477592ce13241ed21547bea6e834f94a527dbdc2139f5906f099d4f3f53389c9fc91492b215b24a93182ca76a75179daa81ad55353a258f239458aaf507c66794d0d2f0135f6c7f5ea1a026aba2172a8e1f1e37ac629f8ea9a182f872b539aa059cce452746a8a4ecd62529ad082483b8dca5a10a989eb4a7402ae5727e590741a15f460debbd74d8847b3c1436938dacd111a925014b423483938a44bb1aeb1454e8a4e8a4eacb182a41c6b6a39504b420b4ad1815b4ace6ba9ae25a1c46b398d4a41029272483951d082ae9beb6672219eea709b9133772047cab15fb33531792dd56de88478701f4b26017dd76fd49c73ce28279c574c26ddf574d74e1203a69e67cfece9b96232b9822e313a55bd9d74d35e6793d9337b2694714631a3983c0f7d740f068304245b16a9b67fd8edfd90734a29a5843fecf6dea9edc3fed13768be5df55ada5fe89f8dc73efb2b5bc227a3ac21e93e5afb1b31d218384f9ec9037180df98e7dbe5a6ade0a6fddc2f70a9a651d1db4b463a65bddd46ce8379f9c634f3893e693f8d02a35333499fda9b9457e6cebc9948b689d35d6b2bad5df3e96ca2f1d26d4c55972ea5fd3c6fbe7ddec494ca0ed62d1704fc513915e9ef47f5991f720e01fb676da501c5540a1364e041174d9ee0010a7eb46b413135e3832cf460a1878826a8e1073fdab5554ccd24c10946e090c1e6c90eb6f0a35dfb89a9215958c1099a3384b1a4c98ff697c9fa9a8fd47eba6b8f9cb6eaae1dfbe08cb5d5f70d1a2a85fb58f2a3c2e62dbfaf6405a65d29850f448ce430efe67a48113120622e975e4ad2a9151b8f6fdeba36d4a5004f9657e10cf0947b6061882dde72da83e7b5dc00e7ae640556910e5f05087dc9f5e0e9cef2fed13ffb57ca2c86250c162096a0eeac49e92c598125dd4a56e0947f460012fab904be3d7a2ecde61158d3701e4ce92def1eccc82de771371f353e449b8f1c3ad5a3c9e9a57a44e19dac1c72d8b1c3061b5858563a9901892fb91e4c3a1bbab3aeeba5eb0e0738776f7536bc348afa75d1f02b5dfa88baf4e1523dbd0d33e98ff3e1d920d7a6a4c6f52f70be806ab8e517d01546a36862ea865b7e6b62ca865b7e6d62caddf2949d075323878d9db72eb7b1b9ec6c2e3736179d78b2dc5d543536979c78b25c6edddfb81a56b2024b7f573a7cc9e5217f71760db886dff01a7ec33dbbe0c4140b509fac120e7eddb100757763ebd1134f96d7d876e8c1134f968780b0e71e3c2e97bc2e6a49d125794b8bcf971896c60954a0c109545cf1f91eb9105e545a2aea82d3a8cc024437215be400b184f160a45bce12d4a8118c08f05fce428687c3caa683913e593e3b8bb91ccd8020823f870f9ecb75b9e548f25afaa5cf238d92e112cbbebe0a89949168d0a0e13efa5d19980cabaf8fb6fe3bafe3bfa27b59ccf0160bcb185e4a871a16181d189d975d1fad7a30a1175d9eaf285e74f1bc285f3d2fd2685ee44c5ee45a931789442291db073372915b0fe6bac80d808436c48b442ff298c5882eec6201ba2eb70f46e4975b0fa6e4570dbf7caa62ea865f3e79626ac5af8bc50c7ff98dcdc693f51adbca660d80440e1c192724de7219396f59397058825ecb0e2c40f164f936058c0ecb0eac2b0cafc572117701bd16cbe956ff8403a39380d583a14027168de7ad1b6198e208ae5abde53a64f17060d9c17369a20313161e64e12d961e14f160260b186fb9e53ab4e0a158bc789df560484100527fe43d785ecb46053cfd3a4cc0ea4260e7c1dc04aca6e71c303a4ffd6e3da2f05a8200d19f23478e1c6134eae254a83f9f1baea09852b97ec3df0fcb2fa01e3c0f86d27f31a572391509acb80daf400dbfc19de086d7701bdc0996a0c00dafe127b0e12bfe7e64fcf9028aa91b5c9115f4f8b1e235f0470db7c1d5c01f2b3d784c3d783c63cc02c4b2b9ca0e2bfe9e02fda3c6b58d9ec53113931a9b8d27ea2bdb8ba74bb1193fd2b8f94b03c9df92cd5fbf5410874ee2af97681e8c08453d978afcf5f772a9e62f065fea027aa76b0c2fe5829386ae44f3f6afc4e46834a218158944229197ae1e54bc5512dd9f77865f087be5be18a59c94d66aad65adb04b89982be75e0ccb32895f4b4886ec7591bcf477f35a24368fbc744dcb82c89f362fa6aaa8948b96a6518f3a86480600008002131500203018100845e30191a84952ec0114000e8fac4e64441709b324876114320619630c21841822320030539b340002b26cd4b38f866c31468ceb1388f02b3a9767f0862059a6168928425c3d965d4eee317a6c841e18135ce012660d4418a150bd08f8fe3af87f90088ec21e9d3589509bd353d1d8775f6e91e88edf41a30d0bc0eecb2d0d7453f9a02387d40cd8d0cd8572fad64ddb10af03949d87a042e33e3e1f5068483777c24443835690da93ef94a3455ad15282588443a3cae9dee2a3297e1a26d1ceaa16a994d2f0cbc640a9e21690ba92c0ae3cb4f84626ab69e1148011ac4959a825fd702b3a516cf578532aee1930d1d44b090aac39db460a4a21fb5aee745c989e33de80814edf7a4c7c4213b18c8c5d1746359269d553422ffcf737b82f5614db6310e9ef82a1f3cab4e01b703c51744833f6902cd299e333d1cba7057edc1f3169084670ced9bd8e99597a24c1980b1820ceb70f69baab1060e9af4aa1aaa40fa62b7e26ccd23f3bae6be4be08311814b712f251b161932d04f9270c1d6e08a40f8c80d0002fdb082487748d5ecba1183347c34bdd47e8583d45f28a2f357c5fba48b47385bf9b0057ed002b8ff63f32274ed26e377e250209835ad82b13c0c91cae138cdc24f6e980f3fd6e4ccc4e9dd54e5d929e633f0c3854ef29182df332c9b5a391d93531bf67e99f82401d88eb784c28b0e02a7f86e8f6e1206e9eb1cef4a3153720cf4504c63a22faa32d6ea48b169f33c0525eaaaa4a2f59c0b734effe59670764cadcb947e2695729fa6b6c10d33b9c19193cf74346cc960815fd517f9df9fbbcb88266fcf58893a6846a2d9017cd8687d3a837cf322530907536d5f10c03f861e8f4dab05b19cf0a4faa9e686ba5894b3049cd8d833ba6a972057879561a8481605d02bca4bd57567cdae9d99edf8340f1aacb621dbedf52e1daed713cf41480a5eea4f6e6ed674f56e5211ab60214f30db4769c1840783863455d19478bb4bc0bf0f0ce81371c5b08526b18c4725e4639b718d0b535a1a34141bdc3f541507915a588e05bbccd5a6342ede722442cfd5651b0dc6e0551f9b09d4893c716b4a70f3fe1320f20070918b78370a9c7ddffa236f59cbfaf7d2f6a252a136871bef1eb7773e2c4b46ca1528aa288bfcf0656a8942ece227a5060ef77140b5df03568b1bc485a36d081385113511cbd751418d4c54d925e2a5ae37d7822daa7e8f06f6625793f83f704fc26c7a5cd01fcd23c305d454777e6a3bf034cce1e7a7f0fddd2d2d4bbf976b2955b830cc3c073ed9bb9f550885c584ee39428e53eb2d306b342967bbb379e835d68752dfed4dee5dbfd7a1511b86133d7b0fbd3d513779f24c79f0c181bf5056aecee4e766fc7f1b06163e0b91df0835f4dcdfc9ebcbff2cb4954b105747cefc90f47202fad5b0f93313951c45d5d477e206e1e192d51c429ceb86753e4c24da14c19d548733246b4b5a32c46b502c1482708c32e489135619c9641b84eb5772c0aac8d70749ca4fe968a2807c965ca7d427006a137f37b26b9059d95a7a4473b4c7d15b0b96f2c4a28e0c27531b7dca9fc833e38269b0c7908c855a94a17bf7a39a39053f2aea6df00b1c9c7ef205c874b395ed419f3a09fe4088fdd7d7c67f3382a2b3440d69d92f83d419ca1bfb20ad0f22fa557fe2134d7ff7dac39e1ef1f871d1e691ee94348f0efbf499ab8441a6a818b0e5439e5b5b583a78d17ab13b171a1825747ff3f34965194ae4591f3187f5974a37dda992a0d9fe2908cc35bf51766e4989b49434a206cb13fa195a7d2ddc18fd9f73ec6ced2b6faff0f38785924c46adeabe6a4f7b084adfbde677fd09fbdb8518e3861f1e8494aebfe01d1d5905cbe67fe4bf6593368cbdf6450b74306eb137072dbae4c1f1ba61e6522e2a3af555e6a628c3e035bc41fa53296278892b5299c94e588e03275bd788d3c68a8d8a6a8d2215644fcfcde876c41ada44d332310b0e56e9f56b94204728e7057ff2325468f47bdf0b4e2095ce6551a6df86e2ce5035269f98962f6e160fbb2a4ed83d78880ba88de53019510f27998098f6d9c35d94ace6f63b964a3878db1463aca1d36be44a260e900067257b8a8bd9c89a83b41e4b2d2e011fa51cc2de006f3c56d516d73baf8186c735b916ceef66139fb8c038438e6cb280e3c3994ee7d16788b8d1773555d0f30561e46931feb178c1f6a5758d3ba2b6d71a56691f7ac7971e8acf3a277bca35d50335dfa1d8d17e90b3e8ef59e7a3c0422e91de9f6ced87279fffe73f742c7bde4abc49a6ac6b75daeae0ce10813024c119f62a3c03e396c7c96a925859097fb974c9f47f2fe9e28f1bc2dfed147395adcd1f3be7f177a1722def620abf41d6b9973b8da22eb8baef3f56dc717d3cd2a4c20b928adf5fff64df7161624deed2b21fd2a12aff7a1933e8fc0bb3d54d04345e5d5be2ee749affe8faff2d1925cc938cbb115cffb3be40765ac420f83a2692c42e18b9e2d9dc3c37e7b4b4acf22f17edf6efa7534bcec57158fd6d57ff8a2f7968e9a17fb4a47fab69621879ee4f54563d5499e1eedaf5793c0bc9a33cfffb25f8c9f47c94874986f7c995aaef8b15d1fca98676ff7e821b8b2310729eff0fb81cf3b06a5654615eaf49fb0f3511735d179afaa3ca4b3a38d37909a3031274e03a71990fbfeb2f7b565ca4640bd0348a25087bbb0a487f991d5a298d12a43ff2a73d4f5fe844f5f0d73c28e1e3216a32f732b165b461d97e3e6b67e4553087cac10baaa9cf1993fed101ef9552d909a6f0d259a115661c8c5e8d36493325d600cd5ebe49c985f136f58bf5b414e7720ab148dc880a3a10a753ff5f76cb061cf372b612fea4c8d533c1c096e60f8547daddd98983c6a0e15ae9363a13f1f0e02a9a462b5a35884fffde23896a6c7f2938c676da1a8ed3e3352e10aa3a26974a5c56ff9d3f6112d310a78e8b653484f26c85e4305b0d8206eac5c412a56f8854bad97e072fdf42b8cd06548abba136deb82e8198b56b7e3223d4fa14de8a6f4709c1b17796596e52fa6417074dfc213ba43e160c391614bcc208d49c3ac6a938ecdd642a3b44d7b60f5b8d0230cda7500c29b6e54ecc2c80ff9bd8ab5f99602d2634d7f7a6aca7b66ad6d75d49be81d15c2620cd0cc85b97a0898e3a126de10e23c6a27ae0daef36e22ac6b851eab749577e8a0342239cf6987ce741a3458ae40fdddf82e41577123bbeb6e66bf461d7ef04d2a745210e8b56cc18ad82499f5d0a8d799a7dfff4fe0414119e5ff2fce48a7d8beba606afe31aac3851501c915690b176227529f46c6043da3da0f9ca7cf5ca29b33357c3a1c66e0dcafb17e33f3cf0a070b1010b053bc0a9621e2b50346f0df589177a25e6164c5ce686f8e44eb0525aebd8ccdb3ccaab297b6c0f9572c3fe920b746c014599572e905bc2fa357c81caf5ef63281745896c5dbedea159654438119a17d3dbd3cb32b21aa6817aa90d823967d06f8e7bb86a240750f343a0fe534e11fc134d18cc2fc7fcd7601d24906d098a8875e4b61c80b54d967299a52a9915910841a6b858b741182a4a490b47ac0a8b41cc80b90d26cfa97d8e93b2d6edc5ab98b0468895740b65312f5137493f751b67e6258762e7967ec750c64dddd6b2bd55a2d7b44346e4e5df2199ca60756df42c1615e9d39405fddee400bcc4a3c820afd71d842614ac7e1c936b73475debb7d9c2b20f53750b2663da3bf439f726a515926d236112207d6667fda01aa14c871db246237356f00e020681daf1d0f7d44fbf76280b85c2a311d72f70a834c69b06658e6840cce1e0200f4cbb481bffa92b5de7d98250c6c5977e7b7c8ee70472995df35f8fa76398000a95ecaf50eec24ad6bc1779beb365e31801c925b812ab72de0bd948b758baa5a07f3286ef97cf27c93009d64d0b0b2360a66e9c2c863a67c803900f384715c0f59b8a2fe3d451348ae81eb60ff4e0d3ae98b304b8102528e9a33893e41940f42a08621ab96a823f88ab75e571f53845a0e7c5d87195288f02a5c4fa9d37d1d63d24ff95e5613eaa71d38462684dda1816935fea94c9913a0956c40e2de43b7b70c45f72aa451fdbb1c572fa66385a021e68d38ba00dfc4ed8e8154b09ebd1ecfdcac6a62826743ad19d3053ddfa432de40609f8ffdea15da372c6cb40e2aa62518460000af9c63e9ad3c5b130968eafcca05135d8a77cb66752dc2e0dd1f7ff03cfe54d5a7214643e67e14230338cfe5fa589a67ef0668fc1849d30a0f9d3ef828f1c0896dfd0577b70daea0e3cbbcaf3b5fdf58501dbd8a680ef4a077ebc10ebcb3538ecbdd08c20eabaa097777ee6703f566715c5e9a7bdeeb6b6629275d818fc4edbbd00de47028ed57f712d971da4c2c16f09a3f28b88ec4dfd276a861150b7461c68e6442e464e8cf17d20fe1f9510b3c338782c326e90cae0558d0a729a87c85880c01e5aa125a63c9b500c7d4675bdbf9f2077b6b03f7012ddc2c4a7e84ee0cb1785bc04c731cc72873176117b3b1bcbba3cfb73f9108cac7c2fb0a00eda4d018f6e2a6aa61b57f37baafdebdf91e43bc02567eb5ed6980f870af40935e80bd4da057406d659f0e98db9b99757ae55d761b1a9c0b8ecf3f7c6db196b9c996800e61021256f49e4b6b762470c62bb38f3ab4652bc2651a78a75d8ee4b25a63bb5fb80940e2f742fcf8067d41668037d109f038f2fe3d0d61ad0e31dd22330998e2acfa12202095a8d2901f221419908cd505ca8ae2978d212492e6d6539609217f0b7552573fb13e2da688ce87e0990c1ddb225d9b98d2079c804d5102c5649c5313af355c27ecdb0fef66d82d37d11aacc3ef0ffa3ffc87cd263611f89babe2251805727874e9a73b7770c1401805dba93ece6300e80110a1ce1c5873392af759902f99d0b949176a2816126e8a96e45854457e8faba9f8edb74e04efe0bad89611622093dc31d4210625972a1866a5f752d55543a4abdb2b8178663c6ca8b85117b6bf02df1c4081a2b7092f1b13fd4ba113a8341916e4e560fb9019a305f3b81dba260a5156116ec996b2d02749cf175a820bf9ce3466ba3390ee5751f751a13db458706a4180ea3c8b337cc380b81535b2658dbdef1b7d08ae0e425c8e4a3c6d908464440d1cab44dc4dddc54b662acf095551dda80e652f19a5f4ea07e1579a25895690b8bc002dc6e09197b047b7a54493471bbc84a297b145f255a1dd1bd738d2cd31206fdf7a3933394b993a5be98955b2aee9e5581c337520a7c9ea073109159b46bf44e5361143e34933edc667d05e529e2d0e5f593cd9048804168bd7ba68fe92cce1a5354588e16353b695f909bb48de6decc84c3862c4946f2c6fcdcb5c9c675cf7ba6b45eeca98572d339a4c84561f701ea0e2a07f6c36226cd39c66a47093681cd2b7051177f6a45004c7e277e5c87b960ccb13cfe78f365a718235e2384cb9937dc48567a32cdfcde963aae4d272098a43cddaebf4906ca5b908388a22aeadd722786b832c4f29a0a302e214caa50b621deb374bc37c3da370c0c49169e8591d00e14a031ce24b9391b5c981bfacdaf59a0e71a5c35e73434087b450ec3187d83945f10f03f2283df06bc1bf82060603d6bc84c740a9589ff329e91af8557601562954eb951c27d8ccada7fb7b0b7485754e339cbecc4e83b69f7fe82fc8b8ebff8adc485d2dd363c88a22a68612ecbf9cf25d5f6b1286ca3da8e89cc6cad14175e313709b8c3db9a9b1153db2e818473758911a8f9a0ecc3708a12d650751dc54492728fcaa5d791982e76d4d05cd3d96cb91830372d0490c8463724f0bb87f009251d84615d18be31dde18721c36c3c96dbfedf923df5e5a842cb84c5666e12df369e30181c183fddfb7b0815844bdacc322326dd7b3f1d8710f6d26c457a99585ad1cc3a4625106773273dbad8b7a56ffa1c80a1130420a1c1cb72e9753371c200ad8af95b97394d30e4c54f503d67ef6f5dc823ae7b87bb0360db59cfcbf0684dc9b4f48685e446f8f5b33cbcd0efb3085c8f753114d3c7640ce807b8e4ea3ecc10f266d9cd4725d871aaa0bd37c5defbe62e6099bf9043cb1617982b4724c39db5a312f3f64326deab805c55611f27e2fffa5f73235d62ce2c6d1200d642bec61babe989e2913cea32c78b0ab3d19c19d5d8eac339f435e3bcb1951de82dbaae0fe476cb5fd2370fbe8db632edc51b87b9c6e69d5294dad35b465d174e11c7c4db6f8c12adb59e5bf21628aa9c4588c2e78c88c574c2bd751eb75ebbfaaadfcd9d146433d12c56475802cce5cc49e8d465a380d0824a26d301110a2514e43c9b5ac60a6228e5be5ebadc2b79e36b0d57046061f3187d4e0d11b190c2c3c0ca66204345a954f597a845ac86cffce08b14fbcd0ea9de6b9748de85fff5c4ea41d8bdd5fd7dd6b2506e8a803aa264326d4f09aea24aa9175b03e67856329c91a1b0975a2899bd8aa7dc9ccba198d9e52d3b58374378df9e60328b4ba416f6320bb2e9559caa44e891270c473de083f3139c4e81c79c2b68c93cea70bd60d8f542d92ba1ed20f3691bb017a04649f49c33dfbe4537020671ef9488de4f724d9b3b5fd650aeac53138986c83c3893bb0330408e9e91e60d677d462205ce74f297b140517f94267745a8fbbdee2844e335c103913f15e14cdf88f440b676465ac645bb3028b26fb0dffe67419fd2f71168f40bb528350612ff4ce139f22808d8c98f6f0565928ea0d0abb8c1b0a17791b7d63ce4aabde230f982e2b0509b33b9297f69ac2678923e64647f867f432308a8dcf85fe5a6b765549867a4be46b3ab3402c8cb415db09f52beeb100a54568caafd88bac25335e06a16752d7282d471b8f348fb97b066e70bf709bbcdfcae6ba0c0ca38aedf380d441ca088f2316779642031a93c01a3e8c161782f2cdf6b1de4f99c18f3b11cd7c7fca630021d9990f0f9772a2673a8cada86787a82ccb45fb0169845ab2520e2504b503d4065715f4236e7a6c6b450c0645279698770f4fdcbddf11c593487705dd45bd8f45def9c51461681d052e3a51e21308e27beed0ac6da04283d0290f0dfa0c6d3badde4e08c09f69fc0fbd754515e2a499f8e148a4be9255eb955343d9fb5327ba03225f83b506b4af3908f1631ea51a6747ae2e44c2d7fbafe0195ce91983e186b706920d61f022e904b9c9d1b2ae76c7ef7becb37dcca113f118f21087d7f4eb42415e77cde4805775dcb7c800cfbdf2e6c967de0388b566d0e62c73d81c958f94b131c938bfc51407ae613349bb668eb67f6903844ed63775fca4fb6028bc528987427fd2257d5a4a93c63c79bea12797c24e2fb5af40eac20958b96aa7ac458e112622934763523a7f648b414f6162a117269775c2283ded3422f2b98c2e91974df183b49d6e313160d6bd3e17a87b07cc67b166bb00962bbdd4940cb996e8e33b5ac994a06b44e8bb51df8b3db073c59dd1f6ff06b9ba6e57bf53e39a0e262dd4eeced21f40e329ebc3c7c9128226730a531766e90b9bfd0e1396ef9560295ec4cc235c8d90920d754151f5edd49be0d3f5f9b1b8e508decf244a7ab3d2eb4b0bb6973827aac5aa72b9f572d3a354daff7f0be9774328e1021491ba1f9a176c9c749b61da149ae977cc34337e1398708e18890b17506b052eaf647db0668bea87ecb02e55ff1a0dc4e1331eabfd05947cc6d71910b4edb6392bc25c6d02bfef2e1d5083764e1580dfbb64de9fa275f77a6bb6e2d19f5119545a00a8032d185bfc063d92340c2bbd39a9946d7b3628ec87513f90cd15045e9747d92944e40b33b5f527f6cc76de9c213c3137bcad3d63e1b286aafaaa6dcb0504044c5a2bb88da1872594be4b7b62294fe4e24c856d1388e673b17424614312abd2cbe55c96c7a951f58d731e4b1ae44bcf41e99fc41f552643a5fe02ab34a1106823c96f79d0dcfa355fdb5beeedeca17cecbb6b2f8f4f439dbd18d28fc8f6740feed00e673c03cae378874b27ef77b8946a138014a4862877b80ab5c7b7fd92a37764fae941f5f4ca9847314f5f6ccecb149b193b93ad84ee0a824037bb26f0c048f413e3417aa6858c22883396c2b4de3c916baaa36eae84b9ec973eadca04c7a1b1945491c50cfca0a69deda342288b1836a7a55bb1c565a6bc05b669e9aaea260afaa86b2817106fd5878eb80abca375bef2b0d97534c411fa863a07551c7a3d0201303a430259677e19463b7679871df1170d92902a2e133cb45e729f928c739474015ac302cd2db941612478a3b645ae8d61745d4ac97e52e54acd9fe1d6c692c6583397672d68d9d8c3ad25f9695d7543d170de102bc1fb0b0fb64f9eb9102fa39508d09c4edcfa47983bbd96398c8a31c6a8ad14ef9b7bc8200d23929d90fee401e40f22b1f1d2a09d08f0cfd8db28d50ef86f7cac4c93ecc09ca73cdee25bc38e8116ab5da6916d4a582671c9db64982ddd55381834713c0b062a17b3e936f7061399192db302a9f86d6bdcd27947ebcc7a613da74889d81119c3c3d93452905fb4ae310b59c3eacd83a9c9d558be83873aba64355422120595524c44580519be98452707c999ded260a49ee5f28c73c1ed4ca41cd6ce6d4b411807163a39874cb80d361c59056f64a40ec7ba74ce603775463a101dfcdec4457ee06dec62abd53676f41fc8f46b8740164079c6aff19b2f325bf90122e7051c292fba2737c5565000eb5ecbc78abf3d50aa45384f52120e8da920f71fbea1eeb8f8857595a100624ef2218415dcef8173c9ed3b9360607ef18e6627ef6d1e211590b627e8dbe1040050464d17c032eb563583b333c0b3f04aadc7196c878030401a781a81a0b529ca5788453c311b128dc4bddf8f625ce47322305fae20a8fd01511c67cad82ce84d6ad9d0f5f02e0bacf01389ebadac3929825ffe9f9083998e0a8d1cd5250040febcf1c0b8f0b68b7d929cb20ea69e1eb4d712fc18f8ac0c122ef902e58d122e67d22f40cbe07ae7d1de3f7ec1149a91e32bef78a50eb4150fef6c165282974f496a96e20c6d99591caee0f6913fc741069f2b12c31c293b7ec140a8c31c1c65a83c40830477c9cf47a516c6f640934dae2a8fe2fbd1a4d040a97192092892795a01c71fbc185ccf6634403f986621e35d8d0004ff91faa11b2098a25b8216607c35ac8c0f5ac9a2bbc8272287b807bdb3fb0a1b7bb1583746262f701f69a28cc9a172694ab4cb3abd071e421dcdd29816ef3261895347ba074f8ad413eb4acdf9575041f3a41de6304057527125a524eaa29034d59883af2612df663d055e9848fca1458b6f5aecb08d968a09955eaa2933b027ff4c714a18365011f0eb247bccec3f05623c28450b8de042389b5ce9e2f02397727acfe27f57060f15b97a81d760a0eb57a616b7e30b9f3b85a961fbd60916c3f5a17704559e6116150848fa3c8c4ebcf4b725fd628ee93f7bdf9a5181a1037facaa84560e23bda82f8443601551775ca10136df1fe5026d6d5ac97006c326e6646ec04e2e757ec44146cccd759e16f7d87cf80cb1d17379d9dd501093d8f57066d5671d94de1f1af2cbed974ec03e69c932f2e7c9c970331d1de9b60c562fc1ab3008c7b05db215364a578b571c87ed4527311b44459d54ae666a362ea558d0354d5164b308c9c1830a3af1977cefb5ec2b2095cfb3da5baeca876c976b91ddaad8f374e4968fc22178cac2441f2627c3a7d465af8202cef213605eefc7944e54d7ddc410bb9a0093f57f90dad26440f6f272629c253bb3c80cb62c2205b9d2d234895a2d5bb80cf733894161f78bc18329b50193d46c7b5e43f0aca173de9551fc277c9855d9c97455f19c21793ab36a331a4da68ef9f99c41acbd5c35d58b2f66d44081e2e42c94c3533dfa67920b7abda941e66ad458fc7471f5143f9a2c640d03f97516423709c8e429ee1835120c232609513478da41cbd146dd9be73c3bc569142d0b4be9146cbc338aca1000f7e6d29ab5a962195a4b01058009045e668237f17af1295a901be342b2cece4a60f1390ce81a2df5980e1ca4633c6421a2dbafcbcb4096a6cc710168f29d44e03ccde15c0a56f8ecef0dc0dbdb60f10b13d56f5547d6b2f12a77d1c9dc641c731e0c83bf59ef1f3273e3d45abf2a6a2e24407283d6c72d88c251f32ef02002cfae8015942edb328b21332e64898311a87ffc419b24d95c629e8db54ddb27a93bec04cc92217157222f063b1f37c02dd1ac21823c94ab7b12f529494f8178c8e1919cb582d162e4afc98741b7f48a0a516e795105a4116e2bd9e8af539ab482405daa836b0660b13208ef2f56f74704154897eb843cdc31ef95798c9c273fc861b7fef34b68db81198cd378ceada283bcea46d379b6b261a45688977a91021c8d230553a32bbf5b2eb3dc6e2e25c86cb9483d7798225898d9d9cc3f1ece4588c0a2b04dedb51e8f24c7b57fb78d10f6d37e04e09f06bd431740265f734777120ad849dcd004b4d74f21a40acd51187d00d75cf277ce013b589cd860cd6b8074abb3c1a40495f868c85b096886f76284345b0407fe0309bbd8484b3c14ce315d2e113de39c1de5c7e73096e57377606229db41e7acf3b0221e65282175396539de524b79b8f0b889c54336a75cff4c74b2ae02ae0dcb20f5c5d8217eac2302d20c0af0cac38f43632c20e89360b936491344853a55b1fc8e5d8c30c44b0138c1a3a10a2f89032e1100bc279e48e8d0076093c5428f58a0e666cd4c9f44ec76f4e12df5c8f32b1f0a77105f7dc7d7a777a78e9ac4ec41af2bb73d825ba7fbd4612cec33e6a8e86a39e8742f58f750db15f48c619cc219325bd308b8bda495feb555dba59800dd73c5c8a944f9c0660ac5cecb308efff9d455677c33074d8a08a73fd3df14edf35470c574d097b1daaf189f679c92b63e600006d0b09ecb51d7e0807a9d940678aa2ed13a3671534e3d8b426dbd0f02c6171f45bc06f32c544831ca7023b7107946cd7be3e654abcfd9813afd8659f214c7584f49759497e11c523dd8e0690838a29c70d6581703ad43a55a9d3da66605aed8e1556b0ad9c2725508e1afce904a4e48235486790a0144096b441778455a0340b2bebed79673d1697d77fff62687a07fdf473393f5943f0fed0b54dca2a6ec9325b337309e9204762a7eca47d99dfc4d4ac5ba2d37126106dc8f35c44bb3fa8231db676c258a999e46d8de4038a24f7479fde1a66180d2b2a65685ebc62dc589726b184aacb8e7294a91918aa4eec2c719768fc4d89eba1d030a89953ed998f20b487258e3e5144b0b4c19739485d288effbf150f6654472ac3d652e0b85233664c13ee164ec8b2e57a0a8358df832d9f7c99c7c1987ca8ca0e455cfaba15fbde9573d5914548985e285494f109af9ebf0f41c213c2f5e53d37ed8b598448ad3dafe20f705870e9f0ad7c13b2c8a00b0adb65766d2b5859cf055e13b2318ddba41243e936a4a9771d4e38c4f5b6f74966904166203d4cfe88acb7be5198b738b32fa1efaa1eca65ced85468fda65f2c8560a4b9aaa4a9a467c40248e4bdb2dd2dc53e768b4757a19197b77875205ec9c7e18c01a54242588847b630b53573e89f6f907d678c5ebcd9c54d093fdc2f498c6f8ac74666afa05e28574650f674a9600250b7a7af5ed523e82622a041fe1d1fd99c700e07eed6f13a7bace73f3eb4d0d531fdd7c13c364e8b8547526d410bcccb94c10d5f1aaaaee5b8c2c6cf8023cc9a09f4fbdd83de90e3938000a3259324806bf01440e6e04b018615a694fc9dd5002ef0c2ff9d5bfea8d8110085ddf72ad8215e862d5e4449265227bf0a5bf20315a5ba89b0fa4009c0f5adb69c7a21e4e7a65519316caab0ab1f26646de5428d500a2b15407847d5c4c07a2a6719c52a1c12ecf72e561777da532e39e22f22c16fe0c641ab53a55fc11d4f6ac3ae2d7477cf0d2d3210d4f9134777ff4810130c147f561871060c0316c456c0a03f6c47b2af87a64a9f20f0ce84a48ad91ed97f5ceca026f52b277eef502b1711f1e22254ddd2bf76bea1b9aa2e1415b8f49231ee57cbb2e8f512b1e9b45f19323ebbf143b8f219c164054b1911cfeefe482d24c95777bfa0984308e3a694d743c38de5099dc4568cd283c78dc5632d945d1cca82878bcd533990b92db504a9338c892e9c504eab16931fd3eb73eff1e6981733ac1e4b97d8af88ffd23112c3a29cdf42a7ec0f9cefcac001181c2900b799530c26a8893797108ed23e0c99387f5b264492cec41ce1517df01b982aafee2b1532127f513203bfb4e295e287bad137df63ced17d140cb640b87879dc2d4684e1f481c3b02ab5146c5d09fc61c03e0ba49716006b513b036513fe388785e4e8544cd3a8c1510df6b10e35343a8e689691587f5e456dd12c27415029fcc499b2eebcbe20e44c23587aeee89d3ef505046e2d9435822ea9770593c2b87398acd5069db34e12d468601d3a97d169e6d13f749ac830204ed13c53e1158898401303ed1a50f24fac012a3bab46d9f8faebde431b99345c740309fcde6830a86d97d7c0a939e21552a3e7db5cf56497a56a8f7f210dd91b38a29382cd2cdd4b8eb4084508e49e5a9d8bd7cca2cc83851fbc7db692fd8b1131348d57e03102bcca0cf619493f1b5f2c62a9019e768c69c00294366f0b70883914a33773d61b2bf98b77c653a577d034c064714da896a4048b0eb0f0eebcfca4c3cdae5d2f2708834267a5153bc6ddcc202402b0c3cdd3c2b717bf31c85ec5110091887d7d2d48aa3a7ce5a1e9868371b7bde74be281e2480443fd5ebcc8772065631a09e6b5e824dcb166931a5aa7d0b216fcb5af3884b91cd1ceee639460f8dc00d2525716c25aee874b0794aa06bfe4961c9ecac08dfe3231e28e7bfb4f9f166be8f36a756ec0ba1a4297d1f55957f6489e233cb3b56fa5e61010c56dc9c8ad42c78114a10448b1b21e95c389fd8dc4d03e42e62869548d4a310b80d2122ee80a33ca02e7f5b02637530cdae0f4a5b073dde75a06e3068c820e3c9303b8266f579bb9edfadc9f40dceb4272019d1b8a42d2e5aba5c3037bac6dfe0251b6e24e71f5b68b310981d3a937f9246f5723a50eb5075e82408b7db3bebf52147391002b968df43ea3a9bf960c1c2f5373a3869017c343b773d6081c2c6191103ccc3dcb3d90c36f0b25fc64a874ec47ab63f89f1cad3230a584d00abf4bf0cea2f8b26425d2bce46bcb9e8683dc5e98ba7c8542464160910fcf7d6f075f31b18fdb91838ba89e186f1915358bafcc7d92657df3a48f8c2ab1626407a38f17960cfb0129510a99b0e9f89acbd18f13cffcd9b6261c3bd335e23081dd341f5a14cacac92e8a578554da687dea95877cbe114ca053912d5ead0c81cd17313ead2f3523ae12965e6580ec5ead33d7c3fb3f8a7cc45e92cb2a2304d8985042db70defc658d04d78253ad04a1b892fccfddcf128aa7cdee8f67f53e5a024083d16c677a646daba8feb8c94ae06510eb926bc8404ab7da95a7012392bb91c873203c677e94b844576685f2619e7aaae868f82163199d6af2558e08f2320a85c319f8e447433cbe9e14e0025581a514cc3680f60afd00e866a031d5b36bce621abaceb2d4756ebe79b14dce3a4907478d49f155f2785c24bb4644b2c3fdb484a646e7d0a8563bbbcdd80e4b66eaf2cd675b7164ff857bbb128f9aaa8f6bcd04ad3382606eb68e48b399aa068317aeb070687efb63e0c9f22d7f28dd75a0e79a23b855d958e97718c593594fba5246616e38c223700517530b7ce44a62f7230c4e9201842a159508ae745416e7475e512143b1bdf0a20b01cd5d75c94f550d12fa4d31d2d6326bd57c108650565d020ccc48f69f38e9ca4cbb99d2c5e20f757a23cf28b14d2336ce03ff96d6cd9c4092f102eecc3659a8b54f553822338443ffc00ccf8ec4300c116d7338e62fa39504f93481aa23dd0b7b86f6c7fcc7b7e86157d826844c0e52a0b631c7ccc08652526789f4f61bae082fa9c13ed2d4fa4c08cb274fd3227a2e0771d4d9679fcfcd0d5eafb713ca1e507410294ca9852cf7121ae61397e9273ac2bd04f128f4b8c876acf11c3d483c6ef2dfaff5f92b4e74b806c505a8fa72b2072150cdf959c668c6191256b4172a80d66494c25d88a6dd43d25c282f789736d3547beb2f1b921a8b18c8c50caf067878719d605e3697cfdc5cc0f24309754d50eda8e0d67d46f72ab7ac9db58f2079aac87683e287963011d94dbbb677bfa81985234846270e6ed2220db26d5df6a02349a2073a5ba174d1385cd9dcf83b24331dac18cf6a80a1b7a75b0c11beaaa13288b58efb89d3fbe5689e589b8b4ba50541c99b5402ae1175aef726d02d9d782aaae130c80d4bac576d8b4df743da06f64e00ce0e56b89f6c56f1a2222e2eb71e5165a8b8a8ed3befab19df741c82c455c13ef07746c8fed8b8e92d11e157bfb1a3013dbf2d96eefb25b9c6af11ec0e13990d1439207cf65342b629461050fe0d72bb242198ed04c6fdda624088a44c3a3a1733c5c5c4602b3070979575f9adee17c81c881cf875deee95f90b0f583b525882ec7ada25d04640d8af0d1d110dae8f10c5e63f56e3f487c07be27e188e6cb0a7e0f472f538424e12bdb724e013cf370184584f0c514489727aedc895db231b8e1d431964f73112d205a6403331a2ac7809926f8294d34871ee1cd421db85b7ac046fc5a7fd5c2635136ec6914801d56893e448e151bd34ee2a0cc31ea0e429c92d0eb593de05a74a14051046fe6f4a428854d9dc5b19d2addc25accf1cfacff75502fed864e57741b628cbedf51f0d04b437f8e166049f445d16be502fc8b1443cfc87cbf16ad8f057d7d7948e31d2e95a920176a48d17a561e639197bb0f373c8d0f2667581c0ef14df93cc4037eee1ede2df10be342084a09114af0a01a7478704350ffef2df8752c1c2b5f9897c622bfc7fe63fc75d979ad2245def4e83a0397d8c2b863998e83bfab3e311b76fada411766b0581439a3ed3dc15f448179aa24ab0d09298f976d003bc21224c241f3c0b4f5186570429849a180fd60efe758b6ca1d20c00ca37f8930b86ce272e42e8914f6e81cc46aab823b84cb826d3f9355f11707307b50a837862b733fb8e5723161fab1735747a65c0ca54dff029869852091295b9719222403f717f945812bef7a74322d8333f08ded7a783e0bc8727e13469ffde026f7d393f1d3cb7595df67263bb92177dbf279f3c24c50b40cc7ffc57712150377ec7fb47ca2468a3d38d1e38b780d4ca007edda023e5a434b98aba9df8e1896b9334d625e1a6504b7b4336a54fcf4986b8a2a089e9ac6207e011c33631f6653a8739a944f6813842b65f1baf1505626f070dcfb9b8f20dc93697df5b74ca4d16951506ff4c10402972bf89a60939a010de7f5ebdc736dcf22b461b5648e9ea2b72f1b9bbef0ab120568d6c6dfd96d48e9bf1339e35817613f993ed19771a86a926103c446c2dcc23a86e0f00ba7d3edcb1fec8dbbf93fbc70a0f5c5df51a43e009578899256c7e818f680331e5bfd783d3de5dd10fd27f979927cb69bf45bc93387d73b36a78a1a341a31c4fdfaf700a16eb9028a53de39c68437dc2c7af843c32e908b9d04e028ba3fe5fd7fcecf780ddc7f4e9cc6acdf129a76490f599832edd9845e515617ea422a826d9eeda290c73719f7d4f493571a0520a291d55040ac2b81a351b1619f1ea29c8fd94b14e8df18f407281b249067e195f2143f1d8dba34174a030f726860bee87aaa5da2b9843b2c13a89b25d6f9305c3a87660a9539363b8b0450a8970a4195104e1f50ae249fb04a494757fee7a66c5af6ee9d49d3b6933456ce50f41f16bc8e943c2be792ed901b852a037ad896a0bb645aa1904f63234e4b6f33f27361fe94a878869efe82079270c0dc7249c20104c768b88a10a66d502a38b57f07ede62e0cf09fbd80a6e3c7d7cb82ae5ddd77a6c2780e7ad976d09e6a6cd2615115396b9254a12eae733cc0c8c980ec215cb33f83f61b30f0286fa2bd047a13dee41c4d6eb00d15c0332071b2e147d831fc07b87f9ea8ca3a980422017505afd19580f78b1042fd745710f44a2f97af538d84f6452bebafe026bd3b81456ba2b8ff0b12dd171483a1901986058e2c55a1cfc1a7fcd443ddea8b0d4f45797c783745036f859cfa526d8018f5ab39e56043774f2839ee739ae5b97624d250fcd5a4a52f6c609586dc0717a3e53fa6d7727f47e6939e9a988055b8dc8707876a185906087d0aedb7110f127407242b536e78242b4b2d6e11ded91329a6e62aad8c9a85cb0e14c523395d93566510f6bb6cb00fb55b61765632e4b4de5e4d461e00a562555b7c9ed1ad8e552bc850ef2ac995cd821f9431281d409ec96a587ad219b53330b14bb0dafd550b42178706ca7d8e29bb8b92d1bfa784d08394feb2a2848d03ce89dc4d5124f17bc3f927b19a6271c550dbc3bc07ec2119a51712bd39ba34c64a1d0c0f880a258498272c00b601a90f8d5828611e04e41e15660a1f45354fd0f64e8429459dab62b6d8629b18dac05f3427a49bc991151ed98fb426c9c694d726ea80d31692097654e6d40f198ebd2299895206b4977d47fb05bd2319ef821e07d34de92a6757ee03d38e5363199f2353846141b0f47ca302119a08110aa22d1c605444600813b9401b55e9361d3d485ce1eccdc80220f3419d2fa341108e04d9a97b7a92c83071f69087c4b09a392f4abf5202696db4cd36832049608225fea2b10c0247465f523864dbd65de87919b0c875b95f56212f3eceb9e1469071b297181e507230dae5626e473da32b4e8c6d7090d8fddd73779df045d00e69b0ab8070530c7b423c5587df1c447931fac1eb5dcccde9e059d27855615b7f74e671bb55de6de8e0cd0435fb81dfa1c7a95ea5e9b0969eec55ab782f9081df74449057425a9d9a6fd21fc33fe84af5dfe90dcc53d32c34a6429bd7c3925848bd58c5e8f9f80a36a06074cf800151304f7bc3fce03a3d554ebbac1f3388f47a62b2e716c341bb0b328c0acd486a52b4054378e745f1e22ee4ccaea5f2cfa8798df9d2de1eb4deea263aabbe9687b288807e437f233368e8e2caa6f784baef05e9e8bc866511407a5e0b7f3fbac4548a87f30b9f0eba21f5d52950ee6627d203aa24d954fa6a475ad95b3cb6625ceeab4100d3aedfb4a41e47f99cc61d3ca2cab2f3f7c4d052796dc60416b561e8f612d6fdd142d108f6d5c46b5bb426aaac28ab19002a62f000da96fff30220266d9e47afeca7615ef6a237e1ed3a3cad9211f99305950cf595d66be14bf4532c7f41e8e1eb9883b5e3292f48c7674dd365cf75c37a88dc998080a9b6917bff79dc77ddfb9cf56663da8775b263249ac5f53bf63a92d888033f3cb759bfb19651acb6f71ff9080f804b1bf245049993b11ee6c04634b5af4daa3d523f0f692a9139e7061e085c0758d0778c68e95a03eed919108f1c62f9ef7bc4b177faed6e20d422c74c3ba38eeaa01bfc27e9d17a39e9d91f61d73c3010e01dfa66b1caf2564b8368fcb629d16d8a0a80a6c408cb97a28525fc07b9f9b963792d21aef65aefeae13f791b68aa0e0a575d1243f6941b066dc2b27a955c408a921b5cb056eaa5b73007d7b274c4f56d3e5edeac7d954b8515bbb39b5dd2e0f34f382e88eaeef9553f0b67bf173735964a789a2c125edb8aee18e08fabc1cb28d538e73671b83533df3901345a1b04a7d5056ee7dd034323a3a78ebdf1de4794cd1ac836eb34244b10a5be70938e4001c492923dead9e9a8b903cd1a0f03f12ce4e6f82779850d977266f46cbc4e6162ee0662ea3bf5ffbd33cdac1f80c4c3274a9ec7b5702c3ea157c14ebbb2641d59055645a14e6a034c73d734b626f206023ad947d2e4f5aa5f290834adf2a233bab333c00f54c903fa44066b8f7ecc0025956cd3fc8d895af154073d408029fdb38613716893592daa7396cbfcb03e8a6331e3158e3ae5992dbdcf31be38ed14c05a5300f5e0be2c46fb81423912981382c8a814f78adce52f0315f5147e71abbd90753a28605f5fdce923ee5e76a9bdc3ddffa88d2f1b77f7848820568db38938f88b6f5561fd025174268e12babaef24843949b87303df5f7902fd14a31ba832f787b89046efb1e5fa57aa89337fdba25fd14df4bc8c06f41b3938b165beb5da7360efc2ae5cbd854490e29dcaf4a59b56085c1a04b44995a5d0581a82d564ff0a6fab178de63fa4ed346276166b28315f4404b5b13177c9d8707f2ab63cd3cbf57920a3a158f5062e0685eeefb1fff2b34774e8bb883ce572fc5bc167387c2e57584d8f495aa327092043bc86a185ee61b637ae8f5d246a04352fff3ea13c940c448e477a43c348400be94c9f8a37052766a201ccb7b56d0ac4d974b859e9370827b7723ee5bbddca3798272aea097088dd3c3811c9d33a268093f9b8ae837744a1ab2f49185fd404f876dfafdd5e8a3ee944e8d817f45e092c34f6b02016e72382c5a01c4cd55b0a4feb231008fbc052cd2aa815b5ae7bf0df65254b3b6f73ac50c1a04f5b39094f39f34e2100968fa706ea19ecca1cc1a3a6fe569ba026a1d4724cc80ba8090104bc56aced8e1aface8882dfd038a0f5564b5845bb5a59872958b4f99eb1d2cec99c14b131cfd52d6853081dff1a1de5544b7b109fcd6476fdce427b09cdcd5f94854674992975fe5eed9a578414a2ff266988b6a4a7dabb9fbedde40f0cbcf2fcfd38650982e5cfb7e12a668e92b14fbfa15bda22b16997052ebf45f875654543472b1415c2b51d916dbdb4378c8bf9d879cbbc39a486c22ffb9dd3395a9bea19fc274d889aa686bf59ac7d25f396fc243e93b58aa07ca192b997322308f74afc6d9b47b6b6bdf6374733aa56ad40446e1222b7eac2ed52275b95fe0cfce7f2857595d8ec0f74a06e100d124524565e8d33b678805eb29d07753fd0187d8d23b80adca7ce54e1b026636b409650097b1f0f8c21e94582804556acbad944383efefadece8505b8e0a916fb960e4159182f3fb0e07a0f8e4221e7db9e17e046181d7486ffc605b6c89fdd6c838d15f8a58c2f2c9de12b5c815454e13b2b44df76691dcc01a1b904b1e6853c6ac769843e431c32d208a5536f7c1e1008050411102be4bbffbe645c081ebe8c3fd30375185cfb63870e6a116c82380e88cad08e25c783653717ecbb3a44e7413eda4172d73515e78891dbfdc1e605b680bdc0cf24c606a978e114e3a031747e6b1f3e4e5b951c114e05a61601db04dd229ad5b9a9710ff6100b19274373d4a2b8e3583043d2c1915c58f7a7a1cf098102093cf2c5e0790951455f90ff5092308584f754a72e1de098eba83835f27f37f5175bba3f0a87c95195519193c3d28b0d7ea0658b001d7508caf06b835beb32ef61e487e18c5434c8774875a74b41fab04c40ee49366a48302f8005c475e6777f712987afc016c1ba5e0b8cde24acd2582ffc5e5ebaf42d81f8fb5688cf008450496cd04a88118007aeff5006e99c604a78cc6a9581389e0b1b462603c8684cca44988a04678bc947e03480b8fb1741e3503a75793256bc02e8a4741ca4757130f837da4adebd41dc6efd33057a830ccb8675afd529214939d4527bdda10f96ae731cfff79051bd94dccd170c0c024bd4572da8689db741342d1bea1f239f020052388efdcd8bffbd78b299325d522ba9c7836a3a5bbb1068fbe207653b28d9675d94c20966eafd47a133a6f9b02af5d6d69f891122ed2bd9ee764d6423900260da2fc77649733dc0f4405cb504511bd868e29a2bb1c1dfa652f31e05bf714fa063db4769ae428d8c5e10c51d18e209edf4e67c7252b3748f5bae0388886d7923f3c856bf560ed8d6c8409d07b958333787a3adabf8659321d67796c67bf80c86f5cd97f0c7c85e568b32260c31feff6148ec86ee57da30eb55ee2b460edf5ee560e92d292c036afa7c40e7f3ae0078f84c1ba45a0cd10f363fd4cd07dd33fb2229af42a7656f33ce40d4e3adac1d6b56348a7c40162f3d49f3cd1f8faca172ffa0f31654cfad1b46c00f11945b8e9a72b8654e642d64bd3838fa6fae68554e51688f637a6df00e663e64188f980a8ada922cd7387c3772e90ac5f4fefbaa4661616c4a0d24946d4271f07cc6c7a91be5800dc0081243c34691b30e995c9609b31836310f760222be07ac64f24de6a093c52f084644be853e8500d3cc1e658adc8ccd418925492fa0802b718af0b52f02cabb6ebc4bd0bb7c6245c9712a6095e02b8a48071502f7de22d0b44e2a467f387dfae7609d8f798017dee214444ab97cfe965a81b510a8158e0848677d91dfcb395aa358f02361676342176c6477e85a499c56fbaa69fa89c12991842093b6e78f8fb08b470df453da2850f596089f972480b8b6df1aa80c06a7f7841b5aa514c86be5fca292458dd701d31dd583901e47d2e222654c3b00e6c44774187966581201b7fd3985c4adf130eaedd1a327a915d1db73eb48505b2a8d80264709877050aa6251e92c56784d13d459ab5a15a87d5fd57f06e00a6be09c0a2208d123e484003d4fcceaa428ae9a54e7ca3edc32d61ed8417d1000c58e2ec0585d91b1716edca9408a48843bb8ddc371ea4051c8dccae0cf23b1fd89650e9e407f8c8192adc390b01625c0a85b133cb2d3b64b17d8def6808419f1e0cc54c22d153439a73fb96f1c6068a24bcb21a9a7c1776a19eb5ceed575eb74e5b0da61f45c22ef020948a285c8cac26d89f02a95e594b2106dc911576d19816ec2f87ce4113fc229adfa5155e5cdf55147e2082215d560ffd18e46f9cd4bfd80c2c58f867e1a58cf35a50fbe8695c473129029d79fb8e4ed0e6d079a9ca4eabe482122e7968790140f506cc672c22abbd28c0c9056834474ff109525facff911fc8c0f907daf62ded49c2c26e5dfe40601fd03d456b4f83895212e7aeb73b9539956e834feccd8f268f84933cdeddf778a94d2e4c92cfd2a68a7d1f0b0bed6e632cc7aad5e5b5003dc82b7fb4fb08b784aded5be39ac4312fcb1b408f81793964580ef363e02d071f0a1e14209edb16c318409bd46a7937b19c36041b890a661c3192107bc19456d2ab6127d04fb0c4df68fb3ce1d563605042fd887436983d2b5c9e9dbb5ed2a7850327fbaa93b3adc679a1a0fb562fb4346dcd67f727b3e2fd468a977fceb05c584cf415db8c675fac87da401267f55def86d25e7bbe1f1858759c9700914e9139069bbfad87d654924529c7c28912f0673d282689dc2d7e7de9dbe8ac7cefea3bd9387f9353a5c493aa3532de2c162ed35c6c6407167a758038e298a91f2980787599afc6b37664d1c14fa1c6d6a61cea642cb0df6e9264ffefc4626921414a899ee45c960fe1db61f07f0fb531d974947d4f7e34a997b3b7f007aa318b931b421ca5b085213a1dc040517eb1cdd6e90a8fa1eaa36b1c9b718b4c6c761022b826980e7ab75b68ea31fce096b72d926c3f0fa00d2833c4c67e6b8fbe88f885b0f8b106cbfc62a155229d4fb42a8e20155feee6d48819929482f62679e66a0640099d840da2c9c6e0357f8e5a2c0c87886cb0d841b93608850c39c9411c955a7cf4919a451350c1d93e2d3c188111920b6f01701d3ce44274b47cf5e7c6a1b08d5cbf44bd3c7cd325e8906b6c3b63885dc3e4714e206e26179de4837ffb6e7439bd4b8f51523cfac1571ae12d127306307085c36be450bc314e140590bfc4da29130c5af9869888147cf7154fba05b07d688d52e0eee8b385eab9cd00f783879b4cb17ae2355cce4f6b2bef2faa69830cb59e9ac23e51dd971bc3355bc7638a08ab4ef48a03977d0a31ff57a5f68c7aab7729d6cee453ef5b8eea31d2bf597e9d34b6e53d2f8058d8e6cc05dbcf4f8bacf72963a45c64f8076f616e38cc810dcec17a3145f864e23b99942e367346a6442b891e64e98496479686a3849f378226d9d5a09007cecbf9c7ffcb15d1daf4009f75f5ccac16901bdf1ccb2a84da41956f66559e1dc005a9b96e41593e1a13374e7b08c59791e32f2322ca75a81bed3f4a2fdf2298d85cc8e3e03c2c79e61bab4546769bcf46150e1a96c58eb0a4ba04db4fecd2ac8028da3f6353f7b354bb327524f159d2bea2c7524ad1e23f94c900575aad01f442fa0a658a345c433696a6f019c3faf17eded101b8ea3c5880c721a474e083e5460b34cd9365d30382c8328241ce3229b3f8aa85cb503073b1172636945c53b196a60a53243b839aa8a446568b72dd78f14dba44f477254e9b671da5a5c01bc77363b560177f205a0939c6ac47d7248e428b69c26c602b9983bd34f402352ede3a2d7c6dc1bf3e0d2a76a47e6391eea536b4d53a3dfe91f7b5156515662b14833a489306b52364bd7e02ed17039c80e0d597aebfd4ff19c1b3aa59bed836578199cc60333dc87aa653bad7a886d87d77f888ceefa8f171bc40223f3b59e90db2259a58cfee3d8cc6eb418a4a2003d5ca5f6ea81bd643d24d1d572c32f6e28e9c58b176e7f95e0b4bbf5a42c8f4f0ba585e115c1fa9a33605c1f4dbe3937073214a575b95d348ea2ce5902d49ca1a5f8107df8e553c90dabca8942eed02dcfabef6916d28474cb97d13d364290424503c86438c35d653db0338c34d91abc83412677f387c8794937407fd290e5ba4fa38568ccfcf1c4a481622647def4648f7bbe13a591760cefdb312f864d6ba97900e371ac336aa9d6c23b1728b31bd2e9caa0071e5fa84bf465fea818d8a21df8e636e453f6a738e83a6f612444e8e3f0988a27c5da7a2b4d6b968b3920f9681005e84f2c02574c779d9474dddddea3990e75422e365240e1665f95d94181a83944cf9ca544d7855b428191e295c8560dbdb066a0b33ae7b20f87965a9d330a88883388e505139f26127b01621562dd69827d52c0a1e34d148bf1effe44e73c02508cfcb84fee481dac937450ef33736405ebea7f581f259686853165de028adfe5d9f988b78bab2a4ab4cdc96709fd78f528d3e141adc44af3197da980f1bf58f6a1f9d4630b20328161d9d632cc6ec8c23dd9cfab54d9b1924ff68c2f02c6efecc86378f8102e97a2379c65c6faf5318a5a4d46f177f8346f535cc7a7c591a926020670a6cf890bad05bb601c573ad93b9701bce6e6fc7b52c37ef577ca519034f1509f9b57ca972927370279377878205f7303714278b056568a4413843bd2e4f5180d568d956b5d08f6988370b1367ce508232347cbeff12982ce0e679408986771180303fcc21aef8b3ebd64cf0be65d3a03d68f90fac4053b0bb792f6ad665c915732f0ce4d066d1fc864c89c293e0b4ae185d0a62e0ad87022cec794be21a8e085dc17f295308512c554df59cb2d7435b47d8fd236b3cf3c8f6e73642bbccf85f5ad61b569455672eda77722d56614db21f154fb1bdb106cc836d4b379c60e12d0215a908095d0aa0cdc0af4992e10f1141048a4c29ad869fb881f9d0f683f135b58a8d3bac7ed3295959f75d91c52ffb71f315b6d4929e4b4b258b0815f0db4d988eb93480e954a909c9e070da67b846e40d248174dae1eb4f2ad2fa990568840a4dd4534eb972522171bb82aed848be7d1bc20cfb8112888530b19984ef946522365eada163b7c7bea5ba81ea8ff2b55cbf5d96b7a42638f732da19c29af1e81f9850eb7f3d6c5c05bb3688cd9750e683996333822aa88c100837309653675f89ea82e9f7c7c360b43d3a7a7899c688c5b346094413af853509e219cdf19a2b74c77fd6aba8e353f06ca56e1314eafc9fa8898cdcf1197c3d216cac3e9119cfd16073f359e3f66392e7c1b8f6d683b72ff9c7848379721e7ae90c911f6e7dfdf4f13357cbcc25d6b835d470c14b70636d061e9674668d483c2ddd908178aa67a49c5f99edca0af19801f72bfd8a5c90ad32b9d05518ec9bd1526eba7d2cbbf10e237bd02c8fb5dc403dd0e0c31b938bf14344ef02fdc9888027d38186a5acec0a32e1753fe08b27432df229752bae45f09460f288758d51ef7aaeaccc989f77bca2bbd4a2ca3eaa9afda382e41395b1ff80b8baf9dd99d1e24ad058ca5d26ded8c8ed2b5c24bda07bfab6653abc9f002c4f501a588f9e102f404d3a18aed8c27799643ce0c098248a2a8000f8b51dc53930cd4d765ef70dd8ed91f442ec0a0a50484037cbb00d38d520c3de3e2d039d89dc03317ee883dabc5059874433c533723053380c8deac53d8c33a78b1cd16f3595e8c87074c7f3b36cdb8f860cebb9ec5a0853c2a6d565c48e86ea0e64246969325ff89c65f8ec11828a44b4058f30e7153aa7de26de066de932da7a7a824a3b19deb3ad9bcd8aba3bddf98559ad3f441f36c85b4076a999c51f2ba01b9d32ec1f562dc81d58c69fadc254769ba8874e5f643f36225224762976e7f8e342759feed5adcf9938f3ea4eec0cda91e4765a08d5c7ae17646d2b9f1c9ec5be6e34e7ec00595ca3f4177dcf835203671a361db9fea0b7812ddd9dca85cd3ccc2393813cc38d6b93c6f2c48ada8e3c731b1ea808d88f09edecac7e6e351bbf3fc4ff67e08956074b1b3f9a855bcf6d5570b91e91c870e20c64a8f052389140e39d376fa3160ea44a54087c4bc1929ef14fe6beefc98cdeca810a546d1c9b1aa5035fb2787ab6128fa3837a338192f7287282afe3ea8a6c5bdfc63ff646d8ac4749be4568888a27614a841fc825eecc5eed2521cf44e3a5a90201d132e3c6da88472c4afc053bd49b1adb5ae4ac765cca6443d751eab9593b42e7f2985d24009e2d1699ad6b61cb22e001b6d5ed836ec67bf1ca327e3587850ec6e6ff7e772dd77be18a0551a99c9c7c1d2ef8c6d820d2d41b7296270062404f36b80fcde4af7e5a252b8e3b017a4366605ab809dd7ef83fa7b2b2347c9553e39062698b10b259c11d8b2a6be1c41605cdb4d4a77633946b6d4afd11f1594b43baf378a610dbffe71a6a5fff10528964eb7f0c7762d8aeef60686bb4834664287e82adcd34c00c45ea150649a0e0a596ad24f08dee405b44646f98716203c94c3a9f29a4ac726e6b39c2efd7d9525afc006a59d8ee5335676c4d53dada48dadd263bf697515eb86b85dcc8f8330514b6498f8f37e006babe41e06bdc388c6dde8fb3f1f9148e11707a3facb812aa684fa2979ab255512569671591c66e2135cf108e7b232b6e01447799b6002d4092df41f169b8b36a7399f650aaa89129caab107490dd09910280cbf8a9bf8c016b74a63b0cb38a1d14f25a52c4b311fecd6444da3b5014a3826bf0f2ab47ec7bc0aa2152bcaa782c2a50ab4e766c762ca2b00ed0d6475dade5791bd92deac70b2384cfa24ed61800fbf8ac372b77661bc7c18e21f060388c1650454584cbb941c78c680908338565fcbb1b62dd9fedd41a60db6288b761d1f3cf3e4d3fe015f66ef5822900560b6c5e3471ee3f4380358f8b98017129befb15c869fe8873accf303f38e82e6337106be938ce61fc1f38087a59d8939d54a2600a1299b6b1ee3a83d0fac96f88277f913e93934672c8afeabadd505f457d9cebd3ee31ae072c92833d5357a30048991e9d95201194e8f4baefcef433d9632162190ad476885bc1bad72cff707547105a5832d6d284120b46e619845226e8d3bba6b3a137743fbeb48653157590b6bbe1627b6e8e8e2037f65ba9795a10c7b0f3a5b8e66c4db2275b8c556b76009a0d46709e0ba107f8b231b7659f083eab100dc5b510577c9854c3057d75407f510aee2a181d6caf0bf0d20ecbf80b06e5a437e79c7dbda02095befe0290fb9805a6856cc0b43f35c75f962b27aa2b047ba6dc6a14b58400520b733fe96cdf9206cd8a2a843af442a55e522428c1afd78be8455ac99a28067f73a9eb51b3f89b8e36742dde9f38591f457e8a96cfecf7f377fb1627966d8755a531d77ed254ab2897bc5940b8196699c756ada40381d40bd612e58e97990dc0fbc5a7c85bf9f83c378b3d4c6d9705bec1b29a0b668da53ab0614ee84cc4034000dfba9e42e0584bbb80afa28167cf4e217942600377e002d116a24fd66eb1f783c01a7e6caada11072c941f438111256b92f5cf194c4303502cfdadba7226206ab2c22a7640d9e4bc0540b58ae9f175a502c5e55af869a8bb41d39b8c8fa3a73634c4f2fba5db491a7d57083804d2f6b18ff5acc391674f3364b7853b30fb6ca13a188740fbaf5438d647786708e3cb2ba5d6050f35049d3bbfd6d988408686b059d651a950c687969ceb13c0857513d6a50514925c82c6ab5d296c77acdc8b829bd90b8f9ce74dd3652f4c91577b88cb14c94906df9c49d95e216b937ef20626702c5a397016445676ae701d8ad1997c006ed4c79e1b21ebb758bb16f02a37d838a3ca3acede555d0d32e1035859edf38d2aa4872d6634595de2ba4c38e30fcfbd9d518d9b76a670b8f1f3adb0ef577687e9f9d9e9eef9e0bbd9b9c1edb62d027c4de2d8f163160dc8320e5300b5d4bc293b43d6c67160e839a54c08a07f796fd025b63b96bf8e1cbf057c5c232f1e4059794c382b83436782d3a0ba00dc43cd8e639c2c41d0e40a66f434037f7552687d987f8374c9e61bbec8d7b487d6c498b1c2d66c052191fd6c7fa6b9700e714160cfa50e6d72039994cd08411a431cf15e420a5107ce23a2f32b79dde8f23b660e0c81f25db8957a0c6bfa72d5aec4d48ca4caecd896889a9adbe63a4a7bac2751c0c189ec1e70add7f59054e97be801bed8874be910a228313dc26d1ae3bb00f14834efd460515a100b5624300ed25dad5076fb8e87b6266ebd95da60807c32f6b42109470cc9a08cac39f59139fdcd726f2b417835c9dd22f63bf36b01cd924e832b403830a4000159ef3292090b4bc4b0b7d603e3182141c64036164cae06c1894e6ae75987ffc2ed4cce95f1a582631606960b62122d4f2f41844c4da3eeb746f81d00596b61f0c8163de4e8722f03ae8ce61ef3d0f02d09ea88199ccbcd8d3970acf2bc261656a8e9ebe5a1f70006b4d7fe2a522b828d6e90f6b2c188f0b64c2319abe1cf5d5f1106c10737e22404dc08c7a817c07ddf3e0e9ba6a60d04c0a8ad9a4eeb0cc670182a91d906b4ba711002aa288b37276b8bf0e61e1bbe2ac09e0d6615fa20541cf6cf33badbbe4617b56d0b4bb7520ee9ce3a90e113f1eb04c46df2109cdf96f126604528e47d18b445617a45733d7ad5c16937e7c22a9995ad9be3e9fd695fccc065754106d54b1a9f53610d6bc0c5b58e5ded1b6b2c16fbe723010b6f763c67e29c74b7dc195ab63c59fa72ae1f227927129df4b8b208e8a63badb69bf06079c6e9d106032cda4dfcf6ed725c52ad5744c469c5f1a782fb28ec0fdd0d299eba07ee6e2648a4d667c9a7528fa76ce2196955b780aab40eece227b12472de6344d9fc399b2de648c1c31d636446a79b42b61e76f33a7c014278d308532176135aa8763cb3179fe378492c66f09c4a0b5b5acacf0ecd1faa84a8768147f4056570c336a91881ba9521447f2f972a9adfeda40a55b055722454d2eef0718b6975d8dd88f4417e1abb897562e758648c25f832556188553181354006d3713dfdfa71b8e71f80a1589046a3e51c4e45f1a37e6041963dc4be8def493f1acf7054da4abbe1ddeea44fddf5866aa25d6c0338fc3ec48978bc826aed5a99dd9225692f26aa2b99cb50910641314a056a8564042c43a4def79c0729d99bde64128470668d5be101d6468589e6c2af9aa0d386598e40130a9133399460bfb94480dba437f7e312fd22b12f3b018186d30f3a8333184ad0cf24754b2a78d631e6a123bca01790754afae1fbc7ed273560b0ea9707f30d1f758015e5a4a8cae491bdb8e0c13a9a1a2cbbe04d5a36c587150df84310e1f25a6f9b67e259cc9290c79801e4368201c90572e0db7fb4a868cf2f7269b9e0dd32bb50306cb70679eaff174bc1c22385c04d04003a6e3073a24cb568e48ed7fb06d187656582b58866dabd8b4eb3ade61ba5d36ae1f4a8e612dda5a12537dd1b693b224f1e28b30cdcbc6b57511b62aa1aed88f412beb28ab76be95881025903bf57fdd5e8bbc121e0f105e288a10b7b0d9dbc5d481200b370f08e9cabb70876f1803dc7786b131d50fafeacc2d0b96d5efc03362b10002ca4b55d135262480b0c17bb0e05fc09a483be402f07822d9c265fb9f6f3e309e51de85b2523c39eaff9c390dc045000dcd807b821e68e939f4645e0bca6bd7b956c130d67133d975381aa09c10470ef32ae0e5083eeb65bb970c43d06b9f40c17596daea9ea970ef830bf9833bd28c46a6c48533314446681bb7f66894239ad1c6b1b6bdf4190e63e50c9965d301e7fad6a2c7d089157356dd31ca06194a52ff9238bbe59f3c12bf213ca67fa927ea79d6e8d3481086404517d8ca51dab90a273af07bdef2ea1a66d4070adbe743f7c7cdd578e6d1c3b2d4c1db647e6a5e75d08f0019ef4025c04ef993a8c2c4938c51261146bc9fb491f6324f451d10dcbb8b8483d13a143fd25b29822cbed5a44ca2cd6a04293162365d9933a5f5cc6ca64015e61413a5968ee0c46d8883f5b6135aa0c4189d9f69a6f647ffcbcefd8a73695c5a921dc1acf7117ce0183695a2ae1321994fcd8a05139000eaaa22fb82366c4098ed7e20f6bf80aa8bdaac0a7502d0348379f7a2b3c1e09577e780bb2e9fe55e1fd26f97eac3f209df3d5d24468dc5b1f838f1e867664dcae621068b3ce6348af1a4cac759ce290732c032c730cefbf8c9946d1c8c479b6b612e5cec82046024cd97779c31717a6e02644600efb5aa01fd2eec787018ef8ad3580403ad9e7312fcd7bf508f39bd8a38f83bd47c445fb49cd634de1cddc172f842d520e5690dc66925b5d02523d98a587d85337f8dd2abe5eea246d6a6b68c8a0ec5de7c5484bb20748368fdcc6edf3f244baf6e4ef6261dd72cae7319919caf14d633dccf3dc91a37784cf7c5ff6b67c8e2d871b3dba425f90729d637e9d62aad322ea9bd0801f4163d89bc2a90917f9fde690a1aa2a04b64f430a6cd74ce161675302ef2169ca1d8ec88a6d9f4934a46b707166f0daf135c94beb5cddf69dab4528cecd8b324b52a0bf455ea91ea27ee8ce8343f16ad6ad67e2e7c606ba919674cc0ab7b6b2b3e536d6ccfa1a3d0bad1f0b850b5ee59c4feae193566e3caaac3437743f97d0727cb09633ac489e013a2de5b2a370d1a6df08399e957e8f1f104b391ce89b9c017139cc1cd8984ef867fe4007ddb60135afbfdc4a759957b288182f37a32dba5d0cbd474559a7fb5191270e72991501fa30d3dd9c04d8eb64f84f61a6935ad9d37a7f98a78399bc68d7904e0c0744fc20b85fbce5d5f1dea4d403f47afb4fa76bfc2f91f75308f4d2da159155f1f29709b5c95bfbaddeefeb4fb6933b86b0d504efe7c6d713f0c60a3a3880560564adcfe5a04947db14400d1d105fcad33ecc14571e508cae7f7f50bf3ca804d350097bc912251cc07c8482440ffeb04aac9bc60fef03305a20cf3c1207f05f521013962033caf2e8c9be35d1e735f80a97a5213724a26ce002f8b7b06b5809cf0b8b8a6695fec2120eb504349791f46e2cc22c79b2d9585405c503298f05f2589fe43a17e4a094ed9831cd0416a8557935462ad488c0a900842c0a71e7b837fed05b4fae9f09fd1c3695f687fa137f6e1f16eca4f63d14913532b83181469dc1322c6470b9c425081fe078896ad1794c0c3568ac54ed016807f3bbd3c2894c5b4f882f72e3088c88bcdbffa3e3cfa17bb703b1f3ed08ca50623688f6656c13bde48d71d99acedb7080be29b85552668d67125c7bf62d681150b43cbdc208daf4501329605e105d8c99e42f8e57eab8c91f9062d5bb65611d54b2601347e3c1710a561e327b961cedee0d4872bf2d93af800d9c5bb5260ba4fcae233302b784386415ce10dba59125580a5fad5fef3916fe86fee89894b2a192cd737a6f07f957a51aae2f72ae74ffa41494977e87a0a6518f443e94ee4ac80ae4c87f0edb1fab8fe99986d22881260f705cf57df3a66d524a244bbed3b7102041cf8e38a92f4e310ac671a841bdbd4fa6fe606600f82389b9f38e082272c79bb77c39c2ad530caf94fc3d6277170faa311704a42c0f8675e4ced643b3aace3bf727ce93b252142b81dfd3f37f22a546190d95797db0096a309109a05bc33597407c8e5ef1673d02cb9ca6c5cd661a75916fdc70007ccff83f4c6827d8126d479ba221d11abc5f7358b8786b90f1fb24086b60690c830d9dfa698c5780f4ad263ea23e98d20c0cbee50321476f0fe5377c22b9f0f00f02c7f92d13fd664b7cf7c4f287945fe20c074f7b2ec83ad8f312b17e4cc85393fac7cfada812947f1ebb63d4457353a018f3d33e49e33523f80c482929df4eb9b27654c612130c221ff57447ffc3c9c363714db9830d7afcad1035f7b1f22941f14f7e7f7ac23e7f9353da5bbf2d001a4f6c3bcfe53d71238e2e16ae2ec1dae29dc71ef10790d7d6295b15ba5c36434e756b5e91dae4efd6846525cb3b9a9c433bd8cf0191fc7acb373ed1dccc704737b926162b5be35c52cfdedc3e34bf4abcf757f9f14234913ca6115d7f28c24944d3424b6d09328513148fc22335a2660afaa15ac65ec8daf35ca0c1c6a5d3a287d76a29d9ed22cf90a09b86f35a54be369b4acfea7c71c4034862278face8431d374c79ccaac0846d02d29f9f499dc06cfd92ed4674da5c02f751ee0b81698a8aaf5b91c0489b8399519b4096fe29ef776513a4c0c61c4a58982fcb347b810267761df0462909cb8946992e0f87a105b25c0ae92ac12bedd18fe110a841395a2a3003e67a62c45e22311acc6cbbd4036b1f49e9ffb6de79f9fdd891e05526fb02a698adc2e032310c5c727e19b199211fd6f805959faa2865cb956f17da84b93aa3597c86be39d5e7df47b0ba561ef2a9c4d4e842d62183d9af30c066599c1ce574e2d76eb14bd5456c425c7622d7ec948afc690288fdedaf13d4c2d05f439087e4f8a797520819b3f98bd4e58dfcd3d17b28b63481ce5c8ed37196453835c7b6c279e692b15a44beaa52c2036bcc29521c85c11a12c81710170c2dcc9d7c786fc0682212e6491aba60160b5626b9feca6c40b79a5715cd94d2f8429ee1a01c94640ed5661c611e30bcfc2697400c6f6f5a61c8df7cd53b8ce41f8ffbb165685dd600f43118dce72854289299a836f377f73d70a76a01f8b7bdeaff008dc2590b3dce396396551e940d73f1a2d979ba76275bccbc9e9b4ae0bca87e5e6a196c13f44e62bc1407a0872e978e0e13f4787a5b8398431d0981b245ac64f33e2b36bffa7cc6601a3ab081055809da2a1e0c30f41de16f2bd0688b6407bd6623077b6693484aa77ee96adec52c51dc6e4bde47b4d33bb5fb6c28a14d26c56935461c11c8e7cd537664c3f184cfc89a8157f90b3649d8625a3c32399e34fccbf6fae599621a9fa9b67a90d365ef0b6fd45d5a13a6f0aaaa47a08306a1b7e38a7c9762d3a2529b6e1a63301255858a5c36c6564b880c0afcb94ece73b93b793517702aa9250472dfe4f5930181db36532b80bccc3567a4f5b9a06dddd8475d8bd3df0e98b9412a3c0361127f77068ab6a7c4b875da8888f3dc9408db460549214b9b7118e9401c0edb677d292e602f2e625a0ee19865b71db56d5d7f6419d60ece0244ab88e9e32c8421b57e17cbac0f84888579fd85a940812a61085024fb3f096c6f400298cd6057359d47e28990723c0ae2f439bf2a2452da5f1702bf639f483169b85196406e447e9fd260a34610948c35c6e4d200fcdc9e998b36b6e106b5c15cb7c341b4e38bf772ce5652b15c44ea62b12657e9a2f4d0d27223049690a6063452c027e1a47a1c03dd2f7a7f0fc216089f8536a938cb79ed411a6c6cd2ef976c972959fe82cfce8b39aa40689545135147ead04435d1b915c2d18dbe2350cb6ad3ba33c5fe2d83a31d00011d50ea1875c034e6606f1854467597f901c0749b280d2c14d6264928b5133d6172e9f82d5a99998074e57177d74d3d0ea8190e67c626217c613d22fe4c657fe483094427657bb9ad7d0b2889d3c8a44001b0f3706f93521fc0b713e4726f134102504f099f533000cebe1ce8482204d4ca6035a53c3ab551040ec381decebc8915871f130cee2040457b8781b21a390908a0e8bd407d0f1d01264c000c241ff104ed7e96fd5f70ce1ba87f1b3c158d2a7829396703e8dfcc831fadbe88dd40e41754144765bdb7b4b99529201ab0a5a0aa20a4728bb749be977c2c042e6a3503b765cf992572b053007e1a1360b01691c45277170788000b946748ca965b45aaf214694ac9162b46e619092a4d293864999ad6159adabd57fabf57a5d19f36fb9cbb1d451a66901c78529039021b1e9d5a0eb3fba901807395924edf26724564991a1caa41c61fc71fb57d2a73fc642a47cf57b532eacb2e7a5830497dfdfb39ded57c3fe87ffd5b06690c6cd680caad7eb873687a8752f17bbb00430afa414a448303c2589690dcf788856c2cb880453b5a8a3047327207bfc3fa63aca2430a3042305151a26e7fb4f6069c810225d5763282df96ad8d7e9fd9c73a2e097fb1f15785056ca9687fa9f86a1c2f1c9e5bcf0d52d4fd22dffe9962369fa3ea59e8f83738d7c546a4701a42567f8b2a79fe78cfb79aedf8f45e9eceeeeeeeeeea693bb18b5faf2fbc7b2dbe60a279b6bbfed310e5e301193d209a4e5fdb8924dcbb2d57fb254bafabdd4ed1e97655784db5bb9d8326fba11235f5459a5c804072d8068638c3562d440267f254515ce94b1a161441633cc90c99752be27e54b12765cf9458c1501cc66cd4c98d3cccc1a62acecf851e68c0e694409c256832ac5e88aa42125c4e0a0bd2de8accc1a4a6670d8c26392d2dd2de718a3450fce5892a34b16576438a2882ae6c081e88aee0d8ec6544607a4324abcd1793f02b92e8f8c245161851662728d3c924ad28c7374c6388721312446d0d4f937d4c6d7e590e7a77baf1e4823e24c9a3b56fe6ae6f2f552565c3c70238c298cd2e8e0091d293ae87046064a789122e39f1e48a6825dc400c90c1152a68c21e36fb99823830e6e20c49834d6c02093685c91c586227ad0061318311da04069030621c8a041f6c2d2ef8eba23ceddc141f89de90ccdc958999189c2c71d3740b9bbef2880183130e24c1c60e090b10d6e1c9d210311574819c289cf93a3bbdbbbbbbb794c517fecee6eefee97dd27e40835770e9fec27ae84b3bb33d14b9d85afe1c1b7acb1c34ad6128c205963e8ababff98b8e09a8a0484d2ed977ce7490c19e44ef87ac882ece93f6151471673fb590c2775bfb7a45bfc4a6bc034a8c2e12bbda801468d326eea4a2f6a88b999c15121592cd18fc342f8f22f711147baf819a759a9c795543441bb53c711a5da955fba308345558d9fc72fbf9159d7f8c78bda1d3f60e69fde4b1ac65fba30e3f2e5ef40c318e9f2afd030e9a50cedb20dee08b2dffe13fcf6a786e926a3a95964a74aadb7bf5e9e6ef1778b71bac54afc92dfa3484c15ba1377b2a28c7fc7a550a02864e0facdf3e6770f76cb3df4cab8b3cfa74c260cbe7e06d230faaba5aa94448a49dcd5bf3a7add5e314f55657d49f1054ab13a675d68218b3afb651229915eafd78bcaba5afd92197d01cfc013e5bad979a0aafba5a7ea16b77854155c4d9e4dd6426671e5983077944db75fb7b140430b29a0ac310796236467cc31668e199ad28c918d12e9033338624a0d6cc481c60cb2512eb1200a2eacc0c18926bce8221b25131a346edff6a29fc81ab77f49c3a417346fdc7e8f67516aeb4a2f686a8046cb8df372e371c11b29bebc492508205855ab57ac13ea414d0d8adb992ade088301512031c41b55a0b8624d126a8d0e6cb078c55e3f2f17c166e2d6b8c1b11520d8e2515570f5fa890d39f115456a700319305b6ca8f283900f6da071e28849cad211b2b1852243cd104c58cc01851c4b4c1c5be18650126da47901531858c21803aac01f577a59fa62690b30cdec2697823fbc1f99fd39c4e9563f93d611a34e90d6d979b35b607be1697ec7cd707cdd34759cdd37d8b0fe5073ce70ec965f387ad23b85402e4f0f4422e4df447569e85db7ac2373f26c76e7cfd05be26b666766549fdc73f9737e37c7d16e7a7e6a1483f33f97dced11d1456e78992e7a86a31cc801c265af3c28d74dd6e5df81451d12fec4d2a87ea597252dee286ffc4d43ed2bbd2c85b963ad40dac5a9aac4a99cc5d8bafd1a63098bba8aa14e71c7d664830479c5e597fc1eff8a0a494615f2e88eadcb3d4c01c344e54c125d64e35faffc92dfe35fb92874030d46a421058a97a21d64fce2d7b5a18a981e6850304da9020062664062892ea0f0a20c9974e5db600938d2e022892b3cc8c67aa9b8f293c80a70a586284c692481430d32f912043284cb492b961489b8e8b98b2577dbb9fc1ca6ae709ea761636c15bbdf2dfe1f326a00a207723401c60c9d39685813c618668eb42882b3713cc50e37338066ba265033806656bfc221e29d1c49705c382ffd448c7409abaefbb666cdedeff64d8e196e77f7bf563154697f38fb7a9c15efc8a21229a1617df98d20691857323fdc7e12aef442a676fbbddb5dfdb8625de965698ecb5de96589e98e2b2454141f45aaf26577bbfe5f2745cbe49e5345daa85d4eb9cc54116ad42de78ad008e913dd72caa55b383bd2d4f1b95c9cc69141a922b39b23e3c9ffacd4966a4bb69cd5c7dedff3f3bae5425170b9c1e8c808232acc90f9c75c2c81ca0c9ab8210b520c6e90f9bf7fcb5f070ceaf8d7dfd2a754ec19907e1a2661f4fa23c9729dcb750772ddcb175cee28c15c07c01de5d1759974fd29532e0d1b71a851c3180c5755b5daaa3bf8fbf476da81267d3ee53a29a5678fa8f2393c816c51b4e8d2cbe107b2ad20c8d6bb5f8a296dfed83ffa694edb7d9a6dbb524a297d1e3616a4a1fc2eebc8c8f73452b05bb275e7a5d71e514d683999b75b94b3e1b04f42f7af0c397c3475fc2b2d1255fe2755aaa9d2711b75c118f87e379fe4fea025ad47ab9cc72caafd0e7a437425d1d5c15529a5949f0fdd9bcf4ce5f73a5a7317910d1dea96fc144a7e966ec9e9b66e81ee524a29e58e35957f4717952fd3e6ca9bd369d195cf85e3ea5222e992b0f94954eaf43151d9f33a4abbd2bbf164573dc9ad3c578b9e64cf7bde5465e1eeee27fbee722999c8d0eb160ff56ae579cfe1e87ffd9949180f657425aa0865a3b62bdf93c3f207e0a7c6fda0878ac70e1df5c626057e208070755c0f470e5c9b23d923df87cb37f21dfb1d45fd3bc9ca5dd3ddfd85aefbe7ce922f74a57d3455fe8ba9f2275f7ae995e1a3a9deed76422f1314f8bda282f9a72b534ae66ca6846733d97c57226fb21936614df9fc1cd6a24b8b2e87ac23fcfd1d3eab5fe876287485aed0fdda3e9ada2fa6f6b77733f2651d09477ac7262cd92d197a45177563f10b5d0e4766fb682aff8ba9fc0c127d32483ecb1ef9283ea972307f7477f7e9f9ece49c92c714a3bbbb4f96dcf74495979bfda09aa9d2c255c0794b1cf774cf6b98ff4c82e7b702da854a7747ba73871295dfc17777779f61a53ea7cf39e7f439e70c418fddbf13dcaeabc2a05cca0f0465cac3510548d7d3a8fcb2095774fdc1342da59432f4e4a03ca6a8fc93be37933df3d973f6f7507e36a3d06d11cedca61ae7b828383a5466d2b0861eff0e374e279dfe06e775ec338a8e6bd96ef47f3de79c5f4feee6a6076f61f96085f03c0298407aba6e27e40982426253468e6eff8790a383d37a99112346490a432c2c2931f1100b38a82574ab1f2745c40595fb593f563e5e238c300b30aba813840280dc653ba45b3dc35851e5ff7cde2910a716e0cf3d2b85020b2e7d8e09955254fea1524a4a817ec5545f2da6ca3fb66eff2a45ada8730498ab2a081fa46815aa5411da2345ab707717c159a90b78a48a78f879a9fc3b52b48aaa638a73ced83caad42655845651e773cc26c5b5550f94295bc18c851a13cae7ee923e53d904955da831a75bbecc687c524a29a594524ae933fad2e984839bf48b4b292913a594524a299d73ce49299d73ce19699a387dd9d922cd19a72cb7bbebbe0187ee9e673ee08248094690740718729b24929a363e353d7023063770b8b9d28b9a31d7bbd28b1a3192e89b699feb778fbe7347e83b0be614a2cc5d7c9267a4b52bb5fbcff342a7e9c075006fc73716d285acc441e6cf672f32c843d681ec99e08e190af5943b85ed85e3caeba7ee4ee8b7d09241dd813a6bd4d169de45c2e8900db2357ff4271a66a561a79fefb686656918eae77b9173712319e4fd7ca751a7f1928b42b2f9cce4dcb4a661e04c4ac3523fbf876410dff95fcaf2b5b1728c0cfcd9624d06fae01171a71fe154a46b3e2d023a4df6cc471551e7bb74e729c7cc4badbc3656ca96c89ec997b3cec5baedb38eb29ec5ad74abd6ade93477d9f0c41d6a987791adf9d384be5ee846b267be8e240ed42146f59f2f77cd47923df389f4898dda857c7bb968f3956f2eb292bbe6cfaab49a3661cfdc35df2d7744eda7557177efb8d069dd9a4ed42d35d59dd6e264a586b13cd06977bed7e6bb6dbed3e63b11ad01f179a09494524aa994744a3bbd070cb5634443428a832a7ffcb95e873ca254f94278218757da9bf54ca95f434bdcd53fe42233b18bdff36a65d7d0e5f0d6d95ee2524a1bd4919992682216e24b1ca4bf4b43f6f48fa8eb6580b8fdbec442a8117b1a328836d19fc51dbb5a19ae56435d1b07193b28ba5a5773aeabdda6b76e8aa33b724946dcbe52a9110be1bc904dc8200e0c31b2a79f48eb00a38e5c4dccede76a35af79cd9fc3daed179b4817b3100dc820fc6f48d87c382e33c93497996e4b33d8b852f9df4597f1953fa5973bb2942496c81e7e6a3bc0dfee319d72f0c551e5735a98a50d90b4b481050719ae8041288b145c7439828b2992ba90f1d7150fea4b059fe401afa8f23f1d46d49b0ceacb7df7e36429e13c777167594aba27d55d2c533a64b73a649920a7a8610c4b029e8c2501d49ffe14b6807bd44b59a7ba2d130f594778dc7e1eb7bf99f414358cb93cae5b39450d44b72d0b3c5812005b807af0a5ccb32c0970df7d17b6a07beea54ca652f8be0b594abad3775c6894020af55cc852c2bdf75ef8c47b0e0cbbc85d4a95b3efa89b747ed98913a2fe1d5b7ed16106548421e38b2fb8c8f83bc94521176851069533389cf9a149c6dfb73eea4e88f684e3933ce3f7b1903ae36870fbc4d97a48f674d3205dfd4d83a672fb9997dcd536f783a38e9ccde31049698999188d14427d90419a12b521450a8474f5bf5e0420c0ce0e8b7579dc9197e41775a4479cad8f4890ee1ae9edf6a368de910cb2b9fd9ccd45cad956dfd1e94c1d1d8c1fd3368b5c4c7d7b1cd29b64101c5248921429cdc150c39b1e88db3ba0c2b1da703b9c51ba705c3171e15897a4173a8a883a769a134eb7995af67160fb4b7ac4423cec1ad32b6410875d84ec69909f39d41146ca724adcd2edc96191aefe55a5c9c073a27eb9fd1c169c4d8ddbef2907b4ec0bb92477f5b3e56c9c0e2faaffc848f3a674a7d2adbfd5fa57527a258f9b373a6f7d2bbae39fd8a8a344eae7b250a95c51c8d9baa532a3b29ad66abd120c0d8cde457ae4ae16bfef55b75a77fcdb5d7357bf47c3d1ab331c2b3d72d917f6cd5dbda58e9c8d9b6c384754fe51753fa653d72e3e095451cf977f549f9c73cee9631315116f1abebac531d771848c99ff4bd825d2495cfc808ba42e62d8420d2c73fc9001133f3811440d4eeca0c3883ab6993623835a6429f91e6429016d6e5e0889a5e4fbd4a7c227292119ff8ded2377f19f94aa8d95eec2a2f27f6a2a10cb02c327a9b0be90ecb32c25a927a970f542b24f8b3ad6967d77f18356d4f12ffb904be9560e7ce6b316a5155fc846ef8e3ebb7c479f7259f6f57fb3ed09f2ee54a93797e5ff0549cd95a9136e6eafe9165bf1c56da634ddd466b829f593b828a444165b6c31a58a2b3ec021e34fc145177af061073fe480a54b4dc6443ce4c00a9a33c4c440c66fc4c514a0e1021d9076d085b646c6ffbd515f2e1269f2193132f66dbf7dc1ca32c87b95ce14a1916ef10e95ee4f2111baa89e96b28753b538654e3badf9248f077af5c9a9eb3ccff33cafdbeb3a54e842b798676dd8da60838d1a8fb2a9fbfeba56b2b9f2a88da4db85e3abbd3696eee8446d28b9951e47557a49c3e58e4e246f9a2c35b7d2a29485b94e1baad1bc4ac39806602ebf07e1562ebf0fb5285d478deaa4857afb0d3532083f97cb3335593e4ac18e534538aeeb3a2fb553a59e5e76cbf35227b4463efd37fd84934e0eaa178e2e748bbf5327f4a3bed334ac439e758b9dd6305458e3e0b454f03f1e54d781a576f708b8e932e9c2f18521136e6ea7913dfc5c96cadf371753cf4849b7ff5bbafd2866fad1e40097a5423ef2cf8edef5bc70eca3cbdf597fd0fed816ba2599d4ccae13f1ac610fba90a6e9f23f71228f9bac1313f03d854e506f02ea7e6f02dfd33d51a1db96864d57be872c744b8ee0951e848b2a902e7e289586cb4ce5f24b6717b828d56b4ed474f9553ba8a3135d20dd92cf61a9d28bc0ae5c303775edafddea9518d557ddea06d3549c667e66be60c3383c6551758c51fbe7f7f8a2363f8f276a3f4bb9eeb54b77cd70e4a3cbfe4dde74db6fc0df9d9a9c7b5c8a32995d8745cada9c501fd8b5cd959b1b1bf0439d38cfbb203aff948752f67064beeed27c92679cb7dbff9d7e3aa06536ff71f44a5d2283e8f37760059be750d6a42b5b2eb519c6c18c2b5f0352084fe120fd2c1426931a32b944ba8f6490f7fd3f9c70e8362ad8f36af5ae37858574953bf214dba357c7d5f877645a1fddeeef2a2ca4c17010efabb0d73657eacb94045856c3272fc86ec2497317918b93c85dfd46f78b6e3f188e2bdbedff7ad66ebf7339f2a2f62c6e03c342fc0819a4bfb1c89ebe6383b9fd3d84a8fca3db403e72d1652758dd165657560239c7a561e765eabc81edc5a0e366cfc993bbbb7b227174069e57eb7fabf57ac5623db8481ae50ce54e3abc295b92bdd59ce2743a79d53f06d2eaeeeeb62c5b94e5741b6628b7d84d11758c5dcf81883aca2325e34be62083ac1c238a74817c2531e2ae6e68ccc4c1e1e1010264a6a298f38c5ae5913c8add24de8546dcb5030f7080548303a4716d0c3993ea94636a65a4d1d2d5224ad5e30b97fb727711963d921d0d66660e9bc390228a722b1cd4e93467b37b0a67b7aaaac96d90bd16c08942491e741fb5dcfd7c728f8237bb5c38a99c6dc3852c7b7ea8f5db5996aed3e523a70ea44c5347e8edff4e5ed799e9d93039248684ca397b82b41a4c4ae79c73b628a58b9be7cc976aafef68364433d2b0719564082447f51a49812615494155e58dc84f09ffafc7a999292222c32cadc0c293860d5549e2209678c65398c6445c838dbc25a9f36cf5dce5df3978a68e122949094ac4d7ab05a428cbbc8282b421ba6d7390f932758465379deec6a474567f8fdd56d23070e5e2b75c7c49571391ae368224c994230b97ef9cb31d707054e06d9efe39ce392be2bd1800a48bdfebb93a783a2947156e8fecc69cdc9c93e3388ea39c5f24edb2db86650f77df9f86cd66e9d38627a5c9563fb9eccd99b321bdd59ce110ebbaae8b0d69f17bd4cb1f6bd7ba52c988bbec9076c57430e2a391dbef5e7884b29e74fdac30ab0b1e9df3748a354c72cd712183082a4512319b94ce39e7942e7e5902176edf123cb9dd6b3efaf33673036975777fcd96656b3ea7022c25a8f7478554c9f31b27933c5ec88432713b7c92875ea91d58a15bbc44f630fd07b48c8fbc24eef2f7fe49d2f5cfb39c65f59f5e48f684d521cb01dc7bdfef854fb474a8c4fb53f8c4df0b9f7c0c7249569c1975863a6452d6859ebbdef3a67dc0898dca920a75bbd18a35a92739ffeeb8f2e173f20317635481811a4b6c21c50c71458d9a1a325684b962855e3922952445194fdc80c5eb71561e4fcb1b37c65e07b8fdff068f315e0d697545061e6f743df04a206204c9ea57e0955fa024dd7185d489e1dd015e057883892b9810a2890c3551e8e0850d65683920f3c415292f310023078c03dc71d583ce5ef9050a0d2eeaca2f50b46cf1bc4e3ae7a7f6ba3da57abaf20b142b7c83fa5df9058a0f506cc0c1d3a18863c3872e897219f50331fc4add7185cba087eea689aff6ace4e0afd8eb2726cba1e62e89a682577e99119d51bd2bbfcc685f66516e98a152217297f4aef4ba0ec5adfa63820778d389538aac6b508553660dc7a2bbbb5127af939213ddf33ab79ebbe87429bbbbbbbb7b7edc1e176f3673400733daf8e18d1e50510389460d381c79d9d2850b3332af5fa47133c1e981adcbdfada39f830c9ef96a398a2ebd8222d2276f8e038bec20a37238cedb04f0fea320ca525abb28a5758b2a7955ba45e9946e511b7634d59112dd29361baca0de0ba2494011d5a80dedeaffe833c769413d8e5baadc83692aa54fa7d029947627cf0b9bb0bae6425ac471d148fc2ca59452324bff98991964a105179e346cd6e2c9e91c73b23ca65d6c833ac1321d2bb151cb8cb9239b19c34bdd6aa66454fe91951a6986f9a484c966299b8a77d79ddb74e8675a77ca9f6335b3c5184d6cf1060de428433656a12a6ec8b14506331db0b124ebf6e2b61531b7bf04234894a4d0bfa4bb7b7200eea8ba0ebbee5fbbcc1165755534384344430e8cb0e2c60f32cfc5140c7800650735bc184309999286b52891fc9718b92ce63a15459071fd4b68d8773d1c9bc8a556b74555f1b4b0d49187a74596f10301c1b823ce973bf2ac59ba00b8fd5e7fbde17a91834c0f6eb77589343de3e3977fa57b2865fba98872b9352c0c4d1273fb653bd21a19da435a03838ec34cff682a061d73dbe55cd1da4492413dbab8fd7204716e532b3e55c3540da3a00a6432bf9e280da38ee03d819be1e3709ee7795ec755afa3a06a9e2e0d5947c679297869b86a02f2dc8f3b75a4dd2f7bd8923dfcdf39f1790d93f2b9efb8e7595d6c6f521a7a3e5fe86e17d430ea38af983a4e663ec1c6849b3b9fcefb71ea487f0d72ca84ce59f6f0971c8c6e0b7da7137ea7f94b29d2e7b03df79fd4b2f77cd9c3dc3f7ab8e5b1c3a9784fbb99d050f56aa28e20ad81033f1aaa1ef563f76077dd9d2c1d792e772c9e3bd20b8475847ef76113f04e0fa378cfa33f56af5b070b5fa2569e9348f334122f0c5dee9957df3fbb05f68f3364d2efa98e68304dada193799b70d3ed66822f37b9e9819f2a0b2925cb1ef9535a504271461d273308ce3975588ee95d793f0ef4c87412cf5dd5f3bc2f7ca5d931d8dc14de7bb42b83dcf31ef59f8742d9a48aa0b8540a89d09d2cbe7eb9907544e80a79de0b5d2f1cf93e9adabd98dafdc72edb66e4c03d857c39ee852e17a2a9f35f4c9da71ba5354bbfe981eb568591de5e1a7504572bd5642e74422ffd26ace682fe944bfe398efea4b4057a27d82d1beb9694b2f32cf8213c91aedf9fde93226a75a58ae3be0beb87b25ce87704ebbcdc754a43d61127f3d271c8a5610bf4468d601f5754d8f89416aec25a553ca6709ea02747d76eada66ad5f4b9baa22f74e70ca70ed3a7735f970a366c3ec7b9bb0439ca4daeb5a84dd4715efa9f5396f5833ea927725ec7c11abce3f4de03db93ef96724a0142d7bfb9be3235bb75ba9fb7773633ac530877e9524a3aab94967129e51c65d4f8a6bb9f51ddc970ee3ecd90a122d6aeb7d5f1e7026931d6aefe9f38ea7cf99c42417567c8a95a1f678a3afe481148bbfa5b14860ab6bc9b145b3ac9492abbe3a86df79f9ee59312d6edddfd0dc6279f4af9fe9c5b1976d82d3ee35bc9a05ec9a0e63ab0aa563228f5a3755d39c295ef438a12fc0641f047039c70fd6d2a5c8d3e406055b2b55ae1faab9a9c2ce81ee82f294ff7d0996e689eeb5c39d4307e2b65cb876490910cf26faae44e83847543dd12a3c56ea8933a1ba65ca35bb4c696a63ba231ddedb61454524454294503956c90a92a77a861292ad2688d8dc8e6c69c733b9a8be018d04c4704a6e96ae09ace9692d215a5a67446285a779b21a8c43fa268b79f32dfd06cf0790da3ff4d2969db194a29651614acb4935cdb7458fb0a71cc3b98030e2afa0575c7955ee0e0d25ce0b842c6ca8d88ef53a3ddc3d1dddd5bdedcdddd9275a46f7fdf0ec708dc69348506ae0bbbd29d65ea486d2099992567c3f7044eb8900ec91eff9e46b2c743277c47afe675b55a8b3e66362eb730369a989a119823a4245ac3468fa861635785d6257d9267a453ae0c474a85862b5f8aebd3c87665874ed89341dc098dbc3c87ec99962da5c99e1b9a85666991078d72a1371a8626f1400c1a0455a25928188a44c55031e8181a44c3c64aadd01a0d8269dae0933ce3ceecfa7fec2295c91bdbbcb1b50832dd14dd3c71737423e68d35aba61b31e8ac69881bdbada98a3bdedc9aa6dcf1260c8f3bde20dd285dffc9bd6a6ad878b35af3801c26a6a69a5f54ad4ba5443736da1d931b47d2a8f68f351c6f8a1e80a6facb3bded838640a6b395b3eb8c19126674bce9622260750d98dcd5dfea732d53f07c9c55593bbfc57ab5a7390ae0ff150ba7e53744322cab8feccaba6b0267b564d2ee6144997bfd1ec36743d8796b345f644a963ce16abaa42f6ac9a285d35b5486b3e66537c10f9b012074d7594652ab9b1c66dba7e2a7aa3ca1d7dd0dc48baa38f203eb8a38fdaf51f7dd87c145d7f3a5975d4b03187a98a300de31a70a13afad03facc9a00faeabaa9041fdfe37326867a623884ff28c3d4a773e1929b922343ab05b5f27bdfb71a0537a620ec789baf2a50caa2fff93428aaa216f91a93bb41d2517a5e8f81d3f7f67a945d45a9241e0cf6f31b5d234cc4909788e6bf32d78ada69e2119a4736f7ed449ba53678b3b75acb82d332d1f2e99bb43a58c3bbf5a1f470cb9e8030976cd9f3e5443ec4085a38a4835e4c3468d2a6ab6238584ddcc766e3208bc89b203e6ce1aeefc314473e7874c32e8fb9b1bdc64504ab5a6c78cb357863c190f8ebba1f84f4f9f518c62a65e07f6e8a29ec699e2617d6469d7f461eb56111f59bad5753e6cdd5235ed784307a961a3aa49274cc34e609a041e379d2355d3747b336b98cad63751e64d0d3737b8f33fd0eea8b0ec80d99142e7a673d3b9c99e9c1ba4e67b4e92ec99ff6d54d0da9bec9921136a66534461b8f351b3d94da2238cc273c8743c91864176b1c59de3bc53d5d48595b2cef6b83aac9475b4eb68d7e9dc7c14a54e688e528e727fa21445298a7296a64ed0390a7d14756bee1cddb9e33b7b4587eaafeca05c77e2b8532885769074acb8f3399d23d933bf0b3b55a8d3f178be5778844f5e90ed78b65778fc298daa53e4a28e9faf63e4228f9fb34b8e920cea7e3e674f77f461bbf379584a7317bf0f9b8b3b7ebe8fa2282fcc643a26f7a3aae9ce1da1277b8ce890bb4e97bb5cee514af58a884e29e5ff023cdb02bd72dad8bb7beddedf9322f71ece9f9c9d73ce59bb5dcd140e87283e1248b8e30a5481a72bbdb8f1039693b7b35ae13c0f112325744932030d1ebc8029834c1156f460849721a8247143b77f74d96ccce78bcfad61fdaa1f453cbea96148b2a75321cf4c00b356916bc8459d9055abbb86dc664b1d779446afd61d2538aaf7630f950f12856279d826978d42b9a36b871d7b4cb9fd3aea4dcaf2fdec95d5bbbdc2ea31b47a4ed9be223c21c24d84a26e89c0a55bfea99fa1b4f356e57511c0a4ac084fc8973e483e480d73310dbb496a988d0e47c150f013ec0437c15dd88869c04cf00c980bcb8097e0224e82b330126ce318b0152e826bfc020e827f6022760157611d98c638f014ae8187580696c230f0ec85272b7001052d386121841298e0042950010b5a20c450380ac7c033300d6c03dfc0393015de8179e01ed807068285e021980886011bc157f808c6f2fdb1241759cbf7c7945ce42ddf1f5b729195f8fe1853ac4946c433bb27dabd793e3b4aff7dee4e9d3653493b9b28ec085e47044d988c215801041ff040079e656039f0bc84ddc0b31236e7b9c86ae0798bb5cf49d825cf5a6cf89cc566e0198bdd7946c262e0f908cbf36cb31778be6201f01c03abc2b3113600cf56ac059e616005f05c84adc03311b6f55cb314781ec2ba9e5f60537816c2b29e83b0137806c20ee0f9072b81671f2c019e896c049e7bb0409e5d60953cf3607b9eab58083cef604578d6c13ee0998a0df24cb30e78cec1be9e71b0499e6fb0233c4fb10d78b6c116e0b906cb80671aaccff3905dc0f30cf6e759068be439060bf42cc5a2f01cc5c29e61b00a788662c5e7993df24236f62f5823df026b807f624f7816d8a05f8135e1556085bc0bb6c8a7c00e7914d812fe04f600df824dc09bc092f04eacec4b6011f02cd8fb215822eff6e6a62c01dc450b5d43dd72d9380a4b826728ec089e9fb0227876c236796ec23279ee62c767231b82671ad8159e99b020789e81fdc03317eb816719d80e3c8ecd795ec272e059096b9f8bec069eb7d8f03909ab81672d76e7398b5df28cc5f23c236133f07c8405c0b3cd62e0f98a0dc0730cec059e8db00278b662557886816d3d17612df04c84753dd76c059e87b0ace717580a3c0b6107f01c844de119084b80e71fec049e7db0409e89ac049e7bb03dcf2eb01178e6c18af05cc52a79dec10679d6c142e0998a7d3dd3ec039e73b0233ce3601df07c832dc0f3149be4d906ebf35c836dc0330df6e779c832e079060bf42c835dc0730c16f62cc522798e62c567182c0acf506cec796615f042d600ff823df22db041ffc41a79165821bf027bc2abc00e7917ac099f027b8047812df227b0247c0bb684378145c03bb109f8125822cf82957d08f67ecabaee946eb58bd6adfe54e81adab9ddfe4aa68e3e48a36be80621ea20b36ef5dfd820526c109f5bff8ed2f7efdc5c0ce1fb778e5cd4f9fe9da486f9eddf417211e7479fdbed1da51ba4f6ad51c71f56c620b34b821fc18be09b7cbf0f938b4cbedfa7c9c5f1fb7f662e86e0fb7f865c5ce1fb7f682e82e0fb7f885cfcc0f7ffd45cf4c0f7ffd85cecc0f7ff14b9c881efff31727103dfff73735103dfff73e4e292efff41723103dfff93e42206beff47c9c50b7cffcf928b2a7cff0f938b16f8fe9f26172bf0fd40331729f0fd40432ea6f0fd40341727f0fd40442e4ae0fb816a2e46e0fb816c2e2af97ea0221721f0fd40462e3ee0fb816e2e3ae0fb818e5c4cf2fd40482e36e0fb81925c64c0f70329b9b880ef075a7211c9f70331b988c2f70335b9a880ef87cd5c3cf2fdb021178d7c3f8ce6e209df0f2372d184ef87d55c2cf2fd309b8b257c3facc8c5047c3fccc845d9f7c36e2edeef871db948e4fb61482e22e0fb61492e92f0fd3025170ff0fdb02517877c3f8cc94521df0f6b7231e8fbc5998b06f87e71c8c5d8f78b3417c5ef17895c847dbf587311e8fb459b8b3fdf2f16b9e8f3fda2918b05f87ef1e6e208df2f1eb9f8fa7e11c9c520df2f26b928c2f78b4a2ef67cbfb8e42290ef17995c24c0f78b4d2e0ec0455628250acf21d3927a193cd97f7f6cc845d7f7c7682eb6be3f46e4a200be3f56733100df1fb3b90880ef8f15b9c8f3fd31231777be3f767331fcfed8918bf6fb63483facfcb07921bcebbcbb17f1d4092058963feb85641fb5a20484d44b12581f249f241f259f251f269fa69fd9cfd00fed87e8a7f663fb29fa31fab9fd1cfd20fd24fd28fd2cfd30fd3401cd8086806840444035201b50119011d00de80808092809480968098809a80936830dc1683022580d668315c18c6037d8110c09960453822dc198604de24c1c1269229158136d62916824dec42311494c1295c42591496c8a0dc56831a2582d668b15c58c62b7d8512c65afb0feed90276385b1fb354802fba36804f6879108ec8f5b13fbe38889fd8134da1f4921b03f9456b03f9640607f307dc0fe68f28065cd3a6059431cb02cda062c8b480396555b6259b60c585611062ccbe802967553c1b28e2c60594815b0ac240a5896520a96b53401cb629280653545c0e2cc94589c2108581cda032c0e91032c4e2d89c5b135c0e21431c0e2182dc0e2dc90589c23142c0e92022c4ed2118ba364c4e22c9d6071984cb0384d456cceac049b3394009b4393d91ca26b736a446c8e0d0136a788049b6374009b731b62738e84d81ca4209b9364009ba314b339a2cd81d91c20abf363757cac4e01acce0856e7657582589d2277f58b60758cdcd5df637580581d02589d01581d97d569591d2677f50bc0ea3405c08600001b028f0d61c78610da106aeeeab736841c2b85f5515e98c972fead142932bc4c4a9fef6578c9a41c017c9d322450a7421d25d9d33e48302439420e0c4906a5be3f36934139b7ff71504797cd0709884df6744f92ece9c7b13f42b03f74ec8f21fb83a85bedb2dd1e75d0b8fd9f1d757670fb514166b7ffe483145b331a60e8b6171f82d46e7f973241e7fab06da9a308454d2214b9e82346c3e6af4428f21163f441aa7054bfa308205829e3140816041b040c2f33f7ba53833a53593fde30dd30a196583696e42ed452ebe4e0b050472eeae4a08e705047ac233555823a3938dd63a85b9fce8f9eb3747270587c7b486952ade956dba42ae0e34108594a4078d6b3c22720bc90ecab6a54ff91de7e14ddd651fa328a6249dd8a81a00425fbf1326582ce8dcd648f4d125585f3a3c7faa61f57fd2b1773421fa476f5e3781e2b6c10563e6664d01b55ded1a74e966ee3ff0388e9f6fbb033940c68c95ded83b4b2b55d2dfbc04a191743fd3bfa20f928b9e852c2688a2c66b4b1258cacdf67c9451666492061049825c27843d6ef83e493e485e9082155a750e593f59352ece62b36fbdd257b4865a321030d36f084577a3113e6e673d8eebcb38debcfff6ab19166b3190f327e8f1f54e15ce719818c3f43ae4b306176ee28c548317adc518e0133c21d659aeb77946baeb31431ce55aebf1c39886b73a51cd77ffa7b307471fdeb1718c6b8fe1f6589ebdf8a72e6fabfa478b9fe31223a5c7f23445cff244a5cff149688b9fe2bc440e6fab3a0e5fabb30c6f5211974409b8109a21baeff97a11db08dc69ca9957ae59547d0809166064c1899518300a2a19b4d8938987890857105099b06c11fbcb43184540609295064b20158e2483305142f88238cec06b61c745c7f23485aecd96c36a3c9fc95b4386532884179c7294529ebae1e0a6559e6b9e82f7fac37f5f2c7075f8e2fe9455ee46ee4224b89cda3fef428b746dcc53dcab6d1f57e64a5ebd591872e0f8196c5bd90cc912c8b0b934871214f6a2933904999167e561455ca92b8cbfb7fa245893ff84fb43cd1a2e47bd4874fb428e94f854f88b8cbfb7e307ca24509f81d3e79811e3e79f2eef2fe0b6f2f1b5fa89732cf5fca3a6471e1926e799f62d2f245134ed06633d90aeef2bce78870244f72effde6defb917befd60577798fb23fb0d49187aee73d0ff5a3429ae42e2f9f28a8140c1667552c955224228000008a004315002028140a878442f170384ec5d90714800e85aa4e62489489a3248771140521638c210418420021841840866a64aa046db76a1e1e604c429fa5968caea05192f450143d4976c2f86fe21369b4edcbede00cdc5953c372b0fc285c7e0c23b10f6430efe671bb9fe85f7aa67de433b095a75bb31e6543145e9d51986d43a611cab9d584e7a23bc67c474c3bba81792970cc3220ea83a7718854ac78db8b042b8c66753e250750b6ba79d342eae069e696ad7245c1d6c476fc5771bbb84d885aa493518a84f2cf7a824a668868a64ea9942ab2ca78f5ae54232cfe01900382516adcac0fb79591b91959779a2db0c4c84889662aa81d940d4bfcb13c4b75b8d3eee8239e9f50c9c6682a9de8c9ca10bfca9c9886a66f28717fe4fcbfc3a8e18d34256b772d817c76b4f1612a07283fc94b529f59f3d390c0bda23f4a03debbacc64fed49ec85bd7a21e8bcc80a2f41dcc538ecc2e0bad02e5d849b4b78e4620071e1355c88f316f1b825406d316bb630bb1672528bc0d2121bb418e22cec350bc19445366409662cc62f16860a0bedc022cc57c2e31503ef0a2f7185b8ad88472b01c88a5963853957218f550457983bcc4e748037ac17b0e7b8a12faa6258aab0d354082615d9442508a818ef5318c629b4698a304c09ff520c945278671562aa221eaa047c2a66492acc45853c5011c05362ed14c3e16a0a1b95ec888e7eb4fb86cde4894614a3a271a009c701e20e7015c1c5217633a12f20b2ef0c141257fe9949025c765c36b7c85ce63f39f3767a67efc7329e37d6481ce5b52dd8d5a728a2458507c03934a938bbeb45e0a7c82f799835bcf6bb96fc848c6d257150b3f21424a8027dc117063d436383929cd283fc017a07b6a244f99b3233b7cf2c4c1086e9b3f9cf7e4d5086d881511087716627088e096535892a279bb46011c20956bfbbf57c3b614f0ae0f2f50ff38e4ca301ac7b6c564ca48440bbdde9e1e6aa3f2a8559719ee67ff3b829727431fd4ed3d239a5ff8debe50a2fddd55777dce2ab8d568983ffe6c1588dbd4c389b8197076333f7e2616ce64e3c8cc5d88783b29e3af13016531f0ec67ecac7c1d80ff93808eb190f0b6d3be4e3206c673c1cbcad998783b734f330d0ae7f6aec3af2db25c39918f637e7104aa4fe376511fe2b45d0ff9a52347f941ae47fa62e827fa50cf27f5314e5af5282fe8fa945f2a7d441fc6fca22fc578aa0ff35a568fe2835c8ff4c5d04ff4a19e4ffa6288af36cfacff3e6d13c75f7ae7494d99f0e6b70f85d92259ed5bafaa85cfb8bb9413a5d9a928d07c4bce8f11ccef161c03628a8b5f1a2d284a44aef37137dd7613fb8c05b37819f50222d086bc0dbd2e6268e71c70946559f4ea71f953fd54f4fdfa08beff429db8b8476201c77aa002fee8411cdfbb6eb97e49c0489c980f46a7bf2131911d9c0358d481db1832ca4995986034b37b1b20f8104f141fd8041ba0830cd23cd782c07d20b4dae4648b769ec357d78f117f1c34c8ed7aba6c7297a7b14e3a94870bf178a9b5030414f8850ca060560c83af9511c9c20dbecb3348c8738ffc8cca5a33874048a02e01ba188e7068a46a91e4a6b2245c404aab9294e0e17814fa36e5f2c2583f53a6bb1c61eeb5baa669315d5b9564a5461b4301f0bb3cc5e76cdd0bf84d677020a6572fa8fe1974113f5f4852c99641760e5d924b690d0a3d7e4c6ae842f2af9c67ff7d0e5417fca03b4e86567a5870240410d965ba5ddf09234c8de47790bfec789b65353e34cc7c3001227ac84be0048e5502c78ed6ea7f87daeb8f400035a5ecfb47f874e2ead741a40c8aa53e1fdfe172551487f12b4be40c3796088300b5dc02bd07f6c4d42863b537b82a557ef1b687c94715f1fadb54618fee9e3df2295d4b9540930d446313e9ac25f66c0a893e936aca95734dc93017b6768f88a444351a9e9e3aa20fef567dc0a1a08b946d00414728e99d87260af001b8388674604afe5b7b727f03a77d1964187aabf3be754f09737807f0df050d449d767a1d96fa0f8b2ce3548e295b846c8f0742d133c3d593121beb5525b211018b289d93a65b465ee51532e6558eb8d24ab70df8612f16a1f27836598128916632f52cee589b9cd649f8e2d20fa45236c1a105a36c3e6a1ee618971f729166f197e0e45ef2916e91fa5dcd99be2ade43138204b86a3e008ab98be4df10d45143bfc2fc4ba6b2a26aca6fdc123778366530ae4c0b2193a07f509d338d7177d2f419ac0d1198195ad40ce19fe48bb5e02650f1cb579eab9f1e3a65e4396640f945d5f357bce2084fb1c6a1775c8464efb3a6c643e9e6df3363a0a61b908ed68a930e3b0ff6b7b376d784cbd8734b2577473913c947c390fa8bcf5335c8be3c0a0271745b74da438ccde6ff204e6dc42c0546b0e373b5d0482fe2aa5c926014e3771513dadf699385ba64ba3a657540500e586f2e8497aac5e2e5174b952fc57065390e93ff20f5f947770949145c43b89406b2a08c826194d6834d70d3a26d7140b64f96537aee00248589012a09a45bccf7e815a82a6ca1330fbc42ab758e11d54a52181f266358ee0940da9cf765cf6efa5aea3990c80c67459dd1d633b073a862ef9f2a439424997878b1a58b01358ac19aa6628d79083aea8ba4da363b6f02741d2aa9268f0c31904a6d7963987a8ed352006a6f891e7be024e93c561547dd3b8756f9af551bb69e21e592eb2f099fc114853a4e48b3fe078e68d63f28a060457a67281a0eac7f6e2626a2b5f5b61f35c575ae82cf6f25d5c982932e7f8c6cf61b87118fc134b411f236570a0cbd294a881266239e3de7a9c4e8a018a2f8cdb9fc9645f6c0a257e264a5d801cb1ebd4786cbaf10b299ff4e436020613f03a7fa8c88869b4a4f07e59924c2cdf6a2ad4088cf1ca7362da92d4ebf4a304e564fe549579ed0f314fc856eec6d5c3d01bf141025dfa2d598981be196def2df9533e31e9f066daa0893ee2f900b3ef845035ae4fcfe03e82df7f1c7280a0a294df869b1a5e7aee272c415ec2370f78073c211c693cbcdf3da2abda1facd000c37d9bd6087125989f3cfc808b0f21ca54b049c2fe84fe24970597a428d8b1af13efab30b82dc3b89e0b9fcbe9f6c6b4164f7f69fc5863c5133aade7cbff8ccd0fd02b822840e05e4ea0f70437a1bfd7ea1194a9212a82758833f6a41c14c185e052eb69029f519651bbd40b737a798ae516a8f5e15deb27930a334c04d989c8116bc312593caa489e403cebb5a916c29c63d66f31db5b8beaba6786871f1ecc75c0f42cfa9e7e671482229c1ed436d8c8cb8f9315ed78aca7fe15c33289e5b663473824f6aab7e7555bd82431c1da389fd530f612607cb57ec89e0eadbce922cf2b9402fd7c98f5d5aec089eea20aa6daf8b1ccc257e6edf9b59ce76ac9fc9c8e6d8ce91dcedcf9e082fbf8f895f85600e69eb48ce78f454c5105251f4713e421586f0ee3f6c3535e0b31014812faf32ebe7db72e807bc11cb4e9c641ef6ddc667b3b5f8f695a4a03f20f48b65060f3868d6ce58c63fde622928732b36293a0f879fd7d10c5e45e7190452003318c14f007364e188ff61a29995b2ae4a181ad9c03d58f3ccc8e0784e9003f0f81d300fcc14599baeaad2e975c53498cf65902b32d340725d15f256f4ea4e027b105e561721c8c517513a2ef0316f9ac5430ce8be02523fa781d0d61064bb7a698a9f16551b15e3a30ebd648c89e033634681d7b1f1585e7cb9739d4b6410534e0973fc1a6d49771012b555e3801393ea8d5a821e9945aefdd1c323220fd4a1f2f1f79a139499e4a2989edad843a8d54a3647b62f64ec89875710c8c47f2f413f4e69d3fc43accbcc3935a68e1685c6a45bd06c49740b0ac1f9e32f1d328ce73ddd9f291da37e536445c562c0ab86949bd7a34b7a8396826ac4760bb704ad66f011046b5b04111a3003e686c93a74bc7fa3d37ea1f03d1e566c22ca2da6d723dcdfaa06a6c625ad5c856dbec0d5110a3d9ec7ac5871683c05c078b8ebd1475e8a05949c00bf562566b966a4b51fd52f71404bf51dea3cb083bc899b4d8278925b18cbed8922269699c0ce1cb1c79b983d5855b0538f6e91915c3bcc3ce5601218325951f3b53222867d9c13424a9499667306aa2e19699b14e21c060164c5d7de6f755c750eae903c998d378cf93a3cf9cdf61f23e6d3d88890a3603027f65e2f20c4e9a3c1b6e5c8d5df763c0a13406abc9ccdad5109b0672f9c914cc720d3b598b9425c91f9af9f8968371862ad369946bfca96ad334cd0347ea1ae6837acd300a53187bbc0aa54339a83a966ad08318ed43dc87ed19b8f88d6387e4bb880aec42865dc491cf9d1627fce440243171306d25895b38000e1fc0021b4efb7927b82249192e270cb1ceb3ccd5638bca46f08aea45480126f16668f92b6f8cea4e58fbdc925e82541058ec11fbfb95e202148e77326536336e33ba0203c12c831284f4185a911a29796e4af16daa3115d47f2cf8efcd26b80bf6ec61fb5288d2d4d883c75898352db253187a7792e327b5e07e9647d483fdee4563c2fc0c25c6d6ad7fa0f7f2644038e5a96973bb1643ae36dbbdc10df1bd0bebd4c171abebbd867f8b9c3c6616f44cb3dc96ffc818b37c144c33c9dec4dbc407af833415132bae51662153c2004d7bc9a33959556eda46572fa0ec79d04e90d79a6bc7bba9cda138567027c66a0573fd3f1addeb286125b07e036327c5d2e14f14d6f1e039cf963b810a71ad268408e40a51e7c91003e741dbb0d1a55efd1c61292841a6a2fa20f99699f37cc4a5429ad1195f84e28e40823539138833d3da5c67d880ed3af4bfc2e6535f625065e326dbbf21e511de3d22e01a9495bfc16c4a04a081a23ee2a33a0c95706e628f0f50ac3dba388538dd0f323924c14a0dd9fb52b919ec2b2e751ea5f21d46d433b4b139258d80187a360a705df97e6d31943aa4db5f0b006a2bbd838cc6ecd6a67a33259a8ad719c612ff474165ccb6c90cb207c7eb27ffab11dbbf01dd8d95a3452d8e29dfd029333f6a72f1bfff3acc8a00b104119c557f986d952815dc5a1355fcc5f539f148888f1ee1d3a0e730acddc9fed583870373dca1da12cca43df09ced41b5d93f4b645b6f67418843be171cca7145f29a4f1589044702a93262c6eb5e6201581fa6107608488cb6830cee4bacbb65426866b59d7520953e742713bd0f452fefdf87f2acb200576d769e1e5735238c0717166c2d4471b92a615e43e41a8e1803f144a2234b77958aefcd4a37f68937eaed9f9f03b7ab199c5a056e2f6c43bbe082bbc76ddf2bd0d6f5b4f8c6a9d3be5911794a378452e264a9b60ad73da228088b73bd33e9d6e27e87fe9bd8a60394b6aee88217c4a80fd945a5f2febdb50e35c73cf877cd5e33529efbc615b5b4d21e2f3a18259aea433fc9d0abc29a88fd01de5ff09043774e2b093b438649f57bd37382838a073f52e81de9caba8a13abaa6ec1e42930db97a70310adb72d94679f0d95256951c1556c0bca2ad664ddd99730ce9d175ff7716e21db9286b0ad2b5bfcab1150192259913b198515715fb46c0d36e3473ea5b9f46d3889f08c897b35f1ae813e908938d2f594ada590113d6748a641882548d3eee59cf47ad6586bbfcc026740c0d1118b5d3c55d70b11f50cc4bc0cca02c9606250d2605041ffae4a42fb1c834a4dee269493d349a064dd1764c23eb6023511f9833262f34bd5346908092cc79bcbbbfc4c045d722aaccb2e54a617bb4c177d5fc9c5473f643130fab8f4cb39651a378705bd56d56794ab6e3bcf077a59bf2857002050fb4ff12bd2b69d1af1b90c790f65d6de74448e916be95ed0db1dfd328b1d70d65f47d1808bd3d9a2f11411c00d34c080ab404f95e2afe60dab425f2143bf6340e80c1388a7150fb78fa84758e8910563bbd437a6c5e4edd4a61c73e43a94a2aba5090ee871f9cee14f4b89beada1090c9d86cd3df31c7fe82af584a6e5c06e7903f603b4efb46cdc194758c2c1af808947f40818949ca0dede139c2baaaecc50959d4658b48b386a4fb5d9bb00879574acfaddd9ae52c2bcc51f40724237334c90507d0cf6db2d9f70e01ec781fba42f6e4569590bcfc828a0289800431209e4c93b9b4d4aa4e2eadc3477126c5fd203e642d700f1fefadf4544c1ffc981e1e0194debeedd0821bc3b440eba19c5871d40d896399618a10f6c96ab47f166721bc5b13878330105f3903dae0dc497b33bbeb0ec45ac5bca5c31e869683ab85cbe526d8fe7cf0b8c929325008e08aa358aadefa24950552e2b88592693fb5d8a288b86da52e67534c39aa7f39d959f9eaa62c871322f96f03bc2e00ce552c26aa1778c73dcdbb1eab5c6992760aef9ccb1d5e50e0bd48f3632b96fdce93eea22268b7978494312d7004456618d51b4f14e33e8923acd6f3980cf374be97e5916dc3d8f34f465709ddf765d4f465e0ef13cd906021e314e883f8324c8014ffcefe8a39bbc9a712c8ddd6b7edb22369e678fdd123fad6fce46d5443c2023fb8032ad526d678387345628aac2419b5bf3bccc01b805bac01b0db9e647351cd6960644a5b141cbd4ee1e1dbb4b431d14b22d25e4a72a6dce4b6ddeaa7260ae5521efe5b41823659ef93ac730e04e2be6e12554bdfda4de6556068a295024c6f6229fe66e2bd4056d7af805fc8d05bdcb84b6abb1a922216830ef57cd8b9c626c013ac53e0d4ac5637f54a7369942719db5b912ab785afea6131128e54dbe8c052a8edc3891513ae1bef7670ce5dea34fe9084790dc19fbcaf378b02c53e81178d98ce989d05b6df65d35b5f944915eba3f9aa19e8c9a09e995aca9734a0c06cb3abf970e15c25579d6a2fff3a4b3517689f9fc2bbd69b6368ebaa112e91ca523761115fd3e60890a1bcbf7a54f50429d901303568eba079d0b7794e7e1f89c174312a769cbd96051f913532d1176287f046a4bb462f143158f8a61ae4dc877da8b3360e4a90df01d3e7d218f846c73534a29f2bf3bebb0cea3c8ae9649d5b6768550ddbbdef9c293da9a4b451afe58bc0eae475b50a8799a3d3b69822aa399a1c7db53938466ea7646669355c3848577267cf89751cce728d7ef3d303777207d33e859cb6cef8a81ae3d14b730fccc7ca8834c9a553f01829cdce00a23e96af7dfc1aa990fff0122fa8aeb112c4d497c4a7989c9af70ec5b43c02c74428b9b4883bf7393e64cdd5f3e7c81ffd00ca57b36d0c580b752ea60d030d68dcebf71d6b220a5b8cd3174363385f479f6ac9beba2dd4665bd79f49cc9f52630de46255e0b67a9e6889dbcb45f90299b81cdbde01d82ed6c87914e5f75cfdba4b9bca28740a6b9c2da18ec2a468974d7dd39e8d888578bb8f39911936e58a5f097e76de4b2e05a98b6e7edc8ae13d98ddd48bcaf749262e0fd790aaa659e6adaef1a08bcbf34e10d940e91be4f2c22573535b80eab8f2e781a5c8c926bcadf5af8917b83009a62a36aa47ef8ec7805787dd645ecadd81a7494e4b198e0e9e2bd4ac24411c773595ddcb1aee0dbceaab69dc9f0dc3395214eccbe9875f394f7e34b0fc0e448a3bf53558a37ac31a4420b333626f5046798047d1baa01553bb77281fbba59f981fadd8475bca2d791a43f584793c87b61fec0c3e6149aa0fa043ed6173e1d68d196569ff29eb4a3c0d85cd614330b01986e94a7533c0fc096d372f01cb7b53121c6f4b00c10657e1201bbf76eb251ea87d68217a5e1ba4de8bb5404e77118d092d36e822dfd12d18223d721219d809dd9b623781ebd194f4319e64e3c7b222e33ab3cfe0a1da0f8b9da6ee504505562bc319f23a2828c1f2b8581ebc5d7c668da59dac1f3532affa704b551b7b89c0121dcaabc5e373831b7d08cc869d04e6276691a0cc9c4363400e8e057756e6391c949836a7a2afad4d9876e984fb715662ec9f1bc3764305703e31ed431a91d83d94e61d33023187155d0f8ae6e7688c15ab881f29e88fd776e7540556048a15747c59ed959844f791f984fcd7e13add161cd9ee6b6497648815eddc4cbacb74ed74f5d2c5259f761c7bcf8872937870ad42e44acb5e3a33952fe4a909c3de93ee30c593a499a2a54e720dd950880070f8c3a4ad45506b1d6f7a056415014ba8a3d82441f9e664bb367d525e84b26ffbb726a6fc71103681eb0c0cd33807b2f81b0b32e7a77360e3865aedcab34fc6b037388f8b46d4deb948bbe566ede70eb326ea5ac5aaa1498315479fb79c48eb568e753d53a4962a1173aae03b1cce5f5e8483f8078fc6e73d56a3c405efb0ba034a3e489c76ecbc0a24e20526a63be1ecde1736b85f5d22215967640a62364c361de81e1d625189403953c04e0e692c06896f4c8c536c77b8904ecf623cdcfffa8db3b62c6685962f2e23512b93ffe2f6a7d9bf198f4628beab0005475afa433e3e4c1ab899f25262b1a02b0212ea817fe4afd96355db8e8ee03bc8420e95337de17e63da10044b552896b8c1b319db5f186321d89f67b33981918a2f8a62399a207051b39b5823d2a3f70d1ece4398ea55f6c830060ed146cc34c53da63f28c0ddcc9ceaae6b58201decc7c099e1b7a0103f359d177080258e333effe242200112ebcef177259cee837681b3c0f32fb9982221a68837885ef8e520036da43fc070968d6280b4f958cc8ab2721e2a03a934c9e04afe078f91730243215ac3de5c30791dd6ce3125759175ee49dc6d01013d8bde313093e3054e9ee60c1e5e96d12475a7cdac8944c780a5ef7f9093d6ad44603dd228fd9dfe6f972ac4aabc019eeb112eb5f6392224f6a75b7edfba1eceb524fcf3d25504379d68dfb2c2fb0a03c09bb7896831ded9f0299483febaf770997ee01551227c54c18e26371c4d8cd6ba2f97a5de6d293e1b0c013390fbaa29ab39989d9012aad818b3220a08a4c11328704e9e23ee3c116588d3560e689903f842784de531ba6a17a1c105fc0d3d9df4ac9a65c5f9e99fa7b7ac78b182cd445cee641f57798b9618484f97034c960b91af652aeb400eac2952e6de723432d9a046578b91fee347d3d75801ec0641be6677297ecd5200fd347e5dfe39bbc78ef2e7a2ad21a7ef88b669a8ac87559e3f5b1421c9dfe6592523a2893a1a25a289a1039575215989a4046d7f01b577e57056b6b6cf9b81aa7fe55f09c7f3237b296563ad0390c1a0b3cae40be2201b96be1fa265d7ce4d21a6960398a3acf71d66f9c91953a2caca80431645b84f9ff06bc3913fa94f26604548f312cd3968b05215a1218bb73c643cc00993a0548201c130a547e0ad275ad87afad7f9f354850682813488fb9e00e56d0cfc3d5f971d58c29b54afa4b1c1309c1eb88a058197ebe3cd29b690ef9470dfed28df24a2c1843c59164b9b7d56dcec780e864ddccf72d634767b71e98dcc5791c0d595fce1668df1143a66c90518ace897cbe003db1e3f0dd13b4f91064bb630e807b6d3167c6cab510f31a6917d37ebdeb4d5ac00400c6e180887769b91f4ed729d1bf8c2016cf83e97fff77d712c3afa5b340f1c17143668d0f7a253fbbadf047a68b3cff82d2e7aa9619633ee2fb1b175ba882994c6e3380ba52c1f485247d33c91719ed164e16a7dd9fecdb570f70b59aacea6e21e26092cc533441716e9d23f1a32d61e5248c95e6644b8e921155871df4fd15fb474847b6bd7e31903a1d86dad8462e5850a06ccb657b62b00b53fbf11eb5f19a18a29be3edfd87bff134437f3914c96e921898240f225818f4972e659a9b087463434900dcfb430cfbf239b7b0dcb60497430d49188f678869b3f1fea1053804f90943cca66b375449f28ed59b9fd1527ad2d1f696bf644e016756cb48839e0ff4a3262683f9396f7aa9c275e067c50723e05855a095caf874178bde1ef7580bb600662b594c2a46745d811f092946dc7c01048bb672a2cb0ce0fe3078d2599a8f5cff1ab3e67de6dbb894804d172089c778c3b741cced089d0e513b9dab7357723a17aca1c256ad0afdb882581c6b77d269fc758fe2608e4f15aea0b61256786146c3ee7abbc2abc530c4abf19db2d6cf40421e76254da1737ce088beed3e0e848b2e5425c792ee8413cd1fb367a17159f767ca7f9138d91f70eb49b716797c854987dfd85a90da46652351741387d6e692362b2fdd3fdf3f6143d6ee3d5e4351c4af354d46d1ead1b45a8abb72d7e0c6722cb56619ff376d5d29f0d47282dc1ded0be37d40288ea9ffe7de05752be8600b8b3f83fab3a619fb32d418d3e419ff7355e45af9e1debe4c921051f3f1f673d838010f59f9a30167ba9f2ea5cf12bdcbe1fb35f2f4fdc6cd4f7de37c956153529d8122c1a8b31afbe12cfe82318e86a3b6105e95ac57cd68c100ea9accc4974fd143ed91b5e957792ab807688e96671ff9fd59ff41c42fef62f87c5d3d03c0c1df0b374ae394a4b25bade23a36467708831adc7a4975d4e213c7cc9d0abac2636c243a5c9c892a1ea354a896cb721310a86418e1d404178e412236677e02cd0ff5c9a94aea8c347068a2644e957d93268acdf739927a3a1a180b0b0f7649427e87aa8c11144face35365ba3e4d85a9bde68aabac37d2e8dbc027517d714cdf18a0ca88c3b689bec15cbd0b3eb320f17508551f7d77180d90001395730c7b3e839fa47005f675fc4759f739c6c6f37fcdc6af53f7ef167337daccb5f28876ccdbea9d85914f7ac4bb5c957dd70914c031b35688afcdb0f77909f6dd4ecdcd5079a3bf09382066e1905e493f1a6950d68ba9599ca5e96f2cf80ad7ba43ed7badfe3e2031e853fb7ef9b7aaefd7290d932e6ca587867e66014836d871639a43a1e1ab7ab40759dff4ba9a9a7d0a626c6acd85d410373807c946eb69a7890928a9d0fc11d18b648ed19adeed1a688e57cc83660e60da12495a35306be09bcf0f3138e37c46b33bdfef35abad9586544ad044b3f007ecdc919b8830aa7de3e32ab2fad561c3ee30b8c6a658b1cf1ce5765f2804cf344020dc75309b0c86276ea91180ae1998237c925a897497d9e57989805cd626378637e4bd1c2e891e98093c4f4d36b5d255843e350e5a3162e87b93cecedb64d047f91955baad4ecf08e41ad66403172c41b43cfa42d66dc3aa73c2c0a3bbc02d4f93a341fa7cf61fad41e81870b735072300c432ae1f650c4695b121c8d89d8530b1aa21256cb2eb3f758ea1ed20dc3a53b523997e8a49c142a02a3fe9100fd8ab8e1bc25e1b17d2112a848d38f05fc1891756271384ed3fe82530ee32ed70ec2aa0d25a5f883f55b6e9e5b4acd1eb045d6212a42e7c4ee2fae65c1cbc261ae27879a7b505e2b9587dec9a02a99a4d3c7623cf68f28b82607099247e97e4fcc0c7c0e099f21ae6a11a20830d74fd1b92488da7dfbfb401145efa41fddd8a9ff1521179695b05961492b49a64ab505fdc780101cbbd047a25f7aedf8544c933df6f129f602f8df82043615608c8c4a7b8080c791e141dd35b5b89463de23b8fbd68570c9a2dc6546e4f023c36ab030952ca3f1f2463eb62b57c228769bcba368a6c1f601c3d75026a402c77a01f4fcc4eedf3fc066fd3de1740244e345f8d64e458216952f5e0dc909b048d493c804b30873628eaa3fb645d1e8b3d2c732b964db4337715320a74b48e45204f0d788de4365813385b271ca6d1758ee6806e9a8d3202084a9a6dacfcb6080d9c8b66d6410304ab8d1494e4e9ca79aa4daa5eb1a847e6a50198ea79c9ffaa33cd9e0c94102d2b83923aeac8db8c0b96f8a73d5d1d736b4c6edfe0824623f4168403673079553203e06843bc7cdd085a5ea7ba0f563a10a0f330b1f3aad9d51e71291f194e34c86a4fe6c85dfddaad5ca593f6568019cd20fe623f2a6fd326cfe4a976a6eb53b4a09d5e8f5b8e80ddea389884d6f694ffd46e91f37b37d66e1213948689a5424fb115f6db1e3672b4902467bf536bd5c2d12ce61cf3af0e7d0a887eb33a5956c0407b2566c218ead457d6557833dde3543b59aea9a1f1d5635c93d2a19117f55619d22850ad7139e35854cad03557633cfe164dcfed5f7c5e56b20c5ea5b4285338c1a0dc6832c8944924975282cebe32c86adbbc28c3c413272e363cff4dbba4c1659fdd91166e2b27ff8d5052ed8947c6a04cf94762b22e421efa113324141817e87d1962f7fe596ae4a73f690f4f25152b5486e3545c91d23fdae0a657130de38a1031ddcace3a77a6a2f05a05fe80c5e82c938caf0b94bb578cad2d14927ea0f74ec8788211459c393e719141b248d8e5de06aa2dd557bf5e479b232b4cc53e1e4eef96ae411503ef02d19913400decdba2536616a2b27720e88b5a0121d2136600a4526d90b1b6b48380d5656d8d33b2d03a69e660c9182f9fcecd390de46dc8bc9427150674c27db10a7a6faa0196f3d37303407db942903f956682e26b5658c9a5bb46f8979a57c6f556cf206e5fb869292619c2e17be066d22ad7fc6527ac5f9b7c2d52122b759ab02a1e03b8a07b4f27dd3e65a630606cfc9503f33053574986bc40498af533c2222394d8c9b19d35f614cb35013c8c528fc3546fcdb303879d90ae463c7e01fb2102b5a03e424ba3b8640e1301e4e3c2ba4578010224e63b2295347729eaf6163f9818f4edb2b86eaae7b97c3f8ba408cd8c20db9244edb7c8346b34a2bb52ede1ae085523ef6b4815c8e55a755d3108dcb974e56e75025c64f54d1a13fdde667ae5d86e42ac86e8eeb64083c881feebb4e6824eb94e24b1d40d960a52cb19e8f0cb0faa5e9918fe4c4b97d56457e4f47b7a6c2b16eba590ce63f548e9e53cff4ee1321d75a049b922debd82298410da9ef9e0363be1fb6349e1ce11510fc28d000212d712a6194b9ccb4fcb896629eb6d9cc2c5d5bf109ca632dd951f58a512211adac4bd8e86faee0ba3ead881a2fa96a52e070f9a14083e0c927faed7acf567b7d042eaa78e6b7479dbcc8aa401d363eb23e7fefef02d75c565e24f2df2131d40abdce48a379508cbcd9d378271e21e5d12077f0b3942a6c965710b40eb1da4bea65fec057eab7681fb13557f91b8535f0d690ba604a87245c9133c343a440ddd75f55a43e13ee86293191ba4e5a85278902f021ce566bd59175f1998e27d709667a6c81bfe6242bb0b58708898a375f9e96292929b03e9ef62c3847ab6600515e2645bc5b1278c0471023a8ff31e5239508f92d1f2c9e015825512ad1004dfefbb33c6568132f6ff8b8b82a33a352937c06b0787ea7f267bfa8d79c57c9e6a863f868c289dc88e74d8066bafb9ab2f65535f59bed1f999fd1eb6275eb6171993ce246b4e1d589a69df11d70a18fdf9027e6789ce2c6008894bb8e49a133e95fb224cc43633d5db26a7769810552c4ca38f19f9564026b6c3ded5feeb1e16133f6b0f1e3f0ef3e51b52115db424798b101a3b62d1e0b586f1a94bb6d075775ffdfe44af578f230615954ca2328b5ce0147b3fafcae80470863fe2e9004b151ddb728096c4544753dd1d151da000af03383ec0290001cf0bef1fae449d9c4cd31a171c4bab5c6d50e837aa94a522b675379b494514dd6bf81c7c241654299b8fcfc6d35d4402e178a1454880ba8f08909dac939d5f21e8d2b699b072a5ac0d28b45c36067394a5f053d3f25ed1fd1ef9bf476a33c3fc16e024b5b97ce517e1415b96e57af659183fb7f75b0472ccb9e4759a1484df24e35e852dadda279a652d509db91393e98da19eb1d2f7dccf090894d08e0f7a5b24c37c9014b1d2790a188f8b183e8e7a96096663e1b5e5f93544e01d1929c8ebabee5e767f99d557c0e4b1ab5da6f9d20318e9a3d4a1ea368a9e0edaff61421674429ace124dfd5f8763811829f838ad7664b4fd1085776732063bf64b24499586b94db18f15aa008461293a80e24537631393061204d922946a8a627fe3f5f052447f66d07d1a64de1f7df7d7b6cbef66873f8a74f24e6c950c05aa37dfaae4ff28bc6647412a1f16dd8298cf2bf6694c4eebed25c87a7e51b78045c168404edc8be3a3e385616b77f3defb268bb11af14967890d78bb88a56e953ad16f13a8a832169bd5432a7c77dd8936e2796495cd9a4212b3871950ac23bce4ad7123fa40d152b35298521cad392a07247d9a68422fc26c2dbd75e1fc549883f7ce53d883303c60f477506273044a154f5a6b5adae5cf7bee1352b3baef272f716f3a0d15a26caf64f13967031b10c0451f1f4b9f1c9965165156aef576c67c938d02caaa5f6d0e4e619af88d46c523829d8cc3595361f22f521bbb36143f59d597d398d112d324095fdb9c258432e3545fb070edf95cf3b87e807a2772b5844fd571ea526eca1cf17612a12fc756a141edd8d3b8f4400287d8c3c449ba49dab03699afab9606a315a98dc7253cf232bf245149a31b0f180afe0c0a9cb46b15a88da77bba66b83a5a0920fcc848d50296dd8a9c629432f3b74697d6c16da89a0be8df4cb60c8a7034515ed9442fa11778df92ab1d8a20cca525ff2e07d9216867275c44df6145536c7b2c97c74c71824a56c9f4106c87c018c32063dda17bc8cc4b448ceeccefcaae76d7fbe092ae66a2151519695ed6dc11c336183bbaaccdf811e99fb28ebc322aacb2c7315421628275522b52371bd4302799de9de40e10ab2d7b6bffd96228338c6a010e036a7e4295b983626fc6386cfcd24746c70f375decf69039e02d2cc31aa8023a9a6c5055ed9388641aaf739ac389b6c3d40e38756e51f71d9b9997e5ccbb569d1248931afce94172164c03059e20fc1cf3f6d0afba332bfcf80c340ed2c119053f6c12d70413bdb3ed3917c495af5af15824a66b069713adb56d761afbc21365cb6f4f0daa5e9ff66e946d10e42050f1493e2ba08475730aabb546951a1e6b00eead2f7c9ec4f6f2093e08124bf2f9772a651a3d2267b31f01f3e214ad4c71c265c3bcf3a34375a9845db43365b37f21897573ff17caa52417ea6a004fdba658f690339fed4ff9f1be65d9bc90e49f23a2ae2a35e371a630b911077223a87858fa951c83c66b3528ad9284a08bdbdf139b7a7c0a30cba7cc35baa93db8aa1f63014c30f78d9f6e722306c7d9e5e6c699b5966d0fc6a465d67d64efdfba80dbec04156785d12c29ab81207c526dae35216956fb49a521dd8d3514703849ea79d372648fa9d681512f0960dce64c1d3cd0521ed5cfe1623262ca04560b5b5ab87c1c29fc4f933819f412f897a279bf97a4a8db109bc5657be2e5d3197b16e2f8d23e06b945f1245592e46f1e6d923543230f0fc0ec19cc56c91cc4979d06162df58f12306c4abcb6189f1e7f343cfbb91c7bcb34ce08979ef8bd98f55acda9cfddd3986a6791ab15e5b64eb5ec7d7b5d914b9496c10ef9d13cebc481622ee068d07451fc1313ff2a049afd2f9d070c146cf0a1820541572c2489d90b71d3bd0b718686ed821f4f980c1f7ccf079df0299f590c7a898183eed2798886689b62a8e304acac9858558561ea03ac4c7402de39e86585a877cec67c7ecdc9c59f1bcece3db5a3eb50da344af5b57b8dc7e2ce73fd078edf625d6df287eb22516bed958c4cd786cb4de74c9ed3bacac7851c9dce4914c1617706d55248b7659ba3f07fc2d1087a5a608bfcc61ff946202f785bb567012027dd4164d95633d4d654bc8af1b23ff4196bd1f4436b18840d189d5f2dc8001446506409d31f47df0cd1b52c67a40fc84dff802d001a863b06a1008241c55ee5f170845523c43ce0d4ded2d3802078e52d6a4709f70bee589a2f24fec98b0eddc62572a42e703e141514f3bc9b5ec8d7a09dbda24ad9303ab05aba22036e52113e8c213f2cab3823278195eca0c3c9b3525033ebe22f3335907a526c8e6e031f70c4ae79c888ec01cd564fa96cb607d2fed4286784b1e97c83d0bd3c0927c01a9fb8483bc7fb5d8eb264538bf4dc394c19e1b93e5f523a58243d7017e757c598e78affb883224b8c63d77d0ec99399d706a1ee0c221414b52f1346715a6dd040f15181bc949c2ab3b01bd30773ba55e030607678df3e37d6e7703268cfa1aabff7e5c6dc8c3d818e8980625ba22287b4105c96f8e508cae50a325ba1ad2f3e4d76ee82d1fb8608dcb2c259aef3316315b5f34964cde4123f29f3006d3a2ac3924c605d350151cf89df9fe050fb65a395d049248ea9434ed80f00ff77c7d5a8072fcceb3033fd321db6c1b4e4de7b7114f4909393ecce977296f385981c5d7e731c25718a1b031e24927dd4fb8729921365ab53ba1af3e620d4a7477589d8136b73f010cf2e4e10c8beb1a1430d9408daa05b0b49182104a0b0276da7105c2e0b534472aa75934d5cc6cde41c5b164f6d57bb091b68355a65ba689546565b7cf3c57c7ebe48e4b66f6814bad310d05be842ad91174d142d2897dc0db18fbf667de4db014532d0ef34354c3337965f166f0948de026cb16703d3e50ff78d13372cf7b4fcc573608f9787aaf13a8a74b27fdd01bfc2ea8b612b7d99d2e80b3afece17f05f13cd47ae2c8c5c16e2f4ac135b71543ae1ff3bd11bbd45d30a98ee6fae17238a53a6ad5e0996d0f76703c37ffb821092b7d9b33277f49ab4351c50be58908968666315df88b953489228b6de37fc50fca2dc47b1d969227ecef5cff09c0baeb6eb7ea634ca24befc4ed9f04d007247d0f1ac3b258381c6609c205aeaf93018c03583eb3e41c1b76859c8304a6f4605991d4ef5539497856bb5f0dbdcde00f602a674c04c31c94e6c64ca047d8477fcccf4a15e2f961256ec329ec0f66399f161043910b776b07f11f138f0eed96396477d6bbceb2dba9567bbb560fb3ae23902163bcb2f428aa86905a50e431dffc6abe2c6b85b5503a154697ad07167ef737da1e13f6132c736951a0dc2d0be0b72ca17373a0b5cd2451b1b8e77bb8fe36423dc48dc22f96a98c6f529240dfa890d3f004043df0b525a6a4dfb4c28b713bef5158b4e4644684c4973dc10a84ef4f0d5584260a33c7566947c3c63ff681e13fea4a1cb04006aef0842fdd9e08995326abcf32ced731160ac4c155f369567d8ba41de9465d792ff6ce8c8579db315727f55c4551c0e511aafc18f32ae698d57fab484298e9e8742ad15b1122de143cb4cce2360b8ee3980f5802886bb4998e35fdc3bd5e8ee858a151b6c2cc8d9f18f5b91a9cdf754624522ad0b3446b4bd85458069e28ebcc136c8c368c81fa666b542640c032f5e7f303ff5c8c04c24a96c67dc5f290673a10a26440f832584a782c5a899cf8df91e7893c84057dcdb1a5dd6396caf86f3530e814d0e4051098b519a1a29009c276e5add10913c53377b1a09cd8a51291ad0583f54fe2bc4254630edf8138c754e04cac2a7b0f1a0ec7b97e972e366917a4d94cf9d333f45f7e88bd91e5a6825605a9154171eb9ff6b8762656c535a6dcd778722bfa73c96779f300c785c1610562c48133035a4b46be19ae49f0de8d02ea1cfd5889394584131456a2581bb91176c51d96eb431834a3b6ef6c1d4e616e1424e8e4d7f097782edd5c551068c6fe081cadffe223501e63e0d43120c21b0e826029dd48192706627d0fd94db3b663c98a7903d2a277cac259c1ad0a51ebc60d65f6ec144edd808d60f814c6d23e6ce26c06c0e18e94f9b0169c7a9bbc7e40b2cc84c9eca168c74a66288931c552e082d7f9fa46f0115b8baa8b63d5ea97d489603f666347ccbabb869a3364cf0a6f2a8a14daec559e6960dcbb1cca898db08130959c9524b89eca7b31f81a4c7180f9cc03a679b69440732c236b0e6ad688e94cf3bbcc2a80f480d3689966d9b9a46a9120aafe50670389ccd0fe59c0b47d62aadf2710452a88d657a06bf335d009529219d268e69a7b91f5e2c4b6a66d3bacd8391609b029bd0f6a3ae94a715532e700215ac1ad383338cd66a7ffa9c8d6449cb9610bbe2b199cac37ac04d3b10586b0e2616af5e886c28dba60c87554d338e1acd2bf111f014dec01da101975917dad44678101702b52d61b23938fa0a82fd747e8bdd95c8fdf25f94729433c93326fccb0c06ec05fa81730ed96a1add61d03c156a894793dcf29e229e1e8c1176905b08e6180d62eae973122d11a34888a8991d1ee373a5aa77380422be7626bd37cef09c3fffd39b90d552d8a5bba25bd3a16180997d7e551396c74a887a8cee4b27bd2cfeae49f6d9a3835f71e71604335ed002489e3e2e987757e3f60ebfc7db59558a909d8eefaa1ddc0f18741b3b0d0a6981579b65705ee2c4f88b117a34da5f97cc072b1d1cd0ebf46511ddfdfaa5fe8250cb1be938824ed106c0d6232a4c19cd068f4e493443a71195833c42cc8c82402b99fd1597a8d42fc5b87961ca4f525641450a2a595ba881644fef11f726824d4ffa51f8ed3e269493a875de864e8abf461043ba93b4475384c89effc29ae39f3d4c669a303404ca4ab67be54f89d33d9c4c1bd3cdfaa65826679d2404b033632a7a8c300e5e77fd10a538fb017f0114a25ef7b756e40160a5b0e8fa84853fc4fd7ab9ca4d04bd5298f0191d59bc12910fe28f4d5b5ad10f547bd46f7b112bbeecab8a5b0357860fbe8a0fdcd879b86acaecf9b4c49d506533aae25b08fe89ada9838e8cd014c6eceec277090ff8c265eeae9a018c5f695c63ba35a22d0826330f654a6147853818c938d2004c92aa14d974c04a9f7fc81e402c63406937e33f9ac1d70b9643af085fb2e0048aff2c2f19f98493161d5b8a9f5b449a652d39fc8d5c41e28d97db67d7011c64d96a6a5d5370553407828faa11b722770225dd7381877dc875cb9bb2f75048b6cc2dfa0acd1f217566f55790e788e2056818ca51e870b780575dc553fbf56a93ab4cc4e628a9e829ff9eaa3f78d548741acf6f6944881c9a0caa2ee8ec0ef0bf2128b564004e75c92729e4aaa38d3b05142cecb5d16c65612e79f78988d06c9f06227a7ecf48ba9d021a50f745dddebeb673031a5deeff13869a218cc76454e14af875c5a50fc928c28a61f5a66c87051e41799dda68fa3bacc417e5e76d5114610037e38e41f1dbf804a526535f6da4f6fc065208e6885f679d6d7cfce493129ac40f6b3e52109c657d667a07295044e1a4b1793af187e16a3f1bdf330177ad3c3a95c6195e8de77e6e690682a6c5d6afe7f80755ccef1a1507a97e61e27c05d8850222b3b48c0cfddcf05646ce52fc74c60ec458b1c9f27b8c0ad9e4031f63379b3c0c1fa36b08ee1255132cb4985f2f37444c549abad3bba72c733ea0f8409abdce6e9c74af864a367a5d6102bf6ece44dee4a06db56be65119cbe6671d58801efd589608fef238371415d1ce6f0927c48792a10f1027336dd9792d79fc7ecf437cfc36cb5191969a6c3b8b56c666f1ac8ce803c0d5ee4b7802a37ac706c51ae7aea55ed6794e4f7b49d0ef8988df481614e6a115635e7b18a7d621fbc1a0a351dfd3a98fe6e9b52f60d89147a1d7ce98048e31176c75c31fd2470d1b0310267949e0a22af8daeeac9f0f2bef139444b85082c36158d43d772ed5a965e50955e4da6a7fd12f5fc13618ff78bd5a00509615151f659d4d05be69c1f0000822163bc4dade5caf501dee25c141be8701b6a7a1f20381dbaa964d7051c3367ba9d6524700b589321a698f8295344b00bb1931c6317e204cd7dd0ca20a4cc857ab64f4a1d304f7cac5b920e8ece2666c5012844a50ba885a70752dcdb7215b8aeab3705cdac571254679c672633a2ecc755cd51d4196d416d48eebfb0647fabe71670691a1b276b5590484610a895091071c179014f3d2cc0966e4fe9330cdf463d9e1cd5d889e8f350af098d4a3b408ab4b25653c42f3be95e83b2df285d15bf361af04dc6c73e666ae57a2faf072cb205b804b43e1541e0f70869674efd757e2086ead9bba9f8be02caa19fa56d91702bae353b3f362e15f143d20f921f0a81288fcffc2ddde9a3857387431759fbd120d9aff1a1787bd22e24afd98e9dfefd3bb7320b081b201d3a35486befbd9c294797a91583f509922908a750893d8ffc1a4a5a7d1274de2d2410e53c9204f57309d9f64bc39822551e96a6e4049c16d8bf9fd4a1e8101ca2293646f03031571cc1305dfe4d585a7cf9fcc07d48f1a223cc1776ec95624b2d82bcc21bea1d3a442a82a904abd9973d6952b93d8ec81a6a30a0afede069682518a0bd3e460679916b4f2628d7ac3e213cd1d47860102f6f228764dc5089bb156ea931623301c0a9bee7022a7e0299c11e22f52d0d7de3208919570260bbcd47c0db339b84922dd00894dbb8b202c58ba49a528d5fa2efed8acae1762afd174c33cebc02d4822d78e20ee2cde8e141d0d27bdd72180e8e272cc434b6a5a5ac932f2f82eb719ebe28febec46dbf74cd5de6d24516e585b25bc835a07867fbf81fbbaf0e5a6986ba3845d5bd537a3c65ecc303e9e4244cd48b7b10c7ab119b7f83f3abdc84e2f4cc7c2c87b1f70aae3aeb549b84f7e25ff3058a70c69200b389c5f979f4549219b03074c2063be3820421ce0f66d2083ce07da90359814afd17a4332d817685144b59760a0c39c3ec3ec7a15b719bcb0aa2b87d6b193cdc7200ecce096cff070b8088b98c451b3ed8d859579b5d289b6823a21eca66ea8eb9521aa7be1e5f7278c85b5448ddabab205c77988cce78950bd1ddca1ecfd5a8f0dd1657c69245148a6ddab55d20aba771f178426ff9874bfc86e200de61c6aa50abc65ed91bd1125e8d7f8a977dbb8d11559334a0d5467ec09382d224aea20fcc5fbb4d7d2d9cdd73594247943c5159ce2580b8e1e93c1c537d578330afb119faaecfc595c90e035f851d37aa89c6a59d1dadd69308216df44e2fde72b937231829ab4cc14ee6061f4cd468fbf85e7a0da0f134398a909ed0ac6bbf3023e62b579c9f91167d017a31d6b09dadbeab2409136cfbefad4a86e74c5496154047dfc2e4600b9aa25a72251300c2ccfdf21fc30114dac77d183e365ddd372f1bad8190ab7520f49c6bca6ec968f72339f4442d26c6a8527f7010190ab646a5900b59f8a1b254256e714f5cc640db412fd329683d8a11f2460f8e1feca1d1688c336d246f065e0690d00c52258bf9dbfc88319bef3d35acb44036622f47824c022cfff01e0f6953473cf9f0be029c2f34efbc35ec653b747275a0cb7709b8d92e195d6ba9787c3cb5d3c0a35f0159dc726eb898605f19994e114961844be00e4e29fc5a371c8376ccb0e387621e38f0035c98cc5f3b3bdf934774005954856290a2aaa37b7e948dc2a147b81fcd5e3097d5efc84f68194d33ac7b99a0abfa1e9353c4767785dbf8ca939b92e879c4b636e4ad3a900d333eb26cbd507817d684079ed54cd03c758a6c09879c53f4e93db59446ee594118aa5d4b332d1f287d8338e38d610dc16238046182853acf8d401c13d921ed018c4b3c816fb515a0f8d931944f2fd104542157e658b744aaf75c3684aced82a3ac732912435c4f191db6a1f7c23a43197863931d345e8f4e3987e6f91c3630bea0fdfaaea59515c16151d25a6aaa75ee553a56a7354560b71ed12b64fb979a09852ac8df5255dc5cbc29bd3ebfde844aa9c120900d1171aa448bad1b27af1d841aaf13b07497c4a6fa113a36809f076cf66d206a020c1417710fb2acef415db7b748ad96939763854ae4962ba4a333f650d394e89db2a4e8c7d09d81112de6cc365768ef63e2e38a37ad84f1c6437d434886a7937b8e3926b033051da42c361213cdfd1df015b1e8fe7727cb50894217443a2550be0dde6e6be29b11d045062f96b881995a22d4e6cc419f8a7584a991d8e767e8680ef527055b0e4dc789ca8557484d424a6e20a4d749fed153aab8b6de0da7f4a941851f2650311bee9d5424a20a7897bd84c8f0abdd1284924894e1450f0eb3790e0da660432ce05a06d49b4c7a91d3f45b70ac56eda3ce541079b272531de172c9787a7f6cd401c6d11b47023d23ff6efe2f200007588d8222fab182b326cb3f5d64bd010250265f0567c69847cc03a2c247c53e39b20a52c3fcd64472bac2dbc892b88c5bafa55f50e169dcfabf442f66441ecfce1852df4fcc7fa56f08a3f28a62f1419b9a8f9895058193cf1912e0a0291211f2e5bee83e3fa2328e99e3ea1fa949d852d98b47d226d7ba291e33c353943340c339ce67e969b819288cb35df315c7496be5ea95f6e96a81b5ca377b8552616ab4a46696f703dbd249a880401492d9fd37c44f9984d57d84621a2dbe277be582a5a7a518f1669efc45542ad7b3842d857c69ce795e01a71e84fa377bbb818f8df9457332c370f3a81af065cd05d8876df989b25eda622ff1ef9dbbf04015abde1d5a9f8f4bb87206642464c5f53f91a829125b7c2acf438405da25366641e348925d3e87a84f698f66cb618a387cd2af874018f4b0f6cd600a8b9c16c32e56ee5d65adcf9415992c0e5a759ef4f76a9875e4343fab328e61097f1d5b994d8273ebb80e6eb4fcdc6060c45c9cc2a5cba9257ae305c211c469081c85f415e10435e5366517b3a6eedd05910173dd93f8883f26d6156b6699c91ba6a3aeeb87e414c2537a15290906c2d209811be60048cc6900b68dfb323a555e32f7ce818f43f6324f4bce1f0d749d45d78fcb48d278c0a10322e10c9b980b8a1b0a9d118b2bf76c6948077f0041db20ba57a157e41e5ac4ec61079cb87d885fe1729ecb54b5fe456a56e2d976ae679e53dec84ab2b7aa1caa560fd32adda2b3fa4a082c16ac90aea7816101ebb7b6c7cf2bb0358d35a579b23957c3bf414fe2898aa09f38d40a10f7df60097624cc58e83a2717293ecc7b738f98bee3adbf9247a0d2ef522a0658984f90f805c81b5abb1372a1c619f856f342e3a0baa5622b64c87604b09f455133ea653cd1b6e4aa7651595f01d4ac7c6ee0ac02663004c92a41429ae50d12e38dccd9284e750339c3828a743d283c2f8a0946e5e02f56541f16204606144cfcf06d422efc7ea1fcbafdf4060a5dc0820cb783bf458f2f305a6ff7ef5511558f6ac8eb138bcb4eee2cd9ed97e09dda338686c6df8ef2cea06919300b0ab87423bf71070d985a206a8d4c26814c2423a37b5e308bdb9cd124d7b565bbde7b0ee106f2e15c8225db12598deab2bb1bbed364719bb214ccf899df946573f96801293932038b782f82202c0947239bfb7a8195f544b34f8a42936d7f9260c3f1385a077277992e028733dbbcd5a1b96f9a5c0f2a0faa2878224e05f65c17b7fa333eab4368fb850268e5b026eb10a84268b2693d8987b8e14e09697ca086cbac2a651aeb5cf47cda9d76f84c0bb6eba77b93cde5d16432160c4c8999a66718b12ce9c96f4b5f96a6b02a6f025e247d859b53b91297156ec06277c69d1885e382728203756e27cfd7f1883b0f98b941a735d3de3937efeac62dd27ceb1d4fd02c09fc39b1598a8e4329a3db20f16133f4db841338b2bff684743fb24bec2a764b5f7a21179d619962382b7afe28427b007c4f75d82d780e9c60fbe9cb43a9487e8bd20ee4c1ca07af1b4f08274c6e2ba18f2c3f1f049924fc91b9e05639754b32969a3c13a68ebc738ba57a3110952a430117b601faaf735b889ae98281d59f4020aaf85f9ea08c9361c2f273f8fd180191160713557666e1b0116c672750fdb1dc2dd7cdd2f8ec3a506871c95b50c35378db4571873581df9f0cbebdcd552d11e588a53c88d2e3d3422bfda4a898ab14dd9ca0f2ec8dfb4133189541fe40b0c682a24a581d8187687889112702229d7724d4b7316990c67bc38f5972d9f460517154ec5c580bd4bd87e32a9988bd02d2d00e02d7da0cd31588831f3b2b7adf665804fa5bf1e26f97b1319de5e53cc6ccdb15773efc1a1be3efaaa3955b2df82e9affd702314cbb97dc47be18750b012971239bd3dfb27e39d0f596e906b5313b2c4c9cb5c38153b09ce8cd5d708bd619cc02b8ffd1798b3f1f49dbbfe3372588e07eccb15f3ad90995df8547016a3c45685eda812e5162774074b5c0c0f183b838f0a31f8f6308633a0c0b710cff2c744326a6d869c15054076004eddf9219e7150b02a33b41618e51852181f8b2e68a204a3c602475c5595c735856e548a2338831d237d97c709b0143a7f76500704ae17e86d2492f2acbac728b5882ad4a8471ab8bae304d04108fb14968a0bce582a6ec6bc341cbd4c37995ba4b53b7b53cd46e54aa0c508d6c70d5c76353d3f40a630686055ba955f542ce8f351806830a3be06a7c3161a360ab582ffa5801bc1c5508f20116b9c14dc81057971f0a69521d37ce720413d8aad2f70b45763c6ce5a2432264daeca27bbafceb95b0dce50680062e91c9f375070efc0ac04575f185dfd81e4d27d8694d0646390450c294197bcf355485c02dd647d3afd110967459e683091007d15dcb4cd652a19323086bb790ea415b53e59bab73c560e19180a79df88d4c9653ab6fb20afb73a329bc7116ab8ae7a6fef846c309166459e6b7b0ee4bbae6ba12ecd59f200802b78daf7eca6cbc6c99fdfcf7ab161500e961788cac601bdf6913848c629fe1ac4429930aee8747e969faa63f4b576338d415818e34a1e225f8f9252dff1af7ace268fd74273efdc87206091c15013b418a7e360533e28836840895e8fda74d726417ab060067e18e029b8849dc1d9971d94b89d6e75613ec497bbc2e3677c8bba16ce8d9e0c585b7da6ef54281751fb007e9eb345d7990b3f8c7fb1fc6ff73f1566ae16876931b8fdff20bbc060630166d91317d3172ef52ac43fd8055022dfc191b9a52e1cb8a22af34277a7ef3e3f733c565c834f580c74df61ec1ddb5f9524b319b34022b062cac73bb61671316142297d1dd8adccb80abb1a3a34b32a81c72224e88dc826d08b315e86e1e3e2377071c0ad0c9c335f5d1ab8d5172e27d64ecd5a8a89cc280e77b38620b0dd7d3db57ac585f3e8a79d6e2abdea226b8dc1dab7f1d7a6afcc71ab695d3e39ab9584a24bd3a5ecbf9ead6bc3a0763ff17b3b28d15e0228bed2f4936ea19e8301dcd5aad6c8dbad39ea37a1619abdb13e7740a5680f2b76fdc5b8e19887f6b5c97d214f979f5c33b385e8c9b041941557303999844ad52f8a39f67c96e339841dff717dc496c440fa91303db4c60730345f33925916dca24cf3e2706bfaa089666a7785c84a0eb488f00fac589183dd8fb98a282548502b5ee46fe0f3012f5df5bb5121e5baaf760a0af427e76adb8ec305d74c371c938a6710d566185650df22f1ab63c67195a83792199cf1fe8b5756363469fbb9a60e69eb8bfb3751765c38522cb1af9ee4f901f84628ba8d5190750820a3c1b5bdb82cca9dc230202405bfb5254bd7f62496e027dbf10199f1a20c8a198523ee3c88f3eac436e422534661731ac310482e1832302450823a62d2f86a6da4618e171b088b0fd62885007654dff341540360f0d0d1dfbf7928f696eba02ebdeebd1ba63bc31c2a71032300a45714e078c771a7200470893ef0c37af8d5916f08d9e36410e36205a0d1e6875f47f56da33f92a0c2c23c1f054c3c3acb9216c9c05b1f1cddd3189e33d1a5a00ac82a92fe72e7fa43707ee19b0c537f8a48a63180bf17f9125ccc3bbbc7f48a25da3d9a7c70b313617530516e2848a28cd818213f7e97dc078206e34bbbb27cd90d044d8fc249d75a40ebf56062b13a4489d3ec5c4a081e9a160b2413809170f0cff8c569848db10de2fd10bf6c90c1cdc0d3fe37f68831a91f7085ddb62840a218d21483d2b0b607f669f444c4f00c82640c5f5042d7692852325597a19449d74b3b129d692e41bb3e6c01805c308487990989d7c11bce02f2bd2848ac452fef925960df8d0528eb74d92ead9bca9b168afed94b41fb1d7e45f1979991642da889b6a60c05e5bb2d8d34d0002c3ffa729e936f627bab1b0c77c0a813a603cf541a7c4f4be7c09a629c9530839bd9b50dcd902ae821b64e3160ff72d3cc08b286fb8519f90a1edeb33d549434382c2d5729206010ff544b00aad593933c0d0c7c84a4407a9f6d9a7b5c2b52c48eef9f8cbdb293cc29ef752abf4b77a93390c8252f2d8229aab4e016c803107529faef58ec01f02a8565ba9bcaa71491329d1484818fa045ce3a63688fe09ab85a36741eda634048615884b2b694f8cc2370f8a2c09d97ae4fcf1751891faf5cea6ee1149683354b6a44212176f47c5c8b9010ac547fdafa6b62e7a6df395a3641ac2bda763c3dd9c183267b5fb7385c3e94362992855e39a9364a7abd41734cf6bf88f2d646dad9287391547a814744e86d3015ea315c03250518e93ad17ea10534f8b79ec7ca94d136fb4a30d5a3580a4ecc461c44ba37a54e79fa5f09c76adac3a440f6e164afda51c93af9724ec99776491f5830ab9899d38d584f8d0d6e9e9977a8e3551d612baeec93048e8dfa1a89317fce23bd7413c32ad0e5bb7aea38c4be334eb4a0c3938e46fb7aa19df6a238aef80f60cf6f5e82942512604cf2baac26a07527c077afa9f119c277d2996882276b807ada457fc55532d969fd69e02740214679e03458ca4f0900804055aef700361486078609104c079f4679305091004eca27e7f90eecd3b89ce8bbcf688c42351f0ed636b8e0fc07808af3298b6309ce212861058f533ce276ba4b7b4614aeb7933d271dfc36698a5f1196abbd5900a0a25e119780460e10b06c03ac8b03faee46965b3014566d0e090ab09e4c5f1096b2c6a46e414cf0526fecadefe5a1532f7f1f407fd29ddc16a545e5cdfc03ab8cc097efe1b1c09fd80088f0733bd21d9cf30122a6c5af2d6ef9508b6e2c4243c82ebbeeeb97e9eeee95dd5bca946486094a0924091dd796ab5c70d3eeee77e955b50fd2f09db3e66d9cadd443dfc211fcc6b2064ff41847fb16dad4efc63a5ac6d1fec5e0860ba04360e8dcf074bc933cd50a0aa944f8e6d441bde75c81714cf78c2efbdc41d33a9a6718478e26659a9cb47a8fa81bb452b2c9e936f490eeca0537addac6d9eef3c015589be40d991c33acc3f3e9343b5807759449bcfd9a1dad0c2e7b6961260ecd06049e8e1c4c0c3e7168be85363d46c0450b6d9a7a0d6daa4b0540d14e95e69f38a78aa23070b9eb7a0417cf290bb0064a2883081333221f9210c1c10a9126296c64648aa52418b181163a434e700321a6c091c28812f44064052c4466c05d3817455a3a5892640c19112fbad0a573bf15888c81e2bab977e65b2106faa0b880d270e7b257b773f4bcee542b57670df06c92326fda93ae230284c7a3c9169af4818a700631f1581076f724f281091e911dc08e761d52f8ade0838ff779df0a330e01458e4019e26ae1830a6a6b055ab7c35a1f82a035e83c996e471122b687d7eb67c9114b468cd1c412e8038e898bb9041ed0a08c2e986002308a189dac056211ba3c66fc047291d19a0cb61a742be4603d952e5e1e9f50437800038a1e92ae1822084828f05a708730b344154763084167091ccebb51664666e4b499f666a7267ffae1f9e6741478ce4999681afd99f2734a40f4e6786adc3bb3a0d94a3fbd190769ca28b9ec5306f35196e694458b702fe93e2323d3020f18805055d78045b83cdb8670b3124cedb771f911a308a6e32838f661d59aee116c3ac5dd7e02b962f08ec40d0cd9dc0eb5bb1d3b88e8c013d8fd0472ed84c129b9e5a93b8810fa362a3c4c800832d35678d63612baceed88ea446fb2f3ae099f751e4d5a3bc3d87292380abf1eea851905902b08a6f113c8d5fafb138808124ac6f1e09b293386696abd33665ab6c16af5ecd3b2a37600fbbeac63fe7410b4618862328517b42929a6229316a6d99b8a985c3e3ff4ec537ba6ec05794da827f384ea97b34865055ca9d5ebf9d686d470e2901a14a46bea31f134d93445a9b6d3ac0ee98544eb9e26df1acf776b49beb5ca3dbd2a4d3c48ba9a787a557aaff75e1e8fd7639a3a2bb046916707e7aa3a337bc972f32c39cfce1cd770fd5c5196269ed96b18310a27f08e436a3e96ce5ed30ccb9950688096e33694100572e2909a6f0bb521359f16fe78794d3cc2b967f28c7842cc8e499de2db4b9647911d6167c67417b4536a7627889dc3b04765b1aaf8c67b793cfd6ad2e3a9c08c696de7f5bd63a4579ac6b339f5f60a4c9a095696b6e353bce16e9b08863dea6d69a1ddd2d2d25279b67c28e590e7c4596382691d83c5d7fe9918701b10fef0c1cd5a6badcd16853abb7c541919cade5bdd4c0c98a12af6994ab5d39733cf5cebfad8c21f5edb19f3997c30909b1c72b05435f9873863d8c519633b6bf201d27248b5e10f4ef919fe38fde872c873e18f7b19c07d7554033c53d955ffc006411004795a141bfeb03386bd8e76c64cffbcc99e87a279f8631b67cac6fb19b88c0f3c1db72cbee93dcfce44dc094464e77936392ff04d18afb35dd7596bad9d4a9ec845b3436ee49917742a71111bf1ece8a907914148cb341c30d7d9d02778d3ab8f365293d4d9a849eaa6266ed9b296cd907af5397f3b111aea155864d4abd0a9f751af40a7e2fc761ecd799ee7792d27d6ad6d91e3d1dee7799ee7793d866c63dc928dd8a8577cd4ab6954030dbda261b251eb2973377bf5ca8d2dbbe25a2f6e0f19b593166a99f6e40aa181c6bc99853dadb5d6af5f5f95260d7b750e623226ab5f1da3aada45be360f5ffb86afb5f6ec2bdd706294b5b9a88a3a75236f2c51336d2c2df51a31eafda296bad7d853e76992f63449b5d78ca11b8e36569feda7c66cabac3e4fbddc7e9ef2e8b5fafcf42a49afd8c2b6d6b36bcea383284b737656d284a88a5d48683633e2b2e270c5a9f54b6a922a35d9483386860be89b2629d5464dd673cbbec179ea7dd32b9ccee9d5d6eaa64944a0e1a06ba02a4a50661df80d9708ce972e35b87527900f4a5fa2c08ae217f818284213434d989ec8bedb64d3d387ea0f85a299cf4f883179470e9313b7bcd71de43ff56abe0b0c79832bfd8c70cb5be9b7db4933b52317f5cdf680e9e71349412ef2cdadc138dcc9831cf4f0912b4e609c20f83805f7f4d309328078f68952562fedd0659f0be05103d5bde9fdf459c7d2865a5d135dc061451365d4f01c64169536bc0674029806824c295c5f470e387b2f85eb3d199af34d9827808a6851773b57d59dfaa7899b7f0dc4439219199f6fcfd13b1cb03160730e484d519f359a6f3733c906453c30c1d9297244d5438ce8879c239a34818a56dc88580b147d3104105b1c21a1c3067eb064093d38a2093bf0a2a65da67da65d64da5ba0ed32b47d86ca685725df8429efebab8bd5c811352bb313bc9634bf508d1c5153bd855e3111d1124ac55923ca7292a6c69473ca3abcc6a1a1c9bc3a77e7baae6b4bd1e995c682a155d599e00057afcae9e4eaf48a9fe42c8121868ab479c7c25455679b62f324d6e4bcd55abbcd90d84d136148fbcccc94a5d5bcb4727634aec62be7a66a434bdcf6d569a0acd6344d4b0169efb106aeb9436a6812ae4c8bd745552db31e84b26066a6ac1e49aadaea049a64e609a0663e1cfd2fd6030e97cc339bbf962e58c94f2013f07c7d1a7a687d75214b9d6b9aa6a5341ff2d78532868f1d7e67185d97a669da7555ffbeb832987e260d02be7a0c4d56185e60a1c9eafe5bd02da7d0921996960964738939865a376f7293a159a758751a6e5cbd32d2ab09c4c311e37c35c14d3da1f2eb2bf77ce509f4aacac4d02b6e62e84bf0b1a8b5ca50d6048c64268581aab4264cd63c421a420c1e7c61839793c91273e0c30d8844818219485153271265c1d0ab1fdcc3b0b9ae7f3991aa738bb26c5001154247479ef882a7a62ee00b590e706e9c38411535d565a84e8391236a28174d20eaa969af0ea2288bfa4be6c83761cae90412b3b44223d7ffa4d42bebeda7259656af50dce494d24fe4a7a21dc2a38c297126410543688594fc9392123e665a93069c349f77056bc05e6027cc6ac07c9c504580f4a5f5209aebc337894766784a470f66106349c29de1d65590f5aa8469fd0cb1864fabdaad1d6bc0b6205a603d302207372059020505768ac8a20a2894f021065fcace55f5f40a09ac579fb7ab7c7a45bdfe11123d426a1200b326bb8841ae242cf4b614e86d32b98e7f61188a286f7a501cc0a7f8c7604a24408fea5baf0212e0a7c976702400acc9949fa08251e86d2cde7e526271eda4a4828f0a3ebd0abd5d859f30e5e1091ebe781886a177d823ac95b2527e4305272a08a9206bb2fd0ae1d2232e4e809e4903aa00b45221e60480c5084d9ad071b402b6a9e801368965d57cde73163dc08f22962cf49e73e2e73928962c44b83ceb55d944aac830ee29e2963ceb79cf79e6f54595eeb9cce69ee73b7258f798c7c53bef9595717ae5398f49c3ef39e7785e8166d51aaf9c4d9493c97b738af7e615efcda3f792def3609e7bee79e1585a0b8e13c61b35d0ae300b2698008a8d13f83470c48629ab49a24c117148711507f29406d98b20c5e78b350ca949019232a638157904adafec299ba788380c69c55e2e9c9b12dcd0aac961480dc7d0a4e5c1428e26ed0a91ebf955726d577b457dbe06792cef12ce8928773439bfc93931f4691ab967526e148e6f260d4eaf4c23fb3469ddfac74e5cdfbceccd477d6e64d88cb17e9bb8a09b46be29eb977c73e301eee93eb106b1ccf1d65988704b86754c24724ba4a149eb2b35b825c360d4de8b4279c9b01ff3ab5bebd6bae5bc9c496fa7b596073c20bdf51ccdaa35d68158b7aab73ecb1d6fedb42a10fa723ab1ceb3ae41247cccb399476621df84e97ea149cac29ccf5a6d0da6495add9b9c4bca934b9314753ab9f44a66840a5e3f8184f0f901fc041202e75d34cdc96659d7bc6a4d6a8e030a48ad96b74a53e27223ea36a979e9726a5203756e75ea1acb1861a90ce5c682524a293ba5dc57504a2965a7941b084db9814029a5949d52ee2b6028a59452cadd58cc504a29a5dc57504a296d2c28a59476134a29a5945da3573073534a29a5dc340873a6b9f8892e6e349710ceb65a2d211c14ac545d4ef0a074c58e149c2545eca83d43b634e1c28734ea8e8ecc601acd19079933af0a248000044bad006715a01085b50c7c8078f66dbbad56cb890c0b1255c040c60a4eaa4204d1032709d158b3f156abe5c48b4d2d8076f0623e0872524188265d043959b1bd64473cfb154228b75aad96102a140425802a900002ca8aee566b3056d204131aec0a975e09a942aa103b37b3cf6f6e7610544a7b540e22f32c485481c4f39066eec199296df6d6e12bbfef3ac7eae3002e1d3b9cc3395e6978b64fdbd5e4909f817b4a79a4e25302da31fa01fc040a62a8b96efbcd78d019384b3771fe370b3297b6ef13bfa1a7af4d4ac31e1e68a7d5294891f026cbb66aeab88c83bacaf3cf70aa306740ab152cc1b99ad9c412f57503c2b9013e0523bc9ea618eedc127c4aef56c7539334c8e94e1a3e6d9ba7941d78cd5729297fabcfea73a63e65536a3f5d736d2c597e8e414e3fc910e39bfdcd46fdb43fe7acf9e634fa07f0a8637963893b9d4c59939f3c9a9ccea3799aec41bd53741cb58df3163b2543906f4eab1bf38c48ae6bfa8562faedc165b0ab9db447deb9456ec9497efa0dba25c37e72acf1c0f533207abebd87bae8db8f5c7e02fd20f4dface14e209da19f403a4dbeec8a30817e487aa01434f9989f402930f2462415c163c451b9e57c7b4729b37fe3697409523dd2b7d72435261383cb9af3e899842ef1817dcf77e579aab444c68ce91b6ed948df7e5bb7ec590b356d7d136e49718cf01c2d3969f1f9289f4fc3e7cff0f92c3e94d384a8a84952cec9e7aff87c159f9fe2f3efec51901ef4229f254b499c0c1d7de7f3b7d8db9ff784de86a8f5364f8c7e8979f4edce257151925c264f74de1af5aab4b3a39b6fb7b3a25e4d209da56fef56afca166a1cd6319fb266cd6a3e65cd9a09fba1b15ef158216ea75737bd9ae258722f1f4b9b83c2585ad90963699dbc8c2587e4db652cb99f4f8d25b7f45d632c6debdb6d88767ad5373fbf45b421da3162e4d5abc6e1e7a3441ba2170f8f51afba043f9f866843647474a4d4abbee1e7cf106d889496968864bdead6cf67116d8864444e889c08f58acbf8f927d18648686808a757dc849fbf22dacc707272827ac54cf8f92aa20d51509326b356af78e9e7a78836b3d6ec66764384d42b5ec2cfbfa20d111251125112d1ac57ac849f6f126d8866444544454f827ac564fc7c14d1e649d093264f9a20f58a957e7e28da3c414a4a22c2e91527e1e783a20d110e510e51ceac573cc6cfef449b27b3a22258af18093f7f136d9ec07c7c62bde2a49f5f459b27b1254b947ac547f8f956b479a2b4b4f4d32b36c2cfe7449b273f49923c91f58ac5f8f99e68f344f6c4c9132742bd62a4177a32f46488a8d52b2ec213b5886e886e6c9e18f58ac3f8f92cda3c316a72becd93a39fa1cd93a3a64964b0911662318e6bdbe9d5ecd5e49f3b50c2cd97dbd2b76f3c5e6e3d2f03a16d8aefd7c6e4dbb7a1de8e98ac46357171f0adc477d1f7d1b7e7e596f4edd632335ba733f073fda2acad45554d596d326dad97b5fdd3adb6467c2faab428bc35a2ac6602cd21e74b6bd4432dd4a2acce62aa963059db0d53d58e846f2f5144f876ad5b43f8f6160f3814e9e17b13e2dbcb0e089d245f6e38bd6adf5abd9a403a3edfbedd74b9b5849aeca126dcedb70bc4f5c63208f8cee21ad6a48173cbad55fdf3ad4559d37e9e6b9a53917ea2e673c6f053565ae2a426616e7ad6424d6a585c4e6a96864435a5ef926fb4d6cdc935a2698d5ad55e8246dbd24debdb3524cada905ad5de4a1a1252ab859a24c1ed8a5bb6901bf5e516ea9c6ff47cccccccd6ebc897014519715671d94b52eb0184acc28ad772b408283b495048ad7406d4d3b6c9d512e46c67bb15970e7672d0e18b254770a204567c44e85962048a207084745c272fc7cc0efec18a6fb7367e02fda0c49b7e02fde002ad483bfb4c93dd39fa9b33a428d865a7535018dc70c6b083a0575a06019f8e768bea19d55a45172d0564f396ef7e3b9a1e778f332c4b6b6dd7395531bfd5b46ddb2e55f16b94daeffbbe7162f1cd1c5aad4d52dbe43cdd5ac16ac1ea63aafacba3f03c9a715425be3975cc8d7168edb4d4343b639a85f0dc19047cae62cc3841d3aa566bf3e947a6232db79f4e858e482992c25ffca003cbccd4eac57c9263664707d147fa68d32acd31b36386257431c6131c4e10c40f807eb8399a31257411a4d31ae20708f0041659323252b4842a5a00c514562c6dc103b7858b63306cc09020497a62c415b11f7c0f410993209804818727807a0b21be7800173b3c59284145127c20064ac64531b5e0f901053b0002113e506861a4694104cf8b19a22637687df1041227d802872d09b6fac02180470b2f14c1e23f59d187a26d53355d1b4bdb1ae3981b7b5139cea35e71949a6ff403cfd9702e90e0b7afcd1cb79249b9e582aac165efd36dd2d6663a85f775d523a787644eb276d552aeb55a43fde93ae738d7eadc3a8d56af4ed06ea1c2387a1baf122e768bcb5e3bdfc892eb1440bd3a17ba3082efbc8a9da67d1c2ea0736104cf7927969c530e17c039f5ec33440fa22cad87aad863b31fa1d7600500ad01402ab60ae0ac2b908a3c3b9141e6e737b14093c8dbd310671b0035035271a27c5ac5220d34d85baf1cf71d00a462ea3f1a908a359e138fd0704b8345bc3a402ab63c271e99e128e268778054a4f19f28ba831ef640f934c9d672a81f14ecbe660c7b900bf5aadaca799dcf89f64b0048c5d37f3c402aae3c271e71712b1e49798b988aa550441caf49a5645495124afda45aa99b144e2a27e5d2523848e9a490a4785246381711054305a19aa09ca01032a06b66388a3dd583faa1ac94b3a790348ba587d270984df9a492a096781332e584452835f4f243a282282b0525aa5262ae6ce034ca67ae6cf4304946c1c42b83a9624f89f7c854b1dbe861ae6e1136707a755f4dca60d29c9cfdc660d2a838fb4d62d2ac38fb453269529cfdc260d25c67bf484c9a23268dc9d96fcfa44171f67b240525cab2e1ba46dc174c9acb738b98349fb35f175c22ee6bd26c365c2928310270dc67078e4c0d0d2faf0d9efdc27a051aae0519a0f42b666e642bca14cf6efac1b33715cf7e9d3c7b4a15cfbe02846757b1e2d94f42cf948ade831923c58cf181cb9efd37d199cc1828664c14a237a92771ce9815f1088e4c4dcb4c4d8ba7dc164711416039378920b820403d371e69194bcfe2d9759071a267f72ba601f8b94f892ea32a761a1ee4412c3d94a592d42a7695a567bf79ce89e904ad1879f6925ce1117abeaf13421f33be8e2a484a6e90a6d9ef412aa23c271e49394a6ab4e1a22aa32fbd9c21b2d4105962a2a3448f51157bd843592c3d3d0f43410985a5265ba2dfe8c07dfea757aec424d9d9c31865790e12e74119b93acf1eebf912f56568f4ec34c4971faa62ffc4975893ecd745592f4b5ac5fed2e4d95d3e50af8d8ee34fdcee8b2205253c93a923052567b7a1d3ac19ce6ec335437c49d22af696b08737befc20e1befc3cbb0735e995e7ec2e7327bd2a8328f50a747654cfa4596a16008cb48a7d68a8a8e8e8a8939296be64e9792e597a7cb03c48519c57b1e336d76e0f276e224f9782921043a4a0c412f6d89c25fc51df85e5bd11004ec52d51b0a017d829b4e95a45ce6bc09e5d7bbd9edd8a9a6b13351b2ed651e4d95903e2d986ebd9bf1a1640fb1f0ba00d704e1a979fdf0d18008ca25669ccf8419b4d282e2873c6b4b3786fc30e59e920627c13a683ca70f273e967101394feab606dd60de73a780d3726517dabb4d232a579f520a8df9cb5d105ed35d7461a9aac0e36d9f6e7321258cce309d5aaea558a5beb0c176087f8e6e7258c75f959fd136f3ed7c16bc06aebf8752027ce9f60af2c7b4e390fab8736057041861335efc21e9a0535919f1f043b7441e63be7d7ac17f6d82a8d5980ea9f386316a0ba279e184775166f93d6bbea431bc1266b131fef70e7a4b356fa3c99523ef27da6d924a887e7a6351b4af2b3a39384246b82a407e7a668164b62644729c9894ce6c691a6c3ceb226487a2a4ebd299ac5925023744729c9890c86a4731ac7a868498c5f6c6449690a3961cef153c6ea70e78c21b9252eed1c935be256cda4826fc29428ad6f37f2f56b653662b93af2acfbb925a8331bd2d92e8ac96724ca9a35ed3c6b6d2c493ad6b144690f001c4a5067a759211255e9f48a82a72f7956823adf1e22d11069924f51784a4dcd4d15753ac9599f3f1bf6601ffeb6595c341b79d6ba3c5a0e515a9c14dfe69fdde16efe3137f8cd664a2b8af635fc9c315bfff779153fdfc412e637b7d74b4795b462807150df52dcea7053c60d0889247f9b7bf3d90265590cb00e1894a0fa81e2754b59240ceb608171d0494b98a7a50d7fc7203386cad02475b273ea2c788e3296a8702c6fe7f9927e9bc3ad3e9b14fbbda323cbf97d4e33f1d6032657f4fc0eef34f9ee25cf44c8c9b7c7d04596e4168316875bf28ecef70d0eb48c326a42d7c16b9298de0ce8318918ebd352e79cbd196c6879a07f061b5a56ac5ac3fc8c69bde6552c617cb073a50dad17629f1d1c83c07062ca85fbecf799294ae73c3a86feef13cb1bbf9532df95b579d659daf0cf38305096b5f7a250ce9f9d42386429b4972fcf2ec31e3375c03071b4b38793354355ed9d6567d15271d939ce190025b825e77c33bb58d4461f2d4c1f95728ef6c2909f62aa7a6999ad1d53757481fcea759469b2bdceccf44c873d369f62992307ddb4d95463cd47322ed7a3df6ae53abb6e28299badb4e1e7388e718fe0d89a10072ea326741ebd859ea357379a6487a155dd53a8a7504f21f24d40b8658af3e95a8a1b5d20c79214c9fa757883afbd7a3c5f366966be3a9049c37ded3a14a7aaea9d77f803e581cc98ea77e99673090b93861590b2a1290b8ea9d0e79b6ca8a75cb8297e7dfe9ddd9378b3b8d4c3ef2ba99b465e115b10532aceafe2a12844fb94cac8c2bf20a642d79270fd2740595d144abcb0828c1718a18a9aea18a02ccf084750a0e4490f4cbaa8a90e84b26611be60810e39d842891c14d40cb9f1a10649512871a254a4a6a25c5ef744845b4e19102fed9d4e515ce63dc00199d7c074d3e50d8bc94a34f6edd58bc2cab2ac25dc0a9c5847b79efa37c2bc6e0903036591ada232ac1b4393ade22d5807771565502e0e43364be66727064f0c51831f245500a62848059aa4304f1d666ae31744c31f35043f678c0d38df80518613ebe0a76e35a26fc2a09cdd321545da472c5531e9151dbb869680b2d26ba38fa82aee7c2d4af00d5354613c185cee586c850577020de1e4bb287e020d11fb0934c44fa0217afe3e47e0c77c991ea89e745362c1bbc9f415b76be2d2ba6955085ce7c4d5a273db795dec56d734b79c756fdcdcb3de753edff39cedc86dda10644e37605a55bdcb61fa49c92ded57b2bbb6d6a6e272291ba53d417b390c670a4ef1c778623aa9cfcded58dd6ece713edf32b7695dad702decc1b5cbe12e59efc13763b893c90e416f9d73db4d9a0236c9d6ab83acc3b25827e7dd580300ae6b7d7ef7c210aef211f7f56a824740ef380f1f30a406e4c0f1f36e4435f9f9a9c92f850c98ffbc3cfde72cf4ea73985efd9837c8cf73f4eac77cce3f7fa157d5bfcfb9cf7e43e87c3983fefb1c9c305f83c1041331a09712254d38d12ecff332c5f36f86dc12dea2c98eb3f3eec639b250935efb4c9a76cff9a757dde8f947451caea7d47a7dfee63c3ae5def17a15b5b1b4dba65df62b4ece69d2f36410d2a4e73cdaf340bf4cdc4fe4229eb1bb699bb6699bc674738d7dd4ef916733c6f30b743b6f2f65def34d6e475ed457185d8471e4c59117475e701494521a0614dac6519a02ce529a026b99d8a0cbfe040f76b004c8892662274aa9174c58254b24d1410e70f0f3529598c1f8b2e5fbd230597c732305df5c6bd9756467c70635f0a1c10c288b569fd3ab88a2aabedc1940794e9a6c2af44d95beb7a06fdf6ef065cb742a13b986e31a0aa3b219df29712d4f878e7e4da98f4be3547a2cc762b19856a9760425e322a59bdcdddbdd5e77f3816948db4b4b6a5677b3c1e86b83d1d706a3af0d465f1b8cbe36187d75ad0da6d54a5fb0585b0a5e5b5ba84dda86a4553d3b3bd448b3b69f56f5e6b36377621484c97ce84f6f2d8d0375be74f9e609eb9c689d4ceb5c5dacd36916c8d3c9b65827db629d6c8b75b22dd6c9bec157273b8517d6b94019ac6acdcccc8ceaadaf66b4ed1c354bd396926eb4a59c9b9f9b4ececfcd88cecf978644dbf5482a3e97bda4af31be09536e302bbbe07324275eabd43369aab7f752b3b61b0a23298c24298c249bd2716b6dbcc174e072f9ef77f8b2db5cb4f525756d2e6db6a2e4ba3ab76083b103e83269e64653fd360b468a6951b747fea19b56766dcedf5353df96b4aab718a829f5aa67d270de9d4eabda87868a8a8e8e92b6d816fbee5cdbcf9664f3a13d3edf4e7b2892666d4bb6d8698bdd98d267ad533ae79cd3ebe4589dd4aaf6a599e43c365273be6d9bdbf15eeb30cd429de8ab42f16db5ce39e7dc7eb83c7594c39037ae25c51c33e28ed0070a4f47192e6e3b07224d5a82e6ebf2200c4caf98e5d2aa76541928193e41d354052d4c6b794b5928a4cb32b8ec934637a3f358605682b8ec25ccc9c600046d1297dd2241012d0c2e831689cb7e440a687b2ebb3d72d9ad1197ddbe600668bfb6cb8360d0002d0f0ab4455c76eb821aa025e2b2bf5c40db8217d0b2e004d0aee0a200beb8a46ab4a068b8a0a070020fd2537f661ecde2d76b524a69a9e2c56de7416990815f94c543d629e7747440ab603c5e2b709647202cb25b4e241928ebd44894c553d5de91324fdbcb19cfcb964f79eb65f7dd8dd78e37be9d278b1b7950959f9a7469d4e8326995b1b4000c239e7a0b54a3b54bb17962e42b3f81c000a2e636ecc6cf19d365f5201ec7e29cd65621d5ee8e50278bfa741c934547203c96ac6f9e2c9f2a76b293997981c507b7b4dfedd65a8bc42db2166cac4428fd0422a2a7003f815e49782b9eba07b83569b81922ca59c4197e12597c453cb98ab8e29ba8e22d6ece892ccf396a86b3f36bd2b0383b23758cbae8ac9d8677bb8ab8f98aa8e22771c559c493cf10591c25ce702b50220de7449637e2a96b1f129eba05973cf50e88a7ee855b3cf50f0c51fcb35e7e46b87c4848795e824bc41a9f972110156cb105f432dca24554e8258a124f9d068a73608b331ee7eb50506e1fe52ccfdea10f96a761f2d2c379ea34c4536bc65cafe20a6cc6985aeec56d694d9aea3485079d214e11c88c613f89bc223292d831da229dcd18f61453eba99bc4f274c3534709c5724ef14c048bf1dd042d52522d9e29b55f726375ad3576599580cd186e99c1e014b3d7fcfb1adc6c6bd26800f47e27c22def6b45b8a17b1817d4fce3a655db6c8712bafdb03e0f0a8af3b522cd35694eafb9b633696693e67b8dc66b1e58e4d6d8a499f1da87129b319a5b212ed55c0b7f7c0ffa0c7da4f0e0b8b9172ec0fe6cb21b2b689ad52c3efb759efa3ecf6ff4aa9f3ad8acd509f69405824f7dc6c853dfc1833a0b5ec76137a65ce8effc477f37c3de9cd35adbfccab11ffc36ecd1b9fd2efcc1ff7aeb1fd71c731c37398eab17a51cf2cef98d7d0115d1836fb16e5e7dab5a95b53e2ff6dc0a6e5e73e67c7341b3819b7bb49a5ae36758e1e78c6170d60c691bb8b9f54dcaa2359acf9ea3163392f4d5698cb236afae691ee4806db42110ed87aa3671fa58f9ea261bda4110419203d5ac1d93d034df9ce3348dd3ea5637d73c08ea394f6d9b6f9a462ba5947b763b5c769091fe14c60d88c4b099bc04b5130f168cab71d585cd39a7f5b5f16ea3e5e1fbb8b605b9df9e473b6372c854d3c66975b3157cfd74ee749a5d6b41dbe3e26244777efa37410b86618f53f745b9955d6b1a4d374585992965ca945c515949b92b2b2b2b2bec2ecf4328b3b0e09b30a58d570c2efbc7e10c1f13b3325ec87401f5d38b05d11eca0a7b66f8741aa3ac1a3e9dee50568b4fa72fca4279a88349b29754e7a7d322731586b39c50d647cd0a6354e59a349d4f6fa12ef236ba498243296ffcf44b593749b0f8749866dd49c3a7fb6745b0d65a350dc5bf6ddb42ff388eb3b6c7e75fd731b3e7853dead763061ff535977f2018863544414131815d10b7d47a9edd74aff52f25450554f14fc5a48212aaacaca8a8a8a8a8b4701f088afc9f27f27b218ac8cf3203a4e28c6f05ec147883939342a19e2f6737d0a485ff79e04f938c82a1849a1c7acea79bc21ef6c2805454317a795979adf4bcfceccc8a8c8e9a646f4508d97dbd7a90f8a82039798da58771b0751cff99341b4a08526fbcf952f3d17a668c06d3901c01836724deaaa878272fe559586ab534be9724f4e5a7befc34f992e4e54773174e3c929a7d7983ee8dddd7bd2ffff196df388ee6491c07aee33ef75f7e7e5e622f412f4d5e9ca4441b3a365c367a90b0b0f8f4aab42baf494363698816792c2c3d34945e1c27878e650f0d7d63d94545de38befcbcfc683ba816f0bf29bbe57dbd9abc3c4df27d69e0030052d1f42de24acf8a8a8a8a8a0a4b8d6d45a50c65e07dddd7eda1aa7befcbcf12ab82d4aba466a56e50b0a2a2a3a3246f2c3b0905a3375fde170a4673bebc2f142cd5aaae54d8e3f354f8a33ee7ec390ae09119cea33758171e00402bbb0400a9185af1884bca45e84b16a120194b0f0bec0715cb69d2d5a4cece92268c24797ef9a12f3ff4e5e765f6fc920a9235c92f4e5e8650bf8d8ea36d9c8d1f6cb8acd7b14906a422d88394a4b49442923ae286278ce9e4a0603f4996682d620a41b300b6002015bfcf71e9c8847e62414d9c6c56a50a7b78de89d35a6d00608b5cadec962858b7f62d62aa074655af1a46358e6a20d548aaa1d4240d11c76b5828113596c2d9b397a1d0cd85f92461b9af5e693cbdf27a7aa5a55a29d8a4b9e9a1b2878abae8081c51b0fb42c1ee0b05eb4615a48d05094bcfe47ce36e8037c21e9cafb8ae0a2015eb6f628d1a4b37384da6523c42b2140a86fa8935c94b9a7863aae554a4103463d85f92bcfcf4aa5e1ed47da1602858af6aaf6c121ca0e642456ac523359c868882cda89164c937a27e8ad4102f55059ee8a8848c9576514e32552332020000c314002028100c88c482d158284e956def14800b81a84e66541a49b3208851104431c6106290310400000c80214245431d00cd4fa821af035db2c3020b488199c7f57c9729c4167ae13ec8ba8e7ed7c78aba3f2ba72e209311272771787f3667571d5505e647bcee0cc5b2f404b66d4ad5428f65885d8ea93660db0471d452caccc9cffe9518220b3930a34c6259b6e3a54c556177cf145d9aa93c04af8d5cea2bcebabd99ddfed18230ff7d02436607688dff4b2624c32cbe297fc852456f1296c009a7a08a130232a6097c1c45f7b5060390a088183a5e62edbd57ee271edcf12704e39c7f0c7b7e4fbf987bf87dde9ad8ffc1f5a22327ddcd9eb96eac9bec1ae5d6f169f20ff10b20c0baefc1e267c74f0e1cf7f8c145508984c5cd59a1cf86ae362f7c9acdfb7dfbbcfd9ed4ef7bacebe6976b1422978006d8d83dc0c874adea54ac3604fc3086268149713e9f9d45c55a5aed92310adbf832d474f5e1cc1321477ba118f8682eb5fdab454d30f13fc23368da195df4c21e7e422f25e2f1e93598d033d292e1e4d19972f4fea7863d3661a7833d6b66e9c34483534a0a8652a7f1b384a3de8940d72757c4f9b9621892e737df1c050da01c59bc6b1529f7cadd7d70b976943137976a73b9dc2d8b30d36851c899af2dc2345a1c7d5d27b939bfa07c386c5fc28721fc4ef7f9c8256e442f6dbc2de364e7dcb26a77e35ab680260c53e826ae79f0b9b4214325ac6241cd78fea7e4559da59b177d4727d12df1eedef3216148f9d7bc0ec8dd538766e5f5a3e1ac5631c7c44a9d8d0b6e5fcffe185b4a75f4c8616f55c46c8836b037ce9b6bc591f23dc9decaea9514a9d62508a1398a78341022eef2aa7a5b2688f6225f21340eabc6df6c34eea4ef47a5dab369085859ddb695d9ada2874ff25714fea8fd050168b5dd5385163eafd90f2bfc1a6698edce6b35b053a4067d67ae16983204ea2867cbe38315ff1f2ee9c0eae3d5ac1225c9d1f7d25f38a41bca6abe48b2f7cff9875d75422ee1da2178e51ebd42e1345e29933f88aae2f372ed850fd64a254514aed5f484ea8d83018b8d9dfcb04672cf538d3bd49c4691a31131ed3f34c646e8002e516c0639a0d104ec42b44cff84c8cc127507ed5ce8046784baeee3c657c2e01eb7b7d36be3a55026c278c72c2936dbc1114fc3b4568474356cc56376d679b154dda6c675be6f47cb455f6b3141a407ebe8b1087d8071ce303fd3c9947727b825185cfab93904aea5944e3118ce1a9ef4f2d95427f99b9875d8dfb942abb179f9369631528caccaaffa51917c8689a38095947357310099e701389dc5b5909a8f0d95c7edda0995c9323a6bc7f832f89f8d10e9b0b4311f9747cf6c14c8db2fb88cd2d7495aa9ee5bae84eb514959676d9d27d4fcd50c5524a222bec2ad4e52508a2a1da3a29fad3c717c5480153e25c3c1df07a452658d81dd6e4ddada8b0f6ef16f5b8dc6db3236d79dc4a850aea83b37c508cc7e39d33e548a4d0905f4bd361c51b9c56f6013da401aefb6a42ab98cc2b892734b983e0a94940376f54595131624664e86909f45904205ff282892aa43415ecc94f7b3da0e2ca66344cdcb69516c95f997d4487cade501c33888e2a0b208223d913f7e11bcde09943feb557bd5b8a5c741573f2e35f5a870a528aa4aa98b42a61ced25a486990b3c45c6328b8f3f2745ba3a0e221db373288313a92ee93a29c9aa81fc144e120e388d8d04d688f87d38cf16ca2b6c6dacc1f03d1e159f8414412129b8a2911085276aeeefd8b5fa2be0bd2248b41f59e20187ddbfc4f04cd02ca59aa7ad78f3fbbeafa09aaa7fe0b0f353a68d21ab43c2c11e63367310d28929ffad22f0507a4814065b6076ffe5f8e711c301171f50cba8388961008815302c3ae0101f18282d91c374f70dadc8a3079dd41eb686bec9bc4fc8b44944b1f70000d7705a816d4cc7c96ff3dc0300258de154ad50a8570086e6d6031b2c7102545933e0feb9dbba2619a82a00f0875bd813e9d76a29c93fe342dd41f5dc2f94150ac49249e4f1970955a6fc4b7ace1d716e838a709b5bb17337a0c9c3ad96421150b55bf857ed00d654a913ae0975dac99be2cacc609622b0394e8753e3eb41c4317363cd4b3e770373fa2f14b98fdcbf7fd5a381de745cc80bb712abd309b4d19eec3c737a58e531a27b26b192ca4c45f95640b5966eee80f018c15ee1d62c7cd9176f72585edf8fadc1daa9465d84272c9faaca66aac246a2a06ecde0d5ea08e4a83fbd81cbb38829b0e21958162a76a0d722c4f6254f8e04d3eb7298602a7f2864b465593c82b4b9ce13ae4deb88471d0a621af4f8041eb77210fdd2844743e8a0c561b23dc4ea43c61ed966844f0907a891b11a39288e51df0040f1f84be872e8d86b277eae369ddadffc5491c0b769215697255e9f418b38412838e4fd121a82e0edf5f0ce9a7b902387fb961a24948cd8e933505036824f90463b1859a06e1cc35815dac3c2da4a23d8a12b9c1027dc347406c814b0460f813f6283a9354c7183b61320b2cd90abc4bdd0bbb3543baafda4e003b40df520810beeef8fd2ef47ace161e9bddfa24d52a15d852b553cc27b75e95d19ffc151a7efd76b8e3b8862edc98a806ba073b44b1c0aa4f430d6f35dbffd42cc20ee22fe5b58051abb7621ab87097dbf6211f494691a72a6aad76d559c1676c440801464cbc3a470ded073a58f2d7b5a3a0fb6b3ebc88859e4f637a4817bb1833e90e3f1155c05b053cceb5f12fa4d2d9a5a3b241347502c1a3fce3d9c72330a1d68009b3994e4d63f35f27a12ea10cdbb9263959d37c8f80732698d7fdc378b14c17fc9a906b60dc18e8ff0bdb575ac615239894335c5ebb9fa11b84a9c6e0524415836db136690045c09daec0495966e18ba2534c0308dc2f68cedfa69fc61d4b16d9c7c09c294c75a61853486258563e94f895e9a681b19fb47c9f42b42d5180c55d6270202a22f2d862c51708583c58d4e86e7529f81fc01f27947b4e1be5acc000dd93fa437fa2a44e8bf208eca85a33ab9deec9e105c617d03d304c1be100b326193e683990feb223cc2c1a06314dfa7557d0efa6c9cfa4e769c40e4b7c491dd95ccc13330f10a5c1663b30c59a5c9bcca97a1ef3e5fff3ff9d9bffc113b93d314760d0a32a4604ebf6e23f0eccd49c4418d6751ff72cf89d7893902079cde59710681254f2160bb6cdbbac94724b043dca3bbb4de3903bab3c4282c587a44435d2561115d7829ec678d113cb288e298f0124d1b1990324952771a11c490bc2dd7692b5409b6ef1605f0149109e411f37b2b7c7fdb61982311017644d147883a65cb3be06eef9a7577238309f8371f6a04b66aa1d4301b67d26bc50da4520eb4ac9b877ffb4351e15398260d5451ba4ed595f638e951fd16f4b8282e13e5e653e52a5879c98fb90949093c4270cc391aee7f85dc8938f1b3ea98c74f2be1982a4885dff5b61ccc98061b842a6695cff197dd65bc041dbb2c5312a4bab94bf8ed7b03113ecc4a6d5ae2b3158cc01df0d54c9babcf2c0d61eed69bc31ec579d41af24722d4ad47895b149cb72ed60840dbe115a757465d5bebe5ef9790493a6a958aec70bf526cb3791c1b70355f580fd0c609ee8eb810fc62124c27dbc85b102495874fcb03721983a897d9f7a3264e96043076252023a9c42767984ca1005bf6733278d2ad7dc24fd4e57b30d5f7b21e211bf47537993f296b8c1e070873ce92c480c917cbe9acac3d2ba466cce3b819c4b0bdb8daa4b2ce02d6549b2cbcd1f8c2ca609e9474733237c2f7b2700f94d34ad18eabb13648688f5c4fdd1211d362a04a502d7463da0f29c44e0582520777db84001e8f86206c7f44cd793a78d88e5b7e02a93ca99f9a0a92dead29c2ef477229d23a488d808e548e0d5bd6a2f95d2f70d5a575661ea285a05399efca9ea898ceab8cabcad64ee3a214ed0ae13277909be6f72c58f98b4a876ce70e876e7ef633d9975fc201f47880cf1c689d0dc6d767d98ee79247c25f5ab6600e1518f614d06c0c3608e6573000beb5dfdcbab24d8dbb4e3fbf379476d7f07de74fc72fc95b1b66aa2ccf1c35a3828498c62e6953010adbf7622233d1f8caacaa4ca66347896727c91be59a118005439c4fa27ea74eddfdcae16c79851e91829baa3e261fa50952bbf48b9b393dc8f538f2f59b01010cfdbb5620e7e1a71a8f266500498e5dbb15892d43450674a51d92a19ad27014ecf1af873a6c84cdcd25b694672627c93d418e328fa1b0971e5d77bc5bfe85441a7e709f16101ca65a345d56b8f1ed32fa26141bcc34172f40fc89e0774bb9cfd503900888ca375a881c70c84fb709ed33873f123e33373d59da02cb328cdb6c1205817c3c7be4e9fb073a6be2ec273056b35bc87dc53ece68a24c5d57464bbe10d3d157b3e81f071fe95221422cd140741605d2b82e34b546759d9f36f75cb784029e074447c77485c44eb7fc2ce776de535be2b3b874998261276f41aa5847ea8977f50b8982b38976edc2a8dd5237dc68cc61419e52f623f0b2d6bcfcf067d075e2235968d4530a28923a25b8952e530ed2d3425e4845bdc5e5025761255d0244a9d91418785d7b7cfd1dd012398b39a48040fd8e66196fadd8b423bc07aeeaf4f56e87eaf10b47f7b835f377e8ab557d33ede4055b17f27cc15098c147f024f72e3c17b6ee179b029cf08550c372e8e72da09a2139be7fb828cec9d46227db9d1ed681ab3016046c82aa20058ae24747cdbfbf2ba65252eeff29b048a35f7e8303eee6e8050b18e41ea60d0357a9d1d79c8b0e08338b80f0253f1d901a641dfafcd50c316b50662073884443615bf7211cc97ebcdd2e152ef8b186adde83fd83e0b899f80184c50f641a24b7a1cb346283c8df35c431715b4d3a75181233202b6dd745b788aaef12c4fae3e0178963089a4dcb2770c7a0061d9dd7fe43bf01a50c1cbd7010d91e3ac6f7f33635c8cc95c6dcfd8695e081ea0b73ea8926236d1aebabeb3b378419a49d396274d0ad272d1b752c7fecb8cd19d1dfdfb66d08042ba5d6af171bf36230f0538f328c45e6e92eb9731a5f98cfc0a502d846f36e13680979222e15c02adf568aecec994ac6e5df04d016a6dce31c43a1a2fa04af86397bf51d7ee9e5a0b22832b6b886fa4660113aaa7be8a7374e6a1e31792723a52112a385098388af8beb8f6b8e791b302fb91f121ec4280b28f1d36a56e6c1f15315e89889fd2e29b19c84a729e225a0c6af5a2a9ab2a2860adc8124863229765ac3e0c3301597074522f7f4e25bad6630ba7f1e72d85b46220b0e47b7a13b6755a57cb9b739ea14918756ca1c2312e7a8fa79429038f106c2792b65028a88b6d14fd0e3090b8b3b26022d4e24638ba6f23ded31f0d0d3e96fd9410d2e091041ecbd45c2300127cde31c4cb8474319025206fe7ccc1390d99755aded9b0581ce093192cf49142db0409b564859c420a15379dff4f8cd5830e946083db4c78c0824608a5e6fe4834ed9aa428e9cecfc202d39d56b33c7ec4831f33953df46187d2e87de68ac5600b66fa1d85bac5a22f73be524ce052a7e85c0c1b63bfaec3fd6019853f9b549e2ef16bc0400c6c79b1c5ae913046a4c9d4e21bf2f056c4638196e4c978681c0b9641109f0973bb26f1f5dbe3dd7df96fc346915b1bb6d160540cfb73cd72dc7fb1b5d46f466a084d490b866c590008cefaddd02012becf3f94b69d728859924807698bd0d6eac7f6df76c313191024645028bba87c1c94f184662b4c7e975a43b4a4c27dd8a8e2f29c5690fb0047a395919ee5c0cba94678d8ca62be75f5b5f3e063ac11599609dae1ff581b2f6fdb7bbf108a3cb3498eb20431a304f1852296763a7f20c33b8d1ac82c50f24221f2529dff92756bef51cc3bc563648775e89e4f264ca981b60d8b9c466f8f39bf9e44dbe99372a368f8f6bba73c131e9f658e27011de6d999349a7bcb310de161f608c1b06b5f3d1b06ea9317398527d658a4a65189601c4be410c6b52d90d85c80a11d98473b69441dfd4cf18d422d16f1c30a28b1cdb147fa8f8f4c6ab7ed5f4ac9afda0e370ba55a2de00be492fa3727e9c2575b67c9c11c67e1755276f8b0ed8f84bf80c3a6a70e1868b5e2ff1ef98463e1abd20140e0216128d2c2cfd50362060801712cbcb43ac4ccff95479f8c5f38c097c396f511022ad5f089570dec4d08613bdf063c2a8e7b4357a8c821894eed587cbccdcdcea01bf76f6633ab95768e437bff71ef8aae8536dc8abf43738d8279f9cc39d4de6cf9dfb2ad73ad072d58feb18df722f7b7e92b5a78ae92fed04ed45aace95b33e504377ecf94435abf86f0d590eba776ed55c7bcff9a33c7f23fdc5d060ef49f15372e90d921e9eda50a460206a79a256094536d1bd0335d3e8f21cce764eb2f644a0042675260182831d4e1c33193a07ef1a52da8f64dd7ac9e9e226fcc7bdee9d7a122345a4d1db209600577bf505be11b6e0a2b8512916db35a9616319ea23587c37fd4862bf0c14ed8ac54cf016e7bb841c13a7a9525a257ea2eed06fde0b115a797a6655589300f9322a370c339de133b9cf2b862d53555ab167bf943ff4de93cf7d72b6b94614f5d49fb2a4c3fb91cbfabc1bbf3041b85084894d8287dfe3b7fba8dab9c7d794d317399b026d34b7fa9bedc4ee2d0bb124269e52b5f710ce256e18b99186a9f9a8f574952690c6ee60f5842d46ad931802d671e0591788c3f2d8bf61629260dc8cda4da9449425bc2115bfefd8e9ad1d24909f3a042a5b6c15ad2836b39a3a71b527dbf164db7a033e4311715287abc51c737f921d34f0767a5c7a8386a3558c289ce7f0f147d578d8064e773d6272c7546ccacb9ae056f4adf4d41e4f549698c03a43a25f551bade5773b66e330c6e05158b453eff12c29b34eec2bcf5865342cb8df27cf9ca133782675e2bbe8f9d88e8c23a2327c456751ad473a2bbfea782569342d1586a1c8e7b9d636387f017813e1c54be2cc777ff9c7f2492aadcf6f0b16bae2b22dd554193c567ba1d585e7aea84b9e709c25385a876253d595e56d290f642ab9c9af2c945cb1d886e4f1c80345592ae48c0942a89e61f2e34e102e11c7310760616c38931db254f30c67f483e6cfb8e2fc7a88737b40e62d8f6f73f9a47a2c2a7a1e83aa25d1eaf2624733eda7db1945694da36417e62f2e6b10c7594c9f95012ccb3d8f3170d4cd712cfa038d6712af42f94a8bc78298bae21083e1ca3c592e843691a966d50d370e5c0a80bd0f7983ae986dc6154a60f2566cb68e5f008039ddcf1ab5e954d031a698ea366bb6fb38dd7d1d3b3190d4c4c3ea10cb461836a1ce02959095cabc1f30c92b36bc186a4a83f035acf0fb5a5b8879dedfc1324902cf11559dc1327f8d95dfa6518599826f766c59e42accc23c26c1be495bdf4b9cba086446adea0a30ffb49f31b9718f94868b25a17f75e3c9b516d86afc58d529fd50f5eaf317b93563fe4f7b9c2d813c43ae1f6daab5283d7d09345f5764cd3658d63013cd9efa8734d44d9522d0a0fb19e4e984caf12f338d675f986b05a6db3f782fd3d3c3861d65f126e6d6f864ce020629ff8c42005233532815d7c3b33e1f363a15b120cdaaeebcb7e8d5d2f55da2c1e83a501ef06cd09f261d365dddab3b905ac15b18217d9ecc55bc6bb28c66255cae3704b3071d812218d744160fcb7cf215580ca889261618a977098240683c5ba458285e8a664c16e6a219739984e6327a0efc6ce40a8ca80d01e9fab7cc73c656717d2328bcc2d79d776d7e0aa4cd6b5f65598175977ce2dd5cb0ca12295141c5aa694fcd1b59e4e18af230e8cbce4306ac4d53c1f4a4ca316c3e22475dd097ebf4bec97729a230de3d588fea5ede749b345f8d8006f1c15b33d26700ee4f6a3da04e70c736a1caba4dfcab8a3caaf5fc95e632efa2f73fa833f7e7433c1c6ba952835918268e7f67d420fd841a228738444d43147c04a131ec164bda666cf2c9682946ccedc4c87daf4221568e70f41386c072a62b70394a2a6678244da4d6d6011dd41a06d7c94e766b5805bd30f9c6dbc0e5904fea04b9e2542dda7b409117d0b1080284051d491ac2f2be765d5dd8fc0cae56c58523b54c50f7ccb21badfa58a9296e089a96efb1553af4f3a1bf7ac8f356e72d7d1d5cdbe31287ad254f6c0a928f14c2392a289214bc304b460bbabda479b3b865bb075a26ed4310cfaaf8620a5905635b61015a14c54dde3d90a1f7eb62a60280a18942f6c4050c53ab01c7c2701cb93d00a227a088097f462077d211a7937cacd0acf26761eb1ff9531c5236db079840a831ae1712c1ebd51cd22a47263b56e68aed435a8469e16afd2ae9d6cd1f3d05bc63126c05a1613ed84c41424e216178abeec10dc887530fd35d1b03653ac7167a15fab8d8a69c2b1b3a7df430ce5236b842905f576c312c89cdc731d73430912db11262fa7703b4443800beb481476ab72e62b260a28ffa9ba4a7ebdeb71d424d580b32409a79aac2a974999f7bf44763f77014ef73a5f0bd61263d354834f40ac54f7fe90d30146dcc836af2d1c0204a3046de5f24a76358ca85c2a4b6326e4c0729ec47104b3a85ad4e609e9c2c067ccdd4b35ff6e7252efc19908448ab343bad7a66b00f67de0104e5a5417e8d636ed838d4267797ce24128d48479d7eb00a36d18fdc9a9be19ca6f97d4e15dbab054e4532c4527a8b5c8fb232faa69bdbcfe549bc185ff46d54a73911c1f35469d817955c10919973c6d0d91258a53be3869f3199e670f84f03b48fd26cef213c980d0d919d9106a4935b7c1781500fc1abd78b17585c747765fae5b0d47c1a1d07bb3e6832fa8d1407279ad1f6a9656c30883576a5e48a5955b570aaad351420b900bd2bae90465b4c11f1e90a36527349bf1c5fbbed7e00e9ce2e6004dc7c96bdadb12912f8f881297be6512c07d2a46ac136b27e95ca791c1ee0315684c6b624729ed9099193d3c261ae17fa1183bc318f0b686c216594db04ff0226ee8dcca0c24d9a652280772d289a58b0d2fad2ba7114f7eb1a0378e8a73fbc3e39f33817e84dbe7544c005086a9d2703c26c5bb95fe416188e04b75bdafc5ca2b13ef9a8610411c4c274c90faf0aa5bb8dc0dfa280314b2002142c4dbad1bf67bad06aa526ee084d86add77e4d9619f2cd15ea206e6fda5a0cac1a27b9029d60134dc315e4f607c1be40d81388f6098a7d41643fd0ec0b22fb0261bf20d91b28fb0591fd40b32fc8ecd78d32b769c1935ac9556e58ccb012ba0104aee8b15a229d07ba992a17d742e366d7f524c331b338de6cbb1eb28e6df6c6ccea58b3ea5ac876bc591a3313af1599c660b3d6c9156a5c18487cce7a85f0c0cf564e820be4d501f411f3a9deff177db8a686711a61bfbd2308ea0624fc3f9dd3d9a8baa85b508cd5bd25ea6784339fa979d81ec3f1725736e04558291326d81ea3a9b9cc0be7c100df1810cdee56dcde2ea05afd84a1b2ce5e077a6dfc5e78f990ae18ff97837765300240ea4a6aa0df8f77be8590bcd72df4917ad133b147b4083c5737d7dda2ab86157509ada78272af8482ccdc277f32da4deedff2c76b0fdd5af7c5e2ba5c449fa90cc0fc74b8661c51eadc211e96d778704ab2ee6c3df3107df4865cddcc3f3122ff8a06a9d2d62d179399a70f1df945dadb78c626c661113803ab379546d4758e6802eaa8f308dd4248830aa2a83692114b79db60e6c126200a46ca138142397e43677045bf301198f6c0ce1c7e373a141a266383215772a695001a16b3052fe3d152e495acf80bc22d9c773e544c5c8dd33374b465d11adb831c393faaad6a2f23258be90a5f97619c21def67d0c7fb8741d9c37188fd63bb0a5862b3d6d0da8f196baf6ef98f56f8343a085452e9231f4d7155abf82972c425a4c09fda1f7b67f539e8d0802e501441a9e081bb02aeb277dbe2854f0400b951bb20826823cbae3d20d8b692327125311f59c6867ab8a6ab8a050a200d4ba9ff17d724a727416517d95877d16dc0718e49c5e6ec68059bcecb0ebe338d0a266771047811574d0e8201425b6d9653cd0df79d6bb03bca614a1eb36e2e3156179674ace02d8c76497790aab00f1a7d532232e2d538591aaca3c9f8605d3deec0d9504b2d660b20f9ca628683b850baa1d42bb7b12d88b7893ee234270dc7191307a55c026cb053fc2e9981f130a4a9a0823e19a473c380742d218b8aa6babbfc912a875963d467019f4ba88472698d3d00c9a6d24c84a701a463d25b3d4a63fa4ef794268fd8be91a39230864109a17ea1b29e033dfc6ade1e1fdd6b72dce9a31f8d7ee7df6f7512771ff58f7c3d51a594d5fb28ad06830639e54819634bda90871ff94d2e809bed61e871a6adcaef6b63c6d847616ce6da17a5899adbce888d1667350e20638cdd1281e6ea80a0ec03e7c727471a2119a96603f9a48cbd1573fd45b21bfa06bc2ed0c30a5285a887a9b658e1eaefa2173e8677c1662f3d7985f30385cea6fa5329eb43a34e69ca63c31cf19a174275f28970550f5d4a69b31419eb87ffeb7062a2981d4d25c50037124d71ee22baad0f527cc90e33acb10e536c3acdf0bae1152a3c44a0674acd01050d59ea5071d601022301d9f9e27919ef8c7809452885cb2fb92d31f779c2c80f57633cebbb42552b17d7b238e0408bf365457b318a0bc4b75b21a740991cc6c2b7b3d4996a3194768d9b2683ca37f6206d23a5f5c6f6a163a9138e437199ab61c86320427a8dda0f41cb4c114af8dcc01b08831121779c86f50235d0c5d668b4a38d98f61535f497dff7b1cea5a0500a276f43c83a84d8c88683b40fb71075248b00657c587df40b9ba50dc5172012c7abab1602746faad49788f02262a5975506ec2f7421728cd030880d9050e40b125bda9460a5b51173295fdf93ec4fe92dfc6ae207f97ec97ff8151a09c7e763e97197deb90ec4d2aa531f1137cf4a539b520fcfc3f79a8a5228b115708292c74513ff762c20375ba5cb3e0578818c6e29b5019d17496a56398b8088db9b12b16de378d87b91401b86f9b3d51fde7379d985488f5fed441f28c34923d07fdd14e44d86f5c180bfb235fe6482b4157e6e0d34022e7843d0ef46480898c0bc84056fddff126ea3cf38f30cbeeabff1966576f39f2fbf830308e96e7f42a60d95003e81aca68d45e18b8c6efbe678a7f2af26e089989e08941086a4fc4bb21cb559bc711611f247d21f9a004735adf9a108a1be58a0d9abb859499d475a5428bdbb60b21d4fd988ec1e4ee81937d69bce040ca75fa1c5c7d993c07b4c8f585295a80676a5ada2ab64fb7251204895acbdaf0a99b58efca5394f0836e030a5217770d46e6a10024f136e0dd7f454ef94dda0656e7c0a33323873e09217a54ca06175847388d96573fd319ac6425cf909c9636fb35afdb8cc42b6b291744707b41173580061314a423b67bb72226fff378bd49406f0206ed8df9238068a3f6a5e1fa694176c0a516a59df32b930344119eb31e7df281efc99f15ea2c070a053dc21cbcc9edf9cc3e600bb875ebcf507d6195121ffb5ad4fba89bc5737096899fe14d5c78cde30de54b6b4464c731b331e3273e24e4d2e50356d01ff933947c4d67ea97cc3539eee16d8f9ced3a86e35bfb223f0f78bef67fc4e1e0bd3b0ee87c37e79faca0d01131e47699ea49be091e2711b683818057557c944382deccf3948ea9956e51402555e0005fb5fe2e02e797d863f49a81e27caa0481f7f0577d9d2379f6ef51b6ea32e1697ebaa06f4088f08052971375fc939c6495d5e6373da973d8d424868f964d0e92eed3fcf05114c1800b5b35ed77fd7ac2cabe32de758c8108d5d744d7188bfab6777947de04b68d7805121c37e2c4cf18c33b26225c6e734d6a9aca5b9d4502cfea271c470d26167c8046ae47059696051002a0c24a82f9010e435aef51c83de7a321164e013d46e192ef2b75589352775ff2dbc234e4d0c20d410dcfe973a2deb1005a068e473fee58f114449449a00a83c639e66e5852983067ab3c2f5b3b0160a5b26a45c7ab163a0eadf0c079506f0cbdd1bcbe6686d0a00dd57cf620b9b5f2fca2fdbea224f4f2c43f438aef8c4833b51a16ea956720de24cbfa50e51ea42ac3315eb4dbef272e486389fd69cebd187ede89e971fcd47c9f678e1decd7e9de301c8e0d52a0972fa8f36faff961c24a8aa49e2d56a9b538e8c32b7035e2f4fc9818e1bb9291d213f20f1a15f0781be392df3616a06fa824b9448514e449586225d2c557d0611c8c3ffb78a84ec11b975051d664651b9cf709facc4dc9bb87ef44d08580aff59fb13f830bf828b24103e88435984f14391828ceb90c4871eed840098c497ad11eec43252b1786eb4e2f29a706a8b0a7bd524b0801229e53aaf36e004d23035ad8a298158263e1c0d509dceddef279b9b53c836b6721a4aa646f4602c3080467b2c0ac29d292094446b55a086b2c35c86385bc0a5b2991523fe77ce9054b9e833f90a6f7550d338fae2bcb022d1a8cb1923c50b9e0dad829e4efc6cd7a647daaafb00828e2e7ec9da72b53c89bdffcbe4603a5bc89efcc2e32817c4ff5ae698f50466fca07604a5f364c06f5b65f1f38f87ab2b4cbb49ce16d820ef249586fa5ae2b4f45d4766a8f713f89828684a19800af1513ac0ee442b7d66c3cf1475cb07aa240c0612d95634eaa0c4c63948554d96a624ecc3e1d807a34dde3b4d2d08dd50819e070e3404724b6af58d4b9a201ab2f7ec2ae55a02be247b083b877078a2fdec12b809497726e3e3c3edf0d16ddb1323f0d31cd0b0d62c8f7a4f106cf9744db3f2b19a0cc8403c66989031e12e6a4a130e0a622835467c50ab13e2bb4422c0712b7bdf0de2bd26de21b4f1e3f98e4c79b9e089d4472c33de2a29419e2882023e07c25686f5a3daf93afa645934cf5dcb0eec854818cada4e2fedda6cec3a63c73981d5b1b597138b23db89a1b9ce84ca4461fb0b8ea26dca866cca2131731930aaaa70491971d2a610ecd0546d53c6b6439f660f8a1dd428cd6c081d57c69cfd0e7d3ce67811f54b3d77ee46aaa4ba9e1bfae24e7fff614047b882e383c42c412c5484c3a453ee86f0dfe564bea2714c2691ad319ce7ced1ca9866ee0325be0a74f6edf7b0bb20a72ebce2f745282e8d9fd336fdbffb6814388e14e285e543b50c780ebc4261d94285583e69934362e142d42390fc4abfc343b8851aa4eb13b1d9516c84deac1894c2314f09ab76612f5832f53933a554d16ca4dad05153dc153cbdba1f8b9184e62c018d351510cfbdac433a0ce87c6cf72356f75e71ca103ca1465fcc242363a4e5af44685cbe5205f80e09e9d4d1d74da8d1e1b6a206bec126831d66e104d91b88f5e0ca8dda99e4a2ac4a2e3f1e72d5219182ebb6ca8e1074ead6b734aed449bb4aa4b7a265e3385449a4202450615118c1a778e12413e84ffc1b61e1cf4f2a0e74fa58ed033f56f716710efeb4ecf635f7c0f2cc806b11a9ada66bd19fa3954c0a95d844643628181ae887dfdc254a25d2bb69a1a504e5b86fe6eb4936eaa3e8ea6c8641a1a898003d136e81d8628826bc060bb649316d9281ce7e6306270c81526a575f5dc96915d538cb769388abd9a6ce800c986f1e988780cad31219e7e0fdd74b8ba031cb0eb796505151458819edf8238558e6081f5c87276336998564217ce4c5731cc945d1967f572f925953abb4a4c15d04a03551b3a0c29302ba3bf79429dcfba6b7e338614f231f8cdb962ac94f2ca31be266fdfe1e56e72f050e839306311de42dbe2c4705167426bd96f481bedb07fc4393d0b739ac1c2f6fe2d5489b3d76351bd10d8d766b99725e278c5e8cb24d69ae8eaa5e8fefb2663a6af7c23c0200993395c7f07a2af4ceaf1ce637a21cd670abe95a18c50cf4d06fc3cef0c0a4c8e77d8bbcba2f2855141ad5b75d057414b94e41e32879af0485914e6444b3ea1a13f5c450dc18e41024ac83e73312d9f0db16dff06d9d9e019b3a29ccaf89457032e79f19b151bf4f6004ca94b191750946963a46c25aabfde2f573fabd00a4fae278daa8a8e07453552af7f366522a017436585e67da1afa555e219545cb70446a53671a1cba35f269dd1e518445549b0ae1dfbd400ffda0d53e511003458120c509c87c42bdd5149dc460e0f62eb72c5a392656586df173e780c3500bb6a8d683a13c36d26278341d3cda6962920197da36e0265a11290ae5c02532ec486d05362eb512a7e9859158fb6454daf4d7a44884464c34ec504919e82e76dee4af1290694204b85c3710ab826cdff5292d01488962949bc34611916709302aa63eb910b167c4866f5ad08d9b9c1fc79ef82966fc6058d1f3eb810fa2adb64d4991d4b24959890781d7fc0d261e06659e528a8250d5033d37e143a3464b4a9e74075d24b9cd753682e23851165e458069c2fe171dce9b009302e402e305fd3593d1a127c0f2a9eb419ac8d06e23dcfc02daa3c1314b549cc8ecbf71be4113976de4ee1929154c705c368de0d1b88c0014a8bd34ed8ed133f235b5cfd8b04a6eb6e274c432bb94ddb381898718e1980e492eee7f52412710323a3d636a89a59770576a58e1ab81ecedc143aea7b6864533bdbf887d892480324036b36b91ce07407bcd007bdbc5ec62477260d9e1d4fc4d24663019f67e32dd55e596bf709577b50eabe11bab46ab1c060804e7ab9206fedf72fdaa843446182461deb8e860cbda27833ec40202039b87090825d7f3f16a9d6587c597beac04533b031baba56809bff1329470ce4be666ed0a154626875a979d867924b41ac316a537a1c27d6e7faaf209d1a10e5f589909672af375cba7b2e59d42029551bcacc3a4388919bab9e6200906ce893d67b56a293a04b4ac0a7f7aa75e2a61cd236f2aa7f0d3a47cbd3373dea894300b162f552ff555bac4dc87c2576fcd0d704d31e4d2635dea13be56cfe5109e9253b6a6723f86322e42d093e645091fdf42a7633da6894b8c692aba19faef6b65d5192872fb2d05ea1842e7f435e81d669b37c18d973417212cb875126021af2965ceb704dbdeb7c8f77a5dfdae61a8d12a1036bd15abd2e4f4a1d6729757d9f46e8c456713597221d7cab65de44041794643c755d351c1c540ad7265c460d96a2ff5083f29eae4ebc760212a65523e6d62f2033b1a93aa8565f90ea037a28a913a4ecc318ba7cc8a41c1720b0a3a4090d48e7d2e6364f67750df4e4e3ad71b731bdc87cc4fe1407fec33fe8b27aea6ed1c33f6a08d5b586d4f87915250e8097e3a80932847ecc05402519b656dcb5a9287e878ab899b52802bff73e49f1b57245d710534b234f1d8ea5ed51d54a55bcd385391bde3cdfe9946701852bced9406b8c9b28e999a0d83ca875f9436f04941d36ae78cd8d182c93daeffae42bc1fc1d729cf4df15409618e5ccc6c78278c7561d07d748ee13fd0f44a9b426648f9eb428a05c2831496efc713a941c1bff79aae24ac71ea2310163f3b388b88d586767dbda134431a313b89a11cdc954880b62bbf08931b585ed5e0084c31cddb507238de30c528f0c14281da2eb6c2410118236ae495a9bb9e5168d2277689730c42a992dc979beb24e0685b937009bb2295ca49a6f2beec6aa59e81e409128c11d35a5609fc8b188dc819578933bae598c417184f441aafb9a18402730b249d5b41bef7ad81451aa191232903d0565fe09890095f32bc401b33d076813167e1f723b06b94da63df50519112989ce468e1481c8fb7a5f32b1a6a194e6fd2fa2ac11f69c9bfe664b61eb298c9a083b038c20539951caf1f03f51c64779f85d55dc6036a0ad9500a1a01c10a231f0a70011f55745a4626552b5fce6908b1c903c4041e9806ca124c9f020b15225d15b3b86ab905e123cf21094f4b34a92bc80f8715706922454a234732686122338a59b1fce116191e707f3c7bc54cf174c315101ce5f103a2916afec789a3aa45926efcd499466400371bfeca3d30f62e1234492f6a332f08ddb6e213d57f15b898949e56c4d08d4d7797ccd16ffa03e866ab0ae6315c9b388538c150fa93265979c03690c35b02465145bdfee0852e62c62928a4a610cc11f2646fc1f9366217c29956b74823d81a8decdd6c81526cf9e062ec6956d73d180ac70fb14d7b10a64ad629c1805da406da4f1910cc8581985317123e235a1b2864dd5be0880aea8a49597d30c0a1b0d26e178f6a3d0b721a94c2b53fb03c66ff73193fd35316664c53dd7dde5f83ea648ccbca1b0ce3a0240978dc6adbf366700a8e61634e2755c74ddb02abf289961c2fa538a8a8884efbce4528ae456c8d34d6d3fa8284838dec89a920bdc550de16f40c2e0f4a00230a836dff8c5bce782b5c97a00c326e553638c9c81c251a89d9d69a81678c1d2f2bdbcb714468288142490eae582dcd75c77367a32b0271829a2f56afcdbcaf81dac6f444a4acac44ae39bc51d15cde5347d13c324bd2c857cd301f36916751056c654aa03aca84d275c60e4c98885bdbff8d579205311ce82b83829b3c5a39c288058294b45d065f92748c7fc21adf59acbcd1979a98cb674f8f870aaf3a0c609131153d520e903e99aa6a0413491b8d033c03955c44b5e413161ae5985ec7d1c02e1fa86383b42654e27dca11c543d924545c76ced0cf6a70cd4e653b42cb39a42353c071208e009a0f75644a0c7783c6b348e742c471a1208567e7ce28f7c118c64e029de120f9f78b20020de1e4cca0370182b21ba3be6e60f67bc3f716206b28457029f73c2128af8cc3116817cbe2d6f1e8ad04b44f8c3805b960f3cea62f53d0a832d1fc1fc2d48865dc8206e0c4f7222573d19cf1ea49cea0afe7f711549b51bac804fd7b6748b695a4cc282f4888509a49bfefabca1608ec47403032758cc60f2c17819767058541fe670935c1ef6223206780f371ccd4a0980f428899f99d65f555102c9ca220c075f7d60b752004caf0776fa21a0418d48c1f1a83e559e9f6a3070c649951a65a32bbd84a577d299023d65139737e03e865879f2b5508d2d1170aac786eb0d088e36e83c027562b86aa3e0da1208c75bba19a1fa1d46545d4b23baa5c5886c12e0a85ed7919ee1c0d51200a7766438e813c1551d03a7da35f61809a427acbd1a01a3ec4543072863de4e4dfb99fc7c271ce56fa31c49e0ecf9692ba12e5ee8b44043a88042bf89ba20b06f57fa1c04fea51a44518876460e7100f6976b91fd4cedf6522d44b5eaa6502c6452d0193725e13f8d9a4d375f25c2b55c3a6f586c24c06320ff9d96d7285e309f2dbff53948b41c40500d04e217c4d962f4aa592d3bef8aa40b070d1865b4d4d598fa09fae705c53a8746f9f711a6df239042857b1980c862054cf98eb06208ec5409682c082b20a2b71bab16050fadec7989036c4ec4005bce6370702ad3bb6872ff4d94340cdeb41939b7e73bd0a55ce7c3cf30fe2130e5601f92a8d74a3215912d1e60f669b0845070d56570949170624c4ef0a5768a92cf9a4df6cd0797082104facb40a40483641805ad96bb22680001cea4cbcf596c17d6c06fad0d39bb8941d4c4f781232a47c67fb652700236f67d085ccf07bc26fec9988629d435a56cdb29cc087227456b5420ca66958d6465c98a9b26ca1f397d4d68859da73dcfc8cf0df9bcf9bb5e225a57ed92e466dd46172c8ff7212c243202e5e50bb3113448845ae604c11a31bd13713299f068060e3b7ab30293122cf023c776c8840d028d3b0aeda94d409bc6d15c684c30f3f483265fdb70b12b200d5d490ea12ee921878fc393461d153a60187349236ece665e9592377c9b083d063c30ec2d19a3106f0414cb083d7046aca98e399a81f19908a52597d6b0c75897b990cdbf8c8c0f518f30031f303a82805b0d38ecf807bf849563bfc4f161a1c973ba43067d402a58523e7b507712c515eebe5c28b3933ed8ef1cb2389acd4c774efb64036b7dd77254808d3dfcb2b0a1ce061fd5e998d37e88e39de4b0931abe7bdbad988cb4e074950b673ea662ddb75aab68f3800e0052af83aee42b798e1e5e60e3a598d1f6ef413179145705d3c2c511bbc943c689581ae3aef1c5a21c0ac040738e57885aaac78f5f734228409d47efdfe6769840ba4dba204a05291c939ff816cf8c52256e539332f2414e9b24fdcd66ca3f744ad34aa47cd8087c96ca0968fb505ae0fcb2961c6ef64dd783b4271135e521008a1d00ae3204aadd81978eb305d044a173c0b76b24f13ee4d05fb1c620e61d21047d6e9dbdc83377892efefc3b8904cc1a168344f86cf0c16da3065f5b3d5409c968210c4ab90f8af49050b68bef13129a48ead9aee050d681780e9622b33f5a78043b3c5c40b7a27b280778723e7c8e173021ce8812b6052db0c5d8e42f6216bdae25e2b69c1446a0b8a47fc8698e9427191e282911271fa7b5e759ef94a19120a7716a4e5300f14f45441d296e89e3cbf561ae3eed856a4869961ca180ba0330c1b82c43973e158ac165afe95f16076f834b0305aea7c6e21a927ecd4b1c110fc55d4a4e6ab2d293d85ab8d8f78a9cc521e76c04013d2d00ac4011b1ea4ccadf7a14716508f0a8c6dfb9d2bd00a462ff47e986aaea0726d71e0751788d004e9addce1d4d12140306311a9d910cffadf26d172a28dbec469a4b110ab2842098dee7bf4a00f49dd1c16f5a9a2f9b8e6c76b35618dc715063d90b86599c1fe2adce5f5786b6451223f0dd0e1c6b6cd0ab15e787802427cd8f1a80535e4287c40d3a7b5202c15bc7588c2c984403f1184a652c46c2210d0edcf49daf05ecc2e5d5a4f38a800773836498a7124f75675872821e184956d57675bb95e1a70c01583850903f70bb34786920b69fcb6e0bc2c66ccc3b3feb79926e14c6ef465802449fa693a1ac9ec36d2c4887e1fd8d402bb67dc45679f6c70ce531dba4f09c4ec2ddf294c1f7086f3c57333c52c7fea1bc6b43a865a80f715e8ae38b19a8d4000582b554c00db9a7b58a2280d2232c9ed4eb92b645be7a7c3a8ccca4a5e64adfb50a9e6b5b6dcb14431431050029a717226ebf2b8f08a5e698286e5fc3ba83a25d219a94f12bb03c31ca64ecb4f552c2dd445c9940e67fc474bb0c51d42d805de6b1605626f20367091b479e9d7fa24b966920f87dfcc06ea31add932f6687781739203e9d1920f9ecfbbbc9ad2de98b9cade07d6c8327038592b6841e93a911c45f72d8c1a7cf1669515720fa3e3b43c7bdb68abe24f93fbff59b6331206972bd534af62bc702802d11153c5d24cf9b4bd6a17a6564a431a6a49630e907aa057a7f4e90bcf924bd89623bfbafd9a8016bd9b5bd7d26b399cd9963b6db7dae38d306709b7ff019418a0e18fa74fba9cac65d528f6a425392fd2548d1c212901a1bf99c6f143522073d5a7995a53d722d4ba69ddf88d2564308711096b9624f511a49969e80a9853f878845b289b30e3ff186b15015c6ac581179d2b65f8b28647d1cd115f5b58cf05cd814b105210e1285177e76c807950eb83c6ca0bd57bf05979624f22c53c9db283cd8e7244147d9975ea837d62a34895efff9b28293c53f8c4ab75cbb7a887b5556bacf0dfd6db95fff49af4d220632a7ebebcaeeb077584ebcddf088a9ab4f31b17da217ee6f78ce66fccd554dd0577cc3459c88d037fc8f979fed95ba8550c8568bc264afee273cb50ae6cf5be292c533627d59997f799f6fa66e85fb10241fcad7d55a9cb36efd5514fd82076c6068c84ecac263794ab9225d1f21ca6a7a04ed7e56a9ab55515114e4b3ce89fc6d6c13618567f7c0ea2d4c0d1f7391615e19df6408623100a807c064633efebe1f0786069dd40f8195e734a178c2f5010ef1c57f299c4bae14dd6d2ad176c3a05045e00a4ae0265ca902586241483f46f13110874450e27f60fbbc2e971a4cc4bd32f951b07292c88e880fc8bbda0ba6b37afbaa28d90a4937fa78e966e3b43767443cb46e07cedc5f74f8f926615d51c3d03f63f0a50e80fbe7dd714362bb4a2d6c8c82e5aaaf141bfc269c71d2a001fb913dfb5a722950d349ad9b46056a41001d6ca427e34202a09a5fae8d75c1c1b9882fbc820c22911c3af59dffd6013216063c0159a24a87c779dabfe8325aa26493379f902a7f676fa0aadd424b60f5abe656a071b830943e9d7d6e2003e2e0f2a3143eddbfc08410489f8f51281f696523fbec7b8a50d39bce97da2d66bc81138e6fb072fc5aa6e393eb767c816a915f0d74fdf1bc7cab5bcd85d540a50a2ccda0383c5a1e0ec35cf9ae226fb663d8ca1a6c15dec50dd3b38087a7ee45e9905af201194b2420702eb80fd87344b1dad8aa89282d007001523665c450c1cd78bafd8ac86a60945fc691455b934555c9c625bdc447a34150665928fd4ae00074e41964ec5493cd383f3920274feaeb1b3d235a86a10eb5667128425588c81f5f169e9c9c2ff9478c273342b669f6e712d9f540d4dfa8349a3c72e034c95af86d4b6cc91aa08976eee05105195e53615a3061dad2a06f6780cc521f37af25396c6a305a2e17d90fbcdd670445cea5faa5c128e714530a4cf944381fc0010ce7721de474086763869200edd67f208583d303b426303f3742ab5b15bc03e24aff4fe61ddc7d0f00fcbe087001f2015894ad5eef7b7b68d25868d21e4437e31b3f78ee8025041f6a00a705193185d0eb10c95b49025a2e3befa8263583e3b35d0633b31d2e3f2d15cea330b88095d9e41f69ad7c85f07d2cff5630575f1650a80334870d925086741f7cfe8f6b5e3e31429272f4c169c1f095aaa0949a8a87b75ee2cfeb5010a1feff65c4908c94166435f259829a015ae32b1f3b4a127524fde76fe1698fc5e3f06e4af8bb9c126025ffc0ef30f7abc62305c8c3516f75786c03c05233e2db471c494f7d6ef9a5f7849e7e7b68997d16e27aba8f8814621035f375b2d9075164f59c2d985a16acf0d2bfe2a3f76e29e4d848b092ccb71d1799535ec2b8be6b33fc6365cc11ba6718a77f40ed8c2ade3672daeeb0eb7d1794be00847bdf62e3de1877a7cdccde1cd86e1c404465dd212bc924048c748f4c81d9cd0f394434d40cc9a40c37b8d40b3e916b33d47ffaf6067dd743a1600a8b1fad8083a20a7d1071874989781c442910c874c567f98fad131532e37c4abe6d0de130a3188f4f97104be7c52e31292726b089e3c4f3dbe1b0a1f732640922fba96ae0cce04f4281618ab05121bd324c08e8e7c64b58128270ca7e9a0f0f0024045b761f5a80efc4314dabc06a9460db2a10eda518dfa059580f34fee598838ca8e0e6779177dbfb23eef7f0cb41cb82880ea68388f098c09d8a10cdb94477f9c8ed1b47378857886ce58f41d4ac6c562fd9875bae4bd382c1396818eaeadce8721800f1033f03432979806a1303134c901d461b22549147acbbeb4a94d90bc64b8988e0230593606b4da359b2cc56308af25a325ce55b62534a9081d43f325caede4253c093814aaa987f808c7f9070252af21a4aea3d6e7b364742db9dcb3b0052368752c857961be7b5df0388b3d4bcee138dda80d03007fb664b21f9c01e962f7b5dc98a06ad678e1cd33cc119bed20d70b65d0bdc99f02992000b31491905cece56c397e092f9f043e007922403c4b1031a67bf13c2c2879c93a57c3411debf84f26d6fc74f1c98c17e79d926334f3f3fb59c34b5aea178f003190ff9d2bf1ff9fe181976b19a67c6d824e7b3532b4ac9642dc5f53576a76ba58077c831cba34c9b92c7bb800cc4364e47b59f083ad2dede6c4bd684c81454b0192a8c03a7d317e3e51275243530f6f2f18ff311123492d38a22308c75c312b1f4ec800d64e28eb854fc8968242c588625e53bc00c73e895345121ee90fa9d33ac25834fb501e8e660458847230ae728f210e70776905da09e7bd566a0e5ec50e7def7cae7ff49640a8dd86ba664859fe1ad3c2dccc21d932b92a71049b8c3770b3390db1e818bcd59fd3178c11f2eb3f99b398f1f8b61a7787a6067b07cd1881ce83534062455f66425d53327336955754eab944f3c3dc8352ce167c5953b7e6d94e236596ed4849b95da0fe551e71214ce4a22801ffa0444beba39fb5c36110ab3f5a2cb4c4864c3495e894e8bf8fb78b2d5a8b15f43d5bce8b8f9cfe30c4ded13d6ed8da21696c26018fd09c66068fe3c0b0e2e922278e7892b2728ec8aad95f7fe023d793029db601e54ad08212f5021f7aca7a082ab8435ae5a4aa277059acdaef1c1cb136d53e12fa8779b148d6d141e7296d6c5abab14fde09d7443a47120c45724e73f5c67817b8f5c4cd07166f42d28cda2e4786db0dbda415c5b0e0a18363c221369bffd2cae5888213966d891d59ed895ee27a6ee8b95beddcdde92b719c59f4b6884e26f80056ea95ecd1da5ceaf898d9258e4f340f327a21594b0594f1832803c0e69d2f0352eb03c8a578a3d0e3b904378041cb9b3eee1c643067868480fd1eda4fd5be936634d3643cb4b362814d405c90c78af7df2e0fd7bfa88d203bdc1276cd6dfd6a6be3947da74341fc2642a241f78f84bad31e0aa0a8666b3b5a8450d610791221ae2bccc43fa986954a08e0d2625aee1922e1aaa3dde54da78c8dfa2184cd2ccfe72b910122bda3d0cb70d5fc0f944a22942e7b34e941e927a9a2fe0abd2def995a382874e0fb225d01a5582587565b307424a7f4c4a13bc426d5f8884bd3ae6b4cd9b7a09a5dbc0b5c22d4936a584352ef2d1ff427d71892e3e0cfe64712e260024a714bda80eec7cb840c3a9069a5c89a0d1882d7a5d389e13572f3f109d626b470f1e71c26638551172e2624bda8263752b1fc5b809a72a2e33a49b57a8f9d9b449c57d0288182e114c6e88c989845f2220702a9ed23bc6cc1484758fd1dc6a069ceaad3592892fe42946a3e550a7114fa575b448669e455b4d2180c25878019c75d7277fca10acdeacab846b353f0b74875329702ea17595c170a4c25487e60b26a0bda70d809ee09633ab1b07729c45b08f7cc46db06cd420ae33f08f28dd761426eb1d552f5ccbee9aa477947a4bbfe22c434dea1d85bd4a74352f0352027561b74c11b4efb0c514a449bc8d0a842e1611e818b0cdbf3877a5ff64e1c2dc5c5465f2b600c3d77f945e43c11b43ebf340ff87ce3545e896ca6cabeb5f4069b24d1acabe9fe6fbe77e1e5da02e5169258e0d38e30f500d949632d1c4309479aa63c059c68d2d652162a874a9d2396800fcd2b0eea570d24f6a7324796d78e71459c2d8864fd1fcee0c3c67ea0f85948bf00bce4167a349b016496acc69b150007f47b8611566e5275751fa1e229c0c25a8066ae375279344d9e608f1b12911025fcdf31443ba388fd88d26fafde68774fe1c52073cfe58475b22b94e11a6efe35fc3dee625f9659cc4086e6222386304e01957288a82c5fd9df63ec888c9ec779dde1bc4b1ceb557fa2c15441254f801bb35333de0436802f7d7a371adc2b6e109e9457b6bffab6e1a3e8bc9a35f61dfec13063fae683f9085d407babaf5a6a674cb4ee0fe0bb1e10009dd557ec4abf8ec30132ac1016c95809d928fa384f025d9dbd4559276b75c7439ce0edad5d9cc06cc714bc51d6252311b0ad1bc4c2d76e999e2662659023918b05ba1b372e71944b8161f0e09a8200f20014c75401b9b4104f14ad74368c245918802b607a7393ef033c30de085445c87c8e1bc0f0cd01d4205947df5990e23d6c067b503181632c034860fd0cba70ae41802119bbea3ecb011ba6022e0e3bfd07280da97bc5e037b62c3fbbfa4af6bb188f38f93aa03798e68d2d382f12dcc537d3140ec0c48e1695f9f529a89661b71120b816c57217df357148fd2d46314d70757637f487dec2fa80de1f81f3269e5f436cd712704eb6143f98b6c70d81dd8fc151ee9017cb1accfce86b5cc3b42a9646213e4795dd02bfe46bab332f5977065058dffc431d1b82c8359423fa4737f4a8ee45c8d04eff5012e455a484009c4c5d406a41807affcf59ecda1e1a4414051a47c5be960a20939980af8bc924588fc85c606d1d1fd526aa62efbd3a8709cbdf574f06ff6e1be45ddb1851516479ed7d833ca4446aa45c0aa61398962498f8a1a94023aa36a6a44c1d2ee90326d5ad93846a4a3bf79a9ce8d2ba946d224e20508d1c71663618bb350bfeed33a1180361cc394c68d2c8eccb10e626c8a198c39ecb95b0c8fadd22e20016adf84de22bc013613e5084358a484db87ae896b8091c26cc9288839618e1d29c25871d5f93296ce0553848747a47c677bc571db70f653fe2f8ce3aedcf0a110bc8bf29be5b3c951bb8fb59a83fc4fd14be98b0f007db7ad67cb210a3040039db4ce83ec8b29bae7a3d47310ca2c9e951ea68c90d0ae81a31aa7a25bf91ddeb801b9936fc38870714f526d2a3ca3964a3d62b7fa2318cefe1be6fdd5697dc956b0b507c2b1ba82db03712f9f84c305733e2c6ce606d6c6fe64c41e0a83100e6a74c3a54bad2359b0de4f2321e4a709c9bbee9f2ff69e2a357cd21c951eda6445029f05f74b9d7459269ac2d7d3e553e1b57724f698f27cb2dbde40fb8b63a80f72a8a2aaf484a3c381aa0ff21d5fe15efa02747343fe716b76fff661c28eb2f2cca3403d04b9d70ff2eef6bdc8fbec64165294962a0312091116c9d892bc84cac3c72120be1edb49ce0049bb0ee6b7b53b5835d97f8a4984a19ca45df7f091ef2bc26395afdd39cb0032588e3b6f4bb2601cb592f0877a5b44729043b154dc9ef0412ddb35ff64f1389188d3c339d645adcf85bc87bb22e4f2b3929627c7467e1efd1ae5413c88fe5fde28be9952c4147cedee0018d593682d054021a390417c5a921184486298b9cefd298ba009989fdd6a54bcc867b7eb74e356e48f415d25d744648635f33e67064803b96f1c00eaad1ae2168092fb7e19a2a7fe7f2f2936c801449259d5ec091909d388c192fd37e9ab19b34fc9b5272217526ac47922600aaadadd46a50fa46a9e88d8c4a0e49362c93ed900805e9d8a2fd38c3cf98d808d9b1b3cb228612787bd4c4a827bc7dc5c240fa1f21b3dbe45b68669ce49298423a40fd4e694f3c2ea5bc0285670adb5cb5bb97f896e4eb5012c3065cfc8442969cbd583d970d6f4001cc1803999eb13ec551002acfb2a2fa031b366d5943f451aef5ece28efbc591ea322b7dd4e43776c42817e3df949c149934fd08a24e08dd31dd0186c984c20b29237c75fd1f3b5bf846e78095fc385e5c50133733a7fc5e1eae53270e502211e22943b7e494fe03e08788988ccdabbd9a64ec5ba75a20bcb1689203774992d219806621644350951e3b3448930bfe30bd6e6f743156505320d35be5eacf920f58620b7251014fb15738003bfac218e44c415be865d0f01b24534f710641888863c75a07fd5ed582b41c99eba4fa63380ed07481116b9b81ea5edb2334c37121e1e496b13b1eb30dc18f1dac8907e1d79a2cf64dbcc9c35f41240872f7e08527d4e74f8316a0a3f74c59368f6a60503f3108a181e6d147f8f8aa41d63d12a66f18b1f4ae3ce583e79e1a59ec2467396b4f30147dd319b8fcda605ffdfea1de43cdc5d1ee9a683b027fe61acf837e2c2c1648108da02860411c11a7a938f1e2ffe36e77d11450ab064c96dc758c7eabfafeab3aafab33f4b8f254d7e93221297ef217992065b80aeca3665d752a768ac90960c6fc14643543c3da1e02d443ff7f5e9bd6bada64b2fd042397ae60b8360a5dba7724324571cb6c357b1a8dc867bdf40bae1a8b22667d8bff9dab04b1f9107d85f6e18c300a326d6df65dd0f4ec089513cc69cf0838ed372313d86b3be7d85185e70bc4cb971c1a727b04c3d9692b4d072e5e0635e907e7316c7611ed0fbf4823b9c3f31ac9042722d42d14af2290ce024381752190748673300d4e48ccba7741cc5569489e70ea1d31af85bbd23e4ae5d3100ee5f759c055ecf335b0d73b631ba420d4cb918538871a589284e5f08eecfc1be92fd8aeeee9178a34cb2494d739fdb48b04eaf02eb49ffdf24987e4261217ce51792b6cbc6884c244ad44681774f6fafbed20d1178820a0271f6295a9728dba8d41249b87bc960d8b2a734414dba9387873d15248d1455e38857a0b9dab07b95bd4f60df00622c1e671f82873f1cc6857de35d63229a38c2ee627c1e5fd17f09fe0503bd196e4a653fdb2fbe09f9c10cf1287a755ae9d052f798741fe77a22a315c67ea4c5bd70679466b03b2040e89bff02ad1939dac371419161fd1c3a87294d264a50850e6294038a7c3d82dad14efd6ac0a6f1eb992bef16aa9b2c9907aa5fb0af0581b164eb08bd0de8f409bdb8ea7b10b24bc3434fd6a49981b7b455462f95b47eac8a22edebb1ae4baa5ff3be929eda355a0d192a48b0e202e1a52352e824ee48255b813f7057bd63cdefeeb598c0194706e1ec1c48b18cc218f3383452bde7c2dbba35f6b8e920cddee2d905e2892cf98bc85e42579795c91c0a739b68460f97d0b8305abf58d0382b5d200fe3f2e0dfb7e2c18cddee516e556ee58f0475771258567a99f46989e844f581ddbaf7dfd78db523fe3e3b0ac3cb7a219a3d540118192b6ae68ba8bde83eee90369ecab81a6092c6b606277d819c977edba1abcfce40185c80a46c6ae68a2e69b0e2d9c5737d041c9634132b67b5fed5fb03fd8d92b8c3070e5a9fbf7067b6010b8d97677a6bae2cef9a35a8ecac11562d81607cc97225b5a54f22671c1a99f500646f56a6a5c2ed632194a0e748740fb6c61dc58fa3eb49aaeabb5e101f87b47a4e1eb2bb5202df2e00d218787f77d701c8148ea0be119ac93037221b74272fa198fa9c92189761d676368a63552f882a0cabfaa8cd56720864bf9507b297e4a0f9fc4a58eaf52767baf696a0cd7542cb3750729ed17649bb8f868d6421a806c921ee34120d6a393e20e09a40e521e83ccf00cd80186dbcd16874aba09e0ab28540ca318a03a15832c580f4a5fc67f44246b2dc42703d1c7bda15994c731bdb68fd537712843438ff4b686566d201600e03865ca1f44f7903834af3572d7cd6e95149a9d3d0d3d810020b573322939fb470f8b973c44612d433f322744c436b224013b9f68c02a1d25dfb5eec657ca8221f31b6fe36b1ad09e043537c61ace45700166749fddc73e6d797613910a89791fd4c941386b02fdd6ee2200c241786026d41eddfe9e567ccace673d2c35e684116f0583cacfceaa5e257c4a283795661dee3b15bc930c1a52ca0e0ab7f59b61694a70e7069008d1cd5911d96b3f1361d153349111644e9fe5e72672bbd009f4f148b772f9b293b8918f7b0ef41202256ebcca8aef086a4fb17c79dc5734ad5e44000e820cfdf30d8c91f31022c81036acba2905b309a15a9033941f29c0b843556f8d9598e159b18afff90688d5d89a406cf89db861be111e32d69d5c999fc5e08644cd929b8886e57cb412fd2ef21be8aaa7e33054d30e665e3a643636ff046c6b84569bb96ecdd64ef2da54c49ca49090409e60828120583fa8bfa1d2e291205937a9bfa1d2eb6f4c1fe4969fa0a3f15614efe963edc3f29df57f84b4a8c272b4696622599af185082f90a7fc86724b164bec26f49d6cc57f8c1aeb5e928747e20d767c1b56b47c6df7d8aa42e2892ba9848165c9bf85368780ca5d032fecaa2b2605161b0b9c9814dad2ef85954961f9625edea212c387fb1781e8bad4dfc26d2cc219c910e9942269f2cb68c9f05d7ae93e5a7d6ae13dba86cedc2ac18cb8fe97174e95931da52cf14db4aae654a10502d7b6922cd9c526b970990949b149c1eb989e94b40da855126250d9d4d3c86cfccac47bba8901ccc6ada15d6fc64fc259bd28d89c959b1769d29b6145bbb5034a83228a334f07bac9976b54dd6ae90c7ac5d1f0dee2670b489f197c81d2a89dcc18e58b18c7f2cc1422cb88c5f2477b0f924dd32fe903c473e2459c60f224f122d63122d489388d01619c9c65f9e0bfe510d0e6946bae1c927b6f9ca9304cba02d8c657c9e3cf25cc9d886646b17ad65fca39bbfa80b0f2e778ae11fddb48b9e6419cf327eea275ac6a35ac6e78848c6f466937167bf9627dfe59f905da274a8f9e6280dfcfee73d92718acd57d809e37979327e177ffa1a4c7ca6d832fecbe32fdccdd1169a57c81abec21daaeb4ab07eb98095623c4ab4d28f20670948d77a5891cf107703119460190be9b193cf528f8c4b3519976c322edd64fc5d6d6c73bba9e1c78f81b4ab0e8108f90c7113f9c43819bf70e377417a24f5555b155ce21003ecee20b50c34f040908fd0c7f82abe88df871bfb7b895859e50ba3b9e2afd07b5fa35de17b6fa35de27b8f838a3aec8b9e8a3aee87648e00812f92b6a41e198e21d2eb18a8af3c9ff134b3677aef99fdfa7c566cd4d0ae9bbd87f13c96ecd11dca53bf5d67cafbc87e9f0b0349b6b3bbbb6d1dbed66ddddd4db28df5bb0b024822c2489f4404d117b246a850725239a89c931c1739a79c16392c7250527258e498e498724a39a49c514ecae78c72c61c514e2847cc793247cc0973c01c500e59e68072be1c2fa77c91e3e574392f5472ba1c15183930629804219352a1e8a474503a273a2e744e3a2d7458e8a0a4e8b0d031d131e99474483a239d94d719e98c3a229d908ea8f3a48ea813ea803a201db2d401e97c3a9e4ef942c7d3e9745ea8e8743a2a307460c4f8402632b77d0b63fd1db5dd5edc791f080cc590681c914a2613162d4e2e50523ec4d160d6064595429db8383d99a2dd1beed4828589e99225aa6b34979548a3b17c7122c33e5d138544ec93fbc3172a2eaacc27ec54609c32fd935296fbbbd2403218315a64fad99070be182cf20b21464ac2911182be50089a24413d2dc074d055d820ba886a04151529ac0055052d8aba33da4c85d09050bd308232154223020e9a104cd0420508bf8286c410a3285321341bb8682e4081690534133809c6d00bad8271b4c283185b2ca1e28a908408259c408411f9a444d0b640040b88889d00a40244f924184959e89bb14445e346174570d9e835e134184d3a6882064366c0c36f30b2f0422d329a642a44064772cb8c62a642645024ff0c3528e0f4268884d30d8c0246db61a2a606418ce0831d3980d17e789458410b7aa0c384ffba24c84600032094f003081b76b00412b523354424c1a50b5750758e1019e8804264d0238b3215220325b2672a44064078bcddddad086ca59452eaa1124a29f5bcda0b438204091224486aad48ae13e1d656c156c15e5b055b858b6d156c1570adb50a9de7757e6bcbb2b262a3468d7657f99f619aae761d39dd1c1ec1dee3ab5e778eedbd9652ec94864a6c7b96524a318f77b7e1c5a19338831de8859f6d976d53a46d6627411904c35c9a9810865d2928e4a57dfb0eca7faba28a36a9b0365b6b1283da27f75eb7d6765b6bad758b81ecf607a8100b2794b60bcf9e6c0b4a31be2c3a8ab14967a234c442f51a098a91e6ea37241e8458b8189340d02804434ba3e5517c1a1247cfddfdd678cde97477774ceac158c5100bb3f09672dc7d44e9573aad874ac2769df4fd2b7d7f1c2ab62d3c80bd2a308b5329c7ddddddbd85ec1cad3d85dea9d6d33b71d1a893148aa64265ae7a6dbf7e4f4c86304fb25b77f79e23f6d229eee3ae5db466fba6af584eb22d5760804f32bea0d1346780207b005b9224277babcba52e4744912489244a8c9210021448842421042449dc7b2d14486e48bb99902411024bdb6191249193c426991182040912244890b8db1f4b8e5e12ef070a2442448064486dfc486290e4892448904821899116b4808a284c8183c2139c50a4094c402205cf129410c50e144950a5dced152a35ed53eb2899ba7b3ed280caa7368ff054a633ccb1be6ab0b078ed4265daae146bb500cbed4e29a594d6e6d7e3ebf1d57c340bfa74bbb5d7edbd34dcde87c14f0c89a111a964326171d2379b0dd73c604ad7fac65749fae69f3c3590b6699bf2058b1f353526b7e7768fa6b58a09c6d703c65793fb61c0f8689fed23f2d9c2590cefbbb98f565d3eb2672d93b9b8873791ed88b13e498a2fe14ef9e285f812eea8c8207db41f1f5f25f141f10969b44549bfbc22458c18e9e951752c25fa6858c35e98a39e5c2e9542c1588d4670b89b439dac562c186098c112d5223c3c27260c37177eb4eee95c25d266bfaddaaedf209deb5ce73ad7b9be379ddb51775c88f5d6221a0843084378a341437c0929bd3ce10d00225a8b18dedcdbf18a7846706ab59b3b65ef8694c48c9ba371731f596b2acdbb69578eb6f8f77b41fa25ead1abfe22458c18e9e95112de4eb714d1dcfdd442f4516d2a0d10889a6149727fb4f006fa08194100b456be3a138bf190d1d4595da9326d56589b4802100ae05632871b723c6cc0c787363b000a60003e3777733f230c032c90127d4800851240e8dd46969bbb36bcf57c3d3eda0c38da4422a2896eb405ff0b54f2d1c2db470b6f1f2dbc7db4f0f6d150a00fd93dedd3b9f016eef4ebebf1d114f0d16a005958c4177b63b8167b413c1c8fc8cddddccddd9c7783bf1e5f4d9bd74fc417b77122d64012431883f88263b82e90f75d0b4af29137475e25f7a7cd139186947ccbebf3c458ffbcb91517a20fd374f5ab86697cd508091022a9117e3d3e5a2edc096f57044d80fbb01b3770bf3ba771cc0d31841356587102d55a6b5fec82adcb0e9a097e2fc65620e16e838cacbbbb5b4bb3f7765bff603648dc267a8e2061dddddddaeaf762ec7ec43aa634d34891c025a8b5dddddd5adbd769b411095b04bf185b61bdda12c3ec5bc1c49123478e1c39e27e778edc6a85975db09ed736d7473adc31d173e408b53113250d2ff65128f1e5f6e34f8507e87ceec8d6965e2a057e2f187180bed0ba817e4015647f3025457c69fd68d3bf6573c18ce865e645d6afd15f373c9bf12637ad8500093cdda51f7ddb78ae0841f63fa9d950b22dad0fa53133d668ecec28c94d1a8d4a1822b7ec5f0bc693d65c09a0b519fa657aaf9946a4c7cfa2e9eebed567e8953f26472403dc9638485b68fb260c8cad4d222489a4be1a91ad1a7fd9540a3cd1774192e2cb074a800ef50bb987318f2f02e5f0de821ffe7d2ae6003f449adaa4ed6a914f79c430b7361d8688cd16922032f5916d8a24a842317100203b580a623c2d2d0725a4294f3e492e8186d4dd6dfe2a9524cf6bd95ea8541e4fd4fa43c148f31788ba6e5041cd20a8eb062e46e62f524df63f472337a800fddcc035e807db276ab31adb335a48435bea37c5e8c8bd22572a854a7d1830c497ee653c415fa5b286254021e360cd58337f9dbc1f67a669faaf58b4ecbfa2b4b503fa2a9520cc57fea4b1a504cd67ab26fbcfc7821b38d04f06d1da8d5cbb58d9ff464fbf606cde7903977da554c468eb3207cddd46c4f787e96957e87d47c94aa8cc41a390892266cbd64e6e15a151ccb478c8d6ad656b1169d35758daf45f296fc69335abc94dcba7b7628534dcb1258c2d05e3cc67d9ff6ca1bd4a4f473133fd2a9530b77054ee98ac688191fe04692db07ec1106989d9f20c4db90546616ca50f469adf88f164b9919a01f7e6c682018676b1c8f4c16f05a3cd0163334d1fa387b1f9cb776ea771068d1c9f10230468da85aa61c3465b4c109849e0a7067e6b8f5c0064fad6826a472ce80963cc4c4cccde7043e6ef194f5a841b9324202088ff02fc1170d3ae7e22d96d9cb40837798a231c99e593da8a70cbfe4dae3489f3252d088096d70aa9bfb00bfdcff4e94a48db85abf8f2c956724cc046697895c00fa5e10108006dd7c900c22ae6007d7f9904156d0065344b586b45dbb2b5e974a76583b1f1b4eb7e088687842172db69d77d1c8c9176dd12e616226176da0c91345f1822244c11185c9b3e22c1e048240ccf8884b9c1d83e5a8b8909a0e6f63e2477a8198ce5706d56c497feca7305476b8b21d1e82392bd2593098b16b83bb93841a55428294f7a5ff94205460c900c73c5026198410300ad15ba42776c18df87b1f54b861acc0da6084c0e46494d8fecd4486c674976bab393fd473ee94ecf299f74c727fbce4ff62860d91f5f1b138b99695723213b3d12eada230b205539c94b74df321409b1efa66ae61289d1ff0479a8399c9db72c3d59ae4f93fd0bb5ec5df6da45297d2cf3e1c2548f7c86f9b4aeda39904d08475bace8e6c62697be8ab1ff14dd64b7b937188665da754bd47d6ae4c385a1090825ccbef09f2168e6afae0ce178211c31bbb56122fb9f62f61fb9963bd8104ef6b7e457a334fc2f493a31762a83640da5e12d7c5234da52df2d0ff2d982ac21f964ff124ebb50d4927c483fa55a0b5aea27fbab720923815f59a988b19639683faabbaf612307cdf5a97f2d4313dd194b20238d6917ca33924dd9ff445b6ef6b780bf75bf321b265c29b8b5281d5891f5b6e075613c6d0e31696b0edd5a54eddad783af07decdbbddda2276bbf29441168490e7e98432ccc2300cbd0f79a00ff47d08f495149f00319e20e3796534cce9022ec39069ce4f1319b4611545f81a69d3c7f2f288256df3f2dc641e6b1bcf6bb379b5f168577551fceae5100164e78e2c863ef45414953a74397469c83b6b9347cd976673657746f3a35d627967217969dabcb47655bf34cffb473523f2d27ce53f9277e62b9785ac30d2ecf631795e1ef5ad27f63704a4eda2d5878c4f1e6aa8f98a2f5f55c00ed0d7fc551a5a72b623eb50bf50a26aa019f4396806fd8efc91e7e7ef2b795a208f67edea95e4e1e6aeb42ea82dfbd88e65d8ef4778ddddddfdb8bea88b0c349f282c5ed4e50ce52e0dd04305d4a4d94b03f460016dd17cdaaf466d2b7455ff9319bb41ee7ec50e5dbcb0cb0a53114412ae401de79aab586f69dfcb76a5899bdca01b5f51613c2fc8f346cff33c553eed4df640372010080412d91150c174bbd764aba52b6ac927f79fd44437b9f1c684a0af8fae62fe24e96274de58927cae72fd73955d74c075b9b19ef114dde4ee17fd80be2815dd8890907b48ee5a8a98c8eef8cada6c17aff401042e5d69badd1a90aa9c31c0327e90c2a8b5fa09ee064b4ab36babd76ced3a2f4fdf32c63618a79fc82726c28af92bc5c3514349a614cb25589b33b29c32c3232545c63d05d6263e536279099a198f8c5f4c1109194f568c159bf9e3079d4491b589593cdad5283319cfd0304accaba79b499b989802500363dd9898526c29b7230cb9d5b224f32e5f5030965e120573ffe44f4a1fbc4bc4d834a858b13e592d70193f6862c54ca6ee59b17eb55832160dab8605c4878d15841563d1583f5836961563d5327e5397724be169d7e90296710a9176b51344528aa0c4f20e281da71f506abec27f7aea7249940e17282e9eba84a4184f56cc5f35329b8cc1320994980d3cd49c72ca3246a1c91803009771cb2663d6ac01d44526f5f75168fefa21e5e431ca4b5403506f5f07ea6df9c31130f7edff7093f1ebb08f7a54f9c32dc713e587945bff891163cacd575d9e283519bfbd7f52a2d058702cb99a62ab29b67ea96c526e29455272294ada45738ae0484b320e537019a7f4649ce293cf95fcb08cbf7a936e249e769d2c36d24ebbba0923906e2c3916db5982a1dc6e89d281fae1e4514f5d4e50787cb0254a87fdd4a7ca1f5c2e5845095c1d27250aaa44a959db057968e00cedea463ff677a0604e4eca91cfef70b12469e62b4c929180b837490a42aae1b409023de9c644926c4812109274d326eec720282ac1442598e869bf48375fe11f49b7f169936ee33749faf1c9f98c7efc8582b9249fd18faff0ef70c14f9f24dd7ad4d559b1aeb5533e2738f851bd8b40caf90bf5f8493efe4a3d7e127ed2ad5d26f169bf5268bec22f3e2904e39902246393efaf47ba479bac1aea3694f1e817d6ccbd18779de7e1be0f070a81b4d9ba01d98060188a228b864563cd288dd04c487c61c96678b4d9a34d5c436994066ed1bcb4686de2d66c0c3f20c6d18fe20b8b4669e0076180c120d3261e892f2c9a36bb8e356b13b3686d5252abd6a6d9a285d3266e0569d5dac4ad1a4e2b489bb875d32636994c4c58b066dac4cf427c61c9dac4ac18a5813faf1b68edc8efbb07b1f8d2d9166f70efe4795fbfafdf759f75b1de405b66ea2c03f455c357de7b9547a5a95d41b770d61074168869d3a3409bde531f85dedf1aee79dec9fb4eccf1df83b44721cddd9043d7753ec23779de9b5e497b55dff354b2378386bb0056237a00c1fa0320e0d421d488a0836a00ac35439cc8e533d3214ee0321de2c42dd3ff321de2044ea6439c0092cf4c8738e1042df70552505429d4898b530b1626a61269348a426208823eafc3d77a933e3a138095c7d8990a292207d505632cd3b799654a69986065a2891a040bf853186b08d61c8cf52d1d0d00a42aa788965d879afbff938d276816a33466b4c5e6d99bbb8223de0ab2bf2543364ac3c9274610ed17d13ac82ddb52dbfa4bb80756f75bc3e1a393dfa6256bf6f2f499bc2e7cd174917c5fd90fc993bd0ffa8aaa7f9f66fa3818ed975318cf5b739d52edc26ece58b1d66d673fb7d6ad97349b6c97474ac3fe986d484369d44775dd8b6a81765259b101cbb6661641cb274bb6f9ac912db565fb1df66b6fed3a439a5cdffeadb50ba75db58976f9db6a5024219fb7c80ae8e6f5f704087e408cf4a905da5c01a9ca124246aa522b2083910e3182483ec33cc4089c4c871801847e97e910238ec862a6438c78002cdf076b93a8307eeeeeee6195c9f74958be3eb479edf9d615521af74f97e1545bf7e9fdd4abf44bfcfb3356586ab4cbff3a6d175669f3f6e3e8ebeda1eeb135f9d0ab5b3b1083d17ebdc15f14e8d5fd9befe77202a843916f137250f33e481a80dea0e6fd93029caa0c366aebfebdff912b6ddef7489636ef3b59a3cd3ba3cdfba936efedc69e1783f15efa83619d10a85beba4a8d640aaa2f2bad202b1406c4c76796e919b4a7109a4b6988938924cc46527e570658b9947ca657f0fe7e53e9b0f882823e548b9163e4d00a9ca09432de307abb5d65a6ba9bbbb7b04b2674a65b0bc320f77f8b960bc7f8670ead30fe1846cd85a6cbdc77faa78f8f647fb6fc99104919eafac373b3f26323eaf8c06940f41c658e6af934caff0492663ec7de50e369fa1934c094669e06f32443a317664e80603475bfa710cd226e32e59394a037f1563f767ca26e357c9e0940d6d3165fca91bfc2a18fec761fca110e319e32663fcaadcc150f36ac07eb0c906b47f8eb2dd566bada5a9d0c981bcf3c97c329f109f109f109f109f10f448cd5a4a695cdbd8ddbb4e7cf91e8755543282fede2bda6002b62b811ff7d0925008e667e4b3f31a7d8f4fbb4ca020cbfe108085aeab868a53a1f8b92d5b14e3c99a594bd23c2241f214cb1cae4d0e1f83bcef05a3bd3418fb495ffa3c7a2fcf5b634909fce068d07e0c2d66b644ad185f1cb59858bbecaca65de2cf62665c3431b4981eedb2658caccd181e6dda1a4313438b898572f82fd4d7f33e30dfc03511cfff86911bad9a2abe7c113560ff12f7de7b2fc6175f7cf147c2c01481c1c1d8ae18c33f692d876b032251fd61d9b269d3c52ec7cee2f003028b2fe04f9bce5a921d08fcc1603c59331f503a4a4f7a52f903aabff4265f7aea3222f980d231fa01d5a50f163f7ad38f9eba904c4816248cad63f0a7f52b0e1275800acb5d61b9cb9a3b9b4c317ade389e4ea09f3f413f1e763de3498fcc483fea2e0b1284750cfe26b1ec6f22650e6817d04f13e38ce232e947a28ed17f56184bedea9f5c8be1d12f1cbdf2bff5b0dd995b03ae0b06c268ffbc3e264818cf96edda684bfb2b86a657fe8a89f5ca7f87466486230b120302fb91bde5938dcca8115991ec4f77765a43a80b6608359dba608850330aa7fe11d8791f080cad37c478823630d026fb0f318296807ef08bf6ebad24ce2392e81ba2b32191574657f4d2e8ea06414d2ae80cd815e6067a9b0561a09f162824e2966db56cad96adb56405b62213f35666b2bfc5606972f34c6e2191a8d5b2b58874d9bac228866e5071036722b16661bdb476830a102b086b36b266a00c2b48f6c760486405e99a9b76e1b74fb3a948f6196d93c5935933168ec8229259b7eca00c6b8745d32ecafac1b26101f13102fdf86b54c6ccf4092efb77a27b8283b1d1169cfd2740a32de1e84935af1fecf2ac36a471145f5499bec3d8ee15c21b8206b9ff3c85c45bde18a5d1658ccc3e6b56cb8192c31297bff2cce1c6f22d5934d64cc878a6e45aee50ed894a410333578baa31b5bea15e424fb9cac45c1a1ed96978c28f88b49eec093f994563d9b066a09f2ad6f048c9086bd789ff04fd4c31daef4b7616c91c403fa0253770bdf207f3e360bca11b0a7deece0fe85e91d583f563c6a209c912c8d87e8a99e9957fc89aa5f8e0cfa6f8647f9b71145f44f776e313e3f8a311c61b3e377027add5684bb53eb4c52447998120231e36d0ae7e99d420636f22c82f992fe7093eb2bf056268d9ff867699e440c1866f6cda75d22341b2fbb780b4ab4281337093812036fcb158001259b250f437f13489030b63e8e62fd2bb11a8e91f92389348927aa972c2e10218ff1b387fb56a7ae5ad9a1bb821634dee445df7fead9a76fdf007d5680b28f7ce130d63a33046a0af98980b8a973ec178b2669e07b68cd0b279a0181c4f6b7f7afeca1daa7762508cc1c1000bb40b7f0e8cb509ceb4e9fe202641589b3e430d0ab05d82728f62624e63019dc9fd1e44f644498c60aba74b7307e3e9392c77a823e8a7d5339e23ddc19d2bb93691db0e8f2d826b1969e57c949e661fa4f76ff5b47c5a4a5a3fad25ed1257602b322bb176d9d2c7e8fd5766da85ea129469d31fb4e42766a67bf50303d69176bc3218b091b6eba44c22946424fde8362a513a4c3ffa51f943e94d4f5d4a3cfe42c18c7c2095281da4377993f287d1939eba8c7e874b1de92895a0a9046ba31109977319182c86cb91bc5677c5f0f117e9eb833ffe1a7ded96e51acee46aed0c0f189bd7401f5fd52f95600d05537ad39b4a1f7e72fd5249bb3c415b8ccc571e13f3953f782f8c8d3503afed59bbce968d45e32d5bbb6c26d0c4447c196be84fe2cbf739f0778b8d0dfd2577a8fe227982b11caecb42641163af98b8498bfb63ec9237faea1a3176971806c272f561a44388d023d3213ab701643a448726bb58a2db7677c7c46a15296969aeb59489246d539ca14666d4084da64668d96362359fb436036db1d94568fabb105f6266da6491cd4cbfec418c1a39f91331260ea42a67db64fca0fb06fcd5e2b1c9872c1e6ce1cfc2c4bdd6f0579a203819bf0d8dc62fbdedbef30678e8c82a9634745fbfab81e6eeeb06786857e8f1d729f09f8efc15196f21e3af9e773a61b17bb0234b241dfd74cab824be93d55a5c3d532d65cb8e1f44415fef9d612a954aa5b2879a4de5d97dc5a1fb90bdb71bfb497a339637e5cd0d786386d4f49b1fc130acb2ecddf82e7621599bf8861810e3105983b4596bbdc2ffa713f61b208c2b5fffbe3d2b4e26635c4bfcb5a72ae91fedaa0cf0554e2ceda9c7d83495e59bf54cee6a50d37fc7666623fbe3d088d464c71f8a6247d66001bb2ed7aeb3dedce0af41f057fc15d79e8c1ff442ff6aa45dde63fcee892f9d571c6da119bb888a4a1468139f3593be8a3eaa37b87a532448bb4eea53c391d9da75561e387f6dc057f83d8c49a491f461f2a28ae3a166b18c916dc0df7b5c520f3f053ed232a06d448dd2059082351ccf13ed0c7e0e1d38007d9de80909a614e09f748a0c3ef540251904bbae92ddff2892694fa6428cf0c96015bdd2ebc893255796ebb52fbddedbec95270872d726187a239310238ae4d34606ffbe0dd0f5e0d7f0e729f44aafec5306bf69d9957e25fdbe06dae2197c0578a97675e59fba072bcc0bb57c55219493db2dbefc835515423195a739bee7aaf2f46e406ecbf7cf93b35bdcc65f32fe7ec7fc25a3bcb8d35bfd399ea75589c3f9aa529a55ae7a1053d35fabd397566425eb10296accc6e9c24ad6ec36fe32316cc7c5f5eafe0d99be7c91eaeba83e4efda394e7e95565097608c7f27df08508542ad5ab7adabc285f49154a49437dd5ab4a1b7a1c1eaa535057f9f7cf2b857c8fa4febc4850f76221df2d841e47e36819a4cc11aa2fc1bbc8403dca871e0485d447639b2fa8f5c2d1744abdcac5229b428db067dba45de843dd335228140a55aabec441f5a66a7b6abda14da1462a1377a3e99452e9c2173752b3e7a0a20a85423ffa8af2a1b2879a556f3a8db4791dd72e557986cafb5e0474bfc2789a25697a10c556946a226b50b3bec8a65023950c92d2187c982f838cbd8be9b9366fada053536983a66c999ae6699294ae3c51013bb2eaa9aaa46d863ef426b2469bf5592c154b25e3697315a2839e7c73399b5c95681715a20323f9bc3d55c5a22a7d87d66bbd290ebdcda1f204411685507f71e5a92ccb0f912fa872a5cd50e93b6d5e93371a9f0ad1c1127cfa4e4fbb4e5349bb4e37f2e3d32e6b964ef9c58f481f32bebc381e6a4629bd88e92f1bf3d5fd52798ef74966965196bed3aed3c23a76ff741a4733df8ea94ada8dc2365fbc7fa5dd686cf3561f3260ee79e3783afd9be60b9286023f545f71a8f29aea698faa577de855af52bd6d17caab9e8a2f2a1c8d42be10c2ab2ff365bce7fc6596600836be8b2fff6e536548fd7d4782b6d4bfef4950d78bbf5e36195b50fe3c6593a7aa37f917a45353f52992d296ea5152b2ea4d52f53248d55732ab501e47a3c813f529182a15213b5092455f9f48aeff19148d3162c4888161c0f8182a2a38354251a95436885e55f650334a79d60fe1902abf763cdaf5e2ef77b37ec9f8fb2dfee28ce44a3245ca58fdb4793f065997c0201b36de911d816981b044d09a7d41be7fd6b02ac8f7cf150bb322b0b054cac2527fa61ef659c5aa7ceafdc50b1569db54bdea6b0e7db6300bb33228256d53559e398419a543cda1efc1e6fa3a889e7c1b445fcb1e2a0da11f1f47b3f8db737ddaa552c2e3ab5ba6c8ea5395b4f9ed0a9567ea43a2bf0f922e0d3894cf43cd2f3e559649461c5d928e7b417a11122c5353c6eacf2f5f2aa879ff84f96b555e2ad0d5fdfb8599a90559965126c9f73ea5325c5c6ddd3f3b0a16a77acf53bdea737cae3654394ae8cb24e379e2c9a11287d0f350b3e871701e6af6226ddea7f7a6fe05597bdabca73f3b86c3060a5983c7db55f2d07073aa34dbbc2a0bcbf9eafee8699f5e1e959ef49e33fd6dd3a73c97efe3701599f224793a6b3ec928e5c5856063fd94173fac39d7ae94bf7f7bda555d9cb28ba7ede2492b43da589b1724e2fce536bebaefa194a73786ca73545d5c4a69616ddeefdefbd3c28ed4af36a85ef5b876a1186957cd613101aaaf291415697ba839559ea8f71c45d27c42d2ec82c49dc893e2b020cf9309b94367224f5b224f533e2fce34224f9b4f0bcbf74792879a45e5e986e4ca1d3f9b0ebf8949b32bdb85b602191274bfbef066baa56e2a33a85d725e993b93a9ede997c5ddfcf5fd7c3fdfcfed76fb7e6edf12100fd0cc0e4826f73bcfb7a45ddf9f2058ea5479727d6fe7e4799ffd75651eeed459dc69715d04917cfff3901d5b767be2b160f4cab3debe1f5ff58360e3f773fa7e9e7e3ffeb2b85ef5dfff3f9dc611678dd8255689cdf6e47e6c8db4ab9e3667828d1d915cdfdab2783f7f48e0daf452309ef6b438cb0327579a7f861b666c76ea0f4dad8dc47edc5cc9cc06a12ddd890758e5fbb66b7a5dddbb8d19e6e5d166bfca2975594069f49f5da61ff6ebcea80c5708daf25430f2084da3ca95dd9b36cd7eaf03fdce89c848713c1b993e4bcbda7567bcca29355e1e7dfad1655f1e271364321d2285927c7e3f52d8ee83b7563fbdbfaeac57fd9e378ea7d35f599985f17bb0b97b1d44b92b6df0efca1e6ac6e1febd69b0afadb46f08447331b35cf880a0d4d22ccd921f9e1d20362ef3999e9c0da747d31ab6a408cf0d101e55e69303911a542aad7e83005296d1fbeea3c0653a240a990c43a643767832280ae98bd2ae5eafa4d7c930daaf3965fab6a577b2dcf65362acb90a04f971a3c9dfdb07ef155fbaffbc8bafcdadf9abf6f4aacdf7aa929a731c5bbf2ecd71daf5798ee338ee2e721d597f9b6fae363dfdba40ae4d7ffdca6be344dab4715b9b5d6d4e8ed3e67dc7b9f1f941eebf403a1bbeb7361748bb6e5a4cc0d7919f257ba8d92b4fda66d8665752dbc9ba2ac0cf06042bb5f762dc759ef755f2c70ba80604c350a494d24a86dca9534a69a52fa22faae46974c4414a326b254df44d5ec092c96462c20274c547abcd48851811247fffd9abb4c25c9ca35c69a02aa8540c1737452b19a21101000020004315003030140c874463f1789c4679327e14000d77a4466c5a1d0ba320876114c518640c4186016000014306066a46a300c1013f703f84e0e822866134805a21eee75a26a8e73548ff2085b405cd77af8b1592afddd243774074684b736e469374d749dd755461c283b49b928efde4984e61d5a4b76b4d63a3067c7d1b42e1484201ce981e24e47ac0461b05a7dff4df46399c330e68f6051bb0dbf8f4d5781de45367390c53379a50a0c0daec326b467077c7223f3f24cc3562ba5957142ac19d66eafeca2f26276eae8b98341412cc637e8d045b9f1d52d858a4137c3dc5e7ad489c6687ee0fbc1906abc51be8022bb00ea9a39ab5863202fa138dedc5abc98574422ecbbf02124af406a167a217908ff70b4797f3269c731a03ec29f39404bfa0fffc232a862d6104f297959379ff00358de6917dc88788682469a65ecc920b90eafa956c6f53265c8cf632bb79ae3b4248b38648a01cba0e87bef69e7663c5082f97c838e94e2171ec9c00ec8c110736ae974cf3cdde38753bdd25a78505557d6eab652f7b65a93cc63477b5ae111f731a171139460629605d4d090aaed20d074bbcd2b67a0aa1e7b97cd3722d4ed08fe98d4617ce72726c5d00eb4f6c09408fe383146aa0e26cd5864b503d78817077e2adf0b0d4d3c582e9fc95d25ab444a77db8db93671163d3d4e38f0a8e2f7488a1b4d1b30016cf040cbdab54c80a71ec55ce0fad64c8e14aa10e78a186b42a13016e290ef4c51251e8f01842a6322789215a7fc32e9320d5b17172b695fed3fd2e4c66793bfbc12a9940cbc274bb16ad950999e83e7197b87e56354b4e6b12aedd5fae3e93b3518b45390a6d9fe4fabdd28a5da0423a3171239ba59bc058a1158384a797eef6938a496ebcdb68394468db35784b40948c17b7e7f864ac856e00c3757204222bf51084b5c7ada967881392842098be017111f77783b8ee4f3869889b2629b7d9af01bb5b3835f18e46a02dc79700d002fcaeff263e3b35cfca1371b61a6e2ad5c806840bd7e6bd9d6cc162337b20ca82893554d1b92f86b32ed28af24c0a314095c465207fec750ee8def200e84f37a1695b64b8f23319e80250879d829613e9dc9f19c2b8b10f3d9fa8189010cb47cb512a5d3b35e4dc58c1d7f8e00a315b6589d1351d42ed54edc6933c7011e649b00bcd6648f74e1829a6b22ac51608f29b17e1583398fbc4de86899ce0b7f62c58c8acb7a85edb56a6fe9326a63ee03c0e3752c60e8cf32dac717859506e56ee3d71c6420855b5a109d2874f0e5ff8547ba330b667ba4d7c4572fda6f36447f7532bc8295a54ce133e0f7dce726219b613ac6ca166afc00b4e4b14a152a144bd69e6ff0528de7f07e8d88f3afd6118ef57c0c11bccc039ceaaa64d5421abc00a808ea0b86d781f85ca3b2281417d2b607e66d765e698b660810be671c62626ea11a3303629d32e5c352bc07e2e821da3c2c571a4c72c8a084a63988ce6f4017adde41430f3a10117f493f0b5228485133086e44a5380938fa9da830c2a40b4a4a639cbed8e2dba39cdc0058600d266d90d33f8eac5d143e6a2b548053ded274095774ccc9425de6a01c605bab4af2be5621794b603f2e1a5cd6b6a3e2edb0ee0c4f3491c335befd4ac1f748b15078859cb5cc5e122eb96185c66602ece5c90b7c07e2ef31668923f83a36095ab6c7beb61922ae6e67f2e8155acd7684d32012c0a5ba58d1d70051f3cd43cd1a366429a71365323d97c404813b000437f0204e88b84b398e89b0681150a2c25d31b5d09707d232fdc7a82b8cf1dafff0bab0cb0d5abbdbe048dc62807be6293c7cafdce843c576d1b62a143e269250fff900be253bb5cdf50b1d06a2beca74fafd6e9ff2f7eb92a177009850df13880039f1d324057defa280bb4e53b9462b979cfb61b4cad9e577a48ca6fd553e7a2360d48db4aab6d9a765af9cca73359b1c6863e699b66ca6a880f216091c8f7100ba081d969d96cb568e47506177802b2285e92e8383254866a147f18caab8d518dda9fd20d3feda5a8b8d680cc3ee068e6fc582a67892d214eafd4db3c58d59c00086a42a8d07eab4f4f9d4d432d3f4e2cbdbf5647e9cab7111a7471634b1dbc794cd3eb16f5c9a033e7e528e4d83cd18fcf125617ce7aa417ee2ff06620e177b277155e01baf5c2d1a4d2a8856803d0abe1d4d40528e57f88e0253a004aa5be9b01d800821b06354a97dbd7f469a6a660c517c2dd3cd344139fca319775d55dca1f593aff461c0c1a523394a6b8394b4cd52aa73a2f395fca0b2a4bc6597479f2cd3b2429f7f0d04e8430bebc76ada3ab4b16d678f3632811938d1c92a38659a2633c40361f1328150385a49f14116e146c62bc5261a1f7d61d5b59d3c231dd693723b680e2438278eaa77c60c1e5272cfe5c5821c1153a61a13843ab0f766f65221c527e18c6eb618b7e20721816a05d78025955e7dd56e51e64c712892d0d66705bfac18ccd43991ad1e2ff49023ce104f4c21e453e706fe4bea91d879b006e88741ab28632f8b721cea05856b1b3a16855cd9b12d8c7b8e68e875087d0fe905797c93b76f99c0e29b26409a180b4252749686a244200eb8feacf12dadea158248ac6c50c81feac4a4042c12e245a1fa5da253a7f4fb8a45d7557be946ec19a6945343f9cee623d82a05b5a654b511d424492ba936fda1c99e9abf221bc08116171b946b2c30239e15bd14db01132344142e3b99188e24d5d63f552559cd06961a967305562f138b4e8c692d95a0c46d0df55f80f59159a003546d210a09b80624231c339ecaeb270f326ff69e60cf7103cd51ad9677f9eea347f49d0b9cfba566e0d3211e62c0bd92ee9e6cf3cdfcdcdf1aae9ca5f04f9d425e0a4708768b76925b89cc73fd4bad35d99d8b99a9a98318a8c65b3b97eae945ddabc6ec222ca4fe93e04bd5289b7c3bb2b69132a86f8821c7ea92b7172cab1226e88dff9ccdc48e452415ab7a044dcf6d8735fcb93424dcb6ccf9ac61b5d3696b01259690fdac4f7b3e622c35974d10fcde53d0244fe91648b2dd242efd6d374fe5c64a920a74350222c0bd40e401b225a873a376d292bb21d3d31156e9cd74a0477111c89581290c41f53171d764e28542338049aced2f80e2167d1abbde3a4dc504d5876662436b395eed92245a60109b483bf6d5d0422aa9c66d03f079c56cb499155145a0645671253050f2fb5073aa57e8d96b8cc0cd2252ba738f2ee23fc09b11b9dbf77238a14893e7157486d09a82575f857de959be8fa14cef1f924dd485b6f2018908915e52a3d5bf33998fa1c100a7871840f6ea179e5e71ff1ecbd3b2ecbfc13c43840d3b034964b7c3d518b30b44135ff93685b7e56aed65f4556cbea164f217d859c9c1b0279ac7c21f8fb40d74d088ad17800d9add1b705c5afba59cb17e4c63af74567c84bfe19fee92c582071d39d22f9a8a0cc8d106b112f92fc25e729d427bc216772b9d16ef294f4c6470c798c5548e1ea41cc6ba340061fcdec2259466529659946fcfa1f9b80d37c5c6921e0502d45703907354aec4239ee9cb7ae68591c174030aa5016c2da5e35e3a0918b7613cdea007269a24915606a0b030c6411421e2beef68b1460a2b889740c7e08e14197aa95bcf38b4e5b46872901a08ec4a64ac552bd9f83808c2c18d398d2a9736e3925c3268b94645d35a6eb53db7f2316dd2f81d4badf72692d1d3e57da050ba7a1db33da2c7b9dcaf346f9c927bef41b8e7362af4b091db3d67f169978f51f3d296a439a2818269d485e26785acd203041eebb78ea85be6f4d31fa30a2bd36886dd06045ecd97a5843ce8bebb001dadaf478b08ba29d0c894f9ef89d097417af0c65410084ee17e16d1b74a4060a314ab7ee9548ef6de32a0b189bc699c04a67f5fa166940cfebc45b1677a675290ca4a04d8a8876506c81601b124d0a0a76b7e666c7858353ef1b08b3136378eb002554a87bb0077508e29213060e302a941f195843c6790cdafef41658b307b7f2d5a98160de1557572f2503bbf0a821b259808bbe9612e6a2f90a1756e67b25fa9578ded20ca8ce9f272ee63feeaa1d55e8b22fb323c6c45d0f3b1e8cd9de9327ced98d8b8325e0c62cef141be16b962a714a0c7f11b131972f0525f421a38cf07b0fb67b92ee92b20d329844681df1d3a8e597d6f9a55faf477412865893761c91fdbf23ed2c52d27b40e088f2dc061206d6836cc416ac222b867c6d5e34f174919ab888c5ef0bb86fd99c6c1c67ee3841ef8a51a9a22b0d8304186e5d4e5706d7c679795bb2b57c44418555309515e07a67e50a0334dfab608a0c3b28005cafa229d546eba97f01b13dbaf94329bb86943335228243d02d555c36b2f4c2eff0dce0508e4082eb361185e613ec082b21b10322a6c81ced504323dbfe479b1b5cedb639570d083063eeda3a0b17e65f33327a18b4ab8ab35a3c622bcd957abc993ac8b2a40e4ea0d513f72df537fb6351d706405095d5e73c886f1cdf5030cc9e2ea23b6c0f042f7edc30facd95729e4abd91c4cb1066dddc934346ed0985c4bae5ee90139c6c30e7d54003dcbcad2850b39714b3d785478583e6c3c8f931e002287f1727f1cbf2145fbbb66541ba157b5a7b420e6fea876df5b08d4bab9f67265160a084f44d900ede2611412247516f92a6666b5fc85b60df82c061428177cc8382fd90389b42f76b2daf82f6660882a21aed63084cc7619d6f7c13183acbe52d333f0750f22d7b66ae62aaf1cce18a976ff26822d6a13080d487f5ee0471c8107b446bb37187e02cd5ab620e65f0a23a77abdb84e6a99ee998f0a260c3f044702872e55e3a022c7afa0275ac1c0d2aa3ae319181900efa5373f7ebcfbe864b1f2abe058276a3ef4109031a28c2de7c2df92da00fa16c0be57e4f6a0ab0146d775402c241c32c2c91151781e97816ebaacf3eac693bd874d98af24797c0d38ff8ecd1da6a68ae31a48a56cd5fb39b5b5f4b89439138ec23eedec1cb81156656b303f174a52ba798dfbcbae6768c694326a0e1a318b70bee468d5095fdc60918d1de6b68f2aa40700f2006661e0df4e302679ce3557e59d88d506fb3ab1af9c6d4e88daced3630809ee986f446a17427288f658e1584abff74255a3f2890cac6402c59152fd668a8456ee4356a08fea06db84a40b95d6493ed070bda8380fda9e5209f5b177873b856849f284f49cda4748309a5afd700da4e8d351aa32a5f5d376e2925633523502b20b841160ffa7d4b8cb0b3e2db62deb02057c95bfb88998a77b191a9c69778fe73c52b8a3f0a68b6010e8c4921e0d6bac5325851e80323b95b353fae143a4503816bd30233442261f021b31bedc964bee18d6831bbb8485884c8e0e0678f33ad1fcd5083cfa12a6ade8fd6752cd5c3747a755add21adf98e95ee766351d208accb075c4a89d62e5401adfa4e64190d77f27ef327ea4ac79f2eb78d967ffbc134c985ae79a600dd8443dd9a2dada96a40689709a3b0ac1680f9b61a055ce096bffecdf06d617aede3c08958bf72e89bc4d35603d7e7812b66c8d6e84ef79a63ded2e33607b3a033b34ff3fda8f3bf746b0b5f38f3453af43c9cc39a3dc88d812f66c3597b5315820a741d3b6cee179fe8d85d591f15dac4c44f8bf23090b789fe5ed50e2a5058575f2752cf16fb6cd236e052640afd92351402d67e3c267b385840bf78616c1132c670b0630b40bc3367eac1a379a9de75e7622cf3669b09e02aa12bdecdd48df99ea8bbfa312339afce1b0af0d77466aec1206b6baf0ee01f2f76013a6e61609c02693523d279efedbebf2388b23681bccfc4e15b7d9ec01f99ca36b93c43ca59c31b79d60a47daea7cd395759f5bb4e4303d8cac3d498e4e329bfda0def0a22a1e7700914e9a3817aa582d0c93bb799c79b24482f59c371cf8d247f6ec90097cfd7b8602f15886333e3fc1b9f5931bcd5435ebf7e28fb64659a3b2ce497f540a6b8a186ed974e9edb02d12752dcb99135194ce38470c66b99faf10543ce78a5f24b08db06fc5d0a554875e266c3f196b39689ac976f1fc633d13d6e8407c55c045873c6050484835e9af85bc671f9330796130c3b59b89c44ddebef2a7d03e9013452362fe9e817cf72fa5532fc12ccc41cc6cfa6508dc393119b2905f467f6d64a9de24ab682f8009ef8732908d78260ddc30a879376de76687b0b88721bb0acbbf400997c0018301b6e1e664d8094085b4e027bb30038426d613e5a0b119856de7532fc4de997e0b3baae76d6d669bb5a7da22c132b24648f982786bcb02aa3aef2022aac7ae1e8ef7075e5a3003b80ac308ec13b08c228f8fe18f4c9b7d36511731062fe3f896feb53c0b7d3add09d1459fc53da75c65e620bbd8db48d54eba37363e7394f558cc5b274b2f1147dbf43bb4678045fd50568abe9225ddea2d20c4fed781d836498427bbc47ae966694f0492238f92db9d91b15768351ab3847d53a559a8df51ab1893e355c6e34c5f233e2dafd9ef9c4448ff51c95f01a79608dab976ce780ad0c7ddd1e4f15d406c418b89381be0b61b592ba9f9a8e84f1ace00fcc5488dc4e46805f003fd451f5ad5d1ba8657e0330876bea4f7aea3658194a05ccece7660453162fdf796215a22ec61a3709c4850080b22a1d2cb9f020d0437283d16308738496e92034460f535b45bd094dcac45d204189b17333de5566801d372fe5fe0740db641bad67e7afc67782955deccf4860bcceafde08a0d4dfce904a3937735fae6c1dcb8c486f271646966bd8bfc18e86130215ebcd9861ebfdbe6fe3b167e0b6f654fb51b0d76aba1ee35a0ab0676d1e82e34d8ad06bad798ae1aec46e3ddd1b09b1a745d03dd6b743afc50ff1eb9be1a9a2f72a93b73f1e4e189db62d6747d152cabc31dcbbf4675d75a8956c9e0b47ea63fe91f9d8990ee76e90eb3e90d5a7213d68087aa5286e45c1f002a4db719c1b1bae20ab90eabdeb21043159a276cfc48102d2d28a76693f96a2d81699011b305218acb267dca13d8dd16ad08e82c9f93b03a14e0b90c1abe8d434c59d7d2f8c9ed15d5010ecefdde81d063403903422cc71fe46dbab3b01751e1f5ba39f21a7c70c5cbda827e3f2b2d167df0cb748063268121250eb670b4a9cae55d22158e4d861c426a2e0646ae3fab058e57320fa7ace692857fe458e111566d9359c1c3d4303e3e4080ddf3ba2294ce56df476032a1620a36b0c2ab3eac5e09c2841efb2a0e3cb0e266a428948b7028ce82eb85e1989c1be7ea23dce10e017a69f6c6ade384d1d15ebe3846881b86bb60867d52cd4230cfca82f2f08a28e5a415c6edf13489af1200a3559827f1daa66065b9aefce310c52d64d2136a317dbc9b87a9023379b3b83141bd9beae4ca890542ec99015800384e2a59400f97b144a40a53ebf465e6918ccc4bc72df75ee5bdcabf4310ba53704acd96e0e753d81ddea8708296c92ebe89e6acef76f921141cf08a5ee2f0f1bee68abcd38228c121f921bdfe28663e956862da0dbe4cab27440e2d1b8959462c77aa0e3877b5d90235350502b852901c4831ecf11699f96b4012dfb2a7febb3899ae6802b6dad400feafa4ae1e5d2b3ab62058de237ba88e93360e7b7f16ea95f6712a55bed32658e2137ee77df3026a2ce926a122546030b1cd267019e0a168bef9cf66b0effc7b5f1d2d2d6b315cf005ae27c67f720fdc0beb01e404d47e5d62068b44d4008e00b2dc0310c6314a186cb7ae5dc392516c51f424e958f4ddc8ce791265d212e2fb630bea3a8d780c650eb604a4f1115c292815b6ec6f1619990405d71cc9bc3080f4ec07a6693ac85a441c6bb9ac3d7cd67f473f97bc2f7fef0986902adf853243a15aa80c9a8aa31c67a8de130ef0948be991892eef7ec8a19df2859005da6b7168fd02f04498727b6c1a02e966a22fe240995a3b6a0028b223f50c179418d0ce62d71376fe555c716446b3440cfeaf137a962b118e71712285ae780589a00872320a905832f9ac72fa72eb98591e1852e88c2e33a4f8b2703dde726514bdae84478482103570b7e63d7c7afe65b10ff7cf504fd0c97c7050b943d8ed92e6ef98c6501fa5d97b6eb8741dcfa59acbdde4539c0c23a8b8f60b4343e8f3c6f674e491216c7477ef33f9c9cba29f466cc71bbbdbd5fe63a1e6986a48a58d07edaa34fd1ac556d5f42dc5542d2fb408eb9ddf009a5dc64a98fedb9a35140a27c02260270b102bd8342bd50d67df620c7f51cfad3622419365eefab5197e9119ed59cd8ce38aa8f971afe7754749dad78c5ac4039f566ef6b51056033a38bf45a95d84ca3cf4ddcf215752036508d76abc0f7dd21c615c9406485422141fba7ccf22e84d29c990c0ae03eee589f06471f4db33696218b1ecced4b9bd08b3962321ba544e851409611412bab32190fa41b11486c1a32563b9c3eec93247c7231e70fe4ef1d348ec7ab550f4598692797d23d540deea09a134c6a78b32307033f4879a20e4870a6f156dcc3ed002a378425aed45311b3c24deeab6066fcd1e7bd1e90d007a373acc3ba3d98677e1e21ae8aa14db4f2ffc8eb49df882c0524940e3a0962e07e8d62f08f2ec9e4d0a69d7afe3b5c5dd59afefac869d30dc987102a5debaec98cdd00e05827a571f104f8c4ecfda75a77f4b0a2dac8b26608662660750b5dfb29fdb33200ed3352d74e843e7adc01905c77803f23bb83408d5767848adeccd6cdde8c35a6b30ce38f428f1160c0c183ea4363d890eb5a516e24bcd411727bad8b62a2e088d104253a0497db332a8564131207c16a37305406fa552b7f9b8196aeebc43b9c785727709ac3502338b502748fc17d237734e79d1ebe8766229d6f2773c5ad9263d81347789a5a324f968b5f0735817838723fe6443ec99ee7d98a2166bd38d1a1f5b7d54f15cc6d243cbd9578458933503fda85676547d74c6f2aa8bc7a34f51f67767cd31d756d3701b7247b50af0b1cd2b887ec60e0ea708033f29fe0a908845a2337ec77f46b4d1328264377fc03c77854270ed70b62a5c413ac8ba017be8d038cb8944aba2a640856e1bb9e24427482efd7235058712e730dcf5de90865044bbc24ce70494f3874ca76d81f952da0539252ab0bc1c449abb20f158ed9540247aac651132f073ae889a148d4d4560132fd5f1737fd986a0ccaf09c1448303839919c951b7a199cc9f940e088548d91efa509df3152dd2a6e530cc7015be7bdc3922c245cf63a39ad1aff9762b4a87b871856f1f6ef3ada1a0d4d4410e28b449db25bcdc1d3178caa25f90a99d45a15a9ed7b6ebedb84e5048034f3897b0235a52d0490d65d2b1a3f1464175263bcb811adcbb74bc428435228926bcdbe49140ab0245b85860216afe7a60d12bcccc9b0a5f486c11845daa80ad216e262756430cc9ab04ceb11b44c27f8df64b95d334ea1a617c8815c34309f11cb2228cd16b0e16aa90159e1cd36318545aec10919eb9876ceb5d8dbfd2dbc3f74a64332d2d9a6fd9e8a4146f3b9437ad1e82b8ebd940d3139955e421bc8a9c6b73ce48a327be6e0596efccb7c6780953be5be78e7fee845660a7ed756dc6dc6d5705bac8fd295e2c64212ebce5aad425bb78bc5e4c96fbbee81db3d8881b02b4714d6e01cda300bacb7d6a051a36afc0f7d1b7fe47227220e8cf15b2b7525c007552dcb9edaca8b54d49351f562de6d0c777d9e9299c61150014065417be045ad37498a074665e653ecfe02d0053f6e88417b8f26cbf24497e89deceb2e5e1b5ff36122fd2dfe560321b1c41517949f8c8a9ef6ac8f0f0da619d5eb198ee6e4b86a7618888dbe75619f74e7bea413e093a9ff39b1be7c11d7835ef18c3ff25c9750833ac98759517273246dd40f15f1c58b2d7669d22148b4e96d84579758e7457c3a63e6f6f6dd23c5f632abfaf410cf240c5538d0c73a71c983ad642fca1dcc69b2c6f71e26137892417aedd639ed920d0d50d3c62da7839408a449f50fdf3f523db285adde358465f4f347100da4aad1fa38a7c9dcfa4b5b3688e93a21d5731d030a5b71d8d1b142032d49e28f0f76f4b3e9f42aa10e3c16046d53720c70b38ff9728f74a8c2f74f29b824745ffd0b7d00bf20c2773640834820945261c3c0c8bacb64f940527389791273d6927a9c1670eaee51ab6e10f44f017dd4e528535968f6576c8bc44983c5ef1709bb04225ea4cbf746102033bb4755dcc0323159253acf785bb03f8a3022c0e183170a8469410b078696607872eeffd3143a7f73ccebb89bb10d291fa12485edde3657aad8f6dc6e66b190a6898ceab08767c67f49e00d67180f02b5af022d2f0100236a3be48d4ede85d744f3ddaa2d7f93d3e641ef5cc24c6166d73ca09c0ba939726704ce71eb6223aabb5be69999bd8b1490625afa1774d1d784682c5bbebb20092358b7283ca90b89434565565c858393166c1f5e78ab555dec3353c54992a34c6bc859b10b720a3f4d12d76b8c34a814d3d2f6f51d730f0ed46a553a3559c841a2b9caccf27876b83adcbc6ad023dbefc7e749fd48a8566489f47e9c1e2ff08043646b583127cc5cd0850d831c609bc9b19f3d8f5a25de62c95b5c2ff9023963da64cd845073fef23624ddebb4a7c29e8190f411fa07dee8c6c51c275e9caf2518e3ac15eb2958cb5a7aab9e5ee98d03f543a84b253afcad42529a24b3a96ec2881ac57c6b28902fe56350ae3c2fe58eeb7847bd8aa6bb90fdb63014f780f283ceca4279c580b1cee1913b02f8ed841c7905bae989c3cfb624ef311d0e16d389bc480b1f60d3cb6f231f012d354807b90b08ee8c99ddbfd36e050335b75998bec8bbb2f8ba46fb34c6f380cd36b3febe0c6341da6fbab8bb24436055126af2d955df8c3e7a62e103a0d44a9e2d119271d8bc8edc5186bfac30f86ffacc478d380f87f0464297941d9c38169f9a0a4ad8e94c2782cdf56cbadf2638ab7ab35a76341132cdc7409b73db977d0153e084bdefc58a0d9135bd7ffffc37010e4a99789fb1b42cbc1a1a9404b763f2070d8e2eef9a270f1b42f881c952085656e54c47d1bc66a691903c751b641170941bbaf96d519db42a302533877abc535a6ab4f0e2d802c88b7dbf68f643aa08177bc4ef526fdf593532eb722a32f8b92aedd69ab0514f12958849355bf167edf08da696458cfbdb94a929b986fa4e0d31b4bfdde71136017824cfc56ae889b69cfa423636227b19d1a43c8bc3be9d22eca700eda768b4e728de67154943de3c1902029fa7a4d0613fab04ac89658b27554a0556d28b0cdac2319b8e20b0b1b2bac5822dae8eb4a3c4b74bb215542434fdde22dc6e96b8bb6ab38a3f90053529172447f0ed24e007ca32a53d05351faa3fc7aa6830ba4b87216913a15a339939f2e6521cb65ed68f4b6205155644e042e8703bdadeb73c34606b61de9d7710e02b496d4e858a656b84c9903e20a9e0c4d3bc89d9bcc006dcd63ad9e89794bce132e8f6aa60c6d4824625606ebcfeba8f6aa3ffbc7750c6b0eb566245954fa64d7bf3d4226dc6849665c1cf8775c90d7917be93801bc9d7833f1c14c98b90bca0c3243e4da912c234a4308d0c656a4fdf007d902ba280c3d7098c618d1dc2784ea9bbdbd86ba00fc7e19d26017e8584d02a48dc3dd61b4b603c0e9affb06ce2b758fbe1c843d9a0f6c3eb70d85dabf6847912d5d21608bd638f83e13135dc51cdc0f04ad9c995eb61817b93e8e78d63519f2c121cf2c8c7174cced1da201c5608d4535c87abeb140248495137a4c2c69953a12cd21a63aa8313ad8f8b4b6a70f69c2f8f9f3f71b1610ffe3324d65f94c5fdc8f21fa7f36e60b2155a0fa4228eb0270eeb2af25ab46720f9438e9744053836b5f7d0c27c9d8305de89610f18d9f925582d30d54ba49d706a17b95c7ac20523430cc55bedebdfec47d4572b30912aebbaae0ecd58fb2e46efdd5c9c604731b42c632e617a3bb495ce7dbd84f9bef04bf7511f1495bf3b9ed04223d9e0a460f8840328c2cfdb445f549009292d86b7e1f122ae4ab8812088f0446fcaa6ffdb5109c7480b732df0cf95ab93c2d745274b8b3ee9a82137ce2a2cca61544c3b06581abd53efc47cad0610027889f5dfcf5d880c34ed9a716ac04903f73e9c0377727a90565700f7a6d75f3edf1607bafa714e9e538dcf792dac88398d4fcf575579e1059088abdd16fe0cce239a5036414216717bc4082c2a29d53eafe15a6676f7ab2d9b2fe81047a8720c80e6496042d97c615a30fb7b3e0776a3df4d2cfddb05d6d57386d0f643a490c73a77eb2623a6203d7eb8f017133a25e72430db316d250950029e51a596fac566c5a589a5192ac157dc39afe82aadb093fe8c5efdd388672cfcc47f8fb10e979d69705087e09309778acf10a36bf0df1cbf0e8722f2e9a7b6360fa957b04a41dc8d535a8ff137a35afb08f9c5c4780b8cd37e6f4c3b381e75de46d5b7e5950889ab8cca16fd26c576db03ac20ac8e21861323f25e778271414817144a88eba892d188e97465e17f4ebaaf62fb21a10b52499de20e26e4fbfbb0e00f6b220f34786adca9ef2831492c9fb291424f57c05c69c248a7bcd26634791a3cef1a6b81a5658ab50f7220eb233ba84e990209364b5ba82e1bd8f7ca735a609df88e83f6f076bfdf54dbeef882beca0b8c9340681996a856b80146b4679eab58e1c6547f890e0449e3d53454a53b02e829158b5fa8a8cbf8370ee28a6a971d064abd509a773e5eb89dc1cf9da456952b54bff6db190bf3115b93c86504b632fcf73a48e41428552598b65c46d89e5dd7ed795342b25929cf4dc37f3f4155068f1db871d9ace8c14a1ef7e9c436f665d563e31c4ab730dcd071a972b9dbcdb17015c6116e80a33388d0da191e2fb5c4e741f9cd80ab72f4a67fbe01e2e951701921f8a48cdc3c734c4739e4e48be55649d86741e6f87b0a0764cb0cde6d50d3bf0c4c4e64e96a0fa0e0eae2d02fcb4087d8fab39898f5c31924878111384a545a5c9ae97f4644702aff1bb7de7a9147bb264b74b32c9e5dc84644759e48f22cdcd2e730b96cca641f2a62fbc1023f01f0c35e257cbe80ff00a026a9611b4b0f5f97bd9d276ed06c496e8b13d08d85e1137b4c7b1844a9e0804f9587dad3951e4f959a100c0618dc0650208254001e3cdc6270f0f9da58d18d6f9ad02338d2bf224a831af0b02683b21864a0b38fa4f6c4d4f9ae8d8ba80688f520519e17e642e5ccd394dc419d7ca4fe79563a5152f0952d357593c3357fa554515cc6a82db21661b724636a05b3783c8c4986c53c40e0ff5ff40c0def33ea8e25ea28a27d7864775ff1880d70dd06cee863d7425c195e02f01ac7adf534cc018e679ba2d2a3bd7d236a85487addf6a4aaf7d707f785dbdbe35b575e61e9ea5ed4b5d49f304fc0db7ee119a6f746881f246687b92892418011a04b7c8b15e662e46d2ff94f37191d3b7aa4f0d430f27fbf9c08db1fc1cf7cca7c388b79d3edc7aa0c30b14965861354a5f901b837f728db1a18c0b129f550a64710119cff5ae77509fdad8638509782bd7ad0b165fd24d301f75293ee8b9b68b61471f8dd57b1c472d92b789d1cbc752d70bd4a1be7197d5abbfb89dac01dc12efa7cde05bd34bfe723d3513595efa6d9139c9c785c2b095c4f29eed53dad3bb7b2613e9de7e8f9df952ae8f53e183cc775b73a07a3076e56c94791671140d09744171f9822ada6319de5ef04d06f03d8660b95ec0b5c5007c0ff3bd5b86d2a338a95bd7439a678e93bbf5850214af775117b0b05ee241529720d5fc780726fff490b77a89080d563668f747824a96baa6ed23d1b62a936455411215ee509c35667e7e42c07990a8a32ca1fd2659b839d93284aac775986ed25eed2baed2d792826cd2e00db1d9578e05fb40ece18b4e70ba1cfc57e0aa9ed5849267a0961ce0583d8e435218bb099362b3ce6089c1a28a45096054208c2c04511d5d415650792d46b82ce77623cf6ea4d6acaa48419e570fc7beadcfea30e0212c551064e45ca6c1a7ee2f3f050e79ed5c08528be02ad26e2ed8f8315141146bb4b21fdccd055fd4f9e95f00f62d0bc0793f19377e55c669436758af7f3f13ed3a503e85d70567de714f6354a528006040d341532b02130e8bb1c1ad6e17082aec516b3826ad83ecb1caab8b2c5e4d61dba468db234fffd13eceecd890202899c5cb3e16a8c408657c524c0dc369b2745b5baaeffc7339beaee7776e69a4a7a5058cc45e6f118bd7ae523dc441e38090b21810dadde7c73a9b300f76ce7a5d0ab2d3f8efa888314cb8e034ceb19aabe9c79269dcb2aa77a79fc5f8af4c9d4d8a029c4fb856c62e39dfc6944344e5d1e16bc8896294d7b6a10ed69b30a09130499884430ac6f13a4c459b562d089b49c79cfa647fb8e30f189badb41c42f1b97bb2b6187a215924d2d4a385181c6f8be696d0d51771aa35c3e9e6c910b747f4bacd62a06470f3f18ba28596cc3a2f31f98dc12513fee6bc0ab0d527921c1061e84537245fd99c4e11a0b7e4fa99516aeda37368da80844b6bb3a1cbf905281be7fa854ba23eb543c13f863d70ec250ac46a01a9097a52a61c6149e2c7c94405f46642b9d52052147dce834add05942f7c46e9c0ced16126c753470bbeac8710153441c09389d595ccad6767181aa73766a5ed3c7d1c4ba3972be29305d0a21ce655cc089d74435511a79d5794e365a2def0c6e332942bee32162ce25cda2ebdeb120acdb12ee5c899efa516e5c3b27904ce2b4ffc54e4dd57b1a2e4a241dd4fb35c047793ef0cf485f21b3f70b573817ba1f75e99fe2eaf48cec904fe4b5a8c73b13abf3b93c0592d97d7632eb433a2a167758631cf41d3fa8fc01f44da8b8f1034055dde86c3594b60d37bf39e85a0ab12d7104284f9a870fd97d601cd6b05a4c9f5e7f4c032277fc2b693bda7504957045aaf32df30432941db11ff534839cfe525c520204462328aa6b6fe4d2c61613e0999b62ee2232786196b191c6afb28b68a88e89413b052cc0ad9152e5a5c43bc3b883bf4d590a5c0a34c512eb48d7674376e07ed6500d1f9af2486aec9d917ea385bc54d27008f19ee58923260fcce855e878f0d93b02134f495eafcd393f1c421c70e3df2249454c264ac2b4cde01a74678329422b334c1115d8798a6429e44a28c5c69b0bc582c228ddaea229495156a979b8d349079d02b87bce172d6b71b6450e1ffcf0170f3b2ed35ac311eb6ac141ee18d4ea7bc5abad7ec3be6b1d605b70a63727a9284dc0a2008086c7117182cd756bf7064ac5e81286443541e6b00b72dde5ac7dce229ad03509e0c347adbdafeae905a619fc072a547cf30cd493d8f7f1e4b18e0bc8a62ebcd53ff398689b189b0fd440d827d0b01f8f4a6afd92ac3b2b6ddaef23325e0d98bb5cb7e8d86448d5e786014e66d4b42bfb181bd3591850458bd41bc6f33bfd1fc1653d6a62566f37e6bb7e871544618212e4962a2b7ed8e92ce6e580156515d5e0cdb6cc56120b861789972ee463b0e174efa5c91029c186c18861562dd29e0a5ac5d9ac67fac7ca7f4bf04b4a8fcfe9a8ecc0532363282bac01bd510e8f6fa3ee6089030bb10225b7ceb64b08415ab462b5732cda69200ca7ecacb95a9c93fd27f4aa4ea87b98901c316fd8bdd6f36d0d99b131ad769407bedb43428f873314bd3b1d2e97fbc69303e1d7a3c7047ca608d2753303f14d6fe951976c9fb1d1f18273bcb41777cf3421db1471977543d92f37e2ce106efa5507ed0dbaace3e2adfd42390c684387cc8fa1abc0a353d732a583ee6256df3b951d2340e3f60c96fd371f7aa79b9e329c032f79fdbcdf9002e16c362bd426cbfe7641b2316228c434489af698a92134152994dde59c46ec0739f67c5da81caa1faaccbdae34b5768749dc87ff6e80a179336379c47ea3a0479a6027c3ba48743506f2f70721e06d1d65e1f9d016056390a62fc1b40bc1584906e9653359ff1830cdec2f5ef6b7ffb7bec2e299ac06b4f3376d8ae84faae14e6bef24eb63facab9c899d446f0796b2f2cde682f61d17939f348f729bfda9850a42cdbaf170b9857251d6543bd00de88b64c19aadcf8b379a455a95ac0d2932a709d1417cc21d1d05b4b3486c22d4212ced7d7a425fe0a3636a7a2fa3e0a27cdc379b4ec568409df54bedf90eb2629c3239c218f49ab46da1f7006c1cc00a5c478ba8c55abead4f1a04e217a1ff14f440319b80c3be2e94ed3a3c3d1f9cc750b4e2f90d9b438395c5faa8f87a3ac31292939807077f1224733815efd17a443fd02d2ba5e0b17ee9aa73091f45ff6e490ee2284c515b5c3e644e7696041e970d0efb07f60725f7b3d23ae125b06ed459a735dbe72376bca89638c3fc4f26021d5dd632737feb173994602d8b84b46ef2700dda1fe0358e45423be24f2a94df479c330d234028869f769779c15a5b9ac4adb38ea6c1f68db29d553f1d80524c7ff31a63c8796bff8b6e74643ef1908e8799b5cb58209af3313ac4f4531d3ef1ba133bde31e443c8ba8463ea190ae985224a7cafcf98185833e85fcb7747ba2ee18102e746e7898e3403c1d815663ed02e102290e8495b27bff7979fb7d9f8616f276b5373aa52319fce4ff17323df493ea41f6f25fc371640a0056f3339c0310e40116ded8307db0a4d02d7ab16a956d3fa88e18a5ac8573048e1f1ead13ca1cf068f4c2da80873a9c263b23db9a5bcf4e9cf68ac34c1369f226dd7d1cc32c1a5389a9875d9b7a59c254076f09de95abcedf8d43ed1bf5dab8f0e065362f39d8c6bb111de40da828e3478abb3a4dca40a258e8df535825f8a81c267e09a4f261299506548b4def1c0a881a2d6e941fac80c34042a9c8b898a18cb51c659f0e9ef1d59f1a1c856907073de42936a8abd47087a2cdb5362d934ea0508ab2a7427268733c4186161e39cabd6730270b4c542de5174cae03e4c17ee822a040a2bf57ccf4ca25bc2ae1dbf5f109f890d2d4f2cabf237161802ff6293f2897ce6782c38c4779c82f4a613e860a40810837f1647197af7cee7dfc7393929a11073581e4dc37ac86d00b201038de56fb2b4de6686a1f359e7be128663ea5a42a7be74ac4d694ac59237f4b852d28d1ec50a0cc450d7584e8178dbe552a1802032da9a2110944ea07a55ae7194409a1aee52a20c8ad01f83c48d7fe212ee601691e5fab48528a15a1b9a7b636921cb1d4f98a55b8b2858ee16196f777053081a92c1d878745b7a848f440840b45f34f46105f35facf81266f04ab557a3fd0b0d71dacdd25a3bf9f5c56b1caa51363d92f1d390b74b03d07c1baef705073375a65dc20ea9a0533534202585b295319017b5cae754379989efc82585f12ddb070f966561dfdc81b779a8451d26e782c6c5a97569d3f6a9bdf0344f0778d9dfe8c65cbc9946fd8cf51c260f1e3543dcf90221648b156db62628870d1d822472e8dfe966b3797fb78165c2df32477737fc2b35a282ae84913b7c0ac9db135a79ac8f0b9460bc26c65d937a816d5329c8f5222713c9b210444b86c30aa76a5554afb1c37ca650ba6b4861db848696ee0d9235877ecee5423d3a60733adc5f78b24f693eee335686f577d49e5e21c337b9bfaed800a3c768a23ec7f2d3e52fe87d8c5b9d71200516cd36744d7b8d770726428e04f9461affc8f5ba9d681f902ef0f1bd1590b2b1bb89111d0dee4a61e88e0446ae4c59de203d5feaf6f69f85dd44f664bda2fcc7e45857edeb3f354eb5b0b1fb974fc11551af5e0ed9ca39da8cc4f62f1afc27c7a5fc43977ebf19559b8fbba5a90ade90994cb7acb1ccfeb559a6bee723649a37a14b8c22ef84e1d349f1a887a4b47a820333ed1e40dd95a1d05392b75ea72964762e33eec76f693dd77bc0dca58a1271a27962d371baf096d6ca5b541cfae33e215617034a9ab7f70ea0c7aef551d86ab7028d0271b325676838f83a30863d7fddd52eaa68a0cb18bf09630ddf491a0ec60ff13918f4b35c2dbc89583fc59e930cf780d8a9046e2e243828d51da219115e910e24c5c1fa314f44d773cc1c83b9f7ee1cb630ac596673fd174152aa2a48a71128138b1cac291c5420182738655d2adc79639ac7b929a58a53e7842202542c736922c00a5c6c0e4fb8fcb3ab68a7cf51a6e8a69cd5b056e6e8ad121f57b3b92b13ea55d25f4dc3cab3804b95d5a864432a4621401a5069bb9be51c4de5a2e63bbae8b9db8ac667e2879763f53768b5728c5c154acd19d5c636a679b1c902f8b9272911d7aa652bb2bddc4736a2bf007db3f91d8b15fe687afb535c145c32bca4f18b9d1988a8734529e4095a3ee752f5b11149559d6ba3469110d86378308aded4e169ac6dcc312891a354d666cd49ba500a7c396f636ca624bb047ad1ec449380d51c9ae5a29d4127370aadd0119a5adc314b98df63bac9d816b56160d45356d888211d0b6b92a74b60f98250d4a69b65ebdd5674f250f4c8a33cb2ce658d8aa7c7dd6cc38150ec3aac28b176b7f7fbc7728c2f32546696d98cef925e01d9bdd9b15b590651355a74292b26841eed990d4ffba62b3fcb0a78ee405145b53aabafe5eff39bffc4734f918fc05dbe3f5914e7d18c19a6a61eeeb6133a88618b5240cc244c12b6cc177e5534a62eea581173171beb717f793476404eeaa160f04c34214274d341c6370075ab0056fbb2628fc7fa507f355ad69fd2e178bc16c79ea1e6331cca489c3bd45d118f365d850e86ea11d0fbae38cf53a7ec1467ef50f2b33b06e9818ed85f48ac17e15fb0d293ba78454778482f279648b44405073b53038161e9328feef9516625d4fb1635ff43d400ab133df17c69ab04a39da7ad52420fe4a15bcf3136ab46c954e2ef8755843a940787dd76c7b4e62ac4549f1334613f5e9d8ff34b9eba27aaf686f50d5c80e12707b1e262882fc88f145d6ec15911199ad9cbcf418888cd86451df65778a62158f7e907e7e0bfba5dcdb85b695135fa380032cfffa964344e3ba4ba1710dbdca0b0509930597b7ac46cc05230080c70807245c54afc6f4d2e3409f4ad35b8b1c6ce1c4c924061163b27df091caa2987648a19e6d7e5944ba062cd603230834041ed6485e3bdbd5e6e5ec7247e360d622745e9cfcffe48ba9a6a0dd293479f9fae04db230102137a81c0f4ace342059d3af33e2d7d3b91a6b70372397b13e0c41bc762118e68573d72b927881b3ebc92ae8c043abd8d0a01aecc104c0f339c6ba9e3b41ab69a6da37d470dc50f965b6695e259f0842b9630e022a1c7410ca40184d44bd2405444b77fd11be04c2948e577d35b718b2afc86b0454004953d7a031cf3d67ea8d9c7716787a816f431901128a0b17a2971b085409535621e9db160162f1d05ce43fe3bc54113d3d09680f1fdf23ca65841ebab724e9eb76872a78bfd82fa083a472d8b43b2ba3072a8b5c26032deb1a86185706462ad641a5c272b01bcf8b92cc86d8c6317b5168c67b1b63c16aa9be7a1103d25c6aa0dd41e8f59933cf4c6454d789c299dae0986dd83451399b79504c434a79ab50b024c51ef1450dcc9664bb164c305367148b3bb2590d8289fe4c9599e33038f0c0448cc45067398e6e8e3bda0f020838591942aa51fe6739ada8dbd0c063f54c69d7da502301d6f6006bb000f4255c0acaf724f386659d02442accdda315f76226e3ddb08ca0cd66928393136401b6ecc7366662ccd8a170ce9cd7e292398498d01de39d7e83f4e197212d0340908051591b687eb77c24aa5f59d5b21e3acb874a5d0fa90a5c6e3a84cc1f14a5266159fc782e6023507253bb5afc5ade41b1d7205f256473d7dc2e1fe64b4b0be68310c07b9a51bd288996c02a300a336c64ae6e00a7c9f406d00d8bacb2a02f53a4a0a22da40ccfe31ac3ed2f6b0d0ec09b42b9be01cc02a0aa0decdcb2286f1e0632fabe5c9e3ed00a92fab7b05184acb42b6d9f35230fb9288c692917efb652936e89b76359ca9ccf3528770d451edc6b70b27631bb21815315c12138e54b00400ecd6b7fc3eff65d49e8bc4990da3945d983851daa0e4e965257b0838c1aadf4e05458c87dfd95f0972c2bea0431aef92b532f149ebc8a76f13831621adfdc6f4fe8baee6475ece5d15325c104727f45f81fb0ef8fc7724548c7c0759a54c6013b5b01629299596f02b95d7195a746505a472fd1802c8757f4fbdfb871c8823099d6b7c30b2d17d666e9322cb7df6686ae9000bac472cd17648c573b7f399fdc461a1b69cac0c267c3c81e13b7ab6bc746f69f6f9cb1170c64badc2842ed7af71e3701af7316e05303d6e3608f929f73140bf27c6b26ba796d9c97e1a602e2f7e9a2aaf964e8dbc8bf367bf96d35a1efe93b299faa72e9e779d5c51776e81b0eb54a974b3320f45a9514a21617ffaf5eb53f8d136185cf5b19d9c877f4109ad5f458b1b6400be1cdcb13989adf9cb038f5497d890229460a5ff12f84827d5c9801d1e68b252775fbcebd0b647e6e6de84c7ca5ab68c3a1dabd27105cb58e51871193ce8f8f5608110ba2c6ba8cf31fdc9b053cf6593999a12ff0554885376473518b9d125da11cbb32d3fe1203bafba2a00c3d7be177d419d6598615d7a852de816026f682b42c79586d2582e5b88be5066dc918d6b6dac829fa9de0a1be0e6a709f542237886f49ea19ae45b80f3ed4a7d55c16b6814e000ec8f19a7f18b475db85ac9d0509c4ad1da2846ecb153af3475afd75a8376013443cf0939f4a59b4c68e68e82b7e0ff53c2b960c74d3d39674613b6b93452dbd9e566098cbb4f74a30e20a187f90510a8992bceaf2fe1728f7ecda49ef4692fa3d5ad925fc466e2e788c237af562d1415e98fdb0a896ab90e00c3477dbcb555e0c53bc7910d74678795a0c06e2d445cd5460feaa6e354de531ac5b028d961dfabf8c52edb9021a78ca409b9e41e2775f55b5d8c208e9af0711ad93e4e988de1826c382dbc91234fea54ee2a667c1713f9b5c8e310b73d5f4a847f8b00725afe9b78be1865a8622a9cb5afb98ea69973f791228222ec14325b750c74f899869a9c2be88e342ed98154546bece09007ceb8b8791864fd3969ed587b9cc77041d9ecbc1a95e47dbdc957aaf01b024bcbaeb259ee33841776da012da656e9b39111afd2f8bb9512ffcf02b1bf92694f10c60c4c66459c1aaa89dfe566477735341e3288114507a468847cdabcb553f84c68a0e109eb3c522f4e53ca4888d451362f64d149e2fa13dc516206f4bfa9ecec32f01db550b41f2ed0381eeb504ccb90abca3d09ccda9d6059928869cb198c25d3319692386e266364708275e914662c27b22f320712f464bc940093add38c2552b8e692ac18a472beff67e08ce13a7178e0e2f5ff86132cdbfc43c02a188b26e32c258cb88c97844319f9d1adb1b848aaf743981b26f6530fa3bbbad3668f33494ddbcb0085cdae297043c024ec34b0848d03a8d68371691ae606ce992e25c6c0e824cb3ae190538face513305a3a63bf201543937b8d64221d2d27332c4cc5c0ee1ce63273d8eecef39f86d31996a722ec250c624acc7bfc8fddb99010bc0afbc214b44989152f6b3973882603749269d76cb3a16a5f36be7b04039e3390c02b4b4d8db9c4e4b9742bc071369e3c20f02f668a2852d24e42f3b74f873b3e03f80ceb0c81c4f5b9e31924a1fb37bb5d9c5733a4bab888fa98a3778641433f95161bcc70f900c4ac27fc52b63acf09a1de1affe01cf8e0ee606c0fb2dd3f20d1c293abee5fbe49555e41e175ed5e0104b806da4a4569a3544ed076f9ce264d8a9c071e53d62fd7a353d8929b832229a7d7439d326855f255126ca5bb1c7a66b66830f79b3099a5b2542e1b4cdb60c84ea3e1c1240f24fb24203c6a2f91e3c9ac5d4ee803cf76d3d09fe1378a1a11fca27b896b2f9fec97a38c0e549528a91444cca85420945725e83f331ab4cc0a644814a8f12f15f6df85031ce2e219f69479b902012a4be0889f6d11d607fef28452caae17301fd0f2e4ca22014024050ee0c442087ec58660b2a2a1b731a27a7a85125c1f514fd3c36160abb8d3c7d7e633070e81c5fc6f7a710ed5aebc9d4d0de29f2e05fefd1c681a4c20e883a10a79ad3a370440ed6b84baa9f5dd10781f9e0c2698c7a71dc3cd8f52bbe96583f97cdd402321d37c88f6e373183d16ba072dc9c2f50a33ec26b17a632a09cb5627bd6979df3bee28d7c24c4a49ac7bc10e1ea4b64a4a9aa17d30223d434b1ce68568d027521a5e8a87007d8414880a37ae74bc81bf811b4a70ecfdc08e57126a1e5e856bc01a9c4539c45221f7516e41de16084912b787de58e0f525b1c2224f12748bd3f34eba7a86b663ff9f7ec435806790d0c48a51500daaa2a06b57e9732dda915d3eb9872aa043d0db46c9329f387bccbaa37d3261e2c9bf160106fa8b9f572b7615eb456c04f7942ede1bce84b30e3eac00bf944e5335286bbbb2366ea7bf47d116b05d26bba818e1508515032a7d3147d3f617683114c5991044d418fccb0e8a0962c1e5a0d74600eff900a0d7e3b24d32483470110b5dea3b9d1a4724e66d835abe9d8325e68bbea247917cf39e1d098414176e5703e7168021f812304a1f32822b47818fb423d39e0ec0edf701288c5b5018b7a690956405eded3ab621702ce948f719d09914ad5a5f380e7db9d587ae5dc258c5197a43b969856c08cd9296f202e482593d11b8246cf59e0445406fbb347a788acd7a7fd6c640f8288d9caa411f7ad30fb2ce9a9850f005d89767ffe41937f25df184141ccab016b21540e26aa7eaeb1997eb77de25aee46bb288c2c4dece5d9cb4a13102a12ade2b6d4586f5d9048c8f7213fe0b25bf3db51f004f01ba8053165f72e4415a43819986dfb986c4cfe4b1422e1c8e5949300fbb582cfe872d5d5c14f2914072c0b3458eba81569703a532a9cf4bbe63a8a72fefd4c1426e57a85968fd9356a4fd9079e6ab346e5db9796a18421b42334bd365bd6e9243ec82933ee895c6b9cd5f956ae944fe4b04a2b51ab4c663da9e6a74c990207d19261280634c6eac926ba32ceed5ca662b86d1d9274f6912bec86f25cb3ae823557604d75a46b4432784fe2f1ad6c9cb3217fbd9c16670e1f0a7749463c474333365a9a583fda41b37cecfa01ba06474ecaa66ca68246fe7cde26827d4196c8363152d00767dc5687d4bcaf10df0801cb9f4237ca3e3806747fdc18a11a0685afb407d1dd47a0440dbf039af005e89420893cbdfb1d74c7750112e1a291e0af705ef3b781c5b94b41647a2b00abae390485cc27d62a173c0316c96c21c20929f179ef646928c87c5198aa44ef5082fca0cd116d08513e8942f2e0ead1f09b43f51288f125b29a474161b26b7d3fcd000a0e2f4143b44e20e083efb35836707074fe25ce622310e39708fcf3033500d755c9a3e106271b93374c10f2a02b08665d3869d348022ac9dc0f95798bdf3f2808a6a4209c3ac70e094f2f9ede5292c79478911e93aa35afaf4c12787ef02b54c54e06f24c35254141cb9b6939900c42e4738b31fd152a901d087b8542fa4a9a9c2118f8fdb9584aac334caaade79b4bc7abe0468292e5eda496dc44c8a2e772329c61c82c5a7d9383487a202c72dbe8454c76e128c7ad942ed8e79780fe79a8a91280cba5c8c2e1917795e86361b97405ab4491a5e97543b74996c05dd4a52bdef006551c0ee4342945505c78e84359a56d17681b65f46eb3adb030a441e1dbf7fae0c511f975e4de4476fa6d7597bd04972cb19c5f82cee2cfb51ec61970ede89b5c8df0770078217eb5b917ea5dc3d30d70e483c1303c7fe1803dc1e1dd602eabd086cd0b03b1d014650486367d77aa17c1c6cffc5c2ae3dab839b03f777506b0ad4c668867e6cc8abcf39f11ffaec1bfaf97141fa18db7831ad202f8ce139f61921153d56aa957b7510f37bc68ae73ef1597686e138f26c592fdb3a94a268bc66c7c7532cc8e7293393c476573376a0e0baf373286b1e9441a63dd81089925a9ff8e1346a7cec84f50770d8bb2b1126fe07fe2ca0d8fc0be65cf77c0950af83778f45495216d0715c15cfea01537fb9536aaaaf6ffee5296225e72ea805af400b5fbdccc2fc08eb3f566f6d11549acf40f83876588d01b90ffb8e0ba79ea264881d9c404807f90bfc20a871481b7b97c59cd0a86d728f1d591d2ad0abeb0e197c4c6a02e8e5c7c0b9daef6b82770b4ed35ac8661c52c7c860730ad6021dc566a18faf429b61ff6301cc81c38fe93212a4a479ceff7e70b239158115af0ad57898c468acb928550a85f860d13e0fcee362702b4c8c1404a5d470b92e7337eac59f03b8f0f12e7c993ae2222cff39b009784b8ea94fa6381ca25bca06cf3eee663f3fe224865d7dd1b4e121ec85ecaf131b25ec1c4b3ed22bd648deaba89e0fc47300b45b26112826f237ffad32142197f85027f7d31305bb3aa6474ae87af55aa7f8307b0e81952005917d8ea838a8972a61f6da46a5a4d9bd7e21a203d04595b32650412f25d0b49e08e51cf2406345833b538f6edda5fe508aaaa02b0d0e06be8049a76cec2beb774a1ea0f748a1139aedc6b8933faf43dedb2a6a49f9b5ed01a8bc72b0502cb9878e53a17d6489b4db20b34b79e810517ba36b2de0e05ba9b012228316ac10910345d1815c78700f8d173122c4f1cb8eb3b5abb0c94d82b25e707f1d7eb9a40a5b5835ded3158b8e80d1037f216674ff8884cb65c67d2a624f875be24f258f2e3afd9f4db3986f64f749b040f2aea606940addfebb92e214d345761a6edc825e4afffd075a73ec01712ab134e3d4eaad5e1ee855630d9ecfce07dd0779b3f84feea521b211ceb5fd75c3001b81d060e368de4d235dd6d9eb827c55007a87714df6fad3887dedf9225359715705912d38e773331dc1acd44d2b045aafb0b301285c6a26a61101cb6c05c66b1369e513846f7c49c49ac9c72e415076e95419d88bb2e18ec2dfa30a50b5ed2bb72830b2779d143ea56ff9312e8a6abc3d1a37ca13c247c3302dcc12e31c2bbffd2b6303aa204560d3ab3b27b2e03de211c65203a8088739854002629d824342e4ed110e145a32aa79a87ab937b04d3c0522ef3bbe56aa8afe5607e11396008d5d665fb91c4ba3f049e0397bd31b8ea6df8ceab7aa722e6fce223d754b6a2c07e7b8cb4b7d989d89fe17dd3b8c175b18c5d86c5b7478daa61c1eb8a8a9b7e8d8710bf048cf1785fe2ce0d97b4aa073abef35c92d615cab842b9e0c8c6e60d686716635e4d092f79e250ba71a18b2afeaa3ab598621ff29ae75217c34507641607bc568be8703a1ed8d43b91564a4b0307e228734ddc0206c9155ee0bc8b4c1b467b6a13d917d87b2d2060c360ab9e345114606b2a770c8036aae9ccea7f1a44e0f10477e6779b8c4fc5e8960307beebe4481a098530c8b344b593f907b5da53a8b80d0443b81576118723537579cea018ba108c221433acf57fbc5335c21de9d78c26723b81675b7a6a94fb6da8c774e182a5d6493f94ee7c11efd0d1bcfe644562c491eccaa5b216bc67b100ea052eee691985b9c8ecaf466f911e8e47d945fb23b9e09979c8fd193b933edce7655ede3643946097e1503be0a74c5419bad0ea94a5bc9762dbbcef9459bcffc66289004be12fc52e9890c5a3d536a824eff7656040f37d5f7318cc52315c0cde9e051f8878ac8100601171835ffdddae92970e9c98dc1bd74171d3f22eb28b60bff3af392762de1aaa131c11145532215dae1385807392fbb86e12e7b7e82b3448db84ac30ba41f9f8bdfeef64187c286db1c89d23ee5e58d972bf910c528c65593f1a7b894004f387754507d608e9d2ba6b0331b8fc90c30bb6029435c464f2cdf029577d651a51d8aea80d90a19197ddd7ee6d205160e6c067290e75491ab87509c77c839005ffe66fee5300101cd4aa8c1c373b097945cd6c3a8e9859ed81c46f328197388800bd8d343a5e0561b00aa317024d37292f321294d2c94592053bb57a0365ab05e8a4ddcaffc67bb0fdcfd69e4a1b7bde49d40f9c369f02722d5d6b6b094f15f235e5643254319f90286131be7b640256fa8f478c1f5ea9c5f2e5279b4d6c2e87d048669cdb72a58e1e9de964d80c617f2dc59c105a19bd79dcd4c29e0db2909f4508742d796c20143f127f85cae1efb2bc035cd6a334885d5d54cbb8eb9caece60387bf4a9676a3db76603d1d741d95012b0581ac4c7b77133a62ca8361ca3dbe7d717ea6f7c0b84f3e2635c32e4bc4363f719d14b420b0c03b9d587a13942bb1f926502e42c159f0ef79b8930b0c4e4ffed007c1d158202795e8105a0dc2632927bd8b7901379bcf4601e16245e369e77e4e3a0712af8183ccbabaa72d08171a1f03736603d90513dd87f75679ffc13f071ae2646a623dddbaa39cfeba7cb0eabc78b81e09c62ec2746607c1d758da84831f1698d7fa0c1e96c0d1f55d77582c1fece3e1b09e26594546556d867e4b931a810dcd3004a42636ecc026d9a53619cca70b5b3923dae7c9dd283dcd8004a0711c8f4e2250b9c0808dd6463d942c562dfbcfd99305037467244734c19c569eceac4b62efeefeb17ab8a9f5ce014fb8d09592b5e99e2ced1a80670403010eb80c24882c7189f7936ada576a93bef2f1685703e7134c11e4cd123498599ab5d4d401fc0ccd2ae17680cbde852fd2ce4e2f16f1d1ed6015e1c997de4080ff8fe53232f45133a0146994a5502cc452dfe5fac8c687ab12046676abf2ea97844c0b77e80823cc8f9aabd7e9031c2d7758fd9b100482e1b40c8a89fe73eda0de306370bb5a69948f45977daef7aeaabcf7f3eb8a675ad185a1f6e8a71a1594e3638437c39d8af7bb936702b5f1d2a9f04fd7c6b66d2d414acb8d771e75486f2031bc0d1c4e4061610e4ca863c5ec02690465857cf61a75ec3bf6c2661b8f01f531e7387aaf428fe931dcf06192e29b20eedc6e83f42dacbae36e8313b942b3de54fe50641f31ba3aa41435f6a0c8bfe2e5c073fdee138942d575ff3106c895520b5a486bab770771c058b9caa7fde2dda1e44d71233d2f5f5e5e3783cdaf789c459a11a5011a0e8c945c0f518d6834594a49535384251a043c3e9da1f20f78b8a9b499e76c874920f5634dedb024775c74c49970ef90e2b4bfbc7f202d6c75ff5ce847e0273b569d7e5ec6dbbf0b068459f1fe9211e4e4ff87b36043e04e15eb2d4a6557ba4105ec0b225f4a692964b6f587a26f50259a2224f48cd5fdff9cc09a06ffb94e69e20285c4ad8dfa6426ca5f495a19e2411fac88c841b99521ad540aea96b228f44be9e47fc4da1c8a4c1bddc6705913e99726a1f3281b51ae69f488cb068e31cb7087bc309901d3c27dbc8607f9116c2926ff7319347397867118d3c1c02c86b454f875b60074d45efaafaaf637c3bc01dfe78898e1aa0b1d3a2c4e7ac139bcb21ce45a047ab2dfc05720504a4e077ebebadd3bba413a385ca244f1104244121dde55ed51008a2ca5a3e75a5d548c91ae2f411d4d9759ea458652f921b9dc7e59a50f67bbcd30076b73c78e00f5677b633b7e076b2424a4eddd6defbda59429c9750b6f0c360ce390a12c579c6a44aa0c4cdefc6849dc10a756c759e32255874c6dc837c588548dc8c462840b5b7454d488bc82a859329c5a60b8214a6d42a13465a936c33845d154e32655a024d5ea1844a506725cb72a8fbe7d46a1a689a45a1d7b90d4e6172c62a46a4fd49ad21280f4d4ada95d76cf12d5403b0ea16f6858532302ca6048238169aa11c9a1830d4b6ad6eb38846f3522734bcd9253908459aa1101aa236789218c24b55423129464ca87e602431b2e9c6a43b80810646a44e891daec034ceea637b580ba62aa564790895a93f4a8db93526bd672d672d6d65a2ba5941ea1dd9ad45ace5aceda5a6b9d94c697690dec2cc7614accd64ffff829a5b4bbbb8da8b59b99f9fbb8efe3be2fc6f480509a1562ceda0a6185b801b04f93669554242c005f5a2194e8d356752a270c76ef37d5ed20d779d982e13daf53f4bb5fd7ea14a553758ad6299fe209361f40f7416b203984484d557e3324cf6e95a85da296e97b8cf23d6f38b14b753c743d499680ad716ebdb68c8637a0fe9d3776462fb754715e93386fee3a7208911a47322db9b5ce26bdf65aadbd5d16b34499c04e00d82c96add29f64b982256b2ac8b24a942ba5475f048b13517fabcd2a55e63ad352ea74c8140bf01b22ba706e7d4875ce9244b8871bf870aba94084bcd5aa57d246d11977db2970fe9456ea79c89d5cc67cf9c9458c932fa9d44f2e62d83c559a44f4893acd78e2961e95519a0a0e9d2fbedc6a3cb582d51627ba28dd6adc4f37251a668c13596e357666a2b419756ba2b4a66345e9d64c94d6ec7deb24254a7345c120cdadc6de4b1d1515670d194a6b29298eeaa99e7a768ed2c44e25501a75fa22268678aab1ff00d24e97de286dd66aec4394c6b5d924d3dbb3952a0376b51cedba6e5a5187c94c0c7e50634689014b1c89538495179c69c346092a6fbef3b08540f8aecd7cd7753dc4de23449697f1134b141533e8b2042cd927bb17ce1b1d4271a7d79f58a2c299832f6b6d2de0990b9be29be29ba2fbce19c23e33b779de10e0499fc09f027676f2538c80f7dc006bab2d633102de7bf3c664e6eab5cf160a22d0f718885d04d7ab655140fe594578fd54813c43d497e7196eec2716335918765ba8b4ded6277f51b77c3dd7d8efcf1fe62038cee7cf9c94db9fda7a2c81d27ecea82f3115a60c47b5aca526d8da2105d5b2e979cca36f6f491d2da3466308534c6f51319f42d0413b8eeb382f3bb71e9bc0aca97cc87caab1e07316a8bc556fb7eaf37d3037f64f31e6913d54e4fb984fb5d9799e771e09e3e7be2fb79265d0cf2f886e266e599f32fdbe5c7602aaa02840cbcaac1503992a0cd276f17c44311e501ac2e032a5945ef1784228975de5354843e530e932a594d2a75d1ab0b9af96e3a1f10abaae07c57015f2587f04af7fc5260375f03e0f5ebbd3a2c12dbd960c6ee975ed4ac718f5efc507999907f3f74c5a2fb7f42cfdfafc204782f0a0373ea80a796c5914eca760455b2915c5e6f9853cdcf9f168fffb78ec0755e1a567980c9f2b1872a5b06a5fb39b9ef7a0ea13c515bc17875231484899c34ca9e7dd0b83b9cb6436896ef5b58538fb5f9b7e67ad53766a9f398e64eeba315934a5f469875adfd0254a290b5928cd49bd4aa78ce37ccec9bdaab5c6f52d498947da1b0deef4ae55cfbbf636653505d87f757bab0ebb8d5f3bf076c7f8d641ae4e9552adc362bab676b3d6ead82447833bad953b7db44ab07bbb2477da666be748a7b8c7343582d629d5e6e03291ca759e772f0ce62e935925ba95ad2deee09e72477e49b01b05bdf1a7672c75a5bc07c652957cfaa99250813a801cb70533178a30108fac64480157539f6793265107a63acda807e79cb4575ead9986558e858a1a9952156a4fe47c7f71bea90fce8a69de68f7e4dce9e547e73776cd1b51e89cf31e94f6795ed4442105ef7b02594f01f673def8a628ed1b61d6fad477c981a73b489e4c571dc9f386a5b5ce7135a790c0f9d3792fd513deb7130563f14d42cb5a477c2a066a01a102c3e975bed842e5795fbb8a8e83a02a1459419f0a0c59caf3ee85c1dc6532bb450cebd8d332981322fb20bbcdb8dd6e2b4c9ae7ed4e691ec96982f81dd80696c1859ecdf976a46f6f9f8175cba1201064331f61333c0f060dc377b7f05d729d0fbde42d44cf0bef056130157993795883cb52f3c693ab7a8fb572ed8453ea76c5bc3183efc0586aceb098b4cfdbf946691fc95ff0161ff993d23cd25b005fe14a5c85e04af5adbc6ec5d9555dd1660370dc6535d731b20067d75aad7ddd703f2f7fd69440695efb0faf69ada357eb4fb707c15ae87a0bc5f05e89eef2d942d5e52075f9146dd5e546ad62dd5779f42d076918637cf9145b945217613e25633c1e843ac753eb7d97bf78c6595fe38e4fd1bec6a3b73bd7eb75d7580af9eb46b435de96dd4bce3a7a4ce52949daa09fd77589e3db7184e0a385ac0fe530d23102395f61cb6e3cac02829919647d2a1557fe6857011d309f1ecdeffbfce8bdb174203fddda6ff49c27f56e3cfac951b7d48d686551fe2972149442e9a0b4708829e52aeb19536166366a5950d3847c2aa7b6853eabea5ce5e0581e3d586b7511e65732267a90ea9ee89f1f3d7379c5718647dfa1ca79e446230ad250a5f2ea472bad6e2dadb576505cebb5ecc62019adb4bae7df96a3e353ef08ec865b86e5900e3a64a795ae323aab4ca569e17c0bcec611de176c829dada0576df89e8a395e7990951dbb57d6b60541326cd9f49eec41b2ce465090edbc9475dd411ff88d41321b32cebb2ab311d491e5f835985ceb1e29f53d8175ceacdb7abf2bb7fc79fbc395d5e6b3651dd86c291370ce39c92028b70c922a19ca5ba7540849bbb7dbed66b9cb715c6b04d233eb9c577e8e5b0a71bc75202128610424fcf0d142a15b0fa169d72d8ea6f12d47d338893aa55d9295e8ccfab5a46ac877201d57f09da7e080f93474903dcf7311e67ba40a4d373a96fed4572cff8efe6385be1acb8efad0bbd08da8188664c8374a9b3e6df5a08e1345a8ee552ada54b506935b9dbdae460c5c055be5423b3f672db5a203e673bb154738fa66cf8623156d21331913613e93b1ce83903598dcd80ea6deb9ca8fbec7322c5378ebf9377ef6e8edd8473010e83d964ce541f7c652c8836e44c391aafc2b693b282ee76ed4747c3a6f50f7bcda31fcb8d13b53b2b8a3036ffd136d1f57dd0bc7b764ad1d1270fe949dd4db2fac1e70b7166de3175615778379f8a9c0008c4402f0b95107609ca2223d6c95caf973466aa1f2ded7109be4f425772be79c217ce36e9c92b7dcad32df3ad04beef63987a187e40f126afd8ce80f12b82293d664b8187ceac7373294c6484edeba0f59c2423be4885b992839776fc3683c673e6e3f252d263e5e724ec2cfb9221f70505aa8a985da3d243786b71f78c9d1f0968bf29693f2dc2d1c3bd176020f7f15296b998f773c862ab201eca187e40763c9efe3fcd3321f0769c81dfaf817aab82491bb71489f950b3a67a74aeee60366b997f421006ea75aa85d494949494989060d1a30d99c777ea17fdfe7df57bfd04ea92ac97dd49d8ab6d17f64400353e883fa398f7ff079f779fdbeeff3194b1fefbeebec6028ae00200300ed56f5fbbeaf86a1b7dca841b1fb71eea8744e327ec68a34d6a4fed232ebb2b1a37a661d14c115df5843867ce0354a6daa4ed5499552a94079eb1f7cce638f160add7a37f257a5aa5499d425b27e610d2fb95b8b11b861e82d329c122526f5f6e33d5a2824cb6e8416bae48fa7c0ff817724b9c535ea9fb126552456385b8849cbacdba9f44db99ef778074ebd7e494b1c1317a585bc9893b71c94b79663f2d6c97042d55b480609af07a94915c9724921b48cecfc83b19f3a4bcfc8309391955849bdfd901d39a42acda9760aecc097efb89d527576ea1bdd6b8c3a3cf0c0fd73d2b91b87e46e9d5332597335c549fbf18d21b48c248dc6b13259e26e94f683ceacd79024e36455ea29ab12872489068d189744e3fbc8d2c75d6e447dc6f91e8cf33b18ef8bc60cee368797b8db245356ee5695cafaaeb135a6c07fc9115a66fd07b52c928c385b56ad776f509014d901d4e9b690d022a2a060cc807184a72ed7842388eb553173bb24a8911b6a6972bd30cd745565aa1226da85aed04fae0b4a75e17a55fa058e73e6c81630ec6629e3d59d59f2e54fbf01efdd99fc74bdcec371c4e51e8793eb556973bb246a70c39f58c4685173ad88b9220762de740c6e6784a1b82d24b48beb559973bf2f6f551a33e6ae70b99f58c65ca1e3c2dc4c155fcaa29a86dc87fcc9830d4149bde73dbd27f59ebb37f5dedf86dedbb9551666515d9a40ecb586167ece2f515d745182f4029d36b559e689d31b2d4ba0a9424a8d996e58e3040e48bc847962e6f0c4125e989c4933268b5ac94f454b7878c1c8d2912fdad44a8e7a1f2850bee0028a274ba2d44a2633357b8bc94d3fdffcf4396173e8a7074d1dd3814c67a449746ba1120c7d101fb20221d37f4c379a2e9b7e67d3ed769361c279badd6e4a6ad386f00563e285b76e6536dee2187aeb464f6f3deb5fae97730c1022de5a24cb63e3d4f036864d5212c34b66b2f4d699890a116f19cadb2852de7ac9549c9f5ac87296b750fce52dcc5a672928236fd3bce5356e188e854af396c7769212264ede7a333d79eb6543796b5bca5b2a6fadbcf57e4af2fab2b3940df5e56d8f69a92bdeaeac975db69bb70de7adcfd964806fb90ed1d6b222c4bb5c2e97cbc75dae2728ef0a5d5ab87adce56ab97cba5c2e09c021220b132e5c71c20a974f4a83ed2045141642d8e04413aed62b8b2f7bb2d8c0e24b1cdfeaf22d33df728f063c7c2b09a56f2521e75b2d0faa010dbee52288b6d6504f4f4f8f952ddfe30d106d3deee3c647cac7ab8fcf116ade078930ef73840eefe336d1e613826873097d075bc67c07ce00d1d68117e3636e3ed6f258cce5b1d80d7596780267092a30d8a216838013115155d2dcc00b175b92f898bb5eef2a7bdea5a5e95d2e979628deb585c9bbbc26da5cde6ab55a2d7fd1d632126db125c07ce86118fa8f8d16eaf1d083bab8f0618c904d183a09610761188661ccc3d083300cc3d0c7c3d0c3300cc3300cbba07977f7058836f77c7c7c7c7c5c01a2cdc7832e4fde034f8068f3c08bc562b198e7b8f11d2c41c577e045a2ad8356abd56ab55aad56cb89445bcb89efa1f33d8e00d1d6e3d5265c72dee543a2cd45136d21140cbed6365fdd7f6c34add66a857af2b555d9b8bc3a09334d8572fa5a5b4c9c4085f9ba5319aa85625e9dbff0183e73b424082e3958d1d2444e0d2ef8d0258b1c335d60d0a2569b888326491d1996c01283da0d3a524e45c82083261b6eb572d3578f79f9582c167321d116f396c35aeeb5a086f8961f40b4b55c2e97cbe572b95c2ec721da5c340ca2dc058ac987ee8550317ce806106d6101445b95f2a7c1c58aa7e12088361a3366cc9831c38366ccf0277e060f411f7a90576b75af72c1e1ab0389b6ea04106d33866033687a98df106db021a0f0780bb97ce53f365633b8e157ab2c56fea3855abe721256e16ab5f2550f4e20a962053149702162f5b42488245e56102385ceca695fbe867802c01036f8d06d88b6b0d58afa967bad218cf8960f40b4b55c89578f8d8943cb57f79a6ef0d52f95af0e7359d0d4d7a6295f5d00a2ad0e4d3a62caf4e034870d961bb8d6bc8b898d9b1fb4c010c50a333557d30feff2996873b94cb4ad645071f2323c00a24d86f772d8ebe53f2f0f7ab9f7bafff2f9c2bf6660e6c3027ce800106de107a2adfa8f687b0dc5e0f231bc86688be1bd7e078bdf716fa1d077fc6767c7839ac64ab7db0d496d4786a62b7596dc7c59614b6dc727a59150a58c981998bc608a30b5f2fe8ecf19fc4ef9eaf9fae3f3a58d32c7eccb99e5ca0a34aedcf0d56157bcf8eaae0497af2eabe1ab076131e2ab1b6549f2d549d156a13a0c4337a10d5566a0a44508264b6629fbd067e86168830fddbff8d08de47ce81ea58160a4a98a39388041aa8b5af8c4c587522eda76ce3c4f11659ec77d441b0f115e9e52354fdd7f6cb4102502ced315e525688bd22a659eee50f6425d4e77bc6427515a686229a2cb53294fd37cc950fc85c73c254324ce9418285aca84c1a1468db0a0050c103430e28b5a7927d4b481122d4178591aa20b256a06c882082469a6aaa841105dfccb6b0bcd27fee51e88b657bd22e86badee5c7cadd53b106d75a74a92dff11ed1b6a3812361a2a0428a2259bca995f75dae2bdee51ea5152581832a5ffc10869b3935571523eff2986873d1f81611527ccb6988b69617fa2c5f1f86b10f432a6c3e24c2e9432a603ef419a22dbcbffa95c356ee51d9f22b87b90cd146a56ed4edafc7106d97092a2f8a4dbce82eb3d1422b173d08cc0a2fee885688fe4374124411cc162fb6c446237a35d159147d8aee892206bed8428314255db4508438bdf8a18a15350821850c6220b6e007374e766052226507d127a50d608a2e9cea4cb9811354881ef4e50bcc0c5f6bf50ba6065f9d47b455d897afb267c6849aa7589ae8e12913569efa4bb4d1300c430f7d47b485357ec5440cbf7297685bb5449bc8f2a9e559543cd83d28f5600df4a0a1301eccf1830411045d08110f3a15a0b3520b31015720e81ea51dd1a0092dba68a2260a39526aa04f4adbe124861e6880c444530db5f29633ce8320962f2efc6ae52cd1b6f2eed75ac5d73a8327befa4ab4d5192f7a51f3a28ba24d5c4189a82b45bc1173840bb54a450d0b2e52535468c121861aade2e63df472c4870e8ab6d0136d60140218a1c5abfc136d2a21f1bf29fe7397d9f83ce8f3212bfecbf1df99ff41695eedfbd2fcb7e63ff7288dc611533ae400050c242cb56faab949bd400b183c11c597031a2ea0886021cd53ad9c4f5f0020ead060871e92c00187cfa71131f8cf0824be7af5bc25be7c3da57ed53c75ba027bdb3765e9edab93965107750cd1b1b4e40886261347d62533b73671d526ae027ce9aa4baebae4aa4b2e97cbd5d4e47235715fbad8c997ae09e64b57e92a5d49dfaed2c5f4ed2a5d4edf2e2d5a5ab4665fb6a65a53ada938df3af39de6db5b5f9a56917ac68ed41af3edad2aad365fb696be6c95adb295f4dd2a5b4cdfadb2e5f4dd7a2a73cb5cd997f7cc75f3672e9c6fbf495ca42f6f0cda6fd41d73cf7ca7f9f659dea4ef5b5ea6ef5b5ea7ef3b853585457ec96a6235b168138b75e63bcdb7b3be348d42f58c1d8a35e6db595a5825eb055fb24a56c94afa66b158b4c98a36598d5faee8d28a2eade8d22aceb7afc4845995ab355fae56abd5aa5c257dafca15d3f78a16116911d1bf142992e8e6299208e7db45316544518b2fc5265114c55264fa16a3683181b4a8f31dcef99eea197b19ba09e17c7b786ba19e607c1996210d5f8661184a856bbe7d9661d27758864cdf61193a7d874f5a2690963adf6043810d0536140882e097a6f5993e038ef97650cc1b50c997600952f9122cc1a46fb00499bec11274fa069fa6a8a6a8605faa9a544daaa69b4aa552a954aa6ef27593ef5bfa96bea5ef131346fdf2fbbeeffb3e3a13884e9d6f8ffde6f5cdf38c745f7a485d7ce93df9d2fbe14bcff3bcd24bfaf64a8fe9db2b3da76f4fcd045253e7bb5bd3ade9d67471bebd43f2ed658754f46507c3975dd9755d577649df5dd9317d77dd13131c33c1955c1417c545715c0daa2f398ee3388e93621e2610f350e7db46b1516c146bcfa4a1b1157bebd222bdf9d236591b45850944a7ce779df37cab6b6eb5d63335cdb7d72f4d63265cc77c7bbd55f9ae4852beac4b437c59cb5ad6a4ef5acbeaf45d9f4840b5a8f373be85507a43a2ed944a25f1255d43ddd826109da9a5cef71c1d7436d571befb4c9a6fef2f4d23e1cc981bcf453726107bc97482e88c3ba8bdbd34d2bff0652f35959df4dd4adfa5adf3ed2acc223b39cab74f2ed9e99bc9d0aeb5cf92a1ac7822be64a431df3e6412cdef9ea7f5f48cbdd61acb982b66996f0f6a1dbedd6befa19e4e44dd96d3457af65611b7a453cf5b6458b2ee3f36823cbb65c99b17c0532a349f00e2ebdbecd0abc0a050cfae92734b6a865d0473cbca2e367139286ed94dcfae9a72cb5e7af6b0c92dfbf6ece111b7e435cfae3a734b8e7a764ecd2deb7369d8c31c6e59d9431c6ec9b7671742697589adf5699f64f1d6436821f0adeb18c1ba0f1280787569e939cdd7a5ca24659e79f630885bce25378c5bd62f7b9e1da4737be7f6d579880bab2fab302b312b2faba870d5c46a4ced1f1b505db80273a3c09adc49f6c434ca0b574f7ce18a891514150c574edcd27bbb44cb9b870478e672d7afb5c278ca5cee4bff09e7b6739dc0b4961c42a436e9acbbfb08087259c165e4965ee59c2387300e627c8853abe4a4d506236a963caa710c4be834d5ec586d30a236451168915b7acf5fc4d89b0630a6d6d43a6a0a2c986a31266749b599e605b57e810b315235a4245648d56eb801863ab53afe80e12ab418824ead8e53ca082bd9828ed4114e4f4c359a19294f35b00b6d16e43e1e296e17060d511acb414fb4f558f9147794c040d58eb11d6409b8a8e4e744587d47321312b79de5ec568c49807abb05a83719eb2cd0ce2263dd518d9be8acb61c4667d5a7f860f9f54b0e99e2e37a8b1c727dd62a8b5481a583ceaab3bace3def4812c8188f2e88e79dcfafe2033cf2071993bd8d96c9a81881922c0103556ff101961c010355b7d58726114741c0a4f10f73567d680804106641cc14c44c65d08a64263aabced97099be1e2df55045cb97375aa828d56a9c26726813e50a12401c714bb2334b50cb989bd88999384a3d52b52a071d2b2aec3e5781dd58c2beebbaae1b551eaac68f478aeb623314c445aa559c960c3788d23ac85ed1132174a3164724919cc27d47de96bdbef36f2c5fa2873eb9280cc9f203c7c9402c36e0734f35723e82d7731d8b9dcf8ef3c9f9d3e8a5af20a3761ded41ed431d0536670554920d79104c76fdfa68a1180fee6b0f2e7a7d75d6946aca9707e956ea601523c091432d7b81714b06e207586f1f4df668590f4a664acdeade24fa316f541a06e6acfad0100820cc66e33863c6d7d657e71e7456b9237704328496bddc5cb6e36472fdeb5891daa2ce134b4c62a8d51c6c30358585e9083a5bd4aaf7a8fe638a8b03ce1f1ad61086cbe65687d12a34a9e7c9829a9ca44767a10bf7ab33491dd5acf740f2213b06d159e7d73ae783f38e1c32499f354baa606174c6b6dbab3769838cf1e820b296fdfca1dd3cf5d47bb4ac65944d4ce547b5282e72828b422e02bb34776912cd2b4f9de3501a8fc754640fa496bffca8b6e3a57bd937207426c435b214cc83791ea9c28e77464011e5569b358e4267d4a7883e6b53623b44ff5c24d90a19e3f1b9e82219849de6b760b8252b715148963eecf8ce8eef9044a680bee3d4b90b1781646c07e8a283648c47e8a0836410d043f2045ae7453216fad137d191b11d5fe79f1f09695996164aa165948b40a71c9de4d80206a2ce8ddde8cdb119887d677cf501d85b4d6ec9b720a287de051183701e72eedc183a37969e6beaca38beb58c8b9a1a03069933ac14924ae27c564a32bdf82249993935f0a2cc990fdef020070c122f80a20b4f92d59ca7d5e75bbfe427725ce8e27802d7a953278c17bf4ce1ff1b4fe017c91284cf914142f7c021afaf9e870e8ea17f630c74ce45262de0a28e8ced705aa7ce7f64c9df9d60059f83e30944077da2c0e73917471d9f73e0a863be386f9dabe86b6c9dc0757e253ee765083ee7a5ca04ce4b139e731164da0e597b06fa6c59f820cbbf7064f91d990947f29253d1c622596989e64515578a20020a1b2ad30a2f50841802e906226ed487b42005955f212500015be34e8b77f8a836e92c96c49d35970fd119f5293e76a6f868b98b1c2223279ded902d2f654f777cd65c3b23e7b336051c1213e2d2ff7cd656a075ead4a604e11ee02019dbf1b9e79f7b203896b0d2eb31e96ce8e34972cb790647d22de719125a8813777cce8d31ce45efead4a953e7794ccba80ece45525473392439aa652f1bdc52e5a0770e8e9e6accc140d3a718818f2462a0e91ea9808e84e79c8b8ebca6bd7e04a62b459dd750e728ea4ce64ed9a355f32099ccdddc4a2d546bb5b65a25f2049b0f9cfba07506e074aeb4565a5ba8f21ce77f6e6e6973b04c93366d0e93a83a5ba74996df4fae5b7c39eb4a398e1c42a4f6340478e7f4b900f04eda7c2a9385921ca061418a216817a8e28c9727b05401c40ed3bd397d1acd687243a54e659125ea0a2a635858dc6461f77ef0a106418b4481944b95ef1a282004ef1ab9c11ad1c182b408089e9ca4a1828b34313cf9f114068918645841a90c9b2f2c9b396ca46051aa2a580cebbed1fb3e6fce3a29ab89150509acb5d65a6bad75cedb25d4428ba24f68bef098aa00237c011a25236890d3c6290b1a8a38138592275e544103707ae04ea832567ec64fa8324caadbcfa19e7d7b6bcedaef9d37b8156e0e1c2df312c733ecaab994f421e66308e72a18b1ce91310b742a70de91536a1c79e98c279d3179bbacfdb6c3289b2ab268f2a6d729878618248142058c2647a4c4a801030a216ce0644a8d527a7beac391a7d47d78fdcac285356dbe1bb6262a16be641853438da24a526ea6d0b030a6061503ae4869d3450f467cf1c4a482cb972fe8d46922a5a5bab70509384fdd4b03f573cb4f2c698a74e8254bf472b5f252647d692f837ece6e5f2f412f55aa97108f500c26c3a7ff08a135693b442e9f208d1a32dc1452a825e74cbbcea0e1f73583c67802bfe705f1bc7255c833356aaf96e1cfa01ccbe99633aa071021317cfc20210425b410ccdb47d04232bc3de6f9cb5f4efdf3d7475abfafefe5796c0ce2b9375a07cbfb5c328fce4bf6d74ca13e8dc5e6bf03a1341c6e6a00c308168ec8d1a1d65e02a51dd1c00ba43851e8bc80c5975ab7477bd0f018ed7c4e8fd2603d284d46d2204bcfab942c61d3e76132468e31322b697f8d3ba38f0a40f1ed378aef1b2b518a76703cf3acd4324adbc09cb5cf395cbad0e2dbcba16f35df3daadcd2b39cc657f01c7aeff9c472859c67fa1cc9564c32751ed1e055185c53949495a6296e4d9c8c3053b069d205cb0c4ca0202a88a4274eb0a0e4450ba580fb20b36535c0d942ed65cfcb6797e0fcf9f9e91cb447b5e93d4e6593881ff4e92f1808ba4fa1f2e8ad6803c7fa3daa1cf4a7dbed064548e5dff7fd7c17ee00c9d8a722e97fcef5f0e88ce392ee0842d032ce5f53b7bd9c69e6d41251cfdf31ddb2967504ea3a6a770853c8c88ba2516fd45e4014d853f09e73ebe018e331bdf37edacf29f9d809a9eae132134e6a9952cb9284aca7b0822141943681501a181414144eef5050f9e746cd4b2db3de779bd6af07bb0e0b7a2b65e71fdd6ade85b9ad7149979df06bea32930c6a18aa1b962b9c74530c94b05471054b154b6154768f6fd6ca1aa49f58b080f308f889050ba7bf2f2c6b9ebab1ac71faee76b186e96204b8179e88d50beb75d985b514b4a70be0f21468f2a8b96a6ef7659d444d93c09c512f6d933de60deaa0172cd66002f441f30675ea77d2409833ea3366b85caa2f81cad5d34a02cd1bd47170fd813c2b4db298a9b3c50919d41e00668815a2c0cca9f2458d7a0f4a0393849103c6083869b4d4a8ffa0b49d304a3051a5882429236a534484eded93e73bf8409c339e1dea70cb7076735d9547cf6174dd330cc04f2c6c94d0b45162c9f7073fb164d1e655689ea09fe5badadd0d80c1123d1c1115678a93274070a1a58a2a78807253eb1a68d7f9663fb1b029028d1828e80c4bf09b269070162324d13451485a882f90b40e06609529126785a817a0e9d242b521893a994e2069322becd001873649a0b872c51224cd048b242c66a8e3dc115aa031b00c487a0a8cbab97cd91790445596e3ae7eed757bd40c1a301f89c6cbbdb4aaba171663014d964702da2b5446aca719c3dce9b32bc1173932804206a7362b9030878b259e58f141cb9411356d3a0c2ebce0dea2843634cc20032750924041fa1075648a254880d182197bc588946d3a416d96f41668bac01c6683286cdab46901e6e100ba159f17aa280ad04a62d61a42a6aa437267460e09b75f7cba7b5aeb3e1e30b564eda6dd4e432578382cc0b0071558037787b7eeee56b900aac8dce92037d4a7d0abc9e6b37834f5fb27599e4043c99d0edeee1ccf38f914faa7f5677204e24e3f7a2ee4d13271a7db31cc832a105a6f1f5cb16ec7d95a69334fd5ea4ae8c39d3e96edec20334f3a6b4abd698ffc747261913b1d9ce26af52774df6439c2f8354e948c9ac48c172d5c55193117bc428acbe64b5914172097847b74cacee39ceb98f4d33ad7ca913eb44fad9d0b97bd561fb4469ddf074a0e21526b72d2d917e09c44566423c59c39893c6e91275187c5c42285144fa25a83c96507bb9027913881898321c8686103178450c28adaf4429e445d83c9e549c435985cea4d8fbdcef3ba729e5dadca21df7e840b07977f62698af261993b1d7c838599319dd499db0243c5e512c5158f90e24e67fdc42245105f7affc49582877e02642fb5f5138b144cdaf0d7e6ae5dabcfe96dab9c0b4bb041f3656d21eb96d6ae3f7d05a43ca79006398ee3b87204af9f6edd885af28a8d96d12b734eea15b9ec3fb4b283522861e632645a2c54cea8d9b35d04fe4927a54dd494e639aaa74a19a884258a272c64e0b4684f2ee624633cea4f17a1fef426f7a453ea4ac8e582d3d92f3b6cb46bee74d50e77b6ccc8cc05e1dc6983d28e6070c2250b9924559a40aa2d600a28362f4c5972854c8da3983344921543d0b1e205005891b2441155bab0c1a2c6dee3082d9bfefd130b191a1e94e2cea05b4f29012386a61750713b23013276a30627e80aa758ab534a291dbd395bdc2d514a29dd81b5007e2a30ecc083aef3a00391870ab47d7004050175d023f25081b6b77a62dd4892359448a39eb5db90a3c64a8bcb72c468f4fc7c20da90c9687c20250584671d7e80697ceb614ff59aac44b5d010c3e0db0c0004206452d158899730d9d170f96786686700120022a6d8ce4f0763985feb075957253aeb1e98d2d22c9c395c25a529c36c1bbe73f430f14402e6ac73cc1b611841e5a8e1b2830298011379a8407b005d4761326cdc08fbf35ce265a076dbe4f2282386c8c304ad7b8300a157ab5763f08004a05f795e40b51ae590ca51db0499c99123478eb9001248cf287e82995c94a494a49480cc70d941107662883c5ccf90b3f3b4d229b3ce2c78ea4c55a06ed4adb7de7719e4b155e79c575cb142f0b2c695c87366390e0443b17eecf500a10010e07a7cdef759177cfc71eef1cc1bd68d3a46d91c4f90cf53815f4c04deec185fcb3a97419e3a7bf503417147839e4aecf979311c411022f0d4f9734ef591a39d40b6faec58d0adee9b8b98d9c57debb626907526c153679047db2d133cb5df5b67153c75b62e784abf5a6be65aab05338320188a620836f93a9684a7ddf926d25c3791ee5afcdd4ff5799c753a0255ee6b0bbcca79e5c8baf239837e258e2158bd5e3014c3d7ece1cd5aabf7a0b439a3beef1343d7832f158d35e0f94fe03a3ca7accef0d2f8e9aecfa77faa14a8e6acac15739175064170ba8a5f9306faecf9098eaa911dc8b353f63caf24276402713e27f75c0bbe3a6787d4ee291369d7a4740ab93bafb0b968f633fbe7e5f5e6ec2be47a947eed496b8c7e5ae1dcea595c19fced79de24837ad65e23b6f30d06057530087756535d7bb0542bb3bad8e2d12343603ce7f8418265762140acbe9c708438261db317649e2f33147ff9f888890d503dace0a5892b5e6a4730c86186225fb6685204925a799f26d48cc3ece485d37ffe799d1748beb3cfb9156d9c8db74dbcb5fdb51ea08b189e7a7bded1c7dc1ce64b693737932f166db57ae8dc08f62d3982d7571cf0e48902a7ca6d7ac30202074064e1f9e10662be7aad2e7e4009cd191cae408962a516f495ce106bba94497222c64badbaacceeab1f0d5875a684a71d9e2a9c2dcb2a7876fd002c823850b3564e509820ba80ebefa7724031c184c61058c315d88408196263778b1050f4360419178d8c1a3bc850b23dfde3dc0099a2ca4e4b0c31329970b3ed4d161862d4d38d0159e54e1b8054c61b17598db33a5c3f8758b241896725082862ebacc00051249ac9c996a52ab5ca911285021d310ce2d7bb8d26a8deb164b74d8425e9df2750717c407526b0d05b0450e35bc3600ad7f100ee7de36ac672017b5103ba5b1bce5cc54029d3150085a56e78dea3c2c5c201e98b4d605e6acfa28c27c4a81490ba24366bef6a0b406cc5975e2cbb9e52b52cb449844284c1f1d930805cee7bcb16312a1d08d0e984428785ec2784c2214be1a234c2214543f0f984428801f406012a11002200293080531000d984428acdc83796335729179c3c8bc519d1b798579a37a3732d2bc51dd1b998579a3fa37f291915b08917c7591934c60d690589874769d056e51926fe37c5a4b00d2b2d79b4b3d470bb153b2878158fc768cf1e020b09655354086865a568beccd7a6da1a020eb0100bebaeb06b7e45be9c11090965547e224beb54c06b3c1453db04964bdfa8c49f35830285e1a999e356973d622ac1bdf84b4ac0261a0cafa9b94d252b803b80a1ba45f65591617a3136d9cd4b28f8b39a3617391f51b70119c394d13bd93969828b560e0b9dd92957898dcf60e2463d5418e61d2786acee824e2a7b14ac62410bae83e405f81e49029a50f20083a481261b90ae0f54bced095f80b0f079c83a7be125547dcd6913ba5faca45a75ea3c98a1449bfa1833c2bdc92913a27429d8c1217f5122e62c245968cf1e08e32999d23b764246629cd594458fd47f2940a891b3ae88c9434893ea7ce48a610af6919e53653465d4522719cb16f7446b9cd149a933a6539d332e8d93897973c9295da3b5248cb2240126120ea547c8025873010a534d0a9eb98441c67c7a4b19c39a33e34040208b3d938ce279e1225d035906426ea1c456989da98446919652506a26ed47da3de495371bc0ea3a8d5888bbaaf1e420bcd241d514c61944ecaa3110e6e79795eb8250e1e186e8943e6e3418c4669428c79a3ba0c514d29fb5aab5359cb82b85c6a83c704f3d4717c084d8bc1b3ea1e7c95d1a08aa365d56908355c1de4ab8b5b3a797fb8e8c54095ceead58dbae38cac5ceaecb39341174185575c6605f030aba98ccaf3647b17e0dbbbeb6bcd753246c9767bd4dd1607979f48bde52c3786e30a286dfeb06ec4453b6f9d953489e695765b3909663d0fd55ceaedd429ed73eb939223346dd6ecb467de4ecb712c29faa6e5aa9c94446943b4a350da2b69ca531a5a9a5194934ace7fb851d7298e9b6a9a8ce328b593169a4a88b951da4c9ef652337594a7ce555ed34254893169284b85a06794893b9fc75f5e0e7953493c872a79d5ea1c526f6fb9ed6ad476e4a4a929b6c8d718b33ec38f6a3c63cc9231eb9d7f60cb09e677c7613e78fce57694008fbf1c7c85714b8e59ea356ac9980462380db7800c8f912ac05c86d3205598e203e6325c851d8fe1b3c6705a469de3f054cb784ae4e1c524b0e331fc07cc65b8510f99f2913e5efef2213bcee3cc14c473ebb011b633d670e1ceda14ebb1cf617e548b7d240a3e761c368159939530195ecaa6783e6b31b89d71d660966419232b4db1c78e933c45a73a722a89a7e88c7a085a464b0092e692311e753e75ced98d28cf386baf71d6bcb134c17a6942e7a5099e7f5e9aa0f2d204d04b13422f4d10bd3481e526ac1c6c9e71d658dce122cb16f91a670d6473190ec799e2a2fbd4af935fb2bccf1a579f0aececd00798b64372139d5177186cc799b643aa984ccb9a288de12051254f29933ad5c2b5249fe131af35b764a931b4a5f4b30691efe8b68b0d8b46eca9935cf463adccdf5c6ea794524aa9167e90612d83b2aa6d19dfd7cb2018eeca55ab359348e8a76a3e79df2bb273d528a3b34b22250dd5567ec4ab21211df11ae847826aa18bceaa7ec4abadbcbd3f5235daf03c1cdf3150a1c553af9336d51061e64d0f31d0e0065335ea56b4d109f0a5b2713667ed22082094b46f039407f856713bdc4a7a33cd7d40c93e994c06ea395e73596ed45756115fee97162aa7ca884b9d554485623b825a562b2f59f7623c52c091b1cee7fffcea23b450ecb6acbe5a5669b356fdc27a603fe424aad5983406cc5975186c67e74bff0a7e39c137b273aecfa7280e8ac52c83fed46f973917bdbe3b887f64deb2dec17d5f6e3ca87de806750473c2c23ba9b5978bc05f919944f34a79143eacd92d194a7167fcacb20b6bf2f2f4d4412ac5ad3e9d8bc4e7d59ad60bb7f4a79492d5bb1f9b29e0af2d8bf990cb40ef755f414394f5449d60e2b8a95775d0b6b71b175528234c2b810e3aabf3cd92f946480f43995252b8f9866f136ac9f33c1de56b6583e778c65e4e2afe7e75a3965577ea4dcebfdd92946e49486eb7dbed76e31b9d551fa1878e1b13185c1416f9e9aa225c548b1459159925d059f51efb3a308d95f0ac7aedc06b7979882f55349829e62567a1f578c95fbe3abf803b2075f4ac7a257ff4ac92b3674dc2bc3a095c34c3ab7360129d2086cbf076d1cb5985f515e72c2f279aceaf972acf5b5ece2b3e777919aa7cc7cba906f417991384cee3e5c4c283008fc04533481839575f4ea8927bb65157fde48206ea9fb48b3a585f7975de61129dc082d2f9f5eaccc3243aa1d5c3e72e1f54be1305f4d70fa1f3783de104472f83e4e60df618e49c37a857e719bf7983fa6bdc19bb919b37a8b7463b6f50bf639d37a8b3463a6f50eae2c83cdee89e390a3731130daf7e5b9ee7791e0d9299588999d418ade281478adbf3d33b1eae7f961a50e90215e60b2b476ec839b204cd162482f8a1d6eeb22e0264a7b483cc242ea24f9d3529a53c4897c2caa0b7ee8d93d2eadd38e98c996c76ca942953e69c524a29a594524a39b247a594ce2ae73e09a1b3ca3109c5785867672e9a6b564e9e974c86b294087a37021142692b926f94e441ba485c74846947515622c94faa8f0c01370281e19641dfcf7b9fcc5955d15bc3a4cea8046c96b5b1a0548acd4000000000b314003028140c87c442d158340c5449db0314800f879e4668561809e428c9410a1963802106100000002002000333a82000c004692ef8320a6389e4a36d12bd2d029f14334b76049000625b7b03a7d6ad9f493cbbebe7a8bb3813e8d89ce6c314dfe612081f8f3f87eab3beeceb902a8091d9f07e03aadacd1bb1a369b2ba05fbddcc80c20806d70270199e3d1620ef30bb98246ff9390b0e2b3e631be4a28548b9c19d796713fb6ff24f480ba9e2152d03a89db5c1834833ebc0345ac0e3ff58594e3bcd165d634225d5e92489899b513b14c6b575147a19813e4fcdd02e1daf8f842a7bf67414549aa102595e742d2db0e66368b35cf8fe1944574425b1a0cc55fba2b44bd6953a25ee9e0c42c50ef09ad560258499f9c52afc805d38dbfecae1b49b1e136ad7eb2171ece396e48ed038e5bd83d13b7684c668b4c1deb8216ccb3aa3e73101f22f805812db839f9640a81eacaba00e5a220136512efa83f87ad073ecc2696abda46b420866a76b4526a2d345d82b45d04070cbb6151cd4fc2d0ea2a0aba7c5aa9fdc6b0e8cb656bb028deabeecd2d719465ac7f769b6fa0810324459945e746e9d6c7b0d7e4b2d733a1b8bd068f85f8ce47232b9f47c12a220f403fecb710e0399016b1b00d9c632fca55c0d26749e28a809f9b9075b005b8fe26e611dd7856795bc9c7709b4d9c6a4b42d097b71e8a7f40e4fabe97fac4f32d24d8d8ff6a85b594a67694330fc6542ac09d9af26b2b6ca28786f854bba8109ff1d32434670c2bee76123605c517e15af8fbaac15cc6cc929a5e73e6912f0f337b32c11468927a36c3dd507094ff187e357815e4c3752f83861a0bbf1557a6bd57a86bc6c9b889d1139b3e4c718fec5140a75efe21382fcc6ceaff47cbdcacba1a95533068a39b80dab702aeebc1ab0e38fe7fd016193acccb145e5bc156b70181276b91f55153c563761e4ce149774f1fb166da808202ee08d489c8f4c38ab73a049b75f6e52e16b24bf124ef123ee015e1068e291ac3acb5f3fe7e6d3e4870be0dfdf3d56cefcfd2b6ee695c5dfe18b5cfd0af0e6d4f0355b8f1254335be781c7c6e91fadc0407cb7354885007956c1444ee75c310932da4efea288534a5de205366c2111b8480a0d4e445d72b64e18962c9e32bfbbd3398a4bbd15c22e70c1604d1425eb05e75dd00e6456557444642e64551d6d469291b0ce0b9aa6a2d702a303c169bd92af653dfc1302f1916a07bb4047b4dbe3d810dd88d1638ebdf8a383ba88f365ceb7b6759480a667d80ec5b31e1c25648f128a070ac57e6d25c98964327b5b339220d3c89af0045291292b434119d4a2c1cf4e87e32f905f54336b0b6b05b80b1f6d4e1a3d49158e49647341f1dc8a8b037532210efb3b3558f1bf52cce487649add58a0d07325bc867fd95674910835de49d380a92b7e7b6b84dbb6fd414f277649d08d10d8453e1f54a32f81535fe00413935df3585bd960fb1161950465342532631dc8365e916fd3a4c8ca59ac61f61cb6100305b726f5f4c29b8986af4c5d253bf39901d2981330929dc8eac58b3b5c8a2b7e80995521c09dd46ff2690aef0bbc79b755188fd55845a1dab279144397fc72a94059ce7f8f82e710d3ac6034151082695f9b8b10e925b8625381ed46ffc905e91667df9154be7e3298fc6e8691415d6aa694de342194010f5b1d1a0b74aea00bb70effa5ebaab1ca7409267d4d4378f8b56201c7a02b670a95160f44514a516ab9bfc69bdb81694ddf331ee3958e335ad4185e985c6b816e18e77062d0c277024b4dab6f560d67a505704807d2a17d448056ab73baaf3731b4a0d9e9eddbd6e87cff8be87335eae9c4dfdeb1882d514e9a850bc86d1739a87ce85196c97af9c34c258c938c75ce272e4d98f43b625db0f0835ffaed7aaecfa75ebd62564fedc4075c2867078ae61659b01287b15d87352f6e02446ee0122e6e318d08801a833a7f3a374ce49c43996b3434f3b83a05c373afd243c4428be39b8f4149b5563ee55d1665033ea9284abdc0d2082b97c96c718b733f97b484783954202eb864d5a02b244dd5eab836b00a79019c0604349f1d009d43556aad5456314c902c6fb1eef1f02b3d85eddff3a7cc4f7ec345ddb61e3bb44131ea1ac7deecfe5697837bef85d85dcdd6e8d93988ade9ac598dc74bb1e2bf0fdc36841fbf199fa413723682c1d9e1b9ab3ee3afaafe356ba5c5ce3bf759012b9dbd556c985efc0460684bde952c95102b63226ae6187f715da0aeef4322b3076d92ccbbf9793e6134c406cdb4593841d7115e3e99af0b41d9f090a58f91a84579c54e647fcc4d046341338fe7332b5aff50bb73ae7ca5e38f52499a4a95c4fb07bebc2977156be839885a95308e5e4f552602005b09d36d93dcf2cdbfc7614f30216b1801d07a2c3e326dc99ec0355652253e576aa5935788fc20d065334b4d5174151cd2bd7ed45aa5e1680a377f31aa06630cf8df68f25939300e7841c1efeae8d23019f9ec7a1d231e493f19037025fc2be433f50a0ba0318f91ecccf79bba7440f2a461d6d1b5d60b4afb94466b9480a2a0e7bc4f9f93ac0646b9b3f5b07cb33f80a56cc66c759386e702d5b0ba5a8d82103e4af0a1b4e7da0303169986a5e18153e35e2b9412824dff11a39527434756b05515438c57c2c07fc136a560d66727ddf84835baabd63b1e37dcf114d325eb00d5997a426a3d6588bf8022beddca660cc8c041c13660e24134ef97dc1497be9884269cc9e79c3c1beb1b080a302c54525a3ed34028a230a4c14c7ca69c25a29bb5ac3671e2b83e300111422ecdd4f1290f7fba1914eb88462743a850717739e258874072ab5a7daa326017dc49ca664b5d1e1e653e36d759c4dc44007aeb4c74b4a193953f5699589455fe0a6b42318787befdf40a02b92ddd47850c40a4ec24530ee0868b8b9870416193976c280026ec8c5203b89b8f7d297a50c85735b5cbd7b8a1c83d250a8461e7335d0778d9bf71aba003e584ab647c9336d98ee5ff007ec19ac23e211f989fb123f9a690a637a54a8609cecd10c38b26920f90d449e9876a43704345d7114a087d84322a6007fda35560b456facfc5f995047f3db88afff0beaf9371d7b10c19e1e727a7ebc4b82fe09bf2b516734498f7f258dda840b75f9463ab22fcfdf09d6cb909d06661e14fca506ca5645072139fc18ecf70230873082a0b7f98ebd2d2caf30badd0dfb1d90726ee0d30f4950c97b11d154b23bb6eece8214193301c9c26b2a443bb9a7d3c4621d811784c87e11c2b5adb3c5d5f2d05610dc3e1449580b6b46b73167aea7587bc15fd661c0e895be44ad4013e14c3426d8477f3330b988d5cb146ec77c06e3ef769160c2f0f51efd65d81e075375f2481abd77c34076c133845f7b2f026d6bafd85b104f58a169fc44d6f3ba640a9874f777aa4b8fb1f69672caa1d00d9da7706401b1728d71c68037b946ef340cbcdc78041332ae7980c8845d3b44d3fd7233e5716c54e7d1d8ff436b8fec0fd9c0b309fc11b01f9a133204c75f0178c8af74f8ba016f005db9822383e1cd9085f8c375e5ad18bfe5fd4d492fe9178e20e114fb38eaf4178c01cf208ccd97f4bd3a022a9278e7da5fb4ab02fecc1ae1f3487b93531f9c21eaf9e89d7b532a335e1c11c79f2ee33302984aff97dd274dee706472133359991ad1db21b2698b9723d7c8abe41518b53b79d69f39b62095bc7a93404f629d8b35a8d67023d164b5157f80e2aec90b4925d113bdfced28910704ad167968629392650a97c36d242dcf859e58f6e3307ebd0d662747394f9435b6d8f7120880fa4cf535d62a370472b21a9f194043d05e728c5dfc0de18b156d97d2b376adcf55ff1c3e18239b60adc4e8d4b179144c97b388f8f85e4084558e7a142b079468281d0977093334bb58365891b9dcfa2e307e5f30474c358867f79935ad35977fe966c8ef4ca17ec9f159959a5fe01536f3d9c23908d9b37308a3a8afb1616db8f582c037daeec81a12cfe9d52475bde221466b1319cfeda3dc149f5611015aa87c6af600d62c97ae436acf36c9a71b47b4146fba1f04480a8ef36613ea6832dbdf8eacf36b1563d08a21e93295a8803a27e91f17ed1e01a4568f755a5b7c854a8692fd64b46afba512ea336ce9aaec2821de2471177ca1ebeb590848a8d3626e2150bee2ddd827dcd96b6d66cdb9d9cf200a9e516d0be27dc205d1943eab3a74f8aadaef8d3f1230d1c11cfa4a33017ca5182a6bb39ee39995abb096b1c1a8edf551b864ccc22f496806e2457027bb2915af8cf4d0942f1ae7ab4aeff72654fd45dec24f752da0dc54b00ad32d27895c10905852836540c51f650d4884158acd33c1b2c8df3054990929aa074a2f94d2b04e9a9323b816cc5c59998124d6f74e94271217d12e7722f52d6b5492f610d023c5daad3682e919924786aaf5718360b31102c20257f93d2be3272d203eebe7c0e7914268e597bdb770c2a594c20a4c92194ba0790232b9aaef31b45fedac03ee1d524c6c3e8e547aa6dfb4811ab6257dced25a690ee000606c95901a6cb25504ca26bf9ecdf927ce33208319901f7b05ceda83def4fca86b6b74ae0517d4ff09d563484568810c1f4284ed8c8ccf430cf016242033ddad319dc3beba16210e9fe5591db8f4632303ad5631bfd361c9f51c90cbfd50e1957bdaad0a2d58567d0d30e604f9ae5f20fdb84bcf0695c46a530627a80e8f45fecaa594a1d063d6e0288a507f73ef11de21b0c9e329801514116d9c4c467bd0d9de933e11f2f6d12cb280b04739b010fcd88813ec35e393c6302dacc078e9922c2f70c0539a3d4466a0ac2a979074bc8e6245d15fa61ca148a644d50f96ba38e7c0ecd44c00b08995715130f6000631dd235f22518f52383213a04189b701ed32f00958e1e94de7e2443c9a1c965984ce55181cd0b68ca312cabac4565a282fead0ae80aebbbb53f3973d26ac02eadaf02a2dd6929d4fa01924e3d66d4bd318319ece8f677844d6621aa3c0408a68a46873a08d4f2a5ec24c040bfb5fc917a5714940b7201fa44bc5ae6ebc51014fecbb48d7cf7e002673747e8a8f5eec7d3322c399aa849062e62adc3af444dc4bfc65e37448249616e99ba6328ace331130d85dd37f888238fd1452591d3982defab8b7a62d3f911a52f832765a19f621f206860e815ea5df5ac5fc10222bca35ed42fa1a076d7f01d9437d0618dc82cf579d99bf407f13fa3060c65d744462045950947b55be1eec16cda2668e9412491ecba3a12761124386b32f55afa4bf96cf4098ab910d81b7fb357db54ef7dfdb21480b8658aa85878ea539dd7b574489190466145d9ffed53926b826cfdaa95f1c1ac894ce7fd15af3adde46048473a9fd222f4b84ddac68eb005aff782c499ba67920f4d064d6de9b90422f41a2e64d484b8620933d27ed1a10a8748c5e1df962b3db954a8f7c1e18653296f362348319d2f483f3f0406c3600dc41459753a77b53170dc8669bf54dba3513d2ef95d28954dd54f8fb8b76d22a9b3ab9ddd15ebfdc452923814ead7447667ceddcd5736313936b56753f0e954cc0ba906c8390a8838de741d3283a9254f6f0fa05f342720839d854b05ef43f23ff895604ba20632bfca2ff5fb4e86d5e7f3c94fb84e5034f8bb0dc66215162413a87d6fb5415a252933316dba133ad7a65e017482ea9bb39f0bc47fb8b8a133ecb334b406cad970e237029b028b0e7a46ac0195c4cf6fd7fbf7219df350fd3430f98364916b2cb62e1c701750f21af944b2f9feeb356acb1a0ae9f007822a883f25f424388b41c0fc16d5a7966079ed1432d37b5362ded9f636d99b30b20853107590bef76e0a84ff2ae6eb41d44ac6febddf9460b2446e9fddb45727c63cdb6f60097e5719527978d5495fbe0114494459b4c65e310bc9a268d5c6fb7af3aa3ffc2ac7c0cf105fbb6442de596ec354d7c215999b6a22c1d6db9b4dcbcbc61addc40350702f599e00ffd75c9c3a9d12174826f8c487ec88d129e18588f61105bf3e2482216978e6672c0eb423fa460a1f28e4946861c79dbdceb3166ef22c991fe0dd6dae8952a845a80dda446f1adf993ec08243e138e24fd72b3c6af62a20f2fb7b848a7a372b5edfe37013552eaf6c05feee506273b0c1966cccc65b5b3a894431a321ec09bc53ef9926112ea5958e28f8234622a141ccdec6055b4b3a273db70df3263dfebd111e9292e1c824841ed822eaf59267cac6fddc391c1b62a3e388238cc16435c336c57dc85a2b15590e222a75b35dbfe3cf26f68281874c487bb809f776771d064e0ceaca81fb1a96004aab46534ff864110f5bcbeaafa34d5b7dec684e114c82a1c3503a644dd31ff646c39134af2b90d265a3b213b6be26c89469ca2b118088fb10e7406c9a3a34a8a5f75a037bb20856e6994ece5fc9bd4d767dbcd52e562d9fa0faa7295a039476a96a800ceb8075b452b56c882868a8c8097982ec026b1bf9c83ec749b4a66cfc5a18a7c5b7b2d6b36f60948599d473c3b773a5311fc8ea4a231896d519411576d66a0a1a54e3fb43be0a3bd7a723a351e4668d87390ebc5cc0a3d8e869e0caac3fa2e68a1a4b94d00ca1a59b495685d5bd56704b09c6c061e1f308b1a44b57edc10a27a65aca8c3f18772f6542dacb17c66fe600fc13b810cf7851ba66ab5d87ac73990e291c4601df413e41c5704f5d6564abd18730cd2c07bf8c60d1b60371231f68d59ec96bc21d6fd89cab352bbb9cf37bb3e3abc924c6c6afdba05421dd06a931251b6f8050d63cb80fa93719b85246b7a29837c68a577c665532d21c17278fa5283d4d3db95bdbbf51563cdd051a3d4c6d52f63385060094815fb3cdcd824cc3d5a890710f971a7f9c0965ebbbc61f2069180b9cfc95b2dbc573ac3623af72a714ce87c390a57cefbf1ae8598d7a7db9ec91c2fbf1b97a4398724363fe26cf630df03b5f46a4fc6112852c6cd9e28e0a03d16f92c8c721c613e366f284f0569c448c20d35aa377c4996184dbcbde3540e70602bf9c8d897be5fd14617698c8eb60747e237059547c2e6197717639c260d2109847c94a2438578f07e79cd805d10ed5207a2a5aca90b0f3bddbbc553792786dd1c3131bdd9f06bd211416d736d938d2920370a32223446f8f15f406200e8f7e4c89939bdd17f0682c9a32df1f55b3785ae1293ad895b1787a51bda6be7387093f54cde2bb092e8853a10ef637a94223b2760ada3ee03f681de4e412b79a17d07a86e37d54fce1f978c26922413abb7a5c5421c5899d91828564af46a1bd56f096bcd9cc2076fe48a09b71c6443017970e25daaa92fb05cc79dd24b115ac68db012a954675d291436be807cf0abca3c739be80db9689d4d1c13a64659d8795055e1b8a2d4b21b5b298bd56f2aa0bebd4039931984c44fa246a74757560352b27d79d16fc32ad166317917e08632a979a05efae8712c4c211c7317eb7c546e51240aa9c88ba50ed9f2fdaa4e12bea8d475d37dc84267eb6eca0a1093ac511bac6f46f697412a347554150dc70e201499c6d7b5a739f5d60d31b3ccd65c326f9acf48941a17a25249e6674a2009b865d99dbbbfb8aab73dd938d2e752d4d01e23b10f5fe52598d9bd594c113f98a9b17b4e58cad5c806192ed5838e969e589d12122478eee6506f031bdafb55346a672f5d3d386f0504bf63d12acc024bae1ef00e2e55244117ada4fb549f8824ad7f60c3d6f63ea10b79423ff53887ebd56ddf1132fd5d51f9e42c833ab88631e0c970666f3083ef92fc8a89672e401b488598d17c89c684a18cf802b6c5c597e8cb9b2141dc8dd05793ea46e756480f53d26cb3f3a6d48a9634be4acc95b96420afcfbf44c87d78bf810111010498b344a4bb5932ec7dd589e27f64f4fe6bc9ea030ec092f4cf6d5547e02d623a01e7ee07379af30af625bb9a45a76e7492f93e53ea7e5960423238e6b23f7b6887f393b08633130b156db508110222a462ede1a11c0ea4c211fe250f885d675ca7c5f1cd0c275c77f0d602bdba3991a4f4e237e403152237f3aae3b4f7840d44c5625e5fa91540de5549a17e8c1878a11932659e9a82b67b2304db4dd234f69e06deb1510a8208f3deec311396f0e307ea4dd7d187decc11958a1b9097420efd3cdf79e4e21ca680275dd14e978109cde939af773318c86d64e408b51aed18581675c23108115d840313084348b9454be49b64fe24845690347a5d9e562c5734cf2c2599b6e7b0d70378251104d8182e8ca3dd47f7e0286c2053d314603d47579d59306502911848b6c8149946b2fecb9162e009e5fe1ff0f22c601688ab29a03d08a0b5e1b3846628c2b5306d82057704dabc3852a6adb5eafa468ff5424517dae9fc6374bf31790ec74185c6a92d5f8a88f75bb3a7f83dcc74948d1efe0002d9e72904d05d332018b2215d5331c30078c6c6af5730f30df22400ce4b2c32bac7fe4a73fc70582ce2981e970615904aa6f863276c9df0196e0f6b704414e93380335c6e162719cb181d888029db1e0f85d2ab45e5f5a40e31a094e51802b94e376244bbdd15436a310c2fdfe3bc749514695bd069a72e6d25d51a55014bea52b2994068d9ec40147c4795656c5daaff2e69bb07f5ac166c9f5a44d5d647a667f0215984032b00b28238266c182e2183a995412ac697a1253f06e0eb8335374db92836e76616ec80d2d064a1bd969ced05cebe73e6d47e252ece69af7b96f30b7acc03e7dc4cd0d2273d59a9e6bb862e642f4272668e6760175268570dc71b3e66d48e5c5bc5f62e30da88c7d92a06c9d8a2be4d7470e44243043166456d620f782dc488fca28574b4e322f3bf614e695b98cd80dad8ea667c4bec33d71036ca815694c87bb8033794055989becff7b2ec88524cad2f5692cc677c17326fd3d91c557f2790d65c99660a3cca0a49467d5d244d318761f52199bd3a70a959c127816180b31b124d7257b9c6735305e406f124e2f26047279a0080cfae0ee793dfd7b00203c089f378f89aac82a627e861cd5c83b0e13414e63c7e10d89591f094c05049bd223d5c0f41815f3d1986ae380f864d16b061a2d8ee0067bc7b0ab38781e3326c2758767ae767147c0de541d05686b92d0f635ac1d462e576ec5af8023d030f02421d487b2d4562401ee166eddb01488956042b4111a26a4c0ecd39e59f00b06fb6a469100042f39bbb6d3d5c2126167c688b5747635c2987f50a13953746dbfc802704362a94cd63b91474352436ae9f5aa7226820c08803eae269ec96b34cc562ef69dd7fe45ade86a18f54bdf7f08f1541e2af71a5f724d549b38958747b6e7462da94d0d85fb827a680eef75e5e65f99d8686a7f06c8695cdead08426d4fc67d993ff68c514cdab3144b41ccd88ea5486fe4a08cafdd77faf81f1f9c307b9a044a087535b150ae2033498a150b9f991742b5eea48e27f9a22a4c626163e38cf20fe6abbf2bc6b84c922905087efe58fc42e9e65799bb2cbfaabe164f30ecddee5f8723c91e189f5ebe54ac9596345eb7fb55580109902016efab55d32b529bd72483ae361e8c61425c7b492a5a46f9fc51bf03b8ded5e65049113c37309d1975ca08bdcab52adf744df2c22cdf6b43c57e4500d699d861448aca71c22703d62b2c834540dc607cf33ab44de586e138013c8ed1ffcc04a59045338735b673aa30f954b34aa43e0170c874f264be924a9df0f19fba8b3ac586ed273d49493aef141b916fcca9483b0b3f801661cfea9df6927b4f925e99b2b2f0387fea242ba92fa70e426cda58081e283367dba38842edbc7994a79de4b36c447873e058c47ff95345dc0ee7ed9bafed193d39a0d702669d1a0b844d230424046d0c8b696e22d7f398acd419a241a4ca1086e209363d1d29a6c6b609f272d35569ef7be5ce4d9cfbc2d0512203fc04e8853ed465e94230e4b97d48d198a6b3f2cb3819eb0dbe2acfb0119c332a683ec9473c862e380007b18cc6b5d03f10bb5a205ec09f84c2a8c4b34b2543ea9b95a6bd11806381fd4c8e4dfd4e9a102590d0a23b3e26794b864c956997103a5e1851fa6e497801223a4758ae6589a2f7fc3be5801c6b00020c0ec4d90c78d00cf3b352ecc60106e3a5fd92103373a86db92e09847f20fd3bad95106bc70d98785767e34600e064af12d811682c5e347e7d004b025d9e06fed14de8470fd42438480e529aaf6c573f4858c3217e41a515b2a13b49b72d04b51ed13290cb25eaad5616f458a25a4a91e7d5ffa1d05fb61a6899b5420f670e6cdf2c9c5fe6f629b29e550c46c3d0927d1a42cc69f8b14a98030b4546252317716a381a98baf6b3e9515a19d6e529e1af2e0c98f52457b30235db11650911503458779f1a05d55155ac9c249473e996dfcb794cf40a44d5ab3f42bed71c8bcb917dcc99035201244026b2283c21ec193605c8893b8225e772c725b4e6f9491237097b93d1c7fe3df2fd26b10b29d11a1c4302ac388c35dc7a156eb94d231895cc448dc82add36c9b6eb163d8c4e42411fad3ef2a0e17dcbd04c3140dd42f5f0ca44581c29959d94ce64fdefa3951128d06eae31c11ada5359e540d7d387324d785b48c0a7ea22f8f8c7422276fd348fcc3be34ddb510fbcf81765c8492177f3af5cc2fe61291032f72c381cb64c45ad2ad8773dd465a146792258d0d6a2bd6c489a0fde9dd677341b604eb4e4b374f209c6824d3a2ee82a8489f2e3cb055154cc3e0e2d2ae73909eef31a5e46517be9ac452637ff256837518dcacf4122b45b719b1070077223cdb0ea298b9f9f97fdca32e70ecc63435e57519cc028ec4ae2c3a6c862878e97747dfdf86043a4f1023dd547a7c1ebff4e455ca708e29c4a0859d8c012c6982dc63c76a3a0172f55d86e8e19536c107eef3ba2fb31e557f74a728bd6130b146bfa0887508282d2bfe2da8bbbf868bd8a47e81403a055241e0e5e4fac10b901a44f077104417d9a5f1373a5d6a5a6ddeb0e3062da55fa28519edbd117b0903872ec9d43f36c967c61cca2633d61fc5fa7bcb9c0e38b626bb7c124181e4323fb08541871eb0f2d8e3fecc58e049f98ed81293711277add920a587655278e93f6c22aa829c7a553cd452d6882dcaac52d5242a652b0b1b67a7a7f0a71755841db29e04eeabe6f41354818a1573deab65961eb994d88578c9983f114d052fad0e02243177261538f213848ad7ed52337ca0cb715aaf1063a25b2ac24a3593cc89495fc36406c66181ab0797305aae91972b7f4d007c727b0866970fc98546cb29b62915303e44a0a481520c582c8c15f089f3aeafa247533cd11b5a16f8d988ea8e989dabe2a308237ea13651a51e0c6b41044793b40fc604f857ff38dd7dfabb0e901223588d3b5ed6d64f940286b16d99eb732879701b913fad2861459134542ca0589de9d50ad2cdfac5498067398e1d67895ad23115ac15bad5a9a462c6de4b5dff3bd60f2e94e148703e0f25eae973ac85dd6b2e9b3817d182656cce4a3383173b2eddf9bc1a1857b421b1771f02481b9e02e279d270fb6e40c8d0efd2f44f0cb1d6f0fc632997beb284046bc852eb14d950a4c0281cd716506ab2f8abdeb73e1d06b93d8459949351cc5676705cb4e053076820f3bfb918518ccc63802cb0ba0828d031d8dcd610768ad8a6acdbfceb03ffe1d02f0d0b7a40a8fbe1e7da16b4afd2128826f4aaf1d5cb02f0b16474cad5a9fa8dff96cc9d063dd069bb3ce4ce54de48337873463fc7d2bd3bdf1c88c746d1a96c62191908a3e0890e5bfd4114d22cd80ec07b670a53c3f08f482826e742bc06b4aa7f4693c1d60576069545f90e245db1e3e91e15475cce6693d8cf0893d5df3f5ffb1e330c2cdbace82c4d09ee3e932dfa3ed1b375bdfb36c16f3388e8b91a6c923aba8a8caed12f53d15718e01fbfa0d240cbf0d9f82384f72bfcfc8463c9d9f753fa2f8b99ca40f00a80273c3f93c900a3766c574c2aac839d1a2a6d40d495bd6f953b5d88136a971db418e9cbce9b28ea37046f5c6ef63e68f2914117abaef12773121443a0f79564f73945707a6cdc012d3cd055c5378bcebfab9ede8fd2fae51f4ee4921c72943c88aaaa8d58b3876e8fc31f5448d9e6f831096524e0888e28214a0f569cc5d71cb0f141a247f47d59a52966be000e82e1ce55c9ff074ef5c9304fda46767ceb5845c41458a5d7f94ebb4c2389797de2e6c8dbdaaa927cf4f505de3812a8bdc23f2b0e94868e0e3afab3a6f8215589243ca15ab28fc0cdd30aea3de3b29ac71655d84a507061056858b5ef5163445e154edac499ad7375028ab491c81e263941407d7a0e30f1851360db95fb9e767ff802bdd91c17dd7231d4ac0dde6d6509a2c6b4ce53846527aae74f800214a4b4f3747b2b2a020d07371f864f1417630360063214945952ab6ea40a2ea586cd3de546e99ffe8cc382351d6ba77a75eac09b2c8137a09189c0c093a446ceb1ab58770fb5def5a08a1f40cd4efdb5a3f491e26fa6ea10bae8c9780100f0ca01bc97333a2a031634b28bacc5a4255d601e1ca146dd7ee0b99249316059b6a3079f1181b3e598c88eac061a4bcf18fcd2e8314f9978cc2f37ee19c215671e63540fa677140a263dcf7e9b24ac6b615fdff52367d5cb9b238ef777817ed36132c1b3f13a28ca009f18705b1d1418a8a6745616ba2da456a4b1880cd2338b6266148a98decd3af76397d135c6d953ba1a3820d3967a9ada93480b5d725c9d9ceafc5781c2041ddd7484217b9525b5f13db34e450b63dd050b187b3dd961520a4da6eda88e1b81abbb0af39da0d76ca7df81780bc52db330e56aeda0e2429b5bdd7f75ce62caf1a248c41db182f93ee8ad9023abe8996fe30ff1c9b471b1b05b602a8f51c895993143aeb697a70e1d90ba9279ae15cf20ac2c64532d079ed4e5ed07af1c4cf8f3051e5dc416477e1749786efe95720bb8e6ea40e65c7b70448643cc46a27cccdad6886835244f0224cd6e2795aa08b985a363b2e2ac2335ae56682c4ad49ee05d121fceef923255f00a77548beb2637d9fe1b58ed67c99d12fa313674737ecd99650a7d6506e244a945d9bfa6c52109adae0fe9781a2e157cc71c4ba23e1de8fcc3c0f1574e2fc837a08adf2038e1b90a43f7bb740ae03a872538a422ee0b6e8aca28a62dfed92d0adb99ed814a51313c37d90de30a2052d33ffb78f52ac87f498fa5a0955c6c0cdda6f26d4168c6f6d08033944e4eea7451918a884add0cca24a98672a01340a44269a0959dd407e90598c5b155121a32a818aeff7db33317944cd1c21170e05ea0453d26801f3a08bb9c3a5d4bf2a209a8de9a6899459d2f2446ea7adfd78f22789f7cb032418f1ebfacf34c541e4ccb76d81e774192e036305967467c7b0641837da8de1d93a79dc200ef0bc92a13e763acede354923bd7f8be4688c7b52f97edfac8a86d3a761e1953ac68a9ccd181af5102da1a83fda2d39e47d581e663a131d8593be66605b5789a2f53dcc1d0b02125af531bf8389550cf17024b2fd4ecaa28d3b7a9095654e2c6f4458feccea849c038aeb94f050d287986dd4969c21f5223add46eb9a0ed94b7e39759531cd25304b889b58596348b5ad89f34556c9fa86faa1784679cb17f6242dbc612c99446a63886dbef4b02cb7969139c062be007d3a512e5cb5a7d9f20ff37906d7474fe847e73102957acc70475f3e4e50e84a0c8d052cf9e003c5f16468a29bd47fc85514eecc07c9ddd40f12ad5f9ad8f567c78a09f444cf83c59c193ad078e48fb8629701b48e972aa7130afa48f54a9024c51bd88f4cb04eaa7422f1ea59f6f04a9093376328e9b1859351a869b78b5e7063f6437f86b3861defe23ff8b41f0374517c68f2f5e69eae5ca67584700fc95fd702f2b3b196dbf125855d4119cff89140ac940a6ec7e5381ccbd3a3978c317a0f5d700cc634130ffaede986838a6613be0f66cb1416d2046c2a65e45ed8ed169323f3af651e669c1d50be875521f10c0e86917c547d1245a9f9f54129fd7fb93648fddda06989c462cc1bcf0b1cb97bcdd475a7e61e99f66aff522e58e360832069a8c2d442393e5dc56d44b9ee139daad0f52cd1f26b2ee5b20184c6274557a925eb9939c2098c5df6628bda044cb15622d0205fbb2598cd2e830027a55e490ba996ae10105fc0a4eca8874ef66821d8e7b5758f7f09d1d405d778a600232b5eee2a846be05f267dd8ee53fa708eb06e6c1d8245871e14926d29ed0352053bf74309171237f022ad1f2c1d90ddd8329ec21cd8d2f48e66844e0c9ad10eb2d0c6d05c3dc68cad5b8914e4082a0db2339bd5cdeb71283cfc8a29ca68e1b2bd080c37479e5c3624391ff087720a1166d4aa2cc361d264721614ac5d9cd58e95f2758d13c6cf238b3abc00638cd0f06aac949c198aabf329c48744cf9be6b9832cd1f79f32542fd0bc326e1cdf5e202cd96e28ada80a1e0859fef67aa82615ef9f959c3f28a6e3c24b6701a6ae7a4c3b7a712d985f44fb5f95d3c9e45de1989bfc69f0f52cb8326e5a481ccb941075c27a1ca6654a4ba94c4969dc5f099af47a0f83620794c73194b755de69a3c8a9bf60b555d70cd8644dd185b2607ab3caa278a75c81f412b0462c7c3a06ac1947e6f99aca6f6788166272924d827e13d0fccec32c1cb97cf84280f2f90e89565f38c9a2d2dc0ba0cc532946404324e9660dba87d151ae10288caae5182260ef50fa0e648d8d053157e4117e8470989a2f72445351d61ec33aa1cdbc3280e14b5eb0d033c62bec7cfa4e6452001085ca25c10598c130ce33a184b3f8ff3c0eea686b7d1e9d32ee4692fa821590bfbc381c67cea033209a15a5dd48d0c783b89a7413b725114633e9b27f19b12f9979c825b2e45142c1c368c4aa91b5b4bd6f2a59c6fee8dcbdd72d0ae723e2aa974deb3c70af6a6ed98d04164f487d5c3e1e9b878439a3f9e200e2574bed2612e96852a6d02dea9165710f8e9bfa4f81f2c9454bca56a2fadb67237d5c15a04008dbac9bc32c6d47c2b759edfef4a192f5ccfbde2b78cfb0e354b21b134e2f422f8e606ec9a5d3a551bbbc068afa13bd5e11469fa06b5c41c1015aab21fe95865f9f2e6e8a40bdd3d53bf03456b151dc204d6ade1586d31b61eaa8f6f61d8352f40d46760ef9ac229c7a23843eb391ef7e024ea6e238024e6adf0ac2e8f540c2a8f637272c28b746a07f560e6bbd0d3487b83af2ae8036b062a39f3eda40ed596d58bd3910b8df051f45c1511458eff2fb593d3c7a4568517acd692a23f8089edd29cbe1ef66f8dd18e1961c47b55b627431c533607472f4b81ff6c6078afb5f15a4281a85daa982f93d91eb2d0d1d9aa837bab921a9888ec781a6d00936c220e867cdd7ed7037ee607947b5561da52355336ba55fdfea61a8f781d0b7b5ed82242f38514d391741247b4a1b4d8bba4888998c514473bca99efcc3dc9d88f54c1b414369f747552a0d9de3c88f14f8e7211a1165fefee8c577146b298867d95027702a43c890a0842d342c0f8b620f3388b8c99a70d5048a86a2e6cd601b04e65d0b0ecfcb34db549c42be5151324c97014294e4fba6054020963e17209dbe8cc1fb0c340759cdfedd3166e19e15fb2e1183207e51bcaf93d330e26aeda1619b39a807b841541a2d54b6210a14b8c8af4f42532cc28b4091aad5f58a364a5d30d17e5102f8c47fd651d3f5318c52e501834d8280275246add7b8229b5d965cd48753c0ab112cd3561ce52401476ecc5937da96089dd9ca4dff7f92b42cb7e9eccda079f1366aef31ba09ff3b69f3401ca68d575bf05c1f57860906bfc825b81a03b00b969aad60bce1629d6c5a63ca332af98e0e79a34eae51a58fa3ebb5d7779f39c4790034352f6ef6acc19c96ff2531453250b81d0cbc9e4546a64d57f137e05dcc32e914ec3ee2b6fb0406e4939a8d1be016e630bbe43fb91408d2091aafe34d313a9d4647bea3255f8c2ef03e6476c121ec5c979c584bccb5460ae8e8ad4dab3b38f7f55892541926127b6e3555d97fb85b1dbba78e982693fab0bb795c1d7938d2657d7605c06200acdf7a15cc93d56a5c968793db8e396bffb886da7d5ee1e9435aeb92c992d5cfa6e3b230a04819d78955d492b9e098fd5ab80891b878303afacd77ae3e56c455834a2647ea9643742b43f73f1713dab94ae62401a77798667d01360086120c82f55aa8d9ad3cd213c501cc6ccf1abc02e78056fed7ad6a4dbd3bb38e590d5c7406635a7d3ab55583a0b89e04012d40a417b22812caf15c5b5d8845b6c42cefd1e290035085802a6f192ff54c7fe25289ea6d3547334b99f2d4a0ada27ffeee9d01cbcb28225055b12007b84d3fd026be005fb8a0e40ade051fba18f27a42c469a968e798ed82d041fcd140c228dfb921bb8c457763b5d57a819f64b879e168aca8d7d7fa6ccc15dbebd45a2a29ea08894d40f02a8f54bea85260a2ba46f80d3a040483c2d6320555132d4d6e3b858e76a65e6eb22f080df83a600d09dc97a561280f891bba7383cf8691b059e1aa1a4377a2b0065ed87bd12d6e491a7a647f465e066cdaff8282571423b6f32aebd5e9c5b15f486e9bda3fdfb37f2e2c6df9b1e4cde98fea97c471364ed757c9596d5580f9dcbb897a0fe7d8e70b36c4ef9a3b2cf5059b2eb3a212805a09ccc37cbb3c6b44636f801b70546348bf3bd3af1c233610b771485767b804658981c684250deddb35c126ceada0bad83ce58e74aa853afa191ac02dc48a5195367fa32297e236b759d670008c25dae6d54c59d20e925f4adbeaeffa2772201e713a54d718f4ccc32763d9a9f053ad9ae6cff87f7f63465a0a83dd9f01e436367a3de439b0ddf0a35e681a68cdd3728571da8921c350ea36ea8650e615fe4dacaa07024364336d20c6093b51f272065a73fad90b250701aea7e95598ec7f7efd0b7eca3afb909cfe819a639a392b855d8a54f86f8dd3f20fec25d1698c9bb7bca682f953384391af50479a60ba28aedaddd2c078d10bc616995fccfc63df35f87b4a92e8898b80a81d7fd6ff4bb2a8da8d0035dee7af096f9a9d9b0ac6afad2df264907aed061daf1d3a38b78947e727098bf70f22a0e9fe69e429b517dddd31872d18379019493c75570327193be5b15a7d42a2854d373dbeede0a8e43c795f146cd76f1a241296f48a5c41167d3da722c0eed3ca1399f2792aba21bed6783e3441cba8986d3f9ec5fbadb603882e4c3f9a8484786245245a09f751bd104844827c957044971269d91a8759eec51312df587c167b302d1ea4abf475b36c033b0e070a119b936ed8e30c7335c9613f56c1086b2fb34e870a17db5752188f0c3c765247640753bdcb5a609977381cb0e5c280090f22bb6f0990e269c1027337695026b068a932558487e0c8aea421e5c18d5282a8199d5a50f089672cc67e737f083302fa78c78d4647c06aac4a3247dc93a79fe77266442034fd71a29c572c7c675c84bbb9226af821130d0a44323593111769e851e4d9364ab9f2e14a873f947b248dd194a030c0a12f1290035ff2f50db806bc0a25de519eaf36eb2e91869620f0c065655e6cb3f2657a532c7434a3f73c856614dafd57ff53b6390f11522e026634d408ab1df1f69e065219401e9aad68ff675e972251f5235ac9cbdd628381008a30fd612e69d03ad1af10a976daa1cfe26ccbf328fad0f1050e69b68c6c51c63c068807b19d06080eab98825b60063907bd0f623bbf6e5cfc72b1c957ffd6f2b2b5fda8e6595f70dba80e9689a422854564218ab7106294fe97747423d8c39d4495aa7936fb627a7500bcda0f1a295666d8f0bfa79455f89acb46be99ff993e855062c6f0374b75fff001318c249c063d0d0f547cbd9791fd07268f7c67e48b55853ebbdb9d39336c458d08a28749e4262afa0d1ab8e52862dfdee773ce712cefb9113871d19c4196b5e87bcca915d29cbf0c91f10a8bccb9ead244040d7ce275d9be772baab84139a3219393cab681b71237f8761faa54d483d687c78b7c83948717855564965e24f12f4471c9460a73ddc1a42c5035545a7a403591e406a7a071ed0a930267a473142b5ad7509d4819d59b74b0959a0f48f007c1341c96d75dbc0336659e6957d2de465771f6b09d466bceaf3f55e593d8efae35000ca22c55ac3eb638230ece39f0cd33bd853169cadd60c8a5dcb5e7cd016f7b066786adee7b1d2bbbdf4cb1489f267ba285af36cf5f2528a675821f5652410918b564e4b12832ae7707838582c8314539e2e995cd4bec05f04062f888bb378c25e36862b7620830b5b6f2a9f21b1becf8b0a766c4b4fca03d46dbe45e4bf44198359d398881ce53e6584f8cec4629bd2c733a1f0857b639871c47478491870364faaae453e79ca13c1a7f9bce754b7ca16f62779d295d10c0f9d68b0c0700cd2af03e457bdf0db5a5def9525e03548609cb049744e7c2b70293b630a1251d45f606d324268030df3731cea53fa093b7f7ccbbe8d9ae9e7e93d2ba1b891b8981df9f110dd10b0652a88b0f1aeb372bf826fe9a1a51605d8af9f71fa5d3e80e6226bd58bc48e5a42a2fa7336b22be44dc2e5bbca68fce2dca9927fa9b87c00db4d13ba8824f4fdcbc60ff21c8905d974ca670dd5c365a22652f6ce641cce48998ee64661f185e2cfc0e7cdc17b61b07643a1295d5420cfbe277e3905e66707bd9176be5281440b05601cd1cb26b84e53a00b70b38ab49b44b87bea7a276aa6214f5cf517498553ce5a34cc38fee3494693a354c7ba38e949f6eb70496620c19846aada9332bb40aec077700bb58142fcf9f20cf753d72500c68e4fec2773bcca0f787ea84311c412f02950e26e3c3e4a717683f3bcca656b36830146babace8e3b4ad739da3623548cfc532963f06224b91945999bece6d64c23dbe842a322b153889ebfb59f4d640ba56226ec70678ba9ad4367fd195d0bbcc70a91287f1001e109c7f58f83145c87cd7e716447b089d02d31f43405b4322b862083f6ce1648863e240d1351245a30e4574aca15aba6456b330c8eb6771355e4735fdc628f05c98144983ce6db7f107e08284e14dd5321920b0a1c75e3353f95faf87d1135f9592501aa5ac4f1cf7493223d45a5536569b7de767e9868369360e3058cdfa49b8cb549ea086ac8b0d19e114286744800cc1a0fb7227839601dd7212356b1c67a97f4b5393845e8580f7fbb8591e06d9151f30b7ad58c5fec0256dce4408081f2dc1eed3c1e73bbad43bd9330af2e8ef4b1245bc052d48c042c08dd6b757a939acc9db08db77146cd48418d485ae663fceee818565c3f5736bb85e114956ed7e3d0b7da0114e80f4d086b885720f01af3e30dc2983c437785f77752949791badc6ee148bc6823bd91658fee3cdb3cb5a9b9334b37394009ad9c7e3fcf52b207278dfcbefa92d2216f5da3a0637e7d2ada5fa09598d96e8f31fd401acde1e448ceb570b4d6e1c9b7785c6c732ed96c024a72ebabf4952c2c564f122ba9d3b440453a9bdecd620af1aaf80518a222e29c8384baf921dc2e0eca8437a0778bed25f9ab29c05039b58877e5c88d3cda8b7467cdd8f488502956362d003bc1db0abfc3da7a0f0b5ba139a551c1a77624e469ec8ed8830fbaff2361ad55182c11734516c65464ae7baf8567c8a6bc69b9fb04ef717c45dbd6571f098046206f45b9b705e2f6d0c3e9c2fe9369f79ee468d2370142c73a3d4d2e3f75ada9ae3b28dc095aa1397457f9747e832af01bcc4ccf876321a5586cc6c62d6c1739c9ae616ec4caa9d622ccd2b3ffff7cbdac0d021bf58d188e329f953673701844102da50e3118a127b225fbc91363398bd0fa3755881a13031848af443aa41a11fa3ab30007d9856e1a6967a8f092e89c050f4adbc659eef2d57e0a5486cd94c6fe5ee986cf7b518970716ff052459774e6ea96afbf35a838925413b467e446d31cf4d56c8e8d3589f3c43e9d587bf858ec28c1bf405239933130ce61bbd9173713372010eb216360401996283a92eac0f44a43ecc8d00829c67b1abe85c5473b81d6061cec196eed953a18b0963eb61b486991eb2ac379a1b523e43bf5874076f59ec94ebfdd9dca8c0b66eb968c53eb2ea6d484c5a11b8e52ed4a7d994dc9631c8cbc5684e2f46eb1f58e83fabf54d02a19557a1f200a273bcdf5696f8399b3f2a80843b1541bced6f1bc196f4c3207bf2fe590d1e11da425f5de91842f65edc518d70a201869ce6799560385bddc2acee5ab8d8e7f86493e6a04ab9d52518c44a4a101ab620d097b22be90a8a00552deab9c53506f1ef21b1bfcc67a83d640ee1c93de0af65ce17651ff866470f38d308b0c27817600e1117b684db837743e79bda21491b6f56fa57031fc83eae5c47ca4cb9a8cbb31e423b25f6459b0c74d81fb5ee6f79c904577bd557d736e2013cb9274033eddc5a8a88990e176640d9130e7484850999a7bf3fd16a86443b20e7c53a7a92ce0b7223e90512cd92b9bc60d593c15483bfda22806a45e5fb777526405b98c3211ec7b26bf8a749ef0e8ded593cfd6b3e4c641b4c53369229cf7d53b8065f82415880b464924963353c4dd50d62483e5354518607bf067916568322a2c6a5820f47e9340fe7f60488c3652a662d650ae98781d2f5741ae90c918f42690b4184424e731b8a8a7ed815443d65e56c6578c634130d9f10a1af6611edaa66342ee6a93c15f911958a225ec6e71866a25fce9749785e92b90762f2f1f9e4739f5c70bed4d86c528886081b231e2e255f09073a681cc5776f8ec101827533aa4e0f31aafba844432b58029826589d52ef0f3fcc5c391666fca8011c270ca445a5ea196e99c9323d4bc3389dbc160aadd28651345e04b3fcf5b2d0ef3ac073512347f15a2fb49a58af459d0e7edbc9fb356531ae9d0a73d4cb41d1044179b1279c687b7f86c6d7804349174906a211276f9b497a03f94be196331af07da0e5aa11e7f140ed2c4727509673620e9baef92cde11f90c735e31413462e0144c795e2147bdff5c0fee510a2fca85b058d0a516bbc5cb567646fcac4c3fb8e054a98bf9cbf93e29349b3d63814a470e7044230bf263807075ae3881f58d8bcba4c7831552f8fc7edf4db231ef857ce7eeb508d5ff74898b7f45884bf4698093b84394d0cf0e79e703eac67c10c6d20e1958191b6a89e22c18fc902676fd3bba0f175f7145d1ddad2311001d823f310c0250d19ffa9f28b80254773a8a44523aa2d11597a7b4257239d01676320ed71d972146630ca1d60a4147e78d9971151b069a026b9ab9cd63d83204b382d6cde0b9b6404845f8ad87ebf048f341026048e69976c7d1f3a8e51cdf9dd11716600ba0f4e02f88c116254e7f81530fc635bbee3d340345f40ae2495665394cd0641cd667e72128269e03da118f860e03e18970fa004038374867f7613a6c46e699fe56c6927078a1d378a70e436214a6dae434e9b40c3db24019c1ed197192a1a6d409cb93d4f56aa80c84b549ec77dad4effc21ef043aa4d83f16201348f7c2b50a62847d0d81a768401308beb22e86a9564843cac5e699a7fc00d9aff2ff4ea45dc41b2b328ed42d1053fd3b6801b202445a0935f76e1c5c780e2a88e457cbb98cf324f768b313ab701375403f3144e6a4d99eca7cc8a8fa838ffd39c9a884a03c1a1b7a4d6932d4c7fb5fe0b83a40062f07c17b8600b201d9874e6aef2b2e08e8d926ebf683935dd90e39a09e31da3962ca08a22765fa7d5264422d929e9951cd3d2dfa9f204c20067481d705a4e42680a809d161382e1d2ba8cee889b30b9d7a259234d8337474fccae2d5d064a6a340448e7f11a9d995de37d613cb280f455f6b98a1fa9388168fa0f0d41d7a7255a6a20d2b288348a80101cd38942062897149a8eb0efb2a70f29be53b71c553d19da0e235cf5d1ce2e4d239d9b6593514a60b03340e4ea148ef51d7273c037beb27d4c8acbfe558a7d56cb43a55435f80b703b0b41e77a6b593b578f5a021585627cfd617822524af2e4e320d9f455886cf8808e542cffdadfc364e1425f6b78a61148dc9c714df210e71e32d4ffd56d110c345362285a4e1f91c372f1a42c58e68092057a705c0fe61d2da4e8e337f2b432c11fa21e2567575226ec47703b9016117f002f21d066f5dc31dbf0179a9f7a6b6ad5403f98edacaf446ad5ce66f544fb68ea726db91f9efeb46e9a0989a7416fee681c7e6803c5e007dd44cfdff722069d692cce1106d069632931be6979a29e11b6e6033d9b136cfcc2bb71f476243a62c7d591d86eab7cf5bb7e234a02da35a33071c318d2839900636b2610bd2598d5563122a6a6cdc673be81321a9a28a307e108066d24b2af24fb9518b03a0d0c270d305c0d1d0c6cff063c530c4ec092c9c53b79b44e7ffc54d5690d9cf019aa5a394fa868e8daa600bb64f8e9bb0034109d0565e5cc048593bd131ccc61f2f566c8fabf6465ef469c58c54fe167311f0307d90314c30484be1721ec894fb45deada167a5d7b5c730b330b265ff6360739e377931a9e0a80bba189c652364bdb6486235f4dc27a18cda7a8b2170bd5509babebd98ed03cd6712c9d8d47eb478ca701162dc173618a116df9ec82841ef4a39e1cc35ab0aac3c6de0f0419f2b681011054d8eef15ce435b19c41d927ca50937da9ea1a820cab73f88c39c82a4bd4d6e015e7d554fd68784f373425344836a6dd829435cfa9db0e99b66979423648bf5f527de4fdff380ec19e06fbb59017505d55b3508296c1349d0fe2cc81252e2a939104d61ae5f5584c60f37df8a0691ca837b458ce7a9a0c844a09d254008fc6dc70e31e4298e40c46e23a47a2ff6ca2a1c81380a42d2f747c35a683dd40a6bf9c08c750e8639940ae0d830321d34892b187fb4f9a4c420c511ec29e75d2b4b3e7b45c212e60e72c17ad8340877cda5d1bb83cb32ea62b1e2913650a8126e0d4cd43855e672e9164c88cdad0810c97b2de23999fecfe0eb1840d677da171f63c2550f3c267ad2cc60f5c881b78da433f0853b24edb1427a69130dadb6c9cf4e5caca039e42349b4d0092152a27f7de2503583f38aced02bf2c2e88e13b3c3a0efce937c2aa3de5f557139cc75c84391208372168a7e43f0474695e9b8152a160dd955c50088d20330578bbb4803f7f9a811e25cd6a41fc7f1e8883f71fba2ffb3d4b97961b820c21a40b94ce60f84cc0c4ff89790ffb6fcc76736d54281e41e5250255227f3416de44f60920ca8a82fb69be1ec83ffe463495d541141a08d71d73f3db7372fb3bd91c27936303838bd8b4db2e6ae0c40ed8c509e95d22580f0c1a7bc9bcd6fae89fc4bb05ee1a2db072045406cc7e98d9e301b5640b246af1fc7ed7cdd74f428ce63fbd720317ab8c352d61efb2841ca55e1148e35523d95ce4dd0a11df4d774db07abcad56c819a19172b57096070b10ab67b18b284ff6aaf4b1507b9287d153c8b80807a52bb11482bd39711aecefa3c1b8da19b204d5ecdc827a04ae4123eea9b683df483020f9d56583f22bf001949670e2237341d2647baad636a02ea4bd6863e200ea45622b1fbc471d24cfc0f93c33412f83d44518cfbce1e256a5ded23b8505baf4bbb923dd521e6f7638e4d3bf81bf6188b72010e085dea89dcc9cf5d75e3344b6446d883f03085edf49a2dcacb72e16781ef284a3d2a9eaa1f1958d1a8887c620fbc0769a4cd9b98f2f65d0ccfd1b12c7f0b11ea0e7fee173882ddecfd90a5b4f554d1ad8a20e59397f0c5500ce789e2541b3aeaf721ac23df2b2c2e54b690b8c9e5e3eb5528ebcef2508f67c77462e1beb8623ee74226bf67521a99eef53a3ad741d5a31c3a570bb67f3cb08005f18b2d4789fbc37466ee7dd5afabb8d6a96c739f8f45aed26fad9a2ab5a6ba03b7a83bb693c963baf3f6dc935075f45407097ddf3d167a0567ec49cfe5f255d4c09b4be97d64acb277f489f4a2351c039979f3c6eb6a269f8da2f2a302bcfb9d191b0a894364be874e923237a3554d331dd14a28df1b67b7c7ad241b78b3374059e3baefc030e3b858331247a805738bbe096f53605cc021d76e5cc7f7701ef648e4fc2347fc66eac346d32429962c7cf53ff10cb8bfe3de8842fc83ca2856979cec9bbe3989a07f18a17b724eb0d88e295fc99b3ba310bde5dfd9cf3913d2d97e8cfc02765a1f544c096769052674356a5e0a8e12eeb8d24671a621aad99f2393b435e6b107dc8805d92430a213909cf1ecde65ce58db7dff454f12a6922734a55bf4edb953049cd5884934b45a1b5078e0f478f63e6bf1ccb15b84dc6ee5bbe38b5f8437fe560cfbea85aef706d7d917fb2e3aa6feeababf9583bcb1c085081d47d17382bb2e211801895a13a5fb6602d9605c8a443de68df77829334b5bc6a479db64ef95647624d0c10aaf137aa60df557051e8c7043d501ae61f575282837fbc2885a7fe1952e3aaedbc931952098698793b9d653f0935e1ee96a9eeaf0a774a2538c4c35977df18e11f4214faf7bea4fe9dc8c7a486bd890e600a38cbc85c6dda12029a43a9c0820fd8b9ee13456a82442ebf9d201919b9836cb570134000716d9ec96312ff43a8e5d13891ddbb69ea42c9b06f0197c062c9f1e5d05d1873e306a11be8e66dbbb5ac86352042fc1a4e2796c277463f496f8345c0a2495cf54229bbbce32d10ba614da962189efd7cca4899cc761dd504174c1b42e8352241aa1e130ba6a6b9e331d347cf6a66ea880b58ab74d9f093188b890f20cb981db1ee9433ac4c2c28bd5d9728f593e0e498c3fe7b78703cd5bbedf805e26c245511751931814017303b1fc85d4cc812cc7497f3b679558140237f0f2fdb77d1b14f7832379c2e9e014b6ab65d782114bcd393f4030bfd19844933efe372825d586310cd01ded7b3a4de645bf27f228e67cb4d3e2f7f67b102e164d949b15bf3f534be647523b9163d538fed1796cf8d71f0c01b8d5e98fd1462bfb75b8d320def9a34cfd9ad3b9d26fb88b5b56a926c84fc5f4a09b1f969af75b6e53469ebcd0f7732bdd52d6ba2196e5fe35804c189fded9464c22aefe0955ce82400a5a6683a7a2c11b3ea4e59e8154bd371b4e445855ec551484ab199d12d1d3f274540abdc3606cb2095819db0f4ae4115d7e9257037ce49606b3e2fbf65c5878375da2bd68835cfc3a6b5d0b6fc0788267ac3400780356143056ce05264b8604f9dbceb3626f610b4c37d1446bf7a054ad528fad1fccd9f777825d6d30abb4b06d0b962d3b95f844e9163d3273b603b0c2fec674f6bbc7fbdc82d31edf68096fb7031b243c809a625de7d9972e8c8438dbf59a95ad04fab4732d1667b81633d3d9d5c4ac8332d4e3480e5e4fe9dd667efbe263279b9fe5fb30372133c9f07f32f5c2765e5069ce7e420cdf26e6b5c6223fe1121b4b22f9dd6b48a3d4c2b8198fb523dfe4f530404e4370228a5e729c6651d3e24655d6e6d4c4236915dbc974134a0a4ba03c763dade7b80b24aac6704733b450a132ea3d9c36fb2862d6100908d69b2c815d59f3f25a432f0c8c2df3bc77160afc8e8209bd4ebe8934d0ada0bf5dc180743205dc760c8b57f86ef112f3e8ef3eabe8663d7b6446d077a65fbdfc089568e2b7f76f5897a84ba86d4424e94ef37ca9e9be5aa1f0e3961092fc74cd1a4369ace28424682e1cb227927ff845b5621da0e95627fd5d11a134325b7477080ef427c61ac52ed081e86bc032ccbad57c5ff0ae54668c82179dbe6aeac727567558e3dc1ac1b502daa073f13c4759905d0c4a591eaae7aef12e5b0e7d3e219cf2b98c4a83e6d45e47bd9ab772fcdcc1a6417302ef38727cc255ac2db3237d7032613f60394ab3638ad58657c9e9aad142124386adc55b631f843b1b5c1faafd6a021a4e7a2e6b6cb7c8b3edc6b061995ed52f9faeb190863a20de186e425b2bf231c49d5dc6ead46f21df7649381454970fbb4f673599bc34a2068bc941c86eca1570f1a9b80d56c74b21ad6a1f3d876c70863d45cbfe2b8653b915d9acaa6d62bfc3a5be60977293e96a84e3f36f10ce2fe1c8bcec8e5479f17d884b9ef46e155e06b16567bfab22ed332d0479fadc0e8f1ebf162c54d2f151ab78a89d07142fca37c6d25d55b7706602fefb6111a52530f23dcea6cd05acfa7b8e1cdae45518e3657a518554318215e1be30615856379d38548dda6797206b5713bc8e68c4eb93c0746bb1b83c96fef60ad48ef6270a944e4fd13bf5b727967da2d5d3709d2aa90af9d065c5f455c5728d3a58a578131778c123c2f8ada68ace717719a0c23c2341b5f33b4a4f5a96c9d62d3c2198d20884ba5d2dc74596335e5f34796ffcb29aa83a4156e5ccdfa2792e8b85f916d87698ad46ac418382efd8863cb3db192d24ffa20ff3319b9ae62915cc12f780d261a4835e597dcee382cfafc132a0168448fdc1a9d80e17d683c6e412ab59ed431fafba3038b949dd3a60902dfbfc12a28fc162031514b57dda77a680c44252443012d6f43ae41736b84e247df709b4505624f636ed4c99aa103319655913d22cd3fa0799df7fe11254704ee438fa7bb27e51e38418fac9c02dbc15815215fab0870f9fc8fab0278eff4afbb0c9964f439cb82d219c8ead018db44540ba3c6f2034937f58160b2b2e454fbffa818ae18e6dd0f50d0f431b38409ad284bd54459312edea151b82f486f6ed040ef138ad0515f7840494014eb6ecec7da32b011cde938fa18b0b71d7eeae0bdd510146eb07f402b5f23c9013b9540f2772f8c823549c55747421a86aa862fa0a6894ec47e96ff0d03bc884982593e839c355f1539d4d0887a72c2ce84467450dd536d0914f44979ccbf849cc2612374b3ee11fe1d0870f01651b91b9c5c4cbbcedec0c9864f2248bd07b27687ccdf73472c4dc8bc9fbdbfd30866b39ffc53c12845a3ce29cc0a031a2cb9540cbbaba9dbb2a81fad9af7c6c8a977dd94876e9ca53eb08693ad711f94b36a8d9aa34f06f960637bac8bdf3c1269a0343e763f77c42b6da78f771e9dcf0c5a9997b453d1d37adce49b43f03b3692532a04c0aaffae6319445286f0f0f837e1d94387f493124e09b0f320ce5e365aaa299882e4c31216ceadb5b9ee1feee35cfd5126e6cb1e2312703a3b7ece665311c1ee945284a98325c9507c3874e56bcb2788b8dbabbe57b4899531056f88dfea4fc5b2b2617920298739daa9004ead30339c2262426794a864d6d1f86d90229c943db931f285640a14ac774631c2d2d2b88ca954f18228952148c2c7fc64995ef39a906022513e0f08649bf159368c4078aee1b3d34de05ebc75e7295a5dee2326ff7634b3a4248edc76090a4cd5970a410b3b9e142e2c28247840386cc8d6d1dbf8448938849685cc58891a3ee796240acf95392e76d48f9330d6b8aae3dfc50a60e5603a465b468279f4b6143d3eef4a680b59190b0ecf116413126d6d2221268f67012730b2281804ffcf698b73c10c731aea6ed9f0823496da2ef89db360b1e73ae11a177834c08dbe5ad66ee7fa80a54e985c3de0d343f2c15fc1c0b519f390091fadbcec315011511aacd6d4d540f48facdb92ea4e4c1a21b2b81e15826d1f32c0cff93c2221a7490855104bc47e28fc4d97e80c729448dcd8b1b798cdb476fd3bfc404a0299813b43f74b4e9d87773f32ff7bbd7a65fa34bbdc51d8ad466a359506e51db1b52185bea75bc6afe39a608a5fd9e3f47afe0b7097736c569556595a5884a43210301da4ffc4e786722242938fcc74d5dd59eac5b67889b06d77bd1c854cd3bebd5bf44e6ddf961cf6f0b096e7dff478eb3807dad88937eaf9e569c1b1c55e8732cd0ebfe53f789f4ae8112b0ecaad23866032d5ce49407a3284ace0ef169271ec063b503c0e65c83b9fb1f79f8fedef9654845f20f0436216e61afbb821728321788f2aa60f699583563642caee02d789f0148244f38920ff1cc22363d4a3bff2325afdd4ebf5d1b1337733574d588822eb03138b727a74a83a4f5a840263f7a3ca39be5323594f1ee9832f8f3f6e19b28107e2f2c52f9320d0ca9e9dbfbfe1f860e2715a4762562300eb937218bd76d1322e04c73101c91de24c876d6c278db35cdd2ddb5013e02203dd8d10a445db5cb49b7b8524fc374deae17520e829c589ff535606cdcf6a2da475c410020c383fb893a61baf56f55eb82d2b0afebb3f435302cb66c868fa2134dae9cb244881c0274d0dcc367555ee1735d80b432a4530982e3d9518761f995231994888ea08bf627442775dd30bdffc9666ca1ca332fa278a682404dd3c5325728db7c06d77341bd65b3a664a3fc476adbf82270274b6e0e962f89cb6f1269d97c310f09c22181d861a351545460a9eddbfd1151fd450ba4de42001f1f6dbb92e58903e73f7df78688cd0305d458149c3c9fef130466849e286d22e86baa55d9e3c9192902d6671082bb1e9f7285307793de2b2e8064db913e63bf5caa8220b342d273a2a748291bc98364138fa306446f9e41ea50f2687aedcad3ba0094dd1f36c33c78a7ef0b8cea9ddc3697c771857cb1e8781041537ba39df89e5f673520a181d70cc5427b0e005894c413066c16719c3cf91558e09a6533e4f7874324983b3fc5a0e1894ff7e0ebcc8683c8cc82dda655c767691a550669e57b229bb4cbf3fd34f2f9a8b4125037c2a661dc22807bfc72ffccfb1802842241ab621582866441e328f910948cc59d07a2c9026546c5cef67fbbef1428c7faf446fa89baf7cb9c6d4f14e5145f083435e8ad68a96a448209c8cc41beb377a95595c61728111c6985c9d722ea66018aeebe67181001739836d0d8c8259006ab2b9f28883285c6930da6efada49ec03653af78b36ed0a94d3f77f084178f30b4733a9c403613cba0fbacb40084b2c9bd6ebf80f2b49f201560e9e0fce9aedc809ef6abc34f01a105d464a6ba1a0b822b82fcdc467a7975316076f9ce0ff0dd95bbdd7091b4ac75e55aeb595f5545addddd55d30dfdac7636f086d3ddb5460409383343675812fc6752ac7ca96eedeed4f8a9a018814f24b07cd8e8281ddb276f90d23093c70fac0492bcd00670d3e78454348a889bd65e2d618b68056b3914f8cbd13e191648ebb5e1d92e519419f485ef67b813efd5857b61047fa7ed05334244c5be51a50114bc131382ffdf2022e605afd621bda84bef83d69d40c53e452fb00777b448dde8bce877804fec62e36c13b22e409680f5e6a7c203b4c4e140a73e59207011241d5c46e6fa27716416bbe00c5e9e43e6c7908c3b262124fea7966c71ed8f288d7dc9bec056c4f4e62efbed492f863544402af1963e6069701c56f8bf623a0101422e30c15b4550a53304bec29b1068787b2bfd82781531cfc7023322c72cd3a7f4ef12d536ca5d7845dc2e84540776f997c430ede6d6c5e4cf300e3800c63923e67e8f2a484ee8dd9b64a5212681bc751535a0f76009b7670254857f890c2d89c6465c03a80185d6eec110193c546553f1cccb4dde2e964ff48905667a4dc90901aa2af8f8146d239421a57337a485731c347169a998ab0a556196f74902b672b606844d955da52fffb3c59e451b04f13dbf8e881b8656f242712855a63bec06c6d0ee51cc471ae341bd4284a02a23d0d254e7b575dce2b5325eaedbbfdd98dc4b923b57a215835a44a830201e20ddd2e4285df7234b7484bd704a6f4c408f192eb740ec9dacac3b7aee4d862bffcd78016cf89bf86be9981dc9dc382b57b3fe1a0b66bf05935cc5ffcb8aac78baa72a4366fa3374a6588f73792b7c6caca808268b8804d7420cdb814173d1eb95aa56269a98784b62ba411290555d73570d1bebd3b91df0570cffd61367890dc654890381554fdf2f9138d726f96507ec371905b65d3d4fd24ffc2b988f81eb80c70df09ddf0577c5323a3cc527a64006af0f00a93f49358cb7b4d1268d26d5f34255af49a71640bac1dc20999a14784c4e42ce8297f4a98e363512b6f079ce15d934c1fc42564f84da8d5a4277933523273e46a17991b3c5c3e421773a0d09e694fa252d3724a816edfe1228e13b557dc4f0ce34101ad224a66cb1aaaadca824e53c8a6c860c093432d450f8dcc6770fcbb32bba3ed30f3e7167483cf0887b19d2e104ecf0dd9103a42ce3bd3dbc864793c2f0aef980827cc8a009c9f60228b0a4643d2a599cd5ca2b8e079872701df6bc2c63add9c21c4e8a25f6d2d7f901a30112de81ec8bc15e23fe9583cdb7f9cdc770831a7ee9a868f91ab4a5416800ec9c193598a611a5bded19dc25f72ca5320d9f1390645339b04287b963dd625188c8e2a69dca8fdb6b42c4f408f6a8c755506a2a11454043b0eb09ad0d117bbe4a335dc0a25c4732b80c34e5373eebaaeaff18a1792d94c72aed200b0c6c5e160ab1f53ae81fc8429b48444e666c48de28278d2c5ac6fd083fadd598ba2f6401f255822f390c0af81895a51dce868dc4cb1565c42665291473870252e1d5366ffe12576b8db8af00506198a4f6276d928c3c590c66e15f8a4545e114bdf6e2fae5362e6d529e2c106a9953bad2a7d89dc372b2467200bece58885ee6ac1944f11b4fa0050aa07931703a04ffc96572a305c0637864d2c76196ec0b19059b607eef239cf01c3e206980e21c199ccb6ae877a78ed97fd35debaa253983feaedd088848efa56942de1e846c4b9a7c432fa6e5920e8fc06b74846bca8dcda4d73f68c9ae0706f1e1d0d6bd0c82dbd3080f273b2f3d2385ddbe4b2f626b63aa9520dddb8a35ae9cd15c76c2411ec20ffc8afc9c07d1c368a382738b5c1d8324bb04a4e98e23b79f8b40596e59809e93a23016fc65bec2cb1120164c63b3b2c8e4b9cb1084c15272ee9ad6a498ec367b00a9f1ce26326edf214758a41aa2e3453467c38908e6edf04c4fb561b671feab66c55f2bc3b77b8e7fc62ea94d8aad9cfa07ac0ed0000e560acbf1cb8f84a54bb583af8d6b7e69954c6ae68877963c675babf254cd8f091f3a129462a376927fc0024caef541f45020125ee7301181f552010bb449bc1a095a34e88894e887977544a890a1fdbae13106b2375f30e60fc133348815644c92ce400cf1789286ead184ae714a30f1689c1833b0127259d9e05fe59d6205f47d95810bdcadd8533bdac8b9c34207242347a020f6063e2ce068c018598e6655f778659a25098830d09c898da9f27b5234d4f7d39de7f31bd7185474a65e3e9f46885355ff3324fb4e5bfb03c7504974cc6cd441443f700070c5bd2fcaa7e2e148fcac26002bd376189d52081c8ef6b98d7375d42487246e22b63d83036f79ab5a94a233258ca8e534bb29548a0a4bc481045c905d102d4ae87d69416e8b459a61474b9019d4f80f0b12314a683503b9085f718e4084dbbba7de02087222117edab46f01b7521efda1270b3e0facee23d228d2d4a9772667722a7efad2efbb3107e1211557a1971a2bd274110c404fe943fe5f2fc0b45636610b6e5e5045f1d4e71c0a8a1672dfd247314115de7e2df07ffc2b116f6fb66557f374b3b6bb293cbbcaaa1aed63b06b74d7544b8081fd710422245e1410e54a2d0b1084039b723c6a8c8348ef2a11bedff22bb4f4cfbebc270c4c250daa1477938a71727f70f6778a564ab8ee851971582d229e6d4649a1218d48b6843b939dee4f335a4012acbb8f43d2c5c7a94a159cdd22882f0d103232d87090510ced22948ed9e9ad8488f3d54b8bed7e5021cafe84f48cfef0513b9246be7ae58d9531e07152c0b965fa2903e6115497394730495a0f65c40ed3a906fb7467ca23ee5a524eb3c6fae70fa96f95a63123fc4077903e450d835ac9663b62d561853e823c91b2d1bc1ff12e3ab4a7fd8fca240c7c8f3f7b57dcfa0a34b7e8527e76c9ffd2fe40407a9a44c21e725dc5601fd3c6d55649e3b7a1c20371aa19aa2db2eb1fa9d713dc5a517db33109fa68100d4dece10da595953463b5dabbd7eb37cd7418bde51219373edb91f745f1db87d83c01dc7a2641ce33362ca4f6689b13a3cdd098af9273509620591e31fa3d094a96e0428ad1eafd27cfbc60ccc51ff06e7d4e1532aad9a7f0e6f115374ea02ea3ba196a523303c5ed739f0395ae6ed03364f0dcd042e0a59b3c7b57f9f058d9ec122261744137d562e4bcf4b82c486aedc690402e14f841e465c40e2817cc4f75eaf93aa7df1a036971f02df1179380d284709643420079568bcab9e04e0cc56d41adb26bdaf87079e3ad7bcdae582e0cc0153e1235f8fc32a4ac9dfd1099db2c78182f710925410c8693f3dabb86a2d9575bea9f9d57bfbf528e5333072aadc856b241eb38285db484af11fbaf029406ecacccf64b625d33fee9c078c4b958392020ddb7889eaa09856dc3d7120ce8e8883c1aef1c0db1443dd89c7227571fff5dab5c8fd3b15080a8542ba90e2a0f8340aa182b2595b13c8dbe89887769df770203afb4b4a5b7b7089a2cd69b8958dbcad22b7b4531b0c425f368a7423f1d93f7cda1a56cb4730f0cf2f76cda5c77358cf0142d84b731cd3d45bb1fd794509b58fb61100a3dbe475e615cd1bed1bff2fb45c584f82c6e89d6699382d1b75fb17307ec43259da0c7106204c64cb44c54b410fda495aa4d3a5fef6751c5ab1155eaa697be33260df1f0593d5f856b900c0c5367b2acff6203fcb34520dc53b5059080658668a7494933901a48d353696b2720c99f153673ce35da75f490772be4d86a6223b029bb43a391babff282b9f621eec39567b4057396142cd471f90cb10ba1598185501bb1334eb468d16847d7eb1ff8f6009e62e6e29dc2602470a127e1dfbea82deb14abebd20fa30b151e0ded942a0f8251635704b2b1f08117d98275a83afbf4393f44acc951c4c1729ea918155b47cf3667443648b071cfbf4f81b50bc51dcf463d0474045a9cc7bc59208cca9a0e4d5fea1f4a839e3ad8d332762b8b370175d991b7075bbebb0fa67cec490728235510a278b80ac5d75d0446cf27c41c040246ece93bb9b84b3ee363bd0ac49e692bd1dc273fd87d508e24a4edddd6e4de5ba62453760b3d0cb20b5ff2d490a963837eea597340c57e7f27d98e84f4cf6af40f811b6516f645b785f4acdf4b9a5be372993198eed7a04c249a534fc8b091b2e711894616489eff623d356e7c7f37d9f8d2c2c8b0fe53c9e767a1a18da7e085dcf81e5194d1179fc91729f8ff203d2f8e4a6e7ccfffa8e4cbd08def7925e40742b1e2ffdbb729758b2ff692d36cfc8d2fdb6673a0f7ba17bd7483b97d83fe8d2f226574443264e36f8c44b1b103268bc872f64cf6d818bfd06792022ace31b3a9676dc3c6a8d44a9da567fdbd44234bffcc26259f61074d761bf5ac8fdad64afe65db848c2818d9693d6333dd9601194398b7977a160ab592d3a66cd94ae2053790df15562612f5510c28402147a8f9b7d2b46075fbfb8a1d322df011025347bf8fa9a3db5822d302fffe72024d25a7f5f7e441e84826ce3351481145f2887f23bf196ad0d7c7b64d1d4da44b28d2b49e3cb060bb499ca319a76d5d14fbcdd44dadd44baf5a146b0068f1b18fc33e06bb8ee3388eeb3aceff76c4741770b90c154ef7e324966f474ab3a3a4db383a1b857d3db1abe77002ab7f1d591ecda369f843fcbaa072225922933ec389f5ba71057606d7eb9ef3c6b27bffb2c82dc2a5bec5805e180631d8bf0d7145d39a32da242165cb1025c05005431870c8fe9f51327a8a655dbe3109630c9b73f9c6646a4edd98a87122acbd7c639204dde19d2a6b8b13af4952d358a9c952d3eaaf622adc9a44d6071b88c95a3f56ff794777eb5816f1b9f56bcf6cb54ec6348d6ff588a6f1259d40358dfbe3b0c0e4c509e49152154850a04032992a83891326794292d3b89671841189c2936adb82d5a5443b9172c291902a41cfe532527cd1c2270382a367fcb49be37ed92f03720570bf396750f7cc69ecee2cce833a70b2260332c51b803bbddd89cf198e76af7550bba27ce675f7a26c53778f4d4a1d8c7287e1ab1f8bb2c476da518f0a7d50abd5af422022a8d72b08f206fedcb3bc3b265660ff7821901088084aca754cb8739496d179d597f0eab469d339ddebc4be9476ddc81c9cd94e2b6bf5fcb11e9668c5ae5de7e10fea633705fb879fabd83ce3be9b3eb9bb6737cd6233cab3d9cfdd45adf507b5b95d5b8807dd46c830b9e5ec6663466a07a5225630810f24103650854102136ed090387ac6e3793dd7f3b9def39beb3df5be0271bdb7de094d5c8f49520f6f46852d6733e79514b6ac7782b71be3764fbb9b11d4ed962cdd58bd1c4797a04c509a047d6b74e9ad04272e3501874b7798519bedbad35ef2c4bc99d7d48d84166e37173103125fb515b453c775365f6c596f361c6e77b5ef657c2c96e8ddf309527d5610ef6b4e5bfd1c328d8e30e80b70165be5ae56abf7d140d58abb5aadc0b051ab1533732d2ee1d3fb5d61cb79f44cae64413c25df7bcfe4ea87f08e79577f01ded1fd8a7ff5b38a6b897734e0ae1e0313a8326df5f60ae6e2ae9e278751e31cabf7c42ab2d3ba709c396da50383fda7a0d8b1c4d50882b571613ef629a7d3f53cefeb31bfb6be1b87386da8eb46224ef3be882ced5df5cf825aacb3a967dee78dd3d6d636c1cc313df3fe6b8933298b30b6a00eea99f770aca5b21e8fa6795f6b7b5e04664abef477e3ec1d4816a4232a22bbf149efc33276f597f59fe8dd668dac2a5b4416917776d7880371effd90ce9ba217fc0e59ff89327044b28190d7c0ffe31088ff37d67ae67d2982dbac91720e6addc31eff7d8b20f4ff58bdec4773b7bf88863f7a649e8900c8bc34cc80def6fb2c917efd958f9ed5f78c3887f7def760a0b98469de7b3d3d3a3a61e8bdadc2fa872112b6a4b567deb7f7b55a1b8bfd7b4f7a1fe479447ae67d8f437ae679de74fab8484d61bb5b670a3b9178bcc36f7f03aeff171a31adcf7ae6346885810f1ed52bb8a067b220e0871f8e4abed407471b7320591025e08763cc69fe65d1a514031f3c7a26817e19102a03d2815284bb7a769ae18fd5653d6b04410684459f35faacc6190642ad00ffae07ebf020ae9f8e4f839c49bf3cbc0257478654ecc7df819a7227caf86b2eca38c6c3d618fdb2b2e0d87ece40747e19577d74ac81660b484ca02e7d1c411738e598615275e90b355093f4b9e66abbf4416a0685a64b1f4699997f7819716ebb1914d05c2ad54d5ff8d8876dcc4e8fd22e8b8a6e1884ed9fe237b2c81ae90ab3b9db6b4305d51e0f09f1e0c6502d5b2bfc696b20be02e9288a8b31e6fab3d3182fdc12bc33a9cc1846b79c59e6d2640a29978973bb334c1948d79f6a9452ca71052c0e79d0330efc58347ee7abd77969a3fe508b2dadad16d4b3e7ef302463ad03d5da5eaff5ac5bc1cea32aac078a467a5684c8073de344f88478f08d43ace79210b981e37acd80bd5bfa6e8f9eb48458d76b060c89efcb520fc6a19eb91b2ac4150bafd8210f7ae67afb3fafd073c422fd43dfc569e4b2e25caab9bfe54b450f721a0b475b329bb02a41495382953652c268d982f4a22f51423469220b335d7220fda7cd7f1ed5f77644d9d0ce7fe9dff922928628139aa4ce17919f8bd3681ecd273ab38a536966e9d952cfbcf46c476452e74e5b151b547b63f9cbda7cca691d7e32c296f6520dfa6dcca728f39f398dfabfd344998f19d01b74bb2ab037b6ac2c38763e4d12b8a594d6590448abdf222015dff7bf298294e3e66a0447faec596e2c6397ce7f4abfe97cf7a1d60a36adb68e1606b3f4bdbb9cb76bf156e0e828f3efb9e5a4742c02bb9cc38ee9764072c1f53109980741d07229801c12ee26a126843ec45631a7f15cd654f36af3e5abfdc3ccdc014f2a266bca963400b7d4b9f4c34b9f63a018d3f827a867f3c31e3221ee7fae00eed852585338ad74fa28fb41653e39cc800d336dae7f5cd1ee9ec575efa27763759a103bcdae714b29ad3a3b701c0569ff709c531f8b5c706bcf2e801941e79c1346bf9f07002bf4530a8381305abbf8dc9d79ec99f3babbbbad53503ac5cca06f0fe7e0ef3be9734c47d98f9272dea6f60f333ff72c03761f15503d7ee7eff8b9919f8e65ec7bc238077bf1ee2667f371e7b3a482b88984de224177d229c5371d69fad774ce3941ea600f7f5a7f0bcb8d948ae5fc6f2ab940e66a79b49f0d236c0eb452aeb3b0505358d6ce3044376b88d1e4564b8410617471cb1a1a0b5ad13ad82f0adbd374c2b62e970983cc741306936b61675c2e138615cf210c24aa3048682dd66ed14e582b0525c1be9ee891056ffd643f31dec5763a380f5978b0b0cb65c0403203060974056bb7486373d47492ed9a6835b69660a2b1ac21dc8c11a30a8716aaba3499a173a84aaa42aa94b9daa95bc690a8d6da5aab8d223e37e80d0b29c8b03451506b6f8c78aaada09542d5a385172ad4b0f224ab35362c3c3d8182532d41939d18623e44d149824a4a43c376690186b453ab5a545161462da856415016a92c533a560b283954b0382dbcceccd8c2895dcab1e2c82543d52b4d0a2d298ba64948e5220205f0c6507565b0b52c1926dfc52215d65a1827ac6a2b68abd89cc65fee94a42d4cae962418a05c294d4d52b85b98ca6441020ad78a129c2b546d52b854a29e787295ce98e0688625a7717523440af70a92d3b84abd056bb531ee72992f9aaa5301d2d0a428ac88c28250b40a162c81ab605f4eeec47e3b3492756d996b6c2885ba10850bfd421450a2386182615763f8962e9c06cb519dc0d629bac47e507411760595c60812a0b88101c5081ef00553a5ccd5ea5c2e2335c68ba95bc67098ac3bc722e0b53ef773f07e1c38450be3a77b80cb41c0726a05f70b6dabba603776bf1ca8fbc1d829a653d2cb73e7580476ed0e3845bedd8fc68e0e6cc68c1cafe3e87417643c96492ebf8ba114e7e91aee314a8363dfa13a1eac7a10a533669013cd61bd3e0bba2b6c852ea63fd46dcf66157c59ff725eac9c953b8c32d39e554fc7c16e8772de153b9fc69899dddd3d8852e7a911b393ce3927fde999053da70e77e74139aee752194f5b40a7ccba624f29a5b3a9831fa8cd9733695bd0b3a78e575b8f0a75d1164729a53476e9ec2ae831e59ee338fafde41ceeeee08ae551a93516b37632b347857a6037e7c859d03d7bea704ac7d2dd9dba6acfdcdddd031fe53caf2a0b8e070eea639f150563ab1779c77cbb81574320542cc74b6d776fb9108805c41fdf55f63d71ef3c13754ba63a6344a7c9ce57ea9ce8bc6b4309c30b1f818d5dbe2d1151c5be2edf969abab664854a73a51587a30a83ad71f9b664c4c54d121824ae3db14a194aadb666e17d395aa559a1637aaab5faf484ab05d52a08b261cad3c10a256f70ea6a55ca14b761a93e69e184aeb682d6cbcdcb114de35b565b461426a59b13372d7c89721ad7da2e148ca88862850a13bcd8d8e5326cb078c226ca8a5bb593c6fe6b7316148bcd6a352a2817c8e3d39626b135b02d5114c165e9fa8f311c5e8c10b3644d0d71962e000494119625bc10e185afa045cc6b8b2d4c06b8fe62e5b2420d2d4e2cf1b6bb8db89d658bdb3cb7bbbba930c02dc12c4a542d5eaeff8db0875b2d5688dddddd3f36e805b7049bc822c5e9fa5310f6f0ee26e0d0a8dc63178085c9f5976199d2b932029e89e58a93568e1bbf8254801a31226033b4b9dddd1f8b612913d298cd00c4f5df097b786c4b163a162060062334b12231532421c4ed043558407591963565b88102e9062dd690ed485baedc7e0cbabb5d57aceb8dbb2bd9aebbbbff8cb0873f54f7c48086013240b9fd3119a66e7fce178d8902cb161be0980083141650f1e2a60913ae2cd1054a112f7e853de8b4b19f710c47b7df4e31d50215292c249139019c2b965ca9a2061bc63041baaba094b4e3d3e36c72603d3e382ab062a5092b5edc7e1bfb59cd15f6e82034a0090a704b1c545a38c0ed1b955b1519aa70d1a36bfe4db4d4d072777710d6e30374fbab8dfd9434b71f9cc51963899a2e61de4c654196f68a3186131c23a0d06051854c618b1231ef41a3644fc46e590114495392b8909282142bf836e506830fb76758526345dddfc240e5fa33d4f5aff6d62394a46013848116e605bd50c56bd1972f9ea67c31e2090e932c5734a9c0c31299386ac86e7f727b86a5dbdddddd13b382612e20dd0a5cb8bd00e5c678862877f7353f36b8099f16c230114585285e6effbbb0e4f6d399bbff10dfe2745de7babbbb90283737464e5f7112b7c4b1c40a41dc56288205292c748184c5edef1a0c168618465cb230d1850f0f8822830e6a96e0c1cb15f27dcc772758c690ddeeee665561cbd8f58172e5ba1337a4216245d8128c01b1d4046ffbe0b8fd048cdb686ea760c4edb7586e7f4c051eee0d4a0bb79b8ace0550d13dbcc359cf3ff68cdd5d47b9ee2637ce5bc5c9016150e2b8cdb7073c79d03f2597b9fdcd0fe01d52547c0ec214c03b3c870d0005301d0682b5773c7b08715a7f5490bf106f162fb580c85d4f03053508e31d7db90c2ae21cfd2e2eb6e4a80ffaa73d1852442b655bd7c28a861a5a629eab56adcbb7265f784dd42646e0e6890b43a869c225022d98604b1546534d6150c5c8d0700480264a2618618210b7a937604c81c416494e609001a389362b4781474fa8265f40b9e9616a8c0f17332ce164b312c5153fb4c82c1d11fa518d799180cbb726656ebd7c6b32825bc69ed87cec535aa021e68fff84dbef8ae21d0ab83dc4b4fe3ae51b4bcbb3cb6daf7a2cef59abd5fb4bc99613a9fb22b2f52deb4621a3a59638957e78bd6d7d6b24fa22e3a0f5af1f6a754fd41a875a6f47a2d6f8484cb6be35ce35375cb1658a09466c36b2e63400b8c0e49710583d8084ff3df815012f2b047ac10fbf13cbb22c3f0f6e47e4769fe41e212a715cefbf1518f6f0efdc4191ef478ff85dcd27f3c81ba7d19b2e0aa69e713fd782f5f76173250aaa137c886a52c49466e904b715aa3cd1a613bbce3be69ef54fa58934935cac96096c300606e13aa57448ff34d03c81c947118e6a52e5960c877aeeeeaf415f9780734e3ef62919641fdf7b2a8250cbb8f3e96b309f8e17dc3a96fe21cc4bbffb221741a17e21fd3c7c6cf1b10fd1081620918313f9c59ffbfff1b13fd6cf950b8347bf8ffe5a50961b98a524b690800826c8fe7243e1cb104da8b238e98f1161220b962a63d06481e2a06aea8423c0d8e2099208638471fa410d12562c510123b6f850556509a937fdb17eae2f19ecc789f54c1a2d6c643721430c1ca87210d3448a871f94c0624910627c60c1fead529678b191b63fd6cf5589f91ff7ae25cb6af9e8adea5b98d7fa5abd5668a58e21ec60e1228606374cd848b0068a232dd0b839825af3926287d46a6d2cf63f63a91a4b79cf92a2993c67baa160bbec74f976e4743f26b27c43e176f98602983b5ebea1807487f48ff7f33f2052a47f72a6ae9bee4ea69c237887f7b3c981603febbb96ac1dcbe9f441d3261c1a36d81f395fc7399936e8bebeec47f775aac1623446aa4c9c273010a2cc0d66a658f2420b930def58c23ba27a4ea8fef97eceffe6114c4c93691ef1e4eceb82c296478cdcd50842ebfd5bdffa722a7963e97d9984ded5b7ecb55f6badb5e6884738e76bce1802bd762c8d5c10bcafa5915b5f6f73d8e9b74a3b26a1d7f5ae91486b1c12126165feb2fa3cda9ec194ec09be6c6182282a18a8a64082864a9c2b2cd460050a8f570cb6bce0732d59ffd796f9d4b4f9b53ed9d8131cfbc43721c448b1c20409d6984044820e5a34bd6042959a0834d08c9fbf5365cb2217dc243d9b457a5693fa03233debb468c00460209145102a7499d920c6042a299449a18a0f9a369fddd46974e79773f2190fb930403347542404f1c48c9932264c1d9d697263b4c47c32d289457ad685fdfb81164050c1e58d91192872b6d1028928553fdcb4d040ce9f4fee23c7856da630546f9cb0d0c55491162660c8b0a2855219241420872ab62c3b64f10517575c1184152c309489f244066af022840fb63064c842ce22bcb899828a2954472e90f3871069a69ca63185898767029f418de75c625f0f35e8eb7a8fbeebbf09d610ebbb44efbadeefce57917b4fa4ef12fd4e29071af22342cf3aeb605e6ca65ee394727e62ea5e1dd3eb4582d2ab6302d344c6d2989e0dbe3aa6d78ba1507a754c609ac8981ae32f15ec7c42430dbaa73d6b0f35f07fbd46d641b2ab2fa78d055bceeee7131f3b5fd6cb7ad6ce043a23fdd38d463aca932f71726394d3494d7d3ecd30706eff4cd33ff3c9dddd4892468a2242b39952fe5694fdb0fff68beeb7d3344ea69e7da8e529aa6748f535bf59457664cee92deed945ee4327cb7d39918828f942e3794622b2203c2f7bd9485444f28cb1779eed3bef772736b2aa6ccf53f0344670e7679687bdcef7e5c49db10261790809e2d113b881468c269287e3e197fa1023d0b32a4c4debaf33c6f135b2e959db2a6cf752734e4a458c100f7ad6423deb6e40144ece74a391243d6bd047cffa2718a15a6df85233212322f44f2b9c4d4c3c2f0bc2a3c32041dfe1908d27d2c6587357596f3896965e7eb20dc99e67249a5e2895e144ca461f11e89f3a4e309e38997ad6dc65ded14eb95b2ab94352e27453c54e2687b9d4a4ea9f55fd534af6fd350e83f0780e83c8dec64824eb81e4196be1101701c60c4e1f8fc824052211911498281bc9f33d225108c8f08194fd37b929d540f30629becdfda4916e73d485fa87fa85c489739b491e77f7300847021952f61c0eb90c462cd9c82007e2f9da6d9e1853ac5feafb8eb0fddf9cdebbd75a2ba5d5dde93f3dc0ed91529a0365cb22b0db8d429e5e3a0afd9303894ceba71dc017f0b75fc8fb85385587c5c73ee5ebe9f687515afa3e2b4e201b9b645eef0fa13ebd3f581f8ee5bce1cb44d9906cdae2c07922655f44f288b2219ea7e02918897c882079be88fc78c2ffe651d3fa8fc02afac36f1d9defae1b4bfffa9e58a70efa309df7b0478555d853711ec1749e75743e1a3bef630922f50f12adac6901ece9581601918ee897f3e8499d1694ddd7a943e775ead39ee970cf7490c43a75f8c344d6d4e1df61067e69fc0e8d9838abe01cf593e951d1df4120ac441725ba5c1d2c6cf94ae2f6cf38334ecf7cd671fccb09a76ac601c19fb4c5e99993b15d1f2717395ed809878b7e32a7de279ba3fef1714af16d775bffb4ecc7d3f57146cda7193258216e7f974560f7f54f13caa594f3dd3f859843f08e4904ef288277d4ef9f46f00ed8f7cf237887cef74f2478c7cef74f12f00e1adf3f93e01db1af319645b7c6bb484524b422e1de1391788fa4fb90d447027b243acf9c634744b2f3cc39688848683c738e988824f6aa21badec5d653be34ae8ec81726f2ad9c4b94f953993f53efc836c5f612cc0a1bba75b5e8d847b62a6cf8abe7e149e65db1530d2e9c21655a489e9d55ff78d139c1aebe93fcbd7bf7de7d2c3defbb71a8672df3808fea01113e70e352af593cb197ba14ac37cea5a9e4855dbd4c24eaa86411350449340217877b26a303c9f32c31961b874c1d1d342c00047e66666666d89335d3c2ad4851925617049f40db486ed26ee744197d4e46c70c486e3c0aea9acfe893dc7b7f142339ef39b1bb7e6449ee3dccc0bb3e86e0970b08b8efc4a34a72dfdcc829a185166fde903566a9fe8398002edf7ec072bfcbb7304c8058719d47415ec29bb71178b93c97cd2c41e2c62edf7878c303d30e5cee177ed997bfe7a5e276972321882bd280cfcff18eef79ec2e10ee8221d00bfe273ab9475c17fcafb3b89f63713f6ac5fdb836f7eb40296e0d351839baf2d56ad5abd55cad56dd6ab55aad3c9e565994e57e7fe361cd6589253febe9aeba58bef1e074fd5725b7bef51bb44068fe72f55d587a1f7e2bf4c12383d5f758b5c6927ff5ab6f3c8344e58223738eef592ce7adf469cf388ed2d583b07a07e232e328571258bd67b0fac6929ff5cc12fb57a57ba0a832d36f766aa60b7f294936e0cee7f9312166a55ce79de7cdd0051732486182344cc2d860421b29e09c20660c18b7523b8e7a0541170871db610b0803ebe5db0e31543163ea2c95d4d393271eeaca46a582102a64112285aa1f3ca030a0b0d0a204d5cb59132c985239fb40a71b3503c31466924c3003c3115aacb0c0e10bcf0464d01c523a3439316929c103992892d30f950a0c1028bc66535803b0915122892a1d71cbd9cae6468b2c39359ec2b0e03ddd30c5436d2aa91e8c563d5cf921ccb1b96d8713a46ee862c48aa98c1aa419948b36a55e03e9cc9da05315b79cdd7208e396c3d39ce01a3bbf35a0b7a508e0e2db3d151dc89f8978c7b55615eff8b9fe1da882edee27ef587db953b67a26adfbb2bb7567c633f98d43e013e53c38ca58b47f2a93bb12bddb610f99d04ece7bf83d117df0bf7168e7734622ff9d5f89f5d6e98a0a67c8581f4482a28c350ab9d2b8a06a2ea823b38ccbbd275a26fdc36242fba78f3aafd54ceec712bdff6628e3e0f5e04fe0f5e028ab13b02faba38c03f0777e08fc9d91e84b7d22d74e6b863d8e0099b77e8f9c6789dd65e5789525047e074c824ae8831f641a21068adc1995f887deddf921fa3ba38c35e42f638d320e66fcce0799f13ba3922f433b9ff34a68fc8c0f92b3c3dd6f47941d41f2a3aff742b03fa2015fd677c024ec775e2644e3651d3049431664e75735a779ddaf667c8ecca321cabc51c6018dd7f9203b0f1b95c07ee77546255f8660bff34a749ec633993303a6b3436386c8644ef7751cf20fdf13bddb39b1d35c223b8dc996c8242832190ad5ba23ebd353ebe8833f441f2487fc65de4856a775573a203ea3340618646061028909b27b1f0e5464dba2c58a1cc0f860860d59b4044a1b3143309d41820ca9c3062f360881e606259248fafe6051d761095e5aba8d88e872869c2f429223dc8837d5b4191141687e9d1309dbf76892dc1b9de00092fba3497a6f89be0c71ef7de78d44238011a20699506784182548ee4570da1c858c386d3e3bcd5f48cfe67c1895e5be7d2c2d518f1c6583192a2588e28964b6ee4fdd0b949d73b0b119cc07b43d5fddbd67a30b8c6d06fb87dee6cb21c5d13f3e3af9827ccffa6ffc1c6c3920d555ad9ef4c98210cd2b9848d6af3ec9bc1390cd3700154964002af2fbd5cff96d50455414412c45014206b2680464c0a084449821823022b7c0e2053171a8c0c0848ac40085a71b94bcb0820a2cc87e1687c3d39d5dbee1b08403d5e51b0e5237c7e51b9318d7beb86fadb5d62fbaccf5c674027ef2daab3491e370a508f204281b6a706a2f94d2d87c2a0c972724c88f2eb146852a0e7491d14c99e2886cb1070592a8c3f4108313720430cc9935443530e40833a2481f692b607eff60420f51648b0670437e1574712ad1a04413d9a20f11e4b7a26a93c4eae20c9a339f910d51648bb228c80f045d6c1a72f09244b6e8e304f985a08b73c9842826b245bb84fc5a608b4c4607d245a24e0d1167a2c8119cec9980f99f8bcc0c626c648b9f17e467cddc82787a812eb2102c5051912dee38437e39335a65d13d0096246c648b4c8ed0d369f85a1462ce9e453d43288bdc7b650410fa34083157672cff942a1ae2c8f694298971ac5f5866efa3cbd9e0dce7b03363e7730fdb83b34235da30b1e1d9755df71af4ed5e533aaf0525c8907039296ed8c53ef71c17b2e17e7429285977da338e653c663044135104780ac240c883a9cbfd646ab3e496175caeea4acdeebb14942e37e79c34944097829258bfc30dea8719ccb19c7fbbeefbcbeef9a36033375b836eace3cca7671c0fe7de87735f73ee6768b17cfb32e67ef7dc4ddb13eeeeeef475ef684ab949bbfb09fde9eeeeee66a7a9fc94525aa78ffd85bb37a5ceccdc49dfe7a6bbbb1dcd57c7e066116d41cfa9837bf69ebd5bc0b37ebb8a3501825cda4cebea73d72ba6756fc12ba8ebbefc8efee8deeeee3e99d5e2c6d993e7fcbc8cd9b7bf7412ee9c73cec93b9cfb865b56126e73a2f7d4b339a38c8d7370d3d96ddcb8c1ea98f8d828d3c81c9d143413efb0d1751dd7c3b4a05f8712ef293efe668fb67fb81f521f3b1039c98ef3d7ed27a70a441fb3103fa4b9fc968a356297c68f7aa9b87375ae27764c6b21b9fd13a4549c713f0fa462cefd2a48c5d7fd562015edfd5820155df7035bf703412a86f70b412a82f76b8154fceee702a9c8badf4b5cddef0552b1de2f07a4a2d7dd0f065291bb9f0e48457abf1d908a7e3f1a600c94c568ece8f0f0b4e85876d77f76e26405783fc723f3ef69c1641deeedb79f7693f021a19fa4debe1cf5f99cc3431ee1cea7237bf34fa52f4fbcb8e9a0adebcb98155d62d115bbd62fedea4bef093e4b2cebed0b8ee52cba3dbbddd71e445369264da4795415876aaa7b62a8db9de982bad9ed70c4ba31d651fef1be8a2cf108d1adeeb7b6d789653b7512d599a95475bba7ee7978774484eb7d39c211ef7a4dfb36d775cf608572379f8b1b487ca6f97ba27341b39bbe7ff380f013cdc753243fee2f5528b89489025fbcdcbcc479c1d23b479ec0375f1003cb9dcfad3897a12edf6a58ba9f8bd3813d7fc8d1b208ecd60f599e58c44808fe05bfd65c57ac4b8be9a569dc735e6a48bab4cbb72e6e3478fd1ccb0b0010c5e7accc399a1cc8c5168a9db3ebba2e27a79bd35f625944478489d569dc87455899f7ec34d758dacb4f361b29f346a1d9e434eea793d3b86f7df8dc774ec4f00095c58631481046110e4c6080c325892d504cd17aef3bd11b79625dd8128aedbe7cd9eb5d3f2f1565afa76fffabf54f7d4fecfe7bee71f8f4cf97f3dce3f8be097edfe7881df6c8f96ffe683697e595de7f33de8b6e92be33466761eaf89e874fa6727ab9dcf4d233ee91fcb0630f57f82e916f4b2c8bc0a697315dcea5cbfd6cea64b07f955853c20b2970e1248a0f24f7410e8463890f5f5439824b123190dc3ff733ee75cab0e58753cde53088800edc0b0d319284af074586847ce0bd375a8e2582d0acef39d40008eb57af01eb1b4bef4398ab2fea6789fd9e17eb19f7ae2ef62ff09955c0d56e9472f5cb499a5bd6cacfd5cafab1ec5a6bad95c5fd4a3c32c2a52c916f157a213c7c08395003902039aff5ff566e2cad5dd52a2484870f5617de732cd628c6bab0657deecbaf653726a1973ea780eb44f38d0c63a2c811c023294fc82ff4bf2762568277139eb8c1cc0f56a6c0d9610510d4608554972653496390fe3fa35cba44e9f2c4b5c137c14e9c262029e144beb2d892a9849e4098a38c2ed97226d53cc96792d370bbe54ca261ccc73a4358be7539e2de5b97db9d404cfafbd3530540147e32424555a9a8849e2cb3755b73a0298569fe33d08043cd81980cba67923887bf73c0861cd8e82003124b9a901e8124bc30a2ea852e8e4640fa1b1161866ab874748e487ad07156e9d94cda5963e79733c969b526d62cabfc20bddc7732ee396c7dad7f64e0f3fd5c63cdbf9a03f9b4cf133e3e5ae2acb3f950aaac557de3a316e48938663e65f0f0510bb230251e3e6a416077493a5458e71d3cc5dbffb7fc5ad0cfb8284138ae7397431be33a6fcd81362823c41194324360412211b065cb962e3d40f1e204b2ff672dd85bfb5ad0cfb828dcddd967379df96b2de65c53cacc4c9d3633e7d3bd646666160cfe22e7e0afb5567ed91aeccf0f02a5c1724efc2bc2ce7fb5a14c3b26da39ce1dca0aa7d6da1ff297729c3b9415ee1ea64abbe75565e154e41c948ad73fcf21137cc69d5c87395d3cfc7d74ff5023d6c4a09e716dfa70b9f1f781c3471e3e4af066c6cd7da9b165edba19a8ebef5e637f1f4f4d908943068e25819d338ca166dfc66828e185293053aef881098e4c950f54555841440ae0676bf383e6fffcd97c9d37cd6c2e37da6f96899a9579ba7396a972f956e6c905ba7c2353c29def2301ae7219bb1ef7fe1c97840b7b508e725c77d8a3390bf6604bb0b3f361936e614b4ee2cea7df3d27964f574f5775643da54e95a5409b5582c5a4bcef8e78196594217593f4adcfe10fef7abf128f78b78e471cd025e9dbceccea55d591cd35df12613f0e82ea06dd8298ba734e99103b8d257467ef3416aa5d22e0cf6fd67a5633eaa9396df66cbef73d9b73f2e8a060fb7f358e389a6c89a34cc2ddaf2088c7735741c31edc536f6c39a1ac9e2953a6fcb44cc2b15816a95def9bd2b954452525e5347586eaa98a7e3963e6a7ab23bee2eea7fffd7c1e3e6a4135e6dae59c2eff27b247f465e87bd648c4fa8fe81b814a49e8f2774cb7f96e40ef119f48211c3039c42a80f588b19fa47b60310454008e512b6869b0e5ffbb603ddbc1c6e61701679369013fb9f404b674c0edf7672fd681d8a9b37cec537ab6eb5fb9350c54470f7a6483053867ad23f8fdc379699a3f983ae62684737827d5c169a04ec9a9fa87763db7eca4bacea8673e6777d4d97af6e4409d94bf270e0945c081be69527ee6cc7527a7a0a6b263ea51bade52d7a9d8b2b3799467eb9c7c9f1b3b9bdfddddddddfde7f5b11472fbccb7630053001d00669f5bbabb3b05003776a2f7f5c6ca068b82af0794853cad1aae98a5f1dac9a99ed35ce7bacf80c166e8e4ecbc68d898ab468b2794813d1f052c1bab1bf53db11b3900501f0f400b006466e6010c400001f001c028fe0d1bb3164c8d99139e6e8dcb664e9072badd7f3221906f4c94d10f29a532fab3ef89c2f78862e317915df7ded7ae2b83389249d797f57632ee8538ade346241d302934128145e4835f4486a36c28fcefc35126645f36543f7cf21bbf74808bf75cbe6752c68d4246ab0785c0916892ab677d1159f21921ef3fae9b3694baaeeb9ce989cee9f6c58baeebbaeebba97f4a5f72a6ee1d4c372ff71acccb8d46f6c1e7d1bed43f6c66499bdbdd90713f491bf8b508fcd77fa168b36fed7ba327793f4971e81bcdac807493f8a5ff1abf700f8ab2a1ea4a4126597f92f557529d3381cf64f7fdeb8358fbaf51c997215089fdef434ab21dbd4423e2d4444ab21d81e23c12bb777debdb35ca66eb89c09fb3e98b8ac8ef13417149363ffc2292099ce137ce23a77520386d4eeb38071dbd91fb72dabea2d9e00da42acb546cd3bdf1e4cebff1a47fdae5d433d7adca72cf94386a0a304c60c4175e3035e1a72a35547961020e3684c9c0fbceef713939d024e77c16f9cb1fa3ba9eee7449b9a65c4faea81b484a627f6b8a770009c54a3e53bf1565c10fdffb46998f32f72762bd8f439f10a7f5cf4f94f1b7cec8f85bfcfd10ebbfe7ffbe6f7de3cc69dc27f223897defff89ecb221f0bf07c76facb2a15a32c771de58731abb9cbab92bb601ade734b71b6a5af7420ed41a89b890a921fd335b5fa489f40fc311a167dd3707ad0f95f4fb50bfb79ec9209187d3ba6f8941d3f67a26bb9f47b209b43efc20f65d1f24fcd7a8a4f5e1bb46255f865a1fbade8eb2f94c86cf647589b3ee8afd9f6726d36c126a8d32ee87e6ed791efdf195e930b1363e74a0d8773bdfe97cebbf9c4f3460aff3829d46335c4da6ee575f8ff8a5032699d402cc65282edfb260e276d8414be4f95094fd0c65dc0c858c96f8b77e497ff836c4497eb3c6c79e4319d7b3da31ad708e0e68c63069dd773939b30acb8af5aa88b17a19a7f3c412e11ddf77bf01069a38ac78ea1b2713e7e81ef6c511efbfe76fecc19a5cd803c9ea65dc28c423fbef0aebd1f81a6fb4f3b19f675cfd93897754a94e8df58b84de72daa611efe0befbb98481a615a675df4d2d29dcce4b94d6e5c659857374afa3c6f62d6795dbfd0c651cf07ccf0b913d053f43211bcfd9281be264725af714f4d834dc68a12cd4ed64423cdf01933c5c2b54222af9e2bd12ff967feb87fc5bef8d43fde1d710edc744d7d310737e477c3d4c045f479cf12cb103268d8c72debed1eb5dbf126542adef80c956f8b7c68a1432325a02fe8c3732ca7923fbad377abd91ebc39f4edddbd78cbadde7cc00275558649b4cf388079c62a77fbf95ba0c8011661475ad63c3c73ee5d724dbaebbbf03b19ebd6fcaf2f538ec2164b41a65dc13b1febf918887d33c1ecd126b32eebf2f228364dc281b628d445fbed5689de63d113b8d357a4cae4426bd6e8db59c83fb17e7787fa288c7a17e1f89fa8b98f8fd99471907f4b90fd2efa312ff1ef26fee953c93f499642a76576af383e6fffcd9fcd98d43d7759452da21016dd7dfab7b27657b6615dcfa823b71d482eee4ee33fd53f6b753dfa69a5b82b7991ca8c981e84ffa35083756a7b1d3bae94ecb39ea7d2ad30dda2efffc9482aebf07ee2ea7ddf3ae744bb0bb9b72dfcdd1728e097a3f1d9d87bf0fff9a7fd0cc66b3914065b391ee64b3d127be19e7a05fb6052bd6419fd98210eaede73276794649eef15b63fb3907f5f7a137f4659f5109082fdf53c67ca90ff7dc13e15e484827d440a213c73dd193cb719ce672d3d6f5ec1f4e86cbfdf76e67313b6321a759a9711fc4fd733fe3fa7bcdc001eb57ef2961fd4a497dd6589df6756489ab9145cf73f3214952effceef6551a6752cfbc2df669263d39500d2e4e9cd00509179e58229bdfdcb048e121ce9313b840f6bb939f99fc3c7e6b2c3f8f26e265b59c37c55101e1b8cd8da54f8f85d539966059c1edb1ac60ea28dde2348d2ca110f619a472c0e4f7333c22849d36ab12c24539ad1f4936c47af0c191a8b3398dca69fd330cc22ec47af6eab4faab3af210f895eb94b84ea98166388171ea8ee81fbe9939824a959d9715d50f44dcb26bfa21ca2dbb9bab7bbadd41ddeea26e3f379d5270ac43e0af46a2d58362d921d96ed36f648d31a75135714e1394ba53ee241baacf7a5649bf885c89b221227af445e468eb4c72a2722077aa8ad9a772a7f71957653ba2ba49b7df9d9cd61d537fd7d4df29754b2b29eba2df7ad641708efe293a99a9a39dbe29dca9a3ea3ac7045dabf18ebe44234c19d2e430457e993fc20442892936f28b0cc804a1fe1c651ddf308880d0f5395d25f82eb114baad77b148ed6210013676bef7fedfb78cd51265dfd7fb8db50f83fe019f7df4b19c0fba44eff3b00738c1393d6f0cea5957d033a0497a35ee8b66adea076fac9882cd142aa218e248165db8406305141055bc5a822df9a92c52bbb2f97ca96c7e2df926e4e8c70689b50aa4d4bc8092445397273be0f0859d0803c51a2c8080e28722c8ee580f14b68cdda6420dc45e485d2344fdc3b72f9878cae907f1529f258edbcf77def618880809f13b5f03bf1347516b82544f58bf2ed7751da26bd2af76ce49bb2dba6eceeeb8961a42848ecd397cba948fe5016235cee1ff019121b036b66428297f217f4bd7f5876d619da8a22aa754ff4cbe8d20cb9d3fd9f4cf7473e7b7d39dff31b785c980d1439a2a5e2843456a858549d31161e4f0840b9c088632587f3a8020a4d040440c62883922a783a9eae14d9ba91168414e22ac68e3c536258313121429edc0c50d642ce9824d19e4c462e714f71d8bb5065b26e12acf227e76160ff7446789493866f6af3f2f9b39d5b3d98d65112772fd45582ac9ca1beb7362e9b6cbd9a2aa9ea8ce4cb5939494d3d419aaa72adb1fcd902e07715c3f8bf4bd2344d7794cc25dcfe2f2cd8727530a0acb57a964a9cbfff1e8a060c79cb97c1bd374755cbe8d39baf38c034d364d9bef064eebc2aa6cc9539c63a6919a733e91f9736af2d4958a8a79673cae93677b652dc2ede43ac14ffaf6f22d4cd365fea13324a650e550460731b82c200c134a60614b1627d01401e1a6053039b850c2d112a47d224d1451b4fcd0c595f93fb3b125ee03d024358d1f804609bc73fefc99c368b565ec5233574ab004d5c5852666484a6d53d165b98509a66ea8f40c3685510b9952340200000000b314002028100c88c522914824249575d50714000b819e42724e17cba36110e3288a318618430801c01002883106cd117103361d7bf17ef21b87b57a05786e42424e9176cc55ccae26e17fcd6f59dd22c92b0de12313cefcb9ee0acd7b52d6da12e75d9fb17c0a2b24531d8744ac1644a677bcfa6f6741c5560a1c713f4b8546ed9484741a4ac3b274455c549a8d3e243fbc820fdb4f42168b29d65eda09aee4e49bd458c61eb266959589c6676403e25761e53f90a8de88be4276a4dc73f1277903c6d05df22ea69cedf6c73142401760ecc1fe65fc75959e872d7ad8c2bbd9ba8e9827320b3908e4223e511ab4bde1b63c16a897243f9f2c1efeedba8a17729f7d90fb83243a19fd48f49ba4d3a2d269fa03be9d30a6bf2d2d3c142cd1709b343756e95b1b68ae4fcc268666813188b27486dc1480e26438086f134c902aaae39ed58b41ebd7e93ac8f89117c8b95508612e10af65b1c5e58b6257bff5aba838a2fab455247efed91a0e675e42da2a66bcecffd80ee54821cd352c2202dae4e55103b99b378686e9c3db422a6165c5c7a0aad2905a0351f434ef54b653aa1021c8eee935beace546558daa17470cb51a76b5d67732aa5e8b33489f845dd68c3491c2abcdabc41d67b752b84c4af89279a738def83a1d77b21579a6635924cfcb149858cade8f7fc99b784c605ee6dbbb7523ffa7dc39d3775121b84b1bdb418976a61396cc247f8430c1a2b5ac37a2da56772fdb39ac8e71ea24a441288d28db6ad4cac5d6be3ad5688a00d9c47163832ab5e22bcecfd6a10602675481b6533ba81a18f90632048d39f62a6720d32f3f1755a767ca4d38c7f2a3f596cca4949462d4b9fc046eca498d26d347ac872f6b5b4c29ab90691605d916a57140bed5a5e0369af4bf8574a67fc543b4d69ea2d50f3e86b994b1a54a533e575b0742e584c6b42edabd1d60833b62924f8906725180848de2d7803003b3361374948601dde498dd614da0957300b7026215ff8b88b6f729f509822615580e527d653f3a993d0540f58efb6264ae21ce3fe096725a71eac7791b6d46404702cfb65f4e885680c7b04dbea3e3e5d90116ddf9bbd62f94c23ba7dea10681cc4333985c0e55cfb365286417e602278011f162d8eed43fb1c58c94b395f36b87130636940a691cde7bad78877d0504f9e53db246e37673f1730f56f141a81520743f11c10781eacc80b2bbce6c48bb068467e8ee4256d63b44d0625b1e644c595629bd3e695d0ee734e3214029eef1d07392d09d40ab28b943465d390b97b54555502fc77958e4671653a64e7fb6ac58e7679450393fe9ae313a4e2afac54897d329210aa5d862e4a170293a2564b68cb087c80c1178461f1c3a57dfd629044bb41501b5aed5eb2ab1f38804ed0e43592be3ce60602e86b0a051831130a8b472f7f59e83c2bd7c9b124a5442c32f0a0d3670b39349c78e8c585bcdc35aa9ede42b8e2051f751ba07c42fe181aa4f427b17b188efb35a0772418e1d6be447e061d8e7990dc2119c948d3a5a06067dfda514fa11af672da8f93a65b8715a4648a50bf245ebddf6e2fe00923f41ca2d608a1c48c1a8185a112d3be38cfb36326f0d51c76ad6ea18d6599c2ac39b958845862506623437cb0468187675d194516179471d35167ae886bfffd6e7508b9fc8d03738f888a98e97019b1aee5c686f2bc342b762b2ad24669fc58af43117cc3de853d2ee97aefad9ef8d49d736e937a15ae17b127e975335a06fd9f014bff4e6fbc66f75cc86a64cd0128f37b1add262d2225857405d74119d9e6c6d21f9c3c79706ec65349486424c9d0a16e7995ce1890ace1936a3344864524de6ba509250a25552976392c0318f2847c07ea534b39465ee4360d8248c8c4c76d2b143945ff084f3ce612d7412f23aa348ef02685652ca2b376e68e42fe65f17aca9dc22cedf3beb879a2eb0bbe7e00c6684168d606c7e3e4fe215b2218f2f1a81005ea00edab82b81b87020f90a84891c20f1c5181e5431dea7dca9b0474eee41a4e30e489944351838385306e614844a85c3379fe00944d7cf477a89793555bac6a20130f4f00b931d50e20345d60a31ee04128b9ea9070fe4a1361effacdd02c384a497771ab2cb668b1616c7ff0e965d4b213d24d6b42ad508a3a8874318dc6d0e37d47e6f3b03f74004b482014d7f51f6dcf39cc2a7db70e64d8e1c649d031d18ff1ed93026047b75c38e45c2b0481a93e46194302c12c34e625a24878de4b0482c1bc96921393697b879cccac4b76adf99929dcd030bde9885d62a10c18dece5eaa8611418870ac3a8330e9586a1661caa8c53cd70a8180c85e15231980a46a360bc548d46c57828318e22c3506a1c0a6160bb4a57ab1ba28f099a03cea3892ca151624a41838da6662150d7d6634575d348fca98ed39744edf1345be2cce09c51f1c4fbbf24faab2d192994c963e45aef0908dc0f50af50678960eaeef9abe4406e77e1709c3099c4f6385c0cdd5638b4835971a98803ce482910f5d63e7cc1b99f2931fb1b396617dfbaa028ca4589d96fe6785dc07b087bfd1f2dd27ceb6a1e9da0da9303241304001f918e1180da2a5cbd41c92070779fa70c1c68ffacfe4ea45bebdf2abc237c1a89d804a5b625b63ccea4daa6e51c74cca8a3e6db88c56014940a1f31badddc9e0a13b9c2d28fe45128cab9c6eccff8f18ac4759c5e54cee639e1ad82c3568d65df8e44bc137bd3056b2b6a7d7e7cabacc1590e8335aed803153c41030ef4f9f8df16c0212b98cf82827f6cc7d7c27d818a8c048235671e9be3ca48c464498eac766a389f6419a5485c3fe6c5c5ec8c5e20ac63fd51d486904dd74a4f76a1258ac51f3e1b026075193af74e887cd3cf3ece7b9397838039640bfcafddc921607a5bf850f605dd86fbdb32c17ff6601e94b4fda426ce496926c43dae99cfe171e838cbc03dc2610f0ebc068c99162604e373fc16481c7c60bbeb0388b01c121db3eb3c997ed69fd09148dbae5beb8daab8515d5bd10cebcb9d4059e92e4dd5d955aa124c6fb0a2c62eb73b8d7d5015482c7c7448cc7add8d3d2eda6d38fda089734946a3679a60b23e75c2ac8736b1b83588bbcc6d8272777625baab36070a3d6eb5c82fa9aa6510137ff129f842a4a0857e082285eed1d4b69a4c42397defc978522dd5c42d50c2b8f1966bdd30561e9525e8e141193525f8c45963b38c5c10b67b27c355bd4ce8f6fadc996396c769208341215f541782c74a09aeb3a06f12e37a4a5ca6121bb83ad53b4c2947b92b67916d6f20014f4ba7017ef904ac326d21d53bee824457ca1587df7129a6572fc5ed2d1b1a8538945da56c71e58708aebaddc30e48ea32c6f84cc314d5765129b15580b0dd5f8b38bf7a5a12ef6d46cff1fdd5d4251e30c92326abcc4db0d228f90b43697ceb309db5ff583018c9cffc1ccd0182743d229981a1c576201e95a321aea7d2b8a4ca5aaaca5ad58335b0db21d8962f5ac4b4512219401951c6865f1619f0e6459b815f77176ef496674400321382d9b884f0f51ddb6f1001125aab002fd560c31ec776ed09759cf25c5638efe93919f9bf8d0323e9e10451724cc5240b9939b16b4d9dce110041c9eb820213608b9b2778e77e034126a4e87b8763d155f158db3dcb17667ffa43cef00593ac98a099ab62a2a2fbf4ce24dee97e161005880568d724a49a933a51254b3a1d3567eeef063e17bb883d5e35ec99d8c25e413ea720c90d42e390137d88fdf45cd680e23da00947cc6c09ee280f0f4c68f89fadd9f0069127b641bb897187df3221c8394614a359267b0d9fc1052baed2087c7b4a0817bb5b45de950188eea32529aab89bba8bb39ef4c3d0847b8bb52e82acc16c8bfec054272ab5f99393fe9789c1a107e77e52492b96c8b602d332772bc18ab8306a3e8e7fdd8c5e304afd057753e9bcb504154ab8dd0368ef9611ad0fc712028896fdf659e63d0745a155e3f0f93df24c4b2a1b5dec81024084c37fcf346e78b40643fbefa19baeb06054b01b81cb3c748ddfc8f0e4f47ce9f94e4b8334d01fbdaed5be15e24b104d18c02de1a1cacae30f3030a7a09d2b8192af945961e9994630a1f7a2d660f5c77cc96f810cdcee3cd4fa1045782303923aca61e908d43998ac64090c3a3a5444b00c5b196607d94d6febd04bbca9af0838372bc696ffa034a90d57f841dd04595b241aee9980bd77024ef3702b9d8d6d62e3c312829cc8fc5715a5a816d88d05960fc14e2c32ace52f9be668b402fd72ee26371056b81c961d0dfaa05471d9048ad03952303d146f5cbedb590d1ad75ce6b3ad0d92cbce5090f1eb299a87b518c5697a5bda4f5dbae3c9f2fdb26e6adf02bab7be8dbff65742bc3583b7e45151499a4a8fe26e210d8351a4e9e9d5db7f33d02e9029a38f712b798565dd2cd98162c9f97cb52820174879d548847379da6b2b31b6f9eaa428ede67cabd2b68bf74346b7fa831c723d2659d0e4eee6bcaf226d5a426ef2a0dc0fb4b204063ff3f0b06d7b0fade285105a2373ab56b907069121ec20d188e1c4b06376f779906759a7ed9cdb906ab77acfc1ec7294f023080a2046400626bb70b48b841091f09f338842c98e7f42ad91056b8ebb9f028d95f9c51c0198c2374e3e48da70a1ec922cb6a0ffe80164f218d1782eae49a0b87393582c27fc875ca25dbc8f51696961568ee10c4a93d221c405887a0b6257fd31f718c512a52c99b20d7c074ad1c84f57345f97162218ae083232c09a1cf7d10c3c1c0824d620553dc0739e8b5ba5b521fd3dab8c1e8ec469c0948516882c6e035e1184cdcae2633e6fdc45d7da5195be18f977c9bd64b36aefd58fed2391b01320edd93c89808b8acb5c2cd0a231bbf729375dad9b11c52471e4dfb576f47850d32609e9bc62157ab540844139da4a9a1c0ac2f55bc34996d9bbbe044c05fbc13d739b3c6ffdfaca57205a8e848808d7015d74972eb557a03c8150c177737c91e9f6ca832809df1b7069908079b66eb800192f2cd5028ad111cdfd580e89a64c3039ccc1de8ed6db2d360ed9a089706f54a2646919a74cb387edaef487ae307ed10e9662fed400a417be8b89703edc4a0a2a83e7b78ace9587aa59bc656973e1cb23cf86850d9650db760fbd863b9a6e85e7a238edfc4ec849364780c6124258aec9ac6358bbf306321e0c1471207fbc2fd398baa60f319f8eea672aa19871fe37323186c0f6344bfa0eb183bf18f44e9c9aa522dae27380779c4a526dc777a7a372f2d6a02e14228a6d0006fe5f06a27df6877bd61990972256f2506fafb37528eed6412255eb40c075418494440cce3c1b35fb7a5310f64934ef606662c28b440d78e97902ed062e244e0e4ec1fdf949a640f21f671c7e98b89e5c1da249675868a21b1093eb02e3fa63810a4a0d874749380ae206775689e122ba8ee9d8fde734d1832aa7f548c09bb31fe43117f5f63319e7c603d52ba626ae277371771ed79c7c9e29aa8ca645eff9b908182b1b56ca5200976d8023097a186826b2bc9928204a98171af0dfc6ab2dd4b0631c27c1688031a46d27be66049abfebd63238593c12e02ba160911505e12da461826ba80741434971e62080cd1a53e2c5f34daa6469ae465ee1226ec272eee7f0dafa8336054c626eb29b3610d8b5b876c914955e2a99d7b4d32de8aea6eed5b1a093ad45965a55fa2ff53e6a73e21fc19b3c419097df7ba7c6e0001d8324bc46a482580c5c9908f7445a277533879f5986ee8bea98c05291580c67a31afc42452107225eff5b19ed7b5172c6c97b30dfc42e6b4cb2275db04b92a4ea7caf2dc95c869cf621f5a425c2242bbc7c60acd35546258591f40ccd5c0cae4a009fea1305843a1923d2c107dba6391976c35e2058d8742d77747efcf899c2ca9f0de847834668df5aa502989b6817266a3a813038fcf948877e04cdc464804b28082b2083818e3f7b8ec48f892733f2dacecf9f0278f44b8ac6906bbd0b345eab79f8ea3c4350f23af26852d44be8f2cf486379af9ff730222af72362041b0d01296d5523fe9f257ca5a1ebf2dd412ca7f32b60eb82b68247da67879380c2e1df977708426815a701e31fce916e7ecc01fd5eb775cc7bf8b7cbb7c4b2fdfd6493880762c683b8ba157675afef55595b3fffbde37ddcdbd0025b4dfea8f3928e74d652a87bbf95b18fafecdf548cb62a92c6fb861161e9f21177506e8be07b493d236e12e81e8e21eafebaa7e2331574589d08c125a674d86fcfe143c6f18f885725534f690b54cdcf4df13a10404c437b2e3b7978df0aaf031d7f0a82b029780587584ba51d545923f353e167cd8f8985bde97a69e63b9917e80069973f7c62b7dc1fb4007f2dcf57e5ee2f5aa8449b19b0ece2a9f236419b8d154a7ad1b15f1fd4520f499ef331bb285ed24c285b2575490ed1c85a96db802293506a30cf8ee8528df62e888a52191e015e1a3fa086d8c96c0b67ee640310ed471a13b60830b0421bc6437d3ef06efa6ca0d4dd29a85ea35387dea50978f0444e95c2264646a70f88cfad630193237d42bd367a1f0c0a05b43b0e465a03265027484b0fb2b1cb3f0ab0fa19b29efd987ed7054e090b1f8d22647d3863299c5b05a1319d1f60e2645af85af0aa80281621667425d32d3903900d41f07457a7ed95ee0b184613c763be292ad70600a290d3bbda5427ab1e26dac54a7218c3e922b8ce4a181fe53202346029886c018790ff00b563f49079c1184dfae66e77efdf55ea4a49817470caa9e9ecf7d8b912a65b12d0d4bb0f9fb061826aee821dd0cb25fac20e57d9a03eb136b8e01ddf7d6b1c25f19322a047822e51e73c5402f4f87d1855af6007207331af89a79dff67e9216059a6eec3cc0620c313f8d1eb8a53647e66e9dd4fcf01960b18113ebe42127cbbe6b2b2a30b37daec49c1d8d52bed373b0b14b130362f57c058df35029269f98f362b40247ca3350b550b3053b340c489647dc851a1d82ff6135b762b6494ae1cb37e8ee3ce019e5631a1a504aad3704ffeafaf14d348d8a8fcd7af06e9d0ebbdc9715e3a2af1c2df9dbce1c6e0136c3003d949f59968a66eae36f205e0aeb565ce3e5e48be41ddbc0b5e300472e87b77e3b7a43f245074673cb6d0fa42f726ba9c994a8401c9397fa272ca042beceb2ee68df13b440e8992889a784cd783ae3997df26f82e87806b3875b086591cf6baa003f15dad1e3450ff785ea2afeae5c470d0634a760c33eda604c22cdb303b1a7c4a2cc30998a720284a8ee0d8e5b0b760af27e4c37184549fc1837cd1fdd08cc32a7dbc2faf100e7b6db8541795791eb482f09e98eaf1c8477d948967b172dcaa0f32233cd92d9df14c466a0cbbb1f071cc7ba3fa4ea9e8f99aae3692dcff38f162b406f800de1e9e35c57165eca80417974069e62904d8fafc41881010f2c6c62749db8b45bdf33a78f007490d05ea3588fe535acabb564fa50d71d1143343606b8f68fa8403fa9a97c5e4812e1486073ceb940f5f2d9021be2e491a64db4ba275c73d0a273d6eaf5513c382a96f2839e6367948c50d6c0930868dbc5c8d35620ca6f860e6013eb978050135d16f3e6baa063eae019160e9c7932a8104048185e4530a9285857b418f3f57021ee0cae144c9e92dd024eeccd03e6b31059c997469af26653ab61394a2a2d647dee23820eb384f3507d628039e08f965d4b630852b59fcd8777322e111b7d8811a017185d858d50f20a3404786500c166aa2716a2f333e3da3de2d7c720b2e6d0430f6ae760d79f07cc330b77e10a34045556c9a026a5bacdbbd12b253daa1a439cd875205571231e252f9c9052787f0ef27e7671e5c7f8f469431b6f7607ba96bba7bf797b7a92904fb5e3058d2f476ffbdd068c5d47e8da1dec280ac0cc83d8fa08cae7b8f6464cf16965e82dbac7ee0dc5372949a1e05937769ae9e47ba6e92035ba3fcc878101c48dcc3aace88918bd47a09f17151a91a606c5c5cd531c4abf09fa923912adc4be0ffd289226f9184c642771da5b0d5467711008ce3c380dce928766d69876d778a9a0067df0b5c1989d0979e18b3caf2823848fdc97124f602d556c399744380bc27edc8fd4c607bf13a621217e37c3f2aea456bfb29c0b4d954c35b35c79b5e080cde4d53c7c2c3f058224fb5a1f562bf2615ee466e5019acde4d779a5e06bb550598e383957a37e555fe68c8d876c249685614d507b2b1353ff7f25e58c5b135069e67c422c5ab38316172188c5f6f611f4ba8f278165b901bb49a05e95455903cb41729b49e45a77701c1dd69d74da0ac20620617bdff8037c7f40d4a74eafd568c337bd53b4bce55108702443b2ab4491f2c898d1810ffa410d780771c5deea12aede50487f89443f8a803d6e04c069dfb314ad2918b0a3ec1656ec482ca891498a1d198292ec11ce0ddf7a8d44a3d81d8176a0708d68a38ecbc9679f882022badaf9277116f3ab58b4aa70723d260df757adb76532ae36bf2e270c11343e343cae87a03a43fc48d82ea607fb47e07417b70c8452a92933930181238519652f8a8a0363d7aea1c08af61f46342256842e3cdb205ea46c5c6dd376a32bcc4994746d2e135cc2535834507144121fc84245f5c6f242814b1882ef658ae003c24682673ad4551dd90c86974860b6b87ecb8b0865b8543317cdfea29859962b1375189cc8774c57f9d9f2b04b112e9e180e8a850cc43dda16035d9af1667e66c180fa847941beb7bda205990f9980f9169d6f05571ff72c04730d5c2b4dc21d150c3a2b397187ffd6322c97c8cced2cd7a7cf7f51e5c8156a5abb1a245c7633404efe2dfa85aa0c289761fa154b11a049266435a549c03359022d24b293973cdb14b9c77b7ec6a11e1ade8dc61f8c0be974325ce5df25a66d3fcc6b97d0bfd6b0500c72567875572a9ddd3861dfbae03cb3181f3d1fc95d6c15227e549b67dcbb9ffde20985f087b3f2ef231f084503b6ad711e2486c0add80c9eb2470de6034929f3f633569d6add91ab0723ea80ea4c77e5c68699c2c329476406dac605d649f7094110eb276b48fcead2d40051831143763d407b54d299d40f2b75442a0b83b135977904205d99420b2f133109171307491d3a3f3d68560c1aca92ca244155236bb65d13c602dff114a3317617b936c1bdb9205930f7d931c82c997225034168489ba6efd05c9199d74314dfcf88415b404ae9d920046f7b1954a127cc6c1736758b61b0b517373c0ed9fecd8dadef76de0ded2cffee8f5017bfb7ed75854f11a3f3c965130b388c55e23c10a33226b03938591d8c43fd6b77e19767f549cb91ca6a66779848b66a51d8a5392a7f780e0ab45af592b6a1831fd724847be1a41682564d500048236500702bc633d772fe01d1cc59ecefa6e60132e060f266a0febc59308ecf005c400537b10da289c5816736c825cf60411c86a22af70f8a64aee8a273e229024a0232b413facbf25ed60c484e24064132fb6629c05a903cff88af4474e3bdc9a67a9d70aa07b563a8348327e6045560dea10fbb46a5c3d7611c708f6947d8846c4f5d6e6ff2394fc5db4d0a81bb5f18f23c22db6103a28c583a833cf7244e429150f11b5c5030d797624305a1e8dad582283795d7e574b32eb1052491fe241898541eef08e02d01715f512b9157c475c66c2d72f1460606261c8e532ec17817910d881257ec98de02ed2b4a61860542c06ee0e0cb04c449ad2ad653b4321786472987be87f88b6b2e71e5a918548bad810934667eb9fc58b7d0d05c4ec86e876f50602e09ab7cff6aa3f199f6dc507c4b6eac3ef974b3f89f75d235931efacce9308be924076f5c76b388cf36eefe3655e9b0bb19442f85ff8052de6dd97c37650a830411f25fdf45f1539c771840b403ade374e864c60423ade51a405fd795ba6c26f45a119c626dfeae532a62c21cdffeaa42916bc5575a0183cdeda33be400f781479e7e5435f0dfb0ae98d224b892aa8d32bb2ec103a0c57ce1792c045d7b97eaf28fe3748a5070492882cf9f746048bf9932ccdce39e49c7d97c9de56e817f9e45148063af4d823687fd5db50a166ef15e68533d6ee0187b052a3605211c6cd4645506dfcea1e879d220e5f13bad72400db6f64db683323034103307537fc1b7c6cdc050440b439e859c858e70d4878cbd190a4b14c8e8b4ddcfff7747c18758d16fe0d66430f5e6548b1431323cf02806b08c14bd87c26ee36aa531eada113a851d33d94294141fcac57ad1f70f1c038961b9ce69301d15881010281a50342d84bae13ae15ff6ee19795e3f763c5d7cc37f7dbe3b509863741a3f15538ae21be2f45847dfb97b0014420bb07d25c2a860583a5260861a9c0681cd797495cca2714d8c1f848f58d8d0fa4f1ef857da92c0e34473b76dad102399c4109ee4d5b8c84bd8270d5eea1f4a27ac7877f77264719dbcf6906a1ddbc58b140a23e335ec046af94895ea8d15408be13f47ad18b08b8817bf59653ed0507d4b661e7d6c5fe8d10937d46a5acc7f1df48382c0131505bb9a587bfbf759b807e0c14e186880f5cbf640131fae6453515da4bdbbfb7a3c3af57cbbded4e35b5b52ae1ead677537cb0947460f63de9b423f63757ff3ac263b17697641536c4ec79a9cba4112c3888e98bbd0dc42ee7b9eba839ef6e26cbdad6802b902614543a8f2e252b13e6e0f5d8c3fe07dc1fa8ba134e85ce864f519bd57ef511d5466b34f7950c9b57496aff02f3114117893290d46c4da0cd8f6a9a2a8dea31447cad7d55ddddca20d9789f6a6ae78d8830d6cef9451a1b0268c65315d3d66685006a84bd68a94aefbdfc841301e09b2852e4f9bd01bc014c911a3949d384554f03ad3ca90d7b084696baafb1e968d875d876bf98a885b4dafca75d5c7a459c1b386974b09a0c680ee028e98f9b40a384dc51069fd373b06d2103d3a27d4b7b341b14b8d424ba8d859ae75b2756329709beb8ce0be18cb78b24ce71aaa9d2c45c898ad6a957fc6e443b084de2a16814fb70d05b92cf8082cbd67ce3d0c48284323cd5afe893d4cedfa054968f8a3d4dcd2deb056ff78734bdfe32b949d9149ecf9c56f4990037ccd426f4ee927c515bde40d4dced30e7d860089695c4a030e1a4a68400a52648665d0a88e6a563f6df6b04296357b35571da75cd91d06111607d9ea61244729977265255caca213ac0f3fe97c468bd8cbaa8fee51163b7f040989b339aa233cef7baa1450c29f129394d5ea87dde776d638a49986e80a62f3757b50bfe425cfe94f5ad9323a3385dca87a9c212d77cc8ad3f979d9745fa0e068ae3740084484d04f0bc1c79eddef6963a5710965abb3de00faa199a60f8a8e656c7d20c96d6ea2895e5405f9b3fa7c56ba43efd4a98f7ce0811e9e342df3bd4e13350460f10e31ca979922cc2c8a4891afc7969679bb4be83924596eceac47a8a5e32c7bc84e69a84b9e8077b23c3fd7009384e697a271bf18045e2dd2f3f4872b5549a6f46d2cd179a9c77542664ac3188607d2ff3772d42cbb5d1cab494d69d7ff3869352c6356e4accf62a6e597f84e60df3f4f3b2ed1c213bcf960b2023c839f64e1d99437a45bbcd509433724c5591c5f55774a0923adffcd54d226d710705effd7a576b45f8423f449ca717e1f41409da3b0cd9afa22a300861dd6d1fe07fe992fd105b744d2bd0c6d972a8844e9b3a9738b1a7ff8817c7c06d0e8d49e75089c8042f01cd094fc1c064bda73afdd7d0a72c9bec3381f2e7886ed12290eaaa07f2a211afd0f91cf94c2965269c9d84d81483b903a5f3e5e2bc8221fd405466c2a31a3acb4c71a4fa6a157dab5644673b38e61247d37d1c08d45d3004e73245666a8300321da5ee549454b3e483dfe88bbb06dda1949d26787884754183040baa997c07ab683e6a354e06ae73a2585df8eb5a3b731bed6616b03fc89afca8aa25b16aac0f880c4bf44fd94bf89ef1006b70bc671747159fb0e93cbd01f45783646912852abbc668952b46b6f5601820a9b1a58aaff820c144d82878ff1f10cd6a694a1a99ceec8406c50ccd53b9002a47ea62a25a24e8f830bcb40a9adca47751d9194ee3c8f4f04dc58a067f9251cb6a28073c70f1f49ce8546a61dccebe920fcd10c34bc7f93e7396a1ca0044f6d6635e70b4441b45735b48027c7a63d0f53a2bd1759623d0610d2999cfb7114185f7fe71202e3b8d90491d03ecf0b4a892e5aa04d2ccf039d9b7c3daa1fe4394ca4b21d0d38e0e7b26dcce39763e0a1c3992dc65e1b33e62c857a749ecb7e6857a8d60445e32ec5ff78958762827edc16436918513132cbca852a97dff0565fde6e53a1479cc1e15be1b099cc494108efef6bd6173d09a9e82910e9c022632fb00a01f3326237746a877ae3d0f4a8313e30f61b0090681e11fbb195e20bce1c4b69a7ec9183be2eaa53f9ada649dd7e8d7163f4d11fa010a3294d20872cc3a45a2625c9d4a443bdd443ce11568945cf4e460b46aeb4bbd7fdd02081ce6b0b2f488e9adfd4182b5767f818312c1347562baefbb2fc7b9ce2824fe45bbbdfc2f7a4331563e67563dc363ebaabe1c13d22ea840854f9014565c2159a5c7e3eb9b32e6aaaaa7180c128d7ba47293f594d196fe1ecfb0b6a5a630037cf7ff5096967a2318c71168f4ba599fda8dcc074f2e41541576f3e32ee48c78736a00e57117964c2fa7f9ecbc2d4a0e9b9faf0c963957f0b40c1c4043219ae6b3ceecf06dd3729195660b9032e250c4a62692351e42de32c23054d8368e96d6a2cf52e0c0870c7ae483df2b7d746bc8211c3c7d8245327eafc8b10e064ae1c5d278e12e9bba746b10e9babf2b8819734d5167fcaba42cdf3810f206edf66b6ee810731f15be490ec726e5d1278c09d11581c253b86a17a2b82992d7cd2a69f7f253adfeab21ea3f776f01cbc540b7192a826bf5d3b251c3ccbf833f29df6de25f5d4ee02f45deccc823389d16546fb3ef2fb66e4b65af7d26ff50ffc546789b6e4439ab9fa6feac8507c2b43a0ba2cfe45f288c689515a3f5b9f261c73599811f1195b714c17525ea8980746f6eaba45c520579b3cf77e639f72acb0b3b540c815a9dfce5c15b2c2460642a91f10e85addedcd301f6790cf2f9b160d906db8aad798b427aff97d226301d41ebe092b6f064689e8b102893347e2b0ad97597f080d3acccc5b6b462175ddec57cdb3044279f730c5ec02c293bbcc8119c3124a3981390cd15ee82fbfc3e5ae4bd6e05fb5093f6c9aca568fc95838fa3d7d50ab4ae70bbab66d4391b41a19ed4f2453e1e38e011dd489b132ce25e8cbc50109641696af1d589a66302282287b711504db0825264fe6e2076dbd21840fd5427ec5aaa0cf2ea9e146bddaf82daea236d9ebacb02a4179022cb93dcc9480006f074da3703c9aac19ff3c2a9693502851508efe5d32a973198fae2fdb991407eb54f3738837a17d3be7da790fb16d74cc99b2c76d2c00d5a33b0bca395cb887131bf8da28df477796fe410c064c16055e54686a5556f1a6e492e551a1bd77bb55a90db22cc11101ba5536afb5b6c9e96ac2d8d8c6103d2ee5770e9e86665cb38c3ca46f496a8528186a4ed61e709b58dca569df4891641d8b794bd6cebfd3334c1179c9740facdc62b42b70da743751bb7de5d5d48de515d02b32eb983d3d49488a7f2a8299e4b85a1c1850524ca58372338978db5ca87e8658cd19bdd293c36de66a7a873e1f3070e17a7692474f46bdc019cb26b68db79814bec97e304778c8a1f909c696b0152b3d997b560c5fa15caa975903fd3720b39f8a2849e8b03dee50432a4429997d7592dc6bc61cc6224d6047fa357958a15a59cd428129791adad1e5e62ee353e8a0249c2ff293d3f375d9b1c1a0f47c107917a12626f64d48e407630b8b8923a7ba7f59aa23b4813e8b9b196f7f983104f55cd7c247d3ef7777afef1ab6287dce7d6d96009d4df8b7d3b4a1bf334d05caa4c852f21d1b6ba9dd411b58dac76364521fae381ed79fbdac742811c3bb77619b30c1078dff9d47265fdcd72c4422a8dfd24252dc7282dda6d5c9f386e00b709cfc387171c3196aeb6393f7ab6afc5a01c948606afa4a4b534e388c49c23c0568c88081323da6a76be6fe2baeb5c129ba64f4a4a35790a4a34aca4200e8532380495421436745e1d5d19a3f12d96f5f18043f2d3357aee266c232e4ea473c81c27aea2cf05cc57652e62e0b0bf1479b8ab3a596a78a1fd478cc28c698034b816704fdcf29d05315ec84512c96800e113af80c173c7f24a44bdbdd3982a6edab2128d721eac1a5c35b6f543e9dfef455b47bdaea9e11a7c33cc10083112ccc25d6267d4fedde6454874236842feed3e51a046e6445ebf5770a74d1446afc88398888576fa4de0603457b2c4fa4ad3190aa08978812781d112988c3f18ae1385a9acc92483b780defce0ebd90d87a937d929588ddee79c516afea4b051ec0148939deb1463a1302aaf9fced52c55fa6351e82753b1ca28324da87a255a81350cae67536d4e6f7d9eaaeebf4847732d8e27a41ba9b44d3973e0913148b54c46f39a173bd2b1e08fedf8eb87c45180142aa5218f380a14e11672f444cb214672648a2791a3b00c7301d359a490108979455669ff36acb172a56586a76a1939669babbee51f9988e36079c355b6e2581ee4043970eeae2c578c3589bdd3e41c18ab99afdb8c5a2ab0a64c2253e60904c9b75d69eefc8ccb04fbb98a282ce638ce9d740df01d16ee589dcaa1f6dab8db278a51f5baa58d65522b470ed09c7ab226c25a7c22eff3825188a6e62e0e18bd0a20b615880a744008c44fa13aa845557675e6f23fef2d3b5e349aaacbe1892331dccd7662d41786144513900e3c51a316c856b24b26ece4761c9feb709a8600ce529fa079ec598d77986a85ffef16b5e4378df87dfedc1c439d8f004bd4bce7a51168991090e3441c7402336440d55b70b1c27c29dea3c6ad3066a62c3dd6dff1e99ea620028d1f3c87a9bc73399f9666236678d241b5b4bd688c007cc481e6f099ff36decb3af0474bbc945934d4d00969ab0513b3f4e1787d6a1f7a83bd035df497671a807c60b075e036d55cc0864f5113d802cd9d51c5a1c36a4b33dd97313633ccd106708d4b0d8d77473248b824eb8cb2aa6b7469185d951c5f57559900761249e7c5d2235f29743b102622e9184dec4805c4d06cb416010fb397024a7329b14c0643f50a0e3d20160cab06233ee01601b57f4eb82f333d6867567c2b0cd3f6cae3915d33564dae2ca225f4237eb8be22b67e3ce87839fcfa7f4bfbd5a1912e2342cb7e7133d3a39aa067e365c071b3482638f27cc3477c1cbefba1e7e217b7995b7b53f486ed39972da55889fb8e5ad6d12d95c205438b10c180b5462033fc0e382b56911beb4df3d7c57e1d83ff1d239ef255e33c607edb7152c3e016fb4db996cfd959805d7d6c0736aa840a1cd36ae6d00e0d187daa5a9805ab15da83424ac557207dfca740febce4daa38498774a87ff53cb02311b5a9d022cc93f1376b0055ad0afa593ca21308a30a3d1c62385f326ad7edf396a75c41d5f46f1221919f94876cdc7d708d93319845c9295279463172f806cbe71abaf22b7195f7216dad65b4694bf1d71ce788b6270af56774ba52aa90fe2334afdfb459d628e96bbe97d03385b2684ab57cf2281025219afec3048091cf0e76e96cfeab1358bd571c7fc32381126421c39e9aac360db272826a0f664ab0ae67d622ad2711a7991700b8969884bfe9effeaea210634c9f9066783e891d88864f1b070c5b0b2c0b25ca00191db7fde84a2420712325ebbbcf1c2050c09da84656b03384425301c06d6f9f725b3bd318a101c9c16c2e060ffa05095e8523aa86bcd306f560598cc3edce4b61fd7f2de905315c07472f1228636163ade468d2eb41e1ba6fa999085d8a5e6459e4d72054a932771eaaaa17418956a1bd963a026ed4a82065218af7e1142d9e73d171dc667261d6cbe0967c5d6228373b20236ada6c89c755c48aedf66a8105641863ef6d96918fb20ceaefb576ef29bc2e06dc7d9ce0fd12c6060f0645b9e5caceb9041e52a0c716e7bd614361933e560f4cc31bd33c112793b123b83914d14a562d4b9ed5441ec26a6ef1fafb3bafddb08919c828466d41f9fee89c362cbb88d862f76f01ee6f7cc8cc6395c196022de17e7d5fab9024459cc9a812ee4d40a6c1fe80b0ed1f7a37be68040b53357630469c8b867cb04c9b109b20405998adcff49ae2989fdef012177731c5c0e9890ff7d88b8f2ae4423c42599e620fa0cfb64613c54623fea611562cfb9d2c01a3576e9d14838fc4bc191a0a64815635a11bf237b457a8cf24ef3845ccfd7cf0b9e339dd9d0d7bcd59c07adeb1c65c687643316bf6862d50c59ee674ec682730b2b389bff15a3235f3a044266458968660a588d9f6eb358b0012f83761e7f058b5a85e800c8d9a401678de8f5afdf5b76d9744df0a3af0b26bffeb8ca3477d0bfd5062593846738999f044c7662bc9fac42efd921405e87bcc73a8515a76592c2a7f5ceb1fcc1f581dcdef6d3520f804149634e8e26a34c383fd2affa4787ad0422d03accd0fd621e23ffd8379f93b7ca0097fbd14b187b29fde04e9aab14c324329df524cc125376e5dfb1990521b2eb8a939cd23de76c45c2bc6891b89e741c23a19ef591fd8d6b2f62535fd559427030ea0882ea1844bd6cc194df2511382444480d649d6027a0314987c18de44a33b21f9676993df5300fb12f380cc19fad22c264dc106fb97b6cb9c486192f8ca6a18284b9f82566e1a69b7128ffb6caa53a261a598cb3ade384e37971324c2bb231450c75a0555230dac776263a450cddc4812a936cad21a12d93243a2d11d323e7ae0e22ea4ee0454750372a25c7365bd9c8b15235a1e368494c7ebd7fce46050aa9172613648ee6de84522644ed20e42329786ffd5b9335718b46e275a3ef08293fe734823a7e4800e4c8e767ec1e205457b84c6dbb9484556571d3288e0b5c6e64d36281bbb38ca202eeced00338d13fd75b2e62d4bf0c5d7e11a17bb4767b24b93929029c6513a0b199306e1b9e34cc005ce1762600b0453a08b92f89e5a5b58ca390f8ba1aa737f39a0691426e71cbc56e5286b5126edb9e379eb4dd32f778958bf9cf72620616fca252f0f988c99d37e2bbd8a397722e4c40a4a10f968a71d5787742991b3ac4817e73d00435821a14bb457f54a9bf85030efd3f0ea5222171c93aec295d7817c908f8447477ff2d6c18a38d17c61f25df28d4146228754bded89855d43015f31d8af08252ed423d3bb118e0522f8bbdb7c7528d0adf00bff0758b7630b0df805be0bbc0d5bf2b07b0615d3cf5ec1f7c161ad83aae2187f1e04d4324fba2cd25c34325cdaa91a96f49990a6334cc8be20e59f84452e408ac2f7f06bba660918e3135e57ac1af0c877975819168bac28e8ca711e53e5c2ec1b9c87a6102e19a4a7e42efeb26a24cfd1ab4e0f68d530da8dda1c53af01dbec9f7f3bdc6267118805d7965ce3517e6c905e3b575d023b2288deadeafafa0b104b7f3748d6fbb8b9d51f2909161b1eb1b3fcc3f17dce5835b8a7042a2b0e406d9edb7ccfbd16d3761799a2a8555a39986b4453b1460393e5b4c0ad1e49311648833e849dbda13f8097b33340e462e4d61d0418fa0888fdfdcd5b762fa8b7d5529b3aae774a6efe16cac3ceb6db1889eafa658078f0496795ff6810aeb2c312cd47a77b4124bf0a20d890a144eb648405bff784b5ede65034059360c159aa339db095686157e131e6808112c5f23025d23a727ceee852c4546b159edf1c2e11230774d496c542435870f382a023c40b3c2641fbe2acff04fe17106ed5b5fecad35bb2ee4c786cc8b33845a56e9597ef4f92a992383c472af31d1c7bb1e3b6f79bec7142a65c0be3b9b2b6b7c1c2c3f02929a5b6ec021f5c3ea3da23cc4a3fd058e23b8720b4af89fd0d400ba953f876463e8229096e0a05a506938e8e012564cf9fcf8204c6ca709c879f99191d412f24eef609fe69a6183599ab09fdaafa4dfeb8d472df6927d90c991f9ded40b8c7a9f98fac16a653304fda0d7e936a44804184f15d30326d6816df20c749692b84978aa8c46a41f92ebc1a3cdc316b4c378235bc1093449a458e8f9d0692e209b642dc9536f3aebccd085b4429d277821019b00624c471445b3bd0e6ff1606878b763a5db8a9e46812b39d4e1a4ed2805096a4ef96574763cddefb4460075e9dc1d7a479a774b02e4f0ee6d704126ff613c6e35d8237ababb62305e37347f6860e0cf335f102bd4957822d5e220e30a88931b3e322b850accb95dfd6bffc4f16017f5bf41a7034b11ceaec29f8a63439d7142f0adb0814bfccd02a66b8ce72c2897c824d6a016e84d679113db2ca9238f8a47a4f63befac2781a69f3a54dff1d09393324df544e6402ffda68382f2fc8c693bcbac703cc3795eb294d829f4c4d2711d0b07ae09be2e282ffa1cd7dfafc14ed2259faf8e6276f7f7c7331d8e2b440e9646d286970909f2895c8ca438b3a1288034d8680409b74cdc64ca10bd9055d980028af78995d6ff65d401226c10419312553767c5a480c70082c10c9117dd92d9c0c13d291dea7232e51804d4cbc6c999c8f169548ebd688b1c81e0e9862159343eda0e5056b5412836032121bcc0bfe7c2874f29f48457730eeec7ff6f6373f5a39c05a74edeb398e496187bded9c5d4ca4114380791f89ad23f89d206f717df2641f41c0a706f0f5d2940e61b09d03e5f4060a044bdc2a5b839ced54f044600654dfe3e3a9fa6448fc10e8cec21b0d77b451a38cb63ace648f481dca0d26c193ba4c740f0d6de8eabcc9144e1ae84716c36cfdf1f5c9277f59963f2f4b3fecc466218b0f96fa320c96c32f2a49f3dcdbc726e3e02e9202420ccf9313c6470961c9a428f2dd158e5f12f7aba5c5ee46a890ec2456279e80293fdcba8ab7e67ff2d01a8636a35d04e07a272bac4211638fbcd91bdab9eae1db10888885e1304096d997c5b90f88c2c8374e1607b6cfff6f0d9da21c12be46175e0eb3b2a09bd56c17718a84f2b86427c987ff6b65934286271a7174ee3e97bbb9ea20aaead8a49eb2452e99d181a5cab882c29336cebdf5704a13fb7896cd3dd315891171b43998b3f6ca755c5e0b0f862d700ce39a009b44bc83a4c09958d2f80e0c9873523ee7a333616f498d24f32a1512c37dbfea3a962597cfa2dafed25b91a8565a29a5a62695158ca58c1a4f690933711df6f4dfe870cab9d67be1a5f2c17b05709112df4334494b0a1d6551f161c8410e1294e685ab331908314c19c74a4fbb3c85a84de4259e7bc4ad84ee0597b41e83a055e216218a803d79af9cc895109ef6444a9c2d82e0632595ce7319702cd9fff69343e7862f565c052a7c48cd7a8b292a26d2b728a4b972693ed560e38e2b938241821b18b226fc4d4360e3830b0a3544d4050f43e3856b69a97c02115bad5a32ff30955506625029790a93fc188527620aaea4b7c4aa586ac16fb0916d0d4f41fd7e935b8a2b0b0a46a815188c5baa9c932034a5467d1dcfff29695f7082817d49e0d6347a4bd1f0d2ecb35384b00488be5a6e0903ad29954586acea5398bb7498d450e62d20ff57d1a7e8cb7f8cca88b76bcc78c7811f848ece9c7c03a36ca1afe78372417dd742a5d69ab674619fb03dfeab78d51505c87ab6b3d7ff18d4fd28a163d509d6c5061f8b0ef26953a1efb1218e5f0f53351c64ead9a491863f1678f3efa53a245cd6daef7ee855dbb10133be9ed75e7638427cdf1d928f60715a5c0b5cbad06e8edf2e9f7968b064ca1d90a741ec0cd52a952ca57023214c25f73442f6ac6f1b73787a0ad7bec27bdff68d892cc56e389a9a1d7f4cff0285ea6a1ff4fcced5acedf3859fb1dceda264b7f1828f0bf2847b22711c2ffb13f9711e5c37a30ff7b7901228c0e54a36bce6f9e3a03a66d1f849d72b8418aef50abd53179487b3b922c92de9f2ce91b5cae0cc46f2cb2ad833cfe519da26050ab09fc40f4f5b2881eb56a39aa214aa20f8aa923dfa80f8c3d86c8f0433cc892c494d931dc2e12fcbebaa7a78cfa7d8d206abfc830220a918487075593156eddb626cc109361d1dcc9cd1ac761385feb9e53c1e5ff691b54e720619cd2097be5309dbad88880116a77b046ed01163f54b65c07b2e26520e379329c2a3d4b3d668e1d56e4cd7ae0e3b2d1927bd204819b30bd936383e750361c40bc670c2e62d4bde4a7025e9067a54859a1f037d33e25ac9be4d14bead615b18ed287f2ba814e152f34b0986db1670bae06c5a1bc2d6c43b14bc6f3b92d10811d795398abd5901a0686992d2acdba22fe24ff83e7ad196e4beabd88d74e676f0777d57a15b3dee3867ab25bd61f4ccc304ae5d32ba27a7042cc05708cbfa698827df9ae400c0234a60f733aa3cd8f718409d3eeb7f1a9c0e928fa244b319826426d1f9e8d643c658ed7f7e33d2affe16ce5f1c85df07c1080a4fa1f1f2424366a7aa6c4285dd9d48ee864c5e7e08539d7d77d406839a611a7e8d78a4f95d1ae5b323f06b19a5adbc5c06bb38113636c3b6aaa760b645c95dc6263384a34f07b7a2aa19661437611ecf479e4ec7560ca98520dda50930a62b7f37bd403b5c8b43d29f383896a12b01209025010564d501ef5be08806db334a82b03705742a22d08086c40e25cdcd933f047f991135ec9ba1ff0be5e1eac1dcb7574883d646b65e6a5022122353d529a57f3a18983881299ccc4bb14942ee4a9753338ea5bb332929550f897da6cf10a78f39d83bbd5924a8605bd97ba874a2017c7ede235443615c25f19fd2624edea81fd922fbc5dd78975f186070bc7d751534d179f12d6ff91af4574138c59d6cb5f89ce9b255aa8ea09fd1f3b791bd0f75ef988bed33bbdd996b3c39633ab1a2fb0406c2469ec303d88b673ee4cbd2b5e64ac65f9e458bb255458d9bda250c74aa16634e3b123e4b3e186300747358c81d0652279d8e7ca2343a0e118d60fb8bef94497ee119c0c54e3dce70ce4d2d96fbe2714e045d8fba6814b57e61f075acb5a84f209b964370617857ceeaeb4eec0523a57bd2731225345fc39c71c18d8a563865f491ff705c01960078435361590ada7c083bd72439bb6dc07678a1c9938e4946bc32804f8a727a5efba93c68560694c63c2d23b604bc5e39b2ed245a5c501f8a5b37181681076b36fec0f4d4f963d94d24ccc2d94fe7aee004fb3112d138c66a3496aaa0e30c9f65cdc9a9a30acb7eb097e33629218def5ed98f109c7bee962c4d12061904de94884c9e5bbdd242b0ca8f4f8339ca3dd43dae557dab861f7c88f2932fe6d5ffb73cb5389cfb53c7841d20492fdc46a78369ec1c8af88159f205924162927da722e59073795b18afc4420071ec7bc7268161ff554e2320ea8e54c01d662993e3dffb0e30a25133d37797bacc8dcdc8cdf099eac830dc47d1a5b2b44bf0b9142480c9d0d832c1cc78ae0238ac55236d1548ecd502bb0817d7f38819124b422f6a5b7cc31dbf101a73c4046afd49a2a1a0b0d38d33a1f71e6a04e4d0a29c7b7dd46972a7c29d033904d720a3e1389572a6a461df86ea930d1c2bbd5a08e29a49924b6fe8e089e3c70b2c776006b0a82267b72049e36077be9bd00ed79bb3d1595adcb85ef62966aab817ce63dc29b5791f2516b73c9152939812f1e0ecec56770a723969e4ed32ab17a77d58ec4862a84fd033253c9489c7fe75931d4ac8fdd3e01638d3fba94c3f1795f855507edc09d6111dd2ed10706041026d5ac6dcaab7c8ea3eede9f0d8a88b86a77c8861d6f884aca3b456f0bb9a83cc9af6b0517154fd55e95c8d2fc1d80345f496a881db09577f27e8f2e11db54bca99b3659e2a3a41f2f17c16171991987e5b9459e6097e7e593a8aaf69b47af8e9e5b3b021791a58cce4dfb6965b4d0839ea360bbd862d24faed45da96812a5abd68cedfd73a3770dbedcb3a03e6d216230a9642d284b3cedfb38371008d133fc1cc1979069fbe472636be983b0559a6b8d2f08b7527203d22b63c5105c9adeb53f9d50846d77943a8ffb1b9b8d86819032e8ddb33141c12a48f8f4ca4420363494ca5e324311a6f335bb9c86b56fb7fc4182d8448050fb347e17933554313e39ab044ee2a36632b2c317a87bc67ccd55d3e8a9af9148419e73b1002c3f5adca282791b127b344274bfb71bb10498288d08cd480a3252d0394f065aa99ef57c058d90b4afd684a7ed001924a54f68939a63b661d6e40e6730e089dc6bc8ea60107b141c78b1104120b8be1633b93b77c227eb1325c993e0523060c0a0044164f05ad8999f0df1d4e9587a74996d5c7b09326d226bd2e239c6b1e486b4ab69a589f8155d2c3dae2f036114ecfbfa45071f208c0eff2bbacd8b3ff847619887db611853cd78882a34f15388ac219432043d29e546434fcc9853889a3894111129c500228ca54f84c5e2aeb398a87437898a3ed440a91c71181229311282fc04e2ea93f82bb9ca24dc67f4a9f02fa27358b430959d4410b3702d118bcf1ef689ee16a3c045c0c21d2730988c2f1355f9f7c96ca325f6eba54753da1a93eb1ad676330664ba35002436faf9ce627b74c44781b311088c440d380435a7f21c7596a1d5996a0fc2ce1fd06d880d05a00fefde86fa47cfef0a84cf7fc76b1e2450e6ab77ebbd64cd4facafe99cdaa0d0751f2a0ad44016efa9fa49bcb543d25f1c5f0a22595994381a0072b3f37a34aa8c98dd3c073c3d155879ff2339275fe5b7de077c27cbf9049afb5bcb9207a81380e3ef05ad08fa5b521071fc53158768174e8c9160d9c3e287ed2c4602bd9e50439bd312b401a1693e33f4ab686eeef79c810d49ffdafe86cbe9bf16726af74eb586f1b52c01a5fa1b0d57614d70edcdc00ad61d30bb570084fd99684e2754a477973babaa5852bf185f7965e878a41fed829994847824e95b1bee1f8c22631f1d05c7eacc275352a4856d1ec25a713b093fb2653fce10140144cc4aad1fb1c0645510a670c84405037159514c827fbaa733fae621810a298caad59d38f7881759932d77aa1a24ffff25ad6f9e3d892d79bae2ce1138eb031b1830b92420d8169396a64e4109b391a8d86929e8abbca928bd12c8ed654e3ff30f5139120ed02f97a06edc920b4d26e4bb9a5d196c5232aa8d39c947c2e353602947141f21c30cc415793855c1d3a140d26a6f2946cda6b19be40e54abbfc34f5dcebfa3935344ff2c455671a4ca5079ba30a88e1dde4ff96e9cccc1e13529dffceaa8848cb5432c60cb9c385ee160b9ed7c4c69a582961dda3330e72ce4a8e85f6e20393a359578c010d9f7d81eb8e4a88f8a7e29e0a671b7681a01eba361e8fcb1885aad4862d822325c5e5e1c71f1f640faf3077de3ac70383adf49be52706443966d705a9eeae0fad710076b840e071040eb13e617b630a9c4b98d367d1d2d583ebadd707a193bf5e72c5ffd6d92edff46786c980ad4800b3dca8bac507183bbddc313e9cd85da06eb8cf8079770a9f19b1e6e093684cadffe5209b3c6349f8d4cfc72293e2f979141a69a02125c933acf2a9868db18d8d726f10178bc9e4f2e3ae34fd869864489d1b3955c824fe22c01583e537324114b2bbedd1f3d5c099701138483f8df7e3a6613b3c0c28ddc3994f4bc48c80d4fd579f2775a984948626ae696322d5cf80974f3f42886611e6573ff8dc4714cb94ec9261521b77e8ae7dcca0ff2e51cbdb09126689e482e114ccc02985e291030933c2c154a12b849710bdcf084cd6ae42967e83aa374d3bfe2d4eb7282058d4f3b49828caee6d57e75f63b57a0f131248e90acded0a4284792d94baad242a4246a9e77517f8670dd05fc152f2a57a8aa9a7bba9518419dff53e69fe2b2063973ae8250aa7bcc4a6faac6fc3d33e882ae1a5bd7b522bdc2a31b2b5a71979913a4ea56f8de5f8139742946cf7e7cb6d99bf49e229e842db087c1262f25da695a2324cfb3e0afb729da728347adadb6590bf658f7ece8e335ec2a82b934311f02c655d720ade120e7e425df4d37c943e4714f81f05cceaf9ed9fc87bc9e8f0ac4e04023ec9a8cda50012da2247fdecd1a6547bb71144bc7a0dfee83c458be0ef50cfef377247823ebc01ec2a3df29c10632fb87fe629ef5b01174db48b574b0056fc02c3596545524c800f7dbfcc3a428c2b6e627e7bbc6fbf227676efe022323208e938b2ac514a667ca90bd9dcdd297849ea4507c3dfec4742b0042e4dfd1d67b379cc30ce8ec05880318d0ed48645c8b8b5667169af468746b88c35efd3f6d45c6fd73e8893fe28d948d931db7d523a0b657988aeac34e3b5dc5e46cce02a04282511f32f32c0654bcd9c27e86242f89d32df8a0b088d415e53f3e2958d4922e0a10c8ecdbf7a7d0fa07128d033bb039383ec841172567b7fa74f9eaf636e8acca5e3cab67fe41a16792373522bb3002802c694a001bffe8db28088c568d68bca04fadf3225b71e55b2969af33e659abc540bfd727f8ca080295278ba5ed8481d47eaa6480e374e51573efb4b55b03520a028ffe2db32efedb1c663ddfe049bf872f6421f93f3cd74f33df9f19b895663270ca41511673595dbecb847a117324eae94503bbf379bf958dbbb4b6666cb182789468324a4ed178578ad91b2145ff390f661554ee42500c524c2a5d26364e49f20c5052ef7b803d03e87605f02f2bd8eefdc49e8d7d26fcad7126aec9828af3ee258d28cd821a297e9ab357912db8e369ed1d76da0c2974ac5cc916ba73f13b0c0be1e7591e823d9de2cb541a467aba8880bf2788f94d2efa2a4e15d557ebb0544f498d0cec6b03f32b176117b1c5219711060b7180c3854da1029ad915ea8586ef2d232d578858efad298d649645f43f8af8d47a27cfc9174b5ec12e3ce8bad57a4796154be4fccb37255074bbe4ce343f94209b99fa21266e20bd8afa394604cbe573c5c3fa6be0ca0f8a9fabcdc1077cd4f9783c4d1f75efc43183f749015f2639d3ecf2ac2880c70b3703886168741fabedf4a0713afd76e07f644ba27c302f086cc67dcc91ba81c40af759258bbb4db725f10e789f8fcf1ce415f3eefe38637a079258091e9a7a383362be1b65e25210974b30a44677fbecdcbe1b4bbaa9cecf3b18005e89afd9c66caf9ed1ee128ded3d82bcb692399275a64d14ef916271c48706be24335ac9b99b56932ed050db9603e808e75f69740542ea0f7c434a8b3cfc72933863d76e61a324ff898dbc7bc29b36330e6a952c8c814309f09c5d253b192c77a2dc30bdc9bf2eb865608c568a35d938d9cfdae9d04832f55ccf83f27b158a1eb849ac17a4fc378b038a11075ccc513e8cf5cc7c4c1a3feb0201ce6c22685015b0ebc21f608d7d00c214ced1d1511e409f26f4a69e74cc7003007afc6f06468a4033ce3b40158102534022712aa2260017eadfd185a799344d7141b1f46b532a52ba6e4a1d97ff33c807785cee2a1817ee5f28e6df495efb2e54d8e00688a3268d9e13a6a57eb7365760f1894342f314ba759b2072f424268e5cd2dcd5d070d3eccef06800cc8551642518d8db0eb76e8b57bdc684f15292c9d1b92f7d89f1d203e52e7dae366fab838245bccde628c373657d9804adbada52bbcbe33c0a74f2602b34cab1fdcc52ef458ec4a5a40a63c208965dfb09b43bef8c3880a102fba83ae7c2119a00606ce0cfa1f6b1e405b379538c1d2627aa97cfd3209e56eb0bd660e088791c5970ef9cbcd08a62aa39f46a0927728ae240388f964a5167f0f349c24f3cdfd33e8207bc55134f968b77047d0c9f491d25afe87854ef3fff9f0a6ac0e283d974ae80807eab01922328e3848795dc04847471d41ecef36dec93e58f57e031078b7421ed5d2c856906c94208120bf5ae3fe41d553de380811b312f9ed9b8b955166165e4e17dfa858bf4e050cbb8397335686610224417a7c64527c5a2eea397f5df025f06a39d49d36cbdb11f1bcd1d55bbc17adc5d5dd788ae45db0619b572ea9b903a0d3f42b08af49ac6d673c7cde3100de5819e1cdf872cb77eb07cd154125f78604cc2e4f57012052b29fe75f2adbc635b4e68fc9769378d142b2966ecb3a76a79eb546cc4744d9c1257b367c6e2c00af45175fd74ebeac1572861cc58cb5a7e231d336834bd99e41349df19e8b9d61882f66c6a22215e76b801c936fe340d4f133965389db24ce4c4bdcccbd51ed21463a8130e10675018c20b99d090372368508b09f50638adcbfa0f3fd04254273c3e24d2540891cb8cdcabff103ed027373f0f1986eda0823481ebcb99386419772d64018ce8fb452cf331cb209e9ea9c511c312a3f1a7ee31c8695da60761bb1ab4bb1302e6ed918bb08cf93ad3423418e67783492b284f3e2af2c425027076b4b47e2b60fa7a74cde2f111a48f8bb9d1ffb7182a3e6c302d59b48e91581b727b95900eb8a779cd4ef357212f13d086445c7bb4f7ecbd016f67f2b697ee552693ee3f20d2daaed9bc89e364f5a7ccfc632d1b19a58134374203dfe303fe53b542273fa167487927f11667be1d910944acc0a6e26e3bb70745967f0d94d278bc798d42df256b11bb8687ed5a00e4a00b80f2f7dd558e031e55d27dfcfce380cc41b96cf59a34d6a4a3611189a4b7fead4e0900a7158bfd13a7a9711155cd317c5e17630f9890090f27c19fae0470fa6da8af55eccc5bd04b8773529d27228e22ca30aa39d6d69f096a02dc9877a290dc289c549238e901224fa24f2d9c86dc0a22ea9b03f55c25312f39ed454588bf7f31a40b2f980d4fea1ce7a121be24b04b96f2d99d418619ed34184dd446d73e23a38b430774758797be6504008a9e8154c342eed8d79ad3c058597dad93da4705e5f3a4824bc21cc9cab347fb85eb126ab2bc651144542a7b62dc0ac9b8e1c95919594f008d4055299fc762e1c47895f8af2e3381b0c466fad562488ea6d012f7714df8c4615212805c851db077945468921e3eb9f3c3991848d41be9b3369d93f5d1e396a00ffcee40c2bbde0699bb2773dc629e36af9db33570ad56b7cef85fc19ff7344d9cf65b31d3c52411781ff762145b2df5a385380e8265f888f2cbaf63e193286a6a35c5ff72d60dd1b4d2c6da57b808c7b58421d424f402405f942b8c94356e9f20544814093afa820b271f25451df6e01fa28913fe01dac99e5f866b59d60016cc5da22c58616ab61e03dfa21d8e32d17ae53fe13fe4de84e11d25c5a540cfc9b7d8f84f0b408ed7654eaaabd993e80f2839df583c47ada559483ab240c78ca9b6a5136bd88cefd6f932497bba5df8b7d68ba319aa83394cd232df8ccae7c2b338f216864a5cf73a2541cb81ccae24128a2295d82fd7cecc5035ea7a48673906382b844907823800e02e3c79b4e87b5c53b51856e7a17993c1f4101053ea1a4eb50bd9d10d91f772357c14efa6452d7c587c07e1314cdc093e229971e2aa91dc6ee48b48754b155ac8ef9e8866685a03b56d402e80661f0c1f5adeec71d968723e603b764e5531b1839288152e34f30257ea9768837a9e7eb4cfe9bfe79c9f3a751608e00dcfad2f24ca339feab6b9952102e18bdfa08600acd717129ec207ea6b41b252b1a6821ad4c2fd02f7ff6513760f68f8ff3d641ce6997394fbcd291d1fe67b3993a5122bede1000e2095c851410087ccac2406f21c0bb4946b25443656c15919568665f43a2cb537f020d644ed82daa4104c4da95c3ff4782488ae4dcc61859ed6cac70078853f18ad5b191b65eec9e578fc49abfc4ab5e97492f2b4f10f56a248bdfecd2896ed10c0b7798d62b7d63c6c527b18ea4365debce0ac5fad8ad1f9c2d6ed90c2beb1f8ba393470f766b524a7c06d24c2d21870ce69fac8eda99c80ec58be9ba029c982f5784f26996a9ecdfcc4a2ff5fb1435ec19ffee46179011f9add10b0a1f47089e8b65320110b4090a586f03d07ab29525b32b60031179aa81770c2879a790414a65496e8ae759189739b0b63150413654da8f707147ab37a357446aa3de3ba72513a052a63c5f050cc0605d3dcaeff8f9741bc4b11034f18a2ed4ce4c5e9783151dbac6c664aaaecbfbc2edd117dd3e9596e59b09dad16607735d59d9bc049de5ff042d8210c57a91129c1d1fac78195223cbacda5368ecd948059e2dad7b13f49a77cf65b63eea94e66201aac66d987e15c5d15b4dfd7d3c0fa5f1eaa6e6878c2b819302b3785cd8e8cd2c740f9e80bad52e75a4e4a1b79c003f44021604af441c1dc810884c6ad7e4428fcc0f84641bb8960a516606f3cdd17354ce80c564c8ac2f1926b1e4280c531e27f401b1a379d7dc620860f2c160834cd7274302528e3f929c035ad3c99c6e2956e0acc10d930677dfbcd27514d84e9a9b1623d48e2c9916040339c88f69e2de89f0f082a94e8bac55986dd295e9db807ef0e33c0c83d28ebe604cda54e83dd67b767b689bf02d65861d518dd22f319f2e88e1a89a1c3a28feea89f8b51aef626df1484621463441707f25395f1bb375920869e500c34c8cca7b0abfa74005eee9c1642ba2e87a3c29a417334e74ea22da336abcf0a9618d7e404d6a4a07e298f7bd27c62e866a4e3f22bb3140c0d015710e6c9f4a9593d04460f4223716bf99751a46a4a13a1c407b1957fb71b105ce6df74a9023f389d5adf7cf0d83ff6178b0030a72a12ce8b9bf9ff08759403e9fab189d5a2eaa0df01e6417601be77cf148da4a1bb2c6b09194f094feaa794ce00155f03244324dd87b53d0e54e4c65cb18c24e285db5ea3e4fa1a5f32ff785506cd1d557548adef9f3f6783d4a06c2e2bc869d88e2f65dd7ccc84385fab555dfc5be4f2f479417b208fd312f35a2ef20f58d57037136558931f23b9b8047d968c6e04af37ec3a161a68f89fd0f4ac38a32cb78b6c629ff587d8a21175c81a3c686bf51871e21f238a6c21ca271dcdaa238166bc6090c9670415df90613dfd138b9648b59efa8010891cc1c75c892d3f5d6b7bb3ef49a5c74e8c009adc8864f768a9af4342b24bb69e84606a064aea09ef59a62d40937f8c6bb062d8b83e0dcad909a922e3f285befc26ac0aa9ea6b20519a8db44871d09fe401180b861a3941cc6abf45304b31749b81dfdea4283cc05cf1e41353536bd2c696817a144919a8dc49525e06ea776209ac3e4fbf2c26492578a0d6672bbe1a28853e2368d364b4dbba8bad03535452a6a378bb4cf26afd38bf82ef297f3016a4a2781de6d168ffe161580ef3e511b9e4f42a387c9ce600db0cda29d84cc0bad2b74fa4cd5c314d6ad244a51e3424a2452c326b81b2b5889855740da2be211a178a4475c3b411a8110c2af6d81202efb679aa499c03705da87812e1e14727e282879efdf9636befa36b5b835f026f1536d6bf09ceaf46348778b8b5ffeba71f818f1120f3000a8bd78cfe8fce408cd1603e8fe009267673cf3945c3668716c2e8ce6d5b167d8ffb4217eb50b49b26da92604f37e97a8f7dcd3cc6cc8d021d5e27295ab65819506cb637ee97ca76f7fd45646f8b14233813c1d8d79c3cd58f4156e10006e81813cc2410b2bf4012e66f1d6dcfbb91d33582a20d4da7e253683f652b813e01b7f112fb710b53bdfd40bda4d0501ab8cdc25d4174b9f1a8b006d912b87b9d6cd95c299accab395f835eb32b1ee6b2ea843507b9b620be5f6a423ab5951ada40c6b6cc3e66e230b5966d922328973080213a366274ee9aa3242ec40481fb49f6085c34b02a125b43ded3e1e618e1248a36b63ed4285f0eb63965e09e900142d9738091de0c07791b9548691bdc72e7179a2ac7b7ebaf7546fd01cddb4267332cd539ddf63f9756d1b7f6f0ddaa13559e4365d6067b25c570516914a93ecaab0060ecd06cb12b3e6cfe4ad37080da6630947629561fc28a6e0e0bccd61c1ce4ea759dbae9acb736cb456f11d0da1d95ce6acafdb9f139f56e5dcf92f3d7195bddf4f60789f975b6d3faa897284e12f806363d388ae8b5b3036300b7349d7f7218ee62f55c9952174ee7046f5e46de25b9a4d9605cee5eb64718c2f3780ab66c75c3d483a5effa53a6ebefc155e7747deb0c6058f0997b9b4d3c2245906827930d09bc50e5a5ffc51b21b0bfc9b844ea5c8700e8bfe062300727cbee2c2c9e1f087094c1427cd53806cb555097a126393649f73c5a601d33a46502e4ee655835c7b659c5392bc95834080b2d1d2cfe54ec631ad5d463eff12bcb62e937b3cafd39991c277527943059141c2d86c69b92ab3c0fa1d9ff1c9f58aef844f098bb5e31de4b4023009732456bef7c10e8af7e7ebbf2937eda84746d06a2c00577125b73a246927dbdd89d44f1d7c877d4778df513417f8e67c144300c87cffb672c4e30a07ef93e22dae8631239b26497f43954c4296ebb3cdcb6ec8103814b36727ded618fcc2b200cf76b7a55fbf2f90583f146046df107b3de4252754ebc386b9c6cc37a1082a302a7de4c106a5dc21292cb267ff850a5f24e9c3ad2d3e11a602e6133d27b420656342390d32ed2b00816e17f954ca9cc20f7cd78f11913de81fdc0f1fb8904edd63d10659f05abaab88692ee3973b34ef8272ed423710bbbd69494fe72952928f1cc3c9314572aa69207aae1df478d45ca8cf2fdfaa9270ccc988ed4d782d62a7dfd1354140c75223ded185cdc2c38638aaa0e9b9e47c752cfd986d8b83120dafa889ff57af071af28adcb2b690c5ee135c920576ec13342cc028e14e83d2dd4eadda2035c6426e5c05d3b9fbdecb1f278c26e7af41a117879912d6a54f160b5bdaa958d1b17d3bbe270b39516079ece025fbdb53b5629fba21b46fc6e919effdfbf1a44b02778dce1d725d6fe61a5a5f73de5bb16556f0023dba8bb370937a702b0919b4bb7e9a79f44aa44f8c0bf3d69ce51f502ed7f582e1d550a35614333a0b3a30f6f67020e40eb3cb9e6e2b1dd66125da67bfc5ff1669ed8699c5511a14e7cd29cdd4d0dfa2e59b413bb2a21c05fe5751ea87f2e64f7b76390c7ef89f8f7ee1af419c7314c47931ad56563c137185fb96788e036c699612359771290b77c78ee7deea1086554b5ce7f2b20fcddcdf6c349d1cfacf864c36f433485f03c5f4a981050198723ddf10a8c9440f6e0c33f25a2f28e8af1dc56cbc6d368aca8331aa022585c0627f8e939a365052b76dbc702edc64147244986599d6bf9f5887686fd58fc6f56370ca71eea536368ece4fd2c3b2ec66909a6a5514363f4972c2fc9d8a3f5352153e0877d61bed18e4331258873aa961133556b7aae62542b98f68d81c0cbf2602b12217fc76d98f76d0c5d85b3112232eabe78cbf195dc249ec8247f551a324395a22e6ccfb47ab276c663492c289c4a01ec72967f8dde5f59ec2ba55a7eb7429c4878bacb1bdd55feb1e06eedcbf11f00ab8bff363191a5b291fcfc3e35c56711bdc1bb194756848039121bdcdbe85d36844fc54e2e2183c367c6b45dd9563efd28e88926f1acb93d0ec48b68ed4749e2c221ac07acfaa47ffe0570caf22f85ac16ff8d3ec13372dae6f5589e3d974f0b6ffb04c24ba2913ea64e3757a481084b07e57c5032ce49285dfefb8fad9c427134d945123e942aeecb7d5cb623d075d262f073582b1718e491811496c9edfc341ac64bec71664a2f94e3cad4ec1195500d748474c261f8645ee804cb25fc7bc4f222d7d47ab954c8b3a8cf412c166a2be85e1134941601b49e28838145e0005863a2e9e4ed4b56fb65cb1ea61c62cffa46d8ba3806393b4396d6f0dfed077ea6b3b786cb9d466a50c7a86e3c6fe17fabc828c3b6a16c83a1b1f4b58fe84ff463010643db533857f8ad89bd08d440adc6cf0dbb129035b31d2ad2504991df6bd987d454529f4385d42af92fb55508d295c11664fb559b42d23337f153f102c2475627e142aa9838e5bc31d36bdfd9648f1c9620e53e6731ddf266a66dd091e0a73727f9708d420df2db3ef4cef04f21795eca7f15ef159db7ef0cf64b473ed5c1e11b7414f39ccbe09773a13c8311cff68be02c66b3088dd617055fd960b2686fdc4717c0abf7c806bbf963256bd50b9500e9f56a992a04b5493847a6bae207aa3fb8b6615dc500506fe19da33a887712060d41bc541b2d48beef3597625397706ed134ac0b50b0d6fe8f2803b9468c976fc275cd16ae945303e1dc9acd5b0694402756e5a42b5b58bb6db1f3ad2b13354f12d438212758947aa91ff7ca9dbb9d93bdb1b338837e0e712351eaaacdd504f3d1c7daba352584b693f1b017f5d46c5ee384e0d56b9cb9679a618ed9578dac2a23c39520740b01e4ac842acf8ab18e3f87a3ae82c94b7a0902c6123596dc87cde81812322e0bd99447a694242b9090697a114d108d031429dc032260b45e6b35adc57dcb63b07a175bc28be198168e4a530ad0b5eb5dffe5a6062810955839da8b4f33287a9ace2cd724ccc8f2b0793aaf2604a5bf35252588acd00311b0d05997306b2d2415d294b8980a33504465f4b57978de1dbc9c98f52c4c734be91c66dcd8244387773ab94a68961723c3a3221acb752ad4eaf5eb892f1b12a601e236ceaeb5dc7a8394b5717202a6529350365f66c4610c4021a440e1fe89c0d6b5b57d09f4d47588678c65ad4f7d5952298d10ef555957a15f9454b9c604df6bd65aaebe2a55510d40cf19b67abbf6aa502535003dbb55752dda5741956a6438cb505d06bb81e0b790a89486e3c0d40e5f80125a0c63786e9a1766212f5fe337294f88d7add46391ff5789b71fc626fc2f133713c522f957096f1bc6baa124f1c14af64c58404ccccb3b3ffbcac9e842b761ba4ac7a709639197e0b75371f9fbc8b008cd7857815400f73d1a0f804660413b374632eca918dd3447e8411772b949862be68ecd0532836e93183e6b1a17aadc566e5f824134e72949a40dfc1d99ce89f25a44cdb3a978357bfc364431ccc84066091a4b5a4a73a489fd6301b74bd169b1d8c1a80e21a811c241bc6c98d2020e493a0326d6c264644ec4c887cb042d56475e555eb6810c625a8c0255c2a0ad99fd8cf0b6cb2cdd19f3c1ddf6929d5fbf48c8f1674c96598fd7ad35f999d1c64f94e6b01f74842e66792d87fa7477fa09d001c3eb0ae8b8d40b71ab0c2c67f334eabb36c97885b59e44465ee43b425992866d9aa5b78ff28685822378c801a5bcea1ab9c26f5bd5697b7784e877ec6e3db18e85605fec1540cd3cb4a141c5001082c97156119ead7b518fdf35725c9a2aa0613cebffa6711aaa3b92eaed30aeafcb751dcf044609edffa793c1dd90e62c30e3b8b45bb6b4ff333c10c475aae79cf40bf28c929543ab94bb0470fb00ced9a3cc7890611a984414698427e0a7616a948d42e18e16c5b63053093e5899b526ccefd8460d02a5f934f49351d6341dbc3fa8b8e91df3b4629ba5cab40f5b650d6eb2407b816f2985cb49c91b7caca691bbbcf454f2591ce6fa7efa173729d6638ea43a7c5a909bf72313dab0d61308fb303d7c96fd22455d1d78ec56079cec2cc6a0b7c5d6c8c1929a768710727440bb2b3a80bf66e36a8e4b6e7a0f89cf52757c96f9a62b0044c1fd4de21038450033b6de47bf9c33bebef6d9470872cec817d26e2039a9507b3efc342aced3d8c157a1e31b54105905742387c6886904250f79d0422ccc6d434f96d9588cf32883948c26c64f4c6f55f4a22072d438b0d9d24ed4343486a33e22f04459625ce2eee4a4321367ad9fb727943a90c65746bc6025df18006b2bca9f112e4080ea957105e3fcf802706bab67ad26499f5c6054c9b619831661b77e0937fc76d8e05979375d63fd4e6b457d18c3c1f0de368b6e5e0bf8412e10c283f2b383a4807373d261ce8d91fe5c46da18abd1cc5df424df288dd0facbde848f8a046e8ea48c6f9d503c319cd2cf41b83629ac5055a171c552e2d2ba014646952614c7e4b1fa5e1803c980f98aaad87dc683837b0c1856b2a9516a703993c4fe1e0449e1da704c1e58302131b7e6b437d62e25f1239380371e6fb21f6bed6e65b0d482ae86650280a96269d6f99c89396b8705f6b84fdbbfd11620297c9b94844c6248a42661cc8994504a7147f9e16423dac9ecb8c292cac1bf52b4988b714503e1ee1c31ec22b26c151db0a74e60460feef8493be32a6281cd3cfc88787b16199fce15e3593b4949e9c204c9c967b25e145435bdfd4615414b493b31494143189ac070a56baa4dc022e038b83a9c660de396694746acf23adaa8518b32986b2a071c669c4cde4b1893beafce1b3c912c89721ee26e262f195fe05a2e05d8a428d9c5f33fd9b08b69d5af077bb8fdd61c83a8762e851a4e92efdb26ff5d95d50b1ee3f70eafc276432e1a3a4fa4c17b04f5cbaa3c6f26f1e138d49a03aae356955a2010b34a07023e9d9fb8a2fd0eb7d71911278fb9c0fb728d4f6df1a98b838df5654ab907eabc03d5e638a950559c0b0c385415a04095f6961c5106efec93ed305a03f78ba2bff69231b0814565434412b2b7dc5bee2d654a520670090d0927095c839cdffcebe6bd202f090889df4f4048fc5efffdcdffa0a0ca0ba488df4be65b2f6f6488f06c6f9b454532532b14cf59a65414e5ad4eacd43ba36cc249f471158a9332fdeb3ece0334c50055069ae28c481e94be2a9056e5592479d06f7dc1f3bb975db805a6d9049abf2026dc6ccfc9fcd0ccb7fede8039fe05e2781bd0bf066ca42dd39d4cfb29a54bf4fb1cfff37d0effef6bf8e33d8e10a8df7b207d037eff02bdb701a558034ab1f5f2f1beef02619e0664fd0c885f065c7d0b54bd65fd6a035f3edf4f408adf0ff15e7e1acc0f0de11f52bdf7f44b62c1d0bfb7c87328fd56146e096ddd0a627bd96f7fc8fc2d0ce27ebe0d83a6fc0449d7bf64fffc9f39a77da0f91dbea490284169a5fbf813f107e22fc4ff251fc9ccaffa3f76e697fca029f483faed074dd1c29fede707d997e1ab8612e8b7ffd36fc39ff9db07a980fb7572545dc13629a5946aee5ea7f61a582b3592258c14ae20f2a5535addddb56d7377b7bd3352f953baa437caf654db7ef484d1f3d4be740b52d0010ddbb6e7b6f62c968341185c974518ddcd12c6f5b284e16d1b0925e032f540fdedcb1286cadecebe203586d3e994bad418568cd1c6185263488d51eb9439947279ce29358665434a297ff450f90e685857107468d5b6e01d3058d56a1818e75fdbe88dcb15426b86ad4d62390f4b0833db9b13df62cb0b33e02fcbd996211ab4d4404b192b50bb4293e758bfa2e5a90a8cb39c6969d2c2b46d9d262dd6729447573dc385b15522aa4b3616b8409b386932c4e04ca02ad31a37b42c2acba472931875316d51c354214905253c636a72818911131c8216238b5d35cb991652d96b6206ccca724685863ceacc33a8b4d084bd2c675450e8826f96331fbee878c13459ce7c78f2c10727275895e5cc872780c05a96331f66216811d5ca72f6030d665a40a16bfc3be86a7094575e40ca483a53c943524aefcd52a3b3bb1d06524ae92ea59452b6fc6f4a43f7f64abbbb5b76774b29a50c15dddd5b0addddad6d575c97724e9efa62cd0c8fabec5c985ef6d05852fce983cbf25d23d4308163b26c228a2828b0c6967add245d3df65133e5feb652d4df4abde36d91c74eea273b72a6450db99b28f7efd0b9228beb2ca093a83a15a14a80932324151aa9b1341079eb97e3946a28519aa230a30524b0d4e00c2211065df410050f27f4f00619ddbdc588052765c4a230b9414ce20564746181922d80d822ca1975002a28c480a50ca72c2b882e195801420919941c7d11bbeee578936ff28893bb9745e4eebb0e8b2eb9cbe287dc65e106cc4767efb92f88d73758c090efdfb75f90bbf403a7eb584f479d2333122c4947a96769490aa6ce7162cadc73bf7d41389e0fae5822265abcbdbca20bbbf3b1acd17a4552aeb2675644f917058fae599eaea6fce540adb5f6890b0d771b5554d226b4224bf6afb13aece0eaee767d41e8b4c24a155d647f1a0c458bcc9c99a20a18b2bfcc05d4c002892727ccd0040a09450f5ea2684202cae907c943142f30b38ba2e288ec4ffd5bd69b9a8408e2062849348183e80f739e1d175c40c30e533079a222fa3c727731b2efd0c491bbbbc75098c94153d131e80374ff904b4db2dc4e34c5a0498d183c21850db95fa7470a2a723f901e72cfa668234837e5c043377730854116d97f65a7680204284088620a2c8a2ab23cc902031b7a584d58ccf891fbbf2f48b3a0c052c54deef78ea2d0babb7b87fa4b2c3164ffee0be216567b9ab8a2bb5b4865d292e763c08948735f900e42e72c6f3ccca05041ee7ecd4651c2ddddddf444164be4c9123038b1c69798119523a628523265c411d314e2508e96b81b0f7874b9a66bced91352b2fbbbe5e10795d7f2704b004eb82143e5c689598fdc9f84ce0c78b4796e7162052c3209d35296b31f8ef27893c8f377643963727297b6251dc9d339d9da4f73bf0b07cbba649df0d30e4ff2d425f7913c3649e6cc974ed35a9cc7ce29cfad93eaa7b09dbac06306dec8f4c776ca2864fa5b14e5b19d62a66ca1a44b1ad84fada59d5480df89822fffbae43cd60532673e114c4ae4f9636dcad3893c7fc979a4c8949b9c6c92e491827b0deba49a6702f174634446174aefc8591352f2bc453879eca42e529ee27893f27cea7d4484d43bb39de4f9736c1af2fcd935e469431efb499e3b635ff1345493c8f3e7b879c9f3e768a9642aae02af8a151c2c20e4711e69e922860e799c5ef2cc218f732ae3c7cf4975319be494e76f5e7a6793b2b14d6a93daa436291bb3325bb449d9a399349526524d4267e97e271b366a49796a4a758929d7a1de19ab5195555995c966519ed528cf7a94a7ac265d11c5fbfcd331d10b7d3c677a9f335f7611a5d8fd289f8678df852f9feeaf8f17be3aaa9d9ef0d84e56093c721eabe439f36723b9f0bb92fea99192946c92e7cc5aeb5265b2e10892a81a648ffe10f452f84a024483ece11f820fc82e392a16cb347ccdd85097dca0ec92634e6444b22e2a72d244bdf39a46d326e539df2e59269b6495eed257b91247cef9529ed0030d9870a1e4cb094788f261ce0383f44693a7315a682a42948f5db7e9117e89237d983f7fce23fd49ba48efc8b0ff828141c8ad01c9b343e6c81e6e7442eed91ad88c1d5f2ce003c9f33247fe1450e4e6c9ad002a9f28e5994d31234872cf5ef024f70e2773e905529abadca1d32bc8a3f774244911238d81de915f001f95257b346d3e9572bb5bcf99af9fd0be7eb6d77e0b353a22f1ec2f3d9440c7bcb91a6e6b79caf2bdb5d027f9b59d1a26df2bd5eaa6598e729cf7e4eaa6d98db3ddc6d98ebb9d673dee76defd3cd58aae56de7325efe7a9be950a7b2b2938692525cb67612b593e8c529eead8d45413b54caa090b154d58b43831cda3f964429947f3c994328d5a0c2f51528c29a9fe31136182e30f8985e9626f8559442c98988a94e5b7aa146ddbace5b8eed27bbde7b55cd7ddeb79dff5be4fa55aad308bb258de93a55a61cc62c1c0c4b468abe53d5b2c989898564b4666a62533334343e372d54c9b1a9b9b178e9b1c3874f47c4f84996dbc06c7960833df97d7e0cdbdf11ac4f18930730e9a2387f7cc6155af11b87004ca1387558d2390f944c041951a9cb934decc47f3c1803bf4b08dcdeb355fb5bf7387a305728363975425cb39bb241b1b6a63e36d336de48c6a14caf33dcf69dde8e6bd4d69333f903fd22c250f5a4202cac848fa67961f095eee708606b0e14e29b1b5ac11b82ccdfc3247beb5ae235fd0c4519ee18875b27c21b20b2094c8a18b2836581013e50b711e0b74d1b284ac054b9a5811a5944dbec4bd52de4e060bdc2fb1c09e25dd825cd508d2892b3af7b78193a634f2ebf627c22a73d882fedbefa01e9b0f6298a1d91fbc306a90e9533190f00e3e69477176cc257904e1879c498ac3a1643aa53c31add0e0884c9fbec5ae87e92c91e9f70011e20305834c9f889cd1e08d4cdfc89126997e122f64887de144c694e90c0a8aa32f5c80a444cec078ca7416460f993e5d820205fb17c4311bb9bf314680d1b4d87a34c456f248d171075d5461b15774bbdffb8370bc571c372f7b9215e10fbff71ffe8a18b1458c7c4f47921431528b203de5485204c98bc98abea7573dccd39a777d546c161d6d1b305224aa4a11aefb3bbd1cdf7bffc2e0f72ad0c318ff87bd7f81538401836efef53160d0949f9b7f7d108e5f7539b6b96d7583a718d19193272935242bda2a92ec08ca91cb9cc70158b00c0b9639004b4f8f57443edd1b06b15fc31108e5cd841fe2bffa21fdafbf1ef8e25ec70b891ff8e2c29704f07bff83df7beebdf0e6559fe385c45ba4796c928c2089f9604536343b4e463433f722ccccbd2480fffb1ffc5f0834a5fb1c21108ef0c5bdffeaf177e18feabd10e8267c71feabfff9d7ab3ee65f20ccdb80325f03b65ce08cccc7fc50eb613076b17ee68786647e28e6f1ab68304c4c4b668625625611cfa143aaf79e0883453c47e515c99e6499be143bc9b6ccacfed0121df17b19169da79f04ae3cc328434bac387f0916fd47ffd13943321dd17f0916bfa70f841619cd236cb4c247cef3aaaaaf59d5d49762cdabc25775d5804fa3644792d02f7c714a32ca25dba929b279197524894c6c9c471549c36892230d8b9aa936d5b6fa97cbe66b1e87cd7b604dcd7f6f53f33868fec5d5bc144720d2804f5a2145a6d6da6d8329736274b461a339e7c446ce83012dd8488b1106b4744298b81ab08419334146c91a64faf34854f7f56b18c4cecf841717fad8d4fc36f3343f24f32f4c0346c2357cd808e790e94b6c2479549b773d919abff90a769e9f0f8eaf0183fabdb701836cbee68be0008f780efd1bd0a5c9f0063060034ee1be060cf2ff6c763dcdffb89ec6f535fca1f95708d44f4303bafe05d2bc0df87d0de8f97fff13fe74beaa9f01592f03e28f01efb74018aff524494c566474849474041f61a38661a3a5ad656c58512a45da3df74354dc5f8e53714b4c494a494b4c494a1f4729a594d22e7c6918534a29a59445f153181af3dcf774f5b4a31e55514b875abfcd24fa1bebf1c77420eb3910771dfeee591dfe18160bc378d3a64e9fce4fd230fa5dd75c3797989294b82e69892949c988eca13da54f29a5946e0ff3ad51fafdbd3423f429b7517f23bd3387fe03cdd34fff3ab879acc74fbf9716fa741d97c4944429a5d407261c1afafe0e510974cffa9fee59f8ae54ff797f87bae7be528e7e77bd8fbe6a6529a5f413a2cd8aba151012eb05a3e65db2872acf9d3cc13c730690e7bb7e3e109f3b7b86a6ab612e31bcfbce2698766a9abfa262364929a5924f9b5b5258ca77b96bf68450254f252c383a5dccf2f883c95b2af58e95def11674fb780fa4dde5db6bdc5b0a48b1aeac5c6d3ead93ced5d24ac9257f5cfd8a13f2f69458bbc99a6c51e282c2122e4c69b0b0e589cb0c5c8a665ba420e202e539d27291d4556145d2175092643093e50c08a52965a5b5d6d1ab63cc29bd6ef58ebc851be89c7edbc23778035d7a29a4946a76563a83614c7550d82810337822fb12323afc0c74f0a0bb65504577379db09ba75e93a93f89915d0646649f810a4f58b2bf85799e24838d2f454cbdc0449292e4f2e58a339ee84286c314de430e55d09e2daee4eeb74f4e72bfe6b9fbbbfc688aeceed3cb9d658b2759723ff53c77876294fd4370cfc1c57a1ede6185eceeee4e9dcb0b3a546e5c2d309d479034acfb5b5e8400a45ff6839207c898937becc91b0081f38440e6f45472851b6a7c40f2681a1a29d2b0fe961958763b1057c5fd0480e4e1c20f8c04c83ef6c8ae05ae597e812a61e60e481efef3332279f85f2d78944c42ac65c259ab1a7dd5d0c788e7f857d164d847f27097cbdd2e7911573ee892c77c58c3e6ef08711a36bf6506963fe2e860295f02b958ca7749f952cab752be7ccafd97fbee87cc976190fcf95d1834e5a7fba0f91c97a461cd49494d39e4bee46418c4bd74a0293fdc4b97aec74db99fc34ef7e5ff5c19024df1f0673e170205c9e77e862f0a1434c53f687e47854421a08fe7f45fb0fb6752ff549adffdcf94f3bb57229ffb0b069e49b2c796bbbf48c9f69392d702967916716fc3d1168556ba67b9dde7cba7adbdd8ddb6cd6e2008b539e73ac8beff56b721f76eb76a39d417525fa77e4fedc29efa5dedfb2b095f347cd190d20d94f9d6966d944996eff6fd7fecf640fec37d8740fdda2cf872c2811be86341a3a234788652984bacf80dc97ac4ef9758b15d62c3c4fe3186f20c2de911675e66c59b1f6b0264569c41800c26cefc90f58833ad76d1bc8c72337d682e18401ca68ad2719e666a7218f71488f3786f53f33b744258c36053acca02619e536970f8abc0f67e1cabf75e7eaf0df79521c215562bec87909fd593d402934b128b53d576c615d3ea69d565f5d42b26e769b5564c4cad569554cb913c4000cc1cfa0d0e2d7951ce028caa3c0d3012205318acfead7fb7d0c7bd7f0442599b01ebeb573f64f3de5f07bf6f50f5dd0883c91eaa4c67fee687ccfc4df8aa4368bebff921dfdfa83ec86ffe260cea57bd145720cc7b20eb5f60eb6dc0987781f86b4099d6c3fc50ccb35e5359d19322875fe687865a3f04f3df0fc5fc10eb55200df8d27e067c69bf7a5b5f47c6b46428141ea2527d05877cbf7a0d9480ea8356ffd9eb81af124cf0f1be8409ac40296281d14dfc5eb5c2d230fad25ee7035f5ae8e34d2b26d88a290a46c836cc13edecf6f78768df8541dd6b7fc3a0293fdd6b0fbe7ceefdd7101346e83cbfe9cf9ed3c73afde933b4b59caeeade822ffffbdc0fe9de8641f6bbe7c2a02941dcdf6ae46a20a61d483fb08186c92eddd40577f310a4d3e963b3f265f7fe43ae5f398fb69f48ab1fa2f282beb9fd6a7bd5e6b33d91ed816c2f64fb42e9db7ba18f10cfd980b0803d0c9a523fc8bfbb3fbbfff1f045dfffa5bdf7e14f872ffafd2f6dd3b9449bddb8172276e08b0b7d80780ed23c6ad8b625796b449f0d284521ff1f0fa8e61dc886fe074ab107484f4fbeee7d60cd5f9f1791efbd1fd2ef3fc4fb5718f4bdf71e064df9f9de0b5ff3c3d77cd1bea7e580e94f24fa4d5ae4f275a3e578efe94f3af3f4486673d2303a8d6851974ec41ba0da4822126b786ae3a848346a6aa3896883d194d40b220d4918cc72b684c46bcb2a0967c72c96ecc99b2b07ace910e3a955d264c24d588e80285e7c1a6e12400a2d68a395c38ce5b53cdca25b72bfc547b9514021b74b268a0cb2db28f0e8e1c026ce1b643065bf12d372e50422b2ff6cb58476c0610a2e5cbe20428a14645278e388ca17255e1842f4184461faa6e4d91b3de4f65adc12b7ff36f881816796b32929790327532b9079fe9c3b5722c192a908a8a3de914c4a51d9998aa892fdb727bd3337281b7dfbdd6fcffd10fbdd6f2fc4fdcfe5fabb10084828091311239f14c204259d7eb8ef58cf3d0d57521df8a21cf8a2dd1ff607f57cdcb3422097e738100cc8daeffebae8eabb0f62adbefbefbd7f5116f8a2a19ccf81f8615e48544da518592b049a48464a48329889559d6c1ac92085af1afa0889342f45fce35482f9f9ac079a0234e567fecfea6142a009b50a81a653170241014da6399d3826cea99b536a43021b7cd5b7dbf70ff9272da47851e3281613550ff3537ef0dfbff755ff735f2543fab90f1302f50d1bc9e8fed8b26b84e4322829974149d18033a0c641b5d4bbacf5fdf881a6fcc4fc7d207f990244981f95ea71a80a815a616327a08e09974c11a699582f45d68fadc40a5ff585c42d29bbafc25735da903cc7fd5f48dc9fe27dd5af7eb57ad6ffac9ee5bf525a3d0e817c15ba0a09c973fc393005588adc8f6ec421650feac22f94ee3f449392218c1b6e608ac54467f21c7f2014c85aecde0b5ff4bdff7e74a5ecbf810a588a4e4e4c6e658520b264e9d2854128f8a2a65851841145b13b02955199e7f8bf5e3e503f3847b9a143798e7ff7dcdb50811130b494251479a448dc4f917b232ae336a44c8d5e43a6d8fd14bbf7d1a1b214bd1bfa6c4647a34b657fed86a8ec3f6e46d97f8b6d322d4a93ea9e29fb8b86f449838aca4e99a892e738559a024bb113671ea952136d1a26089067b682917c34e0f9012fd3569ed4b78d4e1f5b2d0f6f5ae7d708af56c366973dc4eeb3d5db465f0b698bfe4080a63bd47b8996bdd6bbff6cb5d7caa387fd89ec3c98ce0fe67729d4a56df3b6af3f6e4f1be66d3fd22df47ee4b1a7c7d62a78c4d85fa7772a486f7a473e6d699e3d2f18ffd0aa2b55fa76db6828b790229158f2a0b4cb985e10ad6cc673b94e4943af7bafb60bbd2c25f59eaa5e4339dd5dbafb7b69e0ec9202e9cad10ab60c56e52f4b1cff42db2895545249259554baeca9ca1ea0efdaf6bed551cb1af8aaafbd0d19307328eb691d87d117354b652e71dba80c8bda6b1b28b3a2f655b35c77bd4fb5c22c9898964c9df9685c3536af1b1c39743c186e80c341071ec072001000efbb2c1a57065706d636cbe9c881e3e66553e3a2999109abcca92feb086438e8c0030f602a1a52c9a37e3dc16b475c896339a79b50aedad641be96039cef68148c7e517e837c6f98af07e6fb7dbe2a1df9ae72e48b71e4cbbac917e6956f8c4dbead9a7c656668f2a571592ee68b2267c035ad7c6d5e30f9dee0c8a1c3e3fecb170c6fbe1be0781c071d7800cb014000765070e60beb80074c4543cf5e371886b6e7a408f3205fef205fca41c6d1b42f0ad636c8770bf3b560bedce7dbe9c8f7e6c8d7c391ef7793afea95efca265f5c932f8b26df9896e7291c9132c765ae4c2bdf99987c6960f275b1f2adc1f9daacf27da9f2bdf9f2c5e1e59be3e6abe3b97c419b6fb881962f4ecd97039a6f079eaf079eed7c733c80c1541e4e214abfb6a6c57ec11e044e104b74ec54ec0361cae64f2185d38e35661bace145f677d5a088ecff6c10657f181b5d041025da7eb2507098222de1e6ec2a7a27b7940aa4d0f802e5792074e1d2c2be2ce57e49bdfa82146c189186438dd15fb0e6853371995e9c60c0b649862dd3bc02734924813522a80b5803c2a5f026c5b95003ca176adc80851a2bf4106a9c80c61a47a45186175ee8ccd2d882a680b72c676938a5d1a4695c9be175b1a205ee8ba3dbe50922fb4553d7c5081736a828ae4bd20a1a0d9e6c171a66a850b2ad0b110b5030d020890b2f62f042c6851429f082898b590b5da481f42c37ec92ddacdd98a8e2830e555430832a2e5026d8cb72562585c9068ec9720644d4101033a032e056963320b2582a41e8f991c6104d96b32160584ae15e7941c6dcdb8a817156e355ab3eaf6fd79cf5ed85788e6c0a5babd47bbc7d7677b7b5f6758caedcdd322a0020a92d949f561fcfe906a16192877ca17c9bfa9b804afa32fb4b863ed941990c56305f5955d6055b24532be50374e4391dafdcdd9f52ea9e1a31565a8d182beeeebe6d4d965a6ae9a6d533a8ddb45a049dfae2deeb556a37cdbdf9dee7764e9f931661a9a59b56cfa076d36a115add2cd5ea7646d5b4ba1541ad568bb0d4d24dab6750bb69b508346c3bddb82f887dce3bdfecedb44a6f8786ddb44a3727a2bb5da7e4deeb558e3b9239cef3be20f63dff7cb376b34ec4f77d41ec7faef2cdde4eabf47668d84dabd43a11f43f6de59bbd5da5daedd0a0b552ab1161b74a3727c2b16ff6765aa5b743c36e5aa59b1381dd63ac4c295d6e9af67daaad08912b81b052640e9539c491ba04ff44f9ac56b86a5527bbe4199bdd1eb0bdfdd5478208b0c4f80b521f53a308fcf605b1ee5bd5963c168b05e3407a7a7a3a29ac2f88f62c1bd33e2034cf2c2afa411400fce39673ec1f9932d8ff46f4b3a8b347c27132e58e0ac7b914356531315f10ff984f84d9e964ebd27edc787c1c991fb419b38a521f993ee614f941bf0da9481efd5a1855330da714c9a33fc6082976b376721dd7c2022f654f00d7fd00a173b870688afdfe2558e4deb95f82c5ee27c646181fad5ef543bac7ddab3a2d87234926e8f2efdcdddd9d0b5fb5ebdcdddd9dab7177efdedd5baef74fa27a779af7eb2b776ff7d9fc9a1e910da317fc9e057a35dc7717e49e0576ef02277eaed3fe55c3064720d200f7add67677777777afedeeeeee4618d0b2492192879b407f04337709e08cf977ee6fc3235ff0bc558a332ff32a508aadcf6768f5aa18f03e0d08d302a7d8e0cbe7a3e0cb87fb094891fb21dddff9f9c4acdaddddddddddbd03a5c4719690d6303458bc84db48725103983cbb280c2bc46562a71779ce2e1deb9deee7f7d09cf327549e515e5cc8f7e9fdee0b7229878612948933d008b259cdcb1501b99e51c58c2f9800eee456f806eeffc396e1247b1960648f5a22bb1946d967661841c62c3b6ea37c27b7065ec2f885b0d64209c2e630460daf4c3f3bfef3aff64d82cedba645a0be3fa04e3fe1cade713a028dc5a6845590045d2b102dc1df981aa163333441933ceaf7cfcf49d0599b92aa4af0ac8572870e31ad7bf777c3e87cdc43c51a8581481ea128455336f090e5e90534c4f942248f10122ff8d2c3540b76787286387b8a8f17037afae8a78ff388a9830d76f383f95a138cf388b1e48140174cc2c09285951f8cc4f92ec9d38aa1c9d3134b98803213a714b5d6dade72ea78aab5d61764b9d65a6bad75d65abfd62ae5d471546bad454fb9d65a6badb3d65a6badd5bbd6aeb5d6eeeeeeaeddd387e7faddf4d138550d77af9b66e3ee5e5425bbbbbbbb6bd4df9d524aa3b6d7b66936eeee2e4c65777777f7df344a29a5deb9d34a9dbabbdbe9a3f3bb6d61a6c885994c930b4453662903e96e9a2d34dd2a3736e9ce58a1f294326785721e21b3de58f3b0aeec3ab94757cad00d79bc44f7890524260b4479bc5058b7ca55caf32b6d1a82e481c7ce4be7a577a46c96b28763b794fb65b260f950b2c7ccf33b99fc41964f956a51b7347d684b98b2fcb16bca5d972cdf1b02774e59cae943e6f9ddf421b33dd12b123accd8fdfbfb23e104b4865e747baebe9fedb51005af21a216ca3c717b191587a41cc048bf8a5bb8248595a87d8bbde3f563c04a4a3980d13f12dcbb8f564353e4c473d523b5293c0f5f3ef4a512999581b49c69d45a6b6d10ec77afb5d6eaaec504a52771ebdf2a29955eabd75ac34f0dafd5dddd471d9d5a6bad5bb07c5b6badd5ab173332a5d6059b96a6a0cc46a274af9347f945f697dfcf0ba100c8beedc218170e2de121722f8b11eddb6c508475f2d8ca141c63ea8f5b0d81ec926b18456a72946c64fffa13945fc121e27c4a6b100a64962251863199a5485cb5f29c21907c97e7b4b2fda1252dda9725409ccf81b20488168888e7f8cf9ff2c3fdd89f2110ccad962b5fd3344dabf225b869c1a107b4efb207a4d5344dd3b4ee39356d7b9f9bf7a869ad815db63d5859babb7b0be6beeba14496bf436eb95d64471d8b64243577fdf94f5b9aa6699af665399baa92e5574d764adcce876c6badb256ea39617f55964b781185277bcc2c354da334d3f7af2f7ff340fdcec15a69ad74ac5c681a48c2075728f10650aead5d51a1cb6cd7c2b102f1eadfe53b5d00061979dbb46c54d3aa04ebf69bb6bdb6695ac5a15576e55fda06a5b4522a434d0c4cdfab94b28dfbd3872bb3ed9d3624a5b471b892524ab7580f5d3e8d1ff02d1c17b9b4637c197e6a60fa5ad02c675c2855297be4b1beacb2beac52dadc18e0fea7b2c78e3c6a2fb5aa895043291bc605d14450f298a513442a64e90491932c5778236b593ab142176be50a91143b7a22b82014efce2916bce66b42a09a7785342fd3322692441997cbf5ae10c8f5adf0351302cd84a05d0282ffa04ba603d4c901c2708037604f183e42943081eec44a02c33cebefdb572dadbe1fcb648f03e486227be0877920fdf180615efb7a7ae45cd2c91496e9d7d878afbd0d5803badcfd7f7e0cf03e86f51f08f3de18035eff8268aef94b245a8679e38d37320c4c389fb0c0e9049c3aa481c72965498759ef8c134aeeeff6f759c5be0eb2870832d37ffd37935e5ea5b2f11f388966d1946dc1abf0ad0c2440c20a275a80861455b2782a362c91a2c4088515546109336bffe1d0fd6c42a2e52b97acab7b0747245af6de5270ecd88c3949354531412d3d51ea4deee4eeeef61decdebbb5bb0fca3c33b7fdcc5b38a540c19fa568300845c1218b2b6ad8a18d1538d1000d54bc3c9531c50b3a348fcc22ab142973cb6c3a6da90255a9cfa19934877ae745642e0561c9828aa4136420c6196273608819a0704852628d29b17f2ef54fa696e21195acc80c6884c911cfe96f8149545809c1f4cc13579848c944e6152650f2bc2b202140a9645c20ce33c5a9f3451704eeaaf8cfef719e7e4f096b2ba863e0870117719e12fcc0830b9e1ce9a08311e2ec22c9288aca96246ac0449cef43e436c1d2cfb812676ce7918961adbecb7d0d5f3f40db57d70b89362f24debc9098e385c47f21317c2111e785c40e5e4884bd909833d382c12aef35ed85449a17126b5e08c70b893a5e48045f48dce085440e5e48f4407e0e887bc030f03d005d58e00e3800619e331f3b611c7003b0270987a00f080a09033f58440748c40b9c03c4011a79c2a3849ab1245f0c78945279be0d388b6ac0290303bbc07944034ea30e0a1ea7d18ccc8c8cdc50e081c2b664a515d38a6135f1929ab060c089c4026792148cc1a9e473a98a81c7a9a4fa54dfccdd5688a62529ed45089b9b62dddddef5ee8744470d21f1dd8eeb380e0a9818141c93cf2620f0387f4e4d1ffd734ec99c3935a77ac9c3114f2ef383f9736a4e354f4dd18eccf31b8908313a694eb593993c36943c5b4a9e5d25cfa7deed858b17ad972697af873a36a7e614140742b43d7832e7d48e62b1180b491a155fe47e985a148bc55c10c252a146ee67d518129b92dc8fe9512c1673b25df162c8fd2b5a148bc58c6260a3e47e150c587449e4fe2f6a72716390fbbda7582c4603199c7fd9aaf092fbbba8582cb6025d21f7734fb158ac058ac22643eeb73478131694dcbff5522c167ba186ee88dcaf25c562b11aa0c064c9fdd505216c0b487c567cc9fd5e0405a724f7370eb11815ab14e4fee9b52bcf8d0b3c3ddb3c9e7605c56183d492a6156243427a57dac6407658cccb8573646c5fe486c26435e96a903050a615e243427250b41cb3fc9f3e5c86a32bcb7f4c454fcf8645bf87a5b9231d595e61424576657985891515624d65285d9952fa418599520e5e28c98005cb6439533aa15b304419d309cf64391b028b2e43303151220d259b124218f9d294941f20f4fcd05172844bc90b727f595e5192a49531b9e93dd5657b6eeea2ae4a35dfdad68eeb582fb870753b7d6bafb5d65a2ba5da9c78b571d6dd7d14caf21231e79cb5c874e94770b694ca23986ed5ddddbfc8bb3c82dbdd6b75c7c1f9e26e4f4d9cfd608949e7830f54dfca66d50733279701f063a8dc5a3233d2c3cffb4810010bd3b47737d7ce079200ad1ead6f2d698551330257e5eac05c1c8d80645111641f816559956e15cc00982bf54c298ba3b4939139fddb370e0e8ee5965aaa8bc032e45107478a12255e03c6697815dc928143815553a46088899ee156965786a850273826cb2b434f7a0ccccaf2cad00aae03c6595e49810d1b6ccc1b3514e11a9460de50a168a50225961a4e543644611a147d333caddc888206ef8698ca8d2516ae11d2e7860e37743728796ec86c88b571860c33884f8edae0c2057106591b4d31d0f0d48695a259a8348c198a921422a211000000008316003020100e8604e2408cc4992eab0e14800e6e964e6452329688834990a3280842c6180208300600608c31668a6c2b00587eee503c70f5865420a8f70594b782e6782feac973bdfa411ba7386e89319203ef383da6cb50d7e3eefa96d71842323813565fd276ce46d2e9d8329b0efef62342217caee420c6649b549e84fd3ca32d426489036282598fd6b5094d638a6191956cc72275dcc41e618074baf354cb154110c5ec2a027d66789657f1a489616faf00fadd37924927dfbc61e19837e3a49cbcf31565c64287ac6d7dab97c8e4e276e7c4e1fb5213609d8787a13046878c647ce2756e6ef0405cdec20df3bc6f80fdf69b4dc7da1a7ca9ba96022a2e3ef82afa5d4df7bb10d8a9a18376ec8d03e16548e67f13ddc13484d74540e0142e03056ade72391b247dd9cf4c8f03c982e35e7a7daad7c9b2fd49dab26c1f2eb80e17d6116a0dbd2d7cec336e5c3fd92e0563ef523b4121f8d289cc63f4e6a90bc76932e049ba26f462adbccafb154bfb273701d3f5a1f58547904662253e2bb5123831fc6ab9063859f5b09a7004ca9df7eb8442d9034f406cc99851b44f8cf0b51d9fc0af5628b8a19a0825b1184dac742fbd7d99392013a874248e722cad73c88785d0d14a8e2521a7614bed8a8bd05b076c2db1561685c34b6ad6f8e6eff9aa058876076c809e13bba8991ea73c4d209a85a6fd939b80e9f6e97a728846f50fdf9f3f67a8a6182c8d3558b8f215c2c3c64bf7ad71db21b812541b858aca66fa3ef4805858e6b09bbce764acaf5b93182ce721902f22e4b420dfefda39b385bca95264ce57e30373f457685a7fa89fa6b48f9f335d2246f23c7d3f94266106d2ef76e80a393562723bcce44f90afdd989ceb03d1e589195c9ec6066ef4c9e72edb35ffbfd12f57c39ba878b018ee74a03b58d0a9585f9204168374abd0838af151e009c9bddb0f8ac4c4a083d715363f1ffb5c682d8ba21b9a994b7b98d72110662b62de8060d7439179aaa94fa785d7788eb4971f9900e78bc00e1ba7bddbc9780470203a04819fa07fcd3c36ddf45ae466a2bb951f6cbac888c3e71ab6444a82fd1d09711ed886e0f19458340461c147351e3cbd8ca02e5dca16f7abcd1c0d96ec7c30578a4fae697637a66b23e570b9026308b57122e3cf3b2188619ff72e60dc4294ea510272383313bcf91f72a0aa1343321678ca38e32487cc9f50943904092458e52c3bd5f5d569b03fedb5f7e391a9dd0a7c3a2c6a76ccfaa725dd3c17a553b2668e6bd0a7fd80f5085021725067d1d3839f77feff129b7f5800d35b8c941e2b3bfe287950fc8ba170990c2ffe378dafe3e84e48d1e81bd1307ba9b8758c0a7fabcf6a1df4f9ce87848b10eaa810f6746fbb24d6a11d1b0da907d389e431f014e699538dae985f593acee1279a58cb15999af94ca66122a7f679827407b30de2e6ca65ba320784050504190a160d789bb0200e80a56995e195dfd26340b508e74e31aacb1549b39c5af8a7a18bd28bfac5f2ab8a79a01092aeb052212637fccb4a6388d41c769f52e1264a853e91e652ead477a79fd0dc0b46ae8b7b37852c06438b49adae822ef96205a19de929b6c9203e75cbfa65212d2ed0d36db920614572f03e6763415f024a1548634c612400e186683fb61deb2047e0dd8bce3f9f284064b14c4b100983b9e34c2973d5c733730aedb1119c4639d7483981e1b949a7aa0d0add5e2d42715874a204cc47f472ccd99fc982bb5555bd33463f24e54e1498def3ed6a29ae8df6491636c4529429aa9c7b3cbe9a3aab2d135d4b34219f1cef1f1c3c365f4df47b7daed1231bc2bf1d959956aa48341ed2e42c2788418044b25ffee9f03438f865f02b75cfae3f381fe4afc1d883c3a8c77ac3113ede3f37f01e6fb51ee31144fd779db4baf152722951dfe0bf201c7e8f2e21c8118ead4490f06ad636c71cf792f3861b7e730bb8fa06ffabf50dbe84f3854aa41b46d2f6ff8169d7bed7c190db1b7ce30a20709a80529c690a912c34dabd0a2eea1b1cd60a1eae8fd708af3a50ac8c050621cc1b36d946f839f63481f54a6968166da01318819b106adb07b3586dc31e695f7b14b7d04d7504c2924312332131bcf94b311518b7b832ffc9b844906d848f2336815dbfb328fd20c0c4af6cbce2a36c2fd1ca59a6510d484a7636e8892ff1518a00ac11577e1844e8680acef86eb6fa8730dbc1dc6c91ed02e85202e0d8c194535a42db3af4ef22c5a685b97d60c6f346b9832f416c5e28ecdd45a4639811b7159928663103beb22c17c3a6985aa86d61eae375b06838785dc9cf33746c4e767eaedfe21236cb714f47d419e2103a69db83af2b5017696f0b0fb88ffdae3f6d31c72219ea631dc29fa415e283d7d7a82c189daaced16e062e792838cd4de133949b49bbd93a89506c9fa315b0d3d443afcb012e2810e6a672e9dfeb031d47a632d4967233d1aea669888291c8d323a04a79bc5a456594959a81d41974f110534216599c256d338f8829c812f9c3630236703dedde44b3b9b091251edc54e0cb0bf731223521a7c028a972527747ec42b00e82bb51d0e15a72a9acb974a31a3a6603fa9c8daefc3ced463ee928f68615ccc2c45579fbe14fa62bef46b7ab6549de312344157644735fc8fdba13a0579fb359e4fbd8cae2733658c0192131936d523972ff2ef430d980c195de9a409a50b883f5676d34439a2274df8e30107c089a0427906a5b66811d96bcde98ad29354b9478e57170866476760f076802704f9b7cb4bc1c8a958313e0ea1a88cc908e254c1f9b48e8fc9233f2760fbcbea9346c77f59e3f5c2e6a9312622e144b535fb4cf90e12392682f697d04fea3af5a919770289754480bb91ab85bccb12e8a232522e80b3d330ee587181b6ff9aef7f0af80c60352d31846d368e480f0e32872c2a161517b1d3a1dbb750bb1b3a6f9892e9aec622ac89ebe782910861b69dc8d2d2c7d6af343934727dbd5a9d7c981ff1acaca4c497f872826bf5843e0e711ae85c1b26c8300fbd0ec324e1391572c11523c03af0df9ca77a7d7849c4209ef14051d19e8c5c7126b186701ee0c50ad76d08e5c759e2cbcfc82aa108514290aa7ab4254293f1d6ca89535651c9707bc3cb925efa50864c43f9924877d3c32073450a0cb0c8397e45f1550401c39a366b4087f13e9223c2a6cfc40f7fc52b5ec28fe5b03c9daff8f1d93a0f2bea80e3b21bf3a633ffafb1f0984a6b33b97ecff522dbb0f1a57e3b3456f5059f943185e72f207aa8a3dc21518bfb86f8dbf03dd76b92b509cdec254564fa577b80e2021c6598fa72536b8f53596650c1c588e99f98e9ca7d9cd8f19cd41881f201c4c66d9919b5e8db5826254647c29d88b63ec046530798af00a9bff31ae8ed184eb20867798bdaa1651ec42c9c09c152fb513ec19dd6936724183c61e1a545cf7656f051aa93d93f134b3bc5ba467fdb1135226fd50cbd47aed47d64f8d45e60cba2c80e6adb79ee0a83e81021b274b6396536bb5681147d702419b99605d1a8805479e230d22a288a21cda59ec3e55c416fddbbc29c1b24472286ae85883c16822b072e0a9a37a9f5c0f20938925f611ee2e88cf5a4c41173b73d4bbd9e881f1b37c4a41a2bd91c9221d46129657d620f14fba540e9483c3b07dbad1e09f4160761418fa24364251e87d2a53d9672509004e3d12a1d2cc1ca733fe22a5beed739b6701e660f4eb5c7deb94b0b4713c9fd4c8a87d3486c2b4437350e64753a728ad6877f3167aee2fa5f69ab637f80e6830d040a3a4a72455035f3c67a40e3a362322110dfa7536d7eda13182d38a2ef07eca12ce86ad34248a9cf518205a6999a1cb46454fe8e188b72d8b94114bb441c58c9bf7008801451c9cdf9751b516da4eda4d31b028426385dcc44a51dd9f8bdc8d497f97dcd1d9841048126aef042373c3f2b70330661914acf6ff6bfa8fb1bcfca21ea2aa0f65910b5a9e57c5a620753bea9c7b986754ab89ab61631d2db47d6d7b0ec13fe768769d44136a1ae4280c5eea1398352e45d407876685d7e206dc3ab4c9985fed2079316c3884a8dc266b201cb398d99cd2e1016482d5413a5a6523356b5c8f5fab0693893a168640878961179ec9deb75090f654d2c078699d16342cfdbcf31bf6f7039e5220343e1f9514498021ae7f4523d7bab8622041d04b3c12d4ed85953858b14dc807bcc259108fb1f83cd478758ab895a90495278d594444859da1349ca01f980d957a3519940b1c64a25e4ff3fd7e03b90d4c46f71d6ae49e2e75d7eb7e0e5972d0491ee268269c9703c6ef4a53f3d46d86d002991e679b733e6ff13b4788ede50518ee508d002243c52e2196b659b6f35bb86bbccd8a2bea40149a0ca9a4ec03b187b110ea4641724ed46e512b966a9d06a009f7b45e8bb59c779271b4dbe5fc3447b363ff43531f96f2c41e04144dc3390ebd62f34fffadbcc06d1a57f7c3e379cce9cd49362838e6fc199c284a46dd08b89e157acb7c966a85e77231da25e63e80aa49972ffb774c181aa1c171100d8285d2581923279c4fb8dbc2efc62b17364be2e0e03f1ec2a67acf406dd32d0a7a719bd1d041417e53f1694c192f4fa8398903c7f1d79e772350e4144db0a2a57a63bf5888e777f689285ac1023086627393a482e3a01abfcf65902d64a4a74684be4534de20d41bdd2276337b5da02d22a79d4d283d7a8833ec8aece8605daefc004053e26c4bbc286af440b51ff94f9111d8873e009be3521d6b8eb10882cf41093f8c10e7d71d37484fe09b6b5cd133b806b652ac09441918143a04387173ed32f6c644cee956a415576803d20a2047bd71630110d55f915f70a01289751ffc2b3221cdc7a838c605658df066601c8cc0fdab7c29746ee54fcf6bda7afd36d7635c86f7087701719595eea458a9c324cbbf154d4638f16c68bba679e2c68a2d5710f457a78324307635d596621730951461bab209515e8d5bacd6d558b1e10dc16736b9fc8950c526693f110a9c6913f219d03c5c28862d7752726508beded4004d991e0cb264dd09d747e45d7d89a71cbd3ea457cd0410085a8eec2cc4cc70a3d1aae6016bd04cd945ea5fe6a393e235b9466e6a8314bd2f7c2cda0c52753b2dae821eb1b08d818f6b0bd5fb0672380de2c7c5de678abf18ec2da1cbe47afaac78ad64efe6b8cc186b1c0ab207886e396072713adf43f9ed04e66f26752de798fb7c5c86700106147f9c503cd995c5c7032fad8c065316f7d2915bef8fc67583a3eb6aaef0881015be94e917f7907edd764e6a4ad47b3fc1d144c1a9bb8c31ec958589f6783316d046cf93d632164b5e8ee65fff82827093f21fa008891e6e82b5af5f23fe5990da1574d508e9cb49ce8fc11ba0e2e82568d4b31b2e31377164561e680d00f56bbd09bd50f701fa124d0ac12b57ede050509362e068252a45573fb40ebaef139f6814d695411e8072a2bdf656018ba0d70814cd27f60b9fb22e065dfd45308ce57a2dfa9d9af0bc758395f753a2e21650c1350c32e4e22ce638057a1262d8bd3efd5be45bd4ead94e6a2859e0632834a50802c1aafe9371bba9023faba9bbdd500ef8b29650ff12101300c5a71689dc7a18284a0759ccc79e528c8cc0dbb16e6f12bf296913592f712b64adfe579607af2bc733311a0185f2788a727d3e4da93c4fa15cfe2752aacf53c2c1f6f1cacb1260fdba7079785d189e0891882997ff1394cae329e1b42d65fd3cd1049ee5037e167a0ff0345b42f5c4c887a0511982d57c3bf7e4de68c2a2fe438d04833937f90885ac2b13f59b636f6b1f0d3b32f0cc4e4ea1c0c97d82714cc6ee28c4a2b1c28efcce8b537828453fc05360c3cb1a371692d5c3d568b2e99c354d2eb92bf6482c92581f28e20c0bf1ec9074164eefb6cb36a9859540365bc25f2af98e23367b3c7542e5fb2151d94ccd17414d27149040ad0107fedee0205207755137af46d5b7854252449f794e2d582939f2c13493eb9ec0c525c18a14b8fe3752227c9d8f4188781eadff7e9e46eba249fb38707b59c814fa78593a6dc7c1952956923a656b33354aeac9015c4ce521c82e75ec2a3212f48a75226cfb03f19d166ce19108bdccc068b5dd04ac030111a8809b7cf49ef74ae38f85bdc94d7f5967075a42dce89f244bccf2b590b9d227ece2e69833f1176e65ca3339ec0bd7c736c5b4bf0761f1834c33dddddf1ce8e532f1be1de2a62601885f01c04a414d8c2a079a70568ae012c82c021d5c403d41b8bd1dc49473a8e206e96a9ace959bf26db7f8de4c9685238cb701bee2d5ebcd3b298949642b0243c71369cce6cea7938eaba56dec42ff7195369377d9636c794aa9799bc59382dcc87752fda37470fccec4bb9ccc2cc477b7a642d4ede1939ed48441fc42a469b58ba5adb0b46299582adfbbe9bcc9c7b51a079e7de25c400a5eaad61838b5fd56f66321f05cef00cbb6e4d54d645433754e8acde803881c69345f73bb11522713c061fb5fc437dfcd142d4ae77a4bb3a547e8ceac3e8bbc4d13a808b66bc4f6cb2249a7490a2f3e7c9a312b6d251228183de0b9e53a15207d4b6be80c41b0c87c23a49f316d390c0029405ea9d14afe6d6503d23ead7b661f8a932424ad0801dc670674e4dfd6facf4545907cdd90fd90ff64b85e49e3d856100fd430a5e5441dbe942e2ce65d1868b21fbd7c49392d0a8269adac51bf75dc6665a25004161987e3098fae5128019cd7de5060511c701ae94845964339a132b0f162fe30f08ba7849c81ebe298a8a6d204ef851a73f357b590a6b30d6e1defcd654bf575ba3ab1b9073350dee1ab5a1431afc1715a4ead4c70cc3072aad7bd5626d04676d70ceeede7f9001f10d5f84aa5e74bcba463d717f584ba1dc0eacbfadc45a0502a90258897c6cee2175425a5fdd9f41cef48ed812072caa146a73b80f2ae0a51f966b78c9122639a7c0d98a6b77706d25ac0ca588cf489d3d48f02b6fc685e82f4deea68e4dc7a29253822bcb63808a1221df602ea5d3f1978e81a0d9c81cc34f377945d5d04b7ff7fc0834d1703b21f1245e4d206dce34e1d20ebfb92e962577f3a348098c19b49282cdcabb3088560564b0fe1657e481fa492af8f13fd7333d114257f0795dbcdd313712c7aaa772bc7c1e7804b1ea872a546f9481a58dab26bc9905b24e5993e6ec41ca3abb1b6ff11e231b6dc9c4ef554449ce8d3e7bd64f6f647a4eebbb68a115ef7fc21f37cad51dcbb1725732261d2c1e2d06bf32dbb91c5a76662547392b6d94428bb27c3c71818d59ca46da91914ba24cfb7d564842685685fcda1d8051d3e4621c2d8efdf2ccaa08ad9788baf17c17ef0c76454315a282f0685d550a50cdee25e0bb777dfa0bcf88ae8249c1817ad9614334cb8222dad6d25adc97063dc7bbb08c99234d520a271e2ee375fc1c0d074d778ed620bf024fbd82e223df88913dff429cc25ad6455424767b5679605d7fd6451c203e31bfd4d348097f3e708f67836fb2450e6486c658c119000858e9a060beeca09e2f3e883b46d5fff50978e0d30a19e01ad79027bf014b03a8bc0ac90bd9e0deb0a731cf3e7f06da1ab059fc1600bee859400877388cac6c5835abe7c1fd2633e69322ee3bf0835fa5e821afcab6c71c0f285823ff4a88ec18f66819ebbf25ac2a48c7d0489c5d939764329d718c8f8627861b109d94572dd42a64bc0b741e47282c62d1fe69f41e6ca1c02c41aca3529231c2e20ccab17d6cdca75ce561e1531917e2f0256a86abfa1f94b1c8c4d5893ee8315c2076d895de8f80ab9e6ca9630c313c2389a21b62130fd2ef231d4a746b784735007c0a4b8d8e6de9eeeb7ba817fef017b6c254c9c3b3e7598c70882c061fd64fded139da506ec04a4b8ae6a315886fccd0285b547f47942b631286ddba58f24f463fb2d83622efb138e68542d9e07e93f4d57c8ce1a0d884c0ee24c2b6233cdc5dab84ca3d11b7d56b93ffcfd8639516396103b4cae3426268c342bd2fdc510f85cd78fb2ef833a9b3d2d515a11bf0523dd3aa831f10eb572a06fb670fc4536a231efd10b669ec43d3f913156be6c46ed822663efd019e1b029a8cbf811bdc113c79115529c0b45233e083a62280b9bfb81e3501628186393a1e87925a5bca741a6b0468fb2edc1d0b3fdf25761e01f3f938bc07e19dd1b5c0acddf932cc9507cb304780555ac91cd52795e86da57c78f10cea5785ba6cde26170a6c9d74e2beef85f62f54e8aca510c52bba8acde5bb3c6c66e30db695fba703a4d982d47f34f8ae4d81a7c3fa9a21d8b403116fee1af02c7532820273b48a551ef623813d08d5e81c08663e97229929f96bc9fee6390f9b02a5733f3fcf8516165223574d39f60e35fcd2bfe2a4763d22986f072ff98abb87caf1191cccb119bfa003eed3ec1b853da267e139f3a314418f84cf1aee0059f263885d054a79d6681033726f0d5170595833352d704d96018667a6e251ac0ae437184b3118ea0d25995da951fb49ab0ec53f7b5552c12973080c412e1e588e34dd2104416c4b9a5c34f68a95dcfe4efb875eeb73fbc3afe6381be853ab85f8e1748a591b638e7d5690c30e5a8e2b090115692248fa15d11eedc757717b9f310a3dcfd8b01267a54fc411dfab4207a66d6398b751b4f5920c0c96e77fad722a53d5c35e5792bad71c6078fc80549642ed6824ed858aaf4d309ee8139081c1a3bc9b4ff76371c63edc14b4036eb8f2f1254f92f686f6230c38b54f135b0410794499cbb2cf5a11c9b31523ff4a0e36580dd8376c72c6640e6f4341d4ee7cf2f164644786e0b573ec2c7fec8273a0ef2e98f5493927c0de5710d3a92d5c3785db3730b6a0b9cee8aeafe464e27bcf593932007b4c7bb8bb6b36caa226706f3513eb42480a4bc4f60ad170f55ee6592dd0a000785b213eca6063e720c9a988a6f3966e033d5200d9e5dd5d7446b47625be207fdad05452069adb65c1337015929c4c8b41cc47fce8ebabfc26ddeee06b88f1a391d35fdd4a183cb1c92245c4784f9e5e93d0835cfa3c59a8ed44344b471fe244c18fb342c75397525da15b16bd1fd8bb1ba8f2879df74a7b7df515a04342fc0afad494fa41682233d113833fcba4bbd6e9e5da41b3730c9f9a4679a85f91fd35b8d0b282316fdb6bb569bc4be571821dec92186f754cdb63e566802b249bab817254bc99424ceb671c7a020640c72762b83b95375fd7c5fe1882d52c2069fbefaf0448c3b206f211a469a936314dac7660f73bc4a6d7a192660cbdef4f086cbd97c448234890bcaf28edd0058394ae09d7b192d4d7be18afa2f996fae7c3f6ec0a03a50c30cfdd5cdc41e10770a7eeb28b7e835a7712ed1f17d9568b8c7505d8d6506a6e2c906a14c8f40e361a5b33106ed05b7da0ed376013bbc818d459c4a8966eb8ab856fa1b80b99c1e62dbf782e3459420e3c4d9d936039a638083b47e4db94da17e51d120462f6ec3e424d45c361207089cdb794e05baff946c710405ee54746b02ca50341dee908dbd3cb6b1a3e316100ce46d47dc85ac45d09112002484c112a7497ac5d1dadc6438ba4b539ada75af3e74e67919eaf39caf86e3c0b729d62a40196eefe29444e62e639b7c96cb65d37db2b8dd9561774db0e5c5e8eae510a6d7ef0b798ecc733e36860733e740921f7c56be0fe3081e805abd797da60193dd5943205d968989d74b995fe973450b70d78a23db0da4c6e69870441600cbff4cadde4870d516277bbb75d136d85bd43437f1b53696d8408d07677fb3b65cd2b1b62d1cc5e8cb8023b319381e6177df685b2e1761b803738ebb365120a383110a72382623480d397f7e7116b7bb4f018f65fa56af6683ca8143a680fb9382d713c9ecc7b3b0d52b2dca4c5992dd34f3d50c2ed9b7ba984b5b9f118c543d23c2b67ec3180828449b738a894e5f2531619204894adcadf238f438c44fcac976b5353410b28fda77b2910352b7c04076da495a9879f8ec94e36b7f83d57f6909979fa984843f179f8061a8fdb569e42e3620ee249455b3d3b0c6e940904eed803b958539a18019f8e07c0d9decb3da081286ceccf8a0e8196fbac198b859d433c9a60abeec42c8615bd9b719555c34eef6748a49878dfc0916ce198ed94d1666e7cc98dd2289650d37b79b9bad9dedeee66e77773392c78ab393c984d97ce27c3231319b9e9c4ecc26ea14c834475f8eb6ffa5a1de90f7e9be483feead23b36682e787b53696179938e9fc4128f67c578acac7db86842f6b0d9b79a93af4963b63f7342ed4a871b7d86836e778e90c4a724242db2bddd657282cae41f312742318bd9583440987019a7e63b98bd851fbd071a59e724f857e045a0abadeabb0fb665ede73c6abbc45acaf58e44204658d1975f92568e8d9f769e7a1ff328fa29ea480db57ee784cb40b89e29e45d48a491a8cbfbb011529b5287b776ff886b50bc0c5fc10c592b6b5d9520b4b67d7228cb214dd1d18e2e8eb14b24a99956d0fadd11f6c99db8530c2ac953bb121cf76ac33c0a079dc8e0132fdb663dc6e3bc5efba6d47094bbcb6f729f38e4edb3378b41d8f5dc89c7c36dbbde2b27dbb4eb66ffb637b0a0d2db637dc34f551e2bf5d33b6e85849d1ffe46088b8963d2853ecc5f7c08ea112470871e27ae63137bb0bd7fdaf61ae445c514b76da94fae4d21928aa318d8836ed48d293d7b5096a2fca810a0d57508a2a41f152046caca7c19bfea23aed6d52e5221aa69291c80f9d65f026765e7e5a84485ad8e7005a77765a7b73c54a99e8f3afb43310caa8a529e8086fdbf016cdd53d232c86a63e738f6a70fa69cd1b906fdf0494e02ee8162cae7fd435f4e2a9ec656c0f9f2446290f0fe7706b511729b494707ebbe04a8ede9e772456fcebc5587705fe1ee4fdf7d9d5c186c47cebb175a7686f2efd53db11c2874b855165b5c215464cae09bd647ed2204cc57d4b4dfdd08415665acaef391ddc7fe69e6b5b8272643a26220c9e01062f2eb62e56723e252c8a51365fdb3f25bef83c5534e87cb9898cc30cf4c470eb4848235c66d80a5ca3eb843eacd0265f5dfbd6ba76af1eca0f64dd12367d4b71ec190a9ba7627cf867e5681c92bfc309361d19e9184ea8d2f5bccb338981436c017d074582942cb59fc3cf76a7111a5e66f765bf0ebc938132485d66179bb9bf3d7bcebc31b1eb3deffa5c911f320a2f2019dc64da36f6a0ddf190f87c2d49e535b9977d2f02327c272ee97dd2528e68218fd5228b802597e9e9ff88e3aa51b53fbb1f2ba2518f88da8beb6a17738d1b67b30ad1390ac28e8792c7c5042eae8c4998cc798185eeddf433c1161dc80f7958bb9e477503bc7524b9eddc5404b1ce41d21ca820ce9ee82e2f6c72188822ba13693cd619a467dcffbc83db9d7520b0b63c79c529e0e418ff0d845aed5d7ce7b378cc4887fb2a4113cab6bb2750db95aef199e19970c0488d0b6f6f9d42a19b72f9ae2c466840e8db98b6f9d11b905c79f3478b6a2896ab91c2192656a445332c57cc8c0c2837b3867ac0930fc3c9ac1463ac88d630463c7144b5e698cb42e3fb9992232b44a5080610d6acbdba87c9a0227f3929a0c220e6b4cadcc17e9808809e455ef38449646ad4aab9a164b3ceaba225225f81b9be2fc21980c5a298eee446e683258d3f16433736606131b918ecdfb9bd51976a133a71e681034c3c58531d96eefda7f74f7adae4d09a6a128ec851082d3eca3d31396e9575399c48b5adfdf7fc4f2f9c802f64eff6bf3763236143f46efefac60d0476be38a577993881a9d0ee0a0ad07ea8e6e65f50ce2c0ecb1397d888da4d6d25c0b10366bdc6d14775cc8f7ffa7ff47edc74eecedefba47716db3650210faab8bbb8836296b987f862b37ffe4f20414d3b66d4de5dcbf5a440278cf21c05518e9d6472479d07786071aef326bf660d5085e77a0236492ef0f1bec96d00c167414de23e08fe7d38bb6d3409f6e63a8eb652b32b409c3148713970ca9ce03e6100a2d68e5f16662a729aee3903d63524d353187a5356f212dc076b56fa5541122dae4ce9c5ab9fe0390427fa6e39bc9dd8e826335c3a915518a94f28c983a954e174e74c19273c9215d1b9bacfe971d2046e54f83b3fe7d9ce365ca27f7d60ca7b86ced0fdd6415b94a0d28222cbefc3a05e873586974be7c20ce5c13c2cbe9e6e8840a1e2e86f695c2840e4d32bd28d25705aa0b928e9637be9dfe5722ffa3efd42bc81854f1c6eed59b7fdabd690ac20d75c9fb0f48e96c7885be11dce19a2ee94280560cbabf700bdcd70a38482e2cb344e8edf318e630f0af12cc2df2050f2013c143a3e935d55682b5d8b80020421235f8673083df7b5a1e53f5fdfb47bc32608b7c4bdaee75aba2dd16b8ba910dcb21270324e709d3c57113016eb17fc24957701d14db5b2a495b09875c2d4c6cf0ffc7a9f86af1b793e3cae29e59442a6d97d241c055cd6e2858e61e146086934d1e0290812ef6e0bb0bbad93179c1cf1b0e811bc597b2088d636dd2ce6748263e9b781dc5112dc55834162da7e51494906505957b9e47b0399aa9bd795024d8c53c4b219bb1910318e03a6587e4ee0d40994b3d2774a12804ab82525fe1b644abd7cd79540e398863bda643620c1697fab6b069182a63e3864f3b7d4be339903036b310aa47e8e4ace4e67ce71e550ac04ae8e3cd7a7ff4390f229da27f793638e352bb43c38782a7c01625603f1ad93f21504734050e70165f0b39d5140fdc9311a30cf90818a067ec23194166dae0d02c8aee728b11f00c0e59e11b7c1983233f22736fa75e27a3cad7014b5f5883bf144559229a39c690d3738f426ee6a78b18fc2c46cbe4f391fd384d495eff8755f0f971f1607b23d40d8b140adde5d90c638626baea803897059316867bd0382f61e9db6295f1979f74265241272c8fd9d4ea84e2eaedffc0d1c2389af7a0f18930cdf2980e2a5c4451c344df90b868e45e192f9187c21155b9b5e2273424cc5e4c622baa0c299ae95031bbc240c08b73285f58a1c96f041c13969adfc8ba10146d0910c958e0d6bbe7b259ae367578fe2f3e1a3b2f96aa37759ec445252d49ce6c49dd3b4cca669f291673b26d72c2cabd354500a2816bf2338c9c880664042ed307157740f71bccbb5049fe903bc8a220541a05a0d41563c617284962f0a516689ee40184c4108e6a9bf879b00093e26771c9b552006a1252d1a7e1e1d4ea948b5a80a1cce1e832ce5e27b783e13a867049410db6c50ff29ea7c3aec9178170628849f01cc997f0fb12a09bc355a51a492512accf6c69dc02b4a78f40b9488998b41317cdaec4f9ca013d8c2edddc36ae09948c42b39af7787eb37e34ca925d1da129e6cf78770058b9818ef7ae5d1d06991311175404e24c2af40c5039f344a24f4932ab7e0163e539484d52134ff377002a240f10b46b35e21fd4c6b96409a3986c1f382dfe8f03834707532cb3a725a15406d7e264f6e59212bf3a2b72163a39467f440f093efe3b0c7d6b61fe174cee9653824161ca054916556a32816e57a2161ad1195b47333113c821b473a27cf61d6a9e81c8dcac95013b7238290ce4717cc6838aa3504fbf9377352a7b3dfbd1f7d36c034a928922d7b1100003234adbfd067933f1f01879b7f02b79627b8d127d38e2e8c63cefa5a890f13923aa8502a54fe3261205d10058553d10af22e84d440cc12536b18df4af9ee3ac29d030f270e7dc84003fb1aebb01ee57832c29e33fac85a84959af0fee3e53a3436bc7a3a987b81157847cff24cf919856b8d6cd7d372adcbdbea5eef6aa8445859014a064e9d4d02a5294fdf29ca5353c52d4aa6554cc01280484f3144ccec60b3d117952c64ec2b4ee0e4c90f7f08f913effba8cc2eceb1b821a55ed60228076e47650e39f406cba5ddebd7b49390e08d825738806ef888a8f8454a2c7d935ec8362846c639039249a01780b32d80bfb8be4cb69c26efe367459eb60d9b086f73ba58dbd8aa95461ef229302b9ac9da9861d94495b3f14b0a91b9a7be845b4525395eae2ee4de6748cc9f76cc0ebf52f7cbded9fe23c02f1d016239c31cc84a275a4299c0ed8572493bbb803895c25af060897fef842f349c88cbfc71b6ec1d7a90d00940f1867d5215352372498376d1862345e9eb4ac2073348834bd8ce188d93daed0b217ed004a9e8ae76e00ae0b1e822f01d4dbccd57bb682d149cb43cf1f692ffa0adc2b45d75f2202c929aa327b3ffe4a54e2c9d357e3b007ebb058828ecc06dd5f989d53fcb3013177d148489479e6860cb4f110a090202d9616502568c307323dabdb2d3010a65485137b16d5fcc438aca5061178b478744f34b6d7300de24687ec7cab46982188b2dca11c1815e6efa6c200a5f9d11cf944fc42011fcc130548ddc5286fab8a2b96f26ffe023c033f1e0ea11412436855bbc3aecc3315bc340e750dbd21a6804ae6684bc4ddc51de1a280769c034252bb6ff2e24c51fd82d315d72f4d4f74a5b69ba7470f202564064a6bbc2ee3424663810c9e4e4ba1444b94d0a75243f956878640d379484f0fe42f452cae6d8a9f1b4df3140013025642040c35c54ddce1f003872aa243ba6e2bc7ccb7f211ed9bf5d6690d242462ed561f5e7f50e0819b9a0242ffe5e2e4da1633bf9e2624f43875b0c2e5060445156bea82c7d0b5c6e351008a03fa5400e5a4b54814ef771fb09c5b1cebc92a9353e09935170d06810db89cb1d8818f34cb0714db6011e6bf64d084588f882a46c9c4c91da5916948e41498b4f263cdca98c59d6cdedd26a77be6440f75550c42c67e017360c7eaf62db56f7137fab7c86df8c413dfcf44c69619a1e87e4fd07d346be2c04943d12fc4e0bbcc3a85a336e4a524ede466719eb92af56ccfa202b82f6b4d6b5d06964b8e6154a1c859e8c779cc0ba7db640a75cd336a8d92fa9df85bf4c8ce800fd5c110d75f857cb38258a30dadf7921a3a1317d8e8c10a2dd2807cf06ccf6673b27945db417a7a03d88b482261482858c89af25ff98591d2b1328ba7e6ba31dc1b4ab3799b10cc8538f65e94e839795f534583e2f04b0484edf69300723f3345e6d255c7d1bd02fdd3a30c854ffd5b79a64e778527ab6abb0c971b037abad5896dcef0a2be4ce7581ffff78e610eff8b0bcfe97e2954ccd5d20b1a2cadab7a8a917c51a8fc48b666c2d768b0c6a9f5a636139955b317b14944fb5582850506b8ef2f817e319c2055942f05572d3610cce119f477a70392449634d00639348a054c96aec97f7f3c6387199e85477eba22fb3e662c2555ea59971d3db4282d8c9cc26fb55b3064358aa608eb54f1e9f88a8197db215f52ff17ff7037ad84bb537eac72242319212ad58e49cc22067142e90e891c63de106cdbec2a709f5cf7998b2cfbcc9cda90fed571002fb4145a013a2f9a45918375e4dea89485b8341303407fc93b2cd1bf5b1008cd29aa1a166f678d83a84621ba781595222d4ed86103e429572d107c9acb2ea35ac9b5f887d3b14011b3419117531a2011fb4f79d2848f1afabf75d2ec2d1a30869ba4033cd248eaeb5fe417bebba46ac79b6855d4376eea9a805a756f0148644f8158d5712d853113a3d61351d47df01044007d3516589fb1d6e0f9b8a418a08a523eac2ff42593f30187c1c0bab8f9b70a069de64ceed63e18c65e1febdc96c8f051f304f077f8592f726e3f9e4723438cc4e724f7d4560a6a895b44c663251dde06e21e070c183de6441d2b620bc78f2a1d77dde987a692a52136807bd453f43607585860f949a3a28a6e8db741b0fa9da8c5b56bd4cee9e1a7408b5c4d942caacee480bebd8b7f6680181029719f033328abb3a0f6995df415434c3a94f58e4329a74ca77c3fc17794815032a9e52da9aae0fbae8e4a0a40e8a6957f4058af846798453f879d37de4c826dbdf16b52eddc503360bd7db6534a3ac3f41209130d529c2aefea27132289f95f063963c29256925176baaabcca87b57a3b40b92d7b2dfe25751f0e10a88fbd94df7c35188a185e216470508e56d4e63e1041b86c5556b6c50aa3965901c113e3c6610ebe0bf35a0f1911b0849af134932ee76cefe2fd91092c73f23981895a620a0ee4232984072bbe066f59ba77bb442e72ccfd5e721c09322790e251eb108ecb698b73056ba0dcaa119daa35eed5d6a3848a6a20a161cb99bffd1037ec909f8192a49813fe1a9c3a60841625672f4882181b6350a22e8a9d813547979c2bace2e61162ab55148bd2267d9468eb05549a76bfaff4ff5b463692394a69e09358ae981bab186e35e9f0f9af5b04660bf07c1007c1684c43a216dfe189eaff1b424ec2a564d49446c82b1b5a4d19871cb476257da3fda03887d2151d2902fa531ba926d68fc2f2bd399a0793b52f104c0405afafaa78229d963bf5b7cae3577ab73a768f5ad89b56d71905b1c20f47969f44f86223e28df0bb96de05704fd9642f8e2be38e6b74226be25bdb124fd788c7de6b0e5c6da0621f320e17c18b5dcc087bd831880e921eb16f52ef0203697ad77b02d8b5fd7e03b32558fff2c8ccf1f3c3fbc3a51274b0fe062cc18636f1c5b439760882f1a9b43875eb33657ebc48319fd2cb36b327ed730fa5d069dc6f95dd6061c022fea17a26dd09cd1c37c0dedf704385a6f44ac5a5e88bd1e306846a51cc7081c2dee9c0c8d758279a7bc2ef8ab865de5e37ad65026382531387a6136d84585173416ce1f50ab228e1516ca0415ce3d467fc302692862202b128bca63c269b6cfdffaffdca0044507e3a98f5a85ee62376162a364dca20cd1f04edad5ec9e5d7479f0341854ed59bb4953a80b94b3790a71a85d0d41fadb5cac69dcc667c2e5e36e273d192e011824cf598823075a087b7803fcc7096044fba4e4623cbb900300582e78ca30772c5cf18ac3331cc70e6075e33f4860c5d9f2a891388d383c233e749dd6f4395f6c9b9efb30d397a3b723e69b7f9c99e0f881157162753f9a2992aa0802dcb4d308adfd7277ddd79f23b92f5fb53d7a22ae4392547f8d5c660ede63f710333a43e9baabd39926285914b1fe6809323abe89831cac996bda0f7656a0a417e75254dcd05a3748266151c9d11e53f92035def8880e2497ebfb6f42f063ea17de1220027f444f536bb1d4f5e347886c7170a936e58721f211ad9846d1ef9b29e292d5f43209aed9572344dc2719260633a4ee241c0378e7b6c915c1d80301d40e721bee7a3d2aa21d94a5a0f0e3a645f7c1d01cea92e78e4716f5847f62030d79f3051c5a821cb673feb97b0199ae75a7fd77ed0be37bbd068aad790f1692f0e33078ad8811fe27eb6948adc1c57446d9741f73636f38443ca5a57237ceca7a6391e6ad9ead1b312eb282919b90437dbe4deaf75408e450c4425b2c8706b2552f61c6afed1c2addde5eca28354101d8604928d79e6934d98c846ed7920d34e3c3373de14de5d37b861ef815e6f78eefb4c44ede6e6343a957118eba066d0670a25f646dce22d9aea95f19f16baa7d23cdac441510f56be6b0ad5a434061ae24b66d98af5542750a46ddb4c6de1eb9537ae0f85f0ba9410877cab4d6503d83ab3db245d0e68bbd652152fd3026055794148d0104883f513764823518e622057e4cc9ad0d87ca89a146528e748690073c5823d768663381bb9d4b0a9609f18e55cea107046875f72a1663b9025bd78b1a948b953cec35c7ba7265b69e92650d6225b60586480d79729c2803554ac8b92a96e2c3998f0d5c5942a5bd264598d58e5f74063ce4bc753c7c7444ece542f8a107de1401f8fd4949e7086c34bc4b65ccfab8397c45e22443619e7303e1e551d9573a42cf83105e9f0afc7023609abcb2efc2c7cc9ea05ef4b9128af20454e129691427aad74fac492bd6c2a6e6419f571d40afb9deacc59ad25b9008869e5b1917b47bc7a74b4be409dfccde0e7618d169642fe74bd3799d396b01968adb25dc30976b0e55c96ddee2b1007bf5a5bfc5f21d1a9e32e131d29f382b35ff829b358d43dc4649b3d657f50f0f78a4e679a0c5c5bbee721808e9414f92d3c18017b3a087a6261617ea89d28be4b489563b727bf6e05194ee4fa76ec46e0e2ace2010b89b884dab8539b57c26fad087074b60a16c5073677a4dc3177c594a46e5f39f83b271ef8dd352b7204fe94dead678b18a7e4739a8719af2c13627add078596c5eb72e27b034abaed820e0ba597d153a77ada14e053d8ed32ef925e62c2f03fca3385c1dd34fedebcbe9d62748f151bdce6c8a0df73bffa49372e46c8ce9041a947f03ba2df81c4cbcfb34909a586eb6f9e37785fe27164cfd2cc4cfbe4e13ee941d543a4e8bbea9d5cf891f986f8182367945d7ec29a12d623858e0e92d225e25517dff8701e41279d326d5a377837b363f1157a83d97f6b0077bfcdd5072f53a95caee9aa46411efcc87466cd16fdc1cdb014f59c9760777544ba822eec3a84c83174684775430d0a437ecdfb6f02ef2d6beff2e589dd12e4a40cb98036460e20e2959a80f492405ffa0c03f6701fa70014e02ae5e0bf7a9e9318a6a39b33e3b3a9cdbc56158f4afb1154b7cd3fb41f58e1b318df117082a56202598237f17ab15bbc5319a178d2f3a8ab4e0a34f971c0e8ff804d2a10d0bf95cec268e482faf2e66b756b15d961edffa3b73cef0ee1a17f659dabee5306fd2b25fbf156b062a2d203422c6f5ba51147ff74c0b9ff6178345b88c1bc9f9249cca1d5512b0e1d224706a8174183a280b9c91e9695d496c31c01f8898da3466659c83e0da2576a3ba126e2cab475177e239814d288fa06a9e408adaf2caee2e5fa09da9bc0f2286f4ebdbbef4689e55a5d1393ec08f516484d746da409cffa8747dca56445d6dd26db5f99f8b6665d0e1e454b20d93b74906fd31122f601b9a082006c72ad6a79bdeb4aca7114b13438f1cc5aeb8d97c2d756172b1233811b04e91ed98cb6ce54f88b4bd6c108bda0836ee300802b922a71f8cfaa0814ec339e398a39ade2ec3c303d270f479ef119f966120248826b8734532fb409a77dfc243373008b103b8bc311237624e8bdd16cf6bbe05fa769d85d25eeef47636b1cc6b6fa2579b86e5988e84a2e438d5377b0a6f2142fd56a577d870cda76e91ea6a2b8c6814a4dee9cba3e3ce25056650cdf82b5ff4ba28918636489b3db78132f01ad1fffe2232a222287d86cb696cf2ea62dda12e34fdd53f41eaf543f85d3b0963329ce971446818b5ee029d4ae3a3de08d7ea896ef9c3d72887a67b4f4aef19fbf70b4e9643863234b2213d17c714b7b1459e8cb4f28848b17e2fe732386c8629a5e18b9a64bae65557a1f272c42e8a4365011b9b9f85fe5192611b037fd4e9286986e5c3b54c0ce0f26ab87c765ba598e8c39bf52f36b214363c17b5260b52c4f6886c5d3c6c07b103175370cdbe79bf53696405ece7179687bfe28cfcea9cf7279ad8b6a64b5e6b1c68bf2aedf1bfac060d43400d147a9810266c5d2bd586a26ecdf974383885db9b65939eca6db1a70d4281b31ed731c874b6eb969bed34836114c883acb03ffeba45c88f8847a754dadeae0816ddef9d69ec1f1cce3747d4730f7d58235484291d008e9f6ba92583f4304a155f253128c5f28956918f531ec72def5ae9c72e1e3fdecacec8ea4be95b644f52e84307824d89e0879db15fae36696aa77f0d3cd715da3afc2e1578ca46cf7618a07f987a0055403ae18f29cd9bbd49ee0e9dc8419d1e4b12b3ec6a3ffeb33ddfcb7b59bc201adf433aa8558995ffbe3c9f48433ef434ed4ad39ff3d830ea780df9d2880b0c970954163c414834bcac601d0ee7ae2a89ca3a8c905202561e841f3ce72da7c619e99720c6c01c80c9c80862b930d6d63e91dda6be409d8003bb7f8e49c29a8dbd887ca6b1a45c4aa3d24eb038ebdfa69e959a6654e145094eb2b68175baa4d3d29ab0c633a6df5cfbbdd98b9113351be7c43b324af17cbe611e6dadcc629eaba554c1dfe82dda67e34a103e22c39e988a10bfa933151efb11f2b5832cbbeda1191b803450609b51e4819a355842c28ca2cbc08d1b08827037fc0d1483f2fe7020daad9f228a6bb121117aa179bcad4402393dc06a341c20a337f8e0c370503e38196b815958f4f07f18cfe5609dca188acc9a1b20d00255cce18a1c086ad72413dd0ccfb1ff62f4bbca023f7145b57f4d9c602302c700817054ff84dfc4f9d31f5c543d1bb50fa7db3b50d5fd8552851c8f63bb60856b427fafcb81e64280051821103406d3eb0cc327056be11fb916874a8966efbe40510ff1d83f023b47238924bdfd90e3fb37c87c01a617f1528590838ce00440580dc95e240a0b013c9c464fb8f7dc4aa40cb1062d04a40190787fed36f7edb19b138581b0100188aaa77b3c2c8ef83391f2d1061b683337c2c94f728c472a79fd29d1f4e91843e6bc3b77e953f0e4b23ed2b26159d265b61635b7b20b0b53806eb29c2c71f05312e2082e947198337be03e6b74f517c41818ec78a3916644325b64c203e0de27f727582b786afc09d6c7b52470b790805cb7ee5fb7a7814c62a550c142c2cf2515e48398becc56424877b6b9a75844718fa815f33ddfb0fb8c2fa3981d7d9ce046540aee0719d3d4f26d3aeb2be0339ebac2978d9ececc67606f84b6f2aa1607e40520ba95194bda2b4644f29bf6d04359ea7d13d1cb6996a237701ac5e26170b5a512f7d4b668678c86e2850d475fd99a66381351f61dfa053ccbbf33d19e83c1745fc2f882f94ac33a14980a74c0db4b3631c54d40fe17c22e55b0fad37a103fac789c854fd4a5bd0062b9f609042ef454dce84d18c1f275ff23d374be4a3cc7047a7155b48c3d5f7d1bf9b4969a91b80d22c49fee63842d91ec1220e54dd2ed22851ba9bcd87d54f13eee3dfed2f4c002034908d2ea59817cff510547ecab84aacce25f2b8146fdb73b85b72db4960af70ba3e9f08f50533e1f55d0adba0c49cb18d80735015c777f76c6b32cb496089ed832f1ede8a0cdc027389bc0c0aea22df1d8a78b15911cbeed14d5e0611ef2d8cdf9a54a59139382b2c1eee7728963d46d3f9b93ca806a72a90f1eee02eb1f30fca26ce9ed73c9b446853f4d19a7cecaea031a60a2919f5e95e2b5c6955f9875c27812d18115e4050f623b26485181de0648e1e437d198e333680796b9f99e869ce2e908b56734a5992ac216b8414ca83fab521c1001c4786f975969558541f825b97cf85da5ec38c74ae9be32ae22c887186d81a314c9d09388f91a031c8257a91bc6e07d900dd9d9c16abc97c9e75a3f12d237d261c8fa26494b86d09e95cef693941b43a729058f289ec807707d6eb60890d5ce90c7e5d0622a48aacfc58d579b7969c10049bd99a402fcd78bc2f549d57a211c843d383007d0a4f0c80a52626c1ebe88dc5accbe2f0af8a493621b1c8eac653179ed57ebf3cca2c8b052775095f446e01c860486e9db89f49c16b18d53e228de02c3906a5ace7bbc2bac74fe0c3e426d4ad97c7cc071996d1f99c7312a211ee0d10cb8111836d0ee17a6cb29822428c92551206dc594ac48ae41c62c74806088acb5491bd920b390c9589981da3353011e71a0c0509815f734b88aa91661ce77f4d3bca0282e0219472fd456a0736cfb09f618098ec0a7432d0fba87ead24889b19823ae4baaacf00d52e62a1a88f207899aed890e039b47eec3508cfaabd628689d7b71294a2999af980ef79e972960750d8eb8282632d9aefb9cc1db0d51c0e3b85316685e6afb1b46bd8c52eeba4bee09c64e292bfdb1b13180ae5d4bf67211fd19375730afb09eb9d76f93ea0bef9aebbc3853cb659f9174456adbef26b217a50e72001a4d41a9b65e0094497d30bb3b57cca9a9d3e950ea5ed409a3d8ced0a974d2d8447d089755e2f15b366a393df4a41a481ceb32597abf1090a575176258220bc806994ad401a60bd288d6bbbde566d0041c4a401e024e89bf3359a8f682de6415dbf2d95eb31fe2797e7a884fc89325abc3224933329d906bbe79958658084edf74d146831d47ef7ff03a5a50ee3dc32a04402a706290fb1385f15e89941b9a958047800a805929c8657369bcf811c3b7ad89d83439be1e2f71f3996b8b89d22c48ed55776901fc04647795024befeaeec8236f7f4e75a8fb89afc104a8a5ecf55e8137162be1b82000d260602e2e72a15be8d3a8b88826901bb3e4177d856a0c4acb2447e9d14e711baa8b365148daea04feef11058711063a4f433ed786e7709f25f33d2c0cc741a110713776161f0769782989f6251d83be1bab54037821052b19b99c4508583ee011986611bdd7b0dac0935155a14577973f1e275f99dd499d66fd476cd461537657939097f389c5dc15c2a7c8248ad299997ccc3edf7b3f6defafb82abbb4bd840beb534e9258aaaa4bdd60ddcdb0db5fbc4d0d67d8f616e7e64b4bb52b489a399709fae0cdbc0153b64e50e25268d8062e62117b711135d8825b696d5b369d265b49a9ef0f71dcee82ad70c42c20b290d8533fa0b112cc17d86012a77ba1d4223990abbaa6345108f30a04eafa06fcd39311fe9a5d113bebeb493075c09663a5667adc5ac7a07fb6a04960595da44e2ca0acb0686d7ce15c73ce1e05708643de904ab52e3ebf673ba08cc46826e22cd7fd95302f5ccc8c9a1c89305d4656662af151aee2e3d4f33e1036acd3fa44643be9e2ad29a29a9a43acaaeddcf2e9f78c5b559ad1867abc267e9efdac44af2f9b0166aaa2725ab218b7ae3fbbce8476c1e335f449749d912cb609900c90f5f076565c005e1e11c2f4a108618dd51dd5815c00e4fbe16c6b8ae9a566ce7608ede8f2dcdac7bb9c9e853f0ee32341e546a2b7c7138e3271693f37bef6d156fb90bd4777bea552beb15e594810fd18768d95f603d4a57be00609ee9e1c1cdceec5d17f96796c569f9c540f035fe15fd112616f517204500f8436c7c65986540116ec3e037cd9d8913f6e7add39c980f7f4471f0527014292548265d2931b4421da674173f400ea5e8462d2a5a74b5bf2f2e28ac694b4bbbd82f120a32ee9e76b74a38ca05642c31912f607eb4e2f8154d0821d9a26a44bb848322a47ff8d5aaa54992e81271d156c81c9070408029b5a2b895c8cd3e9c38de8ab23ddd3340aa77a2b6e4f40f940c41cec536a2c28d2ce6a565b6b67f70866a19690923bd28d9a779bf6707365ac8fb8141e4570c3fd58df3ea8a89ae2b9178960b01491a68497ce5dfe03aebde6a78cdd63acdf6d623ede30f6afd5beae1d3a2137fa2482f4880318e08989d15f1491bf23c052a3e96939995a7b4a71f2db24f6bdfe33782c234d098c0dad395955133d8209246a56355a0eea5c0632c169d49a1dbd82adc0013a885d9f3415adadebebe1665cdab26502c18975e6ed6f51320bde7056fb6062027e87a88a8eafe0e57a544a649771d3db7d7b4d6cc2815398a8ec52de220e92d9234c13e63623db0631f428977bcd52b997327dfe8f96dcbb945feb4b5538d0e8a0f4d0e7f9bf783e655fc7203cdd3626033dcf88e5612ee4478d5dbb967d8c28091fad3f87aa0daf2fd4faaa10fd3e0f3931ee206485e7a64203bea16f5b4cc1b116b0455ec437cb53cc96662b9667559be8abb6787fbef409c367321ad80e31be01f92ba02dd5435198281f136f47ee2ecac3463ad58578608685a3f40607e5c79ee2e035bfb0b11144a9aa197cb701821bc6212415351fa8d73b06ab579835e108828fdf6ad7b91baf0579808f8560bcc13d0954a6fbd4a6caafd3825fda686f4c590ca7282ec485ec97d8554f0bced9966a3a8b9d1c591cb859875db1ef64a10e50db31f7c5a7addebd7a65c412396f9f91b793efa8e6a41058730bf242ec648f9acbdc582693d84e20ab73761e91f6c9ab305f90644aa74083f56a6341a68f5ebd91720bada0dea721adf92ce5ae5e3789284aae1ce16c71b9c78e11ef339a2620b4db2e6938ac28fd26995a17f5edcf021f02f03fe9b0b1085d8dee921a5d0da043698c1396842ea05daa5e7ae2a4f4b1361620069cea744a394e80dbd7d76108b09a09f3be731829c673f95145cd4158b13189ef35b48175ea811dc41a753a0510a4a66feac45e2761c6492e30d96e14f649d6e45150126d103034807c0f389c8b741e4937a4c8df3dbf7ff5fd561cb47ad9b593bf3740c20c9ad87da762b9a46ddd084a8ca49dcd4e9141d353a058820785dbc3c0da68ffd307057dd8bb9f0ec2f8a19099d238f3503cf0a4e94b398c832b6679887d430ced3b7da936569a760ca6ecb276ecdbe9d586fa9d0f4db9eb3f7d1312a2e23bf09ba4ab61aeab8b178a28573dd303fd7b97546d39ede74a820f5317b2c0ba9bff968f9c1a0c9b4796748e8ccfbef9aebb7f3039e9f9e75dc71e306c354a35bb618693debf24a9cebe4cf36f7b0bf35a758cd9e30205622efc1618a2a53d86bc203449ce9c7a700ed61dae9830acf144d4ed91dff7eac248508089acd9c1fdf28fac44451703080a33a34ba261b1fd4c0a292f811f6776ebf1020ba9f6b46dd436cc4bd9f6c5accf193f085341c019b19d9f7019f14a43577706ecdbec97db5e606d459cba473013987531dcb443f5702188f752c18e6c5aaa235d6bbc3973286158e5192bfb64d40810d3bae51bf56b499f8d11df1258101c1449ef0dad0698b6bb37eb42c0484da981fe2e38528463e4adba1e9bd8ce901d867454122ccd22521f5c681f3e11c5f1d9e4d6a5fe24875b3c8b883c7653101299b51b83959be46ef702ffc0a0a88cd321b3ddc12536106283163b22a3c4ec027ca9920a75431376459370643c3d97d47d83658c39e1171e08236b0b4c5c58287345714cd559d0768b6f31fe3cc3c194ca7652688d1a441a2d063fe9202e63b9336be69a1aa07e7ff6358871bd890daf5d6b524e5e724ee69245d21c4c85e36c4ee5f26f045d7a18e24c522e7bd7f0c473b7a725f859a806ca9e5ab79ccecb210e489d138690495c7f9de31ef8c21ee5067a80215f6eb3dcee73b5392d4045cd7260ccad4ea5617fadcbc9f4964f68a7b8cc453bc2c471437e04e0efdc8290845f480725363e20e30bd5f7010f11f8e93d49da2a4370236d900c52263ee53ef3367dc428e7b15b8029b765ca4b67f4c092483373d2422e0b7275d896b4d9524d6bbe04b3713ec2eec2b0392a5943dd2fa2f4f20114830b1c462bdad712036685f0e1155a16cc6fead4174c906e6da51db220d3e5b9fe00f472ec8f2a725f89ecbace9d932bb962d89085ddb06bc9298a70c90d0da1876aa72cbaf600fbb835c8a8827e5cdc35b673c7a2fb0300da99853fc985e9831a38e987e43164fc904564c0420ee31c29bf894a357b4608e0dbe97c8e059612ffbc3894ff688b4eda0fec58a91311486df7041670a9ad14e2b823f48eb138460683667609d01c99ee971a6285ba57269e124e57e11c89ebd6b1c7d0df495639f70e72adb6460094e0d7f04d4189031bfe4ec80e5d78a07e145e39168edbb3bdec06ae02ef17b74973ceb32d72320e5859d1754d7e551c18ca361e830e43ca8198fa92f3b5e426e32a854918b801a93837b8e73adfc41efc2a32bd6aa8a4cc21da590a966c5f9de3901771393a770d32d9924a560e1037e34edf694c8dd1cb1de7a9dbcb1c4f3ace17665e0ce40f65929039fe0e549a5fb167700b76639f60edddfdeb248ccf9ad046a37d3a1bf1238c397cd4eb32967c787f031b00905914cd21490961e6c7ed07ed96cbaf7380fdd8a4c15a70b41e5786179d88fe5b0d2843940636a36c24a6e0802ca335f2851ac275e89c9d3d89e46ea79b12deb8710e76a53e9f9c66e488d0649e44c13ca119b8e153ed1a1a0e4c34f8d02027dbc93c9be8a3d7e4ba951ab95b696a46931a183c17126e85787811928cddbf02fd6e4e311baad46e32eab0a35e519c685caf810b9bdf175231948104e0074cb6585b91e879ea22361a841d98033dad279c80b9e283553b7ffc9362998a5ef2e0abbfb1c3526d6d202a9a34d737ad5a24384249aad873012322734bb977083f45574bdbcf28e8328583129281ffd9b0ae4e2f4a32833b247320c0abaf469f2ccca03c08135c55255d434db273a1dc1d6be55ef348c2aa8e883f89c7bc0e3f2a3305dd2a05ea04e0355652407765109085193c6530cb4e9fef656c20f62b21406e2c48e467b45e6304c6ba12f800a6a29b38cb2a2c2a1c1373fd4350fd327c29bf7cb003723a7244c75106c0c4685a1107a33c36123b4d2b666c42e2903f98f16ce9cae5392812ce4f30b3dbc294eec0a208c40bb310b6d37920510899d50add62ef1bc30740f0589aa301d8f486619a2bad156005a48025134c7031ba2097f11ab7146fe07e847fb648897a11b2b3bcadaf048fc8c68f8729bb32ee9eba41947e9f381ca81d1e797112aed05263182b0174e918ba75211ab40a846262961dc343b91bfad2a5ba4bb71549c9d0c61b1f4985dce35ac4798d683fc7cead6b5e61730fbbbfca614b4600279d0f2cf4357445002b048ca8deee516517306837ce8bdd4f3cacd2c326e00e68ee7ab5ab855615d79281db7b95ec155e0c3aeb43cbeac23d91367c324e7f910dbfea234abd306b65f6828fbbeb03fc49a802cc3a51202e240da258876a6c503cc7759afac48bf0f96b408041ea84c17920914905b6d46fcd517d6e710c9562e0e5a46baae88b9062f414fd477b2b93cc606c0223dbb0654a7dd62673fa614f607c2a2ccdb182b6b931c2e410e7684db90a26c02c4d7895d96f4e8c89971bd9a3d31d259640f2c253f1dc8b837b8bd7096e70a89fadd5db15af85a9ca8c928616ee1d92c255cd4e32f0f51365af87b7224e488293276c0044309e46f20b2471092355c8d1adc28295965a3d4f46eef913a079b405846f8b804119d145ae7668b28425010025de7eef32d484a650ae9f6ad4ff4b7e52efe8971a9ba19691f3ad9bc7fc065490eccf131c8acc07cde97560736a53e66f58fa88ad27c3bc6fdb3a7980499f6c1a61460c018ebac0836368f9b2430c6e540c8576860a333889830d513cb574c4cc31790c4702afc9659360822739f2105cb67a983dca0e82af97dabc56e7c195c176830bc1e3ec55bceb24720185c3e54615306307c5473f5bc0091de28e1978618f346d5e92e025292f6575a0f20d0304c846bac02b85b1b7a1f353bfac68e57044d0731d0d8d9222c22289a4754fbfa4b9b7ac03f4524473481c905f566b3765cf03a8dded0b3652aa614028e3fd01f866263d8e3b1bf329e3f72c04abfbce90817991a19951ac0065b13b428df9d1d80b617a849e7aea2f51fdd99a92aa1671b2687d699e6d87ebd805866baac401d2d2fb3a8d1e5b7d6c56d6159ee9ea52cda1b6ac608783021bd136fddc7600a8f377fc40b026ef7ba0281e085e436dd63dd76d8d31ac9ab3358d7cc929688f9d9b15951dc80f5d42a4bb9282b54581450bac73471a6d168a74ab4deed825223a9b2851d78e37e9a991ed44493a0a64566d6506bb22a231a892ea008a66cc7057c56c174da6aaa3ca2cd5587ae070fab48a6b345b3a49768dd879cfa1852a140ad657d0acd6c4664eac513f6e3a22a65aa94a28515ab75c076775e028672b8c994e90c898f02de2311df717f5b1cbc976e75b95e71b2efc3bcde8aa575178016e65e1d5deb3d1959e7e4087d5e1cbbd003a3318dada3052a4afed9345e2d366e960961f7ed09f392e9aa3e67224985f8cdff41e6dd0e1d82f35a833e18d1c3ffeaa484958903f82467056ea2617f2050ccb7e23210253550815e56b27589e07cd75968665809fcd2cefe35cf462f277f01779810d5bc274af7dbe6bc07b320013a4728581f191c72e105a431eb22d337be47cdf619442289bcd9c56dea659c78afc4cdfe22a154abeb1fa9299a8273a6d7dd8e3c544247b9232878b128c132ed80759f157e5e7b3e97e719b9e27cc345026a2a3a004898a60149460f4dc88eb7b83f3b02c72f4277048fc47ea7711f2e92c7ae866878afb4dba5163746a586727c70e5b4a1623ce8913443243c1fc2585ce24c9e7704b733a90030235b4bea898a640f4b6f7cd065b375af032126b16812de6725fa20ab8a6d1064699ca152393208c521d80da57625401ce57c0817e640464b4038ad14a8d552098b24907baff14aa6d42caaf220cee696172a7b0bf8036993b3edf8cdf047fb6d157784da84fea6c0e72cae9f51d5ef4da519ec5732ed06876a349cb75b964a8897d0ca79e3c5adb26c99652ee2da59452a624036d083909ed08a5ab5f85ab7d7b30597d9bab7dcdd5feb6affc67ad486dc71a554bdddaacf2c9a54ad2aaca66bc3433b216fd79f23ed529ca29d3ea5e3feea959dd5bbd56ef28b386d476484d083f48dda4144f8a1a79663db33cab9c3a5fa591b52ac9948f6a2fcb82db86b4c0f259b7e06393c25746f88aa7c332663a2fca29e59329c5b21cbe9a2e915053f6941fed0034da77d01e3d7a605cc48387f770ea6c4f8fa7011e5702322e725cbe9da504f1463cf7b63d363396f3e8e1cf6f8f8b078f1d3c5ee5c1c37becf01e3c78f0f0d20e1eaf477dbec3791af2bf40e487775351b8edb5bdbdb5fb4de754b76ee58cee8cb7c7d039343935eeed32381d52120ff43049e274747040daa7067678f770feb63e3dbe0796e5c0c3791c8fcb8636edc06ec03440ba9888bf5ceca54ded341777b95888cb68cbd55e5d0c0507d1a6293ab8662947dc76d740bb93b6c340df6f4c1e5d89719412be28811a52a2e8071429caf420488e2b8ad290821b3f8cd1050ee26081182f6a406a1be8c3753e2d0d381ce8b997c1e77109c4ae1b1d853ee86298ccabce397fd0b9057a875538788c66085b83adb5eee69a192fddd59f070454c43bb13e3d3e62590e2f9f3bc7c3f56b573937657c8ea22a8a32e361853dfdbca1bbe055a2da4bb3bd244bb1217c0f3eea1ca4aad8d13c5c9bc2bf87b978636539fcc3241422f3ebd99d3919a1eb39a9394723e7cdb573d0db941136f7dc9176e78ff6e5dc79bbd7de6bcd00569603c5500ce6e8eef17b9557d494ef39e75af3ee76559e93baf1ab64c3e832368c31bb4a1535f9c9861edde51236ad431dbe6bd3959bd5f7ce890b0177ba3edcf62d3e1b488641d660ca8759a0ebbe0d1d71e59b05e2362f2d41258cd5ca2cf0f34d37e1e4cbcaa0c8e0e56bcd9f409b033577ccef2ab57b4f28a7a68ceebd7eeeb9e990c0699f37ebdc6531824e2184108a376786fce4e19bec25c95e8aeca5c7b03936c2ee987da8677f489c736b7fec6c69a09e9bb3320934c6e6641726ba59ad94dbaac69ac432f6e78422df4608f0ad9df7eb2be3926b1d9fbcfb96c112d5bc344bb27909b6fe79f2dd3fee764ef3187be2bb9a0fe5a245e2fc7ddb76687dfa7ace9686e9288b04e71b6b4d88c31ec5b10bb53bbcd983b3469a1a1fbd45027c6c4ba2438fd87c6d6a5b68233920d40728403bc0a27a9f9aa5403b590c05d5dbe9542ba51240720370b74d3f5c2a2b5b234f52509d2a8c80921a7b90d56d91a646913654840033c953f5ca92fc745ad51723334f4787e4e7b53d325ed3055d764aa91eeadde1b66f275b9bd3712729a164f249faef559e51d32be9254a7aa9a597a68c3f4ffef1c7079f4bbef89ff581b55e59dae9556a77d29d2dd2869e002ffdd923958c2e9f358203ddecea09d4f6709f33ede893fa29b1874d135019325a1a810ccfa33fa03df518b125d4dfc8aee0424f02a7d32ba39c49f5d429e56c8db435a650e2cb0c6d8d2994f8e2e9b348aaa72a67914c77b1aa3cc64863f5e465cf33e8d9f4ea2a41ac48f5a58915a94a32569564e99192cefacccabdf4ca5d9288551492e99dd399047e4a2820750928b52f51bd7a7bd565d263493eee272fb359a2cf4bd5f312f5bc341f4bee187d1e663300658c121573c27a7d107a6906b75e4f58afcef60150fe0d206b5e6230a5b7f49627a01ce18b1c3eb8e1c58a03aab77d00140cb4e680da39f811448c042d60e1bcddc0276f54afb7732caf36d1a1d7cbba4ab15a4f3e56875766ddba4ab67a89562f55d54b54b57e9e7cb4a2ffb838b251ee92ea6fc9f4ecb96c36ab58c65f9ff4c0654e59a0a7a03a591f1801256af0f1658d2994f8b2c614544ecef66079b8d59d1adfc4df2ea9cd72cbf2677bac8cbdc414b4ae1f379fbce554bd32ea59e55974789528e5a58af252a4bcc414b4ae9f276fa1b56eb1d291da9f558fd579dac27e38c95becb3ea9567fc4b66167d62cf797a4e2815c728d08a7a55512f38a0f292aab172677b2a9bcfac53fbf5c95b77d79565cf33cb1b2b527da9951e56a47a6e429cbb7f1e67a7ffb89f745287d6473ac5b291bfd684586f4d88e5f41a61d69551871e33eacf5b4f468b506faf57741eb76462251fe9cf324c43012f706001cddb06cef8e6ad0368e8e0d989d0831c40b8000e2b824e74d4f1841b619ce005114df0c24940a9019632a400430935a6a0828b189ebdb1cf212287c5f3408b144d1421471b5f9c501085873a84acd042032e809edb5017579e31275c009cf75cb71d3eb86de8082a9f918e90f2d924fdf09b5292e9ed9534d089f22b659e7e20729a2e659e288afabcaa7689809a5e02ca0f40c57e6fc0d0cddc8db949bf93fea0a9a459ca3c4d6f6d27687ae65cca465d990e32465ee2a4ff61d36ba69226749a6f09da5ace7bae61e8d684df49bfd7ad357fcd1e6120a026f40d732af8e2b0527882f004f09b2861e83452dcb018671e5e250858af5e83ad94caf85e51a0bc8bde4ead1540fa647ff56a27ea2ecaa1f53980b31685519e31c6e94e6633bdb244ac418161d076532dac943651c2d269bd9a8fccafb2d6cb6258085e0d1666bd067741cafd69645a9887728272ea28d5af8b62dd0522ee4f2373a2d4c953cd487f805aaf2caeccab579619640609726302125b76f7b4b4d62b4bd5f206b4d940af2c52fa91f79553d95c614ba0bb875d1fe793c3437654b6a72805afcae915854a6fad00b7732a1b327ea6549ea8192b4b832b53c6bd27e995853ee91945757705ad89cdd63cb911a108da9c4e969725fabb9ad0781d81df4a981b10d84e7dd72025cb0f915fe2c4fd74d34339514e7fb8cc535714ca7fc8f243e49db80244efcbf1672970d6a7e6656b0dad89e1d02f190848be275f16f91c46050723e7143e2c83f2ed197c471cfa92b6d3be093982b61b18238c2ea343189dca0a9fa4a1f290f667eb1bb7e1f48c9a0e2f7e4a5538dbb3a2bbd755d05681db7c1085cc43ef9cee0b6b8be44983ef7acad68670f6e41114fcf3e9f3def9204a98b646a0044022d08c95748a925489b1a0ea708e36399c8b48bb24f684c29ab8900c1cd3c66d7f0ec7b4e93d306e06c7bc7326148ee99cd211e67ec75890143f4de9b35ba74f2d6b5e8ad0ffe1327186d691508626d3769ebb07aff67c85e768e59b0b2988505ecf3ac6fc8c8f4ba5edec78603e2cbb8d719b7a5a175754f1ad8b2b843e9b4f7dfcac7e73c1cd98a8094139512f311151187a3118eb599454a64aa85b5a8928652d6d1abae2e50df06de88a114f5dad84c4b436bde7a45c6993b33e4ca0c3b7247ae5f209662b28be48a8aec8437848ceece9ef4b9bba78e1e72b5dbc705013d2fe9861c8f8e1129f97923625893c846f1c9783be3d63def24dc3e321ec108b3c849d8915cc2cc4425644cfd80ae6e23ccd448d61e03132279fb1c322ecd3795cc58183a8b3154e8762dca5b98b1556389d776a67a1188fe8f28d03136c0821087528e1061aa74642c40f8a28820fa488e284533b13b5b3962d5cf40dc46de7a0b6238588a8759a13d2e0319d43471a523aca9426c27c569fc3f01c0de44e594b61295cc5142b4d80e12a3da4309831ce5a989b3da7f3da18aa6bb030cb25ec502261874e1d4666ac8a794f407ffea2cf29a57c0f5b02b1f9dc734920e20c1b22a13259282e86aca0d156baf89a6f4356b648411bdbe0b6212684e85d029db1eafcf9982083efda6b421e96b15bc22cb8f7a13cc4da8f29e7e4c9524a296105e59450fac4247ce9ef9748aced34ccb5881d291d29f93c20a07f24b81fd049e79c73ce39e79c73123ae72084f0b5e7d19fc3779e9de0dd7b29e3053f0ca5a4ce291dc1b2e88d958eb80d94ef1e62c2ca4b7ff0ef92e88ddd5abf394b67eb63827f2ef95f13025b834b1e46f202864207e1334da902861518b4003e77311185df8b3a446e706280416d445aa47c56877af0440f311144d37484af0dc5a0e8bb877a00f45ddf7bcf5df6c803dae19d67586b3eec2c0d2e0efadef5196f3e73cd06e4b6b33f1d7e1e993f9f75f58f2e6ea6eaf00447e053a7b1b5739685f134b597d54ccf694010df4ddb84bc8a6556938fcdb555515866ff8de07b36d3f3ea643a9b5ec3ac7e5544e718639c3f3008fdc5185f8c4ec6379d1959700163bd58e39561bd780187480c3660c0c0872d42785edc0b23238482a408e20836720083262c218c319cf083239a8892c48d12747d4104a48648c25130ca0a282fc8504b2011d12eda171dd4c145cc1757741192c201845023066cf82045962a6ef0a6088017517c784580ef0dfa9e60bd1e924069d1031a0ba01c20c30c33096f016c7c939c6403c6bf2f4844140c6d4bda3d865ba4db9f3b81320d768ed3f807a5999940df7bd399a0bad28494211f0c01610744627085ca0e415e60c0860f860049c1084b08434a1a5d382f027803880719f840892f4ea02202265c300516357020e607cf8b2028d1822644c95287eba28159a28bda083c4df841095158e1a28332929459830c2ab008117406172088e3092bd882065b4c210a433f20c21b5f68a9c11969c0408946d4c5882ce8f8e18a28488c110605a4b0c11238b0011852b874a1a38b153f0c81043692d0628b1b2b8a30f40327ae18821a0d8c3096d8024b901a58b610c013a860820cca88028d2f5a94c0091ea610850f3f8001930511a8400298a02f430811c71245a0f8e20a31ca08e3092d0dcc162220810e20c06029c30915b5210331c6d47106143d786d14a145085a5c91a28d257698810b9ad00229ace0e14484105db060826807301c0f0ca0441551c0c11276400508b7031faa0114a82c4185139ea0841bb17551250baea2857f1baad2c457df86aa2401a938e7b0f66e1be75c7715ee9c13f87a0b9b96f3da39e798b9fd4187b0391e44f0af6b769f79360dde7bd573ce357c0f3ec7cdc5dd06e50a6e3b5ba1d252fecd00e57d14e132af1123344d9c78d538b116e37365406ef5c783a427a5431b292bfc9cfa3af223020c9586017bd8ad3c846d1ac2ee76f172024997793829fa2239200e5bc264dcec7d93c1ee4113847e65251ffec9c263dfda0adfda1037abd0ab1910b6e610420899d838e7dc18cffb31fbe3c78f1f3f7e0fbe36021b8d1b5f9705d7a393978509c6fc9bf2cda3164ce094387c7871b3f9368f54db741923b536f19db575780778838dff831062d5dd36c5cb09fc57df73cebd87351bb435185e3fda1dfb317737773712865e10c4b7a125b07cd6888694a0e3819e1f0c33b32988ab2189122554996b43e7b027e91c1d063a31e3bcd033744e4b23bbc96268ee4a5b202ebb75caa4c66cad8a9273f2688e66467384958ebc3b294d0bbe428db39063e3cd2f6f3e43e7cc8c8ad88b62aaaa86a06d479b62c414d3c88330ebd705e7e9a09b2000389d5e5dd25bb882309f57900b5eaf2000b85f4137be820b7e01c059b8692b4bc1cbb74b90df8ed08444b77200e00a13bf591b7bd9c071b38e7273d5600cc62a025a6b6d122544103e8dd2118921da1e2bc30c5e1af23840888c1e22e468341adda00130a31747a3d1c814c404e768341ad560031914458d463e1ae1bc80834597b687067381ddc1227032263a4afa4182d6034cc25094e5371e2d83a175070345b17cf657573fa564cf4829d4e1492323254561590e6f4d5aedbb36774a49e9652d660d21abbdac1bb70dbd80ccb7212eb63c3f9db26374ebd6a1edb1f36229313ab5e6a4d4b4284ab9f5677bec9c1435298aa2e674cb29cba2cfc1b62c66b5e05b4adba9a295cc14c5d78f631e59abe21f37ed45513c4d5114d543955cc83921caad10f7496d27637b556f81c6a97ecc9b6dd2737d045c53eb7594ce49a94f29e7acaa49c917b9d0566165a55b232da80da386d2191aa736b585169ca7a99edb53e3d4adabc7a6c9cb8aa156c52e2643c4c3230ff73aaf20cc29c644904a314ef826460cb562eea5a1719eb6df86b808e3291fced3232d48626efc36c405971efc74852a2feb36d6487fc9da313e58a05328b9bcec1c2a5cfc2bfcf0abe09447bd2e0e6353ad122c5bfd45b1f14b3a0b3545dc4b2ea1465e23afecc5788ed1c56088685c9cd1c2257d85abc6f6d0600cc60535f2b26fdcf96da8ca166f5dfc148dbc6654b03d3e2efe196bca95de420f5b84df8753158678177cd81f7e92d5822b9d6facc46c10f7ddfe70fbb0c20e78050b2d5579b59436c5284d48f40ae87218cf3a4a917e0673711a6d8a5eba7277780b33d10a146d0a45b0a74eab8bbada4be9d3f648165670ca57606185d211aab2d8dd0fe7773fa8e51656e594f4622a5f0aa2f2c36f3995d4a90bb5ba28ca9f6bce514c5a57fbd4d238d2828da29fcefac93357ce8bba774429ad75524a6beabcfa27753aa7539b49fb672e6729a555ad5a41586153d2d12531aeab758e99ceb9f6dc058aad8d9cb6e7ea68e43c2d2f3b44bd4c6d627b317fc1986f3fad6a6b45599665c93abaa453554a697ba4d3aada911c5dd2efd57e749db4aa55af5358efd5469715732f552f93edb998dfb429ba15c4957654ab48f9667b6eb5d777d069556bafcb2dc47079ead20523ae7c8a99da148bf45bce9eb965afd359d558d5aa344e394d0d4dadd5da5a2b465367ec7549a7a5b959fd51f5aa8e4623ab5a75e4948f6a6a463e1ab1936ccfa81a71f96c08b76ed2aa56e546e1a820447b5609f7ede8f71a427795e28f7b29a17beee7c9977ca8c7e87456e9dcbb7edc978ec0e81456ecfc95f5e9f18c6539504a7d76ce6b42daf6bc26846bbbe99c944e4a29a353e728d316e8004c7bbb69d2bb9a5d7f81a4032eeffc8723dd76298d0891183ac755b9ffc4f8acbe0d637a3a00faf79e3f334c5c05165ebedd6603ada4c4cd5e5fcef6b804dce6ed6aef98cfa0ec364cbb307e088b2bed887a08092d28684ce0149742830db6f7bcb5065b83104208636bad41302d4629a38cafb586b5385a6bade9b015cfcf3fe4e5a1436c3aac87ae50eed6167bb9828ebf9d037dcb43aff01e69df615a01c68a31bff354887db6e7a77f6299bdb214bccd469002ca1f569dba5a1352b1ccba735b2d610c077ef648ff9c0ef419758864e72956fd03a2b42bdbaac86c4d0857143674c5947f3e87aeb0f2d6ab8bbabd8eec7ce593ce678b4c7f259f379d6259f3d38c7a36dd517a496f6d6709939daf3010ec7ce515d6a4722773ce2684f2495d2ca14c8650b85c80bebd5d5b7c797609d0f6eddde0649a9d0c6551c54b0fbac818a48ca1755ab06243e7bc7f55ccf16a1b238df6868c90e4ef55293a3dfff1185a646eb34a5e95a22a45a76695b410728004d0a99d3b1a7419b7c7b7a124902893c40e7d834bfa3684849866e2da7c1b4242085cdc1ddf869010c2a9c2cb2bf3b6a0f035d71a6750fe5da1b3765f704aaaaf2763d5977bd8f4a5854622bb2d40a0624c182aba402a862882ca0ca61831440595218a08d343c594a1249030940335c498463910e3b9e639088e9b440823e7b39b299c78e7cfb929e678b7e58b7739a862ca9161fe7dc13c7be2fc6b6d87141cc7fc2283232cae8670d0c43ba79a1c68781912c38b2bd610a399046105708c79410f3c18e3d424309ae012c5cd4c26a71385b07262c7e9e685101a53804eec35389dc87e43e74c1210d0296b445214399f5e7cb03af216f881209820c4841bf4400575d88891041c5d30418b26f88004041a8c616332914cefc4afe2e17f480a1fdef9eb9c21ef261843e892e50a11b294b141106e10c50dca68d9e21b0708d714a4a8089ffdf8ec26080d80bebd7d5e1a6cf1ed24266a00856f3761e14196242e114efb8a003cbdeed6ddba47426daab43820140f3783542a2d532015a70301787a588b55dcfeacaab668693b34abb4bc90d361c2441760c6c851841c6d9cd82b2f4e670044b8824b1d5cb841e58a137ba5a5b282a888c679dd1d43dc4c3e476fd3390a5e8bf141263548fa743a12b3c121e226d976d8e1b840b8140cd3d1845cfff8e2cc3f54b8521ac22bc33ca93d25042b4a3ac8886f1f9572f5a6bd04fdb9ff9d49e2f2a87081b859b55f2e7ff33be7accdab1b695e1dca534f2edacdba0b4a851980877ce983ac5fa763b19b06d2de378975e884eb0ec5063c6ce184942ee0286207a7056021a5082184d18324e238b5f3c8602f1ed78ed34ea4dd4db4aba269f37cc618e85c4ed6884a3ed0a12072d239ee070f9d56d59c8f346f92e73c1d544a02695c00e2b653667a38f28cc8df8bc669a859517352675899152583294c51143543735d5ac971a7f70749f1538d53a7afaab3aab5fa024c9d551442b0aa625567556b85e5073eaeccc127e87556592b7ae8be3c742aabaa7223fc95a5a1f25291f796d7a7164a815e5da524345e39cec72ad76237b4894809cdc5522eee0285eb4e2748d11458141104279400c609ba0e4e47062e74acd1c411b62411c409fa0dd03d00bdb56695d0f8c59e947670a2f166b9b00111d06926a8c66d00034c1464288aa2b8564262d87aa04d306a79ca69d8b895499ba006a85b79cd75cbd0f1f7e2201a086c60a4e450b2483f8531148249bc289980f3196f76024fc9c867b0273bb0f042e874bda13146a8ef35e3a38bc6a92b8215321ec54533b8d2d60897f99e19ca4b93b9507352add3cc98c2538c80565a073a5fe91c2c9006f609faaca81ba06b000ec960cc4367d2394c546133b409d25c74c609185c96d2394e8619aa093cbfce76024ec98c5fec49e5729a71b64a687c843d5140165d844e3434d7c867aeebafb947394fcb0065e81c2aa772ea7aed74af769252a0917626aa9a8528b648e2cbbbf06d0b248abefb878393c70e7709fbf325943376f3b02514cfb7bcb585654c9c3ce51c1fc5b239fd5d4bd8a3c7c83c2443c1b3371e929da0099467be32eaa74b2cab4fb5cf1ec523ca1fc3509df2c8305ca77cb61deb94536d670710f7790f4131e507f06de889342c0d344efdcaa8dbb4e91ee1b257a738f0b3df4a436968ac26c23437887c7c3b93278abe5d044e682c4afba91be9a717080808a74dcf3353c972eaedeb55b22acdad3434b50d229a5b9fa0f2ed2fd45add087f75cef6307d2260c34abb0ef481f9f61798996f6e9e57af3e6be7d078adfea35e3759dcead98f77ec868691d3b87515b1905caf334e5bcfd438a9719ed6696b6869575243ebf0f0f61b3440f3ed4c74681d776adf6153630a8263c4b7bfd0869cd0f24d54535353532fcbc278da4483d1e05c41accb4443d99e19a7f19aab6439bfe53357c9f2f6752648c99ac178da4403657fb8cc1504a74dcc33c7ad472ca78df120e1b23f8cfa8f2b53c688f49b363d765610f7619969362194d78b6a4228e7ebf110cae91579c8741e5775654caadb21e6b6f63c2df8e13725e8efe17bd77b0cc04a1033e1b4a9dfbbab25a98147069be63114adbc7bad83d353cb4f1dd9886c8f18b6b0a84daeb58660fa8264b4698cd73a4d884658f4ce6d48633410e7cd92c2b8191c630c4846e7c039baa8752019370608378369c0343a27ccacfc79a39c3a94937c64b49d1dff1c5e794fcb5f708c0b5a04b1c51a57b2a0833a07215b16dc6cc89796b86d280e23de0555a7b0c9ea2ecbc6cd86546f273d2b88fa754066943a282ac297222e9f3534dc9343fcf8d13926933b8974eff387d9fc00c386d4a66e92a94d7daa7caaf60937aba7f6d4112e2c9fb5f0ed9736e72c235c7e6e24e9a4748f995f74eff18bfe73b6289d94324a292147ec8bd7b321f62264cf8aaec3dab379ae813c7ffd6c5e84ede6d5c10439a63be754ecd9a6e98ea29c369b9ab043efcb097f3bf439a1cf253312e91c88e47a8891dca7945246be74ce393d9b48964c3821f4d9a608638c31c410e1ec1be3102e4551d86d539c737e83bd0335e7743aa49a18d454b91e3dfa8fce991e2b2c52734aac62238efa03da6c78de747c7b954510ef1f7dee54b3f2ca29d3763571c22f297549e85c5ce2de78e811c9f5d179dc9cf78e604e36f2ac857723cf7abc1b79cb89eeae67fdeeba73d91c9651147cc19ddfda84401f8d79e1b3faf0059eb6e31cba073ed0769e431ab73c7a8906f3313d8dd36041da647dc6a1c760679bac5b666ea185e76cf27413fe7b35e1cf6a36dfbab2f716ab8ebd91bc25fdfcbdf7ea1c3727abf57a6d7acd590d87702b871526dd37d83b70733a3c0d04d6c4e0b2d754b959ab0c033f8f03a6c481bf8db13c78e33d212c6fcdb84342507cf61ea7a947a12f0fa3b59c853ec399f13e6394aa413ae7b911ffcadb84c3cfe8d9655f19ce3b9c1864507203131da24ca972658bd017323a270d6a5d51b2d0a6d2fa54de58867d745bd9d0a7ecbd4d8c58acb5215974f6691f147cf4209d432ba7984f15b9d09eed187a7b3edc1ed9d4a61fcf92dab8d9cdbb0f8299b00c872854f41a0da37f14f6c3410ad084b8e7f17a2143c13f6f382fb8d90db731540dd87b5a6061851f25157c907af0d861534333734796adb4a2a68cf0b96e410e6328dd7dc66beefc02ee98b1d08680fbbcb18d6ef2738b1c23738ceecae28dcf46ff6c111f1f63c4b21cbee3a0ed86ab65eb25720f06cba97c23cb56cc5ccd3927555d2cedc8a9ab677a751969499c8e0e73cecb0a41751d59d6c15955ca29ac125a24336534364213129de6e2222af1fabd7e3dbb360a977dca8ba6352a641a1532546835536bb34728cfd4db39149d5f532b29e79c92fa9c4ed5e9a5d1f49235bd642795544a1e3392ce28e954a15e472795cf00966bd6870fead20adb228dc494377d1b2262cb531e334ea9cf29294a5da56a598aa2241dcdcb3d5b234d0a2f25d64f47d4475e73f1573bdcc66d3a67079641f91d3b8c406185354e5f1d5dd4a9acd2353779cec97ce346cee3aa8bf21d3647e8089b3d3d3c5d73b10ddb1ec96e25665570b9a293721a6bcdd5bef23a6d8aeefce11ff91219b15c697b244fdb237b540a1f6438fb5d5606450632bec89163640680f5935a745e39e36c8d3480c84b33b567328aaa3f1b4853bd8e2c3be394cfd0cc8c463695a23b662a12ca2baf6c4f656bb5239f979176519ec4e9b0150e48f47849564a674b5df2a4d4c5456dfa69a638baf845d039d62315e7a4ed501e49d6c545e021d1ed159d9a3f44c773194d0895237cf4c850c848623ebac4a830194d8885c2cd1a191d9eb41dfe91b5ec4ca5459f711907749b0051d0761329cf9a16dfba7cd6b2f8968002489303d23b1c3de0807821e221268a6544702a2cc33199dc490ecb48dd85bbf010969784965dc68be70ce380300c0d050f692782836332b993485d6274c91ca6dd4d261c1c37c545d1749a94c5bd428a6f7753da49f73e37c5b9a00d699f972ba299da1b0a86a1bff0904ee2dbbf7c3b14ef6e406226b0a0ef31539a103adc941deeda5cd74f29096785d26f9ca230ca369626846d4f636942dacda8b773a04fdb03493f6484585f21723a8e0806d2be04194e80794783300c8ff8f6d6a2447f61181c113ca45d0a2f517cbb26bedb1901047859379c0bdc94be32e5b15811cb670e8c191a7644581d9dd3e0e45879b602f3a8d6b3f8cdb9ed5097d97bac470f58c1393956b001a128eac7539e3140520e2fd7865058463957d0b9aa20e50c678eab6685319c932586f39121c3c738ad6a99039c5b9b9028e004dd19dfa19ef5c3303d7330a35ebe679b701370339392229c315c107430e66db000c3c003294f794fa7636af75ca4851e5c191806e83d83c98ddef935f972cdd48650deda908cfdd1c04f61494a665cc69af83b97dfac1102fc4f2b53c7c30c7be7b3090ef12977d2cf80a730befa3d0948ef84f4f048137aee309c20455a17a01e5e094d148a6c906186249dd313315390295ce79969060eea5cfaab6816a9c9d1410bc75d47720ec87bef5128a594ecf0ea794eef9cd746b7435cc74fdad496adc1e1e040fe203b813e594c071bc7cd1a910918483b0fdf2cf8268389f8f647861b2568425a8726a4dd92b959234aa2a487d476a473f7822aef1ab674fe96ccb477983174c51bdf86ae28fa8cc8d0155ab87079e77d958cb8cdf6d030ee7353109cf6dab86d88cb97cf883c0e1c03911774f8d4596bcd1f66d3267e87dd98719bc7761809bb6ed3a4093d0efd4d70980fdd49fcfee89c3ffa30e021f6d3ca94f9871d39630a0f69df3b0da04c92ad49795bcbae52a5d494b259692d563a12a7f479498f33e339259c82cdf47a3ba79a2e298acaee55bab6d2585196fbac46d32565dbb8ed9b1662d0f1366d82b74dd025b4467cf8f8b0dc72cb9a981de2368fd44ef5c615236d51e51b4579ac3cc619e9bb4ab6522ace26e7aca6d3d9aa0a9356148fed1c8edb4efbaf8a9ebb9ef7981f33f37bd02fa95eee803421555ce98e9f8d11c68a9a12c6c7b246cfa4f44bb1a561e27c662387705b62de3a7c9ad6a3ef5153c25755b4aa2074861073d4940e4208bd3d5fd0e17b0f005696034ed55614fe9609d74dffa15b3e3a44b48498b2babaab25d3291aa653dea294755acae545399d9352ab5a95a297bc2ca7b3c76f848816280b194d095f5d25ebed8d48a71ea7f3c7d99050acc7be80cbcf221da19da8442d77744d2b15aa1109000000d3144000180c0c878422b1502c1ccbc2680f14800e87a2466c449a480325886114859031c81043000100200032333313074082aacb7a8120dd7fdc6eaa563fdcc6ce6b6845930912be5b163161b2112e8c72f8fb09f48055282d4479201e807cafc8f80dfdfa8ce691debda618239477f686da7a7147401a52f21697104e330b3d21c3627d2d384c0bd2f901c100bf7fe3cd84dff705f71d4cb218a845093143631e44460aadfac57fafde631761d93841c749766099f38ac4c224dec7ff61721d133eab7363bf5d5f9718db2c98a6c64ff52b78d5c8fd4749c7b9227d08062d9fe84937a8073dfc0b8dc76eac378b8b8eedac579cc61e94de86b59c3ce4646d60978ba4f1560df665af05499a12a5d27a75c5102fa83dfff31fca7b9b5fdee6cc036fcd3f15dfb258c787cf0331cbe42426cc29e684db8f3b646c5eda6096a39c0f3ed9bed3d40b9b7fde2343db117e6e1e294031743b0347ee0a45a13647253ed5030da83f33b812449a6b3aac94738810d400f4b0ffa579b02e7e7d11e6e1a43fc36fb74d67f8e3aae42390302a5caa57e173fbd5a7b7281e0770becc9dd1fdb0684038bbb114887c81bb31eaaa0de42f95b539373b273d04986d90b00aa378716d39949f41b51906dd9c565380850d3427b3587c7010e35b6898e4fcba760dab170089939d0cf5ad1e64a55fd690c45cbac00ba1fca74ad2aaeb95c2bafe3e9ad7af9a7d42d4cad059d8945a5d27c9829a419af880173e63c150ba6e102466a1be506a962e33da37226d7ea8cc4b8446f7c80ea02ff716040cb2ef2555f29abd42c182130cb69f0673f4bbc131aef3656bf3d63adb3552e9ee31b3a7586d521cc9eca1528004780520e1f4c71904a427a32af6c3a762d3858945ce07bbead1bc0dc4001328bce82f9306504a799735295cc7ff5f2efd2e1eedd0de6cb4070e8c9975fb5521063be8532b79f1a24016fb871b2e9a04067c93a2ea52e8db66feb99aaceef77766bef6cf5a03301e16cb6bd12eaff7093f188183dc6be372f092ce44123d187e7c28e7fbf5087f50d22d69dee14627d7d68bfa54ad522ee40bd7292afef63fd2ad6c278209e0dc43697bcfc5c8c4bfc5d1b00514c77290bd2d8c08d1f2a0779f898acc61e21d0f434feb6a6f884f3497df01ee3ce5f2ab09dfab0117057b49905045098bf9a66a780445c70b800de498c551b9f5f0255a36612780a562797f89cba05a185197741d2f0894d59bc01b0e20b8dd76c8c86e3b7205f37487bae80c921bf1fbd475f88835ff7b4910c068279ce80c02ed402bd6fcd1bd85c746df3c0f3a8f4c9943a0d57676010fc58b7ee04b6fc94c002393352314904368767b1c2f735bf1c32cd56176050ea2d9ad4ae860ec8ddc46656f874f98e9042726ef50dc0e997e08bbf94fb26b091209cc48fe52ded19a39995c8bd5ca0a1a20d585aa648975ba0aea32a9c8f118e1a60e5f6d8d9e1e308d3a6637bb2a92f0267fb715d9e9dc77f3aa68bb4cb2515343d1b701fce5ec13cd1e159fb4b13791f66e96fb1bd4e664e408e85b0c3b3f87ff001e4b7d795e83397a3a2b1eaef7a2291e0c7628e6c96d68fcf3199f2e954dbcf66a4b85b76c2e51b5876ae39b84f2f771310dfabcbfca13c8f7630bbb5294960e41598b3105d04c8bddf9beeb12cb5da0d0931ab2e95d7d5202c5701327e5ab6ace53cf02d2cf246f9a8c8a6edb3569028a778579b9fecb5abcd21931884f30c3e4c528ca3f3c29c2b4b4075cc8cd79c5684a8f95ee810c5e6cbf9b763832b121a5914ba034fd9a5e8c94fcdd404bc4075f110c7e505e420e286ec43f3049e0c30255b88d3160a6de220832a4aed034f4e87c8a6abcf3a540a7c837af1ea0f3caf42fee7445529332b41069ee9610de8c8c8328b560e165e64aa4159177bab41249240f70d7bf288a8f0304cfe364fca90134118b66e4959214365e7141042e192098f1f3c7f03b38f55fc04ddd8c27edbcda9ec69cabea71f6249d0e974fb5fa5e51ead00de30dc2b9200424f531ec23fd5990ea33469fda5dc5af3ff860bea3e1e19d5154513cdde7ae1abb675f1257e892cfdd21c4a1127bbcc97c12745bf6f4ed375499970cb884e932cca3c5b9a4cb322da6cf422b8d3f458950f6092b72a0fd79f51b5f4d6f71829a50b41011b5cd88b39d8281b7c1a8ead271ef7cb57650bca3cc48c6c703a032dbb240e39b8b8ead9de0f72efcee8f3096bae49468ef3436d95e38c613dc918b97c412da91826b9bd7d2e6474c1479f192803b41cb0c050565c087b691d2705847a48b83d5a82ac5890839f75d55fd41481279983729a49bc7213392e19d1f7029059e658380f25294d63d1b83a2d749cd6897f588910dca2ec242734387a0a964c18992e373a7cb9e3fd560427bb7b436181d357f701102da40dd7e9d4015dcfcf8df4dd72778fb0f0f338d57b492e9df5df0c1b3dad3090e70981aa949468add80b4da59e1dbdd2255bd8f12e73e2844329160c7d593e8f8c1e345083e5ce0893b89a4a3b98e524aa33d65c1ed38dee78256418c2ee877831923754c6e93a2a4734d2637a5c50db5ca8978c5ff68234bb891d4928ee1a4cad0ae3f7d0be599ddd70ba6d8b03b1a89787875a3eef7b7e6a665d04b32539e9f03f60939c9f7b2a0499393bd254d3624298f8734db03bcbcff74a8201b09cef153d041b95543daa6ebdd3fba6436c6cf92449e3646d25a09987c928ba51fa334fa09119a4428b152623e39c69706e1e1d686b470bb9599f0a18a81341b6a0d5e3760e3a0bac5163f2f4cd271b8db7a29912b16381aafadf456af3612c0188f368e12618c46b80330f42c360c0d4bd8d7aa736c6dc00b3b0a072074a2571f22324393fbabb93709b3a75b5c1b8990bb4c1bd2794dd03834fcdc44714ffd45713848c6f5568755bc7bcba928b1e749af320cd8542e2494ad65d84a7f1cde95b35f8796756fc2d10afccb58f94acf358f1904b5246f0e8233000741ccb31c908d8e48083ef890074d02fbf9d02b78a6304c33248e7375b955b780b9c4ab41b545ccf35486a345c9c98dc91e17ced23d081b1e756e34f29f0e917ab7d8633aaa6e841a0169f6d41a400f8e8fb8709c10b3bebfeccfe28c443732ac4800d10ecd8bc8bad2a0a109323c2fef5cc0d3881388f5c5d9b5d0aa771592974daf68f776126a6f39da9140fa86ea22261c0358c6461a860bc35becd4aa3bf21c556381e84c8d12ddaec92e9eb59c5ce7cc42db570fb7c3e5de74d1a0512ab26a2a3e81bc5e8ad4f905923c586ef633a1a2ba3ddc8fd0a84c5145c9c1b932beb5b486ba097e18ac923252f331c9444de7bf0965b955465ad7e984f70754d2b279d34a22718a01dcb7b45c6b95d567138fafcb26259d10d57217c69dc8586accef89dde209db011dc7eb635fc11283b682b897da03a04e89fb201b3d974c879d223a8562d7956cfc8aef9f179c7c45a672f3d42ff06d670f98be3efc5e7263fe563a78e36c2df79eae299d9ef4665e6f547a679db5cfcf1a9f2363142037eab413aa22d6ac597a7c504223a652922e6e53f5cc8b503fb71341cd7f6ff37a2d1df10ca5df9b9b03a531df6254154fae276f9989266ea175a6e77adb3b5ba9cac07b70e01396d43dbfec83845f1de43715b91e122949201e53929da0d63d8acd0c59d1d225977b9bc9e38e6617f41b3b818a2984b1ada1780bb8026daf30d31580df70aedb03fac8d8dc79957e6c2d0e65945792bac4608ca109553c70b85985e426feee50dc42484a235c4931b0795041e1c7ada3b22c0e6800f413524307093461cdc6c93389e1d50cc8023000a613a17fd04f455b6af7f9abaf7d47079c223e81698ced8ef39b1f8439c07e4c55269dbd337c3ce5faecc9090f20be89ab8936ef5a207d8910cdbfbf03510aea283de90e95f0c16301b3558384f01cdbb907654271758e0265cc7ec83fa043f2bb91787a7978e11deadde6aa29b76bd3c368e40ffb1ff579af9a1ed8f77b2ff00d14e3578c1bc81d52b699d281833b5035683ab0d2bd1b0a8d7f966f8bdde052d2b00d6e405fe80a4cb99c5d89a973441239c7cd4b4313c4630d7fb37d207b171b5093389f2d1ca95aebe4a93e4647d9d7442c2b99befcf172804a5bb8ead74d33a8e201881eac953022928514d8b5f7d73b312770f5249044fb75a79556c4df725d21e0504bf38ae248b48dc0f44949459bd88e0fe2a8284478a51653219756430ade7d515a2d12689018944e3156d952eba61f5e7d58936244cb16c9c774cb1b36908909836cd006d913371cf7640c68507686997d33664b311ae300adb98e4d86fb20e8f25c998cd66ac62ec907dab25508703a6d247138bd3cfad85eb96a9ae2525f9efe693b12d517ca28710c246a563fea66728d9de3de6f555a9a3cc01a406b43742267a7f17320cdbaaa0cc451060d7e62d6d2827b911abfafe5a3eabec77f6e804cf578ea7f3432dad214c92e22fb8c7329452e4a27ddf38937fe6f3154008f95970baaae1e5d40fc76bf781c7f258c83e36dc4e1c3185ae0a1353218b91795b4225d2989453469a9e509f5bb01a45cd530080179e3cc4a492a05b3657581f3b212baa24a0a1a07a32e2e378ba07823f5c3fadb20d263f653103920185163b1735a06956432e2f10861bd74b8fa1e3728c4f92bbef3e0ac7c2f106eb543ac14f5258d73629cf792eb093236de4ac63291a448e69ba28acf380069ea9805669976bee5cf57765310b4796b0ef2a8809c2680375b92f95778aa59b1bc5b6487a0da09fe2fe438bab59abd12d543b786a9f735c082d2c52364959a4023115ebb9b703becbae5897a23ee634499a2cccb6a8fe3e8c404cc480770b6ea8f992357876572ef24757408c0e3eb8aa0d4a552da5ed275933a414213b78871b258e89172f2aa34828854ddda0f2d353132a1105426d791cda75aad8bffc234fa66a9012430a842d2408da6f0dd0c0d05ae4536336508f8938d408914e7b428e8888a439ecf7aef9e2bef11a38cd6e711a95000240dce969cf1c69db09146788744022376b6ac0964a45f5c53e29c0c515babf4b5ec6f3110096da48d473d2b98cf515e1fc3646e5e6b959bb596d8ac62534ed980236c06cbc4be6dfd1aa1e96798a7fbe3db2a792c626d15196920a6bbee452adb62fe0e34b7ed7e18c19393e0c59fa1912833aa9daeea5bd8d4283e5058ba5d31a8e45cb9fd4f009f339d6f7f87f47c20b89b50e388436d623a4a599a7d408b3e05fcf5ed0d61a8955614cd37014b9e0ec2949e5b0a798688e443e6ae165864e7eea20bb46113672482b40b3c3a32d0650ec349d2088e66f33e8cdaa1c3ba5449e25d5247c69454dcd6dd511a51b94253862ce6b5a2714b03cb0d535a5d642a20a49524e41c52b0d760f9bd338318d6c3f27426ead41c6a8922d483d7e33f88d759e324fbf66b603cf8b6489a2a600135bd5ec4010c43df13a9f03f95888c4dae31706e580d436c0640eea5b2a0e6ef9406d11d44f27374b1c69b75766e3b9cc277cfe5a9181f77a1352efa3a7c0b8350ecb74ba22128180daf16f67e8c4781a88521199320a82a57cc57d1424ad05834adc4328460dc872a9905ad63117e8889a5009c1ba9ab9a156e235f5491de701c4262621b3f2f5d0ef4f75362d6d6001323b32e3b17a9ef38404f270b4bf28502e6b79445e23fc5ae9502e660c15b91087827b3aa9679c068c8824bf88e5058c31fa36f27b8206d34a4f3de4e4db751944a16a8e8ecfd5c5ea4c8307602c900ead44d60cf66481785296018c3db08ef7d529b16edd705df06a95e50cc037cc8ff7ebb58bf3231185978e52435306d693dcfeda84ea1d57a6f6245586ebd5ba97100bb412653db7a23c63e40068e42a695a6ce4cb9b371bae598325d373cf3b8cbcad66bf5afefb1ae5cac6c5991dbe2c91db6e6b45e402404fc21274067cb63976b81d0ab319e84ede2662f6e85c541924c3de255b7b323a61d0067465139135f844aea52624c3789e188d25dd5bd8cd14111073e80081e213e10c0025f8a8e448374dc660195fe9d23b250d3d8bf398aeccbb0910796f3d1e1c45c51b79bf395b5056c8279ef997469b11bf370b762b0be381df1a6d323e7370f99286337ee4c882a399fe02522cfa27463d58b975656986135dc6a80fe75e6e00e9c2724969cba1ec77bf41e7997f2f1b131e7d24b9e0bfa7e5b131946d4328539b73c19630609322ac17759401f680e8482c4119a4d8348b70641e9a10b48fab732a7c7fc211137ecba6d7c8bb62c9aceb610c5534494a5c0453082b6d9c805f35238249c663bd3201c0a2eef1734afb1a1acf18dc4ba1c7c34e5357f14c0e4d31b27adc6c64872f148cc3c0e31221f8fa0e14690d14818bc351b9163305f741392db7e3f90010e6d3ad68a6a5b39b76e8cd9802d19526b046b8cc9fc3633632c98b2688bae8cff80332f79c9b2fe21b08e3581f6ddfc47be9cd9eef05c9e011100d3341980f3b7cd981e62b49c6c8e01991f010dc1ffebc603a4c14edd42bdac06b834e56097b45707f6bc181f431f3356924d8aa2a89e4baf0f9e0deb367b0c762ed800025fc94652d0589ba2e589039f7ef87e09f9af14f723c296947a071fbea4619d5dc7b4e4de9c499580aa91f5480a38be975e0b8287e14abd662270f13ee5bac6e57ebc90198ab27cb82815739cb9d274f1da6fc3511a324cddb8ad3fe1bb693f82673c912bafd3ae6e15606065737b820e761516fbaf64f567634a2ac0401c2eec527c921b9d5e742e93028b1f8e13dc00f601955e6473d0fcca767041ae3ea73b1ea8a814ba9e36c871ee767ea93772eeda883fd6f7402bd51a2dea05118f09505b1c3c3fbabcbe6842f5bde811465a0e51e05c474d28f6a5ab8c0de8accfea766a1cbf0213a3926d2c33e0a03a9deaca9bd10426f1b449da402a3dbd0a3251fa031fc8d26c3e66ba5c2726a07c10a93707e238c60e1c5401dfc249248d5704c5c8c27762a2c97358a32e8ccca985bda6119d0cc1b8234844efd0163e729b5cc713f40fe31a262cdcd3fd9c64a9b65c8a5984edebabe30404d01b18ae5543a5777668fd8b83fa30747b6ecf4d808e65dac0beb821a0cc0b01e10ad9b1cdc119961e84f2eec87d73ec3c9d29088606311104673a90716b7335d99b625b892dad4353704665d5314e9f7c3876df32f6c00c7716a44d1988b66f8f53f9f1be620249e18f32134024d37b407b3c1f4c821fa5010650c54f942a82cfe812812d714107a9aaad46099b9f48b106a892ed6a0ce8c5288bd0b007919d233b6a26fb680048c133146c63c15cc678bd2c7f5146ffe899797169e465ac22e01417c2639ff7efe7b5e348151b3ec820e258cbaadece9d9b7d8f6cef340c7fef3605457762fe949d6a66c80c3b628a30d11281eac796878574599022e09bbed2f1cfb1d1abad6288ec60f48fbcde96484136347959847771b42555c88258e0125e01b9a5f0e7212e6953fe3a35bff51388064adfa8bbd755271eb307fa1bbe0155017098d62c7fc7c827225380fa516c52913cf123bd9cd3121ae0aaaff49be8883548864a3f0b6b9338b37b1ef83c022434ff70da935eb7b6aa51beb8d264ca39a63b92b5f9fa493d0104d3c60af350a11e8c8750488f7af29f3b5df760276cba435d3841d35e0a45ad656882d1e7584ca73bfe7f636db71961a1272c21d6987ab3487187da4074977114e550b002a9c747ad28acb97af4cf1d2db8695ee1c1ff0a1331173cc54a4e9e9f4e4aac9e86f29dfd25aabcbd2948e5f6c0ae4aaf4592c888eaadd3124b074acf554ebd2d0368293f3999034c5ef88e7cb45fd3c9a9e6981bd5207f21ad853fe4df20fcd0c884e3c0cb695d1f3cde1231a460492da630d72d679c34b8173fc34378b6f99f47f7d36ea8d361d39d80e28097c1a66d8e11e3cfeccaad87edf846cb9118a3b714f6460d2cccb5b8602c64e0860c7455d36faf18d91fb45d626a141a443b478d616f091e041448f022553f1dd43510edacc5264411179f2b9a01e861476017a238545361bf2a8ae38c00bed58a0fd42f057b36a3de53ec01605ef8e3a20839545b972617ec21910f9bd516d81f51ea347548e6af5d5f24a2b7002a2f3f56ce09afd72b300294bc7b00728901d86f2c836408b07cc829f62713887cac5bee063794e917a6e408acc7fb5b1f912024670d3af481ba04ada7b4f9231d7b6ec2805c510d7ad86ea3703059a7e5232268eb9c85aa166ebaf56af95dbd253cbd056040910d820cd84d262b38994d59eecca1e8dbc3784e7c114f0180cd3c76bb16416d892c73843118e41e5cf0113c93bdec1fbdfc35c5c8b88ae30c41a7fc7b774529a7af7fc1b6c893fc07b5162928055504a083668dcf8ca7975fc6ab4f6235f4e6a16ecb34ab92f4ac59bc16d491bdd95600091a81bacad6a7659912638515deedd683d001f5c0710dfd6070e48b82f08daacd3ed2763c9a0c6f38c99cfc975938e4e240d3f5b6e1e1a8c726475eeadb9b9f2a08820961dade9277fac627bf1da80c359c04e2b1c92367c8597b6f07d2ae9d974f13d71d130da2468c78a6978cabeb1dfa11697e941ea98e3a5b61ea9c715bfbd4d88db5edc211582db9e7df3f1f5d057dcdcc1b0ca3d893a6bc649fc587803d3525c168ab6664dbdae5ef9e069e65b0fa7d07e5ffba7ce880e733041bb3f7f77b8ae4086c7751883295ec5ce9c13ff71d330b1c152596fcb16cd1862a005680a109050084bd0b58efde83b4f5edeedf25a04b323e820a9228c316554649c13cf282e35076325543e0df19a5ce126e1a5546a1f626c2ebf01c71fece05a560d748b673ae77b310c6e62bd8466108863fab0c40176c4c5dbfa9673baa8028529691ddd131bca26cbdb03b420888a59cf75c23948ea4673b3184149a968121a26a186a544684d517190eb3ea37d06379250deff5d403003a6a243eeecae97f1557ccf81aa6934c18e27befe40bfcdd9ad9534ac5ea054c01a53fe63fb3b37cca90d063a35e942c03546ab93c0d2d2ce3937536a342b533614488ae688fe4ae963be7037251f4a435fa5a3525affb08dd8d3f9b09fe403df2ba8a8bb769bbfba9e0232d1db585d2c520c401af146d2e9767869751719708ed5bbfe2141fb5c0ba555310f38ad42e2e1b95b28972cc93dab0600d51d8f4d25e19b1b3b03313706bd7f4dbf1875f58b85d3aa09c6693e8abcd3cd4be3c0ac622fa5d41ce4064e42d6e292b4cae087ea1f4d4bf76ab468ecc8ac7b2b43df3c322caa736fcbefe39aeea1e07eed970b800026a1745593b517a63a2c9b5becdf5c2837bb8e4d62d9c3e58299fa50c86ea7f70d5dffc5ba9c339c3192e5fbe2eb8a2eb2fb100d9584f3a1512feae9dfbbb77df6d859ae13ae4778389797382807309a5a800de933462a5f9ae8185461c95c1588043acef270cb407beb10097e3219ec09b907c3b4c8af906f0022e532b9d4392bdb7f0d87cce18a93ff05aec8f38ed7847323c2ca62733ca41336f98fc0ac00348f311c622f72df0a906452458ddc87104ebd80436ba08f6cbeb1fda267e9c8d53fe4baedd3a4fe5c27379a535f86766e81b5e16137d4d848dec1bf8d89fc38051bf7b50006940833a3dfb36f685df250e224d5c19860f9b04e285b59d2ddf3dbc48354d27cd9b26fca5bc02065a1c40f5a1fe0c64a3fa46474b8070d945334d18391fb5cde525003489258a2512efcaf953dbf8989d2d78b9a145c2a4571aca12711bd7fc9b0aa665be00c19c7350f73fcf777399b063e56efdeaf33680e253bb86e4f90ee31909ceee96fcfb7ae85b91d462f54e5ff1c0256b15f11808ac2e18f94964c9495d48171da85e54fb59c1c3f8a9b7f22bb1adfbf16b4aa3cf438cd7eb83b8a99f1ea0167322b42517282fd1f8d1cde22d82395004e3c180af57497bc61adefe3b0683e195ca90aab51540d5c51ddf37404d03afc7023a76107408ae5ae9b763f87b6b879750141ee84cf0d6531988ac1d4cf7738ad5f818b135afd62d10bab5f28dcc617554507cd415c8a9e8a345e94daf63a73fc8901e31dfbc10758408de356e0965c93fcd50496672d28d43c27fae0d8a313ec65c954b27905c884b696a376725a58809a947cc71eb25516e00a587ce28103b1d933eb6cff10fdb8ba8abe2fd353bbfdcee5f314b310e08c4532a809631052dfd4999cc504ebc39e1939ddc7e3f1b81c4605f8ed3b0b4f30d2b9aedb94917b6cd1e9b53e753a054cc13bea366a14b340133fad98420c95c80b9cc0e43aa8251fe7cb2b296f00dbf81971da5a24f475e17fae3a2ed430d08d604ce0ccd76c0fea86f6712fd8e0fedb5f87e5cc893c7d80d50e861f345e3c29b1fa07310f5e06b427e147352235ae64de31850c549ca32bcd9b6f278905947f1bf676ecce3a908f848eec175ca4c2138e52a5098f456cdf94e8d51952a791726e0ea12a01b0777fc144715f1d73ef53051b370447bc434ead8e14f3203a441de389a0d8809a8f6050730607bf7492ea032af19a69d3cff88a17697a1a264c123112f119c9d0ec3e1c2015e184fccc2c81d44d16f8c8f930726a51f2af2c28900011f094ff4a940e99a5f479d55e064d52809c8b89107e567568669f73574835335b631a4aebc9f02c58192f4d849787c56e8150f162d4e9ea093766e32887ce38cb1cbb861b742c05825cfde581a77fac1759438e13c94002972933ab3d17ad81fde05289301a8a4311ca267f5e2029231a68075fd7a728c67181fedbc8a726fc170c323a3e3dcb38ba7978d35d044e3da9456066f3a3bdd9adbd6c961d2b24494dd2921720aa582699522a7ceb574a27461779b11dce1cce0bef1dad20c7089829da4faab779dd3f340b820e60232427aefe44e232c3739a9f4c409258386bf1b2b5db654bc60b11e0722b75f56da1b035cacf6cf57624aec4ba9516b51476a57d3f036072e0d0eef1b289be99d571f407f8c9ee7a3c738d30e64c5004e790dda4fae8c44c20ddcb92b847565394ac1c8a35afcb74cef909cc535fec91d998d87b48aec4409166460ce26ab4f5aabf11d53ecc57d29afc11150490a987f56a9e4cdd446af0dd8cd696f148036d06c706e2d6dcdc0ef6d8d7b1e457f21a5ccf4476dc6afbabefe5bc0e75b8ad903a4f455e99135e11a9a866e4b577d552829ab82157d10b8ac3aac9d54b514b8c64cbf3c133eb6c95c0dae37d1908514967e91e41cd635628f3d3c92a57a4e7a35e4d43e0b4737aa902960edbc78499007d565cadb6d21e9c7874fa7c8a618209d05d9132cfa1bce8e9b8e11f007438b5be0608446e60ad408c8e0c042c35d3fb54e217f4a6badbaaa90e2ae045eb7590bb71dbf6c45b378ae304180e6449fce8b7e2f2d0321afdc0b39b4098a8a8089fd7d8971a24e776d701261d7d09369980c05ca89db7589c3841aad36586fcef4c45d8e12c5c60b7613b9ff1c7dd8c675d0efff43f288f25c06542c28cc422410d7bb73ebf08e8d8437190d93c4c7ed7f3337ef0f0677fae209f9238b39938f508478904a0be7cee074b5a2d97cfbc2cdc3ba4da028ec7d39e04811559cc20f0f0813aa656ba204aab1e3d0c49aeec0b404bb961aa9cdb53d69fb836e8ce698d14e375b8166689ba53efce422116d7bdc2e31c81a679640ab4bcc9732a5494d53bc446e94ba7c138112db7a9850622e6360c481ca700378a632f552c046057464588a17d8e20ab03ce4a34b7e0bc27f48bdba146fc59e4783d9706d8a6c803a3b708bcc5ab43a0028c502a6df41e2ab25d152bd7662ce4698eecfa55833e93afeb92fdaaa943a18b8d1dc1ceee0dd11d773392170885386f6cc5c0448c40ae681fa9ec435c3dc3566bba50ee24e16153f21d085e37631510787833f9a8e2144d9bf12e439b7d1fcd5668e3b879f2f00ffde9819c86d644300d1c85ece0ece5ebcefc95e9bc8937b079a15d0090145fb0012ee77a2e565f42407de3c3a369e0e31199d588c8d84988eb2bef2387fe98a6c0ebc855398ab97f7d5c0828a88c3ceb346e8d2027dca923e0902e840ab48f9096d4d319e2a83b65f933328f13cc37fe8426f0c3db067a3f9ab71d7b868a6ddddf538aa719aa11a08762336e1eacc4c33ed0f4307a69102cf7a98a8941f115b7cee4e3d0bc1d73441de15304061c11fb762e8da3ac88a403b7f99bcfb930331b3bf0c399e5698cae09675ddd985ae8cc5f94fc0962384681ba26f5edf805fc10586925b1ed74603d39a80b14cc51a3658a16d685ccd0d575dd2e8b7a748715c5c46497307a7fdb72c01078a4719a05e35e72b813b4b6736f8612f058edb652ec8f263df759855f79729c36ddd221d659900e039523701e4263c701eda3f84612e374bda63e8c61b4c090b88fedfc4145ddb357662207660f12ce273dc706ad6f8021fcac3d8bee59c325a1f66f322defce2815e1bf587f1eb745733da2ccbae43b653dc4163512a37bc9ef8c57eadc83a93fbdaded76ae9e38077445de4a55257ddd4746d5086a541ae7d9940990568d735dddc63b4eaf4f71f148f1b378ee98059178222e1d6e87278f0e1b9e59466ca3b20d61b304adf866efc4ad7ba6bd41963df5aa4fd8ae724dba3d7a8f12ef9c8f8edf1c6b158f0a73845a93bccda230026eafb759acdd124f6cf45a209daf91b4ef25a5b824bbd56b986742f9781b084ac20b39238d09ab3d03f605c5460efc9f0ec7a8e6f05f1a70c3f51711b7143e3bfb9690e7db040ead90cdb9840827c47ce8194247732d287a10d6bf1bb487e6f3aa5ffa1ab7bca112c94f707ae7c410788c93d9d67fd5b0e88d10c40d7377336b0b04b15b0d469b1c943129b241074e160d32d11f591f08a0936afd7473769c6b23896002b96a3bf67c057d359a18b28cd8b5f69c5fd8b4f0650701a6dc1022fa7a055902661c8e93ca75b433e0e7a95e6f28e899d5543f6d845d128fdc9a4fc230819295eeb27a77613aa5d7784d31d06d1f3382a794324011593e37e74c84493d52b308863742d6bf78a8409b0b56456af7cda1f66b938b9b17feb541e8842f59b51df8a4a06e9af1453252dd34d08497c3d6129366671f170a46225040bd6ff2af34c0ad2f6b6cce9ff031c45872ba48e75a1d834879492663f2aff6b9118904e32b95e83feeced6fc6e5dc43feccebfdb1afec60b6c6d32b3570a2e3b8137bc5a30ac8ea50593233d43e5a6fd5b06419fe0234b8513f7c8c900e79f12a1d3aeeeca702076622ab54feb0b4afb88a63ca804c6509d65efef222f72df4a551612071673b8b54666b61c8653ce9639e8ac888fa87e21358cad05355dec360961f5287c3598601a97f15a431fcf00a6ae2bb06be53d5a457995050e881a86c678bd09c51dcba9b248fc049fa38020b529f04a1aac2cacac66624ef60f789f02279aba226d4821458adc412468da05bfdd861e707df9d548dab07b24a6ef1b1294d3dc496636fd33c1f23645493df42f5247f44752b1e5280d9833b9410bd0831ec09034972741894e5be5b88af22cc3a49d40a4509f1facd5b8a5af5fc4b8e13b1cd6fd3703c4f03bc2058e45fe20c24a62383e9b6e7ddabfccdd369cff07ecbfdf3e9022d71b792c1f4a4adbaeeeea5102741a2a240b11d6e06b675d3bfc2a1191314dba9778e7111c6cb20232cd60ebbac4707643d71713820c89bf2dba3f69ab518f947d27e7c0d544534f798c52d55d8ed061e42fe0afb71b4142edbd04921f400114b89eda11d950f23c420dd2e70991d8c310214e80871f6ae471ccd4bc7ee6b5321ec548b6c9203d038824fcc94f9417c7ceacc705c05e245f002864e32d1b1daa658b8e1604994cdf1144fae8939c84d4881733e6988f268bcb108b97b3ca1a3b4638c968f2f25fde325605e1f190559fa2e6c55eb3d10519e370ec0a220cb0fb48c856e2971f5c40031aedb606783065a40015fea6b121b1c19dc3a239ef5120a9ed0d9f2cd785345aa5ed9c5915305df38754499190dba97b32824489fa9f86049a780cad454313937bf2d70e504ed33b9ec036d0f39f9365084597c39122150e249276f51113b027132e51be6f50ec37192e994002fca78447e46bd4ef1ffe212668b56d16b7508f5b6909c45e0961c8ef99144ab97a7ad802a422058295b8d996aa71b696eea74de797bbd9bacf7aab446e4742f4767a9875b1ddb1293d5ee017b1b2654c026622ced449968f3f94e3929a7024ee2ce9bef073810c62f455c30ec0d009518f00d4c6f81412c4f98f6c9b419fcfc11d4eb1a0785010a0c641e941e7142d261c9e84c07d4144f5ad79145b22aa33354d2344c440618a86badabf1064d8a8a78f616ae6b5ef27de0666feaec23030e03e0d888998ab44f4d0890cecce96200f951c05438c9f35ab3105c09f28c7eb43c53dcb38c6ddc3dd1371831381ea7cbc3ff696dcc54d00329e9a9ed2c815c48cfeb97716a48ad7c4dc166902eb667fd82ce90ae39c6a44060ae29142ff3fc0bc29cac277d8032ac9e7f057a481712d8e6a68f5088e7a8301333f4e3e4b1d7cdf09627f973ed4b66521e7c27e25d09c359e29030eae04817d2205ceeb63b190c03d5914fc6d258cf30134b9ba68c91360230b667c79bf61f534a8379cd3ec7f758c02010c387e296e96d2b3c9a397a5333045c06f7e05c90f72c0b14be7819546ac008ffad707ed3e98f963d711ebc6f84febe5ab034fa9c4ab1d955d37959af9faace28f099fdf694390f902f37684819967e46dd431df27b57ebc3923dff9ca87d9e53fd91c8606dc3692aa067f34573c14af4150b3b607a8ce71728de900b7fff0752980fdef25a6d5abca9e56cfe27ef316ea92f4249dfe58e46d1830529cfe30133276b7e7e187c62ac02dc4bd263154b7538b1987c0b45a2210ecc17c5e75b31f4dd347dba0551a231d45494aa820afa7e18ccd2a65fda1c1396606888543c3cae0c333e5d215c6e457211ced96338b8351bea6debc85cd6368cdf50c73d3a3dee187139470bb42a9c88bdfdea4aba1b6a364c6b68c2968d816fbea3dcc901930d3ad7447b523a91fb78fccbe7cddb11346c370c56870e30b980f88bf4547a81acf105589d375c96dd6775bca610cfc291864098c98a26493b7296bca0fed1c191c93b93dc1c2cedf581f86c711d30890de0b418d45756266b8799d22115b0c2675c331e32ca1f4f0efb3a3c80ef8cd37d11f5c51aec9f44e4a4e2a769205391c04eddb73580e237cccf298dddd5445ff3b46143b32e115b89c5d2659bd68203fff2b24261d0ffcfa5dc981b97c38351ecba0ac343e661fac5719010ef63223a40c1666995af931053a92813124ae110e47044278d692824559987a5c9d09f3555a51ebef99350a6f0705b3838947eb0a58f7e46b000c3ab13811a0c21ee65df20b03932b1277644c781c4e99fce1af6eb6a6541af49a87c238664c299b55b2a48223678ae6cb488edae2d6729535dd5e35b8bd4517c6d3850bac380038436b89f3ee6d21169354d98eaa0aefd3de48d1d1b2b62fcc0aef852aa3cb6e6b58ae8bd113450f301c3ec6de14c2e9c45fc7bc8b20351d6cb88554f97a3c093cfbf46411f3d3089341e7fabbdc5453b4cae3228d590a2d628da222a40034cc5c79c2e24962fa6e9e66d3ec3095cd1c802a61126ec762f40b5439fb291e7da2839e866a7e898d4a5f803ef6b9ad983d2deb95cfa138fb6f18431187187a5064816e06a43ec60f2a37cbb23401a714efcc29d282e34607a0cf4d23f229d2d981373f65796cea106db3954b1471237a3671fb41e9fba1808c3d0f3ad0a8d41d22c5e36c441e35680ae5369d91d000e5429effdb2e8bbfbb479b3b87b4a7ee3030fd0cde3f8e058606a811d473f8469c92318e9acbbfea9a9e9ac6197847ef132290514a3d1512cc9d4cbfc683cb3c2532375d888878e92ba2a784ee325f641cec4746552faa619c44de9ad996bf2253ed42e890e9dadddf91ab2ab6635530b5f36eaa11b4028f480b8640295ca3b0841c1370b19174c16e927f13fcd16b1888882801df37f241bde00e5d8987661c6eca6224b154d76a48aac30e0824c7a22af06ae21685b664b17e8ae60bb3f989791016c17f63a62d9a5fe09ec2f2a509ea9c81b4e0d31db84710e5d5509c35351c212b0da32efc3cd71b6a739c3725fa94b7008ac592a53828968f3bd13accef0028b96958f7fd978f05b9687322e2116309eb071f09ce2eded77e3c0182319cf56200b18c1c9b7771dc8875c53dc55e73efe1c485f1106af5a124d0dde4277e1bb5849e42a43925f8220590b3ecee9c10623f6f64759b98f8170180be9d52a8e0e0acb5f35309552c358790d8a8f820192f824b3be1f49faac00cab83a1949d30e52a773fff3ffb32f0e14d527682c28dee9cc113b9f1fbc9d5e48a0c7437873a970e58487c04170f9dfae7069240854a11c6b2f3310fac0395da22597340ea6c68b5344a8c356bd16f6b84428611997003fe712c76ec193c84839e86efd712f68408a343d1984ae6aaae3a189255a473b734f0a792f76e877aa343968dd6fbb028bb735343f12eb1eac0ef7405753d00155a5419657dc6124663727f044233c7a56eb4cfcc0c6436662a485dcb8f4335a4647f98d6697858de9239e822e8fa107283bb24d560c9e8bdc0ee85a9a47c57f2056e63150fd8d32f72806968b83e0d257ed9d596734538bdad94138d18d1e130d9197b138ad2da273f9fd60cd7139ac6e8876773283ee56f578d3ca967c16f51f3be785e007b0b6d9c85c2729633c25d8ecf27d1998c0dcc5c27911de87d4ad89850e78d339c4caa14dad6f77af21a278b013f165af7ba5b17135ccb58ed88bb4e4b3d47464671aef78e9f0e84faf1a9aba99ecee2e5ff18d25af1a14e7b11ac224be681795452afeb308962e0246e376c12803bc6e74d5317eb0d4df43277573bb7cd2b58d01e07fa96ddce6f4e87b33c53807999d50126d92416f7f5b1d8d91f0db8036e0ec5837ae839112f26779473750a8743f5ed5556c40284fabc626d7ff983754b030041e14ae2fae5022e4b1b36d5e3e10c7bd60926ddbcf929f55496be3bc5e0fabfd8fb15e85e44d27ce370320f2e8bf963bd33e3c88fc268af4899b4fb23b743ac5860420e0420d4837e1964ea618b71ec232e08c8026b7fd2e0b576d01c13a2710fade819dcef2775e02230d3a5e60f2c20a3af383bcefebad80b71fc8b408033b9a53220646f864e2d7e6e73b1bba508aaa8284721ffa45892dd0dcf76c76a5bf686bcbf190f0e0f28ac98da78ae9b2f315c279b0f52ffcad7e2d5eedd63198c34a31a80e38085bdf22f3da5f11e6460479c1c5f3933b513ff0d8725a923f733aee56885825a5b275a929ccf620e1194fafd75b400c9f7a4ebf86eced99c6b6c2439bc4627388fe62dcd866a3f38438219cc225d6110f98b0a197da2e4ee2235234249a79024ed925cac0c05c8ea70d0758549aff11ba541545a37c603927cf586743c37eca557d6e9b11f2b33d518eee83dc96c7b84bf81c5b14cbd0dd60c9ab1a7e5ea86a8e7d51c9f45e7d8026a8ec818e8d8e6a577c71904577c579b74fefe4cded656fa4fab8a83dfc931c8bf903cea5809c3b6127192a84ea6d50ef4703171dffee1c3c05cdac2c58a3f39b7640427d83dec3838f312f92811f70b161883a299ea8936f635340f31326fac531ac656ee84d0059ef3f5d3d409deae049cf141dd2d3c5aba509748aed5c58f27e0bf86c6d4e9c38fd07eadfb845ea6cf72421fb8782caea8f21ef288b8c3fe5da7cd3fe2fdcaf27bdcb737c69f0dcff858b9dffbf7e267b81294ef9458349335c71f73ad29c485dd1cd5d87bacba4c20fe47a8a0da27c76cb37ea6e847547e9b114e3953a4cc94b9889614d545ef20a2d4f1844f00d02c412b8c391656d331b7032dfa38902c6761b52abf10dcfd4af18410e901eae365bb987c2911191378165dd0c8c9797c85060e9b8516821d410937084081fb79d1acbdee3ecf2275c96aa3755b2915a4c74610158d6dd6de01de990a81046c602463c89b88f0ff2edf3437d01d38d600e4cc64e4396050c5b390b72996f65aad1deef10ac982960b4fb8ad386f7d42ae65a99e50d5e0e3cdffe72efc35922a5b639b1db2d4d563499cecddf954ba50b284edbe6134bcdf2acd407e29e62fcbe5b72fd3d254610e35ff7e6a61d5361174d17b734ccc5b140caa444cc4d523cb5d1ad1030df4e83431b7d2320f3a42e3220dfe47536654302daa596414a7c5d0e72bf4d99015cfb0ca40a7a188baeefef72541e7a1ea605a609cd5a79fd8605ae2b337b5d3edce0466c0247937600cee814ce56e80bff8c1617b7130ceba814df31afaf1aa74680d761cc83e00fc1da2b25014caf745148371696b9a31435d09340a693baa2285352c32573ac7ef6c9f2913b103ed2cfbab8520d7da9f81fbbddbafd6f1864499eacec44b89c772c7f6d6272771c7eb4f6911900bac8be2a2a537e10542a09a19f50e7f76d9fee662007b8c0368072714c0bb70950c3eae7152ea4e4dc28a728398a9eb811d2b6e14dcc2bf420ee83ccd6f00900f5800024afd2a3e2aa3d4237752b774194496838c128a70b21d50b64dd45d97a46b276f592db6ecc9fcb6be83756d5604f78efb84b6d44e84f754315580e14ee2e128376849aad11e1f872b75bbab4a3784085a089377b2581703ae95ed7e13450d773bab554872dacf7a553ede608fe5c1e37f7bdec7a2db8ee063da7a0e32f3e80dac48801f520501c5cafcf72f3bd65c448eda420b567196f07f35dba1e47fb977adcc0fe4645e997a6ef68fe259ebc61a7bc579f0cf190bb77ba656dc84d37da81713ab586627d07f9867b2bad0377684f9b66264f496ea7a68a4039af5d9e7cf7969f3dc5b06e27d0e2effa061aa4dc24c3600a209588e0cc816756184bd27b9729880a4a41f79340991d54161b04ad6d00aead1ae2d3ba9702834f782114c85ef8d563ce43da8e93d4f1d612030fa5290e3c7f88e808b3eb2f3531c8472f7b11dd4a90f563b5d680f551f2a213a44b7e1b02ecf8852565285430917aa25a690f958e5c542c5ecd6cd4aa09907aa3d310182e067294000f99654b0261f308afa097d329f84d20d62511e17343ae4d192385f266388c8d589ddbf9c4b246c096e033f20d685f0f98fb3f054a452c8709994a1d4b23458756eb60195f7c47cc7188435cb9ddcbd39f32f31489c15d22de03254eee27d6506b589f04af2abb5c9bcada973e6b278230f9fa5f57128f96a0abfb6cf3099b8fe42ca53859ebf6096fda502863d48221c3a6cd92bf99357e3901bccd4439a5414072127cbc930df5082832fe82074d5ac8cd83a9fe417142a37a23b05f58a5f82b1797868806c62de6c18c1c0e4960994ceedef2c86c4fcff1d1622c5aa50862403f4711678d64de3fd07a9354b2197b9acac6326a3ee8829cf1c1580d907db537e3e9a38e0783274fb4dea7f99a280999c07a80c9a9f53fcee0e28229edc534dec17040c78cd75ade79e345b9efc483bdde7175abf38f1bc04cf5887d89ff726f70851513c290701232e0c960444a61a560d3b200fb04b854b8970d8786c8971a29975889a92410e72d135fde74c0a769e0e4dc7a66c56f3bd6f4a4bc8564d66447ef95134efd46df5b3453a142c793e36ec6024c8dcdbadaef3c1eff459a09c825d4e10048b3b8bfdb65a06ceb0f6006642e130d42a3c9f6e769430034af8f4e3f9470fff29932d8a411fdc8ae4d48d0ee667d53325032b8868fb56d99c543f49c2a27f2008dbd781f35acf863f27b97cb70ebe092d923ea714a502ea25257bbec83fb946044c21300924fda5d7dffc7e9e411a8cef48a63c152f183f42080e2013f191c204a413ea642c2f1e7c22a02480bb9ce9d08c4750f19e98dd2214d18cb7e0d0d2e441eab3b98c56991dfe9f67d7e8b5dbf94d06b22011bebfca0c107b90006ae5ce55df8275208885f2e396b31488573fde59f78d9a2748b6d86a4148d3e24dc36e8619ff040a86ff06ffa8e4b35c1ea5a917eceffa668af251c1a7377caa0a8686fdaaeebdbf0a3cd0a0268f4b66f6c7a5cc4b7ab3d40743b3b360db1a3108127185ae1d7bde126f30074fd13209642d9373148f5f6f6ac449f25456af6f954161d5767c8a99fcf78350e2cedf883889ccd6db115e2f7d9e388a5656ffb38eb5a7c39103b08486033e9dd4fb06fe7f398e56c9e007a98139819c57dfc8a90f1da499bc1021afa52ddf1706e3e45b00e6632a05ea494bc486cbaa794dc4bae11d0dce80d767d76c474895b19dc914eb8a90e9a8b722b092bfbaf8786a66a5041352a7100b8b33c804cc9bae6cad467384592b8615d23c2f4b6ee1a9910cc1957f90def95be435ee5881039d1454a08b1980aac95c948aa3a83b2d4b19f8543c114db04ebc30c6d8c24f0cdd3532edf453de89ddca710b716469d57610bc3e5fd992b0c2d61a0a323887fd60546b3a6eb43f33d190805720d9e3d652833a4738d4c64bf046ebf778ebb9389de397d92945d2114669b465a70f4dcb31ec9bfc0259e1ee245b8677c8b6b6a2b7ddc924f4ff09470da7946942a42b9406c7af5b569a2d57a5ac6028d883537a1df960c8079896921524e4f9ecc8acc602131c0778445454222debd46ac87d0641acdc0cbd08aa0c7dcc88faf48a54ebcfc364a71629a69272914e9cfed4b5d1559c1622954416cff19d52e0fecd20005a9572985446173b9659a6c2502cc7e8031654064b0a567a66a967dc6ca57bb5d806b1d4793a6143fcfee3d3bf9d02977263a0112a36e04a5a56fce86752f019e6029c99a4936ec43f06eb6902e12993c672d4a49d0450e1dfb586e975a944a048bf1556600f765a1ef43bf66d3a42cfd8b25d0648cd2fdb7ea5254038a40c220d89e11409996fc347dccec551a2188ff5e1649931ff688c23d224af487a057ba7d20fd5ccfe16f6b375924056c44a00100f81dac1266cd61447ac0e665487a7373a20421183c293fbef8b08f4b7d05b142bc2e7147f9cd8278f8f341f05f28b2913a599f959700d7fb8012b6c0529f49e6839fea714a24c1922961096ba5ae09a8f21282c5a45694b3bcf97c92b65e081870667de070d0a206be473c63f12209945294627732c0fcd744374fb642dd2adcd3968c32b895bff33f297602a55a743623fd09a987e7ddabc1b70199dcb379942a7bdf7f189622c3ef54a1051b19a1a5df092c87c6d6ac93efb8aae63be171c162dae02efbdc3d28bb02c0cb6749aa30e0b4fbe114c66a3519ee2c934fb91f444ef36380c39bd0c66fa58925858ec7d7bc5de76b5fad5cccdb2d3fd0d522ff1b5fa528fd258e15682f02bdf3406a3da885f0d3c131880616796f7187ae209c098821bb018088b6c8198a64c1599782a46fd0d6f668288ccd0dae9759b787a08773882fc9a27c723026a7fa148e6671185424fb067964db8471d3e31f31c823ca80556eadf22f57199051442af8ea99dca578b98bc0a1166d241e1585ec2b8231846ef9a8157d2e08da78496c685f025312238016e6067306edff0c843310b4a297b569e3304e525430ecbc1903cb10fc889bcc9b06ec2290628cb35395092f9dc00cbfdfe620320c0d9bca2cb0b76faff43d49186620f4c0c63d2a396348a807dee93d09e52b0864e6a00120e0852f5a0564bc3337523791cd8a2fbec49ac0bc531e8cb69dbe08e50a4efb19db700b28391a6b22e5061efed4c66b859a2ed6fafd70ff9add0fd92ab9cdfbf089b0c94b52fb396106f9d8cf9a7b58240292363e58b1257e8f5c1e445c60e0d82b4b56ba038385b00513b6cc23974997cd1f26cce9ab8217b612a06c40d8a4d761e2c85028f06183ab4594d77c43f6a22337e8f6915a8f9e6f7912a5ffd7d50f390aed487a6f3978bb110d5258aa705c9ece5f7903b291239d36e2e23e63dc6954d6232e14607aed6862033a879f4a246b89f68bf83a498dc4c23b140ecdc48c6d0539f8009e792315ba009120cf9ef3f40f191f52e8456853ddc8f58c9374639d6b5efea84b1d2648a085962ab7543443e28ce11c14f3b01c7c29240de6af95841a84da2965c60e02f2875461b488e439b89c1cdceab565b42887d742ea8962add70b3b91c967c1a207db47665922aac1eb8fd576d47407160dd17c508fdacfdae871c40bb70963c4c457eec9827dfd70bb8388ef297ddba5bbd7f4de4a8ea68cedc0d2c727ad57681467b6ff7974b372b4d058e7344e64820283b9425489a6972018ba46a5a2d6900cf1c6fff768504068820f47f29f183394c14cc2818a25e37698ca7fe00495dc6723262282d28cfa80785254d9c388c08ef2951e0b043ba8e05a1b8827774d2b7a488a54625572e0cafe07ba5a382c19dda3e3c4743bf91c945709ad7332e6e1ff8ba799fd7603b666ef6bbaa466f875247e187e4bdcf41d1f6627f7e061874b2f8b411bd78a2464e9848d8328df0859fb5a5db68065ccb52db66673713ff78e7945bc1175b297eedbce3d5ffd57f434d179a3d10c5849034b718e29eefe7f94967c238a81fc914dd39cb240afe1b91f90aa45b98c45f6c1d29d8b23fd4f94e008bca7c8b8e82e61055915440eff8ec6b73e1c07184dfc438664683511452897726924377d1c5957f6ccba1f72062d4b43809680c71e3eb20ce6b16d566b1d3a1a0ac2f0fd03eac76202ef5c6cf3ef39e12d25bb14559f804054fa16db6b5cc2294e40d8f811bc3ddfbf76bad5c5721cc8ebe2e6187da5635ddd0981ebe65e17114082f2fec295c4f524f31b42b938295ff7b98d7cb5dcda2e122e883cd0899a16ea6ac510d5e0c3af690ea5a93a135f87fcc19f54d9293a88a33f857953fb94b6c5b8092d4b5191d331c3ee3aa3b793cdecff1ef2b3bf4838920c0d44a58b44c03467f10b83c76d485cb18110a96741ead70d263be80a4dcad6e5c43bda9d0c7d8c78107c8887fe87bd5eb568fc53748ac29fcdae582536b661e5a8e4c0f19c2e65d1be991d7218da723ef342e5491b30f082654ffb041a1751ac37b847a2e9f092fa09f52233e9beff7372998b77485ed5aa1da41ca4118a64e3bba6cd763f4894582ee8024efd4954d33ab480b4654050edfa70e8471b42a343e3191aa9441edb320bce24daa5e6549f1529aeeb900d36f0b1d113b4ad8d8c0cbef61526d5c9a12ade9a82c727be09766710dfee8a6b52ae8908605c4931305fd3b2544a91acf4196a23d8d420fafb9aa4cd01c9db791faa13fe5f26927c1f6b35adc58fd6f0de199625bc472b8db3c955dbc825292035015f4913af21fc66b8defbf3bfa1b4cac50bdc820763a4cb7306d99aa82bb9ffb377fc882f38ea9d850fa651c3e0af9af625cca7a34448095b7ae50c62d1e5ce6608d062da204ba7d1e8bc22b58a3fdfc5745a9c2f14401809c0d135d84ec7a8f0ae35641d28cae9665867a0ba06c784a75d3bd29274cc11ca327a5430833de0cdf99927b988290fc019e0ac5a3bf889a92240ac87474f27ace9a6377ef24504f3b842700d656f898c3abe26afa851fc8be9d1393f7af9196bbde8181b570a4f9106c60cb2556f3eab2b9112f441415255bbb318409613639ad39ea51e2f9b62b9a9f6c4e4bf68d898a3c3d6a758e7463bd4a11007d53ee2c4a26364ad5872f9704d9ee35684dd0d7e965aedd8343344214ef2ca026cd2ed6e484d5328cb3f405f0d6120a8f8876776b89da6ea42448dfa1fc54a4fd288ae3a39fb5d81979da35d855640e874a66cef8789715cca870e3fda99c99876b57548f7142d1eb4ce44303d2ff4ee3c12a800672c9ea0a86091c0ea06006c795cd977827bd491ccd092201657ff590995b51a50e85024fc2ae61851f4a613c71b19041074bd37976bcf8d7cd075625d55ee46303e4181c82937e6c3aaf048dd8db98cea02442b4f7d2c04228bdae441508ea64f8afe8c5c237c98ace909c1771fa79a28adbeac77ec247819274d37e401abd7794ae07b44f163ecfdc54a42a039d9d60395b1e947af2472c172c864944978acbc262bcab9759ced286c61f601e5e17096c5c2ac4f8e5298d50f82383a8f22549ac79f15ce1a55585d477dc69faac48e6452ef34578e35417063d8cdb4f7e6b7bdedb5f7b4e3e82efb2be7710e4773356b7e262271c054a1ae8ede84c7af2a5e2878a0bc6e529a148e646e51e196e3c9328f18be13733e9b5e9164535c65f3a94509ace26421b513c7cb5220c5094f1f417d9f3d3cfefca087b358aa5f765b54f2ebea0f19f6a6865d769982f46d154c330ab05ab5d85f9c1c4cc1b2b8dc0540a5d8e3772e93d09678388b702be051c70848c13beb173cc230e95161f1f4c7a25578e1e25446503dbee8b83b78ad51ee558e0bea9082bed16abc12d3fc619eeda5a2802fac1be0b03edd668f28d5b6e127c2a0fa6d7782e000c1247e2bba06851dce35d21651041ae15f6d8d2ea55c4398d29e98424cd54e3c2c4dd0083a7cd8e5b36f7bbaaf04f5e4ba9d7866d098d8b6677eb36a74ab1338022d86b98ac7d08b7418a9a26a9bd3c970b2a3ca087822de92b11c00eb13426639d4a30cf586172ae41106a13f71c04498fee4c06dcd959b54005c8ead383b82c143dc30a6f6a4e4d071702d784f148edc42700ae92ae2ea71f851d9721a75e0b5db61ddd911abb23222ac974306a410113ef17e5089bef09ab288a11f681ad852eee9c21477b0ed7187e76257818a6ff8630cec3fc80531751aecdf92845afccc10cb966b6a655d82682c32315718cd8d72df3631ddf86042d79e7cbfb7b13cb96fa196edf5efb0703e45ee7945ca0d6a4064f8f7c3b50a1209373910c8b28be949548cb88404ed91b314531d92535aa53500a80d8d880a902707b7d04e6bdc1550018fbd80b064a087878b6947495b5a5d9c0c0cbb90924f4bd2d3bca65a3843a6ed492134e4ddffd5001907abb7fc48d3d3450fa4b3f1c980cb02392b9f394ff0cbb175cbf190dadb4501c6ccc5fd2877ea8b5f5be91fcac0ecfe38c147b367e3669c9afc2dd3ecb6d57219e07213b844c13d736735d456f2dc1f644f60d2acf63b7a802c0b73b4a515c86b0845dfd94d68e7be8b33c49b444ccab9aae5c2286c2a1e2371be4ef8255da2fe2447e352bcaddf183ab5dc103c6fa798492ea5035a305ee2c3147dfddc462e65b8300388e93dc70e277a0391979a7296a908b7d898c877f4f50cf2bb8e876307a66934a44bf7b17d116622bd7c448f57bacf63e6f06c3eed4cf2d771e42eca7c1c605d3fa080721063251a5034adba671407b0fc77b6aedd59ccc569db1e455d62487d6acb1a3198cf350d008447ac415a21decaa6e8d6c4dc7794fe7563bc579865c81d00a885007045b002b3e6b0dc56a9be61c5c1f20bf24e4944cbffdb5ea58261f889a9c6bc7bc267baea055390b2e8488a3376349034a60e45af6ce6694d43ecd114c029bece4c6748a8d727b284e508ee86409e01bb0837ae62f0392dd7d8059d742dfc973bda7ceff2c125129be2c01422511bd28aae91cf23c6c2393a622c04f537839668527a185cdb7640ee87333098588f82278f8181de8c71150c6ad85e430e5ce8e346798fb965d7096fd41a04c22c7bec0dfb324e569048ee078fb30ddcff384a25e14a878e89010747ecbcf6b90714ef9678a08c4f8a748f4443d950796ee6e712376c0b6429b62068828de3e1bb62cf43d23cc2d27d9c3c08a42da3f68e448bb6c2013059be108bd348bda44f4f694b60c8c1a31abbd147569e44913f4b18a16ecb49904be049997b71353d114477a2e62248cb57e471040d5b9d188d7d4beb2caad9b685945facc9ef26b283ff267308a3d62549fcf352c94b75cb539548a40407f7a7fa2f00cc6ef70c4560be15d468660b2401ea16fd8acebbea90473931d3fbaabab06d9935ffa5f5e6246f5b0e42686b37547dc79902da2b4268eedf220b7d38ca6eb67d6888eee3d94442a315109df04a89a1392811f04d197331d8048ae5c3a9e46461785445ccc92a61364cc0e10757541e19405c384dbd9612d9385aeb6f088f4943f92ab0700ef4e6d25b1f29e0ce98902a729fd22ecc50c6b39f7b0deb60b2fd8348dcc182856bdee8dd12e6c0e37d53e516925491f0086daa657d7ddc18e11a42c9184fa9ad79ecd38a0bc0a273f943360758402a74eddaaca7160118fb1054112b1c3104c399b8f7ffc34bde92081a2176fde0b4f835b3805634307b93993dd9110ad69ec12e4b0d5df48e0f246ba47658c300d61b0e38b456dab062e72b117ac3f09e8ab4be2137505943a6205df3c444a9ff0b603eeeb4da306456fba03b024ed64dba21344c964ebcd0f45ebd61732206a5d7adcdcba7a8a816975bbe04358eacae481464707d198082018298a1779b2747b70912ac0d0043e09cb37e2b1e08388e034b569e0f023a8b5d9c2516d36eac798d7f021305710eb302c5b092ff6c0c721bde443f452db9665c715765993f7ce580300172bc619eb7f14ae7c66bb4134d37c754ac4c126bb55a067080b70bb9a9691982e5f53dfa332c1df732b379400a98ad0500349b090ae73eebe4924419d3c7783c31a149b933029990a69c4238712633e189168fd5e6fad8f7729b9a42a7aca99842a7480c438c540052463e823a492489a0d0f1233e64ccae95b271fc5a602020b7c5925a2bdae14c7948745015d3cb057b0a26b19071fbbab76016dc12e22a1192f3da4c08cda8fde0e0b27d4f33cc2b5bb0a7018ae815285ce978495218bf582ff8b04cdf58e1b2102b35e55d474fb586646f4ac64a862deab4d6a60eedc2ccb5acc867f7d23aee2df15f52cad11108719527898460d144c404286e3f03a6808abe46b5096af2be151330ac98bfc11f94ee102170271f3f2f89e01828393e50095b67586ec358124eb808205134d7dce624c4a185f9e8f0cb70e5c4a78b7841eeee6c5126cc76074d9c945b5426b206754a9c03f1ba00211f63b5b5bf4f685d70d50e34c7852b221a7af50fdbb6c4f6e00e6bca846f133128cdbf311f91b2538c653e5f16e6c8573b7ce6813c1a21387dbf18e89fdb4d20c973ff701dfa256a341b944a7354e7837392c9ed7f108df53d7544415efae08cb1036df9483edd47cd9e9c0ad489d3295960c8307c04850f22e67a232c12bc6a45d04d31c24b081d4e204140bcabb441e741bcf1415e2b3c8ed587d978fa05feb6e183ee105fb547d8b0ed0fa9647fd894e8a81f7fb05ca3fcba086eecea8b5341fc58654881ca56a30f1bac57211471e94a1a2e9c8fe4554f0a63f27e1897de03971126b092ceb75e1ab6362c5aa742b3e54ea8f27b520a284d232256587aee749b974443db73dd1d9b73725f02868279b206f824e8de8458ed43a7a4b14204b29e1e717817c44293887cfc7e4d05344f205aa2c7e38362fc53669ca2c7eb1e45fe449c2bf406b6e5b7d18d72a25c856935dc48a19cd34fc6c800f7018a519e9f57ecc2430042d107d5bbb0940ae10dc99aa6a708e5b2709764cb8e2ef485a258a68a5fe1ff013f83cadd1b630be6ab3338eb00edac16432673b991bc0a57b8ec37b5434322a4a9424bb900e92fce4efde8194a5e9eca6ce977989048253e3f6001b469b3aaea856710bcdab1c56ae2a0eed5f3aed3b13c36a00db1a08edfeda0a2ee6c2932e4cac952fd93bbd5b0ee82f0e28b656d3e370aef1ba2beb10c5d0fd28416479441bfb5e1e2133e62d2249f74480b0f41666a78b7f947fb4e3b4665a3084ec65fe3ff7d23afbfc7e2bb19c6e04c08890754265a855eaeccf70433e0956aab1c8e0d716087279388902973587573998c7e030c48c6c2380da4249daf455c61dfd7cded3139981776a75d467aad9bebfe35d289969ce1ead3be385eed4b52c167a27a7985463c2788d57870c1adcc2a2b4eedceb63f292854b20d2a1a19dfd455d109242997f4558841c3116a362bdf88520dfcea8d37c23f7dde09c99b57adf435f35d447223de6ffac146b5926442341b6f92e31f75b2058d0a2534c10b6afa25e452a8658ada959c48fdf392a71f31076c9763d2c11251a91c6fa43c306949e9be6f6f6cfc58b2a6ba8c606c0251cb41eacd307107c1d4dd76a412e39ae2adf87134d2a00c818ad567f72af996f81b19a6ee5c3de69ef94bd090f2d48adced882191a718a1254912e7db68a01e77159e286e482017761aa62cddac51e65071de56611c4544667c0747ee4b48a5eca4866fa5df09253fa9c045e30665c41aa17b14b0478a21a141b78f02cb17307813220b622f2809271fdca679c208b85d8c9ff28cea55244703246eab5dd2545a8fd6603565d4c0196966ba8d15ba440b37c070cd61e19554bf4183c5ead33d306de0ca21f6adc65e5a3aea4a8d31febaabccaf41c36d057638cf11d485db1216ce9475eaf0513aaa22049f42893dd9870c4d0b47cba1b214692132f2f8f69d14e94289323f9f71d493e84f11ebdc8006d6b12b422a291b9d36b35b8e00bc4b2f73cbf63145e1f7694072c0ece0c8af62aa5d45bba688c394c7f02bc42507b6b7f84152ce7901734b00c72194dd845ffb72bd60dfdc7f5c7263a4e072e8235612ba9948b932989c4eae833e49c6ca9b8a061ce758093e99e147578bad94c4ad79aac35d7bdcd0cd1997097a01781fc60337bd5de66950b037d8a699503a573005b6849f8f04fc387c2ebe6677b227bd46010012a9ed54c1a031c77445b677521a4979714423c7f13cfa262d8885e35c0a61aa682ab970d60c970fc231acb93a1fa25d8ba5b15142f5117425f850127af6ea262b98ec51b12f2cc8274a93e8d611c4a78190fc57138dec50695c2847cf6a111e349b093c93743195947c5235bd30508fa16ebc3b968bc13a6ef87a52d31837147c4e7df3e26c023b0ca76dc53ee30b03b1f3fddefe6e823cbba5372f128b7a28a46a7188268d767069458a1a30e38a74ae958905eb8a4636928c92179aa6b2fec4a8c056c2e0340a80cd16312fbd1481ccd225490c37b22691bd534897c9b2b2eaead21bed3c669f4bd390ce617b4f8c9d931f068f0085639b0997a316fab1d95f607ee9da6ba623131bf7b8f556b76ae7ebf79b0362ae2ad7c00689e3f9a2e637932df54aa5fb97de232aebf179f3b794af4d96ba1830ff5b565a9c154fbe034865e9ae4841cc256f95cc7e29c6e71659112b97d9574d860582bf579da63382c725822dc020f9b760c516a5994679414ea2c48ddcbe2e55db5d5fe994c1d26c522d0a54b399b90ad39e8a395d70867feac47dc214c147e5b97136ea7788d7835208f7d897c6f9e4fc9ca97e2aa48c9d6e670ebef6b6d9ce81dc3213008c66ebd59fea3f3c114d3dbb7598d6cd4b2a6641641a500624a07cbb0ec172e7c20424d4fe4b295872baba5569e5ec2df2baf3e948dcd66b0522adc1c9dba9a05242eb7578fdf0198021e0b90e2996b3bebfeba0b04bd3e4d012cf04c463b332daf1c1e25e80ad003e85fcc96cc32ba82135a00d38458100d7d979be664123cd45ebac20ff0145f41a993a9ba7c95f6518a5075502d620c53149c33665a1a3641352a14e4b85071040eb0e346499744679226c9e1bfe0a6430ac155a247284294eabadb95c1071ee366f267460d8473ab01ae36ed6afe28f74ddf73d480940d2389e769a4431de7d8cdb996b7d10b6542a2c93b15e09b6745912b96c7c6f751fe742b518fc692f17ba484700b8cf9a4c3f3f4d15346fa9caf7dfe946fe1d090a028fb7eca3286ea82cfd88b08109147836240640f0680ecd14fe1352ca7c33753191a315b5420b97098f4cb4789aeeb734e07dc98ee178fcfbb493bd284f8312f6c1431dcab8585be18d5466973d65aa92e560763796dfe12a4ff65834c1df5413db3c2fda6482b5a24d26c025a6f891169863c2bc0b9ab0d75ac62ca1708c31e51ae600e684fa24ccd669ba7e91008d14c0e662e8ecf07fcd0f783a5ad270bf89930f35a428617fd975b6450ae1329db248a42e9a2c9a68f70aa2d0f88c0705c435f2bbcb171f0d9315aec71b75b5f98b1add4d8b6856df4c80ac08626d5d1a707a0a8478032aacee895b3054aa710e1a3e90fdaf4ae14759d6be28fd78fdd7d768e0f4b7d2e66ce3ac34a51848c97081ba3cd033b540d0fc39409b1f87ef0e0018000ac7fad938666c560f4a574643a87747d1be073460836fdd28b67b656f912bb74c52065e08a5087108d66ee20c88091c683685ca8845e64b1340330bdb40302f51f1d2cdaa7c24cf7889fed5685418db9435e2a3d0085badaaf256356dfb8ca4e9a2795078da0bd61452c1a33296fcd0976a02c554a026501228a97e34ed4365ec14fa12ab26d0ac9292404da034ea67fb73768a8cfb8f23d274c9a02bb468c7ddf4b9fded720422a14157e8bccb918575a919e3c52c592cbc83cd98cd06618efcf5ab1b0216042a1b0b2f755e7c37848559d874e168b1fd75a0e5c83937d3c5ffcbd0b0e992c2a664979a2e9ab55a1d7d670e014673e433c3a0334d593549fe99dbb56afa6565337f0bb331fffa7535d0a585554ddbea3dd1b10c6db48e9905a3321b99a3982ffe4edee08bbc7a3765959fe8587e56812cd056665eda68368ef7f4c31943f7f4e7544009eabe64d9dbd36f4161cad4a75f63627cb249baa763896398f953f7f35b70cc83dedbcbb2121fb99fec98c47befe9388a7e742f41980235e615ab923cb7b2ab929cdbb04e175ad3bc52afa04886bae9d34dc9f2864dbfd3be1d04d894ccaa2db466ad56bb51a59984758b51194b5a2c62a019288d9cb2b6d67babc582ca84e8cbac9af4ab82d2a0269d85c562baf8d791345d46d3c53f446510305f60f60028c9b3cb918581bef64b0bcbaa6a9aa78a39ae62abddaf5f1660cf2f5fd8f341332a63c9107dd1c8395d66db5fe49e595012b76bd70aa36edbb63202e9f9a8824868edb7cd6e6f371b5d8a27d82ea332a0187df11f65414d2ef8ae4d966c7f8fcca058c6810b94c91e65186c7fcf39d8fe1a28b6b38a06babed6c93a33bc6461dbdfc2d2d837658dd4b1e332580e1153a757b6e1fc01d0c9d92e94c3471ab66489b7fbd65a6b2d102135eed37d6ff0f1ddf8c347da832ad0f5c9203bf8487b1f7e830706da0c92c7dc9c9744dc6b44e88c111a7ac44b397c344f4ab696c347346ccfa3074943a901e16cfc35bc54c3da2cb4e541ab1bb6638df9f251010e78e9c70d14b8809726f7dae7807d44030df7b7b734e478a2e7cee126ed94a997a3070ddaa8ede0db5a7d6bdc1de867e7e63ca15fd36d63d4020c5e9a1b6fa487395de812d34e8a4c01fada66b6f5fbc7037ccf53abb3b543327746fd211a1a47355de0f3da97930ae8cb1c3ebbf3f32ff0214b7c5fbff6c9007a4d969d07fdfc7480c2f20c5dce96e7bdaf8fc3bdce48778efb398fbfbbf1b7eeccce7f8f416489b5264bbdbf902c43261c93742f94994d9f43b33fefb10d3ec7e66683cff9ce38f7b7759d0e59d20d7ace58723edcc137e8af26cb1cb6ee3cfd7800a15736e8b70f021f52f351e7fd71d4b0ece0d02173f86cce7f9cb9ed37037dce83c6cee3a89d716eceb8037cff6fcce173ef1d39ef1971f0e7bc3796fe1ee73d211abaf3a00a34e7e9cfd3edcc003ee76d5c1bf4006081be8f833fe84bffcfd7effcfdcf387d04fa1d86370c5ffb74849d9146fffd20b07dc73e1e3b3f3b23005aa03b5f3d6f9c9bf3f5d3b8e78c221938afb31e3ddf194bba3b1f8ea50ed0ebb104913be674e9fc9c2ee16bef3fa3e77d149222193a0f7e2724cb1c3efb7bcd19c1c98d1bf8ec32879dc3e7b327fdcba1df1219bf634d7b20f6cb0fe0701f6f1ac7711cc79140b6b7288028d07302a1fb92980462bfbcf435fb638931a69704b291493472d617e40fa050a81ef6b491ed7b9ff1c6c1fffbdedaaa3f53af03da2b5b7fd636ae7babeedecf19c33d4996f8c1afcf8df8bf21ab3dbf1df4cac665e6f203d138928796cdcde9b201d1be0338e0af59cbda6f9ff1e3cf9804c2691f34fd30db0f47fb7373507b4e174d9696ac9f6b7e4eb6f6f39778e72fede7b7f5856c5cf1de88cc2b39e8620c349cf08434ae9c3c3f027a9ab9271f869c3ce4244b9cc6de362094c7dc40eeb63f6b1d7768df79dd9743564356bb3e10eecb0fec4af2d0b2c12f2b09571208f7e5f63cd49d04049ec7ef83fbedf1d7dff0f6907392ca8d040292498a78de07213e0c397d3c1e8fc7e3f1fc0f374e9e17e2217525d1274284c8cc8dd3e76746a7cf1399099d3e3f834f9f27c299a150a1d308ae15223f8c4e23a869a04e9fffe1c6e9436a1ff46be3d0fddc5f125b48995912c410579c3c417c0105b6022745b039212162059125a25801e3855520c515427c118516454ef467f75e3964b5bdcfdb8883bf48066ed7cfe16e1eea9015529a7b7a6597f8bb0d02f7ca952b4cd8db46961c99c4f3fe2599f9938714325fa725156f6deb408bd5a68fa36caa831b1b1e30500ed91bb87b9301dc1bb943dddb57140a8512cdb07dfd8d74000f74df1ceede481e2aed309129f5fca9120800a11501845604184d76e40083354723ed491031841e8bcf32a90b0182ff8d3972e0c85fce1668c31edd79f39defad53b316678cbdee7e3a12305d36dff467fbcce53167f2868fb6bf93563049cbb790389c65a4c149db87c6e907f8c8d0e58d9dc32948824512706b94ecb9f17873cef971b8fd74e4fc58cc789ca0077afe41c0bb1ced25b1849d6f189fc723e7c591c8120dfaedd3117ec661cc0fe4c21c60f8b9f3c4919e3e6312f143e3cc9f42cf3212f9e14f2172e64f22d9a39272e8c0e1a38d031a7bf8086b1c3eda72f8687bb048170a61cf4f0707846160e87877fcc4b002dbf9ef0a46eee74f12b1ad7d3ce84e22ae60c4a9bb4f0b961dd899ece1a3eddbe1bbf3dca88591983f1f101471f7e9b8de678e25cf1d72c6b93da338ce53e77addbdf7e67c83d37d5344d9e5ec62c2b4935f94003f29017e626386951a729841c624cd3d270957c1f933f54f07108fe338eefb6ee24e08efd3719fbbe46b5efd2c8fb9afe7799e0ee07fff79dfe3d1fb3b7e2608a716c637d20ddaf0d13771063df0f372e6e606b187a9e7795ea846f7d1eebb6f87f5bc245edb7e1ee945a16d843c5a76fe1c7adf48b7f6d27dcff3c091f3fbcdd0b2738731c69352dc919e078e737bf82fb6913dda7df8f1d2dc9c8f47cb0c2d1b9335ec3a5e3737c771ba13c5167ca425890fa3a3443fc4ffbc48d29908ffe7c5078da21f2c0f7a16d241a408bf487a8daa923059839f400f223d453a0d767d3755855ffafdb1ab9a40ef8fb1e03e1d61081afd5455d58431ae2a5c55a3c7cd97fa5855435a67acd2da695ca2471ef0ee3e7f593920d067c2dcbfa7343306bf23a09c308e1bef836399bbf7bc0d7ef2fc4769f42eb1eb7a9df78cf3343f9bc37ddff6fdd475221f9dec9dc743061172f23c0e9f8fc9ba799e513b793a7eaad8855db5caee10ed2c46a000fb7293ccd22acd5264163de5d17b6d4c925906c876abdacdac2cc52543b4ebaca0242de45b17a3f9872e466560e80bea076aca52c0804e68cdc66c18762685955119cb042b06758275716654d1ac1933afb5d65e4ab7ed05b77375567456d0fc4317cba8d9c5eeedba2374b1ce8ace95599ded9f9ba0809a31389826eb7a41d93608517c4c17af2108dbdd612ac9c1cd99a1392468985b31ae18d3cca2f41ea9c12ec04dbe719eb691db2874e138e4df384f4e68add6a7a76e2442e4873f7dff03cca97bf0c76cc43c80ff36e61a25a68bbf506624b617a0cc49ecacaa79093a0ac06e627bf77da39fbc51f423480c429c01cbded8c5441fd9c5becfa3e807f8f941b293559293b392684494ecc88cca33309c12b4c615419799b55906781100be5f76367d9829334d9dcb334b9ccc7d2e26699a761051846980ce554dd6e572752e2033025d97599f59d59431ea2260fb67d40d0a95676ef8e8c403def8879c849c50997523011b93ddd39d24db96976cbcb46516ebdeba69acccca2c981b58d574038605a3330b46d3b44ba5adcb4b656645718fb5d117fa28d821d807b09a3e0077cd9aa6216092fca793ed3738378ad0a5a50961d735b469da966badf78642d60779dab01a69a3da70c18698001b35e780fad8d3c55f4c0095a961bef8d32b7018d1a59dd6da59dd346dab1aa59ab5333bbb57abdaf8332a53c971852684f4d560137ae525676d7b439696864993cc1d214f1b254b2b5b6143059db5c0108bf095672116d355e6d9ad9bd57e1bc1869adb08a0d8fe1eaee6c873abb2b4aa29cf6aaeff2ed0934a014c2a4c0135854db07c1645353545a46a6a6aaa295cd514b17a16b295996667160fe851270dd90a0d5f95149211ca94108611ce2c42d98c710c7e700a21193117b4cd6e282ab391e16a43e5594ea31ac0a332b9455f666950d30328c93fb71cf6007ab3a94ce845f883108c3cc5f6a7e12b8a9ef4858ebe6bed38177dc11cc7699aa30390c3e17cf53511c4830f0804aa21ba50340a2291682ca520457adb985f4eb29429f215740779369bfd388e95c5aa69a95ce574598d85f0150bc998a6cc841e98b0dd9ba942e7d6cc060b2cb0306b54d8949d9067e036b313bc147acd4bf148fd2ce519315dee9c4750927b43a43c94a7f296f066521e8d47d303cd63bad46c5186c5d9f6150b6a55e3d949ae224bc95a6894b29a78a99c3ae00173e3c62b7c659b1972abf6b0b535c32c8545a43cdbb8c2d8872b5948464d1155422550928761cc9193e1cdeda0c22684b05016fa40b77a4c5a2ba594525a354b69aef93a310242f56556f8100a4e7419a6364c4d19b1a95502498cd5c29ab0098d7cfa123651c322c25413352cdecc746102456d2ae315992ffeb9091e10dbbf24b7cf4229d34547f89a42c3f8a8870c53cad4627ab1fda7ad1aa55ad5b4aa69365cd5a858db723b012fc08c3b05616a92fc613e1ead2d34fd3253b2cb812ec5d86cb557b319437766c2f47af08a4c6f88edef427e79796179c95f0993263633bfb01d00066f1b6568c048838f7cb87a58a1277d31c00b2fbce07f23a68e7423c0d3c6ec64bae429f20f76e0ca2d2974f8aaa63967f8aa5b11d3c7834e6bf30daf56edc6576fcda971436d33d3257c511a43c8445833732b646252a1c3147df127ada84cfdcbaa268caf3d62014f7458934a1d09b58aa3ce95f7434e23cfea5cadb295560f0d64a0ac1698237f1f73e6fd3095906719e8a1810aac726b75935b3daa4903d3144a09b5986484b0f065a3c31a1f79f80a5fb5661a2f9561cdf652fd05d054d1655e80977178da28c37469c0dcc29b993ff050dbdfd363baf87738d065b80a57219390e531dcaf39e2231a1f79f81263a26cfbe7933737d48c125ed1c36ae12b9422a40125f93c556edf2aba1461375cf915b3f4c20c5f616a52999049149630554d21bd76ccb05535e52fe80b396b915d5926451663955fb915da199659b217f92615a66e6e6d0f6b7ee7d6cd8cf1629a6818db67d7d265ce355895675e6a7bc7d265de50ac5d4e57f8421253222bedccc392a24750211b83939a3130b8fccb71bb879b2cb9161e74578d526dba7ac86c68f64ae947e90a4368ba7d3a344a37ada4ffc518638ebbdb915a572dd8d83620756bdb1d81544ddb8ee04c97eda7325c155cb836cca674a4557202a1955e4dbb9aa65d4dbbdacf8fe2b7c14f98e2e942e323acad9539f719340993e46f8432f149855a4ab4869e605c34475f4946fcd47dcac974694d17d674a15350520c3b58d55baab0e9a3304bb47a192606186895ed3f9aa61285a9150471ce377fcd631d93e49097e88c8b668902f114081ac51cf99ffc531a6a35c38ad5f1f78c991bfc401026661f388284a2384bc42e112fc164a046df40011f79d6429eaef63520e30d54899b1b724829a5b40758a32fca4b3d6818d3858a419bb05d09aa9a4a19a9dcce750cedd68cf1edf3c46a3999261ac624f93b19556c9fad4097740a9d0203372569ec0c7ddf7e98e3380ec762dbcd9ed8a44cbcb0fd1d668efcb55dd25878842e69cd8cd1b63ffd6e4f283cf001c575e4b6a67dbc7afdd3a1038ff9d93f4a2ba595eac063ee24dddbe0a78e0c22e4446b680da578baa47c04435d95c6fc358e7524adc9577489b1a5b92de4c03f39d8fe79d639c9f973c8ee6abce481cd98016c3f62441341efd2d2509a4d638ff888d2d0d0d0d4daaac20531b5fd7356a9668c7d27a071050998e822c583f98325bea882082d584448e0d5a5713c154276735dcc7d3a34cd086eca946aa750196fab9ea75fd5b26c132f618ec359956b37daba592ca84c253ff4450391d0f59201dbf6d74fd0e5effb1c87eabc5a3dcf8e560accbeec8db53fb060f8f0d281c7d4344dd3b4fb94fa88138a40d702e080992efe01a0a649bb2a5466cf177f0350d293246c7fed04ed9933ae07fd7ac9548079c9a1e9e24fcfd0d347a15ae9bd75ab75ab78a3a15a616cb0e16923011c3eba156649664e72744325b904666985f919103dfa02d6ba9de0c60a3244b69780d21ee6c8bf23476237e9cc7429f285ae61ba7468e8bf5f9f729cd534f2f3d1c53240a9f5baaeda0c50194b5a608231c598373e3a1f20143a561f875b9a2ddb64ad56add619ea9222a45c49727f7e13b8246a497d214b5ee41da1ebd3af956e1bbdb7d61de469a3d41aa6737a9ba554084a652c99c37c81711998c550716433a6b461e80abb66742e4208c0d7e173de89a04baaaaa6f043a01ffc10703e7ca7ff037cfd3f4211256b005fbf0da0266d0849bae2907446db8d96c1014a3d24b4aef8031259ae4ad57935baa4332ace4f910ff0e7fef1a00c8c369fe0ebdb6ab57218638c5b3c954aa5a98aaaa88aaa549a84a9a4b7f184ae233a72156fb5aba07d2d735ce632c7654de334dac4764dab1849cbd5e9e0d70ffaeb51b373637207ba5de71c8621c7c2e22c20511431c65743d2728df84b72dbf018f4972d50ba6d2387c373d63eb098db384ecb81be78e9a9a2e2b4cd729af6c2344d198a84bef82c6190d08b5f071e73f33ceff3bceffbf965527f0e54268754c6fbe64b383ad9f4c9a65fb292c8b943a2715bc338056fd34fc72433a39326b51d79d01bffc5240d82cef440cf92aaa0a02afa82198359aaffa95437d84e9616894d5578a4309be8ce0de3adc6866b7c586b328890937e1c8e552a8cf598d238aeab5f9ec700b1a126ab8a2a663385d58af2ba815191adaea89430594d18589e8d893fa11fb5007383d5c4b2582c0d6b7343b1f2b451da4caf88b353bce4228edce19bf32856e5260a845d3511f784b2839873f8da318e58247eefbd3b986dfc28a4be1d2a6c8d85c3908f280ef73d4c7eb0c8aaf6b61171580b31132d52632282ab48034a15b0eddbad56e525edab11ea562b99a4f3aac9aa9ce46f555675d3a9b69bbaa7af3d27f9fd4ae23aea811955383e6cb041235fe68b015e78d06366e1635e714d9b3be81b946c7f2852904c0141d1f34911b60f2fcd2745a8d9fe3f6e30cd1af05f528475dd4ed0d1a09a30899a43809deed3fb415c909df06352147a2b03fd21fbb9bf8f1b74e0e19a86e7cb07a5d8d2a0b6c8d346d9b9da4885d14794811c9899f87acd8cf18d0138b473e159c85c5bf181faea4c93325875937101f383da4065f4820f9274065e4aa26819545685a8339f56eb4c1582caa84c2571d0972a0435b9404938a88c5be1000fb3f5e174f1e78186369519e74b87927c85ac678cbb83605acf988f476b1f323738f003fb70335c66961c0d3da70c0d33b4bffca51d0b4cb92f414cba1341495e648efcbd66fb7314e5476cff4ba240306d77496bb6adde0bd374979a03c1be4fc7f6ee4a7c3463c05aa5cabc9467cc6cb126c93f08db7f86a5c4644d568de2261f9d10153d653b169ba226c91f33d14ddc66fbd31b3c9994075b97a1cbf9f290d0a1dd3d95e56daa36644c532d326d606048a4716c6909c33a833f1d95acad2368140b63ff984069f8eb6b5523eb0c147aab1098545e2f1edebddeedba7befbd97dbaa8f6a9a73ce099b5de66cf55e0ea91f1c59d9feb81699268a9a78086d44a82a81a392fc5bdb13f192a59452bd55aebbb7bbf7de7b2fb7b936fd1a65d3b72f160a6569306cab9ac7d3469f992e291fe2abc14fdfd39089065f7f596764ac3ac3da74d4bd3f65b9739bba9633a574eb2c8dcda6a036ce0b3aa1ebdf6d6a34873c104c6b2878b466c650533552837092cbd42213082694e05ebf737e359de0dc4c17709cfa7b1c4eb5a05500e07da3b3183047387c543f4d764789aebafe762b0c9825bf3247fea32528e9ca2ccde9256ac41c71e4eae5829b047cbcbff7919eb47e4d06e1fc4706d9645298e024a422e1b4e4fe97447f246555d2485b95e4cfe1ca90f9cb5f546685aeff31a1cb3a4305115c54235486d620ca5a67a60b14bae4ca2aa36658084c2adbb2741cd785384ab9d0c77d1f44085767ea0cc77de38869365b03c515db659df152d951b25d35dbbf06e1255a8d6c7f910cdaae6469b1d8f43babec3140815d2010896f6060405f62187e819cad73a6b50c6dcb591c459d67f92127d028ea32dd6159551c0e0763ee87f82c64109617bf1b7f803e945946d18f9667f91692ce44dcb37ccbb770a10fb170dfe357a8130a75422ceff13aa1100bc83d02b68bf739d805aecafa02d0384f2276ec72799c05164a854ef0f297bffefd554d7ef21fa24806b94740e38993104742a506a725f6879ccaf7171e895f7a6cbbdf541c8badb87cefb73d1d719f8eedadb5e5909a8d032d87d46c2d042c1f44f4437cd08ba40f434ea1077de8fd61bef7c7e334f913b3bcb19d8607a5cf32060981105650c589e5716c05fa16d00f39b5fc10452ffe90530e8d8e1a7da69242a14781749488fbd0a3f0a2515483f4191129e21e05d2552b8eacc14f2ddf12229d33e39b711ecb700c9bc1f9ab9ab00b74f90bbbb00bbbfc55862e71cc69fc75c1d017e625eefdc6f3fefeaaa696f7f7295eeafce74396b465f4138e55d38d610e8e753ce18d79de8d7937e6dd584ba725f41eef4b1cebb4b484f2e49ce8e0c8395d3059d2327b600c2434273acead39b16ff446f16df093f8d93dfca3ed20d1be36ce2b8a7c8044510451512483083989af8922481445502c164a7db6e0f4c0e9014402448245c63206c65a8742ff23ecb2d633c54bf4b18bf5da1507c12548cde014c4f342fcc80f499c96d8ef384869f8025d776c60c2360e5c8d809f40ef19c58ff811c56721e98ce53fa3e847e83f1ffab0886568936257c558eb50e87f342ab1ebdecfa029bafcfdaea3f385ae3f6aa18c3d8ecc6260d78cd1db9f25356316e0897e781ee4f921a7ce28fad101e5cf48670122cdcc4d9df7bc5d8a4474097a75c679e3b9bb1f12a14bb155f16fbaecb476cb498e3f32e491e57f4796a3d12541af1bbb145b37c496f8852e4148402d0035414d220806201a80a400515182acd848f684828403ec0925092ed8db8ee146dffee9b82fa6aa0984b106bd522031b5412f6a47d14684f2aa26910a4af21793302b828c8b5815b300c1442b6eb68b2d161ae812840489aa23bab6bf8b36628ba506faf7d48110ac5d7a68c294d6de3ef7e9b04f474bf72da946dff71d7d8fe26b0c26e49e50923003125b44d0a58726cb6852493a9fc5a00e43e7e9db3d6da860eddc1941587428097aa1f4bfb236412fd0cbc3020f8d18ba145b2ccccc98036cac3d7d0f0afd1be6efc5fcbd9777233a99a66d7b8955eced4694b25da2169e157868362b36d724f99b40dbd7f053a1271424cc404cd8aa555075b3c55635815e4e92b1f68482041600f68482049aeda1a926d1468c52b3fda19041048acc0a154110d904d813ca6c8a24ac5d8a2d976cfbd44113b1ed2fda885140ef258a31ef554da24b6c792f11e6bd40526c812c5d7ae20bf4d07858e06101e5e2456534b2d39a2fd574c324d54eebe56d1863bc69358a4d7f7329f172e266c336d766c56605cd62d350198d04bde68bab9abcd72455d08b7e3ce8e6388e031f87831b3e69536c790987cf1ca2cd0e4af267618c0e934e4de78887c653e3a1e9a8c2988f3cacc241a24b4fc9f6a7d93b68af3fde91ed6f247b373ef25e62abf5f2521d5551a620d96ee3f21216e28dd7c0bc8f077ded3dd06bc63c47a54b100c54e5dbe11bf43203f40231316334122465ba7c3cbe0d7a51d1e111ba04bdbc648f7082a4871fec1284c5f60fbdd0a5086a89302fd9a75a87e3e891d0e2cb4323bac4964b13d9a5d8125b5ee812f4dafea2ee2795cd7d29b680a0f1d72f41af97976e3c34d5d47979686060f0917b43e8526c394074230162cb8e9d996aea30f1ceac9a3a479ce4dfc43383647ba7a3eab4aa299485338d0acd745abb93da9dd8eed04c1bcac0c5ebc5977823b6fc4597d7bad50d7c1bfc04ba2ac937ef25b6c416a5b25dce9bed374d3c864466b36f94c8a8b0b69df936e35bca379a1da54663c1f318bab03299b6327f9c3fd3a5053366d68a97b8b796fee59ee6fbe9b8f437eecbcf76f20343dbd636031a439796073c6a0146fbf2c552cf8e76cf4f06d0aee467c6741d15ad235b5648b3b24adac18e9c5585ae5fda9565425a594796982365563663b8edff616d9a5a6c63b68aa5e2a31195fd8dbe9a40925a4db6b6eb404154b4dde5878e49f26b63128f9cf95326edead348bcb2ac193e9e8f1c6fed86ca64b25a41a9cf0479da285348dd16a5ab556ac6381154b5f7bea8783521220575d693968f56af26f42573fe93d9119402bea68b833fa0247f104605b8050b6c812bf005727eddd6bbfad2f8cee0bc4cff1294a4c9551a2e90e9d476475512cd74a9992edf8bca6ce4b7a22ff65bc9be337a38839a26a5323ec47c7111142103ad55772156fe830c0f71ab0913414997bcb34aaa11621fe10157e0caafd771522ba8a0f466ba709e437aab9262ad59493733c62b6d5121d01b0aa3361b6db5ee0d15c22c5d21cc91ff855592ff255d0b21ccd29c375e7229d3b7a024b7b7f5c5f6af17e644a2305223aa3ff1f8a95cfe60ece32e0705ce4a50b6fd413de8129cd9e10fe4a691201468d946e6f7de820ffa4d35814c9c6413039b60474dfa84b6be5525390b0f315dee9339baad7b5756c8206263b1582c90891fc03f73bc24e1b7f2236ec4a4272da4407283531021b74aeaa45f08b58206270e19a400273805117280932697883e20848513875c32238282690a46013a01abd833b4eb3841294f66e983627ae95bf9e8258322ca5e7909ac628efc5f3e64b1047512c2ade0e6b444647f6ed10c7383353e998f2e187374613ef2bfad4afaccf026fb82314bf4c91cf9d3968f5ad544efec09c645e6884306a14fa050b09310af04b2d39292ee6bfdc32f7d23c229ce6f348d8ae676e9377e3363b6f7772dbcd825cceec0d5113d2b89b4919fac9a40164896a37f8f2c43218d94698e2c474838248c127095862e412420122f95df4a89caeb476f27e23563bed57491324d5f281486dff70251d1e02efde6872667fd11aa24ff9004ba0c6dcb7d2b4beea0af11d944977494cff8c851dfaa62acf5b7eab62d7ff43f9597b677ad5aaa2b33c295c998706733c64e3cc42c3231ee41d3a8ac9a38b61ad1343ae2d474f17689b1112f814c7c44534d20cb492e033e315f4028a64b115a48845583263fd286ef55534994c6592c67811b87f36daf8dbe399c4dd35ed5c4d196d3f978382a83a8f700ae50a827a6e328b6834eb683558c4057b2fc669cbe88ce04b16b4ad3acd5448e0539ca695c0977c257e0aa074dc9f29bd9e06abaf8b5f1d175dd968f4a674561c437335ddc5f4e54b15d09271c1e2aec2de6ac99ef894d6b9cf86894d8f4cb2fb55d1ba7a6659107a2a27d97e02b057025659abc072f026ae12910e6a81b68bacb2babc005600ed076067210693fb7fd215bc33407645776653552482185d10351d1749738a58ddcaee3c4a91933c434814f80516023c016ae01f5155d7e2fd4eabb218147842e9d35631c355d3c8a697247b11ce52c4739cb0351d1db2e716a834ce8933be85b6d04594534bda4e88621e872de388a5c618515381c0e27b330f73ccdd33c952cdb240425ad13d53667357eb22f4ca2cbfbc9b6eb0f7f02fa4332fc09705e4471f89579a992a2d148cfaa495713e7c3116c69d6cabe5935699233ab8903320157b78c2be3d45aaba37c4424852e50d5e42c4a2aa3fc6457e6a54f364720e82c14b89a317536636e6cff2bbb32b005bac0953fc86a3182f69fbb3ad9138a184db66f9005aebc34a18891dafe2093265e0daae5251b2fd914b80257db6605c0e160d48aca5412f7804700cae0ceae8c7365200d7409ae64dbdfe3f212b862e1cba500fbdc023ac8d346d9f90b1b5983be58c720484d01d0b60f005983966a5099ae4a57657b0d5b35fbb2594cfaf2aa26984aca829a4a94443a95c1f4a5847bd82cec2b7b7906e03fb01b239ecda8042d1547418f323524000000b314000020100c0604c3c1903c102541eb0314800a7e8e48625236170864418ea32886310619c308010610420c80a1999ada20002011d5a1c51008ecf03fc0819b077580e46b3271092025552cc64358a3ca2ae2b8d61b924988a8fac707846a0e73cdcbb04936fdf3928dafaf775d6fbfbb215386b63049f91d849af4db3c993dc67e7dd63e101437e128cc5055b5bbf655cbaae67250266b92400eb0b4875aec5e9fba3083046e115c2cc20923ced21f5640f03ebe61e9bcb4b48922a62cd0d1c186139e8579696fe8e96abd79449d34a8a50c1b42a8f7dd43611cae50c73761cc19d5b98d187e3434d243f5e601304a2f87c48e227631a3d3b631001a677457c3fdbe8e8348917e08490867d19d6213ad34edbb556cc08c4cf271b78b9374b915bdedf51cc17ac4db42daf4c5ff775ffb35935aee26f13a52dbadc65770edb54d721f6cfa1531bdec551a67de9bc7b423dfb68d23893a7132cfa62558984d3bbc1b9f6170c0ebc0cecb063fb02345d6bbe2b008037397355b0618b8021c167ea07b47edfc208d61b81479405b953fd3baf6568d8feffaa9baa61daf8f406e9d5fbfc1afe82ce1cd3823fd1beaeb4020640ae389a9d0eef26504932d3d85d6ecf8152d257a9625f5e88977a1dd849dca9c670f7067391a06c0c3140ee92999f56d7208773d8bc29b083099fad22030e993e21cb639b87a9e1dbfa6620a8b7566292cf6a4b2732c5c830ee7ad797280a7f3ccaf072cdb21bad9318829641ffcc53b16568ba65c7bb80c7d2106451a72473566e670e2b36ee0fe1a422e1a2efd9730706d65698e2956c3f0e132ec216a064d486a9440cd580a2e7b34919b7a8409cb4c4fa3a7fda750d1d5ba90b615ee1a729deb89bcc2cf46050c7c408a25e18926d8748f6fb98c1aec19143cb5e38e229c2610247a632cb6dc5f0eb1692a866d72dd0ffba4bb42a34fbc21856b689e8d46dc7c1d1e124ea820a2f85df8a2c3dd2b33fac9af3d32377df7c5ac2d03b1a75738770f4c0c81323284e5868d1b23a2a8433e4a757e42ecf4f23e45c0952365895f1d9486d443213891befcd1861bd2f0e899089b97391e655046c9b3173a86da67e99e15715db9dfc5722ae0e1eabb4db07a0cf91a43ef6cba731dbacd1a9e55d975256d09fd721cd16208078edd9546a5c3c0252ed39bc6b9baf52f1e9737f45cd6e9c4dd8ddfafb50aa83506654989c682eb97a7776f0c7797a431465008540df60136a8a473f4316d8ffb269f3457c20e384432289e899b47984bc87bef68790824d8db6acf68d9498bc66f87a309b3a88faca7c7710733dda983e3ec4f7c8305efc34e2beaa72c6470d3e3a5e2c72b3a69bc2eca3c088da8674588b6a83f7b9d224741fa5774c8c20d3c6fe88b8bda7c35556028092b5fdc8b084fe3deabc57c57126d14da5645658a13d29c0a4f151d431c02596a8434a22eec48dcb9bfda0c8568b36a3a038d3b258465e9c7504a8fb5937f3aa3244eabe4a2d8c532247d1b2b203b5d8ce2c12a76a5789238c82b146284837c7a2aa43069be85ae0dda2a16a2f95e3bb4e2af5aeab3d514079ef9661c8c44ccf544a671fd842f83198fda4312751575080b1c768572b08c41a0424490d5f2a3f0d048b6f7a0c7405c1c7e63a2adab82722025ac0c1d7da1ee05adfa4a1fa78f4318e5400224a2f9d82d700c8b2cac6e5054c09a73626439b9704f6f98d88e47b3be11763d3283950285d74a61999b31aa8cb4adebc4c4375c15e433742ac8cf39a00432322b0b81534d4734e8fd76ad509db68ccab07864170188897ad4eeb4a79db3bd62cc8ae4a03cf742a676f48871016df8d035be63ec44d88af07c5f1e424c1b6e20002fed5ee6a498766d52bc1337b7ca392eaa0cc2a9e94c5483b77c28359c0c37ea65cdda2b8ca4872c340921c3166db99e45a4311315484c3afe2c6183e4bc89a2fd99c2e3f9e1de090e17926beeb259ab0c9be77ec77b7e4ea75d4ca921bc323d3253929a8457b09ea9348546d152ff7c75743522cb7cf4cb9347a9250af8745fbec403807a2a928981a58e237aaf23f96485c0b9eb01ccdcb5f77e05a4a9e78dd233e236e148d16d933dc46608544a7fe0f9776b34434dfb4fc527f4f08a1d1d9025951b6ff811c9b84e19a3bb6000e4890c9b8d358ca349193001d7ad78593621614915533adae0ce1d9ce90bfb45c161e8f25546200590c0497c4cb5b22bf1673048634f36bfe9906e50382f31cbf54528fef303156eefaebafc336419ff25bfffc7c447a3783319548049459c3818aa85e4f9c547215391e9ff1723e186fbdaf75b92f09742cc1b0069051422e0ff8c7191f34fd65b6850435b129972cba7183b0b8fda1707af19e2faccc1e52403db3ab2212eb7ad71e86be7891874ca2aab0d9380d6d6ea8396c1711e32e540b9b62fa4d1d115ea526516f03745c3e03808eb44432a9d0900854ccb72c830dabf16502f57c1667ffaccc4eb5699b6404e94e6e373aa8bad97e01f281e7e98e853fdbfe708e995050fa3b8f58c162b9ff77a78d47e1406e22c7d8e3a14f22eedc47ac76eda146a2436b35edfe2cd7d091a09140b4d0b935c6a066eec491abd101b666d90f43976e50c92dd6e9103abfe097aa5a06fd38f7aa88dcd4050284f098c38ec5614cf849345b941ba15de9edc179c25990f516c47b7670704c23433f4db350c909095fb19614603a3c7b01c9bdfd76d6a846d997a887d460f7fa9cf68da09c94f1e526de4f7cfb3c00642ad1785bb580aa1e0d50be5b163cfb3f29ef080d1b6fed43ff637e024daa83dcbe7521387d5a5695775435b1ca4ec9a3f22fc809b9a1b9ea1252a84b1843402f17b811778796004dd40856d141302652d302b27da234ec44035e18e90f2e5ff9d533b23023a08302cdccdd3cf78868a2f40548a96550448cb4c20102565a212330c56487a2bbb1c0f6e5b4d42e1e6898087193eba7d01157c333b5cbd90b3e22c4126a5686607f0e11666d462d0672991baaf67bf405d4f3b850efe02ce4b30adfb2e2258fa1b2615001c0f8648f3dc1a6870fd9e81dcc05794927e72669f3f6dc8120c797e0273d3e5038ba8cea2edacfffb0ca2f10732e42509150d32151ea1b0a3ab0a4bc3a8b451b50016ff8dc435cb3b690085ebc1ac8e5fd912294ab4eeaf3179362f57187b1f7f5c7b5b14edfccada2429062e30c7355c0aa82d1b97d7883fcc5a90338a4613952c242f9851c0b9216ceba7737d8196f5f8f5f5c96e027c67adcf735d238e06552502bb887b4e12356557248c4d1cfc7e83973596d28aacdd0c41c93a648948ace4a73df23188817ac60b7e25fe30d277898899f0533864ae7a81d7da653cc9b665e37bbc6e953d4530fa7fdaa096d0a09cf7d6d37bf41cd39c7a034601f7a762f151d71b84991502b5d304d4f87e6932af61dfbeee2335c28286761e782f68c673ce4429a063972408c5fd735e11a46cb03dcfb25ee97005c94b6d6f0a326d2bcbf8c4f3cf9a65c7689007e89d33cd9f9cf4c9624a628ac1950ef0715e1ccdad4bc2131dc55eb2dc3209649b99a5a01d6a6aadd913425553852c74170565513299661c527832f07ffa5876c84441b7964d307fb569f78ea722bb22283e078a288bff65431afd358cd7226de39aebfa3630a9f6ed6d2386215db820c2e37544b65a30994f8e508175bf380d24f6a390f9a0f915a97f4cd5e1aa6224473c36ef60296f0e3d28fc0eb70adb135eeec7e5390153c609373d9450117fff6a56b1f968bb7a125fee7192fcf2b986d06145cc8ac771202364b2bb5655c38b688c40ea2de25d8b7d1995bbc8fdb28867ab17187ead7ff2101a81872587914f18ffc93a4f13dbd149b1739a7172eb4ea1fdefbdb905182aa218f8350e1329b149e94d696b83dee9767cce7fb2301ef994209652e031a8dcd93ac5fbff06461762f77a923f630b40c2ef9bb1cd0383869800593499f9c5bfac4b242a3e50566db50f8a4abb6fda86fc6c1972ee393eedd0b917b4cc96636b8151e5cbddc19d4bd834fc2375a10556291ee4f31cec05a998a95aa50c24ab7008417aa2b98b0a2f27dea693dc9df8a04e0408e1b4d1fb867ebced49c13c111a98c8a882b7818320a283bd385e9d2d85735cbf354e3890067a62f3fc82880832880f36a3bf99d6635aa4d215f00943fb6a1de5c30964806876bb130d45d342b4e6731d216460eadf588ed6f12277c7f03f16b1c6d514c9dd90b4772fe2623fe254d80b627dbee6245bdc0276416f9504ca9bf890b5a1845e47b7774e4cd7440eebc50a83a625a2f756f64e31d96f0bc1c5c6ab4ae1628f85565d54ceba3f75d61d5ac05f0f8af3546814931042f012cfe02a6b4717160eb21a90efda91c35ea47876ff1e6d989bd7d5e49f4449a4b2120147ef48c1d8484b4ef342a8e7ab96d4913ce42534a874602c14c09a03ba7b43c093249bae5e2548592b7261a226a6d40ad58adc6b02cbbd9e8104c179dc3525aca3e10b94d8e7e796d0ea5612cb4eb17439dcd1126c0ce5f1665bdb0f44909b6ea48094ee9e4ec65a2b6e90759ee4c8a92ae3c34c02fcbbbc5756d2b7dabe63222061e536e1da4a490e951d8197448ca59ff9c230778038323e00f49d4a6da16239dbb4297ddedd12abbca5e110f13ebfe5045a4bc23bc7e6b82a70debada5e51baff825b16852971829b8ee124cafc20676e5ae77b1987d3b882f966b7dba0b660270abf6fbc73c3af5324d255313d04b1d8dd17080688d507a4982b8952afdd8e20f3bfda5019c16f6cda80577663de17550c66e6cd6d65a542ceb0db01f270b45f370bc00b778522844f44794d15611fdfcf82155f90c98492ca5ee7c021474bec4b65a237911111e220ab2ecfb00404b96d326e519ac19139e408cfb1447902d077d6915a22f16a93c9698a51c925260b25c6a30361e3e9fea593ae1bb99af28da2c2cffe49c5ec467c9b1a5842684e5b42a7708c93e0a54eb273bd760de539aa798f2821ac22af744d025c07755a8f6f11c970141f125020ce6a7a8840c179062270dbd572d9fe857ab7044b247c377976f7616a263551ef28f94dc2a02f6a454b6526bf4944c4b76ed62f48c93b92ad60e8b437b6efdfa4732201084824f292df24a8f6b1bd0dd4dd0296d9369aa9759d7c25b6c1cf97cc7b8de729393567fc209d570433e4123b062612056c40ec2a7266f1843ac04b35a22e8434c45b67d36b12dcca1b0bd5717ce1ba850eff763630dda7c3da6c66902a44debc9db306cc6d8d99c9f8c81bb0b83786441f01a8ed4ccbb1d1f5cf0e1e5672e588118a9b5a9e004ca90574a9836899e75a2035c36010d12fa8fcb0164ad7f574bd8740f34a549c623d028ded048c180813a154d93d484a3383dceace7f04d2833efdbd93c98e1b7e451003342edcb75d3b0c963508f3f37637100870ba67aee949bd3b872b6ce192f74c9c92f8652c3b00b8729b9233231ceb4059b46ef0193a878487f6c74799c44cacb1ec7bf3124589d0497e4120a8a0edfadfa803898a834bb53014f1fd48c75485cd86cc36bb336a2574a95cf7058526248da79aa9857fbd9f02a7f4a79e9b7a480f272e85cf48cc4e73cd81294be55bb601ba734500507d369e5714edd3c636f1fbe371ee7d0270afe55b74f9c6d58fa48adc7a33cb7080de3a187101057bbf036bc3e8d3c9f31812fc57b884180adb09429964bcd992ad0ea334958d7458cc5430d05bd9b6b1d160db66ee2dabced69167589ece8f7fcd75e9a3589d4d0f9bd3b692f402cd4987d82da0c8450cd0d40bda5b4d0f5ac9de0bf5507e93dbe6182cfccaa46995622e8d00938d5ba0a3f225a1549ca75f63863bdba40745312bb3379ea8e4b290f7f6b66e490a9acfa24b3140b53e13aaa95d9ffea4fd63bc0c73bced1f91850646b7eb0453c0ae712960874a925f2e883b03b8712ba8244f04a8ae045adeabe35e2fff934f00face72507b76ae0fa26c0a89206c47555bb680bcf3887218a20c29c6e02eb4ea9272a583dce85e5a316935eee5eadc0d0fb03287534dff88d272d17565b25c36f8c797c70c8a9c19b8cccb0b1e006fecd1df8b971c04d27519e890bd05e75bc67b0fc2fdfef3f174ea4b0868f53c091321915e80fcff6e3f7862b6e466734f4a6962864ffdd26100b8fed1613a4efdff588c9e6f75089031dd8d1b44f7ae62f374beb8006debe62d53aba9104df087cb9c2098fe5dbda61eed09e2c4b2f325a191922ad007dbec7b321199774d75483c0e09f8ee134a64309f9259a4b59af4b23ee991dcc62eb1d1f712c13173001c6dcfd5e3ecce9565d1c92ae2cfcf93297adacb421b3dd038082ee0b1e4ef057038eab9b83bdc68ca8a0c634a192149888d175087f242b45f9483554f921a26bdea2f416f881cc12818d8e8af5d07f17739018638ee4419ee1b0b5f5b167b2dc7d776708d30dc073de7c7a9de62c52e210f0f360d406a3e5205af3d6c0d324f2b50be5382c2491d9c1a60aba04ead4f6025bac6cb796cca5081b870862e186d20faffc383772f3b8cbb31010c5b207b27b092c11c2184c007c01ace45c757d8f091dd5e74fa3780f27103072f37a52c65e280594b20cd55021acca85cace806fa9d86465bcc7bc190a6441c78f0331f7707835c00f9d2b42d57ef7fd2c933518b7d441deaebe584f0630a292b7047c01be9125b43ea2e762ce1f376705554e523b51005df0cf30d86adf795e6ff10876fd7d6691537d60dfeb71dd7f09ae2362d8d2befc018831d8633328c25092985c80dae860db003deadb59705645943d9566238071f5fc6cc869a219e072a8eb6f022104c2180e3b357624bc846d6aae3186e2cc9b3967f3afa87687e4db1eb80b10bf6cf2f0e5b93740edfe32d8058846d0d98c9bc831daeb1fa9a81bf78def0edaa3c97d52591d00ed062ec9d810362975c5267a8ffac576a9d3be471975fd4400838ac762f779740e09d5221264efddc6bc06b137cf994ef4af5fefc37844c11c03e31cfaef4ec318011472f3ed60ad40139a5e7ebbe47ecdc6355a198258c89545a574c34f88d24b88df1c64f35afca3e5a38fbec75e90cef48cb2b5162291cf3fc10e6561c5edbbec5e022c859932e918b5736ab7f74fe45a86b161c430703e4efe9d16ab981ef93ff545656bd10dd3b9173d3b1a7f47f2daae551142c3e1e9d24b110127c9fec6988e8383298d47bdd509e087b3712c22a50e13ee6455a68868e1ae32930041fdb71dae9169af18d525332cb42255835a66516075425b38cdb51591b6396398ff70dfbb211e37fa69b6030588b273dd17a6f1c0145295e6164d7bb8a8d815ca1464c9fa7434fafac88e97370b9402dcb667d639548777f7e0bde14a93cc3c93a75e09959f9fe2dd802e05821d30d64b3bc69370ee530a802c90d6de3544c29c00838c755530a504829a1f119608a03a26871b0c97f04b274c95876f017f98aef9c0a6634a9d60ea4f597f4b241927fed9adc02d6f05d168cc28f31b44da21db9ed1776db4279287ff4fba185cdde9172574902e2f48750eb860d855b7ddf08a796a9de21e4f7791a55bc06ee1a50f1052504d85d450dc5bf712a2773322f72d40c32bb67cd6a5edfa31e531264ceb9c72a955e3c4d51dde77e3fd66c372323d26b472c4403d49988d0a5afefad594ef6323bc15199ab8d006ab4c91bfa193dadbd9240467d2ce423a9acc027d7453f0b0382828d1675f43ff820d09143678776e091bc806e36842cfab274bbd6afc3568fd782a2acccbc0ab6416cdae03aa815ed6ea366b6f299fbace8236ade0f20d34d600023cb8d69658de2993499fdac2e66f8da4b0b81f8341376ff0c7a4c41bb6495213ca6bc63289482bd116e94494d9970bf562b60a7a1eeb96a6617b9d46c8638eff4baa30d8088bdc17bbd95f1cb840868794c1344000060c07dbcb34c8e0351d2b4083565f17ad91558d3b2b6c8d6913d0404b296533667d3702cd55a68a3f80ae56e81704f23aacba083ddd010353dc07b139702de3bd58288e848f353a6a7eb8c027e06df83d92274ce3b4080c056b1a4d28ea67b1afc210370139bc14698967d4aac8ff76a0ce376a0220afe6fc35ef8c77ba1223d6c99165580a9e849016c01b70400b8aed6876f197989447342b9f5106d8b86eb2aab5e8a688364b2bb25618c7d246f40bf079682fb9bcd36ea2dd4dec51ec47e4b51fd34889e8e1fc464183768b44fb3a36b14567d03dda0312fe5be04bdbbcaa947431bd23f947e573f6213681655fef0c3566fa0bb82dc773281f8c35b0b40cb54a4b3ea7e6a4443224a5034f6268071b4defe7c29f4b8d1a48d6ce212d9a8f21db1ee6c610e6aaba6d4463879da3801a9d1fe8a581bb3090f5504e2b5e378a7a154933cd84fac394fcac741e4da49f0f261345ddf97302dd2b781b8602d2caa0a91267452fb44b03dc86625ab6079b79053e93d36c62c212a55114626a91c12e3aeda46ef720f917a7612c096177b2191a72644dec2c8004206b4625a82decf10d8603181ee9457db8f1af318fdb2550fb085d6dd58f0c3fe15ac9da8a6067b1210c37882aef824200442d8054ca05e3e331daa6edef384ab83841f64a75aa53478b73b8be62f7b2bcbf635f763ec5d83201714266cf84269beafffdabb613d3c18429bc0ee08344ffcba48b9494d098eaf3a9800f58bd72c8b0a06c71cdb2173dc9a985a5f041b3478f2d3a1496c9b58f1258c7c9815352411eeaa3d412874849db0d772ad948171a9d0b5b53b7fd757f87d3567698f72c59a6ed30a2ca9a6b2992c116ba926299ba381811f16af28e3dfc30a307f1f51d4d8e8689b5d83396274b7b35b2aacaf17b0e390feaa41a378222d8fcf91846890b20f21fef92ba663a67e43e6efcc7ede963e72865043c93266efafc6046064068881657943418dc39f11cb02945d4c25da0d4fce441dd4f0857fe3626445ce26f1b9021e8eca4bbe2997c2cbcdc1019837594a5f0042a7d9d9b6c40bedcedb88cb7af89fc0fe1dadc0db5daa07bf01d4509818acf0030993c876431030a5979403c29f0331e4d5a3b9d543940c4cae7a0e7a23627ff2a9e23479b86d11a2e500e4deb3463c09137824840b435d4ae203298b6879a93fb27741834ce8e0d99ec8ac39a42853c1f322b2a3f54b183e08683571f03e1148e88586829c0d1fca925d735c15c4c66e1eef2ec2fa04e9b2c8094a5195703c619f4430a47d2c89e6280f3aa0b845d9dbf3c236f06adad99d68e453b02686144f2a05bb20e01eb271432325a650d543ebbe76d9294d583009418e0aa91541af1b10f55b8649a4aaa657a7dc6b7675975e1b1d0ada7e038a8a1805bde04264d4e54e64127b0bb760ff29a0996b9c93fa962ab883c5657928f4166b517bfc49330f897402aac07c7f20a8c48f70c21b7862a90eb8c9e58c4c10de07a8fe27636043bcb68181f1e9ced5e051f6374d05683e8a4aae413645a429d148e63f7a8cea9944d19d18b83a0b6a9c921387598db49f63c6a301f1cf892b013713cf7db446f93a4812d618c8895f47605d56ada68ef5e69bd39655b802a2a9cd363f8ab0dbb28b906f690de186feedde7b97a2526769092ef8b45132aa2e0c4bfda281b366e7053d9279c20e7af5ecbc0732bf76121128acec470c43c0a337b5458b66c2aa9918bba570fda6732c6af2b6771ce05bd0c35cf1af9fe75f607576995e71c13765b689fee5730f8c2fe10023f3ff4a561d00b6ecc955ac9361c6d7b3e2c82676298d4634acbd2ca0c78e6ad297b2e14b67955d8d4af97e562fde4abd654666896e4caa2db15067bc8e1b1a70cd7976d1dfa3988adcfe8a7027d0bf1fd5f961e743985fe6004a551021ff2af40b496c2271185cebc19e227da680423fdcc3798e15fb5e24d7132c3b08a0353ce43a13471070f87d03209e87153fa2408e1d2cc082ba437550fd95ffb744ffc1d079ee0a77f2b26eb91df4989bc2cddc520129db2cab8d8d4ff4cc6b5bb6b2ac0e1d74520861114c2166ec8fd29b091686775f720032049e9106fd0f5e042b10621281450908d8ccbf599995d3396cc2f9cdeafac803962070d2fde02e4b179120a9d303b276ea620ceb7cc9537bc47468c886af415579d2b0bc8a51e4e7bdd1f11247154b000929ddfad0c2331a58d07e5562f4fac87ef604ce8e58af89c9e45cf7f78ae5e79b6433ce5355dbc9e0c08403dad9584982af5f4000426e920844382f591fbae187e3b84d873998fdc7723e1bb0067162899e72efb4af44bd1ad6ca51608153e90118cdf43934d81cffa6b9d89883d872a5e9d76222936af241b4182101fc3e426b27761b1de5605506efd1eee43032cb2a2033d9731b6439cc8c204640c9dd171c0262a02b7e3daadef40f3df52e89eb6c7780d0b82e56d4fa6fb68143f6e423141a7650b1bee2402907e0dbc079d33bd25a374bc57ea994a97d0c58c79a9582f349f235b0b011293f0d188c8df9457295a16d0f1b61cf1501c98f7bf6ed118074a6d15076981b1b3975cf966e9db4e5472b69740c1224fe92155c80a3c96b0638a0a240c222b1ce4cbecc59676f4e09a30125dc35286016d0781282d562f0ce5abc288416045fc0baaa899484cd6f4eff383c86036eed0d5879cebad39010343b266aa626292da11fba92b6ec25f1c48e7e6343e8d2f1873ef4fd3c6cb981401192fe55956e9ba6deec0cd4685dea54ffe138e075acea5745a7ad9a1af65242b82646dcc5a4adcf144c614fbcb06df3cd1f655152ecff7efa09ec8a8c29465584f613926b9df612e22cddcdab23cd7cb82791858921794869064da0bdacdd5e5cbc060d0104595d655af5db9b9b3b8d19cbc811cd80f051aac3d2a7026c171d918eae440e78680958bac2caea93435699f3f40a368eabee91b17404b21a9df60d0c7e8cd11e89e58804f1d5e5b510c14a89a2af87d04f4ba3a39f0844782a50446025101a104637d0f9b2e13f1a9ea26a3a570d605f58fe32ffebb9de3a4830c436843888e6318a2508a82f61ea838e50528e12c4b64d85819110f655f93003383634aadaf92557825feb83f93038772181ba4d6146a6fc385e04a71ff4f53bb4b4565358d5a86537c01f52d34f2df495c324b3206f4942a41ec49135ddff20910edd5ed0567af17f3973977722e61883838e4afbcaac76ec42a80b015c4fc5f547296d186ed81536897e730ded1724e603a8ed875c485dd9e105d731dc6ceb4cc7ad81e1d460709b969b9ffc43e111712737518ec2440647f2e04d6f18d983f0120897e402471ff4ebf67343f5668d6840876b70290dce12289708cf189e72740666bd38f1aea884007a09ece8b78b5f03c03871d363de650d914c42d794f285fac4130b07b000d6a739c08978726052b98adfa89d29ee09558a57ef074f1f2c1c171ab58d473c2599714ca91b30855dac9e0a0d78b1485dd1721fb92be80b2f0707d80959a761727cabcb47995af8db58d14ae32b68d60d4ab486570af0bdee626f703772b385dcea58fc948d42416459c2f12f286ade8580cc3c6bc751e31fc12a9b481c3afaf6dfb7e740504c0b2e5412ee79bc064c8437ad015a2571bf60219ef924f2d40313374c1a3688879b4388cc993560992e1958b6357ddc0aafe2455a6995eb2bd403c0cc1242c328f221bcdc5f3a8236984373a45f20e31478ab4b588538afa3ae12fe6265c2fd6afb509a6e0fcc545de12b3bdcb6889c3f1f34edf839d1cc83edd395c3157e91e6e01a3520baf184fe4a57092665d4ffb1c9e920bee40ca71cf29b596707a7b451a0bc9cd30ec9745cf9722a1012f79232d5fc0889a50245cd581213f9530e42b59b72170d7c195e3756c635c320f51f0584a47a79c100e6a36a23654bff2a3a3d772a407fc4f59064c2e81c4213371496b7b8bd2306751d0c25c3230364850d1036635582637d1954d3a11781f327e00ad371e4509628a37569d0603d0e5d9d29fef818e5dd6d057f9c0a262953b8a27cadec9348165af441a4c2ad0cd3042f1e6f9305ab4e054b3ab38c3688886368af0a890963ac15fdb34101989007b8864c4954b65983dd3c235d6b8f322c33481586c040d931c45f0044e731593a16c141e524422d0e61de73c4d48962f12c0e8c1ee79ef198e95b7a63d55d287e98c5a50da1476f00930b94db456327e7254e176b3f6558fa7131f0a365cd8f5b042c9f241f6aecb75602c0584f90ad5757316c76ff9fde88d3977bea38db22a0d86c5ea5c74089745b7df6655cbe4c8246c9119c983015a249b648916f5786a2ee1ed0b134c975d6beddc17063a5a84c267f8414afcbeae702f8f0a8c9be4a21c4cb67c5947504a9c7aa3010d523c5ea12177283e4b1114dad56e5b013f1dac20cd540e1827e7bcf37621a5700e15a85916ef018bda5fb8b5a0c2865bdfa3f2da24bbdfe35fd2f1830e23e4fc37eac40cf85d9576147f46a9687ef25178e5418b8f7fdade3a9b51a0a5b5d0de3fae41800574eb964cd0d5f44a2d96816106d4e76202ec6fd56e2dc8fb2bb4517385f4254c724b9d08a325111a22b4d7423b153aa5e8158ba6a9c152d0f9b3f7c5386aa5b551a44241c9225c115a1a849a004d85f1ffbc25fd0add587e38ba148ae48936ba325b2fb3f9915572b0206869a82108858a2b6de7cd5bcb3daa74215697643a0b3d83feeed95ccdd605174e0fadafa95c2a4d34c4d94c99e09a2520748cb438bd703c9800188ba044a1a9fd5dc52035a62cc6b5d1a3b0ab6c453214c859e2e68e516530f6047542bc8df6185ac34b4e69a9932a19304c67d0d25d2e455a4b03aec6212a93e19a0a68efdd1a13354a23d8f230e25f5a9fdd37483bd0c31bcbf649884346ad6a6b5a9d5c754a3f2aebe2be3eccc52286f917f00d7b1ae8a5262c308dd6b22d7bd0afb05184c92814caccfd4124649a92c10dad871d083d87eb79e0206332f6120c03868b0d26a620ad24a1f8029e386306a51c0a4b465c643ee62df8550baea9ec3f07bc1e634fe52a4e2625c00fa857190675a7b3eedf75878c54578e8d98330d23e374221192cb987f46b106bd57e620260b56101aa07c4a0aa3893df0e252078a0749a393ec875208647cc6bc083d41ca54905933fd2f66d01bc97576b18a57821280394ead1e547d74f8a741825292b45230e54a3c93dc820a2e6d911e40d5aeea8c4babca8e9b54016d5e0a7b38f10d4283a67e4e09f82e7fd191283752a0bc53618c34509fe288989709d6ac0d4f93afced45b14758ef670ded51d05043fdc0451a1142d2c8daa112a3045b028081b22bf3b1d031f986869944d4afe25a0435d95ab36b7a4bd64ca1c93eded62202149a4b8ac98bd879a2dd345530a98c968ca305f5644711909871f33db7c69d175980b2a205e7de1e580e4a04e1a2e8293936cc2034224b1dda6fcd77f65e7ecd74b1667d54a0c95b66a07ed291d95aac62b118899e34badb54c2ee4a3502b26bdca62e9227ddb3b416e9136c469c9bfab4507075ff06a69249a136546ba081cfbfc0f983d648529f58485efd49eca9359e4207c750b9c86773d0c5a0f47992665c5041dc319a264ec93ce8c606aab4992fa4b83cb2a8246e7a7ae5cdb19700a93c3676be603249fa7098c7054168cbaf7a507981c31dc7fec407dc9faa57cf602ec01748d88c1c2d1e41e01959b4bead80c90a5f85db166090ce2135dcd34567c532d670f14e1015e6a9d95fab4b905c3e54677ef4d6506e9c1035cf07e90d78cd2b1f3518d05227ab9517a87f30c420ae825ab9c66febce55bcf74c8b1159a8380f7548cfb5457530c924903b3168aae66b83036a9247cdecb1152c74376787f0f9317f0a399cbb50185806aab6381a5a0e95a9df3e485b84b79da02c69dcda702cb8df4f7d3919a746b3029a655e1111131bdc42801179b381dd5b1da0aea9477b73aa9520b9865f8539826f16013d02af8f3a93f10324141c6b47f64aa1f6bd68133d14d8d8de751c95b0d5ecd4d8afe1c2e67feb66c9e79f7a9daaa801b45f561733e82fa88261bf37c9cb6eac2cbdf9a57d211bb4f754d2f807b33424f0719b893f9ef59ba4dca2073e190da5177ec1b44b252383eb4073e02186f135a17cf488981c486acb7cf323743e887f671a3ef3f271674d6a3ef1e473158857e396124b1ffad7625e10ce17b18365e49acc80827cded063879ece88548c10afa88cb4b343433a11e052d658ecc6085ff52504c2fbb85d9cc7d209e3313bf39ad6fc710444efe81317eea1142811609dbb290699f3c94ac7aa31d170817833d74a1557f60bd9e5c29d0038a7fcf540aa921521aa1761ed932abc6c69cf0c9316957a62bc91364c7da99cba0c0191224367b7919a15a58025d0f99db884a4043319e552322589b6e9f9589276d49f2471763c6569e77aff870ca5cbeea5539bc7e1006f1a078d2b4582e6d56b470635c85de6937d64f9a74d83ff5e75f6a11716f8876ab05382ccb3ad0e42536ace05b56ed67a7b9a220c8cbdc9da742edab8d52910cea621bed61acbe79127a8a53f70973da62ff7e204ef13688e96a19924ae1c8f243072ef13a418ab396c5b47d5d900a08f9667bd93d3c078703d2ac8fb5633aa0a85bd1b8ff09206b2d643d28bebfc10140f9c6b4cf44c1f80f5c1f0bae119fde351a5d254980d56805fff9ef2fc0e3287f28dcf6f3b334b8f0cb156399f806db6c9e107d40a1c9915e1b27bce9874ee03703061b66cc1025e80e0082c68eb44b43a6a8c4a85a864491d4e47308c78502589725969988a6a94438142b4ea9795fc9074657b21919e6660c85e8cfe3f69682642e5c337dcd0935e7c21441716bc05f50b1589432a3ed5b0a30cd2bc3fb703bd52957ca85e1e817a67ba158e790029726bca6516ef278b4d526c946c97f61350550cc5e3aa311cde78dfd6b073f95043b7ff622a4d2c56a0682c70d176a77dc1c8cfb8cc3f47705c3aab9699fa8582b94eecbacb5fc26ff9c14e82c96814fa466958078b249042cc5cb5a26d9c7fa93d648c630c31a81c2d9e25761eb0d765b601e33880c9c90e252899b8770a5b69c879b1e3f1c8964d8b93f112365fbefedb5a5fe7c86635fb68b4e51b8b41b6318ff538cde4a246ee66f2f3ed500290b36ec8f350534c27f31dc9a0bfbaf9fbc1f1ef6c88b629c8347bb923c13d8e26e1d8003600fb62610825b6430f58c2428c0ed42da963af2f155436b39e529053ba0ed73d38f51f351f440fa55870ab5be2178801649bdc2dabbc03744252c36938b6482dc4a25e35fadac458fbfa46bf6e45fc4c79c6d0fb66f772f75985504b9c62faf71b7ea827414c1c90f57d9c94d2adbbaed1b4c2914f512654557563f723eeb427dd7a091c0c9fe8adb724977652f11c2f24cd6d1802a6620d4e5c32e43113d43fe2387c00940b11f546b0f506f9f29a3d96daaa99cec40bc5c0f1571880e9b7b409ec2361d2860d547eacf2ff4ae51f6864d8319e34d3c75060c08bd267749bbb759884f777a6441c19a4c8b09f84535f4159b33ddc59e10ad344e8ab14983080c5d72db9e138c392595cde5341aca4075388271a32c1d0f8ed0d3fb5f9b02fac54c1defa6e633e119643fd34f20062cf3d5b45c347b8e79e68631a5d977080ee6fa32d3c303eceefdc50cceb64fbb411096048b154f740d173afaf75ffad438e2ebb14d4338823b4a17cf858d533eff7a0fc850b7a754b324e234f6719d1ea3db6371f7d3835fbae36ffd11e9cad42c584b3a3b77d4019c7119a0ed542af34812f816ed7436ef97413072fdd77869a868c76d3f4fbe03166a6921b7b9dc1a6ed83f03ff7526007e7bc3795961cbc46e2441393fbcb8d932e7019caefee984c5fe323f6384cdce714a8630829dcac07735f543e1c7405aa7901dde9292720704fc0d73df6ee5f8f73011e8e97675273229b4edbf459181b5edd0df3bab60be1bd138ea09291a5b872d73609aa16baf8fdaa2e744616840231503a160ae84643661371dcce5800f43ae3bd70ee39538bc3934043e955122b2ba0e80a74a1d98b8aee71f49856fdfc0e2c73bd5ed0996cfb20517b72446412c833265eb4797b4dd8c3492e9dd19e4195cae8cae04b09336d56b27002d48d9ac59b834d42bb0ce7b363074d09113fb3fbed81f14e00b8bd7080b26aa525c3a9a8bf4eb3909640b5a9fc9d057a461ce0df41bdfc778c01f094806a8067c190c6a8a6433628f644ac41ac22721d1e4642e4d15a3ae61f1fa16c4ab0de62edf6a4e2b9432ebae14ec98daa407fd64e0994337b3294864358bd6b73f8eeefc17db234ed86446228944ce8f8dc62a88e644609062db2af1d54ea95a4d7d78b6f806bffd4003648a637de8397daf1bc4bc6b9506ff703ca7bf8c4c1b13376a7bc9c358f8687f54d111614ee4d2e97e466ba47bdb52dbde7b42d7c0bd24888e888a448b5d53d9a12a62b7a7d2e9f6ff5f0c636a567ffe5cfbf346d95d3c2f7a4d030626f7c9c5b3563d948c9862eb34aae84ac24ff4ab69955d2bffc383859fbb0f9fbdd491f7874d9a521e6b0dd9f8bf61bc0600e27847090c14246304dd1b8b146ac91a20320f785edbf3bf24a07944ca2bd5f8770a6fc6a2b7549925518ccd32885648e646c65a51c34c3b85fb5a0d18d0d703d43d6c73374b4ff7dafa9e7394b4d891ffcf4f33977b577b6a75bcc5a1779b4c450cfe090edb8b05683b52cca232d2800bd4de9f3ec97b2d6ae502cb0121f0fae1fc04c33969015058fd5cb49f2c6310f67cdeaf4dda52e3a56cd27be99602e8a034164c79a9e933a981799db4a1599d2ac9cd4ff3cac28e6a2fc019b27fc68ea578d62f7cc7c2f0899155746f32c22f89c340edd0c5c9df886c4ecb3b00239a979ed84be2f3e2d3b1cf371860dad50902209ef31e736c015886893331f8c1ed7d2ee42560e0ffea71499534927a2b156ea5b3403a4bddcb84be6df8641616cc444738437ec8bd7ba70901d5aca4f94b270d882e83775234a1d498b32e0300af1cd598bb8d8bc925b8185ba61a33d852977ac0746ccdd576034040954a2cf5e723d44747a8ad5db40abbe7df2c02ab56ad74150e0221799dd01690888cd1ed202f312dc311e726396ac8c2944ecc5229171161f24a7d4255612db2c77ced384cabec1a7da14ef02b52e36432392dd6611b362787ae80ba0249215314d05f2b04007ba52cde23371bce2af875ff161eeb179f871130bcde2d20f9d8e27297bdc7be9b0f169edb9c049014433d366bbcbae648495f774212c1f22da2df003f6f7d10730ba418b4e6d679a0f82fc280499fd537022644bb0ee042fd00fbe3c3314800aebebd9ec82b46315a54a746350e7e5038de1886e536aad20ee6e6f551f68f39042987380f5d0f255c1e59580bb433eba7c70d019f84fc59aeb1cf4581399644523cf5e63a811096a08308b545b8ebe623ccb828c759a685962e299875ca435c953265938df503306197f9a1a40b3d63bb4a0b6ded86db8c5cc3d3caec9c06a727be363ca48c8cf956702c46b8ad7b5a24b256777b5cd9198ac64d6a986b422ff17084d68a020a02ede9910638918132a84b0a91522d915da8c559f1da45b2324d6f88bf3b5e5ad20fc7cff44c8538bcb0122ca467c0889176a19500c480f9205844022a3c6703aaf99a87931c0c9a11659f1a59a407f366108dd9a208a512240586a14d3bb4e2875e01949e345ce6225ae4c0b3c7a4b98a1355227c8a6ab91dad5ae63f6ac47f003231b82a1803fea5d0c8c3a738715731051335ee6e0f8cc79c3662fa9b0e086efb5aa46846455e87500f22d4d3e18116c4ecc1e99278825b126c35304f08bb3d8237ddd409677c59df7ba98f8113800b4450841afbaaa7414885ea5560d91fcf5163d83bf319575950f9da09a137f8a0aff38b381d37145214f5d2c235c22839c87654448fc9d280be2401fce9827cb8edb920fdb7b070ee90202607cecea3eb9938000c2fde48f1a0a042c0c26f81f6d0bfb295b00f8b7bb3f4fd39b0590190196ac7713df1f07383e01e89de927c09df2c2b0567e41a3c1a3088a443442dfb1bbbc4efb6b97509bec496d947782a016a3978282824acf5764cd5199d544f3754899848aed7901753b0c340a330f4cba3ddcf498ece354a25ce7cd6223e61fada0609b7ce8f45c134e42d917ecc77ac4a29d5eb56458716a5a49c33ceca3f2740844730a7b7300a1dad2dd3901d493a15e2ce2fe25c1a66c408164ce08855cc84ccbfd4c68479079b6854c31d0bcbef2d41ff80f6e3168b517224b03590b5779d7984c77fe3d34b54a410383142cc5e644cdfc42b29c71ab7e3dbc04765b1c25e1f87fca4fcb89d5815cea918e85d0e8857e70581fbd898cc6234f06d1f47ac1d1ecaf5374f2b0e6db8ffc00b49a66a15910cd83888931619f2beac4d1dc0613ac6be38bd0292bedf6f64dc467bd515f7b77a5a1fa993f0947cd9881cbcad329aabca5bf76284bc738a0e62a7147294d7b22da409239b32c24b2ec0a6e9f95e9858b13e5c85f7c805b76a3cd5fb3b057ada016af51f38a1925de4411702a7ad6c7a3f036da0dcc7249de82fb6eff81e84a5dd8aa20cd5f02ea36ff062d2ecf872d57cc06bb4da6dcbf02137c2aa2162fe420abef8eacc0d0a072e81704bf0d408a0313745a24524d230589d98518da20a344ac0fb7a81c972e817ece4b10e3c46c10093b217de755c85441968fb9e35a261d6261892d8ed3165c155b7fd32b317934c91404ae8cdde30953f7c5b1ac1a3b4180354a95cc20280d9980f91d9f389d85f142a4351dea9c1b9822763a311fcaa55667acf2c445d1cc703093b611a78c992670b21883a66b9d41587de4361a9ef1e4ec93c99e532c264d4cec72b223e99bfbf22df61ec1af2063c47873f066afb5a6e8fddb3539d01efbf33b213b02a7198bae81fee739e635e77192f60afcf1b0798ee7ee9eaa73826a94f5b6beb5c2efca88390ab549cf6b139b3256a4f0e385396c6b9f49bd6340ee60398658c65cd23cf202ebd2d9f93aa918b8828d64ab0454642b3c3cf9076324904da0931ec81eef835b55a00c5419334bb22d21905d22ef25696c8a304ca4bdd4f90ef14cc5cafda2c5959a72b31e9a8a1b7f6a6f26dda14cd09492e04a58389912c9355831a7c43ab4db146fa52e0a7f1b314bf5d58126482c69c35f45323472246fbb9f05bfed049523060e1e9bc67405c8a406fe0d3d26f4d07a1e43656e7ae03d7a1965fc1039f435b2834202e57a4ae264176961f5f0d5e22f75e840d606c31df131447f43022b95e0333f09651d73d21fb78954053cac405d59726585d46c1bdcf1c65c1f78b129aa881b08c40bf961a53ce65f59516c1f5f88b66d8f5047ab7dd9c51f0e57449e689a139f8eb83f6a2f0cceca9c759d3841fc7e1392f6e03d4358fbd5732902fcf8bbfa5bdc10271a5482fce5ba3a4575431472e09b3b14937d807f084546881704723a1ace4c2031573cded232488579206891ac2940340aea92e0643c26d362021b1e354961c84e8942251ce0f3190dc8596e9a78efdced7e88b9d37948ee810098249c6b43f43cabe52ded088cab0b2b29597c28614cec7c36945bc859d4e7adc88963e9432a979a45989e4374878a9f2b40cbf23fc886f30e8b53ee85574418fd7a98421f187b21fb1206a21f820686b597b03b3c032dd2f0b891f966be17438759cb9a34f21d0771b0f717949961476bb88fa8605a4251af841962efec65d9a6cb4474340c2ca9d75266e66357840f3729ee8dbbddd259c3ce20c2252b6037b2519fd6422c32f03bf6186c4d951b6ccaf08483718720700c393896de944a1b3fcd2127b2d43862b43b51efca066a50028c6c548860160dfc31952c3ccc89c6bd67682abecc5684b8c99a95993a32c6de91e6a0a485c035520fc3060b3ea6cd237e0d437cdcf727f3d0dd2375e85b736a2c84e81c13e0305e3c920e36454528d7f428a5745c81d76d003905bd074d9550a991e5aada82de2b9d7f3336de5536d0251330764a8a11e94c88ec9e36485d74299cfbe9e4fe98be9d3bd78e59dbebc95cc564f25b7ce13a04675b1b22109a7103db6bae7e7d86e3cfc67b88ab3d49de6737c0cea22ae046cdd86428d36c47333f6fb15165b9d75e219780909a368e201e8ea4ba1c0762d59881c2da19bb493f528e15c2413a97a7d7a6a5beff6bd9f6ac0d32a0b6e209be3fb0dedc6001b0b1b00774d68b94fc8b1422427c28f41f0b49390db48f0854206037fd741bc736513cf173c7355ccfa8d9f993633a7128071aa1561e23226a140ea34dce2347a8d700ae0a207bbf4ba1af90c6139a9c2daa6bd99d21a5958b39e46cc1ce4684c8ba8bcf2cf40109c0f15b48a023df1c02a3e704919a50fa58464b6a598c60f8b2b6c4eda4e0daa5718b73016d710d6e18c7de337e090321c9087fc70f90a2061a1876749e896849a21f8e8a1d5a80e4ae8b89d1cf4f7f3b067373e8f110e4440eafff17aad8254475071ef62c315d681a57ff5fd04c3030640cfcb738de6e463e27b1166f14e39f873f754a2992b7b6562f9db9644ad74b6789c4e0290935c526a7dc2e40752b165924c7742b80278cca9c921d07e93b4d8801095743011646d666f9327814e0beb252bd07524cba2f25aef03e6abaada91fe6fc3a55dfc84312040f4290b07797ddcc0f060cc8bcc88048aef7fd3eeed89b98b57d2361c57dcf40fd914ef02eff6c06edc51299ff47a88552e3fcff58b507c6f2898414acdeb211cb02c284f302c30111974473042895b042acb2215ed9ddc4bd284f0e6fdf7f4d294671cf6995c223f6f8d670a6f5d61c002719b4c114e9571c5282f36382a11ecd8638993bef6b117dcb5ae06daa80ef6a5b4104af00feeaced34e1a43a073d2904e3db128564b61c2d442affa47cccdf018d0860ec91182e0566b6ed4215cad61fbb89a1410951a2ef6def6304db2ef0c64d9b562c31ff9438ddfef93cc54391dc9f0402bd89cfa44edd0f3c98772fb5a13eb8fdb3220dba5faaa44bc93d30438eeb32cd1e268d65457defb690586666294a86b6b66457202e8bf55ae100bf9a425e472fbd9fd7973d9d880484023ff170f17d5ce504806482a3457a01509220f25745bc0a5167514dd4fc826fdc6b75ad270c4357d10e622226b7615fd60d8a7bb5af26135f998733866a955d1be786c9f0f2e526f510cdc53a5f482aa6666e4e90679438d728c233a1f9c784440900e5c6b1cc4f8c243adb0dfee3d68561b0d9eb573ec4eb03070f5c261349e9f74c78d5bc6f4b3569cd668b6f1eded56b63938bb6882fbf93e1f37431c7172ea3c6274ff37ef3ad37e47e42ed9806e449ba9c64915786b4a702d357940fcc89ae5a45898ed708f2d10f3de7d3001f7989fe70e65b72f0c85a18c190b05526e74e3ba36a9d919a244a4c7a44efe5055499316ceb1100b92debea0cc3a405444c6a7f21125b71e2ed7497cc82bd63e8aff86cfdcf023976c4f82e13a12d3400543a3d54ea92a4de68635bed3901426a421b479b52d7d049be1224e0949668555228d8d30f9167d983ffb57cf7498c23555efc2ef3e95a67ff592f158c1d0bd760d2a8e3f1eeeba20c2a7fda8d4baa37d977ac00b2fd12dfd3d5d8592012aa03a9df03158f7e865fc210e15a1d458d4618e22a3d31ab73779cf2107bd3845807a3b86b373cc235e8055fa260cb0dea0bcb619d2c64b268b7f803b8aa4973f443444462acf708218e223ce31b4026b9af2fb152add6f1f4574db496f95bf9ad8d509e0cff6539c7cc8f472f92a863a97ef4ad552ae62a56d73b079a54aed1ef5e2267ef4026be1d436f41ab883c3e3a6507503677a3ec676c33112e2f1c502c485e62ef82b6ef146cb5eb98dcda9e68a76c3acea61d92890dbd5028af2dbf7010ce95cde1a837e42a5b6c558f1aa4716ec231a0d5decd1145aa3b1a4212f772d9f297260e11b9d93214cd0f0f080cb7808290f1a2c5c85fdb1a2ce7a811372f076116034340870e9fdec5f93d0dbd2d0ea5031de26398497353f09cb9ca624a8836d5810c0303514d9fc6fbd17165c09959f9e589e2356cca2aab5f7610d1911bb7d267f7ba3f0fab8222b13515794946b288653cb49d71a01c38990cf816f43f1981bbf0e9abb585522d06853f10d4646dfc8b3b8981b265897c080bcf8c73bede91817a5c8cbb1256b936386d8bc50314e1e9b5a4142c82ceab88a6847649814070123febadb4f214fe4f520981fb15574c5f9f7cb929c92b5bfc0a61dfffefaccaf23fd36502982035af9766777a18e5e378cc6edff2d7455b0516745a02da7a6431605fd4dad44045a8dc658844b49160bfd00cf80b12226ea1f3168b79412d784b2b732c244818bbbdab4ee59191056bb627148797a1d2f31b028f30b80225f830ee37b7706918ed61820ed4ba3886cb737311e5a66e62926e0827927121a076630f9d51ebf7568aae3684a5694c108f351ae6b743db73a613ba791f824a5b565439bfce2f29895e65eaf19502e5f74447509649111e04196006821973e52ef78363e9d7995e86f69a7224f1fa987ef1af01aad41b3c8ecfce2defbb59ae282057150609b4ebd3591a6e24e8d6e4f5da17992d679a24671c2288ce00b188a341c94be8d390d164755ab093ed651dd34c68b9206bcecb8e5c35f5c99015a50f3bcb3946405b599c31105fb169e0d5ea7211308c626a1707c2921c10445eb52c250b10ff12dbf140949d9c1b6e999d1d21028c00ffe4f37c30b9130665f723c1f3e995ad4dccc5ddc27778d85fa6c19274bcad741f99de48445c3d7b604cfa6c6d811259c72ca30ebf5d4e40e598417267fc3f1109c4acd23eb5fe019c28ffb6034874b2fd0b9e2c4a30f7b466f5863b74dd2acad4b3317d6c4a807d9ebf1472d730717c703d753437c77e94347689da52f384eaffbecf92e66c18b902b44ead935ecb0214fe0f46cfb4cf8e68518c1dde4ef4c7f814fff2f69e523a20b6cf431b53fbcc21b47cfc40f39d50cac8e532cf4d5625fd96cfe95d68648cd1a8c2e1b36843265f94a36d54ba937b254820c29bcb4f5ab2703da62e70c078b43f66cf760c5d9cf92c8d046c78dd7b710e57691d072ce5e92fc974fd774c7f8ad4334c386708f3216a9e514f5a288ec5c76dc32ba5f939b98494d0ee5dbe9c570b8c821d4d6919169790c1b679fc7edd182ab2cac1e5b0ebab5c8914c55819e7b99e022579742a100861a411673170bb3988d350b7872020bee3f82619978bb673498184451a46f684f2348741841e64b0f2deed5d2405d1ccb5a8f79190fe434a0c1c0243e291339c4dce8c745aa29e20ce30d140ba14d1d235a6285f97db1c0d01457914abb03eef7835ec542a3665bcbeca95568d03f3e5bf6dba2602402e67643bfa4f8293142cbbd7f748b4737dfb9225a096ae87f6abc331e6e758a899c7620b480cf4e81b18352d930425673f736124dc40653919cfabb75d3b04e63c140b2ef567890c53114df62a47f9469f47fa54843903382e9c9e0162f740d03c4c88695bf94725c94690a173ebbc7381b3ea1556fa3d8cd7f1ac5d19427c3ad79d621025d1d35fc3a90c0c3ee28628c9c33253c157a109e299435119b990a4160a7de360e2a61049c3930f6c371c708dfb5ebc278eccb22c80edaf828889fe477cc7d63e1cf662cbf2d80f2b5996ab479c28060d827321baec0309bb5f9f9681cdfe5d88683ffdc180c16fd7c63f5ec6fd92337c7a46ef1775dfb4a8be659e623089e35087540fea07c0504831b3284427731f4e4b3dcb8203d57954b300fd5b76d1c444f16147c171e0ad8c406b0b0c8a04ba6ca1877cc83310a504e49b4e2ff352ae80f67dbf6551a512ccac8b8239cda5b53a62c5d0def05dbc1a489f1049d79796a901322a08cd44160a4bea0ee23292b0d943b293ed8d0caa9dd206a447c0e6d7f345f673bdab70f7c83fd97f5ecb87e363b9fc837504403c562bab2bcbeb74bca54264796345a432867e73e458b41923145b1012f086c77bf3c9bc70041c8d3ce559bf712bb5b08a28b655618f936df232b22fdfe362caea9700c7a9419cc3b80629cd510bd8cbddf55dc79f38a8ef6523012d767f6b8364ff3d332a640d5c97e21c16e2cc91fc46b143b74151d9f13d378951b0ee1bcf32cb397e06e6b7d2f13f0e68183628a0d6dcdb99867ecaa42b26fa3094de7cb654cc7e20a830e6d28eb0e258627bd7b0a1e38b85b70d4953699707099f4c69ef1843c27a30c22f0a3c6d58e376428e02f68e8f5f16a3989a0f2f3ada39b92097a51ef781377247d09b86a8761dabfe26cf00cbc7903779ab9675eff7b5aae1e69ce29acf38ade8b63d75dde74694fbede40bdcb6db5cfb011ae8897811b4e44e6c90df3f5b700bf095df8dce33285ca2f917503d3184d70e0c6e4ae6f4ba244518f145c656afbbd69b4154627211227a08195eadde689da7a8067e80c8867591ae1af5ce435502d29f57796728465a8f82be9eb452ee1c68e7cc6cd2f1218d2f5eb6c53f7dc35ce8e1d06561c75a4810c3c58b7e6aee3ee513856a44258d8f500319e856a9c0e51d547e440efe434b091803e07e655b39ebc42383f56a581d6318c51979eacfe8744c5fd4da80cd049f28271f17c6524341784a4d2c65f273ce5bcc829a02173e570b666ba7081875468baf9bf8001a8e389abebf2c664932e847305f5e7442bc01a930a6c1d8fd02d4667cb44a281f28be40cbe5a46800c25490f526013d9d19ea6956c2431924f4856d3bf97764e848af61e7f93401dc2286205abfd22bcdbfaec7ec24b4cc5ea291af8e2284d8458ba198a7ef6d8779080d24c51ef044c8128d4a8a0b5558cd99b8b492a2424a0db6a56ab55dc4c709e263dffc21a8340c409617e7edd465445b34e431baf827db37d32d8229b3264372ef8986ffcbd043be9f85341c5028ce3e25400a0507000d45ccd58848255b3322e0c1a1e5ca78df9d4891e4343d52a5832ccafb904a7606785e24d3f8aef5ea3870ce2edfcd86b63780b3bfc5e903638203a6e4afa463bc1ba5e570575f514109e5da485c1d136059d56414c79ab0524a3385f43bdb82a323647beba970a1ad0ccca158dd4e4077daebd287c64166610845d3996561da58747c4e40ac04c28787fe3800e875e85cbdcefeaf472c9dab5152916c6a16780caa9ce6b369d3370305458778d715f803453b6cd825098701a7c1eb4e84f5f9ebe88c75d3a5d2f43779995b888678475129cf0d39a84210906db3777f16730dafc1976f72f9c938fe67183090e8cf632f0d11ea45ced8594009c1fe53a362472e4db9d54cc75db96671137868b31ef4c7ecdafcaefc99f9fa8a0c217b5041b383664666553ccf678e42db2ce236e7d4813ffe1f3b7072ac73dd3a05b6cb16736f250d5972963c1c807c0fa03a108f13e9f459784584ea0333026c36e148d29cf4c413930c6803a3dc12138081059b52353c312c2ac48443fded3a6559610482de5bcb6292daa65e6c24bc22974762a3263cf21b03f33b6980b1a208f4ce7bf34b30414cd6fd32f9d67d0fcb2818275b1500b240b45c68e2fe2546a38683a4b9b21b8d26fd48c24ebb0e5f2e187dba986cb5e345de5e16c393f9595dd597b08545ef03365b570e8239aaa8fe9b625b0bf12bed1438dd8de54b544090cd01f4f97dcd79046aa2c762f8cbe41b289e3f81af6752362996b0a8680e45478489b2d869b2e2ebb32163f31f845524d5dabf5fb0822e7d4cdc7d524e0807b89b8c0a2988211ffc778552b8c0f7fd499cbebe16631f9792261307eb367c3057882759023024ff345eca56b82573a66e2ca62ea2d3b575290a02f45fc8a73a7e46ff474379c2386e08fa8a641cff003d7b9da6cfd0ffd17aee59928c4b1db48dfad2a31c095017320b29b302687b29e8db543d127720f9ab85009e4e477087a00849bb5f911f2ebbf85f74bad18bb75c5b4be3d5e2861d5b46ed27c44eb0327a7b5212b9504d042032228b4ab274052960f4cdce0adb3e2fdfa019fa2b6e39fa7f19680c98dd30fe662e02a6f0c2ff9da4d1c867cb976897bd3c3804c1ccf4c711439fe5e2fba8324080d84ea050bd77c500d13ea03b773501b51fd7d17f2d0df360c8c6ef53f99eb3c779530ec8a7f273596fd576bf836684448f220e3c699b6175b169b8abec35193b714250c8d5894bf4680197773055bab167146f09a8496283fddbbb31d772fcdb2c6a1a138423727a3d30ec8f89264b9707824e3b1e6dc9a6362bfc9607d88f196abcd3c3b234327d1a178f8b30fa773c833569a61441f131ec2e14adb2c2291e041bd88bd248c95e377c539ea504f76280300eac4fb05685c85dd70fdcc70867669625d030b827a09fe9073dad116c40d282425ef84a01d269407109777cc5d2d9048b4f95c2f210ef62f762e649e541fd1a7248f3fddbfd875fffc71568e79618afd4e11c80fa16bd1607d6941444dff1bd7b4fb1397809bd8e0369e0ee42010058a4f5c6f0b58894e444aec6d2c27abf61a6116baccf4c59f2c0facccd14df5e1a9c88eaf3750cbdabcbdbbe9ebed928120d0ca9dad18b671ad95acf19b32da64015cd2bd48d41dfb43135060017464e2ecd541d362af326ce74ce6d0c8e4ef4638d9d689b8b37ba4720f7c9e116dc2d2c23b21b914a0314dadd6f521b79484035c014d1f45360c49b45a69c3a8096ff9162609816cff6097048939ab35e57bf53896416821ddf22f23fa39d6f22bacce99d52d254b1e07d1e087b175d04b1afc1d4f7d7529ef701a5487d0ce7884dbda302a80c82a8ae35afecd0b3d1c3335916a013ed187d83782d66a68f3395aec65b1c891bda7292b15cb98d4adc11f6878fea197e05452434c87f9150fa9e705f57df1f02465ed4793477d7ea98be04014832e70f5ec92b34d6c0c37ba70fc7abd780349001d48550bed5dca1462027de042dd68335061be980b992cf730866b6974d61d2338a0d15028c5c912ca1de718e0cc9288b5d4fba45eeafd00ac0d0a28f39359abc36eff2a4a596aebeecb55321f4694ae43f1e52099faedbe143a9e27d5ffd4596b210db481b0835cbdd5ba7084ea492620a477b5ab94833b55d88bfd3637cbfb9f9472ae066f791088e9dea517e5cdedce31116b3059839573af4a027ddae1c4ceb84033d1b94eaaf8d877b1b04f687d54f364a3e2b4961cef8e12d6f154447973afd8a5c2c51c0f68003095b37a4c77808d91b60a777ef6fb4a6e309c4a4cc9439f8d932987171fc4fc18a8052a9ce617378cafbcac26bff8278822f0f6b0f4402b78a50d2e6952902fd4b18a5c2591325065f9bd1172e91dc1d358506d6fc7e47bee0883cfb9bed6a6ef91c5f0a5c3d0d9138fbcb5aa2d046877c350e0efbc0c15788559a826d981ddf5f735ebaaa148c2c8f6fee98cc73f57eed5991070c6c8afbe68113cc687a4891d545ae98c125c5fcad66e3a7122ad7e55021d26fad5e00ce084a26763af244653a92b3151234e35295a050191377742b6c421c730f05705a6313a8a8ea23ccde173dd009d95b01955a1b880221fc2fd0a929ba3bccf02b565fe0c9a78bbb4ab9b5e9d539893e3dbac1891abc92e2c4599f04248861a8d627c3f7cd76fde12252c2723e041f8e82eb41fa51ae04ca9999e818b5c67043a320b9e59405a59a5038d9095ce4d2f67307a6aa0f063d750003c7197aa289b691735439c01b5fc212aebf5a052330bb86ebc81db37168c624715e8b5c7abfb0feaf9065265a68405d0da2b0d81629089899584ecbdf7965b4a29534a01f509a609a50941d9749ca2ca158924787ad5454d80a894e785dae32340d4cbab506d23bb82bdfa6824cf6e394f2321ea243fda6312139599ac0be830dbc29ef92ecc8b1b8181ee00d849201fbd8308f9d875517becd663dde584e7d9ad5ef9a07eda33bbc0554167695584ecf3dbd31e67104229999d7cbd72b2328a908993561db50a3a6c204b0c59f42437321938ccc9c30e4684900c09f9294224c6de81871d3a92dc20c1d45271a66237433e8ff6600761642925cbddadc9932450abd19e8df6da37a699c49c5a9674cba16561324b59d70d9903f5188ddf907215bb45766e49dfa38f0f79b4574150bf5dc91b104646b7b40bad2cc9cead93a3bdf61d6e18a93232cd6317bb057ab7f0106f00d58fae28cad3ea4985b3a008c9e24f922810794ee2378868f5d96ef40542282510f6e9d15edfb00edc81871d3a1a071a3ad88021231f762c84e645a77ecca8674f41779882dd0c199b9b3c794292df27bf4149187dc6e2b5e742945ca67d933c95f2f05f4a3af41ca8b75ca649dc8e7eee248973a0fea2b9b497d82dcc9e62874eea52dccd90b24b5935043087f62c1d3c5d9745725294360fb98fddb27821b37639bcdcba8428b92c79cdd24243bb989722d4f6efe5bbbb18a5a7a04f776b720a76da9f7e1b80437beba919f2a1435fd7f807050a429880f3489cfc0621f9f11f8b678ff90d4252e4b3dd6822a9a8ee7f8d4344a5f1d41dbb4662a2ee9321db16355b7d944e2a450bf0d710d4cd499e437b6bcb4a4e51ed492f717c848d04a9de4be95711200e22bb4fc596ba8f739e46e9d44bdc534ad9e772e9f584622139e619895bc738cb829a934aa592c7d82f75a9ea384a6e79c92daf7e6ddcb7e3372771b544da6c7ed3302cb6876197e5d329b5d8a2d6d0444277b7cd431a6cdbbbbe87e6d3a2ad80cb65b41cc2e9395029cb726bce283908210ee8f5b3fad07d8390e8bccd5bdca7fd8ebf7c72df3ea16ef31797437bdab93523f30fd1aee8e8e407e807a8f4734e6e5f56ef3ed473a5b08515403dee7f29ea24dff648dd6793f39be7403d2945bb19f2e966a3f39b97b25537e638308fdb865930538259949c725ffc926fdcc7385fc24a9d4c5b1bbc9854721c24875e22397452bbcd53eed35e5b3de61bb7b4bd4d7b2db3807c363e6f591df7d41904485a52bf5384124209e34eb62ca42ad4cb3187de5e7fa8eb593da154b44af3e843ab2835b9d1d0cda38ad7b6ead13321f5b379d2469375a9148ae3b09ca278e6363f67e53efeea28de2c55cee62577d580595020bfb90c6c4f6adeaa6d338e424a3bb678b18bd314009dc4a4aecbec8c31ced97d3b28b5ba1733b6f838d755ccf5e827d4f4b94e6a2b888cb4a442af2425ea773a552e76ec110c1dd181d5ef111c40f2bf4770c0c84352156a33a9b2472ac6fc0b84e9c1330b5bd6b7732b725b8bf6a06ff7cdd9bdd8ed5a04a1b6787fd975b82b65e963b747782004bf5b4de991c8484ad4f66c0cb07ba876f318bae7e808764bf746e33b24ea887a4201605754a0ff53f1103a5501c333545b17ccaeed88a0becc219e3a30efee076c66a643ee03363396f3e6009b190f4cb75ea4d7706939ed7a40b77a449fd36d66266a39140cb49d8d064e845d852deb3ad02ad037bf8e7946c38652a75d6a7b50bf3a9bcb3df7d74450a95f6e394651280bcbba8f62388fed6a5cff6e852d188643bbab4b2df51a975378b9e53eccacabe1c3d5a5b64b39603af51ad22d976e3323d316e69e6196438f807539ed7ca07e51bfba54e6c3e55697ca76c692812d98675c4c7bd817f3986b3bf55b231a962f6c869ad7807ef9e6fc34731f2e87eec3105b57233a751f606abb94d639e072e8352e875d6a7d26eb6a508fee43ec52dbe9680f731eb005d358505359d6a51c70b9e511b8dcea7c18a20674ea3e44b898af85753878470bd9b2d09df9ea36fdea286c814e399e4921a2f205805e3a36816a606e753d3cefadc6e5b3ebe1b0053e6067504f98b9726040d12d1cd2630d9d1c852d95b91785f469e07757bcc06e22441091849d1d9f9f9d9f9d9d9e9d9d9e9d9d231f19c8200943432b218684181a221a1a221a1a12fa590d0dad5e30f482a121a2a121a2a121a19fd58e1021f366e6cc9b797354b4742709ab95d18fd58fd5aa68b52a5aad8884961a2581073c18320408480e0d0134041090101090101010119f2123a38fbe1190faa14e464647464647464645adfa4e431f7d5a91d4769bac46c951b65ca3048edc6a941ce9a07ef548a504ce57a3e40957a3044e1135fa1ea1e4c9ef16a346899baf2a9b772570b8ab5172f47d8dc55ea3c4a855acc448c91325986b943c696fbf460939a4c44dc36c1f358c1c52e28495385162a4c448491339a4c4497b42ccd528592561892c1ce108471c633f665aab8ab8db86a666c07dd86db3a335e6d86d23e5c2e55ede5e9642884b68c20846d826b2ede628e5a4b15634526a5ad5eb0a826159a669a8ba2bb68de6474622f5c4286d3459953243a1a68d26c50415769f1c42e4a4a2c22a2929a7d346a3320349a8ee114b70fe2a41c580da832ebd28052a458a1428565452a438a5a44891c29402a5a64891e2a2dc00ece3673339ef25f716017ec98e94adaa59b2d3defe929cbee125394b7296f02c9172094f7bfb354b7eb4b7df354b7ae8929d86d9253a4b7496e42cc95982d3ded62c5992d3de3e100a18b0a18771ce18543ffa981045b517ab507b1de94d94f461ac141bb26e62179a28a20819022210a10a5818c2109a14fd06612189df202c04f158e7fc06353942e237e80a485e4ec8bef1b38911ee4b0b6769550711d22d907dba85e4b02375a96dde681cd56847ac9fb82877f2a9bccde09b9bb7ba480f698fc81686cc9beafc039d8940671f9527d48f7da414ea87e27918bfe39cf3b434c68e373132c7185972e4200f997dba05323333e4d835db6c4d3a411272b220442984e91fd1e75b93a86d7d90e4218c3f60e42911a17ebd13795ab5bd9392d1bfded9f6a64c7b30b6d73b10554495326ebc8110c638e7c6eded96de5d94ede873c92063788a4cd4e8ec352b278f44d167037ba66a7657d87ccdca49cdca091247cbdbb7e36757b37252b36af2370dfd6b564f6ca665d5ac8e6a9644ad66f5c449c3d4af59193de456464d5a65f3fbbdd5ac9aa0d4acbe5ab332825dcdaa497bfb960a9020ca4acbf2d964481069cdb250364e0089361a09082894f4da1eaa086ba554d9fcc73bbf4147843e7afd0d3ad283bfe1ad01d6134fc4d39c2f2d0ba5049fdf2024843e3aea37e8880b7e3f7e1aab6ce2ceb09e78e28932c45944e66df7761f7da0162232240819b4075a4de1dbb37d89710f8632c7025baca015c5b743674175760c0695dd218c32d8028fca6f9016a6f02a433c80ba626405289248242f5512974367505c06c2683fe016ed070ba4fd007a759b191390c9880fea97d29362c8d5287955495203c5495eb91ed54b2a48dadb548d52f592dbcc90b81eb44bd520a138c96d66b21754d3911c15547541fd4c47df283e2a105a510ee4db578e6c3d4a5e9dc4f520398aa712445df159099205be949485da4eb5ca7df14d1d0e4d2ac94b7e51d7b68bdbcb51fce439b437f98d5655a7be030fad4a71eaa72e757533e45f7e755ca43dcc590040d414bfbc7ac6c5d8cf6aca4ca929355ac565ae790ed4578f1b4ded525937437ee659c7a33dcd637b9ac6516faf7a4a47dbbb368d3bb547811ef3ca7d2c4fbdf600875631114d73ca3fed6114c5a960523197c1b0ebcafce2a13dead78df6a8f7d4bd18a79e61de0246aba8bbecff7561580b80a742e874638a856c4b4cd4d85e2adbd6505a25d1a09b63f47a8ab107ca47c8b693f4eeaec5db38db3731c9aa49113402e11681ebecd31edced5aa77922748b639e95ad73c4737ae8437f8546b042f901f61b348404292081bf423b396bc4cc37420c3bbacb9612aac4267eac843da77c69d1de7e1a0aa02e2a024073f67b85df6ed48a995062f4df0e99a00ab8414a8a7e89f8f5531190dfcf2d0821dc68a2cf9902c84692182674fedb210024592d84104ecd274f67d952faa4ce107a2714e4ee81bf5d1bc22998a8ebfbdc84df2026847cd45a34f1eb2e4ce0fcfacbc6fc4208a1842b5dda5b97dda916d52f6aeb427671077ca7d0a561566e5ac8e060a30a4c7e23904687ace0f3fbe43f965d26bf3e25646181477e4fd589eaffb9fcfa8b85b17c14a1e0c8880f7e3064661dc6c2b811a640e4811f442148929975b93845864cb694511bfa2af4c8d8dddddc2c2f2f64305969431ec7861042c8db8ae5e5850c263fda908a163c65d4946831c6183b21d67b3bef162f51a1eeaeac90d1b4b3678bedf0124f56a8f9d41eeff6b0818f5644d5fa70a7b5732e66c44d7a867d5a0b77b2cc9901c960a751a36130bfc1be43ab02408521ffec3b1a06ceb05f74aa68c1d0679b13ebc2baf5c4187e7d7296151d46c97d3be2b7c3988af145c35c4630683c3b0f457e9670e13fed770914f012241c0086cc7059983b547b2ccfbb2732d4259560653505219f879ecd2063b051084654844919728969957cb824e7e1cb43a802e132d43e6da5cf07b265612d46a7b208c2a4d8f21a56d76308b6ba1453ef31e7bc96c87b1f3526665d48200a1fdd89a12b7cdc255ab467cd25924432e785c846c3a08c9e07e34cc1490ceb2cd11aed9398b313f322c6bcb49046dd720c3e1f59db4ffbad541249a26e89ced1b1a375d11e2350b6d3847df271080bc3c7ece6630ce2a3633eeb427a8c2e8da41379249fb46fdd6373adeb6a9034275d44ad4ad23075992503bdc543b80833cbf6556cf2d125101c6a9524924d589594c27ad163648e2ed9c77bd1b84c4ac18888fd9347da10db306a2d9b4b7137b5266269dded855dd197d6a7670edbb8db34e6e4938fa42591a4935d11bdb9bbdd15dc797bd13f6e1b894422f956628ec240dba99f349247b0253aa9bd5854f9fb35dffc6bf99675219dd81505e817c1c7e8e2a3183efa97808f462ced45df38ca1cbd319fc8eced45ef1986e411cedc893e7ffcf8f84d201f63e45189d36706f9e8b239c6e8990fedd250f6f3d282301b77bda52dad246ee6c01659c3ced34ff142d89d97f7b46af24f11f5867d264ece0fea2a7ee2748bf44f5361aa4b05bb7943ea42950e7de2703759f79d6e485ca8cced1144763e9b9a258b38d9a43d23e9a43de91b278fba457a364367a47ef3c6c94bcf6416e4e5106cf1a1c2eabc5c65227829b31effb01cbc6c97d2c2913e7520ccf4ad41f26d7352c71dc94bddce0953a7cf4f2ef9f64faeac215ca4869c1a7e601bf8670d3b7f43007e7d1f6667e493972e8756ad92452da9b02a8985f5a44bf9849fdd17a1f0d3bf8582cf63dd17f3e3b950898555fd4d51ab78bde93267721589cfa836b9d3fbe0b34b13f219a64d2e45059f651a7329f6154a82d1af90125ef0934b71d7032cc3cd4367f1aacf34300821b269f30b4982c080f3b3eba1c75f60e57790b4c9999a1082cf4adae4b4317c56b5c9999af80c4563212624f1969f9e7a66d2268721e12d9f5a865da72591dab7676e85982084b772745ec698cf9dd64d9cf6a4dc9ce4fba5a8c185cb1a6a78e97be2c0ae902e7d8685d9edc04b97293e458aefee9b2640d9e9e3658a9737bb42fae5815adb934ee2e88c41ddecc60af2d331d9033f31a58a99c3337de62ac93787bcf49d374a08f1dfec79e9ebf3df0cf272febc9c445e3ab5e6a711e126686fe43f3632393eb52afb49d94236a95f9c655db4eb516968d09dce43d9b2cc8f44bf9b9a7152da7ec508501fa0d3aece700c6c917eb90c6438830daabcba548d8e422e6559310d03801f191c6cec2037c94b6baa248b8b94d22b0ac2409737b355a75f17428c325a3da28cf6a6978a90813774b48afde276e0e1ba5eda9bd5e2e4ec0abddb6187aa813974d8d545ed742cc6e952769ff69a4b7bb323a27e2e3f5d0684d916bab12e267495ff249199f3b38333d820a3302ae69cd3592789cf4f179e294c7aa38419a40424339b70c2e9d492a8e9b308d16723e152b344fa74148469873e7dee585fc8b0ba82e2265f6ff2d8aa3d26d60d6a6bdef457b08808c9d04a6a30eb841dafc5f7e2e42e2f310bd4462697d52ad4d81e86619ee22426951df317babd789eb7c7ddd05bd3ba3ed21ed646dac34a41a0280ff3ac6bb4c7188daac23b1cda6322d90f0ac2f440e1a8e68d06056dd9ed2de5467df3d3e9141d07f42b764be914aa5095cd379c13c74336c5338b7fdae12219bab9b9e1c00ce62c84081b69557ccc79a8091685234c0a24f88f8b7c50149c3c1f798c913cc6491e730daa3e0a8b1ed31c8781b487b589339196d436f298b791166a9815c71a487b984f7b18156ab37fedf398679b66e22caf5cbb0973b9d134e6d946c338ed615eba41fd28c95988964cd70b3de6dd8275a139e6ed0212f7c5c7fce27a05cc02f3c27f0c44eb5a05bb02f3d2116afbc7401e73c69c3167ccd9876dd8c7fce31d1e8c7f3ce699e6996f9ba66d5a4779fae4041f448ff26b840f23928613d4e93b9ab6b7b3e7ec78b4b7b0553e5d9b994e29b70e379a598d54fe4d59be9eb2fc5bcbe54fa773f6ecd9bebbddcd903c64bc3992316bf3061f21e29716cb9ec73ca0d62d10c53e9dd99b07441dbd89843e7a1b31fae82c30b007b644a79475589818d8129d3259220f0a01c5fc2e6c99dd87024ac141fd7828e5a7a6045133cb270d40d49e396df0c043871b3bec803df007f469552fed21a0c6e1e6ca08094cc2a4a849ab66f7cc59e408f4e19f2113c8c8ece08ff67a9afbb42d0581b417a190ff79f2cc3e3906c2740f6c41a16a8d31c698c4ea15f01b94840d3e63d6e996e840504b549987525a2b0ae5014578a45ba23341257988e4a3d3e9703610e6ec1fec11001075892e873d10a6570dbb25fad08b90f735901fa15e2aa5dd4781bafbea077b3ed8f3d14b4d5418a347ef9e56c92096e50364c88ffed13e427ed8090e0f50efb44a76f1894eab28ff20f9d9494ea63d86944d01d0a7b7e41e300bc9511eb37db7391bb24723d9f68bf61877555baa41fd4ed063acb70f3527955fbc18820dd6611df6c13936d807eb6841a7072d6df8601b74bc900283210009c2d98c71bb076e5f588a54da5e4475772f30045d81e0f2d262476cee01dbb0446213f5433d03be3dcea0a28a64ec5cafb2cc231956dc7d3c9eb71aeb25e4e10d7ce4985bcf76cb019a8059ac338b5e4113300b1e9007f26c478f5c6c2f1a35554184fc72b07cd4c2508568235f3812af1fa01f1a6a4637edbaae8b5e57365bc6cb2513435ffa0d7a32e40b42e2178a30a1c91be0b708422b78275f8ecdb5cfe62f8725ea1b780d6ebe9bd665be713087ab06cc827ad62db3c81c72579087ae519ff6e0550366012177098919d5e41623928aeabe7499ce817ee690bb84c8c01eaccf32c86941613812378c3ae4f8079d387c23c3d0852641bf415d00f24fbef0a37ff80d72a2d3446dcf4abdd33d43489e2c117e839a40e49b10e437880945fe631efe1a0944e140635dec0a4844fd50194b8be59efdf5ed3e7e72c3b32828dbf10f9ef6983d56e12c964f5fad6e5eb5f6e2a954b9fd6c1745f3f658050be76d9ccb0bd7828b79212383c3814687ba42e58fec83c298930839c618494d90ac50b1b853c6d8f5ce370fa7cddd75384fedf16e572b5cf8d528039753d11e8a88fab9b8bcc061d7bb1718ade29e8f37873659bc1d49e58f9e4a4d972fdd9add0cf95ce4d9c8b733101bf9eea60b200b11027300696f8518a176276d98b908d996b050ba428d9984d9cf25c7cb60b46ab9e3af955287c11de75020eab7463cc30cdd10275fdf93ab389f4e2737dd68d55e14c5f9d2ae8d06855f1b4d444141718a8282a34514160a2ac54693a24ba1505c1cebecb4b7710e121565fa76f9ca8aa3fcda68505d6aa59b217fc5573a1eed652e5397e34071cb2f14b71c253a9334149eedc63958e5523212b7b9892b3973b5d37114b52ba328282b59868292a1b84caf642819675f8e7d8292a178adce1c8a5794ad2ed3d01483e4d5798b61f20c853bf9cae5321005c72283a3514387f660b4275dfa8d934bd7ea499248180a0a4ad783f5a40d3cca67f328cc5a2591485e397652ed5aab934e45ad7581678d98830163c84c477b260ec53907baac15ca6f8d2a60f2baddc012b71826af4ee250ed49534a8a7ff5b3948e1d86774346c3e8e816e972895e7aa6a3c73e0d1ea82667e71ce83c2612c9651a43716c739936994c2693676ef2cc535cabd549a414cec4281585b3f95ac29c3127615ac6dc53a9a62151a3431f95560981f5fc34e458bf414900a1c107cbcb75962a1d256504b2deaa68921062bdfd0ffe37101947272cb823ed0a2454e8a418d129eb60d695e29777712c16a9898a9f3cc5331515151a356cb40a73cb55ba19f2555ca5d3dacbfc443a9d4818e64c553818a7935f9e03f52a0e371a952e75ea66c83ff9a9e3d1dee511a670fbf5330bf5d64ee12da7ed65d9e9d451ff3254ab486eb90a676955c9ad46a9685575cb9fe52defad7a72cb77a3690cc330cc33c73c731527edf814ec3a7126df2de5c4d97c8aa9fa555168abb676dc439d94f9e5189665b53dcbf28b5b26d5a2945e17e65796759f8df62c1aed59288fa5850a7779f9eba2d4ea70ec0a4b22db1655c5f9af35798c675c8bf6aeeba27e516d05c5955dbeb989fb3437f98a8a67590a0abfb1030fad52f10b45f5537bd539010051553cf315d7b818fbda8a0a545951a9d1aad57cc5e146b3d2a5b46ec6b665dda56528b41557c94c1b776aeff214eeab5f7de5caae0b8756d5d85eddaebd9ca572f587da9e79adaadbe697b7d8dcbd14ff5efe6af1977f317f9956fc72d3ca67f329de281cc78682fbb4cf5c85fb76bc0a8a2cf3ac5556389b5739993c33c5b4cad4710f0ab779a66d9443b577398953716559c643d6dd68eff2626468305a95b9bca832bf3ce32cbb32220cad3aa77f762d5256b24a19098b813074ebbeda39393939b4733a07c2505a73380993cee12d467f47ae99e8c5d321f28a8988622c7a26222292a9428d2426757aac9b6f739fb479e5faa615109d393e6a2ffab6f99cddecbd6d31a7737a989fa7370f90d669d5feb67f04613aa75ba26f471f4bbe59a4acd4d1ef9cae5605f8bf986da3e99c86e199a53423f554eef939db180893e2d4e4266e6fea76749dce61428d1c4e7510f84ced86609fc1b4d1340e36947feb6ef2114d0ddb129d08ab8fd18a395291f0f4fce820423a738bcbac4bc875d560bad553db9b4e29695b769b9ccf38cbaeb8d160fcc433335ba5ee8cfbf6c967256ebb33eceaf8c77b692fd2c082dafe79b47f524970018994914629ad962dbb37a2d4ac7a5aba94527ae7b22ba4979050a34bee58daf368836c4b4535b27c94e41667f2222325cfb28d86c41717864c81a46d64e85996f14663a5a474292b831adc684cde34b6cb25f5def630cf817a1eed611edbc35c6e327a7acfcb49ce1b0dc9b30bd223d628b659d470b443b7e12e0e470fd65fbe0f7bb0deea70b4ef6f3410520c52eacc41a70c31ef1aad02ec99672934de62a0b8e68c719b43aee4570fd47219e869321aa6e4d161b44a0040d49257e75297485aa43eeae5df1ae1c93cdadb3c568fd16b3d31c9b907ebe106be99314edbb08fd9b16e9905e6904bf2d03b638db94c0966011dcbe4465381cca1c7189943c7b8e8d1e5ba3c7389a1c103f55b2398c3908103ff7c272e1e51f2c0131a4250db6376bb19723bf96e1530f90cf9344be1f64d4d6ae69a9b4e1ccec941e033a76e084afdda68a4fc34a9b5475329bebe4054a4a8f3533f7129dabd98d96e89698f09557e31291cbfc9944ab93a9329e6a1c9533c87f697c7b40a739375596e79ed25f1b6234456e5f2d07f5ab52aba053af5e5202c6d2c9ecb8bc96166e2485ee2a474b8d1c892c94b5eb9cfa64ba5380eead2a94b4ff1cd6d7e3785a36be2507cb7cbe62f94e5be582d12e6bbda47dfdac844626e59968a1815d7d57d2c2a626264506a398c1a2f6470a0b1962523af507a0342467d59208490a7f430c63ea55da914547a1949beb085c61849306a3950af699625a5cf39354dd3bad4e638346fdf346fd718c332da1ec5b04b3ae52cc93f2fd189acbb9f83ed134ad85cb98043c3cb96ae19a1c6de68b86b7bedc9e83c990e8bced6d11e8c9085a08e86611d35d33167a0de37d057c8a8c222218f0684d1d12dd0a1840bbb0f856aa2b65fce1c8c1f2e2f2f64264babaca8024a1df008f20d8c3e54054e7e839c60f2f21be4c4901fa09f55c2c752c3b8744b74926770d3b6adfb481d75d9a55f455dd15d5a6473bba1ffea5c7645f45250855e5cb12dd115501710947dfc9fcb47bf4abeb0e5926ed156c0e673dbf6a4942ebd8dba4c6f94fab4b66ddb36879b43d2e51947b96f9f90b6cce6332e87f6589729417788fe9042a4a3691a17d31ebdba16ed51dfa6019e599cf41825a7a6cb48e3ee8a1bda398b9cf5ddd09e83d5591ea97b1f7f9d7633bcb73aafbd8db17b42c511c4491729c21186bcff16e10822df98b6add2ba0596340e256773ba24ef3e7e3a037bead9d2893a712aea9cb0142fe95416f9ec4aa2629d6fab3e7693dbe8b455d695fdd5b10fea57b73ffb601672a3913a160732c86cc40872de7f8df051f4596bada56adadda2bc496b9b61b9b5594fbe8df031e4d7081f400cf06b84088e9e92e1737cc6f2bd6ae64bcf2c2dd2342704d66d409b1982badc6ea035f3a9cf902f29f5dd6afadb314081cf665fa63b87761cb34b4d9771886c27f5a959b17bfa7ae65a564a827a6f34a7ef8cd37268ff628be02fff27940a16bf7aa3e1b9dd504aa2c6c83a4d8553a6b34ec73c07ada39ec1e7be48ddea9c6d32a640b2da5e183cc67a2e2f0db333fc1ba3fb3ab442b6ccddcc1ac89685b6077d5f3efe049c30610292b7e856d3f231d2a7d4ebbab89c3add68e80bcdb42eae071d726b40744b7adc6aa25b2ada833df053dac1a0db0dfd960bb9b00bbb7a58ebc450bf06f2c906b22e2c87de32a057cc817aa41ea35f1cf5e838d0c000bfec6ab4d73aedb1d691f4d9bc8cf6a00bc003357a7418ad727114a5b5a250a89213ea97c29cba95c2ba19def418696845416d671bcad710ab979e59d66e2b08338168adbecd6e85a2718a632abea2b27263c48dce9f5cc533d44ea048f4495dbb790d079a63470ce9fcc9b194143f79b63a506729ec3c7bc98df0c091df25fc1ad181a3cf388dbb2fd4d293bcd3785d78da662c1dc77d27a721000148b1a8a838c95350a05652380ae52bdc970295da72484949594959515151515949b1e5a0e22b598b165b85f900768614294c2856563cda3a29edf9f4ee0b35c553ba1406e29fbc87d29f1cc3fcd438ed598eb2e57072950e03fc296eda6e48e94e5d013aa3faf50e01b4090451a85aadccbfb87acb53fa8b48deb25cc9bae8818d9edff21424ad824431c9bad8b7dcb4cd883edd84017e53f7993cc5e391567d581cd2dcf2687956b7191c05a3a7aeb9e6b3669b9a0781962ff42096e55a27864af206d22a1c989fd6c58a5b2854dcf20ce3508e82eba1f4285c85fb501d8aae77dab3b62d8793637e84129efc4943c1edaf70fb2adc8779efcc38a9601c067adab31cfb52b215d901305fb1dd90b568bc2e38c577f0ab7429dd77f21827d226358bebb6107770740f4f7b96a774dd16ead73b383ddf89a755384e9ee2966f29ae6d35a7140468bc2e6ec0d13aed59be83bb2dc0ce0b96e50dc42af9e596b74fab7094b46d0675f66cab29754d79a1245dd32946dd2745f16f003f3f0054ff547efab630bc822d16d5d685e6130975ce19aca58e39addc474bdc173ff09693b84f7b96e9c66915742bbae5ad133fb02d969300056fc516bc15717685d565dd8ff6694f5e5dff90fec36baf57527e6abae55ed7e2ebb36559947694ae54d88b8c3e3ebc9943df53c805e855680b3361cecc7a0b1885be8d3e0884e1a26e699f413e5a6f72be27affea3421c781dee5ac77453f9d708443ffe8b457a629108d4aae845be3df6c49ed803bdf638f6fc8d13563ad8a8515a42dd186b766fefb4a7e10cc10e029fd956c0c7432f9d85a46750b2506f6c64a81a5142dd1e76de69efbbc7093dade2ee8bdede4e674f926af3cbdf43e3b74c5ece163f5d58a6f4e971a399f2c893972f9eb31154952dd9487bd29350bf65b24676e021878e1d4c9ee0a4daf7bbabd11e921a3070a02ec3dd39088924242b79c9468c907260c40fa35f2358c0a4fe1ac1022434d08790aca35ed416bf4eaf2722009ee59bf676971942082124421111b560258322231ecb89fd1ba2790339cee118a73dc928d816e954062f8778e9dcf1ec0ae999e50417eab7443a93899c522210c6869492773eca37366c03ca29a72492442ebf45fce0fc879adc372621fc0ce1204309adc266e1a5175e42605b648d5d2119889056e1e4ec300e0b789e47c370233026fcc0b648974c82978c82972d609c5d21bdbf24547f88f879488adb3b2ef022a6e428d4b7443238250781cf94ba2148dd2412a9b32ccbb22ccb370e00bb8256acfb2a6a89bc1b7e72c4f59026d245da09db78f13cf766d81b03b5d7224b56a8d26791565d4d24e50415077b8e39a461a83584ba2fbb39b98bcc19ad59dcb7831f8787234a126d4fb25f4f7bc80eee22edf590f6203ff1edc4ae80cc9376912e0259fa1400269dfdc2ba1ae9ecd2729b76d29e122ae70c6922451aa68f625e5e3ccf1d851af2b08d9250e94fabd837e8c9901477317c755ac503b33350881025e7230853eada08a2f8a855cc3eb9c8d94913a39692d25aa111ec36ba800edbc2feb9130813f379539838936307dbc0bfdbf476625ba0c30ec353c8818750040fb98d7605f492508d460f6b7bed2c500551b62c1ff4618d99598358766d241499c6f94f9b5c07b12bd84b1cfb301066224ed21e932236e21fd34d6ef9374d26eef9e8271ede69ef06394073761993e0a32fdbd0fef10fdf4192d4b43ce3c439a7c9d4993aa135121b04cc2246e7ae3f7084da3d403ae7eb1c311cfd0689a1e73fde11c3075e9e3c655d601e9d49b02e7e601b4c5e8241e1116665734d95798c5ed7496f93fe5e3e9afcf33e9afc735749f961e2502a730b894bf2ec4c76c50583a7d1307126e2b00edb10f3f23136fb3c7710cf3fa00f490bd9f24fdda031acbedd3308e10a614108fdbdf6a04308e14f1832286188b13f1dba0d1d74f05858040b6eb2c9a55e200df802595c585e7241f2684fee68efa53df9d22dd2ad2ed40d7ad2b333f53aa4cba571d1d9b994846a3b0e4a462c4b863a69ccccccf237c6057c7400a84039aa3b2d1eacff344d4a293576232017ca6f8a5f6708773f8fbecdd1a333f4872c6d841a7ea821a7861c1d1d1f393a384c982cb1b2b1840d263b3bfd43ebfcd03b3836a4c0861d1b7640d045fa074da47fc03f45ba08f78087e0684cb425b455e7684b748ec6446302824c892cc92f4eb6ad92d1b2aecbb22ecb2ac30d940ebdb92bc877273d4218e1aefbf068d80d21a4b199f204c10b11223d18d2032612448e5d5d41a8cf25844639e1b4ac0c0c21e8053b004288074360804f083e10c4134cc842116620189859e805c8882322041d11f907a201e76cb78c31881cf2c7861e1b786cd8b12105db6d438fcf8e96d29233010968d162045f7c6f292d2965cf2c6316d239b6431ebdd33bedc94029f9b3f9ddd683c856467c39644eac61a7069d1a726af8a1869d1a76b29211dcdd10ca0bec0af9b2db1deba2a9b6635df0468f425c70078f1eade980307cd3ddbd0980a7b65b31badbd15ed43154bf058a2e23e849cf47a7718328a3dfcb4b11558623478e52fa063dc1798fdd02633e680c461fdd73d9c8bb6357b0f38eb5c426d1d1f19163c3874e1186a8dfe98950d95fc40c11139359dce591fb7044d9fed197ce7293fc0eb8bbd8f5ed6879f112cc62dd921faf5e46b904b3906eb94c472b32694f46cbe26d2e9540302ac3cecb33cf4937f01272a807a8142e3585450b191a19000000000314002028140c08c462c16038229663617d14800b9fa64c74461789410ec31442c400638c2102023030020019482a007a48212baebd1d298a040688076d766c6a9a37967d9a29083cc044f0fddcb070a7318c634c75ef87bcb1fd2afa0c04899b662b27973311caa7ff67e0b0a7127904252460819c37e1edd10d2f59e13cc3bd06cf73e2e04cea4d491f8167387311fb69d8c10fb3fdf16ad3b86f1be059cdffac8e245b909a47468025f53fea95860052389d1f2f2d9dda55003cdd65aa2dc582a79d173770b37e23d68449a73b8c1fe58d2e0590ec372e041c5f5dabb720619ea889fae988f66ea418ebe45afeba63dd865cf1e4f0fcbde6e4158371050ce787d19569ae58693e879f1cc5e0ca012c5c2b32fd8ef2c8d45c760397fcc7d69a21c6acfcae4dc6deb1c0ab5bb9dc48ef99248387d6f339662276042f0089411bd1fa7b4ea80494fcd8a84e911e4d16045cb03bc6f4eb20cbcfce915fed8fd65de393f5a609b817221b2f48698595a1a666284949e5ba2cccc73aaa39d37f16353fa61c3cc59e5cc381a37667773734fd1d795c30ac685e7822137d36bea984f0f4b81b5a00364a011e428f5db2f88d583659d9d70132715e59b0b858bcb5cf4f6442b6a652a61642e8d2ee5007997b7a8035d601d7d72ff503ae59f194f76f8fa9ffb23dfded11c29d395ed5fec8657d8212ffbca8f78904d03b4f5910d996c1aac451c6b5bb029aac8bb17177da48dea6f22f3f5ef917925af313341e1257fb636b9686165ea29e8d9dfc475e751505589244e57e53ab0d8ca77eec31e2fcf4c92285dfb6226c5d0106f90dcbe315f6c3c9d80317f53c051c375562733ce3d7cbe01162692b9c83a5d40b882da70f4a6d5330f155fd3418fc8fef5dedad77254c997f8687f90277b36c01ffe8113b0b2ceaea71e0a7833a81eef201aec2bf51d66530257e04fb7366840954697dc1b646c7f2668708fb15bf60e35e13f42dd6d6a42fa040fc9d014598e7cb4f245356fd8450b6bfe81af88c79e478a621beec3ac05811a33cda761f1327a267c826257540fced063d687c1404e1e550899cc47f8628f725f8145a89cdafdcbd9ad33c865d13f340eb1c7c9f61e10ed91160b3629210a63f2c2490f5b0acd6a0ef52def4ff609fb45677696f01bafdd17e554cf145cb4212fda6151cd2ae48ffe53c334c8eba7d663c33d698b84754de62d623de7aebb3ec6a47cc290f6db9ae5bc0889b8d5719ee40668c4389a854127e8d5bd2e8c11e123c41f451ac457e2b1531bd517e72383a88cb533c536ad12e8d37db23614578d0330d9fba500972a97e089ab94542675eda4a2978cfeb9bf8a88b0f91164e18d1319f51bcdc252e1178c3dc260970717b1418d902ed3d24cda5c41020465c0c153f54e8321361dab42e9bdbc42b000d5fdc2a172d9fb4cebe5bd7b543a1b10a4c550ba88f11d7aabaf18c7896460cb51a1f1888696452a760b493080a6bd69d2b001faa6ca43caba7011c907af6edabb570bf017850f834771ede786602a481e4a53a701f58388be2aa535eda0872629db291b4f6cb5f8b41650e06dfa962bc92086f1eabc76d8fbec0d194056c748482dcb0c719f7b15b3f300b2148768629f1067a0d7477388496856cd150d9ac0808e4d516f0833d42dde52a7143f720790302265de509649b41e24b95bc93b8a1acf94abf24d1f8a46d480128977102a371111cbbd6488e931099f8157fdd52e761b7bbe8b67573d726a2afe886419b59db99886ad7541d910976504b2bd563047fd10ee5c554ee9483aae7ef328ee2da13d75d598a267c6a5f88941eccd79bec65103923ed18610bc04e15b7955143f9c8908cdd1b243e09a8ff60ae12dad3595a6f7efe96bd0ead3ced2fa6e73adde701f875c1c1ab338c959a9b8e9457a4c95fe5496acabe69d03b1242b00b08231056cddf31c7f4af1e64ebbb746acc6ffa0ba851c02ccf36c2611cc9735254ff9714c47aa1ed5fbee5cfc9c714997d938c60d248912da3482a070801692e7fed0b9fa7d7fd3051897c9145594a66c518f05d90d1099ee4ec5d4b976743a5e29ff7ed7a9cd004600979e193ad9a68f10d4af4444c074d4984b6201db7826a1e827156cf6b9518dfe3a3b000ca51bbffb11ef06b1b90cf86cbd0331f5db19ccad6ebb9f13913f70422774e40b9ef2ea8e1a3f10cddea9218ae547b31309162562b246f0d1d57674523de98b6b63781ab9307bcc326d3d068ba712d62f2a239316dfa8dae9e00231d7d54256cb69611025132c804191883d56bae819a2a82e2a192019a1e897899e60835e370b9050e4ff47f8eac18538da83330910590ba25c68caa8d22a53dfe6deafc838f9632c6169aa31cbae678cb5c07d5a101dbd8f5c79610b8d02ac315d80f7ea8707a85a4578c06e5a682aca7536ce724b607a13bcf45891502223083aed0b1d3a64583707d0cd886325906c9043528c2d9d832ad4d6a91ac5e62cc74b3b08d7bf8218883c092cf401ec9ac3ac65b87eb53f2fe754415865ba064d95fe3afb4771d79fe9abd9017d09c8b84a9325ea6235c2d9f5c80b7f660f8ae660d64badfc7a61e0b726d52ede1391ae99b3acd21e99f38cc05a815f6c2315b4ba1ab6a8ddd27c5beb9d849e123f854a2dc1c9915f991c36a65ec4ed28f85fefe7b33b33c483b43650242415f1403e909aab9c55ee8d2f16ead7a197ee2236a98dfab1c7660f72711cba2f35e3d74527540c10e0cb0b5498873ec37b5a4726179a639b4d0f40fb77588284c34e0a9bd0bc517832083517618caee7e5f2f5bc60588fe40b2458af1dd2877e7ff978ffc073ce520b07e8902ef5143f1b44a59353ea8e0dfcf1a8509c5b9988a8cbab19cb3fea52528b63dacc5a4336718fb860c229b905bd41c63de3768402020f5577a9fd1e667a6bdbc58692c1d55ae7bcfeb6eb84563fd035e185b9e3e2bb9fa3c1347f589bd15f14be97446f5dc82b8cea60c9fbe4012a08166da58a319c2d8ff68ba667abcff015ad4b3a2079ad2aa78ee5c380cdc4a0b3b8f9055a0789553a664b6ca7e4d229dabb6bc06963f2c8a17c6074306638430cb163371b40390ea93800145a284075884d946760efed22a10e1f471ca74121da02e56fc39b2a33fda946b4152254451b500000722908cbdd062f4044d5ebb79adf1b24e08266b31ade37d1e8a0aa15bc8f91143022ab407887e479a38638d8657a114937fd25b17941c6d0aa8ed0aaa3dc5ebab33d1d773a8aca00d799bc9cdaa8b6aa2fbf2bd18cd9a299492bbc5839fbdb295690888e217b42623854eb72f20e5ee723984ad87fe07add8962923af42117b48f77df3d2780010e450aa742ec432747922204e1f1d2801e45e13dde41f8439995201ae3da082cd172c5b6896a4c060f68ea346a835d09941266204c9f4ddad1556e66b3263102d6abf308ac260009656c4dc056920458eae1847687d91b767618a40fd24e0ca9ba3331525e5efc3df9c9ad764dc1ee5b34fcdcbd3296753acc1d5b6a656e0cec3a46f9049f91fc0e58e54ff41954a38574b75a95240b44895cd1109c5d56acc15123fddf3dc05492cde3e3a0b5794561b5c2de2bc09c7caa320e7f5182d8a138f20f2950954e0419b921ae634729cb5c6c6661d96fe8161e8b669d54f72db733984bcd6dbbe3052fc81c899d69cd47a0a7e281fdeb6816b1bae5134f3e6116a217759c2b14759e680b0af533e60d2f770903d30ee1fe053b92215b1bed1adcf1119aa380470982a8025242a07a4658f45dfa1ed02755f9ea3a799e7278ccab5ab1e08611bc49a9d2a8cc5fc11664fc5c1aa171e1fe57af93792bfe5afec6a2649c3cdf2f4c43e0943d34b59b47ece2af27684aa50a3f4a065047413caf444c3e9cf2c43999f0c55abc98b16288482b2156c1095ea98a002c068c11f020de9de33529a55c4a95a71d65150983c28baaec9a4f43fa534e7c12c754950539335507d88155377024030e90caef2c16e484017c45cf7ffe60c0970902c93b27cab3742dc989b821ada105d94f6b4589168a547886ed1b3b0183c968314c786982e27d8d40c560218f4e69017dd3b3b53eeff3b8c0ddf5601ee19d29397d59db690d70cb1fd12a4147ea09c0e762d9a6f1a247ec34832d8d0d57dc2a624404f54140b868934f06262a479df60448db196b94297576755b31e69dad56800503cadf9f2384ed8bb5638693385fdac627d6f518ce31f04a9ab0dd24f170b8c02455558644c22262c86017d1326ec8bfd93e4a4780f151d2456152782615d6047abbf388a26071308dfe3ae355e6bf83057bae6a9bfe3cdf36baf44643c5b1c64ca91355718ee481c4abe7c40c32601430b13681c62cfe206358ee890969428b2297377e53a7b7394b29d730a23339a19a2d3a0102a3587d255bb19b927c883a8c72abe44c7cf2a638cfdc4d8872533a7ebd12746e44f2bb1208785d988f50e5c31925dd20ee1437b260d46b2775375758dcf1f88c15ea1fabdb11f7cce166a0e512edbb9b193bcba347d8849ec21bb1017ba858d179acd903416f2f6183b5c64f08c0db5dc5ca4eb7a60e5e6ec97efad562f52ce0e938ac0aeea5de36b00fa800d4be5a715571d2c2999237e886917ce8f7df814c643cb6ac237c7c52379cbfcffdfa0c03f9b4d23f601415b2ef1c269ae44e06d73b30680c761bc42da076779e5828905bd4d16e453e5eca8f05b58d73e1c645f5ebf323299c98a3d71c82752ee44542b78afff4a9413bf1ac4d0ba03e5899c52554e742b02fed3baa486792103705abde5e2c54a025fd5f4eb79f940c8553b9d0651fd35e1924226a8403451c8577447ada0e19441e82167e2ea14533c8131b34b267bef5745273dae9730d70d41fbcc6a2a801994fedb2ae72a746f334f49645b58e6a6647169aa5f422c8150321f8ba0df850c775ac9bc0f98d548793d6141a1a92ea3af8711f74a32c2032d6ae67e31c4f028ecfd084e93b43da0f2024e54f031699a686b83843a968195d212149acb867c5d15fe0f97e577336c0bdc34ec75b3f340a27034b763fa8cfc79f1cdec58dc6a8cb446dd6b1809a62dbeca3a9de243042ef7f415f66d6e491731091508213836cd0ebe5b3ba56015b17cdd129e8c8a96975bff8fabf8a72c8ddbfecf9421c324cb87c9db441afc2918b962e8282aefa03f6e0f1cb02efe34c4adf17a259e47a603edbe01c369081a3cb500fc730ac7ba455a0bd595bb190760a49cb6210185ed9212c2c847efd1d15d333a2ef9203318c9afb4a3fb8464e8e099b75785b38513ad6b88fc57c74cdf16d8f0d73f004a5de7855ba5105aac101dc7a00e9322c6198648d7b6b1ed0859a31c8d21ca2b1296d91ed557695e0dc0e5e95c2aafca8c3bb9eb228bc96743c79348a8c0c696934d7ad07c04f5986fc486422d16919fd778165639886cf8e273ee1d1cea3702cc6f6cf3f25c8a32bcf65934158c5cdd096d3a09ee3025055114bcc48fea6b9baf1e8a665c8c7a778f01bacbde08da5b7d97cf45d35fb87aeb7d20b28948ae3fcd0d00a0fa4ef55210e61a70904086417e1b6ea04f719f0dc47ad93e0749ad7c71e1714641b877795f50c1e43244a290bee8d782d6d008e6f48caa945953b42e14b246a70aa38a5d45df90e695e58f684c72733a8f3424c6a12c9d6c60b7975d9141c6c72401403993ccf6b386ed747a02e193efc2f8e7ea7afe7b1517518aad5c004b64e6d3609910c31058802ee9c8cff97648313de49a4dbe0cee2c278845f648862b50bd47a173cff776a6f4b99f2b39041b3215b036c04d3bc140dec0badaa26aa9d1cff812008f8aa119406bc77d9ba49abc44a8d52d39be89154efea6ac939858e6c87507c7c048d307f1063d0382e8432bf48bbdeca436cbc9865ee00041d7c74acfbb308ff9819040553218d913731f75cf1a0ac2353f39b2985a5b9188b8006b068c118c35ef935fe9c92aaee7b10365d625955c854620cbb5b5ecbd84a75cc25c073fe6cc7916d7a19c583884304eaee09790b5134612992d00c4aeb02d2e4b657d02158db82919c80b926dbeddd0e1b92188a9d0aba87c0975e7711ef80ff10c1047e90b01585b05831f7c302be295662a273ba7098d790677c9d23aec762f79c37e1ae035b13011d81cbb7bbe2b2f692e753b0b07ac67e8f8f85afd398f1d65f4b644c42b884619530e2afd9e26473ca690e54ec3cd105e98128f5bd6e0a20481563e03df0268e1e1245f50493a2140e54357c94c5cf6f2fdc4fe67f21ad53825582ab3a5b0f3a5048d72afb95fb2c466b3c5fd42baae2c3e1862d36df1fd484b7c5b7e9573039f21d6b8dac1e8cdfc480205bf8e01871eb49a26d5412476903b23d432600bfd5c07cfdc3d54df998763c0d2a89d83974f8c70f42393ac102e031b0749c9e9cf56f3a03ea7d166d3c446b636a0988156ee1f75959033742de7ce54fae2476f6e08a3aa3599b9bb80fac0711c41b35fce01ff5081a6c23669ea911cc838508710aa65267564a03245a66991e18431836d85e25551c01f43eb6321363df217ee7460bf017a6e3fbfa7e4f2d85e4a7767137b04c3b0d569aaf0a3179048879393d470d99854e38f365216208e23f0746d9ab2d9b169b6aba5a13913bfb433f3d92039343722b752641a059acda0b436fc55f4f728563d55caf0ed550d8b7a48664cdb172045867bcf142bd93f31adf714910f727f2f484a3468656509fdaff090d108bf0c0b6c7c489bd3b974e3b18ee9e79c3c21d7cab0e4ca4150628c95783b6de9565fa0a59b87b72fecd93b8af87063953e388ab442afa70dab381a4143e648a0f6c9b8d56dd0fc2ab44204a21683d7eb820b6b650bccfbf05f3bcbacb5f35823b56ff5b3081bcab36989237ce92cbd9722db7ab7d3bbb0b2f8197a9969f7ed39e952e83bc5d87ec747cb62d25e7bc0db645de40f58a99300108a387734ced8b7049b9d429bb661db2401db06285555bf06ba54f0852b395b974d120c24c1ae8dfffb962a0bd01361e446dcbb6e47c83f293e6ec8bbd9fcd1279e21601f161cc1819159d996dccd561fe94b4266bcb0e70aa2cd8e1055981c56e8be8cb75cbd94d79ec35b66da8fb680f8c082d58b0d4605b07af0aa7715dd9e88a504bfe0df08c05905b3aa70220a935429f4628462110103dc088cea2af98e1a5e67228405ae93c025940a04a4e06ea3ac8cc7af5e9fd543f4c5f18098a725b5b945e307488b951cc6956ca1079e400572a3c2aee1e14049145f3303d70fcd64bf570260eb15600851e4aadad63eb39433429d94ae9d744f00f06e065b55e890c73c2176b5545c6ee2375106fa017122031d615f310a5a18c678c8bf6dc3a23716df1dad507cce04f71f1acd331ec316666eb6d3434c9d137c29ad4c1884742c992501f887b6b8003d0bd9b0881cc860c5d245ef20ba1457c89641c245a1efd9e153f96c2f74ad34792db0e7a16bf14851f69623e7eb7f52e5b81d8e656ca84592a484c9363bf10a347d012874be87ee365d8fdd2c8ea565e070e25c16b5215c6c540dd1c603da88f7391b5e9f4110896bcf2e04a45ec3af189fc1cfb5e5b1a1cf61b675ff3e2035e57ea01dcba5f23a86017b173a582c55b00bc971c4f8c4325aacbcfc785e3bec3550991e14d4c6e6aa3b539539c40fb11170754ef39c9e77036011cd9e91fc515240d07d3305b4911c608b0dc752ad50a5df12e2c81ce8aea115b99c0a95bde090e52d0636e2a773d5a360e58e97baecda6eb190cd43025e2eb85c653a262b97b7783dcfabf257320e9beae1b7b417799738fe2b5c3522c3ca5696c45101e2ca57964b832a8fa4f2231aec5501b042b8b3db1857614f0092bbb50fa413fd5efdbfa86ec741dbe512d11ae688f7eecadece5d4514d8b68eec12cbe59a94d1b1e3387f2e080718797cf3e64cc08e8b04a2638eecf8ed8e113ca03c57ca9fea81e0432aacca51b3b16e49bdc1f335c66d02ed1781a4c67c7fe9933df160e9aacff16d2874668ef297c03dab960b8c0d01271ee32461cfb1dad289d884d72d237b2b222b91dbcc3d46df8881156eac561a19db16993b08212ef1aed8743fb7a48bfc8eb07051722cb37f156a444c4fb1720c32bf31b57214db786171f24c38c54af7dc46a92742a5a02be941f007dce851e8fd58a81dc05108abb7d88437b7a593573f04aaa01b26f48a8195b71145c8cac1b12ed63f4a785a9358749f6ea48cd8b3a06b1ef757a50ae88b956442e4933f843adc340120760138464c9f5f586012d55c5a8b4578e5de9184f766111af175f715d0572bcbbcd3477fc79504c59ef8069fa10fbf8b482cc2efaed13d8e69fdfe46294c37b25ab94fe07b4ccb0dc61eb8a30031121bc54ef7ec4e8af0de8a6015765ab857405fae2cf3421ffd1d5712147b3ab35096a9cb40ec8457ee8e14da1b96963ef4a394881eb5a2cc217f082c03b1fca063a184e0b47b6091f13e5b39c54ef7e63e5258cf4567255a2fe0fe120b271281d7e2d8b45a3baf2ac5c829aa838d08c412361d9d54175a881851159f987cd0523dbb8b9a92a3ad424580ac8e8cb07a7aaddf4264f973e68d27e1bdc4a8a5446bd944fb50f80b07d69bead9d7de45cbb8574a99333631f839926c65475286c0c96b2f1746c3efde6afbb88e46a758952b0231541d1baa020c011088ab8018550c141889324b99c83a0e8dd4051c7040e0a8ba56580b2599ee0858aa99c8130159fd0464fec66aa5122b9361a55ff98a810aad27021f480f3d624fdf9049ba4ff9c1280cbd13ec4731eeb1307001cb92652ddec4bf7131355047f9015c45275e201fbd3458ff91d2cd81c38de7f91c10c9e0166b6dd57f06421c8aca9c91a45a307968c4327a05dabeb324c9ccdcd2e359a5b94d34ba7ae730e7404d9e11a25911365b7578be1e8370e5e5c388a7978645e97285fb159ace702039e5df2870dc326ef48eb8dee54bcce93a621466768d7f190a2a0c70c47ff70deee02e5fb20218c65feb89784c4f394323ed63ba4af49d5bd60844e0325469028741a4a6db4d2258163470c14ba0bf1e004539a5d32aeccadc3032f8611fb058e0029633af08aa2bb38080066769459ec1ad06e390676444998e8052156ef42706c258684fef1b3932a4566cf1712f57780d83b3a1cb3b38e31c187f753043dfffae0455a262e26e081fd82f8133e7c3bc4e377177be6d2fcf8ca7e67f05017c0962a84915d4dc11e31ba769542e99a517b1a2587900357751a2fecf5caa201647e65be763f10bc131c812333feb7446265e7e9cef39431304df381fe74f440937c8f564c91fee3a5b9b995bc2680699f5d0d27ab67d7ff73a4d76ffb581f7065e35e06d4dd814401efe6d5d54b78fbcf5d8780fe1af6fbf03d414bd9f73a5491677859e8725ccf6a534cb49e96955971b713f88297b1acbded5bf0cc00225bafdb872d12fb9d3d585e7e2407b407365deeb2d5ef4cf4699c47ecc0ac0052f475c9185ae2c011d8bcea422625ff90f4da0d413c19f15745c4da91d22dc4585fc12a8be85cf7bcea66a394cb1b393ffbf1ca1b49ecd1a2080b68f841f96d83ad197108d6abde00112ec2b7da4e7a345367ec9cd00a5b7571dfbc8f85aa28e632b91c8a46278d8734e12fcd358909c6fa880990555c324b956413333441044c49e16a90ea822ab4be08fed51934fea4f5a2e037d70b3c6e6cbff56402cad7f48ac10aa0a7950a36442e8d692be06802a9f4b8fbb89d0366b3df6eb69a1670547cf1e5871206d3f3d1f221ec06f62a60d95dde142674f491680a27873409f3db3cc5d375c1d05147bbbaa0df3eb1dabad224ea5dc31bda2ce77e76ac541c5a77d13392d33a1bf49cc0e84c222df3bb6a3b9a1215607aae33b98240cda24eeb2ea584317f6fd5529c5ebe3986593c1562a741cb982ed78d8bd7f21c589f5fa8cc3e7a3651d0c9327c4c10419a5d77337fa9c876b9ea86989ffee3f22c8ca1a152b414cccc8216a007a5f707f37d6845e965ef150f2f4ebe7b9d5909f3f14f72bac60479e668124c6036b5ec8cce6f80daf2712a8b0435a94344f1ab10023921214301a405c80b1103b89e011c7a9029d35130d78b210214343ad108bc58825d6c93dea9b7253f15bef1d6b2ed093a6d0c4748d8a01b42b6ec923710612880957b3ea8f6859eac7b2dc51c88b0670c99a122debb2c12b41ac033689772a898959fa1dee9cc575b0e938e266ebc585cbb3486fcf12fef9bc5beaa1cdd2c8c91be6f2aad0689df150ea464aab916e7001d4f18e885de30caf045146e56a7a6895c130201b8ca066d16e44f8bf1ce0af8f205399577032eb13e9907659f27cf66a8d538a451978cdaadba97ed61d1389ce7dbfab5790e46066035812aceb5bf100283b071f38506e9a3ba815a55da57fd3057b1389fc8c1667549193f461a56b417ed37fdefcf858cccc44f8bf8fcd94d1acf34887bd27c5b7061a524d67b05a7a79660998beaa99cc8291396add313c11fef3397e1c9cb9cf443868175c01d0328bba395d6be6481d7381b0a004ec9f8e53c984a2775562a93899f9f73fda2c1d6e802934f02e9de82d1ec5eb011145fae819cf185ae78bcacf8a4524536c8db9bc8c08f3ce3a672de8941f9ef40589ac4fb0bb10fe437ca951cf528e03e5fd637d3e71fa7c29b9db0890921c450878bde2d2389d269de2daf5acb330284044622b30a1c89864e6b5f962a03b101f9713ff7d0b85ddb8e67b94a75ff9a253a308dad223bf1f54fa845e136b41f0313377a0ffb889a65f4b69241fb0600ce24cccc0ac9fbbff9694c3c0e1233dab4e99d4834b92dd85f284d77bf87e3a529d8b8bd16390ed2568f41aa83d291b9412c4acea82992cabf926bb7cc06c0f409bb6fe6abd666cd8366dd1df60bec54604d9c568ef2ce3a30629f94821b6497afe9e2b484a55ac433d2c9ad3e9be5416b98793f47ee8fd6472152f7a26304776c2c1405163311e6b4d2afc058e6d7134fbd892a811b7b91dbd7d585217254a6b0561606acd2a9a2c5ce4c8f093c8e2f8dbae2775b9df25fad201b5fa17eaf21d39bb6c683c81dd8317443c8f78755bd3ea93082b08c25af758607975bba8cbc161a8f9c51085192c99c75c1198447bc64635967cf60bbcd991e2d7efb729fa74a2d3acec7c2e67cd2ec6e4c317836d8737be177f5eb56a32dbed47591895fed56a36e686b36ea1e3464f32e9f343c7ac8a1e1939aa981f0c078aed48b0a7b566d2bf270eb774fe9d18b013f2c1c1673bb42fb05f93f05aba81746f53be78277ef0fe57a388d481e467baa56396fbb9f6132aa3cd86b32a0caabbfcb37401507f7ad41a6bd80263309fb85dc52120d5ac4de2fa2fd9d3d49a3f60b67487487c919a475bb338361953d0fc2680be7cbfec9b6a480868374d1c4bf1b6291002423d395214636748db582da68d725386542e4d4488e67d9c3418413662a77dd110854679da1708c7fe94395a95621bec3698349ba53c1738c07b88e5c0e35077a9dd626e471a3a586bbf35734ae33edfa68e4a34a8ca6fdc4b33d5f94ddbb4a5d8b85ed8fccd72da54c76f4b8601c5eced925024d0d240cf47cb07b138f5509c7b60d4394d742ea04396a78e2f3d622dbe6a1f997a9bb2bb2441157aec32e8dedc03f604ba6c80618309cf12651965399b4f4dbaa765ee1db2cd5b21fa61319d9b85c1e2c91e11287cfc907df8787be707287c0617adc81f85fcd05f4c0ac7b6b0e3f5cf8aec6fe31d60bcef0a951707a6643833c565754c4b6a083f5fedb78c427836b56f2b07d31090ca1b84f8b0e326c85dd26243bedd2f275448d2f6e01a800b97047d2851a34901ac08c6611fe8f08f738af7c2bbe1af585bdc70848ed3233f64465c91a15ffe07a3a3b4444f45c793d534f5fa4132056952bfe0a55f5a23eff803697e582850455bd5777cf2eb9d8f03a0ed4fccd8ce54fac85ff33a93ddffc80bf50339a17661327ddb401a60c3aa5968705cfd5859ddcbd4ce78b5f1cf452187542eb47029738473a4ce7b3dab0b37365231707ce18864a19838a193986c04214e3341a7bbe8a7bb33995117d69449c42a710872f7d83d0f32921ffbdf0d46a825c002338e0ed517b008392be32544534c2102370e736a125ac40c5efa33eefe9ed119e1288d04e52d68cd87df9408c8af828dfc48e5cb95ce4511868ee171b4f431480ccd0ea71b3d24e8e8d2f51008aa8a3ce5d2c6d27f7962d3d7c7b5e10bb0478e5c78fdc2b7ef5a973955b546aaf8b4f46112b5cf752a31f15e5ed18ee29078649203ae0a41781ea035ae5f99eeb34f8bac4b5cc00107c63cd87567e9e60f4955d8da4ff60d27cbacc8a39d4ed635ca691927791f3e7cf6ba143b9bdf9b664b78d3185915405cd3adb446482f19756267815d033a0ed24a284e69f0ba2acd65d3d7c9e756125ad8cb3215bfd77c88dacc8630548f96ed76161f95a8a516233195d1916b64ae03e4a21b440c087aaf15403ad6a6a7ae7d591352dcc8ff3fe8784a86ec18985f4970e5e91c06b6c9674c45167a8615352a3b246067cf7a2131a51b022cfa57ff78c0eedd32244d5fc2391d4d34c019ca92281602b61245e320f371981cb04a445508ae3b98e10e3dc3e414ca84cd3f8ccf75e89fc9d64ae4f8cf7ec12a8eaaaa661b37a257a6c3f53e4b9175990bec091902e0c900f0f084fec3eb22cf6166c79d70de1484615508f744f38f9cf1d0cc4910b3513bede5b2af429938a5d2e611ca53566db5ebdd32d426ee0be6fbd744a687cc746576e742e109dd876fe6fe16610071b41e93d7d789f592f47ccb07f851b929c0efb385130f0e9b88f95d0c8434119c04311022a0b77d2aabe59673c10ce5ea772c85b6e71e88ff42c82ad689c550c883e5bf4fc5a79a8cfc03e4b129e3fe39de1478e1a8e74b4ca00b8b91f7e62670408315f2980089cbf813a1e26b3a3fc1eac66fb581473b642f4c50e422e82219db6d65e141a93a93be47f81746bba360726beb943f678fa3a3727825272497c5245cc1a296cc99605cb8ac5a2271e3baddd2abff2640dd9686bd3322b55653d49faf5b553cfb1d630c101a7207cf17066a2a6eeca99fee944027869c81babdb98ab22415c9281b4e76c01ce1f0f10c8e2912f168a5093b16b82c09a715a3da17caba2f71ac9cac9c1825dc760e2a44295dbf8869132c8545888871633051c74c2206bee3be02ac913f647205316f8c553d8e692cb96131cb77f4781ab2935e5718ed942b08cbdc422eab8aaa3c5be8ea8b74ea72490bc56dd59d04d1334a410bc87e0030984c37fe0eb5df73a2dc8a8d7346868ce4e35dadc58992ae28304f2b08a2776e253dd6ab53e75c1b8d797f24839e460de64aa23c3dc866f87f720d3b7eebd3072ddfaefc9ef79253137365e7ba6b34b3adf58027d415cb244786f7e2203dbca4399832b71cc922c829bc9e108418c8f5612632ad4c7b3178988747662697dfbd550407b50f80f0725abc89a9c82ea37310e502589a39c1776742444088ec1603f8af2016720ec71b3be109f43cfbcb47c24c56cc0d2ffe12d9890360309612d1aede1f14e3f3ffd1bc7bbdb59975db04d8ae903970c04dfe54e729bc834339446d1fa971c838210705629023d53e6ba39b5e9b10f2043db60ab13634372933683b2d624ef50a6c9cd5a461e6ba2f491af944498a8377bd4d8d68de45fdc6c440d86045bb13c1731156b88bd5e19050e18acd819a85941f9bfe36ace3fa9938f624e46f3467a79c58dbbb426f96a7903f4c038aec1a2736f1ece995d6dd22ef6bb342fb50a20b426483f8899dd7bc4515b66f16160cd0fbc15e4a4c2920140ecdc56bd5bdfad7162976ca6498e4e0b58314fb89727350a9eb58df16504af153c50f69e4d8792d0c46ed1054c641acd3f4aeee9846c22be71858944c35607573bd0ca4553ddb929c2a215a446a3a2af8d14b7417f31b702d4d559af70ab2fb4681d7d9b4031ed4bb54b117ee00e02318034a4b15fcc362eb7c23e4f164d5f0701591ddf9ea1492d7ec10ece6724898a4dbdf3d3a5247f8c86a0544256adf004b23d6b185490ca17adf74258d9a6c2ba7cedfae1477681597a4ff56eed1cad3239e7f42ec885ffe787602b50910abd37e058dad679a609eba19aad7cffeac3540bd6d43aa14f22246484845ae2194433f32f77fd95074e4e8bed7ab4133930ed583278678cd067c7e4ea82800e563f10ab4a3f6c2284f5bfd2b87a23706689c45154ee69e6bc03e76a6565a3d2a5e43c59ebb8ea159db2b45ad4809b1d49e9788e6d4d73308063822172439941d28e9750fe396bdb73c2a3212d8a0ed64a024d4b4aaee7b37f563de973b726db934f7515785f077f6e9b5b6c38bc5cda516062ceca5b519353a00b03183e5854f67a5579598cb9ce4919045fced31b83b511cf5be30df4a7f737efe90db6ef3c9b2473628754961e3f47caedb509cc5ba2e8d523d5277324d774a5d614fc09716d251d8cdd65263382ada1a7709b3c883ab4cc0886eae0c3cb576c413edd61ca49d24432a9c961108e5e20c350517f6cbaeeec68db8300be26b245aa4ccb1a0e77161f330d84906c65160601917adbdd9708e69f09c562ab0807694b6181883c16a8df315e75ca1f0ce0f45693f2ba7d7eb6c425f362c0beca1539638852c87275a6e008237ca406737be43408ebb219248bda98271b17c3a367a08c9d4b3094100bcc2d42c630e2b1fdf0e827ad3da6ab2c6fbb022310447c5033886d8607f6f0587818d537c85a2554dbd9f9755787372f8992b2d5ea3c2dd609379b2200c199e9e31a415196a7d53782d02ce8ff95ee3bd8c0cfdb7ea53131b8815d1fb68ef80168f1719922ba21daf0e483ae3ca66fa3e45e5a04d2cca8cd930ec9286002baa0a2843a9f34adbcd55e1210aebb04bab555d54261209ca4e59c79521ae6eae2aa135dd0897188e1974bcfaca908d850d78826cb15aefd232f464320d27be05ec615ee7197ff03d78b44f2bb8db6267fd41e0316187067edc80c003c1eb8450eeb3d74119b851ae748cce148da1f99469b6797e7b3a695b34af1b16534c7269d1ce313b12e9fe0aab466dea365272306b6989959018618d2630e328d140ec4409395709096a35395026e5061f97b2c4c0ad82419b0a14ed9a136fc9b6f1010bc3433e760f6fdb41ed68b9de52efddc1780b6c514d6eea79d78afb96b63243d17467a454a1515fa70765d695178fcad8782a77fd191c990fa1bf0b181192eae6d3b44c16b3850999695e8399c5b4ca052a479d4275d0c8443f1963b7f15e5c90467a8cb0c1a65e006c3782f842ef6539de9dd87837a7d2660ea1dd985f5979512ae9b03ccef0ff16105039d1dbb1b7f6cf1b885daa818410852438375a8caf96abe328af8be6464dd95d24485526d0d244588f0ba0d783d3576a037ea395e06dc2ee3d842f96c77860a29122f91cebcaa17234c046d8c6841c5cc62e745b8a1750b5979cd959e29f922f201e651dcd6e0d8ffab061baaf7f2e3d4c366f37c39992bd6c2a9b8e2fd477db583edd74a6c01fbe888fd03420a73f5e9d51806191a43841c446929ac8936826567b79edc3362a656b5ccc7a2b51a8b89277809d351290da8c77d9eca2801e873b1d3b9c23bc9b2b60ebccc79c1ff7a8a9a9ba31c115e4c95fd828051fcd87ae40c59924c126cf5c3b21e0fd0ac53989ae0c8cac2d582952c5ba607d6f5904cdc6fd66c17d701ae67e9b150443a862a3a039a1acf73cae2a920970a6952e9e9241925c84de21db39eaecad49505d921a56ca9e9c3ec9497776579fb2539514ad769006dca739e2fdaa337a45c974b9725b31a7b3386ab76b22cb8261b416e7a506bef0a2aa27896e72526761295cacfbf0dfff9b0a448f6ac238938bd9a17946caad8b2ee4d31a0316e7faa11000f2592b5e37cc988ca51137d5800d69a2d11afed13399d6664954342af19a8490de7ebcdd7949a76c53b47acf8c40ca1769340f33f321eff66ab653b21732f4628468432b4989b7a1dac284cc9b2106d2c572c05bc1b89c641acb234598ae5265f74c5f39b339ff9328f13fa7be88f06d5d1bea31a71e6ca6a669a78c530db0f20a3e368c2e9c43fbc20e3c658ea7ac9dd061e892b35a094ad30d0ad51c0ae22019ec458c1f9981b8459bfacf1cf6f2afbbcb82fcfa52b24089b0a7d602f4e5d195631d9192ee885f36929b64eb1021c28394867e7b434fe5cd2c79b54973f4dbe02a01f1188146deefd0c62b0de54dc9a84513fec994066fcde72fa02e204163d8c3f9c462468113c1223bd7dc2e2368d0bfa1459ffd320b245a9285e5b06e3bcb7dd0deaab1cc509929c72d0594a67a604fd9f7df7980ae1bf25872675adf905286187e734be3fe825ac09fbabfd8a3ee6af9117b75011b5337c7285c58e1ba63c853fc42a4c942cd3af30b9100c92b5cccea9d1c1e15ab22bdf7e69e0940fa3ed1dcd7654e379451c9305eea21d049c720251bd2769211b10a09704082b43c479b82799786bbf6a315f704e8d03dc17433e48a72d15649e220206f99d3b50b6622c1112f56d880230b33e94fb174baf9c3628e302577aa1d392ea684616ba176519b163e6ddc982de9e5851130105d395e948b280541d2bb1f268649c23c3af48e41fe075d4a98c9e184794eaf7d7a92c0e638e39fc61679e566d6953572210310b021a30aa3cb9baf5349476787acda776002d41d01a17b9c02378ac8a530400040228ffe295054ae3bdb702f444f4a5122ce88a34606fbd60df9d111bf737ab27fd85e69f7844afd061b98e22429d740a015d0cc16fa7d332997f1b021f61244341493f6a78a6f3ae0a0f4224374afa127197384ccbe2e0169f719105b703edd542c2052f661e6775fee32fd71f2d1c413f8d9ad0d3524f27e1269ba75480ca3f81fbc95e5420668ff27491e3643165e0acdc8cb01cb6e954a4815370a7a86b9a8bfb6cb279b652e4565c71dc7f4477a3efe2fb5ab95b13281df8eb794d52763d5d8283a62c04967b4c3ccc2de1de9b1192c5869f77a2906d9cbf1c24dc836c73cce79202cd345922f4ecf4e9bbff928e785b02f0950809f573f68759527586c14aa5d43a838a1fa2b32c1e2f3de58ada0619c08df65460bbbbc10bdb58da1cfdc706606b8da8fb025c2ec4a2cc024a099f5e60462d5150ba34f5756ac2a1072c295b85030298caa60436692820e0622eea86bcc0edf7e9873e225008210f541161b8478c82eeba600dc21b74f33e195423c6454876d9a48a8cddf5a926b448c6a564ca8df883b121363e844a69117405d24acda3f1dbb728d2e5636ad8f657211bf22d32a7856e22d382326dd4243fe893c70c0c7bf85c118e9db6e20caa30a5d411b3acce7ef0fcc2b675526ce1b303d73514cdf692b3514f7b02be86ca1104c18215526dd1d120c92726a67fed4d4f079b25cef6e75f25445d176230273f3c19f50db15e56558ac7a10051a9762f32f21bc78b17b054b272b9715c93a0405d77e323154c05df72ec5b2c864373cfab83770311e18a411938a888d31a4b0e40b2a42c6c043010ca95f02e3d3f5ef14fd70986deec37eaae7ad196385598190ad11072ef55b598112ee0437b9a5ecb014c3044f13a8a8f289d0de8b010ed707738c7ed38d8d5f1a69a3bb6160ca54af3f6a4d61b49dee4270eba4386d62109e260737ff15cb250e1fa05741f6829a7429f5b9d67fa5f206db9d48c1c6fa6ab872306a30a2629a9f86f19c03ab62e666d7cf422c5052100a621c79521d50cee698fc68a3791750d488a329c85e8e33d48ee5a6cda3fd13c8becd78d00195c9ed2a1e0c27c57e0e32e0495502aedd3f561a06960b55860af6ddc0bdc0f9c648f0fb4cab98885ad9929f8501121046b71c98f69da61bff590ebc304c78fb91be79f65a1afad0f8379f8e67856d7956d0c9e27651ed01370238bb0945b0e044af3de24b8e110216c7a588357130407057f5b4ba6c19f1da44c174196182a5c9b2bd281e5235084cd2b076746d407d1b48ed021f2b5695b7e1dc34dd2a2f89b16bc1b89c1559106629fa50f602648930814a96fb9ba6821f48583bef8be8565731ee858331b676957a0baedd9151b92169fa180bea6f37068673c60a84fc63f8e706257a61a0d8ece78cf62c0e42860053969b89e1d5e70c3b601a37e1002ddad59c84c8ea418d1abc211a50761a0053d52483f0b2262ccf8e912f9cee30e2423ca460120b45741ed1d0a2c5318d3cd47dd02e66176b02722b813f480587da3ed9cae0873094a0ef196f3d96536054e20bb82cac47d08cce1d7fe4a852754f10d90e3d49ac778617a4eaff6e97bd56f7bc65a010a7a196a7ebc99e43065ef502f6f55c0beee094558f81e7f0489a5eb27cd5c8c089c3c0d1a21c17c821b30346dba1790c32ec6cc77f3afd29a1170dd1c6a81d62afbaa05a3934ed4833c77ba8168fed82c78f71a6addb409065d1a2491ed61973b34ad5979782359ecb7a1b9a8bf4a6075a5db3afbe301832da19e649a5a746f0c79bc0b1a7bf2c332ffab10b4684d5e79e46e8ea931f3e1bca1e2cc0e99766c91ce92477d058276418183d72f9fda731d5128325eae538b3eb577744e1b000b0ada227864aa42f1bdccb48b24e8374a828a52b3f8782470f8394cee86e020f68aca8063d0b4a4e2548c10dd34d3dc6158a9d90052fbb7adcf9e24c3b32f887a2b0c89853c8f3dd0a4113546bd3368f4dde21a36b282ee828a7b21d80d50aecb2a8cd025d1c600cceaeda74e64e1d6a81d8314012b985eec2f5514b83667ccb7b9eef01eda048d34ebeab0f18b70530ba857cc5e36b88720d645326aca9b74a380caab2e17445b445a53cdd737cde6aa0637337f16dfce2aa13f4283b08c71bccc06f7f74895b7ebc331676fb69ef273c5fb013fed1202a2014b25ad859d01500fbe569c5e792ef7ca809c242a18002f510ea85ed13e923065914235a738fa9c8cc5ffd892c528371a1c2285409f330b86a01532d17add8944ae22e9c0eae4e2f0b25b8681fc02634a3dcf0558db59f4d7168c23b6cc30baeed8676ea80284c3bbf060cbc7d1628df0f78a3fdb57c93d4be8927422156801755a039ca014154c6b5b562faad571c6f66f6f4674b545d78c5f048481a4068123b79f4b8522b752d528c3f3f1195a2128ee209c1e7f3c095cc40eb0678ac38b9f6d563ea7d6bbb78ee664814a9d008678a2f5dab7afec336767d93b20414842dc72b01457d8633201027a4447e518e7ded8679cdffa8a838ed874f6e29be815d15642e516977667196088a1aafb07fb3bc18f8440e3c7fa3762b284f4e380215240e3b295b57344ee88372438390f57b5841c5af464e4907d88bb95e45ee7c569425f33b4d6fd05ecc99c7b273d6ab12302170c64bb23fac02e163f808f3ca9611bfb6f148767852a7bdb3ada580d5a0e2d01f4157ad6a5c72780488b886be9fe2523e9e252ed3255a34d7ace96fe58f6f008f3bb1ce44e1e9aef51bc34538dbcd09109c1e31f49a133ebac5aac5f84679915078fd1cbbf32b819162f65c92dbc4fc8d08a3b2093513436d85932aa7d5f1001b3856ac5feead3c4b4b1c491ca03e8cbe2f1633b001cb1249e5bc086a49e0dca0cf31e6c406740461fc3298bb416562dfd99ae2f88902dc4279c84501d8391ddf8c5b5c3d1c35a1afca36977518948068fa5013a9c6c5c01404f1cc2813119e94f7d72bede6c2af1db9ca5a95885a1230e693d15082211a1b5e3724c50ed47a18a186586bc6b0c4c2f446df4bb5d89222753f58af4529d632a1312e063f4c581dff3e2d9e80469a8790a68831cb7a9fdb5feb6f4e92c7425648a5bd5d9e5763cfeb8a70188f069091e08ae06148e2f87736e5314be6753d1ceea123bd774f0d104caffef26c78e62bbd4898f17d1b17a67a3731be34f28dc91be0525e0abcc28ada7b69207a0010c72d7e4d0d8309237eb8075aca7bfc1934eaf0c038c7093489d58aff8e54c0ff4613d0efcc6ed840ba5d28bd99197a117bbe13228ccd4da619d7bf1b04665830da98a51a8f9388934918027965d725b8f9d8e0daa826eef5b59ddcd8d8a6cfcaeb76368a4ad149a2abcaf8cf82c5966421e2dc93bf381f45aa61666bb0c1a33bf563358fbd05e49f9c58bca3ca9a33599eb54d5177ad4b31030a76f8a056527dbafb4ffb7cf92b6db6beb3e432bb9e5d27aa465a53d7d01ac1afef58abee25a012c426e3731f7f30d9e8a4cf3b58cf0e59bcfe6281285aeffdf121b5a76d076bdda18d3168e8f918f9801835edf4d7d66412f197fbf44b541670bc23851a470de1282fa8dc69047a75c4d11d035fbc28860c26eca14daec9a5daf911ad122d58f59dcdebd39480469241b31fe9c6988829a731cdc9cd0b46439a5f21c26bb67168bf904958d276a544f4d97d7fe61d246acf2adc1350fa7ed595ec4bd82ed4dd03b7e091a9e70d20d9f79386c595401ca6c7500b8621c9a1601802a088932c1dc7d5a409438dc8a040df294aa908935becd243c2e77ecbb3c13855672250c1b985019d2221a1b1238398e9e3e6a45943c8708557b51a55a4fd6c9c02ec78ae113886073cb4242ce41b5f7d9a2ed5df3efd408c6a30861b20f77fdc542334a5f3a1ab97143ff65a07ce41c506d4e3bdc51554a764539175b6cc48212f8392723cb8c50a7d5393d60d407f577f50c8fbda43333f5c5199b154a81fffd12c18103620fa899fc9430d0bb714d6afad86d4227d924b58543ff6d23d1756222f642c9249ef9ae635f75f4934f54348fedf43bfd2814d1ca009efb6fc56c7cb0a24ba516701445ce8cf602615e5dce2e8230884c8628e14e2683e1e94d1396dc8a3d6acd5c61078f5cc68eb90ab743d4b7dec6871a3f83eee25e8477c5bd1b2a54b65487ec06ec15a8b92f1ff1e0069d240187b83c52d68adfb8012c5a36c21436fa57a1ecfef873c106cc5cee692f1e724619a743869861761849a4cbe262f9b7bcba633871ea1dbf502e6bc6abe470a3d923ca80d3920b611e7a2ca8262609b799533a656a96197dc6214f72d0913c3c9b3bab724a8d8b55d62d4e42c97c294c1c828d6c6509b1d6818ff601521eb64c6d15e82543d64d3481000b2d4e648d266dd987dd18094662903f9d0b31eba19789b166d8865d719a01a3d56c1f081152a8b451a120159dad72a8993195a06f512d407d30a6120b42ae319bbc2889c579cb8bcb15a87eba324291dde9f8a342d263b1e55efb11cc01fda38c10c84da45412e755be3426a318252d94633e347d6184ebf67b4d64d3043219b0bbd4cf5ec06ba0512ba12ec633589536936244f8693fd26b4a2274a1490a65205e16122b3241b6a63761f7c5e4eb1102cfb0d965910afbae07f8e75f808447d7b3c6c82edabe9890c850006d5ca9a53b271ad9b1a0ad579a4a2f2c206d29bc71b0469cfe7053a2a8eee5de045e20b67da0bb13b19331fe085af77aaaf554a1d6de0be575d8bdc3c2d8f1880e07fcf71bc110487d31d9390f60eb80ca65dcb9d254a61c5571ee6bbc8066f0a02b10aaaa4a1a28505cced2c519cfdfdbf81c6630fd107f118f55bd6902f0b5fad79ceb63e6ee3fd795db85cd3cf31b4d64bc7b32bad23c6b2855987503fe133cf373846ef85719738d3d1786516d51002d1b5e222ef1a44e7055499c8a0b6374477b474228b4215fb552d61fe60e0ffe8f01953d4e32d3beccd5f136e61e8a0a510c8fe831521f9d35562c13dd515b07898e27fcebb73cf5ac00a7054469d6d977a4e2aa24e1f64db28e21d63c8c6724733e4292e3ce35727c3d244782f4683ba3dabb51a25f9cf711b4f9f7c6372c1e1ac7bf4375057502c2d5b7b2cd80b02739bddb3dc8de6be0cc30611a2eb96dad4fea4ae86e1136e732215a9a1f7317667c17026976eec7d45e2b9ce3a9db9b2b1d2e951b5ca6217e584c8bc0fb97dfdada4276c48982c77a5d9d31f5c86ae5ce76e3ce19b84564e57d13d8acd6dbb82ccf2f8bba15c4371b6d0db93b6132172f6222cbefceacf7fbf1cdca3e161ae7c09bb76cd12dfe046ac5ad8960ae4d2584349ff36258f35f7929afb38b4cd193b17bee422021b7a2912cb97419a6368133bb34584db639906b65c025a853beded00050ff66df425755b813c8064977738f447e4fa247b094d853a81ce8ea6c9f7d3f10fbaec014fb1bfdbef2695578ddbdf7e6b5905e52f2b5363a0bddd55b8821968776fe65b3f33ce0bc1be0cb4cd5d39ba7f041550845c8ca1b2140d6fc741aa9283bc964ce9fa0126b85d05f294bf29a5769414fbad99554ae52f8d7b76f110851407996821f32acd977a175c5e66399a0a00e8c3fd8ff2b9e4e41e3d89190ff98dd7001513616446afd38591d1548baac85f6bb9462f4c3230448beab5d4099f879851940d55f3fe3376a5e3e0758e1f69939c20f5f15ac78d3f0bb2d3d21ec8665a774df06879842c033e47003f96442514115aa8003d6b1c492a42795d4a327fef01272ffa9c2fb4463f2742c27da3739d871047f15eb946fdf44800c97e4db550f94e69242a39ea504e90c60b5f18d10ecc47764a2d9480988c108c15d6c112ed531d77717ff5e3bf2b42029bd29ed349f134328c51a3a9f85f86b1734e069c06256c9c2961fd397a23f4ceb08f71dd411b6d889071b5ee2378a7ce58667040267d0ad0ad680f4b84f64d91dcc3ea4668d77d1285e8a5874b39428de9fc8aefa479b38d47c4d140c8d2243a28588c466d84360b4cde75aa0290500d18623cd4b63db19a5181a903e0f75153f80e0a100e9588b4564ab7e641a29548b803a1014ed81d94172ad32f4b7e070b88431361c846ecf37ad95b49789a08b9374ec133c703b91b7040efb45ff8b083f1720a001a3af74986123967f920efac567591b40b00abe0082e254f2975849825c54b839deb3ea92a548191ee2b1fa2183e8d9e139a961ff1abd1e7a5fd75cc6bdf74adcec2ef0ee0348da33c29cb303814f1bf8bb1cadd398152327aec2311f200789f922b814e7f89e3808f0a9ae0977f766a2cb3e507adde136ecae179439cb0f2fa6553e81bac4bd4620e75a7516d156855d72f16f25b7234342d5bf7c70ec1298c08dc867404f4f0b9014d7e0e2abc8128ad0333a616fc327d9a2e0df589fe2bd0d41d7bec11a0351588a627294c048bdf8f5aa64164d02e74cc3ddc21065b94be86275e5a84a59b34117092fe6b51c8a2b1e694b77f58604e4f0aaefd7e8a0256f42b58b80a68899f56ea0ccf037bef01a8047490a8778e1332ff008c28b5773bdd18196356478bff7e0d0a0e7a969d271c279a8142d812a234025bb9e0fd672808b71ad599358c0186a0474510794c57372d69dbccd2f14b4ca63540fffba5f04864d3299816e38e49dd9b106573f143e71a8c110ae31e4bf471bc660dad16c98f8e8fb115d79e179a36c843c0a773098a90f55c618a2f6b89610f5a7bb562810bc632618ea25c96756745b1c388c789871ad936a84b08a9790a476c14aa7a2a62ac2515089c65514a7c0e797ce2e17a533d0426d37f35d32488e0aab5525109fdb4af9a65f65a9a1b058deb54d8d97aa9133ef6266b89b49b47cb3a4b519913577c8d758ad2a2112686e8e063de8162928f23ce2f429d97bc2f9c4305aa48241a98d10d62c6f4ec33a25066c98fa1debab11528fdc4bd59d7e2c0fc571c57561cdc876bf4cb0b85fc29348f34ad1547ea853e5fe6ff294a42999cccdd294058e8fcc5b4626f049ed984b339daeacdb7fa2929e64b92341be61f84abc970a35630b660d2b0ec7431fc3399fafb93ce8e1338bcb47986e4959c00cbdfe094c0a3b24c867fdd98ae225141ff13a3c2029b3fe852b96d5661ef62acb8ddfb30a3f7c02e89e301aeba0876971d6f412d9cbeb07719f1b131ea26bea9b13eb1148bf8e11796977b6d9615f04e2057a67d50aed1d2d0cda511758b3acd6631ce3db71a8e1c11877ee3fbc6a16de5a470f7259cc265e7a632d826f0c32d5dbd719d01e65b30a92ed1443387549b68431eb5afe1dedde9a4820d50d445bb533e46fa4f1af8e7a78a851503a5de3939ab35417b294caf4cb8a290f8451a023a930bd5f3a0bc8bfcdeb77a5a32ce2b00068fee204f837055306b7059e09e7b17ebb2c1d6561dcd2c65e234b9ef0a9ffab511587cab35833dabc134c306bbf3b676e25b03fec55498c12bcf3f8c08809e8a2b7a9afb3bf1e420dc729852343ef5b428a96255e28ad32e612292f8920de19a3b80ebd23c24136eff084d013d280f3cca90488844bc48c1256a62a7850a9376c3b33ad49e7c1a74bcd7086fa45701e9c88558843f6552a4c24c474098586a5e824002e8c7d515b704a04c9f069fc29b2bfd9124a0de0f96c11c010a9b27d371b0a861caf4f59209a2e765157c87a7a16982e5b60a1ec1622435d62aa3d9c0c39308b8c619c49c60cd4d9618f2a7c19c5a91a4bca9824f10fe8a44b6a6e539c5c74a08756d8c9594d10227bbb56fe4d642fa15f0081b44be923d2fbaa1f10950a2d7946b2bc59d7d0b457e9c50d154c3479eda2997428681892883e1fb45cb73786a6f0de0028ab8f3e91d83ff1f0b6418754df4283a73f64c791974ae682239af236fc1f0a58900d38ef4428bc9f69da33fe91fe52433cadf7fe7b59b927e12296c623125968a06b7b0fcb313c8e72e142ab4e583692bdeacaf997b1259823c05ace671bfb0b12d9401d90b9656353b1d692910723a026e5cb71e104ef2a9058f61b2a92f38e3f7024092632bd21245532b2aabc57f3d54dcb4db90a5d051d74ddf4e6cbcd6622ce203c66b29606baa42f5b93279d58fb0bfcd83443857181df8692f04b1616512935d96a3bc1e87c6d19d1681d8f5fa2144b9851b340d262484be2cd20ed802493d466e94de2b8daec9887acb5dc79dd496b5a73a38e4191d6f2172ba4b81c0331ed6dffdbd07d3977f772473bd9378cf243837ac57048cf9096ec945df4c121a6587fd3ea906f3f0a8126dd236ea25a47bc79d313c2a159cf65d08cc0142317e689ac0b0c3a3aab6c6d3791253a0fe3ec3de62807b0c3b9533551d0f62da04ffa2c1a83b5e1b7614688af210f488df65aa5f40f28167994bd80e74d26364d58f982fa564f744f0ce0431b24c48602c710063c426066e6ff08ddd2f4b85cfa1e2666a9eac73a28fbe53b098735e66bfaa03f65c09db40ae0e07685b4cf97b778ce99a281596f8e6dba3622d351b111ea5f4ce27dca212aede81e64a927ed14bccb14b72f4921721794830854c31edb74c479f292e4d07d9246a3a4853ab353dc26f21a6fb26e1f7740cf735a3229b5258b29949ca855ce69fa2747cacd87c0bc1df7d3f5db19e942a5562d31e03ba9704f4fa22c37f28195f5c2a9f1886c49bf89adef3d77afbd39e42752ddac9eea3670ae309d4b9d69f72a4d121bc4ed56725a55c382c3254a7428211cc32c79b0bdb6ff207c2074ef741edd053c972c0c9cb1f390ec9113338273480944314bd41285a0ca8b25c1c8c96b8e7e5c422f74742902e074bca802000ebb46b73e755e1bfe5c88ae5f919a525594305ba611e1986dfcff83209beea4b0c99f0d9a813b190a10cf134f0c94fe5cf6294aa37c54932862211b457a22af6a0c28f4cd8f7e66a24138132c91523ec6a01c742de76722ad1273a06c50082fbe5bee1a69faf37106eade008ebd8f967e82c98ddcbb2b4354589a1693c6340c296227ee89ff419bba5677bd8992e658299023896262796d57a38fe7cb301ba34a7cd6c294bbd92161974e6034292265546a221419d4d7214259c03228ba51b5cadeeb580c4a9da12445b478d229964072c5cc118dc93ce0b96e22978a87697448245d5ca693fc8e76c42848f03a68457cb83f1b2634e3fd1594a4fa13b9ebb5a0db64543af9604117d6b11629488200c56a953b5ded2a1f70c463792de4ef240fa8504c1e945181aec15c6e4a37b9939408df5d5aad614bd7a9a330a8cf6802e56f04a1cda1e07674fa08a3d80e5a93f1b5a0b055943fb1b45cb61b00f94cb0d92b951375171cad6f44116fd4e9e1bc79373a693a107c5568f225351d3ae2c6c8fcce76203d430d58787c55adfd9cdbbdd2016ead83d8059c60ee24f3fc48d13ad04120408c75c2e8c62911f33696e95d6147cc11e9ccb7c262a149dd6f6cb829e7b9e54b9ae72b32233f9da4b79c23a8fb9e00c502a84caaaa44a1e1fe73fed2ee3ba3205ccef88d6807af3a968505ad157565915aa86b33c98817a316bdcb7c4ba3bf1bf31f8ea5f65c3834071b20939946b9ed9cf0de40b01a03b9cf38796e0e39c01d4d031db0dff29f147ad5cf5eb9972d84c74993af115a4439ed328a21957dfc1270f9cff81e934e1c4b42a21ea22e240f9b4819df9ffa75793e887025c3338698051815ddb5dba4de4a6168ef7bfc18bcc4073da38469527a2f6e563b6546d596351279197bc6c9d60073a8f19256f3fffe22c99387ffb22c6310c8e2c496e02707dc6e6389d437901a6499a46430e0c852fe384ca4c1fe9d3a974b79cd1242c62803a4de29098cac142c7517645e8f1db31c325e5c7054db63473313e90c1419ca6b5c29a7523c69133196129cf687093c08a11f12d8ae3b86129ea793ab98b4f72dcc770180e8f5738fcb15dd3919d10869a3c817f0d1be97e8bce8a15711bf041d46c8c41c64a164faa18e09ffe239e0e6db236e24ed21b6dd6ec23ecc5ae15ec11780c88eb97af5423e61e82a9f334dd21be0518898aba4c149a44f02a5601feaec687e503e9f6e5926692c6d95fbcacd314818b4c7fd4f29236f6c2a8ccabf1925696678c263ec31a0d0046b9cb6986c9a2be7af0c9d792c9622b833e7b06144bed494e206f997de8d4b6f2c9b278c8496b59bec472e4ee1d8fe05d76554d7921fc60df510f3c19eccd5ea60c7725e81c6be6b437638ae10f8e5e508a3f1757c5385d4b4b399476343c6262d8af6a67f111331395900e5404473a6b1e839c8b02c3082830d4864db4cf720707927b294b467007a700b16c158e90c034a5cfeec80c1ca62ce8b2d8468cec8f498d1d45a04bdc76d1f6c056f863fcaa96a94188bdc62cf4dacf78e7afcb5ba463c1351360d3d447ff79f7fdb53deb772df5d39087b9f02086833e6f9b161789d83a09b2f58f6dd6c896b478004c2ac4616027c836ad9237bb8ebc27f087d7f60139ee22e0049a5bd0e0850cd396384a5095a78c8c4468e066d2d2f2aba46065f5c0fe57dd6c2df2fe7d8bf18d9f413d16be8891303ed5d6bf21f53398c690c4cca43be61b941121291276b0571553e6897cf6c367d344ec9b6d114be83318f6af717172e6a19d918076a6977b7e52cbbc36e42d6d6150375f7803e8748864fe5797295dd2baf80ddd683608a9008b62e3c0f005d8df474b6c7e9b38fd6dbed73270ee05484b0700d063150567da1d2e65d6d500d66330ba97e4708de4746ce26ec1629053cf60143bb6629b2dc5d6fa6d1d59f2e8d196b97897502db6c92fef7c356cc348cc3f7635a2225bb2844d0eb335363bdf4b8e43c3ba6ca33c764fd8baa97ce780063be0d912edd66ef66d5ad584aaf2f330723895a6b5bbb8274f6c9032b4a2bb6e92af168284f654c67af4663e4a4f8f037fe1d231c9af3adf5c7ccc38161a4391eb34461e6492cb401135258d96793386fd0b4f9cfc8b038b9044b687f5ec29069353bf03cbfe3e965339481be28666b2bc0f1f6a794d4b7efed205c6eba61988028e2630be8c1b47a9997b99f52c867b8bbd471f7ed685dfed9ccda4d743c1c7f276cab694820035483356ad10a3d30d7e5c5d05d0f097887466141e679726cd51b3d1363a7e4b7627ae9db390582204d9854a020f60ea9f92e1b3d3203f4115760b8bfddf9c9a3d1b8c3dbb398a862f7f191c89013661173ba28fa805e3c5282a4ad508c1027b283025336a456a6582ca27fead4d63ed78efb809b972f8c3929b0d8d928170e037cf96f7a28f5d0d0d50d0a03008af6e7138164bb01e03eebef0e88a24ac7088eafc81cd8d529021d85bb3c40a119061c06776f7a3072ff36085a4d227ed4a09a4034c8ec9040d9ef9869364a1a54391b83feb0d2ae89cc36ea85f27b5612b4dac231e40dffbed2ccacbaa182636e0acab38563a1a1ae9b73d95a77d3a86e5c6a853aa92398c0f9c58c4934f2470428de57af931c0d4f25c89118f92e65ccdc7fe203df8acd96d0126260ea9324aeb2a81623ee1de05757446f49afce116a84768729025549e407f4491867c900c058cce43b034f288cefc5ec2c078b586d82cfc1316b5cebca8b8d51096ab4f80fc224d8220031d2c30777e824a8e4c831cc6794556ec2afe70d42212151a602853b4b62d0d8d370074859f8041a318583f1d4488422dd9184b13e6d07bf41683de539ed1ac7e446c998114421a495d031ce72d55bc68ab8e3e0557ec82b9c8d70285df473053bd63dff9a405181bc74f2b4e7f4739d486e3465842fa1f4666db8ce2600845dc9fbd4251e6c3c2087d262f73c99a8435dd306d56b1d504ea493881d215cca8158122712876193be9da5ec9e3ec5919c436100bae9be1f27b5888e3a30c300e090f2c446dbfd62728de800bd0aeff6522ebef5445f83ff016dcb738d7bf38a1f976708a33af9f1e601abbba8a5e197ef1c2d5c29030ef811ed004c5eb4f5aa9c9091db9a231feb3d27fc03e72c6dc824426012df16898da00191a339f59d6f42e296070b42981126dc8dda9ca01f532815be5680f336f5f23e24bffddd56c5c1d52877aad718fd4a15ebf16a48a1ca3fb2364c50ce871c99a081155ecd7218476db59d8437231e7af6b38809b9eb971beeee256755019a67d7bec1a8f842d3fa92baad68a2aa39c52c95284c9e771bed39a31d6e2821182224d3291dfd8a1c8811ebaeb5d86c00a5f648d48dc9a4f90f045b321a274cfa75a56b44d83802a9a8d49ca83c045eb3e6f139ecf481ce3d7edc1b88f44cb22ec4ef8506611f72e619c1ea6a10f85e5c611283b42c67e2774905e02ee9016d37182efba99263feb29107f9147f654124da69ad62d5dbd874999aabc0b885948d6f93b71ac7340a19603028752b1f8d60616a1dc798359cb61047806951449ceccc869e495ec3fa23aefe8d9412c9fb00af67d5458b604e25449f9f697a31e8ece65befbfe0a048f158f72feac8b1bdfd45d74f3ae110694519bae286d49362470618a13de2402dac19750d0fa9d50a5d84655afa78d3f19645350c3a46e494f6fc132d2ab48aa1effa4a69097a7b93a523c1a2d31ed76c9ff15f4842d09bd829d082e3d14128469de2a641fe353e82656210a8a50c846d2adcf2afb58e09be11199ad89a5f87c990f1b78e5aa72fc01fe7106c005c40a37c55a089d71fdca0af99ae0845e95c50c090e7177ff9748ba29f2dd0901d453934cb8fc632c98763499b5f54dc1318f44f8c58fb4e0ccb6f8b759ef0db6dbd8848be138e4e4935ea5d356e8148db95b9c3c2dbefbc62153d8dca68cbabaded9abfbd07d7a4518eeb1766fafc527eb56f74f5bb054d339b43cb369875eb1d7201194729abbad291e390a24a26208c9fcf1971060db280f477cb7ac11f1085494e16b7d21ab72a75a52e431a38e994c9aa6e8ee05d572f58f3cc4b430d0951c08dcefa019660029c82df543fd6a217e523450c8cc87de72568f97c2fc5b20cab3a65273b1338eebd14c4ceaf7ca24554d04f235eb1b7053ce4a665089df57e753dbb5ec5110095b246aa0b351d5c14bd11d9e2306abed048c19d84459f4264cbcfad7c464348b32841f827e668a9d5622877a4ac43aa2e853b150873af478e9c8a183203a9e63a03908053685ccc5b03477b7262c887097d453afe8b086c5a78976b438a0b36d3e50d9e8892af16827826034e5113a413bfaafa8929602db5ba4178a01fa140a484fd7bad6b308baae319081b94079bed3a3a4290b89ba6df8510281440ece450001ed6e276b514e22ca95d24c5289aac7dfd6a4de4a4ad88e661d4b77437ccc056c07d1128884fcb1287d246632929b0bfbe0c99d1087c610b6d03057213d397e8532b3c054ddf23d921a311c706feda94109228aea7fcfce3fe458a905081080e412b206ab2663a8b604ce4331d6459813a23adb91b4e9ca1c0caea681bd2526fa7fe00e575b4a9d42a35f5ea02070db5a08389d7d69d8d4ea67b25b36cd4b5ad5404eadd242257c226dd37e66a2d9c1a4bdd672a81fcb15ab247abfd55e465ef2ca5de91a45ebf2c8460397dd34af443f5b2051b80f50ab2facf308e763de7c8b1af0527133b8746419712c79440c2b38fffe6c95a311b7a401fd9593e21aa32eb9eecce25c3bb4dc62148193f9f134f982a797ff30b0b10032ec5975c20eb6cb4be968a30a12e4b69a997504e34636f7b079e5b7663ed0419afb7a74ddfb667bead49b5ec2253bab8a0d1720fd10aee69efbf3bf73aebb0549d3fa5173a4632161d4f51afc61908a5ba8b79f5ad71109b32dbbba030caf9bc539f30e618216c744b0765243ba0e1f11d701b1316f3dcbf9672e29a1d339d5e7411d36e7e82a7a8b7a480adcdd719b4ea2a0e936d2c83f557aa0cc8dcc972e60cf9048dc103ec104830af3428908e7a3ead2e5a2108754952f9376a9f44de8e31a318013758d1d01fcd5dde5912eb69aedd2448f87c2162189951341f0862ae43a11158309c7b0fa391ba04e0045cfcd2bc457d21891dc494ea62798ca7d16293149129d9c47de5995c51f465ab1cec0b692688e91ec19211996eb49562dc43c958a1e3a0fcbfd2c3242b9aa6d3f9851c694ad3b842da7eefe150637b7e740001e4078d933dde0184d99ad0a5e6231d36c18e70adfda373108dc9bb44d8d65e51562f03434728f941dcb138ad718e50b022236181e327f6230a8c8b9e346bf2531e01a1bf0591406ca91d9e280cd792f0a782600996318fcb4dd29db0500a3ddc4a224bd52881fcc77bf63539d45a2c499ead0d7f609d6e214b1313ece49ccc64ec5f060244cd40f0e4dd8795b6cd559878e514272a52cfd150f64445b63150f73f63039e4b0cfe62f489fa788b1747c3ae66ae9ad9c80e5264b36a42d4eafc353b9d297d5d47a31921ff37ba43b17ad46808f235901c0f439278c413bd5728f2922260530aaefc572d5066c61ec038fa883509829def1b93fac663f97ff6cbde7e7952e8cf1abaad3ddd61a74e054d45c53c626f86313a19283181661696425ebab594bc6da6b2c1e3c45b194544f40836b2b1589077ed0b8e8598513d55eacc978c4fead821af1878df9071f6333cc31b433496980efbfe43de881d08a040156566fc5edde73e9f21db7577914e9ce4dbacfd77b4d25b2531f3a98436fcfd2b7e737e6d229d1e2bb81776181b8cb0a71fbd8494793b45274296a8b69de715579e174c70104fd453c60fdd2aadf8d6d67a2038a1978d9425bd4bcc51d663d5b42a7a955e0c382e179e87d99cfa1d9d423cc7d44b1de69de2ef53ec2892e096041bbb41c557517d3f8c330f0177d0d06a1b04da72d4ef6903b2730d496072417330b7b7a4bbc067221d82d0cb41ffe21c4e40034ca5c376215509a4c4c93a8aef2873e4161a78f886a2a7cc3d560d390110e9eff757c2a9144531f2c14858f0bdae9170b2cbf48f43c78937c7bc8d55d279b417a917edd55ae11bcab0257862107ce95026f03526a7432a628de82f0d2971b414a4f6a69f95b6100088ef19a300abcce4403f49204d056a25283742dc39a1a0a5df3c6395c574261c4faf39644a29e7a895b062f84b1852d3052d9e0f519ab52fac53e87016fb85bae97a50d4a36d99f50caff29f171671bc595d0c32a6b6dc06f19c265cf77bde75498f8a1749419ba2cf688009f6f7f06bb7f235d1d12055bd6e389997c9dc46c230f85dd63386e3de37550804106757962d1e4e02e10d3df4e4bf1c90c71f1677e49739d08aa6b7e70e014bd0423dfdf4280691e1c08b804239cda0365628c3e10b01d88994d79f0efacdd973a94a931ac1c6262a41c8ec85a6e041e73b2ea9c5b0c6eff8531e8e98f3febe920dfe4f3b84bb41eb3a05ea61ecb1943909c2a7d5ed382cf9dff28f0e2945655c0779ecf5d8d5a702949f741dc460b18e98d0adf8f5e8865857fd63489e520bc36ee974895a81bd897397063140317ad62b40ffa94995ee724353249eee0552fa792f4589ac87fa9f3be612ea565102a929f4aae5aba15bf0de62a56ad112670e8261c79c9a279942fd7ed1beb1c7d5c29163a2568dbd864f44657d3ab3b6319ec21701ac73743af377a51ea949027d13b353b9c95305cb8412fb889db121d59eae5eae9169cbf2cf715a813b89f51efb7373cc0169423d9bb953bdc95c84fdc578cfb708f0239b17b19f5787b83076c593992bd5871c75db9fcc44dc59cc582293c7a3e5432089c4651275791b1679dd96d12a05aae4b7dcf7065d48df10df0302bc30fc2a6f77de9266aec77ed25f01ae52353cf777a53ca95c921d56b553bbc95e327b095e1e3d147a209007d19d63b56e1ae3f9a5e96de92557f7b6d164d6c7f26bdef6ee88057268754ef2aedf8568a9f708742ea0dc207ef5d3addbb66772d0bb953506665ba7dd4ab2c764abb6272a47aa96ae7b7720d7ed6d99d65380983f74ddb0fdbdd97a733e4700d59cc58d0488969baa4471ea62152797ddc5124c87f92b359d3463589d000eaf337301e4a54abcb9a1ef245eee16b3de16abbe5612fcd7bb1d103610d0a6e00c09191b3f7f081f4b3503b4a10c18411baf2f43e9c3a435a15a04a50a07f2a518b9a5c7478ac783f64f0b140813e4049d560e9a3f66fd7421823421c738801a06d8e87c34c42a36685b810d9b4ebd462b8750255db893b8e780bf8a721028b503021fa94df4cd9a6022fc8132643bc3c8580cfe293e6013e94de66a7d355944deeaac44d4255475529ed00451682d8644df58bb60e77b24c3ea1b41ee4ed920b08ce308dd6ed33343e2506ec55652def5f707bf2484bf9f4fa7437badb0b93d15c7c71b9430b47a92660132227b85861687c0951e8b54fdf52c71d935222c2a908ac78c9491d094547274536e387eb6d956274030655b37e1df4922c4827a93b2f767eaefcf80942ed9bf0e370b8b4a8d4812e974ed4aafd25c4f93c24aa89ffd6f9b2ef2db327a0b8e20afc2608cd45f65e27978d30bfc3bb02beed2762670a9c57c0a4e482bc78355fa1d39af5cb5ba0afa16200d7ceb3d7e082ecab7a55ead3eaa7b9d1955e99f8a8cadd10cace33bc853879ce5975440cb4da14ff8d7763c9502525031b34dcb43c2db6680dcda68e13c2c87254bf651f6ae17d5bad701701c3b50e0fea6c51b70f6e671939b102c37a5be786c9acb65380de3bd5788ba532588857fe20343d892d0d50128908cae5f8bf7b4f182cb0ec12b5665307d87c4a41b72131ab32cd499184f25826e8606425c05f2dbc071d4daddcd605f151adb3bbab5492a2bfb49ba89f01923bfa91cd4a33c8220255b462fddcef5a26889ab096ffb47082d98a9916a794c42fb4eb27e20ccf60a9c2f11d5b683c4638373b85e9d49080f56ee33b19ae9863871deb3af279b406d5720ca58d43f4776a2b6a9f5d6d49d2a08b9317975461a3ebe5737b54d202357c0a3ec28a26a45d508a02af9f625582b41c4e777793294991cfc0db8c7f0e37a55541df55ccdc0a25023f98085153f510450bba413c755d5cff490aca70eb2247a824d20d93957a5440298069ed0e04ea773ad2464110298ebaee282e9e6c62ecd43f4d0bda8115b7e2b4c478a7f10f52915d88752542778e17df3388a7bb2335afa28d6528eb0be1efa17a2b7e02ab41d13a0e304b4756379c9c187b4aa6093a0a9cd520f9c44b6d1d81a4607b788f46a499ade470950271ded6794cf05bbcf9b5acbae2c0e04f14d568d0eb1c2d3e9895bdd414b4c358ff249b04e43bb416d04bca3bc4c0f106177bf8ec482a3091c94e7577dec4f6e0ad9e7b02ed428d8f084eb2ca6107b9212d4c3d0c96b5ebdc7157637f0318b10a32351b05a94333484f23984ea01ed7805d6dbaae79b902b4d898e3fc187e0fbb8903559a424880ecd691627420c95a8f6ef2700109b44b1e6c4195b97607bfedba2ce5692f0349e51aab944fab5f73a3ab57f1a9feced5a38b1b988c5b7da594a7d75775d3b95e32f99429186f17be9e12cee4a245b156d7df0e03974caeea40a2e24bcff550aaf3f630a8df97b3e7dbdd73b60883157b15dcda713e3513c1643c2dd8d4db252d116a073f31629642d365d3d1b96c2fc1251c7ebe29f4cc178613b8af54f6ed46af60988776c1a079ca93b5c0d6ab45426dcd2d5c079ae57139528981f2e93a8ad49dffdd42f70a4d9191a837047c4331200d5a94168f0fc2cc48deb767e7eb142d02d59b9eaeb9284606e44711876ea6445297c6a7b1f7b7f5991f07ceb00d8466d8fe9209705028dd188366068cd626fa262fb4225a48ef0c29b36003a90103dc79870b70db0e1da1dfb18dd28f1260b1c5d26a5ef74a5e38170bba57caba97d04a56d43bd3ed09226b0fc4b94e180c00b9d0d0ac5c24ba8189724d2d16268c12834b9151270c23bceff764f08a892a43ff8aa1ea2291a19e7b4f5d71e7b70f16c0724c2b41f20386c10a861ca1e51186f3331ab65070097be77129850e58013ece2796a16675642e0782e36a49ca47cc38b63ecd28eb591e22562ae0aa8923934957b60a864ac1af9284834c81e7998b67a94613f4080c98c324503a0f524f7bbf4ab1523d738550ddbbfb3879fb09e99737b12da66aac634b7649a12d625e3444b54cbd8189effae305177a70b66dc7954d4e01c487589efda9d1afc62427cc9093239ae5a2f3671733ca0b58c62ace70a61556d7052e5e3601fcb8140039ccf73cdf384d807f76aeac6c975a02af0a1c41cac149e87955dc8fc1b119c798d14ed2a9a967bbc7b399a1f3d81c210f7625c51f32fd08963c852985e2bee66cc86e1769901fff51a9120f7a4a133795533ae3b49ce6cfec06355f3e304f31335bc785eb45972a143108e93e3e7c97902208559a6b696123def48ac9c2ad7b9f90152dd8dbd0c10acc147e0867b6102f5e0a42a01210eaa66483cdb9118be064affe51fed08576bfda1dec7d3b59352b4faf04dec798b1619f6622d64ba37fa669c13046274dfd110066e0f8fc8e1198c83dec00f5e0431670aa3017ee7437a8e156dd8b6fe0a0e7700334b8d122744a80649bf73f74b5fd2f0023c55b1152600b9712a49801098a383bee07df31892bc7bdc86a628f3472befc76438f04cb6ec2f9733caef02798e408af270bd58fd7bfb5a254d6dae2b97250fa5cf457d28449c6a3a9356a4638e2bb31e1079a9f39120ae398cdf3c4e0f2c4fe42ca645a313940008de1e734a93320d3615d53948dc24c1040153b075ff4e5622147364ca1518fc0354c120b5244c7806b2daa9068a3f017ae1484a76f72dbf8fd44eb67b93ceec64220ae9ac18c2863321557d7a37cf5dc869c0a3751e0efdeebcb104508d0e1b9a7a8b50f21d559664632e7e27655d28a785dd64373ea6f8a4fea6dab261a002f4f1105a754f32bed5d2a80447822e122d3aa7c7280c5e3beda1301dec3cdcfb784c9e2ea61db4bfbe2bf2599590b123c2378f603c4d3553212326a77dc094432595d432669e0ca3d36a3cbb8a9904ea1da1a760b8c4fc009404c0214ae957f3705ee078975b43f705e2ab81cc54eecce1174fab67a43669aff6b84b38049e77a0327bb27d01fd0f586240ea6a78a08f5cbe48398aaac20d8dfee45be9d5a24427bf229c29c8386bdc1af2062f1f90e8c7aa1077dbb275b0b00fc3216f2e660ab97058daeeba42ebc047df7d605a1cfdc0ecafb8f89aa366f61a7e115a25d42ccbc1177b25f6cc62e7d87b2b6c8ad0805ea508e9c931e1b6037c64da89b7c63d8877939e76aff452f58d59a9234ec641a657a65bc8d8c16fca7cf790640d7cf60797c6db026778f86b8e5c7c29f0e18fa27ac8b93a3e97129e28fff14a08aaef945d99e1cf05315203a71150355ff1d6358b5c0420a1d4e398132b594c7ace54f122e8eb02c972298cd0c57990cac3195362c7ebb6de99f98350d5915003affb73f3e947f9585dacecb6bac27d4707d6e195794cd6b94b9d5b472c61088a93ef94ec77ebacf2a8970c16be1480dfe2c735c1510c9779eaffc03d3ea31237075a7d2a753edcbc56883b2e5083baf7cad93d8f3d427035ef10036c06fa37e82af268b749a573c12e96786d9cdd26f1d729c9ad6c74d111993e6d9cf9119d79fc551e2d6aedd36cf12a9eed2cebb2862049050cfba16f06729fe64e904e55b91c78525e25a402680c581bed6c8fb7475122a4c2b71dae7af6856f5e6324463edc3096e64821d4ceb69fdb3b4a2879358c31998c3a7396799ad8e98fe98346f8b9a2b20219552c82b29507a621a0c9cc6682331fe34971377001a93c89767f3521a1a776b6cd6c542caa27547b18d208d27e6b008c25935bfa594fd5de4626edbbd02cf07da4a8e94e470202682b29a8859f67087ab141a961a1805f74cd181feb06caae13d6f1f22beada373f71103d92ec6235b99ccb1959dac38d2f72c4c21034a7f127e55302015a70359c548ce020a26868f21b33c2ae8e2f37073f0f28053fa7b916662cef57d936fa2f75cefe698a38eee61b64036fac37d1d1c123e2cf9b0e736ddbebede8ba887b26426ad957befbdf796724b999294019d07ab07f207446ccb2ddc767a346dace1269c7ba6659ac8cafd2d11eefd334abf7bdadd691938df8235a4d251530649643088a31453e8c1db27f38d4f8929c5cddfa83e86f598bffd8ef95ba8049659be0cd2d88604902b34ecf6828b8cfb1e7c1fffc88fcb833be79c330be1996560c61dc1d9db9a2e4d8bca7e205de4912fd1bf3f753469ea1802081df4adb5b57ef7f5bdc73230db1a4c7f5239a90b70f0e49e0bed13375b9c45940b33c74d6e72dc05b8e7384e62eebd0b828bd386bae99b8df78a4423bc71a006661360ed2d986960eb71d807719c85530ab982bd05c2ab0d1c6528a1497ac3c6d401178aef6d09e05d1016b4b387fcec77c8cf4259df294600ef7643cda9370737df3943b8eb94b812e9a297bc6f0fd4d1a4d65eba24e2db6fdbf63b22de4214ee816cffdccfe736c902b9e25fc13c678f669372a61464f0dc42510f6e16459d510aee928dd2454a996eac943d27bb171217c2e1842b9fbb3b73b5ddcddd3d461f72a4028e3fb05a6b8dd187302381b5cfc08a61188661189601e148e09c09a194d25a6badb5d6f93192b209dcddfb632465da0a58e418e2eeeeeededd2d848643fae99c73cef7f843f69e448c05c8de95c0397b2d8cd1874c7bda43e21e166bd97f12d80f1152830966f081146db8820e5a39a810257ac08514d40108457eb0041672b8bb8743b0100a6d84b3774a29a5943e133872d01f9284fd15b0c8314408566badb5d66702478efa4392d07260a40836980113a680ca918415125ba93b0cd1e1d1021ea0c8719d24adb5d65a6beb1c72310cc3300c7b2670e4c042214394c841c321b149eeeeeefe4ce0c8e1e19057c285d40e41b1c524ac540d8c69470912d569e6c72727c991540c0ccfce0a09cde9f5a393836dd0d87a7a4467e4cb9c2447523386676785c469fcf4fad1c9b139e2e2c1594994a459f28a17e6caf0c2f89c358a4b65387dba674362d1bb522f0973ce18e78c535a1c6badcd329a373cea910a8fa681e9cb3007f118b5084e9caa553b712c9d52500ca37335a5a0383d9234629b596e82d37b2216b1884def9998a701c3dce569c0bcc77b30fa14ec3935a99de1c2dc179a179a971bbc9c5e6ef042f342033365646c4ae7a947b162f344270d289d335366d280d2799a270a36c5c12645b06d31b26c7793c1b6c96ed92e7bc61ad1c627756a14232adb9b358a1bc1ac2271a882c9f6e40be1587ebc8163ffc49d93c0b2a57be195c2feffd8a5fc6447a74bcbe6c116b9387dce3944a592ad8f74c52660709402c7299858e1edbbc295dd0e8b65285d47b8b285f3c4999b54860a3217d325bbe3a4492b8c74e50a83fbed8efb0eee1ee99aa174f5a84d57c62c5dd6470e5000010a206cefdbfb1655b6205cf95eb92dfbc1a5efdf6384bdb95ab75a7fd46d9ffe7c95aad5a752a268dba847600924d6421a3fdc433b5cec57f306dc4bee25f7720bc28d2da349f8baf4ef0f6e7e8ca178285ed863847ffbefc26c2da6853fb226293dcafeb17f95d126bfb1a75d11f239dc20ca269f1be1ed7bdb421a3f3a9cb3433bdc7015c5167fb8f3ad754277bf9493d62cac6fc129bfd69fa0fc3a7b8747dde69c2f259513a4730795dedd966b3a279d2efb892dfe703f0f2986d322edb3f7df621682b1302b41b3cc86f63390fe665d06d3491f63d167306bff6b9de0f44f6916da94aae0194631432030bc70f3dd42cd323991ec504ee99b6f0d2b9b49ebcbd3b7a36b4384e357a389a934c956471b2c3e8f429fdfd4364ea26f23e6b0087364c51548a542a17e7c7a44df5922d03b06f5b028167a98ada35c24b23d2a57c54ae9c0c274891cd71a3c89b3505e922a0c95a11c05eac2eee99ff691f1e16361b6e06761be2f2374344412fdd00d160ce9f0e112983ecbb506362891b4dbdf51ee2854cf286957f7b44fc5695606bef488ba2b087f1018d2d12c3a7a54b3a4a2910e9c5b3fbf0011ea6059f1313e469430af08638f627cdbf488a2842fc2186d5ae5a876d4136e8e318a5c1743f88acf36503e8f547c7e2cf392b36cac08b30d94308f5e4598dfe441365d0c9bb669128511b25c29619de91175222c168b556badb566ef38a3ef2e47f9c4b42186484cb35807652a50422702ba0ad0653cef41ee3de6de67ee72944f1b3c86baaba7c5d3f71f7ff91253b3889efe846916164f7fc634cb8aa7ef2c2fb5cb49f4513e5b159fafb39ca65972db9cdc5d4609acb91c25cc5645982f287461fa5b067eee8a35e87faceb22cc51a76dfaa691344eb34493cfe86f2dc0ec4560c6029c2b405f314c857ba602cc4270160223f6d0d7cf422050adb53ee86b05fd76c41d04657f725239d0ce48ff829fbb307dcf51d93930fc1ef9c4167cd17145b3e2399540691fb28092c11f8e269bfccd76f7edebee750ad7dd52ec2769ba1013b7bbc72cd698ff5961096fe77ce9419852caef97352b149f4f9f624f89a5e8042968e164041d2ca9c21b72f4df88252574b005229c0107397560031672740aa6c3959f399987ad65e21c638c51babb77cb76d313e8a044f2e420c1f102848ed034429281c70e56e0ae3542af66dbe8ad12270b54c4e166ceae607fd73ed464c6e19b44e808fb7504310f79c8031e720a96b665780487b1b004b3c709b4f0032da0300d81c8ef1df2fb6db8600bf5c8bf3fce25cc60cb9a3033296ef4b66c75b2459539bf875ccf96f02f68af246ca7b592c48088bbbf368ac41e1b618ab343e2192d32defb69ea524da5664c6acaa4e66949b33c1da24b65b1ecf08a2da1922ed598189e9e9f56b3805a882eb5a6860b3ab12586aa4b98cbb572b15c3937cd923284e852618860135b60bcf73ed3258cc5721a560deb08f65ebcf7de82e882f1f0f80bb0f74e24b6a0f874094ba55e2937a57a9a458486e882e1e0a8017bdfaed8e2e23d2c464789d7e209d105aba981024e6c6191ea1275b96c5caad07bdf46a20b06d33bc0de372ab6ac78ef1ba64b94c56a22ac9ef154dc21ba501e9e3c2c892da09d2ed154ca95f249bd9434cb4917a20bc5c1f9422bb69820e9128d89c18949a283bdefbd9745882eb446aed09a2360efe54d6cb95d9a2e9744b9529e062303ecbd844174a13041ba34594ea2cf5ac2d306ec7d08a2cbe491ef3d12cdb2bdf747c4164fb9bcffd1a59972127d9c2960ef794497892357e8479c9718ef697469c61031446ca9effda859ec7bb907ec7d6ceb4d18ec7d073a9e115d668d4a6c99efbd6dcf7b195d268c5ca1efbdf72cba20bc151ed556fde921ac2d0084b53523ac2d95f007d397714ff7fb5a59a95a2b0bd307851e586bfd5aeb498c2e05ab2e0cab2630b8171886a560187651361186a57030fdcf85d6028bc16ab018111683c5603598bec7220bb95c2157e7c26030fd6e8555c1e2f15821168b3e07aa27299c542a457f33c13e1a436b4434c60b694c0da6af5daa4d1785f9c2e99aaee9a230987e76ba13e79a64b278582c160fa6bf65927a30987a30299c542a85832967bd7bcd989a1933636a30de2638df66a63ac3dcf5f4c0f5d0f120e1cd763c94d3400c37d8b9b8dbd3dd18e2ca3cf56949f7d39521d6e8c26e27d6a8c1cdaec464edbd31dd4ec7d3a3ced524fa9e09dfdbed5c57d22cd6799aa5bddbd1b8eb79d999fab2332dec37f39dba1480ae87c7c5819246bbcb4bf6e5242a5db625a225f427d86fc1ae87837979898b59225db825e20a7d8ac2f45ff6655f987e8c2d9c0a620dfa79c303a6af71b706777efe56d7adfd565eea76be15a6499a25773b55a759328769e39ad32c60b7d3f17489f4f4bb9ecea7fb6996d6408a5de5a56ec7493ad2e5ca15fa9cc949f4efdd5161ea3ad83993e9e4917eeb3cd638c2b64bbb35609f3b17a6da631718c771bf71e07497db2f316d01801e4c93e86fa0673279a9db69127d6b2f6782b9b907242fa6596c4b8f967afe1367a0d4e911fd0080b2d524fa34e8934011f82aa31e511b3edd8e97426fbb1d97a102ce04d3253f3967e23813a6ef27f750973a9e6e070bbb6e07d3e7be1c9526811076b814b870a4028e532c41042fa1045f8c75cf75cf79cf758f615fbbe7ea63dd632e44d99c2f56133dc634159d1013cfe985dbe4c25711be6e96387c5d20412406b2c140692162c1424528347b645f7c520ee11c2e7de7ba1e1fc6f0f6b1b1ecba8e761ce528108e29685f701c98e5d310a9a47073cee97a3931e9b44eb374ad56125bbcf7df3c50e20683ff495704f75d17a2785ec7837b2fecbe0b6ff4487ed7853892344bae9dd32c40be59cdc2753d645744f7d8733cea635ce51ee37ebb3e5f857d81e7cfd8627cde7758addc7fef799d8feeb9eeb98a799cd77ddcf61c07dad92cdc37eee1f1f8646c2fa300dbd938a3a0b1e7d8034339dc78efddbeeb703f1db1c5e4fd0f105b4ede7f3b0147f0ddff4cea63f53f10fb13f0b188bf0a02a98ffd05b7ae47f7d86b1d0feeb1904b410b4735e038c5123d780300179b05858b35e4479c3b2c517838ce42b09558e2f91bb76919c751af6dd6de176614e01a62e0c4e8742f0bd9bc65f4e979dc775c16e11717ce2ff9081bf8ca9437aca6302dc1d83fc6344da3b4eb8ef448ce1912f5911ed9f42895879bfba687f092b52cd68ec7d8f74db3683f5d646f7febba202c27bbc85263dc64ad75d3aa8652b510a5d6af32d411c626718f71cf7540b0a73745a88f655a86d53e354d93b0bec9f5b59bd8228b105bb68a64d3be763e28fd397fa33f8930a247fe138440773b1adbf0e4babc52d85232151a986cc956ab0bd81656edadcd52c5321ff4279f6dc92422e03e105996ddecb3a8657aa60e37cb9a9a1418adcd9c37a91e51dabf3d10de92e22c5b4128be01e2e8118db45b40b427db7288887bd606e9b4130c42b1164e1ac8156bedb6cd39ed9c73ced93394eb99fad5e16e8fad4b77faee4878c96d787db0e833a238c61ab30698965a26b60cb2a88b60fa99bf344b16799fefd7324ea274f412858b237ce911fdc250ba42b9f358d29d1e5116787eec78b0c092272a69b5eeccd66a1916383e210f3238c7556e99ed056f37f046036f2a1bd7b6592a2732800f383ec9863005432dbbad4f4da24f9f65c3c66854c3fcbf83e90a04400c41577858826fbc4c93cf23049cbc833dd32390a5a18c4ccbf4c8040f57723922982de28e23196bc8186b7c41c898b9b347db941d3de7b6e05a2ec62cc33ed3424a372588689ad530ac33c982ccdacce3671f23a516a434528c0644e4caef9f617c15bab36dddf1a898ebbaad13826bb55c87e9d3c73e82148bdff1311c638c94d6ec25d831d4625d8ccfad28c562c46a7d396717f199207412a16307970433e3c0619ba7776220c16945ee3187b5b1456e6efd3bb024f2c7283770afc73fe2399942f1e09a4c6eea063dc6184494419a45be778c72740412b1e5c7471af6ef0b0a679584a5d3fab2703d7eb62ef296740e369894528294e39134d6e046d1f44c8fbc0932fe4ee4244d3877daacc0bf0b5e17ea7c785df7bdf79f17765dce0b50e22e47870a3d3c4aace079a16c0c0335535115555133291cc7711cc7755df7dde7893beea38f8ee3bcefdeebc22c39ee484adbb40f9ad5ab563510ba97ccebf59241d9b66ddbb68de3b8e7b8eda4f3c16d5bf7dc775bb86d78039b480fe99aa6e9996e82e34299924324272787880b4dd3344dd3b66dd34c3a1f9ba66d9af69aa6f1b80025d6785c63c0f24df2257d6419b64dee60a998542a15d322cbb22ccb324dd3b4ec763eb42cd3b2ecb32c5b499cad70a250a29384099a16b6001bbb30c160261891b5d65a6bb32cfb2cb35fe723b3565a2bb1953412256da0b249c922b1a5995aad966662516badb5566bed5b5bbdce87add586b5be24aeaf257190339208cc1c58808d45364b6c6c6c9660ff6d058661188661b5d6af15eb3a1f15c3ea5b89612be215b07c9f1c176b270bb586aaec255d36945c7191c855504a29a514c3b0c730ca753e304a2b166649a90d89a98d1b9ec4b5d58a10b2f10ac7de39114b361ef0793ee180cf138a067c9e45f8f127dfef748825237c7c9e4b30e0f35c41119f270c8868901662499a7a7c76302ce0b39b81c7675fc3109ffd07f71d422cc9d48ecf8e04213e7b1382f8ec51d0d126dfef2d882599a380cf3e831c9fdd09fcd99f00a23d34c4927c25e073bb01019f9b0e07f8ec4bbcfcf784586a94cbe7a642cbe7d682013e37187034f7fd6d24969a55fadc3e60f9dc43f8e17323e146777788a5f629c0e71e4280cfdd021f3ef70c6c7c6e9ad8a27dbfec422cad7c966318c06789861a347a1b7d963aa4cf920a01f82c9f2080cf320adc2f8b104bbe7292ab481f48233d7c9636c0fd1206f126b6d8ef4cc6674924fc2c87809fe31dfe738c03ee0f412c4d1927794ae7d885189fe315a6ea88d8827da37c8e38f9002d3eff80bb06ee908acf2d709bcc88a5b9e3a4d842bb0ba2ed03c26c1d10e6db80f047986318e13ec26c1910e65b44984544c45626d323cc760161be3cc22cca64b0ff10a69497ac6b4798ad1061be41a45cd85f47986360bb5240986d8e305f9cb3c2fe40843906b6a70484d92220ccf700f2e5ff225f282f551f9730db96305f038459e483fd71a0585eaaac52982d4b98ef0f2cff1b3e5eaaa80284d91220ccd787b0a2b0bf8d30c7c0d8cb49fe2b61b60308f3ad717a617f1a618e9183a59ce42f8030db0084f992c22ccac1fea395ed21ccf60220cc7746e8afe22e192f61a6a9f2129511e618a230cc225006bbffcbc49830e68be99f3277bc446d5c537989c638c91f25cc31442ec22cba2dc27c6db0bf68ee581661b6774598af8ad03f14e618386b271b6a63c2a6da6cb654121c63886e2814e69902818d4fc0c6dbcd648490ca50d969c2985857d64466b22feb73721266dfc1f2ef4a0cad1c1692cf9eec11ac8d4d59d4f513968d3d1ffb021b634daf1fcc3ac34e2bc7f3c2dc398d37ada298a0b2491dd95eb50655a6c65413d736a70dae9d164f9682c24a65a3c95586370c336139c04e988ca4a9ad39f8b876ac0d737c61d998da5881b552619a2ad6700d09ad1e5c01158593d604ec7f736023d6684cc1c61b0a97b2e9c0467b74d950b2bbcb20717f773e6868bb7b475302f6bf38b8fd1b4a53a132c5f259d8ab0e620d194ddc3c4ae144a38bc2bea19c14abc5715722d6e7448a65495335c95d6202e248fe86f2920222897edea0c053c0f2e9e7189c9493de90d1c4d554988732310db310ae03521699a2c80d9c70c209279c70c209279c70c28922458a14a1a1a1a1a1a1a1a1a1a1a1a12952a4489122457a54a0045fdc7fadbdff5cace1b147f65d2492dddfbf92305c52e4caec5e410e9636b42fb970e58e2943939461c0f36974914ae4cafcd8425ffef7ba2842582cc31ca4e2969d0f19da1ea1f0b02e5251327fca904a2ca6e15f1a5c7f6a9a2253f78dddd4638d2913c3b09601836e3a298d72a782618b2af9cbc1b27d52acda4cdbb8cefbe6ea041452b18285a8850b9494173062e00de45c4a39ea3ebe0d1a230e02467449002f4a727a51a9742a8ef16fb8ca6974716fc915aa6a49976f656f0bdb2bb91491184d66485cf95628ae094cff5bd556a55f957489c60cee050072351caa47a626d1efcba5ec91d6bcf900f0df37e3bfadd56ab53e95ffb6d7eb93f1dfa652a9545ff8dfa6a3f381ff6da7d3e9fbfebfede6e68bf19ff68afd7a7d30fedb66be17ff69ad56abf5a5fca7fdfc7c28ff692a954af5b9f84fd3d1f95afca79dbeeffb44ff6937371f8bffb2d7ebf5fa56fca7cd7c9f8affb256abd5fa42ff653f3f1fe8bf4ca552a9be93ff321db942753e93ffb2d3f79dbeefe5f765379f6db55aad9fcffe7cf7bf47a259b2fffe88d8b2a954aaef7f74c9aa9c44753eabf39dbe8f7dfaece9ebfef3ff6ebed7f7fa5edfccf79abdf9befafa3e3bf37d33ba203e00fc64ced49a6183fba9b45ead56eb85e98332bc7053e96caa4da583e93fd8fd76da6eb6d376da4e316270305edbccebf5da66307d182fb694d64fabd5fac1f45fa0682e3495a6f3a9542a1d4c3fa54526d24edacda79d34ede469a71b4c1f85855d91bdb4992f7b69d9eba5cd60fa2e54d450d6ca7eb29696b55a3f987e0b107692a9329d4c95a93255a683e98b4c6c7029ce354976ca6eb25376ca4ed90da6bf5df07b29fabe2fcc9e8c4ceba7d56afd60fa17dc3e63b16d9bcaea5895555995d5c1f437d0bf5be1f6646fecc99eecc9de60faee6f5578bd5e5b7285febd9ee26a7a14c3c170a6588323525b3498ce542f60fadf1c6eb62ffbb24bba1480e76076d474a9cef83c8f00e0f3bce9e1f34482bd9fa86619bdf7d389e8527f543ecf1c60ef274d0cee83eb47f7c1f5b71fb8cd418a35700412db1779098b69527d6bef15351633c23260eea87ed6f5a8ef6109aafd89ad633e38ca20810f78a082279ef079c27bf7defdb3977207fbf777777faf9b6df469136902816d9968826f0f6eee15ee699f66d17e4a9793e6d7ee453c57899b4ca1e98823a6fc0e9b488fb29b56acd8429d76148af0f728fde6e1ef51a7d3c652af226b35a50b193217887c3965d83331fb114fe23571b3ff00e90f2279fc95e70ad37eb98c2bfbc9f5f8c416cf0db1e5bbff7dcf81f97aab4753eb7c642fb3975c2bebde71256e826952cbb4c4cd6e8a3fdf61ba64f2f3b7087a0af4234d8aa9ee76782b0bb39d6669e73ec68b5ac898acb3dfe1d8e49b879a84bdf25270810491d85fce13bae166ff89b4c72872ac24ddc3a34487c3e91109a63cd223154fd2a3e9a958637ecc05e2730291dfa698ece77b0b620be7bd1772e1ed7cf44b8efef4684af7d097d4dcf9f3fda7595072af46af66419172266916ae8b44d2fc1d5820e0f94d043c3fa5043c1fa77bf0ec562267124ca45924ce7ee2cc5f22c133cf5e329f03a54d9fbc245710491fa385282666abedea55b39c349f6a60f7f42867bffd7c4fb90f620bf71348f6f6b3dbe0117cdb6756cae76496851125fb1ea1fc3cc2aa9e283cb08c8935e6f7348b16d2e8d1ca4b9eb21e7aea6df6edef9f3d65c33c9adfb34e1b63b19d45f43b11440041e1e14010a1230537c7154d22a7e971b0a948d9616422be4c9044b3340ec6feb157a1618a02fbcdff630b1831ecb3013086612c24825070c65008faf3354d888944901f18f611d4b470f6e8069e375c368d54fb89b570ce39e78cd6647e9ca289199ce3ab8a3096048661d8a7685aa6fda68159c8e5ce97788888a7b4c3118e4892fc2d823b403d718c428022c08181983c08c710b83fd6c79ec6dffef3b8eebe83d14acebf41937cb3283fdefe82b907bcc51c5018121d8103fb0f414da0026913f2a7dea1108aeda5cdbd1ba8bdbc607c8e048d4720c48437b07f034920c1ac82dda482fb3521261cc4e6feef1dcc1d1ea182e37baf81283d2e8e7fbb07a2a5aa5972cc4142ff02d8ebb20deb2f041f69961c22a247f4a5b5f78efcf3881b42a5479446a10b29a9c249307d89240a2d1d4c25112d25c53523bfc82a6e74b1f443e352b270230d537a44a5cd4d8fe84f21e2fb7b388598618c1b4abf1ce1fe56f9e125162f6211c6488abfc25a1561288c9bb4cd4d0e671cd87e7ec1f6e38d1ed96ef6c836d60581552a63edcad9d04d11e5514a69e6e88a18616badb5962601cef8710a264e38c71f110cf52822d1a3f82b10ca67ce39e79c65983ee79c734e77b731e79c73fa9c3ee77cc39d73ce39e72c831be8901b23861cc1f42fd06096d35a2662701ee12998a03fa2bd69f124bac052be8c9d8c35a48cb44584c3a57984e94f1acd3222a25976dc0c28140a8542a15028140a8542a1502823468c183162c4881123468c183162c48811d47cd9cd19a58c2499e330d82267c2aef2a1d083407f72f226267fef7fdf7bde77dd73dc6fdb6bda67d95bfb15fb68d3e0da8e4bae7c8cd6255d3219b9e2a22b635ddb078a24f928584e16316631d850994c4b948c74897245e68ba038922c549e10637644288131c94d01f3d256cd8204fb6f359aaa59e214303ed85f43e21aceec66cfac89251b1ff83c8f78e0f3bce94087be3315073ecf1ca87cff34c592111bf83c6334f079ca64a041df19120cb4925892a60b7c761e0b7cf69e0af4c977b6a2c067e742a88a259932e2b3af26f0d959126893ef0c27029f9d08602cc91c08788d03fa7e67ac067cf617bc4f2cc9d70f3731a0274b52c4e756438c24b1d428225ac9023acbe1f1b9a10023154bcd1aa2554274f79de904f1b977f0e2fb1b2696da47c7e726827b264773df590b7f967948d989253f01217d10d0dbb792037c965f4041124bbe7a91495aa46a47aeb8015c7cbf3cc592bb70c814cbcb1f9a27c80d1f3ec736b8642eb9e22dde8a6cc49dfe1f353ec729b8643d72c53f009f23ce0b0d1a95c537e9730f78f4f94577c66777c97ce4ca0a4d25fa80073aa0922eda0d07541bd040986f06620b8974d16c3080e402260b982a605a4917ed080556464c4002291ce9a2a52280038107382087255db49a06b07ef8604012e9a2a18a484204aa076a01a81ce9a2d1f0c8b1f6b24438d3912edae9a44301395ad2459bc12d201280804c8974d164e48aff0194ec48178d885ce1912e5a8c5cf17f59b9ac5a5606d8c15162f981277349170d46ae643dd24533c915ff1b0520808c0f2ed18a6a00357a321fe9922d912b3fd2257bc9157f1a3601d821f9e097ffb6a16ea4cbdcd950fe9b4a28140a8542a10ea1743e5442a119aff2335442a10f854249544089434972e64e145c3bad294c32cc98114a1b1b1920100804028142a1d0874220179d8f100824e3432f2304023d08044ac9002506a58e3c8183e4a607a15028036cac92c91cc96432994ce648787272727272720202811e043a69d1f9009d9c841ef4215098e5c949084a7c02ce98b9c444cdd394992a00814257cae572a540131313131313939393933f393111753e4e4c4c407ff22093d0c4c46407042536d9e101c3929f1e319c9c8420d8385cd5ac56ab9abff7de7baf898989c965d1f930b9f7e44dfec4e4de8be441892f9215125a392c2598988427d40915e3fbbeeffbbe7befdffbade87cdcef33f9fb2637fcbe2f86d3f80cfcc68f788dd72006d8f87d687c7c7c6860789ee7799ef77ddf7f9fa7a2f3f179defdefef177a9ef7030394d8fb79b9c1653cc64d70f8be907562b158a7175dd7755dd7799ef75e9dc1a8f46b98cb92a643330300000000e3150000281010864302915096c7c21ae30314800e799e4c60549dcb84510c2419028851cc0063080200000002200032b401556a54009f20ea0602fc420e2c5247d5404e792f095d0cc555248b39b12b8a39671f9995ba869ac0f66a03a4318c21962ba9fd2d0040289ad4031f335c4d3392c2d7a4ef1bf7b90016045ffbdc50a7071dbf617014d874526f5c3a1d0f252f1955529c5d55f00d7a7b03e9c6375f3efa10c15e4d1b81520e2977822a0ca38c03a90ac7b4ba8669eaf7fb5891ea03487e7c342a971936ae701a68ed41406e5ec5df852ded724d06420da5e94756b1d094da86c0d91e279355ff371826bec603e168b61319ea6e25bdeee827a7417c96c5472f0ec817c56be053b76117563576e5b6ff2531a149840c49c0c1221d316aba1e722b7b91b8da1c6186035e424324616685bd4242d1e18a6d7b2c8f8e8d2f6575d5c89e983086b0ee6c0bc9c2190b19b742208d3a25a3f467c8e0f4adcd1b6e547a1712495349318376420c9ac0f2151a8099b7a2421f21e00d73fcdedc32ef820de26caae9efcfc6d7326fb140eab065defc49e5e6398483e3c7261650b193f9b2783dee0d36ab9be12ced7d56a5ca0ecf5afb4cb53145216751bc05922a550ca56847cbcbcfa3d28a8fe3057762878e4f035f50b2fa71d51696a903075cb4281ad5391f2bd9b6015d847288212db588555cd10a479ba0024d5c071a70f4b8b3f0fd984beb30cf81c8d5c83e0bbf7e02e95693c1762162b10e41b6064f3044c6514c52b52b406bbd990f36a9ab0065c0d87fd7e76041393da5076885f40e7073fe3bc1344e2836971b9705de41c7b588115e551d46d96f81b00703d5b0f361d63bbbbbb9df8481944736139a8500f9e471b8f259147ae5fcf97f6f8b0eb0b6d2d9cd31b1048d4542461e134087a4db4196792bbaa871710e8feee0d83f1d203e04f9730e52456ef51a083a1729b5a29190ff20189ec48caa0e456414f41ed2784c34cb6c961458b28925b8405f45ed8883d290108c040eea5faa23401cdd61a756552a3cd8c0d4b83fd77a6a21a46811f38ed0c61f89bb98ee77e4da05bba83add5bb40da5070387bf2a6bca23dcc3511d653a983da56365234c0c8063122ca40538cd3f6254dcc08b524a311f11e68907187b5f65e2ef3d48aeaecb9c7c848347a54a82bfa2a4a1259151766a1914e3a351f5af1c6b0430fea4eaeca2bca28b724cf05946945683d9b510811415744bc421258998b86d0e5c68593f83d54062da89b3a0e2d6e0a3559bf208bfb2adb12ac842039b20e859c504bd7657d0f692ecfc2d20ebc6a2867d30a3e8a5eec2d01343ca82f6f82a5143cef5d2bbb9d2e9f6610f30145bc5a03f5b3157e3dd79302c240dde4cbbc939cb1b304378993197b70f0005367274ff0cb120f74f37ce0447f1da995c3369362ab75b4f749c725e187187873e120e8835ab79063fddf111b6901c5dbe438726079eeba02ce8ca92cc33e7a87bd6b4ad15784a72512997c797dc93793961447d4768020b4decdf79d576f32b417753225c388e81b3e41cc8789b6451ae74ca713a718a2c17ea21e2f3c8a125bcd2b8bb38f17c10da09623d4a360f4e293dba9b07a5c91b2ac4dba02b008f4a1ab1f9981b97ba93e3007ffc770f62cea53d0f88afe8cf52974ecaf638bc88d155d254312550b324b68cadbb4e1f17be8b0e735076e558f53f7b66636421673f45484ad801ea139a27363966767ec4cf421b221835fb4aca70ce92829d399e849be94e1e108e9fbab95804cd9f3329955de1db48736a26bab76b5116805ee06975047deeb987b2849c8bd337e3b101b62907612b792c9ca80febc4bc3438b53ab96bba4af2fa3d5b04854febf8ff9386a132f6992107212f90561352278b74e5d16256e2e183b070c0a6e701de6dd62abf3ca7d584ea37384e9ca34848e5deb9105df38354da04c4d599a23a08e26155181a219d35ea07605453b571b84a8a1a061bdab08276dd50a96aa441bba25d2a72781505d119295d2a18249a31622802b5a68edb804e1313f65c6856a9930653c3cee04537e488a08e62a66a016e160587a2ba4cb7e728156797d2bb812442c0849e1e206d20eb9c064daa07e65bd94e31aecf5482bf95b5ac6e0e0194179032c65dc5370965ca630a20326043a14d6e5f7ae55ab005dd4f1a15b945205b6f97ec22abb9f2bc607710e71e498cc7c0d456022f1f7cd9d3552e4a168d335a30e1d69bce62e88e8407835d328a1d44bb85f957c4c83b9722b9b052000c2afff97e49cfe2e56682a1e6cbb52ec9d07890f8baa75ce04ebb073278bd4f5d23f0ee2544406cd3b22af6a114a3241267fc337bd0c0593ba648df235c10fd98fb9f57e4d0e460d29baeaac939f46135ffc9bf8d4ad5c4398d09c94f20768c6d594291bf5f14adbb524a6cee50a5cf0ddb0885dd3c9fc9ded0ab8bd57c23506afcbe346e6a125517233134c51c0f11523e4fdaed526b58d96a27251993d3bdc681340b53aed71e20b696c6386dd34f2eb3299b9d816d2c5616036dacbdfea17d3f40948d43a9c5f4463c682001b9127c9cfa582c2174105db4134a5e496bdb02925922104149f06824c81e4f8957c3373b75f896f11fbe711ec8e062d0770626266fc5e397bc497c158021d980e4cdcb18b750ecba600ed7e339414d58ca0c736d184d29270b7f23d4ee20bcadc4e2a17612012074474d1fea9322d3ac872ebba2513b11c2fae80a42b758828de23d92acdfd6f1894e30933629c0c65592089c59597b18b7b4932548036499760b762fe1a81e315f88ff4ceded92ffde4cb43741346a83ab523fcd0afddc965f39037d5606422e134330022e0605202919318b670fa0b48a014298d014d6a114fd585c9a34e51863d2a9ee379da2e80a42efd62b489644a6ed8f40d1fd1d2c49dc1052fb49686b107c38fbfd7ec5bdc6a05857020b2f6202f5aa7a828ac8457497a628037c298e8ef56680347167ab0ddda3a8e60aca1a594ce55cd09e29b18bd7992b14d665a1859a04d032f13418644bf7c8e6e1cfa37fd1db467eeaed139dd8c4dfd82d7cc28503fe0104d41cda2bdf31f846410781a9ada7618ba627e134a72ab34a5e673f7baa171156f148e075f0e8ff9e98e7a0c6a5408c2fb245106ea8f0d2e756c694a8136598ebb6a2a39e751671c99c4cd35910eaf4268c722db57c585e8af459782e6b6916fe43ea644f0446f1e55c9c4ed7558784b5006095474916824f4d2c13d1148b4a12fb154e706d9a5234c178213bf1b3e12d720f2cd034b3e84f93f5d1b6e9140c92da432a9e427fcaf459d8cb612e3979d4c2c3096b9494614667287a7ae193fa925ca72d5fefcc451ed84a63b37b95a60ab35c9adb21025db82d8574e2605afacaabc55eecff7f33cf293e978eb4c15e56197849847b9904319029b56718fa55d00feeab40a7356f562638ddd14c99e36003a8562fd6bf5d8ad44bfb3dc1fc97538a79a87d8758d8b7c825abde2e9663670d493de738bbc8ac12b70a68314f2d94b2e6fcf78528cdbf469cc5bac801dbcc78b5399abc25ed6c5e03f05c57420e474e63b70c7b4d13e7f59ecb943ac8e818e4fdb4a2b15648f62e82ae566c0ef9954992cd0880a041f903c84d41bbb0ffe871e1e78e7112b0bc3981ede11b431ed5ce7c1846f312f939b4f40f493894c6bce5921c70febc154350bc356e8e73f7fa9b463d458fcb40f332b92f5e49acd85e414464b347c5eed96d21e8cee0272671f799f30ab0f733630b01022cc5545b06d0d8fc88410d5c0292ad277807821ff42e10ff4e4c8c4adaf26ea6119be02c11e8ede54810fa1253c7d67f38e5d18060c546437e5e0b28786a9787d2f2b5dd6ad4fe4ebffb143d14e824f57ed1571bdadcc9f24f99d09e84420d67a477c289d07c19ff199f3e193fb35099f91f3f953b688adc1d1a3f5cbc9be63fc7b5f850daf6e7be2522bf349078e367024f423d4fa0f7033d27d2f303bd27d6e3033d27d6fba15e27eaf980de13f4fe909e13f4feb0defd146f8e3ea01bbc048058187a406e60a58063c5d001768397048c8d410fe026ae7401e8add4d7c37adc00cc6c38855d1358ae49d08c9cff18977a26c58c342ecc1fe4febfe531931a5ad2b70fc7855c3617dac7c5898c6327498873c9a51247a36109d382a5b0527cdf24bd14fd3dc4b7085ab0fdc08c022de5b65f20b7eb5f02dab09ea717f1e477dbd2c54c0549371e34a46aa26d62772e514d7c946233f248ff61cde1bc49cb4654ac8494ad4a1222408d6a7eb6a60d2fe886023a8e9f1218e15b390901a4b4b842ef1cd09f47d9e1cfefc448dd4a15dc1dec25e292f0d3014b03c99d17b9ceea406c9e30c754eda9ddc529204460d894df38e5bd9a4e54718b3ec255d1df1828eaa6526b125e8222d7c77d8d3c862f145fee6e55d8f7020d29efc39c0d8b4171a2a921916f7b12117601a627ae183a2a24515f2cc8f002ccb83f8a9440b10900f76e0c179f1df00f700dcd88c9af61a5f7cc0146ca82d025306e1d92706604382d94cba4197992c88f233df733cc9f01fa8a356e8e517d3f84a70122cf1cf02c5304e3bd6c6a4c0d16fb8ec5da528af7c25f3900804890caa0d83324b536439ed51050e2b54bb4ab88cf8a28c44570bafd006af41f8b9315fa1e355fb3a25a2fc51de9a829607cadc4a8c7a73ba0359d6ef79731f1cf5caec4f0c71713a04bcc2b9889919f5db190ccceb5b1726639af889d460ceadf229a3596ea2be0e2d6393ebe3200dd7f791879c0827246df84bf1e9e34ee232ccedfa82b39faf8fd958dd984a63e2c50edf8f4e667653d46bed6cad23d3a67c79e187ec722a63c629ae4be5bf52392ecb9fb8efe7305e18abe1da55cfa24398ef12fb368ba3327ecb8131bcf592ea063e5c8d74d4a47b1408bc19c723d8e1e4a4f11dbf1bf5f8f96d65dace1958d3df83955bb775a34f48f13f8dac6238341432f6f921c93b558ab6997fa7441b92ad732081a2701b67c04f0567a45edf43666af4a361e6a39a7e8d67cc5235fa877ea8327aeb571cbc05e4fa426f7e3a2b78630261a7214a237dfb10cae94afa09e00809278fcb516b9f3cd6e5f30a638e30a84e130cb0ce0cbda9947d1d2d6e0f6a11f9edd0ec540b2022b96a0eff811744722e4753ed780fcc76b378bcc44f13467cba51af6fcea9ab9d5209d21312036c1fbb4a9b8b607176b4edc93c9a679b009451a890104b18a5d76c177ed240551d719b4c1e82614dd74d89dd12d3e4396f63eb8c956d9853a3cb8c375bcd61c6875d092da49cd67228cc6187dd0f2e2c2e12b25e48e3c6619e00fb28bf596493372fda79718bd992fbf5320b504c8deccb6c58ddd9b825a39064a33f95b48106612381cc878dd03ef8664ea93c1545bc5fe725a34db82753f81d596f92620a94364b33ac6742b89ac15fac816c7df8b0d17bf0a1d5cab9ad1f0b09580296b5b3db1e68caed86144edb539ae184657951ba083abd85d1f1d5db65965bb6a2b5b7bcecdfc581f49e76e4c9cd24c047246bc716dcbe6183fe85c55680ec11e49c86ca6ea84e1ba29c77615edf8e6e6b1f6bfdcad6f87e08f7545c80bce1d90906e7a2f0f554253460f6c439f72ecd256200c23c65f8e1ddb0e43de08accf1c3e861092c548830ee5169c251c652261f3049449b3a17b028cbde7415eab9a26ed6e5beb08ad8681349e03f15dbd585a57547891ee650698ae00eed2af20597812e400d66bff6fc2dfb3946c880fd2af0bd3b06da4ad714700b67eb28d22c0f8a21f6a035e2d52a4747b173e767f19a4a6e641681f74414fa4b20378903f5ec80061658d8f37aa805f14d3ee984ab1690870010dd22940ef8fc099cb8d9a04b35604ad8951afdfa728b48563f2f8acb2355cb6001ebbf3de2508a87b5d45e0de2e00ef89711a4ac2c89854feeaf75a202b0a15a9c3e6c297e15e9e0a59fdd272f2b158e68ab9ae0198edf2beeac67515f4f8fa6162b54f137eeafc2a610a3888059cb3caa116a0d5454597606f62a398ef250ca210d29199fdeb53ddbd356d32d280a6cce3564d6f759685ff9203ecb7d026a57717537c1204d6411ef63311f7d2f954b8928647807f4b11829573e6d544b013df47289e8bb1082458de7b14a248cf3b2b4c36657ddeee48af625ed82e6c6c7c740a5963c7843b6b5e41b39c8ff8712e8b673d8070281cd879ad36b1a759ef315d166190493ae37835aea60eccf7791ce588c9db454d74d82ed615f499f82ae12e08383788bb3a80578a172ddfd2450cd33920c40f91d56a049b3c033a833290b3e92c180be48f8ba7002c748e1179ad2a4cf6e04d5444617f8296e80f5bb181d004e2e904098ffe30e4ff5ded0ce22765f6d5a0c2a264eb2854e36d8c82a04a138d631153cd65cef0b295b753e8807fda2a049aed22e036228fae8e68216932713b110568ab77aa8c04de2a41fdc4fb5060fb082851ccd9be555092ed2939a555d34d376f6e55ae2e302f3c1b1fb00dc352d4b60622d12eb0911d078134e220e58cda45d1a1585cd536916dbc9577f089b6113297664c4c9d8b3d83c356deae1cc844cf84dc5fea445c0781902e41d072bfd16d10d1bbe13e362063a98565acbbf01aafe168412abd73035a0b3c346b839c2d6b30396f2fbd51b12d6c172d6e3f1b85ee06d321a22612739548a9b66c4b4032d146a4230ac054211094cdbc64e18e4da0f7c530921b43bb721a4a14499961c2f858a9dd73bbf36dcdb29055beb0fadf751a9bbfe4b67611ad88cf1de8844ee185b2f597d7cfbe0e33607e07759d554317eec7cfeb1262becc00d425d4589fd1ed842eacca938ddb2cd244c690ab87e68d3cdf5223ecb1d0a6ee14fbfc9d622fcf54637debb81f50ee143fb49a2e51289f7a1fc99cbf148f9cf43c5c20457ecfb67eca1b0e21de21a266c77ce420e26b97819b63355ae7866bf3e78bdbd73d478e80014a02df10dc0865c6736af50f29c22ab57f29fdc3af91461a00c3d9f1c5340816d7687ed0edaa072526b412cc7118b40bc183fac50f1346129a1a153ddaaea1fd1e34bd9d0e3215b43791d2043041e542a3a8849af049089148a43cb67b4da6f33f44d56db9f83bfce72a4d154ddfe8d7da4bfe48c0e92699faabc56b2193fbc4e72759df5ee5eee560d2a708ad037df375b783bd4f2c0f07600f9cb20b6683a878a4db07d371f9316b278a4dc2da369647166c378a12f7411ffb5b598f34e46e9abbdf30f7f07ad82a9f9778a44aa87eddbf3194f5c8cb184c1deb7ce07779060f5aa8a94583fef0f7e2879d99a8bab8ffc95ddc072e26ce4dbee0fa0c6cda9ef5d1e80fd910a0655246a5b88867c04714d8b730ae960a056682470c11c6e6bfa0afa33fafb0ad25fb86756501901c3faa912cafb7b16dc582746a75f1fe6b0e1110637e1e2702b441b22febe4c7b76bfc71ea414d6ff23764d33f791043e00c033630a3ad437526ae452ba35544a10c9027e4e5a6c018e318a229947867c495417dd3f6b7a0da25c05cd474ccc2e416b6109f58eaae396c3ba4c7333769d73654694b9aebe98fc1d3b469a97b4f15c4187149e27a37e07ed8e38799369823e7ae8c70410ec1ed02d26d00576985513b56030b1bb9eea1d2708270d4c6a0db9327539d953fe608d0ef883781b41261766db960d4e483faa1835d5823fb6edcd408ed6dfed0dd7b4f33694a27e411a8197c56b81a6cb3e6825fc7e2b63e9004e29cdef5bb81e8aa6723788e50d52c6320f5afdd7a4d3cc1ba6fca76bb314a84779e53d90452a6b40e57a63e3c72f372c92ead55b46f51e4841cc092c898db4abc57ddc841eae2bf9bac2589d6e140a3fae0c71a5e373726023700d36b6b4eb1f7929971bdb98380fe0de60976268585940fcd98fd745c49ffb69a8f4de83d399ecdb0cbead3b13e85825e41a861a0d209ed69616e09e808ed98c981aa8a32c20e0f9ede2f83e2aef49d588b68e88407baf1c48b8a29057864fb172f8665ffeebc915377d26de7af1f107ac6df1cf7821d1f28f90cf6461b6ad89083ff25be3acd65b2050b15ad87f170374593a7eabcfe833088fc097f815239d9add0511b480ed8065ffd0dd9ea598055d5ae4d328505b6809f5503ed8bb20b83f090d8f2de8e7535035f5481538c0c9fa9a437ab82ac514b81ff6d803a2f7cc811f09d651fe495aef4d68bb6e45d5b44c1f45fc505d1a628a0a064b0ad39b3e0b310925c202b6acb02d64a40593a8273dc41e747ffc2be464c42e9e9609457592379a7d34ac41a7e5ad6ccc4e64b504a08e0dc49e252a425c4ca93df3fe125a70686231a84105301b8288d6ed189b43ad00fa9614c8d1a4c447dd464a94cc4cc6a571d0a7589fbe90e535328ac2603995e46bd21837428c98f1b55f99e218f47cf4669bc852e175f5ae87168eb604e20c883fa1a2f34b20a1de35c8a1f6837b251bdf6a8500505171d1bfb1a396d5ed16247616380c432d1cf4d3777043c181efb3b46d0068eafadd712e7404e5b1b0074d4b55a021890ef90126108116e70c0fa48f851b64e30727e83282c9803c32609fb41c0718a3abff3215d5c4f76011caca56403791e704ca100c562cea3c67c562604c328819f29d545581e1c9f05dbdfa64fc91c5401b31c8c6f307aaa7331ba4fadc205460a0b4b252c9ff938c357de52e473885eb1886daba02060dfc868c29e4c812d2aab8f1c0f33a965fd61fd793354ca7ff5672b72b4a17c3048566928ebf71fb46187a1d360ea82157dd2ef46af9300be486e052b47762b5819d94de18a48b7022b45b84f5a11017dc76f3aba29f21b8f33fe42f7082b0adc445a51e02ef2ca02f7c82b15ba47ae9ce036829b8edd80e866da3712e85dc1ee85a6cb5f78cedc14855804f630add858a11ec9339fd90a155c7f66b72d16ba1740d13f8a8066c6ea1cbe3f4e20385af6398a5d0912b8a536fca93b9b98c1d672d94157a86902e83a4e3eedd6414d53e2cc1da6a4a80515536a574fd086ca912cfee57249c324c012cb754a4394d008e7f2e27e2b4da9a8c5709d099178ebb21e4aaf6b912bf00d2cd1afe6c84159b24f91e0138737c254e5af7822b17051e632596c2e153afa2d225495266378587d3006d2463f672507dd6e8d341e07525f1a83560eb7c8dcea67bc25e7fc7a2c5a6e8fb895cd36872f6033f7204b65d46148d97b4b8ce7d3e828d7d4f48b362639d7ed8af32e58141cc60a2751230954d5be54fb172c4ad5a6ce2499a3ae47455566065fb6649e255f76813743f9b892126b92ef1938a4afc1d3bd60412b5d55c12451ffe9ff601e2145b2ea804b91e82d7b76cc582057ce520972ae071efc6b73422d3e04a97c901d3f843f170418e40a692363df15a8d79c42c8e87d3a40d76ad2065e614cabd838130f6db58b484455ccec38401eaa6addeca7d250356cb66afe691d41137dc68c038bc9a99c3afd112c45cdef53c4215df1a6a4651192e0944425edb5b9140b05b118996e582cfc2184fb729269997afd3764df53ff5b19f7a87b93acbd636d30bf07a5bdd91f77828674d8f56f64b7a7e637b2ef51ff6d997b582deb31a547098db0f0f7cd9e62985da46f01bfb6ea4f3b8ecdc0f0399d8316ec05663084e9094d51e61401e31265e4957aefc8173bf724a5b1cc5f1e5b0b79ec808d30fc6db90a6435a96aa0d6c412d70bd95eee354f0978e550ee4698047992ab564dae1115a8442dbefb67e67399acd0ced013b065f3292aa361a966e44bcb6ce439d7214ef6e9a80a4b17002c5b3be069a5b546a3c2209b3ea824db1aa5202d5bca4fd99416aa09cb51bad83e15a5857fad8d0bc8edeb2e553edce08d617a71b4e2eeaa3c8e8c2ba16bd5464dbe13cef8e9e682abebe78605c74e0cf4e6827d454879674a4b81f228116c3e2f26584c2adb0ad91046ddfa0b420fae261b3fddf94335d0ba2824990aca6308ce8c1942e12e4fe53ce1aadcd459c7974ed0cc9e219852013fd2e1ff08223f68687598b24f3ff17a3998b253bf7d0ebf64917f007a38989aa77f526840989af1af562438314cd95913c392e031961dfe21b8b5c3148ffd566cd0c1d45c012595be6385eefe8bc9ff2cd260989a37cf596b6acab62a4cf1eb2f15e9ff079edf7cb7064cd9b85f4dbd09a6ec999fcef46fb0db1f431a3b4ccdd29f65ff3ae04fa278cff9e690f803254277025c3035b77f9e387e989ae7bf87887f09323fb325fb17be7303abbb56986aef3f0dd2df3f9edf69070c9882b8df420d124cc1995fb1e9bf40b73f8b14f730d54a73932efc0bb6df235830a5842a879a54749d205860aaaf2d5b254d6498ef5ecb04052b12c41c873ac19905faa031d6fc8300a632bdfd8d67db2038fb3e00a6f811806e8fbfed5461609852753f667dab3f4c654461d64c52ab070b3f6b920aa60edab96f98822e89bff19dc1e9de4023e52d47c0b507590910632e8e81a93ca9ebec9e7a94eac1a94efef98457d827221ab0d48963cbad29e849f3711b7053de1f42c336c1c7fdef471c78fb13c24de9d5eede5bf56ed89193d77406a46576efebe1d87bc1bc78852487ba9dfc18b138f6a1709b0c3e86fc558fc816e3c0196a3f6136935f5e0326b507a3a5892261044414e43a6976842daacd6537080303a97a0e2b233ba07327865888191f27fc868167689e1c003326d30c8e93da5d1aeb2ee96a8f6007e0fa5c8b71652ca10ba87ed0da91416f23613e972ce70a87d3ac991e4db632352dc15fd2560a3c50e177179a0e9371ae15b480d600dd6c10709b89bbf52d1a60b69c32bbea40422aab1de8013da053c62c21de35252b580f42e1151af61691f2a10acc7b14ddb556dc8f952aa8129c42ee9d781629e5356626b100327451c949fad080dacebe81aac121bce45e02e576e48a8225c79b2d291472fbc0ee22eed674335f95d2c0715012f9fb20e495ff8e0051cd844d689f741fdcfe124884ae0ebaba437d523a668e194e9d0dec4f5580de469b5f424793b0e370f87eafd6901b61e1b7164c087c4a002f981c3c43fd719e1921936cd5cc497a47deb8d607a6ff1afb31bf1781637fce57aa3f1bffec7486042c8c86419ef6ef2f03ef67acd41976741e2066a2f71cec791bf8972f0a55ca0234357e505f4b2e541d578312c06b8ff781606131e91c45c146bf3694e4426f6e14a196917a3ed579c331b9d1859d39ac5c8a5b24f1efeb2382beb1018d2001836eaec0c9f29b39f7071420163ddb7727c294f3669dda19018e07fb81244354f6b6db2d9ab5c7b19d6311bf61034e812e185dc9fa7e496210c5d7f341c75ff0563e80ea37e8daaa5ebf1eab56992bc5d0534e6340d178cc280b228bda30d765f475ab76e92ed939a55bb968616f62e9145697086c6578c0bd40d3b9a6c9ae9ba1601748db4e7880fa9f218796d676e356f207eb0f7796c1ddb7bcb746d05248f4a7898b273ad2c9645793a123a0fd924aa2c8860fa37f5dcbe4bb05abc3b66a499d4c28acacf8be889986bae1e7c3d8adf8fe080ba98a9b9d71531905349b068413121c0dc59cfc7e28f0c339d610ce09ea19570235acb604d362fa1f6ead1120d89782d5a1f88e3eb67f76b8efe29722bc1c0c94cea53ba68764d981dd8b228034d3f83e1c8e6b4e5716430d86e90a5e265baba096a137efe31534ac933c711adb13838b0f219ff4eacc8974b9063c54456e2dcccc1763664353a6a6e81a35ba919b94a06586765529dc3c2060d6e3d53e82b430a0ba695198354c846947be154dd0d2a6c40a8a4ab8b05c31ea6b9ec43993717a3a168f0030e78fb9dc238006fd3088475e5019a530f65b2297b1663624469e812e4049d0a97ad60e18e0f46ef8d806625a4e6354a1785b6cd369f76322c48c9c2baba1f313c93c6c2c7cb2553f0bd8d24fe9d6819b797ea2c4123bda34a21c83ed6152851a2bd3bbab67402ebf63ac08e260fab04780616c7584618be9e446dbf9eeeb187f5a9604027b4b427a06988d1a28c801ed716d1baba9a686d56136b50d28ceeed8dc69ac2870dbcb3a479c3f08f366819dcddee096d3bc6146b20ed0ae30a8fb29b99794b1493b747f79cc0e657e97959640a7327a0eee4623e03bfe20b64880150221b928a088c329759e022446dc6292c7034892de49c70c00b7695434f5ab199a1b3745c4dc3fd14889203a6d9036e5fc8fad5fcf92d3e73ed6ff6d0d45e73b6e776be9ac65259750a042a8d85a102fadb5322658cfcc8c975e8082f61f211396f6e79858db11dbc8246c58d8064efdd5431d9a7acd2090d91548faccc5e6c03fecb81f9fc9b705de9f2acbaa9c7d54144f21ed1a0ae2e9d99d169bd3f92b3480636b3b612c0b577c31d08ccc920ef64f7b1db1b165d4ecd9bd4034e229b05b07e3989c486fd9cdac5a1740852aeeb4dbec105ab33cf57ce951cf7512cd13d3d8c87300f0223af8c02de697b5b8845ec34c9ce0dafcb91917424d1c2899719ac8170ec471574ce5ab8b5ff2582e1a07122946a0f3845be2234d3cf751c854ff242b08ee0b1c2bc86c1b9b8746ce3c3cfe7098958d201cd9dec181c581b26fa6e5a676f3cadc2e5b7e2c3224b8654940e8547e85a17292fdef0c5252d70ae854de5c0b1a531d6c0b3f0f1895e017179ee3d3feb78572063fb11210c6e3c8195cdc7e8ea1357361365d29dc6ca87002a9102c86aeab95af7e8eecd2694726ce8141c878c8c77fb84e3ced354c6fdc75c2a6033c27514c1d7f30f63705efd3cf4613331b3b122e50dfab8cb27ede096151bc43cd3d9b434d478ef5ac761e1e6857eae266b480a6aea6eb976c2bceba98c94348ab4ba983576e539bcacd49d12238d2ce82b0c03acc8448bab65985653dfee4de707b675845f717f5c0eca1ccb0e9f79409dcee7640c3665d99915b8702274462774070590129f60e6e936811105e258529a6afca0840981c427d775d8890a6c0405a98b6fcc2b23a9fb10a3749b317287d2306fd940e92803abae75b11d684f639b25fcbe23a547aa0463b50acf2718772910b31328a912767347d95dbc9ca386292ecdfcd30266ab1c4ba761f0fb27a08cd29aed7fc5f68bc5829f737049e2966560666624be395c0c3a1133e73155414c3c741531ee65c4e61c566063e681b60cd0ffc486465e726baa1ae994a9d6a5ed86d5a9c3aa25f65cf6e265229536484a01e492fb00daa08fee7a4e9bbbbe2351c640cfad5c9fceefe0eccab5a3cc3afbc26327aca755c7a9f4a027ddb0aaf9ff151267b723197b55786b07cf351ee897129ba0d39112a8b6cc5c70e5e01b7effe8efac4d827aacba6a2d89423ef598f98ccf7c25235cc45fe148a4b12da09b064efc5d3796f7a8b503356031ed980f73b2387b8c6c38c45df500581a3e33703b22190fa699b6b77ef0f9855908c953c900b616255f24d79e42cc13f40ab8c46ec57def26f16fc2362293e3e6c65662b17f9dc0c2ee58d424905b9fc4f241f41ce8b1e1bc78f1e0ace5bdca5f6225ea2c6a723b826dbb2f0ac0c9b3bd682bc5e25540281e1af85701dcf285a5cdba68af6419fb9ca13b590c1357149463a0bbde5c4779bc3514f860637fe54b18590f30e4400c00f4238d3b8668ef328ca23eb46f5b33b937e4b3819fd250bbb13aebaa61f1975a704aa5af725e259693cb98c1e6b5d212e020070f23ce0a03aff65eef39410a60aae141151794f6af4ef8faa1168aedcf131c6c6ea678db841ca4896ebba0232b7643d2fb152b57a60e0c7afa8e31ea2462d6a8c335acbe0a1a369ee3e5f41065d7f77672ad94c281318b17bd83cd002f203eb985b9a3d5baccc60b0f09091b98d6dc7bb91b2d36bc05ecaf1c55348eed3602dc91f9e3cd897df12ba9c99370abc41c588c5360e758677a8d007a007884a7512cff1bf94613dcd2b71a7e6b05a7a067df2195f135180509cd59b2574685e9f49738d8b3bd69a1c8d78fbf303d98dd8ab1ec806a437b66371bf17147266c15fa6a9a504f110c7fabd3c1664c64e640a12cd1b33a8e6ddb484c4e690f3a90c213e56d50200a4043fba51c633655e5c863d15ece75254b8bbf91a5c945887a989ce7cd9f9224472c41a79e19287fd6dbde28ca652eb8dbccc8b3d6c2a455e966c77c5c4cd0057036c41ada510b480205a5b9a4a55e75f678a88047c8ae0053e90ae3102b98bfef5f95eed621e9e625048a703439dcf3146f963fa607ad0b9f5b2e1f2f188c43c41f451b2409806ea21a84a87504e5cd765c595161972cd4b451d01b2f0a88c153e82ee2836d23dc4d2404502b1ac4c40674a136adc7346e6d730f001f147bee21a574688e16d5d4ab5b17b1f6ce0f0b7eb1940be809bd42e039d2b25a4100442b7c2899730e64692ac4bd0904c5b85aebbd966e18c082f2b546b9c01bfca0a9095618341a584e982a96d608cab8de9840420660ba1dbe0c4570e651179b3344a6e010032651608e6ab2613eec96df33f03fed7da4530c29b1d170f20bf9f4101235d60179e8a41507c11401a1f28d402a6066c7c440bbce77e6856a261d528c7e66d6747a365e40353251700ac8b185acda1c6426219327b668ecdb2de8b10d3cf2117a5b04c59b702305f4f2854d3b34af25bf2d6e7c181e934fb912360a71e63ed8c068562e089935df2e7a9f96305a084bf3aced67c4691bf5ad1ce6821afff8c6584fc2f9253c665999b59edc5c16a84398b118b1bc45f00380d40303c91c22ac950c189a071e38cab52529fad25e10c2255b95a17310f1b2759a187d27a03c030b74d71067f9575787faa3e9b3007ff0d13905733c11b37e3ac3fd369bc003e8641004b112c8d58ae0e39f7eb37438d608537fb766d68a2964826bf61e42e7365803865dea2ed1e422979058c19fb816c03984c31e6b424f0575b8017ed0a2bd3fdb6b00814199711abf395d4878c28182df86d3698aa1e89a11d4647c991517bddbd4607d47364733d44f18938e594c94cc7eba9826231bea2ffea875d8b715572caa029693b415a8ebf434b4fc7a10ba686a8fdf6f04f11d5d070dc373680bf0bf00497ba657aca0276056a53977d2f4d3ac77eac1c839bdbacb5a6f7fad97bc51327e89f1b47ef026c9be78211ce25c6817e961e051c70c33403e07883f76c8a020b3e5ec4f8e719ba1da23d1db9881402508f8797b04a75ab1a8c1d035c1302a024ee8d2e0c3528a9d8bf6c5155630bab76b0ccfa09bb94e8b134c281962e88870486068e0f36cf6f45dd1aea042e2a742ccd238c3fd449e2daea57c08e719431d3286cd59474179522ba803a97275153c3e04f9b50c09b8ba4813cd232d01648bbef49cd18e19ac0d1058feb8f40f4b201b84694b039c8b57da990cbd2da9c0336fd5b7605f813c76cf760d288f0c04280385052a8b93be1020b3fee119fa2913ddd69a251f2a1368af5835ea0bef5b63430bdb952aeb5158b5968183f30cd3d94caae452c907a544145e70a77fb52d6ac2696439b7d6a07e9cac7334a611faba10dc795714b7f42fb12057e300cb78c2a602193dcac5c9d6f827f72df9c72cc587ee56b3ce9aab4e2e0c41ca4558dfc476dfc64e6f38d3729eb459bc06ca36c4ccf581ae1a85a760bfb65636dc70cac56824adb46b1a7bfee03e2eea8b304f033debaa99001134b626bc121a226f90b89bd23b66052b1aa90b7ab3e23bcbd1ebdbb3050675ed20826bd7fb2736d32f3c381ebaa1d9846847d9125c603dfd49d32c94e61550ffcb4e30b96121aa3f99f421300f20c96458468823c671710056b22925cd74fd4b4464303a33a33c8f5faed63c88e68e89f00fd5b0e6c62c5180d867ce0af08c07ad264429b1cd20e846e92c8673105de966147b892e8b2d30b3fb4d5284437e8e644166497096985c039c89048b427059d9256f013e3aab82c9ff9e5c2c14046d08f9615065d040864c9cc80c4d2441520308e07312716335cc707ecd6919351f69d8c43f04c681c7e811f380c2c20b9246221e7f2e350c1cd31ff6ead9039999c8924e85acc76a077a757fdc0a2a914fea3c8aaddd60f4166e63c7fc239af1f45cb3279993867700ce2038990777d7cc4410a0e1b690afab4aadb13587558dc967a26293850e278154ba76deefe5cb16d7caf95ca2ef6dc6a56cfb93342c1a58289eaf3cac0bbe0395b9b48056ce3ee4ef89530b78caac0a284d51087b5eafe148953aaa2c0ce766f53789b83941aef04e60462cb04629a56b4cc8388d531bbcdb31debf2c61cc2105489018b6d6b8dec28437fac5bf70715f30a8cc359cc5a008025236683be3acfad684545426854b89c024e2609c89f571899f10566d9e91183aadb205fc5e3a5b887b8518f0abc6f7027c118c0f2bf8b58b7655de1ac4be400804634bcd8731a3380f439b1aaf9976e12c589e68aadfec728a41013a9e508d37ae4592a2ecfc0c3a5e252bbd7b69216f39a2f06637255fcc5aa1183aff57453fa5383b86a63f5a78d486063f10868309756b81768368a9786d17225851c3085db9d032fff199e92c208a6db084d0725517fe7720f43036a97ff6a11d3c2c0150d901c1b108e92e0df2e1651d4a0fa9f60e48b4244abef96b5559c8ca68894568fcebc8ae61829a0e20bcb2f13cddca71d1190287b67a0f86f35e44e3f92df70385c5045594e1f4d5c74a23945612e4495ac8fb9be51a3201206a3ed1638cf7f5ad4f66131da8bb98a2eadc2e470e7bd15d680a9a29334fc0434c32b1e9da8f470ecbd95d75432177a379ce5fd58a15037338971d18ee764b74db26ce723f11c8ce270261050ec113026bd1334251d304f7107899d300f49802935ca5becc1ca2abdba7a40fc83683265616ba730be0a7bce033f7e15ee5adc2dde9001eb8f7dabb56c0b77631600ce8315cc8117cc69f23ce1e60d75adc4d570c8ecddfe413f9d125206dc6cf50f93a0d61444b9ada18e9243016f08078b46c787ebc16f0560ef9e28ab45e2b65f1747a36c2e888916c97311e57f50e6bc7a960aae650498fb9039f264c0ac9a3f90950a26e7ff9a27bbbc1edc11c698e5932408ccd59930b742b589baaf22fd016f6679b021a037347cdfcaadf094d7ae7200082d6e0642f959316ca704d20cb77f52d2f48ac31718ca6239846a0c910cac17298c3f2e250d2393ef51d37087b22cdd7e1c6aa200d2aa9725d1ad38dd010510cbe4aa03c4b968eb6898f46292759566bf8ac8eae9cb4af94c9569ee4e975e31de3d24287d314ceb289b75c454c521f78a14b8a9512aeb926fda7a70b0aacae1715c642bf365a3c724ddda0b4407dc751b949acdb1de3f1c232c8c64e5462efb8e390084e0f78b070bf673184b41442d5731534241050c6270dc99213de877852d24d6c10daa26ef1e63d0d3a46ce0f5b08409643939440098a2ec67a844461f6bdb26c35de3219a1704151e71948162cf41744d1822c0885f4332d855e660e393469ab6c11e869c45832631febab8c029a576ee4b009d603116b0f15de3caee84eebc206c4d4bdefcb0c2ff8a1097d158be13f5a653273d6d9056710ad7c755db2e67d5317dac713f1d38286534c9d0c9122ec522b4e93274d76af25c1b995c685573e70f64c7e772d9aea521a1cc215bb2c030e31174a13e86572ed6c63373f6276d151a915a02472f0b2473b44a9302b68a802b165db5bfa155b4056ec3a32f6d5dfeee98eed7c814e1af9f94680b068e64b1087858687962716fc426b03087648512934b9457fbf0c50e2750f8c122cb5c697843dd30daa7e92555692c1c9135691859461983091f7c20d9285b74832a1831fa4192c8a4806daf0e0406245dc5d754c9dfb8a6ce4817b8e9f0604292a4b912d1241c7b8cccab27a30e7601b5d49db306bf4828290da325d013661a14c97860ba5d356fa9530867a7dad44219da9674c9e9ae7d4b1d7d33dd210a936acce273c7a02b93296b1025d39b5254337a61e2ca7d68d430af3fb82daa6fb663edde1eb3e5da23007bd8157fb8644192985c1e784aa5fc2dd76784a654f49dab85d0236e17ea7b7d3dd53c50fad2be16813b30a6fbfee6e0eb3ed4c0d28e43130fa21c700a1c284133eeea4d8efaff7b0d96f98cb0f06503f04f7999c2401e54daba86892bdf9b7324f30cf60372862ed7116c22274fcc1e42a512c121df41ede782493cda3b98c474b7e89668e9af976e6d300912290884307d25984895e1477eea2660ea84d9e0f862fdd5d17f74dc6116c427d17c2dcf24c3836f7a1161d8f0c74dc5af4d2d9d05d937d6cb0990f8d565e5119898c56da22356b9ad98ef7bd478e7d3a1617f8d78c706a7cd9eb3a80ec0d1a1eb5c7fae275c0541f9577386b2c96003a6e615b0c36fc16e98fe46c98129d6459bcf139e9bf8a6770aad68a3c8d5cfef025b59c3e71a1fc9c8f0fc3ca5769ce2595237792baf13b0deb4cf81259c0bc1242699001024168a0490849dc324f7ecd4a436ab805cce07d7bd0d5ada0ad68aa20ef9e01f4c4ea8569d554096b12c7060ba54d6078cb27e950831ec854923f761db64716ab61776e629cc942b1a0da84c8eff16f30f9c25b78449042976e2f53ba82f24fbee6bcbc3fe95bbee6f670ac0d541d40508030379e7845ad04d4ab046383c428d622cca8fb833c8a4695f37b6c628b9e28b3f2271af9433b15342c55267b48a43d02c666a5d31efced2b32a596def0e875ba469b52c2311fc13413fbeec9c5676c5516d62a50e84eb21bffab877f15edcdd74ea72ed73185558808dfdc050faba0c022bfe27a6423a209dbcd035a58156506251c367fa5d807f7bc51fa3a407a40199587182ee0afaed85ab1099a1abe8c84406eab816ff7645453bf3af5fbb214c12af5d5614b88238a82b70677c57876b4429582654b80f05bf5d2a2fecc8dd81288bc0510d72577472d8040be760594c398ee2adcf7d92afe3cc8ad36dae724b814098779308a4d7aec0c8f6c8af84344192c6f1ae3d4df8d25db93c9b8afc9d7945b4c710443034ab3fba95bef0b716820234190c4aa970a84de59c849ef0a06ad9a47e0ed430c86a0c8d3c3b0a5419469f3a16f86d3c10defbb620e523e86a0b9baf357af5e1557a5c427c6e41d60f6d5999114c4595c4da4f0f31c6b9e5c71882c2b184ea0facddb9d3ce245993f63f2b4f53650d8f6165b537d6bd6fe93d56deb2e66d0bdeb6f6a6156f59f2c672efac7bdbda3b2cbc776b873ad7a1e34070826155d8f8a68cc146d9924c694df05f5634f53a490b2cb63211358d600632c59a6065917782fffaf61b99ad78d3baf70ffd3b2d78cb9a372c7b6bfa85c1c85fc977e8933797519a0ded9d2d586f19e9abd25b457710ef3766d52d8698b68598e58afd8aa4ea4f1acff77b018ec5b83186510ba5a4c1b9f29ecf5ceaab4c739fb93de18a3157a5afefb3878623358e5e4339fc743dbc50c78ec2c85d9e2d20feb1fcdde01c3ab9648033f08bac0a6d647ac6871abc2fcd399125b8e2031af391c3879278404e0988df8675f94e3bf4b4a5942f3882139465a173f9ef9e08ad8ae5c25d35bc97334bf2eb6b03fd2de672be4e279a9bdc98ba6825291de680d6a2ac45d31731e7a8fbcf571a30d51c936d823e970175d191ae33114cbdeaa4e6ae79e34751f1a86cf16585bf7935ebfae06c0199df83d666e03615b88e7eaefaf17f20f2b0ae254f3e2e89ccce311198d56f7d374ffb8db4d0b9ab882e7e619938b60c9fe6748221bdffb71838cf6426ce3150ea4c2e7ec35cc4ec418f77ffb7ffc5073f3edaecdeb427276c26f64adbfb43e6227ac132ee9e2f8477e252f7c682e06cfaabc26fab1d7f939dd350ad7e09ce85d1c0a0cf08a89ca86587dec151c03d81acf6ad6d06eb2974c836b77ccbd136f70686c0d04c3718087a0ae755aaee2769c3c2b2af2d85552f59bed1b9ff45db8cfa616d9edaf2dc0d8427c72b220e5011d5e7819150be232c801a1853cf299b6189ec73746d3c17b47b1f3b0fe1c70c47e4d69cfcb481ca2d444509ad37edb19d5736b9596ac103a39a03fe080d2b415ccc80734349b064dfb0d0edb0c794f78a3edcc7092b210ed11466f4af8ceee560d0c48e91fb0117f40a841a7801dc5ae1230403b72acc38b3c676c090d0c887257db1ca4ba97d9978923564be26bc4f663e19cd0ab7cdc86efb1bda991c49ff68881b11839948181e2d0f63e91cc25fa2536a08aab588cc99dc080b258d6645ad8bc4e4846e8bb6c3cbe3bcb323412a60c63f5e11aab922f152e969b02f490333bbef10b8d96e90d3b32fc6d8912542aff653b04c0444223201912b79020cac994a766c3f3571300ea0b8f14c88d9327fad3028ddb06081486ef023f05492dda0825d99e96eda18ce8b5727b9ff0a0a5e8a69f2d9720139202b25890051acb54bfa35dd6178241897780b0946cbbfaaddc15b855fed0931408cfd516c9947287b4fceb8e8c93301f692d3c261b0c670f6d1d519c83075a504889f3266bdc979c8d7ae705cc5844c3aa04f5142342d4aee05cac6abb21d47b3cd17ba951bc9484dd2b8849106bd56d1b632b332b0ee161a2fd496cbf033e84b18cab6db4e1f2926b3b0717df150899bdd1f244636b1d6d27c9881ef433edff2f416145bea05ba98e4e7c31aff0b8da390efa326dca2de023e2275a0a0d7a17e74659bed5b8d3caa2a48ac2b03a53a253248262f68b3629779a8849a811cf7527abb47cbb7769e8da1d98671dfcb03af7982ef7d7440c2708071dffefbda1cc6b8ada46dd186318d48ac6fc871de24c0a0cc386c68f72151676cdc7e04d7507408ebbca58f851b2bebc5f49464552fe0dd1a9b9c58d78010082e3af08dc4cb148382ea35d6a3ec5fe88aef34007ed4fb2a1e725115718fe25f4077cf7773ca8d833df3b72cf14ea1dc951d1440ef52a2f935734d46210645ca16d15a7bbe47690fef386b6d7cc2991ff6645084c3efc839e68298eb71281536e96d8716d48fc8dd1ee496ca6e2d561e202fe8b303f1a67c714b45c3bb730c76cc0655234af67969bfd33bf784a9168737b48fe99fdd034136180d2ea929e82bb0dfe4a969aeb2a7beb130833286046fc9586b2c769ff193a4be7d05f73a64887308d6a48a1b8ac42731131d077d9d9ddcbc54070affb31d0ecb805b9e50af2e6d8ede004821b53010cd73e4f07e707161e2f08ccef05853223d70bbda6c59b96b80676d3489b0fb0aae943f49ae83cbc1bb8aa87c16e6096d34ff722089bf762d26eba3783140a61dc9d59642f7363e7da1fa9318e8a4f5f287dcba52fe5505d427512847e2e599e8b996039f3d842148a256593b04fdf4c5fa6de9733f6e3f9ab09cd90591510dfc522da5d6b253a50b63805719e16f4a05ca6436d435f320b462e83ae6138e0a68418063d6f0d64a2b4c8b76907851bc510fc3946c9982681e24db41ade8fd5c90530f67731410bd1f05c2836240fe13832e448d22585b32aed6011ebc0a36a0d0564424aa11ab7b4487c055bf070f22e6785b1c5a761b7567b5c60a9c9ea98366419eb9a93e12b2c7646322d1484efc961615f683e920dbd6b155d64447cc010422653dbf6484a0c522fe81aa025e779a8931d8db720dd4aeb3f8a6bb081578f99d548070ff0be8d2fb1728098c63a0c405ce0583a123fed4108e2a8392441a010a9dc40626c4d461e42570ef4dec1faf3b3d96689403d900c82846a2112e371e256c983af284c4b6b892c41c5f73af21eec5e2de86abe7047e74ae2989b16db5e157ee94057aac3360535c9197bd4049d28c2643bc6d62ab508b7b1f36dd6a6948252df69d659444cff0c1f06e4c3c0448ccf531f0141f6a5ea312130e95c92eb573dd2f0c74f2122f93f87240b0a081a226d25eeeb53c9cbfd2c1bfa759208b50c87049c540498ff31754de9f475e903462d0f0e4f8398756d235cc5a23e47a182d1bd7ec3ec48c4dc0b1ab83e419d350f75c6e5b23f18ebbbd5cc0468ef97c2fcf4079f2a4c952848ac411efa077b7c65947da5ce098cf379162f423c6104d1c4a4e964633bc33c4f1e86444e0fe47142365520f946b599cc94b63f2dd5e150e12bd19d9a8f3489bf94427f7845754a7929c178804c30dd311bf9b70d0eb513d7b60eb9a7224175b42177713e99b6a70e497d9047da58d74f09f023dcce20dcbe00d873d7662e9540701db6e01b0c73ebcb1c69a6792772ffc660670e736cdd070d3054d74597088cc00766a53b30f66c53306a4e97af04c61d6c7aa25e2c9c2eedb67ce5ee492554c0ebf7642ddcd12e2b1be37b159e6949a80dcb19c7e1070f509e60bbd7fe02e9d08d677e8126737a5bd717504f2b3c4d33fd1223f4109e23ee5738cfe643cc87323c35670a3244601c3e8879641d50e5dad520aed26bd49545909f30122c657e1f50081c75ed5afc1689994638f603a104a0a75bd5e5da0c7f9c77152b9986e632d70b781211f0c7b2bb5c2ce11ac81567010abeaf6be8bda683f0d469401de7d5209727b8b82df8821309323c6f6f820ba386b292bba0324d4746465a74976245a1a11c6683874377c16d5ec89513a4f0aafa23bc80b541522645320ff0256b2d3b58f820f236708357f0e372ee890cd19045000b6fe9ca1470dca86156336e2e8c26231021a9daf782bfdebcc22d5e6be37560bdc1afaeab4eb123deea80d6dadfab7d7049f66da29d977d2b05940bc1a867ddb91acf62b74f79d688433f6967b3b42cee83b88cf3d538fff29993b9fd59ef2314c0d43b782ead49acf5c120ebc654f056c88864f2c9fcf531b8ebb3fc08d06f26059e81de44b2244b007956b105b1c4c1590195063977817e3686657d61f50a404c17d0d59047df14f4df895cb47f2782691574378cd7a2299af9568b85d0f754bec03f00a353c17949558f7d0f42afd6c87316c06d43e32f6481d63749d4f41e195547e284007eea73c98e517a6a55021154cd00fa00a630874043441246ac11e41e67669e6fe1fcd3d35632c8c89a36e2c2e291d6a44bfda896aa4c82291bb11468e2c249ab9463c3797140333228a3346e9499d6d6e6f5664f5800283af76d3d65d42b1c9945714c6726b4774a384a7080d08e584b2fa0577b69564ddd28d42c6567c19830130de7fcdf8a484a302e9fd3c153098b1e2825b4ca10cb6ee2e4a36a4c13b0df929b4db1a6747407d325759222c2d04caf69902c2325099302f4303f9f658c14ba3ec5a5db9b93c06c9c5ca8a3a23d001c23f429fc4c8a47ed647525985796ba696b15ac5390e259ee720c5a21fb2c237617c796bf95527d0042a69dc759297b6742d03b253529e92bfbc8b6ef52aaf522ce6d36972eec3cb9d8594aa56128955d23e560669f788392c98c0f2a1050f53eeebf881aae18be569c570f9bfd5f2b1d455e0729845664ca106162824f502eae24e5fe44fb819e848e726c5754be1a9af8ad3d80059d69bf909c1b564187d413f394b405695697d611aeb1d4587723869b666b3cff06744f6b81986ae69ceaf293cd6de83a88477987ef5fde5b4263688100328b59def322a2b1c0184be883ed8da931a47bbadd765720d63689468f5135826312f812cba829e42b15b722b34b68aea09cf24376bad18a5bd24815b18ae0abe0e1905af5206b3036075833d02a838b3c1cd6266e458b6a8de069d506b72bad6bc460d3b7a105aa2e0d4b4416e9d42590dc69df8a2be52edd6a4ee45261ae1347eca09198326519d55d50ac8379fd0d54b6719c188c263cb2b459982c0ae51475bd2e7506fd67a31168e213833bbdc91442f39e44779a2e69f286c3473fe9423f39a2f9b9611416513e8ab9795a91dfe6d6794d17d55306e2067b089ad03668fe546778ba1ddcfafb438b86d51ad90a75358471b5eb4225a76e2b65dc0b342612acc9803a0cd51cacc0e579ca11e1d9c7bd8435d181b5527b7bacf73bea226c33cd6a16ce659b34867e45bdb16ed5d56642798f9d417861ef6259f0bd7c00bf0f6a4852aa661b6e1a1610fe667d0b2a54eee3c7a7c7d631b3c112d55af9b7bb000d0cd785715ec1cf5782152327f1681d623951113c09202014d80eea3d0017ed8c8ef8ff8791b694ced3f768a21fe9e3a11f8cb9067b87e1a5cddd903df9c5162a2b45e95129d425b6c28262895177bf303b0899f3936302ba57057997a4f0453d7b215d50d41dc8534f2861098156f40b90bd8f1141eff58c73a4fcced6cca96d70e6bef2d53ea64663c49f924ab8bc63bf72383762408de270b068a4b7cc5fae10d6e544929faa9b66bf9eab2918e50988430b432b641c844580880d4fe422c34ccd015ea70811e632c1dd530bbcc9eca743b4e52aeb28bc29d8985da1f55040a26a5d1ddf468b36325169e7c6d16fcb46062be13ecbf095cb13c38741b6c3d47bdf7771b5343d493a8f2937075e137e9bf7768d6adaa2e05c0b85155dd88be702cdc1e1a052c35a4a9ea8a930f097d836b0bc02a1cc3491949b52ef7302d4ce5971bf47ed0d25e127ec53ac828c85c6b0b332dd24547de15621b02f1eac9ab89d4110ed2f6d7fa15d4fd0ca2fc5d8a67f419dab18fa4d5d3956e6649858b7c79c6d648a29622da9e8bea3febe7a370a53a48c4fac84972de7e91c0b5ae1b8449d0f87efee169a78dd709bf01f632db2eb563ce71b752bd940719573a0534db75618799c61663605b2bb08952b0d490ee974f1d2d857ae5ecc083f5ca6aa29d37d8d80816b7db3475d95f1061c55478754d65ba5238c51a6cc046e977fc454fb9b576cdd097d40326f37d025e1ad078f7771253a1d3d091bd1c5ba4da2bae502ebf81ef961f0154f9028a6d3a7a5a309c55a50339600f98a56466517776f28f6442a2c347d9a0e665c83922b0a55f7160679b72522f008500309a8fcfe98ba51bd802c3be43548ae136960f8dce02075f86c35cd9ba95303533332332b2f7de7b932de596322599024307910784071ed675d9679c23b14af32bdc8927c91ca92365139cc671dcf723d32cbd59e71b57613655f6fe18ab6cc06c9c76556de3344dd3348e55d9e7015671d79196944d701c52b6cd1b649bc66d5cc66d9e75da0db68ed3b46ecbb22cdbb26ddbb2acc3b20dcb7eeb302cd3348efb4cb3d7e5b638b3389be03ee332ed058ca7df6d305e685cc76d56be66e7e5f177be1049c8b8a556cf8bfe9947d9ee9e79483c7fd065eacb6780cbd42fda34aa4a9fcf3eabb5e479d8e9f4d9f090cd953fe50dfb46c9b1b98e2d8905fa59f6ecce7277777777777777f79fa1b98143478f1e5a01ed95068896899146fa91e55762bcca09c68b4f4171f12d4cef7529eeb78fafa353a56ba6a4ccf75adc7c441d335ec6cff8705c199f8e06e3bb0791f11e793caabd6beff37b7e47283cfa95c66b167b6967fc6fb6f49cddbeb3dc7b2dac09867df1270be355ec49860542041120318b5bab473fc334164be3572ccbc7b02baf62637c66e3fdac4d0d663c07bee67b0f89178f9a62df44bca40fbbf514a851f4b3f6bcd3a98132fb2178b32f6c9b0cbc322c5f4dc5c6fb168805b2c7361fdabb6b9a8a2643060ddb42434433ac1be16914fd0804a358259b360d126f26c3564d46bd2cb6856c0cdb44b68b1aa47fb26dd447f4536c23755283fdc48958b7b17ee3380db2725cc7771a2cf25937d228fa9af5233bc4eba5378a4f7f6c5cfa6134ba543edb1f1aeceffe9e52ca066a30c8092f8c464dacb8f3db281ec526f3ebea9eaf340a13665ae6e428fad5a7612ee59690e546ed19a56574388a62acc256dbb3e452963d8795341d2e23851a459fc8a8725cb776640967b912f7e914a5943ad0a5cfa12fb9f49de5f4c17f16cb59fdc37d52fb4a5f56d284361ed9973edbb4a1e84f5ae6c299363d712ebd8ce45cdab2738d5c5aeb9655afd699ac66b5d65aabdfd4aea27615b5aba85d45fdc9325d05c7546df3c1651997655a6d2310e7d2faa1dbd076d2c4cb5ed33c4cfb5a08db786475f3917d3d54fa266a9076777777777737dd72f4974eb59eeaa5bd57b9e349eec4911aa41e135e78dd5cac232efd0b675e37cd2a2e7d953f1c94755dd6c29db4d86950ba3ff7fe58a9f4dea5efd277e9bb1fbbbe6e5fb7afd9f7fc2831ad03429786cb4c3ac073b7af3837beb41cdbebfdc658b7cd4f54fa0d5237fd13cb44a4158799dbcd477f34ee3d1ac43acc396cb3dfdf8c8d87775fd8fdf632361ffe5886030edb0ed4954e9e780dd4410dd2f8fd25abc365ba87a769c02ef4dbb60cf885feb4cdd9de6cdb20bed0c76cd7a08f484963e311bf78532a95745837441ca9644ba5922339922339526946e97acece2fe1348a3e9219989cfa61c12b7de9b7cf7b7b1722af3f90eefa5fdb5baa04af3f7b9e29faa196892c7b5be5b6e976e5fe371ffdd1dc087667d1c751f47f92084ac1502c8a47d7755dd7755dd7755dd72563cb71451bffe24d58fa88d3206d1ef0ff74f23c6f1e9f1b599115595964f595c5958d47fff585dda77d4635cecef716ba8208e1952c668558211e1126b4b2f9287d0b750a6b56318fd2f7873f4c2f44bc2ddeffba7199e6a99ed771be0576a1efc2fa15fc42bf858d3736e2b8f785b5761f3df5973ec4be146d606c3cfa31476a9ee66117278ee4499d9ab2659ac751f45b5a0f0aa541309f15b26dda88b66155a96ddaa66d4aa52cac2c9b8fedd3c2d27bdb8eec75f8e17d3fb42fe2f4176fa28d4da756fa834809e4e4d267f9c3d53b3d68e3a7663768d19de45cfacdfcc9a6f7b28ee457b816dc09cdd1e132fe0487da5cfad5dd5ff3a2a3a121affe33ee2b4ec9187f77b1f9f0eaf5b3e81e6fb65def9b76e1a0518f094f06b12a5e2011e9fa4fa7fc33c91fef54f5361edb273d243c47ba6e2e9c4eb13a25a3d154e979091b5fe324c34b992c73dd308a3eff050296712447a59a781a9c5ee0a520bc9288ecd16d8b8b1ec032917f60557d151593296e3ab41079fb8174b7bff4b541fadce623fbfe84c45b3f0fc965a48602735d2c9c9b9c46d1473273e4d20f61c09d4b5f4a29258d8c524af961c1abff938755d7a53f8f340512aff640a7259e924b2792700ad5981b4e1ecfe8349b5cca40743ed9b2abb57df6098957fbc218b492bd945c3d17127b5df662b10b7dcc5e47b00bfdcd5e485c390db61552af7f3e8da2d74ea3e8ffd4206fa8e8a8e53272a90e7d976015bdf465920462955fbfd78da3e84f7ca1df725784c8bb3d90ee6e5f3fe36868621a8c340d466e90caa3a0d30f0cfd963e2d27195e4a0b2efd70bbfd9365640b18454bacba300d8bd8737cb11eb164db863137be34c2f4975c5aa2255aa22f7ffe47c3bae6d978688f7d59d4e44f5c9d6ebc2fd44a5f387f745fb7b4161d41b0900cc5274596f4114e4bc893fa56db3c3eb6af9f904d87ecb5cf6a686eaf9bd91cfdd55e37170eab51f4ff4f9ef77eb52efd8ba7c1f9f59118c385c32eb455faf8b541dfe147f6dad79610f16e5f1fa996a7c47344ee5cfa4aa43cfd6ef5005e3c7dce4a76e9c75e7c200c1179c30a9241abb1e9d0df8fed6ba2eceba19290d4be20d29d0c756aa53a52f3b856513c9653cbd3772497816954ff8c8ff7730aac72f1f36515bca249f165264581552854f08a3e5902af2a1124f0aada148157f566885542ac52f9f93288552bffe4099748136c947073843b5f4ec1ab8a2305af2a2bbefca007bcaa2c3f97b02ac6cf973eac7af138446009210708774a1fdcf972be6c020a56c22ad32aeac497d983035e51567c99485855575327becc973cb8f209560eeefc2c86a5e15fd8186fb22fdeb3a6afd6fb19b67e66514fc3660000800d1b2e2e0108c0cb0b0c4c0d35d860c30d37c4c4e080432a2523333393430eaa1a2d317c1f0dcf6265a8d8953f599587614f8f626170b6c5a7a4bc66bbbfac56b2d8cfb0f269d8d2c71e9701823e0d0200002e16900d1b40412e2e4142010880d0d0cbcb10110c0c51510d351419d96083d1d10d371c358989698284030e484e52292749322ff361d327333f432487cfc146755303a78515c3f72a9b1a372d383706d6f755c73e0d1dabf34f4367c6b3e40c1bce4b9f867d1b6e97beb59f0d532efd186c8b0d655cfa35acca86352efd1cec8c0d5d2e7d191bd670e9a76c88c3a58f830d73b8f4636c28804bff061b720f2e7d1b6cc83fb8f46bb0214b71e9c3d890a7b8f45f6cc845b8f4036043171bf2122e7d1b36642a2e7d00d890abb8f429bbd0f76c6517fa26abb10bfd17d66317fa312c0abbd0a7c19ed885be0ccbc22ef459ecb30bfd15dbc22ef4552cc82ef44fd606bbd08761616266d8857e0b4bc32ef4397b835de8a7581c3a7ab00bfdcbf6a00076a15fb20cf0815de8a3ec0fec4259d3b4d2b6c3af1fc964ab412492057e4a869f1f7d5835c3cf8f3d60d566024e8253595c39114b2e712395608113d1cfa89414b42b72062b835d914f5734bba21ddde94617eb8997f5c4a28be5d5f3344c7ef2b1c71ec3361ee46bdb0ef95a2c52129168acf27ebe648255dd4fd9698f7936deabf3a4f3acacc8efeb8227445e2011e962b2155748625186511f325eec334d2bdd2c01df56ecf473735f2e33b9c9b999a76554d218656701be1d52a1438e9a574e944400df9e549c876d380d58a69bc0a8f931c4b0b2e2c245673ce3f9fc04b52ed68a7f1079e5f8c703bc97923bff0b83475997559a24ea54f7f3a592961942b6e449c8039ad3f34e271d0ff85cf032130fe8dc8c9b394a2e1ca2e33217cb5194e5a8f92b34de3e7b0c355e7c38430b241eabb00fe5933bc170e7cb2097f1960f4159745fb6dcc7e7c973d9aaf185b5e50b6b0c5fe87d5fe8d92f3cfd179e7cea7c75ea807e5384271eb15c262661d47cd6cd9d1fe30b9f3533c312be082729583d60296197a9d3e40e4171e74f1f9c6f9bd313cf894e34ca828a47c269e807777e58e7177bd8a5c7939ffd4dd26db9cce446e8c6e6f2d53e3369a66d07ea76ef460dcea2062f56831307dec47ebe4cc22a1eb04cd4798253d9cfbad352421361ce1d2965187b78c85e66eeeed1af7685be2c3a8037712730a44d0b940f5dbc6c49240dce593f6fe5a22dc05bdfc555a9ca09c68b16f4bdcaf78b3a40c90efaf225e581f20f8e0778bbef3ee5a3ce4e5c451d9d4b77ee7cde76285d8f6118866517a7d9ee46cd729add34ab6936d36c49b39866ab66a9662fcd4ecd4acdfb82d06c6b259898ae0ed12fc402babde2e5c0e3c97262d59c93851808ab11ba8438dcd97214cf9ff4fa92a761358b975ef33b6c5eac6772cd7639e5b28ccb352ecfc0dc6d3a642db4ec69485f1a5df9852d378896ebddcb7637eeb04be9bb7b592e89bb97dd84b67b59ada5ddcb668e93ddcb968e4af7b2d812ec5eb676917a2f4b9f5c4313c9bc9795917559bf41b04be96fb40ebf97eddbc22ea5a7f166295ae845462d93008983800fa54d0f1ffa131f1fba930324e0932df921e0fb1ebe938fefab3788f6402c70b90f531efb0cb3b22591685b0e0c5bc15e8903bcb42bd8772fb107aff729de83570691b2e53207f8624fa3e6d7eab9f842afc5275ba62ffc8fbfd69ddf25c1935f7a2c84a15521e4d5f8d6af5f9fd6a7545b0922fd88f3bc665778938fd92a87e89f2716cf0977823d2738616a6cfaf2d2fe5ae4720c44cc213b3a2211450956d0c9eed9176bf311bb7ddad8a4dbc993b6b9f2ebf555ab97dac8e2550c01bf48551c01bb481deaf52fe2b08b7c0f055e1873a394f2a8ee74c4e9238d24ac9516f1e4e51f43d08a24b832aae0ca08832bff1ae284b71c92b5d8ddcda403463d82de7248564e83f18b38280df6f71071b6f9f1349d1ab44083f19b85fd7025f0f8e327806b66a87d1b07624df75d0fde5784f7d7a6837fe6d7af70bfc271cfb97f40e687db0bf1abc405bc2f2203446451e3bd11436abccf8816df6d1f90f9fe3ec5950d72eb62f57f65fe2861fa16968822388b9a1b951ad3e701efbbaeebbaaeeb3acff33ccff39e033335de13e17d9ea3baebbaaeebbae7c04c4df779ddbd35b5c20d6e8003df382deb386df3ac2b71df6d734e6cde6a2592ac5d9c37d0b86cebba2de3322ee334ee061ca76d1b97711cc7655cc771d8778f715c86719f7dd87db66d9f71df611ab769b17effac5de42637e72ccd1297c9b6520a56719350064daed6c7ea7752d3ba5a2bf72db9dfb4f8cef96bf5aa5cc675da57aed6ceeb2ad675f531ef0bb1fadd2537f7d865da949393a5d20ccc567aaec465567657fdb4ba5dd7bbd6711997751a97691ae7eeeeeeeeeeeeee9a5f1bc76d767eb4f3332b3fe551b2aeebba162e4c1e9682e2a245670af23317dd130f0525eb56cbf4de47281f7615eefc36eaa24ea1689b0f94efbaa8cb361e282835b21aac9ee41139ddb464b5e6699acda17d276b3d11214ec12f404111a941d39b3e7ba1c94e99a22926c97477b7c7c4a7052fec224528b5fe9852acdf4c4525ebbce085f127feb04b8ae6751769d2a91613c9c1ffd3e9c7a77a444e37cf72502725fe701111a6106ad4fc262723a2141b7fd8a5e5799e77bd28046f2da98b782189559e664ad1ba8829c994644a327d88457631ad0891d7f440ba6bfa9e3f89f2b541d3a354c9db0ea60f05e5bb0f05e5e727fea07cff2098a3599ef9f9719f96ffccd0a5b8a68f1fdb7c98bef36115f3307df285c46b6ad5da7df7857cf4020549171515b10fabe89def48bea402b577e83ea1fbb8d0349bc3f4addb7df7194a37c12ef39b097ee939b55cb331c5d25b77f02b0176315dde5c48c4357d2e655eb0caf4debfb091519de6bd8a8ac9d47d88dd68ea5cbaee8174b7fbf84b9b0fda2d9f9fc9eaa198537ab1ed40dd2682a1d93642d244190cadb342ea35bde732eede3539cb71fce6a8c1268d8aabaec2e6cee9a4a3c050b833e5eb227699dfeec3aa8b55ec15c9f3a413913bbb5b27a23bbf8196485fe23e3ae898647a94e74e99be2417b65b487ae28f8d40d7ed84c02ef3a314fc12831c35bf95b4d7ad6efdf09f06e7922f5ef7e9d44af741e40d3bb5d27d5f13759dea96041a353fe2b0d1cf44418a3f39ad562b4bf181baee31e1c519c6225c1f282f7f3aa50105a1bc4c49f9c21f292f44bc51e87e7e57c1abeea78b1632dd725411ab4c3fbf8d3ae575ebf4844845b1f2859662e7f55264ba95e2a57ccaa77cf8291f823743b1eed3e0fcb2e0cdef074a10213ccdc61b9f74aa7e2bf5b59f2bf54bf125289ffbb8005bd8305909b00b5fa10add9a31a78924b5768c78474e3e51c99d30bc23c3981cf7f272db0704bbccb7f1c625ac2a7d3a609f10f1b2d1adb2088e9eccfdf4f2e40025edb77f6437abbbbbbbbbbbbbbbbbbbbbbbbb3f19dd378e9ab38bdce9742586ca09c68b1414172d4c5ec76d5a56c22e5b63cb88dd2c3f83c56d107f96ef1b97e9eaf1c890d4ddfd72bf323fc953ad33becac86ce9359bfd663522885cfa2cd53d1e6dc5ce3859156b9da72ef194dc89e444e343e7c29d4b1a35bf7adee9d44bfe0bfd87e5c35ef25f08deec64e3a5c1f2dbe6e3743abde4df78866da0202119d6778a346abe6415e53959e9b1dd397f165bafb4f152db3f2bb681e6abd83ed91eb24dd4e0fc17b68bda08c5f65193466a279dd44f9c88dbf88d3b6bceb7d677dc482f79c2f3c6e994fb0da30c78e8cf6ffb03108deaefee0fdb78e8250dfe384f2f694d4ae9b7f3300f4ae9773367f7757de1755d2c7dda4112279c48c243ffe9d427cd87742d72fbb3d825792d769992553ddcc32ff35b3c160ad333ed3354a45116bfc822144579ce7f00af6814318a28dcece93b805794890faca2f1f41bc02b2a85144db8f419c0aad2d35f002be1d25700abb0a78f00fa3db0ea7afa3cf08a0a09f56095f6f477f08a0ed1d7c1aaeee9e760205cfa385895f2f42ffd1b2f00025cfa34ac6af1f473585dfa33ac72f1f47190b9f4635885f2f46bb8e1d28761150c272f97be0bafa89324005cfa285ed124fa3578459fd0b7bcaa446cb0eaf4f44156a93cfd1656adb0d8d0b8f465f0aadad057e155bde1978903e3d24fe155c5a16fe25565b1b04ac6d33fb12ac6d347f15865cae92efd8d5735873ec6abaa437ff2aaee445e451d7e994f5f6395f7f42bab5835e3ed5389fade7c5049e5bb8cb57a1eaf64cb4d06199e7986199e99061a9e79b57a661a9a671680009e79000378660210e0996fdc78e67b9fb9a6e6990b508067c68123c733e7d0e19975d8e1997778661d3a761880470ff0c3be3c3cf38e6736c033f378e61efc023e0f8fb259c9d2b82cf69abdbeeb9eb329dfc272302c8acab3d8959721c3da19cf830da3ce8e4e0e0be7c6a6127992e404a9c9915111d190501090144c74681451dcb9d339f0e2f5e7ebc7514591e8ce135663cfd4697045fb207247fb7880577b6d2ea958bd589da761d7acd7c5f2b06b5e75ce79cd9ff90382ce83a93375ead461d49c296099cb07f4c19d4f9c9af068707d5e10e9dce9d4ca755d7f61acea9d4e60ec99e1c3b6d93e6c233a22cd26722145a0303ec1aaf93109af280eeae7538f6a94522ac3830ffe85e4323de4387135734e8e747328ce75b14a9fcfe573f9d4ea79992c728d07dbc3f2b006b06165ddf93bac0ebb830dabcd9daf83cd6171d802d81a7bed0d4b003b002b001b52a23b9fc6ae2c0d76062b830da91494098de2ce6fd00601800d250eee7c1b369449ee7c171b4a28eefc00d850f6e0ce7fb1a1fcc19d0f634329c59d5f830de51477be0d369445b8f36fb0a144c29d1f6343b9843b1f071b4a2aeefc940d651577be8c0da514eefc191bca2adcf939d8505a71e7ab6c28afb8f36bd8507221945ef8e6bf0da711d3037786e0ce70c8bfbc3fe3c31eeaf19e7a674e5c5dac9c3b7f8680571408680438acca3cc02b1a1404821b56d13082575448a80377fe9c3f35c02b3a8bb8130303af281151164f5875798157b4a8e80b49acd2b8c02b6a64848513567557f08a1e1d6de14e2b78459b34c9c29d2f9bb0aa0abca248f165225de1ce9747ac6af1f3a5142615ee7c6914f3c3f83438e28734f19b0687fc1f8da353cdfd386ed0441a1c1d230d8e3863a3052608343038886ec0e820f28186a6d584669ae02311181a1cddcd4b74f4b870f490b247a7a49415870e5ed2df4376e3e8d137626cb4045482e0858c648125420c11bfe31704100dfac7d0f142a912041bb747a77a30e2010207a3fc7909132388442e18481b0c68d0631a15637e28257dfa3fe4cfd0c48f699026e6c697f173af1f63661a74a671a5d378acfcf900d3a04fab80066362a6e01f81b8eaf757098217e343a7523264c55c8f6194c7c85311663203a12bbfd0c32efbe00858b88c34bd90714b0e76d0df46fc79e3a7f9f7bfb7340b14bc16427c900aa6626803317072032a4ca001199e385a02055c68e20338a889efc507e37bf14f4419b758e1853337c61db73f0d33ed70c2d19d5eccc707e37bf14f4f48b242a80ad9f439e50b56e3c8201e1bdc10e45a4c64f0022632d8a1b21fc508b76fbbbbdb6f54ff8d669658e42088d509ef081fa4a2209c20272a932382b00083243280c211474e180c47556052041eec10c1a13b60c26a8980650794c5bb310225d88142169000021f2041871e6ca0084b7660e0035624329fa0b17d52edd2ae2d878be74e458c5e35fbf0c4a53c1b31edb199c1eece784bc09014b434b0851230a901129e50c38d2a7ddbed0bb5d066ae993cccc0f5dead5502e55b58256ebe06e5031b75e796c323f2b45a19dc9eb78f426856ca6d086e7bd736ed0b33704b9f8c528252ca16af2f18d8b8cc048922ae77998908b0888206ee041b6072c410124bdc1697998cc047eb14054ef747ac3d2d9e2231b2faa6c1388405de6d8c1892840970a8b8d900163920a8999f110c348229b06200051f2b9ca0467e3fdc246e08227143f639e2863cc4ba21238de086f146045786e086b14786277052d0c4113a1cb8424df8577c410749fc180102079aa8e120126861062258c211aed0428d7f2107c5e009461f38c2e6092e78a1a6bf9a9d154891852c1c018b1c4419ec408a1c259490c4889a30ea0841eae9a10209269298414d185b37e20c1141178c38c112596c60051ee8610a249020410b8a88a0055f70c291245918c12249a8263e8ccb0cd919820c9c38d281a12cb4a0050556d0a1c212273028aa89546091051646c8c14d914d4dfc215c86a11045912f50d1039608aca889439cc082091ba19ea29e286aa28d23551401029f0f0425d5449f7ba3af2ca69452ca39a594524a29a594524a29a594524aeff4c48e37dda59c3edd5d4a97d2a57429dddda5113773b2e68c485adeacd8ac2576c03136c0b00d311d4304056877bedb7e7bb574ff0cebeedab5db62b2bb65cb96ddb56bcbeedab565dfe8d89d43ca8fc8cd955f1804f71017f3525684552c47edcf3c23bafd9d39c1fd72e9b29b8bb42e49498a1c422dfd44e3f8f77b3f61c3cccc92671fc529a3e43e62d93d8596b2dba8a7d0477d84a4032f4a969e26999b9b9bd9d9b9999d9d1be47effc2205a076d05b39c4e57a3781ebda897b05a72a1c72ab57ddd85aa80752093524a29b152a66dcc723a6919d7289e97953a79f910aee0d336bbc8af241f9332f386700553564a22b64f66399dae46f13caac91b63838d6acd8ae8f64a99558d59e5609227e5c6567871b2f466e688710c4385213a554f27fa4374eafa533cd5215ca084676666389e50939b04c1a8189f48729a2bdf691a945078d2079e3ec32eb289b8120042075e387365942f445ba002344c8057607c912fe5a936f12bdf064c4ca77856504a1aae9c4534d112af8669f08ad7cb4e5d50bbeea5b5c72a1fd885012d2fd4ee875c146de2f511e721c0423233403c80570a882fd75fd7cfc49957c00573fab93809f7dabc89615c4425cf6795df398518d8bce00557bc205ea19f5b9f6245b78d34181b68a8c128e3f6ba4abceedf59ce6ed653c2ab4f3f94add655fa53e9c3be1656bf26fa5aa841df6168a751bcc3909106dd993a913f611f62170e78582873a4ccf6f15d49a71c09a5a1f3dc185feae474aaf4f1e54e11565d1f5fb6805599f69905d295a2bc71be37184be2780b49a36efc65361f72a246b5a4bca91fc6aa8cebd3f8934a68721626857c7b29d4a93ab47d3f781aecb6e0f9f38dd208c58e74aaf6740a53523f4aa20683c848341487d825fea02d47d2a91ffe2defe9941256c98fef50b0aa04a4bbbe30722ea59106238f3ce2022fd4da880fe5841209c873c49f4822432ed3516054fc2bd42d785fb8f1878a882f91747cd92292ade851a85343db96c3bfd22fb9316c237ec4a741250df63418bf8b5c261ec1a8f8583579ae12695ca0ee548c5f28dde587f21312afff0dc7b08f17fb7ef8d30fa91c6a1996d4625f7b6eec14df5a6ba569d0a57ff51f98f98819897df3e1b57ae94b3d380b61cc752c6ecce2c60e548051f1e9c78006fd9b5ca9645776c8ec8b2c76892e6ec46416378cd7b19806b1a7ee58fdeaee37da81e8d4ca8e7a6718effbf083043a1523069617b3b8cd2d0d6af1b397ad4ead949ec539110ad99365afc50f79d546e20b8b55a58fcf1e63c4be5a3d2fb2b42fec1bb611a0cb611f673330a466935f2a62fb0c0ca9d95eda901557535cec23112ef6d9177609e8625f38a475b7e7eb3d6cdff698a51820729d3e6f09e09aada1b851fb7c5074f9dbfad020cb221fa2758d234992245192248992244aa080c289c911a73d3627ff46fb95dc929b9300bb649f4939d3329ea326d819caf3c3b8b8e1a8c92ad37b3fa4acbae768b2dd6217244243f466ae55ed42f199995dd7994cdf99be33d1ef505ea2bc44f99b19a854ac180a8b9829442303000004058315000030140a858382e16810c691b6d70314000e7c9e5264501e4ac430c9611432c8106308010000004000400446880300022e0327beee649b364cc30ac27550b78f6988d48537cfed3a9cf0e022304c6bc351d288346e6c29071d52190e9c7e2782b3f71602bc8b01cabad8b6df584a71537c98bb2aa863bc4295aec2a6e89b3d540299fc6a868a39bca219081d9c3de1b493dd84cecd65164a91c9a1b7226fe3dd9d58e5b383abb0a87448f6895713b0870b240448f258640598b64276e1d84e143199509e17ed292a0a59087aba5be6c8771c5b18ea2a1f011a86f38a4171caa970b2db391d34eaa0c1562158548201d8ea720a387bfab3916222ab3afe9e796b140a650a26209e528e0450ee44bb21fda011624a330794163e09a194af224626ddb5c04bac759d4c413289de27e19342454da831b98fa0c1396988a0b93f1935bc7c6a0147c8ee87beca9335cc778f832f857da994b1b507ec553dfe6aa8eb35e55b165f34f1adf059f2989c987c3661838fbf43c1c12800e1568c7170262da8a561aa36764319696c28cc1fc49a3ea6a174b8b50c5684c2a42567267ee80dfcfa3135ca690b2c16ccd149ab0e1f0bb1c0d4a645148ea58f03eaf0a234cf9502a06be3e152600a5d3a32f3dc249508cabf77541ade41527d8fea8ada010eecde0af6aa22953125e55321f488c3a1872606c06ca1d9067857f00b41114576742eac55cdf297eaeefd8effbf47e32fe60595ef976d94dcdd6d32160cc43647268678b49335ed4d47e412bd2a19df356b7c1b27dc93f893d143471acd8bd88836c4e2432db18af3c127b31d0856d5829cec93ca8c0725e46e84635f58ca5bdacfd14e30391486e1a72a4632cdfb1cda8921a36be97c6d52dc1f440b67836ed41377a301ffd856fed724cc07d13b6050898824ddfad12f608bead836365e7062dcc81576ce034aafc690aa017cd8bff817f10c7da514554552e4c34fdcc3ac9a402b8be46955f19db5c37d27892ed6ef7f6fc7158ba4594e028ea151239e3f7f46f340898788eb9ec517dfa6a4b03a03eabd71792a0957a107a65fb9dd09be53451496c6d8c7f7f219942cda8f5c9c6a6cfaaf91c49f03d43e82ccd1ec0ecd214f51ba94ecc473d7551feb002e1c3ba3533bdedaf012882893a9eb55bfb1c06d15ddbfceaf6263e948dc0f247a495c446e467e844ab8756425730c62c9d2db466f7bd58d21d79365ac363b91abbe37c2dcf3c4f8ea738031d1244fa2e80469606ac29fb0aead925436f1403ef58cea1eedc93358d00a1dec0359f23f09b9803477b3039333ac6618f1ee1e9c0612e16e4915b31e79dbb2fb83fee0284ccfed75f3c87d29bfe224b544ddaabcb03c5a443b43190f4aa9f1e02047e78bd68748f991857648d88fee5a1a6c5a002bcdd7eb33e66d957e8c5e18a97d73d74c4d07e27d6d4e4c20189fed7014617b8cc42e8c28750546d7a4baa32cac9ea68b1776ef020a68d5eac3b55df72e059abb007d46f38de722502c408afb6d5ed6231cebd033296f991de0226b1bf4db55e834a93ffbc064eab93261b007e68501e1e707b167b6a8313cc22d2de8ae7d12b81e410ac4b2b4bd6a2a6b86cde8b4c508f63c04a625c88d6199e35c82c374f8b9bb95691fd6519706cd15f3465b3e24ced41f2991e3632cac844822917beee8da9e6417f5f2823cfac24890aad7668a67dcb2f156cd982c8b9c0c5a628af59587507d58858d967528cc49bc04075fe000f25fecdcdf0252e647d590d695d965f1d68d61d793450f123a3fdd634e0a6aca1373a6bb927ef8b83e33819be0cb74458dd9125ba5db9fa095a36e40f54616c17d8a6cea50af7a7fb37b66756a10f05e45a5f59384787655330c1d6ed2e4f2364577a56c239ffdd4f89238b45e333694f8402b20bdc4927080ca8532b3a5d5a055a08428b01d45264bbaf4a4a597c84f7a607101ce109e3801bdba35e0948a5d6cd14d774b44c17159fb6b12e82fabb2f169c5e96de9696160141345652f498ff6d094e66a89109fd490499a95002d493a1898c769fb090d1c8a99c25c7f1c4cd4e7b607f5985ada5d0f44897025eaff1204e707ceeaf4d4066ff2ee0d42ee259a72c4ca819ea8d796e8c17a191dfc1a584ff74c626cfdca712450cee6d0cbe3015c62cc347a167a678a8fd137fc9b15fce0cee0dfb8bfac067ff66da037fbe9b42a850431387878c40e292df2f0e47835128bd9b69df5adfb7a4e411b69efc99b075ea789e5f8e8d410b3794c32d4e6a906553d3291e74e04efff2d862b971f09e8e76788cc9126c982098a2c8a703805dc49548c840db5329ee16475761cec4a99e247fc76f045acf6f20a8cb65ef271aba4975dbf0ee9d1beb8ea0f151783493409e434f8c0236918801ef984a7c7862b7ccf0fd4d9d876c1d108bba7670eeba58b1d30059299f82ff428158efa8f35be5732150b52f03fe2d8f9a3d0a2f3c9bb14513f48badd40530e84b427760ce7ac0f815e1073a3cc02ff20432f563d5a642aedb7ead15610a1e2119a8a84046209d5fa7bc50b2c6397007121c90304417fb625141ae96636ab2958bf0e56aecf82e9ee3de958aa4c6703c7cf0129babe9b2e85355ce8961b331bf86c714e2caac3ce4dab0c5c7f2416f3792f8613eaf77f0fd2fc8f7c0015be57e7743d8392dfd1cd615098f48fbb5a2cb76250ad613bfda22055d825acc2b817079eb1e0640371996f80e3dca43a8caf2e7cc470b5d385e64815f5b4368d8026f9401e91418219020a9116e4eb06fdd11e04c278cdcd2bacc61dc54da7a5507c814f645f6f8e5bf85a5f6115c448900272bbe49267891d692c118847ee77f68af99b8a59884e5840555eaafdf46d6f300ffdae85d0caae359161fe2e5c610d2ae208fc7a2ffac1d13898b60875b0219a3a63218005e19beb237db9018df615d618b101e34f08e8e2c642d1886e7cbbb074529f5a394b4b086a49c87bb349426cc726a9a09c430412e865e31deb28844cb44c70189a3dee928c14d7b13ea5f638f97538f2f4264015f50630bc074ee426599157c0899c0174108e40822c3a807268b6a506bf2083fa40c2f01f8ab740effceeb5029af22a24593bc5f0db65c711d5c6446a7ea244cf2d84a0b1077daa8633d732816c2b517ae243c0d1b8fe9ababfd925dfc17d1df7b0d80b80a3bc4214a20c955b09f1fa82ea09ce353b9a2a479e048ba616a6fef8ff6ed0496619e81656691ca6ef4004ff2153073ccfd891a24a08d3e0d7376333cfe8f229657b7fc4e287442c6da37456f840a9a8bf4a8bff107e441fbee6f1c9cf70e8c87ffe14475a9b01111744c6c65dfcb1fd134306c9a5638bc19ffb0c033cc3f9723ccd97734c76e9f1a3085881789f1ea0a15f9308809083f44c63dd1609fe0cd518b0e5b3b49cc6dbee9e1ace438d9b0718ce1c14eac7074ece4c875a753d07d65cd1dd4f04687c3343a18efbfdaee17cfbb8619c4eaf8b5c95da04a99913ee2f4e5bec880eb9938de6908ad7ba53dfcc4a69633bc72402520e73fb95300c5717ab5d4a436070a6b858bf14e97578a55665571f6872b1a1bc8e46c43e7073e142f1aed3dc45f0349fa6880d6651cc99d1017dc1192d3217b4e2b0cc97a35c9f505ca450f0f0af8c0086bad8f18291a4234d07809ed82f02bb7e3150c089baf806ec28ea37a6eb95d90160eac30186030f65f8f181932bd7a13662758a91f73c69e0c23d41a32bd01225bc5eeeaaf9c4f085050295fda51ed51522a92100f4d0745f5f5209f3ee0b8ffe327f40e6af81064946af24c5ae0a887aa1713083636b35dcbc207daac393424f18f17458608ca77db99a719a81b54982c7a379fc895ce15c74dfde7bd9a3730bdbbef91d59bf6fccf4cfdbf775e833763aee3b63277ecee3781bbae0d3dcf7fa80554f1f8453ef1061475241e5314a21c95c8be306465751f2e7c8c24252319f3c8643401d788b8ebb8accf17d54eee6503abd39f0d2e68cfb409d161a98941ce8a2f6e6b2041d4146c7dec8a3440aac9e436cc09fb0b143c88b4c1df8c84f20a066de8933de9db13c47c2eca51b6caa4e77487d69abaec818bfe464b8dcb5320eabe9becab4c063566682ad1277fb947b8a17cac1643d9f22b3a2ec694cd7fc7fce42dacd48a4d93b0e7e991d62854a040b5547115c22ec0c674cfb280d2e00aa7595d6573ed19d1a0043730d99237b094be58e669328f61eafb00a396a28340e7d21235d499336342b47edb0df208a918a145b24328e5b318c9507d34bbd8e1bdf3a557a8923b37f6356276b29578053e33429b0691b3f7532b882eaa59f8c73290de6df5ce685ccb731146000c0d4857f59e3e596e81c6bd1462501c90967c469123307ff3513caaf214e9ae3ce93379fc774dbe9b8d50e33a9a37972708afaa9ad75bf2de01b1c0f19cfbb3ea7ea0ae1de0a27f527b0748d5bf0f3deac05d687a289d2a723cb160d683a80d5f5d19160698f0fdbf4f7647d615691cd17e9a55659fbdd243384479f129d5ad2e26c4e3cf3800db51565e1299c36b5d7ddf33981e3f222150b667a002077ca33eb00a213c11889887b47a2e0ce30e8eeafc1b8775ca2af7d667daa024d3f79fae991eb3f9974fa2221d31ebfdc00bd17c85ed1a5e9f55a91ce27a258b1314c18a39e55690cba35e417a765230907e5cf187c3dab0c26be785af85210b79dfefa61be25886e4117a619cca4532b66ba51cbf0d57dfbfcbd7a9205dfb643a3c02ef92f31b26978b5bbde081a4f29dbd5bfb400172b9de358f1e832b9fc13576434764aaeb4106fd6b97c9b82f762d85060fda3509806232cba0f51d00ae5efc265462b932c0eabd25eed460aec876aa49a1c2c6baa53a7a3c68a4af9a89aead70735fc882aa0d210a738b797e99f51bd13d1d84d0444ff1e5c410e21355a87048f4010e33b62990582490fa2cfbe1d376983da7bd9dfec59402d05a8ed46528d08ef4cd5a223649c6af450aef5f3e3a90ce90934e3cc0ff99c4c08ba3f2a57a7cf44c7d872753840d4c92b422a5aa56864ca816f07a2be5f9e1eb8e7fccd6122372f80ebc98b0740b41278b1b397d863ec3f54c694873eb3bc1f30918bfd3491e02e5ada0d9dedf29a210727ab8b030db03613ad55bff5aec3715b7860325c275a5955e75c67a5f727d1522f264a198a9f547c1b1645cae1446b6783715339fa2d89b72c60aa871f265d813802e3e46a4dbaa3720ce3be43ebd5a446f870c31537fc8028916604bc058618e2229e2cc2487159eea739a77b5cfce3ce37a2155f603855b797a67bc2a95ef3f1820f4ee90d52627aab059f47b44a07ef9ff829002bfe9cbb78e81f073fea2f95cd9eca812c548047ffbe5c8c2e4f22690d4205b629a81d0a4053fd165ba7ad00fa525025fe4f29020a732ba7ee4b1a90798939ec0ac02aed742f5ce2cc5bf691dbb27863d7781e1203c48afc1ad77de62b332036770dffdd6efc52446709007b47a3b67feb607d561f64b352afd32b7cc0d988986034fc17c9f2fa44a767c4af1f942c87828a90c1b3b1c26f3204446c4e35e032e5183b1963387037fc28e2f1d07a1fa341f03d55fbe587639dab3c151f17916b828c68fd4a2d1f61930ab979da3f0a2f8016713fa1c3f09412de8547235bfd751ecea23dac48a571c5aa35928131e5ec70b37efb29fda49771fc530a5e9205e959c9c24473db6c72909e6165ae0c003e6e49e5746b3d7df48bd534ea26f7a35b587bc0bd6f59f16a27e8bbf949bfbceeddadd23cd037b496286ef47b0920c621218f96ee152213c15fd3e23539ab8ac395503edda52c275ce7b2ddce59c2b16c38dbedcbf63c549c27277c80668b4c6ca3028a1770aa0ccd78f4b3f7a1a69c6f72c99ac47f275e8ea156fb72542b06e6b8d9f918071ae5886ceb6ba3ebdfad7776a209f2d71ebe524e76f616427bfa63ebdd025919d4604aa60fc582294a4cc451716d3fc3d735434a4b32add8d9959f354e6f5d15f664f8476bb895d67cc6c4cdf228c872da1e995017407e42546c196630f666c852a68caf6f566dc3d6ab8859212493bebc06e4c9ae178b0cf0892dea9cf08dfa3e33ec4cd024eab4b2f55f407abc08059aa997c5a27b6e40b00e6a69905e597bce40b9fbad2dd2a086f67c06492c79ee34fbbfc6d4298ea51f87b26cdbaf2bc0d8949c015d8d0e90a398f1f96a8b302ab0610212b67bbc8fe80fbe73dc19e524e1113febd877ee434a563cf7ce1795126a7fe329b1593e2a0aeea76425e6adc2b6dd43136bffa77522268a6b1b4ae2d8bea29876cf50b6a7646064d5306edeba87d5a4e4e62cb5af923b17dab9aaa374604cb0b5f35e753377da370d6ec53067fdac6003696c7af57466b355dcf12c974f3ee23583de2bddaf80e95dc5533e7972e0054a7f3ae8709fc5d42cfb07294c80634a95a420328f111ac73e0fc7380237f62406f2e353897b258ea56d0210f3115f0134f19f81b683f3b8812d01b237408bce7d684f105b3e12a573a010cfa5e904c14b8a5922db39e94a2e3d165303e104e8d0e4d4ed9008526af99cd5bbc887401de1cbacf65c1ce37f2724cbd64d3f48e0eea05a54e563fbf9e299afa3f37b7d7e49ceaf5caf71ce0faa57721b3fa5de31ad17659f0ba533eac0878271d1cbc2a972100e9050a63ed4ad8f2e9cec37e60d02ed4280c8fe2d82747e7cc3914769200a2d6f22bb951e1787ce78bf5fdb85020acb4dcaab562ffbbb1a3f44253ecbcfad48666d81271b65200ba8b1301fb3307cbaacfbf10272cd8a6ee2d19b286596894b66958eb71c7f01d424295edbcb7e6c7fd63c5d7cd4826c55c116f6dd222312a2c1d7906703b38a56697ea4e7d4b54e0a99848e8684f00d698a3c14fbcdf2dd48fdcd813cd4f9bfaa7190ebaac10fbc2fc895e439a587dc782c027ab73e328a615dba5a634eb6b71d5e361e7f34bd2984b951edfe06141272042fc33b507af69869c40bdc3dedb73a2ec5d8866c1058abadf9edf7930364420e6442f5c92fc0d22b454915b90dc9d06a0139d988adb17a35596dd7759127b0f67a224740f68a3b90c5ab3caaca268207ce790fcdb0bc22d20adc9003dabc726e6ba272ee887b2b29047ca61bb62f7090f3638cc592ece1267b9364315bc69e579cc72d41b266f7afbe91b1694f1cf31924d6c473b3319dc9275f5d49f895ced0373b9009ac9dfd3fe3ce4b333f4f43f2fe77cb508ad92a7614b8f83efc0d8d0120b074a09d09f93ffa264c52275ae7a8ac5cd1d8c2a74dd74a3b92d85cb947aec043bd801ced870d239551fbef41f80ed3b38c70885e1f01e09b2d6e20a3f8445089f01db2e850dede439aef54a6d60e1f323f514530eb59c5aab112ab24d0294b68415ceba1aa9a959d5a89c8188c0b72e28aff0c8e35c65545e37f5cac64d6ece8789251dc5b99b7cf97f683deca8c1bcfd717f049a8fb736cd6c893d97013feffaeba38b1dd8288453f0c31c76aa37fcd6b891381b22da49f3d561c0a7a4c8b5ac1dc06d3f23aa5a62ea20836a83febd0303f481f651aefb6d3c1458227711cfae1ab3c83e19e4191bc2ecdc33f889acf0789151111fe368c91049e2de25e0b597dfc814380f653159299a7c7d06e198f54659a233a3bc52ac6af708aeb4444afd46138bf61325e4f59cf234d0e83a90670ec9d9fde48154971e17334efc10bc882e9f52b0a24a3f45a412090c8044d1f8d2cfae952333b9ff6c8af113b8452bb50b5a29b12d83565b074f1b16e6f4a948e48f8062a1ba244d00f22fdeb0c31071b9122af978c47dceaa8c091414ff2c9dfa8a00d7af618b96df1379f5a60743a559c9f47c37cfc774d2dbe1d192a512bafb41ec950346cd9a8959ad69c22d4b929cac824ecdee625c683b2934b5c420fc77bc17fb07ef556654634063de6c1aef97a3b1179ab584c9adae537f33a8998bd8997790a634e9ee00beb4e55941749342626dbde527448219767eb0ff2e790ea801e3c85ec5d7a11b3584cb703fb7767060d7d958923aec0e827a48037596a7c18faa10093b0fa1c0f2ce9f6bc026bea82dade16810bd81d99e1dde7fa555c2e4e9ab9794ced35f6d4f642fefbe0c6702f0be289c687f870f64a9cc4c79847e9eda3ed81b1bf0e596c8e54e67d5289a269ce7918e9100a9c5696adb2afd7a2631cf90851c0d8010eaac52ac05da0e152b2cba84ddd034fd7ad60096d8d6f2f60072c731889be64b4b8b652944dbd10bf18dc1013450f02992cf5e990a177d7a0c924c3201168a51a1005c992f2d6ac66c2e9965dad027be6b2294dc9669a39868155b2270c62a9f7ab9732ee7b8f6857cd6ab1fc3fcf6c16b9f2d5aaf488edd0a522fe8dc283847fc15e113588c8333ffc3821e4a68e5683223721b616e4b3f0764873f7cf8f9001f43efd93b2f5eeb7e3579dd0ff85aec6cc4d2d4db797167e8c8b41ae3453292e5cd219d8ff088edc0cc7d8f5f39d00476bbb5d0e9d347e7b64dbc6ba17399d87e317b9da391fb5bd8b48544f76075a88b48779035e03fbb0ced9cf111c657194f38c13574b235a88c03059aac79dae394971a2ad909ab336082403580054a851649b93955f75bec005dde6cbd17cd326e888cc8c69484cc6caf0d68a15c0f22ac380b20bfb0066c2e0057c1a2620a278657e4fe7ebda99728ea16975b13e7f51a7933bb067d21ec7e30b19263459487a84704298555613eb1432ae08cd8be605db580d2f14ce9670cc9ab10409c597c91e6630d25cfcf9116ad979351558c41f7fe8b06321780b5bbe7521b6d86f079a7e3dcb23c77445614288b5aba1cd2951f542cf08c0cdc4e56a0b4d0e228342d2e25ce1b1ec326a403621f50b42c15b9ce69900f40585e7ddd7d91c05674b032e0b93010e7fcafcdbb377d72cf2d452b704457c2c3fc5e525ab5d853ed8f68f59fe91eebfcaa1071f2aa13abf6005d607238c43f416cb155e0654f9d1f84f9df7cde101bfaa823e8413298156c00d0165e55fb29e753bf2ac5791961a4a2d2bb2a9bda9e8c741632d60a92e113c36e4821dd9fbd7dd54efb95c097c845394460626f3fb342b303e4e82ed83a4701a8b8fe92b24bb0bc4c6729ffa218a98bba5da54dca0bacf7a9a0e7a586ebc866447aafbe34a5d4552983a5cd37249d1eff7fe7af31f4464ad040d8f393027d5a24e2b600acae04cdfe2423aa89e2690088d107ad0f080d1919cbe9a117bfe01db3a0b73fe27a11d334548226679893be01036c47e38980d1027ec89143f5fe58df9b9a4ace29ab20e1c8495438c936c97802a16e73bfebbb93b1f354571343f223f8dc85e1f256ebb308eeae8c225c36022c25884e93e4f5bb66d96f437d1e5a3b3fd2b3f6b212e05dc948e83537e431e535e6d238e686a3916b123a9e9071a9de7d6a214b144cf52029301c474dd90c416b7888f5f17eddade927ac280bbd2f1bcafa4a6f1a6dca25da962382835a64f863b9860c7e51388f735a38d2d4df7c66a234f7b484598f2e68b3cba557364c7ff3cd5957091c3711a0d90b84c847fd3ba1854e9074d9d8ef4ef6ce14a9b2bd2e86d61cbcb3d69ca79fe04cd6324dab402ec6a9c1fa754791c52a757ed18a923df1bb1e1107813eb7a8f3047f0579bf81afd233c9bff1b0df0031708b992f3f9a790cbd8eb7d8d993ea87946776a61f51bb287e628eede1887743aef9de1f68c8c60eac6326fe89eca737dfd64b0b396ac2efc72edc0300f8d9d79a0b2f1a668f9f4a05cacf29fa37bccacbc365ae7dc0d4bc7b51928fc1155274dafb0784e68f31098304eb7df479a69a5f3cc4b6603fa9f76d9ac5cf4d900ac0c6a2b90e416175c255ba79f8acfa04af8a4978dc5011a936cf14cd73b86663d72380297c9569d55d791a2fb398b9b73e4c1305c7f4fd1a9a0a1cb0ef222c4676b6261b00b8a484eaa4804f32c41dd000f5e8ba2cc60979958380a983066195b3f9275d730b92515c5be8a6d53aff81ab9e06cd85328d4a13012411c8f29f98dc9d6c9dc3b3c15c2eced0733f070ea786d0352743e4e9dd218ca395c5c2dfe624b476c1b2af8b7bca28e4845fd21df3569a5aa19ced9dfaaca636c99121be95f2b6c94fca64133fa72feafc6226d0acd1229c967bcba01df25e3c1be0dc09addaf65da4e3a172900aac12e217109687e990a54797bc781116ab669a0422277885ba3f83e2ed4b019a56ba0302a519e76eb798fc407e2ac90449f27f2e7b396b17d85ec3c32122fa9b763619517160d8d8fbda4b99c774ed91547f1fab0c52a57ef8318d0b92a87eda59a8599e32c4c98d454398c99b9ed1971ec123401b77f91190b1a07368a1c45aaafc391ec3b8e0dc646be938b137f98047f4a08bfb84dfe28c427617c95bb769d5cf2164019d6e393decc785e48246c383cd684aacda51ab206aa32ca42e902ba334ea90b100a13742aebc638d3c9860619744fff4f57b86107088a70c14ce9c8d9759ebcf85e37b19549518a8ccd4d327310d26ef05ea6c6a8977ac8c833926cfffac8ebc36fb7993ca9a0a4e2e3e842afb4855e3324b7cc1912978b4ef21a04587ce29ba20f171043a51e6502bd01a94c6c863ee800262726f605275fa2e288321185f878500004921cc2de2c00cc6124d3c01dc07450fa4514d6a1c8bab2ff566ea16d812240110b03fa4520b884953ab053d7ad58b4eb89bf29f8588626d0ff19600b6c91e02a0f180b4294b66399a9164b50068542979198251a8a723ce5f28728a1b26053e01779085da8c6a8407a50b7c16ba3e22fa2347ea3198b2b5c2104356949ead84df56016c41ffe58420a44d5a73d75244d4675f71dd938b6290bc172620120a63320f2a8f8c57486131f15bf98ce70faa3e217b9349c8234cab4d9d64dee891ea093b941202148073e6f12ac3912b8ccbcf61dfe00d825479006579a69d046266f3489ce36eaf4a5418bfaacf8afd3cddb1c03261154d6a556a31ca25cf4df220c2e5107a8886b8150993369b7adb905ae810142d1d6dbc7e8fa4807eebf0c4115dcecf920f5d34a307b82cc0ceada426ca14ba7a19c7569113269a8efaec7cecc0504afe52ec2ecd7353085604908361ddc4ab6820dd0ba213073bc668f7339c39f3f67b21e3e98620c56877cbaa6e98886779275c428de7157ad3f714c905420c16c86381a550b96ff3cfa7b261c44b4d90016c8c9374b4f754c99e324549b21d42070c74c998b1163c3974ef796cf2eb5c22d8692db57d26d28322db8426d95a50ab188c81d90ded78e39b1817b7b702993d665630c4e66b68d5ae92e1837dd5c22fae850269edf0b5142292b78c012c5e2edcb5eaf4cf9391afad1d9191fddd0ed35fcd7db3fbe15dc3e5f06fe0c158b52748a06db428940a7f1a26a10bffbe7f71ad571d80c53566c0deec21b582f80012cdc9a5464e89ef301c21e5714a1835cea5e32de1c1c521188d6a1cb6a68b1b7cb8cd107ec6d886a88a686f215b960a450959099a1f90421505e80916047e206954b523b1e9adc7db549eaa14b6fdcb3dd19d419454ca09f6399a0d866d84b7b7f88d4019b2bdaead55e96d2bd66194c9653ee498564cba272c1e110173d44df94c01caae1e77b61e3f52b49a956fea11d8c33bd2ead8ec051b08756b7321d330c359765d8d3f164d00c53a0eeb5bef10a79bd76d93112807ddece63598b6abca032d98ee5f838fbb295833f06b8f6d72622aae1edb1da71e48e9da7046dedd8daa41040fd18ca14cd2db06bebc0aabd37fe056cf6c725a696f2252841b2bdec4110ae2820c0ad0f4ee097eb358218a545de2165153524da3ed9dde51a94407eaaea33dd22bac7f8427e8123f2f462ddfb682e614ee9d33f411a85102055bba0086307cc59c5a634c13ab99d49cb41809aa54c2271de1bad215a08b4e7c3a917e6783dff99771593c600065b7fefcd31907f8951f3c77cbb98addb914f7a6f4b10bd49774509a4b29ae028be8ce5d951b229421c63f90ce06ad364ccd99e74c2f6e3fd7e139d2ec330cca4455187ccb0329fef834176892ca94029c16fabbd68794b144d35e035eb75419bf292bbf7903d743616d59630697365054d8612258a0108b494a548d02133ae33a65e1f5dd5de2cb1625a5985b4d5026f1addc63e85f1d05bed9d8a8528a43aefb1cfc87e241b25582a3a0d21fbb5db05e28a92f727641ccf0481492878f60841e82b73759bb91f5404915311424e5e11118240aa20920513948a16f90aca73ed405b2e4b8680cc0c119b0a32a254c6004813ed66ffaa4894a5c7a263030d41f7f5b7488ce4732320fc733150d32741269af8748d6c8d2a589401c76f1b33ca0ce4454fb441a8d3725b6c202d94ae48fe9823759e26c956ffb96ab9aa5fb8ca10659729c65529ad7f65536245dfa79e08db0702985101790f780cf8778a8e3f16673ac8fa06a3fdaf6e33e456f0a7d204a090daa6ceccb4e05ecd1770eec1e422ab52a6d5fb1e3ce40cc477bc45188915434ec432850ff15328ac486a4a4f5c52c9d87d4b09f5e91fd037b3b599e53220228669235d9f976cb16b78e1573edf7443540b83cfc546bbfa759228fed66f49c1d3fea79f584a3fb303a31b32becd9acc00a9fd4c85047b0d3ec65fe6584a856e09231ea754dc9538ea51ba0a1d09c71ea7aad82d61e4d1b48ad50ebd7da3864b78bc699a38b6cdd68a375a3b0e45b96bec42dbff2a8573cd2cfa917a5b566100d4f60afed0c7ffa92df4279030cc36653350c19cf6f401547079e6841c54205604400d0fee4ed07bb614f11a93a47b2095cfb128bf43a97c8e45f91d4ae5732ccaef502a9f63517e8752795ce21e89fb1b3f7be0895a18896e91feef3108166e872404461d68b7fb5dedfcc9104c3240598b15d7757976ca471cb3f07adad8af20f2ccbee571416bffe82e94d90a05d4cd240c811626eeaad2e9ebae406a39868259ca13000925b4b9600b81e5091f6b173af87a6ef19d56c817993b7ddc742b1daadf679f043a8d88aa36c7c8e55f34db8cd08e6ae64a38420d39ef0866f0718a3dbd0a3f7c3d16af466a4a970446333f7f9931e60a4e5f7f50084c3ddd1c036102789c817f3022d706b579ea0e13b9b02f1b9810c92f6d8be22400c1ad5400513c60578e9af67137d5f31a6dae64e9722542338989423ba409d5c003822a10824f21b4793a259e061706ef5f7fa72d443a0a3593e052c14a5cd4d1ea028ce7142041c6297e6c0b709cb9846938491db9fc85aa69342ac9888da2b053113326beb238398f5d9ccab7068605155f820aa29198bfb4b56eae154271cc8ed6cd934b77f64d872fa0f530708a9841257063da2cb9203e1367dcb7632c035fe2dc7192b01c466704b0be9e792f6603d00a2a5860c1e10f8a1563ee5bf6636813abdae60067a103999d82f11c09c350cdc9c63660c1c352cd7d33a25978a680d4b38fe699e6d7b976cdde759a86bb2a8e58dc107dd1a84c4d2d777b79da645666481bc53eb53cdbb162789eb8198be25a0ed0d9401b282097a119af9b87e6cf4b99232ad6ecac88e138d0a1db06cada720258a66bbeea09e63c2617ea0cb6e80b8be489c25ab9d3dd31698ffb0e52fe1684b620ab27a45531248491acd2e8c48c721050c9d689a406f51ba0c209ea4068afbf2b80131260a3dfd727535510e5330e863f7ba36c0cbd36bf484366c9181e1ebb69d23e9390112cb363b7b1b36403bbf3af58fac13116c413afc1b4b8908648bf4ab1b58a88544e2350ee5618d0ba3fe2a00aba486220421a8cb5e4d0487664a2c31eb8ddbe1420987ce62c8b27e82264476f5645e045912afe146886dc75d02e944c47bda24078a369e69a88e6b635a41662a9ef33ed256b6e48a625a048e54364e6dbc2c46065ce52808d31524c1477b98150f7b3094297a72d479c609d53c33116a85485988c81094af2a97ada88ccbbde876cf82a945f01b5ae064b20a6d5da1f0057da00e6d134bb719a8035677b17e7022659695ada6da8765b42d05e9839f6a030bb0261f8404baf481262b3134bcd5085576a164fa40f72526e622338dbe94399a2c9e436a3d6b446381ebf9bcf8a549d84fc04f086f2785d0223991b8abb622b991395ef7a0cf018baedc0bdae81c019dd065cbcdcab4e1326d14ff04de27cd3f9d20d257184b8b1d7041905939120979a71d85b2c8b3ec2b72052760e4ba7db05131630dfcedddcece58b1865ce655cf037f73c956f5c9074a3582e068d92969631b18ed2007de9716d0066a7ca19c5a21d98a00ba4aaa375a4afac3eb2235d74ad752aa10db823b1a1d962236a74bc84e946faed0b31be1b6ad80fe973a51e8a22cc2969e7e9975745f36ed4c60b50df9b050ebaa20acddb13f7147715251559e11248d11a2e8d2a16e282edb20b062fd8a99ebb6c3cab77e392eae5778b9ca4785c82952c92d9535adbe17a80db03f121fd03b8ea62ada9c3dfdea8c59361b962f48d196242326d069587f1d44ce36f75b3f60cb778f54fd422a6e662985f8ca1d551611738b43c5fdca530a5a6a2f7a71846b94056b131ad7d073c8bd78d6311c920979d533e9ad88d1a8811425b3cb26ca9e57264a909602f8852ce0ff960c6953cfeda498d065d961a5dc974ca89305cff4618b66ee4b272adbdeb937869df75f569d4b36be23fc88875c1ce08aca76f08f44578226646d1a615a988659ca8a35009c3783206909adaaf4666df39c74df297399f620b1f24544a82075986e200b202c2a8fa0d771ede8b02e009f997299c6572451cc7c76dc8e61ffd7eddb9cfbdee18b35e2cd8fc75da5dc769c2e38bb29b404dd90a912d02bfbba8199b2bd86a5ab02c12f0ab509dca178d1271de5aa1ff8aea62b5917e36a94209742094aa446be3f6c437e928d612791592b3f0dc9006215c6343b792e87da90a11bb5a188a7f5f6a866a8a0a253797ff66d9f7d21eab85779458a9f910bb65df9c10f904658fe4a4363de02ea5486ffff3a29fe0dd68c375285d1a9fb5e42ba436bc5ba1acaad549863d863efe09d5fc538bfaeb8f5ba6517dc25cc2983247dffc98fe5ff855e8f9927cc1fb622e6382d338848c3be8380fb698e84817b7b0c448e27b51e4f26c231270a31b927924840cf933822c9c71400a078a1f3d27361f87675d8f901b82c7a27d5402db51dec5b974c881fea10c07389827784d615dd4d1a652ab72b3fea614ad73fb386bdac87f3af530e49f8598988e82d13de1818c44426f406e145738fddf7b6795f5575fe3a46b8af82bc604e858d893fa8f7bb67e1da98ce1829d97fd6e47a1b20fe44298b176d6378d8d603e5613a9d8a97545aa8c0ea20a846c1dd7bec311646bef04999039bd684efba2e6a62c52cbe6db807494f250521647898f5898b43abe9582c2980c5c8995b296a277d5bbd65371ef76d0a4e2932fdfa0248a59be1fd044c9064effe250dab644a721fbfb4e145c1d0a6e277d57f56e254de677625415d3ec1b88e4cbc92a6819f8c6936dcc60b3b5a54e4feff28d27f5a58b6c30c603446e8d997ceb6914ebf99f0aebb679d142c3ac3705d1d7a1daa625f5b075cd41dc0b2b5a07a99b3c769d29a67a6d5e244778ee364115ca126f6c8d81271a6ee8648c9a2b7e46ff42309b06211619b05e7baf0f23119d320aebd014df537684bc72b22d8ce256106e8814dd8b82ac1162e72673e64f5b5fd8eb64e4c91d395e0f145341725d9043862791fdc6342fa87334190b92e0e768ca9461302f2a59774bb98efa0d46d3c2a089ac192187904ead9b51b5f2f9e6485ba74f7259de2185b8f086fad310f1d00761f4e0b5e97030db612946419f767841eb81743ee9be1a5b64309acecb9ec72a140262f349c1486da2ad6f35c80426cbf8e5a550615a6415dddd2fb6c69209629f2fd67867b0a842d96fd6d011c5ba67ea6fa15ee6a8c89f780a6531ca2d7d2b7923ceef185b111a88b895af15b683c5cc3a311275c5dca15c93c48fcff3bb432709bef113167f3ba387c7c7b83db3b315ada2d8d30a47633de06eac8732cde03be3aae83e17b1912b1ce257ca47759a933338aaadfa1bab256aed6c5cbf5db4722bb6f56c0754e82a01c738fecd320d41aca982ba5197a55d9e7fe2d6d5edd3a1fe7a2daf5e6f5f62c36ea67455bb749731408c4b362a395a1c7ce10834dcbf3d2c41e8be1fa01443a5008e2e487b2cc7b0d391cb316664f976c09ab42821a073a19be78b48365e2194f59372a7a6c04df3bd3e14429f91657c953411b371571b0be3e722969872fe2c451d366d12aa0373a406205d7a8e698dda7cd08da129237962c4d043ea4d7a45735f7af49e37bf216a3d9e6525e76def03b814bb68115c287ab5facc66b27897e635169f72d014e5174c640f29a2a78388a6495b20065dfa2cec3f44c238ab3dcd70c1c092614dd6a229badd565ba130daa25a88122329119a98ec0a882c34ef5424835ad8e206468c944a38103a083866dbb15fbb76181ea48d52b8178aa12f256a5f401cb32fb11599da60de5c31ddfb9c7b93f4279a2f03dd71566c448f85a8dc82933417dab4ccac6d7bc0a12274b52a6ebc7fe1ba276e5fb3fefe86c58a47c0986bdcd2f62747f9f84246d9d89bfc25e31f67908d2bab4f9d096cae9846bb07ad8467ac72aa952fb3fc7a052f7473756c84e3b7b79840806e75cc3e5c2049bc7714b7b3aeeddeed4f50149108493fd2f30cbdf3c16f0a73e090f3f1ea9144ff156d88aaa54254ac098106df6baab15526ef6f2c58d5e662cf000592fbf6ee9da9992f52d8690c09d9a5141a843aef0ff0245163733df11a92374837e5320afb33ab34ee4f02e7b0521a21bce1fa4ede5a9c16e7d910140833d7fbd19f96417b008c9cb9fc765d4544a9e4cba557233d88ebd4d44e90e52989da51e850937172bc9d2f5bd4a273007015957bda51fc8293a310bc003cbee5ddf8e68b23094a39ea2e38f0561a8d185b8722be4078a19579dd73f4dc8a82892acf3673ef1adb68a3b98b391e2458f1a63ee24acbb2e65ff458fb46d7d7f3636b6ffc3877c1c052595b17b9acb2c573cc9c9e263929c67aab426718f6df687ddea31755da529aabd654aedefbe2f8ff71d05959bef3afc55cf229a99642859490b1e046f8cc630c77f1509e092824820d79ca3eab7f979be0c6b98511618741cc010d9641ae281767a3d08349787fef1b8f461a3581227a2c18e137b10fb8f1c9a68768d98eb9f0ea172dda218670b80dfca6083e023ea98bed4b7d94177d68c57236c87d2e0c94fde982bd8c6502df6bf601ac4b9bb459c1443512b412e7fd188716773c8d711cadd7143f1c84aa548a57a53d593e2660839e3fe9caf0de2ff5054ff954931d99aa4a88d197175c8aa736b013f69a6816c234d328e07a2c0d50f558c0dd2b82e0ab674a190d8274164a636f94d276018797ade28934f6df23bb53ab16b67b6dcbc66b7768849891e674a577df45c8a13c7aeb4329c1579b0f96a239b3eba5ca363f69db9fbe7ed371df43eaba004ff251fefa6fbcf91f1a4fcc2b82b5c997d97c9cad5ef4e3fe1f933df0b548dc277f8188be6eaed2dc5fe21f083fd89cb6c5a031a09b0487c05d7001380462f7363f053dad66ff3281bee4d307b7612853b76306540be0ad5221de26f288750e71329cfec8484514f66febb1eeb4cd39467a61332045f9b2b8fa490fe54194e27cc854793138cb602259f58bed25bd9b23570ca2d27bef074b78360c8c33fb6fcc3a47cf8d2e33170c2f1aa08394f704b9b9cb44710c6fec9c377ae643b74efccc8b644bfcd5d07fc8f964fabff6a642babe6e22d8fa3c1e9abfbdc3bf433050d5fbb49955fefc82338dd16b68b2d48ac73cbb97747bde9d2234bd7d5948a4487a0233353f1d97c794bc85324aa247085163a0ad8e2018df7bdb0f8bff05ceada072fa856996d7b03b2861c023adbdd9b39e93add9e4b9b9fa066a2fbeaee6ce13c7ef89b5737b83c8b8d9c3ab49e6d40461c435aa4670ca79a3b908c02e6004d3e72d1a29abc7033b3fd7649643b7910175f8cea2022174dc8fef5457a2a77abbd5718d8c506233e9f08da77ab897331d2fe4d924743adcacbc133093204dc6243474f5702b4b12661658480746aa45b1091bf1a447612a8306c6a6eba84d7e15819850ddfc0d738e6a4938b74c2a29119453e6d8f16137b4f355854e907fb40e9447f68d0b103ad065a7b6a2e967d65bac08889f94e3f4c6b168c7066484d03b9e3a4bdb616d5316e2d46c905da8d8db48b4342568c904f955d0b798e811f77a1b7bdb5252905497c9a33bba6ed62180b01e54e189238b2da4d8f5a6dc757487ead67da6ab8d5c9b5bbbc3b7d92ed34795f1f7979962c8fd510afef2d5e7f1021ba89c0a46e0888b337e0b478beeb955cb182f0518072a47c33c5e166a167cbea422899655ae76dc3871d064fc71a3e5babea81aee04a8c1abe3b701442175e30b35e9416c71d52d97c92736d46c17c7356375de6ce510c305833fae6a846a4a599ec828d7ef4ce4af0e3f96ff53ef1bd166d5607a905ece6b36a175afcdd82cb46dcd2c1de0593defd272a8ae5b3f68afd160b24f8616d02b5b21322a66c4a9633e73d702a019c3f1c6eadf72e166127769cc10d6e99a547a5db23cc45f1a1956089b4f78bf32c8e69cafd2861e61451bdd8dadf978bfc174c14001d725aebbdcef26d562b8569f8a6d5b3be68b557ec66cbde88a2222ef5dc7177da4a1cdd70ba6c1212111829cdf66bc35562fa30b8c3db964cbe42490ef4d01e4be288c573b0c98b7583c980bfc4a35bbe3bd169501b44e0633640c20e79a2f75cc9763bd6eb1c1a544ab41968e7752662370aa3f83846c92dd6540c848f9169bd0b635e7598e520ad78fc28b5311c974b2cf109631834f588b9c488b009d731cfda056594e20d9803ef7bd4a828359c11c6ba64d121d6ca2f88f5bacde207eb03385dbb3872752382f5c8b2f8fa50cd8f7f59e6d10fd34dbca4e491d43de82fa8ee3a6252eb04fff8720eb41c5cacab7db5830857e8c4f209ecf51a5fbf3eb4bf3d7f9ece46f74e1945100c9c61078ef2c2346469596616182c90ce19d3b7ea3e10bd0fc2bc281a451194e162eccccf4bf04337c98c09043c32c85e2e014731515b49214ee0b254a40f1d73b87c59237c47e906b4097b10df6d5f2cda75ca3fbd1d32e798a13fc148293305739f633c32dc453c0395e7bb416ed08cfbfde0dfa04295439a0a0086a51e2dfc2e2e3010029b357a25c604df4283015fefe02524b1d46cf7028b351ed407997919b9c164d229599901f41e8b360488bbd377fe6de4ab3e18afa182809c3ea552f3e552598a46fb08a3bd3f4747b9273e2ada3440a60cacb1cd02618ad058213478144ac5e0e2d4182a47ba38aca4eb0fa05db595a3c75a9e6163057adc6c391a73997d68d3a14398d0581a42594fe70dfcc7134928c377d339086a20e0a3a626315466fc6a1db39182dd4ba567dc54af73a7083d07d4243a13dc12b10fa6e319f39951e6b2a0ac8783e0289053c1772c6983c13b1d7ce0d5bd4cbfdf36a63118724ec601ba455b929d4374b12adffef00297997164e5a952e384f1dcfa83d797a750b8184f713c98410b1252916f93398224d45fda1cebee9566f7552c2114a0200e855482759818e7fee34360fcd4a2abfb349ae483863a5021071dedf0ca6419cc8957e019f84d611907809c46b176e2b479743418f34f16f4d80c9654891192e6525cc0334fe9d4f2c68c210f1e252e6d946e9bb75672ac34c04ff7faacbd188ca92ede9d6cbe7594dbe7579cc109fe35248df394a6a619e395483888ba5acbd055a746bcf1ddc463cc82c8816b5713a9b63ccc6843b739fe3181f9e347c4d330aeebbe8cf3b99560210ee38be96adf3d72cb27b2dcd6e645c606549b0971eb21a22c7e15cc383f0a801732a9f53e1f54210cb42d6453f69c16dff48ac63f532585050228d4b1087efb650021166684fa3a747c3f320d89738b6e98dfd60dc7f51cc2c10f44d8f7e43e4a0a3c06b0bb761d7812ba988174807074970089475478ca32d3675fb8701e23cddd4f1416d3a73f5330c1ea2fc6f02dad57f13dc35acde97fbe66d10f998f95bbf90cca0cf153564b19d96d0a6a68c66699ca9664be032bc0ca3bfcc6628b46bf433590d3e98ab811702791352898af934b0c732068a88eced5161f5d4c5708623842217613678f180f1a1bab93c26255f60575f4c4e456c50f8462ff8341e24f5c17d3bbcf25ab2a330e2c0d4e6f15207b9f3126267637058092224d28ec89b7af889f9ded19ef65b426d9c50b868407ebb828b71ae730d8b61e621b07c647c504d5bdd1f2a3ee06ccfc515a7bd122ec404191826bc9b3cb68b169ee1a751109f62c6857a423017162d7d7294b92bd265a8026f9246ec59342e75b26f1165850c433ce5333cd06ba78ec971166cf86c826dc35b541d1710b4fbacc037eed4d59ac32bdf323f6a869c505bc78a5b46215b4a86c9b42f3e646982dc01acab9c515e110ecfcb417d5dec7ad5938600155bc704947a897cff2b5b7729e641d44fdda1c9e2de4a0e4b921604789fede0daa44c49dd230f9296af1ebad445f61009699a95a80057a1ecda6df20baf756172bee380ee55ead2cec5c5a2c7172b526e838e3b2f2abf46e2f62276bc91ec09fef1fa27974aa2b5a4f3c8a05aace61c3fead7ccd22413dbdcad265fb58bf7e97cae4b68f4d536ef9967c9092c4170d76c5fd231332294182c74c27858e47aeb2bfd7094709277c733e888394b247c6541d5e8459584174431f17a10221a5a11972ae6a603d298edde2a03058b9a2bb64f5cb8d141d194cf39388238a57346df47e333ecb8d9fce9732ea93ec8ee0030c1ed988f85917ca3e814b43ca9152761c94426387ae635563b9185808ac1a30921555d08b24c3a4d192de438648dd18d926fc55b923d4c5fd59792656f24daa360657a9b04d14f75bfc5aab2941653d8a6c7cea52ed89c9b61812762be36431776f614daf0c2d3330b054225991d0df9eb5a13703be36a8d2a6b05a533d3308d0bce3044e9ea3c1cede75c844ea83042f107feac3c6a91071a836eb921286be0beeafee640531015fe7b62a879a1a709df6a1fb4b57beeecc68a4801f30c28c322766b61db1cf4911df3866c88dd0cc964f08ee2b8cdeb1a01906dfd235070de9dd2e7c2eea06cdcc10bc52cfa59ea3d56ad2fc498317a4c9776292b4c4794e3b8d8b9e1b41af039e1357b1dbe4c8bea86df862f8c6a0576a18c01a4c4f1e204166f57780029d7c0f8a7e894e3ee8689fcd32c4b5832a559f5982db895a89040272f0b60306d800d37860f2edf3a51e43955cd09b2f8df0f22877b71f950f5ed34d6e62994f6f01d4c8a505d455528dfa4be626ac3203a6e4614fe1d6c8ac96dc4412d111346198481d8c0a60dc89c1a68aa1a02f2d7da0d69c0f1013768707f6d82f5e811514163705c3f0ae3ca116dc722feb089b380af2147ebb660223b3508702b2dd386acf725f541483e503985557c4a69f3914fc1b0a25d5d6202cf55d38d9526bc04cdab06c37196c205f2dc2c53852d10664e1a6c0f7d37178aa573fcbc403d6f73796bce43e33868ffd7bd444b831df53a3de078103838358891d8a087ed73c3d3a6983550a2098aa0d511157cf3e86f478375ec81a547b32b6928de44e91e8d2f3417a68cb20c5bf4c0891cc512ca2e8959ac6d76e94fd4b52319fcc862bd390e137838eaf299927841cd315197bb0119fe4b6062e360ff4e221555f66a40449c49a6f0abca002c7aa0f31b4d015580d0be824673a108721802d6df9b156f1cbb1f4ee705b2ac160d41dc97189acbba70b168dcf759f7b291ee72fa55042b1ed9cdb9a3af5e3e00611aecc237d8029b30fd6092b43f08c7e4e1ff432f11674a115220ebabe9174aa9124d8c805d842b66538980c400e285eb7e371ae811344a0dd12494012146594d3c38f06609882d0985c488ab18555e06991d9a6f77d220dd1cd8bc421817905859cee5c3b9fb617d38d42f04852d2837d42f8c34a9831181c6a951f6bd1e0311899e7e73f9e5ca44339df8970bc6052f74145f5c616a1813510f72e2a517289d1eeae17f47c969a02b114ff3206bace9ed6d55cf07207c4668ba3da18bf5702c63d003c494065f5da6e2224a4633eed4e448d838bdea68c87144e2519926466bb448f4ccd6cbd85ec2cdaf919dca4dc925613b4f4ce55e64ac45523293b533f59528bebf6ed792810445dffbe8d6fa7595ca4509257bb3621d74eb2f4dc2b7a26f7e61cd414a2eeffd1df9d6652e2e26ad574db600739569f4c2a99f4dc7d01755cd9d4089c288bd9e91f38863960b13fbf995a1b7891121f771254ecf6a984460b0b6d0bfa72af7c8b37603541ad988f6bfa0f81972d115cda037da8abc7cc517e30db3697dd5d08318ecf7ddc55fd553e8c20847077442f7ed9b38593f6188283557142748b3f349d10f3fbbbc579f36460b06e73624dd92813ecf889f4d9cf256e30f0827a57310be7cf01e7018ef1cd14dcf0994288c7d29f400fb83e6c1955f7d54e52c837d47cd1808cd4184bb43e3526d6afb8cda5f768845c0a2885b3b823140c7b3adbf7d98229a4a3d8a8eb074628ff81407b152c0d208475b2ac750cc2814f4d05e1be906437709643909145a25a82003b8b9266eb4e8022d91ae538a3feafee18989b63ca8da1120765b7a61ce21cfc76c2bbe8901603708ccfb18a94f603afdd7cc995388281ff50993f8105b60b213653d44182347b6e421221f74062c35d4aab6130b86168ad47bbf29905a6f21584e604015b6e4088072ef786ea464552b4a74ea5e2c91fa9c12690e739c53739f6f10ddf0e35f0bf2fb6d219ba7b12c84cd165762fb9158d749527c672da150f40268423078eed02f818402b689f30d18642a9d6ed4d4be77f09b5237124c1029fb3065ae15a5ce44aaf3d300511a49a7603d76f283ffd5cde8697ebb1f42e6b3086eaa176a6b5a31859f89f1e43ac27f84fe01af895c129ffafd496581140a49b3c9a7cd37f829d7b03bfe4e84d88692a6b7187c88f6cdd81656963c1a4378f94951297d168dc81a1d74b6a54c8c29ae6c8c20dd380cd76af7657da2626824bcbeaad9a55c8aa2cbf864e18d7e69fb455f9b1f482a3828b0620f87eb9dff42979208bb93916a2e09b3e9e50d0498e40f37d522a1842ad9b0b2476c5aae64b929e0bd2f0403e9d944eb9cb1b50cc17ab643c1430d30aa94c8d96e481b03ec0a51d27079102c089992a02696df7a6e4f39a38eb5fe71a01c966ca9fd319ac103ecff038ad4ee905a3090ba4a07aa71dc3a36d3de05587ba84af8c474b9f4df8215fe3ca7f64eed95bce2059eb767e5f2a7e319bdacbae1012a74ae4128c0daaa7ef37840816b452ff581b9ba019819e1bd3adc25e2fbff9290bdf7de724b29539229d108c7083f09ffa34798c84464a249ebd13e593542a4887cc90ab0d86bcf4404998bbdf6da6584e3be47fb70efde23f5370f6056ea6604ff1ffe937a1a2f1a793d90e8a0a8a0814a1a444499792a3e2ccdfb483dcd77844aa7c0d4077e0398c1a6befe865c87ea0054802a64b8028815c020424bd1d10d58bc94012649142599c77df5b68f21f743b69b9d20db0b57370cc3484290dbbfb517ee5c2ecaf6b2d7e44baf8414ae9679f229878393f21b425b48945c67d96c0110d9534f7bec69ba303aba3cecb52f2c22bfbdedc6ef464787dc60e4fe467ed1955a58e40ed92ef6d10bbb9b693afae3f84687fc7ef97d357f252f1a1d69d06ffae5edc7fa690f16887f10ff1e3f3c1f3d7e80e14fc488fff438c7b79e3142e31cbe78b095fecd9c3c45939191910a2cbe373e095492badc18a7a4aaf838f19fc98d4c4234eddc4829a5d6c6c83c21373333ab5a277e8c31aa1a8cf189e2af809a7e9901989ac2314626ddeeb24a183bb91c1ddc257e7a5db672386cddb69927d65fc3b22b1c0e262e4b09c65ec996b24c6699771633f9b13b7729a937f51f6a6ff931f384a8a63b899053ce5495cbfd190bd6bfef86bdd06ace5df5b48f048a1d857a629fd12925dbd33a316bd9b0e7c69b10fa82c03cfc7de36daee8aa6a8854c407e3dbf8aab88d805fd352c4c657c5e74ac6fddb6166ee89537ea1bbfba5b2acd3d33edefe61ff4e833dab06e3f7f44e833dfdf185f8d7b30a776eefac7ae2f3d0c11de3dca1b9590bad73cc6839beaa04da7cef6eef6e4e87f82a28ba91b048b840a1a1872a963082052f9ed8c24403521551beb493efeeee18638c6162c7cb1c142ff7f7fda21e5cb0a2060e5f24ada1820c9a9b2f262002ae8e8daf8a01f7650e629ff8cc7ca78a6b6c793b8d1736ccb9eeed5fb5f1551d680ae2488715b48044464c038caf8acf3503523298f353be8a7de66b52cae9d9f994e77c21b2ce489568dc63776e8ccd3bdfcc086cffecb0e2ce1d6acb158ab85915d7d884555d87a99277d0b908b32a8b5de7ddb3ae1391b49bf839cdfcfce0ea0429a3472e9ec5cececebc41fb47d30fdab49b8891272246e6d0bfb6b392d32736ebcffeebe7bcbe3f5eff393fd4ee3bcce3afd97cb1d90d771840e4e949f53d2ebd8100f6da0781faec3af3676eb873773868be3f0fff94f0b41389308ffff6c4a240c547f6f551d01e7b14321c2c0a541a85fad9cbbf51f1c5f9a23b93ecabfc8918f962fd47a89fddcccf01d86bef037bedfbf3513fbbbcbf874f9f3e7772f4b8fd853d6ed31e77c86a7a526a8f079f8ce211112348b3b91dae07bd4d76ff177bdd70bbed6997e7d90098d8a75f78d139db05ecafc54eafa460fffe836db5566b57f4e55f177dfaf2fd4aea9b6f76631efae176e7a5dc8e9a2bbb9bdb2184e6886bcc9b1c7ce7f785f44f884557be7b52b0ad75b8bd6e0d761943fd44fd2ba0a6eb8b28a3ec52afd02ec7c1c1e978110ddd581aba801a742998759c46a9b29f20eb78335c5930366a72c3e1a07eff0ef8670298eddeb91dac45767bd5bf421ddd1075742f20d50bc24b744b2262044810777720cce34f2cf6598b8b7f5df487acb0b7fe837d43f55affa92c690448904c06ad531bbb7be49ac4cd8b4c1aec8814b7f819697029668955e21529344fc47f68b6d50dedede13afdb6e929beffd8bceb08e17efbf8e14ac886c0ede07e1bb2ba1c181bef9600cb4c4364b9fe33af4994cd972a5e2e33554172c3588569882e3756f11f0ebe3f36d99a88c4b469336d2e04f99c7783faed6f76a4f80b91a71b07d07ccd8f40f335df08dddb0c59dd90034577e6fd69bcce7bd789dfc3db675e9bf9eb7b5c9979a819ef86fbed67fef26eb8ec539ead799a8740cdc7ae833dcd078194b7fd009858aa7d52687ec88ae68b55387bbbbffbadca36aa08ad5f26f9fe87c8eaffabb6171b2d2c07a1ae7c7fd0316fa9497aab9b79d2c8888579cda21e852189c51c8e1e2a335a7f89180112447ad1da5a1f0dae68c0b02173f1f1e33341de21ab4be9ceb4d6da7cb1f286d67210ea165dfa4d828f5a577ef5b842fac3d5cd3ef310fa8b2f7fc8877a75a9aa935eb536d8bffe44fe2b7f207faab4a5e0c61761d3c276047ab08625206c36f19fa46f004bec3c6210b4ae33771aaccf49d9c0b021081ab9f2a7d31528c0d0254adcf99ea47faea52b1c149dacb4a674695a72264f406140f1045db2c4394de99265e9e9295cdda555cf92ff704cb82759b8284ddc942e565a4c382d3d7148e1ea2ead7abcdd818678fca80063e126f6329d588c4bb07d96aa1a34744a9a419924a6c9458319a60d33db7fea7bcc3aaabcc241fdd7cf9f324825661622b8f3db4bff5c473de79cb3c7dc7989b913e95a423d21c39ddc922c3824e6994fbd2b65949aa09698677e35e3a23d5f4c9331495b19252455eee492dc399b6e98212ddd49bfad15859d619e4873e34f0ddcfef91d9d1d1516851bb8f6ca1b29ed13d8a3d455ba3b9b7e4b9529b46091b1bb3b85748571266c713888dd639494be7f3d423df49d4e4a29fdc2e909793ddd406efc1e20a11e21a12e43cdc547777bf7dc25b6f0efd9f4fdb5cfe9df208acfdf71c823e2e72f6c6ee62fbc3ca2a11b0db6ff8da166bfdc3f21b03bc810a418a37b777bb3b3b3bb777b777b37d9c8008d73e25ca272f9b380211e4088b912c791986eb85d4f53b0b856a46cd9f2630731e6ca7fa629536e9354b9671bbc64b7831bfcbefd59ffd9b1fe1359f255d82567156df3e77ab0bd85bd0108c87f72564240434042434043404343404240424043cc4043dc03fe0ed0ce90d0ce8d1d0602020202a396d8f1d9022c637d1eaa2f3f66666666668e6c79604173368bf0197d90c0e507093e48e042824aa55291e0e307971f3e48f041428f1b424446b2708948da47c624478a70e9ae0b452312c6fc884640c68c29e2838b4ac5854b479b8eb182e58228da30b69fb91cb5d6ea54e88690c418935262f59a4008010dd55c66aa5266aef13b40437288e85aba6e10d1212222a2a11b4b378688a61c22126a051982b4d4dde0e5d633cba1a5252620b45cc94bd711b2ae2ea11bf39a938847bdc183078d92e8060fe93778cc6f0808cb0d1e5f887a7cf9520120207923fbc80639ca792713104c8ce5898eb13cc416d823140328ebc175fd25a763b4661a97ebd3b0d8f81abde10d1561638a63a36813713bb810e8671beca25e18a7a3af90c7e19e9c4e25d30da219022b2f4f5e14b5a4b5b7d3ab66da86da52290e87dd543bcc926eb607fc71a7c42a96d56c126d391bf7ef77667b9028daf01f9a432bb0339a697fb5d7382fde0bbb15d3b48d63a3b8ecd3be2dc370540df6bbcf0461e9d36ca8e7df8936fcf9f2db8ef973c09487f286b4286c7c0d9b0c562cf440e64506eb57105cfa91be86716c14f67125923728f5a9d16cf485da87d63cdd967ce88647345bb05bcd26d43ef4f26b12c5cc23256fcd11a1b22b25e6425b217109e8721499548ef1061cae8d2f545231bfceb7364c71e7b3185325a5f51c67cb0d73eedf70a7dee0af2ac1f51ad0b8de648aeb8fe5faea87596d956ed115a91429e6cb5f3f0bd0c0840f388879e2c14a95168cd1c39195336050b484530bba18634913564851f4448c2790c0800b1334a145259b5c5903105a54f0850d41202d5c6f261aa010e0c9b1c8c8c484891b3f3e18dfaa74d0e64b6ec714d2718ddb947e0ebef41b00135b64defefa63ffe42bff068d73c2cee8d6c9dccc87bf3199bbc586a49615170d92485d1d58050613863483956022f807950dbc84ab08fca74a32de443af90f45f2a3277706091b26b54fbcf5270e6c8327943b5533bb9e8392b44e95485aa7b2c03cf5c301d8902af007f56794362d1b6ff8cf6074aacce2da9ed8eb3b42857e47da891e9678615d9fe527604862f56bda26376d2608ee865fbd34c82c1befc6077d9bb7f98e80e08445bf9f1f7aeb56faf4c63ff4a65b7f7ea177b9f5afef481401194eacd4a062a1021615ec8b581a175947580a1c56b003eb480a9a161695d4a740bd18b1a86020386185aa896566699f1ad6a90fe54369c6ad328c6bebcf28f632616522a9498098cc272c70f7a11cc1ad9204b786d2c9ad6fbfb049f2879a53c286d228ec2e46dd67bfa86256e470f460d7b9c93ef42c5a183bbf7e8d1207cd26ed53f395e6ebcb2cf8471a4925637a32d13f3f7c3e691517bbe5569e58a6953aa354596622b9f5b96712cf9d98a7be34f21f07e36494dc5a3ffb1cd02cfa7916d7a93fd4d3435dac0636942d4c8c0d3d0b15fc03c43af56b7d0b835bb3b8f503e0545f8c11ae974eae838961c3766acdcda665fb86dfafcd046143d91241fb507edbcfbcf64ac8515f87f6c99f39c2c6975f7db07ec6e5a0f9649276356d9bf1b2cb1cb797fe895dba4b27f94f740afb4badd6aadea993a2539d41d2a0379b3458e713d9ea52abb52ad53f08aeead315ec8ce5c286dcc5c88458df0807655fff47fd5a2dbb53bd298f6f3b614fb7d616f3d46f27ff9146b5daaaa53e79f449a306eb67180aac3c6a1fbef5a59144a2611c0ead6ad816e678b0a104aa2fbfb40ff7f5a59868a3bfd6cf9ef32412a31ca8ab7d72c608ebf5652b7eb5b625027fb9587ffd847402a0a2c5185dfadbb46c7c7eecb506c45b9bd60fe3cf9f2fa568d5d6a0d970b1915be6405d39bbbbbbdb9953365c6c7cf6cadddd265c19a6664b61913a0737be6bc9c96162522549b7dd2c5a5b774c94aeabb3dbd6e13031ba687c39e00f52dc7095236589a681d52e332519a25560b1cb4c497c7062b9cb4c496c58c1cecb4c4998844002324b1b5c668a21862b2f339120881baa2ecb17685ae82f99f3c14b2cf935b6c5767c6c8bad0df24dfca21b6f4288b7324f941faf1479a3833f3e7fd8162b3d13e41dc2adfb647694ad828defd23b265dc65060e3fb106e5dfe6d0c4fea83bb5f159b948231c19059b06cce2fbcc85c932e6516c961534c6df3628b59a894fedc9cf20b2f50110b01b7a2949bfc492ff74aafeb0bfa4591cb5ab189a3aad909ac7ba681e1b4500e87fb07ee1ba55305305cc6c38c183362d830368cd6736ed1c67c6ddb6682b0f239dae0ea9632d04a4ec9451bf3f23f7581da521b5f13e2bd13c8e4302aac7c39916eca2f7f672d173f204c367ec6ada758d566368e36e2dda25ed777a37de2871ce6867cb21b96aad150ac6233e840962531a2c90dbacc548497aba538e787caa29492ad603f586b88b06087438056fe175fa04bbf6d6e659eb09b5fbbeeb79d0add4209c6dc947cce6195f53afb5d3386192152047b2d664f91c9d0f6a89ff9c9f5e32f54a17869c6d69ab29653a9501b7f61f60d5909917f69be3dea21b04180fbc94356f752f5b5d4e3c710d196f5758228a4c51e691f23eec7e6e313f1e851a47d32ed4775f9dca1fd8eec518ffa8464cf1785faaab769b2416ed0768ffa42d41776b7db81fad4d37842509f7a0d554393f26a68be9b1d343ff339688608dd9a2f44fd09f1d27cfd99ed69bced516e514237a2521f5f4311b50fca07f5a1f8a222d743f38c14e141e40db54e14ba317e218b59ddc85f680ff66f28143f36891f8de251d757193e8e14f93852c431a564a5582529a9d689dfcef37b621981971b4625294aedc3b7882d979fb8cc54c4d1d55893fca594ec95bda67d94c24159900f1ca47d387106e619c2a21efb5000d56e57eb3f1bd6e1678c879dfbb22fb402b8d5e3316efccb0b2b654ffef4e498f844e21b890f2488642232d160a411c2f233c7d9d2975dd9c26657fc078bf3a87de2cdbabbf0b51dcca37b5171c3970b5ea6e28617ae2667528e0e2ed6c43cf13325e718c05a5c5769927b2ca6d1bd70bc971cde8479e21bcde7c0fcfa55e92ccc139f874ca4ebcf52b0c7beec8a6757ea0d4065c5b7d99506e3d760ff863329feac127f5e893f93a6526ae90a428bdedc7d9da04a775fcccc1cd6b0c815c23f64bbf5eb73fce0fa1b4abf7f980a24b0678847e5f24058b234f555378be5c65709717463c5b991bfc8efcf43b63b25d0831798264f9844a37844c408d0508f2051f0975f1d61a2207f7eccfa8eafb10502eaeeee06a238d8b7aaee7ee9b9679927b62c43e31cf9ddc42f6235f19ff9ddc4af0712f9f48b58f38178445ca7fb8f503972848a8ffaf37d5c8f7d4740d591ef486d3db3aeebcb22bf1bff7ae3df0d04e65fef437efd8e50f1318fcc2f62318b7e37f1236ab07bb84e531d2c917e23fd40fa83b440e31c259b61a1e2b104083b086d6e7fc741317accecdcfbf35b7e153f5767793b52157ec50fc4fffca06b0149338832c5183418fdc00af3041513985145114b4cb28728f76fb4cfbcf28b123fa8b0c48a1862c022001a564c414392962356604929a5ecc4642d5cf7de42c62867addf5369a59c720594667f5d9256cdf28f75fa7107086e96fd7cab527de1f5d887f5661f431a3911b21d12c879a91281db01824b85d0cf7eb58a2ea40e9acb0b03bfb3ae3dbbfe7cac7eb2c1298f5c9eeaebec6a8ac62083f3aa58a66d1c2af4713d07fc71fd7348b88ef340364f855381ebdd3422e5f77151c2a06925b0d16eee2d9d3bb60aba60bce5325f92660b10100b556090a185841759c4d0001a60681dd9c0a40c2554f2805d28ace103134344d9010d18b0422b77605262c114443091418415359ab610e0329392104a49fd953f6eb0ce2bbfc168bf984131470ff3c44bfa5429e727e53564bb91b7a7971382524a29717aceae1fce3985ccf7404b777dfaedc96795f5408bad0dda505e69e345f7d150c9f8fd6d9f54dd505e747eee461c6623e3c79850445e2946372344d6fcc89adfd1a6c37fe31fef8d8ed4f54f5dffc2a22be503d3bd4caaf9e94769a7acdfbc312497962e7d2d76b1222ab51a080e8a9fcf4022d19748520925892491686aa5a916c72ebe955cc98dfc87df3ed3be504abf9338e87a9a7afaad03fb481130489fa63e6fbd8d64505fb8b343abf68536fba8a5d847e511f3d0cfa4c426ffb9190105fba9cfe23fdca5e5f4c44129efc8cca3b0426a048bc2ccdb67d691d4cfa43e2a37b48a2f7916afe25728a594524a29a594524a29a594524a29a5e0aa33bafc5dc4a29ff28a58f288835afec32cfafe449fa9b7e412d65b1a18f66118866118a6699a8604182a182e0d4b122e6831509b45a6e48afec902149204bbd896545762034a86d6dcf3ee5b902986324870fb57b5ff81fc8be14a7b8dfd271c0274b36ffb64ab7e57dc8b7ef33b8096283368a1444c0e4858d2bf1054e202cd6da05b59356434ed0a8b699f83d32047eb4fe46bad2b5beee44f4e461ac923377223ff993e0e0306e5cbf97915d7913f3ffc50b5b3734337aab55ed652959c3330b0dd25dae8cfabb4151ce49f17c13cd2bb685958ff7e3264daa88f1aa99b7452962c4d5d5a4e4fb1495254aa7265899d821031c24b471109086888a8c70ff7e00b5badea1d5c55f19f2296fc6e6af97dc57f244b2e718e8c7deda0714e641bf19d021ce45f7f11097fd0df4c850b584c99733adffafa1c88ff6c9fbdb26643d8d8ffb56c4720fe1391b04e7f1227264f80f80fb39c98cc65214ee90f230bb7bfa34194abe713cd84bf44e61bb93efb11ea631f0ad8d7cf6af628d4bfbe1b66797305f460e47a5c0f068b78f9ab17c1346bd2a79f86c51d6a237964e3847aaff72d7e5f7e1b6dc46f287e409f3e0d07f5c7621ebaad362d035a4a79465c870eb90e7daed6cd5a4da5cafe3f06eb47c475b8d0693b5f7e590f76be5435e8006655d78949b607fd1ff487e813d1d722b786edaf45dd92068fd598a587185cbffe35880eb458f1c58c2296ac9084758802c5853244085cb0b4c49415b4066b96589c9ddbbf03e2bccaa969680a143562d06282020a27f1e082140d581c41450d4994b2d0c09d87dff85f49afa7c5b0394d441826a0814b196994f1a207283c34d19608c02811c49213325441e305b852a2078b179ca891c61258b48852f0d004f560055f01284a5f9c743922045b72d8c10c1a1b5a3061c1941f9e383981fd24564a78d892d4021cba9002a9e2b04315a6628c0f2f84d1039924b8b055d8509593a3c5863939e03f51e4c405165820468c16944088273bd8c071174c568c9a3c9961c508b65815cee70c11dde0619b0100564023f6b542991a2551011d0d30451724322e70210410426051e6871850a1820316481a142c38a9d2c9ea71543527ae80c0028414b7bfaa1e082a40d070435513b6f4d8045608a38a0a56acc14402313ae4f0b5627e496c62d817d60e6cfa85557efe5dff4496ff50851730a0c1861ba674b9e28631334e48c1618b0b2c488115329490b7862f809146961dcae022065668af7313491b84e88a966c41bae28b3233c8e088e572eb6dbe60c3edfe48560f35961c985c9ecb4c3840b93978b9e1e7c0e5f6e7ec304171bae1676126282db07fa7b5319e96ec03e44f22ff91df0dfd964114505c1013c60fac59e5019e58cc92b187eb349215d08349479799a090b9e133e160749f833c88e36dce01cca23f59882c2afe3a3ea2d1c7b14bb76ca2c9d7640b3df1fa39f8f2d80b815c7e72ab777d7c3aeffc846e881fa090c53d194da0b9c45267672f04fb7eecfbb38fd5c8ce75cc931b7bf28bf8a59f84227e20df3ffeea2daa317e691d3b1174c93c22b0e16a004b6cb326fd57b55a2be50db5cb1e98d39799c75b65849e6848777edc3e5a2d7a1a121d6c4606c99d19991e499fdc707ae92f77b377dbb6b79ed72da11b849edce9a57d3626d7cb9dafcd1b0dceed1b6a705ad4f314b23b770ad1feba849e5c1cc771dcf77fe0cbd5382ceb2bd8277443f56483943524ea448b318ab9f236450e87e665af7d772473b06187251ab9d67acfbeb0bfdc4c9565afba59f6298fb9bff4cf8d6ebd878936e2cdc4dce091fda0de7f52efffaed39ff298756c4bc97521d84f1793f9a685da7f4541e956afc8bcd7e761e207455405580d2c3603db2070b13397999c4411c930828be541c949132748376c512d0d32c0c09d7194a28105255b93ebf01309d0709a410c696479c108cc484a0119a4298ecec86285046a344199a1cc13d30c30c8604697326a1875b1048d242f4aca246d413ae3a9da5aad8a8356c59a8312b8096cea32130c5b5c066b2f33c1c0840c81ad979960b0e2636c77990986240e5a5a534a2995524aa12b7d4ea02929ed9194522965271b8b73b7136d7797b7dd638c919f70ef7ead2a557709b73f1a67b66861bc373a4c40dd035cfe62945276f7b709f416e0c6cf849b2e32afecee19bda2eb234aafaf8ef88e43af0945e6bdf98bdd8e5b6d34a494d23f6acef6fa90fe74fadce320d77ac5c6bf24d0aa417ea1cb44bd8d81736527a2c0f26459299decef57a8417eee0c8eb1bd9d5e35d338d4c6e1982929a59c9b76b9bc30f9492398a65d2f7fbbe4d472b8ff8cb31c26e955336d73416340fe669986551c95ea4a493923e955336d1bd2a4b0f16e18f652c3fed2b09720b853c7cc30ac7e7c4d3072c6e5b544b3d56c35cd5ddfd0355466098c9cc2514e7a65dcf555b351e104c003a75995393b437ce3fa00a0c251712ad506361ce008405e1af7d3315a33a2ad725f58ed379d589b0d6866ba9aceda5426b0746ab28c23dd766973a5f4ad4aa3e6d23fedc5cb972f62c494b9a1fde6d7ad28ec9c5b37b5cf0697db91c6a83e407ef9fb6c1f963d0dc69752b68fbf531fcbb44cfb84642fbf155644debe7cfc9313c8e7c584cd715adf93f4af12f8e57782bcf513427fd29fdcf585567eab9c06e3d722842cc04d52ae84c08932b44063063192a8610b1041acf102193819051952d2431233aeb4c6a081041a2e78a28a154028517182b1d8228c245da0408c195a70c48dd2d2184cb0d083152c600086234ee025063057d0c0082b5c850a9ee0420722c620f32488130ab040c70003171434b460028a1aa06849236490428a921155ac11821660c0a568229ec0861a8451822c4f489c7ec040960b042173b4c4cb0b4384a182225ed80286056a9031c395313010ab0862060b5dc85082c5862f558860400e553051e38b2b2e604a800c56544006172f38638a2a591669843103259ec8218c0b3c51c59513242911c30d3cbc308410122f41f8608608bcec80010eb3c59332559648638b2c428080050946a004531369f880018f825b4182a868218a0c8a3063853154526812c58c155471e58a162ed00414247620820a15d280c19422293f388199b2441624a80471a18b2621ae4899618b3032880888c1d4841148c860890c622ed0557f0df812fc8c811a5f3585146e74e373fcca145f1545bc1c04272c3fc25ba610c10aac14ae189460d506217ec502c61141b052a05270615d5abc70410a560a570a94b0ae8f1b842296d65badec37235c8fd59b11eaf5d857a54b6c8b9d1f4e83118450e59757bf230c45134f2860a5e05e34d820f46328b01e658cd816ebfe6d3020f59532d30aadda997a31316cf5662d010f67dcb0c50939e5125f28d5eb8af22589796d9877e3a33ef658fd8a589818fed1c3415fb361904b27f6fe452c2d7a9827bd8a79d8877d11ab8835e4553eb75c0c3bfda32755d7232b7a7ca5576ff52f3e6daea57d5a8c57b7bb9493d2ebaab57561582bcb324dbbb6ede238140acc954ac54fcd0461e35b0e87eac6994803c6468de39c734e7a451a238d31ce18638c31721087da3d0d644b57487f75bb22f782c639e16cbad4b52400501ad9fdf9f2e6d5e2b5925e651e27fed95887fef6844326e752ded95a3c6dfff893a45794660a2e9d9b3f3d61de66d43fcc2adae4d2f7329776f792c38e5a226172e9674ea675687fad8d27773df9d5df7783bdfcf63ea2dbe74f0dd2975ec85dfa28235bdf3ff4272a9f4a025c6a74e9871d5cfa8536971e451dfa2a95b5f5d2cd67fc57d4fba3686304dc4ab8531cd43fbaf453dec53af533cf19ac1fd44779f539affee535e71e0ebfe655bdab5ed7e5d7359baee6a268176639a8aff4aed49942573e563bbed2a4e370d8cdfecc91be25c51cc7d5c8d875d9c79aefbaaeeb6a6abe8b59ace9baafa9f9aee63b9aafa1f91a9a0dba8ec6bb54c7755d57d3d5d474355dd7755dd7d1745ff317a7a3a6a6e66b6aba9aaee6b3afc998439bd97c57f334345f53f334344f4363e3cda713e2a5f9783428bfc6e3db755d97755d9775351dd775af655dd7755df7d6d6d4785bd73ff343bdc14b6fe699ebb61a9a1a8da3d9c07628145793d5d43ccd06d486d6bf50a80d3e6984d9d47c42baaf799a2fec9e4684ee6b685e8bccd57ce1763d85e2362dc3ea45e727b98b1d93249c92c072ad5cbe7ce94f8fb1051b9b502af84fc422a42b17c275a3dc5047b66efda37d83777ed14b83d16d3ff584d0ecaff7c7a1ef391c44000ec266a53fa98c27c4dbb1e98c3c5148a45197d1f89d5e7c31957f51ead4bf332c07d5efe7596fcbaf97cb8f0c1b9d7a4e9414a46883c95cbe4e1ee6272eb9748a1ff4fbf387a3b68d596eb7ca29da88ad499fe2b6bbbb2fb14e47c13f326ab9fdfc31f360b1615cc2e26e3d2e87a5f29bd24627891ff895a37be9b8dee90b6bea4345a78825892701e3ba13ebf8d7d90587b106d75ffbe212f3f8a7b04c6e54587433cf84882df9172f3b52577e4b32b23b2a4c0109c341e39cf0626db6ae7f124caefdae7bdbbd7d9befbe68742bd379ceb51e3d2ad3a003e0da996ba3056ff7d38b08f69b5fbee9d4a00b91491af4a306fd3f32d6fe57860dbff36412795486f5f6890a615efbf9873961a9d137c934e80cb0dffdc5e9e8befbcef248c3da0fa5d124c3419d57bff3e265fee9c13afe35ac331f5a9a77c26ef0f63906746ff394d361f3dd479bb7f9721af4f9c4a3c1f6f1b75ebc636ef75d833827b05d8e993296afb5df14d3a0dbb71e6d817990cca061572b6b64add16bdad61c0ebbaaf1c2be353fc5cca7f6f1ef3ce61a8f8367cefe504fa7fe6156f6d2c8e6fd3525cba404925ba46ff721454291709972fd6d3c0e8c9c599bf68560f71955efbe1edddb7c4891502432cba5dffab9360e5ad7065f58fd5146b6fb84d8efdee60beddb7ce7e55afb8543e2985b5f8b4ed7be4d21c9b529205d5b4b48e1766fbdd09baef6dd0f752d21deee359c069f0130736d885d6b3ff20fb3ec470e87654a22cae56b3f7222d8ef5eb35e08f132f3d8741ef7361eaaf36a83a92fdc6eeaed338783431c8c925ef5c248a5d1f59f5ed85124d79fc81fa77df87ab2895dd31312464db48e684a751da6c476a36bf93d42daab54f2b53a37ef1bcc3c99e3715d83f1a36cb0c98de09d5771e5000861fff677fcea162bad992f2cc7cb4c56906e6839e77ad94cb74dda30a148bd2ce5f309f57a45a209f16fb84119250e36b400e0a01b1dfdd89bf094fbf8f47138887bfa5dfb08c9be9f3e7d55071c84fa1252407925c4db9ebd9a2700d4ed47a1fe6ade023cb8fd1e7870b55e5ac3b7cd8b4657f3a2130ab8fd0ab8fd98a780abf1f54d24346e1cee3969959ebf96699bbbe538a7ee2e3d2638acf454339bf4682875eaee359cc672ba7497ee2ebfaf74775719205b9a3153b231b6ecba5d3113848d717ea1bcee3ae89d5f659ed933dde8fa4a4e4aaf39a9a4556e495d6755adabebacaa55eba68483a37a27d5b561acc6bdd5c8dee5fad74c65c3d86ddb9eae8fe12cd7d17061adea519b0d636b2a2705e6583b3343b3855ee5ce795d4a77ee14c2da5cd0a50300150ea155be83294c462891e139b371a7f1c71a6c686ff7955b16a3273ef1fa807373e2132dd2605397a730238a1b9f519ed3606d70d5603f5083fdfc3b5fce7cbaf24b0261ce7521d3935284b90304d7db3fbb5a0d55b1515ed1d87f986daf640ca4a3a8e42d97743dc914d908001000d314000020100c8704228150301e910375fa14800c8098486a58970ba45114e4288490310418000000003002303234c30000811011fc4640313a6889f5cecabe4b06acc7b4509cce547c962cea6be96ba6bd172cdbf9f25cb77174c1695501404ac44eef835b2a2b9aa379b3672ebb6eba828254de6348efe5ab27622b83720bed98be3634ccb965f7a46ee53ae3bdf75c6a51c4fbc9a4247456b6f1f2b3e0e9e9859e089eb3f8584b55dd05a76d1b087fc1cb4efeaa896e80b9b13fe2fcb23bd0dabf6b2f1eadfd00c1f5d03ea1d2d0e75a1bae8921f60dadeff8b0d70113512568c54ac0d0aa132600dc2b8787952c409138e0d685507f7ed484c6bd4d70c7c418bc5fab3db8b8bd47d06ae03a6ba0d6b9e455b584d366206160001449d8552b7c85ed365c875bd9255fe2c05ba604bb3d963e2b57ba6b8ca017fa011b8fac0681c68e58e079098c6ad8062597c2878c8f4c2f599d8b17c32421809baa4bbfac0a0ff4f2cb015855ca8c880b40965c0429e25e1ef4b503c6e63a7bd146db0deb3ba14f6cb24fb5d91943fbeabc33e3945cba5ce06c227c44484eb062a1a2cde33c8512c1f1366e540fff8f4ad4e733457d13a8a93968fb14c7e73633d0745859853f832e0ee8102f6a96e55b3741f26cffa2bc64d1ab26d576ef09b5aabdd052a5ccb47c143ede1e69bdb072c2091320290fb687454fa776accbe9ede9ede52729ca552562b93d73e469836713e5a7684e072f1ae3f71bc72387ffbd69a3089edcd3ea78fe438d552c38afdf74c5a0d53742802ca146804b9a39563b8a09add5841e288b90bad5b5da1084190a0b56e8a0b6727259f9e18cd3986e236d5d5635178eb4586dddaabb6dd13a73cf5d5353a5cd05e49c6755da3588ad74b5512ac00475b52ce165062da2c2931a2f5582419aec0cdadcb850f0b9a341cb245bd354eb309f4b01a6cf7d879dc246447a52b368152626714e4086c3bfe9b0e35ca438f8bd6964357730c9f3b4b97ac163b9424fab4b492ee937b26a4235ae3ceb727ebac350f23b455b5abaa456aedbd20e4748d50209b4698fa451cc2c81f6a29364abeb5cfcdbca2099cb0c27ff817586e408aa8e67866a4b278db7226e9a8cddf0f56d3714d3a4dd45e8f66d9cb03870d625808244ace29f8db8b1407ae4d0e6d6ce3035cef4be7f296ecf9f17304e033a9871e49c77cf5b39583ecfac084e4126de4303a087420d7d688b2253d064423eb4aa5099f35a8950dce3248d016f2ad3a2ebff105a1d8b2042ef4092ebd9d0f276a988bc5ecf96d1f24ee8584f4b2af59ee55af8f48a6121f07d48b2df46d00ae19e4585a0fb291289b576e1e97cc90b7492e5f30b2d583786345eb118c9625514c1bcaa6bc199cc33100350625595e1eba8d70b1feb65b18acc761752c6fb7dd05d25f5fa13ffca2b13aca3267a44e89097cb0160c2da02ca1d7d9d47cf7a02a46b2b2b27e9fbaea4776d67dde159f7efb1dbdba3c45869b7f50ac155c34d2b4b1dcc6e48a28633233622f1c33a527c2ccea1fd2f46c4d08f2e66c71d71b11c2dd4e041ba8233797df73ec362394a17568f0e34f42b53ccae70ee0cf19f231f3d098cc2ca689158c849c6d04b569f4230be64968c2a3fe77a2eead5c769f4695345c2393ef514ac833b57735fe52776ad7f849707d47550d5db32b9992fec3e615182c386ee0885e96b89216a47ce2106c50b82578bca298f5904019179ea88632b182ccade249d0277dd88f6bc8ea8168a5f4bda1bd4602458882919b850d52c6e6a4e3add7e280c7089822cf94cfd027fb77f4634ceb55e804de97e32b844601fd4859cc812138b892a6e3acb2fd3857c453b290bee7e6b617d3d27f7b01117231681d90bce29d85acc8b4868d6b3464cf109d680b15a8c09294efb053a4bfd4541b774aeb6a0654f6370257a31057fd8953fcdf5f1e7922b01411ce3caa936b8bbbed7715bdfb442594ee93f928429ed6aee7a3d5c278c8959f18583e7db653e104e1d4f2cbe1cc3f214e9c90c6673f5a3c2d661d4540c19e4019a3c8f9857b12827204c113fc797acc9997666bf3bc9147b1a8fd76da3776d768ed7b95eb3c29309d836ba5a3d86cb8f720db692e8cb308bbdb4ec66b46a1b9db70b979e911fcf97fcea203ef9d1bf92253ed06609e77b9754259101db9f6da33b7360f0e466d3d1036b83594ed928acf05ce637e58f385c47d84814bcf3ea81f834adc4e6cb9b683efeb71113de083107c6dd4cb0913b1bc5b8fd502aadd277b1f2c3c790c50ea354b7a05ba517b08cd3169cd320d219f2d65182a2f7b5ee01c48463fa19367035b71981a66fbfb1bd76ae3254f20476cac7c2ae98bb47fe88aaed232a2131297e46551f7d30e3c241963f9471eb72509f43c00dbd40813124ed03fe6a5240d6c6421177034d7b01bf3dbb4e83db66df010802fc7a725e9758cb077f1ff9cbce67f89e8fd3d3cfa2cb1220a023b95326bd056ffb01351ed11af8a21fecd0e358902d758d1445ff9e39ccc105dfaab73bd2f8a6e45d3ea346cef46ed7bbc791cc495059e325c265541d50e1a1fd89e650e99d684df0d8319459b8ca3639c5b059f541fb48cc3f2cd38b8afe1dbc8f7c6e4eb8466e1f0ea2326d56eb1812912f0164d805bbb2dc7fe3741a2b09479decfa1c95697b87cdfd69ac43ca8746ebafcb73217ea973dac7beaaeb4266e5770b840270e13e17d9ef500f6e5e9855925ebead5cd66e79e81fc820c7f9ee80baa57d6d69ad81d4160b48bade23dbcbb7703a55c8475124f2efbb38ef1858024fd175df2a2c17672197975f3e0fdac53404b17d453438241405894e6a838a3e90381f3cc36cc72ee7e3724139dea3a20339b485fdccaeae4f76f7fb611b2afe9569a065b821b9fe1d6bcd3deeb27a56d2dcbfb14904f3c0b548ab919f1d759b00cf029ab6e95769142595b943372f19af361c68771be16fc9ef924ad3010e93e18372d0202ef9e93c3ccaffefe7889a8a4ab5cbf4a5bce7fd68d3de8f736111155b2fafac5f4601b659c0faf7376b9cd8fd7ebeed445858b00e27d7b4a14dce1c92b30408264ef785aab6ea52b5ec870e631b842fe92bf4266860f0adc0c3f992b8f42048338569891e9e70244504a34cc590699168a604eec0e5f2ff994290336017d1ff7d203fe5beb72784f741031b7cca5aa0ae125a3741031049e407dd3780813b16954f4713e4f491fcb9ea7632a5b5fda080093e5dcee39250be58159d481f3a13aa276483e455eff2371dd3b00de19ced4866594d4d046efd05ca7a04adf5f4bcc75f522a3351dc2697b6fc4a850bd337d10abc4365d0738d670c68a74274cbd4ed51fdb5037d325560c9173ab711e75130042e9174588f826f690e661b8764eed130e6cd8ce61baf001c9465332c83d843331c039e9fa0d2a8152b7d978cef2834e9cdcccffb7f8eeac94ac9503ae8da9281a0275af460547968f6587e28dd2f750e73d35042345312ecaa434992d9c4d0a1484f348bc17ec96c28796de630007450ca78c386f604527f903c48e6049434e9588aa2a144ffb5ef79364f3e4feac9746907a037fac40c2159ea6b02240ee823db4afa7f665428049570b33449b3fae7ff2b144d771f8d881c59c0838963590caa7e5c00b40976089c6ae34856b6b6673f4c59d8ccd4a08196c1b30d5a6483c288a253e3ae8a2e234051186a42a1dbe1eec13c8db3eeb489888b9ccaa3bbe68e4b8a542cddbe88a3b7cb41a217dda6f2b32f672346ac203880b9a0140691622719c2508c94d62a5517b41a7e06b441d3c961ef182f47937202af79c65a4f616f530bbd63019d0a50a96712740086c305c7f01073f5e20e1c4cf66338e05084c837be788730cc091a971960b8831b788381a545a0d8eee4a967f0778335d316e86cc270c0e9e4af15e643b9ebee2ce290f08f1769d988d8ff639e3c2a3fbb95eeba373567a1272880a06e776fe60e8d40a11366b9369ebb0dee14cf2bdf4c125c33645519debca3184288e16ebc528343599793fd2a11162e8d24230d1f9bf45c897cf32d5c9fcc4c71094089312b90b41874ced09b48e1d0e60b6865b7b726c910dce43fcc3c93dd5f702398f40971918256846f00ced03f91419bc2d09fc078acd19780f0f745008fb6a21723f5f0181b0f514fd6621832a6e06c4cc1f7620672380f76bb5710a8f08a824bbd5ae8264832722e059304d2e040049e4f726af0a8d48aa394b4c4a3bc2ddc69aaf5e7e4d20a14cd1d0c3aca03d916b04201400a9b6dc2e48593cc74e0d7520c370a4d47d751d7ed708991837c4a244df84d6379575f19f5354f463b396910ece8359a94550e70ad3d5279ab0e6bf81b93347750d4acaaf55d521d5dbe79a6603f0223b396b6d15db2803c5130cf1c0e63c9fdbd9e7a582aea1dbad886a73df3ff6307bc7059dbe5f3ef19f0c3e27522cedd319293774867808b102dfbf3c1bfca980c14d2ec20a96206bacf56787985b42bc48e0a1ed022db4f1c967961b58d948a7926cc83287823660ec7251c98e46bd61d05a01334c50807c0e511fd8cd178981492a1770e4537e682eefe8c6801cc7f70a1fba19d9ee1c9594249237f2706871a98ebc052508295f6b06e0fd089c9de2a05d08562f99d8a13690c75c23d8e47dc11253452c8a0d1f3a71f0ce6e1f861dc9f9a8cfc04e1464629c365f3b81c0ed1564dd6477b585501febda684414babdf7375d80c9de88862076447c0183d719da20b3fe8274069c0a58a6512ff957cb0255479e18bc6e3951e9beff68bf8697d50586043ff4d19cf8e684405711be1ec67baf1780a8b1581bce4395a1f03dee1c74b1b0f0968b98f083f5dc474cc1a6ade5c4c2e867e26999ac9afecaac522086a492d353ed5026f63b7b94f3193b7b0528f5b96c83359563ca6b10a713ec984f88e0f871f672ee97678a04ac15b465780ccf2929ea1df18eebc584040240d05b6746ca9dfc63016bebaa20d60b75f77f10068c042971d127900741d9c7228a504f78d35030d1a677a83a842acfa7e6c87742824251806e1a663cb000135114eb52e6db9069a10141d26bb1749d0dd27499c6c0297e6fd8d222e84f6ed0e90e3c54528ac687ef1db381e825c3e467c65855a9f9c2c55a3e33e6a6ae14dae0dad543892011301cb54465301714de03edeb9e6f36e8261830e8e7c717caf2d419a8657991666d4a4bbdfda4dd0446ae491b1e8a4122110d7c98092e8e39f679da026fb50e8732767ac45438dc153562d001f4ddb8aff94f89a466fd8b7b78e7cbad9fdf9ea867046dc9f70458f7c619f44f0a3e893e2d18f13db13837b6d46fd0c0926793a857214103eab141789f0155987c76bfdfab196d9d537842914e4889823b1fca361088bf06895ab9b6585b45543fc74b7a320c7545b4781b0be5107ac33822a056b0f3fab1004cf1ddd791045dc9a37d6ef5d53f9525d67c333174efb0b8d3ece809efb18cd85177435646c5936051068c459ac0e3462d55f0043dc58c66a9e498a892769c2ca17866528ce7aea03d7c57223501f517b4847470a24d87896d401db5037cee96d2d123555b9420aae0c33d1b9e9d001fa7e8f52e4add2eb2bdf5dcac3224df99c3a36f024b6b91c0a51b1d526a32074ae3097ae371c334b97067ccbf1a2b3baacae4298da87904fab2fdf1cf008895bb8fe2f1698ca4e1e5129b464d360a93c54af929fa89256ab1793a3bd94a2a4efa4e7bd5984c1a91838f4f0f15c1ffdec1e102fbc03001901eced7f6a27dd6272e5e116e061a6703730595a9ab1369b1e00ca794efd708105afa65157d93131ae8cf3368649d500361d0deae3f1ab39599daf2801dfe9df8ec4fe7cfc1a33e99a2543becb72f9cd704c99ae919bfde179c5d87d8a2cb20e3e9888a039e56f482096901b48b80f4143733651b61b85ada66cb7ad1f2994e9f86b801a96cf0bac5abe826dd32536978ac92d311bd9adbab7c427de75dcaebcb1dea7ba3f6d4e3a78cf3371a5542a2f30dd06c0d825f8933e79ef3e60d54249cd5b7ea4b7a934276ae529d7cd60dd509e4cdde8748340aacdeace461b6dc11310cf54b0355416ff8d8998e7e4c1804664334b031108c333eb7124714c236ca648f0743d66aca38e6f92a41ce1242004a6c7788f4ffa557a6d8a3bc16917cd1b421290401c2307c56978dc5c6245312c6ee27ae15585fea993bedfbba14d96030802a0f461e952f793d807ea0401a9479c7880b67755d6182f26b91f86185dc074cfc22b5a9c9c900c45619068a597e6d71537cfea2ab95465799de42d42cee5f08e1885e99fde38bdc7e60a9e7587c05a739353182e3932090cb5a5d00368002381ca26948def2a6a04e24194cc5222bc1e42d0efa93b62d8ecd51d41d5832e90278b92f201dda86598ee3fd691e4486364b261248f2c80d79174f0c716e8b79e7d88f1f8c8dc667e89751b2058a850c2d2d89be63815e9a6646747f1d7807a7c5dbfcf54d697c801ca9f04c9c352b9aafce0b440122f0dbee02a1db8089845be2fa0e6673395e7ca72d8ffe234f4356a9b49878405c65e551e2832e1a4263e0c4e61ab0df4fce4664dc896b9208b6923ad5eabff96862849e1d7291b676906061c0fcfd5eee3bc98a0062a5d67cdedbf73d4b715af1d826918c0d68c92661f374230b56477a44747e873b1ec8395a81790ded18806efb3a5280a1880973e381ba6dab575cddbb3b7cd327549fc5610cc7bc57e121e37ee721d0168966d67aaddeeeb5a4e8378b1d71a0658a582cd6d08fac829c3eeeb126b70bcbe6dc3310d0cdfa97ca864b997ce0aa242c1f1ab508a7884192688f653b036112e3456196e861f3620f7f3c421448c24c0cd5db4e8477198a2ff12d062bb4404b31579061b99df3650032d4b94ca8e46b90344fb45131edd3f745b27f47bd4c1b62112f8b39fe18c207f7deaa2bfdfb74588e7576bfd9dc9b6e44cf71f9a0ba57760ebb023f3adde5666317e23688b2515fd95078557e075ab9e6ed013c613dc73f4a5d55503b51ba4172fc51fa8098185ff53d825d30045c15a8af44f49194d5d55be441a0badc39bd0c306e01a25f68c16a7928e7eb696a8ad212c293dfaec50d5ad9ec6dd43c3f59686a974a01bd035bd07080553cce1e378b0c0db2eb2d0bbcf696ca0872c77f186992985456685fe54b77167af4afe77574b8a124133acdb941c7d01c6d7006d4a32087b0e41fef4832dcd569472563ce0012c2132ff151a7db99f759ea6d7d80390d3981498d995211fdb866d1bb468b8a5d331f2268b46aa9a1f32b998d72a34ac06288d07b64c2a1c7eaf5000875f2cf91b465f0939d466e36d3063e2cf755cc1a033ba01f5020e22202f8c617f5c29b10c0552e1a91f0f5fc888ea67d47774987d301f88a67eb6fd2d93874fd93f6c40131a6751d1256a7ac6c46a901ab8fb37c57a19fddf683e7fe2e31ab64efaf222fb054f14d458029f0be18f7285a8848b447588136e03737f0f3eb134465a2fc1c8a8800ce9b7ac132a6ec2549ab14a1e5497f4eac26bfbcef7432cfe42ef5ce757385e426464b47bc925cea59b259aacccf48a000ffc8219c791f5fd13d84a8111359a5cf14885cb408f86bb32217cba99e0f7eacb1a48f3f496fc1cbd14f15fa9812b26c0e6c90cbabe342e473d1977651533e2fc2001f81bcdc8260580360b4b5230d583718b029d59b1fd8f8d64eac0c415a7d4bfd9c964c6644a712ee9eb512dc22e46e729100947fb3a848f704dfdd1ac87014090b0b474d710c58644a0cd287b09a3c6c1682672576bdfde34e6b6b57d76c289065532537c78b0386515ef5e9051c6668278f0bde95d54f07f836466005079ab2b96c9b2f028474df66981e482b68f905f28a51c8f8d59555cdb3d7c08f86025a6013fd7d14d86422bc737d84fd97b0edae5ff5c7f49d0984d9f8be668391d8bdd07fd165b990f4ca2f7f5a99a979860d72a137d1cd77dba0d68f76ee0a719215825c12f6cdbc4b7980e25aeb30c0675f8047775811e051f46a9e84beaa78068e1985b77fbb802b437548b7dda386239e7541649046101c47e62f4138b2845ea7e68cd6ca58ba912a249ee7f02813a5c59b8251cf4a94cad80722681e3f228fb2291931338e0a9038c5c28a91faf4d7e7c7505e8d909a5c22cf72381c05433f1904837fe14b7934de0dd8fbe62904af3b72f46e5f2031c0b9b21bc9d5f8b2becd9085912bcb4e2a6f348520ca7c55a97b1a1cf19870175c4f156ed8e335756dacdb8436c462635d45e87c029e0783a2b57c6480d6eced7ed4b8709c10da0c3bc14381245789994e0e9cd87e52d2a7be1de363c57aefeb0f53c6b1a70ed5c42f7d59976e1fcde02aabd8c886503868bb684022375aa18c2d57c3c6356565cee53fab2a103cd0dfa4506f892a4171b8bc48d80243c9e2e870b032dcdea16bd7fb889a80c6c156ba8c59825a30a32db30c8018ca893eb795619080bf05b021c775ec433f46a4cb739bfbe151c2a57f5416d8e5b3d2e7471c20d5c266a71e82b857c0ed9a187cae97b76149838fe86013f81ab6ccfc3b9bd224ce287334930542c3e33d3523aa39beaf41551e267d62da77798df0bea30ee352635cc3e3313f423ef895fca69b97d3e0d9cdc9530d83080b8d0d29b5d6f459bdf72672f1fd98e9c220f5e03000cd4af297a430e3c6865d83de61ad9d10d0a06b033cc8a5712ba4086eaa9248c205139cde043d93109bd8be38b4f2ce6e0d20dde82df7288aedf05691ae58f827e28e4877df689c97c431022ea11a8b3bbd00ad64fbb699d86209d8a24abe5fa2f376e6d91fb3d282dc18fed9c263ad46954f9875e0a448d3d460f16912828abb9cf52a59bac84dc9a957c68a14988843c162f3dbad2f670b59b8e5971280206cd44a7208cb44e8e2e9111ded0aa80988582f1ae6281e407c0306ba396d11dddfa39a435affee0295ff89b82f99cf5a5e604145f1e10215d66d486015c2a5e487a8337c129d2ef83d2bbabcb547b81a8f17b6f3a888b6cc102f354715e9fe4b244d9919d01dfbd3b20fdbc7b9383a3af62d3f48d0a74b498a50f22f5f619cc9b7be3859e5c34a2ab867fefd3608721bc9ae737eda78b3fe33422a43f245b91afb4b2a7bfb5ae1dc7486b295d63e8c02ada28772b5be7d6bc0f6cb3b31266cb7ffa3435f206124f3aebc5c2a500ee80415d21e9efa9eb3ef4514ffe55016f00abfb51a9b1f71245175e62bc8bc49010ba97e968069715694805dd56d37cad0abc4db4227f6d8e9930f2cd20d098ab4695fde0c35c5bcf36de4c7057f96761246835b33b98af8880a52cb8428beb21d8ec8e55f7086a5b69a5d5e42248746c5c21472c86c3e4585ee2bc1a041e6263dc20e2665fc5a598a2661e6be28776e63a45224d45595c329345a648855dd4b242e4b6c55420df5ae3e953bc996fdb04be7073bf84496444103da9fe8f77b73e2c72b0b7a9b1af82754c5d4bc86ff478909d59f66952e4f1c03baf3fd44e69895a9f89e4cd59d44fa6950304404f02a6c913fd682b96313423cf607fac69b26d1dcd0400c6ba939d7f9291935f644b4fc453a68440adcd9b80bf66a1334e76fea92ff9e3da73f2baa2a0c34bc9e12020098edbfa214835a7fea7a9cfa719c92c389934f02f9eb07efbc690727c312f58695c5a7a1ad0661fa80b20739f2f1a1032a093994a35e90f953224477f7fd12dce0cf2385c46a4d2396e252f5a1839428239d555494494421bcf7f920f4c4887b1fd29ba70963b058ea5c82d45222d5d5f6f6015c6777215baa3873aa4dac26d57fd7af22aadfc24fcae54920e62c7b57e207fd2906f5112d1433643c30e7d540bf9a7cf375134c24234d8f9528bbe764307c9d018a9f2eb3bde74065f1ebf0d63018dd815662c958743f009840a2089611e04148cbecb3e38901202ace039ee545f00fb31bb2c0d6a04d4a464dd5d85aa0cad4d9f27821cf16342512d2cbdd5bd90931381ade3960dd15d3b0612f4053a3534e800c3209822058b3f7727a816c5ec2a8bfc4505de047c38e8897c20e743bf8ac296e08c53f4e4f0279379005848b2b43a7c1867aaafb3f3651f4d19523327da939f23e7021f6b0358a198e137bf6f09483459bcfceefa652f49e1dbb046387927bd60b69d13d0d4fc696a48ad019df1bb16e5434932fb8390119fafcbd618d97b64f3bda78e61b652170940940ddf6998a9a003d805b995b176da885d1eda38e9acbde12ded0d8c666f44b2b7c42372e89fa32190891de1e7260465d80c0913e706543e7d6a1f3b6f2f4f94a7673801bc5da23d7c69b1cfa7aea8cc2f1bdeebbdea90a6412ad63fd5fc81f9c47ac4f0ca9705e5f1a4bb9f512e0c4aba48399aff98ec00f73a58d7dda118d1bbcb82023793a9caf3e1242fde66425b1ac1b0967c53d211734f9761617550fb9ea43f26d459606b0f7878146e3ea21a6552af70f0c7192c63b8c89765bc07bf0b37da1e691c3d9020cbb26bf29081f75330f330aa31067450806d651f1567a0ae5d0fa06ac07a41c3712c1316e87b61d59cee18634ca7fbe7148a579d472001a405380066ca1bc1de087c2733eed2c0f596b142575e02bdcb7059a0ae3c72d740d382cc189c8e7c7e51cc677794d0f32bc61c1dd33757e714d7068224dc919af9733fdb2c9d12b5cc247f1760caf6d5e339aa4938869e9623d5ba58cc24a0d64938278013889ad40ebbc9276cd642b77740c384e1cd6fe9e1fa7d4055d53344324c57d0fb40a17199f978df5473baf31f4a01b1e599c2c057e701c39858a8709bdfd9e78915a4cb614e0f09a55e699dacce67ff1eab92992828ff021b3466ddb26bf60f7385521a4b64bd71bc5a6547d04f623112ec549f3207dcf4fbe84d9e489ab05b415f344a2ceef8d3d72a85b9b3f3a86de27e635aafcf16d833cab97ea9c9ab413de83446b0f78bc34d2611eb04043020a29bbb68f5b110122580e913e8a14ccf444ce43946f4b9659556f1a044b4908601ab93f6e4844df9bdc46cb247b0270a22361f0219a3fc8552c32fa7f9eb49e942b36f342ade04b0272876cd20faa61249e59427501a5491a6161b19313c0ddc9a46a08c771b7ac38df53f5238d75c4debea4f9ac5e095de5a3e61fdb3e7af98c03b3702c7d40db01f584ccc9c92fd0621956dfa1ba035fa09233545cd37bde4cb9cdee1179e9c9a50dd975690ee270b8343a761d21def82e866b954f3288d3547bd960db2ef8b3aaf4f2cd5f4ee0b529484e54d3087503be45a15cb418434778fa0c33e2d53ebecf4808a0e6a698ce6e3ad9db6f67123ca292419e903da4ca233a6eb26ada444468a4266e1ad9cc81983da779870dba6bf33e6d8933f9e8e029ff764e4103a5cb8663ea08cf87918d2ea2a3621a313755978e7b3628a8d501577374a1da323d6d12aeed64d4846aa1921da17ecf9db282050aa9a86c19fcf7a8a6e4777795bece3524ce35f04f03b0e49388ce8a41366181bd30c228d01873c5b3371747da4a6d0793e45648c0067471bf5842f3c9cae5d69f15e39a8e1f064f93d3398e22b1015a413623996819e97e7af40dd246f8141838d19d2a7ddb91a1bb8b77ad4f4f7fda646079915b0f2e544884ba4d7fee830572cc72ca1a5af1d254ded1c1e1ec37cfbab9afa4d73f44b4f09ae735c3751cb800be3c090b6619db80b013892aa1fdd5edd21b1496b7245b3303fcb6728190e6e94cfb4cd679ffdef8bd4248238002b84b682f6243e112bc2d8dca0296d8b28f1e9be1f2d2493d7528aec212e4c46094f4b9c06c37d592c7a07ac506a0ade2ed67ccb9ebacce8726d485224a550e3b02b7749e4eeffc7f02c6141a56be5c519d39fd72d815934d78d165d7059da549260cb6d12c482aa46ff56f7c35a32e95115963726e925d3cfb5386936e8a0e1438abc2cda82dd8969013a85ef08dca339c87a97b29e731d03e481dd8e478ff294f8183c38c7da14d41683adf4e2127ac50651ec70e58f6bf6b4c917feabb6f8b6635d07db05d04cb52ac7b8eb31edd1235f644b7ba46529f2d47ee7ef8de39f76b575738881b729891a1d1276ffbcc47faa24573053730ba8146bd8b44e75feec0149952d05e5342290e17c516c55ecf8e0bc9268528d0efcf1c3575b8e8a81b5553986841f4289169eab6ac3f8079bec83f02d727c5600b6dc68dc71cb83ac41828d49de140a657a8e5d0a7d39610a584f3fdd288c3576037a98797213be4a468222046153e4dc7c1bc2698d13b07b8ea21b467cd0f1d48a4551b4a6dc04ada47299fa0f2296efdb08d3594bd7a023ee96235e760a467691b2a67774333348c33611b47aab87d5486e6dc097a2acb6f490f23d9c9b5586bcd61106e7137c11b19a9228371f6726947e22783aa11e8b0f06762c625e83b2303e603b0b46a00e128b2289eda9e974940499316e08cae81a1105ebdebaaca495aea03ab59086a1e1c1483b2b5dd555c546cdbb7eceb1577503972a628aae7a82e34209b388c957a214362095772570729298700998a4dfb4b3d9ba0d60436a464cfcb9d2bbb5be861df84801f0409228894300688e0412e9601a3e9dbdcccb65a629cb4cb2ae52a70e6fb6fe09d1d6a39627c5d0519d6582aac3d9c1e4996821a35b63e4c53a3a3f4234d533825156dd6cfa48527a1870e200d0296309dc07ee59f5f7267c9a9764f762de9b68f76698a04f8b91bbeaa1d1ee747323797b929b91f488db6e60729956f2c555d4e59887fe33cd326970a1a6d053bb2b5af601b46a9c19cc6c6bd285feaac68a184a897c39655585803d7ff0811c87da1fed689985d1f1473f672d9b5d05948075a40d174ff8f4b2d387150b8604a2d8021f98ea21acd9090bcb0e907ca2556f50a0d3e9035f7ad5a7a1c77c249a922041af91cc69a298340c0fc1382a1de7e39048f04935be9d3e5b01bd13aaf9ee2f0aa2002121f829a6e4b606a875e444d0df41c37a9adb1b508a9cc9ae48c6ed635027a43f7f82f2a5f4bb9f5cef51d9ca19b0d7dd1e89615403f1484cdc1a8586ea1e006bf2307dec1e0640de8719b84d5c75ac77bca60f73e9d9f034e3f0820dad6d9b0c611c68566d9288ae1bed7ecab35b203519fd1fd349e4248b5661900ca89d823a85bfc6617a14baea4035627035b76fddd4f5cc7530c631729fa566991cb7c28cc1e349d019ac7774c9acfa5c5e5df0561e1687eb088e4751d6ec5d3e21778b1ea1b18fea540329161b860488d0b58a32aecc6b0a2d7d02c5cd462949fc3645a6cc7c1c29b62106c403a9789ff0e9cb837a7b4311dcb8e06bc4eeb6284ebe7ade906bde5e735a68c1b48986bfca1c6c308c32a210713f4a18eacbde5311e8fc0a6c285b32193ad5a219138378531505829d2fa99840339880193b479881337a5da5c298766d6afa3188fa2de6ddad4174ea464a7ec9fb3d362f164723ef0c9cbc1e2a1ca97c398b54ca36f779d0a322e9732d7b49edc070b72d639c3a42e3ba8f115e52aef2da49ae20fed3fd04479e29491005d5e950367f4f06bd3d240df656935583a42df06e99fede218bdc714dae66c8853eb01156faa478fe14839cc7bcb3085a34abfa733baa464c22cbbaf091e8d72aebf018f2e32ce40abee428dd6e80627dff3bb48822606e7d053137c8ed5f8bc93f5e34fd84b70146c9c47a99177a29d317d187aea287a0028530168da1012fda81fe97c79f597d378a8e7abd0ee8abeb1ffcaaa9a35269dcf3e6a6bc3e93752ecefdeb697820bdb042ddede4fc61cf3949421958ae63cd98b5a0edc10cb3f9928a48d31968f3f63f739b0e89a87c216616068c4ff5d02e057b3cfdd6612665e8b6cafe405a19a2567aac2ea061c6d95cbf5bcc18f116803f9fe09b410159153d587a309beca04cc95b73290c0d6f86543acf9afae8bbd57c4f44c22e07256967b1937e80193fa09a2dc0b8f8d01f12c49f53bf2334fa48ef0d0b412d49ddba5358ac3b811a534226e6b6bb300d46270344b280e123af63d634eb09c425d6e4a080862b71cb4c79c193eaa0b2a94080add8bf6cc5b3702623d3129341ee1808925ee16931d1a402e56963fa924ce2e7ad7a12cea5017926e0ec5c62308e62b1571a03b4760f15a5e7203f9c1467d02b5329df250c72b3d3d35b5f881ab415770082eef33b16c07ffbcfc8bcce52e42957932bc63b699641a00ee53d8826e03bee15cedf16ada808431a95e31de7076aec6993d8006150eb9e12ea314ca2069c2f6d7242d772c4a3c5f126e47c90827813d32f887771b014e7ae9abdec163d7940dd7e760f5318b0105742e9001ade1858bdfaf7fd07e96ae5f4f6d28a60e5c403e144de28f5acc256d4f2dc5702e1cea11cf2a95750ec1ef82508dec10a997e8b7ef586f61ca05f370b01041500f5156195166fc9f7ab4355cb94c57a2b04e72d6ff9fe422bc51b32ebe5a68a453a4af4a2ef028b1beeebe5a68a457a1a3d6d95e970a4179c845ba2f5f5a5ea251d2d3c656fa1841be73f5cc4e5ad0b8a4528b7dd62f92baf77c36d5391ffe4be50d1a6d9d584f62c40cfd314a0e3cf3e3c6e59064ee903e904ab2d3e6469369adea68716ae4bd1cb5fd6ac182eeab302420b62d2b169613db8cbe5001355fc78f1dc2cedc1f825e660c7c53d169aa4e933bf22367952a51f90c8c4c161cb0c42b78044366e87e84886f58c7a2b695a936635fc26db85f4b45fdadc62958f5d86ae4ae6e7ec879c3a8d0b54b0f3a3f02901f40edb5ecf235fb147c183b20025e96e442e68d0011a0f62a05466b55e0a514c0c8c5db34c6b96599f055366dc9fbbb280c8929b8cf79ba4457db09077d72783f8d36555342a9c3470a1877953c3dcc86fc5ffcc2d686176c4e47c1816d200f71ebf38ca02bc98225c5107f6e3fe8165b1f4c41ad47856a0260858296b7ca46afc640f7b72701834dfc3d7afe82d8d5487f01ced67e4f6a63d44b632b852d9395b9e3846c8df2e15e7c3cc67d0ef16b6bfeb3d6141931b8088c16e335bf9ba804fce0d2fb8cf9688e71a348b33f4a46d458c012f142f5045416a05480e5e89df2975eee25b726cb11fb160c9294bfe3323bff08b612a03e06cc806f1f177e8509dad0ba1c8daaaf486846d165b5c8899a3ff134b1ddb57e6d73b690d4e406f53a5240e8f76c7785eaef7d9f2fedee0c5f6dbfbeeca598197cb6b49af340ee0610409f071632bda1f1845e9539448894e4588c6150dd0708d38e9d4c62b6be3a91e5562e2c946af842227eaada5a4500968c3adc588ce7c865c8273fc799c06b295f1701dbdb5926798d19ef48d8eecba32057aa12d28f1061ae5f3a0342bc749b99e4870186f2bf65e8ce6c88186d246a3a8d57bf431b66aec48c034d70ee760f39af4bc68add2a4a9344d19fb29b38e143ad727297ca3ad2ad0fa82f1ed38be50f559d1706832143419ab3ce584ef5d66ecff132e703697c6e61f59500588e2fbdde81ed6b5a591c6194a54cc46949fda7520dd6ee557e223e8bef62cd93eaffbb2c4f0e12aec96493eb3b0cfc5384a8168aac639d71bde01804ee36d40d32d511e0d9e65c0a4695b047d5965f2fb9262d4af453cb79976c372ce8d61a88973cdf8fb144e09136a8359e8e94360848cabca7e8a4bb22c4e0790ae973d5c5cb4bb73cab1b435193be48b2d8f1e5141a3206b31be662843d65fbb71c4a5947910c6e99b046a741c8dbdb6c7c109f06852ef86ac47010c74f39020a8529ff62fc33cd792b1136024053ce445434af1979fbcb05139044a43161109db5e9439f2314935c53549857710b4388667ad19496fd4302ef171a975c5dd3ba2169551eb0509384e2807a99c295442055d15dccb89758f1d0cf9b6f9d55361f65955cb39d6eea85f4812176076f8afe83d964aaf7cb2e8f26d9ec4c42f6dace87a45e304aa76179796eff22bb9e4418b9bfa04c4001512be471a0d1f56103e5dce164d3ce35dd1e8f19c2d08fcde79440e0582a497a8f63b8a81dcd7139b069110daa6dc812da4edb203c85634893f68f34909c7fb24826f87e6b16cef17333bc80c8a5c5453486b88bd0134a9286a800fdc4c27303a780fc71fb7c815345c2c4d4f9e3ab611a0f93edafa1abd263b97b6a3f0534e2d8ab02d6d536153c714cd267ae6d38add4fd38e9dfeef75782776e21b4b89256080e60047a7ddf07af4ac6c43a1b9d1942d6d5b67e163e95650b0c0e5c75aeada98d6a9d77de67fa5e7ed845ff60afd2caa9131580708b1146bb24bf88925b866e92877c68970320611b60f6373f30c6a609c5b0ffff0b0f71187d73405139da5affb85841ea2d97ab6898cc5891589dcd31d20db26be4df840b9534991579bb9d38599035efb4153b510196836f822d1a074bf7fd8d6293c0fe71e11a03cb669528bbaf732ce63f311e83e24d2d70baecddb71a72657527c69c58efa1fbc8f12e1d9be04efb2d7b41c9ca101ebc3cf129f46574adc53a0f9f70bed49485867c3d841163265f9ad8d3d4c87bcdf50dba7b590a1d5679bc50063b557dfc172b11db77447aaf3a93cbfcc507c6fb4679eabdf1d00525194012e871b8e03974a9ccfa99afec773df29102930c5d2d32430a7e99a944624d9b7de02246c04377078cbcd85b7a2c81a137e0c4945904a6726e410a58f366abb1d4b32cfb49bd3982a6acfb599911b5bbbfabbc029d2962c0b02f095658e85aee1e9b01f8b77fc6e0962b2eaf878585e64c6f552d18a84c401433b293c1d61ed6754176eec20a55a1ecbfa9d9f91dc6f4ebb183287cae8ece08f442af9549c8aec3058bc24c1e82eb44156ee2018db3a97a6cd022f3f9ba94faad816a59176e0b126e0a9cf05af74ec0cc4077af6611c617479ee33bdcb86cb2300ad566a4c861723398d3f96c12bbcd90a213bab25a8676b514387fe9ede58ed52867613d413232285bef01f5326e168f8004f6ba2b28628a01b98d11a0070eb9473b236b6ba349ba6a69f5a735cf7173bda836d51ed4f3d6b1f3a88e211040b019ed3dc37bd619ed694f2e0be37d365ef7d59858b670b247925963826069c0a1fec1da847d7620f33e92190c72f3132b77d2257e752ed6048a7916fadfa41e2a663d3a31e5574e451c3ead0b70196a7829aed37346899ec538339be7a6c2d97473ab4426be175d7d9e34a1fca48e87cfbfab7c2cb6364ffc17e63c1d597b33f5e6e54d5187ce060fd78844af584806911ef9219dbdae7ac09bf7f11653c8601c5995cb8836cc95c99ccc0255e45b2d6761a84d697503088c6dd02587c63028fbcf5866da2943f9e3f326bd2bef29d7d0dde5304648e63f6387715bf8666b58013a4b37f36104618bd05923b1c69906757e881eae2368d8731dd744b70036f06ae832fe9894769dccc0d4e38041e2c75791e2f194d0e49f998b53488e2cdb20804170513b39d0707eedb262df71810248bede0698cd023b9fa1682b953ba402b077e983be6e1cb71ce7f8031d7d2846ef23dd020e50ccb6bc6478bcda54aa8c05d1de516d11fd69991a60f06205e3f07e76f118c713124f96dadfc8ec103cd2a6a532bc7753ddaba90824900e1bcfc8c82a7f17d60f9d1eebc1cd9a16b70f316b993d70d4610f20ddf81d1bd205b398abb59c0f3d1c05460ba85da111597311fe9b9cc667c1724eee85236856649c81950ff30d3bb19fa195a59b829896e78d4b98b9d3f602ac0be9358f10cc8f586fc07462e1570f00588120dc770d26d467e0037a98e49aec23fb755850014785d4966cd79959fa472c5d446128541448cc105c441f4d83b8b547e0e64698b9919c11755cca3de1553e08597d3c13c0d262a22f814599d85290fe7e96cca6d629a48e638e1416bb1c8d5dda1ff85398e79366523e23b6b13b53e7e69db56be7bc825d578a1685eb4e6cb26ba4775c8b808525c9959aedd13c8246414f960d7ee15286bbee4c415cba9468bb0c202b1c55c908e9a5b2c3a3264fd1597c78c119a54d61ef6ce610dd144f9c8fcfadd5fbad065a254fa949eb317e943617bb5d4f1e7764cd1337b3bbb1f326fcddd5c2f320bf6f2c45058b43f0a634812d90cace8560e5864c91a701cb6668802c4ba0cbc500cac64c0b2ca78d2950c7fdf4ef06968dfd5fb16d8ea42a7727670d1f3090a83db5dbd321939444b9e06ad26a4231dd3fa84070b476f0c5c78dba0d2eab0f9351a188308ed6108e64dbc804c0d1b259fa72c60ce941cbab45186eda346b0cf4ea0b13be6cc43c2cd87b4e361362742ce6a3cf1b24db9b0283d67680bb07a2f8ff61c3303ab0b796402b578f244229834a8fd43542fb8408dbaf8f9bb605eac40c6b094c885cc0fe0746907475093967e256693e54f8cbd5c0e7a226058b4fe8fea2eccea7d0b960d91caa6a946ba5da23718524dc7748b68c9c60dc83fa89fb393edfffe85a01a2f775c24bc883888d5fc36482becab9b03886f5a4d9e2e45884a4d5736c70a05ada8a95eed1f37e1792c018d066472d50736ade9d58fe7f0c54f02112d3ffa112288841142ad33291d291b6a7a8c5108c7e1c19e5f3d1c321220d331b1cb4db2d3baea11e3488c07507cc5c8a7a13d76c6f5e1f11cf63f7ec7d9e33d9a57817a647b0f72ba4f5ed27c693bdefcc204468c9bb01a21438f184a6ae20c45c5e425062c32f5fcb85e3a29df4626a64b365413800a0a0722d1064979a6246988a1ce23e1266fa5907e5b0ba15591bcc90bff2e3402e94e154b71cf34a66f226fb315e4bd054bb80fd80ab36b532cfe69a09d73ccfc255a67e9228b448618e7068440d898204e1890a024bf18a323c4e686b8d6b9a611f2ec81bba58e6031c2c4c25bb5c2c8e30ddc1f87fb079b9c1ec3f0522c507d4abbe5310e41f579c606402818b95c759844716c82482da8055ae9f0c102cb77919a99258910ab70966920f258c55260357f25b5405c07d3b7b7ab49f64006ec0d10af02a3b5e003e40f4d931c9309162ddec6c8a45c8a640a9da5bf02c4f85a10d77af14e348620d85a71aa1903996e1a995b9b210471931936e957f9437345a6d9e2df2d815920f3614ebabffe2cfe409d3c9a0f07ec1692ae3b79afcbc08fd92165e8fec1b0b8337cad718ea3c22b99e7ec24721c7d974ab5a054a9be2ac557c5fb3dbfc87c5e71a0e7886b6d9337e26f817aee942a9d8ec2da15ee0c54681f449d9f065f1798feb0df0bcb7963b4e397fe7286f6604bbd4235d41d9e150c359371640d7b9594789549b927ba53f822fae5c2709353a695dcf0c44a8d6030762557c7f1b9c8d32c7e6397781c72a10267a64a3cd80b2679feb159ee546760904145a94dfc22e3ae130f0d2d3545aac979e8bc0070206d4831cd6384d157b43853b04c6007cb55c6acf63282f6df3d90b88fcc57b59128901dd72d1b8ae8f3fab9192db9a9d5411cc556b4c6faee2f3722e61cfa43acb97db7adabb7e58bdf35778cb4869e32a7c30dac5d1a8f915a788c8861f445d9dc54a3e7b6c97ae42e2ed65e7d8613fe4b20b7a0229aa11709a89f85f77d27e269443da637c1e87daac395e27499d1f5b857e6d5bd1d74367e9736fefe8be9e2cf6f6e3c9dd353abc0052d1918af358446e230dd60b388df1717f8afd4ba1631032ea14bb59ee2629a4f7478da2a095bd633ef5d501fa91c5c05ba1643ede37fd1da5d95f5c0d6f2a66f69c842358e3f2a7ebe321ea4c176f2d1fee67ed39b874274c6e3a1389319cc423d59b63c446e49820e0bd9d4a2d10dd61a29c8602796f75cda8b23cca2c1744e8ad1a42502468802173660a57568cda550f2ea2791824011d221cddcb6b12ab924ce475ea43d2f8a59b4ba8bc454c2b1839bb33ca9914a2061281c0adaeb988ab84a4572bb690a82205990c733e668ea3b99052dcc6e7db6a417ebb5a2068c7e3fc78bf291ec9b2036e9acdc8d96c1d6c4111837513391e85b07c169597613d6576e9213a7da074f7d9364ff45dca4e1b0cf0755c2dcbcb3a442bdc2ff58bfd32bb4a81477bf158ea2abde71a48804acb533656604f1ae217a8c601ad1248af18d91fedfbfbd9f4e457f54202deb7c06792eb66c0b07d8535f6908b625383eefc0cf10cb9697a84e9df60727109fa1432d196f049df6e0ca41a4eed361814d7f80e0b4d6541861d8a5006f84b608fad94317ef57e4d93d91d5993b44ec02963484a18d4f3bfdd1b5f592c86ff82bce301234e734f1ae16882c005c0d02961069b9b2b35d64709dd5125db609d726445c95d0098ba673b7689802e1d188aade5e956c6ba94a4fd3230650e2884603282c88bf91fc28fd0995e1eac09717a459682027e7d1e56802e98697620668acb2cb2eb97261f70a2f82207f50a5fc9f441bb551c7011d12c2b7ee330fd449d00a77a26371556b147ba68d28be185151a287921d0c5079112703ceaf276f8e59b4edbeb1dcec0972757fe79c2a63fbb243c5f55298297b36afaac620256ead91582e4df2030ed57381fefe4aa164260e727eec1db8cad234e6da470dfdf21abbdbbe7463a7a60733682aac3191a04d9b47576311e4df4e030b37605f0275aec20a130adaa47934359684039d6f9160af5ce9a0c6635dbbc2d402e63d6ee587b46475dfdb78e4e1595314d4fb5344d3060db41616cb6afb12effcfd75c27b273b12fa075306849ff4d94dec24f691158e444c13c5ed107ce068d9a29c93d81d2c6076ae77e42a6bd445630e257e7f86c4852bf44a74a03b14aa5e0ce811bb4258a9f6f715534f2c16bee00180d4b502b6e511a61db591610bd4f74a5689c7dd47746ef61042897b724761f461a1527c2ec26007cd811da2fdd803c4796963dd7319ba2ef6b267691183c5f509681849f5d7d76b3a0c0e498302c5a0ad1cbbaf188804b08b810ef608ef60bbbcee697da7cdab8b18a5558b8276009d61d84729838d376d38c234989aeba633f8a17447d995c1e1f56595eaeff81423c26a42c067082083fd3adb64957b612792211c034858db25b316a30c67e79bae0f2345c1b636a54f19b294de50be54006d2b0647921d038a71cc5648e564fb968430519cdccc1b1be7adfe2aa2a398112a3e8e36f34573615000a231b5ab395848202a81804fe64d76567986734862500249028bafe8801ff088689141db8c08d78db1dd2344b9235540eba80d339a241c043d1f1eb3d21427941ffacbb0473db47bd71adbb25724f866b6e029bb631d88cdc43e359914f8c9ba40391269029f4e730a9118305d02c507167260d25f560740465c05655e78e73271adf21000e3da2aa183061d7419840ed5de566bc5ae259cf0fff884d035ac5eac5d73a968f0c00e51939e1d9829f30e67862987018c26c239ca9034b8fd7a789e111c828b58c50c411e128171298d26b567d62ec0a69d52719d41e6cca5161e4f94b635e56c4bde9844d8700ea3c88555ecc344ab1d3f1df79372a4b1d60a9cff3caf6984947c62ce2f793e061beba10aa6127067530384b31fd8d8d569c1def1188632d881f97963bbc65e4a97926208c9bc2f69b8be5c03f8482dfc743e1093a6a55d3abb761bf20a4d6d05516f86d66330de3e4a12b9cb165eaa69442f210513f33dd6f235a4208ee9636fb1c426f0184564ad25c95a6daa37c35cd6543856b40a4071e916b603d6db346d2fc7fcdafd05e2a3e33f70e184d94900993edfb60fda1794e9e4a4fed0554d987f6e92b0bb574ecd5694ecaba2f76c4cc725b6bd2d315d8681d00383b0a35d5f318062c44bf5e10f4a6815aee8a73433c49d115fc7594d19a9de8de09bbab1094a48db3a44878c128456b3bd6379637196651ceba6d4f7c528a709a060a82bb619a86bab20f470ecc5b9160faf25fe9237e210e7f22b9597366c22dc304a073627c25d527c75d3d1f40f3cd7f86215a2284d99eba35022352a1a35ae8ab194f82a7f7d223ad672ca8db4d00db6f8225cdf45aac3d42db45c91e1b04dace13c85ef3c76d59f357132af4aaf279bc8f57a5a54edf2079bcd64b74fa357617b36811f407067b8c4b4c84701d5ca189260d2ed8818a6e0813f086c1bde7b60d71873cabc951a2605438c4e6b5c741c61221861a3626273ae8c0534ce59f3aa983172be74a98f1bfc6f6d3a444331c9cec390bbe24960586082e219942972ca16d9ccf15173b81cc9a240a332dc6cbb4211d2c9189f02848316611f5e481192c66211ab6c2aaf5ae3cddb45741cf7e668d10aaa384164f246080d09a8531d01cd05a1c2e982c83301224d8c5c29fe560243eaca73580d5140eae18e6d5437285669a842c8a6624167ef021c937f857da22dd99365b251ea3f4d39eab3dbcd9436e23e313699ec31859b936e66263c7436c036fe6588374ef48699bfb024d67a711d793584240695a8607136fa69dde0c0a54f71b423ab1ccc4c48f4397e6c31c0cfa0ef2feb2fccc5f686c816ac780f1d13eb34f207831cb3d76d3d3d1171345d33973b7c1f485f0669347ad1cbaeb8a1fcd54a59f92bb2b9841d052311d3d9a56fdf2ad88f22366cac8fec129580e9382536e766bb06f0f6a713d58b19775f90384621b6f9d6c01c9a89c3347fbe0f3d4ff2e7a131e269339678e3e13d90bc2b1c8aa8d409bb742b92e8c654f693c9a37f509082a72e81a0931672996c383316c555507ca64de274c4d16a9df217f2fb15c24ac32b886419c8da814ef0138f9a2d53dc47f8ae8eceba8b641af797963776706e178e817529bd624f6ec827800044a0c018404d02469d5230c03d5a9454180db1caf96e7a7dbff226fe1165e58e983b422f64cc6163b312bc1506047e94b9d0d0c9004ed652abeede1e1ae30c209a5c80757110fc10d79c1e2b18ea10b4fbb96a4d672e3be8c0c59505213e389dca4928e980a41f2cad4f5c5f1c1591326f86cd66e5cbe39c4c8ed9e08070c7b7a25078f7a96d20f3479c96943ea520a48ddcf58f0f9872372c8dedcca04510632aeb5f6638cce8ae7a7121510fe1caae240e64005c53331b647ddee2b9af36d9b386baeb15fb66b8dd06c6197d13a30a72f1ced31bdd8ed0777a8748956e5e20635cdfe9bb9cde9440193273fa1667fa7d9ed4d6ff60d3307113ccce99bb1432251f1b93e6ad501c70c0a99bd83bbb8f839114b280e79ddfa007a6cc0edc3a56a6c0ab639acab4a2aa01f8e2c4c7d98b9592a5406cdfa153f854318df6bfd22d2661d3d6891bb40d2678e179c784d359e4e528b417c21c446533fdfbefc1bd09c1ffde071e1aab214375c4246893cf0a638131d912fe6228ec42d68b1c9a6f9de7fd66657eb9b2d176690951231f53cf9f484a0d91d6dcdbc951521ebc04945cccc0e7a6180f9b1ac7a2700b9eaf01001d26cfa2880ac1fa6140585f43fdd63cfe16dee9642bd4e06f37737028a29570df1074a8c5a95862acea5b7b234ff9430d03d79fa980136a19466d4166665a903953d370ab8a2bc6be163e411e815784967a3537f5bc249eca9bd6ddb0abad75307afc170700a1d1eaa8290e1fc0b592c792ae356e443ab29fc3ed17a6c6882ad147579a81a3a07f1a625c9b39b4a9a8dd69abc6a7762466aca20eba4c4caa4a7fff795c6c85a8f1ceba1fb76b8d0381566bc2d7d39b7f10bb5a5eb95b668045948d18295b968762705ca894f968234da879dd855b599a100b7cd8695f84a5437f7865036c845215d70f938aa2a30b152af328e0eb29b34b9df826524024213dfa2056e55659d48555e030e36e15924c8df81e0cc6191680c7c8820a38263ebe0eb934c37d03782e5ccc0b9b0ae757abe4b32e093277b6ee366c37b54e6ec7f56c559bc000246b4330cdce533e6f546033471a8f3ecbbfa7b9f066a9ab88157066e8587ece1264cce8007866997440b7234bc6082b22d88943535268c53e64a54d54574ab7de6cdf94c77ad45aaa1552b76bbe4d247f7db649ee4f5704fe83f1a1180bb27ed6a22841ad9fd5dbfa59b1e6663adb6742e04304d42ce5266e0ef9e6df4a2c279c9aeafae2c6464aea4b7476091ed46fb32dc5a1cd7a1f08f7a4488b51706a6eaabb769679f0fbab034c3c4875ddda649c8c4c681070678c36aa084c13232a9a12e01ec69605a0811fc1135c1a349db9367ecfa5e5fb647397a12759ed88e1019f0eae9d74e5c3a1b5a2471a7d58369871e9b907503dc0323654d822a89750abad55f298cc68159a93058b714b256cc8a2a4542db924b9d6442e974bd5b8f4c92bd436339a9b1fb554ebd0aa001b73ddca5e680dae7a880808cb6e7ce895b47e79df3b44aae040541a6c5443674d6a8c78b9774b5a766e28c72d9585cd9a323f035a1647abdbd8f89210a2c03570201209ea2789f7c39db5361f99198f321b0b99e69a7139076396d7fde6573504df38b2ad3d4bda7af36169011c5f1f9d0dab59b652a901d9bf1f4773671627b6c6b66d895ca7b04f33e659714942e9469122436308fc7986ef582fdb5a13fe247903105a3f7e215fddbcc11c78ded33403b3e837782a2800f0f3fb9c88af85a93a721125e18e37f6860e46157ba64ddd3a15a5a66b9fd920427b32da039bd7da01bfda8a41330a98f8b5c43cb0d67b408ab28c4745a1c5d73ec31b994010c109639bc5f691b862352c012559cb33383925b4333c3adc8f68f7a2459b2c9bb5140f1ae2ac64e225f91c29572a804a6a6fa88d9feb1300cf846895a1cdaa92dafa2c06b30912768c5ba1c0fa341a660013435d424701f9864a73a3c9c6174639c0c5e703ad61f035e69dc65e65b02193e1addaa18ae2b7e1548cc8699a28b336080dc9e16083e3189a6459c53d8db56309372dc3fcc54a6e5134d746f6c4398b2568c6e4163a2b33b98b815bc048bebf59184356cbdb2cb9d0454122942cd57d505ead1a946cc5d77df3dc1c602e54d973e7039065cd8e9340b51fd844a49c10d3376024941d398bd4c1409ed16766559d41b77f21a6bbaaaba0f0fc4b52432a10f35b8821c32204c9ebd144ff2dc4d4ba0af85173d0d851252ef3a806dad1d37ee8fe39b45826f7946dbe12620e5124ef412f7ced4a2d60b3aea8c718df7ebecc644b4d762143013c1e2a57c8822067ae52c901941c1d0dc08ea60ee37c2bb5101b4839949f33665cea8511f6cc81ac19f01204c86fdd545d7b328a1814767434a8d6e7088863e8e2d7f82076f385123436c6e5cc7bdbaa432efafad46f881540415abe192f83561ff8da7cc80f648e9f57e28108048b6ad693438a085c74943690efc173c8ade00a385052124f2ada7d29336025fc98435eb14912782564650501c8c1161cf2e3c9575a0409d11ed2954ab4370fc72826c11d03b1839e053ac7a40c138b7fc840fa1f5b09c508894a61a465a10e9103599330999a889cc1e09a0052851da305f3cdf5b4ba0cf7fd4a2504ca52698f9ede89bfdd60fc134c712173e2d51cb5c45bf09efe26c5bbb01b0ceb1ff35b07eee835cba55eee2edd102a2d9b1a4f029f0480212d5fee0cd58bf7b99938928673c09066607b7b7925a6abb9f1ad45ab03e2f580d3375591237cbfaa87d5fda557c9476a47178edbde62263c8a533d9853ec66db68c15b0d924ecc0acb9f44ca8cec055d710f85122193cd6e7ad40a24da55fa4bb0ae9753003ea2d5089185a0faf0da35a4ce87a473f34ba54af7852a5552932c47c0735f1158ef9b20aa8674f483f404447d3ad68aa1c74c3eab6fe1aaec613a9826721a90169b64ae0b1481de7e3ec0e008dc0ac40c5c43f1f816719b3cb8b847583ae6a91acce0703bef94c6b8548101cef7a9ca5190ac26724dc555838f4f6ff13be2e7f8366dbe85e15cc6fcd75bdd27759a72a938f8a52f8bb1dc25bae2c46dbae212eeefa0d6e44bc5fcc7621e4c3c051cb3bcaa5036e6d343ae457ac70b78901047e21fecd6d400193ba2d7558f511d4eec51197e1135996372a405f26d294f825d286e684295a315b25b36af0d1a41843ebd3eef8a72a5deaa74d35bc0f316f207ab63e4652484ba37782177810a97ed60f7875fd5a85747626c905963d7b0e0eba69761bf2e17bf3cb075f1d012edad0152e869dcb0b886bfe11f0f594f67715899c2ccbf27f31965ffa360b881320bc1cc9bd192d9298bebfad9d19bac8e03268a473cc6c88d0f1d3fa3ab3151fc31e1cdc99bcbee3a0bb802167b0472798573012594818c1182872e2e2b772621841f0f0472f10edb1dad159bfe71c5aa0fd0a872ef0f07082ec149ed6c06c524a8a9c4d363d55864e4cafa00ee7762485cc7a5019c50a2c1b6488006706ef4815e9ff1621360f58e676eca158830bd5625e1e872c71708b163bb30210c02433b540ea737a81d664875285ffbd4a931291d3d856ee9df762474d93e35b58d73e09e501fdb84654a00abc46ba11deab872d8484c294004ecc50e966b6c0bc2f89109d616b1d49cf427194f9ae67504b5e3e0f7a5b6e148d93f71a4e0bad7778fb876ba2e18e630d3217e629dab25e426640d4e16bbd6fd195eea0a3b407338454fd738cc089e6dcaf32bfed12e5e9d3e27a41a476eb8bb9d1bae99e9868bb5bd6df9ca6d0a57587c14dec7b0915dc3df3919bf6328aff59aa45743f211a4d39de0a184a3889de7e299768721b035f4dc8e447d8af6e83720f4a5622334be0e392d0ae1c2eef7b93f7aca01cd77022be59ceb384e099e3e576551c42be6d998573d5819d6e7b8b5958858376a31aece76ba07097072a7d87bd01fdacf709e65f50e7c063e31b44714c5ec181405b14834be03573cba468e281bab601ba1ac748817115a6cfe736979fd5d1a7944867b1b723608e6f64c8925d71f9a16ca57e457e52952becbcde8572bd09179200e006678844368c309a60dc95fe225537078b648d0d867621bcb869bfd29699390b86f2582c31a0558543142304d29cf5312bb5a1ba59ab34c2e00dbc7b776d2753d809774ad51f244cf8d3419d5bf874631b19535f8fac1853454927e7a208f41cfa72a7353ec8fabcd03e59be7c42d36b2227085781685d5964711c0f379b201c08883614a80060036d0335b32f600a36776d88a93de5280d331fa4077cb0ee8a187f1c833cf3d585ca0b66942afe86282b86d343a680dcda016f7bfd5edc60823ac1a91a7fed1a77de8c70a8abb0b34a9a186455c439b87b1550aa4060d5f48bc35c2646c90ea94f808d4dc0125ff69d0a169e16fe94d8374535aa422d113779fc8030e0fb9856201b45916a4a9c1cad6a002445f624157441a78f82ad9d11085ba07020b70cd565da1a67ce9d9842b807c1789378ce4b72e8b5961e01a1504425d84be840e9a5ec7b2d461d9095d85e120a9c477905d24467dd80bdf5bbe369bd73686b555946df7fee2c558bbfeb0d7044bd39191f9f16d1982a5c3e09892796e7d8602154ef989edacc235949941c0769aa831cbdc9bb6aca2cf10466954c56295cf9e32061312037657173e286067e955b23acd3ff564e248f629aac4afe055f5d884595aa035cbba5bac105195006def2e14cfcabdb9aac021b1172b78abfa3b0a12e728ce4d615c0618ec5639a4b943c11ac34244319bdf3e984a3e45df32598e231b10ceabcf11d513a493a50f99f54ce9bc9e628cf47c60a6dcd6e7541a4fd1b9ae737648e0edbc5d2f85d6f165109795d4067caded387e56a4babb6d864b658a6ee2125c40a2d6b4efd26b60ad049bc780bdf2e87f05a147f22ad4c854914a5f2c841b357564f8db467692991c7b89d171f345078b14452945165139b7d76afccc9986c7faa1db5ef0c5a9580773094f72d311cc36b5c499ba3be8280f9bdd4389e6ca4fab1c2c8d98fc3a5fd0aed6dfc02e08e9ef88d526551ce2f7aea815796a633c41cc19478e2deca3c51a6fa20db968c69206a99acb476aba7ab51e673a8ae784803768c512118631a561c5181d31f83bd2bd1f428c39829af669c729ed0502a48fcb865d9f0d75d379b090c80c1d6a3ce8e3e4f424788a96dff3e445299b54f7d5146b90a7553b7bd21586ccbcb42a747421472225d08e3c7fda5eb093895681381769708f6b72fe13bdeac4d92fa12ca501f3c682eaa1421d6b725da04cabc7eb2da9b3981d2f47b7fefd848d3f224d229657256d71e00bbaa39ce031178a2d099c88144360a8ae7f92408a1bba64a15354525dd6064cd501b6007555ceb9db6ea27d2bb190642f932a530f1b4774944b260f352bc53b02e2b4890081c2a7e5484089884daad3da77dcc95b4d465a86923d6f35700d65012cc5f31c11266b2b7cb7d3e8908c816717c49d098205ffc73fcc68be40e527d3cb94504c4c17304607f62aad5790d8261ccef28081d06ec379ab137bf355175978eef3c8b76ac4864ba4fe508c9adc5737c8c715a9fef88a0022a6da4df267d0f35d1c7d2ddc8b74fcc50c4d444a6aa81e637113815129cceecdbf81bdc1fc2214422364394a424fac6a4c7b35998b86307a027580cc3f9c011db9f95068a20125142708f37127df5cab6c6475476e5b2f8538216b8c45d90e38af5c470a76e731bc3e6168b0335fa9899c22b0f2907938283f314769081c2932c8c57d7f67e94300c40ce3c4e4a26a75e902406e9e075006edda4c45475915f7c04ab10ac7fb7757a8bb17e5c953540e6c3bfac2e8a622d68160f1ad1c44f4122c25abe97cf944b6a74e226db9a1ef84efe046bc05d4b9371fafc85f2736c3611c7dd510fee91aaefbdc1df0f9d42f7714d1dbc4961a528058abb3f4dfe8827d66ab588bd881ee6968004e3c0909aa916656458c204d540b66d18041fe7a1f5b156c8a9012c5ead384a41b1a98aad92eb77956219c73d507a5a497b2797d3f83e9c23a243506cd1913920083f6d564bfb4ffd323a8eabb14937baea597967741bea3ad5fff06c31120b7dc6813ddd1801ab56120973c363237157fe3ee87c9b6399643518e02d1b87145c2c30fbe399c9337f1a68af055797b266445674a5abdc8b427f9244d44972048982c684a76709911beb8f8ab103bf7e1a154819552810f5181a1a780eea00906e93b1ce68d74a65ed12f1731133de06b9908f661ca49da577e44308bf0a20ed839ee0db909cc02a5d97ae317df2bab3c2d45d8bee81f59512d24fe7f871e292931e7ffbdf912d9debcb00928bafe692afa697049d00792a794ad2ccf433f07cfe026b0101d3090de47ca17b1fa560da14656f62a0b151b49889d4f474df2b2d79239646738db2154c2b5b1a86408e262ca7b4b772052e620abd84f096a45d00a5b0fcabc7b9bd7272add61ee36410be9de8397db0403f38f08ae4dc585573483ebd05b3f0ddf764ea2c2be2d61b1f17edaa4121a7b4c58e4ceecbd8ea536f2e5efb585b652ca288c236e98e61e20c99a0067378842e43aa0bb52b9a651ef538c12057ef315159a7e91d0bdfd4bf6793cbb1c4dff2e11a2ad827bf62e90673143c5c8e8e8c6d7d49c73df052b3b493bf98252c8bbb871e17c8d6ed804063cd23bf6e01e4549af93507facab0091ec7efe9937e44447228a25c7952fdaa7f0e409c633caf103a307d4a168e5c777536ad48ed718491f18603c4f583ad5cbe89895c38d989b81adc1302dcb5935b39c725eb649870463af2548486d3b1d70f034c05c7d5a6819877ecf49fddba6c92efb629969705425fcd9a4477e7cc0d9a30c52c9b868758aacfc82382eb9084170c3baba36c676d0ed4219204497ca2e29aa3e96915f26495429468f5b0918fe3ef843801358c57781cf4e888d73ff120374b10a111201eeb35e38c6c338a6c6be369c6d80dbf07351e4f324bb0aea3cc33c6baf5768d184c387220038771d46bf2db3c77890c388f1d950849369eb5c8c48775e444210e6e966a832a1353a54a296b7b0b5182bfc2db08f1e2e69d3dee47e03e217200c3ac785d9cddc7107de1f6593ed00227a6540d0b08df4f05981529e4605e8294d39a78fae0a3f484e8d878940969e9632cdc4531685cfbadd87abf301a9f3e8667054a73d9a369f7b03db5089b0b3bab53c474683b9faf91248011e4ad89bdf8158b738b6db722b7e356fe6ad324540af95ba4d69c79cb52ebce7246844b2c0d2a87bf6d2891f6c6f411784b5dc8876d9073bdfddc7f89f830ddc989e78c6239a2d0e540acfc0a22c8107f1a0e4388189b6f42ca0381f3f97a6a617cd64357ef831125dd81f481c8b3585dd66d358a8f48d5a1cc365b9a009a62d13e07e766dcda0641c20c8fec8d79dde8523a28d659c6d7a58cc21106ae41ed436346abc5caab3da0446fd8892a21741d3a78b3e5bf21c4e1b5f799c1a39a75a0b0eada2ac71ab28bee52a0a26bb8ac2c4aa4550d54de880bb8b174fcf5614f414312397ace89ee014aebe1fae4a7d4f0b8140207763e9997f2af83fa995cb83ece68f79c2723ac1ebe16bb9c65cf65b4a4047372ccbac6beca25510ac286875a31066ea02c7b0d7d93bb05cae55bc0dec238a1b31e1754298ca2a5a4b89094e7c04c0fb8d0d227d26a691c60b4dd9ed9982e89a08b45a628bcdb8705f313baee62bf203d1e4ed3ab6ac9ea19be555c4fa22db35821927bdd0a217fdab0244acce9fc2ca558275895f157b9df1a5abb25857471417123973395cfdfd2909214472acc9ebb7fdc1f50ebc3f18e50c83b9372926c9f2e6d7050f8f83a9b7df4f824264cfa50aa239c6a9745f9590bba3ce67abc223e70f9eec1af4a54298d8bd3b6aab9a9d16e7b9fbada051ebd5cc19edad61f42cffd74be2abd09d0ba316dde9158282d7978a30b6fd1c3141f8ed31e68df8aa9ba0d4c0bb92f6db963da8b5eb33b6337cbe1cacc6951894d25df906a4bffdad81cbebc5e9e6b9a877de9c000ec5b3b750e708eefab1d7686a5f22139669456e4563f2cc2f5b2a688d1026dfc8a2ba5b9185cdec3d9740392c7336a4382811e0a0b629a6c82c916ac6655915e002db266ba07146186172f0d48ad3a1a6aa31a001dcaea99fe70b46f6ec3a59e113d66a685d067014799c669de8197f8bf08fd4221cc1894fb1dad7f1dd8ec1d29596afa87173d30d185756d7074b2832858899c243309a2c887a90600ce54c8aed576e9a816bfb6e5f1a6d37c8685230c6bd77ed19c5d268584d76965ee48962c57e506d1ae92103db06dddebdaa3381b3d427c8a20c0a4d01a2cb050d51db2bdc25ca8a9e7f809eb0c74bc1c82aaeb47fa3e9cd0a9aa1d8ae72ff81ecaf8b43d97b01f4872454ec1eea66f85590c5903dfe7d01822507cd1943d0e03aa29ab940f8e40c6d9f1a8298237613a4f6c909735df124cbe03ec049ab38d01d0b0a1b427e520aefc4a8f649607f6a718f524a25796358167b04617f06ee51e6b203de0afecb4dd8667bddfef0d01b1079e384c476e4c7c0ae45267e05850b465ae95abb985aa6ee867ffb55521f1b077e3a8d4b99d43c664fee2868c26a1d324cda008d3783e7e57baead162243e188849fbdb0bd57942d4029b92c607e69adfef4258be39346bcbbd5152db35b89aab2d2fa410eef7c9cd71b5ea126a95d94f5bca9f3691c9632fdfd0e1e57d2c40240fc24d7287127eb8d1f4577762158cd8b8a8534285b496c2de221a16ecefb3014b1de06174ac3f700abd9063c6233e67cfd719e29ac710eb1a10f926d3ad8fd04243229dd239032e56abdb9fd255ac800b51a95eb640a880d3aea6742b8678c2a09b0ae867b32e849d40525ef0fa7ebb535c0932001ca8b95d8541046cc51f7c93f1100b417dbbcbbfaba4a0d747473bee7a2c6ee3bc7d250d0886e70d49aa62561a4b75a3b87eca5c7fd5ee675aff8eb0fcc15b274c13ce4c34652f8603fbdbab0a41af8a899f709ef9f03d841eb946f27631c9e105b05f253f86e8cc52e1dab0df0d8cc08888478499c3c68b8560f18e3ab37d9529c197ee2373fe487a08b01304922be15904adbfd9adeb3c7d37dfbe267b4d43216ef567e4d14c94a8d9b2d08e825eb1420fc1c0881e93b7ee786227bb6b846d12f1a7e61269bcca01ae4e3fb303f3984c6bbae58e30604aeea705f6fef3e30d4b552f7779d1beb515f4e2ec45b6922971912a868190aa8706147a7456c262447cd05c9ac5adfb10b58ecad704105335cd56d66393ad866d5602ad3f389a8307cc1aaba382cd9843058552d4c4baa8085699620ed6428e1420dbb861665740fa4c71ad5e61416ca52a63aa0ea6c719ed5a71377c2890612cf9c545b1f6fecface28abfdb7ca493115e9b0b00d1c70e15f1310b443129c45c0a9e2baaf04b07b70973255b1141ae9ac6d10115b7c7edeac0844bb65b42095f247fdc688aa219feb98782bb51ba7039271d83127ded62455ef571324ea803f6f43a71cc4990b4f22bab82d6ed8c04e87cd10be25bd4330b6f3dde54986274065d8bdeda899dc6ab21c2779b41b97c61b5fa3c94fdc472776f15685b02e87fd7f86811a8df65952a37e9c224dc58ca5716701f7a9d1efc93bf30124e6f456bb20426452569cb4b37da7c56ab781fa6f52c8ae7d33706ca1e95e2dc65721c7a4c9b6cf4326a8ca4f9a0a82a058165eb0c98da816bd1b1fd2bd66e2dc2550c26963b586205044570c2acb771b568e42ea3819044e1d1c2f551c2574f46493b8e8f7fcd0d183d509a1a555b3e00726fe5c6b91495ee0e8967adf129a56c4dfd547011c4124f8926286c34ac923d68ca7ce4c8a902990868ee97998d465fc553109ca69b30633c69c7a25a76c0b0b1df712a26228872df7a8f8374a0cfbaaadee3736caf7311bedbaedb03770020bf1e40b51418f6c7e711d485ceecb70cb36ca8aa700becb7065c37b1ace5a1b14b80d02e85b04b8ec79bb76b97082b63b1814054e8cf615e5fa09885c6c26a1ccb2374f5c71b96201aaccfaf21dc92e57770490b1063c6b7f7c21570e1115628cacfbfd90bc29ef5625b4b9d684c8fcc39909ba8512c0b9eeee9e87b640665176c617008278ffeb97488e453092ee72eb474bdb7bd99ef7defe0a1ee535543616d1fdb35a588acb0321ef7a5558f98a63610fb5fd7483acc883d7761ac47c4c22f44d1ef2640a7e0502885a4521a941c59809552709bb263753eae8073f0fb8f8a54ac9a2f87119d6a903d9270ba814c1324146eecc4214da4287949591e9c22412540e181ab4f035d21986fa76b0d14b15cfb34a20b54ac9c363b569fabcf839e0fb074aec2e046b645cf5374b13b5c6511ee493263b196f945bda90a014056810ff0e8703d72a319484039a3e9e6f58305816a503c58e06cb4ddb312f09db52950f07315fa16af6488193252cebedb860b08d7b14628ade1e26d7e67c862c40394e8ef3c26142d20a451f295c27eef315287d6cdc4bd3eb41d867eddf846c29f79652ca94529201e106ac06ad06d656d7b60a5c2ce079d09bd4a072f80857e2dfe89e7a866df8a4642f288078fde23b6b08ab767584b3a9f079c5cd9c60ceeb76d8cf65845e7dca9be253de149ff2a6340d35536a5a1be20867d31a122e4d71a5e7d2ddddd7d168b59db45320ad77afe6302e3142329211fa2bcd7c46ca81add474c0ddf0e9c765694b03287c4be096c06484fefa87a74fcea7b4b2bbb553dfec0fe9e73464d6fda9025b910bf3b8b460bab8b8f8836d59daf27c4f7a8542179d560ac6e72d237cefaa0442e2c3ca4c871c580a4b49c00d527c80e048c1712543c8da9f0167d39a105c02424a50f4e82e2b77555b25ebb1ea2e28be67a420fab1b47d706a66b21cd508c9a892113e7a3db7daca48988cf0f9156aaf29f9563242ab535b855caac845f2cb1bd33df692ea4e472eeec7a8ba9ad2cc67a41cd80a2b714b2aad826205754b507997a8fcce75a072a96e0bb43c2c4f9667081cd5b9e7e26af07735663cec0005027bf5d0356609b8c147871c24101c1c1b826c85190d69bc66a949c00747c3af2403cec635215e2e20801688c4ebd80abd518b0b0e16924b8e1c2b1b33f7e3bdbb8ca216bf8bc4ef6789d563758d164475dd0ff72e75c2c45099aa99592a38958ed165e4c868d4c212a383aed41c59753338b2aa324c4a8de76998af583574897474a07246cab1025403d4ad006c79a4dc05e2010282a16e0bc305dc0cbf114e92485511ac8f09748c30c4aa5153f2c4516151c8b930ab4bdde1123987101eb45efbdbe7a0830e3ae8a07bce5b56d65c3a93390d563a17a1bfe7b0d93989ed76771b21ca6a7783ac49af90c839ac64814a622e74c5958b7a1a562563954da1f05c57a5ef1999a3ad3a279d967327281bff9a0d7777df753424d27befbdf7de730c3c2b9e16733ab669e68fddd9c6a3f21bd8fe5fc130451606d657bbf2aff3f60b783cca27dba47d94667034fcf04ab2b5a60646490047c35792ad38281c97f9b7c2704fa257215e84a1a3429dbe993b6e865f4a0cd37928c08ee0c58e4e6b222855c0f673381a12e575d343aebd6ad228767476749ee09b19c5ce3b61bee369509e0a0b975574f76aca126e875cab292ebbdbfb1d4ee80e1d3ae4d1808f54b8ebd300746d7777dd98527900ebccada8ce5fc7e0c0f0416e7f311b61b3b3b5a8c0812b84bb17ac2f061615704208a1c88a18e4402757c0d6ad8b1e6aedbdd86e07dbe069e69c98f0cd5462e634019b394646558ac350d58f63e10b2687ea5dd5814f268b5fb6d42351664c90c031555a7c09e55799953141429ae4e7e098aa9feeaf6147ad6271b3bae08cb0df255562aa621292ef8543ac1410d5f72e4b126b6b475e847f81f818cc46573b7b03db77ce3106cbedef257c7789056cbfddddfded74550318dda2f4adf874526b5251ce57550e56a59494523a85a82d4b2dfeb45ed41c4208330764b5dd0a922b2fe6834bec699e4ef3c47bda9c8e33ba8cae14a5b05625050749a4efe12b74e3b1bb8771da81f2acf023540773ac94e5c4f2e112bff50357b29cf48df5e3c33616d00f9c8d6506cd81c9fcca7a24a469bef5d337561420b6b1a898e16c2c375c897fb59fba1d7033fc56b64bb819f8ad287d53d3337bb2dc70367b448d15659958120c609efa6696c0b92596a873050f053b737a869f094e4eec896de6894b27c0760977339f7f3b30e11ab135f9a2d0b42af99790a76debbcc11c1d754f8fd9578aa898a78d9a8847b671aa24fbc9fae2b7cd91b3bbdbdf7bcfddddffb9bbff4bf5f71ebbfb3bc7515be31f2e3d312ad83f46e98c1a3570d8c0515b7b415c62e389d21baff31375b8c44f489d20d7561c0d630fb54365063b6e39f452bd8744a9430e3b3f3b51f04d3fa15305a34ce28152e4eceeeeaeb7e664b08ee6a5f242b8bb6f035348efa154cb3f9de37ec06f6c0cd219af06f7101cf5690fe80cc8048e12359049e98d67e3a951b951282e3113dea8077415e1dd5d1985258a26eea52ee926e2a86e860b6c834d2a37814ef04d338152a351a44a270af07fc7c3fa77eb6ed9eb4aae69156048ba3bad02b6f53d57e2520b173b752b5567fd387d0fc228ab28839046d560547e28e0f679d73301bc9e139de212bf13606b5432aed13c83e8838eb28a520c2955950dead4eebebf6f10a4e24054afa4921977aeaaaa4a0aad6dac958c5288c28ac843856d5e28102eb14c816d38953b87a9548f843459f0c70626c195d8c70642e1123f6cc3cdf05719ace266e0873e50d80606712909ce064ec135900f6cc3750f2a77aab57037918965267e509989c844e56f2648d4989c9b618b480c801f02f54d1bc1cd7015279230881f0255e6f71452698ba5be1f3037f37e5b5618c436ec4aef1962e027a4d6c32aeea60d775382821443ae6d2cc263ad34794141a7806de7d4ad532f15b2c8a023cf17bdfd5073edfdef3d290f6e77773750cb130cb643b1a4569843199d4cc39afe013d022ca4b6756989b026331326e16fbb496de3bafbde5b74328fa5d0898991990c6f90d536f9cf0931f55391b6b6bda5716beea3760624e6df881453dfbf9b203ad5872818bbb63eb093282c73b05116959f9953110a51409111051419329b0f9e5495559b53b3befac9046cabe51bdd567e59a5ea8a112b53c07e803c5209ecc7fd88a99087c80c758d7890a7a6ae06931a95816d2f9c52f585986afd381ab67e60523e78aaccf73a45ab6d23ba21a9f2a9923a3722ea7cb73584fefa79a1816d5b7f1855f94fce19daddddddddadd61b55996d3bc4bfdee5d660cda921a195c6a04e0dc648d7f95da7f6c3a81e596d1b6d49ba4a50b53424efa76e1258c1448ee6852e3a2d094847f35e02d5caf01c13e91a5f9f2a13395511cbea576a706015fdfcd9046cab4814d433fc382dda8653c3a26d352b2cb5adb2344c5b8ad115cac2a3d1b7b47c0bcb8ab6494cbb98a9f01bccc606f16f90a5559ad47e7e7e76dbbab19418c9b99f13a7ce13aa67f8a524912a6d51fb95d29f9ae3d2d4980a37c36f45e527ecc58851a4c7f19b7c61d4a3481a0e291f07f5a985e915a6a301cb91aa52c73e9c1aa5f32d2b0ab695887cf87d115907df254be5b77e2f21568e54e5df5856d8c04ceea19522a2a32e0d6af51b7cf25e4c5d0d078fa3f900b6d1a0202b8bbaed5e436aea6aced13c1c34a8f2478d6a3a805e1993bfb91b0123de649558950edd8f24f2b7fa16eb47f35d9edf723f92d07ff991e47a1ca127893e07f62d54df422673903288237b2f99bb8c326e592cc34219cdacaccaa4aceed1e136f2a91bacfcd0fd48525dba1f49aa57b3fa5fcf6fd1e79ff3f969a8fa5bcf7f89aa7ff5fc21acbac8fd48e21c4d84a26c1d0d847f65ed68e0d3ccb397414703bfcaa2a3812fb398558ec6e5d8d7c6915165b80e67a5adc8b2220a5d5483306a1b1224f53d5c4cf3c7b423579c6a0e4dac7022c6366a22dcee7ac89d2340f519aacf545f59c609695b4da944e5052a7ca8a43a5e5909248229d22e54fb6db861ddd6b0b5dfb435c0efb7e106af39cc17e5b81fee49eddfa1dfca64329ab98d37c020901cee26c8f53d4080bba135cefda076d436599d46175e68603768a32660ef49706570ad9fb2cdd6b0a42e31f9bbbbe8615153dbc59f0e3a2737c6df81e4063e54c72a7437f29db6c18f3083f0dff74cbb8f9a7c323e24a4ea5cdbc818637c323af750739b10ed560a2be51cb10dd311750d6b86ab21a1d59d0c73e1ce9d736de49c73cedd9d732eca6c9f4e9d36ea517fdce0bb6e52f4b8f13968b273f7f760949665cdeb9231d8d5ddcccccc5d843945ddddddfca3c69c226ca973cc8e1dd73c87d2a90ee6dc3a29a9c458a23812bdf6e914ceadc3569c5b9763850ad331af4c004b1918899999d94a49d9853c4e589d3945b30968601b7da16d496566cc394706760686b19881b14c012f214f604e087f6c04c41d8ddcb76fd9578e301d4f919312339d107f300249a0cabd35e925c439ec72ed9c0bb90f8958cac0f6451bc9b96e8c4b8eb4d2d29cb570e69c6b19895c2e21f3c5e5e5e565d4c2f2f2b282bdbcbc885e42d7cbcb0b7d62fa73e7ce9d3b7777ce9db34c8139afa1ef4187d23f469628d8864949e54e4559a6c058a2b04ce12c53384b199873ee17768d204f75cfe2040c233dcb1498fb736c6585c539e79cf3e7ee588e98dccdb284d53ae045133fb33a2f9ad862778268a28aaece8b2678aaf3a2099d5a9d174da4a05ad579d1c40818a0839c275420dbac9493ba512456ca2d99991a18f579c284cf13545d1c202f4830861724f882045a54d6b440238a4a80eab440235527bf029e06057c205c6adf8014fef03983a1c18def2ff563fd248c8c9d9508bfbb20dd2998ceb9dd023c5f33e07b2b376612c6dd8dbb0d332939988e872ac6e7efbd2dbe7f7519815fbdbc8ac4afb4ad5d46f7f032721511021d1e49a3c1780ec2eaac775de97bf73ef47ed9fd98ef439ac301f59ebf7765349b19bba3795fd55761bdb65be0dbee52c6f85a73ecfeedeeeeaed1290cf184784918e2e1e0004989b323e81f64ea917ecaa5452223ab580616df57e71b37c921b6aee6da0f32156a47fc9f46b9f481c90f7fffe11b52694ea2413a4251411e4cdcbc84a2aa34e7192741eefe99cd044cfbc14ac9dd004b8fbbbb3b7753c9c6ab56726ce8ef391bcc6f096cdfebb640036ce58fd819747fefeea3510b4e532ab8bb3b8e7b4d753ddeef3dca86fb4a0a463f98e3828911f8d44d92625e06faefc2c8d230c2f8413a66526631c6766bba532ef97b8f5ed46dfe9e83f5c5ba69a03e0d7334d64e6d5a549a2a9884441dcabf0094527e8432340a758b442291086651c20fc1985597bc74d878e1b068c1a205b6ef926c15ef2cbf6d1555549ebfb3352cc0c9f09e87505fdd76678bbad1276414df552675703bb8d2fb1c1c8d6b8bc556614515ac433780a24a462f99079e61ba04ec693045e2bfa8d9b0cbc37c20e8db584a88601bb94c80500d0807a1cf577c906a416ce0928c4ab8c49b1303882cfaa5c43012e9bf54aaa92ac7ee0e53448329b2f5c87b251e08323020241ada72e9e3654fca02dbdf48a8a9c4966d9466245e29428693b9234bc3b49119d8266576847fe32ec318612bdc0d00ab198db2187853c46a5bbf354283c4259662ab8f0f2b082574acce11c9b26c8e581fbfb2aa7d9790aa8a9a7b254c9704735b60f14695a96e0b2ca0d4cdb677a5524ded76a46fe70f7034fd4a68cb844bdd2ec5a4f6ecf7dc907985582343bcea624c27b3c9914371368f8ce5018604844badc99f0b298dbbebc63a26b420e1ee46b661b7e06ebf6602141b18577aeb6c48ee3d97d5b983e95fe2eed79d0c97b65bdb96876a9b10431a9e1ecacdf8cfac49f5a743f2a74475772aaaffe698c0e3681c15b597f378aa3b0fb0fe0d9ea44c5d18a4a106f472aa6b30079eb4c0961a613a1a300c73a7fd52092ea3f30aa3e659a07424ad49295b313c333552129873c9b2acf767775c65a42a8fb8d37f2f2603014665a8c941d550ebe9d4366b6bfb840e77d4eabb54a9cb18e9725116ad62c5438d6e47953b80558c9514e91ea594525652a4c8e8342781f46dac86ae50e80c0c26f44b6ae8f789b809b1b6bec62c08af9b8322b796da2fe52f8c11be57a8c1c05f527758791a3672373cf04cb3e143e68c2771bb95a7814bbde21ae51293540d8988bf921a8968d2c664259e592a638c91542d524cbc992faf808d5c74256224a2ca9f726b7c57a2ae4268397418477566471c4af92ea52b5573e98fbd8c74954a6a45448dbf915e0a70cd9d9c2affc484b0c954ec47bbbbd8c79f31a365e05474df5f3d887645db375ca68a32a0d1a83efe8d44229148a438c2481a102048648cc43859c38cfa3418238e09015b2069605b33d9960d06f280a0de68e7b43ed7f60dc756f2c0654f88ba4a6a44027683c75f24a42a61a266e429f198ba95984b5cdaafaaaaaaaae75e6f1c6afe48483c0f08d6c3af2cf7835eee87e8e187dc0fece18bdc8f95878fb91f2c0f7fc5fd6879f82c5b831c55b7046c2b84dc8ee6fde58ee67de8c1e868deafb0b4682b8ee63d3f4bb692891c4d3f9685b2cbd1f48732ea68faaf6c3a9a7e9a595925595686eea52cdb6bcc195fbe1861c6382411d5f7d4fd9071d70af4b7f9710c0ce6fa25eea1e3baa2f9e895c114b93ef45728946d17115769c649b6ca10aed5bbcaf01202bf0b1e44517354d7050f5275524ab37e2be3cad7902bdb88b87a0409fff5ef2fed07fea797107865cefaeb22e29a84d97c2b08215ca77681035475d5852cf8ab1db1349822fcde7a1a2d2b9b5c6955a51a51e5af7ccbfde0ba2ea7c6d6bb4c3a1a8a5dd7422a4c5e72aaef976451fd830872e46930450c50fd0d50fd9db75da8fc417c75da013c54f983c0aad37654e732aeaf4ae56c2bc20821ecfa3dc956f12330460c50f983a852a7d38d53260cfcd772026c5fb6b583c88e2ab5243bf61a82d5241b34e46b9205aaf26365c4949b842ff45ca480f7d67756bd95b9b5d785c33b40759791f7db01aad4921ca0ca9f18edb5b83d4401ae4340cd083c02132a153e8c11f8efe1a600f8d5b66d95ba55e08b6ad45a545d4b22aabb564491e2547839695441ca0f30caa5294176f0458d0f5d6a1b7c49c0fc8f40f831c6b8c5f8b2aab22dbe8c10461c6015e716505a66e66ef7f758a680314a8a61efbdf7dea3ee1066d6a474a965cd397dcee6b973a53ee968dc7bafbe6902e71c330ae63277333373dc01c6fd6e0c0d6688acee9da3dc871eac12ee0ada4389800520d1841a14d6d74c0358ef3e48df4ccd079ed9df651fb8c0360765877650eafe34edcf59495969a493c3a88ff82e8bcf393e58816dd4693e706ab69a8df249fb552561dc5c8a9f3047ee9ccb5833a2994b753d46a6ba6b1bfcfe2b8687082c4b4a392d522329556eefccdb9b29f7934d225faacab6c773915cf074ac5f54df84b4b7d333fcefa12a3f272e70364f07ce09efd3016b9be49ff01f4fcbd7fdf2f91141b0bed2b6f73cb3f0dfc8d7f9ba21eb146d562af5be0f7f3ff6af95f2b7d77b2d37094f0404487d33b0fc36d392a3ee5e74fe868deabaf62d1a8bb6f2a277ec4299ab9784fd6fcb51e1c70c0990de5e5f0115f59baec45ce25d6d7b19fdca46f4fbbc72972babe2e97e583374611616baa625faea077ff5a1a73fe52584ce2bab9bed5b6faf21ef63cc908ca0866464440026f8a209b55fb4100d2030282e84cf043acae3b1800e9a08414453b1dc7362e0a7eebb02e317d9d6ce6e70cd86246c01af95eeeeaa21faa4bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbdb8539e7b464da7bbcab1e6fd9e3dde3dde3dde3dde3ddb36365656565a5478fb7ecf1eef1eef1eef1eef1eef9979797971eed3ddeb1c7bbc7bba707080808c8811aa80706062646870e175cd8b1e333cfb2e6cdfa851eef1eef1eef1eef9e1d3b3ecb348d070f991edea347f3f6e8177a9d78f778f7683c64647af478018692974acd5bea177abc7bbc7bba5f68eff1eee9f1420fb67f55504c22d9aec01d86fab1ea2f080781422720481a93a5aaae6fe6bc2c2b93d55956acecaa73349291147b69b98c1c198d58565ca8cb1584107f49ea9bf9ee49bf4148b7ec4543d79097972b0821d6471c4f42085f045fdcda980d3708911812b07da10d5d8e6dfc2251c73617843f570ba693d9f607fbc128a1acac499dd2e6a54116bd4222cc31ac79b1a010b6c2d292f2d9e20b9f94183fa9202a6cbc4125e83179a720da727261a244e57fc9c14142e5f01c399a37c7c949155838e1d922c5d351fa8c56a3a3341b1dd440a8264c38d104f584ce16fc45e5ef207cf31f2eb1a75a52d8e62c433be85fd775d113ebf08e139fa094cf0f14a0e639f1cfe9743a9d180a5094202a938787878787e7743a9d4ea7aca5a5a5058651905c2ad8899453e226299f1f2840a9542a954aa15028140ad5403cacc3c3c3c3c3c33b3cec8453ec63792a954aa55028140ac5c3c3c3c3c3d392c2606849adcffe40014aa552a9140a8542a1500d140444854f9cc3a82a954aa55229140a8542a11aa881801a88870e1d3a5cd8b1e33fcb341ece8347f3f26059946cb23abbb33c3da452a9542a854aa15028146a7d7e160a5094542a954aa55028140a8592c9341e3c64647af4780106870186e6856145278a0bf2a0d4a252a9542ad564757687679da452a994a77ac8f478e105186028956662f0186268de18b01a89a393d2f1d1713f3a1ed443a924a36041a43fe5903c287a10f4a0e741ed41ee412fbcb059e9895214957f666786c6701189816eb6bd2a2a3f002e225b1f8f0ff7e1a3797d38ed892a0f11604fa7674abf6113677329e97e7edecfd3793a4fe7fd4c1842d539e79cbb5ab2285dfcc3362e0d4f110883e7746fef36facd5d2973346af1edeeeed66477773bb7bbdbed42a82ac6232e23ab659c54cadd20a4412f57c9188a0d85ee119251bfd72d869432e67a752e475cb8fbf953c9f1dc01197c5e031c1b8cb0b303ac5a819b006b273a0b5994a00ac6d57591451375c3301f3cb324df20953727b3956a4e5517592451192361a4eabae041944aabeb82076360efc9947dc3fd8e062f489996983a5b629a8c4413530b6e90639abe7345ca341f169a982654638d1c8ea28920d394558c00c849453b5b1b3801324d4b8a20d39cb4b395c11341a64977061bf8b98ca062c7d4590094c022c83445b4b335038a11d0c034311238e959c215291367306698260bed6c5fc0819369a138c3c7b43058029069bad0ce36d5c68e69bed0ce568a279c4c13c70d82a0c489d4c2c93461781dcc175f5c7132cd1c36704308a91c3030609860c03899660caf8bf1620c25d408da42c7345ba8e209377c60c068e13901b31f938429268993a933989369eae0753a3ce42e6d303175b65a3c59c2144ea609b357d0b902d0139dc1e8d03fa58029e2cea8fbee8cba1a8c08eafec9e4217f9c107cd18394696e0fa48c11f49c70adb3ad011486f063e20c060cd3d4413bdb228440c7345da09ded13537c4c7307edec4d799232cde7541646ec641b0233bc7052534567d815ae10c5c4194c0c4c9307edac881d0309275311ae0b2a3f3ba67ece8a8849c2d4548687963d0f1e3c78f0e8e16a429c39d3922d827986e0a786d26a13a2764bedc1c0e2d74a4af954fe64323cc36f65a49ee10783849a3132beea9d8e4623248c82fc40aa47aabf814b6b031187990d7b830d6cc3123e18a8c5d46f29318c44aabcda6e9822befd40aa47fa97547e2ead93793273f449299d9c01a54c44853ec32dc487cc017c60ee3c53c3251f491ca0f21fc1cc39e8f01e902034ecdbb710e001b3e98ed137181a80dc50b7d5a147153ae6eea30ab56dd1681819189c21bc1e5920cfbd33ffa80de1d56947fcbd6b6484e0cebca1e3645b0d892506221f4829dfca16b3a65f3d847289a558fafedee7ec19b12ab39839a7dd352ae837e0dc9f17119ced079c7a64716a7cfa547bd790d5e4c34b48a4d90f3875bba1fa76691b4ebddedfa2a994864a7f1b55ea52a98e4a7b548ab9506dbb7ebe4b36caf65bb27d966cf745fb216db5ed7ab71e86ca3fdf8543ac52a5ca1af5c19f99574bfe80539f7604e397842f5018d80e574021756f1037a33bc8efc003f7e03b5c01e5793f929362f4e8de6190b290b3c36f3dec90c6936298758030473cdd0c8b0b283f8e8b30a2e0028a12cc84f57e0909b28285f6f5bed741e8bb0bc6c8db940f979889fb219fb9061e5606feeaa9e8350fbb3fb56dc65ed9c7f6572ed5168bf941da22d5986d529471a0f256614515d7bbe1ebba4831104106440002b6395c62d9c2836d5b05e74c6bba2f7ec4601b981984f26322c0fcfdda14979803ae86dd5919f81906a36ca8242e1994d8a91901000000025315000020100a078442a1583c0f5445ce1d14000c7c8c3e6c5a3a9747a328486114858c41cc18048090010181999101090510517000c63bf1835ea19db37bbf953e049dc07965895c641345debe40c9cd11e770c9a0b6a8e9fe05fd6d169f540a012c3d3ad560efe6d6586f334ddc2c7723bdcd64ea36b9ccb13273e30dc135899d4c666ecb3d8ba599ab6e92db1c2b33cf6e05f72456329fb929772d96669eba4d6e73accc3cbb115c93585166169fb9da3a0c41515b91abe469a67e03c5bf388246330af05e774d3d33c63ece837b85bb501ab11af7e0b6f28e14c618c77b047c1aac79805a341aff8a46fa4997e902344a2df4686a6c7205ad122b7a5a35325d804621951efd5d5407d53f437c2c42ec348c006f2bef4661c6729c1d14061dd74940b64148000164e140388748b4d9443f8b3adbf14bada4b651ab9e7bd010a4420f971561c5e5ca6156b8c46f414f9b46a65b502abdd1a4ad81c10da00c1a1a57b39da061a32fe39665d30c35090322e63afb4befddeaef84419b0f0b9d14a5452e4b043ed96d9dbb284cb17e8cf4000ed919e491d638b2d607953d758f8ace115f37933c9a450e24d1b1428efc0b3d5a359a5c4157a4df525fb25d51fc59cb1a9dee6f04076f54cba787c6a049b6685276bf6b2f565807824d9b671d6c22f48626fd1c0cd5932e5da6f66bcd82c5570ac431680f47f5c91e909bad0d38a123265bc478eef80d9c101dcc52d737d32c3fd8c748004dbec97eb28ac8a2ae9f611d10366230cfd8d9ee53d6378fb77abe557405b7a15f8ebc01c19cedb01675cfa9ce3fbba4aa25ae74ea28f96e0649cebd604aa651b1fe196d225116b27ee870bfda58149bc0dea0bbd13a88c37ce011344806af88826f3caadb1ea37a3b87aa42020ed2cfe6fc8cacfead6b69d81c0cf5ee43e2c563d1355d3e830b86f0f7a933c8d4c8ad614c1b2ff4a6df5b27b59a654300996fcde3e588d2b0981e3e88533632c801f254bf66744e31394d54ce33481577181b7bd2ec60a186691faa809907b9da190b9181a2fb3dc8a732f6c1e77ab8eaa4b44878c0ce49738eb263341bfa42986674a252d9ec77d9bffd2ce030783d7de1361a5541d887e2ed67f525a7f781d36ae615971c114af0369dd07528a5365477ac0010296b5d1ef8fe80155bbcaf1df5ca7b4207a96ac00b10b082b05960b795b1d0ed373ae1b53a5c5f88036b9cc58049737aaecfbf453529ebc39c5eb967db7e6091b2e5f3c7a2350bfe64567fdcbd15da652b63a3647f8ad6540e519b7f7a995f24762ad81daf00b666fe585453c9556d3a6f2abf902fe5ad32e42e65cb9fc5d42ccc27acbdb913acfef93a9f5d2be204a1a49678f19cd6d25e826e5108106b9a248f2386ab285c751667ee795b05fb4d73f8f34e26571623f685b4e85ba9c4b0779f493c2aa0c8e61045f68ac9265ae066cb8b42f16059957ad538a215be3e5be3b01c97b40cdb92eb059b7589a644f060d273ababcaef6556336a850dedade3944b944963ca4664f5c70f40667d6320501097ee14915eff80b89aa42df3c86fcb93a5ef73a2d372d34b9ff5de570a26e5c49e6e8f7463a7d41404a5a7eebd639ab3c832eda8bcba5737737418be5a39013288a7923271aeaac92c67ce90ebbfd24356cb21200073aa658f65ff01a194f70d000fccffcf50f8dcc7c12036e8001c577b4fc6efda53f8e658f12d5bd1420bd44a77d3c78339bd30bcbb0d81b2e39dff3e3b1a30f9ae717d840853e9751f28fe2e78dbd50bc3facdbb7162993d1dbd1add7bf02b90d7ce448ecc5577a733d5f064cb3537e440ab8c0d52ce3aebec199d3cb09f5dfb6c2e2831091318c1b76c6300c3ca178d433b321e82c0f0c353f82d855b94bde096a61eeaad6a059f54f4e3b7df9b0e34eb93d4bdf11aed3c40923be3f23151e6d3ecb62d14b246c07cc9acafee94c85c286b48618bae22fa803813d2a9931c076542aa0c11c92efbd75268ecc28059ce5c53d62458acb09b95ec98e9e4ba5e3720f664a6d51190823d5a7dd34c0d1eb56fcff87e5fd87429f432c98a5be5872faff0d8d934d1cc2be49a6e07dea35fdeea8ec8f0d24e71b16cfc2b4e91861df39139d828a6c0e9cdb172b36f899b4ab72b287dea7030911bc64d66ba5dac2b8e0ae3d5bce3a79066690857b1b34dad381ce7e27cf559d3e9a5cd6cfeb2224466ba33bcace0023e1506998b000c3831a896e511180c08a8ffffd10597bd3fc4b67ff4647bedda51d98c997e73eac9539e4e4a5db855a9375b67e140c5f9f7a1f3c109ee8dcbc7c49a9abe6340dbe1cfa7dd969af7819904d0f982cbdbe2738b15e497c06a8edc16d50f7197b35b270f5439b8f9c087e66abed2eb3a4be677892f046230171d54cc4046c83cbbbf9f1bd9b1f1f3a953e7f47e59130bc852a376ac68ec4da668bd84803bcd7f52b4dc48b90d914d272125a20d4186c8ec47a7f8fdadea43444d427a54eb91897cacc147f0bc16376e8f8de66d62260175bfecf29677c2686c849337bab55ccfd587b989a735e3b29a96c1d938c52d8ba31804299c7be3799909cbf48b2fb77c0460dbfac48664e9c72f01a66ea683680c0f464904e21ac9859fa2ccea66b685a29ed492b8eac978d81559d6ee04d2f2fbaf10de0afc85488ea06668a5026dc33a0404ab43ce7b7111c8bb36704192e09b5c8d3d10f20ab6ca75a92d7ad4f7bb2ef9395def43171069d33a4c6653f3bb15223889a0de9b172f5a46b6a2312f90d47501b7ff030591c7e0eab172ad312800bc45a795088bb8ef850e051f3e02078409ddff06a7e60c10b5fa44e86f5edbef1c93c7267b42978d453811eb2f2a3b15fb91e95b4142edf443680e6a6776651fb7b12712424f9da0c9b0c18ca50aa3fc13251f23496f3f1f870b5467536b20c13ce39965f40112daf3dc2cd48efdd4089c4117fb0cc31e47abd7b498c58291eccaaafa6b6e4b780e1fe9dd216a5ed05eab2d3d8c198831d2128ffd402b5ac979e4f1ac27c5699e33b223938c5b80310e28d44ed3c659d0196a4ded201345cc0d314e40a1b7e1dbc6b92927f290f069ce9e7001db6e246d2b065695d924cdc194be4c21f74ea584e851b090407571480f87cf3cb08a70dd72b5d251cdbf82195511718690d0c35950542c3337641c6ff0048e572d487d6412334bb0e1ecaec244124d74b64cb6e914c4bea2719bebfa551fefb936cf4802b514520fee78c13bdad3694b43de8ce28bff7dd9e4e77bfe8b9b0d228119bdca9e6161fe2d9be582f6762a7bf5819d0daf04f4aaf948b4f758ab4d5aa9f40b21133ed899cf7ae6071dd29b1d9e3e160e585526ba093bf06a81ff685412cb21d19104abfd90af43f5c104b43b839713300837409084a8966ec2a5391a08bdd8a3579006e2136a11e3b94aa0b63d51fe714d00b6b080e698b0892433da0c21444ca1ca28ae80e91ca21332d8345588f49d6732de3cda784def8f63a47f890f908822bfe3860693ba9f9f20c2d68245ca186f2b9d9008b3a2d31f77979fabfe96a184a1bfe6ad8d96f7cc9bf4075c1ca8cd07220491a922505709ea32a0d90e48b1d0483a74c2a880ed0d2b571834d75b5a212aabe07a96f0a39ccc10423917430e763d9eaae30bf64c8ccf18959cc81495c07c0cecf1a96e47e004ae78e6193389f7d8061961594322b249832183a9e8f157228c5178e7fb3ed9c39830407d0a2e23c426b688b6e0052d19c3a99321128c46fe74b040758761c72a91c4b739ca507abe7059dc163e98082b7febe720a63bf7d45d01a6f9017c210ac7bd31608d7a20feafa957057b7eedd307a88e91798be67c1c404f6725699839a0bde3c04b60e53719e1ba8c9997354defc1bb5bf52b05a59646bd2537a2abab4bc18617b300c19fd235b029d55245227f799d77a967057ca5a08f5fb91fee90d3f1f3fc4c865aef683a2410c38ee1aeae36f730fe599b95be1f38712b9ace6ba43481a75373623e37368e622903eb998ff5d21062380a9e3e0add2a4738821d2f492058a55e4b54c836ae47c9672dc585d7dd05663e0241dbadf9411fe2773abe3aa8610d10c4fad5547f291d3db58ff2872922fbbd346bdc06f3c2a350acfc1805e421fa9bde039bb7a81ece255dc1defab8c4c77cb4a767e722e6249e7cc6fa61d5a609b5673f9e08fb3a6ba25a344f1a717ef416fb31a6eeec1c178c8bd2f773d8b25334bc17a356aeb8839ee0e9049b7730ba96e2836c901f05811bb4504417ad2e219fd54527808adc5e0dd616fb0c37dc789c35797b4594cd3f24427a07c8362d4b8d108b6a0b3bdf980334591d3ba0ad8155cff0f6fc947c26ea671c19a795596747fbc8dfe2f6a325f79c3f7e6758c9dee8ef9000865bd1f2b11d90756ecf9e113d3b5406a0128c0449e825f1d4990edb80902226116cb164e5d78e16a670192630078f81b2ff224948759814c0c0bd12081e1906b7ff3f7615b170b466c335e3c4a83d1811393ded0479101eb1bafad3196345d52caa2cfa1a2f4071c041d484fb0b10b02908e71b82ac511c24a91992e06a7e14a27c3de8160eefa070755355ca8676d0fadedfa3a22c04ffbc059981c72e052e7a40ab1457fc18069ca881bbbe2e0b3dfc54ae26cf1d464711e4fe5915227e9163dc3e41fa1a3b8bfc458acbf951526741812c6b1ad046b814b0601aafa0b2b2a0fd2a88152b01394f7b0b31ea693966e4df095b445631ea7eb7d5b18046934e214e4a42c811abf0428638fa0077b7ad7d20b94469c5657074e193c3a0a9148088cca9fafcb834f8057abf5eb36e2ff7efd07b10784ce8c25280ca1ecd82ef5b2ca0d2d0dae09627858efac2509b5e55426f79388786e38687c6724950442153287c8cdd349bbcf2d60cd632f08e4011f8f63e1a9786f6c85d3629b9e394f5dd76e303f1c17bb146956a28fd932b167189e8d10a31d56701801318df0e00bd46c48a6f809d0709bf88967a517724fc6e626e64572f9ea2a0260b356243411ce5c88ec21b75c8656949eb3d608a22c26dec7d549f916dfdb9138b133d60f570bc3034b1909306e9e24b8a1ca1a2476dbdd3fc5f960d6c3fab62abed28fa029044acbc2c7b6edf0c1b2efbf55130c1592f00c7e5b199c0cb94b97bee4e71b923ac27507cb11c5ce28d339a014ba4c97e7ba8774a03f5fd61511a07dd21c7537b857a47a120620cb66c1352608b073477fda3bb57e1d495b8f93d7dc1311fd96e0f0927149e8c800d1d0ad13387a2f85b0dcdcb8cf2794be0f326e88e8e6bbdc8cf0d1634d3d824e2d899a5671aa53a0c856ce469f32eb8ea3320395e40c53003a9d661a42b34eee53a804a5558b62fc074722047a136a2f016102125baff3b562920b51a94ad13a7917a6c005aa7fe4da19fb58ebce05c235ee936a5b5419a94d43468a8be5ae0804b2cb6b918dc94de06c94a714d5866f7236a2844003e8bdb20480419724674c45a4271d7977a72e6860d8e0bc5ed02e67b7b4abdc81cb95813f2dd76d13647d85013427c82bd435f20eb1578149e117334f4885be53c442595b2c40cdc2e46f0d8a635b56d00a1dca15fcfddd355e9f3a3e84a8fd3522acf6a2e0a15b181253ec3ce0ee58ae2607d9655d447612aeb31b257b385f890e9ad331badd8d95e1ea0b9403a8899b4dfdf72b5770f1c9e2c651daa9e246b0057b5c139e10f3c9b6401a2332de517a72c855277113d0757dae01e1fd9a922227c619d0b27117742b67ed2bb2a1856c182610addd684a704abe40fc10a8e32c244fe352bb1ff6bad9706e20614961e2cadfbb9a12dabd633c9d442f53f35f97299e4cb596724eede98fd2db984ee7735dcf9925e3852ba36d9e4362b485490eaeed75bd6e216be2250641dd6060560d56d38b26e38ce6424a8ba974c2232f984cf60c9a6ef546e3821bb29a491f4b5b3721b22e42147032ed484e4ba906da7b8de2c5490d507158612757a45ff638e3c24d8b73964f109952115c681355c90678839e584faa5932c40495d55a5757eb105de958fc64c8db9300495abcb120a28e7150511b340c49a09740ac151e663986911063af1e47abcdb1b8455425ca372866a10b430594a32c0a5bda99a282d113f52b8a866f5848019e2a2a3dc0412db37471b6759c66a1d249aab968982526dfc5a960252b270498929fc3adddccff88097223644d7a846974cf998eca9ef29aea70cd01e33e717b63a87d8b08ce94466abe06331fe94b8138c60fa120bea2b9e3686576bb16f9e75814d6a91503f5d407091c294854cd1561823027f69ac23f72ee184b12f70e1cab529d3bc08241f6ecaa1c7c4a6b4c4ab2e279d71b280acee80c53dcf405c78df239fa807f54e9257dc261a0a4014765e70e4fa6723da613780ca4d0ee69b14fdf2142c09bef521b22a9e9c45af4d002dbe914e3a6ba1c565ea856980f11428306185b5d2cb5310936356fa2bdc8b5cb4ede7c8b732688790d8aa3de788e9cac210309c52912280b4e26f992afe7a258e7b2712c66a0026ca31b2a3afdc19efcf867b09049196a4ee76eba8eae2da6f54f5af3a8ef4eea40bb09996ddbda71790f7cdf25d8c8aa13ebf5ab1ef19251f90144675243f0319dc3419037f06e38c178a7256aa4c58323376d50423ad779c1e75331cf10dee938a89430b66ca62441091ddf06c79e45f4c30af3dd75ee00abca15a660d4b89f7264a0bee63df09cdc9c149ea53fae74ef4d76d3299b5d2f90355a40f1754084d4845a9c5dc1159c4606e5278cf0c1241234ca46cfdcac70efd3e95adca4060569fae0b2fb9cbc99c04733b1bcc6ee3491bab5ef0a7712048ba024464802abaf0d0e39a41a6b04769ad97b01d3c5410ea33487fdb9dfe06ff78b7f1a39850b4bdc8702e70d645e37520e288d1857f8ee1e5684b4e9fdc45847867d0a09b8f53cd74fc5fd1d80481f2820bf30828b474e4cef00ebc7a56d0c875f3c73b08abb0e0d2aeb83c7ade5b4794406d32c272834105b9e1666e80bb580947f2edf83b039fb8fae688d1dddefd8017f43f6009d02665f9914aed48bbec961eb1b9de0af5f7775a60c55492a211ec341a1af26071bf6342e6fad5b182ea8f9b839ddc3d80f56cb54b90a0c720b08b167147e87f4423911458976342882c2f1897e4ad2dafd75cc668581eb20a240e06001c9366902411c356adc42c27488d5a9c5d569923e9d4eebebaa7640f561412c835a9827578aba770a5ea994b4e7044c0528b5c87737ff9c65e8cf77daf2f2515c4f681a77aac3bbd90c0f857ca426f6033ddb2a388617ccbf640640cd1a29d44ccab5adf3e1e98e2fccbae8b6e09f47982e5b2312c054c6f96b4ac4a8c1e26176aac342d23bd4e760d899c40cc23f512bb7c2c3226a4d286648dced8b71b12309ba59fe220e7d0eacb8cc94fabd4c99de39c0a53331a6537e91980965ad4c5a8bacdb33abbe5cd5dc63ab063bd6aa71bd48f1f40b8b04256fb18a01525c2f515aa86fcfe9a3bf0732d8bb5728c25c214912d3276279def0c23a6f613efa8807e8114de11422332026dea5c95bc8c10cb791eb660b8e71ca55a490832169130534c202aecc4882866e917250f2757ab1b15178771e70cbe1fe1544f9e9c02cac0bc2252b8e7f9b18272a88e3cecb305d2c31e834dc07735390d5eef5a4dc28ba1bb2171616b4e2bbbfa91c110a2d18dff459e5c0216736519ddb60334e272aca2da47bfe9446300383f9b43083a05caf9d0e2fadcaef393e5a7d217838cc771deb0f25a54c3ecd995c8dabad825b52869c3f45710fc22481e4b5ccfc265aac4b0d74d96c66c4de57fd87bb97f5ea3adb3cf955a1205bb78bd5612368ea2efa11c9d4c3631e831379ea6a50ff9e010ccde18566328ddd510ff8344ab9411d15c067f20d5cd8f9ef7c66e34afde0f82d3dedfb675b307dffd50c6934e0bb42a5320c07384171beda427d837625c935cf053e713938dc7e2921dd6b8a3705409143cb8a13ce645800e63300d82eb020f07993d5e1b69459f7699d3532aaddd98035fc788f1136e1e48e392d3e6b9455894bfa68a5d7669cfa6e3e80849d58399bc3522fe30c6c00343cffcc3cff25c675d7d5ce3850bdb010a8c0b5b25b91da280aaa8dac3da76a22a6d0cc53026566771fd0f6ba8a7c5006423ce7ae2a222136331b2193b0c5cbacea0b7a84856efc8289e05f2e4e4de892fa54302b016e7f429f7c1aef236916731acdc813657a842b5d0e792b1888b4190ddbbd61cf357b789a5a45a00593e1e738833e84b3de2f84234332feb1d8876d441ec6bb1221f1f6c7092f3ab39bb8552eb9efcced2afe06811e08905f4c01279b7f7569b206b7ce97c7bb6ac07fc742b615e24671c522f892ec9aa312e9072a8e9e002034d9754533cbcb9541c1b22baaa7cf4dc8576b2b039f881eec890c08067fcce3b3a8a64643605290d1f5c09a918136d239d5aa8fd986157779ee09978bbcd4ec3b9eed5fe6b8681181333af27ce194d65e597f2b9323fa1028ece4f1339f474587e88da6dd6412bc70a2880619e0575c4829bd330fd9eb05aa76e5402ebf599065e9cf06eadd9adc803686ee0e13d6e0bef194b9f36425c68c8877e817736a1385116183172d0bbebf18c54d76754db4e3811684db0d74c6108b0a3e606390e7d2aa0a65cf39cdb00d454b28656475e70dacd90f8dd5b99082eb680423664ca50b32f7e0b60ca4b6294daf88b2a7b31455b692c024910dd2306da6dae5fc388239185a49093d1bc98c968551fabd53915b92639276bd7303447c2d012ba8533ee00b8c554560931310178ca43aa380b33e7090756a2ae330994ad4236fca1f5f35385b52118a2f7166d19aaa85420bce4a0473a6a5e104ae7b624b585f87b1fa6c617083d08d7f1e6294464525d057bf399a308040bca74b807cedf3138e18a95d9ef2c2b1aa433826853b086e9a7d67254a35975ce1e0c4ea5d752536bc9554d5269de3964963667afb88f90f3c2d64d780d01df4ab61e41e5df4c2314c8f020b511db729be39d803a66ce5fac332dcfaad193b0e3cb472a894c26c9514a264a2c093a49696e56ac79ae9e3abeb72f58b27595895bb8bcf6c8349a5b8fed6ed3ea7653866615c8dea7372bb4c315e32c2686cc11c66c0c8dd2bb4378efdb7cb89e4b8238b812990dc790cab608eb2180996be8b330dac97a99122b7186c8ab046e5592424241bc0c14313a50d7835879b5cb08cd13282bae355e6760a79ad17ee4303ad74039071fa6a393ad0fb40960e64fad5d83294f3a8ed46640d4f2a2555c4bdfdbda400f24d5fad7a54e75c13402fa15c5311d3c9d01f6a38b1103a41bb47e1ce9bc20bdc5c6070aa674b606d1bb2bc3038d55bb4ee093395530836ed075f8d20897ff704f10cc096aad54761f3c73646a1c95320eb797772a9e2a5a6169ee6139e6eb592cb1a81238f839eb519aa0c34fa07ae70e2880691a536ff7d833defe39aae995686adb3c60741cf75095f61e9423211ae2060afe27fbb58192baa7afaed50781a59c0b604268784cc99ab161e4408762e977f1970fbd425407df5cb00c8994ef88d9f1ecef1e85365047e9a12aba1b6bec841d9e7463112e9133fcc70f370d50d9b0ca425fdf06d2f9d06fba8099613d77352ce200cdc3d044407a930a6c4b384a6173e055928f2b77943546e131cf0f288f086599a4e41e31f663b88715d1e74f0d0f8cd85806a4fee224e8e1cffc88f8dcd4e1e131e3357a59e1cb67607164a0c547db94c00e7de9705bfb64102819664c49cc0f5ce2e5f898e6e35168e48aee03cd21a036a37817ad1b4d16a3607c39221985878f8225a6a1d7f59a12000e224bbf926d5d12115cf8cedfb3168a4b79b0643450aa9c88bd105cf12fa8d3bb2337af171f149dda47cf942b6e28a84309386ea60b6788a85655cc212728eb287869e4d71ba3f4bd85bd02527ec62e81e0d618598dad7f57d380d51854217914de4b794c0d15ba7ceb2fec55d9132379588c23a232978a1552b6d4b085d0879d6f67072368f86525e339598bbe227112e3e1d798a0c1131fd4d3d6344cf196e24474fcd67800083021a00343e0c00cc3842a2dad6109615bda3d1849b8a8d8daa0967367a1c53973667112fff29aceb751a0d29e50408d767d8562e6b5c9725e1f1bf130f368eee8e24c84eb9e2222f7c02fc44ea7a780f00d83f825b8f7918ad1640c29f5479ec1f9e5daabf1d83842cc461e70128a44021ddfa65f1bea6faece2afdaca88e1cb8ba289401e389b4123a5b140a09bf5891d711c215b901e2e5e2216003377fab31b14dc8fcbca4e1abee17a78b59778ca05c054c8048ba8c2086b1a2d1d6dd59a6a2588384c582d4860841c284c11622214d1f9c325c70c34883df02c42ace5c83412c1f5fd9e1e46280aa9a934fcaa0fc812c0c0b5d85edc44231a5e541f93e864c0b6ab61f9cc250964c51a17a8789229b03597db6b094887ffd4c74c89213fa1a09779f29f3bb4ef64482336941b4f0b9447cbd5b2c7438115fcfa319a52181e8418284615fdfdcba111ee2264d5a74edbf8d9b668cd2882990efb4c889390f3783f7d2a5ee17e8e597b89a7541f1dd8b871f983ca58f5c678b6144abc295b40ecb760a1c28f59ee2f8f666cb67630b35e144a025a812f545910c7d9553a4b70249fd9f42d5351c79c493b35f94791356d454f37d51d42239cd53ed47c845593d1e8748ce0c9c5029e359ffc65adf8448fedf799140e7aa45f8446d5d35e1165c5165f8e0c39b3061e7290abcf02a2abb10ca7cf893e3a1b1c444a7972c02c6cadf2ad1bfd7f473e8e72ac735f79a9b891934f1edb275b076451a4f0d851efb28a1c2f8bcde5010e976d60366cbb7dd06d7627bde105a9417afb558a7c9553f89640c163f5abac5e74c4280b1d0405f4d07c8128f493c926d64888e7858c8633c2a3c38650cda8ce09172f5773cce77f41bf94a9877e46bbd372cda1ddfe78e4e43be6d18928d26097d6386dcf3ff215e640f19a38d1d07ec83599fd500a324bb181b2434b0c5c64dad915a612224f2ef3a039757e61ead0e7a21de891033039c4a0619644c4d7711b17ae7c49306e21f7e4541e6097316b17020248043bfedec2b353c8424b6ea9ebcc952a91c0ddf4f9b90d0179cf589e3d53f11d330571d4e8edeaebf7776f21edb3fe9f555f67102e7dd775138b17d8b785255488e83da5ef10ba059506fe875fdda6f5be11f9926c79cb1102a7460ddc6793d51f5fab130f6df9d14d04b2b0497672d05077426ebaa4ddac0675cb6460f02b9abdb9b7ac45c0dc7ae9b6cdc25a06b0e39cf76175e7e4ebbafeb5cee20f751d48777c8d088e6d4f3874af1809898d70c19b54ecc09b71575500ba3fc34b83101e7894bfe79615bc1484a6a43f892fc4bccc3cfa0f1651aad6fb0a7debff56d501e8564030d6b5f50c77be7bb898971af371c5057dbc4fe268546f6b847483a0e2ec3c7a88b3f7399da8ff9b7ed32d08f4dd2a1a95e906c48eabf786ca43fc0ba14a1e011c518afaffd9f299019bcf77eb49e6984805f43c5fbcc7ce3d4f5941e741d929c8a3b7cb5f329e88663da68856257872c0b2b6b91113bd5e5c537aade6d9039a5d8d850436665046eb0a1b87ad0cfa2e2c86a1d767285670f4049a7c312a93e6cc88ddd2e1759d71dae47594de32a0712efc22d07397fa6d64dcf3bf061c1f1c6c31862063d94614705c8f2d57d278f9e1539b034ad018fabe53fc0fdc185340962e8ba38f5ecb46affbf245a85e9afa34d59d39566d88ab0bcbe0497407d559c3a261905fb518f5f82e2369bd051939c13fb3371fe47ab8aab2cc2faadbe3f3cafb111f041f1249556d728b6ba59310dd6fa180d62579a3aeb37347d6812cdabc4ad6fa44e51b8088411aeb9f12248aa1d21a7f76f2aecfa3887768390dedff79eb760168d4be074d88d10ef1ff29e36dafe79b491d6bf7bb98a69436b05bda991d7272269e90dfb1f647550f672bd087df114d449160dd01b7a6770ecaf8b7b4440b52002d9a3d6690675c2a960a05bfbd32fdd757d3646e9dcf2408632fa1b85bd644e7833528b24b580562523bb82f5040e0b048b7a715ac239df1b7a8f7ac6224dac3851406838f27b8ba5bc14212da955513dede6aac162eda611858bc2167c862a4475556239c240a4cebb0a53af32be3ecbb22cf4a7a55f96fb6b44c4cb9f291a675088a97184a17a2f265507ee08b427cbdce07e3728acaf5d2e54a256840bbdc00674564b65a5214cb02c2fbcbded07d9644220e27eb215ad972b56d6949773db29b8f559a9de035fa6eb7973fe8b36ad7f81f23487caa659595263aa3249dd624dd6df492874b7c5c8c9535a8fda8cad69b6183d095a7d2a9df9842d8da8678488c4781b1c8d6e7a6242d29913e9990bf278b34f6639027197581abb1f0001cc294530b6c3cfeec3f0322fdff0cc5c7b9e40b1c867657ffb108ca9339d009bb26a12dd54cda853e2be2ef910910e4e75b4d5581f8b08f7f78236391cee2faed375c66304fd28b79ff0bd988f483af2df42b8b72c56ae60c810e93ebb624ab7a4fc2b9a485e71c594eae5c43b53514d664313789f8fd54fea30a520f692e3caa23dd871653d902e219affa05d92872fd8bf0432583f3ed393863dc3c2fec45919f933064149abca35ff858d796dc0602d0ee399b6a5951727dc34e1a571c0e62b0ab0b81b736c2992b3382a460e8263785f2ba82024be07af45c883fc36e1f2a7ed55e1325343c5fb4e35f52b81e126bf4cf076faaccb644c3642640bee039e7019414155dd841bbbc46cb070c4c51c01f771e0b9a98d7a5a220b7a34f3009e555f2fbbe9886ecacb379a4876e7912f72d41ecf3eca8cc336164da001b3a29a5b034faffa3d92e8b21b3f447b335b99b8ee81a5de1fb475d354dc160e9a65f1880f0433d36e792606aa2018de1d14e421b56671437416e22007b2f14507352af451c664ff92609e55595341d4ee195fda2f63d3e4be05ef577873dddde54ab5f34ac517d45711af26ed975066fd3b6b4a1ee4fd6a391778df0c1672f3e2310a26ff13c23a68bf3300c2ebba9865747914e95e6c8c97a5b70b3508d164cf729710b085ddbc900e2940e2ddb3ccef1ea92f10900310c90b054d3a0d5445c7347d3c30888d0f0160c3660cd5142ee498fc0b12034a4d1b1107ce9639802e032db506a04edd0b16b5ebaaf2b1de2046fef991eb01c160f731d64e9f69d27881a1f027155785e32003f73d5b408c0ebcf02b8458b4da0e69c58bcc5653c0439b3aca776b77b2c815930334c527f0623d8a967076ac5236a8805f536b27d781de3f0283717b04d96d068c980217fd26d822ea6ebb077b888f5d3ea6422a180d51517debf23266c4f0cc3c9c91c6cbbc4469e9c7877b473f8f6c2699a2109bd37a22c2fad9454e6825c6481cf97a9dcb55b503e2d3d10b0e21511c76868a522f9a010cad8a6d170a78cf3447d9843814bc30ac074ee739bce6ff1db323c2a5e3de82566643200f7bffafb14ba973557754df07c85a717d5246ab447fd7f9fa26d7279a0f1e82eb71c7fd102e47e572b4e2eaf075391797ec46a4e707103b2bdf35dabffdf23f0dfe8dc46d1a182b87027809c595e544eef45e34b5a6cdc1c3b81bbf6a579cccf87065d7c867883e53db9150ac665c668c4dc0f5db7c26238e3973d8855fde21abe615af3e672447b03b046423d289f84afc101a5b7f0fe02c6173d034785a56cd837e16683f7465f2872d8481b2d0e822226f139cbfa1365fe907bc3102e703bf60d00543679183cbc21b6503acdb6d7925a49b5d22fc6671b6a30933241fc62398be9dc6395a66708dbebfb2ecd8cc7db52a5ddd185da01b01bb7ea766a80ddb0573b6f18288c1c765b7646625a084cd5234914fc2097480c73854a37d26a9d170e1394844471014d5d88430af87f0c12e8479c131577648351aa659024d4b8cca128cb5403df6e8b6354963c16835d30d4728933d8e599d079f076a48f75b7dd83277dc80fc83ed225fc8a8272fe8cf685d8ab4f29a028095f6b564a867c90817b3ed00e19692ef7cf4dc821219ca49d5d68439098862c868e6c2aa7c9e950e99fad1baa83d97d465e607d5a1272daa9d15cc65954c33a417c294c2cca0702a6ccda973aa0248ba77a4f65d151e2be5dcca33e0adbef344555d3613d7b0ed11c85fdb81058b4786da1a736fe6a8feca6e15f12e9c09d154df4b5f37f59aa09e26fe4f1094aeab46aefb28362c7aa0679ffff56bb726cd10cc7379a861a603176a879e62bbb1abdc39987568d6e06f428452d1a6bdd2246329482ea130ca6f4c2c051733528837e3cf2e75ed5cea984eb6cdf21af1f57e4baf7fcf44fece33da849449cc5f55a3ed52f2d01de04e2b697bd47646085683ce3004172d5471e6d706997a9f2b219cd4840aafc781db43defaeda8447741fbc8449a90b442b5a964d854d814fd1a79c7d85f259cdff7dab7b4c8db3d7202b7894986082b824fbe73cb783f7e222c2f8d260d073688d721a714169d412b39f7fe32e201c6a5e6a565b84e1bf527f24432743f56e184179e83fdc402d295d30e8bce1a1c8c9395d92f1fba123c661c56de39c631cc9d0ce96762b5d79a0c712dd4d4c850a9362442d6cb148ce20e9d68d8d3b496f384bac4ae11da98ad13ac8b72f10f5bcc2cb0be76c182025cd75b1a882d731fc11aff9fd5a55766e13761b61d4f535795b8a9ea0b31105a65c3ef2df83f756f025b0adea851ae16427068141ea4a9fb4e11eaec99204c1d069ce343ac2e564700d7b57d1b6280d0e0eb6b2641b09806d775669282d8d6a8e340127d584d71ef1134e99e2111338e85af37f8de5548995e97c2a011ae27603ecd58c43c20845d922eac24afd6bc02687bfebd99d6e784cccf240da54f896b52f1c155b49e838935befd5d71e468f65272222c7ddd97a9138890a8dcf2213dd294b359c3207c2206cc6a2f0a940432119825fe32441ea116f305b7f85db60eda39d4ea17f3bf0c5abe26d386b19c661fabb8fbec3cca9366d02a5eb01077d5d51e699b10e269df556410314648831ce9d3e20d035a2927c34563562851b60134e7096e75ac89a8c53f1aac21bce15522810156e79281df0156e5784d1120871b910db68c0c3be97d8dc4baf31407d34846c23b655f9cb79c39d4e98be00813d923d1799bde5f935fc805ec5a819879c296d28485b1604b79f4946a9220bec828788bcfd8a87c27536e2031d21ae73a8632d3bba04785f52362360aa32b487b2a488c3df89c8b8dbad75f94fff154390b2fd00cd957375f70883ffbf75bdd3534b2c8f2862db11debd69526fc69757a354b4bbdd822b6cce8db075aafadc01af816a14b4296699f3cc00511ac5a95410c51949deeee8d4c4fdfe1e8c88060d32b88477f19bf2ef0366f02c281e3dbbd4ddee102c87d1f5dc2ef3e6a95cdc5e26562b689c92896587956b6e4306848469dd0494c3a096c97a1da53fef18df953114bcbfc7de90e49a8dfc1cbab8c46ea7ab8dd069f022c1bb20cb07214fe710c637f93399ba194947383e71180f304daac4fa581155a2ea47e3a3b24f33c91898c8463c32adc11a8b59a6ebd2e03a1cbf5c3439a10ddeb384a793dbe495a61a90375aa9fbf24795e27d3da2b691e6de41d1871cd6ad275589fb11fe695330724a69de7eac538581bc17f0ae10b24761378e90ac1e410f3c93b8c8335a457e6ac312ce4d9f932de886b1e0d67ebb561724c9d54dd891926ba984fefb9ecc1bbb6fd74feeb05893cf7aa9c8cd5d224544403e02703933986a7db5ff6221246d9f234e91c550a464cb19a96bae436ac9ee66ba06a9f8e54165c4edf4379711af99f7699335a6c99e34196abf9c42f1290deef49408a46749d5af793a0c62cbb645756fe1d1d7dd8e96c1794e44fb484637d2acde83666d04679029bf2873a6ff47f66027814158249f3e238d207bae8c8f2b5f92b370a2236fd813952ce9d0c226151e7835187e2a99eb44b4bdfc57c76410a4d5b89c86592255e619a187c74bd71b54c5af0296de54a22c3edc903dd37292594cddf99148d9383d70fa7a91b19b2ded9db80c8039720baddcbbe73663d251dba1e871fe5dbb2e9d9743b367e7d1fd7b32f39923571961e0ee2e43d74ebdf225c5ce047ed4d75231170b31b127eb5853909616eff65c1663b9d1e808c4e9c33f7aecd3420613a9aacfaaf6f188c7f244a736b8c87dd9601be139a5c55801fd3f477a13d786a94c91b27403b1dc6b28ae94a8e8dd2a59e9490314b1eae520dc7ddd61150b216b67d0083d58f6e0f15d2053b86ae9ae25000eafb00cf5dc252d44605345431e91974f3b5044706704959cc71b4800919ad78351feee6c8df14150d969d0ce061ab0d69673d7186f5fc08a6a0179745c97b6d404748cf43b4cc867e22fcce225304780b0382db33609ba4af4cc01d9b814edccfb5259276b0e3617ed464e15f44f66cec8fa687e1bb28c581b819e35e7440e7f9029d793ab989adc368a5fc5e824412a702537cb81c11278a1e363f04ee37563e480cebcc623a433eb00566bc973934be49c569735884590944f6d347cb5ee44a6892af78e7c22e1b4f75dbbc21f3bb5c18ea854569c8283ca5bc75695275c2e61b76231f2b44f09eab1023f017e7c0a5e4e441c4bcb0ded2e205d324d90dafbfb450fc158a97a4130e015645230ee1b64eb09b604a7d605c7eb6ef66b664d80b7c029f4c2283ddfd2f342e23c2f64d228aa8648bcc9cd89241b3a18c57a0a39a185f1abb7441d5d2f56408f5cdea305753a250118461c334da1fae45a6add027add9cfa4b57f7fe08ae77ba9ccfefb5a7cb427082538baab1496af1a8847bb5d572139dd8582cb9ab23ffea553e37326f16813dfe72dfa91ffad56e211c78e7869d107347131e8501806dcb7b1e5f79c896f2c509d0c69f7007fcf6f4fdb88cf4c7af34c66fd2927d9cc8657863bcf8edf25f9d0b283590f97d8dc8b24f7062dd8ec473013bcb8d33c446f481349b290ec8ab4ebeb900607a84c86f41ad435aaa5098c4e137c67df631219f490c1d6e5b127332f1964130531892e23e0d9cf7c7512b4e72033f034306c8b37b0a997a295ba59b140535f4ed92dd544b2d7127d04ca1a472d602f31282fa1b7d41c5e0bdb4b415605d599046505b541929e19e52e0f60e287666a85468d3b924dc4e44f51e97eaa09b4fbbb89631cd81ad7707594b2dd2adbf2b6155c723bf2842d1b88bd46d4f9e4af9fe146d4afd52c2b911f9e4f844f78cbb3720a188e40043001416f1d1d2e78040187044f8b2bcee5f0d9d52652b4506511821694052f6876089ed077d86717991d75c7d70a2dfae8ab1e6b24a07b8624d30e4a60e5b10c6f8e94cbe7c313f35dd8a57d79a33c1551ef6b033a1617054123b1122c2a37206f26a6470814b1269560544f9f84f206702160cda8c3f4e2e317763969043e057b1fb29c20e1ddd2d8628fe1f6fbc6ced3fa8c1e4d92d1e050a6c47d2b00ffb8a92a4f22949a804ec4e89172bdd061a7a8475ee07bab2641ad5caabbd3eabe0da0be2cb29e886bb6d695f627e17e165bcb07a4873ce74443963406f570437e42b47412a856c7068d557fe2483350a35f57f962a2b78880d1fc35ddffd84358102d6998d94142ae666e285c2d10552a53401553b18bf0443814315abd16a7fd66c54c471c08f6eb2da1fa1ccf2e6df56e86dc15ec2a3eae73c29d22761cbd8c2a75fc2ed23c0242446762097aff6e048e875446640095662a0d511cbcc53454e72b5ab27613fc1ca1e2ddbf038e433eca238e4c733d0205521de50e96b68e86f3e37e591beda3e6f4c1247a60bc848ae80061634b15096650444e4a446fdc83db5f755f2760166a51f26ae01a4f50f4aa6fa3ef7a3a64f95b0757fe524bb25b3984c3bc14da116915f1489cc7919958661d4b8cb6c0fb4ad7a2889c918dd1edfd8a41abd32865d13fe776a3fc36a921a4886ea3b05f6ea579b265c166415e417a474b2b9244366c2282d5febc9479291a16acb177cfd152122735dc7362ab359f2318a1511010030473e3e11b8c10ad759f6dc51c4ceda775d877d6e97fe4eac25ec5250b5ab3eac4b1f91df21009c9b5994300831fff397a75a36aa1243c68a8957cc5a200949f7072fb993e85e5d3798d02e2bf05779ebfa4fdcb472b01abfa9bc6576c04d4f7ce537fda3ba9c16e9a9768b0c887e5bb9d6b97979233409b02f238ce30a0a95373bb8e40ba856609433387be629e4e8f98f9aa54653cb39f8731c517f2d7458b8e33feec7a36d3fa5c527a70d86293676ed471033b6cfad944e1ee385242e8bc0066c685892734d8bc163311d6552a93e1f04f3de1a95b4bb4eecef0e536dce43f6a400124428aa4f8a3d20dd3d0679d410a14ee949a66e9ff0744b264d981a320a3ae59d0ccfbc6a78bb2786c88d3268537aa874e8dbbb050826e9db9dd4cc89b6f89b68db3ff47ca48bf789dcfc952dfec95fa92a1f552315e56b35b5ef0c563b0452e0281e0bac3f2edbada96634280cd6e675c05a05d57ec7481ebd92fb7461559cd098cb613cf3d13bb60fd2349ed8ca7419521b41f879cd0183d90d67f66e794f8f354accfb59702543364a081074081564cf9494d764969426f979fa59b6df72104d36acf32c6cad7f5f5cc73e864867f3333b03fb648443b178037267f01dbb31e5fcb2f1f8a97627cafea0737a13aef4827ac69256ea975edc24205381edfa5f85a19e4ace2d80dc1a03465d6f3a12ce0dcab9e1eee254c02d62a79016413ef131229c39a89dab2eae9053a59da070800214d4491079b6ac3e78fe94f25ac567eef781903a3844783d26fd035a6ddce3853ac99a8d3e866d8cf20484d01675ca84c9f6d88bf4dca21a140998a9c7df2b7f7279dc10232da0af6674b9e8f95d2f944caae19957b5407421075b7888d68e28712e9038227d260d0f792fca1ee73c275d04d31e31aac19728e03a5b0904c387e68e5b79c00469b852b44c1ba6fc1a37891b40b2dd55e875f5f739f8b89e541434726855e110e80afc5e64ead9f019e67d3f1007f32cf734da53b4b4ccf9a154c1c441af6d4e3bfb8a954ee8ac2f83fe3163e8b851a1a4748e4d6c8ec6c8b2445e6e8b9e4f21e4bc4fc9e2b1075457ce2d635d2cda4431510c443603cd442d7dc9d0a0959538674615dc8c8311a5ccf9f7a50776a2b9b8f33ce49843e464f0cc1b8a32eb5e6b7e4bc4a81282ab35d1d25b434ac17565a14313015b486611c8b6ae35eebe47d752cca7970f813b26201d21f513854eaf33e0df10a3efff16906f1f755b9be3649d7f977d4691fabba6c167548a563b0791e0b8a455ac083cd599218c946f5481ed90ae0c2474dca667b265468631d262d19721ebb4472ce5db6a06aa990122117bc4c261a55dd2e9f91a2d9686bc08ec9df4760fd3a71e0839f0e8f93eebc0be05befcadf4dcf5661fd0e2ed24556abe90f3450fc745caec5de721cb7a499930ce5c7465d56a6261d608e4da086ee1ab70ca5bba2d61b485d3baa6c5cce1fa8ad55ad714b4280208a3afd01815c3a263dc010cb2db752bd6ee902dec585f46649312211551f25c6741d5ddb571bec0c2f880ced9219a735bf231ba3e7a7e409540a68dd8b9934697a886920346073438fdaaf788c3f6cb284056e04ba136e16485572dbba7425ba01a7133b3dbb4a49f625422177043289d485f58bbc04d17532c9fa07a0ac6435c3e160b39c0111af24c5eece98bd0a228cd0fd080b2bca18830ea402ced30747e542503f253387b0991829dcefe2aff08a724303d66b269e48b099386e5549ae9e5275634889504c6eabd8e9c4a200695926bbaef2169d134ca96863146a7b318858e8b6eacdb46c900910bb861f061038948f1e7d4987a5c337cac6ada7c653545aa68d19939f09a8230fe1734bcb970f06c7c66460d50a40423d45fb210ab1f3314f3426a3bb40797cb4cb5ee47ade41e7ae28913a4703f0a803a3cb0e6941dcf360ea827bc21bc92baaf87557aeb871fc04937d664665d141063daf5d796164bbf8814f82a186694e009ba17bb1190150792dead32a0410082f06e25c5e6acdb737b954ce7c434ea184003ba043164c340be0a1d4a2e420b450fe88d56cfce3e711eb9257004bc905e165434c45346b7395ce02431ee2d70c3560e90e12da55d901a8316a015a317fbfb9d7c94479c8a392ff51bab5a988020eef50f69d741619eb0a58a82b42f78cf7e8fa60b695f0ff414fbf0d1b416eb49da20985c487d4bc19fcb96bcc269d25b877010530fb5c89f083646d82fcf792dd2c2c99057349015b2529399014c4da55563c38bb5a361585deb5ca8057494c5ce0b4c04ca97239a877abb7ab55e3dea7633dfb60952bb6578fb95a5dcb09711000eacf47b42b495caee5545cf1ff7e563cd9107352a6d1ee625a23325abfb35400c8c949baa0161d7b2f236bf87f9cf02ae18fbce944cb0a081e2b859037d5b56915a1693c0ef4806baf5d38bb58e2b3ec51965c56b81b6c3abfc5090df68cf692c5b201f3e34c68da0507e8b3d15ea583998bfc3ff038dfc6ad4542ded4930e11c12ccec264909c253257e96d5439e059a8402a8d12b6609e8c4a5ddf3304caaa18381a2154d11b94bf1a4a58cb1ce7475e48fe51d9a71a858b253ed1697970b993dfd0e5144330c5f26e0b8862aa358a8e10102f53477ae7b61c4143624ed3ad113f7100fb2cf40bc22bd0dc5a2a0467dc51192e62c0554cf0dd67a81f60d8adfd6b1867c920ae9af541a1ac457f7f623d5df55cc1d22e5c1c682e06f735bfd992b414baa0b3856690122dec9f701fec72d21061da9f1847d80b876315b20081556b5293719f7a1b50dd60baff3fead1280b8cabdffec999c0b686aee05b6c9d3b56d67d991b74f960287e2e772bf1946c190375c37a39c07ead67a9d1fad92a50378ee0cb660d45e26b819a219265039e02319bda40fd97ec5eb7cc5211fa6d08f45239d12defb3d071b3332495303a2d78033e221b3fb55c4b60823b9bd4a7a746f5afebeaa3012ee2c27786d9d34195897a88da63b9cd64f41904b3c8b4279b74894ae03c9fefb1c1b3304c53c1395a13117935712837689beca48d63f6d2a61b2ca7fbb1c8efd8da2c32b5f3e95d85e1f5b864192b253aff44ac87da5c614bc79b13fa84cf4036bb2c080ed75cd600f020ac86aa909e9b620f62f9f78cbf424d5f64786802956daeb19c378cd5ecb4ff341f8680be7d5b169b41430294e1c104d715195435c7614f80ab1d793d039d885e926a0cf760abde86d48fb97f015567916fdc086383e83a9316dd1d2274282ea0003154715f8dc54769f4e69564a86a1f92cada18ecd6e06a9d926ab48e97642929fb806c2ac260decb2510ce916b2367d281170a2460879f8f803371b588ce76844c3a71d740ebf520a2088a8df1fc14b181c07442e502456f1849f9986e8545d49f8ff4fd0a8a21c0b0f917882dcd1ae20a34aaf36b5c2b8d77456aa6d9935d4632695d510da1481e57b8edfd62ef9b508e3a1890b3f3e592b8d7ec079f4167d9fcafccc999558d6c2ff1e7602644d990db72a52aacdf159c876f52c83d140f20122f7b276a50856efcca411d24338cf7376b2cbe2270b459191fee8e961cbaba9f2f329aabebcf50951759f60f66eea1a0b44fe5ed713d0f33336699390e6e29e103f5e368ea9a70806640c46f5aa2e78778278bee874f729d4e69662d946527cb9fdfa4665633cc467cfdb19fa808402a68a45b6a949fd44ac90b115e1a880bb3ec3d691c49785a4c0eabe4e25e804a422bf046aa6d2ea8fdc59bf29c3678dea95eaa898473042d3faa7df62112798e4711726625d82833528dfbbf7fcbf64134dbfaeba4260fa95d687abc2aea152d19da796acc500d644dc22cf975a441ce67c33509ecc8deae954c8ed9bc0e7aa6e198059a67b64f81a1fbd5d62946cd5e1fedebd7063a9083a776a0906f2c8a02b9c20b5448b8447dbc3da55eb229896938d7a0676ac2c89fdc3cf02780b4ac3705f07511329a0ac20feb69b2e93a283f6a70f03311262d4097cb1b993ee1ed4cebebeb9e7c82e5010a040973afc22ccb91b912ee0a7bf596d739610c1205d4594cc6c6ca48a97442dfb705d3f05423bd8f0314f3130014d5eb6930e00e2dd695d16d4aae85635084a61fe9c30d68576f84142fc96d6bf78b1c1c8e006a15024110680b746f6fa78141e6ad5c94235e8911e302e56ff246553eb2489ae15daca842b738a2f3ac206ffaa4d22c82ef165baa41ada13f78eadbf6beaf549f17c23fa588234eebdda38bb7775b1f91a617ade0013d56d52a11d742e5e3f51e463a167101a1bc674440299ab5ef3dbb5c941b66f97c25df47fccfc14f6626eaa97b25dbeff33ce5521702c854d6a38e8dc7e46362ecf01e490e12123f1890158716bdff6355a5131749ec0839895fb1d8958fb6390960ff922364d474e32950090c3c5d25302e3b4edc8bd41b93dcaa372df1730f57c6b44001f35a4b3088bfc93e44ac517c1810c3d58e6974568989a1d8ed60753563ffffaba43f3023a5b81b5392db599079ed7c0f855e187ab3664ed73d438c87c0adeac57e2f3038bd492d76474f17a3a3ce39da58f8eeff0642b26e1e3c9ac0b73a140c928dba64f532cafa41aa3d9e7b5198407d7a456addbe21b5d211a6718d00bc1a52ab0506d668bc8811dc5b998e640477215801f3abe0bfafd1c52b43ab6e0e8a10888dedeaf52f741bb805398b297cf36eaed235eacd73a9244cd04b3457a2f752b089fdbe0519d27f702aa687a4e024533bb5506680dd72dd20d42ab67b58ae9f2a3cf759b5e3c8bb73dc73e5e85fec65a1432f52d40dd89ae069d17fe060829e8970cffde9f3bd24b73ba436c3a0f2e6ef7503d0d31f19783598f3ca00e21e391145dc2bbce23d42f789d790bf4a20984c93e833d6db731e0d4605d0067000b5f824f7b05d5d20d05ad206343506725d0ba4dd8a3a9c8e4f436fd1ddfe1e5ceb51e43683955aded2dd4d2fbb0a39db30a911ae6d11a8b18a719446cd8d73219a2e39cf5213cd6b655c6fa0959f4dd4c4cf08c526042f4da3b41e200bcb1937a47276ba5fcddfa91679c07d5b0ab6c4023f661bed1d40181c1c5082cdc137a4f39714b0bd300a50d9d3a55267a8942c49dd03c0c66e714f2923dff6ccf1641d2088b4a92256ad8c573727b5cf767d4bb8dbebc2224cf690750788c7aa89aa3eb02c1dde55d3c0430e92117dfc98006979ff4c470cfb122ef5445a8946d281f4e940d3930d690f7a827bf57d260bb6eb0ab10361f88b6c210f8c9ab6f8577787eb8334ae594e93f88ea62af34a6f0f4d5619a5da35bab6400bb144d8cc21077810d09bd2dd28724cb7a58c80404d4571b62cfc00bea492e810cac226d426054f2c9049b83bd216e71ae84d2d68f5dfc156a4fa1174297853aecac17a80e2ea0c836f6a9a43d8a1aafc8ed6a1b45bcf88e7a891cfe9f3e4932728272afae6620b66d8057e0115e7884d51d517c984695d108b0b9947d5c13260e805606966dbc7e665560981a64761ec8254ce0393711a81f8602add6ea0dd68fdd7dcc0c5b41f4663a60482eaf1c2185f84440073244d6a9c4ac84b087e826ef163583e30c4982ef15e1ea9920121d61c59b36d44aa7d1b02a356ad7ea78a5c85f9dd773aa9d6f3b889d20628a0d5aabe36e08a2ca122aa82d913c6eb0a5f8545b986f0932007ae498b59eb673899130e775e2129767db3a5112c6665661a0854ff6449190ecc7e9caf5c4ece1153dc48a8a5dbba78d88cccabb2f2227a2fca1534b50e5d7e730393b584e1c19485cff1c04cf8c6979b0a84508924cad725c0275a1d208e35336981d2be677cb65c5173bc7110c387d5d637b9953a108e6bce348011fea73013692354840e67f73704af7cdc7b0787245613cba064141bdd7e83d4c29370f191bd08ed1c953f6019ba16d4314d0e7404f430d9244f68bc49b9a519df025e522bdae6116fa3d48ce7c6d7c60ddbc3c81ecd53ab3b5c9a72cd641b3ce2a2c88bb74aceab77a9ec274756b52fd2453a5376611d13d9f2224867604e86e35a917a5f5f7a789f98a3d932b96e0c4c9567a070f7bdc305222b6dbe7409959009161fdb1e85b022c428117a0ca5bbec0c49877c9d124e7c263710f440b79c6b29d21d4aaf11fed5526ed13236d1242335191fc724b7ff3136bd24a33785915c0c16c9521b6db091dfbddb4e211655327e5eae7d2078baaaa5cf507afa243f1fa2d07c68845a4fa937c31fcafb2635a069089ec686e24c7748cc7faf5928761b887f855f886504b6df71ac862b68c082a781127ea32cd64d0b570812b35a3250e12f99284ef0609602df3ff0d2ff489f75dcb516ec9d8b967014164e1fd0367e164c48a34018d6d266b73db5d9bf55c2dfdaed10c3c10ead6ac880ccb869b6aec57ff93677cac4f3f38f289132d60108c83cd57e262b78f479d9f203009a03c77691732e985733a20ea876fdcbad978d1c6d64c2e5ee25ccc31424b3a5fdc72172e19df05ea630c42db9611cb19d89b2d31b2528de40c96f4c4d25483bb0f0838a55871a65609429505f9b97ff42be54202c29e8b7d3da5b0906177063eec863b96578f382e80fe3d4d8615d1618394dfc9305845fa2a956ab5c554c3a8932e0805b278e08b76b1469cd448b65864c7fe4248eaa4154ff60afe0de409360439c5f18d54663c749131962fa99c431334ad2f59e0b7edcf2608776905b6955ad20c8992dd47f4392e6c64abd188888e429504f58755d84907d4d0705e06ad7324ad52e746616c28c206359719376258ed826dee1b1fc694c6f7c2556ecee3fea2269345dd95f26a16af5fa38b1d8b14b244892bb57866f6cfcf9cb56237759733dac3ffd4e9a7bfbf667bb810b3d57558d13afc1e2af762013c7795038e487ce946d5f27465b085d54b25420ed527d6e3be2f5a051c342fd39a0ab54231cb45506e4ed4a5b35350b5cee9e9c543325ff123a3eeb737fcf407f691cbf20b72e0beb7159aa98e94a6868cbdff8086978328d871016ed220d49049307566dceb05762f0afcaebb0703c9c05d7f4e056f3ba867951712efa30806f4ec8edc943dd3e0fb40346b523e8a5dd78d46a7fdb36e8f342c11157925988ca9b0c4756029eadad2be0ecf8da5bff6da75f5be62270f88b6a95630e6a748b86c3ce3a00bcb63d2844ead0408fc768e67e094b0e1b732048476137327e931012a38f24b5b20b64319e0be43a630ea8e8652c1cb5cce3b5c7cdc74059057a777dec22277efbb2c188d7aba02acaed7588ce736d5ce9d2100624edce8374ce8d47c28d5a2db3041afd413936ac3a45eec91af648741983d708b01a054c8f672787a730b95eb125c7b15c1aec778b9a757558fa33a8011c8b5f575c892a0496e0a280c76c614355056ef45d2de6d9d9fa4ca6945b2822b5619dfdde46a3cb9015d9b93adf7b8c806519a84619381cad76e1fbc7e677d0b0198e93ff3ee3ec8b142f4ed137835690d3998bf6fcb13da623077f6ffa126b454619fc4b9946e1b1abd8c31c765322486dc31acf3853cd6361dfce24f096112ae9b263ad0d7a826d3cb897680426996036d347a8951da26df10c9af17f053208b9759e006a00977271e385680da3e98ecd11b1fc2ce4d1e91f81993d3c9048a0a57e2cfe816c64981918fdcbca5c493c52c3e822db7662340ae60de131f922399e9de607561d0b48f0565497eac30b7ed575031644472fa3cf0bcd9fb7f1521f9044047aa2ce88b4a28e2553f1f80a16e7bd25e79cbd86e9f6cf62f909f5cea71a7bdf6015d75fc1a7fac0111c36071bcd3fc8d146b499d2d44c538566af9a27aa73a0dc206a667dfef5d43bb3985e24a638802581db6de7911141af4006292105c809f1d8f8faecb06026f5cd09ea17e775a3995586745296ab633854cfc726e659c0d2b96992c8ce1c874d2617cbb6d301f2150a332cea3ab7f7e6121271ee213a6b12026faf34dcffe1434c0dbb05f5b50b0689deb07a9bed21404e18ed3e992c3b0e5f90b5e44f1b92ea4dd1942b43f8c1d6e0ea079881710d634326da44f11230e670b2616513035c50ef81e4c3420c8f20177bca0c8f9efad02f1f95f21e1a87acb7474708254804e6f8fa152860e130ed17c2d9e8ce429cbd8f6ddb403261ae210a8a6fa07f65ccf2bb44c9199a307aee80c0cdfe508a2885c8fd146119ea37a6eee3201f45564f7f0b2ba47d56ec6346ac3de846a479b15c15a807f5c63a9b7bd26583a3381c6332e0d5103e588ff1ce319d42d539314bdc6ce3103548cd4b79a89167c25f25dcdb7eec478afea322bf7a842dc5d6eddd0b49f7086d4124d49ff5ef46e1bb8abf166eee8faf91c622bb9719fb089365def964025095ef5c958da405a8a0c769a2e5bdb58c339bb82e5b822f09dcd40d12accbba202838fa70e14b010f7000341d8af76222202ccdb6875a2da5f68babd41a4b334b22bc774ab3eec2c2c79310e7dd081c41359fc3b4b03f5e214c372ad7964535572a238410499a2d1ad38ffaeb0c6b4cc206606fe6093cf3610b28a3bbc930a5c26d8b6bd4e5d57e4841c1211cf8a2b47352bfa1612a1e689d7919d1b484f28bb944410937cd07a251df8f8ed37a2eefcc4f035287d21dae91140fead78c95983530b30bf2508e1f22032080d93cb6e4aec464c5c64d1d009b40ef08ed95967e9111495909c5abef6eeb6fb16c9aaebfa7b451263afac99a9c2dc4695f8924bd0e71123bf2407a88dc95511a6178d28936500397dba42f1002920172221637c2a4822093f2eb60f5796a4431c64fc411721731ba3e17f7b15d525b05e7635b9088dd0e9a64bd7fddba8d6400fda84fd3b84b21815a66e89bae8186590ef4870f1040e36f82433c94815362394f5b75d31b3fa56c0cbb52d68f0ef4370addafe5312ca069e1c900dfdf1cf7eac3ed60ebdde9eae05e7959217760e5ebf4ec5b745423b5d786dc64f7b36b59477ed7c81dab042ae3012b7abde8ea4707240ab157201a1211d148c9bfcb1f901a3043eb3119a7957de565712d5938608656d13347f863421ddeca93ea3b2d8a6c883c0542879acdee59096c7ef6b0c78b5dedae795406d25dfa2046c80a277a11df3c74dec5ce4960f10597638bef5da8dcaa113211026bb758ac2cc18f503dc7029018c0ec4a4b8efa5f0592ad1de19083540412d273415629c4380fbe415b302612b826eabe44b8497a3b026dc67bf701414b345d203e4582e15868b9a8c316a75ad8d3ad86f6ae549d29fc58b34b371e3009ddf76401e555e678d8419fb21f8a3cbc2eb9119c0dc9bb0f61c8066f40f63bd1c190c4d4344e653f7181bec569f456f6c7069500d2ef48b8bd0ae6b1dcf496681e63a454e0b16f8de8eed59b8860f7e872a91cb75fcc5a994322e550273926c92dbcc86a82064ad27cb2e9bc305aeac910f52be8d06f50ba13942015d9a2ec1709a536420bd2888d565301fa2d525d84638afa7957127c8e5cf05959525ffd35632c0861afa4af10d498c12c9ba43656f33e12f9037df2cd2239a965b1818c723786f25bc9ac051e3d0fdbc37ac35e709b140dd7f670201a95a4547f8c0d4b4bf7196e6292f4c31dc12da9c455b4d6c25f65eb723a0f8d68361843834aef9f0f91439836bbf439d87a4c53c9fd9e76793d5f78542ecbdccad3bf0388cabd268ac4686188161c07c0d12719576f5a62eb26b3f9ba811faeb77f36ac151822f4d7adc527d57279683ca8e4105aa9a9799f6869c60e5576fda8fb3ef90161f74e5aaf915ddb1a81aa8c9b4bffd6a51d31c7dfec8d3edd9e51d822f9407ae1e363257245b8b5b2cc013a7ece7aff005e0eed60a5308f54251c240de2f814aac87c7080ab333590d3f99cc645c363102e0292b120b898fd37db1142fe1a38890b26eb3169a2c04265bbe06f5c081812c4f00a68ff0994503ed75e75d422b4f4a06dd4f62327d1ee535691130824a677f474bd76fd2b0b8920adbb8ac9735cbd190447d212d5553d58e2d29e73795877ecb4928b44d65757a15b055ee11330f2e6526d4ffbf799fc8229b76d47ad36e9e0a045ca69145a6b584f499701087901baac43e022a6da75ec4a4db999fccee2d8a86572dc620ca555ec6bdcdc552a6cf535b14855a31c6c4c1c6500e1c2fefe459804f4b2e9757a9c331e3acd6a622f3139e0d47eeb976ebb0da558c9ab7f357fd6836a3cf0c19082910b387a523af655e0db9ad96eaec58d37e748526ecb122a4d07ac0e74f6b6eb80927a34bb34724117aa59bea11152ea4aefd6116e5aed35a255accc77ec311e8e118e571c250bbebe176288d1e19cde8f8b600386a3fc212c5720731deaedae646cd551b586bce7848fcc93233552f3b28b2c276372183dd7aa7ab20e881b62706e1dc793edcb76fc1afaa26cadfb1d05499104d79b149afc2e6b99430cb86f0e9a431f5ffed66773ccfee2d9d9832da8310ee679873a1c763ce52a064c49b1ca2c041b7ef39ee7cf0d0ea4fbea97c1883b185fa7770bab754d9fccca7bec0fd1b164091f5b4fc4e37a72d05bc88d723cf3660853ce7a719a772da7d8fde495b0e5f40f35b7e70f833c4c9d8448558ef74c80239e571b564e55c3e8957331e5dd2212402d46101728f1de183a8612ddfd8a74d84d239e1744b6f6ddfe1b6a286717e2e2f29dbeb2a2aaf57fb62d01c0d25d2fa0c4b1bad17800a25c35b619b196d2f4324efe99f1e74298137b27d06fca639766ef6e39c28f2167529ef63d0c4a6fe434c482a52d43a74102a8f94f2dbb185bfe008c918482b7ee31d2d6e071068c39a65cb7826612ef69030a628221ae30a088ba75d3179c756ce1143c9cabd0ec54ab40e7ad1eb251f534a6c23386d29e210a43b22c41d95b020bef51b28701f5d8fbebb832532974276a7241162fb36604c1e4388288a9e78db596f3322992948c4812c15b92abfbea8a11cb60795f390fa0767d1cdf49d94e3d6237f588ed97a211fc56447169cafef4875815be8dd30adc39ec24b01c2dad85219a55eb5c15cc2e47ccb4ff61c5d770fdcc1d8a89c48e5f5cb579a0473c360d3a8f28012b876f77ee10092d6a3acbb5093fa2b33cba002fa8b78fbf36628cc19f8e4059703e50131bd84495118b2fc3cea49e3773bfcd0dc413ab3eb40d29acc6101860e8fcc9f66f60afadca36ca7206e2b5904346dab9f7d32ef8c8d7d76eac652811cef337a3a97123d108244bb48963a81f97218a68ab3875242b28609226337f332646cb88746d3f629143f6b7e26ef422c8c9d3d99dbdae6eadf2314a762b0c7c592d7766b4e9b8281e34222151a9e8a093f835afc139e090ca3ef2bf072aa44292852b8d5b48a14715ef8eaa953986130b55096a791f1c7de81b3ef7b7df8bbc6e1c810a723f22d203a22b86289b554c375c8304eaae22c193da5ef3c224037265ade30c40eed5b54f3b6f2d4ccd1551267bb10f38b4d6537992f8a7e4059a884f987bac4e1f723d81f4bced4cde6779fb550f9e0e84c4e9ca51ba9c9d5b3ba9a84a9dd7f110575c9d74362aa40f9e53b174c2f224adab5dd28728bd31435f9046d0c0d09bb549d06a77dfb755616a1cf509e2f61bcb3589f0304bdad740de56db6202016ae22c01a675b28264e2043ef80bb2004fd95616134980bfe9b8a6d8461d44a1d2c982cb776c26c3b8981be9ed14db647e5185a5db658aba255f5d11e5e01bd68e1c2211b0810be7ff0922dbe4bd7daffea7ad566e10f410f5fc68becbd84a8ad95587c227932dd336b2804e57625e1fcecc290edd5e6f889a9e38a207cfb5c7edc9d8448890c03a4c55d36912f38cd8e80377fc27b345d2f4b07d27a85f10ff42774742778d5e32366a19a5b8d2660f837913d4e3790d7b5d1c70c6c6f167c972b8e5a0fba1635c27e85d8c9d2ba29b2bd5e02365c18bb71ee34381aba8e5d4610cafc3d53f48aac4ada178392d7ba7892b5ab05732c65c87a47100db8593e19ca8973c5b207d0e083e6eff989b23b6c89a0f7ce712309a36e302b55b683432d4cd7c62cca775ebfb6b5d0f6bb738804be5c012cec6c4e717890ba4c42337a8f144cee9184622377487a4009d2c7c06b97e2ae4698e12653505fb9d2166357eaafc68206f983337d21ce5620fcdf8cfd5469bfaee08ff8abe6a824aca64f27123921d2d705895770bc64e47b1e9f7a1c90e9ef87b68d2cfc944362d5b821d9effa2302ce562cef4445ae4ead8346d06908d23dcd4a08cda63100082ac99dca8c277335417c5de2e2362b71ccff6717d05ff7d46048f61230007e7721672a7084af4551886ad322a12972fda8ea710237f7165d0eaaf4c1058e8dc19663063b64d8ca0d7370dddd7edee02f4b0435475e2c539ec03c124213bd8acc1f9e53d6833251d6e14d61ce2e13ad0258dfd978b85c7e8e31dead98f9c31e11b08dc671f3c113ae8f659c9ce2a943052104ea1b21e88fce9fbac507a3f38fea93098fe142a2b61a3f46e2c4b1a9a2f550a944002da9d05586140905d710e09d83aaf7e1545b2bf307945b4ce8a4f6e031b0a4ef18c381c865b6504cc76e27bc019d9b2a53ebfe21cd867045977c03d03ec3b608bf7d47f30ba976cc3186c13c8e26c25dae84c578b3d5195d2dbc77eaba09f969636913249290339054b0590055f987b6828228e4806fd9fc30fcae74273905fd20d1191ae8123298638ad9e751616031e5ff156350460a1051035e5a5358ddf88886804fb726bcad897c354986e39e660ce17d539fb86a519c3148109c3a49935eccbcd1098203069303f60ce60ca60e29831eccb4d1854a60748f0cc17e60bfb72b303a60be66c084238c28828a820eccb8b487b2788a0008188274e7e806a424289e2a950ff559000f2a03d4d28f2f1444c2ec5119edccf91128da756a2fd67fd9faf4d3eb3f828da0e2414f74934425eae9174421e89776f275e296a7d5184141d91d771985374425eae89bcec93d71ac6dcca645f988feb4bb72b5ae769d27fcdb8b0a98c99155860a1c4c396f1d1c868c4aeab9ea5dcc5a698af5636b569689fe6d580fedcbeb2d83306fa3f0fed2b7317169e66733d81f34373354813ddae3c1408dab30cb8881ccdab956be2748be1ca27d3bb46690d1791a70dc28a564d53b189d5b52bf2744ddfb44dd74aa8a9a9fd0caeb9bdfa34f13f9496eea2e1ff8291497b46531e9ef6214ebc56ffc0513cd120f1ee4987c463e916cff04ec0b2a2864ff3995b9bff8e609552e9d69a17f37f7465b55202b26525ac74162cec0a7bf17dc1f6791addd3652f9b4fbfcdfff37499ce758c75eee493db35fc8193d53ce30f49e3477e485aed5d30ed0f0c651ad5330b4dc38dc161a8432d03a7638db1c66803d36819f88535ede3df0d3a47cbd0345c161a868ea143a06934b0f65a4b9362e3bff106c8c7deae71838e26810ddd723dc3b2d0326e0c4ec15ce7a4d8e858e7a4f048e1816764293b52768840c61b3a67ec89b71c5d43dfa0655c167a86b6419340e7a4d46aa06637fbd81517c7aef87abaec924a6bce117bc4e8966b18985b52131d245eedd32fba4c0ce2d3c59b68c329167f80c41e1d3f2ad678eccb65620d35fb1978ca6e79fe213cfcacb679e479b5933d862e13bb1d699a368a350b0b8bd029aa9191916ab4b28ae17eb9e279d6af8b6369ae8c2bc3ee90ffebcc28e1d5ae0065f0df8f88a311d79b120f4072ba2e13813a50c9052caea599881385702ada3a166de20dd38842e22aae251dd815eae79ace437e56adb1e9e25c07f3d0397f5a6b7db59a55b54ce136348f96010f5de35a2745c796e7d5ae18f98c3cc233a262ae0898882f4b1739b0c19b72ae34cfa979e89ab6e91b298518b3063c1df39289e6c088f508f05de153ede4255dd40c5726094815756404cb30dff77d5aeda41ea15fbbe25eb5935f892ada97a388f6e5281feccb51bb7d394ab72f47ad70a194eccb87d8b74425d9975b14927d39aa07fb72d4917d39cac8be9c85e2c15691e8e1d3ac98ec1da85043fb7294102b281deccb5141eccb51b87d39aac8be1c95837d390a08971225b42f4711d997a370f0821a928665a876d4ba2f47dd6084122504a644d90056a282a028513fc494a81aa8250ac84ea1aa31286030239c78a52ac883579ca2807ec6db9787451bb4f6fb7f6d79b6b06c9a289bffbf24a2c9ffffaac9befcfe974facb5d6863c205141a10cafdd72cbc1afd62dd7f9312a685f8e31c6d85a960030c873f13f983513adb5d65a9346e5902e65fddd3bf4ddeb040c7348ba01c79c73586eb30266aa248ae0a8bf71c8565e0bd37803e348ba01cb9c737e307ffc861f9a498fa230647bfc9954ca60adb5d65a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6bb3d96c369bcd66b3d96c369bcd66b3d96c369bcd66b3d96c369bcd667bf96ccb6f33f1627b11410517bfd61f983f080a28189124788a3d04350966d24e04bf1209a2607e3014b9155114de56838210b6f05f147fb0ef386a1d96dbac804992a5586ef38864819be79aa4b5d65f7e1d86f70b625972b1442f49f291fcbe076f6ff1ffe57d25a4cdc0cefc8380d4e8986b6e5d9ae37b57f26ab07f59d7f01d924b1d6ca45df353947df9d568ceb90c7920cb1e61c9a63ccfa61d86e536c5d467308764c9d22a5b50d94cad2c9ec139e7179c92af329f240c850a64917d492ca0c031572dcf1425264185cc8df172e644b91140349af2e48309132f2f2f2f2f26d013afd0af39f9bae73ff1f77a9d3871e2c489177aca6499ff976042c94f287530819442daf1092d5af47e492041850a152a549020c28bccbf8dd9988dd9988d59196bc2e5b26f4a155458c1bcc10a0228c9220220b1a07dfec58309269c70c209279c60020640e9a245ef25016c02b0730250a240bab128dc9c7aec9b425900155678d97d0d70ea7107905d6417d94576915de401e4132f100c8d088d404079b5d60ab0d62ee0fbf87fb7db0394190165862109a0084e40d900d28d024abb8012c65b20fdff6b0694640b257882284e0d563fcd1c3cc5c759d9809c7400788622c85b0079087214309083f9010f8000042290738ec07f8e80c625cc4088903bebc1d75a6b7f65f57f0ba650da2dbff8ffc91e6df95f149039c89c4bfb57ccffbf0d5158ce5b6046d027be17a88396863a64ffff3f721b1ef1e3e5743341baac2df74a27e42effe593efc96bd9ffffafb88d9dfef98f3bc9e74464db7ef93fd9b36f4b97fdff3f99a3853ab198a815935522454295572b95b52548a458255458268923b259b40ed9ffff9f7c9c5a5a26deb279792d2cef14f42cf3ffbfce29a1f94f3e5cf6f785e57f7884891711d24dc4b5b06f84d292ac35839c20dd586eb3e67a84323cc25a58ce39679892cc61da60df9288ff7f4ba280e11814aa8e18d28de56fd51531b8f89ff624daffe360179361b486c1ffbf921d918bffaab8868b1fcafe377addb3fefee3353caafedee803f50a423c83a2af1e5f75f534aa0a638be148c26c2ee2c2d63a11e61f4cb762585a50fd5709365ea3e21c533a21a3ae2e8d8caa8678e6d5433c135324a5f2e35f7f423b0cf96a85829b0f413d7ae8fc8142567ba79ccbc00664fe004371246be7b521476ca383fcffbf3638f14af1f7c8088a52a381cb0b763ba19dd06e375e0c8a63f8e9f1483c0a8f78faea1b4ef1a7857628205febdfe9ffdff1ffd7af1f4d6180d3ec83ff074330ca06344bff34aa82ddeee8e868955209da35ac3fd0063cfa642b6cd343db717474048369df7b7378ea1c9cde0b8257c96e8793a01d376a20ffbe1d351c1d1d45794194dd6eb7dbedf427748faeb57886acf3f7598338e88b22e27456b23382b3063f4aaab392dd0f699b524a25495e32cab5b0915b30e4e078b274cb01d3d13e4a29fd403a22b13681929d929d929d59337dc0700af0ffdb6fb7a49bbfd7ec61f660f23077983c983a4c1fb3c7cc61cec09481b9831903530793e7ff8fcc1c4c1898384c1ccc17982e306f9836cc1db305260bcc1ae60afe7f67aac0a461ea98293051609ec0bcc1b4215f0bf67850e1c145237353aef64e39f78039c3cc314bf0813aa78fe61173bfda3bf7e4c7b777e295e6ac73fe1c3db6585a9af166dec29cf1f6342bdc6e2bf4d8b271681c124288db2df7568ff163fc183f5ead60613fb75c76c1e642442484480811d1e7702445fd91bc9127f2aec8abe9db164274cbba7ff933335146773efd6934cd81a7fd311e418a4e0d5d7673429c9c8ec59a85b53a19837d3540c4e3f1562995dace1f188617bcd646e7fc3978f89cc1f0fb1e42cc0331efc3bce731ed71fcff8f1479a8735c847ce4f9a620a21b0d897a7820e40ffc720ff1968341f0eb81c887cbffcf2014f0fb78c831886e34ec61470a187e9f431ec8fbec43f99c3f639c032844444444444459e70f1462c1e7ab154f01dff2a703b44f6fe92d25bda53730bde5f4f6cae9b8f436f6bf4ab8cfc6e9f4a6fe232f5d6e2e3fb8acae1a5c38ae1c970d2b554a45245d3a2e3fb8dc5c56570d2e1c970dae9c95cbaa7259532eab8acb2abaaca4cbead22151a6f963f9285449f231d54b4551cd543e543eaa9bea079b5e4e82cb6252195f6dd56a41331525d553cd543e543eaa1f543712aad94a3553a966aa996a76433553ad26c85b605085746382e50a5505722ccd53e72673146d5f95152da6f412278eccc973a7559e16d0fc0261b7c005764fe1612a951a4b381613962ec54b398949f9aac54b825f58cde19405fbea92e42cecb2881d49110da57478261604928ef998a4631d5a09c762927292e29525dc9770a4126e9770255c0987c4c28ed818cc33aae62c8ce3b0653baba8a44837204f3173be3b2727cf1d948fe70eeb7c81c3e43084362f804318c2106c7058e002bb97fc4f13cfe4c4d43bf59c784eb513904d6f4ccaefe9d62f4771e8591ac22f5d02714e86ba898767624194ce984e0cc7d47b9a188d534fce89e76962304e40311a4e353c13930195c57499a9a762ea8926d264ea997afb74eb989fbad387ebb214391deb4e15897a848633538d507bbc2235094e4d54cd711c2188ce6cb4782c5dc75cc5e22a920ab97fa44e9e3b272fcf1df444718a77636e4f07f4cc99834e50a70967612c5d09b776590a9d263606737ea6c849d13a53e0a47891a2e5547bfb549fa83c0b53756a12271df314efb2508fa84852bc0f557338b6ac8433e97258ba905495680cf72f9c8b8e724fd76a3a74b84163565a69e9b364b578e98cd9b0b01c0b6bc56e589d1e9b616330ac8c8e713b437480fcf4565da6e6742ba6f066a775b3d3e225c873a7c5c7164f593971b84d0931c98de1e1195187d3ecc4ce88442297e12ecb451df3dc7b1a91d76369c61cec0b8fa30f4e35909d1977c4a4b937d64a94688bd74378c67031a118ea8cdd925c16b1213646248a0511757826062446a4632e627e3a63b353a66761380623079c8e9f26e6827ded9031c207cfc81411abf5181d1debc06f744ca363be51d99ed1b19a1b6b253446e34eb6acc5cb9d3c0b2be15a67eb097e614e9ab9bd62b1f46f3955d2a9169d2acba9f6fe857989d324a510d34354d5e114f37368cb56ac73e56c59395b5c501288b678ac4e9a58f9b34427cf1d162f59688973bf90405958563e9daa3ac9c2b2f2ad906e5a4f74abd7e2b14ebd6f04b39330222c649dd6e64fb0836189d315d6696dca33cf667d67858f56d7652d9e919d6bb93d4d8adaebba4c6d59795db673d7c22e5f21532915fd697d43aec14f45c524ddb0742c5dd6f963e970f2a751a8d3e96432b578ad2737252e842d5373bc8eb9cac333b212aee35c129d5a84676415e836a6c2d7ae9458a7b529715a9b19da0ab7d093b366a299e47c4df081d8da90f95a5cfaee0f36b4c13637058f5dc048b226bb6c638c83b0538e9031fa814d07c3d9610ed7d824101788db3bd9a56e836c3c10d9723881ad053bb0cdc044d866008212c3f5639b48b0905d16c13d08f23fd8a6cf3582e306403496009160070402308a08583708445db6837e2cb950f6d86dd08f1db4982132830de625c6aa148c61a3b0820f3f6e7f64a7741bf443c70f1c4060a6e0870e911f31b08ebdbb0dfaf1c291ad2a7a26469404fd04e9b2fd38827e6a1b28e867065db65b10f46363ef1df47382bddae62ae8e7033e1bd5cb6d12467e063b2c728fd826900d9b942307b51bb8033bd56d502dc65611c22562939a7c3a3f0a2b1060af38a964af5bb7dbed847642bb9d919151cfa8676484afddc1e136244e45a27087e425d1f7a9fd43475e12ad6af04b4625229a41da27f9cb2778071118f1d163021e3d4243a4dc40c7901c2f784c60d478d0a0a8c96e090d40a0d8154a8e1c3d2110c110517e6631a4b28f1ee4201fb59ed26d900f22fdbb0df2b176d27e2972d9c86524977d5c1696b7bc280739492a9538a9746f0f3399630e013c43cb5ca6ca4afdf22fe7acaa2add06dd6c5055a33555d51ab5c6d6a832aa2a53f3afd6906cd8aa7a8ba2821de83275fd22cfd59a5bd322b7384bc0e9675ed3a2a685aec195806bf17d38cb02f3dc6b6a827c08ea1995ed9a9e9788427ab82e987f189cca0cede7df2713869f9581b9a70af3321706d35c1bcc652e9a92a80197c14000cfc8b00c86c3d817e621cc26024606b3829bcb301fa9db201f8a7cdd0209e51e66452efc4c414f2d932a951691b34d142d1d456e712274cb370bb7dc846521e26e0c2671975d516ab55aadd6da6ab58a5aa8219698a76ed515ad3a9dce853c775cb83e633a0b8b1911ebc578ff2ac2291ec2adb9df79d142633b1b835d562c1c0d426888101da36eb858505c0b55579d93ebac247abe404578e12670e0d941f449a1a4bcd90be49fee0b0776435e45385520ac0acc5f4eb5884d81b989531d6263389cf250545d752b0ee90e294f8a43ea93424979af17f08ccc8e27f5497d78ea634a7dc0d4e78503bb0185dde032bdc849979a0b90cbcd15836be6a2b962b04a9058a9905c39a98dd10508e57273c5e09ab962b868b5181da90efcc68a06c9e5e6ca496da436ba48aeab2a6722491617cf49aad7c353035ae1b2181697a532bedaaa1b6b88b4822a27bc544fd5a3e25101a96a2ba91e2bd52b91ea9148f556a9dd533dd5ad63ee620d9158431df39c4a6522479144d57555e55a482c278eccc773e7244fdc94c2a5865246c6d2ca5ac2caa592a49688644b972abaa1d0aa4aa5702923312044701dd350a595b524b52495442cad64692dad29a5b5b49656221636c4c608e1b4282ceaeb6a52995439f2dc71f1f1dc31c1c5173854cf595c3a225e0e367c769058a990ee3dd552423a13674908bc99682813ef94c3c9c669c7c987046fc5e3d1e0cd30f156275c2e89d065a10e6163d42529a16ea2b1d9baaeb915a7639c4a64c84cedf18a74b921d3a90aa95075d5ad672fa7cba95ae3b9e3e2e4b9634274711613ba247b66c2953a4d6b6ea5812e670a9cde139cf2707aca59988a5385907475089124ebbae6722b89e6a2229926453b9bf2dca0310346cbd9da381676cea0c9605f2ed8f445bfede8701a0eef3275c5fd6b6dd11559986a646354263ae82834365bcf73144d2d2c4339242aba1d1d9e1d48ab7d1a7d4a416e8c09d72ac2af96ee86ad3376539d315bed8cf958188efd88487888393c13d301d4315791e1c9e844ddd3c45c1877647aa3ced3c8341977281a79f08ccc4ed48da28e86a87b5107a3639e22ea64e8989f441dadafab2a14e4b2508128622a05d9686ca65b75ad22dd8a659f2cfdd1535dff35c4394b0b6eed98b75a56ce16b46c7592d4529e2e24106de970da7a295ba7b56919cf9d16275b2c2d2294adf1dc69e1620b1ab64837ad22566ed5e572ab106e28b7b65a2d165d6e5d8570436bd18ea72bad50b64c5d75b97515c20dad30650b26b65aa3ae28b7ea72b9550837945b7545b95597cbad42b8a1dcaa2b5a575d6e5d857043abae685d75b97515c20dad5bd72a4a21dd94d655975b5721dcd00a7efac432636109cc30732a36159b99337333b47c948b9cd8146b19ec4ce6e11473169fa769912cd735f0cc7e91c24d14b75cd3d02bd03b3a45f026b45dcfce7a10432c4deed1e81efbb23cff58201eddf2acc3ce94f8c994c347fe0247c961e03625b85de19693f65e8c7366e950e54b853b2c9eb35e81fcfcb9ea3adc387d2c71c4a50e77c951bd3c7738d767ac67613334cce0cccc6246e01417e972bcdf79c1e23084362d513ae6b1226c0ce62b9b172f60506d4af0965d922344340bc36789167eaa3ad0865563cb603ceff3afcb599ea7c3783a3eb24fa7f36c395fb4b8380caa8d0b47531e692d052ad3db2b86d7ec457bc5787ec1578eaecbd2531dc2aac0dce55497d81498a3a77ac4c674389dfd0bb7a06acea6c08196f24881d25a99f2486faf185eb3578c579743a8544b5cae69c94606000200731700001810088543825916855920797714800e5480485c583c9a4863d1481083288aa220046210866180010a21a214424add110097c407368c02c65efce8928e8983c1b7e59924b2a21c902fa82ec00be1afe8858f31bca848c8c38adc0c73e504c42015c2d2aaa187cbf341286e0c183cebb3873315ae39265ca145c486508e9df5537cf43ab4f492ceda37c7da75b8b34b0526e4d0e2d0e87d274a7116d8d4e33cde805a05b1be17d3f0df15c2e44ca23cb6ac0276d484aa55b92a11d974ca8bcfe64797cfe24a7ff363aa8990b996eb63e198f6b5d005d59f28394a658be3e9471513a6895015e94fde3a70a67d4714d0e3ff66653be28739d4bede2306a3217316e73157ddf75a14044067523a5f5fa8aa5aa71689e9653bad13c12a126c55ebf47c4d8fd397012d02ffd09cd5f3414c6b83065b4d21c41980e5f4f69f505bc1dcc07dc13843e81e402a00f3b528faa0c8f4eb969e92f83f6444bf5c5b7aeefdd49bb23ce6082569080a8118de026b62f566056e53f2966c8f1f1fabb72c0f05e4c21d5310eb59b7144a24070da7857b8b0c4e3fb3f9d221090773162516d477cdaf782790c2fe296a8989e64018522b9ae3b3e17a65bd596cdd42f77d2de9eab0d5e485f6e346135cbd90aad89f6ee1e7e4cdb0f705375dc500d34e52192546eaa0eca634e05576e30a7957e5c99690b680415ca55b238282eca8c0900470b518b0c7aba69c5e89a770abbf96605532b59011fa8a1bd184c39911253b2818258d2991b3c6b4bbc7a32323a4146c151124a4ead6eb2799d0303e420f0ad93a8c5c4a0d512f3b5211124f42493de6a20def7d516c21e5bef70b1e8b92bab009a64c9145959ae7ae499eed877d6437a14db740128950ec9c0dea11528497168d08f951b39e12a97a7222260d2ba80e9ddd19d0064a75a3dfd8cf9748f8224fa2264b2c5483991da00cb04da65331bff8c9ff46c0302bbcf303cff86665ded05615651f57de1b5fab887419a3d917bc0f36839e707ec6990d922569d1b238383e8a7237adcd753510e2a32507453045b910820222b54aa137a8631c4e875c874064f1d1385f617aa14e81b7da73f00800edee589d06e9461d017fc030be278bc4a1b463d2a85ecf659d3aeae3ba14115c7d22aa4b23e98c30427a6ab9d844462a327d3012293782e3e0985a682b0e85d7977ad920eff6b1c8d557803dd3bc964a11f3d555597d85298cdcd7d0ef5c97b3eaaee9f290a19147a513968f421af08c7aaa471123222323b7a1431d30c187499f11294850a1c91a71ced12974aac69914acfb99ec353a99900ac033d9585dcf56115ef93d2c51c4ced110a76e41c9161fa17a49df4f2af4074390acef7df6a1f48b0c18d019fde568e1b7d510750806332a5aae20f6056d9efd621a189746a882347b60f918b14a1301d92ddbc539c5b83630eb66c6078bd140cb2ce23aeff5bf344329aa1cfdeb088a31fedc108b0763208e683d61ea1756db53fa626c1ed1da8b7c8d41862350de02a25bc218b0af394d05058080a0150ca8040213088006008de0af07be37845df4c17fd6b14c02a241ae4087bdc8a480c8c1f3595bf07a806d3b2a8f14a97c67acf00716b615d0f95c46cc9c66115cbd391c3164cc70e14a191087c821b099d0d8ce0d0d65bc8b4b29f173c292c8a1ed9d5d3bf3f420fc558020e3d802f54b57f93fd16c77bfb704c9efe16026c913428b6337cfb263a425eaf905a26bbad029f48bd7a78b8596f507ca5e35a544d69c657436e36bcb675424a362a1b08f8906e4055cdf3fe81d1220a90a806000a724591c273775b32c2574e8de51388e8a6b6743e9331a5817c5aa9ef5d4ea0116a74cad789e377241474a08772643a184a0071479c43340235be094504994aaec32ded4f2191fc22e3c57008815e7e18cbd119f07d2851186415199c32a12e65e8086416040d7db78eec5fa5b2ffe5daa90b3df4ea5547c0a830c9a30ad2a6476c53028d034bc80e8ca42ec520ecf104b439484176a830d008b2469dc510f063234b2e22736a1888f97320eeda25e56883800c9a76ffd023b4f0d93cd0f6b8c3090f62410fd123c62ea1f0e40c1c340b1bdb62360843a0d549372c6a9d88781b2a620d809ac0a4fb6ce1bc56634252b6c69e04e0b34bac76694686313abffad5ac22c3460447cb7b1a6a7c34423c6550a9b30c63634c53cbf24e53f11a965a1c3cd02a0d0e194fa81d15c2cc5e7f94f48b7a4794adcce62d84852ae991458454662620a4a733aa22771b2f265f1368fc4c63ffbe9016dd50ed3f80665205f212d470e8a382d3f72f1e0b63c8c63761b3b61bd9993084dd9e54747ebcf585edda7aca5d91a972c680e5d7085d40abfe50c14e70e2ebb8c425ec3821023802ebc4e43b696ff19666c2ffba48ba0e155185b28f919feb983e50144bbebab10e1933b703c023a8fbc98a5ac785394b6d4f67837ef457b3e2e279b6ed784b84106d49ccbb7cdb1fbf0797c8037d5de8ad3731af747b922824736a10699012e1ce8e220bce0d09850a8b5b7f3f79e188e539899405675ef09d1b39be4e2319a03c7849b7f57f2e0f2e9a3a0fc8222fa5bccf01c09b6f784b6855f9dd615a9e05a71d14cea442f5c59d270aeb31555b49d01d1acbe43b81ceb6629fec052749e0710a67f916a1d0dcfd35bfe5b8350279af234d8c83108b328ece00e236b9b4f203e9b0d88c2f3ac2a0158c53b8f5db467c2cea4d43ae8087a1782e7b9476b6367ed8f4e26aa5bcf56e5791eb061b9ee727ae462b91e50689e478f3790aa198bd820b7680d54bb249a9614930a2cd132d376c92a44adbe35b2f0054ac3cfd14c75ffda08d1968b0482cffc44aefab9d5a0225845be21e021cb7e69024604461ffe7d18e203e6e7705ecab9de8ed0af38e5d2f40b517a055ca4ca0479d97720966ea0150a4b6daa474e2b48d26a9be201341f8b102b328824c8b7f2d7bf0984b466a2a898c4d0c02103fa774524ceb0df1374a2a1843966247de6c25283fdfd415b995cf28aa07bf981f3e7bec7c833bd6a4eb9519c2ab39832e754a42f3a08ddb185dab77ba4b329ddaa4af9648b528c5a9f8c19f324a89cc92298b0f8b24357b98465b2375e5112505a4a89da1c616dd8310ce442d03ee50af7dc571388124249114a83d1982260a379ba1d9554a286760b15310bfbf267a4567917de453246ab80fb1132d877375e6a838081293ddf2e03999dc12ce79b4207b47a2da3d6a0972b212c26bdc9da8c0b1b8520516aef2cb44250a0d65598cf351c1c020a398f94f4441b46facf17c8cb180144c1dc3da9c215401745124b2a8e361926b53ea93576f051b7c4c60565b6cf7fb80399c7285e0690b1bd10250232189a137c15d79d67cc974c28be805379f4e2ff3aa2959e0e42c408dfb192044bc08e481da34204628a5eaa1a9c69db2058a7241a5fbb17726b4e358154ceab4bef3be12043ef93b2ed3ba4e76b2456fe71e3729bf2030b899be6eb1c1a806209fbf8486f5477529ab9601670a8529e5feb028a06a36afc1bd65c2328a65e3b037ee12df9e08edbb1528c9fbef3cdb30d84b14f497ae2e1a593c906bae15a38cc3606edfeb2d1d9c708897c8461c28b7220d4ae2bc6a7344356fae0935f836ed1911df93b00472a257ad6c7f83ab27c4247fb5407a45ad17210437763cf2edc80c559cc1689ad51a924fe57f2571a977cc89347f1921b3566074303b31acc921259b4be0e69ccc01414de930280506a48c278a81e5c7f110379363ce52ac12be84c154e1ffbda20acf6a005971617167af5572ac6a95984d9abe7e9560ee22b699f645fd65708111926887dee859be0c10c01c2060fa3103f4b1ce9b7e4f52a52f88582908c7f6bd5cba559103070f97cf86d0fbbe911912ad75a8aa35a11db9f54ed8b9cc018bfeae06b2122373560fbb54299ead42f9af31ae81c8b0a2f01821f7c3f6127cd46d028aac17d5522fa6a73d2145ceecca7cd10d3e5eec6265798cd1ee1266ed368c61b71af7817ece8813e1d72bb00be046eff600b057565400b14e33d495fb7649811fd7bb06589db710946a94c80c8cd015e6416b112869348c8e18f276b3712cb88a473a28da1b9b88f5a8966402607f52eb62da5b9e84971ad88ca688e16b41759c1009f783b99f6d5c39c9a998e33465bd4bbc1c4a969367b1be3929f40b5c11d7092878e72e35a0bb11b4d6500e387013a4fdecfc4361a62f3032a6a80f7e0d36d1cf0cc64acaa4e7aacaee55a7c0e282783a129d8f3d7199aa870c92934a854f0507a44eea67f79b6c75ad50e2e9ea8adcf016ec08f0989006a59a2f3fed47f2e041f9c1da72467a76224dac01c01a9436f665189eed4ffef0a0357b94f7a7cc4f24967fa080e4f01fb2d18ef339af8e5e75398304380ec530636d2ede229ede9ef7224c0e5ff2e42160cc6837479510d3f1eb7632b6cd0ab589fa42c989458e319e8f2c83176c59844fe8fc447b5d32f05517b3947cc64e0f3b2053a6f6a92d894419be55875736b0996c210242fc622f5465b132e71cd501be7d0a25017cdbaa0a143a2f35149a8e3dbbc4aaba29f01a17213cabe7f96382d7d4abe3b04382bdc4ae6415f99a1b0d6a40e60f622771270698f92651dbdacb194509394d4889cba26f26c0def5b7be74242ba0e00caf868303f9bb022ef9e288c92e1d698c2740c7f5549d7da228c7842f5e2813c16c0dc4bc4e202e424939bdff69835ffed97fb67de9c10db9b434d3fa63b273f506c3016be7ddb2acba8e6e8891b69bb523016f78b703f4baa2234883bb189d534eafabceb3f060700fb5d028707bbf17cc737cb100c8e20555a67fddd2d2b667bb3ba40452e760bf11d8fcf22171b11f937e337c3f3b673ba28a3fa0c1a5e3a93de4568a8f22d333e2039e90ee3b4b9863b79e0d3da1605498986a216367a4718bc8c7c74548e8b161c21a50037577727414338c884f079df20678f595b565b0c95255493a5ebb295eb7029d6047ad02ac2bbfca8ac8908ca5a4a29c7ced4b538995e00525c7be73996f02dd1a95e728cf5efeac53c98d792481a9e31023009df15c81abbc13d24729d795368d456e4515e0d9ff1217699930091db4c19d49ca17ec19fc11403cfb6c6bb71016e25ba77f3d5f0f454f2396979e09d58fa2b33a55fff0ab4acae488136389411cf49ff987f4d6d38689b6f2f5b9eef63fdbc54a914c254f539f809a0aec37ed5da0f1263642b4e40c5fc6708a906c671ba49bcc7fc045be2af0b0fb6c8ad4c14276116539316cd8d756f2a99a5094450e6a1f950c05d81ed4e64c585aa2b5dbc1623451fc9c148014d3a85ca9ac3b4abc3064ba1d08d4168e5a6c2acaa5574d0b2b0bbb260c745e64666ba44aa20e8dea5c5288d3494bfb038794c9608af43c2be01210aaf1d2453444b3d995b51bdf2a1acc9497049b9949d18d9ad3750b4acf6ff9cce69d08cd6e242fa8a031cd2817ef5785385590e6788500cd2eb622cc9244d42feaa0065e4a40c8bed0ac81fd6d4831e212ad7a583784a967986a64cf70bb88407c8488548f8201a51019cb73ec01ef0101a2ac10319b1d614047c08bd27c52e8a97ec8f9981b4780c783355e248efea31a85b39efd5fdac84a08b2e2586ae9cac6d2fc63060a17c15a14241fda7d659dbac026dcf72f9fadc3ef6a15baddb2135ad26ee4a385e4f10acb930a40e17166d3494585512638494c76d238291160ab1cd79a173663223c90647823de3c385c2a6a620d2bda110ce563e663e9402610321581c711b86db775d834cbc58a74ebc1a6aac849856f03a2f911df04a153127e286239a8aa31a99fa18aa64d603cff7945b7bada77d6c0f923ca80d9ded061fc83c4116310b7a5dc03ab40b0ac4c22073e8e779a0daeee2d3d665647ac69dfbd95f0824cb6d43e256c06c35332f4c0db40c29b1a3925182d0610ffa5ad8f2e13344cd7462dff28a73b0a678cb51431559e2fc4bec0b909aa3e14e9a8835074928df2d4b0cbaf02403b86377174a823247395bcc4b5a3c854cc78310c9dbfbe5dd1e0dc34b0b7f809810e870824ff2a7f96118fd22db306e2e8353590c7ebe5b4a5630d3325025fd684890776ec08d23000d8cd8a9a1c958d668b1ab11134ed094945a7547ba4cb61ee5009d8fdb4421b67c3fc2e833883c14e64bd44f0ce742019e698aa0d3db6a9429dd83a968ea15835180a46edeeb9ea4fa4e9bfe3dab5b21aa6ea30ca2a140437575b31964edf403f911e142e0520bda3e2bc19b46cc7353a41e5c07e0b764b00f7435793cbf1c384f01676af26d5f7f2b09f951b08dc17ab269e33ffe2262ad84410de564a1b7c8a2ae12dbe116edd1c6577f8b540bd820cdc85554344a12b328c3604bf52388d2358ba5436048c22f9e10b5f41d214b420546232a1e327b667fbbdd34d1479c683eb6ac030c74b56c9124efbcd6329a014c844c85216d2814a0a9a59efa50777d20ec49a53b70f9d59dd587c69aac9baa8bd7016447e88d114818285e571ee53d73671be35d1512fae679c3ec2ce3bdadeaf0e451c4cda477510495abc339033399c57aeac17abb57f67875218af2375d61f5ad168975812c880a1f97ed49d63523591f2554c9599d8becb10682e29f688d1c43b3bf4b33d93ccafeb3d25284585da715bd3b218dc29267f2d8457b4c183931cb8384f7303a361e0a2c29e2284fe432e300dfa06750e9175a9e04e19a769fa81ea787610d4e2c9d483176c01d779d077fd06da5ad44e76aa75536ed08e64a54ba3db6774baa9d0c0497d64b9341ba11574cb3d860afbdacc1377f563362b5062fdddc884230886a94a6516f596efbc80b3061c19c86839475dd4dc012ad864043f044398b7aa28c70af8928d207e620df8e9e6220533a97c6b5a4fce45636b7057d7aa72f655851fc1ea705e9eb036395321387652098c35d27f499bfe489c6576bcee36783424237ec63bc879c0955903210f2ad2643707d126c1146589fa4254ac78dfea9229b4dd9274690c75c4cd0baa9bd14231d509e0e3d91473144a246d02a58359eb4cfa9728e57162cdcc731925f2e3138d418320d4191a32f68ed82d0c43eda0491e2b5f28f74705aed4015bd400e5e270a4eae6689f1af40b4cde25785901e5f49ac168ce21ac182cb57b2480ab4fb874c495ccfe2c0607f7cce684a9f5d8bb078e044ceda82df99350da89fb767917a2a0c190aee05dd960e70d6e06a0f5ce4354f9c254f1518ce1163ba087441d0797d38c032225b0762c1e16c1b4833262d3aa4eea0937f62b730b14a1e65b7f4a6ecd755c0ce406fc63447bdd837fc22bc8c4a33217a55cc2d736b026b3a76fe7b5b1ac23c26b3a9a81ce6721462a510094a51f7de65d797b646a66cc56940cffc74aa0d81a608642c11a72c45e26444d49bc3c4a50d327a775cd6e77ab2e8ea153036bca5223bcfd8c5b6143eabfae3e3c372ea9665e2fa93a28042ed421aa6820d6957648d67776af9bf8479074378882b24759fdd5b1bf2abe47c213017cd48f9079353e48102530fa12ded24a0e8b004d1b76efb5a202e8af7971fea46fb26d0d9e0a99b6b5cb186194b759bbd6122ca58e51b4486e8b2eec1c70e1798769d5f0a9f26b8ed93b8957c1a191be5663967716c17dc301c119355481bca9ae191e946a83693a2738ee9f22bec930b0d6e7fb4a6e14a91aee0f09e60e27a6c17f63bd0ba6747361339598811abeaa68ce6f52894f0ef4344609c7828c20aaebf2a7de51d3e0d7b9b9948c6ca371084b81bece3e628953ca9e101f28ffd74d4d0985729d5b59946ea49e44a9c81012422b116a03a0a11741bba11332d62d068cd64514f0d96f73b57c48c695c1277218680560d1ddb956dba02b3b8981beabd69d9b3855d08cc44192f2f0cb05d854644e17fb82a939d6e2fc2f6e8eb0c88345cdba3ba85795a056da5fff84c72c976c521804c14051bac54016444b5affb0fca8dc185272d5f6ecd6d05f50cd5ae8ffc81a8416b9ebc15412dc004cf646042b64066c933f449ff8b741866b89a7a5c6ea934ecd08d540d05e444f62725a07ab4184513a1e6ba29ad81003bc40de4a6a6aae9a22947812039b672a6cece40015d6829dd875311d8cd147ce414889c8853da32ff9c53742a227b8a3126f233847dd2fd20a9ec1739e09faeef42e1fe923481c9aa2b01d320bd3c166df34a695de04281aed474cadd2aefe4a5eb39762b116dc8675cdb5dad7c9fb46985a2220b950bac3ef42e665449901e1ece4b913e360d0e65506e6c6a6685598d995f5e1e2a8f97650c33b5de131310606e81b4c589b2f56afba2121ad349049f0559d5f5a7a573736f2953be8eb1554ad3bfe588a884c6eee9d1e86497297d803f24bcbd60f9b7c308c143ccd641aa84db28605930e907c60f455b32cad3622661ea32ba904776fff3bee94b9dc193e9e06cef31b01472c215f202ecca3d307a2ad1aec27323085b36b3292fe4d057d0778337846d801e9c5790654b0dd1deb95ab33f341ad1da15a3cbfac812a9399b96636162e6369701c4bb40fad6be8b9612fc9d28472511a51ae7dd8e6905873a4727c39d41c2a08124d33eb3041cbcb491c86fdceb9b7b326bddbbfbd5736b32b0c9fc2a60dca019832ec151544509d47c0bac4f25a6c8cc0d065c356cc0a179db698aad9ea427a420bb0591ddf30ef3e01f4bcf108242d54a6c150b0b25709b1eeeac93ea3b822ac8738bd0d24506932c5dae5ad43540106521f1d1ebbb5be4bd57f035ef087f6fbc33e0406a1117af18cd02a6855f5129e0940c16df38e57d7306c98ddc66d5b14f1c86d2c8bc6715e86fdae03435dab7b737805ebcc80a8e33fc62031591aa60f7a4135a88996b5d8a1629e7274ff648cef949c4ed6c54f7ad935e2ad16596b648b8bae94e63a275b611ec1c9c9d3c46e604ceebbfea7884be3908f6f9149f449b185037c4356463e74379b4e8744de75b5bb52721f0133b11c04e2ed19b4b4af4a3b68a6e0ff57bd901606df481cb544b27607ecceab2314383959608b08ede41e3d81fb483c66b3f0f4ec4d17e9d0407a47a18cc65d931a410b601287140a3b97bcad3c65239a06e4a9923e4c4fa21bc1d4ff58d069d8052ade87016adcb7896b6390d5cbe4e0b9831d75ccbe797a9f0ee54497822f311f9446ecf3aefe8036a7802f57134c2f67c35427760586f30f1d65008528e009329540bf0e1a1f7f059b4e823244fd2d0bd522a0d6d49f4c262267d2824a2ef77755b1c982dc0cbc18b35cf59606ebeffab53012679fa015fb8421f7bbfd8af4cb78e5edfb39ec28317217bf43ec9930dfed3519d203af8148746040c38cd54fc3e4ce69404ead1d29ddd3f2f51a69284ff4585440d778f18b1d521dd36efe85bdbf4dbd94b7d4bd6b167a172d79e1386afd44776b4032e98e75e488878b8a106b00ab8128fe0333df904fc33314e8e0f684954a330ef993d71713cea7e15c5c9ea72bbabd09b6cf7c61635509091ce16063f01fab94115c0b7b0c40a7e820d4489e3947794db8b26f4b1c599bd0deddc2611905a545b5ae7bd37771987f8eeac677a792210e4dce2205ff95ae1fc9f90a1c925d3e2d9ed4c8d04ae179f67d32d529c60340899444499cb7a5dd0dee41430a6a79c37d1d04e25c12c8b99201d290f2889d8a916f6ba34fd2ce2f855c4de8982ef3d62d8fe099a2235295f68c2c03d2ca54d879b21405bad919e698fc20920ffed0a74aba316c14418202df27971627d87a523431b1350ebde345457b87d2a115000f7bca1ac31a6064735a9ba2a12bee3f44ce79e8c458a4022e2926a363af11696b3d4808a326a30f9cf95870f87e9d0b87cd8d16b94cd9fee56cbea682e188b88ce01af251755abccbb6ec25c2cbcd293e96205920a55790019471f7e28f34a8d3c6981d13312284e6d492605a2a2d9db39a1b3e4c6ee23594df506866d811dfc9b8c329807467a953ed5dcc4707c2b45a3c49a2140f3158d5659ddb1e43fd0ce71c7566eaafad39d4999cc2a3da1f12558516dec73d69dea4f52e37e4a40fa262d877516658009d4aed55f2daeaf7260aa3b58ddbb0990f8648249849e48b5aa071b766074fa132b170d49a943436850e2b8c2a2f23355da113f20849b37826231518d4d32da7aaef4e1b24a3703b94bc966980366b3e7a1e90b3ddd99c64330fa0e12c56d98744fcaa3437355ea0f67510d2b32809cfb34b06d51fdf86c119fe5b5d617fa0ed162aaab5a5e3e27ea1d5c811f860ee6c0836ac94694af8018e6abe9e5a814b42f05e7bfe8bff773417041ca34522918f58244068b6b688224e031cdb4ea3f9512105a33288d69185869da4daed2306534121f30ee13e8509ae43fee87529e9b388d97e102e967a2577cfdc58c371fb16e0062a1a206f2be2440d008e3a2abec9622ba27bae27d0511accaf6b893e0a0247e8742348e548aba3894555ce81ee251e29a0b6f623d39829ee6a05eb7aa2905c3afec26f17da33d8d34617475e8747e5d8c0e017f4c701a9d3b4a97dc38844500cfa3a82446ad401b8635ca5a7958572fa15782d003cd900e73df0ba3c6b624fbf02c5d98eafdd65c17559e4899588538d8430814e81659d7ba691e1d1a85cfc41689ef63a6fb13370cd28223ad71b45626155dfe8ad8fa1deab66871007dc582a9bc6a07f4ce58560168e4aa51751db56a88a478158c2e881de80a004e9745d4f8f566485aa7d0b5c7f4a688b861a4ba7c5b8852bb3787c7b87cbfef90ca08fe43f47f2fb21d72e1497e1585657f2701b525f6e5bc74a4caccc313a35b8a5d60427d6b1cd529f4a85dbbf966ece7618796c78915cfcf4a4e59af0a461e75c096ff4cf10b475d32261aaf26a41b3ecf1ebfb53e076c9fa1b8be2b6f5dc0d7310de754cfcd78c0aec85cd5413079de43e7fd3bc851f840afa08b1235782fb6cd35aac4dd143d3d990e1fb451dbecd7a153d79b63443feb712a705c54133d37a3bd14d57b8b9424bb78b37d307984dc026dca823bf40ecebfa1843b7dffecc99ca47f1da90873801d4c8e0f3b5948cdc36e0bd773af9102800f8d7f9a7041797b21ae8fa4ea517c5abe2ee11ced97a28d528f2fb3a7812e963d0500ab071e7193ece48756607933ebb433767d422349ed606c1d27a0a1f53c351493a903e0af24948b4f6a68b806a5c4d351ae52107eaff75a3608da886a859b0d11cf3efc3861100565149bfab732a95ecdf590de287cc74d8f2785bbbc1c08c7bd16bcfa0a79164714fb430dd8e9794f16b1a73765e4a7562b8e23e9202055d1e4cf589cdc26a8725e2c463cc5db22efa4c8b70b8ea17960025f059524b7f03593fac16982e179ba182f8a29c150885c89b02ad2e423f1e93c1d169f9b0a0de81e80079ddea4b99c6e0b596b229a6e103a4fa32bdd7e1beadcf5696354a5dd143f68fe881feef97c96ff044c3c0d2a7cd2c97ea938c30b817d99288e21ece9f462e3f6b9a1c2f5881a84dbf5cc0c7419b9037498d194d457fd50559d5be998cecf71de6a6ad3bfe98bf83ee379f28e9df1ac49d430cd54057a9143a449b6a69795296255f089f3e85a3d3c8ac9be58c45a854d13627236d35bfb66c97ad7ab5929c9f567224091d5a83a870ac56648b330aa03ed44cc62242b4e9445b5a5f925ba3093cc6ffa3b359ccfa009a86c11443db6e00506ca3f7ed073c54350626d93e809a621c70e5c432077fee4966e380ec7dec6e64d619f97011e39579897392781b77824108440696f69e9c1c0d60338eb89d5bd656371bcfb2a10856e58156930c2a26dc58a40c89ff38acebd2ca1b050243ef85369490ac56193c39332c8431df2ece549f57c87a41bc8f7fbf2af8cdeb2f598a2209202dc624b2ed0e5c86be21fdb43606bf8cfd4e9443ece1227d8eb380b3007c42afce8b30285b6dfcd95c38d5c24642266c6c5d25e85dc1ccd795d8d94b0ece4108ca766c3e5f38ed617ff5f088cd5ad1a9f3b8a489f3bac5124043d5d70ba3c79b9ec76482665b13765f602770c89dbac41a843d1f6f304e1bf982d6a48bb423c1cafbab3037d990635cd90be743ba1f7605a73a41507d9b2b284cdf00c11fa4dd7e0c509ec051340e6605baf127f17bc2a61c5901fc3ab6f9c318043d150281222c3b8292d484313b760969ba8c5f6659f22872305ee4bfe49517cc4903ba7d07b6411bcf2c97c943d36f94fe6e0423a9ffc5d26e3b135594c0de699786c1ec66c51949ea4e094b8572487e3153148ca1953b480556347daf4590dd53718bb1e336259f13531ded729b008cf86f7bf5c57ec9afc99f5700988ffe7b30a56e4b5b7dcac3c9eb0025c02d2dfcf516af4b40c0f582b32ab1e86409a88f0fc347105522a4bc9ff713ae46e92ed18f6d51b08e4b45400a01553e35a730860afb89f70e6af6b70871694adc2a155c5e27500b6a854aefb17ca2033c5b50ef4336966878c2779600f30eeabb1409d4fc9767fe049ebb8b0b1d4b33f618fae8f4a6de4c3c5f55068ecb8ad3b40ff0b76b481201fbd7cbb8610ba52a0e3b81d4c4b97013153019fd4fe2254fc490967a7dad9cd40e428a882dbaf60f626bb1d712c0d6ec16c075b5b38ab4dbd44009f0c30350e3e804bde8ddb5497c3094adc9d02eac555268ff2e43fb5ca18fc006d83abdac87feb7b52012fce02a172d6a57f03a8a0e4cc9e035ca8e1852d9147a69498203a5a44d3a9268b207eb6170402556c2efe04e68ad58f142737d602093f4e59e2a5e4d4c0b1a0b065daf32cfd5f5e4292ab18ba5b52c5a334b0f9d002baab0f118aabea719a386bec511d72cb41e35431e42e407919715559b7bfd3abe5ac2a1ff4cc5f42ac698b926242b11c2f4d860ea56f0b32c636e1e6e9db320ba2f9a7284804bacc60f2c1456ce43a4624616b5287f6f3f70caceb7148a37209b1a02123147858c37f5617fb4b0705d444bd69146db50b2d9bac278ad7f94a0392b8be01a28622ada4ff824948b02180e1807b998c49de4c52de7c0bdac238706c439cd36ca7509c38de99c7cea577e7d0c01dc6ffda8b4e44ca8f579b39491b9198a31d2745d141339fdba74d1d39a9290238c58c41b4cbdcf00c22d3a2ebb67b29f86632e5d74d3ecf28e99688e44eb8a7282e738189920663c277e2ba8ca7e0bf5a6861890ad3252748faf19a497fd2b1e11ee01367033221f883295abc0112023fb10c0542fa54266204222ca551e4150a54bb165f0850175acc479edd5141d13340369473f933f92224cb998b4468b40867701d6340ca9b1375c6a5d0a045cf05dc852a1ea2b14454902eab35fe7d185867fc02e213d7960789c581e8006732d0f420cdb56603c39d75df152b1e5b784746b0de57d3425c054a051e922450007def6d19be66b4d575a48e370a0b134ee22796ab6138f391911f76b0639d807d04e119e139c9b516aa4e0e72b5836f2a07c83eedd7ab8c57dfa0b7815e9ed2a5b8b510edc86e8ae1051604e0ce852dfa63c627b857d69e677e41b110f660599fec28493c30d66b30dce38a928d26e003b2ba348e6b1bcf16fab1ad0756ccb7b75fd8da8e03d413c91f4907e431c4310b334585a19c611f5054b8fdbc47ba1ea4047c584019cc8360fa777416546277ddedd9d2489b78365452000c9e696030caf6fa40f87a87d542ed560c7e15e11d1e5d1c7f04897b06ca7daa7feabb052678c355ad5fe6c62c3ce9ae0696c4abef480fe289440eda1589985637a4c9f5a98df3707daba49ec9b2b2580178dd83083723f3078ca5a08bbd7c90b1b5889c7ea378e6c98e74d4df0dd3fc33236e044e8efcbbcdef6e8a90a28e960e5729880b434235dbf24c03bce9244e2b3e32ce9ea3ba00bc93c9c5d71dd338c7d6a9fd80989480f92edd2d09240fd3b669398e15317d5e22d6f24bf8bbd08449d3b1611a7a5f7fa0ee70416ae3c8b1a3d1707e5e05a066472572a178ee632dc3e70514681ca6304afcb850f5de1779e0370e78b6a15e4f17c60e7e47dc5ee6e41c7109a36315dda3ec0ce3af98f2f5728f90ea5bc840baf13599a06fc61a684501e08ac99473eab8f9f591e7bcd91c08e2ea930e2f7741acdec8c1088f277282abad291ebfaa6ba624cb1bfb43dd963b79dc5fc0c405093428d043ab2b99d833a13456335833613123d8dd9ef4ee8bf0898213e1f4885cdea16c25affbc8e1ad29b8d60cdaecd100a4f8b44c4033afdbdbb9ecc9dcad82fc9df4996d146f2ce8a233a5623bf4cd9692e519a2ff73bcd4c398641e5c67f61ffce69c86d138ea7091107ad3a394a231d0e4361ddda3dd616a25a008da454127860fea540fed063b510d26a22c49ab4e7e6c0051216b86472df661cab28aaec3f681a53d6df1a488faa63d8a64b311e2d2bcd534b077d0aadb67a5e2311731df6e5870f2193403a9195e4a9181a4c5189c0d3836aa4dde5ccaa505925fa64ed2e3b9e33685090ddb0d1cd3b1a6bd3529eaedefbc4a13053a7ab3a1db4880a81275cf661707d43b185ec486f1589df930ebe494b462b8d1ea4e662e7ce10f27c430715ecf6837136b174b41953c266f8d11f67178c3f2f2178170ba5dff6b8ab0497bdd460fd8d4202aa9c1166b98b507c8bdcb269ca6b3a271bbd21ab218208b69ff4eaea83bba2c51d40623302060d60113184cb9122941c48c796e10267388042dd2073e8d5d20726b6618fa6711002ac0e1257ca573d4b7d1a174b6c4e8889ed669654aa20799a904c32c82994dee159edc97073ea995b9c5b687fdae4377d94ce003e2e44c6f1e34fa3b482560d454bf5499e1539c6ad60ec4dbc7afb5bc6668c60b34a8b3f9d358bec79fe894a2c842ecf80a5e64f71e244ea16735225ee1eb2b0afee1e6c797b2e99d72b937d72c3f6bee8994b587820442af9dbed632b86f2c7dbc5349e5abae726499dd274e8bbd2aa143010e454798b5a27357227e5639a2bd365d38ca5d2d0bdd57aaf1602328308c0e5e796d62d2cddd12344d426c4034e9a877b5a9ad2a568ee20699ceb057b7d1afaf971e0c689419c19c7dd71f4aa81aa3f6e15739dfaed464faf20417c83973a2059596593af57430e998c3f749cc7558d79329ae57d0f488a2ad19ee7879339e73187f76005779318cdd826289e51faf0ca202959235a07ac92a79953814a5a41365529647236d46def5f3048bb99f3e9a850ed643d07bf7b999a335d862b9074d9c67a89c413319ee5e65d3316ff27729bd8fede47b1fc669cf896bcaadac0ff542b5e5543c48c11cf11cd044c4056dc581ac928498c08de544630890ab461029db1684cd1d9dcbcd36f5edc9feafd4857563f6968a78c88285cff730d97a760b89fcc9239561765743bf31bcfb60231dff8758b537c62bc77d13395f5f27fe091fd5d683f1fa1f7f090c32664ac388637347a4e96b540aa98af83b5bd5ddbca4605628a6eb9bb972c441c37b2c2b44491b033ff8d34c3d76d26e5e3fd8638f5b5b69f999c10d80a6081d8473c72af586f82ea1af9e1b047b04c0a2fa0f3c184678b5f9fa789c522fc42cc8e8314f357ad69446a517e905e2bc113061399542d4cfd06d20f85591fda0c52aea83e3c048fb9fc43a61996ba8814583b1db4881e5955cceef6ded3f5aa7b30636a122959f1fc0f3fcf41484a12fd85bfd6a51a90ac02e4a7bbc989fd7d2b39811c2b327c161bb9d281a4e79bafa0070bdf2a52314434d720f07c0e6ec907d90a464f35664100c5f6948c5608c86d592b3f7545bf57f8205d44a06fbc26e3250e8a88249f2cf92b1c4353529e53fb7c9c02c2251fd372438a35960a1ad4203d23dfa1601fc193f17817982eaa9c8a198c21b12de36af3365d8705bc61644f0a82e8d42db2ab7bf59679050cd01e2b69012cdbdd963250092ff5b5baec38a66f0abab003b3f10970b32983ed7f62b09fe96c1fde522e3e1e2fe7c9877b98d638a37e1593b05a81eaeb13bd95159cd348a299202d3d6ea2011231c4f6eabb2e814d3fc7314ba38010cd9b9612121a32e04556332a4f18946e133a34b82de52e0e5b2c43b63ea9ed9baa1ee1d49d1899a7d453b7694bc650ad591050698ef9b903ad3c21562b31ec78d80c7b72aff6c8ca475bad3f662ec8bb49e238f546b09620657cb0b83a90c25516f755200a22cf630f09eaf51118b6bed3a9b39e7de314a0a42ccc3846d9fa58924bf616af33f3010179db4db0a0850c0fade203cbf487504708120f3bc19f588f49a0873b9038556d6c40d17e0249637267d4bdea58297e82dfca43c95d705a33d05a03f6c069a19ad0b7488fff41150774e09f162894b1e35d11459cb65ef105f5a6cfd54b629c606eaa3557986955646f42edb95950c871c38f99075ada022c3826e636d8402b14a1ff5d5710c64b2eb90bdea30216489ec13850faa79360f470ca4a9e9e9e55d0ebfdc5344feb569ff0f8d161a4241b78dc17946661440fc0b39de73885ec573b8e88afc3585d0e6b21caddf233313947776ee24460d2e38c3766d6604d663441c7b84ade8bb16d97ea7c093aa21708124eb0e713a83f0003c1493da2b704f10b55930715c834ac7e5523ee2b0221161502e4c2fe5d411ffad4fcc7239b2de8bf0895b7f0bb6208c692fc0307fedbf50a700f385978cdc34192b784f75990f07d87a87ecc56641d3d7d6c1d43438222b246bd33de6938014e116ed3c37352eeb68ddfe5fb35726cece783b7dcdf208420973011ec45d48de6c7cbcbe6b2468376bbb57e38f0306ff05560d7224e929e53313e2b4220f709c03f7b56495d215b2c8284df57d7556279eaba4e6bcdabe36638b88e52f6752d31a5b0683a69a9443924d3dc4881f19280297760422306d336b427105bf6b7600fe71fc965f8e41a454cb1bd7a66c8af181f49b288b2dc807bd4f67abd498537dbed406d12ff2827b160c340b709572ea79b90058b90cd62b205a8ad9e3a645572cf6900f8b23aa1ac748a6fede3a55c3dc3a7885006c14dc172465338789a5b6201de08527f21d49f945ab02f5d6770cbc4123ab8659d03d1aa2f5557adb5063fd48b7a784a655dbe9654983e3b6e5903292235253e87b4adad586da45a666f3446633160e8bc1223207efa9d796749e5f5078ed47235e18dbd5bfd6a3f3112914c88df3421e4f855bffc861cbe28eb84b64a72c6e8c987d032c868f97cfa757c53b5a1863a1e77923f6a5725e15813e1c26b883c33ffe69bb5c0413aac69970aaeb046d9c33d9c2cc953ff1736c71b985f0ec4e51bab18819900bd383168e4e016aed78dcba33d7dadc3803f49da5fe5f9dc43be71ff4fffc0d3bdc2acf676d9e0dac2d841af47cbaad93d39826775b24903360f4869271fac00179f00a5e78b62f1e987a8288e783ef192981b3e9ab72ca8b4d694781c90cacf5f6cf6dd4399391e0e91be527e454deeab46a6720372e504a5438405293a6a38d812c8db04dea4c3ed7c9feb3b043d738359af0c476e66aa0b49dc6151dcf9901695892ee7932a329b3a00da5ed9c27329a660464b61673c5ddee34d9d19c31a053eb9866ae74aa891d4f19059dad633ee54e679ecc380fe0572d9fc444ddf5a488bb3a21e206cefb27abc84afd11a1af33454bb1a65f65b9121775ad26445cfb0266db05efe8ab5a4456d45f113a941fd37a91778f25b66a115951de8f549135d2afbfa2742ad53a755cdd3b288512934144710da19f2d6195eebcec5fe2d643cc0dd052ec778577dc12647602905d0f42fcb86a2e99596b01c9ff84fe68ed2a32a267e7d0e336b3c5547c6e8bae34a080aedcb87b48481970277522710cc6cf067565e015e6281f8ab03a000b1d7d765453569e7ec4b3decc2cf440f0d8143c0ac8746b427ec569225e2efa47ba4c4d70f08f86b0eb689a018f50c0cb002b19976d673a6105f29e6a871f4ed68719a0b06d17cd003323aeb3e258070bbb2c2631165f32a55d485680ef628f487bf9775c3515d28741959f2326fdbc142bcd63e01c2bea93c95d826a4fd3b86dc2a2854de90b82d7d911138fd268961990f8620a3cc0b91def2063adf71a57effbc0628e3f1a02b4fc031a15439d5720da55491b79926f2389b533c1fd20fcc1ef1f6f6a3bc18bc2b7e2a88ea7ddab8d179a4e0bc528c7ed3f49e223d01c720a06f4e0601743ef22f00a9b8b9e9bf5fdaf71cf3621e2fda98d8db42692109184480aadec4d3b0d0a030a3d09db85c705053f40ab552d5add5e58b5e8638c727b656fb32cb31886613ec86654c11d3a7238c15707ed821755510b5b58222019a44910213148d5b16303b6526aa12e4c071e62a22a08eac2ae6b59d675b921780737a2071ec48db846401cee37a30a7e3b74e40803be4dac0e4b0ade1ea449901f1ac452d7216776a854ffa81889850b0759bccee33c3c3600448e4e0f1f0f88332a39e9d5321e6668685010e53c51db417bfad7828f3d7a1f660f336e08deceb343067e8079367cb87dfc0c401ce08d2a6bb5ab05f6f00e2fe0ed3cee3c1a659f46ceeca8bf038574331292d5a1a97d5881d8c08ebfae60e5978396df6981dd566badb4b666a7f56bad96a472661415e251d2e4001fcebc74fbd0678d5d60db0554d1574dd731f584f4777c0a9c8ba22b642004294688e0c066a3e094220730581db8800942a210c2164bc881cd7cd56b32c0980294221c218307704918f49578420ba818fae981176e80a74f010bdd7c3c5f257164626d3094c408647c81083398b28019851115b21d237864c093021d3041892f2c1224219448620b45b800e4082d34a1896a330425a420230b2f4c91c40f22806b9ad8088d225250cc0ea630020308585c21841dc8a9c4e8093d100105222c514410a23ca1252fa695427c67065d7841050da288a24919300a125690042a18e1083c50016c82919e7a2e91832a822c29c20a80aaa0f1006f2c75fc8fa1440880a20740389882470a44409924464dec08e109527480b485d091932c4809a1f01a55c020090a238e906408db1344fc8881118c785c5004859110a78412538c300328a6e0059b099483304419c28824e02d502fdcc5a80830c6a8a2e80b19c84c244637389180083710429213455f24513a12a409523431042c1c3901b180484646e0a049a3c44058c51447301ada021584f800ce27c0c02b2c8001137a008627907084166cdc095f80938e47661e79cc2e00464932c5e3f9aa39e79c79621886e57dd98a69b6995e9c7129671139889ca0042046acc0670a2e53d044d5009110275770c109901d401803a3f429a20c2024a608e10924a429a713437a6ab884086490f102214da430d192c0d6a170d16b9044c8ce39a7f4f8843fa4331029c2c8085114394892c391244198508c5ad082a41f4f924c6133e79c93feb0534619546bb5e65b537b2b775ae07dad5a75b5764e0e9abe655d697951c6d25e6a9aa67da5b91ad69aa6e57ddf7e763fefe20ab50561e05b6fabad37969553377b6aeb6a2be7e4a0e9dcd15616fe03e314785f2d639452e660444f2d2faadc934bb0f474fc3969740e46a4a7cc53fe487c19e13db51474a65e3babb5ae5bd46646cab9d64346555053e9f9535e49857466c9481d5a96f5515b795b20d33910aa9775426f58f442c31f3a0f39e33d12e6b25c70fff19140b4a9d97fae80dd01523b00d63841a1e845f54a10924a3c6a3bcc8ff325102f40c899fbf079f490bef21e39c3fd4683d7171dad7fe1a25d40fb2ca340cb7e086be3b000d7dfcf6da28663da687988157036d9471bcb6657f623fa7a2798e0da0d74c26fe0117841a31da33734fa23dabed584ae37f0c8c4b28a4654bdc01af14d4978b962bd22b3518605b5a2f2dbd693672a7598dbb49b6197ad169d32ba862ca8960d4a988802df9151fb9172daf9cd39bf156dab9530b406d83fce39e79c73cef96173cea972e79c53f3e1eb377d90d3082d51864a69a34c8b86cfa2517a45459f74fd288499337e35e992ce30ac399d6db77ed066bb3ad359774db75a9d79d969255bb9a8cb92b9a45a3669021ddf55d1af286ac210bdafff4d065f36853830f6359122913d863df63b3614c7f6d967bf6343e31713b58fdacca9ed707df62eb7d48dcca1b52fdac4cfb52d03436a24e9d1d326d40a8a94047188af520371c874751dbf93a64428ad0258c2501cdb73d947f65bb638b0bff9da8752c2d4cf3e1c6fa80fb508a0244cfd9a18e347ed95549f071cba7e8e14a2020b5dabd7fad6a35194d9340a5d12659c48d78f46b9b94295336e13b5f8d8c7a3c495b9b823619708531f6ad408d6a83f0553a31a1dea3fc07efd586bad50e08d424519ff4a932e26493e40d8850fd1a3dbfb850f59ce06688c138fc0853d2a066583a523078e08488d923334312ff5ab6268f66e4c92e4317fc7a6befc1e72c6caa999776c2a8d84916feb5bd8d7ebb3eb6df6e1032561e4dbeca3623969db4a1ffbadd2b25ea0fef538acc7b20f2572b53935330f11a091d5925f6450e301135db18f353af0f080289361157d80adc17226c64a6d7d506b2f04fe16563cec082405df358c2a29fe9ec47efd1e6acd38f26df62d1c7af621d1fd798880bfc51885fa9fee953e0f71c67940a403081d289068874cb43b8ca2dde114ed16859452ba77349cfed877f9bbbbbbbbdbcc0fea0b2567a08dbbbb13f1e02e644d01221a25a1888ebf8128e3d473ec8880b59faa00fdf840c8199b7948189e1daf040eebe9536a71d0afd987caa271c638334d8d4a661d38a22a7a5098c828b9e80127c906d416f7848bc23921e29ce8f835181361224c8489b0f778902950b0e67a200e36e8a844c729583908f8947e98084322f8a15e1543532361a20dd14ca25b582d039f079853b0eacf8b2aab084c731818feb6f0b72082d108f6035c7f7b111410f7d15a74be73b9e62659a555d7e77024ecd19becac6c72c8196883a493a6f80ada64a820540e09131f368137f85f1f8d15e9116045023ac10e8016dd53e64061a6fef4219d94520a9d420a27842eddddbd06f8fe11ca4077a7451821ca1690c2a710c24ab394104a082194902271083fbe0e19edcdd3f3e2862361dfd4475f44aa8be78bcb8bb6830b8c96e516ed6eb008faa8f23929a594bab8b8b4a490fede175389db5a043bc968d0b07e40c3f24c83062d82068d30dc6294cdcecaa606c6c8196803dfbef778b6d862248bb403db6bedc516bb0f8f0bd911dfd626ac3d82fc9263332ee43072d3ce840b4d8138d86091808f68f9ae24de5a6b0c0294e4a746b969ffbc4854c921178a2af93fc011cb1dfe4407617dfd0c4b61d8f52e14671cc86ab55aa5004994398a32ae6151511327aa82de6e44cb2a044516f476232896c826db91986085c42e77776fb1b97e3a7638c43d98ce24ecf82863200cbff405de2e5a7e7c69030cb7c0fe4cd0d04adf82c18cf22bcdd80aac13bee0524e1fe2262dabb49351f9135ec9db7b72deeea371debed292cb199555194e9100b4e141bad07cc1a6dd89641ff2f2b11fe06de3f32067dcc6628c423dca7b7c7c8583581af5a8574d9900b4e1c1eac1337a49424519152ccb9252cad8c5a66191110b2e2f4e3748aab5d6fab45ab5d65a43532bb5284d0db56107101bc82167fce35719d0d0cc22085515bc8e39ddfd63626a135ac62fd0b7e69c73ce39e79c735a3448524a39259d4645344834280150c68d84b210434353435363adada1c9818626871a8bd6c838a38cb14687a026f2639431c6ce89964f307181de34d488da84eb6ebebf5dad562b221bf8f3936f4d97ff8f6958a4e4887f229e0e0b9717518842053c0146388e524a979694284b7a0c8ca1a11155f12546c779a76e94be7ba879ec54966f4adc77f8a1e6517aab7baaf1e0bae5f1b7f16b7906108cb3ced4dd73dff25dc669f92ce3a01eeb4c8d9ffbf69675a66ec930aa56fea21e3ecbb7a73ebdd47cf0c71fb51b549e51b5929f3e3efd8caa13f703f783f7d76f14e88bfb1ba9afff61e3bf3bf47663eaeb87cd3df6f23e81be9ede90fafa817bcc436f79d3d791fae2328c2a53de3bfacaa6a7afddc4eb33fdfd1965b2bf3f0308d691fab14fc7afced4d75f7f8282533eb8c6ef1a3f9771b2cfa91be7f2c674e6e4478b283a8b97fb70b2b79fe1ec6d86bfcddf166541a4337ab96ff3d0317ce9619c7179ee61de5673df7d0cdf7d97af46de4f7beedb3a73fb84708d7f6a3751e377cd07bfc16ff3ce1ee36f73ed068c1ae7ed1afff6dcd7fdfd36bee1becb35125f0744bd3dbee1328e2aeda3de324ef6be6fd6993acbf621d6fb7968b8d220a86594514692d691dafd59e2152383b1c8c9942b1c8df10386298e34050c45c4386121458c26623891018b21620c89f193ed9ed342ed736fc1153c5f089a9204638522538ca600614ba22c41d250c992230d5fd350c9122734a6a1922543daff5e71a4e3d7acbe8949138804938c20893699152dcb85a2300625928210b09514aa20052126cbe39020212209509b1a446dec0cf0ae3f7588c524aa5c47cb89152dcb6b104de1c7f2e8e4e88991133f621265e21339438d66060484a34209236bc8d693a8aa515ca6acb642341059e163f4e4c85a46d623909c99d39a12046feb48d7faf547ce54210953bfd6215d2d0df0b69ee86aa3244519d7f52d295146fa1075e6f1faf69494de502d9f5a4ba2cae8aa41570d8a3316a90a5523d5a832e1a95654a2baa41ed5261549d7bfacb4a6205919f5f844996d39d1d59af223c8f535517e6f21b92ca378643571620db182a28c47216b8828ca58d9837cde2361ead3cf5712a6befc7a4495670bc84754d520fb83b705f403a4eb5b53ac31563c40fea3d3c3475459d1b2fc74748590e5114af1954e0f1fbef21e0f92044e39c03ed4d65154d5abfe542151258095154c4eb0bdf636fbfb36d755b61a8eecaff5648a84c12c865d14080a3cd865ada3fa634db19ed8cffaeca36f1dd59f2aa4aee4cc131c3974ec00824794b126406db2ec3f12a6d6006f6b8aae5f83a24cac45ac2951e6437d0fe10cfdb495fd66d19665c1d8f9d9a79fa5a121ac613defaf346026e3872d9723072242752daa02125d6bd01279c484deb742618a0a85217abb11bd9da84e9bed47babee5b10645997d85a2ccc6435166a388a2cca65189441947a2ebe4a206e9ea84ded588ae4ff4ae4874a51165ac9733d88b32b226bd5c410522afbb5aeedca6a155615711158e22adf32d5823d6449f336f99b1c7e8494c41ca941f5e98a2d2e489177ac2f83140149684b102e309bc02921396fc0b4d4111fd695854858f2eaa62a5676858f4041dc46fe778454c889c9ae0a8b7d4b04828ca0c45990da77816f49646741548da0944b0a88a226e44bb0504bc235074a4a8827ac7dc23aaa2cf0ff07d158b4495c7217f5a05bced8f280333122a50624695fb4f18e1d476c8d1399e85ce0208e35fc4d10c9ae00089e78912494598a2fda1ff8e2be7297101ef281485a28cbff3643d7ac819771e2ef0bb7f248a4630628441052886a46461c4c63f0eb924aa3ec8ac3ca2e16f298f68f98e23e59c7332c0e55641998970e6c7497390d1af96e6c30e139cd0f3ad76038f58f4c2681050000da15f3eec34a1e9cff9180e9dd68dd43bd427181984386817c20c83f08a31c61863b52884f3c6183f461c638c114208e1c583a3210d8b9c1044ef28342c3a32d29e0b0ae2603f566b82c1a3e54b01d232eb442d0294de3d56ab95d641694e6fd9d674106fe9d7f7086bc8f9d4da76574df39e195bedbf2402389c4c2115461d91f9670e218410ee441741065f32c8c575b7aca5d58a2eaf3d8c114acf7e1767509b4632ea6cd28756a31f35fb52578c888bcbb2be94056cd58f0a7d36ca9ff7699138636de45b4bf0a63ff40fea13656aa6446890387333158a30f2239d026f2a44cb97f2a9100a0413a9eb9510c4610ed1546794a8920131222e3c0b2e5e54fd8c4513638611c6ca515e2d09de5747a9b3222d8fa0b3e812c6b97553cf0f2641c2125a7e97766d075c049c29c86e0cc0546537bb164c76b36b05905debd9c5b0ecd69b5deb5ed9bdd9e5bc7b4fd9f556502c2d2997186498e1554aa7d27732e5192f340020002a1801a80ce0d4021a356e8669f75e0dcb08d0d580ef25edbd64ccbdf716600bfa394208d0bcf792f65ed200f7de7b001b6e9099a14100ca6506f012064b8a139043a6dd0ddb34ed33ed33edde7b334c010bc05606201a32b2b8e7af1b033055168c7d202a14a5ccacbbb43af36aa03ff7a98f84f1bf19b795bad3d53e20d4a33e94e5bed01e9788e1db6cfbec2abe401986e2a41b5d41d5be34948190f638c0d236cb6fc74002c850e3bab368778738c08ffac8a1a1164088030d335e66d0607d4d693bd496cbb67c18fe545916999233aa5c80b755c500e32200ec198d1aa81e02d400dfc402bca765b9bde467cdd076b09606eb69b00a6080d25050124484ae9b0491212122490c0959446810f7d9037434a854d3064c030ccc0def107adda32e693d2c73edfd4d8fa042802600e6000670a5ce3e4cc811414072624266b44d81d09f9e20f603bade06b932f5a1b916fa45c08556e390801cee8c32530177c6997917601ff718434b1a7e0077b7da67254441294f53e02ddffaebaaa1ed50ab0d393650ab6b20c55a0a70c5a3447d8d0e51228a446752f0ff0f674870af7d2be0c17dc67d7448fbf6d115ed7101de7488001a6a56ae41040d5d3f1a145552b3a1d2f333ebca4f00dafae82aaa78224ca445aa35b306a36d6203ee8c3374d563eac17bea550d00a0e16506016ad018808b00605431345b64ee369442ef6610426a512b83d942092184d9cbb7b2ec294d54cdc73e9c659845b139a7b4209c561733fa08a44871e284091324488a14f1b0884c102961624843254c04e94d7b34644288864a98f8019530c1020d06ed1cf01d2811e2c22f0d95082169ff0c31907d59f0f02ce9f1c94e4de400432542474a849068a844a888de584321221a2a1112a2370a2a1102a23b0d9508ad34b083e3673f17291a914f2615473ea9389241815a4ad08c2c6a842d09d5124222044b4510153db890a8f8c154f450b1caa648b2f7092f68560bed7248170ad6650a27d025fe780a235308e9798325780aa0e90d7553f828513279484e25309c6e142631b4b0b2228514cc0a2c58152d33359d40828b13445ca47022459321298c2612ff24ed08568619845e0a20297e1c4910297cf0112cbeb904ff642bc5cac73fa908342c41b20070a02338d0d7920b05ff6b89ff25ba4b84ec12a0253ffe544459a282954a141b8515d9915b2908e0b6a0c0c85cf2de1303305214c5129686455104691a378a9faa6151143e51ac8a9a20a5094eacd09106b5a000c3a22630d1f606584b820035c45c24d15d6690c1bf50c912562cb1446ba86409249a06b86aa8648925682ff24174da0dee4da6c718e3c79f79ae33f73e53c9f479bff26dd3c33f7d4df4bc3c0308f6bcdf56de7a93e9bdcf4c5f777ad3c7e510b83e3dd4dc7738a70c821b18550ed0dd6732e5d336692bdd4f2fe3687fca38db7b6ffa725a1e6f2aded6e2e5cda2a2d2751876b1ee7a8f39eff1eddee33a8c42a150ddcdb0ca0aa77cd0a6ef32cefdebb7a7dacdeddebfbbdd87734da7bc77f4e9b96f7b9ad3de875d565654defb524983ef7dd6ab985efbd327846bd347a9dd98feca51bbf111d6c4fab0269aaecf4c1f67e21e7fde9732a9dd94fef450b381dffb9a78faa27683df33696fb9376937a5879a8deeb11755db47ed06e7ed61c6b95bcb399ebef9fab0c63ea82f154d8e378339b5e543cf79a3cab77a78146128dd47bda945c5e36e74afbdf65dd63254b9570577af6dcf759a0f1f9abbf77ab7c5e4954ca652a9542a85e1c68d66e4559b833d2b6329c6d1e6e4783972bca431566ef6a83769dfd23df75da70931833e75dff6f4b66ddeab647fea3e8ff3b82ec7f3768ec6bf7376c9cb4e9ef61e67ef659cec4f19477bcefb1693c6725126d3bdf7de9595959531bc1cdde1d307a36adb1e7fea831106a74e9fcaf1ac673d4efbed793acb16432fc77b0d8accd69a6515e3fa3ab2a714f3505747ce8b8e9c97242f064bf69786fa96bfdea7b62fa93cf7759ebddeca772adf6d2ffac6e94d2f9ac31ce63087734a25df9cb289c3bff2ed1246bd09a3be266e9853791d3f70df618cd218a74ebfe59dba61fad2f65ddea953be3175af75e8ee4b18a5827a9c7150de8bc6df7d7bcb392f1a951f7eea7a5ad6726f966559d7651c0b0b0b8b18a65cfaf68b0ebdfde97bcd752b5c5475dbd35cd7a1f2c69a8b2a957cfa3a1595bcbddffe74ca1bfef659ef7d3be74597baaef4ddb75f7457eaba979c1768a4e3e5b914f8f444991ff9b3167a63539fab650690bc4b90a4e98fa8a27fc34704487ac3cfa13e35f09952527915963fbdb7f2a8fbdcdffbb5acc8b7705e386fcb638dfb7b7fbbdfe5adfb966f670f9fe5b5fb752c5f13b96ebb29ed46f61da7e59b0cea122469fc3b6369c9338060ae63f92ee3b0bc9671569ecbc12c5b5e79f8286f45c574f23c8c4d2693e93ec7992e572a954a18638cf114ee76df0c2098fae8fb92fae8ebbaa80ff6437db8a01224511f2d84531f0d67eca0fc4261c6d6aa63c1e8d0e849615c1786a5321694cb8bf65c96734da69ccab4d49b52998e49c7a4a3a393ca726e2af5a68cc3927353378cebbaaeebbaaecb54baae7b2f8851378c7bdfaa55e7bab5668f83bdfd0cd30122e7621e8f48b92e0c1362869c5bd2c9b9d6eae8e4dc9c8b619e94ebbaaeebbaaeabbbaeebf6b83dee05312a6e4b98d3663a1fd6ec23fa88bee4bfb8ae95c74c8f951ef55ef6db67dfe9f1c76d9bbdde7d2e6f104c2d440c5a65fbecf4d929f7b0a355baef5ee354ddc32ffd29fbb492963dde3efbac1e76b416b710ece82e8b6006ad651fdb679df6eded4f5bd6895a2bbd96714a7fca382dafb3b3ac1375297adb53cfc34c8f993013866d19866d260cc3328cdb56b0bc827d2bd8866116e330ec8b2ddf6b7bff6dbbb278356d07045173d7f559d4da7bbf7ddbee1e1a9f5ea5fb934ed43b0452fbd29bb6df6054e1fbdad6f13e10d4d2975ec3d189ba94b74ea4d7953f4dd37efbbac79f94f8abf6dc1735bc5abe20b63e745cf3e2ad6a7758f49dfedb8b5994da5cef07210ca53554fae0933254ea532b7f9fc5d465dc77faedc3f67ad85e4fe5b5102dfad43dc7fdf6edd7dbb66da5dcc38e3ea97cdbb356be6471bffd3c7db7637bec71de6fac39ef374a73dee3bc756817821d5dca2298417b7987c6df3db73d6ee5bb6f777fe2569ecb382b5fca382ddea743bbac43f54a865195a2269614eab2b0a0507f3d6afb6c436d1df71b8aebb62dcbb26cdbb66ddb92b877cd71ded77d7b87eeb62def19f436830c32c410838b4b2ad5d2c2c28242adaca8a89c4e9e6732954a5d8731c76d9ba6dd9b6518765d2b2bf9f42a1f84354e1587964ffda62b8f4ae56de9ed59bee583b0064bde96c6af821fa2f29e1abfcaaf7c10d650c97beaed4fdb432873facdf4dde33f7d10aa70def7bdaf91de07bffbac37717fbfc471dcc6715cf712e3a8314777ccf79ac0f52d6bbef53e55f2b109337bd8d1a9eb71ecd7bff28c20f86ba67307145e7827d4a31eaebc0acbb794fe66a5cff4dd874ba567313dce1b04580b91d2dbe3b7b41bf74bdc97beeb3a2ef7b0a3b71955a5d2730f5f2b7d25ed6b62e9bb9fa6bf5ffa360f5db2ba94533dec68ee31fe1b821d9d6511cca0b9ecb9ecb9e732f730aab2cc43dfbf5fda5c497b539e0104dfac7d29e3689f651c962f7d4de43e9da94b8fb50ca30af51dcbc36f5129b1a04e4fbf94f78a8acae9f4d79f4ea5ef6ee9bb53e9769de7795ed7755dd779517ad7a552097f9b87c6a9c75df7a9ee6b64a7336fa9542a955ceb61a7542a99ba4f728f83ff3e87ff726feabe4696bea8bb120f50a74a8fd33dfe52f7f8bb1754dc8a9051ec6fdeaeb5d7d1967edc7eded0cf7efb6cd06c7d76e50d84b6f2b60fbd46da4fcb9b8a3dfdb60eac98d740a17dcbde5c6fbdfd6c5837960deb6bcd57ca2fe74e1b4439a9fcc5e23dea575a3ec5fd771fc6374acf85c0f5dd57775deae65410a6bfdc5baf01ffed3ebbdfcdb6e57b737fbbbf71dc67dfbe0fbf07efb7af891cf7dd4f8efb9692e6ded27ee81e5b7d736afbd2f6f731ce965341645ffa1be8356c1f1a3ff41a4a0f75097f2997be9bcfc6f6a6cfdca44b1fde972b95f2cf9f19c7fb2de3b43cf7f7cb29e59cab3d96eff2ceb9bae5e1a756b8161695a7cfe58d5a59c158454585fb8c53e99e2b75cfa9e0ef4adc63ee743a9d388ee3382e4af7aebbc7f8fd31eeba52de3bba84bfada3b737e18751c66afc97c3cf71dae36fe7dc52d775dd77df7623bb2e6fd7f7b94f6aa9204c8fffc6e31ebff7953ec3df8df7f84d9f0dcf87e66ef0df377d36f0dffbdcd7c8ee8b9abb917afb2e1544f7dcdf58af41fb52865ec3f6b4f6dc77537aeebbcf46294fed86b3c17dced5c9b95a08972c1127a189268086454e82aeae155ef9eb471f6a3778e819319b61a48f7d33dee0a1e9ffe6a1377c9d19774cc288df1314fcaefde0da8968614591164b8ab458d12c33b5cc3002eb48bd43b0a3bd5ff9959657f9d3c328837a96edf1f6697f3fce1f2769fc28a42c8ef43b6148cb97ccba50bb493da73df7967603ffb6a5b47c53fafb3572fbba4f7dbbf4f07b68f96cfbba871a045cb7ecedbb7c7ffea03dfeeddb3cf4f696f6c37daefb6d752a7b1c0fbf658611784f7d3dfced5927c2eeb7f571676f6bd5fe62bf719f66651da92d69bf1940b0456dec1d1c99e39575a29611c7df7a7f2b3b114e84d710b34789c0f934fad1f3ca2e86fd9e3f742561a88c3147d7341b2d8ffd8c32116af973b51d629677c89329d3be9647a99c32eda53fe68fc92098fc1a29b50f877b1468872eee31ba6871ebc870837b19f28eba7e4dc4b8edd9b18c539f7b8f31efa9ad1d1ff1a55bdb7a9d88e38f021d65c534f9da14a2b785b98bf6567d0ccb3a5147cc8461926292629262d284ed8824a9a492def847abf21ba328175fd6540c6f3df6317266c70ccff2bff2fde6fd70e31f6ff8cc209e80f8528bdbc2be45e33e669cf82dd8ef90333132c0d4f65fdea8cf1bcf90b78df267c0a426f3f68b3dfd1819b11c7f0619f2f650aee85096cc487ff1db11c3b781084454d1a7c1d1bd86aad96889eff2ddf72ffb96fdf4694665bce58d3ae58dcaa6acc2b85a0dbbbbd78c631f7b4c034fc0d6e2131db3f5d99cf723d55cc6d1be3e761dc3b0fa37e3d7f2761d9abadefafa3172263ffd1d7226d3f0fb376ac66ffcf23464f779b1764696d85b53fb6fbf2392ae9952ad65cea74e1a60cffdc57ecb3b2269aa412d5b3f7d260de60fa534b8e64903afc1028a21ba78e1b3021e9e231da361121e20ad02297a001a26598d51445f2ddffe18fa060d930c814427192288566998840551f4104374a6fd2dd3c3aff4598e28e37f2feedee6ed5b27db341f306d35cdc696f98f2893bdb64306b7cff4b619eb1d1f36fb1cf6678dcc70b04781b6305aeb2bef513a119e80f99e6dcbdd9099cb3bfa0fedd6e619dfddce8c131f7bfb7b636deb8e0f9bed1348bbebcf0fc73e0ab47f5bea4cdfcc3f47f6d27df4ae20907afb8dec37f673e6ed3f7ee66ccbbeb1ac13f59d3fb91bfb59276aee072cafe4e939b5f2d9cd7b8e1e4f807f9637eaeb6fffc1e1f863bf4dfffad3ce8dcadbe69a66c33ecebcda8dab6dde21c88c609fafc48f067bcff6d9d7cf5fa57b4fdb608ea82a619f3dd45ca9e45c16afcdee6f1db975647673767fb0ef335f99f843e9b7bcfd2ae514f6f5a5d49bce6f6885be8f3ff84dedb3341bfe389bf654bb71b57bdedadfcf01f5bd3fe6b45165fd45a36d7622bc869a4d5e4a02194c228d2849565668f8fe148891165a95569f6444618161e9f7322715be0a3a1225592541631a265909dd180906920ed058a96f4a43941841a382c48bcb10179ce817edfef3f3dc2f85995d7bc04e1c223ba258d2e840bf3f72815546121b057224a445189098d283841d1c8001451631c002a80c2d9471048b0800e8e945193e47cc2a56a4dcc9419422325c10831f3d46d0b0c20632c84110b4e0c207504e49562d9036a0e49c11f533cba9e939a7f5734e9fbf21910e93baa0f0d4f3ed0af4d4735af95128949c73ce395153cacfc2145047f727bb8e9ca88c239491442cc34796b1d227287aa50aed6fa3ccb61389f67721181685a188de330c3e08c38ff69f561860a0fde31864488999232109489a204a6243e64b70260881fd6d80dd8fc0fe35f1004564382123c9d46e81223288148d31e48117bd5f74ce8bb61e42683469626c882a4fa2e54f89836bf93134d2860d16b62f5f25636812f65a998c27b4941adac8bc735e5482a6cdfc5ebc0bbd511b0003132434d10594257ed86c4c86133b4308030a9194231b78a10c9b18f7179161e412d128a4f86858e4e489068086455d78a233cefac79e8eecc421842fe7cb2f0251e54db4bbb720015722d83d7b4f54455507056fef89ef59929e5f10aec7d0442d48d2f283442e08f22bb2e91255546841f0ccfcf8a82e20e98d62c0b421c2c4581476c11e51106e1788e88d8a712ca74603bcaf17b22c3ef63c8b18a5e3e3484a26047f61e43a22a39148c7a7eeee4816e98b95467262a70502c9fa4a070909297efc1e7012390f3dd2f10638c59bc4ef21672a0f9ffddc47ca734a02f6e9e3f08c83fe957da022b4d102cb1c8da2929a23511c8236d717b809c441628191e88ddd8acb0a8c610ec27510ae21846f05ce71a88937b9a2c03b0e0d4523f7c832c2c5062ef8e8eda23703682c9c9158081e41a2263ac4958533b325083885233e91292b629a836ac3231a1c3439c8277a5649407ac79e950e7826d045c248e0285115e31379a4059e3eb046fc0904d688b36725616cec99ab5554f548604e2025643c34fe38016fabad2cb08f8d3e3d4ff48e3e7bc620fef02331f02452d9215dc6840289fcdd8118c35afb1a69d6f8d8c3f6555de06dad9cd16102d9e87064ca49f3b613665b0159467ddf028fdeafed8482840b0ffb512f2817f804e5c512bd510c701b506f04a689892a322812d425c27846d91d83a7ac42c80b9f28146485de5128caec4905912833a1cc3a69401869608d1885a26a8809ded86202ef19142467a20b204c7c204247c41d044de98135bc8984b1c080b7b5771e3531647601a4b70fd911c8ca28c41dc144e0101797fb2faa181b682c9c37c4af41f81a03ef08a4fdc765883506de9e878a4213891c62a2e81828b0940576270e91600e3a4c9183765554c51d9c3b82770e3a7e0e51c65f87eb1a1d7880da65b641aef08e89345fb58037caa5674a895264fe106f631fbe44afb5d65aa5aceed6d5f1116f88d35a62b5ca788678f872834fbc21bef504bcb145045b72c671ecd18291deb167f25024f0c69007ac112d4b7a93267a634742dafe64634fdad848da58591e05e13d7926cfecb9d3674a995a0832c4dbd09fdf8d37dc109fca00474f5aad563088443894a009c5f1750c0ade9785076f5f3db9281726b0bf2a8c152a496f5fe17843fcd412ccc2838780b7af2e30f0f6955c451b646e035f7a38841042772825cd3a5115df471030f49f500ae6e24774271aba43cbb22c8b52f7d5d7c387ce1578bb13294e9ec499bf9e4483cc6d2c20e0ed3dd77b5cefc8c3446fe7891fa15c32f05ee97d75ca1f3e0c2c44f204486f2b7f88b7991f43c38b3adc10bf43c2db2279c24f848140380825f443110636e009441186264639e4250b46ac8f7e437c8d08a6b1b122c4dc608b25a72618ba86455878a2f7e4f1957c2b20d9f8074519acbbc18228aab21a99f98d3d473fa20c34eac290fc21512625dfb5cc3a8b4c276af9d033cee60cfd07997170e2fbfc01a73e813dbb0c62c6811f1ffbba6df6e2ae9ca3a361cec6c18c131f4eec3deb443dbfe258ef635e7b5f9b7ad2cffef4b73ea8376d738e8e8e3820c03e1048bde5940f9e2375b4b24c67c6813f29b5f12fab6184b15f23af9ba85d52faedf83fb1a53dc4524a9c6196adae91395f23e917dfbff8d8b7737434ccb9f6e55b1cf870c2169a73e0dfc8746ae69b88d20ea4454c8acc55afcb068665ecedced1393456afab65aeddc8dee68d73723c398357592db9f5423d86b57c0bcbab6ca6e7def4f833d3b7f2f8ebe2e9bb8f01a49fa8342c990a7b542aa2110000007315000020100c068442c1602cc9f2505b3b14000f83a4446c4e17cad3248751146690210610630001068088080d098d13eac871f150e686a9fea7693e33334e5009271787088b97944e100407fdb28fdf80ded04e6f11e16140c112b8e099433fc3eb6842c0bc53ff8686da4752ffd0bc09cdaf00d96636ef14d0897f738e1d671235ac48a2acf415f9062e281e49008719e296097e40c97ff7e8e473078e139af76a0d744a95496b734e960fe1f86266ad960bb2fc48495ae1cfc4441a598fd1833a76029cf7af93cce7b75edb97456392b16d7a7faa390bc8f414e544e43b1c1782ccb2e37d5d5ba876362f2de9b80d249cc583d0235bbf02d37a1fa71b4803000d47a34973fca5dbc074cea515d75ac7889912e04d924e0efd2a478066db2851bb664951a1dd62f8af85a266110b4a2775ec7db5e0b3de9e5cb159bbe7b128584fe856637b6121739547128809bf027260958a13c63d3a7910eb3d257c9abc8550c669e3e62d09f78356b425675e57280c743cf4b86105c0f8f9c76520dcd728a8f630eee663eaae10f7e68f1fa6303fd1142184885d177b0d5651cb5cb4d228f7f8585d976f31b437ec302c5a5b0664768197e6e2941767b2a28a8cd4556d849d6181ccbbc5ee387660f1e048a6838a50f3839a8c27a8215b02a420e6b4d6b97215540c830d0a26edfd7e2b83442bcf75f9089cb94852d1e3dd89f9661941cee4810a269449d84251a51458ce494dc84aa706c23ce2b2a4e19bce7df1cb9904ad466a37fc3675c157d22d680af063596946b20682b5ee9a4a5a7e71248443392c7f49b0017c7b0c77816b3461522094d5293d22ea0e948f03eae45ef268a8acdb3572f46e8acf019aa3088564c2bc8247c495f4c83b9303eb7452c1cb8eaf914f4a9f3597755ecc9395981899f224c3852b63ede1b1f76add895f3454ac7e25e6dce7c982857088d206ed886217b3e82ba105d660f749cc643fea5e40385b2c3484d407fd21e724d028682bc8b92764824cb518240dbc08f980cc718c8c40f6caec409b31e2afd6fdbca53b8779092ef3b67099435384ec9932de4222c0dbdae4e34c8280b189b30291fe310fadcb31205d3061e46bbdb098699a7169754a76dbfacdee7b330f9dc8e04cc286b302c941372794742f083bf3fdc29e7634dcc014fb731e5a93212e8ee5e9e79f278da5c01bad00ff960b5860b36cf888835631b4d184e506eeff6bfe9e8e49280e1f438a4aee2d9b6de6a9c2034e0fe98e086ee1b3fc7708bb82aa6c0e188d89ac004bdaf52a56807848e500e6775b3ed50a2ce1a1789bc0be27ad28b9c28b922a04d4a4ea1bffc4f6ce3c8f10b77342ac3f6c410040b77f26b133a91a2d46b3b4853e06b1ead4186d224f50fe874faf7c6c1e70f81a80d09c365d00aafae091a2174486a5b86cc19dde6a577820c7f67d5da1682528640e6defbb90d8bb64eb6dea8970e236bb9c9531156a050a735b0dd10c9971de648f4b78e8c2ea4a495e415cee0f1c63260d6efcb94fc2ea18cfa6f3f32553b4f3289894564220bf30fe6c5d74108e81d8d9f41040287ba558b0df339d3ddd635b219f3438621010c5ff700b8068abd7a01cafe2efbbd89c626c95daeba9c419c75380e24b512b89d124386fc6b412409e8dd7b45e178df2f47b5504b29c59ad76feedb9a0d27a8a8366acd2854185d4c75d2637c22d8988f2f05124044e8b8376692a97dd3501027211b173bb521dade650423a419063c6bb50925c280a15b9ac55ec1d5e6acc325ad2e32d3cc4d74e5f5e6a8f60ed905ffbd8d6d610eeb24b5ceea74c12d1a0414b07f28c7176f83661d34f7f8a1279324942bb93fab5509be1c472e06074ed0b41dc2c82fb74d9a04d36da14cd88791343e42e372077a64895019b9aa03d826fc328adb12a61abc255a1fef3d7f847de5b91f85d5f93402379fcf107c3da18e086f0452992e41b265e5d9784e4acbb33b13baec0d200a59ca2d550fbb93092c25c1263a2136681482c61bc60c8df6d9adb89da733147d08ede91a6c6a1df259c0c73678520938cdd68928eae6761dfec50ff7a0016b978df53b7e6bda82e8bc66deb88db89d06efd535e2146ab09861d2f9a0cfc554071630bda1430333f4fbb6f75d2c7c585a60641851510278d3fe57f279f6018043f5050b3134ec7d1e828f5357b34dfb1e6fa0384fee67e869ba53df9fee7a209c7888a60953e46ffa2bc70af91bdda3efa7b5a202e8788304f699b73518a9278a54e62bf6e414d7ac005528a26535b2c3bd78a29083377d2f62e9b27f92f25f4a8c445d66900e43ccb99164524a6eaef81d60aa6f7d8a946abb3e6f6fc0f69c681601690e754e09d611f1833fbfa67503e3cc34e548323c242f0de5fbb4a7aead10c7af006f01088dd8b268ba81f53f14e8a4f3f3d1ff89eed00c8a4c0ce7449854c121fdab15c898c6540819c8eea64778c7955ebc99774958509d9f80177a9c304da6deb34cd72afc789e9d421265f5864466815c540a1f510c5c21d040ab87f89329dc6fc0666457a51c4191252a23996a1467adb4d78d0e5f8cba24da38b9d73e1bbd2157433a4bef5d9a8cfa822c41154b4d24e6c9bbdd9dc940006ddbf993e4e2323b3b392189a957478c8bef475266e78fa2e7686607b9b7ba73350a9a43e757af47cd0137a4ff98cf716a577a55c5444f0d425a3a429eda4b8c4a43ded8d52366afd86b372fd1456c70b298353d23277cbc31ec3894f74dc26d568e96cd9ceb0d1b799a805fbccd79b73f91105625c0b5145e40f6711883c23e6f009cf3a55430a57fcda4a74bd91d1e1be6f9f727f103f4d70d552c18d271fcfcf5eaf54014812332776a75bedaf51a65fc3c923394c19c25b85fdbb8d00d01c36d873dc27d49ec7c14d38fea4739ac07c8e5bc645838391600c0f306ecd823b1f9a1a0b06d61a9e391843f45e225dc2c3138ff5e84f151ffef40b45cf1f0e9dfd24fd9897f614213083a1f8b13c89d233a982ca976ea9078a3c9888c4d7ea1a8a23f0e9c1cf0010cc33eb014868059972e6b9e9c9f39df470ff4366654e32a20aa41a230ab232a3e040584c52c0725eb79a4a7a203733c2588441e49c078061ee15086d8e6ae58f9e8271e10dd92b34203a8f23f7ec3b68718fe90ca4c287bed855460a37d6b4db049ada51774f898a571935313d991bc24c6ba0649e96ef97ecea9c6e815167467dccbde4556863645fb7cc5f9d95fdef42f611ae0de69081304d6128ada6ca4fd59fc40d666522e71fdfce9374a56e29b666567d4a8565c30920d64b2f22adf962bae2b900f9833bd61d0f9c486dde3d888907c0ac17c41b81eff42046975a96ab750578f222c605e9b4d8a462109ecedef3fa9ae0ff2638eea8885737fdf51c6ded8defd2b9a834e9f994759cb48568a6bf631701440969896074d2bad26f07bdb89c551f340b77dce27d814ebd3fa31bd8c856144ff062f55dd3bdfa42673860a6d9870d5f156efa533761e88261d9e467ac92e222c623dea5abfeea60b69d26343ff114185b568259d5c4e7078d21df9b583b0cb4ad42a838000ccf814a2094465703346972e2b3088c020b04436927e65608efe664781ae636e5ec9881c4f0c999894b78199f7c9ee13fc85a1bee016afaa662f2f77012c7153d714b5fd02a969100ba4a9bc84435dd955011c7823b1aa6621944f75407f8259c9c4c735e586810ef4b8b6cdef53df6718cbf28267c04825ea3bf6a354ba5046d6ee720ac96247a5a48655b28beeb9ef5b939730deffbfdae016c5eb2c2527b4b49e2886c8905aaec2678f829e63de41d63d559a651dd0c335d76c3d241497c5084d90b22dce744ce7764357b8b8cfbbc4f18aa4d2742c5127a1acdce772c812eb8edaa437c6e1d32148a2184746098981761bdfc7b121432e11bd9bbd1488c683c5ce7ffe95ff9ea14f417f197cc87fbfbe3c6444b613b08d5dfee99b7041483ee9d27c298771554ac37e04ccfe750b51145dab07e2dba538fba47e50a974813d834bac0943cf4b54b6304a38ee8af3485c533fa26d463857e82204772a21a75b2ae3d4257880693033166ff7035dc69fe920cf3dfd217acbc3569d15f6259f588202c9a07b637711510abf0a83e9258410f849693fee97c494f7af736ca3811aa1175055be366b7184cae314108765be8e67f98d99390e43ff1d0a2074f7bf1db0123d754b2a57344a5fe4d61385e937b2949d018fe6befd533fe67cbab45e2b85d5a78b30a014a8ffbaf3cc83c4f1658074642c4d54b1600560a6598a1dafb6e11512b206ceb5375c6f2efd06181372fb1b81ded872d1156b722141169e4eeab22ecd990492d7d8a0324429d8979936a55f84f3c46f998234b336cfe8e3580f1932bba6721538b0e97becdbb4aafd596f69c576dde53d278649698c82ad8f68fd3531a4d6c18a8d3e532a0dc6d971d32ef9936d3a3b0c92dfbc9b86dee51cc53fcd89078e945595dcca3909d67db549b8f06b584fea1f68c0e4d2ac71879f2bc46311cb53c72e985993e5c75e7097cd588e3b8afb65c4b3298f9a1d550c47d199181a16638494a6857338cd92e3671acbbe6e972947dd16f2488d8ae1546eaf935baafea5d620e68d6342ad08803d7b1f3dd166157bad184872e49371e54078a6f46883b8be7641113103c5a440056acd8746f8905c5a0493ab8d70305f7d825590738c9abb537b5784d25f2ce380fd8354ce5f3c54651e748da55c6d4e206d12a987ebe9f5f6f1acb1c585ee70cc0313fa6b1a3bb76857a52d3da7350b159850dd51838bcaa4adcc4307074bec4acb214079a1b5bad9713c78a057891cb554aea2b9f2809d0aa6462d7a74bbdf2283e8781422e7fb8825b24243e803afbd23301ad2132d05bf2f25bf2e95bb0adc3938e0706e47aea6faab575c3dd733a1fda900638e81f2fb002c6a2814bab7a70ec1053050f85c8b352081b5a895e61a91e0abe2e5f40b79eca18c5620ce8cc4ea7ef9644e35ddbd86b4de1b3b8b2f6f74990664eafaa0a59ff484cbd8feae871fc732e0e4a58fe98a2f2b399b6330ac7d66c80b03e042329d30f7c14e6eb33d4a0eb19f734291ef3519190bdbb2bb79d0b44c3c8390efcec7f3cab057877450787da341a537dd363e53ea6d753560a5e8052ac1c260a653ac140f0b8a120fffd007b6ea19da7205402790e29e254f972747d373e0f175570e457a17e7b66225f99e660aeb2a057ca787718727c8d8d33929a78169a52944e31d4612d1281f1152658d9333ab1b3146e814d0489ac35b5ef92030e5e0c8095770f0a1f4ce62664d178516bb06ad18e123f2e9a3dbc823568963f205bd1a7cef475083d05cc309bcd605b559858646ee5505736d5295369f2c64338b161dde9aa6f0185fd09a00cd64141508422d0f20358008c0d4f1c84d86a62d47d1d22e0d150e1b43180655151bfd71b8360f10d38bac4b8914f8ed5cf80c3f1ae0631377a0a43b0d9d245c03d41e891e092d5cc97a971125f0c276ed436b688607b1e05cc1bfb7e497b622b13edd03ff159f4045e16f7dc46bf3e2e82ae49dd7ebbcb35736666c681814081314ac5bf55434e4c2b92d6cab31be728f7013fa24fa0aa429e35f53426453661a7cf6229b10d6bfc27b2d1fd0a4c01215d6f561a1e196859637f301d98c0d1252a469fbbfbae36c2700c031eabded0f800e78968530151eb32f4802b00c8182ba5f75b20d3813b4d32ea18dbec466af45f293d6792783dbb180a87b843acf22885acf1b68d3ab5c1c0717a8e8903ef68cd74a6b80e9788c71b1c4477a4ac2100050992854955d2babeeadac95cdc7a13d58a7a2429293f3bf3d03909e234430ceb2463dbb2f7712bd851835bd30de7768ee483949bdd2ed370dae3872abc8b643ad9746d63d263bf51492ed763d9a713f6ee2425d86494834f50361387a0c47e7d77a36212b2a6238164045ac64ec66e64ca0cd0129561a25ca4980da08cb2586f0c190c35a79972145b4a308dd25b09502229e3ac5d725774f45d42e4e497f4c97cf36984273e9965bf8af261723d7003cd753a698e8161483c8623d936c6332a93178036343857a67ed3d8bd373e0e9d1d159a7a9a14cfcd8a0936030d497fb9a07ab719e74096582199c2467637b724fce86506eb7a17bae6dcf1d1f255dd59b7ce69f93ff561ac2f1df524a62a61d5d93a0290350a357580f7ab2366d015fb3554c853885c3143406d8ac6f408152ec212214967a6063434066a5ed089574f4c7505f28513265f99a030459941c11e7a5508c1aae1080879dc1c9e09b78357d40e55ef81dae60ca26a868801bc4bd36744d48f18b5900f1033fc57ce8263942d9f33fd33e1a3eb1f5e4b0a6a985ce6ac372bd7b63b22a0854cdab186f0906e1241214d58169be9bf9f542097b3c0bc4d1e2439fadc219c8bd40bc7e9bea157d23546b90fd81eec185dea04ab04e1d8c83a935c28b2f327076ecb14d9b9732760579e4d8d57db454511f56a6be08ad322a4f3213a4fcc11120709077874186639265a79b57fb84af588132b004d97fa1b0eb5680fcf1db41321e37e3bd3e9110e28b6d1ad295f79e06a267a24ee44a34087695398f57f0ce934ecd5906d3363c0b714b8e0e3870391693eff15da02cc63852ff97d89837524c01b461baf0c711c84965b301405c1941cf7815fc6d90ef2cb349856c6a0ad429ff58ad03fb0d35dc79842b1fcf064cce0cf3d0355e70a313cc18746625eea02b41bcae7132356b9755efd5a30e3bc6600c7850e46b589d992bfb76e7fc5b0069c1597150bed3812aac153bc2f32faf4bbbd9e070a944978260c0aa49cac016151ced08530aceebd27221fb3bb3ec2aef3a0de6c5bfc6ac6f71bcc34e674508f7b10540467582572952fdf2c0d356d9835fec6cb6bcd88b0940045592aa5946a924ba84e51d226d3ec763821dec1546d1c57152cd6c294d942d14e8f3c0beaa32d63764f443e8bf14ac7894c29f07f1ee86c06da2fdc294af56c4be2ef9ce441a99705e3a9c8bba6c970d340a671b519a2a9f3d21af8f9ed88651f938629761816fb5655d305ad99281b7106831feba88509acb84ce1974f54c615c76664ff7651f9605c92e0ab108b3aa4018c0f26c151a48a2aa5b594585cc071202dc20514590440a9bd29ba46bf5043c4b93d10e910f4812261bc92c7ed93d6cec43009226e96711052c54683f4f4aa556c10b5ea212f4bf8c9cd7612ca0f2a0c130ea048c6f32bbdf1ee5be829bad2c232bec1ba5b30bdcb48c1c604c7833fb968eecd6e9117611b223295665c7bbb38b80e363dc373a39a9613e8f634e2ae00e504b752faca4a06f71ec8a6cae2f2376c7788dbda9136986b47a6647067e742d7170f04d5cdfc3bed3953ede741e7971d11352f274ca4486567394dbd0baa152cce9cf587e4632c2dd34ce459e240a3ecff05b31184316a716664f8fe535e1c2be3b97e892bc87c5f2139fd81249666a2af1185b0be87b317a8298a545cd2a86dd7a4d6902b0c5805ebcae481d6a4b78615fff9939e96e2962562f605ba29692013badff842caded01054cc7f1143193c40d58784cee9b10cf31d94bf45a3289d67f7fe8b85cd1c129e892b8656040fe0d191c19a97ef4ede1f8d5655ba0408632bef3314a98a3ce4a114dca4a2a421e0ece7aed72b0b8d4e1b76ec1e3d1451d802e54b5d1e61018bbc75505dc4e162d21df1f60462aa42b9857b507aa168187e3ae27611ef652e9dc2a64c7d7e744c006c4165f9c9029dd54cba0d9a4e0b8f0ed9539873b89338fac5c3f1a3b3539287d9995f22ac7a65daed8cb75db5229afe6a76284b6462ebf3a0fdae851ffebdb38aa60b02b2e4b914272e672beb57320b9cfb66333e9ae5a608f0e4262507ae1fe8e16c8fba39cf2e4f3c100f7207b5fa170e140acb542928f11d2192805d71464d68b1b71529d9e4d3ae859e75f2e9fdd208285d211d8ff4fada898daf41bfb2a954580fa0530dd4620fa3ae16fb210f29ec07bdd69794b2811f35196d08b9294bc011e524c83659096bdc04ad15e2b7314cbb6ed40acaa648e997eff01c439d72c36c0a60834c2ccecc9414fd1c183f57a4f4e4584253061d145221c402d29416bc8021ee029c0da354cca5fd31c682fd188c8b52e0aab10bcebad8435a2c32ef2529f2ff6e2c4b2a37538f2fe88ccafdfee105445e960dee0f8c542a6c66b385cb0d758df734766ace3269fcf72190a26cc699b2d2ad8bf4ff0133ed40097209177e068995f017200477dbe60a35c5c65935df92a3b50a2f9411c59029399976fb325f24493786cdd711947a9a14a4732bf434d6fb25be55af2a6a2b0f460d2a9f13740cc86f8125c0a064ca38b70cb16f1be7e8ad1d08cb7c8758099c923e12dc5ba83402d51587c3ee313c1c5e3d73c05db1907177416bce5cead83020938ca564ec00935cf90f96ce1b8ff2a953cbdb5b40b31936590358a24c4a59d67d8aa42d487a8923631168026624dc5453271afce45a32342182915adbc2be5504bbc8a8bb07c923f9e0749cdbc792b885388c0497bc7004ed5c41b511f3049ddf89bcc10a3e5c5d27e0247f03b3b6324bca6726d5c2975c0249025860632955fccb2612908f642e02ee313b636f0fbe6ddb275cf04cd6fd5a33b3e23b33297faf344ae1d5c0f8b11f236e55c2ac2c3d2b691c564c149b2f4b11a6b3111706871b32a48550383091c3106ab5ae6305857933e4cf09174e719de7e90de62d7f58928d04d4f1808ce1dce0ef84682568f943d113f923298da2102279f5a8ac883806e3e0d7bd9360bc1eea2d883ee8628847118d9569170ad641a1102c87ec5b9de10c5ac72ab313fff50c202819f8a078ef7e3072847fb9ffa028f1416ab991bd8291acae55b58aed103812219fbac9c09fac22501127abf0fa59ea0ab00a8587252af484ad09855631ec2c4a3b2215df789446f0b1f3dfb8da08574f50c212db26fcd48e93232c0a9ddbeb79c3026399930a3e0aa414f0002c9ab622b5c5cb00475ee17768c8fa0abdd2fc441e32eee417c6e9f8260dfb0f5ec875a6cfb3731cafc4465325c3d9f50ff0f72a2bab903e27b66ac3df0c09987e12abd131572dccceb0eacfcf781221aa32f78fc0650bfab2d998feafd779d710c92d4c94085efc9c76a8d737c82405f97cea1c46da3c420b4a61e4dac00a4fd22374aa6eee27b852bb7328c214443bbe2667e2b7756efc0ce790127d038c5987e7c77b28aa8cbdf21bc7f1344371aaabe51e54da576b547e0f355f3e6f40658f836f01d9e10875edf4797e4286450df093d0266fa5287a1f59dcc3db24a41b91b1ff59aefca73e680059488ec73a83402a2a10a87cdb454bff893dd107a45303bd8af6942f6ab88ab50ae4be8466b552fa445a05d4681a724a5001a0d8086515f3d94049ee637955ef1a0e198773654857f5d16fbc9faf6fcb48221945dd4623df425709ead17fba2b52b82ee7751ed918d334abf9bad590c227d4fa6b94d908fd0a924a669c62908946c49fdeca11c2b765d65d5112915e8187d8454932f43ccb84dfffa2128d043ac0fe575c13139a009cc5e240a6d7a1f8de9b21fb731405d2b130e3aabd55bb5f85a7988c635d390daef37fe0b9369f5e96c1768681df28622c4d79190bca33a3839a6003fd88c57a39799d3b463b6f278f339b83a4bf97acceebd7efc9ee09ca2b83d70e719de72dccbefdc684f89dca0b1dfdd3269c5d77a449f89660ccc769aa8b19656e9fbca53a390c20c18db917a6182336e84ebade50118417f3941408a093f0a7e240dd06445fd2de290ed1903710d55fdd68a30467a40d219e78cf2a02a09f8a8e06ca6601886151ebf59cadd16883b9ac5618d2c68ccf992f8bcb8b968fe0fff6eeb15a79c10c7d7850bfe3ac733421ecfffe0ae035553ab469dcee1438aa798ea70011d16fac1721a14c71dca4000e95611030107ff014a8b744e61343af8429b13bcc3a3050e9dfb97e52fb5a851aa88627ee51c05cfc9e713fb9ad92d5d8657585f5afa6e3e684451dd687f8549f535aee829b62a4ed5d303e46a0aab7523271b1607d706f8a3f33bfadfaadf7b4a8f71e64cffd9ef32d51a346650449f6e7b354e7cef3d3fc83c119b3147b000467d66fadae49d6047d90186e8ed8a287c65953576d7167bbfea6c671cb0c2fd0e220fadd95b504121caaad60767135f0ea083eea4a45798bb66458006cde9d4c9af94d2bd494976bab816dae19e2ffd72655471c6b29ec4595ee214b8978e47d436b90a27ab7628a6a1eee0aaeca1323e5ff904765df666cf47f60383ef54499fd9e33c1a75edf9b90294b6e78f7cba0a7610d4fb93dc37b807c6da7f9cfe5ff0cd8cdae2e7a5b510ffe5e03d7ac565a673928ff6d1be45a847e33eebe039f8364464cc807ec7bdfa4c8fcf2f84eb057f826a74991f3e7b542a3024fb6347e6696cf1943c9e5511fc3b6c97b07a4b62f51a391cbef5eece325b5458d5536a1b872a94d2718803c9eccc397d3fc4aa9f99fc3ded2cd1dedf81f8cec6dc831102be29ed35e9d03a5b6dfb85169c18459547782e069d7077c57d383bd3fee9c10464d35524b614b9e5215379e48a83e25b585c207fd001ccc670aeecedc476aabeddd119f37122cd0073cd04ff15b61ef4f6d5ca7de0af7e2e5defc2e4c3655eac3505707a32c3c07126a146c82f73b6c533025d244c3647a872aacb03247d0182f13fa02fd452f00c522a0c9786241e0bf6d453ecd1c268d2d3fc82f236471404128bff07fdc9cb4db5e338a471d454f825c804c11ba03041758922f576a47e9ba24338b49cd5f8b56d92abf434b0d91d607b9aca51cd8e839fce34c9d4795022cf7e3b699d0742af69f0c38713a2d9e5dd6ac98a97d87d867ca0f2a85f3fa562369c2043f991fbe9b927c24ab4dfc99e85128758e59fedbe26bf42cef2d66314082093aa9410355be33f408fc6ca17173ca41fb26f64e1afb615ed840e838da28a5e55010cb5a963af231017d42a7d4725ddfec736ae7a3a62a9aa80ce6f14013a1e6cf36f1fa79fa1492d98473585c2b06b1fda747b224932e950ac450cf9c6a89b23f641c72096030e67b64447d8981c612581f17e32f3a71f281f7ff89e4773455ca9cd0c0e73936738fdfc9690f26266f4a6386ff02f6e2700d5d4e0731dec8c500050d7a6a74508e6cfe1f6ebf36b0dfa6687d0aa57ac65093371c83e2da51a44e289ce570dbc8a55ce598f13a31942a8877b9657cb4c3481552fa00fe19dbc11b2522c6cbf224840c58ae828d5a0fd9a7ea49cc200a0c59305b2867ef4592172a9189a4c263916ba8cb15823d762d77578fe137207de7859d92999a88c9afbceffeeddd75dcf5030367b072bd11b497f50ae2d367493280e1dd3666860c4cee9f6a7b0838b0faa9d28f64546df8b93f8c8ecf86f322fc494d5697a2d395706dc984336480983d4f23523d3c369189aa85928ecc08100f0963b0e44a47e2cb7af47cafe517717d7de672b0af7cfc2aca1ef17782189850a7a5eff171931280bf226f085a0f940682e8a3d6eb75134fd39e3c4cb4229b154473bdd09a4e19e000632e3a1a54e839a7048dc2073cf45382af95dddc630ce821bdf2a3d61489009611e26b0e04c0d83d1326ca5251f3331c9e6dfbea15985596a4062445deea46ca616aa42d8d92013e07eab7d2ea5375496fe2d22778ffc7d537946528b781b27cf9a90e93b2fdaac56d66e23f6fd8bd38482a6d9071c7f8a275fa79805da091b816d2037fea2fbc441074a816d3a0cadc5f6b33e4741c51334c6ddbaef90c54f6d6f5a0162ae74d882fbd44f29a974746e63a9dc93b8147455d66de0183531e95866721e6648e4b386a5de4a2f8ed53fe41653eaeaf27649d25e2fd05a9f91c0e836771e3f376d8744aaa1b0474b18aa8961191d3677b2a2f12d5ce34bb89ed27d9386dcf94ed29b6a66c9eb435adfd043bd3ed26b29b6c739abdd336a6d89eb269c2f6747b13ed4eb163a32c0f572c6b46426048882eee966da72c753cf1139f73160a2690633c0c75ba409d71e31342e04b25659eb621d37d62ca8308f496cc60646c87db9bc3817db4d01450bff85fc02412f0ce2d372df261cdead4b7a0e9b319661a9c2fd33e7ef7d3e0b255732d5f4b985262c4910b816013dae5224e2801f4132b9985540c2228700f0e6766ccc9089f5c12ae3d8bd22321965326d6e0f391b661e1e2164f8d94fa6ed3aa216c8c7c3061a645b75ea84a63c54fff03f43fa33714f950eb6bbe88422b93192bd503f19d3d566b892bb14a6705a1a9c85756d9a9175cbc303170b35e21e5da3f6149935e51c5c9301113d32c4dc35097e576578a3e522b067319128fe394860c046a9a1de3409330f699fefb9795ca82bc9e5dd5b45329afda12115d7185283f15f035ff8435a9e4183113ebb61f371bccceb9480d8b63c809f33d751d4b93e8cc0daced8215800a2836834fbea2d5a65a097a9c3b959cb8dc5b92b156c8e5375adb395e0c4fe3b69f4581903cb3115c447b2a3ac0976ed8b779c0251d8d999c82fb46c32f71c27b4ae666231cb95d526b7c7d1c9a24b7f6ccb3edfb4efc111a6d68aefaf2b3a0c29fe15004369c45cbffda60a21d0dbcf6b3bea146f5e1ce20201cbb25732a269928e69105f2bd696ad260600a5a14eb40463f152b9df84d00f45669542d997e00932af8b02883c914b3806244d5759953001a5cc242e5872be4bce1d1a76d0efb8a7096e9704f042e002784e306a4766fe8bfd65f6b1d00a1b46d0ff7b51e61acaf6a0539124fd705d14559ceae91cc88749f6d1b60aa0bbd9ed4613fdeb522d47802388f370af0d11dabb32b7e1ddf8be2c6b61c70f2f6fb215e3a9b2b153ff56ef16654812f3c3af21d420b7e66fade03ec5e726573993b7ebd0adff91500a4ed339eccabbe564bc2ef3e1706b5e5504b32a9dab276ac10fc5629a5d571acca7745ab2b89613ae746000005c63253348a32d42b2f86a5f67b43d8b95b84d77e071eef27ebb9c36ab6357cfb99ad6bda8a409fdc233a4409676a25e88acbba16e403811d8130b18d88f32456897084c59cf2578f557f13afa6fc0bcc21264de2a4befe6d3826472f8a37f222c22cfa021a62d193b3421615a62a1d34340e68d8fbc48591225e1438d4fef27e09840e59e9d4370d1a5aa0222706becddf34421e795b05dd444470336345f19777cca4b677712317230d18b891a38f90c3e06270119fffd6327be4b171f20261bc9d1d3938109b30e03ee762e19ddb4af9e21046dd6dff33d641343312c610d7b9c6c455a22c9e0feb447425832b37f005268bd3e910f051cc91ae302bc5e9a5d365d7fd15ef1a2716ee7cf024a800591a6bf68af87f5ae09d39f067ced5d96bdb33f81a4b2cf2ece1e244c6bb8441faa94d37a14c39ed4e3015a8aef39cdd75067fa66b4ed3b54eaa1792e477f867f888d157899111b6ecd29496501b18aeff5162ddfd2be9b0ec1d08202340efa2c5a80b581668f1d1af92881e56bf7bd7dab10bfaa846421da83015c6c4a3c0e016c9c1f9d4aeeab9e4dc1d37d6a9302ce0efb86ac51a03adf2615bebdaed0338ccafd01d6f27db2436a40954e7c17ebb803315900b38b674fafaf57a5f4a69e03b040c32a8b0ea6c18c1e47404784c4908c42694b502cb85a1f74d03ba3c34f7b1eee6eae65c1000f551b28597da46b20e5ff80468b8b06eaf72dfac905940dcc79486df72b5efd30b3210de6d380e7793cf7ac1e120bebc314fe98f2990e0a441ca0ec2d0d0f6818a8a4ab0ee6efb1b869b451792a029d0738807a5032a03e4dd8fbf00a5b0fece46b1fa5c2cc2d6eabbb802f2dab7001ce7bf10fe20f90900b5da9b8c829d63f394c92c2861c7632ebe1fe5a90f00846b707e4ee9b74c59f320f98449a827e724f040a61fd2dc683bbf7075e92271e37c96ecb2a89a65fe221619ee05b3f9bb909ca8655d265fd34919f0938a96beaf0e281a4bbb35dbaec3cacef77a0cecfdb836b4094eb257b994da77357242dd26e26c77298ff7ee4432d0e8058e3c2904a96b00778417d4ab1f52a4e3f0d749f9eb9f99c34c1f82061ad5cd5e09fc9c35cf16eb362b32fc217462d8a70e5a9af2fe2700d72f7d351658c8a3bff4fe4745feabdb4b3394a49fb134ff6e98866edbcaa2870aca7fe0b5f93929cbfde53f31fd41df780ca035c316862703c0ccae4bcb4c7b43dc4a8183aaa4af8f4f218e597fba4a98b8ddfda6a3d652ee75022c96b820c7ef28dc516d43d5cb362370df254a5f0cc0bf29adb58c2b3f87aa7292d05f7cd61ba2f22ba014f42eb9577eed50e4a17f619f7e8b925b7f941de82d469b9bf73c89d6d14e0449141262dee2c98fdeaffdcf040de8c09ab35edf75b22de2e22afb36de8a6910bd396eefd75fe0a3534e415789def25780a202fd45ffb1272275a4c5b7a33ede3c8859a48e44181982bbb4322fc61302d7bf77630832f7e1d7e20fcb45438972760be23d8384b381d8e2ac82a63410e37205204520614023018867e2535e7fd44dfbe6958a42a0fb0ed3b6f11ca5e16abfa531366363dbaf934a0017ab8cffa8efabfb36d608095c924140be761adb8dd2580113ee9a71d0b61c361fb4a5964a3c0fae8fe7bd179b5d10b1f71d58fbc42f6561cfc61a5abc7962aabfb5c4c7d3a74631e3e4c1a34115a38464efb5389d03ea3535e2148b80255d6011f1d373e1bedea1fd7453eb234c372ba9d0f7afd6686a696cf39fed97dbf3cd46ef3ec807330b8ab5ff2eff7ced9702a43d691a399400ba49310e88c8063ee1766dd00f1ceee3a337015d537014c38d2d17602945080437736602266718a947f599d00097bd8946a9fefb65c9d4d898e99241b7fba619859f2e256e1c4886c96302b22726f31c5c77ac79127436c38ffb6e7f506d677445b18b46084b4acf33f10237b95e30a6765bc1add388e6e3bddfef40776b68ecab289bfbd49f31a4ce24a39b66d20118c18b49b64b4e2a4f9b5027009921e8a9ee38d790e0157c11a62e1627291ea68d97481e53d52173236846953f3e03b5c804823ca07391b18e351b4bb9b41e0b87701b95a304c895fc7af1cc7e2a0900a17c7959892ce51d283aeb43f65e8179bf97ff6ff7c4635b532e4a0369dbadcfbbe6045b14a6db7823f683d61847d4a8f1ddbf8a29f4b14ec3212b7835ae6b2ed991a8e9c0bb4fbfee34c7fab5e458b839915b400d888e88969b68b5290c15a11d6c93e8b088ad6b6d44896ab5789b0879f1c2d11f50ecbd62f6b7ddfa5eb62074ad3c91967ea660165797ce2dc6d330912ff20142386af153bbc107521e48773a7666e6ea7a79aebe392dd89ea02db53f62bc46770305c27209ad057d6f494297cac1a53749d069bd2722e2756612a3e2e69b4b13bb6f53b75f3a0415c795d6d056ae0232630169f8c802016513be6630f8d102bba2b17ed45a8b0392c0573184e9dfe394620bf4bf6aef842bf64b7d4cab580bf4f9e7390b64581b6c6a55c2171a4e5838395c6ce13f57bb7f9620d6d5d42de04d305e3575edc7674b2fd56ca46ed8971d59aa349d45a3ced7be344720536b5d873bbb1bd3593e7a58f353d85034fd7cda77ac3e50431af4691810af7406c9f52a0dbdbb3deca7aca455da82cfb367ed3e66911ac0454a1e9eb4dc353d800747a467f843528d98438fbd605cea49299e6f3ceda52a7f1d353a54b45cd54495493ceff2f0d451a41532ecff50154a3c5ed90797760ac70bab95eedc51fe95bffceba8bcbbd7949f94836b88103f4b8e9f5b3b1481ce25f7865f178a79e82fa2ebade8bcd5a1e843efc2f6ab51068f36fe1bc60b7306fd3c887d6779413c32c784451de856449b7d4d20dbeac1ac4f990b41d26f1be956bd685ea8e689d16e230aeba45223f66f00affb4b4e35f422a9a988e5ff1f8e6ab2501a27f099bb8bf82b3d03024ba9addb3e75df9ebdfd5ebe9a73bb039d79827a22c9692d89125f73c3b40d9c5a9c38297f6bfac59f4ad7b3f3b79c6cd88f45f968dca7829f7ac144783d4254432844592cc175462c165fe9824a75431540796a1a71d1ee5196444f12175aa4ed73457121648d1fec0edd1f6ba9a3ef519f71532eba655a549b8a7972bfec6fdb332af8184d3e806a70a32d3bee727f5f29cae48925c035562f8b188e53615461914068b5501a33903bdab3ffb0b6a482fcbb41ec9c0a3478effd6fb0434bc96ec7fc912cf0b1664ea0b5dc75d11da938a248c566b39dd9c4e27deeb918a434a3de5e77b5797f2505d1ee25bd88b245b69d3980df0a56a0b35d73439f1574c68635ac008ae2c2475f960e54b05ff16ac52506f300f4c57b3ef38dd7fca684d08fc86195b21ab266d465534fecfe2bfdcf0cdbf35f472c6d7b6a448067236242be5ecbec6e23bc526f4b307f41b613219b8a6dbe5e4e20b2dea4c0feb4404228149f9a77cae56915df49a1b31ca5333db6e76c4c7ef0676965d0939d481a1b156683a317272072dace4352e5fbd2684f7b4681140e4878ef2ecb5bc55eb35e1d7cb31ccb58e902eb04546553058d7d1589c8b08dc8e7a0648f170c5581362e1f460fcb24ca8691433fa33d49f95b09473ea1bfa0e99542616db819e80c9818162a4c50df7f6d8844ce7b00eaf137d639eb49d729ffd6e1ae445d96a31b3b708ffbe51e9d5e4de64d0c0fe3271c3f7a78e15d109b46e347a635aecd655563dd28023fe7e37d863b9b27df496cbbf96d0e2c541a94d6fcd43f210c8e957023c24e4fa9fe85d5cda9fae84111ebcd4a646f83d58cc8eb5ab51711b43910a6cdbef4bf7bb63094a2cd722f51909daae86914812a20c5c62d1510cea4100d1aa044ba51c8c890098dcef9a6d85437209694ca4553761564b94e5d15ba118f4bbf13bb9636b1c05e3779fa4ec51032642e2c61b4a6874ef5d2d838f1d5407c4f21e5d3fc01ad36bdeac3442a2db7fca6408ceaad16eafb2a6612a662efe7c1636f06a06be36d4019d29e224109708c39a7238200868e055a99cfb597ced64aecac57c1700f369c02e01a235c0a5a0543af0e1d016ba8c50ad69f7e31be140e58cf07209e46a75375f345945666d9f1a049363da5a845bf7e67dbe4c67f349998ab0c08ec3e8f7ca97b8f6ada2247f12091f672914b4334c175e681226d7f6f46b64f433067a699805a33cd1eb5e8ec3efdb0142005f4c6dd71a24cec772fc9c973b3364cb6d0342a7dc2c5d1cb6d5089b313ef7ae3e3773c9725435928521b649eabfb41473f37ce0cede789c64118fef880d7db5c2bc53b3c3316295fcf824c32032eef411b032b7ad6737ac7a0f944952c4c790afab7b37bcd4effd31d29f8df060a392c3b7a8bee73e5da4f8829c01e222e24a01b48d65087a2a387794b3e10647414584a2850bdc26ea718450c394a7907a87057f16b4879aa129adcd26603f4f1bf3a294db8626a389538135ea7127b040abc6ce7b39b096a1f2f26d7dd86a377dba1d20f0aa9bc6041209315fb7b0d1781ce5a402c0eb61bc8e75ab766b4a4261984273db29c6e5094103315a448660a81c816e01730dfe2d62126b6004ab2a48182ea44bed1162d92b093a472bbbad315f6202d66dacd383ba54f24fa0f85ac8f226e1bced54845d903e1753dcc66b904ec7a824d3b82f990f8743d8f76f7da5951731d85b60fb1f111d06ba3d2f958a79abe9f35ec89d8f6b77a4afedc72c298ace74cb7777a2df05596496b9b672182c117f09be8edacdb59b0ca72212c28814297340bc288989786907c8212987002d13579823bfb4907349ecd15226c45c22687dfc458d4a4f35bac8e638b32cb783cce900d63ed0c27444cb303027df35fb4822e554f2a645d445f8afeee41b79862e066336577e769ff88fab29f438739f7a7824f404171dfa062d96b9b1bd230fa2919eaf6f0735a3cc264c52b63f2d3925a528d7d0e42e1cc45bf71b9f0c31383350cbeff3ad56bc006f12364258dee83ee223e625f23f76a62a1154e3848e919e1b22debf6d6bdb758be8f925c7c3a93b51e881d37c6959562756242a06f4a7518c1aaefa7c8a4dbb4defd3e54a6ad9ba400ac2bf80704b731b0325ba02fa33584a36cb0d4b012e2723503387deb03607f5c7ad6fe473cc524ffe7cdbe051301409f30d177dc51490f06a500378c7f398b3f790f3f7f45ce4f3d4f9c299c336661891399d1b3ea16f4c187bc8d3a8174f212213f7ba90e5ab0ec17d82b9be52da4b7786a8e49264e83277bc9f677e1dce09e24b16dc70f0203e2fd69012887c279890a973e805286ab96fd6042aca3303ea6b7bd92dcd11a8613202526cb087175eb1b17464b0ed705d975fc2128f8774f30c4642723e78fffd56a30843c27ac07be7b728d8f0e4fc45f1c574e91acbf2796c733967776fe4586dc412a7ab63a95cbf685cc97d922ec4a34fef3b6647e23e2f1e1da21be9cae1b00718282e29811a9a9c343bbb6b56eae13a854e1f2feac62ca5a1764b47a804a842c6e8cd4bb43250c430410065844ee88964f35c2d03b0338ded5124358798771650e85b7125d60c7b43d3a20dc9e69167cdc0af4afb9f93e1d0e01bb0a3461f3ed1a51cb17d72735a4a99c949ef82c7aad50c93d1c9b635ebf2f7bd83991fe6cd51deebb81b7fd85182cdea44d05e57c3a6d730aa8bf50f8ee5571c20c9692302046787298a794d977e944738863e011ccb125e773edd23314c13f411a09ab1a55769c8d5a780c26980e4080f25a780fc745611e18502349a791c96c87e996eb9196f56540ca3ed18f715d5fbf5be1e5e427349f359e220c35bec8369cb548ee38ca408493ec6bd4be7e9142611664785f01990c332289f5d85889c00c9c8d6bccede8c00cc2f131d5a3da444138a417581691e32fa93cc4011bf62d145e08009c1adc7812e78c7fe573807611ef07e2c7652458701745932f6bdd27e46e8b77969d65e70bc3dd0123e209fd1076375429482f8408c4eab7fca83e8b866195e22a09c07667348614f21f7a886c0ce31000cce8368615ab0a2df8b0c6c696bac438d39683c0393e6e832949328ab5f859bf669b2d3022c69974786b6d03a625027c4a1e2a4f86feb49ef30081fafde564080a8ab185a662505675b5691a2605c280d1caa3b967c7e1236a32ee0a67f0c8501277217f3515c92825a8462d34fcc1377140f97012269e6c30ac9877a57996a88cf643bb1934e72402c114da43b97c931b305d3d28bed54174d65fb55f79ec02e907dc1208d0071010041f7c846bebd6d983bf1c5316d4d4043b0b7a849e09606f3f2fb045f1487c9067e8b702063f754ed81b463c753bc68078cc24c3cd17af0bf16a36d3b57dd9bdc03c594260d685c762347ffff95e01c05239da945856f1542a3c2a1e6a58ce489f89bd35a47c59f6a88289f82be6f689f3825c66eafd13f377c2b1516f56d03f3f0ed01fb910dec053d30fd31536f5da2d15e03645699ce9392288ca16da229e080680a5a83f51b0563c5027e0eb41cd6e12fdbeab1dcfcaa8f51a5918c539de3610ca2f985bc372764ff8c29c3aa60fa74ab01c95347d63d03e4090b4f6a93144988bf790dcce2d8d92e974201510e49a8148bc36bba68f834363d1099c0e719274f17dafc9929d9310ca9d28ac83504edbf5eb0621e42b299aace4841dbcaf4a46f37b40cfc0428018c7ca58d05efb4b2d071e6d79d5e54bfc8e4ef327d188467144dcef6db9f6683b1a0056afdf151d5648c9bbb6a3aabdbed2b89c415c20df10649ed763bdb32bddb5f3a376b4dbc2d6f94decad789175b69a8884e4593bb3583fabca589d7b5282018cc5e4ebfd2300c61236ba9ff2dbe062a1bab1a0ce3994d441901f39dace918441731e2f6760f5f3aaf8b4b6eceabef5faa11b63e001d28ff5d314753d38f77cbf00e64e61cdee5a682acce087bc4f580c79f6a688381450d3f723a000566a867cc044feb7cac1d666ab1bf6b56166823310a7791f70f6cbf32b6ef7dd72bd42dc677b97cfed4dd655d622b9f6bf1bc2bff5269a4a5500eabddd6b9b7e3f3832bc39e173714ce818b833103f01b7e4d5ccaa79456dac807847844b51c6cb65f1c678d0e2494b1332654f3c2b45f5fd3072e77bd77136e361870ab3e362cd610531ec3af7b903ffb61c514505296b8e1840eeb083f644d1b900ca2414ddca3627704977e32e6de2cd6a4350b3285ca74ca9248ec701018060ce94ea28bf8e39ba06b4797d2bcc8e52d70a69036872ededd60cc52597ff71a6c47e8066319fa5816705290d0165317e9256e26ad0798f9d80b6528773353461af0b433b1e9ad3db6ec266955a734ddf1670f5eb5df532eb19eeb0aa250bd2f24e67cdbfb98423f9128def42a1559e645e148015ac5105f4a0bf4e189cc1471d0cd8051f7de5bca86bcd8827551093e38ad79263bfd0cf2aead4ff3101870f23141472edad81af14f12f9321464ce2599ba120e9fb23f170d362de750cdffbfbe0572ad2811979019720f936d81d3f2ed2b114483580dfea12d465baeca69a095bacbc53e3c64a4f1d2d6325ecba0d84f4c69e280fcaec4f0e0f4a30e8d898e23783591d7ecc12744c2f67f8c41013f6f2b822860cde424e01274aed426482da71a2489d48e367e08093c9760934c58e92c89fc39ed5e88a85b1919154271256829852be41102d2e808d3018a83b1c5de448dbcc5dffecf6f61c4ee3f38a8fd3b22ff898ee1df16e26aeb623bb8788cfbb2f3e5798fbe12eb3de2e66c9ec5e39b6df2d8e7732a39974b7050dee0e83b4aba579e2662a22c81cad6bd21b88d8d5a49cdfa04f22223f288666fdd45cf75606176df4dd7e938b526a28f45e0eff27fe64bdd465a01aeadfc90ca72ed1b045115ad94ce9ca21809c5a48ae01268a2e3556dd0a4930e4ccfc6cb55b0c2080260c418daf9a87acdbfe164fd50190757618da596afbf0a877a60a0454c499adfdd43ec5ec18fe80592c47b155f9c9233f68aac1cc142aec6f60fc3de14d54aa4d5be3ba356750b453e44aca5fd05e2149d4d813d54ae3e6cc4f6f60e9a09961e429698e19414ffb23e853367e40830c50336bf51de92382026449d0499f814f073df99583eaac87bc79832500adde2f85ff70ce0074c80572022e2481088b42c7dcf2757c1fcfad032a8d355d395562010970fcfe39a117164dc267429156f61e0e8c5738256f9420011170401344a675884459786b6534956dd346551d39f20ee8cbc02f08927294469e5b394f7591644fc2bb77749a43830b2b5a3402091363891f8fc3c3a5d16a05b7924a8002528ba660e189d406eee77f7896eabbeaf2c67c80cef2a7df1e69faf719d2809e0dc3f68d261825356c89f7947e6c160e26a9985ff56a0d72b7cfcffa60921bfbf22624e00907f5f91f9a387659012a9e8363cf50362555bb4c45cc7ca26db80a514087453f4e708d183ca7c8fa8aceced4744ded7cb2620925ca3e237d2b2d1f772f86fc5b71961dc494e56601afc311a3cb8cf6ef49a366f1867e94715d326d63948ffb8eb3d50a5f5ecc0c66be7f239da655bc2edcca793ea4c842b43d4634782a836fcbfcad2bf4e449de737c27e98d86448444c7459c86189890191e1410774b2bdbe10155a92a41c344fff7aa370b86e3d9d56bad8ea7784ae63613025cfdf02667b3ddc955fb1d64c343ef6b08063d634a5dd23ddc24d98ffe1a464b9cb9d15ee0e27ede5909edfb6d0fc748a5c9c8034efea8ab4e95dff81020b1ac02edd56de2f5f629630d821681ea56450f21ab11e754265061dac9e004dafc5f9829b8161935f68b7f913a22feb7484d217a03f50606421db51b0915b78bd028968d5a37d96173c1470226ab08976e63ace0af05ac13383bfede45d69cc515272545f88be840ede3832f50290e5703ba8b3ca603813695fa3f4c30e705a1a992184a8a1cc1d517f6cc0c7c896eb9071a33786943a474214b9ff19642a9f70cb389b2cc428ba2a7e4a3394503f37c3b818900145be6c1f1888bfe2947f49bde33b96d40f41fc5bb85eca2378d2f1215e73979f891093b9ce74a413d93adb3832fccb13957ef3dba9843dca714ca41315b021b4aab86a95182b089c3549de70be18434c9460b6f610b286d958c5055483524c9690d8ae0f0304ddd7936e52155cebebe4d93128c267cd7d0ae034bf0909ddd756e17246fe66c42f4faa9a9a711f0aa47cbc5929f2be44134ef7b1628153817f0e018f483bf1359c74316f0ea649f24ea3aab38d0681d9db984fb1a123a625b89a2e39b80bf0cbb406e0786632104def597bbe6be9c1f4292b9d1e3aaeb6f67bb6b10642dac59b17235306a299d73b44aab285629545680a4a504985ed327ce09c769aec597f684c031985504bae1aea435265029c68d14fe2c02815bc6b1664e2d53f53f4d03df2f8f172ab849870048602c3d9e58b848be1052a48f0973d1d95bc9b8d56e1b63d0195040677e768753630b3a66d3b745175af6b7187a81d275ab869afe0c44282ae33f43a57e7e1749f7dfa10b3a76b6e1ea9ff16919986ba4f7eb3423b55b4a8caa0409b18779ec2d978700365750c7f1974d7e9051d38048f9aa2f36941b47b22d22e644851a11a925030955f845bf9a1b220809b55c85453afbaec8055fe06d27806f7d36e1a9f507309c02d8e4f5a5ac2458719e8b9ff2b1b33e087e293cee457fa4538af5b818cf6786006102b5d21ecea72b727994e81ea4de620c58da93fea4ab66efa10ee5262ae3d8c2767295eb3f231524964cca8ef25045b4c16c2c0dda3161221d27ea0fb2a1638f40726c7139a5be5fd16dbe12c2cf4d5251fdfb4f01b2b95324ed338849568022417c8589cd0323e10ecf2a4e0406182f0c061d37a6b2e7653463b35829d126a54d37308833f8565b3b91ac63acbd33b0a57ebd0a9bea21650d87e70c78873d272c5958e185d40604a8b5fe2c97f245de8edf9f8b3a7d64e8ac9a848d1b94fa485c039b6b27d4a5a2aae0e1b942c13671e8d73cda398ca7ca1870b81ee528f2a8391c5b69a208016974cb2ba9c72cf9b7f71443444f8b0f1e6eb952fe07d687230b7dc4a70143ca71b020b2322e23701d549d6010a4204cd2a2194ced2c538766ca350dbe720a43f9b77be1d549976472ce2022023f9e6d48b83144153f43f47e25c2ae5bdd506dcf5195121032827a27d894054afba7c44312022da3c00328c9df04baf97390ec8ffcbe8946f9fc1d2420421c7a9e570d08f5a305f6f4a4208eea8043efbf047f6b9c2fad5c624a01138bbf27a8fc9f617aff83ba1f134128dcff762f978e871ec67ad46c0e15733fcb783e8de7da43eb3ad11fe935f3ba8b55e6d04788601eb2069e61571b3ef3714463b4e53cbab433a7c49a3fd7b54b67ed807ebc77cccf98551ace6e4f24f0bf93777ae622de1551f77a6c5b99236ce99e09e7fe3f16f6927be330b2cd77f3432f273c22fe5080a4beccbf5055dfb771570f010259382847fe9b2076b5ca1d6d5ba068107612fcdda6ca82868ab674529eedbb9a482a7db2b2ecc3d47e49468f1288a6584d02213e546ea830323ace3145cfe671b9e63799354734eb02f53fe7996ac3c71e394269e180a7d8a8b5f9c7e9574f51ffcffa17ac863586004243a792f3e2eab470992d4f54d6819c8af35b93d7ea6118e13d456766a791cd7556f25afa666ec9d95a082f01e5db90d476f1889b5dc5aedbf73c38dcd0b0016a987d12219fd9a9e99c78cabe17666f55a84a1e174059b62c3ed2adb556a2b8c723ad93cff6dc4796ebcc16b12cb26fa8c52b4ffd8bafbc50e7eba3dc1ae9c80b3fb4e85d7044bc5bf0e9b267f956c2f0d36f211c9a818092b8869f08ed66a23b03239d564a2a79b856160ca4d162e6cfc149a7a2de5fa621e44ed75c37490637d07b1d4d54124f3a6390cf2fac76280599af7e2649b2ad3fac758ca4af59fee5c45ccec1ba775d501d908611f28f9242f8c5e59d15121fc891808bba46c8a7c8200ee733c45b44371dc1a55ea4dd427d8976ed59db29819cba187ca84c89ab68f5f8a05db7a1cc795854d262fb5854a4d777d5f2895ea88df291c6169c0df20972203e5484059c73950f72058f3e1899e408628d611d3716e671dadcd890ff82ace36215cc404c36a0510f1492ba54031583f33859c714f73ac7a99fbcb7ef1f01fc73757dec8b58c8ad19117842fff82c4964f9dd633d40e8b3e55a85c782e687027e296f19470b204464c0a464d00251b9bf086c0be101128d2b75532ab3329878dbd99aea684d5cc6ab2d5ac1dfcedc54f4ec557991f66adadc94825aa980f9aebaa18dc064d896e049d6be3eeced1c271b0418940baa37d80b2f54b098bdc422e7c1109638f3a9d6586d7ab26796b3aae003098f2a048ffd89f04cc6ec99dd72436e3c1acd1dee26632adfd4a982d2b7846d9368b0d2fba742ab27220fcf2e6fd204a628404a24e0d362724d68ee202cef6cb636b21a9cdf55f3d3ee8ae2f48fd1ae92e3e59d5e01f38ebe9e0729d9f0278979873380766bd7fa9c9aaccb95b7b5a02d9b725813077ba6d4bba84c092c1d4cca989c6632eed69ef99679edc00fff5a9373dbfc7cb2a537e7256e33c98fe305db740ea7e39730423319f97797a3cce2c5a032a6f21d0b5d20059823b3ec3e2ea3158dbdf1ccdc91dbcce71960a43233504c6201fdc8863189c10bb227bf1fd6f805110157032107f4e05681c158645466f56b65f25ee2714ce3b10e6d1355bd8a25866a55021b1ff596eb850e414cdfc13185794e46c299604f70a7ccd41534b3af739a57d48b20426c7925bc6aac99d936d6c5947addef6ccebb01ea2696098716afab1440e36a8b53a91e52c70241001b9432aac869d80f237c16aadfc03edaacea525a769d049c8d2e38c889d08aa1f14f8531cd3d2799510d711af89a87c308a0711e044f42c0fa07f5440190f9b98354df122f644ffe01d598efb30a2e8c1e83890b21accb88e9ac4f4482f2ac77caf484f56ea2b3e06e4370eadd0786d717ea6bfe7914f41f87bc3396ca7f774247a290ffd16bd9d32db67a16bf609682df059090e46b033dd92b6d25849291b24ac2d2ad7e3bb2afc15f0067b6299f0ab394046615371d440387aa2d6f8d174c646177b6c01a984421828bb27f32c4ebde2616179faa345060c7d30788108c3cc74fb54c8fa68465a0bb9a2cd462874e2ccd49d5a5690229db74788cb8fea0a5e4cfb2be801412fefe6ac585078de84aa8d1083fb293560b09174263e6b89f994e81acff7cbe1ea6710d490fc975311e232b2e183e5dea021db8addb7aef49bd90895f0d0d1adc6ac706b9d9583d46c84c1a2bae2e56e0c7fba4babf4b02ffefd512d982a0d01fb774d61272a588c64101839d8f2aee0b7e19e6219bd24a240a3ae1ea001c4296f5f1dca31feac4be073a2e87535bab39e3d79e4044566b027f6908f3182793aace07e7981ba8a101519d1d58e1ea58117a73c521bf21f5da35ab363cc6e70939664f40ae70adc20543fefcd174462ced0519851e31842f20d0d8eb112322adc965d1763cf47d0427ad98a2b20bea11571fe88e14ad3a325690b246b19dc90ceea5904fbd509872070b90f3d129cf29c820b11ac30a1a9c7cd64dbe4faa5eef29e12d668f6721a9838259076fd6b06ec6b3b3c420f27017effffdd3b9534e4888728ed4121f3f2c3f68ad8e9661e8189b106a24104302a4cb0c79e18cfa4ec42071add93c1885b13040654760b7642aa42da12b5308950cde9f5029654b79c204a76fbcfd9e03897b3778d149c7ac1c1c6bdcee73ebd9a9e093550a6e4da1f8b618c5d73887ca93145ff297bc8a743de884a0ae2cf5cada3b252656f115a2efd199cd46c0b854ad38be3a207b33ed2f333423fa00bf5c997a016ee86da74205742353191b2efeb55d816d346875735b280b484de680eaa14369055528168df4b95ed0c76ca50671e4d10c66aa0aab32515bcb04ca4a26682b3a4159cb89d54a4c28567a82585313c55a4facd6ca4e94fd51119565f18e25dcf09813085b5ffc4382cb99f580bf3ae2dc7b9f93d4240792eace78d58c2c52bd683e3b4ef242f9fa86bc56df10bde00defb20b86bfee28c5417cdeece3a291c511ff501fbf521f41930a209b807269977f84afe00a2954aab143ae3755e5555bde4fff41e61f9300e667c2c93499fd810a05c4afba9a1b9efdbb754b7fd6bcdb9372b51586d344932cf73dc3b5a4dc949a55d561170e3792e537413daa953c856dd9a52f8d3c443dbbaf251e56a2e5612270931860be5f6d3bff6a9e31274e339e3215b336d241ce11c3b353f78e302c37db1ae07a96a9c76bcfd59a845dcd0c409ec3bb5a74115e6d62e4ffc919acc2af86bd01d632ebd0df7eff83a80cd632bde7f098fba05f0a09d2f9e6dc9f10ce8426d71e14b0a39c599cb4ff6dd301b9df644d8e094831ee0f409a04f0ed00272599e4955bc35615409641358c2e08e7b37936b7d7d92f42df4fd7875768f342c8e707ff2cdda85bae53eb08400a1ac447219d9fdb84a9e15752622e226c5701cd36761a95fbf9081d553052476dab034e4f8b270d487ac58bcf5af481d4cef37e05e32a695b32b57f7476a0f84754963bab27708baa8f9e56a3d634b04d839d3acb3b87e3766b28f765a61d0ee2103528a0645701b190de2734b104a2a5cd3f41640834cffa6d93e0bd2c996c64792202ce6476a798badd8eda2b66106370dfbe1c41c166f207755256306598a27b4aff0afc9801efbe7d05797245efd7ea4bdefe61392884bb2e2e6c97bf4c33acae06b2466c2066a988615d303e571427c8ae6854021253ca437dfbd8f8cafe488c9c7939046a615c0cedede2cf0f67eb8d0f6dc34cecca442872b61906d638970beb906437330eb52e8935b4354da7ba684e858de3255aa3007eed23d1e74dc138ff54ca13bb581eba38deb74c9e2c850c36378c99a44f180ea8f068084ffa80c09ec4e897ac08e05c96a37fdf16cc3f61aa11a1f3e31860c08d242b0da89d65a9af6c8efa6b1b37fed5d00cc09c5736d85104aada9aba7353995d6c228154628121303a0348f560cb2879c2821db62ccb07f2b26854f6a301cede91aede16aa6a97b8828508ceb3250d8edb8015af816df5f4813dfbedf0f03b7f3cbbe2c788e6b79c7d674b3c96336d809422793b720d81f48724c30c0015d123629ea9d0b2946af8a7db1d1374b1d8378673149d98a76141cff9c77c32e5f1303ef281c03ff7721ed3d1231e83f8b615049a611e34a3692843297456d20726638b30e544a988a147cba277e224b89e599518d6e5dcde00191bb252acbdfe71f2098c965382ec23dc25db3054e03218f3f380c8dbef861a32b2634646adeea60659f0a7940eca8fb7859875f1422806c87292bdc6b7d90dc0b6796a75c8dbc41c6273b657aebdc03d78105b56062ee4101bd880ef06f76a73f514ea12d4b3ff5ed006903cfd6e5bc0e06d7228cf25e9c73cd4116fb83546a3ec41d5179c927be22806ef3d1ca98a4d6bfca3c6b08d3ef6228ab669546028b56397a0436c5f2d3ad76db35ca594535d2b652c7df7cc5d79a78bde592e71e8810a1b4ada2479295e084458ba22a89ddd943bb0403a751f5ea7aa2de04c31900ecaa0cdd889f37c759e84712121c54a8794319d08384709766233bc358e9feacf85136974c2c63c0e79442555bae3020034d02ad9ba8c4ceb60023a409fc43d359237d991e6682df5b1e5904ce6ea12f77264dd03082691cd92728224248383634cd090539416c931a5ab711975f2f8c49145fed05ca2b52d144b7f6d4d291ba33ebedadbb62f8c0658891265e2827a8ce6c6d6897ea27b99f9a08eba8188df8f70a00ecea0d0c25e10d98e72b72393d9140d5374b8290f334afa2296d700cbd05935210c896570e69c427f3d1134a2a2720079ea3ada0a432d659e388c11f37783d76fb212a68aba31c63aeae0922e4d2e123175eb279cdbe080136d6a2e23b289fe1af6065c9a8a11cd4ea6f5ac7afa453d64a212eedcb0c80b037028e22da12ac2df294b03bcb197e550551acc4ed345686844367d2651c9466802cdc18c0c3a66e90bdf19086d85788d94f589ac3284132bb8ff2a9098e523386ceddf7939e56e18cb372656fc4627223437db4083d7d53cfb0f024629fad3e5be030fbca6b4d6cfa61180ec1086da4bc5b120f5df5549ee8c050c434b738252ce80d312320f1fffda8ad3568aadc96e85b07e3f3193669087c5ba2880bbda1ab4650714689d1962b1b7caadcdb24f5eee04e05afae32fe358072281aaeab11756ab50ddd3e9341b574996e44e439e5addcaadc13f0ef39d56922b512a18d2e4a34755faa988cf264ee0144c7f59e90a700c166753724890f0421b8a2ca23418d45bbef42b07b205e9b77b8a049d5cbcccb8e69ed94b6b9557ddcb399d426ebb06ff55e7c2d87b22a6bb7771d64e61d364a700db59fa27213a8ca863bebfbaa7b131452c6382deac7ac8c63f76210292ea4c9e73148473a2810ef53b2a8c741b7e24c18727db9ac34aa66b96d95fb3ae24297360f6f304b3a4c78c3c1bc01fbdfa2eceaaa092173d3ce618a34a3cf9f5a39c00f7480701ad9ea96c564c2f0e5bbc1cf249ddcc6a590c8e3b9ddf340a92404397d3bfe18363dc74b532d137be7f81ae4d3014eff572395d84442f143e015c7727f9f268b330b68c35a03f3c2a522857fadb753371bb1687c258f4770d817401fa24bdc01b855a5d7ea6d5a214b062669cde99585eaae5188fbbc70ea4a8471136f8701ccf68e783bf4bdc5eddffa8f0f4a6208f2e0b8f142b65b97aedb391c21dd0b9133b62f9ce3b9642ff8ef5b1dc1e864b513bf7f5654151148357303fd39d1487aca3020824e5fe2f4eaba3022691e8d3fa9f559cb582c368c1d337ab154971159de95a23ea83c6730778f86047f28d561f99fba54829fcf990f4ec813d95baa4ce5ff09d27c1b978440777563ca38df5d56d67d1a813fcdb98a20ed8c6691539747f48c60d5933c33aba98c6ef391d9b566e0add4bb6ab1e38033b87591ad512071c0bdb78cfa2799e41ef71471a756de3e245d58ef45008621d9585a0ad65bb898ecdc26a5701c90beeb9ddfbd058989301035cbd9fd88e3c7f15e387b9e99135c85fc56ff5121b08167a5493c84dc933a19ec81dc73066d4bf60aaa031eacf38f8e56f61aad2a9b94510863c37f1bdaaa1d39df13c7de5e4cfbac15f3661f225acf2a1ab5ad93edeaebe49e0b461d150e4e400e63350ca589442075f805366c7e01d99e8cce281ac5a7ce42791928bf60afdd8f716024f6d0f1fcf23b776f3ebdfa9055f9c89cc199b299c803846c5bc53034fa178c90ee7359472b95deef1638df825bc3532965105a84cbede7d1930aa76102a9a621fe65aa2e2a642bbf3aaf78c789a3c7ff002eac2a0ddb2ea19b09adf24eac90866040f20034a80d3ed1f200646e2142692dcd6e518990013de86200d0de0a5c5e860608db959cc85a704ba4814f60de236f871e0bdca9ae7d84a49ad2c7638dfc3fe86a99195fac68b67d2c10107d39663c13c2bf2720ad59231783d9e0a4eb4eddaa6b3b0e993e0e3cc74f12882ecd77c42800f92eb6ae34c4b671c0b7b7740dbc823da94b3edf15fa448a4a9a095b5e107fb5ebf0e26354a8323c50fefb5944c4836319d676f2d6ce43d9239f562c9a25958a771fda5b0d6b79d2efa9092d5655de06a25eb7b5ce1706a6e7c4e95f052c6d36616f26936effa03819881cbde9b35fb131f871c5b87ac6896b67a58b36e78ae9d0673f85fb55576592f2479050597e112c3a52e0a69a19e60dcebbf306f192ede843ceedb8ab71a576186065e5111f2eebd192e263d95ba0e84bc6782a688da58aa5812de2ec61bae1eea6ddb76410d27132df09907132165a91a4b397e82aa53b9ba4f0ad91772275a06df6f62904b67fdbf8e9231bbe29accf3a3005129cccb13d54b7581f05367630a42e08db58aec6da257cc0cdee89b2cdd0e44bea6fee485656f3fcec9613f99d86745f510191aaa76cbc23a5fe78e69114c728454ec33dbd96f3b469e2c5e8cbca82ce2a8e27ce9d767b14c92a31c8bf5c5e35a43a06bc5786b3f9588fb8bc0d86c31e4a21008cf54f9396ee4e60d18bc37269aa6294e403ac3dcb6fd3584c088b2a2cd608b3db23efb0db8ed87b6c6e1dfeffda5d50c2163261f393efab0dd310a4277cf7fdb5921773f2a2171784483b71dee3e227f6274be8dbf5650e9acfc38ba0eb526d1067eb121bd0d12a7c4758fa949531c44c3508dd9fc96172a3ef6786ff4e610479c7f99f3f8f32779e644804bb89ec556ff6921d125c5cf43263ae0a2c676b9fdbb100360076ccd5dac451e5459530bcc994a12e0271d6763848bf1d8b12c37767694030676bdd1503bfa6715a918b68ceacdda907a8d52fd8e9326e2d0d2672258a68dc2d7feff9a64fd8b214c3d9683f1cf568991306ad2c76ec22704d92815aec3408a053f0841411a95b9afb657cd76f04c76fb022d84bd395f2144451846c26356900e846c61b65eb258e97cba10759503b2c4d564209842f07c3a1623f1eef658dbbfd8b3be6fb17bd9337a609f0ad46af47c7537bd6624a2909718082f29945d28e0b55be04564088076426205736ecba45d1af9f98b588433888e1a0035fc8755d108f4a0b5445e39969090a00891951473511d65571e751e671947258308d12357939170a18288dc25ab08245d97f08d143c7d16d7ce5800d392e0e61f348f6321341848d7681858e835b699891f3497ebd6aa7bedd204d4763b4780723c50857f9aa8413c613016f44c95371f9ba1c36573b5e0ff84498dbe19d1017d04359f34edf0919a8619b38115923c8afddfc394297a06e3c2faaf0d9dec32516c85b8a9b9ae3a0164387af576d0f6c22c3c8bc286618236b00b17a24c047be01f9734597e0f5cee7e8b83125d9de6a0828137a099e478d1a1ee50182dd61570c17bb5d86db76720994b58ae02c47dfb804d6b7bbc2390743ed76220e725003c4b652028e4ce6eafa8244f2b3960a306602c2ca645611b88e581eb9584312a905074ab771971eb93e203858188bb56431dcbeefb230416985bf78cba52cce0bec39879293ccc5963119dd53931269e4fe111df62779db97dc46db003af680cbb54e695c4364cb083eea7607d047d8524733eac892e9b15ba65cc2c50229118903baee7462f591237a6da15bef136cc76a5a99363a489cfca40480b9c5d438d89af3f8c19278dc2cd0c7d1a7f3a75df8f7c555c050afe80453a78c424ca93031e5629bf19edee9de3949715f60138f1da5734b2bea038d676d545d2074431f705bfd39de65a1ef10e492fb28e9729b6fa3c8fe8d7b22023141972239086f855d416708e02196c0e128e3c01c1a6bc8d265f12ba051d03fea91ab1d2ab6a8376810ea9e060b9e69b421f3283733efd18c62e6f1571ea7ee678f7b50d4341a9a6faa29eeb0e69a4d36313c469e63dc6c6ba60cc1ed04e1728f3f9997c6b8d3552f6616defd99453d8b23403eedba0bc672f30ef5e986ff6a1f0989eea68c449a7abcbe81d52329eabc083ae80054b0d999f24ca227085a5a97307ac9cce23b7093b446fdd97f45a92632c791463fb6b18b5b27ea93d76a8e19256575181b7b42d2fb8b03581484ce44c3cff597c1c71535bfd99e3eb4f39da1ef4ab9c586224c69b2828840375f57afc5922523141321e202fb6041001a0b56ccc036eb205923fc225c0da5b940b7cd312c46b09bfe3a781cd3cd44c87ae8f68be000adc86dccd7ca39aef52a1ef2aabcd73a07ead8735d183ee4b13b1f075c8f7a4b9696f2ab8087d1c4083c43f70164402dc9e020aadc5555c40d45da5034b3b236b48bb92766518dbb179281286d019ee73b6b5045178795d5c33a1eb5f34a0dfb53ab053db4bec1310df806c66fe099d65efa9f5d40611714b8394c1418e000590b117b4197e8f80ebf5edde9b6c29a54c322519d2045e05490547ac4c23c0e771500ff64cccb62154923be280c12e6a0d99d252d204359062a5a49ce0880e468c90e2871778122880a50844f881a244871b30e987fd3afdf26390cdbac6a358f99f579cfe4173a8f476a0363d19fa3ac7a601065bfad5dc9c93636c25ac91cf24314ee93ea98c2beebd9a71c6e9d33d46193dc6e87189a5925229a54f97ee2e9d0a9592763be0adcebdc4dcfad39f52cf9c274b9f4764e7440bf4eaaadccfc7aa963369b4a9d66377c7b9650a7686f1bdcb005fe7a5ee76f6f66e29d14a1ae3eef3679c3e2184104209a1c378c49c7535e79cee51468f317ab432c5ef74e93ee70e789b9d230c30ecfa2c73afb1bb63d322ee32a61f523aa5f4e9d2dda5c7a06394524a8fe9f13d638894dd7c6b47a59cd3dda3841042082184d309066bd8ecfafdeb9252daf5cf2e06beb429bcb4b28468b9306bcff6cadf61d62b8f892fa5a4925229dd474a29a1c62379b2a332974f5b103dfa7cc85363aa3bb3471ff77c4e9eeb2c397ae4c8ccccec1caff8c7e8b516e396ee76ef6e668628f78fdcccdc168391eeee156231527e9d754d949e4f4b253e0004b303def9b3d499269f27a65f522d2793ae6952f6ca21ed628c18849a7c9c9ed33fe8c2d68fbdb0e581a5ebe3b10502a20b5b1fe8b99f8c96078e2084106a7e82feca45c418638cfc3d3d3d3bf2b6078347bbb793a5bbbb3beef45111a9226efc3dc6672dc79d99739a99f965a0397dc6957f28a533dc965dd37984dcc3634fd52b7feab94caf3c5564eb7fd90f0cdcf03858081b80df3ffbe15dd9f4e349155908bd52e99e0e4d096c40badd852d1b8a80bc3c7bd09d30763d7bb5572d48adc0ead097f7fb8b7dd75c27184cf2779d78f8a538517a2f1d87a13899ae99d0a513972916d8f97cbf8f994c6a0596eff74c4fa0a961e37e7c3f16c234240cb18a2a5a3610ddefa30d4337beea0416c234bc1779a57be6a70cf0dcf91fd3af9e578d90eccd9fde173f674efe79e23de40fe63d608cf32376274ccc63197d0c667a80ca757161cb034b2e163339e44231a889005d1f3e3dbf7ce97dfca383afd78f12e6b5e79797d5db89577bfa9d3c7e1adfafe6e9548ffe977954dea9535fab9e4e7c7935afbd8f1a03e48d1e0b39e9c0ea7cac8bf98913b198cdccda8fbbb58337a65b316b37df7698b6a2dad73aecb1dad9ce7ba6d2eff892651df4ae3d83e27e7830be8c91476b8d0accdd75bef9f167f0e9ee8f75a42fb25ed9537ad18b5ef4a28f13e9f559a773a21a863da519fdec82216aa7d353ab7df61fcc6b57efc46f276a339af7edfc8b0f6aaf79d6fb32ecba3cea7d17a667160f085d015cd812b27485245d1e72610b07262e0603a3ffa7f7c2f363fee9f4ec338374beebe5cf7067f75d3ee94fff9dbef2a295f2cd5808d398307f7a7939cd7f79c189a7eee3201dede1c93e869d4ea787991fef37c3d5e1d776b0df8ab7f35fa0e4fb3761cfbce87bd5b731cee2c5fb32c0f3adf076fa9ebc8f218c57e7e9fdb58e8564d83d79df553d54af78fe44492fb34d83f0614daf5b76e7c3e46384c3935b800b5b38f874f3fcd0e46bfd5a6bb2a30e9e0f7a9fcfa9c1d7a6a64d0dbe3635f85a7fec743cde091b2846ec3f4fd33a8979dabf90ffed4c9de97d8c354482f939e78ba75d0fd3793c27cfaba84c6b4a14c449909f8bc1b0f7eff4e52ec8961b800b5b417c9a5c035cd80ad2743f7b797ef4a030de481f5ed8b99401ce58c7d7833cc8857c6847df93f742c61ef71f646a8d01963fe6711af50c847d7e7c789089bd0f63a16beccbc72e1d0ff33c21d8cf7bbcce7d68e740ae2ca867e4a7a2b0f5637c0927ffa0ae29e1657df11f0b5de9c91dbef675dc0708cb2bff877cecfb49afe4abba66f58cfc17a9fffa8881d8a7277a5e94d17d7c65f8e895bcfe1f83f13e7efc5fdbb63d84dbe374d7b950af867a25df35f6516d8447ef798cff205309ff79100dd7fbe89a171a035cfcf5f3c5cbffd1e3e22f19f89ee095d1c15b426751bd922fd3c1e85eb8e0ba24aadfbad97d9eea3e2672e5b760fa38165d0cf47ef02883f1befa2235e9498bcd6659dd484603a0082d111ca582d00a811622d9d30a01526b07a3d60eac960e575a3ab0361a9abdfade11075d2f6619594691b5ac228bb744d6dda0d8cf2f23dd8f9338696362b3ff9826a92fcf9bcf4aed51dceb3dc9bddaabb8440496fa81bd5a3a34e1d21a22c425680df9b95d3aa51437277c863cb5e6944257a4a0be18b9bcc829e6c216d04f2b87a6560e44e02cbbb095030f2e3f06354f82c9b8ccc119b6c1a9d70c4ec5c9bcccab7054c8d12b2440c0e0a840e9124754e0d384891302a84269e80728764004238e609104f1b8704fe96451240a2192183282105364e8c92189a2185cc9c1092601b872e98c4b9b705428015076e957a14b632e9d50ea949c4a05ee57a90b5b391855218c05dbd87664a35a477a6ecc852d233f37f5c4a4e9958d1abd2a410d2f9432a50fa5b8941ee9e1524a294d41c95059aa0696c6860d64c9e4f0c39d71610b044c4a489fef4c7740d845a9cb5217a62a7a92226b3e3d9c66f62e54ba187539ea92144980455bf37c21bce199cb4002f4d32e063c407347d66f70e6cbdc702ddce460c105ff1d4d4970062ac1196e09ee68628233f07af7346150555bcbb1a798e5b0a0a901637b6822f69f4c21c67ff35696f27a025188ffc9cbb980299c1e3e0c78c3c6cdf34fdbdc74006e8cefd1c480b1c6b0487d8e1c37396e707244a6161b334d1a0303c3434c3b7d57dcb40dccb1e223cc8bf7b90d19ffd968cc850be8dcfb4b78a384f79f9c428c77ff77f7be176e56368eb0fe1f4d0d1b4fb8c70526c3fb64dc12627409601af1653a1660749d0b9a8ebe2f3c084014e2739d0a49967b7f7e26026f34b3f8a8e826d5c2e34d0d377ba28deaa30b0feb8779ae83bdda54dd0e2e54e00cbc33ba1d5c8ce00cbc5eb783cb119c8117ebba6e07972438036f771f77b7eeeb9e0b6d70e3a7ba16dd572faadbe94b69daa6da483db1f05216ac186fce1b1f380381e00cbc5d82ba0c5956510a076fe3382227f151af6e68689496e00cbc4c5d7a4eb88dbd7bb6571d0c1efef4a9a7f3f2ee3152af22f6d2395c5118e6f388777a497c9e93f8a8e8a68509dcdcdc70e9e1e2c305884b50a534931293b4e37bb5ce210c3f6e43b8a237f66c43d813ae0fc11948549bd81d5c56b086be9f70e3dba2a2a25befc74dc00ba30d8c918fbeadb51eb18aaf75bb1ff77cdb4df28fd398a451c219fa51868716973efd0778cf7bb0672603e915f7f42a47afe2bb77d3abf81cff4513f119a9474bd76ce11b63fc62dcd18508cec0267006dee915c11978a3cd8e2e2c3803efc741377ef7c4680f0698a79060dd47d77081377a3c26bfb0a5848acb4bb1c8dfbdfa7fdcffaa31d654600fc2e2f3dcacd33a1abb1d794ff4afee6b2447f58abba926bb05b11f177111175d8f028582289870618c2b43bca816b35e29348428f8cfceb3ce421afe2e83b33150988c4fc69549b4afd77f95797285b5106b8dded7e246d91e0aa210e12a7eed32b88a1f637ce1bacd74d4db30fcb8ae79b0675c900f8de0d23401065530e2d307d201ae020713fef930e243d85afc24b476d90d1547cc952cae7c0d1e407e8a06d67b2573e0164fba666aef1a0fcfe31358ffbd8b2c268eb42cc5261f22434b8aa6182129f9145dd33732d1dc351ef3ddfbbc8b7d554046b55abdaf6b392f1e8434344cfbc86302cddaf1758c6a3c1cfb8a558d472cea15cacb3a78ab664b60bfe8e449d7603cdc8b45bd92812f256aa20098fb4c4fdac98381e3932805a2101f7386fe3fbb38c5bdc882284423f68b4e6efc2f3a894550f6645d93601c440cc6441431c5044cad13f85cd832814f0b09536a084a4a47472d24545a488ab6a1243a734f51b11ffd50d723c31b74d2495356ecf79752d409aa156ace39256d1a52483cd1523a74c27e198a9371f7eeb7ac85312cd6a5944acc3973522eb01f7767d7a8569945c16ec6104a99294f1a545a939c9eced7a1dfff510fc60afdf4db93eea16aadb5d65aeb75d148a912c584fdfe4a57adbaa67bf6a40142d31580511343ac2122b76560a1123720920236c5968039848191ad191781e81ebc22eb0f0caa3cb584fde26d78835b5e2a06961fd260354bbde0cb7a60504b2961fdfd6bb6006c0457aeeac25611a38b71969304c60afe3af2fb3fe9c158a1bd2471a6aa40256e40e44e5b931851398185ad2120b109831b91852d1210b9f5e7bab74840e4faa3a0f799fcdaab58c4720f573418562331eeb49d04c0cb4042b0ecc3186d609e8da88d659652db30736ae3e7ba39a3e570cce334b33026ba865bc47c57226dc3d9b8f8d47f75fbeb5d74acb4795e1713f32bba961f079a5ced3f4ebaf2593cea5f64c7f3828a7916311fbbaf91623829da4ce084657fd272b2f82f3f8388c55e7a1e9ff9b2c6d887ba1fb7935411ec77c34284213dd82baf458aae7b10d519102924ec80973fc6ad06cb0fb71a64366b4b09315af905df0a3da8c69fc065e619918e7480611fb6c3f3d6c1a3232855050603bf993bd5c576aacb4603736f34d87e9fe185080caafcb1541596524a293d7d77a7ff9e464fc1024c831f4b75b1b608d1b5cd1d5f2044a15a805350310dce3c955207f335daac549c420ea651551cfbe59be1c2782f40141803bde25fe5b86ad6ded7bc1d61fb1b76cdc9fbe0962d997c7ba55775442017402925ffcc39a5ec7cf8010876508e4048a887aec02fdffc153daeefeb337ff7e475ba2eb51dfed8d472ba1fa26e64e1d2877961a46cf6e8c1334545ad97c5378b0ef60c76dbe377a41e7307eee6d410d2a574664e11419bf3e632eac2e041bf7ef574e06dff0bdc5c9a38a4a688b01f0da7efb667d8e9bdf8a7579e7375df0c77d21860af6a8dd43b3d4ef48ca689293f46ffd4139436408a9110406045891eb440024e9870c2830d94384982a36590dbdd50a6f458c3c60dcb1b78844041931a18d1a464a4030e9e233b7092c41129504801018e8fc607202d1f6c68f5d0f4c47f7e8c0cb57e68d2f2e10677c196560f4f8c5252b0965a4149ad2022ad202053b478d0d2e201484b044d29295a3d2c69f5d0d3e2e10ae646362ad8a91edb68b0aa8e09f63e3862d89f3abe8620e0483e0fba41f27d5c89e36320ce3e4e2e943dcfa8c17efe73e5c97f7a05e47eb147ffe99a6b03d0c65e8f752ee4433d23df8b5c06c136d2d1cf8fdfc386e18c7d78017171ed7f4cc4c70fef3700e5fb803784baa6d26071b832f51f0fb91f23814c7de43d4e9f30cbdd093bfd2965adedf1f163c9663fffeb239b7d7cda90e38bf4def392a8be27d6da7d74d447998bbf5cfcf5e4bae0930c1f736a39dd637c72cc83e24c9013456e65832ab631b1fe17cdb7baac74a165669cbe6aca080bddb11355b13081050b164f311354dda9bbfc849dec5f8f4d5a67987075de557a3a9d4e9e0c978eeb75b0ab977493165ee758e733baa6d22bf92674cd04ad4017919f1f0f721bd5cbf7265ee42c47e24efc89135db9e4ca0f9c109c91ed061c0b38232ce058c01989b2fb38643e112f19192e888c4a8584ead6ca598f344a173343c89021ffb7326265e2cffd645ca27e4e996233a649046fc8a6b6b99090b468d9b2658ac99aac78014dd692b69953260b75c9200ef59c62cbfd1e026982ff62e989595f858a4343d80d1996997dba1ed6445b4b48827ded30ac5321cef4cf1e10d0f1e24aaf0517cc172e736957a39b1e0da462837323d3ab1b8e6b86ee30f8ad7c922cda5adc10678523c106053702ae0827c4fdc0f9c0f5c005713c7022e042c055e188703b703a704338202e070e04dc079c89c382050b5785abc205c165d9b27051b8281c144e069c118785c3c2cd8023dab2704bb820b8197033e0a27059b62c1c144e0a27858bc249e1a27051382c1c160e0b870317858bc261e182b0cccdc0f2671891e5ff645167b1f2321096df2fa7c0faddb2d8c82dd9b2d8bedc125b16cb77cb62e1e58fdc0c38281c969b22dc105c0cb826e0d2732e2efcaeebf26f8fc626fe27e37e978c0ba18d7f9cacd5bde8c1486334736d28b1dc397056b821b82338168b63714f3624b82adc109e747bc3411623479c861c314e12451b2a47ac4ba1984d4edc935adfaff753f57fe9eae59c152dbb620f083494494abd4a4ad20c3dbe486f0037091b9fa377026babd5e5f1ea6492d422b72cc51926d9d4ab991b3da9a424eb641237914dbac649db482d3d93e42a8dab2267ae77367292d0c4192b15091b15ce870bc2ddc0d9c001e13ac0d5c0d1c0f56c556c5d362e5bd396840d091b151b1367653bc26684ad08db149b141b11b6216c4b9b10b6206c40d8b66c3fe0aa6c3ed8a2d894b61e6c3cd876b069d974b04dc1e198cde95c155eda6cb03db1216d4f6c48441b92fdeaf6c45683df9ed8ac6c58dc2fa0daaea8b625623cb12014480439b19a90b353e06487d8248b6ae582091e38596d4b1cd50861e5ee7a5afaa474424a7a04944d4e4b43752eb97bb7b76f4fd8f6b8e4fa47245188c8f59feb40ae4d643593f7bd109b3411599995d78a4543d34cf1db8b3e42c49fd82970a2439c4b93e8c4b2c1c9892a272768b61c9c582d805cba4f1b7126ae98b051e5df16f2a156bef2a6f9355beade6a9075d635be19599fff4d29374acffe588e2193737a2fcc26d7878c88aec358e102b3c9f55e55e9d81551656763c99620982ed48cd849a38add325141dca4d0b49808d9103796c7950ab696b498d470e785ad254d5b9456104ad27bec560417bb1d21814e432e6ec0a04a0849a822c529d3a38c91b58a3e058aedaaa532b19cdb78298c70151f3e437677210c3677331781619b11167a2ed4c47474c5499308147fb628519982a4879a908e8a9c30d0d20b2aa8b0cd08cbd20807d4016c45702bb2cccc7cdd37202c4a46d52af2e47e367cd88106373c51d2411244c0a51b6c20e2870a1cb0c0c06fb5fdb0bf76bd506b1ae6014b1d2efc168eae0b2b52400185890b80280247008a60c52789072444b1048e540d2cac7c83ccabb86701081d70297a72041d7c400128c8220320b4200a24584790d08e18cd90439cc024d1b40b5b4ab6cc2160f7cb8e086140971222941031d15212a4dd1cc1e244ae6b3e28f37136462ccb300cbb3a188c615d3685d5e1bf5e890f1047f7b32cfb1df4b3e7b931d6ac3b61270f0927563a9b9b731baa1368a28e3bec15160caab05412acfc2fa393a6b35412ec1257f97f283f59fbd884b102eafbdbfb563cea792e4e0341e5d6b8b045c4ba18cda8025ab0f816cf73af53d75c2ba5945e3eeea9c3beb640752cba15d84b2731ce566d63555d63e95bebc28f6e4705f68357eea5700aed5dbb31c783c183fefc1dd4765fbdf65f3ad8fcb2d337a6637c9c5859b32ef4a840d7bcfc75a59e6c6a0a6b6b5aa8f91a369ac7f4fce773afda999fbd0f3e4f8a0a5b5f66aaae81d72f9c9dabb8e75445cacb5a8b68e8f66b8f7936a303b69f9f93e99a18fcb1f8d5b0b93abf5a9704e62f987f111fabdec75f16994da884ef1346b574341300d00033150000281008070443a14828cd1431583e14800b7b9e406e449908448118c7611405311c07114308310000438821c618860c29006111f9dc8780a656e5ff21ae22de225ac9f0fe0528dd3f2275a6c53f0f1600b50406bf8ccc3db722b2cfdf8128ba0fae9984e94ac7cfd7f2d8ece38236a35f49813e3cf60626564995efadd186602dcb2464c52fc740bf01bc44839c4d39966b96df844e46594b33c556ff565d9d46b2e26abd0ef34f44a1711e22ba8d1321cc802cfa656099c08946ace38ae29ae08fd10f455f4f9808c1c066bb99d9d4e4c1acbbb0ac11b2da26717252db1ba5b2586af585bec1ec61044a1409a0b526256069e0c01f6db6dcfd4d483b525869274e4ea8795360b4cb91b6e76f2ca065e14140a2b4dd95474ecb98bd83e7faa1df59bb2a4a891ea2c65c70e31e83a0412636a1743f9200b16e8ee8e69ec8c23e243d1feebeeaee6bec442649bbac217ff29c0a241afe5b90a97fa0e93a00b1ec9c1330dcf2aac01c4e463028da73cd00063362bdbfa30b24972ccf1f2c6d0c35c1ffe30ede59664696baf26e0b4006c187c9e938301c7133af33362d225fd5313562d8435966f393309786f5a6275b24f22275af9bfb02515bc1b7597707935f96e7dd4ac45d8fcbd11c8f239b48cb81c9fdbda984811174bfc8e5f4b2c964b58f2e9e4c4859fa74a3ec6df64352fe45cf98bc6002a5e901bdce8123ca32f2ee7dfa0813ef9147ce8f8515b57a50b149e55d7cba0446c50266668f7224d6b467f0b811d7dc521a980af4081d58a3ee33a266d93ebb69d92c5b20392b75626aa11046f87de66a3f16235ed830120efdeca07e731ae1ea3255daa280d0e5615ed6e5391c4cfd3ec4c1dd3ba0aedb519f600115142f23e8fe2dc187284a4be9f31e2096ac831e038b540c22f3b4ce345c136e2275d270195577b24e5b0e5cae9b08b4a4375c33111f0c0daa432413528613e812b41b5270e34b48ae76b0ca217d1b92f1d8b2cbc0d2f4dd981a3722d466e54d15731a58784a8809d7a5f17500b4555401f6ed493a99dfe2a9498acd390c1ef500e407f7113d12f4c5a295095df5ca484ceae26a7114bccdb4aa81ad71fce7f5d3bea3d1dc4f4c749af97b9acbf23052f7cb531bbdda7f866462b4b75939cc206b48ff35765c9eacfa8934c370f4ba3c5174b6fad38d0a31a232c2bc501b77f8879ac7d4620a5d51cdfa226385b499fd5cdd93cd9b463bd4c660e5c83efe50d309261b367bebe9918730903c461548380f09816ef6a74f7ae9a7154b5cb008e8700206b38c4611ac8e6bc05f5d8f8df53e9fd2a835f812873b472b369601a20f3a70505b8f8889432bea4cf0613140da1bc87cd206eb29dbb96afd4258e758999d1712ff89f07c0b03c75869cfe80e209fb81659a70b5386cb9dd4da70998175a210a3d05088cc61ac06c1efc3e39abeeb99ff67960338b1f949da98a6241298d9d4254ff02a36a72c256efdbeb08f8aa7240401fc6c0d62dce2c6f6f536079ff0185d1be04c13a88b7d6797ac8c4c9c57ea9bdd3c6be84ecc3313a14cd8a70867888910c477e168ec9bc70d57b3a248600b3a76a447c78f422fa4afc2333228508ce155319c33058caf884915bb8aec939281ccaaa561ee128334d980d4db48119803ead0510ca788428c51e0bb235903e560fe2ad003577c47f6bb4130adbec10f1ed461ae84d6eb8c4fba426dd5d2ac603413b4a12b768da496c13eac3d98ce802161712cce27dac4bd02cd1197c1fd4a0b7394903dec2dd5c38da76650f0496e2b5097273aa8c95c41852adb56b2d9c5f3c4a9bd23a740ef0438e2eb96421fa0900ab938c7fc3d032944b22f7841414f48bf3c9dbede6885e4506aa5a847b7214b12afdae6ce1f017627c2204d753feb2ba4d931560f32a3c46d800454c8943ea9837e49ee0961d441c505989ee2155733a5697dafbb39024eb1b7d8548b5ffe5064aa97c3a74f52c50501a6ba818f90c753707dd6d08b3d4d556008411444482d8f9ff8f1ce3cbbd282761f517d4545bf6f00c6ff0905614148fc01d373fae3c3d813c7bee9c23445b50a95091c10627992c5925274e38db3ea00c76f163755dd479c8c56a01bd36825768474735375d3b59819090277f8dbf5cde48f31275c972e3f65e1275a7fa361f40d6300f61d61ff64697cd10cd87c04a0bb122ba9ec321071af45b4530c45ab2543570194ee8418b82517a5467d447ada22652dd7426ab9f9b71cf57934d2345351f5e055a6d4a0b90f24d4a8077a79ea522d53af8a557072bc76156071c9c36bc6528ed47043c4ec82941d6f429919c1d386c946c081a98fda31772c788a5cbd25c1dec8834cc9d21313ade1073bdfd5013f07c03d412e2f25e35430ad4117f489427c6428b1238834d13f1e89883e8db9b664ed1d89dead1033a3334abf8b2f14a89208266c666e8444fc1e4bfeec630c2bd97b97919ea456c5907e220c885030c9c7b4376ab8f0b13a8bc855617c106760777cb67e5818391064101da6eca0fc79b2027a1fa4e447a93dc120aa23e118c820810240772631cccb61158f7b9f07a649db417e289126fce17ac4bab9916cfb4caf164f488c127f00bd5bd620e715f66867d67d12af534b7101cc1349febb4c9dca601bec4b7a1b04310c4f5c2b239307980cef9d0f00d3313ab235f861f6e86854c6ae82a7406049064594e85e5a28f8e304c2bdda75c4c328de4da0ea4e6a77b21fcd04a79ae1ec5b302a567dd79e83c2d0df88a29c7589740a51d933f1e8ea6d4ccec54dab96a8428f1a2e205f5c5edc4ad93611995d6f4b47f395676b86b2124ec2cfe195f9949d222ad37eb38dc7f17afa3a2da2f52f72f8001adddfbeccf29985399ce9037b953dad8377dd2c05eb54f68afc151772021ca43cc78aed4075e34069cd1e1025384e50afd14baf9fa7782a2d2f662de22a40f0be01d1c08489656f0ce82f916b86fffcb11c532cb54212f241839f65dc7c7505fabec92f7f5fd9aa2f1abd528910d3a34e432c7d9f38c4adf7818920219f95aa468865bf2502a5ad33b6e0825217351ac93d9dcf670745e35c7490136fe63d89166e56c07de0a4dedcacee514dd9376c99e0f41e2c47eda3429dc121895f2e6e05b1ec0f804554a872bb0aedccfb881d9203a21f1bac1dca91cbaa1dd7249b308fed8c61fb2db7a5e5abfb1005880af5baa1e2e45447df2a52559626b1de092bbfeb5463e5e368d5c84f853bbd7425d0b1b618076d97b60f8669096fb158fb7b35656475caad3301f82abaf0a5b578c48140dae281d70ac37714c1a3f8a2398417a07f7fc6802544946e5ec039c6c669aa6be256e25a2bfc40090fff81ab9b92c6bb4ef3e40281b990250651b7b2e03351cfa01f4d4c9e4a333eac8ac06f28f27fef88bdf2865b96d961fda88813402513f1450dfd8a5baf2e7e9ed4723b7068763a8a2984b3f89f1023d5accf7eb63fc6b975455040aadf0679099c1195610a399568ebf32e16c9466c7286219c8a451e33b513f59bbdfbe530b10494855400bcc8b6594c9491ec9e740e3ba7093001d140b84ee424dcbec0096faf44f605e33c0a3e330a352699eb53e58dbaa6ceceaeb95104c153515cb44219a1d3f934aa1db40cb860917001737ae2a438bbf5e6904c06821b9ec15ea0d0dd12cef14252f11cc236bb130a9c908452dca84a3f834154343e4dfb16a68ac040533c49f8b69f294afc6a9bc057d00366a29ab256659034735395374c9440a82acbe2091725d9cb70df83c0e70c1202cfa9380606133ff132a31c0f0f8b5cf007b7d649e31715c1d1f055e90c3001d919a18b6c5b9ea8b630e0fb68b8a1eb1c1ee079e42a801932d2ff7abc0f71550fc75e59cc692e6becae9f0621299f8d478e9f0fbce8b148613b2b0fefc5f55de6e660b6a7c8e08e308a5da7b80a1469b44d96216ca444d8800bca2ba6114609e0e1f6311e992d8137df0f5e359f4b35953d2899ab2512e3114b8e198337070df0c11c80676f45f1ae56bf569a57ee1440b08128f484b51c9d04a284c9fb270929dbacc277271abcaf9ecc8dabc5a1549ac46104f911ad24c4962ba169be254c1c7c280af46a4ff5bd8242bb1930c4387b1f602ea0a370744b8ed5696bced71b2fe1aedaccf57a88eaa03ab5d02360e9b890ce6e23bac6ac8dae8966a56ca4e7d69883023448a7ca3a3c01abc04580db54a65d1f9ffd0ba6b9930990526a101dca2ec533c53ade55f2a91ed0ba1d434fade32a0c27b6457661f75d259faa557c33e79367caeca7e5cbd62415b6c2d37d3218cc22a6362e57076d228782dc2483f159985d357645fc2cdb053918d1b55c81a2f66724fed5047c49b993736a8ee67612d55e76e1927e1b84e55f9b7c73436aefaebd74be1d70a6bfe9d525bec7cf6c2f4f2d2dc7fed6429e060e662fb6454145731c0ebbe5e27c009a5c3cdd440c4ac7b6fd26f619cb502efe9e89dd6e73e61e04bffb5f177fd3454cd3e9e59d94b2d113f30f59350fa677c3090c9a5f953217c3ef5899c213c2e5175a126c8e6f3739d59bfaecdd94aa44bebc738b13cd71f3724ee3cb93778a90b8cb7abd1d5c59a18cbcde0d616aae73efa6a6012eaf131f801dd6f1e4d00a31ad2cbf9a36cfc025d41420eafd484cdff6dea8a0bdb7f765f6578680d95d384ee3ce892982f84de3a84405b0216190932d2a64e48f38fe241d99d1bd205e1dea54e2d8456b27e18057a6ed33d51099bafe50dc8f43f9a87f3575170b2f62e990a9fa89b44b2f39fd06eb3f5025803574d4ea6d0722f50900a026857833c749977e04784456da2bc6212aa93c485ac22ba610abab788844a2d70c2155a97d9c644864de1d04418a725db21aa753429b4f300a5155fd2372125e321da29ada83a4a5bc630ab5b2ca432412bd46a634d4dbf0de3430eec5910cd4687ef9239820ba45d1a076b85cbbf87667613bd00cf90cfbc97a541459754bc70c3acb9011b89a5b06ba67cc2d5325204c8e3eef20a3ee7ec20ccde10f042848f88d4e61aaab9477760f7b5aad9b29376585dad68bc2abe7462dfce14326d4a5eb8541e8fae4626e96b453e80d136e7f665ef48703f5aa688093330e12d16ee04d14b44a832428a48060659b365a48de43f1ad6c28736bd35aac6bb1774c5e6c02d182962668050f0e2599b3e7cd5140df513816b1b2a103149f5bbb5220c36f9d2a7043f3b9f9a9b3c27241d3ea55dfca6028f43d442b930da2e7d24d8dc9ae810413e6e5816d1a204d914518440b1c795116d562257bbf9686668ea67b9244d05349dea790a49229864914a5c59ed50465ad5f1909c025edf5c6d15987e52a2bcbf00bb2cd9e84a3ebd552aeecc590f3f75957692c81ed0e8c410b638873937491af42f5581b2b40ff64d724a02e885e6b31546ac9cc7748ec6b7a10a739e53c241cbc2edb9d22f9a6a526da719297f990d48c0545912d36ab8abd562987645b30df8e287969e2a67418460d4ae3840f951b8a074fb7b80bff00e46b6dc0f9dca78533d680a7b2c822d09d8cd74118d107909212a69a5b321d4ec99fc2347a5277e567df3bd6d857a3e0f3caa21c43c3b2f62d9641d3b2c3ab3502ecca437904be978b83dee2bb1ca6a14ae67b9df88c99e438e44a8f49d6b8dc18e32f97fd7705f5eb00c74a8fad345c533807b9b2123562ffae016e1b69e004c943359dd06e81afaabf35a858091ab605de163bb720d2a0cf39a82f4a6495262ddfd04f66be64349e415450f3afa2397df4921f9e30bf768b5c49cf90ce7ba8869fa1f24c28ecc5b245f44b33581799b01080f5e0177e523e56233d6dd35d4cc09544329d5e9cf2bda8c36ae41d250cbd4948c5880098528395a1b8dac301c5ab6a87000e914c7a284a2c90e511a9e9a32e9cbf76b74419fa3d8e15f532a122e594b24e061880dd488022fa67a0b3d66002e52a44ea9387055158f745c8da14bffe41f5b1981234a10a3dc3ac130e4f23a066e5bd043d557dbb1cc5685c8b61c4cd9921898a96d338d7524cc36ba2f4324cc3dba64268be97145cd2b4325e1748e5ee1668f4ca8f0bf9d8e8591128fcec2c8c420df4e8d0daf71e5d2dcc57772c9fd59880a863ba663696ccd54c8dedd577caf951da3a41206fa7c280ef324d9ff0d71a70726c8f8c759d7f38e83c0e4c30dadd36d85d0378a8915be290f39b18e89f9a16af482ac33d23ce1519fe8b389dbbecea3cb84347bcd45f19c805a244e99958fcf497873de32a490182caf9a70368014c98ef58d1a77bb1b1a5e56983022918302d374e39be844a6e5a440002fb1c644d3f3c405f8a9d39748daa112ab6e7c8752596257716ba2401660e44dfc081267eb867a1f51d5f56810e458b7e3f838aa591e9f1c95f4a1ccc734b21d82307116ec1f575b104904c7f419b3e7a82880641f4c1e76bd1154378516dfa3413ec6b097a433f39b8378f23a493da5073b4d01e87234255542df5482e5f00a4fdec100f2d43465fd19a4cd66dc90d1e52d16d23c0a0e09ccf771a80b9467d38b4d4a35bd306128f5eec977c28a627e6d79000a0b3470eb11d3027a3134f628633f3acfc03162e2d4e4f51dab9cddc6ad14ba317ea4b923a5f5fc3500aaf01e0e0ce29c7f90de881004552d3fb9b6c0d46d46e6636780234944273f53cb17f61744b0d0a936004f0e753291f02fb6ead9d81c5e77836a8f0ad68e1a48c495c62c3ea1e7b5bd3568cc02db9ca05ae3c958989a11494384214a9f22c53419fff616cc8500da5e861a9d9ef617cf28b801b46d4a9961c2cd5a86504d6d6b1070570172f53784fc6a63c258f9ad220e09198d7d00c772c92147755a529d3f201dc3ad92023cfd3c8df3f9722672d48e5cc397f3e4b04b204dabcd5f149a5d0d971207847a9e65cfd2ed702d9dc3b11b59fb9bf7e9509a3dba0540afdfae65de8c645714aec070aeca6da36d38fe35bf68e319266b599035595277e4e0b0b52967a596feed2e39521b2225953bd1e47a74726c7cce6043948e8480b6b5d1ec01a81b97a625cf9a55b5075c32c3b75d13967cf7dd34c10feeabe736d24bbbc2ce5a741cb59d8e54f499119555a298399181e316d871b41230530dc98a7f2470425f5570696b5127981f87f39bdc4fa716e8b2c9d3e38f9950be5e265ca4d7df1f706a8f17dfe121891d679727275a5daaa9944410b8ac0939bfa14e20d47c5057af2669e4bcdf00284628214c6f5d8895b41609df9ae79b95fa41fcc31a07d65b84f77324e9b69d015d35a423fceabf5bf1207d5080e94d70b42a283917d2b18bc42741296ab14c8f2fcb40172f3959ae8c928279a7897b42e75e21b0b98cdc5aff3883e6e62dfa924d2634ee7b457c5449bf4793e2ce30fa544f6199344ef77757187855ba6ac6edb19d95791ea765cdad2465f56bd6e6b46103d3cad661584b673c9a4ce47d314133d89c2e5fd75c6fdda32ded7d22089cad6461e8baf9f05e3ccf22c9973a0353101d520b9bc65aeb8ab4fd3552ce35d3916165c3069f0e94de54b94e189ddc58400b265e48ae06862573c37d5c14a79680b99ad5dc7b1b0f576383bb5b0f16f089f93511ce92133104b0062ec2541fb76be49a5c86d48967f8b61e72631b3dd36dd6ebcbe468255d42185bb7c98e2f70a62b5de5c77fbc691823688f05bed8a63e0a77e609f25d5d3ba56b6db80c5b0a802ea4de95c297a11545397914892aaf09145d0a32977bcd21b9ab70cca5c007a868dfd28bf93ef1a9c9ae2cbdc56d03964af1e5d38e1e29606ba8f437cdbe1f61f92e9b5331a985f05862199922046da088a22df0698d5e4e0c14874a590b2e2e6fb4438bca7187b3a1967f51a80f2d714f110703e34b6908d7a5256dc68fb8fb01e7e478ab731ac44e6d23e02564773668c396b0733756fddae0826781bae28ca32460ec81143c44e2873e912a89c341d3373deb33efe44654058d8905decfe74a692ac2454c4cb3abced055d2607f07c72cecdbca54cbe5562b31a4c8fb002f428de02f7c428495b85b3da05445277998271faa46f416aef5f57fe6e74a961fa3c2358396f819feb442f4e1dc1b1ab3dc6f4f5b26c7dbcd63080db5390ee9e357fd6c37f63ab837b29ce78f7e2f350e5fbf4004e44b1f5871a2d9433b0544bd575898334b5d1f222b150426b406e0061e6ea73c8eabe2d89eccd404a62183a240613c10d114ab26eab842d3b7fa32211c7e9218543e99f332faf9bd0f16bdf45a5e5a83ad6501474ee8a8c140b155850e9ed6c35984c7d5fe05dce9ca4c02116a9c75bf651657b5ba0900d5c042b04d8c0fd1fe0928a4e8b52466b0e9e0518b8ba23c4b039c80c8ee57791b8c0a10f433f14fbdbf475ad68c484fd2642f2888a7581104f5ac2f6293beb5165c19c03fee3481b9b854d0d8be20ae06d0aca00e6228328563f4b1f4ca673e2a0e2763bde508c4617d72983be4144ddadbe8b77b1140c1f2af740bcead25e5dc3acad60a7961b116aef819f20f4e6be2fc6123ec1561d250620fa3b0ccb50488c51861343bf09f082acbf7a85e895fa4aab7a4a2a2232f4eeee4ef37247c48e33a61ffe60b8065af17bfb05e02625db8b09d62f443ddd54c31896791a32b27a461b1c4fde3666bae10ecaed9bd0c030f69d37e656ac3374fa9f288185f9005b45d8493bb854f97f96f6f259d1c70ec472d42521c42c89f79a640be0614788080d623a8428c3f2a4b0e86c043c850dd1e6427c544bf0b95eed21a3ee9bc064ddf317ef047b7bf8029dcd1280b971fa3e0860711e297aaa30e4aecac2cb3177c09acde18646136fe3a86cc6fa60aa999deedb2d10239e10c9963a00dc38ad8e2d4ddf99fe9919f0ace8d4bc8c7ddb9ba698731af56f2abcf0b022c222bcd0c9b37f5c81da3ab56a6982349c3ab3618aa17d74ca722f0103303f6ceb8e6bb94d9ee3a07c5ab7d6b838b01be308ed44eb83fa051615ce6fc0914b197feb8f2ba0a14104e28cf89e7b8bb5f921895ade155ff39245a8b2f2c059161bc302085a8d8067bc3cfb0f2760f4e7715515e6c71c9665e7d24455991c4bb6f8bd2c427486f0cd069f577759e534736f019d6553ed8b030e73f8d1239c7f520837b7387063a443cff786895cdae591b1465822da996ce1712f51b0bc6148d98b1763d321358e371480a655b47a7095abf9ca0f1ff4cb09d7445f5ca320e413dfc2f3a40e9d1eb84971188b97beb88790e2d7a854d63e9d84a1e9f2cecb2a9e08bbd60b59bccce97fc35d2a266e96209bf6a25eee510ae70fd37e00735d1edce55c795c5fa3e48abe728c1d4dd0259f72f3bf32e8a1530c90d5b4a6b6d416d22218ecd225f9a823211b2733095d55f531f2525e31845859e52132a9de338554a1e6c364d2bc64862ce4832848b19aabea3e7cbfd6a28007c94b79c51062659587c8a47acf105a958a0f9349f3c230f42a758f485689e44d2e2b4893e1ad90649032f2689690278e8624094d07c2d2da743dadcdb48c86648e8bc719ea4376484bf4a9a8e613fc78b7ce8f0a8c849685fdd3d96ff3420b1042f6e5013ddea4479bdd32aed8ca040c2a9d42ca0fcfa515e63558d78de5e1fd49abf7e6464a0d0fb37b10ee4dc4dde502542facd127d05924f0c5bd86f83f3d0d327898cf9a870cbd5335ad66072f2ff43347d40057cfe12500ada30f166e4a7472d672bf38b3c8dc755c705485474f99242757b98fc818914110fb46a745fe9c29f441a390db1f917037e3d38b43c04d6beb9fec453fa13b01fe2ab4f7abb4fc013b652db5b111c6024e80d804a3559c4f1c9c6a4a922fd9bced37f9fba137f7d1807764db8bd126103817b39996b203d7cdbdaa3cdf6d975c4bb966f2d11b41ff584cd54f0cc9bc76cf82ef2769c428db0abdca2970564bb9519a873e3421793e28e7c6c1be23f3444ea34f01ba34ba79687aa7d9a900f92d8d2bd9f0e0985678a81fd2af7bdd885c8040f886059cd519e110c64e4fb469fa4b6abb8072127a1c2067ffc60fe2e74f154d3414acbf9eccec2a4d5cbd6de90a6fcee4bc5b48220e5a216162d61e072bf772f303227f23b56bd368a5da9717ca9859b198f9d64ad77329d6138a7ee11173fb8d69a194db41ff6ca6ea539ce5e7ad598f6d59eb45a1a32f349c1f7999191f6f918374df61abe2c65faf95ac1e44d151ee8cbe7c1352f48d4b66305830956952a36d3e64b30e14fb1f6b53c3eea6ee3b7dadd1bac605cd5ed9bb84bda0883032c8a59273c829b9993945aa938ddf6fec764d41344ffd628d704d842825c0f79504c3314f87d7dbed00674ddf262c4eaecf7f8183fae68bc10795be22d5b7deb07afb533713cd39bfef2ca9fbf23147f3b38da901d173aa5d5ec1c0b25bb6b4db9818cde5c901b35adec961b83aa6eb6590c888e4a8db98d5104d227447c1d3603418a84a8b1ecc25f3d27b9986ec2bc75ffc9bb4428cb2014708fe78e471e98461924d9c3993ff105a06893173209f4ad72c2341a7d1685b6f83e134564a71aab7707ae2079949c0d095cc2f1a6add0023e0106b69fdafc994c65ae90928e5b180a2b6d2068a30cdb94f05c3803ec0a7c0bb9e9790d022005e031a19bedf4befadfbc8b9cf425c5f8f092c78457d75bdc9b1c758485999500c0bc321e26b242e4b6757cc26d701331fb39cac81b9b1e664b34c23386c8df278cda8f642de3527bb87b06116ad3d8ca489bd4120052548844d5b2890e2ebc74528eda51755ed435fe0f78c0028e35d42f455bac446b28dbe0579266eba5c9c87faa0a18786da1ebc41d456e5c77205a6160a5ed0153b65b183967d7182b71c5db4d03830aa897ca7840a6a2d1701f2c727f29586eb3ff901df62e2499226d46c22950e9717118e89ab00a60b87e703b692e2d6f03120dd89b0128283cf7ffcfcb4ca9131a94788a8a832ffbaea0a2be513012b0cb6dac9797b94fc6362bf4bbdac3ab89aa09f72f194f6dd000e887a013d9255d78be861c5eba1ac81b144dbd622078fe43eccc4fa989dae87de614fefa09d49d670bc947be606447d0233d6f00610e499df0450fbee6016814dbe561bb80537eb7d26c7fe2ef037da754200f4f462122c0e2cad5d8363059446d98f8b028e15af0104520e9ad50b1a10906800acb8a278259d70d46391c870a7781e694df0358d5e7939e66f5581d7fdf2b79035ea158880049d3277bb34899c7bcebd9ee07aa58159b2d5e087771e936dac69203182840664beea069ec6ce58ce1e6dc15f82e51e7af6624fb9254732aec93257317b1bdcc791472c53f7fe3bddc9260185687f57e98ae66f7582b4b08e6197406e0061cf4cb2b614ca0ef1ce00445f41cf870d1c1ffa32b6c0a242aaa8326479503e05b788b4125b8f450c04863c750646e2054084a8497f9ffe8fc0968778b9a7a9522004e82832b26dfd6d96454454f50c4878a4be9a73f16621ce50d825b2eb6861ca1df89b6b46b95eb6e15e2cea2b1830275e18099f84cba27780e79de4c33fc781a4b067fa8954f0918058abd25de5a80acb36eab3500c43c278780ea3404c579160d6e393bad5dd58a8778a5e0d7c9efe4134069beed3b67324c8366b677a32df29f65d3837d9cd8e9145e0468790fa4bf74eb4378aa219a19f502abbda9da1002c3daf03774d5d5434770a45ce74d97d2a4053a60902d5564516b39da33a9b2bbc84ad4a4ab282e36eb74c1123dc72ac5f9a79302f9cc23f53d02ee128a2657c67ce396ca7eb9cdcce3af80db2f75f3356f20747cb0b8d53e505dd3ba4fa1cafa3d2b276205b405a83e3193422aac5765eb3bd33c4a0a4a4be8f69b208c1eadd9212e6decc39111b2268a8020b98b5b33587c0989e830c638c3d2aec20204c7fc9eba8176c5c57bf9edd695d5492821a2792d084e6a85c03ea28394586496e7b63e769e377c704e4df8004971f59a648db169be3f093b8c5c65ba7105deeecd28135d64a05c1015c112ebde2422a85bdb17d34379ea7c92fa496c6d60277266e66d78217e2106360851222e05499a2d1d721b04dd308f009f3a183f5b64e701bbd13d36249090c9502852b4be18d83fcc014764a5bbb3c99c6aa93e120bc49f7be929050ba8fe067c1ae055c52abb0db03bc9e1c5b5082d51b4aa526b51db5bee66f4042377304233d37a61587caf0d3a536cde6d1129edfa08f07cd9fe02519f5a9496061eda3edf912c5a19c1236d97310fb28b5cd0f5a27545f59ed4247aec4ca14a32613ba01dbdac7acf5e9edf24b0585c2628e0916e623c574a8b4f52c6fd4d358502500baf3ee93ad57f263df47fcdc35b8dd334ab0ca344b2931fa73b758966c76744e7f369f1c97b0525369fdf422613c6c6daff8a0f461c3758fda5a8ec0d002ae2759f45ed791456137a070f610c97979e3d00f698e07322c903b91b12c100de4e522e756cea4de6f4a8fc287ee2ed075030049b65b77807be02a64a0a80c37207b0b03393061b83d0e9f788662f7436876434cd943c7d4ea6302fa8d62ac3b5d862f2bae34ec98bf0d89e1dc465e5a418c9600a769c1f95f2ef5d1554477ab3414608fdf0dc8bfdd94f02a2deef70d0579708cc9aa46a63f4f594534dd29c51ac15c0dab057407399d67cc16b07220372dcc3384a8c61774a06c4bfd865bfa74611e9ded1e762cb31225843d22dac01166fe47508c44f81fb24468bd6559f0a8681df082e428f43bdb9d825bcf0c5fa04d4eb2118b76b5276406faa08d10c295d5d8d5861a60132df572aafb79ceb3f9a6788673b60d961bda40c86e995620181be9e5bda50f5046708955a2df50d54dd8215a8b01ed48413277961d9bbafda3b8a380011e6689a9b0f600cba226442038c0df4674d3a1b3a9b3345f7264322a43caab89b669b985e8435fad67150d76616f6a54e325d84b3ac2ce8defbd3e07bd165e481ab54c90e8151b78a5326b7734537adf37c5beb2f2a41cf52933179baedccc524b1584c2d619e6923eeb69b6a0203e157a515fa056e5e8b38ebb8e4e990975726601160c2d396f2646b467cb16f00741e24771a8b56682286ad84b7fe45437cd24d1bd0b8c5a5531c927920e44f846a7d9632d29728708fa09fb62735d398377c56c0d2a9d4c0ff86d8d2bccde9e447b45651d09673de0718274de7fbca93567bd72ac0e7468feb975db750539be45ecc15cb55e3075988671455278d6a4b39930688551d8cd152681191e09ad9040cf34dc9f05d5495fdf0e056e2b4c9c770045b19cdf18cd088630eb77eded92cdbc08ecf6ad46bffbd4b0f9ce4db12ec7c0adeac14d855d8e77da012954f39f2acf37d2f044d0021f0dbf3743df21ced488044054de804f39555d5a47dd705f8ea6d975beebb7bb4c572ec8532e7cea219db50efcdee1e1a8214870311ef6d030a82f4114a8139060292666da5f1e8ae0f97324bf1f1163f511f2c63b63d02e9c6c562ecdc50bebb4400c7c882cc97c58e8ef125689c88532ca79ea703fd5b3c091cbbd0c01597116ac160b0f52dc79893c77fac4adf3a60320040d9dd77679dee639405227229a1609eb1d8ec5f1a05a919df02242958be63c9da65a09686865eddca4899d034af38edfcfcab61bd748f5dbcfd0e46ecda27d1b158d62105bae9501ab4b394d812234b90e20740a91918c6559750e1747018028843905c5846d46655bda711c9dae3f9bafec467fd572f64276907196714314ac19ed544b55afdd55b25816deae1506d73bbbec16a9f2acaa825daa52c50f8858db0235e3a34b10cd4cb4bfc89b042d33800b4bcaef0dbabb8223ac6616bce494757f9f6172340e0e67feee9015e1e4ddde82f2fa20dad1dcd6ff11af46d49507fc18aaa7b4951250954b3cfe37bb058f164fa374cb923c2106cb927fc6fd91ceba7d5c098d8ef9a218e11068391f5ad4db2239c46160da1e6bdc227bbe0035df566257ff2ff4bb76c7ea94ef7fd9807d46d8c7fc90a97759af6a74550039acc3c63987e002e4e04345f2c01255f903d13f85bb1e42ec50959cf42d34cbcc96e60103480b14295a3c7f6e7fa28dfd2d1f941b080c4db89e74f1463fc74610c5ef11e09a133e01221e3c6ad791fb8237e926c572e14bb19a10ef010396eb52d2fed7f68835fb7b1a0b19600590541ab6803604e7de990c74358fed36f908c5cad5a2d34c49b4e9c0d171554326d12452855bd457de32751109e85305ed5d5b925cdcce2f0279b844761a817845805af62c11759be12ff59252f9e8db6421e332b9edddb05f890fc585f925c7bbbd4b1518944f545a96e51a79a29eca7cc52ec926e7d139f83d082b39f98c11b25bf798effb1e846c674285ddd826019a8f0b4a9840134326cc528c31d9d99b4e8238724643c12603a332cf42382aea423fe24d5f1d298a88d82cdcdb6e31f4ddcbe06218bd466f78aecfd46918b9de4a41ed0142ed0afc63633e57b60e0a32ce976cb3d7e0a4682a80fad9342bd221e6f714c32472dcd254a052af044c02b95f424f28914cfb10abf2c7ccaeb01499a5b1c8233edc118e1fc703f3c23e28889ed0e861a4765868ee3dd88533c021df4d4ad8e32e1d85944a3489928fdcb8f8818d22b48d4b33140812de12c2f1bc87bccf9dcd81d9df0e558aaafb5320deafc6ef4821cdb2611b2b02c89adeb9ca60b1a99e3f3842fa1eecb6d1f3f342ec883c8f700cab7981d8d7ba2d67c7dc07cec9ecce4828ece409693a3c94bedab17fb91cc258e03f40edb3a8c39140966a0c8ea868caf04dfac8e78473db34c24316ae58d43c634246c71315a77aa4c6ccf3c25c01cef6e80c078826a002081dd1ccb2180ad3be599127216a5c6772125c3ccf5b8eb74cf10f80a48894039707dd2275f689ea44757e55b4f2cb88fc2ef99d442fd1414c866b4f580d8a013572315012baa517218ea6e43a13121daa0f73d5a3db607f08e3e85d86eabac083e138b102927faa189c0b05a18c5a1c7223f9c4befc57a3f1a70b6bc53460ddc27bc223f18f72b45da98bea940b9a0abfbe2531d45e8e42939d773422decec5af39d988c1392213eeea3542086f5f5c988740ff55e220e688bd2775d4d69bcb3057e992456912d71b47b042390bac828469b11b12632ec7dae861b0f887f652ec46273d36c990aec6348962bc9c8524a765a41dc7d51530edf61e71da635c303ead93bb2f00c0f31d946457d2b98cc56fc723ab5bfb22ec348f396722786600a74b27c70aa136b95a3b1016c9dc544749f2e24b37b6d2839b79b8023cfe8b2975c2a8ef1c32332aeb466804bec3190aef218e8f594025a9d6472ed569e18e6b4e9971fb814c41a25f0842c7098309446172e250248df3adb0cd7fd930d241c528311ebcd26e3fb10f43ea5e424d707278ce32939a945185e9557f2d513df651bf314580bc0c7191e365a5a7ed40672cba229e341939cbde52ad4e6693175626a3bc4a5a74d0bebfc9e0ffc02b6c0a690f21ff835b1847c9cea0a5eed0844459d631b532db034e8737f770b9a74088310448ff8c20099ccd5386a7daa16afdc9c27fb50a4617ccdeb295b7b45c74803fd4819589fc5dd7cf9658c8895273dce3d20af045f475ec87b112574649e03d68f2fd48c1cf278b4371d6b38f566c6d6f40d10f9c82fa4e2ab26a8e63e440867ae9222cb782a0793677b91ae5b1410b6764da85d645903d1e8ff9d81e89b990ffa743dc500c49b17004c2b8e27b49989bda6888f647f5739f924121b7b92d1b0de7fd574459b0013d89a251841383342a89f5acd27faf6ad5f9362ab7c7d8652813d080666425988bad9ab6de200b56747e65677b1816a5a311cd6f877871a31d2fe95b337834e2a15fab7e4acaab612b0e750d51be858209066d8b5309ed312ecb1e4401dbc506bceeb82081193857e3178ae955e4c3d7e16110866a971b87f01044d6343dc3df2fe7ec44e33a883aa84574e6589476fe0b68c62bcd276c93af6ec35a6dcd7a8993646f8ce064057a5caeeeb58a6208d307496a7beff7068ea899df3f5f41c2a11ca111682bf813199c21f45e1641291b10a1a79b2f6c7d578bc9dd6851a779fd89a471c0f592130d3440fc15452610db759142a9fc53a9414c79f13c4e8dc3887b63d4ec712212495c8124964e262b25be6853aab489c89953a0e422ca533c530d73e4b6bf5818e9d6881ace8a3121fdcaf106137b692ef7cacd7baf065f98c9e420ddd58e7a6c83b5ef34e4ad7f33915e56e96a0ca5ae0c602e3ad97471090a84f8aecfd7e470c1b04bd0825d97877a5677c2325eb1df8f63025b3500ddfea2a347783a388b28201f5b22f62daf461d35f64708d37a953ed9d723ae0abacb1c829d48ed7fcbc55464e66de132939a017f29522ea160208de9cc316de881c6a1c61be448cb00dc434df1ca8aa0da9e6cf4f79ed83f6044ecd6df6135921ac5a2b4cd7212f6319308cc5ea02e7399050c2afff6926bfbde4b5886e73c3a4dff94fe6bccd4d19bcf5ee5513a7f9e13643a3ea231b809c49e2d44a300839eab886d890aa0433fa2007f48d5fb7d34a407075f7cc19eb3323ef8a30bb8ad513b4f5d033aa0fc4d990b58b1589a70a2456e0b38c85174c1abe77a3ef07008a9147a16e4622fc02db013ac7a965814459dc5bfe0973f421d2938d6d76c4a07242387ceab31ab3ef29dbe18eeb8a58e4ef37715daaab8c23c20a555d391bbab687f36a489ac51c64f31011bd4a03055fa776d953ef021759d6af732692e09a1fa4b71b7e766944a9c33060d1f3545b633c5357cb4c8890912c1a3f4cfb86a65149ecb32872fd4e25b19181edb24b15a39e44ac7f906d44ce70a8df4d80d3698818f02e8a2ca4931d98e883c008e9508e50c31e8a7bb492fb18b8c199817920fe3cbb71c98eeeda1489e450acedd302c4892b8680b08e103d855c1007664452758e1aef2547c67da987162dffba8e328ea6e9aac543db357ab21a2b34fa6d2d0d90b563f00a2b8c8533f1a89826003b8c26edf4b6621b368b494e17bc053442d43ffae0471597dea35ff509d402f9f4bca8eff1f2a73a19655f878aad9fc6025e2dcfb227bf977c941457e0e0f4836588c4e70b21df0597a2643c4d4f35830754d40b02140edfcd90ff625f846ccf668c29b0ca03f48527f75abda8aaec6d9fb61d70a4e37ee34f67bb7f5cb2c54f23dea54fe51266f36a4b1b62587438d17656567c3b389f1eeec52b009a91ab048353a533162ee5eabf2f8e246155f7cf9b38067073cc4c27c093686c720ce5ffe9346b0a8240e5a0228d79ed572784a490cbeb9c1ec1476e801218927cdecf7378303c995955ec3b37f7bb5655e0c9a89077dd4acdb6e4192f3154b6e0c4b2802d383ed8dca7abb5080de4e71c8fbeb3b003b8a40385d611f4fd6f48a45c12d438622a377a0395790b6d96c98d00f11cf8aa942502184b3f3a9171c468d8aef12ab4a3e5144399d11a7ea66254fc1f930960d85e6b27b97ab82015c21da9057a6729fc2cc45975dde466517df52321b1ccde6e524f10805722271978f1dca28735c8d7de1697e70cb7c367744044e54b47f22a2cf5eccfcbd29fa36f24adf07b41eb3e2256de2abb6bf9190afa0d397534604836033289a4268e71606cd69aa7f24ac49c821ea6cab090355bcd44eaa9019258606b43ff3c76fdaac8244653ec7b12353f250111aceec87092417ada0eb5735613719d1f703cb18ec2f61e4f23099c4e38f2fd3c86b041d9276dde2cec2f7b851ff2a81b09c66a04121d76814a5bfb99f6110610ab92d35468b2e0d0f75d31a153c7faedb5b5f317cb221c62e591764328b672f813543262e4d005fec3a66490562e244e707d9e956ed255e2742467562c7d8a409dba31dca77ef020ab96d2670c22d4b1c4d560e67772b7d619be63757942fe4ca8ecc3714d91e021c53a41a2c583307b6390634d50336f1dc499540f8b31836085d46994026c6e8c4c0936fcf24dd8f0704e3709334c9fb44dced4c7d7e99c1022368846e88c48d596057f777b903ccb4394e99d78778a6aab195a1703a106c90380fa8b125aed8c5d540644a749bf7d8e5204dd4722b1337cb4c9a4f5c70b7eee7054491af9e1bc32d2e99fb29498692c00a9794ec4dab0c28f04f97fc7e2b79bb118fc66fe070052de4b029e8b4e720921b6e01d2af3271932b7fff90a32e6f2b6dd5395d9f70efc3bf0523703383d951d8a107ac9b809467bf1e1b1868aea5701ca44f26c4d4c71d8efcbae5df4d186266cb70e3447eea176cc00df729361f4e1a20e36b0c07758a948c75fcc14ff40d1dcb937397d3bbe3fbd123a33ed85b385047b8daf11462219fb940f82a3b6214efcd5173832e28c2264a3951a5f7dd7c6a870bdf79217a406c042345cfe107ef78b67e3cc4ec9c9db0734ee8028fe3cb44e5bb33d447b327f87ec00e18b96d002c6ae7edea8cb6173296246c98fde397103c55c41db92332f8a799abb39246586c1087d04a678e717c1fe24bfc6918c17650d7afae5db920cccf764e8572d2a523e4d51dac5debc88c70ddc5522896663c9787be399cffb9a0b39d172624bc5fcf8faafd1c5213bd2f3220504f1ccd9fe3fd3dd6e99b4b9036f1337d14e76fa300f34822522f9be38d5adc7e7e1516ffcc001a2b4881d5ddeea82fe4d00a02df73513aa0ad9dc1c4a439d4f1b8af3fdbde40f06c901f49101521f97fec32a6374b87d2777ead3d750035935dcb1724b15ca3f7aa15230c6c9e25c83c72aad3031259c181ea7998047fe0077dc15c5cebfa67454b4455707d48d88aff9220b9b0464e0d4ee2ebdd1f7d155de45c8b42b307c25d44325092cf5a1a0eaf3d6112445910713f8007842537c70497273e25c6e09d92d0a121b49fdd448990f635cde765b6180182a427c47b81a384978905e7eb95060de3a2b077cca1aed6ef44a814f1da7913e0e0cfa9f20e73083a2fa707ae6712add729e1d96f9ea030fbf48586839b7935da46564066dd0405f905732f76d7cb0a51e7a4aa669ffe06afa1cf94d7c1ca47a3ab4fc32e5aaad099b43c6b8c39cf5ba23390802a9ea9f1f2a2ea3a34232f98eaa36395483426019e82b8d5cd9387beb93fb5a8c215a41a748b1aeee4872783051d8e33fa2a221a2bfa22c5c70d799392bc181a39e4a582081804d3ffddc4a5aa30c902147a4311c27d134a4bd4a2c87ca0c54ccdd947f8adc1e5f799aee09ecfb1475ff206a19d1de3e73b9a9d34c83f21bfce0132099ce66e0bedb728c767481a1c889e1d7723110c1b2dea261e57e7248ae31f853f1296ae348aae6068a095d4829e0481f73f043466bc17c9683fd9d40d35c88578d4bc9da4501a0ba945764985092176ed11c4edc9e6325bdc892e65e556f3423c1d101c5cb8b0448b58f0db9e51cb816cc3fab05ac2aa680e8f138fb0db5f31b4a68b44855be699ccf4335f932e796d30f9b9b224bfafe4df77171878e055a3747f22282871f5efbb15c80aa5a790a6bb8b93ed3d0812bd170da842f7a53e6e0ca7cf7b8d0432b045bc6b4168a704ebcff99870651619ec59df5dd00ebcffb987df91224547f852ec70c2f5e920133e69cd9d1cd17e1bad9a7564ccc02ecfc1e54b92a88aa2e0337aef5a16429171bfce939bf24dbd7d82d0c48f8de9aabbfcb66c0c16a2e24dddd460d7b09428080f0011f0e938227cb164a81517e8c5e290fadfe7022d595452b7f6723d1178cc8fec42b83adf4bec0369d71033eb53d90300657033fe52d9565595297e2dc349fc08d5801a82d913c155a8b69e9c3f10589dba7e0d97c6d6a63fdcc821e1966aacbeb9de8cd8a694b3d54302816c9e089a976d655b618712d7a14580881e932d1f6d056a0cc6dbd58202a41260dbd1e6e7d075a479a37c7d42676ee5fe53b86d7ca1a938a1d817307b581e6aee81e81f56b7701530370ba0d5d6c8ec97fd93a888e58098d22bdfcc4872919f6668c8c208a4b2bb335d03aad23a77f31a3e995cf50892df72b9e1addcd4521a48cd97df185787ae6ed8a08d3db2527e72a3984ac8846fc4354b6e7acba06c27cab98da11a331a66f1a4a5a26a1080f56c1e421468d9eb1fc9b0eade4d6f9c8a81cc7c03dfae7e8458320229a54e0af8a5d5e8d392b1aebd810342a00ac6bd428a51949769ee3c43b7dae501ef8f2074ca6ec1f3eab77b27932c8e479b9080d533235fcab06bfb681c1fdae69bed53904ab4160c33a97b2763241951587393d884ae81f606b91f7006c7eb08cea6d594f6605cd0219ccf838959870926c9944e93dbb14eb720c51dcf9d3f1a16fc5bb4aac49edcd1e2253c788a26f96570a99c98dd5f3a721eb933b45a1d81e8bc39495cda34b4c5afb301e2e4a6c50a68b90016ba8c1f2c06f024b65ee423d5e437e47ced685034adb61d7fa9ba6cd26f4984e83f11669074e1f5d4a1c4cf69471ad9687ae65c8311e55e0e4c7eeba1654b994848d8be4c048510ec9de3a16b0bbc0eafe94c4b1676a41aef1d8036c76180eff7193bca4d7e099d9235ed0d5e3a3d46862b340a1d9f5a38b735448f1b61dbbe4d08caeeaa6fbeda66747d0ccd81b6bb83cef66aab78ea3d2be6465c46ef16fc49ceaaba3dd7dd4d24ad8d7aae36530bbf23ba646923e5abab59f7287ca132afe80ea7913b3f5993c125c98cf2e2e4c1755b2d3216da2a2f0d756309c412f70496e2ac66bd9ec5b1e611ddf755e64aff4a1d0bc5cf9298c82038e8b6dce38fb31220b39c04a706851aec03a59ffd5539437ebebd02d6a3bd0079e8ecf8db3d78825108009952016e31131f4a97009745c7e10eb160122ddc759bc4c45469c94c18f5b319c39c23deb10c81de4168004fef320701d7ae784113076204e38d1fc76ee11f8b45212ab9960bd3bcacc5b2d857227d9501a384b41b6c144416a8de5811e32ea18037203b47c773123d60aeac19fbdabd13dae62bf4f6b880834084d8a5080b0a2ec43cdadd39c2abf5a5028fe9fd0106ad1cb32de2e30db494c950460f37d7f3834859ece06ce141ab2f81304eebb95cf65f8a792436a41cc37638b66e84ce1fb62d3a382a8142ea653c1a5586d7ac58db8c92d768781337240f2a908494eb23690eb711250ddb2cc61701320cae9bdc185a9e2054ffbe3fb7727d4263f0850f908bc31c7f3b21cc057ef7511fda23348bf243d03b0d360aa38b1323c594b4e056b11ebb58d76109ab506f55f7e95ca11b846f5de4f725dcb44bb09ff465f746a36893232371c5b77bdc61ba2abd57ae871266a8f2a50f388fc6f8d2d0a49f3c4c727b002e89d0da537aa45664579f9cb47ba54f39ab98a631b3669a1be6a553e3d94c586e483b0aec566499557e8ede55c5210004de3be16602f767c23993d8bb192247be6f894653fd8a38afad478adfcf4e1158f261307ce93a5a31e11fadd8f547ed9821d4b726491e0f98f878bcab8d9438ecfa94e7e08513bc4461d56d27679f55a0c5106c8fd0adec8f7d593aaa0d329cb38ab3b893ab03a96d77f96fcaf0ba1b861fedf77f8b834ba6e8153ec2336e8a92cb86216cd9b1f63488c230b7b684bd86713fa01730e48a5fcee3aed959978f575d7068b6f22dd0f9c3b4627c37915fc20ccc39ac559a7bb5fd2535bf127838158f9b48cfaf7856d37260773dfd0ef32e2ea395aeb6326cebe564988b696c1d229cd0fba43ff9c617f90199a3c4dc97d3b306f73c7a81b6b761f12e3c5c52b23e871aa3b6303089e33d4fe217cd20a786b3a186c46de616c588c89782a70703a311abd76bceb9201403cec33cf7f384fc00fb0da74338e82526fa8e74d45e62322d2a832f7a4adce7b83f800c2cbbd637e986531819ce939094372916b743449dc3aa5cf752ff1c013aa990eff33d6b38da99c3f2e3ada567147c369781b2609c0c83267ebed3d28aa80f670992a01f45efb1e206abde844867ed011799bce2cd13de7d7baae551f8fe96de45b99b2113b44c8cc46d0225cc86d3535c13470f6351d702c6111877bfbe55b19d5b5b88358502995cd879bbfa8f55138ff84e8b424b0150fe9bb83784cf66aa93048b88fe2c00a58b0a20e40410e7704b5405f687e24786aabf501a2b81746bedb77c29511ccd7f24b63e669efa5e626e606a602a2a4645f54a706be27d99d12ca18fac7f51295a25752246aff5f65bba02e2f8f3d0086728197e22cd3f8836e6f114e55c90be0d51dddd918071eb67e9cdd889cb19c1fc47855957e06aaf85c8ac7a64c7d9802b8adbdce3c641e8e841d5c3af9ab17cc907392d200e639903d7a71823a478e5db3655c52a0bc6ad64356e65d905bfbc286ca7e118c1c2343769abe1c0421dcbf895b9737446e8382e2d6aa5b53011dc57711ae7b44d59560be77b910e371db319c341395942cb9ef2a566a6422f4f355b19c32357f8b8a02859e85078a222cd3153ae726f60245621cbc9673c719df4a05f4f11a418037bfb86fe31c7043aa6ff494960db26f7ef2fa438c190173c015ce14718894903a580fb8cb6803459db55cc62a4a4e86881d33ac674fad47ed5e2fe45161c301caf039b8b15573f5dc5e70c4ab3cfce87c5790e116ae0f284297c7c020a9801555e400cca9a0efa8b2e5e8fa68471a7e75311936573905df76e73e733c6bfbe361c7a63cfa8a82b0644ea4ac26b33da6f1f19d5e8e898338e8abf31f7d7aeed7db7f4757fc087dc160647886f6c2fb6ed58d5d226166b6d77db5b4a29a594322a055a05f804f7ade75491e85335ccc30f967e5a26add7d6964ba9db5bf60ffb071a3305f75e4983c4f6612f6d1f76962d448ac8ae61d3b0b9ec2dbbc82eb2b5eca1ed652f6d2f3b4b066e941b8122a2222129355b0f537cd88a84a4b5d65e5bb5586badf5f6be73566badbdb6ee2829d010594aaf5f6be7c7d1acb5d60ad16e4ef474798568b1d41199a2a5683289b76f94524af4d2a567e958fab555fabeed9bf4ec6473c93963afd6eb6ce2b8739662e2210a203c46f579a9500481c6a4ba2caad8d345a0a74ea71007a4e2f53dfd8d5329e0e63b222088705eca1540e89b1b1f7b731cbdb32aaae080b696c85a3b33622f91d4554507261da09ec2e890b48f74a01501ed23d7954b34e6a52d87a31c8a3cd193ad68f6d2a6c3912d8720d686b5875c21ddab36e49cac5f9cdf4bae0bdfd4db6149cf715aefed5eab18a4448f35a803fa78ce79c3d01816ba5094c5751a19a27be668470dc8e324217f23c21414de3c66aab18e4675a87798e93b9a508d7967a80ef51d342044428e9ee2da378493be23f8e64511d1d1aa9495ae6ac54e5487a9a361a6a7ded1ba233456890405d58f885bda5c3697ed54ebcd9b4c2f9d2ebd945e99e81298a7db187b7b326739aed2c9e1cc755c97f264cafb54d2e527559286e793e16a6875e4a5d3d086f492975e43c4b22c56a5934585284c7a1499335164e80e3a1b938484250969e9569b41422691193485cca1977e857e025130615e7a85024366cc0793f67c8f44e29973ce496bb5f65e6c2fc639735c97b2a954a53395b9ae4ba53cef535995aad2a94a79dfa752ad563473d268fdcd9a9a6fb26cac8d4da5d3e693ad1b89e3da76ef4ae79eac6fdacc70fc3898372a0ee6c4a1a2ccf8869b1ec24f8f612bd1b47e71aa4dc85a6b4e9445fd2259d49a4fc83a640c83c1639ee2fce33118d71398a7d300a3dd61795c905b88e1a9d75af36c966779566badb9d6a559e9929e4e2b105a7bd4238941f524213722b43e1da9504baa2cbcf93aa6c6f28cce6a35d62d511dea4e49606e61989e76649e7a77062ad731b75c69ea520f072a28f0951c6ef015914a086a50c14a10172605f061248532654c803ac3244833a1e12b4c7a68332b2311d4183541f3d2862405a922bc711c318659eb5547de4b3b4b43aaab4ece39cf70c6cdcb19ae5e560d50d716a7d4762effe03555f9a5e26c04456564c54a2c5fccb4e065e84717236ed03aa0608626224ef43002a319ae1191ea330b46468c887cce2e1f9020d1d5e83402b2c3101797d7ab898f9c5fd9479e9e9c73ce2fd70fd6c524fb5a29c09736243724547e7c39e16d2a9a52143f7fb89af4000460c1cfa6d7cf26ad427435e9f0a7ab49fb4f5793aee0a7ab4907e0a7ab4903e0a7ab49a7f8e96ad2393f5d4d1ac5cf260dfe6cd2fb679376e1a0d04173373f9b74eb6793b6f9e96ad2ac9f4dbac6d5a4f5cf264df3d3d5a4573f9bb4ea6793fe5c4dda4bfd6cd2ddcf26cdfd6cd2f96793c6dfebb3e01bc00060ab2a39dcc3db52f4bcb349a9951dd975d0702e8f5efaaeb1ae86037801bc473ffd00e9c331712ac40fdf2b08000052bcf77daaaf8628c0ed7aafe6b3a97ea3ea80fb69d3bac1716df043919302005f0d53ef05e0abc04351c5cb02d857c349000158f052a1035b55b15e606fa52bdc82b77fc80954998129659494b3564a612678764a29a5a4524aa9654a29e5b5b39d656ba19c945288275f39526ed9b2b76ca7bda52ef9f6968b31cb4bd57cde6785845eab6ed425f593db68a5d25cadb55e4cabb415567d4ef5e3dea98665d3bad97acfb09db69387a4899e5e29b02f8a1b754905736ed42515458aba444faf1b489732858a2f349d02240d3b2abd5598b3383b4e15b6a80eed3890145637e86c15a518a6b24eca6928edf8bdf6f52e871307cde1512b8602ddc00d64d0420317bb070df221d193d3a1ddcd04d5842c0b568805ba4036c806f1b85efdba9c21af74b902f4a1ebbddade7b6dedc1628cb1bc564af00848038f48253c1e1848cb13536bafadb5d60ad2f4a4b4dafad1ecc10b05ebd84eeefbc07d80345b25086fc1136cd8b75ecd39671bd57a3978204dce39edf7a2140522db949bad072136aaa540680f1a840ac80304027980b4223c1326adf6621a3088ae79f6decbd929c112f404675a8a79358ef0e00d7ade2642e3fe3b6b8b6ae3ebcf5710f6193d69061446b138ce9ddfd46abdb73bc7c5b64b8ee32a4521468f5063345156465571f47fb17ae25450fa133d314a1c3367235018f511c01f5aa863caa06707893661addf00c1c67ea7306befc5588ef08d2d59e3aa0bb01d7b2fe77d1e4761581c53a92efb1d65cd5fd7330d1c575a6aed9477e5a3bc49b2b5d6daf002b25156656fbd0b3d97530606e9cfa9d351537a77deaa686698f25538c278fe8a35ece822e57d2f06dc382a8111b45468ab6c352d9327c2fd195fcbf3c416f486e7f13c47615df7f9f5578522dc9f71dd4ef72e9742fb4e81ee7c87a74746e35c4a5398e7f92afc28cc731d6eaae3b92ab414e6791c1e45f1b31609068b68ea1e278e326a9c3d401634e7a34e91e9b277610dfb1ef72391706ce08429517fa7e7545e404671e2376f94cb46c107d234e530c618a4ddd146952819276daefb7bf8f1b87bacb1385ef147f62db1d6cc58c9e1c21345806851497c58a216c5a61684cebd41626121e84c97212bc8f0a44c171d96280aa3c4932146b2882940506ef8e1644b919a0a35351a726c2823254c8d14276eac50991c43491c0531a24d39f3454a15295a5cb43216bcb44991e16f5edaa400a1b2c5c41ab02592c4d2f3527278fab5575318f5fb25a1c3fc503a3f2233d5091a1c30513e1045c948992844e4261e57b91da58917658667bdb44501aaf19861ba34c0134b8c6e6044e0648222398a9228419414a6cc50e4870ac89ae624d6a0858bda87a5320146d9c0f65a6f05c206045ffd6be1a2d65aa118f1b54221c1d721b2323cdcab8993a7af1d20343c01d2c2b621d7b9ddf9e95ccf4fc7f74559749d67f7badc752ed22f8b56625d6b75ce0ac10123a124284c48e878e1d62099988a80818c0ea722229a6667929a3811458926ee10134c474b04f9a1c41412f84897326c50886c4f9ed48ced5729ed4a91094644c930935d9a8021534212430c71e6d2f0b5d65d26df197e9489b112e40459506064e6230681020f4ed8d04211147c469e27283cf9f1c484a9e3b58f907159fbfea2ed4b9b93277ee47162c65e224eca385902eac27065b059e2aa443782bf57832f2b2112706f13a4bf397f9ddcfede108ac090420941864c40d4e342142840949172a68922242a84b67bc0a6033b06287d9b6ce0ef75a2e32febeff5c0df7bedeee1e19a30b1b91478b7dbc4847c69bdb7898f16958787333cec477988da8104e77a69e3a188c77969e3e1caad8bede8666342c428fb1fd95f4e666c53b01c685d18fcfaad3cd4f0b53a57e9d70dc5556edc3cfc78ea96db2f6d474bbccd4bdbd1130a93b31cc6188b23121a734a2b38e9426476029822f88891a21c96a6d444a0011f8cf125f21863282ddfc610460712695b42fbb147c919a23b64eef036968d6563d958887697dd6577d95df6957dc5c8de72802dc456d2d2a644c8a604682769695332b32521b22589b229994db19e8039eede20aa9dcdb29d72059dee5d9a6da53388c99544cc296b4dd588909b897efdaca002898194527e3019ee882f24ad5572e2f86fcec41d0a9b0ea3b0e9c362e0f674cfa0e50f261a5fbf63fd059b019de8a57c860a219a13a58cbfbe5f6ca12a631ccca1ca930de8399fd9aa2cb971e138e8fb6b4d6755197a967f426c55760c7d80c857ff5a2254d07216aba6c6131790e3572c1c9cb1d56ac9d0da1b7fb68c168eb7c2b1d5127f360ecef7b35be2cf7e1cd5cffe6f7f2a17b8b7cbe572b55cad9b9b9b1b30079b0d8bcd26349dfb0099e7dc5badb68c6fd9e81ced395adbe4dc78cb6d6cbe9b70fcd9cff2cf571c77a3b55b2dd7debaa1722daa7cf7c8d83432d8d98437ce108441cfea551c6b54b761733a9035ec4f297952df65fc349ce1b869b5178b013d40f3812fe8f15b5155fdac7753b8cb5f8bb2a8624bcf1665c1d91fbf095811c4414fa72922b6137afca2aabc12b85163fe5e2a42fe19b48a276f3fe79c2f28ec32613ce79c73e6eb2d28bed465542d72bb01c26799eca53dd6ca80c2a84dc80a53af1a6a69c872e5b552783e65558935eccfe794054fbe40239a5e51de5cd019689e794edea491ce5b504b67099698923e63d920e70b48a89f919df35142ad54ac1b9b1a8f461bb9f11a1b2d83f1d4188eb7bcc6c69d15da14b2104675b2e384597e0ac65363ad1abf71df2d562104bed0830fe48aec3721477532d5c9f947c6a2d7c9b3591c659fc351dbff5e7adeb95ee5995d95fd9b7b84f1fc146b588ee3c4ac271573efbd424a9052567c6fcf4e0364322e8806f4f41b159248b057cf4ba25b0c379b97d3c168a3fec8f9284ed1cbe960da9f628ef7c49c0e3ef7dc1347fb9e7f9fe7788f53a99c5389dde7612c6ba38fadec82c2ac0614262fa6d55aaff6be72a8a635e3e225a882eca5942de40ad9baf76a0f5e1cf879c13ece0389e8e977dc79e93b7b0890b663a6faae15f644220d91486fad0bb0879e5e2da71b2031b821574c9ada0e8d794075a62c2acc1832328e78f2d5a2b19d8c428c0687f4f8eadca6a02cae57f794387229b72f555d4afcf92c4f0d9eecd12ab73f21d0c52610aad30171415960aff1ae9b2f7ce763eca5cbcec70b5eb09eaebb5dd7390a28a952715d3767d775b70381cc2793a330aeb35dc7e55c83428ccefb093d44895051fa0d67c871dfb990c1aba19e772a15d40d3fd0328986677fea67563bef3a0769e83aefdc830f26adebbaee7ae71389b25079e79dd87d53de54f6bdd0fe0d65d77548df79d7752e5f9d38637633e5e56b21310041ae984e697a523ccfd7c47455ad76389f72324e94d5a06535a17cafd294531a98571d55387fe53c5e632c7756c8559da90a65ae31190567d01ab8e076288bf1474255e7f1bc7adf27fec83ee555c500d690920a9f97122717aab0e841a5a1f987dbf768309e33aa83fdb5318a32fa73cf030a8bd2a304f3d85140e971668a7d0e512cff8811eb316aec85f1278e1b851820d8411930f6181e7c30694142130808f753b42fb982c2280a319a3a68838e713ed8776434267db073afc7dbce2a524a09aea0a72f7d2f7f7c90b5d65a2f96f75ee9145f6aadb5f68ade2357c899bdf75e29a5e4340eb256cece27bc8a438b84056908890a521492d37bf5bb4356a812a1419ff36351c88b1488c2329ea20d1ab3c1e2b8f2ec358e31e66accc6abcab5dbb042497534a63a36b24a9c31677ce23889ee77e20cea998a33a6dfbfa278a728a664f5be2be3edcf5b2c2363f102fbad3863bab5549cde5fdaa63cbd8cc2aadbe978bacd2a95036a40b4167b9127d1cfb9e4a79db40705128402f5a041806a19d320b300b4c78b1af3442cb6a8600a9aab33bb0dc54b83d0a87fef8a6a1a0b1e5679345d48531b500f92c2a8b4b9ee77d26211008ec0e98aedce6aa9a77012d2452849c72b8c13d28e5718a71e74bcc258271c3ebfb4390dfdc8b3c4932febe3f79893c91657d35447fa28933aea5dc865db05e8a59697b62626799b47bcb49ea45ebc78f122317ee2c2f418db309fbec09062fb4ce80445466a63805488c14448192b28e88081861cb830098db8d4d0711992fa5eb837e4743041263d4a2690494bcff1397e8ab556216b6dd0bdf752204a690f250fcbab410b171436b9acc07141a1b356cc99b7feedf0d65a6b6d972d48bcb5d65a0e6bf98199bc51fa58a9cf8b712d75ab4c6ef08267ac7e1d96baf5c5ae3a321cedbdfaa6ae9d7352eaa2eac8db9293f47c31be14a8e224052838428bcd880323284f88e9c08f15be6ca152b754b959925b2f6d4b4dbcf7d2b6148676a10e2e1dd5189e1833d11e4f781e551deade0735967d94637e16f500e9f341d5a1d7a78f0d5f541d12b0db1086258173ebcd2f3b85d1171cf61b38aebd7e9d0b6f20813149b08395990f093838b77e0307f6ec9c88037bb62e5463b41ab34e2fa84c2f664869d36730aee7c0b08ebdea502a447bea9488524c028f9318cca7a1d1cf5931700d092ceca96a58aa49548367ad06dfb87c0323382c957b9eb79ab7b01339a6314f5035aaabbcec2c678924d47876e9a3f2183930586ee3362209d8592e7dbc96dba86260b7f11839d65b9ec3c7ab610dea306e7cee398dc3b8a15de529af4123068d731e23e52bdfc0488c9a18d859fe6207cbf3e7d95962ce7557cd7c8123caaa7323ce5a36618e155f00551a646984309f068d07481f96d388910323e5344e2392e079caa54ff6183930681c3b164950398d4b1f9673206b1cbb57e3521543e5d8c3f9b926ccf1b1e148857ebab783c6535ec3a982e179caa92a86ca69bcc6f8626891f6a83ad369c49cea2bffbc549853c5179db84558a6e20b597572f8e060e5b0943bf2242d020492c7158415796445941cb183124a4a62a410494d4f62a27861e288998e4907289990596b6584008947d39920526a5607d1348486a2db10537c2c972e6f2d9723dedabc55f2d65af9c15e42ec58f26af44a55165dada7a8a2de4c04a17aeb560fad3d5992f80ac4a7f65058f5b1479601117af5d296c509c665b9fd7d69cb72e54758cd526b03ad4be241c13749121982264844e1f14393264cd288231c9c3ad04425045f8676e661331844bdb5ca2ead4be26d8182b714815f5e3b5996bc7e69cb3264664b90962237979c5cce4f308bfe797d06628fcc294b0c3d39cb10fda4e58f3a66f50e2c45961752bcb208f91b11ae1ea671e325e721ccfb183f16c7e9d6b138ce1bd77310345b961d3fee5bd253dfb5a794d61fa787908346b5d748772e1dd07570af4f9f519df3acdac07e34638c710733aacfa87e6f38c37e34362bc733027007990c5cc2713250c9d7e19c7356b2923f177dceb9fbdce916f4dc4bdbad869a1d7203ea7103b20308248070f23e8fd66e369bcd4a903dfdfc01ea0988147e7cfd0065c18f3d19f830c6565ae953e7803ea5f3c9abdbbb39f7c66a6d369b95e03301a7a7b0b7b31db20ec8e6c3d08ff266c342e647e90465595ca2a7f308366939a4680457a627c2932ef7952557867efa77411324274f3e60bb22c40213b405b1296db99282066c0675d0a997b62b3a3eea47094e80f2e1623bac8297362b4a6ff3d266c5e8479e16289864ab218621a28a8c39a34290213422509c74211285ab622f0eb2a21a2f64f1228406259204b114831125844e80841216a5234a4593495694853e67b0e87b69b372c309e6eb25830f6a85851f2f2b403c5ed6c57698151d3ff2dc2794809288804a4a4b262805a1e365415b0aa5306f5fda94a05e840a3e841c585e20111790a88249b45291c7182c32624b0262b339791c27e3b5de9fa4019837a8146f9535b1636668000014010013160000200c0a09c30171401485613c9a0f14000c708e3e644c2e14c842b1480e85200882180662188618420842c830a31033771b00989e5b914918a02ccb6d0416835a848193c8158a2e7ec027f7be103623e33ebbf834e0f38def885faec17607f8f4aefb8437c97fe2e356d89781b8121d651c3ccce06dab39f7f19da82702d3f1c6802c784e13024b422a51aae2e1b50515c296748cc6db0d5291a248304bfb69ae87c0eb192c0dc20895dc036ac1e93e8432b71a89434e19ee4f57530456283977590cb07c90d2a9f646458c1bc282c5f0ae0418a4456c338a24f93a947c18867e0cc59314f41437665f19d8965855b15c16f28d9f19284c3b2ed4eb5a868f78c327667a5c5899c9cf6cc67b04f455562a5204e91b16eee4b9cef904266efd19dc931821bfc6f2f90c2e18521a18387c200085d898bef23d793f22fb09eecaa5ef8d890787020ee0143b91c1fa8fa54bac50c8bbab31ab7d53dc97f07636559f015b5304b13b1b2a57a1621d4047e8f0c1d7421b3984e9b46291cca1fe1bba0d63ac26905c2c02aed201e833b778e19548d8d010512e37db12fed7286cf60478e699bea61b47355e6bf00502a9f1527b490d122a34e33ba27672c97a91606ec95e6393af7ca51cbdf248e90675ec29f850262a51951230ad6e5bd29f3ad6645bc61245bb9c0400085e2c40e89571460cb3fa1604425394aaf83712cc0d4ce872a4930e68e9073329d76ae66e2b91b77a92932e01ad141e0673362f46564fb53b04d7aa9c358f8bcc9b42fec0d23aecda2039bb1f014349b9bbb6eb766c23497a0532883e238aa46fb3a5f2ba3afb2b85cfd8986a3047ad9d2670f5c60d9393e321f452a194d656d064211f21a44665479fa94fc2cb4cf7eeaa100af89fd77edc8e15658e235f355c6cc5c378c77230ece3ef818d58c17289fa2598d2ef586d41d5faccd2aed7c0095fa29e3a8280d6c5385700532e1653c9449dba25f126760aabad2a6be02483d063bd875031c61475359e0e1d4afeb7c7bb670e346dd1d4fc43dcf0a45e575a08e897373020bd21b69a087fe8931ff773d7c99285f53b6737f3974ba323d5a415089102330435452e9803d74b378df1cb39fe2b87400ebd4020395b4b68652b773ebeef05b9b491894433dc0ae7ce39929aacaecd3e0c48649c3ce14d1d7152301a083da03c2619b9b7c83bf0547a6e9b510b72a0e2e382ad7329210fab1f30bc7ccf55dc28b8f3c59499878af43356fda9ebe8f44423fda22a7951cc2e50b70a618c4649db4a0623276b86eb59280c3bf5342d8033678ab32882083b5f0ec2cba64b65e186fc5ea5d0fc0fc17132c68fbd2ce8b1ad9d4025b8c854dcd86f2b992110f73984a7274344b15618c42c251e991a390a02a4c23bf309d6e703191813c68b7693db014aa4246105e70cf6c16f6faf38fd6f34a89f217585ffc819c2624edcf9005443b19a2357dcb595fd403b57af08c3bb192680deb2a1567981ce40f46dfe515bfd4dbfcff6f0d28c31ae519bc24dcbe60e4b6bf329a1a8cf552dcb106f44a427daada6161b8a5ee902f160edaf5643de349878afb583fe58b7b06f1152e62451129fd3590fa992d16f4dcec95d84cd70d47cdeda2c591a4a6ed39bb92edf0c425ede26bb8d2edde4f68f86433ebdd53273dd32788171ffd3243c2286f6cf308ad06cf6b006afe4c3404cd10ab62bea468b39895559a9d0b38e3d9d101f3af69ac31f7079c5762221711be29aeaed2038d7d8de1faa94833f4169f108bdaa843a5f6d02d3921d6e9492c0eeeb74c40de7dad9ddd2eb877bfff0284b34596470e9113a07291e009484e500edfd1682eb56272a550f558bc726d95d43897af8094442b596f1bffd58d54746ddbf89ab910d47fca733764d5972166179d08514df1a237eefee1b60dc344f20a60bc54080bdf67e8f48275c68619e63235c5f357e8282404557770d43d2aaa88975faa91f95cb7c3511cca450ccb072223b67de9c7584c055bc19938ebbcf748a84109434f0f7448e8a394bfcfd1adde39e286bd7fa4c95d99b3381f86c91a65ac2202360170df0e451a63c346e79513625e17bba1d3c56b0e724e9dcab162b01748db176ab40781e25d804be1d309fbf18e9c595da9e6e90ef7bc411bb9e2e95ef9f858be2485cc65e2db166dafbdfe285d186f73c82e5b2874200c0ac648a1e6031007f5d24352e049e67cf442c6fd0a06995e8dc71ec083911330697e2d1c7a51b529cebadef5cac4bfc8ee9a21454fb29e3fa449aef128da0cc360dc1339ed35955815068a22526c742287a1926a9905ee78aa38ec0fe17038791039dc3f14194011af1b465203aedbf976c0d581046356c82c52c12308c5cade897c54c111e9d9131dbf6ec436fb20fbfe7d3b04dbaca223534d72f6ae2f43d628e57ec637da691ef18e7f60240c4dba4152f829f9b8b2578a1b6470b775bc7452c4d03844685acbc33e1edb1d67dabfac8408a32c9b64728a4ca8e7a42c16e7b84a6cab0339859cf47efdb1871103aa318d517b5f69b4a2ecf8469f6313e8e49a3cb108ed74b9f8e9e8f80b1215a8ee1d0304de3a0bb15ef1294ea0930e1cd3e97945cf2b92f318441bae1384d850d33943dc40cb805e344765f739872926b5fe3136b6fdd2d61dc038e97f7cf9303c1369b2d58637a6c5f07cde96a100d5ec6cda2da0aaac972f1c05cb797d4ee1272b6ca43ce8d3de36877b084eed6ca013082c42967476815541d63e754bd315f95c91d3be7d46c3f26af7024e64c827d9eb45249e353a042d402c4edeb7faca78f123645c9cdc84ac435d293e5f6811f318b0e2dfd7fdfcee2945392a9e6ea26aeaee385813fce1b286cf891cf5032d585063a745df640df76951a12259b1217168e69e076263ccd0f5cfee0b3fd7f32eff89ee6a52fa96316fab9d3b17461f276502f39c0fdb9aa29462d61a3d409a46140a38a29d74fe3672929288b93bf136fc2bd987cb4fea2ebe44d59e68ae3bdadba3696cb12984692f2a4930e471b1ab988c74bd1838a75ea0f23ed56f9854521f9d02d37ff693fc8195e07fc31a32176fcd1e20c27763fe34894b636006e0b09ee0e837eee5b9e9eaa0275d894bc184d5c447a82b217a6684bddaa4eae7ab873ce8eeb230413f672b36e41ecb824c259d54025785b952f8d03825b5d5de0cfd3bc8e99ae9d6904b46bd69f20c2e1aee9ed84d0ab9d45c082a15749180a9211eceeb420e3df13452cdce4dec06e4c2177c80f66187fd2da9973691eb71d3c689031f7b6f691aafb82fd4be08d763d738c4d338e57a715bd4024380718e1e2979ed5ff44737e4c196f6a08c7bde0c2ec00df9f718646009c9e9844492b5642803482ecf8c6e4e9ebc29099a5a99dcf6feec9172ec34c8b945fa0e5057cece2a2607c3af641393d88600916ec31ca9faf1923ac850099888cfab3d4016cc2ae32980d8ad42c2e0e66a72d1ca45b29d38765ee2fc1d9fe9322a77080b54b06b682d8630653a12bc83d1264da7aed4cb3b43a9db290cae5b4943ed4eb9ee4481452b99ab278243404a4ff96304fac13a1169a3e5c6b65ade5094119efd164c68aa88ea46ca35e0b2279aeb8e9714af43c0c34babe732b1fc98921f9bfc398572d24d970126027dcc98d58a9f24d873ec465b1d9bf4777d98755a05293aacbfba963f2f9c65e725588ded043779d880a067c2a65e96e5d530dcb7ca5dcf7b05691faf5a56288f57018dc60c06a0bb3655ea5eeb788fc4b5b81fee55dfe2567041769ea457a596f940eac4fad1d5ee5339c47f87ee914c3be06ad2885866c16250744f830bd38d21dcdcb45d16d3b1724022329532a6ff7481f12ee63600f42eace6b8fea91ba49fd2085c69fd8bb7167ef6798e617c5a24e843f4c85391d53f990fac15c3d98e08018d16d05ae4908244e85fca03d767ce45849c6595477fd68e8bdda9dd746d78463c2db9df5c4795a72f830b0bfb2ca5d7f25791efcc5f58d6fd1fb13787e5f51f0bca311d059d7dd972a1c4415b590c4433d05ada780fc753c350bb8c8aba87b2f79202e4094a892354d901cd410462a672cd75afb3647362ca52bb43974a4be27a15e6a214a685b2c5ce585aae6b88c278d0835222b968167798cb242f2573588386a02110d9a377b1a31bd5b3d98598c3f428732f5c69ecc6768cc016632888872d32ce94caef3fa6cd33ceb3611af7c34a2e52492ba8a8f30168426485bacd9504b26b2d6d1304960321b34bb06ecaaa622418e853ac70b59f001e3ccb186d9520aeb2bd076bddfc9b1b0a2f582e6027e1269b1acd8070cb600ccd8a2f85b0d5eb35983c18eb73b182f774b2860042d5785f4c5663051c0004dc1c400a33ceadba733edff8e26e991fafb93be53731578a7f5a2e97e7d85419d39a7dfed74b59a53d983e6f4843e04540c820146d86d133645e1dc719e752d0693982620fdd8f3389c1c37dcace79805215823342a99e0c7133813602c2cbc7986e7aae3c10ca6400659cdb0711d229a898668d61034caa1c02ae4596d43feba41290d46d045215febe4dff193c384fd58952cd04dce819c8dbf4f4095690d24c1f8158726c99d7ec4eb01fe810c43dd326067d402ba721c04ede7babd2c67e910d79a4fff0b6d2d21e02078f7cd0f1460de589e7af2c909d7a390bdc96c85da8caa7cdef99e2764fc18d1d142343bebd81b4b8b3f343ab621dbff133017049f19795e1401768e5cef15191406166d205cb780964b8ce7711afac745d7be8ba6f92e9afedd28fa7cf230186367ceca57f6753916aa8cde5be30c6b1b1065a26f8229621bf59322661a3c8850d69de867da9c27d2bd9d880a031300e613b7e335a8e989e812e2b5aac98e0239469209b00d34b0321035d602aa04f2a711a85aa0f2aefb8be72b3ad5dd595287aa92c3191a01be4efb5747c2f71c573e63e981edc5d114838e8c861302737b7916c324f6d8eb7c298a1b4a9eab4cfc4ab5c3f2512af886c985be2e5541d365f81b1c6e0eb7f544039a233d02cc5a8c183d07a91fc9f7c33234cebfe34be61f571b1190e4a67acf0c0a78a37a85fbbfce0e548116c26d1396d6c0ccc708cd1b63e2778b87187183a6237853ecf31fa6b97099686a15c011d16133e849e189a53688977b38dd8c13c43ccb4a0326179d5717c3ec05b7c0b54bb576c4f2df007a2495fa6e0fd0fc9adfeb89b8252a953e74ef28e831476e11a82ccc9a6a991dc0c709d71ef90f5d7d803766936745cdbedbd1fe4fc9ae4812ab85d2adbb8cf59e6e326d979755ad7a36011a2572215bba538e1ea84b54d55cbca088a77640d451722848251c511986f92f11a6f8097b97715d89922a9f7b49977d58668188a8cea179c7555318881aef46b0823a5be75c6266f95501f2f34efb64b710187e3c4b29f47056fcb69c8dc2d779f22d59aa062312601bc01570aa70eda5c221169f28f3added6675906e36bdaa88628970700c17812281244195e3e9e7283795ead410dcc50245352aa1dd851040fa1b7275b6d15b1c0c96d41759b253ae1acdc01999c99d63a429746f005ff12a556edd0f80770948b44d066cd34570587b2c99beaa4cdf9cb1bae45575bce653a9b239ccc9b25deb010487fb2bd17c7615fb824e615bd93528da357fa7a5156ff16c500c9aaa9158d6e63c80636f2d3bf9af538c9a78ac0c15577094fca81f09e56e0db0e9da2e3eb96a29d311677d47210123cb1f5c280b9dda5b40e4300203008c89777715ab7f1e6163b93c1c72bbdf90f822f9aded38bd2ad68687281cb3c43646c6eb96f8a9acd584fd7d31571325dc24d1de874c87880cc8102c4bd9b5bb2513e744a311a7053fe5e9afa8a4d3f0d0f3bb80101cd0126c40fc1627572b5683f3e5a8ec5f245d197855824a38f270a32d87eea8f8f62c1be8a5ab489f1088ec1d332458daddaef6f29d81e378161af43bf911c63be9b84582a6455193e3838ad4e32e9070c4eeda73d1624e99c169f8bf8d010eb11e47528c40212e2c55019ba43bd867c0bb562bfaab3c5de8103ddbe764f44601e2a9f1931b52602ea4469daebd1f51cf29b31136b34f292c278bbc1ed0f10328d2e3093fe0c699f7a2b9664432ad4d38bb5c759a5fcad2d651e822abad4cfb638cd0460e3c1c592b58201ecf467b12337be038553761d5c39db6cffe76b1843ff87645618c183e5319c429e8378480ee12176d5800098c994a3e701dfb8084500e9495db7fbfcd21a52854f96abfb7ac4beec6081ccd818b01f89126b485eca1400c64f29eddde56568a8dec23128d3872bb62bcb98d88b339afef8178953607c60c0c41550f79021d9e421e32349517676f0fc2f0793b680d764cfa4ea9b8593502e6a04c4a9599872951bbf4e0c17d10c344d91f43be25c7c599cd36307298414db393f72278d449e8c6e06edb014c2f86a358fe7bb3ef82698583ebbed308cc6a74912ddb008ce60ded223441826b86618a48fea40b2dfbdff7cdd7dca15c09040831506ec6714bf9a55993b6a1b5b3f79f5eb77dbb53637929bb3ed543fbb6a3cd8f434c710a6264a352ec3631c973ad833468cad12ba0629eb3b0f145ca0f0d4e7ce7b211dd20ef45a1df4af4ece9f944c6363ce483ccccf5b3a2338ece139b89dd0a63f41c926910273c32d29b43ce89ad5c5f0272fdd5ea5e382a0db2d8e18379592d2a9a9af8bea3d4892b3e93d8bd7d391b828f131bb91a2e2bf0a4fc7d41bdb47ea4b28846ace474764432644b7ef7f4a8db50bf10c1d627eaca148ae0e3a94cb841aecbd07088f09f39db94318a6cf0eee722c62d8acb28d322b8a866c9408a4f663ba13cbdc87d8c62e388311b8800250c8a3699ae98ec3612037463b73af619c579494025a94410c08e0300634f31e0bd09020b2c470ad81c500b84327e6731a65068997c88375b3fffb265d0b0c8c94fa31eb680e8fa4835ae03397f3cfa37c7587109311041c521f91e48f1be5eebfafecc8ef0f69dedcb54714c855d5e48c05b98c609423aec5ba6d29e1b1720a5fa69f7363923ee55bd81506e784013c87138ea6f7f45a12a0bad8d0df6e1eba13e449e2526018a000185722362d10a790b052a490e810516f96b5efde7d29530f09db88ae2f3494ea667e0bfbfac394c6fceda82b35570205bd471adb24299b28df9186b35eca6c69352e5e3aa566557a6b40a5f66bba500811996e59fce88f6fd636849ba5757be88d86493cb4bc9b2e28f4ad5093e0303fb79732eddaa3a966247aae5746eaea670d3684035205caef2dc3daad48b98f288f211502dee4541bd64644e1ab8a2f0b98bdd78c0e041ade0a0371542644385b0115d79c7746050bc39456c511b9cc7b460a21aaadf00480d83f2babe0e245891bf4aa1363b04b111a929a7bb841a9337c4dad568cc172744ae9db165f673b090b40b5e378d81352d9ac507872c3dac047f74974f574117a419214323984f12cd69d60c35cd3690e0403ab2c91fc8ca32acdaecd5ee65dbda7fdb14297c358fd04872d467e7989b79f2fb527bf0e1a428de0307381c91a6df7c3ba4b736c4822590bf0804a0e8a742e2de1739e825cf09e47362f7816aaa43f1bbda55d2658791a55f53a1aeaeeec5a471107611ddeec8146439ddacc43c967855390a11a7821147d1bf82b605a77564d89f206d2b200d1a2435377c2cca092347caa74ed3c5dd0704506fb367b8d12c06e50f8d680b01ce01017553dc9d5ffd66f1d56e35e8ba0f6eb90869923bb92016708f126b0bec78d003c2433cb61d03adca888fdf929327e7116c13d1da8c6564c2f2363d5007e48e941a848390f15b5a25c74ca0239613b3a5df610f2e49c79c92f743c8060b5014c8905deb2efb254979b01ca89e9ec70df822eb13420ec6797c2b3af0a50e8393410aa8c1ab6507a745761f854e37478f5ce54db6529afa1bb5048e9f834da64ce15203e31b7db6653992e51648a5a031f3ed1e5550de6552788530f1d63d2e27cd021e74f37d000327638d7a08e5b8ae12f030a537efb13821624406a7c36705c6b9b3e4027f12acc6b778f6a5a040ecd3bcee0a9d378bad94b97a9485aadebe2ab6500edd0279e1d085c118b2ecfeaa87c8630b5794aa51df3d4b2022ff58dcb989729a6e3f341d3e5e1adb25bb6924f7fe9a72efba75f221a78289b13fec963ae515d8538f5d8054d4aa5fbdbf7ea9c128ee97d24792aef99736df33feee7761ad491ad5352d5c4678e0314e84208bbd17068745e7b9415b2c933b958479831f0c328edfade14ce9f85ee501794ac75d19444782796bae7b5871858810cb0c5d41e0212a7aa92ec751a43b09d8f22bf5615e3c7fee33a5393a0255f74670d97dbd2021ff2bcf97f11be9fe641ade23b06386871a8cb6e71c82eb23fdbe746c556a108a4dc7800eb7d4674132e0f5adfff8754ec6fcfdcaed98667a4eb1fbdb677e06a8ab297a9df14a8cfc21efbe87ed8e480aa1d01309e09712bb01f7dbb33e40be4fb23d3ad57f4b366b720bdada3ca76a015450f2c53f7a92a83b72f51b62baf7e4ae5bd6627d48b04705697de4c190f68e22e7f179ff5607c0dd58bd89a30ad2261288540cc561e97df78174cb3820b65636029a43a14a3109e2a4374a3fef6c246fccad81418b6071dce7d10136c1b44ba84098bf7d58b6b375c28d074a666be0a5f6cf2b2de83d5f3ccbb927657c8da5aafe15b75da191ba5c005fac88593c7b8dc0d4d990956877462b51ee5bd9e3f90a382856d3a352bb911be0644b85d762daeddc6be7abda790b4dc95f02a594394f9083e133e4ccb062f0fc65535b2a8f4f08955181238de92ddc74e039c3f846da46d400f61773383cfb8da64c2be1c36a250452e92628715cee3d9fb94d871a11d0a6ef2979287d668d68936821ffaea0aac1f274f4e396343c548b83c84609b0e1150c5843d70f82fc0d0d7a790772cb121672942b007f88ee9bbd79269cf4e91b6ea77051c09507f383965d4b82a3900526e949c12ded965d35b96b497d15252ba1210c95df063d29ae342015a53f470345228501473d6e9a74fa613c8c2a3dd63c1c5fd072c161c432edbf025cec5b5af29f17a9fead5e50974898f4986482279be1f17349c99cb9aa57d1e71ed3e0d127d01937d4f63018f5c67fdc6a67622e1e42168576e5d039f188a2a527f1b1dd1f988ca81ac8c3e0f83d81002ab3aee53bcac33279dd5374d1ba16979ffdab7413a2430bb9551f472ea203b638ddff41c05dcd30cadd116a6400fe68843ddefd5d5580a681ec61c4cafcd848375912513038c2cca55ad2fdadc7e93d5c506e23aebce8a2927adff6965cdcc621949a941afa77449caea66e6e1810f8623f00694d85b41f81c1e4db43a8b39e2fd5a5b21699af41625c32177861d92c34d0844ec18319c440736d198e17803991d32e998147ff04b7e5f6eef5fd0705112c3db9b9e04ec7fe46daab09e53c22c0b600604cb65b8c19cb58587cae1289e9f01160ee7d82a289c7021bd75b5a47722ecc3c26ae6864005e4be6e028b8dcc95db416b950f50f7f6fb57170826489268f4bc87526cef05970c4480989cf099ed8bda3ade779067f2d8c0093b27f0dc003ec048cb60945a206c05646cd5a4eb3c500660b4560b4af0120a86a404bcd9e659edbb7f9278009bfb7789735fdcca68b9e6d5a2cb19413aae73e87dc16c39e48509ca94f72de81cbb718aa03e5051d062541650e8436d298e78fb38bd26b02dfbf76ce9105b83e6263bfde4e28526282a7a8c2f1cb15c736de9b13f2dc81803a077ad320891df05d0e8d446a487f4a71c445e9b11996ce27fefe63e4383fce7f7ebdde2a94b9708bf11bc88ca8724a1cf7e8c4f8a795ca8e3353eff372450cd6327caaaead97cd858c3ae19a085bef96a5f47d2e3d89817149d93f835e68dfe7f8b4fe5e5113e02037df3c9ca94845a23fe07ef2e3c7fe58594535113a55b652e4935629aefa55ca3825df96b8b56527dd701653eb8475378a4a785c1ed3aca9ac6d3644264221618a6b037575f4448abd86649e7742e6f912b13a547434fc205cf115126f7ab7888458fe8a2e9a5563ea715ee34a2292c91aa81292238d642aa2940c670e1740e0749025b4cca8da944a2891cf922762c6014023c2ad8865cf709d6ef1a1fbbde239c299633b9c9b3142acc5d28aada54eca349fe00a443ec7076d67091ad02c17ad7690a7ef3f7f38c3617e6380cf6f867417bd0538333f3435a090005035f0da842d32f4b135c3f511c40781574c8d361bc36b14f286e0566d931f76b419d7a29b47d20a786fa940e6cd6995c8db55948e16cec2a1830ddf0590e7eead4b6a33d1e21daf910defb2bd191f8e57ba228afc19b1346e70252fe2c2986bd104e8280b8e5efe1d9f4f215d7598b2cbbdf3e210e500031bdc08894c8377f8cfe3c32603d211ba7a4b849b82c1fc526d7f1b1729281e95dd3c8500b9b33e5b9002c74474bc8d910e240d7e741a3cc17f9931153642614e0328baf1ef35051d82f47428ca9839c6ab0ab7a805295d8c0748b18261016dd0d5dbcc7e12d031986b067ce84c89638119e81776b7ad322bb511ca04afd103fb17f37ce67a5ced8e2b190d7f7d521cd75e1df768830b5832642c82d99e7eedb976bb8496a4091321a9bc8de97025536044c416166523b7df181f7dbab106974ea4c6732931df3909ad32a056f3397181acd64f70dcf68b1826e46ec47d44ece7198b756bdd67e805aafc7684b12cf49e3a8768965efc4b964cad40f16e5a979bcda32448fdbaf9929301a2d3cb145011c36ecf2ee0e81cf649459abf00e003e0ab0b9fab99e24e6666903adeaf6f8dfd9ac7491afad69c1f5fafd031e0249b9edf7b20829def75bacdf5d8c49006ccac5e5cac51cd1af40670d5b653bba6418c9fb1336feb9467eaa902e0438ce862cb5eef2c9f7059453c00857756c37c425e153d3c944e4afccc99e0094080c12ac35db4a6e52a0ad50ae344345bd97695ac400a1d0c8f463062e98a34bd25677222374e829f26b9924ab9e703b01daeb1083ded6567c8f6bdb4027a62402355a4da9923dfb4ca000ff4eaac21d134c38bd05c5b1588189d88f2196a09687cf2a2a780e992afd03336a5a390b94662c1e5fa8d1129bd943960583c0b65097d0440ec8fc8c689f29f40620c38719a36cde0939c0e53c2d6a95bd1ad755b49e1f339fda32230935b21c22e1c9816788c05cf67156ccadfd1cc6d691f77f2ddcbc51876420ed62d09ca8343b184e8d760948b53c7ccfa4eb036f06e64537cf07e73ff373e83c0245509e0c832f08702686009c309ba3d77aaeccc416025e75bffdec0698ac90a85965021e4a2c42d6999900c6c8f4fa56aeeb399313c1033798a31bbc30a0c0febd5c1fe906261b8b31073d4bf1352e72b6489b453c4b07509ca072fe8853964af4561c8c2037d77705622b73c321716b68ecb9c5af3f4b11cb09cd4d1034086774a33b0d472ceb84110621988dbee5edb972a3f3158aa29a1acbf19e2a27d72f22bab16f1884aa700871286bba4bb8ebd4c71fe5b04ee2acba62113fa1e4ecd613785870e25efd81138970d621315db34fbea3fae56868c5dc290e08d10f85c95a4f545b9b248dc6074d2a3f4e2f08a4bb7d7cf51c6a6ceda59ddf8b3db3f8194dfd57e10fa10c845d9cddd4edb5e0752cc8e656052ad06d032864ac243a41ac47e987e1407a0129d67bc554c918249c5600181026128a62bee9d726be0a0a6da73030893503f5988a7efe822824f68a57c54408496a3903f4902a7d395df98192d62f75b2a2d5182f2f248e6a1daf0f1cddf12a06c26c7d27bd27ea4b335a8c544d8228aef7fe4556b94d3af6289a5d7e8b45f95b6cc8ae96cd6b4030d92e2f1e090fc9cc54b005994d07e32f93f03be491c338be22422cde8911ee503548eb9eb48d0a0e6f130df0a347dafef88e4c8c04f45dbb453b3585bc565989b3a95009d4eaa2c91ee9fc04d6e699146bb786b7f3829cdfb446812ce25239efcfbe60b851f13e3bbfd419c7aaadd21ef552c585fbaf8204c9854c5fc49f07daec8b2f0b8cf517b273e933473841f8b8ce4b96d8e9ed177cf5c77f84ee2ebd709c7b30d5d90f6d9d47b00e071c90db1733bda5a0d62ab1c74c3fa1777569c6a1ba4056a60020c835f6bc5eb9a13e668667b0a123f794a7e20639d7f258a7932240c56eb802616ba1fc2b8d229476cdcc57db331849d8e7844e905d752266b2b04a65debaf453c4363809b859dd165b7a33b1143b401a3194e29d9635dbb52da1ed8610a3d5e9b51026dc960b27da8d0a3f5cc496f25362d26b697593cd27af45975df25a314192f111b36f0daf876b4cf9f3b7d1bc18dc66f21e352ac4209e5438ccee0c870d319bedf80f595551c92cf8e851f31fd912b11fc887d405ee0f50b3bf1735c159200cec2b95bf7537a474d16fca82c3983681be4bf28a0cc386f2805467540f4389bbccd8f939f7ca4e9f4f2501f3d555e0b1481ea260741a571aeaadc026676de7293bab0fee0fc083022ecff31efa53baa6d6ea943d28af89c7489085cea2123dea6224d5e7b30be4118f91ab836298354e3e63643bbae88b8acf8983ddf4f864fe16d33682895b0f724e3b644553e2e725f62a87dd6e21059ea84a4a7a4e6d3ba6748627875df80ecfe2720df104f9bd2c4e02e2531ee5ea60656b6a592a42435ae4e5b5c56a20c4dec0e32b35f3d3d3910a8416a26d271d2a37743e7b7ec35df88cbfdc4aba41c0618bd0e57a87dd55190aa3f505db4b9a14c2efe16feb6ef67297f0610a097317a76876fa5a4913df44c20bc035f40e8bdf27b11455e8014523d3b0d9b914550436927068fbec3f5d221eff2db982a2f24b7f077eab8f6a101d483c2712ac74f203ae5e50b2099ee5de0ca44d39cfeb552393a854dbd4c19358b406bbab3c699ddc12e6ca58e1b6ea04211c46ca4ef877bc207af2d20719748b166e0fad6a024135f03d5d2beba20ccd89534f9b09ca4dd56300e35ff8729ca329a1a5c4ede60a96a1d29b4e27a87940d269d09506b254e2cd69ea6d029ea00ef0d9760a2ede76fed5ef807e7fba9f9bd2eb4d75329cc9060aed016fa9e490fb8c2cc7e81f56070c2862205e9dcd1c7916dd3c153aada1c3e7d3c35d6bacdd24069d9abd810266dd821183b0afb215247120729cab3894bfaa2f9dd0aa6888abe7cc3d67eb3725f154a4f4ae92e6aab3b017388271fb49e930b9383bde460c3d3cdd291d99cb9e3a26649a2a5dc1535e9a76dc85998458d3c89e2a646e82354afe9da2e65e5f90b4b984829db9f9aa23023a48631112b101058b1abd63eaa4f08b1706e74d3d835ba48f2424297c4dbb9746d7358c0c963f19ac678d15e6de3851102f71e4144c82770f32705f484dd306de2833e55edd7827b2c6e6d5e6e33855d8f913548358714ffa018f6fc35495c50963c147b51637280ff2452b58d1446e7b262d3336c19aa885bd053fa826128e299e55f4bafa309c44dcc79fc262f2562076af3d2a271918e43fc2532e89e3117934ac24e63b648fa44d892a7a134d1e79b4e9804aa692ef7b7376bb64d8cf9758a4d10bccda29f62c0a684330f33e01857939a961336dbafc69a2ccd298bf5cf286f4e2f62e6b403e7616005d1ee4605c394f62954dbf11c5f2ed6ce6ec4321be122a9510da044c404f86abd0ba2bf79e3dd63d771826361c50580ceb727574ae7b78662fe4d6cd5d91d7077b86edfc1d5582e9d6ad654f1938d73cb253122baed0e42698eeeb33d7eca46400fea01ad96ceaed26fb680001629ed44d3b916b10623afa3e49ffbec01c185649cee3e1c4f410639d94eae10363e6733b6328637b412357301d66957c39a302bbafe346f4aa2131dc22d18aafb7ff5dbb5da507c97c974c7cf23c6c812b3af8283ddc0aa2d8a283526a0a92243a4483bc83e7a3266c500bc97d921ac499dabd7ef82c20d4b41977d89c8140e6e34b73e94244ccb8b731d9dbc3b52d30539f0879b84c441c22d67057ec66dff583ed8bf0e0f4d99d93ecb3e828bc7c3a428120d4d1aadf56c5cb4b27975983b21e77a5240a7bbd900fef2dd92e953ca066da7cf0a9dd1cb9c6122440fd6ba6aed433f29a149df1fecb5b98717aec49d53d2206576c1363e4806fcfaf0941b2d0625b2d923aa8d0d83bd497ad5ab49e6ef6d0c54088effb038cc7e78a8690b4fbb2d0c0e009b10934ce02c856fe524f8ac154b9df090b3cb112457259953e4c1cc5ff96940ab17f1ae828e0df741978b46faef0f9c1b40f6d05d717c8db81998bfcb72ec962e2bcbd8afa246712e1599288d6a21ba2c02b864e3844dc33b4058a086d7971096623c282c4f72539aba661b56b5d2694e4c2431905617b082c510acab07a176c99599a5f8be0b5b99952339d3651bda34e21499927f8da839944f377e08571c2f2d2956453d26b2c44805ca0f6eb00309092758465c337f621ba5535789104766d24ebc12401eb45d4a0d8ab621dd9c064cb781c29298f65ed41248e025dc9200005511adf59d1a5603bbd07d8ef56b27998c3def23b11fba59b376bed320662ffa3d15a5d738f2a4ecc8263131e4f38c45e8c04fa7374be031260839b70261be32b0fc68c386549c02289c58a02f7bff68622691ce6fe65b1f61df95fb3149b3738f85e2d1ccd5c2aefba17d519ad611c2a5607d8e50f58941f5bfb01ed3cd5cf1c78ab6552a2882d6e54f9d07bd86b16bb26bb5f9355b8698ff3dd275e74b909fafafb2252ac78014221294791d8cd4b24882b4516e945a3e30f0e18a5fa20eea3c2bfa93132baf988a47052641150c4c7110e49751cd1ee6e09d14c2cf23d15764b5d25f24bf18fc46e5e02419c1479a41795199f46b0cfdf11ce4d258f68221e9e5068ca712476b34180caee9ddd6fae356f902048ca71a477cb485003d8e7ef09e7a69245b4481bf8aaea355b5bd2ade886e05ca202e7ece079c4b5bb0e2ffc3c4e4e405639c5cb609bac678159f1155ea867ceadafcf77a25860479f1880b8b95c895d55bacae1d3cdbc7e1db430bdeed1b332d6b2f4166db12ff4f7425bd8fc8010b4f2207ea74911d25a7255eaebaf472ad1e2ec45b4ce9c6ff362f2b317db711dc7c941ead659765139df6850f8eb0627ac9241276c0cf992ffbeab1c34f594fc431a855b4f4c5ded52ef21342581bc618a8be87050efa7b297ee5497697be9f27b8dd90ac4de0ca2189fc649f1d6043901cb9030a0209487296e14aa48f18e3942ff9734190c9ac1e79477be06be0354973b160f13ab9600f80500c0c9e289a9b0a091837273e372dbe931a235bac364c324ca98d5c630aa90172ecf4efde6cef80ab0a73de01f670c25ee55d2d07e9e5cf730f9a46de300b0a25658fe2d91648a49701d4a1c26bcc814a42d4f6e7fc875be9fa32e116b096926d240adb5df0f8df12bdb057638f2a5830863753564977c77be4c5159fd30fac61d7f9019b336e532a8e3ddc9cd1fabbd14a67ceb04cf4c6afb8488b8ffa1740cc9b0ce4a2a5d7005b2bfb8a4aa9a4480f363450502bfa5870b8c34ecb25ab2253fe36ce0510797178114d08ba1b16c5fb50336fcb26e6ae784dc27cfc498cf6ba6c816998c0cd3611d04a15cc866f1830a3a0137a0f203619977e0fc3a66ff4fb49c394c79aa228da0ae7234abbf74e8290791fa8c3c004c70af813204e11584d341e1f411252d2cf29de6787960647b6a2cdf38f8dcaa4e6992627e1107e2cbe0e8805898a1d1602541c264890f363884839a328ddc88cbf44e82b2038bc7d87f2523ea82a2e9e0063ecf478cd55ff0cd9f1ee57cc33b7d60a4fa7cbe7ef8758ed9a84bef51ba6fe91c5d8c51c94522c4ee085931c1fecf67f6d2176cd97202061d9eaaea83f58ae223ec22086e91ab78405d7cc3c794fe9e9d7061724cb6a513d62ef7f2f604dc5abc7f644470a48d406e34cb3404bfe426b4983715fb8589ec296a445432e2689eaba4533d3af6b4fa442626a3c4035a70a1eef8a65b182372a4278b6f0552aebfee3ef412b8721bb1b2a5e0cb3e396dccc9026d1b16b03ffdd25f1bfc5b97ee7b8fc338b56a9769d66ae2e9fe04c8b2604e790a12af3665f0e5f8c0fda92c50ba13bea615276458d40cd25719869594053628a86404c366f55645a484604c000fe6c8494cdff65f7be3c983af618f68f32b77d7806c7516f058659819d22a02cec012f44cbe3070953879b359e3630a930c81a152386e31268bc65980ac4f3fe001fb1898641976bee1be8c58833c9bf5fb0d5651f3610d447ac4021db39bcb78759a46640540e2c11bb86eb01a7f94ca03a0bc2c57640c12fbf7ed8573019f8b4a3795602a9518500f0b6fa28229f27de991f25920078886cd233cf9760b0e531789f79e0374238bb9031ba824f33280bbbb54cc481a51b38ab9830d3c88fbd1de85d1a7db0b10051a704df5b185e7bf866eaf11c10335dc822da8aa8fe9e14384acd96e5e6308841fc09ae10887ea8f0ce1ffe8f0a0d86a8090f97af0cfa887d6cbde2396b3b334b1e98af4d43e7f544602db793a5b6deb281040e410382d446c4b4376e07a24dcd80f6b45bde0f24b48a4a74057ce1203ee59aa86c59e049e835b614884e3d09108e76f81f32a46843271d186cf14460815ebf44ab97587c4cddc1007c1577d207208f991c066eef0fcbff30fb0660d180117c9703c0cb2c2198f71f036748136f84dcad68710d29c9ca8096c2c5fcabb1ccccc6935d0c1209e5b903cbd2d6a6db3682bf6cd28eda60d5187effeff440d88b33bb4d8e5b4f9ecfe93ad4ff73edd7cd6de189f3540cc3904ba391360ffd9ce67db4fdd7f4eed8c4f1af8e4ec00ee0624f8dad9cfb73fb1459f8e36f76ebee17eb6860854cdfa8be2995345ab0df8e161c3e448918a645d6e947f711204aa7d04e3b7a191c13d74e409a81b6bedba82756a7c2dfa14f53bf8e365fd372ad95f13c6d14fe822739188704789b5ab56b5f19fd709b95100714c17ce51facd0082b329e702959f1976f15e55a9ce52e3eaeab6aad778d68334ebc7cb9f189ec84f2829efd039d32557eca8ab91f4f1bc1bf021c530a5bfe9c9d78c0b748b06029d9c8a4707a3daac1d71ac6f854fdf908bbf65a8cb9f4a1fb67843b3f85de5d8b5df1918565ff20727f1d72a7166cbb96bc0b17ac89d453254f3116cbda815a9831b1d70866afd43ee884e2068eaffdb736f1f11f33aeeb180046c5d99e553495d695bb48ea7ab245bbcdaa78a5ef853502a74ac721850ba8840f1a411d4014a91dbcfee1b75409eeb45c87376e3559e4b7b213e096ec8759cfbceffa4099bdad484e823d52817df05c2381794d2827218fc3fa6a12cee8e20e039a4e903ba7491895a00b8349bb4f596f11c0938c835e2817efe69d1eccda905197b1116800e96a0ca1ae5a06a8f69a5a38d0b81f1417edbef72a501b74864505ed528cee60c7088646608f4452cda0531409e6231f8aee27785f5bfabc1fc4fbcdbea8bc4df61a890c4d37cc400cfb81acf003f10526b8a8ebf7c28e9cd99b981b8272e141b646e207c0b72f157a24d493e209d03a8cb83415ee09f886b0429f9f80089b94193b077d2b747eaea045a29e612f9260614f13fd9a1c0d43de6e768e7f899ff61a30f1fcb41bcb780ce589478994a05067398c3b72f3c66c537e48a6d11c680a688a8e97d637249fb0a5267b3c3690611be43138a32e870b52fb3f21159437cb3ec664268e21c7062b880a277106017495af0a0a8159430d780dc7d82ba5e475b2ee154f90b6aec093db5c15da29bb806f6b7ed7e558bde232dc75f60034402ad2bcb37582f880355ff9d4f3df4bb763f9a8899034380cc315c831699d1ae655d843e4a6ea27f29d6a32597cbf3c9032119f724dc5c4ccdc602d18f7365e690b00e7df4125339ec5c44e92b5f790ab75e89bded6f3de909f2bb18a1a5e94ac654cd0eab3e22d257d85a3853d706441dd209fcf480a75db76a961b1c25109d06b7055f5b88598312d3a84a537ffcec37a82b65d2d666859a22511ae03382eced532cc1974c5eeec09242584a1aca28be03282f243f947e643348a16b41002ac4516a078140ac8c73b9d94229395f6664d563ea26109b68491d070019627809a4b756ee2fd95229c6e9d7859b28d5e2cb9e46f12628d9b3d6f4ac3ec91cd02aa8f2ef8efbfc5addb33f2c3d1b89687130bdbefb5c642ce92935bc0265a986d2b57358c9eeabc65498d500dad5a003d0132051f40a5708003ca111a00a00701ff298af84bd16e602e52630ab4a6dd8cc7b9b7533adcb3a152321e902c3fc8f4b6688cc33370f14da751e68d291c81eb0e22c1ceb7feb30e20998779bda58a4c7db86eed347bc880272bab651b18cc1b132d59a7a520f4cec3c6c4497ec6deaa824d46f7f20ad1c3562bafbb96454c551f9751e2e091e6d087873e118415d85f52cbe23a1d98256785376e719d4e737e0b881616f6a6c96a8489ec410fa152a74042fe6a1181c7decaa2ca411ebe2d9fc6aeca92ca411ebe2d96c6a7643052e010af504c309f0b42f41bb16db2e4dd4463f0f669a7c7914972321d382dcf1392e330707960cd21ee1a578b7ce0bc1cba10377ffe220e93c38db3cb5f744e414bb6354eb576053d16e59025474619db36d9eb764e16387bfbed1870d5f072244c9f13d54e18e249ffb6e6d6afdc9a4e24fa6368e03bde95f02c3726af40aee01ee0ba09d73a24fd312f001b55660271805afeb3ec7df2de941706ce48d44f41e60df90106108a4509cf621b7cf686a0f62c6b55247074ae0e7fd389e0c0144364ab42d6e5880a07b753d655fdcd565dde3005e89e0e1f5bc9480ad8c3512f7aa08dae06fc5d22da27dd19b95909e421a527849e6f6e5018213a7b86b1335d043d0dcb8cb03e0597b74a30c63d41c724fcdcd772ce7f68fd21b9336460714a4fe057a2343a806e4728b72f524a5ff3f3a2481d0da240a54d565f903557548e1949e516a616b5c836823f86f43a0b3501d187efb2836e3cdb7da4829ab7a8e500b849c0c4810b16afde7b822237b9909bf88d09096f5df11fbfb1c810268638216a5a74c645a6ea32baddf47aceeb9695ebb57ec2c70d7ad428d756925482bde1de323973ebb52d713c1ddb72fd24b7dd177716f7ca95c9166a391b40a521b02b7a303ef1ec97dd6cef809ea4a256f9c6087cf11249f145d32094a7fb4ed5d050583d7830ebb4164da953ed051661833e084221232e0f24ed9aa9c649d0ea3423681616e35ea0451a3c27a3fd63b6ea25008a3025870c0a433f5d540ff3c066c075b43f8c911f44f15d8771e93f2875abeed9110241823290e86745c73f723aeda1e656af63343d12e2dcb0a93d5f8ea4eea63b7a8940b059b7a53fe3a1dab3a535ae3ce6756e5b23f598e0dab8253a324e053b567699dcf47a752842dc87adf949ec1535205ffd99fcf361b8a239de9b9794877adbce03bbefb099958432ec1ef77c8a24f19bc7bd6424b2c852e116b36315288908658a7b238131136da0fe3c19984612d69885c6121b83b4c3d1c63bb5548f7249646b3c0c876ea863d204b1092b568d852e7e00c1d7a52531bdd9090504f8cf6a96fa83d315c2f300b05b4d02eb5775fb748bb2a0188a4d5c89e2579b5b9fc1cac830ebadd64c7a03e7dfb3cf754471a9d3ee89d3b1399cfc5bf418c584106e1e223c28372ad7de1a09b6ebb5ab79261bd9d3dd7c6c9605167be20355cb963b35aae53ff33e2e0b838eb005b17d292358115b5de6912c744005b0990879690f1ee6470089cc66f8c3befb8e1e0b9ad36f9273db00fe397a0a70fcfbd0b9ea95c35db3c4e810aae382caed2f4c2ae27af5d6df9a5e16dbcf0b74e04e82bb0b9b5edaaf849430db8a716c874a130c32ab04a01724c2d5a8e8a326ccc726c43fb2e3ef4af61f30b8d8dd3cf84f002230935d5c3c5d753367bb36c5cd4ad5f8213d75044687b32d791eea09e621cd21b5ee8a39647889e064a5d2b4a8713af7440ad457ab5f44da3fb0a129a55b6f44fdda5b827574b88a182490a2de18e10a1541a6db1b23d3d922eaa731d2d493745fffd30c9304fd2c18795ab144d5af9ddcd047240863f84ac4d7c7f83c28e2459b71e636da72d487d98125e8c5ecc157264232add7b2cceac3a53f4e4040a801538cd18ef546f69ba6a8bf9c423880401522ade23acf285e090a874c2991523154866c077f18e1cc3ee7711d97bb56c17b0ee9f20a3f421bf3dd4c94abf6ae86d2c90d8f18b402e7f8398fda9f2b1cac3cf0f880408a43cb699e52ded9b5d0016b282e8da9657b914bfa7bda68980990040a959859d7822ce6b9b69820739b1fabc95fd62251fa7bf7461152e6909454fcb6fafeeb4aa12436620a6e04f1dbca7d3ccd3d41ff95cbc1ec2457052f1949f7ca30c53d6635ccb162ae221ef680dc4320369e7ec9a793e033da29df53c8947f5064965f3edb18e6a8ae122bdff99fe171952feca3fe8a17194795c3a37037905804280b53d120da0c23d36548b143a6c9613d772a3fcf12a599d3ea6262dbc69ec3bd4b9cf0532f2408f3b3701463cab0321321102ec3aa3982e47ee59c8783a856cd6fb0e009ccf7af5f5852addc9256ae7d528114de7051b73b5cefad501498dde1987cf70de596e5f5a5368fb15a7e9bce3c8b85b76f96da7d7e22fc7b7b7f11d6e7a6b4fcd07afc856e25fc88c2e3d8581046f1a08b10d4061b99f509953bc788c229a819771868801594595951222768ab64579b6a1a2467c804ce2c92a8b74e071c2e6e4a675c6d3eb7ecb8850627dc0a32733d4008a019401b8557a07ef6cffa0626524980954515920cf4018b282be390456ad41e3dc013a723b94196a6a9295270f75da2241b31909c88ad2db46d4e9d9506709ee7179da5121d000eaa70dff69ebf55c459ca6b3cf227c59e7ba6854b4f4761de18313876b3ccfb741e83d5b785a3babece90f10c1ee198f24c774f9025891a38034342b77e31b9f78299a56d2bf1d2783ad7f31b7014cb403dab5f28b5b304e4a4e07b5bebef2555b5e049161afbebf8c241c4168f0601d65f7d361bf2376674f57c7e04d679c9f6519f23a9eed158002a8c2b00282d1119abbbd30e79835c8269e517072c993d7f26b00f7847d696defbdb7dc524a29930c080946086b08edf1c8c634a39836e79c136c49af1ea408096cc99c2306b1d5edf43a317842bbf4d61058ce39a99f406754923dc858d76fd8ac863c75fce6c95357b5daad0729420a21c6a45b8f396210e931d64debb27dfa50b7a00ff5d61078baf4188b4843d54fa879031a7c7bf7389a2e65932e4a1ab5c65ab5dbddeee66e6a130cab479b87e4952fd5949bd4366d4aa772725ded6ae79b73d53730bc74da3c349d6b0b4384c18250c1989ee8c0986ea55306e023939b20dc44a95c34ae85add366719157cacb5272e364c94b29a5c49c662b9d67dce8d0d84d125c71603181c3a0cfebb49fcdb28ec0f786aaa1cf3d7733c4f3fbe9f0fc6eeeb9077e7e411d439a73774873ce3b79358f5ffb053def4f730f1c6aefc0f8f4d3fc0335f740cee3e71f38dd03371be31752bce0e2c592adb56a5e35bf165bf772383457f2abde69a0f50aead0ac5bd7c0a1ea1a18ffb31ebf5a87a6abec163323602e171294bab4b0b468d1e2e2e2050f2f8c4008b5954ee9850dcdc5e5c50b2e0af3543d6d5ef0a14b697aa1b5a9e1b6d1c19bb531c2b5d9d86c81d950816203c66b8385e402c99a26ac247aa4a042268a24aec8408402498c699ab919e28619d8f8a07a8d0dd36b39af31b1c161d5ad69b139d235914fe0ea22094f172dece42c604091c385125c5081b1982e4b893652da3091c282b5e50c8b69cd12f991694d088ce8ba069c5a13c35553658ba53543debeddc24a819ad9fb7c645213859a2790400ae9cf0df424027090ea5598450587de74ebc997aae62b5f160c4950491a9e4ad52a0f5b4f157adfded3b72fbd7eb54c734b07f596cdaeb07ef55eba915a2bab4acbf6ee1f60f523d31658ba8f4c5b4c99327600a4df5a0b447e8d9186f469e7df393f1d2d93e9a073e680eb0e19398834ca90445a20e565f8f3e3d2a9d24baf6af9d003c281e990cf7c6bae5407ad9f0e2a935114e403facdd3dcd333a4db8f85022c7bba83f83772d0dbb34cb0002449a3637f64f5949ea6557dba046c8e2c1ef0f4992c1eb027797a7a92b2cea1594262d2fb4854e2482cc6a214b21e9694796a851063473da4d54302d3a1cc971ed41df4cb7eb586c0314600294550a1148bb10e7088c10921489e843d44cb21cae3e71248a1721014f6180bf2a59cf3afe3c00e4c39ca7da450eee522cf539da7dc47c7f9978b52ce79118e77df4e9471bdd5ee1ed8ea0cc487e7f8ae702e2a8ad82886031621f9c009a1a43c95f254562188d0f499ee014d9fe99edf8c339608b821100da81c678fe9b341111c639f7b1f6814f340a3d88e09b6acc884e9337d84e93353983ed38184106319983ed37f841063280f21c63ecfc39679f1297633e9234c92309128f7c094771d053ba3f043b6d2f4992e3f203e528eca45452847e54eea183b42b5126abad04cc558cc033b16bfceaa28e3e69084d56c51ef9a5b34efa02374b9469abc2460edb0036c079764c9d09435036e8bc153d702b77bc1ed33d3a428a38d6035b9f4360b0431ce0952954a07365938e026f83aab094b09984b351b638c91523ae7c4b62dad946a20e794546a4bd09e4a584a245512638c9146ca4282b76f24f822c1da37126c5948706521c1948504cf6f96122458d280db5948584870fcf6ab4dcb0a016ea794524a29a59452aa52e9a828be944e4a5938e0f61963ac32de15a51aa5b49b2de79cb46bad2c2594522ffa997790be03448102c294245b929c208629c66861e43b40942f67cea49901cd39e79c73ce39e79c53071cae5673ce19e39cb7351f8a2ea68023539a294f4f6efe6f166cfe038f1e5a6bad8dd1436badb5d15a6b6d64e5809598d0cc6abd1eadadb6d65ae9b49212790a93c689c5248b34ac25787e64cae24c165eb2a8a2e924016e9f79684ad60cb876679aa34a75463e9d916ae4933c23ddb071baa2746549e90a9759954969add66ad4abd66adabddb9cdabddbc671736e1cd7759ef7759ef77d28542a8787bab2f4d2534a575e3ac65c5eca2af2255d1e9146249223d288cc21891c12a6294c99a630679cbe74524be9299dd452fa4a4771d332377dd432376da487a420b9cc2e61e49223b69473525a5bce4969ad96566b35edde4dbbdbc6715de7719de77d1f0a95fa50a914c6383839393a2ad5ce0e0c183c52f5e190abf0e725cd2bf9923f9de44bba7421c97a82c3159d450e765e7a4d12398805d0a16b2c4a4c44144184a524c61815c072e244b29c68b6d2e9c4495da26389e04a9608345be9942c11605994a16d79820503ec5eaed25ba516af02c1808260678ed8d8f485d3165e38d1a40d9a58b8fa3349ec191d7c80628c113327315f2a1140404e5638ca801c4f5503bd7b3396af36c10726164ca8d0ac21893cc2801c5da6d0ac712793d3101856473c5c03c71549a60f90193694c62d031d01b2a28a154a0c10eab282a7ee619aa35e2b66d58a2426a5b7c68d01c1cc3cb9cb0c1066a67c4c9da093a87f0946a62c72f8aebd323fe79c9252a633528c6877c00c922a4480ed56271582796082d9302198072af94aa2c2660d06c89e66a4fce4187004476eced913435c02faf198c4873026b228e2430d5bd00491442c7cbd00053b7c31534273a44d2c0432c3431c63a604fe32f3e45b2362a92853468b2a96b070bd76a62a6a20f29a2c2238aa7c581f99a87043859a0f557e64888b2584cc93146e9e6e5e6efd71c9d74b4e31fb5a7175d5aa66d70b38ce7094e972359096f9f295a1c2cb97e5028edfeefa9134228e2994a64ffcd536859029641fae7678f3e6cd1b1a9f5468419a249a847182072e463d680145922f42b489c2451464ae9216529491228c106b2d0f27786bb1586b59b21da458a2515cf101969a3a4288d28d41403020ac13667eb8728407d2a0e04817315428a18225a83481408a1c34299cc0a8430ce129d1225df0ed59b91430a09c8b5515580b4e9313b8c90a37a6070d4d0c02823551a130996de229d117b468eb54addce0fb91698c920f8362b8006b1f99c680e0e735a6850f5f3074f4c6dab3f218ee16fa02dac4024c16c5d3d3354fdd93a591a274e385010589b942886b0531511471ad406f960f5d4a405c2ac4802fc460111263450c9523d60a626a78d447263143aca04c5184a9428871616611f3c24b0f53c5732c16582d285d1b6b50145cc68069b2816b12016a5ad16982728515309cf1e186cd88316d56a0810898a4a622b429861bb7b064364c18314888e942890857c2155704324d6773a881b0f80384376f5ef09d47d88746477e6e79e621cf87b4104669e8e510f69e6b8ee3dda107040323e7405bf4cd2f2a877786f73def6e60f843a578c10bb5fec386f5ed8705c009de3c8db03ceb8d967c8cc2e6b0fa09465fbd2e3df5d68e4c9fbc1db2bee33960683de785294f7dd3a437411da7608c323cdfc0d0e8370f04c3ca834eaf461fbfa9ba3eb7b9751b783dce3730c7afdfaf478f945f0831d6d303b6d072173ab6c56fe5f56ede75e1f4558ccdb5fa7d3cac7f77bdebc791e33ca88773f32db776f8159a2c6ff9e769de722179abafc0a11d8fef8140560ea30363802b9007f52d87d6b1d7fcb9d0e4017ff4ebb0aee3305ae01dfa747268f4e1070353e0102a7fad1b7149d6d55abdae7ade01e9bcea5d3de16e5ec1fe6e5ca75e41ce7d82d68b32aedf4ce52ba8072c3fce5e986151eb46f41792fdfd48e1888515641fe32b42207e8c3fd486d3eb037ae61f454a4d5049a3a9bff09db6febc565bd10a529043617e98c2134d1256f5b3c1c9bf1c487fbb9e9d4fe5079e4f974f250d569a0c883082075e295cdd607c169979012a020546c880a4f1a4b1005349cfeb3a5444c5ae5deff927bfaf537217f7b9c6f577b7ff0075c65dac46983ed289f584a3377e8ef39ee3bcbf4e925f5ec95777d439fa3e8ea4111c7cd5e0cbc5dc3c08fb176b7cfd6c2003e61cc7b739a7a48f03beba2e056a29d0fe571f83cde2fcdb7cfb6c7cdb07d2e732f7ed68fa1c9802670a94ff695e0aec323885022978a7c061885fbae639e0953e9b7f9e4b304ab951ea71be81f42947e94b8c92160ba2d9b2c9022b585650c9b2828812d12fedad99dddd1e0289c0c2a287eb75c373d87bbd06484a29a5ec8a57ab9b43f7179008d2477aad15264294219d8506f7f49aae6bd3644581af4b77d1eea15212d1d78f77af6b1a052ba63ebd8244b4e9bc5ad32561c77eaac2cf7973d8deb9259a1c38f438c2fe0dfcd15f6d77bd417d4a30f4e5fd09a996c3e9ca02b75ad6ea977fdf82aa10a8d6c054d258b1a25881b9f463a350b8c723072bef0d64c05ec1d0b565b74473477c43694f3bd8617c2f8f0e8c9d9c18aef215f62f06485dfb6caceef57b633c0f8c1d70a503624779fd6c7c299a42b9457d207d0fa4fddd906ec190045747c2aa6b1afa965eefb1eabbbb810c3845a9d7cf06ca46a6df8ef8e6cd9bcf06f6542ba22a65aae70cac16e0d0557f5cd2ae41debc7933a33e58cabae82ac1153d6edc4a487a608eef562136bda7fde8ef38e7724882eb86bcdfac2db0275f783a392335cda70b69ee9dc0d231c24f8f19943d2418ce2119b5ba8ec8012a72d03fe5356fed68d7bc73385de5b968cf936ee60292df9ca2bcd3d14d90f39b43a3bf9ee3f53acab9d6f1186570ae02511e3f1d280e54390f1b281e170c8dbef3ee7a32b7d1a37ab4d031a3e7746c4e1d1c42f9e62a304439e73a60880a8d1e80f2cdbb94a751cda7bb70b04f30fcbe1bd7edfd78687e739843231ed43b94779c7b1f0fcd557e55b9b50335b79973dcd5a3858e4dd7f11d179a4252fb78689b4f774119126301c2ebd6773ce53a60989343a3276a1c7008e5fd181cfa7c4be51df04e1f0cfb78685e8f1739e8e601c7990b3e4fe8ff1a608405c7eb0f07fe6cd04e035b3aa8ece7c74f07feeb4b32d95fc7f9ba0b02f9119f64b227caf9ce2791f71d0f13fe02f901c2cb28637322fb403827b23c46f8abc10f10bea38ccde3d780f8b3e5f9d9b8f2cb21f431fe84d4ed0dba63668dfba603b564f40df9f35568231df92dd959993c453d3d8d1ccd73cdd2f739e79c4a33c8aa6cb4f6c9fb6cd8cf46671a03c46e55b05923ae5a2c0cac67e0f2bb71abcf1cbedee670c657efbacef3da3d0f1c92aec25b1eefba39a777eeedf1e4a12e46e752031e3172285fba063994df85f4e93b831cce68c220872f303d39f42558395c19d1ca44acb2b5411ee8796881be6d177a136554d428eae6439413c9a1493b4df3da3daae64314fd788428cf51de79c8b9a6e5903e3dcaa503f98031705eeb580336a3e6dacdd6b91ccd343581f9b28456b504bc5680d772484290e6b545ad1e203345938964c872946b2670f7f338533bee30a6db1cea986e79586fcf85e67b618fa33ca44fafb9cab32a4759cfe10c0d72f84a79061983dcca324fe9adb0275b0c7e1f8ee9433263f7a6f53a7378829106c3fa4eeab37e6d6ee510e851ce7d363426af025b4a27d989722179e6ad6b1f0e957b8e02a70b4d1ce7011f06b803a6c0afa37015366b440c83c1fe7a38e34398d5b160ce8f7ef3264c9fea393787335ebeaa787a1ebf51391e8736efbcd1c0ba8b077541df6deeb57b39047aeb759a7b9da779b6cb140db5ae45993e75c68cd7cb7db5c2b5766e49087a94872404fdf5140ed81983f7c38172ede3e13dca3bcaac404ff87401675fbbcece2109411795bf4cd1f40ceb144d77f0d4523aa9a37c758ac6a8a75d8816bcbc7f9cb1f005c9037d9cb550e65998fd003ece56b872e6bde75c26f93b13326576e46676c46576f4647614c6e96f4e52534fe171ea77d658391932b8a993c8387512e69a8c8a9a3aa96976439fabf037dedb3b1c1915ca3f1dee731d94d3b7ef64a79d87d7c3dbf7d23cd44d46454d9dd4a40695c479377167502a0fdb89f334ff74680ebf4c24dfcb1aa528ea9a8e873d856a7dbfdc645a3b9dd4c471309c9e3ae63e8e0c191819d3cbf18044343585a364c8c8241fd8647650649ab00af45c074cb904797c822bbfa0e638389ef3354efb874346e33a0fbbce69e771d6a0f9ce1ab3060e0ef626d31d5cd73e9c29e501e3f4a1a92964c8741219273239594001060c10ce0a83434fe5a9662b3c99c9923e7e938a37683ca0c4174a627882ce5698528f60b1e0e54a7d9cc93cf0f4e34c26458a2efa773187fd92355c48d6f0d87de90e78b9aa112fdd8b36e0100836e4e54cf6e4a50779f01207d9c7742f1775c6b9c884e9c365998b5a968f1421f96897b9a873d1e7328f307d34f71c201d8fb1d8b4e331a6a93cc676c022a41eaa5cd431ec38ae03e68041907c7499f3201bd080ad57c7c938f7064570ae6e3dc6b81ca47a8c859df41af51418fb3ce92d841121987c1765942828ad1ed6438831eb12e8587521198b2e2d6534a5f683d2fcc0cad11522af7d9c5d99724357e6ca132b4f6f63888438c1e8f36b1b42570ff6b09bc0bdcd2544affd5c09dccf0936ccca9197728884e99e9523da255032483229ad14b4a8b4aab47c9860602d1f5cb115040ca669b321ae5005c05a3f5c15ebe32c882bbf7d9c05c1c686208c04f105568170faea415daa1d470831d6ee1d7311528f5cd45f8f23cd6f2b02334ba01581e99afb98b908c9c7e6d287746ce6a2163a267dcb472e80109b3ea463d22f951425342308e4531dc9472e426a45a03dba8ff6988b90ac17b5fb68bfb9a8b3e7f6d0bf1ecd262ac46c082933218068595982e1ca109736abe20311576b0a6d01f17d9c5599a28a172a653ef4e28c4a98bf1f6754bce08f332a4b135081d34f975deba4b1521a29a534c61969949da49e94f5c7bc3da33d4e39371a656cd59794522a3f4e8ece09b62a8d94464a298db1c65a639d37b2cc593acdb1d321ec7926c618638c31c618e5129d37259ba72ebb83d841d84e443fb41e12ddd79c883e77a3df7ccf094a7be7b5dc6dbbe5d60e2aa9a451a737d89a9552cd6d4b6b6dd55bb6d24965ed1f96724b6d871ea2fc73ee71d66a9ad5344db31a8eead4a5d756d334afbfd3913b8c9c312ff52a67bf90f3212ab7ed09de5cfa50276fa8a2944a09d257f17c284f0357a90ea742a32b32d99f30936432d96b19c84cf6d489b82ef2d331d9c83e2ac99e66183d637a7faa9e31bd4502dc71cdd39d28634619b35502ce69bf2a72c0f974cd3510cbd754d91d5c8b079e9f6e6394a1b2e0fc1d158c8e53713e7d07cb2ae7aa5673b68882e1f5d66d759cb736ce5b95b3cd511dda0f537e18f2fdf130ba7244f62718614992dd9855644f93644ff38fc946f65c46793d637a8b04b869951c8f82f175a66aa3d3e3367bcfa963abe18b31de308731eef0873d8cf2810a2bf0e1953152f452ca7194e39e729b5bedb3d128c09c47f99ad25a6bbf1d9edb7c673d7cf99517250d6a290539ef5c761e3bf08e0073435ddee139a5a07c8aad73976a92730ab6bad6d6aad75b7d29edb7e08fa2a7d4abee7137f28d18e63befbc8b9f0e2e87ad6921e774e6c390eff2c68116149a1944d2cd39bbce2d1d791add96437a48f2d365f509b6aad08c9f0d4a370f43eb726b69ed2ddb15fc51f472f2a0ff63ca2c6768396939c1a194721ee1604b09962ea7d704d0e914bc73003116b5514f231d6439a8f988a36a0050992e4adc1e673984f9d093d1457fc5b9c40c87244f7ce825c1e1fd399f50a3faa9d1236888f2d5a6a8b76ccb4ef71c7eface95dff18fcbeb388f4f97461e0c3b6c952a07293f5d878624489c6a7755e521cedf0f07b6a1a3e1fcd5008f069efb76e8388f735fa700530f3f97383eff3e17924252fb76ecf8e79cd5c0211c9fde21c681bdead8d0c9e1e6d527e7a857e168e03730c409c1a9e0600227a610620b9398f6e9b8afb9edb494a7c070fbb03ace0e186ea1959f03b60fa977e1868303ef79b83dc781e77248bd52c72e34bf1c6e5f9d0ecda1ea1cf80e0cab8d8aa4ca6bdeca61caab6b51de733c7bcf2d922faf69fe79b70352a7200cffc0211851c686e316d4e80dead8b79473e0055b3b52cee329e7f1ae7ed4c6cae990f5a1947fd7b92863f3cea9cb19d621ead1736c6eadf20da347794bc78ea77cc7539e722159bdcb721e70c77940eb1ef5185e419b873caf3abe5557b9d0eca4c7037a2c1c468ff21662b80b3116a063314018e06ac873cf3b9c0c6bedf03ce5ca43de971b60844585a72ebf0618d5cf01465870d0a20fb2390555f8cde8e7e692729d13d9dfbcdb3c27b2ff43fb1865a4bc203f34f8cd63a7c25f2e6f60f5442ba3bf39ac6eaf578166f780b78fb31bce7cee95c42f9881e04bf71810cc3ece663853e3e36c86291fb49af2d289972d1ab00c38ce66c8414886ba8297ee3325b1d0eb160db83df98a1987ee062f3d1f673754b9610437d8e0dae28729e8e32c0908546f3e2082054507890d2ea0d87867c6a0ba08a1c383a7c3ac06212c2c5a1f673474e91af0eae38c862aac9608e28a07c68e4a2727068a4a173d7aaaa8a2d1c5b7d1c58fae0ee76c8d00b7cfa9f428d82fc627787a9cf49ffe87f628e47ca96e7e28d86f20ddf42878df405af63f40f87699ac3f1d58871473ab47d7c720e5511f6730287d27a9172f537aa1b17a79493b7644a6fa54b48918aec418d47ccf899a99ced0750d180748beaa4826138621f4a986b15db4a53b65cb81fbc090ce9bd4784c9ce9afc78b7ca196a892803b0790aa5d708b319224826d03beb8aae0a59b9731677ba1eb12641824c0991599159915a1d2b32251be9d02b3221389599121b2e7ac20965db3377d3abd47beac7a344d53b1cce055cf08da0532d01df46b6e82a4d1af39510adaaa6552ba5884e3cc03b38f33225ede001f67449a7cad9652961678864493b6c7a202f7f0214277d05f5f7a25c2e4b11c8281f2b86b8554a0abaca65a2b8b0b4c9f281afa24eba41ef2d44e928cec24324e4e4f5d745daf935cadd1c3d6c3d5c79eb71eba97c3d7c79fb739b4915a6b81647b740c0ee9d359c3933ed4fd69f51c87748f06bde52c0941bf658aa66754afb602bda2bd7773d7fd31e5d4bc355bdd25a5a4b4c768eb7a249b1199bd5045d0133d13291afa449f96b88ee372bc0273d92506872e1feaafb9c2f8a7243d373f901f48a72e49a373eba469ad084c4fb904a4a3847c2e443a2a1b3d078698861d726eaf77d273449493d44c175d5d177639747de77feb4579ad7e6bcaabcebd5e0efd596470f8f3d537ff01aa395edd034903f47440cf5328b03f1b5fbe60d8f9f4ebe5b073eb1d5f530a3ab4134b8c844081c4e9ca13332ea47860650a256e7ee022e68858124bb0751225a544c4952763aeb8d0c502d4103173258a93a72f623324d2bcb54d7850b36486364b36d0c14c2b895df412b108201dfa2936f1192c2d65b065498c31c61863c718638c31c68e1e9b59bae80a7a29251baa6977ce39e7d47258a98d41038ef2d543a64fe8c10819288a1c50972e820975f32e7ef7f66743d35a36412ddb4ab938f3f1f4edd369f49034666e27f9aa3674d115cae8316cc05d721c0307808771e6018ecb7b7c6ee033fb8c4a2d87f5f080c31fe73807573ebda7e498357c5e3e3d855943001e80cd3bca0bc68e14f7d0c34ed29d6ff851d0ac0f782569c4f0e95d0c306c5957c3eed29384afe770408fd99a5b8d8258152387351369af65ebad784021114c48a148a69383037652cfe4ab3d0576939a66d36ec0d5f4697f81020003008e000017d84ca64ffb066057993eed19ec2ed3a71d041dd420030c7a5a5f9e7e9c5c4d3f73c80b481ab6c8124764f1f1a377d676b7962d0d787396f778d85d5a3e3d9fde6a30f069bd9dfacc4fcf61330930eb3d24c0e1cf0f5010ac9ffc03fb8c2c85a23e8a32da37b093c8573b1b37f2d58e01d803f6908e524a29255108f41a510af2d583846587405e4a6cc4235348c4324514c8c00aba3b6b1c216961c2bc0f59c387cc316b7ca9558fc3844678751405bea64fa7c00b05e516953f7025344294d12e4115a65127a5134d31ae803eba099183e8e5591ee2181ebe1e46811e9286e73d2d8fde7de0d534d890e6a82f7f3dccf128179238393ad7793cce1a19f8caa3b49e01880118a50f4f0eef5f1508347bfebafeca97a7d10f0c51d9cb3d2dd03b201618c37ba468d1e9d96499011e699fa034768931c618a98d31c618638cd50ac94a3523dbb349675db3b3d65aab47a7aef35a35ef3901e63c8c6c5e7aefe558fdba06aa9aa60c43b5eb4a80fd10f539bdd36061500d1cb7d6facaadbf38a7d8edbdfe79e00a74c9d7bd3ec2775efdce5ff2753dbb7c5d4f5dd8dfac552ddf39c6738eab9e76b5cd7b4a804320a020980758bebacea54afa742ebd73afba24d572a5667ba6e0f0b64cf6b4ae7a4cb0dadcdc0d087d159b14969ac820fb7a71f8a0a0c9234b74ed463cf9389b2d7d98fae8411f67b3183e7e3aecff08001692d11541e800808d3e7a043bd706b47a987aad194b6fd9ace5e8ad2db04b2940c74748b47aa652d2ac019ebe806bebb5aa55bcde75d5bd4e2dad1960cd8f90aa758f01835a6badf255dde5abe505eef9a956ce1e0c54a4bbd1df6a69da55c997e65773aa697305a4fffacd50b6497366e123a4eadb56ebddaaf55a6fbd5a1ef2e9421703c911474078493dfecc8829d265b39270f853bd55f38ffee940faa76728edd23db64b26a4ecaed34ae9b302f9a7acd4259e30ac5c3c3146183ee28d3e32ef6002a8eecd3af808a9662a5f9e44c0f4e9ad2eb0bcd2dd8b3117fa871c177db82863fec8d7f41e1b70f8c3fdf41fa0209807393f7437fa71f0f49d0ee348bb143e4292d33f90dd32a3707702ba0f47da59abb21eaec0561b1c7a6fe50a483f7597544e0f573f429ab6a514d2f524c11cd6e96ef46ff8e2486b572bbf1bf2ad7b2b16305df5741604d26fdd7a43d15c48b6868f90a66bdedf2572106950ebf5dd4d67f111524b0448a7a181ad797dc0748d5a3a35ed7694a88ef1e2e888c29b0df9fe1e59fb8fa4618bb8aa7b4ee84e006e8f33d9775be9e8c4d1a3ed6647c83ece8c7822c0c799114adfe3f2d5f202873df4f5d32fbd6b4f6628d6291867464c91f808a957e81a1f21450a1875ab05d86ba9c1144b1a3b68d85f33ee978d43be91ed6eea36d0611a524aa9aaadcac395d6ef7c5dae69ad69adb11647c59e0455f2357178df79d65ab9e81617764a9fd28a2e5240a670b863baf5f9e9a0b54a3cb73cb59c1a882096eed42af6542b78418911284b20f5d0c5e8861b96bea8418812279058a3c5d3039da969b2983195a1423aaa5d3be5183bdbc28527a7e860882d52d005095e70c6cd6ad544572b125f9954f0d53d2e57537d9c315159e1b0e5889625351cb1210c0b2358e30505b11086b74e9966780b80b75a08408722c6304184082ab868c1c4c2162e98c065bebdeb26b32d5e3e3aeae36ccbd2e72d533ee7e36c0b938f468eb0662b9db2051c674c4f4fbfc0c07d4af3edb1fd26e04a962225284325298a8ac6e88618968c3cf1800a982c510205539295a52c5e10822474a0e2041556903ce9a25da1a5861cec0666056ab4bcf06e96ce7ccf96a4f8bcccefe36c8969a9ca52940fbdd9d207e4d2d117df3da3894b61dfdd65c6afbbcc1a940997431810cab51cbe6a77b1395c751995e3cb670d792494476040afd75ce5cce4a7514cce2f43ed2dfbf861bb94cd22a4ce5dba4bcf22072c59cbbaa865b149a4bdb5d25b96876cc8fc0305ed650e8d5ef8c731166335d768596cb6f9d65e3aabcd4bcf91454d7c451a39b274115ff17bb6c1111cdb7cfc30aae0e715476db8bca1a18b196631232b3e60d1e5cb0e3c286125e601952b684ea0a689a712c48c4600c5055046c0464d165ac4e2122f2051811769940859226684030b2c90a108306dbe2cd180082e7ec0c20217bcc02236a178f2c1890c38b029a24d6cce8b822eca2f5fbec469670f5e514a29a594aef0cfebcb972c4e78eac0020c6857d36eb804125a685962a20a2a26e046091130d143134e589005062bb228a164055e8a9839815981cac31f675986c85285367d499f7665e9e143579559961acc6429c12c4b088aa8428416231a9e90a2c9104c54966698159146832a8c9a28d1821400a1054c0ade8029e24b11557031c28817238c286144886ff740a0dea42d2764ed300c111af01268095149031e10d8ce2a899029c530232205415e4b0ba637e7e38c88274f3fce8838f2124a17e5527777b79c44fd59b0283145aa4d2c5386c84200274f242961e1e48627b170f53325d95b3bc505b840a22407304a0ca1a6a524808f332c60de7e9c6169024b2bbdf4b8fa6e7241384f79070641f2c1e5387d344f79100936e7d47d704ea573be651f9ecf5c84ea104b1ec7c1cee35e84e403864bd73af7d1de753e569eca45295fe51ed347eb5c04347d34c7719e8c938b84a68fe65d54e4d347731813f41c057ed439f741372fc24e7d0ba120a8d4ed55753d0b19aa91000000f314000020100a07042291482c18a9723cfc14800b89a4406a541749b3208761140441c418638c2106100010318484c6441d0a216325327ee9f33406513c96560c0694fe45f8176ff7088460721d9fe9e0fbca741c622deb6a516734f2c802967f4866a508a5346ecb58a9a3ac7ab447878c8c4e3bd6a2341cf532c7bdc0a1a796bbc958c14124bdb4e92303bd4682d84084112f69a7bca9d7c23c7ba27bd49c8883a36a1de2d21f47907c88e2c26de3082af49e9eb442c32800736d3b80318363aaf1bb92a0f036db287950a86ea7b66352d078f24192a06038f0930de742ecc62cf7fa0830fde3e08c126d3827ff38bb42c70264defc1018613eb8cc76aa6d91ca4cf105309504cb171275a6436ec1c82dbf82d21888ac988f0733b944e96923f34a335625b7695f884e7f3b04e65ce9850c6a4de137c9ab0945f0c28e92b22c5aad1990b614a317e58dea99b4803a5e951ff2c3275a5ab996e751c9fa34764a1ff1f505afc0311a9ae842cd8d0872d9185b7667c7caab5e397da022ca0da2e77d4fa9a4086b2e11a6485ba3b544f88f2b843f1048e37e52d61e5fae127cd3d76eb785ecc027a437338cb3ffb78402956d4044a79377d0f2e34331ae9347c9eba3266d94c828d066574e5047d08687504caf2b51be852795030a9cc16f98f334e695500c3bdac3eaaba782a7e3aa3f64201a7719febe83204afc561e87c9823c62a8a9772f09b3f9e6625e4d8191eebc93f2e35f1ea3adace2fad187681f1789bf83b84a4136fef7cd5670394ffbb202e3f77638b8b0fe60567ad69518e3d167d91daab70708b63330d37406768c4de89282b4558704bdabac3e24318467ed83c52860d94ac1c5b7ac72c0b15bc9472361613d58627d0a80a6dd02baf4355c55acbd1fed3286f58e6f6afa47e045d60d52a0088e90cfb3b0f82ac84d85ec22dd3e603dc8103123f5087cb82686e09f42479a3216056b804f52b01a5b98f31ec82cc07f8f019bb8c09b710f6057ec0a9b2d80e5c17f4f9a1e157e885b4878f14c251975e11d40690fedf32c1e7552c0c1929f73ca3ad12c622095fc1751942448b70d7857db2dd327795daa166fb24c6a3ca36cf5e4edc6a535e31e6acbc45e2bc7d50388ea5d2d0c97548dade1e7f21edbc4dbd9f3ace1a6424f35b03439110c327cc9a4a790aa466ef1c71846a30f70850ed42b0b3469435d671b623811b6b2361ba30a4dff9d107fe0294392ed66df0901debff147213bdf7d01becfa538786d45287c91683ec5f2c5283a8c8f00ff38adc835908472e1b3dba7973e295d1ed9644bf859a95625508987106ff00f955a78d0d440fc340bd594d2752033a4cbd20a78ceac60db278e0c3da0a2cdc79d6a918b963cd42e3dd8135f9a81b659ff3fc55a4f7f2ab34bf6ca32b14333199f0577bd1103e2d117c8a5219aaf8adaf8a2e69e18e1849816a02273dd2e28f291434b3bbbb4d44a0b37c78696c64b8891557b291540ac7cc2c7fe5d3f3ead3850b1bd3fbc8fda64ae9f2e614dab0e40a2d2b4b46139370ff61a3f141a0b9be084da5be535ad4dc1f84bcd8c479023d816f0ff4779ab4e36545fbacb8f848490d807fc4671b0669018b8237d1f90425c7a362471064806d756bc685f68f4676837c5c2a38818ab591c960054193b2235501ba31a21e421cf0831ef025c6acaac5a2e4cc9bf1925f5582706020dedcf0869a803451618593f6d626a34bac85e44308f3c0f74089f03f0eb80fb993d8db91cab94a5b4e188a886a04001f44d5525dc5319d7309a704f13851787632e55183fdc2fe8dbc8f3ad4af80e2a7bb7f6ae37ba81cd160e0669692fb28d04e27d6d242c937d1de10bb01ab7114ccbab252b3bc0246dc8acb637a7296c987280a94b77ec004cedade1cdd5bd990583a6cde3d64d7073690dcacd4ecbe340d726967e99e987347a3b6e06ec29cf38e13fe7987e88ab35214efe0416c2cbcc3e1dec71bf0ada07cbdeee8c44a5d8a91328b76c51527ac5dd23685a0bb66532907339ede2bfb4cb1ecca09a7886213870f645f0be8a44bd83a4b4c1703e87cd64f0b0e427661bb1248647cf1adab72b45abb7c58c73c760ac9928e76ce7a3f6749f1dcf64eb82ef3fd40c8c0fdbc5996ef069a64c1e7bc3b0e29b0cc6b3954888332f25d1b18579a787fbe06688635e4c5ac16590daa484cee0f1d995b58cbb277ca2d6190184c2a963f995b1f5addd046a483543771363d0d46d005097363164bc0802f2ed7ad4b4409077aa14474f531dd66202be6955e13e3920b886f16cd769964b36a5aa6032bef948be391c9b3bc8357947115955c57891ee9700ec1775e4fe13efcc12ba2f9bc7e04b8a497ffe64635d532c5766925e75dad9e194d01733b66032fad94aa3b3b8bc14511e4dd0ea5488009073529b3dae281b979ca6538e6b14c7e0940ba09d307b00f3b573802395dd3785d8aabfc64dae5135a20c70011015bad31699171aeeb0298d31ee2b0ae88e75b4b953200151582da524496853c676e5f9a125ae6fa14dd08d0d45988391832cc0c2c9ecf7d95b5d5b5faa386593a30337e2eab50046813a872949d9046763931bf576335db84993cd26589eb39f3bf75cf6d68d4873291743289bb00ca6810674ea08944dfffdf782fb54f50d137b9f3ee83fd7e792d0d5a90e45b85e3ed924401cf133186df0d73844196cd2357a1613c29673e360c851f25beb8352368dc5303472f8ac6346af0265d3e7974ddcd00c38b675cd2fc0d34db5bf747c85151811266e2c0e5fd9a3c9575b08784734d509f7496794ed2b13de3d9e4cf605dd630fa071f6a0419f1c39ea95d8c806064dce4de1d13a9e456450ead79217de672513ea18c09260de9c4cc26a60579d48cefca3b9bd49af2736ca7628e2af3b2506d28082e25302241b920625f63f24cdc6eaef92b8826024ebc4b7099933b9e565360f6eb310f5b58d5044010c3bc5338eb69d8b154a5f998511578876b312b64ed1ec34607de3e43dd43871d1befa5633b11998153763edb56623b6864dcd9ade4954abc41e7639b46c04350ecc877d78c5398c65cb7a78401872744a277f4e30891d846dd49b0586ea49eee218fb488081d7e6a15481b98bf105926d6d204b7cd550e647f323b2afac1af5273fdc96b35f1341b9c73ebcadab441904533e68627d8fd9538ff9df9d39601d139bde3015e905618ebc44b2bdfe598f2db835d7f22b72ec0a49f0aa00de9da947eae32deb5c294389423c51c9e610fdd951dbb7b0e99385ab476df0dc1baa94d581661bc2637544d18207338225214d3e6508d3a275a5dcfc323f19ee8ff49304908dc6d16c10d0feb404ac0278f35a9b77be70d72f4a4ef8bd1e327cd277e5af522f30195c8c39e249653fdb699a34f07232845656150ec14c218c37d46c776d3bfa968c0f9f17d0530ec208759c33fbf67cc8fccf203d991b7993f20d0e160e1b9533c3023c5cf219e341bf0b70aa7e9a05148f1a8a11232aeb591c3f8b0cec00b24868a42843cb80a97a8ff82bbdc592bed88bf53efe135dbcf36b278980f5ec5b2f50f8f098d73f7cc996500f9da954f5e8f3caf2e8bb30398de96bfec0a09581c889cfa51c9148ed786768b388edd8af76e451ed99f1bd56c2ab3a7402bebf03899a810b12b74578e8c803659c94944920c3d776e815f17268325e24cc629883874a3128dbf308158556c8a57286731af08df310e68b8492d74c8d5130945d8723cb92daecc629b5431716d0544179cd50242b0e4c2b5e74494c7dad6603a7b78f3158ff2d81396302b540269f5c50368e7e00425352951f2059c70ae3d1c8dceecaed78ab0bb9f50da0b53501683ead824b5dc9075d032878377e5e1dd4939c3ae0052736a52ecb97ffe9444fdbd783d3bd2b1625f93111cb23cc41ae31734560b56672a8333ab209fc51464ed3b823238ef71024269444419081a58c48601af35a356d7cc86782112b7b81ce616dfdc3df055d35e505804be49b744e0d758382e0141bae0a82328846606e5a3c6376ba88e3604cc0cadd5d6b7ebc39fd6598429fc36bae7300ccb6f3b8a0ce216e981ee48bb10fd2bc068b4c985d3a7e8412751b66e2725f0273867c7404f5e10ec55260122c5bb61d58755e2890d5b9cd2cda814c638f5d461281640b33d9e34de8727cfa01237bfd93456b1b9b0cd481adfb7c70d90fa6cd50cc37997f02768310d79322eeb9f622f5404f7010060857350bb31d9ba22ead984b74210cea4d9eb3ee55d32654ccc60e981c1b4a89997fd808c1a7a56a55b32889cde09d3b77ec6d98f33bb5757a843dc2e16e387e2e38e40767b2397e3ba2f52ef4a59c54f1004bdd079dd0e0e55e284568a089553369e4975633d06500f167809384c013bae1a0d0d83fd54e261ebec1e7d7f9c3770e4c314daaebf87aa8cfc892f29da24be0de7bb280096080d85359c0917f8f0e70aafac9297dc9f037b19e1a144763c0567a299ce7c5a6033c7f9a1473663a881b7c33953191d4612a281af65b2f17dd2f562c8554e7d756cc7bacd262d52e4e71a3b654e517b8348bc4722d80dd2f0721870e15dd58a32941c026b054cf4ee1b1bea65a73f5033ecae457f43d4647a551cdcc76a5c7d6099bfb9972348bcfbb10953b7f4c665fea52468c224711a02bcbc95b4f0746dcb51cc9643641aac77a759fe649375126f0d3e1cd8a1e367de46ba13b22c89e35d89aa3e7302053ecc787ea3e0620c9903912874cc6d37abfc1ab91c3a803936b1749609d210380083c8274075229f25784a2d31f8d19b06391f1bca71547aafbb7d4f092816cba37983851dbc53951ead86b3f37ebbc9d714193c1b42137b83779f5c4e333b489bdd6fbfc7a12b661a49c19d64f8e67981a8c3f0db15db68dec83c250a96060fe3c92871485dc9b1d487139f0465dabf687c73e601860e998092a4a85d1980d6eb8fbd07ca006e4208240bb2b0fc1de47f765bb7643152319d8e7fc4636f2d853c419cad80a8845d5597e07877f3a0175c5517926d16732148645d2da01a9ac3f541212513d98d5fc43aad86d760c15c2ee9efa43458b9e00602c40ccc869da85181ed873af9f3665a6c8675bd77d49304e055c66af6a5038216a1749724f6467736e8948140700fbde7c10736fa45bf069036a3a5f57f4ba4810c672bc37733b9aacd272333e3662fbc8659e183fc6aa7b16a77e1960c58034312ccbe1b61df9764f4ec378e49db7710c77b35b3a94a1265d0738f98fb7100e3b3617b3a231780266f6885cf2013f38260f0bab88ca4902f2ac91c907d5baccea71247f5720e4e5f06a7298703d106f637af1137e2e62b84910c017f12663263c020fbcc8abda883419c6cd394a7b65459492587238f19e0243cc53b3945153a782b330756beeda44d720a0776c7157b558126eedb044520705bf58ee81046527ffa603ee70b98f3bbef507c4088d8a49c939b09de613cc4a8f04bb01e2a4be23e70b671e464da510d1fa16440b40b78dea8b1f2b56b4a22e5a9152d15b6506df07e04f0c96310560d85675a282c27aa9619ded6c557f8010911fd687833bb0362d68773a9ade6c3e8098061d3edb84b583826ad307263e8253fd72679d66ebe52a57482a16941abc096841849c8428ba696d83592415379512db20861931a0078258513b89d2bf3d08bb7761f1d2961cd48c4c41a3a1a457a00f165b2349ce44d1c9e3ad49082f89d251dbf26cef7ab9caf9f7a120ec67a38de93c4cdc5e6c1105312ccf2b17092cefeee220cc2f44fb808b821e829b7c293472b7568c082f8373be16e09e3aabffb2eec3e03736679b129cc05ee64bcc894b9916644807917c799195db2fc93b35921630dcf278b1aca015e4763dd372e0c3b34434a84a9f4ccab5743f4df5905d10c31c11c265f7d301644dfcbd176686c9a941596bda5ccf06f4a68b157eb69dcf05d112325d4f9fe6acbf818b9b178ffd5a5f04179bc42bceb2f60a2e2e6381832a3c25661b44730eeab9becd3613c2f98a85a4ef1f0e0d5d0a73d3cdab8f762aeec927c8fd75d76c1cf144ea3921b9f2b909299a5f44b60af36caf5cf538e6b894129039aa390ec9ea3ce134c162598102d5c719d114aa7450c8d3e8537522c74791097d51057796d5e88be4f337f2df56e3f76075e0e2805560fa236f703a3ec4a29bb39bc1f7995fd3fc69043d4a2c5c96b2d34a46ca45118739fca7223bca879c5781978a48b5d804fdccc4b4ada8a0ff80ec30baf95fe3f0e89554717aae7f207a007365f4aaa2a8ebc19c10e9453195d06b69ebb5c04ee1788d9376e2bbadf9842bd02fae4b2e09331399776315dcd0e9c134f75661985ab19be0d45b630e223537a257b2d0faa9db9b520f9f6bc00fe415a7b51b3327b6c7bc267d785ac3712bac6188125505b25daf9c7c9b8e606d1222404711faa262781c506f4337518792a30d9edf6dc16fae88771f66a536157db50f634018c25007421799ef466d5cc1f4104418edca14494b05f28ce9d28b0dfb7e73bd0b324e8d26439c519a7f718c99dd1a32c843803e52acc3dfab89f9d129271a4aaa9e9bd62136f44aa4e50b4265944e79f988d22a55cd53e1fc6278be27a0a75f0157d388629e24843c6bc669845aaaa76cf3dce79d158a32ba61a0429e3e548e98bbe3aa1808dc67c467f87b039567d972f107d7ca7f0e962ad41836dcbf99f91a5fb93cab219c16bbb5ff8a66461c5ad5128aa443954aef1abe61a439f9f0a574772c3d76f90652ea63bdcb7fb252cb1daf8b555654fc89884c6d8520d47aa68d334a6eefc3807bd9f61694759d50bf6f8b63ca28f211aa15fd7cf5535893ff6001e58fae8f6201f05e4156c41e39e37282fb9d18cdc881246c05d4cc78fc1ae2320ee9e018664e51dda7d599f9454aa7f5be75c500e7d42fa003dcc0d797212b1f68e59649e68207e4986bb1fda7838a1ab06a7573e48f7f485952b6ab551826ec0ebe6b3e3a20d3f20cc289b2f308779ecd6133134a22768c1cb93e39660a843f3917b40557439bb02c827dd7e603a04e74ee2582917a44fd334cbcaaad4a0f4a18e292aef43fb23f3ebb5844b674ca022fdd69d0985111663ed85bb0dfdc5c098ec38d249c959552c778a6d3ffcaf37f3cc9dfb3916694097afddf7c856a1b6b6df7c43b985ef5f6fa0419f42a56c334a5395ae4b3123b322fe714180d692a371d0a7ade5d1351b517ab2bf798fb0daf0c16ecaf3ec1f2dd9bad68d8a0a741030e0dff792918dd6344dfcd47acd6bc238d65deb019625188942526a6fc5111d52cd2f765be3c0617766ad8a07fc5d4523223758172de104d97b34aaaf1e4cdb8c745b8b4aeb08299884754bc0b540711bec7d5addbc411eec0f5c4a2413987eda85e59934447da81041f153b2260e70935877f88b71ff0749d3d11413b33031cbea14b2394fa22f666e31692cb1fcd2426889575e2f109e3f947623cd069e654cf657792787ee0c9271357d937f77eb88a6a82d7e4987fc36f5c745b7e211308c4c9861c7ea4a19597aff269902ab87d5e625ad8403ede21dffe5462cb9ac046a35ae375e3e1920dfe76c1c33debeab653c29475b907ab99e1bb014a148668ed1d242554927271b8706b82c12b2b46c9ae23b2c1fe12316c11c1f5289919b1df0bf07f3900983c11500b04f042a3fcb188377cdc8a30e59f1caed50b0523fd187b57bf3b4c7a9751ef450626b0e4cb9ac6fe3c9621a1d87184c7820182bdaf4bd3b747124e4c27badd05d88902a192344bb73a0fd0745cb8a92af323e17db3f866f409c6f3d11a80101a8458ab6e153eaa21fc4838e2d210fcd341ff767d76f54aefaaf8f7855e4092d05358b76458b8c5e0abf4da2ddd1b9673e82d6feede4a82d0f7be4809f1e5c76961a1b372d2bd0e1b7ed9c89119465268744d13bc9509add710742512e4e9f9c3cee82350ecc1d1b1c948ce69623e39f473f55f3f7b29d744867a1039244da2767fb76eb90bd146d60a3e23a8561241386e4ea6d5ef72368b27e244e896fe5a556a7545c9fd840f4974b1a2d374f9e39dac067de219a3fe50a100c6692fc0554606c86d068dcf271fbbfffff8d1b6e35db7a4d49cc7a9475f7050204e903208f976127a5b4c443778d4741dd4946e80a4cd7d73261b1fd17964b48073d5684299a08ae720b80b28ff897a49f47bfebcefcefbd6b316f077fe1a56bc91b4bcefefb5c98084968cb57fc4c2478984537c417f191ede3353d9967730d16b43a8d4ae61f30cceda6817c7f19374bcc7d42e414b2f9b68a500123ae64ddb1335e58ceb6724ab27a8a8d74ad50d2299726dff31141c44da89d030ba06bc42072de2aa6ef59a4e6884acca4e2985c555c906000ea23b2924aac57b6de667485739520585aaa770fbcfeb43c298ac21ccc3e9bb28b54d7e25be879e0759e400c81a7ad171a2a851538d73937fee2fb5fde1391a2080c7cf7f4ca2b9281a7242a620a81296bc7301b46965ef23867537250da638bfdb282d1e837cefe76fd45d892dd37a1059f352baf4ce1de1049555a64e46e9917455219abd0e4c3b2ce1dd2b58cf9f88a0129ff0c40fae33d1eba61df6d1680f2cd461851ba829142064ed8e43afbc99e9a149024c3b590adc6aabeb2f2510addf3879cd864907fe8a6a99e19ce83653d0d9dbbe955160d58c8d2152939cdbfc7f088fd1c53724188b2699523b15373ce4d4716314ea7ec3e7495fb1d1af0e2f205519e43251e337350068f40663c35f5d2dda7b703cdab0cc5377f6b1bd79f2c0273b2b239baab3a55d3c180d7e014f5d755a8146df1b74046690d4b596990308b934743f3fa0e86438b11566b5c69f0ad02f3b2fab1196518be30a4e2243f228fbc09bfb03308d5c63615f1db8c51e97c496df9913da1608eaba62323c61aef4db34e8451c4df81a022cf5f78999c0359d2e33e4744991c58b44b5c7f440321ebe67ca6efa6ed091eed2cbed2a616f0d16801ee2eec21f49d871705da2d8404bad8b9605f19ea295aa53ac8ec025a48386d593ec8646136f7bd2836907e96d228fa06012f001607448307a692e554bb4b1fb09f332ae8d07836b959fe1ea37c880790b2a9861a62a2a3f23cc0f00892f9ce9f6bfe093083d8a13c1afdb6173c658de3ea8fc9e21bfe9b1df68f989a3cee633ddcfc03f5eb2f43dee8c0abf36015229cbb54c3c84178fada7a2774ec2dbcad06161389957ec34b6956cd6f244bbacd39de52756b218014c55a03ad235f06cf31913e89552dd47dba2fd1fca6ea9cec0881fe9243126d4375e286f662ac5b4f4b2ea7a19ba4ed6ba9291eecb2474839ffda6ef5c039351cc78cded883239e97a554444377a1d78b804ee628c53b920a459bbee52cbc69ab6810840287be5a777f158770c7930b0e1dd23caa8cfadaa0e51fc22f564a3aff26e835931725581c914ae5426e2cb75af3a632b7e07d4fd774639a441087f34266885c41b2bf9ff732cbdd35aa824acb31c612ed881397a50e342b8e5da90f7923222771e78f560b50d63a669da3577fa53e965d6dd13147d39b8600bb3d3fa7cefbb0e404975eab2c38c78a70ed388e3653015296392d34b2ce9fcad7f1e014cb64c44288368a746f3143c2483a108e26ce83f84d4d14510f5027baad743f7c466702d069d00abbdc521de94b48630b47643b072294c837c2e69e6ae9c8c4353344a2c74c24ae69d4eef2812e70075a7d4e0c2a6ad18cbfc694d396a4c2b42cb8904925835c586e3770a2491cb7402c7ae31fc3818710e80be9f4d5a5e9846c778a876c766938b254d3127d4c658793ffece073296875e1ef5c98e06cf105444e4f0fa752f239db32b60a47fa0455183a016ccd591e383f8a626ba1685478cf939ef9034a8fb84387984bfaddcff167c9d7ef53a983e42c536b1ce1485acc2e9e7e7fdb1ae0cc9e64123b41290bc22c9198c233c050944fa070da93b541e58d7a3bea4d1b32634298a73d585edcdd45b86db6d0a56fdfd1dc33639820a906a37d2fb2fa1e1815ab8494c6383ca2edcbfbc60b45624260e79a2b8454ce07794551a394c9bcce6c6df3b3859a727d8e04690936229f994c1fbc66f4341c9c9694e0ec0dd0ee6d6223594cf678c4359801a0d28185d75f759248c415f58e6fe612a9b99002f5fa5d775f64b92784230c0de6851448fa0b7ca7caf0dc268edf15886e1b461ab7e8519a58db5e0844e027c47c91216f6bcb77541d523e21f277260c00d0f276f000ea11d9840b570c9e717a699e6d8cf0a28a8acbcc877904a49d8fccad391d2bf495548b2002bfcf1615d54b831eff1bd411c78bf240ad72958ffd063485d67840592af1b5443dbfa6d2a733b5afae6394b6cbcc00d778aff4cb9e51d88174fd7afe6bcc607689bda363ac2380bb745670620adc2076eec5dd835242f515c6a64ad61ac7096a925c3f45489f08b3ba0bf5ee152dfedf8f6163dd844e0f63f9542730ceb6d7e04c877700582d45ccf0c864d822ca740e99cd2abf1a13cf849a6d0cb8dca3c94c11eaed27e911136eba4e9610b9969d91270cbe8f90662f0c770380834f54c04b9ee0bc1bd18015ee5990d631df1879c6f47973f20fe6697effe7adb09630878e551b3a360623dd21307ccacf4ff70c379b6c1be1306aef5cd5ccbae82577dc4715972c05c213f463147938c88d9f3f117238ae9806aeebbcd7c67a271cea01b35541f198a510da262b7363dbdc9a414b8af4e2c4d61949a184a858d2116b8fa3237c11bcdade4bb61a18990b8f20b862546cfcaad372fd27bb5ce53baaff9c75e9a0be632e77eb9c07426602ad38efd6ae9524a6306076bcf1f29676138902864952eda396a3ad7c1063baee6572b2b56597b2bbacae4d360db2405f0a3577d1562e476ecc4052b6f00997a1dd3e86408ef219d40a6154d68c514359e2aa59790a22c2a968b893b1653cdc5904880550e64573a73ac1521d9288fcd6d18cb333c08e769bdd0f4c6ffa2b4719dd6f1973d239fe430fad560113b0283cb2cba80bebb6735837ebf1a511622bebba935bdafc72870f2ea088c1a83241ad6a6a8642b9bb84b1d7dc9d1cdc774fafadeb62187671834c9dc029905139f951d9fd393a49bcd7a031b1f5498798ee520206e1ea56e20fa53c8a17689f84c7bf38750aca2acc358903f8c4dfb321ba6277d21357940c41ef8d4516bba19f5d31d2c1f70082a57cf0fcdc5819886594be4318be7050a1e4a44d21be7c26862bfee4a3b140725e3878922649026945a51168835c83a9bc8550cc5c31485bb8eea3890429a1486147217ab078c0b22552a22cbc8ef035e648d2712762f2ef0f56a73c2e9cf5cea538b96741473a6caf4e08b3e4eb069b62484ddedd873e06bbc91ec1238b9c18acce59f5c3e166c47c98c296f21aacbd601a930cb0a0374c8b26b3b73b5019bdbbb96d403c8662939297c3a9fc958489f980151f275ee7709583f89409aaa8e58c36188d7e520037ea4a49741bfb470458e21c6f8ff9d8674439377df1864f5c44f73d6045a82f3864692ce946f5ef28674b8761af240f42db71362fd8e2ed646ef04b47259c64070cb90ee9ed0694d466ede9dbaa7f98b8ca7765bf4e8fda7df6a74d5fb2d3ea5a3fe35d7bed55ca8d59b3f1a5f98ac55d60647ec47d1ad36d97eb73cd7884bb2c3e7eff8698e961a33ffe919b80991872d08ffa34c7a1b81c45ada63ae9e8e5b7d35dd786684d61a796136589b1e5db45c68b8c72430cd3dc0625cbf896498d3da8e5c701be4b53bbcc775ad4b3efd8086f37d4eb2c2f0189a575033a1b7c7e78624f7d60e37858aa0e7353c0070c68a0d610b65d698843b5041b7811e659397c64577702db3aa2c038d971b55d80c6ce54d42c2143e1edabecc60dfcb045e7ce08b200553a41bfa8417285a636f3d828d4a19420be580662f961471d76589570358fb8fac6186f81b17e58ce6d22d907c09646634ab13364ab9ecdd1a9b8cfc6ad55d14a4bdc9b5caf1b15c19e5e2b801eeffdecbb5e47459a84a32d3f92b89566ce5c1f8ecc6a7a81ffc0baa4048cb585a6451d86990dfdbc270be4658b11ba41e4bd7b9722bc1e5117aa4c92a2c678391bb1271512576a8cc67017fbc923c9acfbba8dd365509e50b777db5ee009598e2cdd0541668c8461e32678c222b0b29f7a9e5b9ddbccb14d8246c8e0d00eda51300cded7282e4d299f7bb9786bbeb2810e545db005e2397c71467df9c5c6d8ff54dadb3454321690f4c61b31c2af606dcf4ab8d8ee24393d189c75409a784796b65be9a999c07bd80beed87ccad37fbed1740671e693c86e02d671461b8b940549c1601d52ea97c0021207347965c44351704c1181535878e3f0ace41e778a64e37bc6925d6863454247661dfd9a105f8d80861cdc007cb49c8155ba2a0afcf3e70f7a90db2990d4f6cda8edac96293726f715478d5935eac048da965f0b9b6c55e6b8b53f434afdba2d7dae2eb6db1d7b6d0ebb6e0355bc241e9dab3b121af55230ed02bf554877c06dc151821d8b657a5fca5c1c04b8c061e820989934dc0fa76ac13a7830bac420abb0e093dd718cf01aadfbf8a322ed7b672626a6c7fc9ee53cb21d459f5220d143813477f81404e1f8c693192bdd76fa6e9151a34b038b60cdf09dd62bafd7128e0a9134a6305f104094218a53a62f1384b5d26b58c52f57856b254f968f0d80c2fd712548e3d16d388bb8eddfbc6187566c59c75dbc327a37b08b037549604de415e9af24f6be62e13c39e7ebc405af0c32522cd58e485a2164e0c408893d43e7c93e7993d3975a898c0f3e618a88f6ae83b98e76e40e42330631f1ba8390de1f4c53a689905778b2ec0398fe9f90cd96070d1362d0d86e0bdc1cd6393d59200fc87c25cc6f4e1e1d6270d600a36cb8362b0d22798858d406a2ba3339e06df3b38a2652bc6dcc16cfc303cf771fd29aaafafa23524e6cf27ef12eb79fe31ed30bf782eb402f445d14636d524c40d76245548accf2cccac2cc9d2ad64b81fb5ec29d23edcfac1dfb2dec12a508a20918332ef71baa6603a630e5185c3355bf5bc3af10ac514105a25699e07204ac04d64f8d9774dbcfd773e8bd8bb5897d81b88c51505f10ac522498c9e0c62e4569c13f123c37ba70decf3b726dcf73c7131d7f8ca15b2a13895fe82215ce3c8187bef031e44014ae4fe5bc42871b14af3ad9b4c32ed87e85c3da199e8f4f5cdf85f8808d11f5b1ad57cb5e6fd97f5833483b945a3cc692fdbaff05a650de2ee176072e24c70f4e2ac9a9952aea19d0a957e0d8dff1a2d39a97aa241bcb7f1fc8f3ec00f410530e2a4c7380d0f5bc890f774085474b41c0626c49313d383c87529cd207e5c178b4f36043de1db62a2788e92c4cecb97b1b663597044695ed152e7a2290ab5954f3884a7f7057d6e20bad818da8e84cc5123d3028d4283199052cd08c3c2651e1a1e6e3f6c8f5858378625481d755a3564a535daa4c207439dce5e6d3e08538d5c170ea8d41bce0fa2d1d0fb60ba7de850a0d894734da3e92699339f03b271010870c6e142c311991b74a03fbe20e45ed101a00391baa65d67208dda0cf74217e298cd2ec1a2bd0f98b2b00106c2f0530d5147f630fa248954f7324b4203c0e21ff1544138d2348eddc117af5ba43bb0b9e420c00de285a6a3dfe72d67c9e5c5b545450a7d9e300bbe3ee46e709ac05013dfe3591cec89663abc6a4f7a55a8a32d15e1f3101a56e2845a465c2a2dbc8615c9549c86ef42a254f2345713c7e0cedd4b2c30c303c3fe30011230778c5b84a126d152985fa9366279da7dd6088234dc563f6c8c0fe777678f9ed0440cadc488ff2927c5359fd07f09028dd003f2c46837f02eac695f418f39ce97b7ef4a9e95a4203432f365ad3e901d6ccd9d3076d20463fa30e8d6b0afd940e37e7bda4d260baf4cd50616fd4de7c3ae8e7b71831aa9c29deb84a05fb8a8977a13dde4ae15a849b7dbe8525d1fccc5e99778379ec1fa4174a0df57005ae0794c569a83d8a8455c813bdb81598993b6d49e5019945ade79789a6ba601116f92bf54c1da17d5a1d0f98e75c0372a136213a43ccd4d3e2276f03651c0b9b894d41440c35488057db491b4014a04dee653de6ec5730285f90a571a428d4e809bbbeb253e1654420ee33082979256f68cff991971ea3e91111ff77c62d107c72b81f8cc273491174f739e0a89ab82bf09b20d07db7c753ef81b947ee2c184fc7465b47288cb135d4038a3507e830ee453ac9a560183ed00a68fb3b1cb99081d5165de1e57a6eff10c73c74a75cb8eff819161200d7ebc557525083d127e0fc0c819c21d779297e855692e3d5e57862474b7e7b7dc628e5249a99abd73968f337e3dc5498d129b7d5f50743cc9911aea572d2ed0cdeb91b24110aae87f373002de91c4156a16d78871c41f7b26a4dac30fe3de46a306352b44dcda1e2d9dbc2239004021ca36532c08ba597ad2da7b26bb5bd21f13a98e9ccb1281006290e8904fc3ed8037f2f99c12b6a1ba5ff109f7daa19a9c6dc21f46e98581c01ecc8e55e29137fefd76c18efeb33c4bf955197cfbf971c81fea30f5450b9094b99aec4c44dc01d72a3c23b38f78f56ea429678c5d46f99dec93df626e90ee3cb9899c1e944a186bebccd721cdb9dd689a6c554ff9c0570e807e7154a3b930ebc4342daffb0516c2f63294a62d8b5f02cda399a1993f8960cf93b93d501c5cda59a3f33c777836b6e72c6cf716892c0006bc67cac9afd914cd53d5ad3b8a55c6a1bbfc4113bd446096fb3d35677f09a70b1994fc42d3f6ecfa94c7495a0007a2e7b6bcf4cfb78945a78accd202e18d0c6de20e53bf45a54205803ec986cc82b40e26f83ac62b411200a92ed323e5fbfa70c148dfb53002c15cb87791fd48031b9af269e837a6867e33a3471b22c831dd61f5f056fb9885ef45a8601f6ffcade969650f07871a1a7102ca9bd4037d6e590d74c06e5081b04a45df78bc2eb43fb894fe82878596e880316435cc61e2c283edb2312f7846eb16cda3e862dd86cda0d20863f5174951acb4f181e61c27b5831cf538a7b6f526622dedd5927b59e1292dafa3dd6fe2bd3323a0c01fb2bbab330cf2ccf5b4ef7159d21af8698b3aa10dd8be460331a51f592831cc06cb0034d42f4f997723d9c0deb98ff8b3b5bcd891985732da9b61f79513a11f3be5bd37cb9873978ea9ce00b7b50b7fe0d2ce91403acc129e508b7f3e5d9b31cbcee1b5645df16abb0d1e7ece55848c3c679cf888dbc55cf282047984f09f775af76f509be30da57173569484baf85a777c4b12998fe2068728a32557d54b7c860a5773d6dc6248d50fd49354342ec7a1591e9b1333c5944a6b0123eeb7008139adea412633fcf7075648c4103d897f96387eab1e3636c25ca6c2e5d4a3b37ee88e6283afa03b83dac13b5c315889627acfa4829ec0f3c83851fddd0b152304d7d265f0d6383946e4cc1875997cdc6876cfdb5a7b1ca9acd6e93f968bcba2b3939c79bbd8d9042796f53582c9c336b27620edeb55214c8eb4c56e98390cd6786460582d8ca80c013fe518f84d243403fc9bd9ec00a2451a4fb66eb5d298f98e2f3ae45b1a9e945ddc763b2390d47eedc003648a452b1dee1294fbf2e0d9fb9b6660a7f97b01176450dc5f72e8d5558ae0d2c47c19f820b76a8af2513f0127a62b4dc662f94845316fb70e665fb78d6a3aa38ebbed6884c1bd71385c9c7fa09908b6928491633957ac6be9384f20112db71ec1e2d846cf7567942899db21be67968b0b896c784b3172e7d98f20255438e434044fc76634d2ecae59a02bbf11417d0c08e9ce46eb14679e639444b7819d65f594606e895976b91a4bb0ff79e5b503c6b39359c617a731c598945787e45be2a4b72cce7192ec497acb30c868f48e427b6a233b0eb9087450ca4656ff068664515d94f52ad619605314d05f232848cdfc4d6483d9287adab09b06cb82ca27b56253ad8f04f3cfb7a66403f387da878a59044ee4f144197cab0cff956c8e732294287a10d6c081297655b29b2a022a4eb7420dca6d07c4b835040e229a1a042af752dbbe923f2dcb4a4c20c05546b4a823e3ec45e333d5ca35c9820e74cde2c90fd6c92e3cc70ff26896051c7bd0c6b0472580f4c9044fc686716e917cbbb942a3bc04ae041544587350157d79b295d49b5f2c2d05adddb7d9acc90f5c4a8f09b408a1abcd401dafce97b29b64ba1bbb446656836955a59c912f99f8e180afa84ee9e3abf6e02c0411fc94204b9caf5a840ef083fcc61c07b1998a4065621901c959ced8d4ece4a13e015abaff3e3b802cdc795468edbbc90678485f89798b8b703626af11e938edd1fdf18c6e96875a3fd0deda8e571410b6aa13a5f693dcd2c71cee514a49223ab95dd5b0d40555c3f9cbfecd777543ad497ce0b5468406c082d54457fd17b02392027a406acaceb8831ff8b6ab509809f99d2c4d6db76e7eb8a225261cb51d80de6417c0624159113f64e2b5de57b6ac9174ceecb279f0450e76a5a24a8ea29f12d2506436c89a14e96e9502d8e99b730e0183d4d5334503b90ee56360d83ccda07f786fea347d9676a000581334da699afe7266910ffa651e2f3d9f02116f26a8b813c8f321773679cf6a538d96038991a23d3cad237a4b6ad4fcd0e8a0ed2435e1c9aa679dc53b138ef70513fd0a75db03c4d26b0d137ed8a13e91a08673ab01293afcc6c80ee946965b83cc53b07d6cd12374d31a15c8505c5bf5cb27cfc9306d6613fe388d0c48833fe0b075d8cc3987f2ce9d05cebf58ea885e73bd40342439f01ecd4052320a40765090c46573c7e6699670d3bd180336f61e153df22a2a4b132b33e8f270066814db8d18fbf599cbe6bbf8e6f9cc092738b8a671dac9b29ae2e6c5588bd39afdf02ba11067721f6b70bf53d4d86ea944ef63c4cdbb3ba040e78cb6e7db01dd366a90441f7e22c6aac3401b3fa3f35ff9f57a70d02f41ec8f11890c5fe80de80017e298074da6a80e638c62edb399d7b39b28decfeca1da4e4ab581bb5a9bd38b032378eb70a548869feae1f7a2abeba9eb53ca4743a8de277457a86854542a094754219cf53530213d886c9894e446c0b8e58fb2c8ea4455739898411201e0c2dc76c666fdb62cfd835021bace20f41f4d17d8f6b6a9a150e7442e5f890ef7492224919ffe1f248baa1d7e1522572d21f613767f667c9a3d8e11f07d3640c98309ef77e9e92fc3b4284d42d7fbdfcfed401a95d8159ed8bb22c59a0532440dfc79f90b1a48bf2c361e5b11092e4ed815625044730de717cde6ad1c16c47de0564bffa473eac5d1be077a78ed9b78e82b600c86f5c1bf2ce73b56c49b6ab2a7d9714d5fe819d18330e8e82d7702654c4fa3cca1dddd5b7ab38670a5cc40938dfe8b39c71e1486e5be944253a2dc2443df743ab6eb1343554b22f184c51c0150e6bf8a6c64396562cde78fd4f7d395302439da877985507294b9e29db02b2f85a230aea1802535c4eaaac5da697bd6777a682658523d08a9303d4fd1d50a547af00ac9c9408d55ba4098bf010141518aa91b09cfee250563768d3edbb9fa973ecf57431a6dc6f6cc2953914aae63c923dd184c6a9da5e9b20082b066d08ccf001cd313ff97ca17ed945fa1f7cbbd933db5573f9a5edcb53c7cb467fba93218f169e7fdb007c14d113cbd37c747b08392cc0a57ccec44835bb2be213f004f621a818beab1e30063936a421cc5132243a040dad106db7bc358482d175395cd6dadf3cdd964487d22893f1a0c120eedd614000c37aaedd5cc61c8243fac40055dfc478ccdc1e0a0d395cbfe4be8ee57fedbd49da6514b62e72d8471e10c03d54e43e92d6fb8c42e3caa3b750c9190388b26bad52a57a28950561e9b2e5e0a5124c679c863baf9c5ce6ec492cc2cb22f26ffadf8135d2c88d873d0cb4bc711e6aa655160a8499372482eb75e84453b0d54ca9e066b4c06d71df2314c655bd770e7d56d63927eb659e1e21a84b88621de16b6455b791894b9359b2ee17dc3276254d603c6a41e1a55990740660c1c25b167ffba7482b77e156f33fb1b46c65b2c975e3492a8b593acd6a997585e64ade1f117a670f038f9450783e20b1747b792482c8b8a3b2c5f2ec80c664104d70024b6f4265eb01750b596e7f7c2092460b24def4a1595073f217cdb607541781c486a96c1d6a586d8a1a4e868b312bbcbab1bf5fcc4d9ded0c0fa7d2f130f37a59254c7fd8f23a9b1bd1f03f581c27896c1b3c0dd5bd3c77bd0cfbeb5e2071a639e0d6c3dbbe506dc176178e52b2ee0068d8e9dbb4170901fc35ac9b91db95120636cd26ace1b0895a5eea8e99dfd15580604015548e38fd6b876ccb88353956a451bc547d00a4c15c05ac63a772eb500ee855bad61b8f7aadbc24a9a005c3cac459fb88de7f03766a02f051a71f8b659b5a44823c4990702fdc227097f458bda2a588b4d3d2c630298e9045c13b6f5ad69b760da983b56d4d9f0dd609191ff670c4eeac98b41e5702684cf4a1b95a3887b5001218656aa3f0121755cbad47189605262b1019ada54bd926d942a9bca502d95775ba145e6e3aa3f7856c4cdb8a04a9497d0715bb338a40a2e2aef509a923154da121576c28e741a16a3bc59fdc53c06ba61725d00a6db691770dc61c378566c8d5feb4f4ef30bf0a51aa23dcb2e9fbea2eeb16673ad266d0fefb68f48d4963943056ae17df4ad71537348d2438f87098a8b7f68ca2bebd4784362794bae1a0807ab30a2d863c11f53c3b3b51ef219740fc54aee56453bce1958fca1fa15c8373282cd88ab08b3f9787ed572a4ecb0c780a87add98d95eb57fbe1906fc4a01f4c1c13571ae53e6f2df7e86d5841dc087dffad1d4466a98ed264ad4ff8366560e1fb729ef909a94db290d53c572dd2d5b4327472e8b5302a426e7eac2afd940fb0aa8d64bcc2f73a25c1391d8091a77caf71dde7dadf4ac80159b24e32f69e626057fd9680c7afaa9c6307f332616f22271744be9f48458b62bb9fa23f37aba0a9b6962e6f7124d91b98654748527bee08da6afa9052feb232ffd144178f524e99782b48a72eaec771e47122c37d80b6230011758aeb636a610b030de7dd05c8b105ce30c70076e6705d55eaa2c5d01e2a80a7320da5d6ed096eca64c7e282c4fc7cc417acbcc608ac7ba829140ab6e7e79545700de4e0c75341f68684545ec9f93e96188ed9195af4981bbeec83196981f7fd420a05054b123fb31d505a50f38b6dc3a22524458ef3be92abd0573fa14f7832a971a109c70e7717ee05e7f8a28920a7c36384fb86372b9390872c72101d273ac4c621819e2792b71ca06828e864bf3b5c450d72078b46edea5160417af276766bb984ddc30976b0023aae342473fafcfc1e2c3d97590d0a1c7986e07c622556146e02f35012afc8bd4c6627bd84c9178ac151c19163019481d94f9d83c561610377b28931ce133913487f151f8b3fc93a6c72969b6c2720b06a02ccd955b2e065952a7f4d9c68dd759ac2acb4de9d6e4a34da4000b89e3a6ce95a66c84ad36460d1d2c79c90436aed9c0e1052d52cb41d5750bd4948d7cd11542e3a4ec6fc04ae185961a977955a1b239e25eba48219f119d8455a521194e7535e2f2c544695abfe5e810cdfaa8660b98c019f8c9f256938e2985c2f5d510ad88ce75718dbb113cf19cb57d6490b9c4cbbc32712e02132a2be40057ae29f4e00cd5eaa9e4aa2ea568966535ed25dd58cafc1c0ec67110f4485f747aaed69f56792114c45a1636ff59ca5e3636fa2aa364be6af0031c6da15bd3dcf5a43f9b10e671aecae0fc5f7959471c166c4f752c383bc046b9fc239c6178252ceb5cf3a3f36378e2da9901b4d3cea13b1f1a33e19f03de72cef7a6383752e730db545527a0219eda03f6ca784b2c31941d216249e3dc70602e3a129acab4c6ca17a842cb230035b072d451c633b2899a0ed2dfe02b97075dd4a2a0f34b014e82e7d55e9c507cf9ac1912d0f14bc2cf3ccd674130942fc8c29820f80c09c9786128c287aab1f83ad3f79263a24562ce3399390e14f6333b00307c60400415e8fd39538d5d6752af734bbf1586ccd09600ad3fd0081e8053b99ca97203fd7eb7163abb169616e730c565d9c1a56c88149e8215e6e4b726f2526891e480831f06645f3ad71288f9d3666cfbdbcecaed1218c362a9d8085a99ce3bc2150c528687e1b47050db0017e75aa19c86023893f712f8450f8ec23a4c7d9b40b0d1e9e018cd747dfbad81324923ecedb2da1efc462fab0712d053b301eb9f6b914744dab71a6dbfd1c49ce6ed09f2d4a593ec5581c3a49f700b349f52a3e7104f24f29b4f0bdbdfee82c4b5380f66fa81130202e6c14628a2b4bfc21cbd7d4c860022dbd54c7210012e3ee9743ad92f4cae7b611ff2deec9a442b3c96a2a0869fd2215343a99bd1af9a413eb150f34f10daf7513a92b16c8b0785e76d492a243478283c414930cc8bc2c3584d9c2306246441147d2d706ab9611bfd89900706999e6b25c2700c469096cabe5c181b0be65e02e71717452b10352333ff3cf2ce79037fdc8c641200027ec0af11389ba0e3a35e761c89ad4259205e7e7ec30c0b2dad090492b531869eed73c14481bfaa91af840757712aa26b39e1b504aee31ed01c0a6d285f121ea8108a601314feca1cf0652342b8d42e462b1a8ad0fb5146f190c9cb909878b87f68776ce95a5fce7c4e8d07d13b8c9d4c57966495397a9c9f96622a73144e1d0ad83387f02173585cc9c137ce59a804f85d8aca9c58caffde53e68c83dc0204106b83943910c38d2873e0cdee042873c09b11770d4e7332a7dbaec99c70e7e284af02bb99fe56535ad7f9ddadc0644eee6aefc7b21de3f1d6dbc45ebd141eab2773e2e33bf308a29ee486e8e5cca12ca067246773191313dd96c6e87045e6203af1fcd5905990f2d5e5d816217302cedcfea30699f33dc717aaea254deb21530fd83d8b12c89c59a94a822ba499431f5c053f3d93894eceb1347d2e41bd2d4735892d220036fe74584ea0ed4edb98d3a03fa3da73d956a6c29249ee82ead66e9da5bc31678e4efc1b692dc5e70f957ecce1925e391289487aebbd7db1e3f6318749a5cc613dabf26d6871ea14c10f4b47026532451969cbad7accc9a755c63f0e1dc3b85c8909f1336d71063ce63cd82f18e7123b46278e0a5366c174cf71dc08640e177307469e59943b18b39535ed19014b9d3107f0bdc097a5a45aec8593fb0c003e39d27ee3145c5e20ba5afc31d4c4b062ceb1c03a06feaf5f127354841d71ee368ed39fc4a95378f8717b07c51c49bc7b825a23e62c8b47e42bc59c32d2630ee9633628a4a53027ab4115ae5583efff823f701b42441080620e1f3139dc27e6f0e800e07ca5a27693c41cd0c7fe10134272eeed0d7236c0fdf9045128c966e1cba49939714025e47e1235af8b39a85e44ae0046c76708f11314146eb79b806917c67b5ba6edd8ccbd799c501daead661b12e60dd289d8de99072686ef53b76a2e8df959ade8e2e4b5b3b6b981b99aecc0e426489fe681f04e4d521d6cea7df27048b45f56b7da9f83020983f27ce0c5c4802bb8a2fb5f3a0bda04701767a9903d9ddfa20abd6f89d917530fcc3e761f03179aee0d15517f3b36882b684cd107c318554123bc2c1853c9e32667c287908472f5d46bef9d7429fee202a98aa05e6f126274e42ef920869a9fd492d6dab199b72279eb7777f2c2b8dc0e34b0bf8fdbb8997defa13a3aff66e2020a0f67e307794e0028e13a1bff1b8ded28777d2468c8f8623bc246579074ff598974ba53e205a4f3dd745d3d414139eb5fdacf37879ba084d5044b50586d548113d9aaef095242cb621b49a61323ff0f057ed19681fc78edbe906d654942fb1a71e97f0d785c6240f46638c6c51bffe9c18fb12acf930d4a7f0eff079eb80e2126b9b013ef38e8d87552eba0116e981eef355e456aece611347ef167a7f097ce5a607dcbd938e19ae63e5815bdb73e396b5294534720ef4a244559097945d35348d9b4c35eb13380728c2619eea407b0cf7284e160ecb26359cf47a763d0a762f034548bbef3cbcd4afc59d8aa5d8631d6656a5172871943c1b69e6ac6f21856dfc485438dc64aab396cd675d29fbc4e875b6aac34c4ef5404b365ba1562213e4879cce46a82e25afd441eb860c215ab967b3d5558141bc92d2b17b061c0320fa39e7b36b63ea6ac4d8fca37a36d8f05cb9c33f09251c069c89625a446e584e4f1fe0660011e74fd41e0451be723f0a4d62f6db5c3c0823c53f0f4e2226411cce7ed21d70246d3431f71027e500765a213fa3a0635d09e90616013d78987a710aa6d90186421f0707488182cb8e381d5481b2a606a1726e25ea9e5d35e9f59bdfe3a371547426d9282391930f5199dde0711fcd0959247caa7e99cc1b4f14d6188c0e8948b487f9f35079241c6d6675de31504c2a0ce46ee632a1585b3ed298c5b683aeb96db1cc0dca68645158e168641284e3e560a3ee215d8c083db4bf24afcc10054adf680a0f226373053074c0e270df43b0eea2908d6f9a0496f0697aebb586bbe10e5a32c836b84bb846776ca9ff5744fe25bb387b62f1d263bacb155e9cb45ab4811cf54617b1f31028fc04c6d56e63d5720073e63c0ff252740c064e1e438dcdd25fbf13daaa751403b4812a7cb7c566a328ad55620fe024fb02d7ddcee7af6335794f9d638866927f689d6d74f824126b4c80969c422b2cb4732e1e88a0f646203ecc78718662edf80e3e16d9d0d9e4c61fae5f4d04fe9bada343e766bc1096278cc76bde57b6a984f0db8230fed89fdd14d70a46cf584825b818ab7c6267829c4c4d18d71d98ee9956ba607d94831d0ed12513778fb299889e932d3b8a5ce1caa066bd76995b396da479eaa3b462f892a7e7846d727f2d050b3b8fd737ad1d48bdbd6737189433393da36b4c4556dae8a7e44e45d68e7eb6d5053ef7be5e10a8123ec37ec650f650f13705031c36f79de7261ebc0d2ba2b00598cf2ded0d4f646d119e37be9ff53579ca9df59be3d1413a0d9613f5908c217b7b427e23a35670d8d150f5250a06776ef6d0b112b07fe4b9d7489b6cf47b812497858f25468a050e3ce5867cccc24e3182abd59c436953ce4345ef4e766376491a558e1bcc981b77e20d3e01da7f763f2ca26861f2ab999ec06ac0951bca586c25e154464bdb1d80ef02cd0192b7004cdf4208c9043f31dbddef45930e4b25c672fda5b6b722120cf8187f9db40daec2be89a18930fa509a22541a3ab34263031e6a46aac620b759a8888e793848ef2c6ed4fb893c92e23f2cb68310bc7f8b04c734f7d1f2a14e64766df7b3b5f95e7442470c03614268a31e6ccae94694bc2ce3c475707f3ffe1a4268bede15fe9321c585557fd7d693553249256b05575664d1fa1664bec6015b2e7f55151537163f1b8274345c00edae499ad4c26fe951683a4d503d6ae7bbee6c0b6b0a0c649dfac51764b68b970dcd01723424ac21b1db4ecb22009a704e89a03f462869bb2947e27d8791e14e9cf35ad2a8191d7068dddf0987a204c0c907035d224cb2e875df5bc121c2882c8570a1957d96ffcc5a1b55dc636a14761956b9c20f9cd2bbb9b7bec93432e699ca030849ab806e4651bd85200826d587d04024f98e12806d40363ee5904741c18fadae0ac53df9ae2ada49a8228de52c265146d35eb5be0102a75266d65374109c893a77bf8f087bf6b534ac0992a5a9c41414c51cf912abb1618ca37f3563cb8ab6f71f3616a16bd51491f9e268414ccccf3428ec8660c061bdffaa33d7b8d02c413a45d0de806f33d3ef48db58a8d1dd2d8860a0e427a8872a96f62f2a1697cd4f36f98be8803d5cd5d1a74130b664a588d0d0f399d1671575fdc10f08e77bb64ba440b3fb1cc60a4f36af713329c4d36820036f5ddb23687e4427d693e1bd6b7bcaa47c79b17dad4d4492a0425645261ee62c35cdcbb17e5ef4618e214ab376d0e4443b8f075dc03907bd26716f0133a5228136c804a46eacec7df468f9e964f557b6b324d0552ae0304b2a79e2c0632f273a3f4c36f23877b2036f110d53924d032b21430e840705c3828e58cacfbb995d5c87cfcf2de1124a08ac77308dfaf844ddb5b9a8f8880e13a9ec4d9380d8005d0026e3bc0309e44815d4ffde22a368780fad74b2829916354318a5df2b403d8aacb9316eada0100fadf86a60244134e6584a2e92b6a8c0c6a90ea2ce6bd2e35e07612e1ebfb6fd6abfb39ab45fe4889280a41a99b68dabecdc73c2e9f0a959d918efb3744faf23a196624e147ac318df76e330608f99669c9303ca7a6ea32d82ac8464909debd69319b0ba39281c9701f153105d40aedc42a0178955394316feebbf03e315d5f063402cdd4af845ec1356a2c30835a7d83f3e96d9d847322f331d5fd3f00023b0110ef16970585225bf9920ddcdda2875c74de5159f9ff1964289b057910acc4301f260571c6e36de7c55624fda7a6fb751cf3e9ffc88ecd8e7119d6acc80caba373450cabc2c292b330dba7aa3853cd83c6f1527f1860f76f0c060d7633bb02829a6dde012fa469a2095619f887bb4a8bfdbaa9ec013bb18393b2af178cc6aa5deb236fb35d2d7efbf8144eeba7a1ad7ae2b10a318304ad91a6b7eb98e619975faf9973f09a8640748524ef2292dccb0b962c8a8749a7fe2c5cfe17c87cf185392b120850cec81078071c885c40d8e309aad1ff5efa99d8b813842e7a77174ce50f9b081bccacfe69739c132cd054ecb4a89a00b1a2e307c5cd826d0e8064e089bee9ad4a5d1a64197992d0c48519cb6002a70dae8bebe7275c3345e54f39e124dac108d5d0a593e5e45ecdffefe499a67f4b8c30e9e90ad2cb05213f476664f6c79bc5a8d403f5d227732698bab5e16814bd0cf45041cb297af9ffa7269bfe0893f255d8f82e112df62fedb8aa3e39442394efd0bacb68fb2819770a0950a69db33fff82db1ed404457c6820b40195a15f018321c75f0734cde670f94cb03e4d95d338c9230b08e966b46f1aeba360c4051da5b132b3d0cc193af8827a7a628b45a3b2a3832058d3c5c570ada1dbfc70d13d1471abe1d9852ac7ef3ef01a21d2294a5603fbe905e644ad885a1bd0da3068aa48258eb3a98f7dda3af6a9baff429467bb4e5debc330f94d02ae29e78e59006782f316615d354ccc39f41c12f2db6c500b5185298ed763fbde706bf907d1e8fa3896276fae92951ff6148a8e48124944636627922aaa77d9ba7f4e0b51757c2effd68c3e3757d51adc2e1a3a954b15544f7745c45db4deee660c0becf4529f0bf4234420fa227c1417a5b931843f449f6abe290cccf1de486161a38f19fe8c4d036633d260d7691aaa78618b21d43fbdb204503675149a1adf0f042ca3014c385c7cfeb2bb9d07fcd2039cc88e18a6be3358624ca7fb4ee64fc95dd5d2824639cd6e68cb40aea34ef7b556ff181587a83b73e5c2b77a85d14c1006086d7de5cbc5aaa2b049c833b187d81483b2e19e019dba93de195078e9521d3a656ef4ee4641e519829796ad777f3f05a535d4c204fd58e5560ca6dfa7056f955257c887a1d13696c1c494d721ae75ce01f6f3eb25c77fe8c11bb74cbeafcf24410a4a79f86af2706d3aa40a436c218c312900602e2d0584bc3a523ce548a53cc11d38b2b6c4c85e77697f732c938f1cba79ecd41ce463450c1af6d61a1b99d47448d9e9b8480b9171e3dd3488b1b7facc00b05e0f002b9a68c05e12447740a4962e1b06966a616811383567d64218edf59f33da8d8af018dd5aa361063362c5c2d319b47f646666dd5aea4ac9a7b7be190619af5309f3a8cd8760eaef73cbcfb056db834a8245f860c0faaf502919a5bee0af271801b48f0328f41c5fbfe0badb4f1eee453c75f62778f61a09cb2a230d9d15e713c78cb3cc3a970bcf4701c7b95e16f58835a03867c51f4c92f38842a737742336bf39cd02b7c95e84f9893d7ecbf6e8bf392f29b3c837b1171193bb24601c68d9a3dbdf48030793250d3b060ec44af7583807e3b0496ab23585c633cf272c219ec4955982dabfd9bac33405c15581459706e10776b7ff3230be5225071406ca01f31560eb7ccecf34f2ef160adacdfc2122aca4a95e1a9ddf041495860df618e5677f4263e9a5de5ea942c0f7d81be4f81c46bf23c5ee6983efae0d56ca1aa297d9d4a96d77ac7102c58785dd5b2380a040c53a6741db51f1b5aa17472feff43b0057e14958b6961dd773f337833bd5ae013b7ca9f057506082207acedeef99e420cdab5ebe8b0db6da488f30284b0c357e73097ac5aec1fc0b29d4975b9b28c502542493e4e5d11d17bb34d5e8afc2d2e4b7d2c3ab30179ab5c5aae9e2716adbff2db2e98a9b8af7e827b4b62dc4f5ffc0cd53c4b7701a29c5fd2731be8578d732a776c643148c046d33d0bf5b52a4b224935be6cc42561add060c910915800cf19d64f6f8219f589ac80f915a929d90b990b8a364f77b366e55eb01d0bb674a2df8a0abb3ea3835557633fd94071a6dd9fe4f4513e8f614920f36ea9347d8b04f9181a27852926e922c6e3a8a25fb2b8a1386cbf190416444eb7bcf683fc64d9211d5a018f5a40a12cd128813d20d95ead5fade2499a342de3741d51f4f14c60ee921873538a985d286fa1abe7e107972f109a75286480d595fe3e414ba30a11e7d3035f6e6fb72113770a1bc383a3fe89581b4cd976d3627179d5ff56c5459751b298338a4f833f4562af435c1c49eb07c7f37b05b84b385593bf11b1f3ca1f34f09737fa1c22043f651270f2fadbc6dc26660b68f92bf8f686d8c58f7a7e295b9a20e7b8b2f6a105baeb5efa1b0bb26300cca4672ba9e894104b3085b0fe0fc96cdb39786f8d5c9bad716007f4ed5806b0c62ec0f0583ac949bee33b860785e0559889388058b64e08db9500aae8b9d6481de490b210a6454094b1500f99496296dfc240d0561bd78a4293e0bb54981dc1559d09f00249566e75945a81d425ecaa5e7fca4197fbb829d0009fb525c049bd2f321b04dd400fc35c71555cee58c4051350473cae6587dd3083c75e93f884cd1529eee2d81e24377b2ec6d08c0ae725899bd0314fb3d5cd0485c8f7213639c8587e86a4c413f67cb95570b705209f38fd3008b4450b943cd7dbbe11a496965c2ec370b64fbae0ca8fdd8b2a4b966ad8b87465fe15e8f5a2702dda00685cb8d0376c36064c9bcb964611c3681a7ac6620023d0046ed8bc5a07a4deaf9e60ba03e2027129e76c6aafd867d6b8cb64355dca0208466c1962bfd9babff904b2d060009f23324c27572f3198bd83cbe73fb184ee3b5d2935caaa80440e7ce2f948ce84a4f51bcd1677be7e0674a07eba5cd531ca20c00cf89af2805a8cd9ce4c9c839a3c0d304000cc3c5c46cde020400cece4fb1cd5e528ed7d5ec8514dfcd0ee140b6e9b208b56d4f3507b3d72e5b1d8251cba47c4e30dc00809d1f79341386ae48d16fbdbff29fd83905370cc9952664bcf279e721c1c26db3031307020d05376636a0bb8eb2820e139f12bba12f57d22513323771d067687d7b292ee6a7d9d91014a700061c60960a54c7449df62fb34897736eeedd3b68c87d5594eb81d54ac2d63de9de90cb27a140fd83f0041d8b7f05d706588b16417973da6491a0f379806e81bd6bd37d957124c9a04708bbcfb61c3eccc9e7c4cdf169403684c1299c403810a2167eec24eb1cbbefd110fb7a3bc783aa9564ad07cfb991575d4021e53981b8fb97eaaf9ee3c635599422bd9ba00b7040a452c069f89036dae791057cb0dc361aa0ecc64b7bfd73da9ebe9f098804af26b01dccd6a4ed4dceb10debbc2af72603270ad49842b4162782c0de0ab1bcf45c90e5e465a0956f50fefffdf559ebc6ef8df3bc161727686d451571365567427d86d221067b14c71b11fbd7b07c8962743adebe17af2414f9c8aaad6c298dd8ff5c7f10ed54c444991d389e652f08fa704816d3fda574cee9cbd2cfd3c4d0d3e2de8371d305e556c2d0ffe9a1f9b2786950e53acf90839ecabc633228a7674663c542c4f69f89cb9a87dd53469be62fae4e11c9428db8b4a53e3545ff2b6462fbdf666eddcaa03c8988674b2f42d986482d1247c1ac0334daa22eba1b905edaeb71aef2050fa481f8dd58636e605618800d69c0a8074645a1a283525833c3a21531b09ab398155922046ca8dcac0ff198a816042c04c563c5c60f1b0dbe4db9dfbc99a9964d2dcaeb737c5878f42b5e97aaee4cb82319d8da35a28dbe0a232fc30fc17a8dde728471e921c5b8d98cffe2c3d6ce49134da6ff2f23d763cfab8b5d293c8f1a2db4df2fda6f1ac154894d8f5e6a8144e83963be83fc6e0065759ce919409e734df8f075b549a188ed8414b3840211a9398271d78c399fa761011ccd0dc44959029799aa342ca2ab1901024271956eb36a8df25a4ed28ad53375cc0f4adb3053128057cf185623eb2d31da7fd3886b70dfb95e838c612178d6121fc1445490d7bcb05a21a1459e6a266639636b83c514618ac88a3c8bd6c8f5837f543a79592025d3b476301bbc927c941985d720f6bfca59e078a682e7e794bdadd77408cd0ddc01930a0b4b2d8722dbdb8f5b3643f608f29aed55e54982a9739450c138cdbea7cdf7dcc53a94c73b506ab31ae34d32d198a1855aa3a28ab55623886147921ce22fffec6d68269a8abc1f87eed4c639a2ecf1b40a98426cb5f906b94cd7c69a89f94fc51d305a8833fe98942e020ae1b5158a33e8863d53ebf13eda649928ab765531e5dd43ae847af95ee5f669eabb11b9a9adf3a20cc5b81b34c0fa57b7c251caa0a9668c81f2d3fa65f908735a801ac272b08d34caee62cf8bc0846b942d2b5aae0bef9dba1ba9b3875afe3e030902b498c6a2da257eba344a0d72c36965b3e27ac92b087dea011e020c0cdab5ecae1e119dfb0a4d908145dd5d3742b1bcb7826482150da995ffac846a9cc586bd81be4dd245de7a44225512f9d8f611a4f0a7ce08118e4d1dc925d4e83212d5995861b5f1d1d3b49ccb75dccc1a9b1121a6da628d6c4ca877b1f3cee155bce0545598f11fa4f90db53b447d2329b0d2382cb45c6e12e0557e7772317a008a4e355250bdfe46fbe4bdc913624b5771eb03aab63ce00e4b57fd9d52e92c7a86e1294dea45a65e17d70963e9c2d458695da8952ec9a98d62fdab412b92cb209a09cda92c9b9f58ab837b9a82153d56cb84b478291bd83925a20ca977b5fc4e8f0f118bf8196b90814ca94d1d0ac20d322ab4e441db6eea1d5983627130c7bbe56057c3e1037d106e2cb5408760919c3ace447f43fd29cc293732a6ee80ccf2cbe1e29bc412f38d3b4b7ffac4756bf0f923d6a44428b8ba7aef910831b0ce25080101cf152036e2ac98cf1227cbce52e9a970a82ac8c3088ca813f904e516c397e3717dc2c6e898436c277bfc037e8f406c8cbf6c88a75c5fa82f071fc17e0cb1ce474830149f37023c8c9bb416e034caedc9337e2514dcac3d14c9750ba321835df097f2c5518390f0b21e17b8e9a18ae25f47c06a5841aff814f76ba4076c4ff83f2c45d2fc03810fca06c10d99900e7c79a988b30fc66323cfcd6e51570151847957801023e4ec07ed6824fabb2193540e880235604f65ceeb04f4bc1adb3e7c5cc3c57b432f3e752ca30635d1fcc8b28aec45b62259bf70eac0e044b9cc76519cf9347738625a80e6a0cbbedc5d2d2e89138f4cebf86a7cd0ed407de5b62e1ececfa59cff01b68162b57b071556b03cb0e3132cc1573383142de245f384b058f59c9d91ae8bdcf6f5c5d21ddf2e9032ee889a252d446ee83f90e6df7c9c55e9b31af9aff352ccc81533e423641d70bf99c7b152fb0964b6be5bd2e4221f41c5d930b4ee59399f3d6006bf603b4d493e025108219ebfb0be343b2133ff24830c7218f908fea6c1581fdb1fc6496e576971de38d69898fc6aee76e47cd78141e6eddf9ec98fbdc94742214c2bebc2c736af05dd6bcdab7b843cfa05c4804f65c256f4a341ec527439ffa3067329dd071734f08505d5892110f04d6876ca77c3421d67d01cd730748708cc140344a1570479231728ecfa0c2ace67e08de94715dea44c87d40c9dd55b47449f01da2f05445940cca4d50669151130e745848045711245e220a63c410500c00dbe81447932114c6778168de8bbcc9d9a01a905593b77cfdc50fb023bf95e9cf57f070ec4a11226aabffe0827566593247154914ff2caa095bdb425b74c29a547046804bf035d733f5e6f5f088395b6e99797361ff58c27f5f92eb01d7477e99ced8bb55d5b85bed66825e7d87e7a4fc243629d183dd0cab99274b8887a62ae12371ef87c508bec0b61b054235d6d5d67605d584deacf7157128cb82ba8cb668e8b0d4db26bc13a9bb8828c2857d2e722fadaa32a57d0e62ac187b6a2e0c45b693d2f4fe3969c8c4c194556e99071cb2165498e7c9b32698fb5c25afbce6565d79e2fcb344db6c8faf35d5887955bcb9fe3ad1a1f06415f6f655f3c70d38ad35afbc220565b06a84eb1ba649ffef2bbe4782bede7782bcad73e0b20f69a8bbf88e2ad2faca62f3481fc1c6f157df2e7780bc6477f8eb7843ae06299708b7392a88cd9d82101254859356a72bae290c65f26fdb24c72a3acd6648c3d5fcfc7f67c6c4f6b9ff4aebbc7754fc8f2dfdb1678cf9b93653aee1de9d5193e9ee44e9de928aa9a3b889669de2d1d8a4076305b75fdac76a073507b9d83ea0c3af25709cd2f6ed83aa6a6dee9b6c0df0b1760f206f9c2cb0719bef6eed52a8481911981da4fd948a1f0b9592f321a622b1258982cdc4a02095a471e6c97d5d17763ace7cfb1558c7f614c5d465891f8e7cf71d5dc17fa389c994773937ce4a9debb477aa1d6a37ecd91ef1209ae68dd280ad098b88a2d2dae4203c0e85eb94457ca3542c3074ac81859599d52c74100a21a1526a06c8d90f580ecb307dc2363325cbf807d4833d70daea30fa9eb24d3db800515939eebf4e21bc610c1c2864e8e361197e1e46022d882618ea2002a69bca10f7808ec65053e9a724283a12e520376c0502b9b0181b3913ea57550bdc55a48428248e52b24a69e2b34a11a29253a9211da542ed3018fc1e490a5f90de36032336932012555a763e8468e31205b3b2caea05832f57b3f32528389bc0c81600c86564f75703af469cb5d3a4818eca40d8601570080e139d45839acc40a7898e57c0ff800432b52841c4132c0500a1e83f57000c3fc667e60a2ab08511714dd89055584a4b68342a8f87bbf512367b1d1d06b4ab293a025395e8cb00306d3511ba8b802b70c6558c143706fa84928c2172c0cb788e82c06056652021f81f7575c42b9c305d8c0194c0311fe51b594e0b00a1c333463b20657b5672c437d35832e5f156098806199bf80e4aed07cb1fd60e36349527ec8ad15b999ea3abb5191d315780a3caec39b241e5843d169173f9e6ee668602d85bd6839bbe2c93a1ad6f05175a41715056098eb748abcf504eb1a1eb039c4304c83359a188c80219222b808ef1830cc6098a5729436a291642fb61b6e3b709e3382290cb9f45bcf10152f2748c0a0d48ac021c170211426d76d202d8175cc4199066205c5e24590af20a013f4a0d2428b080a1e2aa844f41a454f9ae0de7b37c7de7bef47170ce7f25985fce4070e8c0e7b9670c09a049550cf5f7a04194c80219c04868373d584a18c6e227b3549922449a6258d924670ede3e849722ae8936427fa2449f67a7ff4bd9ee7516a70866159b49f7e91260e4b504aa29b7039c1583095cbb001b909d043aaca53cfd44c6bc0e24b163548afd8499f3cf3dcd7beecf9eaab7d5a9e1ff25ccfef66ea9b9aedee774e6aa633640e29da4e32813b35e3c50a4fc6ed85ab90fd5ba8e16bd09de96fcf6e61303fa1fae711eee7b7226735e5b1e89f660c5beb1132968c4cdb8e8a4c54d62eac2713459cb0241355e6f031a12f455101510d4d889189327d3eff3665e7f4f2f2d696f3a676f36686e3f3f9e05bd69437a918226f4e9d1cf9bbae3eeffb397e3b2243b3cbcaae3d5f5996ec11feb602687deb2147bed7d5e7ddac7c619044727bd339ddca80766e477a4c566bed3fc76e546e4c27dc6e9c709391e3f6e2c64d0509b71f1cb71e9b11039fcf07d7e69eb03d09bb414dbff3e66bbe260f660c20cce43f937f3067a07d6633b0f3a637df1498d9bfbc94eccb0bcbfeacd39f7ed2afbe78ed9e14618720373781c6c1d9c0f83b8642f53708dfdfda87d03a04283950828a19eb030ce40b10e018f02c86f5810634c87c90010d6c801d7f8cefe778cdecf39fe335245fe8fb3c5dbf85ab5a1b4fec1b930b6484568a115b020c2115aed29a8f7bb476d32ecdb14d70646b6d5592b92fd6c7152b25cacd21c1b5e19176c452c96897b07051a8fdb823a8e1b042e8cca428614371d6ee08f391c556c5ed91212d091f2c151c6c12a216432750b837693a2d591a4d1b45c5cdd1c63a2961af8c5d69b934a462226c10202d9d0e1d35dc122f5aa5207609131e1706939af6491536cb8dadc204a76c8c0b0655bbc2a92d5a728b769c2802835d1d29d8ab2525b496d8b47072ad1414564dcd25519ce1c53ab17293a05a2a425228b1563790c468cb56c85062c21d524222c915362dca5b1317c96c04185b87d5fa18714b28c1460f2648ee8f196d8e16ad17da0997085a8e5b53c72299e2c44911ad1d8ab55c475826a23ba449ee471b96a3050d56898bf60cc8c4d90e3be44cc48db856c813976989ab4336b7c5ae4db5318ab42282b82424b9426cb06c439689503bc3aca7c96c046b66a57d739bd25c154886ba7054813db5344c5546c061d40281e12ea9609792f8b43592dcb451e6dc1e706e90b5a9246d93afb6e68a6d8b724790d0a2f1b0398292c18305cb55fc69818a383de8582b525ae2ba631baebb33373197488b2d9b6a4b38b526985c174aecd751db0caaa1f60ad010243cec199211ed8d9c8b0337d584c519db43ac85a2a536c5129d5a24a6b64b891d3b62e319ee8b211da09684321ea8b211ae0cb93607ae756ae2f69cb1526240b45aaba9284e6e0d26364e29eaa88419ecd6501b04c443c6c386918dc892c38223d2a4fd712626e6f2d06a6f4cb13f9c5c23a6f64769e7c8f599d14e19720362a18cf1b441c6461cc9b145b896ad89fb73468218eba5c53e4dc539b92998da224aed0847ee8a19ac91a1d605904b23c653446cc41339d7071c5d9376eb8c15137345687d4db5444e494c3b945aa623776706db643587ea5613a827aca7150abb699fe858342a2e0b371a6a2c96d9177a2362bfb502b6f585de7b6fc660549ffb9173ce7d3183d86b0d67c7c94a98553f65119e2e8404e995d4337a11f570af153d5e3d01bbd7e7d15455dfdb164eafaa2a0755f5ba28ddf1d40b2c1e26466607495f02356c80c00e929af46edd3af280a757530d4218d497e5091343fa73e7fbdeed5eb3882af9edaca52fbd307d0962b07bdf6dcf550ee638ee763b9d5fcabdc4bdde7b7f207ddd67ae2f0483fcc2867dc1d66fee1eec20e9756e0a4e60e49cf3fcf636bf10b363627e36ab3015c6fcd257ea37af9ca758dd269efb8ae780c473363fc7725162b9786f1d5b19fbdbeb5f8af5a7b30ac795fbdd0442e8a435c757d23e2f77bef457be4a9d2104fd3fbad78c61dcebb610c2de01c9bfb6640ba6e75add79529d71d9bd1db4d9d50eb9c90265598ea54679aa4bb07f1942a973b0ff92f79fceaa033db54f617a9aeea0e937f05dcfeace1bf805e36eacca165ae41b5e82db6fb5c3f9a63bc8fbe87f352b7f531813b8fe44acc217be2bfdd83d063f021ee874737502f9bb9cfe343de937aff428a9c7cd2babfc7c61fac738aee88f7e1540d06a7a7586dc7af3b847b5da81fea5cf2f595aa19bf351e540922449fa92f4a5d7c06e9642d203f99ea13efb3db2f099fcf5ab7dd7beef7c0962377e48fff8a265c0a9ed83f64d2f4cff787a8df23c0a3c81421ecf6a05c6d1f35e9e1f3def2579bef37cf7bcd7dc411fe2a37ee755e0e937f0effb26700c81ea3dd6db4d23eff46aef9df4400fbba3bd939d54d14c969e54d557b87f3ee941ecaf55157d3d78555537da3dba7ff666d19ea7ceb078d58f796bad76208b3727a8eaee51b78beda1e745d87b97db973b485ddf72fb685df674a7f00acd9657b89a6fda4b7dafbf2efb95a960c2eee965a97a1616a156bd0514f4f6a83ab3cfddab60a772409b58802d400d1b7670dc7af7b0f8ee49a0f62b10f51b48b2a42459be5a2d35bf307ade8b7a307df73ccfe3bd2ebbf4ddb0fdb8aa40d5a7be9451d557f8c1578ec0a328eabbca0195d1b083a3cc1f7bc69ac04623c5e64f699af2f3a344814b5bf1d3bffaad06c5548a3195a2784a5c3c052ba69293a2f122cbce498bfa15eabddf749ff99f3b274dd1b685f31cb94755e0ea0380a22152b07d59dcbe04b155a0070a5e84bff384bdf584d36fd8a999ce507a2ddc16f84dc15bf00af7e7a17d5d010f2db7de7b97af079ea7e0b7de3d752b794e5ad4194eafa669fc547929daefbe7ccb9297bce4bd1ece0a4ab543a9cfbd29687ff2fceef9ee4bbef7f6ba78aa2ada89f64bbfaa2b05cf5bcb161eaf5cef0ae5f6db7b385fa14e7705ee79bc4b0bb86f7d791005a006ee24e0e6b16556edf79b9ae9b4f8f7aafd0460ea7705dc7716d56b16adb5ca62a633f4aeb93f539edfaaefa7af87d3975ef5c20fbecfd36a279c045066a3f7decd71c7d04ecd9893bab117bcab12d6c6621e562f6864a7a20d487e94b86a0225a9cad652891f2745863892d0a8644547bdf76e8ebddbfcbe83a3f0d1b2410d0ca448530a935a5a12e3c0188cacb5b41a675f26a6786336aadc30c9d41c92f81a8a42132a6e71d191b1287a21b55821355a895dc086939b1b595838aa9480d12111c10aa2da3e4f3dcc73b09ddf80e8886c734a3fd69c98558122036eed8ad4cf891e98114992244992a949fa985e524535b61ab3351b1ef92b6612446314c79555e2adfc59fbf23cac87e45c24e9f38fce27fdc8b9b689badfb59011e933e277afa2ec4544edebcccb85943614e43cc9798231f5f4d4b5813ac4126dbc7301793af03aba103640604682b99fbfb0044c7befadb5d67bebbdb70278c21045bba79f3bc854573f7bad7690a3dc7e563bc850d4f212213f7b247099dc12a63c8694c1cab255905c75f533185999151d6b5502bda532062061c00e49963c6107a818b9ca4a03ab1f84f2b37fcd7e35826f01b8b16a51f1a3c101844c8446c407b1bdfe5b9540efef571882ad11862714c190961416ca3ecaf673d7cf274f4802acf2ac0b7175866cf1f3cf3eab11e84126d7cf339c681cf9388e7ce47c1c39e7e338f2515bf1849ffff8d9b334fd8ce1e7376b0db22f5d300981aad33ea54053cfce990e40ee0bcdac4c040dae273538a0888d1d3db13d80a7ceec569f73ce83f429fc4ce459fbfd67220f9a8df9b24118d26424933c2e768c809032303231bf1e303c883d389f73ce397f851f6482bf1ebcdc3bc49d16733f1e439a8cf4180fac65df7947c427fd48dcf1f92499e3b609197448e4087322578716f4c488d9d70ed28cabb391499557ea9b4af98f96f8932499439d328ebe7124499f571075627c92d4f1f9bc9f893a34e812079d0a2a5b116a4234175b9dd1f42924394e641ca9399da9fd9088396e441cba751cc71f8e2e15c2860f165d705c318288385742a8f0b9ba8a7a71c4841cff998863a508ffc5707fb451f59892f6e4e6022e261fbaa835222edc4ee28d9516e24f86053f1371d07efa3311e72b06d18fe847f42b2292182392702b126fb07e367e46464abfcbbdb3879d9245ebdea38b357be1f89b81c1a5c3f6dd87309e6bc670fab1f4208830b6640ca81f813967e0bf0974c02f81eecf4ddf04e6ba5f025d3a70f0b7e780839f5592a320dae41047a4e866d9e3cf39e7afb0ff6a98dd08d106c626daace04c7b1c2b7cd2ef38b32e5f90bf90a5438d5bffb5582b7ce0eb34ade0e3c742c54fe88782eb4db37f28be56a2081e441a232597ee4743f2e2d884e68dd6455959689f5fcc9ff3379186e6bfec993ab49fe77e8eafc4fda2b9a0af8b3b103bed771ac43677bbf3dce5ecd3d1dc69afdffc23b1eabff3a44bf63b9f5db22fbd4bf6e4d7de74c939ee8f1fd5a9799e9943d65efb519be0f7b3fa0fe93761c8bc9a60879e2ee7e9cf9d1fd35b575618219ff4a67e2a79492f698af234078f89a8544b5a724a88666c00400193170020200c088844921cc4510c5027f514000965ae3c523c24918fe490280a6218866118068100000010006018866110062219d6fb84e64d001cc21864293de77790067585e041db12304b4b49b550ed9ae33aa0953b8a275a1cf20ed77cba7ebc70e19798327ad062287a65060ad98e3b64b245c87d97b2f84f6625c48865731b06a97fc1a47ad5fff37429220ad743c46aa038d26913b7475d2c31fea44d5ff38e49081d8378ef25b43938964dee366a7a68356735f16c6708459514e65b4ddc7934643585f21d827014d105bda599ed15ef65dfd8dfa0082996236fb5ce1a94f1e9a811c1bdcee39c0b7c1bd9014ecdd97027e3da5ba7dce35d1cb9a5396e02b6d599ec8394e269dca170c6bb9bba356731a0246bdcebc7214f6868e381e7c93688711749ffabdc420c968089622487ea938a50a7f939989ca71637d575f3c9122150d2af83717f5826f7268c2f0bb7548166c66743426e2b9a88c5413581d9f1ccc4aa1afbe9b0cd6895a47ea49c1665ea21e9228a220a96a3a2d99829c21bccd83ab98a70607c9ea1e26cbf1a1f2467ff8da5bd4ad42abdcc51467b05d1f3fa1ea0fa8503fd5bf4a1740dd5f7951c6cec9b29eb03f5726f1a971aa6d74219ec75385224a331707cfa4d242659e83fafc53e77129213e83c82f369e2bbd668f4ef5dda3dc08c8a4a6384c000a620a14bf633ee43c7ed31654da7a0b2151cf5ce3d6e46c62c67188bba327b2c7e6939ea68c13e1e9320a68950dfa55321c452e29f286fe1a3d612a5523e624fadd0d7096870b1791613787a594d8cd30bd9c6c57bb2bec6fdfcab55440cb5aa713f3d34f9f03a8aa7a511165b8cd81d89bca12c7546829f807c157d2832d32abb7911035978a972a5965c8c13e831d96b000ba8c2d54f44097ae551ff87af33fddcf295e1d512e92194251651581eaa390868b4aafbf014670b1d706dddd87db06925a42eda1d1df6c4e91699d68d5d3a6140bc3e149d5a63579fd5bfa70f3885f3beeef6bca67c8dc29597eca11ce4b954b463ea54c11072b68ec34e638d7c061c52bc793b3f52164096567ea3c9091ed92891ecddc847442f1139501149bfb2cbc19e2b9b5e8fee8f2870e53fcb313b9bb81f163a1e80673dd6c34dd6b109165c29c46ec38f06274b302e88c46d3c58fe882ab61c827e2c8b658bd1902becd1afe4969b699c2a4ce10efc875f3c005b635f036cb8049a4753d19466320ddfe096b24fc3bb0523bde708a49012199ea7788679180f275f6e46c577182135cb761a523bbb40e12164e29109529492005c3426224b4087f9ad782fb99cfe29ee85d1fddc5dede3f2e5d08bbdf153548e3b1e8f821fbfcc1e11be03cbf5d13588692f719b17f85f6d8ecbb384750c848e1d433fa7af92deea9aeb18f914a56475f6de2c75131f1960fe2b5010af64fcf9a5d43d01f35768e5e4dcfc43326316dfa53c0662c1ca0c84c4d616a145fe315f3b65653092f38252cb480df2b7c0be60ac8c22921a6f25be10ec81bad717c2dfb2197cd7f0421a328ee5a3c9b660a4c6a1df2274add4cdf90415333125f2ce883b2012867c09ec66817437f6a9e1dd94a6a664306aff0bdefe81281b3d7a41b94a882fb0907c4890988b580d0ad71b84c8ba9252676225afe83b0f2772f8176c875354e24b3c09fdd2fc054e5bd25cabcad264759f73c02f4aca48d6b3e78a2eb69b720b9468bf0107fae1ca87de49c102f081bc8f0518db6f03dc4643145c316837be4dfed2b08b4fdb68d999f10796b25a3bde1dce2aad9efec3f0885d87bbfc6b750f093497031726b43a4d6aa5a73a8b8bed9a078ecf4a422491ae974d0548385b610419c40b685c7faa2d6d5b8048880730d9c89408507c14a0c79b32acc79d2a61913920748051d88d92e4ba6a852a5adc34a0cf957422f8f54da3200adc3dc906fa0dd3bb8a29dc4d454815c25738aab32a93ae195c829b9f2af4e54f7931f4f3290544e3b71077337c41f75f91ba128575bfa539fd6e0e2ae4faa318b6713168c2a62de468e8fe36a12df8e2c0d9922db1a3af007b8c2b46faa18aa03096338dae1db224dc6d4b175356207ce3cb28b36e7cc77058ddbac218fe15de1d568fceca1062449b1ce7900938457db22bec94b12ea3ded3c11ab367340caf271cca54259924fe05c12d97c3da5e0b51cbff0d2624fc5f13a2e04025f42bdc662857c6dfc75428f9e208ec5afe27659e3e9183473ca13fe7872cf9df654af155a5d183b7de9b8eb998ef60d105d3259e2a4a3e73f16b540c899000e37d9615836fd80977ec1cec161f43b412c062720c2151fd2188051d6ce61e87d34078b702564c7665830b73c81f4ac4dddf82fe393fcb11c4e2ee9425be7e0624f2dfc297a88112be480c15f9a05a73fd8816bc856ca8782bad514123cfe0a730a6edc53ecb14a369a1e2e02ce652713df34e87c8caa2ce2e84cbe1d096538bf2718939a4aabcdf1c15e1cca838f6571b346ace22ed5289ea9a570a53d2ecdc33c30dbe7941e602fd2a3bd9bce8a4671d6a25929f74ed558277e4162c9574d8ac9f6469de91fc1435003585fde6f2e0001eda7580e36892ee0a065ea1bec48f6b3a4cc781a032354ad1314efad0731024c5dd4259dd3b25b5ceffea0881dcdbc2b1bc908dbb292b55903228e920a00bc2b6668575ee616eb6f521a6248de1cd34d2898b24f13840962713f8d63746f5e80ab3526654ac0c9f84e84e49bf33fdf0d105f005b13d725396ef7191913af0a929d407824f62ad6fa4c496c6a14d68edacd00c4a18f80be76c1160a164bec3a74c3110e6f9661e012e3e4a4f7da08ed4c51308f316536a83ff5cc661db34f1ba2d37815fef89fe3efad8ee718f844aacfab5fa40935d0d261c477a103ce8224e30b10b1e873cc1a6bc0c1eef6c553c136adff4ae398d93d6b22d085e9c7e87b69978fcc1db5945e98027376a6aec81e04c866946773c8f4cb3c5e17b092499ba385cae589b00871048f91981107aa3771d5a62c8eb8bfe4bcfd4880bcae24a36659ad8406c5282941e25c923d0bde5c4eb3d1c1450bf64dca8d3795219293b9ce83251cc6c7312aab828e1743d84093be90cd310492077ea8ecfb42235e933f791a4184bc4dd5103c2faae917630b4bcc110a5dbc77dd9eec2a2e1df61fcb56e8e2b1f7db70dd685da2ef9563b5c818950087294fe44f9102041f5bb31d254965f5436e26d2ccea64775a0300071308cfc6d7b31a3b7ed119a76cdccca27c0ed1192d2d5b305d94aa8b0440485eb96285d07c0041b8ae35d18c26b60e7c877565f9bfa3191fc98551c3841bc0507911bc0a7cf420506a90c0e6e4a73e1d1430096565920148d79a4d1a69841101db1ebd84aad3740b3de29c5de0de867eb0ca66f73c37c6e9690904bc7bdb64ab28b8fad96365b110c0c466c84b7f17ac21f3c71ba304bb3d07e1af5d4012edf163334df1f2fd8a1cd1f15877f6368d2b082159308de5092147ea2a16bd2b5dac8397fbb0f61cff72086402f77e77a100cfadf68925dee6e36398cb7e0dec6fa93bcd17d1a97ee95eab7b07236ee35a44277fecfb55082fde77cd59527fcad4c579a4fdcbe3417cf6920e583f9b0ae16a45193fa269b127647660d4eac8259d5a4ee8884eb82033c2fed664d645d9738db092b4323b0d343edf36226dd8bf4b2c11ef6164ba47c11ce161736d8bd9fabc96bcb6946ea52df152b4bb3ed47996612e05ea77dd79203fb7616a234e7254b2ada2a386df42f03bac8d4c30af4e0d27e05c696dee83101fe7bd1de7fb5355dfc8eb9da1933567963e0fa87ae2e0b5da15404aa9d8fa87fa8d86b8ceb2f481dc2c1f8f5793948301a09c762000f73a0b20270cab1b1ee24504c26b860415845c87e4d16c622e78f173873130e60f503edf46f94d34c81ef01d80aa0e345db8a129e6f32b25beaf70681c2e2321199b542dc2fa8320494635855fc9209bcf21c59158b3c0eef42c1fd493745425bd6fb68d03fae8cbab9e94babc08a06e4cebf94a413a5bd4429f29345182d11be96dab7a9a5427c0853e6d55d6386e35ad75e63b61ec4caa4df0633211d274e95b982f754cd3fb31bc18e169c6370731409baf9fba6fc0d7c9d4ac6053ffad5d9c9a47ee97dd1165527152336cb3569f7ad292e105ba72b495f894646431516b6839520ea05d9b400866879252a0aca56d4505677c3c0352a7300aba1eacf9ece17f41a5a91cf269b80d77f0648aa6854507fefaac9b8be7d4d095142d025009f6724c0ed91527cf540f2148570094bb16f030e532a207aab52baeb230ee639bf9f03c9e039e38664369c470ae3e475eed7af06e79021a260ae7b70f416f53c22216e5ca4f44bf3efb896b5719c44e2d5254778de26d0c02fd35b24fdda655c2a50c599afdc4a57863cb665ed2e75fdd7a5ecf768b16271457bd2dfbdd2ae0f055c627024047dc8cced7bee071849f319c5346e88835a2c99fb814e744d0310656797189fbe23ba25bec9b744fded36499bc2aa3b4dcf38496bc92ade902a54f2bbe66ace73a2ebafb93ed36402c721d8b97dcf2833021ef9d03ff2ef33a383dd468a9c90222ce34b29b7d14362672d0ba588b61901f822fbb334873fedba9ed261fff25e14ab97c27ab6d0117ef136c2d486daf32ebfa0f6c30d0023d7b47ea0454c254ce7bf750fdcbca3b476658e9e46f77a988e44c2c203f99c853076740ea917fe83de97e8cd6264b25e858f7464189b9f68a1329628663bd65d096b68e1419d1bfb761addc63ba142ee6864d3392f397db20a82566bfbaaa571c40c7329fbe658aaeccfab9e04196138a1daf26a239f136eb4547ac0d9eb7cad6445d6712b066e2c345557f337d12c8da0e7d2a37bcbc0e69c33c00405271f8bcaa27741c55dfc31860213a3bb34ff9ec34a7852174b66e5d595ee861c369939a8862bd672ffba3ad6cb1b03b5733e66dd05f0f031d92ad7f52ba12122ecc030e75afb7f725c9c132d8c6be2df7aa7a0d4345f8e68bda323a6deb24250d9e6afc76ff27270b30428755f6859600f9188e5a180cfc7843cf42d918245b53a04c045827b0800efc7e857c4b90d49c3bbc00f1a87dab56d9769ef19dbc5c398e5e877a793b09a235e806b9434d814e4af50518e81c67620541b1f32d60b9e280de10176b07e6b5b2b2aa25f7c18b5ddc0d1d41c14ca0d9ff1cd80e905adf91333c2573ced56dbc2145759100746a2e844875ce513560bd8f0ec77077d1b95a00a4d78b4340cb0a24e53eef16697d48e0564ac57ec9574bcfa87953169160adb2597d3a74427fa7467c9f63660cc5802bc905d079ac532be8976731339466d2573b0b1b18a075912cdba4e6a7c12cb938702c99c57953b4942787295539c698131eb0a7710a4888c0816adeacf98a80ab37604cd0335c8643447772f9cff7e43ac08b4004c1e18826dd1bb3d1d5d49d99566fe73e720627609cfe71aca370ce7ac84068af7879774994f1e2ecef17fe891eb28637fac185a0626d29f1d3c3e5c95d40253c16b8c0da78d14b238376f8d8e08057a9b63ed1bbe5c5690d355a1d682c78605ed68f4cd457bb13f83dde4b8f2a93d587b2ffd54d01368688c4d8d56b6581b12526d1d2a9b7b0dab8445bb293a049eb375fe0aa1637681fd59dfd6470799a392eb38c2bcb0c3a5bdb209cad59d8e7a1a32266b8a531012dbda616cd9f276f8f0d971794304b151ccfb9af86857d328cb17effe36671754f6888131a23594aa2cb189537e91d16a6cfecc82b192acf1f0df7d0409d302434777eed85baa4e83b2b500193dba96993310d8b5012a68edb49a78fe40f97d4c777c3dd9c801eb65d2a0e16b3700e052b25dec57b91ebb704f0839c0e75a81fcc0d0df4bcbdb60d38623a1634ab2625de2cc9267b5725ee3a3df802dab0b3d96ca6a26655c488a9d68020bb8a299d79dbd638acf57d049e3d45c7cf70cb92ba154ba1aaccdf4ab08592bc2c94a6326ab7631005bb6e7348bdd9b0f5850da7c1ca4bd6147a3cf48a1e9e2731878eae9a73df3f30665241a060f54a3b634f61b48cff46eee5ce0956415177bb7d2a408bd705ccce4208e154cc6750d75d0f25dd060fb68ddfb19d966e5dab402fd99d929f7fd339ccfa2dfe326c2b30da765b74d1a2002108f034fded2bdc899b3670947182f10852ee31587bcbcba2a2d2b0e397995393547812dc9438e3c40344c0ce8fc0024cc4306163a4f1fad71c5bf15d99aee2584a81767b4b2aaa6c61a57f1af783dbf6d4543dcb82969c5c801e2863e752b04d543a18a2ac6d396483c8ed8a0885a9df24f5cc48e14f1c1110643321cab3fecda3c4938321c77d3b830a1394b0e4d5990f3956a4d2fb91e38ad32fdcdb8173960660c832b62b7300ddb610ffdee45de0ee1fb9b02bea2fa97d9600f0dc10d2ca9cadb7f8e42584c7f2d0b2fc10297912c2d62c318a2d91f669f75f57177788b02ab8ff30097fa542e15e01de1d3f5a9e8dd112ec6395cf8a0afde6a2fb877072247808cbc6b485cea264a850ea8b223ab1f50a599b3fb9258824dae9249029d4fb1649f129afb53890beec50df0a88a513f20ed565f75a2167a924f3ba8a0f0d9e32f54a3f2f21646057c5d4a2064929c64857187815e20fa7e35104e6b6a8efc55d642f23f0ae21a3869a0f81c0a0484d72747ebabcc22788912b605571635a03512d4a7ad3c276f80c2c0e76cdaa7e3aef21cac5a54cfa52952de981601961fab6ab2656e32933dee346b66c4a4cff843ed8afabd0d8c13f5b6aba1ae255cdceb316b8c1a0e63900610c9d37a72127e88638bfe5173a840a14105b77855597c7a7a407d7119ba6cd451bd20d68ca946e9232aa19d46fccda6b6486e7a26029866ffea1f3f2d698d2322ee41d5cae327f4400c290fd8c8c2564572d00c8ea8832f293d83f09af5dfb7f316aa68d34c016701d9bebf8f9a78af5979c8fadd720e8d055e8d621b108f1160350acdba4ace443499b32ca6b7aba00e4d5f7f57c1e3cfab692ad17b9d9596db4e25524a0e265e1bdd5914797211e38543b8eb532055ab54205920ae26e684b29295501b90ed6051b3c1ad9e671be522ca380505af2ff67654c07128f38461977caae77909a90752e04fa0c216a012e849641354d4a0fc8cc221119312d090ef9d2c267f82e306c7ac02089a14d0e4cf1e2c7feb37e0a0459e9ef3a32c6e3682ba4d5e5dd23951610f018c332f93975773bc56eabab41243fa03b5c0051a1ba783cf5a7338414b46319033311228580ad2efa1c88114ad7ae54a0434ae39984bd8e1e1e5cd42abc35dfadd37ba513b399f5c0a69e3820844d4f52109365e43cc9d443029b6f1e5791ee2d218c2de6144ecdab2f5a734d2aa3b26772cf4afe7866c0038415faf7c86a180ce6ef895b5b871c99fa852c19e45644a2070cb06c1523b7614b6d993b44888e4b6a6150f78ff970086410230490c5233c098243151613b3085c6dc9986ed25bbff254b8fbb84e3f0146edefa25d9a8dd0b93b39b086f70986821479425920753107908df3d70d883f52ec4acc8bc855d62aeee10bfa41ed21e0d2ffe29c41505cd011a7aef4a86230b2106d0b6e18bb94dbf407a87afda3b020909998a04fe651bc1cec9dc287e536a8b78855a71548538175f2c140d49debd784bed76d37bd0bed42a81a739109a628e03d8d78bbc9ad000cc1e2b53ba8f196ab68d0d32bbc40e44959efacb92e912ebff9bed37fa039505b9b72b0bf950b05c2833f5173b83e9534d857e6fb6750eef1a0432bdcf6056051e1cff08bf20eaec17737d6c5bf06cc2abebe02569be20fc87ee64c414dee581089f9afda23364446212acf4a506a46869e9dd4e9b1459b425361091d0cc2f9f0709ee21f12349922e42b152dd871a1f95e8f467eba829eb99f328f5af31add25001858ca25ec4ad78f1c5ddf44620ff388906db083a510abe5c4b5067f3c420414e101242ad0402337e67c85abf649ee406aaaa62033708dac6527b58fd4c3ea2aa5eb68677c6b054227faacb252948fb80d95115a50f2f22c04bb43d29e29833e646325f6086d5bf168f44bfc530df1c49d8abf058c4111f9b3f0138bb4ddc72707dc8a456081660114a1aff44a1f37c47afd7d8f270ff0bb50a67b1d13c6a6ce6a4ca67fe04e16927e3d957d59ab6bbbced3b88284ac9ac366c116c6e15dbe814131006b62494d17eeb0a50bea0aa0062ec944a730c2f31109153049b8ccc50226a9c521e89af9a959e40e484eff2c1c38033b3e80a3fa6da85b36116789c960a283e9e486786091b252463cd530d7905610a38e18aae5dcb55458d867348f9c4789714b4f8aba6bf1016080b2dfc193d0e80a8cdf177dc225e3444030c9da46e60d78e06e4e6125675bd1a42313f6e32f64339eac8bcaad637e3ef944717a1c006b31931315840609d4c98dbf7ef64a5edb0269c3a24e7dded1cadc989d114c7d7c44a1b99bcd6971845850be6ebdc7885f5f10116866a9c8ee8a8bb9ebe3e0c73f2e879b5c24266af16b1b0c0cfef4fda44d49fb4b42a4cb82afb9640cceed52136cc543275ea8fcb769bc854066567c54d3bdfadf531b8480377c7cb67c61a6e56a6053bdab70ea5ec5ad9c2cbcc25a18965e3bc4ced916f5c806734dab359e991ffbc94884cb83ddf4a892d386d5d1a5279cc3dac77ed7cd61d6482a875f1f229b70aa3dac0b4ec304afbf2be74e53bf9706e989aaf4c27f6d83f553a10a153e9f62f2bc7eb33718c47cab6c9524d0e9544e7f80101d2cc7cefd6a6b515fab0146d8277c63adc8b46eb6883599adb7745c669cf91828658bdb47e5e7fffb4177b67c62daeb721175d9352ebe0222dbc16fb57508a5e7bd05a34a4172ebbb97c4f9fcd3570f4c03f2edb6d22571b949911bb3c5a1a2b1b7bb549653bdade5969e3d7d35771030834b6178ebbd4fa0f1b3fcec591fb720f8bfcd30a6212ed8167f61abe43178eb1a0f1d868a1b37e2cefc0c849da650bae56f048b58ed1b74b31f52603abe7a03824e8f81cc306159d8f13ee77f809fa75caf1253f628805e9c114deb85c0643410325a40ffcde2aac71ff9ff938a19f73719e5a0456a0a864d8f5a571157c11801404a9caa3009262827ef4f372e4b1ba2ac9d808c61f54fe071c4c62ca518705710a244767e9916a70bf8428b32844b10656ee321e58b7b0ac0cfb05ca8a81d49c01fc40705e725e430a617df15f0bcea1e9db5921076dee6db8963fd0b68ad02ff117b516ae68c483322b4d43e5b77eabb30a99588867958d8b8591fac88067898d4fc3c5f4892041fd94a33ed1e4ceacf2e847200af7096f104ce2c9d90a3e3bbb522470679efc06cd8e390736a3ed5f3f1bd97c024bc7d801af939fa212a28afe0cf0f2c3d64372f7797ef22d6ae658fb8948ca980574f5f970d69f7b112606b750c3feff601340be37810338913e60c701338526d8d6a2f4746c11902c522054b7683fa615d1fbd1579f95378da5b4adad2fc0a91e465191206f448777294ecb26e493b8a278d02065cf4980a9c0e955868ad6ce0873a9f4efd08c0b05b5933e43d0d9b7c898cbb4854277aa69ff4046cb4950123986c07ccc40abcce8fb132b97b0c7ae74922c3888e2222c0d79b58f12fd906487f46cc15a40206d95b28a8b942dd64d14b4e0346c0c52b2f6c29931c908d4e81543c159190c20ac25250b26d0c43c1494d97e6306dddd5243db735a9694ef8b7985db7bdada6ba428289cf5e3cc6453d9eafed9ebb96fef664f3b61eeff1c98cbd59040df436afceda6910c89d6119c28e6cca3d28497af33133bf8320b120d5f5e343baac274f52672571a294b9e835b7f06e5f74aa1981ec662003caad9bfe28c12c6334cd796b900be50c616899b2c15d4ea331dd17baab92d5b4c62249c864480396a883472155b4844254662c6ba099e35b9fe9fbd93be6e8b6ed5877d015833672ce2007f643e764ca48c0a069023765830c5f703cec3d83af58ceca382d1be7ef63072858846332fde938a794ee0a64f31885454410555c0d4c359c0c2a00156592ddd5fc765e5457057b0c9f4443fffc45d010b95989e0515cb191dd0ca81c9bed0e0c7852207bbfe34131870236b159495b0a9bb4ad3a868ee083a739413c51fa7ab1380ce35302fd2e01a8ac7ff69c9c78f568889804d755e6b6fd956bf4ee92aeafb60eb009a6855d680a856766f591cb290dac8484f14194665b6188bd4c081aec08c7b48072141e7d25038348642fd27959ec6e19fe0f3fc8893fd233c1a56c9e62f9a4218fb0d583ccca391776ab490bf25b37385ce069f6f41f5cfdd4e8d9611ac7edcbe27daa7a8d38f1729c80c27188c8512b0b8e5909c1ee07e39aad42cc7202ded1615389284b4eefddd5a6899e2396d70a60ec0d5ac34df8cafd7b8e0df4c3d4e2eb9f61dbb4aaba9278c2dbaf34b2d3c2cd7f7f10b3645476e64d31dc08496b6f4b5548b987c0ed17e1d4473e8e44d917138603b0155304319afdd1661232fe8f4ac61f8f8e72ef2ff6f8df5d02f1d2d2ae8b18c98a30dd35b6ebbcbeae22692dabb6f892f11a2000277fed755fc742434648be510a296ddae1bad793203e7a1986058703cf7101bae05be44649a6c8305bdf093bab09ef478c4c3d9557fb9cde91c70b916676c628bcadba7f918a9fa061f4f2447823a6be343a0d62e70a09032dc5ecb733b94eb8b7200a60bd4e8b67ad118ed4577076f9da92007b3f562eee736c2bc4b5119f984701c70f565a0ed82178bbafe8efd9e78226247f1562d2699c4dcb307bf53c541b8ac2bd6a0b7cbbcb39ae082c1918f09eebd28a4f3e1abf78eefbb3a048a9b160057f71a98d46f8bac214b1e150d3c047c08386bf6eb7036d8ac8275fd6705f8457aee65eda4fa5525206015e6d7382acb97823e9818f81ff79f97fddb1c20e7cd875b3325e125288de7ee22e0392264b748d72f269a3db3188c5b25c64193f0522c48a714e3abfd59693d9227a800d903b70f650c131f9745946c85da2d1459d53c21ea39a4901134ed5e141db20e6487bba3dea197e3eba8c8f1ca0e123fda6ce5fccfb46209d9515a3c62e1703be81db8cb51d647a3bd903ca14d5bd217d3e0455876a8c84553cb8b1a57c01db8c751d647d327e9ec30244f23723292a31d4b2cd68ac8488aef70c94a03442e1cf8eef27aadd8391e8e0506fddba46083e536c1b70ebd741dac72905607c993b67b29cd198d5b32644c8b11ab0e78d588cc4218a05727dda827c9cb0537b485282e5d3e570e65e8b915116688facd15377548ee683d72f418ad2d65b934bda48383083e8d48c5103c8d0fc9c892962db90eb2ee384d43e33b1959a4650bdf6199430307bc1d66afb48082d70e63df345e14425e681c8910c7c81e6deaa46c9276802c73c83b20b183c4459bb590f582d64dc01cbaef48888fd63b32e24463cb48c7a2562f898ee18e417318c24ae34c29d2a1cd56caf267c7b9584e49f23a472345b42fa4c861bb17d96e8952193caec4ec5aa96c39d209d201de81c681d1218203dfe174d077e83bfc0ea8741459a0d50a1a479803d5f1ad8eb2623462c8c8082d56e2a543696e1a2d0a1117da72a410709a37c9a20ed3ba34238925c7c82cad2da20e650e8f0ea87414b1a0d58aa23a920642ebbe1c0408cd43081d5d471847ba235b0e63c7d01af2a38e6315343a24c1f1e00ed3d0348962e778e7800b07111b5ad914439434ce90912e6d5b1c1d92eb48c80b4d292f0e74073638888cd136127187b2c38f83924396ee5a760e634813481a43445931d263adf4a336ec4ead60afe3d80b6d01858e173412918c63049ab653401daaeb20f9a7ed8953071e0ee378e40c7a121a72d30c3655a4665eee3906499f9a2645ee72bc7298a5834483768384da51882c8d1b323246db1831c44ae392822c8e6688c8d251d60cad586464448b17b1e838ff4d5bb510e242e3900c718ce8695c4b904dd08c92458e798e841caf1c6b3a761d7f47563b8a2cd2ea11433aca86d28627230aeac4c676e80b97232f4340c21a1ac6b6def2c736128697b82fc1069098cc16b081a0b11211c7b2e3cb1195ace2edb4c25a88a4dce71ec652ed708c633f9e4f7f954dee46cbeef77aaf9106335930e819cac808245a53447328383c38281dafdc61889fc63a1971a635caa803971d24ffb40de9d081eb70396870e8e690bfc3904adac2c8c895465a3eef28124d1bbe14124ef34ea2c841b64b3b9050a895cd46a6536be9b63c39146f63c0f25923ff4698d64bfcc877b8fd18b1230506f297261a56edbfad743dfa2c4aa2e61730d35dbbbaacb9bd91224d0b66c1efa1e1cff58484b15aa4831ec4a31c83f6e5cc18fd3c091fe5d22dd40dd0836b61288f8ed38c291da315cb809eab4f925082e56c0c59f8c9772ca6fd49c86a2f01dac967c842f7c562871e700c97c297c72c70163f026f4684f63421d434f9b35f6266d8d27915276e2722c4064aec89a6723e8fef9e92eca9a53fb7747e09d3bc4b6247df118223d511ec0e1231da34a590312da6fc8583ec8bb626ee1c8fc641a4bd62b53a2d649902cae615645f40103a6e0e3210788f405fa919bf20fa87af4c184b290211bc67dee760b6aabc8f924af94b76117decbe1b8d4fbe1439a4b13e6243ea03748bc7c57e09832a19f822516a6684519511aa708c112ab608d8a3b5b591f5d2922da594522629039406ec0505061bd3d9c2ef0f03ea4983ff05c4608e4f8c71c5f6afd4cbb9566fead99f76c6283918d8efa2d2192499389568ce607ebef899465311138f09e62ddf7eccad0545a6cdc6c26c39cc6db697b77e6c3eb61e13e77bff8dc7b663d3b1b5b0f14c9c16987858b0e5d876260e0bdb0a361cdb6be25cd1c4e3236e42b6ff363a035ede9ffb60de04f32714ccaff0ab4015be8d3f05aac0da38b40126bc52260d12b3e55266cb5fee95ed578aed7f8b1c04fffbda74055ea2bbc4acf14f81978959739bb853668dff075e2ab3c6df04de2ab3c609eb8137ca4d02bc4a8057caacb9e09d5d23ee11b3068959e3cfe15cca78c38057caa4f17f01af1393c6b313fe9788cefb9a5910c6beb37ab36d77bbdbdd72b6ee37874c5edb6b16967ecbb7bdb657faa698cab91f387fce34eb3b8be59a56dfebbb0df5ac9935f339d3bfe013edf6a7fbc6fec0e7a3a24e0dbff09b35d395727fb761431074cf75d29f3fc7364382fefc26e8bc855a0b75f55c9f8bdaa0210ddda4da628d1ab7548236418735c21a95067b2efaf373f65cdcdcd9d3516d779f3143f3c23ff26daeed1a52bd4ddf6c886f3853823d6997ad027be37a8e82fbfa737e5ba4d46577fd39f59cb65a7bab8def4d9fa3f4de536f8684ef4d6fc2179a50f25c2ebcebcf2eae29c2dc38fcc067a3f92fa594d209ac2c8fe5d9f3ddddddabe7cab502d55a6bb59e0b5b6bad75ddeb3087edf9f75eecb92cc6d855b338919050d0e0d3a0792ebab9e7368cf573e18c8d8d3167eaaa67a34bb25f6ced560a3a30b67ecf0503c3a8c9a16889f67c4ec7b10aec0dcebb9d1765b2edd30b638f506fee7d7dfddf738bf5c53b43cd64bb6cd66cf9e88bf7f59a3594fe0eb26bee05bc990d9834febab210c0d9af16c4db06def51b3071bcf767c002268ee9fd153071bed3fbe34c1cd4fb2760e2a4debfc6c451bdff8d0d0834264ef7fe0838800126ce8c89a37fd205f07c082b05f0cc0861f5e2148201abdf26d0069e1921bcd408e1e53bbdbc0a54416f146a17afad7d0a54e1dbdaa34015585b0b6d780975a5394d10e873f4debdda1406841154a96dd347d13f7d25d3a6ef7d75d3e736fd8dbea6b3fbb6f8e652fdfd02ae52aeabe04ac8df47bd124cc0a10e2d48bb6ceab9e83685ee71bae429b8b65ddfb56de74cb4cb9e9e6bdbeea00afc467537e2519e501f7213ff31527b78f4ec6c1bc48a1b248a4df117d19b1bf2c141886ccf2121b12dd23d85f808d941dad3688b56df3d875c8062d3b72e146dfab38666e17e48093ee4904f934d831cf9e0b0e96b11d8700306224188d84189122058cce4a085cb114054663eb678c678b4b2b11618f8bdf7de1a503c562db6ca0e3558c1c1919f2c9cc4c47220ab5c11440f477c5cd1388b204a9892606ec71dab96252a152c6812ac6445e3de7b3b7defbdf7de7bef571b085122830b376822880c5bd4b821060409932e32e8c06592204398aec58259d052fc7e588b86f197b9d47ba5608cb1b6503801c30f21a680c244162b40628b19d0d0c44812319ae3c82c7340e4881051929c3499a288223030ca52840e5c2c942b6245519c20c1c50a768680400cbabc7c2802062e49b015bafe06c3dd71c7aaa5a70a9962890c1b6cbc8048e982072976d0c1e7c447ca0e3e7a089144de50c71a18800486860d318b4589120c0487bd2317ec2306aaa4e65c93c8393331e1a29c738fecc4db2a7c64c95992e018c67247782dc94207452c3082cb0d263dd07044febcf0a448101e25ba441bf9d8e22da14e6a80040964c809213c4c2b4db204a1c1131de008e2e7abf0a144a622e79c73cedfa5124032a285a31f19b000640eb1c5080d5870c3153698e207c94d2346a24d4b199f74235105a185247a66c042100ea2b8400f43c460c813566ce1838ddedea0267143c511c2c5121d46253f5222f06385141d418678818b8f1e21536856886c083890c2071521598078d0c28923a02b74b820cb0a804801002992dc7befbdb7d34758f0d044081e8874eca0002439a040828b2e445a4c51ac62e019b1084202c84845173400e930ea790d5d59c24b4aa0d02284831e2ef8b971430e4a2d4ab22052b20045122d4503486480011519cca8055aaca8e1091d43560471c93d90342b39e79c73ce2a6fd9fab13ed5ac37e7a9ed9773ce39e7fc7df7b51fae42152f046142c78c0b271d1842a2c8107267063f7e60a1a98e1ad02a5890b860c7280b1610792008911e37c460f623c30d4af88924d4045b86605d3c0105f6d3ed80c4022237b092a5861f3ef50713535113386cd1c10f2c40e1f243c906443899018f155818fde8919df84a8481202560d0e2e7881e35b85c88bc40423922032c02424246464040d42b596bad965a6b2f1005ba17531e1e9cc54944447e76528cf56b620a1bfff6da86575bbfce6ab5575b871674a49cb3e6ddcf4dfa297a94fa9a387500ab8dbf86628e7d4bbdda8bb3d636aef34aa6ef844aa9562f30ac181931e78633b3e6be983514860731660dfd1be434fe4f74947b657b160f1207b04ba4fb48946556c288cf4eb9e213e1637ddf9e4342ca4d8be223bfd9e742110b4276b04c606d8b07f0f8e0e40a2b8c7e902dc032e5ca0a86e0019ac184b5a8d1a95e8070f516356af4ec14c142882e8e28e9f143128e24aee4a801ca100e1fd5d8516387aed1a95e183193f4515145de73c8051e432eecf854b169079aec18f2c121e76c6b74aa173e4d60ad888f8b01c537db628b89d9e778a807d195df418c20bee7f1e5269fe38b51e513bf18557c5fd6ba8510b4d63a3f12eb877a8ef6cc9e433e40b6b7e790cfce165bb7059c3f37a3eab848a851c3d69bc35d2fe773f844ed3ad872261d3ac24e0e17386bb4d6e974d673cdd9124fade95279f65cdf478266cad9bc12366b9febbcebbaaea35397b4e7b2dbbc38eb0d87f3524c85b33f27a526d7dadd65c3da39fd8704ce9453023869b6d65aeb5497eacf1b4ee9f882699ed9fbd36e71853abb852784616c0d9e3ca17a734279f654daff2d9e4aadd48ebc6529a699d2d7555bed6e98bb1be672a7bddc694f2b6d26adb499b8af3b915bc77dddc9439552333a14fd147dd5a4bfb21ef3167d4a692914f4442828ca8c74fa958e7ea51acd2b47e509346aa593da907ab5f756a7d7abbdb7b317e70e67ad694dab4eb52e6b4ddb388eeb36aeebbc92a9643255a726cfd32999becee4e97c27d40985aa4e51309e2bc58af15c2b9999979999ea74e6e4e9d06d41cfa5433bfabdac5e5eaad3177dc3185d9a4961db9f1a635a4be20740cf13f29690b7bc2742270f752a8f4ea77aafb5b5d64ffa6af5726036a795def2231be0b6a186e4ad976e8b9327742a2b4d0e5f625a5976930cf21b8fe234f477ea4e52d2d151962c57ae4cd9a25696a04fc086da863ef3561d5f4a1052e5c4b9f82787434b42a46d71716c4217c6de84ea4d09a9d2f83bcf4dc9a06d91648b25a45289c354a9ac9567d6dc97bd3d711adf84bc25e42d7fe2ad52b9dddff4721bf1ceb6974748a5a4893375aa8cc11fc927da5d5fb6f59e5e956d07b8c8cd9f1bccf189a62316630e2ce2a32572d6d4079f7ce2e5d92898edf91ad0c4d1beeacfe3e5d1c212f9557cf4453dee5a2d930c8a9609f8f866ea23376363fe7dd7accf995cf5efdfd894bad7ae73d9bf36accf50c7da997b59b56ada7dee3a9dbae45adb705d1562ecfbd5dd4eea25f1c6be9fe7d2d673d91b82b3e67a2e3c43427efc39b45063cf756fececb9ec9c5adbb68dd3b4ad9690c31a352a8db65d8ec5e24cc8f8769a76efa340bb541bfe97bbd6daebf6865a7bae39b9cdf3af209769f77d9d57427edc7926e450579a4a633d4f84b96fb5cf599fba642df574b6145cdbbee1b6ed57cfb5ed2edbc5694f47dbded4de0d6d6c74df502cc1b6feede038137765d5d3c1fed573d12e3fc39743eeb376d12e7b7bd112cd39e79c1a10a5945237dafeeeee9e410d33aab5da2c64adbdf4621127c11e0aafe4d3af75d98340dedd73ba945fef9c1fec5eefced53df71bd176ff7af3168a1bcff64bb43d14f19d44db8a27986d105c99e6a82604579fab391ff87c56b629a594d208e45db46b8ebb7b1deb586b7592cca939d69665cebd34466339d8cb79d937b77ed9477fbac40f6cfb1ebaeeebe5552bd381b17d3e8e516ecfb5eb563c36a62db3e5a692526a2ab7380d4d5866cb4d46de72b0fe0bc87a1830e602e9305b3219b1b555a08ecfdadf66466e73933896697397e460fdcbe78879983779dd9bbc12647a9834342e991e66cb7fd5c244a17ece99fb02cedc708684978779135e1ee6efc3842bb8e08626c03c2b5c21e6617e05d6bffc8d106472de866ffbd553d4732f032443d69b18d48b75773f27eb0320dfe559f18cf506e6bdf4b3de9496cc96bf586daee93395a950646dff18504f1afa2c70ceab034a464fa02823b45dfcb6682a474059e28a47a6872d3393299a81e0cab678651bc3f65d326d0255aaa040bbe4a042858a575bafb5f8de8b31c678894f745fa22c497289cf8b8036f56dc2cd662a8fc55228923cd171fc665191694669cf7f2231856da33071ef8dee547ea3728bbd1ceb1fab662fc7daaece4e5f7c2fbeac8fa36e6d0e2d08b2f0892a8cb9e936dbbe5e4ed5aa66278e9d35d4ea50dd652ed5cdd747b84cd9e28783091d443c4a5089c2c411ff63f6c4e77b0e11814284881d6dcf2122558298205c2124471053aa50b1048a16b040c961684bd14f9136d2e88ebcc4ce6f8918d91eec39440487ed752982e366d4635e56d2d2f1cea2191bb8a32048e503a98054be49439fdd2cdc8bbaadf6da7bddabb5f75a7ca9689390c4bb632fcef627a6895628e889509459ceda6adbb5dc731c15ad110be338aeb35ee95a93d1952c4647e5d77d5e8eb5a7cac3455db5b2ab5575baea9a78cbc5ea03d066b77780d7a2f1884fb46eb1c6792694ea2566c6035086ea8f68f9952c3f7e33c37198e14d7c98e1413362f4c86f4e48f21de7e1339f9634c86fe838d227238d32d229e3159a65cfa7e4a42435427f70209b903eecf91bf01b5a561a7f9da54c9a4fc713dc06ff948fc27af2cda001bc0c1a7eb3f98cebbaaeebbad38bdf66fdd36a65dc9f3e53c9ab9cb6228348922455a3cf388e63aa08b5c96432d9ebb5f37abd5e03f0e084a2a259448e5dd7755d3763a6da3366cce06a91662a7955a5552e45069195e44812e5554ed3a74e26ab4daaaccaaaaccaaaaca69371e9388ee348721cc771dc092fea8fa5d5519b4a5e574f5afbc820922435921b7dc6711cc77aa516d5a25a548b6a1101044083da94244992d4344dd3b4718abef28de3a89dcc5e573953d61a19449224498e3ee3388e63016a68a9b5d65a5b6badb594aca2ae244792b9c4ef7595d34a58db8d0c22499224677405e8fe882f168b85d65a6b2d2d6949cb2391d212d398fffdb9b11bbbb1f7ac2ded11674bcd96da96d996d89606e80c70800320804687008e06083620d8d854a7363e6bfdb358338f692f6af18bfdd644d7a9542f5ec890b1c51b9b89d7019e7d566fee14222f9390bc7dc33b6b62a6791bbf32500ec1b068814101bb4209d88c06ac08581232580f6c07cc4905aefcd849e2c2852e32108ab8c18910586260c396dc428d4ef542871aa88061062e5692e0814300701831c50636a002a527f3e42b3025b32eb01e28603bb8187e674852d19023d8ce95214986c8f00d796188cf101f435a18f21ae2c39025863cd962cbc149b5cb1a29bd76787c4663bad6ee488ed472a48a43bd89f29ac27365cce21d7949dcce86b4257942ef848ab7ac303b835bd206eaf089b7dc92ca235b7a3de16644a87fdf556b75a9543eab87dfa5b3623b6b72adf97e9fd65aad341ad7ab6bfdbefbaeb9ebdfaf6fafcbdf3ee7d9f077cd9a3d1deddd70c686b6c2d6b625dc948171ce1c97b93cbd25b6f05fee81f8f2cba6c1c78562eef47361e6e69c73ce8be44294524a851c66e4eef5c276fe5a6bb5463be7b7d65ea09df3df8b45cbc3852fc40b51f2c2191b7a7bafb7178a296caff47a73ef9ecbf4a59068e72f8599f342d19176fe50c44976ce446fc515661b045546abad75e4464d411d3ef1b321c0e44ce2e1a3ab9159634e185e826138493d52874c1a7fbc64dad49ed9f2afa3b78ed4182a0cd5482d525f9838442a6ce20cc1b07a8365554875a1fad49e1aa402a9e3c441c930acfe5424dbbfc650a7cfb452a5b0a6f3c695bcee05cbb06ca34e9fc9ee952a85359d37aee475a8d3675aa952187572df9f89ee92b7693abfe092dd1bc666f96ed2ef601ea2de63788bdec927b61c93db14dfe75d574d24b058ae504f95ea039fcf7eeeb2d6e6ae7b21cdb32e954f8d6aa5fba1f581ab3f6588f8878f7e80c75b9687b7fe874fac3cdb5e226fe1177d56524a6904b2e8b1d2887477b7ef4664add588b4d68a74dcf7d68ac51939417c5a9bb1a1f7fd14767e2dbc15ccf9c0e7a34f3d170dbdd3a9b1ef483aab7d79785ef60d7de62d1bd2f7518b71f839d30f7da2ddf8c69ec1b8d6cfd5d53a5ddbf7abc57adfa7f47a22dc6bed65618cf1c5f729e5b257df1361ee5bb10b670cd22ef739d304eeae5aa35ac9feb612c0a113cdcc30bc41bddacb519ca3f33a2ee79cf3d58f5fb7bc359fa494524add9b801727985dd910d0ebca6e8023c803f4819b1081c508398390253847bc86e8d184069e2996b032a4ca1456ece0c30717661437c6204d604fa83cc14411aa19886072859116301ce51e5ca680c190c3123178c28a0c3166b6fd3b5aedad1767725a9cb5767179b3d6369c1ab3b529727ada676de33a99d63a4a29a5d3528ab1a6a178b63f87da41f1d8fe1d8ac767fb97466fb97d79aed5be32a0263e00c98248996be5e5e7bc4319a1aea0b2a08c5045a82354892aa223ccc7086cfc898ddae768a450d01321d2a6a2a466def214e9ad1452ea289594424a953baf5469a97badd662cd520ad379db6b7d624f6ec9dce80e1c883ddfc989a3f910167beaa732ec99278b098c15989e97a095162b242a292f7adb3f574b431693ed8f5f84b1b2fdef5656989eed5a235f7cd9565ad41592edef5a25856eaab5b5a1e833994c2693c95eafd7ebf5fa4e28544ab5caf88536b1a59bc9f6cfcad7630a2a69514272398f9d987c56be9eed8f4d415ed2a284c4639e44e6404eba10499224498e3220940c2543c95032940c254b7573b5eae6cb0447606138986e62bab9b9ed96e2f1743d70557045e892ed6fb7d293b2fdabc7b3fdbdeb81eecb55c1152991fce53c238c149a1115198da8225411aa0855842ae264342eb41cb4137407db5fa3e4f664fb7f1a17dbdfa4e5b0fda97682149a11151991244992e4388ee338c2e862f49881c059f890a6a3d51988ed1f93711674d391c2688c2691019124499230ba1819d3b03d0acdb308d3806f94132a0d7da352154352c554b156aa4c9562aa4c95b354992ab7ab542a954aa552d1a79b86aa98b7fc61768e29b03863dbf0e650c5eacd8c1a236542402a72fb2412dafe5c8cee6504748b312fcb4318f39a353bf8e88b31afed31330b20d9f22131d30194185b3cc982081fdf115fcf5724862257b6cc9e4345b828726465b4c8eb589db4e5a5b1f0f5897316bec2970ecab2dc9c78a3a88e4e963466e26074137ce14140056346c64ba2093c908961d5927882182c9897952d8928f85b12570071494c41984ba20a36f741a84bf4ed0f2fe88ccbd418cbbae107403e3bc32915068cd9cd68eff4479838f8a9ccd3a7e5c48979fa4ec23cfd5a34715e9e6a7f5f03579bebbc92e9e36228ed8f7af1189c41b2bb173f2d767dfaf269f1c27bf114b4eb3bcc2968a6f422aa67d7afac1e19d38b282bbbbe8d415989f97ee665c0fb2f4031c584757a918be9ac4b305e6f187f71bcec17a0c8c56036fdd4369b3555b5bd66cd6bd97e058e403f06a4e5aca1cf029d9c35f461c03ace1afa2f2bd59d899b11bb3e0a3c5119448a85e840881508e7d537abe11b6a201733cd268ea671316c55337423e2be685165e2f7255a2617477d62d3176bd1aca12f66641c8c89e1ce41567d98dd39f87239ede17d6d4a5e13c7fb1acef7402ba31cedc25aefe328c9664dadd5f4c2f2892ad56ce2787f354a7b51a69489cd9aba8a3d159f28b38aedfa316213e73efeed2f2823ca94bbaa5eabdd817373a64da6949161d7d7aad9f6122d93d58dc151cbc34d19a27d61654e678a5cc66b8c936e59a55f8a5f64e85ced49ad0c07f1fa884d5f04b799414fac8ce6d9a6ef801a320640430133a808c987a16caaf267bd9041a3c8cf586b78e2a4fd21a2bc3408d1189e61a808d09e4d369db35ce4678bdff622336cfa5f911836fd5c03eea5f81d5dbcf8547b0e15d1b1c5d60dfe49ddcbe1be8b8a3377a534f5411d64d8c000fcf55993abee7eaf5fbf0ea80e5a9f618120628a18505ee011e1633d12112a5e38524d1beeee6cfa17c7b4d1f8b4eb8ed9aa5f714c1be7f1567da05d2b6c573a0b61ec5be4c2aed135ba46d7e81a69b7b9a3b7aacd85d5f71dd326f7e4d15b63bdc9b04a535febef63b1eae79610099a6e8f69741b5369c88b79b0cec808d8ae222ac93542c5664d7d074f65ee41fdecfa1525c36cc132e99381b22cc760ec1ba666b3a6fe6fc1372c0979b4332ae219d930b7f188cc2e8bcfe8f1e8928ceacde9c869ea9f92ca9d8bc46357940fcfae2823bbbe88c75d3d3c95deaaff487c1634c1664dfd29346b36d8ae523efad7035a55b12e88137dfb6d79fdeae9b43005360ded2e6df77250b8af170a32afd76bcf9004f457788fc05a0f676cd8edefdb4391039bce4ae347be4a955aab755a96d65ef77b2fc6550299e5a8c4cd5606b164686e0400084000e316000028180e8a43a2240ac22c498bee14800b608246605e349408c3b1589422418863188e3104180200200000030c84e84c10001b6331d82306f0345464a64777f966149541cc400920b8de684a298dd1f714409a76a29e5301657c9aa9d97a2eb582c6e78b4513c92977cc822edaa0d7322628a08782bfe28791dda817033b35806794f3457370e964050d49ca122fa3644a0523dd0a2f0940bae79d0b4de3a80017629ac33ed3c51784929271cf35a737c5380962ebd64cc3b88fa1379360e9765ef340e86e22b57ef5e243d4f6743d1483c6c4eba85029fc4f13ce1b94f889306f948d75f6216f8aa2341db3fc9bfe63a9ecc6c3abbcc2a5bb6514b29daa64ffdae5f7d014d41de1a550ed2c2d296a1a48219c142526550b0fea55b7ee6ce5e4ab3ca87bb7652c7c02aaf2f549867dfb83f11225af93a90aba2e435b48d0dd69abcb497793f60f75a1948ce32c5f0d7468455f43331ead9bb8a1b00d4b1c45ef771ec2a91051c0c6e222a870c83d80037fd40e8ec20f838ff255716c5cb32b439e0efbb9f70854bc44aaef4f8f6a8264e07fdbd116f3ff17c5207c04fc3efbac75269b77ae19553b634a723304dbb387eaec306b1bccc92326025f46e82c820f14e4035b70a15150428db6af93e3d40f1ba5e0a818fa00aa16c51e37ae77f477d88205e6001105b5bfb81762a169561967ef6ce1550bb48315cffa905d9c8358e9e210059a46d8c165803b6584313c0c5d1460551e93212bb8a84f654a17accf0cb38d359b968809198d50c7aaaa5fea682a33a8e516c445bb93aac2e459c27b99bb5d19b704907774400bb4d486a7f221f670d17b6886ac4194d4459ce59886eb18df25f02448d8a39492a64390af1b1b3c72c397e229ef953c5b809e869e66d4cfb6bf10bb8bd326e908704ed215fa4ba743833622c3f7465ca9a50da15fcec8fc21a393dac1f922bbdc292dd36e012c1e50655e0344b692dd5ccbb751f2cd0c59faea1dc5efc005d38d835f06e5b8a160c13340e03abd3131c726df71fc3281f7c6d1ce4112c61dd4d11d0ddca11da33afa1cd765866420d2d6aedf055a3112d751b5a3a0084b6a5f88b8563370e48eaa33af7d3ebd50d7b8664d04e58f07d291acaca1a0f4f3c43a85853514a8f2339027de192e8c99a8da5f19d78616d11307d0c90b5e17b406a2315dc52828326e57f9848ff04a95dd70797927e81d11419957850f815364790e9009f3c604d7275d296d97fbb8c4db144c94eb89e5ba096935a06fee21ca57c3d27bf827547ace57a283165e663ac093d6780b8a3ac36df869e6eb40b2643f49f15b5aa31b7662971742cb7090ab7c4c81709a00f8a283021a16305814c0659a914a6b06056c8bf29be552892a1bba72a50bcf14822911bf275bd272d6dadc38321e49ca500a8c93c3c9c73a84e42d212dec04d60ca6595b361c09e94e3a82c9c944e61f7afbe502437c74399a332db1c7bc40fbc94cc3eb03eca73c0ae001cb602be290cec3c229647c5a44ff5750e261cfd1b646d61ab8677a5a3c75d3a757c9280e9b0aea7ec8f0d286a53b6bd80bf4024140e5ec1fb8e2a18016aed00f8208350683198417dce202fc34a32ac497df02e20df445e3619accdbb7a674b29658972ca65f86aff8408df77cae4b680570c7367cde6850b57e04bfa0deb94be9a06d6c13c5c0451ef0a10c7f28f6470192ee0675ef7b5dd0c8e11c6fdc595a3b83ac8acedc2bc38bea8d03e4e20da72b3a399443a9e7ad399726c7544831fa065a6669ca6b7873d625350c492366172e51f3c0f21a417d828e3c9dc1e090fa64d22b18fa35c8b1e394cb80c6be32bce11e0c670b44a2f5d262a4d560fc062a51264336f6da173fcbe6ab267143acb63b714ebc37fffb07e473cf71043b2e0bc6f00d187508f3f24a0afdb81f3114f202be59ec277b4060f3000b4e58014817a010f84ee67b96d4f7c10b7bf6260fa61be5066ced8a48a91cfbea28ef0a8ebe5fdc2fdee923c4f8dd207a8bc4bd98d982d67661190ac14d5ce44b4dc07b7b554055a4a05aabf786f6788cf71ddeddb3d2b51bd8954e18786fc2d2c43a67e4c2ca8fbd8c00ae78cec1e18ea29cff82be0f25f1c06ea50b4bb0abe86ec7880136e38180d5f5c0bd7de32c3f85387200017e055ea3ad447919feafd2a76875e6d3b8c72cac9da609fb71d969dab7679aad663500d1d4384a06b0867dbd6238c84d159a23f2e02af8cea6c19497a68988d3b117092780af93dce355478c09a157f8ebbdbdd8f5091abd0f65914d8477efe45304c0b6b2b7c1a3504e0d5c5bb0620bb1321dfee7b162ba684686cfb4a5bb6a8f7cf8a6768946c5993f5a93d7bbef0315b9e0e52581b16f8eb061f108a2525fef819af9658bba25003ef63a8635e6263fff959cc34c59a490defcd8192fe4216cf4cc883692916237804a39b2187735377b7fd403cc08f19bcd501cf9669fda69288d324a25de52dff2334602d5bb4843b7f0c82a5b2f2d007e13686002144b911c374eeeded28e75602bc4d8b97ade1ba68e2c35e1ba2a0c1e81778f7949ebfa8b53f9801b8e63e953b77be05ce9e24ae4df3cbc187c413d8d2e251d0a0158bb9ef3bdcec0a37ac4db07b141a42a11261165d2045c864a5f3365d3856364b7b8003b2833aeca404a95e1ce4061fac534379a1b855ddbd2a6e1823635ed976cc3e7e97dea27fa77ff2c8f90e8283047d8d01a1608b6019971208be72e6fcabaeea8014ba9c7b540c17598201fddfb0fe755e62fd94329981436dcc572462e29a2b343d096c531de37baed0b28b680671e329476acba7010e57082c2b7327fefa12d03c8890bbee83fa40b8727b1de82a1927dec832e19a19bc9a32a0dc442a8c1982eb9b3fd9cf03eabbba57703030091a1e8775f866cdc7cb9f25411010ca334b38d18a1dbe831dc28d551921d5e8004b7f0708e0ccec7d5a299659c41a0340af4d613c8a9136a54e89b9be879591c1a73e5fa0a5b874da2f7d57a41505bcddde0522e25ea726ab96b217236a61537363cbb247643ba3d6a799d143463155cc038c75e6ac4340a5727ad1feaa1aafb9ed5196c3c8a24483702b14a84208824258bd26094c4222b1bfab15cec41dec342c8713de18cbb93f05909065b8fecdaacd8c15295885747db7ba26c33df5a01ca379f3beac476b2b0bbb5c70d4ce0cacbfe10d68ce8c6e869fe9d6f6a6f7398f2cc59b2c74b8256a744bb43c27e0510741c9a39f11d087c090e3d362917491af0d19347cca497b20c2184d182a1739be370a37002df359e354a75e7c4a836e55e310a58c93db3221128e510290c5aa8c806b602813f802b30cfdb575782b4722105638d097b9f5d119952857d9517b6175e079b3201b2de56181826f614a4a48e98f0c3597a18f477a51029c7f29e36d9e58888763a2bed6ab2b7be09714309e44afbab038cd3a172c6c848e50e20a90cf8861ac38bb8c483d4c07616f1576a05aafee8585bbd67e9496670e2c364b343c637d2c7b7c0714d56614025acd6e22aa7040e3e242f42df5ef9ba5cd7f5e22cfd57713a7d8a0c3ab27f0d36804fa5e253a42a51e85fc5b8062862be46637ecfc4b06106d901ce76707047c92344309e17bc074c0043d00c998a1b4cb6a06bf4dc7fbb1af16604a44348a4613a676f6e5dff2527a91e16a1147920e8b88754a5b0930d919b8c4a3057824c7306a516816c98cd724bdf98aee62997c2a568faa02107defee690e0cc5c91d3bf5dbf143fa74560140272cf6807053bb4617c429b875302725902345e75ce0f09572163b7bf7d7625c584166644304eba295e1fc0c85362bbd955ae4c09e5d50dd623bf397646907ebc5aa29050c45f5dba6ee43856bc6fa72b7b6c81ce69ccd9664ff400374aef617e9f310f38f6667b560263a40dd055948dfbee97d3815f86ac39520a9dc3349dd192104813b59d8d0718cb9a8d28853d89eae65237ddd313c433fc538c576938cd79a6fffb6d687ca2b2545282b1780aa676899e3401b3d79513a08e435622d43f275e930a77d32107cabab1772b5d42216e9a15ec8818c879669d89902d342b46549bc8248bd144f95c87a254076b82f958b43e3b831a981ee96150bb831a576cd70801f2ef7842e847c037bf44e18663389042e04bb7133e9a663c262ccce365730eb0addafbf39c9a94cee7a84a3fdf26547560303440ad4d12a1c8a58784501d8cedee368f784beeef0db6e42101b03f27d987cb6c9725293c8629ab5db6ffdbdd6b959eec1e53d0d221f2e6c8c280520e09b9ac8242661e3f325dd63f6f8738e6074d89e0fe6a8a519a40ff3b960c935b6ac66500b76a36b85ea09a3355707d00809524f1896b77ddadc132e59d62a9694623cb412d92db92498078ad317bc6d11681b73e774b5f3dfb0ff7d420e2f73337d3b729ed0fc28acbdb66fb41efd3525942084c4ed9ea7fde9321a3b74fa20b9b58bafa2e075175858852696cd698f70dd2097c37f968de744f2fd9b08cdd1fc50b47f3f09621be71f305f8696a946e07d09d14c8fd2bc08395adac6e7bd61737dd5adb2e0218d9b2d04cfe26a82a74f82f1f70ebb3efa7f1d4a461f66a1325391b5c3738da4534d8325e4ee64b86a921192230b521ef9b24db18c2e0fef33bb0ab065748ee95ce29e78b4fde3195565467761fd8c8faad816a36476bfa3a29e7c8635b39647b6d1b371d462ab6b92ce9c56712066864803001c73ea64294779a8b16a17b5fbb1d19ac1d11a03e9b92fae87ee9565ca11d999c54d762766dc57593df07f5abbf68f3c303520ac76443419d1f598cd5d65faa742dc25ae9a906404a2e5e37bacf2dab996d9b6bcdb3cd5c481b74b1001cfcd3a4cdf51ccea8ac9d8a82c22b32db9eaaa85f1b16dba6f1333c5661a9325f7b4b3ddba943f2dc07321bb55bff6a53d5319051b64fbb207599a75a39c233bd1c749ea5d3fdca5e09b96eed28e050ac796cf621d06585a3c29dbf1616035db60c6fd9b80a1a564730cf1c073dc903418d8b822a57be63752817aad7d91a3363d3f5be2e58c064299a002da317020d59eb9befb5ff168a97cba341492443453cf828bcbd0d6aeeb7221106e598cf75f89801d5562674179792d4af7f308a9ea1c82ce783b82a06097c4cd256615ea6ffc36641858298afe8527ab5cb775d7e6023a9a10dce05d6741591e90e223df12dbba283c7311a3d707c67eaa2a8ed98a6c0f5b70ead59f909a4f2f9867986ec01aaa5e712bdfcb60b420e969fc8915911df3d188d42eb8235fce4e6367d545d5bc0037080a6e0e1442962fde2fd56007cb7d53841d9708f16d848b00eba70cac10b8da7eee65127229f181dfaa23696b14e050902547d511cf9a4f518c7bf91eee5fda3533e0ae4da49395f2e41ae52ea49c34715351d8a9237b8cd0c2a79060de708807c3d48c07e0c7e681600430795f3d085b224484ccbe1a5bd28b0f2181b1b474abbcca4633b96a84958e10c4f10e3a84189fb9f90314ae9e9c3ac13f8f7e61338430d103820750145d5a8761dee27ab94ce6c4389a1ff2f48858f6d4453dcb4063d4c83be5cf3938080b2d99ef34c80c29c5b5eef4343fb08a2446b71e6520a89288a06239dad0b0203e31889e92f4303a726ade9436292eac5d464e7a459241d65cb1ad15487303215b7e91eacdf4b3904704215c1a8cc13148ba98c62cabad71ed50625330ff2d958562238c034ad27110c8234bbee19be4a513228b612b1adf7219036b40e6ac49f1bc158797aeed8286b9ca015877c9911906d25ecb59e1c9652a2b26b9d9a1990f2bd8d354b5641106c0f94d42b8004d918ff532404613fd43efead12f0de68870a3c4a252d13bb730c5a8269d6274bc472984b6449d14a2f181a0d0ed709c4b49c8e447a0f8354f325fb8cdeee9347cf3e81747b63a7f3042195500332bbfe79806c74ae78d37d4e52405a31ddfdff0c931f260f21dceea1ae6168fd99ff87267d0195b4793e26b39caad62d2bee6b81ebb7e774cbc6f2d369cb3651635e051b55778325041b3d547d806ae96774868718729336b4f84e0edbb79e8de9cf0e2de4a604915217293418b84d93c6624d43cc8d8778ad3f7fca05523fb0cfbca16377672049fd346dca44a7f41e3fe7f8e75509344d916e02382ac93d7af510630fe07dc2fdd58b329b02f64e92450010d645679c423c34bd50c6d6bb1f9ed60783fc1795e092d4472e90d3ec7eb9e4a2ddfe2cb4dac3ebb3ce3d96998944c059c041073865824965e8d032c83fc681321104d90873fe96ef754cf423c18112b40540b3fe398deb0452c1d18df05c4a7b3c2d7425303cc4cd9d3164e2b6701fb54e4f7c7782ca55b3f8384e30a9841175b8fe98f26c619842427f09f6ef7164c5249384f4cf2476d44e11f387fde448bcdb7f74d3a3aeaf4478b0dc28b53dfdaabe506c021ea0769eee28c5adb80a72db20815ac8c313d94ac4cd788e180971c7c9eb73d071ab7dee21a80eeb0195d4ea3046f6170f67471ab6f75e19e936db8d12d01391d660c585c7ee58ca3b94869fe338f90bb410470ed4136951e196d29b5107116f842350c4eb644fb2a6fa45dfaa7b4fdaf97b6349cb063414850ae5b91f688b1b9192acd1664eac19dd63a89753327c3a4a307e1bd36f43c5e6811a6bd2be3b152bbcabe214bb2c2df51c559179eb912170846e14208c61467da4869ed304793c1e886cb8be20879d8e5d142ec3bbe7bb36bc61eaeadf95b85f81d2a7c9be7d62a02e59ba0773d8ef05d9ebf5e034bfd37c32a02ea0db1b03cb8f2ca4ab59c04de9cdf723804802228e74f54c4bcb284450bae1a5c83640e646a858eb96a2fa8e52118954d78dbbffee90cb3b5fa7d4629a02a80815ffd6cd8c42a4f34f1a0c057154e0b3c69c29596b88e396b6281b9e76e5caf87763ee8a7012f9a56feb1791980fe4382cc7399f8c0119413e65c0cf485cbe82ca35e4befd1536cb8acc64502a3478b27cfa223c7301e234484ebca090b2c50646f7dd47d54c36e8149f67549dd8605c1f84cb383fba3cf902b970e442ee6bc540c32e3908116838da188498ee5d4b2d31ebc2ccda45a53850bd8a51eb76a113634377b6cc0858c10fe7d54968fc33827cefd5e68d4fb5f37cb9351c12ed089f5d13f579b1959efef8e66e73b677b4e04a1f2e6a6087befa0c16f007b03a50bf5c55a63623b5a6a53a097c75b403cec435c2436068840377c1fc8809d5584e4673d8cc74bff0e57c6d99fd26fa54a5b4784373e40e68ab98841f737039b6e689116d427885e3a057f69a4b229f732e6741533923e734140e8daa24be64a9922c6b8375256534064a2dcc564b23d497757e159d463e0d8c5d1bc6be22c6fba988746253bef230c604b1cebf1a172bb69efc8724a3214d4f72dfa808ceb8ea99bbd28bf827a99e89b599d80a3ccbb4845c8740c3d25c1b42d7fc73b5d0d91ab5883ffcc84058774491eb1087b0ed98965dc64b6d19db6edf639e89114dcd5029d7cee99cc6a98b53916ce2fca0761cee7093eabb2188c770b6cec91d381efa903e07aa323c844e73cafa12294a2445ad694ed4c824a07c99668c8c9ee5257042daca4f021a83bf005261f02ea7f16da79f92d612892e0c39b5cf5b5023ca6d2839ec181153fdb101073e497074af6e37036ba5af1fbe79850201d7b321b8c0af868d1aef02220967b14fa9285ff3533dbda774aa989329708ef05e6de5ced9dc84b880a49051eb40c98abf8a1015dbe21b09179f751f842c70166112188e64e52a56f28803d418605816bbd7857120d3b54759d3f6ec4ec84d86943e46a5c21e20ad8d82035296d7a2c6cc8b4a3fbc72b4d7d9f803291602667b42344c9c85591af17a4f03a90b1ba48ab2e1c0e989168d1f1a72d56edccbf3ef7f8fe21458de0550afb6287e6e2eb8c282c477f165110669915db7e218388974b61587e23858575a1eef5092d3b8cc9fd3360e91d85a62867eb58097adf9cf2d1bc15dc7de039e28494cdcbb9936565a675aae7fdeb9daec2cb71dbcaf45fd52c7ba9d9ba84c681324b94dd4b695d0867649c1a56b6c9ddb98f21aefdd54736fe86c10050d5a2051a69e03b02cc742280014ece191b5e5f387e6810d44d2e768a03e613e94ea2a0b84b1bd60111c20479385da201493a91db0d94c8c095e7ab351adbda25f840d2fd3c9389243ecd2192da35a9c48309e6baa57d44acada98025e1679e713adca1c025070e9369b82d203b036d1f11673f70f5ba7766e8b8ae36187951e9120149f7ee3ce9b20971d707882371036c9cd706cdfdd592edd146e468ed2d1633b1f80a6b303d4dd144759c4aee5ddc3881eb2ba533657ae0e83d8a256077411265687cc6cd6aa03deaaaf87309f5ce8973a1d54632b4c41c110a231ab14b6a7aa774977e65ec31c0263f1b8adf6398c5d6110db076fa627b731987b23ad5667243a528532b0500274246a441c1cd4bb6dc1a8ad91a0665f29292c25126969ddf7c4c9987e3a1b570891225c6afc5433c1b2747c0a74c74b52baa0fd33ab976ec077dfc7ed4bcbb8d3449c5a351782b383a21b1ef54a6d6c048b3665e00ef237b5347f498b6881bc798abb56486c37270577557ebec46bf7575a393ac4fa8bc513f637c294bc59a4151f21932b84f78e62f02a1663b974c43d7d23c74e168fb1a42e27408513e441787405251335af0b71c51912053887229b90dbbe1349f2e5c77e82f74d41211d7e8a90a9191caf4e9e2e7a3f0eff30dbc4779854ef4e3ed27e509f91b7e313753ac83752fa3774c10987a6ae759a00fc800cce431f02fb6ecc4554e8241315f89a32a92f288941ad7870fc58d0c8bc3ddde21c86480ebe2a5ead128ce5997200cebd8daed78f53c002fc9561b0ac6ccf64fd3e3e02eb71b042d4e9eafbe213aedb81066f9b0409058262d75d8c114ef0eb56f776ea1a073a5c10235b366ff44963362c40af6760370a46ecbc7837bc5b1213a13f2abeb073779d0b75887a5296ed0aee5c258357fe158b77cbf4c78db85ad63198cb91d16a7e74a2d68b903c78deb7372bde800d8ab9e44241a341fbab917ec15e2e8ff3edb4889571bc346799205687759368c6bb429b390145bbda42ecf2bc46e4185d322568e817e97d734084272f0fc965017c3976b151a36a86a2d9ad07cc185474f50a35a1b4a35633567fdb29601f917b9232fccdbb7496c187b58ec36c08a0abd58492dd051d946cd01edd2522af6ea08a66a3ded44564183c83152330caf3c37c8d792f14e814e31ffe82dc9ee95fe9e21513db201775a3e7bbbc5a168905b9ac4f5564010001fa7102f2b24162d50e64d7f9fc05a9112400cc186f511d75c5b9a2c9d733c86121b98d6d5e41d85b0b932d90c346eded94cf339f53ec65c9e4ea6ae85aecc52cc6bea9b1d5c0c8a95def63bba2dfd8b38f8dde2746ab1a09d9faa576e9b9aa9f77eb669f7e29e4b8f1807cf33de9317988ec63d581f0ca1277c2f2badbd69a4e221631cf2c5e1c84366c0d0f8b9315365031c5ac23c29ee3c4ac75cfa4c05dbacd56555cbc08b2014ad9a76e515ea20fb891df01461778ae9d123d57a3ab1b974e51b4d53c74081366cee647db3ee29ee93b3b7321ae49b4b3cfc1be6a2513976b7fefea081f7c9a41ebc4831cf351f552767cc303d1f5755747acfb0b056386e8a92cc2e3b64fe8ae9e07af9bf081ac976e054eac93bb7a3ba8224449b03d48841872efeaa7c7a0fde5ea2deb4054171f801b0ab87057f3d47dafc65bff860cc9d30c2403a6bc969ac3d4958d8dcca8cb968975405d43cff2ab9daf56fc9a4287710af10602ac6952620c7f91c4fab83043b0ceb6d046bbf4a2dd5e718e1d38166d5bf3f5efde847090d021b3995e386ae9b68c765e7eb7ffb257ae8478cb7fc6b6bca7039a2f38b4669fe325d78c5cb34e5ffb1ac308a6cfc69ce4fcbbc6bf8a66f300cff594b4d1b907492b068a620e67836daf5d7daccca949d36de936b49dbb23aebb5913c3976fe4ef26164c911fdc43becd713943a8ffd2e263086b7ca705fa2111eab3461c04220df4fdd99d95a615f9d1078e3a5dccf0af4e9c7636fab54c787f6598c231599664912af2f5cbb251923523a5c6b78a533145b215b437fd23fb8df90743352f7b0739963a3c57f68a0f4396181615e4b202446d6ee590983b8a41d184cbdaf9c78b3ca19d7a7e0ce1808e86851d47b6c4c07bf898fc46dd6da68d3fb1aa9de1317a8eae815f8d26c85ffe41c0576ea662473f74c7bbc0c5e591dfe06b97fe36004383027023aad94dab25e59be00c8cbc1b50b1b8efbebd4628aa80b9c6aa35ca99ca5c388bc5ff8335e5c6f0e3ce381db23f2647ca461245ce9d0070ac58757d46f66778687100c40cf6970b506e7a5b0fe9bc2a04969ea93c5a9eb4ae8d3d94d87ff7d793765e94b495a3ebbf1a8183bb3a0022da2725f6903bfac6791c1943e7ab2a3eff1a2bc1fa425fc92c289d41610575d5446a96ba37d23d61e5f45ec64f1f7e32598e4d5f75b586ede1597f78c9fec7a764e4a4a8c3f444f6d5552d64e4f4df0b2155e64868ff42d306eda8f34d7b814bf91b53430ab3784a5e97665129aa1b62bd79219696cc10ebff43031c3e9e5bbbf8719459a1bff441c2d302724b774bfa4f5503662a06eea62cd8267d5398ce493da8a3cc2598c4bfb05bf9306a99b55aeb5e733edac7a59d75f8198e8230cab54a2daa2aa3c948fccc8e2e38669491cb2a1e87bb3a572cd2be80d85613a2612473b8d080e75ed4d3fd94f8e39d5712a255c09a6ca2b05251fe09d9823b4ebb2cc9021974e8a3523be69c6b8bc61ddb32fb1847183d41f63e67a7af7f81c1f3906c6e3f660633a19acf843d79f7af4bdeee3a8d0c16c5de67691553eda0e71604768d076a31315d163b5a034aa36748462a898ab0671e6238000f0666402eb498d248bd9827e360346d72794d5bb5f3e7da0eaaa827a042355470289673f9e0ee731bc307bbd64888e9f52e53304693ee503a782017db53af6628a8e3dcad43672298534f61075675d6fe1c7307696aa56872f222c9c82ec1f2516b6c901c8d583efe15cd884ab7776166405e3a380d88ad1a1f70c609f91fc01a72be623ac39bdef06339289158a35f5648563980fa6d54fcce9a6d313c423a09a8bf110e3ea3e0f395b35cf1e2ea4580f8e77c4506ae3155f6ce258db611dc7ce351b971514fc4986e7724796a7cea43976c05282e3bcdb30c5878df8df4ab2d4ed35d70e940908b9b0578e21d779bf26585ef57a1d4984eed28a6689dbf81afb2ac1ce7f70ece29acf0ecb11eec8ff2d967b3c5e53f8cf0b5109c76ef172d13fa2616a105e775b8f4252c87510840e6963bd51032ec1c1c3bd88c025cc12c3027b2cb93f76ccf6a812532a858f2a7d9ee31921adfe0c01a5da35ce4efdc36720293253718803f73f5436e8588bf4f03de6fadd2dfbe11b6e499096321348372c66603b5fe7e97688c5584d51b510dfab5fb6cec7944571261350eb667be4fe5b1f5d1960fb83d50773f2b2bdd2a45b07961697155585ee130dced372f3039f820e3b79fbe755e24e5bdadd835334ffb36fdc79b1bb1a9f00c84df462379f9b6befc887e1f416635ccf9f2fbfde3f7cced6f87b78f720b9a4f38b43b2ed43f9fedfad1d3bdc243cd9f412afcfc5d6ae8defb4ab637b52a78b7ba045642c68fbe6f1ff082508123e3de333ab36c5ebb5c7c2a31a9f44f01d51e163103179af9992bdabfccef20df3e083ace33df22ab9c4d5a28ac1440367964e911da8c4351b2fbce8e410e42a4f8cd3978b71599f630350451f2ec9ecf860e70704077b5bbc5cb159eb0a7035ecfe350030b10f90006a83f4e44749005e9eed29e470fa63622c50f78bb308833fa839d6035545d451f7500a94375257a6407281df5ab51061d4095e6a20322c0a7cbc9ebe91d11b0d43e0715f70c6c4c9ac0fc3444389a6ba8fe18172836259982b20bc569a3ecd40cd998111eda2bb86ca3c5052622d2aa9d31afe75729a2939b9ad6f2150d5f9b58f72e2addb4f7e4f019674bc309fef7f862788b9c1890831451c507bfe230d5ddf568d24a35e14cfc634ba6bf9813b5ec47c89450d0502b04f479d48647c77b0df2e3a65bd20625ba2fa318697b30132319ef2a6013308db68abb179447e3030e7ec0d6095bd739f53a74bbf1cd59bc3d32fdc6f0bf294ee50ae2474afc64de7fa98f0d52a751231ad00cd7bc5c25063bd4a0f42da1eb3a57e0223ef6e04acda9c1b11e1a25a33a9c07352a71f6730e90de7065713cf0d7c3be3b9b62434f139ae8b8e94b198af3b472d615647e41eb84921cf4bc759a3ceab7b84e414d5f2f6ad403a838c2d08f60e25c89e5b2b5c5d35d76e75b76c3fe01494ecec470cee2be19c91e9796de73620816fb7b3e4c504e742ddbeeb7d3d8e417f78e10d527726ad9dafc1041364179e0b05a0f62e926615f8c6086ba878dd7b1caef3e98e4861c5eb327365562486635fb109025c237f03d6a587adca169cb85b51557018ffb81e6517f0638fa23a11e6bdf2e3f5d9c1dda5d6c30daa2c31bb0259f2b1d036c018897aee220b997158cec15d772f0cd5923185fcab8153f886857021db37e234a20a9f47b85f32946c5e0beaa04f264bc8450a8bfcabf0f6d0922a695e10f92c8854c8e350ae1a99889ede36d2541fd77f6619a2fbd0e1805bd33850cce8c973c3aad24508f69dc83ae58ee397e90ee86d89bb9e193477c0eae38f57cbf938e1a10fda64806ba8fcf2fd08406c2708a71861ac998bc25146ba49ca08de00a75a8a7d12249b8b8ffdca6195196c7be5169b4b299f2fb9eb18b996d6c5454731de9727931026b6a7bdf331726b35c2d05f638da1d67251518500bd8bc96f72200ed4b28987a7edf1ed879f09a83189396b7a65ba5c1bb516d077f68984aeedd2e7caa501ea6110b1433b3baf983837e91bbf3618b8e31d58bf8794d91d6d6cfa8efe7facfbca965e433d9407c36634760a0e2a231b31bb313778f88f2bf78f127b129da2944c6dc75cf5c94010afb8c1eb070f9848c52818039e74c98f9000fc50d5da49576c65701c2092a37843ee4cf98a89b7d381264ac8641c0746bbcd5992403725dd0b00cf593ea185a54999ff7741b70738e5fb1b50dc2db7a297280bfd811648d13e97c346d46a3802b3f31e7ccd63556c31ba06e119ef9c701f6b3bfd76e1109bf53d0e93b0bfdf6ad9dd6c2c1a2185914ba35c47b9f91b1aade322fc2cc8387643f94a7fda4349ddd4c55ba953d48b739213a7d41b7feea7265e77b274c4829f613a751b08c6556d0d0e6a5e420e351af42221b9365a3e63559f8f4662e4b0ba2fac96846198ec13c8dae69340a0a174d3071404b0a1fc16162edadbf401458caf3e7f7ae2ac9da13fdd9eb34c89fe3a6da4ed25e68eaffebda18a0a85269a7bc0545d04be690a216268b016ce0ec0649439dde87be3b6b0860b4af47354c05b3d193df214a2b40150b02e9901f11b81a684700982e768481aeb319665b1743761002062b4aad193ac621dd76dbda07ad8ee6c18c80d01f4007e009aa3f558d5550edd526c74707fcdbd87584ad8d0052cd7247a8af0ca8ed6443d174cb76bacb2431aaf621d77cbf718d1b164d77f970c6ebdc9155b0e9a126f3934fd18621b1afbbc455d71168b773f8e26472747b1d848128b0f1ead479440d7680a273d543217a1fe630f10db2da51783104a2b8e60c4543321fc2d2a7e9f6d1ee572a6b12745754a52cc19079b0e070f9333725f2fee4258bce924f28af75284e3451f3e725e6936b206bae090dd072abdee0b26045a70357b35d0247076dada2ef87422640f4c19a0e98f1948130b6bc19e3b6adac36634379e864bd43aef9e36312b5358ba43d5cbba4c12b4ae35555f7aee7fc051d5de6d4f5d5d3e55085252f36805deb278e2a5c7d4d9639aeea2ed493103654e3b5bbd2ff7d6f7a88dfe7597559fc4dbbc6401cdea5abd25f7cc135e06eeba497fc386b8ae1e8aecd0b2d3111d880d8c07ca59f7c939478ac7a50b97de06a582cc9417b5473b63560df056823a79cea9b03d52c6c969cea1315ccc7c6fd65691cee944322a3907cecef99206fe690f0f652e36af72c3d85c60b11e1092e4279549f79eb7031b3d6879aa627997744aa6165ae14dbd2bf621f440938fa56b3a6aa6dc856ea7aeb824309c59e7a10d01aa130005faa2fe5a062b446484bc3422d518ddee0307c3a45f28f20b729e8552dfc2218fd762db0d497d9f434023e12f76c60e3dc74964c6b60f4cf8191979a34425bc79fd1a17c6847445a70fcc1c762ccf8b8e670863b4189ef08a7eccc03d35f4b0b11ba32c6b19878b1310a3595c7b54db00bafc30a788946c90e13741d310ee4309b1ce1e8109be89ec9b9eb2222eb23708c121bec1da790d3bc2e635e55dde2d19681ebc354083c214e05e063156aadd0174e1e36636c73053b4480d37277e849317f65a5d829c6a113d970bcee0d9fe021de90ed8f667752e591af8080a50a719c9010f50cbfafc1f7f4a9b94e475996124566345d7423eb0f6ae57d72c6eb554be93c533193d3f1862c70f2c8f45f9186c9540f646765833759c99813fbf25b87839c9f053e0afac98cb7c422b508efc8d0ca93df70e745b52445b29240d0f2c43ccf59829df649f022080a4be8a29de7d96cba1de34a21d585671b91853b8f27a74fcef7a00b4479ae3112f6a8da9997046083b01e8e821edff10814c5ccf54f1993f73ed2b6faaa0af431fca737f9d2c820c7b362e804d9926a15b6fb53f599a013f1d73ff1fda686a6cceda6af6152c7c49aa09c68b44271d51ba5e336375283a008b66c7b2ddaa928bc6569867bed59eedef8e92e7aac16771c06a1e498409d2e9664c95cd52a6e7959d45d1e70887d0844677472ffedeef5997e96a9be7607a5cb656bf384f4a61873681b9134e03cd6e34962a17176149d58c9cfc6732afbfed2ce38643411c605d814f7474c1ba5f8a81b4d6350a8899d7b6123e85e8eb9123807742794e1a2bcb2030e9352c03f49f526820d6d53a4e9f0916985e2dd632dad3508bc5f89119a83e9246f0d3f4f9dd3e075d084de126001cd794bfcfcba014f5d857db80b82a454c4a6e285a44b2a7edbe570a50846c8b579deb0bc0d7d951a9cf385f75dd2697198acdb225f579b06fc58d1912a7f013124d366eb165567c9cabced4bce75bb12036b78ee667aeb9e2859a1e757d558a72c984fa91c775a3ccb51f2efe9ef1c339acec1a0bdbf9b082b84d0c88df1009b81e93da27c05fa64d1956609981186a56797768f3d53d7034ffa4910c535870b16934a54d8d90dfcf37a699553997ac9a2fa408d7fb2d4c2c2253f51281752add92410388ab1a81be9497a8e980e90dfe300f95498ae6693c573983f8dbb701521cd06cfe46ca47db5076c8ef48f6d1227bb0f4fe0e93be182f7c0a82bd01bc27ae9ab16c461c92021a27ffc5d46f7c9b5a4f9edfa1030ced7448c0d10e75116aa4a8fd101a601071431b76d98b4378a6aa68c08cfdb0fdca2d70766d1a4a8bc52ca37fb1966403aa8434eacaa487b811180af4612ea5de25438b1757eac2b484276610f1356c42e0c8eba4ebee18fdcbb9f3d8f5a390c8bd259c2c6495e6ce2f2f5e689fdadab2ac86b73d1c487abb07084d9b43d5b6356c984844e6f6cbc43819ce444267ddcb2f96b818188d40a647f69dfa2d70e2c6cdd07e4a65aafbe5350faf0f6f4278dc37e79666803eff8bde416541574e4848ef74c1647a3bdc257987023b63ba09b53d16e9243db82cd336de95aa6ed12e35f4839b77ce8b439a2d145f4537430d539bfe6002e39f2fec50315f9e8537c89fc3d60fbc9a21274743910fb3072e08692d6fbe03f8991c554559df7210f65c6faa12e2e8c37a1f4d9d62549251929f869b708aa590b4e2ecf81055e1f5755a911f06e4b6ef6279bc279c52db5da76fb917fd72220e9c79bb9f2ec5cc9687a79d68b43bcf0ea52c36ef6a1f582d42b59cb60ad6f571bc0af4e81d4324f2dd733581214d9a8624b1b2f22161b32ea1b9fa1dfd7160ffdc6010d9200f7dcc601597bab8433fe9da3f71f433bad9e76ee5660fc1425f89a4f49df88b25c495de25017d8a6111a29bddbb38a1ccbedcde910d9ed3b89cb73086b7d4e098482544315190dca4533d88a353e9598535e4a15b26cce7eb0fcfb70d6440b0058fa556e8d5fee711339982232ea3ad80db461bef84a51e2b5bf600788d0bea52841402f5eab0ce076eea476a1716c7a4eca5539167df15191a80ec88be8d3d36045aae80300a4624d2babd65502c3cc579df73ca88949ba0862d71f144b518952a9e0330b59f6f223f70245f01fc0176f53cb0830d2d5acdb698e378e2a43477c239aeb9e60b6ac8975846589396075d20be2e582ed545bcb5577cf37769881b9ae3188b82281c754cebcaf01333e4eed8c42dc1f19583cc2c2ecea405a1d77e2d2110d764db601d30ecd43c1221b1ba9d841cdfb747166a8aaebf210c4e66af3202351f2a2a6466d19f8d621a6f86d6cf4f8cdb9cf1e4e9439b3fe8eca0458f4163b9799b51a0cdff7f8ee9a545ae4764f300675b737adba8c358a0ef20b7e027f4db6fc780655d1eb4051a33d4dc320cbb4b69fef13daf2d69fc359101015723d0358d890e9a18cb81c79882bb69e7c1675aea82da56618947b67cd09ce6baa55e3e06ee1ebdc9ccc60bdcfaccb740fa9510975f5ab2793404d1fd0ca45b06b041d9b2d352622510d23f0f504aac0710278d3402a4e30acc322fdb5feebdb5b6643d2f0c7575fa6f9413feabc84607b4082ee0755a49a4eb7053b489b4fd7c9a4d00ffc17da2a7b4d52ecf463c6e506ac2016bd0ae65745b5a8c2bba7e23da522985b69ddc716bf32b8a9824bac850e05fb2b143560d30a1d2b48ab2258158aa80d50f855cddd188845bb9f2027cd0a664c14740a9d407d1251e0f02913525b4ec0f20422d5e27a9369c62311a93b15cfe45f624d1641eb042ef1e509c9d8ca7474b9941ade1cee0b1b06e3a26815be72242fb5b2546e8e96a4c0c6960bfe2a6c063c5b672c8c7b0f195d038f1d32beb05d8484b7e77876d3c573b68ebd09d2fc5a9e2f9e3e6099bf066e9171297be176de92cd4d2fd7640bdf12971c43cb5bde8697e19538f3dbd4e8f96bcd51076b30a28e9dcd69f4aa89135e645de0fdee23e148302d2b8a5bb4e680900ef72b807be87452715cca9b7aeb33fb824922a19dcf9b7f5377570f4ad932446786014fd81ff0b3f04ea9215b65518a909a7e8f249f2277790307ad8da7958aacf97a270bcbcc796aadf0d8f72780c94c56457d3748d365f1b4bd7da84d50e3a07a5916f4759907c1189542c0ea89ee088593d38ce6984ff902f9a7b60f33b8e600160a2c01d69de50c610829b7ced242df5c367fc78d8850e9b1855fc02f93801ec8c7574d9169ce78b563a48e2531f28389c73c4e3e574e7050ff5a7a26389c1c6f02b73748d9652e66af3cd7080e95910f8711403d0c4373d0a86932374d797e048a292a85a491b6c16965386c2df9a626bb62bf850fed1130fdce025ec36b8ce3815f56db8889ecf8aabdcb4f331353c94401fffbd49ae7102fb2cc93f350c977dcba0eb11b0f02371633c35f4db7fb4a5d8908f23ebf55fba06818866c062f0b2125b3966b45bfd8c01f24191c4a09e5fd93e543bf5ed750776e241934720f554298eec35eea1290f6815c5272610cf719d4437dc3456be6f6fceb1207d2c5820960dd314f537e052b7283fb883a401d3feb2015ce46cde494857a2995ccd92c92781069817e171abeecbf030141cf9849c5099f16487ba3b6cac5ffa410aba1258791220b0ac7fbd663361ea446c5b61ceb3c3fe16189646f37e3df20976565fe78501aebb63ce944a5641fa7ba737093aedac6dda2246ac421c2814159b392717b8418be1920478794befdb5dac98ab9387cd16f9b768496ec8409318f37b78d02a4d4c549034add31b6cee317221610a16383f98637115be572c2c7fde4bd951388bd076c8b468c120076e91c17cfd01abf851beff79c1eac978c11ec3d5aa7bd4037d911c99db3e3d2354234a3dbaf43c250e461d0e294c5680c53e0286046ab66f797f0a391e1a7f2a9525e38d51704edba511ad7a1794839211f08b8e3d5bc936792889dd2a89fe9be452c7035d188e3c7f85649f4b3f15fcd24a214847bdffd9be3df0e0a5dd866f7c944c3a034b7543787501ce053d3959fddc97d16d59010bb2d40b6a491892906094742480697713ccefad837dca610ee143b2e142f234c65c82caee64d3fbee6298c50fde568eefe9efac6eef31de078aefa17fa1c5f1a3badf2dd73e00d1475d82ae14b23c0b38176edc1141e4438b9619df619da31efd3bfdee9d1b5ee194a9681bbe750211ad9d9a6b17ea886a84593929105bb7fcca869f492f8838042a1bb3ae093ee3a4337aa69947951170f103b80a95bea74ce161987fb2866f88972bd53d345918f5b480e3afc5738b451cfe0d287c88856f67d6f1c0ea89993343004df42a4ce710c2d918e06e07685c751be4a500daa81704c77d1141e07ae25c06602721124da039c8c59ddbfd48b7c7b32faec534ffc1351c90ab60233c2b889fade0dd13cc1347a5e4bb668ebaa9c7d49d9de1994c6f8b690e74cbca6f825d64e3dda8d263d9d992960db2b949ea9178e0b461723d4814d37f754dec77413020258fb140ee54c2248be5128120a9102963df3cdc16da36db7aa95b3d238846f4b02c698a1f2e3f2b7b46e0a3ce5ed19feb9b7572cab8a69c7e320d40ce81622d81e18f91d15f1da91b298166dfb6ff09dbc076dc243a59c70dbc948be7ae3221145522fc4962e222cd46df61b7f410d8479bdef9365a9891463943ed9c9fbaf5d2d5fcf08315a4d68172ec151c98a80eff96a7198acd5a2b5d5a997d05b8ffad7476f3d6d8c41729b13a8a1c9990958cdf0ee46ba8dc7126144a6ff4d3e73b90fe5a9cb2f8d4c362d912d945c91882b5dcecf3b4b9a0e6d41721bc7030539d966d3eb4968bba272972da4f8fa9486476622911f72bf47986ff84d2f3883cec41f6af66c3c43adfba6bd5e165de08f000f44910860c0fd2e232a2e44c0c047a44f67176eda20d13b506eb24dff9854f596711269290a2050bed0761193a180464e196144ae406d3f8307ab3fc5c2e131496c2048cccd988c7b4969028d5b317df71fee5f41fb105447df988f8cc0524f6c547629beef80264a6fd31a81ca4b6e84d166522c4a9f8e2f159b0079a596e7333e8371606004885cec24fecc7b23597a897d9906b6d89e29e83dd70323d95b08f50253f9da64a8229829a1c906824e9279c6a48fa8f8b16460807bbc08e909f4948240d7f0a9b75eb002995ee30d2a630cc848f5c58d82c3c8d9a207fc156d92590ac7dc5891a10e1a58de12c62bad3fcd298fb82f1f92834d69d3b23ab0a488d4ba249daaa825143165bcd58b8f50a44b738240344223a914d9e1e4a612350bb125a2e9ad6df8b85b2f5903cb74645d59d3973280b5ef3905bdf13b66046b29a1a37b8a8fa60275ac13fda8e5241d3d4933774494a0316ce8bad6ccbee5bcfb3816bc24cbded0695692bb44a3330e6439318e7f061b33c56fd452ae0af410be8cb5926f2a08619b332502714d65b21357be290e8f013a801d3eafdf086fea475f6001cfe80835f5862fc80016db634af6c6726024d662c276cc9366340a456a29dce6b447aad8e79539ce532bb9732c2279e8926067f627e03a6a1bd49733a870fb92cafdd6e8267a2475fd2ee303b8ceb1c108f9a50155d0d5ed4aed40c689f8cfbf13f4558477bc9288256c803eb5b89d0b9ed4599c49a45d31bf3f6224b86e121d49efb6440e1982973dd28b5e1922831187084255e4ec80465ca98bb4cc8d8f05465678e410cf524dd8ebb9b7ee5f56256aed3ef43ae77d3e6c421cca83ea7adf5ce7c551678aeb443d5b3428743f14e1d7d61ec5ec1c7f75e703017fca62396e73421b8f49e7de02411f779c56c95d6b49bb915201ef5c8d638283d3306b0891e999c7a1060e22e2d1ffb3477802de2d243934c544a2f92aa2c71065e5f041430f691e9abbf1496ff6754c32fdf0674399fc0662b88996f0773812d66d7acb91332b16f11159f319651f49e666e381661ecde1da46d7d0496347a4726bf636374cae3b819c16d71116d4316639648efc5e048ba9aec123dbd74982bf2c1797cfd8c7a238f1b75ca2e7f031ccc6f11023da9f2b34060023b6b2ef41566399ec089fe44f8427f767d744335336727f0e1e9d1522ec9ed19da6d131f11a895fc35cf9aaa7b27a5a88ca9f9c97daaafbd52c65c54e1815fd6e24d9119fe9d2087da1a99cfca6223d6f78052e728908c885bc2a96ad6c493c8df24d0e243fc15abdd54ce4dc86585f34bea67899aaf14d2ce710c088dad246717019ab97c05fe78bf546d0cdf203e4421eac887f4d587d0b7926d33e8ff93f8fe1b3520380e7ee5f651724b11681447400db1aef792919f1de84ed82d9171d69ffb1554fea45c41ac5f1036141aa95387ca473449ebd2c33d886c562361afcb193978f08ce468492cb2c0cc89f0d4d3ab5559799340d174742ccd95fd502623ce8e33119c2cee87ccb4bf3ee23d11c8b629ca550f9fabce316f36a79d01cd695160333f3e27e432b602d49d5d0e3be40706834d118fbe4de668903e877334f98b500fa90ca709335b986fa83ae02e849b44e0ef3ce92da8b62b85c7ff4bee1f381d330d245dae0d2a21b18eb7de3d5c21164df2f1bf612977ce3417973265e56558e491ba1495865e2c4c3ccde708b11194e7c7dcb14b2be2413fff1264e66bd5cd6b809e16ec590179d96dbf5e623820b96c7d245c72205cf0302b887379b34c476c07a14408766e563a46dd52386b3a43ab481242bd42dd3b432ac7a036a9442855c3012b29a3655d310b9bee3404c0031b2d635525b0235533b957e818cedb7d9fd0cd68e268f65ac788560778ea869542545a4e4ee67ee9bfbbe8ff7c78912adb7aae3687693191ed4f11a8f54147e91902ffede6689482291dddddd3b8c085908de0758c2176f299b3e3fee746cdcb431c7c14e474b7eadd331b76bb7ad74fa96d3ee1de0793fd35f6e2aed1f42eed169adc94d79b613dc98c06f467fb121bf59122efe6629900980bf590a7a78462a82edc3d722431cb6a277c36e38501ce8a5b50897bf6db4cfb93bc581c79862407cfb763f9e5f0f47c222fcca48af77636a3fa323b5dc05eff5530cb0bc6b7fb99662c07dedb5ddc36ecab3e70b52ed01fe21e429b7c8f529ec72d43a842c1fce1d8f42b80443a8e232d4e109150c0dc19a0b8d8427cb9284942486f89b2511c42d7fb3249624f18a804e029c25810fa39002884e8a22abe2d9182ebbc4185f0c824c6125094bb002a868c78715bca22c5183254950d8214c9e9dff5c44208e345be92c808d03249925c1018f7f9fbf5912152489c9966008e19c70c2e9f24c50024378c3137e836c4e21fe78f8fc18f483cf974259e65399b5d65a6ba9b5364e5aedec99d55e0d5b6e5e6dc3f70a37b789b96ec3989bb39bdc8f39bff4a33405b6a4ccf9a6c4d79b12812291a8e419cd409a814575250b9f0f7dc80fc02750ca0658e09105217cbe6c01f6cca730e84021d1cace4f957765e7d5775c3c3e8c52ce496194724e4aeba4b55a7baf66afa66d1bc6dc56398eab5d2d99ba6a32713567ae9e4e2dd4e565ea9e028a9b30b6ea175678d52e4755f714f8fc9717ae6ad40d483cd687bcde60f4b65c418af937bb7c52922460122251a27c98140910515c5c605e0d16e4508d9c3a360e30457e9e2359600dd1112cbcbbc05821858b8407de53883a49ee973f176292fc3eee1dfe10c6a84d095f846f7719e20c307c1cb5196584523e9450e338c6181fe42d40a2f524903401fc22157ea36a06c3028fbc24ccca34b2045a9a525b603928576342db92d82a9fc14cc0cd603d9d0b7f33244933243f4072454662c509091447c05e705ab840232e9819890263648998999124323323af19147f33233ea4808ed0e28318f0310dd010efdc0c88490d7cfc33a012000179e16f86e4888c1992133c3d43828aa767482cb1818f6920f163498035d0114710fea300d1ec08a13b3b4248035f022344516ba004fd57c2ac73d69a23cc8eb0471831e7bc73be1ec3e31145cc8ef87112844c0f31311f03e3b50802892d4e80840e821cc9810c17d6a749099cc0c0e503a0d60c7ad001072b8420850a88b4b8b1ca8853ce8985cf39e7a4c1e79c73ce2348e69c367cce398fbcf89c73ce13f89c73ce211cf131b28420644cf1d92dd0507a9e09203549f840638487183013f8c080f5fc904a1232f3832064745a78b22b6224122b7c609040e142c5fcfc1cf2e46f662409528b1e971cbc7081ab258acf69899e9cc4079391179092111f8674471082f34109f014126c4c84d08a0071814a40020b040448457244088ae4043d938a2124124b7e5e40c43943e287cf39e79c4788380c7fb3243b1ca1c2fb0a45348aa010f06380c8f60705a802045f69e24ab62e28000db209caf7902b7fb3224245827e4cc9c1506ee16f56e404bc6724e4137fb32240949071a8b1225bfe662f25bc8eb0c3e56f5644c92402c44fbec8277cb27301f2f0442edf9e90c3fd8604a1a55de17365d083952d68d557941fe8ab89199700913a2d3c190b2dc860bcc7bc807eb410f3aad716bcaf808b44b8020c17c36597ec12b3828d02bc84e06106901710adc8b964979a1dbc5a7cbf76d0814e196d702e305e28e07d86cc072b7490028813d7cc08253c68203131af32a28a1148e01b7f3323aef0be82e59915499a1dd1e26ffb88f0df09977b58727872534ea939eede17350d6ab44451c801a30ae6a0013661095d701ff32197372f5a97c3bed6e940a166dbe4364bf4b74e070a52d370abdf8d39333b54577639aa7c5d9f9c25ba537c8994524a2961c481eec10671ea1e661841840780bf59115722b633f46dacd28fbd625cf0d098e68108a4225e5c7bd78c8821ac4d419c7b18202284100922a284cb9f9ca9b40376c14b6fc2af234b3a7fa7fbe9df9774e6f04fee4ba5af9d03f09b52a7e7764fed805df0fc8f9b764f9db60ed805cfbb87a0889bbe87a08873ff78088a4e32cfe53765ee75e289a3311ce36050dcee2fa5e74a1cd7d2d2d2c2691eb88e7bf8dcac882ab322625c09ce88f8c1b5c779f71d9e4fcf95fe54ca9a06bb1da692ce2fb9cf1ca7a3fb4e63311a2b8ac140ee0a6badb52f65758981a14d3ae9a453db2e775fae951f971bde295eaecbee3bdce5a9ee3276fa2e95f84892821143f6d47c973fe0f714387c2e63015307a57f055943c696424471012f475a716fa6d93dc7d83d86c3d8fd53bbabb496afa514924431471659f172e40c9e4a48572e67f072501f5fdae0e5e0e0a1e0a33e95b2290da38af22209254a4f2e8b2494282db92c42e9c865514469c8a50dde0ede01de1340cf4631010768795c4ba947a1b4e55a3f7993da6f46bfbc8c7ee133320f03f3f202f3b231e45a78445a91962f5a5291d1f5954346fdf6da85eb1cf0bf882fa35b8e64f449484667ae73c8a697d126ae73c8fd5191d125ae73c82f0ff397c3ecce010ef31d8fd130fb45bb68f9547609041e9350d467ac4fdda98b4719128faf22a019648c4b796b114d341941069513462a2edfc7cc09a46b5f64fc723c39ed246740c6787d7cef53ada3fefd52e9b99843fb0ea7228071fa5d044838dd780322436e7a2251b5bde0c3bdfd3c9c4b65f7e62ceb35bc53d989cb5dfe78e18b143680df873614f1fb79b760da80f04e735103e441a8469c7642ecebc4ab6bcb157cfb49e5dd80bffdc3e2fe8b8ceb441bf04e650f8b972b7844c582d0cdde4dfc18c8e4151d0f78fcee68073cdedd11bd72df7efa898b972b50311a0ef729a948ee2d45b26f3f2d453c7e9725ded0ff717bb2901822500271aa84d3ef9d10fa7dbb3b2645158d71faba1d3346d849273315b56c2fb66ddbb66d2341863c9f4a2f765771182993355edcdbce1a722881208459628d2c63d27e329e6fce3132cb24a28fc170eda54ccaa44ccaa44cca6212efdc2b89dbd7b6e9e7a7c8bd2221bd1b1a6d425f4756241311ae0829066fedaf5af7573d9065ffdaee23f6958bc7dced28756fea5ee060dc2e6af72fddddddefa621eeb5dbc67539b895acd3f6c5a44d49166e76d5c3edd74dc3fc12e65f68d3af5a958a11ec76d0701a8608c2eb76c4eba974eafe044bdd97563e10ee1eda5f0c4d38ae7c3acdd44d43f08a74744d6f9fa32d0edff4a5ef30c6b987d1283dafc99aea67538bdf2fd995cfca67d55af9ac5c26246dc252ef5ef94015accb2b4798a317d94905454f0c41e1e22bf0375381117f2248280916ce71faf05944b3153ce106e06fb6821ffcc914aee26ff64409c7af02f9cd9e58e19873ac1f7e392e71f4b76da3104221084b0f19b0753b52cf72b186b07eb62e0785f76974e9a9beafe9d4c7d0f1694cd6d05e06e6e5c5898bb5d6fb34772e48ce3daeb5be7623fdee85edaf8fd8af162f0c60447c462a1b82c71823471f6afb05f81472faeaee99cf4977afa1bb3fd43df31d1be86b5a1f01a7af6d1610a77be0bf81d318da862cee59423a8b881603d3b0864096f6f55fcc89817d445ef3f45ff702cdee91e3afd93d72ee593fbcbef84e612fdf691198a7405e0d1a9337b3f56ed060ee31deac2135cf7df7a6cf0f83eeee02cbc5120259f45ff3117965fdf0f829ae47fdd4e338138382f12ef723c47fe96f38bb287d18f4337d13fd8e5e18ef25e2295da3f3932ca3972584d3d7fe6af83a9246973e86e63ea51f87a1b3ce2eddef63b98c6476bf7cc36c1a43ed974d632efb058d512a5c0b6b48855b9f36235923bbe4cdfc1c63c4e7e3169fdf55b145a7ee6b147606c0d34edda7cf6597ac41a9c89bf9d7b4fbcdd845a5d7f09e5d1db7ea77254d5bdd0eee058e734fa9c81a14c8bb8125a108d2109306a1c2e7b386401687592ed610d68f9685a2ea4954cdb759280bb1864015e87e91c96c815f44c07b1e12b0038651465a6b4dca58b2133cb5d67a9491321172cf546427a8180177c8e34665bcb90f47eb2664f83b9447ad79a50f82fa273e279d957214076a78ad1595008e356dcbe1f4bef03ee7b4216f22c710735839ec784028390a1ccb18a1dc4af0377f9d8e8dc37d1fcebc1c00f8b5e17706bf3238d6b8a837c71b17f56b01c758caf8f056922f05b79d8e4df37b63d5e8bc7167c6aa84202b4c0805d5208828288aa027829804190922d2638290970042900e6a00838862501432e8892026468288fcb84b6059220b6d09207048825aeb8c2550f083b684eb87fbae7cb7c08287ea035aa58719f335e041eab45063adb5d65a71906ba4e49898572d11b4840b9618e27d85a2d7b37e37eee38711b2b47fddff5852430d3e32a7c1470c975f838fcbb5e7b08638ee6bda521a7148971f3c3c8e9747007de256bf7e2ac4af5ac6a3f16ee2732ad4783751013c7efffbdfffe552aba77d81a1351cb872585f1c1607be1cd61507d638ac290ebc71584f1c1873584b1c98b3dc56c2c1cda8eaf4953739737cb94e4b1c78e33a1d71600c5fc4b3344b2ef12676393a195f374b9dde707031b2ebae842fe6a9b3bc9137f14a8df9bba6cd6a2dfcc67b84a9d47178d3ae9cc18c52431303466a46260606f5e2f2a2e5944da58ec39b766da55307fca2ac0a150cb51c814c08118960c2c5df8c099e2026041de14a22414841580459e1f08fc07a8b0c9f7382c80921e804cc0920fe664e08e13df30784c3e79ce069220b7fb326aef0aef96b02087cab02a714d96d22d6c4ab09571340348183a559fa2d0d8163e20a7f3326aaf0c7c41426662b04f53021b334c02ef83482f51514c0255c7cb6048f9324f02d64c562fac04915273570f202229c0cf1377312c439fe664e8e387971f8d7898bf7e9244a8175164e7670c2c309fccd943052a2c8023540886111338a213521830d1b2e296cfc20ad6b89eb82c20aa1042720808d1f6e4cccab623c3145469072ca7aefed41ee4f6683cc825c2533496a92e4c351894a13a2265044253f6c90049a3511329bfc609285432649fce61024c380c9d0bdf7de6b6dce319fc5d0e3c2860d283a2d58699f88f920419206367e48827f9057e05044152c569aa0031d2192e84113396822075782ec308300791de8b4b06dfc709930b142effc1865a4b5d62a9468a1a407bcd65a6b7d1df2468509528040a1a2c4090f4a8c98a244c81549284115e30263c98f25449608c941ca053924cb0977e67df21e743e08e89fe6a48f5f79f3027797e132cb9d39e7d401f9d53ce542a772f713f8eb905b6b2f9f48608d1fd6d6c7f3c5882ac98778c2cda5c09f8acb6ec78cc44dc837e6dcf087811590d49031f7dabfc732def0f0386c4403c08ab50dbd444a4a2fa7b7b7533ab6c8e5a7227f5c2752ac9f4c73fcea1f1b86d1004be4e359830762b8fd1a7c5cfe9e0a3e62f87b38b09b123e294b52eebc695a42b8532e3c9fff31fae1408d6b974b1a6ee0e192e229e3b5156a256e31ff1a6b116014591546e4ba640a13200e737c4e08ef0f83c90fde67f0ce29f9c1bb0d19fce4f1e1dd1d5400940509604230b2450e985851d282142429e2888764e3877b69aa3c00bfa738bcdf60a0157185609fd41fe80d6612f9a5cee8e1c4ef5c0f273e278b4f307e3d9c966d26d978b0c85ad2bb11c3e51f7e9797d760efc686fa4be5ddd060feb6de8d1bf356e8ddb0f1098f2ff3f5e8dda8335f7fde0d9a4ac2e3c3f899f46ec88f3cef468c7f2fb75207f8a6fd7d5be9cfc7f76a259abf9c667b1943539e1a607f3128d2211162748f51c0e82e83a074973c789949148717ba06f862008b10214651eafa1677c4e1c1401ac92045f0f8370a217019119e20c1223ff0f834063780e1e1c02431a0c685eb6a17e4f850139ab1dde2f3a7d0c399f1371712f8cdd82f845cfad8bd28e734dd497544d5355153a7e34595ca64ca0f673e97834e187eecb0830ef870b4c797ab2e1bc69ab6c56043deccc75b377ffbd7991e630e7631981e73cf7510c89cc9747ad36f9d8e8d9f36c627d349df87333bdccd1c437edc71dc77f3037b28f7adc56fcc256bb85c3f3fb16f2df9b0242425ff8b23210e4d42420f07fe6791e5f7adc5216d691799d4026f2a66ea471a63f01754b69852d1bb315fbeb88471f97d7bbda0f270e47f162f136cce57dc8fb6e44d7caab98c5181e4c89123db082d6246ba12e634fe8c4bcf7100e66d44e6def4dc9b3ebf8ee434f798d35c89cb98e3be64da7d6f23720f4111d7e112b77b748fbb9cb3911cdb886dc43642a220970216f45051e5f563edd1cf4fac3ffbe8a7e80707180c0683c16030180c0683c16030180c0683c16030180c0683c16030180c06437a6d24868ca87071ed79664341a7171899c7b3a12120ce3d4ac86ce807d06c0a22326fea7eb68cee9d4c8ccc51aa3beaf6d1d151172393df24b37ba09e9b81fef452ccdea87f0ff302f5d2e2f2e2454b4b4b4bcbe9743a6d24a89042c56b0a2c1cf7a5d2f7cb7ff6cffed93f3f3f473f2f2b2ec42e3e5fe9811a4e81ec88a6276f783c79f393721a60172f6edaa2adf8f2e18ed7c27cbd5eaf9795524a29e79c734e4a29a5b5d66aadbdf715f72b4ad9e9d0b1e9b089d844e8fc9c5aedbdb53e8f94e2777261077aaf5a70bf3885691701218410bef062641465b218a39552ca3ae7a4484894c2d7ab4abb8bd84564f84f7321caa7d485ba298fc471c628b44928954ca6687a6cdacfe94ee3f812ca3ce3bc77c7e3a6a75d0b8f9b2890eaf2a7dfe1c5b77ced5231b8fce979b86c1e2fb6bdf577e4bcdfc3e9b465da7b88dcedce3ddcfe75af2339a783ea903a206d3d1cf92da71f2e8170f937cc9d2e4a25fccc389f4eea6aad5c2b97fd39e76b73ae7a563e4232fa24d6221262e523c4563463cd01bf191dd3d88c73bf0ff069593f5165699cb3ff7c1c39a8427caaebee107ed410be408b36152e5f27d2295cbac4b0864002c097ef62c3a6f0e7a47d076a21594e7db16b49d10f6dc91aa5a72e0e63ae0f100bc92e24c89dc6722bf7b84fb1d5849ec88688b4550b68d314a6040816733625404ceac3a42b2140c48094c49cdb8ac582849ec8b6954f4c484a2ce8c9ca675bb5b695cf97baa96dfbf7ee0e5b312b9f228d287621dcda943f406ce1de3eb9d3a2b781e41eda53fcdaeb44bb718f8dac70bbef58964bdb3a926e3a4489a894a8928fe950cc9944540a8e6f52c8ed1f1e9f944564f7e4fa900e49d940322cb2dacbfb4731e76a33288e3815f9f2cda030e2f2e9145a85cb871d6b085401cedf2c57e7c0de974e8a7495304ba59285d65e5bbb4aab5db5563dab1ebbf2a989b54c492b9f1f3c3da6a496cb9465e533644a8a624a7af16e26498aa7d3f6898005a744b2991fcef68d083232a2179eedfb4c1217d8c3a14929a34cbf9b92389d79f59716a7bfe9ee92e4c5251305a74735312e621c207129b99843a5fc1c231f4208219d911184464a298410429db8116d2cb2945476ab4429e59c0f2d2ca6481ec2561e7943dfe2b7dbda21ac1fc872d5670da995f533ed63fdb08648c97249d69047e21448ee519fe62b31271f652c31c74223a498931473ac585ba5cb4650f29cf41f4ec96c85327594bff2c81a3866fa5e432b8cd3bc533fb16bc2311ceb70ec3e87639c622a9c3ed62f473249b797bbd76c5b4ac669ea88d3df3dc8f47b36e2f475e4a6fb0b169cbed6b3516a084e2b0feb873504a99404436eeacd4dee5f4739ee57adefba4eee0ef90bab5af78415f2c45a2bba6aad7a7c562ebadae11c842b6ef75fd15fd1d58aae285c71dc8ace3709c91bfb25fde40deebed324dcda7731e2f6f16ee51ef4a9142d2ec3df2c8a2b1c474ef7ca27e6fc0ea77de57af9e7caca8fddce22531a3e65ef867cfba619d541a0df4d336e5f520ab9979a86bf6e07f7b464f46ed4b7df691941e417042effda7fa9b56dc662dcfea53f1c3e57c365ef460db7af23a7ece1d887fa725165df24b35170fb37b65aad56abd56ab55ab918e1c845d1ad7a3a4abfabdac6755df76ee9deadeb3aeeb98de3ba9b396ef719ee951dbead95cfca67e5b3f2e9a225828b9452f9ba47b73fa9a531ca79add4b62e46968b252476ba077ea57bbfdb4a18ff8dddedb619aae476fa7dee6e1f37edeeceab1293cb1863bc61fc10527b1fc3956be59333fe552bdbc718639b33ce261f939a4cbbd317f2c6b437ed67ae421cefde7178e5b3f2a1d4558a768b2ab32862b3285e33598f69765dd7d1be7dfd1bb6aea3f7b7fb3332826c1ae5becb6fe7b4b37b1fb147e93467f7d97eeee67c9d787aa1f4b6fb994e4dbfd3a9a9fbf9ac21a54edb2e963504aa50a7d5418bd1b27ea2b5d55a1650b431da68adb59605146364b9228b88b5ffa2b516cbb8e13d83650d71e1b288c22325963a8a501457942c7c00fccda2104929bf93dfc9ef6457ef4bfd78473b1d3bfc3e9e3b36d8ee573df2a7ee4125b7f0e9556bca79eb775d1744bdddcfd4dfd1c3ee0e35fb774e6bed9f7669771c87adddb60b777378f3e7bd67dfd3f7543e7d9610caedb3ac1f8df563adb52f63fcebb6a3d46690ac21ac21ac215183738b1560598114d7bcb24251c269f037830205891380bf1994273cf31d1b6e78f2ce2bef9e91b172bd29bf5aaede96bf7f658dd3cb7f2dfffdd33dfdfd16ddd1163799fa29cbddebf6786b3db6db7d681a7dd9037ea5bbc39fefa9dc29c5da2aad642b577dcc710fe18e33db76dd8ed27dfcfe5bb5563eabb7bd8bce6ff5f65897a03cb5408c4d7645a447f7377078efca64b2d8f49d8b75d93df2ee5ffacac5eddc185b0821de104b6b37fb77b37f574478dfaed5717b7c1faf84f078573ea6bbfbcac5b7ff1be7cb8f31da0e3b34ed0e632e77778d77eae5b78f6f6db246f7ef3d5eb283667b8cb149d352840fc716654bc6a9845b2baae884056d304e7ffba15b0f7d3820bc9467dbb66d6b6d3d2e4da3943ee58939dcd3a73f628e8d39f8e9d31e88e3c91af337f9db86b96de3b4be5ca779781c4bf0630c71bdd3d4c4fdd856c443ee46409bd136653382fa05b72445db948d8aaca17dfc0d461413c5f6c4a684ea45e76f1d95d3405b6ff586a5f29ac4b72c1bd23ec186c4630d8f49bce7372f17ab414c3b489eff849ec88688a4144da152c5c8cad115242c495958435c3f3c41e41971c4aa2416049f0cc51c222931472b9a42655ba147f44acc49d57f5c7e7c4d83f5be8735b60d0544b8e66f0645d2aab557aea8a2f4e1c8df993141ee9606d96adf8d4763396eebdbdb1968eb75e49eb2f803ba5db9c3f814e84f0d5ff9ec2214063cfe8b3b085f0216ebc5c362b1582c168b25451211d20fcd5cb39869d5b3923ace89f1ca55c5942aa698551194a2e18599a2d16cfd4d453e09a968d068364208356d763968acb5b6ce994a697ff5d47d035c9b39b4ae054aaab0c2b1b6d9ba7539e2de4f32dcd408a9f2c49cf9925ec9428f28169a14ef771e54e4a767e4a8fba1c8fd240485c790bc0d882a498da24a9e8474648cf2146fbc9b8578926da22c4f42f2b4677946d57b2721222afc343425e6d427b2939493ac71d6e84fa68337ee753bb6d7368db7f94e8d5cef46cd772f835e81b746bf8c2d6b502f031f65236a84823468bc8dcddb6c1b6cbe66a2643d6453471db97cea077584ba82424261c9add2cb960e0b343e7e8ca16b7ea364a8a19853a5c49c13709097a37723c6cba39350cca979f9a72731e75ffe491673f4cb3f0dc59cfdb28583a08e8eeedbdc9d8a81c6db3c0f1a6fb36d5872df069ba771370fd5d3781adb061aafaaf9ab750ca316972721d4d1ce0956d2d0b0405f3e8a48d6a011f3fd7214ea65be4b0e23f330ff640d9b3f09551a9ac7969ba1efbf8ee642686b8c1d1e67a02d1e8385aa63a35391864ec59d8ac1e6693c0f9ba7f1364fe3b5afd1b4d75e86f67a6b1a0d6da36becead6892a293f86de5c0f47765bd32b9a1e512b5125bf4653b81d3d1cf934f486246fe4db68ad3b09fde44e8d665eeb72cca47ae6a97fb2462a7512d2ae3c69dac793108d7e5145f33174dfe1311e773962cc39a7cdbcd6c01a1a9aafba6f80d3bcf818bae5adee2aaefdd6e578a13d0cdde94f4a77da9ad19cee14480c0cea0575843a6a39e99ea712a693106a282b9167b87bca725e0a494694f1e4cdefb837fd0edd9746b024fe08b837bdedbe948a817bd3f3e0deb479745fda3a910391e32fea5d45a63019a342f4defbda16ebf2ca8804fc66749b223e1fcfef5c0d18e2cdfcd7f2ddee18e753f88e92b95c30059c8f31461a7988ecca43642478a3fa9be7a1fa1b9c57a9527855d532fe6aeda2212d74f9fe72147b81d103a305e3070c9ea89a36fa7530fcc0f9141e6f1664585f06d503e065b8791446b084470a8fc28f0067a7e403e0550f801f410a3b2577aaee1800f0aae70100d5a3f0f72fc6f1abee9cde43e4fa1d472965dce111c736608a9c0dac873cf3aabff98e92c1fc0c52cca364a82114114acacb91cc4f9997231878a83ec6538c32a2feb87fc6471b988d9298736d8262ce09ffe2e2f353a787f1fa1573f4cfdf2f63c6cf9723576da97e0747bc79d5f3b87995ea6ff6e681c2dffccdb6e1e651d83b38a2feaa659cf2cb119f28994d4cd6b8f91831bae43434fa753596dc09bafeebf0eb442961fc6b8a55eff068e211551335ffa4fff570a6fd193a9525aae6cbd0a9249dd23a85f4490f67de68cd236f66ad22bff84f7a3778648d9b577d7595e63f92bc995ffaf7722a4ff71dbbaebce9dec3e9beea80c4d3fdec3e6fffba4b5eb35348487cbe6874a74062e84e5f3074cf7c467719dd6d94f4ac044af7a9c48beecf5d747f25f8fc17ba731b940b283182154821e9570a49bf62b298539fc652adb1abc1e214d1bbc19dfebdf8e28b1d4ac667ace1dd67dd6378f7260d756ac6e7cb56a9b66aabfe5458eda9ae2aa412a9af0ac46d2af29337dd26c6e7dbc0e48d0dae83869f5014458e1a763c7edfe2ef29a41aaabff99e6f34176fa04abf780385be0daca62626a656fd8adcae1d14ae56cee5759b8a7cf32a17eef70b7cf72714bd1bdccf9b57edee634a0d8baad9e9d78e927b0a89cf4f21f1b8620ea76b0a4b2a299505c60f182d183d31276eeed5e080fbbdee6be1c3893244d5d440302551076921fd24e6d4cd23aa26571f0c51351f6da25f3a2c8f5bbf1ecefccd44d72f3ebf76f2373d238c32ce52bd7abe07e12c55c8ebe6380c3258b1a93b33228d229bd10dcb5b5cb8ef2aeda2b94d48dec8975da25cf4362a5c4a1d1dde66c4db8c75ea13ec5ece6fd27d2787a9dbd1fdb52ff2933c5ae44dd41deb3d448e2148e2703bfdeb203ce518cfbfe9be019e354e77158fbdd7e598789b11e26d46186d088a7847f74f86316bad8c20248d4919d34167a0b1abb5b29129724350aee0f8e3b83d5988325f47e65f61cb0e206501a24b0c8c19aa14a6ad744e1e1ceb21771ce3b1632ab985a9e02ad8085b8939491d07f1389320b4817dc120f804c6624e50cc118a394f624ef7d1061b950a8bd520d8bde97770c06e776f83e9f3e571fafc79db90ff8403eeee63e24ecfbfba3eb4710fe5d8158298a888c73bbb1d43e4d71eeaee3bbdc3e1d5ee15f6c52b8cc714b2291b29c150e6ec545132a510061e7b8a3cb71419bedc851279befced7770a4aab69fbca1bf8383c6f27cf930a26aaf20f72725aae2ef15e4ae6a4005669021e6c8878187052ef05454dfa89af3003aff906a0ba776c497f1dfa73607e2de3a62c426262323da0409a9364142b24d9a34b94dacd6646b82638450097bc95eb297ec257bc9139bc966b299b8c8389c09a0f6a8144dd666390b15918800000000c315002030140c88c342a14092e48924990f14000d7f984c644c1ccbc34912a3280832cc10831401040000202333333423006fcb0bdbe4cde89be0308a19a927e739b97bcf6275488256787ef44d4e2525e69e96f68dc458cee5e42b89e99877aba153d56ae726fbd4e67a1e9b8e7f22f3ca3ee3826e0ab822c74e2145899beb81776e7f9e281adc9202c3fff47672991d24263139cad8a4a12ff10021356e3f9845b91f6593cba9568ebe3c47add3609559b40da6a5b9614258e5b516d6ac2c3f423fd7e3c2179c9ee35dead6cd975a2f0282f12658094625446eab8c71b850d72b122695fa1dddd2b4261c76d2021bd41dee1244140b1f0633f3015b4f19bd09e5e641e0d6c5f66a2f2e6a64fc2f3c684af451bc3068eae1dd78bef220fcbfee2b953d184485c62a583cb1edbc0e2986a37f537b46b1283eabc2a350082c59b0d8431751330c08094d2812e8a1ed73df209a8f2a290a8d78e09bbd6abc527c79b39fab01364e3e51ecdafda8867c58b137dc931fca9fb5b32fa5967dd521f38521ee6ec8e86445105006a11e2ebdac1f68980e05a4ad5530945260037c53d03f62ea1657b51d7e0b422351070549ad8917a606bb08886a2f9e069dda69f45e7a5811e928aa1d7f988e0362ffc1add00dd1f3ca74d93f0d22e6930f3c733ff0332b80ba00c16dae9252c7d855770663f7b1d8eca0f7d23892a081cc18a2bfc303f70c657405259fb9f7ed9849b815373b1a2201527d6a77c943854a225b0d93904dd63f0cbf2afb403fecd8e61d9a2e80fb600e7da027a31ea0c270949f171034607bc7c4afda6663b08f21674b4cb5d1427388e89735e6dc77324026df5dd7db10c7865bac6c48b551e0a32cc851ae8bfadac74136d07621a2fa9adfa6c435be2198bb02466d341f9d189399b6e4bacdb6ddcca5957965a920a55f17229b8aacfa2d400c107896c625c9eca4d01a5b0076b05446cc89b0cd2e36068e1893d40f99c2b663bc420638b711c6a4bfb505f3b8a50a58f8cf6a829c14c2fa9035579122279bdb76771a5d23f6cad672feb1e70169a14c93f6bfb4528fb6c741e68a1c915562d09a542fdb1783c0fbb03669fcf41c3d94dbe35cd5020d546e1313e6ab581a3d7646f6e9ce586bef1355820e04f16378e71dd0aa8950d384b0c810e08cd8ef75048e75c3c4cc2f30834a8aa58dbcccdc5f1e9c86135b6047f14552c260145487fe5e0aa4a5f6bb97d3e065175513ed3e3c1cd108d0c4a45fd26bec876c404a28965d682909aff45818bda256fad8f75d9199ae8b018a0cad40aaa9bda596d87807aa23e929390737c0bdef48e325643fbcafe1ff2d3cd6986fa083cfc769f5a35a5a8814bb3c823015242a93b2fe534b74fe0170eb86903af43f54ad82bc0dd8ff713fcb605492131eb2fef8da51c147087bda4d01ff17d473bf2c6909d155f6253c23d09e582c347adb66eeaec744525020169b597b780f8c5204a6e1f88dfdb2f522ace82c8000ec15a2f441a63f34e686ca0fdfa4c32c5b24e9b038d2129163275a539e006f0877754d75ba645856c775afb38fa06029a75a7c7661940ab39b5b6346298081a855feb045939cd263d627828b77d95cb25e7a12fa414ca77c9f6d4d92b97c3cec612047c1ff6ca8214f04a6bdc34e7eac33af710cc68b5ecda5f4bfc152f3fc726b5340bc05a52754705a757d9fcf0b2fcf103d55dab83fe2933fde7d225ab7e448ff909a00229ffdaf8c0222d39a04720bc0ad7296cbd6cd6f4d075e1458e896997d570d851b6093423e69f1127130af18442d2aea1667e6006cb409c532e4b7338fae634ddcbda9f277027396d02de9ea137f1d1e1da22c0811c4204ecc882cd90659bb47afb0ed375415f68c71f0422b5d89126451178115ff46a30bf9f30552da7c925222b48892af65fd819825cc61bef889534a61a4a40866d6d93238a2ad665264c633d0f2106ce52e2c6fe4a73df8c945d74f8e599ad8ea86f92796660f7cb48033ce0b8169892993c141efd6ac3e8d9f6710a221dc5708eeb623fb0c3770cd46a91884c87faac85f2cd881b86eaf2aa92590def4d13b98766ad2851f5c9228966b65a384aebc1496fc7f9c0217c9e833e979b39a27b80554affd0b65c1d4f51471f428ebad739013664bed4a190030c46371903df35a9dec8573e34870f24be2ab8c2e1b6a2f37b32a2ef751faa27c08a78c55cbab1d7a8476719064b13125dcf39d592f22d8c909eedb12d69b1480eeb96751ec44670f0966affac3318eb5bbc5cec40cdc8f2cf6cc433943692dc12a080a4b06fafbfe3c4f4cc0642d5593c199efe534936d9e2c1b8216e85d74600f35540868f474586ab29518116caa5d096973dbcc9f7a6f7e29354d84ed1638cab582e6b3e515937f843a42c07443281c74843e6164fdb8b3b738480458d5ac95fe8567fe74d109ec81932464de96203a8e362e04f43869013c0ca0e9fb325908d9a39d0f1faf2c7edc785878e1468d1993fc823824ac557646ef3c751ddf3153a7f2734ef591e6f0ee16a380874eb22eeb58449ef636cfc0096454dd98df24de76280770ca96438600c7db40860ae0e486d594ea9c4391dc2e5c91011a54ded0a74d04ec95472bb2cb4677ec6f0153eb25f669e821d6cbfd0208c74992db9ceb4aeb4543c22bbbdc53c4c1395fa9928bb86f7c13dde6133b4724b36ba26381ea124ec566f15c36f25e572678a95944bffb8d189cd6adef77d2e0402537d0336ec2adb608cba9c5265da7d777a8390a3120221991ebe565cb27a06bd6f1de494148c49b521c2440e6736b57c471e1bc40dc230368b00a650d5ad6ceaf13913a8a052f46c9ba2eb56ed2f9552a5b322473bfa73bd556fcd03fa660eddc586fcb7ad0653076cf1a5fc5c1696868bf2a1c85685906f8a44240fda5c86a518fbd442836ca8350bff220d17fe856a5cfb175aac7f0dc5840efc89e545b57bd90680ba6fc8a7d6c946702397b5980c43e1f112bd553eac2614448907011be6c2fa5c3e7d116f63827db9641fd4aaeb07ffb5de268bd88d0e72185a6203b587d39a55ecbd05c7d3350ca9ad5cd218474fc181deaa5762062068f7f20d64f9b2e2ddbe32ccb2b47946a4522e1db96dfb2219965c077b19250330269c975148f359425d75174196cfa29297242e5aa62d30eb2c2a8f23c81b22f5f21b526d652c05977048e17576f8e7796f8e1729651049ef8c670c3523db5c3814bec7df2372d9013eea55dd9e5801556c140e47ac15879e3a931879602f101c263716b8887a9be920bf84345add2ffd88356a042567ec89cb6e4e0a455a7c1aaa73cb7dee320f76e917718bdb7adc7a2a6898a540f8ba218c702ae821293988f0d85ad8dcac856ce29284931818a8d82f4e75ed7b8ef88862a1cd83174fb37bd30b0cb14b2f3fa324d7a8632130fc06252650bf69871d9ad7819850bfaa2a3f172f95d8da280da49c317e14b68b64cdfd226200a4fac6b902c0eb101330319a3d2db0ef26fbf5825aa20251ae0a6debbd1d7767f04662e42cc0f251f3b3219c956f7b10204524cd654b47d0c3808527d082060a483f0bfd5968e6a06c911365cd755839451162f253c8c0554bc6a2b8cdcb690eb8620da054726e3750866f9922062a8ce7a6b4def6334bd866307b88c7a0b2c67e10afe6190a3899d93af1ab1d1914e984fb51ce1025a416e53d17751a570fcef4d813bc7de52e4cd77f12471d2a15d41292c0685fbe68a4af32f9450ff9a308b7c04993b4a1d8405e904346cfbacbfceab7a869c4a0f05086726f73954dcb202adffca0457b0bfccf367eda246c5afa91e710b1e2b13d7a4e8cccab66545778e972df4e18bd02254a190b0632af8649a7597e8a15a292b4c92b1f82113e8254a6e1bbc46507fcafd43910dc73327cdd460d9fc329eb30a8b3f3919a31a8049b84208ae58af7d045788fb17d41a0c62a88a76b0d90b2deefc91976a22a546b11c8f374dd1c02f82c8d9a5ab3c4c9cc9d294bc4064d965e983362d2885ad6b1679a0034c98554326f1c1dc9d3a4ded46d894c584b82a9af1f9cd37a6331023168d7932337a8f8599fa32fb710dcb319147bbd660dcbccc4dce1b77563c75d254c310871ab2135581e697c9f96deed90f342086bf488f4c21f08e9c4478c2633cde5fc791f9d42f8f727dc57686434664f87941d2f6165ba2ce65d2fb2cdb26d4dc240093f091ca386e9b99efbac27a73c791d646ea455a99df6a5d04348061262f70bf058f0a9432b656d358e01a02e17e90a9e642ee0e8b2fa061f470e8975212d94d46763346a359c6b0582b6d0c64994e4dc6316e2727a00e1a56eb7ac4e80dfa466ef63f09cd0321e22219a7321037871818e1b9b47fa20578c82712ff6345e8b8859b24e33c9a217d17d9e2182f4e7f54e891a007ee1713181bb876e26ae64c184845704cc3bd036227da0fe50f000c9360c85f38a7f048f06a5f5dbf42d8c32ff5896401e6a9ca01c37856e121880e3f774ace0d36402a244c70939f59cefdf3a4b35953036812590f97cbe3d5649de7523a918e81ab3a9557ded5be2a067a1a6bbfb0fd5756025f87e84efbdb363b06220a8b79e15216ca32f56c8671aad9f34c2fcf82de7f418fa1d025c110d13404ae309773232d40e7f24969056a844fa04304b93d721386936bafb35580e4ba86ace5b40a5cc8091d4c6b1d959a5a38b7ccb8573e695d266370a19222680606120eb94feaf9358597abe9404cb26e2842edf8fd111b1005481fd1049cd404496e3a2f58a5cb2c96dbe26c360680366fac80537bb5a8a4a87eff750c604c344f0b50ca673a6deb4a3273dc11fef3372af80e2d756d3d5f50a30805128b7990e6be148c9696733a99bd0596d7fb6e7c4d24f1d282888ba4851d426203e21e4f72f07c3a20b5c1c8ff734c5298c88f7c91b3f0a852b3eefbf1a731435e5af0cb745a8d7283412f04b9f42604c1f81cff95f10d296ea4ed097ac2b663917bfa61109b7fbe72af95ccd4aa78e8b3906380390e52ec598dd22044215bc8375a65803991c6a20444bef3fb6a8a05a993d62aeb79084ce2a15e6757bc9375b5b31d7b2604ae8cd49392bffacb7c3e8c187fe1fde755b603bc0da87c0e2aed3651dd4e88ae0ef07d36e7cadaeafcd4a8843302de7aa012d695cf790d4c7350f5efb9ab749df194d0782f7842597320078013f0d4dd28ddfacd8706b78daabcf4ed6d885759e5b78957d2bca97ef2719668bfef3a9c90a7297bd0aa6aec0242898a615ed68d25b4e46cbfca33bf501f20628d7206b3ea994f04a8b199f4e7f7dfff7bb26b2f2c920f413f17cfd313de6ee9a0ef11c8877e3c3afdc896961e6e66d6490d68f6daf72bf003069cab5615a27a6698325c34ce5bb27c0589c88973065776baf264063095a20d079f0ca2e6b960cb0bf1bd9c30ea0bc06721d17df6e6824d1079ea263180c1084e02098b3b04a65d4822f9da7b9ec0e3067ed06fbe77522773d475a279c3cacbbbc6490a8d79f54ab335dace2c4e22115a0c8bf200b8705ec1ee85a92e572853886602de554cca32a8af521177fce278810d44c475c988b0a69c15138e1dfd82ebdfa62208d6993ae5fd842cf8702d5b87ade7b28ca027409d48e544f7e7337780f2fdfafa715de81554b1dca2c8ab26e2b14ef3509ed9c2c4d4811083202d407ffef085661e0ea5bcb6d03f973a101255240bb28c28853079ea00d20046aa250a0b5a3494de78b4e693e76dd1c9604bb784156d2b35eee9f93f84b4ec4ceebb67f4439c865f6b83ae5f845e81c5e742653f9d38b55937d614a761c1fd65a01a0cb4a2f2f8b0d2b08fb6011818f451adec2cc93d0a0b0f7ca6413bc6a1647befd90342e5904f61434a63872285cfd4a9644ef4969fa4d21515a020c75167123b277423b463632570b004d8bfa0ce5776292b2f2df262428e640969fd957688ed2df415419564923a366a25f925df0cfef1a4b7589cec4ea4d30f579861a10ef1832ad0c56b101b522967fd8228066917ec675c19179b374c71188ec29ae459f8ff5ddfedb3e3de91592cb2ddc398b62e16c32bb3889e6105a44067f3ce76a8f6cd497f5d742450d46ccd1f6199a6a34b8a7dfe060f3328476ae3ea74668643d83547a15ee47e58d8ef8a6ecc3bfd6c23a11026b84d5e908486bed26b0ba47407a750307bc83495ac57dda3156a2a143b37263d9594f68deb60a19b9c61b6144262a8f45c16c4e19864541c83f17e2af477a162a4f0287f5b2a7203e8b193b68cbbf222a9cd81710db8614c7d983084530da84547c0d06c7884938da3cc5c39f9e0903bf456c111153a698d5a5a47f986cde16abaa69a6e315f1879ca0c6099edbd614ae3da82ae3918e964a539838e78cb6c1499500aa431b2511cf8564c96226c135764e27ea4465272d7a3137e434b2916889a32b321c341f09888d2dca6a6d2530292d17875d8e3ba4c5de0b4cdd49f77ce96ccd7ee4ce20ff61b4c7941c05f49577a2b0cc17e0cd06beebcca3c7bef0f71dfd9adbda256609b4d58d814a0caa25aa51ce0022a4889ce4f0a9b00800150523084a6d9c84fb80222001856539ac6ba3e3179d0d7bfe033a541ef736acf0e8c20ccc40bb42e66d918005bd45769ed766414721deda63b7854050fbf226f752d7a6476d5646429ebf8ead50c066b6feeb24ae330600fbe8a2dbfa5199d84588e7cb3cc29d8e19c6077d17b97532016832ac960c15dbbd0b39dc942d1cf19932283782be7906e0b0e3aa3d40a66b001aadaca63c222e40f06db83b8e90f8110f7e49149fd44f5c679146dfee1267c9e9a07a8d1941e7cdee2a5b7661dc128a0aaba2d271cb2892db31dc84919fa587b4b5433a45baf09c4a1028af991fd876ef737456347f4d1acece8574120062e5d98d4d1f6d06c27c5f929bf72082f1041963adb0049aade806067d6cfc5e035c18abda049027fb4ec6ce05189434bce6d592ec4e01291aa0990bf45ef2f7fe11c99b4af990529c033ab71ef33ba263bd5c80477e6c1b46486c17e030d35e7ff355d6850be790ecdd730322aa625c801acaa41325302023d51ca728f8c8c47fef501710bb0187a45bdb504b512d838b68015aed9ace1db2a09f50d10c4fd911ed896d4efc38bed0ac04a6768d95a856ca7a101a0f2764926d78f8bf6f2dfc6ccb896b08b1f185b7ebff4793150f030aeb3c8f4df1ed8ceb4b29797f8e19ed0d891dd3686bbd7dc6d8404aeecbedbc745ed7bbda5d794f335ee01a4f7badde2788ecd3587fc5ab51a02f5f2ab2bd5578702e74239cfaf4a7490f58b95e10668bd2f83e64cabb0f9f6295666bd59f7be5e2e73ea54ccf84b0e8133cfaf7e429a05c6e83ee1f3ab62ea571d13f654ec44a426d04efddaa68a6dd6bf168fc2109353bf86f2bfeb6bf8042f02c0aaca9016f70522c2df507a853978df55188a708050f2feedd81541187b0bfac22d9a7489a4b59e77d87ec5cdd2fb251fa0f84b7cbacd5f424f0b400292091853cb5485861cb8b1efb0c6cecc7b14a7714a8765b8cb13d7b8c7618db956574d96f40403b6959be2b2fc22fc7887372cc26d7c55ca4c3e2cfdbadcf1288b21b0d421fae8162066a9e3d1402b4070298711812b80f8b29de98a5214d1bd4591dc5334d7c5e060bbef246fd8f990cf1bb2433baa60d1f7cd00c265a71fc44f4ce419b780251aaa71a41d15a121fc2456aa2e7830ce83c5c27fd9d71d685fbbeeb81ab780331ae633e1a80c9c46dc8b1896a80ffb024aa3334616c83aaa1f81897cf95d46131c15d06a36ab1603ae0d69dbc0914d39c7aa358da5e19bfc4bd09ffe549e570a13a246505a80537e583ac52aa4f66d191993131c55cc3e3a115d2682660ee7ca123d7af2a296a70ed06bcfb57ce1ac6764fe7ac9f2efc757ba8d66b64605d559c03935c15394ed54c33d70dba65b6a58919490a17f639d240a177f7b17820680d04d5da8ec22e40a690d879526c733bf704b7df339ba51676a56746855ec16287cafc2d100ea9cca7d7c96338897ed90b22da680584d5137b97e5b0500c4f9f541a0a847b3bf9181095f26b59d680b20b82c9dc00bf3c6cf8287b07a119a8188e594d641bc5ca718b4a1621e25b830ad005b18d1d53c50a1b0e5a03f783a3b095bef2933c2d69d6505c83a49a78d0b88f5728aebb99b962ed8566383697ad2a79908e7311d931fd6783eaa5755d8d70788614cbb35452cea01ab6d6c11e9fd883aaa33bce07a68c5495badc08b5d00e169e9c5d824a25a9d1202c50075fb54410e7a1d491a05f97174bb831c18726e0fe9b04eeedd40d2f8f65bc5666004fa585a9ca35eda38afcf1674f4183c628b6fd05d53e513a6752a5050ffd4b280f6369850959224b2493742adb61d7e4fdd70fb406273a4b3bdf425a21fa464662cdbb9f69afb30dff4068e7b7dfc6a2e38d150e156948413dbda1018ad7d5abecb581d6ff133a1e1f10a82963995086472edf8215cb49f162e197c01d59fe0a07988abe5b92d8b46c41e311db0ac61313492dcb518510bed22740cef767f2d0b5e6884a1a3e3d03d0dda78b1394a0b4d2d802b3d0b2f456802a27a079cfc273328b4f114136e6a096859e6633e74e7f24c826277a91efeed529c98d74349554a62498a3f788ebc226c72bce8b7386c3b8a8928243621d25ba54ef6e645e0bc115c816b93eb00f80ca3416f23bebcb90e48807780e624230bf8f704b763949e5cecb8101e2c5a62ec9d891a06bfe8175cba764e41383351e6e4056d02e21c248caf65a66188e2e2ed103c149eebbcb599ddfdc9474b43ddef4b880864319e3a1b10c2c85fa31f2210fd5e3e0790b62221a666c997e5913db6dee2c48cc43f339ae17b199a764184eb806a846227379f2937be6f09908481143cac85447c5b7d32e347e21d24519a37b669d78f62d2865c57aecef9376e6fed4a7057b075507be88cb5091aea5315292027f7a8bffbb861e2b5a727527af436fbd1e8233abc8aecef389f755791f27e8c5b6427767fc6ba4ef52714142eca1bce926856763f16f0fce9b46d27674ad02c22806610a59abef07882f14d1a987c9c8ce61eb74f77e2273ec6f008492b9293952926c21eea0849759e676ca1bf77ca16cd10ba1cde095d97f28bd39be379505d56455373d9bec98abbb42e003a1d5bb1b80c99b78d9441a5afe8528dd9c1b496b1892f557267cae02da012b32905ef69894e24553b98bff01280841899f17dd4a6a610792f760111e16b945ca90929c190c6e5eca0bebacab4022a1a59c8239abb1ef509b86d35d082a5305d7e244cb7acdd3e003252e6cfd665a6d3804e2a6702f0b7f735a156803901097435c49e3367c1b5ed08d959cc57b68cf2a9c4fb9e5053d2923278e51e6e0a9a8e99a4a5662a8fbc335accea24e8fcc5a9b82e3118c8a265447d02efa8614745a694c1029f386b8f36f650b7bc0b2e68af76515e52498810035872e385b9109a83bc736ec4442bc0c28b702d2810123840bf13faff50bd3dadc238afdf52ff827a46ba809d55b1c2b7ec811a49d3b7cc9790194ab5a5cbf4e46c35ba56f01d58ea0d51bb1f722c811649a740991a02203aa88bac5586ba8ba15a55d4c1e1febd59c7d89398684a34b11f92fc8f9fcb5f87308cf399408ae105f27dba749960055b6a86550c250ff2f4e63f98af1064c530da4c0240c5c8065a264e087dc4e736c9d0e6ea10e3fb2458802eac443573bc7b9b7ced16a971f57279eb5a4950614fbd265634ce7948e1a7100406d73c551e13b7c26020b70abb6f904e1d4793a6a4100c3434525b826dd56760a07173045bd3179ce6d8f6e5f9b10d7b90da5a246f615ab361125d31e8e2163e7f970434d4956c41055ae4aaa8b4f3539f3d1e6200ea5fdfddde9cb9c51ab1f78dc9719a0d24bb8c20e2f2fb8de9a20405fc93400b2e355118e425657a1268832e9e26bbffcf931cc5a4f2ed26ccd14ad7e1c5c9204fe1db25489932b3911a8c40abb2d8c774d4570e3d83244176ed03b080d471ca028b84c8a068e50a9bfb02b4b58e39f97708a2c0016674941a5b7402242d4a0863a0e1843d40647c449f92d25900052d56a332a5057720abc760edcf602e9012580911ba487765381cd350cc5dd2c97b393cc24b4c355a09aed8bbf8f8a2ed93e2c615ff0a52636921aafcd58ba381e433e0f9723419cb6a3fa455ab6efc07d0b798325115594f17133a4b0ec64088c10a93d224f81ab0eb72f4e6041941494ce3f501dd2f4ec234dce322c5e0a364cf148ac2556bf6bbbde64941a3e4fcf94764122e3b2bac890fc508a6456b587cfe71bc83919ad568893b4e7997ef3d87984a32729565a0f8f79af00fff7281d979da2bd651293acb2134e38d5fc2816b7d24bfb878e4ec8b299f02bf80bf68ea151041024f60e9124ceb51d06b01eed1bdbfb72003833b8a796116297e5dc47139bbaffeff12214c380113f17c92936084fb7ce610c34fa2b65b1093a6019ce9370d10247419e70cf4911e0e30248bb3f2f89633b8bfe282503f6245bddd0e5a046bad427b6013885df8bdc542cc647de37152d2808d363a2fa6d937f3ecbe717604cc52b6c4e3e99407c2fb9d5949600c048a87e30864a189d46a8ce51f99451be63ba1d69f78478b05bc004c7cf2f5f0386a7720a82ce452ee8ca7f6bf8b6e62462da95e965ac32bacf88acfcb23bea1a7d29c5ff6d1850df3e38ada9dce725ad10ade4a8b6a08f8ed569f30acd65e9d9bea29a17a6367820f3f101786101f3f03e8e76eb995d30f75474bd30f43dc8e56597db9e9733b02bf08a104a5c721c9cd78930b4d31df24ad0d477d42833153528bc3115c996aa4b7f28f0874e613e76856276a79782e7c09026d6f02993da1bbabdc0f3a4973ba6ee4a2106573cc36b5f21106d65a91a95e1ad0c639daa6378f905e354976289ab204334c050968f64fcdb268356d4cf0b2d307f90fb4e51b837a8e4f7e2f26803123e88ad3f40685186fb0217519cdbd770649a46c3d56d011e532b81047e221156c5d81fb7e85e96a5644aa81d6582ab69c9ff9c3164157b3e23a33b29037f0b68257fbd94dfbe197c68f197ec1accbe3e818267a9f935e905593b009a9588b4067c5a0b3ecc6a4c6ec0cfda57119d4b2b2c792f3d3072e635d0e9df715d8ab2fc9deabc15fa5ef2130283cfc179cee84d3dca207c98b0bbce45b3c6d453c4adfabc6e0b041349aa155686f2995be27324cbe9ad8e8689320205ad263eabf7ea7d2f761149786d19923f8576df465890e01ad7b6ec711e487b7830fd3b7d0c6eca8f9ab76a37829610f551eee49dd5f0c6c2d45d16764a5ccc3ae6ba5db421da9f623360decd26981a7ced755e3a53695f6b7bb5a816f9da29608c2b2281c1cdd3c2f12412d2257dd1dabc0e5347adf76832192c81348bf4c077518e82482c85f014964ea2adbb55e7993cb97a5c391a9280d3b5b774c4a349eb73f0972d92d836e248016884ceb3b92520fc0b8e99d067a3dfd79c4a707def4b55598dda391029dbf7aec8d028451d99863e7e2c73878185d5bda69413a32f13036047abbd659774db1fba83dd562e4bd9d9c5247724a6d1cb7710c3f586194bc93b57a635901da020b24c14f746d5fec9cb8ee5b0abfa1196e458b65fb4dc53cfc1bc781e6387d151f89793c6178bf6fede1f05fd1201a2a0d661144e9a57668af76b6f2a139a3374ca2795dfd26a2d6793a25478944146642d0f3a65b3f53dcaf0cf644b430506a0a2a3610c745eaa08257a492c3cd9f0cfd3e4af9989377e7aa7e415a88e9360327fa23c55c8f4fae1ae7376024228b44298c91c718ccc0439876154ecb7a9c1ca346c25a09966f9eef4a560dfca620665b816bf7d1fb91c8b23cd3b04a4152088cc658167e80c0674fa96849abb33e6d983e0358fb6e40ee800f7c011b9013bfc21f333033f23b8067a2bfa586e9eb2c3291301db278710a13f8d4d389b4e70ed3baf7c5b8ec13390f9da72b64bd265cf60b05d9d85b909eced1abfafde2b83f32b05b124a0ab2fda7eb29f29b3623f4d48273f7f71dd93aa70f66b974dc1ccb23b29e14d51113fafb90e3903a160ee122316f2ac7fdb395af1b1c99f51162e8cfca32b22c41fa472a9806233d8df36191e461d0da78961584de44c226216844f457011cdf064a35c72c5112b2c34864cc34ccf14f681ba0094c84fa6d50a27a2febb0ca0e12927177405f8dab41639298bf4fe9f591a4abbdf443635b0ec38a809ce2ea5f790d9c7460452dcdebe8b1381c07d2d4fd09665a38eda8e82bcae294abd1bc1e372ba408469e0617be81257bd6ac9c489da5e6fbdfd0b3448f2477684d00a5b7bbc636a67e58a00345ba1448ac23b4dc9edcf6288e770221917685a112f8eae2028e7691233e4519e2ef1e4d3e63874f94091e4ef67411882d9334e85ebb7f4648a007b3f1fd40750f8d38807d1bcb264e31df61e338fd0d0c35c11b588b891733ea9e369fdc8728cd957c12367384a77a0b8a92a1a182bb7f5ff91266c938813c80e801a2691ceae399edcf0b0a4643e4786645d9751c09eaa55da64f60532c204a86cef6ab9a3a833ac81a6e4994c983ded95570d18c6c4b3965666812cc00f5a2dca2d0e577c10ac4975bdafb961c836fa165227a643e3a322150535c508bdc13d08740286cc7185b9e4896da35cabcb17e404b10a5a7c9b426d12dc70134fc5bb9f7b55e3f2bde0dd42f1df5830755d770eaecb9ebcf43420378016b507bb6883de233f82a1960271e563ea014788547496ef596ad1cceaf3b2837802d51a1535e2696fceb1e73ef5799966d9905a68dd939a99115d393f48c8d87d3f496f0e1d8c210fad8ee5693ab38c1b72889ee7a33dbba339865f9631a56437259b100888a294bc22cfb38aa24a72c1ee50ebb56267763a2056c5f138a169649e75a9e51fe24f37c7e11b406381e3c57758d8c1f48eb45b30a9ca2098dbd488169b6626fa4c3af3c2373f013980098ad110cdbc55392847846bfae6eb806fb1852aacaa6d6773a86c6615f966508b14e6eaa64d1588f387ea44a96486019f02eaacb8c57f7b6e6c71f7c0121236f36c4919b5a280ef391bb07d54af52d1955b2108b9fa63d32399c4aa65e1293edc5101d93c3473443cd20444825d1957b031c0a139b61e6640249cebb3f5c56ac52478cae0f7f4a4d60d40b3a88ad240358b6e25448222d3bbb7623d60f59ef57b59e2089113e7e552efc45cc1c02c7c070124df887164824dc301bbae0ac35a33d61c9a7ccb1fa0de31397e4b8284abf12e426952ea3b31512e2bc222ed9fddcb19b04d0273fccc8b1cb14203af2a681c88c1d22ef425d37b7743c5b724839c3b280c8f84e96a07cb4f2fc2443bf3261a2055e4d1c90920c7440ecda44f85940c36bb79238f7a582b8077f047c57b486b82f13a2f069a855def2a8e1db0c6bb476647d0ab30b172a304577a0253ffa84e8db9496fb80c8b751d74ba35e006e1704ded8923d8a6ccf8660cb3d77461a2a2f3d88a9491b6be6a6f18a55d1ea69ce35e651183660edc617458618e01da55276ad4875b8c788ec20a240642c496b6637a1791719516441316fae9be3664be4af517c59112205f5045c663a20e5e7fb006bb411590a95e929d1bf0d4154bc4854186d5ad129e157cb443e371421fc6a07d93145394c56c776660a163eec01154e4bb2bd866b1a86f7042d0772c2de74546d887f579a444662f013ad63e51d23259c0f62f9f368292c52bbcd979434dd912f86b39923007ecd96cc4af136892c13d324b26ce7d1f9681c50f832d36259763da59ffb18085b68bdfecaf2f84fb9104c9c19467f7c3266ca43bee94a57d84ec909907612cd19c4be89c951b8f4240b0ea75a46b1dd48ef931d762ec84ba5d8ea3203acd2336b09b5a80556128a58b7caad426ec5231c960a39b04147a0842d897948eb9e0b9aae548c48f0ed9ecbca5a14730866f97cd66d43460bed96eb876f36f0f46811181388a79ca5c3f353145b328f90c01168ccd6a69b735833d8ad3415440efe3f46899ad892f9c1b7c7bf3c6e1b715997130e989dbf20321e51a65f41acdc6e4ec4998a452e0c6da1d3702ad8d7e0b87c9e95ddbf9dc8d23d7853fc70c1c921df9d3636c9470f6b93ab713e21aef53deaddbe5ae9bb42eeb623a90e88d0a88873422d4838a22ed99470ff2297aee7d0cb893b5a7c8c417db987cfd542bdf4b88baca97c8e148963354c89b4214bed814d8de1d4113de6cda6334d8f5c1e45d7a27145b39c5c2957943f591e9df169285f555c905410027de53994357c0fa1143726b588bd79f3a30c0377dc98e136a784b1e5da4dd2b9ee18b88bcfff012d944835bd4d820aae0893b2a69acda5e3f116c4706014b62c1cfb8ed8f5688423db8a01ba4ccf405d7789e154e08581d6631fb8b8855e96073d90e8dcc96c4c7af2a4b515f9f67c344ff5760d4976e6a9015f99a4e4812c762f627f4016a38c17250c741bb56dd2044aefd47a45a5bd25c97e4967f57797d1331bbaa06c06c64fdd65a8e4b53f90b8504142dd5d162ac010bfa8e2f52605455488b1d5a7528528f003874947c854305a61dac6e0f83dcb4fadba7bec3ee160ff2ec90749566d3b694af3cb084916b2c8242c4212b5879490acc406e260783a32f4d7b9cc226ef10457b4c9985fcfaa07c26390f210f84c4a48b6d40b68528047f2882424af084fba85bf7c87cb08c9fcd831881f24ab5b125feb2428505257744a670ac833c0bb80c95a92c1f258e4c63a65ad9c49a421790e75918fac813137b9ac150c1d1373b051e58ca9b415030324d6debf5c4fde501c75b7b37b3f92a51a0059a4d48ae06822709aa804a9301a9c757803b1784e160332dc8c3fb6f5c567a0dcfd2a96aa17c57ec02a284e71c3e76f8832da23ce49d47edb2877cbf15c936d3d9a67728e78053ebae9353306f2ebf2b7f04e0573e4a266cb411bd4b8928c8aa906dba5a02a8b1067fdcda055d78742d12277f3dea62d8227823c74dd048c4cd02ebefcc35ab5de169c00290ce45ee18f0de37c46bafd55aa9ca25491c03ecb1ab034c274f40d6a6ae4e1c52c2b83ecaf6a6a1ca5ab920edd9119b06775096ad81c17492db0f8111ae694710c5eecda24405d50e6b1dc30c6cae8e7459e433af2313adcdde6aeb88bebea3c0bab25f3b2cfdaa267ae0258bf8c48e97c8f8ed6be848f678ac332c7d57962afa5bb0248c5dc9185548d565f2d8a30afb8d6f0f844e22e5be3b296c113c00756a2c40ce91886012a002d083cd6ac7c3985e062fc06c56d7a370fb103f890d8708b225918677d182511810365c045386bf4bd63cdd6073b2457d91c32f6d5b20c23c69125993e18d1384c44bbfd24105dd1439bb0f4ea83cdaf72b085a0445e983a37d91c1b3abc70e8e22997f5ea562b3adaa83770bb5940b808f646bd2a5a3c0ffaa5155eea3642af3c5cd545cace9629c836fc106b2f5a0e3e305813b85f99ebc091612f399620fc29a8ad4caf8753475dee69b1793d44c54c17b32ad6bd563cdb51513905d9622b850b13abeff32058bc3d0c7e2113b8f932297b13fd0512a4c0a35b5420b37c5e8e8676a444ff473cb7a61f75595f2c4d71eb8beb236b74a8abcf71ee03ea91139aeae2e0ea8c3d404cbe6c64a3ba93ca8e46e8ae87c393a51fc7c608c0410f60f1ea46c9889d47f43e6fb67d5eec80bff7c245e813e2f3cacb1a9c154a408b5bbc6b88d63c0ef11572c39f5ab8fcf0fc168c65589ba5c89e4cd8d866033c94d44a116eb61a8dbee688a3c93588707e4b3ebe6dba1fc8d334a41cf4b125a40b3244de139dada1b7b84215c3eaee96084e0f09e5d5de105a3bc4792df1b8aba187da4f62a0f33ec125c7918613fa2e79c188f648d58e34043be467fd92975797f80f65aeefc3569e1e62b94a065b0818d332deca660c29abe45bda5ac53779dc96c54ecd11b37395773b8b391bcbea5eb9b8735b36acab6e62d3932a6b709d29f4eafa14a140532c574059595567b5e6306721bbcc8757513898618c770ae1bdbad69d34343b2efdd5f38a2b8d5b781cf6deef0c8e8513a2529d3fbafe1b6ad189784b721ba7d1fb1e45a7dee90f97f3fa1124e25d356eb3e5e2234c3c88788987877849c90974fc66c1a0286118e32823c121f3bac783fd63f68b0e8457ac49e6740af26598f9e86c5ace17624306bceef11fc1dcf7908b2f5991524ab4fbb74bdab334db9b93814065d6f6d843c651570e692abfe6c43571942f4a3942475c8f5434097d61639a0c2b6d4ce7aae6e0417834b413f148af17719098eed88d38ba5b9a2571014fa213f625be53a6bf714298c23ca1fb6d29900f49e37b4c372a40aa92652b0b2a7397811d78336a496eeed57dba1d1054aa06bf2565f003cf2394348faeb9ef60871b285d2c904fcd21669f1b8add9173adfb0ae2c8b96e417670df5306917f2af8f4ea321dd44d9a4086171ae824c2351d38a8aeea36cef649789e4ff33a98b59b2b6baf73ae3a654e882e9935dd84835823e0dd9a6bac04889a04e2ba807835cdd18f865148b10d6099d5e130b1cf66f8e1ca863f7af6c7b40f13bd79984022911bb3bc76f2c821081d6ab3434b159bcf036d98cc66fb76ea10ccce5083d3fa3de59dfe17f1f7f2fafeb2c86b7df228fcc85c150d9ee15674d05d053e93ae87cf3179030bbe3bb1fbc42ef0260ffa05eaf1c958fa27834bf58f6c4306d6e71af09151acc3ccb6f7fc93158a7690c90ecda2cc6d27e1bac7abf3cb57f074ce451453264c34f5e5f08a78b375f12b4197fd215b8c2251dff15a7ad807ec99960a93a3488cfdbcefd9cfc2f11468def2caed9ca1c7caeb82ff95d8a0cf239fba544f5eefb6c0738244237b7e8db6bd9bacd002b57fc2371e38c56a5aaa2a948022c84610b6e53c01563716abe81a9d714956066d2d28b55941274386fc2d7f657759addaa16eb9739e8eec06183cc4c7fdaf1498a389cd6791a3596ec0b1cedc4c7d50ac6d738acff0271c80344d07ca4b516135d001b32567d7bcf87b6b00da0bd2a336c830ae3e93e0256b854b6258f0cb122bdf405be8ca8f17aeae7cbf7312d7d85f6d9a4ea250670755b3cefe441ed12a019515317b9873e09df63322b655a3e391acaa02daf662f5e648e5fe5dc41e774aeebbf9dc02a42450ca12fabe29d028f582c6ccbaa865cb728e4e927550b10bee3b3383ffa4c1d02b99f0d0ab2ff3b9289f7766884af4f4f4c8c71ad07f8fb308ca949b1367024eb595d8f3a026c6860b504550906d22c890e8a3d3b0f09c43115504a3c540dd806f36a01ddfe9335c70fba71bdafad342828e99212ab95966a29edf8fd4840e95ec253e83c929b8994f3380b72bc2aff8383b94653bd32a861c25d89541c174f3c76c2d873f81a6f3cbfe76770d5c4b28732e2583041cd01274ea1f30dab389ee90114902828360c4f8f750faa186e7e406c5acedbbed88b9d5a318b37b860fb5404ddf2d5a1474b862d5c9d21e77a9a495b0c5030ed38c93a629c6a7252d5c4a9dd637806976d95b67b3c544ae2e43208e382d4246b03d8dd5a7a9e9b1a561e258693471bc34983eeeb44d3526ad268d9b5653c649abe9395103878b09980d1b041a79f5a588e9c4eadaaf7909bb7ab56b64d9a1b2d1f043eb0e91460092a9889cac8e692051817a2146ba7dc6e5eff81e013f6a7e804a840f279a9942141eccf834399feee805cf1e6ddf4a4050f2412b7784633330ba01b2a42c1fbe60cad4711d551924be5c17c5324df61da6f9df124c901dde3568e8345f1251b121c57d999851937e95fd86217384a5a76f01a0a94092d913d48824193f80076050fa1c66255014b32463f72641f9f606b131a1857f1a244432d7761c23aea3ac4093209f3e5cf3a0d2d5a035f40895edeca966c43f4580c04da2288c9cb1b9d0c61624b106f7be97ca8b1065523cc3ae3a5cbfa8f61987a66a1f5d32f0c0012f4654e6269220d154672f4728659b39180066c674c694fd45ac0acc3587a07e48cb23d490201e591bce03f864d785386bee5728f27e9d9b38df3475f3412bb47548fe943a45ded043f02304ed120e418e4ea30e47d0c1fd4a4166fa95713e17913ca7d00bae7f37c7123c6952fd49f6c421f05de90fca2b368e3149cdc46f0a688086688dd5e33b14b7ec2ea421f519e4d24a30d7703bb00ad7a2fe219caf4ac9978cebe56722400a6654812e94e9a6f83629498b5d43678651008cbb13ae4cd404c18e34fba9ba00dcc24eacfd960ba7c5f33542186b898ca30673bd3aa0a18e002bfafbdf703a6ffe363eb8d78d2ce0f122b469397504e8f740931146131e0c7123d314da56aec9f6ae088d55c68e9eac04c52e9aa17011cd95e3ae42ed5a6b8368d4e9fbd942329731a269725f0f98667059e6597ca09a9f907f499f1000df6d03b8bf653a8699f00929aa4d270c801f56a0ea23c2316c8b6a95f73099f48856a4e3b412ae3b7f5e65c90aa8ffdc348bc309c316be1250b48bcdc6067ffef2462fe320db2bb3a8a74c1191cf185ada828871d390a7369abb6fabc539ea2909c329b16545a25d8666e57f6e5851c1846f874468e2583d76a79927866fc69558093e6ec133bb5c2e3e5668cfb578529595c99a82fe03dbc44c3bd9cb19e1e4a394e8039eb347cc3c05ddfcb9b12b88a1b89b50e811d8f59d24d7cdbae72c885473ac73efc1b379389df6d44aea5d6d517f02e4c269f14379651a9c0122b5adcda45c3d7c15b3dca8e28bd6ee8d721e043d65de63240dac4624e96ca3e421a9a0e05a5e084984de7a5aa4480ad3ea292f21a9fce7a9f110bd0c8a22100b7e870add6f28cbd743d5a205dacdc36db6e3890fbecc8f90b601d08ebddb01e1a9ab5f832ddc509b6aaaaede1af33d95201d5470454d484d2ea4d6d13d37d2bb4596e76cae16ee1cfe0727995a8e9f4c0ce8b94bd0626ee3ea5e6731b713945680c9837e6c105f66c1e91c3f55bc474bd36ee9a6f72921851452e5e61d935138b4bd16d66a4a1171114687e13398ece656f92332f109c00157b16ff110a6c1ec19bf9df557a00b6fea3f42ea78b004d7a3cf3ccb451c211ac0b81fceb986fbf1a3c42d45a869ae3805cbefc0d1a4442d6ef831dcd0072bc5f44c0130d710d52e60aef102be5ac884cdf0d689b04526f130244d2b73c7136dfb7e4497a2ab13ea7d40a6909f898db31be2025a5b8c3c9402081b114e173d3e95bc0739bc6a991628af4647b29b1fa21e720b998f40acb2076901b7aa6501f136962c1a02770419a015e0d8fbb4c17117ba8f955efaa4fc291650348253f21857eb986e2b219256a89cb62f948341a718419db1a6086d57b12734955ad47c967f9083ab621be4637748deafe90ae32ee3c49645b17d79b189f9fc77d11060a39829d0c5310e1e4f6f53982fffe9e0db5d0fd854e1f0ce028e065d09899f1abd35d9c6a0ca3e96667fe64f1173b1a98ccfa31e0194e75add5bd0ff74d7edf99fcfcebd752971d956f67f07b757199aca7c6abe7f0ba8f902626d9713133fb9e2698fa3b8110230c123f44f95b3e31127eb9cb78ce9a884604ab343bc5287c7faa60708e7c240e5085e608d8124188319d123a64af3720dbd25801a2228a1570ee8eb067139f104298eeabeb54aa07c7d8b7f23342ebe71d807b99e42536dc80b6d6996cc81774d49ae27f49dbb75c67ea49b6ae75475623b863e8838aa1db61e7f207c57b94b390a1b14402044075823a1e8a96c3f411487266f15eccc7fd889f7b1b9c75b7928f37c5b9c13d80d84530df7acf24b2e6b44cd934b8062407283ab52ca03782ddcd51c02c301eb4cb781092a5fa1d15b81634a80872c40cf1d87251b32e10c7c600c2d3f07160c100e4825315e446c6b67c10fb8888e9571291a174191752c16b7c01f6229ba590f8fa8780dd3c8cc847c535191aade872cbd1479b3093687f8ee5c21af05dba68de28e84c0d7462d3316edd32d00164fcd851a60bd2b2aa0b5579540dcea49bf32500ed0eb1fd0ad099c4c420772095c6722573d1508324c168c0b2cb54aecea400c24f62302602e03af43a60e6a296d5e492e4053df8001aed5be0fe2c8a5f42068d81d44e3e2ebbbbe65859930c6bc22527eb0af9721bf24e0482e33897e7d82820a37a5c13946dfa3af1ef5804cff0b1e69570218caf194abbfb211abae617bf19cac69c25ab38835763b34bb285a8c34e26a0e21905aa317c97a6a14f2087f9f70eb2dc8fccccf323d45b05e4ea3431cceaf1acaf33ff867dd9947ddd27f5829fc44a2ebf2644adf6f8da1b3238da95f250299fb356320e2432502ea344d540c1118800024b181c2e8fa600d40560b699c524d44df7d9502729c986e7de30ef10ac0e1826ac1e5c0d9ef5f4adaaf270ba9ef2c394e417e5a0f9059d84aeadf0680adad973cdec0297c34f4d323c9a6b4a212ce93d75612d12b7108d8cc7eb51ccb2e4bab81d549a04e2a6d678a1042772e9ba8a609885b0283e8aa0f1bf4c250e849d0f84860aced59800ec27101d035b48a02ee5d5eb9fbe21167d2b67ad0a4f50bfcae9715ed08715c78522c6cc89c184a151984ce313668bd19ffa8d00ab008079f03eeff6f5a0726919e8f52a09d2224cee688316cce1b90b632fa75a21db7d3b7173ed20d5a5d3d319d049d74cccb68ebbe6aa87fd7c3791a05e14ea42a81cc9f12cfd56d1fcd1a3d05ae224e6ff2a008511ee64f3d3492f0b1f56c3325847397b28a5e0747f988fbe31c2e49c6eec66dad0a0136bf6928424477291156425e045f95a1f8a5166a491db2a3c2d8ab8f4b169746828192860469d98d2bc420d7f45ba55ec46dbc2e3cec6c6e65924c5c1417a5a4c31870850c1c1b69a38fb59d795929fc4b044ec6d3be580648f5b8679618f19d3842fcbab5264dd196b1ebad791ff7b9b0bc13c8906f498236db0c14c9c2712c3181851f5fcf961dd56e5746feacf55a068e6b90d2b7af8249344a44b7528daf02c7376d9ff188210c0897683b81479570f25f44636d370dc1fdc56e5cec0deea1827f45787afe62f344f4505ab5cf142a4cfa3994c20d044560a5e77f1509821016c07aa0da4a5cc3156d3f946616337a4a304f5d20e8723d3363d22ba776519825f58b4e22ba68af01dd1afbd058292dc12f00d0f5ea6908043cceedab87ac3201aa8f091ed51ca72aa0203723910dd7761ea6fc635900183ef2c661e86ba2ffca053ac0053cb7f307031580ea2b0e0847edc046782400747690a2e847ba28e02ff1209afe4d41760810883145313a30720845fd019b292414a6f839c1974eca2b83c203f9284774ac133cc51e7fc528fafa71c5ff5354bc718dbd00027971bdba031a799053ecd51dd400a95a9a425608d22b06d4ed69a0e86d37c9dfd4f0c2adfa70eb2df62acac1c3a1f33f0c816fc89a1b3de23994b852d2567f20b2f865d15372f24501e60e0e20d2ba1d876586ed23ab4f1f0f9041c70f51682aa00126baa54d9279ce77058298de16407d20c86cc0c2e18e0f452433900ec098c680445743563aa4321373d588984236532c257b0487799ceffee7725ff039804c5299615de956d5322f31ca22d0cb6768b9c0359cb2973b0598210f1502393c2f9bd88a7468923e55c02ddf06e1c3ed8e3632cd02bd9049fa5a2fdf9550818ccf6a71c03bef585acb09945e6995c3dd5336b9fe607cd1dc31821554e572a025d26a1b6d14075343c5f3efaa300a81fcc757e8bfb3962ec5af748a6d0c33d87542cf708644771b31c8933722f7fb38d183c220dab484a5f95a1396213a5937e6d2f4c2ac9da40e4272298eae481ae3c4ed9fbc5436c81bf202e6880d421c787eec8af99f946ea77690d05989a0a390e46d70b2f18d05f1dd5c90583beb72876db80e2e1c8b4aa2e39b4026802fd6ed49bd32ba2f47c00bcf494442f10dbb3ad1d217ba9a8fd9d8bdf4c0cecc32f01a5a4c3c224d6be9a9c967771104bc60b60580eabf854524ede020f336aa530754c67f00e46ba9feff02495b9556877144846e0316d0226ebe46f1613a7478428db98680421aa5aa89d6f3e7fa1a753e6d5ef82a04ca1f285fc051bcbe1788d604f582d33d64edf125101a7105a20f3c124713f4185fecc508f8ba7386d36dd00b3e540794c251f7a5d505f59a6bf443ca35bebd699ad6016a7a50920d2bcdc493abd9edc429358e55868a5eb0aaa23713d1b1113a6a2262ab038b11eae3e1c132b362aae903ed0287ca0e1188b50af0c04e47ee11f0c9066e94ffe7635838f87b0a6148b60bd71e178386504ded44791f7187b36eebc7b58c78e4ccd098e9484339160c5d2607a8def8d5d4cffb96fda94d584aae5abeb8b7674fa183b4c0d6f0a666418043670bb0ede564109d5742a565837b1ea20ba036901d527cecec9239d4daf6c1d785283d6a23be4688016aa1e208691804675bd695289a6c2f0d56a1813b0ba471493db0f8cb80deedc4973c9135549ac8d90c9f26bdd7b40586571e90dd71adc85e66d8e91d7ad14ee5e5059563cd9b1ba696f9fbe045767e81516d8c75534f94ad9dd81cdaaa762b1ad1615c319240363befe02c7e5b9122a05f953a596063599c9de1174cd2be84ccaccf45f893aed07b9c6a13bdb64e2f108c1b15dad50c8b81132704e56f1f15b2b34f33158e7d74a2840e00e78624165c1a466192aaf9e5099b013b93fe6f099479962cb51cafed45bd297023a2d5ec88fc82ffee4e5bc6a805b498c89483500016c377570c420f1bc8c00b14008b250b3b7221164864288a5c31a978987557d96ab5f2780ff4ba8279a5f2022bf73009a8e4b24b94de6f15089b53355b48b3e391b7bae599e75a5fd74dbc6fb2a805ba7f1c58e923388052049daea8bc7be671214c1cf1b9d3fad54f0ba96d4159ed1ed93fe06b58d053d5e07aab9f6cdc0e2d832d72adb7dfe4b195b2e723d642b0ed11aee56f39ef9a6316b2a8408b12baee6f8d64cbcacf6509b194804e8b206e89a0938cf338e43edfc23919e11328fb9fcaaa232b6ebad58f67a097e136a3f49213e94ab34da93daae69bd67060496b778117ff411d4db1f36654eec512214e57664d55c6a8ae450904c682693608aee52b4e49c50ad570b48c6bc4cac5d16e11b975b06a15c548080c6fb8cff08ee415b22218b70f9fecda07624580db84925b9a16d3214add8a2eb692a8393b48718feb410d76d5a4bb00c8f1a343c9f77622f93e312d191e481b18252ab709abdbcb620f7ec650b5856720c884466ae70794fb725b12fcc8255fd8c91709bdb92a2c4ec725d9886f598e3e61f8b8bcfb00006841577be830a782beede0f094deff6cabf53e50a99b50f26cb4051493775054980556bcfca13372ca2bb829d90e192ddfa48e5d5da26a1fedf89952953fb83aa969fa1fc9ff820da1f9af1edaa356717a6b514d519e8f477e5ce1abcdd0c3fe18102d04bc650e07f893e7b9db968ba2b61362866de25773ae0d2ccab0dac1cd362797e0a18af17b66543956316b5c449fe5da6a424e08b066498260f806f83d481128a92b82a70dcadf44c8422b4e987938366103e37e7b7c1c9bc72e32c4aecf62c33e5d355f8ed3c5e9be0e528b4a9d5a139d80890d296e5119bba0cd99fa9e6a16b8cb00955b66125050014ccda5676d10e2c9e656429b6076a34591a5d904d22112252650cd4d6a16226d03364629ce2191c22658badbdab62fe99ba69a0f5fef2eed4fbab0e95728e8df3f89b996cfa12ccced4a7090f2ba99db52570947ad07efd167e4099014d04cbbd8ecd4ba6dd43e240520dbabe30410c68bf957b4ebb525f21cb0113a57221c166eaccb7f68ac7183a212bdaba7441d60cd98a0c780542f5ea04289dbc5923ca3340e447441d6e468132d17642acc5832007757ea9c8a9b43bf5b5893268d596bb1be9a0cb145e4c4b41228eaeeca352ee9487e4822deddf03977f4f5aa395bc704e5ab012a13d5decd89ecb86d3d9b9b08ba2762b23b5862bd1b8355f1cf9406fc1f377b6b68f401dcb493eac0d9e08a5b14643ec6b317bd5bdf0a9df2a9e999b33376f5bc8005d19561dcff220ae41752fb7f9156a087db2d0f81077b79a5b1be88bde21117da2d0763cdbe71cb5b90ff77b5ba3a9e431fe27aeea85faffb25252b4bf9e23d5077182a532a94a8aef49c08a12e0bc6cc5ae6f0f83e2b97b08ee4e1f1fd78b964758d5c1ebdcb05254d5de9f71c6d2b298044ae5513e88fc7f38e84641cb1aa854c24a09c3b41781da0c87367f594ecc4de3961788ee9919343e232c681b84e0afce214991c036420a54b5cf5f1f23e2e96b0aee6e0fd2e562a615d920bcff7bb8b92aba3fc3cbd8b4b25aaa338797e0717495647fbf1fa9eb324893a6467deefb90a24d775e6f2f29d06ba1c7ddfd3c94a1f34dcce8f23c324d9012b242bdd85008d9df50afb71b445d9dbc639d24594a073ad6f13e4a37ebfa323070aee4ee40fdabdc1ed436b1d3f5fd61fc75c3c4ba603b0652689f46205ea0e1e9a0e1e6a648a2139c7331ab84817124a5dd1c711b66cb90e12a316a1434681ab06a60ddb4947bb5517c7848bd11f70b1923e2e187d6d5ae5bd1d88f28a62fc55dc3f836a3dca16dc4e1b7eefa8942f08b8547ba37732778eea3f6d70e3e0b1ed8bfbdccbb51594d58c7178e373e20833a83dd1a9405e3454e71ea8b8eff8506e87bca1b9e995481895bf6a4b4abf8e92cae44a6ac0082fe89ce4e16555f618b57a03c4c1df464cd1ec63af0f8cc94a9ec681e8f2340b8e6cd064d24fe3835ed837c0a852235d558dbb445a30b2065a09740c9e9055614d83791e330b4b0ca486ee6b45ef534c63b857e64223d0546afccf365c51136ff6857468a5b51303233570a4c9a728865ffc2c1c722a3e44db7797f3242481150a143888778bc9561d2374025399d451f0b7cc7122ec48c7ccb7b734141238b33d45a088626d4a1ba08a371c85f7e62962ab415df9664d4e9dc298ed326bef98399fd19f280b2bc8ae397f7e5b10c3b18c591e6669edb2790fade260f8bf9c8ac2a82d6f65acd361a81351f4a71063b7e6fbc7be2e9fc24d091aeef2a7d1b767a9b5b6a91477f974dd939d3be87728ca7d51b8cd48fe9b56203388e3c3e69e756d0ddcd78b7e3769bb9f9a58dab0798e777017ed43c76d7a27412067338e7646d461909c606afd260a85e74040e1f97f2c25c3a94fe191f54cf8f4b6d07c777410308e310577c31f6ec3edf55aa625088261130795fdb238b03746d360fcc48bd830c3a31ca4040babb5adad46f1fe5c582e467f7998754b33b72bbc9b7dbd6210e041438d629c361248224f24f850205b65093220cbcf01432523997af81006c53878fbd27143918882bcef05e0d3f44168121017525c82d2345cf06e203f7627a168e725142d85a5aaae00960a54719dc265b53603e618965b5797de1985cee634993a066f070fcadd096e5675ebbfea2f91e8564597a12452c22adfaf6da23ac88eaad89d1ea63553d0070c30e4bc1414e927b5b508ba6b7752aaf1126008bb98a41fe6b732162194f2d498e8d9b92a97d0f325444b077e542f8875457268a9fc06ed1d95b78b85da41644a510cff662fa431ff91d65e28e951d00ae58077f387003deb7af12899a04a670f653556a86a673a6e7549386ffcc55a6afa1caa62bade0bd26619887b86348f598aca6602283497badd48e23e19219e2b3e10824ae15ecae86a9fd9d973a33f77d10b9f35a18a8309394f1246150f74d952f15cb539b2557a253f052acbf7c22c37a136c327d7d62c27879f7601d3fa92763a678913208309169fde6519e56a001673dab6b21c92528f994081bd93aa36b081e2f3f35c49f9c45841fa6377f9a5e72ea34717dd5f18e805ae06e7f7624ec1b152ec308aa10aa335c7d915cf954581750ea260f5746de2b992df822fd76eda4228581a47feb7cba301f17180bbe62800b2ee470d6261a0980dccd1438b495bf45bcdb6d973e4f80cf92042f188d81f1bdc7a73800ea657c03b9b229ce8bc54602dad1d43352347625fb756e9d4247bf1dadf6b8f6fc268756e30e48588d234cd32f4635db7a8dfd044876e4f79f4ef4678e78aacd40222b280b58b0bfe474f71624fb801ac5931b8ccac0712ebb93f6725a1d53eeecf8c57ca84e5bbc6cebc7fdcc332ec223479ac0632039d73d527f3b1ef8cfe1f0e441a079092b92965714cfff5a2750d0e40f79e93f486a52499905848fbe0a202d9dc801d0d559c9415391c5f2d8d8c1a51766628004001d54fff94ecd7a0d448136adb6c0e8d0f79166651fe2bee0f173a954ebcada566c14359a6bae8e88720ba1a6132583a046f4497d6865551f38a3a7d3bfc5f0839e93a8cae8992862525ce38320ee4493ce18a9106028873c88dddc3688dde6221558c8350c045e10868a02ab81ced8169bb3fe5bd45ae0424c6ba64574f5ffe65b8075f8b3040ec8ae8b595595a7d819094a894aaaa5107e1b2d04fc00042da4388906cb34fb545e6e9fba1ce71ad4289b39a9aa3c907ec26a470480547248d60b3d35525f8c25d8b8c6910447666bd090d6f011582b44a2445640ad1ea7dd4219ec1da9f68a4b48b0634d1257408a07ba45688a2a0cf227ea0b5579ae0abdc4fda5e5c6597660005d70a27b928f73472a827730dd48b5489ddae22c0fc6da63397ff67206cc29180a4ceeea4cb2368f88b86c0e3e93fd8e74fb47359caf98eda049cb08f8f08000c74a239b9e1781916e35c06ca595f4c1863465b655e52002be7bf8c3e169d89d172ea119f2ec5c94d971d033934181e941e2a11cae7ee279fb0614e4f3d616b78205226737e4ad680c1a99f32ab04d43debde448d1b06b554d2438e1abdb966a8ec4f1081f39d05b286339b403c14ae9d3b8ecb188f7c4694c6250b278e0a76aa10e7c9c35a29e2815211062f9070b828ae6a681b80ba03bcaad0f861fe7ecfa4392bea222d151619a864a2f197784d733be0e3a4a1737109f0c7014099ba86473bdcb12e1cbab0baa3222979d817c76a4f0adc17f85e1c4c905f988c4e194bd62f632644a36ba33596cee8ff470766025b39f29af3852a909d1920c53c69300e483d14cc4440bda1e4e8bbb5032489c6e04e6fa7d06ca862ae302e6370ed82598d9bd4c23e0361e0af84174900b07cf2a528ca5b5b54b99979a42be5293163c1363c6bc0a12a57d492c165122c57ee8c668357144b1606ea5cffe5fc9bb3c88e70545d722e538f67ba89aa9d928648292df97fe93d29062f01a652a26673a463722aba721262c5492459bd2cb0d781aacf392504c56c09551a3da9c92b65ad35e978ad75d1688023d68a1e94c226cc841b3a7979b9f297a67c9b2673b8a05d9dd0e39b640e48342700f6061aa29497b68070140f7402ca119b9e2157176a083fd4eb6490e6bfa20d0ce4d39ea8b2b386c7140e464d35717df87e513e7c05dd2415485e158b530045272355e9cc28063517128c10bd963b75fa6bf37b2f25090f4e3ab9326a87cbd00e72bbf610af3b13e756fa63823225444d4f7bdaee62b3bb8b3be694a7194c748632e4b1c48ace82dd8f8d8a7ed76b9923bd3a4c3faf36e71a5375b946ae061ffb62729f32bf351b27b988190747b7b470314895d07fcd2a0ba30a8046033d96b605aab2aa314b92c7679e242841b7a0a340623a771e930668dd9e0b0a2a9cd1e7973add595945e5dfb713c88a06099d1642004a914d0f5a5e06d8c2c2dfc54afed42544ed16a3e77d66106f501b5af43ccf12699efafdab0335d2896638553b1d97c73581595230453a4a7bb79e482d7ead79dc23672e1f39d2b6f7ab39d015adfb0f1704be72380a3078f2d886400089122941470ce01689efd19055849d92f642dafe2b96350318ccf04d7c963ea3a27189cd84719b276b53683f2a4ae605909a33876e2909df31866d923ac9ea0e9e609aa907b8ef7492906655741b55a59632143d060cc7c49d46f9c23aee061d759eebf19a0ff27dbd09f398e34469e629e23d15905d085c900266afc326cd3a0deaf7982f2cd0b5e7ace24c952be3c57698aef1cd4b17791750d21e350521c84db81fc4843921b170f2b40d39bc2287dc37e241d7306c2329e4e800774090b470415692fded2fb10914e105ae9cc5e712571058e9381dcaa3ce103ef3abd0f70fba700ca833f6ece953dccf48397cac90e5815633467a82b6941c5b64f7a3502372778b607889fcec07c91cfa8953a9df7ce2d13ef67a41536cd72d9f371eb332e0bf9b90bdb74c0171141e13b211ef7a1afeffdfdd5b707716dc7de7c70866fef5c412eeff5a8d20c40834ac4658f27fd5fc6bd3eaf85f23dbb69acdff9b564799aeb670d35b129d2449dcbdf56304d76a841bf7d77697b37f6dab6dbbfb0a2ab8d7bc7ed317eb52682f25b1b8f2da65948c731ec2e19c71908d06b83b08da205736aaac6c1ca19cec7438dc3a36d19b0fedda225ad4024f132170f71f587c7e6099bd92cfe2738556ce44e0ee3d7c95b385e89d2909fa8055c0e0de85d1d9408b194c1a746347a40b72240128f053106ae00e86082e5e23e8059f3c8471ffb172f7be707771eeb4729bbcd598b620ad9ce9d48b8b647fb1dda411052a8044124a58e0023b3f441e0992ff693d92ff16fe051c9ceb96cfcdbe8a96c98a8ff76ff256f7a6b3c60677077d552347a96dae41f96aec808811dc0f6c8183c1122f080c304106422c61831d1440e2c5208b20252cc0081f988009f19cf8a166440f00969c01c2e54560043a5ebce02531031e1f5e0f5c963c01c096095cb1030f8f4ca2f530981d1163e7863705072b0590e100236e1670e31d51c0ea88323908e267677ede639142182b0954e9e22ac343f580c40f6170e005237488d1ed00044c50a04ce088252b303a2cc850400d303862024b9078d171400c0c548084c5061a20428b4e015d84d9801645a4e0f3caa2cb010c8e198040830ed2165574b42ade0a05b0004b53049ee8a07829030825fc8005eba289eea7035a8c0029290722b062890e8710a2484086009806604962961101059440880c8cf8a0c211b3063460d2801020204ccc0646cc131c808525b014a188301a18622621c5102428a420224b121fa6103c5ce141882b0a80a2045d266e89242f1c909b410e5c0d13cb0f689a6858c286a51df60c7ac00d02084840183818c6f92306b307a20eb2003a10278e1051ac4b023b7060c5fd074f64398108415a4e4840929309c009543fe840a2cac03d04636850817c904209314bfc013c081ff093c51364fc40e25e1a60f463851212c01a12e2b716ac00e8082472c0c5e67224206e0062050d3ac042ba0339518415344c91224103ee28e4e08291a63186a0e9e2ee29d1b403289298dd9cf9e28b2c22b03a6385112f947146032ae8400956ba30a1bac43883001f9aa882061f79a9028c3337345146250a91a363075e9c09cd10c0067e100047010d2dce1055c0870f04582d040bb238037a8165f5040b2d1c415571e606025ce8220a2c68c0218927ce20420ac6a830a5fefc70a08933b62080cacc1823a841c2d212673ce18125a4018010a3802b923883026350207685976dc310479c018404b60841039828c30410469cb1b72002ce07b973430886386306228a76f021880fac30c587335c98a28933322124f041ea72860a0298c54e630d30f450c319351bd88012622a70860b13db8c3080d0c51806a081097cb0c268460b208004cd0a4e2c064210cdf8800c92187dd8308b40172c668431c05203ac00810a53109164c60e50cc60c90f1d2c48c107a098b1d4458a2cb65841142e1c5962c65106806a64b03024033f2031634818426ac094c04212658498b1230c0f57a4a08811142186cb0c7fc1de810a1574789dc0471937f842840e30901330463ccaa0a204ab21884421834a911b6560400724367259386045959b3288b040154441bcd084743bf39541830e8c60e17af4a0072aca28832e404b124028218129362046194c58100396d6cf940404008c325c05c0220525bee05006122fcac811019520c2802db9e0460b3284700687813244d08416465990a10512e419259c200151a0e08c2ac820c10d745ce125d131b485bb7b8dcd0dcea4319fcc1a802aeed387fbd452325d8bf37925afcb916c1a49506c8922cdedb4ea0deb98b6e08e2eafbd81626b56ea985897c26a0bc17de90d147d0b52125113a225b1264448312bb0289f44c9efb46e1d415a3923e23ea7178104eedee3ab5412ae3378718d66b12757ab9be6ad7bc22a02d923ed8434849816615821c6e581165cb438c110a634d1fa41254218255431453b119e49a281248805339c4002111f4a44411bb34206b4dc161c804c8d2b60b8e4120d8ea2b041428f00c8c0a00159042c10c01530600dd3bba21ca4b0822781203898d0440ac6c4e0894f0b150bae0802183db6173d35480032c3db020134e001944ccf61e4e5c005228811830914c1830bc40371044a294cff7ac073835dd921893072e8c1c30f3009dc714386709b1d94c0e70f8f3b0a5db8b887f3827bd1bba7b07077293a283e9f44c9d33d56b1fe4bd32277d7f115cac9a678a4c57256ecb99557bbbb155f9d66e0333bee8c67b40a77c7b23a914cb83725e1ee13c67d0fe19eb17871bf584e35b83b6b7522dd59337713dc89dcbf9ccf7327c17d04f79c69c40765f52df131f12f2dde12cf9e867f97f8f18e2541f2eebe72f71aee4e4308f8c3a3ebce7966dc8b818f23bd21619c942b8d56064d727671f7197ce51d55118755f40187803e3c4043f4ac87f6e3e333e487ce66408088457e684478b00575dd3487602e6f6d6b35f7e05aa621d833d28bc51e9dab9ed2f3b9dbb80f01d1f6941bce4cdcbd4615a4cbc2b71d49fdb24d65387cd5bdbbdbf05527c67da44cf856f3294c5764d51171f7127cd5d5dcfd86af3a24f7244d55bc36571d56a69dd7b6f5b78e8fe4ebecc5b1c436fd3bee0ec47d5e7737c157530c77d7190c6f4ed3d472a44c2fcb7948f697fec52fdb699134e36ef97aedb1d4558aecc53a8e3474f777ef66ee9ec357f38bcee0bed154ee3e3de519e75cffd217ebcde5ae79df7aab2379b3bf2dcdfb6bd7ee4d6f19d39efaf083bbebf09573b19a35dc9d045f7911c43a5a4a7b5d776ef64fc37fb1ddf47319dfea4d67b0c3e1ee3c7ce560dc3dc757be84bbe3f048cb95097f6edb909234d4190c2b530c477388c791ba3b8efb1ce2ee4f7ce52d77bff1956bd7b54c5fb42365ba566750c4b79e7da3f58459f7d48cc39e5ca67966c79e2041683421f4c787c84f0844459f2245421f1f22408ccc68919f2243861801222244a4448884614fb875997bdc1de5ee27ef73f78e660660d8b8135cb8c0dca3a9811436362aaf480d35dcd0bdf737ccff6abe862e5e3ee87403cdab6a5835f0f04127560d37d0b04e8f62dd807a15cbcb07799f62dd80629d5801f0bf0135af4d0f200a3079983c7c5dbccce7e163f5f0a1c70fabee6d6c964eff75cee3de7c62e3df695475d1210758f7dd373760e3734e1d4f4729a5c5fbbe2f45f37ddeab543f3d256f7a5ea74474faaf06a6ee55acedbdea559eaa86948ab551a925140d6b09f5fde93f96a7ea7e09e5b053f7be345f354f636cdceb6c6c68de4f797f4cdda372c09650efb01a96961ab4e480a158db7332612a0f46c352fa7eb2b4d400b371961687f9d780755f0295f718c0eafb1caaf91e6473a3d3fdcd8df7d1d074f9fe86e6d3f1209b9a1b146b0793d4a39652ac09e4ba47b12690f3de059807751daa86c5e5fbbaa86cb0f9f9dd04753a363a3cb810e47d8d4e172f33c87b1e5c08fade6f6e6650d77d2a1617efe7dfe878108d4e179af7f24135affaa09a9f362c2e5e171b6ef0be86c5c5ebe2e5836ebec399e146c7861bbca76171f1be7befbbf77092bcef6a74bccca09aa7d1f1328368de46a70b0f2e04d5bc971964f3369dcecd7f38433b62f8fee667f07eb26cb0e9a2aa8243d00dcb0625926c7ebe0d35dfbdce0af533a887102b2d7e0686622d4d20d7fd0472df1f753f7176c4f07df7494708b0517945baefbc28a1c5052f3a5dbc7c2c25b4b8c083125a5c80697127aaf884f9d0a1b939a95434a9d4eb2ca5fefb94527f4344a3faa9e383a6e655a8997a1a4c1f0d1d231aef513636362926a9473dcd4947e96607ea69fc37513a386fa39462d540a1584aa93fc16e5e6907eae7c7a2f134de6bf980b57058362ca51d291694aed529f950f2311da6e4c37523e406922754a716ac85458d1036de4da10519984f210330a69081135a4c3183267aece089b1711f4a2a958de73dd1114949a17a1b95a75239ccc3219a27d5cd89f5a1503f513f535fb07062ce474da25933e7ac614d550a85fa13172e5852aff2fe24832fb0d3a3726ce4e4bc0f1e23e030994ec0522ca51b9b7796928d4e172578f820259656384fe6ac81e3383434a99f1dec05ef26870f1f244e92646353972f4688994b74443ad8474287737343a33a7da7fad42be550427df734384f661898178548f5a9bf2142b14eaceef3a61338446062e35d8742d580790f03294e5fd73ab2ea7e3af108908139ccc98881f94f3030ff2f60fe645e3006ec7ba51a9ffb8b69c7c7d2d149bdeb3c99b0e9ef1f0d4e1496120e3b3e7f9fb06fced3f45ab028a8f7779df6974abdf7299c28f3957080a55c3e61a76f7e1fcb0553c15c65a433df7bd781eba8fed3f1dcfd74aa79af86a5721eef3f970ae651bcff5ce005cc7b940bb2e8ba16ea779c5ee983c13e2596772d1f9d07011bef6c2612abf99fe7d498af248495f7be74621561a5a2f9ef554ba8af791a94ca28f5a8d4a394509f7ad4fcd52c42164fc052af5a02e630d5cf208919f800db13e6fdcd2ba5523433353f1a9bbff954ea26b523a5d2d9917a54ea26a5b2a9497d9ff2683ca60ff6e14499acf94bf353af7a25ef77a876a858deb54ea954ca7b7fd74c7d8ad512c24a4b0dd8749ecf7b9419ef8f1802e63087b1a0cbf7dde85add64ad56fe3be6dbcc6f3e0e8d1a30a60fa6fafdc14e3c543972d8c03e9c3fe130999ff2ec3c38373a5a264c29c5da5143f334ae5483faafe6fb767c9ffa1ddfb36858ad6fc7f773a8d5fa5c9f1262054fc0dcc6f5bd520be6deef98ffbdc7da315933954aa596523f5fc5f296e6eb1d4f5ab0f993a565c24e3a1dcbe5116009180be653ace00bcca6461387317d302d35604ff37328955252ed409d7476a0fe44837275444e3bbe9f9f62b194767cac272d580bf6795d17362ed70ab8c05e309f42055a94a1c517b0ecbdd20eafd5b55c09853a9d7aecb09a307f25d58ed3bb77fa16ec7bd489f5a405fb58adaee5df827d2ee7f1ef2e707aef54df2435bbf94d9c85aaf9c9f28c4eef5d8d8eab5844a925d492d74d326898a05038384c76e0d0f8e3e8689951683c1ca3ef532ca6e9b19ea0de594a13365d9d0a6c3c152c01b379d5f7ce644fd87c98d7b526931d34359f72f7bfd132a3a8584cd3591e8bc97c94efa079d5a7be4667070deb490ba662b55c5d6bee095b755074ef75ef75ef6999666046ddf4973fe998e6981a5f4764e9c65f5d97011bef882c79dde97beffbd3e96767f4bd37719e7cefbd0ed3c4e134e705b480f9b40018b0ee6dae6802f5a92ca4a8e12da59e6805d3dddbd878caa686d2e93f9bb7612dd97ce73a4a3644dfdb7cf73636272d3560da9d47c9e64f46dddb9c74749826d3547d87d3c486e6776899307fa60f365f4b0d188e11ea532ca609b361297946a79f2c26ef3bef53aca5eff784b196badf1376627d4cb44c989609eb589f04b07c9f4a02cbf7aa2b8c80a91ef59e7beeb9e72d7fd282b9602a1dac332b2dde07f3be21140e940f8563f4bdea4f3844a8577d3727f7a6ce93ef3b16d3849dbe57e10c7d93680736594b4aa8573d0a8708f5aaf770b44ca68e69c24e4b9f77faa2c60dacbb7183070f1f30f7efd165a574faf92e16d384792c15095860b0c06081a1278cb5831dcc39a7cf1d745d97ea7660c68ce7a1bc1d7ca7ef74fa709a7c27d60e3c146b07abf94d3ad60e521e93a1219510de6aedb0c329cc176fe766c87bd590f7279c187c00be73e39d68d0781c96967986a583558dbfd1e19ee7795f43e746a7c6cd0d0e0d1d142ca55383460dd67cd4d3d041c11ca7c9c98bbf4e7f43f34a29a85837377f1ae3d57c37a9ee3480d4dba4be66a65e751a83fa14ece604c65f29d83ce58039cf87001817a820ec70e2e606c7179b1ba7316e26ece6956e60abd318a7314e639cc60893440ab039553663c88cf1549e0d991b2992388121851452482145f737ab530daa2655a3aac951e3440e8f75ca01eb9cc0f185842f2ab052c2f1650718ef4fded3b87b5e0d8e146027168e2f2b2e707c11018e2f6476386193031730154cc71858e7382480619d60f0ac1145c56ac26c5ee90483c9ba31a6460c9c1a22c0baa749fdac0111bc49c289c68604302712c43855011373127312731273129303eb52ff8d61a16e70810358f73ab8344101e6b16e8ca1c04a89043036588441992085bf68bef3583837342a168b84303ac4c0ba3f91c005460298aed5b148c042c718551833371d919b1b188c018299f9b1aa50fa927c928474ad9b396950363573ce316680e0d97c2a6fd6bcd2698c5547c4a72372c2c141d530e115a1c1aa21a38095528d14355274ac1b2a18cef7e13c0e0e8f8933dfc6fba9e319f1d2b1c0e7e4e37d1eab868bae45664566c26ce61821a7315652c01c06b0ee953e324ea44606deeac8a452a7d3186360e07923584d26dde98bef7c4f43c7fd3b9dc2f8ced711390dc05b32984cc0e063a1b89cc6e860d35bb146b03253838c1736b0810d3cf5a72054f3a3f9f9a72f5ed0d7d1f07e7eabeea43a35c171e2305587f337bf83cd8e1870fee69370584936352c15918aa5659e9941ac1aac944e0360d530e13cdde7c5182fbc183386a686092d6ac040797162c20b1a9a1a33a923ca942953a64c993265ca942953a64c993265ca942953a64c993265ca942953a64c993265ca942953c60958e7a8f91f13a957fa3cf0392a285583158d14ced39d6ac27cdfeba869e2fb58df98309eea6bc2743aa478c20b0ac5aa69e2bbae668953982554aa200fd87867c5172b7cb0c24b0a289cc063870e1372948083841b23d8c859d5a08173635343a34aa14edf14291883003653cce986102ba51bfe4ac1bac93a62a574da42f5c52a478e1c397270d18991822f29e852451948a6a8028959c503ba2ac054e1858a32603e051560c09c8a32b02d7ca8c8828a274a80f9145428414502a8e0810a2eb08982792c25265804a64081992950d0050ab0e850f08487822660d30b6153089b6eb26e9c057f0319b05000068a0c00014c18b7d1a9b1ba49a956aad409a749eac60945e39b7fa3b2d15175448c7831e2c30f4654353a9f4fb1a23162e407560a6543274747d5cd31467e40bd0005463841e31d214289e66f3e1adf7d0d0e0d1c1cd609a7c9912f4788c0e972f0f06ce67ff36b4e343aabaee57947be742a295629d61130aa0ff5f37b1d5abc336760dd9f266c4c87c5e98c262898962360dc53709eee3d9d9318e7e99e45c44a298514fce55e91d5173728182b01abf92756e7850d8db78ce1eadd98c992b1512492225aa2254d939634dd4a9290d08cc48cc32a658c5c86309071308b0c0631312e758cedaaad841406208c491856b724faa28c1139b1edce9424020366916d2bd61cc6889ac02c322227442d22cf65bcb5b53921e3648ca6b63097a4971889b3e844e6ee23d5b19de97602e4b12a96638e8e554a0d6b78299348c95b398b8d14576fcd4a62e36867b91e61126732b6349633f1d6d8c5b65673ec5a91d6511cb18e8db48a36b64b3c8e35b675b6b4a5108f41b13a525d331612714cd78c43d15252bc550979ab5be7f4b6414b9a46a9190be98bed2e6736ef8bc358dd94c966b2d61c25ebcd26e972d38d2474b1ade1a5230daaa1cde44873196f2a5e7a4b1ae92de38b69976889f87a25d93475f27a250d8de17e2b4952dbf35cfcd768880c496b1e624224cb976c088c0f89e16b8a83ad86fe2f6c091755d39ac32ae2f0382ef152cb25f9b56bebec6f383fce750bcfc537c8574b5a38e22b2133ee0e66fcb28c85645f0bed5048f36eaa8ff7337177177c2524c6c1baadc6e40d87cf73f115ab68435b220975117a01c4d52b5e9acbb056dcaeb3b092fa46ef575bd22ac80cafb65c7da2737569566a25b51c29955bdd5649ae3ec9d5a52ae230084c93a5d54c06d962414e1ccc225bcaf45673d03b9845a66b8d923192565b6c570d33036691e9d82e71157118db55c3aa884358985df509be82e13c368e766968dfca5495249178574d6d4755531ba9f7ad36b4345aa975deb7c442b42a856eba846e2ad6f0e24bf3500d2f2e7abd9232be3676ed2d63257a8b8d54c9cebb8004295bb98a44454b19e376bd30ec4b71b92e8578dcb596e9c6d12cdab6c5c5b655aa377a6398766d6c09d32e51bdd11bab6329e2db2db452452c5467391a656b7c8b6d1aab4cb63654c75989978c230d775d0aed8e35d1dbbed59236ac59bcf64925733b96ab78abae5bac8e35d1db2d6cd24df4268448d9446f19db5cf72562a2a4cc5b5f222461a5028409c92db4f27a0561bab56eba7551aeb35b79976c5d6b56dc18e7d82e499ba6b17d6ba6a4935c455a6d4a869084958a0eadbe36efa69a054890a62ade2c3e40fe0850794509508924ac544422987b06dc5de6ab241e7071b4a5cf0f088407d3aee5a9230db5586fcd6a4d6d9b1ec59ae84dd74a1b69b943aa2466d3d4c92db422da189121409cd834b529d96921b985566ea1958c73aee34843a032461abd5e5bd74dc7d7eb1636d51b0e7789b7c6a14824da58edda1c2591e0581d91c21dbc3dfd8c43bbe90def925efab65a89b36d8b477c7017a9942328bca4f04d5f06782931f28583bbc42f66fcae4d433b92a5f8d46efbae5c99eabdd13afb1cbd3d488d6cc0888c1a51edc86ea115f156245dd64dc3ad5c71af6b6532c557404dee0e94e47eab86010d290286835a93781749a20895221e110d20f98a888cc84dadb7ce1ee3dae7c6199de14cbeb6b732e5ba2fbdb932e1da8fb4bc34ca83e36871b97166b5c6e457dbd625ceb576a9b8b34b5c6f76e3fd19db4c8ab4e6daa57fedd3d62d5fdbd7d69604e6465d62cb5433596b34e3ad7f8816b6edee4d7c354487212ebded4ddb6b61e0b62fd68c2fb6e134b5092143c8110e8e230d1f5f59ac2ed12dab5dbb44732215a224e406981bc792a6750d43f1524d6d6fc457419c08a21424c758eafcda8a75d79a58deca9b6da2376adb9feba635d75edb0762032040000172072f264b5a6778bbde95eba6e3d35c5f5f4b6fb6ad2b1673b5b9965aea0e2bd93404c4c57ab3740c7f34c50dfd7c7107c94b3fa42379c348ee6ee4ab1f2007b52e9f8a75eb5a6aa9b956f12982cf112b9f2307653b554b799748f42edc92d55c6e7a6b563ffddab54cd416de92568a5f67b7d7d6b6ff886c1ca990ece9e37ded8bb7b4859b92da3e2856266db5bcc8646b58b3fe5cae650c3e36dc9d8aaf7a9a701057efe74d73cdde300ebf58491267f135c5d117a90dc8573db6c7ae7a5e2cc7702737fb7a339eb57e5b9d046a6ab3b6f0c24029bcde32ded46e7bad2db436dc8b9692a5969ac130eea0add96c04dac08b5f2f8578dcafa96d05fab83bf8fa070f163c5feaae2379c3e1b54fc35184acfc48430c85070a28d69d2bd3b562152d13cee4cb64492b1e958b09f7590d29a99f867f29a4e3d3d724b5e57a04eeaaffdadf012b685b5f4bad6dbd61fd9ae292562ed2fdda5baebb8a2e29be72ad7c29c4a3cef556ea8bc31f47bbf5d74cc55ac3b0d4b78ce2ab1698a0653a86557cbc33b68597f2d4dcc2979ac38b439e8befaa8517cabfe14ca3afa9ed7322ad79a4bfedd7f05afd497cc5c218ee7453f16bd78a1793bae68cc3afb6bd14e211e6ee31f88a055d2bed37cd8a6fdb16f77ae35bcdbf3326c95263f15dbb6a4db462e185dca59f31ad666bae4c585b9addb78af6efbe250e43ba6261e560ae7bb434fd5f6d493b641c146f89692fd6f0d65c69357fb525ed8011ebdf5a675f99a8ed75eed2db639cb443825f33fd7dab4eda713206b81345c84ab5edbfba66b2a97e9dfdc6f7d2f0b7056b606dcdc2ff5b996cedab2d69d50a035e9c2b896ddae23e476dfb77c691b6fee270ae1787bfda92562d27eed7525b8837e6f98daf90bb3bf1d50f31c4ba6b2673ddd77e9d3dde5fc7995875f9321afeafb6a41f5aac7eece00e6efb78d7aedd25ce4fc39fa3b8c7f7e96bfb3557dbfeaa4b1ad6d9e7c691e67a6bed5d759c515b486bbee56b8a136bb6ba8a5f6d493b2d254ac6910ad59bddb794f27a29a959dac542afe9272141720badd41ad5badeb6bd5928315c956dabd98a8b35d11b9020e5ad6e1bab95a604c92c476fb94c6d6869f5d6d92db432623c13aba804a6048add631945ac549034e1a0adabb8c20be2ad7a05d54a05293c47b31bdf589dd91cea59a96f0946059bdf4aea52af54f0c995a62fcd3b569972d535abe031b16e7bb3a30f32601699de556b1adb199375acdb8798950f12cc22bbd8ea5c9962b7b029b6c792d2aa18ab61c63477cfe12b1f460e6691d55d86b5a9be5ebb8e233d925df95a916a76a4758bd5bbc4390ac5cd709179ea96f2cfbf24d35361a678ca9929af314f38268da902f215716f880f8554a7529d3e6f4e2fa103bdf319c3e7c2f4d49193d7404d9f739e4e423a9bcee79c5ee764ced4ece6f4505bbad9cd548743ca9ca899f26ee2805e8742b56a7e7e5df77d99df9c5dcd0c423769fc34bfceab732a757376aa29dd8e6e76a8af9b3be8e64475338659c29c5ea732c1c94bd198388c7424a8bcb980d94d543767e7c566f7d5d008e96ea612d53cf9f092cc54d77d3f5e4dd7cd9d1a44260ddf8f0d13efa8f3cfbb08cccf6b7da76e7a7e3ac0ec627ae7abd5caa7cf6f76b30753d5b1306777ea3a6fce20b367aae64dd7751d4a68fee8baaf9b3e1e6863826a858963434757c43c7526cc6f7ad3bba3ee6be6e79d45f9cb66013cd731c1f417a2e8bc899a5f6ae24c0f4cd7a95ede04f266d77ddfddd0b4e669ce94cff79382cfec6a50aa2e35e76b769d0c3cd4a4e93e8f69b2ba724e8f67d2d87453959add0b1d0a1d0add099e7b3e6b4c54d74d9c6fe57d9d095dd74dd4fc6893c6c7b43975f3346914d9d111a56c68ba3953dda4ba19c354cde975f39b4ee6099d918e4767d3a5bad3f46637bbf99a2774365dea9bdec99bb3c8f4666bd2cc9b39e791894257e3a5a6ea9bdd9caf395138ba1bf3ebe6e99b463a9be975284ccfebbaaffba691ae9b3aba9a4933555f37e77ccd13ba9a94373fd537e72cf233070b2a245e0ba7e94d9af9e59834342f9b2b3b50983dbed975a82e55e78a041f1b277376b39b73f278ca499f01876946861ef8cbe0802fb09041c70b30aad02e2c30a5065c78924e0c1cc9012aa848f40a97e28026162045071bc5e00025334754c80b501c8002109c501e3e461c90a3c708a58144911ae0f828a2533389d4609a414476860144fe0c076564a0c02313d3b9b8900076bd0f0b2d8471859182ec6f52f8126c789811b2b8ec1484ff170077cfddfd2786778c2c63eeeee33dea0d23d58b8b7c5ec9e76adb58c82379bd6dcd8a337c7d26e1ee28f82a852f6a76d6732baffb2c0526dc9d86128bce602569a82bad8ae18c1a012a4264889020407e7cb0b81fad5290e90cd24dc5184e0d6f8727022e5f01b87c50502cfc4c0521879504b89c4e37a9156290c3e7809faf849b2390401180cb078506470d8f1c01e04223c337838782cd46dda898a8805035de911c35272ab8a898e072034b0e3445bc05fce0660b2ea7335c4e373a5cc0e566b344c08526078d2e75e4d4731ac20b09362614a1c3e703971a3a35743c9e9c1e558e9c333a9c5a5001a59078353c24aa23b878517e7a5035a824b87836281d9fcbe6c79bdfcde7aa61726a2125034a07aa06a57473e3e6064d0e1a1c29193c337440e9f0c6e87092828b0a4adfed632a9cf0bd6e6aa072bee9f17842dfd14d09a82e5525b52355742281c644d978a7efc6f3bcce4b792a8fa686c7e7a5a6a46cd438aac949a152d34b7d42be9e6faa4cf076e44093c209092e3492c82107f5ed502dd1e1db420756ecfdcc19388001191560318514650d29882f43412e2429826f183de8f9b1aaa14a5d99c1a8e88c1559ac2005207cc014f14202b678c115271841072e30811e700522ca0d84ce41f081192d5a9005141bc0e106006099c18a5151132629a050028e264080c3052c70830db11378e09b028d2d68a0e5c6e5cc19431002962b25e0c879c109a220c1083ac0010c00f1c300620090a18a5111d115564491821080712283185c710228462002091cd1c30e01f0819917b46004226822035db85491682807c74c192fb698020a107c60090a0451802ac60080e54a15a2a123af9d1c9c2bac9862010a08a24b150100031193a1235ec68b2bac40411420f8c01218a080103f74c90203519223af22427e766ce47c7ea68c173440c114514001820f6080024204f14301ba7411cb82c5851eb00c32a03ca94163063cbef8d083952a3e0f28400fb9262568ce786774669cc8e88aa042e2ab4047816e021348f7e3f94cd086c76bc17b1c29743ce68e940ecf8499e32b61e2a019c1860d6ff5d5b8a1b1c2d17163820d8f9a1c9a940a95ea50a8d3c99b8eea52a302155c5234299a8f868a488ac63be12629872296aa85aa51017d3735e677838a7d380fc7cbf9c80420015c5034ba14cde7c23901c8025c6aa8dc889f8b460e9d901da729df4421290197245096e404a0fb6a3e283b43e072031d58c02287797ae5a4f0420edda7c3e321a78e92530b2de08242a570d485841a413b784d721000171368aadcdcb8b9b1850909a44ad708810b924dd34426c42a45e3e19c96be01f89083eaa3813a61d60892030e1e40c3820bbaa8c628824667737a212765e47b52af8cd1618453ab8649cd0a282c1f0b29233a78c0014d74a8001038563e5d7042280478828b4d495340007080d49854787847522610c9a126650455a3a2e115216ae29d50c344085c6a524438482a273b8698d4d038b941129178804b099f8b480dea35020eaac6668805000970a951394161d6039793b73a4d540ca89ad311140b4a826c4a9a1f2a27a89a9409384b687c7c453425dce0b1820e1c2ca85a782265851c6a54602a084e90224447a99b2fa5e3f4f288d0dc7c3ffe85144daae6eb393df9805e98a71d9ece09870f8d2af48c0c1dc9a1aac141532407a1221b21aad6e7e3f381aa001716687c4b4e2d9c50a0f1f1f1a8f1e39da00317b0677a348fe7f34e34b000600011e07b010b60e1c4980b54e00802e06043935ea2d55006002c3358a13205e9080a0c4e5e40415a2ba8d0e3bf28a038130618387041890a2c1d26a4c2a4a08a0948208621175e27907063837aa2890f282166024740c001611630a5f5a3075440029290ce9421c66c86307a308218ce1102084b5372a4262526882f456860408602625e46889470c3a64695e2b1a3031cc05245a3221888980cbd84fcecd8c8a181f331e0870108c00617434270010b5400872a548a10c971e353011640a0a22409119a140a033c7c20030f20c2003dd0d00006300008a32225477edc4c32bc2274637c66be07dd171f0eba1a9cb89831e85ed0b980a6053759742ae8aee89ae830e05da05bfa94a68f9982ea84130f1c13ba123a12e68d9c114e36ba9cb9fa687436a79a8e46a5ea52a953f74d6f4e94d7b88e950946f838a3fbda4cf6541187f696d3338174135ed0f64da06142cd2a4719eeb2af5d5b6db8dff92448be9504c95f5babb31c58b83bca573950b0ca5182550e23563982707799ec69f877bef55f45abaf7d6d7fdb3f92cb34535bf8d4fececdb2802078450c51435aa7a0550e1eb9ee4dc99ebcb57f5ee773850306389eb876eb2afe6f7c5f572cfe4eab86b9c41a8704707c71f1d64d5fe320c55b573894e070bd6dd76e1d9f86bf8676d49f312dd3adbfd62ecd34376876d432efaa474a4b459182ca53703f91f1b1d1c5dd7bdc797460e4e7957cce65c882112340468a182162648811214682180162e4c7888f1123404040458088000d01120214040808d00f900f90912240458a142152644811214582140152e4a7884f112344808814214284c81022428804210284c80f111f224686000d293284c8902143840c093204c8909f213e438c08011252440811214384081112440810213f427c8418090214a4481022418604111224481020417e82f8043102040848112044800c0122044810204080fc00f10162e407e8a7c80f919f213f427e82fc00f9f9f9f1f931e203e453c48788cf101f213e417c80f8fcf8f8f8b85b77dfe1ab1b4d6ee56df2c9e2eeae1a574dab65c3db50e3aaa1e10375a9ea71a4385797beeacf62adda06b7614485db302a81db30ca80db304a82c69d68f5822feee36c66ef0cee53062a1d162f00723781af5c307aee522ad67a5db98c6ff546f1a86d6ef69786b9bda968c357f67a89f5e28caa48c32aeed38afbac426542c051700780af5a806514400cbe58a940e53b2d5d2bcd075974910516593cf1afa7b798b6ff2f5acdb17fd54aab591ce1ff92622445cad0ebe8e86411cb0200592cf957cc1673f5fc4bacb947c75c3696c57f9224495860060bbef067c1122ca0000bba786ca4ffda4dd5f5af6b5f4b0abc60811077d7b9f49358e0e35f2b2063053ce862054eecfc4b57bb732571265b0ffe4be7625b83b615eb0a5a2b38610524e80ce66a73a6331588eefeaf331010d0876726f2549bf7bc5830d11384a927cc7a8abbab669258b5fc11a42223a224a1a22930c4acc0a2e0fb19db29641309db1529d751bcd44945d2e548e61249bc25ad4ac99541b56bc5113ba9bb6948caada1ae4b32ada350ed5a8d4721b16eb286218cbc6527b7924663bd97da8470b588bc6527b9d2ea922a40985eaf5b68c58a06583184fb2d6c728f801bc00a1fcf5567f0a6292ea4349e1e5d99ecb6379b49a1891aa9fb0c7277d584b94f17a612f799c408f789c47d1e719f2ff769c47d02b9cf22ee9388fb1ca29a42dc6710f709c47dfeb84f1ff7d9e33e410354f1c4e471f76fba8edc8daa4839ce0f15388c55b4b721c85ebc96365b709f2cb8cf1df7d9729f3fdce70aee5305f7e9c37df6709f2cf7a9e33edf7da6e03e51709f27b84f1eee7387fbd4e13e4d709f39dc6709ee1387fb24c17dde709f23b84f1bee33c77daedc678d89336d268dfb54b9cfd444c9dc4326dc7d9e6c2878b769ca34c518d719eca99bf2f44c21007790b6434aabedf7ad48bbead8eb1513ab58e9a64b6023457232627c74b1159202ab17176d8ca5e0a894a45c8fbc4fe5850dbaa801175128208a1adc1fc93ff819d38aa2482a71ee8fd4512472e288288464ac7319fe6eaa4551bc4771e34486820b87a20928beb8bb8f133ea020dda1b0e25f6b140a249b6e7b89384063033d80e273d7b7b08987c7064fc8e0892a3c892b892bc9ab8ea28d5d6cf4c402dc5d8b99e296423a7bd1d2a35a99801a6fd26ef26647f2466562d574f6e4ad9cfdae3517467a10eb91bed6e5575cddb8e86532d91fd969e18fe428b5327916be85af95166b7d9227ed8eed3a1ed921ed6e85230d6349fe771d3366f23d3defdabacc3299ecc1dcec5d3ba4dd8f6febb758cd931b331deded9699675f1aca467acbb848a62fadb7df440fea8bedc5a4dd4fe99ec9446d5f96db56f6d96a8c59a4ddd932b1beee92bc69d9488d64b9da91acb4877d154cbb44ba92b93d5abaeb925a99d41b4612ab90d01078fb8ba73ca8c54ab3a5a4d083b2bae5758ee2462af868a455d36cae4c8fb738625b71bfcb19b638fd15278b5d7cebde36d7fcd7be2da4e16bfaba32e58af43a833d354b0b9b5eaf8b6f371cc6f4eb750b9b42004508401082302ed7bf4230524b2504408e14820f4810a4265cc064372dd230b1d25bc64cb4d5f5d626af33983108b6707f6d9d419e5bd8946bec62ab63204802821ee2b54beffa57aebacc952c9134ac488d0f7c0135b5d1a3123eb0c4dde9fbe081315c8b437880094f80079a40b16e3a96e148c3df14c9032df7ca64992803ac36ef4fa279370d21695db328c262a558ef149dc11e9ba6b65bbe5e4ce86002e532d9ae42dee53680810e88717741a623fb6bbf7671c6fdbb74b59b4a29611df061d581121c7cbc3f081520546ea19598f87ab9bbe72b0e9080031cb8854db7b02956bbb646b7e6e9e1216fe26eaa3c34977437d518cd25f5b901d4124270ff17ad8ad58637d1838fab451f812f0d30d3a37b6c9a3a79bd429bebad3552e73cb4643444d28cd38017fe2f9266dce3ad811478a5512da4e991ae95c99d22052986d15226519290842a49d29ca46f5da24955e72ae6c45a9413e9947d2b122c03fb56260c88712b6f7d59c6d59654c55bf59811ec5cc9df97da4c999ebe164a1a472a44a4a74c11dab8a8ea299748bc2566b271d15288a1ec1a65e3225d2b13a48d8bf45288a1e03094a45d1a2d85d5262422c19070914883441a94bb340ac649554a6e93b7a13ace2cd1c6454bc619bd53c4ca44bc1569ca2d6cba008e0bacdcfd5fae7f6d5d45122a99dbb7b029265e1a4ba20689338680040e5eef7a5dc9dc7e570c8b2b24bc208103125a949008ddbf49b43cb5d2dee5fa77bdeb6375e38bc4f7af5bd8c4d3730b9b7a489e0ae4e08e7730a20b9dc150db5b4f4fbdd9bd6d2dd4f6f67ae9d7cbdd9b7c45812fba6756ea1e5b58776edb4cc99e1b0ec15969dbb6d6d3f3d2e4deb6dff433f947c49a6bad66f32e2b93d5b7d2aaf87445811a285083fbbfba1f778ff98a02379bd62c139db50857ef4901365c2c2e571225497ea749b4ad4dab505e52b2d1a65528ffff170b0ddf24da58ad8935b614d2bc6f28158a0665648a2448be85130a9228f95bc7d8a6d531268ef844046f069f16fe1991e2b1b5f849928459cf94e488c010ee5e457cff75ebbfae113fcf431babfe24491eac35b18601c2ddaff8ea08325786242221d8114ce8917c9368c923863c97f7ad3d24bdf5d49af7ac478f380cf7ad4ce2be9529b66f659a9531f21636691dd3a2c5545eaf58ac26a6cbb1bc95614cc9eb15ab379a69b92ee11c94db76b47bca925b68a596b58c81bc8556b4ae4875ac48429abcd1ade45d48483266328e5468a442af57cdeb556f311cc6741563b78aa2b5c52c4963a47ebd6863d5af9792d08eb3f28824615270d2ebe5e3357d9a4b18129a4baae5262ab169eae45a6a13ba953716430019bc1f014d14012f7c8e8eff1786000737183260be80e2a5590463e53398162e2a420abdedccda70268b2035b615e1a32d2e22820b076f992d115fc8dab5302292be8a385c1111e4005de4c716a76d2dd3f167789cfd686baeb64b34c58b98298e2c63e2ad3a86c5f20047626c87f4d603fcc536b6ab1e220c2f63758bcdd8b64bba94e92dd74d7131f2966d4a445a6d30dc64caeb35d218aec544254e445a6d319a291924563dc5b6458b132f9dc5c4aacb216e0cc0010765d886937d6ee6aa95f632d26e190dbf4b562b2d267b98d67414d29a8e61adb4d8486ba5c574a924d25a69b1aae9ac8ea4dd4a6a6542542b2d76b1d5e5185edb446f315cbde2c53303a8dc5d14a9106484182304178fed2ac4916b1a1322b6ab0ec24c2c0829f6b5b1ca44eb1844111b8f3a1613471c132f9e8936a66d10404541ac2e0efaf2c5972f5e5c7f1902c28c83bbea1cbd19bdced525d18a1a0831977e6e068417100684cd41b15e8b9580f8c18c8fb4d4525f5bf10727fc072ffe83951f5ab600633858803005b0e12aad4229c00b3e7cb1e938e23047966188bf8ed6867b1c1e8598f0c18bbb0f567cf07190f6f08578f1ec73e1b5385c2deae18b6f2a5af1d270e351bffeb1446d0fa17bae772c992ed15f18aede1e5a041803cc22938200606204106fa5b6696a23c08334537266f5d3a328529c0cc0cc00c2b8def6e2df03c8b752d7fc7a8595e9f512b78e913aa6737529d75aa3474603f0924518eaa5c98b90971ca058f7b6b7fa7526002e2e158018770170710705f04229801c97d631ccb32af2d045ce38496bb1ea3276e3e10b0f3eba6cbd2ce323999869a8adf85178f0df418bda0e63769861071fafb9dcb7328d55dfaa6dbbc45af7a59996b5dff8ba6c6189744b6dbb5cd1650877b0766d2e6f9e9a3f37ab4c23d6358b976efa34dc56bc949265972d5d5aee0e8a23be4fd29a0360c64b5a594b2daf6d0098f000d8dc416d9972d55f6fcd8d36d38cc95bddaf6d001ebc96d67408827b8d1ed52d16e9f54aaa354ad61a2575f8e2b932e1980e4a99a966b26eb15a491424453a977866abd97a633991d65ca3475bd3b16eb1484a94d42d16e95d758b452269758204489029785fa277019524ad36264cc69ae88d6eba44a4d589486b9193588e8e352b4942b22b52ad392928071e2e65b867c1f22efc5caa00a30859e1a2012e5d3c0b9617ed5fc1024611b222668abb38bc64df7ac3515eaf241cbe5c64a8ba76ad4d5327e348856ad7e23086833830e15e6f58e3e00586831577c7d58b83ca7df6fbc7b57fe46fc0c271957643933bec86d6915cc58cad0d666c10e38e2fcc8626077fa7667c6b7deed2fde38e2315b2e1c8c18c1fc8d759115fd9b07270e31ba5062ec01ac48c35d760c5c11cc5e52aded2ba1e17d590038f381a4ce056ffa6b6f11ae96a338ed934b52951b26978df62e627268ed8a66bb6edd81627bc6e11c2eeb1bcc5348dd990d49b4dca5809ac89467957156f8983f448997026497ac3998677ad99a663b92f1ce3fcb9d9ef9a93021473a4fbac8a39973bb88377930d9abe90b95dd6327d50bc38acbae985a61a3827341e7f97d8b564e87178acb3dfe50ce70577e40ec2702a702763cb446d75a6ed8de90b90498c3bb843574c5e9cc909b85333adf522c531e598955f3848afbdbda6e517974c566a6d93c8f273dd74dcbaa4b6bdc9d41bdee2889d8823b6ed267750c6644bad99b65f700765ba8946917dbdd15bb457e368977a34164c0fd35f9c6e2bda528b1d7fa56d411a884797b7a06ca68a3f52bb6fc5fb7178cc4d94b7ea9ab57d8d8a122461a5526ba6c570f5be5e4964b9843194ec24bf16339b5631a6c509f791c6c85a97625ac0389845a6c5368bedaab5bc3c56459a6b6459a58844996829c450442b455fac69cdb76ec199566ba68955d7e8c884e6dd34a46b74a49125f871a421919f52897ebd929034e1204d9b7010e9c364ab18d39454f938d218179409dbb6380c0693b670d3193e0269186712e31cb8e87ee1e01222b1285797a4dc315797be6e6a43ac35bdd9d73fb67dacdf5599ecf8bbeacfd5273a579fbc5e49348c2f90fbaefaae3c579762b72f6e4edc484d7149e2886f396c61a6558f66dcc13c3ae1e068ab5dab2daef53fb696c65812e3eee012175f12e24a44501283efb5bfc7528f15e9c1dcf8ae71acfa52dc579c521677a5d690af2c196d2d182bab21cedabe6db9bbdfb08d0b91dede26c6bd2ed16db3921b71f5beb6361e973e0d8ff4da1bae895193404de60eeee44692c4d58e99d6afb6cd431bab1e478bd3b6a672f790e605ed095a1388f41b8b7469c44795067377508a388a23a65527c0d49b38e20ae460558958b8bb6b2b7aa933d189bb8b2b7710872fcc57a109dcdd43a6f0857035c457332ca8ee993dc0c17adb76e75d2d2dda18aede19154ca341106b6e1c3126a906e88caec0d9486fbddd705833ee656464611cd4d6e6ee2ef37177d734c6037707452bf68ca3c58d193389fd107b61071cf1d674bc4660dd74c4ba66aaf7c74ee0d143010016eea005c07607b52dafdd1787bba9dea67a014082833bac345afdba44f76b3bfb24777ff92a4b081c94d58c43d9b53599ec66b334558db31cb97b961c2e5e3ad28df7575b121633221626b070d9148b15108b0a94dd6ac3c972ad5d3cbec657b8b812e6ca2d6321253b3e3e448a0ca119e99de9d1bb603563a1d6adb72b3b1ccc35b7b10d370317eefe9786335cc0414d713370c1d53b83135b105fcda0a2a20c4e78ed5a199aaebdddec6b4b7196e1054dc32f830a57ad6001663a96a1a55648e7e959d2747fcdf8f6197fbdf8f18659015a1acba0a7e12a66782ebeab2a4c3815291eab7001c53a8e35bc34845579f76d331d4bad6d21adaf6bd792241d7365c28f711b8754c8b82852189531302a3edcfa78a6c457548e4cf9a2decfd15b93afb65d9bc2843b78cb5aedda904e91b9fb1495942426c02432c9c71d142d2577aefddc78f1b792544863f6adb71c25471a5aa4a6fca4b5e95c2fce68850424858cfbae3bb4796b2961745315afc545524877077363ed5a292e7c51439c495ddaf6ceaeb9d66f7cb5ad23458ac189189aec489294c690c3c1aa7fd8b6c5d17df1d117b97d34668bddf81e35ed23215f1db978eb571afd8c8dc6b8d71cb6b9925f47aae9ef9a7b232f172f656c848d7250bd9beafd7ac361ab888cbbfb8515e5a2a39d3acea8bee5d78c6935b75eb498e9b5fddab54b9ade8a543a0a17ee3e5aca44fff1fd9ae90bbe8a0206ac5d7bfff7b598fc8d992c135f4571e20e5e1cbe4bb7c4f8e86bc642af4b5c2fdd976e7d89fec55a6d49511edcda36d55bddf6bfda92a08ce1ee61537d6dff57509cd09a9256d32428a2bb8365ce387cfd838e2494264fc47030b4353cd2d7f447fad596b4330ef72df18dd6b114ab2d4412291e9732c6dd6ac331c96d3bd26b69a3dd014d494838d71996c26a13e241063f311e8e686c1c690c0522ec0086a4370628799286315cbd434e25078777ef6cbadb51541056503e96667fbca816b86fc57dbd61a407f5acd4b6f0d21c849a800d0f854f8cdab53a5d8d7b47a34a1de144bc7509837ba772ef521dcabd3b8d91840e4fe06a510374f072ed782d950fe4e8b0c43d278732c05a62817911a3a5791f19a9c53fbb95397cfa3a86f7b5b1a9c30774b5ed4cbf32e159c64455c445414baacd492f5efa7acd6e65169a478c96ca76798b6d4d475965fa51715c78e80c669c83c304fcf57ab9779f7be7b9fbd7753f3fe00f4f58991e7082123a19a80d4bb4a61b84dcf175efe63ce33ecf30c37d96e13ec970f7318ad0448e0d5e74066b78abd6353681726cb87529a4b358b5794f22b88fe116a8e146e50949a3d4dc9d7a0e0d4fb897b799586dde3678f4701b3c6edcc60e31bc041b3b27b88dd60fdc46ab09b7d13a80db68d1e0365a57dc462bc86db46cdcc60f1db88d1f2d68e1c7bb8e8f116d3705ac1a8fe137ed5ad65ebc387c12e3b10a4d0da899d0d480fa5692bce1905eda8fd45219b2e019fda491870e7720f874f9149a644c94fb0cdc51702b80fb1402de431eb6204793135fd2011d7531dc13fe2e1a2eda5bba1bdcad5418f8e35a068220869fc027107ee04e450e93ca0766dca1c0928a8c66209262e4645f2c8b32a52836d4048684341425b6440aaccad1949815581459f552e670f78d85bbbe653ea2957c13bded23dcebc5b5dde42fb1e6b650289b68bb76847ee3dbfa1c5dc6eb654b22473f51b3b397fe5c860feecea3abfbbf6288f278bfce60e6228bac6bfaf6ae4cbe9057f9bba2e5055aaa68526404e58d8c92fed5e3b368918016217c70ff1e9fe58a96981619dc8590e765483a8a32f4af1e5f6baf1769013124180741f0758f28e476f71c12897c42baf07ed7bf6e38d328f9b93b06230793f17f611bee5d7803eefebbc4399807acc5fd5f9bda70effad8dd2415692c17e65c32e702f98d4b732be3ef2a67af979e12a4a9c6eaa6d5e67d73e2ffaadbfaac99664c73d1d0d0d0d45c1a94dbd98a74db8c7bd80839230f5093d8d2bc84011800010720b034bace204dcdc52f5efa17d6bd64b11814549099c10c4307358ba3b585330c7797c1732c14d7b526d6dc8da70764dd7a89c4295b1393466ccab14d71ad04496e56c3a740be6eb1e57efa7addc2a6da18f77f61da25d2e9e139689e53cb519762230d71290147c27f709f3c10228766e507fce11929ce96e9563076e02ed65dde485a6daf6f4a8e78460d6bd0ef9d5ae6ea524be480ffa6df54af1962cbdd43324e74c3fb52db512c86322165c50d9c3805a106a1cab591191915dc01ee80996ce68ef87c418867f11cfac50fe8c3b331ce38b8c137cb4c1b7061032ebae0628b1a70b1050d66e0f39b362d58806f712d5ae4c472c470008645ff8a65f1a4253a836115f1b579fb04b7e49a704ce5d6590b89ef6d49c9da6a33c860a50a952949485262382a8a02e5090c4e9a30195a2214043bd3020b3bad1f2ba8e0a3074be75340e1041e3b749890a3041c6748b831828d9c33ab1a34706e6c6a6854a9335572b210016f3297c32c55b8bbec93f02c5f64596a56dc5d97599a00c9645976e464b97177fdab962365ca81014992a945093c50850a7c629183e5bb1206165702b06f450aad5c2112a5883468061db87b138d02669191b7d08aeccacce650579146c33c553c92a34bd8c7c7e7a7f5d826f4e02e718ede464b69b9712c6f56cfa20859b1ed8c437ba33727626d296ecfbef2d023f5e22141860c2182c3b9f6fa56567950267bd99291ecd28b711bbb68f8a65d952757269ce9cd16de3aa378cc5192d6baf5b536490a771f47faf58f247571f79a364ab2d203d7257924b7c9db8f4b4324324847b883b9a4fd912348b81c24d991712c69483efe52c6d052a4f03b25470a18f196333c06e548b1e2e091bfd19ab796f2eeee8539503c8f210ca65d9b1383cd9de7ed16fcaf2645444552605572620072f75aa3242d061eee630cd3dd6b8d923a4762a20859f9cfcdea5268938e6a70bf854d2bb46a37760b9bdc45a21879cb4e4aa39c2394bb0e2212eda9653ec92902c2dd48742769b5fdabc88b2215c090c3ffb5847150dd62916af4082929ac4cb9baa4ab759f3288411414b87bfd1ff70983494627270a1272acb6d80b40b16a797029631c141a783950a4e440097aa284fb6c4116fe01e11f02dc1d009e034306f4486b99c7b124400e0c2d5dcb7402c0ddade7106121c2c21de7ba651cf3d3ac4d8742402260109eb08a38e4f9d19112c3cfec26ca9dd8729c2071cf71f2b957b1add864887fd1729a58c969c2e35f596730870914f7e90177ef628e61a203ee73031c5862031af0b984fbd480e72cf1e2b56b8fd42e51ce12558e1010724e48c2dd1f073942399cf4c3bd3b93238472d7f2474422da255a4292225e1c245e1c2484ab454b70b54814ab28c270b508b462bdddece764af6fc6626db24c1ecc52b3b4250fe63485f2a058c39a7333cbd4547779fb3a93692d7b50efb872bb952bf92e1b6a22f1621c868271d20d672652b485829388362ed2759cd99a1d87709509c6494a8a604a845c1c94a34447248a02ea8bb77dd738b3fa56fd5497fadeaab12dfc5c62191ed455b44ce5a69992247d91051670f46bd012c6b6cfcde8acd47f3159beac9679cb1eef2a0fe61ca940ce911cbcc76ffa8fabf756b5a649b76ec199c914b156f1da50572944a214a420b1ee6ba388d5a6e98824d64d6dde94ac52a688485b63285b974bc48ac3e21d7a8dc979ed4094f3d2e2ee7aa4e5b56078bfdcb8e8419d7af1b62566a2b4a74f1babc64bfe55af1dff86f7c6410f62fbb9dcb596a3375de21c125ef24f9f2cff5612bf96b4cdb9c439fd58cc95a9e2b09307c51aabb90cabbe5656695f6dd58573dd629f85cc028de8758ca40ccdf0453027492f6528093624a5c90f057d12d294280fde4a62eaa140e76ba8e1c5fa49947c0d35fc4e0be7ba25a62d586ba63da8f1173db85433cd3543ca5dd883b694c99ebeaeba94e532b55a267bedd2341aae22cdf516f432990c36fcd34d97bc4b3c7abd0bc9cdda90481a25c9ff3f0dfff8ca64b2a1eff12379a34d95c9ee9056916ebd4bfc340cea6d6ff9402ee0ee4f3c07c88f1fff126dcca569357fc6b7d2baa476ed8c8ab7924d4352a0e4fc30a17375e9c70777077375a98597894495cc25e5ea935c5da25476b1ecb5b5e170fa3759972ad3d77146b5159f86895effc8b88a584b6babb3af5d8b5f571bda1bbe38ac63aee2d5b848e7ea135c94ab4fc42522110c17d130ce47392002dc6b57ac4b99deaa9471b44f8aaa889403aa90c363460ecf11d01024a4ba44afad361cbe4bf4c11c0b6888d6ac071a8254fb1fb325605dc24c21dd54a4619ba64eb6ceb6ace2885b4fd6ba747bad5f7a857fd046ca6ab6edd77ba7f5558f94c9833220414a99ec3715cb9cf4b27aa337aca496693cdaf6e3fb38dc22cdca769aaa78895c4a929064cca425ab365d73dd9546c3da5e6a0b75adddca54473b863caf43bbb50d2d09435269b8323d4d6afdd3282f53928444761369cdba54a2619e261cf420cfb54fa9e023dab55fb5c5d19a77f91a4a322a7a70dfca34f499922e2732a4dfd13f6e2dfda08ee2cad5b66b0defdf2539d29d6bf51222b1e25c67b8b84868c9c5214e22c2495aac35ac2452bdd1a2b092487eb2418e095b6c54bf888b2890d3c3003c74e9a125a78798d3234b4e8fa41e2ee4f448b243e624fe1d155adff33b2afcbb54f81789dfa5c2b7dea53f4b1571d8c3841cd6997fedb4e8e7b092004591be58c711e6ee29780eab4b0ecb8abb8335bc942757162b8795c3ddff7358a71c9d2f5ec9ff6b888c1c9d24ba99010c78393a5c7077239ea363c45d0b4dd483d9f4d2f146095f7cccdd41ed9e93c2122980f17fe90cf6e4a040840777d5b9bae492e55aa39746f159031d9dab4bf64625041c18a3af68c2c705393954c83981749d6bff07d3aecde1f1450e0f9dc3237c29112b49dabcf5eba6290e49ad656a13da5832968b85866586050b1616962baed2711588b2c9d1718506f2f9017dc01f9e8bb552ac8ab9ea9ac4338eb4e698e0e3eecec4057eb492b84f0b4c2594e4945081dce843d2ad6f76ef712ca702dc6702dc270254138c3f510411f30042789183e3c6b66da63d9ac4df09765a4bf86bd889bd4bb756a8e15dad5c5d8ae566b1582ed36b67a0d6bae6dab5a824493e97e187c4899543820ff719726e64e1eef89e7c726ef4e01bdf7d2b92ae4b60484c40baa918db557fad480fca644fc337bc75193eecb55df2d5b66dce95090b59c125d170784b7c2fee28ca94d9d74ab36315bf6a3adb21a5d5eedd5583a00e5f5f5b99a87ef15291e211a455531ccd7f1b6bb669925e3dd316ac81f55dae244a3e0def913eb8ad6d5b5b6873bd551b59bbd6dec252c45908578b6457ea0d23c95edb515f9875a1ca83d5e62dde708958b7b63ad723d9158defd3ecd33a86fbd6524bd51787a1bde5ed86c32a8238c4d5bbb30c2d31127abd74ae2ec562e35871a4be92e5ca8fa3753d0fae95af2b93ad5d8cf56bd88321d534d4fb5a1a5652d78cab178ff4ffab266b5d7a308b6c096327bad4b7ea8b8564577866186f2d668cbb440f5e0ae5c53b4584891b17096d8d9dc0362ea29b2ea152b3411827e582c47aa4a718e99cd30e5e97429a93909cc4c41a5e58ce9785bbebb85037dd48b56bf7a54c75ac525e160b63bbd6a612ee73889558f7adb75ad57fcb1c3ad7fed759103de47c9f3b92945aa34747606e94e9fa7ae94d7363ddf466b7add5f156cb8c693bb94b9f665b8fd444a380b97a2b537d9778c36bf4e0a56119eee85aa35b83596434a35ba134d128b22b9f9b699a1bb7ad66c791de5c1a93557c8c6b0ffb9bad354a6eb1bad25bc5edf05c7c5be23d9a7289c4235c546bf4081749d9b8e80c187750e80c69ef52ed5a29677cdc5d26d2ea044976461939918e365d339333a670f7d71950dc41bccda8c28c0e00a105be587322ad52f4928b6d4d48b4f4e85637d12d6b3548ac434255a451c411e323b11289f548ac39575a1d674764f0808c1090318e231502b56ea251a23c58f4221128e2a3faa058bfe6fff1f358bb566bfab85d6b34fc58fc9a71f815b773cbd683dbbaea48f5acd4e358436d6f4fc3af7321add57147d3305dd274b75e674b360d8d14572f2e1a47bb9174d5b46abc0427d5aeb56d5c74a76c5c546f36a97671aeb24b2371c448778a58439bc95c998c70d1a523b9947115d1622a4d43b931d3a1ba29148c933666b2471b175d6c6bde05e103b5d4626ff97ae5489cf7ad319af7b5af214cbbb7d74befa6fa7a8931c6eb0cec428c1b3aa27b310d2084bbc39a6894d72be9afae63d52310be80b576f1ad11d15c5220cc000420f7f09679bf6b86f90111641b8f48b25cb7606d99acf896de6ad66190c0e3800f9650baf64633258b0409f263754efb008c0f7af860849d7194241e9a4b4a7349c3a061c498c4d55bebd2482ed1ccd3be9549b4984aaee3488578706b5f38e1818c07463c68c283170f5a707794af78a082bbdf422b541cb11330b870d92e49d9143076f07a310e5d4cc05802c60e71bb3e7c699a4b7a0b9b30ed12c1682e61bb6988e612760bad08d5e03e69d8e23e73eeb309c7e43ecbed3e7576f7bee8e2c305ee3ebf28a70bc268f2020fe0a020c3ddbb994d827d600303e8c0dd3d19482948b4e0c61920b8fb27e60114381a0104521471f7e98210578cbe0c60014db8fbec610729ece4131224dcbd8332e442991e7ef4300477f74800028b1e1401a68915b83b2a0107186366f13ae30577efbc084210359451840d8ab8fba700590a01362a94b670f799c50c0814580aa065063c38c421ce319a4b0a46016532bc37c5fbb3c83492ecca573de54197956d4a7705913e972b93ac662c045610b4246c1ca910147097e4b5b25a99e0245949eeb2561aa65d0bd24a73bd256147b65dbb75ac9516c33b16ab9516c3b45bc7dd545a1256c30b565b1228a3e1af4d5e08ef97128be1f668cb59b5c9a8d083b96edac556acb51a4d026bce8ee42d635aaea458b596c9b4aeb7d437f16fa675c498fc25cc74ad6d572adfb473dd21c51bdf776971ac96fe3dfa5c8ab7e2d1a51fff0e6bce986897e358d2aa98bbf42fd64aa0ae99ac59267bba8974cd55bf78ad058b8c9060786ab34c26f49684d15cc2409a4bfab66d71196b5dc37a9fe808f6606ce3518362d5a5b67ad3d2951b692e619f310daca225e9cb82643aa6c16bf7e7326502edb54c1edcdadad7f52f2549982561558c404bd2cf7529635c8c46c3e0a6d1f0eb5c7d025a92227dae2e7d0b8fa3d98e7549dd14245ffc21283021a45b370d2f0ea53c58bb366ffd3220da2e652fda91ce1c6caa4f2dd38b55e702abc4a884508a06aa9e059942ce08880000100000631100303824180e484442c180380c95f514800376bc6886509e8ab324c82185943184180402000000800001000068db01d200ad186d63e854cb8a0619ef88cac2f1aca8e5fcd9628ec015c4672204c9769e9153bfb7dae666ccee06c0a004d0e0b4c42f10e02860ee07d52d44429cb622fcc6954874a3bc095a1034ed0f2c203b43202b56bd2b148d2ace3f9d30a506fac261a2b17b5a964b72c37c7ccbbcb67689c1ddb5afbe80389646517dbdd7f85374610176fce4e3bd840272f19b181c9b8f3b6190fe0617836036bb2e8ec02bcb7048afe403b76727c8ee190340a86fadcd807ffeace31fd08c1ef3daaefb50e66d47cb0ff6d1bfcc13c9ac5c9cf00ea19f40114b9a9eb8b752229c3fe1104a8a280bd5fd25d9dce3a30155d01abae39041fd660a797c2ef2448ed21e5fe1be82e27e4677493ee41a2fddca13a19dc65d85b2e35c36930cba0e967f07be858afda57feda7b4efbd3c1fb0726b5cb0d48c63d91ac3a01fb3b61da2e4cd72991b928373b3930f294d41f02849ecabb7e04beb34b9aa64dc89f6f94ff3b6a677a1eb79a0b4516bb15717e3454d07e5d99429b9541321da8ab8ae9f34ec3607d3ef776cff369eaed24ad059f22b883cec9c15b8ec59ba8ffb54666ca83bd0ba24b63f4ee0c7f5cc1b9d078407997599035dee4f2790c5b56a2883beae5d99fa62f511d5ab5de60264f017822fee1ba84c68a0288a793cd0151c345350d07bb049d435ff2330f8747a16a347485fad07ceee48656016bdf641df3e3d9e7dd678a1ac406281442071921e92c707259e013cf6d1bf40dbdc829b4fa0d0eaa60e97f331788339d88fc180759b9bd9a3befa907bfc6e548dfba16a9af5df39c863c4f3ea9d36648aaaf003485bfa70f8ea75eeea3fb3fe38d3b734d8e45cc1e2869299ea459842bccacf758695e886c4d05d9051bfaa06a6578afefaad979da72afebca40c765b0d23ff342cfc7988fa0e2c4d88a2d0eba3253f1dcd3fa4bd910dc8c7f44c838e4241d2e11c9c2af2ea8ca7478c5221f74d1fa8b8e33502dc2f080b89190c718e12206da557cb463b1070de531a094dcd7b2569488dd1978c63df63adf5208aebc71bf5d306b5329be4a5a0a523152295b4674a2fa2910ff25ac05ee70fc99664e277170e9c8431d85920b180e9cb2bfd1bd2221397dae90052e316f5fb9282e23759d74cc5f036fbe3fab98d4e1b5c775225f7e72507f6bba9ffd58e9d6aa81a640249148e79fd2f138e4000f4ed11f3fc1cc0ed19caff55fd53fe5183bc440b52fefc9a3245f3ebe842ca98347f3fb0689e03daee50175b2fdd3c5443658014bb51e38a449dc3f4cbe39a0f4baee06bd20a06e98574c68de0cfb4b6eaf2dbdc14458aa565e07a027b47c552ee81c69781bfabc58021c2acb136b72e5850ffd9a6f8ed81a7edb9fc4964006103c68b94759452b4c742d008dc111e0c1c4c63074e6559bfc54a712e1b5306c66a0f34ea97e3e9891284c4884c0a732536ed0a964c168851855974bd67298614e4c17d43d4c97c89294d1ad7f705ddd42a3ed89878b2d9b49ee7e8714f2e0901e5fb2fb21ff980c6ef173801deea332f975ac36f76bf66a6117ed2e5050c762e2ad60b80566d2600a12caf71126e62b5a31a25af73931952704b2b173bf6fdff59f07d61e415e3b0cc659b399eafd1e0105c2637162b29c13ae477fd84f5574a34ac2df54d85d820a7a2eec075f3ba8ec3f706441eaab6bf019f06dc1b2823c0138d44e784b02865209d1fb34ce09cfdba6e266187ff63d8bc0b6ab21bd2ad20fe5dc0ffd2019b81b8588ed77e6c7b6b1d325de6a035ef0805753909b7452287ba6640c0acfd19a2b5337f06f19870e4960b9e7843d64d1ff944c953f635ac5e21c71ae3dfb8124b763298d500303abd12a1eadc4b019b37e96cc37eef5f82b8788fdc00765a2210f661b5aba2d9041698178c7699744fe7ed5e6f6652365d3b44bf229495a4075cc0cbdbfbc00c73b567c37728adc71e4d12397bdeb72eb72cb07b084385179668f1e5790c23bc21e93a4101763b4e25ae87f9fe85a5e907349580c99e7921761d2726dcc72cac11c976fc4c3a6f6dc8e9dd0771f76d929b46fed2d220c093bedf04d00a6b699907cce98c260a11dec3d3e172887c80823bc805fefbf85c3c6f510fb2a6953593ec3df69c66bd3900d7c9734314a6642cb4c36ac13a90e5dfbfb5c8bc59aff56187c0619596c11d21c28643a4e23c12a4043dc0065fe6e7b993eda4bb855ffcac6b87fef183f3b8b4a4e9af5d18698c02f1522db822d5ceaf9c2876c3744f0a90fe9e481ef4b871e4ad3d42215ab5c18c28fdd250d5ca75420a2ab6012cc50526007dae0a8b93ff9ccac248ec916a29ef0d8e9ade0225328552c1fa384fd069b5c61f12625a46484af7c353e213d391b2dd9157650b362bbc875da8809d2e95c3b23d531d437fe50c7c5ba3ae66015c35765bf65bb25cd26da54c6bba6de413ec49c65ec45cacaf1a27cbb26697d540919350cc7b66deb1570c1f90cbf8a67c20cca171fc577177c8c0eee5adcb80956072a9fccf77eee4b51a50a5880f9490fdc5c26d8aa5af2e8eb4aa5d49e9a730a1f82ce731ce223dd53791ac8fc7e2758abd14513c8d05c799ada12ff2d022b497b124bc154746cdb4cd12768fe20ec6233bd94df63385e37a2671220721dc1f45676ee16219ca4a9ae9fb42a3ba1ec330ff84f89fe0cbeb29b42968e2c1d6c180537c2e71ac7694247d1ea4bc163482b2ec20399f251c67dfd80223158174b9e88f53a8106a3606574bc9b4336237d3b279456ab9404d2690f8b19971b1f1f7165cbc717487af3de0cee3eecced9fe9c9dc4d35f2807629bef111c24030d61d4338119a4995e2511603abcdb082a2ac59cc05a3993ed1692b96bfd67e04bacb82252173ef96ec4ee4a2211d4e05baff800993990afd2d7dbede841f47567ff57638a969eb09091bf81b76bc865dc9c91f3fc15bf1a80ef4ab1f19043ae1a1e61e757b2eeae29bf592140979f13ef16dcb4bc6a46295896c1ab15a97614a879c0f5d464e70859472c83e0e01ed741ef5a74d519ef605048e9e5d1e8fc1cc45ced26215894e88c1598a38352cb2c0846f7282453645e7c4903bfd617b02c139590dc8f7d6461e1ac5e0a9c5c2168ea5e1c0a8c9712043f8605ff6c2020aaaebb14aaf836350b5b5b7afd26a8bfd9633a1c19648204c039b01e71a92ad3a4ea5e08848eee2da85ced6fcd3a57f7c7e489bfc8414a6307efc2b3e3fc68bedd8d5a6e49c9ccb673cfd019072a3877f3c2276b94bdd72a1eab64bc46678f87860135acffd44bc1ce132caa5a31fbf4644e7e6c50f476ef331a7b8dda90d697cf0f6726a03363d8be96976f4b1cb7bf0cc9ee6e03d328118fd16c0ea5cb8ea775c6af9f6fc7c71e658e30aa4e0593f563dcbebaeb134a2ae0ee808961d7167ed94cbcfc6d06336df62cd4155c5f7f0eab28df97cf8df5525f7b7a1b6ddae959b77bbe866d3da04b6d1939400ced0c9e3929a855aa5b1b33762ef5c14191be6abb69a866c54095200329a552e8421cc62b83de2346c88b5c9518721ef82cfabe55bc5adda391ef9fb5a113f4a02b36d76138963a5f8a5063d5104834ce4ae173a41c196135111890f617bf81848249b63caffb6ad30837a8d8c8065c4db8ff7a36b3a9fda3d92c26e52708c351b802fa53ec46027fbcb79ba66d18a80e4fd81f0aa76c16fcecbd04741a677402da0337eaf7876be781b23c387ab11a8d40f97888891022fbfed11a67616d98461046ed44db342d6dd519717bee8d6b6ca4fa7b21a0f06a006d0d6e7962f085703dc3b5c60f612ee2e291b16c45887ae846698e543f1a0c05e466d81731c249782185eb1e412d64d8b4783fee42a052b76faa6ed8216770cd92dfeae78b3198d1a85560107ee502529b6dce85a4bbd3d2edeaaaca2658eda5a3b05749634320aa3cb127a2d93166d0ee315bfb584b49d3534f01cfd9ab6b75aa9cf48faca20f9d4ee209eeb12e09b5d0b1838702946e7806afef9172f00c592d3c675c3bf1f02dffb5d86409acf942f3fdfe5f1a5878b1e7583d6f75191df9a442b5551cedd300024f21cbe6e90acc9fe4633da5731fd1602fd75b74598743347f4c091b2acbaebb775f7d52a23b5cd2a1e8c3d72fea186cfed63a27430d0d3fc40425d73caab084894b0de4d6f8cbf31653493ed1793c9ee6d277678d2de83936a96f2d00b4015517f21d055fcbd0d9f1cc05776c914ed87e402fda946922b671e105c92e84d7163948b5bbd87f2adfc68291ae49fca9b63c5bd8ea5ab0ca452065edc2043fa81738225dcefdd80e64cdd9d19ce2a0824ff2bf5c2e46e49b0bac1ace8d8367e8152b1f9e2b03c41f2b3f32bebc03a2d5595f067492c7124618919f139c99b640a3a2370890f4998ddc12abfc8f95fe38effe0d0ae1f464d2b0eca99e616f1ab80ffb3edd1d0cc10fe994933ae414577460e13ce27f4ee60f0828c7d0e88fb7923ad2e49fb2487fe47e72fcc46a367c04c8c4b3306a3674be0827c405a2ba142af3739a6ad869e793cbec29377a342521f7a08ca57aabfa5c7f99ef3e0cddb4893cf40090296c3c52d12d9655753b5d55eb79a55fe686caa513c5f20e73c7230041efbb9ae83b01b9d80195970f2ac8e819cf4e0b11ca205b0cfd5c183bf03f6add664f1b8f9472149af265c7c0c786f2da63d5b97a4b2253fd5315576bc4f5c544ffc9c27d07bc6cfaea77374cdbc74a0553bba40d4a807769bb4c08fb2f29912fe41d89b9291c1032301c183492a782fe261912e30a20f61dbfa83cede6bb4487071da8a2849bc49ae9c8dd4fa873c721b2092ef9a0349c49e2ee992d2bc7d8376549857ba88f394abe24ff5f22b3dd2056b034072673d98eae908a448ff49df08282df624b0c4780393990dd04acd8199b4018d66004c63424edf01f63a887d57ff9a1f86347f2acfefcfef6720e67d1f4e0bb33f19a92e2509f033edfc5b9094bdc288c1168e3acd056231a39c81cc118b080ca0d2387b799b7e370079c247ebc24efbf13507d221dce6c4e685683f80c9f162867dcd8c2a43f40f06c1833fa7e9ab9d547853b9c2e878db994990a7a3f76376b2ec882f0e65434f3c2c739071d0a80dee6b22707553d9f9e3ef2c4ccbdec484ff5d2d6920cbc29b992262a704bb65e887ac9e9122793143b71a9e9701a5de8c18b0e178224c4fdf0d46a616f2803d79a606f6bce33ac48f8604d0ec97b9c3968a95347a9f400d6d18e1e7b81239f46cb036156ffd7d3bfaff7c87dded0990f05c658c9f54b66e94ec71bd7d67a9fcfa33fdc7b8fc1f05b083879620582543b2f56245065e1c6d049ee5f49e06e0f01653a4f49f360dbbf80c5005fb3a285f55e4b78f1a3b23fc0443fc32b5d3da764cc22c31701d8512626243696d3278eec1bfa44a15554f2ca3ce4673d23c050101173b122584a5f69cb21d424e317e630541f48f57a097ee312393a36898246ae144f624808f8e60498df32c088b8fb48a805f89dea37a8aaaeed2a4e62ce7590c340ed872b5e29d9cdc1b57c7f63892d3026519d4590424e0a487c2518de17d476036b68d758232d7a8d5b9395be3ab572b8f594986e34037088ed410031706645a8f0269226fd5a6e0608432b1207426f855ed0bfed1138fef1993a9defc850e37226943f8708c4dad4560e3b0feed3919f892322f668bea0faf03780e114ed96aae52eb12844f63d119914f17782d2e5960ffec2999bd267274a4c690dbaa0d6527fff1b8028fc94f0719457219027b3c76f609ed8dcadbc4e0a2605b45328a6ea06802104b20707cc54beb0b76309a2ae3e375a9327f7001cc25b604b587b91c323382661f77280317698df7facf762415de9653c209c72f72bbf9a8dfc3b3e6ccac7aac56f681fcbf95150123f4ba0d680e864ee8e02b3ee79077e62caf89ee06f8aee2ae1732ab51b928bc31d90cfb56fa5273f64bacf582cac99723d4158b6fad660d9d84419e26f45b12073bfeb6e28917ff8e00d64befa7e9727d8691d0151171c0280d1211ac98de46995a5055b1c15c8fcef36f53a860709c4eb9c43a08e02a09783f9653c1019d7eae0ce492a0db50513be89af7768f810fd4a23f24d9465758ff0cc2f4922448c8122926695abbfdd73acfa0f8036dbc0549369b80dc2f0117744da9c829e88e4a50d2a458e3db8c283e34b26094127b1dc0378ecdc1fa9130d6fc288ac1a0d5b496a654e5c960e670934eb07990e14372fda52f88173a22fa98a7a2e65122887f78145705f8f65fd3f8c52f67d2dbe036fbb6b152a938fda386ca47f6946222285a0df30656508f9d7ac4886f34f5bb675c745a2c9167c35ae971aff79da29f387a7bc6677c8814c4690a8c3bec478448219ed2a286704fe83012941a5e0a7af1e6e1ad1d4f6fd0b5067efc35bc6b734664f30a8e8cfbf23e0c8fffc59c3990e49e01aafc7e59b35945a72db0f66b4def3396cdfd8e9588a27bec6194b75f62173a341c3d41ded78ca2c40d14cf7270b5c4e234f94469691e49336ffa41507493e291d64f6a43659292d5e8408eba773dee8e6c321cdc3fbdbdb45fc7842723b2ee9f59b4d8fb25d30d685cb8ad603d4cd2265eb42e7aac082746bd433ac0f627af622afb3e0ac032f432b9c83003c87cae19a0306aca97b353f5e141005113ae75279109c3872ee504394c9226840c99b5120af8f3629b7ac0bee56fc720d5447cadf6ff3c1c71f02366a5f378e3d698d56729e3f9caf57fadf64b3bcec50c95602991c1f2d077f802090f3df76e06a7451685e6ba1896785a39f5b27a965a25cb64840a80aed2c505169edf5e8287abe83588a51f971e393c81f9df26c206b2c4448e0311bf0c751d86bf7ebec40416d3d019a4157fd36b4ec4016195653c5aecb0d154ccf532464b82e262282c53bf15785e20834f3f24a6166b4e0aef28075e49b7ba999abfc94438f48fde7daa97d0d893e7abd126e85ccb56ca7ff9f0d62731c67b3d79660f79a021f1e3edb38f84d215bcdcebcfd191bd639f0d446863aea51661af9e81fec22e271eda08d0695b49dc63ef787c95f5f8629887fbc2afd4a636aeabc78ef9f768cb3c45f27b98c11a1441f8c1f750878228ac3753225327505ecf4e6ef31c660f6bcbde30e8e671659235e19a52d778f7056b0a1064d70a1c1d9b815da5a4a276aeee37ab931b47864f25bda145e5e265f9151112fc05ce5584dca68d5a74657d5667f077401140144dcdc954c88e828aa0505b4a86e0b349254ad86810c3bd7cd74a04425ca4cfc63384bf4bc049423a5b650a3fd595aa9c208723fd8422a812b9b7052e1ba47dad6190df384b9a3d9046b7ba1c90df6b4568a44cf35782b61c37cc851226ba8d0efa47dfb4b73d1c088aef46550883b1873a462d79dd3380dba1891d783274048627abb64761b1a5f37678b196c8b2071f426fa2c3d1069afa214692fe0f497b2457c7eb47a28abd5a79a198450ef09832c0a740363134c85e6a6f713a8b360eedf05a59a7d4de9cf41e49b16c003a98925c382d309bb109f85445d11e056b0cc4361d9608da979b98511578a7750c4fe6cb293839c11d5d8c685f4987e823f0888e67de819000d62e63ab5e178695d1706ae3f2a3f1a75ca3863edf236f9cf026673510462a81dd0e8f61e1ff32dc32e8767e12e47ecd10b74d4f10c0cb3ddce0c0ff963e1e27db53dbc927e1c10203afd8093cf2823ef05021c3866f4dcd76457dfb57c846b59ee558c7f5807097b292731f670d2278e294999a1b10818dc10a05d481e4371ecda1ca00d9c706674da5e5b34530f00ec3c246e465c05374bcb83bd6cbe5047b36c0d5618e39f2f639d6e86b57ab11da058cfcb5ebba8fe2c2cfa451415e3d20c54cbc510d7ce1bc0029664fa096a9ea19f8440603673366753d03c2e1b5cf9a040def19c9cf1b98daf4bacfef98a2278aad14c2030c9349917741595eacb7d721bf30358ea0ffc0436ce6140d3d2c5837e3aff35ec88734af8dd2e2f2073a218624c7d4f1eee0677c97099fa94d8eb935c1419c28ba8147c2aa4594b8b966ff7fb1b843ca5aa93504aa91713ef44ad261377c65a19ee74e22fadee11a5a6c41e55380f35f229b8cc3246891b884683ddd88878c00702bdb7c0f0a53d0d60bdc3269d8acc2138dcb6c4631a70b42b48a9a1ec1e042441869733d01d2f1191fc7a38b94e44c90345b35d0df365a00005b7c947984815502eb754746e8c4f6b2ddd9cab47b5f0c9a48c24adcf7aa2a8ea76596f7997e1f87992170a0800f91010f5d2ee5c9f10c51f1b58a81a4a8114de6e5688f510cdc5cdfbb9d4269858ed754bec559013e4582ebd0c1ef94421854d634d1dcaf527fc880eaae99ad0ff794a5cb0a161a6abb9e01003f1f2a26880f0c9dcb485596dbe4040e4337e65c0643c961887bcc7936e1c6551b055d66066e5c63b872466be8950566d35fa70cb283be1c8ae38357943ac77e9689735962bab7a89d786f51a69d33107d0f60c3ea77aef777d2f7452fd9acbd7221ca5858aaef301fa1ca10749f155c6ce534aca7000460db145cace30fcb27108080d600a7ae13aef67bc020880bf32e7a43c40491404c09380b4395ac32fff800850ce604874803b63bf7907fed997d3de893eb0ba423b43c23ba59cbd237cfd8bfd6b135f21cb8e26eaf019c7ade6603f23998dbf3a82af42b1394d45727eb7834bb6c7fbac86c75ad3fe0e1fafeb6927830d33ae61fc192da8aa801e54bb7e778d26f931373e81ae55119a9b7756a3a8b1dd1055f58f829aa75b9b91c7af0dbcd8239e8dd0ed3cf846edce77195af83096867d651899f0fdd43f940ed4f0c3fc28e212515893e8c0ed51384a074b617fdc754747674883b0a1372b36b12fcb8a71c602a35b223d14db4abd7e2cb85909e2e0ecb5719a20ad3467ba5d049452e77189230684f0d37a2a23c5d62d00fc1155d3ce8f2cb0e73974faa0e23a6f90519d82b229c69a7153b333a7281f869100e25318fd6d377f63f5c0e5fdab618947f202f4318e35f3fa453fb01d45bdad30eb2f896eb2c8bb0b782c95760460301cf652ac2b93411970d532bdfb92a741413f6e22991c343c2c62145dca609d3322434f409a8eb9ad8674f02e450d9b9fb04ded2025d29cd5a35e3833e159c525245a84f907210acbbe2678711501ec73201335f012b7822a161f726abc0a246c53e96eaff2cbca868ea16c10b80029227b95e0df2d74b33a6e5b17651c9ca4671ad564b89a873b659e994a364f883fafff449cbad085737ae9da7bb3efd9e7ec34fa70c1f813e3ce0779c75f39f65dd0b8cbecef2c8e0242769a35fb32ad514917f121ef831b89e006121cb943f1f774daca36886d4340471671c4a4e2acd43e5fe5f94578935012a67559c0eaa9f9c8cdec48e9604d0f9a5cea4fa0b9bbd4e4d12c04a91b98adcb22aa526efaa86e5a3ba0c45d10e666d2a5e3682ab19a8de4ee3e23d8265f6851dfc881a5c3e55f86832aeec4caed410f3201002432a5ea7dcda392aa1f8350c312dab496444a51339fc06f65c449f9312c0f48381b997258f2cea29ff238197cdd07b8c0c734b67797fa4d2e0201b3895ed27028b3e4a3a52493d40572d8030e0b3f1c2071a80b5bedea58d093df0699635dd40c923c58ba5ef5e7f5e254cf7d20d1a3b39f5b9df15f5bb0391ebd46f0845a6a15047895baaea597e7efb967a5cdccbdb2d461af78bd4ef56d2af1e4eb172bd2d200f8b16c338ba7905cd1fe4f5d7176b4e7c06b5a75dca371031a04fb18c74663430ad6474181f041155d4e200e25ac9e256a180005f64e5c6236a92a9e614f80c8e2df12ab719022322de6a89448984965dedf23e22a06751c7dd04b3f139fa21ff9883744cbbc4aa7aa0ef15930ff94bdf8c69c17a19767db097d36214b39448a86e26f79db42ad0dcbaee4980205176b0ee9a170fa0daeb03f346fb6b3c3a0eb2a11f33921b33a372e55f0cf1b694b28306b023ab3bb26e91e7112f1cd6e4440fd40d1691746b12289fb00f3192428cbca0cdbb98b360172a69c6403692fe21b6774323544ce7ed82ca75b1e23c8dd3e2866825b4e5ca203a8c58d92ebba66fe4b8e428fafba336e0b2bcaf781315de796edaa6f28fa60af4ac1284586df2d841ca38f92c26ee515dbbdac428108226b4e4efda985610b052bcda8058a23fc584a965bea5db0850f9a08e6a893e82d953f7ec63feeaee5683ad359e1e25cec9a5d38731d28422dc3471744231097034450a88ef0ae41b37ed9e6f90e18443e50797cc21c1c9eb90c555d22b319ff3434147e99242fa10a86431857c43b406b4358ba548d1f7cf7b7d47154cac4f00b41a20e4d9f7b50a645dee975700ba9f635be7f5fdf006ec5d2e09c74e094e439e92c14e6ddb7ce7b78cefcd56fcf2d9ea3f97035211f31365c288c3972b2475be25727e4a929b14ef61ca67221b68d3513973be520948b3ddfabeb3c672230734c088636f38ee9660da6d24494a50d2ef317a66f233eb70086ba153711cc47d5b86b1ab99786ae1b47317b5794d4be6e7b141634b99e482abf3a46b697b6402a358e11073e5fc6da7ecee63149f7710fee352c658ab262d5aff7d20c9cf28496c59925f95fe0c265f6198e7dac64a6df7a3920972e1c1f5bf49e849e83fc33bb7c925d97b4cf4f877fc8b7d170eb560463c1cdd5563f9fe0e896a6b6ed4c5c611b21b2ad6774340b321705646cb94c94b9e0498fa68382230a4294296835c078fb8c708edbb87d1d758c4f8f58d2392a2d581c100c73101894dc2bdb9bd9a693b3c5337d0c404d858519fbc794281616149a0b8a7e920a5191ef471cd8ebc2f1a5eb7e9c3d0987a72841a2aa7d51a000bdedc0730707ca75fc60574f51c7071cc5d661bce4c2edfbfc1ec95817f6caf1a64f28a809098182dcee1d07214d176e112bb6b41b5d05e67b10d060b4152774de713d96bb78136f04fc9a5ac74502bef5aaad9011b39e40c7950f4dcdd7b249797c5002e7ca483f28d1a39c0ea7d08a7c571ba7d29469d6c003e58ea127900151ba8709f06e4e09fb8756d5382aa4bde25fe88bf544404eee0713ea21edd670da6be5fc7bace8b29cfbeacaf9ab5fe200b5b908ce53b5bf43cc237158257b8c193155604a2ebf94ff7c78f7c8741aefe41876e1976fd548e8bb3de8ea0c175d50aa7e4cc209a77601129e67a209cb81a4fdeb3ef3a7e7956fef26e8e8d0822bd0bbfcd8a394d7d2ddcb0659a28f15853a276c5e358319a69a4dcaf301b2c8f27fe188ba68793b7acbbf541b230ef0c1cba735fae9b33ce8736ea4f5a81e4101835dc0c359e9bde2a090b159e9708c5f5d931c80e7e3b9ff6eb6b4c13881141e82cd35c83eb8555bf5d16abeb77fc910ff01489d262c5e5f68bb80ef6900daa1ca817103cbbff4055cb8464884da7101b3f571700f550809ca5122b98c437a8afe972af8c0a837592d43074297b89554f68d2981aca87a1f9641c57aa82dde7719bb749d6c927bbff39220a42f41b7b02dad4f54fc681e444320a3021b35f7a7e4153d127786aaa1450262b2010a4662d2fae3dd0fe3a9bca314383e2f972b387bcba0f888921b5b272b081fd6a104cd55d418287871d2c96001a77f1c9dda0f50c50fe88ac5616eb136ff677b6095b069aaec372e2b9d7740c210452a18e00479e56c5cba69cdd91bdfec12215fbbeb897edffbf2aabe3f584748b4d15c7e6b3c2e756862913474d1475a6e303936aa42a3cef04f0aa08220770c22c161f7b86a8e6cad07b5ae73719d196baa3741ec6e887121365ea5b841a7347b22ef7e9dbdd24c8fea180ef0bcfe06afb13417dd742810848a4b65e38e96518a866cb0e915801e887c11b1a95738979eb0635c4dffb0d6bd13a798dd575b530710c2a269950464f04bce87e18486efc38df89eacd991928b11da6b7246895d1c397405ddba891b031bff11fa3212a40b634509c0c213c2bb94f68f96ca56bf6eefdfae5e4f5654eca5a5552cb04ac7265a6aa6f780b338c43a1e4b0400b5303c3ab634ec43798d51b5d4b512222b5340af754d3f023b3807e26a4a06f860a72d6a775aa0e46c2bf965e2d4ba82863f47f83463f9f309db562e1362dd3997706bb61efa095e538465725d0009311765259f5f7470ba3dcd84d0a1ddfb25e28811a0bfd9299101c26a46cd098352536c69df3c491d8073c9b73e7e019b717098b261a392cbc83dd8ebb471961626d0e89f4205d5f6569f752ce08fad34c4ea725b428edc596470203daa00ddb010a49a71354dbb8f8ea080a0a921db85b71de0bd29ea1a09de38ccb92869de455c51b3f7b6f7fe50a922ac74d138db1a4c8934e50d662de69e1b3193ef91fa83aad131b5524ddbdc2b0bfe05065c808d1438b9b767467d2dc44335d8f06154060f3d622c3dbd5adda5cdd6f26200de7cd4e83c8c239ac6ab63bc281d59e2d039b2102582ab54a34415dc17f9f51c57292324abf0e06e935aff01bf95fbf848dfb170b17d95bbc48b805fe3739a77d0b3c9e64eab5f3fdb15f085f43a57da77865004ad29c3bcd0c65057984a86c4d3c7aa0de9818e393e06531c4d009ebf65c4426c61fd8f9e8e3b77a85215d8555ab902c65a45f0b625d0ff50bc623a71eb75c1cfd1970feff37f630fd825b0e7595c58d570f6366beeee0d3242ae814eff268ccaf86a5646d1ed73d5a48a4e984d2524279aec52d4b0e410723372361de00e09c8698d77482ecdce165ce11c4b0af43fd776f28a7156be98e72836b963916adc6ffa7ba0a3b3d4bd449ce0e5d9b1a4bb1941e7e4ce0f99c4e2aa4cbd2cc9e0136d7929783e939587e9cb7ded8a685030148fd231d595c960e6970a3359af32d11f00dc17180fabf2f54326588f009ddf9413ffe201c34b2cb679e0e695b95e35744ecad9826b0f24a069d96326617f6dc1a6d7570bd5b2ad3189f3af8520577bb7132b32ee21a70c53590c642d27da585105389ad72e9d33e517cfd0465d89282d733d962640a8af692b1a2a6b0327f08b48049e9c332d04dedf84785a4f030d83d0fb09233e12691b823eb5b8b6e4bb95a2c35e9c13a1598ba87315d88680263bfc0f0ef17b70a922773e466f27be49b4627bd7151b85540be0fe68b1cefb5c79aeafcef45fa217939c52d26db09c1c3d45afec874974e03c517df4f3e38579611912724720247c204feaf835a7bc5e583217c093e291c2ede7d68af67c01335ed93261d9ae91f68ee0a4d64031a3ba26a279d0c6d723fddfef51ab8ab94eb208b065970cc9d87fd82f2b9f51427f3eca4e91ac68ab0732944e206cfe59895a779c071c44801c7c90e579aac711056033da25007b4fdb44f0c9fd9c8b8c4d01c1a42d092c0b6cf6ecd51950a3408210510013b6aaa8fb4b4d9d384e89831c7f1ab8f50dd6565b5069850ec406d5ff2bd2fff3682971a08a4748d37da83c6bf461c71a6f2ed2022111990ca43def168265fe7400bb4b57cd34c8670f5a20fc06a4816d9e32d06dcc5970bb9a4046c09f25c39bf29c56e17404c2274fef3e445f5e68fadfc0f8b94f897fddbb4506ebdba43b4d53c9ab86a361fa8eb4d234a238fa091fe3e9d13fe77466b4a5605f72e7e5f7f5f1e4903cc74d7eea8852a3cfb40278c686bbe1dacb368ebc9dcfff89a3cb41b72bedbb11e9ed680ea19e919b93d2bfd42e68bbce6848f01739aa0362219d0add5019dff7f8d36f53368fb02d34e6e4515e46eecef041803a2a171c9936a96976b11cdfa8b71a0c2ee7f80bdc5205f3b19e103054fe0acb46f1218ff26a152bbc16846cae9ba26068e9d5e0164fc0eb54474d4f94442662ae301e25545102ae3212e5e0ef89c2fc70c043e5cdb19dfb48179890baaccc3134999c4188e9709d2360cace41fdfb705b605318dfca9524d03530c9a99e2b0e911802fb475f313ad7ea8289137ef55c846374852cc22766e7429f0c54978724c2faa2ec6871aac0eb2a1fc7a7aec7d8263914aa5f8923bc270b02605b36ed6d57e5051407872c62ef357756a70feb956958d29973f68060c48ee44b93b0306ffd3e1625e9c8b264ab5f1b82068696bbfed997dc7e3d3c50b8e6f3e9d7d41375b1157b71d6902b697c649485bc7cedbd8bba0aa09b1b3a23d6fe60d074d315d9c120e923bc27a64ca355b25cb1c6c3a18b59c623f8a5e0a4159ae25844887409c2de8464fdb1dc0cb32132d27781715a17467206517d59c6fad5da3c63bfc6ab6bea24f045957c68fb5092685f82ec8ea899987487ee311e28b8dcc8779c982d401ee7b086bc75ba35e2505b74a0186f146e1e0c2f62a5eb40c218d925077e1fe444aa14aac974b67bed220b7021168809167ddd8afc99918dd69a851d4f6c60089bcefe81f94123985b20c1019dc45519a5686af23b48c1512ac86e7204b5d339d1529daf83b5af41aa34f04bb93af4ce777639b0abc621c85255daf88703d415a4853a15db35d1a620c1d97a26f0f918b60cfb951bb4be13175031909761819559217572504187ea8d7a4649f0a2bf8ba179e5c557078943f1c8fda99917ec7b5d4444cc0d5db9c124af4ed6d7f880fb7536e31e541a3a46019d2fb51ee9b38abce3a5a5c3f18a2d144ebe2d3cf2e98cd6e0bcb24dc268c9f0fc10a9c1dd3d142b121578641901f150aea629922193207da4982644242f02f78fb68a85b33bbd42357cee403e4532ae45e23cfe603847c91210a81494cf11879367d053dafd1a4ca99d7b82b68af0baa872d431aff31366880ffa0972064b1613cd9b4ea9680adde842a4dfa4d6dd18af8e58c205ae4eae5310698d32b0a8f94c5123f82e95a599bb8703cdb816929797e78b4607acff1ef1c0a30ef9dc0b9da93a90084ad057080c4ef220427bf45c55d3d5de41db9957d6899967b440a6f30a55418c358550c7fb4440b45979aac71f494756ecc861c54ded51141c2528234c0a058da89f0716470eb35e59d4df31c3db344abb918ba2ea1b4235873bb44e55472c16e6535e9eaa6fb27469c70083ee33101db3c4115cf39cd1cfdf75112000e5d30c81e777542138b524cb08a7516bd9ff84f46971203103a160dafbae584eab462747c199286000dc9445a32870700050e49273acc1137abf16e94cb8187620961335fc68fcfe140d8022b96e4f607810404465eeed42780fa35a5e697d8861e1d6fe0d43985d26add7839b16dba65557586c004aa5710b4629ec66e6b2680c7dd88cf5fe512d38f790bdb05010e40bfe99371ee73b42f32f978efdcdd05a6c40a4f2de23eb2ffe65d97d45dc65d535849102e63c7b6a0c9ffb6caf608a5d0af161cd676327cdf4fd999eb70bd1fd675c62d111590919f5954bfbbf164489916c6c6713838908716ce2066c71cef8cb0a7ae30b964263317eec96ad69e7ee6c4c99ac16226a6c2e2bdacfac6b36e82f2a37c66c26d9ecd8603e191897c4a2dfec3016fe7f6b0fcfc22364fb07fc37b6853fd3105c97c3ff8914c5d10cb6798db722bb7a802e9d89b6d88fad789e79d74bedf594b6a084101cb11f4ee52749a138e2eed2439ef8a1c153d821e260a22ebfe11bad783fe3518a19420d2c11d1c65ebec745abef2ee1ca83239c91487b36dd3467148773ec516409957de972db464395c915ed7613d259e3e924895871f16268d9f5d39bbcd7ae3402dd8f41fd4c9227c2b2ffe19dd4104f2e8aa979ad89fec8d4b430c5385617c29dfbc9b5868e783863ae4dc2f5a64842a7edfee48ead2ad955d4034aebc0b338920275a13155e15563dfcd3a461d211dadf96ed1737d3f156111d772741547ed517195670cd3ccb0b619cfeaa92c9558644dff9aacc8caa75d1c9c003b1264742967f82c1592fb69ca53798eaa5fd5bbb8a4e49ab1a42471a75756b68de2bc82dc250749bdb0efa47ea934ffbe388757b19b37524011a90f74c575f05110257f35ba6b41f3bce93da11c4c3d44de880b0372fb4dd3227d436392ae97e6466f07d53a6db0110f01e72c21318092267b7c6ff72d237758faccc5012919f627d4f24f6db52ccc4a48870854498c7c112f147d43aa0f5ac03078bfe51fd2009ed392c1bf001359ffaa891c57fa32bc55bd59e666f5eb9115bd171972c397511dcef51cd9e561a78edb870b375d2ada5b0fe2bec2f48232f3e019fc8f2875d994846edb15f9abc06583b8165a79c0e60a34dbb02d1b6c75ff0610d2fc05ee922ef1c70eb4012c34080e56637f2cf11eeefdce229f4dbb3ac18c26a65c90fe2a8be655d4e40f0027f52ace629282651e43fd72f8a175f4ed13481d29f4e991c1e7207bc7050946e622afc85d1c8c92c97f7199a746392e4b139be78eb4b6617d3b89698e9af9baa8fd4d4f5fc2f2b9aa23df04ba6a1f7c5afb229d6df1340b2837a30f3613546647f7a6e05a2fc22c42a2f6b75404950723f7e40bf0b02e832e99515bdf8d7c4147d8ba5a3af5ffdb4d619a40eafc435365d37ccccb4eec2dbd6441d5b58b44d001312e35ffb4bf226b50a96c7c5b489e6cb884e2b34065bfc91e1fb7d88d922df99fcc30586d42dd55367fc370f4326604715b5c55713cc81abb59b668f45314737d042f4f7efe5b192e7563ccff43dcb7a0eb1b295d1fa39856a0b6a9f3571ed0aba943d323f8d93b17faceaff2f9780246bfa7e5ef6e4517879c0d674e26296c661ffb2e3cfd89e3ecdd6dbe3be8638eabe717735c8d3341cb27857635966177693d742655a38ee5b72a91063354d0f122bf8f31aaff201d17562931e13587ff22687d845314751c1e0d0d05f5cafc12422807e7cef1d3aad85a93617f319e6bcfa2176a34629a6044a9348aaf39041fb3b52197924972a9a623cbfabe0de33ba13e95a8ec07bef8a4bd56f694d837e6738a8ccf24dcf672a518570ed303adc85f169caab64ee4c64f2be647877e74b174e9cfabd87a23ebd54ee092c0b3986020a069c9abae86e44606e5cc2ac96524c87bd209ee3fbab0ab6207d739b81020bf49127c5ea8ace217beab674141a17cf5ae554fe17090cdaf13671573cfd00c9fbe2c923e1a63b5951b9e53bef615fe3352137a52b837ca52af2feb7e1cf8b1a0537ab7091a6679eedaa7310ed8ee0855ba30635734ec4fb0c32a50c75f136d6349b0b256895047d486f9110dbdd1b4ac5654debf5d7087aa34b2185be4f938fa94127fbece38724f04e2a2ce89fad5a31f7d9c6d29736e9772a3f4a8e4ea6e2ac863ca4062ee86a3663d2f6f121856e28ff53562a43d5cf80d70ccd1ee7b2f15ad6e6d72bda07ea325f0ba7836d725c41fbae202308458b7ad477458eb91114fad31930eacdbdd8f5489b61ce8a70981d53d83724a57c642314b10a4265a82eb9c37beb57cc2a7cdb43eb3e758dbbfe45bd7ebbd81deefb25e8c5e609642cc21a114050fd71760f7d05c751ac10ab281d3d9e221c374e03b1a1393313ea178f7e1db063923c484d2598c5862ab7ca07a2e646340d852acf59e6782b74aabe10484724e904268b65e5513e42707d06c6fae6b8990621eebe40c2a92167fa7f47d5e09766338cd5c30983e3eb5b2db9769f0c2e40451708f98bc65f6068c241846cc3834aceee1fc5600651eedbef333c2e075803af636cbc41f908bd933dea902e1ede3ddfb53874db22e05ec97942219e95afc936ef1c8f466aaa00b17a9a1f9e6e9e1d5c58d60676b59ed8bbf91a2e70dcf91c882f76e5244cce8787f9a61ece62dc8026f018dd34a0cfd6b9bb499bf82a21ab09c50051bdffa9a839ef106bc91e974f8229cc948aadaf5cf51d137925deaa13bcac6e0fea4f6be1f502746633fd65f46b2dc5028c7044c2e6322301ded15363cb1ef7b841ff705d62d7b4e3297bc895eb4f709e98cefa9b2608b23544cba6248d1c8582e3ef398326d90b1603a5000a38784640f786066fa9e496db8ddd176e48609bdf6dfd682352679fdd4906f563effb9cc1d180301034aa500586d249857c1197ed4a45da53ae3ae9f278e283d3d89728b13d14419a900c40d3f1fca03e659a8271ddad97f3761197e6b610d1e06278846b08267378fe7a38569f0a8fdfc4cdcf460e6640252ef57f38b12335369fb0a1fdb53920151c2cd37f1d2afc9f66f80ee97c1eba0bef2f21e355640fca911090ae0e245fa59c1d4c9b7686d009e4d3e21d675b8ceb8414e61fbc9898c44b191ba7070c671c82af43b4b121188b3dc7f4fc9532e325ce86098f8e1dfc080840255ac8a50822461e55c621b5760468ec460f2f670dcb82a6f72153635592e99dff657bf68e0ad93296ee84d6001953f91a24ada9a6a03c8dbfbc444605d4ad240c19da6204a6d3bd9e8df1fbdef26f91c83e22a09e8cea8cb740dbfc5d146bd17ed70c447d1904eebe0236b78d5590c1b1f75811ada6839fe7f0bf082c7c2450a36b060e2a254b7da7037e5dd32495e2fea16250dec065c00ff7b0bfb1d123d2df918bcd53b1ae4b785bf132da336eddc28f4204d03840bf53b4542c547c4d1628b2f3f700c308ed824a08fa6bf53d3dcb05b48a4d9934f52081a58a359fb092c70fc451b446670c0c0387da6df18c99626872b779d9b298f5e997a5d115fcce29f8e427d1b705a48819e7e04eee84fd7295f04880dd79fecb6ba56baca01064513cf9097160e85c894dc6df3d936c6c319098c580efc8d5760179724899d38b2d9ce3c703e2204b1803dd3dd1f6e3c0ced874dc056c807adf8607c052226a18273464179cb83e48934ae39862a87c0881938e08ff8d8548d85aa42749cd0f0256713f4f172777292d8e32563f2b81ca88c8c76c565b0ed9e36d54a9efcff93d9042b6ddf4589cbe5ea03522da11105a83426d82dc4d1d2c224c2429f30f765c44bfbfa050fe277fb683bb2c375814f57717f11291ec6fbf5b80bc6286137162f53c509b13e1613fb2dc2180d4540a8c6f344a913abcd7e79400e18fca70503b66867dfcdfa690c2170a21bcc79a0247c41c11798371fce431f11b7b34c2dd9c1fde89d4e2e9d4c175c0dff58b57cb03966c5d549e60e807b1834e52bcc1147622e62136b6391f023aa458e83ccbdedddd2778c62fdb14fb0089bb51e27ba9eac4ddf074c84271f02bb82e27d4af870aa0e70f0d2791128eb872cb2ccf43d8bfa24c620c395c95c2c2f8bf72827d34c58b8d20e97e1e0d7c74d4170bc45e474fe02e7c813e71bf36ae4337ef64da4e2a818f87bac14a5f1eca219a7e9721bd2e00e7c01b51cb3b3e8c65a3cf6185a1acd57d09bc988b56363b1926045557671c300bc1e9484c288a5fb1c042aa501ef0f44e75e8657f4c9ced3dfc2916838ac1c411d443767225d615aa1129287e4e5ed88c4b9dcb058cec6a826c937850fe32878762dd95685f613eef123cc03cc27a1e661e1898c14d4f5fd550ae3a1342acc8c0b3a2c9e03b34428fa89e1238c30731137fdcc04fa2cbf055791f7c221f587c71d2fc8c150107f846ea51510e9e542c05742bdcec7a1a5d1ffce578477ac58ba9a557da93e6f1f3ac2dc99bb80cae89fb2945be85fa194d3474996c449d427430fd4895cd625d5b513045608310199365b833f46b831ca20cea2584378e576f34421b30839cd51e8948ea6549530980c85d4b08f9c09fdbc74214b04043472256f27f20641ad65d81dd490e19b83ffc13fe491a01ecf10d32b04af5ee1c6bb34f15d562689e91896adfd5289d7687f35f28d03000cccc02103b8b19a914c82927f7a4440dd5cfe02e374c669d28b42c073fd92cc3353fc74afbc3d4aa5ef17edac3c34455506eb46f7cdde3ab6659c16100b632d6d2843ca06c8e1c8352196c6522f2b5c5d1ec4088c801b1b65cc7eb07e0db584581000e5a0e4c082989224044325786fa06eaa44ca65abc6c53806fbcf7cc1d03e8b98c56d95d18a9d949b670ecaf459e22b4b5d308ab9155e0196009d8aaa45d055b9fd89b022001f92e49c902909a22b01d9aa15f2942c59dbd3dda91d89d60847b68b16655d2650ca4958ca8b8da92022dd2df9a6c46ae9bce1925671ebb4b7154e3b984e8bbb766a9c42bdd3a6aa8c69155741260319e23dd59b68984d09e097342db1a486f6228812bdb2bf16dcb13e6c9d9d10ce66d7dfd636fa26025786855749c98345a2aba36f0a5323ad6fe4a76d51abf18601f89999990f5bad1394b0c07c1566ae8aa4e27aff28a85b02f54c363ec748e378295446cd4acf7edee9070e9631573f0aeb815860b909c02b6bd2f1d67b6ad50bec70f40a3b5d51f48bc9e2e75fb47b666900f5d310715694d1b76393542c67a1fdfb87776f2b35403c2e06cfe4027b6630ba0c9dda63283d5645d114dff874bb007c66c7feef60a7e20ef160d85d4e69e29469d60a362f10bc9c5f3d1326233f041191406c945705535a3075cef507bd1ebb51a614cf2a2f6e970b97db81aff1f6f0bc56e80e06d619e86cbc66fc9d82437315b8cfac14fee8a35382fb0905a2248dfa447ec8aba7e739d3fbbc6c5f8c4e40dfa037637d15ec943d393ca80b711d8352560f3d7e071fc5e9b313195efb83e493a1959d2f934454ec097130c183d0a38a70caf41d8eb4b356f297736c1c79b68eeb9a3debec3b8f223300165f36952dd61774c0cd98ee7d5acf149c46f7aefcad769b7fcb26b89e244c400297277af88ab66468be068ba13495f28ea0c70a9c158b6adbd004393ea242ace658ccc5d3ad64fc6cb657dc11c274268531b48b57971d19fa4bd7fb6f99071549350848e826b64c994feb1e82042630c394a0bb203b3c0d3320f23c857d2daff06644611ae7ced5fe1a5a32ef2635961fa532a4ac1b077da198b71909cb4f80a9d2c3a8348d51f1d06f0219619d5771ab62e24aa2120a970d748009e9309c587fee0a93d624fd8a8ce4fb402a27222d5ed9dfbd40d2b00743a8a0af69fbefac691a64f0472d7fe9f92c23e7c304c242c6dd8606a369efb80eda60c60195c61273f89e5d5088dc63f49e0c0afd25b6183ec31f36cd6892d6dbfe3045d5fac725f346721dddc58aa35e1b5107abc646d1c30fc38960c1b679f3d94b0873b247cb8394078d2da506bdfcdf0ff62db7ecb58fcc08a3b05f71e427f80033784a4264853503cb7fef989d363e7fdbc4d20870074c69ab2e5e607554e815fcdcb49dd5612ea5da2518810bb0b6e502e6df42610d2366e5a80cbe6c9d5676a73df8950d3a10485234abf51d90c05b5a1464f46d4c40c533c8989e29a8081030a0a5b95fac6c96cbd249c19c1465f06cf9e31c4f4423b121b55cf5248a8a7a5709645cbd79a541398a123ccbfcb5cf682ca10f47d4b74d4d0d71cb7ba67c38701a083f2a45eaad17b9cbca57837acbe5f636813133441363c7279a4986ce496309e5461b51d489864365564655e03f17bb2d2bc4900bc88fce2af02dd7b0f79834b087a7615d76d8ddf1c71e6c329c11181360ddb13f318c36e90e3e69a815780f36e9569f7ae0072fe7a15074985a0dd4ef252d20524b30f04e160f9c1356c4d6d2a306050b3819f41ff9856b25be302b56f9dc01a153c1a74d1d37de4d7ee89f58f26959aeac6939312f0c2beef8e447997c0ffc57a90ad4ca322c160c24d22eaecfe3c55e0334022bbfa1cdd4f34adf5bfddf30593c31be59f7f0f7e2753242e5529fdef98a876fa731270c5a4c01b0dc080b4b300551bb65fb121e1fb98f678644886eb5376de450dac5fd52b2ae734f0c8243db78252ef6bbe18baa0333c74a12be8a37f23c777211596b0380860aaa50d7009f76e1712a15c3226ac083d6c3a6fee8d86c98a5a2e2ae327a4e1fbf34b34110a5f79829cb81ed608700267ac5c2c4bc6e8f3f7f18c7cba5bc96e90657381a10d3c5ca1cb4970d0ec2bcaecf6aaf106d0acfc8c62843741138b687367c7bfacb18c7ec0fc7fcf57673d512cbee1a7fad5ea481597668ef615c6dc65c470325c31e3e23187b0b3f88175c2b9e216a77f4a221da110c4aa4d8304a9a13c2ec565a7c1d2d7a21f67c1c551c4dd0f6da977f966985b1297050be7e2900d5596426dec61ac57fd2147992708ffddfd62723288d0296ca01f4aee0f27691e690595978f29737f37898e289b111c5658d711ab82d04d391aa5019abd179154e1bc0232c751105906cebaad4432dc805494178dd775db2638344140f246f1c87ccdbedca43a3b37448de6da521c4786cf085818f567f1b265abc4e627f5e6e1a4025ee4404e297419c49c6d987d9c2ead2ab2bf6cd9b36fd9dbf1b89b449ee438698aad271aae759e2b1c4fde682057a4e6a2f6ae5e0c6c58662ed07620b28e5792f192a7eb609f58714572a0fa426aa65e6c41531a84dffac6e09c0e8b08dff4b49b2637dd5c13216aaac692810b2b6767f048223d1758b026dfcce1f513ac479d39dee9e6f6957ca010c1e9bac8bdc975c4ca69f03cc71099b20721e82eb6444551726aa1b671c8d544cbaeb98f821627565a40111c478a30ad7fb14af574d0233001e2882a396158bbf65976b46ac0f00b7da9a4fc663ca9a928cfee7dce5f81ceef61bf735ee0170d1d3acd52e6a0507cbdd496274546e83a469989ca190583b255c198ed0d3c96f8a42ecf25d2e4192daa1ae6f9b2ed13b4decb2fbd11afb7275cfea35a61d51f1abaa84d26e6074f067e8d4f1593d01383bd91c46c59ac609d596fd691b96aa2f32d658cd7da343a10a620b6ecd21adacb72259d341ae6c60ed730905b044d6c8c887ab7a10f73e8b43abcf278f0dc01a809d72460720d6fbe43b0ce8b99ad3617de8b3dd922adf8f7c680e15fee65187d0c8046c78943da06481d19aaced6a28432d1dac5341b7e152ea8b3d4b404876987ce038637bf1b592461aefb20dc68b14554a7bd464376339f8aa2ce8c87c0def3a97ecab1802e3af18fc1c966869b7794a462320a882b035d88ecc3a8848c076cd8045976a2cca351681c16641194c9d360dd67b5dd26a4bd7c4f09260981792fe088ea9efcc3dc31801b6c4b0ab54deff4fea692b02c3d3abf6162c3182037dba96f4e5eeabdfc27e014b19123dc2e0b22af787de309b6c7b0005c703a259b72143e6ca2da266c10aa0c3275f14842d9789e3969eace81919ed0664c23cff53065ea72e6ae82a6bbf758dd649dd4e608ca7acdef7af5b9df424d2fb862ba5d43790b9263db873e2f8e7a70ae43677f6e3175bef45f579e0b838daf17ae8ea9d9c412be0cdc90dda19dd63031e63f068a8ea4d792d13f85888229c15a32e8681560f71c2cf5b8672228d2968355bf793467225c2cb989a3066282b69628146d9776c617313c10fb8058fca80c5910a50289f241f76ec4725b614d9284560500866ffe7096168bf95c87ae280a968d16bb554c66df37684509554af8f177ebc026d222fa1f85e5a4f0d8b0cca47b648b3b95befc01f2064a000610d3b211cc213ceba2702b343cbf7a39228bb676468b8a704d3700a542da885881d6304a6f63e420620ad79341a32b4761ce3af11a62556d55c69cf3cddd5778cf030eb2058dcdc51f2188c1e1cb3acf078f40aa3eedfd2f4462b00a204f65e21fb14e533f896f1cdfced093f838c5f22a32b94f302d4d9c8d1bc71d3373c75292fa4f0b8efeebb8490fa5c629a9b3a30a6a380c19c528ebcf983827d234953210bca3d4bea362986e8df8ed1008be891792ee9979a687309d19655121231ebc55b7a33a19145fcc55db5604974fdde3f506cf13d8fedd93a4ab2dc7abdbf80c6c4a8cc7c2cbb30581ca521cb5a90237e38521144d2aac6d3127104b7cdc5326199700214e4e221645c76e1f1fef5411e6262d3f30421eb93f167b1bb328eba1c982e74836c618c259e8dc769af2901d57f82291bdf8ab74993a4f2c78a42450de9c870dc06541729b3ec5d4b35e0cf912698c240a4fd7d9c9befcd40ee1977ea7bcd12b3906d715c047ba5b510b5e89a51aa20a1acde8c1f86ffb9f58efd3011cbf58f54941fa2ee6021275379a8c25d7421565c03ab20b25172269ebd8d9945284d5d786826b5908fa03b22086c0f57f12a20dc832d51011839f7f2bcb1c17d0a530975b7255c8bcd2ebacdc2af126c26e10cc3dee794e0bb3bdb18d9843295ccdd7a873d8d9b5a462236073fd12626c5568c008df38e1efe361f10888deafa0c208816010a8d140d2de0aa0ee44785ea073d162d05ef77bf0b692be389c950e95afc4cbeccab48ae4010194e7759c3bb385bc1b9424f6186c1552c058b8d9a7627ee62da2d889150c278ace47a98c552c1f07fcf59243003fcc2c8ee10e53189b6e162296f270dddbcbf9a4c5a804eceb817a18dd99028f64b8ab95e9253b2ac20006e72185ee0c309ca4f6a04f9026f21e2938a1563927ec923dc5b710ae56fc5fcb52f722b1173b3f7e60bad148ae592a0493afa7634d572711a7246dfa9ba092acd5b748ec4352386885025e5059784f6f84965ee5ee9ea2b89705f11d900d8417f9a1461b7af678a3af8274283d78356c57c49f42ac7aa956bfdc7c7da65185e25d1e52b3a7a4eaf311862b04f9600449389e1e1de6c1b573743ad3647b6c70d87dbe37fe39aaed8398437c142ae6537f07bdf1a3e18a38dc1b58d8570f9349226de7617d743e84c6c371ec716a434d31bc2c5569b6bbfebeb2bc2e2d0321e302207454852b1c8a34a01f49dc35e4669fbb2e2aeb3df8fc866dd1824108f073f64e9ef122670c5400e5eed8329b51f8ad667aaf6e8d5d65385624787c32174929a2c8d71885bece066ecc35ef6d51f94581469b90ac79d64f4baee9e8bf787dc6029ff105c40bfecc51d8e79e990f6c932b3179dca806ce1812efdc7b389ed85443adbb5388a30d59832d91b3f718e63d5716e50d98dd42366618b5091c180d9f8c0209cf67aeda7fb12a5f93da6ab073a1ad58bc4637352fcafd4021ede6f0a7ce7c001e9124b039f7d8997214d30bec63dd498d7a381377260bf6afe94ebd2021d6609fe75d52063b5e79c6f436dd34b40d225f086f70bbef8d74a39587f1dc352e580de08378ac5ba646f10331c50389f7009856a0c04ea1280c637955112183bb88b328472586f20b06a3b4c6a266fcdbddafd224156e778556750dee8e0eeaee82c5169d7d4c755ca59155962b69cd2c82223a9a062a21fcb748cc6dd61a531290cfde01e7a08dbbe9599d42d99ae15bd28312f05cf714512aaeea1d64c8902c85d020b64de27f53e73b6136092586f659987e4bd11aa6ca69fae8a466e51a8fd7dd6e3591819686ca4cd40d0820618522db8c0b410e121f01631c41f9e81d1542eddf6c615ad197822724632c2d5253bee792a53ab6a94d573e423da70cd81f5e2fa4c113378dbb9a973bb644a0acab79cd89a3e17ff60b278fa2917d216859a60b264da5b7c902974ed740956085a8de63f239a4b7562b5cf98b4493cca3abecd52bed8dd62c3f9cc89d13243b947f1f51edd338b63a39aa10b3f0b0b70b2d852617151140d34b00416368c137df612b5fc4d3834e81cfe4ce30231ed4a7ef3630c13201573a1ac463b7363ea2ec46ef15be915b9103970db07c4ef00c33aa08dbaa2ec832042b928fc3a3a9e1bb5cd788bd4019301fca103dd9177af917aaeea6cf62ae77a4b324933af821f4942b6d9beebaaad26ad26d43ef7ae99612960194c2b3e1e6939fdcec41b54ec24f6cf06ce185c179420fb544fe8b673993cdbf7d95bbb53ea39fa7edf0080a6d55dee166903c1fcec5f8cd2130242c229cb51626ce740598caae74dd35abe3f939f11df2c56d3bb2c161a8161067aff0d722a5089702a1042366f3f9c3330aece723e6259b10385eca83869015a11ed3d320de57990726cf4442806edff3444cf3bb4531f32e8c2a21e75194bd6c99db6684f0cad652b00d48fa98608b31cccf42d7f01a3190d218087f106c1fb836e75e67cfca400152e57312a10dd89f062aa15a0780cff8684e4e20dcaced90a99935d7db5b4f9af302063a20e18e0fe3528b396fe40aaa1106c6a47bf3600e1f07c9c7c5549c5f1e3d5f3a7a7c8512c36c197a78aaba6d16f4520a1964f09b544885fc7c9c6eefd887d32b6844b212a30cbd9bd416f7caf60d102f0709c7847c077d2d4e0a95c1c65ff667b3cf6931502bfb6a26805e7e3a7b27fd6660f5da380d013a7b0d5603544cd17032995b91ef2e956d7f510b895b10354e9712752bcd3951c072a646033ce1429e3784d94a2ba3416f38c6ef9da9ff2a362f94c462e15624aa4c017f6c4252c96a65fd752d27cef152dc4d922f7c11d1775a9060b4493463f972289d581c340abf57f1945342e891ca6d44df10d4626a3e18cf32bf49932b1560704c29ae7f585710663e712e036cdb380b61ca1331f36a7e9148142ea15432a38a419a984935ef91b090782ee9c4679b039542196c216f6240aff8f39f3dee33e1cbf0115ee32ad79e123cb8184d2201a7da1df04c6357320e781c09b4e6e59364998da943fc16b5b24eaa103fc0fe78f4567fafe9ec51faa5f34fcbd4a5250d542755367e18fbd814b079a85c17354c6ed75a372b85773449dcb80138aad0e15e4a34f1692a1413e5da37a19670191dc7a6a1b611bea7df229bbf6e22d01ab310b0f682396c2500d2f37c4e4bcabdf64531a7833a08f070ddf5d8f41e72cc09d90831c10b5a2cfdae4a1e6943ca8128e0de618206402d9855ba2a892a702f29a916f36a01a77b48c26650389ce7405b54b10dc2848b99c1e2fb9989ddc35c2f69341b3f050d7f60d19e2a80e3ef3f33950b8687a89de964f41aad76adfc942300e2f497bec7c796e8047f948254aade24f3fec40a4a281b3e48142ac6b7b717117ae42d7eb7f0ce83aec8c38a6fa074be565c8ea78fa7412ce679ebacd34d34ce6a96b8afb05720afaac839769b309c465efc29f5921ee5eb07542cdfb1e2b0ae0c4d91d397b578cbac39fc1b3bd430fc61e3166ef7de72665f802bdad98c652c30dd0e2a0dfa33bb0f070733746424ede961dfd75fe68a299eaa0a2a312b46825b4e603fb7afd60f3f7d14508a00617c345c25d53508e9f60ccb2e0b562806e9222e1ee44c09c8551de1d86d8c02c45e1c4a2b62c8aedc2b32e9666f6dec3d9aadd9480282e1e6c9ca4d219b6ff8b181cec76936699b1fcadecf33ac2993152fa4bfb73f7dacafb3393a30667069996eae84d0b6605585923acb0a2c43fbde7b7ea49d4848ddff2e70d02fc184ddb750b5ab8eb6d28e88e945489fe0fc4290901be8a2c8985f9006cbbfd487d00a67b272c30cf0e7924d92ed7f6927cc747c470a23624c17a0543c7b8478fde8514b073982ed35e1976e105e1213e84c90e5330ee2d72d10d7b0e19259669369b9427e673f4928c52f42604ea085c499e32bdc5d78fc3a989ec2a9f5d3223afcd0ed3d6a9d073302fb8493bf7894b76af9f0930f47e9cfc42e57adfedff7e7b3541d54067789b4158738aa3556c113d887a7b4a35498231973a5f6b2cf53c14b389916e1840b1792d8560089d37c7640d273c4f4207ae37fe14176b1d0dec5c3969ccfabde0e761cc16527fc08ae7444bddeae4ad2c251bf9001ba9729a3858dadb9a00ec82940f65aa2e8848469f973e7ce2efff19a485b665d4c2a9aee7049208f64663409c92789dab785bb788ac8153cab712573edcabd27f416fd720464761b5a686bc7e17b6685ba92e8075b77e5cd03e2568e227619b88d18513c280b261325db42f617224cc2a0e63929c3352f0dae821f8ec46913261256f805af65ab73d9d25e80fbb61ecb04f66a0952be6f43c38a4ad21e1fd8701287c991096fb4fd4c34a983db0894e2975f7614d34289f2c02a53596c97b7fa7458c88fa7dd0d33290dbf8152aff0c30a9c261c7fff013426b470bc5b20a7ea3a646a408483febe7b92b8f07dd65bd03b765a944a8fe15c65750c85cf1ca1a9dc9c1141892fff9dbd557d448c9dbb349c168fdf2b2922254d1b7f9dd46e57fda6cd618359aba7ada6c53b8b5ed132273f20c532b559c2a8b04427ab7822d720d1014017544f1a3e62ece67f78a35e97b3f53e4ce50ab148c46dfaef49219f407580df8d0346e122c0fb14567242392aadce95e17e4860e98c2f7fca7fb3725d62519823b2e37fe91d69d250f82da801cce8fc15663512d4c83906a311b5beaa4c88c9e415fcea7c2a58b6c3d854ad43321ffbbafbbc02eda090ee109a3011cd0deb116a77235028d268916ed985e24d512449fc70c3792e86bedf3ffb73333e6c4c2bd55c9f69b6ea384e8b7270cf898e8b9ec7f0708fa0ce1fc0968097e7869124581cdfc88dbdd1ec9896693d88da2ce7f6eba8afa54601e15481dffb803033b2aaf78b15c18b028028cc142bdc842e83762a3c145e118ff9443a4c368850fd2e2b5df879d476bd7e6d77d986c2765b87dfc859bca0583a8f13b7a304ee5763c2e4e786a9586ccc8e4178cec0965404d12ebd84bb604314834b4815568d0da382797ea1d2cc64fa3b7f2b29530709a95d0b48b10eea22b585ef20dee00f668b7b0045a376c09e61c517ef7ab9b84943114a574e77a287af317ece81890efc3e0898478c69173297991e81d230e88e0bd677b55eaae14575ec4063797f7b5b7df864c82c7c02d7275bcc8f12e4333ddf9ec6968564ec13015275b6927502ff76efb49b789c453c0d7a07905319f32f8dd1f641b7f8e1cd1415d8cde606f02fb128daf7d9683cb52ee13ae7923fbe568aadf4b5dcd9046382a7f8c7aeca189b43b82a81a106d0b9ee27f2a458715cd3ed736a746e7ac8017d9133ab1953e016e12a06a4d7841810defb5187d8080b0632c43c14907c44f8c5fbcb3814c55e610f8c7208e10616030f4208b81b0497d6e482c6b3abe3c42a9c6cb78bcbd3a384bd70e6db610648fd9efe5b473e58fd6791cae960f3369917fcc84fc5c6c5f803bdde5ce4d6032c6cb778d2e8bb3912f007e33e69a8e1ceb2f58dc3240b598a115a56675407446948079d3f8787d9689921d671360c16acaf872873efe552dcc03fe6a018ad5123e33de1d338c6da512daa89bb20750dbc61acacb99ebb2a3829e16588c2ea01269b7f825a711ff84a73316f2faa1b107cb41ace7088522cbe6082b465cb92c465379b8abfc2ffda951871d0ecea8efd49e9567ac8c236581e2d732ecb5043a2185eb6f5ac35363fd328dd53c4c94b08c9edf61cd2790d5d72ac53497332eaadce5b5b8085dda8b0a196acb1a76edc1b2741310545e6437f8832371259e65d49c5fa4bca1f56e4fd5adbfa098fff1b78faf3fa5fa9edc38057bff3ef1f304afb69d2403d38f7ece697cdce780e5ae779dd5cdd941ae3c34eddcb710eec420df61abf95926faa7ca72bdeb38513e3727ebaadf6b2453aaa351f180f7f8237b33e47e88ff88ff3ad7f575e9dcbbd1b929643e6cf8278340c567c06b7a2d5dcd9fdaee54ae63ced5595036aa2362445202477107ad6cb1449d31f1932454496a458e0b869074fdd6ed5b259f2bf14727bf3916858211e50666279125fa4b73e187aaf4610570c610c4e09bba44f321f15a5c27f269d3fcee32b8adf97698324c545d9629db88305ee8ac6af6fb314cd8f6701a2f5edb6b5a1ca5061b43cb72da48ad821f06ba34d97c3d4b5720df71ea73c415fa106c6a361a4836767dbf9ebd88920a5e4779f12e605ef8b7fdecc618d97eb0e35ec4063486ad5fe73c53f8a55d9b82c563a27e71898db6a97118f7fe83bf04c6c77ccfa51e3231c3b370b9a3bef6c774bdc007ae346d5aa6680de2340edc968620376dc9285ae51b93acfff2c7f23189c206f7cfa82331217af23b228aed3e18b50de44692ead27d3259c1904b35ef22147c295429c43af10ba9052e06be52ca64aa10b1dfe3bc9b593d1f676688fae097cb9cb6a8629fad6310e3bdef3df119ddab7e8270c46126ce5d5d177e93539515c9df9cdf5ac9d3eb2580e7db4361d0202386210908e272dfed623fe4c0a457cde8e9d76b789fc2a45e27607b07feed4fec46dafa41b388a8eb7b9c979c79398fb42498be12795be187c1c2ecd348d86aeb4723e54b2e2eca34a24163eb74462e64b25598c3ea9f4c4800fe3ded2ee359afd1627d13ce2f4ab969af5ae0a96e1ebc4faa8bf25b87116629e9ffda19214639f503a62fcf16514131f2c65b1e783252b8e1f5922b1fc792514f3be545262f089a527061f57c6626a3e202da11d17ae982f2d69100bae7c7b1480d838c7e3ee3171c35eb6faaa6a51726322adc7ffab91643f894271ef89436918b9fcd70ef3cf9ea1bc9c5ed60477b55e9dbc4df2cd83beec939391aeda6af0a7783ac9b3a5f4e5431b7effd1e7c7d83e3f6e7e61c86d31e2e74cf35cb4b2e081e14dbcbbf36d5cba626249c4039ef2499ec22b4faf79647186cfc5dafaf93cfebaa5b61fde7d77cb217133c72994ae8aa1a656e907157b88bc41e31f914e76b894b55c39ec2f0ef6e71b170f20d505ff92f9f6fd8ecb4fb9f6ea1d6aafbf706e1cea7dc381fabb780e2f7ae928435c13f6b01b6e70b717a245fb0e00b76bdf2da63da5904366fe33ba85fe2f29cb60c90f18bba8add403da00d5418d3f90e5d0b20f98dd189cfb78cf965204fffe94a10a3c7ec0c9aa34176ebeb854cbb3fc64c0d28613aa22f4509dbb486102d767ffe793511cdb334937364b22875874f40ec78ae9197085000c3f63e167fc12104536077634c4ac03f90c8936865c752343404014952f18deca90c0ee144977b097625614fef3088e7d83b3875258b5c0430062efccddc2a738def73dbbac799bb895be3ccefabac748b241fd256fd5971f26d1f07a998a66146e9bf2cb45950f8825d2a8c7d11294751fb420ec8689509f2c17650adcff44ed7366c040c04d9a5443fdbb1187994eeac9e5c0d90b4362218b394170a0c406ac103485d07b2713c1189c771218a28919301c047506996cc069c8b529f4399cc0d380e25e71fbb1cab01f0c506e9c4bbcdba29c4071ebd6911caf7cf0bcd5309e1c1730a575ea064737659f768d3e8a3665e5a0fa5b33f2626c0e14093b2aa73d0d19099bc5f1deeae91628c2f772313f844648590ad643bf5225c89d22bcda8e8ddc517b5514abf8dfe8f19afb92b4c1594bd15d6726974326a2ca097c7ff56794258afcdd79d04ad12676fca33a50579106efab61bc0304fe66b37bfaef6d2714f57e9be04bdec63945fcc179c9442b4df06ff440b6aa9a95a65a7035ce0f3b84a7589da1e6da36ce900e8bd5365bba3332ae56d416b422ee2b92ab8603c89753ad81dd376e96e5988fd974b3752dbe426f7b0029b2296fd196be928e433016f453e4457f0c390189c74532762ca68c71580dd40a8cab054ea4ff22c8e46a6a75a5453093d9bc76aa8683b89a39ac895130a0625328b4bfb65b8e8f8d648673b0a260ec61bf5d81216fb55433b9bdd2617097d94b14b511cd025c4f78d13a0204f38c329a2eed8fde4ebf0206bc201bfb44b8acbd40579465c1f2760b726854362421c5e49689e0681544442cc8866ffd22b13c7ecf2d0d53fcf2e6cf9c5b602d4c23e839a3d5e057b47b2c9619162daadc9f7e834f2bda17ec2a6fcd1ce404ffa4be24c740a50f047f48783eb3ac2a46b8a8e726dbdf6b45f1cf9f21cd6e6ecf089115ff94f07ba832e637235587d1661562cd0cad4333c0b8632771fe7e3b1374e6ac9d0bb767bc44d09199e29c0796e3b45b48fac7f4304324deca62399c4e774e61b0ac5bd92b2d14e3bc036287cfe9a4bc70fff4e8701aee337d4b3621fab0df98d6859bf1011eb19b7ca265db5ff62657f807bfef38ba2c4450785e7fe881ae3d6772807205a8c48cfb217150001839ecc02c641f137166bae76c532f9d512876a162f9ffbd44dd6e3ae78adcb1e25b680a45687a0e7b690eeb3b51bd096029028ce18e470fa3158622a999e22c9c039739522e668e13a13d76993485c257c7592c3b68bfa24f6c2678463144abb5fb36dd26ec8bc2d0ee4d272616ed6d0467b39372b9e8b979f8868cb7ceb981e07e76eabae1e8fddddadf2f1ccfbd7aaac58e4b7082d1d23206aecd635f37749fe173d56027540af2ba0cb23237a340c14c9c2081138b21443b480c5a4f673e461f9283a291941a7e035e921659999b23e7b35ea84908c8f9e6f248ef8060ca9655f77fb4f2158b869d851695b99167878efbc4f32091c800fc8a39c3f6f2d0dc6e46b62a199508689fa6683e788b39c3ee1359099de272ec0a34b8ca8eb07dba99e4d6e350f06964603e42addd705b1f3b4b7206d391793477cf2927bb9a44dfc0d07d6a2fefa389fbe730540ac9f28b155899150c4d1da6c49fee7447c825747181f6acf2f81977ac62cbcc7319453b4f7531b8115c8bf32cb2027355cc66b68acdc23bd51fd616242d0657d28e6028f76f57d5b78317771c5b8bc57e37c7d468ab69e30daacaa0e7128bdcb627eaf8fc6c9d923c22975e5e42645732fc61f20e8fcbbe236633a306ce217d3810259c5321244f3d0077ddf2a8d859527e8b0e8bf8815d9830c5f85ea190e5c02d743c2efd9db43078ae1eb1b6905bcdf9ae9490051c43ffe20f5e6841ece8756f8dd0634b03e656ad5b3358949144b9c0c493112497735a44c17227e0c22213c373a6c87b078b93a9fee76bc8d04898675d5c58c98aea0b7095679d9a8b1c34a25c31f9b9952b0706b54858eb08824a5a9f22c996cea19ef909e6e4e57441a5a05a5de9fe43ef38dcdd4a5963657fedbddac32803391b052871bea1965934b87b9d4c356462a28e38226fde285d6f803c5fc4119884663ddc343139b57395c7929ab4332e13a48e03b2306a56149d768f9a22426387b1e1e2e0a9af225a202beb31df1cbc3363fb8de05f386e9265316bdaa5708984a28158ae2a88674ac2fd0b232d890842c6332d04f5e2ae48756fdd424be5584d59ea65803cde0bb146d48d872c192494919cb21f991d20380b13f2eccda16c221470dd966972638a8b5ee5d89afde86c950827e8164ae8e6fb23c6f2724a91e771563820deafea72e38e11544cb67c8311362cc0d8b996b12c7a4a54223c4c51414f2f031239a4932ed46d745be9b2182bf19db6dc1d16fa42fe652d02259ae8b22de8d5b0e183d75dc727404a3d1e00246d5ee69006d3792a7144012c2140f6258e4cfb768007351ccf4c5ef63c60cc1385afa10efd21eefe77f5fa34cc309009144702f1e3f32539fa78f17485f4c0f9e4556c2889d62c1c3e2a1d650d7e712212147611d779de9812ab4c379b4843eaf68101b4de1da1f4a160ec4fdb34799f66a2067d8abcfbec2e5dde04fbcda46f1178f88b1849520ebb1b96a7061d657a484c87f25aa86a9d78743b162fa2cfcf29c26b382da6c2dd8abf841341189541ee84a5f19065dfde3201ea126e14c42d08b35cd1ddd39992141aa702f60f72641156cabaf5be88458cf4f0f1ed93c288c26c95f4bd24ac735bbea2d564a6263402604672b6914b987fe09d3ca038d177d34cb37d89619f442c5e0bcf85d9f1a6ad04814fb0a0f04ec3f564c7e27aec4d112dcd6f87d7592088e70aed75998e880d91393826cd64d0a4bf332dc98cac2ad86f9ad8031a4bc6b7aade3490a2203b141509234de1ec51a4c5bfd5a11c7f32cd1cd675196e3f6c4ffb93eb3ad7800bb4ea29f7d30ca4a9ac919693a130e098080972d39a2815c4ac5a26105f3330cd0991e366e62143e39f3657cbc261e469513fd188199b0c7b367a7244f757614c3bfad1a5d2959de2cf1ac1534a283f90b1421a95a01d521ca79c60c4c9e30789af9261ad64073cd37ffa3127d7016b5b06beb8558497fb476e8afbfe7c00fce266cad19ed665e80b70cf07988c170ced62afae0520be408ba37934c17cc6dc1f8601bde01343f424cc2b8e67d1c8c64ab34644a0942785234a70cb231c5c889cfd9b4fd93e74d3fa7c6f2c5a4c948f8faba708b7c345d6f604f9eb6b9b7c6a31d44562f715659e1c5f262f4151d1d2f578018a9aba504e7cca287ae74a5b42f74be7d1c5cf62418b4866e682a6bd4ff35662eac8743cc1633c4b37684561d73cf9233105419c8242287a1a18585d2779b359c73cb0fcdc99f6ba61c52a9661d8a8043c52f8c01c7212216fa87f3c4ef444ee501469cf4d27b9db353160a473a38108b35b8355dc79346e958ad7812415d8fb6b9f7903e6f456b9e03821518ee35278b42c05a339d4739c08e7d2145a1ebdbf8d30a1536bb59fce852dd0c2f18d45bbc3d47bda5c8645dcd2664019eff72ab82ba5994181b3cb288123f64d2eeca00526d24d383d49a935317cccb2f1841df293af607cbc938c91aac24f9625d3c31ebb45704cda002e2fda08617ef917d480d78d57a90995788aa9aee9506a4df6a0c040970e28fb0c783998516db3495acdcb58c4003b1b634a163f7a580ab3d9b680c4bfe57e7da90a333e12b7b233a20c4922619602e1fd505fa347865e76d0345e3cc5c1a48ab15a5d2baa0c3250246e7f78f6b3c00f5e3cf07079fab89f38e566986ebeed05bbbcf5eea6cc169b288d44baa754b9aef2f12ee6b07dbe90a968d0f08ffa82fd1ea7ebc3affdf972b6e7c0163a1c9d6601733a1ab46ff07b18582f20baa5110aa472b74dea475c5e4a0b528d9952f8d2b95ac421633c10688e820e0b2008c47e334900452c6c61b0b6bdda82c6a1ea900082f2993ab999e4c5d3798e3204c19de8dd2a1a53f9d721df43f8bc8d736d48086a1a34e7ebf16dec63ba52ecabbbcd2025a3b8945b8a59a9584412607e206b034ffb4f5e337d3565e9ac14f1520963ae6ff504684165b29dae5993bafc24c3dadf40d951fa2d2d6d09b7b47d0756e91067c43b96049b682d493f2f8d4392fb2cde853afdd86226b0d0c9a32a89f50152415c9c024213f0f7453172716a4bf74f217eb960ab6ed0a25a4a534ebbad99699445eb7712212b5c282178780280ea4d1b0bc05973cfd6f3f1dc76636f432a3a8b9e779b0ea8239e2614ee04b7e47914945a72b12ea0c7caa7938d4d28ce88ac860330993d50d27e44e25a514f36783ff0509de6c036b3cc09b8469a87d536e19c608a01c801e16756ab05efeba432db1d8916c6b878a66e7e37d8c67977e4f7752ae7828054ce456da99c7bcc1c146d1da1a2e77dc7918fcf263e46dc65147f98cc2925e8bf519e4a4ccfa1ba8dd52f6e81bd027cc84c41d840b50b6b07a13728753f73161808890c7a10844e4f18481a1ac719c0ce232b492c8dfaffbf08cac17c42b3459435281d1b74a16826a6e89dc4b084da520fe29040640a0ea8339c54cef5c4d6fb42647b9918cfcafad0975bb79615ddf833986b1900e527f28844c748c128f10c125b8e5d3d38ec64c885623eb1370e8b1d0bceaf08998df02b518b2cce0a62d02d6d07d39cf488ca6a9b66ce6ea7828eb1ab7b01c50ea5a0aaa3459987f8e8a55ce3f70b4209c875d72b03780987f9212ee3163f045a247577b617c3d7992c31ba0907daa2992d4e4b06412adaa09cef8435b37a4da9b8ff8d6d4fcdcf1cab5245210592af7075c36bb1fc9c1d06df0d36388c9e6c8a92cdbc0786b9ce666bab298e6b0085943e39ad5d13fac9fe4546b898ba2bc454c7d28665ec0271b509d1b85145e6714b473df19b093c04cc6b64b12188280109627564206db1302583f04e22b87a9615069b17972f341b55fac9eac1d508e181501cf3d91c0e51bebe83d37f13785554d9b192414a26d288f73c2a1329d9dc392773a5c44778047c2edb90d38de3c2bcc96b17e4319ea443ad857c5767dd760c98c9ae8a6db65c7286402472998e1391c58f57600c2b947cfab0b16b0fb94055ab941eb7156ef74f884cd0f0e25ee20663d22026e1f46d4d889ac990bcedcc7d768112d2b1a5b625ec0d4b277c3be3d9bccb2d4bad8f3dafcd417e7b117aa44b97d173397ebc1b6d6007d3577c0a8d1b8fd61a7c3dbe0b1b8c344d3eb495a213e2249c254f641aca6a2ffecd1f85047f21cf03e19d7c24e9ac7a12fcb7d0d33c52e8e6bd06f24f527c7a240708aa478186c2ee9039dce3a479aca4e03464a82b177a803e8256d6ced724caf5cad266e2505c13a5644798db2e83ac8cd0035a4ed897261085499e0dc91ac74c9ccd37cd86e714dd426159d74b5f1cd295e58248d6c861e2fc22af92c65915557f112236b132ef6ecc19266f230826f0a99c39f39dee0914348c903464aa8ba53cda3510f7cfccf90a7400371b16073361af5d6ac652c924c312f41bf4f75823c696f7ea1179a9db3e8b85d9994486cecff6d3eb71ee5cd8ce87b50862696f66424ee16748ebcc84f2ea4b88aebdcf90bc5f14e45aaf8a08f0010862f88cdcff26846d0af9ddbe0e99e50b3fe64bb785a5cb36acea7561e60d3df596702a76431beb54115936a739e8f664a709269fe30f3a6484cbf99ed281a4abd4af65e0aa9dd7dcbbec3c1bd5dc9fd56cc90218c4fa64498a922de9d1023ad66ca34d660316ff9fe1890ceaa0e56bce95da156d3942c816713fe253406ee6ec95d64c907aff21b536c5a5bd4041b18017d8cf422bce7221857448f3adb8e7624d39109a82ba3b50173d2060eab1d3b7399058604739c5f87cc74fb22c2ae2ece96f951d7cc1f02649b2b97dbdcd741358cc66ed13f8b503a4b9744636d5a0245fbc0ebdc29eb35d28b64b414b1f26aa353463d52d09b35b39782569c24dcc84ee2a06bff08986afd4addccbfa897dadd5511c24fd10f959d4da2b3ed7cab7a17b0e3d21876a87868fc3b0101541d6d6c4ba0a1cfc546cf2ccdccc979b7019c334b69fd33c625658f8d61a69eeb5a759c371b43aaf26935313e534799780ee9c78a18f6280c5015da8637eb0fad51cb60363cd563f314a1ac391a9275418529efff52e9d51528d046cce4c5aca4349814a2cbf9c62bad44f1ed1953a82bf38420e7d339cd91682be55fcf9a8dd9beea17b62bfdbe0bd3290d8a56b18de3956c607420405dc426952b4be28f05ba49840910c8730ff7118931f39e7dd015270538fa2ded29790294e2da7304a18b1218e0255b7c9feb20745760cf81dc33c81a114f2bd455d800cdd4f2a1e23e83fcfeb88e213d5ad0fce48ea4e0be8e4d6ad33646679dcdf8628583fce0c6f6002f6b207edbabbb3b2d2ec21df7939074928eeb3b4ad18c0afc27b8a0dee17b6fa73f4649c3ee04b6d521fc4c6479c14ea2a195b2a7339432532040347084182852ce08a6ce20cffd88d2edcaaf245f49747e50ed577fbbab18909990f921b9e648153a7c8bdca3822a0e6c47d612d9b7fb368aabfd929a44c709456a108c2cf29e8636735ffb43cc112140f01d303666a4fbe08f6a9ff9d086e17046f966441cc0d4d0e438c1b97adf4ff0c1ef636acfe03ebaa5dd42b7a13fe786de981f4f41194c181ae21b74fbb7cfcedc3dac6ff3ad78c4386c9015628c434a97b0f3a09747589dab7dc9c2b779b67b4251ea4ed09abebad837d8fdce5e404eeff66eced7f67380bd7e3ef4ecd2aaec7b0c19930d7ae620037a162d6fb463c9af1ec638a94a2cad86ac09a38b441e5b0f841ed3629ce1c5fc11cb700503d9bf886753f8472c75da62d0a26e89ade612a228cf16bcf9e30a229efcd7c00e858340600ea50755598b3a09c8d272c0d883337dc3bf9fc66368572ba4a904383ee868385681c648bba3dbd437319e63441c370cd630da77b6062115c3087d008accf1d36921d33c6f921587b0a51738ac0a0402960c4630dadcacee36a51cb609c6c8e6e2eaaa39eead8baf398a29315066e7830fb0f72ec021d27c0f420983720183aba0e7e21464b78bc70afd1318cca840121bdaea61d4636d6d01781497c08769cd7b0c22ec77cc41708a4a83453e52365f924ff77c7a0c550207e64112b29ecd919abe0cec09145a5c4536709aa3bc046210f96b847b73f8b8bdcc183e46c48a60124c1e54173d6200d928cbf1e7ee1c6cdbb93cabdeb59d7144a08433b31d59efdd22eb6f8f9cfe6219cec6d0fde94f266ed616d3487e80a55865f2cade806dacfeb55f6a1e355edb5ebe1519d6b6f1129c56243209238a1c70eb591b90e21fbaa53f7c5873390395deb13088788f7f69196a03f16756d154f7581b1c1a52a5895d35c0bda229b640b323799991767cb4a1b1d65eda0ad3939fa45adf05f38d0e4203ed16a5594bf7ae56960f602f3830d8a0f3ce87031db113becbfdb49c4f5386d552965230e1a55c4b135ea6f012f041d2a603f931abacb422ec804a34d3e67a395403de013104da42eb3eb997080e9f99cd9c8f62d225cf42b05eb308f927cf881320d06eddc90333a37576bb76fb98e4c376bdf506ad0796d697cd444f44c3c56228542842695c5089e561a2d35e8c8961aeed104b17ef0cd9210121ad5a770a9e15170a6ae3512cbf69de615ac7028a80bd6b0d39eb6958edacefb53c23d2bf30bf8bd75eb0ceb57683a6b9eaca934c2b4798ec50db43d3a2d7516d08f0a3833d792934d211485cd2df30537ecee5d033e0bcef495722b42d4bafc26b8485c4ee6fd0e8ffc826f776197e0f5db510f5fe02e00987baaa58302b8880266ab211b0811200a4adcd59811ecdbca6199e726e564b3e4c890e939dbcb10029e2cccb7091a42eeb23571c2bed09faaac575ba6aac1c87bd750ddbb8850c3508ed7e710c0d176ce0fe3680abd3c8b57d80dd93949d80b75ad5e6873645a7b40c3298c63afdd888ac872c822ec154a6050da01636832e52f7ac78d39046ac888cd8913e49081914932498350e17b0012d894e56053405dbea0c4c72b4248ed4b1ec5b39d09a26c72a9b487b209b752fe66d957a30b00fe30b7f2317d081f920ffd43f8ca45e563f4517c201ff00ff0818b980fe8c3f8887cec1f5054fe381fa20fe1538ae41fc547fc2d45a50ff0418af00f28421c16c955265bf706f0ff0d2c31f70cf8ed29c94f63b19ba561aa582289fe261058ee010c70f6a7343919a1005bdaf82421830d154c617c16b9e1832efc30e31d797787ca7737660248e6bcfa889cac6659cf316e79eb639f85586921e1bb66bc8c0206ccf2284c2ee7c76dd75c10b36d846f50984b3ce5302d7a9c9436c10d7326adb0f3c470159597180aa4e553e0430f54ab9a76a9b752438302c5f01e1b26f814889e2eda800d2db3e3fc20a4b6c26694e168088aa616f01a2798ea21d8a55f2f8a2e8743d67684a0732f92a7971e03dd713fce566f060ddbc551b85810b20698fe400d94a45421a9857df735792902c1ee860ec5026e840e8f25dc30dd890db9071d125b770fba3856714b7421b6e2cee9436cd94de8a058e086d0e9319c591a35c9f0f019a9b4b03762774af9df50b2d098ec37dc9beef8d10c8d6f853bd5b27ee64acb4d67215bf37c8e0907de56f374f392ee2dafbd2e0e39652139b6239ae1edcc1b08a3c76bbf8fd989bd639580da10158d7c1cfaee847d882ef3316e12ec2e3deb2ddff0892ccca5fb0afb13f92b06205430fdb6f8c882851a0a1e744fe3e469ced565514ebcd6188d2ae384b7cd9e4d4da317449826f6391239c32c21549c3b7e9d7a41cd5cc3036068c9c51e04713bee0d3813b06c3cd67099233684a3ef6ec885500db6042575f9a5727d42d56320b27e611eeef04b58adaa28a6a081486e34f48e1a9639ac1ad71980e8ddb285575258f801e16ec7b8cdc75c2a0fdf594e4eb3a5dceb9f15e1a09597febee5b7aae504212bb7ea4c2e7c0a180a30884a67c2b17c033af72cc8a33b69ca7991a60b0b3dc49b5b8b7d02f04d5d079450bfda52fc3c2be446a532db7c6ba428491c764857f094cf95a4553e96f945926fd0eb723dae6c8b0ef3173055bb61a500c748f0c93b316617aefcf702b8809bacfec86b79f09bb997bebcbb28fab4299ea94e02193dae915575f87c5a3302d6896656e3548da5c4f6d8098ff4e76d57dd14421e11ec384d7e36f8fdcbec1354f72c084659830c2c50d15c14f473620c99b9b8865cd20f1550521e04d62b2c29d022b719df4d2fd133b7641fc8d725304fcd172a14afacd3f3ea71f82aa70d30c7e8bbcfcb52913136149903e64c3d369a46b44b0cf9c23d57a88885124951157c70c686c02ac50b485210deab2affb3d884681f8a340b712cfb27b52f2bb5f43fc06ff9417a0baf0d3f6fe67d99dc255535407cf087ccc97b81bc17fce03d689c2079aed43a06e2b2f21136b0a978308e9dbebbef8ebd79a96d0aca68ed6aba5142a70fd65b0c49e6420469bce5957ea6e5e1a753eddfaa67b7eeac4694875570926661187bb5fec4c2894eaac96a0d00d29be73d0f179258583461d3e2d51005ccd2e83a68a8e715af34d13230b8a4cd77ab05892a0773520395c9e3e5524a365a79c8ee4d7ebcab434a330b15d70131957dc9b94d5ca026042f07a9e670ddda3c92354d66f11214375d31fa2de9bc3ccd02870c88dc37598270d15f90137b2afac1c8441151ea8fb435cc47a0b979708c9c1525d50fad956a5e180cb1c00ac6887b89e12356159c345b94e977eecfc45f277135a36eebe58596304187bbb181362c02590b60ce02a0075ddec491795dc6e789529fd4ff50b7b64cacc8f1c4f2d7b78e418f65a024e5e504fdbb36fd26b4d6fad585689d0f421e30b630a0b2f83f1b27d444096c2204aeea05a112481020b3366d90da7cb777a7fe511378c23f88451bfcf26aabf4b6dc1ccab6b5747747ed46922b5b053b2c1304c14321340a5f911871657777f7d2e09b355701bb08cc2c9d8fffbf0327183a12a50faf932b1b22b364054cea0a6be815dbbba56348055a53bd5e78b754aa212e9f0060a78ad6aae87490c347cbb9638e9c3772a09820ff6b860ad041490e8ebc6133c3160b30c0942d607186336f1091e300427c308315a104b06c00c48c192000c1023850821042063f8e0eb9008fd7046488220b2e299cc0822132ac0451218b46c48e0c15ce941d5a6c8d0c3b17747295b8c44d0c7614f1a6cc073e688921093451dc6840a58118760392d4a80089126220a1cb165d08493081211308c290915502070c6e34a0c51b6d80606110420a0f49771c6902c30a5658c132810e716008cac10e27d244392d20922407bcd8c46a5980195708b921841fb02c20879d447478a092c702badce1c8144282020ba82011acc1252b28200d223940b14004146648e345a5301c40f56916d0831a33968b561a2c0028818611c4f890c6870d275dcd16aea540241c0da049b365a90a219e28a1016fa82cbd20d042c2156cded21443229801166d5862c0022b74948993a394070cd395820290949a2062872fb2705428216121f4c111256428410bbcd1a0878d4cd07852748254c4893268de0829d1c62332b841438496604d1ab00334a79da31136b9c185c6833bcef440c21a326728012484287c8861006720b006212ea4c9679ce10109910bbc3122e1ccd1970cc6b0a9e2c319202b3270a1c5933e628dec7462880472481203e30e4f8cd0485123464315ef40035648b114a4d883902e6d1c880d808b203364109802abc0035e40363ed9302d50a8a1110924e1042c96871d60606926800dc55e1024ce1b09600e4072c11162aa6040d6c79843b458f2022583a210313680038647a65a220d28afa31a326a88c383853375643a463f64309c1c78d591c2021cd1e469f1428215070f4554c2c34b4380012888e2ecf11ac19317134f48f2e5854b3c61830014fc10c80b6d4039481a3f0e79010831cce8648815925e18d30012de9004615e38c0151cacd104f1714192b598904530e22ae3830e06d04616472e1c801cb9b266072257970ac0e011c3bdc345411b68d0f0a6cc0c2d386b8ea86345003a5a6e62c02f04fd5069a5d152c2887243112d6c811008496bceb47a0c29e20268c420028b0250348841934c088b8a358a20b1490d33b05e48c10b219c2029c12a218b0ce208af20585134f0820d356c3cb092001840cc12ec70add61c11e08c061c92c8aa63a1451c56b838b2821a841162223b80aa139d030881091955058764e48437327943d50021cc58c2c22101550b60b4d006100fd8a042401b325007a8cc244a74e650408b8390f4001706e96486285924ed0066860793ce48fa8226894a3c08e3920cc0c11a0ca822122d2e2ce2488ecde187065cf8021239429d428a0b33200294658528990b453850a0479aa4205c9020d5859537611e481572d4038acd953e5259001102411d4292a4608a4ce0871f9a4cea04320ad9620ba336a906d6404ac3450a5ea0f840ca619334f8208382c2004e684fae644125bd1cb513210850d3112922c851841fa89c1df41023054d04487404200349ac087204e988171c40e6110c7840ca9500d1e60029ec812482193120c27385013dce264834e24213b6b3a109b9c0196e32e93fb8f0099c530d4174313bd0218603ec78a06fa0471f9804e10095bf80011e404606a5fc6450f00378992cf237a080434f25703cf2467fe861749449f0137011fb832808227e481a9714421fa0bccd112b74340a09c397b0045edc174afc4a258251c2c61bbc478479c907a827362085841963e5044ff6145f28616102096e57104424b5c9618d2d3483178c4814776c1e78456d64112a341e967c39410284836662830c3e41a4eda11f0c4494c0a161a15f0b38a4c1a3e9903779a3c7255fc807f21b4244220451a68f3cc49b9986093128e532190fa63936a92477c0c61e1cb43869c3cc24f30c0e2b20a163268d0dc40879204913667430dac2a40302bc30e3858a303d3ce1a5123318f02106cf3186054e8a08424812004e929cbe28002290087d8180930c3e4831410b8ebc4e595c362cc141838553043f4c539723da2880902c6008a0889819148045942c94caf8a14301301e302398a1401f0a3801ca95a02d3068a10000b059453124ffb4b0070d626c1815c45a60d3b718a1852edc68c1052a85643102ceaa05e9c99628837411d3429bc395870ad952193908a9a0911f2f2c943162862c670c5100863219b231c28e225726041ce406875cb18585383b65161103880a0b6bac49e18b1b8920c1820f2310955142033eb01046cd9a224828410a1636901203d1184e6c20f3c804340f0b233841668c015850610892818c0d68b264e2308064b6f460852514bce142a600513ce286046c4c58c19045d2486541011d2b7431448200ce04c1c50a4a92032a307949b2025199461c19c183355608c0263e4a5986e6983fde4ce00d3612843152e86188a5e18333c6b4ca4855d2ac4460cccd1a08d166d218285bc0c8620b9088c1a3ca0796b0e1850f6294e844009034b1482162b81c590705b0000d621c1496901141500fa3c91a34562043884a9808a4e05078a3084fc20c21a58327f2e899230c0b2750a1e306a39f301cd0e10995f94700c048e29a838710810960ce50440b3d943290030c03bc4012889909a20093000a5042802fb02c02e60222325043c60bd95122814cc0caa49232470e28e2828322da88e128062b5d44a1c313a62314503d8471b57070f46306005a80c395c11741e2c4f41f5fec2f5660d2c2225c94e1f2251ba100161013c3035faa74e1431793642ebe48e9410a08786014e4458f2818f932fec0c0cb13490200c0072bc0e125b5c16b654617d78bb4008807982481c34b238003738c5943958038d020448b35669a04148104056124086f126046a9023e6d80592500041672c4e001b3802e960c60094ca05cd15dd418640044d0262ce8a28613481210c926a72e6090e08002082061862e1ae0310cc901024a7071240a08e0c1c7272c7011c3023aacf05182005c6a68d3c7230190c0878b162d3d44505446185c08204514b13d8a18c2c8900b6ab84410222b8cb6d024e58311f70123342633fa10040e2a46567a78a3059c27b811045bc0b00825f1c4163fd2f840026fd250b0258a4ece08c0dd04852d2cedc6214160f2da62b9ec30624226966cd979a574e879082d776010a3c2b5c6022d49c051000694b8198096cd081c386c5072450b098140c18242c64a854c62d822491366c4a8e006af4206ce96085410a2cb33a40b152c54204301232e50c0c9900a4115d0610709e2b0238548c050a904615549c10c335090c088185c0a39e43cce08d2891a2924c08200444006be440a1628400629720805518408228f0d146fb2222f7040c01760b029530443142a1e398a6f1461491a2312a2324e14f940f2c60a77c4a0254b200ee823ce046f96b2546189921b85b0c9595e2d68522ba040912c54f60792b451868a2c0cd8a043256b52c000853cecd003040240e1050a4e14800c2231290b5040fd6472c712d02128442bf905c7161bb0788207138dfc01c30e9637551cb2019638d66021828c30c2e0611500cbe907487690e22608cb075556b86c7c680457f20ad124113f34c06a204011120cf05303e6019017e07882830e3ee2a29231e0cec4403d802082073a435c69448968099026c0b812c6083a7054208538576888e48e285bf868c015152a80d387219074b9328036182885e1c30944151803c7cc10541a91166bac908cde34a233524c0e7fb06944436d2cd5426868440f2459d2816ccd4a1f68b8918110ad5989c2ad41e484d6acac2a28228a9ae5cc22ad352b3a6c4e4075d4f148f881c3fec163c884030d98b8d0c60e419cb0423b21a89910c9cf4f00d6b4ec656aa5740a694d8790d67406112427ce248c189233c80f0457b41f08d440000306ed0782a3d69a4a15630109bd6b09068183a00308328000484804113c78c092071e69ad3520d62aa66a6d20a067a562fb5f595ead5a4a8f426abd5eb1ec592dd5079d951a818410805e2d20a36c04046b217900f4b0142bd581b287b5963ee9032ccfb95899119c732e56c60320550b89955f663688a10511cc089901daef826e01b1f22bbbb070c13d4019e40396074baf7c7a65d456bd27511a00c01f0058d35a53a1fd00008696bd4c5202694baaa5ac7265a92b14684d6702ade900f2472b137bf5180ba66330c618e0a43520111878a4fd3040470bc84c9372c80f03468ddbe7afcf9e010f5afb61a0a7b59f289834383f51fe58c558ff13858ee6caab9f2868fc4499a23534cffa89224414185a83a558b11f9e457ea2f006f413250b6ce75746ed9f281e9889f2c0eb911ec64afdf06cf2c33389193340acfcaa564b2fe5d72b23b1726b3a766c11e2870705854d7b91f9810227bb485882d5a14347e645a360d905a4520d0909fd40f139c06be7084ab542039e2f7e74dc60f393a3a4486b01c69f364427ccf2d3a4fc9c945cebe1932db297e9c45f29d5770af62b9f4f7668adb9c0079446602472b0100277e96039630193e831002a66e6e84390344c5051c49213d428c20944a600b1c5ab814520d04404b290e20624336c796002903c80922a5e322102a1f24ac2874b36901a22b8e2b8014fa245e01d2b5808926459e10a0311c8d4e07941042fdc584241c5804a8e1d4b44a08a35624c60a9b1e1132d66c480414f2204cfbec2a211811254946103810b42550c705ae2069ac91a7b18c08f0c478c04342182031102e092a0c731009140eed89901c89236ce5c1904112a5c3e01e28f0fe620818329161401459aa10ee810c4cb8e16a6349c032fd42124d4091a9d68e9e4b5067bb5f450177a4648a8b52aa82c77b1b2594bd950b64262a5366b29cb4b59f59c85a6c555add63e9d5631d6ab4e4b2fd809c6180ae67aaec91731c68b848432e1e3798b880b9f4ca6340e30c10313333051a235202a53808084cc98018265d905a4e3864e1b6c5c9249537349964bda6a8fd9d1d9614087812896603264c915968c692615501eb2248be94a4c1cc6582555f8549200934af568b20c24c22f01659f0df1ff0c054b89416d58b642c91d4730552ca304c23030d6a7366be885792f93d8f065122049f2682658f64848b14c84cf32ca4812265a9304829694e5d5e9934f92b20c3b9d1e852629cbab7fb5760bee41e2c2ea6145ad2255abd5258b1575593dac284bcaf291aad5eaf22a5ef43bf7556bcdc217cb90b20a4bde596acb3f160b78e163811152ae7c822669722320b554663256ec742629f51a61e9935ad341a3359d335ad331a30c328fa0c92f688acfe44660a169bd342acba8473c0002426539cb23177c211212823156e5f47a57d26ea994f2aaca14a5bcaa02636c8a525ea9f2512363b42cab323018d9a2b55409664eaf96192bd98b0c9d315a6b75569103152c4246098b64f9d7c352a755ebd549d87f6691115afb7f61617d520bd6b29749955559919d6632998060ad57652a551652fd99579d845a6b89ac90889844885a33032484f24924a7c15e2d5406d46ac1843e7bfd997f652f132acba82e74b8d8a235aefad40ad94aabb38ab6644bb94b6b2da3ec5768c1664bb9cb7f3f654bd905670443a6306407363e15a0a11008b456a54a1521a14fbd6027577642ca56f904637d9605d66abd06d9d2c2a80063ac4a9529fbc39c4ecf5b1bcdb34e192ffad7676919a954312c199639052e7052caaba5bc9f9f608cd11753b55afa94a926b005201300440c357fa801885d42478924fcc0c48f2c3a48b49661f94a1297d60700f8f0c1880689196e0608014aec01cb5ea6936bf542e9f1a6b5e6831e2e3db23c9210422708207e684dc7871ebeca07483cf5d2431e4cd91fe6b45f589d5e585501128117c162ad936b7572ad6227186348d90a8f26b8e4a4604ada59b75e2da39c3b0ad1b9638ad6a2dcc19b97e67ceca8c404fb0cb7a6a3a6351d1e5a6b509a8e8f1d535a75a851c79b038739507254e223871b9f38e0e8e4d09a0e0e12e8dcd09a8e0d35f8bcc1c3e74d9be6f3068be6f3668a2843f9b3e457eed25a0e1dad61d7ea9585a8c8b57a6581b5545f5499e7f7d29ace0c4b2f180bf3fc5eb6c05a2d2f5f88bc58808a0802e1c384281841248e2b0099c2c200a2cc20258c067cc2b86308a033d2e8b02811e3821c0e21830301e4a045090d8480001ad10418608c30c904474c60071f585c91218f2335540689f2069bd6722cf0464ff632e9541a1f36ccf8ac31c51a1230b0841a56349d25a5d674d09cb152a54a1509dd9b02231858c66a110189606353248dc15cb18cb7a6f3e29fc54e2d239d17745cadd65a159f0714359f28abe613a54cf389d2a5f94489cd270a05cd274a04cd87e793e6c3f3c803517c4c58a2f998a0a6f99870a6f998d09b8f095b9a8f0927341f130ed07c4c90d27caa4c52e590e653058fe653058de653c54df3a9c2a6f954e1a1f95451ea69ad07020b0a20418f9b0d9a8f9b9fe6e3064af3691d349f1680d6f30927ade79338ade793445acf2782b49e4ffc683d9fd0d15a73e0a7c7811e7e9a4f0f3bcd474d24cd478d21cd478d1fcd47cd1dcd470d1ccd470d18cd47cd13cd47cd0fcd470d0ccd474d52f35153a6f9a8d12200293f0280619a0f4ca1f9c0129a0f74cd0752d07ce003cde769d27c9e22cde7e5d17c9e1b0228c0cf004890d27c48d0693e264b9a8f6990e663ca234a012e6940ebb90487d673c999d673096f3d97b0d07a2e4940ebb9844aebb90484d673c905ade71201b49e389cb49e3892b49e388cb49e3881b49e3879b49e3871b49e386cb49e3863b49e385cb49e3855b49e3848b49e386a5a4f9c1a5a4f1c58eb8983d47ae2b0d07ae27c693d71b0fc34108008a434c04003ad09000010480922a3f90461d17c828e683e414bcd27e8d47c82bab4d61e88a055e0268ad6e38688d6e326d67adcb0d07adc5c693d6e4c683d6e62eb71f341eb714380d6e3a681d6e3a6b59e368db49e3680b49e3673b49e366ab49e3662b49e3658b49e366b5a4f1b205a4f1b1e5a4f9b175a4f9b53eb6923a6f5b4d1d27ada0cb5d62a683c11b4067c1c80200013487160e70793199f32c040359f32ae9421a501099141470312222309202133404264780024344624ad01098da14603121ac387d68084c63802121a6382d680e00009f9887185183020a14c8c29404261e0d15a0b630d90106f3e61383030011202a30830cab4d68084c0f0a03520a12fdc685f94693a3f0e88c4013a34d312ccb5ca5e0ffb558b25c4b3153274544c74d0019003a2a20110ecb3de5b3c1d74d00110952a409cf53cb54139a341e1028a0e5088a05881320445ba89e4d5caaed86310373bb4d64070e304d0068c01b43183471676b4918008054b896969b891a34317b0d65a172e63a169b154e0024e6bb0d44ea95c4a988b295a6bbc281b4ae5d7111765baa8fecc6b71b58e3295aaade1028a8e065b90b185520312c292e534b14508ad69510628cbb24b878b163dcd94f964f15980f1c9624a6b2d4bca476db268008b488084bec0c28dd6da15ad692005165634c8409c95ea57a871c514adb51c4592d2a4b297c40a4ebaceebf0d674f6fe5566e954694d4767586b3a665a6b7a64fffda4ca2b5646f3675248ade928a085322dd8a74965cd90d7ebb0a052e5ad43c68d0cb6c2eb533944ade98c694d474c181d306d34358ebe78494097a6c3c5a865aefc3aca965e855651d6c2926562f8674baf024ce98d32d69ff191c2cca3b8141b9010850fadc5389a96aa030969e1a9ec6281c929d5d04eb95a3be56a1dc1fecbf3d696ec1f0becbf7cd26ec15e2d55ce5e7f26c502f3caaf225a7abd5aaf1786ed7729e157cc8a97e8f3041a4f78d1565bc94118d1642fbc48e9392bb7d678ecf0712290064b0d39e14af271020a0371b4d6b4349f26aed0a94245674ad343a7841c2d8474aed0e964c4a5e88b171ce6845118f2c2e5e8cbe924d49658a3c69a243255feacb5d693b3c6b6d64e2730e8c8f9311bfccbb5a4a3304427004cb8d6b6341426a1a402852ce182004bf359628216a6f92841466b9f7ac1584241d04025bfb28ba70805244246f3497c912d65af4ff5146cc7812424683a20b4d6a47cd060ac5ff5b09a0f126390b8c094c40508d66221d1d35a52cbe7083a5a3b828cd69a8f119cb4c64af16cc508188c40edf0476b4042d923e52e4659e81921a1ec65323d931b618422948a38027a576b6740acd497fd674e49f9d124e51703537aa3d4952b5911ebb5642ad5d01555d642f4fa2ed90ff1fc59f60b5b5e585d8165590b9787114c4bf525cb3ecba82e7f2605db995504cb48ff42421aea822613e35abdb2bcca957a1db58e8ab2182cc3b2a55781c3b29496ec1fcb95229e3f4b86e52ba82c67e902cbb216d87fe1a92bdcb57a656935c7121d0f701073b455965a05a1ca905e198520825a6bb0962a0b014147f63ac15aaa8654e6e4f343252d7b99741080e68d7e486a5846809103bdde95652b2618973ec9cc071f88e0416f8500245599672056563d4aa5ca8fa6a5a5a594b7a45aae9611abe8f5fcc5a57381c5b87c316a19f1cf542a353c3cb469adb5d3c994a95459c7b225978ab75619abc53a5282b59c1db2f8ec20828f0e63f8e860852b417ac6822efc1c379846dab3b3773faab38c0f9e90d30673f8a4bb344ee8e0eeb5d32b395de018dde66fdaa76dbff2512e707edebff3b9a794d55997515be069377ff5657fbeef479da305e6d2bdbd67bcd07dfc97e97bc1b22cb08c6f470727b7f5e99e292cc3025fbedff55c2dec99d20b5b2d7d058ed6d5def7fea8532af7acc030e6a96577d6521b6994591538d3a86ba4b5571829bc3fa9c0f3e5fdb6cc94ca9975a5720afc30671a25cd595239fb8c52e077ad7552736975aed5451805bebcd7bee5a4ba57cdab9c100adc799cd1d27ba18b8fc68aaaefbd9ac306c3defb9632dbc7fb8e1c664f60ae2b87cee91e6dcd7ddae8048e7b4a0d9fdc5bcf5c5f874d606bf39c1ccea927a46ed2d389c235785e4b238455f64eaf9d19551f6402473db7e3ce4d385f5af72e576c092c63ee90c6eddecdd14189aa4fe951a7d35302d307798eee59d9bfd6b851f53d4c9593c0365ee8ece694cbc7f9e54860feefbebff255fbb48654e61c81659e3a5e9a39bf3243fee0508e115842ed369dd67d8cb7c7ec2a02479ee78db0f2c7ab949008acb9d3aff97d3fb996bca3eacb5a5cbef9826534a70178d62e697753febd1f5fa2ea43f3ac68ca1902cb5bad9eefc1cca17e3785c07dca0939ccb6421b618d627282c0f45dcdf6c51bef73ae5b303940e058efc7c86d8eafd2396dce0f38f2ab6ba5b4da37bbbd4f4c8e0f18ce9ce386dfbb9cdba9f20bf660bbac5bffacf7ce7c2daa3e0b5fec045b759ba306eb38f9dd5ce6e7ea9e5d5bf8e2298707cd298c5056d7fb965bd2d8e9b35776c9b78ab1e2969c1db0d57ad20a339c3adbfa14c62c393ae0bf8fcbda2f9cb53a0d37aabe137fd88967d77daf875d13721880ffc20729a43643dd3974acd66ab54a5d38714e0e58e72aefbd373b0b39bc1996a5b4dc1c1cf03fea669f7ad2d8eb9c17f6d6e6dcf05d53f8dceef8eafc47d5375fcf62151de5d880759693536963a5bdc66d5d4e0db8f22ca9bb3ddffe7894f255aed891cba101bf5be19d91f79839775da3eaa35466c050dbc7f7d37d76feb15a547df3cb7b16b6ea5106cc279f4fabb37a4f0abb1be2b98bc994bdde52233227a418b0ae53bffadeeb4ef3a86d7c14c280ede5f5f6bfee5f86cec13b8dc89cc62ce05508fb737de3adee4533695ed3dc79af6ecf096146d5178d96f09e4f47fe4ebe9bb3ed7f9f127679bf964fcf17dfcdb673560a0d2bd662a1c151d60e63875a660a67afae552aea33f8ebef4eb9e4bac3dcb96c7556d14eb1721793a9d559a953352273ea31fc974e6ba1753c72fe3e3ad8cb9e469d2dad9bcf48b37d298dc89cf40bdbfb92f23ce3eb1bc2fcf151f8027ed3e6bd779fdccdbb3944d5539682efbab09633dec7b783fcddcf8aaacf154b6ab554949ff20b693ef86a0bbbc9adec1556ea789559a2ea8329fde944330a66f595515b7e61e14ceb9df03eb4967e9e329659e1173fe6de2fddcfe527abc9a452fd5e4185f9752fc6976eef7bdd8ca8fa78eaf4ae25580d3a422168893564322db172342273c24978567bb5def74d98737f1555df84ad7a072e6c9b75a63bc37bbfbf84d1c552b8c39867d437c2db697d5b891721b1b21793c964ca5cadd3ab46644e1c85f93b7ebbcdbcf23ca583fbf9a9053bd55702127e1c526ba97575f27e9d46d5c759b1d6ebb42457e8584e0bf5c3ee667d9c3ea58f27bd56e75ee78b35576d27c7113eed667696cfa78eba5aa7fb6259ea8534b56c5c27ff6b6bddee659bf9ce4a8f45e3ca79bc993ba8a7dbae3b547d53848cf57ed76abde97bfd6d7fa8faa0bd66707496c20aa39b1bdac837aa3e58f6f3159d70e6955719b7ed97f37e52c556ee39a9042352ca8aa5531480ab7b73ef096d967c4a7851f565f621b15249b7051cad8efbced8efd4b95b8baa8ff52acefa93847396c19ceecbed76d73de5b64a547deea169b94eaad8ea525b5731961516f09e55d61ceb769ddf581d0a646295d6c64729add639eb20b59fbbebf36a999f955cc7d7c38a884c26fe29576b9b4c99098b9720e8de0be6ca8962053cfbedb13beb6ab5b2fe66b5ee6f161716166a33574b680cd65c4f2ee9d4fcd5d2f9006270d5d9c9b73377ce3974b2bf974a9162faf984ad7a7485894f77b86f7f5be793f21581898ebadfd2de7e2dec10555f54e1c8d518e1ccf146ba6ded1bbe14bee01aa174d055da7bcc9f23e7adfbac179c6d9d564f3afbbd7be78daa8fb7841280ddd5f176fba08cb33b4a396fb9db05e70e679473d2fab0eeefee72c11ce668738f7b3ff9e0d6a8fa54ae55eac4ff955199ad46f8d528a17393e7d9fb3b0d61095bb09c705bdeedccda49fd322aab540b7eb723cd8e77bdf57ed2b2fecc9f5aabd6cbf5a0900a38f6ca9fed3647d71dcd16559fabf5e2cfa580f5cf1ce1bd503e8f7c3a546dc1e28345b843fbf8ae96c63939bdf3b453b00ccbe07b5930ed17cafa7ede2a399410559fb582028ed66679f9b34ebee552a2aac914e70be6128325057cdd8537ca19639450c2ebaa95d942e8ee9e56731e7b908331956b959aab182ba2b982f7c7c9bf5aa837a5f34293c9ce4cd36944e6048608736a2fa77b72ae2b8d5ca2ea7b8fda99696944e6e4ace007798d1aced7b393dafeab45f4ca61b415f9a81199531dc2536b09f7f30937cd7abe13f084f17539dfac74dfe9e4a446644e0a3001c7e7b6a3943e5ea7953cf6de3a5d2d55708cfd59cbaf8c95e70925154ce9bbbaf78ddad19fa7f8287dfbcfc4a22978c6ece08dd4d5fee2db8caaefb45f19c6cd5acae49512b09bb3df08a79db75bad2daabec96aa9884ca667b554db643299a81199130b42f84e9d61d65bdbcf52de8daaef041f85ad7aa417431e39fc87d7d249e5b6a8fadc7bde62c9f9de905db55a27157f9d4e00a898774df3e350cafa6add12551fec654fa038d67db5745dd3d74fe745d577aa7662396577b9d6c721d4d9be2ab1edfcf6c99f963cbe6d1daa3e34ad17d2e9c1f8e2cd4f5fce9c66b97fa3ea7bc132c8e36f097b7c913e2bffb61e969073bafb9b993e8d37a2ea3b71567eb0aee07086d5c17861dd90fed30f551f2a8bb94eaf56a7434144414768b297fbea342273d24282aefce6ca25efdbdda827aa3ef71e967a8911038baddc3422737ac184bf3a69fb73386d8ecfeea0231482ecfe3026d3fe332613955d46807957789f7b7aafb4b5a2eaab318bd0fbcd91eafab8a37a5a8aaa2fe80885a04f93ca6241475a824eac14852f982b4c08eed6f9eabd9746eadc8b76d2675a9d51a94cb8fe83dc7649657f3e2747d5f7687661ab1effd5da2a808065ef94bafa747f9659df0fb07557f6ce79b5d6ce7e27aa3ed8aac7a02314829062faaf984cb0553799fed5da590e723016741484c54b50d09196a0139446644e287870ca62afd3a9020428e595013a78a7960aa9a5a28003a0a00d0e70a21382b0413c390d1000e481013cc840040c1070010816b80a4e1f50f024c56002a5161a580605a013021100be13fca4acd22724560a956514d000e0eb00127010015cb5f6e9f5675afb5fa7d34ba213baf667f567e9743a800f027a320a04005bad57050148da59ab542d1020e0f95f153c908103eff4481434f032007820056ec0c02bbf6a5b10e5029e550650deab05cb17ec6ca0f34eb6c36218e4bcd3a34ea79da5562798d25fd00e7004d0256be4fc2ab3a0005d72c9030eb4382ac06668278e283400324006185c604105144c50000922f8f1e91140002078a001004861200a0f941d9df689279d70b2898e263a996062019f47d4683e8ffcd166070c075a1c823c32d4a220b2e244021798d25a8e052690460e1a3f2b0958c0a38109444180aa8ccafea8ecebf74b07146498618724588f942b3f2e44c200162e1401803b7e52709e70a2b5353a6469396481bd526d8b95d7b35829a01220100740ac57b15e357f505ace5089530917adcd6b4d09218208d3a559e042fb4102b2838e3ae8686d678e9ca2d69a941d374eabadd4da8e1c6f5adb81a3f1d48e1bad4bd263696de78d9d08b8017bb5da60a3b556aa1faec60f1740db59438dd65a8e10db0c04dcb4b6f38086c482e52c29c34eaa9ca7c83bfce4097e5a60c326883270ca1c11a521466b3b689cb143842aeb96ca0cd82bbb5adb29434a8665deda0e19632cbd0a685adb11238ca54f4ab5b60386e3aded7cb16ab16ed8516aedf54929566b0b2cc502b382172b54b1da4aa82cffab45c44ab5362c25445bc5b098d66eed9617ce7a58f6625adb718017ad25bd5a5896acb4b6b300374b56be1cb5d6da4e9bd6da4e17adb59cb6c3456b3c75daa211adf698d6768cd8d1228b06812c5adbc1e28a1d2b1850453c232444c514aded4861471c6e9411268c9f3023b45f65569819c2c05e315517ae4aa18896542c2e4baf82834b2fa9d273168c503436af566ae709277ec07469a2b5d6dace1a265adb594289d67692d84122fbc732149376867d31e2553ab78cf8b3c0746919a9f25f69197155ac2526bb56adfdabac52c5b0b886602da32ff88bd06a2bb956605cd9a5845bada3ec1f0b122b65f4ab5456b55e2c30b057cb9526f525e3aa569657e9dc326a6da708952a86e50563816181696d87881816d080216e683b4204c19f3f0b8c4a153362e52d5d60597e2db0a11796ecf57af55b7ea75a61965eb12cffeb0896a558a9151f7a554eed148fa5a0ca5248af4595778a85da7f8461291698bcca594c8525d610e4ac940a5c00e162c76a2bfd18c91fa3023417b610b2658fb6e3436b704c6b3b3da879600b6c304c258cb4d5568a61323ba68ea163e61839268e8163de987f7d162d4868f121832a8ca1c216baa5b202237d5607ae4a89696d87017fa5b59d1c70e0cf45a5ba81bf4a6543e7a2520dedd4b043032bd65bdb99a1b526654786c6534531b4b603c3ab5a46af8a6784847e8a20f92982b3b30018d3d0b764959a5cca2f34671a7f56aa3f6781c9603c232404cf5469755651d6eaaca229acd7f26a5561bd965f6523a5bce5579995619957e1453cf57acd8b84845eef8a65ab16ebf9aac57ab55e2f9c651957a5c45499b23f4c0a8915c3c28a75be59f459097be52e4bbc6505f6ca2e5eb4c45b56aa5481d1c217b3b1a54f9234c65330c67eb0c4768ebe3c2cf542c3f3bf5adbf19280d676baec70913406cf9cf01c388d1fbcc5074042bdd5ffe501166a992bb3b1fd61b2946b284bb932124be55aa55cd915011ca169119db29c417e8878f82172a04dc99eb7583f567640a1ca8f150d86aca0a18605c070029cd65a8665584e3862bd8b4bcbe8c7844aaefc9800b3b12aa81f2aaa1d9cc3cf94474e4a3f53d8b46f4d712490f0534224ad297196d01442115c3c5adbb9d2da0e516b3b56865adb3961c784d676aab4b64365cad04f3da3fdd434eda75e2c06e8a015e0fed40dda0f0da4fd5028da0fb5a1fdd031ed87c2f64323683f9393f633f9683f734dfb9930b49f0baeb49f0ba6b49f0ba294a2dfaf58eb0b5e82a5c0b48c5e3c5be1d94a96a160af94152bafcab02fff8ac1625854aa4cb4044bb1621929956525a44c405906d259b551b0574a03652096fec084647a0f80b2ffbe945d402d1810ab28bf3ebff09c73ce39a594524a29a58c31c618638c114208218410c2f7de7befbdf71c74d041071d74d041071d74f0de7befbdf75e6badb5d65a6b6badb5d65a6ba594524a29a574ce39e79c734e29a594524a29638c31c61863841042082184f0bdf7de7bcf39e79c73ceb977efbdf7de7bafb5d65a6badb5b5d65a6badb5524a29a594523ae79c73ce39a794524a29a59431c618638c31420821841042f8de7befbdf7dcbbb6d229237c5b56452bfc88a0a5b5965f4f42088db49f1004693f21d4d17e4260a3fd848046fb09c14dfb09618af6134212ed27041fda4f0830b4d618e87980ffab5a465cd5ca02fb2c1b42d352bd9525158b0b18dcdace6d6dc7eed496b58c28cf567648684b594bcb484b6b3b53b69d08a5b51db8f35a6b39e31b7fc1b056cbcbc3b2584629fd7bc98c88b215572ca995b15279d58ae9ecf9bf46d3b394528a63e1cf42935dd9eb97b20a4895b92aff975717be7a58d10e093ba62b5c888cf0c90b172f5ef0096b017385cb96d398a12d42420fcb48d9d57ab9b49ca982948fba7c52eb4815e3ad2db6caea6145482dd5b352482cccc101da071eb4d6c8684baad7154147fa9465d9b543809659a955eab5b314cf565946f30a6aade95c12a7b5302a64aa0ccb3da99555a962631996b92be3afca30322a690dcb95d6742899a435bc811b18390a969552fd57b14ce711475a6bb0bc7ab5b00cd9997de1d98a9d9f652b3c5bc15e5ae3ff6a8da75a61fef5b117b28b4b0b92b680c9147d395dc1648ab40c1579c15f4ed80b98a32123148abee48cef6f2dc83e5abb026ba9be481a6b4d071138b096ea0b10d0c9e5ca4242f7cd095fd9c96580230b5f2c0339b86450022ca52d7ca78c012a1824d1da211c642f53767abdeb07031f5a6b260c7000c346ca0f3f17b85a1312c24082f6734124ede702345a3bad5a013be03761ee75d6c9abe47beb80f757f8dacd48a1ae773300cfabddb39be61e61b73407acedd3b9d73e1de5ee511cf067d75fae5453ce659d506ec03aff9d7ccebcb5ce6e42b101dfd7b7be9977dedf7309a506aca1b46fbb9ddf7ca923141ab0eb9dda3b399cfa258cff09eef7d6dee1fcdcefbeee3dc1f4ce29bf77d8dd8cd57d27b8579e7fe7de7ba4ddb9e704ebf933f728efd6b3d6be09960eeabae584f65a2bbb265877adb3947ff5a5f2f24cb0d61dd23961ae74c2c931c10e72ddf5ac9cbbec1ebf04575da9fdad65fc49e58e83edcb47bbaeb9763aa3b604cb1cfb53e9aecdd0ed5b097ed3393e69bf75c67796121c2d9cb9724aed96efea24783e5da77d7edde651524970854fca781fe58f4afd22c1f6f9bd6f3fcc7a5afa3824d83948efaed53d7e013c65dcb96b09a58cf01db7007e90f2cc25e58f3e7e1d7f045bdae394da4e5effd6be1dc17ace9cebfefe8de038ffee6c6d7f0d61e68c6078df6f59e7bc8e7ed58be05e77eef365ef51f3a815c1115a289dcdf3bacc694e04bb38619df5de9c5d8c1911cc23b5916b97bbe6745f38583b0a23e73a3ed76ed24330fd4adf39b83bbddd4e4330e5dc4ea9b9ecfd4e1a2b8035e5f6cac7abdd51bbb80bc1f4edbeb1d3fdece4156e42f073c9bb7614e679bb837b10ec2ead92cbf936a453be2d08ae16ce98a58639bfe76e0782e5bc73f3dab9b3db51b7298079ce59d76a67ac72fe4f005b073b8c9be7b751f307044f7dabbeefda48a986ff078e1552ae357f5bda7bb91ff8efccf372289f9bdbee3e308d7aea9b6dcd525bbbf9c0f179bfb9bf47e5cc57ef8177ec77db5b397ca79fd503cb7c777436ebb7337c360fdc297ff1fbb65ade2ba79600ce36e7eea28d3a565da5c6035fc9f773bef5a3777ed477e02777d4f263d47bcf1db51df8c50d739d7b5257dd83ba0edce17692523eff257ca7e9c09c6f6aef86f9395a779f034b0ef5fee8ecf3cc6f97035309f58e15fed77cfbc78127cc31badbede6f9c17f83efe7d93fd2aba3bd9dc381afe3d6be4dffdafc9bbf819fbeb3b7ce98a5858f4700bb4cb5cd515a1adf3aee06be1bbedabb945acafcbb0dece6751576a9a58cfc6a3670863dcbf8fbdefb32ea35b094b53fbfda6e582dbd6ae03c29e5ddf1aa5fb5dd4200c3fe9e95afe3e3d6499b1f80337dfce9f97adebfadcc69e0f8a08b155a7ee58b1566347095d1ead8bb7576f2fdf219783afaa2b6b1f37ba57bd90c1c298cb9bbdfd34efb2e9781ef3bfe647f3cce7fba9381af8bd3f6ce257ffbd13e0676ae5af8b8b6935ecb5f0cfce4ee793a582de5f37e18b85fde79ce5b777d9f7d30b07e1f25ff9bbba5eefd17585e27a57dfcea4defdd0ec07a73a7a5ce34c37ddff602e7f81af2cca3db575eed064f3a67afaec35bbbabba0dceb5da6ce995f3c1ab7317f8f2dc21df956e69e5cd5ce00ae9de5dbf2ee3ccf26e816d754ef6fa78d49373ab05de99c2eafaeb75d2c86716383f9de5effefe72772716784737e3a6d2bab77ace7b05eeaef75edf7efbb8a3f25a81a5836ff5730d6bcd1ade2a30ecda3eebb2ecaeeffe2e1598df6c79ef4e4bbe697e770a6cefd4fad9b7f5752eba2b05ee0fa99333ee97af7e1418f60921bd77f66ddf4381758d9fa17c336f1a776783b984cfd21d5fbd5f737f024f2a25bdb4baed9cccdd09dc61ff78b3d3325b6a7b13f8e9ce0ed2b7db464dfb1a5c399416c67a337df77526308df5755da37d6ba3fd2530d7d3f1cf7cbb5a9d7c25f085b24afef2e4ef74df49606af5e3533e9777be3d2381b97d99f3e76aced6f67c04becff5e7b253be6bcfd9089c35742fdef85a3eaa6d1198d6686da4df6dbd725722f0a673471d6f872f464e1b80ed8cb66ea75ddf31673a04ce3047099fce0fbe4ba910d8dde9f85369f7d359cf20f0cf8fb73e0b2710d8cd28dd8571ce7b65fd014b6a23b50ff9e4ff66f4016bb9bb7bbab374b57e0fb8bbecf84be7787dd5aac194d21a2bd7b3db0b1fe4014f09a5cb7dc2677776c0996f4e75b6f3dffcf7ec8e0ed846ce69844efe8b4f9ddd610086f95e2b73efae3ece7bddc90167ae7396f63be75dcf5e7770c0575e0a5fe76c29a5faebce0d18ce679fd30b75b696f3ba6303d60eca1861e68e6bad77dda9013fbf71f32e75ef7dea5d7768c0f6a9a3eebefabbdfa9eb27783a3b1d755abf7c67cdd5130ca9ecefe0677e6197b976829de536da08f3d3faf3564eb07e53beb66ebaac67bc7513eca2fe0bab7dce61beb66a82678436722de9bfcdbdd64cb0cc36737933ddd0ca592b2698c2bf8ecefb57dbb769bd04dfebf88df9f747fa90d638d8c55aa58e333e9d12d26a09863dee0c6bed77720869ad045fab2fecf1f29adfa4b3528221ac0ed647dfe57753d649b07cb36aca2d871a6ee9aa24d86e0ae9847bdadaa9ee3412ac7785db5a2a35bf7c760a09a6d9c1b87b76daba4839bd00ae6e72e9669596f32a37b500963d47ed2277b1cbb8357d04effc64bc12f6f84eeb4c1dc1b4d3ca7be45bf30c75a68d601a1f8f9de7f79cde365346b084db3afaaaceb64e9ae922d8eef7f5d5fd6c8ddb65aa08de7be6f9627d534aca2f4d04e73ebfcedbe3d70ee5a588e0fb19cace2bacfacd4e291c6c7b8f363e97293d04cbfab74f7b79a78f5b4a0dc195c67755762be3f73e6905f07d8f3ffeb89e5bf697b4107c5f5eaeef3baaf59492128233e4b93abd6fa7b27fa483e06e9fb630c3d8b5e3365241f0dbda7f521b23e53c3f1a08eed1697d3bb4df6def3f2980fbdc56caecb4d5b3f69f13c054ffe4faf7953946f713105c6b75eeeef95ac25cf9fc03eb992db7b6c23cf9ad7cfa81f5bc1a4a7d25bff4279f7de0df0ed6ed22bcfd59c9271f98c2cd5d7cd4493d23e4730fbcb7851bde7ee7e4f1f1a907de79e61935bf7a67aef7cc03ebfd6feafca87d79ca3d2580659d3372fdf6ef7bb8271e38c3a8dfbdada7dc6eeb7907be564af968978ebeb57ada8165bcb73a9bff5ad7ab9e75e0596deeefe4e5d6baa8271db84318f9cc97de39b075eef9ed4ecffb369703c3095d9457d7fef65f1b078e916e7bedb4faf13be91bbc73ffabed7cc9e79e130e2ceb9dbc736d7f5ffd06b65abb47ad8dbc67b86304b0bef55d9db9d6b66f08ddc04f39fd0d5decbcefde06e6146e78b9b5ba67cbd9c0d34997abce79ebcff1ad81e3f77d9dbc36df5da19b6a60fe748c17de9fbcd28700fef8b6d595665e9f73fd01b8efeef26bcb21d74f3f0d4cabd63076979d7dbe391af8693d357fbd67b6739f811dbf8fc3e83687355733308cbd7fbdfd5d2b7fee32707e2e5207b3b67cefa7c9c0d6ea2cf57b5affcf1f03cbeb6ceed4c29a1dac590ccc9fe6fdf6cbf6d5586d183857472dcfbbbafcd982817b7edafb9cb247d9eb17586a5839dc9d5bfbd401d849f8609efd4228a7ab5e60c8e9b6fd55386fbcef06e7a7dda3953ad76b9db30dd62fef6fe7debecb6d17b8c327b98ef137dd717281b9db76eaf75cae37c6b805763c4aeeaeb514f237a116f8651be3d53cbbbeed7d320b7cf58d50d6cd9f8d933e1638f647dd8dd2bd0de7bd02cfd75dcd3b4ff91e526e05eefab78ed451ad7fda2a70940fbeca1da72fefb9a9c0f1a5de72eb77b9cd534f8177acbadf6bb37b4af39502ff7635bbdc75a44eef2870a79f6b847666f8788502f32c63fc2afbb35f291b6ceb8d37eaff3bb99ef609ec1e7c5bf3f32a61e64ee0f7e47dfa6aac30725a9bc0144eda617e71e67c235d83ef7e75d3e8f28697c3c904a6b73eba2fac5dcfbae5129873a7ef9c37f6cd9d5602d72977eef671fb5ea631091c9fe48ff21b679eb32381e7a3b53f1bffbefa283c02cbcf194248a9d3535b23707ef2f6aea38c9376f98ac07fbbae9d4f4bafd499086ca19c34bbef0fb5732e3600cb07f7e559c79bffd621f0a5b6bb6c73ec9dc6d885c0ba4aeddc67993fbeff20f0d3b6cedd758db7db0e04be3443db67ef91d75c7fc0376e1ae74f6bf38693fb8033bc75eb5a6dcffdbf073cabd3d4de3ea77697abc153c3772bd53d7799350ff8c9daabaeb3667be5db3be0f8f653297bb597d7ae03762ebf7da7d6badf373503307dd9d91df38577467a73c0704afb7346a8f59e1d073cb5fc19e7e370fefc1b30dc516a3e77e67c3e6d039e9c3f3ba9ccddea286bc0f7bd7cb4f258a10e0d98562deb9cf027b4f152f80976f3cd6ca3953a6a7d23f404cf7f90beaba5b32fdf083bc19a47b861bd93d6fc1d424ef096dbbeeef4ee072f7d70134ce38c317ecef0da271fd404730b7bad99bf9bd0550733c1f5ffc63bf353db5dec9860f9303e7df949bea5e397e07ca3e3bcbf1cf9e656c7c1d1d599e5ab5f7bbe505b827b740fdaab757477f25b097e4fef8e114e29b57b9712dce98befb91cbbbb37da49b0bd5c5a17e7bdef715e25c1fa9f8b9b42579fbdb9be48b0ab5d4eede4ebdcee4d1f24985b4a2dd73ad277012ce7d5b6c2c9df8b34c667013c21a4d5c90adf3b49e17b0467f832ad5f37bdf0f2f71cc1b7f70d797591d3b7efbd4630851666e8b8ac56ff758f115cf79c51d7f91e87b9f745b0cb7046aeede749a17e45f074afbebdd07d2278db27e3ccbafeeb1c119ca5bc0ee6b7b986f3391cfcf74d0bbbcbf0f1fcf621586f38e7966fceebea1b82a5be70d30beb7e9d7905f0bc2fdf93bad2fabcea42b0767253e8decfaba5bb8460c737ddd5e929efad7d10ace1db39cf3a6977390b829d9b50de48a37650d34030a53bc25ca1edefea682980df5a6d2f8d33d2fa760298ffc77ddfde9929941510bc6bde8fdeedb8e4bbfe81ebeffd76d7f7e3e48efa81a9b6f573cece65597ff6816d8750e619dd577b2fe4033fecd0dd5d77d5d6d93d70ad93f3fbf9cd281fd5033b0739b5f6ddf752bb9707eebd4359e147f8744ae750f561093ad2129485a96f9edc9300be7adbf97bdb69a19e9de38127d4b5eff876e6fbca3defc09de777b3b4947eaccf5a9349522332a71672ecc0f2d658e5d6efe5e64ecf3a2e94bbba7c3b7d4773a483d757e9963577feb04a97330796d5e97f07dd6b7d1d9403eb7c698d1b42aa237de7e2c0daf6a8af937adb9f50df6944e6e425e70da6fb559a9de3f65948df8ec181e3fe4aafd452f328ffe63770df5bdb3a6de4b7bb4c73228033b4fd9f9d99f39773dc909943f7f767dfb5cf47d5276975ad52b128a70dfc7aac3bd3af133e67756403476b9d7c534b58f9d65bae812bccfde63d61d55dee38d5c01d72fb2cbdd756b9f37310c015561de9eb9bcb689fac0fc03df2d9e9bb33462da77d6960d8edd695d27fda5afb321a78d3ea6ccdbc3bee36ec93be33f07593caf7e4a3f72b87cfe5026306aef57ebc9cce47e7bbfe29a5cff27a342d2d0ac82903e7791f75cfbb7d5adbaa25ed6672c8c06ffeed7c3afdf4cb91c687ca1903f34ee96b6da9cb97ff9cf6cbaaf5c26232994c2f5846573116528e1878cfbfdde9dc2fe5db4509c6646abd3e0dabc53299563116352273d23961e0a7f98b11caaea1bb16f20906a6d6c9fab4c35ce97fa4a7fb66ce173877d7f9a3b352c9a3bbfbcb0bf6e5bdfa826537c7017857cbf3dd79be8fb6da0e8bdd0cb6ed0b96c598e3059e2f9febcf53ef6e238527d6abea5b72b5f6e433167414ee9d1e14511c80237d92cbece69d96eb7a51f5398845142f30bc5cf6d735ddb4ca9d2faa3e377846d99d9daf5277b37c5ba5f31c51da604df5eb71c797946bfaae94224a1710d20d33df2f4ee8eca3ea4b6ab5502a9e82300251b8c0d7caf7a285eeb9fb714e11650b9cffdedd6fbe9dc358dd44d597a25444d102ffedd5425ba9bdf1edc8e2428482a5c4642ad5501051501051501051501051d097a0232d41d2bdf9a264311db4af531a65ec8f473fa2608165941df2abe98b953ffd2bb086514707bfeaf9a4733c8d2856e09fb346abe17c3673ea3aaabe4fca3039254a15d8d5bfff37c2fc56bedba9c0b172c867bc9246b8a9ec53e0a867a57d3ee4d3d2eaba14b84bc8258779ba1761ec51601eb98df7a1e40f05e699feb45fa3754edafd6cf0e65966dedf6518addcff04aed55e57f58d5b7f94fa9dc073de9ffa4ab8e9fc99bf099c7b76d375687774b0db5f83a1def9f548e3db4ce0a9e9b5bc772ee9d33cef25707dc91f4208af8b7dcbad04b69a669939ecdcfdac7127812d75b4f2eeeaa3116ab791c0915feaeedcf9599ea1db47e097737e73e7ce69dcb56b2330b5d2cd6875ac6fd6c8751118ceff5d7be7b9e799ab260277a85f42f894c6da69d50dc0555be8e69674ea21f0ed59f26de5ed3b3aeeb410f83af824871aceedb4bc3908dcafa56ff60cdfde7dda0c04ce5d525aa79e945ffa2fff80ef75d9d5281fd7f0e15f1f70d4b2e76c259d594a9d6f0f98c60e2bb4ef72e6eeeb5583f59d55e6bab7db59da7a79c03556cbf7beee6e2d27bd3b60cde1e499e6799f7d0dad0ef8d54eade337eae8747c9601783efe6afcfdacccd9dd1a25071cebc779e9a379c6cb698d8203ae9cbb4dddbb2f7378658d7203ce375fa9e9d3b2bff7648d6203de97cfa97f7edcbbf258a3d480eb9ccfd1a77452e722a75168c072eb5a759c1c465a21a79fe01e757fa9eda354739ea72758cac72f94b0be7e79b6b3135cb5dc39d70ea1e5b46ec909e6db5e3af9a33cbfcc596e822785f63dfbec73b7d32a35c154f75e9fcc9af2aaab9499e03ce78bcedda831c10f76ea7a84f7c6bee9bc0473fede513ba9d61ad219e3606b21bcf05ef7f8b653464b70ce3d5afddb715bff7725587ee470d3682377b36b4a70b7bc4efea8d693604da9aecfba9753667925c13d4f38abe4d1c248309535e697b2d67e39bd0f125ce77ef96cfddd37956f5f80c639ebfdacb97c19757aefcb7c16c0163e6a1dedd3fdcb355a5b06cf23984e4721d4f0e6b9b58c998ec1e30876194ebbb7a4553ab7ed9eb0117cede5355f47f3be7a7e670457aa9f7defed28259f9aa2828e50e0aa544cc24530e40fee0b69e652114cf7967b7ebcb9677ef3bb46f0248275ec536efdcff5a48f57227810c1dd72a9dfc7b963aeee4d3858c37ee73f4b7574f7bdbba721780ec17ce74c6dcc35f34c637e547dfcf44919061f8486e0a95fbef66d086ba58f3e93c96472eff4e4ab00ce96d60ba3a4fd664b5727952a9f6ea6520d994c5952ab857a58f01482b9ae9abab92bb4efbeb662f01092f54348397f30cffa8fe2c13308de16dededf3daae1e52ee620a220a2a0a1a0232d604ca62f7804c15ac3986fed915b27e7f720a2a0232d41a6f74e2f69b7547a068225cf357359a3bbd43d1d2920a7834fe7bb2d8fd465d33b3d0703e19900ae13ca77f1e9dc9c77f880602af5ec52e7df6eeef8fc0f5c5fbef372699f73af5df6033fce6dedb0c2dc63beb9f681dd864f732d6fcd5a67cd07fe092bbc1c566d2f9559ee811fe757726adf9b8fcbaead0411050d0575d122f5c0f63e79ab734f5e4edfad79e0ba9d9bd3cacb77ac7c5348331e0960ee72b7f44d5a69a7175a5496b304110519051d690932994ca69d32b9777aafe7f95174a72a1eb85239f9745d6b6e39a53b53b956a915cf1d783fae5fb6fb56be6ba714559f2bbfc4d881afb4735ee932acdb6949ebc019d67afffff6cd277d6e97e0a1033f97f3efba73b7d74d2951a74f93cae6c0d3e69bdf3ebdeb83973a547d2d180b2bc12307ced63d3e257f5ccb7e678d03cf98f5df18777e3cbaeade60aeff52a76fff1efb8e100ebc67de7a432af9bf81abb6314fc9fbcdefa3cc11c0afeaa7b3f2b89fbe9da71bb86afab346a761de96cbdc06be9bda7ce5ac32f2f9b1b281f3d3cde3b49adbbdefff1a78ce28b57e10461b25bcddbdd37b6b78d4c0dbde087fefcae7ccf26acc03015cb78bf4dd2a2dd5f3d6598fe07900e657da67b79daebefdde4e034b6adfbfc82f77b0f77add0d82070decaebef55e5ae7e6fb3df767cec051ebed7addffb6750fea57ebf5c2f3071e33f0d3f9aebcf152a9f37519555fabb34c267b7ad4079e32b0b5f161af3fe9ed50de8eaacf6e1e3270e437dad8f7a6dc3e4739aabe68634441415dbcacf618a2205e6432994c415db40411994c5db44c097592e01903ebfc2895b55a0eed8b5ac32e5e8282ba68b12f984b89478c982bc31306e6d6ea78bfe6ed7ad4d9d2333c60e0fc3a3e1bb5b351dafd3026613c5f601af9ac97df27e385155a07e0ddaffc2779e48ed6cb21f40253b875a7cef558f5a6b6a2ea9b71061e3738cfda6f7dd85fc32b6f46d5f7f1fd2b96b1307c967ee16983a973f146e7a0a6934efda8fa5adcb278bac092de2ea77bd1ba9f30fbefa7fdde44e2e10267aea57371ba6a61d69d675836bbe0d9023b1b279deedf7dfaeabfb04c9a22173c5ae0bddfe9ae2d77fdf78d0e55df2a95551b662693835bf064819d9433f2faeabe79667a915829eb050f16d8c5b865bddc6aae39dcef484b107dc15c3c573cb767a49cf23dbbae5ca5ca26d37cc15c3c56e079a975996fa86fde9d529e2ab095595bcaed7b935a4b69a4e2e78b595b5eb59cd7dd6d3241fa82b9d2f04c41a37cf04a09df8c93ce0aaf9c91d2c8dd7eb2cb8eaaef858741472804bd804d26d76a6726536632c53326931199530e0e3c52e048e353f815721e05ee70d72c6f87315b2e9f45d5c7e262329d582d2870aebbf75ca37575efba1f29da1a9f119953093c6c70cc975ac9eb8dbfbfee8eaaef3d93c9641a72b55e574ca67c7a2f0b9e27f096fbc618a3fe3e67ad50061da11064f212441454c48aa1beec1475024b3d63d45b734debd691a3eae3d764da596a8583884ca61c1e789ac09a576aad9cef757d7dfb1abce5fecadfe5abff69f94c60faf72b9cd371f9f8ed77096c6594934bbdffe6c7a733d291562332a7178f12f8becb10de3cf3eb37a3b3647892c05ac2d9ddfd9eabb4f3724991c05972f9f4bcbdc35a39a5301e81e7b53cfef7eaecacf4c52a8f11983b6b23b70fb9e4db3a6932994c63a61199d389a7082c67b7fadda79008fc4fdf86eef1af974b6a024f0370ccf576b7e9940fabeb15555f64618a02cf10d8eeef4fe3cb56c67f752ee90b8bb95845738847084c21ed37c309238d2f7f10d8c24a79cc35ce7d39d516089cdd8eb1bee96087bc4afa03762fbb9de3b48edf4eb70f38e6ca2dd570df1b659d8fa7076c39af9fb775fbf2ea6a8b755283f37e31432bf9bb4f75ed3c60c7edf3b86fe5f965dd3be077fde17fccb05aebb20ef8a18e7566f8a474705e06e0b85d9d4fe57efbfeb639601d7b9433e66a379df63d0eb8cfcbef74ae3ff8f6d61b30e459c74de3cdfdea2eb90d3873d96f775d6a4de5e335e09babfd0ba5b63c34e0c89dcb6f3e855b6a4e3fc1eeffcaeffb1d85f6d1ed09ae544af7f2d655f2fbe0ee044bc9f5b57b3a68f3ac6f7382ad8bff2f5de77a130c75763cbfbdf2c218b9d604ffe355ebbbbfbe86b9ea4c30cf1dde6aa1ab1a13ec2acff5e9b7effd7df92558bf95565bde39949ac7c15172fd53ee4b2d7fd312bc67cd7a3e0be3bd2f692578fe769c727b67b73dbf4c09de8fcabe617e47f9db3c0976afee3c7586324bfaa824b8ba1a61eebbdeeb3a9d37126cdff7b73b7deeee730b09a6b3e64df3e53af75aa5bd00e6ddee4bbf4ef96f766d014cbbbe16d6d7335668f32398733ee3ad7757be6fad8ee02773b7755be7faa56f36826f841dcaa7bbe6f3ab6404bb3de386d5f24c5fa57011ec2c7dbf75eeb267d95d55046b07e9db52de979fa74e04d7bf5ae6e86074f09d45044779f3bdf2499df5db48e1602af77e9cda0a1de4761f8227d5eff668bbed3a666d089ecf76cef3dbaf3eddb702b8f7196775d2e52db78eb310ac7b8c944afab285af6742f0bbb0d3ed1e9d7cde6907c1b0d22767ccf39f5b4905c177c35a9dd3ee5acaf394816099af752fbe7efa75fa14c0bfb9a4b7c64b797c29e304f0fbfdf8e557579b7f3f20583fa7a3953b6bfdf6f23f70a795d2c9797793ebbcfdc019da1c6bbc795269791f58769e7b957dd228b3ce900fccb37436c29adf3f8dbf07bef36a0a37977253f9b41e98baf9aeeebae79dcfc23c30d4d0fea4b14fd969774f0278579e1dffcbf9834e6e3cf0cd39be83b2c7677bbd034f5ae1957567faae8eda0eac1f97f3c21caf93f0d53af094aed7fcd159ed7ed38167a45257f7bceecba39c03c7cbe3d47cf29fb65e2807b6164aeba0ec50fecccfa1ea63bd6aff99fbe6e9649f119913162871e00be17df93debb8754fdb37585b98ffe5fcbc65e43fe1c0d47668b57514c2abb97c6f609bffea0c3fbb4d9de50e551f12eb794562a596ae506875fa8012014c6977eed9db5fd29a5d7703eb9a259c0f2de514be7ba8fafe5fb0d37bef5a3a922fcbe1034a1b98471ef77c164e0a23fccc06def6fe9bb0d7db6994baae81e9bfeddbf1d7e3aef327aabe33499652008a1af8f12927a47cef0c29bd0f010c63cdf0527925afba5ef9000c2f9f51e7fe3ea2ea3b9374eaf95527f9c2a830a14e1d50d2c03473a735efd63a371f4703cb38e3dc73ba4b3b7cbb9f81f9c7fc2097743f0769e766603a33b54fafcd764a1bcbc07ac72b3bec5b6edd1fb464602d77bc3ceb2d779471ce31f0731166cde1b415ca77a5183852fbb29d4f7baf2eea785599f5e2c29f85868bad8fe6c4811206ce513f6ee59e4ecebcb906035f173bad363aee9eb4367f8179d639764b378da8fa4e2d6e5b80e200dc2995aff2edf2735cc7f70273cae1ecf74e779db33cbbc1f04ad725d7f12bfc7791f8bf7e35610b4a1bcce9ebdff5d354da7ffe5de0fbef64b5735bba61e5910b7c6fafbb5f9e6b7c2dffa1eaa31dca1678e718697e5ccad99fdd5a60f84ee6aab7cb97ea5a7716f8bb7d345bdee785f9aaf2c3b253922aa68fb404c1941ec6b2721f0a16d8e5fa5ecd1febee5cc7bf02437b9fe3b2f2df56e0b8ef75fbda77db6ed7771598426eebe50ff97c32fea6027397297c74c3e9a6fdb9a7c04e775de57cfdc11c2dcd5260db73bffae53e5f8d13e628f0bfae4fbbbd2d1458df7d337d29e5a533b3c19343f7df617e0f4aa9e91398d7c9e57655bae7b95f27b08c32ee48f5cd3d3b5a1daa3e24d6e93d12c7f9b510058509220a522188280816db6232bdfa7b79de3232994c26937b50670d9426b07315c647abdd6e5afe6bb09c5ac6e82a9ff2bd7e26f0f319a97e95ef79e5f325f0ed306b47217d7cc69b95c0f95a6a257c10e62ded4d02d3d8b9ee34ef7e637417093c2db4f2719aa9dd13da2370cdf349175faf904e5a8dc052be6721e435736b672d02c3b9e57d336e7af5cb9308fcd2bebefbdcb076f9b20158eb6af3d4b33ab9e78e436019f9a4cf6939fb960f85c0ef41c9dded3443c82dec41e00b6984357279e194d4752070ef953fbd7977b972e9fa0f78caec5c8c10d668b973dd07ac398d79c76c1dd71c7e0f98bafbf2767f9d9319be1a2cabbdba572df9bbbb721ef073d6eefa3a971d52be039709a8c44eeaa5a13448510c832000c09071470440033314003040241a8cc662b18822ebe307140003457e66b0382a1708c4b1401406410c84300804210800000cc020084232b444631d8beaac2e00bab958841852b068ffa970b87d558eed33d92601753b5cd03b79b7b1512fbd9848ece40f8655de801789036833d1196c35da1ee7dee52bdd3c1b10346c973db80f339070ec1f289d79b4c54269465fd597c037b481544772f5ac1ac84be229a3933e229fc2d80072cbe34c2df3fad89cbb2d03e08e3e22c41d4db2be3605caea93c68909b379e831d0f416d97d3e5893695fa8ded7fea2e31543dd37e7e4b1d4589efe5844893db573245f0ee26de1d5f15fc22207bbf4b92c69a834c09ec1e79d1c6205cb50b70b80243012001ac0446f08bfecf0ac262212a8129709c964740244623269a9645fca45ec0d605dc52ee29631c958757c45ec1a938a47c540c626e3d6f18638c4d863dc39a6106bc657c5ae6292f1c818e8d88471a3ee2684953970c74c6256b19e71d5c492ffe708c1472b8ac7e0e97996c5e11488d8f411e38d4ca7c040a2f7398b03c4dd9f59a0c5980446e289acc29c020071baf2169dbd37a0d6370acef810b02fdc29ddde6e46290f3364610a8497d9c4a88ce22f12f5db0d70aeeb832ba06e7af2ac0d3ad6c0d5ae46471921ed43b61c9423c4fb3df77882a3dac2360a4df057ce6839839f328d566bf05f72dcd9724541d42b2c8e9473d7cc18cd6c40f1a305c0208531560f4cb9e8c78c96722db34403f3a62adf7de0c9f99a5436465fa32879863d6bae274a65a6030bf9f0d7ac8ed0d532b0ea40edbf9829d64bcae3fc08ee07dda14ac4e220941cf57b4c1a8ecf08f771df72b9d65459c5304a78ed7aefb4b8eed80404f91124455359aa31e8699bbe6e3db43181fd8e3ee44df11ab5f1926c043922521eb9065621702921003b4f927eebaa57debd01319850d33f853562a5abeef486f9327be56a26eb974bd7f6e564644a80ca0e5dd10f2e1ff97c99ba5138e12e3108f06797e92266cf029dac6d8d7feca456994ff70aa01b8283bf548bad435e0445f287a7deb530d4857572f2d85a01370b4a6182d03b492c2b54a7e05d85311ac0905c51f6b63339ec2e512bb31c1eaf9adb6876f49e3372c56cec57c487b7f84ee0c5142f4af63709eee639b188f52cf5b83402ec99ccb9d0f4fca3227e3cac7440fac2bb431d42b92fe0f1ae89681fd35f678502111df3596f14f5d2819ee412930787ce2a6c7bed3df16ae056a95c7f20e13713bce62873c2abea38c1f9518dd343bdf8ccb107485bb3892a10588289850ae6a05567bc34605f88ba8cecd16ca14a6c85eaf16b2b5a85e64f178b0a12d05a56b729924233a7b1f5eb30aca15261981ca19f5cdc00c616349014932708bce87a8c55e418600eb0b21f8c4c045d853556baa328de82cecc70375b710ac3f10a7cc57dc83b20968369edec9e99570e25ad092b56c0c86c3a01f72d358de02e5ea0244d25ec2812da446c48f8571d21149355ce01c98639f04c9ecf94f4b19486a93ee9a2a95e365ab046a8133d6298d121005169503b3a90de4c1fcc72100dcedabf6df27fda17433f5676c4ce3e84021cfee321f9656a8b07d79cfd97fe8ef3e606cc6148f7b9322c5c90331b04699714df12dcb476314422e9255fea0f23f322489615eee94897d904bd4081979116c3d12580ec398516275e60714d97dbcf63e3e91e7b64abd9eff89d2a50a39f13ea816db9380e7385b67e5f07b95c362f1e0a2275a2d6515636864a2cb1c13801340965400a7ff222d5738c5cc3539f0db54946caeb4a599a5c76e1ab9ba66d319c67711613f349425bd0c5b2f7090f686d1030f9d206249b74692dc4d99d7cda48db9e81e8ba4c5d3ba495933e1ac9c676325d0bb7bf600c96154c3f7188c2fadfd13d5b365e642c1eba1f4c2e702d636aff087574c0381b50178e924a49a0761305de09bba7140d28fc46a33e45fe64fafe0acfedc7de14ae875aec0f6ccd731c75113ae009400975328d73b4ad9e9ae7ba4ff5d3c078b4f15622e4ee483af7852dc15d6266975c98b887d8683e5b715786b194fd91a8eb88bd6502f9ef3de8a0788776a2aa9af51b4a0f6f6213489d4aa6e71ce752a1a1527638ed14f78d2703fc00880ad678037a7d3dcd703ead3f946ce8947b0e5712d89828b11408a68c385366e33b5cc71436d17b863b9b5ef6d4a8d84f080c399d8b21afab437fe7670169789fe7e544f92823c686eff85e4f3d40b6a6fa1138dc3c3ecf6765b2aa00560a700900385dfdc60fbb2728134abcd1231484b2fa1a150c1dc977088a8a76ed2fc321440e24585d7da468e509b05894d1102fe4bdd387be16a89d5253d2a2c879e5b26dcf6a23663507bb4dc420bce8d3e071e47954f8a39391212068b11b4a3b5d748b58a5a717a2fb23a14d28bed2e132cdffd8a66b6e1429dfafdcc2f0b24c895176a7a3e4fea01984af9cf1d25a23ad5c7a2b09d4fcb275b38c4b68ab46dcd69f1055f4bdd28bb78466959069e412a9d6437627c02799d29d98ac3ea2396659eba4ea9c2729b3a9ff9abc0f5e5c3bd336a5b9d2c4eb946e4ef2ad43ab534f98cc6cc32d591b4efdd4f47c66f15993d541de2fc9dd833693969bce57cd7de2654a756ab376464a9995f59d852fa52fb21e42805e6b2062b863a7885e52647a278bbad253d3040817a5aedba1d419a204d500f2c1c7a10fb7e73c6379052236a7975b962472f1ca1944bfdf679f74c0397e6584aa786738eafc127414928d2869af5549acf5d2dcd83b009887a77bdcfb48769c1e18511e0fead5f1508dd694316445f82b0968fed8a6467f7a73f41058f78746db9365666243b9db5b96beccc68ef237a08ce9a6dc4f14f6ac4798f3bc8ffdbf236479e9442a7232ef1f64be3fbe93619686c894b825b2df6addf1c7b9913a6ffd2ae8d0a5955bef5a2e261ed913747777c0a508d5e8a3aac488b9a389e59f26979d591ab4a1c6dd66f5d227716e3bd3e80cab2f0160dacb1f8d86c6750358041bf83f2c0cbbbac9355a0beb8905f5a005f5dcc27a6401eb4d0b838c46cd6ac7b1905e68a0872f343d7e8611286df1f2ea08a9b601baa38f0bdc6ae5c03c8b27919ab346ce381ea0d62e7c9f90ecd8fcb21119819086f4c3246a172410cf9fca11e6e2390bcfe09bd3d13a434e3677e7087899ad32154a32206b75e8c1feec9c016fe6a3e9465d2c570d194e32d19d2200c946b6e9d882eded5e812ea6b3f98cbe598ffa33e66478978f482bcee8e322ace03ba41255a5f9ab0e9322b4406dcf8a0bea1cb96b0e9873e059be211d53b645c15093c81e094d0f15fd27f039f86e1d90eed455b9c09c33669786408c936d12881e55b42ea46beaaa9c60ce99bbf0003e279dad1be418733b162c3581ac93d0f4105155429d93eed60172c75c9d0be0397c36dd50c7c85973c2dc038ff285b4265375129a1ca2ab045c72062dcc818f49b775815c63cece09f01e3e9a4ea873e4ae3960eec0ab7c413aa7ce54bad6204754e56a0d27c6360b9b94d575ca1db0bcb14a26d2d960489bd49377ca30928fee398920257dc9749a88f0d0041419e52673490ab49dc82689482b9d9720a7262a872240dac86c9a967020d3496ada449c8a567d36d7066ea973429a92a8534a2e49278f681982803c23a5692e71818a536cea88142579e9734288e4900768c4089a487cfe63d20493cd9c8537308dd1b5e704b60723ad0c694da64a29e473faae1ae0d199b4f0063626e5d605628d413b4841f7394639056c4ee14d09d41db11a2b287352dab241923167e704680f234d182a1bb16a529873e05d3e20995369c50693ccd8c20cd89a449b49a07cf2d13641d1f179c7008887b1a60cca1c496b6e1863205a4621e14ca96cbb016fa239899c210cc834729af61219ead0e57c659fa3a7fd9d730c3ccd6632cda876508b537c8e1423a9492f9d8120af9e6b793aeb808e08f8e13cdde49c64fb30229599ae2b4b04a5416f72810639bd644ae594e3cc95b108b1e3f49238e59c188a39c55ea85748d17fe4a8c3aa111423222d62d61dc0b61814326a0dfee91419f5a2bc50959b937f6a433a33545c0d5220b423e5dc098978d3a8e93efd210441b4cecd3983794e5f96ec5ab3c9adb6cb7d30e3ef7bc004bdec108a9e82bac9ec8a0b49cdb9d14c71d8e2ab77445b59028b58606dd8c02bca02bc8696f78252f059f3624bc049c75ff678d7d0d5be5c440b8e687905d42fd127e5371838964d431ada9117484a0d8d2d1bcb38eadf1cba0832d0bf0e1ae02f9267b8538bc03890a131303e1295cad4c024ffa16bbd56a41b4d8e05c7a6c55e09a790458edf575e4843f9a3e8df2264b248fa601588097e37937c430bcb9a7f485f5e08fc29bcb2ff2d00a0ac18e83d5a9bb6363da917b8a708b1f260fa9653a8c7cfe964c7176d69648029de0866b761bd194b03aee5b000a309523fb0a128be8d08c32dde9aaf8d0f310f0b05b1e8ba6257dbba4bbcbfc16af0503348e1ccb2ca2ba247ca799443692f5a648235a11cbc003f3492944a2c3a646222238bd2989eb1b710fbf0862f793f0ce5a53f5db694978173d1c1089ea533f2cfe480300d5957623150411d5d9d008c5f0218106bb0685ab0acba5a0f4e0f8d8a3dd48b08c765e19d33a59f8b9260a010f3374dbe127a49e91b48bdc3c600e42527950b9270360a538054c0097aba18b250527d670aa2684c46233d3353457bfafca8e21844f738d683a7bd5fdde93ddfc3f78c0d6228edd6c1850c5fae41444b334a6334d498098518addc683bd4d3e6b0ed3bad0a3c57da30ad4925da70c64ddb25b9c9588daeda9d8bc38462cb132456b38c724ed075247f1f0e4e1a45de60718f35b804653d2457d56eec4ecfc3ad2b55d0b5d9908d1323129101d4c15f79c40372304d1ccc1ed3c0f5b6d83b9ecb82852195c3bc5c390dc1cb92bc918192736b1cb3ca6c284c2ef828523cbd2112d673d91abe964915e473f1d9b7120b34730fe19d3c776101c606437d49ff2a6a003e1a071e9ccec8242b9315d05fa82b548e09ecb55bb1786c1db9c06041beb4dc43cb7fafb9309c86b3054815a534dfd2f515d0a2d225298d0ed55d808b98d8cffdbb55b2240834183e843fd9ecd3fb419e214ada002aaac606bc1f5c9e7fe8be066eeab189525a1b2fd882707c1bec69e8e19c17d63a1c86866185dcc9b174e76d45444e66bfe178b887c2acf0b8a630832b279065a3446f8c212aca642b78c9813047832a015dc3a2c0ad7fb08a4b9a75b962d6c478afb0710e3efc07b4d4d298b82c96f8a1fd42d7dc15fb7bd806bb59af2617fb395dbea6f1ec35b3876ac02f12c40bb3a7bd73adc7d1aa17b905100e03fb90dd3905ebfd7e22b1ae9799d5942ba3f7eddb050a1b8f24057c6d1e3a93fe5923402f02fec18afc71c0e0ab8d02762fccd0e11239f8b990b5e0805f7072b08d52bf15583f89cf112c3b228c7f3779f4788e1804ac9bf44318b6d0d466cd0fb74e39f7382d1228c0f1403ea33704c9c25ec7805581c40aaf1a65c1bbef0f8448502f73511c66baae1ce5e4b3d01ddb53646c6478a3e1aefd63871026f0bd3d7879fdf1d76f8b3e4cbf1eeb947d6e36c36dbf5472cf134b612f2a1db37f1e8396e32bad437276ee34eb6b1563b1b285f12255435cb810a0d45d64e6824bad5431a0778c0169a6beb758b5f8034d8799921aef0dd3805f754fc72addbb05afcd13a9db600e2a309865953079265d1e9a186774199d1c89a0ccfd11d11a059551ad4bba74c66eec069da4db33335056675bd5ed37fa9b05e99807aef7736f4b557cd7172faccd445909d731641e585adddbc757398ef9085913d5bd0fd348c34ed6ae1dbdf6d43d69e39537686199994237c5bcdca2e170acecd7e7c721bb84bfedef11916142e0d2ff3b7440abf8900de9fbcb8db5a509bd9003fce915af497e0e34148b88a082976217433cff16595a5196f4063c13e69705fa53b6241aa6445a43c196aaa7a53a49a6f116ea5b5323e12284199ab01b42514d17d5a465bac4ff000a44890347400fd22bee2c897ed3ed09b063e6c8a02453e468bce8280d320706801db55c61c025b6ea7a970aaf63eec767bb5f543c12b87051259575368bbf9675d8191455f5ff106b839efcddfb4a1b03e5726592c5d66ad34bcee5f670f6dbb15c510412ef046346673b51c074dc8b90ae38b20a192a641ad24be9ba7858c65e7b646df1c346814d2803d98c2ec8b7d17224a8d5314394498d9939fce0d1125bc8a691b3292e62dba411bea1b86f10f57003de1fef1bc58f9aecf69dc34fe9d56cbaa11394e44305fc852c20b0613c512900f31b1766033a153f93f9f209ebfb6c59c908df47c90c215a82d7883b2036b47a3c25ddafee22e821bf8b2578aaf9b9da34dcce8f1ad6b98fa09c41018db3fb6c126294a535758a6e85e155e244c3cf31f05880ad33bd6899a8ee276dfc33d098b889d6d08cb84a24abf68751151bbee4a2644e54b5f2ba35e042e7382cb218aad62e4adf66a46f534c49878f644f348b019adc9c024396edbbf8d9878c90a545e3298399b0e3d7a495d4b75d3ed1b50525d75d25d349348a3c4a0bcd878c589181b8415f5f1a8eef4084fabba488341feb019d38462621830ffcac77e81f880d0b113e1342efb464687909134a0cc2f74a8e5c0eda93777004f610be2decff51065951182c55a8dfc3a6a4100e2b325b3658319920d53fa29a45eec3c8dc37533274ab5004fe25f506ed967e7e3256c995b163ee93dbf9ba1a27bd65c9e864c7e06485ec58436a6d7d746f796c467760a1392da1366fbc3aee797ca27e685d3f9ed5a1c9fa25f2d71c9aea1d96cd7b264c9b7d5ca52346bf426cae5cf1aed1af64c3d3fdf80a16ff496809ff7015ecbfc7b46f610fa06c17bd9b5125fa7407fe3cee0ec26a8b177f5e9e507ad68195e6887c3f1c264435695e8616ff9cf543f956cfe9041c88962e6adf908d84f0e8a79e098d5d411e7bcf8cfe3cffc9b52d9c3c56e195821bf26be92ed17a79a324f2a0e320b7d4d174f669341dbe8ed7c0183b64367d7127d9fb4e8cf7a3ee9002b01d6f527e49991e3b779247e24f84e79ded4a0ba4e125fc2046cc10a91c5e210d5c67cefec3f5e35b3c5d1234d138bcf940d3fd382608e59bd06415ab8482582d6b22838a364e6b08ca5b7899a378efa1bc10a751149ba155fbaa0cfe6fb681f6d73967e2efc3136d7e788aa8eecc49e39f9c307786ed088c975e8643b25fca218f92ed0b47368b94b9b48b6addf001802780c55b1a9a3e4079bd6b4890f415eb5699e42459f007c1c1ce72f921c73942d4d867d813e2983899d953243c8a09e506e5d0896d75341f8e3433d9606dcc5895cab099f2335f8f4e2c7328b6648128356657d6c295d0d88c6cb2216d59a2001d0e5decc9fe8c2a63e595532ac492458e11a7df7123cf9f1e9457be71e7242a5bdca0feb2b141e02777de123e53c9e9f943dfb120f9ffb4c5dd3f837988440c38cc0f9f7c67c23951207702982e6b8e7813ff84bbde1ffec31ef458dc289c3fad8a68cbaa8ea17c8de195131e89d826c60f4fcbfd3fba96ad87a1ff7f3568b3a459c307d1d1cc0d73d30d06d82fbcafbaae7d5cac4e33cdd08f7d04764fbc7cc6661d4145107a065bb2c15fc85430501bbd707f9afb4b4656b7850a7fc045bf6702df3d3cd37f1bfd319a0c50ce8009d9e1f0b6e92d81ab173ec0031d60ccb8a0c5f4dfce51dac1c0eb5b47bdee370eb6a4e74dc0fd40874fad848694f6bb0dd55dd4ccc5972bf754f30752397cf2df559aa02969eab617c5fabc3a99e673d10a7092d9220f32ee43b9f10720dfa7ed07dcaef299b9456b759b8cc59275bb737d7a6150b3b066dc5878939fec7159e23c860c338e18612c81bffaa2589228e0f81d5091811450ddc0316fd6e540a362707f542afb48a9be86a09b1133ff4b541efb087d725364fecd79f0b126148772b84cd6bc4fcbba7444ceb62d23b4bf9ea6ef00f6ec85333184fd1f43f586af7c43ef1d2b7cad01c8eb86149651fdb2c57fa48e6f2b8fad5c985383fc42fe7df11796abc5990f5474708eb2544fcac6690c83ee7d837e03befa3913de6ac6e5062064ec1ca0ff4c984e51782ad5448f825a3cf5b2e0900f2dcbb29c3d3adff827dae32fec7e832a00eec9962d79eb4ce75d6b2264603ab9c135ce767026049de793f7175019c3983aaad8a5945f9708dab586863709395b089ab77238498b63d58a49485e3b5ae955cb37bcf0005e990f594581f7cef5752b04cf334201129ea453f15b1fbf05e7ca52b32185e5ea4829205d4eaf30240dd243ae5274d29be51b679423757e082aaefdc26e437257b7929228b404b37a1e9342ed0c1981adc393c775db1c69ea85b82ab56f2b6fc54f2bc3cd39d7908eb9b7911c5db1a2115cb415338f01babfa25c4a1cd4e6934a2a000c13e57c7e999b638ccdc75dc377300a978c5bad2b910d6923b436c98c6354a938a1dc0802032c9edfd3bc863617917bc8008c2b42c06d39a1ac2dde5f0c06cd8e2ae53a7b0d8a92e969cf648c65623bd01fd77cc9e8507c74d98050ad114ac4af4a20463c972c39f3689ef5e17b1ca0cf338f776642a7382aa0811bcab7f7be93b4beb4fab8f460e44a58607dbd1a334ee3701d8182834422fb5d122f379c3c0a1f0eff2a9b6ce16d899e295c505b9f16289d2a3383e4e51fe4296d52dc3e481a81259a9482f98df64992d80792207c70faff1b43e4ce9d1b84c63753ec36f49ead553d95c9d53f25570976e57b3a189c195c4d6ffed6ddddcb677199e80be12d315719d2ae27712c208823ab3b795adc24901d0eb3a8787a95621329d32bb82b9ff0010e3778ea4248d4b402eef06d55847187908a0b7c25e5aa1135dc6d35e73e4d1d2dd0e8efe213afe16a8fa4b1ce9afe4dbf7c35e5c999a05a584c1bb88e87c060939a7cd55ffed0f8cb7bf74c692b7b2f7bde3e082f58dc0204e0a4ff4e8dc414889b5137286d78e6e7ce456b2b420f6e2e5ddf11e1586f1ed543cd7a39816b5b33a3ed5a154f3da19f4f628d7283297ecef98855490692f6901e20f9a9bd351f6771e5add560455673c33e39e7e0e1c83b083df551187bf44e87e202849bcdcd5e18d26c1e8e409745dfcc58928b78f5beebbd3e890af5718564a87ca1ebcf0333c91e91301a8ecfc4d5c1e81b191f1b8b6c23de4cd015d716448b00041a8fb8a87f2614b191e9cd011d9f783418d09446b91ce86f76d73f48bb2fd0fc503f2d02dcf0ca82238fb1426abe772d971120f34a4add49945d4ea5ec499747a9a195c6017a7830b3117423b875e7eafa96f3f917037d0f57baa89ef9e718e71cbdc7a0cf1f1652f97fc9b63c26d6a543030f50e0ddbecb766be80949fc8327821dec4c9b24dfb4a1c249b598f1c06d80423d17c29a181cf84cf493ba81e4f8dab9ddc3f9b4cc71c0aacc63ba9cb086225c5069485389a10cc5e6cadc4d6f0b803a253dbe351b8bdb5fc2ea235dd5e365c3478e5fa42a60fc12f0773d4332b70c69dfa3cca8bafa5ffd6f293f9ca150e010c3a73c68cfa190ad8acc6837f3eb6ef5e32d576d2eb79901d576054a3e2e15f79dc878a5ef90455921c178b0e303703c452215bf36cc98ea936aeaba23ba185d29dcbc72a49b64be6bbdf27eac466a2572534473c43f84a2cb08e2047dc4ea902623031d5d3205e49c582cdf01a2079a1a82406a7feadc78cbd35cc18abb40cdf12cf113b86b93e04f9dfb611f7296b1dba111fcc6314fe38ac77fdc93ef127c00dd5c5485a5242e5593dc926487fe7c76a8ac1b32fe5100ec796edb2f84ec5aba117edacb8a5183ced9b81b8046ce69d61a905bed823433738d6ae2a4b71277b764965bb6917bb026859a4cf54bc4f693151ee894e312b2f87294d650cdb8a27bb81c07c96a347ce8f8256360e02deff34f74679b8794e962f6978987a9cb30d36ef2fc6dcf6a240efe25bed5b8d45409d9dbd62297745331f74965fdce93957bc7446bc0cbe58c941061d86b1e70278fc2dee29c94764526fd7c849ed60b910961a13ec4beddf18d297933e12f2a41d7680a777a054f0c5a5104e208dff59d748a475a0b60e1552331e51e36d0fac0910c546fc89680411df1cf8469404c3e3b392f87c3884b0922d373778b02a8a8dcb00c7f2f42dce1ac8d093baab79dac6c92e8b0b0af26e364f8189dd37e16f5c7bb1270d4ca451463b6548eb2c0aa81c722d5843311be8164059cef94bde348c0b4ef0ccb429341c9a65c6512ced83f9183862ff20866c0249a3237cef8a286b79ba70cd85eacca1c744129b4f274a9a2a0bac4c6f3363d396c2eaae1be044a14251f8a7bfeddf23840464b556d050291bfa97a12dd2ffb00b4ad59ac326e695b78472bf8011d3c4b82255bf0512f3056830b76e8492d3457028bf6c0532b3256830b9659f78328b242643a287c4322b9ee60d14ccdabf3a19a58bb942f5ba3d99e50ba961f7693d59a58bb149ff606db9654ba961fd646bb2559b9159ff606b335b970975ed646bb25b1742fbcb626b335b9702dbe2d4dab2db1745f3b3c5dbab5655cdcd66d73585bfcb22d6273c3b538adadaee612d4cad2667089505969811b062196173c4d8b1e8b811d88009d07804d4b878ecb078d81c60c40a325c0c2cd07c38de78248131144e33084e2c267c3e25329a0231980e31070c3f2c869f1b039c09011d8e06562408a45e41b489ce70c676d9a3f0c174b4c061baafa725d43dee231943ce04d857a37b80e94637a4c258019b0429916a785d73e3a711dd9bf5c055a84d1b7c120be2b04c8dfc32507f61094c0205d5ce707ce2a47bc79252538a5970a4527b6015a4815322bccf0037182f206e2d1488313af9c235878f99d306e83de0d0ffb2ccd9729d59a81f1d987bdb6f3478dcbabd5fe929ee56968d0539b0697dfdfce7aff4758ddb30e90982f6b67369428f6869ddfa2faae0d757d654f1d4bf0111026032cb28965406495e2abd5d3ca947458cc9ff0263cc7fc44aca5cd3387616c2ddfe9d39e82e2728ffa5ba4a11feef69e464ad5cb1a8c03e712464081629d75e6de9d2c4e32c2c6a6734f0f2b10a51d49e28362cd077c0e9556156dec7cbc97b0ba78ee490a99ef9317817eaf10955e8644ce38171cca3363970ae1bf5ce59c4a7f2c477cc38355f8c5dbe74f75dd78b09e3c3ab77e29e801615eff7946960d4ef90d81a77df1d6d6422d641790409468a28c53b5ea00ee3b32f5e0c81dfa803d184dc98daa2b9e8d7d927956ddb1b43c8afa3c6571fc805fdb9d66b0ce9d34097687a18ad97faf53aad20c396496d40e7db759b932d360833e6a13f08f20e5b0d93ceffe7b91c151134319695c827a65bd1352c0fe64b793121322c8c3798fc018ccb7e0417a74a26d62520468a98239ed9b21ae651c5ddafec1a091f77d0c30becfade1f44db9eb4ead0ffbf427f95959d4b1b973570f0fc8fa0e2a8db3a3f68424813f51f07a4b7f5482eab4d99a533e79ae69acf601c4d7bb4776373455949e299ab3a22f73380ff8434318e3ceaeaaf413879193b0d3524712e391e1eee8de46d4f6a71cf293a27207aff687db5c1ebc218b366c04deecc1410dc1d0bb20b22da28191e31e317d96720c745087e1dd7dfbbdf57402f0891ed92c74fa00393e219de3808b27f5b8eb8e5025ae12231e4a19d15e307d74052e41379b0a61cb1c28de9c92aae175095f51f3327745051a70e7796ac58e7817dda9da2b729f06b9d67af6e68545cfa560f6cc72481b71e2d303a22feca1b9e40d86e2967609645a3bdc72b9591bf330912139e1764284590cf9e70fbbacb659bd7b8f17b8d3c060c90da9d353481682d1242cf2f6222979b745f712c8e85e895cd863c41eefc1f9bcd384f0a60fedad74868fe83b0bad83fd43e6c76155ac0f141ecffa22ebcba2d54cb05706f3e9a45209ce57dcf77fd6adbcbf7fab206a98de7b4d4cbd2b91b537dcb63a3da17e8879b6f686486bed3ccdcbf4a24fa77698f2d694fd51b375d316cc6336af918d0a737a7c742af68e8c2ce921e2e3c18299c125b93517f9e4b632d0b0519ba23ef3b8273aa5a3be567948b782706db1216bc458ef99f39086aa7de77d3706ecef21a52e7abcf245f7e8fa94e4529cda4f9aa6d44c38a1be1f54df5377c228ae6013f0de26856d074a8207cf68db208035ed049406b2c9311e8bf2eed01d17f0094d0cf4ae075f0345d94a09f033bc3bc8d759fb0e4113b0a074e719afce85c4e4cd66ed6dd9869eb7488a3a33effe91c5f911571ca849e81b59771ec8fedb8587717b5bc73e8f983746be557626b75c784593a6138cb9efc7e2f2ee7e49a672ecd7ae44302ccdd35fb1e34d7aabd55bfd67add0815149b9a6b84f1a18f32650b445981d92f62020b6f61f7339cc01b438d04e72bd810628047591cba22bbc060a1db5a88c1409289cdb48448898fad56516657676032b9a32cd5fa52e37a897eeb00ec2fff681140c5ff8afe30c80b0f1a355d1e18bca1c7fe6b0db49e4ae71d35d08266b5995d8d05defbd2bae7b7443309d94d7e0cecab1a57bf804e0182037bb9a0d488c37f36a6629b429a3b0621b22aed3cad92926052e4390a756ec0e33b7610a127dbe9873043526267033a8beb2c7b1dbdee88bc12516b19c5d9b00a3b80743bfe9feca0d4ea573ea5396234937afcf6b3c96573bf0fd9322c85f4726f68fe288e76d25459251293ee07bd358cca4f8dd337a8c6fc77fc07ecee6d809763effb392924dc48ec73e367afe0a4fb169925a59c81eead0ac287fb161e4b4945d7beee34db99a63556f179388559315a8752a9b1158c97912da33a11547c684b4e15f5dc9f4569f637826616aa9fc22220e806981edbf6004002581eb5f9647442789ab2a0de455fe87a8bfa3dc4145768d3b699936bac088f2aa84ba82d8337ad15716dbcb0236f78184ceff78ce294e147686fb9fa920fc2d6e6f5d992cbda4b4fb15057b961e84bdff294409de6da42ec75bb589a46e67c9eaec1f4ebba368a5ebd7582d15bee38022f3418786b79c1d5c363502550d3c0b6f79a9a6dd841b93f1a63b29bfeeb2de0c19e647a8bde2efc59a96b7d54b18ba20faa0317921b683c2ceaf379be0a6a73b00d99c30c884935cfc3ffc800764ebc0f5f7e334c4fa2b78fc2100ab1ac0710e36bec98ecf40980b9a8f83f89ea8c9c72471d8bd055384fa149486d498960c3911385ce1b556cb0c9cc946db2d607dabfdf9260c55c13f70cfe4ca11714824c1236fc1fe8f5b2e1d0755ee01619d3db54af974db0e4dddd21455e7931f6cc1844a2658cd03f809fffcf4e550b63a6811054b8efd5f2d0cbb95ed360a4cebd8c81bc4c161252cb6b6ad0bf708d0d92f73d3a84b364b8d14facb70da50a258ad30ee9c859513cc0d102456595a900ae9ea5bd52749a6416ba3950cca5cd342a0bebf3c2a2ff241bb1878f5a77e5d99fe162730ad1bb72bbaed8a6e8084b313cd2e4b3942a0679e6884ba5574ef9dfbc6a9fffe9e6b357ecf29071ee15a1ddfc8ac62af1f4cd20c97f7faffb47b3ea60d2c5c3da417845f8cf4e12836b28fead1de8d752b6c5b4844b5d881cf4ce6064634b745b3da6b57a132ed2e4eb0837ee0b345eeb8e8e5fa1eb2024d2f774218135b82c8a60d40345663c0c0dcce5dd28487af9fc75e5bf9d66a3af3dff3e848069e6be029713f93e05e24c122c6f330445b084ee890e83516c33dc8d0edceb2e925471d13eb3186e4001cdc1efc12fa4987499e3430bd286f97ed18409918847847d00fc72506e93cf74023e7848390ee70910d48069b4441c40d4dde34b45933d6a7c2ff9f5c9632669cd85e0ffe377442308a2fc8efbb17eee45ed823ce0cd1da1fb488e9f3c890f474b8520b88b0c7c47b3cc1a4d56a3a4947a695f0a47a89a7f6001b8cbf0d44ee1ddc66c4e8371636edff2621e40282f7b11fe0515b3d387b646051d919113506752658cb3b02e8f0622d69073b87d311d3c7eef4b1600bf06312545f011a49c6bf83f98e19d15ad16b4bb93982228fdf1a882669af2af7c6667f772cc919b22ec9fb7139e8eb64bc194f4ec1b0425352a200957ae9b73394af9f5aa5eea6543db5707828e16bff44a565cedd1ed2013474d4b2835e81a9760af3f0c426644d34712caca212efcc881366f6497a98a46522838ac29fce9b0c13874aaa68630314d1d2b9854b0679cfc5d6bece90e39198ea3ff54ffef50a76f6b3ac6fab633e4315a479ce598c1c55f1490bff691d7f77c850d23f7b2ea3f8341e6cc99f7c9784677795ae89c4e796df8b83fd27b5aea9122297bf7cd7d2f207f27a63f13027b88cea3bfe06242bcccb54ce0a2d78e264625db507ba7e6cdde54c3c1352ada5b3b2c55b4242725d78b4986b93dae9c4aac5d27f5368eecf4a7861b0780a3d695dd15585817a584f4413b0b23b696edfcb5d0e3321a18141f06446071a9c8a9a6223baf047a7b55d311020afa26355094383b8baffa1fd81179d5c7c962265fbae2916165565f8c75b31dae0579d7f252ac94dbadbeca355f085b4469d7f0eb0ab6c69dacbab8dbcf547aff85c2a80953eb94d6cdd7bb43e3ff53b1a259bf1859e51c35cf7d035743cef19dc7340646bb11a781a2fb9b9d53f04f3ad473e4d908d30f7fad28c59a6aec90addfe8969e8f0a33ffb8a70ac1b8becc38360484078c43560bc09a10bc9687b6caf9c58dac503b239b30fa3d3b7d1a207a97ae85d60b6e5f675d5677c9b6bde8a5d5193cc38b1b67c25510b52ba92ee11332a228250985512e159207411920255153371466b504ac0187a05ee44805d34d58d3aef296ec520c54e8e8b32b840b5f2b91265a1b29a37151d728f6c471a31a9926d008b0291bf0db9a85b975333998e4f3d05e99f7520402e0d06747caa79db5614c093b166bd320c87828f3f19d091fe47c273d0608fd11fcd2dabb188827be6d75e163a4661719761028c52022d065ae6dac024cd38af298adaaba7b12988649a48dd4407526283970696f400309e22f8d76c7da65cbb10d52867af268e2e8e775e0662757e4cc60966db234afd585ca5fdb7a1de6330f63172c1c853d35f4e9cf2b6d3cb4e7cd57346e28abb9b3cef78f94362c749cf2a4fa0ddbd50f40f89f79239dcd0e414579122f80d80a63e75d2bc78e9f32b6ae43354efd0c2b8765eb2de0b5125788e14ed6324edd2ec34d83f40e7ca311d8c531efc622e7290b61cb615cce31d748e86b2a4161a707d1b264d3829bf1d2a6d4a52fce5c4dc3842d5aebbba7426595ef6d240b4e8d1f4759132abaeee6a72e67f3590ae496f8c883931bd32e723ee6a49599db7a89572a19afba26fa8589fd26ea32491199ed652cfeab1b90c869e1f224d72b845822c146c56276ce62ab94b3273b03b69a2dcd15ec9e4fe4761ec076d0f1a28d4fbe510255a01e1310161ad9cf172a0645b2fd022da668ae3170678c7d8202f9198f18ca3d90bd10385176c6ae8ce3e47004aa63d4f5a99010f167e5078141a8a06640a9a432c2c5c3889aa85a1b22cf13e39380667241c404a2cf0a67eea4c2c37e0c5184facd9735aec88c57af419d8805dc8569245b76940406305edca8a3b22a1f3683419b68256068cb5075bf9ec41cccbcd626e5cf064d1fb875879d6369d9b29642bfee1ce5eb6081b6fca47171c152e3130ccc34224a39df0a7df0b7944134f04c09cf09e4cf03532fe4b1687e49c33cd7b3dbea569759e78c905a23442bc41650ab68cec87c3318d24dab089686ee25be84f0048d2a7ae5ff5cb9c3ed9760f76f271a3fb4890205661a4d05a567eb90f7573621caf2bcfb0e00b94af9a2cd226714a5b8bc758ee1e1ca70f4cfd6b57b0ef4e8df4dbcc6ca1c188f2424a7fc46a3370281f5d37073ac96022c04e65fdd2ab4195ae67a76669d96336c35823105ff37b6f6559af8b196f608ef00f81833271271ed2dda59bc0ac58c5709e1f0834a0d74e0bc2c7f5e9ade0910d68aa16b032a415ecf09c5eb5fa22739276d5d148f01aa7b4afb11552e849aa80a2b22105c413b0f852b5c8f0f10071700e4c184be91374d8e8c69f269d4bb858a19f2851021e879a7b80ffbe06f28a44b666da367984957f61ba5562829a03740b76ec54ccacc42b711ff0cfe7f771c502e76eba2770b96fb75b67cd658b15e4e3d798a9bd52c5b729c88b4e5504d8fbd7bb0befd04f93ffed9c1fdd2507bc9f9e2be768f3b38bbf82ec2eb8a86d10bc7f16a5c41d15c485532f9e377fe4f23f91bbc7f49058eceb19cc62d53928ea97b1d5c155363a6dfd2d9fb538385b67a9fc7988b18268f1c8d164a3ce88f19a6ad6a1c706916368721b043df8ca20d536b30ea1f585c939367eb35a05e852ff744e61cbd4b1e891a7452ea8a5279fd08b7e45b97492fdcbe298547bf3d00bd68f231523c3099ed63a9bebca39c23cf16eae6463ee9a66b4943b977fd95cb8438f69d1a9d7de0e4ee74c0b9cbc4e0d9cc925e117112fb2c55306dd5a1525690feca6d662cbcaab6d5ec87e0920bb56d7d218545f1678fa9f1c41d2c23d25c7ada4adc364bdae26ac6e1205dd4e2c25b0b233443f63bbc6bfb026505a73b39a1cfa13b9f8b1839d7c363bddcd4f40061c0d0cd1173fddbaef75d4e8dad60fbcb2cd51a97bbf2f33e1433c5becfd7b713ac924b33ff491932db1e00ff9fd183a31e855ecc8746e39a361507df482fd49ee2fd9ac6e3b1356e521dff5996e121878e630625921690ebe4c7092ae62073f27a1763856c691cdff1a49600ca9739866fcb7a2f19dd3e5b3e590b9114d3cb00c264e7fecd1823c3b2a8c18df6923695a48ce6def01bbef8681f9f364be29e53705617b6e78cd906cb93e797b1107bab1b6aa65d90fb617e90e395d9e4e6e390d26c6ffe4703f9cdf9a26bee58d3c8fe379baca0c531afbcd309f4f0cc449c05d20d9e4ed8d48d0da2429bfc37ffc2f9e6dca5dd0d0ac52ec276daf7d6e1c073a197995d247fa3ddf86ac27d646cedaa16bf13b8a7dd20cba1d370df2272c2349bee63758df54959b8c643d1ee40cc8f00d2c46e7cb088cfe45ee21326a697233d07fadccd9fac07863eb6418b85a5e7c38b176b92d97b037f6e3e4cc2505f7ebebe361202fe55893d67df6d4c76877594fe8db7f4cfd9e71e75fd6c30fc1ed14f83c3d201fc6ee131363047d2c336238f5a93c2145158268c4a652e3c142aed97e0599767ffd2a44cc568f007ff9a357a3fc381087008fef698d0dea968213ffe7d36b7ede5a6ba1be0b71fde7408d5c373db90f7c6f9fa6c21f187f26cfe369ff8ecefeab9e5e2eb091afd55dd19e056af8c53370bd3319005c18f708e6f3eab979c4d476ab71ca45febdfc0ff8bfb41d27f879182c308ec2076cc563a623f322ca55fc335043dd504e5e62eff4cf8593bf6bd56379f32beaf1d58c516e12f96124269b0cdf49159366bba9d045a6d8da0de34ee929720ab8574170a7ddf3381280a3059c87192e3e011d6b38f1c1d6853cbd786c05972b4562aced772cef6f889027ab3c6ad8cae4b0d062309ad4ad2dc81656754d6690c4ada49756e7b2aa7a5f8589d4e054f59c2a8c8f9926b97f474d775e5287880dfc4f820554f2623e8f4af7a9445fedf754a5c3ebb147cea3ed6660f5f858d06e0aff30ebd37af98d87a0ea5e643e3ac914ea2d09e5f82b5b76dcb8b080b990fa71d4dfe8caf2bb34dd7ee7d8bf18dec3d367d8a7a71bc2fe786e59fcc0feff97ea6f947ba7aa1c4aecbc2b47588964752658cf12f6a20c09780a5871ab227b3a3a7d4e934320bdd12f0c7e3b6c04ee0a034bfcea90bdbdc015eaa42a1ae21d7a521edd22c324e7c20bf440cee11afc89ac1c278f72ca370278226c2629500306efddbc2fdefc205bbfb2daf4164d83286ad592f85a4ebe5cde68a8da6587ce66b65d1fe93ed5355e18d98fceeffea22e4b8af0ac4ede6023f0c11b16fe2bde6b23b37c8a252c41351fe972ed094f8f76831e5dbe638e70039101cf91372518913d40809ae6bf5a5e8fc53d272eb2a0c137e1749abc136e99560a3e97250e16f8af2dce84055f0be0acb6f58fff622ca6d5427e03733990edfb25c0de46f11ca6a53ff812afbab58721b51f13629d92b4ee21b534d433797d72b63c884e9625a7042e62b53a477537e7caad69a00ddee603135339078f817f970ced52064b3a83d46cd0449b0ffe1ba4552f64829a8bb6c9cba58d347226d54c04ae06e46d5fe59c1d6fd9d947611122d1f889f36975847f479aa743b832f6d59fec8b99f3230db76ee406a54cbf47cedf04ab6ffa2376e9de5ebfcd172065d8d7dbfd68d8a4cd59cb44abd9ca0f1acad666ee68f72f16320fcf0158cef035f3ce05283033418d719a3744b9e5df4dddcdda62c63657f1807b962a4fd6d57e973debfff32bb84355e9152332d61d99cda9ad4a35118624fc5852033ec47d216a16981acd2a160510fe33aa2b831f382afc62c1bf6c064da2052bf2da11965c19cfaffd905790f3d10b3d200aa9b3e0535fefa0f32b67b89b271b6b76b4022fe75632dd50ca8ab122276a8de486bfd73843ba13a755fae540a9f08a6be9c25a85b9cd2814503faa7b6a573bb3db2df63511503831939cb155651eae2d140c7f4d03bba941970e32d12a066e3e80fdf216aeb446576c53548a7da25dd0a204dfb28ec30264211e50b4488b6c46471f70c625b7aef2e019d087140af9cea44b2328507184dd813a75880be3ecd46342bc51676931cd5892f548896455dd93828ac01e93c3e9dfd4bad54821a6fd10737b3c566c0e3a3cba2f1e1027d44bd9325cbaa0a6cf7a33ed9cc349fb44784c06278aa664e059bc3e7be7d4add898115de9a301cf2e1851f7f423da9d3c377d9485ca964963f0392a8368c665ec569af750c412bb5aa1cf0c5ece90942741106c6d807ca27944a307d854d2f4d6b3e10b52d33701cf978cda45725f02b79a9d0d081386af7387997493da04eae49f07420d4db1ba087e2f1e36d56fdba3be4e7c7d33c4265eb86c49acfbb6f22140d79dbe1259713bc1bbb8c65180e898e9372074ef62c82764a5114bb710c447247dd0ba8ec10fc6487dad9c358068c1d498541e3f9671d557097c7ae02dcc4ec41b89fc8c98532c67e1c3d4b2f7c8e232c5e1beeb1c0eff181bfee966f83ebdac6a7e873753d1de733ffb08981d5fbde199959b3652099b6d4f41e33769b31fd51154f6c0668ebd3bddcbe2e4e780d8bfe78baddf620415fa1db7dbe188ff48156aaffccd3541fe231952c94c012c5be7b424e89f73c69b1bdd3d973f68c2329736fbf2fce7d1c6400ac57014fb37f5b7ab6a45a6258f40f627a3affda946ed5577e076485e285771a92ca2ebcbf20b2919ee4cbbca758fa7d180cf2fd867868d3483f4283d1b5c9b4d3f487fa4b16ab2c39c47f6b9b0b53f53c5360481760c80d8c7d6ebe06b2e3d1170dd8f8fcc5c0de574061a1fc15e1bcacf849ecee266fef1c641b5110349cff0e9b868200188e8ac40cbc03c0c9ce3fd40cf0d41043dfebd203acbb79100de7e6defa6b160d2eca5110ea8840910b8b96de87543f90a2da4511fceaab0bd18feca8fe45deeb7b871e404d67b7102155448fc30c6bc734e1e1b6f1043645889d02eaf3e773d1b04391e057d85941d464da085b056d85a2623156aa20b5efb2c84412ce8242626e6f3c83da3f49fafcd142357176924be2a70738c71c341757c0ca014f48dfd2f52243562781de8ea6858ba93e9dfefe2c11d84a13ccce7919a7a8bcf04c4ab49e98549669382112aaf11c0fa8b65eb609e2b0437d2006e683286ec96fb7c2c62b525f1052cd7c0dd5943219c53add9ff0dbdd9dd7766047fcb50d79652d5f5dd4a62fb907ff26dae12de3614aa2e0e6e09e9beeda7cb469acec1ea221e85f1ba36c80970d96b54f8a9d19f3aade328a3f98165292b700831b180e7d502dedb7694f8007f9f7853a653c70f07fe154ffd53dab175f2ba0fdf0310fba7e4f92cbedc55bfbc3efe35a629f8c624b83a34e86b704620ad70c8c930bce00d1a780ee57c7db65399c2e26e620171cbc01543b0bdf84477a71abe2a41a164c6be77632f1eb6c8a2ef97903e46707a726afe9ef2e3839f784dc23065f50be41f7e548486231cb34bdf82fc7ee9878860b67d081c97083371600286828e93d90f3ae8f15275947468350ae991e5ef969dff41c7f1ce346f971ddfcd1e7d5dbf3945bd8a6636a52bfd9d425e309ed947fc9bdd45ec9462edd8ae8fb4a6e230e503dabc1fc9fc0cf463a048240d6c6722168d0f451efc41d19f9bd1470a1c4913cd1d77890c82a85b3ac5157440dd58f691ef2a874c7f47ef376f3aeed52cac0f5ba9680c0a5c82d53a939043af91d755bd9e79f8818c5093a46004c60aa077dc0c0d2c9f8b61e2d56be617b651b675d0aa7ffe22ae9c20c672f67a00acca3576e9798a11097de9cfea5bd52c9f5c24623428bbba4ef5261dd43e3be87acf4a1794bb1f18883805cd56f808fae2ee0ef22a63e08a795221c2a7486c276ab60b5e78109abf1f626e59ade3d90c3749f87ede422ba455483f3cf7fe6618975a43428b25d63e07650ae127e18f324f6a612140ea4852946da02a0237ea6aa163bf4cf2887e2d0a08830284d89427d6a061973a58a833c0f6ee122458061f2bc802974cf6e24e6a6dba8b28457a964d71c443b46e456676b778a12991065a90418e17c5fadf7bdc9e416037e5abf777dc548cd4d393e29a733c8d4ce85523251b819979853c0af5c3fd49cd070cc0029e7184a80b3c50b2a4d001c33f3f3f3f3f3f3f3f6fb26d5bb0ad89421264da495ac1cb5b7952e450644a292599924a000000501400000000000000c012d2886d512ede0b610b8a0b28a9bbb55a9224d70e0809a1d1c516b836c0c206a555940bf5740d5ad5b1266725b9ffaa102dff8d13e010c1b123ed131c5ca064b9f042a40358d4e078a13356538cb5929b480a72ec601a9cf33b2fef495abea6dab0d1ce09b8c180909090101d39c06206a73053292f9f0c33391b381203c06809848480d15f8484d4000b199ce485aa6fd115c38926236b3a540658c4e02047bfb995ec3b3ea291351d8b82131202801960018393a8ae8e93bdb1d215c61722088018c878c5299a5c32a653731b7532b226a2a3cb742480990b2f445a20c3158737ef3b1d96ae4dc6561c84d8d3e021eb6e639215a73442db5a08a1247145236b5ffc9e40c62aceb6f35e663fa62cd69135551cf5f4c8b9c57713ed32b2660219a938eba520e7fa54c5966e47181240c5e1326f7ce3fba57ce27c8ac3f22821de6eca6219a640bf687dbf936fc40319a538492a899633b89cec1a1da080111d3de2001a5ad050c002980b2f4474c820c53108a921c4d6bfb8a3389e656c0b33715ddc17c57163dc5acb7c7979f7501c2c599ef0ee256f4a4071902dcdfa7c13f5cdb553199f38a5a0623f7e32a8cf124f1c7783f055df7d642d6db9f042a46474e2202beda49fcf6cbb513070e4482c1012e23942429813e7925f926b8826f14345c6264ee9274735548abd698fac8deca87102eb02c9d0c4f1627e3f259caca07429132749c7a6aa2e71729624983868c65b0f95ef2d69bdc479645c93314dce329c96389bddedd8c85989e3b8fa6b341565254c4a9cab4dc95a558617112791ccc8f8796212499c94bc75a94a29938dc4497526b3ab144c2c1b12c714256e5350b944d1dc234e52c6eedfbf77b476c429a4c87c82c6d5f49a469ca40dfd9a5515b766469c6a549041d6e2966817711e0bca4d9c2064d2cc38204311c7ab12b39a6dccbdf9449c5d34f3d9857ba97442c4f9d49450a1c45a1e3f39c4d1f2ff43fec5c92c19e254ea57f2882e298bde0b711ead905fa56a421c4d548a077130b9b76346ed9998840571b498ba4af3b7c810e2409cd4fcfd462fdb967301714a516247d4583aabf50fa78a6133fcd52549c9d40fa7502548bff8653aa4d887a39820ef6932b3b8a8f0e160a943afb65bf670f212d4668b7a36232c7a38c5942ff36dda78417c79387798d8a0fb4b12e73a3c9ca2a6a44c87b69325bec329efdf9e24ddfae4343b9c43c9d4bdbd318410ad0ea7cc57aaa2c9191d4e2b7e522b25cb6f750ec70b1a5c939ba49b52e4702cdb20ee44c47ea92a0e0725e447efcbc43ec9040ea714f775c48a699e3c47d66ed410f91d6d6f307cc912eeb3b36e4b1190e186737b25b199e69555e2369cfb3d9492ffb55495101bce275928e933ce6c8ad9359c920c99e792694cb3500d87d90bdb363126a9eb8daca54005bd45ae1064a4e1e8f5a55e92c76c27f2450e1c29c7835147a38b06a4fe2db2ec908186f3dcd5952825e80c2761d48ddea6659b9acd70b42044f528e1a7445a86530c26c64c9294d1aa9c0c322caafca499945bc65460c818c329069549b8d433311c12121252d9850c31202f93704ad8f0fdf188411b32c2806f0a5a6b941253e499bc37181748c1472024045321030c5cca265e5ef271a6e5829c24b642f923de5a8484848484d0d022051f81111ded002d14b08014e4c0f1c54b202404252234bad882c651c0d7c8d14508971c3bc0280258838c2f1c458e9832492f88cd0970d8d061722440cd0032bc703a1d13fcbf52be986d644df3709ca08b90909090624490d18593b49979938f880ba259e1c20b9111195c38a9cb3dbdd94ab068d1c2828c2d9c4a85d8a45b7317080911b1355307195a38b90519835c58bab564164e2a8bfa56b2fcdb8c61e1743f16b3c9a5d377935ce19c6f62a8caf4e2256c6458e19ca75fd74f3e9976375538c6edcda3aa6209b9a2909014830c2a1cf304154becb16a2f311953386f989469db1a195238669e6ccd1a2d178553ecd9af144fc9567b41e12458658d5f5f49529a7cc2e1b4e9fc321116271c54ccdba349f5cb864902c7b145138ebb576ab4fd494b73d2915290c18453c56df90c72ac628604194b38da86b8a9cc745bdd240f50c2712ea59cb3bef1cd655304194938b8bf8ab0cdd258263f07194838aa5da6f435ea114e77a3a225494c0d73d1080711d93ea7cc62d452e020a308c7aeae334d8d7d278b6c904184e328a1e9e566a9273b930619433856894db292891563a6e5cc204308e7efcbd69384cbd231da914146108e96224c926230a9b9495ae8176400e1e87ec137a478c925b32dc8f8c1e904cb574ae53825ad9d05193e388d12f4c6202a6731770f4e7b25947b261354ee932bc8e0c1d9e4c6dbd1cb2b652a1906193b3808cfb459e75cc4a8d20b32747050629e94f7ca92cae88241460ecede1b33e24fa660b1ef820c1c9c34933625c91bd456753738dfe593e5af2b8913ff5141860d4e7af3a14f3615534e54460d4e92da921bd43a2f992c0d4ef26b16213fbee425a529c898c1c964acb064f9e45d7265c8e0fc9b6e55c24879175964c78b60c7372024040d175e88004007326270f8cb1d37edde6c26282464970b2f446ac880c1c15f2cc7428f8953999118af38aee51a0bb1b0a9b554cb8517221ec315076919325a4c9bef136fc5e174fba2fc9828e2625871ca936d6489b9a02449ba8a83124f0a4a4d84aa7739b2b6ca8517222888a18a63da6f6e926e3193924dc5c9f44893c2e46f9f6c7741430b1a18a041812d261003152749368b33315eeac5f8294e829a3ad93296c4556a8a83a535492d297d259a60298e7942ec92bfe553ab90e2d81637a524c8ac3b4d8dac89a420c70e33cef13b6a608c511c47758945df64525a518043012121c9a30007e21d3144714ae2654a2da66fdaba9135065880061b2046280e1add3e4ffa87dc3882e27cb14ac55693c2e8d0c5f8c44996cba6a04a104afa313c71b65b139a3aa6c42c3324e493189d389c3c41d6bf9ce6157f64cdd0e8a2013a4242caccc5e0c43137693dd1f2a49da0e44c1f626ce2f09d419b98498af52a97e310431347d7307a8366ca26966864ad9881438c4c1cef6db47a895f0bd947d69207dc98c0186260e2142addafd428a9c4d19b895ce22488ad98949ada79cd58e2a42994eca3ad41d94975ecb8d1976254e2642ea2c415b19872967c2006259cadf8367d61abe391b513740e11cf499c2bad5e4c827755786f64ad6c10431227e9e4cd621f27a3f686861679881189f3590a27a9bd98478d4a49430c489cfbe5e24585f635dd1f719e313f7d9642a659ef88934937332a2d8485188d387ebde689615d113c430c461cf76294cdc6918b3187c78517221d88b1889324732bcc04993249592d7e0831147132b1cf4e5f87cce8bda317a060889188d32929a9ad7ad10b3110710ab1e9546598d8e396901033113bc4d9b3d3546b12374a44d4d28b1886389f5eb7b2b137f19a8eac318d2e1ab0e375e8e81c359a025ffc8ecfe12121c785172201c8418c421c94d86c49ca275e051927c4f92dda059954d413641c1212122262a976883188f309616a54ed6532c916c43194204a56d05b79610cc4794b6f94893dd167298038e87237b15df3c9b1de1f4edb27ce4cd29a6f2be687d35e6906d5175a93d8f4e16031c86eedce922a347c38e67a0bf2b173529c7b38686d9ad81ad46b8aa91e8ee12c5cb63f49a5b45a8c3c9c4da5cc7625dc25919303c4c0c361b46d5d3231a2521cdde1f062afd9f756291fdbe1b417a237e90cd66fc7a8c361545410beeba72e753a9c940695e4680559eae21cce1e562a4a2b996c4a7238093f99042d2553b55b4e881187e36fbe182ca53ca6ef86c3796344299d3df7255b16a0a1058daa000d0a6c41636d80f1450d5d428c379c46b4c94fbf902927e986738913dcd364d813f9f11362b4e17062b29a20f4e54cb6a60931d8708aab232f59abc8a02c6c5b88b186831ed98b16da5452a2aae13063e7be65f1f22bc63611230da724c824f48f7c15eb120d2d6874b1058d903a2ebc1001802862a0e1245d3e41086da9ee3536b28636011a5d6c412324c413cb991634ead0a0c01634942911e30c67cf68ba925535b296dc781d35d20d1c5ad8b081e3c65f202424c78e1b383c2424d70f31cc7090295b22b2436878885186534c5277ded2e4aadf8d88a5116290e170422d4f685af18a97861634686841e36968111222821a3aaeac21c6188e2364a524c6a06b2d6834bad8824648488d9c38ea9a021332ea75c83b6daa2162b6221ea5386905f53afda1694a6a642d0548e4ee0606a4e0418ac38e14ad9e117296d691a5d1450356e0318aa3eee8bffc728d288e25d6fa629a04cb1fd5113c4271389345cdd2c93f77affdc00314a753255d7bb7d88ed6641d273c3ea198f64c6a77b6bf24118487274e62f2ae24b59c7c71d2e7d189734972969ea8919d2a3c3871d4de53fd21834916c581c7264e2afa94cc4d99db60a30d3c3471de9354dbc24b9938280d266ec8fe5c36194c9cb6bb2435a2f4366ca420c78e4b1c4e1a7513722527168eace5781b3652081e96d86f940c6262c3e64a7892921a7bce4d7958070f4a9ca477a939e1924ce26cb65d66e1c2ffc837b256e62189b35eb0501725ca9b8047248eb92e6c10b515a192d20344be0106061e903877b72995a406e121465b048f479c6493ea68beea199366237838e21a118607234eab9b45d97fc92763b9083309a53f5f29ba49236b366cb48848927448488dced18515527828c25cde26e46c4ec6fc02478e1412c2fb098f44d82173d6e90cfb2a4144ea74585e6e5232163e44d9b67c73a98628866890164b9051edf02844d286b960c29d1cb12e21b274b2529d97d89644c0631007613a75567eb468cb0571cab81822c34fb734e81188c2c26290934b71b1dc3be3ae5c6fe4648c5f1cf000c44153eae589bb38a34efe70d2b7936218d11b43c87e38fda553c9849365739bf4e1ec16f3f533f4d2c332050f3e1ce3089f8b2dda943c6f0f65b111a53296ebe1a04c74292dd9d138417938a5ecd393c2b88a50413c1ce3e62f6d821455792b1e7738c638cb7f692dbaa132112b07050f3b1c5c5c63452b29539171e8b881c3cdf40c175e8840c0a30e87eb11ee3fa3b94ae8860e67bfccdb272c4fbe354181c71c8ea3eb528c63b296d695c3d9a46cac932e5647ad27f088c3717b4d4c55ca649e89f180c3b964948d7793faed3f8f379cb2ce26db12965d52dd85871b8e712aba727c2561d5c2a30da7eb2c75ea3773a46b980de78fd327c967d667e2ba86f38996a9d3ea4acb6847d6540d477d379584fa52f1ea3e4bc3c1d45ddf8592a46c7d828693cda5c95c9f6a5a97912df6090e2e903dce704cb26a9a37d9352769f20b0f33580897e1b07fe9e4123dd9af4f996307186438a50b9e969ab54c56d0c85ad2386c8484ec7811885806b60809d12d4bf018c3295c6350bf3b794bd4aa54c1430ce74cf59139af92a0cc1486f3062586d25cf2c8dfcd46dfc8f123de2e0246182224c081c3c65e058c093cc0706c79bd0d69276992c62f6a8ce8083141a1171e5f389f091a5bbbf55f474cf5c2f1be44788979be4cd48cacd9b0d18e371870e6d18593fe188d969b432893840ba73c9515b3666bf11df1011e5b38c530b5d164d0efb05f0be73f133329134db270d42416644cef5a11212c9c56de94ae51275a9a5ce138dad4465968cb59da0a47134354e46cb08a53154ef27b27b987f2d60d15ce2fe2c4da1cbab4b83c8583ded5b4992c4f96b4144e27c6fd908d7af6e246e194de33d32babf55f85c239dd4cebd5c87855c9279c4e8a3108939d130e7b9b7a1b47453db535e16829467d3f4c90b6b991b51c389248311d393ee9b8f1856f600d9307134e324952999896349794e70a782ce1a0ccd2df5cc53cfa948cac95f9c04309472d95a69b7f4cd794ef14d88246484848888e3070ecb8f18090101c401c3c927094ab3413bd37f15ef6408285781ce124f6284b8dea61979b043c8c70ba16f565ea4ab473e4781130fa8b3508f028c2314b5ab756d0984b8a236b227a8907110e9f6eeda6faddafcc91b51c4b018f219ca4b3e0276fc63d84602123f0088207100e1a677faa62fccecd073c7e70bc9333fcca787ac9fc7f11860e14860edc80870f4e317e2a09776ff344529063c765c0a307c79ca535d388d390a98fac954004c70e1e1ce6a445d514622563e628cbebc263072721dfc3bf84b73a31d1c1e9842e3b25f31b8492f5c8818594070e3ae0718353dcd83826cb86397114090f1b1cb35b38c94dc818ef441dc08008d0d08286038c470d2c84041e3438093f2a2549bef5baa8a1c70c0e1f4a9227ff09e25e2f29c8b1a372fc8e30b658409a4088221a3c6470aa92462d498278c5296370364df5dba2e1effff380c1a932eb8e122709abfb445023ddc0e15ff8068c1158bce274f9a6b792924fc9edbef00d946905b070c579636cad643a5e4db7ad386ebbc87171b75362c5f174e4f2fc974ca94bab38bfdc954ca6a575f1abe2b0e7164b36b735a9245351a95cdaf29794041527394f645eae99df12d461ca290efad2a4d097aa66bcfe0216a63895702aee72b88ac85a8a63b84d6af43fe66d4c529c3e35674cd047711a73b51394aca01d8be224458d3571e54efe3df90116a138652ba162a7c5503b1f1487b32b7d952cfca83af9c4e9f73b4b907742be483d719c4d2ac6cae93227e63a7150f5e69969acd336c9032c3871d079db69f9dc4d1cd74f58127b4bacd4af268e27ee6535c75ed00dfa008b4c9cd48e87759b92bf49ab02169838e9fd10da7343a9b7984b1c56d3ff87d2722242678953896cfccdaa34e6974a9cc42cb12e64e68a49959438463fa5ccac32e5c47f12a7ac27dd98dccf122f451227b94b52b3d4a799a0148983c820d694588b504a84c4314b292dee7fd94b921f714a52c5ce4b2735dc061d719284abcc917933a6d41b712ec9f29d2435bc7255461cf632988755ccdaad2ee2fc61c97f2b646d4657c4392b26135b968269d589385998b54a9967e28d8b8863d85897ed7dafc1728738955cbb7157742841a60d71fcad144f1a7d2bf171210e6a5d34a8ccfdb72327c4b14fb832efcaad16e7419cffd2066dfee5994f50102729562af69dce6d2b05020b409c35c9156e9b2e7e6712ef008b3f9cfd378454ebfd703a25fc049d933f94d4f5e170296ae94aeb5f8d277c386b924249cacf4a4c16dcc3d9f45af8eee78993d2c3c1e7379489367e1b5b1e0eca533679c95782d2141e0e325f46454b2ea5c4ee0ec7dc95df4d4c2556c8bc1d8e49143b6194fc0f37b13a9c774f9a95a4221d4e2adbd24f9afb127299c3d9c41436096697d972391c84f8cbdbd3b41f31e3705e7fcd946f576583090e272184ada6fc5026e5cc1b8e736d41df66798bb56e386b69bfa424614d3849d786a39a504910f2c54eb08a0dc72b319eac226377957c0d276bb378d2b26a9574a9e118d53ac7e4ca52d89a86936a89dea755f56b8368382971a62594924749a53e03b2dd52ea461199e1dc6d2d32653c29e8f5ca701ad5b94a3b631b2d27c331cab56b45bb30177d0c07a1ccfb5490cb8ae189e194da71963c4be81671188e715f4f5566b2929703c34989a5a49167d29edeea0b07a144c456d5a9a462e985b37a9d90a315f5a26b5d38092fd968696a4b92e5c2e1e42c336d56e25a0eb770d07995b405573dcf590b47efb1f495aebf4aa7593829199ad28fb61394ba5838556c8e14f9b47cdabac271c3e4b68a0be6a64aac707a3733ad66a228bd60158e29a5ba0b25bc44cf940aa773fbd09535c12f8753389cc866db8f2add51a5708a3da7d36249148ea14acc5fbdb493520685636fca196f4baee026fc8483266d773dcb7bcb09a72a6152f4942ac9b41c59a3916c18343e47183a70d8701a68c3a021c207072c9a7094d55bcd6f3a139c14b060c2e132abe4e93271848cc512ce6d4a4c462fc7dfb88181911d3534101212042c94a0fd9e9798e269dcceac58b16282b38145124ea3e51bc45c7e6c4f4838f8dfc8d1b9b9a9ab3fc2b924d5250679328ee5d1c89a885d13b030c229491795c4d314c564b50807997367eb65e3a9da8d1af9856f8046175bd09040081f010b221c4d8edef74c92faafa4211c5334b6a858cfbe6422849329415d8dd91e846c53ed695c160d9b64e4cc0c5800e1517ab6a299d6f192fee0601636e57809f9e0bc622a6a49d352d9ec1e9472b27a68b856ccf58a4902163cd0f592f63f95276ec80258ece070b14413111376d4963a38ad9eca7fbf29b30c737092dab6bfdb3b1c703f26af65885f9027bbc1061f873889a89eb2b425dee9df10e752194a5572edd1275a8853f8ab7c6e25f79a344d15e18310c7933f4189d04bf9bdbd8f419c3a9334bf745d7a2c2e860f419c5594e4a7328a92aae4095b8ed75108f01188738a8a49a952aa5d52e60310a79dcb9c9b4c18a12da7848f3f9c4d63bf3389bceac9ddc0c166840f3f9cbc2ff4b2bd245946cdbfa377842101ddc48a818f3e1c3786f0b09ccdc81a8e1b66581f7c388889977db4a5f7907e8686b494a23bf8d0c34934ed050f4b5fe27741f8c8c3b1b2c4f678336931fb236b08840f3c9c434e448eca88f13b6d0f3eee70faaa92266f1093a406d9e1b44908edf378917a771d4e324fca9e94f167daa6c3513bc77463377338f7a6f1afd7d196c42b8763ae6d8b41c76457cbc5e120365799c59244dfe904680f460abac8a101331f70386a3429881293a95db747d64ef037446ee0c004e80b3ede7034f1648b1ffe999499b8e168f2757456bfa46f501b8e496d6d16212766fc101b8ed699dc64ab681e9759c349e5e59e70d5701c956694d0539a4e491a8e9f9e49ac39f1b73744c3c9046f533dd14e432f6738582cdb5f3d7157f4668693f5c6cce8b631c147194ebd554a3c69f15da74486b3d958d40db9b160a7319c825f5e1216aef72d12c3d9f2a554f1328815290ac34934f50da267e7c45283e1642a54af89ce5f384952926795827a967cbd70ec0d3bfad6444d49a25d386612a6b13f363fe4e3c241699b582f962fee2b1d1f5b382551419652c9c7fa762d1c935d10cbdab449ad958573f5ff8cd0eb8c395446d6ccdb385fe0c8c1007f302e1012f2c5db782ebc10e90f2c9c2eb3ef54921d69a97d5ce12dd75c418d2831d9c8dac88e1b65031f56d0d2ff96ec53b249012ae38f2a6cc104b5a0662abd287203070d2d68d0d0220909e182a3f8a0c279bf57b429b1af848b7f4ce168fae1a2f7a2d6c2fd2185b32893e43b7131de09db35e0230a274ff3136eaf99b6e70f281c4efb66ea90c16694f0c89a4866e1e3092753491691d7721614a951ca153e9c70729172c2ff9924be660a1f4d388593b3a441c3a6fc98f0c184d3e8516a7e2b9994d71f59b35bc2c7128e974a36415f8492c25dac0e1f4a38fb9f54317ae6f4d99a0e1f4938880c4b52be36ae493e120ee2746c6c2d7175137384534a51b2e24aa6187b618bc387114e19ce77eee5c229a152849330538b73a7f64eda140d1f4438990c96de425aca44cef03184a3ba867b4daae40cb9a30f211c84cd5beabdd37515253e8270b23671fb2c06a19695233e8070103e7b4a3251d2f296ab888f1f1c36f89ade688aa5f408f1e183539ea033334666398d25e1a307a70fa9255d0975644d07f7e18307a7ec23539d387f91de1e3e7670125654bd5918a54a6baa101f3a38b9ec5a8f92ac446a81f8c8c161c48959fa456a4aa91b3d7ce0e058d952123fdb9a956cbdc3c70d4e424d499acf7664f09f0330870f1b9cbef208f126877a312b0e1f353855cecd1742c375bfb564f8a0c129996c49c2a9124a8cee0c8e49a92eb914946ca7a68cc2870c4e2a2529aae569dba3040a1f31389c98d1f4c9ca542549f1173e607096d754ab9a2d4b4286bf30e315c714a4d949b549cca0415e98e18a836c7f11c2db6dc5e92e88ac9cf97b3f9515a73cc94e66cb77b159dc2dcc58c5712caea9fa14d1b4550866a8e23c7b1fa6e2df9d6a5003335271da983309e1997f6222e506335071ac31b972faa73859fa9bef9850f216c1919c290e5e92ec1d21d3236b3a7411334ac12893ff52a5577422381266c20c529c4bd82c6b1b4c92f29010be002862c6284ef2b5e49382d68bfe25519c4bae6bc8f6b1cce287e21464cafe27ce5fcca3041427dbcb2469ad9f38f8ce5c3ad1b16282ee8953c538a6948fa749a64e1c3fb4096acdb4cd6738718cd7aab6a4bea2897b1367bd114a7c1f8d260e62aaaf3b53a4298f33714eebaecdcca3b4e7644c9c6c4dcadc93d94dc3bdc459eb438bee6a2d718afdaf49922d84285156e27449c89bf81b2a4f474a1ca39a920f1b25bae6cb2452f2262a4c8a41a8b1300031982189e3689c4b7dedfa793912275375c9f3843d1b7d8584141331b648cc80c4b17534b456f6ce55f811e7f1d5fb122c88305974c4d143c993b1620d98d188836d940d42c7283fd9352ebc10e96206230e234245796870135e2ee2a8a32e4693a4132766a388f36a123559f1b35e3a0b6146224eba96334ac333c95741c449c61199fc926a87384913b55f4e8658d2dc10c77a15ffde6df32cb310a7cbce0ccddee5aa13e2e4bfaea14a0a254aa63461c620cede6f6234e12717f4e83830431027e135c9d49b32891d6a204e76e15aad227d4bbe50600620ce7db3567ac25de6c98cac89e0488c0b66fce158b25254f59f9afcca2d98e18793d61255192c6e92847464cd060e1c6088e048960533fa709cdf529ab42519a1a19135dbc10c3e9c2ec5bc259cdf26d5e960c61e8e274cc5f7feecd37f1a59631cccd0c371af62ebc6ae3899f59135111c89da60461e4ee1b6746375aff4b691351b39f070129723bb637143c532b29677388bc66c8a552b25e99391353b9c664bca272ca8d0a2088e046930a30ee7dfdc2a2a637355b047d6c2a0c3418ad85eb514ecf4c58caccde178f3f61532a3c935d3c89a1c0e1a7bf2e4ff950e251c598bc3f1dc4d6dfb95ca8d9991b517c1915c81c3b1c2afe6d26f388b9062c9a2c6cc5a29236b6088e0482c0633dc70789591af5296d7b334b2f63650c360461b4e318979f94a52bb64ab604f30830d0729224456ed06919a60c61a0e7732fd4fca9691b52a2b98a186d4259d59649d5ade46ebc091c38c46170d102181d7d8513684196938a812b59cd92e8c9a9b0387885d0766a0e1f42126cdb633637b7486539235b254f6b8c5c598e1b0794ec652cea02fca33ca70b67c3dda72656acd35830c07b16076a19592b03a97e28619633859cd28f1e57cbbcf82838bb2841962784705b3fed126499543a38b2d6890614618ceef31a3f93797e4a21ec30c309c3cf3df745577c5124576c6174e5af28a30f9bd6412126678e1b86f16949413362ac8b898d185a3c818cf6fa399504ac980610617ce99f635b7baafc9322464a130630ba7fe2f7f3b8b75694e723c0970e4d08251653563da330c33b290283931ff95e592225c988185d388c9ae6d257c56aa0833ae703c0f3737dfb826ae3fc30ac7afd718459e2ef9a2e824a884195538a6902347e93e13458ca6851954e0ca55638c5b0cb72c5bf115639942b69a2ecd664ce1945e4f4ca6415aa59547d67686140e7a2a73fe468d10ff8eac7d0e30ce140233a27018214d9c58137acec60287195038089d1f9747365e69dfd430e30927696682b2dad02e1a3713b1b2b3c30c271cd7926b9954def9966fc241c83f916f4aec143361c249fe53dda66a73e4972ce11c2a35883d519ab4e64a3888d6cffb7ea991229484c3c9b0194a0acffc1021e114d4a5500debed12ea239cc478ab13947c5193d8463808e19ef6693145389670ef3527225c6386080779e6ed35fb962fbc4338a9f18b6e32eeb2092a4238b5885da8259954062f08e74aba2b2a5c0e080795de4c8592f9459c7e70d215548c15d4af98693e3876c9a4736e72ab05abb806337a70f8cb384955185bdf130f0ed72647c8ff3093b5dfc17194bc92a41ad52625131d9cc6620c1577e14e359e8353d4934949aad5549e0607e7cd24e58bbdd8921abdc1c12bc32565ea3acc441b1c93d4a925d7d99a57656530a306070f196a3497954c23448393b013329f70af331b9dc14154092fa29270394c23cc90c1e9472fa82498ec118d5261460c4e5529b5d7f7da52a73b6ae8a8610243a38b06e0d85143478d0c2436be0603444442424242161012221212528919303889899624947cf206599a2778bce2f47a2769a9a879335dc615474b497d28297635c06843058f561c93343129cd14c3adefef3770dc48c18e1a213bb4080909d1a185162908094935727c062470250ccd800dff44040c1d5c8c0b2f443e92e0c18ab3896565c2a570a3171129b7048f559c55439688ba94c4ca2253c5c1a2080d9d1fb1c14ba9389898a9cd848df4fd0c2a4e5b416a4ecb250e82c729ce962376f3a50189dc37e14cc5e80c0ba990051bceaf49c6744d29838f46a38b2d684c218b359c0475714a3c33534a9dd0d082c6aba0c60544d0140809c9420de7d875cdb167764ad2ca81208b341c3c546ecd9434dda8e390051acea3393efb19676498ce70ec7b518216e96b41970e3b1926dd82ca97e1f82247c5d36322c3e9db4b8a1b948ccfd08ee1706ba5f169d9ee476238863f299609539238c90cc341d4eb9e9a68576212188e399bb23627e2825abe70b450a6b7349fd0289abf098c0c5978e17071d625e9ae2468fe5d38877e96d465722e1cfce4fa67186d976eb485b3494a6d873a91168e1a9e553d367a7de92c9cca43b7ed49a54ec9120b474b177662b246bdb0ae70d4a826c86c95a1bd7d2ba45a26af3126f5d42016d3d444933d6a3689ca812caa700a97b229df2b5aaf4e85b36e6d09b7109766ef299c32aba9fab3a449f87b802ca4704ecf5c5194264da53151389fde2d75993b39640c85933c13dae6a56e37d2271cfd94fe2b25b75dead20927416dcfc6935e13ce9a74f48e98c9b45661c2c1755d633ef1259c4f2c95b6e354d7d49785124ee2b67f32572d986c3b218b249ca4fa522a852a29bce6d49005128ea5ed349d993431e69ced0c591ce16c23e3a425db58d72e0b239ca41263be98b25c899661a3d14503b228c2a9dff49b10da44bf926464edec8e08c77e33719420ba4343164338b549bb6ba979296512219c72aebabf247532321a84b36aaafe50b94e881d08a733d1e4504ab8e88ae5058090c50f4e526f938eae66afa4d2e183b36c963237c1e82f44921bbf278b1e1cabde4b54fa8bef391a01c2c183538cd135e97f9d944b7e64ed068e1a2228a891ce32078e1c393e0b90c50e4e52e7afffa8a42a323052b043448404ff602c05b2d0c1296ecaa2a4249734336eb90c649183d3fc9f343397e4220b1c9cf662fcbaeb1f992b6f700a1d933445ed6e1f51043770d8e00a6461836334298955d98ddba7acc149d2a752144d359ac9bac34016343879866d5262b9174735b286829fc1a9647b1f59a99e410651134a200b191cb5ee7425d94797d8a22f6af827658b2c6270b09a91f95756f4c9cc02769f1c04b280c131eff3a4aca056329f5e711263661284fc52d72477c5d163c45bea6f5a71929fd113f5c4149dd980b0e27041e9de689298087915c7989113839204fd7221551c7446c6f5cc7373259c8a93ca9b2433d94ed75e0441c5f1cfc243cc89d1442f39c5414f98dcd86aa9674f10531c67449fd032a9529c2aa6bb345933878f8e3c0021c56993a64c57270833bd19c5c15d7f6318dd26762da2389989b65431b9eebbdd0024148775ad203ada82e21467abf39468322629fdc44997f026bd78a75dde3c7196ebb62b419bf58bba1307a5a2661bb5931126fd399046170da01106185703104e1cd64b5d123226e9ecc29b385c7a1393cba99a386693cdf72fa9c9d030c406209938057da17b25697e51e2c85a9e18403071749372a5946399790a528d1d9738c9a0414993d637464605104b1cd39d5ad41aeddcd0ae005289c3a950999256ecf976b4884839308050e21494b4dfd014adf6173fe08b1a3b42b60032899385d6d5ccd4162c566aa01c4f81909090100691c449976ddcd320e719cf1c2724a4737c0189c4c1477a6f9d88f711a1c88d24f2858e3e8188088e1d45012090389fa4dc344d101acd2479c4318ac6ac714fda104adc11251719730525a86912a411c7f3b824e66b67c431955e4af2c60ff71a2de2a4a96b7d53fc5267b2220ea241754b875af1cc26e264ea7dba82cac52a2522ce6b6619c39de4218efa6bb9c1dbf4ef8586387cc65ed2d1ddd07b21924ffb86fb5d226960b4042e704988836b4cf25dd8e4dddd0e0244109d6d4ad1e8a201852081b01010409c379d9aee8c56429709c81f4e62bb29316e32932c2941fc708aa3d75373a5148307d287a3ca5f12b6d4a268b680f0e1bc49e651199e178489a501640fa7a04dc435d9bb8951731940f470f633c14d5d969a09291d40f2702e2d75e048376aa48ed75105103c1ce7c249c154984d728746d68acdcccccc0caf6ee1c20b11014001e40e27f55b99439cfa9e7cb301c40e5645d1be3fe9f4e607903a9cd38476493341868f8b1640e87012949e609be2893d1ded003287836acc255feeb7c4174b1a40e4709213839f9c7ae24cd4d10012878326e1b4a587fe8b25091c0e3b6b61e4dbaa2bb66f385d9dc97bfd993280b8e15831c9171bc62b956a6d388d369347ffae44fd0fc286a3669156b2a46b5c908eac5d0840d6704cdd55256e3c0b77266a38db49f94bcde68af53a8e74a34601a01420693889b1f4f9254d7f270b090909d9000d2d684880861617f862878e30469024e09f01c98702040d279d3d3237430472066cc346e3dd8840cc708a49e570711b1fb5ee034242ce44ac98e04c1e48198eb1b22deec42ef91622c359364fdb88cad028b2319c644b3fca6d7428f12e10319cf5d5847da67c4bfae20490309cfb45968618ad703bc17092b2d2499224cbad6f10e40ba70a27985213648ce597170ef2c5d409f515bf1407e9c249935872590c53599bf1000817cebb76f5994cce51e2650be7f6907329e8510b07378db1b2a45f0248164e7349cca1f5269da4435838c62faba4feb5fdbebbc2298d12ca425c87bc18df2c8058e1b8f2fa22c4b45538fc67ca5ca1c92449c30208154e992ed3880dab6f9b640ae716959be56545e5aaa57070cbe79dc95d2bef5b0590281c6be3092daa4b669e7484918888e0460d912ff81008140ed76f4a383529fe4c44409e70eedf8bc1ff74e4853203204e38c83115e464281f1317a30490261c4cc9a16288b053a94946d6de06ea430208134e2a9a142dba614e2c08204b3809d71354920d277692663000a284835cfce67aad7a8c6a8a009284e349bb24ff5210114090703099a6369b54ff9724a5007284638c139336d31b54f46f042bf354b6684caa004811ce5ff23b648c92cf7a1194128010e12c276dc491180e90219cdf5292d4f4369b8a72642d87888e1ac56874d1801c3842ec15204238f5596e2b11275bed07e1b449eeecae418070aad45d4abf648b9639b237267061981180fce0cd7899528a4936312f1fa07dde6209a5843271295d00e9c1c162a67c45b55ad36ca01a1e46f239d676f883111212802280f02015ad64e2da4853fac89a8e564b6e60a08c0520f5e912fa57331e80e8e078f9747be92af9729588a8f10640727036f17abf944cfb7d494d00c1c1d1f6634e8b3cdde02066626fccd12b93661b9cadda4e562de982a6ca2801a40667bdb43797bdbf6a411a9c667f4d5a926e5bd36483003283b375f6ccdaa59294ac321040647034492a61829762709633217b553716ae7902080c8e77a1796a5b3b4a8d46d672e8023e5e71becd0c5b27dc986dd21547ab0da5d17e94986434818f569cb3727a49ebb1d2a97db0e2ac1b97a6ed9a65117cace2a4921855e1ef4f896944c1872a8e192cc3fb43a81fd147d6ee52712a2558bed732c70e303e5071d45bb7ae2d19359ee438c5494c2b62954906b3e0fb8df6b3f1618af349f15405692717a21d592b1bc14729bc78cbeda357d223c5b924559a75f3a237d5519cd289b7934d12a14d9217c5f95f638494b1b6f03c14c78aaf624952b3c9d2088a5356bbb859a3892663b6a3c6278ef2721e4a8c1d397fee87274edb632932335548eff4a313c71493d0277989fa2776e3c4419f3aa5924c9366f9b4894e08d34b79e2a877dc7813bc5d6ae220dd2c37dde67459dc091f993897fe4cfdb16226631c59631a5d3420051e1262ac580066f08189b36d29c13ca3c5fed0ef254ed7f1215b49d01ab5a4860e1c14b0c4415fb66c3661443bf4800788e0b9f8a2464888880d30bea81112a29538f688dcb3b0c1237c50c22eb17dc4fe654dda91b53b1b7c4c82eb52b9f2e92c830f499c344c12940c3ab784ba46d6443e121f9038663f13aead94d8b50e1c60146bc2c723d2f199d7365ee788c37a09328fda8933b53105c447238c6d561dda1adfa6deea19373458e6d10bd1c81a1a8d2e1a90c888f3bb6ab2b31323564d43f858c43946d7a67463bee1641471ceb024859e9ab510f1c147220e76729249633285d420441c637f3fb36788d3de20218ea9a8f4b145b3601c0a85c23010c320100ace3b03e31200000010181507a3f1984017b6f5011480044d3a32502e2c222a201a180d05c28130140e0442e15018100a04c3601404623051e21cd909578674c7a185446496372aa357a01a88a1f8e038510bac962de644064a15be548c3f420c7d432949d1098293614b1320b187bc87cc32345099413f9fdaf7f900cb1d87ebe4a31ad0da56be81d663995fc62d5ae9bb48ad9174460c46ec4758d5917734c5cae8c3cd46bbf248612416fb8833524c33dad52619abe088120e512164e8c8df13df594e621a528559ec1c6507f7a98f049d651b95f47f2282a3aa6c0b82a9f844fa037e9d674cc3081864d5320eafaca96da0a74628bc6d546eb4d755b7a51778b1a58c15c7509b2646ea132c6e7829d330d7d2e5dc8f0e335c3ec64949821e5f3773279b53e57ded03e3387061bc131702fee8b09ab42f71ca7a528088cce1e4558e2d298b9a3a0d658080eb885c973402f8d539634a39bcf177594a017e0ab1cbecb9f48a32103109193bc059d68e83a68efb4301c90b50e1ba5b8ac9094d3f2590bf603cf88f481c6b3fa94d0a10e0cbe45ff702b733664b96f369fc5f7e800b98a073c9d29b24195343a8f5976e1ce5ca1ea51c61dbdb00b410db5cc63627188216ff89660c4138835247b8ae997c0c1be91900e4abde7ee21bf0b3edbf7200ef2407ed41561dc40b346b7d3f3c2381a1b6820a7caa3d893577b2b66a4174f77442905df9c8b54a496416ba6cdb790525d3aae67dc925b8d7b209425d000065efb18b53bbfb3698307ab737959cfe8fedf2eaabd086ea0851c3ca6f686dfc1d7aa6086a27bc0261e09c29426890c0810d0c52d123708ea80bf5ec22bc3715156dd9f6d1643910611f10b611b8e150c8130c926eecb959dc8c6021f4dc6d66a7ecb63d561d2cc2f1798fd8b1cfab087ee0bc6081610719ca067d2ccd485325a6023248c4036718802bc68fb058fde93e419d0a69631415f13a2125c500c68112e558a8ce3ada01204903549d9c754b3af16b48a1c249c75853ff2142aa5ea9e12086145830c506d3a65a4cea96071b0410c2ec286cde2e086ffc33b563305694da2093df5f26a80d728fd2b21c0a61834897de652d6801398802d7322c350cf4bf05e65f3f757bb024cfe05254acaf25972b28b08840de367f88ff88c635c269c3bbf48b88bd8d5f4ef3842f6db4c02d8662cb973f64030bc403800232a49b6f14b0b195dd3a1d248eb7254a6e9e82e340d28a5987c5426d45e0e73a74951b99058ba7fcb35b89bffa33ece5b05fcef614e1d4231f13e86318286cde08be066fc734df77f5545da6e6b89a5f7fecd243554ff2c87834b0c9a90713a9da862b2842cee48bbd41320c249c9c7c2b3d70b032fe0b64b8d0a41e3285af1c6b34184944e210320530fbba14226ba5df1b2b9c484d1de371ccb696b86cb53252b41b2d041cdd19c6faf5479d2f9ead14be511c961129462a9d767f5ba4efdae0fd3d4687c6672357aee62e0d4d9f8dd42b9799b4797cb6febe7b42edc76303ff33b3b1b995a9d33b3dd15c05565f588f77095a4698df372c49a789b648eb954caedc9b73b5fcdeb2091e9178f25978e085cf7c17b3b1ba206268cdcafb7e80e682c93a33791968e910554b14fcbdfa077b8cf314b2e85df77d983cb4faaca7a414ac8eaf4a5a5355f63a58aa4f964c70247970774f07eb3269a32990063b1aa64c30bd56c894826d28205b8f6a35368c0c467ce5668217b72db21d023c54509ea2d0b01a0271018faf23bdca56d1e28e7aa36429f6b87bd44263a253f2bf7378cb53e041bc1b8629d8b989e6e664595202e44492bed038a860dbeacd9e33fea847ca69209e80e67e416f1d6f0ca26a4236c751e41e0a4590c0ca49bc8612298441a172dd059e856b41f33725c86f7f1081494408a1cfdad701b52384d2839cd5e8be13f8bf83641c63a190e7a1d88754d949585c1ddfec3591bf2c80a6318860be09c574789938abc323233adaad25009cd1d921ccb656ca67afdfac111b614eab041434a9a6755ab1977b74487a9c16c9a3a547ca6bcbe50fd70677cc65ef0222681917ff1c2fa27830c8e497560aea2d097a6ad60254806c78bff12b8f35733275b6ebd8429ec6db722bbd15757539da94d2b7ee0778e16a3c705db7863d3ea829457a6d8c5626f246b9e4180cf4561b44854204dd132907ecaa72339fab6c7af99a611a5840eff153fb7f79ae3de5248334ddc6c08ccd8d5879102f0c9de54f43c0824100666de8a3bf09613a23d112a4edef6f1ad5ed56c00a9987da6539989c32710f451460fd29f2bc284ab541975ce3a77dd37551ed2a120c58735c0e5e555382f78dac38fa028719809064dba65fbcc24a1417a8ff4ef8b03b0f85dd51589495b6ff3ac016acb21d54921e4a5bcfc0a4f3a0389b4613636a04ca40e4cab7415fc1ba7cafdc4f6b7640571a70e2bc2608937fa866aee1f129567e0aaffee3f045d44ed9a39d214b7d914f21319146682292a44dbd2c469ec71ede61a399d7c1149598fc328cfa98462f89e1cb87441f480b9a7e732b5d22a02c7bc8d6aadcf62f0d922e68ad07d2fabd9caf384f0347f5c96ba928ed2c0b70428e62a39e153dd6f4348c6acf8d97c4522957c60326745509631d53a1374cd943c82891e4b051930af08a0a698563b6070d52ac8e7e5000e88c20a953f99a16c7c42910e0e63c36e1e2977413571a5f955c2b87936b7f6bb6f9f74b1ce1376358f0bd72ce1e1166876218ffc069e87974625e8b7b7987acc35530e23ecbdf31aed7a060393a252f5defd705bd90bc746c75667b9d9db50176b6759125e812d2cb6cfa6a290d8f0f80ce2371068ea293184974c288ef02922c079233ab28b79999475693848dde1637a9fbffa8fb59b61a89cdc1fcb426ebe993e7611c332f400edef669f06843874f8803cde06cb2f528581233946118b2f18fc9d5a89795d67777ec84d8a9a25b8c1cddc0dad9c28f343b6b26f0b424bc3f65e4b36b3d7d9fea93faeb1f42a2ec7d60f04069f56890230dbe945ca84acc19a80838e85cce0f53c550dd2da1021221bc9f7d5567e430d874f5cf902ee52cef1c55d971a4263024d3c937b88ccc2e82f47006c9c1700752a4a8517ca239cba60480d52b9281332b02d328d5d819ce55b69e04c01c59f3f1630a0ae857adae103f6284372d4f48dc5622ff97498c8308591d27f13c77e488ea463352a71db923535e7c7e4d4016ecb1751dc4326623f2a9292dce5e95801a1ccea0dd0a39ba8b40dea21a3ec9b167a322032fae66cd6409ba38699851e673651602ddd2750ad03c569e2d071f41274f27718485ca1bffc9669eeb0cecf466c169c22ab9c41275a9e7c55f51390e672aa3c843ceaddaa08b69a1b15d4481c7f171e2e8cfb3baa45c0b9b2c1862319262641122936986bb1af39d3ae5558f6b96f8f529f5728e49ff4a9ef8cd9675233a0b1b71202f610f65a659e3611f24f8875c751ddfe9de791933e4aa4770a9d9c39a3bc3ce353478067391d1064e9643b4c1e02f9503e9b724ad5da251f11ba207596f219c2b8d47630596e66a5f8052407d70808c1b8a0e14a539548a86b472d4abe1f588744e5f8ea0dde662e0bf27521d7934ea0e601b448026f439b507eb9e5757f6635eb28239cd967777909ba848d2916ffc30045e9aec0974137a8d753f2a73cc7f7cbdd4473e455b2cd75d1583e52af6ae524de1ec7523f5227fd13b3f533e0e22b1f3803928da4fee26aabc399737100992b26ed49d4b8ece939f2a4924a2f80a9af507859a76e0109160329488d108360b05ee20a32ae781ed028eee0111efd7910304ba524bb3b7b53af78fac7f6cbdb3386e58aaec871eb539ca2c04a9b6535d91285212d6e676296b1448fa0dd5dc7343490c327910be14e2459a8bcd416eef1746cd1de69819e8be109c35c41d154c114a170197f987a490e2b7ce433f0e06616f49dc42951d58b81c3016f65248633407104d452bb83d5b36704b2652b83e82776c4f8e0ea521d62860a0fab30b7a33a7c0ca63d4b2286d7295093fe849efe228f5aed5eed0bc69e4d91ba455b73f68a550e3f0b1d820f78c07fc5315b9849075081cf18910b3d434645e209c25846946ff3bd06037084863232b891b3d0788a9685c3d79bb4209aef83ef33300de447f3b7926d8ae7e7208082325344ffd1bcc264e2b046d3188943ad882c924fd9436df563eea10b19f6edbec4c170cd30ab1a87f7514705f1cb31192be494ee00605e52aaf27ffd62743446a45aa10fc82eb551db98cfa01aa0f79d0e096d1a43e1b99369280e8c1b2b91c2dbed1f590fd6ab9a52d62ff41e1d8e12de2b44065a05f1d001e7a61baf5aaeecac5b812da03442eab885c0b2d61ef458a3a722ce9aeb18e8049bf5070b03b9562331f59842127a191d9ae0b0d72e729ec97956065b8bbde18e1b10762efd0ebb999c84040110104f5126767b936ba2f931e5f538f7f4c40d1a1a997e91d999bf8a7c29bd498ee99ce8073b1ce61b83541f60199be4cf270b7fe4968618af6534da7fd9af4c769491c9bd852d181167a770cce385fa5946d5aa9ff836f88e6089d11ba4c02a681cc96106d127b28f8915e461430111ef956633fa8c923e2ff75176a5f147a10c02c2c514839c3f64c9cf1ca3e09f90ab8847521e4022997bbff9696fd295d0e43a330729102cec0b2901b8f72d09f26c94abf81eecf7130a6f8cad9810df368965728f2aa4252109f71c4b3d7438317380e66c380038ec96073ecc001f12f0db51e6f51e9fd8c6a011a95e340985d0831b2b712fd442513fe260031852e021dee139bbc96ff09e6470c13144d856db04051c6f4e3b43e45fde178f36942e654b0ff61b08067d76c7052b2e0fda7f7eaf33995bf78f49efb2156aebef0d39bef399534bbd1e8dc50478dbbe41538450c1a17096ea27c4e30a51b36d03f151279182481463225ef9e09e5e592b5f64fab1b800c07fd18c3227b869554ba6408e2b30446cabbe68adae04c6ab24143a7f4464f85e379c5904911151959ad77e70efc7d2a6fa271140add135304c70c06d064593cc75c3d59e68061c444a2a98e08a0f399b8535e4625eec860ec0243ca0b16aa0f61c8034fe9f0137e2237167927f1eb015318f072e43b0ab9053da8d883aa89323295113744b8eec1ce10424979113db101834ea445602ad6b13a943572b6aabc70fe5dd226c32ba17cc3e38965420aa63f352139ac4a322d52209fadd613bcb446ff034b6c35aa16b0ff626a963d26433e6930eee7bd70e4022cb438429a769245513f364fecd145f024261848524ec5fccb79c6238eecb6a9fb4552d32b54c470bfa8ae4aeb55dfd52bae1555fa57858a3332da6d137827111261b3763cb034e8b7f69a8e95f3d6122cc8953ca81e80b79c45e3c09415973ffeec90cb9ad1861e907403aa64a3074d3c3acce9128dc240363a2361dc3cdb78459d603ccdad3bdda5960e42aa125b560b53a9a2059b67a38c2b61df4ef4d9d47f7410ce10975132da7b7de4f5e742e1822105333c4d189c5291a894a91b0d54909d6438b067639f34802cc1da490737ce0feda02762b3e6341b91451301a1a9bb0d44f2d2a487337e53f3bcc24a6ea1a48432c861c053c247466930472343cbc4bc5691c03e6cb31d29ed8b72938297b20275dde46ac1404f88d20f6dfa2858abc727c294e918cb51a726e39c83b7ca222d6107a4fd4ec6c96b84887d85d2bfe1d64984c8850aa141c823ccf25ca210e1d2a644432a802c9a8cd52071633293369a2640ff07c0725622113d43b518bcf0b4851fcac1b0b4c28a68e005e0dd71dd080cdc81d15faf2a118b76b4f2e67489a16d33b9558d90fcd4542bdb106dd63e16d18646618d461917358c1306989a0c16dfbd408e6dbe4e5d3e2bbad24eff7547911a8f0831350176ebb37f115f1952ebfc31e5a0c23c3f43b7b50a24908f1869821d477bcf7629dcc9853913ef1430367bb3e435c43d5ab0fa56b0a5e2dfec33b4c9ca6ad74eaf7438ae14fc6edeec4b980eb51c32195cf9fe5bc98d938e9e12becfe21660abed53bdd783b001f5fdb576d61f600119952fda664bf4d4a5a2cdafb846d88d4e4b63a52b7bb630d0cc33cf62a98368b8d7ac263d1907b580fca861c090450aa96df48c0344591bd2013bfafbe007b929320414199b2d112813ed31d6f07454014951eedad8d35a39c6136ec50c38242ba3f08c0fd120b1e3bf32fc4568bb1cd561f22cfff5574fb61cbf8e0d90cf622ba6b9f1460c2157b195008b786ac75ffb04a6f2aaac20a10757702582f601f0ae5b9096fffec03f3a7924ebc716ffc8efdf8c8d9bc7d14c6b58b6159fbbfec04f1f79a07f6552e2378222066d439f1f9e3169bc6e9a54310c4067154d9a58178d7d5b23b6f7c7f1b05bb158f8cb1fe370297f42bfed796bfd25e141591c802d097de5c4cbfc9230b5220e9aa024344b7dd6a23872c2840b9ef07e1298c62acc6f5aef5fda66419c7cdada8076ff41c5ddcbf1fff5fed1451f5c00548f0e4288ed91cf45f70b2a1a4c7d1b0c9c550840a7486e22af8946c3cd797206810ccb90177b5853e2d0f8a90df9d1f3e23726a0a0d878fa2218d650bf6b1c250278f392a8419f505e95e1d53d3d041cd85c64f6184c42bc9311363aedc8a884c05c624894330808de0d8a2d08c1ca6c792338c311f24042ec129436cbe21b57ec440a4ba20d57a876f6e15a22f9064195d7ee98b532c35dc2caa1d062a01ab2cbda2e5fd52f191cc960d589c6cdbf4b0f41327e894a1631234a12c0e5d1bd7b578b14a0d49f38b387180aa23276fb6daad1575cd3ca1020c636d453882f49c735f69ed33d1515dcf514006540d9d04c54a01683a217c0564ab6db81729c2c70cc52524bb75182cba3cc9e051722daabc30264c35ef4e3a6ac7716106ee444da9b223ad0aad89ba3a155816bcfa1cd999ec57568fd07a89916eb55ccaf2088daba87705f6896de956ce269ca08b25c4b4831d777a6519e8c8e5849f2d26ad2fef81e4004be123e0829f0d8411ab285e64566635f08c24682e7e9ff9723cbc86a4b054c93b5de31756fe31d3f73685049706ffefa0284dff4b857949dae7cebbe6e7cf6fdfba13e8083c85b3225e2ff8e18188214fef8a08406bac347d49c08a16efc963b8c93230fc0d81ba73aaa1f62d3e08c01b831153fac8b135cfdbf71704e7340fb680ab06b780f83b1b722572df74c1901080a258ba663b28ca4914d27b3388bb19e4ef219b1695b7bbb529aca8917bad9da0c143486d6236d99f5feeedfa99b1ab423517cd0b9a3dda202424d402d1d854d40610d73d244235a2fca155a0054939f7a5a313f943f2cad4a651f94418e36d8f5fa4e2d4c18bc286a28d2277223065e5caa985262c23b701cae8a027447dd12a4c1e04a699703ebd3f63a7058b53d514c6489cea82d6a6dfdf7e86475c4080195ada901664998fc140e37c9d3179699747ccf4e3d17e8e3a9f0708756805167c779efbb067b59b5e8fd791fa2d59f87af7d47c45ee2592c7554069c1aa966b9959856667b280f3ddb1ea2a81ecacb4e4107755bcec89fedf97c9fab414ef81ebea4c9e29b21eb0e4e69e15b2a632f8b0802239daf72d65672e8b44a13d015cdc00c60d525e0b636388056c03b30bd0726072e40311d0980d3229b19a400e9c2efdabf81820dbdc7f03ba3283845ffe1e4c40ff0951f118da7646728e49746bd90c300c7e995a67cf771f750440516ee4757b5547114c2477694be7ef75db038b5ce43c485e21c781caca502fde24ed917ca5051d32345b25cf8feb3ca338a86132d63e8740089df1a0650ae39962f4d3dedec1e30c344ef879be899464bea0e01e81f7c4a91ce04e86a7c43ed02a69e36b04d82de88288a4ea53deeec207762376eb2e66cba05cf1696c28848dc511b100354ba018f8bc6d8dd388c0d99bea2718e240c9069afa75821d8984e9a90b5bd845321f9b058a132f388beef94ebadfa58d4586204e37e12a158176563d7522ad8648690c4c85dc2984df09c66ba068d40cc41b28e3036c53c3416f19df65eaf0fc05b1963ae352db3c2a1f5e6c127c22b52d48aa5b369d02c3c267599d08ed1739455c6f36c4916062811b85828c5a8003a2f51b1354c5616d15c52ad31813f0504cae0ad0d6410b6368955dfa018463e21423723b3a4bb352da4ba042be327747c839889e13956fbd7e2a78fd4954755a29df9dadedc80313312a18fa7d171f631422c95f8a8a273695521cd622c155b26143611c288f1cc6d465fbd7042b63bdbe2a05dc6c16758ad2a82b710f96026eeebc82b9cd11a43fa1a3ccc0e0c87f467438832f84f1f632b774c7fb8fa346e181d975782380fa993dfcdf5543facb75d1dcc5b0d27933cbc8ad68bf80c1a885b00fb0964fc15f2feaa188c22b1b969eecb5482fd7a45c4b1ca3646a78c05e5f80e6998d793f2447e16a7627a29f90cd6359353a46f31cbc5d5c71ad462564da26ea4c315d3ca0aabe1b6b4f50fa988d0c70856c859bdec86ff5b559634cac36485662816e29f7ed965c65b6f75121d1c71ecc484e40480a98e245f8768bf3434cd30e48b3b84b4f7d3a71b19b88346c8ef61f9e44fb22c1033e3a0afb806bc003c7466e8e8af355b1a0417a401464c0f9abbec312b21f7e816351a54305c0be79d80892ea0cb67ebbdb6f7d592e7fc7056c6b83dc12c70feb66e1550b5bbca9701248793f7293c8056b95131a25f4329f38ba29b80db8cb58cfc19e90dea46991ba54b18b276ec9eedc295362be61c42ecfcc0355615a757e7b48cee2bbe13d41d9cce575bd20cb98a2db0f412544bfa311e78647a3e3ea68c05d1f24d0c40c9bf2083b36f4bbcac44e60f1a27d54e0e156d86b6367329e6e7db1854ed16100e4f85a1e103f094e63d6e30336b562576832bf30b1eef17d2add3353e32f8136bee0dbbbf1e381cbbc4146843400650da942cff4e93b8884cf361c9ebdc79c1d4c9dc0c0aaad61ec0dacf97069402c85f56c1369e5bb35bda74f0880d8f450c6d9fca2f811228afc5173e26b2d9aef84362253b0f15cebbbdf3ba2fc821f313e396564df9aac349773e72c7238ea3df9368033fd8bae9bb0d444505f8bbabf8d82d7eddc75f2f8a33aac073ad251783609072b7e2fb1545d76fd92bf31abe24317939c256795b10baf0dbf03fdf44aa0012f4c30c9a0746f598d846989901e2a4be1e405794a555bbb979f2ce4265e3a5be6e98aa95d75ff133ca98c8f84dfc6ea73ec0203ae19bd5113a80c9a0ce3d34fe940b5568f1ed9bed53832d8541772a454faaa0c27c172f6af976f73918be10c36c2bfd41cbaee0b6fbdb486e52f2ecc564c64e6179cea6939cf86e5a666abfc42ed8bf13ad543ba552dd0a21b77352de45c878be8001a06aa88d516c01f4f23db260a16e7bfe099bde9f36a098cf6abd012caa310726dde05a2b824587ab8555834d1d460b9b064f5fd3ac52b336536e8cf107d58651790d4fe8e63b7280e9bc2a38725cdb8e2bf57d23f9224350d8feaa3ed371921b3790eda626f45f4ef4aacf84c9726091097fecf172ffc385223c0199fe591083304438b4f8714baaaff33e8edb26ec5244f7352498510f351a22c7be0bfe2cf7560791f0c769789fb36589bb3511a4af37b399acd98488e1ec93983fa594b9ebd20c81d47e12302cf42864058e2546b48a83cfd1f013b5e6041ca88db363d488ee9904645c7315f6e5bd2c9cbdd7a51d565bcc1201b6695d715e8a266585008c0c78bc6ec903daba632f76b718eb11f16f56e328bee020a1412922b05a8429d362d05e7e014c76c5206b19d9e4b283cdd021d600ab832b9c44e3edc3e4214d88f4494a1cfe68f18c5f532d2e6d9606c57c2aaa410082f13403678b21657a9c7bcc80fd5eb436e58b2801f3b6df878fef3ead6a374ef48b16a234dc3dbdee3a1a7a38c0a68f57aefab6078057ad5fe09b718a8f442e009b2761f1593e3695d9848f0f1351910d20e3112d4d17e0992f1551db6659167f27f32988d1b151861dbf601885b7ccb49a226e106a6c6e6f11336fc19dad41670751daee2586d51e63a7b3fcb1d67b546f4929ce3e0aa0e52d512d55ecb4623fc3a8bf89acd80375dd15cf69b5e4d2ecaf6ee98c282038cfd1b9696103d11a741cd9d4fe1ddc7f994c6457d6b24978f5364983bce1f9a78357c8fcac5e18581de3f3c9ade1b284cef16d82ed736332f355caa3b002ca74347b12e178bc95b323b062449ee0f1c6112e649ab02a6178b8f612580d0dda771dc320c1167ba21a280534882af21370177885765285acf06bf6ed1f49c242182683c7b962cc8445c438c5ce250f7d631466430e821850fa2f7fcbd3548043f2787927695923e7ae69187b076b912c6ad9afd79ab33461ec4a0375d2d17ae9fe6588c2eb1282007b3431d1125582dbe953894cd675f2b2d52fc399c09048eb348e0af6c3441ea3b7cfaaa0e68160806043f1f154c17b992bab909573940c18cb775f698f655914e7d19ad71f56075a3c2d11407a1d92e6458117d75e9bf3cae4a5002fbb79f9e8c5a4574d5e06f062a7171dbdbe7ace8b06af427ba9cfcb939727bcc0cceb201818d9943e396d817ecd30ffa1d021a3b6213c13a8f0f0470a2b87790280f5b1d096a5460a48c4b98ab4ddddabaf22f9ef54be328135c4cb1e2f9e7931e715265e236ec40b4141f2eab52f0481b5d4cb8b1767bc30f78a50af39bacb6b072fa67bd5e865a017eb1be9433fdc4a5ee2459117075e9bf4cae825c344f27f8757afbd9af3c2c4af0581d5e3a58b97d3bc6cf322c8ab1d5e9e7971d20ba35708eaaf89e94b54017bc5e7554ebca4c3d851cb08d406c7558c54cc009f4b991f148df54c4a16f177b347463e371a59153093c0305cbb607a05c10752754f24e0318db6e97cc8dbbc109756d5aaaa549bc419b2ac2c314b0393fc13f1e871d096e98bfe60f959e88d76cafe8713023f1e648a4f657c0263fe8d48e2a549297b5a3e217bc7784219a4cf2f47588ec3402f327896100076bd4dbee5da8f4e340e5892559fd120120ce881756556baf7a5263c61822530413f8648200f805f700d4655bf0bf68574c80c8f89b651c687241425e8b41918679c4429872f9a469774c2c8e7c5c2d68b1fe41a94a7acbe39985baaa8ee8ce1bf08512d3e0acc992243887dd6a3c8497800046a24830ad0556d58691043444aa28e8ff07f75891b140bb1be840500f41170d99cdfba9165f145b084ca77e993b10c658bf2b8edcf1e134528f66a39c05c9f09f623cf78d5d094f4cc52bb971fc7d8ef3b1ad033867dedb8828c819b4884f98aaaa7841311566fdf861d388336e9989db874df2a700347375b40a1815f8f9f7509749cbceea3e20ac29ec428fc93741bc18c50a94dc03f58e50cc92a729d11a0ac301bb56b8d1fa5ad3f0b588826236c60e0bb4c4c7d39a000cc260eacebe74f64098cee8b1a27db99cb63e3eb95b763aa8557cb9bb3b14dc7770df649fce81413465479eed7609ee7aefb5a62e4c9ce9927e2cbf3d3361ffa608e807e85004528c3b01782ed2959760af9e403f03e334e94b11fb4aa490437ff4d858df6b91e4a18d7cd9b3c80104b80879a888e526fb2d62ead77206a3599f30036b691a2379dcaa526a47fb628431467fff24dfe8a0ec39f695d38b90a5f1bb89c76488f22b37aacf5c6c591abd03bb92d7c9e2052973b48f6eccc3594c1cf6cc1170f0869538c43f6a15d6983c613512c5f75e8bb3e300cf48a9cd8e3075a3b6830e017e43645b35c59e620ee0a74cb26df8529314833e0dc7125df8dbb093d4ea2e6b1ba2abbe1327fd95d1471a2e18ade06fc4616f84c615e8ec6509a2457c94c0243d2ae5c278a9ba43d96fb810ed1f43c2dc188189026954a4402423e206fb0c5e2ddbe08b89d7e40348aec69b127a32f459f12bc9dc31c37a77ab463c64ce27e0428b8c76ff3abd96e74f84b90b2baa044c484ea5d10578a8c88608e808c1b81091740e9810c2e8362f461352e76e111ce12c4865a2d4e4ba4f8876427473db86e3022dbc9b8621cf54a252297ff5bcac4852f0b702e94b83a580ca3bb85132d3c6f56c54bee603fc8c97282716644b76a58b0f0602799a2538041926f95fa8cf82fd2ef923446402802684deecefbf9d8546d7fad544bfeabaeefe3ee000cf5fcdba7a3c3c0d2fe4f3406317da10b30a3580fe9c1e0097b12a588e536ed590380051ccd31fa8aa8b42507914d78ee5812d0ae8cea77c19694d790bddb445cd10af1567ef714ec85a2446047a3d0af4b94726c734ddd011a6370149bccfe6f17a4805052f579e8838ca19f14064ad092666916f73100158d308c268a24c3284a301286dc4f993431c2d124a3ed9fc74e0abe386a08a2643236ab1798cd9b39bb8c629d11d9a1ec31224e85cb7c6ce2367e142bf81837d03b68414d73ed9c6b2772eaa81122bc61f9517a24776921d00017280a861d39664e066c34f78aa2a8a9d387ba888e4c553a10a24557b7711ec574b3937307fd662afd9dcc45105dcc3c6c607bdd113f663a50482a0a3e8ab484c147cb93ae50a5180ea8fbef1cd9a2981b437b11226c4bab4944583167536ce7fe125034914dcf26ab7c36350c8d9ea4d5f7207bfb0127a935638e60ab20159847c68349a5693b6d08110e0bbe90c03a5a9b9b94760958c134c576abf5efd48b8ecf86fdd730bd8f43880158ce711a9c7a38c9a9d1a52268fea38986e52c66cc6a77e56aa645a4c46a210baf3cf4ebb8d3613676e45100c739ac0ca51721515e69278025858c099319d7cb9466734b6a268f931aedd6ede318f38b75c3cf804c6b8b35bbd98cae3f56e606b9d299ab4b5fc9a5c9ba89afc4bc184e6dffa2e52bf0b4d36e9650dd5069694c875444218413baf2e5af762ea94ae0935f23e454cc579c28b1c549c4bc5a30179a26ad8f948ac01fd7f026399945e4ae8547132e554b7e4dca75cd2b67935836780a3ea8ec2697deee84be8201e3f3c860a0ab9a6f6bde2421ee4ad32c8acdb80dedf15a2b6e187ea64f68d8135a98c36a8c286aacf53faaa825020f068bf4497a0427f4399df573b7e179c7fc973b7517b650de06e33c73d675ec191687db3129727054a29c8cbb9dd9affde15055753656adc41d17db2381b153fc3f250ecee1d75ee417c8aba62eaea089c60bbd3f8c3926048daa9e0e3edfaa5a1cb76121de075d931aabb2194ad97f910e58d6bc4abab66d26e8af7a51b9aa46db17edc22f7aae9a5c40446b645932fb0d1a681d24a2e78cee9804d9f8d6346a47a9c8498f5658110d0d005745d5946c3691dda9a553859413226982076d365a95c5553219e991d386988a41028bca0629c185557f9914e2bd4599144de9dda7a40bc1a2d59c4d17068a0b04b3e62f40aaa57b8e07c7979a5c49195e845d970d5cc06cda048f8130e6e0d23c8c20a6cf1675f6b8731daed96384a187f04eeb3adb2f0c334b1091a9ca2f972fd7ef5fe02493a80df9d534cb4880f17cee3b2b9a89d97384eaeed990f8a61d7865461975375b5ca3df4efa38f006228f9ad1bba5f63340d593d1399ee8f2146f8809a44e9e53e182bcd260e4b0866d077a25636bf3bacdb2ad80af6121b074192276101f72e81a42a9adc7f5d436b29e7f822ac103a15e8626eb42544863377c12ea9fd048482b8986f23d6b782a8ddf44285a1ba41532de81d81e052abaa766c9b53ce6e99d1f42755c07f1662231104f649a932f7898f3e298f7bd37536a8d3102c29b924da149244ab2d0b0f249a131dad721ee26951cc0d80b361e183905641012b696a847bb735a4980ca9370216baebcfaae9aa1707c81ea261a28c48ac1945ff5faf58d1e01d7a8831b0105789b8c71d51aff021dc085ffe86160655005afacfe26429d7cefac4c735b2f5eea460c05220c1bf54d0c090192a1e7298f4f9b040309c3037941d88f02faecb3663c11539388d7c69de4ba6cbee07f9ce0e1213233b830e9e6246ee7369cd9f29e33c4b95e2e1a8cdb9ba6d02cfa6d34e28016d7074077c1d906972d32ba54f34ecd8adc078c7fb165c5258bb186c5a442e374cc0104764b4281b26fdb050a2fca2fa6b6295835f0dff8beb190a7633c821e0a6b98f298b1bcc7d51cf6312578ecb25837111d99cd893f45c3871f0d938427cdce612f7722d6dad1760d8ffeb4cc91a01b590886f0702b2b179dce6ce1a741c94456a127e8cdafce282c0622a59b64c5becf3a7baf210c6ee86c0c6e4637ccbb557587817f0993100a44314498242eb6652bf98b8483376261a174ca44a6d0da8556473fef5aec89af44fb2af26d3ddcd3a6e246f0c48ea28da364f9c4881c2d30b92889c6ca2d6f99ebf3c55cd3689936ecc651b279bcc77cf67b085bbc1522b290380bc72f115805e2fe1a1f32a68ad44c1c3df96d828a3473a99d20939f92b61251e0dadaecee6fc56f48256355768048a2890ee982ce3e0934e011b2146da83be42e0e0beb7830589e3b5ee6c3e3d4fedc00e2040651d9650aed8d40ee509c6802ca764e061ae0e19780318f35b7eda76d21f835e8363e38634c203c13b42c697c5e012406ad34c7093a997b37f1dbdffa199bd35156764a99917dc9c2f4a51884035f17f209341a6d294136492ded658cc7f4d7548fac13d7fb32415479db79930b65283b7f0ab67cad5a44c127855ad402adab10a005030cecea958d54839c6e71ee6fae119eb1051994c6503070b1a1b641c02969f6ae3003d2ff9c4c5ba9e4efdaba0e0098f5de0268ae24c5832e6029c5a2857f5730b51940f652660977f62c9ae9ca337f1ddf7f4b8cd72b0914dae603e5eaee6df23be5ec8b6259cfdfec699d82bf21968e22036c6102ae1e44850a3860b26639ff0000000000000000805ae02082cd3654094e494ad923bd50c6b9ba292529534a49c24c7cf47466e2d3e566dd6829f1e9cc042eb20a8e0a930a687c3af8208261ceed6f2e975a4dd7790cc16497b535b4dd88dc721d0e3e84608cfc96ba93681995936ff0110493082a9fec8fb8fe2de2500382c943b47a8594d792c83f309b88729d21c446dbe7037344fd208230b97f175c1b7cf4c0a046bfc2542ed78e0726093a7e7597eeb85d3874141a7cecc03c974fa4502aab3a3004512a654bd7109d4c3c52061f3930a5ec594f33110f1c986542d03495e4c41879e4d8c27be4c071821b3d3c043730c7b7b009219a52f13f061f363057949ce23a296b601853aae2bc93dedb9406869cf5b3de3d2266d583c1c70ccc96a347cef94f6ea2c6a1562ef89081f9462d2c967a9994e5f11103b35ef8a417350ec1070cf0e305a64f5591a023ddaa7c1cfa850f176c52653d9e12aba0c4a12681b31d3dbc40438c5698f368869d0aedc95338062bcc1b167ea93fdee4f9ab30e508a16b3e7755185363d65452553141a930463ee5e12abb6684890af36b688848928a710a830879ff74245f7937be48416f512e03314c613cf7902164ff5ed2932d85f125aa04b5b85a0d597b71c3cf7801314861f290347e252b56b7ef8249116314e6edd3f6d7364972e5a388210ae3a7b210792686a988110a93d25f3aef641f879ea077a41a59d4b861aa88010ac3ea29b917721ec5521c6a68f909d35338213eade60973fc293d5e92d3b25bd888189d30ddb6a57748f7e16f84436dc7c5e084d93a89104b5df8ac902bd603058e1b88b10983b6386e313b07c5d0846994bb589eb7ec023b7ae8309809835a93623ac48a50611d397a47b2c38479d3b2b45e2921324438d4eab8887109c3f54ac891b37b56d72d613eddeaeef9d47974b10552eb11a312c6f4a0431c6f47108312a67efb52e52526c94e78600fe7c11e63122639edbb5421ee73822386244cf2ce54e7244f2c1f231286536d9bf59f5e74f801312061360f4b5194d9d64809393511c47884294369f99474f7ab0d88e108d32891394982987feb9880188d30e749f954c65975ce0d3446986f2cbf88b4efa93543333116614839c47daeec77426715611a2d9353873c0f6eca44982598680471a13a7588fc023cb6f0828b1c8830e820f4a56ea43d21f11a59d4c8a24616356cd84033c43884f93b5a8a33926dd255928ebed103f90e1d11b04004b47000c9430c4358d925c48a5d965ae9465954af94c61c5ce4d862470f1e3a72e003b2a881811a5a38a00662e11bc4288449055b49fab9dbb3840861f8103297f679c743671026e9611e2dadaba3bb823076aaff4c0a3510667317df4ef7a6a20f08838564af272f42dca7fcc160ea46c8cd0899b1a51f4caacfe257ad57d6df07537a532d2fa9f2a97c30a754bb5036b24646700fa693d16eea4d9bc829a607738a9c27989ee45a57e1501d396ee828c18eb41e28f06279305d923a394524fde4113c182c44f54f37524736bf8371928cdc113116a9467630e76ce7937abefe3c5607b396f60ea7547508daa183c9bc928cf5e59ca434d511630e2665e3917e44ce2172580ea68bf0733a099d389857cd84ac5aa46cb9858331ed227624fd7ffaaf37988358cef515522de5e20683654b5a4907b70d86f49f93fc1096376b6183414711b1922f7a2925b20693585db4a02ca60693b0330be2ef7764490831d2600edb8ba73735dbb295e304b945a32e1ca0f6858fe0c6168dbad8821510030da69c72de855c366c300c629cc13412948f8c24fb3fab19cc2a49241fd1a7e35b57088818653056cc521b13b92c888a0ce66c4252f20cf11c533406b3658997d868fd8fb31e6288c170953e794e108d530983d9e46d7a909e3cf8e4701d6280c1742d3adbeda96453d3178caa9f23e8d28b15abd2218617cc419e2599a442b0b9bb0ba6eae0d9dac9d511811a59c4e082792b9eaa109e924bae481c626cc1b81e5346f35399fa241c6268c1282a82ce927f9205636d95850de929a7bbb0601e887105930c31511752cc9411b182517fcbdf3d4292daa22a9862274af41531150ce165f4f7ce68b9e731a66008c23727880a1ec4ef86185230f76a8b4a518da0d646c12c427cc56d7c28a02cdae824475f9e606c1165af1226dee9d7090625525b3835aa4788d586184d3045d8ea4bfa2f86e7b0d8168d1188c104b351622cc11cbb6997ca3656a288d710430906dd75e5254d64e813e1e891e3044930a8cd4fe6957ab3f9b9e1c9300a31aaf2c617e7c60d2f7818a0070a8c0d1b3d50e046887104d385cba48aed938b6104738454e7bbbd679e3d38d43cc78e1ec510d8c00d00c4288239b753ca6f11644751952c6210c1a8b5f392dd6d84529fefb891a6c5099a027627e81dc810d8c00d07c41882b12fe66fe979c918950a6208c1a45fad93e4b21822df41308c25f50f31cc3d7d0c04531af555dd624ac4ed1f98f4d67ed657acea087d605eb90bda95d2ed7cac07a61c4eeeba477537552d0e62f0c02c6e26ddef93e8f7241c6a8725d881797b4448fca8ebc0a0278c641fb15c4abf1c185f3db7a2df7d77663830b58bc8282d7ff966528318373069d38be8dfc9dcc36716c4b0812167c5cbed0f493bec3530ff7eae1b1de27dcfa58131d2bf099d3e16969e81f1e5ef57d67cd2478a0c4c09d1bec13688110373ca576a259652e2843a631003066679f5dad5f5a062b4f302e308b1eed1540ff1f4165ea42eb2e0182e3089a016d4bb2605bda621c06885b9524572486bd94cc71b5614062b4ca276f3c3be69f190afc2a42b65767c30550951855947d89a5241f9dd4752610cd90b2ee24c67890515e61fd9515697a27ed04e61ea11b376dd39b7d14d61d0b0fd9cb632e7712395c29043caf6af5721857144ae32bd728b998b07608cc26cc1df54d64f558b4914069dbb5f4789142f212914a65a53d232239f8b66ee15d0624161ca215b8bef8853bbcf270c163f54129ee7a672da132639e969bd94a513c64ad6b9e47cee941e278c736395ff92ccb5693d50e03ace0a4002af002f8c4d18f4277d3c75a344148626cc714489aa1445e45c3b0b8c4c184ebda3e5685a445a480930610e3e1ef5c2da7d2e2ee1e8ec7172be99978b2e7af028012a5620b0811b278061095347bb68da2f6b57a6e8e9088c4a98e4863e914447d5e9144a1867829f65f718d1e4641246f7e8dfa73ac7bb182561505dda2dd56f47d16044c268ba39a275c2bc258543ad402279e163473c490e188f40c44cb86a9c8c984b82e10893fe9e742f29fc071114008c461874df97c593534a2bcb1180c108188b38188a30448bb91573ca430afa121ea76024c22826effd26a7ebb98f08a3f7047dda836629593a844989f230e2226b08838d9e10754902a310868f09b22cc439cf21088310a64bfea21d23b470803108e39c5c90954279b6480ac214b5d6d2ba5f0261f6ce254b45573000619c3427c793c83c1df63f183beaa9581b162dc0f083c975bbf6527caf2474187d30a7d2779e9b5b7ad4a70330f860d6b14a6169326de5e35182f6e2068f1c6cc3869102c61e0c39aec85a104238d4accc00861e0c3af3aa245efba49371a8251d5d144b3a2260c346e92760e4c1a8117cd28d6ae9ec0a0e35af3b040c3c984b8fe84a21d77690671757438b04d801c61d1e0f55f77e1f0eb5ed020c3b985aae75d7b7e3028c3a18bb4c281969e27b369b0e86fcc18425358b969152038c39987343e73e4d8aceed09430e86d159b77b2e77b87b5edce8d137925fc38883417e3d5682ca6ae7e6173b7a2c1ccc4929291f84083597ed3200e30de690f1102487939f6ff322c70878b8c158afb5a2ee715eedc7a156a6d7066367e4a4747a5b4b1a296c30be9ba8646245d2b9670b30d66002df88ad9158122f5318542b8772db89e5dd970215b133a3fd375a52f039bbd342de68e65b1c26838c5118d5234571f5f07d551285617e6f76eec5acb60e8579cf3d9a10734161b6a44fdc842047e99f30854b1ee3965208f1d29e3005a1967bfa8308a3974e98f5f3947a39fdab0e274c422525dcfe52470e132bc8d88439f6c37f67aba47e2c5490a10953e83f91245f52a1722901d7801a59d4309e828c4c7c2103139befbdabb5bf27ff12897c4a9c102dafbd2550774d113b1dcb93ba12892459f4f88520b2cf94402f8697eedbae3a89f3670f8f7a9bf24949782ace3272f01d55aa48ac91524508c9c22511725cf53b5752b9bd682eca7674d1a31912869d51cae48de48a91f3a21f501c20e31186bda04628fd9caa2ac911468ff3492aeea811c69f381a722d6b4fb78c30f676f976a893f9a933198b307cfee433f1721daf5784f1f2fe8ad26a4a84a9322be79567366c1c4106220cfa2bfde4892617641cc274f13b964a712a88a56d0b320c61caea9595edaaa07684a3478e4b7b808c4298f42871d94f6adebdb77c90410883eafa2cbab478e49c17b3838c41984a9f5e93d82976849021086388ee9895678212e325a04616351050238b03ec4046208c9df6f3274f7a42ea1d10660bf5345f41f207d3785ea80c71f5a9f27e30e8d2fd20b7ab94907d1fcc611bfa733bca07b3798e73b5bfb3773a7b309f485eaa5a173d1847a8e84b9244c895cd83e944d2ea50f1b73e8778304b5a713b693a12fcbb8339e5a810c394acb7dcec60109f62664b87aecb791d4cde5bf1bb3fc9a8b8d2c1dc267c5c4f821089dab0c1021973308a70f11393dd891502c89083497d5e9a0b21a5d9ec71306593b27ff25386a7281c8ca62eebdadaa5abe46f308b28ef6f112927c8d573ecd0227bc8708341bf77e89ce29a04bb0da6b3911ff27a49c99183c0066ee890c106934e237752e4dcc9fcb206c34910428c3e4ff9cf83434d0da6542a5975eacefde55c461a8ca2bf629a89d160ae7caa3dd29f0925476730f7a5a869a9f3e568130eb52fbad8d1838727ed0202756630e590152d490a9243a528c8f15c06a35b955825f91ff92d19cc2df6b9a4a4a8a6f3c2a146648cc12c41e4158ffd1143d259e0e0d10ad8f3a2b960800c3130c1f3445c53c12ae5c360be1c3949bf46d2ed3d184c36da1bd6dd6ed1c50d3509c8f8c2712e22575d48da35834086174c3fa216ee91b43ba97ae4b8512220a30b4b8a1564b249b71017ca1a9193255dd56dc15849df2715c29e5c4870c8d042714f8574114d4d9f05c3c6ab4e554a414e0c0b066115e3c39d8ed86b5fc1d82157be9d88658a670553599d4650593c6ec9ab60aed73e8f7a4aa65eaea860ceebfb140c7b6a56645ce44b139182b12d8c0a3251ddd28551308950124d65bf3ef7950990010553b5bc9e2ec9b177949e601a93a97195a2552aee045310d2a2eba8785d13cc393fd4f928755a62aae3045d9005c860822984a8f8593ce87709598279448589dd72418b694a3048d2a17256ca26c124b4847fdb6df6788b04536849f1b255b8b0321ec16025b5548ea22e5cc74986118ca26de4c5a75abfd8777471c375e4d842478e94510473cde5e7beb020026410c1285927ce4891233d8f56011943305d8f1a253caa38d4b8f01e39180232846052b247cc67d605b9054046108c975ecdd7cf73c9bb38200432806090af2351aef23f30fa8dca362ff314268a64f8c01494e5302a8817f5e8f5c01872cfacef523bbac83b7264f0c03c72aa1d4f7ba4337f072693643a85ec900eccd6973fa99f545e2bc98121a7389e7c847060c8e6759542957c49eb0d0cee71c2c8f8549ee26203934e21f58a6a76f69cd4c09c3a24b1e05e6769cc0bc8a0c137427bbe6bc9bd2f0eb5828347e3c818c898c10c64c840460c8ca03baac8564717396cc880813969d719f5db0bf1de1718c35d941a093a2f90e1828f5618748f1c95a53bacc4cc0aa48ceccc4921c5a1050f1fab3009efb3104e0921bf6fe1431588dd16fdf954362acfb1430b367ca4c268a9dc2cf72f8a52692b45f84085d15f43b8dfec79afa7ec071fa7302571b19c2a3385d94e99e7b471f928c5d5f263134ecda4308a34f5a9b9fd1a261d853177e4dba8f56edbf8218a748efa47352d59be8642ab90747ad15a13165070b9fbf127278bcba94f989dcdbac683e50a9fadb127cce65154259f347a6ee2502b03f8e88459cee6aa73d529d3951326754979d9295cdec9d9001f9b307f8a154fb84c3e3461ae50418f962fcf0f392d3e32619058e5e915422f4926f081098350a245ec558a26455b8257077c5cc23c6bd1543be8f68f6cf9b08429efc58c794e5397a7ea47250c62d34ca29c05edef97067c50c2e821a895560a49117e347c4cc29ccd74a77afacf0912fb9084a94bb79b74e468408d2c6ad4c8a2c617de805d37277c44c210cb7e3f88644992c8cef00109a3640b2a74ca5e86e1e3116651a9f2ed22e8d241a95df87084415dc8fa13162e65d31b61aeebb6eb12a7792d62844972450f19ef2c67d922cc3ba7af737a8f0e512bc2741a6662325b612a7c858f4418fd634c69a66dc71e1161bc4e767929f8cb08ed10e60bd5d9cba6a64f04b7e81dc6064143f45a6af4a4cb1b22a8818f42182c5f6951192aa6224a88dc3434a29ed2296e8a43ad043c6e2057e1631046f5135a7218cf49545b086ce006013e0461502a9869959055c72f5c788f05142021bfc0165b341715b06103a9f0110873b2ad24feb95d844500c1798714dff172169e638716850f1f7f30f9289d75d783fc521387da7ef8c11cc7fe4dee33a2c71087da08dc79e4471f8ce77e2ff1438e5f0e3ba0dc2ae0830f8628d122ad890b1f7b309d47bafff1ac1e0c39db5b576f3fa8892d163ef2e0e7483dd16329f3f504bd63f160daf43ea5de65657e5ae1e30e085167397729c5ad8c60d25454a9bd0ee2143eea604a07a3f79ed82c9917324e366cd89883e9c3a4bc973ad5234ebed8a145042890b6c881230b1b49f8900371748a8f35ab3f53c5814df13737e1c08d5b4ed9be376c5a5dd4858d99187a3720da4776d9882db30d054db50ba3573ff5c60674d9566dbde70ae61aba6c9752b4bae814ae1a76bfb87c233b8c270da6bfbb7d67bfce514343a2bee3f14c8814c22f5291f3a2b9c08f331857544afaefde7192f002663025d38bd1fddbbfeb2983e9f53c4fcaf6116dc43bbcc70278f04106f38a4a3217b4a8205e31e1630ce652e9b3e74b73e9622406c3c9ff7995f0c1530585c16cda492f720e18cc219f7fb43026348485c717de802f98d3a45b12d2e64db7f782f1cd3736275e085b62171052ff62086d8f767be13bbcc8a246161538415320af2e051f5c30e42b4f4996daf9d4df1c7c6cc1a0d56a7b94bdebfb480b06114f4d08bb390b5ac8616ed9dadaab622f488b20ff72c84ae1030b461d5bdb499eec7412af6058f3caf27ce2d4bc680583faaca24d5f84921bab60b693f03bd7312a98ef2428a16d4176f23d059336ff5cd92477c55a523058dfa9b78d3099de47c11c72ccb6d3895ef001058359ca6231774f442e0938a0c6c7138c958469f5c88d4357f0e104439af861225654f0d10473d00ce13941f6e434ca7182fce283094617f94fb6af11def213b80e371cc2c712cc1e2b690b61db02e14309a69044c9f893f10a55151f7c24c1dc5539f6372498b294b4ac967b418888024f3a721cc1e429c52ad1afb311b23abc878e0e01b91e7c18c1b0bf66e9b4b6894aa122986386ddc7c72a3d7dc74bcee1c14a021a92305cdcf7655355c95da41b091a90b874ca5e95c338d4104081b332d078442a82a58f1d361a8186230c32f12dcbd2f7b33c1a8d306d7f9ece0f9dbb9fc6a16644a0c1088348a22e3d75e8afb82fc230223a7b494c4f12941461f653231bee12c4542811e6ea8f2222a7542dde4184e13da89ccea25edaca8730bedbea9aca22f2d586308739bf5163ba92aa5288ed54e5180d4298530cf1c99428ebc9168d4118562eb69ef75dea938e1caf05175dec40808e1c08604dd01084f97fe4460c179556d25f1cee51022f7a94200206a011084310d7a6cf3c87a5a0a501085330d7fbbc3dbacefb3f1894a8147207d99576763f18ff2ca5ce6df7f95ba6d107e3bfbd4f98df4965691268f0c1f0d7a5f3bd0753f8d3c184c795ecf2ebc1642336eed1dab4a487438db740230f06c92539c71011c243bd800a785182e407f0a204c9135a81061ecca274444ba71942362dd21dcc3976d8d31d7fb2f376308f10e69d26416d45f7041a753058fa8f24750f1dcc6f2e6afb6d3e45b4ccc19462b9e4fe739940430ea610ed3e2dfc648b368a83f9c542c8fe37b32f0d0e66916469c3dd9208617a83d14d6d4eca66eb041a6e3025c996724d34112425b5c17c97e3563eb282bd87c80626e7b64e1d847e0d051123c7ce5e570da6b8173fd48d38dbde10d360caeee7a29208a1c1dce92e8b9acb229ec1bc3161c6d4753398bf4ca5fda0efa3e7530683ce1372ce31b4c73515443298a4de4b88da93839824d3188321697d0921a9490c265133553988250c77b23e99fb49642dd00083290769e3499c75051a5f30e56e958e96949ad3712f9824a4d331c23f9467b50b9cbb8b98985ca9e40a090d2e18c4c8251d4dfd446f8254a0b105b3f558a85b6f51af90160c3b792fd69e3a0be61492b24f9fc28dca5a7651a08105e3a551e15373b5408fde0201366ce8f01e3d7a8bb71fd0b8826177525291fffbebf45630f7870719b7a3bb925f05937e55dc8b4e6922f854b0dc838e97a5fd14ccd9fd21eaf5d2b72849c114576e5225ffca7b52144c29e46c0f1392ce7813148ca63627f566f2644b7a823174baec6891134c4185e491d72c057d76134cb975a7cfd4d47f88996010223afebb88d331ee12cc5f7deb49b3a20453c7af9c578224097dd061a6ac4a890483d8c91b3124e8b4a03c82d146be46e89817ec934630fb4e32719d54048390587542a9b67b0e11ccaf97a7a3840aa51f82495f562b2569cb8488423025d5a267ea07c15c29c9ec9b1a08a63cb9e3454b4a4fb7fb8141697d7c93a126669d0f8cf62aaaad720f0c172baf98ca7255d7786032a1f9f162a990fc543b30efa5daca9d5babd2a203433691f04977d4eaef7260faac1d714f6fd775690b68e0c01462f29561a14b8c7f0353c7959830c1533d4575010d1b1827e86bc9c165b42ea9062691e3738cca9b9011d3c09c52d372483a7c9093cec028a7e276b608399e90d0908149dd87f3b577c949e53da0110343f449ba6e2107e195631a3030956b884a4a2ba5b0660f1a2f30e88a8550232e28112637767471e304bd8301345c601e6d5b224e54eaaf120ed4c3df8c5839c08c5698730a5e73e954e4d2392b4c3129538448f0307fd262c62a0cc922959f9d7c56f8bae87103078f1278911898a10af388b58aebdfa7aa27db8e0ecc4885f1b25c72edcc0c5418fc2c567b9ae914064b1ee6b4c75ac8222e6698c26c596cd4b4d95e0a4308a72b2d377c846ee8c811023f6735b4484005b868dfd1838742600337483083146663c62850db79940cf78ea1a328ea30ded5fe21c9271199118a9c018a6aee7ed39cf109b3a950f23f69f72c08333cb167fbf4b192ea74b1c328cce8c40c4e98d3e585052d972f219db109739e66292b1dd78421074f2622ab3dd984333261bc14bc52d49b8bded112d0d1458e14e4e022470f2f2290766306264c123bc6e914ae27cba765987109d3d85ecc7a5a67c878675ff8f1608625cc2ffac4fe544a1a6654c2a4c7839af0cb79c20751c2a4ee35ffcf2e6911ed9961c624cc497685c76f8db0fd6f6186248cfa9d7208ad22845d50cd888429bbdb8f5ee913f9d70287199030681366ebd1bb4798437ea5fab10c6086230ceadd92b05c923c4539a31126abdaae95772d99274698e48b4839574b499f2c6a94046a6451a32250238b1a05811a59d4a807d4c8a24639a04616356a0d3316614a3951fb238c48e64138d41461c8a9aedb5bb2e5ad236624c2d46579c4af65e77769c7891988404c0ac29b710843bcec13ee6dd9b96308739f48fa3cb7606246214c9ffcc4e5edbc6b6d94984108737b8a306676394e904b8002939831089355752c91cae57e6d4118e737840e11dd21eb06c22cb77ec9e60584a9e3e5c892b2272556fd8341fb49b9a423cdc22f7e3004c915fdecba5348227d309fa8f1b872963ee97c2874998a593ab9076dd74a4fbe93512910b83accd083412439ea274bdab9370fc6ef4b9aa223860783e594950f56ea8c3b184c8f09112f3746d045170af8a2470ed4c5167e013b98439c0ed7f73eda2b6287197530fc9c48e1dd92ba41cca083494df474a5252819676141cc9883295c332ec58d4932f4251033e460969f181fb225bbec901b27dde0d16547991107e39f144f5622b9c5169d050270f4c8810139cc8083e98307a12aa5bbc8a5df60502a29292337a47e8fa40833dc60c8a1dec6236f08214466b4c1a02bab794a4a5d499c3885196c30a5dbd2f9cd2eca85bb06b3597aa474aaf56d5229cc5083495aae9dda3b6172ef341892ece8c599e5c448a2c1e87f91dad44e253dda8c3398929e0a41e8331de1c00c33982c7f876c8de9182a550653aa107cc24c0a2a9d14871aeb98410653cea6c4732d33c660b6f65a33af60de956e31430ce694e485af533944ddc77bece882475e0d2d12405a30230c260fc9ac3a0495a3b60706e3a4fc74671b79667433be604a496f569be105d3e4b83d595444c9f9ef82e9524e3a56ab1f6d3e5098c105837b65bdd788284a9f5b309c1239c7e649be3a9d166664c1902ecc7f5ec8f5974d988105738a47d11f36df199611f0e807d8b031021ecd052f61c6158c67724be9d3ec17a5b782b1f3a2c6c9b9a81afa2a987290ef1d4d7b2a1864bee6e753d949159a8229798ef1c9f4c78858a5609e20424e697e89822994983591ac837a8440c16c722aa2bc3bbe444f304b8aa13f5a7dc98ee904a379129eae3e96420e9b60cebb16f14b528b3e1d130ca34cbb87eb2472922de128304309660f5274fd74242d7a49826146c7f08e914482c17c52ae798e388430e308661f9d9d33547453cb19c190c292951ef917c1a8a973127bab3a8812118caff2ba9f3b4330fe8576dccd34fbd8118249a49fb56c2525a376100ca646e28b4e1b08e6b475d7cbbad06de11f182e7fd42e11533ae7d60726c9324947bcbea473a507e636a12dd607cfcf1ee181b16c8264c9ade629077760ce33ed60b2caafd781a6fb6437452e1b368a096cd8b01b564c703cbc302307a624aee31e724ef9b24ae0050ecc6aeab48c1851a3f20d4cda53c8f57d22bd6e6e03634fb6f0092aae81e1ac93e87913f9c10c1a987ff497756929a5443f039389ecbca09db166be0c4c566de5f1241e0353d8a710f48c9dc81d06a660a1a6f37e3c5961f402534b0e9e43bd544567860b4c2959f794148ba2d4a715e670f94d820a8f172cca0a831af3bd907672e98cab3025a1a1c3e72861cf355598dd74decefc94694152a197cafe753f316e54183e07afaff414273d8730ba0895b591d35acad010a68a66213eb95f08534a512d95768aafb4096112b2267d4821de01168330a891fd173e47e599920fb01084f16767524ea14ec47c02611c8ba371fea132cd826b032c0061f008f223bc5c89182b167f30a67fe98caf10f6e7112cfc60ca1571d9d53c27cf9e3e982d986e4515990f79c5dcce032cf66012b5ed793f276cb585851e8cae7b395bf2f3602ead152a5808cd49723c9823841525b2ac94652b0758dcc1ac1d2de8041bd3fe931d0c3b227d9467b99160d7c1a422ebd245e8d0c1f0b15a74f73772d93d07730e4a9f72f17055d7c9c1209250f25db3dcb4567130a73f5d9ed3727af01a0e86b72c29fec9c7f818bfc16451e5a299ff7f8e123798cab2ca3d459b4ed5da601242abfb535cb444cc0643cead0fa372b664466b30c5501dad547ec892536a30e4c8312b9a472aa54b8371b32ce413f2794fa768307fb56ca8a4268a5cfe0c46fbf7df4b1f9bc1a03bbd79548b2062c432183cfd468e2792272d8f0ce6770b612a29e9919434998bf4bea5d42506537b88df78d705fb2a0ce6d7bef7a4a2aaefc36030a88a0e3d93922f98e3fd82e71f75895b7bc1a444570a2134cbc4e72e985dcde4c24f485adae482a95f434417b5b1d882f92de57aac4ef657c3420be69f0b9539592e26cd5864c11817417fead39f76d45860c164d7a237679fa5c682c5154cb9295b5726e2d39d5858c138b1b46bf6bdbac9874515cc9595e2febaaac4aa60410573f03ebd6c1d9f4472584cc1a85eb2c2cb7748154f5848c15cd1e34bb21d89f2611105c3f958bfb667fea88b05144ca73b257dd7a39722098b2718ad725c6bcf2d5e1dc7c20906a574c8717d3672870b164d485d55aa4c305d99beb6a41eba935f8231be52bb4af4541f562598e4d554dc9266120ca2ecaf4ccc0409a6b6b80df73862fae4473056a834298fedef85d408a6fe703a4c12a55210b708c64ae2e39ece93114c02164430a79061232badcdc7c8100c1fb952daff10bbfb138221470b313dece5917e10cc1d3a2be5a0d4a47015104c16fb913f665d1e15fc81219a04a54cf5eb03e3a87ed5f88f8bf9aa07a6d8222b847e4bd77de18141b448b4381def7e523b3085124af4b9593a30bf781e51ad1e59ec9203634dd09268c9535b7638309cbc9c32e24e4e4a826e60b8ec4827aa2a1b98ef63b29a09df0db506e6706791437a9006860ba274f4bf494bbacec020353f8524b4e30993c9c01c6cc28575516360ec24944e21a7199d9783814985ec94a2443ba5727e8149f372a5521d2c5c6090629156ab47c897aa15c648e165e3629b6a7fac308409229dd5a79f49afc2e0e6417e9bf0202da80a9375886822fcaac5445361feac0e17e6faddad830ab3cae9e4e1713bc4750a8387f0ed3ba23ff523a630a56c8c654b103ae574298ceb215a369192d69049617e55b3bd54965118279852a3153526465c14c65e4bed5e173fe542611e1b532289cf75f52f280c96aaf2f1ffd35f073f61f4a47de425c67ae9d113a69393d5d1f1634ade3a615eb1ca8a16448de8c909437af132b16ad984c1945a123a7bac0953467e2d4bda4c1865d4c67dd8c5fd14c584a9f5b4a414e34c55c34b98fc55b66267dd1286fca9b78448f982b2b212066d15cd632799ee28258c295faaab65a65e934998e424a5a6f4d8888c93244c32b2e4ca919c7ba49150d2689177970b12e6247164bea89091527c84395e921bcd9e31713ac2a0ee933b96d88f192a8d307e7ef6ff20bf5fc2cc08b3ffce859092f74f8e2dc2a4729478caa4c6fe0929c2f8167223b95f29ad27c29cdef7f3be2d88309c97b8cbe79ff0963c84b924a890bf8488214c16f4d7d2633bc87985b864856aa57d8d10e6a06c2cd8e83c0883c81fd673e54589941384f9654bfce532997b6120cca2ee64a4ebc997bd020873f409f227cf4b9414ff60ce395aa24790ffb12e3f988246ce59e446eb787d305712f94992103167e283713f840a3fbf1cdb720f263d2a7a7a39f5609e9cb5c24b4e69246b7930a74a19a9375a4ba7f0602a3d324705fb0e66919426a684538b90ba6149b8c20e064ff33c8976aa9de48757d4216fadcc180b5791b72031e2e9a415a6345c4107536b69be869ac4d2990b57ccc1a03ce9c6c53e3d1f593998d524e91421dd489e3f0ec6387b3fe1ad1793363898928831611e532ec5fa0693ee96ec5851bd2e88ef0a3798ce423e937095bb2bda608edf3e21fb74a5cf7759b8820d86a0a37fd3654bf9488870c51acc919410cfdab7fc271dae5083313c3b849c538e79bad3605ecb39fff3ac58e7091a4cdbc9824ee92fdce9601cae3883c9bb45478e52a3c0938eb3335c6106e39587f8d7f59e4e71f104dc0dae2883717ffd3e92b8a4333e19cc574a8753dfb193aad3184c5fa16bb74243851289e19e1199d3b59f309873c4cf27b98388a574c060bcb95041da5ecacbf517cc7dc22ad6342f98725d868ef3394b56dc05a3c5af2525aad4dfb65c30861227644794f290b76052cab2ccadc644b7aa055388da932f2e59305e1a75374957b0600c753174c34c6c85af602a319ee6c92bd46c690593bc9f875c0f17f72a18f48c2425a236e29c900a26d511cf45b897a8f4144c2fc99229ad9723c39382c9c2abff68cdac5c8a82e94b2746fcbc581a81823977c5092b0d95b3674f30283deab2a550b74eaa9dc1154e30a70c113454756f89dd04e3de96d223d764925c99604ef5d9e2b9fa9bfe540dae5882b183ceb594c2cb0757bfb84209a6b9f03be99764860a5f910443481f7f61ac37f2ec3c6e78ea4287f115483088525a394d57f2c9e708a6e0d13f3c558e118cda692e849df0fb945204731c35c2258860f3272382b1255ef5a970a777ab1d82e1728891a74250094ec7154230aa59a40a2a5fea0e3a4130d8ed9c8fd0394030a597481344dda378fb0393aedb3e30c991dd3ea5a3cddb035312219dca394bbabcc203732c49e245b5c8b32cd981e96f720efa3d44b15ceac0745abc4e56169145e88a1c18f42ca795cd884e3ae1c094a294fa132998ce9374035312d5309d14bcda3d3630e994fb9c4a486b604837ca73cce8ce17131a983e8e879ceba3b66539034314b55ab3fa64608cd733d5d2978b25c3a17a450c4c3d22e63030d6c491e9964a6c86fa028350513ff8f8978be40a17982e57cd639412513dd20a73ba77e96826bc432959619eb12cb7a2c2df4dfb008d55183d4a50ebb29e127d5685412425ea73e90f56c1d32215a699099a7e37d34085218b4af3f9917476ff294ce6f75ae17259861a99c2682afbe64c3e55de4e298cf2efe92227b344704961c81d6e44c2afa33087eca89654165e4ebc210ab37dd2164a4eee3eeb7028026884c2381e6e2adb7ec869d4a0307fca0f7257d4bcee2a1b008d4fa04fa993305a797de9c8d13d7c07f184697ef227d91d2b849277c294c6fa4f6f44909137270c41e46ddf9a4e631366d51bf9616b4ef77f0cd0d084b9e5c4dc4fe8d0c88479434bbc3e5507252e0d4ce0258c9282d895e861a31ae3502b858625b87e1f2d71f129fdb7021a9530875862ab663da56cc2da1d342841684cc2e4a7420d8bcda864afa60269200e8783e150301086c201e61373130000000c1894c54281604c24ace31e14000358362c46382a1a201e1216140983e35038100805c36130180c080642a13020200c8f8361381f7cf932fef52b4c2644e352c12e1631cd4aa40e9a692cfcbd9f534ebfc3a78b3afb9dba9c1b905c46da4512b39f3b17a5c55bea8821e7f73bd2d2a5884cf3741f5f125c487e4a45f6aa8c1b2fae4230aa9d6d11a9ef1050d82319f5d01c220996de28e1b9a669bf8d1b8cacbcc457821ab0621a1f49c51d1e0e0d354cacbd46435046f3434ff95f4c71bb6bca36295a92a2405482949724e2a267a7b69c08f80915284275483c0e2c2150f04f918d0a2a1dd44aa81052c03207ca6ba87ea80ba85144514a51014545a1ee31411f0124854204c507c546cd52de3407284f28581aea1e40a18930d44fa89550520e05ccfc90faf69eac9e103cf1796af5f4fb747b02f9c4e20985135514b2a7cf276d9f7c9faed01df7fa680a0ce50795dda1800688141061a1b28133c4341d5364eb0d55010514839a026d0fa443412d14a2a338a458428d77d4bdb78f027c857a071506ea2ba87b2b7f03de10d471280ca8a117545ffda72ab61a95bca474548e91dc1ad402a8770aa56399db76a8424941e11728a0eda2a94bc0274c288e46f1700a5a0a08d49451924ae940dd8e28a0bb906a6e86fb132843b905c59f8a0c14202828282051c032dd8f02c674c2ad521410c76c4aab15a5236da3db870dd43d144c382a8ef729be6541a521ca98d405148345f12fb59ea90b3f79838277d4b8d43c1400281250888a0217527d311358d3a1cc7e545f9156d5c477283151400d60af0aea8942d5cb6c4256a19ea0fe42cda0004291481422a630a4c052281d7062a5e72eb55dd42c4a01758a1378f81e6f3f4b116d42c0381e9d690d87579c41d3bacb152018d7b3916e7f2e0f388edc6b7c15d2e360d0f53cbb37705aaaa03ed46657e66d85e59d721a127ea6bb3ec49b94f3b23582d3500dd560344d2ce2abeb5cbe9c9a7a7a212efc3fb29a92d0d73dba09b6879a26b588eb17ab35452fbe3eb362ad3122c11c41a512f033f6ae0dea4b4b990e3f5e3b6df032a3d41cda5b4ce9a98f6cd86ac48fd54b7a228b884ca9e3c235271b040d702681f2938628ad3a53aabd82386d0e4a6d982b93543854aaf94c9e75135469d6f01512c56748bacc3dcb9db40586ac23c036cf14c84280bc8c0a49e810ad46dd6e569c369e81743f475ebc42ec8f135158e8d051cf421ea3e9058d82eaf55258d345c8ef57fd088546ba58558c9431030ff206f9d0aeac2ce88d2065ac2e23ea293be514994a04d38c5867a8af441907778ced4a092566425d9ca980ead442cea91cce2c84ace386fce2a07ae625404ce99ecb515f4269513d923c45f8caa93c44fca685f158083e5b4f222fc9bc226df89e5a38db2d3fe29852ba0654790e600ec47a419c703beeab93b86cd5d4f517aae064c54a82e9c8744bb871f303d50ab1591449037022137f38c6b1c83609a170c4cdca03dc38f31205e27f7fba92e1b81860aec1c11f2e70d634f222b2109211ca52513571911db2008900c8369039630be5ef80c460655f408728c0d2ed00758287f3259f243f7cf98a3fb6aa6ef555cbf149e7b1cc80c0308049e085928f3b406431d38e63043c51e1abeefe67a5405b827594479d7618e4c8bc38358400f8f75dbd9058dd0bb2163c5c035f48ac67f367c36e432f373359fb32079d6c66bb53141e1bf44f166bc103933e34731aa338f23557e3a89f780a2cfa4f1f872812f3c61ba7c62b28b26ff86c04b70aa805ad4f8a830c742f1936e438484b311e486e8766c0f2c23f90806da710ec476295cc23130a66ed32fe69caf67581102d9f5d2c4555f0f19b2f2dd7fb44d21627d92caddbf13be6ac85360843f4542701836c89c9a4fa719d5b9ad3e0170a9626b04d2613fee01e7b6676fb8ae9362ab45376fffe90dad36f7c5aecf270e1363430ad23163c4bba2af5b46cf17d5f03d3b2c6198e658d31e0313444cc54a4a3fbf4400cbcea55e6ac4cdf1a31cae2634ee740b9c978dacbfabd6d9e027e5141d45761d9cc08ffd390b2d576826e2187e4c695e1cacc074dfe3bea58722cc88c621908bbc6a0a95b94598a9a92f78ec0cab2cd2090a860d733f665b2d49f185a913393c1edc979c67fa4bef2e6e266dbf4f2dcd94dce9c4e94268c76b37579fde0d7cea985ba34d294568d21fa4c74930b6d2128f0674980a5cd21f5931642e834189122e166d8bdada4709742b464020e74a526d3b6fe99342f16fccabda2393f83d449410e4d85278a672c942fb711be489106935ea5ceed27b6a717bff88311a16501fd1cb029614d0a0400775d465261fdc8ab07f04ac85b37aadc42d610caebaa9994d7fbcd23b69c984b0e93889b4ce45fdea34ec9c638e49bf3423e68a9c307265ae6a1d701f9344604d5f49ad162b24d99ea3ba2e9cd543f1a13c4464905064773d24327ad9438d4c52214d6719f14c98d8c44751a60889610c9806ce199aa39d1c7496ab8001d1931f39e7a228f79695eb8d59f645ec2f544e5b17933ac843a8587b397180bbedeccb05e0d537c6d3343b1008ec7d2f99270c67be813033bcc72d07ad63a71064771995929c6a9ca269596d0e62a54c575301963f59a80e881e97c56fff29889b8484d77a13ee7cd2c3646cf9fddcc7e5574878c0b41bb3e88096ca2a8d5e937b9b0788c3149998f8ca8598f555a1b5625e5b8893d5df1be3efa672a63424e6448a2b26caac91589ea15879e18a5d71641665d2a821994f45c7fd66d9868a456447bba556fb596227a286b24c2ac44a86d75924cdb2689b61d5dbb39fc01115f9e7adb79aa7b97e63b7a40653c138f638f742f04781318d1b3280250d103daa3babf830e60ef4233df414c22f3c3ff7bacb5fbaf50f182785fde9bb03fd09c1a17420b5c223e76ef70b3f210ea03e123c00ff081010978fc096fa121e44156c1f4f20e93e70942891510235809f87185c6cb766f0d0fca4bc564bc97fe904860d1070af2262003fe46c34ac9d35fe39d0174c6ee6bf1eeb44a2d801f137611ecadb942fcb46655ddd8eef688b637c97943fdc551d12b6618011ecc76e44dfac0c5a1a99b09235d619f85efcb4781c215c2caaff03a0d2c3fe5f822d1f07db71cf67c6c4dfd0851fc665bd21c8fb04b8ed15cba41b81d8af289e8f9ad7b1b7592f8e3c4a18cda644581fffd6054e8e70ab69f8538765063c8bfdebf9499784abe08e0822b4b265b21ee6b732b344ff3263ac09dffa0b6a5404e436fc511e6098778c1dee79f79d88485e6ac68cd90255d55af85de73e45de10cc9a095097b9a68f6fcb3e379eb7357a717398f8ecc09470c09e5947e8295c53040ca13b526f9a51af86f8b28185c1c4b0130b1529452a65f9b9e17ca15efd33404004aa13a65195d694257843781208721da2ce68f38bbe6c130dfc12f4c1b8c1013cf990b4eab318c443dc8069561a161e2c1918ba00adfe66f75439563b2af5fb9c2dda33562753da62f42818a0a06558884d7471b42a6ca6f3177daf4689ca850bb68bb1394c16d2e1d9375842d20f84915c42d9b5d44aee038287f10672ab90170755eb9ca21cea98ade775cc789db9e99294df3ddd3f35a99b5625141477ebf7920bd3265b7e7fd0c92f03332659f51a5161aa2ced07163a5d17b11ad56ddc2e92c25224c14dbfbae4edc3d13ee14ef6ccbd5768afda9d9f68b74aac4ff64b5d1763cc2520e9622cf13301a56fa9e62b0b44f3463f964158d5033b6d11a5455d8600b71cc2223d5e817bd33021695b7306d416ebd94bb6d8c04afc63a546505a6bb4af5a658304f54f8cbe0c1afb288ef5daba958633351700f0b3f57f52aa23268381abc596299eb87789608a9fb47844a9cd7730904604b2ea32965c617ecc2df5e0cd274028c38662485107acfb283f5641a1b0a84693c46697652169bd5022d7a912121a5ab5e8c0b682d8c0eb1ffdcb31689913dc5962264f3708abe8d42503c095626f052d6d0fbc48831e3d29a51895e1dbb4d477f8c51c6d1687ce6e83d00f807d0ac31159346f91889459c4c4352f8a840ec6dc2026ada80f8a30182b2688863ab81e02ac8d16bb5e4ec6499d16b6d9866cb02f00e76ff0d88d56d75ccdbdb9e1cb726a17f53a3ad19d89ec3c592bfa366c052d30bf1b8b5631a9bd75b608ddc026f26cd10b1792f89677e0ccdb18b8a18940d51c91fdb96e013eff6dd6e9c6a882e28287fa63f81646c941b3ea84405180f44ab7639866ea0bbc020fb09f80d55cb01992882be52b4aacff44a93bb32a8aa8c321bea96642d084e7346e19f83ea85465941a5fdada0c272cf852c61177af5a8bfd6f3a0c04dcdf516465e761a17ef93d4b92a09444042130e5b3cd7a1fe9140242b0abe9b1b1190626e1a5b99ded87759b3be84cd79593098498e533f8e9308ef4bcdf383b589089bb850ba1e721008b62b5794c9bb55ca74f51b4710c5967b38da8b1180dfe4ea451e59511cfd09dfeaadfdc9b49e411ec9f404ad17b1c350bb1db87eb4d516994a2074ddb7031d2b06f1104fa8e468fd45ed1798fc2a1f18b94799c0a527ef7a83eab07a1defb959ee7df6a5fb07391704e5a3f42776b7e7729c1dfa400ad08de9461be601cc8aa74a9837e9851c26b462e24926181a62d227a6cb26b0c92955fac29e2268976f2430d03e7a15d7dc41872b2e23a7f70acf51b49236679a4db62b4d60985b790d3f12d2d25f35d2250adad98fe6074757ce42f38ef2d2882ffde7590594803f38f19728cb4b403b380165b28a6fbd32afb5316e03aad2a57efbff9da1b7cbecafa1255015824da5722aa4f65602d3d3c50a693d580e1c2617747488e3b2491504103f3f53854d121973d05cc3c93e25ebbeab8db86c38d8c6ebb403b207721111786a82ebd784cd611ba6e60b13ebbe0b838e792d0879376659185b89de57ab630ce2b9c1f216fb6d3a1bb4199cf70793538d0a7c31b8e260240285011506a93ad82819811499863f513328669b03b571838da2efa5c083838de4f30b7852bf5aa65c4bfc5b65fb46b718bfe85e3f00790d40b8dbe81930024400bc60018157c81de929c0150032803f00ad00ba0180c99da9b7b51d24a5f188a7cd55676fc6a1fb211847bcb45dbf20834c3e75d4661e50ecc31e1dc2fa32858ca859130841008c02d916f30a802168ebb9f446c296dc6688ac0ee20ee4e203dc27624362c223f023602078415c41a8b608d0720b3b614f9d334d88e3473a1312905c912f78d2676374c1924643a8e0643708048cf44fea7b5478180181c3ee5e4d07801504199426966328ae9e0c4c9cb0361ab08ee7fa636da7f895924860a61f797441c9d75056ced52db1815d06f7cb8bb2cfa497d573403866ed2062779c5569e338e432ef97a8615eca6bb01243eb0ab066ce7065bd69b045eab645220384e41bcefa668722756c222dd09642a936341657e45e696e874aae926854c39c6a1b9a681c571e6c0d8f2a079b711950f1107be37a29f4791c2de4c100041a57dc170e0a542072a0511fcdbc3a19cf1ce5a9965495f603ad946e7bac0282743adf6adc871301befd99324902209531dea933e072caeb32f8e164c71fdf44a69979f73c1e752873a3876725edb681a64080389def191b2340985b16dab654c145f629bee846283f3b5b3e65ae9bc67ae24a1a5b235165e4eb4756fe24efc4d2712e5e16ceb5e850d197d16b64b9dcca035c8ecafb9bf2b4a35f40315662ec5271142f55576896451eafd451c52cea40a156defa8600f567b1f6273f2a74c8585d8368857c2667e6a6f7eea92f75577a195ebcda4fcb7f3260e609132d26251d0b695df4e3e053ce64f94fb674fd8161a57cefb9ce20440bf05835581a95f7325c47359b3dccd32a79f70a1804c1f74ade78d898a8cd055e3326b0963c9969d59e6c08f689566b80d309c9e703b33d2f0096dc745be1047142904810a10ce085cab64a9f6b60204d2a0d5823fa2a8883a5f7a08b930f68abab51e412c4efa2651166c4fc8a643f65a21fb08ccb0b3567971922f48b55c18e690681b8100481f504687a65c53c32e476f7c10ec09888d2ed4e8dd3d5dff45700f7f8d8f86bbca857905ca82e5907fb4b40f300e479315d849b384b35eb163c3cdd6ca5fbd57890c78c51c731740f0c9398d11771b7990fe50018068e0efc17d15556f83142e4f518f09f18c230fc2acac32ec01a7936d4e3115a160392e8b68d19fa3e391a2d27250ba7684bf02e62aaafc73c3f73d1386870f4e864cdcbe36ed476b6a9d5c458244186b66e3af6d66921bd809782d00018cde022ed650b13eddc8439aecc4b94907c540b3830496cc581d862f9533230b2f94bf878b7bbd427902f9d8723c47aa2400a39fd156d10bc9e1e4205b0a61bf873da8ca96b0799436154cc28310c5bcaa40ddd9531e9788c20a0095e144dd4f8bcf8bbc8811756ce1958265488ba1061d287f34562555e8293a9507488b1c6a45555348f49f60aa712555cbb385012ef339fd6a1c4314c5d05e377dca8c178017ff828b302bb2289ade20730422a7af11b1dff353c2e29581b6262d74ae6090713685ee325c37c78b04f6f952127d2e16c8444d0112d5f7b7ae5826d262bab6802da6f56141feb1a74a2adb5e83996a7982f063d5bf90bef85b82838fd082b236e3358760ede59abcbb5941a3986f612d126e2f409e3c3feccbb34c8c424810a3130338094366b2cb9d5f60605ff454abd26419a7c4ce6d3478a9eb7b0172543f050e4819a0da86936d7b3d8574af05528ffd793324c9d6dcf491039cc2a75062defc4cb2de00544085d30ab1fc54153d71634ee323d55e4129fa18313c465bc98dac976c8d742b4d158c87eddb411c53df8b2060f1f2af7456308e2d531f3af77d857c143b693f2ae5accc3d740ad4da299c692ff672c1c2846ec840c4bf0012340386fb9905b959eb464a88e1cf3ccc60f5810c6832f9c71894e176f7aa1a4f26c059f40cf786569c1be65be5b1ca0408fc8e7f33f0d18f72002fb565924bbf8c0e305daccdb64f455ae39eba50b81d8048296fe5698f70bfe01206c7a85071d95fe05969c634317714495d90e98cee1aa1470e1c48c3888ed7f5fff3b23c6c3a683a5915e881f637c1840a7ca4f0b9ccba19271fa2a26807278ade4c13b47d1949d2754e9e6dab42f75a7ea0644488e90e59287f509f5e68d7cf581832e16face54aad97f9bf5442015140d35a03c5b6d399e313cb22355af5f25590b8fb48bc095ab70ebe1c0eb748eb08aba80c31462b89ced23eaec0b866121fc2cac5a58242cd6a72b388214a28a61291c42407101c308112ec36de0a245ed0719ef6545a9d03d92a8ea48c6cb194ee722ad8517089e4d95a57633e98d4ef1576964200e1b57ae32a86018cd7c3512b3428f52ec138d5329375ea8c668912ab494e1a30c4335c1e2ae10852d164132810b9d1f5702f616fbc2b7923c43405731e8607f48d8cc613323848d8413b5700bc680202d5388bca85b0459bc8eadd80ac2f172aa82741a58c19274acf6960220d65b83a0b6f0acdaff4255bf2f2fc6f34426f90e92691791862e8aaef07245432b9b14813d50809544ce6dfb7165ee501fecf2d5995da6e61dcfe50a8b979911f695ac5c1a70569c7df6c73285fdca915cd1231741842c246b7126ec9702f2060ba71cf0c2d08412772dc76ccdbd34aa1770507c51b71ce93d9fcaa51fbc6f6b0bc32ca90ec1ba28512b09125020866a60c31cd6296cc2658058f42c69c3e730eb3b3b37b2070bda97b3659fb3b597b3de62af66a07e246d935e3f0c108db16529d2c9b409c962b8d650c3c6f0612320f664bb490271159b24162d31d46fdc00d9de70dbc1bcd879bac74379f450f759f0043f2326398d124004e5128ed08d69ba62307e6c6cb9513d72e59937fba46b90e36fe7beb5c8980331ae3f92f9cf19c84aeada588c05c22ff3c62685432ba4579153eed743c8ff4622cfb2082c23687eff1c45b8fcf4a0d1de4f8ea8b17a7327e2d564485393dfd1c0f506d229c45f0f95a17d05cd869fa5318a4cb5b558e136de23ca4c73c109749d9bd13c3cc5b16af993fae8f918d17030334ba390466a964da2273f5b6a1cc9f1d1c8f3e317a0019cbd1cfce42f80ee53b3e1afe4e12f1ed501e0d4ecc03fa9dbe322fd08578df48c73a3bc30b9939d0ac3d2d607476270daa668080a5f2772225efd8e5dcba048bd721ee296c0119d50a56978032ab9e3e1f6690b28b0cd29dcf5fc559e99eef43805d9a3e7ca21ddffc3de06895e775b8c60f2cc105ab253fae14e35c40f6fdf7d1bdaf4bacc32df9d0a22c042b0e67b11b4f5460493a31d39704d34bc457eed2cf6ee7d0e48acad1789f34747f83c7f8b4c7eaf3c1568dd420b28e6bd017a6549b336a39538e43fc56355317789c6eac0e68cce66c61c1682dfd9a05bd83001a7cb1b9c22d2a79a8ad3d98eb27b857f9943cf8b9807a628d8ea30e1eb9d0161c0121c9b3bae289d4a84f60fba79a9569104df21e090b8375991f3fa691c0596cb77a0f23fa536e0e0120e504aff489937e026bd8114d0d377a6109f3dca3346ff80a277b3cbd8e4f4973cb5c759b415df427438b600a5e45e0382154759b836bbb5c3956d43587ac5de18643bd6f4239ccf49c08fe78a56348909def6584c8773cc25f771f5c12b1e160a0e345d2084aa227319393fc42900216beb4a90e13f02cfdadfea450af1d83d9b8011227d8d47baa97116f8704ee91399fa8dcf7c23ae0478d25d1306c5633a01f9160d539fc3f1e9f66e757de978c418b82014d638b35c29b190a5306d78e38e43ea2b1acceabaf2c32a14db366d7e9d50188c680c973fc127141d66b4e696432532e5b2a2a9bc5e44825b832a2e85885abb1f6e2cbc5b74e5cb2e43a0b22d46dd2787de1157ef46f65b4ec551f21eb38709a30938167844d24d89592e9a8df5cf0b8d8afdc10bbd806784e24bdb781db3024776a1fa21328f0acd701b513357a766638581a55619c402070cca3f3ac0b4d2587e97ec548b16d5bf34aa8b37edf0508e0265c9c2592830a72a2d3be9bd155c9f530aa1f073326df5495a415fb8e37e54baa5a5a311f7a6e854ac0551a6ffc96b5db154269fd4930a81cfada77dc4992a7f15254a2aaa22221892a4503cbf3c61e5a7c71158068c965d5601e3b431233d0157695fa1b0eb00f515e4823a89742449c633a6bfcf3cccfd213156fcfed6ef25fa861499e63c51b8d85e6ba72d63f992506e054872c75e77182d09c673e773ec7a7ec85264db99489dbc72a32751bdce18efa169b416c111cc412a0cc1a42a885b7fa233c856b8d3834be3d8443f2d33fa3b98f0cc411372b02564cedd8de155dd8daba938ca75ea5993f0e105f7cd6e72f9913a1570e867507b1609bfd891cbca822054fd75e1e81f1d736148eb5945af592723d3698722f5094d31131f6399864f82b54a47428f6a8455454ba582a8b4b8928158707cd95e27a9c55cbb90fdea9e91ea3e6b71bf74454ad442971d18bc85caec8079b2ed1e8daf3298c954911dd040ce4e8fffe3ab82680e4d035c154d38331e658c32c24cd8dd138c79c725b2ee7a1ae27c59f85a61e818779102335183f4037b1d8052a1611409b7cbcef491b1928370fbebe8298a8f101bacb575334969b745f0068e06fdc618f5e5e750790471585520b9cd4262c9469a48e911b6428ad394cda2c3ecfe6d82d17113a86c27f0e3c5e4c7c4679f820302be446134e09ef93897c6162cc83223906e2a3aa95ec9a8bb43c45425f847054999ca1aa2b1144402c3422a851c32a4b7e51e5e22d22a24ada47a4a123982a6af0edb02bcfafff7cda1cc9dd9a7e014d4ade900bf67a41d9db262e00619abc794519649ae1852298f7ea51b649f0ed441d1ca38fd44d892e38bbaac15725a9a6e98d0c4b37f1123968d6229b17cee0de12143c8c12aa63819d047b6c665daab53930544e40fbb2af6b715288da3520a5b944e0cdc69462ca312ca29f2ca9db714bf868223d78b7d78fec34d5bce79805886d3ec00b7c674732994574366fa0addaba541cc2db83d64796783422362b1f1cf471e60cf617fecc85aee84fb4e96b217d3b481c98c0303b34dac63e20101946603bef6b8b76d87e69d5f35a5cdaf6d184880f47956f303b83bbe452096bcc462760603372f452e865b5080d5224091855bdcbfb3766fe460b9f2581bbcd5ab596cd1e0c4466b6891967fd0fb49c9146a935964c63474d48148b320f27d880b8d3f1ea2ef396ee3daa56a54e23c45be013ad8359d8b0b41291bc649ae51d911bfa6f8efb5a60bb7e32aa5acde878bfa684c993e7eade7241fd6050a23ec6112ff645c4f86368dc0e190d025bffdce7990e78fab27897927a44f41710e7d5c093b551aebc6fe6d758a35d6c0b104a4bec978ff054a147828a87925fbedb96a443b9d2218880cbef15e105d5ac50bee69e8fde00426788289d352314121a779051a128d6183de757a4e4d5a262f5a63bbf820fb1afe643056635ddb20c683d3aa951f3a0e1dd256aeff495cf55a692715e334bf0b094cb810611b7c497723dc7a60e851e2a0ae4b22b6a211282621f8785f2490d5d30315db591a6cda79a2b4388e795ecec2df12499c63dc48f846b31c4b8076274a401452b08da9da4b271338641f3c2f15dc741da5ff5fcf3585959536aa377d2fcea6d04508d171c4d6aba75c7e2f6bbc032681eaf869e61f5c9c0d0b9ec9f53de26cf1f882b8e259dfb1ef0c1603e6f102b99a009416c79eca9359014e236caee2862dc06810377eb455a8bb1580dedbb76baff0df8f3c58a6489e20ab468ecc51d689bb633404f520e94cb50e84b012d9d3de3a7ce56fd3ec5cc1d0d14b9da4a119f13bb0af486e1b5fb4f0dcdc07a37e3f399b09ec0ae323d430d25c2b0761e6ea0a8d9b12011e7e802caea49a3a09cde57038761a89968c31202e2ba7c564e3abef885b0fa14b04ea3b5db6f51b93a162f435e79e1c11e68218fc3d940ba5bc0bbd0006363433d3aac88fe0157e136ec0bfdd14fd3a29ffbfaf004e3e23b04df7d4364a5c090030864e4ac6b5f42e61ad6b1a39454f33b086fe4cb27a433a0f4ced43ec1f60d142667a07986c5c2201f6542bc53533bddab8df42a044c87761c6b0b0f234b959c2e154ae9b4260cbfc1b2d11b2ba6264890732c97233931642208a753d8c882d37f35703d5d352a020dd662671900dc4e214934ef4bf12b0563256bca535cd905634a5d76dc786b02fa83c38ee6474f483c7794b541ad4559498ced9fc6e956dc71818e42a45291c50233e489886ddc60d533b63f43fb2684a795cf3016b83fa86e15194d95f405e79cbfea52df80bbe49c07ab83a86b14b7df3f4cd0a1b1449510d0add5892356113be2e6432f885911f02f00a7c89514587379dbaf5a9518f6384c14cc79476540c85c54023beedc864f1a66b71ed4540a652828822093e9a08eaec3175226f9893c33c35e8d6d8ed9861e2a05e2378d204c59ee2111ea44096ed1c3afa9d13a866a1b531447f98c9a36d4ecbffbf4b8e8429a8a2a3a9803a6784f07c58420678bfb0a35d20e1c47ad1f3826b8cd7e974812cfb752c5def55507c2849166d6a39e19d09576ace1a995d37d7cdfb78dde036af699e32ab247267a4ffdf1de9d38cf5d9bda4563ec2f52ecf81f4410bd833cda1ca2b7c8126b8e4ec2662817e3e3668fcc0986197d5f18a5c24e20f1dc942e7ae3512be686a7b4d090003302cc8cbb6f363067afb8b79ccc81119ab9c4712f85a9f9dd0da7442ac2bad122abc27a10ad1250cb250464e843214812847f1779b50458f0c37211e7c72e5c505db811a778b84834537033dca3a1b868d84aff58c0b94739abc382cc708147568149212346e1e0ae92b7170fb3f8259522c65548495f65505713543340f6156dc9abd845eb36467471684827c7ed77fad36d652fdb670d68e8a96e1bf8f4296e639f1574254b86d001fff5ad584cc761e8d2b7c3928a846d6b46392d5d094a17218de13f7781a2f55ceb990388b86f5c2cf63f10249138c7e87f0bc7c84bc6a2972e0467aa601be4f814b9f50f0dbf1736d7f23be33752bf8b4d3fe819be731c741ef5bce647aa7638464207acb185ca23f513998e1a30d9dc99e9ba029275a949c983c28055fcd1e5d52a97e1c38085a08bf545c82ba01cd768492f880c2225c7f8a85984ae803463ebdef896ccc02ce0305c60c3650b2a4d001c33f3f3f3f3f3f3f3f9f73db826d1684b6206592e5273ce82a8ceb524a29a59452190070a0c0344208213fd60100000082e00c7a0cda0c99ac9244edc612b6e008c5d0d5b249ba6c5de06184c2f848f93c9a6bfc4a1a6c386cd0607b8147114affa969294245f75834d84c0ef333ee860711ca315396d039dac8345a0c6020d9b071030468a8c68d1caaf0188271367eaef4927193347864840214c0337808a1982b32fdd283d225a73d8280e838d1f7536bed3ec2030876ec66a9edcd8d76d7cc8f125d925cc286a9088f1f144c506dd2d745cf3ae8060f1f146eb3a44ddf49e7786a8f1e94f39938fbd983ca2fd38307c5505b2732779e069bd5e8d845617fc67428552a66372f3a745198bd2bf93d6f79d297848e5c147daf3cc8ce2d3acf0617054df2b3e85862cf56efb845416384997909eda2ab1e74d88291b74f71af6bb1ac16cb3ee124c1dd7fc51d43472d0ada46fe6a8e7799e6170d1db428987a480d6d9bac4549cac051a16316e57e3913b6f4ab850e5994c4ad5aba8d198b929fd4920e5814636ea87c6dea31a57e4549462cbfcbce0e5794dc3b3393c9d090b13b5a51902bd1fceefdfba10e5614c4c4f1fc9b444922933a5651ce0d5f3b5451126e92dc89cc0e32753a52511011da3747733de9845051de13d4c6f3d6718ab2891726db7ee3285987294a3a7e924950213bbdc47494a2f4e1545cc969de7c263ae8204551454b8ed7e5675a991996898e5114d45f44b8b69fd09b7688a2b45e1a56e4870d4351f4d3aad07b3d0db6f64107280a1ff37b6652718fc9a6c18639e8f844d9d47a1a3f951d46d534d8fc7ed0e189725e8fa737efbcd9de75343a3a514c9fce34fafe7f9c9a13257127a3c9e6eff966ae14746ca224b59a7f278bfb74bf431325b964a813c356e61a7926cab231d293927d63eb888992206c3c7bae6910e9250a3268a70cfdbac312e5e441aac6535725ca5f92a8a612ba74d2794a14c64dbaea2959c7243c93bd977b4dddf1bc4fb2d434d8323b2491e83a42948c668a44496b8c923d3ae98c79048952c92f31353ae811651369ed1fccff557b47945e369fcadedc56ee6944f9c3fac7dfcb3ad1734694f4fece8692f14e1af522caff1a3abaf3ac88624c137fe3946968934414df45f6893f113247444997ecf176ff93f8f61ea298a36bc7d78e99e3470d51b6bcb80c1a4c6dce17a2b031dc36ac6ace4409517413f6c4f3978328c91be4d9692b0551fed8b13393246a92740c447e179f9ee41110a5cc31662741a9524f5dc71fcadb9bc428425ad8d8d6e187e2893e9f3bc63032e7601f4aa6ff7bcb94d89c6d75f0a128f2246125e84fc71e4a67976dd669932c7277e8a1e8b71be4a7f38bd375471e4a2647ff26cf39c949eec043a9c3c7f0d9a2d2e3ec8e3b982fe79956b3f26d59e5f9ffaac2b78499da3bec50baadcfb31bc3b5c3bb97e8a843398c69b5ca9814f6b90e3a1477dea3c81c32364959c71c0aa246f57930bd77deaba0430e653f194aea11ab8d8e3894bd4e922d949ce452556dea804331c62cd64128d17430d18e3794f6746a6b296977f2ed7043b1acf5f7bac5db3dec6843f9838c41093b772f1ad3c18692109ff3a224e96a2a77aca11cc793f49dcdf3be7b40871a2c0d651ba1ef1eb29329b94243414963423fb56730551b1c3ace502e1b19a99a3e62eced3043d9b475108f7992f09ea40cc5bcb595f9326c7b6a64f0d63cefe26a43ee2d5dd33c9b6a0b15a6ed443bc6503495ad6b42c80feae60e31944fd05622776f93a4550e934304da1e48c18c1b1d61289df00e6aefe174e83b32d20106bde492b7933a6c81102c803bbea065c66a86c7bd5d66ea6d0c99fa945226167478a1a8b51f9ac4ccc7934aba50b60d42894936efecff7670a1d8b2499efac9883d5dc716caff9a4a304f9a1994dea10501746441a4030b3316d071051b098c1a3328d0800e2b544715bcf0c250800a53e89002033aa230630409e880c2013a9e80800e2728a0a3090ae860c28c190de858821212d09104910e24cc90d17184900e23c8e828c2003a8810a3630804e81042003a8250800e20cca8118604cc8d18482046c70fec739393248a010c50050e2a811d8a010cd0cf384806ee820e1f944b65b744ea5a6512d3e01937728451b6dad18372aad74cf53e32c824dec183928572cf156d4ad00deda2605fb297585295924ba68b6288e724b928684c3ac918a1dacc7d5c94cc93f264ab26b728f6ca9afc9a71cde4df16a58f416dd2ee259c287b2d8a99326734061f21eaa2454189e9a15f76b298e6b328b5673931c8f4d3bab32c0a721e6abe15961bec5894357b5cd16d3513198545f193ebd8c9ae7962ac5f514c932f4ee6126aae93ae2887f7ed37cd0d5da5b6a2a0c442cdfa4cfaa849562c2734557ac87315e5f658616182f02ea1524559368939bb5364be87a92876e9b30e7d16abe5a3a2b0c94be44bf493aebb539484877f39b984bc989123d5a081630618366ae8c530454932615486d88c065b598e1b367064296290c2f09c51cbf82a37c6280ab2539da4466fe8e5288a82f4ec320dddf11ffa6e448c5094c40edabf9ed384690c8a921846cc64e658c25b0f448c4f1484d57b7ad173224b92ef10c313c58b6dcf3ecac6d23d313a51d21d9333b6ca0923fb36c4e044496d0adda064f5e82ec721c626cabeb13adc44c8ba8e6ba2dc4974b46fc9b6269c68b0e57b11031b34443032328111ed438c4c94937c3e33557252ba9498284831511e4dc9720d312e5192ff2f949897cf9e8769886189628cd624fa3b4dd817fd0c312a6131285150a297fb79d64e269fcc9804a2cf04259a1a95248aed9e2956278949189f08312251784f6966a77e23c48044497adf247a868bd1a68e21c6238aa6db4b6f0e9bfc2b3f420c4714732c2d3f374a4604237b88d188729974c2e3bdcd095d69b0350e623082d39b842f3fa98ab188b26514d51acca388923826997c233ff64d1e2311c524f532c6f253efab921888289ca989a634cd3d4417e31005a1f493d68f218a4907eb14a23c37b235d8dd8dfc10218afed965437a83289d9c5ff48925c5a8eb08a2a454be68ff7135cbb0c608c4c60044597e53eed7ff3c9a6d81102cc09c10e30fc5ceb9bfae1de487829cbedda419a3da49d28792249ea0c4c96b6d4ae97c28e832bd61de312e88b187727ec9bf25e75b0f65bd2a51ad24c1d48c9c074bcbe3e7d4e9e2a1f4396550f2b747b38cdea1f87e429b4e723e49ead20e85eb581d346d8b5187c28915da2b64fced8be85052f26fbe8fdc584adee7503a41e3f576ffa62da1399b618c8288218772bb464d92eab4e5399b22461c8a496e38fd0db98d49d26658dd2862c0a17892d85964b7bcff4a6f287a6b58e69da004db911b4abe9ace6637d8a8926f4351ee648e8d73f9a57c36143d46cd60da534d89ce1a4ae2ce99d23174d4500cb2c3a7124a8cd61d93868292aea4b292e36828d6faea090fa29ec33e43b14506fd6c614adf673394bbd327e13eafe4937319cabab7333a9b4b86a2b759092657279d9c8ea1f822734c529d88a124fcde35bce4d12a66188af7555f72b762ee82a1ec6a15ba4a29a149c52f94334b4ec99d747ebbadc7f0424912b31ba46948bd1575a1704ac996b80a71a1f45b82567f367164e8b750be8f2798557a920411c6d04241d867f5ac29c7fb4359289df41a7ed407045c888185527799e89ee4e9e818b510e30aa59cfbd25cf5e3b135562869909feb25ba68783146158a3183e8afb9b43ef98e4185b259e79274686a0b18c1057050600114f8e29ce0d06064c4171231a650ceeefd245d75e5692f8562f2f7582236d22c3c51286fb8abd57037140a2e42a8756dc7916d3ea1f8ff72d29a50329390134abe1fabfb24e1fbe44d28ed6ce6adccf7dd969850ecb3f7cf4bbbff13b48472763cf9e1e45c090531e5c1afc449289858a7d2c44e3eaa2f128a71363b469774fa3e7a845296dc5127ab7dfc123542d962e38ef23816a13c16e2438e92f9940e11ca31f333636949e5263584628a66506b5bd2b69b8450ced82509a6f32808e5d49b3f9694a173e9402865f0ba0f1bc2d39ae607454b4d29da2475235efba02c326dcc264dd3ef447b50f2591f3161654f47110a3178609e3669522fde455173c9a7eb74122a6219401705d711eb273e7582017251da50633aa60c808b92a4cdf428930f73c100b7280972eeffbb367b8d8e2d8aa3debee4c9bdca19b160805a14b46713e4867b0e9ff306a045316490a1946e27117a8661be4003cce2dc28779e245da2e3481699da9cf427a144b1406eaaaaaf8c115b7a58246b63c9cdbe41d3785e91dc9cca735de39ab802533d22e3a2c4b25bd18928adebd9df99157efced1fcf679a5d5e45c2e374da8d314eab8a245b2b0d7a95399b8a748d898da202dda0c453692d79844ec168bbcc5adac38edc147dd6334f8d2e7796c292e172ff7766424e8a53a95ae81073df8de2bc8dd63167505714d679cc6526a2a583168af5dbff730769428d0a147ff6a90bffeccac2305f600d0cf0897290b973f8c58fe724f2848d2403744235c94507ff24fa95697560004e9c013651f8204cf2a4ba49e7fca3180ca08952cbecaa863ac9c4ce9b60804c147fd7a451ba7f1727c644317efd65b6b5901ad54b944dbefda46ab2099b939628e596493b2567c1086128e9bc4c2d329998b949c050fa9c459e18ec53d7c9bf500e4bd377eb186f52e98572e78eced72367f2490640ba50903eea36ab7f3b1f3b350308178a49bef0b65ccd516453dd4249cb5e28af3d69a17482c6c64d7f3b2fb1aa66a118d54fc7dcf9c4a614a9a501040bc55dd1b06ad27acedcc92b14d7dc449e68d2d3fbdb05102b943f4e88c6ae49ab50ccdba293c926219a9404102a94fcf4d465dfa7e7cfaa4ea1285729df7a1868396ed800818d1c60646064a40637dc072052286f6abcaf13275c3f4c2b415b5200240a05316baa544f2cd118ed408d3024a0ad6c008142c9e49ff86e56234f89419e50f29c7382b666e98492d8f9b426938cda13648302693218194993018234a118ed54fdf6b9da668f16409850f490f7a362d7ffe44c16204b288b6cde247ab2cc98f500440925c924393d96a73b4e4e06902494af84077dfbbdfcb4100d204848446d5ffe3fbed318801ca198c13f3e9cf4a05fd59111318018a15ca32439491d965a82686404c77b816aa4f5024811ca7e3e9aba64dc04102294de33e7a4e924086a90a30639ee0a2043c06e6dd5b4e2f35a773c94680aa5e3685272b4c2002284a266859f0ceacc8499970012848256bd0d35c9fe53ee5906102094cec3bcb985c877c981fca03caae22263ac689bc707a5cd928450db670f4a6e4ab490a2b7264a0c840745bd39a57487981c47df45514bb333fc7d3e17b52eca1f63bcce41cbb928ff8cf65ad7a751e37fe0620d17b79b717b51597dad8f5b1d936b6c4ee22dca2e27cf8f8e48d3db7dd8c2758fb6a557f4b5b0c3eade2e74363ed566b3454c12cfd6a3810f5a149318a9ba419da7aa8e0e1fb3284932c95952e58b870f5994cb3daba4a90de213c6173768988151c3d0a000afe023164593dd52e2662eb1d4d672f88045e165e44d92f1c354c97fbca2702156d4683f6bb1eac315b57d5c7e6a68cea759efaa83ea5c2b4a26a5c754b2e6bf795694e368491abc3eab28c9af79d3f5acffc85b15259d46af9e9467b757a6a25462278fd1b5e22a26a828e5ebb8aee8fbe314c5d40c5f92f0df14655beb4dbddda2ed2495a218aae56bfea725c8ff83149977bd5a7d9a5b9b95b7e7ddd7e8311937f0318a52075d9224bfc6eb142f081fa22897d4fb352376e329f9501474ab79892f49405152edd2de4e329360821f9f282739cb8f984c9fe59dc287278ab9c6b24b4cc7da0e7d74a2185f43e93edd2f27287d70a23ca2b6712659818f4d94e49363db8e90d9594c1f9a28ae96be90d679cf44494ef80aeda1249339480d1f9828e9a05a4b499a36e74c3e2e5114f16157d3a93e2c51f8f0adf9a5349ca0592a7c54a29c840e7a3d9495acada3f04189e25a095e3247a926516a93f458b9067d48a2ac214e337ff73d29f547244ae727ae09bfb924d9ec0f4814dd4566f8a04e8c1af1e3110525c6e947939ab4edc987234ab29408a5b1747ab7bb11a653a5ad296345644449363133abf4091751340d6772091d234bc828a2a44af6e57a86921d950b1f892889b69693626eb265e7ae0b1f8828a999f631b945ed3e797788920efd937dfe99f5b2218a31869511e9d7e939548892ec1c0dfb4968ce8cf9204449183b31ac3b9e6c62a3c1f631883485b42db1fd66063e0451f0cc9ca46749a289a913885258e92e9d4f534eab1f802877921d6ba46f3efe507c37517b62d4e8edf4c30f65135625f3c7b7739041ec4349266165bab2a2794a443e94c3275945e434756bbc87a275fa7a0b179dce45443d944528a993101e5682f020e6a1249d28a921b42841c62c1e4a961b7583ea5323ab535ff8b843b184899585ff6bddc9871dfc3aaf6fd9584b1937efec312af64be6a30ec553a5b972446e4cf67ed0a1a0694db4125c338592ff9843494cf24d541322264982ea430ec57b2df94df8ff118792898e613d69d6527afd8043b9c34d0ea57dbca1a471367630bdabf6398ae1c30d25d795ad597fcdd4b12c7cb4613b614b4c51a7d9337cb0a168b96372121d36efdb6b28461d3149e9f1aff0a186b28c162d61ef5d21f7471a8a3907a5ceba35d442fe4043a95db4a4699f9e7ff0e30c25af2d91fd24dbefcf1f6628ea95e609994d6dda4f19ca9741fb9eb8b6bbccf5e1830c2549a3277153ab499265632828b1ef6b5b3fc450ccf93ae347b1cfb531f7118672c8d090d3533fc05052f72d2a23f7dd5b64247c7ca12c9ec23b8a0cca6ad60f2f94f3dd2f64caa04acafda30b6579fdec3fd9e45c79c285c28d2cb9c4dbef606d6fa1e81d3d6e92ea27a70769a1a896962974f688979585929273ccaf5546d5dcb15050656299395e098d5da1d8164a4d8e5aa28ad25ba1184d30ef244f58859269f392e79324688e692a948377fdbd875cc73c4da16471f2cb968532f904a5507ed30cc2476993949751284815d52784ae3cc98642d9bed77bbbf22714b64d662d7154271454658e9ff5f7d18472301931219448abea3f9850f2f79125e6333542e76309e58b373186db1c259453777cc60e1f3e92504adfccd2b10a9739cf0b1f48289b249f10ea3678e68e99f07184242bff12320671123e8c5036e184ccb14fdb44f3a308c531ed71b3af12a1d4719fe48bb7b40fe5104a32b8c91eb3be4228ac9b8fb9462f0805bfd2dc9899f97d03847289d161ea6d4a52a2ffa07492d866e2f15be2331f14cc64cb24e7c867177d0f4a823c694bfaa052dd341f3c28a5c6ff0ec2be5d94434b7bb3c61826dfd245b96fb4493e97f1f6cc45f1328c7dba09429c24c34561bfa4c64dfae41685510dfd119b312baf2d4a1e9625696a0a994f6b514cddd39245a89f3b695a94aac246c7f3139308cd2c121e4ec9c8a22ce7b1932449db51cb63511e252766d11ed4fffbb028e6b5aaff2b25af280751279be4171bd3e38ad25e8a7a9243d38a72fe4799edd292193a2b0aa61973bd426615254bf9f938aa5673d854510ab1b6ce272641ea665351aafd31c94d07a1734b505152a6f49e5c6a6c93fe294ab2c895d892d372359ba2184d082549151d44be588ad2a7d53771214dee2891a2e8f226726b93ad0977140513449c98ef7470f59828caaab1d4acdc1a8a927589d9afe53b47e680a2bc41fede73754cfa361e9f2827d1243d5d5f0f4f145ca4568b0a591d1dd389a2c7191d8d797b70a2fcbe2597ee125aa33b9b28ffde2835e983c9a4e39a68af349758265c86d731132511bfa754f746b61e98487a4c3f2927737c09bac41e6ab615e3d9266b9b6e59a28c70ef4c9e943c2c5110756a9fea5387f57c021e95e83cf7799b32a144d144647f5d6f96d8781205e9d93e7fca9887244aab25c939f5c730b1241225abbb925d52b989152151d25faad7cd45a7ed0b051e8f28079939aa67b25b4ec911850d7dcbd125a711e54e97490a1d3f8c28a59f68f2e47399d8f422caf2d1440ff76f31112ba258f2eaf74ffa1251dc1017a7428f88d295a0e12a47fe29751e6273b3b8d0d2d42fd3d2b59817ddcfd3c31005d3678214116a37e85588828c31fba7d599102525e93e73cfc14194bd4f65aac77c1dab1544c9e3e57fd50b44a94ae7b3f7d879641c102525879149beab3cfe80b00e9e4b92e18e82871f8a1b4d73d8b0ab7fdbf7a17ca6935c4d157bf0a12428f927c61cbdc71e4aa594cad239316d5ca73df450da981521225a645d24018f3ce0e1c1676db6324fd0030f360286c71d8aad576d237ea64abe3dec50f64dd1ed6ae26d4a4e1dd2fb50dbb91457cb2acd071e742807b9dfa6c487daea4b0b1e7328c89226c764072529ed3ce450d68d9353a13ce3ce1f87a26ccf1e7028be9b9cfcb4e9fb8672965ce2c4555b9fcd33c2c30d2519d2e6ea53af63e990f06883f15ab736c79ca11ce6c320c1044646cc3cd850da8d39bfe9794cbfc71aca66b57eddd1efce75f4504369cb3ff7cb68e5ff891ff4364ed9033cd250d2bb95a7eb3de9781e68288c79a6981cb467289595b45d995366289aac87da29cda30c252f317baf3e175b2632947495c97bdc39efa03386d29d70a1af74530f31b4b1f6b2d7fa359a226fb2ef1b732e3166f48e3dc25050b296f67a8e3cc0806768d3fa7ca62f94ac94a851ff8c2657c7c30b05cd9334af64aed39ff5e8424149a1574f9aee9b6f3cb850d42c2dc1ca4afe5482b650cec9fcbf4489e9fc1b3c187868a19c937d1293dc588fb67a64a1f0257d8a27319b492c14ad4f569595acd649ec0a05a57793a07f73d767de0a25d59aa41159f6d9522f6abc007be051859210b1bfa7d337e7493a1b7850a1789d2f335e6e63a90dc7144af2efc44bb81b31d39142299459cbdcec77d22b0a05bdffaa29a39ce7d06ae00185d26a8c7ffae6c6898d37f0784241c355e7548f16cf0a69e0e184a226b147eba7521373d6ce8647130a9f317fb0511e130a671db44dcfa5cc49f570782ca198324ad09b5542f932dd379c204f2c692f3c92504c733244f409193deafe8507124ad20a226228e7db304a8ef6973e27226128773a491ead131130203aa6fa6955636d9b1e9ffd4a9293cbe9d251912f14c3f3e572fbd38925c671c380e00cfd79a19c7243dce24c2d742a8c2f6a8c8cd8a83132b202912ea03fe4bbcfb30917cabb694a2e4b75bef2b7505072768b3cd14413db988004225a288f8fbcca32ed99bfa4b250b0b4d22be9ae2ef7ea8d1c619c40040be5f120dee43c29912b94af933c795bdba294dcbd88154a25727443a3ef09a5845e60be282b13a902ef35b6b2a19dd72d779e3ebbbb093731fc7d225428c858c8d12d6b1f5d4d81c8144a1d646798cee615bb119142e964114a66d36db7441460814814ca9fe6b7f3e96f101fa7c166a3c69d08144a1e4294183ecae6516aab40e409c58ed57432eddf86d733449c6092357f4c9f322dd284528951f328f1ca3a3c4c28c67a79c71c14594231cfd6c914adf90002e30323105142614b890f5a7b73ec549c1e48c10c0e8824a198b4999cf49b93400409e5dee022ab1e34ec4f4728092594dc5eb57e9bdecc8088110ac23bc724b674e7f05b110a3257874927f7bb9b9208118a1f2eef93529e366c5e6408c512eaa4ee54be41a6ce8808a1d499d4af56f331f002dd08835b240865b1f6182dd4a5c1366306088cb5098800a198ebb3fde99e69e43020481a394c1859831c97223fc04bc3b5ddbc63dcb473f3c8244f723149c784061b8d1c060423233472e88d1c61d810f14149f4bbabb9ebe05ebf8721d28372688e6c8c3d1e23f51af902111e94db24f3d86c7f33f9b48b82a9ce47fdd8da25477551107d4a0751cd344a45b92869b4ab9244966873276b317841082e0ada6a639bca36f9ddd00521b728bf8c982872d5e536a95e84d8a2dc493ceb2ad9e74394d4a2bcb1a498ba8649fa9a105a944e923cb39aeabe517221b32837354e43576c5d543ed3eaa6330fbdd70d1b161819f9e2868d3432628410599436534f4c7ab2897a712c4a42a82c71ae6449b2ca1b3666807103b1dd401e088145d14e890b8fe9f973fabda2f026492599eab02b4afe2163e4c751a30d87173572c4000221ad28e9ffdc3a237b3a644da8023208614541292194d44c5a67bb81701545352594f62659939785a8a2e0e9d9c14409278a9b8a92dac84ee56e314aa82896d2e6379bf2294a3227d82615b9e94fd0147ccba589b58e76ad77f8e63a19299795a2fca52707d36127f62691a2bcaaa3c495afa3f8440df77da297b8284aa3c3753ee7d3efd786a2243a46dd248ed82675028ae295b0fd9b2eba3187433e51d2243bb88fa73d51d0d1e8b9a7d5904e9436efe793994c385155d8a9905fd29b28e9fdb065923cda36754234517451aaa3c924ae724d423251104dcfc1d44b091a3b4c9434cf5c29f524278de6258a6b1f63c6ecdb73426909ac46bd4e432cd7aeea33b5f43eb737b69c2a51cc23f35d9bf426bec4aa81104a94848f49108f6ef71de42193289c669a13939adadc9667d80c354968a19b7215b6d5b1a57aeab954cf6f12a334e98114cc382191288ad44ad77029240ab6f39b74f2244566465e0e306ad800c19ad98c90471433eff7f396b21591234a25b69f20c3b5fcca3b328276086944499ac9f0df19fff2278c28e6cf66eab39e421651da934ac9b43ef9449b1451125a2b3faf9549d678224a6266ec6eee300411c50bdd2aefedecffce218a31d56a73f36d08f4fcc5cce95121ca2774d2a4e45958ad4688822ae17e73e209b2de19443974671d354166def409c2bcce38b9d793bbafafd7b8ab12b3a1a7be3187d60f4a32b541342460e3023585104014b37d4db03315931bf72b84fca124674b939b99a44da3635808f143b1644e46d3ddd98dddcae0bc0f0525f483de58a6fc248d0fe5b85b92d819738ef69c07217b28e7d218df6546f4899d103d14649650dd1e739824ec6c08c94369735052c7a45d0fa460868d103c1484de6ca610327b89e5dba040e721e40ee5eb9c6a946ca5f3ed04c01c42ec502c253285d26c9f25f6b31a6198195fe03033e80e84d4a1d8255e3fe4e77428853a31b7ff666ce5670ee518f43f071963c6d235440eacb58baecb7d8dda995dee9b97da8558e9a490381433667dabcce839b41f0287b2a732ed38e187bc211943491b43ff8406dbdec88123c40d2513bdd67d2136cb04b5219935c814ef1acb5183840fc78d18500007ca5183093421840d2539e953ef5d22df3f9323061f0859c3fa194b7efc53c611a286ca5275f7c6ec43c5abda3b7a2e2d0d178286b2762e49c4c46555561a6c680b18c105104a23233b083943d94b99d628e26162fe65806a7c61038c1a786103040859a0cf0c66f253823a19fe329493863449a7b4d1ba3a198af184ccbef50e56aa8dc18f77d92fcdf43c1f2bddd4394c878d188adac9947ea8fee7100a0943b14fe76c36b73e7c4908180a7a920eae695b4cc809f10b458d3313a573741a4fbf10e28572c9612f6b8314e5e58574a11cf3499650621017ca41a55be7d175c816ca29ed24cda4d3102d9404af8f9bf673507aa42159d05356eeadc96d271f08c1c2b916d7329b369af7e156a384dd509f734c1231845ca1e0419be878b642ac50923fa88da7e46d74d5cc084248154adaad4789d1ac377e1b4285a2f589e94ffa193285624e7288bdc925d4fb0b9142b936e4e9f01bf64a761711128582d021b4272d4a6a986008144af2cc933ec93d7a5271c8134ab339291394b4595a73442794a432ddb24cfac3d8ed869026944a66f493924cf74b0e13ca49ca184ecd374b282629f5f375f4cec728a1a0934c1f26c7950c52938482f8bc0badf7dc316a154290508cdb35a19ddd7cc50b3942b1647c11dd7ffd9d232a8418a1fc3532c75a99d87f9a2294373e093fc9631c25888950fe0e4ad093b4a7d11c870ca120e2ba61571e64fa324408c5901a326a92857e1a8504a1b8a6b4470ffab6a413464208104ad71ff244089da74451c80fcaf7efaf1fe7723656213e28c74e9a9b5b46875142213d28bcec9bb9ba9db85512c2836ccbea4be76aeb4c9d762b51824c21ef5d94574c85d0de1d22b3d445497dfc3c7a32a9a4997251ded0f4a6f1735c143ea9ec78cf096db2bb4569ab4baabbaf9c248937882d4a7b1bd7d6c554c6e46b5116259a28a7dd26ebc7d0a2bc62f719845ab3282791c9b53255c87de64f009145b154c935427706132a8f4529bb57439c929ac45e7604105814c604ddb9e35e578be81505134a952ed94e7bfc0f07105714a3c9dfdefa4b172f6945314cc3e3b5358f922b2bcad6ff41876f341d34d5559446937a7daede52a307514551ffcc3349d2998a92bc1993b0569236258320a8287bf81d9dedc6e3d807728a728e57b641ee764c7a10531463da5162fcf5b414e54f8248ebeaa83176dba428b9fd7e3e69e334b8461866c60cf4400a668c808ca2a4fd496acedba5734e7a91540320a228cde97cfa2493447369c30b0c457376eae521b6c1810405b369f5951f96a59edda2e4e81ff4c488500b5a60830361d8f0c0c8480b6c78a178234718209f286988900ff2999ac1f74441cea649d29b5827ca2a4ac6a7daa04b300f270a3a7b10b3b1bd4d981a6319dea55d16b6e923aaa7f15b92288368a298e477e8db9a2d259932512ca594f0195da14f483151dcf0bf41fdbc65494d2f51ce937a26bdcb65d0906301c412658db9939c37bc4e00a944513493e8a24eee7462cc05104a14b309f550e9a964d3220d904914f4c2bc7743064412a58bad0b3f51aedd3a34fc22513c31d78e061bad9a36386c783181b33d48b4671afb3972bb769b995bd25c4c385593c601868d1a2323ae208f286ef6b65bcfbe238a794bf04f57a1be46de88a28ee890ad9d64041046d8398986380c0d10ccb01a802ca294fd7943d45544e1cdbd3af7eb7e4c992f8024a22ce6d6413f44d89f06828872850c27c5fe9f74133a44492ef9fa3e89927f3cc610259d6e9e3b7c4f92c493422c9bd6f44977194294e40d9d84f48c752739889224fd97e099394f4438c30451309d6a939ea851fb830e8e1a5f2406a274d249bd9a9e3b4926c9df3031b8c00d5403c3012f0c0f400051fad04126f1a6fda1ac9ed566db19cb01094ce0031cb8c05a00c40fa5ddb9f08c251880f4a1245cbb5a4e4394924b0e02207c288e321dfce4d42675d21e8a21a674de2911881eca9adf430975b27d893e481e0a3a99709289eed4551d103c944d9897704a3407f1afdfa15462907a23646b8736d5e66f6e96741440ea50d46ad13871fd0413561cc60b0ab81440e8508e41ee2699f192fa371c35302098612073280693a4b6fff6bd0f53a6e3eee363198a43414b35a3d89e246a74e050ba11eae2a93b90379493eb2641ce8c7d9534881bcae93fb5cd96e61cc56e83f3f6e1e159f261666aa6d9bc3d986019640e80b0a124ba3a7dd0de63c276206b285a299dabba25659c41d450f03621931cf479ee29014943e13668aad325e7eb7041d050b812a7eb69f95f27090a206728ae9a7d4982297947c94600c40c65534a90bb51cdb214678461be60ab41370640ca50fc9374db260f4a0e6a024286c2a8ceb8166bdd6d2563286f524a2621427d99b8e6001143c1e7245122eb71b207057f286db4cc25323af2f14341e89c537f4a2cb9b93e946b4ddc865fcd9b1d1f4a72d3b5dac4f6501c213ec7296953c99a1eca9ff1b964b83a0fe58ff1a93d8ea777d5782809427e7e3a4977289ed650bdde7d9f931dca9fa38971213c9f09aa4341cf27213347e950d2633da636fcac99cca19897e139961fd75e39943b633a2dee4187b9712829b3121d6bf6bb5a3894e62459c546e69884f20d253178bdc59f782783ec8682b6f5c70ca76a2f721b4af2a9141bed3dea346643a974aa6693b38692b0ec4db29b9cbc24a9a1f8b2f79b41bc6fd2901225e5a7d4203414f47e92bc67748682c7cdba33a16fff3743c94ad23f36f722fe2f43e1bf56fd640e194aee2528990493d1849331940419c367d31231148389139485d8b6d084a1f87a629a9bcddc130c858fa3b32859e3e6d85f28fce968ae75a66e5b2f944ade6d9c91d7dd6617ca9945c885728faa4e9fe4b680d47ca2872cd14231859c93493688df2f0ba53599fd5b33ac74b050aa923d7fa2b507b84239ac249de4fe70134d7a002b146ede32f637b504911ea00ac5a063ec9918a64249d908b936fd148a2e1ebca493c6c4ce91424198f698c39a44a178d96a72473f49630e85629097ad39f6a9623fa1184469a74fb3138a9ba22c4ee79d1173130a9ea2be64d11a4dbe4c2897e86b6e4aba8482dcbcaeaf99983b5542418d303947359350169d047ff5bcf9848984528715259860215aa31ea11ce38b09b111ca72d29450f7eaa3c322947457858ebe61ef1d11ca67b1ff7672728b368472c70ca3fb59e3c885501c9d623e328d0eb53408a592f934d35556e88150d69031ea1ff483929cb2fff1faa0249ea9d36963cc9ea8078593ca73b4d8a8c173001e143666e7089322e3eea2a41d457e9ed293a45e17e513d67d2753f3e92717651ba124f5a3041785ef939fc4a8b945e1f73d739df43ea1b145319774223e63f0ca4c2dcab949dd077957b5715a148455968afb0eea79cea22474ea6c1fe65e67a72ccad9c48da2ff4a878e3316450d192fb6ec653b4e589433635dd3ebc92bcaa1b1941aa144332597ae28559da079630927792c5b51381d4a4d5fb5fd24212b8a65e6213767f568827015e513deed8314f1f9715445f13ccbba2971b2841a53513825b704bb1b15e5d5ee9824594acc8c4f5152ea24af312ddbbc29ca31e8cd49e64f827db61445b9f564aa7d727f9414050f256af44bd935d9284a423ec7d1a5cbe22a1445494d9c56c9589ed6148ac27aa5ed9dc922c5038a52bd897b92967ffc924f944fbb5eaae8e667d613e524a81b8ff161270a3e32a88f79e544e9d4d7a7888e4e4f6ea2eca984b63b0d1ddf34512a49d97666ea51b72e1305cd78a7366e36314a98287b7c8df9f7106dba44f9d2cae3a42fb1794b943dea482b135489e2963625f38712459735914985f7a77e122591dd3993acb7f62792287cc7c689db27651889728c31e91a3226cf194894bc35c72093d0cdd51f518acd9ee411724441852c372b69443174d09913c388828939959cebec12ed459404994cb39eb022cab7319fca642811c52458783ccd7ca5ae21a2a04e924c4e663335ab1da2747daa79543e27a19a210aab277f4ecc9b4a525a214aa2b64c9c933334c919218a41fc466df3065192378ef630b2a6732688823ca95594249f92a2b24014c4e49ce4291e62024429d44f73b4633ee70fa513dce418254cf864f243a9f563959e6899b9ef434992e263ba9a24d7880f45138359c79833cf4df650ce994f75e87ed5a4d143419f87f63413b5a73c9483cb6fd4de0c6e311e4a6a5d173e9a9e367b8772ffc98895a4e122b543e14edca01a74307dd7a128aa1b633c9652a24351c47b6e6a9376a33887728ecdbb317925430e8557538fa90429576225230ee50c56a29bfa094d3228030e255193944abd36196ca6c136030c1b35500b6ed8488776fe86a2fbdcbadd68f87c90065b9a0cba64b8a1d855e29a28a24465b4a1741974f858d296187e556543b9dc37e959c69f99cd1f64aca114c2cc3e0833ddfd4d066ed49811068e34196a28a7faa4343edd32d250529d54ac8e906d3209a3a19c9370929049c624e9279da1a831b989e9acd7a493198a419824991a53c92843e9426357dd668da181f9c23720830cc556bbcc6f3969410b6c78318692787210a6d746e669530c7a9247a8951c4d0b43b13dbe563c5409e2c468b0e1d5b89123c150d6b06f62c4a6f0f90b45f552d1f1619b7412c6e1857289f01377fea9f46eba50cade387f352587901e2e14d3e8b88d9947663b2d0a646ca1bc1bf3bcc79216caa5192d946ea837e166a1b8c1938c3135454c4d2b90818572e6948fcff34f9f357625907105f4aa54e55a8b99ac9f0c2b68efdad6f932235eedb527272fd5cf79e2886454a198defde4a047092693dac2f822033598000e1c0604231819a9413232a2051954289f8ea3bdb12537c86c0632a650126b845d2611d536973320430a05dffadeb232fdaa220db68e423196e01e5f763695560f0ac5645f9ff7e327edc51d90f184a2e949a74b181d27146367cc7193a4d1605b0b818c2694e783547153e2cb6042317586dda8eee8657234d8d240206309055963423e9e12f254641b810c2514d47b58dc864e7256114712caad9ba42f1d7b31ed414261948dbb9c38d1396326907184c2291d6a5b9d6401194628853a134a78d0292a7e1945284737ff7ca55a5f79171944285bf6c946bf90490e6f08c5136446113a46dbfd1c096408a1a4226454c7d1ca0842295d3ebe58e9fa0725bd800c201476ae439724934ea9511a327e5050dd13a75e5908bcf0a2c606464664f8e0c1a83103306230038c1a2d40c90064f4a0d475393df198f9a899d1b3d66b973478023278503af1ed3ba693f8d817bb8b92cf956617fd992ea694ae8b727f2acdd1b0d160fd80482e4a7a9bde64cb694c823c0718b8287c8dee28594536bc9b038c1a37c2f0193372e0b04163c69e8d1a33c2c0a11e48c10c0c88dca2983bad98a4bc33dd98d8a278e925a84caf355fad482d0ab75b7265ed4b8bc2c61271f26a3e1dd39c45b1fd0465f2268ba2575b6ade189158942cb48b38d5ddf6b9128145b99478a2b7ac91525a062c6081919113794549ccbb99aab269ec52115794f37efb97c96b2b2ccf15af8d8b17bfee0f1de6af4d93242bb6f5b96ad9b94a7115c56c7af389eb39aaa8453e35ae724b7490714f9a32194f91549457cdc45d880b9dd3455051b2aa76bd923d6bdc1811444e51ae73dd6032274b99ff4c51ea68a2ded52e62c22d4571e343f4f967485138c1744919fdd751944bc96b223e7dbfafdb1608c1025a441405bd27c59e505993f3271465399dca549e76a6394151cef8334966ede6faa4c8276a173775b5dcb76c35750de59deb94443c513a61948cefb71ea3e78fd02c20d289e2e73822f7408413c53aef35214b1265c2641325396ace1ec394b449e934518c2ba2a5add3673069c581a31d209289b26765b2ea1c732d8d8ccc98d18a031913453121b73e5927d35c5fa2f4278812c73d5f46554b14a38a0c6d7db513daae8472152b2f776dd7161ea764cf4c6f7293d250a29893acb3f95d9346d13e9a44f957f43298127672e5229228963cea57b389b14a12138992ed7c085992f698152151ac2a21a7e6497a49a1c8238a2a5fc2e6123bf346a97f20e288e64b4f9077b2876ed8383c10694471c39e5a9ad8ae90d6b05182fd428411e52e7df31954b38852a68e7ae53fdf88410e3332826ef00c3338fe20dd8188228aea63e19e2459220a27cecce7dca52eb71301114414dcba843dede33626e910c5923b84cb8c6d08b46cf55bed2adb53836a1379224e8d440a51ccb143e7786247ed982342889252e9a324f1298434c90a20416410c5b4b226099dd9464942396c7821829191198623870d2f70b48908a26872a6c7fc7154e9c98904a2983369516e3297f0944500614ccd697bbf3fb876d5f65562719af5a6995b9e53dc7e28c84ce5d1bdbadc37333232323232627603079b1b3130227d28f88a7eb7c949880e1e3e946d62dfb6617b9b5b739e6ba7d23d94838c2173c9ccbd6550e3b102de679e1e10d143b94b50df41764c72f7a6a2209287720e726dbb168be0a118b4ccbb64521354f477287ed0a74e1a99fae49ced509025c8911dfe4594552275286b2615a7316ce850d8a4576723749fc9c93914a3e59c58279514b2537228e579322f1db13657c6a130a337082593b857920e0ee86ea79588a9aa76cd79d49c656b9137143e7ecab57effe7ac4646aa20e286b27b9b5e0f9fc54e4d1e8c18d8e0cb2541b7a19c5bb4af49db9217ba919119226c289cda24d6733c712f746b289ff413423f65a83e25226a2856789c704ad4a4a170a2e7e425a9af5e2082864f64d2ccb9936ca019376c989da1983e9e996df27c2f1d1a3c22628652671ce5af62d260a301a2c17643a40c05edacd99b4d523672af21428683c89ad8f399f40284c2400343640c4531c9ed3fbbd70b18c1050c0a013a35bc10c1c8c81b7483468cfca8844e8522d250281087c4e170301408156f570073130800203c200ac542a1603412367a148003542e1e3e30241c20261218181889c4c27030100a04446120200c0a85c361404820584b85a007f0e66eef9317615963c4ca3fc56d9183de214699be4961a9c246d2d433f7266d13d403830a4747c9917a34be714fb3f9a225c22785e50f0b86c269fe5bc355fac97ebb52c3eebfd72af2e2731bc222f8a968f2e0b9796b2d659c1ad43561bb9dec1f2e0722a7c8abc018082aac653be53d4935ac1bd60e48fc4fa46ced2353e159cd12e7619cbbc833bfd91d7991c5e4c5c3e6c8c8615d3938079e80eea9862d607ae594ba1bde8a5ce4b826d82a9ef31f16bf4ac09fd7d22865d1aba1bf4156cb56efc787d6f8c6a6e85ba0c20ea4ff0e3c6c267d9cf6506ad8d01edd66ca7b9e5398e3435f56ba1d309df083f4c5d019bda7c68938511e7ad2448f56fb05c96d0a4d0ff483d088be2c88dd770986e223c518949cde6b278729a97d1ef1c78a8b6ca75081af3b7cd143053634cb4ee5d133c65683ec53fcb554a287fabb2558abb6ebfa1ec9b6b7b78632f979306f8a2a50d606d1a9d8e20d139f19d951287586a5529e5216a6926e3bacf5fea8df22035da553a24f1471e97257eae38e9f93ad9d884528139837bd0923d5beff1b9364932be726b18194309722698a8502c9af678481a7b3e708e22add3336c74620fdc444eea2995931a7bae95318f80b89ccbf41c0feed5ef0ade6b0fb893b53526783f054b6e00dd01412e6d5e814bf044d5c91ee0cc5ee5bbfb28d0f40384ec959b25c8c78f612552e3cdadf55a8194f6cecb46692d7c300ba77859942af449e351ab79e90eed5a44f5f931918813dd8360a7fb30ce6cc6edbfb0e061a5507856a58bddf4eee726217ad6ce7265be14384f28886b78a2262309c56d13d528753d3354085f90b752443d7dca533a6a34d5cdeaa22b524831ceec2d36a6316f01f710fb9e211b02cd02caac8bd866e09730f113692a52059373f0b4bb4ea7166ad6a9fd1d0e903e645f0f51d20edcb9d6d833f0cb8b8a036fda388f282a04bb3446251af8277edcb9df37f37ba344906635d971d6a2a01dea030039a40d600f21b9cd595651212242654dc716f76ceaed566f1aca6e86ff2b0d363fb4c0526f9bb231993e7125c91d2c9dd7baab0a9248a187fe6f11b03310a155ee9edf28c0859ba9fffe6d9b4a913a0df1513eb785bfa31bbfb7eb7227c2b3068985ec38751274c02385eac69fcb845f33449e39eda260eed2cba00355c61bb2d993a6b4317ec3671b13682d988662236137e26cd12068525c24b3297094c1318e5e91acc91a97c565032a3ec2329624a8bf0cc9481eef9f4f94b68692274e092b78060257449335d49743f3dbb99a31d812c2b6cccf397b911aa00a9a3048ef2552bb1113bdf3c0c0f3c3159d52208a11cad9ed7b472289a0bcdeca2ec95859ff61506b2691b424ecadbb81b8d87e37ca50de1aea25153ac63a02d9aeae846649cbc367f87a66a1bbd794d7993779d83b679427b8c0abaf888d5b7752676b101f97cb1559f9894203bc012011075ccb38a88247b0d7db28acfc2cc54208084260bf9f50e30c3663f2d25e3dcb060842a625225790585453666bf5339635755aa37b763b0c9a8836a035773cb0bdecd03a922252481dd7e051b438afa91599ce01ad9802c1efae356af4d7aae3d9181a17e43d9df295e57e9086112ef037981e5327d424db1872320f9712235edf4a5ec11a33bb35093bf4b09b5cfd70b7534fa59d6fc328f6f7a703544d610ae890d9639b1bc7e9581056b42385358805ce047c0483d0f6e2030b4c92e3d15dddb5d96ad0a2c7f8d19f6770dbb51ec672a3ebce7ecf37f52a55a63939c6d07f8c8e5103980c295fa374083130b8978999fd9107fd747e9b7da436e0655d98b9f7ec9c6dab30107c672662f2a3251b22d4f356eb2b9b17efda7f8831af274300a3ff8885b426f569dc2a2e2e889d311591c75cad84d7b2def5fc938aee1aa55315010a53ba7684f3467e87725766a157359a7150e947c7ac416cff1c3cd5467dea857a19cbf4722b39d968958a5bc282702d9491bbfe0dc0da66d185c7c402d279889dbf6393110a2bda297dba243040a97f31c1dc90f511af58a9c276249cc168118f3e0e106c08ea86f238fe1ec1507819cdc797ea931fec78efb6147723a86b4428479e07c0f68709425094ee8920eeeb8574d42308f477b1c3735f495327e6a2f5463a9af62664243af614e3f9c3f3633f565ce6847d934507f80bb2c7322d2f4d000321e42ba29b56325edce6e759a5f0c33e3bf2b30b118e1f5b3f7721c03714c9ba3456fc52752eb0d0f2ecead2fc69f7bf494355cb8ee5197efae02e0374a98f2d52567b149c8d90b88ee90a2654e98af51cca8eb4f8ad696b3354fe484cd79f3706316296126cdf07b0a6edc85e7c9def21d6f678db3aec125654059c6fc8af6b09b55b55da3b965f5730d621cd7891862fdbbf67ad95b273ad7c41b304a1688f928759d24adfcd03cb2e5ab0cf6517568943164ba60cbd5be3f7e8156ea882216ab888daa9fc966c076d4182619b07f130bc5d024fdcb8fbef4eda4b1d9d36cff38ad81439b3637e08506d4634538efb8ef813b327d364989aa2ac4d50de0496081a9a769da43ca9d07aa2e7a2f4d24d40778ddee024508cd3d0c2ee69dbb668ecc28e89606db326e5f4006104f393fdfd5078495bf1d0fdc4070bce8c6ee98fe0594a68b6cf7adbedd60a79d5373d467af9222a9958d4f5ecc6a17557830b968f4ad285f0d3e4e28e4825027c2e7aee309ab8271d31c197e0dc853a35f1231f42761a455a0091b7f1e404f5c33017fc86d381093a1096169afa8c4727c576313c4c1b8d701a459f2ec822022d766a186ae5de0c2bcb9aa9d8e223a14d23d57d20351fd26bc906eb54c7a05b46458531291667e08e27d23b3114bcbd1d4c0b06419871f30989e39436c9106232eeaab1c738b357354d7178ef625944deb96789c51c8c0eec9c5201727dff7a1aaca090c3ffcd2605f93ac1bd71a72f8b904edde8a278f4ec2ed1ced5a75b433603be0d4d8e3960a0ec5f0fac9a17968099a5ac85478a357003494b5c9d0585b050f9630a27558043cde17dca8daabcdbc9fae14bd9e99ad00f40bb770f42c6216abf81a6d29c6389ee7b5c540754da004a48c4a0ef64b86050d48ace841d847eb619d86af690e82b5a9ef9ba2f6fd5e2a0c0a4416602443b90d1395005a6fe2c1f5d0e5f3bc61b2e081e4c6542ddfb17dae94720bf07ee5c3a77015e74a85ab7679991dcaeb6e254f5072f679b64acfd5d8ffbac8cf60672385fa2d6955fdd1a22b0249f71d606d4426d53382cafbe3d4a1e151c05e78ecba99c25073b4df41323a2d4758f77d8cf3f06d9b006d745fcd68112d3f0d075976ed47a758c4c0929a7d524e808a4bc24b29c6cc34045c5c42932c696ec5f380443c9d9c48478c4367b2038dada914f9bdee74ef59dd369884e832a822262fa62a1db589122d8941b37f51019246a67a2bddd1a3e311da0a90d44e3760d46c14446cdd67e81aa533394e65f9c64ae2088c952100d1ea5814713625d749e721cb4da9d91f4cb87c7066097084ec31bb478c5d70778e8e7c104001bba1e9291064b899bab8cec009f5701958d117c02b268332f1ed63e527cc30c05c81c0318f0225225dd22e1dc420561093fd503c3036bc8eb56ffa9854a63ca9e17f0949e1e60046ccff8eb1f8bbc81879533d5475302cfb4ece028fb2d5a162132f215f96e4e0953186d7737e7edaf2f802bbbcc88872a5c7b242d915f50aa149191384a3903ead589066f07586c582224ecb3ab37c09e7b528658eb250de01282bfea8066985fca3f66e665c2e9c06a4d728b3f669295f587366c50e143ee6d8f7d0ed22bd9a4085fc47057e8dfde1409733bfb54acabb504ad3ddf8dd5152fe905564c81a2f2a1de0ed32377eadbf971e2482b9b0844145c236d9d2288f8067ef621caf6a2f9014e13d82f2abc2ec65970514477bc7503e6ba0485dca0b7aa2f5aab90f020da876f393babf00e0063721799afde578969228053321ac8150e7263368246964a1735c39db23060cf0b68bd622188d5da7ab00e344f8b428829979c12cfbeb32c8176f1c3b5771068b7b7e576a229ce6e0a938651887162b931434fc8d254241f79d6c942006b82f5e9211bc0af831c641b91a2469a8ec838675da7d5b52a01b9650b4a29dd3d4c72564dea2bda1a3cd6576da15bd90eaefee4917605bda69c1c3a8340cf32ba515d3a8642085c3b9436d5509afc206d0bd9af78bd0d780dde929e69da0c1c271ad78902fad6279fd10f270e407e763162ad49ac064e084307566a39fb4810413a0fb6c6ea04f9ba5afda386fe5dadc0bef8bac99605c4d12459a4cee918599ad2120c4e85e3eb9735757dc3e07df07c346967c20c07b651c825c048010320a291d0f2d6bc6e53edd078c52c985d44b0074f07c086c0efa4eea7a3e901e61cfb0f4386fbb9bc687a04e56dab9547db21e9872101f441d13cb6891aef2f3c10619f56556bbcd6aa2853e830f3b9c2cf4572d7aecdad55c85bc409264b19cd33b21b37089844f5c510c32bdf855f4a04db8a7e0550e7305c866f35aef17579eb3770817e97d0634a1490d191f07ab911154ea820bd08e882a9b702bbf34c95630757c1d95e9816945a256dd3c93f8e543047a24dd56b022d44d0540fa1d43c76cea437889e461baa2023a0022431c04484ce9aa30168269afeedc304b4f70b616d62c04f7cc03c676f2023df3c11a23929184d36903292d42a0ae45ea463fc9574ac447f2d83c54acbc9ead3811b927a9d64873f614d7f805e9eafac3386ceb3f10d2063c31408949116aed7644b9544b0e7e76e1776956a1edb8d0cd156b15176b2600b151bb1eb10ec13cb055dc6e9dacdf474e18a853267e5886d63932593303075cdcd80421680f7d1af82ef69d95aec84b2e30f03514b6fc9819c3a7f16f06d0940f9cf79ecf44534d698cf4c4b03809cc940c35ed2de8f977ea132103ac6b33665563fd1116906403d9d3b362ed4e146522f60b82c8ed7a2218ec3ef92d96c4d9af26b1604f372798585c2952887935fe6155e3401c33d83fa44b1f832c2469af09ec2eccfbba4f7a10c5ff3085155f8abe9e69d9e1b5bbc9ef7f6837f612619bd44e0253dc8fd5e0e1d3649d8633575c9843a78565a5f745b215e1263b032790c37070b368c11daecb43d915f02a7fc967c5d84dacc4bb842cce7adb05e2558a9a772c6f89bb2ce156268e14c2dc239000a4a48398fb820c11e7ec4621f55eb78583ecc8c1d80507c102a34d63522f4796cbfda929d1da166df5589510ea6508a429091afeea6e88d0671225088f0631664445e9100294d8dba8e87ef266580b3eeba1bbb34ae961c9944d83858f58652a115562276c4035d0cfda427eb6a956907776e7d719e866d90b683b787a3619ce3d1c1cad4c3c3330adfc3211ed480591bfe56b14bd0f106627035c08685c2737f23fdf4de4b4b0f7ba37752d8c4d39a353398045c3303575410ccd4d1c52f970fc1e6e31462644ee20b05f6713f4a7a10188610d71533d205a3f43eaf4f9d382f8a35e18638d20527341e6662bc3ed58ba844e8a65fa38077659aeaeae648db576f77673e393fe0a27c82d38aa108bd83eb6ca9f4feaa1da5c664d080568e5f861fdb06bec083bb4b5e9847f9f93df523b986ba8b0554941e52605604dd205caa197510d63f91749718ab6cb3c6db66bc95cecfb0389eca1e4d0e9a34183c74a06b899c5a16f101aae57393395900a718f91d0369dfe3728823587db4607449f1a0e40dd2970c87276805f7dbf9491bb3857cb49d430939d2db474c124b59d003c170e6e3a72ba893cc1aef329d737f1da23ad3954521bfd80598267f8a7a3d4f7dfefeb9c43cc7c9878aa80f74d240eb7a2b52c7a7b9387cc25a0ea70053539690b1854cccc9e1c30938f7c5c8443cb86716ef946f9e1029e21fe82bd55378099b8da4ac9298d580d4f108b3732d8b4fd8ec2b5ef1b6b60d14a2dba79fb67b207ca4ffa0a6ca27aa08988f650a51afea47c4efb4a18b90885fdd0106db24b93ad09aa836a9fbed5f0aec906c153d82e4eea02c1df914c19d523cfc7a12587d389ee98434be80f5de34eb2285c7765357e2e2f2a2b8d2671d2a9712d361225428c0f475bf609fe89eba672761cde87928e2fdbd9063f88ef9b5ddd2cbee02c4150d1f53eb41558705b9cf312a89238f19ee00b27532342984e42e38fd9384fed31dd341a5bbd075f5a0a2ce5df3b5051a0842107f8ae5540367f76d8a02939ab608bc8731c85e8cd5d5bded67cd759c8cf3ce6390cfb642a71783bb01e5958101f68a6fd86fac6ba07902e764733d5a891f9d3636be7c6b5e633ffe79249e571bba60254a48535c23b0250264a71fb071b47061bb959416e60f1e14bd017789053a04e87910b4c6827d7b7a5fa44ac5f94a13b2ba82dc6f87302061fa184365203b4d3b19b7f0b6d5988a0f04b0901d17c038833e8fe41099882671190a2c5613addd0194d9574a642f79914f0c5e9db533bc148043ce2ae4eeaccac6a936b3b70ba2471a1b750aa3ba1b009b7aef510df2d51a8c97c2ad6300ba80cc98cc5624733bbd4d4da84695c89398aa3103028e3e24955b12c5eb53ead3b1452875af3a9c127f4bec735b3bf57287aeb9e163efc98981cb888687de82a51a29532cc6981d9d60c349fd5310c228de6fd3b24e246418d13a55e9f5a25f78a5b80340048cc44036249a2da6c6b6d2bfe24080e0175ad3401a91f443ea03919504358403286414f10f0a3e52d96904db6228dc09f068aa8301bd49ecf28a4003f903abe253630eea3fb9622319619e1724eb0baa1dd5e7c2e84f659474646bc3f01eee49322f26562e1c53e7936efdf2b97161917141faf6735ee815fd1334c691e788ce75e49eb810e52029b4a75f97c95bb972db83a8f52ec61340b258db676d0874608cbd9030e62d53d5709cdf424d19fdf6da6060dc8e0275409da110bf8c453a175e422690317d185aa160d421984b1424fdf40622e2b91589d1a2c838c3190342fad45a333d1c4c6a316edf8f026f2e9128db02d0dfc77adcbd897b2eef52e2f4cea698ceb25f6c883a6905222bdf4067461862e7f4c455b99782e3aceba5e8efbe97f55892abfb8ece9e967baadcc1fd663d22117ad4adeb10d16e18f5bcb6f720cd7b05091b0f27e9115e149f9474fc1525a1cdc7dca2e30eb5a10b21630773ee4371c8792ab48b57ed24bf919bc7f68061b8137ae203d933d38c11f45448118a8f10c4e44de019d901efc292c535c86cc32bebb327f693d33fac6cece45d19074fba35222c95905dfa27f0aa5a2f3aa533a0fcd28aa834f8443e58cac4b039ad53e601555b1b22c56212b2b6ef44be9ca134579399b172d7a890a87bf2f6696a89b7fec8b40b101cf3633ab6aba323861823a015aea9da2f22a69ccb1ac7b76c89d8d737bd18d734fe90f79a56343d42b44f4b59745f8c76e92180a45318bf0ab39862b8ba45332f88dd78c4deecf5a9205295e9787bbc98ee273122fafbb52fa0163823448a9425640c1f845cdf5a99e0f9295f50343fafe8d2b000d0390533534012288a1de3e51eaa2eccff7dce2c450ccd2c2cb570cb273f5059189868641bec80890a4b15c9c7e1ccd113a2cc2ce08cd68f08dab463c006cc9f4d686967497c81fae80e039a61dce54480c6c4a39ae4e9fe81eea78878fd97329d805d55d5906f6a1807c46200e43d977da9d53b24712370dd53acdf0039d2fb450e86e4b9ff5500d3bb9231a1214a60fb76972efb6489d7d8743a282703edea11c3847539b5bcbec822be90d711e98a471cadd8ad700ad79b8d044f40c9af5da83781ca270d31d0775f8e9ceb082bac32c0decbd1b262c9d575e9599944f3530e6b903cf8ecaa21061366e5c1a5680d794972918a608065f2bd06be59c73d53bb8f87bb2f08cffa6d36632e2842243df75104432a14ef344f00f8074c780f039b3d6b405f50d19a3334acc7526294b2a1b11559d1b4892e6a65ebe7ecaea1b32fc275a80dc767f3f3d17dd253a1455931948510c0c6d3454c410d25bea4a298e6f05da2027932852a5b1380dc2d435895326b84ee93ca2822870df86c9064a520daae611c7dcff426f8761a15f8a72ca92223dd269918e1a2251c2fe1651774158ec6eb381342a156172f8825321a3300ae5d31a614e9b840b4157bfa35ef134a36d1ad70403153b5385f84f101bfbc640449c4d7008689bb5083303c8e902a2df0014f12c819ca5cf3a04393131d6174a63978ec234e70d87bfb0a732836b3fc5a03ad9d86d62b2a6b3d850f9c6b1fd6bda8fc45b69faf6d0a700df9576cbc723869faf7187edcfd2ca603ba7b07e1761baf2e3b1c21a0e8a5ccf9a72f0f25c8ad3c449da32412b7ba67e84d1706d604182a267ac31bb096cbc4daa79c35aa5a6394e218fe4dc68056dfede9ed8329ab87518cea53fce49d31a10c6313e7815a7d10c2efc2b1b7cb903ebcf6661ffd099b1c5885b92985097c079831dafb130b980958829e70201fe390938186ff610460127a120268244d7ef97ee941bd7872a87b4c7590307bd380e86e4719a1a30cb393057b4ab7b4e44eaacf9b98da6d1f65e053c4886d6faa954f4564e283e200ed02b7c8caa2a57ae6ffd7b0cc763c9209f8b034572f264204e72e675c30c0fd3076a8c27d534dc840af81e8489f8471031f1d2e8d592176faff6fdfa0ef669be361100f9316ebcb87b41f10ac68b95be224bd8d15ad09b541c5ec7f6da6b51f5752c55cf91d83535d7cef22231730f2ea2d7b1343f0202bdb603ec21f50559830c5b5eba4f97814da9cbacf2165fa48d5eaabc27b32a0bd36971d697d2b4780214bf2b2c99a32dd597fc541bddefa601965d792fa215543084021aae3d0d45202a8edd5506b4a951f9526f43718122052a6070027a6bfec15a2849a380941af545d16eaee189e243050b7501ea0c28e88bd2615a8fbf42a4eac882ba03f5e240f521e2c30d49a27ee3541f0d2a4ef5821284a1ca9e0ee6b56a0f3503052214fb50c440d18142136a1394d6507a57545f0c25922481b26528609ce0c4fbd3c25522964d3c8e6515993eb4620d0cec06de742ea20adac54feb0c462d6522408d4970683e35eb590a9f168692e4646ed17f1eb8d50b0ecc5dec5952ca8103dd0a2ee2cf63b7cc3b55174855f31d638f9a41387294803393e3d0fc5a8498d860659db04fee8304f179f33d2198f3ba554a8abde8c7db0bc11bbb5a14516977b4624652975ab3dda5a404168f07229964ae46381784acdc88cd64c37e6a57f2e8bdcb7c1ca713408395af3a4d8ef8b259214f602b9193ccbfcca2f2af5d7795f445eec675680ca64c80dada54586e2561c7edd8ff44d322e9e069c7733c3207bba4c02375e45021a9585b7067a397441c5523eb6173d60822044c17d10bcd901c6b0b4f2ead8646c5e960f71578335572b12882f5e36d05c22e7ee1e4c45964a61725fe03da7c660c1219dea4d14de5e0f96bec699307f02c36d7a1459cc27d3c0eacd08f04be256388576194df787453df0bbe78e5ecd3efdaf6e24a711ee300e524e4531cb5c3a02ab02bf44d803ee8b09c20d67e2a7a3ca0c92b41ff620443ad6c41565ee7a8c126c83154146183eae6fec482d36ed72981aad055378c691688e502aec975204db62b031e4aa6fc9ceb95f833095388a2b7a60ffbeb77679154c42c6843fe281789e08d8d9c24abd59716697a64e3e6a1c3c277374d10e3c7a59c95cdfa04ba3fe7f4d910b48258a44a3ab7a9f30b9fb68307dbb4b3186a638319717a957466bfa67490b53e3acc8a6b8f5ba6d3db318b37976463fe01c392e086c2eb9102f26360bcd4dbdf308200d6c2bf1e115dd00a06487cda0a87d059e3b605bf2c306bc3a478e76e708254de8f13651c734bf6c83aa11f7b401f22f7ceca972ed5ab1e1344a6a0a6ae55bc02359fc0fd46924080774d98c184149f95b313a2789e449dad28c19b05388f9994ef9904e482f922c65b06c63857605ac43451e3056878274363ba5111b1966782543838f924e0af9cc0556d923cc2611338395d2da08f8aa696427b895b5212e2b1b490f80704ae4ff417d6467b5042e3f72430123d1904c29ebd56e88c979f5030e9766295d8479ce7390290019b702ce4c6703658b0598ecdcb79fc5be307436dda436a9036e24b8c8ec71bbfe52f816182aa4f6a44d7b163b5434f14489c96116077f2ec60bc23abf0d12f84d0ac0bd4056394f6ea480ecc6440e4cb73ae1616d98b5e8f1c16061b6cfa2e3dff873e0ce8fb11b99d257c00e49adf4e327778710a1f19839aff7fc39e38461b3c15fcca57f0814350baee37e34c94139316fe630c2b7cd33392010ca1e140ca87121c7a409e2b91a1947231dc0085eaa5310211327d18945bf8640586db1bc0f8bd903194a49542103705606ff5eeb9c88f03cb8bd093ff8275f9c49ba1feee60a5e96925ce24fc72a2b275e329e8520a2fdd0fd1214dabdcda864fcece8335b09a73322063a326d6e85af2bda09ff6591b389f2148582c29a1a3fc9c512d8564308822384d3a4086603e0989496d44eae6d33e88e08ea75041759758145203f15641b5395ba9269776f6ffa58912acf513cc12f144134a47c47a9735dff9be7befb9ba770d69addfa35b5bfa58ca36ad44832675fe58d904c0810a82cf15375645ae8efe4966a09ee9e020cfeee7a73c4645d219cde66468a975bfe2e5f77b4e12de2218a4bfeb382901d0d3e68988271e85c82011203d05bb0f3cf51f53c517e536326103d30c537e85cbf8b6857959bcfb9804cef94b2d1ad0117bf7f232e307f95fda93029d305d8bb9d57b395dd82190a74408b653be3517abc193c4ff3c983627a5c1edce2343097f7098d0dda53af54a52aae2c67cdfb4090a006d28deada351588756ee8628541b360d1d0b0694a7def200031994ba3eeff070677cefd67529030c93dbb4ef6855dea11fc3115f7209132f2e30852ed7afc9101b40ac77cf30e95a6cce2b7019bfee0c213805b0c8375f9c09c8c584e9c8fff1bc436d4e86dde24cfa3da774850ddf8e4eeec9c9933b1f569d6553a119f7b1534cf0818475e389c614d33d59b57312cc10d4b01b7c1fd99fe9e748e3906beee423d9511a7724daf48b5ca38fba21d26e08db80728dd4dec6cd93c9e82c14980afcbf0aaadcf8e7fec30d54399f4caf085d9d00be04883c6c51032fba0c64efca66820f4778805428bb360f7f439250da9901a22d796c28b420d0fd1008201d9bd1ee71e4118b6b15ea4f0d59ed7ffb28c5c532a7a34e31d4c31c13f97e60ab291bbe8a406b068eb0d0b7bcb925bf51712d70996b34fb9608379067d03c6abd552b52757db3e2686350ea94864e3e4e10a39212e5d50d543fe0dce6a41ae3c69b95f419822b364c58bdc7c9ef58f20d649c68df56d3d5b0f764e1560c0cb282ba5f67d17fdd40f24411ae1838e40ee36e8d22dfbfdd831894acfd011d807f79e7317be1ae9f3d3a853808fd6bc8dadcbfc85f91ee5cd7dff4c83aaf0a57f42d941b2eafb76f84ad5387ef7fa5082b52a2a01f0e6473e217c0d4656cfd51a35c96c440b001bb73412664718018425cd137debc30cbb85fa3223ba37b25d09fb388fecab905db541bc24d3a22e49644188b4b46ff3607635cf16dcd3aafa6ea33e8df3a6f9a09ee94cd3d9e89b67b006b94afd7acfd29e72911979f88bc803e2a7b762cd4ff4cab317dd556cf96ce1b7c57eca8f083d003673a9d512e38a12940820600a7d443485c032314151059f400728106e88c806d6ae9dc0313710f0031f4cf675cf0ca91d80ac7bd506055eecdc8edb62a30816f983f321f980bc5b04da4ea722e84f7adc3a70e8040e0b01373032e80553ad4083e0eab93d755a71c6ed3288427a7568ac1aaa9e458ec3e1e7509b3d2c3d3bea61dde9ef122362ce97eb29715cbe48a25790d13d0f50442808254c9f2270f340a3971728d89ab4ba1726264820273ab63afad3a497468dea84570c076519239c73732feca4db2070e63ce04251e5f3ebb254c21f3ce44f786d1a47d8ea7b7147fa4656fc35cf798b20c152e52dd2267140345d208c984d916f793a0aeda075a5fb73c136b3aa448a915c5ce9ac9764162c8df0dff3b9ddc2974b2ddf71b4dcbd4365d672d3b995983ab5f1d2ead2e5b5a037cded8809d06df59f11da4e60ee2f01cddc7463906419d9f75c2ff6a824c4d36e48ea567a2c1ca892d2e936b651208d8fddaa2c0742f1107aa7e905e6a31ea1291dbb6fa3a8d5b4aaeb9ecc20e19d12b84c1f419747b4821d41dda7dc0eccc50c785acb962a4d4cc57b4b4f923bc789020fd548866a50bb73ba2f3de9628a6656c87517327f793aba919a1210897ba91055b000d50f8feb7d74e3788ca8262eebe10dd25dc058743354497f4754145965f3714fec9b5a5094d604976f32e1cf7b8e2eac6f101f306dff495318f2a5ac6fcb34220dbb09f8332cce2e02c91d64bcfa9ae0518dd8a74d437872984a64bcff0880989cf7960e13850655d0e967bf9a0eff441706850c83d87315b468288874c7638a3f62f998e1e5da68fdfd399c871e4564ac50fae0f8c47b883e21a9a589886f1dccc2c111bd6c6da9e03cae59f3bfcb876ee0608adcdf4c93d87b7342195422d86bba05c8b916cdb5329bbded574bd77943e1c55a8e6b8467a50d0787a61d0de4e09688379aaa76fb77fab764f2637a5568cdfe1c639d353616c580f03a224501985e8db7c15555b5dd2368bb95a2ea835ffbe1b0bca786d67a1bb9978c497d41ca3ffd0e9ee359aa0c76567a16ae7fbb583205495714c94289a0af7e904600b548095fcc655131b2af36984a28036f659fcdc1c39ad1793599747977c5d9075610bbae798701c7d751119bbcba51f0c4c8bee5c5d10746943ddf38d0b89c6a3ebd1d55d8e26fc37f6bc61b32b02efb574eb8dbd7e602509b9cf29327987143502c1290e0472816ddc380ef561681f7bde6b30e7bdcc2c00425ef5a88daebc40006f7c9cfe11e9bec26cc2f21b0418dc781e639330093e38e56ec927384a2a513ca550d01422f74fc4135708befde17a86c47ef4a48cfa3c40885228efd1ed5d9554130f5536166d12f307d85144d137903f23927524b8b4ea8b7a28ff815c03dc56146477b23f2119cc31987e0d36100c1f916ff3b8f43e717c906a5eab6bc21e08720d0e8dc1a68557c8cb8b06638027e85c1206b20d4231e09d0c66284c40d11f0f14dd340d7ae6af72d0ea68187030799677c420fbe003c2b60cba194c180ccd71d096fb8b8246d85c14f971747131829482639c46632a363f877c174317029a48bc2e482a848270e392109eeb595447b1f09a261ab0a579318a3f56990b3b439a8e1f7b85fd1d403b9d3eba646c2813a212ed00245eeb98c12b06e493c159dc61391b34f5faf14a1c81e9f733835b4f4a6a6bdb6787b08f6e7a63c0b1fb1010f6826769ad249adb7cf3308feb6ec5802549f4ac8de18e345c05497898b25a6b428c73fcc4931c672209800aa8442bd16fc6ddfc060411e3d0f7ccc3ef23abc94bb0b39ac4e39cfe5fd27b4b62f19c887fc9bffbdd10e6c29ba7c5d38d38eeafc50f56b90731a71ba4a2c5175211fe50c0d8c1393aa680c7783108961fa6ab263953beee1782667d64e291034e5cc33e91813ba335e3c1f59e18db9a042e8604234af33f4fd7af5fafb4ea1b20ffeb1b54575bf34493f0abe3ff9576228b1b5581434925bf015a19f77e3540b0a6d0013c0c3c0c3c0c3c0c50633cdffaba7be39afd5b2629ecb3df444b04924c29a5949227e800f1092124e340f6bbffee73fe9c07b207d7076a000182398dbe9babdc8c9518e407e6fd6c4f6b0b27f1d10b93eef2506ac7e48317a6dc62951f2b09b30afad88531b6624dd2ed8bf1a10b739812f4da9d0a272529e92317868f25ef44ee8a3e7061bc94f4792e51564b9f617cdcc270512ce9fcecf0266a0bb357f268e962fca885491895839c12421fb4d05464285d37266a1b1fb3303c5ed6927a6d5aca6d560a2abad4bed9ce1fb2308d997e6ad7db62610e934fe73374c7860f5898acea2a5ebb5de55c7b0e1faf30aa5f8798f9b330ba7585713feacc2879c3ee746df86885f1628bd262b9a72a09470d6785d9b58274b3247f5ecf9ed5e9e1631546b9b35ca3bae7274baa30e7ed0ba5a77da4c25cef6a41b493deeb13eae00315e67c33710bb10a4afc14c6fb933f29d929f3fce4d6140625c99fd7a7e39fb4998d33c647290c16cbbf93cc30cf69e50e3e486138295812dc774e92621d85c91085412749f435c92e3b7ae8f80885793dfca4784ee984c107284cba53be3b4b9e4c89a14f98534939cc7cd6bb2a714f709ec26bd4763a61146126d60926795d9f78a4306a3c153e3861f2d1bd64a2e9b47eae18354876c4a881a94d98342e8778dfe85c367e68c254bab65dc1f47f2c158f8f4c9883e51ca7b43e3db4a3c1b628684c18744f12b191efc7250c9e44774a92c9f86e751f9630fa08bf687230a5c7a424083e2a614edf2ad7caca7be2a68449597a59768e7f4cc2a05a646ccc7f6fe8d887244c1ee72b2977531f5d7d44c2acaaf29d5292f67a64594af88084497c3749278f264abaa44718abead3b5726ece424798cd4c12f343670d1f8d30ae5f899f37f24b4e3f234cbae4d9ff24d729d9838b305ff63816aaab0f459884eaf6f43b49da51f747224cbb9556296a08112641a85767cfc14d5b3e8451ef74a553eaeebe9d214cb23f8fea5aa8f7a8b9e0a31006515238b94a9ef25a4e088349ea4acaf22427ffcb200c7263feccfc3a48f3431056acb016532d2ebaca5b651b55a256129e5a421f8130e5fc0893d493c94909204c2aa4e50a5d52fcffff60ceefb8e4d72927f7fd60dcd1aa51a972e90aea83d9ca441153f3694bc407e36d8cc82dbb8fddd983399da0d5f721e753470f66f3184a75f0bc33ea3c9804596e9f26cbddd378306ea751d254ce76baef60d271bf3f5c76ceb9dac1609724499227eac94eeb604c2bf15574797b9774307a0ead50729ed32dcec16841ccc5f0510e2659ff3d6798ceb7c6c15c52a8ae4f82850e0773fa19694af0de603cd9cc72f88ddc60ca253f4429b1b46d256d305c9c24da351b4c522ed1b3480f13ccb406d3872f35495091d6bf1acc49d42acb6e889e3d0d7d0c5db1653e68307bfcd4a94cfa0c06bfd8493a49cc60142dbbfe347d94c1289f22d779d40996a60f3218ebc37c56ae7ad165fa1843ca3f2d5d4e4e0cc6151da2bdc5cca31606f38921ea83ec3e1d3098b74d99a72476dc55e90be67db12e71ee52c78917929ee48512faf41f5d30a520272e983ccbe3ad097372a52d98929244b73e5d0be61f55db6de6dbf57f164cd5a62c282db9f38c1e0be676538f63f9158c9e2f4ab6cb3197a458c1546a73f35e42bbc35530a6c94149e14eb27b970aa6cbcf22dc4a0ed9760a06fdae32d15f5216510a06257cdd599d0916541f05b3e7a5aed6095ea27a2898cdc3e725259e50b1f404f369569e146e9ef3778239989a3e537e13cc7a69727f599fc9ce0493f0a827d67f9660325953847aff24a2a304b3a7cf719affafe349824992d2c7d11ae1626924183bd5dc74ef231884c576ebef146e172398d74c25ad69714ebb4530e830d204192b114c36f2e34b50f937150dc1206f317b74524a47454230f8f7c997ae24d9f6d047100c7abcf5dd0465ab1afa18c3dcb7dede26a9b82cf90082c944e5dc2711a54afff88149f6a4eca209aae7792f8c1d2b26a964e72a3abc30a738af16e7b30b938ee96e42ce3d4f5a1726dd784bf7613abe9d0bb3ade93ca6a39e580a2e0c97964fd413dfc26cc1730e257fd0d7515b983ce7795275d6c2b8651b6fd2c26cd208f5246c5e1c7316e6b024a5794911fae464613c7df36c9ef358186f4bbe9426a8f992392c1e69a5bec2ecb57b729c5cb254922bcc2643e8a4a6d30a73521b258dfe529b21569844d33a5d77afaafb2a0cca2aa8301532ac735518dd5b46092add27b55361302997c8ae98a8b4a0c26c39e59e49de1e4df614a63c41b3abf4c549595398e478ec13438538497a4a61125df5c7548af57d871406f9b1b6a45fb18eef8cc2285a595289ea88c2b83b5ac7c482dc3485c278e25ef06b0ff6c107857943e8b47b498c58d1274cea71c4e8de13a67191a14d9f3022f44e68e5774af2ce3961f214a71aaac47c75366194df72397915fe543461788f267992b24faa4a264cf2cee54b21b792cb9830f97b52c1ff7409b3976c97ad0b95626b09e3e51069a6cc4a184c4e51d3f7d2e81ca4842a3652abffeb4914b5fde43c89b5248ca23edc739da5d15647c264a293e8a8d8d5510209738ede67ea4c74f7e9112651f394883a315f7c47987212d524392f2fd537c214164ffd65c9d0d733c2202c9ba5143e6f7a5f84c975fc8292f357ff4711e66865fa7e4b1a0b9d4498dcfbd5a2bb07536a4418cc5b45e837efddfb10a6102643259376fd2e86307ffcbeb25249fcb314c2d8394d12fc654298dfdef4e4b09d3cb783309d9caf2a7c9c10a20ac21467ee925aa998495a336c1c331e21673049513522474f34d86c943319849801f116d4f64cba8494c19c4aacd075413c855369b0a5ce21840ce652cf17ead636c504c760946b933543b613438818cca74b8eca3b56e2ec9030182cc8df106acb3042c0609239e9e7f9b2c808910b215f309ca586b8242272c2e742bc603e13ddab9313843b4c2043868e1b2806215d30288f3aa6ecac3f5f5008179236162cc791bba2902dd4f9f6ec1e215a309624dfc4c2975c532ab4119205837f284199c917b3541c0bc6aad5b992d47d0553a8b0a62dce09e2e96205e36cc9dfdfa7d48d5df04648158aa3764a9dc9679a4c05834a992fefda15d3d190292c6b9b957129eb82dcc89f27651ff231bc0c9182b14bdaffa9925733275130079d6326fba8772b41c12c679de6ee7d15fa2798abbff37379a7a4162798841efda34f68966853134c92905f925c55aac43531c1943f4cc80e2ae34abe0493126d642518bfcd0433d1e37b3f9f04638925364f10124ca2a9f2b1207ae49e8e60aeaab26d8b53428c8c6010bd26778ea51cdb2982712b98094a9c6c280b114c71be6d4525e1f5726808e65c73f247b949934c42305ff8974ba20fc27ed5ef18e678d9aaa49660e517209865ec2e971cf5901f98b7ed64a8a69b18cf7b619a4f6263c2a4de3d1d5e982f2feeeebccd69d32e8ca53b435c90e271a1d685a9043373612ab184ccad6df9898d0ba3e5f0cf8aeabd26d7b730edd6f9099f7350cb6d61ce12eaaf2e2db5307b49e3abf99626ce420bf3b88b6afd549985e9f3c7ea4ace9e3e2f0bc377d61d9d262d7e251646354b92a68baa515158984f2c4b72ea14e472925f6174cbe964937e27fbc7ae30c98abe8ddb5b611e953b44a6b55589b2c27cca540edad35d85f92c5a78758779275715267d922c234e1ca173705361f2fc514e2b840a9349c136439f0ca5fb29cc39284fcf353f723ea630d9977c39e7e82679ba14e62074f59ae778feb192c2d425eec7c498144fa5a33089bed65261e67a7d519873386d35ea87c2a4d3275733b7947e0785b99309515ff98441f4cd858a3af1d2f684f1cc721495844952899d30969c24355aff52893961f40b212b9b2cbb9d6dc22449267d88565d53566ac21442b5985c33132631ba544eb61113c6ce2596aa54973774f012e69ca4a857769afa1db484414feae0fef9456d8c953066bc078ba54ed3b44809f399ac12d77bddd3c44918ce4576e9f86fa6622809735cfa9bfbf97533b94898744e82343f59fedc3f4898c29ebaffdd1c55fd1e611297dc6beee5aeb47384e15e4fbe70b95439bb4698fdee4f4a2a49a3d3758c30d5ac5a4a49f49a4bdd224c1f4c5a6df895c9c71461369d47ac9bf892265b224c6284d2224f10613cb976f6cfa25d8e8730dcecee996d9870728630c7adfe59492a99a0b24298f40515d479f5799810a6bcbc26e9094a8b361984d954cafe7a4f82f492204c1d3ea246a938761208b3ec7538d10f9aa7030883a5d68a5c93dc24e13f18c48fd65e121dcfda02f183e94bd492cde2ec433583478d5e1e80f461b77c27679384061b1f4aa79af6769666e92a6f82aeed536f41f660bef8b2a773a5207a3099f6ac6996d79204903c98b543373ee5f4745bcf063340f0704aaa72ce1aa783675e5a00720733437df41bfdda65ca4b01881d7a91abf332af34662bef9dfffe04611ba2930b5207d3e54979a2fa25a1b4e4338c870f40e860da3f35977288b3d8d13994b5ce3d55e6bd65e633ab332e2c4c6799e460b238a7d2446c89cb1e240ec64e52cd840e11a29b83c0c174425ff00aa144c71bcc9a9d153f3ea72f79206e30bc8b8cd4b9d829c90ad20693b2abf413c478a935d9604a2525dd66e11a6ef758cbb12997cd63cb241517af4afe206a307c28b18e7f397eecd40d726c40868c1be4d8b1230d66113222d6e4fb302b8902081a4c494a3141589e77f4cf600e3a7a126257c6fa93cc607efbfbe8a32148194caa73c36a2fd6e64b40c86032515d845675de13da3118ea6e615d46de3dd6bb64f5b4247d2bb7ab1483d98336bbf4cac1e2c35d04903018548ea32ceb645cfc0f0206830cddc1f65f3e445b902f983c76be9df3b0234d07f1822945b992445ff81cccd20593eed1294e3b8f55ea34d892936c980e102e5ca62956f7a2dda59aa925698ef4f82e59399203c816ccf924b1a4dcf149fe2404d182f93ef8b56569133baccb91e000c1dba84163035d5958d7e484ab66c9ff0d0bb59ca9d99d5c6ab90b17da15974cfe922be46ddae48ed36a238815346db5b513ab9fdd8478d1cfb60a26394b6a85561a9373ee0008158cf6b142dbff5357a84cc174ba174568e88048c118d2e44a56e2c675fa51d8ccbec2a6bd9968767ffd2929092596205030892f4278a98fa2c54c409e60ca91e2a14f496ade94803841b11013aff9aa51b730add40d91a1bee49207698249daf0d0222dd776508230c1f02987e7980b332a27c101821cfc493b6c642008204b30967a7cfc93c465c890214308204a3028e9f38917e3f554de20493058ae0f4ac51242eb7d204830a9b01c9fd33e204730d7f99c09723f2fa89a57408c60d2fd99ed7ab245438fd603070937005204530e2649fb17fda49604214295ab62d3523697abdd18dd41866016b3136ddae98e1c330a5a094084608a7d2ac9f0ecddfe211c67c78c3070d4c081e3e8e03183470ae3d38ce4a442548004c158265f3e495f84e7141bc330e3eaa7bf74b6919674831c36663c8e1ac99d8e1ca8c0011b08c8bc8b20f20993f09d92794a829e3069d8299524edbad127aa4827cc6349141f5dba2dda450a229c483e4b337fe522b209c38dcafebe5c5ad4cc434d9847bfca462b9992c27999782d29152a267af7c31d3d748860a2133fadd66891b1fee725ea24e5b72489ae191c442c61523e4267fa78b0249688215209a5c4c91099445be132c63aacb25b66ec645ccc932459129184794c465ba7f1bd249e9130ee785b6a881efd71ee410412e652a273c7295144914798e39d64dfe7a94fce2ee208935e350b27755af3d35620d20863097b794a2593126184e9ab83ba54a3a36eab34d86af02825105984f952186f1d3bd152caa61d3a4e11e63c3dd20425965b76c6e338ca02914498e2b67e4739570411e698a74d7a7f51b3beb186c821ac78ed416baa69131143980c9142184ea5a092bba550828ad260cb1d3d749c408410e9d4254a8e35498a2832081411c4d565a65ad153eead522281308ad0134098b3f36399b0fe0f9f4ae6e549a7b81f0c3a899d4cffc8ba9374fa701247e50aa926850f06534af6f9d7ca1e4c52b23cb1c45d2913b31e4cc28ca55a93e7d3a79b07a359988f56b952b1947830781a31272b99cf58f00ea8a96d1b71b283497bd62557d349e6bd3a18ec4a90f31d647430f5487395df2e7d199a83b1d2a5bb770a16dd7444e4603e79ebfc49de2c1207cdb6cc656b2beb5decb3d604f17226a2938ae1600a932dc73f95edc384de60d2cf279750cddd60f8f8eac1764ff6748e481b0c2a498208b310a5665444d8605ef91023ce654b98157b20b206c3982cf5b417ffa2c3c7915220a206938dcea1e470eaf4c5d704913498528eac5297eea3e512418379cfbef366897e0c11b1207206f3e7bf6c71298d98cdcd604a7b2a45d1fead0ab24819cc17774d66af2b47692f204206e6841f3b59a1640cc6f7a0deb44eca7e2a8988c1704ae5891c655541e784c1243e072b77d33d26cd6030afb87ed8ff225f306cc99b9b7d362d35f182f1bb6449113549e9b6bb604aa193feaec5225c30f88bcacc0b9ba59275b7053543678bef96b560eafcf639ace434a3a451240bc6d835f9ae6963155f112c98f392aca54ad21626b21682c8150caa25fac5d3a7a45eb782298c8f95f5779f566d8120520583be2862ff5fb9649a8850c154a7ff763b8be9039129186daf2ae85e7d638848c1143a985032c37341108982f1f43e27398957c9d4250205e3764af9a2673d61647e46107982e135f4575c4eb6ce122798540a3a7b09d7324ae8459a6018d1f956714449755b8409e65b2bb9ba8392946a576409e63449dc9c8a67ee51748188124c8290f58e964e56253d09a67855a162a8e79e2446822996a444bf13ac23a096c473fef7b007448c80ac96aa757ac5daba9415f25ec9d3b27e9b448a600cf78e353bb1f472132182417cd2ad761de49e884586601e31e1b6b7de2f762f0473d68bd5a95507c1641c0d44c6305c96d6594e0408e6b8ac3357f18bfcc060293fc686e9129eef905e984f34d11c2da35bfe0be185395f4fe894e19bf55bc82e0a225a166a59e912a20b93b45f628d34a1f5e6e6c27c5e29c8fa2b39744e12820b93c9497b5aacd7f4a413720b53c8491d5f4ab6e75d43882dcc26850c95b49fe81926b530975e963bc153e4654f0b93e41d357f64c7f1cf67715c279d67a993fa8310599824af3a49ac105a498ac5c29c4b5eaebb3d4b1542606194cf2c599f0b7945ba22a415a6dbb7eea02e7417086185f9e295ac8b65073bd53e10b20a8388ffe8d94c8ead89790e1b61cc50c596c2855cb05896ab635d3872ec4866702a0c22b663ff27d9717accc01084a0c2e0f5224557e5716ccce851c3860e1e653cfa14c6f0f578c2a7da8e275d1b620ad305e13d26c48da530c568ffb5f898fab691c278a2872795d3a88d6914e624a769e36fe29615c541586fa69c264648284c214f5adb37d5b5350a018539efb484ac132df9d6397ae000c10d423e61369ddb2e79901e42db219e1823a413288313b809f64a548b16008810a289c458b1dd3125a67d25241326031326e32e61ecec597212b1a4252cfbae345e5fc136cbca4d54088b9f06dbe120a412c6d84fd245359157d9434a187c84d64e32da9b84492cf1e36f76940d21923009937b15d3947c72cb3c2261d412456de4bbeb585e5f10020963f688dceeb62c69cfbb47982e2b9999d49fa4934cee1c61ec1ff19ec3f392dfe8ae1186bff9144f9ddac17e4698bc6664573f5c3059bd5b8429e74e29e331ba538451b663c96eb14f89267d9708b3579293b88e669d2d7c87087379057daad41c720893b7d8b7852a65d1ab358449aa2466a6cbc95936c72b84b9bdc365ece42384416a0839424815d35db941183b4d6664b572da52c11384d19386a8e974425db4f00261dc322f698400c294e3e77592e0fee70c1c3970cce05143adee04217ff04bb55bec9464cf0fa6930dd929587cbc93e4fa501c6972bf5fd2f0f86012da5bce52f6d932d587ecc124eccbe46ac3fd42881e0c62f2fa43dd7657cab20b217930e77026e2cc3cb5e2c283c14cc9a33c897ac81dcc4965fb8aea775b855908b183396647f44c539494fdd6c124cb86e87237a5b4c65608a183d9fa7a66a45bfcec979039986a94a7676c89a7dc24440ec6f33cfaf2d746aaf53842e2805b3459fdf2352d84c0c1a42e09faaf90375c881bcc579f9498afa54efcd8869341831036184d3cd194a89f4a3c863670ca87903598479a94a355124f4f9942d4608a4f4af6d139c19034984f7dcef324a5fbf84d03e13869470141081a8c16a7774e6afd1cac0a3d70902680238c1a3c0e10011e1310e386022210001e2999a100097c0101ac09944d00af2ee401212503598635800000c8814f20015ff4e021060a06008014c611230c1cc7c60102c063070248c0a3868e9300006ce10b007cf1c51702a8800234f0050f1e2e630001383dcecb2000004e8ff33976c830c0170260000272e8984103747af0983143015f00600106c0190700630a3a6e48c1006044016bf4b04183c799310301604021073ad0137a241e37d28d0280e104a35c52ea3f4a6b82614f3e417fed789924648249c776cd94fd8df7c98d7483178c25982cab9d9c092a1a6c39d0816ea41b7b23dd50309480357ad8a0c627016bf4f81c37c4983103016020c198ae16bce33ffe6f8506973331ce6ea41d336c50e3677cd2418db61e386a200f1c357ad8a82186cfd8916cd4d071230762308e80357aeca0c1c3c68c190800c308e6ff525ef921eb4a892a7988e180138cc0010609308ac0d77b5d148b75e15c2c9b784a308860d6bdf4b12c95e55402c610cc9e45dbef09e59554900c6008c17895258e129f6e92a4c7716c9c207d8e1294f4397024821104e35e66c9f4bb4e5bd605c01823bbfbb4e06131e56b43030308e60bd2e4bc1565b101c60fcc324aea4c2b2949f1a47b243568f0681e3a72cca80a8cf4c2a05aab3af8bd75a88959ef082fb8ca6e3223ee61b14accfe950ce1710d467661fe524b2a86c5142bd5882e0cdaf1eff63f589f58a2c1f6388e8ec31f8ce4c2a07bbf2f9432e1de8c341c23b830757d5ef59443442dbc8579648525d1ddf0be9fc7b1610bc329b12a494c30cbaeeac05a1835df3fcb2f577c2d62e848946cd068841626f95561d3e7e34489bfc30423b330e8a0da3d6a7b9a945368b0d5201d4a2c40c3882c4c9a9e1e2d2979c4c294c72a49eac4d584117304162649bc8af2203edd72a85e61708b6196e604d51546d35df9bbfbf5452eb863a415a620fea2e2694ffa63498d15c63c93224ca466fca939500d1b2928810c1966bb8a5585a642b7d7b20a56b12bb53b2d79c89bead022351a6c09c7b58e1ba80323a8305a4e35224c85a6a8dcc829cc7dd19328d3474c61b8125f43c52941c9b58f94c2242f0555965be9933c8730420a1c058ae242610ef9de19429a2a955d5074f1159fd915ea274ca5e4d4de1bb1a2e48883844355308230762412e0ed483d6ac060c4132671f92e09364a4e42460b8c74c2247a674f68b919f9493861ca71dd3454da74dbcb260c2bea63a9f956ed3d35610a192d3a9e3a13a6bddbcaf6922b99b83061ca723a4d1aed13c47a5a18b984f93c69b1f51454be545260c412a638c264239530afcea9a8373d1a5691214307239430a52df19716574a1d9021e3c68c94929149183deae849654189fe9ee888248c7957f23c9e2044a509859148543a67eb24b11b2390d02451b2b7e4ae998291478c38028fb770b7b57011bb4a2a4a97543b9ac148234cbd7a7a3127ffa8ab30c250e22df6a2c946166132a9aa5484a94a3bbe97141a49c415d36bd5eab5dcc2dd783e41c9f2b6252388404976ed667be24d872844542b996cc410e60be741c9af2f9f04b91026d3a32f99a02c9558b28430c68995c43ce7537b920661ba52aa640fffa4e2298230c5da4e4156300361fe7dd329ddaa114018534b6811267a7f30e59c53a7b5cfd1bad6113f68396a5efa805aa5e4aa226217eb2b4d3c1d4c900ba547747a8cf0c15482e83b39862a314e6c640f86d1e1498f5caf07933261f6c34feed5fc913c18fb4bae0dd17761fe64040f46b19cb36c27f9c81dcc722e7b3a6233dd53e3066260c40e8dd2a2c43f7d60a40edb8a923cdd59e5ce081d8c69c9f793786a27db19c1c81c8cabdb299b2585032372d064ea9c8bc91b188983712fb793b0b2bfa3d23c56042370f02cfe672f8dbc0100401871c3b54147d890236b30952e31ae53b53b7ae81851432998a6867cd855ab59ca3293ed7392449a687054309206a365cb1851428c92453d82067352ea4ad049f070aa62236738335c194cc60819cceef184d6b0f4188c26892849b7c5236230969c6222ea3afbd61e09c30818cc41b9083dbb7ee40b26438c112f98bfabb3fbe9f8e06232d20593c1059331b20593be1484b01cee112d9894a8a7aa732a25479547b2605c1344092a75d20b5ac40272afdd5e5a61c166e672dc7a8ba7e4d5e593072357307dd80ba6c4782356309f965568ffff90591aa98241d9896e56e8bd09f96662840a067962b157d2e3494a1e9982c957fcdea3e59a4bd1458c48c160d2ba5434efbd523d0ae638954f5e754a3aad0d05b3ebc6a965879f60126ecb94e67c4e7a197182f1bd2e7a585652a32e4d30fd5af59b5c71f2941c831126984a57d07f69eb74707509c716f532c788124c95bd2dcfc59732fd26c1202b98b87fffaf2cc24d469060104f6e712fea82c9d1114c314359aadf258d18c120bcd2747d68496a74468a604af357399560619fda112294cbd52a45d5ab2cb57bc62d181982f174d0b1f7a0d527eb4230a5eae7fdbcd95b4a07c114cd2a9e28ff1926a4236318cd2dc88ab858927852882340307a76bbd6ab10477e60b02a534ab8fbd58d13b117a68c4fa3e5b922f2c2249ed826c9efe3c1c46a1786ffe07f314b184574611af5b515bde74e9c3f05915c98ee73e89ff5cbd5a9435c1844b96a98681ec5a46f614e4a522949f1a3091e7d5b98e3983c3a9a7db5306fc7f1baf3ea86082dee18d555aa4df65325320b59a0402416b0c057f4107185417fd0aa95fbd20a4cde82688553970df14ecb922cbd5c7dcab3c25c7b77722a3badc23c63d9f3c9792b7ebd24a20a835cd549ff1f74a714a6c2a0a4cb2b39bed99612174185e1322c7b124dfd7f7da73096ec736df21626c913408898c214badfebfd52097272a5308d099d53714452184d4ac274aef551985297f8b8919e53df2343062212444461d222526b67f3b4c41b3114e6137f39cefc642f538a80c26c826f45d323c38851a8546e66326924108902028148140cc3a7970900c3130800103c208cc582b1581ceba2f801140002562a20342e2222281e14101c1c1a1044c270280c088302a12020100686838150482c95785a0f8586c3a807e85baabb031791c3d33dd556759415c0a112f08bc4ee86139a0ead8e45e228629037dd3b9c8bcbf8cd2ce2dc6697badbc7840730a46989778ee93ffa5913aa1601eea58a88bf8dbbaec85a7483d00e43efeb2ca3c790fe4bf209ec308647a676e55b134bfc9fb4f0330e38c4e4f27fd88c5249d23529965c61bce594509f253d84be6a3b39929a56334f1ff59f61a84671cd5abe64c6883a3818f0ad36fa348bfdf3cfa93d90f312b9ab3a5a2911a0ae58bc1b1e3253a0d3d9fa1ef0afeb7aec75d05bde4a35e9a23e283808b3a0ec11660649a4e386a1582d438f2223e563c6125c7fdc829cb1f13009a65e109996490e40e86123c5db683023d928abbca3f839374b66c2761f87ca63f4047eb8e2951d525649c4d7956bf95609d0215db13ae1972010b012bcf7e456040cb22c1a5802c116133318a1b1fa282eaa37e14828bfc112e4b5aea956c54369f48b20caece51aa95489291ca3d5c0674d10b05a8e681531a95732bb0c3370e06d13b1cc4bdafdc3c727bb16b7088380877f3727eb8f23bdb07e575e21c10673b2b0e63194e04739d46573c6e903cf8a1c85d0434a760138a8cece18ce111e9affc868908f44763861ba757681a115df8e246dc6d1e22be3e4c137dc42d5ebabcce0f4a4f5078daacd97962fe7fbca9bb40b07d1cda5d1e049c45ede48f404777ea0b6420ccd712c71d3addfe0af4df588468c11494a8b5f29b4825a9362e27ea5fdb14f00a117b1d82276ff0be8961c4d5778fe73508e1113831efe7a08415d91f8a80cab6ee1d7c0219354fc17b002c27b8ae077f3d8fc0a9e18b9e3f3e56e07a02f1888a59dcf282cc4b45ed14f9b7a18a760226e6aa73a0d3b4dfcd586c560b3f1577112234f489dfa2afe2f4211b73d04f9c1d683e17817178d92e4fe9d2f5499d86205061b3871ed8a1201c8f21560a0dcd16091eff99e74b4fa6a4fd06e4e8f165ecb6a362c690ce12e4d414017ffaf03e3b62b57c543eac2acd22a2c2afa82ac981ce9786b43bb599ac8efc85e358f7d6db553f2d4eb84ebcc63a9dd9593c83209126c63b6302b07498c4cacdf335627fb5a0eeac5fe9108c97a082c8fa2dacfb1447938654b16b10dd1e8e8305fd9230ffd73c156b76eddb98f4af443908c86bd39f3491ff3914d3cc682626f0c4b3605067be8aee7b69628aa661334281f11d4275c3bb19abbbeb9eeb098431c7933028a5be3003309f7f629714cd3ce25492bc75929fa9e65c8532df2346a211e18cee714a0594335251d715ea4993a8fd2f5563c0b7628a5f8662d75841840d36d1e55e4ec2b3bf734a469dc999cf3da1f65dd12ea3733d9c5210521772854c5cdececdda59ebed2aabbd1d48dbab51ffde45c59baa7b822c494624f949ca291bda8c17f41572aee45a70e619e74d0af7fa402d7f032f7f8a284acad046f4999dc11a5fbb7e7fc8bc2aa905d4a35f0963fd049c0427251ba1b4d910548e274c8da88460aaabb3a8a7bc4e12e65299d51293368298c1014ef42b55a9eb9d54bf90269a9c74b1cc50de8bc028884dc03c4d1a0013b6af68e82bac1b3bccdeed452b4d5f7641d0d7e7e0503f2bd84feedba7680c06ce3d5ac33dcb6220d818f60bddb148ce512fe600e326c19111afc2aea374d1a7fb73e46e846066f928a770ca173db7fc5232508c35b5834daa6dbe686a1f6c5659b0d725c8069f8687699a8aef64f4b0dd55d8a750634b9f34c86db3bc2145dac51fea1ab890b97c14a5aa848261e71d61d101382888dab7677857b6be6899d00d9cf455aafa7e615ff6d6ac5623bbb362bee2dced200b0a8b7b85180d7b1fb5c16f45ef937c99c595719db54223da88f1e11b90cb262754c533067821320235560cf3dd85a508ec46bd95a68625196accfece1c2ec954c929eb3aaf73a5f135219dd5e73ab6f08989f1d0fad8bc7d1c350bce3de1db856e7de1005a355ce7b2bf76bb1c1585abadc8ffbcb3ecae760c7eddf8056912ebc5dcbe3579b55a97101906d80e85e9b1f6241260084c1d2b09fc4b37e1ddcbdbb87b8868c9f10eb5d017abb14ac4edeb7844946ac8f22169495a2ebfa20887b040e9476a0b6802614ceff7e05108592ca4ff88c74f6540032fd379ae4e88e859bdd9ca40aa8551e2cc08aa2f3afd9ddd5d604231d6e6088c2206e3c57897960c145fe005e16c26d533898c19eeafda32a35251d6f19c867edcb6769c1e25d0142127011d5a164ec89cb4f787667677c24d57c433bcb9bee73f7580af93da639c64b25fd50a7bb5827e4acd8bd054d8b192b9110b8814a738ae75655009cb8a1fb26c6ca29089b961c82e2e46aad7e90d8e6fb32b50946d01d31ec42f86fc703b85351331efd157c7a55586dd894afc3c985cf00e771f526c335596ec353b5cfbad3460850c580d9aca1d1526677e7c61b8a8e94d7306d4b33e637dba6fbb9f2f0ba511ae822bb76060b13239fe3a677978581e5a79a285c1dcabfeb5c7682e270d81e84b6140a8729361be7cb969f38c0e51031adf527f72e25a505cd6859e4841707504003022804732bdc8ed0a4eb4dead56a38c8390d5688aaf1196872c03a0cb8597fb5599cf5531645851dcc3e1f53abeb61d88feb9e6ed641e7751b5ffcaed4a5490b240144ee2197640428a46ecee57f0ecc2790c342e49fe31136eef55d6fa86b467dff152b0017a2a181850deeb6947210ec04252cb68596d1c5a0f052ec02ce1054517c936f9da72b8ff288094f5afa7644dce8625b346e1ad009d20cd00f61283340112aa0e6411d7d16eaf6ebbbbc9160dc6697a3ddbfa968cb5e46f19b3e10d88059bb48ae2268d7e9a6e38eef967a8413158b937a0c7970648b7e7055764337b3bbcc2e34606077ac271f802f1ab7d3dcfde5db4ecc2c630a03dfef539106606a44fc6a3d9669912c051d0735d27a153d5f5bb896508b063b3dbb519f4c490a4f3b7a455d8db91ce3770c32acfae212ab00fec432c871bdd018a514b397df3a25f1c569103971d0321173e58b1533aa909e4afa4e4d9917e45245d6cb15e373573392e764f9c4080193825595abaae235679b48c4c43620a30c009bc08f6eff52c29a00c996f05d8398fe68a026d1b0303d98e443601e5ee2bbe246b7003ab6ece6a46faac363818dab69002b2e2945dab3d8687dd2f5dabda10a0e5448f3932c98e232371278e8c38d575509b2e65e28e6a2aa1565ac4d99b3f179bbd681eed7f14169354f39f5a15e7e3d6152179eb236de8911e63afa038ace68f75857e40ee72397e96ddf644a28e9927a6eec6373dd02d62a9ba5a756b9820bc1735ca1143b4d1921283a6e20064698f83aabcbadc2112796365ccc954add869cc8fa5283375678370283b07ce84d3a0d09717250e0310d225857583acd9cd6a476ee998ab1c34cab614f3e16a692be27600970c5b8e21768d3e5c52f213e00090b3e636cad431bc775772bc5f6a3fac0c38474a63934d65245d4a6aaec702bdbf521c3a8349732acdd745db8d39175b169ae2e3b8630ee0a89d50d8620d615900950039eae17a02b2082f102127e11c75805c917ff13973e384b949d0f6f6c0d1d293884bd3987c693a6d791639df770afc81a26317f99c15758db7c4e6c66b928916f0460eefd1f969806531c8582c621d8d0505c1e1c3db56f5b108e2085ab5c2a7bd8620c599f526bd0cef6326016f6b459ed857725766819b63b416170671716a568de5ed9c55361107fedea58e38fbaa6fb706938b4dd9b393c961857b548c72792b42edf5d5320d5c6e294bcdf9f973bdfb23509f98d7bce6e8cc8a78a74f7f03002ba31ea732b05567cb10fd64649682680e9ab8950de8a83aa9acd433c408feb921ca8065237977ce348887c4586520fbec6bf0669d42c36c133e9d779771d4b757a507e8934471694da9e6079ae5122b49b62b4f99b85b187a9565ed61e4efe0efe269dceb3d7548168ba333cedc502edf6700454efdd4d2ef013ef61f5d8820ed31df5aed57b08f815c8ca8713b12747867e0b35e367647d09a8abf897ff1c39003a63138ca332e719d8653bfa19ae460ba035bd74628a1e32c362f85b4bcd2e7b1294aa0f55a3b86c469269b9766007e6537af0589cc4299e985c14ed45e8aa81884b9843063d0ea0e369adfaba7bf10cb0792add8ca09a4c0f80fa774ba3df68489970dc437471d68022c14a64ca4f5f1b9b7d0c8a3e82d360936b3f754b4b3dcd3f46754615b956f5e510e31067ae0ac17ea6cf87e6c1a02e83259acd7945dad46dd66234ee3e51958876ed747e5ae0b65aa3212ac83debac0b0180fb754bc4693db84e8149b8170e09104822b6d4cd676ebc4190185ab66f95feb41e86c810b0f45aa9db58cc978041e9d6cd54e86a0d43ffbf3f227642f9ee53e7b23402b158e74dd97a94c62960e084975c3a3e1059f4c4c15f5b82b19b9daeb2e3d58ab74c0949cac69b2a525453e7141c288669a3e34dcb84d0245c5595b79e7a9970c128495f34a709dbe312b0989890c79243106d0b68c0fd3ee55fb26f4319cda16db83b79da1c324e96249c6f0813279fa0967167ff08e3434cff3a90299440b9d4b68e88498864af5246ede3c1c7894081618bc609ebada9d1f374e20f2d0d418526d1cf6a974257f72b79717ca98c520367b068fa42d99698e1a3e128764dd848b19e396d9f5c3c4da8dc17c7416905b4f3e1746a07624e644eb48bd18cbbd9233e5397714ded57afb19ea9f351e9a7a6651a9329d49f2c109ed0c479412db83758e0d0ce1f3196cf09b4ff4c2ba23c28fdc2a4c532f49d160bc01348d23aa812986f441a94e4be16c7ffb23af809f55e4ceaf466ba0695387a720cfe09fe365e219f0926d3216ef749a45c089aa67e15054aed69ae4a271069b93c24ddeb58836c37c5fbdb3c560632baf2f7d4c11d3246c1c002c2070531640d48b82a38401ee48ad6db5547d9990ef28d70458a57857e5c0713640ff8af85697da9560c001b019d3985239a1ab3491094dadf55892fd95392f42415eb03f5c1ab217529af9adf032d1cf4c830ead491411d48c6f9dc13433d02385a7d019660392721822d5462c28e080d6a3c43e11971462dd42172fdd1ad05e311dffd56d2e268f41e01ce3673fdd481700c9b5d878cfac0b6a810c12bcc63f8112b421a0d712b4fc2a2a709ca865f72049212ce3cd0d8aba5b51ff277bc2fe071486e949f9af0d8ad78dcc47a5593c760b726fbcad2dc48e6a895cfa9acf65e5354417851425c6cc9fb39b677a084338490356c813358b084d656fdcd13bc60c55eecdbc10d28947df0e1b4b21edb38f43da42a1c75ee7b919686e770174cc1630e56f51e77f394a0e79103452e79196a0a72fa5106a46a394e2294d62f6fab207951754b161f2dbbba354137a6c3ece3699c9151c5def5519fe9b500bb5ff367d8162e48245b864f2a8f994e4ca4586e8436f673c0b4f14d13236ea7879d28ff291b2441ee319bd20dcc315931c66b5d205a03875a037f17bd132c09cca4cc8f5291c7feab2d7bb0d7cd55de46551cc305da5696720f5a8861f31049d557f87bedc6e2157e2022955e40dd6ac094c28956be2e96dfdbd887a3dc134cbe442eae0d64bef8f3c51b2533cd909f2a72c330e99bfdaa05fc61bac4ad93257ac63be82317499f1f92106a80353226f0a8e235e1d6894b132dd64132e04bbdcc42aa8bf2c16883d3218dd7b452c5ca217da4d9212a74a16293f357c731c67ea9d209be9fe4a6a1bb1d26022e19dd20865978e84cddf06dd5f899341af6ce3f9f1dee6bf62d5103eeb63080593b53beda629a62a65145428688b4c5d021dadc9bd6983f6da4a620b0aa6c1ffd5fe395183b4cff2f2f62c20a2e70de3b74a985152698d29a53719b0597c9888da9b5d7f4a0ec4692cb0b2e422ce4d3d43ac8c8da107d5e0194bee7826b77e69db2b517ae4e2983739b14b9c83ce090b3628a5fa7a04e2931f678383bd4a384cdc1eac32e5144c4523708c34d86ca415de48203259fa996566b8c8cb17f2b9667e0d4cd3b09b722d8256f53bd09392ca027eda7251672c4446f5dd4455c6fd13d7672662549e58d16193ba8f3963e1eb8565a51850932ef7d35afa96216510aaa9b323b8ce660764b953f022435f2484694462c342109b2276de449dea44a86e4a42859ede24295e4ef1b64dec96b2a3d916632159cdb4d692e67f9fa7d5a44b3ac9a948b1467752dbf96a452149ada5709e5a91b8c9780b2c687231098d5775608a482704a81dc9d3ab33c3ba7d4f2ac8c272f9b061e039e2397067586553f2bd5a4aada73867571752e197303615e7ed9d1ceb84c7e020890d5ea608d9c77b27513a3af150cf8fbece7de497a91ed57eb945e171e0cb3851bcd48c46d391a8de44dd32099a01ef30481d7823b89aae4f71654e0e521a9c6b544bc5e7778fc04bde8957c594e9da279208f7121183be842dab376e3870e4a599b433936bcc6484058cd75074541e78937983af9b5685f6e4f1ae01916188bdd1beed6eace4a3f6320a7c2b6eb7f9f3562113098ad469cd3a8ae5f878831f6b15a80f245aecb83110f7159eb722285c298fb84563980061b8e83131737a8613112ec5032c0a6a32e5adfae4a3343f2de4073b3d2552337ff7785720f80dfe0eee64b3ba8f3a1f25918b947054ea687f56a257b38247c3d74f0d7d9a912e8d214361776ee9e5e8e5528b14566cc311ca210b263bf56848c888fbbf0a0faae0e678a3c141e29c16f2adaf39b9c2fce5dfc431e58fa01200043062fb75c7d01b9226d335ca340954789b15aeaa820dabf980a6471b71eecf5461395eaf721fa26eae08d7efc328b05af10492a7795a399ac6166d32290e792537c711e0dbb0e7eef70f6c6d4a382ed927c671bb9df750848a09e7a0938c5898c9ba0a9c5086cf5484c28b1159683d4478324dd38febe3ce663d5d27ec2d5adc0643812887a5a352f4af0dc326edc90ea6da116ce1613893bfd39a9beee256b7f8d1f768642917c88e64c876cb8b3da52397c7598fe5879be8f1b1d854b937dd57b53cd50784abb307203679a1fb8e9122b6811035a8355849165fc5a99b6ba836d2566ce64d251a63ae37ec3afbd775fa5fe0f4569e4445092b17e7ec5652ea56367547b2afa8c0c394cbf97d94c7698f9524a2ff1c3face632d3318d5e57c964f8815cfef69cf435731a0b4af432e80429afd8d74022aac4b3f1076efb2a1f166f68a0addcb2840f550bec34e8de083acf292ee58314ca5b583997899d3ccc9eb56305df1999dd365aa0a07b617a547ce8fc78b12eadcb54815ef9acde66b44e3baf51ae47f055ef03eddd79f1ad849781f7603aa41ed08392fe28ca729e847886b299b539327eb0c537f08ec2e4a4be6d43b8d5dd51ffb3d0c6bf121ec8537e650408db5ec0b083ba9838591705dea8808cf714f88c4378b512c0046227005a93a1ae2912b120ce73fb6ed3f4434791ede482b4bd2a2510c70fae0966d9191bf30a165b613e0f9cc3dfd0b6c371a5321afec605709c57fe078c646969a9b3ff1b7f2e4bbaabbdcbf0fa9513e8347a6dd121b6113e3fdd1a269939798e7ac6ee202b1cad94c309cdbca202444e4ab90023948d9c74182db3d787d1899780a09f66cac6bdf502698f87dbd9d9f0c0836d61bef5d9a7c891b326607eb4003aae38630c06c453698cced27ef43bc010269ae7d8856d23b21f730fe5a5b5b5e595d35864c3bb46d4f920b64f4acbcfeb8d17d4bef32b5a662e31cd94fc83989e2bcbfeaf399399137fd7f9b3dabd6a1ec6a1e5185297676482bf946a793d5699ea552728d75fa86763ab4768a9d72e98bfc9c225f2ff4bca5ecd4476850a17fd3eadc4eed2113c0e30e7d20270c39e60b1bc61fe3329448ab095312e507d48b3283cfad8d4e2674651cecc2a33cf55df901908932763d6ab2b5fa62e3008da67630f1842d8e3bdeee362c772b7cd2cbaf4bbdb9307d38a3d1c39d96289140d26321ce76711cbd7068f3feb8f9c652d86c205f7b0fd17778cde980a2bd3baaad6120e04be9e45bb2fbcb3d88fb08ca68975a8b5242784b4ac5059f57cd9551aa7393e934dec7137fc2ced32976ce9cd26b79306fc1f99dcf199628ec0045d883e5c7abb292d18723f922bdb55bc6148bfae8dca08ec6f47b5fcfae29290072f44d53d6f0fdb8076d8aa18d16bbf75436cf389946276c120fd259c0fb7f1579daeaa32c7a8a5d01d90a1af5ce547a59f2d8d1ba61836d155e4d94ee192583bcb2a1741779318fc2ed3b6ff326e565d899c62231334015b22b07f77114e8de0aba74e7fc8cc2b0d02c2db378e4cee1da8789741591e9d007898f37f12465127536f23edc8bc420f2e37920ef0e2ed2125c3e447f4c38a5f4e0cada336c6a10db5871e8cee62c0289e40204915d91f83618b459627e7ad36e10c52b569cfaa49ed2f33c9727e1ec9d6d33a6604295f54160d1a58eabe2e93fbbb9485cc3481e9f90669601f03cf09ca0e7f7949e475b4454b77772d27391f2d6f80b7a2b9b524f422686517932d42f5337292de72775964fcff37342cfc8f379098edc2d3f5b61f4ca0f2ba1763ccfc3797e376bfa01", + "0x3a65787472696e7369635f696e646578": "0x00000000", + "0x3c311d57d4daf52904616cf69648081e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x3c311d57d4daf52904616cf69648081e5e0621c4869aa60c02be9adcc98a0d1d": "0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0x3f1467a096bcd71a5b6a0c8155e208104e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x45323df7cc47150b3930e2666b0aa3134e7b9012096b41c4eb3aaf947f6ea429": "0x0200", + "0x4dcb50595177a3177648411a42aca0f54e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x57f8dc2f5ab09467896f47300f0424384e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x57f8dc2f5ab09467896f47300f0424385e0621c4869aa60c02be9adcc98a0d1d": "0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0x7474449cca95dc5d0c00e71735a6d17d4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x79e2fe5d327165001f8232643023ed8b4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x7b3237373ffdfeb1cab4222e3b520d6b4e7b9012096b41c4eb3aaf947f6ea429": "0x0300", + "0xb8753e9383841da95f7b8871e5de32694e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xc2261276cc9d1f8598ea4b6a74b15c2f4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x004035b70c0000000000000000000000", + "0xcd5c1f6df63bc97f4a8ce37f14a50ca74e7b9012096b41c4eb3aaf947f6ea429": "0x0200", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3518366b5b1bc7c99d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0xcec5070d609dd3497f72bde07fc96ba04e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950391c80dfcd87103c6175726180d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0xd57bce545fb382c34570e5dfbf338f5e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xd5e1a2fa16732ce6906189438c0a82c64e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xe38f185207498abb5c213d0fb059b3d84e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xe38f185207498abb5c213d0fb059b3d86323ae84c43568be0d1394d5d0d522c4": "0x03000000", + "0xf0c365c3cf59d671eb72da0e7a4113c44e7b9012096b41c4eb3aaf947f6ea429": "0x0000" + }, + "childrenDefault": {} + } + } +} \ No newline at end of file diff --git a/cumulus/parachains/runtimes/coretime/coretime-rococo/Cargo.toml b/cumulus/parachains/runtimes/coretime/coretime-rococo/Cargo.toml index 763f62be4aa..f8a1584e813 100644 --- a/cumulus/parachains/runtimes/coretime/coretime-rococo/Cargo.toml +++ b/cumulus/parachains/runtimes/coretime/coretime-rococo/Cargo.toml @@ -41,6 +41,7 @@ sp-block-builder = { path = "../../../../../substrate/primitives/block-builder", sp-consensus-aura = { path = "../../../../../substrate/primitives/consensus/aura", default-features = false} sp-core = { path = "../../../../../substrate/primitives/core", default-features = false} sp-inherents = { path = "../../../../../substrate/primitives/inherents", default-features = false} +sp-genesis-builder = { path = "../../../../../substrate/primitives/genesis-builder", default-features = false } sp-offchain = { path = "../../../../../substrate/primitives/offchain", default-features = false} sp-runtime = { path = "../../../../../substrate/primitives/runtime", default-features = false} sp-session = { path = "../../../../../substrate/primitives/session", default-features = false} @@ -117,6 +118,7 @@ std = [ "sp-block-builder/std", "sp-consensus-aura/std", "sp-core/std", + "sp-genesis-builder/std", "sp-inherents/std", "sp-offchain/std", "sp-runtime/std", diff --git a/cumulus/parachains/runtimes/coretime/coretime-rococo/src/lib.rs b/cumulus/parachains/runtimes/coretime/coretime-rococo/src/lib.rs index abadb701f1f..f1459b7e1c8 100644 --- a/cumulus/parachains/runtimes/coretime/coretime-rococo/src/lib.rs +++ b/cumulus/parachains/runtimes/coretime/coretime-rococo/src/lib.rs @@ -45,6 +45,7 @@ use sp_version::RuntimeVersion; use frame_support::{ construct_runtime, dispatch::DispatchClass, + genesis_builder_helper::{build_config, create_default_config}, parameter_types, traits::{ ConstBool, ConstU32, ConstU64, ConstU8, Contains, EitherOfDiverse, EverythingBut, @@ -893,6 +894,16 @@ impl_runtime_apis! { Ok(batches) } } + + impl sp_genesis_builder::GenesisBuilder for Runtime { + fn create_default_config() -> Vec { + create_default_config::() + } + + fn build_config(config: Vec) -> sp_genesis_builder::Result { + build_config::(config) + } + } } cumulus_pallet_parachain_system::register_validate_block! { diff --git a/cumulus/polkadot-parachain/src/chain_spec/coretime.rs b/cumulus/polkadot-parachain/src/chain_spec/coretime.rs index a43b6a7a886..81aedce81a8 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/coretime.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/coretime.rs @@ -14,13 +14,18 @@ // You should have received a copy of the GNU General Public License // along with Cumulus. If not, see . +use cumulus_primitives_core::ParaId; use sc_chain_spec::ChainSpec; use std::{path::PathBuf, str::FromStr}; /// Collects all supported Coretime configurations. #[derive(Debug, PartialEq)] pub enum CoretimeRuntimeType { + // Live Rococo, + // Benchmarks + RococoDevelopment, + Westend, } @@ -30,6 +35,7 @@ impl FromStr for CoretimeRuntimeType { fn from_str(value: &str) -> Result { match value { rococo::CORETIME_ROCOCO => Ok(CoretimeRuntimeType::Rococo), + rococo::CORETIME_ROCOCO_DEVELOPMENT => Ok(CoretimeRuntimeType::RococoDevelopment), westend::CORETIME_WESTEND => Ok(CoretimeRuntimeType::Westend), _ => Err(format!("Value '{}' is not configured yet", value)), } @@ -41,7 +47,7 @@ impl CoretimeRuntimeType { pub fn chain_spec_from_json_file(&self, path: PathBuf) -> Result, String> { match self { - CoretimeRuntimeType::Rococo => + CoretimeRuntimeType::Rococo | CoretimeRuntimeType::RococoDevelopment => Ok(Box::new(rococo::CoretimeChainSpec::from_json_file(path)?)), CoretimeRuntimeType::Westend => Ok(Box::new(westend::CoretimeChainSpec::from_json_file(path)?)), @@ -54,6 +60,12 @@ impl CoretimeRuntimeType { Ok(Box::new(rococo::CoretimeChainSpec::from_json_bytes( &include_bytes!("../../../parachains/chain-specs/coretime-rococo.json")[..], )?)), + CoretimeRuntimeType::RococoDevelopment => Ok(Box::new(rococo::development_config( + rococo::CORETIME_ROCOCO_DEVELOPMENT, + "Rococo Coretime Development", + "rococo-dev", + ParaId::new(1005), + ))), CoretimeRuntimeType::Westend => Ok(Box::new(westend::CoretimeChainSpec::from_json_bytes( &include_bytes!("../../../parachains/chain-specs/coretime-westend.json")[..], @@ -62,14 +74,108 @@ impl CoretimeRuntimeType { } } +/// Check if 'id' satisfies Coretime-like format +fn ensure_id(id: &str) -> Result<&str, String> { + if id.starts_with(CoretimeRuntimeType::ID_PREFIX) { + Ok(id) + } else { + Err(format!( + "Invalid 'id' attribute ({}), should start with prefix: {}", + id, + CoretimeRuntimeType::ID_PREFIX + )) + } +} + /// Sub-module for Rococo setup. pub mod rococo { - use crate::chain_spec::Extensions; + use super::ParaId; + use crate::chain_spec::{ + get_account_id_from_seed, get_collator_keys_from_seed, Extensions, SAFE_XCM_VERSION, + }; + use parachains_common::{AccountId, AuraId, Balance}; + use sc_chain_spec::ChainType; + use sp_core::sr25519; pub(crate) const CORETIME_ROCOCO: &str = "coretime-rococo"; + pub(crate) const CORETIME_ROCOCO_DEVELOPMENT: &str = "coretime-rococo-dev"; + const CORETIME_ROCOCO_ED: Balance = parachains_common::rococo::currency::EXISTENTIAL_DEPOSIT; + pub type CoretimeChainSpec = sc_service::GenericChainSpec; pub type RuntimeApi = coretime_rococo_runtime::RuntimeApi; + + pub fn development_config( + id: &str, + chain_name: &str, + relay_chain: &str, + para_id: ParaId, + ) -> CoretimeChainSpec { + // Rococo defaults + let mut properties = sc_chain_spec::Properties::new(); + properties.insert("ss58Format".into(), 42.into()); + properties.insert("tokenSymbol".into(), "ROC".into()); + properties.insert("tokenDecimals".into(), 12.into()); + + CoretimeChainSpec::builder( + coretime_rococo_runtime::WASM_BINARY + .expect("WASM binary was not built, please build it!"), + Extensions { relay_chain: relay_chain.to_string(), para_id: para_id.into() }, + ) + .with_name(chain_name) + .with_id(super::ensure_id(id).expect("invalid id")) + .with_chain_type(ChainType::Development) + .with_genesis_config_patch(genesis( + // initial collators. + vec![( + get_account_id_from_seed::("Alice"), + get_collator_keys_from_seed::("Alice"), + )], + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Alice//stash"), + get_account_id_from_seed::("Bob//stash"), + ], + para_id, + )) + .with_properties(properties) + .build() + } + + fn genesis( + invulnerables: Vec<(AccountId, AuraId)>, + endowed_accounts: Vec, + id: ParaId, + ) -> serde_json::Value { + serde_json::json!({ + "balances": { + "balances": endowed_accounts.iter().cloned().map(|k| (k, CORETIME_ROCOCO_ED * 4096)).collect::>(), + }, + "parachainInfo": { + "parachainId": id, + }, + "collatorSelection": { + "invulnerables": invulnerables.iter().cloned().map(|(acc, _)| acc).collect::>(), + "candidacyBond": CORETIME_ROCOCO_ED * 16, + }, + "session": { + "keys": invulnerables + .into_iter() + .map(|(acc, aura)| { + ( + acc.clone(), // account id + acc, // validator id + coretime_rococo_runtime::SessionKeys { aura }, // session keys + ) + }) + .collect::>(), + }, + "polkadotXcm": { + "safeXcmVersion": Some(SAFE_XCM_VERSION), + } + }) + } } /// Sub-module for Westend setup. diff --git a/cumulus/polkadot-parachain/src/command.rs b/cumulus/polkadot-parachain/src/command.rs index 6be819c6921..1c894cda6ba 100644 --- a/cumulus/polkadot-parachain/src/command.rs +++ b/cumulus/polkadot-parachain/src/command.rs @@ -543,7 +543,8 @@ macro_rules! construct_partials { )?; $code }, - chain_spec::coretime::CoretimeRuntimeType::Rococo => { + chain_spec::coretime::CoretimeRuntimeType::Rococo | + chain_spec::coretime::CoretimeRuntimeType::RococoDevelopment => { let $partials = new_partial::( &$config, crate::service::aura_build_import_queue::<_, AuraId>, @@ -749,7 +750,8 @@ macro_rules! construct_async_run { }, Runtime::Coretime(coretime_runtime_type) => { match coretime_runtime_type { - chain_spec::coretime::CoretimeRuntimeType::Rococo => { + chain_spec::coretime::CoretimeRuntimeType::Rococo | + chain_spec::coretime::CoretimeRuntimeType::RococoDevelopment => { runner.async_run(|$config| { let $components = new_partial::( &$config, @@ -1102,7 +1104,8 @@ chain_spec::bridge_hubs::BridgeHubRuntimeType::Polkadot | .map_err(Into::into), Runtime::Coretime(coretime_runtime_type) => match coretime_runtime_type { - chain_spec::coretime::CoretimeRuntimeType::Rococo => + chain_spec::coretime::CoretimeRuntimeType::Rococo | + chain_spec::coretime::CoretimeRuntimeType::RococoDevelopment => crate::service::start_generic_aura_node::< chain_spec::coretime::rococo::RuntimeApi, AuraId, diff --git a/cumulus/scripts/create_coretime_rococo_spec.sh b/cumulus/scripts/create_coretime_rococo_spec.sh index cc20e7a9123..26d7e429158 100755 --- a/cumulus/scripts/create_coretime_rococo_spec.sh +++ b/cumulus/scripts/create_coretime_rococo_spec.sh @@ -23,7 +23,7 @@ para_id=$2 echo "Generating chain spec for runtime: $rt_path and para_id: $para_id" -binary="./target/release/rococo-parachain" +binary="./target/release/polkadot-parachain" # build the chain spec we'll manipulate $binary build-spec --chain coretime-rococo-dev > chain-spec-plain.json @@ -78,7 +78,7 @@ cat chain-spec-plain.json | jq --rawfile code rt-hex.txt '.genesis.runtime.syste # build a raw spec $binary build-spec --chain edited-chain-spec-plain.json --raw > chain-spec-raw.json cp edited-chain-spec-plain.json coretime-rococo-spec.json -cp chain-spec-raw.json ./parachains/chain-specs/coretime-rococo.json +cp chain-spec-raw.json ./cumulus/parachains/chain-specs/coretime-rococo.json cp chain-spec-raw.json coretime-rococo-spec-raw.json # build genesis data -- GitLab From 2183669d05f9b510f979a0cc3c7847707bacba2e Mon Sep 17 00:00:00 2001 From: Michal Kucharczyk <1728078+michalkucharczyk@users.noreply.github.com> Date: Tue, 21 Nov 2023 20:03:55 +0100 Subject: [PATCH 033/102] cumulus-test-service: block import fix (#2430) This is follow-up for: https://github.com/paritytech/polkadot-sdk/pull/2001 Block import queue for `test-parachain` (`cumulus-test-service`) shall use delayed best block feature. This should fixed broken zombienet tests. --- cumulus/test/service/src/lib.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cumulus/test/service/src/lib.rs b/cumulus/test/service/src/lib.rs index 6fd3e4d43d7..4d4c60d1bda 100644 --- a/cumulus/test/service/src/lib.rs +++ b/cumulus/test/service/src/lib.rs @@ -211,7 +211,8 @@ pub fn new_partial( sc_service::new_full_parts::(config, None, executor)?; let client = Arc::new(client); - let block_import = ParachainBlockImport::new(client.clone(), backend.clone()); + let block_import = + ParachainBlockImport::new_with_delayed_best_block(client.clone(), backend.clone()); let registry = config.prometheus_registry(); -- GitLab From 7a32f4be48e514eccfbe5f8d2c2366c049cc4e3d Mon Sep 17 00:00:00 2001 From: Ross Bulat Date: Wed, 22 Nov 2023 16:22:28 +0700 Subject: [PATCH 034/102] Deprecate `RewardDestination::Controller` (#2380) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Deprecates `RewardDestination::Controller` variant. - [x] `RewardDestination::Controller` annotated with `#[deprecated]`. - [x] `Controller` variant is now handled the same way as `Stash` in `payout_stakers`. - [x] `set_payee` errors if `RewardDestination::Controller` is provided. - [x] Added `update_payee` call to lazily migrate `RewardDestination::Controller` `Payee` storage entries to `RewardDestination::Account(controller)` . - [x] `payout_stakers_dead_controller` has been removed from benches & weights - was not used. - [x] Tests no longer use `RewardDestination::Controller`. --------- Co-authored-by: command-bot <> Co-authored-by: Gonçalo Pestana Co-authored-by: georgepisaltu <52418509+georgepisaltu@users.noreply.github.com> --- .../westend/src/weights/pallet_staking.rs | 238 ++++----- substrate/frame/staking/src/benchmarking.rs | 54 +- substrate/frame/staking/src/lib.rs | 6 +- substrate/frame/staking/src/mock.rs | 2 +- substrate/frame/staking/src/pallet/impls.rs | 13 +- substrate/frame/staking/src/pallet/mod.rs | 45 +- substrate/frame/staking/src/tests.rs | 203 ++++---- substrate/frame/staking/src/weights.rs | 468 ++++++++---------- 8 files changed, 475 insertions(+), 554 deletions(-) diff --git a/polkadot/runtime/westend/src/weights/pallet_staking.rs b/polkadot/runtime/westend/src/weights/pallet_staking.rs index 3c4542c6d6f..87b603621e8 100644 --- a/polkadot/runtime/westend/src/weights/pallet_staking.rs +++ b/polkadot/runtime/westend/src/weights/pallet_staking.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_staking` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-10-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-11-21, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` //! WASM-EXECUTION: `Compiled`, CHAIN: `Some("westend-dev")`, DB CACHE: 1024 @@ -62,8 +62,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `894` // Estimated: `4764` - // Minimum execution time: 39_950_000 picoseconds. - Weight::from_parts(41_107_000, 0) + // Minimum execution time: 38_052_000 picoseconds. + Weight::from_parts(39_303_000, 0) .saturating_add(Weight::from_parts(0, 4764)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(4)) @@ -84,8 +84,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1921` // Estimated: `8877` - // Minimum execution time: 83_828_000 picoseconds. - Weight::from_parts(85_733_000, 0) + // Minimum execution time: 81_690_000 picoseconds. + Weight::from_parts(83_889_000, 0) .saturating_add(Weight::from_parts(0, 8877)) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(7)) @@ -112,8 +112,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `2128` // Estimated: `8877` - // Minimum execution time: 89_002_000 picoseconds. - Weight::from_parts(91_556_000, 0) + // Minimum execution time: 84_409_000 picoseconds. + Weight::from_parts(87_330_000, 0) .saturating_add(Weight::from_parts(0, 8877)) .saturating_add(T::DbWeight::get().reads(12)) .saturating_add(T::DbWeight::get().writes(7)) @@ -133,11 +133,11 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1075` // Estimated: `4764` - // Minimum execution time: 40_839_000 picoseconds. - Weight::from_parts(42_122_428, 0) + // Minimum execution time: 39_770_000 picoseconds. + Weight::from_parts(40_828_632, 0) .saturating_add(Weight::from_parts(0, 4764)) - // Standard Error: 884 - .saturating_add(Weight::from_parts(46_036, 0).saturating_mul(s.into())) + // Standard Error: 824 + .saturating_add(Weight::from_parts(51_107, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -174,11 +174,11 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `2127 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 84_244_000 picoseconds. - Weight::from_parts(91_199_964, 0) + // Minimum execution time: 82_500_000 picoseconds. + Weight::from_parts(90_099_121, 0) .saturating_add(Weight::from_parts(0, 6248)) - // Standard Error: 3_381 - .saturating_add(Weight::from_parts(1_327_289, 0).saturating_mul(s.into())) + // Standard Error: 3_280 + .saturating_add(Weight::from_parts(1_273_212, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(13)) .saturating_add(T::DbWeight::get().writes(11)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -210,8 +210,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1301` // Estimated: `4556` - // Minimum execution time: 49_693_000 picoseconds. - Weight::from_parts(50_814_000, 0) + // Minimum execution time: 48_236_000 picoseconds. + Weight::from_parts(49_518_000, 0) .saturating_add(Weight::from_parts(0, 4556)) .saturating_add(T::DbWeight::get().reads(11)) .saturating_add(T::DbWeight::get().writes(5)) @@ -225,11 +225,11 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1243 + k * (569 ±0)` // Estimated: `4556 + k * (3033 ±0)` - // Minimum execution time: 29_140_000 picoseconds. - Weight::from_parts(28_309_627, 0) + // Minimum execution time: 28_280_000 picoseconds. + Weight::from_parts(29_182_740, 0) .saturating_add(Weight::from_parts(0, 4556)) - // Standard Error: 5_780 - .saturating_add(Weight::from_parts(6_509_869, 0).saturating_mul(k.into())) + // Standard Error: 6_102 + .saturating_add(Weight::from_parts(6_412_107, 0).saturating_mul(k.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(k.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(k.into()))) @@ -262,11 +262,11 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1797 + n * (102 ±0)` // Estimated: `6248 + n * (2520 ±0)` - // Minimum execution time: 61_377_000 picoseconds. - Weight::from_parts(58_805_232, 0) + // Minimum execution time: 59_846_000 picoseconds. + Weight::from_parts(58_029_857, 0) .saturating_add(Weight::from_parts(0, 6248)) - // Standard Error: 14_197 - .saturating_add(Weight::from_parts(4_090_197, 0).saturating_mul(n.into())) + // Standard Error: 15_967 + .saturating_add(Weight::from_parts(3_898_764, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(12)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(6)) @@ -290,8 +290,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1581` // Estimated: `6248` - // Minimum execution time: 52_736_000 picoseconds. - Weight::from_parts(54_573_000, 0) + // Minimum execution time: 51_223_000 picoseconds. + Weight::from_parts(52_310_000, 0) .saturating_add(Weight::from_parts(0, 6248)) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(6)) @@ -306,12 +306,28 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `865` // Estimated: `4556` - // Minimum execution time: 16_496_000 picoseconds. - Weight::from_parts(17_045_000, 0) + // Minimum execution time: 15_762_000 picoseconds. + Weight::from_parts(16_381_000, 0) .saturating_add(Weight::from_parts(0, 4556)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } + /// Storage: `Staking::Ledger` (r:1 w:0) + /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) + /// Storage: `Staking::Payee` (r:1 w:1) + /// Proof: `Staking::Payee` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) + /// Storage: `Staking::Bonded` (r:1 w:0) + /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) + fn update_payee() -> Weight { + // Proof Size summary in bytes: + // Measured: `932` + // Estimated: `4556` + // Minimum execution time: 21_904_000 picoseconds. + Weight::from_parts(22_373_000, 0) + .saturating_add(Weight::from_parts(0, 4556)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(1)) + } /// Storage: `Staking::Bonded` (r:1 w:1) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:2) @@ -320,8 +336,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `865` // Estimated: `4556` - // Minimum execution time: 19_339_000 picoseconds. - Weight::from_parts(20_187_000, 0) + // Minimum execution time: 18_869_000 picoseconds. + Weight::from_parts(19_422_000, 0) .saturating_add(Weight::from_parts(0, 4556)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(3)) @@ -332,8 +348,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_340_000 picoseconds. - Weight::from_parts(2_551_000, 0) + // Minimum execution time: 2_205_000 picoseconds. + Weight::from_parts(2_320_000, 0) .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -343,8 +359,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_483_000 picoseconds. - Weight::from_parts(8_101_000, 0) + // Minimum execution time: 7_179_000 picoseconds. + Weight::from_parts(7_843_000, 0) .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -354,8 +370,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_773_000 picoseconds. - Weight::from_parts(8_610_000, 0) + // Minimum execution time: 7_206_000 picoseconds. + Weight::from_parts(7_829_000, 0) .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -365,8 +381,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_577_000 picoseconds. - Weight::from_parts(7_937_000, 0) + // Minimum execution time: 7_414_000 picoseconds. + Weight::from_parts(7_770_000, 0) .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -377,11 +393,11 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_522_000 picoseconds. - Weight::from_parts(2_735_307, 0) + // Minimum execution time: 2_256_000 picoseconds. + Weight::from_parts(2_645_840, 0) .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 38 - .saturating_add(Weight::from_parts(10_553, 0).saturating_mul(v.into())) + // Standard Error: 37 + .saturating_add(Weight::from_parts(10_207, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: `Staking::SlashingSpans` (r:1 w:1) @@ -417,11 +433,11 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `2127 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 82_547_000 picoseconds. - Weight::from_parts(89_373_781, 0) + // Minimum execution time: 81_032_000 picoseconds. + Weight::from_parts(88_297_596, 0) .saturating_add(Weight::from_parts(0, 6248)) - // Standard Error: 3_589 - .saturating_add(Weight::from_parts(1_258_878, 0).saturating_mul(s.into())) + // Standard Error: 3_070 + .saturating_add(Weight::from_parts(1_207_207, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(13)) .saturating_add(T::DbWeight::get().writes(12)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -434,56 +450,14 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `66639` // Estimated: `70104` - // Minimum execution time: 134_619_000 picoseconds. - Weight::from_parts(1_194_949_665, 0) + // Minimum execution time: 131_456_000 picoseconds. + Weight::from_parts(935_254_517, 0) .saturating_add(Weight::from_parts(0, 70104)) - // Standard Error: 76_719 - .saturating_add(Weight::from_parts(6_455_953, 0).saturating_mul(s.into())) + // Standard Error: 57_806 + .saturating_add(Weight::from_parts(4_823_189, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - /// Storage: `Staking::CurrentEra` (r:1 w:0) - /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Staking::ErasStakersOverview` (r:1 w:0) - /// Proof: `Staking::ErasStakersOverview` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) - /// Storage: `Staking::ErasValidatorReward` (r:1 w:0) - /// Proof: `Staking::ErasValidatorReward` (`max_values`: None, `max_size`: Some(28), added: 2503, mode: `MaxEncodedLen`) - /// Storage: `Staking::Bonded` (r:65 w:0) - /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) - /// Storage: `Staking::Ledger` (r:1 w:1) - /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) - /// Storage: `Balances::Locks` (r:1 w:1) - /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) - /// Storage: `Balances::Freezes` (r:1 w:0) - /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:66 w:66) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Staking::ClaimedRewards` (r:1 w:1) - /// Proof: `Staking::ClaimedRewards` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Staking::ErasStakersPaged` (r:1 w:0) - /// Proof: `Staking::ErasStakersPaged` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Staking::ErasRewardPoints` (r:1 w:0) - /// Proof: `Staking::ErasRewardPoints` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Staking::ErasValidatorPrefs` (r:1 w:0) - /// Proof: `Staking::ErasValidatorPrefs` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) - /// Storage: `Staking::Payee` (r:65 w:0) - /// Proof: `Staking::Payee` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 64]`. - fn payout_stakers_dead_controller(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `6895 + n * (156 ±0)` - // Estimated: `9802 + n * (2603 ±0)` - // Minimum execution time: 114_338_000 picoseconds. - Weight::from_parts(138_518_124, 0) - .saturating_add(Weight::from_parts(0, 9802)) - // Standard Error: 53_621 - .saturating_add(Weight::from_parts(25_676_781, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(14)) - .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(n.into()))) - .saturating_add(T::DbWeight::get().writes(5)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) - .saturating_add(Weight::from_parts(0, 2603).saturating_mul(n.into())) - } /// Storage: `Staking::Bonded` (r:65 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:65 w:65) @@ -516,12 +490,12 @@ impl pallet_staking::WeightInfo for WeightInfo { fn payout_stakers_alive_staked(n: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `8249 + n * (396 ±0)` - // Estimated: `10779 + n * (3774 ±3)` - // Minimum execution time: 132_719_000 picoseconds. - Weight::from_parts(170_505_880, 0) + // Estimated: `10779 + n * (3774 ±0)` + // Minimum execution time: 129_233_000 picoseconds. + Weight::from_parts(165_096_042, 0) .saturating_add(Weight::from_parts(0, 10779)) - // Standard Error: 32_527 - .saturating_add(Weight::from_parts(42_453_136, 0).saturating_mul(n.into())) + // Standard Error: 29_598 + .saturating_add(Weight::from_parts(40_716_425, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(14)) .saturating_add(T::DbWeight::get().reads((6_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(4)) @@ -545,11 +519,11 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1922 + l * (5 ±0)` // Estimated: `8877` - // Minimum execution time: 78_438_000 picoseconds. - Weight::from_parts(81_774_734, 0) + // Minimum execution time: 77_223_000 picoseconds. + Weight::from_parts(80_026_259, 0) .saturating_add(Weight::from_parts(0, 8877)) - // Standard Error: 3_706 - .saturating_add(Weight::from_parts(51_358, 0).saturating_mul(l.into())) + // Standard Error: 4_493 + .saturating_add(Weight::from_parts(52_909, 0).saturating_mul(l.into())) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(7)) } @@ -584,11 +558,11 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `2127 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 92_129_000 picoseconds. - Weight::from_parts(94_137_611, 0) + // Minimum execution time: 89_871_000 picoseconds. + Weight::from_parts(92_313_331, 0) .saturating_add(Weight::from_parts(0, 6248)) - // Standard Error: 4_141 - .saturating_add(Weight::from_parts(1_283_823, 0).saturating_mul(s.into())) + // Standard Error: 3_321 + .saturating_add(Weight::from_parts(1_243_347, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(12)) .saturating_add(T::DbWeight::get().writes(11)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -634,13 +608,13 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0 + n * (716 ±0) + v * (3594 ±0)` // Estimated: `456136 + n * (3566 ±0) + v * (3566 ±0)` - // Minimum execution time: 527_896_000 picoseconds. - Weight::from_parts(533_325_000, 0) + // Minimum execution time: 518_819_000 picoseconds. + Weight::from_parts(522_108_000, 0) .saturating_add(Weight::from_parts(0, 456136)) - // Standard Error: 2_064_813 - .saturating_add(Weight::from_parts(68_484_503, 0).saturating_mul(v.into())) - // Standard Error: 205_747 - .saturating_add(Weight::from_parts(18_833_735, 0).saturating_mul(n.into())) + // Standard Error: 1_987_848 + .saturating_add(Weight::from_parts(64_855_377, 0).saturating_mul(v.into())) + // Standard Error: 198_078 + .saturating_add(Weight::from_parts(18_343_485, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(184)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) @@ -671,13 +645,13 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3108 + n * (907 ±0) + v * (391 ±0)` // Estimated: `456136 + n * (3566 ±0) + v * (3566 ±0)` - // Minimum execution time: 35_302_472_000 picoseconds. - Weight::from_parts(35_651_169_000, 0) + // Minimum execution time: 34_976_277_000 picoseconds. + Weight::from_parts(35_245_501_000, 0) .saturating_add(Weight::from_parts(0, 456136)) - // Standard Error: 412_098 - .saturating_add(Weight::from_parts(5_172_265, 0).saturating_mul(v.into())) - // Standard Error: 412_098 - .saturating_add(Weight::from_parts(4_142_772, 0).saturating_mul(n.into())) + // Standard Error: 386_461 + .saturating_add(Weight::from_parts(5_145_210, 0).saturating_mul(v.into())) + // Standard Error: 386_461 + .saturating_add(Weight::from_parts(3_762_623, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(179)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) @@ -694,11 +668,11 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `946 + v * (50 ±0)` // Estimated: `3510 + v * (2520 ±0)` - // Minimum execution time: 2_522_650_000 picoseconds. - Weight::from_parts(97_022_833, 0) + // Minimum execution time: 2_577_411_000 picoseconds. + Weight::from_parts(86_073_486, 0) .saturating_add(Weight::from_parts(0, 3510)) - // Standard Error: 6_751 - .saturating_add(Weight::from_parts(4_990_018, 0).saturating_mul(v.into())) + // Standard Error: 8_363 + .saturating_add(Weight::from_parts(5_074_828, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(v.into()))) .saturating_add(Weight::from_parts(0, 2520).saturating_mul(v.into())) @@ -719,8 +693,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_833_000 picoseconds. - Weight::from_parts(4_108_000, 0) + // Minimum execution time: 3_539_000 picoseconds. + Weight::from_parts(3_903_000, 0) .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(6)) } @@ -740,8 +714,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_520_000 picoseconds. - Weight::from_parts(3_686_000, 0) + // Minimum execution time: 3_244_000 picoseconds. + Weight::from_parts(3_450_000, 0) .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(6)) } @@ -769,8 +743,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1704` // Estimated: `6248` - // Minimum execution time: 63_983_000 picoseconds. - Weight::from_parts(66_140_000, 0) + // Minimum execution time: 62_606_000 picoseconds. + Weight::from_parts(64_678_000, 0) .saturating_add(Weight::from_parts(0, 6248)) .saturating_add(T::DbWeight::get().reads(11)) .saturating_add(T::DbWeight::get().writes(6)) @@ -783,8 +757,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `658` // Estimated: `3510` - // Minimum execution time: 11_830_000 picoseconds. - Weight::from_parts(12_210_000, 0) + // Minimum execution time: 11_490_000 picoseconds. + Weight::from_parts(11_867_000, 0) .saturating_add(Weight::from_parts(0, 3510)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -795,8 +769,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_364_000 picoseconds. - Weight::from_parts(2_555_000, 0) + // Minimum execution time: 2_125_000 picoseconds. + Weight::from_parts(2_337_000, 0) .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/substrate/frame/staking/src/benchmarking.rs b/substrate/frame/staking/src/benchmarking.rs index 05c6bc39709..6f60c4909f4 100644 --- a/substrate/frame/staking/src/benchmarking.rs +++ b/substrate/frame/staking/src/benchmarking.rs @@ -464,16 +464,28 @@ benchmarks! { } set_payee { - let (stash, controller) = create_stash_controller::(USER_SEED, 100, Default::default())?; + let (stash, controller) = create_stash_controller::(USER_SEED, 100, RewardDestination::Staked)?; assert_eq!(Payee::::get(&stash), RewardDestination::Staked); whitelist_account!(controller); - }: _(RawOrigin::Signed(controller), RewardDestination::Controller) + }: _(RawOrigin::Signed(controller.clone()), RewardDestination::Account(controller.clone())) verify { - assert_eq!(Payee::::get(&stash), RewardDestination::Controller); + assert_eq!(Payee::::get(&stash), RewardDestination::Account(controller)); + } + + update_payee { + let (stash, controller) = create_stash_controller::(USER_SEED, 100, RewardDestination::Staked)?; + Payee::::insert(&stash, { + #[allow(deprecated)] + RewardDestination::Controller + }); + whitelist_account!(controller); + }: _(RawOrigin::Signed(controller.clone()), controller.clone()) + verify { + assert_eq!(Payee::::get(&stash), RewardDestination::Account(controller)); } set_controller { - let (stash, ctlr) = create_unique_stash_controller::(9000, 100, Default::default(), false)?; + let (stash, ctlr) = create_unique_stash_controller::(9000, 100, RewardDestination::Staked, false)?; // ensure `ctlr` is the currently stored controller. assert!(!Ledger::::contains_key(&stash)); assert!(Ledger::::contains_key(&ctlr)); @@ -551,40 +563,6 @@ benchmarks! { assert_eq!(UnappliedSlashes::::get(&era).len(), (MAX_SLASHES - s) as usize); } - payout_stakers_dead_controller { - let n in 0 .. T::MaxExposurePageSize::get() as u32; - let (validator, nominators) = create_validator_with_nominators::( - n, - T::MaxExposurePageSize::get() as u32, - true, - true, - RewardDestination::Controller, - )?; - - let current_era = CurrentEra::::get().unwrap(); - // set the commission for this particular era as well. - >::insert(current_era, validator.clone(), >::validators(&validator)); - - let caller = whitelisted_caller(); - let validator_controller = >::get(&validator).unwrap(); - let balance_before = T::Currency::free_balance(&validator_controller); - for (_, controller) in &nominators { - let balance = T::Currency::free_balance(controller); - ensure!(balance.is_zero(), "Controller has balance, but should be dead."); - } - }: payout_stakers_by_page(RawOrigin::Signed(caller), validator, current_era, 0) - verify { - let balance_after = T::Currency::free_balance(&validator_controller); - ensure!( - balance_before < balance_after, - "Balance of validator controller should have increased after payout.", - ); - for (_, controller) in &nominators { - let balance = T::Currency::free_balance(controller); - ensure!(!balance.is_zero(), "Payout not given to controller."); - } - } - payout_stakers_alive_staked { let n in 0 .. T::MaxExposurePageSize::get() as u32; let (validator, nominators) = create_validator_with_nominators::( diff --git a/substrate/frame/staking/src/lib.rs b/substrate/frame/staking/src/lib.rs index 9e4697e845b..2cfee38ab4f 100644 --- a/substrate/frame/staking/src/lib.rs +++ b/substrate/frame/staking/src/lib.rs @@ -240,9 +240,9 @@ //! [`Payee`] storage item (see //! [`set_payee`](Call::set_payee)), to be one of the following: //! -//! - Controller account, (obviously) not increasing the staked value. //! - Stash account, not increasing the staked value. //! - Stash account, also increasing the staked value. +//! - Any other account, sent as free balance. //! //! ### Additional Fund Management Operations //! @@ -404,7 +404,9 @@ pub enum RewardDestination { Staked, /// Pay into the stash account, not increasing the amount at stake. Stash, - /// Pay into the controller account. + #[deprecated( + note = "`Controller` will be removed after January 2024. Use `Account(controller)` instead. This variant now behaves the same as `Stash` variant." + )] Controller, /// Pay into a specified account. Account(AccountId), diff --git a/substrate/frame/staking/src/mock.rs b/substrate/frame/staking/src/mock.rs index d2afd8f26e2..364d125792b 100644 --- a/substrate/frame/staking/src/mock.rs +++ b/substrate/frame/staking/src/mock.rs @@ -594,7 +594,7 @@ pub(crate) fn current_era() -> EraIndex { pub(crate) fn bond(who: AccountId, val: Balance) { let _ = Balances::make_free_balance_be(&who, val); - assert_ok!(Staking::bond(RuntimeOrigin::signed(who), val, RewardDestination::Controller)); + assert_ok!(Staking::bond(RuntimeOrigin::signed(who), val, RewardDestination::Stash)); } pub(crate) fn bond_validator(who: AccountId, val: Balance) { diff --git a/substrate/frame/staking/src/pallet/impls.rs b/substrate/frame/staking/src/pallet/impls.rs index 40f30735258..6ea8e4c9d3b 100644 --- a/substrate/frame/staking/src/pallet/impls.rs +++ b/substrate/frame/staking/src/pallet/impls.rs @@ -338,9 +338,8 @@ impl Pallet { let dest = Self::payee(StakingAccount::Stash(stash.clone())); let maybe_imbalance = match dest { - RewardDestination::Controller => Self::bonded(stash) - .map(|controller| T::Currency::deposit_creating(&controller, amount)), - RewardDestination::Stash => T::Currency::deposit_into_existing(stash, amount).ok(), + RewardDestination::Stash => + T::Currency::deposit_into_existing(stash, amount).ok(), RewardDestination::Staked => Self::ledger(Stash(stash.clone())) .and_then(|mut ledger| { ledger.active += amount; @@ -357,6 +356,14 @@ impl Pallet { RewardDestination::Account(dest_account) => Some(T::Currency::deposit_creating(&dest_account, amount)), RewardDestination::None => None, + #[allow(deprecated)] + RewardDestination::Controller => Self::bonded(stash) + .map(|controller| { + defensive!("Paying out controller as reward destination which is deprecated and should be migrated"); + // This should never happen once payees with a `Controller` variant have been migrated. + // But if it does, just pay the controller account. + T::Currency::deposit_creating(&controller, amount) + }), }; maybe_imbalance .map(|imbalance| (imbalance, Self::payee(StakingAccount::Stash(stash.clone())))) diff --git a/substrate/frame/staking/src/pallet/mod.rs b/substrate/frame/staking/src/pallet/mod.rs index 18ad3e4a6cf..a68e9c90da9 100644 --- a/substrate/frame/staking/src/pallet/mod.rs +++ b/substrate/frame/staking/src/pallet/mod.rs @@ -842,6 +842,8 @@ pub mod pallet { CommissionTooLow, /// Some bound is not met. BoundNotMet, + /// Used when attempting to use deprecated controller account logic. + ControllerDeprecated, } #[pallet::hooks] @@ -1283,10 +1285,19 @@ pub mod pallet { payee: RewardDestination, ) -> DispatchResult { let controller = ensure_signed(origin)?; - let ledger = Self::ledger(Controller(controller))?; + let ledger = Self::ledger(Controller(controller.clone()))?; + + ensure!( + (payee != { + #[allow(deprecated)] + RewardDestination::Controller + }), + Error::::ControllerDeprecated + ); + let _ = ledger .set_payee(payee) - .defensive_proof("ledger was retrieved from storage, thus its bonded; qed."); + .defensive_proof("ledger was retrieved from storage, thus its bonded; qed.")?; Ok(()) } @@ -1872,6 +1883,36 @@ pub mod pallet { ensure_signed(origin)?; Self::do_payout_stakers_by_page(validator_stash, era, page) } + + /// Migrates an account's `RewardDestination::Controller` to + /// `RewardDestination::Account(controller)`. + /// + /// Effects will be felt instantly (as soon as this function is completed successfully). + /// + /// This will waive the transaction fee if the `payee` is successfully migrated. + #[pallet::call_index(27)] + #[pallet::weight(T::WeightInfo::update_payee())] + pub fn update_payee( + origin: OriginFor, + controller: T::AccountId, + ) -> DispatchResultWithPostInfo { + let _ = ensure_signed(origin)?; + let ledger = Self::ledger(StakingAccount::Controller(controller.clone()))?; + + ensure!( + (Payee::::get(&ledger.stash) == { + #[allow(deprecated)] + RewardDestination::Controller + }), + Error::::NotController + ); + + let _ = ledger + .set_payee(RewardDestination::Account(controller)) + .defensive_proof("ledger should have been previously retrieved from storage.")?; + + Ok(Pays::No.into()) + } } } diff --git a/substrate/frame/staking/src/tests.rs b/substrate/frame/staking/src/tests.rs index bac2530b19b..7d967609f52 100644 --- a/substrate/frame/staking/src/tests.rs +++ b/substrate/frame/staking/src/tests.rs @@ -298,9 +298,9 @@ fn rewards_should_work() { let init_balance_101 = Balances::total_balance(&101); // Set payees - Payee::::insert(11, RewardDestination::Controller); - Payee::::insert(21, RewardDestination::Controller); - Payee::::insert(101, RewardDestination::Controller); + Payee::::insert(11, RewardDestination::Account(11)); + Payee::::insert(21, RewardDestination::Account(21)); + Payee::::insert(101, RewardDestination::Account(101)); Pallet::::reward_by_ids(vec![(11, 50)]); Pallet::::reward_by_ids(vec![(11, 50)]); @@ -417,7 +417,7 @@ fn staking_should_work() { // --- Block 2: start_session(2); // add a new candidate for being a validator. account 3 controlled by 4. - assert_ok!(Staking::bond(RuntimeOrigin::signed(3), 1500, RewardDestination::Controller)); + assert_ok!(Staking::bond(RuntimeOrigin::signed(3), 1500, RewardDestination::Account(3))); assert_ok!(Staking::validate(RuntimeOrigin::signed(3), ValidatorPrefs::default())); assert_ok!(Session::set_keys( RuntimeOrigin::signed(3), @@ -585,22 +585,10 @@ fn nominating_and_rewards_should_work() { assert_ok!(Staking::validate(RuntimeOrigin::signed(31), Default::default())); // Set payee to controller. - assert_ok!(Staking::set_payee( - RuntimeOrigin::signed(11), - RewardDestination::Controller - )); - assert_ok!(Staking::set_payee( - RuntimeOrigin::signed(21), - RewardDestination::Controller - )); - assert_ok!(Staking::set_payee( - RuntimeOrigin::signed(31), - RewardDestination::Controller - )); - assert_ok!(Staking::set_payee( - RuntimeOrigin::signed(41), - RewardDestination::Controller - )); + assert_ok!(Staking::set_payee(RuntimeOrigin::signed(11), RewardDestination::Stash)); + assert_ok!(Staking::set_payee(RuntimeOrigin::signed(21), RewardDestination::Stash)); + assert_ok!(Staking::set_payee(RuntimeOrigin::signed(31), RewardDestination::Stash)); + assert_ok!(Staking::set_payee(RuntimeOrigin::signed(41), RewardDestination::Stash)); // give the man some money let initial_balance = 1000; @@ -612,14 +600,14 @@ fn nominating_and_rewards_should_work() { assert_ok!(Staking::bond( RuntimeOrigin::signed(1), 1000, - RewardDestination::Controller + RewardDestination::Account(1) )); assert_ok!(Staking::nominate(RuntimeOrigin::signed(1), vec![11, 21, 31])); assert_ok!(Staking::bond( RuntimeOrigin::signed(3), 1000, - RewardDestination::Controller + RewardDestination::Account(3) )); assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![11, 21, 41])); @@ -1116,8 +1104,8 @@ fn reward_destination_works() { // (era 1, page 0) is claimed assert_eq!(Staking::claimed_rewards(1, &11), vec![0]); - // Change RewardDestination to Controller - >::insert(&11, RewardDestination::Controller); + // Change RewardDestination to Account + >::insert(&11, RewardDestination::Account(11)); // Check controller balance assert_eq!(Balances::free_balance(11), 23150); @@ -1129,8 +1117,8 @@ fn reward_destination_works() { mock::start_active_era(3); mock::make_all_reward_payment(2); - // Check that RewardDestination is Controller - assert_eq!(Staking::payee(11.into()), RewardDestination::Controller); + // Check that RewardDestination is Account(11) + assert_eq!(Staking::payee(11.into()), RewardDestination::Account(11)); // Check that reward went to the controller account assert_eq!(Balances::free_balance(11), recorded_stash_balance + total_payout_2); // Check that amount at stake is NOT increased @@ -1159,9 +1147,9 @@ fn validator_payment_prefs_work() { let commission = Perbill::from_percent(40); >::insert(&11, ValidatorPrefs { commission, ..Default::default() }); - // Reward controller so staked ratio doesn't change. - >::insert(&11, RewardDestination::Controller); - >::insert(&101, RewardDestination::Controller); + // Reward stash so staked ratio doesn't change. + >::insert(&11, RewardDestination::Stash); + >::insert(&101, RewardDestination::Stash); mock::start_active_era(1); mock::make_all_reward_payment(0); @@ -1250,8 +1238,8 @@ fn bond_extra_and_withdraw_unbonded_works() { // * it can unbond a portion of its funds from the stash account. // * Once the unbonding period is done, it can actually take the funds out of the stash. ExtBuilder::default().nominate(false).build_and_execute(|| { - // Set payee to controller. avoids confusion - assert_ok!(Staking::set_payee(RuntimeOrigin::signed(11), RewardDestination::Controller)); + // Set payee to stash. + assert_ok!(Staking::set_payee(RuntimeOrigin::signed(11), RewardDestination::Stash)); // Give account 11 some large free balance greater than total let _ = Balances::make_free_balance_be(&11, 1000000); @@ -1461,8 +1449,8 @@ fn rebond_works() { // * it can unbond a portion of its funds from the stash account. // * it can re-bond a portion of the funds scheduled to unlock. ExtBuilder::default().nominate(false).build_and_execute(|| { - // Set payee to controller. avoids confusion - assert_ok!(Staking::set_payee(RuntimeOrigin::signed(11), RewardDestination::Controller)); + // Set payee to stash. + assert_ok!(Staking::set_payee(RuntimeOrigin::signed(11), RewardDestination::Stash)); // Give account 11 some large free balance greater than total let _ = Balances::make_free_balance_be(&11, 1000000); @@ -1587,8 +1575,8 @@ fn rebond_works() { fn rebond_is_fifo() { // Rebond should proceed by reversing the most recent bond operations. ExtBuilder::default().nominate(false).build_and_execute(|| { - // Set payee to controller. avoids confusion - assert_ok!(Staking::set_payee(RuntimeOrigin::signed(11), RewardDestination::Controller)); + // Set payee to stash. + assert_ok!(Staking::set_payee(RuntimeOrigin::signed(11), RewardDestination::Stash)); // Give account 11 some large free balance greater than total let _ = Balances::make_free_balance_be(&11, 1000000); @@ -1683,8 +1671,8 @@ fn rebond_emits_right_value_in_event() { // When a user calls rebond with more than can be rebonded, things succeed, // and the rebond event emits the actual value rebonded. ExtBuilder::default().nominate(false).build_and_execute(|| { - // Set payee to controller. avoids confusion - assert_ok!(Staking::set_payee(RuntimeOrigin::signed(11), RewardDestination::Controller)); + // Set payee to stash. + assert_ok!(Staking::set_payee(RuntimeOrigin::signed(11), RewardDestination::Stash)); // Give account 11 some large free balance greater than total let _ = Balances::make_free_balance_be(&11, 1000000); @@ -1836,10 +1824,7 @@ fn switching_roles() { ExtBuilder::default().nominate(false).build_and_execute(|| { // Reset reward destination for i in &[11, 21] { - assert_ok!(Staking::set_payee( - RuntimeOrigin::signed(*i), - RewardDestination::Controller - )); + assert_ok!(Staking::set_payee(RuntimeOrigin::signed(*i), RewardDestination::Stash)); } assert_eq_uvec!(validator_controllers(), vec![21, 11]); @@ -1850,14 +1835,14 @@ fn switching_roles() { } // add 2 nominators - assert_ok!(Staking::bond(RuntimeOrigin::signed(1), 2000, RewardDestination::Controller)); + assert_ok!(Staking::bond(RuntimeOrigin::signed(1), 2000, RewardDestination::Account(1))); assert_ok!(Staking::nominate(RuntimeOrigin::signed(1), vec![11, 5])); - assert_ok!(Staking::bond(RuntimeOrigin::signed(3), 500, RewardDestination::Controller)); + assert_ok!(Staking::bond(RuntimeOrigin::signed(3), 500, RewardDestination::Account(3))); assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![21, 1])); // add a new validator candidate - assert_ok!(Staking::bond(RuntimeOrigin::signed(5), 1000, RewardDestination::Controller)); + assert_ok!(Staking::bond(RuntimeOrigin::signed(5), 1000, RewardDestination::Account(5))); assert_ok!(Staking::validate(RuntimeOrigin::signed(5), ValidatorPrefs::default())); assert_ok!(Session::set_keys( RuntimeOrigin::signed(5), @@ -1928,11 +1913,11 @@ fn bond_with_no_staked_value() { .build_and_execute(|| { // Can't bond with 1 assert_noop!( - Staking::bond(RuntimeOrigin::signed(1), 1, RewardDestination::Controller), + Staking::bond(RuntimeOrigin::signed(1), 1, RewardDestination::Account(1)), Error::::InsufficientBond, ); // bonded with absolute minimum value possible. - assert_ok!(Staking::bond(RuntimeOrigin::signed(1), 5, RewardDestination::Controller)); + assert_ok!(Staking::bond(RuntimeOrigin::signed(1), 5, RewardDestination::Account(1))); assert_eq!(Balances::locks(&1)[0].amount, 5); // unbonding even 1 will cause all to be unbonded. @@ -1974,15 +1959,12 @@ fn bond_with_little_staked_value_bounded() { .build_and_execute(|| { // setup assert_ok!(Staking::chill(RuntimeOrigin::signed(31))); - assert_ok!(Staking::set_payee( - RuntimeOrigin::signed(11), - RewardDestination::Controller - )); + assert_ok!(Staking::set_payee(RuntimeOrigin::signed(11), RewardDestination::Stash)); let init_balance_1 = Balances::free_balance(&1); let init_balance_11 = Balances::free_balance(&11); // Stingy validator. - assert_ok!(Staking::bond(RuntimeOrigin::signed(1), 1, RewardDestination::Controller)); + assert_ok!(Staking::bond(RuntimeOrigin::signed(1), 1, RewardDestination::Account(1))); assert_ok!(Staking::validate(RuntimeOrigin::signed(1), ValidatorPrefs::default())); assert_ok!(Session::set_keys( RuntimeOrigin::signed(1), @@ -2061,14 +2043,14 @@ fn bond_with_duplicate_vote_should_be_ignored_by_election_provider() { assert_ok!(Staking::bond( RuntimeOrigin::signed(1), 1000, - RewardDestination::Controller + RewardDestination::Account(1) )); assert_ok!(Staking::nominate(RuntimeOrigin::signed(1), vec![11, 11, 11, 21, 31])); assert_ok!(Staking::bond( RuntimeOrigin::signed(3), 1000, - RewardDestination::Controller + RewardDestination::Account(3) )); assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![21, 31])); @@ -2114,14 +2096,14 @@ fn bond_with_duplicate_vote_should_be_ignored_by_election_provider_elected() { assert_ok!(Staking::bond( RuntimeOrigin::signed(1), 1000, - RewardDestination::Controller + RewardDestination::Account(1) )); assert_ok!(Staking::nominate(RuntimeOrigin::signed(1), vec![11, 11, 11, 21])); assert_ok!(Staking::bond( RuntimeOrigin::signed(3), 1000, - RewardDestination::Controller + RewardDestination::Account(3) )); assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![21])); @@ -3530,8 +3512,8 @@ fn claim_reward_at_the_last_era_and_no_double_claim_and_invalid_claim() { let part_for_101 = Perbill::from_rational::(125, 1125); // Check state - Payee::::insert(11, RewardDestination::Controller); - Payee::::insert(101, RewardDestination::Controller); + Payee::::insert(11, RewardDestination::Account(11)); + Payee::::insert(101, RewardDestination::Account(101)); Pallet::::reward_by_ids(vec![(11, 1)]); // Compute total payout now for whole duration as other parameter won't change @@ -3820,8 +3802,8 @@ fn test_multi_page_payout_stakers_by_page() { staking_events_since_last_call().as_slice(), &[ .., - Event::Rewarded { stash: 1063, dest: RewardDestination::Controller, amount: 111 }, - Event::Rewarded { stash: 1064, dest: RewardDestination::Controller, amount: 111 }, + Event::Rewarded { stash: 1063, dest: RewardDestination::Stash, amount: 111 }, + Event::Rewarded { stash: 1064, dest: RewardDestination::Stash, amount: 111 }, ] )); @@ -3843,8 +3825,8 @@ fn test_multi_page_payout_stakers_by_page() { events.as_slice(), &[ Event::PayoutStarted { era_index: 1, validator_stash: 11 }, - Event::Rewarded { stash: 1065, dest: RewardDestination::Controller, amount: 111 }, - Event::Rewarded { stash: 1066, dest: RewardDestination::Controller, amount: 111 }, + Event::Rewarded { stash: 1065, dest: RewardDestination::Stash, amount: 111 }, + Event::Rewarded { stash: 1066, dest: RewardDestination::Stash, amount: 111 }, .. ] )); @@ -4685,40 +4667,6 @@ fn offences_weight_calculated_correctly() { }); } -#[test] -fn payout_creates_controller() { - ExtBuilder::default().has_stakers(false).build_and_execute(|| { - let balance = 1000; - // Create a validator: - bond_validator(11, balance); - - // create a stash/controller pair and nominate - let (stash, controller) = testing_utils::create_unique_stash_controller::( - 0, - 100, - RewardDestination::Controller, - false, - ) - .unwrap(); - - assert_ok!(Staking::nominate(RuntimeOrigin::signed(controller), vec![11])); - - // kill controller - assert_ok!(Balances::transfer_allow_death(RuntimeOrigin::signed(controller), stash, 100)); - assert_eq!(Balances::free_balance(controller), 0); - - mock::start_active_era(1); - Staking::reward_by_ids(vec![(11, 1)]); - // compute and ensure the reward amount is greater than zero. - let _ = current_total_payout_for_duration(reward_time_per_era()); - mock::start_active_era(2); - assert_ok!(Staking::payout_stakers_by_page(RuntimeOrigin::signed(1337), 11, 1, 0)); - - // Controller is created - assert!(Balances::free_balance(controller) > 0); - }) -} - #[test] fn payout_to_any_account_works() { ExtBuilder::default().has_stakers(false).build_and_execute(|| { @@ -5462,7 +5410,7 @@ fn min_bond_checks_work() { .min_validator_bond(1_500) .build_and_execute(|| { // 500 is not enough for any role - assert_ok!(Staking::bond(RuntimeOrigin::signed(3), 500, RewardDestination::Controller)); + assert_ok!(Staking::bond(RuntimeOrigin::signed(3), 500, RewardDestination::Stash)); assert_noop!( Staking::nominate(RuntimeOrigin::signed(3), vec![1]), Error::::InsufficientBond @@ -5524,19 +5472,11 @@ fn chill_other_works() { Balances::make_free_balance_be(&c, 100_000); // Nominator - assert_ok!(Staking::bond( - RuntimeOrigin::signed(a), - 1000, - RewardDestination::Controller - )); + assert_ok!(Staking::bond(RuntimeOrigin::signed(a), 1000, RewardDestination::Stash)); assert_ok!(Staking::nominate(RuntimeOrigin::signed(a), vec![1])); // Validator - assert_ok!(Staking::bond( - RuntimeOrigin::signed(b), - 1500, - RewardDestination::Controller - )); + assert_ok!(Staking::bond(RuntimeOrigin::signed(b), 1500, RewardDestination::Stash)); assert_ok!(Staking::validate(RuntimeOrigin::signed(b), ValidatorPrefs::default())); } @@ -5683,7 +5623,7 @@ fn capped_stakers_works() { let (_, controller) = testing_utils::create_stash_controller::( i + 10_000_000, 100, - RewardDestination::Controller, + RewardDestination::Stash, ) .unwrap(); assert_ok!(Staking::validate( @@ -5694,12 +5634,9 @@ fn capped_stakers_works() { } // but no more - let (_, last_validator) = testing_utils::create_stash_controller::( - 1337, - 100, - RewardDestination::Controller, - ) - .unwrap(); + let (_, last_validator) = + testing_utils::create_stash_controller::(1337, 100, RewardDestination::Stash) + .unwrap(); assert_noop!( Staking::validate(RuntimeOrigin::signed(last_validator), ValidatorPrefs::default()), @@ -5712,7 +5649,7 @@ fn capped_stakers_works() { let (_, controller) = testing_utils::create_stash_controller::( i + 20_000_000, 100, - RewardDestination::Controller, + RewardDestination::Stash, ) .unwrap(); assert_ok!(Staking::nominate(RuntimeOrigin::signed(controller), vec![1])); @@ -5723,7 +5660,7 @@ fn capped_stakers_works() { let (_, last_nominator) = testing_utils::create_stash_controller::( 30_000_000, 100, - RewardDestination::Controller, + RewardDestination::Stash, ) .unwrap(); assert_noop!( @@ -6787,7 +6724,7 @@ mod ledger { assert_ok!(Staking::bond( RuntimeOrigin::signed(10), 100, - RewardDestination::Controller + RewardDestination::Account(10) )); assert_eq!(>::get(&10), Some(10)); @@ -6896,4 +6833,38 @@ mod ledger { >::remove(42); // ensures try-state checks pass. }) } + + #[test] + #[allow(deprecated)] + fn set_payee_errors_on_controller_destination() { + ExtBuilder::default().build_and_execute(|| { + Payee::::insert(11, RewardDestination::Staked); + assert_noop!( + Staking::set_payee(RuntimeOrigin::signed(11), RewardDestination::Controller), + Error::::ControllerDeprecated + ); + assert_eq!(Payee::::get(&11), RewardDestination::Staked); + }) + } + + #[test] + #[allow(deprecated)] + fn update_payee_migration_works() { + ExtBuilder::default().build_and_execute(|| { + // migrate a `Controller` variant to `Account` variant. + Payee::::insert(11, RewardDestination::Controller); + assert_eq!(Payee::::get(&11), RewardDestination::Controller); + assert_ok!(Staking::update_payee(RuntimeOrigin::signed(11), 11)); + assert_eq!(Payee::::get(&11), RewardDestination::Account(11)); + + // Do not migrate a variant if not `Controller`. + Payee::::insert(21, RewardDestination::Stash); + assert_eq!(Payee::::get(&21), RewardDestination::Stash); + assert_noop!( + Staking::update_payee(RuntimeOrigin::signed(11), 21), + Error::::NotController + ); + assert_eq!(Payee::::get(&21), RewardDestination::Stash); + }) + } } diff --git a/substrate/frame/staking/src/weights.rs b/substrate/frame/staking/src/weights.rs index ad6dbccde9f..ad9ca75a032 100644 --- a/substrate/frame/staking/src/weights.rs +++ b/substrate/frame/staking/src/weights.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_staking` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-10-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-11-17, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` //! WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` @@ -59,6 +59,7 @@ pub trait WeightInfo { fn nominate(n: u32, ) -> Weight; fn chill() -> Weight; fn set_payee() -> Weight; + fn update_payee() -> Weight; fn set_controller() -> Weight; fn set_validator_count() -> Weight; fn force_no_eras() -> Weight; @@ -67,7 +68,6 @@ pub trait WeightInfo { fn set_invulnerables(v: u32, ) -> Weight; fn force_unstake(s: u32, ) -> Weight; fn cancel_deferred_slash(s: u32, ) -> Weight; - fn payout_stakers_dead_controller(n: u32, ) -> Weight; fn payout_stakers_alive_staked(n: u32, ) -> Weight; fn rebond(l: u32, ) -> Weight; fn reap_stash(s: u32, ) -> Weight; @@ -98,8 +98,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `927` // Estimated: `4764` - // Minimum execution time: 42_811_000 picoseconds. - Weight::from_parts(44_465_000, 4764) + // Minimum execution time: 43_427_000 picoseconds. + Weight::from_parts(45_221_000, 4764) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -119,8 +119,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1990` // Estimated: `8877` - // Minimum execution time: 87_628_000 picoseconds. - Weight::from_parts(90_020_000, 8877) + // Minimum execution time: 87_100_000 picoseconds. + Weight::from_parts(90_599_000, 8877) .saturating_add(T::DbWeight::get().reads(9_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -146,8 +146,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2195` // Estimated: `8877` - // Minimum execution time: 91_655_000 picoseconds. - Weight::from_parts(94_146_000, 8877) + // Minimum execution time: 91_488_000 picoseconds. + Weight::from_parts(94_126_000, 8877) .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -166,10 +166,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1115` // Estimated: `4764` - // Minimum execution time: 42_953_000 picoseconds. - Weight::from_parts(44_648_505, 4764) - // Standard Error: 937 - .saturating_add(Weight::from_parts(51_090, 0).saturating_mul(s.into())) + // Minimum execution time: 42_713_000 picoseconds. + Weight::from_parts(44_530_499, 4764) + // Standard Error: 1_067 + .saturating_add(Weight::from_parts(51_411, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -206,10 +206,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2196 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 89_218_000 picoseconds. - Weight::from_parts(97_761_884, 6248) - // Standard Error: 3_888 - .saturating_add(Weight::from_parts(1_346_441, 0).saturating_mul(s.into())) + // Minimum execution time: 88_700_000 picoseconds. + Weight::from_parts(98_329_624, 6248) + // Standard Error: 4_477 + .saturating_add(Weight::from_parts(1_347_380, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(13_u64)) .saturating_add(T::DbWeight::get().writes(11_u64)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -241,8 +241,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1372` // Estimated: `4556` - // Minimum execution time: 51_200_000 picoseconds. - Weight::from_parts(53_403_000, 4556) + // Minimum execution time: 51_877_000 picoseconds. + Weight::from_parts(53_503_000, 4556) .saturating_add(T::DbWeight::get().reads(11_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -255,10 +255,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1280 + k * (569 ±0)` // Estimated: `4556 + k * (3033 ±0)` - // Minimum execution time: 28_963_000 picoseconds. - Weight::from_parts(29_884_371, 4556) - // Standard Error: 9_063 - .saturating_add(Weight::from_parts(6_532_967, 0).saturating_mul(k.into())) + // Minimum execution time: 29_604_000 picoseconds. + Weight::from_parts(31_726_296, 4556) + // Standard Error: 6_350 + .saturating_add(Weight::from_parts(6_416_846, 0).saturating_mul(k.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(k.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(k.into()))) @@ -291,10 +291,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1866 + n * (102 ±0)` // Estimated: `6248 + n * (2520 ±0)` - // Minimum execution time: 64_644_000 picoseconds. - Weight::from_parts(62_855_016, 6248) - // Standard Error: 17_528 - .saturating_add(Weight::from_parts(3_993_850, 0).saturating_mul(n.into())) + // Minimum execution time: 64_276_000 picoseconds. + Weight::from_parts(62_615_844, 6248) + // Standard Error: 14_914 + .saturating_add(Weight::from_parts(4_097_019, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(6_u64)) @@ -318,8 +318,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1650` // Estimated: `6248` - // Minimum execution time: 54_505_000 picoseconds. - Weight::from_parts(56_026_000, 6248) + // Minimum execution time: 55_064_000 picoseconds. + Weight::from_parts(56_566_000, 6248) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } @@ -333,11 +333,26 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `902` // Estimated: `4556` - // Minimum execution time: 16_639_000 picoseconds. - Weight::from_parts(17_342_000, 4556) + // Minimum execution time: 16_626_000 picoseconds. + Weight::from_parts(17_519_000, 4556) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } + /// Storage: `Staking::Ledger` (r:1 w:0) + /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) + /// Storage: `Staking::Payee` (r:1 w:1) + /// Proof: `Staking::Payee` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) + /// Storage: `Staking::Bonded` (r:1 w:0) + /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) + fn update_payee() -> Weight { + // Proof Size summary in bytes: + // Measured: `969` + // Estimated: `4556` + // Minimum execution time: 20_545_000 picoseconds. + Weight::from_parts(21_395_000, 4556) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } /// Storage: `Staking::Bonded` (r:1 w:1) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:2) @@ -346,8 +361,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `902` // Estimated: `4556` - // Minimum execution time: 20_334_000 picoseconds. - Weight::from_parts(21_067_000, 4556) + // Minimum execution time: 20_179_000 picoseconds. + Weight::from_parts(20_728_000, 4556) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -357,8 +372,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_680_000 picoseconds. - Weight::from_parts(2_774_000, 0) + // Minimum execution time: 2_594_000 picoseconds. + Weight::from_parts(2_777_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `Staking::ForceEra` (r:0 w:1) @@ -367,8 +382,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_613_000 picoseconds. - Weight::from_parts(8_922_000, 0) + // Minimum execution time: 8_302_000 picoseconds. + Weight::from_parts(8_741_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `Staking::ForceEra` (r:0 w:1) @@ -377,8 +392,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_657_000 picoseconds. - Weight::from_parts(9_020_000, 0) + // Minimum execution time: 8_504_000 picoseconds. + Weight::from_parts(8_774_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `Staking::ForceEra` (r:0 w:1) @@ -387,8 +402,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_600_000 picoseconds. - Weight::from_parts(9_157_000, 0) + // Minimum execution time: 8_474_000 picoseconds. + Weight::from_parts(8_740_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `Staking::Invulnerables` (r:0 w:1) @@ -398,10 +413,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_792_000 picoseconds. - Weight::from_parts(3_293_694, 0) - // Standard Error: 31 - .saturating_add(Weight::from_parts(10_668, 0).saturating_mul(v.into())) + // Minimum execution time: 2_732_000 picoseconds. + Weight::from_parts(3_360_048, 0) + // Standard Error: 34 + .saturating_add(Weight::from_parts(9_964, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `Staking::SlashingSpans` (r:1 w:1) @@ -437,10 +452,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2196 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 86_537_000 picoseconds. - Weight::from_parts(95_127_637, 6248) - // Standard Error: 3_902 - .saturating_add(Weight::from_parts(1_336_182, 0).saturating_mul(s.into())) + // Minimum execution time: 87_495_000 picoseconds. + Weight::from_parts(95_710_388, 6248) + // Standard Error: 5_849 + .saturating_add(Weight::from_parts(1_339_335, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(13_u64)) .saturating_add(T::DbWeight::get().writes(12_u64)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -453,54 +468,13 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `66672` // Estimated: `70137` - // Minimum execution time: 100_777_000 picoseconds. - Weight::from_parts(896_540_406, 70137) - // Standard Error: 57_788 - .saturating_add(Weight::from_parts(4_870_910, 0).saturating_mul(s.into())) + // Minimum execution time: 98_255_000 picoseconds. + Weight::from_parts(892_807_378, 70137) + // Standard Error: 57_735 + .saturating_add(Weight::from_parts(4_876_449, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: `Staking::CurrentEra` (r:1 w:0) - /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Staking::ErasStakersOverview` (r:1 w:0) - /// Proof: `Staking::ErasStakersOverview` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) - /// Storage: `Staking::ErasValidatorReward` (r:1 w:0) - /// Proof: `Staking::ErasValidatorReward` (`max_values`: None, `max_size`: Some(28), added: 2503, mode: `MaxEncodedLen`) - /// Storage: `Staking::Bonded` (r:257 w:0) - /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) - /// Storage: `Staking::Ledger` (r:1 w:1) - /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) - /// Storage: `Balances::Locks` (r:1 w:1) - /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) - /// Storage: `Balances::Freezes` (r:1 w:0) - /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:258 w:258) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Staking::ClaimedRewards` (r:1 w:1) - /// Proof: `Staking::ClaimedRewards` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Staking::ErasStakersPaged` (r:1 w:0) - /// Proof: `Staking::ErasStakersPaged` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Staking::ErasRewardPoints` (r:1 w:0) - /// Proof: `Staking::ErasRewardPoints` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Staking::ErasValidatorPrefs` (r:1 w:0) - /// Proof: `Staking::ErasValidatorPrefs` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) - /// Storage: `Staking::Payee` (r:257 w:0) - /// Proof: `Staking::Payee` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 256]`. - fn payout_stakers_dead_controller(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `21644 + n * (155 ±0)` - // Estimated: `21412 + n * (2603 ±0)` - // Minimum execution time: 133_129_000 picoseconds. - Weight::from_parts(190_983_630, 21412) - // Standard Error: 17_497 - .saturating_add(Weight::from_parts(24_723_153, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(14_u64)) - .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(n.into()))) - .saturating_add(T::DbWeight::get().writes(5_u64)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) - .saturating_add(Weight::from_parts(0, 2603).saturating_mul(n.into())) - } /// Storage: `Staking::Bonded` (r:257 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:257 w:257) @@ -534,10 +508,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `33297 + n * (377 ±0)` // Estimated: `30944 + n * (3774 ±3)` - // Minimum execution time: 149_773_000 picoseconds. - Weight::from_parts(151_527_124, 30944) - // Standard Error: 24_152 - .saturating_add(Weight::from_parts(46_124_074, 0).saturating_mul(n.into())) + // Minimum execution time: 144_258_000 picoseconds. + Weight::from_parts(175_256_796, 30944) + // Standard Error: 24_339 + .saturating_add(Weight::from_parts(46_011_700, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(14_u64)) .saturating_add(T::DbWeight::get().reads((6_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(4_u64)) @@ -561,10 +535,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1991 + l * (7 ±0)` // Estimated: `8877` - // Minimum execution time: 81_618_000 picoseconds. - Weight::from_parts(85_245_630, 8877) - // Standard Error: 5_049 - .saturating_add(Weight::from_parts(39_811, 0).saturating_mul(l.into())) + // Minimum execution time: 83_532_000 picoseconds. + Weight::from_parts(86_757_943, 8877) + // Standard Error: 6_379 + .saturating_add(Weight::from_parts(57_566, 0).saturating_mul(l.into())) .saturating_add(T::DbWeight::get().reads(9_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -599,10 +573,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2196 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 95_395_000 picoseconds. - Weight::from_parts(100_459_234, 6248) - // Standard Error: 3_781 - .saturating_add(Weight::from_parts(1_333_607, 0).saturating_mul(s.into())) + // Minimum execution time: 96_776_000 picoseconds. + Weight::from_parts(100_950_027, 6248) + // Standard Error: 4_719 + .saturating_add(Weight::from_parts(1_432_091, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().writes(11_u64)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -648,12 +622,12 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0 + n * (720 ±0) + v * (3598 ±0)` // Estimated: `512390 + n * (3566 ±0) + v * (3566 ±0)` - // Minimum execution time: 571_337_000 picoseconds. - Weight::from_parts(578_857_000, 512390) - // Standard Error: 2_090_511 - .saturating_add(Weight::from_parts(68_626_083, 0).saturating_mul(v.into())) - // Standard Error: 208_307 - .saturating_add(Weight::from_parts(18_645_374, 0).saturating_mul(n.into())) + // Minimum execution time: 577_699_000 picoseconds. + Weight::from_parts(582_827_000, 512390) + // Standard Error: 2_000_851 + .saturating_add(Weight::from_parts(67_316_744, 0).saturating_mul(v.into())) + // Standard Error: 199_373 + .saturating_add(Weight::from_parts(18_503_387, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(206_u64)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) @@ -684,12 +658,12 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `3175 + n * (911 ±0) + v * (395 ±0)` // Estimated: `512390 + n * (3566 ±0) + v * (3566 ±0)` - // Minimum execution time: 34_590_734_000 picoseconds. - Weight::from_parts(35_238_091_000, 512390) - // Standard Error: 427_974 - .saturating_add(Weight::from_parts(5_084_196, 0).saturating_mul(v.into())) - // Standard Error: 427_974 - .saturating_add(Weight::from_parts(4_503_420, 0).saturating_mul(n.into())) + // Minimum execution time: 34_048_778_000 picoseconds. + Weight::from_parts(34_397_777_000, 512390) + // Standard Error: 346_115 + .saturating_add(Weight::from_parts(3_704_941, 0).saturating_mul(v.into())) + // Standard Error: 346_115 + .saturating_add(Weight::from_parts(4_064_819, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(201_u64)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) @@ -706,10 +680,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `979 + v * (50 ±0)` // Estimated: `3510 + v * (2520 ±0)` - // Minimum execution time: 2_509_588_000 picoseconds. - Weight::from_parts(89_050_539, 3510) - // Standard Error: 11_803 - .saturating_add(Weight::from_parts(5_031_416, 0).saturating_mul(v.into())) + // Minimum execution time: 2_473_149_000 picoseconds. + Weight::from_parts(84_721_859, 3510) + // Standard Error: 8_690 + .saturating_add(Weight::from_parts(4_870_439, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(v.into()))) .saturating_add(Weight::from_parts(0, 2520).saturating_mul(v.into())) @@ -730,8 +704,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_347_000 picoseconds. - Weight::from_parts(5_562_000, 0) + // Minimum execution time: 5_312_000 picoseconds. + Weight::from_parts(5_897_000, 0) .saturating_add(T::DbWeight::get().writes(6_u64)) } /// Storage: `Staking::MinCommission` (r:0 w:1) @@ -750,8 +724,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_725_000 picoseconds. - Weight::from_parts(5_075_000, 0) + // Minimum execution time: 4_676_000 picoseconds. + Weight::from_parts(4_913_000, 0) .saturating_add(T::DbWeight::get().writes(6_u64)) } /// Storage: `Staking::Ledger` (r:1 w:0) @@ -778,8 +752,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1773` // Estimated: `6248` - // Minimum execution time: 67_204_000 picoseconds. - Weight::from_parts(69_197_000, 6248) + // Minimum execution time: 67_286_000 picoseconds. + Weight::from_parts(69_081_000, 6248) .saturating_add(T::DbWeight::get().reads(11_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } @@ -791,8 +765,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `691` // Estimated: `3510` - // Minimum execution time: 12_497_000 picoseconds. - Weight::from_parts(12_943_000, 3510) + // Minimum execution time: 12_749_000 picoseconds. + Weight::from_parts(13_275_000, 3510) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -802,8 +776,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_245_000 picoseconds. - Weight::from_parts(3_352_000, 0) + // Minimum execution time: 3_155_000 picoseconds. + Weight::from_parts(3_319_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } } @@ -824,8 +798,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `927` // Estimated: `4764` - // Minimum execution time: 42_811_000 picoseconds. - Weight::from_parts(44_465_000, 4764) + // Minimum execution time: 43_427_000 picoseconds. + Weight::from_parts(45_221_000, 4764) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } @@ -845,8 +819,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1990` // Estimated: `8877` - // Minimum execution time: 87_628_000 picoseconds. - Weight::from_parts(90_020_000, 8877) + // Minimum execution time: 87_100_000 picoseconds. + Weight::from_parts(90_599_000, 8877) .saturating_add(RocksDbWeight::get().reads(9_u64)) .saturating_add(RocksDbWeight::get().writes(7_u64)) } @@ -872,8 +846,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2195` // Estimated: `8877` - // Minimum execution time: 91_655_000 picoseconds. - Weight::from_parts(94_146_000, 8877) + // Minimum execution time: 91_488_000 picoseconds. + Weight::from_parts(94_126_000, 8877) .saturating_add(RocksDbWeight::get().reads(12_u64)) .saturating_add(RocksDbWeight::get().writes(7_u64)) } @@ -892,10 +866,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1115` // Estimated: `4764` - // Minimum execution time: 42_953_000 picoseconds. - Weight::from_parts(44_648_505, 4764) - // Standard Error: 937 - .saturating_add(Weight::from_parts(51_090, 0).saturating_mul(s.into())) + // Minimum execution time: 42_713_000 picoseconds. + Weight::from_parts(44_530_499, 4764) + // Standard Error: 1_067 + .saturating_add(Weight::from_parts(51_411, 0).saturating_mul(s.into())) .saturating_add(RocksDbWeight::get().reads(5_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -932,10 +906,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2196 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 89_218_000 picoseconds. - Weight::from_parts(97_761_884, 6248) - // Standard Error: 3_888 - .saturating_add(Weight::from_parts(1_346_441, 0).saturating_mul(s.into())) + // Minimum execution time: 88_700_000 picoseconds. + Weight::from_parts(98_329_624, 6248) + // Standard Error: 4_477 + .saturating_add(Weight::from_parts(1_347_380, 0).saturating_mul(s.into())) .saturating_add(RocksDbWeight::get().reads(13_u64)) .saturating_add(RocksDbWeight::get().writes(11_u64)) .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -967,8 +941,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1372` // Estimated: `4556` - // Minimum execution time: 51_200_000 picoseconds. - Weight::from_parts(53_403_000, 4556) + // Minimum execution time: 51_877_000 picoseconds. + Weight::from_parts(53_503_000, 4556) .saturating_add(RocksDbWeight::get().reads(11_u64)) .saturating_add(RocksDbWeight::get().writes(5_u64)) } @@ -981,10 +955,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1280 + k * (569 ±0)` // Estimated: `4556 + k * (3033 ±0)` - // Minimum execution time: 28_963_000 picoseconds. - Weight::from_parts(29_884_371, 4556) - // Standard Error: 9_063 - .saturating_add(Weight::from_parts(6_532_967, 0).saturating_mul(k.into())) + // Minimum execution time: 29_604_000 picoseconds. + Weight::from_parts(31_726_296, 4556) + // Standard Error: 6_350 + .saturating_add(Weight::from_parts(6_416_846, 0).saturating_mul(k.into())) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(k.into()))) .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(k.into()))) @@ -1017,10 +991,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1866 + n * (102 ±0)` // Estimated: `6248 + n * (2520 ±0)` - // Minimum execution time: 64_644_000 picoseconds. - Weight::from_parts(62_855_016, 6248) - // Standard Error: 17_528 - .saturating_add(Weight::from_parts(3_993_850, 0).saturating_mul(n.into())) + // Minimum execution time: 64_276_000 picoseconds. + Weight::from_parts(62_615_844, 6248) + // Standard Error: 14_914 + .saturating_add(Weight::from_parts(4_097_019, 0).saturating_mul(n.into())) .saturating_add(RocksDbWeight::get().reads(12_u64)) .saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(RocksDbWeight::get().writes(6_u64)) @@ -1044,8 +1018,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1650` // Estimated: `6248` - // Minimum execution time: 54_505_000 picoseconds. - Weight::from_parts(56_026_000, 6248) + // Minimum execution time: 55_064_000 picoseconds. + Weight::from_parts(56_566_000, 6248) .saturating_add(RocksDbWeight::get().reads(8_u64)) .saturating_add(RocksDbWeight::get().writes(6_u64)) } @@ -1059,11 +1033,26 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `902` // Estimated: `4556` - // Minimum execution time: 16_639_000 picoseconds. - Weight::from_parts(17_342_000, 4556) + // Minimum execution time: 16_626_000 picoseconds. + Weight::from_parts(17_519_000, 4556) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } + /// Storage: `Staking::Ledger` (r:1 w:0) + /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) + /// Storage: `Staking::Payee` (r:1 w:1) + /// Proof: `Staking::Payee` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) + /// Storage: `Staking::Bonded` (r:1 w:0) + /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) + fn update_payee() -> Weight { + // Proof Size summary in bytes: + // Measured: `969` + // Estimated: `4556` + // Minimum execution time: 20_545_000 picoseconds. + Weight::from_parts(21_395_000, 4556) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } /// Storage: `Staking::Bonded` (r:1 w:1) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:2) @@ -1072,8 +1061,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `902` // Estimated: `4556` - // Minimum execution time: 20_334_000 picoseconds. - Weight::from_parts(21_067_000, 4556) + // Minimum execution time: 20_179_000 picoseconds. + Weight::from_parts(20_728_000, 4556) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } @@ -1083,8 +1072,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_680_000 picoseconds. - Weight::from_parts(2_774_000, 0) + // Minimum execution time: 2_594_000 picoseconds. + Weight::from_parts(2_777_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `Staking::ForceEra` (r:0 w:1) @@ -1093,8 +1082,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_613_000 picoseconds. - Weight::from_parts(8_922_000, 0) + // Minimum execution time: 8_302_000 picoseconds. + Weight::from_parts(8_741_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `Staking::ForceEra` (r:0 w:1) @@ -1103,8 +1092,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_657_000 picoseconds. - Weight::from_parts(9_020_000, 0) + // Minimum execution time: 8_504_000 picoseconds. + Weight::from_parts(8_774_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `Staking::ForceEra` (r:0 w:1) @@ -1113,8 +1102,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_600_000 picoseconds. - Weight::from_parts(9_157_000, 0) + // Minimum execution time: 8_474_000 picoseconds. + Weight::from_parts(8_740_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `Staking::Invulnerables` (r:0 w:1) @@ -1124,10 +1113,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_792_000 picoseconds. - Weight::from_parts(3_293_694, 0) - // Standard Error: 31 - .saturating_add(Weight::from_parts(10_668, 0).saturating_mul(v.into())) + // Minimum execution time: 2_732_000 picoseconds. + Weight::from_parts(3_360_048, 0) + // Standard Error: 34 + .saturating_add(Weight::from_parts(9_964, 0).saturating_mul(v.into())) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `Staking::SlashingSpans` (r:1 w:1) @@ -1163,10 +1152,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2196 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 86_537_000 picoseconds. - Weight::from_parts(95_127_637, 6248) - // Standard Error: 3_902 - .saturating_add(Weight::from_parts(1_336_182, 0).saturating_mul(s.into())) + // Minimum execution time: 87_495_000 picoseconds. + Weight::from_parts(95_710_388, 6248) + // Standard Error: 5_849 + .saturating_add(Weight::from_parts(1_339_335, 0).saturating_mul(s.into())) .saturating_add(RocksDbWeight::get().reads(13_u64)) .saturating_add(RocksDbWeight::get().writes(12_u64)) .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -1179,54 +1168,13 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `66672` // Estimated: `70137` - // Minimum execution time: 100_777_000 picoseconds. - Weight::from_parts(896_540_406, 70137) - // Standard Error: 57_788 - .saturating_add(Weight::from_parts(4_870_910, 0).saturating_mul(s.into())) + // Minimum execution time: 98_255_000 picoseconds. + Weight::from_parts(892_807_378, 70137) + // Standard Error: 57_735 + .saturating_add(Weight::from_parts(4_876_449, 0).saturating_mul(s.into())) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: `Staking::CurrentEra` (r:1 w:0) - /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Staking::ErasStakersOverview` (r:1 w:0) - /// Proof: `Staking::ErasStakersOverview` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) - /// Storage: `Staking::ErasValidatorReward` (r:1 w:0) - /// Proof: `Staking::ErasValidatorReward` (`max_values`: None, `max_size`: Some(28), added: 2503, mode: `MaxEncodedLen`) - /// Storage: `Staking::Bonded` (r:257 w:0) - /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) - /// Storage: `Staking::Ledger` (r:1 w:1) - /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) - /// Storage: `Balances::Locks` (r:1 w:1) - /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) - /// Storage: `Balances::Freezes` (r:1 w:0) - /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:258 w:258) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Staking::ClaimedRewards` (r:1 w:1) - /// Proof: `Staking::ClaimedRewards` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Staking::ErasStakersPaged` (r:1 w:0) - /// Proof: `Staking::ErasStakersPaged` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Staking::ErasRewardPoints` (r:1 w:0) - /// Proof: `Staking::ErasRewardPoints` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Staking::ErasValidatorPrefs` (r:1 w:0) - /// Proof: `Staking::ErasValidatorPrefs` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) - /// Storage: `Staking::Payee` (r:257 w:0) - /// Proof: `Staking::Payee` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 256]`. - fn payout_stakers_dead_controller(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `21644 + n * (155 ±0)` - // Estimated: `21412 + n * (2603 ±0)` - // Minimum execution time: 133_129_000 picoseconds. - Weight::from_parts(190_983_630, 21412) - // Standard Error: 17_497 - .saturating_add(Weight::from_parts(24_723_153, 0).saturating_mul(n.into())) - .saturating_add(RocksDbWeight::get().reads(14_u64)) - .saturating_add(RocksDbWeight::get().reads((3_u64).saturating_mul(n.into()))) - .saturating_add(RocksDbWeight::get().writes(5_u64)) - .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(n.into()))) - .saturating_add(Weight::from_parts(0, 2603).saturating_mul(n.into())) - } /// Storage: `Staking::Bonded` (r:257 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:257 w:257) @@ -1260,10 +1208,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `33297 + n * (377 ±0)` // Estimated: `30944 + n * (3774 ±3)` - // Minimum execution time: 149_773_000 picoseconds. - Weight::from_parts(151_527_124, 30944) - // Standard Error: 24_152 - .saturating_add(Weight::from_parts(46_124_074, 0).saturating_mul(n.into())) + // Minimum execution time: 144_258_000 picoseconds. + Weight::from_parts(175_256_796, 30944) + // Standard Error: 24_339 + .saturating_add(Weight::from_parts(46_011_700, 0).saturating_mul(n.into())) .saturating_add(RocksDbWeight::get().reads(14_u64)) .saturating_add(RocksDbWeight::get().reads((6_u64).saturating_mul(n.into()))) .saturating_add(RocksDbWeight::get().writes(4_u64)) @@ -1287,10 +1235,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1991 + l * (7 ±0)` // Estimated: `8877` - // Minimum execution time: 81_618_000 picoseconds. - Weight::from_parts(85_245_630, 8877) - // Standard Error: 5_049 - .saturating_add(Weight::from_parts(39_811, 0).saturating_mul(l.into())) + // Minimum execution time: 83_532_000 picoseconds. + Weight::from_parts(86_757_943, 8877) + // Standard Error: 6_379 + .saturating_add(Weight::from_parts(57_566, 0).saturating_mul(l.into())) .saturating_add(RocksDbWeight::get().reads(9_u64)) .saturating_add(RocksDbWeight::get().writes(7_u64)) } @@ -1325,10 +1273,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2196 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 95_395_000 picoseconds. - Weight::from_parts(100_459_234, 6248) - // Standard Error: 3_781 - .saturating_add(Weight::from_parts(1_333_607, 0).saturating_mul(s.into())) + // Minimum execution time: 96_776_000 picoseconds. + Weight::from_parts(100_950_027, 6248) + // Standard Error: 4_719 + .saturating_add(Weight::from_parts(1_432_091, 0).saturating_mul(s.into())) .saturating_add(RocksDbWeight::get().reads(12_u64)) .saturating_add(RocksDbWeight::get().writes(11_u64)) .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -1374,12 +1322,12 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0 + n * (720 ±0) + v * (3598 ±0)` // Estimated: `512390 + n * (3566 ±0) + v * (3566 ±0)` - // Minimum execution time: 571_337_000 picoseconds. - Weight::from_parts(578_857_000, 512390) - // Standard Error: 2_090_511 - .saturating_add(Weight::from_parts(68_626_083, 0).saturating_mul(v.into())) - // Standard Error: 208_307 - .saturating_add(Weight::from_parts(18_645_374, 0).saturating_mul(n.into())) + // Minimum execution time: 577_699_000 picoseconds. + Weight::from_parts(582_827_000, 512390) + // Standard Error: 2_000_851 + .saturating_add(Weight::from_parts(67_316_744, 0).saturating_mul(v.into())) + // Standard Error: 199_373 + .saturating_add(Weight::from_parts(18_503_387, 0).saturating_mul(n.into())) .saturating_add(RocksDbWeight::get().reads(206_u64)) .saturating_add(RocksDbWeight::get().reads((5_u64).saturating_mul(v.into()))) .saturating_add(RocksDbWeight::get().reads((4_u64).saturating_mul(n.into()))) @@ -1410,12 +1358,12 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `3175 + n * (911 ±0) + v * (395 ±0)` // Estimated: `512390 + n * (3566 ±0) + v * (3566 ±0)` - // Minimum execution time: 34_590_734_000 picoseconds. - Weight::from_parts(35_238_091_000, 512390) - // Standard Error: 427_974 - .saturating_add(Weight::from_parts(5_084_196, 0).saturating_mul(v.into())) - // Standard Error: 427_974 - .saturating_add(Weight::from_parts(4_503_420, 0).saturating_mul(n.into())) + // Minimum execution time: 34_048_778_000 picoseconds. + Weight::from_parts(34_397_777_000, 512390) + // Standard Error: 346_115 + .saturating_add(Weight::from_parts(3_704_941, 0).saturating_mul(v.into())) + // Standard Error: 346_115 + .saturating_add(Weight::from_parts(4_064_819, 0).saturating_mul(n.into())) .saturating_add(RocksDbWeight::get().reads(201_u64)) .saturating_add(RocksDbWeight::get().reads((5_u64).saturating_mul(v.into()))) .saturating_add(RocksDbWeight::get().reads((4_u64).saturating_mul(n.into()))) @@ -1432,10 +1380,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `979 + v * (50 ±0)` // Estimated: `3510 + v * (2520 ±0)` - // Minimum execution time: 2_509_588_000 picoseconds. - Weight::from_parts(89_050_539, 3510) - // Standard Error: 11_803 - .saturating_add(Weight::from_parts(5_031_416, 0).saturating_mul(v.into())) + // Minimum execution time: 2_473_149_000 picoseconds. + Weight::from_parts(84_721_859, 3510) + // Standard Error: 8_690 + .saturating_add(Weight::from_parts(4_870_439, 0).saturating_mul(v.into())) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(v.into()))) .saturating_add(Weight::from_parts(0, 2520).saturating_mul(v.into())) @@ -1456,8 +1404,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_347_000 picoseconds. - Weight::from_parts(5_562_000, 0) + // Minimum execution time: 5_312_000 picoseconds. + Weight::from_parts(5_897_000, 0) .saturating_add(RocksDbWeight::get().writes(6_u64)) } /// Storage: `Staking::MinCommission` (r:0 w:1) @@ -1476,8 +1424,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_725_000 picoseconds. - Weight::from_parts(5_075_000, 0) + // Minimum execution time: 4_676_000 picoseconds. + Weight::from_parts(4_913_000, 0) .saturating_add(RocksDbWeight::get().writes(6_u64)) } /// Storage: `Staking::Ledger` (r:1 w:0) @@ -1504,8 +1452,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1773` // Estimated: `6248` - // Minimum execution time: 67_204_000 picoseconds. - Weight::from_parts(69_197_000, 6248) + // Minimum execution time: 67_286_000 picoseconds. + Weight::from_parts(69_081_000, 6248) .saturating_add(RocksDbWeight::get().reads(11_u64)) .saturating_add(RocksDbWeight::get().writes(6_u64)) } @@ -1517,8 +1465,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `691` // Estimated: `3510` - // Minimum execution time: 12_497_000 picoseconds. - Weight::from_parts(12_943_000, 3510) + // Minimum execution time: 12_749_000 picoseconds. + Weight::from_parts(13_275_000, 3510) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -1528,8 +1476,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_245_000 picoseconds. - Weight::from_parts(3_352_000, 0) + // Minimum execution time: 3_155_000 picoseconds. + Weight::from_parts(3_319_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } } -- GitLab From a9ba1e540ff524dda0dec8bb0b7da204e043adae Mon Sep 17 00:00:00 2001 From: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> Date: Wed, 22 Nov 2023 10:29:56 +0100 Subject: [PATCH 035/102] Revert docker images tag naming to (#2434) Docker images from paritypr are also used in testnets. PR reverts docker tags naming to a more convenient. cc @PierreBesson --- .gitlab-ci.yml | 2 +- .gitlab/pipeline/publish.yml | 201 +---------------------------------- 2 files changed, 5 insertions(+), 198 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e698aba81d5..f7e54961fa9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -30,7 +30,7 @@ variables: RUSTY_CACHIER_COMPRESSION_METHOD: zstd NEXTEST_FAILURE_OUTPUT: immediate-final NEXTEST_SUCCESS_OUTPUT: final - DOCKER_IMAGES_VERSION: "${CI_COMMIT_SHA}" + DOCKER_IMAGES_VERSION: "${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" default: retry: diff --git a/.gitlab/pipeline/publish.yml b/.gitlab/pipeline/publish.yml index 3cc2002cc1c..92ebc9eea1f 100644 --- a/.gitlab/pipeline/publish.yml +++ b/.gitlab/pipeline/publish.yml @@ -63,16 +63,16 @@ publish-rustdoc: after_script: - rm -rf .git/ ./* -# cumulus - +# note: images are used not only in zombienet but also in rococo, wococo and versi .build-push-image: image: $BUILDAH_IMAGE variables: DOCKERFILE: "" # docker/path-to.Dockerfile IMAGE_NAME: "" # docker.io/paritypr/image_name script: - # Exit if the job is not running in a merge queue - # - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi + # Dockertag should differ in a merge queue + # TODO: test this + # - if [[ $CI_COMMIT_REF_NAME == *"gh-readonly-queue"* ]]; export DOCKER_IMAGES_VERSION="${CI_COMMIT_SHORT_SHA}"; fi - $BUILDAH_COMMAND build --format=docker --build-arg VCS_REF="${CI_COMMIT_SHA}" @@ -112,59 +112,6 @@ build-push-image-test-parachain: variables: DOCKERFILE: "docker/dockerfiles/test-parachain_injected.Dockerfile" IMAGE_NAME: "docker.io/paritypr/test-parachain" -# publish-s3: -# stage: publish -# extends: -# - .kubernetes-env -# - .publish-refs -# image: paritytech/awscli:latest -# needs: -# - job: build-linux-stable-cumulus -# 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-assets" -# script: -# - 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 -# variables: -# GIT_STRATEGY: none -# BUCKET: "releases.parity.io" -# PREFIX: "cumulus/$CI_COMMIT_REF_NAME/benchmarks-collectives" -# needs: -# - job: benchmarks-collectives -# artifacts: true - -### Polkadot build-push-image-polkadot-debug: stage: publish @@ -217,143 +164,3 @@ build-push-image-substrate-pr: variables: DOCKERFILE: "docker/dockerfiles/substrate_injected.Dockerfile" IMAGE_NAME: "docker.io/paritypr/substrate" -# old way - -# .build-push-image-polkadot: -# before_script: -# # - test -s ./artifacts/VERSION || exit 1 -# # - test -s ./artifacts/EXTRATAG || exit 1 -# - VERSION="$(cat ./artifacts/VERSION)" -# - EXTRATAG="$(cat ./artifacts/EXTRATAG)" -# - echo "Polkadot version = ${VERSION} (EXTRATAG = ${EXTRATAG})" -# script: -# # - test "$DOCKER_USER" -a "$DOCKER_PASS" || -# # ( echo "no docker credentials provided"; exit 1 ) -# - cd ./artifacts -# - $BUILDAH_COMMAND build -# --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" -# --tag "$IMAGE_NAME:$EXTRATAG" -# --file ${DOCKERFILE} . -# # The job will success only on the protected branch -# # - echo "$DOCKER_PASS" | -# # buildah login --username "$DOCKER_USER" --password-stdin docker.io -# # - $BUILDAH_COMMAND info -# # - $BUILDAH_COMMAND push --format=v2s2 "$IMAGE_NAME:$VERSION" -# # - $BUILDAH_COMMAND push --format=v2s2 "$IMAGE_NAME:$EXTRATAG" -# after_script: -# - buildah logout --all - -# publish-polkadot-debug-image: -# stage: publish -# image: ${BUILDAH_IMAGE} -# extends: -# - .kubernetes-env -# - .build-push-image-polkadot -# rules: -# - if: $CI_PIPELINE_SOURCE == "web" -# - if: $CI_PIPELINE_SOURCE == "schedule" -# - if: $CI_COMMIT_REF_NAME == "master" -# - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs -# - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1 -# variables: -# GIT_STRATEGY: none -# DOCKER_USER: ${PARITYPR_USER} -# DOCKER_PASS: ${PARITYPR_PASS} -# # docker/dockerfiles/polkadot/polkadot_injected_debug.Dockerfile -# DOCKERFILE: polkadot_injected_debug.Dockerfile -# IMAGE_NAME: docker.io/paritypr/polkadot-debug -# needs: -# - job: build-linux-stable -# artifacts: true -# after_script: -# # pass artifacts to the zombienet-tests job -# # https://docs.gitlab.com/ee/ci/multi_project_pipelines.html#with-variable-inheritance -# - echo "PARACHAINS_IMAGE_NAME=${IMAGE_NAME}" > ./artifacts/parachains.env -# - echo "PARACHAINS_IMAGE_TAG=$(cat ./artifacts/EXTRATAG)" >> ./artifacts/parachains.env -# artifacts: -# reports: -# # this artifact is used in zombienet-tests job -# dotenv: ./artifacts/parachains.env -# expire_in: 1 days - -# publish-test-collators-image: -# # service image for zombienet -# stage: publish -# extends: -# - .kubernetes-env -# - .build-push-image-polkadot -# - .zombienet-refs -# variables: -# CI_IMAGE: ${BUILDAH_IMAGE} -# GIT_STRATEGY: none -# DOCKER_USER: ${PARITYPR_USER} -# DOCKER_PASS: ${PARITYPR_PASS} -# # docker/dockerfiles/collator_injected.Dockerfile -# DOCKERFILE: collator_injected.Dockerfile -# IMAGE_NAME: docker.io/paritypr/colander -# needs: -# - job: build-test-collators -# artifacts: true -# after_script: -# - buildah logout --all -# # pass artifacts to the zombienet-tests job -# - echo "COLLATOR_IMAGE_NAME=${IMAGE_NAME}" > ./artifacts/collator.env -# - echo "COLLATOR_IMAGE_TAG=$(cat ./artifacts/EXTRATAG)" >> ./artifacts/collator.env -# artifacts: -# reports: -# # this artifact is used in zombienet-tests job -# dotenv: ./artifacts/collator.env - -# publish-malus-image: -# # service image for Simnet -# stage: publish -# extends: -# - .kubernetes-env -# - .build-push-image-polkadot -# - .zombienet-refs -# variables: -# CI_IMAGE: ${BUILDAH_IMAGE} -# GIT_STRATEGY: none -# DOCKER_USER: ${PARITYPR_USER} -# DOCKER_PASS: ${PARITYPR_PASS} -# # docker/dockerfiles/malus_injected.Dockerfile -# DOCKERFILE: malus_injected.Dockerfile -# IMAGE_NAME: docker.io/paritypr/malus -# needs: -# - job: build-malus -# artifacts: true -# after_script: -# - buildah logout "$IMAGE_NAME" -# # pass artifacts to the zombienet-tests job -# - echo "MALUS_IMAGE_NAME=${IMAGE_NAME}" > ./artifacts/malus.env -# - echo "MALUS_IMAGE_TAG=$(cat ./artifacts/EXTRATAG)" >> ./artifacts/malus.env -# artifacts: -# reports: -# # this artifact is used in zombienet-tests job -# dotenv: ./artifacts/malus.env - -# substrate - -# publish-substrate-image-pr: -# # service image for zombienet -# stage: publish -# extends: -# - .kubernetes-env -# - .build-push-image-polkadot -# - .zombienet-refs -# variables: -# CI_IMAGE: ${BUILDAH_IMAGE} -# GIT_STRATEGY: none -# DOCKER_USER: ${PARITYPR_USER} -# DOCKER_PASS: ${PARITYPR_PASS} -# DOCKERFILE: substrate_injected.Dockerfile -# IMAGE_NAME: docker.io/paritypr/substrate -# needs: -# - job: build-linux-substrate -# artifacts: true -# after_script: -# - buildah logout "$IMAGE_NAME" -- GitLab From 563aee908240cd6bc9827c9aa5151f53c0b31946 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=B3nal=20Murray?= Date: Wed, 22 Nov 2023 10:10:37 +0000 Subject: [PATCH 036/102] Add rococo-coretime-local --- .../src/chain_spec/coretime.rs | 20 +++++++++++++++---- cumulus/polkadot-parachain/src/command.rs | 3 +++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/cumulus/polkadot-parachain/src/chain_spec/coretime.rs b/cumulus/polkadot-parachain/src/chain_spec/coretime.rs index 81aedce81a8..0bcd9a63ed6 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/coretime.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/coretime.rs @@ -23,6 +23,8 @@ use std::{path::PathBuf, str::FromStr}; pub enum CoretimeRuntimeType { // Live Rococo, + // Local + RococoLocal, // Benchmarks RococoDevelopment, @@ -35,6 +37,7 @@ impl FromStr for CoretimeRuntimeType { fn from_str(value: &str) -> Result { match value { rococo::CORETIME_ROCOCO => Ok(CoretimeRuntimeType::Rococo), + rococo::CORETIME_ROCOCO_LOCAL => Ok(CoretimeRuntimeType::RococoLocal), rococo::CORETIME_ROCOCO_DEVELOPMENT => Ok(CoretimeRuntimeType::RococoDevelopment), westend::CORETIME_WESTEND => Ok(CoretimeRuntimeType::Westend), _ => Err(format!("Value '{}' is not configured yet", value)), @@ -47,7 +50,9 @@ impl CoretimeRuntimeType { pub fn chain_spec_from_json_file(&self, path: PathBuf) -> Result, String> { match self { - CoretimeRuntimeType::Rococo | CoretimeRuntimeType::RococoDevelopment => + CoretimeRuntimeType::Rococo | + CoretimeRuntimeType::RococoLocal | + CoretimeRuntimeType::RococoDevelopment => Ok(Box::new(rococo::CoretimeChainSpec::from_json_file(path)?)), CoretimeRuntimeType::Westend => Ok(Box::new(westend::CoretimeChainSpec::from_json_file(path)?)), @@ -60,7 +65,13 @@ impl CoretimeRuntimeType { Ok(Box::new(rococo::CoretimeChainSpec::from_json_bytes( &include_bytes!("../../../parachains/chain-specs/coretime-rococo.json")[..], )?)), - CoretimeRuntimeType::RococoDevelopment => Ok(Box::new(rococo::development_config( + CoretimeRuntimeType::RococoLocal => Ok(Box::new(rococo::local_config( + rococo::CORETIME_ROCOCO_DEVELOPMENT, + "Rococo Coretime Local", + "rococo-local", + ParaId::new(1005), + ))), + CoretimeRuntimeType::RococoDevelopment => Ok(Box::new(rococo::local_config( rococo::CORETIME_ROCOCO_DEVELOPMENT, "Rococo Coretime Development", "rococo-dev", @@ -98,6 +109,7 @@ pub mod rococo { use sp_core::sr25519; pub(crate) const CORETIME_ROCOCO: &str = "coretime-rococo"; + pub(crate) const CORETIME_ROCOCO_LOCAL: &str = "coretime-rococo-local"; pub(crate) const CORETIME_ROCOCO_DEVELOPMENT: &str = "coretime-rococo-dev"; const CORETIME_ROCOCO_ED: Balance = parachains_common::rococo::currency::EXISTENTIAL_DEPOSIT; @@ -105,7 +117,7 @@ pub mod rococo { sc_service::GenericChainSpec; pub type RuntimeApi = coretime_rococo_runtime::RuntimeApi; - pub fn development_config( + pub fn local_config( id: &str, chain_name: &str, relay_chain: &str, @@ -124,7 +136,7 @@ pub mod rococo { ) .with_name(chain_name) .with_id(super::ensure_id(id).expect("invalid id")) - .with_chain_type(ChainType::Development) + .with_chain_type(ChainType::Local) .with_genesis_config_patch(genesis( // initial collators. vec![( diff --git a/cumulus/polkadot-parachain/src/command.rs b/cumulus/polkadot-parachain/src/command.rs index 1c894cda6ba..b1f6146c322 100644 --- a/cumulus/polkadot-parachain/src/command.rs +++ b/cumulus/polkadot-parachain/src/command.rs @@ -544,6 +544,7 @@ macro_rules! construct_partials { $code }, chain_spec::coretime::CoretimeRuntimeType::Rococo | + chain_spec::coretime::CoretimeRuntimeType::RococoLocal | chain_spec::coretime::CoretimeRuntimeType::RococoDevelopment => { let $partials = new_partial::( &$config, @@ -751,6 +752,7 @@ macro_rules! construct_async_run { Runtime::Coretime(coretime_runtime_type) => { match coretime_runtime_type { chain_spec::coretime::CoretimeRuntimeType::Rococo | + chain_spec::coretime::CoretimeRuntimeType::RococoLocal | chain_spec::coretime::CoretimeRuntimeType::RococoDevelopment => { runner.async_run(|$config| { let $components = new_partial::( @@ -1105,6 +1107,7 @@ chain_spec::bridge_hubs::BridgeHubRuntimeType::Polkadot | Runtime::Coretime(coretime_runtime_type) => match coretime_runtime_type { chain_spec::coretime::CoretimeRuntimeType::Rococo | + chain_spec::coretime::CoretimeRuntimeType::RococoLocal | chain_spec::coretime::CoretimeRuntimeType::RococoDevelopment => crate::service::start_generic_aura_node::< chain_spec::coretime::rococo::RuntimeApi, -- GitLab From 97039ecefbe0683e6defdab10a43cce106243243 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=B3nal=20Murray?= Date: Wed, 22 Nov 2023 10:11:39 +0000 Subject: [PATCH 037/102] Add boot nodes, invulnerables and session keys --- .../scripts/create_coretime_rococo_spec.sh | 61 +++++++++---------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/cumulus/scripts/create_coretime_rococo_spec.sh b/cumulus/scripts/create_coretime_rococo_spec.sh index 26d7e429158..5d005266356 100755 --- a/cumulus/scripts/create_coretime_rococo_spec.sh +++ b/cumulus/scripts/create_coretime_rococo_spec.sh @@ -32,46 +32,37 @@ $binary build-spec --chain coretime-rococo-dev > chain-spec-plain.json cat $rt_path | od -A n -v -t x1 | tr -d ' \n' > rt-hex.txt # replace the runtime in the spec with the given runtime and set some values to production -# TODO: Get bootNodes, invulnerables, and session keys https://github.com/paritytech/devops/issues/2725 +# Related issue for bootNodes, invulnerables, and session keys: https://github.com/paritytech/devops/issues/2725 cat chain-spec-plain.json | jq --rawfile code rt-hex.txt '.genesis.runtime.system.code = ("0x" + $code)' \ | jq '.name = "Rococo Coretime"' \ | jq '.id = "coretime-rococo"' \ | jq '.chainType = "Live"' \ - | jq '.bootNodes = []' \ + | jq '.bootNodes = [ + "/dns/rococo-coretime-collator-node-0.polkadot.io/tcp/30333/p2p/12D3KooWHBUH9wGBx1Yq1ZePov9VL3AzxRPv5DTR4KadiCU6VKxy", + "/dns/rococo-coretime-collator-node-1.polkadot.io/tcp/30333/p2p/12D3KooWB3SKxdj6kpwTkdMnHJi6YmadojCzmEqFkeFJjxN812XX" + ]' \ | jq '.relay_chain = "rococo"' \ | jq --argjson para_id $para_id '.para_id = $para_id' \ | jq --argjson para_id $para_id '.genesis.runtime.parachainInfo.parachainId = $para_id' \ - | jq '.genesis.runtime.balances.balances = []' \ - | jq '.genesis.runtime.collatorSelection.invulnerables = []' \ + | jq '.genesis.runtime.collatorSelection.invulnerables = [ + "5G6Zua7Sowmt6ziddwUyueQs7HXDUVvDLaqqJDXXFyKvQ6Y6", + "5C8aSedh7ShpWEPW8aTNEErbKkMbiibdwP8cRzVRNqLmzAWF" + ]' \ | jq '.genesis.runtime.session.keys = [ - [ - "", - "", - { - "aura": "" - } - ], - [ - "", - "", - { - "aura": "" - } - ], - [ - "", - "", - { - "aura": "" - } - ], - [ - "", - "", - { - "aura": "" - } - ] + [ + "5G6Zua7Sowmt6ziddwUyueQs7HXDUVvDLaqqJDXXFyKvQ6Y6", + "5G6Zua7Sowmt6ziddwUyueQs7HXDUVvDLaqqJDXXFyKvQ6Y6", + { + "aura": "5G6Zua7Sowmt6ziddwUyueQs7HXDUVvDLaqqJDXXFyKvQ6Y6" + } + ], + [ + "5C8aSedh7ShpWEPW8aTNEErbKkMbiibdwP8cRzVRNqLmzAWF", + "5C8aSedh7ShpWEPW8aTNEErbKkMbiibdwP8cRzVRNqLmzAWF", + { + "aura": "5C8aSedh7ShpWEPW8aTNEErbKkMbiibdwP8cRzVRNqLmzAWF" + } + ] ]' \ > edited-chain-spec-plain.json @@ -86,3 +77,9 @@ $binary export-genesis-state --chain chain-spec-raw.json > coretime-rococo-genes # build genesis wasm $binary export-genesis-wasm --chain chain-spec-raw.json > coretime-rococo-wasm + +# cleanup +rm -f rt-hex.txt +rm -f chain-spec-plain.json +rm -f chain-spec-raw.json +rm -f edited-chain-spec-plain.json -- GitLab From 5df967e540194e98f2433ed35e02b0746dab3eb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=B3nal=20Murray?= Date: Wed, 22 Nov 2023 11:56:01 +0000 Subject: [PATCH 038/102] Revert "Impl WeightInfo for () to avoid missing chainspec" This reverts commit 36ba5f23b532223e07444d02ab5a5be9f71c07a3. --- .../coretime/coretime-rococo/src/lib.rs | 26 ++++++++----------- .../coretime-rococo/src/xcm_config.rs | 5 +--- .../coretime/coretime-westend/src/lib.rs | 26 ++++++++----------- .../coretime-westend/src/xcm_config.rs | 5 +--- 4 files changed, 24 insertions(+), 38 deletions(-) diff --git a/cumulus/parachains/runtimes/coretime/coretime-rococo/src/lib.rs b/cumulus/parachains/runtimes/coretime/coretime-rococo/src/lib.rs index f1459b7e1c8..61d225463b1 100644 --- a/cumulus/parachains/runtimes/coretime/coretime-rococo/src/lib.rs +++ b/cumulus/parachains/runtimes/coretime/coretime-rococo/src/lib.rs @@ -156,10 +156,6 @@ impl Contains for BrokerCalls { } } -// Temporary weights -pub trait WeightInfo {} -impl WeightInfo for () {} - parameter_types! { pub const Version: RuntimeVersion = VERSION; pub RuntimeBlockLength: BlockLength = @@ -223,7 +219,7 @@ impl frame_system::Config for Runtime { /// The basic call filter to use in dispatchable. type BaseCallFilter = EverythingBut; /// Weight information for the extrinsics of this pallet. - type SystemWeightInfo = (); + type SystemWeightInfo = weights::frame_system::WeightInfo; /// Block & extrinsics weights: base values and limits. type BlockWeights = RuntimeBlockWeights; /// The maximum length of a block (in bytes). @@ -239,7 +235,7 @@ impl pallet_timestamp::Config for Runtime { type Moment = u64; type OnTimestampSet = Aura; type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; - type WeightInfo = (); + type WeightInfo = weights::pallet_timestamp::WeightInfo; } impl pallet_authorship::Config for Runtime { @@ -257,7 +253,7 @@ impl pallet_balances::Config for Runtime { type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; - type WeightInfo = (); + type WeightInfo = weights::pallet_balances::WeightInfo; type MaxLocks = ConstU32<50>; type MaxReserves = ConstU32<50>; type ReserveIdentifier = [u8; 8]; @@ -289,7 +285,7 @@ parameter_types! { } impl cumulus_pallet_parachain_system::Config for Runtime { - type WeightInfo = (); + type WeightInfo = weights::cumulus_pallet_parachain_system::WeightInfo; type RuntimeEvent = RuntimeEvent; type OnSystemEvent = (); type SelfParaId = parachain_info::Pallet; @@ -313,7 +309,7 @@ parameter_types! { impl pallet_message_queue::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type WeightInfo = (); + type WeightInfo = weights::pallet_message_queue::WeightInfo; #[cfg(feature = "runtime-benchmarks")] type MessageProcessor = pallet_message_queue::mock_helpers::NoopMessageProcessor< cumulus_primitives_core::AggregateMessageOrigin, @@ -370,7 +366,7 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { type MaxInboundSuspended = sp_core::ConstU32<1_000>; type ControllerOrigin = RootOrFellows; type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; - type WeightInfo = (); + type WeightInfo = weights::cumulus_pallet_xcmp_queue::WeightInfo; type PriceForSiblingDelivery = PriceForSiblingParachainDelivery; } @@ -379,7 +375,7 @@ parameter_types! { } impl cumulus_pallet_dmp_queue::Config for Runtime { - type WeightInfo = (); + type WeightInfo = weights::cumulus_pallet_dmp_queue::WeightInfo; type RuntimeEvent = RuntimeEvent; type DmpSink = frame_support::traits::EnqueueWithOrigin; } @@ -398,7 +394,7 @@ impl pallet_session::Config for Runtime { // Essentially just Aura, but let's be pedantic. type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; - type WeightInfo = (); + type WeightInfo = weights::pallet_session::WeightInfo; } impl pallet_aura::Config for Runtime { @@ -436,7 +432,7 @@ impl pallet_collator_selection::Config for Runtime { type ValidatorId = ::AccountId; type ValidatorIdOf = pallet_collator_selection::IdentityCollator; type ValidatorRegistration = Session; - type WeightInfo = (); + type WeightInfo = weights::pallet_collator_selection::WeightInfo; } parameter_types! { @@ -453,14 +449,14 @@ impl pallet_multisig::Config for Runtime { type DepositBase = DepositBase; type DepositFactor = DepositFactor; type MaxSignatories = ConstU32<100>; - type WeightInfo = (); + type WeightInfo = weights::pallet_multisig::WeightInfo; } impl pallet_utility::Config for Runtime { type RuntimeEvent = RuntimeEvent; type RuntimeCall = RuntimeCall; type PalletsOrigin = OriginCaller; - type WeightInfo = (); + type WeightInfo = weights::pallet_utility::WeightInfo; } // Create the runtime by composing the FRAME pallets that were previously configured. diff --git a/cumulus/parachains/runtimes/coretime/coretime-rococo/src/xcm_config.rs b/cumulus/parachains/runtimes/coretime/coretime-rococo/src/xcm_config.rs index 0562b8a9ed7..5c77c4e4ecd 100644 --- a/cumulus/parachains/runtimes/coretime/coretime-rococo/src/xcm_config.rs +++ b/cumulus/parachains/runtimes/coretime/coretime-rococo/src/xcm_config.rs @@ -39,9 +39,6 @@ use xcm_builder::{ }; use xcm_executor::{traits::WithOriginFilter, XcmExecutor}; -// Temporary weights -use pallet_xcm::TestWeightInfo; - parameter_types! { pub const RocRelayLocation: MultiLocation = MultiLocation::parent(); pub const RelayNetwork: Option = Some(NetworkId::Rococo); @@ -263,7 +260,7 @@ impl pallet_xcm::Config for Runtime { type TrustedLockers = (); type SovereignAccountOf = LocationToAccountId; type MaxLockers = ConstU32<8>; - type WeightInfo = TestWeightInfo; + type WeightInfo = crate::weights::pallet_xcm::WeightInfo; type AdminOrigin = EnsureRoot; type MaxRemoteLockConsumers = ConstU32<0>; type RemoteLockConsumerIdentifier = (); diff --git a/cumulus/parachains/runtimes/coretime/coretime-westend/src/lib.rs b/cumulus/parachains/runtimes/coretime/coretime-westend/src/lib.rs index 117b6395404..72477de8665 100644 --- a/cumulus/parachains/runtimes/coretime/coretime-westend/src/lib.rs +++ b/cumulus/parachains/runtimes/coretime/coretime-westend/src/lib.rs @@ -143,10 +143,6 @@ pub fn native_version() -> NativeVersion { NativeVersion { runtime_version: VERSION, can_author_with: Default::default() } } -// Temporary weights -pub trait WeightInfo {} -impl WeightInfo for () {} - parameter_types! { pub const Version: RuntimeVersion = VERSION; pub RuntimeBlockLength: BlockLength = @@ -210,7 +206,7 @@ impl frame_system::Config for Runtime { /// The basic call filter to use in dispatchable. type BaseCallFilter = Everything; /// Weight information for the extrinsics of this pallet. - type SystemWeightInfo = (); + type SystemWeightInfo = weights::frame_system::WeightInfo; /// Block & extrinsics weights: base values and limits. type BlockWeights = RuntimeBlockWeights; /// The maximum length of a block (in bytes). @@ -226,7 +222,7 @@ impl pallet_timestamp::Config for Runtime { type Moment = u64; type OnTimestampSet = Aura; type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; - type WeightInfo = (); + type WeightInfo = weights::pallet_timestamp::WeightInfo; } impl pallet_authorship::Config for Runtime { @@ -244,7 +240,7 @@ impl pallet_balances::Config for Runtime { type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; - type WeightInfo = (); + type WeightInfo = weights::pallet_balances::WeightInfo; type MaxLocks = ConstU32<50>; type MaxReserves = ConstU32<50>; type ReserveIdentifier = [u8; 8]; @@ -276,7 +272,7 @@ parameter_types! { } impl cumulus_pallet_parachain_system::Config for Runtime { - type WeightInfo = (); + type WeightInfo = weights::cumulus_pallet_parachain_system::WeightInfo; type RuntimeEvent = RuntimeEvent; type OnSystemEvent = (); type SelfParaId = parachain_info::Pallet; @@ -302,7 +298,7 @@ parameter_types! { impl pallet_message_queue::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type WeightInfo = (); + type WeightInfo = weights::pallet_message_queue::WeightInfo; #[cfg(feature = "runtime-benchmarks")] type MessageProcessor = pallet_message_queue::mock_helpers::NoopMessageProcessor< cumulus_primitives_core::AggregateMessageOrigin, @@ -357,7 +353,7 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { type MaxInboundSuspended = sp_core::ConstU32<1_000>; type ControllerOrigin = RootOrFellows; type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; - type WeightInfo = (); + type WeightInfo = weights::cumulus_pallet_xcmp_queue::WeightInfo; type PriceForSiblingDelivery = PriceForSiblingParachainDelivery; } @@ -366,7 +362,7 @@ parameter_types! { } impl cumulus_pallet_dmp_queue::Config for Runtime { - type WeightInfo = (); + type WeightInfo = weights::cumulus_pallet_dmp_queue::WeightInfo; type RuntimeEvent = RuntimeEvent; type DmpSink = frame_support::traits::EnqueueWithOrigin; } @@ -385,7 +381,7 @@ impl pallet_session::Config for Runtime { // Essentially just Aura, but let's be pedantic. type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; - type WeightInfo = (); + type WeightInfo = weights::pallet_session::WeightInfo; } impl pallet_aura::Config for Runtime { @@ -423,7 +419,7 @@ impl pallet_collator_selection::Config for Runtime { type ValidatorId = ::AccountId; type ValidatorIdOf = pallet_collator_selection::IdentityCollator; type ValidatorRegistration = Session; - type WeightInfo = (); + type WeightInfo = weights::pallet_collator_selection::WeightInfo; } parameter_types! { @@ -440,14 +436,14 @@ impl pallet_multisig::Config for Runtime { type DepositBase = DepositBase; type DepositFactor = DepositFactor; type MaxSignatories = ConstU32<100>; - type WeightInfo = (); + type WeightInfo = weights::pallet_multisig::WeightInfo; } impl pallet_utility::Config for Runtime { type RuntimeEvent = RuntimeEvent; type RuntimeCall = RuntimeCall; type PalletsOrigin = OriginCaller; - type WeightInfo = (); + type WeightInfo = weights::pallet_utility::WeightInfo; } // Create the runtime by composing the FRAME pallets that were previously configured. diff --git a/cumulus/parachains/runtimes/coretime/coretime-westend/src/xcm_config.rs b/cumulus/parachains/runtimes/coretime/coretime-westend/src/xcm_config.rs index 37baee6c8c2..3f3568d50ff 100644 --- a/cumulus/parachains/runtimes/coretime/coretime-westend/src/xcm_config.rs +++ b/cumulus/parachains/runtimes/coretime/coretime-westend/src/xcm_config.rs @@ -39,9 +39,6 @@ use xcm_builder::{ }; use xcm_executor::{traits::WithOriginFilter, XcmExecutor}; -// Temporary weights -use pallet_xcm::TestWeightInfo; - parameter_types! { pub const WndRelayLocation: MultiLocation = MultiLocation::parent(); pub const RelayNetwork: Option = Some(NetworkId::Westend); @@ -267,7 +264,7 @@ impl pallet_xcm::Config for Runtime { type TrustedLockers = (); type SovereignAccountOf = LocationToAccountId; type MaxLockers = ConstU32<8>; - type WeightInfo = TestWeightInfo; + type WeightInfo = crate::weights::pallet_xcm::WeightInfo; type AdminOrigin = EnsureRoot; type MaxRemoteLockConsumers = ConstU32<0>; type RemoteLockConsumerIdentifier = (); -- GitLab From 98f9e2ea9d5d034e85de7a87f6ba941827bc1a13 Mon Sep 17 00:00:00 2001 From: gupnik <17176722+gupnik@users.noreply.github.com> Date: Wed, 22 Nov 2023 17:32:49 +0530 Subject: [PATCH 039/102] Fixes import path in benchmark macro (#2437) Fully-qualified path was not being used in benchmark macro for one of the cases. This PR fixes this and removes the unnecessary import in a couple of files, which I believe was done to fix this issue. --- .../bin/node-template/pallets/template/src/benchmarking.rs | 1 - substrate/frame/asset-rate/src/benchmarking.rs | 1 - substrate/frame/support/procedural/src/benchmark.rs | 2 +- 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/substrate/bin/node-template/pallets/template/src/benchmarking.rs b/substrate/bin/node-template/pallets/template/src/benchmarking.rs index 6c3cae6066b..5a262417629 100644 --- a/substrate/bin/node-template/pallets/template/src/benchmarking.rs +++ b/substrate/bin/node-template/pallets/template/src/benchmarking.rs @@ -1,7 +1,6 @@ //! Benchmarking setup for pallet-template #![cfg(feature = "runtime-benchmarks")] use super::*; -use sp_std::vec; #[allow(unused)] use crate::Pallet as Template; diff --git a/substrate/frame/asset-rate/src/benchmarking.rs b/substrate/frame/asset-rate/src/benchmarking.rs index 21d53a89e39..6fcc7c7fadb 100644 --- a/substrate/frame/asset-rate/src/benchmarking.rs +++ b/substrate/frame/asset-rate/src/benchmarking.rs @@ -25,7 +25,6 @@ use frame_benchmarking::v2::*; use frame_support::assert_ok; use frame_system::RawOrigin; use sp_core::crypto::FromEntropy; -use sp_std::vec; /// Trait describing the factory function for the `AssetKind` parameter. pub trait AssetKindFactory { diff --git a/substrate/frame/support/procedural/src/benchmark.rs b/substrate/frame/support/procedural/src/benchmark.rs index fb55e8c9f66..6ded82d91aa 100644 --- a/substrate/frame/support/procedural/src/benchmark.rs +++ b/substrate/frame/support/procedural/src/benchmark.rs @@ -517,7 +517,7 @@ pub fn benchmarks( components, // TODO: Not supported by V2 syntax as of yet. // https://github.com/paritytech/substrate/issues/13132 - pov_modes: vec![], + pov_modes: #krate::__private::vec![], } }).collect::<#krate::__private::Vec<_>>() } -- GitLab From 408af9b32d95acbbac5e18bee66fd1b74230a699 Mon Sep 17 00:00:00 2001 From: Marcin S Date: Wed, 22 Nov 2023 15:45:52 +0100 Subject: [PATCH 040/102] PVF: Fix unshare "no such file or directory" error (#2426) --- .gitlab/pipeline/test.yml | 2 +- Cargo.lock | 1 + polkadot/node/core/pvf/Cargo.toml | 1 + polkadot/node/core/pvf/common/src/lib.rs | 2 +- polkadot/node/core/pvf/src/artifacts.rs | 5 +- .../node/core/pvf/src/execute/worker_intf.rs | 4 +- polkadot/node/core/pvf/src/host.rs | 9 +- .../node/core/pvf/src/prepare/worker_intf.rs | 4 +- polkadot/node/core/pvf/src/security.rs | 19 ++-- polkadot/node/core/pvf/src/worker_intf.rs | 105 ++++++++---------- polkadot/node/core/pvf/tests/it/main.rs | 32 ++++++ .../functional/0001-parachains-pvf.zndsl | 4 +- 12 files changed, 105 insertions(+), 83 deletions(-) diff --git a/.gitlab/pipeline/test.yml b/.gitlab/pipeline/test.yml index 4ed3ec19c48..79ef9070dba 100644 --- a/.gitlab/pipeline/test.yml +++ b/.gitlab/pipeline/test.yml @@ -29,7 +29,7 @@ test-linux-stable: --locked \ --release \ --no-fail-fast \ - --features try-runtime,experimental \ + --features try-runtime,experimental,ci-only-tests \ --partition count:${CI_NODE_INDEX}/${CI_NODE_TOTAL} # Upload tests results to Elasticsearch - echo "Upload test results to Elasticsearch" diff --git a/Cargo.lock b/Cargo.lock index 903e9463cf6..bfe24e528eb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12591,6 +12591,7 @@ dependencies = [ "rand 0.8.5", "rococo-runtime", "rusty-fork", + "sc-sysinfo", "slotmap", "sp-core", "sp-maybe-compressed-blob", diff --git a/polkadot/node/core/pvf/Cargo.toml b/polkadot/node/core/pvf/Cargo.toml index 27da484fe4f..05509a5f853 100644 --- a/polkadot/node/core/pvf/Cargo.toml +++ b/polkadot/node/core/pvf/Cargo.toml @@ -54,6 +54,7 @@ halt = { package = "test-parachain-halt", path = "../../../parachain/test-parach [target.'cfg(target_os = "linux")'.dev-dependencies] procfs = "0.16.0" rusty-fork = "0.3.0" +sc-sysinfo = { path = "../../../../substrate/client/sysinfo" } [[bench]] name = "host_prepare_rococo_runtime" diff --git a/polkadot/node/core/pvf/common/src/lib.rs b/polkadot/node/core/pvf/common/src/lib.rs index 278fa3fe821..c041c60aaf9 100644 --- a/polkadot/node/core/pvf/common/src/lib.rs +++ b/polkadot/node/core/pvf/common/src/lib.rs @@ -47,7 +47,7 @@ pub mod tests { } /// Status of security features on the current system. -#[derive(Debug, Clone, Default)] +#[derive(Debug, Clone, Default, PartialEq, Eq)] pub struct SecurityStatus { /// Whether the landlock features we use are fully available on this system. pub can_enable_landlock: bool, diff --git a/polkadot/node/core/pvf/src/artifacts.rs b/polkadot/node/core/pvf/src/artifacts.rs index 53085eade3c..79b53467b4e 100644 --- a/polkadot/node/core/pvf/src/artifacts.rs +++ b/polkadot/node/core/pvf/src/artifacts.rs @@ -499,8 +499,7 @@ mod tests { #[tokio::test] async fn remove_stale_cache_on_startup() { - let cache_dir = crate::worker_intf::tmppath("test-cache").await.unwrap(); - fs::create_dir_all(&cache_dir).unwrap(); + let cache_dir = tempfile::Builder::new().prefix("test-cache-").tempdir().unwrap(); // invalid prefix create_rand_artifact(&cache_dir, ""); @@ -529,7 +528,7 @@ mod tests { assert_eq!(fs::read_dir(&cache_dir).unwrap().count(), 7); - let artifacts = Artifacts::new_and_prune(&cache_dir).await; + let artifacts = Artifacts::new_and_prune(cache_dir.path()).await; assert_eq!(fs::read_dir(&cache_dir).unwrap().count(), 1); assert_eq!(artifacts.len(), 1); diff --git a/polkadot/node/core/pvf/src/execute/worker_intf.rs b/polkadot/node/core/pvf/src/execute/worker_intf.rs index 4faaf13e62f..fc6cd8fc725 100644 --- a/polkadot/node/core/pvf/src/execute/worker_intf.rs +++ b/polkadot/node/core/pvf/src/execute/worker_intf.rs @@ -278,7 +278,7 @@ where // Cheaply create a hard link to the artifact. The artifact is always at a known location in the // worker cache, and the child can't access any other artifacts or gain any information from the // original filename. - let link_path = worker_dir::execute_artifact(&worker_dir.path); + let link_path = worker_dir::execute_artifact(worker_dir.path()); if let Err(err) = tokio::fs::hard_link(artifact_path, link_path).await { gum::warn!( target: LOG_TARGET, @@ -292,7 +292,7 @@ where } } - let worker_dir_path = worker_dir.path.clone(); + let worker_dir_path = worker_dir.path().to_owned(); let outcome = f(worker_dir).await; // Try to clear the worker dir. diff --git a/polkadot/node/core/pvf/src/host.rs b/polkadot/node/core/pvf/src/host.rs index 6049f51834e..be8f7aee778 100644 --- a/polkadot/node/core/pvf/src/host.rs +++ b/polkadot/node/core/pvf/src/host.rs @@ -24,7 +24,7 @@ use crate::{ artifacts::{ArtifactId, ArtifactPathId, ArtifactState, Artifacts}, execute::{self, PendingExecutionRequest}, metrics::Metrics, - prepare, security, Priority, ValidationError, LOG_TARGET, + prepare, security, Priority, SecurityStatus, ValidationError, LOG_TARGET, }; use always_assert::never; use futures::{ @@ -70,6 +70,8 @@ pub(crate) type PrecheckResultSender = oneshot::Sender; #[derive(Clone)] pub struct ValidationHost { to_host_tx: mpsc::Sender, + /// Available security features, detected by the host during startup. + pub security_status: SecurityStatus, } impl ValidationHost { @@ -216,7 +218,7 @@ pub async fn start( let (to_host_tx, to_host_rx) = mpsc::channel(10); - let validation_host = ValidationHost { to_host_tx }; + let validation_host = ValidationHost { to_host_tx, security_status: security_status.clone() }; let (to_prepare_pool, from_prepare_pool, run_prepare_pool) = prepare::start_pool( metrics.clone(), @@ -978,7 +980,8 @@ pub(crate) mod tests { fn host_handle(&mut self) -> ValidationHost { let to_host_tx = self.to_host_tx.take().unwrap(); - ValidationHost { to_host_tx } + let security_status = Default::default(); + ValidationHost { to_host_tx, security_status } } async fn poll_and_recv_result(&mut self, result_rx: oneshot::Receiver) -> T diff --git a/polkadot/node/core/pvf/src/prepare/worker_intf.rs b/polkadot/node/core/pvf/src/prepare/worker_intf.rs index 318aea7295d..f978005068c 100644 --- a/polkadot/node/core/pvf/src/prepare/worker_intf.rs +++ b/polkadot/node/core/pvf/src/prepare/worker_intf.rs @@ -318,7 +318,7 @@ where { // Create the tmp file here so that the child doesn't need any file creation rights. This will // be cleared at the end of this function. - let tmp_file = worker_dir::prepare_tmp_artifact(&worker_dir.path); + let tmp_file = worker_dir::prepare_tmp_artifact(worker_dir.path()); if let Err(err) = tokio::fs::File::create(&tmp_file).await { gum::warn!( target: LOG_TARGET, @@ -333,7 +333,7 @@ where } }; - let worker_dir_path = worker_dir.path.clone(); + let worker_dir_path = worker_dir.path().to_owned(); let outcome = f(tmp_file, stream, worker_dir).await; // Try to clear the worker dir. diff --git a/polkadot/node/core/pvf/src/security.rs b/polkadot/node/core/pvf/src/security.rs index 8c06c68392f..ef8714f58c8 100644 --- a/polkadot/node/core/pvf/src/security.rs +++ b/polkadot/node/core/pvf/src/security.rs @@ -28,7 +28,7 @@ const SECURE_MODE_ANNOUNCEMENT: &'static str = /// Run checks for supported security features. /// -/// # Return +/// # Returns /// /// Returns the set of security features that we were able to enable. If an error occurs while /// enabling a security feature we set the corresponding status to `false`. @@ -158,18 +158,15 @@ async fn check_can_unshare_user_namespace_and_change_root( ) -> SecureModeResult { cfg_if::cfg_if! { if #[cfg(target_os = "linux")] { - let cache_dir_tempdir = - crate::worker_intf::tmppath_in("check-can-unshare", cache_path) - .await - .map_err( - |err| - SecureModeError::CannotUnshareUserNamespaceAndChangeRoot( - format!("could not create a temporary directory in {:?}: {}", cache_path, err) - ) - )?; + let cache_dir_tempdir = tempfile::Builder::new() + .prefix("check-can-unshare-") + .tempdir_in(cache_path) + .map_err(|err| SecureModeError::CannotUnshareUserNamespaceAndChangeRoot( + format!("could not create a temporary directory in {:?}: {}", cache_path, err) + ))?; match tokio::process::Command::new(prepare_worker_program_path) .arg("--check-can-unshare-user-namespace-and-change-root") - .arg(cache_dir_tempdir) + .arg(cache_dir_tempdir.path()) .output() .await { diff --git a/polkadot/node/core/pvf/src/worker_intf.rs b/polkadot/node/core/pvf/src/worker_intf.rs index 5e589b9abce..9d6907c1092 100644 --- a/polkadot/node/core/pvf/src/worker_intf.rs +++ b/polkadot/node/core/pvf/src/worker_intf.rs @@ -71,6 +71,7 @@ pub async fn spawn_with_program_path( with_transient_socket_path(debug_id, |socket_path| { let socket_path = socket_path.to_owned(); + let worker_dir_path = worker_dir.path().to_owned(); async move { let listener = UnixListener::bind(&socket_path).map_err(|err| { @@ -91,7 +92,7 @@ pub async fn spawn_with_program_path( &program_path, &extra_args, &socket_path, - &worker_dir.path, + &worker_dir_path, security_status, ) .map_err(|err| { @@ -100,7 +101,7 @@ pub async fn spawn_with_program_path( %debug_id, ?program_path, ?extra_args, - ?worker_dir.path, + ?worker_dir_path, ?socket_path, "cannot spawn a worker: {:?}", err, @@ -108,7 +109,6 @@ pub async fn spawn_with_program_path( SpawnErr::ProcessSpawn })?; - let worker_dir_path = worker_dir.path.clone(); futures::select! { accept_result = listener.accept().fuse() => { let (stream, _) = accept_result.map_err(|err| { @@ -150,7 +150,42 @@ where F: FnOnce(&Path) -> Fut, Fut: futures::Future> + 'static, { - let socket_path = tmppath(&format!("pvf-host-{}", debug_id)) + /// Returns a path under [`std::env::temp_dir`]. The path name will start with the given prefix. + /// + /// There is only a certain number of retries. If exceeded this function will give up and return + /// an error. + pub async fn tmppath(prefix: &str) -> io::Result { + fn make_tmppath(prefix: &str, dir: &Path) -> PathBuf { + use rand::distributions::Alphanumeric; + + const DESCRIMINATOR_LEN: usize = 10; + + let mut buf = Vec::with_capacity(prefix.len() + DESCRIMINATOR_LEN); + buf.extend(prefix.as_bytes()); + buf.extend(rand::thread_rng().sample_iter(&Alphanumeric).take(DESCRIMINATOR_LEN)); + + let s = std::str::from_utf8(&buf) + .expect("the string is collected from a valid utf-8 sequence; qed"); + + let mut path = dir.to_owned(); + path.push(s); + path + } + + const NUM_RETRIES: usize = 50; + + let dir = std::env::temp_dir(); + for _ in 0..NUM_RETRIES { + let tmp_path = make_tmppath(prefix, &dir); + if !tmp_path.exists() { + return Ok(tmp_path) + } + } + + Err(io::Error::new(io::ErrorKind::Other, "failed to create a temporary path")) + } + + let socket_path = tmppath(&format!("pvf-host-{}-", debug_id)) .await .map_err(|_| SpawnErr::TmpPath)?; let result = f(&socket_path).await; @@ -162,46 +197,6 @@ where result } -/// Returns a path under the given `dir`. The path name will start with the given prefix. -/// -/// There is only a certain number of retries. If exceeded this function will give up and return an -/// error. -pub async fn tmppath_in(prefix: &str, dir: &Path) -> io::Result { - fn make_tmppath(prefix: &str, dir: &Path) -> PathBuf { - use rand::distributions::Alphanumeric; - - const DESCRIMINATOR_LEN: usize = 10; - - let mut buf = Vec::with_capacity(prefix.len() + DESCRIMINATOR_LEN); - buf.extend(prefix.as_bytes()); - buf.extend(rand::thread_rng().sample_iter(&Alphanumeric).take(DESCRIMINATOR_LEN)); - - let s = std::str::from_utf8(&buf) - .expect("the string is collected from a valid utf-8 sequence; qed"); - - let mut path = dir.to_owned(); - path.push(s); - path - } - - const NUM_RETRIES: usize = 50; - - for _ in 0..NUM_RETRIES { - let tmp_path = make_tmppath(prefix, dir); - if !tmp_path.exists() { - return Ok(tmp_path) - } - } - - Err(io::Error::new(io::ErrorKind::Other, "failed to create a temporary path")) -} - -/// The same as [`tmppath_in`], but uses [`std::env::temp_dir`] as the directory. -pub async fn tmppath(prefix: &str) -> io::Result { - let temp_dir = std::env::temp_dir(); - tmppath_in(prefix, &temp_dir).await -} - /// A struct that represents an idle worker. /// /// This struct is supposed to be used as a token that is passed by move into a subroutine that @@ -224,8 +219,6 @@ pub struct IdleWorker { pub enum SpawnErr { /// Cannot obtain a temporary path location. TmpPath, - /// An FS error occurred. - Fs(String), /// Cannot bind the socket to the given path. Bind, /// An error happened during accepting a connection to the socket. @@ -419,26 +412,22 @@ pub async fn framed_recv(r: &mut (impl AsyncRead + Unpin)) -> io::Result /// ``` #[derive(Debug)] pub struct WorkerDir { - pub path: PathBuf, + tempdir: tempfile::TempDir, } impl WorkerDir { /// Creates a new, empty worker dir with a random name in the given cache dir. pub async fn new(debug_id: &'static str, cache_dir: &Path) -> Result { let prefix = format!("worker-dir-{}-", debug_id); - let path = tmppath_in(&prefix, cache_dir).await.map_err(|_| SpawnErr::TmpPath)?; - tokio::fs::create_dir(&path) - .await - .map_err(|err| SpawnErr::Fs(err.to_string()))?; - Ok(Self { path }) + let tempdir = tempfile::Builder::new() + .prefix(&prefix) + .tempdir_in(cache_dir) + .map_err(|_| SpawnErr::TmpPath)?; + Ok(Self { tempdir }) } -} -// Try to clean up the temporary worker dir at the end of the worker's lifetime. It should be wiped -// on startup, but we make a best effort not to leave it around. -impl Drop for WorkerDir { - fn drop(&mut self) { - let _ = std::fs::remove_dir_all(&self.path); + pub fn path(&self) -> &Path { + self.tempdir.path() } } diff --git a/polkadot/node/core/pvf/tests/it/main.rs b/polkadot/node/core/pvf/tests/it/main.rs index 4c81ac502dd..b53d598cd0f 100644 --- a/polkadot/node/core/pvf/tests/it/main.rs +++ b/polkadot/node/core/pvf/tests/it/main.rs @@ -18,6 +18,8 @@ use assert_matches::assert_matches; use parity_scale_codec::Encode as _; +#[cfg(all(feature = "ci-only-tests", target_os = "linux"))] +use polkadot_node_core_pvf::SecurityStatus; use polkadot_node_core_pvf::{ start, testing::build_workers_and_get_paths, Config, InvalidCandidate, Metrics, PrepareError, PrepareJobKind, PvfPrepData, ValidationError, ValidationHost, JOB_TIMEOUT_WALL_CLOCK_FACTOR, @@ -122,6 +124,11 @@ impl TestHost { .unwrap(); result_rx.await.unwrap() } + + #[cfg(all(feature = "ci-only-tests", target_os = "linux"))] + async fn security_status(&self) -> SecurityStatus { + self.host.lock().await.security_status.clone() + } } #[tokio::test] @@ -402,3 +409,28 @@ async fn prepare_can_run_serially() { // Prepare a different wasm blob to prevent skipping work. let _stats = host.precheck_pvf(halt::wasm_binary_unwrap(), Default::default()).await.unwrap(); } + +// CI machines should be able to enable all the security features. +#[cfg(all(feature = "ci-only-tests", target_os = "linux"))] +#[tokio::test] +async fn all_security_features_work() { + // Landlock is only available starting Linux 5.13, and we may be testing on an old kernel. + let sysinfo = sc_sysinfo::gather_sysinfo(); + // The version will look something like "5.15.0-87-generic". + let version = sysinfo.linux_kernel.unwrap(); + let version_split: Vec<&str> = version.split(".").collect(); + let major: u32 = version_split[0].parse().unwrap(); + let minor: u32 = version_split[1].parse().unwrap(); + let can_enable_landlock = if major >= 6 { true } else { minor >= 13 }; + + let host = TestHost::new().await; + + assert_eq!( + host.security_status().await, + SecurityStatus { + can_enable_landlock, + can_enable_seccomp: true, + can_unshare_user_namespace_and_change_root: true, + } + ); +} diff --git a/polkadot/zombienet_tests/functional/0001-parachains-pvf.zndsl b/polkadot/zombienet_tests/functional/0001-parachains-pvf.zndsl index 46bb8bcdf72..135999a092a 100644 --- a/polkadot/zombienet_tests/functional/0001-parachains-pvf.zndsl +++ b/polkadot/zombienet_tests/functional/0001-parachains-pvf.zndsl @@ -54,8 +54,8 @@ one: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets [" two: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "120", "+Inf"] within 10 seconds # Check execution time. -# There are two different timeout conditions: BACKING_EXECUTION_TIMEOUT(2s) and -# APPROVAL_EXECUTION_TIMEOUT(6s). Currently these are not differentiated by metrics +# There are two different timeout conditions: DEFAULT_BACKING_EXECUTION_TIMEOUT(2s) and +# DEFAULT_APPROVAL_EXECUTION_TIMEOUT(12s). Currently these are not differentiated by metrics # because the metrics are defined in `polkadot-node-core-pvf` which is a level below # the relevant subsystems. # That being said, we will take the simplifying assumption of testing only the -- GitLab From 0d6dcb3f48559eff24b3a4e2233fc31e145717d2 Mon Sep 17 00:00:00 2001 From: James Wilson Date: Wed, 22 Nov 2023 17:27:53 +0000 Subject: [PATCH 041/102] Make TypeInfo for SkipCheckIfFeeless transparent, too (#2449) The `SkipCheckifFeeless::IDENTIFIER` became transparent (ie was whatever the inner signed ext was). This PR just makes the `TypeInfo` transparent too, so that libraries that use said info to decode the data (ie subxt) can behave identically whether or not the `SkipCheckifFeeless` wrapper is used or not. --------- Co-authored-by: Oliver Tale-Yazdi --- .../skip-feeless-payment/src/lib.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/substrate/frame/transaction-payment/skip-feeless-payment/src/lib.rs b/substrate/frame/transaction-payment/skip-feeless-payment/src/lib.rs index 55afaaf93d7..6c34c26ce92 100644 --- a/substrate/frame/transaction-payment/skip-feeless-payment/src/lib.rs +++ b/substrate/frame/transaction-payment/skip-feeless-payment/src/lib.rs @@ -40,7 +40,7 @@ use frame_support::{ dispatch::{CheckIfFeeless, DispatchResult}, traits::{IsType, OriginTrait}, }; -use scale_info::TypeInfo; +use scale_info::{StaticTypeInfo, TypeInfo}; use sp_runtime::{ traits::{DispatchInfoOf, PostDispatchInfoOf, SignedExtension}, transaction_validity::TransactionValidityError, @@ -75,10 +75,17 @@ pub mod pallet { } /// A [`SignedExtension`] that skips the wrapped extension if the dispatchable is feeless. -#[derive(Encode, Decode, Clone, Eq, PartialEq, TypeInfo)] -#[scale_info(skip_type_params(T))] +#[derive(Encode, Decode, Clone, Eq, PartialEq)] pub struct SkipCheckIfFeeless(pub S, sp_std::marker::PhantomData); +// Make this extension "invisible" from the outside (ie metadata type information) +impl TypeInfo for SkipCheckIfFeeless { + type Identity = S; + fn type_info() -> scale_info::Type { + S::type_info() + } +} + impl sp_std::fmt::Debug for SkipCheckIfFeeless { #[cfg(feature = "std")] fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { -- GitLab From 0956357b602af1bb10f9bd6fb3998b856bd07592 Mon Sep 17 00:00:00 2001 From: girazoki Date: Wed, 22 Nov 2023 18:29:06 +0100 Subject: [PATCH 042/102] work with additional key values (#1757) Add the possibility to inject additional key-values in the sproof-builder that generates the relay root that gets stored in parachain-system. Rationale: pallets that verify additional storage items (not those verified by parachain-system) from the relay should be able to proof against the relay root that gets stored in parachain-system. This PR allows to create provide additional nibles that can later be used for verifiability in other pallets --- cumulus/primitives/parachain-inherent/src/mock.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cumulus/primitives/parachain-inherent/src/mock.rs b/cumulus/primitives/parachain-inherent/src/mock.rs index 5168b46a14d..e40cb49acdd 100644 --- a/cumulus/primitives/parachain-inherent/src/mock.rs +++ b/cumulus/primitives/parachain-inherent/src/mock.rs @@ -61,6 +61,8 @@ pub struct MockValidationDataInherentDataProvider { pub raw_downward_messages: Vec>, // Inbound Horizontal messages sorted by channel pub raw_horizontal_messages: Vec<(ParaId, Vec)>, + // Additional key-value pairs that should be injected. + pub additional_key_values: Option, Vec)>>, } pub trait GenerateRandomness { @@ -210,6 +212,10 @@ impl> InherentDataProvider sproof_builder.randomness = self.relay_randomness_config.generate_randomness(self.current_para_block.into()); + if let Some(key_values) = &self.additional_key_values { + sproof_builder.additional_key_values = key_values.clone() + } + let (relay_parent_storage_root, proof) = sproof_builder.into_state_root_and_proof(); inherent_data.put_data( -- GitLab From 49874882cf3eadde01951ee48916c9811d6a8c7e Mon Sep 17 00:00:00 2001 From: Michal Kucharczyk <1728078+michalkucharczyk@users.noreply.github.com> Date: Wed, 22 Nov 2023 19:24:11 +0100 Subject: [PATCH 043/102] polkadot-node-subsystems: `ChainApiBackend` added + `polkadot-debug` image version fixed (#2411) The out-dated version (bad tag) of [polkadot image](https://github.com/paritytech/polkadot-sdk/blob/ede4a362622dfa69eb167eaa876246b1289f4b41/.gitlab/pipeline/zombienet/cumulus.yml#L31) ([docker info](https://hub.docker.com/layers/paritypr/polkadot-debug/master/images/sha256:adb1658052cf671b50c90d5cece5c7a131efa1a95978249bd5cb85a5ad654f7a?context=explore)) was used. This PR fixes this. See also: https://github.com/paritytech/polkadot-sdk/pull/2411#issuecomment-1822632724 Also adds an abstraction that allows asynchronous backends to be passed to `ChainApiSubsystem` --------- Co-authored-by: Sebastian Kunert --- .gitlab/pipeline/zombienet/cumulus.yml | 2 +- Cargo.lock | 6 ++ .../relay-chain-minimal-node/Cargo.toml | 4 + .../src/blockchain_rpc_client.rs | 86 ++++++++++++++++++- .../src/collator_overseer.rs | 3 +- polkadot/node/core/chain-api/Cargo.toml | 5 +- polkadot/node/core/chain-api/src/lib.rs | 79 +++++++++-------- polkadot/node/core/chain-api/src/tests.rs | 21 +++-- polkadot/node/overseer/src/lib.rs | 4 +- polkadot/node/subsystem-types/Cargo.toml | 1 + polkadot/node/subsystem-types/src/lib.rs | 2 +- .../subsystem-types/src/runtime_client.rs | 57 +++++++++++- 12 files changed, 214 insertions(+), 56 deletions(-) diff --git a/.gitlab/pipeline/zombienet/cumulus.yml b/.gitlab/pipeline/zombienet/cumulus.yml index 3cac67c2966..3e4df000b7f 100644 --- a/.gitlab/pipeline/zombienet/cumulus.yml +++ b/.gitlab/pipeline/zombienet/cumulus.yml @@ -28,7 +28,7 @@ - job: build-push-image-test-parachain artifacts: true variables: - POLKADOT_IMAGE: "docker.io/paritypr/polkadot-debug:master" + POLKADOT_IMAGE: "docker.io/paritypr/polkadot-debug:${DOCKER_IMAGES_VERSION}" GH_DIR: "https://github.com/paritytech/cumulus/tree/${CI_COMMIT_SHORT_SHA}/zombienet/tests" LOCAL_DIR: "/builds/parity/mirrors/polkadot-sdk/cumulus/zombienet/tests" COL_IMAGE: "docker.io/paritypr/test-parachain:${DOCKER_IMAGES_VERSION}" diff --git a/Cargo.lock b/Cargo.lock index bfe24e528eb..26da3b4f825 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4183,6 +4183,7 @@ dependencies = [ "polkadot-core-primitives", "polkadot-network-bridge", "polkadot-node-collation-generation", + "polkadot-node-core-chain-api", "polkadot-node-core-prospective-parachains", "polkadot-node-core-runtime-api", "polkadot-node-network-protocol", @@ -4190,16 +4191,19 @@ dependencies = [ "polkadot-overseer", "polkadot-primitives", "sc-authority-discovery", + "sc-client-api", "sc-network", "sc-network-common", "sc-service", "sc-tracing", "sc-utils", "sp-api", + "sp-blockchain", "sp-consensus", "sp-consensus-babe", "sp-runtime", "substrate-prometheus-endpoint", + "tokio", "tracing", ] @@ -12443,6 +12447,7 @@ dependencies = [ "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", + "polkadot-node-subsystem-types", "polkadot-primitives", "sc-client-api", "sc-consensus-babe", @@ -12851,6 +12856,7 @@ dependencies = [ "smallvec", "sp-api", "sp-authority-discovery", + "sp-blockchain", "sp-consensus-babe", "substrate-prometheus-endpoint", "thiserror", diff --git a/cumulus/client/relay-chain-minimal-node/Cargo.toml b/cumulus/client/relay-chain-minimal-node/Cargo.toml index 53173fb4118..ce76fc5cd6d 100644 --- a/cumulus/client/relay-chain-minimal-node/Cargo.toml +++ b/cumulus/client/relay-chain-minimal-node/Cargo.toml @@ -19,6 +19,7 @@ polkadot-collator-protocol = { path = "../../../polkadot/node/network/collator-p polkadot-network-bridge = { path = "../../../polkadot/node/network/bridge" } polkadot-node-collation-generation = { path = "../../../polkadot/node/collation-generation" } polkadot-node-core-runtime-api = { path = "../../../polkadot/node/core/runtime-api" } +polkadot-node-core-chain-api = { path = "../../../polkadot/node/core/chain-api" } polkadot-node-core-prospective-parachains = { path = "../../../polkadot/node/core/prospective-parachains" } # substrate deps @@ -26,6 +27,7 @@ sc-authority-discovery = { path = "../../../substrate/client/authority-discovery sc-network = { path = "../../../substrate/client/network" } sc-network-common = { path = "../../../substrate/client/network/common" } sc-service = { path = "../../../substrate/client/service" } +sc-client-api = { path = "../../../substrate/client/api" } substrate-prometheus-endpoint = { path = "../../../substrate/utils/prometheus" } sc-tracing = { path = "../../../substrate/client/tracing" } sc-utils = { path = "../../../substrate/client/utils" } @@ -33,6 +35,8 @@ sp-api = { path = "../../../substrate/primitives/api" } sp-consensus-babe = { path = "../../../substrate/primitives/consensus/babe" } sp-consensus = { path = "../../../substrate/primitives/consensus/common" } sp-runtime = { path = "../../../substrate/primitives/runtime" } +sp-blockchain = { path = "../../../substrate/primitives/blockchain" } +tokio = { version = "1.32.0", features = ["macros"] } # cumulus deps cumulus-relay-chain-interface = { path = "../relay-chain-interface" } diff --git a/cumulus/client/relay-chain-minimal-node/src/blockchain_rpc_client.rs b/cumulus/client/relay-chain-minimal-node/src/blockchain_rpc_client.rs index a473b3bced0..c40ca5c858b 100644 --- a/cumulus/client/relay-chain-minimal-node/src/blockchain_rpc_client.rs +++ b/cumulus/client/relay-chain-minimal-node/src/blockchain_rpc_client.rs @@ -20,14 +20,16 @@ use cumulus_relay_chain_interface::{RelayChainError, RelayChainResult}; use cumulus_relay_chain_rpc_interface::RelayChainRpcClient; use futures::{Stream, StreamExt}; use polkadot_core_primitives::{Block, BlockNumber, Hash, Header}; -use polkadot_overseer::RuntimeApiSubsystemClient; +use polkadot_overseer::{ChainApiBackend, RuntimeApiSubsystemClient}; use polkadot_primitives::{ async_backing::{AsyncBackingParams, BackingState}, slashing, vstaging::NodeFeatures, }; use sc_authority_discovery::{AuthorityDiscovery, Error as AuthorityDiscoveryError}; -use sp_api::{ApiError, RuntimeApiInfo}; +use sc_client_api::AuxStore; +use sp_api::{ApiError, BlockT, HeaderT, NumberFor, RuntimeApiInfo}; +use sp_blockchain::Info; #[derive(Clone)] pub struct BlockChainRpcClient { @@ -54,6 +56,64 @@ impl BlockChainRpcClient { } } +#[async_trait::async_trait] +impl ChainApiBackend for BlockChainRpcClient { + async fn header( + &self, + hash: ::Hash, + ) -> sp_blockchain::Result::Header>> { + Ok(self.rpc_client.chain_get_header(Some(hash)).await?) + } + + async fn info(&self) -> sp_blockchain::Result> { + let (best_header_opt, genesis_hash, finalized_head) = futures::try_join!( + self.rpc_client.chain_get_header(None), + self.rpc_client.chain_get_head(Some(0)), + self.rpc_client.chain_get_finalized_head() + )?; + let best_header = best_header_opt.ok_or_else(|| { + RelayChainError::GenericError( + "Unable to retrieve best header from relay chain.".to_string(), + ) + })?; + + let finalized_header = + self.rpc_client.chain_get_header(Some(finalized_head)).await?.ok_or_else(|| { + RelayChainError::GenericError( + "Unable to retrieve finalized header from relay chain.".to_string(), + ) + })?; + Ok(Info { + best_hash: best_header.hash(), + best_number: best_header.number, + genesis_hash, + finalized_hash: finalized_head, + finalized_number: finalized_header.number, + finalized_state: Some((finalized_header.hash(), finalized_header.number)), + number_leaves: 1, + block_gap: None, + }) + } + + async fn number( + &self, + hash: ::Hash, + ) -> sp_blockchain::Result::Header as HeaderT>::Number>> { + Ok(self + .rpc_client + .chain_get_header(Some(hash)) + .await? + .map(|maybe_header| maybe_header.number)) + } + + async fn hash( + &self, + number: NumberFor, + ) -> sp_blockchain::Result::Hash>> { + Ok(self.rpc_client.chain_get_block_hash(number.into()).await?) + } +} + #[async_trait::async_trait] impl RuntimeApiSubsystemClient for BlockChainRpcClient { async fn validators( @@ -403,3 +463,25 @@ impl BlockChainRpcClient { Ok(self.rpc_client.get_finalized_heads_stream()?.boxed()) } } + +// Implementation required by ChainApiSubsystem +// 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") + } +} diff --git a/cumulus/client/relay-chain-minimal-node/src/collator_overseer.rs b/cumulus/client/relay-chain-minimal-node/src/collator_overseer.rs index 945344f85e9..a785a9f6f79 100644 --- a/cumulus/client/relay-chain-minimal-node/src/collator_overseer.rs +++ b/cumulus/client/relay-chain-minimal-node/src/collator_overseer.rs @@ -24,6 +24,7 @@ use polkadot_network_bridge::{ NetworkBridgeTx as NetworkBridgeTxSubsystem, }; use polkadot_node_collation_generation::CollationGenerationSubsystem; +use polkadot_node_core_chain_api::ChainApiSubsystem; use polkadot_node_core_prospective_parachains::ProspectiveParachainsSubsystem; use polkadot_node_core_runtime_api::RuntimeApiSubsystem; use polkadot_node_network_protocol::{ @@ -112,7 +113,7 @@ fn build_overseer( .candidate_backing(DummySubsystem) .candidate_validation(DummySubsystem) .pvf_checker(DummySubsystem) - .chain_api(DummySubsystem) + .chain_api(ChainApiSubsystem::new(runtime_client.clone(), Metrics::register(registry)?)) .collation_generation(CollationGenerationSubsystem::new(Metrics::register(registry)?)) .collator_protocol({ let side = ProtocolSide::Collator { diff --git a/polkadot/node/core/chain-api/Cargo.toml b/polkadot/node/core/chain-api/Cargo.toml index 154fa20e75d..fa824e78ffe 100644 --- a/polkadot/node/core/chain-api/Cargo.toml +++ b/polkadot/node/core/chain-api/Cargo.toml @@ -9,10 +9,9 @@ description = "The Chain API subsystem provides access to chain related utility [dependencies] futures = "0.3.21" gum = { package = "tracing-gum", path = "../../gum" } -sp-blockchain = { path = "../../../../substrate/primitives/blockchain" } -polkadot-primitives = { path = "../../../primitives" } polkadot-node-metrics = { path = "../../metrics" } polkadot-node-subsystem = { path = "../../subsystem" } +polkadot-node-subsystem-types = { path = "../../subsystem-types" } sc-client-api = { path = "../../../../substrate/client/api" } sc-consensus-babe = { path = "../../../../substrate/client/consensus/babe" } @@ -21,5 +20,7 @@ futures = { version = "0.3.21", features = ["thread-pool"] } maplit = "1.0.2" parity-scale-codec = "3.6.1" polkadot-node-primitives = { path = "../../primitives" } +polkadot-primitives = { path = "../../../primitives" } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } sp-core = { path = "../../../../substrate/primitives/core" } +sp-blockchain = { path = "../../../../substrate/primitives/blockchain" } diff --git a/polkadot/node/core/chain-api/src/lib.rs b/polkadot/node/core/chain-api/src/lib.rs index 9b25481d718..7fd5166310f 100644 --- a/polkadot/node/core/chain-api/src/lib.rs +++ b/polkadot/node/core/chain-api/src/lib.rs @@ -35,13 +35,13 @@ use std::sync::Arc; use futures::prelude::*; use sc_client_api::AuxStore; -use sp_blockchain::HeaderBackend; +use futures::stream::StreamExt; use polkadot_node_subsystem::{ messages::ChainApiMessage, overseer, FromOrchestra, OverseerSignal, SpawnedSubsystem, SubsystemError, SubsystemResult, }; -use polkadot_primitives::Block; +use polkadot_node_subsystem_types::ChainApiBackend; mod metrics; use self::metrics::Metrics; @@ -67,7 +67,7 @@ impl ChainApiSubsystem { #[overseer::subsystem(ChainApi, error = SubsystemError, prefix = self::overseer)] impl ChainApiSubsystem where - Client: HeaderBackend + AuxStore + 'static, + Client: ChainApiBackend + AuxStore + 'static, { fn start(self, ctx: Context) -> SpawnedSubsystem { let future = run::(ctx, self) @@ -83,7 +83,7 @@ async fn run( subsystem: ChainApiSubsystem, ) -> SubsystemResult<()> where - Client: HeaderBackend + AuxStore, + Client: ChainApiBackend + AuxStore, { loop { match ctx.recv().await? { @@ -93,13 +93,15 @@ where FromOrchestra::Communication { msg } => match msg { ChainApiMessage::BlockNumber(hash, response_channel) => { let _timer = subsystem.metrics.time_block_number(); - let result = subsystem.client.number(hash).map_err(|e| e.to_string().into()); + let result = + subsystem.client.number(hash).await.map_err(|e| e.to_string().into()); subsystem.metrics.on_request(result.is_ok()); let _ = response_channel.send(result); }, ChainApiMessage::BlockHeader(hash, response_channel) => { let _timer = subsystem.metrics.time_block_header(); - let result = subsystem.client.header(hash).map_err(|e| e.to_string().into()); + let result = + subsystem.client.header(hash).await.map_err(|e| e.to_string().into()); subsystem.metrics.on_request(result.is_ok()); let _ = response_channel.send(result); }, @@ -113,46 +115,51 @@ where ChainApiMessage::FinalizedBlockHash(number, response_channel) => { let _timer = subsystem.metrics.time_finalized_block_hash(); // Note: we don't verify it's finalized - let result = subsystem.client.hash(number).map_err(|e| e.to_string().into()); + let result = + subsystem.client.hash(number).await.map_err(|e| e.to_string().into()); subsystem.metrics.on_request(result.is_ok()); let _ = response_channel.send(result); }, ChainApiMessage::FinalizedBlockNumber(response_channel) => { let _timer = subsystem.metrics.time_finalized_block_number(); - let result = subsystem.client.info().finalized_number; - // always succeeds - subsystem.metrics.on_request(true); - let _ = response_channel.send(Ok(result)); + let result = subsystem + .client + .info() + .await + .map_err(|e| e.to_string().into()) + .map(|info| info.finalized_number); + subsystem.metrics.on_request(result.is_ok()); + let _ = response_channel.send(result); }, ChainApiMessage::Ancestors { hash, k, response_channel } => { let _timer = subsystem.metrics.time_ancestors(); gum::trace!(target: LOG_TARGET, hash=%hash, k=k, "ChainApiMessage::Ancestors"); - let mut hash = hash; - - let next_parent = core::iter::from_fn(|| { - let maybe_header = subsystem.client.header(hash); - match maybe_header { - // propagate the error - Err(e) => { - let e = e.to_string().into(); - Some(Err(e)) - }, - // fewer than `k` ancestors are available - Ok(None) => None, - Ok(Some(header)) => { - // stop at the genesis header. - if header.number == 0 { - None - } else { - hash = header.parent_hash; - Some(Ok(hash)) - } - }, - } - }); - - let result = next_parent.take(k).collect::, _>>(); + let next_parent_stream = futures::stream::unfold( + (hash, subsystem.client.clone()), + |(hash, client)| async move { + let maybe_header = client.header(hash).await; + match maybe_header { + // propagate the error + Err(e) => { + let e = e.to_string().into(); + Some((Err(e), (hash, client))) + }, + // fewer than `k` ancestors are available + Ok(None) => None, + Ok(Some(header)) => { + // stop at the genesis header. + if header.number == 0 { + None + } else { + Some((Ok(header.parent_hash), (header.parent_hash, client))) + } + }, + } + }, + ); + + let result = next_parent_stream.take(k).try_collect().await; subsystem.metrics.on_request(result.is_ok()); let _ = response_channel.send(result); }, diff --git a/polkadot/node/core/chain-api/src/tests.rs b/polkadot/node/core/chain-api/src/tests.rs index 331a4f9ba82..eae8f6fa4ac 100644 --- a/polkadot/node/core/chain-api/src/tests.rs +++ b/polkadot/node/core/chain-api/src/tests.rs @@ -22,7 +22,8 @@ use std::collections::BTreeMap; use polkadot_node_primitives::BlockWeight; use polkadot_node_subsystem_test_helpers::{make_subsystem_context, TestSubsystemContextHandle}; -use polkadot_primitives::{BlockNumber, Hash, Header}; +use polkadot_node_subsystem_types::ChainApiBackend; +use polkadot_primitives::{Block, BlockNumber, Hash, Header}; use sp_blockchain::Info as BlockInfo; use sp_core::testing::TaskExecutor; @@ -110,7 +111,7 @@ fn last_key_value(map: &BTreeMap) -> (K, V) { map.iter().last().map(|(k, v)| (k.clone(), v.clone())).unwrap() } -impl HeaderBackend for TestClient { +impl sp_blockchain::HeaderBackend for TestClient { fn info(&self) -> BlockInfo { let genesis_hash = self.blocks.iter().next().map(|(h, _)| *h).unwrap(); let (best_hash, best_number) = last_key_value(&self.blocks); @@ -191,8 +192,8 @@ fn request_block_number() { async move { let zero = Hash::zero(); let test_cases = [ - (TWO, client.number(TWO).unwrap()), - (zero, client.number(zero).unwrap()), // not here + (TWO, client.number(TWO).await.unwrap()), + (zero, client.number(zero).await.unwrap()), // not here ]; for (hash, expected) in &test_cases { let (tx, rx) = oneshot::channel(); @@ -217,8 +218,10 @@ fn request_block_header() { test_harness(|client, mut sender| { async move { const NOT_HERE: Hash = Hash::repeat_byte(0x5); - let test_cases = - [(TWO, client.header(TWO).unwrap()), (NOT_HERE, client.header(NOT_HERE).unwrap())]; + let test_cases = [ + (TWO, client.header(TWO).await.unwrap()), + (NOT_HERE, client.header(NOT_HERE).await.unwrap()), + ]; for (hash, expected) in &test_cases { let (tx, rx) = oneshot::channel(); @@ -270,8 +273,8 @@ fn request_finalized_hash() { test_harness(|client, mut sender| { async move { let test_cases = [ - (1, client.hash(1).unwrap()), // not here - (2, client.hash(2).unwrap()), + (1, client.hash(1).await.unwrap()), // not here + (2, client.hash(2).await.unwrap()), ]; for (number, expected) in &test_cases { let (tx, rx) = oneshot::channel(); @@ -297,7 +300,7 @@ fn request_last_finalized_number() { async move { let (tx, rx) = oneshot::channel(); - let expected = client.info().finalized_number; + let expected = client.info().await.unwrap().finalized_number; sender .send(FromOrchestra::Communication { msg: ChainApiMessage::FinalizedBlockNumber(tx), diff --git a/polkadot/node/overseer/src/lib.rs b/polkadot/node/overseer/src/lib.rs index 5207bb830d8..da99546a44f 100644 --- a/polkadot/node/overseer/src/lib.rs +++ b/polkadot/node/overseer/src/lib.rs @@ -87,8 +87,8 @@ use polkadot_node_subsystem_types::messages::{ pub use polkadot_node_subsystem_types::{ errors::{SubsystemError, SubsystemResult}, - jaeger, ActivatedLeaf, ActiveLeavesUpdate, OverseerSignal, RuntimeApiSubsystemClient, - UnpinHandle, + jaeger, ActivatedLeaf, ActiveLeavesUpdate, ChainApiBackend, OverseerSignal, + RuntimeApiSubsystemClient, UnpinHandle, }; pub mod metrics; diff --git a/polkadot/node/subsystem-types/Cargo.toml b/polkadot/node/subsystem-types/Cargo.toml index 9fd3775da59..8e345cf222c 100644 --- a/polkadot/node/subsystem-types/Cargo.toml +++ b/polkadot/node/subsystem-types/Cargo.toml @@ -17,6 +17,7 @@ polkadot-node-jaeger = { path = "../jaeger" } orchestra = { version = "0.3.3", default-features = false, features=["futures_channel"] } sc-network = { path = "../../../substrate/client/network" } sp-api = { path = "../../../substrate/primitives/api" } +sp-blockchain = { path = "../../../substrate/primitives/blockchain" } sp-consensus-babe = { path = "../../../substrate/primitives/consensus/babe" } sp-authority-discovery = { path = "../../../substrate/primitives/authority-discovery" } sc-client-api = { path = "../../../substrate/client/api" } diff --git a/polkadot/node/subsystem-types/src/lib.rs b/polkadot/node/subsystem-types/src/lib.rs index e3d6e4decf2..cd39aa03e56 100644 --- a/polkadot/node/subsystem-types/src/lib.rs +++ b/polkadot/node/subsystem-types/src/lib.rs @@ -40,7 +40,7 @@ pub mod errors; pub mod messages; mod runtime_client; -pub use runtime_client::{DefaultSubsystemClient, RuntimeApiSubsystemClient}; +pub use runtime_client::{ChainApiBackend, DefaultSubsystemClient, RuntimeApiSubsystemClient}; pub use jaeger::*; pub use polkadot_node_jaeger as jaeger; diff --git a/polkadot/node/subsystem-types/src/runtime_client.rs b/polkadot/node/subsystem-types/src/runtime_client.rs index 8369fd215f4..36e3365cf08 100644 --- a/polkadot/node/subsystem-types/src/runtime_client.rs +++ b/polkadot/node/subsystem-types/src/runtime_client.rs @@ -18,17 +18,70 @@ use async_trait::async_trait; use polkadot_primitives::{ async_backing, runtime_api::ParachainHost, slashing, vstaging, Block, BlockNumber, CandidateCommitments, CandidateEvent, CandidateHash, CommittedCandidateReceipt, CoreState, - DisputeState, ExecutorParams, GroupRotationInfo, Hash, Id, InboundDownwardMessage, + DisputeState, ExecutorParams, GroupRotationInfo, Hash, Header, Id, InboundDownwardMessage, InboundHrmpMessage, OccupiedCoreAssumption, PersistedValidationData, PvfCheckStatement, ScrapedOnChainVotes, SessionIndex, SessionInfo, ValidationCode, ValidationCodeHash, ValidatorId, ValidatorIndex, ValidatorSignature, }; +use sc_client_api::HeaderBackend; use sc_transaction_pool_api::OffchainTransactionPoolFactory; -use sp_api::{ApiError, ApiExt, ProvideRuntimeApi}; +use sp_api::{ApiError, ApiExt, HeaderT, NumberFor, ProvideRuntimeApi}; use sp_authority_discovery::AuthorityDiscoveryApi; +use sp_blockchain::Info; use sp_consensus_babe::{BabeApi, Epoch}; use std::{collections::BTreeMap, sync::Arc}; +/// Offers header utilities. +/// +/// This is a async wrapper trait for ['HeaderBackend'] to be used with the +/// `ChainApiSubsystem`. +// This trait was introduced to suit the needs of collators. Depending on their operating mode, they +// might not have a client of the relay chain that can supply a synchronous HeaderBackend +// implementation. +#[async_trait] +pub trait ChainApiBackend: Send + Sync { + /// Get block header. Returns `None` if block is not found. + async fn header(&self, hash: Hash) -> sp_blockchain::Result>; + /// Get blockchain info. + async fn info(&self) -> sp_blockchain::Result>; + /// Get block number by hash. Returns `None` if the header is not in the chain. + async fn number( + &self, + hash: Hash, + ) -> sp_blockchain::Result::Number>>; + /// Get block hash by number. Returns `None` if the header is not in the chain. + async fn hash(&self, number: NumberFor) -> sp_blockchain::Result>; +} + +#[async_trait] +impl ChainApiBackend for T +where + T: HeaderBackend, +{ + /// Get block header. Returns `None` if block is not found. + async fn header(&self, hash: Hash) -> sp_blockchain::Result> { + HeaderBackend::header(self, hash) + } + + /// Get blockchain info. + async fn info(&self) -> sp_blockchain::Result> { + Ok(HeaderBackend::info(self)) + } + + /// Get block number by hash. Returns `None` if the header is not in the chain. + async fn number( + &self, + hash: Hash, + ) -> sp_blockchain::Result::Number>> { + HeaderBackend::number(self, hash) + } + + /// Get block hash by number. Returns `None` if the header is not in the chain. + async fn hash(&self, number: NumberFor) -> sp_blockchain::Result> { + HeaderBackend::hash(self, number) + } +} + /// Exposes all runtime calls that are used by the runtime API subsystem. #[async_trait] pub trait RuntimeApiSubsystemClient { -- GitLab From ec189333845fffebd45bf023b0797d6a4f121d8d Mon Sep 17 00:00:00 2001 From: Joshy Orndorff Date: Wed, 22 Nov 2023 17:21:20 -0500 Subject: [PATCH 044/102] Remove `#[macro_use]` annotation from `mod service` in all nodes. (#2456) This PR removes `#[macro_use]` from the service module in each of the Substrate nodes in the repo. * Parachain Template * Polkadot Parachain * Minimal Node * Node Template * Kitchen Sink Node IDK why this annotation was present, maybe from when we had the `new_partial!` macro? --------- Co-authored-by: Joshy Orndorff --- cumulus/parachain-template/node/src/main.rs | 3 +-- cumulus/polkadot-parachain/src/main.rs | 3 +-- substrate/bin/minimal/node/src/main.rs | 3 +-- substrate/bin/node-template/node/src/main.rs | 5 ++--- substrate/bin/node/cli/src/lib.rs | 6 ++---- 5 files changed, 7 insertions(+), 13 deletions(-) diff --git a/cumulus/parachain-template/node/src/main.rs b/cumulus/parachain-template/node/src/main.rs index ba9f28b354f..12738a6793c 100644 --- a/cumulus/parachain-template/node/src/main.rs +++ b/cumulus/parachain-template/node/src/main.rs @@ -3,11 +3,10 @@ #![warn(missing_docs)] mod chain_spec; -#[macro_use] -mod service; mod cli; mod command; mod rpc; +mod service; fn main() -> sc_cli::Result<()> { command::run() diff --git a/cumulus/polkadot-parachain/src/main.rs b/cumulus/polkadot-parachain/src/main.rs index e40af8128f7..26d7dae4b8a 100644 --- a/cumulus/polkadot-parachain/src/main.rs +++ b/cumulus/polkadot-parachain/src/main.rs @@ -20,11 +20,10 @@ #![warn(unused_extern_crates)] mod chain_spec; -#[macro_use] -mod service; mod cli; mod command; mod rpc; +mod service; fn main() -> sc_cli::Result<()> { command::run() diff --git a/substrate/bin/minimal/node/src/main.rs b/substrate/bin/minimal/node/src/main.rs index 900651fd1fd..3cf7d98311e 100644 --- a/substrate/bin/minimal/node/src/main.rs +++ b/substrate/bin/minimal/node/src/main.rs @@ -19,11 +19,10 @@ #![warn(missing_docs)] mod chain_spec; -#[macro_use] -mod service; mod cli; mod command; mod rpc; +mod service; fn main() -> sc_cli::Result<()> { command::run() diff --git a/substrate/bin/node-template/node/src/main.rs b/substrate/bin/node-template/node/src/main.rs index 426cbabb6fb..8918dd43a01 100644 --- a/substrate/bin/node-template/node/src/main.rs +++ b/substrate/bin/node-template/node/src/main.rs @@ -1,13 +1,12 @@ //! Substrate Node Template CLI library. #![warn(missing_docs)] -mod chain_spec; -#[macro_use] -mod service; mod benchmarking; +mod chain_spec; mod cli; mod command; mod rpc; +mod service; fn main() -> sc_cli::Result<()> { command::run() diff --git a/substrate/bin/node/cli/src/lib.rs b/substrate/bin/node/cli/src/lib.rs index 2fe238ef316..0ff544932a9 100644 --- a/substrate/bin/node/cli/src/lib.rs +++ b/substrate/bin/node/cli/src/lib.rs @@ -30,16 +30,14 @@ #![warn(missing_docs)] -pub mod chain_spec; - -#[macro_use] -pub mod service; #[cfg(feature = "cli")] mod benchmarking; +pub mod chain_spec; #[cfg(feature = "cli")] mod cli; #[cfg(feature = "cli")] mod command; +pub mod service; #[cfg(feature = "cli")] pub use cli::*; -- GitLab From 2d09e83d0703ca6bf6aba773e80ea14576887ac7 Mon Sep 17 00:00:00 2001 From: Liam Aharon Date: Thu, 23 Nov 2023 15:18:24 +0400 Subject: [PATCH 045/102] Add `on-chain-release-build` feature for Collectives Westend (#2463) Collectives Westend is missing an `on-chain-release-build` feature flag. --- .../collectives-westend/Cargo.toml | 108 ++++++++++-------- 1 file changed, 60 insertions(+), 48 deletions(-) diff --git a/cumulus/parachains/runtimes/collectives/collectives-westend/Cargo.toml b/cumulus/parachains/runtimes/collectives/collectives-westend/Cargo.toml index 94f2de33e90..79d6c697b5f 100644 --- a/cumulus/parachains/runtimes/collectives/collectives-westend/Cargo.toml +++ b/cumulus/parachains/runtimes/collectives/collectives-westend/Cargo.toml @@ -7,69 +7,76 @@ license = "Apache-2.0" description = "Westend Collectives Parachain Runtime" [dependencies] -codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ + "derive", + "max-encoded-len", +] } hex-literal = { version = "0.4.1" } log = { version = "0.4.20", default-features = false } -scale-info = { version = "2.10.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.10.0", default-features = false, features = [ + "derive", +] } smallvec = "1.11.0" # Substrate -frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true} -frame-executive = { path = "../../../../../substrate/frame/executive", default-features = false} -frame-support = { path = "../../../../../substrate/frame/support", default-features = false} -frame-system = { path = "../../../../../substrate/frame/system", default-features = false} -frame-system-benchmarking = { path = "../../../../../substrate/frame/system/benchmarking", default-features = false, optional = true} -frame-system-rpc-runtime-api = { path = "../../../../../substrate/frame/system/rpc/runtime-api", default-features = false} -frame-try-runtime = { path = "../../../../../substrate/frame/try-runtime", default-features = false, optional = true} -pallet-alliance = { path = "../../../../../substrate/frame/alliance", default-features = false} -pallet-aura = { path = "../../../../../substrate/frame/aura", default-features = false} -pallet-authorship = { path = "../../../../../substrate/frame/authorship", default-features = false} -pallet-balances = { path = "../../../../../substrate/frame/balances", default-features = false} -pallet-collective = { path = "../../../../../substrate/frame/collective", default-features = false} -pallet-multisig = { path = "../../../../../substrate/frame/multisig", default-features = false} +frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true } +frame-executive = { path = "../../../../../substrate/frame/executive", default-features = false } +frame-support = { path = "../../../../../substrate/frame/support", default-features = false } +frame-system = { path = "../../../../../substrate/frame/system", default-features = false } +frame-system-benchmarking = { path = "../../../../../substrate/frame/system/benchmarking", default-features = false, optional = true } +frame-system-rpc-runtime-api = { path = "../../../../../substrate/frame/system/rpc/runtime-api", default-features = false } +frame-try-runtime = { path = "../../../../../substrate/frame/try-runtime", default-features = false, optional = true } +pallet-alliance = { path = "../../../../../substrate/frame/alliance", default-features = false } +pallet-aura = { path = "../../../../../substrate/frame/aura", default-features = false } +pallet-authorship = { path = "../../../../../substrate/frame/authorship", default-features = false } +pallet-balances = { path = "../../../../../substrate/frame/balances", default-features = false } +pallet-collective = { path = "../../../../../substrate/frame/collective", default-features = false } +pallet-multisig = { path = "../../../../../substrate/frame/multisig", default-features = false } pallet-preimage = { path = "../../../../../substrate/frame/preimage", default-features = false } -pallet-proxy = { path = "../../../../../substrate/frame/proxy", default-features = false} +pallet-proxy = { path = "../../../../../substrate/frame/proxy", default-features = false } pallet-scheduler = { path = "../../../../../substrate/frame/scheduler", default-features = false } -pallet-session = { path = "../../../../../substrate/frame/session", default-features = false} -pallet-timestamp = { path = "../../../../../substrate/frame/timestamp", default-features = false} -pallet-transaction-payment = { path = "../../../../../substrate/frame/transaction-payment", default-features = false} -pallet-transaction-payment-rpc-runtime-api = { path = "../../../../../substrate/frame/transaction-payment/rpc/runtime-api", default-features = false} -pallet-utility = { path = "../../../../../substrate/frame/utility", default-features = false} -pallet-referenda = { path = "../../../../../substrate/frame/referenda", default-features = false} -pallet-ranked-collective = { path = "../../../../../substrate/frame/ranked-collective", default-features = false} -pallet-core-fellowship = { path = "../../../../../substrate/frame/core-fellowship", default-features = false} -pallet-salary = { path = "../../../../../substrate/frame/salary", default-features = false} -sp-api = { path = "../../../../../substrate/primitives/api", default-features = false} +pallet-session = { path = "../../../../../substrate/frame/session", default-features = false } +pallet-timestamp = { path = "../../../../../substrate/frame/timestamp", default-features = false } +pallet-transaction-payment = { path = "../../../../../substrate/frame/transaction-payment", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { path = "../../../../../substrate/frame/transaction-payment/rpc/runtime-api", default-features = false } +pallet-utility = { path = "../../../../../substrate/frame/utility", default-features = false } +pallet-referenda = { path = "../../../../../substrate/frame/referenda", default-features = false } +pallet-ranked-collective = { path = "../../../../../substrate/frame/ranked-collective", default-features = false } +pallet-core-fellowship = { path = "../../../../../substrate/frame/core-fellowship", default-features = false } +pallet-salary = { path = "../../../../../substrate/frame/salary", default-features = false } +sp-api = { path = "../../../../../substrate/primitives/api", default-features = false } sp-arithmetic = { path = "../../../../../substrate/primitives/arithmetic", default-features = false } -sp-block-builder = { path = "../../../../../substrate/primitives/block-builder", default-features = false} -sp-consensus-aura = { path = "../../../../../substrate/primitives/consensus/aura", default-features = false} -sp-core = { path = "../../../../../substrate/primitives/core", default-features = false} +sp-block-builder = { path = "../../../../../substrate/primitives/block-builder", default-features = false } +sp-consensus-aura = { path = "../../../../../substrate/primitives/consensus/aura", default-features = false } +sp-core = { path = "../../../../../substrate/primitives/core", default-features = false } sp-genesis-builder = { path = "../../../../../substrate/primitives/genesis-builder", default-features = false } -sp-inherents = { path = "../../../../../substrate/primitives/inherents", default-features = false} -sp-offchain = { path = "../../../../../substrate/primitives/offchain", default-features = false} -sp-runtime = { path = "../../../../../substrate/primitives/runtime", default-features = false} -sp-session = { path = "../../../../../substrate/primitives/session", default-features = false} -sp-std = { path = "../../../../../substrate/primitives/std", default-features = false} -sp-storage = { path = "../../../../../substrate/primitives/storage", default-features = false} -sp-transaction-pool = { path = "../../../../../substrate/primitives/transaction-pool", default-features = false} -sp-version = { path = "../../../../../substrate/primitives/version", default-features = false} +sp-inherents = { path = "../../../../../substrate/primitives/inherents", default-features = false } +sp-offchain = { path = "../../../../../substrate/primitives/offchain", default-features = false } +sp-runtime = { path = "../../../../../substrate/primitives/runtime", default-features = false } +sp-session = { path = "../../../../../substrate/primitives/session", default-features = false } +sp-std = { path = "../../../../../substrate/primitives/std", default-features = false } +sp-storage = { path = "../../../../../substrate/primitives/storage", default-features = false } +sp-transaction-pool = { path = "../../../../../substrate/primitives/transaction-pool", default-features = false } +sp-version = { path = "../../../../../substrate/primitives/version", default-features = false } # Polkadot -pallet-xcm = { path = "../../../../../polkadot/xcm/pallet-xcm", default-features = false} -polkadot-core-primitives = { path = "../../../../../polkadot/core-primitives", default-features = false} -polkadot-parachain-primitives = { path = "../../../../../polkadot/parachain", default-features = false} -polkadot-runtime-common = { path = "../../../../../polkadot/runtime/common", default-features = false} -xcm = { package = "staging-xcm", path = "../../../../../polkadot/xcm", default-features = false} -xcm-builder = { package = "staging-xcm-builder", path = "../../../../../polkadot/xcm/xcm-builder", default-features = false} -xcm-executor = { package = "staging-xcm-executor", path = "../../../../../polkadot/xcm/xcm-executor", default-features = false} -westend-runtime-constants = { path = "../../../../../polkadot/runtime/westend/constants", default-features = false} +pallet-xcm = { path = "../../../../../polkadot/xcm/pallet-xcm", default-features = false } +polkadot-core-primitives = { path = "../../../../../polkadot/core-primitives", default-features = false } +polkadot-parachain-primitives = { path = "../../../../../polkadot/parachain", default-features = false } +polkadot-runtime-common = { path = "../../../../../polkadot/runtime/common", default-features = false } +xcm = { package = "staging-xcm", path = "../../../../../polkadot/xcm", default-features = false } +xcm-builder = { package = "staging-xcm-builder", path = "../../../../../polkadot/xcm/xcm-builder", default-features = false } +xcm-executor = { package = "staging-xcm-executor", path = "../../../../../polkadot/xcm/xcm-executor", default-features = false } +westend-runtime-constants = { path = "../../../../../polkadot/runtime/westend/constants", default-features = false } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } pallet-message-queue = { path = "../../../../../substrate/frame/message-queue", default-features = false } cumulus-pallet-dmp-queue = { path = "../../../../pallets/dmp-queue", default-features = false } -cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = ["parameterized-consensus-hook",] } -cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false} +cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = [ + "parameterized-consensus-hook", +] } +cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false } cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } @@ -84,7 +91,7 @@ testnets-common = { path = "../../../testnets-common", default-features = false substrate-wasm-builder = { path = "../../../../../substrate/utils/wasm-builder", optional = true } [dev-dependencies] -sp-io = { path = "../../../../../substrate/primitives/io", features = [ "std" ]} +sp-io = { path = "../../../../../substrate/primitives/io", features = ["std"] } [features] default = [ "std" ] @@ -228,3 +235,8 @@ std = [ ] experimental = [ "pallet-aura/experimental" ] + +# A feature that should be enabled when the runtime should be built for on-chain +# deployment. This will disable stuff that shouldn't be part of the on-chain wasm +# to make it smaller like logging for example. +on-chain-release-build = [ "sp-api/disable-logging" ] -- GitLab From 12062f6a3a75a36e6e61836ab15c5926d9773583 Mon Sep 17 00:00:00 2001 From: Liam Aharon Date: Thu, 23 Nov 2023 17:52:06 +0400 Subject: [PATCH 046/102] CI: Disable runtime upgrade spec name check on Westend Asset Hub and fix Staking pallet migration (#2447) Westend Asset Hub currently failing because the spec name is being changed next runtime upgrade (https://gitlab.parity.io/parity/mirrors/polkadot-sdk/-/jobs/4413125). This also fixes an idempotency issue with a staking pallet migration. Similar issues will be caught automatically now that we've also updated to try-runtime-cli v0.5.0 which checks for idempotency issues. This also enables try-state checks running in the CI. --- .gitlab/pipeline/check.yml | 13 +++++++------ substrate/frame/staking/src/migrations.rs | 12 +----------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/.gitlab/pipeline/check.yml b/.gitlab/pipeline/check.yml index 429491fb174..b2f2efc5e66 100644 --- a/.gitlab/pipeline/check.yml +++ b/.gitlab/pipeline/check.yml @@ -101,16 +101,16 @@ check-rust-feature-propagation: export RUST_LOG=remote-ext=debug,runtime=debug echo "---------- Downloading try-runtime CLI ----------" - curl -sL https://github.com/paritytech/try-runtime-cli/releases/download/v0.3.3/try-runtime-x86_64-unknown-linux-musl -o try-runtime + curl -sL https://github.com/paritytech/try-runtime-cli/releases/download/v0.5.0/try-runtime-x86_64-unknown-linux-musl -o try-runtime chmod +x ./try-runtime echo "---------- Building ${PACKAGE} runtime ----------" time cargo build --release --locked -p "$PACKAGE" --features try-runtime echo "---------- Executing on-runtime-upgrade for ${NETWORK} ----------" - time ./try-runtime \ + time ./try-runtime ${COMMAND_EXTRA_ARGS} \ --runtime ./target/release/wbuild/"$PACKAGE"/"$WASM" \ - on-runtime-upgrade --checks=pre-and-post ${EXTRA_ARGS} live --uri ${URI} + on-runtime-upgrade --disable-spec-version-check --checks=all ${SUBCOMMAND_EXTRA_ARGS} live --uri ${URI} # Check runtime migrations for Parity managed relay chains check-runtime-migration-westend: @@ -124,7 +124,7 @@ check-runtime-migration-westend: PACKAGE: "westend-runtime" WASM: "westend_runtime.compact.compressed.wasm" URI: "wss://westend-try-runtime-node.parity-chains.parity.io:443" - EXTRA_ARGS: "--no-weight-warnings" + SUBCOMMAND_EXTRA_ARGS: "--no-weight-warnings" check-runtime-migration-rococo: stage: check @@ -137,7 +137,7 @@ check-runtime-migration-rococo: PACKAGE: "rococo-runtime" WASM: "rococo_runtime.compact.compressed.wasm" URI: "wss://rococo-try-runtime-node.parity-chains.parity.io:443" - EXTRA_ARGS: "--no-weight-warnings" + SUBCOMMAND_EXTRA_ARGS: "--no-weight-warnings" # Check runtime migrations for Parity managed asset hub chains check-runtime-migration-asset-hub-westend: @@ -151,7 +151,7 @@ check-runtime-migration-asset-hub-westend: PACKAGE: "asset-hub-westend-runtime" WASM: "asset_hub_westend_runtime.compact.compressed.wasm" URI: "wss://westend-asset-hub-rpc.polkadot.io:443" - + check-runtime-migration-asset-hub-rococo: stage: check extends: @@ -214,6 +214,7 @@ check-runtime-migration-collectives-westend: PACKAGE: "collectives-westend-runtime" WASM: "collectives_westend_runtime.compact.compressed.wasm" URI: "wss://westend-collectives-rpc.polkadot.io:443" + COMMAND_EXTRA_ARGS: "--disable-spec-name-check" find-fail-ci-phrase: stage: check diff --git a/substrate/frame/staking/src/migrations.rs b/substrate/frame/staking/src/migrations.rs index 84b00254126..311e9667ceb 100644 --- a/substrate/frame/staking/src/migrations.rs +++ b/substrate/frame/staking/src/migrations.rs @@ -81,20 +81,10 @@ pub mod v14 { } } - #[cfg(feature = "try-runtime")] - fn pre_upgrade() -> Result, TryRuntimeError> { - frame_support::ensure!( - Pallet::::on_chain_storage_version() == 13, - "Required v13 before upgrading to v14." - ); - - Ok(Default::default()) - } - #[cfg(feature = "try-runtime")] fn post_upgrade(_state: Vec) -> Result<(), TryRuntimeError> { frame_support::ensure!( - Pallet::::on_chain_storage_version() == 14, + Pallet::::on_chain_storage_version() >= 14, "v14 not applied" ); Ok(()) -- GitLab From 21f1811c6600d8a7fe043592ff34dcb79284d583 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 23 Nov 2023 14:52:46 +0100 Subject: [PATCH 047/102] sp-api: Move macro related re-exports to `__private` (#2446) This moves the macro related re-exports to `__private` to make it more obvious for downstream users that they are using an internal api. --------- Co-authored-by: command-bot <> --- Cargo.lock | 10 ++- .../relay-chain-rpc-interface/Cargo.toml | 1 + .../src/rpc_client.rs | 2 +- cumulus/pallets/xcmp-queue/src/tests.rs | 2 +- polkadot/node/service/src/lib.rs | 2 +- substrate/client/api/src/call_executor.rs | 4 +- substrate/client/api/src/in_mem.rs | 3 +- substrate/client/consensus/beefy/src/lib.rs | 4 +- .../client/consensus/beefy/src/worker.rs | 7 +- substrate/client/executor/src/wasm_runtime.rs | 15 ++-- .../merkle-mountain-range/rpc/src/lib.rs | 4 +- substrate/client/rpc-spec-v2/Cargo.toml | 2 + .../client/rpc-spec-v2/src/archive/archive.rs | 4 +- .../src/chain_head/chain_head_storage.rs | 2 +- .../rpc-spec-v2/src/chain_head/test_utils.rs | 7 +- .../rpc-spec-v2/src/chain_head/tests.rs | 2 +- substrate/client/tracing/Cargo.toml | 1 + substrate/client/tracing/src/block/mod.rs | 3 +- substrate/frame/beefy-mmr/src/lib.rs | 3 +- .../frame/contracts/src/storage/meter.rs | 3 +- substrate/frame/nfts/runtime-api/Cargo.toml | 7 +- substrate/frame/nfts/runtime-api/src/lib.rs | 2 +- .../support/test/tests/construct_runtime.rs | 2 +- substrate/primitives/api/Cargo.toml | 16 ++-- .../primitives/api/proc-macro/src/utils.rs | 6 +- substrate/primitives/api/src/lib.rs | 80 +++++++++++-------- .../primitives/consensus/beefy/Cargo.toml | 16 ++-- .../primitives/consensus/beefy/src/mmr.rs | 3 +- .../frame/benchmarking-cli/src/block/bench.rs | 8 +- .../benchmarking-cli/src/storage/write.rs | 2 +- 30 files changed, 124 insertions(+), 99 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 26da3b4f825..1fe9d1b8192 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1493,8 +1493,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" dependencies = [ "bitcoin_hashes", - "rand 0.7.3", - "rand_core 0.5.1", + "rand 0.8.5", + "rand_core 0.6.4", "serde", "unicode-normalization", ] @@ -4237,6 +4237,7 @@ dependencies = [ "sp-runtime", "sp-state-machine", "sp-storage 13.0.0", + "sp-version", "thiserror", "tokio", "tokio-util", @@ -10423,6 +10424,7 @@ dependencies = [ "pallet-nfts", "parity-scale-codec", "sp-api", + "sp-std 8.0.0", ] [[package]] @@ -16124,6 +16126,7 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-core", + "sp-externalities 0.19.0", "sp-maybe-compressed-blob", "sp-rpc", "sp-runtime", @@ -16357,6 +16360,7 @@ dependencies = [ "lazy_static", "libc", "log", + "parity-scale-codec", "parking_lot 0.12.1", "regex", "rustc-hash", @@ -20011,7 +20015,7 @@ checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", "digest 0.10.7", - "rand 0.7.3", + "rand 0.8.5", "static_assertions", ] diff --git a/cumulus/client/relay-chain-rpc-interface/Cargo.toml b/cumulus/client/relay-chain-rpc-interface/Cargo.toml index 93fe57145b0..0159cade23f 100644 --- a/cumulus/client/relay-chain-rpc-interface/Cargo.toml +++ b/cumulus/client/relay-chain-rpc-interface/Cargo.toml @@ -20,6 +20,7 @@ sp-authority-discovery = { path = "../../../substrate/primitives/authority-disco sp-state-machine = { path = "../../../substrate/primitives/state-machine" } sp-storage = { path = "../../../substrate/primitives/storage" } sp-runtime = { path = "../../../substrate/primitives/runtime" } +sp-version = { path = "../../../substrate/primitives/version" } sc-client-api = { path = "../../../substrate/client/api" } sc-rpc-api = { path = "../../../substrate/client/rpc-api" } sc-service = { path = "../../../substrate/client/service" } diff --git a/cumulus/client/relay-chain-rpc-interface/src/rpc_client.rs b/cumulus/client/relay-chain-rpc-interface/src/rpc_client.rs index cc993c6ff9f..8e0d5fae677 100644 --- a/cumulus/client/relay-chain-rpc-interface/src/rpc_client.rs +++ b/cumulus/client/relay-chain-rpc-interface/src/rpc_client.rs @@ -46,10 +46,10 @@ use cumulus_relay_chain_interface::{RelayChainError, RelayChainResult}; use sc_client_api::StorageData; use sc_rpc_api::{state::ReadProof, system::Health}; use sc_service::TaskManager; -use sp_api::RuntimeVersion; use sp_consensus_babe::Epoch; use sp_core::sp_std::collections::btree_map::BTreeMap; use sp_storage::StorageKey; +use sp_version::RuntimeVersion; use crate::{ light_client_worker::{build_smoldot_client, LightClientRpcWorker}, diff --git a/cumulus/pallets/xcmp-queue/src/tests.rs b/cumulus/pallets/xcmp-queue/src/tests.rs index 30dba6ead34..f88dedc1ece 100644 --- a/cumulus/pallets/xcmp-queue/src/tests.rs +++ b/cumulus/pallets/xcmp-queue/src/tests.rs @@ -155,7 +155,7 @@ fn xcm_enqueueing_broken_xcm_works() { .take(20) .collect::>(), ); - EnqueuedMessages::set(&vec![]); + EnqueuedMessages::take(); // But if we do it all in one page, then it only uses the first 10: XcmpQueue::handle_xcmp_messages( diff --git a/polkadot/node/service/src/lib.rs b/polkadot/node/service/src/lib.rs index 0ed7940b3e8..c03835b2a4b 100644 --- a/polkadot/node/service/src/lib.rs +++ b/polkadot/node/service/src/lib.rs @@ -98,7 +98,7 @@ pub use service::{ ChainSpec, Configuration, Error as SubstrateServiceError, PruningMode, Role, RuntimeGenesis, TFullBackend, TFullCallExecutor, TFullClient, TaskManager, TransactionPoolOptions, }; -pub use sp_api::{ApiRef, ConstructRuntimeApi, Core as CoreApi, ProvideRuntimeApi, StateBackend}; +pub use sp_api::{ApiRef, ConstructRuntimeApi, Core as CoreApi, ProvideRuntimeApi}; pub use sp_runtime::{ generic, traits::{self as runtime_traits, BlakeTwo256, Block as BlockT, Header as HeaderT, NumberFor}, diff --git a/substrate/client/api/src/call_executor.rs b/substrate/client/api/src/call_executor.rs index 49b51ccc943..d131cbcec00 100644 --- a/substrate/client/api/src/call_executor.rs +++ b/substrate/client/api/src/call_executor.rs @@ -21,12 +21,12 @@ use sc_executor::{RuntimeVersion, RuntimeVersionOf}; use sp_core::traits::CallContext; use sp_externalities::Extensions; -use sp_runtime::traits::Block as BlockT; +use sp_runtime::traits::{Block as BlockT, HashingFor}; use sp_state_machine::{OverlayedChanges, StorageProof}; use std::cell::RefCell; use crate::execution_extensions::ExecutionExtensions; -use sp_api::{HashingFor, ProofRecorder}; +use sp_api::ProofRecorder; /// Executor Provider pub trait ExecutorProvider { diff --git a/substrate/client/api/src/in_mem.rs b/substrate/client/api/src/in_mem.rs index 807bdf0e334..b933ed1f17e 100644 --- a/substrate/client/api/src/in_mem.rs +++ b/substrate/client/api/src/in_mem.rs @@ -812,9 +812,8 @@ pub fn check_genesis_storage(storage: &Storage) -> sp_blockchain::Result<()> { #[cfg(test)] mod tests { use crate::{in_mem::Blockchain, NewBlockState}; - use sp_api::HeaderT; use sp_blockchain::Backend; - use sp_runtime::{ConsensusEngineId, Justifications}; + use sp_runtime::{traits::Header as HeaderT, ConsensusEngineId, Justifications}; use substrate_test_runtime::{Block, Header, H256}; pub const ID1: ConsensusEngineId = *b"TST1"; diff --git a/substrate/client/consensus/beefy/src/lib.rs b/substrate/client/consensus/beefy/src/lib.rs index 89a5d51c887..3d104f13250 100644 --- a/substrate/client/consensus/beefy/src/lib.rs +++ b/substrate/client/consensus/beefy/src/lib.rs @@ -40,7 +40,7 @@ use sc_client_api::{Backend, BlockBackend, BlockchainEvents, FinalityNotificatio use sc_consensus::BlockImport; use sc_network::{NetworkRequest, ProtocolName}; use sc_network_gossip::{GossipEngine, Network as GossipNetwork, Syncing as GossipSyncing}; -use sp_api::{HeaderT, NumberFor, ProvideRuntimeApi}; +use sp_api::ProvideRuntimeApi; use sp_blockchain::{ Backend as BlockchainBackend, Error as ClientError, HeaderBackend, Result as ClientResult, }; @@ -51,7 +51,7 @@ use sp_consensus_beefy::{ }; use sp_keystore::KeystorePtr; use sp_mmr_primitives::MmrApi; -use sp_runtime::traits::{Block, Zero}; +use sp_runtime::traits::{Block, Header as HeaderT, NumberFor, Zero}; use std::{ collections::{BTreeMap, VecDeque}, marker::PhantomData, diff --git a/substrate/client/consensus/beefy/src/worker.rs b/substrate/client/consensus/beefy/src/worker.rs index 966c7410365..0eea5647e51 100644 --- a/substrate/client/consensus/beefy/src/worker.rs +++ b/substrate/client/consensus/beefy/src/worker.rs @@ -36,7 +36,7 @@ use log::{debug, error, info, log_enabled, trace, warn}; use sc_client_api::{Backend, FinalityNotification, FinalityNotifications, HeaderBackend}; use sc_network_gossip::GossipEngine; use sc_utils::{mpsc::TracingUnboundedReceiver, notification::NotificationReceiver}; -use sp_api::{BlockId, ProvideRuntimeApi}; +use sp_api::ProvideRuntimeApi; use sp_arithmetic::traits::{AtLeast32Bit, Saturating}; use sp_consensus::SyncOracle; use sp_consensus_beefy::{ @@ -46,7 +46,7 @@ use sp_consensus_beefy::{ VersionedFinalityProof, VoteMessage, BEEFY_ENGINE_ID, }; use sp_runtime::{ - generic::OpaqueDigestItemId, + generic::{BlockId, OpaqueDigestItemId}, traits::{Block, Header, NumberFor, Zero}, SaturatedConversion, }; @@ -1074,13 +1074,12 @@ pub(crate) mod tests { use sc_client_api::{Backend as BackendT, HeaderBackend}; use sc_network_sync::SyncingService; use sc_network_test::TestNetFactory; - use sp_api::HeaderT; use sp_blockchain::Backend as BlockchainBackendT; use sp_consensus_beefy::{ generate_equivocation_proof, known_payloads, known_payloads::MMR_ROOT_ID, mmr::MmrRootProvider, Keyring, Payload, SignedCommitment, }; - use sp_runtime::traits::One; + use sp_runtime::traits::{Header as HeaderT, One}; use substrate_test_runtime_client::{ runtime::{Block, Digest, DigestItem, Header}, Backend, diff --git a/substrate/client/executor/src/wasm_runtime.rs b/substrate/client/executor/src/wasm_runtime.rs index 6dec3abdb20..501279a312c 100644 --- a/substrate/client/executor/src/wasm_runtime.rs +++ b/substrate/client/executor/src/wasm_runtime.rs @@ -441,6 +441,7 @@ mod tests { use codec::Encode; use sp_api::{Core, RuntimeApiInfo}; use sp_runtime::RuntimeString; + use sp_version::{create_apis_vec, RuntimeVersion}; use sp_wasm_interface::HostFunctions; use substrate_test_runtime::Block; @@ -470,7 +471,7 @@ mod tests { authoring_version: 1, spec_version: 1, impl_version: 1, - apis: sp_api::create_apis_vec!([(>::ID, 1)]), + apis: create_apis_vec!([(>::ID, 1)]), }; let version = decode_version(&old_runtime_version.encode()).unwrap(); @@ -486,7 +487,7 @@ mod tests { authoring_version: 1, spec_version: 1, impl_version: 1, - apis: sp_api::create_apis_vec!([(>::ID, 3)]), + apis: create_apis_vec!([(>::ID, 3)]), }; decode_version(&old_runtime_version.encode()).unwrap_err(); @@ -494,13 +495,13 @@ mod tests { #[test] fn new_runtime_version_decodes() { - let old_runtime_version = sp_api::RuntimeVersion { + let old_runtime_version = RuntimeVersion { spec_name: "test".into(), impl_name: "test".into(), authoring_version: 1, spec_version: 1, impl_version: 1, - apis: sp_api::create_apis_vec!([(>::ID, 3)]), + apis: create_apis_vec!([(>::ID, 3)]), transaction_version: 3, state_version: 4, }; @@ -509,13 +510,13 @@ mod tests { assert_eq!(3, version.transaction_version); assert_eq!(0, version.state_version); - let old_runtime_version = sp_api::RuntimeVersion { + let old_runtime_version = RuntimeVersion { spec_name: "test".into(), impl_name: "test".into(), authoring_version: 1, spec_version: 1, impl_version: 1, - apis: sp_api::create_apis_vec!([(>::ID, 4)]), + apis: create_apis_vec!([(>::ID, 4)]), transaction_version: 3, state_version: 4, }; @@ -538,7 +539,7 @@ mod tests { authoring_version: 100, spec_version: 100, impl_version: 100, - apis: sp_api::create_apis_vec!([(>::ID, 4)]), + apis: create_apis_vec!([(>::ID, 4)]), transaction_version: 100, state_version: 1, }; diff --git a/substrate/client/merkle-mountain-range/rpc/src/lib.rs b/substrate/client/merkle-mountain-range/rpc/src/lib.rs index 5be82b600d9..1653749ffab 100644 --- a/substrate/client/merkle-mountain-range/rpc/src/lib.rs +++ b/substrate/client/merkle-mountain-range/rpc/src/lib.rs @@ -30,14 +30,14 @@ use jsonrpsee::{ }; use serde::{Deserialize, Serialize}; -use sp_api::{ApiExt, NumberFor, ProvideRuntimeApi}; +use sp_api::{ApiExt, ProvideRuntimeApi}; use sp_blockchain::HeaderBackend; use sp_core::{ offchain::{storage::OffchainDb, OffchainDbExt, OffchainStorage}, Bytes, }; use sp_mmr_primitives::{Error as MmrError, Proof}; -use sp_runtime::traits::Block as BlockT; +use sp_runtime::traits::{Block as BlockT, NumberFor}; pub use sp_mmr_primitives::MmrApi as MmrRuntimeApi; diff --git a/substrate/client/rpc-spec-v2/Cargo.toml b/substrate/client/rpc-spec-v2/Cargo.toml index ca61286ddfa..8ca4f321f71 100644 --- a/substrate/client/rpc-spec-v2/Cargo.toml +++ b/substrate/client/rpc-spec-v2/Cargo.toml @@ -37,12 +37,14 @@ tokio = { version = "1.22.0", features = ["sync"] } array-bytes = "6.1" log = "0.4.17" futures-util = { version = "0.3.19", default-features = false } + [dev-dependencies] serde_json = "1.0.108" tokio = { version = "1.22.0", features = ["macros"] } substrate-test-runtime-client = { path = "../../test-utils/runtime/client" } substrate-test-runtime = { path = "../../test-utils/runtime" } sp-consensus = { path = "../../primitives/consensus/common" } +sp-externalities = { path = "../../primitives/externalities" } sp-maybe-compressed-blob = { path = "../../primitives/maybe-compressed-blob" } sc-block-builder = { path = "../block-builder" } sc-service = { path = "../service", features = ["test-helpers"]} diff --git a/substrate/client/rpc-spec-v2/src/archive/archive.rs b/substrate/client/rpc-spec-v2/src/archive/archive.rs index bded842d8fd..b2bcc62ce31 100644 --- a/substrate/client/rpc-spec-v2/src/archive/archive.rs +++ b/substrate/client/rpc-spec-v2/src/archive/archive.rs @@ -29,13 +29,13 @@ use jsonrpsee::core::{async_trait, RpcResult}; use sc_client_api::{ Backend, BlockBackend, BlockchainEvents, CallExecutor, ExecutorProvider, StorageProvider, }; -use sp_api::{CallApiAt, CallContext, NumberFor}; +use sp_api::{CallApiAt, CallContext}; use sp_blockchain::{ Backend as BlockChainBackend, Error as BlockChainError, HeaderBackend, HeaderMetadata, }; use sp_core::Bytes; use sp_runtime::{ - traits::{Block as BlockT, Header as HeaderT}, + traits::{Block as BlockT, Header as HeaderT, NumberFor}, SaturatedConversion, }; use std::{collections::HashSet, marker::PhantomData, sync::Arc}; diff --git a/substrate/client/rpc-spec-v2/src/chain_head/chain_head_storage.rs b/substrate/client/rpc-spec-v2/src/chain_head/chain_head_storage.rs index 6e19f59a5d6..c23489a050e 100644 --- a/substrate/client/rpc-spec-v2/src/chain_head/chain_head_storage.rs +++ b/substrate/client/rpc-spec-v2/src/chain_head/chain_head_storage.rs @@ -22,8 +22,8 @@ use std::{collections::VecDeque, marker::PhantomData, sync::Arc}; use sc_client_api::{Backend, ChildInfo, StorageKey, StorageProvider}; use sc_utils::mpsc::TracingUnboundedSender; -use sp_api::BlockT; use sp_core::storage::well_known_keys; +use sp_runtime::traits::Block as BlockT; use crate::chain_head::event::OperationStorageItems; diff --git a/substrate/client/rpc-spec-v2/src/chain_head/test_utils.rs b/substrate/client/rpc-spec-v2/src/chain_head/test_utils.rs index a901f3039ff..d63a98a5cb0 100644 --- a/substrate/client/rpc-spec-v2/src/chain_head/test_utils.rs +++ b/substrate/client/rpc-spec-v2/src/chain_head/test_utils.rs @@ -24,14 +24,15 @@ use sc_client_api::{ StorageData, StorageEventStream, StorageKey, StorageProvider, }; use sc_utils::mpsc::{tracing_unbounded, TracingUnboundedSender}; -use sp_api::{CallApiAt, CallApiAtParams, NumberFor, RuntimeVersion}; +use sp_api::{CallApiAt, CallApiAtParams}; use sp_blockchain::{BlockStatus, CachedHeaderMetadata, HeaderBackend, HeaderMetadata, Info}; use sp_consensus::BlockOrigin; use sp_runtime::{ generic::SignedBlock, - traits::{Block as BlockT, Header as HeaderT}, + traits::{Block as BlockT, Header as HeaderT, NumberFor}, Justifications, }; +use sp_version::RuntimeVersion; use std::sync::Arc; use substrate_test_runtime::{Block, Hash, Header}; @@ -235,7 +236,7 @@ impl> CallApiAt for ChainHeadMock fn initialize_extensions( &self, at: ::Hash, - extensions: &mut sp_api::Extensions, + extensions: &mut sp_externalities::Extensions, ) -> Result<(), sp_api::ApiError> { self.client.initialize_extensions(at, extensions) } diff --git a/substrate/client/rpc-spec-v2/src/chain_head/tests.rs b/substrate/client/rpc-spec-v2/src/chain_head/tests.rs index 4e6775fe280..518b7da432b 100644 --- a/substrate/client/rpc-spec-v2/src/chain_head/tests.rs +++ b/substrate/client/rpc-spec-v2/src/chain_head/tests.rs @@ -34,7 +34,6 @@ use jsonrpsee::{ use sc_block_builder::BlockBuilderBuilder; use sc_client_api::ChildInfo; use sc_service::client::new_in_mem; -use sp_api::BlockT; use sp_blockchain::HeaderBackend; use sp_consensus::BlockOrigin; use sp_core::{ @@ -42,6 +41,7 @@ use sp_core::{ testing::TaskExecutor, Blake2Hasher, Hasher, }; +use sp_runtime::traits::Block as BlockT; use sp_version::RuntimeVersion; use std::{ collections::{HashMap, HashSet}, diff --git a/substrate/client/tracing/Cargo.toml b/substrate/client/tracing/Cargo.toml index ffcbf074908..796d4f1d826 100644 --- a/substrate/client/tracing/Cargo.toml +++ b/substrate/client/tracing/Cargo.toml @@ -16,6 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] ansi_term = "0.12.1" atty = "0.2.13" chrono = "0.4.27" +codec = { package = "parity-scale-codec", version = "3.6.1" } lazy_static = "1.4.0" libc = "0.2.121" log = { version = "0.4.17" } diff --git a/substrate/client/tracing/src/block/mod.rs b/substrate/client/tracing/src/block/mod.rs index 9ebf8e55c94..01744cd5563 100644 --- a/substrate/client/tracing/src/block/mod.rs +++ b/substrate/client/tracing/src/block/mod.rs @@ -25,6 +25,7 @@ use std::{ time::Instant, }; +use codec::Encode; use parking_lot::Mutex; use tracing::{ dispatcher, @@ -34,7 +35,7 @@ use tracing::{ use crate::{SpanDatum, TraceEvent, Values}; use sc_client_api::BlockBackend; -use sp_api::{Core, Encode, Metadata, ProvideRuntimeApi}; +use sp_api::{Core, Metadata, ProvideRuntimeApi}; use sp_blockchain::HeaderBackend; use sp_core::hexdisplay::HexDisplay; use sp_rpc::tracing::{BlockTrace, Span, TraceBlockResponse}; diff --git a/substrate/frame/beefy-mmr/src/lib.rs b/substrate/frame/beefy-mmr/src/lib.rs index a0bf7cdcf86..fa3caba7977 100644 --- a/substrate/frame/beefy-mmr/src/lib.rs +++ b/substrate/frame/beefy-mmr/src/lib.rs @@ -36,6 +36,7 @@ use sp_runtime::traits::{Convert, Member}; use sp_std::prelude::*; +use codec::Decode; use pallet_mmr::{LeafDataProvider, ParentNumberAndHash}; use sp_consensus_beefy::{ mmr::{BeefyAuthoritySet, BeefyDataProvider, BeefyNextAuthoritySet, MmrLeaf, MmrLeafVersion}, @@ -226,7 +227,7 @@ sp_api::decl_runtime_apis! { /// API useful for BEEFY light clients. pub trait BeefyMmrApi where - BeefyAuthoritySet: sp_api::Decode, + BeefyAuthoritySet: Decode, { /// Return the currently active BEEFY authority set proof. fn authority_set_proof() -> BeefyAuthoritySet; diff --git a/substrate/frame/contracts/src/storage/meter.rs b/substrate/frame/contracts/src/storage/meter.rs index 9f098090bc8..495cbd90db5 100644 --- a/substrate/frame/contracts/src/storage/meter.rs +++ b/substrate/frame/contracts/src/storage/meter.rs @@ -33,9 +33,8 @@ use frame_support::{ }, DefaultNoBound, RuntimeDebugNoBound, }; -use sp_api::HashT; use sp_runtime::{ - traits::{Saturating, Zero}, + traits::{Hash as HashT, Saturating, Zero}, DispatchError, FixedPointNumber, FixedU128, }; use sp_std::{fmt::Debug, marker::PhantomData, vec, vec::Vec}; diff --git a/substrate/frame/nfts/runtime-api/Cargo.toml b/substrate/frame/nfts/runtime-api/Cargo.toml index 483c4bd3234..092edaaaa89 100644 --- a/substrate/frame/nfts/runtime-api/Cargo.toml +++ b/substrate/frame/nfts/runtime-api/Cargo.toml @@ -14,9 +14,10 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] } -pallet-nfts = { path = "..", default-features = false} -sp-api = { path = "../../../primitives/api", default-features = false} +pallet-nfts = { path = "..", default-features = false } +sp-api = { path = "../../../primitives/api", default-features = false } +sp-std = { path = "../../../primitives/std", default-features = false } [features] default = [ "std" ] -std = [ "codec/std", "pallet-nfts/std", "sp-api/std" ] +std = [ "codec/std", "pallet-nfts/std", "sp-api/std", "sp-std/std" ] diff --git a/substrate/frame/nfts/runtime-api/src/lib.rs b/substrate/frame/nfts/runtime-api/src/lib.rs index 77535c64069..816088f1b71 100644 --- a/substrate/frame/nfts/runtime-api/src/lib.rs +++ b/substrate/frame/nfts/runtime-api/src/lib.rs @@ -20,7 +20,7 @@ #![cfg_attr(not(feature = "std"), no_std)] use codec::{Decode, Encode}; -use sp_api::vec::Vec; +use sp_std::vec::Vec; sp_api::decl_runtime_apis! { pub trait NftsApi diff --git a/substrate/frame/support/test/tests/construct_runtime.rs b/substrate/frame/support/test/tests/construct_runtime.rs index 9ad51ad530e..b8341b25cb0 100644 --- a/substrate/frame/support/test/tests/construct_runtime.rs +++ b/substrate/frame/support/test/tests/construct_runtime.rs @@ -27,13 +27,13 @@ use frame_support::{ }; use frame_system::limits::{BlockLength, BlockWeights}; use scale_info::TypeInfo; -use sp_api::RuntimeVersion; use sp_core::{sr25519, ConstU64}; use sp_runtime::{ generic, traits::{BlakeTwo256, Verify}, DispatchError, ModuleError, }; +use sp_version::RuntimeVersion; parameter_types! { pub static IntegrityTestExec: u32 = 0; diff --git a/substrate/primitives/api/Cargo.toml b/substrate/primitives/api/Cargo.toml index c3a68af097b..e95333c9eeb 100644 --- a/substrate/primitives/api/Cargo.toml +++ b/substrate/primitives/api/Cargo.toml @@ -15,17 +15,17 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false } sp-api-proc-macro = { path = "proc-macro" } -sp-core = { path = "../core", default-features = false} -sp-std = { path = "../std", default-features = false} -sp-runtime = { path = "../runtime", default-features = false} -sp-externalities = { path = "../externalities", default-features = false, optional = true} -sp-version = { path = "../version", default-features = false} -sp-state-machine = { path = "../state-machine", default-features = false, optional = true} -sp-trie = { path = "../trie", default-features = false, optional = true} +sp-core = { path = "../core", default-features = false } +sp-std = { path = "../std", default-features = false } +sp-runtime = { path = "../runtime", default-features = false } +sp-externalities = { path = "../externalities", default-features = false, optional = true } +sp-version = { path = "../version", default-features = false } +sp-state-machine = { path = "../state-machine", default-features = false, optional = true } +sp-trie = { path = "../trie", default-features = false, optional = true } hash-db = { version = "0.16.0", optional = true } thiserror = { version = "1.0.48", optional = true } scale-info = { version = "2.10.0", default-features = false, features = ["derive"] } -sp-metadata-ir = { path = "../metadata-ir", default-features = false, optional = true} +sp-metadata-ir = { path = "../metadata-ir", default-features = false, optional = true } log = { version = "0.4.17", default-features = false } [dev-dependencies] diff --git a/substrate/primitives/api/proc-macro/src/utils.rs b/substrate/primitives/api/proc-macro/src/utils.rs index e261b162b5a..68f0a77a399 100644 --- a/substrate/primitives/api/proc-macro/src/utils.rs +++ b/substrate/primitives/api/proc-macro/src/utils.rs @@ -28,14 +28,14 @@ use syn::{ /// Generates the access to the `sc_client` crate. pub fn generate_crate_access() -> TokenStream { match crate_name("sp-api") { - Ok(FoundCrate::Itself) => quote!(sp_api), + Ok(FoundCrate::Itself) => quote!(sp_api::__private), Ok(FoundCrate::Name(renamed_name)) => { let renamed_name = Ident::new(&renamed_name, Span::call_site()); - quote!(#renamed_name) + quote!(#renamed_name::__private) }, Err(e) => if let Ok(FoundCrate::Name(name)) = crate_name(&"frame") { - let path = format!("{}::deps::{}", name, "sp_api"); + let path = format!("{}::deps::sp_api::__private", name); let path = syn::parse_str::(&path).expect("is a valid path; qed"); quote!( #path ) } else { diff --git a/substrate/primitives/api/src/lib.rs b/substrate/primitives/api/src/lib.rs index c122a2348b8..3b00e6b418b 100644 --- a/substrate/primitives/api/src/lib.rs +++ b/substrate/primitives/api/src/lib.rs @@ -70,48 +70,58 @@ // Make doc tests happy extern crate self as sp_api; +/// Private exports used by the macros. +/// +/// This is seen as internal API and can change at any point. #[doc(hidden)] -pub use codec::{self, Decode, DecodeLimit, Encode}; -#[doc(hidden)] -#[cfg(feature = "std")] -pub use hash_db::Hasher; -#[doc(hidden)] -pub use scale_info; -#[doc(hidden)] -pub use sp_core::offchain; -#[doc(hidden)] -#[cfg(not(feature = "std"))] -pub use sp_core::to_substrate_wasm_fn_return_value; -#[doc(hidden)] +pub mod __private { + #[cfg(feature = "std")] + mod std_imports { + pub use hash_db::Hasher; + pub use sp_core::traits::CallContext; + pub use sp_externalities::{Extension, Extensions}; + pub use sp_runtime::StateVersion; + pub use sp_state_machine::{ + Backend as StateBackend, InMemoryBackend, OverlayedChanges, StorageProof, TrieBackend, + TrieBackendBuilder, + }; + } + #[cfg(feature = "std")] + pub use std_imports::*; + + pub use crate::*; + pub use codec::{self, Decode, DecodeLimit, Encode}; + pub use scale_info; + pub use sp_core::offchain; + #[cfg(not(feature = "std"))] + pub use sp_core::to_substrate_wasm_fn_return_value; + #[cfg(feature = "frame-metadata")] + pub use sp_metadata_ir::{self as metadata_ir, frame_metadata as metadata}; + pub use sp_runtime::{ + generic::BlockId, + traits::{Block as BlockT, Hash as HashT, HashingFor, Header as HeaderT, NumberFor}, + transaction_validity::TransactionValidity, + RuntimeString, TransactionOutcome, + }; + pub use sp_std::{mem, slice, vec}; + pub use sp_version::{create_apis_vec, ApiId, ApisVec, RuntimeVersion}; +} + #[cfg(feature = "std")] pub use sp_core::traits::CallContext; use sp_core::OpaqueMetadata; -#[doc(hidden)] #[cfg(feature = "std")] -pub use sp_externalities::{Extension, Extensions}; -#[doc(hidden)] -#[cfg(feature = "frame-metadata")] -pub use sp_metadata_ir::{self as metadata_ir, frame_metadata as metadata}; -#[doc(hidden)] +use sp_externalities::{Extension, Extensions}; +use sp_runtime::traits::Block as BlockT; #[cfg(feature = "std")] -pub use sp_runtime::StateVersion; -#[doc(hidden)] -pub use sp_runtime::{ - generic::BlockId, - traits::{Block as BlockT, Hash as HashT, HashingFor, Header as HeaderT, NumberFor}, - transaction_validity::TransactionValidity, - RuntimeString, TransactionOutcome, -}; -#[doc(hidden)] +use sp_runtime::traits::HashingFor; #[cfg(feature = "std")] -pub use sp_state_machine::{ - backend::AsTrieBackend, Backend as StateBackend, InMemoryBackend, OverlayedChanges, - StorageProof, TrieBackend, TrieBackendBuilder, -}; -#[doc(hidden)] -pub use sp_std::{mem, slice, vec}; -#[doc(hidden)] -pub use sp_version::{create_apis_vec, ApiId, ApisVec, RuntimeVersion}; +pub use sp_runtime::TransactionOutcome; +#[cfg(feature = "std")] +pub use sp_state_machine::StorageProof; +#[cfg(feature = "std")] +use sp_state_machine::{backend::AsTrieBackend, Backend as StateBackend, OverlayedChanges}; +use sp_version::RuntimeVersion; #[cfg(feature = "std")] use std::cell::RefCell; diff --git a/substrate/primitives/consensus/beefy/Cargo.toml b/substrate/primitives/consensus/beefy/Cargo.toml index 5ff0a2ebc70..e78323c8980 100644 --- a/substrate/primitives/consensus/beefy/Cargo.toml +++ b/substrate/primitives/consensus/beefy/Cargo.toml @@ -15,19 +15,19 @@ targets = ["x86_64-unknown-linux-gnu"] codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] } scale-info = { version = "2.10.0", default-features = false, features = ["derive"] } serde = { version = "1.0.188", default-features = false, optional = true, features = ["derive", "alloc"] } -sp-api = { path = "../../api", default-features = false} -sp-application-crypto = { path = "../../application-crypto", default-features = false} -sp-core = { path = "../../core", default-features = false} -sp-io = { path = "../../io", default-features = false} -sp-mmr-primitives = { path = "../../merkle-mountain-range", default-features = false} -sp-runtime = { path = "../../runtime", default-features = false} -sp-std = { path = "../../std", default-features = false} +sp-api = { path = "../../api", default-features = false } +sp-application-crypto = { path = "../../application-crypto", default-features = false } +sp-core = { path = "../../core", default-features = false } +sp-io = { path = "../../io", default-features = false } +sp-mmr-primitives = { path = "../../merkle-mountain-range", default-features = false } +sp-runtime = { path = "../../runtime", default-features = false } +sp-std = { path = "../../std", default-features = false } strum = { version = "0.24.1", features = ["derive"], default-features = false } lazy_static = "1.4.0" [dev-dependencies] array-bytes = "6.1" -w3f-bls = { version = "0.1.3", features = ["std"]} +w3f-bls = { version = "0.1.3", features = ["std"] } [features] default = [ "std" ] diff --git a/substrate/primitives/consensus/beefy/src/mmr.rs b/substrate/primitives/consensus/beefy/src/mmr.rs index 660506b8763..9ac1624ca75 100644 --- a/substrate/primitives/consensus/beefy/src/mmr.rs +++ b/substrate/primitives/consensus/beefy/src/mmr.rs @@ -150,8 +150,9 @@ pub use mmr_root_provider::MmrRootProvider; mod mmr_root_provider { use super::*; use crate::{known_payloads, payload::PayloadProvider, Payload}; - use sp_api::{NumberFor, ProvideRuntimeApi}; + use sp_api::ProvideRuntimeApi; use sp_mmr_primitives::MmrApi; + use sp_runtime::traits::NumberFor; use sp_std::{marker::PhantomData, sync::Arc}; /// A [`crate::Payload`] provider where payload is Merkle Mountain Range root hash. diff --git a/substrate/utils/frame/benchmarking-cli/src/block/bench.rs b/substrate/utils/frame/benchmarking-cli/src/block/bench.rs index a028c7d438e..ef8dc29dde8 100644 --- a/substrate/utils/frame/benchmarking-cli/src/block/bench.rs +++ b/substrate/utils/frame/benchmarking-cli/src/block/bench.rs @@ -25,9 +25,13 @@ use sc_cli::{Error, Result}; use sc_client_api::{ Backend as ClientBackend, BlockBackend, HeaderBackend, StorageProvider, UsageProvider, }; -use sp_api::{ApiExt, Core, HeaderT, ProvideRuntimeApi}; +use sp_api::{ApiExt, Core, ProvideRuntimeApi}; use sp_blockchain::Error::RuntimeApiError; -use sp_runtime::{generic::BlockId, traits::Block as BlockT, DigestItem, OpaqueExtrinsic}; +use sp_runtime::{ + generic::BlockId, + traits::{Block as BlockT, Header as HeaderT}, + DigestItem, OpaqueExtrinsic, +}; use sp_storage::StorageKey; use clap::Args; diff --git a/substrate/utils/frame/benchmarking-cli/src/storage/write.rs b/substrate/utils/frame/benchmarking-cli/src/storage/write.rs index 4def1909ead..65941497bda 100644 --- a/substrate/utils/frame/benchmarking-cli/src/storage/write.rs +++ b/substrate/utils/frame/benchmarking-cli/src/storage/write.rs @@ -18,10 +18,10 @@ use sc_cli::Result; use sc_client_api::{Backend as ClientBackend, StorageProvider, UsageProvider}; use sc_client_db::{DbHash, DbState, DbStateBuilder}; -use sp_api::StateBackend; use sp_blockchain::HeaderBackend; use sp_database::{ColumnId, Transaction}; use sp_runtime::traits::{Block as BlockT, HashingFor, Header as HeaderT}; +use sp_state_machine::Backend as StateBackend; use sp_trie::PrefixedMemoryDB; use log::{info, trace}; -- GitLab From 19c05e8d43fc4aef12668ecc9144bb9669cc7bbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= <123550+andresilva@users.noreply.github.com> Date: Thu, 23 Nov 2023 17:00:54 +0000 Subject: [PATCH 048/102] Fix trait imports from sp-api (#2472) Broken after #2446. --- Cargo.lock | 1 + .../relay-chain-minimal-node/src/blockchain_rpc_client.rs | 3 ++- polkadot/node/subsystem-types/Cargo.toml | 1 + polkadot/node/subsystem-types/src/runtime_client.rs | 3 ++- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1fe9d1b8192..abd539ea799 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12860,6 +12860,7 @@ dependencies = [ "sp-authority-discovery", "sp-blockchain", "sp-consensus-babe", + "sp-runtime", "substrate-prometheus-endpoint", "thiserror", ] diff --git a/cumulus/client/relay-chain-minimal-node/src/blockchain_rpc_client.rs b/cumulus/client/relay-chain-minimal-node/src/blockchain_rpc_client.rs index c40ca5c858b..d9e4155d9c5 100644 --- a/cumulus/client/relay-chain-minimal-node/src/blockchain_rpc_client.rs +++ b/cumulus/client/relay-chain-minimal-node/src/blockchain_rpc_client.rs @@ -28,8 +28,9 @@ use polkadot_primitives::{ }; use sc_authority_discovery::{AuthorityDiscovery, Error as AuthorityDiscoveryError}; use sc_client_api::AuxStore; -use sp_api::{ApiError, BlockT, HeaderT, NumberFor, RuntimeApiInfo}; +use sp_api::{ApiError, RuntimeApiInfo}; use sp_blockchain::Info; +use sp_runtime::traits::{Block as BlockT, Header as HeaderT, NumberFor}; #[derive(Clone)] pub struct BlockChainRpcClient { diff --git a/polkadot/node/subsystem-types/Cargo.toml b/polkadot/node/subsystem-types/Cargo.toml index 8e345cf222c..71e5257cab9 100644 --- a/polkadot/node/subsystem-types/Cargo.toml +++ b/polkadot/node/subsystem-types/Cargo.toml @@ -19,6 +19,7 @@ sc-network = { path = "../../../substrate/client/network" } sp-api = { path = "../../../substrate/primitives/api" } sp-blockchain = { path = "../../../substrate/primitives/blockchain" } sp-consensus-babe = { path = "../../../substrate/primitives/consensus/babe" } +sp-runtime = { path = "../../../substrate/primitives/runtime" } sp-authority-discovery = { path = "../../../substrate/primitives/authority-discovery" } sc-client-api = { path = "../../../substrate/client/api" } sc-transaction-pool-api = { path = "../../../substrate/client/transaction-pool/api" } diff --git a/polkadot/node/subsystem-types/src/runtime_client.rs b/polkadot/node/subsystem-types/src/runtime_client.rs index 36e3365cf08..21df1483b9e 100644 --- a/polkadot/node/subsystem-types/src/runtime_client.rs +++ b/polkadot/node/subsystem-types/src/runtime_client.rs @@ -25,10 +25,11 @@ use polkadot_primitives::{ }; use sc_client_api::HeaderBackend; use sc_transaction_pool_api::OffchainTransactionPoolFactory; -use sp_api::{ApiError, ApiExt, HeaderT, NumberFor, ProvideRuntimeApi}; +use sp_api::{ApiError, ApiExt, ProvideRuntimeApi}; use sp_authority_discovery::AuthorityDiscoveryApi; use sp_blockchain::Info; use sp_consensus_babe::{BabeApi, Epoch}; +use sp_runtime::traits::{Header as HeaderT, NumberFor}; use std::{collections::BTreeMap, sync::Arc}; /// Offers header utilities. -- GitLab From c29b74dc36fc20a76cee4a029a70e7ad42fa0b6e Mon Sep 17 00:00:00 2001 From: Ross Bulat Date: Fri, 24 Nov 2023 00:14:59 +0700 Subject: [PATCH 049/102] Amend staking docs to account for state of controller deprecation (#2451) Amends some staking pallet docs, and deprecation comment, to adjust to the latest controller deprecation state. Note, do we need the `README.md` file, which is a duplicate of the pallet docs? Docs would be easier to maintain, and less ambiguity for devs to refer to, if we had one source of truth in the generated pallet docs. --- substrate/frame/staking/README.md | 12 +-- substrate/frame/staking/src/lib.rs | 93 ++++++++++----------- substrate/frame/staking/src/pallet/impls.rs | 2 +- 3 files changed, 50 insertions(+), 57 deletions(-) diff --git a/substrate/frame/staking/README.md b/substrate/frame/staking/README.md index 8c91cfcaa7f..2938e2fe770 100644 --- a/substrate/frame/staking/README.md +++ b/substrate/frame/staking/README.md @@ -24,7 +24,7 @@ be found not to be discharging its duties properly. - Nominating: The process of placing staked funds behind one or more validators in order to share in any reward, and punishment, they take. - Stash account: The account holding an owner's funds used for staking. -- Controller account: The account that controls an owner's funds for staking. +- Controller account (being deprecated): The account that controls an owner's funds for staking. - Era: A (whole) number of sessions, which is the period that the validator set (and each validator's active nominator set) is recalculated and where rewards are paid out. - Slash: The punishment of a staker by reducing its funds. @@ -45,10 +45,10 @@ The staking system in Substrate NPoS is designed to make the following possible: Almost any interaction with the Staking module requires a process of _**bonding**_ (also known as being a _staker_). To become *bonded*, a fund-holding account known as the _stash account_, which holds some or all of the funds that become -frozen in place as part of the staking process, is paired with an active **controller** account, which issues -instructions on how they shall be used. +frozen in place as part of the staking process. The controller account, which this pallet now assigns the stash account to, +issues instructions on how funds shall be used. -An account pair can become bonded using the +An account can become a bonded stash account using the [`bond`](https://docs.rs/pallet-staking/latest/pallet_staking/enum.Call.html#variant.bond) call. Stash accounts can update their associated controller back to their stash account using the @@ -231,8 +231,8 @@ following: Any funds already placed into stash can be the target of the following operations: The controller account can free a portion (or all) of the funds using the -[`unbond`](https://docs.rs/pallet-staking/latest/pallet_staking/enum.Call.html#variant.unbond) call. Note that the funds -are not immediately accessible. Instead, a duration denoted by +[`unbond`](https://docs.rs/pallet-staking/latest/pallet_staking/enum.Call.html#variant.unbond) call. Note that the +funds are not immediately accessible. Instead, a duration denoted by [`BondingDuration`](https://docs.rs/pallet-staking/latest/pallet_staking/trait.Config.html#associatedtype.BondingDuration) (in number of eras) must pass until the funds can actually be removed. Once the `BondingDuration` is over, the [`withdraw_unbonded`](https://docs.rs/pallet-staking/latest/pallet_staking/enum.Call.html#variant.withdraw_unbonded) diff --git a/substrate/frame/staking/src/lib.rs b/substrate/frame/staking/src/lib.rs index 2cfee38ab4f..de989e8943d 100644 --- a/substrate/frame/staking/src/lib.rs +++ b/substrate/frame/staking/src/lib.rs @@ -41,7 +41,7 @@ //! - Nominating: The process of placing staked funds behind one or more validators in order to //! share in any reward, and punishment, they take. //! - Stash account: The account holding an owner's funds used for staking. -//! - Controller account: The account that controls an owner's funds for staking. +//! - Controller account (being deprecated): The account that controls an owner's funds for staking. //! - Era: A (whole) number of sessions, which is the period that the validator set (and each //! validator's active nominator set) is recalculated and where rewards are paid out. //! - Slash: The punishment of a staker by reducing its funds. @@ -61,20 +61,20 @@ //! //! Almost any interaction with the Staking pallet requires a process of _**bonding**_ (also known //! as being a _staker_). To become *bonded*, a fund-holding register known as the _stash account_, -//! which holds some or all of the funds that become frozen in place as part of the staking process, -//! is paired with an active **controller** account, which issues instructions on how they shall be -//! used. +//! which holds some or all of the funds that become frozen in place as part of the staking process. +//! The controller account, which this pallet now assigns the stash account to, issues instructions +//! on how funds shall be used. //! -//! An account pair can become bonded using the [`bond`](Call::bond) call. +//! An account can become a bonded stash account using the [`bond`](Call::bond) call. //! -//! Stash accounts can update their associated controller back to the stash account using the +//! In the event stash accounts registered a unique controller account before the controller account +//! deprecation, they can update their associated controller back to the stash account using the //! [`set_controller`](Call::set_controller) call. //! //! There are three possible roles that any staked account pair can be in: `Validator`, `Nominator` -//! and `Idle` (defined in [`StakerStatus`]). There are three -//! corresponding instructions to change between roles, namely: -//! [`validate`](Call::validate), -//! [`nominate`](Call::nominate), and [`chill`](Call::chill). +//! and `Idle` (defined in [`StakerStatus`]). There are three corresponding instructions to change +//! between roles, namely: [`validate`](Call::validate), [`nominate`](Call::nominate), and +//! [`chill`](Call::chill). //! //! #### Validating //! @@ -85,14 +85,13 @@ //! _might_ get elected at the _next era_ as a validator. The result of the election is determined //! by nominators and their votes. //! -//! An account can become a validator candidate via the -//! [`validate`](Call::validate) call. +//! An account can become a validator candidate via the [`validate`](Call::validate) call. //! //! #### Nomination //! //! A **nominator** does not take any _direct_ role in maintaining the network, instead, it votes on -//! a set of validators to be elected. Once interest in nomination is stated by an account, it -//! takes effect at the next election round. The funds in the nominator's stash account indicate the +//! a set of validators to be elected. Once interest in nomination is stated by an account, it takes +//! effect at the next election round. The funds in the nominator's stash account indicate the //! _weight_ of its vote. Both the rewards and any punishment that a validator earns are shared //! between the validator and its nominators. This rule incentivizes the nominators to NOT vote for //! the misbehaving/offline validators as much as possible, simply because the nominators will also @@ -104,8 +103,8 @@ //! //! Staking is closely related to elections; actual validators are chosen from among all potential //! validators via election by the potential validators and nominators. To reduce use of the phrase -//! "potential validators and nominators", we often use the term **voters**, who are simply -//! the union of potential validators and nominators. +//! "potential validators and nominators", we often use the term **voters**, who are simply the +//! union of potential validators and nominators. //! //! #### Rewards and Slash //! @@ -117,10 +116,9 @@ //! `payout_stakers`, which pays the reward to the validator as well as its nominators. Only //! [`Config::MaxExposurePageSize`] nominator rewards can be claimed in a single call. When the //! number of nominators exceeds [`Config::MaxExposurePageSize`], then the exposed nominators are -//! stored in multiple pages, with each page containing up to -//! [`Config::MaxExposurePageSize`] nominators. To pay out all nominators, `payout_stakers` must be -//! called once for each available page. Paging exists to limit the i/o cost to mutate storage for -//! each nominator's account. +//! stored in multiple pages, with each page containing up to [`Config::MaxExposurePageSize`] +//! nominators. To pay out all nominators, `payout_stakers` must be called once for each available +//! page. Paging exists to limit the i/o cost to mutate storage for each nominator's account. //! //! Slashing can occur at any point in time, once misbehavior is reported. Once slashing is //! determined, a value is deducted from the balance of the validator and all the nominators who @@ -165,18 +163,18 @@ //! //! #[frame_support::pallet(dev_mode)] //! pub mod pallet { -//! use super::*; -//! use frame_support::pallet_prelude::*; -//! use frame_system::pallet_prelude::*; +//! use super::*; +//! use frame_support::pallet_prelude::*; +//! use frame_system::pallet_prelude::*; //! -//! #[pallet::pallet] -//! pub struct Pallet(_); +//! #[pallet::pallet] +//! pub struct Pallet(_); //! -//! #[pallet::config] -//! pub trait Config: frame_system::Config + staking::Config {} +//! #[pallet::config] +//! pub trait Config: frame_system::Config + staking::Config {} //! -//! #[pallet::call] -//! impl Pallet { +//! #[pallet::call] +//! impl Pallet { //! /// Reward a validator. //! #[pallet::weight(0)] //! pub fn reward_myself(origin: OriginFor) -> DispatchResult { @@ -193,8 +191,8 @@ //! //! ### Era payout //! -//! The era payout is computed using yearly inflation curve defined at -//! [`Config::EraPayout`] as such: +//! The era payout is computed using yearly inflation curve defined at [`Config::EraPayout`] as +//! such: //! //! ```nocompile //! staker_payout = yearly_inflation(npos_token_staked / total_tokens) * total_tokens / era_per_year @@ -204,8 +202,7 @@ //! ```nocompile //! remaining_payout = max_yearly_inflation * total_tokens / era_per_year - staker_payout //! ``` -//! The remaining reward is send to the configurable end-point -//! [`Config::RewardRemainder`]. +//! The remaining reward is send to the configurable end-point [`Config::RewardRemainder`]. //! //! ### Reward Calculation //! @@ -219,9 +216,8 @@ //! they received during the era. Points are added to a validator using //! [`reward_by_ids`](Pallet::reward_by_ids). //! -//! [`Pallet`] implements -//! [`pallet_authorship::EventHandler`] to add reward -//! points to block producer and block producer of referenced uncles. +//! [`Pallet`] implements [`pallet_authorship::EventHandler`] to add reward points to block producer +//! and block producer of referenced uncles. //! //! The validator and its nominator split their reward as following: //! @@ -232,13 +228,12 @@ //! validator, proportional to the value staked behind the validator (_i.e._ dividing the //! [`own`](Exposure::own) or [`others`](Exposure::others) by [`total`](Exposure::total) in //! [`Exposure`]). Note that payouts are made in pages with each page capped at -//! [`Config::MaxExposurePageSize`] nominators. The distribution of nominators across -//! pages may be unsorted. The total commission is paid out proportionally across pages based on the -//! total stake of the page. +//! [`Config::MaxExposurePageSize`] nominators. The distribution of nominators across pages may be +//! unsorted. The total commission is paid out proportionally across pages based on the total stake +//! of the page. //! //! All entities who receive a reward have the option to choose their reward destination through the -//! [`Payee`] storage item (see -//! [`set_payee`](Call::set_payee)), to be one of the following: +//! [`Payee`] storage item (see [`set_payee`](Call::set_payee)), to be one of the following: //! //! - Stash account, not increasing the staked value. //! - Stash account, also increasing the staked value. @@ -249,12 +244,10 @@ //! Any funds already placed into stash can be the target of the following operations: //! //! The controller account can free a portion (or all) of the funds using the -//! [`unbond`](Call::unbond) call. Note that the funds are not immediately -//! accessible. Instead, a duration denoted by -//! [`Config::BondingDuration`] (in number of eras) must -//! pass until the funds can actually be removed. Once the `BondingDuration` is over, the -//! [`withdraw_unbonded`](Call::withdraw_unbonded) call can be used to actually -//! withdraw the funds. +//! [`unbond`](Call::unbond) call. Note that the funds are not immediately accessible. Instead, a +//! duration denoted by [`Config::BondingDuration`] (in number of eras) must pass until the funds +//! can actually be removed. Once the `BondingDuration` is over, the +//! [`withdraw_unbonded`](Call::withdraw_unbonded) call can be used to actually withdraw the funds. //! //! Note that there is a limitation to the number of fund-chunks that can be scheduled to be //! unlocked in the future via [`unbond`](Call::unbond). In case this maximum @@ -274,8 +267,8 @@ //! //! ## GenesisConfig //! -//! The Staking pallet depends on the [`GenesisConfig`]. The -//! `GenesisConfig` is optional and allow to set some initial stakers. +//! The Staking pallet depends on the [`GenesisConfig`]. The `GenesisConfig` is optional and allow +//! to set some initial stakers. //! //! ## Related Modules //! @@ -405,7 +398,7 @@ pub enum RewardDestination { /// Pay into the stash account, not increasing the amount at stake. Stash, #[deprecated( - note = "`Controller` will be removed after January 2024. Use `Account(controller)` instead. This variant now behaves the same as `Stash` variant." + note = "`Controller` will be removed after January 2024. Use `Account(controller)` instead." )] Controller, /// Pay into a specified account. diff --git a/substrate/frame/staking/src/pallet/impls.rs b/substrate/frame/staking/src/pallet/impls.rs index 6ea8e4c9d3b..e18d9378b5e 100644 --- a/substrate/frame/staking/src/pallet/impls.rs +++ b/substrate/frame/staking/src/pallet/impls.rs @@ -359,7 +359,7 @@ impl Pallet { #[allow(deprecated)] RewardDestination::Controller => Self::bonded(stash) .map(|controller| { - defensive!("Paying out controller as reward destination which is deprecated and should be migrated"); + defensive!("Paying out controller as reward destination which is deprecated and should be migrated."); // This should never happen once payees with a `Controller` variant have been migrated. // But if it does, just pay the controller account. T::Currency::deposit_creating(&controller, amount) -- GitLab From a00a767604db59e4f045f8e73e90c6c8b7ff95c5 Mon Sep 17 00:00:00 2001 From: Lulu Date: Fri, 24 Nov 2023 09:07:35 +0000 Subject: [PATCH 050/102] Make publish CI consistant and bump to v0.3.0 (#2453) --- .github/workflows/check-publish.yml | 7 ++----- .github/workflows/claim-crates.yml | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/check-publish.yml b/.github/workflows/check-publish.yml index c0d2b889381..db0863888b8 100644 --- a/.github/workflows/check-publish.yml +++ b/.github/workflows/check-publish.yml @@ -10,10 +10,7 @@ on: jobs: check-publish: - strategy: - matrix: - os: ["ubuntu-latest"] - runs-on: ${{ matrix.os }} + runs-on: ubuntu-latest steps: - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 @@ -23,7 +20,7 @@ jobs: cache-on-failure: true - name: install parity-publish - run: cargo install parity-publish --profile dev + run: cargo install parity-publish@0.3.0 - name: parity-publish check run: parity-publish check --allow-unpublished diff --git a/.github/workflows/claim-crates.yml b/.github/workflows/claim-crates.yml index 345d24c7566..0bd5593b54f 100644 --- a/.github/workflows/claim-crates.yml +++ b/.github/workflows/claim-crates.yml @@ -18,7 +18,7 @@ jobs: cache-on-failure: true - name: install parity-publish - run: cargo install parity-publish@0.2.0 + run: cargo install parity-publish@0.3.0 - name: parity-publish claim env: -- GitLab From 4163152506883c985e82d2730693910aabd65a2d Mon Sep 17 00:00:00 2001 From: Xiliang Chen Date: Fri, 24 Nov 2023 22:13:57 +1300 Subject: [PATCH 051/102] pallet-xcm: ensure xcm outcome is always complete, revert effects otherwise (#2405) On extrinsics/call, ensure local XCM execution is complete/successful. Otherwise, fail the extrinsic so that state changes don't get committed to the db. Added regression tests that fail without the fix. fixes #2237 --------- Co-authored-by: Adrian Catangiu --- Cargo.lock | 1 + .../assets/test-utils/src/test_cases.rs | 8 +- .../test-utils/src/test_cases_over_bridge.rs | 4 +- polkadot/xcm/pallet-xcm/src/lib.rs | 28 ++++-- polkadot/xcm/pallet-xcm/src/mock.rs | 7 ++ .../pallet-xcm/src/tests/assets_transfer.rs | 58 +++++++++++++ polkadot/xcm/pallet-xcm/src/tests/mod.rs | 48 ++++++++++- polkadot/xcm/src/v3/traits.rs | 4 +- .../xcm-executor/integration-tests/Cargo.toml | 1 + .../xcm-executor/integration-tests/src/lib.rs | 86 ++++++++++++++----- 10 files changed, 210 insertions(+), 35 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index abd539ea799..ab51be3d5db 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -21504,6 +21504,7 @@ dependencies = [ "frame-support", "frame-system", "futures", + "pallet-transaction-payment", "pallet-xcm", "parity-scale-codec", "polkadot-test-client", diff --git a/cumulus/parachains/runtimes/assets/test-utils/src/test_cases.rs b/cumulus/parachains/runtimes/assets/test-utils/src/test_cases.rs index f1cc76350a0..915d99470c3 100644 --- a/cumulus/parachains/runtimes/assets/test-utils/src/test_cases.rs +++ b/cumulus/parachains/runtimes/assets/test-utils/src/test_cases.rs @@ -152,7 +152,7 @@ pub fn teleports_for_native_asset_works< hash, RuntimeHelper::::xcm_max_weight(XcmReceivedFrom::Parent), ); - assert_eq!(outcome.ensure_complete(), Ok(())); + assert_ok!(outcome.ensure_complete()); // check Balances after assert_ne!(>::free_balance(&target_account), 0.into()); @@ -499,7 +499,7 @@ pub fn teleports_for_foreign_assets_works< hash, RuntimeHelper::::xcm_max_weight(XcmReceivedFrom::Sibling), ); - assert_eq!(outcome.ensure_complete(), Ok(())); + assert_ok!(outcome.ensure_complete()); // checks target_account after assert_eq!( @@ -1211,7 +1211,7 @@ pub fn create_and_manage_foreign_assets_for_local_consensus_parachain_assets_wor hash, RuntimeHelper::::xcm_max_weight(XcmReceivedFrom::Sibling), ); - assert_eq!(outcome.ensure_complete(), Ok(())); + assert_ok!(outcome.ensure_complete()); // check events let mut events = >::events() @@ -1319,7 +1319,7 @@ pub fn create_and_manage_foreign_assets_for_local_consensus_parachain_assets_wor hash, RuntimeHelper::::xcm_max_weight(XcmReceivedFrom::Sibling), ); - assert_eq!(outcome.ensure_complete(), Ok(())); + assert_ok!(outcome.ensure_complete()); additional_checks_after(); }) diff --git a/cumulus/parachains/runtimes/assets/test-utils/src/test_cases_over_bridge.rs b/cumulus/parachains/runtimes/assets/test-utils/src/test_cases_over_bridge.rs index 851fcd5c7d6..8007b275cb5 100644 --- a/cumulus/parachains/runtimes/assets/test-utils/src/test_cases_over_bridge.rs +++ b/cumulus/parachains/runtimes/assets/test-utils/src/test_cases_over_bridge.rs @@ -483,7 +483,7 @@ pub fn receive_reserve_asset_deposited_from_different_consensus_works< XcmReceivedFrom::Sibling, ), ); - assert_eq!(outcome.ensure_complete(), Ok(())); + assert_ok!(outcome.ensure_complete()); // author actual balance after (received fees from Trader for ForeignAssets) let author_received_fees = @@ -588,7 +588,7 @@ pub fn report_bridge_status_from_xcm_bridge_router_works< hash, RuntimeHelper::::xcm_max_weight(XcmReceivedFrom::Sibling), ); - assert_eq!(outcome.ensure_complete(), Ok(())); + assert_ok!(outcome.ensure_complete()); assert_eq!(is_congested, pallet_xcm_bridge_hub_router::Pallet::::bridge().is_congested); }; diff --git a/polkadot/xcm/pallet-xcm/src/lib.rs b/polkadot/xcm/pallet-xcm/src/lib.rs index 38ea7555fc3..74a24b132da 100644 --- a/polkadot/xcm/pallet-xcm/src/lib.rs +++ b/polkadot/xcm/pallet-xcm/src/lib.rs @@ -547,7 +547,7 @@ pub mod pallet { InvalidAssetUnsupportedReserve, /// Too many assets with different reserve locations have been attempted for transfer. TooManyReserves, - /// Local XCM execution of asset transfer incomplete. + /// Local XCM execution incomplete. LocalExecutionIncomplete, } @@ -1009,8 +1009,14 @@ pub mod pallet { message: Box::RuntimeCall>>, max_weight: Weight, ) -> DispatchResultWithPostInfo { + log::trace!(target: "xcm::pallet_xcm::execute", "message {:?}, max_weight {:?}", message, max_weight); let outcome = >::execute(origin, message, max_weight)?; - Ok(Some(outcome.weight_used().saturating_add(T::WeightInfo::execute())).into()) + let weight_used = outcome.weight_used(); + outcome.ensure_complete().map_err(|error| { + log::error!(target: "xcm::pallet_xcm::execute", "XCM execution failed with error {:?}", error); + Error::::LocalExecutionIncomplete + })?; + Ok(Some(weight_used.saturating_add(T::WeightInfo::execute())).into()) } /// Extoll that a particular destination can be communicated with through a particular @@ -1495,13 +1501,25 @@ impl Pallet { let outcome = T::XcmExecutor::execute_xcm_in_credit(origin, local_xcm, hash, weight, weight); Self::deposit_event(Event::Attempted { outcome: outcome.clone() }); - if let Some(remote_xcm) = remote_xcm { - outcome.ensure_complete().map_err(|_| Error::::LocalExecutionIncomplete)?; + outcome.ensure_complete().map_err(|error| { + log::error!( + target: "xcm::pallet_xcm::build_and_execute_xcm_transfer_type", + "XCM execution failed with error {:?}", error + ); + Error::::LocalExecutionIncomplete + })?; + if let Some(remote_xcm) = remote_xcm { let (ticket, price) = validate_send::(dest, remote_xcm.clone()) .map_err(Error::::from)?; if origin != Here.into_location() { - Self::charge_fees(origin, price).map_err(|_| Error::::FeesNotMet)?; + Self::charge_fees(origin, price).map_err(|error| { + log::error!( + target: "xcm::pallet_xcm::build_and_execute_xcm_transfer_type", + "Unable to charge fee with error {:?}", error + ); + Error::::FeesNotMet + })?; } let message_id = T::XcmRouter::deliver(ticket).map_err(Error::::from)?; diff --git a/polkadot/xcm/pallet-xcm/src/mock.rs b/polkadot/xcm/pallet-xcm/src/mock.rs index e744cefb162..0b0f795100c 100644 --- a/polkadot/xcm/pallet-xcm/src/mock.rs +++ b/polkadot/xcm/pallet-xcm/src/mock.rs @@ -153,6 +153,7 @@ construct_runtime!( thread_local! { pub static SENT_XCM: RefCell)>> = RefCell::new(Vec::new()); + pub static FAIL_SEND_XCM: RefCell = RefCell::new(false); } pub(crate) fn sent_xcm() -> Vec<(MultiLocation, Xcm<()>)> { SENT_XCM.with(|q| (*q.borrow()).clone()) @@ -164,6 +165,9 @@ pub(crate) fn take_sent_xcm() -> Vec<(MultiLocation, Xcm<()>)> { r }) } +pub(crate) fn set_send_xcm_artificial_failure(should_fail: bool) { + FAIL_SEND_XCM.with(|q| *q.borrow_mut() = should_fail); +} /// Sender that never returns error. pub struct TestSendXcm; impl SendXcm for TestSendXcm { @@ -172,6 +176,9 @@ impl SendXcm for TestSendXcm { dest: &mut Option, msg: &mut Option>, ) -> SendResult<(MultiLocation, Xcm<()>)> { + if FAIL_SEND_XCM.with(|q| *q.borrow()) { + return Err(SendError::Transport("Intentional send failure used in tests")) + } let pair = (dest.take().unwrap(), msg.take().unwrap()); Ok((pair, MultiAssets::new())) } diff --git a/polkadot/xcm/pallet-xcm/src/tests/assets_transfer.rs b/polkadot/xcm/pallet-xcm/src/tests/assets_transfer.rs index bf39e1ca288..d1b298765e2 100644 --- a/polkadot/xcm/pallet-xcm/src/tests/assets_transfer.rs +++ b/polkadot/xcm/pallet-xcm/src/tests/assets_transfer.rs @@ -1457,3 +1457,61 @@ fn reserve_transfer_assets_with_filtered_teleported_fee_disallowed() { ); }); } + +/// Test failure to complete execution of local XCM instructions reverts intermediate side-effects. +/// +/// Extrinsic will execute XCM to withdraw & burn reserve-based assets, then fail sending XCM to +/// reserve chain for releasing reserve assets. Assert that the previous instructions (withdraw & +/// burn) effects are reverted. +#[test] +fn intermediary_error_reverts_side_effects() { + let balances = vec![(ALICE, INITIAL_BALANCE)]; + let beneficiary: MultiLocation = + Junction::AccountId32 { network: None, id: ALICE.into() }.into(); + new_test_ext_with_balances(balances).execute_with(|| { + // create sufficient foreign asset USDC (0 total issuance) + let usdc_initial_local_amount = 142; + let (_, usdc_chain_sovereign_account, usdc_id_multilocation) = set_up_foreign_asset( + USDC_RESERVE_PARA_ID, + Some(USDC_INNER_JUNCTION), + usdc_initial_local_amount, + true, + ); + + // transfer destination is some other parachain + let dest = RelayLocation::get().pushed_with_interior(Parachain(OTHER_PARA_ID)).unwrap(); + + let assets: MultiAssets = vec![(usdc_id_multilocation, SEND_AMOUNT).into()].into(); + let fee_index = 0; + + // balances checks before + assert_eq!(Assets::balance(usdc_id_multilocation, ALICE), usdc_initial_local_amount); + assert_eq!(Balances::free_balance(ALICE), INITIAL_BALANCE); + + // introduce artificial error in sending outbound XCM + set_send_xcm_artificial_failure(true); + + // do the transfer - extrinsic should completely fail on xcm send failure + assert!(XcmPallet::limited_reserve_transfer_assets( + RuntimeOrigin::signed(ALICE), + Box::new(dest.into()), + Box::new(beneficiary.into()), + Box::new(assets.into()), + fee_index as u32, + Unlimited, + ) + .is_err()); + + // Alice no changes + assert_eq!(Assets::balance(usdc_id_multilocation, ALICE), usdc_initial_local_amount); + assert_eq!(Balances::free_balance(ALICE), INITIAL_BALANCE); + // Destination account (parachain account) no changes + assert_eq!(Balances::free_balance(usdc_chain_sovereign_account.clone()), 0); + assert_eq!(Assets::balance(usdc_id_multilocation, usdc_chain_sovereign_account), 0); + // Verify total and active issuance of USDC has not changed + assert_eq!(Assets::total_issuance(usdc_id_multilocation), usdc_initial_local_amount); + assert_eq!(Assets::active_issuance(usdc_id_multilocation), usdc_initial_local_amount); + // Verify no XCM program sent + assert_eq!(sent_xcm(), vec![]); + }); +} diff --git a/polkadot/xcm/pallet-xcm/src/tests/mod.rs b/polkadot/xcm/pallet-xcm/src/tests/mod.rs index 72814e507f2..056c7dcc196 100644 --- a/polkadot/xcm/pallet-xcm/src/tests/mod.rs +++ b/polkadot/xcm/pallet-xcm/src/tests/mod.rs @@ -445,7 +445,7 @@ fn trapped_assets_can_be_claimed() { assert_eq!(AssetTraps::::iter().collect::>(), vec![]); let weight = BaseXcmWeight::get() * 3; - assert_ok!(XcmPallet::execute( + assert_ok!(>::execute( RuntimeOrigin::signed(ALICE), Box::new(VersionedXcm::from(Xcm(vec![ ClaimAsset { assets: (Here, SEND_AMOUNT).into(), ticket: Here.into() }, @@ -459,6 +459,52 @@ fn trapped_assets_can_be_claimed() { }); } +/// Test failure to complete execution reverts intermediate side-effects. +/// +/// XCM program will withdraw and deposit some assets, then fail execution of a further withdraw. +/// Assert that the previous instructions effects are reverted. +#[test] +fn incomplete_execute_reverts_side_effects() { + let balances = vec![(ALICE, INITIAL_BALANCE), (BOB, INITIAL_BALANCE)]; + new_test_ext_with_balances(balances).execute_with(|| { + let weight = BaseXcmWeight::get() * 4; + let dest: MultiLocation = Junction::AccountId32 { network: None, id: BOB.into() }.into(); + assert_eq!(Balances::total_balance(&ALICE), INITIAL_BALANCE); + let amount_to_send = INITIAL_BALANCE - ExistentialDeposit::get(); + let assets: MultiAssets = (Here, amount_to_send).into(); + let result = XcmPallet::execute( + RuntimeOrigin::signed(ALICE), + Box::new(VersionedXcm::from(Xcm(vec![ + // Withdraw + BuyExec + Deposit should work + WithdrawAsset(assets.clone()), + buy_execution(assets.inner()[0].clone()), + DepositAsset { assets: assets.clone().into(), beneficiary: dest }, + // Withdrawing once more will fail because of InsufficientBalance, and we expect to + // revert the effects of the above instructions as well + WithdrawAsset(assets), + ]))), + weight, + ); + // all effects are reverted and balances unchanged for either sender or receiver + assert_eq!(Balances::total_balance(&ALICE), INITIAL_BALANCE); + assert_eq!(Balances::total_balance(&BOB), INITIAL_BALANCE); + assert_eq!( + result, + Err(sp_runtime::DispatchErrorWithPostInfo { + post_info: frame_support::dispatch::PostDispatchInfo { + actual_weight: None, + pays_fee: frame_support::dispatch::Pays::Yes, + }, + error: sp_runtime::DispatchError::Module(sp_runtime::ModuleError { + index: 4, + error: [24, 0, 0, 0,], + message: Some("LocalExecutionIncomplete") + }) + }) + ); + }); +} + #[test] fn fake_latest_versioned_multilocation_works() { use codec::Encode; diff --git a/polkadot/xcm/src/v3/traits.rs b/polkadot/xcm/src/v3/traits.rs index 1043d17b710..6054bf1456a 100644 --- a/polkadot/xcm/src/v3/traits.rs +++ b/polkadot/xcm/src/v3/traits.rs @@ -275,9 +275,9 @@ pub enum Outcome { } impl Outcome { - pub fn ensure_complete(self) -> Result { + pub fn ensure_complete(self) -> result::Result { match self { - Outcome::Complete(_) => Ok(()), + Outcome::Complete(weight) => Ok(weight), Outcome::Incomplete(_, e) => Err(e), Outcome::Error(e) => Err(e), } diff --git a/polkadot/xcm/xcm-executor/integration-tests/Cargo.toml b/polkadot/xcm/xcm-executor/integration-tests/Cargo.toml index d869fc6f2dc..ddb45965ee4 100644 --- a/polkadot/xcm/xcm-executor/integration-tests/Cargo.toml +++ b/polkadot/xcm/xcm-executor/integration-tests/Cargo.toml @@ -12,6 +12,7 @@ codec = { package = "parity-scale-codec", version = "3.6.1" } frame-support = { path = "../../../../substrate/frame/support", default-features = false } frame-system = { path = "../../../../substrate/frame/system" } futures = "0.3.21" +pallet-transaction-payment = { path = "../../../../substrate/frame/transaction-payment" } pallet-xcm = { path = "../../pallet-xcm" } polkadot-test-client = { path = "../../../node/test/client" } polkadot-test-runtime = { path = "../../../runtime/test-runtime" } diff --git a/polkadot/xcm/xcm-executor/integration-tests/src/lib.rs b/polkadot/xcm/xcm-executor/integration-tests/src/lib.rs index d8c77f8317e..c02cb218885 100644 --- a/polkadot/xcm/xcm-executor/integration-tests/src/lib.rs +++ b/polkadot/xcm/xcm-executor/integration-tests/src/lib.rs @@ -76,33 +76,59 @@ fn transact_recursion_limit_works() { sp_tracing::try_init_simple(); let mut client = TestClientBuilder::new().build(); - let mut msg = Xcm(vec![ClearOrigin]); - let max_weight = ::Weigher::weight(&mut msg).unwrap(); - let mut call = polkadot_test_runtime::RuntimeCall::Xcm(pallet_xcm::Call::execute { - message: Box::new(VersionedXcm::from(msg)), - max_weight, - }); - - for _ in 0..11 { - let mut msg = Xcm(vec![ - WithdrawAsset((Parent, 1_000).into()), - BuyExecution { fees: (Parent, 1).into(), weight_limit: Unlimited }, + let base_xcm = |call: polkadot_test_runtime::RuntimeCall| { + Xcm(vec![ + WithdrawAsset((Here, 1_000).into()), + BuyExecution { fees: (Here, 1).into(), weight_limit: Unlimited }, Transact { origin_kind: OriginKind::Native, require_weight_at_most: call.get_dispatch_info().weight, call: call.encode().into(), }, - ]); + ]) + }; + let mut call: Option = None; + // set up transacts with recursive depth of 11 + for depth in (1..12).rev() { + let mut msg; + match depth { + // this one should fail with `XcmError::ExceedsStackLimit` + 11 => { + msg = Xcm(vec![ClearOrigin]); + }, + // this one checks that the inner one (depth 11) fails as expected, + // itself should not fail => should have outcome == Complete + 10 => { + let inner_call = call.take().unwrap(); + let expected_transact_status = + sp_runtime::DispatchError::Module(sp_runtime::ModuleError { + index: 27, + error: [24, 0, 0, 0], + message: Some("LocalExecutionIncomplete"), + }) + .encode() + .into(); + msg = base_xcm(inner_call); + msg.inner_mut().push(ExpectTransactStatus(expected_transact_status)); + }, + // these are the outer 9 calls that expect `ExpectTransactStatus(Success)` + d if d >= 1 && d <= 9 => { + let inner_call = call.take().unwrap(); + msg = base_xcm(inner_call); + msg.inner_mut().push(ExpectTransactStatus(MaybeErrorCode::Success)); + }, + _ => unreachable!(), + } let max_weight = ::Weigher::weight(&mut msg).unwrap(); - call = polkadot_test_runtime::RuntimeCall::Xcm(pallet_xcm::Call::execute { - message: Box::new(VersionedXcm::from(msg)), + call = Some(polkadot_test_runtime::RuntimeCall::Xcm(pallet_xcm::Call::execute { + message: Box::new(VersionedXcm::from(msg.clone())), max_weight, - }); + })); } let mut block_builder = client.init_polkadot_block_builder(); - let execute = construct_extrinsic(&client, call, sp_keyring::Sr25519Keyring::Alice, 0); + let execute = construct_extrinsic(&client, call.unwrap(), sp_keyring::Sr25519Keyring::Alice, 0); block_builder.push_polkadot_extrinsic(execute).expect("pushes extrinsic"); @@ -113,11 +139,29 @@ fn transact_recursion_limit_works() { .expect("imports the block"); client.state_at(block_hash).expect("state should exist").inspect_state(|| { - assert!(polkadot_test_runtime::System::events().iter().any(|r| matches!( - r.event, - polkadot_test_runtime::RuntimeEvent::Xcm(pallet_xcm::Event::Attempted { - outcome: Outcome::Incomplete(_, XcmError::ExceedsStackLimit) - }), + let events = polkadot_test_runtime::System::events(); + // verify 10 pallet_xcm calls were successful + assert_eq!( + polkadot_test_runtime::System::events() + .iter() + .filter(|r| matches!( + r.event, + polkadot_test_runtime::RuntimeEvent::Xcm(pallet_xcm::Event::Attempted { + outcome: Outcome::Complete(_) + }), + )) + .count(), + 10 + ); + // verify transaction fees have been paid + assert!(events.iter().any(|r| matches!( + &r.event, + polkadot_test_runtime::RuntimeEvent::TransactionPayment( + pallet_transaction_payment::Event::TransactionFeePaid { + who: payer, + .. + } + ) if *payer == sp_keyring::Sr25519Keyring::Alice.into(), ))); }); } -- GitLab From f086d540ae06b891f1a03bc1281809821d38a6f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Pestana?= Date: Fri, 24 Nov 2023 10:36:22 +0100 Subject: [PATCH 052/102] pallet-staking: Converts all math operations to safe (#2435) This PR converts unsafe math operations to safe in the staking pallet. Closes https://github.com/paritytech/polkadot-sdk/issues/2431 --------- Co-authored-by: Ankan <10196091+Ank4n@users.noreply.github.com> --- substrate/frame/staking/src/lib.rs | 11 +++++---- substrate/frame/staking/src/pallet/impls.rs | 14 ++++++----- substrate/frame/staking/src/pallet/mod.rs | 4 ++- substrate/frame/staking/src/slashing.rs | 27 ++++++++++++--------- 4 files changed, 33 insertions(+), 23 deletions(-) diff --git a/substrate/frame/staking/src/lib.rs b/substrate/frame/staking/src/lib.rs index de989e8943d..e6250bb9681 100644 --- a/substrate/frame/staking/src/lib.rs +++ b/substrate/frame/staking/src/lib.rs @@ -530,12 +530,12 @@ impl StakingLedger { let mut unlocking_balance = BalanceOf::::zero(); while let Some(last) = self.unlocking.last_mut() { - if unlocking_balance + last.value <= value { + if unlocking_balance.defensive_saturating_add(last.value) <= value { unlocking_balance += last.value; self.active += last.value; self.unlocking.pop(); } else { - let diff = value - unlocking_balance; + let diff = value.defensive_saturating_sub(unlocking_balance); unlocking_balance += diff; self.active += diff; @@ -589,7 +589,7 @@ impl StakingLedger { // for a `slash_era = x`, any chunk that is scheduled to be unlocked at era `x + 28` // (assuming 28 is the bonding duration) onwards should be slashed. - let slashable_chunks_start = slash_era + T::BondingDuration::get(); + let slashable_chunks_start = slash_era.saturating_add(T::BondingDuration::get()); // `Some(ratio)` if this is proportional, with `ratio`, `None` otherwise. In both cases, we // slash first the active chunk, and then `slash_chunks_priority`. @@ -1185,8 +1185,9 @@ impl EraInfo { let nominator_count = exposure.others.len(); // expected page count is the number of nominators divided by the page size, rounded up. - let expected_page_count = - nominator_count.defensive_saturating_add(page_size as usize - 1) / page_size as usize; + let expected_page_count = nominator_count + .defensive_saturating_add((page_size as usize).defensive_saturating_sub(1)) + .saturating_div(page_size as usize); let (exposure_metadata, exposure_pages) = exposure.into_pages(page_size); defensive_assert!(exposure_pages.len() == expected_page_count, "unexpected page count"); diff --git a/substrate/frame/staking/src/pallet/impls.rs b/substrate/frame/staking/src/pallet/impls.rs index e18d9378b5e..d294686751c 100644 --- a/substrate/frame/staking/src/pallet/impls.rs +++ b/substrate/frame/staking/src/pallet/impls.rs @@ -27,8 +27,8 @@ use frame_support::{ dispatch::WithPostDispatchInfo, pallet_prelude::*, traits::{ - Currency, Defensive, EstimateNextNewSession, Get, Imbalance, Len, OnUnbalanced, TryCollect, - UnixTime, + Currency, Defensive, DefensiveSaturating, EstimateNextNewSession, Get, Imbalance, Len, + OnUnbalanced, TryCollect, UnixTime, }, weights::Weight, }; @@ -148,7 +148,7 @@ impl Pallet { // `consolidate_unlocked` strictly subtracts balance. if new_total < old_total { // Already checked that this won't overflow by entry condition. - let value = old_total - new_total; + let value = old_total.defensive_saturating_sub(new_total); Self::deposit_event(Event::::Withdrawn { stash, amount: value }); } @@ -262,7 +262,8 @@ impl Pallet { // total commission validator takes across all nominator pages let validator_total_commission_payout = validator_commission * validator_total_payout; - let validator_leftover_payout = validator_total_payout - validator_total_commission_payout; + let validator_leftover_payout = + validator_total_payout.defensive_saturating_sub(validator_total_commission_payout); // Now let's calculate how this is split to the validator. let validator_exposure_part = Perbill::from_rational(exposure.own(), exposure.total()); let validator_staking_payout = validator_exposure_part * validator_leftover_payout; @@ -475,7 +476,7 @@ impl Pallet { bonded.push((active_era, start_session)); if active_era > bonding_duration { - let first_kept = active_era - bonding_duration; + let first_kept = active_era.defensive_saturating_sub(bonding_duration); // Prune out everything that's from before the first-kept index. let n_to_prune = @@ -501,7 +502,8 @@ impl Pallet { if let Some(active_era_start) = active_era.start { let now_as_millis_u64 = T::UnixTime::now().as_millis().saturated_into::(); - let era_duration = (now_as_millis_u64 - active_era_start).saturated_into::(); + let era_duration = (now_as_millis_u64.defensive_saturating_sub(active_era_start)) + .saturated_into::(); let staked = Self::eras_total_stake(&active_era.index); let issuance = T::Currency::total_issuance(); let (validator_payout, remainder) = diff --git a/substrate/frame/staking/src/pallet/mod.rs b/substrate/frame/staking/src/pallet/mod.rs index a68e9c90da9..1f79ef63a47 100644 --- a/substrate/frame/staking/src/pallet/mod.rs +++ b/substrate/frame/staking/src/pallet/mod.rs @@ -1068,7 +1068,9 @@ pub mod pallet { ensure!(ledger.active >= min_active_bond, Error::::InsufficientBond); // Note: in case there is no current era it is fine to bond one era more. - let era = Self::current_era().unwrap_or(0) + T::BondingDuration::get(); + let era = Self::current_era() + .unwrap_or(0) + .defensive_saturating_add(T::BondingDuration::get()); if let Some(chunk) = ledger.unlocking.last_mut().filter(|chunk| chunk.era == era) { // To keep the chunk count down, we only keep one chunk per era. Since // `unlocking` is a FiFo queue, if a chunk exists for `era` we know that it will diff --git a/substrate/frame/staking/src/slashing.rs b/substrate/frame/staking/src/slashing.rs index 0d84d503733..709fd1441ec 100644 --- a/substrate/frame/staking/src/slashing.rs +++ b/substrate/frame/staking/src/slashing.rs @@ -57,7 +57,7 @@ use crate::{ use codec::{Decode, Encode, MaxEncodedLen}; use frame_support::{ ensure, - traits::{Currency, Defensive, Get, Imbalance, OnUnbalanced}, + traits::{Currency, Defensive, DefensiveSaturating, Get, Imbalance, OnUnbalanced}, }; use scale_info::TypeInfo; use sp_runtime::{ @@ -85,7 +85,7 @@ pub(crate) struct SlashingSpan { impl SlashingSpan { fn contains_era(&self, era: EraIndex) -> bool { - self.start <= era && self.length.map_or(true, |l| self.start + l > era) + self.start <= era && self.length.map_or(true, |l| self.start.saturating_add(l) > era) } } @@ -123,15 +123,15 @@ impl SlashingSpans { // returns `true` if a new span was started, `false` otherwise. `false` indicates // that internal state is unchanged. pub(crate) fn end_span(&mut self, now: EraIndex) -> bool { - let next_start = now + 1; + let next_start = now.defensive_saturating_add(1); if next_start <= self.last_start { return false } - let last_length = next_start - self.last_start; + let last_length = next_start.defensive_saturating_sub(self.last_start); self.prior.insert(0, last_length); self.last_start = next_start; - self.span_index += 1; + self.span_index.defensive_saturating_accrue(1); true } @@ -141,9 +141,9 @@ impl SlashingSpans { let mut index = self.span_index; let last = SlashingSpan { index, start: last_start, length: None }; let prior = self.prior.iter().cloned().map(move |length| { - let start = last_start - length; + let start = last_start.defensive_saturating_sub(length); last_start = start; - index -= 1; + index.defensive_saturating_reduce(1); SlashingSpan { index, start, length: Some(length) } }); @@ -164,13 +164,18 @@ impl SlashingSpans { let old_idx = self .iter() .skip(1) // skip ongoing span. - .position(|span| span.length.map_or(false, |len| span.start + len <= window_start)); + .position(|span| { + span.length + .map_or(false, |len| span.start.defensive_saturating_add(len) <= window_start) + }); - let earliest_span_index = self.span_index - self.prior.len() as SpanIndex; + let earliest_span_index = + self.span_index.defensive_saturating_sub(self.prior.len() as SpanIndex); let pruned = match old_idx { Some(o) => { self.prior.truncate(o); - let new_earliest = self.span_index - self.prior.len() as SpanIndex; + let new_earliest = + self.span_index.defensive_saturating_sub(self.prior.len() as SpanIndex); Some((earliest_span_index, new_earliest)) }, None => None, @@ -500,7 +505,7 @@ impl<'a, T: 'a + Config> InspectingSpans<'a, T> { let reward = if span_record.slashed < slash { // new maximum span slash. apply the difference. - let difference = slash - span_record.slashed; + let difference = slash.defensive_saturating_sub(span_record.slashed); span_record.slashed = slash; // compute reward. -- GitLab From 60fde52ca686ec79eb91555b40556fc6c2bb190e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=B3nal=20Murray?= Date: Fri, 24 Nov 2023 10:14:51 +0000 Subject: [PATCH 053/102] Remove unnecessary files --- cumulus/parachains/chain-specs/coretime-rococo-genesis-head-data | 1 - cumulus/parachains/chain-specs/coretime-rococo-wasm | 1 - 2 files changed, 2 deletions(-) delete mode 100644 cumulus/parachains/chain-specs/coretime-rococo-genesis-head-data delete mode 100644 cumulus/parachains/chain-specs/coretime-rococo-wasm diff --git a/cumulus/parachains/chain-specs/coretime-rococo-genesis-head-data b/cumulus/parachains/chain-specs/coretime-rococo-genesis-head-data deleted file mode 100644 index b5d0a5708d1..00000000000 --- a/cumulus/parachains/chain-specs/coretime-rococo-genesis-head-data +++ /dev/null @@ -1 +0,0 @@ -0x000000000000000000000000000000000000000000000000000000000000000000ec43d10adfeb9aeea0c434b21a13cb3203f9a05e3085b4220909ab35c2ed1fc303170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c11131400 \ No newline at end of file diff --git a/cumulus/parachains/chain-specs/coretime-rococo-wasm b/cumulus/parachains/chain-specs/coretime-rococo-wasm deleted file mode 100644 index c9bb05ef56e..00000000000 --- a/cumulus/parachains/chain-specs/coretime-rococo-wasm +++ /dev/null @@ -1 +0,0 @@ -0x52bc537646db8e0528b52ffd00585436042ea60580125010284e271daf9b00245216909da40993fe8e859b1148e45cb8729243aa1823da08d0d96910fa75d49c70180540e8ee08a87d2f3dac77eac03c73195e4b93bb35754ddfd3da2664efbdf7de5b4a99640a4413f1101011d23f094e79b98eb594e2761ac16f216037f105a2e6f26122cfaca8799e5991fdb8e3db07f03cab42e73b2472f4ed47603b71de2eb693e6ed451d12e134cd3f09caff64a8f9a7d929294584b68b3a94f89acb5001fc9a734884db35822feb1d635f39ce9f266747fa23f5a9f99b7348a4fa537f1f87f38eb09fced9d19f73cd8edc2e129ef391db358af09c8f9a73bbc6109ef3a739ed76a5603f5db3fc9c1d959efa27c1cdf26b969fc323f467b552f3a753cbed9297b64bfa26a70b5fd769b56f2b5fda31042ffd63d9bd1a47f0725ae91c42d597f4dbf2c75a22f978ea0d08449e55593381287f747d7b3fcfaa9479573bb5ffe0106a8b181808ff5383ed144466f9d887c82e9d3b3bcc739e999d7bf065e21b7cec244a67e7eee376922c9ffd63713bf1b3733bb58fdc7f32096a8b330c84ff931c4eead3a5cf9088bc2c87a0b468d32efef669b95dd3bf094a2bbfc3760ee9e5763d35874468bba6cb9001b1efa796667cfcdd2ebb2fc7a484fad8b907db51940e4a19644e9752ca9efed4724eef39e7943e65b773dfb765a49d7a4b28e97dc7f6d9523af1718fd1bffd630cc48f2f10b95d5386454890c964547eb6d37476da4e926b57fb534f0bb6ab7d00e258f4edd2a98fdcb77f47edc4dffe49b0a89dda8fda497ebb523b4d6fe790c8f4a77e6a6aa5ecf82831eea5732f6fcb8874ead2e99d923f2f9577942ffda97b4ac9c4c7cf3d46f1db3fae9dc6241e6144e923f81d44947e443a9379a9b4fdb397a2855f83cc43a48fd3b9761ae54f67ffa6ad409ccece2107b45decf372ed627feaaf4169e983805e6a7b2944e08a874091b297dae0a5682fbd9dc543a048d94b6df0d2dbbf094a3b3fe42150a4eca5367829da4b6f07790814c9e7a5802fbd7dc543a048d94b6df0d2db393c4265b297fed4328412652f1d6c27fe760ea1a4eca53ff5533ff553b3e576b1738fbe4cc4671eb196adc5f7310f4169a1a65dfcdc2e760e89d076b13f352b7ddc1ff7c75322cfa868f991fbea623bf18c8a96afceb513cfa8c8be3ad84ef2ab730be1d758f4d53f16f718fdab733b511fc167e7da693a3bb7937476da4eedec623bf1b37308d53ecaa7ce2114f5f6a7e61ef532f1671e312925958f650e22cfd4f47929fbe91fcb1c449ea9e9f352f6d33f163bf718a5ecdb3fb6f20491093bff28653fb2b7f7f34c4d122f5f7a8746a4ece71da5ecd93f0e8f884f7d5a29f4e99592553f9ded187b76e62123f51694f7f44ab17eba900ff22357fdc8defe34d9f24fcb0c84fd93205b7982c8849d7f94b21fd9dbfb79a62689972fbd432352f6f38e52f6ec1f8747c4a73ead14faf44ac9aa9fce768c3d3bf390917a0bca7b7aa5583f9df17c901fb9ea47f6f6a7c9967f5a6620ec5f836c2512a274f9cc16b0cb50ca7f3a8752e2cfabd42ee94ffdd44ffdd44fcd96dbc5ce3dfa3291b2671eb1291bcf27eb88d2b95dec0c7e2c4494cecedd3543c24123f37864e141e5be71afb87bae16178a6be7e6b9565c2cee13568c2bc5cde24671ebdc3577888b83a760a7b8586c1996900564d3b071ec10568d3dc3a261035935ac0c760d6b854d63abb07aec1d6b84a5c10a619bb0782c15560b9bc7bdb048d824ec12566699b072ec1cafb24a78204b8625c2866163b033d81f6c0df605cbc7c1b063b81f57c3e9b80a4ec67b7033f68db3e06ef818f7c1cbd822bc057b849d59202c1c1b84bfe06c380fb6059b83d5c19bb055f68d5bc5d7b857ac1fbb83cdc2b2b13e3814ee8485c18e7122dc8dff60ddf80e6ec7ae6053b067ac19dbc696b9567614b1c3881d3dec106207103b82d8c1c30e1c76b4d9a1c38e1c76bcb003861d67767cd98185c90da636980631a9c15405131b4c6b3009620ac48487a90ed3164c7f98f83069c14405531f263d4c5c3075c1f404d31da63c4c57b4a460faa2d586490c26305a78980031d1619aa25587c90c25314a6194c0287d69bdd122d472434905a51494c628a1a0c482520b4a3328c9a01483d219251894cc28bda05446c985962025354a695a55ad424a3528d1a08446c98b5217252e4a272899a0b445498b52094a5994b0285d51b2d222a365468b8b1618ad325a5fb4feb4bc68f56975d1daa2f5446b4f8b89d69c5613ad295a4eb4e2b4906845d162d3caa165a6f5420b865699d697960b2d312d145a605a675a615a29b44e6899d0da2283904a4835ad125a595a555a5a92f024e549b2931445d211496b92564852218986a41390c84042a325432a03e90b242f90fa2075818407690aa43a484e203d814407490fd21ba42290e22019817404d20c0988a3318eca38027444c6111a47818ed2383ae3e8cf119fa32f8eba38ea73e4451211474a1cc9394ae2688923218e72d081838e37497174b8315a43070d3ab0e8b8c1688f0e2174a0d1714587151d5974f4a06307a3318cc43032c3e88f11193ad61861619485911ea32f74f8605485111ba31c8cda18e9607483110c4631189d315a632483d10c46668c70c8e1270718493de468224716ab311aa00e0d911e223c3988f862c801a7ab81888a1c457430686574317c33e4981161419487c88aee4cf7c2d09f4f06a22a3a1b7220010a1ae2026990c743a84348c4f605898d8dcbd665f312b60981200a430403d19e1c468455847872bce96e20da026c8353037483684b919e231d884af8bc782584728af2708188ae7c7a86000da93174461215958a7008222fdb0b4429ecb821dc81a885ed86d04dd210442b108d0107693d886d8882c435c42a442abc339e190f866f8a4f0af14e4b07710d6b0dd1065620510d4b8d0e894e0eeb8da12586e40c2531a404cb8d8d8d2d10ab4ab42256a952ecf062e4876585e80d56151c5558b21d5c767469f281555592119aa01d27e090857b880a855c6864745274518074be33ab37566e20a0d525d462d5c68a506b85708bd5a0904f2b8b9697169721328e76a8775a6f92de782c843d10b9b09921124364064482080524338854406a8348860d06a217b6185a2a20a5d1e2033e31148626464885e6e7bb022681830a3805680794a2150618855d13ea21aa01a98a1d3f205d816487e8cb76e52324e5e4f8a2c3617be3e353a3f86af868f06cf0d40c8d914308b04ea746479b30cf87065482e543121c2330bc304374be2fde180f8c0e1ebc2f484a1065d9c020090a7fd8cab494601a83a80b12145d191d15dd14dd9d2e4fa7a7f3a2aba2ebd3e1e9ace87ee80675823a36aa9e232eb42d342d3c14bc162a1e26346a9ed6182d31bc324431ecd8a14251f7b496203ad382d3b5e974e888e876e87ab07f3a3717cfa522c7114844dc2a3a2d57080b468e385a218be6b321071d223044345c4220143bde6c3c6c6b6c6ab0bc60f5d9746059c1ba82a587b5879587b5058bcfd6c6e6c6366823b409daaab6424fdb0e2c32ac2b2c13585b582bb0bcb060609961bdc06281e502ab0cab051617161856092c145659b0c2b0b0b0c4b0546075618d619db0e262a5c58acf0a0b9616d6175616d619560aab16562eac58d8da6c3de8804187191d2fe828a3c3051d2de8604107191d2be85041470a3ac6e8404187181d617480d1f14587171d5d7470d171820e13746cf9a0e80a21f9213a01290caf4bab08cf05a4353a1aba193a193433b433760c115a219730a2c1084d92092d1e9082f05230aa81084be803d115564c98436706094eb7069317e21444652a16d5ce111b758aa42298b2e8c8e418c285a83ee42063ed1055dd3b0ec47783f5a24b93e4a65bc3e4e74321b45389006f68d9010979260cedb08901d5d82d2c0e200b5b16a4243c2e445c9258204a035a49ba82340492109e16efe3e901df8036d42186e0745a845158173c159290f05e189ae9880316f15901d98477bc8a4bc5b362a88d77021119eb4652178dcf37c6764184c6b9b06498d2b07d3e2a55087fe38909df301102c9d42d2c0a1e1622161c0d6f05ed0bed4d5215434770692005d2b248926359f027be2a1c1a5f0a476b843c24116a51613ac37ee16df1b280558aa4289a02acc2110478a556a1b9f12188b47857b4a0600a23a98d1d441c6d4164828605911aa4429e9724379c0af00d8fc2eb7c7692de48aa6a6901caf120c04244336c5590d4f0c82415b251483ad209d9840423bf482ff209d94572992299b000930b481f96c835218c4004502a20d9482124e041048a40e0011d1c69809105402920011b0071493b72ce8f260b0220000aa46c517cf259b2ac743da3a228e10012119444858004c92727084ea29020f18000317a6165540684264b46e040cbc805f6c0920e38791235a5240aca07519644897212c5410fa3163e40f2a4034ea09a34798280a90fa29a347982000a8c58086244a64913251f3469a204012b8430e50127514d54e0a8a80e20793285642a040f2c89024193510a1ca5c9122553512020898aea800fa331fca4034e9620090194a811a4902c11e1a79c447d20044a3a70231438ea03274f9c2051826489081ff58193270e987232c2930f3ef8252331203cf9200a841d4661384a08a298208912250451469c3c5912254a5404ac111806c112111e4a1413284f2870c41a7de1a82925202c69a2440a92a811a246788007204479c0034a3ca0c0c80b4761f24154081f74e128534ea2a04485e064891b7171b2a4032da313f88325519c2c81324542149210341141042548a04481d064c9082f261f3c69f252323281a324196d612548948cb4f00790289952028292a9a8060c19952082254d942c995ae264490ea32ccce483274d3880246a6a840fa248882232c2c2509e200034bac251a2964c2d81f22484a91194e030b2c24e9e2c995202650410904c3d691205c912115e0994113e07cba8261c5032e564840e2099fa200aca12109c2c418204c9b91cb6364c6cb1e639f6f14c267b199b48da26c5268514416eb4b56d776bb55ab799d2c94c6b73fdba72ad9556eab529a5b5d63aeb9c3da6e4cab567d35a99a5ac952b4b596ba54c65adbdb1644a6977af9af2e498bb6eb576add4e36653ae9b22c77dabc935e9a3f4d3666b1da555e324d3eead29e5ae94997b1a590057aeb26bd38deb2665add5db6a5d71ccccdc21d795d649b923e64ac35e6adab356ba35a5b3b68f5abbe9ec9e4ce79cdc7157a69425cbcab269334b28daa369d39ecc3d9999bb69e59e92b967f7a4b5d639b9b9fab8d9899ca6699472dd95ce6e36d76d5266d994725d5bee6eb1721cd7dacd9472a574ce2ae54627ad739b54d64a694f4a7b76735d65ae95b97b72ad0c824c6b55004b5a996bad2be61e6a5a290749495c3353aeb76e52da71731d6f3c9bd5719416a1dddc1ae5a16626c25ed3e666aeb9e6a80fe6d975cc1ce5e6ecd56aae567376d77573dc9c1c37394ab9cabc6d94d6c9d55a7bd5ad3aaefbdb66524fa65c731c4727e55876b3945276cf9ecc534ae69a39ee9bab1d93eb49b76e8e4eb159239294cec9511e47455c4f59abe4ba9b73524e009db267d39eb47bf25118ce150264edbaae63b138aee3b849a9eceeaa647577d75dd7edabb252ae762177b737dd6633d3d9944eee9a39295f1409090969e38d3362ee5efabeff98999959e3902957a3a63d2995cc61184ae66e1c3cc2f9141a49d69a354a99bb63d6d106cc9da4b3b26a53e68f997b7077d7969293956bad95a39443d6e00074d249e547bf6e1e94f6eda673f616f60c299592992b737377d72c6e2a2537addcb47677e56d6eb46bcb75576616eb64aecc35ed6aad95e9ac1918a02947bbe9b651ee6d72f79cccbdf547bbbb6e937273dbe6b445454545a2c8949b4c7b36b7e4e6dadd6187cdcc4328b37737d7ee6eda949b32f7e4ae9552dacd54b6ec5a6b77ad5dbb7637334fe6ba6ada3b7a450b403f26666eae94007476d75aabec6e4ae9eca6dd3de76c6e721dc7cd2aa4525a75701ca594d6ba715b6d96130030d0c19a3a2e00808e29a5acdbb6b12aad75ab750002a816485025901b959b646d5cad74d5b53657a994b4d6de6a5d05e1e8e4689d1ba595b96a95ce39bb49e7a4ccd5da85b5366ddadddd5acfadd2aeccccd5dad78c7bc6c4c11d02284f3e10f501cd630ba2a44435414282920fec30620b3cf0a409120f3859e2010f3c698284c387488802c1c912244e962809e1830e74e0c9ad008428285120407982c4090301442d813235c1009a3459c22448007c0071fd70e5f891c30705134c100407084d9684f00192a9262328e94014084d17382d91f00404534c4e1808c0890460011201443151d28403483ce0644908519484e002e0d134a5044a9493280f4091006401444589120545840f3cf900099428294f3e888282444914103e8842620113270c0420c20751518430756049012cc0000301801085e4c994082180f2010f284aa6a2f8c01105698905f0e4099424261f28e14093264fa04ce0521205252904514c904c9110e58449692aca03484451a6a22c21214a9bfa404914274aa04c21995af2810f3c71e560012ce940141411ee101425514d3e68e100c149940822284112e50125509e4c45916cc10798382a0a4a0790407932a5e483274d9a2851620ba23eb064cac908502e013a3035c29214275173882d40e2e4c9922850a2a42021212a0424534e96401101c90751967c00c91409514a529c444d17e845f346553b2ac94962d28bd1189d5454b1d8c654541c8bc5382aaa30494c76311615159d9d84a9689298a4a26aaa992426a9629d844ac6a8a86612a68ac566929884c568128e69545431fa2561aa58972426633199848a8a8a2a569330151515552ca62589c999844a525175128e7949988aaa93c424954cc254924b1293b12d095351c5623409958c494ec2312d5693c4242789c958ac67128ec562319a8463b14e129331998463320903681b9299e507a228e1285cf9e99e36fbea8909f4d33d317d3ece80a4a0e6a0d3f0c874cf69a88011c497d24e89bff9e775584406790b9e43cfeb187bc9790d8f783eca6722dde3bc76397ade3e6b48446a0c8f4c97b786443eff34c9bd92925532f4ce436f3b5576b56badd567e71ad0c0cfcaff38e4c073240f5b28a0f9e95e2b4461cc4fe740d041ae4b2a12862b50ca2516abc5e450628b6929946dc270290cedd2aa864bde2dad58385aada5bed36a11d1961b798b25825216ed988276b45a361c9aadd07578e85f685b6bdaa9e5d53f11079324f73cc8e3088b24b9e7353432ddf38f08ec069794c2100a14c8e4a0e8502ce71c64021d14ef28c50aedd295a2fa964b3b82a095afd46af9532f597e9048cba792e507bf7e2dafadd08f3c9456b345a473fe3491ec283f29f4248b8464f98f74d84aa65dd58dec0cd4aeea9d0dad1d613f6447d813d911b6b2236c0a9a82be7a25d34e7de7abcf40edd479f54f033dcbff7dde6d414d67e2d437e75001da9a760abdfa1786a177e8d2ae507083821c14eea0d0078540fc795afce5a0bbe717e61ef835f4ef03c3d09ffa03b7ce57def9cab537edb4f2eadf6ab55a791e4b044128509ef739e79ee73977c70fb4acb196f12cbff8acd52a74e9e1956bda55dddd7a244ca172bf7eafccdd5a6bf92539aff53c9b41f15f8356b2d1fcaba094fed45e788443223cebb2e69b5e5eed4dbbaa77d880eebd3b82a035702b4322a05391f0d2dd4acfe22f983b156c86317f642febb2b9678c31b297df2b59fce5cedd917eae49c977ce399453dace3d3bfdb32309df39870d707de74fed79768eb5cc57d7deb49d7655af23f855b6f95abdedc83655baf95af4d54577feea728d57075b03f74a430facbbcfd00377d875bfd6b5d9330faa196bb58f31c6a39fec5ce6fc740a3e07b1dfa6a8cf3b428d30285238d7ee1475cd47fa23d5d79104a91dcf3987476ab3061aacf34ae1ee66ab33bb3c23b5a39e6917cf78f8e93dc322ae323ec800608c04607a70e1a1e5fe7479c5fe7429f39f0edbf1d34960fae9534b3f5d04a59fdea4f5d34348fae92020fdf424473f3d033a7e7a058c7eba07397e7a07453f9d01387eba02887e7a02867efa93f8d33360fd7402ac7efa05e14f0f02fef41fdf4f77793fbd47f7d39dfbe94adb4f3fd27e7a51fde922fde9e0fce95c91fe795b46e4b7cb6fa73c7be93c43287fe95f75cd72756d9cdad83ebdb2db191a7149a92f9d43235dd5c736c99d5192f43c9b9179a50638cba79f76525252529a4a4c4afe4d5049c99f5a14999898fc93a0689998bc43224c2cbb62d91521efcc534f72764e1a60937b7efa942b5ff2efcb9f9f9e64c7fe96330f09f22c4fe201466c79901f65cb9f9a798805dffe7960120f30a2e6417eece7dc0b8db47cec0fe5b77f1c1629c03303e162ed9a1d8bc45eb3b197b6e52c3b2679fbe78547fa35e79c03ed7237f6d27276942e3d74d6fcc369958b7440173aa0ba0682219195b32cbf68f93f8e505df2a5a5a5a5bab4c3772cf9d2d28ea525255fb9d26af54934497694dff2c9e42b671a83bc928f2d6fd7c222d35bf2957c7584b4b49a7f9656abd5ca2ef5eab68ce8f025d7e14b632f2125e1f856df5205b35a5afa9696ec072ef9d26d1939f2cf8ffcf34fc942a1afe449ad22cd0dcb396c807ccdfb909ce548cef28f653f57b2dc7f5e8e952f4589fd6acb237f6965f943229f11f99a3fb592e597deb56c923fcd24cb8f64b73beda27e64b536eda2aec3562e7684bd6747d88f9a1b181b39cb8d2e27a85dd459579e6917cd619388f3c72dcf96e7a973828a6c12b17fd4dc686e9efa76a79d2a171c3689287fac609ebad6a69d584efd9b7eda6968c8f33c34e2e33d3fede439fdba7b8ee71d12f1bce5b49374511445e7f0a945ff5803dd9ce028d1bce8332422bab4fc43965f86479a5ebc2da75dd4bfae939dd3ced9fa177b4ddaa7fefce30c8079f3409e6760b85c7921cf333074c2d079a7e7599831610485d9a3e6979e6762b4bc983baff43c1313c47f44e0e61f7f1fc8217747d8732eed28be746bb5f8cb82d25e98752aefc58d01c7f9f781d6f24b5aea1a273bff40b0eb14503fcdb6a4f3c7be658473cd39e0e69fa72e5d937784bdf4d8cb9088b453fdd2b7f048d3e72cff9c752b97767d4efddb42233efe0bfd6b508650d239972194e63274a95d6e97bc53fda08f1ca190c8ca3f0e5977a47a966b76e45e7369430b052a74cea1883c746e27ee8e50a0381f7228d1390fefa839d1e57685ceed34744729f9a17377e476692eb22c78a5a8341b5afe959592ff7d1e5a7ef0fb3c34e2faefb68c78deb977a79f7651ef3c69e4083d75af4c3b75579e49c280a83906308001513e93cdf9a96f494944269cf38ff34fcf494a224aa7dc959b1d41fc29f1b59b468bbf60ede6cc1331c85e54d40f9c16e2bca68400167bf5f01282bcb20479b1915eb9b4d3fcd34ef2cb3cff38017dcf79ea4d87c7f4c3a3e7b4063c4689e6a94b35b7e55c89a635b84e3d890718519279fe917beab49d5a9aa7d1e22febdcd2ae07a2f57ef9d4b935b04e5dda235981f46a93f887f41a420dfd741a7a70ddfa0c3d70eb1d76c0e38ab349ba0c3bb8979b4dd239ecc05e9e4dd23d1a5bea00089267daa9f379798411e599a7ce9cf4cee5ed5c5ace934f73f27b9f043d5bc169579e6c079d4322de4d23b6a639c7b9e7711d1e71bd27ddb3a06b76d334f76cbd9ae71fe85ce89e4fcb39683f7f9adce7b463ff2c7f589d7d654739d5dfd53ffe189436f4ceb68c4cef7c761ab09ba4ce77acfeb9bc69449fb6fac7217847d8839e68b5f84b746e0dc40ba3623937069ec3b831982e1e71fd537b965ddacf41db2e5a7eb12c1bd03f69c33bd2970e5aceb3352ca2b9f4693dff2ce74fd3e39cfad3ecf8db4ef5cbafde2191ea9a1da7bafa53571e604479e6f9e599671e541d035b33a18699ab9d3210858d6cb2d85bb3f6a2e559b63dcfbafc79e619dde3491b10fb79d6e5ceb38b5f6fde76a49bd5e2af0ddcb60bdb9caa023c7164af6de397e234e0fa4f82f2cc38d53f8df8f8e969387feab61c12a9332deffa097bea6d39abc55f1cc869f197e6da1da906dc85714eb53937064d093df5afc1b6ec9ce5178747e6b7d32b35abaaaaaa7eb3dc188c3c8b81cc4ff5f79976e279a4e9e79567fa4a6d541dabad95f1717fdcdfc7606c26f1c74a449e7109e2ebf3ec843ccf43df74ee31b29d6fffa695d13bc69efab4a39c763a88488076625792726648443c6aa731489076ea6f27400b71994c267bb53fb5107fb52ba09d18c043e6b394c437df5ed44ef25bacc598e4392cc27b9efd9b206d43c18aa6825a4884cc066a19b4107e9dc04593b572f358b1b378085f6620d3fbd276f10ae218e4a90900e8db8304faf60bda49cacfe0d94eed7347d2cb5dee3141f039406c17eb931410395c40ec29bd522640089e084032e530b737c8de210362cf84af14d5b38fed922fb78ba51126dc799e99e0869aa0e527fd64c880d873bb46fab1d7ee374322b541adbaa51cc8d7b8766a1591afb976f9a5572b9f7bd0cb446c349f039848cb030529b9c8c714009ffec7ea3b9d56ad7d7aab48fbf4a9b9acce646aceb553bf06fe533f754c4a39e7630a881fcb843e94013179b97651a7feb1182045f594e5d3cb818f7bce39bd9dd239e98cfa38d07edc630cf2d3bf3b722fa574e9ec5bf81011fb47a59f5bec28f568a7f1c78f76a23edddb290c7f74fd14c2dd4429e5da89493bd72ee9d2b985d06e9ace4eefc83dcf216e17fb489fdb89675bd43c3b65e75a08bfd839ec22edd4e9f4204d84963725002ac18fa4f2c922a411a29422ca1644295910a53f35fff8a40ae2ea7956029d97ceab354f5d13c27264b217bbec3f67ff58b49d3467b7f2ec1ff390957f5f0cf495650602def193eae7e0bb63ffe7d2413b523d287f3546a1facfa97bce3ca4f3150359ddf1f3e9a1779619487847d027bfb4525b555555a1a70eda3156443ef5a7fe2cbf6799d02b45bee650fd9acfd008f5be63ecdbf93f97768645345ff9675b502f430e40670622fd693e3568a564d573beb2ad9083cdbb3bcaefdcb3a37ccf3fcd8ef2350f9d8647a883fed41f6740e459096f9ebae61f7f0d72c841e8df1de97fb3a570bff2d59521147dcdbf8fc3d51d63bf72d04ae11ef4cf8ef23f671e02de11f426439e19c8e79f3fcdcf4eff24f8d9e91caeaed47ccd89681eda5133425d9323abf29fe7ec32e440563d7899818cdf959255ff79750e15c0ff5de61f9d4fcff27756ba8c8154dfecd8defed4b14e6a553e9f42b0b0dc9d37c762e49a0369c782e42b0fc0742c5ba41f7905ce530816a40b23f299e45876f8e7ecdc14822508161d8ee4ec47530816a30b337216cb91869c65ddc861461736d4c3911c66e4a0b31ccbbc308e73f1c244dfa6c3e68571778b7418e74c3ee4a1b38b530816efc23ceff60fe9c2ae6f3cdc87f7e6480e6b47bab05a5dbc30cf458721f9e758a8275d585191135dd8f4eec23ab79fc3ac7f1736a7c33e6f390e5174f0c26a75efc2e6852db9e7e274d161a08b17567138ac7a934be030d125b8b0a222cf7161397cdb9ce9c28a983cc796c32570d8e6125c185337991cd6f5b85b5c382e0c87e7c8e12d1c39725ce7e179ceb4e4799fd7d91c48464353dcbaf38c26f7e5a82c5bc1e6908658cdd94d9ca2b7e5f82a688464c459d650f5ba6e7ee2966308148d3a1069686bae3d96ad3966cd8134391f13885fb3ece7140c49e0f9f08103e99b5d5393c3da9b9a3a23a3eb2e91731738c1040ef37c8209ecb6b1fc7a13e8795375b91c66dde5c3c5b172887e7d02a4219fc02970989153d0d4e4b0cf9b2468720a1cd6551f3e3eebd75d3587bbda870f1f13386cf3092ecc878fa1e9144820c192c3405feafc7a13932ff130a2c09b1c86e44d2e17005c820b73390f09bcc9619ef37098787b380e1c8de4d77d2c2d390f26266ff9120f5f72d8902f71eec37f388ce53f641025a7c0612ca740f6701e14f80f8719390f8771dee45252baaed4e44a0eb3ae241df6b9924bd06a390fa60b5bbab025e7e12d266f390cf49674587509dce530d15d12003e1cb6b98f0b03800fbf17060067627297c3a65f8775fee3c22698c07b5c58ebc25a8e03872b5d585292b72e4cc971e0f096c37278ebc2925a9ee430f03e7193f41e4e010f90c8972e2ce9c2927cc941d0afc33cbf1746c4c3afc3be2b02374927720a1ce65d12b8493a051736c1dd229b3e97e0c23ccf8b2eacc83f09fc7358772bf05d98f7b9d285790e760e3accde0eb849ba92c3725c05709374d785f9c8e100b8b07b61d725b0dee3c278b8df0b6331ae0ca253f5421a62b4bc6c14258c81a20d335ac012c50b8bf527a4cb7193747b617edde8323749df717936b1332d21b9d285b58e3ce9c26244f430869d3c35dc5087881752cc852a568489a367501e185e480e1bba47dc241de9c28e2ecfa60aeee87a7618eb8adc245dc7e56613bb91c3e60d819ba41b5d588ebb45beb00c79d185b11cc7dd12e485653ad1850dad9c7561311ad2bc9186064181c838e335f90a403dcc10c605417106bdb04c67394cbc04e026e9ac0b5b5d9e4d01b823019e1db6dd20dc243dbc47b3891dd637093749072fecbb5b5c2f2c9a7b179601106fcad021d01480707875778bbfb0ec80b3860f475891a58d315e58da378771d7c54dd2b70bd32ecf2620770cf2ecb07a9d9ba4d32bce2676f6d8a46a6a20559fbce18bda258fda2571f82229fa4a0c445e6e97b492037e2959f5ec1c860ca42dc840daa73df323fd66e1a9449e65993d7b7d9e6519f323c843a6b787337c9e6569c3657cd429ab91f345ede24bdbd5cea194acfa6a3906d21efbe96c47f9ecb28ac8331919fa1c0fa9dedef110fef66a791b02dbc5ed1a8f7e4643145fd42ee9d4ca674ba59c65b9f2a7bb7bbe99d3e7f439e774da6366000b991fb9fef93cc3227b6fa776da63fce18de40a98e799953e3fb27e3a05cf332b41fcc7e21eb49d623fb61b61226fcb087de9f4a5932093c964df943a875023094f9d5e2926d2f9c7eda58b57248b6bdb3ea70c1f6bfa9c73ce39794e8d634b25f20c073e5f9d6a9ae540dbbc6960b1582b0f1df4cf592c168bb5e7fb3ecf3be77cf3effbbe4f8a8f99999925f7063290cda5a51235af23f7dbe6200f69df3ce421fc9bb7edb1f1e4f6209f94fa524e5f4a94d23f8ad27130d2575dbb23c8ed511519b9b7f57311bcffae136fa47aea3db637916b7cbd4ebc767a47cf39ef3d1cec7c7dcf3f0ab6f6dee5768df4b53a436f825eadb765055a77deb665059a7f536addfeb5119e7ddff109e46da83acf9e6738807986f37d69bb34ade3b69fbed9b109f8b55622b493f5cb07b539a5d46ed4b7ce3bef9088c64991bf51bbf9d7ed0c8499348073cdbb4b394aed485d76fe71524aea9c94523a47db3929a573dd35d75cbb6ccd52966dd1b62dead42ae06973f93528694bc92a2853e04b6df05204a824cf71ec9b1d39ffa8cfee4291624032d94f113de7734e81cf1d11c1b350a436f86620d4a7b4f73a0bc5f329cd0892ef7c87d4062f1908a5dd65fe413d2c525dbbd4729c9560bb84422fc7c92dd0acfe4dff6458ad94f3faa67f5fec3939b673d3cede7cf69582b14fcb3f2d959a727329a5cd3fae5d9c735864a3eddab6cbede2eeb4e37429e237a1322a3f722eb511a252f552b88e09f5f6cfb7cb5970e4b8bbf9c8b91477a50a95872265fb28b1dffc696e5673cef2b31d35ef4a49424fa7faa9b7a0e48c48bb66e5e69ab795d29cf757e7a4c62937eb1bbbb44ce4ddec6cee8ed2d937879a3f46897d117e7a99cccb84bdd9a5a7f1152989ede43f9f9d9dda15e48d6f8ad8e10d7ede817cd2b9c7284e11572c1ec2e7a580ab0e8f50990c4a94bd5ce3634171ce3977ecdc3977ee39b3f5acd87152e4739cbcfe495073d093ff791ee43b9792f3cf0335cd08e7df65752e43898238fd76f7e3ecc879e7de1d63ef49effc69f6f7791dc7bdf4ce6e1aff68af947f7411fab2b3b3f947fbb880d8112ff947fb0262473cf38ff6cee3ce4a31e28412dbf26f16c86b56a95dccd9b1baf4cdb6e49592af5d253932d953f0da11604e109954f7f163e5e78fe22150827c1af6187fe1d299af76af6401f2d25c0b8e1797762a7aea4dbe7a901f8b7e642f1ec0af2b9a4b2de228b978f1d461ece26c52a30c103000d1868f4cf6d25c7e9a8ce2e065862a3214f1ba9205c84bba161c2ff62b59fab5b9160d5ed235ab4583178c8d07d2611dcc26ead20e8c8d079b6b17f6349ba86f17c6c603cde585f96ca2aedd203c9b6633e923dbe1354a60220d1956dcb085143c5210f9154b814e1166ccc0c9c3431a2f7eb18f413c7099ec25b9b4938fa760ba690c9f34419c4d46df9011caa34e29d54f975d3c1d35eadb75a2dd51f3267307405fafe6e3bc9a4f5be7cb6bd547aa1fa5cfea4d62657e73c275c07cf55104af6dd709f7f9aa3939c095d9d76b478d1115e0897347126ec873c39b4f0363a76255555595797569644b5d681873068a04677498239b1281fb7c1a590578e2c8a41ce0ca8c0419d701f3621f45f0b50af7797557c67d5eec23eceb1da54fae60e4999a403f253f8dcc288b1dac842193bdf8c2d8a99c9889410f154232d98bbbb22b2375398ac04eedf40e2750011e38551318da228b1a0a59a9aa7a153d1b29633b1d78508176da78cf53ff640fd78f204fddb5d9d1bdc766997a056405d43d6817f50e3a98429ced20613bfe813834329fa73efacf9eab31c66d22481282082448594de3ab556c27ced99d876c50d4ab7fd57ed539e4a03af52a53d0fc93cd1f053924c275486c97f4ceb53bc6be16d96a4769a5c81fa5c8a7d4bf66c94d57d563227dfafca69e7e9a6d41719fffbed6c721d4e6e7bfcbb282b1bf6a9c6665f35cb1aca0faa4b609f8d49f3a0551fa51bbd88bdac59a6b9789e6d3f9f9c5760af2ec9d0df2ee1569ee71cea114f74a0c446c17fb669d81f0e54be91d419116faaa738f910394451cb9d9ac9d36a7cec9716e4e3b714e7de4e83cf56ff6123ccfd0b0f0df4453abf58048a773cec999b58bfac831a03a77b9393200dc6c0ae1c0741375cacd400e88d5b91907a65dd4a3c47a5b502d93fd742a99ec99dc31c74ba176c018e1378ef87a9b546f2980bf725e7feacb4803f0532e2432bdff9b600a14dcecc88179ca819106e8a7ce8d11f3d43932ed349ffa2767cbb96adb6a4fa3658357e7f2ab95bfd9567bab3acfb8cc69d51b017e75ce3334619e6768c03cd4fceaf3eba512838754a7ced999423ea7cee59942e48b3ac7670a593975ce8f3400e7d43fcd5bd54140e741e0c4af6cabba7cf5ebb3ad7a1fc07916f9fadce5abda0e40e7ec0882275e73fadf6cc993aec6d8b73af0bcb539fdf9ad0784deda6e07e1b5c255823aa7df2fffa9e783d68a7c7db7a55d2956d5a7d172c1ab732bac42af2cf2d5f9154e269379d7ca565555d5cfa112e9b2b34548e7003df3a0d262b5372d3ee99f8c4989c1c72eab4c4a6d7529b75a359fbed55a3fcd2ac91d68cf509d129192554f5dbb4a945af9b47b8a4f3ac743e44583e78bda359de321d3b98dfc18485f6e1737a5dc61b27f75cae993f3a9f9d47c3a01386dfad47ccee955a95d5ae740abe53aa4b9d4bc455d7e7f8bb2d1bc6e57a95ddaa51c0361f9d4b6145f3be521cd924e7988bc52b2aa2b03e1584b69e5e3ea948768ce5e7988bca05d55cd079923380504955a88e7d533e021ce4038affea39dc476719d7713e73d5a08d74ddcd8025b485137715e676aaefc78c1576ff110f9d53babd42ece270d4fed9c4f07f49cb74b9721e7adadb56dce3335679e676a66f8a27671ae59f9dd556a17b7d9ca40d839a40c84e5b38cd59e6c3ef9df274322de6643affe7db648ec47d0bdcd797376d08e9b4f35659e3290b0886d0fede69d95dfce711e4aee8e1c67fb73f94dee9b20671bbc9f7f13640b3a871c78a07b1f0539dbce21075f08762e432912ae54a1227ba911046ebc51f551d88e9a31263c7b94d87777043f7024e1bf06847724e13f07f9825ec322debbe74f938980978957c473be52b01fe77bff5d269cb78f1ce79d3fcda78e7d9222f1f194483d8ad83f06f99a26d08f475f09d04ed52f6827a6af197c75d16badce3327df2832e3f8b816e100e81bce154aedb8023af03bbfb957dfb8eabf691e459c3f12e0b734657ee43cbf1d3db5d3c82960f3cd3368272639bf39b7d38e1f990eb7abfa532b7d6db73e928bdffa8fda896735f069c97325b6d3f4cd8bda89fab639d84eed9b738fed3261405d887935a3edeae00a96295960b10306cb1259f479f16cc2f251f080021d3f83d880f3e2d9d4ce3d04b68b5e974b3a4f21dc4da3f8decf331a043d0547b13a6d0f22effc047f74652064be46f0a5e5781bd22ed8ae7ac1e7190d7f9edea276499e3df38855d9823e56a2221629f110f9ed200d84befd0807191a426344daaea128a29c3339a69f6ee4936ec4d6e179f666876f189e67438879d7f34c883850535600fd187ba3fd384218259e9d25dd8833cef3ec07d94b39cf33376ffec7f3ac873e32e4c07b82cf4b2579760e3c40665e8a6af5e31417591cc1f0e3941a183e2e7e9c3a818bfa63143d3e5030849d1fa30461e7d939992c84a232d973d5b3cbff58fedc2990f98ae7a57f2c29f9d43f6a2bbda394a191e97dc738749e16a12ebf5adb3252f13cf58ae7c728b1a75e5d8aabaaaaec18fbae748ed0f2f6ed573cdf76c7cb9003ff766aa5e49077aa8df8b7cfafa564559db705257d3a07d2e79dfa1ece9c9feaaf776c97227f7aeced4f6bbfa7be678f55d96c7c43a4ec3d1e32c47b766603b0ac803a8b87f01b423429b5a723ee3010ea217d36c0d311527005fcf48e7d47aa97d2ef0128f2a577459ef88120cf8e50f352ac97c269d200fc73ec1f351144e99f0c9f882db94ecb912111292a93311f1a44dda3f5616900e967cfb3b7f4a401a8ecd9bf0d9c6111deb3711cc769cd7153721c575d2be9da9d1510dff38c86355fa4f4f11452002d3f64b15268893704bd40b89284151bca9cf1060e2f76da2e49fb08f5a7d6eee8af39c77588b6eb8e53f3a5775ed44edff66d9e77c70d6ca7cda78bede4f9f46fb3f23f1972b0f4b45d9d6f53f33dff64b39c2bc9ff597e573bfd18955efa74a5769277d4bcfaf46f4aa959fece721b4cd59745df24d8917be6b80ed1b047bba66feeedda6e3bb5a37c29c9aed9a92943227ceb15dbd56091bf523bf94fffc143e6cf1eefc93a03b390397952672b853e3bb550e2b3cfc9ce781a0329abe34b44e9231d45b19da301cdb783454b9e7af6938fdba9baa5effaea3ddefc7d9ecdd0c20c33d041239b20b5a3e6ed346cc0f4be745e26a253325f9982d43269a75ec306f47cb16854fa7a994c6f1f7d769d61851f95befa573ffa3650da7e0ea93f354f1fc5af5e1d9406e0af3eaf940668280a65c13303913e73f82675bef3dd003932f4f9f6e93cc4f3ce69c880ead46978a47d3ab541de9bee496f7ae0f47c820e4ef73c9f9f95ee8dd3a56be00c8df49dc2b9a665912fcea764912f4df3299a6f5e01cea77015e07c732ae70a9fcc7b557e3e3f5d7a9fc334cfb2399b30063bac0e88d53dd79c3acb875cde21d7ac15ce35af96ca7b55671eb2b976a9bc97e62cee404be7b55af9ea2c1ba90d7e8c7d0c33ebc4fbcf410be5fdb7f21916914e04fa689934f91cf4d01bb44e3e0ffd6912d931f643d2592c172de81c32405ed61d41fc91ca64d257fed41f4b8631007afb3c3bc3860c68bec7f34c06990c6e5aab30dc420efc6ceb5bd9d617d6300c8d841ec398d742235e07dab5c25d58ece5dd2c9bcb574da36503efe74f5f2f4cabbe75daa5aad70a4b731815e7dad5e22fcdb5f8abbb54dcd5e2af7ab368d9e08525f6aa5e7dd3fabb4c2410abdefa2895c8c14412ea6d7d5eab4b795b5fbdb1333fab73d841bd3c9b382aadb92c3e2641e419973fdfb31aec3c3f071aa09dba9d7ab29caa022f7102a153151d857e7484e4a116fa516841ff1aa4b273f68f5690bf0e2b009bf26a79d02ff10253921cf429a227b90c3d4872f0c2562e56fb7d32bcc0ca7338cb4e5939cb872c6ce5432e5ad8ca45e7f002381cc99f3a8785b17c878316b67230f69f7bfe3558ad7cd10e79e83016d285891eeeb05360b0d045bfde2f223b050603f9c5b230983b930fd929d6a7b84f617218d5142527f21c0e3b729891c38a5cbcb095072b1f720e2b203a8e0b8bbd58fed44916265fac5bed0556d587ee14d187cce479a4e7991940ff714864f36a9d785f7db350ded7323f5dc2c0650339bc00920f3968435fd92948bef22dbc008ea10b5b790e671e720118e83b1cb67222e7d0031c1e5e1892832bcb2f223b05741cbec34ec1e1489ec34e81818ee49b1d635fc30a808ee34e091d87d7d003245ff99185858ee3524dd1e13b3c74cd5e00c957770ae82cff38ac0078ade070d05997ca7b0d7968a9bc97c83ca4de31c8a7d1b272f052792fd0db872ccb451bca57871c48e79c8613102f0cf4f06659391bed3269527d73cd879c79c877c720bfb97747e9edd39fda49754d5ac1e14317265fad3be55e5892c3867c87779673d05ac1e13b5c87851db90edf03c39affa4d6e5cc731d305a9733af797dfa66e63c47f11204713ca25dca702104c31f18089de172a6cc993567de8060b52dee1ae95e73f9de6f7e9efb6c7e5ef3f9fd1c42719f035c99512ed8c85ef3edb5ff5660b5adea9c6dd50bf59a77cf3d875015e08923fb10ea005766afd501b3f21d17265f307b77880ef31d4ce2a552f2d0972e95129bcd45cf21e6a50f592dfe1af296d5e22fd059968ae5393ce952819e63e852b19ce5a1e3b0b0d80be966595d36521b3c9391650523cfc68079e9d5f9e5ebc86af1178c835961c1b4f88b0af4d071b80e0b33ba5420e8391c4645e439ae167fadbce86af1178e4b4574b5f80bbc5986ae950d5e430e7a78adb0469e8dd1f2f24ed197de8547388a97f703629d1f6b9a36df84edbcc7ce3c0782be72ea3c8538f52d9cc0ca592e4e215658beba5a862e1bcd632feadaad97c97625107b89fd5a39a512399894c94412782693dd56f59567f1d7ca351f4578edb6eacaa58f497e0a61dd29a1834e9d930690d7bf70023baa5eabd0419fa107a0af2e6ce5e02a04a974c4b8168108329819c3842ae07421c60d951fb87c79230c0f40482b720b156f8a40830e95417d2a10431270cc98714315963870005520ab6cdbb65519360fc91a4d8881c2123ac80825608c4127544d9127061c3849854b632b80a85119fa42f685962fc050e65384c16cc38eb84513b5282420ca9c9214ada623aab5d65aeb9f2142493bcc9913ac2146174db030a88f0968b8f002202f60c820c5981f66de0f4df0903220c8d037b21c1abcc943a78d78a441c147cd8a8d1a26e668454a45474a79ce281562c2e056b1c28a4345d037e34c59121f1513363b55dc5a9bbda1c56b5da8915f14b5d6ca67d6f19923825cadb55e50b94160187dad72e1cc0a27d45a3570ba65d6b1e2311b5f5ce9e3851b6bc4b14301212f8840a186237ec0a28d405c1b84b84262301846a43106a02d6ed294800136a890c327100e6d5e78230623adc32301793c041184a02100cd188298010b511ff00621d0bcc1c68e952d53dce04612566608038a2fb2bc34991d42f4db9ee8c8ba4ed3ac0071641122b16d05b84869f85ca1a38550a13545f00953488f1755c0a0a2882c67b8b16ddb36069dfa34c69d5adb60c16b63062604b54107edf9d84c267604c00e1534a81933c31837384025893588a8e104356e88b001501b6a7094213341d334ed7546d02b069918470632bc3486363c03586ac18626a800a443156a4630051870c208ca82e58e3848d3344dd3b42ece0e150d3f19705f9b06b939b3a981a05a8b94a8689aa6694f4c9ce93a1b5c8013080926b0e081028aa127f810bd71e60b387f76d003e80941fc2710d20d7994f0b30a033c40d1d1126d5adceed809c103507186761ac4d1f204b7f14329771acc59ef747738273c67de0a30475c0b52101157ce9420c4164b98a1031635a871050a2a73d830c34bd4d003183e90c1041366f01473f4f031c3882cd658b3c65421cf347a02872c4354f1859d2fa838c28d2d69d238a3439d1c8480e28f1a52fbb36ddb06839f5ae1a881059c7166a8321b0d9920408d070dd145106fc478018839d786312c2401c6202ca6786db48a4ed2073ac3e8b702bca050810c1762ac810344ac8d9d1dae18438e102ca45045e6ab9ac14b638c9a678b37b5562e438d2e74a8c2091d702822e6260a4074c80082428925aae650387cf2ec40c36917ae9231b10307665046d334edb500c3d12774d2d07002186a445147db82cc6b70b67861c7d5b2440a512c01e88b225eda195f0ccb1068c4f8a2860c1accc022873e6b9ab8c1063332146af31a2022357ee61531b6d0628715d68c49d3a4d01f1fb43061cb0f6cbce143e1bce9634611732aa7cd992f459e5aeb50a069ce54bcbce654a3d33c3c177c96900328f351400e1870b4e0018d365654608597146af892c60d74926833411969dc0377bafca1820b3536a8d183196bc2cc79a3ce0a5b5c71c99042b8577d5a6bad54bed1344dd3a8bc795191c3c4187d03193d5f9dd65a955439a30d152baa9440c102266c81850b6d00e1468638367cd19dd9fe34897fe664e1a64a17308a5042d01073ea2021e78f115d8c6103fd6aadf575822090d3a0d65a8b28971cb123eab811268929bed0e10c1d4084e1849f22d2d8e20d98d73431d46c6484f0d369f04380919c531582362c60b0cc34423ed8f13e0540311eb880b1218729d89411080c198e822e7240238941587e60e115061c9a8406dbb6714e2f585ec30a2ed47ca1d2660714b6e0d0470d2f39f830c6a0384abce1f2630318368841818525cae8e132f6b040430c5ce8a9ea0386e6bda6699ac6c66c3631a769db05b5e2f85a6baddba3c0c39e144e708387405ec31183de0001c68b365eb5d6fa05172b640146193e787993420c8c183764e860b185154fccdcb8423d2ff4dc24298029b44707316a30c38c34c450a14687362b1c81c49c1e7dc22040ee5b0187af0e56ae562d0cf00043276031c6cf0d65acc04187291c54e032c60a17dc5cd105ed4d84e3f48ff862ce7462952e2e44f145081d8cd0d478638d2f5ee052a606335e9a1c2e2ae0428da669daeb86391c05330419366ec28479a3063855d2c4c1e189d7b43b7ab630e30da13676c0e2a56d01c60b4b10e0ac58cad020ce952d58662b1f8ea40e7e280a43ac51841c1caa00638631f42041a60438568e38638538dc0a4df0f901cc242288ea4387c41d244424e81c75d9f2db061e40883644b28889220fa03b29d470866c4e0967bcb146883c70bce0d069f14db439e2defcd0860e5e100263f683130170024d0a5d7cf963e64a1631fcd03826626bb0a091a5882d60c05042cc8b9c36b4c8c172a70b3f58744f4da88162862f427ce181cd173775500061f87a5cc16282171b4ca062ce6bcf1368ac3498312202a900a6109e2cb24843042904a52964258c405e5e9bf64417a42bbe961510a883861279aa6ce922852a33ecec61c28b37e49041e9f469595145c7a6dba2cd38555f661ca76168df2ce6c5ce9b366bde08030b1582e811620d0f3cf409c38c0f308ca1674d7f5138f963e7043745e83043a0980a5ba00024061880d270237bd3e551a3a591270d3e3485d9d442246afd669585382dbc2904270d12258c50820b60bc40424c0e3b1432630e82020fddb66ddb36a7626835c8342d83d945ec4a18347252f0410713a87871a5321364a071451268c460039a571552b870c4173e6ae6546186083d9829a387074072a0a0c3074e1f40455438f59294c4571c5f6badb5d6ea2087029f0a421f41627620230e126d30c539638623ac28a4431271e428f1da9d1b8ebed65a6b551c6d00b56a51e0d9b66d7bc9ced4cac70d3f69b451850c83ca788d475f850667457bb8220b26e6f8c122cf6b9be28a4c088e89b903f7003a5ae0d9c30215616811a392674b991dd44093850736cc746ca479a597a2e3c8d474e276c75f7bcd8f5a08bf1c20288a2d81d00c61859748a3cc11596e30230930be287060fd187c34cd3b8017940c199841adb5562c41cc26e6c8981a2881620c3664b8fc10268824b09421238d3067da80f1c212080e9636be563bb5d65aaba0394f82ec884ff4b03d318447a7ea6b0d0740460041dcf95347901856e284897591610b4262d058a18437af384bbcb104c566e7cd6b4eb503783185cc1946d8e0460d3b81667990c0010d3851e85153c7cca76901784dd3348da3da006aa89ad16fdbb66d6a64737274fc88a2065a75b1daa3eaa35854efd1137bba89ff893bddc4af798744345144a2cf501e9139cac99923c54e03f1482c3a6242c64756b85ad8a10637e6ccca0033480a324ee8410525ca18e2892760d0344dd30eb06ddbb67551339b98f2540c27b4b122862f57c8bcc6a3bf627b4287df1cec81501b3f5061236788422f3af322e1050d629a208307880ab6a4e9326850153f84e27429e2eba2399102196540a182134ee4a91a64061979da48e20f175a1da226bca82ac3843a6eb4f0058f911ee27ce105193f645ce062859e11b2c34c68426cfddbb66d1b196766136fdbb6b9693083403f6c9b5717c2088a83450cbac467f59c708295302ea029424cd705a132eacc310207165e6f58788d8c394c839a0cea7c91a7900c5d6419a3021f17866235a8a1858e1a3c55d630f3d296e82f402d205757d8f3b55607ab09b5d65a6bfd3182408e4f1a31c2f0f2a707165450a3aad006d73191c5202a296cd1d3e65595a82a38f1b5fbca39d11334307cba89fd742f3080c4a341af890982f5da05d3ca572beb6badb5825c2d84c6d75a6badb32a32bed65a679e1d67a05088893f847a00420c32b81884860c6988f1461354b0784d4bc206d1653259151ac6986ee230ca7062109e9cea049b3074aa7421e38b27723013260e1561f05c31e80670d00f2d874b63bb20876fdbc2dfb66ddb8ac41d5c30a1ca1e32aaf6bcb082c20831f6cc7153e78527e47c8c44085ec8c9a2879097236662147a5c9861073b56c42974c56fde6f338efdb367853335a0918510e7c1328511720871d1439e274a2874e637f13738221d4342c9c2e029f4c3173eb0211a31068f0f5eba28414850a1efb559ec0516c434e1830d368439a39503196e4811041676bc6ca0e306990f6a3615c2000f10459e158ca05d7ce834c8c3c76955e725083152809aa669da0bcd1c8ee278934317333b5aaef88953c312afd5916970c50a50c0f9e20413785e1a88dd87abe0d75a6b15c3cf6ce2efd80d37eccc408511794a08e3351efd0a526870bcd832823275c4dc50e7cb175cbc0e000b23093e570451e80c1890d02893268c13cc00a3861fc84c385cd28019501372701339148221891466f8238602f4f4d0039a1ab40c32224e107a5e5bc3006abcd65a6bad7582afb5d60a72edaa150e95335f6b3800909b428a34374d8c516626830a385429644b747133831630f4bc2a1c990d5febd7425e7cf5be0ef95a6b11f5a2229f552049e0469e3e5c644185062acca8c2068d2bf6e020e7cfac509e9f0548f3718f51d434cde9e69ae645ada4699aa6719ba54b574c0185126d30f1a5cf6b3c7a2d0a17a2f0e208d9a01ed8bc34678e00af695abd2015fb05aee620a8bb42691431fb63849e2a5a08d2069735eec8b800142609d92a092f4542389103c524e6486e0a296233d8104241d01a65e40122043db8a003a0384aa061039c26f8847054b8c339fde6ae1f2d4494c964545e454a454757a95df49d00339b98fb2225d9c71788474fdf9f6e7794bfdd9163ce3bdf5cd4aa6f7ed44282c864322bafcd9d87703d7e73de2cb795206ebe5d2e5037f11a8438214f6c5ce9a67af44fddd9a27651e7ec2a8832849821ce0e7c78788d47dfc60d436d1091839df8a3830a2dc4f122839b1706e2d1287e11cfea3c85c4ccfc51e28d2d5fb86841e1c79e16c498c1a18b306810340697c67601a739a5aef953f314226a77e4846ce0868c126474f8d24516aff1e83717a710961e2a82acd8f1b24513af6dd096df7e9b09cae2c3dfdcdb6900bfb96b0aa1afcd83dcb109015ebb62bba86f5844165b08f7a2ce3da826eb1073e4cc713367a4cf736cd09e6773668013049b59a067ff9e677064e89e677058a0cc73f2e439adc8aa171b9ed3320391ddfee3db8fd8fe68a710d87b7c3be7f9fee671d4af2029f49c734e6e4a2b6522cfd4b829e38b666270379a6f89f8cd4999af52bbda09386324121288bddaa74cc7326f091bbcdafb52b5f44f0e809d576c01a53e7e94de639058e5a89ebb70b69c574bed087bea75ee00e8c55d19d701437dec7efa78e7f0023e5e4e2144881716754a6d4b73bea2857b715ab8d7e66c472a0f5af6e2bcb35908f0da5a50f2ccd7abdd0e36e7f7407c719a76a5585f6f1ace19cf07f931f6d39fe6739be5d934725fbbc1083143ad16faa23ead07e28b4e6f41793faf14ebd3d06e09830b7336a0cc0bb34a56604648994ff6f38e52c678e40b9f2c41642ca26c97e449017b5b29f94aed920e9331d91bc8ff9aa790cd4751db2ecfa6e93c9be8e69a4f6f8e48eb029d6bee01e71be7f57ad0b976616caa77d767d384e281e6dc8589b3693a7508f0eb6836556d7a2f7e6d3e8a3ff9a5597e513bbade7e90d953864f3e1d9b783f9d7a3ffb37ef48bdde349ad39003fe345afcc566fa0c8d744fefd8c1cfd97dcbbf636c94c0330fe121fc3dbbc750f0494591df5d26d23bef41ce8f0d453290ea53dc4b7115e89ee75f953d6a5ebdb3ec1f67803a78e7c1afab60f774d0656804f4ce3f0aca9083cdbfce824e43239c4b979719881cfb76fed9b13b29dc4bcd42b267dfec3825639a6c313e5622d23374beee70c77bb8928470ed9f1fab94526a92a5e62c7d4a7b96dfa39d2a14f629cd08926fd7da59f665fe21ef382593e992d2331c588124b2cfd71eb8bce6d3837ce5395f79c8f36390afae0e2ad04ee3110398ea8fbce7abbb2695e10262474c0ea64be92191e9df085e73d89429541c5557a47d7277c77626dc1da7b38f9aa6dd29dfceefedd43d5d6ad788f4f6ea4a62d16c072eafd9fa623bb1e6f58d42859ec32afec1ae5959f51ccaf807fb536bb665cf21545379e93d01717e3e9687ce5e74d44e9ff770b593e6b1f76ce89c8dfdf77d9e4f076d8bf3cec33f4fbdf38f3340a50e22cfdad079cdbf366f9e7ae81f076a96faf7c5a466c7ead3bbced64f82f5f3073fd6e74c5a4636afbe6dabcd08b76dabede3fceb3ce7efbc5b84f3ce3b26d5bb0b3ad7819da78547a87b9749f5917a94d86b5ec323d43bd0996847a86f77d41cbc9df3d7819a65d9d959982d90af2b2ccfc26c81e6f2f53441eb5d29d87416cbf2cbb3fc634c6a1ae92e93d029111e63c4d0c7cf678746a87faedd31f4efb63edf3cbcadef729e6fdc6684dbb8ee8e9a7ffe31f1fcbba3fc5173b0cd9ea7fed911f456e7dcea6e91ea9f7f17fcbcf3ef3203b952b2aa73ffeee839683f7f4d3e279f5e3066f0ecec1c95675f052100958c790d6ef9b89df8e360b6902b9e5f6133fdeb2ccfbabf0627d859e6133280864726bffaabdc3f1710fbf2dc91200cc8014fcff90c8d34eb37ff645d8d54605a014fcf79871c3879292a28f077fcd6e10262303c572476e6a592c8d56aa43af31af38f9173b980d8119a4bdf38d0e3ee28f9f575a067f9d5597e7508d5ae5d6fa4fa1ccabce62d5aef7947eee7e47669779ce111eaf3994caffcdb1de1e8a78e5ebbcc402613e9d2a96d191943f0edadb526cbe10a1b376bf8d421763946644b3f045752889e999999999999190ac7adc6c7d36606a26daeb17b3c64bbdce6d2b72bdd7b599da7107eb5b776c47b76efc8773d06d2db66a5ecdb99817453f97a451f62c3f9e41851faf7b1ec41a4229797ce3d3e6aef57f9c90e19007a5be9a065d21cb44b971fcb1b449ead29f31ee779ef41ffbe09ca9003ce3b67f2b9e7792be4d0dbf6871b489981b0bc7adb95b3ecd83e8a45da5745da457f9aa26d19695f79fbeada9611efdbbdef9bc440666fde5308bfa6b765f96a0b8f780f7a120f995ec3232d06321dbc4952f61c7220656986fca9c52964e84ed61db9d79c49bbe7633b33207684e73df547db3b846af798ac18c874160399b2a70c643a11a98cca87dd175e963303e94296af3a3bceff7cf5f994f6abd04259b1407f6a16e8ab10f4ce8ef2bf1fdfeddcf3b6fccc7568bb62bbb47bbfde225ff5e6c227c7acc1f263c4fa3c5b2363062241f79c93e59595ef48c2735b2993f74b188621e89f87611886ce3dc2bef27ddff77ddff739f7f8dee8baaee37cf3aeebbaceb947b7c6b66ddbb66d9b19b6c3b6f2db396420956b5775599dad9489f46bf5908710691ee2e7eb780891c9432ef83804e2b6799c68a8c4c955ea23999a4461ce213443244d0248331640303020140b87f33c55551d14800d88b24c52469306434196a3208661108661106300008000030c408a398ad600bee2f76699a64b19d322b38210575da53fca8b3c2813dde7acf76dfde7aae1f7121ce521c267e40b41afb14085cafb883c1ed6c12b4b548da32e8c240da96019d65c9d48d5aa918fd6511f009f9abd60afeb281acd6a04eb060d05c6745c8ad05830a7fc9128e3ed767d234b9f82039979f2456ca52161dda359a1405dda54468088db03627a34e1dc34bb24cbeb080970a024480559eba0d37aa540bf56bb256adb2c11e843c66792a45a1e6a9a81bef8572b60f7f8c33094ac7600a49dd691abc63e97165d9395c763b24689d6c39eb4de312814aecc8828f6a043a24a22ad6c2512dd8813b75dc86309b5f60d4d0c760b8ce6ca787b5c04902682460d372022a8de6b0b496e0e4e1493d93f5d100207deec71405783a531d1cd12fb14ac2debf994129472d08623d77a7b5eeaf663ed1499ef39a825ea15505e105d193abeeac9ef1c94b5df6cd18d5f5acf501a454d927ec2afbf9f1afa99daa14f0348c6591c18477ff08db5cdcc8f294954e59646e2a67e81b47fb57228b967ba7a94f6e4f713a8f45e596ddc7c097b9f758bc5353e18ae164a1e98fc2fc926c6b954d4d04ba2a9831c778ccaf42cf02f6bc241e285cd2661a5504ae08cfabfc6fb21a1653814bb202f5b0b7dc5753f6aa8901b3e96d2848720f124489d31ba2043d6b465fc1f08f25300b1a7ef70b8e7149ec601d55b0736c6982e380bfae8e65811bc3f5069ec21c580a47b338106c6a0cb2debc54713411780a152e40648591ae07a5805ba7a0b3e4907ef53cdc4d0db75f532868e2652499b9c986a035edcd47df57ca7fa915dfc24ea1f70c37764b7c7c4d26b0f558bbb61ee23a6470403094762127a16aef287d8d64007cc9d8f51e1ba42dc5624c5c6b0618899071ff8c613cf662b0eece892ad25a8fe9209d6e2d36f44a936533b6fe990e57a20a8a83be5d7d5949d10d2c01a0997e0a6c65daf58fd6ca537d2366d5365993f079fbd0f74d48f454f80dc4cddaea1e6bb9b02c9e2c4835e05e427566f8324daa64bb74cdb6725eef9ea1a3c92e7ed69e169a5d85d8f2c9e7fe690ccef2fc69bbb9849972928fc2625074c8427fca35a69682683102c45e071cab34010592f57df6d93628b53e057022b5be00581c349b337162adad44293a4e4c8718ca5e3aa71aa58d1ece634b29a25aa1122c7eda2e366d02dee72513ceef691cf8310f0290da9b68fcb4bc29319040274936b8d41eee1333e81126ab6408b324905329358757aaf31c781d4e16c8aa5496aa35478ca637ec060f8e5c25951f36bf91d5f361bb545dfc60ec026e22c0e45f0453f391dece9f56fae7b75147c38a402e0bfb00492cbd3ad69f82500fd786c738b9538c4c46b0d68f92c32f1e136974f91c73c9f52684396bc8804b36921b0c6a89145465837114bc22fee81cbdfe26f436b8512191726e4a777b3cd2460508c89639f3da8619a37893d582802b10ff1261b038d28cc3ab5c20aa6139b12af4b8f11ad89e216b9077b135d7dc2f7a6185e348ef6f7fd35de87ea479e9570c6536bba2f40c12c3bafa8a13e62831d7c2d0fb87dadbd9e9e697005a2fa37eef941210666b84e716705909683cf36e5c36b28e0d1eae4fa1e495c776f148ef8b8f834d960765db875e99d4774472345d79fd8b47a0d3f121952053d330fc45c381dad3a477bdbd4f542a9935be16d5604dc7d5180a45cc927fb87cdae173f732955a941503a1171c46c7ce4fa2dcb5a5fc0c3a0597c4ed358f6c486261acbbdd1fb123cced1e52e091b647145a00cbe06d6553c1a1a577cd113f7fd6abcca1c5df3aaaea1503c359b41331791a544088da44b15dfe1266decb5a10f7d443d8aefb062f22ced6d6ffba648da4c8bbe4e03c2ec14ca8bb4402e175054baa4c33ab3caa858b21e2c9ca01c8ee178c57dc115b187dea51ec3b1c148d06d943e5c9e61dba7d8d48bc4b6ebf4857fdc2500d85fae1e9dfa30faecce1c94de9734daa8809897776e9fbafc97f456807a126b47e2831461146637af48bd0c72c7fee7bb723ab3da2bdaf9bb245d73df38cb47aae7c2c8bb8ad1ce446c88b225838a4c5cb1814b4b9c413fe1a28c88fa11991d269b03a053325ec80e81e4a53fa4a9176f34190d2815496dbddea1554ffaaf8104c34c539a26bc12ab916ebada60a80f195c773ad7da44bc761a6fc932a14f519abc4c58cbbd61c54840d3cdef2462605f201be62cb71c6dbe8a64d10cd52aba9b3c094907be049f6f8f03ee9e257122907446f88525cdb2f27fec49d20eabc65b9c6e45e00ea4094f6dc48682f7d5fc0f6b46e8b3d800048de06ad591ff2883f1fe0781b1d0e5840b4481fe8dd54ec2fba27f7445db8574515ef608bea917a28b80523f58006e284b4a08faf57d0d28e929e523329ac855f8c89ad16775d533d491b1615fe4c38f432a2a9fbdcf4f885d8e12ffe9babef7bd41ac2ddc39c4f9cc2d3216578448a053ee2d3821584d57493582d1402a416479c29218cd2ff83e6ee3e04709f159bce648f59ca289f544dda84c1785583e8b52ad432a72d26a20650f664691b35f1bae07dee977a11ead47fef231db23bf8e5ac6da5f9a080f716d700c42d74c2c400fddb5d69e967dc7dee7ff783468f4cbfe75edcd32534aa7908fc53d685109559b58c4545946f55b215e3e5af1a3c8686c4233f0dc9e36f44a11b0258cb4a78cae49b40247ab1fc5ac2353097cc172d95696d91063cbfa05820d1d204d69d121d2d493534c7a12e8f0ca9ea6c4cac9ab1d1ec5b198802782025af531c8b735ff4c99a08fb8ac32fa39894c0c8b0f2f69622d65035e455419d7c1b7ea341c0c6e0ce13bbb7e9d21448b70f912da59de315fb1c12c131a3a2ef48ed674dc912a41bdf784b9252b401068c52c1a71f127851aee30ee8bfa8546f4853435f9432338f54fc730b279baac6e6a40620fe8337736dee647572dc4ef6678ae5f0fe47754595a0f17d17299e64a7d1e6ab0080c8e43c654146384540ae32660cb5ab39c48459f78c73e6d3864d270f847d1eff131c37f3e250a263800980272738d5bbaf431077dd8791089da66ae01790282422d191c56bf554cef4db44080cb8b2fe2e124c04afb276182317dda7304ee68f50d0d8a8230b05c2b95415d10e17379783311226e7dc0b92e4043648801a831e0ce09c49a46f3ab5db1e124e62d8671eaa8cda8dd90e90bba601d40322b990e94ec00d580b428ffa2fb71ec966da900ce8fcc926ff9919df9d9d2e621de79c3e37b3e67f0b4f8d1becf7fc3010ae35dc3748e5c78e8f4a3df1dcd4f45c57ccab6c01219a222c4a37db55b9931836e526356e63344f54c2932c643183af5957337ad2e157fc40ba1af65cb6f201e803a5f89a0088380105f9312f4498fc14e7a5b877a2e20828bd41903c8981f4f079c418def5d4fc420d1ba42e3244f034133115f75887cb81d096a32a0e526e20f83ed89569bc3350abbb2a012a8520b10636b808685a9c3d494b5b0e3632f9649a410c3a911f2781399851c8141dac076be682b46ee92e2ca6a09c15d015e3591dcdaebda9b644bc0d071fdd52649b9a10ea4c4df90bea630d1ea01a18ee8aba364be3c3a18da65216be8bf9e0ed20b74b116a09e3296a2be45e7db80d0088fd285fa102bc63abb67b6d2f3dc93e8bff90ae9bbc8d72af66e694b2d70640c1cf9949d0371aec79d0947635cd2a30194f13dbcb8115abf86ccd15ff08ec5735f43ae104be5506907563ad0b4d7f8112e97e83311ec0b9a9b6b5bf83e5620b316e2c29b3535010fdc9a084adc5bebc0c26e7de0e968961e28d1334a420cd91194a634f4b96d4c34f880ed3c034b322601b01c4f9e636234ffebac605ce29ecb39957ac1020bbe9fe52164e2b899d3035a99f6ff0ec110c20c895af1c3623b27e2a56f111e849ee5630b8961f65fc8ef6b9d8119dad18bb81ba5a5a035c744337dbadbe026b33a3221d81e920d52c5143919afb628905aee74f88e08e813f8f9e4addc35fa8cbf95534c2492f0ac0837021ba5142a9b5ad9f026a9c4e4544deaf54f714d0851ca6c298ce4fe83e8896326f55a579392a6702e94746490b8bf78016620404881695fb4a1316622bc60fb93d222696082109249892d390e101a7a2d1b30306d3d0ca881683f66708300145e16516835051df0a158fd9f294ac68f0b14965b2e4b6f53a90c0272016b04bb4e23cf8717d890245f74395ad32fc77df68e819dc2448d2424e54fd018edfcca993ad5e40c8791119e1fa131bae76b7bd5b8935b052edd79559c137360597c64e567671e5d130906f907a320cceaba24150f8e2d8f82cae0a0e59d8a61acec5e57975cc51c1e1a49c3fd0605c1c1aaa39b93f90d00b88af18057341a99cce3f5e541332dc8d2a6a3df844362fcfcb5c55617b82c47c21dee8e9e2271456bb3a92e74c851e22515cd794ef94670d78bc7d11e93fa9c2bd0793b27ea5eb7a1885ae5a8165320cf51e407a7516cecff4d3f301f47fa7b2f8f16e0ca6c56ea50a099c96dc3f97506c412a6b7ebbe1adcfb3d4dc1aa449bbb4372ca8de78546430e8a01f67595d13e05683363eed1b0ada7b1726721bdc0bf458da4e3492267dab5925ba944b62ee2c3acaf52844610e42379a9534a91c88b887b56bb8c21f95edf7f322cdd69c423b137790774c1a87cc47b1d0ad5ce1592ba2eeffa9eb7cc45f3ce3cc0c8ea94043420fa13ee4cc3af43d2930292d834e9f33489bc3b7904fecc53240dfe972aecc82ab67a364784e4036e7d960b7d92fe0c11349fc40e0f176de24ab5bdf7e144fa91c25e03df1b90cc2bd51a6ccb06e81816978f091470a64415e7c90ed6c9111d8648d9224f14e648449385c87e19e7f81175e51d18fd7322141494612cd6c9ec81e644936ce322a760a8057a3d40a6af352e222f5c08597942831bf7a57c35cf30d351eab36a4d501a98f28238b836d83828a8a664a6d5b86b7177bc219f8c27d27b94a007a6c1b0abba7e324931d2e39c835a52a08b5fdc7f0bd53039c871fcf93bd43bfea355e1075b703467a2231a761165b1484cee7800f45a21e4c76d27333b843c9cb30aa1fcf88f4306c485f08e0e5c0463ba670304a3f19d23a567aa4d9d79e4740dcfbad534f09906cf9a2c311f2f241d60e25658d68b97e6ab3bef6e7ab1ee89ddd9275c3e6c64d61fc2561169bb3f2a3feafcbad2badf447aa66bf217195a2440e3ba785974cf8d62f867b4a0cd37d5d3d7036c5402e254148055923ddc4097dcbb242be20faa8c25cb5fb455000f5193944b56245392b27ffcbfb1202ac0c01a3381b36197fb0c0cce95ff46d3d9a9461a4ec37581828d536c6892e550f5a829311ce7e647080f056d9bc96b94664d3b1f0b98b4d8b91a9d69f056f7c4f9cca7e23fe22ce6c3ab76310483c3960788f3494192f9a7e41d81a057799d5d6850024708632200a015d08e72162020765c884df8162a186d9f06af888516f77a53d6208726481ae2a5456be99cb2076b779955bf91d5b8873f2488fc863bf61784aabe459625f10441b152ab4d492e415200064b0554f702702d9170314da43b78f84aa0509253765b1849ef8fb8638e66f65cb1745c3e07089e3c1f601d0687e926934ce361fb3db4f08e89244726486b2396f5f9d907d61326c5963730c3ce4566423eded4bc90a51dbd2d28f5040abc6129f3fcb829e5ca8cfd11f3dd486bca856016d40c12bae982f9d2f39c91a107bac0af11449a52b01646833dbaa418cd6a8f9ff2adb6c6eedeb81c8bfbf4a7c127c1d4436f42d09c0096eb12ba72d580cb3ba7f1c428c9cc38289cc92b2e47a96d9ff76aca9a8e8a0f4cfc80d7206982be25686709a04957cc4684da552d285a28535b730ea7dfe1118caa35eb7dce13e26a462e3ac883c200f8a9259c7ab048225b263060a752e0b3958e5994decae3eb9c3c0cefb44f0f314017d4657a4d3b1c1f004ffc23cb41a8a3c730f4419bd934893575db1c17480bd57cad772a904c8df24d972c9c8d1f42fe2a5cfbb2c913c4ff73a22f6fa59353aa4cc563766abbef2db05e38f7657eb08dfa2510514cb79a0b127ab144f4d14be855867b05241a308c1d8d3d4919366ef5f425e70701d61b201d5d38ea671a5249f554e395edde984d3c962c76aa64471c3d2763b702ed22ebc1c426847b23725cac77b5f182e6f947911da6b3384cf1ba67b5c67df396a4d157e5d2b5ed13de319d428c7e462bd38a9c9eba441372da695985362ea7ade74d4c5ab87a91fb54177b6e76e0b612ba7f8b646165cd667a2880f62dd68e6d3e3c0a3710bec093c3b9bb027c590220db8da828a9a71a20389b72b46c930b2b7c81d979281ae6d33898d0b6c4aff3a321ce1587c791875c5d24290b22b2cfe5c80c9eb0676384807992aa3beeeadf6ae678a1eb9adebd3e0cb8d4ce2c1d4e6b3532da28c2ed88268516ad1176229afed97d07ab105f92b1fc938d9e948434415c2714d3a207b2ddadfb18df196367d9244582982ad78dc81ab1d5c1925ee42433601298d8349b5a134325f2837023cfa83d9caa884307bcbe9c71a2ca3197b1e426cfa58f6410cd4b43736ee434ffd5a6aa759dd1825bcf589c927769d55a4a6b7a21a04d24d806877ba4d67dc9714ca5049e9b5e5c898cfa8ad268afdaf3d02ee4c3c79d0fd85ad644f9b089197eb23ee609a8d321f7832fd72a7f2708f8cf48e242f929b56957550fd842427ffc3bf47a62f759290e900fdf69a27dc8e8ffb51970070425b06c1313a42f145a970a388af824f3b88b72382cd6325331ba2cb5393b9454f032a2b311770595a803df17c95f9bfd0281863b12297c3bc92bcf703e803e3d2c166c7647b322c1752b94170d5ec8f04ecb88561ea0bb1cdd952045cefc84ad045e7790aba712d265bff2aa22b3f46826dd203c4304f4b12b5034b49933c421b1e36412f6fcf062e1e794e322da9a5429a7f84f33b8703a516ee9ff23581d574124701ad5131510fffd70c532644a8d0844c519b9d5ddd4bebecccc027794a1880447b3a95b5e363db95c697961737b29b368a5cc9c52c563a5b8fbbd229bb860518879a8e5e467629961b191f899580c4576a92489bb7952d37b49fe4e3e487f4030881d509b781aa26f26e16a58a15ce85915ff5bd4dda5497a6312809774aa058bcab8b891b52f22e21d56e3618c3009e102a6a392c6a00fb224a3ec9866de38299c4ecc80b527a65c38c748be16486362ed1c1007ea69803d257f4f729c70f6c4a4b995de2a73cc5c460971905ddd29404af1ef388cd8b74338a9a646ac9a15cfa1078208765f7ebcae4c3abfa4774c0230e1c77d336cb79bcb2d809aa1e386291de2512d13071bcd14bac51346471dcfc6e5f81bb45fa3513987ca7820248101bd841e5e3a028165524d01b7d3f144996e2049a9322d30c4421305a21a54e35b86637eba3a6eb40a4b46d2c999e3db098a44b2c049b156b24f9a2b0ab3c6a517ded7b28ec7d43831220c6dbd49458d04d28c8f1e741cfa92263c51ad8138e957a39ac2c56ad18132ac19864b3e4cea1abab89a8321bb25ed48318a1b2d5a4a7c0b862e1bd469b9bd34c6a7157959c7eb540812e3e13a8c2fbdc8c77bdb4d2b02accd4576f94d2dbca8f45945a4390234a37b285d2a38b19e9acf98684d802be70c5df006191da1561bb29bfd8dd734a76b22662d927554c2f549a7183550004d961c22e9f58ff8848cd631292378e514f21a4ac0b701bd803ea3e03f4b745d06ba319dd0affc531a235f3b547ebb608d27e1136370abb16ce9407bd69562ebbbc417b260ebb50ed1c4ef11130053dea3ff02f2930f55e4161ef39b57420a10185cddf3e104a7e724889c466337451ce44c9e374ae99e9994331de9676750ed96f5405800e03ce072fd428771e313a4ec3af41a0eb844c55188495ccffa56144a690c9d85ef922aab3e90022c5d62043dd071b5407d0abb797fdb9999e16ea6fa05a9be09ab2270e751753add2c293deac3acbe7867c9198b87b383fd9d04b7a2577a81c5f97419fd3095c32f67fa035445e7b292c3a22ee8f4c11233490bc9efa0d020c84a4943adb9cf1cb199e7858be847c6cbf1443c8d09ad35b546d284d5414996bda43d2204799abb13ff5694cb29a3ac266eabf72824b5e4939d23e40d8f35e7069e3d14b3a010c4070f42e17f21f706c5ff38dc464abca7ad6e839eb618d0b94299301c4876c6480ce2a7e4e03d0439568f44b824b67037b871d605e785a62bfd236238d65af7f04638c0c1e96b3c63a9a9df102ea4c60251688c01ed5340ea2064a0694b69e5d80fb87834c50bcdda1b007d0d169c663e25e3f339ec24cd699eb23a73b6bafd37b5d70a389bdda4249fc6a084721835f0603664c5b77929fa64d4edfc14e387c616214e3ec66ec65c244696cc5b73130b9e92c88d788cbd6a7d15b97c134c347b0ba8e8ada945cc381831d904070e78d40c912e542cc3a5c282c4474ea4bde74d891a2077353eadf9fdf8d07223547eb6988f57a07b552adac1cbb019cd6119b3fe330891cc788902413c29fa43e46c2dccd3e1500abf78de70098d3fb459658b1bb23177a1816e71c39ffa1740c7f10806d72276fe15ebe3f659b36d23e27c9f1158327cc0afb478c2f6d0e523efe5fdc85337bbe1ef1b783448f75f26077636a794cbaac188d4219330b7c2ed4b30f0f74b382f19d19455cfc1a71c8e1aca696aa1a2ee2622b118d6f38c01f9b2102c8a6d9bb31fb79869805961c59f168b7053b926408655dda8da6e5439390943baedbc946a2fe8fa1378128abd0e8755138391fb233e8c4e974fd63dfaf390db4872fa6e2e64a2a14226c460cf1057b1cd4eaa1a7372ef32effd00e82889ba416ad7c1798db4ea4b0ee3ad5bf215725eabfb6253303492ed856b97926ac477c9f4898646b400fc40d583a4441aa7e538d0cfffb4d1e6e17ec2558abefc325fb8e1b10b668720f870c8840622251269118d34a97dda05ad091b3724b931db937124ca86114300a60a3e61b418432fb83848cfd6f3db05ab1e0946d87ad983775c57781c4650dfb4fcc1314d70c51e8ac5a019b49395e76e7327bbf0f009070286caf50701eda260b6ae58f9042db67055734abb2b650c3e11fbc60a8859a1618b941cb7c5cbd65cae260275b92b0073a0cc086e2e21697711bd6b96966fdbb05b257a8435e158e2722cb844a715fb91b7fb9f3d423f6d55805749570a3aaa26b6472094420e01be32dc5032665c12d071a0217f10d7c503853cfc172e6d264e58bb49646e731ec21edafd54a712ba1298cc1160c4a0e69c0e60e9d714fa5cef55f80b01625cafa610b0fa650aef170349edf5da572a00f6fc8a49f76226759be69d7fee683b34896d6fba75f096d6b773ffa55ca8184aa1cc31940e588aaa3ea45df8dcadbdfbf18ed5dc1df37d96be5d6db7d749400e94c6eb4111ef8a561f0cb65527393b29c41bcaa0b9cbc00ee717b3d81a41f317839014d5299a983fcb2af6b0ea63cbba3f50f42aab02aa6e3a986705d37d94119cc68a0bf8bb6a29d1123f307845b87de87cb794133bf0021191270d672410cec79f4358241489ae1a02e27d99cd6ae67d6d9aa90027691ddb2291ca77e4cd91a20512604ec24e231c10bc418c76b6ab6bb7068c37d6863b0ed8367bfbc104d5b48de13cf13cf0688ece56be67ee0aa15fefb8caa336e830a9c6ea143dda1701636739909b8464faa1314ff7e736a023207c934e8c45bde6980ca3ff640257ee7cd9c591269e080feb073276782e42a1a72a5b6ee5da08e1e7bef8b625696e9e0c691496760b9a8a6829fd6ce8aeaf227ab18ce788b247803553a6b1c9811c04aab25e6176d4ae81f12d6320e64bdf9add83e5210cc463a26ef6d5147a957be2a581398e431af785b28a2a794e83f55d664bee30e4d2a15f01423f07a0ee683256d78f56788b63184504eede90b621f1e9dab5a8b76c5599c0ee32ac6c05c85887f78aca408d213843e18eb1f6b359212cacd4530a6f9a7dc563db6dc810c176e1fdcac4bd2fea5c6f616852994244c77645782518a0b920bb965146e039debd0e60a12345f976aeb5b57cb243d5b111350ac2f864980bca867042d121da5239bd2753f76c7ba2bba72d85df577e223bd475487ba74bfe717208d02c490001a07e0b2063c7d42e1aa4fb757b8de817f481eec2bd154fac931103a1a3942c8bef6495ca4c4aa40abad4bfe59b1aa244e8c4512879d40d4afa789aff7012e1f75b462a1ad9aafb4d992e12ea2e43e2ac4162f39a184097a982cc508d1a8b3b37e23c49836c4488176d59b03c4746013b27918736d791aa60d79059002102bd2b8f44c7252177e7c5521f9eb279c200685a5a9b6ed1c3b044bbc3e813ca9d8c0aeaa1b0eca408d02cc04f40e1aa28e1ea624b3bdcb38a83ec4683c7cc53e3e0712d43c39aaba8510cedcc8263968c732767cd08edbb3352929f7a0955c0c978da535e2bde84e113b0000d01324022010cc1a200047a4220cf4957a0400d3df9b2606006625dd744add20a09dcff0969fc27d9efdfa323d9020da846122bd7d19dc6ddbf43d810b2ed61cbd899462b423041aa9c265903848d289789bf9105ad02a491c080605b9e2f941e66c969b207b5643c876eaf66be38399bdd858362e5e1d5623c3ce0019d94a6ac32fcd16934a22cfbc859c29ec6abc6801ac4cf45a37dde934f267ef39cf662cd3dfa3826dce906a4cf21cb9ce05e98d8ac57cf853ad803a16760cb83a284723ac133a863e2f7502804ab452b3782ce47e0375a0a91fb014d6399a4e6d62a92d6cdc9289760403f1ca766268cbca6c3e10fe7bc7d32c84425e1cfa368afcdd6dd8f0d876f33d449e82fdd5d6ea77dbec52c36e92279382ec75dc06ad03a84fa2341c659d7d3598365d78bdeab1db174d5f0fb67098e383068788bb5312e31c5fe448c9ea264c778875bc6687e756347a71da8f9452ba3918d5acd3dfd59949ea73a2650e70224a15636e00077c6ae07d6aea7b9690c5f1b3f1ada2fd4d3d662d0829a072e28ada14b8e7a26e51ae8d0069ba78b141be52ee24ae2822dd1961a35a47924b12523b2e1e254007f80df4f9e2be837db83025b7936db3c0bec7b05ae0c90680214a27d21295fe88c754a70ecb040cb979f6d632916036e4c61056e85a91096b4bd395fa033e7b8157aa16eb85bce7f8b16878c86775e8c79c98c4d7aece3babf3c37a58718e169531043f4e13fa3335e93455988ec3f83ce2a15f86313cbb8e62a604175a927085d1d43cd4dbe3fbd0f91c824f20bf99ba47540c3b754635914cf51de0668225faeb6fbebc416abd45817cf23926c063bea64f56f1a5959bb43a291abbacc8a6d0266b5712fba7b622004195b4904202e90b5625b243b99ca96ec9044180dbb6f22dc9c5d9f5d2703e89e1babc163f16348201a66593f552f0c0fae12c6f27b28799960bc7889eda95ee09dbd4c0ad0c0d386a5ed92e09d6ca5b5c5d9d647b63430a9abdbb6894b246b4d94d4716fbd24ceffaf6f192a685129e0c475708e9075e97e27969e1a0b5c293c7576650ff44b6ae45ade253b1b442bbd57af7e2d693df40b3f40b777cda0ef964c52210de683309b62721bf355f5d49bcc5e9e2a8e6f442eb3a2e48b8c2a7058db42b52ceb9a3251a385c7f4d5b114a908823e79917ae66ce888ea311f111f1e03790965d90adb0c56e06c4c5237efe8a8386ad682184718e1e37c80d5e4fb7599646bceeb85e0b110253c3836e76cf503e5a9c6e4a3576d6e9356be02057bb93d65d0545d5e431f0870fa82136f62e08c725df1fb4d38a05e9161aacfac56a06a219e80ac06427de279102bf7916a3dc202ffd678ab6192b939e23c8db9e156768468d59e77d3a2b808b38223bba04753ce2eef48512611e91bd7bbd99c336bdb4bd16fa9f2aaec1a39487a07ec3b127e07d483b6c2a5a08f82b90ed2a8a926d22356b03f398a32a21c7da74a9856c1561491b2b7db21f6ae1d8d7595a10270bcf8247c61ec3393a77c077bd30cec739cfacb9169cda94853a69d71592a5c25504f81c25679d387c1001c2f29403a8dfe2f66a1a7ba0126a58cb595e1b7dcdb6124841594ef4490defc76406424ff79dc56a5e697daf4fbb511e8297878ae2beb8d5b2c4884bfde83ffcc98792b4b41ff3c1dc9bbff12cd9cb2a434a87f9667cc60781653f42230f911bc1adeb4c3ddff09c1177819d81fd5e50cd93b3e2864a3e0467aa7c7072236b453a0e712215ce802daff2f06ff795529098518563ccf0d0421d661821fb57cd8e6787b515d70fb349a59a022ca4d032d83d9fe57619a2b00c104997fb3a66a2fb516d811e63aaf69407d7b3a678252d2388e8e19f6c4a2afe2194531c92fa4f73d762303f971d138860ddf1ae2468416bb1f610a28218a029c2728e0f7f45d3a57d668a97828a0353b21090b37079487a969539c7bada90b60714dc5f21c52a45153f3d5f06fa5b67640be6d3e0ac0facdd33e66525a9a4af386259aad17e183435d381ec4b0da597858b17add18c424deea350610f8fd1dab73cc17b2c893e4ce9dcaa9fb34405a5f7f8813ecedc6b61871c1820527d9a0578e257cf47ecc6e47f95e7bc035fd2935d13805ddf389a29d20813090fe11a711d7d6b5783c1416c8ce02187bbf1d5cd697aa1a6de8af62961197589a319dd078a270aff8a0b5f3d5191f730814a62b308dcc69442f98d647dec0b44c23c7c282a9dfcb3b48f397766ab6acd2aabda8e73b78126a6068a0b95adfde8b96377195b2ba05e8bbcabf402068dd97b13a3393b15293de99978734633fdb044f938726d77e8d4c330fe0949d734457e44bfc9420466d85bee1dbf5fab42dc0b73ccabc9f2a09ac00696073a9149efb68a3c619117899792f8c92ef5ce30b1668f15a8ef1b1b83dc4d98bfc185b9e02366c2451e8b8ec9080dde9a9c891920d67fd4c8837c378ccd5fe05a0785599fc910abe3c4039ee2beadf19d6820b7aab85c7f0e1296de72f7612eea50c60f6b8b56c606f1dba9250a92cb2946ef6b02cea95e93a88131bd18195c2c5464932e5cd432aff412851c20a99364cfe88622141f6873d38181183ca906fe34c99a6acf1d6c8bc536a4cf92cb72d27f3860278c3cfb599cf2bcfe38c66ab3418baa66eca34b25700788284f8ebe6b2152fb56d7a0115b8b1c551f480ede5e4177f8c555bf0b1e313874ffc366fe29c5222d06de7c7aaf3a9777f47a3deee12cba84790786d0352fcb161871a7c95f06a162c97163f839a36b18c448f103a14f0dc8ad1ba9fae576a702b8bd171a1d9070f154fbed3cb8a16000b7c442aed3c5b6a607cbd1c6ff7f87d3d5f45b1d1653134d625c2c38457e552f363c5c6459dab3d2cf9b6b389c0ab544321603da4fff74f5f908058412a1c9def28bcbe08a15dbd7c31d2a9272230a1c4416c33ef0b8edbc560967f7c2d94473d5bd1cba2bf64f0b1974c627222ca800b629ac81efc47a4ab6400d97efa7df26d26df3287b8e22ce7531ba1c54c0e00dffe900bac4c2c437cda9e59edf801e08c58411b53077a10ab4493bc430c9592841f2e4984024937e1919d47eca0f05d87cf56b01d93e221bc072077072dfb4f1578e3e8270e59100aaf8b7b35bb12306a1215ecf7ebed2f22a1250270b3febbb4aedd300618d5f8c1a6a170cc560b5309f7ce3386bf00fa497c31e6c8c373371064d2b7721131843a1611db286f0558623740cc3baa29ee926b72b78a6692f91212a778225086c9089983029766777e8877bd2f1b9e7f52886a502eac8d2d4e5e80126cb3cd4c03d6280b4d1934a82929da3cbd5838b22a5ff733a25d9b77f8204ed0b06df3273ff9e4934af9a46b168fb6cd0f0882b3bd6c786d9da41840367f8f42a8f017aff7186e5c33cb7072c4266100a41088afad1149b9c8213442ea2e7233673ef316c673c89ce89887f91f12340b4f44b499c184036547f93da3ab80cea293c63880cc457d027fc72084cc5b1d8f88e4fa69fa1871661b50cf8cedf2915642abcf287a3735e102434279785877c62948b44a06d868b8da209a5c4b63217592398d2b4cccb4868a44a68bb8ec855d969f62674d252fb1213aedb07680fc662a09694120043f05e2662cf3ccb56bd5cdfb8e70924253475322f97f4aa9491376168506deb0978bcbea9752689b84b7bd04dd2fbd98bd2b4f38a97319c90b6380d03ae0481afd8e4c6326c481c3a6e4df10edfe69f16f0bea70ff876d1d488e3e185608a374120bd190aeb1b09ec88ad0a7dd2832eeb6c739a82d6ea8b8781d8900c2264d1ec6e8f7f102e45f5b971b1cf0736e2d1f4ab33863318a270903ce82bf5a65ddb79d61443f2092b6507d9c7cdab268af05ba3f1ea239fbb1827c2d019afed016139291f7c8f256c0ebe746aa2ff2cb8277653f3606262601dd55f1637b6b80fa84753e827b3466646c2ceca36b6203aef61b0acc38c322e3364ba50699b3c11f581fb2154d7c91e9f13465ba151ba7f54007430a18c0df0211d51081fd594916be86d500bb6814fc3828145639ca5dca543c8fb7e6ea6c04e061a1e6bba78f5c55014c65735a1199fd4738b3d18d32250a42d1178c7e2d1129bd8e5cf1ed4f6b4dc77bd710dda96de00aa673a6f5b402041d2d29f2073c2cf862e5bf8d364545c60da67fcf657ae43374aa3fec1630563e61b5af988242a78ac67b52fc708d91ce62a4ceff490e4ca3f21ea3266057a975abc34e2af005a6496ddc253be8c0ce104c53efcd1affd8dd44085747e59a97adbc05820457f2813461ba852f826a32aaa04fdd58b115c50284c144a7ad847406ec2d3fd86fb78f93638db888485731e2427e169f9bbdad22b5e0fc7f3cea746b9ef2c45568485b3b51a3daeab075676f73852e9fd49ef82153e2b6f40744788aea56f38e014af6e6546ca8230382aef4f34c66c180ef0f100836617b9f0a245b848ffa71fafd13206ff77ec7a5c20b2bc9271b84597902701b20d306b1e374cc602a170c2702f1e0fcb6f5ecd0deb9aea06dfcbacc12c17965297270bcc17b847b05f35b85f97a279885f236734328168d19fbfa6da0abb5894de4fed69747d6d84ec1f974e44b8b3ed093181e865a74c9da6088148719716c603c5f264fa880cef7f6cc4cbb685785c19df3b66c492218cf46bb54cfdb3c2364c09f66672d5298fa1814e7475c3a57043efe8f13928a4264d5d7a6ae611554e7c6355dc152b1557c95e5605d7c42d3e7c6acc066612b3f1db919be7af815e5887d9edfc2810ad3ab9d869a9f9dd79cb47dc9f94dac3756f5dc210066e333e6f9200495636ee9858913bfaf2f0c87df507b1d22b981af272a42989ea2a3009dddd2e3cec3dad3ddb1d36b0824940994cbe73cabb9f2862815ffeb9a1899712d5514a3ea969c47948069126c4d0ccfd6c4656c29bd4cd4d7b2cceae717727ecad484568cabee039f132b6a520d4260df48a6ab482c49b72ab1863b5581176309f1252e6046827da2c36cae22aa5a976f1872f3aa9ae0af0666e6501864e504f4ebeaaaf99665e6d756fcf2cece20e69a5b110b4dd41e514ab5f736a7eb3f93d93640fb50055a95ac7705d7ab97c14bf6903db5558c639cdbe1f665ec10c3cdca88f908b481b557b8a751a03f8a61e59404eba4c40e66c56119b45062777958d4c070a37863328669d970944831b6fe5a76fb9f2ec5a8b09502ae4421934570775c97bfcc3bc26b6f4643762705f82b6d45c5cb5be89750ca3c5cf1008c33ecb400db689c25edf891193bac3306d4b532b60bf1231cb366d28c7411c606164bee6558c890546d6cd28804e5e37b057cd6bbb3f7e8812731e04719706d4372b2f69ec355d1cfee324c0a24d5f55a1c0f00f82c781dabcc3c42d6d35a8ebe6e9949552c46efa529a1f3a7e06890c79e0844c9e36a7f4dcf126eb5bdd66255aebc56d446ca3b3fecb060e172c85d8239371655aa754fe30d589103c79a1028f0112cfb2b085e21b24305ee6e9910a60170c78956f29520a896446bd7a4bc0882aa90428dda0454d0a1f33dddfd28a83b3e61e8252b037ab6922fa0b39c85e9e6e588a6359c41c0db4d8b37d44cefb84cf6bc16adf7ffbd9e5d99690780d341296668385b870a0996d16175f57abfcb09e19da06daa1143c5b48e99acc7a10ea1e95e6055ff86f6fbb42f8102f84e4aa062ef2937a376675418ee26b0594597e44eeab53da6edf81235498deb2b326ef30b99c2f3031303054cb92dae795f0381a82d1557e568185a4894df1c6dfe55070d9321676da6278dd8c45792ab26f7b7bb6796cb4b501ee1940d00ea2cc969cd2f055b36ee6bbc11169918d7fcb9f064c752e74b039689ebcade0f410a2e357a88436c2eb7557179dc89cf435864af971ec6fff4350cb5de0028e54eb383b10e3424c8c6d2d5d89aba5e1a550f89ec470bdb23cff8a6d1f52e4ec475a2332e6c244e049d239100df498fa7155e349573b9378b532348cd9a598b75d88d7836e9225babea9116b7de2ee97c4f986af485e76a83edd20591c53a632946b658e6b676e6bb9a0e5b24e10a7f83b1309d69289824d39d7a731be8ab5f9e8b5e06fecb396d4024da3c44605d661a15971b99e804814c38321ddffa34166f4412ff7e1656b9b2655ad0c113cdb144b56c7869932cffcbc9014aab0d8edd7f3a73e65061aefe4624f6eb84b573c73f8f951581f0a709c771d055780b3728c973972d60259dc5ac26e4246c8b0ebdb54bf9d404ca86165a6ce4361a125c53e22c1bfd8283d5fc6af6164115f05313bbc4b49b6e3c7c2e27bb5ca40fe1e079a174d72ce8e194232edd6215f97ece24ce8e75288438d06c01eaf94114aac66edef8bddbbc1abc5f8d3951664da9bf68ddae38e6a7ebfe373404a846970d3e68b0b7966bd18b461d2f4f8a4874378b99949a7a663ae1bbc361f72acb6340a40228a265f4961bf378d5b9d0e5f88e5a59ed06b77f99cdd9ccb2d02ae99da9f11a38e3ccf6a59598bd4ed3d782d859250c3f635085192a57ce9c7559c68a2dee7e3d30a54953a321592a097e76a32490012bf582966ed493f93463e56aefe6ebe1a37799cc943bd71b68fe423d42b618d8ec861789914bf5058c9e32b781d3b48f4f25ada7492de37f2671ae0e5e7019ecce469e703e706de8175efa26f54c1a78333ef333bc1c6a0b30e0d063ceca9fade6fb46ab307f810d9207dabb447f857d6936f7a2085aa6b232fd66f71958d9166528a088ff3a725dffcc10fea55ab8f8e220d6c7988b7300b9dbe96e15f0e77b7ba76c0951340048eb2635cde8641ff41a9277b9ad923b4569e4db408d0769113b6273f5ceabbeeea65fd6a220df2284a5022e2705a7b285ce51828ba832d053b90f42dd582866381c941c1dbc75dde4db359aa9c985e320ddadcf994a1ad3a9e039abd6b00b744884a1fe139172441e26541fdbe213982261055cfb90ba6c4e7144ecff23b3287e9b89f2306b79f91f167f5d893dd4c84756f8d5328e24578784c19239480b320d760ffe84f5d5447f91d8fbfb2290d09bc800bf8d438074333e2ddab0a54c28903c6013c82a423b6b19f45151c765a03c0f529f41b351b2c313579a0ada1cde24700e166ea1a9280e4cf00514c112d0161e16e398a08546c56f18aa08b45e9093f2450619fd982eab6a13099724ec8904612e11820d699ebb4edfb2fc0f47221283d7c8722282822d9a2c61114cdbbc038b6630554b1456116cff6e60b932c19fbc68d7765bae0c11a9df4102a68f093d0b49af05f5335cf41f78efccc70f236e0820a9284ace23aa7c0a6874983b82ae5683cb0f3cc3c436369f98f2fefd630446e5c437f29cefb72bcfd06ec8712bfdbc4db0b2bd2395b5122141e4f648199c5afb4e8580b42bd0faace1d0984eca27c2111c5b62562964000ce950c32d2bbbe616c54c59157f89186590966798b9417353590d5259e18cdca9445866d532358ba402640fce861b5bd9086528d24244c5f7f2e539ce4a63afa5d8a04c70341a04d0a137efb414eb168b1c1a2683481ca754e90fd2a691dce0b16a2a5fb504930da8620dc7d06321550818da2124cab40728aae8fd8f2c122ab6f2ce9c01b6a1fdc1f3bfd5cfca415ac51a2f908745f2528686aa006714c74c32cf15757f68a7c576cd4acd47411089c49784808de2ad7d247d9272ac62258abbef10eb5e39db5c23f128c998001fb39c80f2408a7ad1ea3eeefa74bbc322e78da6c208153420c3210f3c960a31856e46ea26529bb9e15291595b21412c5e803c34e70882cbb41fe0d1f117e3f770eb0ddedc994b240aec0931380fa11d135c807806ac798b1d6db7ed41d11dad31f4bd3afa0e9a756b532e59024474d8e7f478266358995153f5749022095fbb8c9115a03240340d146a95eb521cd498b526faf98142a003f25412281aee7a022e1b4094800e88e7a3d4dc4de812e51a899873c5b82be5095410639455703f6aca54393f9c98b0e8a6eca1ea880109c2972d10036c90a4d005cc39a404267f2a53b4e70e2b25785306d38ea2a1ab17449fb8b61281de37ae4f37e19e68e30007a1fd862ede3a9eb06edeceeeb7c40ed5a627ff0b24e7e11d57fde6f55c015fe08040bc9ff46fe28a957d21b9ecfeaea8999e26e434e5e8e042e517dfd0de0bd8da06d927a6d118f0a6ed4ee63494762285184cd34daeece7e2a0c231bc73f0596a4d0a77181288b86bd5d23e90f9b10feb87b14dc3cde3358d3d9272d169c2baf5c95473e8d18d1670e9d8989582be9f4f185e5163d268011d0e320f7295fee2699301b46c599a33af9ff9486b3aeb3a70eb93fe7ab95fa14bc187293ac53a8959e1d5da273a2cce6ca7b5ad66dba3264426ee94438065be776e5d6d590133cf6b06e52f687ba942170b843bf4cf4d1c9a489907c67093116455e420196a203787383e65d71d97890b8e110f818c0bd10542ae700588a9a6c7629504fd027e3ac06d16944f8d8260b176d3729c484a8e6f30ccfdfc29d22a8971cf8651d79f45f312699ce110ebf0e748a624c76d1ac65dfe14dd9588718786a8d39f45d89234ae7918ebf873745622c73518e24efe146995c4b867c3a8ebcfa275f721ba1c1aa24e3f8b604bd2c8971be68c8d8e89d17375d308b3be208b521d066615acb270aedb634833fc62d2b263978df6920d2be072b66297aad84fbc9129bef5902b96dfa0b66cc247b9283f8c90f525897449158df78e2d1e3b57f0d51a1a139bacb5743b5e408b7559220673ef4a791ba931a19cc6a7f392c945a67b80a7939909532110f860346424c0311dcbcd802d8c1d88d89df7cacafb94fa5390ed2e958ea963b3db66b88154ad7bce0269a314fd966614f560218e3498d3896b909ba9846200c65fecba85606eeb8d23751dda9b9afb5cf7bd2c3ab959150103d3135d20184fdc642beec576b8b2b26b5fc40d5f4e2962cf7a10bae7dd2b8ffbc0ba4ed4eb203da024ef3ae696ddbcfea0fd03e743c45c13be4cdaaf83af3a2992b9d0a60fa4cd6370ab7a4caf000b0bc766b2e2a7e27fc65f1f8aabe7352a8409ad8966995b402b1dfadc9275bd517a0f2921fb56e535630028c91650ac77b4b21d13cf008ae8a504d3631ca0024bff9f879a4059b5179b5c841176546210d2232f58f1c7c81d58cb60bc9f4c70958afaa6515dd03f6a1e7f1282fe2f7f1196f86a4a458885f3fdbc17b474976ba695e430357d9a20e3683ff629e22987f468ebe9c211ec6e4d26b403b26b451d9e2caa21fd2365a362787aaeba2cfbbe9fdccfe02fbea233d261e972f3519c6e8ba606e041b328ffcfcc9fe71d0d1e66760f43ecae5de06fa2f9722c0616d95e90f4c6bd8cd182fd307023c06eb50e62d21c6cb56ffe6431c46a506754f13a50d19a6ada96bcac91dbf496424283db1a841f0590fd5ef27ebc7c7108c0bb1f60abd7c54693d63a95ef7b880270b90c9176762eee812910e3d2f43769e37dd860f9e1d730e0603c25c6fab773c8532b7159a81af966a71110143fb17404c40497c9ffe8eae8a5991bd92427aee06665d4607c2dd1e280c84d3ed8d569b5b8b48fca58d704958e5d578356ab1820499336e212edc956e5d3d1a29f7b910c4694439122161544c1979a8330caba1f2793b3ac606c1f7c441566b32f160a03d124d5001db0d64f02b1a181c1dfca4138abce816f9d6e9c91196794e22850949a736c1dec974c3b095f9ef2383ccee1c4dc25f4063133c551c572ad88a8958e0fd3a12e104664c08d56e46ce0166dc8eae1478189ff085173aa4e4b857fbdce36005bce25a017b3060113058a55376a8893310b43fa93cea793395a10afc03e62665c926144392d3b2c6a4b6b4f1785786ca60f072f062c43452d340b44291274cb8ebd0d1451cfae9cce65b81fd80eaa67cb234cd2e827d0e4733cb5631a5b311c76735f428107687997f089d9d95c2b9f57571d52950845f54dd6f835ce643dc0007da40a877ee0f5ea31f7f0bbe6ab127fc9378afa6cf261d154400b8faf90118cd82f9d02733b8f29183835e48ad9d62fe4a07282a0cc80fe0fddd40447c57310b02e8af60e68d81f366add608a2e0d3eeaf27609c0a20a4908f1ead4b7f8fe7eaec73751e436175363ef2043f0c0aa5a89d5a11c354482fa26b656b0eef21e17f69fc3fea16e760711ca71a8344e48adc669417791877dd69c5540ae4193598b2ac3d5b68d280b13f2afeb414150bc35075656c99aad2051f5104d945921ab5e3da98a52d42520a5328145fff28e8e2496d282e623decd020764c8fbdcaa53c333be13d2e0b831bc112c19cdf219b06d670ed87e0d9f54167dc683b3b7d9e1bc6df223a3d72bd8ba0628a902dfe501cd995796c8be667e68b594eedb2063148c43c50b5b53ae34d3da5b18ff5ecafb17374f271416653bde9baecc1c46c4605caf05f377c20141239238d8a3371b66c141f86202b39972fceee98fc82ab725f99d1267088f23675b537ad2183ed63d8831fe8c8fc27948de812ed9478acb94a301bb4eddefdc3692cbe72c14e4e828a62c62ded7b833b1e8e2a53b438d91c621df75158c41a4038000dda40395d195f12d86a856645cef11992072c6850424bfb92a25ea2ebf14688681abfcaece31f24ca2970477b227b7e098c27b2e8d1a0a44d8b4b0081b23b0db02d42caadc45bcfa16f4c55e2470150192642ab8602027d3a24a787932492f6a66a4ce1d0823c7d0fefa2c352f651cff35e95069228b9a2a1be862da9b0a74f78b2e2877355f64e28d1748179757b1cae6030097fa4e667bd26acc630f0bd39148e3f172289698ef7f8bbe15a51ce7506e86f39164c8097ca7e54ce387ce83f4811281ad8ccb3d45f3cd3871bf1a40c227113cc8fe0b4f05d139b0fb4db9e5b2f94c906b0a96d06c184b14838a0953c22088c841c96685c19e5ba32ecf12c68b7ccd343e4460c2c9b047d9e4c13c1319bafff948128efa51144ca9b63f8267f82fc0e7a5e0a4ae8210ac760c0812c1ab9a85905a1e8858b94d780f690759febd6569e7853871b50190bc712fec0c0b362896ed89e27a89a44358c9c26ea021f389d3a381e0783082810d8297820c120a9251c3de60749ae022d2b410a782d9aa4247d5675e344b7d90e00decf88c7a8ddf429694844168c07c1767e27775c56e3b30185e726aeff1bbe7feb2a9203162aa43f53f09f0ca5b6db7928deba260a8a221526f45e45f4ecbcf0d695a348fda75bd6a8c5f8d821c292904c2c8b1595cf418f581773cf9dfa50c044999a5d5a57660351e2e9e158fe345fa2b41720211e65b7bc4db8c64080956a2b66ecc1088295261d3b287b5576c6102cafc05695d400c4a930efabeec3e4a0391331be6acec2ce40d8c50887980bcee5da1cecd595aefbe418ce67f93724f7e0078c94f13cf4ab979c2c6a3f6efe0d184cc2d1006046047c21c5199b3681a264f845ae907f868932df7de5b4a29b7946907c0075106c605562cd0a06b912671cb86c8d3ace0065144f22b6203440493b5201015add7129c550e5c979b224f3a3c4d23f289547d12a44271418716c02a51ab49820c4703062def9a3ddbe5366bb13e6b2d1ec096bb96969c91ba218c53991eba964982d160b1c08509a2a220bad0a84e5b682ddc258a6896960793725304194ab5911267eb0d224c6c691d3142cc941d376c708243942ba72149984c21b18208a5948e79eac6447563a4baeeda5a6bad4df269cb732c3a5f8ed496407255440920263b6a579e28a1b283940e4dd65a304b148c103103331ce5f0c2919151171a3ba6c5cc6ac4bc909582d316920f128a90e0432a577d9833aab428a54f3860021e656a20e28923570ec871f5248921474bbcd0a0b6060c5c064e8324278a1c99111152c40742bc14b1e388091033496e0cfea47768d55a6b9d4f42782c20a04349d71618aa48b962238a1614aa5031a20a19a9ab1a2130256fca4071281d49b9fa81a307933042703a825842248b129125b62c91e03040f1218a51561524924441a116250623be1021d3248aaefec286446bb2e928f2c229840c2d01918703c60a1917b040f952e5888c0e1f60b000f1a389231c2e10d98a1640022845b82025848b099a42550d85326162480289041ace246f13318cd406384d3b5c1745e33a0ea0d028a5f409bc37544142849618ce68f5a0b163fa08968af5a8b2c31366809022a251026a0425343a0203e15d4f9dee8a12ab6741a0e756b8b31f77b6a09452daecd92e07f40611c65bc09991f50413cb38a1ad071980f4c135a1c2c7254544b5d65a6bc74451dadd89656a314547a4c09bdd17a82f49be507db1fa12e50bd697acba85ab8196e3686e63a66c8d0912a6899a1206394ae8c28547932a39f0405b82755175597d3737705041414b55112360c02104151e5670084325052b4cedd0c3822701a22f23b812c6c8941d42f0454c0a3e0c5135c584a912b0000236dd16f092224b6dad83c5a6189922a4e2a02a521e4e78dbe52e0f5178b0923d5b50157b9800761c4461e29490c1e0063b443189fa920037a82aeac23454a27840793c60d1883111166ba2f4c3335e184a297de1a9eb400f04da72d4a4eaad14062545e9ed38b0d6de184ba2bc194f663274562c30189385e304222a2a6cd92f1011d5b8842863830f34e8ac006b9238b42cfec432539c4691a8209cac142d46658b09233e98ac787c5865c07c0183e4f4e50a0ba521315a3112a65aaf7841916644431269396aac4ad55254a9d9b3ddcbd58ac5c98428acec54919c5871a0b3170c3bbb22410920a53706a594524ab1aec08b55a394163142a5062156d872e4861b2420c1870a53527e20d1a5c30987b5c53a09b6ab1ae6429138a39543cb285664f3c40c0bf8499427a99c402a19865a2df5935ae1010f25352557ac8ca9d168d90175a48992150e4b949286d870d6da2e6728570e91c811474cace065044e709499a24c6e24819ad5ce84292247170d57e15a20e556229c36b158266fceacb5168b102c46b040c5b86d72f0150aa751e832b2b2ced178a188890d5c6af66cf7723aa6c0985b4b5b42ae4829adb5524a610019a3357bb6275d3d01d3162d1c7a48717142a535c4aa88aaaaa9aa170a8aa8c0919848c15a1498e98e5061bebd3a800f2cfc60c3162b4b78d89680e1d2030f513ffc70f4a3d65abb66cf7673984224053f3831658932857405424dd52d4a5c751962c6cc153f7a1d75c9a8b5d6da4544446442adb52e41933ddbd5ad895ab1ae5f820c0f1822d9b351197a86ecaeb5d6523c802d3d1db00ac2c2d313558ab26880072733426c78022a09d50e163e86843e9a6a8d4165789aa2c55fa21ee9872c668e9c99218a07143d4e40a2ea8c8e258890dad299895b93101a4d464419c44c70aa09ca03819e16a9e1b689c35a6ba328b5d65a3b858349d9620426c5851b134a00c207095d4c6004d1036428e284cb902cb423557a7a28316408232f654830618a93187ea052b244133f5a601283f3a8b5d6fa63566b4dbc316de44c0ed122b9ba5ce78428050f2340360b93ecd99ab23c89317bc358184aacb5d6a869f66c4f78d66e931b240c5d253811228814225c141004eb29c81114104e6e782285153b5888d282414c9817cc700089099ca68c08820b8813e8e0c58808a59466a029a5943e4129d647802f493aa6b0ae245144cb095d82a0a149989a901b47c13958a2e952446d88821ae24e4151e1a2f4ab4f00f0812d20475576d09cd8e1024da0b04002a91c3af4507277cc1c4a4b381aa5317d365a8a66cf76bf21be2b7800226d41fa48e283ca8755ec9b25bcd80017a91e8610e234b56501243520479890e025062a222784dcc67973ea6b8e5bbbb5d65a6b0bb5d9b35d20eee9c94a8de7860b56ac3029e291340410381c8182c3102030d4304409135e8423a618a2693e294245c8d15923ea3a3006406202850b1313c4a060010d4098ac90048c951a134710ddb8091c0ea908e00812a509929a951f3aace8a8610cb08060eaa2a40424627c0495b6e8ca81aa6b2604055206c06566a54bd28e286138196cc4e01ce185d91acf506a6955445b440ab8582b96b1378073ea8932e29caa3610f5c0fd5039e84189de8e032757378692aead5ad1f82043694729edb004c0de7469c112a4c7122482a802e6460950cae80003d4921426127eb02458b90e2fe2b5a1cb2f27799270f03890bb2056d19c8167042247b0e870441345ac34312973a447511349703169729383068a4c0537e881763b28339ac434b9a11d37a7c5b9ef2bcbeed7f77f7d3843bef2ceb4f5e905df3e17d6c7d9beef007f87ff6cfafb8a833e371abf029b5f7335fb0ecf80d278cdccb9a5c9e54ca0e7459a12cd1e3af3761db9e91a178883e48783661661e251e7633821f63cefa796f7da52489922cb2c96dbf18abca5b65c5afa7b96bf3dbf5ecaec55f9d3e79c64a6ff085a4e2bebe3f97876c91473cb7fb09d934b7bef79934e3aa9cd32f93e6d7e4b2e9bdf32abde2b8ab1cdb183b1df17e7b778f3923fad7d9977547c7def5d4c1f11583c8aff9cf1c31d1ebdb75a07fe1284dad4f21ff913cb71d37872cdc9a5bdd7c132cbe4ebb8f7224c1f172b7e5fbdf39bf4d9f971abfde72d3e8bbcaf64e1cdafff7ad0c5942cf2965961cecc7b88a2e09674c6b9254711548c15b02306e4efade6796ec9a925a4233fc508be8ff57b9d71d33be37ebdb79a8eccb2e662f6d04791f78de57d73f21671f2167598774c6f17b1d7dbc5f3e8ed8247b4178beeee569c5b5b7269995ff2c19754bfb20cbf7d0f74cff33c30df2b8ab1cd67dbe6161ea2fabe7d17d327e7bcb72b00fcfefc3bd6e2b758c1ef9b7d367be8efafe0de16799b5b2de76df6ecd8dcc21ffe9659da664a35fefad867f8e9cfadb995a5abcf623151e30de73d44656d6e4d2e112a50abcd2d4fe1c509957ebd4d35897a9243bbd0db949328ba49931680dea6aa80686950bf7e724d01f1a409a0b7292b327acaaa4af3e86dca8a494f595de94fbb4cb275692afed6fdf79b06b74cb2b7289a2e40f6b827d15ede2ef3f6107be0e989b110ce7bcfc918eefe32898c21df1fc441ee8d1c0e92799b37bfafcdd3fc8e7d76c4f9bf799ba7f9ef9bd9be9cefcdf7a4bf37df93bd7e043d371473baa3b02e0bff65f396faf53b794b1d6e9944fb9cf9b5dda72cfcd77b546fefe7b8453deb0d1b23687f99a7dc22d073d71f65f347d03eeea9e573b883a9c1ed5acab7524aef9a3930f5760cc2967aa29027f01feb7979cb24bafe90d4fe20f5c02cfb5de33f0763b1a79ef7dbc19bffe0e52fe708a53defe87c7def7ffacc983df4533c86d57cd0c17c7f7ff75ebe8cf21f7f69a5f65d7fcb24da7b9cf185855eef59e68ff3e16bdceefd8ce92382fc7d75ce6f3267e753e47dbfbe37e5949f0263a1f932e9ff7a70fe7b72ba97f7d063e99f226f87fab87046d709c704481efa32c4e9196c19a5e75b2c84f3f6ebe88f62047f8ef57b9c71d3b19c71831a67dcfc49f2d4f7799c6ff2beb06c93b7a86bf28ed164d13d87f745d13dccb2fbde8727f09ff9725f2d3f9d163fc4214ebf3efcaad3e2875803d4af2cf3de3e18feeb3f073fb0da73707ce5ed50f2fd1d7fe0896fb38ff74331ef743f7d44983df463b12deabd496df6f7d50ba0ded7d963730b1fe21ee2c01a35406d1fff76280d7ec542fe329b5f4f3108e1d317c13ef5bc3d70437bff7a30cc7b88d3de539b770d507b8ff376285dbfb669f0e509fc67d3e07338084ca2476f9c7100c943ff8e32c42b793e6db33c81675073cc633f4c325c1ee306cc153744adb5563257b2d6d06aad158bd338428352ba9981834d69f66c94523a0526e543a22591c20e54de1841a42767a05998b8a4de219868a51d073a90e1b820ae6615ad6b254a0437d82e779f4489d602c1625194c6f08fb006d44111e170e51328faf184cad11248a6cc00a2ca095a4874f930e4861d6290785cb3b9424b6d892c60be6c8dd19a53474c1df1107302948e1ea81a5585c59525223d5848228a151719483fbca420490a9594253d1cf15c50a2481045906c0991c00c880b5aba382909e183850d53065756951928199e082201244e3d9a20828731597ac841abe146d4f23a12e5754574811bd0689c940d1e4c8ab5d64a516aad15adb5960598498523f292b0f024a26d44629ac0ed69892d62915a58a54645ab5464ae54a51bc812a43a1a255489e09d2a81e644e96fb789094e81275788c8e1ea4a871c4b62bc9c90c409259adc70860af4a7edea832b320829c282630b880de20a8e0f45b09c40e10ad51134a80928dda9026b9a439a381b040c82684eaba8ceaa763b0e6e8c1c6a2bf080c0e5e94912abab261d25f0e2820e3194c0881d3e70390d4d494a0258d243120c4bb4b62c4962aa49323060045f9458c24896ad291a33745eaa36a8b5d64a290581766c445d4464cce8fa6991f2362c52a2dc408399155400820425943839f13006091cb8dc08910d054a94521a263d4441286d005111304cd4463084991a7280418c94102001d3de50ce23ffb13f517c61ec5dc626929e373634f9f79c9f65f7c3f7df376cd48f6972f8fbbe974a737e55eefc0e2792ae7fadb5167f3b79486a9c65f3c33cb4596b67c6b1f7f99f8e9d794767c64e8a5731f3eec07ffadbff7ecefc67fe37e75e81a4ede78c58e8fb9965f3c30f310856c5d7c070e6d7b7df8a6c2dfef276f07bfabd8a9c227f79277f54e1387512307f6f52477396f312c5883f36bedec70a7e4ececcb28673bb17e5f7f3e8cef97d967d6f311e3fb1f3668cf78633acfde6d1f7619e479e417dfcb2368ffc67d3f8391c84271238e300f3a8a6e3395a64ddb2607ce8755dd7c96af7dbed3a29bd5b2b7deafdf71b7c8cf386a1e97f370f492df30de6fb5bf7e5fc4276eff6d56d2efca77bef37a73d185ddeaeb1079eff0b0b81bebd80216374413e7238a8abdd088a376c54f92ee4267547d9274ad9fd7d17fe53ffcad0dbe63b2966d9fd4ffc2abfab35220cddc9fbdfad5f7e713bafd6fadebd0bfff1ef320cbd6d9efe86a1bd07bfc7fef4756cb2942016aa2fc32080bafe0bffa9d2c341de96f58203a70b5dbfc342e0774f47af8ed45ff84ff8da74f57fe11984ffd930efdca7ef3d386efac590c46305f38b2fbff00ce87bdebff09f4d7bcfe1200f46c7bd10457f21d548202b075abaa969fa1fe83df8af1a8b5dcf4040b0508d6fb2d6075a92317050f57090cbee61e3ebebd8fd37d6bccde87dad5469f6d4af5fadb2fe3745a14b95beac24bf6f7edff7404a1f50d31c65d86ddcfd996c6075cb1bd8cd065ad2f5a594b24a29e57cfc72d6ecddb0d1d577a026bdbb1f9232f923e83aeed9c1d49fac0129d50dc4a477e77d5956a5cdf7dd74a025dd3de7799ee7cd2cab2fb7d4d2de6f3206ccf33ceffd5eb9f978b4d9633ff09c776ebe7b4f6c0a51e87c4e07357f2025ffa9ef750fc90db4a4bdef452c5483ff55e3596bdfeae41d43616dfdaec693dd831f7af61e4bb75ebfa6dba497c19cbc63eef5bb0ff3be16b4c2631dc52ac963ff6614ad248ffd398a34c9635f8658ed6f40403c83ee2b9092aef9efbb51fe8c091b5f6f33e2afa9b1bf6994b6efd1a68f58347becefbb45cfa369fbef58e8ead7dbd1eb128ba68fd8347be8c7bcbc63a2287311cd18dad0020159d2f3bb2f7fbb5f9a0b04c4e2ed7569fa62d3f4a151b3877e2c268a4ddaa34bdadf7e88edc554496f4edb570dba44a3ec530702b2639b46d94da3340502e23f5b1008b4f48955a2955825560101b9a9e9adc50d1c57d1e55322d9ac1c0fb4d666c2e6cd7cfd9438bf670dcd8b3ff31e9a527a089ec5b390ecf785a3ce6fb13b676d862063d4ec1d65e18fa0e7b633a7e3f79ddb027f7843ec59da63138773fa9c73ce39a7cd32fce14fb7376cc82abd4b36395cbbae65718bdf9e75bf5a9bb767e96a2dce565a6b2dc538576bad9d43f36ab0f3dba6f85db58adf74058b979b06fff37dd360fc1cfacb3c47cf3b157c7d8be20120df6bf77ad6f52c6d43770b8047310360a77d704e1b00004824cff2158c15e091e73d8bd7f40c5b8ce0e7b1e6c791e67f149fc588f32bc6d7ab186f3ec508fb9dd1e667387eaf03ea84208a39ee39e776ef397eb3ac7b99e359e4ddb2f4fdfedea9c12c936fff62bf585e6981cc9ec533c879db4ddd7d4edef1bebebf3829955f3db7f021eea1a92fce0dd5feb0aafd6dc66dc3a066a419c5f135721b06150bd9975d6cffa987796f589ec57f2cce9e2504cfe259727cc943df1b2bb8d4b35830bac8323603a5277123eee57db556faa34cd60faba5df26f790a4f2cbdb8d34e53e7ff9df87ff39f87d720cf3e6befadf577fbb1197f3f617f6c00bb190f8b66ebec38d648cfafe1807791dc5dfc21b36ece645fed695c251066e34d686ef45fe233ff459b534608deff01ffb95c64187bdd7800f33d235ef6bc307430966df11d6bc53f3d347b4792ca57cfffa5e54dd88fe7623fdbd38622c048a0f6210c6ed362e6d3e2c245f6633f81e0601d4f29f936e833b1cf4791271ac192b1879240ff732447f893bf8b4742fd2f22f1612bf3e1dfd69c6efe5e8bd386efae3406abf2ffbd7ffbe0f9b9e1f0ef2aed206fe87e7f4bcf085ffc3f25ee177c57b8537375f4d7b3f7fbbe7a1bd61c3abdec7a577fd51263dcfc3f21fefcbbae23fd3fb6ababecdd66699d7fcf6a23abd1b7a5edeb1f1fec3f2e6dc5f4ddb0767087e68692613cc25ce0df6f27650e24c264fbabdc930a60f075970e6a354b219e512d377e5c3d212fcf91aedcbb17e351704b72b86f7fdbbe2f3b71781e14b8c410c628cbf2bb7c867a0549a3ef7bb82fff5db8bb405bfe2f0e97646ef1adb19ed15e9faf7bbf25db160dedc770507d9af2695e49254924adf95f954e33855523029a5e48c16e25aabac5fadb4e26fcb99e42167dabf2c7b7cb12c924672266392c7ebf173328674592479c8197efda5b1181be1252d836d22c6b2c80849570c3ecc4a1efe83450b03e54cd3e42d6af1ba86810fabd20358cd3b344f1fbfcc33a48ce9f33536b248c6c05f5f1ac9999c69fc2fd80b861fe706cbdf3562b0f7a484e11a292579c8a01981c071860cc9431abdc497e481718e51fc9245d3075f31763f043ffc0d7b10fa833f7d64cc1eee451167c9c37f62312c83935b86e662babee42179c822c943ce6400c9902179780674b3e1921d566764d234fdefabeee1bbdb6b445b595ff532754e9d112b252df4c6d783a3b508d8e4b8c51b36669d4352e66de09c97a96bc24f75821eac7302ddc379f71e276fe9d5dd3dfcb5bae3f7dea9949deca2f4ee9cc3f27ed7d43d55fcd2c97fe6773f3443e271cbce88ee7edb7c40b0f550076c3e1b980dd83480bdcd36537ee76f6d9d9f049d48f6501fad94924cb61efad49da96b9273ee21b93b23dafe6bc442f2256dcd7cc2b15d8e042713f90ed87a64f7246dfe724ef738793e7558afb173923419455e491e2a69dd774dbabec542aff7be1b3d7c70c4364eb431499e0d4c1f290582cd47c2883495e14ba9e933a52493cd6732c11235288aee60e7b4d5f4fc5d63ab7555e22ecbeeae017e8e2f4dbe795f2152fcd7c5d25bd2a4a68f134d269b8f9bb0f5d0ed3550d2a6cf063aa71a5b4dfbbfbefe07febe421ab06180ffbef2766bc2b65d69fcf49d68fa3860a3699c778dada66d4dd3dfc0f4d964e7643fcc9d13ce42f46592319cbeaf33e2d951d264144993b4ce69d26c1c459518cb71625e1c954be97a8369388ee3f2b6f76fde365bce6e216cda3e47256378901d391cf47df277469ab7a37c70ccb98f4247450afb2b5e6204bcf21675f5bc635cdeaf6dde16e8ca71376cbc2cf72f8e66c11f4173b0ff6ee8d71802f78265d97c70c74e8ec5733b2cb8717354daaec829f27e2754e41d1b93b7a8b70beeb78de3b8bc6b5cf0e238cb71af2c9b96e3c62d6a4edeb06139a9399adedc8fa02d37ef0dc1ffb5b9aacbbdbfcc9ba3d2f279461434bbd3f7fdfefc3bb3cc3eb715e139684e548dd9a474fdbd29a1af0cbdc5c7c5eca9bf3723f4fd6dd36067d7b8e0deb77b68be38143a1f807b68eea478f9f77df6adf82e14c78f75c0bd7dfb21c818f7fd3929ffb1ef79933cafd71e929ba3d2f7735e58c8e67cc8ddd88f795b20fe6716b5fb152a32a7e272d2da2ced632cc4bdecc5d9e7f2f6c00d6c3f665fb41fdaef6c5621fffbc4e48c9e6274a4d195244f7d19a2e5a4e5a4b4055f8edccf983b23cdeb8c368f62ac79d808fb1c710cc71dd3db675c0e41f2b8a8bfefeb774cfeb6406f177afbedaf1d6fdeb1d0a4f96dfa887023f3b6e067de1f7be51dab378f33ee7c0ffea6fdb7df7459e6fdcd94ff60dd2c912b26e6cf68e77e7b0eedd9fe7781c6defbbfb2f7f7fdf5729cd7b887a6ffcd0dec4598d5020bfe63b17adf5ea05fbf6b5ca0bb1761afb735d93ecdb86d18f85f2cf47a5917bede67d3c7b79e2dc6b6f16c1e1cc627144d344cba76daf3ae7181be2fe6bd617153fef3ba1f3efe10b8a9ca51f96c7424c953df1b5d49579fe97a3337e519d89a652e95c257385155c52971330e49ab36c489622c762f9724b91997c4295571330e49724b5c929296fe9e65ad7242b81987c42d714a5c12a734c4d56cbc1a97c4cd38244e89539253d6aab8242e8943e266f6d6b8242cb586b8216e88ab71495c528d4be29286b81a37e39238252ee9f34935916a2288f19e48f435943d677e471309c441d37e2ec79cdf6e6cc62ddeb03182accd99fdf66492be5df7a9f30197d5a8942c783635c99049240000400023170000300c08878483619e4a52e80314800d5ba8505454308c8623a1380c83108601180600100000100060188681488c642ad7063040a752ad3c42b16a590bf50cd5e8211d7df7daf7bf36b0bec324d8fccaa04accc1b6250849c3d61f63bef8f20543d5ce990b5e05af81ad0fc0f74c6c2d100ce400a06b6480357b4e809f1851e7dbdea07ccd5ac75554e63ea778945f8377ebaf6fa2d5b0958b38a84fadc526f3387843035e2e7f92f648e9069690b1200149d2622e427ed8171ae3b40b3f41fec0666a0fbaa494b3a286240188209386ea27646246bb178894dd0cf2c74f2ed303ff1f28a673cc9c09ffea470031606ed6548cb2c6cbfc6153bee9e25cc11006115e95fd7cd2c4382b359acc44107d218f4e2f256121955ee9634f20ef7fdf356dd2e69bf3ef55209a1f40bd9ff63a4b0005e0f343420226a1b3203cef72696fa95c8ffa10e4fa4630afc6c2af0507f7739594ef2ada82f5693d394c23575de283adc253ed8f37d885a0cae575632d85a70e1ac061725e00a592258e3d2a8d6a4d28bc5a25175c387ed2887ccbc33295058d99f7af3b959c0c6a9e5423d7367698e934f64eff9bb071e2aefb2c434467d1efbcf52271775c03e3063cc6344740178d517317dae07448b9312db161c41b29d117254521ca70b93330ce9cb4a584c75d031bcdbcedcf746c5ba21bcda25331105df25b6f679f1bd2560ac4277cb61441b3405f0348bd4a945b7a27213f2ba6ae9bce4f99bfd379186ee556832273ccebb0af16f57ea5698d18043150ad0d23e8481ab61d2988ac633abc2dc99b89ab8591f83cb9b87e3d0df1d8c470558ab78e32a28f3d8ae18438c7cce49942e617c2256e916f1de0658729045cf1e8f3005c97c33b7f9e985fe4340e8e8c794b157f69580208c8af7f0441a36f138e85ae6667ac7cde5e81841389ae1b3b4102d90ede8bf8ad9185bfd07dbba8fa1abb49ad6b5fcc34057a4ddd9713785c8d102ba9057b60080d5d847ad403cb28cece45f4531809852f98de5c4c6c71bfe5a2337ba85109da795a8206c5e614de3d8020fb33ba496ce1440bde8793c0f15372d718293b75b1b8e5f84f453ed2f56a562157b7338006accb60b22fd4d7d92193d81a860820f9fa5640413a4404a5c257d4e69375629a3d1903bdc6360146242f90e7a5ef6957e3876e30eadda77ee27057dcccac91012a75c5b2c5e0c2cc613b84daa044f80cb952d2fae6d7970ada5b24aa5055d17c4e5000239fd42588aaf1d50d1d0ff3da06826bee54398319fb367818e11cc9b86d4778ba3318464e6d39eb9329e255ed323d1b99406405258ad6465e0fb9d535512cb80a526ca8e99bd1a584f2d8526f13f8d46b0d902e6b90f5a633d21ca64b5c7bcd241d184f169b88889adf39f2a20b05f844ee8432d1256f2eb08f3ba52fcf0887e45162f60b27fec7b0ae6036e6094097a8e093b2449389c66a38c3a3120c4db6a58727d15a036036e6e3b91370129d179a1e9f1b0470bc9637538827b72a3e0d815f4c2ebc2a3cb43f89218553bba6078f51de1a0feb9780d07e9566378b2f31d23388e9ed23b9fbfd969d5141005ab5efb73966850fdae315e233f9ab5f43ad680d0e7b6590c3bac4354b472d90bea8dc06310111395efb76d870b03f40588c60539e92dd260bb0882a5e39b9fb01a0a802a6f6d17f62fe833388a4dd8402cf640dc2471a0143813970d38161126584c4cc891d4095916e1bb1c4fae019d987d38cec926bc43e9b661662340d9bc4a8d733772a457d6b5ee21e3154591d4116d196d6c8e0d8bfc818bc2ae2f8a138f0d457f17864bfc36adadc880d64dfb6f8a4ee5f6738a6f5cf0d6b8e42f616047d58821e7226dd8fd5137952a1c328ee917f263bbce3bc567b7c01a76640d9a4a09396fbbd71a20fc08b137f36cec5efca36163ef1c9c4ea63ac16cfd5e3a8491be168f1d9b81f64b26ed9cbb9f22bed6b94668739e4491de202fc2368fefb6645789853f7ea9ca901e144300bb51a9e2c8a935a433dbf43ff228efa35e209699f3e3593f99da7c95d9a004fbf33e77ebeecc266fb4ccf4fbf068f724690476a00c2f0d9474ee2b9da3a3f838f7dde69383aac76bd2daaab332f66d912cb8fe6eafd1ac9036610d18d236b50001b8cfa318fab6f37175fa1253371679b009024fd60836cac6424bbff9b08b054c5a2d169f725b4e72f291ec1145eef6397943b110a567afd7518895bdc5b34263cdb1cfadd73cb045452e5dadbef15e2c7e717f4792d3d2766e56dcd9623c9be12f9538332d28659463cfb4d9ff0222f47a97adbb87f6ae4ff4913e6a737d772d6636420d1da36a020db92042b579d74cda03cf5b1e1094245f24051842ed8d5241a573564f3d724b4f9cacb43e18ad04c8050a213a09b045e881c2c64a863417960638d48d7076aa4a0c7409c244597a1a751295d7705a3d8f31034f7fd6d152d134755d8ccc766ea862a0e1fe589041ef47b487b7d1bfca298bab985404b336e1a2a3fc2a666ef8f3f235586904dc0cd628c2e09770d416ffa0bf8e1ba4e4bb7670d56383e1e28ac9e23c63f3f2a314672f72ab1410ebf61725a515a0474ef1857c117448674172f61653be1c2d8330014a8f98447ba75777ca8c65e5be0cd6edfa928522f5c62f10dcc7a5728929ce06b6110bc326c8ca3f92b90068d7a15a02c235412cef5621d9e72090c3306e327216b1edcbe909222541cf89cf084c7ff905c92be86de4cf7148d002d52a92bafbf1e8e2d21a38b8cf02cab61079668a3a3065370a2860ed0be23e553247a78d10709f366372e0e9ed20c253c4e897a8aa844a1246078a9a3eca6e735c8918ee310e4c425acfe099c4a2e8e662fcd8baf6b94dd32f61085efacf78c19f574f3e85afeb5e657177cb5bcac69582c332c82bd77c5783c6e1eda3a7e3e762545ca3a1c808ea8dad237f4332a7ce7410f3fe0342703154b4abfecb1f9b8bc74b9e1415a2f2a44d8472cec97534fa34a8516716bf28cdd6187a159cc94662fc1dbb245750124dd989ce0a34781c645a948ea5f5c310b6dd30099a3a6c56c97f0a6ff71173ba9d26640e81669bbfede170dad0b118886019bd502fa7134f0d621b7a6c3d159649057d12a4633f5c1304ad82f90c8b2674763c0115c09c9eb8add0e0463f02156125f0f675faaf0923c9d4d15e20d0806a75ad7bbeb225bbf2968b8ef10c3db5439ae12f18a22b6603ad78173e98a1a8290a0e8ec9b0db9edfedec9603b48a411d9c479e174a432786012babfbeec7e854baee28c78c2a0539e7c564348bd61f444720453422b925fa372b8443225bb0b6ba9594267621009a9cc42b22be415801b0c551744311f8ada3346488823329e30a84ff4425bc804ae2c5fc4442e42839c494e6ea79a75db22f1afea10d1aa48fb6daa527986cdb79b648312be8a59f13205c5994bd4b7ba0a916a648956a0c5f08d27b6ddf752035cad46e0c20487ccd2baf712517e27ee5a5ecfa6fa10903942c0a810d1aa550da664c63721ab2806881c712c0816b62bc95902cdb4dd006583517daf266ae77d4575630590e779f9d14cb611c98761199c578c3be1384d21692628ccc37f0d63bc59a03bb9bea0ac80aa7975364585ddb1b3f8a57455929f81ac88eb52f4098bfa0f3588397250313d6e9c44c636ceaada743363d0aa3079f5bc248a6872bb0810d4d5946bc59d6fda2c8d32682df60f92c2efba840fa8cd46432a8b7a48cff7826effca03bd3fbb2f0c018c1f6eb5f3f52ed01fa3e1b5f493432234009b68c848833326b606f36afd7d5ada02b3d22db42eb6f4c4cabd9f63a15ad121903e0587200ae2e60203c722017fa087f4e845603c980ea7a1071149342aab7c38143831efbe2092d9cda84929f25278c34faf82de0101fc87acabf99078f49657f7c7f7e3b8c77da963dc5f4118ff814e8b4268dc2330b043d12af33c14a345dd9c043128e5de31300c09221d11afef8b71bfc49585daf0826369ec2da6d0264ebf75d3780381117d12870d0098dd8bc08898feb20ac7210b8b03986298d9c0fbc8309b9c073e9c8183e324a756e4d7320678268191914121134b669bd68f99b067e018389079953f4cb5fea1f84886ed705b2b0cd57e04b50b02836478dd377d1711b35c28e5354323d09891f9ce0a88ea3f60cb0559e4f11218858ea04dc26f91054155ddd75b53694bb0d338048b204a6064d407de448c0894dc1f545b25aab2cdd7c87fb60d3f7830e14000a2f1a6687c65eb3db4e087e23d3e5198d562491c055029847f390a3b63070dd968f0f3e3f95479db6f25c76ca1f84661bd43c5cd21bfebf3c7cf0fe0e8ac478df10393887f7c12b59bae838edc18aa23cb79373f03361e0abf1e5172d0a56ce294eb2371f13827b41420def06362699239d6b288b32bcd0be64cbb4b2754ba719d0bfd37752257a952d9d6047a985ac37692f05ed9044c5ce08a1695a5c759d126b15c74b9738b561a437b7404c94fbe2ace6e056419e5e6b7bdf202614d6ec3261da109d83b6c0a8425a86d335b4ac485d1a55f7dee499804ddd55208969a90a7c00b08cbec11130a338630961e0c9e22ee9254fc71679711629a815c9bba665fa4afeb5638a1cdc43e9e367b5c58883d46118fa401bf99c62f6c60f2d2c50a3b3ca1550fdec0fcf9fcb7bafc1925f206c88ef1d88c24c7bdff39195d7bbd8a112b8517c5f601d0ae385156b1bdf15d05a028d415a21028ffb6b401e80c5c71ffc059bea3768240f08335bedd5f8e6cccaf30e1feaa6308519d69baa6c455009d1a7ff38a8640f366b53eeb579161bb6287ea0a77184c3f8e7736dc6660e0516855e9a77068cd323acb83e395d651bd7c02f6a808e7ec8dc7722e2f333ab877b2ead8f5f1efbeb193a963d0530fa6bdc0c0bf9c15de844370394c8947a8e6d3023c439789fdd528d92d9acaf483d02279958a999735626d7be59717075729dc5f951ac445a54da468f2ab1967b47ceb26d18b802b96d105641627e4b661e0580164c6f65520246f64889cc80157f8d23f6f6e03f3517a3532e88b9e4f8486f68f411f116694a20f349ae7a52499948981605956eab8003d4e469d8419aab5c5e37e0fa0b5ada5b13de86768475171decce00e7e38c9b2c1bd2ebfffe135fa13f3ba8e4ab9bd2e45cdd23ccd0cc6ff84fb56454e23d8b09439069dedadbb7a15e7ab91824b9a0026f7e46108ecd99036e261e297aea186c3cc22953a0239f13aea82744e2faa51917831308bc03a204aa968eac832d99d12d8ee1c9c5d046627eadae7b086a77d1243c98cc199fb644c5d158e5eef2dc476e9dbb82a87fef8bf0f818b80b53271d8521d8ee09d1fa5892ceda94da4752573399095d5389a14a4d5718f268706e809613231c1f97d2716545414500a3b04d6e189c1c64e59c97a71a3022fdf0ad9ee6097e913ac39d2f904f3bf6f6e26d132afd054879674c93ba0b801c0d4f38a6fe7bdeb18e8fd176980aee10f40c6a80d16aed3c866dbd0cdc4cb76094b3bb0d0cd12fdb2a8a51043fb8e1c295627b18578a2ce2ec812725468412f566a3cea9968bbc78f4b4b758b666379b19fb5a697a9c4bc4cd6979312837d29ed605249647a9431307f7730769aa954c0043f00095fc796aac132bed19e1243b58c51dd086c6c337e39ee726cbb24b409279287dfec87502bd6578ce791810242098869c4993dd0fd58da03bbfca14b582898f207202654c4bbc17340641e35d2eeafc320c3680c846a859768c52518f2071292134c07f86628b4c1b64941922b486993410889e7e0ac8a9d4650accb3feff576e2aca57db7acfa070925095ad271af845e9d81bb5fc4c2fd793eaf67616f29a02034c5d2a9bded5b2245a120729afdc891fd110f9f720c492e7ae7c3601c2e066e4cac3ebdab9dd901a8ea9eb4cccf9d5a58eb0bc229c7d12891d40df4a2764483953d1a3e4c62d3ed8bbde220c86ebf31ce0d4b74abfb31372bdec7983980ff1e1e9c20da1e9166066aac4a003a48706b71011552a2df45f81274b87ea42f3836c8520158f071ecc4d87482c7fa06445b33368a7a9586df7ce6a7810b741c58f897196d7626646d03c961c3584e9ec025078eba5a0fa1c837efeee0835b573867efc7032fac8b0e2b63ccba77b8d5e853ad531abf6191d9cc07c796d4245a2733749cb0da71116ed2f49f95abeb64a19c1c11d274a77061df6f6cd512e198cc725db210512b0ce196e3f149c431114534ea65e26ad16eb6897c09e6b96644f2359abdbb431a77ab79a3dfdd13c0e7b4ccbf108be5a32fd752660711c12b63799dae8e1a310d0c621d40bc726f106a39d17b68f4c12c0db142f2e2bc7c0e6a080381814ff0e89683724e72db8a0f513fdcc592ec56f2963c739dd6e688f5eeeaf49033cbf3b196a18d227b9d9feb794aacddde479b8b303ba34cd3f1c57af64ac5ba22bb2c5241c9e78de0d08c8fc60686652a7b973bbb5d110db9832940d2cb0e4377a759800a986d2667b498de36fc6056fcaf1dc68d2b828c2d5a988003427d253d67f4cbe62349515011720c18e2f798d7e60e73dfc5a1dfa5e4b257e0b4c78838acb2ea81372d80dfe0a67f1c3f773e2385a0cd6958eb5e2255118a1cd1fac3bb5b1d305a96b2224703807842d87dc192e9cf8c48ef57dd85cd62971f4a677aca8d6dc0b994cb14c90c5aa4a47e682cb0409514e43c1e0a7dc6cd30c5286c1c5e70369f8125f3a9f2990a9669222f71c98a8eda7604a8d61a179b7507818be3d617f2cbd9474213839a0e9af851b61c7c64938989b7af6647e90d506cbf7ab3db4b7e6d00935785ff1d418a21b6542213020f0fc194dcaff38e513245ea769391987a3139ff1ce8e6b357d67a030db8fc47fa020d32e8db99637f4990c4691164e49990ca51d4f816454f63182ccb7a150c075430078fe0ac6e5416cf2985ce82d89fd819666055878870f617e3e8ced608a1843326b9b694c0afa7d238034e930770231c4dca905a7ebb76b5451e881beac6677bd3426eb05108537cb02e423c16a93ecda3006bf50528eced9ac8712b149e3c809187a2d786756d1f93c7048d31ff129e89a626707973c4aa0c20c9a3eb59d62190fe256942bb6e31c0cb976d0c1951726cb7604763a65f0fa21cd7336aa81c33ffef6aac29dfe12b2eed46f0df0124ad97c941f920e9ace19c3fc2b9b4f65d033ef192391c56b09f3910dc1cb6b28bf5004430d81c1598762bee819b22c0a18096d4cf3999ee59c64f20221ca2653f42a16bd3eb59ce5cc78d79a182e6e54b29d8ccd259dca0e2da1fe470a07eadf6172518089408d7fc87c7047671be5a7bfd6f327d172e77fb05ca3ac38c9e202686e1cfd216c67a70b047dc54a7a634d79d616f0aaf2956e61950da4f263da26b75e119291d61d310de4d7e14ada17ec1fc1fb3a3cdca9863d4d33fbb8a16aac49830e730e65c6467bafa8da14dc667d70e296f14aee6f25270f03c3383137571a7e6d58a2ccdc8dbc6653e62bab1260362d2450e01295149170abdc11422a72746b7850b811185afb06685671c8564ac7146de8dfb3125cc16ce06fc3effa16b5a69595225f545184cb6ec2f11dca78c1b7c6c1ce3caf0d878d61ebecb41270604c44eadfb7b6156ee2e2290f39f11891a0d103d2d6dd2c4837c0f56b3fd2a46ddafebed1eb2f65f35b919c7533d0c7e6a2385372fc3c73d380b80aea7db7374177b682193592378c76aac894d9b6f6fa61e4ec25b7e79d0c8064ad4e34d5b9f44209c35e225bc3db3ffa812875b143f8d91905d0aef407cc0220da31e5594e1316d4ebdbc0ee34f1cac3f29357bb89c1df2280f9e134dadd6fb29269834288653a3f6721deadc2ba8ceb7c546a96ff6fda36061f2afeac83803fbb9899487c33a9bb9c7adb7b5d53340e4dd33a153cf101b46042040524c342c2dc9a3944648baf2bb81455945ff672eaa41bbd2152a7d5e69df7535960a298f95e90975bf9aabc63d94fd459619c34ff91b371d33a8b42c2d3a16e5fc17df8dd33a293a79bc680283c2f098075891570088c0b2291ca41a65b03aae2b70487eb4790a5c4a650074c369a15b65cce9125fc6bee9c00a2cfb6756aaf420a0e21b4c43f026da8f604762b6324a5330261a75ef3ba81d934a4f4a29df550dc8d503d6c914e9442a604c3d8dec888f804dab502a7996d0f8ef21438dde2ed138355270b7ce3e17d168a87d57ecb8ea45905931002b970ad0a8ae862a73f0586ec1de793c196a732e0257f9104fcfb7c9168470680ff074a5c182243deb58d49bc9f62ce7933d6c9ce2997554d0b33c40d51957dec9a40274fc22556841dca05aa14dba1666d71857ab8c2e511d72b62a1024296c8fcc95fc238288b6d9c5bb1b3f386f482a0eeddec14ae93b9181e54b39651b21f8d8500c9d91f10cc201df04bbde2d93b1cd98aa79e482714f8b54612bad201e5133ab8aa43eae14c9548676d8aa860575fe911394d7edeac9737d459f643b1514c81aa37573c89a89c8d6649515f33907cedaed466face2fd0047f5199fe2dff8d4ac45c5d573054a2625333acd73ceb7dc15e38ea8191ac37d10416ff76df19152090844b8e4480f4d83c8a822c74356d157411e6c84ca098997b26764dc8192f25dcdaaede1d91748f1d5068d19ef9bae8a2c3e1133476bed9632a044ace47a1455543ff201466ae76de2f4ca816b9061dbc0e5d32d1e3b3dc8462e188f455e5d2debc826d785353cf8e2f066caa4e8e054834b832fbe0b19b4b82670eecb89fe12a1fcbb4e699730ce02f2c77d2cd0eb57fc14001cfebec8741b97ede1d8c1bf39fc6207100a5d43c4b9f1cf61aef3e422d5f378205a48f3941766f3233fec650f0cc2d616013235f5d2c97149f0aba5f1f7bde07d6b44f6991414f270985df49704aff5745ce1effbd2c5f92f4b32dc50c98ea029098a02cb925ec8a48724f70e7657ddf36ca7da7d73521d056a8542cb6ed18d1ae2f7b529554e923491b8325dd549e2de50e4e65169100ee77cccc893752f9a5aadd89cada15b8d45944cfa0d9b1c32b92586b37619e9b44c8eb4af2e79abbb4849ed3685ff03138429ddad8f4c5724ed2458e3aabe5f14591047f6eb3eb09e155ef257e3aa69ea7ddbfd709e2ac3a1eec01bad88cad8226bf21e38e1a047245cbad9f968e5e3edde01e5862a939d2cd35d13603032686c2dc7c13a85ac3a00586b08c14146937d9b6aad52af35ae37fc5830e62a216b48f750b9c3e533e35a660a094a66cf4c6fac77eff53ec88b6c182daaafbbff3beebaebdc0f01ecb298e72358053c71d72ce150a4e34c9ae497f1fe85ae52566c27a8b418fa54f5f466c8b4e5dce40f9a63cc65aefef9bc840ee51b09d98d0e22c2de604d3e995a1b900d7d0269180f5a8e2ade8288d2e938ca49c1fb69bd5d8efa37cd156839f0b74f70b79cd59c6c92515a96328247f360cccd77c3358f5571c88b2637dfa03432ad52cdec3240803f11ff9aebb01770c047a379ead924eade479d4f60e5d982b6a90cc13442633510b110f34778f26d459a7fda186e3bb2990ba56eb0b19a0989432c316d79d04400d00daf87376e3b20a84299f18c670854497d724cf424038e1cdae4e17ebd74248f6b2530d459b63124b8b2972fae762fa8db00a04bd733ac1b49238dd3ce1c35c25da322bf4ee6a967ee258765e8103fbc8a93ac08b32928261949b2b897209665abf0782847a5ff1da22df481d72c1e6ec12516c29f24dfebcf76730845eca067e986f24d2f716226fceb66203279526efa827421c9b56d534f14c39f742ed0ebe6e8926953578759110c533d3c9a5957827da72738513e766b2d8cba3acc0a01d9ce64e13e8608ad98190e34a2ff5e7c870d3d8c7b603774c06a61e565bc03c7b9875ceff3849fcd78f89d73cf8f5ad1e796d3817b65382a9d9cf91388ef4c28f1175b2d46f8804f28e3d0c9acafde808c1cedecc53e46954ed6aa9ec30df92cffb1e56c75a4c8048dc385e364b14e78ee02a227b313f5ebd5dcac84da9b9527aa81754265e2f546af324840f43e9f5ae9953e947a7b4c949f3ace2cf1713a8e383d4fbcdfca74bb4c40ef97cb887ff06316d712670455d8fd5cbfdb1702ed1cb2ad7248afc622673e95be4ff40e16ec0df4bf549441a4b85bad24a619368dcfefc5d09918a3e16e35af806405a3b5aa82e862485c767f778870473d666e047117192ceaf72115ec9b5ba16513d207513be314a72ef54c8ae50cd57423e1a0ee3dfd30b3a2d70e41e4373a28417280584cb640269b570e5ff66d0247fb19c05fda74f60031370a73f26b6ddfa527f4ccf933ea8ca2913aca1bebc991489ec6e9d6c25c6c330a1be37e4bcfa0918eb7303c14530270e8c52cd5d0cfd6338347ad1b53f2c6de5e236e9bcee6afa5253d7ff791a249cd1625aa306fd8bb5a9568941b34e348b44f2e3287f33151dc2b61c15d1aca9d5cd0504129f1702b864bf22c0d5b5207e2c245b8029f4719d0306835b7d145e8740047f7b94fbe7d0d2f8823b24994d3bf0f437a361c226156d62e2c52291d632bfc22985a7702dc2f4b3a25c32d7bc3491c0a103d9aa39a8f2f22e6d59b6ca2daa88f693929779c9db4afca45d83c40277e43ff2e43b38e687de9765a4d3e396dfee2a645fefa5f4791765bbf091e7642984842ed464c8d4223ad421ae5769ea91b3ad40f7468bdbfe7e8a8efd78db033dab553bcc408abf41d5482e002c890f9bebb518711fc8c921ddf3eee632a32d95962dcffd2f6a1b5e40796d8c668f49ed5f44da5552848342b2fe739b101e055ab0d97479ad635a969b29189f5f3892223a38830e63812b584c2289f29dbc083d09f77432599b8228ccb5e180991ef1d598b35f6d725c8889f556f9ac1bb44de5c252c8d280c930bb8573e3e558762985d7a88784082ad90d213bc1d638e0949407b85800ac90920f33945d96d1c7f58c2303a4600819649d56b479c61f7bf0ec29ea928ec66d298e5fade89d1846c547ea47335dc1712bb2620826dfa452122d239dee205eb8c5909ac04dfddcdf22fb6467427aa742b59c22ffde5bf6023f3ade49604a4ff1c8be6577bfe8921fd974ee2fdb65f234ac0bcec2243b16f409e1c98ad256ee30c5b00451111ec3048ad21e547240d08cb91e060b98548d4c06a2cd445d720adb76fafaf64cdb7363af53b33d80501a565d31417874ed906f43a419f596e1bfa94934d64f1dcfd5879f5623a9ab64d20e603c80330d0fdc793e6dee96e84fb5ee853d11877f4f97d082b04c8b3eee3748a46c8282ac931ac3123a07a003f10e5948fadb9837221e5354c56aa40442c5ae98078d2a02d2dfb9a22a1b42b828e2af5d87e21276ddd0ba8111488fa426dd77eb3bb03cc9211ad8cae56bc5a1be0bc8cf51d0178f627aa02cb89a692c040c4b33134b7011f6af55ed8088e60898d66e792ec2872fc3fd79514b8eae2ed92535ee228b05e0940a9c812d2a2fcd994326de01945a84460e1edb8aad8dc803a54a237f5f28d7a49586daff2e9205b4967814fc7c023953545cf49effa7f8a499b50075de8e94a40c91fd8cfb1c4f03a01bb66a3cabfae2191433d2bff5f0495ec9bbdac661f3d102f814226005fc466ec0e31f78e6f397e9fb1ba247d14c6921cec367a36e45e93432e5d8d1c0a1930fabec2b58493596d8c930b6446b2a2e53f536fbdff480852608aeb8bad32acfcd0d72ad1ebeb43758e9bef4b8f3522d56c7bd35bce7101778755f4ba11e07bb13a7b0d12d3cbdb142d001d2e31f6dee44da4004b77d670aac28792867c740b5b741c8957521783415bc8269f50efe36e8716fd5533a5a2e5442d40b037d229c249db7ebc745167c18af7b51fc6b26514661b3537a0036cf76f749ea0a3b68ed855521ff4441b11edfcc79936dfd9b0139d261ebd9543186488a4803543349c6be934545537fa8b21da3326a29f8734706d6479ca5e6d95803b17fb837b65aa6c444d56ccc4b237ca8d6719219f3971cd910a41489455b0b8f29c50f06570d7d8e8297451bdcc408ac26621a8c906d54902054435fb90b9e1c1a82275901e21be20d25bf6f4dcd44a08f6eb3556974d08eb445159224a6f1e41cb636e87b859d83497b99051d344ca83ec49f7d3208a1736ccca00700974d4c86e2a6ee4d6bd6c1492f7b74ee2f6abba680c0f6c2d847a45b005fa73e9cec6531600b97f00a44c1c765532652d60dba69540ad060d861a0812827444362ebdeb3a8fe7e9c8b2ce60f4f02f47c9bab9240d3883512687d79a991a209ae1ebe8608bf9706e93fd8c79223939f147d18b12f7c0d030d79c3ad931d08766e5f81c3184feca0d230971d4439b81d204ffbc164584bb9144362e5ff8d610a65f4e78cb09830f511238d5c83204344a93981bbc9e2c9dc8f573af9683334672e2812cb69497c413ceb290adbbddcb438df38bd8adc1c8cc73ba2ed03c44480f662f21ce4a6adcc651fd551c0cfcf5bec821892b02e26ab92314641444e636cc1dfd875c3b1c50ef32f7b5670a51c445470d4749a2484511d4171346e245d15ee33642f3eb367eeda05082ed381b446010dcdfc6ef64c20a0270acf66ec4ea8224c6c3c2113668c43556bc1037e867a482db29daf30befe6133f2cd2a0d4a10d0c2fa1b0f11f2a6aeaa70becc13e2af9a60b6c117ab0549e2e73190ce8a16d978c8d90fcc44eb5206ef4ce12fe57c0846adc40b1c837d41e38922763ccb5fe7569b31120ca85eaa34111c297b5a2c13b4be9f9338738373a50f30ba73e30689d77a9b3638361bb262cff134cb3c43a01f2b174a28f8783c6d789fe41466cf38a419f8c031b665a24ca7577b71ad483daad88b6e6006db53129d8e07ec1ea61448632de81e396344a4f53a9c4c0d5dcb63c6a09a4a454b340d36d5ca20474020097d6d12db2a7ad5f61226acc83d744fccd8d55dae3affe824dd735eb969205f82aa3994f193b80ec8f24d21f11c188fa0f28feac3b7c455f01117661103ae2b6e1b99aff00678b4317ee6adb4a642d0d70a65d4f23629416e662bfbba02c32c2f54acd02e2d6e24a5cc8682469437e5242b3ba01aa4de573cba28b32f476fc3d00e1a4aeff3b94760a9423bdcbb05989bd8a6bcac7ff8540c68531d6e817097be81929c126bc308f591c4670dcab68b39f35375648b8dbaab36c837683d935026d05cfc99e28615af44e56833852894d49efb8fe064c6438dd779a1c37035c454ad4fda3333258bc5bb1f2717b6405966b3e1fd5a3edad8a09590e1d37400539f44824aef47692f3494b4679f60739c9ddd87cf08f1e4bf4c2e1888a43c51dd9ea4404c450e3cb16d0aac8899e4954f4dd69bc35886ad8fc63a57d92d90514c93e93fc9e6e97e6f8bbc5f31672a78df6399148e20f1207f4475882e6aa76c7234e74ec0048fad89ef2480fbb8c082eb13ec26f08128e25536b4761fa13d51aee2a8e820a7f77620df8470afe7bb98e2c7d9180334f1e20ad007e3ec4389c62952e6477308716ed1e889646052b21b223f7cd98ae9637ed955155856cab88f6383342e89856ed2869eaa7ca6c085dd1a1010b2e1ed7fb689c1c021980c9caf0319d70680abcee1ce9d61b861a3421416fb04b36e8debec4543a7e3f4dd80875833892116071d9eb4ef7ffe604098c75bff6eaac46bfc5b3840a33f0033a538687e0060b1018c174be6bb2d99a073cabe1e0c12e8ceb1d53dffe1eb2be7bed9a967684fa84cff07c6e96c893d43ad32e6574dab664b7e6ab8b1a43ada8d9a6df9662f105f75da8ece71508f772867d1ee50301d20242192406ec496eb3614cdf82b82afa570b50106fe506b1db440d97438f392746aa4acb4a7f24c233066855017dd965576810e34b9d6003698a32e6c2ecbd3039e0fce83a6ff10d94016e5e5b75846d6c76f418710e1a7bef4c12bdea600dd70435e20fc6081262136f852194ea4ed0f27272292b4726587d4ea7c50feaf37dcc41275ed79bc35200d03c28302795c9fce872e2e36e96c00f50d728d87d5a5ee0b99ef8f97117f1adc4447dc9ebd40860fd9a00d2a0d72b452762d5879ca1a4be4232443752612122805b06e2f5cf0da123d48d5e9138e09fb94f124061dd5d8d81cb1fe10f3852f924175cd11431eeeeabb7c695545eb9eba3eef7911fe3dcd837873b3710761195bb24cb338d3e9225614c78693f911174a249047a37d1499e8f822122af11a0299ec4a443bbb06b3f7d49f0d6dc8dfddd5080d28da4123a8fbd78b69ec2229f652de6f6454c07acaff65b6ba4dca682f70cfec82d38b654f746799ec8f5a4775aea4ebb3e829e30015f4b47af9550c497740c69c4939da6327ab0106290182689ec2e864a1e2b322310513a7d374b6ea2462446b61187350fc6af2d73a31ddb5b1828634186b2c358d183c02485b5417ddf06619324afd3986d58fb8e4615bdda08e8c71901c708d48da41d8bda8bc439c588b4c5cc36d143a95c4c1544df85e80d1ef93e6016b3cb9ab83764c895c73fb03dfcd41feff6d9c0781c060e0b8ad1e3b4f4dd9870c52ad88d8e1d431c8eedf45301560ae6e20130fe03829faf92460c22d321b2a47cb30fced6a5714ca47b8df7510fd9cc4752af47cd7207a9495c8ea6bb1626d95ae11ab97ceea7371b613b3d45b0ac57bb28318e06774341fe468bc078de51799f7ce28af6908926ed6025ae33ca61fd35f6a8cd43492426afb43629f1752235e3dc518fc063b98d5cb251fed6158d94f33def66637bb91f4b85fa679386e1158afee698e824131042527291b7c6cb4d438ec09d825d1e60487f86c0981fe2009d986ed3a85afe6d36e56ba86562fac5059ea59a432343437681151fc85c9e9aee0ef17678a406c60c55d1fd8ab19287731d52e0749a69253b4cb3f39e4888f91110d42ac43e3387a3ed4f024bce886959deb1ad2e6a06c8020d9196e42d9b1bf872e200ac14144490d48d34d41c0a14f2dbf2920c5be2e07712594231f491cbc75cb2863102e636157918ea6d339e41435f82b4c32ef67b8dc1468a341b613dc23935d11a294e9f66a9958ca59d84de43eec211334ccf526c07cbaac9600c8a1070d0107c27cc9551ec13a26a0b1d4c71337ef290d49d21731a20e02e0b14018bf0b9744b44f3233e94cbc8c47059abb8d6a130f5325db97598d17767b991667d88e90824dd72ad3c2cd2fcce7656c72c733f1c7d73586e855a57dfe5cd757951ce822dd3da614d3bcd5c90a19df98668296c2b54681b63901a8720638b476a2b3d81d85f15c6193f13dc75aad51d61161b2abaf20c9b5589f461aae530b729c86a805bbe0b427e4575b2a24cea685b913c62e24a66573cfd440d811406b0ec19d44051c174caf5c976855dc37eda56d50f5555ba3989c20ea27999ce9d1fdc0e5b8aeaab1a9b8a7d77426e590266bfe78d0eb61e1f1aa9a6cd920130abda02a2477a41ef9f435f46d50d235da1e24680daea8976502cf93f9f8a7c0f9b69b7d0384dc9dd26dde860cb1370fe4402f3d02682adb4fef8838fadf3a53b1939db36579336d3813e23700bdd9f022ec8bd78a1f6cba24acfa570b69356ff1d299b5db26e67caa594e6900b0d3a81c1074cb924e27d4d5b4ebab8f9d61b9bf6f56902a2026b8462fd9e37301714aa003a4f46a454e98727ca55af0abea9cc2e6f2e565afeb65b23b5a3b8dc889dadb2fb127db26123ec114f53d890cf65b7c058bf6f8fa8d8107dfeb083d1be2d484d527155694651083a6b7668e1a863283315a5f92323cd439b4159645660a6317278a18be29e8c40631fea4d80b4bef728e044328890bb56907a3c2d2c0adea85e6ab891df067f4a43007e03a22a217c4ac54ca0b9d97d9e44402240ab849a32fe80da56f936f5a083a9a10f37141af6d0aa3b4986219ffaa3c9d682a0864e380e251a9d8be0735c1ffd315452f3fa2417032ce2d4a1a6f8933771f87ed531aa68caf46759fb0e9a4780a38d35abe24203c577f887208843728ea420265ecea3bbd3c75999753f51f5037c5bc8ceaa2352bf521ab03330bf4b8f4108105d8e5e731503cb91cfe4cfb7720b520c1589876f2df0adfcd800feeb9a446679b9329c6b64d5b300adb6998bfbe93936f7d9223c29732f09f907e7305d3bc66c9f4e1b7ab4ffc93cc051f6d2f612ac4983c758a324cb31405bab2b3e34662fddc286bf0caf6482386e774041d7c7df0a168f326d8fc1ecbe8628520d2eda9a843609069934073e1e525e8e37e1b93536adb7b7c55607943237fa142e821726ca67d40a20dae90f9a9290d4aee5671def281c4894a9a42e6f2d471911d99f3aa2190a7d4e0c0261277404b1778b9e00e854b82ebc2b6fe2a2de0c1725f097551d294d7480df2c017e1f52ede7220ca3454df3ed38fb70504985661551ab999987411bacafbf53daecfc15c17a825a87e7fa81280964a1573dcd38a1f069fbf8076934b430adbef932c7e15dce77f24f398d492785646a5c37b7ab600d608a9f0661d6e447fb4dff1b8ba4dad0560d4121dcbaa215feab99cecff677485e8f653b6950c2f51b9a7e3f99ad358337757d34a75614e67021b3aeb84759b486b4f7e7571b9ddfdfd158d9c2b182f208e6b48742e25d7f82022f86169503c322661cc7bf1a77b33350c922dc0dea20042a317e90b8245f9880f23c8537c70b969cdb814a6352fdd14e6f9142a092f9f7565d32121f3a773f8075d05ff8de09a7ee3e951be3f47f820611bee9149f8ff5aecd610b86030bf94ba69c7bcf1478a79c540deef1167b901106a1745d557cb5cbe24ed836150bbfd64f347ecfba6f92b5c9c5150162285da3ba071916cd13073f283c861b2c2d3c4dc9246ab274f050b44476a82c7c702b6139c9dddbc5033e80aee34bc0db798acc117ecad0f4e9ed9d8dc75411a9300c63ce2e509501cd50311b93e02e96a5924a16e60050a26f7566f1441310b00e991e8bbc37f49e5c3279544a97ffe6cac54cf429faa1974058ab4fbd807b7e27c147866dc48978f38e9b261b823fe2077627f8040c954b1f28c4fb5f42d921ffb2fafd147a0950b6b888f8547c67f2cd9a3dea1e714d7cc208a4bcfb98feb915627a0716a32c94a3ad7c4d6760e22381d7775469f0d28e14c13381d8349d3cc69c9ee00f9f27a887fab91a06dc06acaa836a6216c5a7175ce7175d625adc00d4cf03ca21fc64b69ff0ea16cbce10cf20b7a3ce38c709d6813ab61bcca2fe4b242664b186d9cadae0d8898aa1e0d26029fbebdaf36eff9624f6af348e9b08531666e0ff18b4961ec078db2544bd35245e200ea0fb040cc63a46bc0813e213c1bb775550a6c73990c844f0c6a0f27ece3e82ea7bfa1c14b9060c1dc8bc20b1c2155b669ba834659325703e1697245ffe8a8a87433c65141cb8073275d60d61f2ee16f84e68dc28f7376ea8d21e892e6df911e93f5f216c04b64627c4244ad992995458f3b4812b3e708cbe51f2f35bc216928542116a609fab1804c18b1274c5456e8dfdb003c84ce8e2ea2cae5a08ed33956919e39b5f71fd5797554244a0f4174177a90d2b7396eb0370e494ebd6337d05ebfa55824cf1425d8bd045e8987ecdad43c06d143972090512b522538148b3b8e03ac60ebbc9902c7186a382efe0197ac89695bf3ca404a98c455a46b553ea190a768f27966309f77e2600b1b86b2d4f83bf636dd5f403d21530f502e3a47c7303821d63d2316ddd09bba67552cb878d083470c55cd41a5fd40315ec538440be5af0ca127b4cf49315031e400882846f9721c733313457ed10d7172bc9fa099a865919ed97693cf33431ba9d243d9bc7b32f412e9d024db477d4deb0aee457cdb89478bfd7e5de856df870e4c10b49d97c472d00103d5cc6b5e92f3713765d78604c3f897ebcb6a4485b5d5c8b684431e0c6c7142a9378cec94cd443122015c91c9e32d95993d210a712c2250135d2e67750247af735a0484d7badcaf45858193339ac4b04dae7ebc157309e15a5039d3d182dff2d5d6d1af314525b6aaf32823e0f3862c0f9b3a81d65229dbc368ad537d5c096e398dcddddb1a1de07aa9446b1e792f65d08edc8e517c3728bf622e8ab4f3d482c217293bde5de524a29659232760bfc0b090cd89308afae5145c1a38a82e7a982206bc57eaa4e8eaa899d27543c4860086b133b4fa8b027984fad393a4fe428d104f6045bcdaea9473ec31c55b5b5aade568739319563cac19ea8ca70253402392b9580d7870838c39b24b08cf579ab85f99d10f36b59ee3a699c4ed2398dd349729e9c4ac8797d98c0d461e3744ea36412182281383049a372a012d70974b177657344f23730c97562b99b22342ccb45e7320866328637310571ae13e81271ac2db27d0f065a7e21f7642f0131c84d39049cfde39558ccdec3edbd040296b17c7ef6b7dc477ba3eacdb009b7acfacb30ee4117f916e7234e8eb4995648a6957e722e21e7842e8580a967d28dd88a040286ef2cd16d78d9c1037ed6015d2e37b3640a4d3e7b0e1f3d4ee18a8fce62c3cb2e5723302f992757ad7c2cf1424b83212b9f274f7cfac86b92df2a13894f86ac863cf119f2c4670e590d79e2f364c8156d289e5d6da3d72687ac82befa9055185f7dc80ae8ab0f5981f1d587ac7ebefa90954f3633e873d1e7efa5449e435ea95bcfe7290a97e9e9729948c417bbd7e3c3ae8f930e9f5833ab539bdc844f2ed257bfa00f2f3ff0f287b7f297671f20e92527732766796853321af9e532e92bdd32a778022247f198c5d45add47bc14d336ea55c9c87df4ad58b651bf242072140c6f23d7b6ccefb5558719e544f5c2cbaf2d93feba2e1f6d589f2e87289bc8474ab0d72d46b4c93e61a6bbad74e72c98c37d823e4f7c9ef83cf179e2f34484841d27443b4e88442251133ba3d1cfcecf4bdef1d489269cd8f91139b1236ac2899d1f27442291f43aa5903c318a56c1271e360177baab19ee7c1ee590d3ea91e4f429972fd79e6793c7d3e9a497a734ba1559a78e82a3087c713e60af35975fb23ce2e674c969a24c4227200e9893b95c9baf71d009cb5d93834e40971de804c5ae74a96997742845205f06ba65798d518252a963efbad55ab15321be5687db0ff02b4a90e99a5fc9c9eea01292cfed9138db278c5d9be52f0b6265577739ca66fb745dde1910cbaf89b2911c6e57756d3a692bb244c857e03f96b04a50bc6e31cf924c2bae04eb1375cac11de884e31671e1c6c923a3884fb9ce81c7c71dcf61c69c7279c7f54abd693bf59a1f27a5cbbf9cccbb129b1f5d07e617e364a4cfbf9c8ee688f46799773cd5015d289def65078d52c7f31d54ce395f9e8e1d91ce47b7c6b2b476c3fa3ab65d1a63314c9ab9e0b5e26587d4f1a263878e171d3b74e8f02b818085ccc78dda2151d2ab57793d0bb9b559bfb7725906c142d6ab0504e3e0679bb5852ceb56e698fb8899ed0ec3a4eee00e1d18b494b8d1eb144306c5301aa8c178d93fd62fdc3f2f7dce11a924034371ea244b72eb25eb32b6f74e96cb26eaa58db49d2c1f6def9d2887a3088c7144e64bb7a05f15fbc42e85604e06fa7c697116acf2878b39e79cb37f6efae726dbcbf43cb84c643617edd35cf4cfcd6c2efa67b64f73d13f37cdc59c5c4017e924b8b88c318f8f7ef183791f4d268c6fe04d3c45b72ec70f0602b9dcc2f3cd675527410ce13882fd2daf268d9b5cc6218b04d6e30bb2411f2917a9bd9c567fcfb2ac65b9ad1c7e2d916ea28f19de64d3771f5f1e7a7ee99fe602ce19ad473f37ba9c393249c469240f9f7237cfc523ddd5cca753cc2967f2199ead0c7f2f5572eb35b75ba2d0889ab8f74ed4dfe90abd13e53291d98397b6f74e227fd8a9c849224711857cfaa8ceb7d365739936dd72f996931171d6a5c825c61169914f889311b9751127537dbe9d1c271251988944227f191589bc57d1261e7112cae8a57cc453f44a2bac95cbd2271ad1ab68443c22f25e452344b257d18878241a2112f5ea7daae4d13da64a5c0ff114bde4222e9b64389dc191b86c657028256ee4d7b58832724be4974f2eb3bc8ff87aa83404ff5d1eda7a888ec2656beb9d5b66f929fb341db3a49f2b3fbbebd335c75bc8214dcc36e3a8b9b68536d9d9b0bdec8829dba708b18d47a211738e9a84840b311a515ac829f548a4e3dc288546e89039a71c12239d911bd25ddc94883cb429a9f11f22bf58f5abd139e79cd187c01a0e1ae92e6297439f9e319f5166ebf1f97491e69913897f1de6904fcb1189917abdb42c884c74f9192763b9cc69b53473cbc9449f9f85b848279c535e3e1ac8a5146f22a73ee28d18c54cd8f65eb48ddc6ed5a9e36de42f0372b90dfe68937dc22cf66cbb98ec93f5bbc10c4875eb173ed83184b98fc636bcd93e41bf364c824170d263cc334fe594320a1167b2cece3023c5f8947f4baa58fd8dd8c49148e24d1f7909bf72362f396864de3c39223d332030f3fadc56b7aae5a78bcbb25a98dbf7accb7f9ccce59eb55c96f3a5c5c94c7f422627437dfeeb6b3eed5a1fee2e46ae72b9e5261d429a89bcf4b975007bc9c9402070a5bd658aa54f1112110189bd4e599eb1af2c7d8a338b81dc566bad4ff888328b8154360ad648e9d04804aef4d1f6330bcb480a38c6184da68f41703ee28444401739332be57e883f657757878ac0ec9cd88ace0461af5066ede521c75659c85a2c86ac6799a5d3a3cd2c6643a68f9db5097b823dc19e604f9ef0a49d73ce2893abcbe92fc3e9b6d2685d98b5d65a6bede5445ae6fa0b598b6197e57e88a17bbd2dd65c86d33beb68310f79b6619c7716c24259b4d77a96718d5d8e711efd6e96e5f2c3ce60058235af9452b6a41e5d082ae5957e3bd6d06c6bb985cd0451afbf3c95cc55b35ab1ea9885dd47679757f7d19a5b5c2692fbe2ac550f655cc62c6fbf361dd0c5b295cbafc1a9063c13c4bc60cceb7357d7c94c10ef36d1445293ae89ae7657b006c39adc455e1369198b44f362cc490cbb4eae93ebe43ab94eaa181a662dbff7ce0451670592c997d3774939abf53aa9bc9c068e222ecb27f6c4abdf2b9a0902faed9a5b459b4cc8df4389a5ac2e922eaa57f4b20884442eb99adbc85b52a32ea7c873acd1367c3969799e22bfd73197edcbcb651f4c555e9f1edab027d0a566d8e5f265595ab127747258773321686f7a3ec7bf255524f92a8e3c2ce2df921e9abf9a55697f5fdd86300cc364b2e5d385b0302c14823cfa2766d52c5fe479c75bcf3bbe3e40870ee88239a68542a110a66d32993f1c0a691a16e27e888fe23e1a6f598897819e65ee9ae791632eef784cc4c9b79eb108873822fd285c06c14c1e61cc650d73e9d9a603ba60dc835903ee532e5b9c0ee86239920ee842ea0e4e4e0774911c86219de2c6e8b56782a8b4d66aad9c09a2d69a63770db6823834f6536bc57cbad68a430638fb60a297572d14db721ad7b1c4eef58b6f761dbb17c3b02bf2eb8fcb18a59be4da4571cd495a6bde8e32d2b81ce27c30bde5b439ce726fbb2c23d81312a6b5a5ea96b32dcba2916ed5dff6be6b8dfdfaf5b3fca525a534461e9f3bb685514e5acfd8e588b4b4948451234c11468c376e54284145112a805ec7bf25543c1163748b5ad1a22ee30ff12d0ec8cc5bbff86782686255b7acea3e628d2e379919bf42af55569757fe101f7ab6fcf9b3a26559d62d77ecbae5d9072d730c664164eaa555cd43212d140a61d750bc6b087b91bf1e39ca488435ee6d197739ce090913b51503e75bde159e09e2dd26f2827157f7aeaa5f36f1d421cfd6f2b6892958134f1de26c3286619c86f3edb026a646de6eb96cdf3ac61e8b44210edb2c875df5d658d731eb5e57b43827d7c975729de0e0ae3553ee787edf7b1c9d0942be97e7323edd647e08026ef9a9e4b4767c534ae9e5b27c1c4560ca11e9a756267216673d4b6fd70171a89c0c74c9e9802ecd912e943c54f8a182aaca8cf97c8e176e53e0bc00fe2da1c2143e5f807f4ba6d0f967ed8b6e1d5bd917dfda647e08e2adbf7f5bc6803ecee9f3b27c229d21f7b88cf97c749ac5d818eb2fa39179e8269eaa5b7f9ded5bccaf47ef9b58dd625cc6d5bb75ba737b6e9daf9a57915b5cc6d82d17c5d4c82d9712b9f51167b968b38e37cbd193c57196ab1be6eda10d471138e36a1bc15104be9c0fa6af97e719998b936e791bf9e8d3a3634f200e9693815e8540af94c3babb92c39e4097c8459daceb134298cd5d459d9ff836a9f5aee6d5f1ba4eeeaa51574b994515c352d201bea1a625e8069a0793b9f51b86783096b704dd7073038e7d30fdd679b0ce034f4cc11f165b53931fd10af0fd42c3f9fca88083819f07e36ffd01d307587a7e54c0796c1e8183b484e1a16ec8e9cede90444b182d3c78eb2d380fe67a0a130ddc90c41651dc90d3280d40f1341e1c45bcbd1c0e9b0ca82ed703d04c82b3c6f3351e25e8b558bf17174c58546fafadc64f8c34463b0f2a88430f617b087a3035b4f86c63b53ac30d23bcf52b5baec4ae103ddb58499dd712a36716550a93b7359b47609ad71263a2dbc8e2a158546d83c983b96efd3d144b135e673ddb68f2365af0d66dd43c98cbb38dd596d2f35aacb33421e58ab76e9d45d5a8942a5e67dd7aca106ffd7ab6b17aab30bc751babb7de17a9e76e337a2e2e85e6b558bfa41e1bbf7aeb5896e3ad5b0378eb35d6b3c6d3294c00b0454f368fc0d0695e0bf416a0d7626b7c0bce6bf1dc01b5e03c98905b6f017a30d22d159f25139f3ba0b721ae071f03965ba67a2d3604f45aac9f24975fde7abe546fef1758a6e6c1dc780b3dbf263c6f9d07554c75ccf518074410f817d7bd16eb416cf8cb29d13c9a4cd2f21045cf1e601e78bab37e713ca8bab36e71b97beb24313451bdf5c7623999d78555ed9424ee63914f8a6c77a647db552895cea3535115dd8703867000497e60489a283e63960d90cf12a02662fcfc7e3e027d742abb6b54cc6f8c8f7e848f3b9fb1eeee0b7b7baf83fe945437c5ca65f6499110274cba7b34d1e73e966c43e7e55d423787f9688266d3280835249093ddcd07ef17b8069307d3bde4791f3185fb246b1eeb6e32f13c572f3dcf9f977902bd5c4077f2b366e4a51b69948a9c38b8720ce84e7a733eba1053fe4ed2e9e432c65c367d36bdd5029712a6349b7892de9a8dff00735ce0acd9a85eba66d3a83e728304a751cd05799fa4514f5342d369940af4f74d348a7ad66c9e50bd0cf2be3d6b51bcc6f3d235295e6a3d2acd614f3d6b57fc93404cce6236742a146ecad490235d81b1eeda7a8121168136e2b6dfd7affdf97d2dc2dda9a81e7ab6e1db552407a45ffa8342164c523856ed3b7cf4122b68f25b459d1e7cc65245ac8a868686e6c7126fc9154a687f363feacfafc9f311b24592eedec74d88939a4d881323ddbd676954b66fc91535df46804eac3ce841e0434ec816339f314ce8430f281e6104d68ac05a932903eed6f4041348897a2f828ed9fee3a0073efa14825fe607f41909a11110aa3c7faf0204fe6bfca04318396ce1d63f13a108626afa3b8de0a3c7f7636ef0c7cb226063c316742690920729210e1007e892a37737e0040d6104fa6562b320ca179fcbf7dee364af40ca96b25dcac829a794b2094603c628a38c71a53dc6187d8b2812a2054d77ef33f4e9949b8e752749dd4999b1976ec230894a3474fbcc5fedc11803e467240c01f498638c5101d83f1f50d5f374ebcde9b63f57b736c941386bfdeafd1e7e38efbc7e7a4fbbf940fa3921161e97f1cb4833f54729b5dd4d2258b09cba7d29ebb56e0f6b76bbd4a1b47af06c3886cc13faf49e9cedaeb13070e41e6a7a866e1b4523085806baec0e931b11f9107a8144174856286098d92dbae51e9e5e2cb3ac0ce3f2f4cb2fae5903a45b2e6b40067e5e9bb46cb56e58cb722aed9513c17ccac94c0e73368ee184ee25bcf0a4ad29608a7b9c98403a718e6134455403a4d4a709534aef65f9ece1a94f9fb45a49558438e544305f7637c53097cc59473bd717967dc938f3dc85f0a66d2ffaf0f2d65281ad67f9d1665bc55ebd707588bfba65ddf0e1a504042c8060ff65f3e56ac90308a594375680021a8107960969b1203927a4b7ce3927be9cf657ed87a72ead7b65089ec658ee17275d8ae0a94b21d7534e7627abd359ed934a58bd909ca004c32415d85aad794dae46c14763fc96acf38608e64b5cf2041cc069f2ee25f3c0f45a2905b696e41de672f7f2f9f5bcf0087199876874b96cbab8ec3bc41489433199469c889bfedeecc1aa2e7b989edd12a11aa52fb950cf33c01e69bbdfea85218b1786b7a67cab0b0b2060f1562f61cf0cacc59807014e5b8a2987976ef11516c3241289aa4816c339886aa2e8410e4da040d2469d97f2694bdb300a022e7d5422268948e29168e4652cf2d25b8c4e455507713128eabc9454c05246d58daaa88a2a1b552f2f9fa3aa8362908ca75cac11028e46620ba10923a20e05a2397254856987da0763f974ebc15c3e6053f873b9f4ba5421fa2f5ae95b95ce3a27a595ca184808e513e484f039e962c54ae105890640524a9927145367c914c284a28e8cf0a60e5c02144b983a17108e17242872f022ed9cdc9c734e3ab19f120a0eab9913a4c51a4224a6c9316952871042698315968ec233a59c3452ee493985482e72718c319ab824e7615acf38355fe2c93320f12967375356831729b93c7d660da021c81726375377f129c9b422492d905a0e96ee236224ccf38e97def21200afc64b5c7aa91d480f8692403a46b202c3a41d4870e3e78dcfaf67f6cc672be56c782dd1af0d869e5b3ef218258982113c1eda888162f375f77cdb0fd0e29e159bc294052cbde725271f84b2e50c2e89d40d4d3f08f1b269b52cebd372cfefc4eaf458a5f462663124d34a14b572d675330c6b5ebd1f4cc8eb86d589376d0b6dfd5aa6679b7c2dd3b1edbd963bfd9a6ecd49823a21266baadbea73b35cc650989a73460a7178cf05dbeeb5f5dfedbe6ebaf6c34b21f32dfc3be1eb18bab8ebb54c8bcbf7670862ecf553042f5fd2496be5e0a452ba4025ad9c128b425a0c77a31e530e2c808085290556d26038e8a58f9e60f97c5ebe9f97ff561268c88391300c02c19f9770f5123279e9b027f2c4d4e592eb1d188445db446b43b9ec91e7b3694702f1c7c5c1558e09fe60980483a4cd921a0b8324cdbc74ee280858facb82d4903a9d270f9878e95287d24c1b264f8ba79e270f743e531a1b3f39a9a24cc892896903852e52306d2e1d294079b19016eba0409b36b54b48e975ce29bde0b20b317a0c86b07dd6cedd43534f97db0f423ca51b269f44c2f083996ec24850c030c914532c94d41d8b1458c6f89393af45ce9726a832081f714aa710ce24aed61e2727a5849c9c89102281ea7431857cab6eb2f4ca4b12f652baecae0a3ca2b5320fffd9a42b6452972205174490ddcbee56164a314a36232fb0c45aca7c5571a9782e263cf57c55f1f293c3a41b608aa5c52ed5cb2d9ab0027ba94a36b10a5312995c76b8c10f08417abafdd073ba9d734281e7b4b625a63feb70bae5a6bf97724e3939e985d74df9937b41fc9c724a22b2013dc618638c9f527e0fea74f8a4ee62acfc41fe00492b90445a59b15c9256a6209956e696a74bb7b625a4dbac01d5a9d74cc8943e65cd62acd3cc01332f1dfecb84484e6672b833ac0b96645ac11e1640c0020818edb983fb788850184392d6b0104bb43f975b962e5d660dc884486f97911c864f80905228e10c145a725276f7b6601fccecafdc7b2d70c656da2ab01890163853285ebae4b2c49e202dd65da44278ea9942b1f2d356818180d2620da9ce4b9c9e1c4b751e036a315c395dfe7d06c05262d365779813f0f4f9ba4aabb5bdd7519776b3ddc5972e699d9323121bf068a59c8a90f6e9ed9313417c1961405dfe6d2c8bc1ba8b99f4b237d9103e197aafc507d24fafee23ce17fd619cb1f5523a7ca98ecbb63b0c052c8370b89b9af69d01994f39d26b898e9f80a167d2472022a59c0fa40614c0065270f132c9a908e900e965f05305e1003607b03980cd018c1ca0e6003030028d40230f12b104871b1c6e70b8c1e1080e3638d0e0b54d6d1b5bfb7d5fe931c2ae911b0ca2acb09b60f39a8d76bb3c6eefda2d8bb92f03b25d1b16b71bda82bc0f39e62f8380941ee2422e1dfa0c712a0c781ff220ef439ccae53221a77e71388e60152121a71ee26c7733efa361b65dee2362d0efcc5b9b0fa6b7f0cd5cd84deeab24d8b183524925953be4f4ca45e0e9802e9063b1214a25e076930e52dca1046c31fcc2849e2337488e603e984ff4dbd3467a30b72e6a77306cf5d221f6448926742e974d3d3b57b65cc63b4cc09e604f98d06335cde2c29a464197b2e523c15d7557efaabb3abb2d2939534c5d1ea94e3c459792cbf2e5467d6ed0a57d6e94cb107a6ff93679e910460026f9a88a2993e96374b904dcb853417c6005fee33a8105804170117a0ce57e8873cb42e419b8cd25e076fa64ac4d91501da9375f917c3d622bf76410ea9d15368133cca9484ceb42387dd6aee9ae062dd22fc6a6122c1d4b2e9b3e480cd1c80b3c1a6531a38c524a29a5db8c191b0a36632365319784cdd8769e78e9a52ca6899732644019d4fbe9d47912a9549221238b99519a316306096534638608cf9831439b11ca66ccc0ee65d93a834e0184de6be172bfa402bebc44053c1dc5afdc72e4dc2d078ef49c03475e2e382b6f9576def2974b4cbce5f57295cb112f7501457be50df21efb951b0dbf1b76d146f2d2a6e29a9215fba2ed7d697b1ff22b83cea033ee4884954aa2918c50e8d2c03615d38a295321a1683eb398d0bd9a9215f7d1a311f697c58c62b05f577914dd59a822dd594eb3981c49bab37c950327478e0e4628d5c1a63b4c071bf83ad848298370bd946e2d1daedc74b091417430c205e18168a0d36bb128d7bd164b72f9f5bc25a19c34b90055bce51206cb650c6fb9243180126f390fae85c9e984e534a897a6c0925e2a1f2e55690a7c371d6cb44d879a2d70fff597b91eba5457184a3a0fe67a0ba26850343a186954c82dd7c1a651d72dd7a1a6519a5b9e2327474ece4bef41450f9e77b25cfec8a5dfd19623a73bcbe59603a73bcb2b0f1e79ce81f316f591cb0dbbf3e448d228ca2959f1915b9e03a75138d4630a2fe5aa3e596ef97ba81e56bce5da663f074ea7ec0fcb73e48cb06f2ac0f949a1e62d4771ccefd479e9a4cb630f9eef1410f46068b895e2a64883c95f5c96303a6f7989c96716a0b75c86bb84d12891bffebca30a8dc38e2a3c170b0a9f2793b77cc6670320f196e76800245e67f9f494cd343720e08c2dbb20e11286b75cc6965d82def21209c55f1683c2a16abab31c45d39de5283538a368def2d18a8b36154cea0efb0fb0abdef20bc8c2dbca26fb545ddbb00d7757bd7a765330bad5df816fa8debeccee0d95d6f3da1531f8dc41f1d42fd583c9ac2a4f1e23a03c8d5dfd98c5d012cd6f54c0ed749302532ef700924c1e0c75cbbbb73a20359e721ace6bb1dcbfc0edd905e72dcf17d08b02e72d97301aa5e2f396bbe03c18d25bee92f360e65bee02f460ee5b5e809e0733e32d9f38d8b122b0ce53bf6f367c327479fc6b3a76b90a865dbf803a059b00ba828a34caa651f32dbf4890e41d10c70a597cc6aa0a0b9ecfb7e62d264d3eb3583b3edf9bb7ece78bf396fd916fce5b8eddab074fa3a05bde430acb7bf4f460d2c3f21e3f3d807a58ee83a651d631267ceed164099f7bf828e133cb139f7b849184cf3b3ef7e0790b099f9faac85b2f640b1ffd582c4ee6516183d21748721f4bd6543a0fa6c63f9712755fd7d0e7100f6527cd83910eb364e2a14b9d07131d722d4b2fe585d35dcc3c02676b5bcacea2f419238d914e9bd95d770de4ca69c9b36602ef47759a055162b9929a45bf2e7addc9c9693bd9b2fad2e1e6cd8359108b839c0a05e20febf095582e08217e546e5a5fe01c1ba9e934c1c4b7f716df9e45df1e43abef4be77b02f3c795134fed3edaf20243cf57ceb7a6ba78ee63c91dd057b74a56e0cc9fdf6c53c1517a197f63548444bb819f3af15f06c4df5a48709e366e5d894d1d4c3d5f3a5f5dc3797e017537174e922ba751d7ab4d0a4f4ce1f889a7261ecac6165e97c2c443d958754af5949d980ae5949eaf29aaaf5e3db4d978827e6d6ce1a1de8b29533c41aff075d02bf48c03e82bb59d3d60faf56ca37e39f461ea98983c18ebd5ca2293721e663140849c887d259a97acc0f6df5fce476b5b8dfd11f2db58fb8d31469905a9f1d6e57b96655916e5302a2756b2025f99e5b762a1cd864f9f2ceeb68d5577d5a7bb0ae46bc011d4a87c01e108a3514a2c303a01a11f1c4017d08379cff649ba8683d243e20109879404a50a0d6716f98ce347469f360fe6f2ea96eac140af7e15f150d74d77360fc6f2eaefa12e1cbcae7a9e452e9caf3e6d8080d5afb575170ec0b86e1ad579f1baead5c2f183e3e7b5541c213c10f0b38d958dd56ba990c361f35aaafb1870756b0bc0cf6ba9b0dde2726783af9eadafd572ddcd6b9942f8f90e28e4731f4bae01f4b164051efdbb5fe01a370f46c747fb71dac4e879de7cf7a11e6b0538db0ff57cb435808a70df0e7ca9debe06f4d41f967de85fa3ac2bca86f2c91ab2eea3b5efb021e0977f89a9e8d479c49474ea0c68544c7d8167d014a353d7a96b370fc6e5e903eafa645197531fc243a7709fa8531269e5f3eb61a1d4ad0dfb02ceaf67070a54b731d55ebdba29a6a457973d0fa6c6579f398d8a5f7dea34ca86af97ea5f66bdfea53e45429cf4703b744735201fdcc7d2410e6f01438f9f25056ca85efa859989b482bb93f0717e1e4c019e67bcc34f4cbd3c6c816690947e5b24c4c94e77ef87ecd01d44f25243b2c390ee60ec10e428d09dec6ec80eddbdbc93746b5f947809218473c20927742da73ba9e9bcd4925844e0acbdbc742dc9f322783a4ced104f721b024f2595db41eee05bd070341c2bbdb320386b392f694828355815fb4ee17640628cb1469f33097e3daf257a95dbab55c3d18e906e63e7081b4f7cf468e308af8b5ec38b0a440041293b2b3b92abf153b9949d8f413a9ed712e5f66ca838a0d712b72ae04cd231ad5e0b0e0e87f279c7d345e1a14839285212af8b9e3b293e3a49e7a30b20e8c1548f2aed2609249fd328cd062f1405e9d9864a006720e9e0e0517df458390104bd9678e1d8b29bd7122b17e2b1381fa7cd75035f87a6fbe8fa74833f250e29ba8b387a70f090c480a1671c3cdff59ce1be2418eefc53c518a5cb4d66312bddbd39e18c5cb6807717638c5246196564e9eef98a6902ef878da7d7a1f75aa40aeed55856624329432a42e4c3387a82271503ced80ce599b7d0e5b98f7eef69ef3d6cae465ae0c9a1d8bc0b2f95171066eff9a80b2c21d7cd5d5be9bc32367c5728cfc42c268b9192d25aad7d6e75efbab4fbf2b5401aca330f2916a325c1f95df1cfafca31e9399602e7c7f3cfefb3cf6ad81de5964ddfddddd11bfe00bfe3a6592830c0cd65ecba58f642b086f28cedb7afa55a16b5a68c56434c4548f63fc0319a9b7046cdbd2fc6f6d158770fc7f89ebc68630aeb13f4ee3e3abee19f63f74e18637fbc3d670b118db201cbf1cf516a70c66ca34e32f6848fc6deb9f70ac8e49ff715dde49f47267d85cf4a4e5aadb43636b48f566b51ec3d6b5d179318161b62167befba58d61392a1506c18525dd87bd8cb9e86bd2d9424a4c43fd77292fc738cb1b7e56ee29f8b744672348a0d471d14861841617491a601e289420a9e28aee851c11b780422b98147601268d33e0f8ce737fa8401d4c30e1e6fcb393cfc1d2f8a87ff02bb6394725249696c4861c728e59cb4ca5a63c32a27a5b55a6b5df2ba62c3ab5acbbaae7bb14c66596c985d17c3b22c14d2b0c43836c418d4340c6291088323148982121ba28cb0f7b66c5fa9843d1932b037c3244da6d8d0744718dc50240a0637922561b09405296170939105818fdf0c3963466c38c3865484580f3d886faed22963c3920da908b10f1d04df3ddd3d6f78030d6e3fec201d3b66416294591029e5cc824c3ae79c340b42ab8d0da594d29a05a91ffd6a740c9ca5ce43cf52e79fdbd52ada449b56b50a0808e2409ce7358ba163d8ec01f5aff560473969b5a13cf392831e391521322f755ecb73aa82fb58320d9d8f5dca995eca79a2c453ba82a7d4a494535295a428f594989456536a3c8dea6954be549a141a8f9452ce1fe06ca97c524e9d982ae5c4537477934967ea08811a0f1097d77aa480f3b5539225d54747b1c1b9f44490957fddd197a59c924e4c693c259e8f26ade7a3d3520e901baff55081f3b513ca42c42c480d4ab96b875e4fa004a19ce152c949218df29a3a1f77ba8b41d431d640f3b472d71394bb49d4dcf81426af8508a1e83914868ff94ac9a28aaff1924b611254e369e02802c79a2ffd8ca0eea2a34001e76be7a3e752ce47bf15d6174379a6b31072ce1d28af9d46416ee57aa25196864e6889fb58f2ebc2aa5dfb715749b0f5f3f23f00a99183ad0b48fccb2f84b0bba4ee4c31a4eeac94504aef975cb6c05fd7004fa3620e6963d5a8c8836ac35cb812c317a3d45a68674845087de8fd90cb1678db9d8c5309c69a5be7a127a6a65be781494c51b7cec3eac70beead5fdadbfbf1050f51783096b3740c8085cd1f60e9f70b6d5381ae39e4944cc7ded03e98cca15b0fc672e8219e07736d37e8c49375baddb0134f09a0c1f109a089a9be41a70d70c3f6bdf3d6e90daab77ec3ea6513e81f93bb21279eec18f20d396f5398584038db58d958c514fc61e3a702d4358f5905a6638e07553c59d7361e78e2c9ba25069c53989464803bb76566dd0cc544699868d8d8301c0138e5a01472365c7ec3c64a0d1500b44cd984529594696ab137c0d47f2e4dc0514616135d28954d4bf0917e84f4850073ca1919901a2fcf00a71033b2181ae37bf1c538371d110c6088514606c409a52c26de508058228d50440490524ab9634ac95d15868eb3d9043ca796ed300036a3c013cb6266369b800d30650a12ae74897a14c22598f45933f5a949b20c587a26bde7ed373a04e3768a63e9d0137014563f9f59fec68d46c954c7f2c3827981a1cb29fb5f7a0517cdb7d4993430d6a0601a62918f1e87782818d45dbb183861dc8061e3f3b16b9a7cf4bea2534d134f340fa6876b9d6b31f1399f6d4d8fa58169b0456050a3ec103960dcd4408b429a98aa57f4a9bd498d8f0d18df358c6faf62e47cf77c9e34edcd551428f0f33c691ac6f72e1a5a44cb8a4979bb5aa3192b98a4409fdaa5d7bcfd7bc3ef43a802047ef408e30cee9251a221832ba9e0c05ea36cc02cff2ca9533b340578c494e5dcf3f3f97e4d2c6bdbe3090b183a7d1cad4e1d857b3650708c705800c0c8fa01781100187dd928bac1d7cd29439583337f0320003925a41e7dd2444e0058901a4fb949935fcf8c28598cbc2b1c475ae0279fec301b53d69f3f6bb3d817f0668a4a703c7d017750a0b09ca22800a3934800d87c3043b1c170e6c064f417e3835a1633b9fb040c4f52c6c81c5a0e2cc65016a47f723ba830f42c8b91723201c75833804b6fe8cd9e7f386c1001df8b300dd2e1ec9e49f31d673ecefca558dd209d9256b9f3606adab33c824eb566c0d0a9f4980199f909c4c2d721a730faf497c5480ef78f49139d5075a19237e862e708d8f46f49173862c032fe2de982885e42191a0b1cfa790117564c810b24441d60d2bf255cfc0086818b18c41b5c42432c03cebc20039cad9ec033a250c511d6c005254d8351fe2de1c2911e70a1087482edbf253e62c80067ff96f880410b78f46f898f16b8f0c9820bd8fab7c4a7c787c7078792c162acd97b558af2d055b218eaa329e06c2d86498dca2c9f9bf381e5e1163db831658187c6163288c18c26392964d0810c2c4cab2cdca09485ce8c55143520e9c858314105284c7e4af665450423238b2d86adb0435a2121727283b2a2810c301636a3151146342ddc8856344484aa00c25fd020abe246d3228b22b02b84b498020cee1535997dd14275596c315c8555157e30ec0411568fea2261b5a0ba90bca0f6585ac000069489d5a2052a9856d8d430dcc82cd4d017ab8511f185c7cb0e1e4d56d3be5ca1a62d86f88a9d28b318fb12ad14b0fda53b1eedf9e57734c7030b4f582c44615f62cac207450ad2d0d0d0b8e0473bd6a9f7a3ad77bb73d90796b7d0a74fef7d5001469f1ef7a0a81dbf446d3e37b55e1b4b9f30662d36cd7f4bb60086cfa6cf560048b8ef07fc54622079d13f551a72dedffed5e07ba7977ae9537e57589e7390e29fefd028ea3c16701f8ea680ad0f2c6f034b77b06302632d58568067f0f417f08d7f4bb6800414d8ff2dd9420be40bb08d2e7411704a15a0c0222898e08a042fe01947c41cacfd5bf2e4c8473560f96fc9131bf903c22735945adbca66b27244050cfde5a1f3c8a151d0b4c512dea1db4e3de8af558ae0f76f4915c4f8d1bf255838f1f2df922d90f02cd0f644e23e967cc2f97e38ddc55c7f0f26fafb94957ca9cc9fe3e0a5322ec5a74f8d8a47c82cc6c6181d6636c62e2c0a5f0cd5987ffe1ce6fd58406f06fd73f85273154f9db27a2ded252a703e9d8a9c6a3a9579fbc9e674e474d3288b24f4279ad7d277d4e5f4bda1341827a6ae913eb51fc139df292b7a8d5c23d7dbef914661de7e8778a849c4eb681eccfb9e2ff8f67c8b7ccf2298f8f6ab613bd6db6d726d97c92aa6ee4ebe373f3cb7e7bb3ddb2e4e9fdaaded2a71756e13ddb557eee6dc8ba4bb3ed174772ad25d4b79aa39d174d7279a134d4ca92ab5a6ac3a05d30094f29312060d9a46c96fa761c44992ef4be3c8774a9093263ed328927da65143c386c6cdb7572aef4da3f25c3d4ea3f289e644d3a8d545d22818c577133e632d659e45489d3959f03965f57d5f5eaa2d30fce991e6a1e7942ee611f82dc9c2e6618defed849381e1527961823eea02435f69f8847b6316b3f23a6eb262d3c2aa8513c64d89987bc109218417cb20845906278410c60d3a868ea15f8c455116734558dc301c79817177170513a16473ce199d84c5ad94c5dc1216a1cb802e03ce980167c01286220323cdc04aa692c96422a18c4c261136994c9a2994994c2608fd39f49909af24d69cf3bdf9e69bbee5eee70525fc2b651693c54c2f5981a316d45df5b9696274d798a6bbea76ba8ab5d049399d823fb0a1a1a119e2477592ce13241ed21547bea6e834f94a527dbdc2139f5906f099d4f3f53389c9fc91492b215b24a93182ca76a75179daa81ad55353a258f239458aaf507c66794d0d2f0135f6c7f5ea1a026aba2172a8e1f1e37ac629f8ea9a182f872b539aa059cce452746a8a4ecd62529ad082483b8dca5a10a989eb4a7402ae5727e590741a15f460debbd74d8847b3c1436938dacd111a925014b423483938a44bb1aeb1454e8a4e8a4eacb182a41c6b6a39504b420b4ad1815b4ace6ba9ae25a1c46b398d4a41029272483951d082ae9beb6672219eea709b9133772047cab15fb33531792dd56de88478701f4b26017dd76fd49c73ce28279c574c26ddf574d74e1203a69e67cfece9b96232b9822e313a55bd9d74d35e6793d9337b2694714631a3983c0f7d740f068304245b16a9b67fd8edfd90734a29a5843fecf6dea9edc3fed13768be5df55ada5fe89f8dc73efb2b5bc227a3ac21e93e5afb1b31d218384f9ec9037180df98e7dbe5a6ade0a6fddc2f70a9a651d1db4b463a65bddd46ce8379f9c634f3893e693f8d02a35333499fda9b9457e6cebc9948b689d35d6b2bad5df3e96ca2f1d26d4c55972ea5fd3c6fbe7ddec494ca0ed62d1704fc513915e9ef47f5991f720e01fb676da501c5540a1364e041174d9ee0010a7eb46b413135e3832cf460a1878826a8e1073fdab5554ccd24c10946e090c1e6c90eb6f0a35dfb89a9215958c1099a3384b1a4c98ff697c9fa9a8fd47eba6b8f9cb6eaae1dfbe08cb5d5f70d1a2a85fb58f2a3c2e62dbfaf6405a65d29850f448ce430efe67a48113120622e975e4ad2a9151b8f6fdeba36d4a5004f9657e10cf0947b6061882dde72da83e7b5dc00e7ae640556910e5f05087dc9f5e0e9cef2fed13ffb57ca2c86250c162096a0eeac49e92c598125dd4a56e0947f460012fab904be3d7a2ecde61158d3701e4ce92def1eccc82de771371f353e449b8f1c3ad5a3c9e9a57a44e19dac1c72d8b1c3061b5858563a9901892fb91e4c3a1bbab3aeeba5eb0e0738776f7536bc348afa75d1f02b5dfa88baf4e1523dbd0d33e98ff3e1d920d7a6a4c6f52f70be806ab8e517d01546a36862ea865b7e6b62ca865b7e6d62caddf2949d075323878d9db72eb7b1b9ec6c2e3736179d78b2dc5d543536979c78b25c6edddfb81a56b2024b7f573a7cc9e5217f71760db886dff01a7ec33dbbe0c4140b509fac120e7eddb100757763ebd1134f96d7d876e8c1134f968780b0e71e3c2e97bc2e6a49d125794b8bcf971896c60954a0c109545cf1f91eb9105e545a2aea82d3a8cc024437215be400b184f160a45bce12d4a8118c08f05fce428687c3caa683913e593e3b8bb91ccd8020823f870f9ecb75b9e548f25afaa5cf238d92e112cbbebe0a89949168d0a0e13efa5d19980cabaf8fb6fe3bafe3bfa27b59ccf0160bcb185e4a871a16181d189d975d1fad7a30a1175d9eaf285e74f1bc285f3d2fd2685ee44c5ee45a931789442291db073372915b0fe6bac80d808436c48b442ff298c5882eec6201ba2eb70f46e4975b0fa6e4570dbf7caa62ea865f3e79626ac5af8bc50c7ff98dcdc693f51adbca660d80440e1c192724de7219396f59397058825ecb0e2c40f164f936058c0ecb0eac2b0cafc572117701bd16cbe956ff8403a39380d583a14027168de7ad1b6198e208ae5abde53a64f17060d9c17369a20313161e64e12d961e14f160260b186fb9e53ab4e0a158bc789df560484100527fe43d785ecb46053cfd3a4cc0ea4260e7c1dc04aca6e71c303a4ffd6e3da2f05a8200d19f23478e1c6134eae254a83f9f1baea09852b97ec3df0fcb2fa01e3c0f86d27f31a572391509acb80daf400dbfc19de086d7701bdc0996a0c00dafe127b0e12bfe7e64fcf9028aa91b5c9115f4f8b1e235f0470db7c1d5c01f2b3d784c3d783c63cc02c4b2b9ca0e2bfe9e02fda3c6b58d9ec53113931a9b8d27ea2bdb8ba74bb1193fd2b8f94b03c9df92cd5fbf5410874ee2af97681e8c08453d978afcf5f772a9e62f065fea027aa76b0c2fe5829386ae44f3f6afc4e46834a218158944229197ae1e54bc5512dd9f77865f087be5be18a59c94d66aad65adb04b89982be75e0ccb32895f4b4886ec7591bcf477f35a24368fbc744dcb82c89f362fa6aaa8948b96a6518f3a86480600008002131500203018100845e30191a84952ec0114000e8fac4e64441709b324876114320619630c21841822320030539b340002b26cd4b38f866c31468ceb1388f02b3a9767f0862059a6168928425c3d965d4eee317a6c841e18135ce012660d4418a150bd08f8fe3af87f90088ec21e9d3589509bd353d1d8775f6e91e88edf41a30d0bc0eecb2d0d7453f9a02387d40cd8d0cd8572fad64ddb10af03949d87a042e33e3e1f5068483777c24443835690da93ef94a3455ad15282588443a3cae9dee2a3297e1a26d1ceaa16a994d2f0cbc640a9e21690ba92c0ae3cb4f84626ab69e1148011ac4959a825fd702b3a516cf578532aee1930d1d44b090aac39db460a4a21fb5aee745c989e33de80814edf7a4c7c4213b18c8c5d1746359269d553422ffcf737b82f5614db6310e9ef82a1f3cab4e01b703c51744833f6902cd299e333d1cba7057edc1f3169084670ced9bd8e99597a24c1980b1820ceb70f69baab1060e9af4aa1aaa40fa62b7e26ccd23f3bae6be4be08311814b712f251b161932d04f9270c1d6e08a40f8c80d0002fdb082487748d5ecba1183347c34bdd47e8583d45f28a2f357c5fba48b47385bf9b0057ed002b8ff63f32274ed26e377e250209835ad82b13c0c91cae138cdc24f6e980f3fd6e4ccc4e9dd54e5d929e633f0c3854ef29182df332c9b5a391d93531bf67e99f82401d88eb784c28b0e02a7f86e8f6e1206e9eb1cef4a3153720cf4504c63a22faa32d6ea48b169f33c0525eaaaa4a2f59c0b734effe59670764cadcb947e2695729fa6b6c10d33b9c19193cf74346cc960815fd517f9df9fbbcb88266fcf58893a6846a2d9017cd8687d3a837cf322530907536d5f10c03f861e8f4dab05b19cf0a4faa9e686ba5894b3049cd8d833ba6a972057879561a8481605d02bca4bd57567cdae9d99edf8340f1aacb621dbedf52e1daed713cf41480a5eea4f6e6ed674f56e5211ab60214f30db4769c1840783863455d19478bb4bc0bf0f0ce81371c5b08526b18c4725e4639b718d0b535a1a34141bdc3f541507915a588e05bbccd5a6342ede722442cfd5651b0dc6e0551f9b09d4893c716b4a70f3fe1320f20070918b78370a9c7ddffa236f59cbfaf7d2f6a252a136871bef1eb7773e2c4b46ca1528aa288bfcf0656a8942ece227a5060ef77140b5df03568b1bc485a36d081385113511cbd751418d4c54d925e2a5ae37d7822daa7e8f06f6625793f83f704fc26c7a5cd01fcd23c305d454777e6a3bf034cce1e7a7f0fddd2d2d4bbf976b2955b830cc3c073ed9bb9f550885c584ee39428e53eb2d306b342967bbb379e835d68752dfed4dee5dbfd7a1511b86133d7b0fbd3d513779f24c79f0c181bf5056aecee4e766fc7f1b06163e0b91df0835f4dcdfc9ebcbff2cb4954b105747cefc90f47202fad5b0f93313951c45d5d477e206e1e192d51c429ceb86753e4c24da14c19d548733246b4b5a32c46b502c1482708c32e489135619c9641b84eb5772c0aac8d70749ca4fe968a2807c965ca7d427006a137f37b26b9059d95a7a4473b4c7d15b0b96f2c4a28e0c27531b7dca9fc833e38269b0c7908c855a94a17bf7a39a39053f2aea6df00b1c9c7ef205c874b395ed419f3a09fe4088fdd7d7c67f3382a2b3440d69d92f83d419ca1bfb20ad0f22fa557fe2134d7ff7dac39e1ef1f871d1e691ee94348f0efbf499ab8441a6a818b0e5439e5b5b583a78d17ab13b171a1825747ff3f34965194ae4591f3187f5974a37dda992a0d9fe2908cc35bf51766e4989b49434a206cb13fa195a7d2ddc18fd9f73ec6ced2b6faff0f38785924c46adeabe6a4f7b084adfbde677fd09fbdb8518e3861f1e8494aebfe01d1d5905cbe67fe4bf6593368cbdf6450b74306eb137072dbae4c1f1ba61e6522e2a3af555e6a628c3e035bc41fa53296278892b5299c94e588e03275bd788d3c68a8d8a6a8d2215644fcfcde876c41ada44d332310b0e56e9f56b94204728e7057ff2325468f47bdf0b4e2095ce6551a6df86e2ce5035269f98962f6e160fbb2a4ed83d78880ba88de53019510f27998098f6d9c35d94ace6f63b964a3878db1463aca1d36be44a260e900067257b8a8bd9c89a83b41e4b2d2e011fa51cc2de006f3c56d516d73baf8186c735b916ceef66139fb8c038438e6cb280e3c3994ee7d16788b8d1773555d0f30561e46931feb178c1f6a5758d3ba2b6d71a56691f7ac7971e8acf3a277bca35d50335dfa1d8d17e90b3e8ef59e7a3c0422e91de9f6ced87279fffe73f742c7bde4abc49a6ac6b75daeae0ce10813024c119f62a3c03e396c7c96a925859097fb974c9f47f2fe9e28f1bc2dfed147395adcd1f3be7f177a1722def620abf41d6b9973b8da22eb8baef3f56dc717d3cd2a4c20b928adf5fff64df7161624deed2b21fd2a12aff7a1933e8fc0bb3d54d04345e5d5be2ee749affe8faff2d1925cc938cbb115cffb3be40765ac420f83a2692c42e18b9e2d9dc3c37e7b4b4acf22f17edf6efa7534bcec57158fd6d57ff8a2f7968e9a17fb4a47fab69621879ee4f54563d5499e1eedaf5793c0bc9a33cfffb25f8c9f47c94874986f7c995aaef8b15d1fca98676ff7e821b8b2310729eff0fb81cf3b06a5654615eaf49fb0f3511735d179afaa3ca4b3a38d37909a3031274e03a71990fbfeb2f7b565ca4640bd0348a25087bbb0a487f991d5a298d12a43ff2a73d4f5fe844f5f0d73c28e1e3216a32f732b165b461d97e3e6b67e4553087cac10baaa9cf1993fed101ef9552d909a6f0d259a115661c8c5e8d36493325d600cd5ebe49c985f136f58bf5b414e7720ab148dc880a3a10a753ff5f76cb061cf372b612fea4c8d533c1c096e60f8547daddd98983c6a0e15ae9363a13f1f0e02a9a462b5a35884fffde23896a6c7f2938c676da1a8ed3e3352e10aa3a26974a5c56ff9d3f6112d310a78e8b653484f26c85e4305b0d8206eac5c412a56f8854bad97e072fdf42b8cd06548abba136deb82e8198b56b7e3223d4fa14de8a6f4709c1b17796596e52fa6417074dfc213ba43e160c391614bcc208d49c3ac6a938ecdd642a3b44d7b60f5b8d0230cda7500c29b6e54ecc2c80ff9bd8ab5f99602d2634d7f7a6aca7b66ad6d75d49be81d15c2620cd0cc85b97a0898e3a126de10e23c6a27ae0daef36e22ac6b851eab749577e8a0342239cf6987ce741a3458ae40fdddf82e41577123bbeb6e66bf461d7ef04d2a745210e8b56cc18ad82499f5d0a8d799a7dfff4fe0414119e5ff2fce48a7d8beba606afe31aac3851501c915690b176227529f46c6043da3da0f9ca7cf5ca29b33357c3a1c66e0dcafb17e33f3cf0a070b1010b053bc0a9621e2b50346f0df589177a25e6164c5ce686f8e44eb0525aebd8ccdb3ccaab297b6c0f9572c3fe920b746c014599572e905bc2fa357c81caf5ef63281745896c5dbedea159654438119a17d3dbd3cb32b21aa6817aa90d823967d06f8e7bb86a240750f343a0fe534e11fc134d18cc2fc7fcd7601d24906d098a8875e4b61c80b54d967299a52a9915910841a6b858b741182a4a490b47ac0a8b41cc80b90d26cfa97d8e93b2d6edc5ab98b0468895740b65312f5137493f751b67e6258762e7967ec750c64dddd6b2bd55a2d7b44346e4e5df2199ca60756df42c1615e9d39405fddee400bcc4a3c820afd71d842614ac7e1c936b73475debb7d9c2b20f53750b2663da3bf439f726a515926d236112207d6667fda01aa14c871db246237356f00e020681daf1d0f7d44fbf76280b85c2a311d72f70a834c69b06658e6840cce1e0200f4cbb481bffa92b5de7d98250c6c5977e7b7c8ee70472995df35f8fa76398000a95ecaf50eec24ad6bc1779beb365e31801c925b812ab72de0bd948b758baa5a07f3286ef97cf27c93009d64d0b0b2360a66e9c2c863a67c803900f384715c0f59b8a2fe3d451348ae81eb60ff4e0d3ae98b304b8102528e9a33893e41940f42a08621ab96a823f88ab75e571f53845a0e7c5d87195288f02a5c4fa9d37d1d63d24ff95e5613eaa71d38462684dda1816935fea94c9913a0956c40e2de43b7b70c45f72aa451fdbb1c572fa66385a021e68d38ba00dfc4ed8e8154b09ebd1ecfdcac6a62826743ad19d3053ddfa432de40609f8ffdea15da372c6cb40e2aa62518460000af9c63e9ad3c5b130968eafcca05135d8a77cb66752dc2e0dd1f7ff03cfe54d5a7214643e67e14230338cfe5fa589a67ef0668fc1849d30a0f9d3ef828f1c0896dfd0577b70daea0e3cbbcaf3b5fdf58501dbd8a680ef4a077ebc10ebcb3538ecbdd08c20eabaa097777ee6703f566715c5e9a7bdeeb6b6629275d818fc4edbbd00de47028ed57f712d971da4c2c16f09a3f28b88ec4dfd276a861150b7461c68e6442e464e8cf17d20fe1f9510b3c338782c326e90cae0558d0a729a87c85880c01e5aa125a63c9b500c7d4675bdbf9f2077b6b03f7012ddc2c4a7e84ee0cb1785bc04c731cc72873176117b3b1bcbba3cfb73f9108cac7c2fb0a00eda4d018f6e2a6aa61b57f37baafdebdf91e43bc02567eb5ed6980f870af40935e80bd4da057406d659f0e98db9b99757ae55d761b1a9c0b8ecf3f7c6db196b9c996800e61021256f49e4b6b762470c62bb38f3ab4652bc2651a78a75d8ee4b25a63bb5fb80940e2f742fcf8067d41668037d109f038f2fe3d0d61ad0e31dd22330998e2acfa12202095a8d2901f221419908cd505ca8ae2978d212492e6d6539609217f0b7552573fb13e2da688ce87e0990c1ddb225d9b98d2079c804d5102c5649c5313af355c27ecdb0fef66d82d37d11aacc3ef0ffa3ffc87cd263611f89babe2251805727874e9a73b7770c1401805dba93ece6300e80110a1ce1c5873392af759902f99d0b949176a2816126e8a96e45854457e8faba9f8edb74e04efe0bad89611622093dc31d4210625972a1866a5f752d55543a4abdb2b8178663c6ca8b85117b6bf02df1c4081a2b7092f1b13fd4ba113a8341916e4e560fb9019a305f3b81dba260a5156116ec996b2d02749cf175a820bf9ce3466ba3390ee5751f751a13db458706a4180ea3c8b337cc380b81535b2658dbdef1b7d08ae0e425c8e4a3c6d908464440d1cab44dc4dddc54b662acf095551dda80e652f19a5f4ea07e1579a25895690b8bc002dc6e09197b047b7a54493471bbc84a297b145f255a1dd1bd738d2cd31206fdf7a3933394b993a5be98955b2aee9e5581c337520a7c9ea073109159b46bf44e5361143e34933edc667d05e529e2d0e5f593cd9048804168bd7ba68fe92cce1a5354588e16353b695f909bb48de6decc84c3862c4946f2c6fcdcb5c9c675cf7ba6b45eeca98572d339a4c84561f701ea0e2a07f6c36226cd39c66a47093681cd2b7051177f6a45004c7e277e5c87b960ccb13cfe78f365a718235e2384cb9937dc48567a32cdfcde963aae4d272098a43cddaebf4906ca5b908388a22aeadd722786b832c4f29a0a302e214caa50b621deb374bc37c3da370c0c49169e8591d00e14a031ce24b9391b5c981bfacdaf59a0e71a5c35e73434087b450ec3187d83945f10f03f2283df06bc1bf82060603d6bc84c740a9589ff329e91af8557601562954eb951c27d8ccada7fb7b0b7485754e339cbecc4e83b69f7fe82fc8b8ebff8adc485d2dd363c88a22a68612ecbf9cf25d5f6b1286ca3da8e89cc6cad14175e313709b8c3db9a9b1153db2e818473758911a8f9a0ecc3708a12d650751dc54492728fcaa5d791982e76d4d05cd3d96cb91830372d0490c8463724f0bb87f009251d84615d18be31dde18721c36c3c96dbfedf923df5e5a842cb84c5666e12df369e30181c183fddfb7b0815844bdacc322326dd7b3f1d8710f6d26c457a99585ad1cc3a4625106773273dbad8b7a56ffa1c80a1130420a1c1cb72e9753371c200ad8af95b97394d30e4c54f503d67ef6f5dc823ae7b87bb0360db59cfcbf0684dc9b4f48685e446f8f5b33cbcd0efb3085c8f753114d3c7640ce807b8e4ea3ecc10f266d9cd4725d871aaa0bd37c5defbe62e6099bf9043cb1617982b4724c39db5a312f3f64326deab805c55611f27e2fffa5f73235d62ce2c6d1200d642bec61babe989e2913cea32c78b0ab3d19c19d5d8eac339f435e3bcb1951de82dbaae0fe476cb5fd2370fbe8db632edc51b87b9c6e69d5294dad35b465d174e11c7c4db6f8c12adb59e5bf21628aa9c4588c2e78c88c574c2bd751eb75ebbfaaadfcd9d146433d12c56475802cce5cc49e8d465a380d0824a26d301110a2514e43c9b5ac60a6228e5be5ebadc2b79e36b0d57046061f3187d4e0d11b190c2c3c0ca66204345a954f597a845ac86cffce08b14fbcd0ea9de6b9748de85fff5c4ea41d8bdd5fd7dd6b2506e8a803aa264326d4f09aea24aa9175b03e67856329c91a1b0975a2899bd8aa7dc9ccba198d9e52d3b58374378df9e60328b4ba416f6320bb2e9559caa44e891270c473de083f3139c4e81c79c2b68c93cea70bd60d8f542d92ba1ed20f3691bb017a04649f49c33dfbe4537020671ef9488de4f724d9b3b5fd650aeac53138986c83c3893bb0330408e9e91e60d677d462205ce74f297b140517f94267745a8fbbdee2844e335c103913f15e14cdf88f440b676465ac645bb3028b26fb0dffe67419fd2f71168f40bb528350612ff4ce139f22808d8c98f6f0565928ea0d0abb8c1b0a17791b7d63ce4aabde230f982e2b0509b33b9297f69ac2678923e64647f867f432308a8dcf85fe5a6b765549867a4be46b3ab3402c8cb415db09f52beeb100a54568caafd88bac25335e06a16752d7282d471b8f348fb97b066e70bf709bbcdfcae6ba0c0ca38aedf380d441ca088f2316779642031a93c01a3e8c161782f2cdf6b1de4f99c18f3b11cd7c7fca630021d9990f0f9772a2673a8cada86787a82ccb45fb0169845ab2520e2504b503d4065715f4236e7a6c6b450c0645279698770f4fdcbddf11c593487705dd45bd8f45def9c51461681d052e3a51e21308e27beed0ac6da04283d0290f0dfa0c6d3badde4e08c09f69fc0fbd754515e2a499f8e148a4be9255eb955343d9fb5327ba03225f83b506b4af3908f1631ea51a6747ae2e44c2d7fbafe0195ce91983e186b706920d61f022e904b9c9d1b2ae76c7ef7becb37dcca113f118f21087d7f4eb42415e77cde4805775dcb7c800cfbdf2e6c967de0388b566d0e62c73d81c958f94b131c938bfc51407ae613349bb668eb67f6903844ed63775fca4fb6028bc528987427fd2257d5a4a93c63c79bea12797c24e2fb5af40eac20958b96aa7ac458e112622934763523a7f648b414f6162a117269775c2283ded3422f2b98c2e91974df183b49d6e313160d6bd3e17a87b07cc67b166bb00962bbdd4940cb996e8e33b5ac994a06b44e8bb51df8b3db073c59dd1f6ff06b9ba6e57bf53e39a0e262dd4eeced21f40e329ebc3c7c9128226730a531766e90b9bfd0e1396ef9560295ec4cc235c8d90920d754151f5edd49be0d3f5f9b1b8e508decf244a7ab3d2eb4b0bb6973827aac5aa72b9f572d3a354daff7f0be9774328e1021491ba1f9a176c9c749b61da149ae977cc34337e1398708e18890b17506b052eaf647db0668bea87ecb02e55ff1a0dc4e1331eabfd05947cc6d71910b4edb6392bc25c6d02bfef2e1d5083764e1580dfbb64de9fa275f77a6bb6e2d19f5119545a00a8032d185bfc063d92340c2bbd39a9946d7b3628ec87513f90cd15045e9747d92944e40b33b5f527f6cc76de9c213c3137bcad3d63e1b286aafaaa6dcb0504044c5a2bb88da1872594be4b7b62294fe4e24c856d1388e673b17424614312abd2cbe55c96c7a951f58d731e4b1ae44bcf41e99fc41f552643a5fe02ab34a1106823c96f79d0dcfa355fdb5beeedeca17cecbb6b2f8f4f439dbd18d28fc8f6740feed00e673c03cae378874b27ef77b8946a138014a4862877b80ab5c7b7fd92a37764fae941f5f4ca9847314f5f6ccecb149b193b93ad84ee0a824037bb26f0c048f413e3417aa6858c22883396c2b4de3c916baaa36eae84b9ec973eadca04c7a1b1945491c50cfca0a69deda342288b1836a7a55bb1c565a6bc05b669e9aaea260afaa86b2817106fd5878eb80abca375bef2b0d97534c411fa863a07551c7a3d0201303a430259677e19463b7679871df1170d92902a2e133cb45e729f928c739474015ac302cd2db941612478a3b645ae8d61745d4ac97e52e54acd9fe1d6c692c6583397672d68d9d8c3ad25f9695d7543d170de102bc1fb0b0fb64f9eb9102fa39508d09c4edcfa47983bbd96398c8a31c6a8ad14ef9b7bc8200d23929d90fee401e40f22b1f1d2a09d08f0cfd8db28d50ef86f7cac4c93ecc09ca73cdee25bc38e8116ab5da6916d4a582671c9db64982ddd55381834713c0b062a17b3e936f7061399192db302a9f86d6bdcd27947ebcc7a613da74889d81119c3c3d93452905fb4ae310b59c3eacd83a9c9d558be83873aba64355422120595524c44580519be98452707c999ded260a49ee5f28c73c1ed4ca41cd6ce6d4b411807163a39874cb80d361c59056f64a40ec7ba74ce603775463a101dfcdec4457ee06dec62abd53676f41fc8f46b8740164079c6aff19b2f325bf90122e7051c292fba2737c5565000eb5ecbc78abf3d50aa45384f52120e8da920f71fbea1eeb8f8857595a100624ef2218415dcef8173c9ed3b9360607ef18e6627ef6d1e211590b627e8dbe1040050464d17c032eb563583b333c0b3f04aadc7196c878030401a781a81a0b529ca5788453c311b128dc4bddf8f625ce47322305fae20a8fd01511c67cad82ce84d6ad9d0f5f02e0bacf01389ebadac3929825ffe9f9083998e0a8d1cd5250040febcf1c0b8f0b68b7d929cb20ea69e1eb4d712fc18f8ac0c122ef902e58d122e67d22f40cbe07ae7d1de3f7ec1149a91e32bef78a50eb4150fef6c165282974f496a96e20c6d99591caee0f6913fc741069f2b12c31c293b7ec140a8c31c1c65a83c40830477c9cf47a516c6f640934dae2a8fe2fbd1a4d040a97192092892795a01c71fbc185ccf6634403f986621e35d8d0004ff91faa11b2098a25b8216607c35ac8c0f5ac9a2bbc8272287b807bdb3fb0a1b7bb1583746262f701f69a28cc9a172694ab4cb3abd071e421dcdd29816ef3261895347ba074f8ad413eb4acdf9575041f3a41de6304057527125a524eaa29034d59883af2612df663d055e9848fca1458b6f5aecb08d968a09955eaa2933b027ff4c714a18365011f0eb247bccec3f05623c28450b8de042389b5ce9e2f02397727acfe27f57060f15b97a81d760a0eb57a616b7e30b9f3b85a961fbd60916c3f5a17704559e6116150848fa3c8c4ebcf4b725fd628ee93f7bdf9a5181a1037facaa84560e23bda82f8443601551775ca10136df1fe5026d6d5ac97006c326e6646ec04e2e757ec44146cccd759e16f7d87cf80cb1d17379d9dd501093d8f57066d5671d94de1f1af2cbed974ec03e69c932f2e7c9c970331d1de9b60c562fc1ab3008c7b05db215364a578b571c87ed4527311b44459d54ae666a362ea558d0354d5164b308c9c1830a3af1977cefb5ec2b2095cfb3da5baeca876c976b91ddaad8f374e4968fc22178cac2441f2627c3a7d465af8202cef213605eefc7944e54d7ddc410bb9a0093f57f90dad26440f6f272629c253bb3c80cb62c2205b9d2d234895a2d5bb80cf733894161f78bc18329b50193d46c7b5e43f0aca173de9551fc277c9855d9c97455f19c21793ab36a331a4da68ef9f99c41acbd5c35d58b2f66d44081e2e42c94c3533dfa67920b7abda941e66ad458fc7471f5143f9a2c640d03f97516423709c8e429ee1835120c232609513478da41cbd146dd9be73c3bc569142d0b4be9146cbc338aca1000f7e6d29ab5a962195a4b01058009045e668237f17af1295a901be342b2cece4a60f1390ce81a2df5980e1ca4633c6421a2dbafcbcb4096a6cc710168f29d44e03ccde15c0a56f8ecef0dc0dbdb60f10b13d56f5547d6b2f12a77d1c9dc641c731e0c83bf59ef1f3273e3d45abf2a6a2e24407283d6c72d88c251f32ef02002cfae8015942edb328b21332e64898311a87ffc419b24d95c629e8db54ddb27a93bec04cc92217157222f063b1f37c02dd1ac21823c94ab7b12f529494f8178c8e1919cb582d162e4afc98741b7f48a0a516e795105a4116e2bd9e8af539ab482405daa836b0660b13208ef2f56f74704154897eb843cdc31ef95798c9c273fc861b7fef34b68db81198cd378ceada283bcea46d379b6b261a45688977a91021c8d230553a32bbf5b2eb3dc6e2e25c86cb9483d7798225898d9d9cc3f1ece4588c0a2b04dedb51e8f24c7b57fb78d10f6d37e04e09f06bd431740265f734777120ad849dcd004b4d74f21a40acd51187d00d75cf277ce013b589cd860cd6b8074abb3c1a40495f868c85b096886f76284345b0407fe0309bbd8484b3c14ce315d2e113de39c1de5c7e73096e57377606229db41e7acf3b0221e65282175396539de524b79b8f0b889c54336a75cff4c74b2ae02ae0dcb20f5c5d8217eac2302d20c0af0cac38f43632c20e89360b936491344853a55b1fc8e5d8c30c44b0138c1a3a10a2f89032e1100bc279e48e8d0076093c5428f58a0e666cd4c9f44ec76f4e12df5c8f32b1f0a77105f7dc7d7a777a78e9ac4ec41af2bb73d825ba7fbd4612cec33e6a8e86a39e8742f58f750db15f48c619cc219325bd308b8bda495feb555dba59800dd73c5c8a944f9c0660ac5cecb308efff9d455677c33074d8a08a73fd3df14edf35470c574d097b1daaf189f679c92b63e600006d0b09ecb51d7e0807a9d940678aa2ed13a3671534e3d8b426dbd0f02c6171f45bc06f32c544831ca7023b7107946cd7be3e654abcfd9813afd8659f214c7584f49759497e11c523dd8e0690838a29c70d6581703ad43a55a9d3da66605aed8e1556b0ad9c2725508e1afce904a4e48235486790a0144096b441778455a0340b2bebed79673d1697d77fff62687a07fdf473393f5943f0fed0b54dca2a6ec9325b337309e9204762a7eca47d99dfc4d4ac5ba2d37126106dc8f35c44bb3fa8231db676c258a999e46d8de4038a24f7479fde1a66180d2b2a65685ebc62dc589726b184aacb8e7294a91918aa4eec2c719768fc4d89eba1d030a89953ed998f20b487258e3e5144b0b4c19739485d288effbf150f6654472ac3d652e0b85233664c13ee164ec8b2e57a0a8358df832d9f7c99c7c1987ca8ca0e455cfaba15fbde9573d5914548985e285494f109af9ebf0f41c213c2f5e53d37ed8b598448ad3dafe20f705870e9f0ad7c13b2c8a00b0adb65766d2b5859cf055e13b2318ddba41243e936a4a9771d4e38c4f5b6f74966904166203d4cfe88acb7be5198b738b32fa1efaa1eca65ced85468fda65f2c8560a4b9aaa4a9a467c40248e4bdb2dd2dc53e768b4757a19197b77875205ec9c7e18c01a54242588847b630b53573e89f6f907d678c5ebcd9c54d093fdc2f498c6f8ac74666afa05e28574650f674a9600250b7a7af5ed523e82622a041fe1d1fd99c700e07eed6f13a7bace73f3eb4d0d531fdd7c13c364e8b8547526d410bcccb94c10d5f1aaaaee5b8c2c6cf8023cc9a09f4fbdd83de90e3938000a3259324806bf01440e6e04b018615a694fc9dd5002ef0c2ff9d5bfea8d8110085ddf72ad8215e862d5e4449265227bf0a5bf20315a5ba89b0fa4009c0f5adb69c7a21e4e7a65519316caab0ab1f26646de5428d500a2b15407847d5c4c07a2a6719c52a1c12ecf72e561777da532e39e22f22c16fe0c641ab53a55fc11d4f6ac3ae2d7477cf0d2d3210d4f9134777ff4810130c147f561871060c0316c456c0a03f6c47b2af87a64a9f20f0ce84a48ad91ed97f5ceca026f52b277eef502b1711f1e22254ddd2bf76bea1b9aa2e1415b8f49231ee57cbb2e8f512b1e9b45f19323ebbf143b8f219c164054b1911cfeefe482d24c95777bfa0984308e3a694d743c38de5099dc4568cd283c78dc5632d945d1cca82878bcd533990b92db504a9338c892e9c504eab16931fd3eb73eff1e6981733ac1e4b97d8af88ffd23112c3a29cdf42a7ec0f9cefcac001181c2900b799530c26a8893797108ed23e0c99387f5b264492cec41ce1517df01b982aafee2b1532127f513203bfb4e295e287bad137df63ced17d140cb640b87879dc2d4684e1f481c3b02ab5146c5d09fc61c03e0ba49716006b513b036513fe388785e4e8544cd3a8c1510df6b10e35343a8e689691587f5e456dd12c27415029fcc499b2eebcbe20e44c23587aeee89d3ef505046e2d9435822ea9770593c2b87398acd5069db34e12d468601d3a97d169e6d13f749ac830204ed13c53e1158898401303ed1a50f24fac012a3bab46d9f8faebde431b99345c740309fcde6830a86d97d7c0a939e21552a3e7db5cf56497a56a8f7f210dd91b38a29382cd2cdd4b8eb4084508e49e5a9d8bd7cca2cc83851fbc7db692fd8b1131348d57e03102bcca0cf619493f1b5f2c62a9019e768c69c00294366f0b70883914a33773d61b2bf98b77c653a577d034c064714da896a4048b0eb0f0eebcfca4c3cdae5d2f2708834267a5153bc6ddcc202402b0c3cdd3c2b717bf31c85ec5110091887d7d2d48aa3a7ce5a1e9868371b7bde74be281e2480443fd5ebcc8772065631a09e6b5e824dcb166931a5aa7d0b216fcb5af3884b91cd1ceee639460f8dc00d2525716c25aee874b0794aa06bfe4961c9ecac08dfe3231e28e7bfb4f9f166be8f36a756ec0ba1a4297d1f55957f6489e233cb3b56fa5e61010c56dc9c8ad42c78114a10448b1b21e95c389fd8dc4d03e42e62869548d4a310b80d2122ee80a33ca02e7f5b02637530cdae0f4a5b073dde75a06e3068c820e3c9303b8266f579bb9edfadc9f40dceb4272019d1b8a42d2e5aba5c3037bac6dfe0251b6e24e71f5b68b310981d3a937f9246f5723a50eb5075e82408b7db3bebf52147391002b968df43ea3a9bf960c1c2f5373a3869017c343b773d6081c2c6191103ccc3dcb3d90c36f0b25fc64a874ec47ab63f89f1cad3230a584d00abf4bf0cea2f8b26425d2bce46bcb9e8683dc5e98ba7c8542464160910fcf7d6f075f31b18fdb91838ba89e186f1915358bafcc7d92657df3a48f8c2ab1626407a38f17960cfb0129510a99b0e9f89acbd18f13cffcd9b6261c3bd335e23081dd341f5a14cacac92e8a578554da687dea95877cbe114ca053912d5ead0c81cd17313ead2f3523ae12965e6580ec5ead33d7c3fb3f8a7cc45e92cb2a2304d8985042db70defc658d04d78253ad04a1b892fccfddcf128aa7cdee8f67f53e5a024083d16c677a646daba8feb8c94ae06510eb926bc8404ab7da95a7012392bb91c873203c677e94b844576685f2619e7aaae868f82163199d6af2558e08f2320a85c319f8e447433cbe9e14e0025581a514cc3680f60afd00e866a031d5b36bce621abaceb2d4756ebe79b14dce3a4907478d49f155f2785c24bb4644b2c3fdb484a646e7d0a8563bbbcdd80e4b66eaf2cd675b7164ff857bbb128f9aaa8f6bcd04ad3382606eb68e48b399aa068317aeb070687efb63e0c9f22d7f28dd75a0e79a23b855d958e97718c593594fba5246616e38c223700517530b7ce44a62f7230c4e9201842a159508ae745416e7475e512143b1bdf0a20b01cd5d75c94f550d12fa4d31d2d6326bd57c108650565d020ccc48f69f38e9ca4cbb99d2c5e20f757a23cf28b14d2336ce03ff96d6cd9c4092f102eecc3659a8b54f553822338443ffc00ccf8ec4300c116d7338e62fa39504f93481aa23dd0b7b86f6c7fcc7b7e86157d826844c0e52a0b631c7ccc08652526789f4f61bae082fa9c13ed2d4fa4c08cb274fd3227a2e0771d4d9679fcfcd0d5eafb713ca1e507410294ca9852cf7121ae61397e9273ac2bd04f128f4b8c876acf11c3d483c6ef2dfaff5f92b4e74b806c505a8fa72b2072150cdf959c668c6191256b4172a80d66494c25d88a6dd43d25c282f789736d3547beb2f1b921a8b18c8c50caf067878719d605e3697cfdc5cc0f24309754d50eda8e0d67d46f72ab7ac9db58f2079aac87683e287963011d94dbbb677bfa81985234846270e6ed2220db26d5df6a02349a2073a5ba174d1385cd9dcf83b24331dac18cf6a80a1b7a75b0c11beaaa13288b58efb89d3fbe5689e589b8b4ba50541c99b5402ae1175aef726d02d9d782aaae130c80d4bac576d8b4df743da06f64e00ce0e56b89f6c56f1a2222e2eb71e5165a8b8a8ed3befab19df741c82c455c13ef07746c8fed8b8e92d11e157bfb1a3013dbf2d96eefb25b9c6af11ec0e13990d1439207cf65342b629461050fe0d72bb242198ed04c6fdda624088a44c3a3a1733c5c5c4602b3070979575f9adee17c81c881cf875deee95f90b0f583b525882ec7ada25d04640d8af0d1d110dae8f10c5e63f56e3f487c07be27e188e6cb0a7e0f472f538424e12bdb724e013cf370184584f0c514489727aedc895db231b8e1d431964f73112d205a6403331a2ac7809926f8294d34871ee1cd421db85b7ac046fc5a7fd5c2635136ec6914801d56893e448e151bd34ee2a0cc31ea0e429c92d0eb593de05a74a14051046fe6f4a428854d9dc5b19d2addc25accf1cfacff75502fed864e57741b628cbedf51f0d04b437f8e166049f445d16be502fc8b1443cfc87cbf16ad8f057d7d7948e31d2e95a920176a48d17a561e639197bb0f373c8d0f2667581c0ef14df93cc4037eee1ede2df10be342084a09114af0a01a7478704350ffef2df8752c1c2b5f9897c622bfc7fe63fc75d979ad2245def4e83a0397d8c2b863998e83bfab3e311b76fada411766b0581439a3ed3dc15f448179aa24ab0d09298f976d003bc21224c241f3c0b4f5186570429849a180fd60efe758b6ca1d20c00ca37f8930b86ce272e42e8914f6e81cc46aab823b84cb826d3f9355f11707307b50a837862b733fb8e5723161fab1735747a65c0ca54dff029869852091295b9719222403f717f945812bef7a74322d8333f08ded7a783e0bc8727e13469ffde026f7d393f1d3cb7595df67263bb92177dbf279f3c24c50b40cc7ffc57712150377ec7fb47ca2468a3d38d1e38b780d4ca007edda023e5a434b98aba9df8e1896b9334d625e1a6504b7b4336a54fcf4986b8a2a089e9ac6207e011c33631f6653a8739a944f6813842b65f1baf1505626f070dcfb9b8f20dc93697df5b74ca4d16951506ff4c10402972bf89a60939a010de7f5ebdc736dcf22b461b5648e9ea2b72f1b9bbef0ab120568d6c6dfd96d48e9bf1339e35817613f993ed19771a86a926103c446c2dcc23a86e0f00ba7d3edcb1fec8dbbf93fbc70a0f5c5df51a43e009578899256c7e818f680331e5bfd783d3de5dd10fd27f979927cb69bf45bc93387d73b36a78a1a341a31c4fdfaf700a16eb9028a53de39c68437dc2c7af843c32e908b9d04e028ba3fe5fd7fcecf780ddc7f4e9cc6acdf129a76490f599832edd9845e515617ea422a826d9eeda290c73719f7d4f493571a0520a291d55040ac2b81a351b1619f1ea29c8fd94b14e8df18f407281b249067e195f2143f1d8dba34174a030f726860bee87aaa5da2b9843b2c13a89b25d6f9305c3a87660a9539363b8b0450a8970a4195104e1f50ae249fb04a494757fee7a66c5af6ee9d49d3b6933456ce50f41f16bc8e943c2be792ed901b852a037ad896a0bb645aa1904f63234e4b6f33f27361fe94a878869efe82079270c0dc7249c20104c768b88a10a66d502a38b57f07ede62e0cf09fbd80a6e3c7d7cb82ae5ddd77a6c2780e7ad976d09e6a6cd2615115396b9254a12eae733cc0c8c980ec215cb33f83f61b30f0286fa2bd047a13dee41c4d6eb00d15c0332071b2e147d831fc07b87f9ea8ca3a980422017505afd19580f78b1042fd745710f44a2f97af538d84f6452bebafe026bd3b81456ba2b8ff0b12dd171483a1901986058e2c55a1cfc1a7fcd443ddea8b0d4f45797c783745036f859cfa526d8018f5ab39e56043774f2839ee739ae5b97624d250fcd5a4a52f6c609586dc0717a3e53fa6d7727f47e6939e9a988055b8dc8707876a185906087d0aedb7110f127407242b536e78242b4b2d6e11ded91329a6e62aad8c9a85cb0e14c523395d93566510f6bb6cb00fb55b61765632e4b4de5e4d461e00a562555b7c9ed1ad8e552bc850ef2ac995cd821f9431281d409ec96a587ad219b53330b14bb0dafd550b42178706ca7d8e29bb8b92d1bfa784d08394feb2a2848d03ce89dc4d5124f17bc3f927b19a6271c550dbc3bc07ec2119a51712bd39ba34c64a1d0c0f880a258498272c00b601a90f8d5828611e04e41e15660a1f45354fd0f64e8429459dab62b6d8629b18dac05f3427a49bc991151ed98fb426c9c694d726ea80d31692097654e6d40f198ebd2299895206b4977d47fb05bd2319ef821e07d34de92a6757ee03d38e5363199f2353846141b0f47ca302119a08110aa22d1c605444600813b9401b55e9361d3d485ce1eccdc80220f3419d2fa341108e04d9a97b7a92c83071f69087c4b09a392f4abf5202696db4cd36832049608225fea2b10c0247465f523864dbd65de87919b0c875b95f56212f3eceb9e1469071b297181e507230dae5626e473da32b4e8c6d7090d8fddd73779df045d00e69b0ab8070530c7b423c5587df1c447931fac1eb5dcccde9e059d27855615b7f74e671bb55de6de8e0cd0435fb81dfa1c7a95ea5e9b0969eec55ab782f9081df74449057425a9d9a6fd21fc33fe84af5dfe90dcc53d32c34a6429bd7c3925848bd58c5e8f9f80a36a06074cf800151304f7bc3fce03a3d554ebbac1f3388f47a62b2e716c341bb0b328c0acd486a52b4054378e745f1e22ee4ccaea5f2cfa8798df9d2de1eb4deea263aabbe9687b288807e437f233368e8e2caa6f784baef05e9e8bc866511407a5e0b7f3fbac4548a87f30b9f0eba21f5d52950ee6627d203aa24d954fa6a475ad95b3cb6625ceeab4100d3aedfb4a41e47f99cc61d3ca2cab2f3f7c4d052796dc60416b561e8f612d6fdd142d108f6d5c46b5bb426aaac28ab19002a62f000da96fff30220266d9e47afeca7615ef6a237e1ed3a3cad9211f99305950cf595d66be14bf4532c7f41e8e1eb9883b5e3292f48c7674dd365cf75c37a88dc998080a9b6917bff79dc77ddfb9cf56663da8775b263249ac5f53bf63a92d888033f3cb759bfb19651acb6f71ff9080f804b1bf245049993b11ee6c04634b5af4daa3d523f0f692a9139e7061e085c0758d0778c68e95a03eed919108f1c62f9ef7bc4b177faed6e20d422c74c3ba38eeaa01bfc27e9d17a39e9d91f61d73c3010e01dfa66b1caf2564b8368fcb629d16d8a0a80a6c408cb97a28525fc07b9f9b963792d21aef65aefeae13f791b68aa0e0a575d1243f6941b066dc2b27a955c408a921b5cb056eaa5b73007d7b274c4f56d3e5edeac7d954b8515bbb39b5dd2e0f34f382e88eaeef9553f0b67bf173735964a789a2c125edb8aee18e08fabc1cb28d538e73671b83533df3901345a1b04a7d5056ee7dd034323a3a78ebdf1de4794cd1ac836eb34244b10a5be70938e4001c492923dead9e9a8b903cd1a0f03f12ce4e6f82779850d977266f46cbc4e6162ee0662ea3bf5ffbd33cdac1f80c4c3274a9ec7b5702c3ea157c14ebbb2641d59055645a14e6a034c73d734b626f206023ad947d2e4f5aa5f290834adf2a233bab333c00f54c903fa44066b8f7ecc0025956cd3fc8d895af154073d408029fdb38613716893592daa7396cbfcb03e8a6331e3158e3ae5992dbdcf31be38ed14c05a5300f5e0be2c46fb81423912981382c8a814f78adce52f0315f5147e71abbd90753a28605f5fdce923ee5e76a9bdc3ddffa88d2f1b77f7848820568db38938f88b6f5561fd025174268e12babaef24843949b87303df5f7902fd14a31ba832f787b89046efb1e5fa57aa89337fdba25fd14df4bc8c06f41b3938b165beb5da7360efc2ae5cbd854490e29dcaf4a59b56085c1a04b44995a5d0581a82d564ff0a6fab178de63fa4ed346276166b28315f4404b5b13177c9d8707f2ab63cd3cbf57920a3a158f5062e0685eeefb1fff2b34774e8bb883ce572fc5bc167387c2e57584d8f495aa327092043bc86a185ee61b637ae8f5d246a04352fff3ea13c940c448e477a43c348400be94c9f8a37052766a201ccb7b56d0ac4d974b859e9370827b7723ee5bbddca3798272aea097088dd3c3811c9d33a268093f9b8ae837744a1ab2f49185fd404f876dfafdd5e8a3ee944e8d817f45e092c34f6b02016e72382c5a01c4cd55b0a4feb231008fbc052cd2aa815b5ae7bf0df65254b3b6f73ac50c1a04f5b39094f39f34e2100968fa706ea19ecca1cc1a3a6fe569ba026a1d4724cc80ba8090104bc56aced8e1aface8882dfd038a0f5564b5845bb5a59872958b4f99eb1d2cec99c14b131cfd52d6853081dff1a1de5544b7b109fcd6476fdce427b09cdcd5f94854674992975fe5eed9a578414a2ff266988b6a4a7dabb9fbedde40f0cbcf2fcfd38650982e5cfb7e12a668e92b14fbfa15bda22b16997052ebf45f875654543472b1415c2b51d916dbdb4378c8bf9d879cbbc39a486c22ffb9dd3395a9bea19fc274d889aa686bf59ac7d25f396fc243e93b58aa07ca192b997322308f74afc6d9b47b6b6bdf6374733aa56ad40446e1222b7eac2ed52275b95fe0cfce7f2857595d8ec0f74a06e100d124524565e8d33b678805eb29d07753fd0187d8d23b80adca7ce54e1b026636b409650097b1f0f8c21e94582804556acbad944383efefadece8505b8e0a916fb960e4159182f3fb0e07a0f8e4221e7db9e17e046181d7486ffc605b6c89fdd6c838d15f8a58c2f2c9de12b5c815454e13b2b44df76691dcc01a1b904b1e6853c6ac769843e431c32d208a5536f7c1e1008050411102be4bbffbe645c081ebe8c3fd30375185cfb63870e6a116c82380e88cad08e25c783653717ecbb3a44e7413eda4172d73515e78891dbfdc1e605b680bdc0cf24c606a978e114e3a031747e6b1f3e4e5b951c114e05a61601db04dd229ad5b9a9710ff6100b19274373d4a2b8e3583043d2c1915c58f7a7a1cf098102093cf2c5e0790951455f90ff5092308584f754a72e1de098eba83835f27f37f5175bba3f0a87c95195519193c3d28b0d7ea0658b001d7508caf06b835beb32ef61e487e18c5434c8774875a74b41fab04c40ee49366a48302f8005c475e6777f712987afc016c1ba5e0b8cde24acd2582ffc5e5ebaf42d81f8fb5688cf008450496cd04a88118007aeff5006e99c604a78cc6a9581389e0b1b462603c8684cca44988a04678bc947e03480b8fb1741e3503a75793256bc02e8a4741ca4757130f837da4adebd41dc6efd33057a830ccb8675afd529214939d4527bdda10f96ae731cfff79051bd94dccd170c0c024bd4572da8689db741342d1bea1f239f020052388efdcd8bffbd78b299325d522ba9c7836a3a5bbb1068fbe207653b28d9675d94c20966eafd47a133a6f9b02af5d6d69f891122ed2bd9ee764d6423900260da2fc77649733dc0f4405cb504511bd868e29a2bb1c1dfa652f31e05bf714fa063db4769ae428d8c5e10c51d18e209edf4e67c7252b3748f5bae0388886d7923f3c856bf560ed8d6c8409d07b958333787a3adabf8659321d67796c67bf80c86f5cd97f0c7c85e568b32260c31feff6148ec86ee57da30eb55ee2b460edf5ee560e92d292c036afa7c40e7f3ae0078f84c1ba45a0cd10f363fd4cd07dd33fb2229af42a7656f33ce40d4e3adac1d6b56348a7c40162f3d49f3cd1f8faca172ffa0f31654cfad1b46c00f11945b8e9a72b8654e642d64bd3838fa6fae68554e51688f637a6df00e663e64188f980a8ada922cd7387c3772e90ac5f4fefbaa4661616c4a0d24946d4271f07cc6c7a91be5800dc0081243c34691b30e995c9609b31836310f760222be07ac64f24de6a093c52f084644be853e8500d3cc1e658adc8ccd418925492fa0802b718af0b52f02cabb6ebc4bd0bb7c6245c9712a6095e02b8a48071502f7de22d0b44e2a467f387dfae7609d8f798017dee214444ab97cfe965a81b510a8158e0848677d91dfcb395aa358f02361676342176c6477e85a499c56fbaa69fa89c12991842093b6e78f8fb08b470df453da2850f596089f972480b8b6df1aa80c06a7f7841b5aa514c86be5fca292458dd701d31dd583901e47d2e222654c3b00e6c44774187966581201b7fd3985c4adf130eaedd1a327a915d1db73eb48505b2a8d80264709877050aa6251e92c56784d13d459ab5a15a87d5fd57f06e00a6be09c0a2208d123e484003d4fcceaa428ae9a54e7ca3edc32d61ed8417d1000c58e2ec0585d91b1716edca9408a48843bb8ddc371ea4051c8dccae0cf23b1fd89650e9e407f8c8192adc390b01625c0a85b133cb2d3b64b17d8def6808419f1e0cc54c22d153439a73fb96f1c6068a24bcb21a9a7c1776a19eb5ceed575eb74e5b0da61f45c22ef020948a285c8cac26d89f02a95e594b2106dc911576d19816ec2f87ce4113fc229adfa5155e5cdf55147e2082215d560ffd18e46f9cd4bfd80c2c58f867e1a58cf35a50fbe8695c473129029d79fb8e4ed0e6d079a9ca4eabe482122e7968790140f506cc672c22abbd28c0c9056834474ff109525facff911fc8c0f907daf62ded49c2c26e5dfe40601fd03d456b4f83895212e7aeb73b9539956e834feccd8f268f84933cdeddf778a94d2e4c92cfd2a68a7d1f0b0bed6e632cc7aad5e5b5003dc82b7fb4fb08b784aded5be39ac4312fcb1b408f81793964580ef363e02d071f0a1e14209edb16c318409bd46a7937b19c36041b890a661c3192107bc19456d2ab6127d04fb0c4df68fb3ce1d563605042fd887436983d2b5c9e9dbb5ed2a7850327fbaa93b3adc679a1a0fb562fb4346dcd67f727b3e2fd468a977fceb05c584cf415db8c675fac87da401267f55def86d25e7bbe1f1858759c9700914e9139069bbfad87d654924529c7c28912f0673d282689dc2d7e7de9dbe8ac7cefea3bd9387f9353a5c493aa3532de2c162ed35c6c6407167a758038e298a91f2980787599afc6b37664d1c14fa1c6d6a61cea642cb0df6e9264ffefc4626921414a899ee45c960fe1db61f07f0fb531d974947d4f7e34a997b3b7f007aa318b931b421ca5b085213a1dc040517eb1cdd6e90a8fa1eaa36b1c9b718b4c6c761022b826980e7ab75b68ea31fce096b72d926c3f0fa00d2833c4c67e6b8fbe88f885b0f8b106cbfc62a155229d4fb42a8e20155feee6d48819929482f62679e66a0640099d840da2c9c6e0357f8e5a2c0c87886cb0d841b93608850c39c9411c955a7cf4919a451350c1d93e2d3c188111920b6f01701d3ce44274b47cf5e7c6a1b08d5cbf44bd3c7cd325e8906b6c3b63885dc3e4714e206e26179de4837ffb6e7439bd4b8f51523cfac1571ae12d127306307085c36be450bc314e140590bfc4da29130c5af9869888147cf7154fba05b07d688d52e0eee8b385eab9cd00f783879b4cb17ae2355cce4f6b2bef2faa69830cb59e9ac23e51dd971bc3355bc7638a08ab4ef48a03977d0a31ff57a5f68c7aab7729d6cee453ef5b8eea31d2bf597e9d34b6e53d2f8058d8e6cc05dbcf4f8bacf72963a45c64f8076f616e38cc810dcec17a3145f864e23b99942e367346a6442b891e64e98496479686a3849f378226d9d5a09007cecbf9c7ffcb15d1daf4009f75f5ccac16901bdf1ccb2a84da41956f66559e1dc005a9b96e41593e1a13374e7b08c59791e32f2322ca75a81bed3f4a2fdf2298d85cc8e3e03c2c79e61bab4546769bcf46150e1a96c58eb0a4ba04db4fecd2ac8028da3f6353f7b354bb327524f159d2bea2c7524ad1e23f94c900575aad01f442fa0a658a345c433696a6f019c3faf17eded101b8ea3c5880c721a474e083e5460b34cd9365d30382c8328241ce3229b3f8aa85cb503073b1172636945c53b196a60a53243b839aa8a446568b72dd78f14dba44f477254e9b671da5a5c01bc77363b560177f205a0939c6ac47d7248e428b69c26c602b9983bd34f402352ede3a2d7c6dc1bf3e0d2a76a47e6391eea536b4d53a3dfe91f7b5156515662b14833a489306b52364bd7e02ed17039c80e0d597aebfd4ff19c1b3aa59bed836578199cc60333dc87aa653bad7a886d87d77f888ceefa8f171bc40223f3b59e90db2259a58cfee3d8cc6eb418a4a2003d5ca5f6ea81bd643d24d1d572c32f6e28e9c58b176e7f95e0b4bbf5a42c8f4f0ba585e115c1fa9a33605c1f4dbe3937073214a575b95d348ea2ce5902d49ca1a5f8107df8e553c90dabca8942eed02dcfabef6916d28474cb97d13d364290424503c86438c35d653db0338c34d91abc83412677f387c8794937407fd290e5ba4fa38568ccfcf1c4a481622647def4648f7bbe13a591760cefdb312f864d6ba97900e371ac336aa9d6c23b1728b31bd2e9caa0071e5fa84bf465fea818d8a21df8e636e453f6a738e83a6f612444e8e3f0988a27c5da7a2b4d6b968b3920f9681005e84f2c02574c779d9474dddddea3990e75422e365240e1665f95d94181a83944cf9ca544d7855b428191e295c8560dbdb066a0b33ae7b20f87965a9d330a88883388e505139f26127b01621562dd69827d52c0a1e34d148bf1effe44e73c02508cfcb84fee481dac937450ef33736405ebea7f581f259686853165de028adfe5d9f988b78bab2a4ab4cdc96709fd78f528d3e141adc44af3197da980f1bf58f6a1f9d4630b20328161d9d632cc6ec8c23dd9cfab54d9b1924ff68c2f02c6efecc86378f8102e97a2379c65c6faf5318a5a4d46f177f8346f535cc7a7c591a926020670a6cf890bad05bb601c573ad93b9701bce6e6fc7b52c37ef577ca519034f1509f9b57ca972927370279377878205f7303714278b056568a4413843bd2e4f5180d568d956b5d08f6988370b1367ce508232347cbeff12982ce0e679408986771180303fcc21aef8b3ebd64cf0be65d3a03d68f90fac4053b0bb792f6ad665c915732f0ce4d066d1fc864c89c293e0b4ae185d0a62e0ad87022cec794be21a8e085dc17f295308512c554df59cb2d7435b47d8fd236b3cf3c8f6e73642bbccf85f5ad61b569455672eda77722d56614db21f154fb1bdb106cc836d4b379c60e12d0215a908095d0aa0cdc0af4992e10f1141048a4c29ad869fb881f9d0f683f135b58a8d3bac7ed3295959f75d91c52ffb71f315b6d4929e4b4b258b0815f0db4d988eb93480e954a909c9e070da67b846e40d248174dae1eb4f2ad2fa990568840a4dd4534eb972522171bb82aed848be7d1bc20cfb8112888530b19984ef946522365eada163b7c7bea5ba81ea8ff2b55cbf5d96b7a42638f732da19c29af1e81f9850eb7f3d6c5c05bb3688cd9750e683996333822aa88c100837309653675f89ea82e9f7c7c360b43d3a7a7899c688c5b346094413af853509e219cdf19a2b74c77fd6aba8e353f06ca56e1314eafc9fa8898cdcf1197c3d216cac3e9119cfd16073f359e3f66392e7c1b8f6d683b72ff9c7848379721e7ae90c911f6e7dfdf4f13357cbcc25d6b835d470c14b70636d061e9674668d483c2ddd908178aa67a49c5f99edca0af19801f72bfd8a5c90ad32b9d05518ec9bd1526eba7d2cbbf10e237bd02c8fb5dc403dd0e0c31b938bf14344ef02fdc9888027d38186a5acec0a32e1753fe08b27432df229752bae45f09460f288758d51ef7aaeaccc989f77bca2bbd4a2ca3eaa9afda382e41395b1ff80b8baf9dd99d1e24ad058ca5d26ded8c8ed2b5c24bda07bfab6653abc9f002c4f501a588f9e102f404d3a18aed8c27799643ce0c098248a2a8000f8b51dc53930cd4d765ef70dd8ed91f442ec0a0a50484037cbb00d38d520c3de3e2d039d89dc03317ee883dabc5059874433c533723053380c8deac53d8c33a78b1cd16f3595e8c87074c7f3b36cdb8f860cebb9ec5a0853c2a6d565c48e86ea0e64246969325ff89c65f8ec11828a44b4058f30e7153aa7de26de066de932da7a7a824a3b19deb3ad9bcd8aba3bddf98559ad3f441f36c85b4076a999c51f2ba01b9d32ec1f562dc81d58c69fadc254769ba8874e5f643f36225224762976e7f8e342759feed5adcf9938f3ea4eec0cda91e4765a08d5c7ae17646d2b9f1c9ec5be6e34e7ec00595ca3f4177dcf835203671a361db9fea0b7812ddd9dca85cd3ccc2393813cc38d6b93c6f2c48ada8e3c731b1ea808d88f09edecac7e6e351bbf3fc4ff67e08956074b1b3f9a855bcf6d5570b91e91c870e20c64a8f052389140e39d376fa3160ea44a54087c4bc1929ef14fe6beefc98cdeca810a546d1c9b1aa5035fb2787ab6128fa3837a338192f7287282afe3ea8a6c5bdfc63ff646d8ac4749be4568888a27614a841fc825eecc5eed2521cf44e3a5a90201d132e3c6da88472c4afc053bd49b1adb5ae4ac765cca6443d751eab9593b42e7f2985d24009e2d1699ad6b61cb22e001b6d5ed836ec67bf1ca327e3587850ec6e6ff7e772dd77be18a0551a99c9c7c1d2ef8c6d820d2d41b7296270062404f36b80fcde4af7e5a252b8e3b017a4366605ab809dd7ef83fa7b2b2347c9553e39062698b10b259c11d8b2a6be1c41605cdb4d4a77633946b6d4afd11f1594b43baf378a610dbffe71a6a5fff10528964eb7f0c7762d8aeef60686bb4834664287e82adcd34c00c45ea150649a0e0a596ad24f08dee405b44646f98716203c94c3a9f29a4ac726e6b39c2efd7d9525afc006a59d8ee5335676c4d53dada48dadd263bf697515eb86b85dcc8f8330514b6498f8f37e006babe41e06bdc388c6dde8fb3f1f9148e11707a3facb812aa684fa2979ab255512569671591c66e2135cf108e7b232b6e01447799b6002d4092df41f169b8b36a7399f650aaa89129caab107490dd09910280cbf8a9bf8c016b74a63b0cb38a1d14f25a52c4b311fecd6444da3b5014a3826bf0f2ab47ec7bc0aa2152bcaa782c2a50ab4e766c762ca2b00ed0d6475dade5791bd92deac70b2384cfa24ed61800fbf8ac372b77661bc7c18e21f060388c1650454584cbb941c78c680908338565fcbb1b62dd9fedd41a60db6288b761d1f3cf3e4d3fe015f66ef5822900560b6c5e3471ee3f4380358f8b98017129befb15c869fe8873accf303f38e82e6337106be938ce61fc1f38087a59d8939d54a2600a1299b6b1ee3a83d0fac96f88277f913e93934672c8afeabadd505f457d9cebd3ee31ae072c92833d5357a30048991e9d95201194e8f4baefcef433d9632162190ad476885bc1bad72cff707547105a5832d6d284120b46e619845226e8d3bba6b3a137743fbeb48653157590b6bbe1627b6e8e8e2037f65ba9795a10c7b0f3a5b8e66c4db2275b8c556b76009a0d46709e0ba107f8b231b7659f083eab100dc5b510577c9854c3057d75407f510aee2a181d6caf0bf0d20ecbf80b06e5a437e79c7dbda02095befe0290fb9805a6856cc0b43f35c75f962b27aa2b047ba6dc6a14b58400520b733fe96cdf9206cd8a2a843af442a55e522428c1afd78be8455ac99a28067f73a9eb51b3f89b8e36742dde9f38591f457e8a96cfecf7f377fb1627966d8755a531d77ed254ab2897bc5940b8196699c756ada40381d40bd612e58e97990dc0fbc5a7c85bf9f83c378b3d4c6d9705bec1b29a0b668da53ab0614ee84cc4034000dfba9e42e0584bbb80afa28167cf4e217942600377e002d116a24fd66eb1f783c01a7e6caada11072c941f438111256b92f5cf194c4303502cfdadba7226206ab2c22a7640d9e4bc0540b58ae9f175a502c5e55af869a8bb41d39b8c8fa3a73634c4f2fba5db491a7d57083804d2f6b18ff5acc391674f3364b7853b30fb6ca13a188740fbaf5438d647786708e3cb2ba5d6050f35049d3bbfd6d988408686b059d651a950c687969ceb13c0857513d6a50514925c82c6ab5d296c77acdc8b829bd90b8f9ce74dd3652f4c91577b88cb14c94906df9c49d95e216b937ef20626702c5a397016445676ae701d8ad1997c006ed4c79e1b21ebb758bb16f02a37d838a3ca3acede555d0d32e1035859edf38d2aa4872d6634595de2ba4c38e30fcfbd9d518d9b76a670b8f1f3adb0ef577687e9f9d9e9eef9e0bbd9b9c1edb62d027c4de2d8f163160dc8320e5300b5d4bc293b43d6c67160e839a54c08a07f796fd025b63b96bf8e1cbf057c5c232f1e4059794c382b83436782d3a0ba00dc43cd8e639c2c41d0e40a66f434037f7552687d987f8374c9e61bbec8d7b487d6c498b1c2d66c052191fd6c7fa6b9700e714160cfa50e6d72039994cd08411a431cf15e420a5107ce23a2f32b79dde8f23b660e0c81f25db8957a0c6bfa72d5aec4d48ca4caecd896889a9adbe63a4a7bac2751c0c189ec1e70add7f59054e97be801bed8874be910a228313dc26d1ae3bb00f14834efd460515a100b5624300ed25dad5076fb8e87b6266ebd95da60807c32f6b42109470cc9a08cac39f59139fdcd726f2b417835c9dd22f63bf36b01cd924e832b403830a4000159ef3292090b4bc4b0b7d603e3182141c64036164cae06c1894e6ae75987ffc2ed4cce95f1a582631606960b62122d4f2f41844c4da3eeb746f81d00596b61f0c8163de4e8722f03ae8ce61ef3d0f02d09ea88199ccbcd8d3970acf2bc261656a8e9ebe5a1f70006b4d7fe2a522b828d6e90f6b2c188f0b64c2319abe1cf5d5f1106c10737e22404dc08c7a817c07ddf3e0e9ba6a60d04c0a8ad9a4eeb0cc670182a91d906b4ba711002aa288b37276b8bf0e61e1bbe2ac09e0d6615fa20541cf6cf33badbbe4617b56d0b4bb7520ee9ce3a90e113f1eb04c46df2109cdf96f126604528e47d18b445617a45733d7ad5c16937e7c22a9995ad9be3e9fd695fccc065754106d54b1a9f53610d6bc0c5b58e5ded1b6b2c16fbe723010b6f763c67e29c74b7dc195ab63c59fa72ae1f227927129df4b8b208e8a63badb69bf06079c6e9d106032cda4dfcf6ed725c52ad5744c469c5f1a782fb28ec0fdd0d299eba07ee6e2648a4d667c9a7528fa76ce2196955b780aab40eece227b12472de6344d9fc399b2de648c1c31d636446a79b42b61e76f33a7c014278d308532176135aa8763cb3179fe378492c66f09c4a0b5b5acacf0ecd1faa84a8768147f4056570c336a91881ba9521447f2f972a9adfeda40a55b055722454d2eef0718b6975d8dd88f4417e1abb897562e758648c25f832556188553181354006d3713dfdfa71b8e71f80a1589046a3e51c4e45f1a37e6041963dc4be8def493f1acf7054da4abbe1ddeea44fddf5866aa25d6c0338fc3ec48978bc826aed5a99dd9225692f26aa2b99cb50910641314a056a8564042c43a4def79c0729d99bde64128470668d5be101d6468589e6c2af9aa0d386598e40130a9133399460bfb94480dba437f7e312fd22b12f3b018186d30f3a8333184ad0cf24754b2a78d631e6a123bca01790754afae1fbc7ed273560b0ea9707f30d1f758015e5a4a8cae491bdb8e0c13a9a1a2cbbe04d5a36c587150df84310e1f25a6f9b67e259cc9290c79801e4368201c90572e0db7fb4a868cf2f7269b9e0dd32bb50306cb70679eaff174bc1c22385c04d04003a6e3073a24cb568e48ed7fb06d187656582b58866dabd8b4eb3ade61ba5d36ae1f4a8e612dda5a12537dd1b693b224f1e28b30cdcbc6b57511b62aa1aed88f412beb28ab76be95881025903bf57fdd5e8bbc121e0f105e288a10b7b0d9dbc5d481200b370f08e9cabb70876f1803dc7786b131d50fafeacc2d0b96d5efc03362b10002ca4b55d135262480b0c17bb0e05fc09a483be402f07822d9c265fb9f6f3e309e51de85b2523c39eaff9c390dc045000dcd807b821e68e939f4645e0bca6bd7b956c130d67133d975381aa09c10470ef32ae0e5083eeb65bb970c43d06b9f40c17596daea9ea970ef830bf9833bd28c46a6c48533314446681bb7f66894239ad1c6b1b6bdf4190e63e50c9965d301e7fad6a2c7d089157356dd31ca06194a52ff9238bbe59f3c12bf213ca67fa927ea79d6e8d3481086404517d8ca51dab90a273af07bdef2ea1a66d4070adbe743f7c7cdd578e6d1c3b2d4c1db647e6a5e75d08f0019ef4025c04ef993a8c2c4938c51261146bc9fb491f6324f451d10dcbb8b8483d13a143fd25b29822cbed5a44ca2cd6a04293162365d9933a5f5cc6ca64015e61413a5968ee0c46d8883f5b6135aa0c4189d9f69a6f647ffcbcefd8a73695c5a921dc1acf7117ce0183695a2ae1321994fcd8a05139000eaaa22fb82366c4098ed7e20f6bf80aa8bdaac0a7502d0348379f7a2b3c1e09577e780bb2e9fe55e1fd26f97eac3f209df3d5d24468dc5b1f838f1e867664dcae621068b3ce6348af1a4cac759ce290732c032c730cefbf8c9946d1c8c479b6b612e5cec82046024cd97779c31717a6e02644600efb5aa01fd2eec787018ef8ad3580403ad9e7312fcd7bf508f39bd8a38f83bd47c445fb49cd634de1cddc172f842d520e5690dc66925b5d02523d98a587d85337f8dd2abe5eea246d6a6b68c8a0ec5de7c5484bb20748368fdcc6edf3f244baf6e4ef6261dd72cae7319919caf14d633dccf3dc91a37784cf7c5ff6b67c8e2d871b3dba425f90729d637e9d62aad322ea9bd0801f4163d89bc2a90917f9fde690a1aa2a04b64f430a6cd74ce161675302ef2169ca1d8ec88a6d9f4934a46b707166f0daf135c94beb5cddf69dab4528cecd8b324b52a0bf455ea91ea27ee8ce8343f16ad6ad67e2e7c606ba919674cc0ab7b6b2b3e536d6ccfa1a3d0bad1f0b850b5ee59c4feae193566e3caaac3437743f97d0727cb09633ac489e013a2de5b2a370d1a6df08399e957e8f1f104b391ce89b9c017139cc1cd8984ef867fe4007ddb60135afbfdc4a759957b288182f37a32dba5d0cbd474559a7fb5191270e72991501fa30d3dd9c04d8eb64f84f61a6935ad9d37a7f98a78399bc68d7904e0c0744fc20b85fbce5d5f1dea4d403f47afb4fa76bfc2f91f75308f4d2da159155f1f29709b5c95bfbaddeefeb4fb6933b86b0d504efe7c6d713f0c60a3a3880560564adcfe5a04947db14400d1d105fcad33ecc14571e508cae7f7f50bf3ca804d350097bc912251cc07c8482440ffeb04aac9bc60fef03305a20cf3c1207f05f521013962033caf2e8c9be35d1e735f80a97a5213724a26ce002f8b7b06b5809cf0b8b8a6695fec2120eb504349791f46e2cc22c79b2d9585405c503298f05f2589fe43a17e4a094ed9831cd0416a8557935462ad488c0a900842c0a71e7b837fed05b4fae9f09fd1c3695f687fa137f6e1f16eca4f63d14913532b83181469dc1322c6470b9c425081fe078896ad1794c0c3568ac54ed016807f3bbd3c2894c5b4f882f72e3088c88bcdbffa3e3cfa17bb703b1f3ed08ca50623688f6656c13bde48d71d99acedb7080be29b85552668d67125c7bf62d681150b43cbdc208daf4501329605e105d8c99e42f8e57eab8c91f9062d5bb65611d54b2601347e3c1710a561e327b961cedee0d4872bf2d93af800d9c5bb5260ba4fcae233302b784386415ce10dba59125580a5fad5fef3916fe86fee89894b2a192cd737a6f07f957a51aae2f72ae74ffa41494977e87a0a6518f443e94ee4ac80ae4c87f0edb1fab8fe99986d22881260f705cf57df3a66d524a244bbed3b7102041cf8e38a92f4e310ac671a841bdbd4fa6fe606600f82389b9f38e082272c79bb77c39c2ad530caf94fc3d6277170faa311704a42c0f8675e4ced643b3aace3bf727ce93b252142b81dfd3f37f22a546190d95797db0096a309109a05bc33597407c8e5ef1673d02cb9ca6c5cd661a75916fdc70007ccff83f4c6827d8126d479ba221d11abc5f7358b8786b90f1fb24086b60690c830d9dfa698c5780f4ad263ea23e98d20c0cbee50321476f0fe5377c22b9f0f00f02c7f92d13fd664b7cf7c4f287945fe20c074f7b2ec83ad8f312b17e4cc85393fac7cfada812947f1ebb63d4457353a018f3d33e49e33523f80c482929df4eb9b27654c612130c221ff57447ffc3c9c363714db9830d7afcad1035f7b1f22941f14f7e7f7ac23e7f9353da5bbf2d001a4f6c3bcfe53d71238e2e16ae2ec1dae29dc71ef10790d7d6295b15ba5c36434e756b5e91dae4efd6846525cb3b9a9c433bd8cf0191fc7acb373ed1dccc704737b926162b5be35c52cfdedc3e34bf4abcf757f9f14234913ca6115d7f28c24944d3424b6d09328513148fc22335a2660afaa15ac65ec8daf35ca0c1c6a5d3a287d76a29d9ed22cf90a09b86f35a54be369b4acfea7c71c4034862278face8431d374c79ccaac0846d02d29f9f499dc06cfd92ed4674da5c02f751ee0b81698a8aaf5b91c0489b8399519b4096fe29ef776513a4c0c61c4a58982fcb347b810267761df0462909cb8946992e0f87a105b25c0ae92ac12bedd18fe110a841395a2a3003e67a62c45e22311acc6cbbd4036b1f49e9ffb6de79f9fdd891e05526fb02a698adc2e032310c5c727e19b199211fd6f805959faa2865cb956f17da84b93aa3597c86be39d5e7df47b0ba561ef2a9c4d4e842d62183d9af30c066599c1ce574e2d76eb14bd5456c425c7622d7ec948afc690288fdedaf13d4c2d05f439087e4f8a797520819b3f98bd4e58dfcd3d17b28b63481ce5c8ed37196453835c7b6c279e692b15a44beaa52c2036bcc29521c85c11a12c81710170c2dcc9d7c786fc0682212e6491aba60160b5626b9feca6c40b79a5715cd94d2f8429ee1a01c94640ed5661c611e30bcfc2697400c6f6f5a61c8df7cd53b8ce41f8ffbb165685dd600f43118dce72854289299a836f377f73d70a76a01f8b7bdeaff008dc2590b3dce396396551e940d73f1a2d979ba76275bccbc9e9b4ae0bca87e5e6a196c13f44e62bc1407a0872e978e0e13f4787a5b8398431d0981b245ac64f33e2b36bffa7cc6601a3ab081055809da2a1e0c30f41de16f2bd0688b6407bd6623077b6693484aa77ee96adec52c51dc6e4bde47b4d33bb5fb6c28a14d26c56935461c11c8e7cd537664c3f184cfc89a8157f90b3649d8625a3c32399e34fccbf6fae599621a9fa9b67a90d365ef0b6fd45d5a13a6f0aaaa47a08306a1b7e38a7c9762d3a2529b6e1a63301255858a5c36c6564b880c0afcb94ece73b93b793517702aa9250472dfe4f5930181db36532b80bccc3567a4f5b9a06dddd8475d8bd3df0e98b9412a3c0361127f77068ab6a7c4b875da8888f3dc9408db460549214b9b7118e9401c0edb677d292e602f2e625a0ee19865b71db56d5d7f6419d60ece0244ab88e9e32c8421b57e17cbac0f84888579fd85a940812a61085024fb3f096c6f400298cd6057359d47e28990723c0ae2f439bf2a2452da5f1702bf639f483169b85196406e447e9fd260a34610948c35c6e4d200fcdc9e998b36b6e106b5c15cb7c341b4e38bf772ce5652b15c44ea62b12657e9a2f4d0d27223049690a6063452c027e1a47a1c03dd2f7a7f0fc216089f8536a938cb79ed411a6c6cd2ef976c972959fe82cfce8b39aa40689545135147ead04435d1b915c2d18dbe2350cb6ad3ba33c5fe2d83a31d00011d50ea1875c034e6606f1854467597f901c0749b280d2c14d6264928b5133d6172e9f82d5a99998074e57177d74d3d0ea8190e67c626217c613d22fe4c657fe483094427657bb9ad7d0b2889d3c8a44001b0f3706f93521fc0b713e4726f134102504f099f533000cebe1ce8482204d4ca6035a53c3ab551040ec381decebc8915871f130cee2040457b8781b21a390908a0e8bd407d0f1d01264c000c241ff104ed7e96fd5f70ce1ba87f1b3c158d2a7829396703e8dfcc831fadbe88dd40e41754144765bdb7b4b99529201ab0a5a0aa20a4728bb749be977c2c042e6a3503b765cf992572b053007e1a1360b01691c45277170788000b946748ca965b45aaf214694ac9162b46e619092a4d293864999ad6159adabd57fabf57a5d19f36fb9cbb1d451a66901c78529039021b1e9d5a0eb3fba901807395924edf26724564991a1caa41c61fc71fb57d2a73fc642a47cf57b532eacb2e7a5830497dfdfb39ded57c3fe87ffd5b06690c6cd680caad7eb873687a8752f17bbb00430afa414a448303c2589690dcf788856c2cb880453b5a8a3047327207bfc3fa63aca2430a3042305151a26e7fb4f6069c810225d5763282df96ad8d7e9fd9c73a2e097fb1f15785056ca9687fa9f86a1c2f1c9e5bcf0d52d4fd22dffe9962369fa3ea59e8f83738d7c546a4701a42567f8b2a79fe78cfb79aedf8f45e9eceeeeeeeeeea693bb18b5faf2fbc7b2dbe60a279b6bbfed310e5e301193d209a4e5fdb8924dcbb2d57fb254bafabdd4ed1e97655784db5bb9d8326fba11235f5459a5c804072d8068638c3562d440267f254515ce94b1a161441633cc90c99752be27e54b12765cf9458c1501cc66cd4c98d3cccc1a62acecf851e68c0e694409c256832ac5e88aa42125c4e0a0bd2de8accc1a4a6670d8c26392d2dd2de718a3450fce5892a34b16576438a2882ae6c081e88aee0d8ec6544607a4324abcd1793f02b92e8f8c245161851662728d3c924ad28c7374c6388721312446d0d4f937d4c6d7e590e7a77baf1e4823e24c9a3b56fe6ae6f2f552565c3c70238c298cd2e8e0091d293ae87046064a789122e39f1e48a6825dc400c90c1152a68c21e36fb99823830e6e20c49834d6c02093685c91c586227ad0061318311da04069030621c8a041f6c2d2ef8eba23ceddc141f89de90ccdc958999189c2c71d3740b9bbef2880183130e24c1c60e090b10d6e1c9d210311574819c289cf93a3bbdbbbbbbb794c517fecee6eefee97dd27e40835770e9fec27ae84b3bb33d14b9d85afe1c1b7acb1c34ad6128c205963e8ababff98b8e09a8a0484d2ed977ce7490c19e44ef87ac882ece93f6151471673fb590c2775bfb7a45bfc4a6bc034a8c2e12bbda801468d326eea4a2f6a88b999c15121592cd18fc342f8f22f711147baf819a759a9c795543441bb53c711a5da955fba308345558d9fc72fbf9159d7f8c78bda1d3f60e69fde4b1ac65fba30e3f2e5ef40c318e9f2afd030e9a50cedb20dee08b2dffe13fcf6a786e926a3a95964a74aadb7bf5e9e6ef1778b71bac54afc92dfa3484c15ba1377b2a28c7fc7a550a02864e0facdf3e6770f76cb3df4cab8b3cfa74c260cbe7e06d230faaba5aa94448a49dcd5bf3a7add5e314f55657d49f1054ab13a675d68218b3afb651229915eafd78bcaba5afd92197d01cfc013e5bad979a0aafba5a7ea16b77854155c4d9e4dd6426671e5983077944db75fb7b140430b29a0ac310796236467cc31668e199ad28c918d12e9033338624a0d6cc481c60cb2512eb1200a2eacc0c18926bce8221b25131a346edff6a29fc81ab77f49c3a417346fdc7e8f67516aeb4a2f686a8046cb8df372e371c11b29bebc492508205855ab57ac13ea414d0d8adb992ade088301512031c41b55a0b8624d126a8d0e6cb078c55e3f2f17c166e2d6b8c1b11520d8e2515570f5fa890d39f115456a700319305b6ca8f283900f6da071e28849cad211b2b1852243cd104c58cc01851c4b4c1c5be18650126da47901531858c21803aac01f577a59fa62690b30cdec2697823fbc1f99fd39c4e9563f93d611a34e90d6d979b35b607be1697ec7cd707cdd34759cdd37d8b0fe5073ce70ec965f387ad23b85402e4f0f4422e4df447569e85db7ac2373f26c76e7cfd05be26b666766549fdc73f9737e37c7d16e7a7e6a1483f33f97dced11d1456e78992e7a86a31cc801c265af3c28d74dd6e5df81451d12fec4d2a87ea597252dee286ffc4d43ed2bbd2c85b963ad40dac5a9aac4a99cc5d8bafd1a63098bba8aa14e71c7d664830479c5e597fc1eff8a0a494615f2e88eadcb3d4c01c344e54c125d64e35faffc92dfe35fb92874030d46a421058a97a21d64fce2d7b5a18a981e6850304da9020062664062892ea0f0a20c9974e5db600938d2e022892b3cc8c67aa9b8f293c80a70a586284c692481430d32f912043284cb492b961489b8e8b98b2577dbb9fc1ca6ae709ea761636c15bbdf2dfe1f326a00a207723401c60c9d39685813c618668eb42882b3713cc50e37338066ba265033806656bfc221e29d1c49705c382ffd448c7409abaefbb666cdedeff64d8e196e77f7bf563154697f38fb7a9c15efc8a21229a1617df98d20691857323fdc7e12aef442a676fbbddb5dfdb8625de965698ecb5de96589e98e2b2454141f45aaf26577bbfe5f2745cbe49e5345daa85d4eb9cc54116ad42de78ad008e913dd72caa55b383bd2d4f1b95c9cc69141a922b39b23e3c9ffacd4966a4bb69cd5c7dedff3f3bae5425170b9c1e8c808232acc90f9c75c2c81ca0c9ab8210b520c6e90f9bf7fcb5f070ceaf8d7dfd2a754ec19907e1a2661f4fa23c9729dcb750772ddcb175cee28c15c07c01de5d1759974fd29532e0d1b71a851c3180c5755b5daaa3bf8fbf476da81267d3ee53a29a5678fa8f2393c816c51b4e8d2cbe107b2ad20c8d6bb5f8a296dfed83ffa694edb7d9a6dbb524a297d1e3616a4a1fc2eebc8c8f73452b05bb275e7a5d71e514d683999b75b94b3e1b04f42f7af0c397c3475fc2b2d1255fe2755aaa9d2711b75c118f87e379fe4fea025ad47ab9cc72caafd0e7a437425d1d5c15529a5949f0fdd9bcf4ce5f73a5a7317910d1dea96fc144a7e966ec9e9b66e81ee524a29e58e35957f4717952fd3e6ca9bd369d195cf85e3ea5222e992b0f94954eaf43151d9f33a4abbd2bbf164573dc9ad3c578b9e64cf7bde5465e1eeee27fbee722999c8d0eb160ff56ae579cfe1e87ffd9949180f657425aa0865a3b62bdf93c3f207e0a7c6fda0878ac70e1df5c626057e208070755c0f470e5c9b23d923df87cb37f21dfb1d45fd3bc9ca5dd3ddfd85aefbe7ce922f74a57d3455fe8ba9f2275f7ae995e1a3a9deed76422f1314f8bda282f9a72b534ae66ca6846733d97c57226fb21936614df9fc1cd6a24b8b2e87ac23fcfd1d3eab5fe876287485aed0fdda3e9ada2fa6f6b77733f2651d09477ac7262cd92d197a45177563f10b5d0e4766fb682aff8ba9fc0c127d32483ecb1ef9283ea972307f7477f7e9f9ece49c92c714a3bbbb4f96dcf74495979bfda09aa9d2c255c0794b1cf774cf6b98ff4c82e7b702da854a7747ba73871295dfc17777779f61a53ea7cf39e7f439e70c418fddbf13dcaeabc2a05cca0f0465cac3510548d7d3a8fcb2095774fdc1342da59432f4e4a03ca6a8fc93be37933df3d973f6f7507e36a3d06d11cedca61ae7b828383a5466d2b0861eff0e374e279dfe06e775ec338a8e6bd96ef47f3de79c5f4feee6a6076f61f96085f03c0298407aba6e27e40982426253468e6eff8790a383d37a99112346490a432c2c2931f1100b38a82574ab1f2745c40595fb593f563e5e238c300b30aba813840280dc653ba45b3dc35851e5ff7cde2910a716e0cf3d2b85020b2e7d8e09955254fea1524a4a817ec5545f2da6ca3fb66eff2a45ada8730498ab2a081fa46815aa5411da2345ab707717c159a90b78a48a78f879a9fc3b52b48aaa638a73ced83caad42655845651e773cc26c5b5550f94295bc18c851a13cae7ee923e53d904955da831a75bbecc687c524a29a594524ae933fad2e984839bf48b4b292913a594524a299d73ce49299d73ce19699a387dd9d922cd19a72cb7bbebbe0187ee9e673ee08248094690740718729b24929a363e353d7023063770b8b9d28b9a31d7bbd28b1a3192e89b699feb778fbe7347e83b0be614a2cc5d7c9267a4b52bb5fbcff342a7e9c075006fc73716d285acc441e6cf672f32c843d681ec99e08e190af5943b85ed85e3caeba7ee4ee8b7d09241dd813a6bd4d169de45c2e8900db2357ff4271a66a561a79fefb686656918eae77b9173712319e4fd7ca751a7f1928b42b2f9cce4dcb4a661e04c4ac3523fbf876410dff95fcaf2b5b1728c0cfcd9624d06fae01171a71fe154a46b3e2d023a4df6cc471551e7bb74e729c7cc4badbc3656ca96c89ec997b3cec5baedb38eb29ec5ad74abd6ade93477d9f0c41d6a987791adf9d384be5ee846b267be8e240ed42146f59f2f77cd47923df389f4898dda857c7bb968f3956f2eb292bbe6cfaab49a3661cfdc35df2d7744eda7557177efb8d069dd9a4ed42d35d59dd6e264a586b13cd06977bed7e6bb6dbed3e63b11ad01f179a09494524aa994744a3bbd070cb5634443428a832a7ffcb95e873ca254f94278218757da9bf54ca95f434bdcd53fe42233b18bdff36a65d7d0e5f0d6d95ee2524a1bd4919992682216e24b1ca4bf4b43f6f48fa8eb6580b8fdbec442a8117b1a328836d19fc51dbb5a19ae56435d1b07193b28ba5a5773aeabdda6b76e8aa33b724946dcbe52a9110be1bc904dc8200e0c31b2a79f48eb00a38e5c4dccede76a35af79cd9fc3daed179b4817b3100dc820fc6f48d87c382e33c93497996e4b33d8b852f9df4597f1953fa5973bb2942496c81e7e6a3bc0dfee319d72f0c551e5735a98a50d90b4b481050719ae8041288b145c7439828b2992ba90f1d7150fea4b059fe401afa8f23f1d46d49b0ceacb7df7e36429e13c777167594aba27d55d2c533a64b73a649920a7a8610c4b029e8c2501d49ffe14b6807bd44b59a7ba2d130f594778dc7e1eb7bf99f414358cb93cae5b39450d44b72d0b3c5812005b807af0a5ccb32c0970df7d17b6a07beea54ca652f8be0b594abad3775c6894020af55cc852c2bdf75ef8c47b0e0cbbc85d4a95b3efa89b747ed98913a2fe1d5b7ed16106548421e38b2fb8c8f83bc94521176851069533389cf9a149c6dfb73eea4e88f684e3933ce3f7b1903ae36870fbc4d97a48f674d3205dfd4d83a672fb9997dcd536f783a38e9ccde31049698999188d14427d90419a12b521450a8474f5bf5e0420c0ce0e8b7579dc9197e41775a4479cad8f4890ee1ae9edf6a368de910cb2b9fd9ccd45cad956dfd1e94c1d1d8c1fd3368b5c4c7d7b1cd29b64101c5248921429cdc150c39b1e88db3ba0c2b1da703b9c51ba705c3171e15897a4173a8a883a769a134eb7995af67160fb4b7ac4423cec1ad32b6410875d84ec69909f39d41146ca724adcd2edc96191aefe55a5c9c073a27eb9fd1c169c4d8ddbef2907b4ec0bb92477f5b3e56c9c0e2faaffc848f3a674a7d2adbfd5fa57527a258f9b373a6f7d2bbae39fd8a8a344eae7b250a95c51c8d9baa532a3b29ad66abd120c0d8cde457ae4ae16bfef55b75a77fcdb5d7357bf47c3d1ab331c2b3d72d917f6cd5dbda58e9c8d9b6c384754fe51753fa653d72e3e095451cf977f549f9c73cee9631315116f1abebac531d771848c99ff4bd825d2495cfc808ba42e62d8420d2c73fc9001133f3811440d4eeca0c3883ab6993623835a6429f91e6429016d6e5e0889a5e4fbd4a7c227292119ff8ded2377f19f94aa8d95eec2a2f27f6a2a10cb02c327a9b0be90ecb32c25a927a970f542b24f8b3ad6967d77f18356d4f12ffb904be9560e7ce6b316a5155fc846ef8e3ebb7c479f7259f6f57fb3ed09f2ee54a93797e5ff0549cd95a9136e6eafe9165bf1c56da634ddd466b829f593b828a444165b6c31a58a2b3ec021e34fc145177af061073fe480a54b4dc6443ce4c00a9a33c4c440c66fc4c514a0e1021d9076d085b646c6ffbd515f2e1269f2193132f66dbf7dc1ca32c87b95ce14a1916ef10e95ee4f2111baa89e96b28753b538654e3badf9248f077af5c9a9eb3ccff33cafdbeb3a54e842b798676dd8da60838d1a8fb2a9fbfeba56b2b9f2a88da4db85e3abbd3696eee8446d28b9951e47557a49c3e58e4e246f9a2c35b7d2a29485b94e1baad1bc4ac39806602ebf07e1562ebf0fb5285d478deaa4857afb0d3532083f97cb3335593e4ac18e534538aeeb3a2fb553a59e5e76cbf35227b4463efd37fd84934e0eaa178e2e748bbf5327f4a3bed334ac439e758b9dd6305458e3e0b454f03f1e54d781a576f708b8e932e9c2f18521136e6ea7913dfc5c96cadf371753cf4849b7ff5bbafd2866fad1e40097a5423ef2cf8edef5bc70eca3cbdf597fd0fed816ba2599d4ccae13f1ac610fba90a6e9f23f71228f9bac1313f03d854e506f02ea7e6f02dfd33d51a1db96864d57be872c744b8ee0951e848b2a902e7e289586cb4ce5f24b6717b828d56b4ed474f9553ba8a3135d20dd92cf61a9d28bc0ae5c303775edafddea9518d557ddea06d3549c667e66be60c3383c6551758c51fbe7f7f8a2363f8f276a3f4bb9eeb54b77cd70e4a3cbfe4dde74db6fc0df9d9a9c7b5c8a32995d8745cada9c501fd8b5cd959b1b1bf0439d38cfbb203aff948752f67064beeed27c92679cb7dbff9d7e3aa06536ff71f44a5d2283e8f37760059be750d6a42b5b2eb519c6c18c2b5f0352084fe120fd2c1426931a32b944ba8f6490f7fd3f9c70e8362ad8f36af5ae37858574953bf214dba357c7d5f877645a1fddeeef2a2ca4c17010efabb0d73657eacb94045856c3272fc86ec2497317918b93c85dfd46f78b6e3f188e2bdbedff7ad66ebf7339f2a2f62c6e03c342fc0819a4bfb1c89ebe6383b9fd3d84a8fca3db403e72d1652758dd165657560239c7a561e765eabc81edc5a0e366cfc993bbbb7b227174069e57eb7fabf57ac5623db8481ae50ce54e3abc295b92bdd59ce2743a79d53f06d2eaeeeeb62c5b94e5741b6628b7d84d11758c5dcf81883aca2325e34be62083ac1c238a74817c2531e2ae6e68ccc4c1e1e1010264a6a298f38c5ae5913c8add24de8546dcb5030f7080548303a4716d0c3993ea94636a65a4d1d2d5224ad5e30b97fb727711963d921d0d66660e9bc390228a722b1cd4e93467b37b0a67b7aaaac96d90bd16c08942491e741fb5dcfd7c728f8237bb5c38a99c6dc3852c7b7ea8f5db5996aed3e523a70ea44c5347e8edff4e5ed799e9d93039248684ca397b82b41a4c4ae79c73b628a58b9be7cc976aafef68364433d2b0719564082447f51a49812615494155e58dc84f09ffafc7a999292222c32cadc0c293860d5549e2209678c65398c6445c838dbc25a9f36cf5dce5df3978a68e122949094ac4d7ab05a428cbbc8282b421ba6d7390f932758465379deec6a474567f8fdd56d23070e5e2b75c7c49571391ae368224c994230b97ef9cb31d707054e06d9efe39ce392be2bd1800a48bdfebb93a783a2947156e8fecc69cdc9c93e3388ea39c5f24edb2db86650f77df9f86cd66e9d38627a5c9563fb9eccd99b321bdd59ce110ebbaae8b0d69f17bd4cb1f6bd7ba52c988bbec9076c57430e2a391dbef5e7884b29e74fdac30ab0b1e9df3748a354c72cd712183082a4512319b94ce39e7942e7e5902176edf123cb9dd6b3efaf33673036975777fcd96656b3ea7022c25a8f7478554c9f31b27933c5ec88432713b7c92875ea91d58a15bbc44f630fd07b48c8fbc24eef2f7fe49d2f5cfb39c65f59f5e48f684d521cb01dc7bdfef854fb474a8c4fb53f8c4df0b9f7c0c7249569c1975863a6452d6859ebbdef3a67dc0898dca920a75bbd18a35a92739ffeeb8f2e173f20317635481811a4b6c21c50c71458d9a1a325684b962855e3922952445194fdc80c5eb71561e4fcb1b37c65e07b8fdff068f315e0d697545061e6f743df04a206204c9ea57e0955fa024dd7185d489e1dd015e057883892b9810a2890c3551e8e0850d65683920f3c415292f310023078c03dc71d583ce5ef9050a0d2eeaca2f50b46cf1bc4e3ae7a7f6ba3da57abaf20b142b7c83fa5df9058a0f506cc0c1d3a18863c3872e897219f50331fc4add7185cba087eea689aff6ace4e0afd8eb2726cba1e62e89a682577e99119d51bd2bbfcc685f66516e98a152217297f4aef4ba0ec5adfa63820778d389538aac6b508553660dc7a2bbbb5127af939213ddf33ab79ebbe87429bbbbbbbb7b7edc1e176f3673400733daf8e18d1e50510389460d381c79d9d2850b3332af5fa47133c1e981adcbdfada39f830c9ef96a398a2ebd8222d2276f8e038bec20a37238cedb04f0fea320ca525abb28a5758b2a7955ba45e9946e511b7634d59112dd29361baca0de0ba2494011d5a80dedeaffe833c769413d8e5baadc83692aa54fa7d029947627cf0b9bb0bae6425ac471d148fc2ca59452324bff98991964a105179e346cd6e2c9e91c73b23ca65d6c833ac1321d2bb151cb8cb9239b19c34bdd6aa66454fe91951a6986f9a484c966299b8a77d79ddb74e8675a77ca9f6335b3c5184d6cf1060de428433656a12a6ec8b14506331db0b124ebf6e2b61531b7bf04234894a4d0bfa4bb7b7200eea8ba0ebbee5fbbcc1165755534384344430e8cb0e2c60f32cfc5140c7800650735bc184309999286b52891fc9718b92ce63a15459071fd4b68d8773d1c9bc8a556b74555f1b4b0d49187a74596f10301c1b823ce973bf2ac59ba00b8fd5e7fbde17a91834c0f6eb77589343de3e3977fa57b2865fba98872b9352c0c4d1273fb653bd21a19da435a03838ec34cff682a061d73dbe55cd1da4492413dbab8fd7204716e532b3e55c3540da3a00a6432bf9e280da38ee03d819be1e3709ee7795ec755afa3a06a9e2e0d5947c679297869b86a02f2dc8f3b75a4dd2f7bd8923dfcdf39f1790d93f2b9efb8e7595d6c6f521a7a3e5fe86e17d430ea38af983a4e663ec1c6849b3b9fcefb71ea487f0d72ca84ce59f6f0971c8c6e0b7da7137ea7f94b29d2e7b03df79fd4b2f77cd9c3dc3f7ab8e5b1c3a9784fbb99d050f56aa28e20ad81033f1aaa1ef563f76077dd9d2c1d792e772c9e3bd20b8475847ef76113f04e0fa378cfa33f56af5b070b5fa2569e9348f334122f0c5dee9957df3fbb05f68f3364d2efa98e68304dada193799b70d3ed66822f37b9e9819f2a0b2925cb1ef9535a504271461d273308ce3975588ee95d793f0ef4c87412cf5dd5f3bc2f7ca5d931d8dc14de7bb42b83dcf31ef59f8742d9a48aa0b8540a89d09d2cbe7eb9907544e80a79de0b5d2f1cf93e9adabd98dafdc72edb66e4c03d857c39ee852e17a2a9f35f4c9da71ba5354bbfe981eb568591de5e1a7504572bd5642e74422ffd26ace682fe944bfe398efea4b4057a27d82d1beb9694b2f32cf8213c91aedf9fde93226a75a58ae3be0beb87b25ce87704ebbcdc754a43d61127f3d271c8a5610bf4468d601f5754d8f89416aec25a553ca6709ea02747d76eada66ad5f4b9baa22f74e70ca70ed3a7735f970a366c3ec7b9bb0439ca4daeb5a84dd4715efa9f5396f5833ea927725ec7c11abce3f4de03db93ef96724a0142d7bfb9be3235bb75ba9fb7773633ac530877e9524a3aab94967129e51c65d4f8a6bb9f51ddc970ee3ecd90a122d6aeb7d5f1e7026931d6aefe9f38ea7cf99c42417567c8a95a1f678a3afe481148bbfa5b14860ab6bc9b145b3ac9492abbe3a86df79f9ee59312d6edddfd0dc6279f4af9fe9c5b1976d82d3ee35bc9a05ec9a0e63ab0aa563228f5a3755d39c295ef438a12fc0641f047039c70fd6d2a5c8d3e406055b2b55ae1faab9a9c2ce81ee82f294ff7d0996e689eeb5c39d4307e2b65cb876490910cf26faae44e83847543dd12a3c56ea8933a1ba65ca35bb4c696a63ba231ddedb61454524454294503956c90a92a77a861292ad2688d8dc8e6c69c733b9a8be018d04c4704a6e96ae09ace9692d215a5a67446285a779b21a8c43fa268b79f32dfd06cf0790da3ff4d2969db194a29651614acb4935cdb7458fb0a71cc3b98030e2afa0575c7955ee0e0d25ce0b842c6ca8d88ef53a3ddc3d1dddd5bdedcdddd9275a46f7fdf0ec708dc69348506ae0bbbd29d65ea486d2099992567c3f7044eb8900ec91eff9e46b2c743277c47afe675b55a8b3e66362eb730369a989a119823a4245ac3468fa861635785d6257d9267a453ae0c474a85862b5f8aebd3c87665874ed89341dc098dbc3c87ec99962da5c99e1b9a85666991078d72a1371a8626f1400c1a0455a25928188a44c55031e8181a44c3c64aadd01a0d8269dae0933ce3ceecfa7fec2295c91bdbbcb1b50832dd14dd3c71737423e68d35aba61b31e8ac69881bdbada98a3bdedc9aa6dcf1260c8f3bde20dd285dffc9bd6a6ad878b35af3801c26a6a69a5f54ad4ba5443736da1d931b47d2a8f68f351c6f8a1e80a6facb3bded838640a6b395b3eb8c19126674bce9622260750d98dcd5dfea732d53f07c9c55593bbfc57ab5a7390ae0ff150ba7e53744322cab8feccaba6b0267b564d2ee6144997bfd1ec36743d8796b345f644a963ce16abaa42f6ac9a285d35b5486b3e66537c10f9b012074d7594652ab9b1c66dba7e2a7aa3ca1d7dd0dc48baa38f203eb8a38fdaf51f7dd87c145d7f3a5975d4b03187a98a300de31a70a13afad03facc9a00faeabaa9041fdfe37326867a623884ff28c3d4a773e1929b922343ab05b5f27bdfb71a0537a620ec789baf2a50caa2fff93428aaa216f91a93bb41d2517a5e8f81d3f7f67a945d45a9241e0cf6f31b5d234cc4909788e6bf32d78ada69e2119a4736f7ed449ba53678b3b75acb82d332d1f2e99bb43a58c3bbf5a1f470cb9e8030976cd9f3e5443ec4085a38a4835e4c3468d2a6ab6238584ddcc766e3208bc89b203e6ce1aeefc314473e7874c32e8fb9b1bdc64504ab5a6c78cb357863c190f8ebba1f84f4f9f518c62a65e07f6e8a29ec699e2617d6469d7f461eb56111f59bad5753e6cdd5235ed784307a961a3aa49274cc34e609a041e379d2355d3747b336b98cad63751e64d0d3737b8f33fd0eea8b0ec80d99142e7a673d3b9c99e9c1ba4e67b4e92ec99ff6d54d0da9bec9921136a66534461b8f351b3d94da2238cc273c8743c91864176b1c59de3bc53d5d48595b2cef6b83aac9475b4eb68d7e9dc7c14a54e688e528e727fa21445298a7296a64ed0390a7d14756bee1cddb9e33b7b4587eaafeca05c77e2b8532885769074acb8f3399d23d933bf0b3b55a8d3f178be5778844f5e90ed78b65778fc298daa53e4a28e9faf63e4228f9fb34b8e920cea7e3e674f77f461bbf379584a7317bf0f9b8b3b7ebe8fa2282fcc643a26f7a3aae9ce1da1277b8ce890bb4e97bb5cee514af58a884e29e5ff023cdb02bd72dad8bb7beddedf9322f71ece9f9c9d73ce59bb5dcd140e87283e1248b8e30a5481a72bbdb8f1039693b7b35ae13c0f112325744932030d1ebc8029834c1156f460849721a8247143b77f74d96ccce78bcfad61fdaa1f453cbea96148b2a75321cf4c00b356916bc8459d9055abbb86dc664b1d779446afd61d2538aaf7630f950f12856279d826978d42b9a36b871d7b4cb9fd3aea4dcaf2fdec95d5bbbdc2ea31b47a4ed9be223c21c24d84a26e89c0a55bfea99fa1b4f356e57511c0a4ac084fc8973e483e480d73310dbb496a988d0e47c150f013ec0437c15dd88869c04cf00c980bcb8097e0224e82b330126ce318b0152e826bfc020e827f6022760157611d98c638f014ae8187580696c230f0ec85272b7001052d386121841298e0042950010b5a20c450380ac7c033300d6c03dfc0393015de8179e01ed807068285e021980886011bc157f808c6f2fdb1241759cbf7c7945ce42ddf1f5b729195f8fe1853ac4946c433bb27dabd793e3b4aff7dee4e9d3653493b9b28ec085e47044d988c215801041ff040079e656039f0bc84ddc0b31236e7b9c86ae0798bb5cf49d825cf5a6cf89cc566e0198bdd7946c262e0f908cbf36cb31778be6201f01c03abc2b3113600cf56ac059e616005f05c84adc03311b6f55cb314781ec2ba9e5f60537816c2b29e83b0137806c20ee0f9072b81671f2c019e896c049e7bb0409e5d60953cf3607b9eab58083cef604578d6c13ee0998a0df24cb30e78cec1be9e71b0499e6fb0233c4fb10d78b6c116e0b906cb80671aaccff3905dc0f30cf6e759068be439060bf42cc5a2f01cc5c29e61b00a788662c5e7993df24236f62f5823df026b807f624f7816d8a05f8135e1556085bc0bb6c8a7c00e7914d812fe04f600df824dc09bc092f04eacec4b6011f02cd8fb215822eff6e6a62c01dc450b5d43dd72d9380a4b826728ec089e9fb0227876c236796ec23279ee62c767231b82671ad8159e99b020789e81fdc03317eb816719d80e3c8ecd795ec272e059096b9f8bec069eb7d8f03909ab81672d76e7398b5df28cc5f23c236133f07c8405c0b3cd62e0f98a0dc0730cec059e8db00278b662557886816d3d17612df04c84753dd76c059e87b0ace717580a3c0b6107f01c844de119084b80e71fec049e7db0409e89ac049e7bb03dcf2eb01178e6c18af05cc52a79dec10679d6c142e0998a7d3dd3ec039e73b0233ce3601df07c832dc0f3149be4d906ebf35c836dc0330df6e779c832e079060bf42c835dc0730c16f62cc522798e62c567182c0acf506cec796615f042d600ff823df22db041ffc41a79165821bf027bc2abc00e7917ac099f027b8047812df227b0247c0bb684378145c03bb109f8125822cf82957d08f67ecabaee946eb58bd6adfe54e81adab9ddfe4aa68e3e48a36be80621ea20b36ef5dfd820526c109f5bff8ed2f7efdc5c0ce1fb778e5cd4f9fe9da486f9eddf417211e7479fdbed1da51ba4f6ad51c71f56c620b34b821fc18be09b7cbf0f938b4cbedfa7c9c5f1fb7f662e86e0fb7f865c5ce1fb7f682e82e0fb7f885cfcc0f7ffd45cf4c0f7ffd85cecc0f7ff14b9c881efff31727103dfff73735103dfff73e4e292efff41723103dfff93e42206beff47c9c50b7cffcf928b2a7cff0f938b16f8fe9f26172bf0fd40331729f0fd40432ea6f0fd40341727f0fd40442e4ae0fb816a2e46e0fb816c2e2af97ea0221721f0fd40462e3ee0fb816e2e3ae0fb818e5c4cf2fd40482e36e0fb81925c64c0f70329b9b880ef075a7211c9f70331b988c2f70335b9a880ef87cd5c3cf2fdb021178d7c3f8ce6e209df0f2372d184ef87d55c2cf2fd309b8b257c3facc8c5047c3fccc845d9f7c36e2edeef871db948e4fb61482e22e0fb61492e92f0fd3025170ff0fdb02517877c3f8cc94521df0f6b7231e8fbc5998b06f87e71c8c5d8f78b3417c5ef17895c847dbf587311e8fb459b8b3fdf2f16b9e8f3fda2918b05f87ef1e6e208df2f1eb9f8fa7e11c9c520df2f26b928c2f78b4a2ef67cbfb8e42290ef17995c24c0f78b4d2e0ec0455628250acf21d3927a193cd97f7f6cc845d7f7c7682eb6be3f46e4a200be3f56733100df1fb3b90880ef8f15b9c8f3fd31231777be3f767331fcfed8918bf6fb63483facfcb07921bcebbcbb17f1d4092058963feb85641fb5a20484d44b12581f249f241f259f251f269fa69fd9cfd00fed87e8a7f663fb29fa31fab9fd1cfd20fd24fd28fd2cfd30fd3401cd8086806840444035201b50119011d00de80808092809480968098809a80936830dc1683022580d668315c18c6037d8110c09960453822dc198604de24c1c1269229158136d62916824dec42311494c1295c42591496c8a0dc56831a2582d668b15c58c62b7d8512c65afb0feed90276385b1fb354802fba36804f6879108ec8f5b13fbe38889fd8134da1f4921b03f9456b03f9640607f307dc0fe68f28065cd3a6059431cb02cda062c8b480396555b6259b60c585611062ccbe802967553c1b28e2c60594815b0ac240a5896520a96b53401cb629280653545c0e2cc94589c2108581cda032c0e91032c4e2d89c5b135c0e21431c0e2182dc0e2dc90589c23142c0e92022c4ed2118ba364c4e22c9d6071984cb0384d456cceac049b3394009b4393d91ca26b736a446c8e0d0136a788049b6374009b731b62738e84d81ca4209b9364009ba314b339a2cd81d91c20abf363757cac4e01acce0856e7657582589d2277f58b60758cdcd5df637580581d02589d01581d97d569591d2677f50bc0ea3405c08600001b028f0d61c78610da106aeeeab736841c2b85f5515e98c972fead142932bc4c4a9fef6578c9a41c017c9d322450a7421d25d9d33e48302439420e0c4906a5be3f36934139b7ff71504797cd0709884df6744f92ece9c7b13f42b03f74ec8f21fb83a85bedb2dd1e75d0b8fd9f1d757670fb514166b7ffe483145b331a60e8b6171f82d46e7f973241e7fab06da9a308454d2214b9e82346c3e6af4428f21163f441aa7054bfa308205829e3140816041b040c2f33f7ba53833a53593fde30dd30a196583696e42ed452ebe4e0b050472eeae4a08e705047ac233555823a3938dd63a85b9fce8f9eb3747270587c7b486952ade956dba42ae0e34108594a4078d6b3c22720bc90ecab6a54ff91de7e14ddd651fa328a6249dd8a81a00425fbf1326582ce8dcd648f4d125585f3a3c7faa61f57fd2b1773421fa476f5e3781e2b6c10563e6664d01b55ded1a74e966ee3ff0388e9f6fbb033940c68c95ded83b4b2b55d2dfbc04a191743fd3bfa20f928b9e852c2688a2c66b4b1258cacdf67c9451666492061049825c27843d6ef83e493e485e9082155a750e593f59352ece62b36fbdd257b4865a321030d36f084577a3113e6e673d8eebcb38debcfff6ab19166b3190f327e8f1f54e15ce719818c3f43ae4b306176ee28c548317adc518e0133c21d659aeb77946baeb31431ce55aebf1c39886b73a51cd77ffa7b307471fdeb1718c6b8fe1f6589ebdf8a72e6fabfa478b9fe31223a5c7f23445cff244a5cff149688b9fe2bc440e6fab3a0e5fabb30c6f5211974409b8109a21baeff97a11db08dc69ca9957ae59547d0809166064c1899518300a2a19b4d8938987890857105099b06c11fbcb43184540609295064b20158e2483305142f88238cec06b61c745c7f23485aecd96c36a3c9fc95b4386532884179c7294529ebae1e0a6559e6b9e82f7fac37f5f2c7075f8e2fe9455ee46ee4224b89cda3fef428b746dcc53dcab6d1f57e64a5ebd591872e0f8196c5bd90cc912c8b0b934871214f6a2933904999167e561455ca92b8cbfb7fa245893ff84fb43cd1a2e47bd4874fb428e94f854f88b8cbfb7e307ca24509f81d3e79811e3e79f2eef2fe0b6f2f1b5fa89732cf5fca3a6471e1926e799f62d2f245134ed06633d90aeef2bce78870244f72effde6defb917befd60577798fb23fb0d49187aee73d0ff5a3429ae42e2f9f28a8140c1667552c955224228000008a004315002028140a878442f170384ec5d90714800e85aa4e62489489a3248771140521638c210418420021841840866a64aa046db76a1e1e604c429fa5968caea05192f450143d4976c2f86fe21369b4edcbede00cdc5953c372b0fc285c7e0c23b10f6430efe671bb9fe85f7aa67de433b095a75bb31e6543145e9d51986d43a611cab9d584e7a23bc67c474c3bba81792970cc3220ea83a7718854ac78db8b042b8c66753e250750b6ba79d342eae069e696ad7245c1d6c476fc5771bbb84d885aa493518a84f2cf7a824a668868a64ea9942ab2ca78f5ae54232cfe01900382516adcac0fb79591b91959779a2db0c4c84889662aa81d940d4bfcb13c4b75b8d3eee8239e9f50c9c6682a9de8c9ca10bfca9c9886a66f28717fe4fcbfc3a8e18d34256b772d817c76b4f1612a07283fc94b529f59f3d390c0bda23f4a03debbacc64fed49ec85bd7a21e8bcc80a2f41dcc538ecc2e0bad02e5d849b4b78e4620071e1355c88f316f1b825406d316bb630bb1672528bc0d2121bb418e22cec350bc19445366409662cc62f16860a0bedc022cc57c2e31503ef0a2f7185b8ad88472b01c88a5963853957218f550457983bcc4e748037ac17b0e7b8a12faa6258aab0d354082615d9442508a818ef5318c629b4698a304c09ff520c945278671562aa221eaa047c2a66492acc45853c5011c05362ed14c3e16a0a1b95ec888e7eb4fb86cde4894614a3a271a009c701e20e7015c1c5217633a12f20b2ef0c141257fe9949025c765c36b7c85ce63f39f3767a67efc7329e37d6481ce5b52dd8d5a728a2458507c03934a938bbeb45e0a7c82f799835bcf6bb96fc848c6d257150b3f21424a8027dc117063d436383929cd283fc017a07b6a244f99b3233b7cf2c4c1086e9b3f9cf7e4d5086d881511087716627088e096535892a279bb46011c20956bfbbf57c3b614f0ae0f2f50ff38e4ca301ac7b6c564ca48440bbdde9e1e6aa3f2a8559719ee67ff3b829727431fd4ed3d239a5ff8debe50a2fddd55777dce2ab8d568983ffe6c1588dbd4c389b8197076333f7e2616ce64e3c8cc5d88783b29e3af13016531f0ec67ecac7c1d80ff93808eb190f0b6d3be4e3206c673c1cbcad998783b734f330d0ae7f6aec3af2db25c39918f637e7104aa4fe376511fe2b45d0ff9a52347f941ae47fa62e827fa50cf27f5314e5af5282fe8fa945f2a7d441fc6fca22fc578aa0ff35a568fe2835c8ff4c5d04ff4a19e4ffa6288af36cfacff3e6d13c75f7ae7494d99f0e6b70f85d92259ed5bafaa85cfb8bb9413a5d9a928d07c4bce8f11ccef161c03628a8b5f1a2d284a44aef37137dd7613fb8c05b37819f50222d086bc0dbd2e6268e71c70946559f4ea71f953fd54f4fdfa08beff429db8b8476201c77aa002fee8411cdfbb6eb97e49c0489c980f46a7bf2131911d9c0358d481db1832ca4995986034b37b1b20f8104f141fd8041ba0830cd23cd782c07d20b4dae4648b769ec357d78f117f1c34c8ed7aba6c7297a7b14e3a94870bf178a9b5030414f8850ca060560c83af9511c9c20dbecb3348c8738ffc8cca5a33874048a02e01ba188e7068a46a91e4a6b2245c404aab9294e0e17814fa36e5f2c2583f53a6bb1c61eeb5baa669315d5b9564a5461b4301f0bb3cc5e76cdd0bf84d677020a6572fa8fe1974113f5f4852c99641760e5d924b690d0a3d7e4c6ae842f2af9c67ff7d0e5417fca03b4e86567a5870240410d965ba5ddf09234c8de47790bfec789b65353e34cc7c3001227ac84be0048e5502c78ed6ea7f87daeb8f400035a5ecfb47f874e2ead741a40c8aa53e1fdfe172551487f12b4be40c3796088300b5dc02bd07f6c4d42863b537b82a557ef1b687c94715f1fadb54618fee9e3df2295d4b9540930d446313e9ac25f66c0a893e936aca95734dc93017b6768f88a444351a9e9e3aa20fef567dc0a1a08b946d00414728e99d87260af001b8388674604afe5b7b727f03a77d1964187aabf3be754f09737807f0df050d449d767a1d96fa0f8b2ce3548e295b846c8f0742d133c3d593121beb5525b211018b289d93a65b465ee51532e6558eb8d24ab70df8612f16a1f27836598128916632f52cee589b9cd649f8e2d20fa45236c1a105a36c3e6a1ee618971f729166f197e0e45ef2916e91fa5dcd99be2ade43138204b86a3e008ab98be4df10d45143bfc2fc4ba6b2a26aca6fdc123778366530ae4c0b2193a07f509d338d7177d2f419ac0d1198195ad40ce19fe48bb5e02650f1cb579eab9f1e3a65e4396640f945d5f357bce2084fb1c6a1775c8464efb3a6c643e9e6df3363a0a61b908ed68a930e3b0ff6b7b376d784cbd8734b2577473913c947c390fa8bcf5335c8be3c0a0271745b74da438ccde6ff204e6dc42c0546b0e373b5d0482fe2aa5c926014e3771513dadf699385ba64ba3a657540500e586f2e8497aac5e2e5174b952fc57065390e93ff20f5f947770949145c43b89406b2a08c826194d6834d70d3a26d7140b64f96537aee00248589012a09a45bccf7e815a82a6ca1330fbc42ab758e11d54a52181f266358ee0940da9cf765cf6efa5aea3990c80c67459dd1d633b073a862ef9f2a439424997878b1a58b01358ac19aa6628d79083aea8ba4da363b6f02741d2aa9268f0c31904a6d7963987a8ed352006a6f891e7be024e93c561547dd3b8756f9af551bb69e21e592eb2f099fc114853a4e48b3fe078e68d63f28a060457a67281a0eac7f6e2626a2b5f5b61f35c575ae82cf6f25d5c982932e7f8c6cf61b87118fc134b411f236570a0cbd294a881266239e3de7a9c4e8a018a2f8cdb9fc9645f6c0a257e264a5d801cb1ebd4786cbaf10b299ff4e436020613f03a7fa8c88869b4a4f07e59924c2cdf6a2ad4088cf1ca7362da92d4ebf4a304e564fe549579ed0f314fc856eec6d5c3d01bf141025dfa2d598981be196def2df9533e31e9f066daa0893ee2f900b3ef845035ae4fcfe03e82df7f1c7280a0a294df869b1a5e7aee272c415ec2370f78073c211c693cbcdf3da2abda1facd000c37d9bd6087125989f3cfc808b0f21ca54b049c2fe84fe24970597a428d8b1af13efab30b82dc3b89e0b9fcbe9f6c6b4164f7f69fc5863c5133aade7cbff8ccd0fd02b822840e05e4ea0f70437a1bfd7ea1194a9212a82758833f6a41c14c185e052eb69029f519651bbd40b737a798ae516a8f5e15deb27930a334c04d989c8116bc312593caa489e403cebb5a916c29c63d66f31db5b8beaba6786871f1ecc75c0f42cfa9e7e671482229c1ed436d8c8cb8f9315ed78aca7fe15c33289e5b663473824f6aab7e7555bd82431c1da389fd530f612607cb57ec89e0eadbce922cf2b9402fd7c98f5d5aec089eea20aa6daf8b1ccc257e6edf9b59ce76ac9fc9c8e6d8ce91dcedcf9e082fbf8f895f85600e69eb48ce78f454c5105251f4713e421586f0ee3f6c3535e0b31014812faf32ebe7db72e807bc11cb4e9c641ef6ddc667b3b5f8f695a4a03f20f48b65060f3868d6ce58c63fde622928732b36293a0f879fd7d10c5e45e7190452003318c14f007364e188ff61a29995b2ae4a181ad9c03d58f3ccc8e0784e9003f0f81d300fcc14599baeaad2e975c53498cf65902b32d340725d15f256f4ea4e027b105e561721c8c517513a2ef0316f9ac5430ce8be02523fa781d0d61064bb7a698a9f16551b15e3a30ebd648c89e033634681d7b1f1585e7cb9739d4b6410534e0973fc1a6d49771012b555e3801393ea8d5a821e9945aefdd1c323220fd4a1f2f1f79a139499e4a2989edad843a8d54a3647b62f64ec89875710c8c47f2f413f4e69d3fc43accbcc3935a68e1685c6a45bd06c49740b0ac1f9e32f1d328ce73ddd9f291da37e536445c562c0ab86949bd7a34b7a8396826ac4760bb704ad66f011046b5b04111a3003e686c93a74bc7fa3d37ea1f03d1e566c22ca2da6d723dcdfaa06a6c625ad5c856dbec0d5110a3d9ec7ac5871683c05c078b8ebd1475e8a05949c00bf562566b966a4b51fd52f71404bf51dea3cb083bc899b4d8278925b18cbed8922269699c0ce1cb1c79b983d5855b0538f6e91915c3bcc3ce5601218325951f3b53222867d9c13424a9499667306aa2e19699b14e21c060164c5d7de6f755c750eae903c998d378cf93a3cf9cdf61f23e6d3d88890a3603027f65e2f20c4e9a3c1b6e5c8d5df763c0a13406abc9ccdad5109b0672f9c914cc720d3b598b9425c91f9af9f8968371862ad369946bfca96ad334cd0347ea1ae6837acd300a53187bbc0aa54339a83a966ad08318ed43dc87ed19b8f88d6387e4bb880aec42865dc491cf9d1627fce440243171306d25895b38000e1fc0021b4efb7927b82249192e270cb1ceb3ccd5638bca46f08aea45480126f16668f92b6f8cea4e58fbdc925e82541058ec11fbfb95e202148e77326536336e33ba0203c12c831284f4185a911a29796e4af16daa3115d47f2cf8efcd26b80bf6ec61fb5288d2d4d883c75898352db253187a7792e327b5e07e9647d483fdee4563c2fc0c25c6d6ad7fa0f7f2644038e5a96973bb1643ae36dbbdc10df1bd0bebd4c171abebbd867f8b9c3c6616f44cb3dc96ffc818b37c144c33c9dec4dbc407af833415132bae51662153c2004d7bc9a33959556eda46572fa0ec79d04e90d79a6bc7bba9cda138567027c66a0573fd3f1addeb286125b07e036327c5d2e14f14d6f1e039cf963b810a71ad268408e40a51e7c91003e741dbb0d1a55efd1c61292841a6a2fa20f99699f37cc4a5429ad1195f84e28e40823539138833d3da5c67d880ed3af4bfc2e6535f625065e326dbbf21e511de3d22e01a9495bfc16c4a04a081a23ee2a33a0c95706e628f0f50ac3dba388538dd0f323924c14a0dd9fb52b919ec2b2e751ea5f21d46d433b4b139258d80187a360a705df97e6d31943aa4db5f0b006a2bbd838cc6ecd6a67a33259a8ad719c612ff474165ccb6c90cb207c7eb27ffab11dbbf01dd8d95a3452d8e29dfd029333f6a72f1bfff3acc8a00b104119c557f986d952815dc5a1355fcc5f539f148888f1ee1d3a0e730acddc9fed583870373dca1da12cca43df09ced41b5d93f4b645b6f67418843be171cca7145f29a4f1589044702a93262c6eb5e6201581fa6107608488cb6830cee4bacbb65426866b59d7520953e742713bd0f452fefdf87f2acb200576d769e1e5735238c0717166c2d4471b92a615e43e41a8e1803f144a2234b77958aefcd4a37f68937eaed9f9f03b7ab199c5a056e2f6c43bbe082bbc76ddf2bd0d6f5b4f8c6a9d3be5911794a378452e264a9b60ad73da228088b73bd33e9d6e27e87fe9bd8a60394b6aee88217c4a80fd945a5f2febdb50e35c73cf877cd5e33529efbc615b5b4d21e2f3a18259aea433fc9d0abc29a88fd01de5ff09043774e2b093b438649f57bd37382838a073f52e81de9caba8a13abaa6ec1e42930db97a70310adb72d94679f0d95256951c1556c0bca2ad664ddd99730ce9d175ff7716e21db9286b0ad2b5bfcab1150192259913b198515715fb46c0d36e3473ea5b9f46d3889f08c897b35f1ae813e908938d2f594ada590113d6748a641882548d3eee59cf47ad6586bbfcc026740c0d1118b5d3c55d70b11f50cc4bc0cca02c9606250d2605041ffae4a42fb1c834a4dee269493d349a064dd1764c23eb6023511f9833262f34bd5346908092cc79bcbbbfc4c045d722aaccb2e54a617bb4c177d5fc9c5473f643130fab8f4cb39651a378705bd56d56794ab6e3bcf077a59bf2857002050fb4ff12bd2b69d1af1b90c790f65d6de74448e916be95ed0db1dfd328b1d70d65f47d1808bd3d9a2f11411c00d34c080ab404f95e2afe60dab425f2143bf6340e80c1388a7150fb78fa84758e8910563bbd437a6c5e4edd4a61c73e43a94a2aba5090ee871f9cee14f4b89beada1090c9d86cd3df31c7fe82af584a6e5c06e7903f603b4efb46cdc194758c2c1af808947f40818949ca0dede139c2baaaecc50959d4658b48b386a4fb5d9bb00879574acfaddd9ae52c2bcc51f40724237334c90507d0cf6db2d9f70e01ec781fba42f6e4569590bcfc828a0289800431209e4c93b9b4d4aa4e2eadc3477126c5fd203e642d700f1fefadf4544c1ffc981e1e0194debeedd0821bc3b440eba19c5871d40d896399618a10f6c96ab47f166721bc5b13878330105f3903dae0dc497b33bbeb0ec45ac5bca5c31e869683ab85cbe526d8fe7cf0b8c929325008e08aa358aadefa24950552e2b88592693fb5d8a288b86da52e67534c39aa7f39d959f9eaa62c871322f96f03bc2e00ce552c26aa1778c73dcdbb1eab5c6992760aef9ccb1d5e50e0bd48f3632b96fdce93eea22268b7978494312d7004456618d51b4f14e33e8923acd6f3980cf374be97e5916dc3d8f34f465709ddf765d4f465e0ef13cd906021e314e883f8324c8014ffcefe8a39bbc9a712c8ddd6b7edb22369e678fdd123fad6fce46d5443c2023fb8032ad526d678387345628aac2419b5bf3bccc01b805bac01b0db9e647351cd6960644a5b141cbd4ee1e1dbb4b431d14b22d25e4a72a6dce4b6ddeaa7260ae5521efe5b41823659ef93ac730e04e2be6e12554bdfda4de6556068a295024c6f6229fe66e2bd4056d7af805fc8d05bdcb84b6abb1a922216830ef57cd8b9c626c013ac53e0d4ac5637f54a7369942719db5b912ab785afea6131128e54dbe8c052a8edc3891513ae1bef7670ce5dea34fe9084790dc19fbcaf378b02c53e81178d98ce989d05b6df65d35b5f944915eba3f9aa19e8c9a09e995aca9734a0c06cb3abf970e15c25579d6a2fff3a4b3517689f9fc2bbd69b6368ebaa112e91ca523761115fd3e60890a1bcbf7a54f50429d901303568eba079d0b7794e7e1f89c174312a769cbd96051f913532d1176287f046a4bb462f143158f8a61ae4dc877da8b3360e4a90df01d3e7d218f846c73534a29f2bf3bebb0cea3c8ae9649d5b6768550ddbbdef9c293da9a4b451afe58bc0eae475b50a8799a3d3b69822aa399a1c7db53938466ea7646669355c3848577267cf89751cce728d7ef3d303777207d33e859cb6cef8a81ae3d14b730fccc7ca8834c9a553f01829cdce00a23e96af7dfc1aa990fff0122fa8aeb112c4d497c4a7989c9af70ec5b43c02c74428b9b4883bf7393e64cdd5f3e7c81ffd00ca57b36d0c580b752ea60d030d68dcebf71d6b220a5b8cd3174363385f479f6ac9beba2dd4665bd79f49cc9f52630de46255e0b67a9e6889dbcb45f90299b81cdbde01d82ed6c87914e5f75cfdba4b9bca28740a6b9c2da18ec2a468974d7dd39e8d888578bb8f39911936e58a5f097e76de4b2e05a98b6e7edc8ae13d98ddd48bcaf749262e0fd790aaa659e6adaef1a08bcbf34e10d940e91be4f2c22573535b80eab8f2e781a5c8c926bcadf5af8917b83009a62a36aa47ef8ec7805787dd645ecadd81a7494e4b198e0e9e2bd4ac24411c773595ddcb1aee0dbceaab69dc9f0dc3395214eccbe9875f394f7e34b0fc0e448a3bf53558a37ac31a4420b333626f5046798047d1baa01553bb77281fbba59f981fadd8475bca2d791a43f584793c87b61fec0c3e6149aa0fa043ed6173e1d68d196569ff29eb4a3c0d85cd614330b01986e94a7533c0fc096d372f01cb7b53121c6f4b00c10657e1201bbf76eb251ea87d68217a5e1ba4de8bb5404e77118d092d36e822dfd12d18223d721219d809dd9b623781ebd194f4319e64e3c7b222e33ab3cfe0a1da0f8b9da6ee504505562bc319f23a2828c1f2b8581ebc5d7c668da59dac1f3532affa704b551b7b89c0121dcaabc5e373831b7d08cc869d04e6276691a0cc9c4363400e8e057756e6391c949836a7a2afad4d9876e984fb715662ec9f1bc3764305703e31ed431a91d83d94e61d33023187155d0f8ae6e7688c15ab881f29e88fd776e7540556048a15747c59ed959844f791f984fcd7e13add161cd9ee6b6497648815eddc4cbacb74ed74f5d2c5259f761c7bcf8872937870ad42e44acb5e3a33952fe4a909c3de93ee30c593a499a2a54e720dd950880070f8c3a4ad45506b1d6f7a056415014ba8a3d82441f9e664bb367d525e84b26ffbb726a6fc71103681eb0c0cd33807b2f81b0b32e7a77360e3865aedcab34fc6b037388f8b46d4deb948bbe566ede70eb326ea5ac5aaa1498315479fb79c48eb568e753d53a4962a1173aae03b1cce5f5e8483f8078fc6e73d56a3c405efb0ba034a3e489c76ecbc0a24e20526a63be1ecde1736b85f5d22215967640a62364c361de81e1d625189403953c04e0e692c06896f4c8c536c77b8904ecf623cdcfffa8db3b62c6685962f2e23512b93ffe2f6a7d9bf198f4628beab0005475afa433e3e4c1ab899f25262b1a02b0212ea817fe4afd96355db8e8ee03bc8420e95337de17e63da10044b552896b8c1b319db5f186321d89f67b33981918a2f8a62399a207051b39b5823d2a3f70d1ece4398ea55f6c830060ed146cc34c53da63f28c0ddcc9ceaae6b58201decc7c099e1b7a0103f359d177080258e333effe242200112ebcef177259cee837681b3c0f32fb9982221a68837885ef8e520036da43fc070968d6280b4f958cc8ab2721e2a03a934c9e04afe078f91730243215ac3de5c30791dd6ce3125759175ee49dc6d01013d8bde313093e3054e9ee60c1e5e96d12475a7cdac8944c780a5ef7f9093d6ad44603dd228fd9dfe6f972ac4aabc019eeb112eb5f6392224f6a75b7edfba1eceb524fcf3d25504379d68dfb2c2fb0a03c09bb7896831ded9f0299483febaf770997ee01551227c54c18e26371c4d8cd6ba2f97a5de6d293e1b0c013390fbaa29ab39989d9012aad818b3220a08a4c11328704e9e23ee3c116588d3560e689903f842784de531ba6a17a1c105fc0d3d9df4ac9a65c5f9e99fa7b7ac78b182cd445cee641f57798b9618484f97034c960b91af652aeb400eac2952e6de723432d9a046578b91fee347d3d75801ec0641be6677297ecd5200fd347e5dfe39bbc78ef2e7a2ad21a7ef88b669a8ac87559e3f5b1421c9dfe6592523a2893a1a25a289a1039575215989a4046d7f01b577e57056b6b6cf9b81aa7fe55f09c7f3237b296563ad0390c1a0b3cae40be2201b96be1fa265d7ce4d21a6960398a3acf71d66f9c91953a2caca80431645b84f9ff06bc3913fa94f26604548f312cd3968b05215a1218bb73c643cc00993a0548201c130a547e0ad275ad87afad7f9f354850682813488fb9e00e56d0cfc3d5f971d58c29b54afa4b1c1309c1eb88a058197ebe3cd29b690ef9470dfed28df24a2c1843c59164b9b7d56dcec780e864ddccf72d634767b71e98dcc5791c0d595fce1668df1143a66c90518ace897cbe003db1e3f0dd13b4f91064bb630e807b6d3167c6cab510f31a6917d37ebdeb4d5ac00400c6e180887769b91f4ed729d1bf8c2016cf83e97fff77d712c3afa5b340f1c17143668d0f7a253fbbadf047a68b3cff82d2e7aa9619633ee2fb1b175ba882994c6e3380ba52c1f485247d33c91719ed164e16a7dd9fecdb570f70b59aacea6e21e26092cc533441716e9d23f1a32d61e5248c95e6644b8e921155871df4fd15fb474847b6bd7e31903a1d86dad8462e5850a06ccb657b62b00b53fbf11eb5f19a18a29be3edfd87bff134437f3914c96e921898240f225818f4972e659a9b087463434900dcfb430cfbf239b7b0dcb60497430d49188f678869b3f1fea1053804f90943cca66b375449f28ed59b9fd1527ad2d1f696bf644e016756cb48839e0ff4a3262683f9396f7aa9c275e067c50723e05855a095caf874178bde1ef7580bb600662b594c2a46745d811f092946dc7c01048bb672a2cb0ce0fe3078d2599a8f5cff1ab3e67de6dbb894804d172089c778c3b741cced089d0e513b9dab7357723a17aca1c256ad0afdb882581c6b77d269fc758fe2608e4f15aea0b61256786146c3ee7abbc2abc530c4abf19db2d6cf40421e76254da1737ce088beed3e0e848b2e5425c792ee8413cd1fb367a17159f767ca7f9138d91f70eb49b716797c854987dfd85a90da46652351741387d6e692362b2fdd3fdf3f6143d6ee3d5e4351c4af354d46d1ead1b45a8abb72d7e0c6722cb56619ff376d5d29f0d47282dc1ded0be37d40288ea9ffe7de05752be8600b8b3f83fab3a619fb32d418d3e419ff7355e45af9e1debe4c921051f3f1f673d838010f59f9a30167ba9f2ea5cf12bdcbe1fb35f2f4fdc6cd4f7de37c956153529d8122c1a8b31afbe12cfe82318e86a3b6105e95ac57cd68c100ea9accc4974fd143ed91b5e957792ab807688e96671ff9fd59ff41c42fef62f87c5d3d03c0c1df0b374ae394a4b25bade23a36467708831adc7a4975d4e213c7cc9d0abac2636c243a5c9c892a1ea354a896cb721310a86418e1d404178e412236677e02cd0ff5c9a94aea8c347068a2644e957d93268acdf739927a3a1a180b0b0f7649427e87aa8c11144face35365ba3e4d85a9bde68aabac37d2e8dbc027517d714cdf18a0ca88c3b689bec15cbd0b3eb320f17508551f7d77180d90001395730c7b3e839fa47005f675fc4759f739c6c6f37fcdc6af53f7ef167337daccb5f28876ccdbea9d85914f7ac4bb5c957dd70914c031b35688afcdb0f77909f6dd4ecdcd5079a3bf09382066e1905e493f1a6950d68ba9599ca5e96f2cf80ad7ba43ed7badfe3e2031e853fb7ef9b7aaefd7290d932e6ca587867e66014836d871639a43a1e1ab7ab40759dff4ba9a9a7d0a626c6acd85d410373807c946eb69a7890928a9d0fc11d18b648ed19adeed1a688e57cc83660e60da12495a35306be09bcf0f3138e37c46b33bdfef35abad9586544ad044b3f007ecdc919b8830aa7de3e32ab2fad561c3ee30b8c6a658b1cf1ce5765f2804cf344020dc75309b0c86276ea91180ae1998237c925a897497d9e57989805cd626378637e4bd1c2e891e98093c4f4d36b5d255843e350e5a3162e87b93cecedb64d047f91955baad4ecf08e41ad66403172c41b43cfa42d66dc3aa73c2c0a3bbc02d4f93a341fa7cf61fad41e81870b735072300c432ae1f650c4695b121c8d89d8530b1aa21256cb2eb3f758ea1ed20dc3a53b523997e8a49c142a02a3fe9100fd8ab8e1bc25e1b17d2112a848d38f05fc1891756271384ed3fe82530ee32ed70ec2aa0d25a5f883f55b6e9e5b4acd1eb045d6212a42e7c4ee2fae65c1cbc261ae27879a7b505e2b9587dec9a02a99a4d3c7623cf68f28b82607099247e97e4fcc0c7c0e099f21ae6a11a20830d74fd1b92488da7dfbfb401145efa41fddd8a9ff1521179695b05961492b49a64ab505fdc780101cbbd047a25f7aedf8544c933df6f129f602f8df82043615608c8c4a7b8080c791e141dd35b5b89463de23b8fbd68570c9a2dc6546e4f023c36ab030952ca3f1f2463eb62b57c228769bcba368a6c1f601c3d75026a402c77a01f4fcc4eedf3fc066fd3de1740244e345f8d64e458216952f5e0dc909b048d493c804b30873628eaa3fb645d1e8b3d2c732b964db4337715320a74b48e45204f0d788de4365813385b271ca6d1758ee6806e9a8d3202084a9a6dacfcb6080d9c8b66d6410304ab8d1494e4e9ca79aa4daa5eb1a847e6a50198ea79c9ffaa33cd9e0c94102d2b83923aeac8db8c0b96f8a73d5d1d736b4c6edfe0824623f4168403673079553203e06843bc7cdd085a5ea7ba0f563a10a0f330b1f3aad9d51e71291f194e34c86a4fe6c85dfddaad5ca593f6568019cd20fe623f2a6fd326cfe4a976a6eb53b4a09d5e8f5b8e80ddea389884d6f694ffd46e91f37b37d66e1213948689a5424fb115f6db1e3672b4902467bf536bd5c2d12ce61cf3af0e7d0a887eb33a5956c0407b2566c218ead457d6557833dde3543b59aea9a1f1d5635c93d2a19117f55619d22850ad7139e35854cad03557633cfe164dcfed5f7c5e56b20c5ea5b4285338c1a0dc6832c8944924975282cebe32c86adbbc28c3c413272e363cff4dbba4c1659fdd91166e2b27ff8d5052ed8947c6a04cf94762b22e421efa113324141817e87d1962f7fe596ae4a73f690f4f25152b5486e3545c91d23fdae0a657130de38a1031ddcace3a77a6a2f05a05fe80c5e82c938caf0b94bb578cad2d14927ea0f74ec8788211459c393e719141b248d8e5de06aa2dd557bf5e479b232b4cc53e1e4eef96ae411503ef02d19913400decdba2536616a2b27720e88b5a0121d2136600a4526d90b1b6b48380d5656d8d33b2d03a69e660c9182f9fcecd390de46dc8bc9427150674c27db10a7a6faa0196f3d37303407db942903f956682e26b5658c9a5bb46f8979a57c6f556cf206e5fb869292619c2e17be066d22ad7fc6527ac5f9b7c2d52122b759ab02a1e03b8a07b4f27dd3e65a630606cfc9503f33053574986bc40498af533c2222394d8c9b19d35f614cb35013c8c528fc3546fcdb303879d90ae463c7e01fb2102b5a03e424ba3b8640e1301e4e3c2ba4578010224e63b2295347729eaf6163f9818f4edb2b86eaae7b97c3f8ba408cd8c20db9244edb7c8346b34a2bb52ede1ae085523ef6b4815c8e55a755d3108dcb974e56e75025c64f54d1a13fdde667ae5d86e42ac86e8eeb64083c881feebb4e6824eb94e24b1d40d960a52cb19e8f0cb0faa5e9918fe4c4b97d56457e4f47b7a6c2b16eba590ce63f548e9e53cff4ee1321d75a049b922debd82298410da9ef9e0363be1fb6349e1ce11510fc28d000212d712a6194b9ccb4fcb896629eb6d9cc2c5d5bf109ca632dd951f58a512211adac4bd8e86faee0ba3ead881a2fa96a52e070f9a14083e0c927faed7acf567b7d042eaa78e6b7479dbcc8aa401d363eb23e7fefef02d75c565e24f2df2131d40abdce48a379508cbcd9d378271e21e5d12077f0b3942a6c965710b40eb1da4bea65fec057eab7681fb13557f91b8535f0d690ba604a87245c9133c343a440ddd75f55a43e13ee86293191ba4e5a85278902f021ce566bd59175f1998e27d709667a6c81bfe6242bb0b58708898a375f9e96292929b03e9ef62c3847ab6600515e2645bc5b1278c0471023a8ff31e5239508f92d1f2c9e015825512ad1004dfefbb33c6568132f6ff8b8b82a33a352937c06b0787ea7f267bfa8d79c57c9e6a863f868c289dc88e74d8066bafb9ab2f65535f59bed1f999fd1eb6275eb6171993ce246b4e1d589a69df11d70a18fdf9027e6789ce2c6008894bb8e49a133e95fb224cc43633d5db26a7769810552c4ca38f19f9564026b6c3ded5feeb1e16133f6b0f1e3f0ef3e51b52115db424798b101a3b62d1e0b586f1a94bb6d075775ffdfe44af578f230615954ca2328b5ce0147b3fafcae80470863fe2e9004b151ddb728096c4544753dd1d151da000af03383ec0290001cf0bef1fae449d9c4cd31a171c4bab5c6d50e837aa94a522b675379b494514dd6bf81c7c241654299b8fcfc6d35d4402e178a1454880ba8f08909dac939d5f21e8d2b699b072a5ac0d28b45c36067394a5f053d3f25ed1fd1ef9bf476a33c3fc16e024b5b97ce517e1415b96e57af659183fb7f75b0472ccb9e4759a1484df24e35e852dadda279a652d509db91393e98da19eb1d2f7dccf090894d08e0f7a5b24c37c9014b1d2790a188f8b183e8e7a96096663e1b5e5f93544e01d1929c8ebabee5e767f99d557c0e4b1ab5da6f9d20318e9a3d4a1ea368a9e0edaff61421674429ace124dfd5f8763811829f838ad7664b4fd1085776732063bf64b24499586b94db18f15aa008461293a80e24537631393061204d922946a8a627fe3f5f052447f66d07d1a64de1f7df7d7b6cbef66873f8a74f24e6c950c05aa37dfaae4ff28bc6647412a1f16dd8298cf2bf6694c4eebed25c87a7e51b78045c168404edc8be3a3e385616b77f3defb268bb11af14967890d78bb88a56e953ad16f13a8a832169bd5432a7c77dd8936e2796495cd9a4212b3871950ac23bce4ad7123fa40d152b35298521cad392a07247d9a68422fc26c2dbd75e1fc549883f7ce53d883303c60f477506273044a154f5a6b5adae5cf7bee1352b3baef272f716f3a0d15a26caf64f13967031b10c0451f1f4b9f1c9965165156aef576c67c938d02caaa5f6d0e4e619af88d46c523829d8cc3595361f22f521bbb36143f59d597d398d112d324095fdb9c258432e3545fb070edf95cf3b87e807a2772b5844fd571ea526eca1cf17612a12fc756a141edd8d3b8f4400287d8c3c449ba49dab03699afab9606a315a98dc7253cf232bf245149a31b0f180afe0c0a9cb46b15a88da77bba66b83a5a0920fcc848d50296dd8a9c629432f3b74697d6c16da89a0be8df4cb60c8a7034515ed9442fa11778df92ab1d8a20cca525ff2e07d9216867275c44df6145536c7b2c97c74c71824a56c9f4106c87c018c32063dda17bc8cc4b448ceeccefcaae76d7fbe092ae66a2151519695ed6dc11c336183bbaaccdf811e99fb28ebc322aacb2c7315421628275522b52371bd4302799de9de40e10ab2d7b6bffd96228338c6a010e036a7e4295b983626fc6386cfcd24746c70f375decf69039e02d2cc31aa8023a9a6c5055ed9388641aaf739ac389b6c3d40e38756e51f71d9b9997e5ccbb569d1248931afce94172164c03059e20fc1cf3f6d0afba332bfcf80c340ed2c119053f6c12d70413bdb3ed3917c495af5af15824a66b069713adb56d761afbc21365cb6f4f0daa5e9ff66e946d10e42050f1493e2ba08475730aabb546951a1e6b00eead2f7c9ec4f6f2093e08124bf2f9772a651a3d2267b31f01f3e214ad4c71c265c3bcf3a34375a9845db43365b37f21897573ff17caa52417ea6a004fdba658f690339fed4ff9f1be65d9bc90e49f23a2ae2a35e371a630b911077223a87858fa951c83c66b3528ad9284a08bdbdf139b7a7c0a30cba7cc35baa93db8aa1f63014c30f78d9f6e722306c7d9e5e6c699b5966d0fc6a465d67d64efdfba80dbec04156785d12c29ab81207c526dae35216956fb49a521dd8d3514703849ea79d372648fa9d681512f0960dce64c1d3cd0521ed5cfe1623262ca04560b5b5ab87c1c29fc4f933819f412f897a279bf97a4a8db109bc5657be2e5d3197b16e2f8d23e06b945f1245592e46f1e6d923543230f0fc0ec19cc56c91cc4979d06162df58f12306c4abcb6189f1e7f343cfbb91c7bcb34ce08979ef8bd98f55acda9cfddd3986a6791ab15e5b64eb5ec7d7b5d914b9496c10ef9d13cebc481622ee068d07451fc1313ff2a049afd2f9d070c146cf0a1820541572c2489d90b71d3bd0b718686ed821f4f980c1f7ccf079df0299f590c7a898183eed2798886689b62a8e304acac9858558561ea03ac4c7402de39e86585a877cec67c7ecdc9c59f1bcece3db5a3eb50da344af5b57b8dc7e2ce73fd078edf625d6df287eb22516bed958c4cd786cb4de74c9ed3bacac7851c9dce4914c1617706d55248b7659ba3f07fc2d1087a5a608bfcc61ff946202f785bb567012027dd4164d95633d4d654bc8af1b23ff4196bd1f4436b18840d189d5f2dc8001446506409d31f47df0cd1b52c67a40fc84dff802d001a863b06a1008241c55ee5f170845523c43ce0d4ded2d3802078e52d6a4709f70bee589a2f24fec98b0eddc62572a42e703e141514f3bc9b5ec8d7a09dbda24ad9303ab05aba22036e52113e8c213f2cab3823278195eca0c3c9b3525033ebe22f3335907a526c8e6e031f70c4ae79c888ec01cd564fa96cb607d2fed4286784b1e97c83d0bd3c0927c01a9fb8483bc7fb5d8eb264538bf4dc394c19e1b93e5f523a58243d7017e757c598e78affb883224b8c63d77d0ec99399d706a1ee0c221414b52f1346715a6dd040f15181bc949c2ab3b01bd30773ba55e030607678df3e37d6e7703268cfa1aabff7e5c6dc8c3d818e8980625ba22287b4105c96f8e508cae50a325ba1ad2f3e4d76ee82d1fb8608dcb2c259aef3316315b5f34964cde4123f29f3006d3a2ac3924c605d350151cf89df9fe050fb65a395d049248ea9434ed80f00ff77c7d5a8072fcceb3033fd321db6c1b4e4de7b7114f4909393ecce977296f385981c5d7e731c25718a1b031e24927dd4fb8729921365ab53ba1af3e620d4a7477589d8136b73f010cf2e4e10c8beb1a1430d9408daa05b0b49182104a0b0276da7105c2e0b534472aa75934d5cc6cde41c5b164f6d57bb091b68355a65ba689546565b7cf3c57c7ebe48e4b66f6814bad310d05be842ad91174d142d2897dc0db18fbf667de4db014532d0ef34354c3337965f166f0948de026cb16703d3e50ff78d13372cf7b4fcc573608f9787aaf13a8a74b27fdd01bfc2ea8b612b7d99d2e80b3afece17f05f13cd47ae2c8c5c16e2f4ac135b71543ae1ff3bd11bbd45d30a98ee6fae17238a53a6ad5e0996d0f76703c37ffb821092b7d9b33277f49ab4351c50be58908968666315df88b953489228b6de37fc50fca2dc47b1d969227ecef5cff09c0baeb6eb7ea634ca24befc4ed9f04d007247d0f1ac3b258381c6609c205aeaf93018c03583eb3e41c1b76859c8304a6f4605991d4ef5539497856bb5f0dbdcde00f602a674c04c31c94e6c64ca047d8477fcccf4a15e2f961256ec329ec0f66399f161043910b776b07f11f138f0eed96396477d6bbceb2dba9567bbb560fb3ae23902163bcb2f428aa86905a50e431dffc6abe2c6b85b5503a154697ad07167ef737da1e13f6132c736951a0dc2d0be0b72ca17373a0b5cd2451b1b8e77bb8fe36423dc48dc22f96a98c6f529240dfa890d3f004043df0b525a6a4dfb4c28b713bef5158b4e4644684c4973dc10a84ef4f0d5584260a33c7566947c3c63ff681e13fea4a1cb04006aef0842fdd9e08995326abcf32ced731160ac4c155f369567d8ba41de9465d792ff6ce8c8579db315727f55c4551c0e511aafc18f32ae698d57fab484298e9e8742ad15b1122de143cb4cce2360b8ee3980f5802886bb4998e35fdc3bd5e8ee858a151b6c2cc8d9f18f5b91a9cdf754624522ad0b3446b4bd85458069e28ebcc136c8c368c81fa666b542640c032f5e7f303ff5c8c04c24a96c67dc5f290673a10a26440f832584a782c5a899cf8df91e7893c84057dcdb1a5dd6396caf86f3530e814d0e4051098b519a1a29009c276e5add10913c53377b1a09cd8a51291ad0583f54fe2bc4254630edf8138c754e04cac2a7b0f1a0ec7b97e972e366917a4d94cf9d333f45f7e88bd91e5a6825605a9154171eb9ff6b8762656c535a6dcd778722bfa73c96779f300c785c1610562c48133035a4b46be19ae49f0de8d02ea1cfd5889394584131456a2581bb91176c51d96eb431834a3b6ef6c1d4e616e1424e8e4d7f097782edd5c551068c6fe081cadffe223501e63e0d43120c21b0e826029dd48192706627d0fd94db3b663c98a7903d2a277cac259c1ad0a51ebc60d65f6ec144edd808d60f814c6d23e6ce26c06c0e18e94f9b0169c7a9bbc7e40b2cc84c9eca168c74a66288931c552e082d7f9fa46f0115b8baa8b63d5ea97d489603f666347ccbabb869a3364cf0a6f2a8a14daec559e6960dcbb1cca898db08130959c9524b89eca7b31f81a4c7180f9cc03a679b69440732c236b0e6ad688e94cf3bbcc2a80f480d3689966d9b9a46a9120aafe50670389ccd0fe59c0b47d62aadf2710452a88d657a06bf335d009529219d268e69a7b91f5e2c4b6a66d3bacd8391609b029bd0f6a3ae94a715532e700215ac1ad383338cd66a7ffa9c8d6449cb9610bbe2b199cac37ac04d3b10586b0e2616af5e886c28dba60c87554d338e1acd2bf111f014dec01da101975917dad44678101702b52d61b23938fa0a82fd747e8bdd95c8fdf25f94729433c93326fccb0c06ec05fa81730ed96a1add61d03c156a894793dcf29e229e1e8c1176905b08e6180d62eae973122d11a34888a8991d1ee373a5aa77380422be7626bd37cef09c3fffd39b90d552d8a5bba25bd3a16180997d7e551396c74a887a8cee4b27bd2cfeae49f6d9a3835f71e71604335ed002489e3e2e987757e3f60ebfc7db59558a909d8eefaa1ddc0f18741b3b0d0a6981579b65705ee2c4f88b117a34da5f97cc072b1d1cd0ebf46511ddfdfaa5fe8250cb1be938824ed106c0d6232a4c19cd068f4e493443a71195833c42cc8c82402b99fd1597a8d42fc5b87961ca4f525641450a2a595ba881644fef11f726824d4ffa51f8ed3e269493a875de864e8abf461043ba93b4475384c89effc29ae39f3d4c669a303404ca4ab67be54f89d33d9c4c1bd3cdfaa65826679d2404b033632a7a8c300e5e77fd10a538fb017f0114a25ef7b756e40160a5b0e8fa84853fc4fd7ab9ca4d04bd5298f0191d59bc12910fe28f4d5b5ad10f547bd46f7b112bbeecab8a5b0357860fbe8a0fdcd879b86acaecf9b4c49d506533aae25b08fe89ada9838e8cd014c6eceec277090ff8c265eeae9a018c5f695c63ba35a22d0826330f654a6147853818c938d2004c92aa14d974c04a9f7fc81e402c63406937e33f9ac1d70b9643af085fb2e0048aff2c2f19f98493161d5b8a9f5b449a652d39fc8d5c41e28d97db67d7011c64d96a6a5d5370553407828faa11b722770225dd7381877dc875cb9bb2f75048b6cc2dfa0acd1f217566f55790e788e2056818ca51e870b780575dc553fbf56a93ab4cc4e628a9e829ff9eaa3f78d548741acf6f6944881c9a0caa2ee8ec0ef0bf2128b564004e75c92729e4aaa38d3b05142cecb5d16c65612e79f78988d06c9f06227a7ecf48ba9d021a50f745dddebeb673031a5deeff13869a218cc76454e14af875c5a50fc928c28a61f5a66c87051e41799dda68fa3bacc417e5e76d5114610037e38e41f1dbf804a526535f6da4f6fc065208e6885f679d6d7cfce493129ac40f6b3e52109c657d667a07295044e1a4b1793af187e16a3f1bdf330177ad3c3a95c6195e8de77e6e690682a6c5d6afe7f80755ccef1a1507a97e61e27c05d8850222b3b48c0cfddcf05646ce52fc74c60ec458b1c9f27b8c0ad9e4031f63379b3c0c1fa36b08ee1255132cb4985f2f37444c549abad3bba72c733ea0f8409abdce6e9c74af864a367a5d6102bf6ece44dee4a06db56be65119cbe6671d58801efd589608fef238371415d1ce6f0927c48792a10f1027336dd9792d79fc7ecf437cfc36cb5191969a6c3b8b56c666f1ac8ce803c0d5ee4b7802a37ac706c51ae7aea55ed6794e4f7b49d0ef8988df481614e6a115635e7b18a7d621fbc1a0a351dfd3a98fe6e9b52f60d89147a1d7ce98048e31176c75c31fd2470d1b0310267949e0a22af8daeeac9f0f2bef139444b85082c36158d43d772ed5a965e50955e4da6a7fd12f5fc13618ff78bd5a00509615151f659d4d05be69c1f0000822163bc4dade5caf501dee25c141be8701b6a7a1f20381dbaa964d7051c3367ba9d6524700b589321a698f8295344b00bb1931c6317e204cd7dd0ca20a4cc857ab64f4a1d304f7cac5b920e8ece2666c5012844a50ba885a70752dcdb7215b8aeab3705cdac571254679c672633a2ecc755cd51d4196d416d48eebfb0647fabe71670691a1b276b5590484610a895091071c179014f3d2cc0966e4fe9330cdf463d9e1cd5d889e8f350af098d4a3b408ab4b25653c42f3be95e83b2df285d15bf361af04dc6c73e666ae57a2faf072cb205b804b43e1541e0f70869674efd757e2086ead9bba9f8be02caa19fa56d91702bae353b3f362e15f143d20f921f0a81288fcffc2ddde9a3857387431759fbd120d9aff1a1787bd22e24afd98e9dfefd3bb7320b081b201d3a35486befbd9c294797a91583f509922908a750893d8ffc1a4a5a7d1274de2d2410e53c9204f57309d9f64bc39822551e96a6e4049c16d8bf9fd4a1e8101ca2293646f03031571cc1305dfe4d585a7cf9fcc07d48f1a223cc1776ec95624b2d82bcc21bea1d3a442a82a904abd9973d6952b93d8ec81a6a30a0afede069682518a0bd3e460679916b4f2628d7ac3e213cd1d47860102f6f228764dc5089bb156ea931623301c0a9bee7022a7e0299c11e22f52d0d7de3208919570260bbcd47c0db339b84922dd00894dbb8b202c58ba49a528d5fa2efed8acae1762afd174c33cebc02d4822d78e20ee2cde8e141d0d27bdd72180e8e272cc434b6a5a5ac932f2f82eb719ebe28febec46dbf74cd5de6d24516e585b25bc835a07867fbf81fbbaf0e5a6986ba3845d5bd537a3c65ecc303e9e4244cd48b7b10c7ab119b7f83f3abdc84e2f4cc7c2c87b1f70aae3aeb549b84f7e25ff3058a70c69200b389c5f979f4549219b03074c2063be3820421ce0f66d2083ce07da90359814afd17a4332d817685144b59760a0c39c3ec3ec7a15b719bcb0aa2b87d6b193cdc7200ecce096cff070b8088b98c451b3ed8d859579b5d289b6823a21eca66ea8eb9521aa7be1e5f7278c85b5448ddabab205c77988cce78950bd1ddca1ecfd5a8f0dd1657c69245148a6ddab55d20aba771f178426ff9874bfc86e200de61c6aa50abc65ed91bd1125e8d7f8a977dbb8d11559334a0d5467ec09382d224aea20fcc5fbb4d7d2d9cdd73594247943c5159ce2580b8e1e93c1c537d578330afb119faaecfc595c90e035f851d37aa89c6a59d1dadd69308216df44e2fde72b937231829ab4cc14ee6061f4cd468fbf85e7a0da0f134398a909ed0ac6bbf3023e62b579c9f91167d017a31d6b09dadbeab2409136cfbefad4a86e74c5496154047dfc2e4600b9aa25a72251300c2ccfdf21fc30114dac77d183e365ddd372f1bad8190ab7520f49c6bca6ec968f72339f4442d26c6a8527f7010190ab646a5900b59f8a1b254256e714f5cc640db412fd329683d8a11f2460f8e1feca1d1688c336d246f065e0690d00c52258bf9dbfc88319bef3d35acb44036622f47824c022cfff01e0f6953473cf9f0be029c2f34efbc35ec653b747275a0cb7709b8d92e195d6ba9787c3cb5d3c0a35f0159dc726eb898605f19994e114961844be00e4e29fc5a371c8376ccb0e387621e38f0035c98cc5f3b3bdf934774005954856290a2aaa37b7e948dc2a147b81fcd5e3097d5efc84f68194d33ac7b99a0abfa1e9353c4767785dbf8ca939b92e879c4b636e4ad3a900d333eb26cbd507817d684079ed54cd03c758a6c09879c53f4e93db59446ee594118aa5d4b332d1f287d8338e38d610dc16238046182853acf8d401c13d921ed018c4b3c816fb515a0f8d931944f2fd104542157e658b744aaf75c3684aced82a3ac732912435c4f191db6a1f7c23a43197863931d345e8f4e3987e6f91c3630bea0fdfaaea59515c16151d25a6aaa75ee553a56a7354560b71ed12b64fb979a09852ac8df5255dc5cbc29bd3ebfde844aa9c120900d1171aa448bad1b27af1d841aaf13b07497c4a6fa113a36809f076cf66d206a020c1417710fb2acef415db7b748ad96939763854ae4962ba4a333f650d394e89db2a4e8c7d09d81112de6cc365768ef63e2e38a37ad84f1c6437d434886a7937b8e3926b033051da42c361213cdfd1df015b1e8fe7727cb50894217443a2550be0dde6e6be29b11d045062f96b881995a22d4e6cc419f8a7584a991d8e767e8680ef527055b0e4dc789ca8557484d424a6e20a4d749fed153aab8b6de0da7f4a941851f2650311bee9d5424a20a7897bd84c8f0abdd1284924894e1450f0eb3790e0da660432ce05a06d49b4c7a91d3f45b70ac56eda3ce541079b272531de172c9787a7f6cd401c6d11b47023d23ff6efe2f200007588d8222fab182b326cb3f5d64bd010250265f0567c69847cc03a2c247c53e39b20a52c3fcd64472bac2dbc892b88c5bafa55f50e169dcfabf442f66441ecfce1852df4fcc7fa56f08a3f28a62f1419b9a8f9895058193cf1912e0a0291211f2e5bee83e3fa2328e99e3ea1fa949d852d98b47d226d7ba291e33c353943340c339ce67e969b819288cb35df315c7496be5ea95f6e96a81b5ca377b8552616ab4a46696f703dbd249a880401492d9fd37c44f9984d57d84621a2dbe277be582a5a7a518f1669efc45542ad7b3842d857c69ce795e01a71e84fa377bbb818f8df9457332c370f3a81af065cd05d8876df989b25eda622ff1ef9dbbf04015abde1d5a9f8f4bb87206642464c5f53f91a829125b7c2acf438405da25366641e348925d3e87a84f698f66cb618a387cd2af874018f4b0f6cd600a8b9c16c32e56ee5d65adcf9415992c0e5a759ef4f76a9875e4343fab328e61097f1d5b994d8273ebb80e6eb4fcdc6060c45c9cc2a5cba9257ae305c211c469081c85f415e10435e5366517b3a6eedd05910173dd93f8883f26d6156b6699c91ba6a3aeeb87e414c2537a15290906c2d209811be60048cc6900b68dfb323a555e32f7ce818f43f6324f4bce1f0d749d45d78fcb48d278c0a10322e10c9b980b8a1b0a9d118b2bf76c6948077f0041db20ba57a157e41e5ac4ec61079cb87d885fe1729ecb54b5fe456a56e2d976ae679e53dec84ab2b7aa1caa560fd32adda2b3fa4a082c16ac90aea7816101ebb7b6c7cf2bb0358d35a579b23957c3bf414fe2898aa09f38d40a10f7df60097624cc58e83a2717293ecc7b738f98bee3adbf9247a0d2ef522a0658984f90f805c81b5abb1372a1c619f856f342e3a0baa5622b64c87604b09f455133ea653cd1b6e4aa7651595f01d4ac7c6ee0ac02663004c92a41429ae50d12e38dccd9284e750339c3828a743d283c2f8a0946e5e02f56541f16204606144cfcf06d422efc7ea1fcbafdf4060a5dc0820cb783bf458f2f305a6ff7ef5511558f6ac8eb138bcb4eee2cd9ed97e09dda338686c6df8ef2cea06919300b0ab87423bf71070d985a206a8d4c26814c2423a37b5e308bdb9cd124d7b565bbde7b0ee106f2e15c8225db12598deab2bb1bbed364719bb214ccf899df946573f96801293932038b782f82202c0947239bfb7a8195f544b34f8a42936d7f9260c3f1385a077277992e028733dbbcd5a1b96f9a5c0f2a0faa2878224e05f65c17b7fa333eab4368fb850268e5b026eb10a84268b2693d8987b8e14e09697ca086cbac2a651aeb5cf47cda9d76f84c0bb6eba77b93cde5d16432160c4c8999a66718b12ce9c96f4b5f96a6b02a6f025e247d859b53b91297156ec06277c69d1885e382728203756e27cfd7f1883b0f98b941a735d3de3937efeac62dd27ceb1d4fd02c09fc39b1598a8e4329a3db20f16133f4db841338b2bff684743fb24bec2a764b5f7a21179d619962382b7afe28427b007c4f75d82d780e9c60fbe9cb43a9487e8bd20ee4c1ca07af1b4f08274c6e2ba18f2c3f1f049924fc91b9e05639754b32969a3c13a68ebc738ba57a3110952a430117b601faaf735b889ae98281d59f4020aaf85f9ea08c9361c2f273f8fd180191160713557666e1b0116c672750fdb1dc2dd7cdd2f8ec3a506871c95b50c35378db4571873581df9f0cbebdcd552d11e588a53c88d2e3d3422bfda4a898ab14dd9ca0f2ec8dfb4133189541fe40b0c682a24a581d8187687889112702229d7724d4b7316990c67bc38f5972d9f460517154ec5c580bd4bd87e32a9988bd02d2d00e02d7da0cd31588831f3b2b7adf665804fa5bf1e26f97b1319de5e53cc6ccdb15773efc1a1be3efaaa3955b2df82e9affd702314cbb97dc47be18750b012971239bd3dfb27e39d0f596e906b5313b2c4c9cb5c38153b09ce8cd5d708bd619cc02b8ffd1798b3f1f49dbbfe3372588e07eccb15f3ad90995df8547016a3c45685eda812e5162774074b5c0c0f183b838f0a31f8f6308633a0c0b710cff2c744326a6d869c15054076004eddf9219e7150b02a33b41618e51852181f8b2e68a204a3c602475c5595c735856e548a2338831d237d97c709b0143a7f76500704ae17e86d2492f2acbac728b5882ad4a8471ab8bae304d04108fb14968a0bce582a6ec6bc341cbd4c37995ba4b53b7b53cd46e54aa0c508d6c70d5c76353d3f40a630686055ba955f542ce8f351806830a3be06a7c3161a360ab582ffa5801bc1c5508f20116b9c14dc81057971f0a69521d37ce720413d8aad2f70b45763c6ce5a2432264daeca27bbafceb95b0dce50680062e91c9f375070efc0ac04575f185dfd81e4d27d8694d0646390450c294197bcf355485c02dd647d3afd110967459e683091007d15dcb4cd652a19323086bb790ea415b53e59bab73c560e19180a79df88d4c9653ab6fb20afb73a329bc7116ab8ae7a6fef846c309166459e6b7b0ee4bbae6ba12ecd59f200802b78daf7eca6cbc6c99fdfcf7ab161500e961788cac601bdf6913848c629fe1ac4429930aee8747e969faa63f4b576338d415818e34a1e225f8f9252dff1af7ace268fd74273efdc87206091c15013b418a7e360533e28836840895e8fda74d726417ab060067e18e029b8849dc1d9971d94b89d6e75613ec497bbc2e3677c8bba16ce8d9e0c585b7da6ef54281751fb007e9eb345d7990b3f8c7fb1fc6ff73f1566ae16876931b8fdff20bbc060630166d91317d3172ef52ac43fd8055022dfc191b9a52e1cb8a22af34277a7ef3e3f733c565c834f580c74df61ec1ddb5f9524b319b34022b062cac73bb61671316142297d1dd8adccb80abb1a3a34b32a81c72224e88dc826d08b315e86e1e3e2377071c0ad0c9c335f5d1ab8d5172e27d64ecd5a8a89cc280e77b38620b0dd7d3db57ac585f3e8a79d6e2abdea226b8dc1dab7f1d7a6afcc71ab695d3e39ab9584a24bd3a5ecbf9ead6bc3a0763ff17b3b28d15e0228bed2f4936ea19e8301dcd5aad6c8dbad39ea37a1619abdb13e7740a5680f2b76fdc5b8e19887f6b5c97d214f979f5c33b385e8c9b041941557303999844ad52f8a39f67c96e339841dff717dc496c440fa91303db4c60730345f33925916dca24cf3e2706bfaa089666a7785c84a0eb488f00fac589183dd8fb98a282548502b5ee46fe0f3012f5df5bb5121e5baaf760a0af427e76adb8ec305d74c371c938a6710d566185650df22f1ab63c67195a83792199cf1fe8b5756363469fbb9a60e69eb8bfb3751765c38522cb1af9ee4f901f84628ba8d5190750820a3c1b5bdb82cca9dc230202405bfb5254bd7f62496e027dbf10199f1a20c8a198523ee3c88f3eac436e422534661731ac310482e1832302450823a62d2f86a6da4618e171b088b0fd62885007654dff341540360f0d0d1dfbf7928f696eba02ebdeebd1ba63bc31c2a71032300a45714e078c771a7200470893ef0c37af8d5916f08d9e36410e36205a0d1e6875f47f56da33f92a0c2c23c1f054c3c3acb9216c9c05b1f1cddd3189e33d1a5a00ac82a92fe72e7fa43707ee19b0c537f8a48a63180bf17f9125ccc3bbbc7f48a25da3d9a7c70b313617530516e2848a28cd818213f7e97dc078206e34bbbb27cd90d044d8fc249d75a40ebf56062b13a4489d3ec5c4a081e9a160b2413809170f0cff8c569848db10de2fd10bf6c90c1cdc0d3fe37f68831a91f7085ddb62840a218d21483d2b0b607f669f444c4f00c82640c5f5042d7692852325597a19449d74b3b129d692e41bb3e6c01805c308487990989d7c11bce02f2bd2848ac452fef925960df8d0528eb74d92ead9bca9b168afed94b41fb1d7e45f1979991642da889b6a60c05e5bb2d8d34d0002c3ffa729e936f627bab1b0c77c0a813a603cf541a7c4f4be7c09a629c9530839bd9b50dcd902ae821b64e3160ff72d3cc08b286fb8519f90a1edeb33d549434382c2d5729206010ff544b00aad593933c0d0c7c84a4407a9f6d9a7b5c2b52c48eef9f8cbdb293cc29ef752abf4b77a93390c8252f2d8229aab4e016c803107529faef58ec01f02a8565ba9bcaa71491329d1484818fa045ce3a63688fe09ab85a36741eda634048615884b2b694f8cc2370f8a2c09d97ae4fcf1751891faf5cea6ee1149683354b6a44212176f47c5c8b9010ac547fdafa6b62e7a6df395a3641ac2bda763c3dd9c183267b5fb7385c3e94362992855e39a9364a7abd41734cf6bf88f2d646dad9287391547a814744e86d3015ea315c03250518e93ad17ea10534f8b79ec7ca94d136fb4a30d5a3580a4ecc461c44ba37a54e79fa5f09c76adac3a440f6e164afda51c93af9724ec99776491f5830ab9899d38d584f8d0d6e9e9977a8e3551d612baeec93048e8dfa1a89317fce23bd7413c32ad0e5bb7aea38c4be334eb4a0c3938e46fb7aa19df6a238aef80f60cf6f5e82942512604cf2baac26a07527c077afa9f119c277d2996882276b807ada457fc55532d969fd69e02740214679e03458ca4f0900804055aef700361486078609104c079f4679305091004eca27e7f90eecd3b89ce8bbcf688c42351f0ed636b8e0fc07808af3298b6309ce212861058f533ce276ba4b7b4614aeb7933d271dfc36698a5f1196abbd5900a0a25e119780460e10b06c03ac8b03faee46965b3014566d0e090ab09e4c5f1096b2c6a46e414cf0526fecadefe5a1532f7f1f407fd29ddc16a545e5cdfc03ab8cc097efe1b1c09fd80088f0733bd21d9cf30122a6c5af2d6ef9508b6e2c4243c82ebbeeeb97e9eeee95dd5bca946486094a0924091dd796ab5c70d3eeee77e955b50fd2f09db3e66d9cadd443dfc211fcc6b2064ff41847fb16dad4efc63a5ac6d1fec5e0860ba04360e8dcf074bc933cd50a0aa944f8e6d441bde75c81714cf78c2efbdc41d33a9a6718478e26659a9cb47a8fa81bb452b2c9e936f490eeca0537addac6d9eef3c015589be40d991c33acc3f3e9343b5807759449bcfd9a1dad0c2e7b6961260ecd06049e8e1c4c0c3e7168be85363d46c0450b6d9a7a0d6daa4b0540d14e95e69f38a78aa23070b9eb7a0417cf290bb0064a2883081333221f9210c1c10a9126296c64648aa52418b181163a434e700321a6c091c28812f44064052c4466c05d3817455a3a5892640c19112fbad0a573bf15888c81e2bab977e65b2106faa0b880d270e7b257b773f4bcee542b57670df06c92326fda93ae230284c7a3c9169af4818a700631f1581076f724f281091e911dc08e761d52f8ade0838ff779df0a330e01458e4019e26ae1830a6a6b055ab7c35a1f82a035e83c996e471122b687d7eb67c9114b468cd1c412e8038e898bb9041ed0a08c2e986002308a189dac056211ba3c66fc047291d19a0cb61a742be4603d952e5e1e9f50437800038a1e92ae1822084828f05a708730b344154763084167091ccebb51664666e4b499f666a7267ffae1f9e6741478ce4999681afd99f2734a40f4e6786adc3bb3a0d94a3fbd190769ca28b9ec5306f35196e694458b702fe93e2323d3020f18805055d78045b83cdb8670b3124cedb771f911a308a6e32838f661d59aee116c3ac5dd7e02b962f08ec40d0cd9dc0eb5bb1d3b88e8c013d8fd0472ed84c129b9e5a93b8810fa362a3c4c800832d35678d63612baceed88ea446fb2f3ae099f751e4d5a3bc3d87292380abf1eea851905902b08a6f113c8d5fafb138808124ac6f1e09b293386696abd33665ab6c16af5ecd3b2a37600fbbeac63fe7410b4618862328517b42929a6229316a6d99b8a985c3e3ff4ec537ba6ec05794da827f384ea97b34865055ca9d5ebf9d686d470e2901a14a46bea31f134d93445a9b6d3ac0ee98544eb9e26df1acf776b49beb5ca3dbd2a4d3c48ba9a787a557aaff75e1e8fd7639a3a2bb046916707e7aa3a337bc972f32c39cfce1cd770fd5c5196269ed96b18310a27f08e436a3e96ce5ed30ccb9950688096e33694100572e2909a6f0bb521359f16fe78794d3cc2b967f28c7842cc8e499de2db4b9647911d6167c67417b4536a7627889dc3b04765b1aaf8c67b793cfd6ad2e3a9c08c696de7f5bd63a4579ac6b339f5f60a4c9a095696b6e353bce16e9b08863dea6d69a1ddd2d2d25279b67c28e590e7c4596382691d83c5d7fe9918701b10fef0c1cd5a6badcd16853abb7c541919cade5bdd4c0c98a12af6994ab5d39733cf5cebfad8c21f5edb19f3997c30909b1c72b05435f9873863d8c519633b6bf201d27248b5e10f4ef919fe38fde872c873e18f7b19c07d7554033c53d955ffc006411004795a141bfeb03386bd8e76c64cffbcc99e87a279f8631b67cac6fb19b88c0f3c1db72cbee93dcfce44dc094464e77936392ff04d18afb35dd7596bad9d4a9ec845b3436ee49917742a71111bf1ece8a907914148cb341c30d7d9d02778d3ab8f365293d4d9a849eaa6266ed9b296cd907af5397f3b111aea155864d4abd0a9f751af40a7e2fc761ecd799ee7792d27d6ad6d91e3d1dee7799ee7793d866c63dc928dd8a8577cd4ab6954030dbda261b251eb2973377bf5ca8d2dbbe25a2f6e0f19b593166a99f6e40aa181c6bc99853dadb5d6af5f5f95260d7b750e623226ab5f1da3aada45be360f5ffb86afb5f6ec2bdd706294b5b9a88a3a75236f2c51336d2c2df51a31eafda296bad7d853e76992f63449b5d78ca11b8e36569feda7c66cabac3e4fbddc7e9ef2e8b5fafcf42a49afd8c2b6d6b36bcea383284b737656d284a88a5d48683633e2b2e270c5a9f54b6a922a35d9483386860be89b2629d5464dd673cbbec179ea7dd32b9ccee9d5d6eaa64944a0e1a06ba02a4a50661df80d9708ce972e35b87527900f4a5fa2c08ae217f818284213434d989ec8bedb64d3d387ea0f85a299cf4f883179470e9313b7bcd71de43ff56abe0b0c79832bfd8c70cb5be9b7db4933b52317f5cdf680e9e71349412ef2cdadc138dcc9831cf4f0912b4e609c20f83805f7f4d309328078f68952562fedd0659f0be05103d5bde9fdf459c7d2865a5d135dc061451365d4f01c64169536bc0674029806824c295c5f470e387b2f85eb3d199af34d9827808a6851773b57d59dfaa7899b7f0dc4439219199f6fcfd13b1cb03160730e484d519f359a6f3733c906453c30c1d9297244d5438ce8879c239a34818a56dc88580b147d3104105b1c21a1c3067eb064093d38a2093bf0a2a65da67da65d64da5ba0ed32b47d86ca685725df8429efebab8bd5c811352bb313bc9634bf508d1c5153bd855e3111d1124ac55923ca7292a6c69473ca3abcc6a1a1c9bc3a77e7baae6b4bd1e995c682a155d599e00057afcae9e4eaf48a9fe42c8121868ab479c7c25455679b62f324d6e4bcd55abbcd90d84d136148fbcccc94a5d5bcb4727634aec62be7a66a434bdcf6d569a0acd6344d4b0169efb106aeb9436a6812ae4c8bd745552db31e84b26066a6ac1e49aadaea049a64e609a0663e1cfd2fd6030e97cc339bbf962e58c94f2013f07c7d1a7a687d75214b9d6b9aa6a5341ff2d78532868f1d7e67185d97a669da7555ffbeb832987e260d02be7a0c4d56185e60a1c9eafe5bd02da7d0921996960964738939865a376f7293a159a758751a6e5cbd32d2ab09c4c311e37c35c14d3da1f2eb2bf77ce509f4aacac4d02b6e62e84bf0b1a8b5ca50d6048c64268581aab4264cd63c421a420c1e7c61839793c91273e0c30d8844818219485153271265c1d0ab1fdcc3b0b9ae7f3991aa738bb26c5001154247479ef882a7a62ee00b590e706e9c38411535d565a84e8391236a28174d20eaa969af0ea2288bfa4be6c83761cae90412b3b44223d7ffa4d42bebeda7259656af50dce494d24fe4a7a21dc2a38c297126410543688594fc9392123e665a93069c349f77056bc05e6027cc6ac07c9c504580f4a5f5209aebc337894766784a470f66106349c29de1d65590f5aa8469fd0cb1864fabdaad1d6bc0b6205a603d302207372059020505768ac8a20a2894f021065fcace55f5f40a09ac579fb7ab7c7a45bdfe11123d426a1200b326bb8841ae242cf4b614e86d32b98e7f61188a286f7a501cc0a7f8c7604a24408fea5baf0212e0a7c976702400acc9949fa08251e86d2cde7e526271eda4a4828f0a3ebd0abd5d859f30e5e1091ebe781886a177d823ac95b2527e4305272a08a9206bb2fd0ae1d2232e4e809e4903aa00b45221e60480c5084d9ad071b402b6a9e801368965d57cde73163dc08f22962cf49e73e2e73928962c44b83ceb55d944aac830ee29e2963ceb79cf79e6f54595eeb9cce69ee73b7258f798c7c53bef9595717ae5398f49c3ef39e7785e8166d51aaf9c4d9493c97b738af7e615efcda3f792def3609e7bee79e1585a0b8e13c61b35d0ae300b2698008a8d13f83470c48629ab49a24c117148711507f29406d98b20c5e78b350ca949019232a638157904adafec299ba788380c69c55e2e9c9b12dcd0aac961480dc7d0a4e5c1428e26ed0a91ebf955726d577b457dbe06792cef12ce8928773439bfc93931f4691ab967526e148e6f260d4eaf4c23fb3469ddfac74e5cdfbceccd477d6e64d88cb17e9bb8a09b46be29eb977c73e301eee93eb106b1ccf1d65988704b86754c24724ba4a149eb2b35b825c360d4de8b4279c9b01ff3ab5bebd6bae5bc9c496fa7b596073c20bdf51ccdaa35d68158b7aab73ecb1d6fedb42a10fa723ab1ceb3ae41247cccb399476621df84e97ea149cac29ccf5a6d0da6495add9b9c4bca934b9314753ab9f44a66840a5e3f8184f0f901fc041202e75d34cdc96659d7bc6a4d6a8e030a48ad96b74a53e27223ea36a979e9726a5203756e75ea1acb1861a90ce5c682524a293ba5dc57504a2965a7941b084db9814029a5949d52ee2b6028a59452cadd58cc504a29a5dc57504a296d2c28a59476134a29a5945da3573073534a29a5dc340873a6b9f8892e6e349710ceb65a2d211c14ac545d4ef0a074c58e149c2545eca83d43b634e1c28734ea8e8ecc601acd19079933af0a248000044bad006715a01085b50c7c8078f66dbbad56cb890c0b1255c040c60a4eaa4204d1032709d158b3f156abe5c48b4d2d8076f0623e0872524188265d043959b1bd64473cfb154228b75aad96102a140425802a900002ca8aee566b3056d204131aec0a975e09a942aa103b37b3cf6f6e7610544a7b540e22f32c485481c4f39066eec199296df6d6e12bbfef3ac7eae3002e1d3b9cc3395e6978b64fdbd5e4909f817b4a79a4e25302da31fa01fc040a62a8b96efbcd78d019384b3771fe370b3297b6ef13bfa1a7af4d4ac31e1e68a7d5294891f026cbb66aeab88c83bacaf3cf70aa306740ab152cc1b99ad9c412f57503c2b9013e0523bc9ea618eedc127c4aef56c7539334c8e94e1a3e6d9ba7941d78cd5729297fabcfea73a63e65536a3f5d736d2c597e8e414e3fc910e39bfdcd46fdb43fe7acf9e634fa07f0a8637963893b9d4c59939f3c9a9ccea3799aec41bd53741cb58df3163b2543906f4eab1bf38c48ae6bfa8562faedc165b0ab9db447deb9456ec9497efa0dba25c37e72acf1c0f533207abebd87bae8db8f5c7e02fd20f4dface14e209da19f403a4dbeec8a30817e487aa01434f9989f402930f2462415c163c451b9e57c7b4729b37fe3697409523dd2b7d72435261383cb9af3e899842ef1817dcf77e579aab444c68ce91b6ed948df7e5bb7ec590b356d7d136e49718cf01c2d3969f1f9289f4fc3e7cff0f92c3e94d384a8a84952cec9e7aff87c159f9fe2f3efec51901ef4229f254b499c0c1d7de7f3b7d8db9ff784de86a8f5364f8c7e8979f4edce257151925c264f74de1af5aab4b3a39b6fb7b3a25e4d209da56fef56afca166a1cd6319fb266cd6a3e65cd9a09fba1b15ef158216ea75737bd9ae258722f1f4b9b83c2585ad90963699dbc8c2587e4db652cb99f4f8d25b7f45d632c6debdb6d88767ad5373fbf45b421da3162e4d5abc6e1e7a3441ba2170f8f51afba043f9f866843647474a4d4abbee1e7cf106d889496968864bdead6cf67116d8864444e889c08f58acbf8f927d18648686808a757dc849fbf22dacc707272827ac54cf8f92aa20d51509326b356af78e9e7a78836b3d6ec66764384d42b5ec2cfbfa20d111251125112d1ac57ac849f6f126d8866444544454f827ac564fc7c14d1e649d093264f9a20f58a957e7e28da3c414a4a22c2e91527e1e783a20d110e510e51ceac573cc6cfef449b27b3a22258af18093f7f136d9ec07c7c62bde2a49f5f459b27b1254b947ac547f8f956b479a2b4b4f4d32b36c2cfe7449b273f49923c91f58ac5f8f99e68f344f6c4c9132742bd62a4177a32f46488a8d52b2ec213b5886e886e6c9e18f58ac3f8f92cda3c316a72becd93a39fa1cd93a3a64964b0911662318e6bdbe9d5ecd5e49f3b50c2cd97dbd2b76f3c5e6e3d2f03a16d8aefd7c6e4dbb7a1de8e98ac46357171f0adc477d1f7d1b7e7e596f4edd632335ba733f073fda2acad45554d596d326dad97b5fdd3adb6467c2faab428bc35a2ac6602cd21e74b6bd4432dd4a2acce62aa963059db0d53d58e846f2f5144f876ad5b43f8f6160f3814e9e17b13e2dbcb0e089d245f6e38bd6adf5abd9a403a3edfbedd74b9b5849aeca126dcedb70bc4f5c63208f8cee21ad6a48173cbad55fdf3ad4559d37e9e6b9a53917ea2e673c6f053565ae2a426616e7ad6424d6a585c4e6a96864435a5ef926fb4d6cdc935a2698d5ad55e8246dbd24debdb3524cada905ad5de4a1a1252ab859a24c1ed8a5bb6901bf5e516ea9c6ff47cccccccd6ebc897014519715671d94b52eb0184acc28ad772b408283b495048ad7406d4d3b6c9d512e46c67bb15970e7672d0e18b254770a204567c44e85962048a207084745c272fc7cc0efec18a6fb7367e02fda0c49b7e02fde002ad483bfb4c93dd39fa9b33a428d865a7535018dc70c6b083a0575a06019f8e768bea19d55a45172d0564f396ef7e3b9a1e778f332c4b6b6dd7395531bfd5b46ddb2e55f16b94daeffbbe7162f1cd1c5aad4d52dbe43cdd5ac16ac1ea63aafacba3f03c9a715425be3975cc8d7168edb4d4343b639a85f0dc19047cae62cc3841d3aa566bf3e947a6232db79f4e858e482992c25ffca003cbccd4eac57c9263664707d147fa68d32acd31b36386257431c6131c4e10c40f807eb8399a31257411a4d31ae20708f0041659323252b4842a5a00c514562c6dc103b7858b63306cc09020497a62c415b11f7c0f410993209804818727807a0b21be7800173b3c59284145127c20064ac64531b5e0f901053b0002113e506861a4694104cf8b19a22637687df1041227d802872d09b6fac02180470b2f14c1e23f59d187a26d53355d1b4bdb1ae3981b7b5139cea35e71949a6ff403cfd9702e90e0b7afcd1cb79249b9e582aac165efd36dd2d6663a85f775d523a787644eb276d552aeb55a43fde93ae738d7eadc3a8d56af4ed06ea1c2387a1baf122e768bcb5e3bdfc892eb1440bd3a17ba3082efbc8a9da67d1c2ea0736104cf7927969c530e17c039f5ec33440fa22cad87aad863b31fa1d7600500ad01402ab60ae0ac2b908a3c3b9141e6e737b14093c8dbd310671b0035035271a27c5ac5220d34d85baf1cf71d00a462ea3f1a908a359e138fd0704b8345bc3a402ab63c271e99e128e268778054a4f19f28ba831ef640f934c9d672a81f14ecbe660c7b900bf5aadaca799dcf89f64b0048c5d37f3c402aae3c271e71712b1e49798b988aa550441caf49a5645495124afda45aa99b144e2a27e5d2523848e9a490a4785246381711054305a19aa09ca01032a06b66388a3dd583faa1ac94b3a790348ba587d270984df9a492a096781332e584452835f4f243a282282b0525aa5262ae6ce034ca67ae6cf4304946c1c42b83a9624f89f7c854b1dbe861ae6e1136707a755f4dca60d29c9cfdc660d2a838fb4d62d2ac38fb453269529cfdc260d25c67bf484c9a23268dc9d96fcfa44171f67b240525cab2e1ba46dc174c9acb738b98349fb35f175c22ee6bd26c365c2928310270dc67078e4c0d0d2faf0d9efdc27a051aae0519a0f42b666e642bca14cf6efac1b33715cf7e9d3c7b4a15cfbe02846757b1e2d94f42cf948ade831923c58cf181cb9efd37d199cc1828664c14a237a92771ce9815f1088e4c4dcb4c4d8ba7dc164711416039378920b820403d371e69194bcfe2d9759071a267f72ba601f8b94f892ea32a761a1ee4412c3d94a592d42a7695a567bf79ce89e904ad1879f6925ce1117abeaf13421f33be8e2a484a6e90a6d9ef412aa23c271e49394a6ab4e1a22aa32fbd9c21b2d4105962a2a3448f51157bd843592c3d3d0f43410985a5265ba2dfe8c07dfea757aec424d9d9c31865790e12e74119b93acf1eebf912f56568f4ec34c4971faa62ffc4975893ecd745592f4b5ac5fed2e4d95d3e50af8d8ee34fdcee8b2205253c93a923052567b7a1d3ac19ce6ec335437c49d22af696b08737befc20e1befc3cbb0735e995e7ec2e7327bd2a8328f50a747654cfa4596a16008cb48a7d68a8a8e8e8a8939296be64e9792e597a7cb03c48519c57b1e336d76e0f276e224f9782921043a4a0c412f6d89c25fc51df85e5bd11004ec52d51b0a017d829b4e95a45ce6bc09e5d7bbd9edd8a9a6b13351b2ed651e4d95903e2d986ebd9bf1a1640fb1f0ba00d704e1a979fdf0d18008ca25669ccf8419b4d282e2873c6b4b3786fc30e59e920627c13a683ca70f273e967101394feab606dd60de73a780d3726517dabb4d232a579f520a8df9cb5d105ed35d7461a9aac0e36d9f6e7321258cce309d5aaea558a5beb0c176087f8e6e7258c75f959fd136f3ed7c16bc06aebf8752027ce9f60af2c7b4e390fab8736057041861335efc21e9a0535919f1f043b7441e63be7d7ac17f6d82a8d5980ea9f386316a0ba279e184775166f93d6bbea431bc1266b131fef70e7a4b356fa3c99523ef27da6d924a887e7a6351b4af2b3a39384246b82a407e7a668164b62644729c9894ce6c691a6c3ceb226487a2a4ebd299ac5925023744729c9890c86a4731ac7a868498c5f6c6449690a3961cef153c6ea70e78c21b9252eed1c935be256cda4826fc29428ad6f37f2f56b653662b93af2acfbb925a8331bd2d92e8ac96724ca9a35ed3c6b6d2c493ad6b144690f001c4a5067a759211255e9f48a82a72f7956823adf1e22d11069924f51784a4dcd4d15753ac9599f3f1bf6601ffeb6595c341b79d6ba3c5a0e515a9c14dfe69fdde16efe3137f8cd664a2b8af635fc9c315bfff779153fdfc412e637b7d74b4795b462807150df52dcea7053c60d0889247f9b7bf3d90265590cb00e1894a0fa81e2754b59240ceb608171d0494b98a7a50d7fc7203386cad02475b273ea2c788e3296a8702c6fe7f9927e9bc3ad3e9b14fbbda323cbf97d4e33f1d6032657f4fc0eef34f9ee25cf44c8c9b7c7d04596e4168316875bf28ecef70d0eb48c326a42d7c16b9298de0ce8318918ebd352e79cbd196c6879a07f061b5a56ac5ac3fc8c69bde6552c617cb073a50dad17629f1d1c83c07062ca85fbecf799294ae73c3a86feef13cb1bbf9532df95b579d659daf0cf38305096b5f7a250ce9f9d42386429b4972fcf2ec31e3375c03071b4b38793354355ed9d6567d15271d939ce190025b825e77c33bb58d4461f2d4c1f95728ef6c2909f62aa7a6999ad1d53757481fcea759469b2bdceccf44c873d369f62992307ddb4d95463cd47322ed7a3df6ae53abb6e28299badb4e1e7388e718fe0d89a10072ea326741ebd859ea357379a6487a155dd53a8a7504f21f24d40b8658af3e95a8a1b5d20c79214c9fa757883afbd7a3c5f366966be3a9049c37ded3a14a7aaea9d77f803e581cc98ea77e99673090b93861590b2a1290b8ea9d0e79b6ca8a75cb8297e7dfe9ddd9378b3b8d4c3ef2ba99b465e115b10532aceafe2a12844fb94cac8c2bf20a642d79270fd2740595d144abcb0828c1718a18a9aea18a02ccf084750a0e4490f4cbaa8a90e84b26611be60810e39d842891c14d40cb9f1a10649512871a254a4a6a25c5ef744845b4e19102fed9d4e515ce63dc00199d7c074d3e50d8bc94a34f6edd58bc2cab2ac25dc0a9c5847b79efa37c2bc6e0903036591ada232ac1b4393ade22d5807771565502e0e43364be66727064f0c51831f245500a62848059aa4304f1d666ae31744c31f35043f678c0d38df80518613ebe0a76e35a26fc2a09cdd321545da472c5531e9151dbb869680b2d26ba38fa82aee7c2d4af00d5354613c185cee586c850577020de1e4bb287e020d11fb0934c44fa0217afe3e47e0c77c991ea89e745362c1bbc9f415b76be2d2ba6955085ce7c4d5a273db795dec56d734b79c756fdcdcb3de753edff39cedc86dda10644e37605a55bdcb61fa49c92ded57b2bbb6d6a6e272291ba53d417b390c670a4ef1c778623aa9cfcded58dd6ece713edf32b7695dad702decc1b5cbe12e59efc13763b893c90e416f9d73db4d9a0236c9d6ab83acc3b25827e7dd580300ae6b7d7ef7c210aef211f7f56a824740ef380f1f30a406e4c0f1f36e4435f9f9a9c92f850c98ffbc3cfde72cf4ea73985efd9837c8cf73f4eac77cce3f7fa157d5bfcfb9cf7e43e87c3983fefb1c9c305f83c1041331a09712254d38d12ecff332c5f36f86dc12dea2c98eb3f3eec639b250935efb4c9a76cff9a757dde8f947451caea7d47a7dfee63c3ae5def17a15b5b1b4dba65df62b4ece69d2f36410d2a4e73cdaf340bf4cdc4fe4229eb1bb699bb6699bc674738d7dd4ef916733c6f30b743b6f2f65def34d6e475ed457185d8471e4c59117475e701494521a0614dac6519a02ce529a026b99d8a0cbfe040f76b004c8892662274aa9174c58254b24d1410e70f0f3529598c1f8b2e5fbd230597c732305df5c6bd9756467c70635f0a1c10c288b569fd3ab88a2aabedc1940794e9a6c2af44d95beb7a06fdf6ef065cb742a13b986e31a0aa3b219df29712d4f878e7e4da98f4be3547a2cc762b19856a9760425e322a59bdcdddbdd5e77f3816948db4b4b6a5677b3c1e86b83d1d706a3af0d465f1b8cbe36187d75ad0da6d54a5fb0585b0a5e5b5ba84dda86a4553d3b3bd448b3b69f56f5e6b36377621484c97ce84f6f2d8d0375be74f9e609eb9c689d4ceb5c5dacd36916c8d3c9b65827db629d6c8b75b22dd6c9bec157273b8517d6b94019ac6acdcccc8ceaadaf66b4ed1c354bd396926eb4a59c9b9f9b4ececfcd88cecf978644dbf5482a3e97bda4af31be09536e302bbbe07324275eabd43369aab7f752b3b61b0a23298c24298c249bd2716b6dbcc174e072f9ef77f8b2db5cb4f525756d2e6db6a2e4ba3ab76083b103e83269e64653fd360b468a6951b747fea19b56766dcedf5353df96b4aab718a829f5aa67d270de9d4eabda87868a8a8e8e92b6d816fbee5cdbcf9664f3a13d3edf4e7b2892666d4bb6d8698bdd98d267ad533ae79cd3ebe4589dd4aaf6a599e43c365273be6d9bdbf15eeb30cd429de8ab42f16db5ce39e7dc7eb83c7594c39037ae25c51c33e28ed0070a4f47192e6e3b07224d5a82e6ebf2200c4caf98e5d2aa76541928193e41d354052d4c6b794b5928a4cb32b8ec934637a3f358605682b8ec25ccc9c600046d1297dd2241012d0c2e831689cb7e440a687b2ebb3d72d9ad1197ddbe600668bfb6cb8360d0002d0f0ab4455c76eb821aa025e2b2bf5c40db8217d0b2e004d0aee0a200beb8a46ab4a068b8a0a070020fd2537f661ecde2d76b524a69a9e2c56de7416990815f94c543d629e7747440ab603c5e2b709647202cb25b4e241928ebd44894c553d5de91324fdbcb19cfcb964f79eb65f7dd8dd78e37be9d278b1b7950959f9a7469d4e8326995b1b4000c239e7a0b54a3b54bb17962e42b3f81c000a2e636ecc6cf19d365f5201ec7e29cd65621d5ee8e50278bfa741c934547203c96ac6f9e2c9f2a76b293997981c507b7b4dfedd65a8bc42db2166cac4428fd0422a2a7003f815e49782b9eba07b83569b81922ca59c4197e12597c453cb98ab8e29ba8e22d6ece892ccf396a86b3f36bd2b0383b23758cbae8ac9d8677bb8ab8f98aa8e22771c559c493cf10591c25ce702b50220de7449637e2a96b1f129eba05973cf50e88a7ee855b3cf50f0c51fcb35e7e46b87c4848795e824bc41a9f972110156cb105f432dca24554e8258a124f9d068a73608b331ee7eb50506e1fe52ccfdea10f96a761f2d2c379ea34c4536bc65cafe20a6cc6985aeec56d694d9aea3485079d214e11c88c613f89bc223292d831da229dcd18f61453eba99bc4f274c3534709c5724ef14c048bf1dd042d52522d9e29b55f726375ad3576599580cd186e99c1e014b3d7fcfb1adc6c6bd26800f47e27c22def6b45b8a17b1817d4fce3a655db6c8712bafdb03e0f0a8af3b522cd35694eafb9b633696693e67b8dc66b1e58e4d6d8a499f1da87129b319a5b212ed55c0b7f7c0ffa0c7da4f0e0b8b9172ec0fe6cb21b2b689ad52c3efb759efa3ecf6ff4aa9f3ad8acd509f69405824f7dc6c853dfc1833a0b5ec76137a65ce8effc477f37c3de9cd35adbfccab11ffc36ecd1b9fd2efcc1ff7aeb1fd71c731c37398eab17a51cf2cef98d7d0115d1836fb16e5e7dab5a95b53e2ff6dc0a6e5e73e67c7341b3819b7bb49a5ae36758e1e78c6170d60c691bb8b9f54dcaa2359acf9ea3163392f4d5698cb236afae691ee4806db42110ed87aa3671fa58f9ea261bda4110419203d5ac1d93d034df9ce3348dd3ea5637d73c08ea394f6d9b6f9a462ba5947b763b5c769091fe14c60d88c4b099bc04b5130f168cab71d585cd39a7f5b5f16ea3e5e1fbb8b605b9df9e473b6372c854d3c66975b3157cfd74ee749a5d6b41dbe3e26244777efa37410b86618f53f745b9955d6b1a4d374585992965ca945c515949b92b2b2b2b2bec2ecf4328b3b0e09b30a58d570c2efbc7e10c1f13b3325ec87401f5d38b05d11eca0a7b66f8741aa3ac1a3e9dee50568b4fa72fca4279a88349b29754e7a7d322731586b39c50d647cd0a6354e59a349d4f6fa12ef236ba498243296ffcf44b593749b0f8749866dd49c3a7fb6745b0d65a350dc5bf6ddb42ff388eb3b6c7e75fd731b3e7853dead763061ff535977f2018863544414131815d10b7d47a9edd74aff52f25450554f14fc5a48212aaacaca8a8a8a8a8b4701f088afc9f27f27b218ac8cf3203a4e28c6f05ec147883939342a19e2f6737d0a485ff79e04f938c82a1849a1c7acea79bc21ef6c2805454317a795979adf4bcfceccc8a8c8e9a646f4508d97dbd7a90f8a82039798da58771b0751cff99341b4a08526fbcf952f3d17a668c06d3901c01836724deaaa878272fe559586ab534be9724f4e5a7befc34f992e4e54773174e3c929a7d7983ee8dddd7bd2ffff196df388ee6491c07aee33ef75f7e7e5e622f412f4d5e9ca4441b3a365c367a90b0b0f8f4aab42baf494363698816792c2c3d34945e1c27878e650f0d7d63d94545de38befcbcfc683ba816f0bf29bbe57dbd9abc3c4df27d69e0030052d1f42de24acf8a8a8a8a8a0a4b8d6d45a50c65e07dddd7eda1aa7befcbcf12ab82d4aba466a56e50b0a2a2a3a3246f2c3b0905a3375fde170a4673bebc2f142cd5aaae54d8e3f354f8a33ee7ec390ae09119cea33758171e00402bbb0400a9185af1884bca45e84b16a120194b0f0bec0715cb69d2d5a4cece92268c24797ef9a12f3ff4e5e765f6fc920a9235c92f4e5e8650bf8d8ea36d9c8d1f6cb8acd7b14906a422d88394a4b49442923ae286278ce9e4a0603f4996682d620a41b300b6002015bfcf71e9c8847e62414d9c6c56a50a7b78de89d35a6d00608b5cadec962858b7f62d62aa074655af1a46358e6a20d548aaa1d4240d11c76b5828113596c2d9b397a1d0cd85f92461b9af5e693cbdf27a7aa5a55a29d8a4b9e9a1b2878abae8081c51b0fb42c1ee0b05eb4615a48d05094bcfe47ce36e8037c21e9cafb8ae0a2015eb6f628d1a4b37384da6523c42b2140a86fa8935c94b9a7863aae554a4103463d85f92bcfcf4aa5e1ed47da1602858af6aaf6c121ca0e642456ac523359c868882cda89164c937a27e8ad4102f55059ee8a8848c9576514e32552332020000c314002028100c88c482d158284e956def14800b81a84e66541a49b3208851104431c6106290310400000c80214245431d00cd4fa821af035db2c3020b488199c7f57c9729c4167ae13ec8ba8e7ed7c78aba3f2ba72e209311272771787f3667571d5505e647bcee0cc5b2f404b66d4ad5428f65885d8ea93660db0471d452caccc9cffe9518220b3930a34c6259b6e3a54c556177cf145d9aa93c04af8d5cea2bcebabd99ddfed18230ff7d02436607688dff4b2624c32cbe297fc852456f1296c009a7a08a130232a6097c1c45f7b5060390a088183a5e62edbd57ee271edcf12704e39c7f0c7b7e4fbf987bf87dde9ad8ffc1f5a22327ddcd9eb96eac9bec1ae5d6f169f20ff10b20c0baefc1e267c74f0e1cf7f8c145508984c5cd59a1cf86ae362f7c9acdfb7dfbbcfd9ed4ef7bacebe6976b1422978006d8d83dc0c874adea54ac3604fc3086268149713e9f9d45c55a5aed92310adbf832d474f5e1cc1321477ba118f8682eb5fdab454d30f13fc23368da195df4c21e7e422f25e2f1e93598d033d292e1e4d19972f4fea7863d3661a7833d6b66e9c34483534a0a8652a7f1b384a3de8940d72757c4f9b9621892e737df1c050da01c59bc6b1529f7cadd7d70b976943137976a73b9dc2d8b30d36851c899af2dc2345a1c7d5d27b939bfa07c386c5fc28721fc4ef7f9c8256e442f6dbc2de364e7dcb26a77e35ab680260c53e826ae79f0b9b4214325ac6241cd78fea7e4559da59b177d4727d12df1eedef3216148f9d7bc0ec8dd538766e5f5a3e1ac5631c7c44a9d8d0b6e5fcffe185b4a75f4c8616f55c46c8836b037ce9b6bc591f23dc9decaea9514a9d62508a1398a78341022eef2aa7a5b2688f6225f21340eabc6df6c34eea4ef47a5dab369085859ddb695d9ada2874ff25714fea8fd050168b5dd5385163eafd90f2bfc1a6698edce6b35b053a4067d67ae16983204ea2867cbe38315ff1f2ee9c0eae3d5ac1225c9d1f7d25f38a41bca6abe48b2f7cff9875d75422ee1da2178e51ebd42e1345e29933f88aae2f372ed850fd64a254514aed5f484ea8d83018b8d9dfcb04672cf538d3bd49c4691a31131ed3f34c646e8002e516c0639a0d104ec42b44cff84c8cc127507ed5ce8046784baeee3c657c2e01eb7b7d36be3a55026c278c72c2936dbc1114fc3b4568474356cc56376d679b154dda6c675be6f47cb455f6b3141a407ebe8b1087d8071ce303fd3c9947727b825185cfab93904aea5944e3118ce1a9ef4f2d95427f99b9875d8dfb942abb179f9369631528caccaaffa51917c8689a38095947357310099e701389dc5b5909a8f0d95c7edda0995c9323a6bc7f832f89f8d10e9b0b4311f9747cf6c14c8db2fb88cd2d7495aa9ee5bae84eb514959676d9d27d4fcd50c5524a222bec2ad4e52508a2a1da3a29fad3c717c5480153e25c3c1df07a452658d81dd6e4ddada8b0f6ef16f5b8dc6db3236d79dc4a850aea83b37c508cc7e39d33e548a4d0905f4bd361c51b9c56f6013da401aefb6a42ab98cc2b892734b983e0a94940376f54595131624664e86909f45904205ff282892aa43415ecc94f7b3da0e2ca66344cdcb69516c95f997d4487cade501c33888e2a0b208223d913f7e11bcde09943feb557bd5b8a5c741573f2e35f5a870a528aa4aa98b42a61ced25a486990b3c45c6328b8f3f2745ba3a0e221db373288313a92ee93a29c9aa81fc144e120e388d8d04d688f87d38cf16ca2b6c6dacc1f03d1e159f8414412129b8a2911085276aeeefd8b5fa2be0bd2248b41f59e20187ddbfc4f04cd02ca59aa7ad78f3fbbeafa09aaa7fe0b0f353a68d21ab43c2c11e63367310d28929ffad22f0507a4814065b6076ffe5f8e711c301171f50cba8388961008815302c3ae0101f18282d91c374f70dadc8a3079dd41eb686bec9bc4fc8b44944b1f70000d7705a816d4cc7c96ff3dc0300258de154ad50a8570086e6d6031b2c7102545933e0feb9dbba2619a82a00f0875bd813e9d76a29c93fe342dd41f5dc2f94150ac49249e4f1970955a6fc4b7ace1d716e838a709b5bb17337a0c9c3ad96421150b55bf857ed00d654a913ae0975dac99be2cacc609622b0394e8753e3eb41c4317363cd4b3e770373fa2f14b98fdcbf7fd5a381de745cc80bb712abd309b4d19eec3c737a58e531a27b26b192ca4c45f95640b5966eee80f018c15ee1d62c7cd9176f72585edf8fadc1daa9465d84272c9faaca66aac246a2a06ecde0d5ea08e4a83fbd81cbb38829b0e21958162a76a0d722c4f6254f8e04d3eb7298602a7f2864b465593c82b4b9ce13ae4deb88471d0a621af4f8041eb77210fdd2844743e8a0c561b23dc4ea43c61ed966844f0907a891b11a39288e51df0040f1f84be872e8d86b277eae369ddadffc5491c0b769215697255e9f418b38412838e4fd121a82e0edf5f0ce9a7b902387fb961a24948cd8e933505036824f90463b1859a06e1cc35815dac3c2da4a23d8a12b9c1027dc347406c814b0460f813f6283a9354c7183b61320b2cd90abc4bdd0bbb3543baafda4e003b40df520810beeef8fd2ef47ace161e9bddfa24d52a15d852b553cc27b75e95d19ffc151a7efd76b8e3b8862edc98a806ba073b44b1c0aa4f430d6f35dbffd42cc20ee22fe5b58051abb7621ab87097dbf6211f494691a72a6aad76d559c1676c440801464cbc3a470ded073a58f2d7b5a3a0fb6b3ebc88859e4f637a4817bb1833e90e3f1155c05b053cceb5f12fa4d2d9a5a3b241347502c1a3fce3d9c72330a1d68009b3994e4d63f35f27a12ea10cdbb9263959d37c8f80732698d7fdc378b14c17fc9a906b60dc18e8ff0bdb575ac615239894335c5ebb9fa11b84a9c6e0524415836db136690045c09daec0495966e18ba2534c0308dc2f68cedfa69fc61d4b16d9c7c09c294c75a61853486258563e94f895e9a681b19fb47c9f42b42d5180c55d6270202a22f2d862c51708583c58d4e86e7529f81fc01f27947b4e1be5acc000dd93fa437fa2a44e8bf208eca85a33ab9deec9e105c617d03d304c1be100b326193e683990feb223cc2c1a06314dfa7557d0efa6c9cfa4e769c40e4b7c491dd95ccc13330f10a5c1663b30c59a5c9bcca97a1ef3e5fff3ff9d9bffc113b93d314760d0a32a4604ebf6e23f0eccd49c4418d6751ff72cf89d7893902079cde59710681254f2160bb6cdbbac94724b043dca3bbb4de3903bab3c4282c587a44435d2561115d7829ec678d113cb288e298f0124d1b1990324952771a11c490bc2dd7692b5409b6ef1605f0149109e411f37b2b7c7fdb61982311017644d147883a65cb3be06eef9a7577238309f8371f6a04b66aa1d4301b67d26bc50da4520eb4ac9b877ffb4351e15398260d5451ba4ed595f638e951fd16f4b8282e13e5e653e52a5879c98fb90949093c4270cc391aee7f85dc8938f1b3ea98c74f2be1982a4885dff5b61ccc98061b842a6695cff197dd65bc041dbb2c5312a4bab94bf8ed7b03113ecc4a6d5ae2b3158cc01df0d54c9babcf2c0d61eed69bc31ec579d41af24722d4ad47895b149cb72ed60840dbe115a757465d5bebe5ef9790493a6a958aec70bf526cb3791c1b70355f580fd0c609ee8eb810fc62124c27dbc85b102495874fcb03721983a897d9f7a3264e96043076252023a9c42767984ca1005bf6733278d2ad7dc24fd4e57b30d5f7b21e211bf47537993f296b8c1e070873ce92c480c917cbe9acac3d2ba466cce3b819c4b0bdb8daa4b2ce02d6549b2cbcd1f8c2ca609e9474733237c2f7b2700f94d34ad18eabb13648688f5c4fdd1211d362a04a502d7463da0f29c44e0582520777db84001e8f86206c7f44cd793a78d88e5b7e02a93ca99f9a0a92dead29c2ef477229d23a488d808e548e0d5bd6a2f95d2f70d5a575661ea285a05399efca9ea898ceab8cabcad64ee3a214ed0ae13277909be6f72c58f98b4a876ce70e876e7ef633d9975fc201f47880cf1c689d0dc6d767d98ee79247c25f5ab6600e1518f614d06c0c3608e6573000beb5dfdcbab24d8dbb4e3fbf379476d7f07de74fc72fc95b1b66aa2ccf1c35a3828498c62e6953010adbf7622233d1f8caacaa4ca66347896727c91be59a118005439c4fa27ea74eddfdcae16c79851e91829baa3e261fa50952bbf48b9b393dc8f538f2f59b01010cfdbb5620e7e1a71a8f266500498e5dbb15892d43450674a51d92a19ad27014ecf1af873a6c84cdcd25b694672627c93d418e328fa1b0971e5d77bc5bfe85441a7e709f16101ca65a345d56b8f1ed32fa26141bcc34172f40fc89e0774bb9cfd503900888ca375a881c70c84fb709ed33873f123e33373d59da02cb328cdb6c1205817c3c7be4e9fb073a6be2ec273056b35bc87dc53ece68a24c5d57464bbe10d3d157b3e81f071fe95221422cd140741605d2b82e34b546759d9f36f75cb784029e074447c77485c44eb7fc2ce776de535be2b3b874998261276f41aa5847ea8977f50b8982b38976edc2a8dd5237dc68cc61419e52f623f0b2d6bcfcf067d075e2235968d4530a28923a25b8952e530ed2d3425e4845bdc5e5025761255d0244a9d91418785d7b7cfd1dd012398b39a48040fd8e66196fadd8b423bc07aeeaf4f56e87eaf10b47f7b835f377e8ab557d33ede4055b17f27cc15098c147f024f72e3c17b6ee179b029cf08550c372e8e72da09a2139be7fb828cec9d46227db9d1ed681ab3016046c82aa20058ae24747cdbfbf2ba65252eeff29b048a35f7e8303eee6e8050b18e41ea60d0357a9d1d79c8b0e08338b80f0253f1d901a641dfafcd50c316b50662073884443615bf7211cc97ebcdd2e152ef8b186adde83fd83e0b899f80184c50f641a24b7a1cb346283c8df35c431715b4d3a75181233202b6dd745b788aaef12c4fae3e0178963089a4dcb2770c7a0061d9dd7fe43bf01a50c1cbd7010d91e3ac6f7f33635c8cc95c6dcfd8695e081ea0b73ea8926236d1aebabeb3b378419a49d396274d0ad272d1b752c7fecb8cd19d1dfdfb66d08042ba5d6af171bf36230f0538f328c45e6e92eb9731a5f98cfc0a502d846f36e13680979222e15c02adf568aecec994ac6e5df04d016a6dce31c43a1a2fa04af86397bf51d7ee9e5a0b22832b6b886fa4660113aaa7be8a7374e6a1e31792723a52112a385098388af8beb8f6b8e791b302fb91f121ec4280b28f1d36a56e6c1f15315e89889fd2e29b19c84a729e225a0c6af5a2a9ab2a2860adc8124863229765ac3e0c3301597074522f7f4e25bad6630ba7f1e72d85b46220b0e47b7a13b6755a57cb9b739ea14918756ca1c2312e7a8fa79429038f106c2792b65028a88b6d14fd0e3090b8b3b26022d4e24638ba6f23ded31f0d0d3e96fd9410d2e091041ecbd45c2300127cde31c4cb8474319025206fe7ccc1390d99755aded9b0581ce093192cf49142db0409b564859c420a15379dff4f8cd5830e946083db4c78c0824608a5e6fe4834ed9aa428e9cecfc202d39d56b33c7ec4831f33953df46187d2e87de68ac5600b66fa1d85bac5a22f73be524ce052a7e85c0c1b63bfaec3fd6019853f9b549e2ef16bc0400c6c79b1c5ae913046a4c9d4e21bf2f056c4638196e4c978681c0b9641109f0973bb26f1f5dbe3dd7df96fc346915b1bb6d160540cfb73cd72dc7fb1b5d46f466a084d490b866c590008cefaddd02012becf3f94b69d728859924807698bd0d6eac7f6df76c313191024645028bba87c1c94f184662b4c7e975a43b4a4c27dd8a8e2f29c5690fb0047a395919ee5c0cba94678d8ca62be75f5b5f3e063ac11599609dae1ff581b2f6fdb7bbf108a3cb3498eb20431a304f1852296763a7f20c33b8d1ac82c50f24221f2529dff92756bef51cc3bc563648775e89e4f264ca981b60d8b9c466f8f39bf9e44dbe99372a368f8f6bba73c131e9f658e27011de6d999349a7bcb310de161f608c1b06b5f3d1b06ea9317398527d658a4a65189601c4be410c6b52d90d85c80a11d98473b69441dfd4cf18d422d16f1c30a28b1cdb147fa8f8f4c6ab7ed5f4ac9afda0e370ba55a2de00be492fa3727e9c2575b67c9c11c67e1755276f8b0ed8f84bf80c3a6a70e1868b5e2ff1ef98463e1abd20140e0216128d2c2cfd50362060801712cbcb43ac4ccff95479f8c5f38c097c396f511022ad5f089570dec4d08613bdf063c2a8e7b4357a8c821894eed587cbccdcdcea01bf76f6633ab95768e437bff71ef8aae8536dc8abf43738d8279f9cc39d4de6cf9dfb2ad73ad072d58feb18df722f7b7e92b5a78ae92fed04ed45aace95b33e504377ecf94435abf86f0d590eba776ed55c7bcff9a33c7f23fdc5d060ef49f15372e90d921e9eda50a460206a79a256094536d1bd0335d3e8f21cce764eb2f644a0042675260182831d4e1c33193a07ef1a52da8f64dd7ac9e9e226fcc7bdee9d7a122345a4d1db209600577bf505be11b6e0a2b8512916db35a9616319ea23587c37fd4862bf0c14ed8ac54cf016e7bb841c13a7a9525a257ea2eed06fde0b115a797a6655589300f9322a370c339de133b9cf2b862d53555ab167bf943ff4de93cf7d72b6b94614f5d49fb2a4c3fb91cbfabc1bbf3041b85084894d8287dfe3b7fba8dab9c7d794d317399b026d34b7fa9bedc4ee2d0bb124269e52b5f710ce256e18b99186a9f9a8f574952690c6ee60f5842d46ad931802d671e0591788c3f2d8bf61629260dc8cda4da9449425bc2115bfefd8e9ad1d24909f3a042a5b6c15ad2836b39a3a71b527dbf164db7a033e4311715287abc51c737f921d34f0767a5c7a8386a3558c289ce7f0f147d578d8064e773d6272c7546ccacb9ae056f4adf4d41e4f549698c03a43a25f551bade5773b66e330c6e05158b453eff12c29b34eec2bcf5865342cb8df27cf9ca133782675e2bbe8f9d88e8c23a2327c456751ad473a2bbfea782569342d1586a1c8e7b9d636387f017813e1c54be2cc777ff9c7f2492aadcf6f0b16bae2b22dd554193c567ba1d585e7aea84b9e709c25385a876253d595e56d290f642ab9c9af2c945cb1d886e4f1c80345592ae48c0942a89e61f2e34e102e11c7310760616c38931db254f30c67f483e6cfb8e2fc7a88737b40e62d8f6f73f9a47a2c2a7a1e83aa25d1eaf2624733eda7db1945694da36417e62f2e6b10c7594c9f95012ccb3d8f3170d4cd712cfa038d6712af42f94a8bc78298bae21083e1ca3c592e843691a966d50d370e5c0a80bd0f7983ae986dc6154a60f2566cb68e5f008039ddcf1ab5e954d031a698ea366bb6fb38dd7d1d3b3190d4c4c3ea10cb461836a1ce02959095cabc1f30c92b36bc186a4a83f035acf0fb5a5b8879dedfc1324902cf11559dc1327f8d95dfa6518599826f766c59e42accc23c26c1be495bdf4b9cba086446adea0a30ffb49f31b9718f94868b25a17f75e3c9b516d86afc58d529fd50f5eaf317b93563fe4f7b9c2d813c43ae1f6daab5283d7d09345f5764cd3658d63013cd9efa8734d44d9522d0a0fb19e4e984caf12f338d675f986b05a6db3f782fd3d3c3861d65f126e6d6f864ce020629ff8c42005233532815d7c3b33e1f363a15b120cdaaeebcb7e8d5d2f55da2c1e83a501ef06cd09f261d365dddab3b905ac15b18217d9ecc55bc6bb28c66255cae3704b3071d812218d744160fcb7cf215580ca889261618a977098240683c5ba458285e8a664c16e6a219739984e6327a0efc6ce40a8ca80d01e9fab7cc73c656717d2328bcc2d79d776d7e0aa4cd6b5f65598175977ce2dd5cb0ca12295141c5aa694fcd1b59e4e18af230e8cbce4306ac4d53c1f4a4ca316c3e22475dd097ebf4bec97729a230de3d588fea5ede749b345f8d8006f1c15b33d26700ee4f6a3da04e70c736a1caba4dfcab8a3caaf5fc95e632efa2f73fa833f7e7433c1c6ba952835918268e7f67d420fd841a228738444d43147c04a131ec164bda666cf2c9682946ccedc4c87daf4221568e70f41386c072a62b70394a2a6678244da4d6d6011dd41a06d7c94e766b5805bd30f9c6dbc0e5904fea04b9e2542dda7b409117d0b1080284051d491ac2f2be765d5dd8fc0cae56c58523b54c50f7ccb21badfa58a9296e089a96efb1553af4f3a1bf7ac8f356e72d7d1d5cdbe31287ad254f6c0a928f14c2392a289214bc304b460bbabda479b3b865bb075a26ed4310cfaaf8620a5905635b61015a14c54dde3d90a1f7eb62a60280a18942f6c4050c53ab01c7c2701cb93d00a227a088097f462077d211a7937cacd0acf26761eb1ff9531c5236db079840a831ae1712c1ebd51cd22a47263b56e68aed435a8469e16afd2ae9d6cd1f3d05bc63126c05a1613ed84c41424e216178abeec10dc887530fd35d1b03653ac7167a15fab8d8a69c2b1b3a7df430ce5236b842905f576c312c89cdc731d73430912db11262fa7703b4443800beb481476ab72e62b260a28ffa9ba4a7ebdeb71d424d580b32409a79aac2a974999f7bf44763f77014ef73a5f0bd61263d354834f40ac54f7fe90d30146dcc836af2d1c0204a3046de5f24a76358ca85c2a4b6326e4c0729ec47104b3a85ad4e609e9c2c067ccdd4b35ff6e7252efc19908448ab343bad7a66b00f67de0104e5a5417e8d636ed838d4267797ce24128d48479d7eb00a36d18fdc9a9be19ca6f97d4e15dbab054e4532c4527a8b5c8fb232faa69bdbcfe549bc185ff46d54a73911c1f35469d817955c10919973c6d0d91258a53be3869f3199e670f84f03b48fd26cef213c980d0d919d9106a4935b7c1781500fc1abd78b17585c747765fae5b0d47c1a1d07bb3e6832fa8d1407279ad1f6a9656c30883576a5e48a5955b570aaad351420b900bd2bae90465b4c11f1e90a36527349bf1c5fbbed7e00e9ce2e6004dc7c96bdadb12912f8f881297be6512c07d2a46ac136b27e95ca791c1ee0315684c6b624729ed9099193d3c261ae17fa1183bc318f0b686c216594db04ff0226ee8dcca0c24d9a652280772d289a58b0d2fad2ba7114f7eb1a0378e8a73fbc3e39f33817e84dbe7544c005086a9d2703c26c5bb95fe416188e04b75bdafc5ca2b13ef9a8610411c4c274c90faf0aa5bb8dc0dfa280314b2002142c4dbad1bf67bad06aa526ee084d86add77e4d9619f2cd15ea206e6fda5a0cac1a27b9029d60134dc315e4f607c1be40d81388f6098a7d41643fd0ec0b22fb0261bf20d91b28fb0591fd40b32fc8ecd78d32b769c1935ac9556e58ccb012ba0104aee8b15a229d07ba992a17d742e366d7f524c331b338de6cbb1eb28e6df6c6ccea58b3ea5ac876bc591a3313af1599c660b3d6c9156a5c18487cce7a85f0c0cf564e820be4d501f411f3a9deff177db8a686711a61bfbd2308ea0624fc3f9dd3d9a8baa85b508cd5bd25ea6784339fa979d81ec3f1725736e04558291326d81ea3a9b9cc0be7c100df1810cdee56dcde2ea05afd84a1b2ce5e077a6dfc5e78f990ae18ff97837765300240ea4a6aa0df8f77be8590bcd72df4917ad133b147b4083c5737d7dda2ab86157509ada78272af8482ccdc277f32da4deedff2c76b0fdd5af7c5e2ba5c449fa90cc0fc74b8661c51eadc211e96d778704ab2ee6c3df3107df4865cddcc3f3122ff8a06a9d2d62d179399a70f1df945dadb78c626c661113803ab379546d4758e6802eaa8f308dd4248830aa2a83692114b79db60e6c126200a46ca138142397e43677045bf301198f6c0ce1c7e373a141a266383215772a695001a16b3052fe3d152e495acf80bc22d9c773e544c5c8dd33374b465d11adb831c393faaad6a2f23258be90a5f97619c21def67d0c7fb8741d9c37188fd63bb0a5862b3d6d0da8f196baf6ef98f56f8343a085452e9231f4d7155abf82972c425a4c09fda1f7b67f539e8d0802e501441a9e081bb02aeb277dbe2854f0400b951bb20826823cbae3d20d8b692327125311f59c6867ab8a6ab8a050a200d4ba9ff17d724a727416517d95877d16dc0718e49c5e6ec68059bcecb0ebe338d0a266771047811574d0e8201425b6d9653cd0df79d6bb03bca614a1eb36e2e3156179674ace02d8c76497790aab00f1a7d532232e2d538591aaca3c9f8605d3deec0d9504b2d660b20f9ca628683b850baa1d42bb7b12d88b7893ee234270dc7191307a55c026cb053fc2e9981f130a4a9a0823e19a473c380742d218b8aa6babbfc912a875963d467019f4ba88472698d3d00c9a6d24c84a701a463d25b3d4a63fa4ef794268fd8be91a39230864109a17ea1b29e033dfc6ade1e1fdd6b72dce9a31f8d7ee7df6f7512771ff58f7c3d51a594d5fb28ad06830639e54819634bda90871ff94d2e809bed61e871a6adcaef6b63c6d847616ce6da17a5899adbce888d1667350e20638cdd1281e6ea80a0ec03e7c727471a2119a96603f9a48cbd1573fd45b21bfa06bc2ed0c30a5285a887a9b658e1eaefa2173e8677c1662f3d7985f30385cea6fa5329eb43a34e69ca63c31cf19a174275f28970550f5d4a69b31419eb87ffeb7062a2981d4d25c50037124d71ee22baad0f527cc90e33acb10e536c3acdf0bae1152a3c44a0674acd01050d59ea5071d601022301d9f9e27919ef8c7809452885cb2fb92d31f779c2c80f57633cebbb42552b17d7b238e0408bf365457b318a0bc4b75b21a740991cc6c2b7b3d4996a3194768d9b2683ca37f6206d23a5f5c6f6a163a9138e437199ab61c86320427a8dda0f41cb4c114af8dcc01b08831121779c86f50235d0c5d668b4a38d98f61535f497dff7b1cea5a0500a276f43c83a84d8c88683b40fb71075248b00657c587df40b9ba50dc5172012c7abab1602746faad49788f02262a5975506ec2f7421728cd030880d9050e40b125bda9460a5b51173295fdf93ec4fe92dfc6ae207f97ec97ff8151a09c7e763e97197deb90ec4d2aa531f1137cf4a539b520fcfc3f79a8a5228b115708292c74513ff762c20375ba5cb3e0578818c6e29b5019d17496a56398b8088db9b12b16de378d87b91401b86f9b3d51fde7379d985488f5fed441f28c34923d07fdd14e44d86f5c180bfb235fe6482b4157e6e0d34022e7843d0ef46480898c0bc84056fddff126ea3cf38f30cbeeabff1966576f39f2fbf830308e96e7f42a60d95003e81aca68d45e18b8c6efbe678a7f2af26e089989e08941086a4fc4bb21cb559bc711611f247d21f9a004735adf9a108a1be58a0d9abb859499d475a5428bdbb60b21d4fd988ec1e4ee81937d69bce040ca75fa1c5c7d993c07b4c8f585295a80676a5ada2ab64fb7251204895acbdaf0a99b58efca5394f0836e030a5217770d46e6a10024f136e0dd7f454ef94dda0656e7c0a33323873e09217a54ca06175847388d96573fd319ac6425cf909c9636fb35afdb8cc42b6b291744707b41173580061314a423b67bb72226fff378bd49406f0206ed8df9238068a3f6a5e1fa694176c0a516a59df32b930344119eb31e7df281efc99f15ea2c070a053dc21cbcc9edf9cc3e600bb875ebcf507d6195121ffb5ad4fba89bc5737096899fe14d5c78cde30de54b6b4464c731b331e3273e24e4d2e50356d01ff933947c4d67ea97cc3539eee16d8f9ced3a86e35bfb223f0f78bef67fc4e1e0bd3b0ee87c37e79faca0d01131e47699ea49be091e2711b683818057557c944382deccf3948ea9956e51402555e0005fb5fe2e02e797d863f49a81e27caa0481f7f0577d9d2379f6ef51b6ea32e1697ebaa06f4088f08052971375fc939c6495d5e6373da973d8d424868f964d0e92eed3fcf05114c1800b5b35ed77fd7ac2cabe32de758c8108d5d744d7188bfab6777947de04b68d7805121c37e2c4cf18c33b26225c6e734d6a9aca5b9d4502cfea271c470d26167c8046ae47059696051002a0c24a82f9010e435aef51c83de7a321164e013d46e192ef2b75589352775ff2dbc234e4d0c20d410dcfe973a2deb1005a068e473fee58f114449449a00a83c639e66e5852983067ab3c2f5b3b0160a5b26a45c7ab163a0eadf0c079506f0cbdd1bcbe6686d0a00dd57cf620b9b5f2fca2fdbea224f4f2c43f438aef8c4833b51a16ea956720de24cbfa50e51ea42ac3315eb4dbef272e486389fd69cebd187ede89e971fcd47c9f678e1decd7e9de301c8e0d52a0972fa8f36faff961c24a8aa49e2d56a9b538e8c32b7035e2f4fc9818e1bb9291d213f20f1a15f0781be392df3616a06fa824b9448514e449586225d2c557d0611c8c3ffb78a84ec11b975051d664651b9cf709facc4dc9bb87ef44d08580aff59fb13f830bf828b24103e88435984f14391828ceb90c4871eed840098c497ad11eec43252b1786eb4e2f29a706a8b0a7bd524b0801229e53aaf36e004d23035ad8a298158263e1c0d509dceddef279b9b53c836b6721a4aa646f4602c3080467b2c0ac29d292094446b55a086b2c35c86385bc0a5b2991523fe77ce9054b9e833f90a6f7550d338fae2bcb022d1a8cb1923c50b9e0dad829e4efc6cd7a647daaafb00828e2e7ec9da72b53c89bdffcbe4603a5bc89efcc2e32817c4ff5ae698f50466fca07604a5f364c06f5b65f1f38f87ab2b4cbb49ce16d820ef249586fa5ae2b4f45d4766a8f713f89828684a19800af1513ac0ee442b7d66c3cf1475cb07aa240c0612d95634eaa0c4c63948554d96a624ecc3e1d807a34dde3b4d2d08dd50819e070e3404724b6af58d4b9a201ab2f7ec2ae55a02be247b083b877078a2fdec12b809497726e3e3c3edf0d16ddb1323f0d31cd0b0d62c8f7a4f106cf9744db3f2b19a0cc8403c66989031e12e6a4a130e0a622835467c50ab13e2bb4422c0712b7bdf0de2bd26de21b4f1e3f98e4c79b9e089d4472c33de2a29419e2882023e07c25686f5a3daf93afa645934cf5dcb0eec854818cada4e2fedda6cec3a63c73981d5b1b597138b23db89a1b9ce84ca4461fb0b8ea26dca866cca2131731930aaaa70491971d2a610ecd0546d53c6b6439f660f8a1dd428cd6c081d57c69cfd0e7d3ce67811f54b3d77ee46aaa4ba9e1bfae24e7fff614047b882e383c42c412c5484c3a453ee86f0dfe564bea2714c2691ad319ce7ced1ca9866ee0325be0a74f6edf7b0bb20a72ebce2f745282e8d9fd336fdbffb6814388e14e285e543b50c780ebc4261d94285583e69934362e142d42390fc4abfc343b8851aa4eb13b1d9516c84deac1894c2314f09ab76612f5832f53933a554d16ca4dad05153dc153cbdba1f8b9184e62c018d351510cfbdac433a0ce87c6cf72356f75e71ca103ca1465fcc242363a4e5af44685cbe5205f80e09e9d4d1d74da8d1e1b6a206bec126831d66e104d91b88f5e0ca8dda99e4a2ac4a2e3f1e72d5219182ebb6ca8e1074ead6b734aed449bb4aa4b7a265e3385449a4202450615118c1a778e12413e84ffc1b61e1cf4f2a0e74fa58ed033f56f716710efeb4ecf635f7c0f2cc806b11a9ada66bd19fa3954c0a95d844643628181ae887dfdc254a25d2bb69a1a504e5b86fe6eb4936eaa3e8ea6c8641a1a898003d136e81d8628826bc060bb649316d9281ce7e6306270c81526a575f5dc96915d538cb769388abd9a6ce800c986f1e988780cad31219e7e0fdd74b8ba031cb0eb796505151458819edf8238558e6081f5c87276336998564217ce4c5731cc945d1967f572f925953abb4a4c15d04a03551b3a0c29302ba3bf79429dcfba6b7e338614f231f8cdb962ac94f2ca31be266fdfe1e56e72f050e839306311de42dbe2c4705167426bd96f481bedb07fc4393d0b739ac1c2f6fe2d5489b3d76351bd10d8d766b99725e278c5e8cb24d69ae8eaa5e8fefb2663a6af7c23c0200993395c7f07a2af4ceaf1ce637a21cd670abe95a18c50cf4d06fc3cef0c0a4c8e77d8bbcba2f2855141ad5b75d057414b94e41e32879af0485914e6444b3ea1a13f5c450dc18e41024ac83e73312d9f0db16dff06d9d9e019b3a29ccaf89457032e79f19b151bf4f6004ca94b191750946963a46c25aabfde2f573fabd00a4fae278daa8a8e07453552af7f366522a017436585e67da1afa555e219545cb70446a53671a1cba35f269dd1e518445549b0ae1dfbd400ffda0d53e511003458120c509c87c42bdd5149dc460e0f62eb72c5a392656586df173e780c3500bb6a8d683a13c36d26278341d3cda6962920197da36e0265a11290ae5c02532ec486d05362eb512a7e9859158fb6454daf4d7a44884464c34ec504919e82e76dee4af1290694204b85c3710ab826cdff5292d01488962949bc34611916709302aa63eb910b167c4866f5ad08d9b9c1fc79ef82966fc6058d1f3eb810fa2adb64d4991d4b24959890781d7fc0d261e06659e528a8250d5033d37e143a3464b4a9e74075d24b9cd753682e23851165e458069c2fe171dce9b009302e402e305fd3593d1a127c0f2a9eb419ac8d06e23dcfc02daa3c1314b549cc8ecbf71be4113976de4ee1929154c705c368de0d1b88c0014a8bd34ed8ed133f235b5cfd8b04a6eb6e274c432bb94ddb381898718e1980e492eee7f52412710323a3d636a89a59770576a58e1ab81ecedc143aea7b6864533bdbf887d892480324036b36b91ce07407bcd007bdbc5ec62477260d9e1d4fc4d24663019f67e32dd55e596bf709577b50eabe11bab46ab1c060804e7ab9206fedf72fdaa843446182461deb8e860cbda27833ec40202039b87090825d7f3f16a9d6587c597beac04533b031baba56809bff1329470ce4be666ed0a154626875a979d867924b41ac316a537a1c27d6e7faaf209d1a10e5f589909672af375cba7b2e59d42029551bcacc3a4388919bab9e6200906ce893d67b56a293a04b4ac0a7f7aa75e2a61cd236f2aa7f0d3a47cbd3373dea894300b162f552ff555bac4dc87c2576fcd0d704d31e4d2635dea13be56cfe5109e9253b6a6723f86322e42d093e645091fdf42a7633da6894b8c692aba19faef6b65d5192872fb2d05ea1842e7f435e81d669b37c18d973417212cb875126021af2965ceb704dbdeb7c8f77a5dfdae61a8d12a1036bd15abd2e4f4a1d6729757d9f46e8c456713597221d7cab65de44041794643c755d351c1c540ad7265c460d96a2ff5083f29eae4ebc760212a65523e6d62f2033b1a93aa8565f90ea037a28a913a4ecc318ba7cc8a41c1720b0a3a4090d48e7d2e6364f67750df4e4e3ad71b731bdc87cc4fe1407fec33fe8b27aea6ed1c33f6a08d5b586d4f87915250e8097e3a80932847ecc05402519b656dcb5a9287e878ab899b52802bff73e49f1b57245d710534b234f1d8ea5ed51d54a55bcd385391bde3cdfe9946701852bced9406b8c9b28e999a0d83ca875f9436f04941d36ae78cd8d182c93daeffae42bc1fc1d729cf4df15409618e5ccc6c78278c7561d07d748ee13fd0f44a9b426648f9eb428a05c2831496efc713a941c1bff79aae24ac71ea2310163f3b388b88d586767dbda134431a313b89a11cdc954880b62bbf08931b585ed5e0084c31cddb507238de30c528f0c14281da2eb6c2410118236ae495a9bb9e5168d2277689730c42a992dc979beb24e0685b937009bb2295ca49a6f2beec6aa59e81e409128c11d35a5609fc8b188dc819578933bae598c417184f441aafb9a18402730b249d5b41bef7ad81451aa191232903d0565fe09890095f32bc401b33d076813167e1f723b06b94da63df50519112989ce468e1481c8fb7a5f32b1a6a194e6fd2fa2ac11f69c9bfe664b61eb298c9a083b038c20539951caf1f03f51c64779f85d55dc6036a0ad9500a1a01c10a231f0a70011f55745a4626552b5fce6908b1c903c4041e9806ca124c9f020b15225d15b3b86ab905e123cf21094f4b34a92bc80f8715706922454a234732686122338a59b1fce116191e707f3c7bc54cf174c315101ce5f103a2916afec789a3aa45926efcd499466400371bfeca3d30f62e1234492f6a332f08ddb6e213d57f15b898949e56c4d08d4d7797ccd16ffa03e866ab0ae6315c9b388538c150fa93265979c03690c35b02465145bdfee0852e62c62928a4a610cc11f2646fc1f9366217c29956b74823d81a8decdd6c81526cf9e062ec6956d73d180ac70fb14d7b10a64ad629c1805da406da4f1910cc8581985317123e235a1b2864dd5be0880aea8a49597d30c0a1b0d26e178f6a3d0b721a94c2b53fb03c66ff73193fd35316664c53dd7dde5f83ea648ccbca1b0ce3a0240978dc6adbf366700a8e61634e2755c74ddb02abf289961c2fa538a8a8884efbce4528ae456c8d34d6d3fa8284838dec89a920bdc550de16f40c2e0f4a00230a836dff8c5bce782b5c97a00c326e553638c9c81c251a89d9d69a81678c1d2f2bdbcb714468288142490eae582dcd75c77367a32b0271829a2f56afcdbcaf81dac6f444a4acac44ae39bc51d15cde5347d13c324bd2c857cd301f36916751056c654aa03aca84d275c60e4c98885bdbff8d579205311ce82b83829b3c5a39c288058294b45d065f92748c7fc21adf59acbcd1979a98cb674f8f870aaf3a0c609131153d520e903e99aa6a0413491b8d033c03955c44b5e413161ae5985ec7d1c02e1fa86383b42654e27dca11c543d924545c76ced0cf6a70cd4e653b42cb39a42353c071208e009a0f75644a0c7783c6b348e742c471a1208567e7ce28f7c118c64e029de120f9f78b20020de1e4cca0370182b21ba3be6e60f67bc3f716206b28457029f73c2128af8cc3116817cbe2d6f1e8ad04b44f8c3805b960f3cea62f53d0a832d1fc1fc2d48865dc8206e0c4f7222573d19cf1ea49cea0afe7f711549b51bac804fd7b6748b695a4cc282f4888509a49bfefabca1608ec47403032758cc60f2c17819767058541fe670935c1ef6223206780f371ccd4a0980f428899f99d65f555102c9ca220c075f7d60b752004caf0776fa21a0418d48c1f1a83e559e9f6a3070c649951a65a32bbd84a577d299023d65139737e03e865879f2b5508d2d1170aac786eb0d088e36e83c027562b86aa3e0da1208c75bba19a1fa1d46545d4b23baa5c5886c12e0a85ed7919ee1c0d51200a7766438e813c1551d03a7da35f61809a427acbd1a01a3ec4543072863de4e4dfb99fc7c271ce56fa31c49e0ecf9692ba12e5ee8b44043a88042bf89ba20b06f57fa1c04fea51a44518876460e7100f6976b91fd4cedf6522d44b5eaa6502c6452d0193725e13f8d9a4d375f25c2b55c3a6f586c24c06320ff9d96d7285e309f2dbff53948b41c40500d04e217c4d962f4aa592d3bef8aa40b070d1865b4d4d598fa09fae705c53a8746f9f711a6df239042857b1980c862054cf98eb06208ec5409682c082b20a2b71bab16050fadec7989036c4ec4005bce6370702ad3bb6872ff4d94340cdeb41939b7e73bd0a55ce7c3cf30fe2130e5601f92a8d74a3215912d1e60f669b0845070d56570949170624c4ef0a5768a92cf9a4df6cd0797082104facb40a40483641805ad96bb22680001cea4cbcf596c17d6c06fad0d39bb8941d4c4f781232a47c67fb652700236f67d085ccf07bc26fec9988629d435a56cdb29cc087227456b5420ca66958d6465c98a9b26ca1f397d4d68859da73dcfc8cf0df9bcf9bb5e225a57ed92e466dd46172c8ff7212c243202e5e50bb3113448845ae604c11a31bd13713299f068060e3b7ab30293122cf023c776c8840d028d3b0aeda94d409bc6d15c684c30f3f483265fdb70b12b200d5d490ea12ee921878fc393461d153a60187349236ece665e9592377c9b083d063c30ec2d19a3106f0414cb083d7046aca98e399a81f19908a52597d6b0c75897b990cdbf8c8c0f518f30031f303a82805b0d38ecf807bf849563bfc4f161a1c973ba43067d402a58523e7b507712c515eebe5c28b3933ed8ef1cb2389acd4c774efb64036b7dd77254808d3dfcb2b0a1ce061fd5e998d37e88e39de4b0931abe7bdbad988cb4e074950b673ea662ddb75aab68f3800e0052af83aee42b798e1e5e60e3a598d1f6ef413179145705d3c2c511bbc943c689581ae3aef1c5a21c0ac040738e57885aaac78f5f734228409d47efdfe6769840ba4dba204a05291c939ff816cf8c52256e539332f2414e9b24fdcd66ca3f744ad34aa47cd8087c96ca0968fb505ae0fcb2961c6ef64dd783b4271135e521008a1d00ae3204aadd81978eb305d044a173c0b76b24f13ee4d05fb1c620e61d21047d6e9dbdc83377892efefc3b8904cc1a168344f86cf0c16da3065f5b3d5409c968210c4ab90f8af49050b68bef13129a48ead9aee050d681780e9622b33f5a78043b3c5c40b7a27b280778723e7c8e173021ce8812b6052db0c5d8e42f6216bdae25e2b69c1446a0b8a47fc8698e9427191e282911271fa7b5e759ef94a19120a7716a4e5300f14f45441d296e89e3cbf561ae3eed856a4869961ca180ba0330c1b82c43973e158ac165afe95f16076f834b0305aea7c6e21a927ecd4b1c110fc55d4a4e6ab2d293d85ab8d8f78a9cc521e76c04013d2d00ac4011b1ea4ccadf7a14716508f0a8c6dfb9d2bd00a462ff47e986aaea0726d71e0751788d004e9addce1d4d12140306311a9d910cffadf26d172a28dbec469a4b110ab2842098dee7bf4a00f49dd1c16f5a9a2f9b8e6c76b35618dc715063d90b86599c1fe2adce5f5786b6451223f0dd0e1c6b6cd0ab15e787802427cd8f1a80535e4287c40d3a7b5202c15bc7588c2c984403f1184a652c46c2210d0edcf49daf05ecc2e5d5a4f38a800773836498a7124f75675872821e184956d57675bb95e1a70c01583850903f70bb34786920b69fcb6e0bc2c66ccc3b3feb79926e14c6ef465802449fa693a1ac9ec36d2c4887e1fd8d402bb67dc45679f6c70ce531dba4f09c4ec2ddf294c1f7086f3c57333c52c7fea1bc6b43a865a80f715e8ae38b19a8d4000582b554c00db9a7b58a2280d2232c9ed4eb92b645be7a7c3a8ccca4a5e64adfb50a9e6b5b6dcb14431431050029a717226ebf2b8f08a5e698286e5fc3ba83a25d219a94f12bb03c31ca64ecb4f552c2dd445c9940e67fc474bb0c51d42d805de6b1605626f20367091b479e9d7fa24b966920f87dfcc06ea31add932f6687781739203e9d1920f9ecfbbbc9ad2de98b9cade07d6c8327038592b6841e93a911c45f72d8c1a7cf1669515720fa3e3b43c7bdb68abe24f93fbff59b6331206972bd534af62bc702802d11153c5d24cf9b4bd6a17a6564a431a6a49630e907aa057a7f4e90bcf924bd89623bfbafd9a8016bd9b5bd7d26b399cd9963b6db7dae38d306709b7ff019418a0e18fa74fba9cac65d528f6a425392fd2548d1c212901a1bf99c6f143522073d5a7995a53d722d4ba69ddf88d2564308711096b9624f511a49969e80a9853f878845b289b30e3ff186b15015c6ac581179d2b65f8b28647d1cd115f5b58cf05cd814b105210e1285177e76c807950eb83c6ca0bd57bf05979624f22c53c9db283cd8e7244147d9975ea837d62a34895efff9b28293c53f8c4ab75cbb7a887b5556bacf0dfd6db95fff49af4d220632a7ebebcaeeb077584ebcddf088a9ab4f31b17da217ee6f78ce66fccd554dd0577cc3459c88d037fc8f979fed95ba8550c8568bc264afee273cb50ae6cf5be292c533627d59997f799f6fa66e85fb10241fcad7d55a9cb36efd5514fd82076c6068c84ecac263794ab9225d1f21ca6a7a04ed7e56a9ab55515114e4b3ce89fc6d6c13618567f7c0ea2d4c0d1f7391615e19df6408623100a807c064633efebe1f0786069dd40f8195e734a178c2f5010ef1c57f299c4bae14dd6d2ad176c3a05045e00a4ae0265ca902586241483f46f13110874450e27f60fbbc2e971a4cc4bd32f951b07292c88e880fc8bbda0ba6b37afbaa28d90a4937fa78e966e3b43767443cb46e07cedc5f74f8f926615d51c3d03f63f0a50e80fbe7dd714362bb4a2d6c8c82e5aaaf141bfc269c71d2a001fb913dfb5a722950d349ad9b46056a41001d6ca427e34202a09a5fae8d75c1c1b9882fbc820c22911c3af59dffd6013216063c0159a24a87c779dabfe8325aa26493379f902a7f676fa0aadd424b60f5abe656a071b830943e9d7d6e2003e2e0f2a3143eddbfc08410489f8f51281f696523fbec7b8a50d39bce97da2d66bc81138e6fb072fc5aa6e393eb767c816a915f0d74fdf1bc7cab5bcd85d540a50a2ccda0383c5a1e0ec35cf9ae226fb663d8ca1a6c15dec50dd3b38087a7ee45e9905af201194b2420702eb80fd87344b1dad8aa89282d007001523665c450c1cd78bafd8ac86a60945fc691455b934555c9c625bdc447a34150665928fd4ae00074e41964ec5493cd383f3920274feaeb1b3d235a86a10eb5667128425588c81f5f169e9c9c2ff9478c273342b669f6e712d9f540d4dfa8349a3c72e034c95af86d4b6cc91aa08976eee05105195e53615a3061dad2a06f6780cc521f37af25396c6a305a2e17d90fbcdd670445cea5faa5c128e714530a4cf944381fc0010ce7721de474086763869200edd67f208583d303b426303f3742ab5b15bc03e24aff4fe61ddc7d0f00fcbe087001f2015894ad5eef7b7b68d25868d21e4437e31b3f78ee8025041f6a00a705193185d0eb10c95b49025a2e3befa8263583e3b35d0633b31d2e3f2d15cea330b88095d9e41f69ad7c85f07d2cff5630575f1650a80334870d925086741f7cfe8f6b5e3e31429272f4c169c1f095aaa0949a8a87b75ee2cfeb5010a1feff65c4908c94166435f259829a015ae32b1f3b4a127524fde76fe1698fc5e3f06e4af8bb9c126025ffc0ef30f7abc62305c8c3516f75786c03c05233e2db471c494f7d6ef9a5f7849e7e7b68997d16e27aba8f8814621035f375b2d9075164f59c2d985a16acf0d2bfe2a3f76e29e4d848b092ccb71d1799535ec2b8be6b33fc6365cc11ba6718a77f40ed8c2ade3672daeeb0eb7d1794be00847bdf62e3de1877a7cdccde1cd86e1c404465dd212bc924048c748f4c81d9cd0f394434d40cc9a40c37b8d40b3e916b33d47ffaf6067dd743a1600a8b1fad8083a20a7d1071874989781c442910c874c567f98fad131532e37c4abe6d0de130a3188f4f97104be7c52e31292726b089e3c4f3dbe1b0a1f732640922fba96ae0cce04f4281618ab05121bd324c08e8e7c64b58128270ca7e9a0f0f0024045b761f5a80efc4314dabc06a9460db2a10eda518dfa059580f34fee598838ca8e0e6779177dbfb23eef7f0cb41cb82880ea68388f098c09d8a10cdb94477f9c8ed1b47378857886ce58f41d4ac6c562fd9875bae4bd382c1396818eaeadce8721800f1033f03432979806a1303134c901d461b22549147acbbeb4a94d90bc64b8988e0230593606b4da359b2cc56308af25a325ce55b62534a9081d43f325caede4253c093814aaa987f808c7f9070252af21a4aea3d6e7b364742db9dcb3b0052368752c857961be7b5df0388b3d4bcee138dda80d03007fb664b21f9c01e962f7b5dc98a06ad678e1cd33cc119bed20d70b65d0bdc99f02992000b31491905cece56c397e092f9f043e007922403c4b1031a67bf13c2c2879c93a57c3411debf84f26d6fc74f1c98c17e79d926334f3f3fb59c34b5aea178f003190ff9d2bf1ff9fe181976b19a67c6d824e7b3532b4ac9642dc5f53576a76ba58077c831cba34c9b92c7bb800cc4364e47b59f083ad2dede6c4bd684c81454b0192a8c03a7d317e3e51275243530f6f2f18ff311123492d38a22308c75c312b1f4ec800d64e28eb854fc8968242c588625e53bc00c73e895345121ee90fa9d33ac25834fb501e8e660458847230ae728f210e70776905da09e7bd566a0e5ec50e7def7cae7ff49640a8dd86ba664859fe1ad3c2dccc21d932b92a71049b8c3770b3390db1e818bcd59fd3178c11f2eb3f99b398f1f8b61a7787a6067b07cd1881ce83534062455f66425d53327336955754eab944f3c3dc8352ce167c5953b7e6d94e236596ed4849b95da0fe551e71214ce4a22801ffa0444beba39fb5c36110ab3f5a2cb4c4864c3495e894e8bf8fb78b2d5a8b15f43d5bce8b8f9cfe30c4ded13d6ed8da21696c26018fd09c66068fe3c0b0e2e922278e7892b2728ec8aad95f7fe023d793029db601e54ad08212f5021f7aca7a082ab8435ae5a4aa277059acdaef1c1cb136d53e12fa8779b148d6d141e7296d6c5abab14fde09d7443a47120c45724e73f5c67817b8f5c4cd07166f42d28cda2e4786db0dbda415c5b0e0a18363c221369bffd2cae5888213966d891d59ed895ee27a6ee8b95beddcdde92b719c59f4b6884e26f80056ea95ecd1da5ceaf898d9258e4f340f327a21594b0594f1832803c0e69d2f0352eb03c8a578a3d0e3b904378041cb9b3eee1c643067868480fd1eda4fd5be936634d3643cb4b362814d405c90c78af7df2e0fd7bfa88d203bdc1276cd6dfd6a6be3947da74341fc2642a241f78f84bad31e0aa0a8666b3b5a8450d610791221ae2bccc43fa986954a08e0d2625aee1922e1aaa3dde54da78c8dfa2184cd2ccfe72b910122bda3d0cb70d5fc0f944a22942e7b34e941e927a9a2fe0abd2def995a382874e0fb225d01a5582587565b307424a7f4c4a13bc426d5f8884bd3ae6b4cd9b7a09a5dbc0b5c22d4936a584352ef2d1ff427d71892e3e0cfe64712e260024a714bda80eec7cb840c3a9069a5c89a0d1882d7a5d389e13572f3f109d626b470f1e71c26638551172e2624bda8263752b1fc5b809a72a2e33a49b57a8f9d9b449c57d0288182e114c6e88c989845f2220702a9ed23bc6cc1484758fd1dc6a069ceaad3592892fe42946a3e550a7114fa575b448669e455b4d2180c25878019c75d7277fca10acdeacab846b353f0b74875329702ea17595c170a4c25487e60b26a0bda70d809ee09633ab1b07729c45b08f7cc46db06cd420ae33f08f28dd761426eb1d552f5ccbee9aa477947a4bbfe22c434dea1d85bd4a74352f0352027561b74c11b4efb0c514a449bc8d0a842e1611e818b0cdbf3877a5ff64e1c2dc5c5465f2b600c3d77f945e43c11b43ebf340ff87ce3545e896ca6cabeb5f4069b24d1acabe9fe6fbe77e1e5da02e5169258e0d38e30f500d949632d1c4309479aa63c059c68d2d652162a874a9d2396800fcd2b0eea570d24f6a7324796d78e71459c2d8864fd1fcee0c3c67ea0f85948bf00bce4167a349b016496acc69b150007f47b8611566e5275751fa1e229c0c25a8066ae375279344d9e608f1b12911025fcdf31443ba388fd88d26fafde68774fe1c52073cfe58475b22b94e11a6efe35fc3dee625f9659cc4086e6222386304e01957288a82c5fd9df63ec888c9ec779dde1bc4b1ceb557fa2c15441254f801bb35333de0436802f7d7a371adc2b6e109e9457b6bffab6e1a3e8bc9a35f61dfec13063fae683f9085d407babaf5a6a674cb4ee0fe0bb1e10009dd557ec4abf8ec30132ac1016c95809d928fa384f025d9dbd4559276b75c7439ce0edad5d9cc06cc714bc51d6252311b0ad1bc4c2d76e999e2662659023918b05ba1b372e71944b8161f0e09a8200f20014c75401b9b4104f14ad74368c245918802b607a7393ef033c30de085445c87c8e1bc0f0cd01d4205947df5990e23d6c067b503181632c034860fd0cba70ae41802119bbea3ecb011ba6022e0e3bfd07280da97bc5e037b62c3fbbfa4af6bb188f38f93aa03798e68d2d382f12dcc537d3140ec0c48e1695f9f529a89661b71120b816c57217df357148fd2d46314d70757637f487dec2fa80de1f81f3269e5f436cd712704eb6143f98b6c70d81dd8fc151ee9017cb1accfce86b5cc3b42a9646213e4795dd02bfe46bab332f5977065058dffc431d1b82c8359423fa4737f4a8ee45c8d04eff5012e455a484009c4c5d406a41807affcf59ecda1e1a4414051a47c5be960a20939980af8bc924588fc85c606d1d1fd526aa62efbd3a8709cbdf574f06ff6e1be45ddb1851516479ed7d833ca4446aa45c0aa61398962498f8a1a94023aa36a6a44c1d2ee90326d5ad93846a4a3bf79a9ce8d2ba946d224e20508d1c71663618bb350bfeed33a1180361cc394c68d2c8eccb10e626c8a198c39ecb95b0c8fadd22e20016adf84de22bc013613e5084358a484db87ae896b8091c26cc9288839618e1d29c25871d5f93296ce0553848747a47c677bc571db70f653fe2f8ce3aedcf0a110bc8bf29be5b3c951bb8fb59a83fc4fd14be98b0f007db7ad67cb210a3040039db4ce83ec8b29bae7a3d47310ca2c9e951ea68c90d0ae81a31aa7a25bf91ddeb801b9936fc38870714f526d2a3ca3964a3d62b7fa2318cefe1be6fdd5697dc956b0b507c2b1ba82db03712f9f84c305733e2c6ce606d6c6fe64c41e0a83100e6a74c3a54bad2359b0de4f2321e4a709c9bbee9f2ff69e2a357cd21c951eda6445029f05f74b9d7459269ac2d7d3e553e1b57724f698f27cb2dbde40fb8b63a80f72a8a2aaf484a3c381aa0ff21d5fe15efa02747343fe716b76fff661c28eb2f2cca3403d04b9d70ff2eef6bdc8fbec64165294962a0312091116c9d892bc84cac3c72120be1edb49ce0049bb0ee6b7b53b5835d97f8a4984a19ca45df7f091ef2bc26395afdd39cb0032588e3b6f4bb2601cb592f0877a5b44729043b154dc9ef0412ddb35ff64f1389188d3c339d645adcf85bc87bb22e4f2b3929627c7467e1efd1ae5413c88fe5fde28be9952c4147cedee0018d593682d054021a390417c5a921184486298b9cefd298ba009989fdd6a54bcc867b7eb74e356e48f415d25d744648635f33e67064803b96f1c00eaad1ae2168092fb7e19a2a7fe7f2f2936c801449259d5ec091909d388c192fd37e9ab19b34fc9b5272217526ac47922600aaadadd46a50fa46a9e88d8c4a0e49362c93ed900805e9d8a2fd38c3cf98d808d9b1b3cb228612787bd4c4a827bc7dc5c240fa1f21b3dbe45b68669ce49298423a40fd4e694f3c2ea5bc0285670adb5cb5bb97f896e4eb5012c3065cfc8442969cbd583d970d6f4001cc1803999eb13ec551002acfb2a2fa031b366d5943f451aef5ece28efbc591ea322b7dd4e43776c42817e3df949c149934fd08a24e08dd31dd0186c984c20b29237c75fd1f3b5bf846e78095fc385e5c50133733a7fc5e1eae53270e502211e22943b7e494fe03e08788988ccdabbd9a64ec5ba75a20bcb1689203774992d219806621644350951e3b3448930bfe30bd6e6f743156505320d35be5eacf920f58620b7251014fb15738003bfac218e44c415be865d0f01b24534f710641888863c75a07fd5ed582b41c99eba4fa63380ed07481116b9b81ea5edb2334c37121e1e496b13b1eb30dc18f1dac8907e1d79a2cf64dbcc9c35f41240872f7e08527d4e74f8316a0a3f74c59368f6a60503f3108a181e6d147f8f8aa41d63d12a66f18b1f4ae3ce583e79e1a59ec2467396b4f30147dd319b8fcda605ffdfea1de43cdc5d1ee9a683b027fe61acf837e2c2c1648108da02860411c11a7a938f1e2ffe36e77d11450ab064c96dc758c7eabfafeab3aafab33f4b8f254d7e93221297ef217992065b80aeca3665d752a768ac90960c6fc14643543c3da1e02d443ff7f5e9bd6bada64b2fd042397ae60b8360a5dba7724324571cb6c357b1a8dc867bdf40bae1a8b22667d8bff9dab04b1f9107d85f6e18c300a326d6df65dd0f4ec089513cc69cf0838ed372313d86b3be7d85185e70bc4cb971c1a727b04c3d9692b4d072e5e0635e907e7316c7611ed0fbf4823b9c3f31ac9042722d42d14af2290ce024381752190748673300d4e48ccba7741cc5569489e70ea1d31af85bbd23e4ae5d3100ee5f759c055ecf335b0d73b631ba420d4cb918538871a589284e5f08eecfc1be92fd8aeeee9178a34cb2494d739fdb48b04eaf02eb49ffdf24987e4261217ce51792b6cbc6884c244ad44681774f6fafbed20d1178820a0271f6295a9728dba8d41249b87bc960d8b2a734414dba9387873d15248d1455e38857a0b9dab07b95bd4f60df00622c1e671f82873f1cc6857de35d63229a38c2ee627c1e5fd17f09fe0503bd196e4a653fdb2fbe09f9c10cf1287a755ae9d052f798741fe77a22a315c67ea4c5bd70679466b03b2040e89bff02ad1939dac371419161fd1c3a87294d264a50850e6294038a7c3d82dad14efd6ac0a6f1eb992bef16aa9b2c9907aa5fb0af0581b164eb08bd0de8f409bdb8ea7b10b24bc3434fd6a49981b7b455462f95b47eac8a22edebb1ae4baa5ff3be929eda355a0d192a48b0e202e1a52352e824ee48255b813f7057bd63cdefeeb598c0194706e1ec1c48b18cc218f3383452bde7c2dbba35f6b8e920cddee2d905e2892cf98bc85e42579795c91c0a739b68460f97d0b8305abf58d0382b5d200fe3f2e0dfb7e2c18cddee516e556ee58f0475771258567a99f46989e844f581ddbaf7dfd78db523fe3e3b0ac3cb7a219a3d540118192b6ae68ba8bde83eee90369ecab81a6092c6b606277d819c977edba1abcfce40185c80a46c6ae68a2e69b0e2d9c5737d041c9634132b67b5fed5fb03fd8d92b8c3070e5a9fbf7067b6010b8d97677a6bae2cef9a35a8ecac11562d81607cc97225b5a54f22671c1a99f500646f56a6a5c2ed632194a0e748740fb6c61dc58fa3eb49aaeabb5e101f87b47a4e1eb2bb5202df2e00d218787f77d701c8148ea0be119ac93037221b74272fa198fa9c92189761d676368a63552f882a0cabfaa8cd56720864bf9507b297e4a0f9fc4a58eaf52767baf696a0cd7542cb3750729ed17649bb8f868d6421a806c921ee34120d6a393e20e09a40e521e83ccf00cd80186dbcd16874aba09e0ab28540ca318a03a15832c580f4a5fc67f44246b2dc42703d1c7bda15994c731bdb68fd537712843438ff4b686566d201600e03865ca1f44f7903834af3572d7cd6e95149a9d3d0d3d810020b573322939fb470f8b973c44612d433f322744c436b224013b9f68c02a1d25dfb5eec657ca8221f31b6fe36b1ad09e043537c61ace45700166749fddc73e6d797613910a89791fd4c941386b02fdd6ee2200c241786026d41eddfe9e567ccace673d2c35e684116f0583cacfceaa5e257c4a283795661dee3b15bc930c1a52ca0e0ab7f59b61694a70e7069008d1cd5911d96b3f1361d153349111644e9fe5e72672bbd009f4f148b772f9b293b8918f7b0ef41202256ebcca8aef086a4fb17c79dc5734ad5e44000e820cfdf30d8c91f31022c81036acba2905b309a15a9033941f29c0b843556f8d9598e159b18afff90688d5d89a406cf89db861be111e32d69d5c999fc5e08644cd929b8886e57cb412fd2ef21be8aaa7e33054d30e665e3a643636ff046c6b84569bb96ecdd64ef2da54c49ca49090409e60828120583fa8bfa1d2e291205937a9bfa1d2eb6f4c1fe4969fa0a3f15614efe963edc3f29df57f84b4a8c272b4696622599af185082f90a7fc86724b164bec26f49d6cc57f8c1aeb5e928747e20d767c1b56b47c6df7d8aa42e2892ba9848165c9bf85368780ca5d032fecaa2b2605161b0b9c9814dad2ef85954961f9625edea212c387fb1781e8bad4dfc26d2cc219c910e9942269f2cb68c9f05d7ae93e5a7d6ae13dba86cedc2ac18cb8fe97174e95931da52cf14db4aae654a10502d7b6922cd9c526b970990949b149c1eb989e94b40da855126250d9d4d3c86cfccac47bba8901ccc6ada15d6fc64fc259bd28d89c959b1769d29b6145bbb5034a83228a334f07bac9976b54dd6ae90c7ac5d1f0dee2670b489f197c81d2a89dcc18e58b18c7f2cc1422cb88c5f2477b0f924dd32fe903c473e2459c60f224f122d63122d489388d01619c9c65f9e0bfe510d0e6946bae1c927b6f9ca9304cba02d8c657c9e3cf25cc9d886646b17ad65fca39bbfa80b0f2e778ae11fddb48b9e6419cf327eea275ac6a35ac6e78848c6f466937167bf9627dfe59f905da274a8f9e6280dfcfee73d92718acd57d809e37979327e177ffa1a4c7ca6d832fecbe32fdccdd1169a57c81abec21daaeb4ab07eb98095623c4ab4d28f20670948d77a5891cf107703119460190be9b193cf528f8c4b3519976c322edd64fc5d6d6c73bba9e1c78f81b4ab0e8108f90c7113f9c43819bf70e377417a24f5555b155ce21003ecee20b50c34f040908fd0c7f82abe88df871bfb7b895859e50ba3b9e2afd07b5fa35de17b6fa35de27b8f838a3aec8b9e8a3aee87648e00812f92b6a41e198e21d2eb18a8af3c9ff134b3677aef99fdfa7c566cd4d0ae9bbd87f13c96ecd11dca53bf5d67cafbc87e9f0b0349b6b3bbbb6d1dbed66ddddd4db28df5bb0b024822c2489f4404d117b246a850725239a89c931c1739a79c16392c7250527258e498e498724a39a49c514ecae78c72c61c514e2847cc793247cc0973c01c500e59e68072be1c2fa77c91e3e574392f5472ba1c15183930629804219352a1e8a474503a273a2e744e3a2d7458e8a0a4e8b0d031d131e99474483a239d94d719e98c3a229d908ea8f3a48ea813ea803a201db2d401e97c3a9e4ef942c7d3e9745ea8e8743a2a307460c4f8402632b77d0b63fd1db5dd5edc791f080cc590681c914a2613162d4e2e50523ec4d160d6064595429db8383d99a2dd1beed4828589e99225aa6b34979548a3b17c7122c33e5d138544ec93fbc3172a2eaacc27ec54609c32fd935296fbbbd2403218315a64fad99070be182cf20b21464ac2911182be50089a24413d2dc074d055d820ba886a04151529ac0055052d8aba33da4c85d09050bd308232154223020e9a104cd0420508bf8286c410a3285321341bb8682e4081690534133809c6d00bad8271b4c283185b2ca1e28a908408259c408411f9a444d0b640040b88889d00a40244f924184959e89bb14445e346174570d9e835e134184d3a6882064366c0c36f30b2f0422d329a642a44064772cb8c62a642645024ff0c3528e0f4268884d30d8c0246db61a2a606418ce0831d3980d17e789458410b7aa0c384ffba24c84600032094f003081b76b00412b523354424c1a50b5750758e1019e8804264d0238b3215220325b2672a44064078bcddddad086ca59452eaa1124a29f5bcda0b438204091224486aad48ae13e1d656c156c15e5b055b858b6d156c1570adb50a9de7757e6bcbb2b262a3468d7657f99f619aae761d39dd1c1ec1dee3ab5e778eedbd9652ec94864a6c7b96524a318f77b7e1c5a19338831de8859f6d976d53a46d6627411904c35c9a9810865d2928e4a57dfb0eca7faba28a36a9b0365b6b1283da27f75eb7d6765b6bad758b81ecf607a8100b2794b60bcf9e6c0b4a31be2c3a8ab14967a234c442f51a098a91e6ea37241e8458b8189340d02804434ba3e5517c1a1247cfddfdd678cde97477774ceac158c5100bb3f09672dc7d44e9573aad874ac2769df4fd2b7d7f1c2ab62d3c80bd2a308b5329c7ddddddbd85ec1cad3d85dea9d6d33b71d1a893148aa64265ae7a6dbf7e4f4c86304fb25b77f79e23f6d229eee3ae5db466fba6af584eb22d5760804f32bea0d1346780207b005b9224277babcba52e4744912489244a8c9210021448842421042449dc7b2d14486e48bb99902411024bdb6191249193c426991182040912244890b8db1f4b8e5e12ef070a2442448064486dfc486290e4892448904821899116b4808a284c8183c2139c50a4094c402205cf129410c50e144950a5dced152a35ed53eb2899ba7b3ed280caa7368ff054a633ccb1be6ab0b078ed4265daae146bb500cbed4e29a594d6e6d7e3ebf1d57c340bfa74bbb5d7edbd34dcde87c14f0c89a111a964326171d2379b0dd73c604ad7fac65749fae69f3c3590b6699bf2058b1f353526b7e7768fa6b58a09c6d703c65793fb61c0f8689fed23f2d9c2590cefbbb98f565d3eb2672d93b9b8873791ed88b13e498a2fe14ef9e285f812eea8c8207db41f1f5f25f141f10969b44549bfbc22458c18e9e951752c25fa6858c35e98a39e5c2e9542c1588d4670b89b439dac562c186098c112d5223c3c27260c37177eb4eee95c25d266bfaddaaedf209deb5ce73ad7b9be379ddb51775c88f5d6221a0843084378a341437c0929bd3ce10d00225a8b18dedcdbf18a7846706ab59b3b65ef8694c48c9ba371731f596b2acdbb69578eb6f8f77b41fa25ead1abfe22458c18e9e95112de4eb714d1dcfdd442f4516d2a0d10889a6149727fb4f006fa08194100b456be3a138bf190d1d4595da9326d56589b4802100ae05632871b723c6cc0c787363b000a60003e3777733f230c032c90127d4800851240e8dd46969bbb36bcf57c3d3eda0c38da4422a2896eb405ff0b54f2d1c2db470b6f1f2dbc7db4f0f6d150a00fd93dedd3b9f016eef4ebebf1d114f0d16a005958c4177b63b8167b413c1c8fc8cddddccddd9c7783bf1e5f4d9bd74fc417b77122d64012431883f88263b82e90f75d0b4af29137475e25f7a7cd139186947ccbebf3c458ffbcb91517a20fd374f5ab86697cd508091022a9117e3d3e5a2edc096f57044d80fbb01b3770bf3ba771cc0d31841356587102d55a6b5fec82adcb0e9a097e2fc65620e16e838cacbbbb5b4bb3f7765bff603648dc267a8e2061dddddddaeaf762ec7ec43aa634d34891c025a8b5dddddd5adbd769b411095b04bf185b61bdda12c3ec5bc1c49123478e1c39e27e778edc6a85975db09ed736d7473adc31d173e408b53113250d2ff65128f1e5f6e34f8507e87ceec8d6965e2a057e2f187180bed0ba817e4015647f3025457c69fd68d3bf6573c18ce865e645d6afd15f373c9bf12637ad8500093cdda51f7ddb78ae0841f63fa9d950b22dad0fa53133d668ecec28c94d1a8d4a1822b7ec5f0bc693d65c09a0b519fa657aaf9946a4c7cfa2e9eebed567e8953f26472403dc9638485b68fb260c8cad4d222489a4be1a91ad1a7fd9540a3cd1774192e2cb074a800ef50bb987318f2f02e5f0de821ffe7d2ae6003f449adaa4ed6a914f79c430b7361d8688cd16922032f5916d8a24a842317100203b580a623c2d2d0725a4294f3e492e8186d4dd6dfe2a9524cf6bd95ea8541e4fd4fa43c148f31788ba6e5041cd20a8eb062e46e62f524df63f472337a800fddcc035e807db276ab31adb335a48435bea37c5e8c8bd22572a854a7d1830c497ee653c415fa5b286254021e360cd58337f9dbc1f67a669faaf58b4ecbfa2b4b503fa2a9520cc57fea4b1a504cd67ab26fbcfc7821b38d04f06d1da8d5cbb58d9ff464fbf606cde7903977da554c468eb3207cddd46c4f787e96957e87d47c94aa8cc41a390892266cbd64e6e15a151ccb478c8d6ad656b1169d35758daf45f296fc69335abc94dcba7b7628534dcb1258c2d05e3cc67d9ff6ca1bd4a4f473133fd2a9530b77054ee98ac688191fe04692db07ec1106989d9f20c4db90546616ca50f469adf88f164b9919a01f7e6c682018676b1c8f4c16f05a3cd0163334d1fa387b1f9cb776ea771068d1c9f10230468da85aa61c3465b4c109849e0a7067e6b8f5c0064fad6826a472ce80963cc4c4cccde7043e6ef194f5a841b9324202088ff02fc1170d3ae7e22d96d9cb40837798a231c99e593da8a70cbfe4dae3489f3252d088096d70aa9bfb00bfdcff4e94a48db85abf8f2c956724cc046697895c00fa5e10108006dd7c900c22ae6007d7f9904156d0065344b586b45dbb2b5e974a76583b1f1b4eb7e088687842172db69d77d1c8c9176dd12e616226176da0c91345f1822244c11185c9b3e22c1e048240ccf8884b9c1d83e5a8b8909a0e6f63e2477a8198ce5706d56c497feca7305476b8b21d1e82392bd2593098b16b83bb93841a55428294f7a5ff94205460c900c73c5026198410300ad15ba42776c18df87b1f54b861acc0da6084c0e46494d8fecd4486c674976bab393fd473ee94ecf299f74c727fbce4ff62860d91f5f1b138b99695723213b3d12eada230b205539c94b74df321409b1efa66ae61289d1ff0479a8399c9db72c3d59ae4f93fd0bb5ec5df6da45297d2cf3e1c2548f7c86f9b4aeda39904d08475bace8e6c62697be8ab1ff14dd64b7b937188665da754bd47d6ae4c385a1090825ccbef09f2168e6afae0ce178211c31bbb56122fb9f62f61fb9963bd8104ef6b7e457a334fc2f493a31762a83640da5e12d7c5234da52df2d0ff2d982ac21f964ff124ebb50d4927c483fa55a0b5aea27fbab720923815f59a988b19639683faabbaf612307cdf5a97f2d4313dd194b20238d6917ca33924dd9ff445b6ef6b780bf75bf321b265c29b8b5281d5891f5b6e075613c6d0e31696b0edd5a54eddad783af07decdbbddda2276bbf29441168490e7e98432ccc2300cbd0f79a00ff47d08f495149f00319e20e3796534cce9022ec39069ce4f1319b4611545f81a69d3c7f2f288256df3f2dc641e6b1bcf6bb379b5f168577551fceae5100164e78e2c863ef45414953a74397469c83b6b9347cd976673657746f3a35d627967217969dabcb47655bf34cffb473523f2d27ce53f9277e62b9785ac30d2ecf631795e1ef5ad27f63704a4eda2d5878c4f1e6aa8f98a2f5f55c00ed0d7fc551a5a72b623eb50bf50a26aa019f4396806fd8efc91e7e7ef2b795a208f67edea95e4e1e6aeb42ea82dfbd88e65d8ef4778ddddddfdb8bea88b0c349f282c5ed4e50ce52e0dd04305d4a4d94b03f460016dd17cdaaf466d2b7455ff9319bb41ee7ec50e5dbcb0cb0a53114412ae401de79aab586f69dfcb76a5899bdca01b5f51613c2fc8f346cff33c553eed4df640372010080412d91150c174bbd764aba52b6ac927f79fd44437b9f1c684a0af8fae62fe24e96274de58927cae72fd73955d74c075b9b19ef114dde4ee17fd80be2815dd8890907b48ee5a8a98c8eef8cada6c17aff401042e5d69badd1a90aa9c31c0327e90c2a8b5fa09ee064b4ab36babd76ced3a2f4fdf32c63618a79fc82726c28af92bc5c3514349a614cb25589b33b29c32c3232545c63d05d6263e536279099a198f8c5f4c1109194f568c159bf9e3079d4491b589593cdad5283319cfd0304accaba79b499b989802500363dd9898526c29b7230cb9d5b224f32e5f5030965e120573ffe44f4a1fbc4bc4d834a858b13e592d70193f6862c54ca6ee59b17eb55832160dab8605c4878d15841563d1583f5836961563d5327e5397724be169d7e90296710a9176b51344528aa0c4f20e281da71f506abec27f7aea7249940e17282e9eba84a4184f56cc5f35329b8cc1320994980d3cd49c72ca3246a1c91803009771cb2663d6ac01d44526f5f75168fefa21e5e431ca4b5403506f5f07ea6df9c31130f7edff7093f1ebb08f7a54f9c32dc713e587945bff891163cacd575d9e283519bfbd7f52a2d058702cb99a62ab29b67ea96c526e29455272294ada45738ae0484b320e537019a7f4649ce293cf95fcb08cbf7a936e249e769d2c36d24ebbba0923906e2c3916db5982a1dc6e89d281fae1e4514f5d4e50787cb0254a87fdd4a7ca1f5c2e5845095c1d27250aaa44a959db057968e00cedea463ff677a0604e4eca91cfef70b12469e62b4c929180b837490a42aae1b409023de9c644926c4812109274d326eec720282ac1442598e869bf48375fe11f49b7f169936ee33749faf1c9f98c7efc8582b9249fd18faff0ef70c14f9f24dd7ad4d559b1aeb5533e2738f851bd8b40caf90bf5f8493efe4a3d7e127ed2ad5d26f169bf5268bec22f3e2904e39902246393efaf47ba479bac1aea3694f1e817d6ccbd18779de7e1be0f070a81b4d9ba01d98060188a228b864563cd288dd04c487c61c96678b4d9a34d5c436994066ed1bcb4686de2d66c0c3f20c6d18fe20b8b4669e0076180c120d3261e892f2c9a36bb8e356b13b3686d5252abd6a6d9a285d3266e0569d5dac4ad1a4e2b489bb875d32636994c4c58b066dac4cf427c61c9dac4ac18a5813faf1b68edc8efbb07b1f8d2d9166f70efe4795fbfafdf759f75b1de405b66ea2c03f455c357de7b9547a5a95d41b770d61074168869d3a3409bde531f85dedf1aee79dec9fb4eccf1df83b44721cddd9043d7753ec23779de9b5e497b55dff354b2378386bb0056237a00c1fa0320e0d421d488a0836a00ac35439cc8e533d3214ee0321de2c42dd3ff321de2044ea6439c0092cf4c8738e1042df70552505429d4898b530b1626a61269348a426208823eafc3d77a933e3a138095c7d8990a292207d505632cd3b799654a69986065a2891a040bf853186b08d61c8cf52d1d0d00a42aa788965d879afbff938d276816a33466b4c5e6d99bbb8223de0ab2bf2543364ac3c9274610ed17d13ac82ddb52dbfa4bb80756f75bc3e1a393dfa6256bf6f2f499bc2e7cd174917c5fd90fc993bd0ffa8aaa7f9f66fa3818ed975318cf5b739d52edc26ece58b1d66d673fb7d6ad97349b6c97474ac3fe986d484369d44775dd8b6a81765259b101cbb6661641cb274bb6f9ac912db565fb1df66b6fed3a439a5cdffeadb50ba75db58976f9db6a5024219fb7c80ae8e6f5f704087e408cf4a905da5c01a9ca124246aa522b2083910e3182483ec33cc4089c4c871801847e97e910238ec862a6438c78002cdf076b93a8307eeeeeee6195c9f74958be3eb479edf9d615521af74f97e1545bf7e9fdd4abf44bfcfb3356586ab4cbff3a6d175669f3f6e3e8ebeda1eeb135f9d0ab5b3b1083d17ebdc15f14e8d5fd9befe77202a843916f137250f33e481a80dea0e6fd93029caa0c366aebfebdff912b6ddef7489636ef3b59a3cd3ba3cdfba936efedc69e1783f15efa83619d10a85beba4a8d640aaa2f2bad202b1406c4c76796e919b4a7109a4b6988938924cc46527e570658b9947ca657f0fe7e53e9b0f882823e548b9163e4d00a9ca09432de307abb5d65a6ba9bbbb7b04b2674a65b0bc320f77f8b960bc7f8670ead30fe1846cd85a6cbdc77faa78f8f647fb6fc99104919eafac373b3f26323eaf8c06940f41c658e6af934caff0492663ec7de50e369fa1934c094669e06f32443a317664e80603475bfa710cd226e32e59394a037f1563f767ca26e357c9e0940d6d3165fca91bfc2a18fec761fca110e319e32663fcaadcc150f36ac07eb0c906b47f8eb2dd566bada5a9d0c981bcf3c97c329f109f109f109f109f10f448cd5a4a695cdbd8ddbb4e7cf91e8755543282fede2bda6002b62b811ff7d0925008e667e4b3f31a7d8f4fbb4ca020cbfe108085aeab868a53a1f8b92d5b14e3c99a594bd23c2241f214cb1cae4d0e1f83bcef05a3bd3418fb495ffa3c7a2fcf5b634909fce068d07e0c2d66b644ad185f1cb59858bbecaca65de2cf62665c3431b4981eedb2658caccd181e6dda1a4313438b898572f82fd4d7f33e30dfc03511cfff86911bad9a2abe7c113560ff12f7de7b2fc6175f7cf147c2c01481c1c1d8ae18c33f692d876b032251fd61d9b269d3c52ec7cee2f003028b2fe04f9bce5a921d08fcc1603c59331f503a4a4f7a52f903aabff4265f7aea3222f980d231fa01d5a50f163f7ad38f9eba904c4816248cad63f0a7f52b0e1275800acb5d61b9cb9a3b9b4c317ade389e4ea09f3f413f1e763de3498fcc483fea2e0b1284750cfe26b1ec6f22650e6817d04f13e38ce232e947a28ed17f56184bedea9f5c8be1d12f1cbdf2bff5b0dd995b03ae0b06c268ffbc3e264818cf96edda684bfb2b86a657fe8a89f5ca7f87466486230b120302fb91bde5938dcca8115991ec4f77765a43a80b6608359dba608850330aa7fe11d8791f080cad37c478823630d026fb0f318296807ef08bf6ebad24ce2392e81ba2b32191574657f4d2e8ea06414d2ae80cd815e6067a9b0561a09f162824e2966db56cad96adb56405b62213f35666b2bfc5606972f34c6e2191a8d5b2b58874d9bac228866e5071036722b16661bdb476830a102b086b36b266a00c2b48f6c760486405e99a9b76e1b74fb3a948f6196d93c5935933168ec8229259b7eca00c6b8745d32ecafac1b26101f13102fdf86b54c6ccf4092efb77a27b8283b1d1169cfd2740a32de1e84935af1fecf2ac36a471145f5499bec3d8ee15c21b8206b9ff3c85c45bde18a5d1658ccc3e6b56cb8192c31297bff2cce1c6f22d5934d64cc878a6e45aee50ed894a410333578baa31b5bea15e424fb9cac45c1a1ed96978c28f88b49eec093f994563d9b066a09f2ad6f048c9086bd789ff04fd4c31daef4b7616c91c403fa0253770bdf207f3e360bca11b0a7deece0fe85e91d583f563c6a209c912c8d87e8a99e9957fc89aa5f8e0cfa6f8647f9b71145f44f776e313e3f8a311c61b3e377027add5684bb53eb4c52447998120231e36d0ae7e99d420636f22c82f992fe7093eb2bf056268d9ff867699e440c1866f6cda75d22341b2fbb780b4ab4281337093812036fcb158001259b250f437f13489030b63e8e62fd2bb11a8e91f92389348927aa972c2e10218ff1b387fb56a7ae5ad9a1bb821634dee445df7fead9a76fdf007d5680b28f7ce130d63a33046a0af98980b8a973ec178b2669e07b68cd0b279a0181c4f6b7f7afeca1daa7762508cc1c1000bb40b7f0e8cb509ceb4e9fe202641589b3e430d0ab05d82728f62624e63019dc9fd1e44f644498c60aba74b7307e3e9392c77a823e8a7d5339e23ddc19d2bb93691db0e8f2d826b1969e57c949e661fa4f76ff5b47c5a4a5a3fad25ed1257602b322bb176d9d2c7e8fd5766da85ea129469d31fb4e42766a67bf50303d69176bc3218b091b6eba44c22946424fde8362a513a4c3ffa51f943e94d4f5d4a3cfe42c18c7c2095281da4377993f287d1939eba8c7e874b1de92895a0a9046ba31109977319182c86cb91bc5677c5f0f117e9eb833ffe1a7ded96e51acee46aed0c0f189bd7401f5fd52f95600d05537ad39b4a1f7e72fd5249bb3c415b8ccc571e13f3953f782f8c8d3503afed59bbce968d45e32d5bbb6c26d0c4447c196be84fe2cbf739f0778b8d0dfd2577a8fe227982b11caecb42641163af98b8498bfb63ec9237faea1a3176971806c272f561a44388d023d3213ab701643a448726bb58a2db7677c7c46a15296969aeb59489246d539ca14666d4084da64668d96362359fb436036db1d94568fabb105f6266da6491cd4cbfec418c1a39f91331260ea42a67db64fca0fb06fcd5e2b1c9872c1e6ce1cfc2c4bdd6f0579a203819bf0d8dc62fbdedbef30678e8c82a9634745fbfab81e6eeeb06786857e8f1d729f09f8efc15196f21e3af9e773a61b17bb0234b241dfd74cab824be93d55a5c3d532d65cb8e1f44415fef9d612a954aa5b2879a4de5d97dc5a1fb90bdb71bfb497a339637e5cd0d786386d4f49b1fc130acb2ecddf82e7621599bf8861810e3105983b4596bbdc2ffa713f61b208c2b5fffbe3d2b4e26635c4bfcb5a72ae91fedaa0cf0554e2ceda9c7d83495e59bf54cee6a50d37fc7666623fbe3d088d464c71f8a6247d66001bb2ed7aeb3dedce0af41f057fc15d79e8c1ff442ff6aa45dde63fcee892f9d571c6da119bb888a4a1468139f3593be8a3eaa37b87a532448bb4eea53c391d9da75561e387f6dc057f83d8c49a491f461f2a28ae3a166b18c916dc0df7b5c520f3f053ed232a06d448dd2059082351ccf13ed0c7e0e1d38007d9de80909a614e09f748a0c3ef540251904bbae92ddff2892694fa6428cf0c96015bdd2ebc893255796ebb52fbddedbec95270872d726187a239310238ae4d34606ffbe0dd0f5e0d7f0e729f44aafec5306bf69d9957e25fdbe06dae2197c0578a97675e59fba072bcc0bb57c55219493db2dbefc835515423195a739bee7aaf2f46e406ecbf7cf93b35bdcc65f32fe7ec7fc25a3bcb8d35bfd399ea75589c3f9aa529a55ae7a1053d35fabd397566425eb10296accc6e9c24ad6ec36fe32316cc7c5f5eafe0d99be7c91eaeba83e4efda394e7e95565097608c7f27df08508542ad5ab7adabc285f49154a49437dd5ab4a1b7a1c1eaa535057f9f7cf2b857c8fa4febc4850f76221df2d841e47e36819a4cc11aa2fc1bbc8403dca871e0485d447639b2fa8f5c2d1744abdcac5229b428db067dba45de843dd335228140a55aabec441f5a66a7b6abda14da1462a1377a3e99452e9c2173752b3e7a0a20a85423ffa8af2a1b2879a556f3a8db4791dd72e557986cafb5e0474bfc2789a25697a10c556946a226b50b3bec8a65023950c92d2187c982f838cbd8be9b9366fada053536983a66c999ae6699294ae3c51013bb2eaa9aaa46d863ef426b2469bf5592c154b25e3697315a2839e7c73399b5c95681715a20323f9bc3d55c5a22a7d87d66bbd290ebdcda1f204411685507f71e5a92ccb0f912fa872a5cd50e93b6d5e93371a9f0ad1c1127cfa4e4fbb4e5349bb4e37f2e3d32e6b964ef9c58f481f32bebc381e6a4629bd88e92f1bf3d5fd52798ef74966965196bed3aed3c23a76ff741a4733df8ea94ada8dc2365fbc7fa5dd686cf3561f3260ee79e3783afd9be60b9286023f545f71a8f29aea698faa577de855af52bd6d17caab9e8a2f2a1c8d42be10c2ab2ff365bce7fc6596600836be8b2fff6e536548fd7d4782b6d4bfef4950d78bbf5e36195b50fe3c6593a7aa37f917a45353f52992d296ea5152b2ea4d52f53248d55732ab501e47a3c813f529182a15213b5092455f9f48aeff19148d3162c4888161c0f8182a2a38354251a95436885e55f650334a79d60fe1902abf763cdaf5e2ef77b37ec9f8fb2dfee28ce44a3245ca58fdb4793f065997c0201b36de911d816981b044d09a7d41be7fd6b02ac8f7cf150bb322b0b054cac2527fa61ef659c5aa7ceafdc50b1569db54bdea6b0e7db6300bb33228256d53559e398419a543cda1efc1e6fa3a889e7c1b445fcb1e2a0da11f1f47b3f8db737ddaa552c2e3ab5ba6c8ea5395b4f9ed0a9567ea43a2bf0f922e0d3894cf43cd2f3e559649461c5d928e7b417a11122c5353c6eacf2f5f2aa879ff84f96b555e2ad0d5fdfb8599a90559965126c9f73ea5325c5c6ddd3f3b0a16a77acf53bdea737cae3654394ae8cb24e379e2c9a11287d0f350b3e871701e6af6226ddea7f7a6fe05597bdabca73f3b86c3060a5983c7db55f2d07073aa34dbbc2a0bcbf9eafee8699f5e1e959ef49e33fd6dd3a73c97efe3701599f224793a6b3ec928e5c5856063fd94173fac39d7ae94bf7f7bda555d9cb28ba7ede2492b43da589b1724e2fce536bebaefa194a73786ca73545d5c4a69616ddeefdefbd3c28ed4af36a85ef5b876a1186957cd613101aaaf291415697ba839559ea8f71c45d27c42d2ec82c49dc893e2b020cf9309b94367224f5b224f533e2fce34224f9b4f0bcbf74792879a45e5e986e4ca1d3f9b0ebf8949b32bdb85b602191274bfbef066baa56e2a33a85d725e993b93a9ede997c5ddfcf5fd7c3fdfcfed76fb7e6edf12100fd0cc0e4826f73bcfb7a45ddf9f2058ea5479727d6fe7e4799ffd75651eeed459dc69715d04917cfff3901d5b767be2b160f4cab3debe1f5ff58360e3f773fa7e9e7e3ffeb2b85ef5dfff3f9dc611678dd8255689cdf6e47e6c8db4ab9e3667828d1d915cdfdab2783f7f48e0daf452309ef6b438cb0327579a7f861b666c76ea0f4dad8dc47edc5cc9cc06a12ddd890758e5fbb66b7a5dddbb8d19e6e5d166bfca2975594069f49f5da61ff6ebcea80c5708daf25430f2084da3ca95dd9b36cd7eaf03fdce89c848713c1b993e4bcbda7567bcca29355e1e7dfad1655f1e271364321d2285927c7e3f52d8ee83b7563fbdbfaeac57fd9e378ea7d35f599985f17bb0b97b1d44b92b6df0efca1e6ac6e1febd69b0afadb46f08447331b35cf880a0d4d22ccd921f9e1d20362ef3999e9c0da747d31ab6a408cf0d101e55e69303911a542aad7e83005296d1fbeea3c0653a240a990c43a643767832280ae98bd2ae5eafa4d7c930daaf3965fab6a577b2dcf65362acb90a04f971a3c9dfdb07ef155fbaffbc8bafcdadf9abf6f4aacdf7aa929a731c5bbf2ecd71daf5798ee338ee2e721d597f9b6fae363dfdba40ae4d7ffdca6be344dab4715b9b5d6d4e8ed3e67dc7b9f1f941eebf403a1bbeb7361748bb6e5a4cc0d7919f257ba8d92b4fda66d8665752dbc9ba2ac0cf06042bb5f762dc759ef755f2c70ba80604c350a494d24a86dca9534a69a52fa22faae46974c4414a326b254df44d5ec092c96462c20274c547abcd48851811247fffd9abb4c25c9ca35c69a02aa8540c1737452b19a21101000020004315003030140c874463f1789c4679327e14000d77a4466c5a1d0ba320876114c518640c4186016000014306066a46a300c1013f703f84e0e822866134805a21eee75a26a8e73548ff2085b405cd77af8b1592afddd243774074684b736e469374d749dd755461c283b49b928efde4984e61d5a4b76b4d63a3067c7d1b42e1484201ce981e24e47ac0461b05a7dff4df46399c330e68f6051bb0dbf8f4d5781de45367390c53379a50a0c0daec326b467077c7223f3f24cc3562ba5957142ac19d66eafeca2f26276eae8b98341412cc637e8d045b9f1d52d858a4137c3dc5e7ad489c6687ee0fbc1906abc51be8022bb00ea9a39ab5863202fa138dedc5abc98574422ecbbf02124af406a167a217908ff70b4797f3269c731a03ec29f39404bfa0fffc232a862d6104f297959379ff00358de6917dc88788682469a65ecc920b90eafa956c6f53265c8cf632bb79ae3b4248b38648a01cba0e87bef69e7663c5082f97c838e94e2171ec9c00ec8c110736ae974cf3cdde38753bdd25a78505557d6eab652f7b65a93cc63477b5ae111f731a171139460629605d4d090aaed20d074bbcd2b67a0aa1e7b97cd3722d4ed08fe98d4617ce72726c5d00eb4f6c09408fe383146aa0e26cd5864b503d78817077e2adf0b0d4d3c582e9fc95d25ab444a77db8db93671163d3d4e38f0a8e2f7488a1b4d1b30016cf040cbdab54c80a71ec55ce0fad64c8e14aa10e78a186b42a13016e290ef4c51251e8f01842a6322789215a7fc32e9320d5b17172b695fed3fd2e4c66793bfbc12a9940cbc274bb16ad950999e83e7197b87e56354b4e6b12aedd5fae3e93b3518b45390a6d9fe4fabdd28a5da0423a3171239ba59bc058a1158384a797eef6938a496ebcdb68394468db35784b40948c17b7e7f864ac856e00c3757204222bf51084b5c7ada967881392842098be017111f77783b8ee4f3869889b2629b7d9af01bb5b3835f18e46a02dc79700d002fcaeff263e3b35cfca1371b61a6e2ad5c806840bd7e6bd9d6cc162337b20ca82893554d1b92f86b32ed28af24c0a314095c465207fec750ee8def200e84f37a1695b64b8f23319e80250879d829613e9dc9f19c2b8b10f3d9fa8189010cb47cb512a5d3b35e4dc58c1d7f8e00a315b6589d1351d42ed54edc6933c7011e649b00bcd6648f74e1829a6b22ac51608f29b17e1583398fbc4de86899ce0b7f62c58c8acb7a85edb56a6fe9326a63ee03c0e3752c60e8cf32dac717859506e56ee3d71c6420855b5a109d2874f0e5ff8547ba330b667ba4d7c4572fda6f36447f7532bc8295a54ce133e0f7dce726219b613ac6ca166afc00b4e4b14a152a144bd69e6ff0528de7f07e8d88f3afd6118ef57c0c11bccc039ceaaa64d5421abc00a808ea0b86d781f85ca3b2281417d2b607e66d765e698b660810be671c62626ea11a3303629d32e5c352bc07e2e821da3c2c571a4c72c8a084a63988ce6f4017adde41430f3a10117f493f0b5228485133086e44a5380938fa9da830c2a40b4a4a639cbed8e2dba39cdc0058600d266d90d33f8eac5d143e6a2b548053ded274095774ccc9425de6a01c605bab4af2be5621794b603f2e1a5cd6b6a3e2edb0ee0c4f3491c335befd4ac1f748b15078859cb5cc5e122eb96185c66602ece5c90b7c07e2ef31668923f83a36095ab6c7beb61922ae6e67f2e8155acd7684d32012c0a5ba58d1d70051f3cd43cd1a366429a71365323d97c404813b000437f0204e88b84b398e89b0681150a2c25d31b5d09707d232fdc7a82b8cf1dafff0bab0cb0d5abbdbe048dc62807be6293c7cafdce843c576d1b62a143e269250fff900be253bb5cdf50b1d06a2beca74fafd6e9ff2f7eb92a177009850df13880039f1d324057defa280bb4e53b9462b979cfb61b4cad9e577a48ca6fd553e7a2360d48db4aab6d9a765af9cca73359b1c6863e699b66ca6a880f216091c8f7100ba081d969d96cb568e47506177802b2285e92e8383254866a147f18caab8d518dda9fd20d3feda5a8b8d680cc3ee068e6fc582a67892d214eafd4db3c58d59c00086a42a8d07eab4f4f9d4d432d3f4e2cbdbf5647e9cab7111a7471634b1dbc794cd3eb16f5c9a033e7e528e4d83cd18fcf125617ce7aa417ee2ff06620e177b277155e01baf5c2d1a4d2a8856803d0abe1d4d40528e57f88e0253a004aa5be9b01d800821b06354a97dbd7f469a6a660c517c2dd3cd344139fca319775d55dca1f593aff461c0c1a523394a6b8394b4cd52aa73a2f395fca0b2a4bc6597479f2cd3b2429f7f0d04e8430bebc76ada3ab4b16d678f3632811938d1c92a38659a2633c40361f1328150385a49f14116e146c62bc5261a1f7d61d5b59d3c231dd693723b680e2438278eaa77c60c1e5272cfe5c5821c1153a61a13843ab0f766f65221c527e18c6eb618b7e20721816a05d78025955e7dd56e51e64c712892d0d66705bfac18ccd43991ad1e2ff49023ce104f4c21e453e706fe4bea91d879b006e88741ab28632f8b721cea05856b1b3a16855cd9b12d8c7b8e68e875087d0fe905797c93b76f99c0e29b26409a180b4252749686a244200eb8feacf12dadea158248ac6c50c81feac4a4042c12e245a1fa5da253a7f4fb8a45d7557be946ec19a6945343f9cee623d82a05b5a654b511d424492ba936fda1c99e9abf221bc08116171b946b2c30239e15bd14db01132344142e3b99188e24d5d63f552559cd06961a967305562f138b4e8c692d95a0c46d0df55f80f59159a003546d210a09b80624231c339ecaeb270f326ff69e60cf7103cd51ad9677f9eea347f49d0b9cfba566e0d3211e62c0bd92ee9e6cf3cdfcdcdf1aae9ca5f04f9d425e0a4708768b76925b89cc73fd4bad35d99d8b99a9a98318a8c65b3b97eae945ddabc6ec222ca4fe93e04bd5289b7c3bb2b69132a86f8821c7ea92b7172cab1226e88dff9ccdc48e452415ab7a044dcf6d8735fcb93424dcb6ccf9ac61b5d3696b01259690fdac4f7b3e622c35974d10fcde53d0244fe91648b2dd242efd6d374fe5c64a920a74350222c0bd40e401b225a873a376d292bb21d3d31156e9cd74a0477111c89581290c41f53171d764e28542338049aced2f80e2167d1abbde3a4dc504d5876662436b395eed92245a60109b483bf6d5d0422aa9c66d03f079c56cb499155145a0645671253050f2fb5073aa57e8d96b8cc0cd2252ba738f2ee23fc09b11b9dbf77238a14893e7157486d09a82575f857de959be8fa14cef1f924dd485b6f2018908915e52a3d5bf33998fa1c100a7871840f6ea179e5e71ff1ecbd3b2ecbfc13c43840d3b034964b7c3d518b30b44135ff93685b7e56aed65f4556cbea164f217d859c9c1b0279ac7c21f8fb40d74d088ad17800d9add1b705c5afba59cb17e4c63af74567c84bfe19fee92c582071d39d22f9a8a0cc8d106b112f92fc25e729d427bc216772b9d16ef294f4c6470c798c5548e1ea41cc6ba340061fcdec2259466529659946fcfa1f9b80d37c5c6921e0502d45703907354aec4239ee9cb7ae68591c174030aa5016c2da5e35e3a0918b7613cdea007269a24915606a0b030c6411421e2beef68b1460a2b889740c7e08e14197aa95bcf38b4e5b46872901a08ec4a64ac552bd9f83808c2c18d398d2a9736e3925c3268b94645d35a6eb53db7f2316dd2f81d4badf72692d1d3e57da050ba7a1db33da2c7b9dcaf346f9c927bef41b8e7362af4b091db3d67f169978f51f3d296a439a2818269d485e26785acd203041eebb78ea85be6f4d31fa30a2bd36886dd06045ecd97a5843ce8bebb001dadaf478b08ba29d0c894f9ef89d097417af0c65410084ee17e16d1b74a4060a314ab7ee9548ef6de32a0b189bc699c04a67f5fa166940cfebc45b1677a675290ca4a04d8a8876506c81601b124d0a0a76b7e666c7858353ef1b08b3136378eb002554a87bb0077508e29213060e302a941f195843c6790cdafef41658b307b7f2d5a98160de1557572f2503bbf0a821b259808bbe9612e6a2f90a1756e67b25fa9578ded20ca8ce9f272ee63feeaa1d55e8b22fb323c6c45d0f3b1e8cd9de9327ced98d8b8325e0c62cef141be16b962a714a0c7f11b131972f0525f421a38cf07b0fb67b92ee92b20d329844681df1d3a8e597d6f9a55faf477412865893761c91fdbf23ed2c52d27b40e088f2dc061206d6836cc416ac222b867c6d5e34f174919ab888c5ef0bb86fd99c6c1c67ee3841ef8a51a9a22b0d8304186e5d4e5706d7c679795bb2b57c44418555309515e07a67e50a0334dfab608a0c3b28005cafa229d546eba97f01b13dbaf94329bb86943335228243d02d555c36b2f4c2eff0dce0508e4082eb361185e613ec082b21b10322a6c81ced504323dbfe479b1b5cedb639570d083063eeda3a0b17e65f33327a18b4ab8ab35a3c622bcd957abc993ac8b2a40e4ea0d513f72df537fb6351d706405095d5e73c886f1cdf5030cc9e2ea23b6c0f042f7edc30facd95729e4abd91c4cb1066dddc934346ed0985c4bae5ee90139c6c30e7d54003dcbcad2850b39714b3d785478583e6c3c8f931e002287f1727f1cbf2145fbbb66541ba157b5a7b420e6fea876df5b08d4bab9f67265160a084f44d900ede2611412247516f92a6666b5fc85b60df82c061428177cc8382fd90389b42f76b2daf82f6660882a21aed63084cc7619d6f7c13183acbe52d333f0750f22d7b66ae62aaf1cce18a976ff26822d6a13080d487f5ee0471c8107b446bb37187e02cd5ab620e65f0a23a77abdb84e6a99ee998f0a260c3f044702872e55e3a022c7afa0275ac1c0d2aa3ae319181900efa5373f7ebcfbe864b1f2abe058276a3ef4109031a28c2de7c2df92da00fa16c0be57e4f6a0ab0146d775402c241c32c2c91151781e97816ebaacf3eac693bd874d98af24797c0d38ff8ecd1da6a68ae31a48a56cd5fb39b5b5f4b89439138ec23eedec1cb81156656b303f174a52ba798dfbcbae6768c694326a0e1a318b70bee468d5095fdc60918d1de6b68f2aa40700f2006661e0df4e302679ce3557e59d88d506fb3ab1af9c6d4e88daced3630809ee986f446a17427288f658e1584abff74255a3f2890cac6402c59152fd668a8456ee4356a08fea06db84a40b95d6493ed070bda8380fda9e5209f5b177873b856849f284f49cda4748309a5afd700da4e8d351aa32a5f5d376e2925633523502b20b841160ffa7d4b8cb0b3e2db62deb02057c95bfb88998a77b191a9c69778fe73c52b8a3f0a68b6010e8c4921e0d6bac5325851e80323b95b353fae143a4503816bd30233442261f021b31bedc964bee18d6831bbb8485884c8e0e0678f33ad1fcd5083cfa12a6ade8fd6752cd5c3747a755add21adf98e95ee766351d208accb075c4a89d62e5401adfa4e64190d77f27ef327ea4ac79f2eb78d967ffbc134c985ae79a600dd8443dd9a2dada96a40689709a3b0ac1680f9b61a055ce096bffecdf06d617aede3c08958bf72e89bc4d35603d7e7812b66c8d6e84ef79a63ded2e33607b3a033b34ff3fda8f3bf746b0b5f38f3453af43c9cc39a3dc88d812f66c3597b5315820a741d3b6cee179fe8d85d591f15dac4c44f8bf23090b789fe5ed50e2a5058575f2752cf16fb6cd236e052640afd92351402d67e3c267b385840bf78616c1132c670b0630b40bc3367eac1a379a9de75e7622cf3669b09e02aa12bdecdd48df99ea8bbfa312339afce1b0af0d77466aec1206b6baf0ee01f2f76013a6e61609c02693523d279efedbebf2388b23681bccfc4e15b7d9ec01f99ca36b93c43ca59c31b79d60a47daea7cd395759f5bb4e4303d8cac3d498e4e329bfda0def0a22a1e7700914e9a3817aa582d0c93bb799c79b24482f59c371cf8d247f6ec90097cfd7b8602f15886333e3fc1b9f5931bcd5435ebf7e28fb64659a3b2ce497f540a6b8a186ed974e9edb02d12752dcb99135194ce38470c66b99faf10543ce78a5f24b08db06fc5d0a554875e266c3f196b39689ac976f1fc633d13d6e8407c55c045873c6050484835e9af85bc671f9330796130c3b59b89c44ddebef2a7d03e9013452362fe9e817cf72fa5532fc12ccc41cc6cfa6508dc393119b2905f467f6d64a9de24ab682f8009ef8732908d78260ddc30a879376de76687b0b88721bb0acbbf400997c0018301b6e1e664d8094085b4e027bb30038426d613e5a0b119856de7532fc4de997e0b3baae76d6d669bb5a7da22c132b24648f982786bcb02aa3aef2022aac7ae1e8ef7075e5a3003b80ac308ec13b08c228f8fe18f4c9b7d36511731062fe3f896feb53c0b7d3add09d1459fc53da75c65e620bbd8db48d54eba37363e7394f558cc5b274b2f1147dbf43bb4678045fd50568abe9225ddea2d20c4fed781d836498427bbc47ae966694f0492238f92db9d91b15768351ab3847d53a559a8df51ab1893e355c6e34c5f233e2dafd9ef9c4448ff51c95f01a79608dab976ce780ad0c7ddd1e4f15d406c418b89381be0b61b592ba9f9a8e84f1ace00fcc5488dc4e46805f003fd451f5ad5d1ba8657e0330876bea4f7aea3658194a05ccece7660453162fdf796215a22ec61a3709c4850080b22a1d2cb9f020d0437283d16308738496e92034460f535b45bd094dcac45d204189b17333de5566801d372fe5fe0740db641bad67e7afc67782955deccf4860bcceafde08a0d4dfce904a3937735fae6c1dcb8c486f271646966bd8bfc18e86130215ebcd9861ebfdbe6fe3b167e0b6f654fb51b0d76aba1ee35a0ab0676d1e82e34d8ad06bad798ae1aec46e3ddd1b09b1a745d03dd6b743afc50ff1eb9be1a9a2f72a93b73f1e4e189db62d6747d152cabc31dcbbf4675d75a8956c9e0b47ea63fe91f9d8990ee76e90eb3e90d5a7213d68087aa5286e45c1f002a4db719c1b1bae20ab90eabdeb21043159a276cfc48102d2d28a76693f96a2d81699011b305218acb267dca13d8dd16ad08e82c9f93b03a14e0b90c1abe8d434c59d7d2f8c9ed15d5010ecefdde81d063403903422cc71fe46dbab3b01751e1f5ba39f21a7c70c5cbda827e3f2b2d167df0cb748063268121250eb670b4a9cae55d22158e4d861c426a2e0646ae3fab058e57320fa7ace692857fe458e111566d9359c1c3d4303e3e4080ddf3ba2294ce56df476032a1620a36b0c2ab3eac5e09c2841efb2a0e3cb0e266a428948b7028ce82eb85e1989c1be7ea23dce10e017a69f6c6ade384d1d15ebe3846881b86bb60867d52cd4230cfca82f2f08a28e5a415c6edf13489af1200a3559827f1daa66065b9aefce310c52d64d2136a317dbc9b87a9023379b3b83141bd9beae4ca890542ec99015800384e2a59400f97b144a40a53ebf465e6918ccc4bc72df75ee5bdcabf4310ba53704acd96e0e753d81ddea8708296c92ebe89e6acef76f921141cf08a5ee2f0f1bee68abcd38228c121f921bdfe28663e956862da0dbe4cab27440e2d1b8959462c77aa0e3877b5d90235350502b852901c4831ecf11699f96b4012dfb2a7febb3899ae6802b6dad400feafa4ae1e5d2b3ab62058de237ba88e93360e7b7f16ea95f6712a55bed32658e2137ee77df3026a2ce926a122546030b1cd267019e0a168bef9cf66b0effc7b5f1d2d2d6b315cf005ae27c67f720fdc0beb01e404d47e5d62068b44d4008e00b2dc0310c6314a186cb7ae5dc392516c51f424e958f4ddc8ce791265d212e2fb630bea3a8d780c650eb604a4f1115c292815b6ec6f1619990405d71cc9bc3080f4ec07a6693ac85a441c6bb9ac3d7cd67f473f97bc2f7fef0986902adf853243a15aa80c9a8aa31c67a8de130ef0948be991892eef7ec8a19df2859005da6b7168fd02f04498727b6c1a02e966a22fe240995a3b6a0028b223f50c179418d0ce62d71376fe555c716446b3440cfeaf137a962b118e71712285ae780589a00872320a905832f9ac72fa72eb98591e1852e88c2e33a4f8b2703dde726514bdae84478482103570b7e63d7c7afe65b10ff7cf504fd0c97c7050b943d8ed92e6ef98c6501fa5d97b6eb8741dcfa59acbdde4539c0c23a8b8f60b4343e8f3c6f674e491216c7477ef33f9c9cba29f466cc71bbbdbd5fe63a1e6986a48a58d07edaa34fd1ac556d5f42dc5542d2fb408eb9ddf009a5dc64a98fedb9a35140a27c02260270b102bd8342bd50d67df620c7f51cfad3622419365eefab5197e9119ed59cd8ce38aa8f971afe7754749dad78c5ac4039f566ef6b51056033a38bf45a95d84ca3cf4ddcf215752036508d76abc0f7dd21c615c9406485422141fba7ccf22e84d29c990c0ae03eee589f06471f4db33696218b1ecced4b9bd08b3962321ba544e851409611412bab32190fa41b11486c1a32563b9c3eec93247c7231e70fe4ef1d348ec7ab550f4598692797d23d540deea09a134c6a78b32307033f4879a20e4870a6f156dcc3ed002a378425aed45311b3c24deeab6066fcd1e7bd1e90d007a373acc3ba3d98677e1e21ae8aa14db4f2ffc8eb49df882c0524940e3a0962e07e8d62f08f2ec9e4d0a69d7afe3b5c5dd59afefac869d30dc987102a5debaec98cdd00e05827a571f104f8c4ecfda75a77f4b0a2dac8b26608662660750b5dfb29fdb33200ed3352d74e843e7adc01905c77803f23bb83408d5767848adeccd6cdde8c35a6b30ce38f428f1160c0c183ea4363d890eb5a516e24bcd411727bad8b62a2e088d104253a0497db332a8564131207c16a37305406fa552b7f9b8196aeebc43b9c785727709ac3502338b502748fc17d237734e79d1ebe8766229d6f2773c5ad9263d81347789a5a324f968b5f0735817838723fe6443ec99ee7d98a2166bd38d1a1f5b7d54f15cc6d243cbd9578458933503fda85676547d74c6f2aa8bc7a34f51f67767cd31d756d3701b7247b50af0b1cd2b887ec60e0ea708033f29fe0a908845a2337ec77f46b4d1328264377fc03c77854270ed70b62a5c413ac8ba017be8d038cb8944aba2a640856e1bb9e24427482efd7235058712e730dcf5de90865044bbc24ce70494f3874ca76d81f952da0539252ab0bc1c449abb20f158ed9540247aac651132f073ae889a148d4d4560132fd5f1737fd986a0ccaf09c1448303839919c951b7a199cc9f940e088548d91efa509df3152dd2a6e530cc7015be7bdc3922c245cf63a39ad1aff9762b4a87b871856f1f6ef3ada1a0d4d4410e28b449db25bcdc1d3178caa25f90a99d45a15a9ed7b6ebedb84e5048034f3897b0235a52d0490d65d2b1a3f1464175263bcb811adcbb74bc428435228926bcdbe49140ab0245b85860216afe7a60d12bcccc9b0a5f486c11845daa80ad216e262756430cc9ab04ceb11b44c27f8df64b95d334ea1a617c8815c34309f11cb2228cd16b0e16aa90159e1cd36318545aec10919eb9876ceb5d8dbfd2dbc3f74a64332d2d9a6fd9e8a4146f3b9437ad1e82b8ebd940d3139955e421bc8a9c6b73ce48a327be6e0596efccb7c6780953be5be78e7fee845660a7ed756dc6dc6d5705bac8fd295e2c64212ebce5aad425bb78bc5e4c96fbbee81db3d8881b02b4714d6e01cda300bacb7d6a051a36afc0f7d1b7fe47227220e8cf15b2b7525c007552dcb9edaca8b54d49351f562de6d0c777d9e9299c61150014065417be045ad37498a074665e653ecfe02d0053f6e88417b8f26cbf24497e89deceb2e5e1b5ff36122fd2dfe560321b1c41517949f8c8a9ef6ac8f0f0da619d5eb198ee6e4b86a7618888dbe75619f74e7bea413e093a9ff39b1be7c11d7835ef18c3ff25c9750833ac98759517273246dd40f15f1c58b2d7669d22148b4e96d84579758e7457c3a63e6f6f6dd23c5f632abfaf410cf240c5538d0c73a71c983ad642fca1dcc69b2c6f71e26137892417aedd639ed920d0d50d3c62da7839408a449f50fdf3f523db285adde358465f4f347100da4aad1fa38a7c9dcfa4b5b3688e93a21d5731d030a5b71d8d1b142032d49e28f0f76f4b3e9f42aa10e3c16046d53720c70b38ff9728f74a8c2f74f29b824745ffd0b7d00bf20c2773640834820945261c3c0c8bacb64f940527389791273d6927a9c1670eaee51ab6e10f44f017dd4e528535968f6576c8bc44983c5ef1709bb04225ea4cbf746102033bb4755dcc0323159253acf785bb03f8a3022c0e183170a8469410b078696607872eeffd3143a7f73ccebb89bb10d291fa12485edde3657aad8f6dc6e66b190a6898ceab08767c67f49e00d67180f02b5af022d2f0100236a3be48d4ede85d744f3ddaa2d7f93d3e641ef5cc24c6166d73ca09c0ba939726704ce71eb6223aabb5be69999bd8b1490625afa1774d1d784682c5bbebb20092358b7283ca90b89434565565c858393166c1f5e78ab555dec3353c54992a34c6bc859b10b720a3f4d12d76b8c34a814d3d2f6f51d730f0ed46a553a3559c841a2b9caccf27876b83adcbc6ad023dbefc7e749fd48a8566489f47e9c1e2ff08043646b583127cc5cd0850d831c609bc9b19f3d8f5a25de62c95b5c2ff9023963da64cd845073fef23624ddebb4a7c29e8190f411fa07dee8c6c51c275e9caf2518e3ac15eb2958cb5a7aab9e5ee98d03f543a84b253afcad42529a24b3a96ec2881ac57c6b28902fe56350ae3c2fe58eeb7847bd8aa6bb90fdb63014f780f283ceca4279c580b1cee1913b02f8ed841c7905bae989c3cfb624ef311d0e16d389bc480b1f60d3cb6f231f012d354807b90b08ee8c99ddbfd36e050335b75998bec8bbb2f8ba46fb34c6f380cd36b3febe0c6341da6fbab8bb24436055126af2d955df8c3e7a62e103a0d44a9e2d119271d8bc8edc5186bfac30f86ffacc478d380f87f0464297941d9c38169f9a0a4ad8e94c2782cdf56cbadf2638ab7ab35a76341132cdc7409b73db977d0153e084bdefc58a0d9135bd7ffffc37010e4a99789fb1b42cbc1a1a9404b763f2070d8e2eef9a270f1b42f881c952085656e54c47d1bc66a691903c751b641170941bbaf96d519db42a302533877abc535a6ab4f0e2d802c88b7dbf68f643aa08177bc4ef526fdf593532eb722a32f8b92aedd69ab0514f12958849355bf167edf08da696458cfbdb94a929b986fa4e0d31b4bfdde71136017824cfc56ae889b69cfa423636227b19d1a43c8bc3be9d22eca700eda768b4e728de67154943de3c1902029fa7a4d0613fab04ac89658b27554a0556d28b0cdac2319b8e20b0b1b2bac5822dae8eb4a3c4b74bb215542434fdde22dc6e96b8bb6ab38a3f90053529172447f0ed24e007ca32a53d05351faa3fc7aa6830ba4b87216913a15a339939f2e6521cb65ed68f4b6205155644e042e8703bdadeb73c34606b61de9d7710e02b496d4e858a656b84c9903e20a9e0c4d3bc89d9bcc006dcd63ad9e89794bce132e8f6aa60c6d4824625606ebcfeba8f6aa3ffbc7750c6b0eb566245954fa64d7bf3d4226dc6849665c1cf8775c90d7917be93801bc9d7833f1c14c98b90bca0c3243e4da912c234a4308d0c656a4fdf007d902ba280c3d7098c618d1dc2784ea9bbdbd86ba00fc7e19d26017e8584d02a48dc3dd61b4b603c0e9affb06ce2b758fbe1c843d9a0f6c3eb70d85dabf6847912d5d21608bd638f83e13135dc51cdc0f04ad9c995eb61817b93e8e78d63519f2c121cf2c8c7174cced1da201c5608d4535c87abeb140248495137a4c2c69953a12cd21a63aa8313ad8f8b4b6a70f69c2f8f9f3f71b1610ffe3324d65f94c5fdc8f21fa7f36e60b2155a0fa4228eb0270eeb2af25ab46720f9438e9744053836b5f7d0c27c9d8305de89610f18d9f925582d30d54ba49d706a17b95c7ac20523430cc55bedebdfec47d4572b30912aebbaae0ecd58fb2e46efdd5c9c604731b42c632e617a3bb495ce7dbd84f9bef04bf7511f1495bf3b9ed04223d9e0a460f8840328c2cfdb445f549009292d86b7e1f122ae4ab8812088f0446fcaa6ffdb5109c7480b732df0cf95ab93c2d745274b8b3ee9a82137ce2a2cca61544c3b06581abd53efc47cad0610027889f5dfcf5d880c34ed9a716ac04903f73e9c0377727a90565700f7a6d75f3edf1607bafa714e9e538dcf792dac88398d4fcf575579e1059088abdd16fe0cce239a5036414216717bc4082c2a29d53eafe15a6676f7ab2d9b2fe81047a8720c80e6496042d97c615a30fb7b3e0776a3df4d2cfddb05d6d57386d0f643a490c73a77eb2623a6203d7eb8f017133a25e72430db316d250950029e51a596fac566c5a589a5192ac157dc39afe82aadb093fe8c5efdd388672cfcc47f8fb10e979d69705087e09309778acf10a36bf0df1cbf0e8722f2e9a7b6360fa957b04a41dc8d535a8ff137a35afb08f9c5c4780b8cd37e6f4c3b381e75de46d5b7e5950889ab8cca16fd26c576db03ac20ac8e21861323f25e778271414817144a88eba892d188e97465e17f4ebaaf62fb21a10b52499de20e26e4fbfbb0e00f6b220f34786adca9ef2831492c9fb291424f57c05c69c248a7bcd26634791a3cef1a6b81a5658ab50f7220eb233ba84e990209364b5ba82e1bd8f7ca735a609df88e83f6f076bfdf54dbeef882beca0b8c9340681996a856b80146b4679eab58e1c6547f890e0449e3d53454a53b02e829158b5fa8a8cbf8370ee28a6a971d064abd509a773e5eb89dc1cf9da456952b54bff6db190bf3115b93c86504b632fcf73a48e41428552598b65c46d89e5dd7ed795342b25929cf4dc37f3f4155068f1db871d9ace8c14a1ef7e9c436f665d563e31c4ab730dcd071a972b9dbcdb17015c6116e80a33388d0da191e2fb5c4e741f9cd80ab72f4a67fbe01e2e951701921f8a48cdc3c734c4739e4e48be55649d86741e6f87b0a0764cb0cde6d50d3bf0c4c4e64e96a0fa0e0eae2d02fcb4087d8fab39898f5c31924878111384a545a5c9ae97f4644702aff1bb7de7a9147bb264b74b32c9e5dc84644759e48f22cdcd2e730b96cca641f2a62fbc1023f01f0c35e257cbe80ff00a026a9611b4b0f5f97bd9d276ed06c496e8b13d08d85e1137b4c7b1844a9e0804f9587dad3951e4f959a100c0618dc0650208254001e3cdc6270f0f9da58d18d6f9ad02338d2bf224a831af0b02683b21864a0b38fa4f6c4d4f9ae8d8ba80688f520519e17e642e5ccd394dc419d7ca4fe79563a5152f0952d357593c3357fa554515cc6a82db21661b724636a05b3783c8c4986c53c40e0ff5ff40c0def33ea8e25ea28a27d7864775ff1880d70dd06cee863d7425c195e02f01ac7adf534cc018e679ba2d2a3bd7d236a85487addf6a4aaf7d707f785dbdbe35b575e61e9ea5ed4b5d49f304fc0db7ee119a6f746881f246687b92892418011a04b7c8b15e662e46d2ff94f37191d3b7aa4f0d430f27fbf9c08db1fc1cf7cca7c388b79d3edc7aa0c30b14965861354a5f901b837f728db1a18c0b129f550a64710119cff5ae77509fdad8638509782bd7ad0b165fd24d301f75293ee8b9b68b61471f8dd57b1c472d92b789d1cbc752d70bd4a1be7197d5abbfb89dac01dc12efa7cde05bd34bfe723d3513595efa6d9139c9c785c2b095c4f29eed53dad3bb7b2613e9de7e8f9df952ae8f53e183cc775b73a07a3076e56c94791671140d09744171f9822ada6319de5ef04d06f03d8660b95ec0b5c5007c0ff3bd5b86d2a338a95bd7439a678e93bbf5850214af775117b0b05ee241529720d5fc780726fff490b77a89080d563668f747824a96baa6ed23d1b62a936455411215ee509c35667e7e42c07990a8a32ca1fd2659b839d93284aac775986ed25eed2baed2d792826cd2e00db1d9578e05fb40ece18b4e70ba1cfc57e0aa9ed5849267a0961ce0583d8e435218bb099362b3ce6089c1a28a45096054208c2c04511d5d415650792d46b82ce77623cf6ea4d6acaa48419e570fc7beadcfea30e0212c551064e45ca6c1a7ee2f3f050e79ed5c08528be02ad26e2ed8f8315141146bb4b21fdccd055fd4f9e95f00f62d0bc0793f19377e55c669436758af7f3f13ed3a503e85d70567de714f6354a528006040d341532b02130e8bb1c1ad6e17082aec516b3826ad83ecb1caab8b2c5e4d61dba468db234fffd13eceecd890202899c5cb3e16a8c408657c524c0dc369b2745b5baaeffc7339beaee7776e69a4a7a5058cc45e6f118bd7ae523dc441e38090b21810dadde7c73a9b300f76ce7a5d0ab2d3f8efa888314cb8e034ceb19aabe9c79269dcb2aa77a79fc5f8af4c9d4d8a029c4fb856c62e39dfc6944344e5d1e16bc8896294d7b6a10ed69b30a09130499884430ac6f13a4c459b562d089b49c79cfa647fb8e30f189badb41c42f1b97bb2b6187a215924d2d4a385181c6f8be696d0d51771aa35c3e9e6c910b747f4bacd62a06470f3f18ba28596cc3a2f31f98dc12513fee6bc0ab0d527921c1061e84537245fd99c4e11a0b7e4fa99516aeda37368da80844b6bb3a1cbf905281be7fa854ba23eb543c13f863d70ec250ac46a01a9097a52a61c6149e2c7c94405f46642b9d52052147dce834add05942f7c46e9c0ced16126c753470bbeac8710153441c09389d595ccad6767181aa73766a5ed3c7d1c4ba3972be29305d0a21ce655cc089d74435511a79d5794e365a2def0c6e332942bee32162ce25cda2ebdeb120acdb12ee5c899efa516e5c3b27904ce2b4ffc54e4dd57b1a2e4a241dd4fb35c047793ef0cf485f21b3f70b573817ba1f75e99fe2eaf48cec904fe4b5a8c73b13abf3b93c0592d97d7632eb433a2a167758631cf41d3fa8fc01f44da8b8f1034055dde86c3594b60d37bf39e85a0ab12d7104284f9a870fd97d601cd6b05a4c9f5e7f4c032277fc2b693bda7504957045aaf32df30432941db11ff534839cfe525c520204462328aa6b6fe4d2c61613e0999b62ee2232786196b191c6afb28b68a88e89413b052cc0ad9152e5a5c43bc3b883bf4d590a5c0a34c512eb48d7674376e07ed6500d1f9af2486aec9d917ea385bc54d27008f19ee58923260fcce855e878f0d93b02134f495eafcd393f1c421c70e3df2249454c264ac2b4cde01a74678329422b334c1115d8798a6429e44a28c5c69b0bc582c228ddaea229495156a979b8d349079d02b87bce172d6b71b6450e1ffcf0170f3b2ed35ac311eb6ac141ee18d4ea7bc5abad7ec3be6b1d605b70a63727a9284dc0a2008086c7117182cd756bf7064ac5e81286443541e6b00b72dde5ac7dce229ad03509e0c347adbdafeae905a619fc072a547cf30cd493d8f7f1e4b18e0bc8a62ebcd53ff398689b189b0fd440d827d0b01f8f4a6afd92ac3b2b6ddaef23325e0d98bb5cb7e8d86448d5e786014e66d4b42bfb181bd3591850458bd41bc6f33bfd1fc1653d6a62566f37e6bb7e871544618212e4962a2b7ed8e92ce6e580156515d5e0cdb6cc56120b861789972ee463b0e174efa5c91029c186c18861562dd29e0a5ac5d9ac67fac7ca7f4bf04b4a8fcfe9a8ecc0532363282bac01bd510e8f6fa3ee6089030bb10225b7ceb64b08415ab462b5732cda69200ca7ecacb95a9c93fd27f4aa4ea87b98901c316fd8bdd6f36d0d99b131ad769407bedb43428f873314bd3b1d2e97fbc69303e1d7a3c7047ca608d2753303f14d6fe951976c9fb1d1f18273bcb41777cf3421db1471977543d92f37e2ce106efa5507ed0dbaace3e2adfd42390c684387cc8fa1abc0a353d732a583ee6256df3b951d2340e3f60c96fd371f7aa79b9e329c032f79fdbcdf9002e16c362bd426cbfe7641b2316228c434489af698a92134152994dde59c46ec0739f67c5da81caa1faaccbdae34b5768749dc87ff6e80a179336379c47ea3a0479a6027c3ba48743506f2f70721e06d1d65e1f9d016056390a62fc1b40bc1584906e9653359ff1830cdec2f5ef6b7ffb7bec2e299ac06b4f3376d8ae84faae14e6bef24eb63facab9c899d446f0796b2f2cde682f61d17939f348f729bfda9850a42cdbaf170b9857251d6543bd00de88b64c19aadcf8b379a455a95ac0d2932a709d1417cc21d1d05b4b3486c22d4212ced7d7a425fe0a3636a7a2fa3e0a27cdc379b4ec568409df54bedf90eb2629c3239c218f49ab46da1f7006c1cc00a5c478ba8c55abead4f1a04e217a1ff14f440319b80c3be2e94ed3a3c3d1f9cc750b4e2f90d9b438395c5faa8f87a3ac31292939807077f1224733815efd17a443fd02d2ba5e0b17ee9aa73091f45ff6e490ee2284c515b5c3e644e7696041e970d0efb07f60725f7b3d23ae125b06ed459a735dbe72376bca89638c3fc4f26021d5dd632737feb173994602d8b84b46ef2700dda1fe0358e45423be24f2a94df479c330d234028869f769779c15a5b9ac4adb38ea6c1f68db29d553f1d80524c7ff31a63c8796bff8b6e74643ef1908e8799b5cb58209af3313ac4f4531d3ef1ba133bde31e443c8ba8463ea190ae985224a7cafcf98185833e85fcb7747ba2ee18102e746e7898e3403c1d815663ed02e102290e8495b27bff7979fb7d9f8616f276b5373aa52319fce4ff17323df493ea41f6f25fc371640a0056f3339c0310e40116ded8307db0a4d02d7ab16a956d3fa88e18a5ac8573048e1f1ead13ca1cf068f4c2da80873a9c263b23db9a5bcf4e9cf68ac34c1369f226dd7d1cc32c1a5389a9875d9b7a59c254076f09de95abcedf8d43ed1bf5dab8f0e065362f39d8c6bb111de40da828e3478abb3a4dca40a258e8df535825f8a81c267e09a4f261299506548b4def1c0a881a2d6e941fac80c34042a9c8b898a18cb51c659f0e9ef1d59f1a1c856907073de42936a8abd47087a2cdb5362d934ea0508ab2a7427268733c4186161e39cabd6730270b4c542de5174cae03e4c17ee822a040a2bf57ccf4ca25bc2ae1dbf5f109f890d2d4f2cabf237161802ff6293f2897ce6782c38c4779c82f4a613e860a40810837f1647197af7cee7dfc7393929a11073581e4dc37ac86d00b201038de56fb2b4de6686a1f359e7be128663ea5a42a7be74ac4d694ac59237f4b852d28d1ec50a0cc450d7584e8178dbe552a1802032da9a2110944ea07a55ae7194409a1aee52a20c8ad01f83c48d7fe212ee601691e5fab48528a15a1b9a7b636921cb1d4f98a55b8b2858ee16196f777053081a92c1d878745b7a848f440840b45f34f46105f35facf81266f04ab557a3fd0b0d71dacdd25a3bf9f5c56b1caa51363d92f1d390b74b03d07c1baef705073375a65dc20ea9a0533534202585b295319017b5cae754379989efc82585f12ddb070f966561dfdc81b779a8451d26e782c6c5a97569d3f6a9bdf0344f0778d9dfe8c65cbc9946fd8cf51c260f1e3543dcf90221648b156db62628870d1d822472e8dfe966b3797fb78165c2df32477737fc2b35a282ae84913b7c0ac9db135a79ac8f0b9460bc26c65d937a816d5329c8f5222713c9b210444b86c30aa76a5554afb1c37ca650ba6b4861db848696ee0d9235877ecee5423d3a60733adc5f78b24f693eee335686f577d49e5e21c337b9bfaed800a3c768a23ec7f2d3e52fe87d8c5b9d71200516cd36744d7b8d770726428e04f9461affc8f5ba9d681f902ef0f1bd1590b2b1bb89111d0dee4a61e88e0446ae4c59de203d5feaf6f69f85dd44f664bda2fcc7e45857edeb3f354eb5b0b1fb974fc11551af5e0ed9ca39da8cc4f62f1afc27c7a5fc43977ebf19559b8fbba5a90ade90994cb7acb1ccfeb559a6bee723649a37a14b8c22ef84e1d349f1a887a4b47a820333ed1e40dd95a1d05392b75ea72964762e33eec76f693dd77bc0dca58a1271a27962d371baf096d6ca5b541cfae33e215617034a9ab7f70ea0c7aef551d86ab7028d0271b325676838f83a30863d7fddd52eaa68a0cb18bf09630ddf491a0ec60ff13918f4b35c2dbc89583fc59e930cf780d8a9046e2e243828d51da219115e910e24c5c1fa314f44d773cc1c83b9f7ee1cb630ac596673fd174152aa2a48a71128138b1cac291c5420182738655d2adc79639ac7b929a58a53e7842202542c736922c00a5c6c0e4fb8fcb3ab68a7cf51a6e8a69cd5b056e6e8ad121f57b3b92b13ea55d25f4dc3cab3804b95d5a864432a4621401a5069bb9be51c4de5a2e63bbae8b9db8ac667e2879763f53768b5728c5c154acd19d5c636a679b1c902f8b9272911d7aa652bb2bddc4736a2bf007db3f91d8b15fe687afb535c145c32bca4f18b9d1988a8734529e4095a3ee752f5b11149559d6ba3469110d86378308aded4e169ac6dcc312891a354d666cd49ba500a7c396f636ca624bb047ad1ec449380d51c9ae5a29d4127370aadd0119a5adc314b98df63bac9d816b56160d45356d888211d0b6b92a74b60f98250d4a69b65ebdd5674f250f4c8a33cb2ce658d8aa7c7dd6cc38150ec3aac28b176b7f7fbc7728c2f32546696d98cef925e01d9bdd9b15b590651355a74292b26841eed990d4ffba62b3fcb0a78ee405145b53aabafe5eff39bffc4734f918fc05dbe3f5914e7d18c19a6a61eeeb6133a88618b5240cc244c12b6cc177e5534a62eea581173171beb717f793476404eeaa160f04c34214274d341c6370075ab0056fbb2628fc7fa507f355ad69fd2e178bc16c79ea1e6331cca489c3bd45d118f365d850e86ea11d0fbae38cf53a7ec1467ef50f2b33b06e9818ed85f48ac17e15fb0d293ba78454778482f279648b44405073b53038161e9328feef9516625d4fb1635ff43d400ab133df17c69ab04a39da7ad52420fe4a15bcf3136ab46c954e2ef8755843a940787dd76c7b4e62ac4549f1334613f5e9d8ff34b9eba27aaf686f50d5c80e12707b1e262882fc88f145d6ec15911199ad9cbcf418888cd86451df65778a62158f7e907e7e0bfba5dcdb85b695135fa380032cfffa964344e3ba4ba1710dbdca0b0509930597b7ac46cc05230080c70807245c54afc6f4d2e3409f4ad35b8b1c6ce1c4c924061163b27df091caa2987648a19e6d7e5944ba062cd603230834041ed6485e3bdbd5e6e5ec7247e360d622745e9cfcffe48ba9a6a0dd293479f9fae04db230102137a81c0f4ace342059d3af33e2d7d3b91a6b70372397b13e0c41bc762118e68573d72b927881b3ebc92ae8c043abd8d0a01aecc104c0f339c6ba9e3b41ab69a6da37d470dc50f965b6695e259f0842b9630e022a1c7410ca40184d44bd2405444b77fd11be04c2948e577d35b718b2afc86b0454004953d7a031cf3d67ea8d9c7716787a816f431901128a0b17a2971b085409535621e9db160162f1d05ce43fe3bc54113d3d09680f1fdf23ca65841ebab724e9eb76872a78bfd82fa083a472d8b43b2ba3072a8b5c26032deb1a86185706462ad641a5c272b01bcf8b92cc86d8c6317b5168c67b1b63c16aa9be7a1103d25c6aa0dd41e8f59933cf4c6454d789c299dae0986dd83451399b79504c434a79ab50b024c51ef1450dcc9664bb164c305367148b3bb2590d8289fe4c9599e33038f0c0448cc45067398e6e8e3bda0f020838591942aa51fe6739ada8dbd0c063f54c69d7da502301d6f6006bb000f4255c0acaf724f386659d02442accdda315f76226e3ddb08ca0cd66928393136401b6ecc7366662ccd8a170ce9cd7e292398498d01de39d7e83f4e197212d0340908051591b687eb77c24aa5f59d5b21e3acb874a5d0fa90a5c6e3a84cc1f14a5266159fc782e6023507253bb5afc5ade41b1d7205f256473d7dc2e1fe64b4b0be68310c07b9a51bd288996c02a300a336c64ae6e00a7c9f406d00d8bacb2a02f53a4a0a22da40ccfe31ac3ed2f6b0d0ec09b42b9be01cc02a0aa0decdcb2286f1e0632fabe5c9e3ed00a92fab7b05184acb42b6d9f35230fb9288c692917efb652936e89b76359ca9ccf3528770d451edc6b70b27631bb21815315c12138e54b00400ecd6b7fc3eff65d49e8bc4990da3945d983851daa0e4e965257b0838c1aadf4e05458c87dfd95f0972c2bea0431aef92b532f149ebc8a76f13831621adfdc6f4fe8baee6475ece5d15325c104727f45f81fb0ef8fc7724548c7c0759a54c6013b5b01629299596f02b95d7195a746505a472fd1802c8757f4fbdfb871c8823099d6b7c30b2d17d666e9322cb7df6686ae9000bac472cd17648c573b7f399fdc461a1b69cac0c267c3c81e13b7ab6bc746f69f6f9cb1170c64badc2842ed7af71e3701af7316e05303d6e3608f929f73140bf27c6b26ba796d9c97e1a602e2f7e9a2aaf964e8dbc8bf367bf96d35a1efe93b299faa72e9e779d5c51776e81b0eb54a974b3320f45a9514a21617ffaf5eb53f8d136185cf5b19d9c877f4109ad5f458b1b6400be1cdcb13989adf9cb038f5497d890229460a5ff12f84827d5c9801d1e68b252775fbcebd0b647e6e6de84c7ca5ab68c3a1dabd27105cb58e51871193ce8f8f5608110ba2c6ba8cf31fdc9b053cf6593999a12ff0554885376473518b9d125da11cbb32d3fe1203bafba2a00c3d7be177d419d6598615d7a852de816026f682b42c79586d2582e5b88be5066dc918d6b6dac829fa9de0a1be0e6a709f542237886f49ea19ae45b80f3ed4a7d55c16b6814e000ec8f19a7f18b475db85ac9d0509c4ad1da2846ecb153af3475afd75a8376013443cf0939f4a59b4c68e68e82b7e0ff53c2b960c74d3d39674613b6b93452dbd9e566098cbb4f74a30e20a187f90510a8992bceaf2fe1728f7ecda49ef4692fa3d5ad925fc466e2e788c237af562d1415e98fdb0a896ab90e00c3477dbcb555e0c53bc7910d74678795a0c06e2d445cd5460feaa6e354de531ac5b028d961dfabf8c52edb9021a78ca409b9e41e2775f55b5d8c208e9af0711ad93e4e988de1826c382dbc91234fea54ee2a667c1713f9b5c8e310b73d5f4a847f8b00725afe9b78be1865a8622a9cb5afb98ea69973f791228222ec14325b750c74f899869a9c2be88e342ed98154546bece09007ceb8b8791864fd3969ed587b9cc77041d9ecbc1a95e47dbdc957aaf01b024bcbaeb259ee33841776da012da656e9b39111afd2f8bb9512ffcf02b1bf92694f10c60c4c66459c1aaa89dfe566477735341e3288114507a468847cdabcb553f84c68a0e109eb3c522f4e53ca4888d451362f64d149e2fa13dc516206f4bfa9ecec32f01db550b41f2ed0381eeb504ccb90abca3d09ccda9d6059928869cb198c25d3319692386e266364708275e914662c27b22f320712f464bc940093add38c2552b8e692ac18a472beff67e08ce13a7178e0e2f5ff86132cdbfc43c02a188b26e32c258cb88c97844319f9d1adb1b848aaf743981b26f6530fa3bbbad3668f33494ddbcb0085cdae297043c024ec34b0848d03a8d68371691ae606ce992e25c6c0e824cb3ae190538face513305a3a63bf201543937b8d64221d2d27332c4cc5c0ee1ce63273d8eecef39f86d31996a722ec250c624acc7bfc8fddb99010bc0afbc214b44989152f6b3973882603749269d76cb3a16a5f36be7b04039e3390c02b4b4d8db9c4e4b9742bc071369e3c20f02f668a2852d24e42f3b74f873b3e03f80ceb0c81c4f5b9e31924a1fb37bb5d9c5733a4bab888fa98a3778641433f95161bcc70f900c4ac27fc52b63acf09a1de1affe01cf8e0ee606c0fb2dd3f20d1c293abee5fbe49555e41e175ed5e0104b806da4a4569a3544ed076f9ce264d8a9c071e53d62fd7a353d8929b832229a7d7439d326855f255126ca5bb1c7a66b66830f79b3099a5b2542e1b4cdb60c84ea3e1c1240f24fb24203c6a2f91e3c9ac5d4ee803cf76d3d09fe1378a1a11fca27b896b2f9fec97a38c0e549528a91444cca85420945725e83f331ab4cc0a644814a8f12f15f6df85031ce2e219f69479b902012a4be0889f6d11d607fef28452caae17301fd0f2e4ca22014024050ee0c442087ec58660b2a2a1b731a27a7a85125c1f514fd3c36160abb8d3c7d7e633070e81c5fc6f7a710ed5aebc9d4d0de29f2e05fefd1c681a4c20e883a10a79ad3a370440ed6b84baa9f5dd10781f9e0c2698c7a71dc3cd8f52bbe96583f97cdd402321d37c88f6e373183d16ba072dc9c2f50a33ec26b17a632a09cb5627bd6979df3bee28d7c24c4a49ac7bc10e1ea4b64a4a9aa17d30223d434b1ce68568d027521a5e8a87007d8414880a37ae74bc81bf811b4a70ecfdc08e57126a1e5e856bc01a9c4539c45221f7516e41de16084912b787de58e0f525b1c2224f12748bd3f34eba7a86b663ff9f7ec435806790d0c48a51500daaa2a06b57e9732dda915d3eb9872aa043d0db46c9329f387bccbaa37d3261e2c9bf160106fa8b9f572b7615eb456c04f7942ede1bce84b30e3eac00bf944e5335286bbbb2366ea7bf47d116b05d26bba818e1508515032a7d3147d3f617683114c5991044d418fccb0e8a0962c1e5a0d74600eff900a0d7e3b24d32483470110b5dea3b9d1a4724e66d835abe9d8325e68bbea247917cf39e1d098414176e5703e7168021f812304a1f32822b47818fb423d39e0ec0edf701288c5b5018b7a690956405eded3ab621702ce948f719d09914ad5a5f380e7db9d587ae5dc258c5197a43b969856c08cd9296f202e482593d11b8246cf59e0445406fbb347a788acd7a7fd6c640f8288d9caa411f7ad30fb2ce9a9850f005d89767ffe41937f25df184141ccab016b21540e26aa7eaeb1997eb77de25aee46bb288c2c4dece5d9cb4a13102a12ade2b6d4586f5d9048c8f7213fe0b25bf3db51f004f01ba8053165f72e4415a43819986dfb986c4cfe4b1422e1c8e5949300fbb582cfe872d5d5c14f2914072c0b3458eba81569703a532a9cf4bbe63a8a72fefd4c1426e57a85968fd9356a4fd9079e6ab346e5db9796a18421b42334bd365bd6e9243ec82933ee895c6b9cd5f956ae944fe4b04a2b51ab4c663da9e6a74c990207d19261280634c6eac926ba32ceed5ca662b86d1d9274f6912bec86f25cb3ae823557604d75a46b4432784fe2f1ad6c9cb3217fbd9c16670e1f0a7749463c474333365a9a583fda41b37cecfa01ba06474ecaa66ca68246fe7cde26827d4196c8363152d00767dc5687d4bcaf10df0801cb9f4237ca3e3806747fdc18a11a0685afb407d1dd47a0440dbf039af005e89420893cbdfb1d74c7750112e1a291e0af705ef3b781c5b94b41647a2b00abae390485cc27d62a173c0316c96c21c20929f179ef646928c87c5198aa44ef5082fca0cd116d08513e8942f2e0ead1f09b43f51288f125b29a474161b26b7d3fcd000a0e2f4143b44e20e083efb35836707074fe25ce622310e39708fcf3033500d755c9a3e106271b93374c10f2a02b08665d3869d348022ac9dc0f95798bdf3f2808a6a4209c3ac70e094f2f9ede5292c79478911e93aa35afaf4c12787ef02b54c54e06f24c35254141cb9b6939900c42e4738b31fd152a901d087b8542fa4a9a9c2118f8fdb9584aac334caaade79b4bc7abe0468292e5eda496dc44c8a2e772329c61c82c5a7d9383487a202c72dbe8454c76e128c7ad942ed8e79780fe79a8a91280cba5c8c2e1917795e86361b97405ab4491a5e97543b74996c05dd4a52bdef006551c0ee4342945505c78e84359a56d17681b65f46eb3adb030a441e1dbf7fae0c511f975e4de4476fa6d7597bd04972cb19c5f82cee2cfb51ec61970ede89b5c8df0770078217eb5b917ea5dc3d30d70e483c1303c7fe1803dc1e1dd602eabd086cd0b03b1d014650486367d77aa17c1c6cffc5c2ae3dab839b03f777506b0ad4c668867e6cc8abcf39f11ffaec1bfaf97141fa18db7831ad202f8ce139f61921153d56aa957b7510f37bc68ae73ef1597686e138f26c592fdb3a94a268bc66c7c7532cc8e7293393c476573376a0e0baf373286b1e9441a63dd81089925a9ff8e1346a7cec84f50770d8bb2b1126fe07fe2ca0d8fc0be65cf77c0950af83778f45495216d0715c15cfea01537fb9536aaaaf6ffee5296225e72ea805af400b5fbdccc2fc08eb3f566f6d11549acf40f83876588d01b90ffb8e0ba79ea264881d9c404807f90bfc20a871481b7b97c59cd0a86d728f1d591d2ad0abeb0e197c4c6a02e8e5c7c0b9daef6b82770b4ed35ac8661c52c7c860730ad6021dc566a18faf429b61ff6301cc81c38fe93212a4a479ceff7e70b239158115af0ad57898c468acb928550a85f860d13e0fcee362702b4c8c1404a5d470b92e7337eac59f03b8f0f12e7c993ae2222cff39b009784b8ea94fa6381ca25bca06cf3eee663f3fe224865d7dd1b4e121ec85ecaf131b25ec1c4b3ed22bd648deaba89e0fc47300b45b26112826f237ffad32142197f85027f7d31305bb3aa6474ae87af55aa7f8307b0e81952005917d8ea838a8972a61f6da46a5a4d9bd7e21a203d04595b32650412f25d0b49e08e51cf2406345833b538f6edda5fe508aaaa02b0d0e06be8049a76cec2beb774a1ea0f748a1139aedc6b8933faf43dedb2a6a49f9b5ed01a8bc72b0502cb9878e53a17d6489b4db20b34b79e810517ba36b2de0e05ba9b012228316ac10910345d1815c78700f8d173122c4f1cb8eb3b5abb0c94d82b25e707f1d7eb9a40a5b5835ded3158b8e80d1037f216674ff8884cb65c67d2a624f875be24f258f2e3afd9f4db3986f64f749b040f2aea606940addfebb92e214d345761a6edc825e4afffd075a73ec01712ab134e3d4eaad5e1ee855630d9ecfce07dd0779b3f84feea521b211ceb5fd75c3001b81d060e368de4d235dd6d9eb827c55007a87714df6fad3887dedf9225359715705912d38e773331dc1acd44d2b045aafb0b301285c6a26a61101cb6c05c66b1369e513846f7c49c49ac9c72e415076e95419d88bb2e18ec2dfa30a50b5ed2bb72830b2779d143ea56ff9312e8a6abc3d1a37ca13c247c3302dcc12e31c2bbffd2b6303aa204560d3ab3b27b2e03de211c65203a8088739854002629d824342e4ed110e145a32aa79a87ab937b04d3c0522ef3bbe56aa8afe5607e11396008d5d665fb91c4ba3f049e0397bd31b8ea6df8ceab7aa722e6fce223d754b6a2c07e7b8cb4b7d989d89fe17dd3b8c175b18c5d86c5b7478daa61c1eb8a8a9b7e8d8710bf048cf1785fe2ce0d97b4aa073abef35c92d615cab842b9e0c8c6e60d686716635e4d092f79e250ba71a18b2afeaa3ab598621ff29ae75217c34507641607bc568be8703a1ed8d43b91564a4b0307e228734ddc0206c9155ee0bc8b4c1b467b6a13d917d87b2d2060c360ab9e345114606b2a770c8036aae9ccea7f1a44e0f10477e6779b8c4fc5e8960307beebe4481a098530c8b344b593f907b5da53a8b80d0443b81576118723537579cea018ba108c221433acf57fbc5335c21de9d78c26723b81675b7a6a94fb6da8c774e182a5d6493f94ee7c11efd0d1bcfe644562c491eccaa5b216bc67b100ea052eee691985b9c8ecaf466f911e8e47d945fb23b9e09979c8fd193b933edce7655ede3643946097e1503be0a74c5419bad0ea94a5bc9762dbbcef9459bcffc66289004be12fc52e9890c5a3d536a824eff7656040f37d5f7318cc52315c0cde9e051f8878ac8100601171835ffdddae92970e9c98dc1bd74171d3f22eb28b60bff3af392762de1aaa131c11145532215dae1385807392fbb86e12e7b7e82b3448db84ac30ba41f9f8bdfeef64187c286db1c89d23ee5e58d972bf910c528c65593f1a7b894004f387754507d608e9d2ba6b0331b8fc90c30bb6029435c464f2cdf029577d651a51d8aea80d90a19197ddd7ee6d205160e6c067290e75491ab87509c77c839005ffe66fee5300101cd4aa8c1c373b097945cd6c3a8e9859ed81c46f328197388800bd8d343a5e0561b00aa317024d37292f321294d2c94592053bb57a0365ab05e8a4ddcaffc67bb0fdcfd69e4a1b7bde49d40f9c369f02722d5d6b6b094f15f235e5643254319f90286131be7b640256fa8f478c1f5ea9c5f2e5279b4d6c2e87d048669cdb72a58e1e9de964d80c617f2dc59c105a19bd79dcd4c29e0db2909f4508742d796c20143f127f85cae1efb2bc035cd6a334885d5d54cbb8eb9caece60387bf4a9676a3db76603d1d741d95012b0581ac4c7b77133a62ca8361ca3dbe7d717ea6f7c0b84f3e2635c32e4bc4363f719d14b420b0c03b9d587a13942bb1f926502e42c159f0ef79b8930b0c4e4ffed007c1d158202795e8105a0dc2632927bd8b7901379bcf4601e16245e369e77e4e3a0712af8183ccbabaa72d08171a1f03736603d90513dd87f75679ffc13f071ae2646a623dddbaa39cfeba7cb0eabc78b81e09c62ec2746607c1d758da84831f1698d7fa0c1e96c0d1f55d77582c1fece3e1b09e26594546556d867e4b931a810dcd3004a42636ecc026d9a53619cca70b5b3923dae7c9dd283dcd8004a0711c8f4e2250b9c0808dd6463d942c562dfbcfd99305037467244734c19c569eceac4b62efeefeb17ab8a9f5ce014fb8d09592b5e99e2ced1a80670403010eb80c24882c7189f7936ada576a93bef2f1685703e7134c11e4cd123498599ab5d4d401fc0ccd2ae17680cbde852fd2ce4e2f16f1d1ed6015e1c997de4080ff8fe53232f45133a0146994a5502cc452dfe5fac8c687ab12046676abf2ea97844c0b77e80823cc8f9aabd7e9031c2d7758fd9b100482e1b40c8a89fe73eda0de306370bb5a69948f45977daef7aeaabcf7f3eb8a675ad185a1f6e8a71a1594e3638437c39d8af7bb936702b5f1d2a9f04fd7c6b66d2d414acb8d771e75486f2031bc0d1c4e4061610e4ca863c5ec02690465857cf61a75ec3bf6c2661b8f01f531e7387aaf428fe931dcf06192e29b20eedc6e83f42dacbae36e8313b942b3de54fe50641f31ba3aa41435f6a0c8bfe2e5c073fdee138942d575ff3106c895520b5a486bab770771c058b9caa7fde2dda1e44d71233d2f5f5e5e3783cdaf789c459a11a5011a0e8c945c0f518d6834594a49535384251a043c3e9da1f20f78b8a9b499e76c874920f5634dedb024775c74c49970ef90e2b4bfbc7f202d6c75ff5ce847e0273b569d7e5ec6dbbf0b068459f1fe9211e4e4ff87b36043e04e15eb2d4a6557ba4105ec0b225f4a692964b6f587a26f50259a2224f48cd5fdff9cc09a06ffb94e69e20285c4ad8dfa6426ca5f495a19e2411fac88c841b99521ad540aea96b228f44be9e47fc4da1c8a4c1bddc6705913e99726a1f3281b51ae69f488cb068e31cb7087bc309901d3c27dbc8607f9116c2926ff7319347397867118d3c1c02c86b454f875b60074d45efaafaaf637c3bc01dfe78898e1aa0b1d3a2c4e7ac139bcb21ce45a047ab2dfc05720504a4e077ebebadd3bba413a385ca244f1104244121dde55ed51008a2ca5a3e75a5d548c91ae2f411d4d9759ea458652f921b9dc7e59a50f67bbcd30076b73c78e00f5677b633b7e076b2424a4eddd6defbda59429c9750b6f0c360ce390a12c579c6a44aa0c4cdefc6849dc10a756c759e32255874c6dc837c588548dc8c462840b5b7454d488bc82a859329c5a60b8214a6d42a13465a936c33845d154e32655a024d5ea1844a506725cb72a8fbe7d46a1a689a45a1d7b90d4e6172c62a46a4fd49ad21280f4d4ada95d76cf12d5403b0ea16f6858532302ca6048238169aa11c9a1830d4b6ad6eb38846f3522734bcd9253908459aa1101aa236789218c24b55423129464ca87e602431b2e9c6a43b80810646a44e891daec034ceea637b580ba62aa564790895a93f4a8db93526bd672d672d6d65a2ba5941ea1dd9ad45ace5aceda5a6b9d94c697690dec2cc7614accd64ffff829a5b4bbbb8da8b59b99f9fbb8efe3be2fc6f480509a1562ceda0a6185b801b04f93669554242c005f5a2194e8d356752a270c76ef37d5ed20d779d982e13daf53f4bb5fd7ea14a553758ad6299fe209361f40f7416b203984484d557e3324cf6e95a85da296e97b8cf23d6f38b14b753c743d499680ad716ebdb68c8637a0fe9d3776462fb754715e93386fee3a7208911a47322db9b5ce26bdf65aadbd5d16b34499c04e00d82c96add29f64b982256b2ac8b24a942ba5475f048b13517fabcd2a55e63ad352ea74c8140bf01b22ba706e7d4875ce9244b8871bf870aba94084bcd5aa57d246d11977db2970fe9456ea79c89d5cc67cf9c9458c932fa9d44f2e62d83c559a44f4893acd78e2961e95519a0a0e9d2fbedc6a3cb582d51627ba28dd6adc4f37251a668c13596e357666a2b419756ba2b4a66345e9d64c94d6ec7deb24254a7345c120cdadc6de4b1d1515670d194a6b29298eeaa99e7a768ed2c44e25501a75fa22268678aab1ff00d24e97de286dd66aec4394c6b5d924d3dbb3952a0376b51cedba6e5a5187c94c0c7e50634689014b1c89538495179c69c346092a6fbef3b08540f8aecd7cd7753dc4de23449697f1134b141533e8b2042cd927bb17ce1b1d4271a7d79f58a2c299832f6b6d2de0990b9be29be29ba2fbce19c23e33b779de10e0499fc09f027676f2538c80f7dc006bab2d633102de7bf3c664e6eab5cf160a22d0f718885d04d7ab655140fe594578fd54813c43d497e7196eec2716335918765ba8b4ded6277f51b77c3dd7d8efcf1fe62038cee7cf9c94db9fda7a2c81d27ecea82f3115a60c47b5aca526d8da2105d5b2e979cca36f6f491d2da3466308534c6f51319f42d0413b8eeb382f3bb71e9bc0aca97cc87caab1e07316a8bc556fb7eaf37d3037f64f31e6913d54e4fb984fb5d9799e771e09e3e7be2fb79265d0cf2f886e266e599f32fdbe5c7602aaa02840cbcaac1503992a0cd276f17c44311e501ac2e032a5945ef1784228975de5354843e530e932a594d2a75d1ab0b9af96e3a1f10abaae07c57015f2587f04af7fc5260375f03e0f5ebbd3a2c12dbd960c6ee975ed4ac718f5efc507999907f3f74c5a2fb7f42cfdfafc204782f0a0373ea80a796c5914eca760455b2915c5e6f9853cdcf9f168fffb78ec0755e1a567980c9f2b1872a5b06a5fb39b9ef7a0ea13c515bc17875231484899c34ca9e7dd0b83b9cb6436896ef5b58538fb5f9b7e67ad53766a9f398e64eeba315934a5f469875adfd0254a290b5928cd49bd4aa78ce37ccec9bdaab5c6f52d498947da1b0deef4ae55cfbbf636653505d87f757bab0ebb8d5f3bf076c7f8d641ae4e9552adc362bab676b3d6ead82447833bad953b7db44ab07bbb2477da666be748a7b8c7343582d629d5e6e03291ca759e772f0ce62e935925ba95ad2deee09e72477e49b01b05bdf1a7672c75a5bc07c652957cfaa99250813a801cb70533178a30108fac64480157539f6793265107a63acda807e79cb4575ead9986558e858a1a9952156a4fe47c7f71bea90fce8a69de68f7e4dce9e547e73776cd1b51e89cf31e94f6795ed4442105ef7b02594f01f673def8a628ed1b61d6fad477c981a73b489e4c571dc9f386a5b5ce7135a790c0f9d3792fd513deb7130563f14d42cb5a477c2a066a01a102c3e975bed842e5795fbb8a8e83a02a1459419f0a0c59caf3ee85c1dc6532bb450cebd8d332981322fb20bbcdb8dd6e2b4c9ae7ed4e691ec96982f81dd80696c1859ecdf976a46f6f9f8175cba1201064331f61333c0f060dc377b7f05d729d0fbde42d44cf0bef056130157993795883cb52f3c693ab7a8fb572ed8453ea76c5bc3183efc0586aceb098b4cfdbf946691fc95ff0161ff993d23cd25b005fe14a5c85e04af5adbc6ec5d9555dd1660370dc6535d731b20067d75aad7ddd703f2f7fd69440695efb0faf69ada357eb4fb707c15ae87a0bc5f05e89eef2d942d5e52075f9146dd5e546ad62dd5779f42d076918637cf9145b945217613e25633c1e843ac753eb7d97bf78c6595fe38e4fd1bec6a3b73bd7eb75d7580af9eb46b435de96dd4bce3a7a4ce52949daa09fd77589e3db7184e0a385ac0fe530d23102395f61cb6e3cac02829919647d2a1557fe6857011d309f1ecdeffbfce8bdb174203fddda6ff49c27f56e3cfac951b7d48d686551fe2972149442e9a0b4708829e52aeb19536166366a5950d3847c2aa7b6853eabea5ce5e0581e3d586b7511e65732267a90ea9ee89f1f3d7379c5718647dfa1ca79e446230ad250a5f2ea472bad6e2dadb576505cebb5ecc62019adb4bae7df96a3e353ef08ec865b86e5900e3a64a795ae323aab4ca569e17c0bcec611de176c829dada0576df89e8a395e7990951dbb57d6b60541326cd9f49eec41b2ce465090edbc9475dd411ff88d41321b32cebb2ab311d491e5f835985ceb1e29f53d8175ceacdb7abf2bb7fc79fbc395d5e6b3651dd86c291370ce39c92028b70c922a19ca5ba7540849bbb7dbed66b9cb715c6b04d233eb9c577e8e5b0a71bc75202128610424fcf0d142a15b0fa169d72d8ea6f12d47d338893aa55d9295e8ccfab5a46ac877201d57f09da7e080f93474903dcf7311e67ba40a4d373a96fed4572cff8efe6385be1acb8efad0bbd08da8188664c8374a9b3e6df5a08e1345a8ee552ada54b506935b9dbdae460c5c055be5423b3f672db5a203e673bb154738fa66cf8623156d21331913613e93b1ce83903598dcd80ea6deb9ca8fbec7322c5378ebf9377ef6e8edd8473010e83d964ce541f7c652c8836e44c391aafc2b693b282ee76ed4747c3a6f50f7bcda31fcb8d13b53b2b8a3036ffd136d1f57dd0bc7b764ad1d1270fe949dd4db2fac1e70b7166de3175615778379f8a9c0008c4402f0b95107609ca2223d6c95caf973466aa1f2ded7109be4f425772be79c217ce36e9c92b7dcad32df3ad04beef63987a187e40f126afd8ce80f12b82293d664b8187ceac7373294c6484edeba0f59c2423be4885b992839776fc3683c673e6e3f252d263e5e724ec2cfb9221f70505aa8a985da3d243786b71f78c9d1f0968bf29693f2dc2d1c3bd176020f7f15296b998f773c862ab201eca187e40763c9efe3fcd3321f0769c81dfaf817aab82491bb71489f950b3a67a74aeee60366b997f421006ea75aa85d494949494989060d1a30d99c777ea17fdfe7df57bfd04ea92ac97dd49d8ab6d17f64400353e883fa398f7ff079f779fdbeeff3194b1fefbeebec6028ae00200300ed56f5fbbeaf86a1b7dca841b1fb71eea8744e327ec68a34d6a4fed232ebb2b1a37a661d14c115df5843867ce0354a6daa4ed5499552a94079eb1f7cce638f160add7a37f257a5aa5499d425b27e610d2fb95b8b11b861e82d329c122526f5f6e33d5a2824cb6e8416bae48fa7c0ff817724b9c535ea9fb126552456385b8849cbacdba9f44db99ef778074ebd7e494b1c1317a585bc9893b71c94b79663f2d6c97042d55b480609af07a94915c9724921b48cecfc83b19f3a4bcfc8309391955849bdfd901d39a42acda9760aecc097efb89d527576ea1bdd6b8c3a3cf0c0fd73d2b91b87e46e9d5332597335c549fbf18d21b48c248dc6b13259e26e94f683ceacd79024e36455ea29ab12872489068d189744e3fbc8d2c75d6e447dc6f91e8cf33b18ef8bc60cee368797b8db245356ee5695cafaaeb135a6c07fc9115a66fd07b52c928c385b56ad776f509014d901d4e9b690d022a2a060cc807184a72ed7842388eb553173bb24a8911b6a6972bd30cd745565aa1226da85aed04fae0b4a75e17a55fa058e73e6c81630ec6629e3d59d59f2e54fbf01efdd99fc74bdcec371c4e51e8793eb556973bb246a70c39f58c4685173ad88b9220762de740c6e6784a1b82d24b48beb559973bf2f6f551a33e6ae70b99f58c65ca1e3c2dc4c155fcaa29a86dc87fcc9830d4149bde73dbd27f59ebb37f5dedf86dedbb9551666515d9a40ecb586167ece2f515d745182f4029d36b559e689d31b2d4ba0a9424a8d996e58e3040e48bc847962e6f0c4125e989c4933268b5ac94f454b7878c1c8d2912fdad44a8e7a1f2850bee0028a274ba2d44a2633357b8bc94d3fdffcf4396173e8a7074d1dd3814c67a449746ba1120c7d101fb20221d37f4c379a2e9b7e67d3ed769361c279badd6e4a6ad386f00563e285b76e6536dee2187aeb464f6f3deb5fae97730c1022de5a24cb63e3d4f036864d5212c34b66b2f4d699890a116f19cadb2852de7ac9549c9f5ac87296b750fce52dcc5a672928236fd3bce5356e188e854af396c7769212264ede7a333d79eb6543796b5bca5b2a6fadbcf57e4af2fab2b3940df5e56d8f69a92bdeaeac975db69bb70de7adcfd964806fb90ed1d6b222c4bb5c2e97cbc75dae2728ef0a5d5ab87adce56ab97cba5c2e09c021220b132e5c71c20a974f4a83ed2045141642d8e04413aed62b8b2f7bb2d8c0e24b1cdfeaf22d33df728f063c7c2b09a56f2521e75b2d0faa010dbee52288b6d6504f4f4f8f952ddfe30d106d3deee3c647cac7ab8fcf116ade078930ef73840eefe336d1e613826873097d075bc67c07ce00d1d68117e3636e3ed6f258cce5b1d80d7596780267092a30d8a216838013115155d2dcc00b175b92f898bb5eef2a7bdea5a5e95d2e979628deb585c9bbbc26da5cde6ab55a2d7fd1d632126db125c07ce86118fa8f8d16eaf1d083bab8f0618c904d183a09610761188661ccc3d083300cc3d0c7c3d0c3300cc3300cbba07977f7058836f77c7c7c7c7c5c01a2cdc7832e4fde034f8068f3c08bc562b198e7b8f11d2c41c577e045a2ad8356abd56ab55aad56cb89445bcb89efa1f33d8e00d1d6e3d5265c72dee543a2cd45136d21140cbed6365fdd7f6c34add66a857af2b555d9b8bc3a09334d8572fa5a5b4c9c4085f9ba5319aa85625e9dbff0183e73b424082e3958d1d2444e0d2ef8d0258b1c335d60d0a2569b888326491d1996c01283da0d3a524e45c82083261b6eb572d3578f79f9582c167321d116f396c35aeeb5a086f8961f40b4b55c2e97cbe572b95c2ec721da5c340ca2dc058ac987ee8550317ce806106d6101445b95f2a7c1c58aa7e12088361a3366cc9831c38366ccf0277e060f411f7a90576b75af72c1e1ab0389b6ea04106d33866033687a98df106db021a0f0780bb97ce53f365633b8e157ab2c56fea3855abe721256e16ab5f2550f4e20a962053149702162f5b42488245e56102385ceca695fbe867802c01036f8d06d88b6b0d58afa967bad218cf8960f40b4b55c89578f8d8943cb57f79a6ef0d52f95af0e7359d0d4d7a6295f5d00a2ad0e4d3a62caf4e034870d961bb8d6bc8b898d9b1fb4c010c50a333557d30feff2996873b94cb4ad645071f2323c00a24d86f772d8ebe53f2f0f7ab9f7bafff2f9c2bf6660e6c3027ce800106de107a2adfa8f687b0dc5e0f231bc86688be1bd7e078bdf716fa1d077fc6767c7839ac64ab7db0d496d4786a62b7596dc7c59614b6dc727a59150a58c981998bc608a30b5f2fe8ecf19fc4ef9eaf9fae3f3a58d32c7eccb99e5ca0a34aedcf0d56157bcf8eaae0497af2eabe1ab076131e2ab1b6549f2d549d156a13a0c4337a10d5566a0a44508264b6629fbd067e86168830fddbff8d08de47ce81ea58160a4a98a39388041aa8b5af8c4c587522eda76ce3c4f11659ec77d441b0f115e9e52354fdd7f6cb4102502ced315e525688bd22a659eee50f6425d4e77bc6427515a686229a2cb53294fd37cc950fc85c73c254324ce9418285aca84c1a1468db0a0050c103430e28b5a7927d4b481122d4178591aa20b256a06c882082469a6aaa841105dfccb6b0bcd27fee51e88b657bd22e86badee5c7cadd53b106d75a74a92dff11ed1b6a3812361a2a0428a2259bca995f75dae2bdee51ea5152581832a5ffc10869b3935571523eff2986873d1f81611527ccb6988b69617fa2c5f1f86b10f432a6c3e24c2e9432a603ef419a22dbcbffa95c356ee51d9f22b87b90cd146a56ed4edafc7106d97092a2f8a4dbce82eb3d1422b173d08cc0a2fee885688fe4374124411cc162fb6c446237a35d159147d8aee892206bed8428314255db4508438bdf8a18a15350821850c6220b6e007374e766052226507d127a50d608a2e9cea4cb9811354881ef4e50bcc0c5f6bf50ba6065f9d47b455d897afb267c6849aa7589ae8e12913569efa4bb4d1300c430f7d47b485357ec5440cbf7297685bb5449bc8f2a9e559543cd83d28f5600df4a0a1301eccf1830411045d08110f3a15a0b3520b31015720e81ea51dd1a0092dba68a2260a39526aa04f4adbe124861e6880c444530db5f29633ce8320962f2efc6ae52cd1b6f2eed75ac5d73a8327befa4ab4d5192f7a51f3a28ba24d5c4189a82b45bc1173840bb54a450d0b2e52535468c121861aade2e63df472c4870e8ab6d0136d60140218a1c5abfc136d2a21f1bf29fe7397d9f83ce8f3212bfecbf1df99ff41695eedfbd2fcb7e63ff7288dc611533ae400050c242cb56faab949bd400b183c11c597031a2ea0886021cd53ad9c4f5f0020ead060871e92c00187cfa71131f8cf0824be7af5bc25be7c3da57ed53c75ba027bdb3765e9edab93965107750cd1b1b4e40886261347d62533b73671d526ae027ce9aa4baebae4aa4b2e97cbd5d4e47235715fbad8c997ae09e64b57e92a5d49dfaed2c5f4ed2a5d4edf2e2d5a5ab4665fb6a65a53ada938df3af39de6db5b5f9a56917ac68ed41af3edad2aad365fb696be6c95adb295f4dd2a5b4cdfadb2e5f4dd7a2a73cb5cd997f7cc75f3672e9c6fbf495ca42f6f0cda6fd41d73cf7ca7f9f659dea4ef5b5ea6ef5b5ea7ef3b853585457ec96a6235b168138b75e63bcdb7b3be348d42f58c1d8a35e6db595a5825eb055fb24a56c94afa66b158b4c98a36598d5faee8d28a2eade8d22aceb7afc4845995ab355fae56abd5aa5c257dafca15d3f78a16116911d1bf142992e8e6299208e7db45316544518b2fc5265114c55264fa16a3683181b4a8f31dcef99eea197b19ba09e17c7b786ba19e607c1996210d5f8661184a856bbe7d9661d27758864cdf61193a7d874f5a2690963adf6043810d0536140882e097a6f5993e038ef97650cc1b50c997600952f9122cc1a46fb00499bec11274fa069fa6a8a6a8605faa9a544daaa69b4aa552a954aa6ef27593ef5bfa96bea5ef131346fdf2fbbeeffb3e3a13884e9d6f8ffde6f5cdf38c745f7a485d7ce93df9d2fbe14bcff3bcd24bfaf64a8fe9db2b3da76f4fcd045253e7bb5bd3ade9d67471bebd43f2ed658754f46507c3975dd9755d577649df5dd9317d77dd13131c33c1955c1417c545715c0daa2f398ee3388e93621e2610f350e7db46b1516c146bcfa4a1b1157bebd222bdf9d236591b45850944a7ce779df37cab6b6eb5d63335cdb7d72f4d63265cc77c7bbd55f9ae4852beac4b437c59cb5ad6a4ef5acbeaf45d9f4840b5a8f373be85507a43a2ed944a25f1255d43ddd826109da9a5cef71c1d7436d571befb4c9a6fef2f4d23e1cc981bcf453726107bc97482e88c3ba8bdbd34d2bff0652f35959df4dd4adfa5adf3ed2acc223b39cab74f2ed9e99bc9d0aeb5cf92a1ac7822be64a431df3e6412cdef9ea7f5f48cbdd61acb982b66996f0f6a1dbedd6befa19e4e44dd96d3457af65611b7a453cf5b6458b2ee3f36823cbb65c99b17c0532a349f00e2ebdbecd0abc0a050cfae92734b6a865d0473cbca2e367139286ed94dcfae9a72cb5e7af6b0c92dfbf6ece111b7e435cfae3a734b8e7a764ecd2deb7369d8c31c6e59d9431c6ec9b7671742697589adf5699f64f1d6436821f0adeb18c1ba0f1280787569e939cdd7a5ca24659e79f630885bce25378c5bd62f7b9e1da4737be7f6d579880bab2fab302b312b2faba870d5c46a4ced1f1b505db80273a3c09adc49f6c434ca0b574f7ce18a891514150c574edcd27bbb44cb9b870478e672d7afb5c278ca5cee4bff09e7b6739dc0b4961c42a436e9acbbfb08087259c165e4965ee59c2387300e627c8853abe4a4d506236a963caa710c4be834d5ec586d30a236451168915b7acf5fc4d89b0630a6d6d43a6a0a2c986a31266749b599e605b57e810b315235a4245648d56eb801863ab53afe80e12ab418824ead8e53ca082bd9828ed4114e4f4c359a19294f35b00b6d16e43e1e296e17060d511acb414fb4f558f9147794c040d58eb11d6409b8a8e4e744587d47321312b79de5ec568c49807abb05a83719eb2cd0ce2263dd518d9be8acb61c4667d5a7f860f9f54b0e99e2e37a8b1c727dd62a8b5481a583ceaab3bace3def4812c8188f2e88e79dcfafe2033cf2071993bd8d96c9a81881922c0103556ff101961c010355b7d58726114741c0a4f10f73567d680804106641cc14c44c65d08a64263aabced97099be1e2df55045cb97375aa828d56a9c26726813e50a12401c714bb2334b50cb989bd88999384a3d52b52a071d2b2aec3e5781dd58c2beebbaae1b551eaac68f478aeb623314c445aa559c960c3788d23ac85ed1132174a3164724919cc27d47de96bdbef36f2c5fa2873eb9280cc9f203c7c9402c36e0734f35723e82d7731d8b9dcf8ef3c9f9d3e8a5af20a3761ded41ed431d0536670554920d79104c76fdfa68a1180fee6b0f2e7a7d75d6946aca9707e956ea601523c091432d7b81714b06e207586f1f4df668590f4a664acdeade24fa316f541a06e6acfad0100820cc66e33863c6d7d657e71e7456b9237704328496bddc5cb6e36472fdeb5891daa2ce134b4c62a8d51c6c30358585e9083a5bd4aaf7a8fe638a8b03ce1f1ad61086cbe65687d12a34a9e7c9829a9ca44767a10bf7ab33491dd5acf740f2213b06d159e7d73ae783f38e1c32499f354baa606174c6b6dbab3769838cf1e820b296fdfca1dd3cf5d47bb4ac65944d4ce547b5282e72828b422e02bb34776912cd2b4f9de3501a8fc754640fa496bffca8b6e3a57bd937207426c435b214cc83791ea9c28e77464011e5569b358e4267d4a7883e6b53623b44ff5c24d90a19e3f1b9e82219849de6b760b8252b715148963eecf8ce8eef9044a680bee3d4b90b1781646c07e8a283648c47e8a0836410d043f2045ae7453216fad137d191b11d5fe79f1f09695996164aa165948b40a71c9de4d80206a2ce8ddde8cdb119887d677cf501d85b4d6ec9b720a287de051183701e72eedc183a37969e6beaca38beb58c8b9a1a03069933ac14924ae27c564a32bdf82249993935f0a2cc990fdef020070c122f80a20b4f92d59ca7d5e75bbfe427725ce8e27802d7a953278c17bf4ce1ff1b4fe017c91284cf914142f7c021afaf9e870e8ea17f630c74ce45262de0a28e8ced705aa7ce7f64c9df9d60059f83e30944077da2c0e73917471d9f73e0a863be386f9dabe86b6c9dc0757e253ee765083ee7a5ca04ce4b139e731164da0e597b06fa6c59f820cbbf7064f91d990947f29253d1c622596989e64515578a20020a1b2ad30a2f50841802e906226ed487b42005955f212500015be34e8b77f8a836e92c96c49d35970fd119f5293e76a6f868b98b1c2223279ded902d2f654f777cd65c3b23e7b336051c1213e2d2ff7cd656a075ead4a604e11ee02019dbf1b9e79f7b203896b0d2eb31e96ce8e34972cb790647d22de719125a8813777cce8d31ce45efead4a953e7794ccba80ece45525473392439aa652f1bdc52e5a0770e8e9e6accc140d3a718818f2462a0e91ea9808e84e79c8b8ebca6bd7e04a62b459dd750e728ea4ce64ed9a355f32099ccdddc4a2d546bb5b65a25f2049b0f9cfba07506e074aeb4565a5ba8f21ce77f6e6e6973b04c93366d0e93a83a5ba74996df4fae5b7c39eb4a398e1c42a4f6340478e7f4b900f04eda7c2a9385921ca061418a216817a8e28c9727b05401c40ed3bd397d1acd687243a54e659125ea0a2a635858dc6461f77ef0a106418b4481944b95ef1a282004ef1ab9c11ad1c182b408089e9ca4a1828b34313cf9f114068918645841a90c9b2f2c9b396ca46051aa2a580cebbed1fb3e6fce3a29ab89150509acb5d65a6bad75cedb25d4428ba24f68bef098aa00237c011a25236890d3c6290b1a8a38138592275e544103707ae04ea832567ec64fa8324caadbcfa19e7d7b6bcedaef9d37b8156e0e1c2df312c733ecaab994f421e66308e72a18b1ce91310b742a70de91536a1c79e98c279d3179bbacfdb6c3289b2ab268f2a6d729878618248142058c2647a4c4a801030a216ce0644a8d527a7beac391a7d47d78fdcac285356dbe1bb6262a16be641853438da24a526ea6d0b030a6061503ae4869d3450f467cf1c4a482cb972fe8d46922a5a5bab70509384fdd4b03f573cb4f2c698a74e8254bf472b5f252647d692f837ece6e5f2f412f55aa97108f500c26c3a7ff08a135693b442e9f208d1a32dc1452a825e74cbbcea0e1f73583c67802bfe705f1bc7255c833356aaf96e1cfa01ccbe99633aa071021317cfc20210425b410ccdb47d04232bc3de6f9cb5f4efdf3d7475abfafefe5796c0ce2b9375a07cbfb5c328fce4bf6d74ca13e8dc5e6bf03a1341c6e6a00c308168ec8d1a1d65e02a51dd1c00ba43851e8bc80c5975ab7477bd0f018ed7c4e8fd2603d284d46d2204bcfab942c61d3e76132468e31322b697f8d3ba38f0a40f1ed378aef1b2b518a76703cf3acd4324adbc09cb5cf395cbad0e2dbcba16f35df3daadcd2b39cc657f01c7aeff9c472859c67fa1cc9564c32751ed1e055185c53949495a6296e4d9c8c3053b069d205cb0c4ca0202a88a4274eb0a0e4450ba580fb20b36535c0d942ed65cfcb6797e0fcf9f9e91cb447b5e93d4e6593881ff4e92f1808ba4fa1f2e8ad6803c7fa3daa1cf4a7dbed064548e5dff7fd7c17ee00c9d8a722e97fcef5f0e88ce392ee0842d032ce5f53b7bd9c69e6d41251cfdf31ddb2967504ea3a6a770853c8c88ba2516fd45e4014d853f09e73ebe018e331bdf37edacf29f9d809a9eae132134e6a9952cb9284aca7b0822141943681501a181414144eef5050f9e746cd4b2db3de779bd6af07bb0e0b7a2b65e71fdd6ade85b9ad7149979df06bea32930c6a18aa1b962b9c74530c94b05471054b154b6154768f6fd6ca1aa49f58b080f308f889050ba7bf2f2c6b9ebab1ac71faee76b186e96204b8179e88d50beb75d985b514b4a70be0f21468f2a8b96a6ef7659d444d93c09c512f6d933de60deaa0172cd66002f441f30675ea77d2409833ea3366b85caa2f81cad5d34a02cd1bd47170fd813c2b4db298a9b3c50919d41e00668815a2c0cca9f2458d7a0f4a0393849103c6083869b4d4a8ffa0b49d304a3051a5882429236a534484eded93e73bf8409c339e1dea70cb7076735d9547cf6174dd330cc04f2c6c94d0b45162c9f7073fb164d1e655689ea09fe5badadd0d80c1123d1c1115678a93274070a1a58a2a78807253eb1a68d7f9663fb1b029028d1828e80c4bf09b269070162324d13451485a882f90b40e06609529126785a817a0e9d242b521893a994e2069322becd001873649a0b872c51224cd048b242c66a8e3dc115aa031b00c487a0a8cbab97cd91790445596e3ae7eed757bd40c1a301f89c6cbbdb4aaba171663014d964702da2b5446aca719c3dce9b32bc1173932804206a7362b9030878b259e58f141cb9411356d3a0c2ebce0dea2843634cc20032750924041fa1075648a254880d182197bc588946d3a416d96f41668bac01c6683286cdab46901e6e100ba159f17aa280ad04a62d61a42a6aa437267460e09b75f7cba7b5aeb3e1e30b564eda6dd4e432578382cc0b0071558037787b7eeee56b900aac8dce92037d4a7d0abc9e6b37834f5fb27599e4043c99d0edeee1ccf38f914faa7f5677204e24e3f7a2ee4d13271a7db31cc832a105a6f1f5cb16ec7d95a69334fd5ea4ae8c39d3e96edec20334f3a6b4abd698ffc747261913b1d9ce26af52774df6439c2f8354e948c9ac48c172d5c55193117bc428acbe64b5914172097847b74cacee39ceb98f4d33ad7ca913eb44fad9d0b97bd561fb4469ddf074a0e21526b72d2d917e09c44566423c59c39893c6e91275187c5c42285144fa25a83c96507bb9027913881898321c8686103178450c28adaf4429e445d83c9e549c435985cea4d8fbdcef3ba729e5dadca21df7e840b07977f62698af261993b1d7c838599319dd499db0243c5e512c5158f90e24e67fdc42245105f7affc49582877e02642fb5f5138b144cdaf0d7e6ae5dabcfe96dab9c0b4bb041f3656d21eb96d6ae3f7d05a43ca79006398ee3b87204af9f6edd885af28a8d96d12b734eea15b9ec3fb4b283522861e632645a2c54cea8d9b35d04fe4927a54dd494e639aaa74a19a884258a272c64e0b4684f2ee624633cea4f17a1fef426f7a453ea4ac8e582d3d92f3b6cb46bee74d50e77b6ccc8cc05e1dc6983d28e6070c2250b9924559a40aa2d600a28362f4c5972854c8da3983344921543d0b1e205005891b2441155bab0c1a2c6dee3082d9bfefd130b191a1e94e2cea05b4f29012386a61750713b23013276a30627e80aa758ab534a291dbd395bdc2d514a29dd81b5007e2a30ecc083aef3a00391870ab47d7004050175d023f25081b6b77a62dd4892359448a39eb5db90a3c64a8bcb72c468f4fc7c20da90c9687c20250584671d7e80697ceb614ff59aac44b5d010c3e0db0c0004206452d158899730d9d170f96786686700120022a6d8ce4f0763985feb075957253aeb1e98d2d22c9c395c25a529c36c1bbe73f430f14402e6ac73cc1b611841e5a8e1b2830298011379a8407b005d4761326cdc08fbf35ce265a076dbe4f2282386c8c304ad7b8300a157ab5763f08004a05f795e40b51ae590ca51db0499c99123478eb9001248cf287e82995c94a494a49480cc70d941107662883c5ccf90b3f3b4d229b3ce2c78ea4c55a06ed4adb7de7719e4b155e79c575cb142f0b2c695c87366390e0443b17eecf500a10010e07a7cdef759177cfc71eef1cc1bd68d3a46d91c4f90cf53815f4c04deec185fcb3a97419e3a7bf503417147839e4aecf979311c411022f0d4f9734ef591a39d40b6faec58d0adee9b8b98d9c57debb626907526c153679047db2d133cb5df5b67153c75b62e784abf5a6be65aab05338320188a620836f93a9684a7ddf926d25c3791ee5afcdd4ff5799c753a0255ee6b0bbcca79e5c8baf239837e258e2158bd5e3014c3d7ece1cd5aabf7a0b439a3beef1343d7832f158d35e0f94fe03a3ca7accef0d2f8e9aecfa77faa14a8e6acac15739175064170ba8a5f9306faecf9098eaa911dc8b353f63caf24276402713e27f75c0bbe3a6787d4ee291369d7a4740ab93bafb0b968f633fbe7e5f5e6ec2be47a947eed496b8c7e5ae1dcea595c19fced79de24837ad65e23b6f30d06057530087756535d7bb0542bb3bad8e2d12343603ce7f8418265762140acbe9c708438261db317649e2f33147ff9f888890d503dace0a5892b5e6a4730c86186225fb6685204925a799f26d48cc3ece485d37ffe799d1748beb3cfb9156d9c8db74dbcb5fdb51ea08b189e7a7bded1c7dc1ce64b693737932f166db57ae8dc08f62d3982d7571cf0e48902a7ca6d7ac30202074064e1f9e10662be7aad2e7e4009cd191cae408962a516f495ce106bba94497222c64badbaacceeab1f0d5875a684a71d9e2a9c2dcb2a7876fd002c823850b3564e509820ba80ebefa7724031c184c61058c315d88408196263778b1050f4360419178d8c1a3bc850b23dfde3dc0099a2ca4e4b0c31329970b3ed4d161862d4d38d0159e54e1b8054c61b17598db33a5c3f8758b241896725082862ebacc00051249ac9c996a52ab5ca911285021d310ce2d7bb8d26a8deb164b74d8425e9df2750717c407526b0d05b0450e35bc3600ad7f100ee7de36ac672017b5103ba5b1bce5cc54029d3150085a56e78dea3c2c5c201e98b4d605e6acfa28c27c4a81490ba24366bef6a0b406cc5975e2cbb9e52b52cb449844284c1f1d930805cee7bcb16312a1d08d0e984428785ec2784c2214be1a234c2214543f0f984428801f406012a11002200293080531000d984428acdc83796335729179c3c8bc519d1b798579a37a3732d2bc51dd1b998579a3fa37f291915b08917c7591934c60d690589874769d056e51926fe37c5a4b00d2b2d79b4b3d470bb153b2878158fc768cf1e020b09655354086865a568beccd7a6da1a020eb0100bebaeb06b7e45be9c11090965547e224beb54c06b3c1453db04964bdfa8c49f35830285e1a999e356973d622ac1bdf84b4ac0261a0cafa9b94d252b803b80a1ba45f65591617a3136d9cd4b28f8b39a3617391f51b70119c394d13bd93969828b560e0b9dd92957898dcf60e2463d5418e61d2786acee824e2a7b14ac62410bae83e405f81e49029a50f20083a481261b90ae0f54bced095f80b0f079c83a7be125547dcd6913ba5faca45a75ea3c98a1449bfa1833c2bdc92913a27429d8c1217f5122e62c245968cf1e08e32999d23b764246629cd594458fd47f2940a891b3ae88c9434893ea7ce48a610af6919e53653465d4522719cb16f7446b9cd149a933a6539d332e8d93897973c9295da3b5248cb2240126120ea547c8025873010a534d0a9eb98441c67c7a4b19c39a33e34040208b3d938ce279e1225d035906426ea1c456989da98446919652506a26ed47da3de495371bc0ea3a8d5888bbaaf1e420bcd241d514c61944ecaa3110e6e79795eb8250e1e186e8943e6e3418c4669428c79a3ba0c514d29fb5aab5359cb82b85c6a83c704f3d4717c084d8bc1b3ea1e7c95d1a08aa365d56908355c1de4ab8b5b3a797fb8e8c54095ceead58dbae38cac5ceaecb39341174185575c6605f030aba98ccaf3647b17e0dbbbeb6bcd753246c9767bd4dd1607979f48bde52c3786e30a286dfeb06ec4453b6f9d953489e695765b3909663d0fd55ceaedd429ed73eb939223346dd6ecb467de4ecb712c29faa6e5aa9c94446943b4a350da2b69ca531a5a9a5194934ace7fb851d7298e9b6a9a8ce328b593169a4a88b951da4c9ef652337594a7ce555ed34254893169284b85a06794893b9fc75f5e0e7953493c872a79d5ea1c526f6fb9ed6ad476e4a4a929b6c8d718b33ec38f6a3c63cc9231eb9d7f60cb09e677c7613e78fce57694008fbf1c7c85714b8e59ea356ac9980462380db7800c8f912ac05c86d3205598e203e6325c851d8fe1b3c6705a469de3f054cb784ae4e1c524b0e331fc07cc65b8510f99f2913e5efef2213bcee3cc14c473ebb011b633d670e1ceda14ebb1cf617e548b7d240a3e761c368159939530195ecaa6783e6b31b89d71d660966419232b4db1c78e933c45a73a722a89a7e88c7a085a464b0092e692311e753e75ced98d28cf386baf71d6bcb134c17a6942e7a5099e7f5e9aa0f2d204d04b13422f4d10bd3481e526ac1c6c9e71d658dce122cb16f91a670d6473190ec799e2a2fbd4af935fb2bccf1a579f0aececd00798b64372139d5177186cc799b643aa984ccb9a288de12051254f29933ad5c2b5249fe131af35b764a931b4a5f4b30691efe8b68b0d8b46eca9935cf463adccdf5c6ea794524aa9167e90612d83b2aa6d19dfd7cb2018eeca55ab359348e8a76a3e79df2bb273d528a3b34b22250dd5567ec4ab21211df11ae847826aa18bceaa7ec4abadbcbd3f5235daf03c1cdf3150a1c553af9336d51061e64d0f31d0e0065335ea56b4d109f0a5b2713667ed22082094b46f039407f856713bdc4a7a33cd7d40c93e994c06ea395e73596ed45756115fee97162aa7ca884b9d554485623b825a562b2f59f7623c52c091b1cee7fffcea23b450ecb6acbe5a5669b356fdc27a603fe424aad5983406cc5975186c67e74bff0a7e39c137b273aecfa7280e8ac52c83fed46f973917bdbe3b887f64deb2dec17d5f6e3ca87de806750473c2c23ba9b5978bc05f919944f34a79143eacd92d194a7167fcacb20b6bf2f2f4d4412ac5ad3e9d8bc4e7d59ad60bb7f4a79492d5bb1f9b29e0af2d8bf990cb40ef755f414394f5449d60e2b8a95775d0b6b71b175528234c2b810e3aabf3cd92f946480f43995252b8f9866f136ac9f33c1de56b6583e778c65e4e2afe7e75a3965577ea4dcebfdd92946e49486eb7dbed76e31b9d551fa1878e1b13185c1416f9e9aa225c548b1459159925d059f51efb3a308d95f0ac7aedc06b7979882f55349829e62567a1f578c95fbe3abf803b2075f4ac7a257ff4ac92b3674dc2bc3a095c34c3ab7360129d2086cbf076d1cb5985f515e72c2f279aceaf972acf5b5ece2b3e777919aa7cc7cba906f417991384cee3e5c4c283008fc04533481839575f4ea8927bb65157fde48206ea9fb48b3a585f7975de61129dc082d2f9f5eaccc3243aa1d5c3e72e1f54be1305f4d70fa1f3783de104472f83e4e60df618e49c37a857e719bf7983fa6bdc19bb919b37a8b7463b6f50bf639d37a8b3463a6f50eae2c83cdee89e390a3731130daf7e5b9ee7791e0d9299588999d418ade281478adbf3d33b1eae7f961a50e90215e60b2b476ec839b204cd162482f8a1d6eeb22e0264a7b483cc242ea24f9d3529a53c4897c2caa0b7ee8d93d2eadd38e98c996c76ca942953e69c524a29a594524a39b247a594ce2ae73e09a1b3ca3109c5785867672e9a6b564e9e974c86b294087a37021142692b926f94e441ba485c74846947515622c94faa8f0c01370281e19641dfcf7b9fcc5955d15bc3a4cea8046c96b5b1a0548acd4000000000b314003028140c87c442d158340c5449db0314800f879e4668561809e428c9410a1963802106100000002002000333a82000c004692ef8320a6389e4a36d12bd2d029f14334b76049000625b7b03a7d6ad9f493cbbebe7a8bb3813e8d89ce6c314dfe612081f8f3f87eab3beeceb902a8091d9f07e03aadacd1bb1a369b2ba05fbddcc80c20806d70270199e3d1620ef30bb98246ff9390b0e2b3e631be4a28548b9c19d796713fb6ff24f480ba9e2152d03a89db5c1834833ebc0345ac0e3ff58594e3bcd165d634225d5e92489899b513b14c6b575147a19813e4fcdd02e1daf8f842a7bf67414549aa102595e742d2db0e66368b35cf8fe1944574425b1a0cc55fba2b44bd6953a25ee9e0c42c50ef09ad560258499f9c52afc805d38dbfecae1b49b1e136ad7eb2171ece396e48ed038e5bd83d13b7684c668b4c1deb8216ccb3aa3e73101f22f805812db839f9640a81eacaba00e5a220136512efa83f87ad073ecc2696abda46b420866a76b4526a2d345d82b45d04070cbb6151cd4fc2d0ea2a0aba7c5aa9fdc6b0e8cb656bb028deabeecd2d719465ac7f769b6fa0810324459945e746e9d6c7b0d7e4b2d733a1b8bd068f85f8ce47232b9f47c12a220f403fecb710e0399016b1b00d9c632fca55c0d26749e28a809f9b9075b005b8fe26e611dd7856795bc9c7709b4d9c6a4b42d097b71e8a7f40e4fabe97fac4f32d24d8d8ff6a85b594a67694330fc6542ac09d9af26b2b6ca28786f854bba8109ff1d32434670c2bee76123605c517e15af8fbaac15cc6cc929a5e73e6912f0f337b32c11468927a36c3dd507094ff187e357815e4c3752f83861a0bbf1557a6bd57a86bc6c9b889d1139b3e4c718fec5140a75efe21382fcc6ceaff47cbdcacba1a95533068a39b80dab702aeebc1ab0e38fe7fd016193acccb145e5bc156b70181276b91f55153c563761e4ce149774f1fb166da808202ee08d489c8f4c38ab73a049b75f6e52e16b24bf124ef123ee015e1068e291ac3acb5f3fe7e6d3e4870be0dfdf3d56cefcfd2b6ee695c5dfe18b5cfd0af0e6d4f0355b8f1254335be781c7c6e91fadc0407cb7354885007956c1444ee75c310932da4efea288534a5de205366c2111b8480a0d4e445d72b64e18962c9e32bfbbd3398a4bbd15c22e70c1604d1425eb05e75dd00e6456557444642e64551d6d469291b0ce0b9aa6a2d702a303c169bd92af653dfc1302f1916a07bb4047b4dbe3d810dd88d1638ebdf8a383ba88f365ceb7b6759480a667d80ec5b31e1c25648f128a070ac57e6d25c98964327b5b339220d3c89af0045291292b434119d4a2c1cf4e87e32f905f54336b0b6b05b80b1f6d4e1a3d49158e49647341f1dc8a8b037532210efb3b3558f1bf52cce487649add58a0d07325bc867fd95674910835de49d380a92b7e7b6b84dbb6fd414f277649d08d10d8453e1f54a32f81535fe00413935df3585bd960fb1161950465342532631dc8365e916fd3a4c8ca59ac61f61cb6100305b726f5f4c29b8986af4c5d253bf39901d2981330929dc8eac58b3b5c8a2b7e80995521c09dd46ff2690aef0bbc79b755188fd55845a1dab279144397fc72a94059ce7f8f82e710d3ac6034151082695f9b8b10e925b8625381ed46ffc905e91667df9154be7e3298fc6e8691415d6aa694de342194010f5b1d1a0b74aea00bb70effa5ebaab1ca7409267d4d4378f8b56201c7a02b670a95160f44514a516ab9bfc69bdb81694ddf331ee3958e335ad4185e985c6b816e18e77062d0c277024b4dab6f560d67a505704807d2a17d448056ab73baaf3731b4a0d9e9eddbd6e87cff8be87335eae9c4dfdeb1882d514e9a850bc86d1739a87ce85196c97af9c34c258c938c75ce272e4d98f43b625db0f0835ffaed7aaecfa75ebd62564fedc4075c2867078ae61659b01287b15d87352f6e02446ee0122e6e318d08801a833a7f3a374ce49c43996b3434f3b83a05c373afd243c4428be39b8f4149b5563ee55d1665033ea9284abdc0d2082b97c96c718b733f97b484783954202eb864d5a02b244dd5eab836b00a79019c0604349f1d009d43556aad5456314c902c6fb1eef1f02b3d85eddff3a7cc4f7ec345ddb61e3bb44131ea1ac7deecfe5697837bef85d85dcdd6e8d93988ade9ac598dc74bb1e2bf0fdc36841fbf199fa413723682c1d9e1b9ab3ee3afaafe356ba5c5ce3bf759012b9dbd556c985efc0460684bde952c95102b63226ae6187f715da0aeef4322b3076d92ccbbf9793e6134c406cdb4593841d7115e3e99af0b41d9f090a58f91a84579c54e647fcc4d046341338fe7332b5aff50bb73ae7ca5e38f52499a4a95c4fb07bebc2977156be839885a95308e5e4f552602005b09d36d93dcf2cdbfc7614f30216b1801d07a2c3e326dc99ec0355652253e576aa5935788fc20d065334b4d5174151cd2bd7ed45aa5e1680a377f31aa06630cf8df68f25939300e7841c1efeae8d23019f9ec7a1d231e493f19037025fc2be433f50a0ba0318f91ecccf79bba7440f2a461d6d1b5d60b4afb94466b9480a2a0e7bc4f9f93ac0646b9b3f5b07cb33f80a56cc66c759386e702d5b0ba5a8d82103e4af0a1b4e7da0303169986a5e18153e35e2b9412824dff11a39527434756b05515438c57c2c07fc136a560d66727ddf84835baabd63b1e37dcf114d325eb00d5997a426a3d6588bf8022beddca660cc8c041c13660e24134ef97dc1497be9884269cc9e79c3c1beb1b080a302c54525a3ed34028a230a4c14c7ca69c25a29bb5ac3671e2b83e300111422ecdd4f1290f7fba1914eb88462743a850717739e258874072ab5a7daa326017dc49ca664b5d1e1e653e36d759c4dc44007aeb4c74b4a193953f5699589455fe0a6b42318787befdf40a02b92ddd47850c40a4ec24530ee0868b8b9870416193976c280026ec8c5203b89b8f7d297a50c85735b5cbd7b8a1c83d250a8461e7335d0778d9bf71aba003e584ab647c9336d98ee5ff007ec19ac23e211f989fb123f9a690a637a54a8609cecd10c38b26920f90d449e9876a43704345d7114a087d84322a6007fda35560b456facfc5f995047f3db88afff0beaf9371d7b10c19e1e727a7ebc4b82fe09bf2b516734498f7f258dda840b75f9463ab22fcfdf09d6cb909d06661e14fca506ca5645072139fc18ecf70230873082a0b7f98ebd2d2caf30badd0dfb1d90726ee0d30f4950c97b11d154b23bb6eece8214193301c9c26b2a443bb9a7d3c4621d811784c87e11c2b5adb3c5d5f2d05610dc3e1449580b6b46b73167aea7587bc15fd661c0e895be44ad4013e14c3426d8477f3330b988d5cb146ec77c06e3ef769160c2f0f51efd65d81e075375f2481abd77c34076c133845f7b2f026d6bafd85b104f58a169fc44d6f3ba640a9874f777aa4b8fb1f69672caa1d00d9da7706401b1728d71c68037b946ef340cbcdc78041332ae7980c8845d3b44d3fd7233e5716c54e7d1d8ff436b8fec0fd9c0b309fc11b01f9a133204c75f0178c8af74f8ba016f005db9822383e1cd9085f8c375e5ad18bfe5fd4d492fe9178e20e114fb38eaf4178c01cf208ccd97f4bd3a022a9278e7da5fb4ab02fecc1ae1f3487b93531f9c21eaf9e89d7b532a335e1c11c79f2ee33302984aff97dd274dee706472133359991ad1db21b2698b9723d7c8abe41518b53b79d69f39b62095bc7a93404f629d8b35a8d67023d164b5157f80e2aec90b4925d113bdfced28910704ad167968629392650a97c36d242dcf859e58f6e3307ebd0d662747394f9435b6d8f7120880fa4cf535d62a370472b21a9f194043d05e728c5dfc0de18b156d97d2b376adcf55ff1c3e18239b60adc4e8d4b179144c97b388f8f85e4084558e7a142b079468281d0977093334bb58365891b9dcfa2e307e5f30474c358867f79935ad35977fe966c8ef4ca17ec9f159959a5fe01536f3d9c23908d9b37308a3a8afb1616db8f582c037daeec81a12cfe9d52475bde221466b1319cfeda3dc149f5611015aa87c6af600d62c97ae436acf36c9a71b47b4146fba1f04480a8ef36613ea6832dbdf8eacf36b1563d08a21e93295a8803a27e91f17ed1e01a4568f755a5b7c854a8692fd64b46afba512ea336ce9aaec2821de2471177ca1ebeb590848a8d3626e2150bee2ddd827dcd96b6d66cdb9d9cf200a9e516d0be27dc205d1943eab3a74f8aadaef8d3f1230d1c11cfa4a33017ca5182a6bb39ee39995abb096b1c1a8edf551b864ccc22f496806e2457027bb2915af8cf4d0942f1ae7ab4aeff72654fd45dec24f752da0dc54b00ad32d27895c10905852836540c51f650d4884158acd33c1b2c8df3054990929aa074a2f94d2b04e9a9323b816cc5c59998124d6f74e94271217d12e7722f52d6b5492f610d023c5daad3682e919924786aaf5718360b31102c20257f93d2be3272d203eebe7c0e7914268e597bdb770c2a594c20a4c92194ba0790232b9aaef31b45fedac03ee1d524c6c3e8e547aa6dfb4811ab6257dced25a690ee000606c95901a6cb25504ca26bf9ecdf927ce33208319901f7b05ceda83def4fca86b6b74ae0517d4ff09d563484568810c1f4284ed8c8ccf430cf016242033ddad319dc3beba16210e9fe5591db8f4632303ad5631bfd361c9f51c90cbfd50e1957bdaad0a2d58567d0d30e604f9ae5f20fdb84bcf0695c46a530627a80e8f45fecaa594a1d063d6e0288a507f73ef11de21b0c9e329801514116d9c4c467bd0d9de933e11f2f6d12cb280b04739b010fcd88813ec35e393c6302dacc078e9922c2f70c0539a3d4466a0ac2a979074bc8e6245d15fa61ca148a644d50f96ba38e7c0ecd44c00b08995715130f6000631dd235f22518f52383213a04189b701ed32f00958e1e94de7e2443c9a1c965984ce55181cd0b68ca312cabac4565a282fead0ae80aebbbb53f3973d26ac02eadaf02a2dd6929d4fa01924e3d66d4bd318319ece8f677844d6621aa3c0408a68a46873a08d4f2a5ec24c040bfb5fc917a5714940b7201fa44bc5ae6ebc51014fecbb48d7cf7e002673747e8a8f5eec7d3322c399aa849062e62adc3af444dc4bfc65e37448249616e99ba6328ace331130d85dd37f888238fd1452591d3982defab8b7a62d3f911a52f832765a19f621f206860e815ea5df5ac5fc10222bca35ed42fa1a076d7f01d9437d0618dc82cf579d99bf407f13fa3060c65d744462045950947b55be1eec16cda2668e9412491ecba3a12761124386b32f55afa4bf96cf4098ab910d81b7fb357db54ef7dfdb21480b8658aa85878ea539dd7b574489190466145d9ffed53926b826cfdaa95f1c1ac894ce7fd15af3adde46048473a9fd222f4b84ddac68eb005aff782c499ba67920f4d064d6de9b90422f41a2e64d484b8620933d27ed1a10a8748c5e1df962b3db954a8f7c1e18653296f362348319d2f483f3f0406c3600dc41459753a77b53170dc8669bf54dba3513d2ef95d28954dd54f8fb8b76d22a9b3ab9ddd15ebfdc452923814ead7447667ceddcd5736313936b56753f0e954cc0ba906c8390a8838de741d3283a9254f6f0fa05f342720839d854b05ef43f23ff895604ba20632bfca2ff5fb4e86d5e7f3c94fb84e5034f8bb0dc66215162413a87d6fb5415a252933316dba133ad7a65e017482ea9bb39f0bc47fb8b8a133ecb334b406cad970e237029b028b0e7a46ac0195c4cf6fd7fbf7219df350fd3430f98364916b2cb62e1c701750f21af944b2f9feeb356acb1a0ae9f007822a883f25f424388b41c0fc16d5a7966079ed1432d37b5362ded9f636d99b30b20853107590bef76e0a84ff2ae6eb41d44ac6febddf9460b2446e9fddb45727c63cdb6f60097e5719527978d5495fbe0114494459b4c65e310bc9a268d5c6fb7af3aa3ffc2ac7c0cf105fbb6442de596ec354d7c215999b6a22c1d6db9b4dcbcbc61addc40350702f599e00ffd75c9c3a9d12174826f8c487ec88d129e18588f61105bf3e2482216978e6672c0eb423fa460a1f28e4946861c79dbdceb3166ef22c991fe0dd6dae8952a845a80dda446f1adf993ec08243e138e24fd72b3c6af62a20f2fb7b848a7a372b5edfe37013552eaf6c05feee506273b0c1966cccc65b5b3a894431a321ec09bc53ef9926112ea5958e28f8234622a141ccdec6055b4b3a273db70df3263dfebd111e9292e1c824841ed822eaf59267cac6fddc391c1b62a3e388238cc16435c336c57dc85a2b15590e222a75b35dbfe3cf26f68281874c487bb809f776771d064e0ceaca81fb1a96004aab46534ff864110f5bcbeaafa34d5b7dec684e114c82a1c3503a644dd31ff646c39134af2b90d265a3b213b6be26c89469ca2b118088fb10e7406c9a3a34a8a5f75a037bb20856e6994ece5fc9bd4d767dbcd52e562d9fa0faa7295a039476a96a800ceb8075b452b56c882868a8c8097982ec026b1bf9c83ec749b4a66cfc5a18a7c5b7b2d6b36f60948599d473c3b773a5311fc8ea4a231896d519411576d66a0a1a54e3fb43be0a3bd7a723a351e4668d87390ebc5cc0a3d8e869e0caac3fa2e68a1a4b94d00ca1a59b495685d5bd56704b09c6c061e1f308b1a44b57edc10a27a65aca8c3f18772f6542dacb17c66fe600fc13b810cf7851ba66ab5d87ac73990e291c4601df413e41c5704f5d6564abd18730cd2c07bf8c60d1b60371231f68d59ec96bc21d6fd89cab352bbb9cf37bb3e3abc924c6c6afdba05421dd06a931251b6f8050d63cb80fa93719b85246b7a29837c68a577c665532d21c17278fa5283d4d3db95bdbbf51563cdd051a3d4c6d52f63385060094815fb3cdcd824cc3d5a890710f971a7f9c0965ebbbc61f2069180b9cfc95b2dbc573ac3623af72a714ce87c390a57cefbf1ae8598d7a7db9ec91c2fbf1b97a4398724363fe26cf630df03b5f46a4fc6112852c6cd9e28e0a03d16f92c8c721c613e366f284f0569c448c20d35aa377c4996184dbcbde3540e70602bf9c8d897be5fd14617698c8eb60747e237059547c2e6197717639c260d2109847c94a2438578f07e79cd805d10ed5207a2a5aca90b0f3bddbbc553792786dd1c3131bdd9f06bd211416d736d938d2920370a32223446f8f15f406200e8f7e4c89939bdd17f0682c9a32df1f55b3785ae1293ad895b1787a51bda6be7387093f54cde2bb092e8853a10ef637a94223b2760ada3ee03f681de4e412b79a17d07a86e37d54fce1f978c26922413abb7a5c5421c5899d91828564af46a1bd56f096bcd9cc2076fe48a09b71c6443017970e25daaa92fb05cc79dd24b115ac68db012a954675d291436be807cf0abca3c739be80db9689d4d1c13a64659d8795055e1b8a2d4b21b5b298bd56f2aa0bebd4039931984c44fa246a74757560352b27d79d16fc32ad166317917e08632a979a05efae8712c4c211c7317eb7c546e51240aa9c88ba50ed9f2fdaa4e12bea8d475d37dc84267eb6eca0a1093ac511bac6f46f697412a347554150dc70e201499c6d7b5a739f5d60d31b3ccd65c326f9acf48941a17a25249e6674a2009b865d99dbbbfb8aab73dd938d2e752d4d01e23b10f5fe52598d9bd594c113f98a9b17b4e58cad5c806192ed5838e969e589d12122478eee6506f031bdafb55346a672f5d3d386f0504bf63d12acc024bae1ef00e2e55244117ada4fb549f8824ad7f60c3d6f63ea10b79423ff53887ebd56ddf1132fd5d51f9e42c833ab88631e0c970666f3083ef92fc8a89672e401b488598d17c89c684a18cf802b6c5c597e8cb9b2141dc8dd05793ea46e756480f53d26cb3f3a6d48a9634be4acc95b96420afcfbf44c87d78bf810111010498b344a4bb5932ec7dd589e27f64f4fe6bc9ea030ec092f4cf6d5547e02d623a01e7ee07379af30af625bb9a45a76e7492f93e53ea7e5960423238e6b23f7b6887f393b08633130b156db508110222a462ede1a11c0ea4c211fe250f885d675ca7c5f1cd0c275c77f0d602bdba3991a4f4e237e403152237f3aae3b4f7840d44c5625e5fa91540de5549a17e8c1878a11932659e9a82b67b2304db4dd234f69e06deb1510a8208f3deec311396f0e307ea4dd7d187decc11958a1b9097420efd3cdf79e4e21ca680275dd14e978109cde939af773318c86d64e408b51aed18581675c23108115d840313084348b9454be49b64fe24845690347a5d9e562c5734cf2c2599b6e7b0d70378251104d8182e8ca3dd47f7e0286c2053d314603d47579d59306502911848b6c8149946b2fecb9162e009e5fe1ff0f22c601688ab29a03d08a0b5e1b3846628c2b5306d82057704dabc3852a6adb5eafa468ff5424517dae9fc6374bf31790ec74185c6a92d5f8a88f75bb3a7f83dcc74948d1efe0002d9e72904d05d332018b2215d5331c30078c6c6af5730f30df22400ce4b2c32bac7fe4a73fc70582ce2981e970615904aa6f863276c9df0196e0f6b704414e93380335c6e162719cb181d888029db1e0f85d2ab45e5f5a40e31a094e51802b94e376244bbdd15436a310c2fdfe3bc749514695bd069a72e6d25d51a55014bea52b2994068d9ec40147c4795656c5daaff2e69bb07f5ac166c9f5a44d5d647a667f0215984032b00b28238266c182e2183a995412ac697a1253f06e0eb8335374db92836e76616ec80d2d064a1bd969ced05cebe73e6d47e252ece69af7b96f30b7acc03e7dc4cd0d2273d59a9e6bb862e642f4272668e6760175268570dc71b3e66d48e5c5bc5f62e30da88c7d92a06c9d8a2be4d7470e44243043166456d620f782dc488fca28574b4e322f3bf614e695b98cd80dad8ea667c4bec33d71036ca815694c87bb8033794055989becff7b2ec88524cad2f5692cc677c17326fd3d91c557f2790d65c99660a3cca0a49467d5d244d318761f52199bd3a70a959c127816180b31b124d7257b9c6735305e406f124e2f26047279a0080cfae0ee793dfd7b00203c089f378f89aac82a627e861cd5c83b0e13414e63c7e10d89591f094c05049bd223d5c0f41815f3d1986ae380f864d16b061a2d8ee0067bc7b0ab38781e3326c2758767ae767147c0de541d05686b92d0f635ac1d462e576ec5af8023d030f02421d487b2d4562401ee166eddb01488956042b4111a26a4c0ecd39e59f00b06fb6a469100042f39bbb6d3d5c2126167c688b5747635c2987f50a13953746dbfc802704362a94cd63b91474352436ae9f5aa7226820c08803eae269ec96b34cc562ef69dd7fe45ade86a18f54bdf7f08f1541e2af71a5f724d549b38958747b6e7462da94d0d85fb827a680eef75e5e65f99d8686a7f06c8695cdead08426d4fc67d993ff68c514cdab3144b41ccd88ea5486fe4a08cafdd77faf81f1f9c307b9a044a087535b150ae2033498a150b9f991742b5eea48e27f9a22a4c626163e38cf20fe6abbf2bc6b84c922905087efe58fc42e9e65799bb2cbfaabe164f30ecddee5f8723c91e189f5ebe54ac9596345eb7fb55580109902016efab55d32b529bd72483ae361e8c61425c7b492a5a46f9fc51bf03b8ded5e65049113c37309d1975ca08bdcab52adf744df2c22cdf6b43c57e4500d699d861448aca71c22703d62b2c834540dc607cf33ab44de586e138013c8ed1ffcc04a59045338735b673aa30f954b34aa43e0170c874f264be924a9df0f19fba8b3ac586ed273d49493aef141b916fcca9483b0b3f801661cfea9df6927b4f925e99b2b2f0387fea242ba92fa70e426cda58081e283367dba38842edbc7994a79de4b36c447873e058c47ff95345dc0ee7ed9bafed193d39a0d702669d1a0b844d230424046d0c8b696e22d7f398acd419a241a4ca1086e209363d1d29a6c6b609f272d35569ef7be5ce4d9cfbc2d0512203fc04e8853ed465e94230e4b97d48d198a6b3f2cb3819eb0dbe2acfb0119c332a683ec9473c862e380007b18cc6b5d03f10bb5a205ec09f84c2a8c4b34b2543ea9b95a6bd11806381fd4c8e4dfd4e9a102590d0a23b3e26794b864c956997103a5e1851fa6e497801223a4758ae6589a2f7fc3be5801c6b00020c0ec4d90c78d00cf3b352ecc60106e3a5fd92103373a86db92e09847f20fd3bad95106bc70d98785767e34600e064af12d811682c5e347e7d004b025d9e06fed14de8470fd42438480e529aaf6c573f4858c3217e41a515b2a13b49b72d04b51ed13290cb25eaad5616f458a25a4a91e7d5ffa1d05fb61a6899b5420f670e6cdf2c9c5fe6f629b29e550c46c3d0927d1a42cc69f8b14a98030b4546252317716a381a98baf6b3e9515a19d6e529e1af2e0c98f52457b30235db11650911503458779f1a05d55155ac9c249473e996dfcb794cf40a44d5ab3f42bed71c8bcb917dcc99035201244026b2283c21ec193605c8893b8225e772c725b4e6f9491237097b93d1c7fe3df2fd26b10b29d11a1c4302ac388c35dc7a156eb94d231895cc448dc82add36c9b6eb163d8c4e42411fad3ef2a0e17dcbd04c3140dd42f5f0ca44581c29959d94ce64fdefa3951128d06eae31c11ada5359e540d7d387324d785b48c0a7ea22f8f8c7422276fd348fcc3be34ddb510fbcf81765c8492177f3af5cc2fe61291032f72c381cb64c45ad2ad8773dd465a146792258d0d6a2bd6c489a0fde9dd677341b604eb4e4b374f209c6824d3a2ee82a8489f2e3cb055154cc3e0e2d2ae73909eef31a5e46517be9ac452637ff256837518dcacf4122b45b719b1070077223cdb0ea298b9f9f97fdca32e70ecc63435e57519cc028ec4ae2c3a6c862878e97747dfdf86043a4f1023dd547a7c1ebff4e455ca708e29c4a0859d8c012c6982dc63c76a3a0172f55d86e8e19536c107eef3ba2fb31e557f74a728bd6130b146bfa0887508282d2bfe2da8bbbf868bd8a47e81403a055241e0e5e4fac10b901a44f077104417d9a5f1373a5d6a5a6ddeb0e3062da55fa28519edbd117b0903872ec9d43f36c967c61cca2633d61fc5fa7bcb9c0e38b626bb7c124181e4323fb08541871eb0f2d8e3fecc58e049f98ed81293711277add920a587655278e93f6c22aa829c7a553cd452d6882dcaac52d5242a652b0b1b67a7a7f0a71755841db29e04eeabe6f41354818a1573deab65961eb994d88578c9983f114d052fad0e02243177261538f213848ad7ed52337ca0cb715aaf1063a25b2ac24a3593cc89495fc36406c66181ab0797305aae91972b7f4d007c727b0866970fc98546cb29b62915303e44a0a481520c582c8c15f089f3aeafa247533cd11b5a16f8d988ea8e989dabe2a308237ea13651a51e0c6b41044793b40fc604f857ff38dd7dfabb0e901223588d3b5ed6d64f940286b16d99eb732879701b913fad2861459134542ca0589de9d50ad2cdfac5498067398e1d67895ad23115ac15bad5a9a462c6de4b5dff3bd60f2e94e148703e0f25eae973ac85dd6b2e9b3817d182656cce4a3383173b2eddf9bc1a1857b421b1771f02481b9e02e279d270fb6e40c8d0efd2f44f0cb1d6f0fc632997beb284046bc852eb14d950a4c0281cd716506ab2f8abdeb73e1d06b93d8459949351cc5676705cb4e053076820f3bfb918518ccc63802cb0ba0828d031d8dcd610768ad8a6acdbfceb03ffe1d02f0d0b7a40a8fbe1e7da16b4afd2128826f4aaf1d5cb02f0b16474cad5a9fa8dff96cc9d063dd069bb3ce4ce54de48337873463fc7d2bd3bdf1c88c746d1a96c62191908a3e0890e5bfd4114d22cd80ec07b670a53c3f08f482826e742bc06b4aa7f4693c1d60576069545f90e245db1e3e91e15475cce6693d8cf0893d5df3f5ffb1e330c2cdbace82c4d09ee3e932dfa3ed1b375bdfb36c16f3388e8b91a6c923aba8a8caed12f53d15718e01fbfa0d240cbf0d9f82384f72bfcfc8463c9d9f753fa2f8b99ca40f00a80273c3f93c900a3766c574c2aac839d1a2a6d40d495bd6f953b5d88136a971db418e9cbce9b28ea37046f5c6ef63e68f2914117abaef12773121443a0f79564f73945707a6cdc012d3cd055c5378bcebfab9ede8fd2fae51f4ee4921c72943c88aaaa8d58b3876e8fc31f5448d9e6f831096524e0888e28214a0f569cc5d71cb0f141a247f47d59a52966be000e82e1ce55c9ff074ef5c9304fda46767ceb5845c41458a5d7f94ebb4c2389797de2e6c8dbdaaa927cf4f505de3812a8bdc23f2b0e94868e0e3afab3a6f8215589243ca15ab28fc0cdd30aea3de3b29ac71655d84a507061056858b5ef5163445e154edac499ad7375028ab491c81e263941407d7a0e30f1851360db95fb9e767ff802bdd91c17dd7231d4ac0dde6d6509a2c6b4ce53846527aae74f800214a4b4f3747b2b2a020d07371f864f1417630360063214945952ab6ea40a2ea586cd3de546e99ffe8cc382351d6ba77a75eac09b2c8137a09189c0c093a446ceb1ab58770fb5def5a08a1f40cd4efdb5a3f491e26fa6ea10bae8c9780100f0ca01bc97333a2a031634b28bacc5a4255d601e1ca146dd7ee0b99249316059b6a3079f1181b3e598c88eac061a4bcf18fcd2e8314f9978cc2f37ee19c215671e63540fa677140a263dcf7e9b24ac6b615fdff52367d5cb9b238ef777817ed36132c1b3f13a28ca009f18705b1d1418a8a6745616ba2da456a4b1880cd2338b6266148a98decd3af76397d135c6d953ba1a3820d3967a9ada93480b5d725c9d9ceafc5781c2041ddd7484217b9525b5f13db34e450b63dd050b187b3dd961520a4da6eda88e1b81abbb0af39da0d76ca7df81780bc52db330e56aeda0e2429b5bdd7f75ce62caf1a248c41db182f93ee8ad9023abe8996fe30ff1c9b471b1b05b602a8f51c895993143aeb697a70e1d90ba9279ae15cf20ac2c64532d079ed4e5ed07af1c4cf8f3051e5dc416477e1749786efe95720bb8e6ea40e65c7b70448643cc46a27cccdad6886835244f0224cd6e2795aa08b985a363b2e2ac2335ae56682c4ad49ee05d121fceef923255f00a77548beb2637d9fe1b58ed67c99d12fa313674737ecd99650a7d6506e244a945d9bfa6c52109adae0fe9781a2e157cc71c4ba23e1de8fcc3c0f1574e2fc837a08adf2038e1b90a43f7bb740ae03a872538a422ee0b6e8aca28a62dfed92d0adb99ed814a51313c37d90de30a2052d33ffb78f52ac87f498fa5a0955c6c0cdda6f26d4168c6f6d08033944e4eea7451918a884add0cca24a98672a01340a44269a0959dd407e90598c5b155121a32a818aeff7db33317944cd1c21170e05ea0453d26801f3a08bb9c3a5d4bf2a209a8de9a6899459d2f2446ea7adfd78f22789f7cb032418f1ebfacf34c541e4ccb76d81e774192e036305967467c7b0641837da8de1d93a79dc200ef0bc92a13e763acede354923bd7f8be4688c7b52f97edfac8a86d3a761e1953ac68a9ccd181af5102da1a83fda2d39e47d581e663a131d8593be66605b5789a2f53dcc1d0b02125af531bf8389550cf17024b2fd4ecaa28d3b7a9095654e2c6f4458feccea849c038aeb94f050d287986dd4969c21f5223add46eb9a0ed94b7e39759531cd25304b889b58596348b5ad89f34556c9fa86faa1784679cb17f6242dbc612c99446a63886dbef4b02cb7969139c062be007d3a512e5cb5a7d9f20ff37906d7474fe847e73102957acc70475f3e4e50e84a0c8d052cf9e003c5f16468a29bd47fc85514eecc07c9ddd40f12ad5f9ad8f567c78a09f444cf83c59c193ad078e48fb8629701b48e972aa7130afa48f54a9024c51bd88f4cb04eaa7422f1ea59f6f04a9093376328e9b1859351a869b78b5e7063f6437f86b3861defe23ff8b41f0374517c68f2f5e69eae5ca67584700fc95fd702f2b3b196dbf125855d4119cff89140ac940a6ec7e5381ccbd3a3978c317a0f5d700cc634130ffaede986838a6613be0f66cb1416d2046c2a65e45ed8ed169323f3af651e669c1d50be875521f10c0e86917c547d1245a9f9f54129fd7fb93648fddda06989c462cc1bcf0b1cb97bcdd475a7e61e99f66aff522e58e360832069a8c2d442393e5dc56d44b9ee139daad0f52cd1f26b2ee5b20184c6274557a925eb9939c2098c5df6628bda044cb15622d0205fbb2598cd2e830027a55e490ba996ae10105fc0a4eca8874ef66821d8e7b5758f7f09d1d405d778a600232b5eee2a846be05f267dd8ee53fa708eb06e6c1d8245871e14926d29ed0352053bf74309171237f022ad1f2c1d90ddd8329ec21cd8d2f48e66844e0c9ad10eb2d0c6d05c3dc68cad5b8914e4082a0db2339bd5cdeb71283cfc8a29ca68e1b2bd080c37479e5c3624391ff087720a1166d4aa2cc361d264721614ac5d9cd58e95f2758d13c6cf238b3abc00638cd0f06aac949c198aabf329c48744cf9be6b9832cd1f79f32542fd0bc326e1cdf5e202cd96e28ada80a1e0859fef67aa82615ef9f959c3f28a6e3c24b6701a6ae7a4c3b7a712d985f44fb5f95d3c9e45de1989bfc69f0f52cb8326e5a481ccb941075c27a1ca6654a4ba94c4969dc5f099af47a0f83620794c73194b755de69a3c8a9bf60b555d70cd8644dd185b2607ab3caa278a75c81f412b0462c7c3a06ac1947e6f99aca6f6788166272924d827e13d0fccec32c1cb97cf84280f2f90e89565f38c9a2d2dc0ba0cc532946404324e9660dba87d151ae10288caae5182260ef50fa0e648d8d053157e4117e8470989a2f72445351d61ec33aa1cdbc3280e14b5eb0d033c62bec7cfa4e6452001085ca25c10598c130ce33a184b3f8ff3c0eea686b7d1e9d32ee4692fa821590bfbc381c67cea033209a15a5dd48d0c783b89a7413b725114633e9b27f19b12f9979c825b2e45142c1c368c4aa91b5b4bd6f2a59c6fee8dcbdd72d0ae723e2aa974deb3c70af6a6ed98d04164f487d5c3e1e9b878439a3f9e200e2574bed2612e96852a6d02dea9165710f8e9bfa4f81f2c9454bca56a2fadb67237d5c15a04008dbac9bc32c6d47c2b759edfef4a192f5ccfbde2b78cfb0e354b21b134e2f422f8e606ec9a5d3a551bbbc068afa13bd5e11469fa06b5c41c1015aab21fe95865f9f2e6e8a40bdd3d53bf03456b151dc204d6ade1586d31b61eaa8f6f61d8352f40d46760ef9ac229c7a23843eb391ef7e024ea6e238024e6adf0ac2e8f540c2a8f637272c28b746a07f560e6bbd0d3487b83af2ae8036b062a39f3eda40ed596d58bd3910b8df051f45c1511458eff2fb593d3c7a4568517acd692a23f8089edd29cbe1ef66f8dd18e1961c47b55b627431c533607472f4b81ff6c6078afb5f15a4281a85daa982f93d91eb2d0d1d9aa837bab921a9888ec781a6d00936c220e867cdd7ed7037ee607947b5561da52355336ba55fdfea61a8f781d0b7b5ed82242f38514d391741247b4a1b4d8bba4888998c514473bca99efcc3dc9d88f54c1b414369f747552a0d9de3c88f14f8e7211a1165fefee8c577146b298867d95027702a43c890a0842d342c0f8b620f3388b8c99a70d5048a86a2e6cd601b04e65d0b0ecfcb34db549c42be5151324c97014294e4fba6054020963e17209dbe8cc1fb0c340759cdfedd3166e19e15fb2e1183207e51bcaf93d330e26aeda1619b39a807b841541a2d54b6210a14b8c8af4f42532cc28b4091aad5f58a364a5d30d17e5102f8c47fd651d3f5318c52e501834d8280275246add7b8229b5d965cd48753c0ab112cd3561ce52401476ecc5937da96089dd9ca4dff7f92b42cb7e9eccda079f1366aef31ba09ff3b69f3401ca68d575bf05c1f57860906bfc825b81a03b00b969aad60bce1629d6c5a63ca332af98e0e79a34eae51a58fa3ebb5d7779f39c4790034352f6ef6acc19c96ff2531453250b81d0cbc9e4546a64d57f137e05dcc32e914ec3ee2b6fb0406e4939a8d1be016e630bbe43fb91408d2091aafe34d313a9d4647bea3255f8c2ef03e6476c121ec5c979c584bccb5460ae8e8ad4dab3b38f7f55892541926127b6e3555d97fb85b1dbba78e982693fab0bb795c1d7938d2657d7605c06200acdf7a15cc93d56a5c968793db8e396bffb886da7d5ee1e9435aeb92c992d5cfa6e3b230a04819d78955d492b9e098fd5ab80891b878303afacd77ae3e56c455834a2647ea9643742b43f73f1713dab94ae62401a77798667d01360086120c82f55aa8d9ad3cd213c501cc6ccf1abc02e78056fed7ad6a4dbd3bb38e590d5c7406635a7d3ab55583a0b89e04012d40a417b22812caf15c5b5d8845b6c42cefd1e290035085802a6f192ff54c7fe25289ea6d3547334b99f2d4a0ada27ffeee9d01cbcb28225055b12007b84d3fd026be005fb8a0e40ade051fba18f27a42c469a968e798ed82d041fcd140c228dfb921bb8c457763b5d57a819f64b879e168aca8d7d7fa6ccc15dbebd45a2a29ea08894d40f02a8f54bea85260a2ba46f80d3a040483c2d6320555132d4d6e3b858e76a65e6eb22f080df83a600d09dc97a561280f891bba7383cf8691b059e1aa1a4377a2b0065ed87bd12d6e491a7a647f465e066cdaff8282571423b6f32aebd5e9c5b15f486e9bda3fdfb37f2e2c6df9b1e4cde98fea97c471364ed757c9596d5580f9dcbb897a0fe7d8e70b36c4ef9a3b2cf5059b2eb3a212805a09ccc37cbb3c6b44636f801b70546348bf3bd3af1c233610b771485767b804658981c684250deddb35c126ceada0bad83ce58e74aa853afa191ac02dc48a5195367fa32297e236b759d670008c25dae6d54c59d20e925f4adbeaeffa2772201e713a54d718f4ccc32763d9a9f053ad9ae6cff87f7f63465a0a83dd9f01e436367a3de439b0ddf0a35e681a68cdd3728571da8921c350ea36ea8650e615fe4dacaa07024364336d20c6093b51f272065a73fad90b250701aea7e95598ec7f7efd0b7eca3afb909cfe819a639a392b855d8a54f86f8dd3f20fec25d1698c9bb7bca682f953384391af50479a60ba28aedaddd2c078d10bc616995fccfc63df35f87b4a92e8898b80a81d7fd6ff4bb2a8da8d0035dee7af096f9a9d9b0ac6afad2df264907aed061daf1d3a38b78947e727098bf70f22a0e9fe69e429b517dddd31872d18379019493c75570327193be5b15a7d42a2854d373dbeede0a8e43c795f146cd76f1a241296f48a5c41167d3da722c0eed3ca1399f2792aba21bed6783e3441cba8986d3f9ec5fbadb603882e4c3f9a8484786245245a09f751bd104844827c957044971269d91a8759eec51312df587c167b302d1ea4abf475b36c033b0e070a119b936ed8e30c7335c9613f56c1086b2fb34e870a17db5752188f0c3c765247640753bdcb5a609977381cb0e5c280090f22bb6f0990e269c1027337695026b068a932558487e0c8aea421e5c18d5282a8199d5a50f089672cc67e737f083302fa78c78d4647c06aac4a3247dc93a79fe77266442034fd71a29c572c7c675c84bbb9226af821130d0a44323593111769e851e4d9364ab9f2e14a873f947b248dd194a030c0a12f1290035ff2f50db806bc0a25de519eaf36eb2e91869620f0c065655e6cb3f2657a532c7434a3f73c856614dafd57ff53b6390f11522e026634d408ab1df1f69e065219401e9aad68ff675e972251f5235ac9cbdd628381008a30fd612e69d03ad1af10a976daa1cfe26ccbf328fad0f1050e69b68c6c51c63c068807b19d06080eab98825b60063907bd0f623bbf6e5cfc72b1c957ffd6f2b2b5fda8e6595f70dba80e9689a422854564218ab7106294fe97747423d8c39d4495aa7936fb627a7500bcda0f1a295666d8f0bfa79455f89acb46be99ff993e855062c6f0374b75fff001318c249c063d0d0f547cbd9791fd07268f7c67e48b55853ebbdb9d39336c458d08a28749e4262afa0d1ab8e52862dfdee773ce712cefb9113871d19c4196b5e87bcca915d29cbf0c91f10a8bccb9ead244040d7ce275d9be772baab84139a3219393cab681b71237f8761faa54d483d687c78b7c83948717855564965e24f12f4471c9460a73ddc1a42c5035545a7a403591e406a7a071ed0a930267a473142b5ad7509d4819d59b74b0959a0f48f007c1341c96d75dbc0336659e6957d2de465771f6b09d466bceaf3f55e593d8efae35000ca22c55ac3eb638230ece39f0cd33bd853169cadd60c8a5dcb5e7cd016f7b066786adee7b1d2bbbdf4cb1489f267ba285af36cf5f2528a675821f5652410918b564e4b12832ae7707838582c8314539e2e995cd4bec05f04062f888bb378c25e36862b7620830b5b6f2a9f21b1becf8b0a766c4b4fca03d46dbe45e4bf44198359d398881ce53e6584f8cec4629bd2c733a1f0857b639871c47478491870364faaae453e79ca13c1a7f9bce754b7ca16f62779d295d10c0f9d68b0c0700cd2af03e457bdf0db5a5def9525e03548609cb049744e7c2b70293b630a1251d45f606d324268030df3731cea53fa093b7f7ccbbe8d9ae9e7e93d2ba1b891b8981df9f110dd10b0652a88b0f1aeb372bf826fe9a1a51605d8af9f71fa5d3e80e6226bd58bc48e5a42a2fa7336b22be44dc2e5bbca68fce2dca9927fa9b87c00db4d13ba8824f4fdcbc60ff21c8905d974ca670dd5c365a22652f6ce641cce48998ee64661f185e2cfc0e7cdc17b61b07643a1295d5420cfbe277e3905e66707bd9176be5281440b05601cd1cb26b84e53a00b70b38ab49b44b87bea7a276aa6214f5cf517498553ce5a34cc38fee3494693a354c7ba38e949f6eb70496620c19846aada9332bb40aec077700bb58142fcf9f20cf753d72500c68e4fec2773bcca0f787ea84311c412f02950e26e3c3e4a717683f3bcca656b36830146babace8e3b4ad739da3623548cfc532963f06224b91945999bece6d64c23dbe842a322b153889ebfb59f4d640ba56226ec70678ba9ad4367fd195d0bbcc70a91287f1001e109c7f58f83145c87cd7e716447b089d02d31f43405b4322b862083f6ce1648863e240d1351245a30e4574aca15aba6456b330c8eb6771355e4735fdc628f05c98144983ce6db7f107e08284e14dd5321920b0a1c75e3353f95faf87d1135f9592501aa5ac4f1cf7493223d45a5536569b7de767e9868369360e3058cdfa49b8cb549ea086ac8b0d19e114286744800cc1a0fb7227839601dd7212356b1c67a97f4b5393845e8580f7fbb8591e06d9151f30b7ad58c5fec0256dce4408081f2dc1eed3c1e73bbad43bd9330af2e8ef4b1245bc052d48c042c08dd6b757a939acc9db08db77146cd48418d485ae663fceee818565c3f5736bb85e114956ed7e3d0b7da0114e80f4d086b885720f01af3e30dc2983c437785f77752949791badc6ee148bc6823bd91658fee3cdb3cb5a9b9334b37394009ad9c7e3fcf52b207278dfcbefa92d2216f5da3a0637e7d2ada5fa09598d96e8f31fd401acde1e448ceb570b4d6e1c9b7785c6c732ed96c024a72ebabf4952c2c564f122ba9d3b440453a9bdecd620af1aaf80518a222e29c8384baf921dc2e0eca8437a0778bed25f9ab29c05039b58877e5c88d3cda8b7467cdd8f488502956362d003bc1db0abfc3da7a0f0b5ba139a551c1a77624e469ec8ed8830fbaff2361ad55182c11734516c65464ae7baf8567c8a6bc69b9fb04ef717c45dbd6571f098046206f45b9b705e2f6d0c3e9c2fe9369f79ee468d2370142c73a3d4d2e3f75ada9ae3b28dc095aa1397457f9747e832af01bcc4ccf876321a5586cc6c62d6c1739c9ae616ec4caa9d622ccd2b3ffff7cbdac0d021bf58d188e329f953673701844102da50e3118a127b225fbc91363398bd0fa3755881a13031848af443aa41a11fa3ab30007d9856e1a6967a8f092e89c050f4adbc659eef2d57e0a5486cd94c6fe5ee986cf7b518970716ff052459774e6ea96afbf35a838925413b467e446d31cf4d56c8e8d3589f3c43e9d587bf858ec28c1bf405239933130ce61bbd9173713372010eb216360401996283a92eac0f44a43ecc8d00829c67b1abe85c5473b81d6061cec196eed953a18b0963eb61b486991eb2ac379a1b523e43bf5874076f59ec94ebfdd9dca8c0b66eb968c53eb2ea6d484c5a11b8e52ed4a7d994dc9631c8cbc5684e2f46eb1f58e83fabf54d02a19557a1f200a273bcdf5696f8399b3f2a80843b1541bced6f1bc196f4c3207bf2fe590d1e11da425f5de91842f65edc518d70a201869ce6799560385bddc2acee5ab8d8e7f86493e6a04ab9d52518c44a4a101ab620d097b22be90a8a00552deab9c53506f1ef21b1bfcc67a83d640ee1c93de0af65ce17651ff866470f38d308b0c27817600e1117b684db837743e79bda21491b6f56fa57031fc83eae5c47ca4cb9a8cbb31e423b25f6459b0c74d81fb5ee6f79c904577bd557d736e2013cb9274033eddc5a8a88990e176640d9130e7484850999a7bf3fd16a86443b20e7c53a7a92ce0b7223e90512cd92b9bc60d593c15483bfda22806a45e5fb777526405b98c3211ec7b26bf8a749ef0e8ded593cfd6b3e4c641b4c53369229cf7d53b8065f82415880b464924963353c4dd50d62483e5354518607bf067916568322a2c6a5820f47e9340fe7f60488c3652a662d650ae98781d2f5741ae90c918f42690b4184424e731b8a8a7ed815443d65e56c6578c634130d9f10a1af6611edaa66342ee6a93c15f911958a225ec6e71866a25fce9749785e92b90762f2f1f9e4739f5c70bed4d86c528886081b231e2e255f09073a681cc5776f8ec101827533aa4e0f31aafba844432b58029826589d52ef0f3fcc5c391666fca8011c270ca445a5ea196e99c9323d4bc3389dbc160aadd28651345e04b3fcf5b2d0ef3ac073512347f15a2fb49a58af459d0e7edbc9fb356531ae9d0a73d4cb41d1044179b1279c687b7f86c6d7804349174906a211276f9b497a03f94be196331af07da0e5aa11e7f140ed2c4727509673620e9baef92cde11f90c735e31413462e0144c795e2147bdff5c0fee510a2fca85b058d0a516bbc5cb567646fcac4c3fb8e054a98bf9cbf93e29349b3d63814a470e7044230bf263807075ae3881f58d8bcba4c7831552f8fc7edf4db231ef857ce7eeb508d5ff74898b7f45884bf4698093b84394d0cf0e79e703eac67c10c6d20e1958191b6a89e22c18fc902676fd3bba0f175f7145d1ddad2311001d823f310c0250d19ffa9f28b80254773a8a44523aa2d11597a7b4257239d01676320ed71d972146630ca1d60a4147e78d9971151b069a026b9ab9cd63d83204b382d6cde0b9b6404845f8ad87ebf048f341026048e69976c7d1f3a8e51cdf9dd11716600ba0f4e02f88c116254e7f81530fc635bbee3d340345f40ae2495665394cd0641cd667e72128269e03da118f860e03e18970fa004038374867f7613a6c46e699fe56c6927078a1d378a70e436214a6dae434e9b40c3db24019c1ed197192a1a6d409cb93d4f56aa80c84b549ec77dad4effc21ef043aa4d83f16201348f7c2b50a62847d0d81a768401308beb22e86a9564843cac5e699a7fc00d9aff2ff4ea45dc41b2b328ed42d1053fd3b6801b202445a0935f76e1c5c780e2a88e457cbb98cf324f768b313ab701375403f3144e6a4d99eca7cc8a8fa838ffd39c9a884a03c1a1b7a4d6932d4c7fb5fe0b83a40062f07c17b8600b201d9874e6aef2b2e08e8d926ebf683935dd90e39a09e31da3962ca08a22765fa7d5264422d929e9951cd3d2dfa9f204c20067481d705a4e42680a809d161382e1d2ba8cee889b30b9d7a259234d8337474fccae2d5d064a6a340448e7f11a9d995de37d613cb280f455f6b98a1fa9388168fa0f0d41d7a7255a6a20d2b288348a80101cd38942062897149a8eb0efb2a70f29be53b71c553d19da0e235cf5d1ce2e4d239d9b6593514a60b03340e4ea148ef51d7273c037beb27d4c8acbfe558a7d56cb43a55435f80b703b0b41e77a6b593b578f5a021585627cfd617822524af2e4e320d9f455886cf8808e542cffdadfc364e1425f6b78a61148dc9c714df210e71e32d4ffd56d110c345362285a4e1f91c372f1a42c58e68092057a705c0fe61d2da4e8e337f2b432c11fa21e2567575226ec47703b9016117f002f21d066f5dc31dbf0179a9f7a6b6ad5403f98edacaf446ad5ce66f544fb68ea726db91f9efeb46e9a0989a7416fee681c7e6803c5e007dd44cfdff722069d692cce1106d069632931be6979a29e11b6e6033d9b136cfcc2bb71f476243a62c7d591d86eab7cf5bb7e234a02da35a33071c318d2839900636b2610bd2598d5563122a6a6cdc673be81321a9a28a307e108066d24b2af24fb9518b03a0d0c270d305c0d1d0c6cff063c530c4ec092c9c53b79b44e7ffc54d5690d9cf019aa5a394fa868e8daa600bb64f8e9bb0034109d0565e5cc048593bd131ccc61f2f566c8fabf6465ef469c58c54fe167311f0307d90314c30484be1721ec894fb45deada167a5d7b5c730b330b265ff6360739e377931a9e0a80bba189c652364bdb6486235f4dc27a18cda7a8b2170bd5509babebd98ed03cd6712c9d8d47eb478ca701162dc173618a116df9ec82841ef4a39e1cc35ab0aac3c6de0f0419f2b681011054d8eef15ce435b19c41d927ca50937da9ea1a820cab73f88c39c82a4bd4d6e015e7d554fd68784f373425344836a6dd829435cfa9db0e99b66979423648bf5f527de4fdff380ec19e06fbb59017505d55b3508296c1349d0fe2cc81252e2a939104d61ae5f5584c60f37df8a0691ca837b458ce7a9a0c844a09d254008fc6dc70e31e4298e40c46e23a47a2ff6ca2a1c81380a42d2f747c35a683dd40a6bf9c08c750e8639940ae0d830321d34892b187fb4f9a4c420c511ec29e75d2b4b3e7b45c212e60e72c17ad8340877cda5d1bb83cb32ea62b1e2913650a8126e0d4cd43855e672e9164c88cdad0810c97b2de23999fecfe0eb1840d677da171f63c2550f3c267ad2cc60f5c881b78da433f0853b24edb1427a69130dadb6c9cf4e5caca039e42349b4d0092152a27f7de2503583f38aced02bf2c2e88e13b3c3a0efce937c2aa3de5f557139cc75c84391208372168a7e43f0474695e9b8152a160dd955c50088d20330578bbb4803f7f9a811e25cd6a41fc7f1e8883f71fba2ffb3d4b97961b820c21a40b94ce60f84cc0c4ff89790ffb6fcc76736d54281e41e5250255227f3416de44f60920ca8a82fb69be1ec83ffe463495d541141a08d71d73f3db7372fb3bd91c27936303838bd8b4db2e6ae0c40ed8c509e95d22580f0c1a7bc9bcd6fae89fc4bb05ee1a2db072045406cc7e98d9e301b5640b246af1fc7ed7cdd74f428ce63fbd720317ab8c352d61efb2841ca55e1148e35523d95ce4dd0a11df4d774db07abcad56c819a19172b57096070b10ab67b18b284ff6aaf4b1507b9287d153c8b80807a52bb11482bd39711aecefa3c1b8da19b204d5ecdc827a04ae4123eea9b683df483020f9d56583f22bf001949670e2237341d2647baad636a02ea4bd6863e200ea45622b1fbc471d24cfc0f93c33412f83d44518cfbce1e256a5ded23b8505baf4bbb923dd521e6f7638e4d3bf81bf6188b72010e085dea89dcc9cf5d75e3344b6446d883f03085edf49a2dcacb72e16781ef284a3d2a9eaa1f1958d1a8887c620fbc0769a4cd9b98f2f65d0ccfd1b12c7f0b11ea0e7fee173882ddecfd90a5b4f554d1ad8a20e59397f0c5500ce789e2541b3aeaf721ac23df2b2c2e54b690b8c9e5e3eb5528ebcef2508f67c77462e1beb8623ee74226bf67521a99eef53a3ad741d5a31c3a570bb67f3cb08005f18b2d4789fbc37466ee7dd5afabb8d6a96c739f8f45aed26fad9a2ab5a6ba03b7a83bb693c963baf3f6dc935075f45407097ddf3d167a0567ec49cfe5f255d4c09b4be97d64acb277f489f4a2351c039979f3c6eb6a269f8da2f2a302bcfb9d191b0a894364be874e923237a3554d331dd14a28df1b67b7c7ad241b78b3374059e3baefc030e3b858331247a805738bbe096f53605cc021d76e5cc7f7701ef648e4fc2347fc66eac346d32429962c7cf53ff10cb8bfe3de8842fc83ca2856979cec9bbe3989a07f18a17b724eb0d88e295fc99b3ba310bde5dfd9cf3913d2d97e8cfc02765a1f544c096769052674356a5e0a8e12eeb8d24671a621aad99f2393b435e6b107dc8805d92430a213909cf1ecde65ce58db7dff454f12a6922734a55bf4edb953049cd5884934b45a1b5078e0f478f63e6bf1ccb15b84dc6ee5bbe38b5f8437fe560cfbea85aef706d7d917fb2e3aa6feeababf9583bcb1c085081d47d17382bb2e211801895a13a5fb6602d9605c8a443de68df77829334b5bc6a479db64ef95647624d0c10aaf137aa60df557051e8c7043d501ae61f575282837fbc2885a7fe1952e3aaedbc931952098698793b9d653f0935e1ee96a9eeaf0a774a2538c4c35977df18e11f4214faf7bea4fe9dc8c7a486bd890e600a38cbc85c6dda12029a43a9c0820fd8b9ee13456a82442ebf9d201919b9836cb570134000716d9ec96312ff43a8e5d13891ddbb69ea42c9b06f0197c062c9f1e5d05d1873e306a11be8e66dbbb5ac86352042fc1a4e2796c277463f496f8345c0a2495cf54229bbbce32d10ba614da962189efd7cca4899cc761dd504174c1b42e8352241aa1e130ba6a6b9e331d347cf6a66ea880b58ab74d9f093188b890f20cb981db1ee9433ac4c2c28bd5d9728f593e0e498c3fe7b78703cd5bbedf805e26c245511751931814017303b1fc85d4cc812cc7497f3b679558140237f0f2fdb77d1b14f7832379c2e9e014b6ab65d782114bcd393f4030bfd19844933efe372825d586310cd01ded7b3a4de645bf27f228e67cb4d3e2f7f67b102e164d949b15bf3f534be647523b9163d538fed1796cf8d71f0c01b8d5e98fd1462bfb75b8d320def9a34cfd9ad3b9d26fb88b5b56a926c84fc5f4a09b1f969af75b6e53469ebcd0f7732bdd52d6ba2196e5fe35804c189fded9464c22aefe0955ce82400a5a6683a7a2c11b3ea4e59e8154bd371b4e445855ec551484ab199d12d1d3f274540abdc3606cb2095819db0f4ae4115d7e9257037ce49606b3e2fbf65c5878375da2bd68835cfc3a6b5d0b6fc0788267ac3400780356143056ce05264b8604f9dbceb3626f610b4c37d1446bf7a054ad528fad1fccd9f777825d6d30abb4b06d0b962d3b95f844e9163d3273b603b0c2fec674f6bbc7fbdc82d31edf68096fb7031b243c809a625de7d9972e8c8438dbf59a95ad04fab4732d1667b81633d3d9d5c4ac8332d4e3480e5e4fe9dd667efbe263279b9fe5fb30372133c9f07f32f5c2765e5069ce7e420cdf26e6b5c6223fe1121b4b22f9dd6b48a3d4c2b8198fb523dfe4f530404e4370228a5e729c6651d3e24655d6e6d4c4236915dbc974134a0a4ba03c763dade7b80b24aac6704733b450a132ea3d9c36fb2862d6100908d69b2c815d59f3f25a432f0c8c2df3bc77160afc8e8209bd4ebe8934d0ada0bf5dc180743205dc760c8b57f86ef112f3e8ef3eabe8663d7b6446d077a65fbdfc089568e2b7f76f5897a84ba86d4424e94ef37ca9e9be5aa1f0e3961092fc74cd1a4369ace28424682e1cb227927ff845b5621da0e95627fd5d11a134325b7477080ef427c61ac52ed081e86bc032ccbad57c5ff0ae54668c82179dbe6aeac727567558e3dc1ac1b502daa073f13c4759905d0c4a591eaae7aef12e5b0e7d3e219cf2b98c4a83e6d45e47bd9ab772fcdcc1a6417302ef38727cc255ac2db3237d7032613f60394ab3638ad58657c9e9aad142124386adc55b631f843b1b5c1faafd6a021a4e7a2e6b6cb7c8b3edc6b061995ed52f9faeb190863a20de186e425b2bf231c49d5dc6ead46f21df7649381454970fbb4f673599bc34a2068bc941c86eca1570f1a9b80d56c74b21ad6a1f3d876c70863d45cbfe2b8653b915d9acaa6d62bfc3a5be60977293e96a84e3f36f10ce2fe1c8bcec8e5479f17d884b9ef46e155e06b16567bfab22ed332d0479fadc0e8f1ebf162c54d2f151ab78a89d07142fca37c6d25d55b7706602fefb6111a52530f23dcea6cd05acfa7b8e1cdae45518e3657a518554318215e1be30615856379d38548dda6797206b5713bc8e68c4eb93c0746bb1b83c96fef60ad48ef6270a944e4fd13bf5b727967da2d5d3709d2aa90af9d065c5f455c5728d3a58a578131778c123c2f8ada68ace717719a0c23c2341b5f33b4a4f5a96c9d62d3c2198d20884ba5d2dc74596335e5f34796ffcb29aa83a4156e5ccdfa2792e8b85f916d87698ad46ac418382efd8863cb3db192d24ffa20ff3319b9ae62915cc12f780d261a4835e597dcee382cfafc132a0168448fdc1a9d80e17d683c6e412ab59ed431fafba3038b949dd3a60902dfbfc12a28fc162031514b57dda77a680c44252443012d6f43ae41736b84e247df709b4505624f636ed4c99aa103319655913d22cd3fa0799df7fe11254704ee438fa7bb27e51e38418fac9c02dbc15815215fab0870f9fc8fab0278eff4afbb0c9964f439cb82d219c8ead018db44540ba3c6f2034937f58160b2b2e454fbffa818ae18e6dd0f50d0f431b38409ad284bd54459312edea151b82f486f6ed040ef138ad0515f7840494014eb6ecec7da32b011cde938fa18b0b71d7eeae0bdd510146eb07f402b5f23c9013b9540f2772f8c823549c55747421a86aa862fa0a6894ec47e96ff0d03bc884982593e839c355f1539d4d0887a72c2ce84467450dd536d0914f44979ccbf849cc2612374b3ee11fe1d0870f01651b91b9c5c4cbbcedec0c9864f2248bd07b27687ccdf73472c4dc8bc9fbdbfd30866b39ffc53c12845a3ce29cc0a031a2cb9540cbbaba9dbb2a81fad9af7c6c8a977dd94876e9ca53eb08693ad711f94b36a8d9aa34f06f960637bac8bdf3c1269a0343e763f77c42b6da78f771e9dcf0c5a9997b453d1d37adce49b43f03b3692532a04c0aaffae6319445286f0f0f837e1d94387f493124e09b0f320ce5e365aaa299882e4c31216ceadb5b9ee1feee35cfd5126e6cb1e2312703a3b7ece665311c1ee945284a98325c9507c3874e56bcb2788b8dbabbe57b4899531056f88dfea4fc5b2b2617920298739daa9004ead30339c2262426794a864d6d1f86d90229c943db931f285640a14ac774631c2d2d2b88ca954f18228952148c2c7fc64995ef39a906022513e0f08649bf159368c4078aee1b3d34de05ebc75e7295a5dee2326ff7634b3a4248edc76090a4cd5970a410b3b9e142e2c28247840386cc8d6d1dbf8448938849685cc58891a3ee796240acf95392e76d48f9330d6b8aae3dfc50a60e5603a465b468279f4b6143d3eef4a680b59190b0ecf116413126d6d2221268f67012730b2281804ffcf698b73c10c731aea6ed9f0823496da2ef89db360b1e73ae11a177834c08dbe5ad66ee7fa80a54e985c3de0d343f2c15fc1c0b519f390091fadbcec315011511aacd6d4d540f48facdb92ea4e4c1a21b2b81e15826d1f32c0cff93c2221a7490855104bc47e28fc4d97e80c729448dcd8b1b798cdb476fd3bfc404a0299813b43f74b4e9d87773f32ff7bbd7a65fa34bbdc51d8ad466a359506e51db1b52185bea75bc6afe39a608a5fd9e3f47afe0b7097736c569556595a5884a43210301da4ffc4e786722242938fcc74d5dd59eac5b67889b06d77bd1c854cd3bebd5bf44e6ddf961cf6f0b096e7dff478eb3807dad88937eaf9e569c1b1c55e8732cd0ebfe53f789f4ae8112b0ecaad23866032d5ce49407a3284ace0ef169271ec063b503c0e65c83b9fb1f79f8fedef9654845f20f0436216e61afbb821728321788f2aa60f699583563642caee02d789f0148244f38920ff1cc22363d4a3bff2325afdd4ebf5d1b1337733574d588822eb03138b727a74a83a4f5a840263f7a3ca39be5323594f1ee9832f8f3f6e19b28107e2f2c52f9320d0ca9e9dbfbfe1f860e2715a4762562300eb937218bd76d1322e04c73101c91de24c876d6c278db35cdd2ddb5013e02203dd8d10a445db5cb49b7b8524fc374deae17520e829c589ff535606cdcf6a2da475c410020c383fb893a61baf56f55eb82d2b0afebb3f435302cb66c868fa2134dae9cb244881c0274d0dcc367555ee1735d80b432a4530982e3d9518761f995231994888ea08bf627442775dd30bdffc9666ca1ca332fa278a682404dd3c5325728db7c06d77341bd65b3a664a3fc476adbf82270274b6e0e962f89cb6f1269d97c310f09c22181d861a351545460a9eddbfd1151fd450ba4de42001f1f6dbb92e58903e73f7df78688cd0305d458149c3c9fef130466849e286d22e86baa55d9e3c9192902d6671082bb1e9f7285307793de2b2e8064db913e63bf5caa8220b342d273a2a748291bc98364138fa306446f9e41ea50f2687aedcad3ba0094dd1f36c33c78a7ef0b8cea9ddc3697c771857cb1e8781041537ba39df89e5f673520a181d70cc5427b0e005894c413066c16719c3cf91558e09a6533e4f7874324983b3fc5a0e1894ff7e0ebcc8683c8cc82dda655c767691a550669e57b229bb4cbf3fd34f2f9a8b4125037c2a661dc22807bfc72ffccfb1802842241ab621582866441e328f910948cc59d07a2c9026546c5cef67fbbef1428c7faf446fa89baf7cb9c6d4f14e5145f083435e8ad68a96a448209c8cc41beb377a95595c61728111c6985c9d722ea66018aeebe67181001739836d0d8c8259006ab2b9f28883285c6930da6efada49ec03653af78b36ed0a94d3f77f084178f30b4733a9c403613cba0fbacb40084b2c9bd6ebf80f2b49f201560e9e0fce9aedc809ef6abc34f01a105d464a6ba1a0b822b82fcdc467a7975316076f9ce0ff0dd95bbdd7091b4ac75e55aeb595f5545addddd55d30dfdac7636f086d3ddb5460409383343675812fc6752ac7ca96eedeed4f8a9a018814f24b07cd8e8281ddb276f90d23093c70fac0492bcd00670d3e78454348a889bd65e2d618b68056b3914f8cbd13e191648ebb5e1d92e519419f485ef67b813efd5857b61047fa7ed05334244c5be51a50114bc131382ffdf2022e605afd621bda84bef83d69d40c53e452fb00777b448dde8bce877804fec62e36c13b22e409680f5e6a7c203b4c4e140a73e59207011241d5c46e6fa27716416bbe00c5e9e43e6c7908c3b262124fea7966c71ed8f288d7dc9bec056c4f4e62efbed492f863544402af1963e6069701c56f8bf623a0101422e30c15b4550a53304bec29b1068787b2bfd82781531cfc7023322c72cd3a7f4ef12d536ca5d7845dc2e84540776f997c430ede6d6c5e4cf300e3800c63923e67e8f2a484ee8dd9b64a5212681bc751535a0f76009b7670254857f890c2d89c6465c03a80185d6eec110193c546553f1cccb4dde2e964ff48905667a4dc90901aa2af8f8146d239421a57337a485731c347169a998ab0a556196f74902b672b606844d955da52fffb3c59e451b04f13dbf8e881b8656f242712855a63bec06c6d0ee51cc471ae341bd4284a02a23d0d254e7b575dce2b5325eaedbbfdd98dc4b923b57a215835a44a830201e20ddd2e4285df7234b7484bd704a6f4c408f192eb740ec9dacac3b7aee4d862bffcd78016cf89bf86be9981dc9dc382b57b3fe1a0b66bf05935cc5ffcb8aac78baa72a4366fa3374a6588f73792b7c6caca808268b8804d7420cdb814173d1eb95aa56269a98784b62ba411290555d73570d1bebd3b91df0570cffd61367890dc654890381554fdf2f9138d726f96507ec371905b65d3d4fd24ffc2b988f81eb80c70df09ddf0577c5323a3cc527a64006af0f00a93f49358cb7b4d1268d26d5f34255af49a71640bac1dc20999a14784c4e42ce8297f4a98e363512b6f079ce15d934c1fc42564f84da8d5a4277933523273e46a17991b3c5c3e421773a0d09e694fa252d3724a816edfe1228e13b557dc4f0ce34101ad224a66cb1aaaadca824e53c8a6c860c093432d450f8dcc6770fcbb32bba3ed30f3e7167483cf0887b19d2e104ecf0dd9103a42ce3bd3dbc864793c2f0aef980827cc8a009c9f60228b0a4643d2a599cd5ca2b8e079872701df6bc2c63add9c21c4e8a25f6d2d7f901a30112de81ec8bc15e23fe9583cdb7f9cdc770831a7ee9a868f91ab4a5416800ec9c193598a611a5bded19dc25f72ca5320d9f1390645339b04287b963dd625188c8e2a69dca8fdb6b42c4f408f6a8c755506a2a11454043b0eb09ad0d117bbe4a335dc0a25c4732b80c34e5373eebaaeaff18a1792d94c72aed200b0c6c5e160ab1f53ae81fc8429b48444e666c48de28278d2c5ac6fd083fadd598ba2f6401f255822f390c0af81895a51dce868dc4cb1565c42665291473870252e1d5366ffe12576b8db8af00506198a4f6276d928c3c590c66e15f8a4545e114bdf6e2fae5362e6d529e2c106a9953bad2a7d89dc372b2467200bece58885ee6ac1944f11b4fa0050aa07931703a04ffc96572a305c0637864d2c76196ec0b19059b607eef239cf01c3e206980e21c199ccb6ae877a78ed97fd35debaa253983feaedd088848efa56942de1e846c4b9a7c432fa6e5920e8fc06b74846bca8dcda4d73f68c9ae0706f1e1d0d6bd0c82dbd3080f273b2f3d2385ddbe4b2f626b63aa9520dddb8a35ae9cd15c76c2411ec20ffc8afc9c07d1c368a382738b5c1d8324bb04a4e98e23b79f8b40596e59809e93a23016fc65bec2cb1120164c63b3b2c8e4b9cb1084c15272ee9ad6a498ec367b00a9f1ce26326edf214758a41aa2e3453467c38908e6edf04c4fb561b671feab66c55f2bc3b77b8e7fc62ea94d8aad9cfa07ac0ed0000e560acbf1cb8f84a54bb583af8d6b7e69954c6ae68877963c675babf254cd8f091f3a129462a376927fc0024caef541f45020125ee7301181f552010bb449bc1a095a34e88894e887977544a890a1fdbae13106b2375f30e60fc133348815644c92ce400cf1789286ead184ae714a30f1689c1833b0127259d9e05fe59d6205f47d95810bdcadd8533bdac8b9c34207242347a020f6063e2ce068c018598e6655f778659a25098830d09c898da9f27b5234d4f7d39de7f31bd7185474a65e3e9f46885355ff3324fb4e5bfb03c7504974cc6cd441443f700070c5bd2fcaa7e2e148fcac26002bd376189d52081c8ef6b98d7375d42487246e22b63d83036f79ab5a94a233258ca8e534bb29548a0a4bc481045c905d102d4ae87d69416e8b459a61474b9019d4f80f0b12314a683503b9085f718e4084dbbba7de02087222117edab46f01b7521efda1270b3e0facee23d228d2d4a9772667722a7efad2efbb3107e1211557a1971a2bd274110c404fe943fe5f2fc0b45636610b6e5e5045f1d4e71c0a8a1672dfd247314115de7e2df07ffc2b116f6fb66557f374b3b6bb293cbbcaaa1aed63b06b74d7544b8081fd710422245e1410e54a2d0b1084039b723c6a8c8348ef2a11bedff22bb4f4cfbebc270c4c250daa1477938a71727f70f6778a564ab8ee851971582d229e6d4649a1218d48b6843b939dee4f335a4012acbb8f43d2c5c7a94a159cdd22882f0d103232d87090510ced22948ed9e9ad8488f3d54b8bed7e5021cafe84f48cfef0513b9246be7ae58d9531e07152c0b965fa2903e6115497394730495a0f65c40ed3a906fb7467ca23ee5a524eb3c6fae70fa96f95a63123fc4077903e450d835ac9663b62d561853e823c91b2d1bc1ff12e3ab4a7fd8fca240c7c8f3f7b57dcfa0a34b7e8527e76c9ffd2fe40407a9a44c21e725dc5601fd3c6d55649e3b7a1c20371aa19aa2db2eb1fa9d713dc5a517db33109fa68100d4dece10da595953463b5dabbd7eb37cd7418bde51219373edb91f745f1db87d83c01dc7a2641ce33362ca4f6689b13a3cdd098af9273509620591e31fa3d094a96e0428ad1eafd27cfbc60ccc51ff06e7d4e1532aad9a7f0e6f115374ea02ea3ba196a523303c5ed739f0395ae6ed03364f0dcd042e0a59b3c7b57f9f058d9ec122261744137d562e4bcf4b82c486aedc690402e14f841e465c40e2817cc4f75eaf93aa7df1a036971f02df1179380d284709643420079568bcab9e04e0cc56d41adb26bdaf87079e3ad7bcdae582e0cc0153e1235f8fc32a4ac9dfd1099db2c78182f710925410c8693f3dabb86a2d9575bea9f9d57bfbf528e5333072aadc856b241eb38285db484af11fbaf029406ecacccf64b625d33fee9c078c4b958392020ddb7889eaa09856dc3d7120ce8e8883c1aef1c0db1443dd89c7227571fff5dab5c8fd3b15080a8542ba90e2a0f8340aa182b2595b13c8dbe89887769df770203afb4b4a5b7b7089a2cd69b8958dbcad22b7b4531b0c425f368a7423f1d93f7cda1a56cb4730f0cf2f76cda5c77358cf0142d84b731cd3d45bb1fd794509b58fb61100a3dbe475e615cd1bed1bff2fb45c584f82c6e89d6699382d1b75fb17307ec43259da0c7106204c64cb44c54b410fda495aa4d3a5fef6751c5ab1155eaa697be33260df1f0593d5f856b900c0c5367b2acff6203fcb34520dc53b5059080658668a7494933901a48d353696b2720c99f153673ce35da75f490772be4d86a6223b029bb43a391babff282b9f621eec39567b4057396142cd471f90cb10ba1598185501bb1334eb468d16847d7eb1ff8f6009e62e6e29dc2602470a127e1dfbea82deb14abebd20fa30b151e0ded942a0f8251635704b2b1f08117d98275a83afbf4393f44acc951c4c1729ea918155b47cf3667443648b071cfbf4f81b50bc51dcf463d0474045a9cc7bc59208cca9a0e4d5fea1f4a839e3ad8d332762b8b370175d991b7075bbebb0fa67cec490728235510a278b80ac5d75d0446cf27c41c040246ece93bb9b84b3ee363bd0ac49e692bd1dc273fd87d508e24a4edddd6e4de5ba62453760b3d0cb20b5ff2d490a963837eea597340c57e7f27d98e84f4cf6af40f811b6516f645b785f4acdf4b9a5be372993198eed7a04c249a534fc8b091b2e711894616489eff623d356e7c7f37d9f8d2c2c8b0fe53c9e767a1a18da7e085dcf81e5194d1179fc91729f8ff203d2f8e4a6e7ccfffa8e4cbd08def7925e40742b1e2ffdbb729758b2ff692d36cfc8d2fdb6673a0f7ba17bd7483b97d83fe8d2f226574443264e36f8c44b1b103268bc872f64cf6d818bfd06792022ace31b3a9676dc3c6a8d44a9da567fdbd44234bffcc26259f61074d761bf5ac8fdad64afe65db848c2818d9693d6333dd9601194398b7977a160ab592d3a66cd94ae2053790df15562612f5510c28402147a8f9b7d2b46075fbfb8a1d322df011025347bf8fa9a3db5822d302fffe72024d25a7f5f7e441e84826ce3351481145f2887f23bf196ad0d7c7b64d1d4da44b28d2b49e3cb060bb499ca319a76d5d14fbcdd44dadd44baf5a146b0068f1b18fc33e06bb8ee3388eeb3aceff76c4741770b90c154ef7e324966f474ab3a3a4db383a1b857d3db1abe77002ab7f1d591ecda369f843fcbaa072225922933ec389f5ba71057606d7eb9ef3c6b27bffb2c82dc2a5bec5805e180631d8bf0d7145d39a32da242165cb1025c05005431870c8fe9f51327a8a655dbe3109630c9b73f9c6646a4edd98a87122acbd7c639204dde19d2a6b8b13af4952d358a9c952d3eaaf622adc9a44d6071b88c95a3f56ff794777eb5816f1b9f56bcf6cb54ec6348d6ff588a6f1259d40358dfbe3b0c0e4c509e49152154850a04032992a83891326794292d3b89671841189c2936adb82d5a5443b9172c291902a41cfe532527cd1c2270382a367fcb49be37ed92f03720570bf396750f7cc69ecee2cce833a70b2260332c51b803bbddd89cf198e76af7550bba27ce675f7a26c53778f4d4a1d8c7287e1ab1f8bb2c476da518f0a7d50abd5af422022a8d72b08f206fedcb3bc3b265660ff7821901088084aca754cb8739496d179d597f0eab469d339ddebc4be9476ddc81c9cd94e2b6bf5fcb11e9668c5ae5de7e10fea633705fb879fabd83ce3be9b3eb9bb6737cd6233cab3d9cfdd45adf507b5b95d5b8807dd46c830b9e5ec6663466a07a5225630810f24103650854102136ed090387ac6e3793dd7f3b9def39beb3df5be0271bdb7de094d5c8f49520f6f46852d6733e79514b6ac7782b71be3764fbb9b11d4ed962cdd58bd1c4797a04c509a047d6b74e9ad04272e3501874b7798519bedbad35ef2c4bc99d7d48d84166e37173103125fb515b453c775365f6c596f361c6e77b5ef657c2c96e8ddf309527d5610ef6b4e5bfd1c328d8e30e80b70165be5ae56abf7d140d58abb5aadc0b051ab1533732d2ee1d3fb5d61cb79f44cae64413c25df7bcfe4ea87f08e79577f01ded1fd8a7ff5b38a6b897734e0ae1e0313a8326df5f60ae6e2ae9e278751e31cabf7c42ab2d3ba709c396da50383fda7a0d8b1c4d50882b571613ef629a7d3f53cefeb31bfb6be1b87386da8eb46224ef3be882ced5df5cf825aacb3a967dee78dd3d6d636c1cc313df3fe6b8933298b30b6a00eea99f770aca5b21e8fa6795f6b7b5e04664abef477e3ec1d4816a4232a22bbf149efc33276f597f59fe8dd668dac2a5b4416917776d7880371effd90ce9ba217fc0e59ff89327044b28190d7c0ffe31088ff37d67ae67d2982dbac91720e6addc31eff7d8b20f4ff58bdec4773b7bf88863f7a649e8900c8bc34cc80def6fb2c917efd958f9ed5f78c3887f7def760a0b98469de7b3d3d3a3a61e8bdadc2fa872112b6a4b567deb7f7b55a1b8bfd7b4f7a1fe479447ae67d8f437ae679de74fab8484d61bb5b670a3b9178bcc36f7f03aeff171a31adcf7ae6346885810f1ed52bb8a067b220e0871f8e4abed407471b7320591025e08763cc69fe65d1a514031f3c7a26817e19102a03d2815284bb7a769ae18fd5653d6b04410684459f35faacc6190642ad00ffae07ebf020ae9f8e4f839c49bf3cbc0257478654ecc7df819a7227caf86b2eca38c6c3d618fdb2b2e0d87ece40747e19577d74ac81660b484ca02e7d1c411738e598615275e90b355093f4b9e66abbf4416a0685a64b1f4699997f7819716ebb1914d05c2ad54d5ff8d8876dcc4e8fd22e8b8a6e1884ed9fe237b2c81ae90ab3b9db6b4305d51e0f09f1e0c6502d5b2bfc696b20be02e9288a8b31e6fab3d3182fdc12bc33a9cc1846b79c59e6d2640a29978973bb334c1948d79f6a9452ca71052c0e79d0330efc58347ee7abd77969a3fe508b2dadad16d4b3e7ef302463ad03d5da5eaff5ac5bc1cea32aac078a467a5684c8073de344f88478f08d43ace79210b981e37acd80bd5bfa6e8f9eb48458d76b060c89efcb520fc6a19eb91b2ac4150bafd8210f7ae67afb3fafd073c422fd43dfc569e4b2e25caab9bfe54b450f721a0b475b329bb02a41495382953652c268d982f4a22f51423469220b335d7220fda7cd7f1ed5f77644d9d0ce7fe9dff922928628139aa4ce17919f8bd3681ecd273ab38a536966e9d952cfbcf46c476452e74e5b151b547b63f9cbda7cca691d7e32c296f6520dfa6dcca728f39f398dfabfd344998f19d01b74bb2ab037b6ac2c38763e4d12b8a594d6590448abdf222015dff7bf298294e3e66a0447faec596e2c6397ce7f4abfe97cf7a1d60a36adb68e1606b3f4bdbb9cb76bf156e0e828f3efb9e5a4742c02bb9cc38ee9764072c1f53109980741d07229801c12ee26a126843ec45631a7f15cd654f36af3e5abfdc3ccdc014f2a266bca963400b7d4b9f4c34b9f63a018d3f827a867f3c31e3221ee7fae00eed852585338ad74fa28fb41653e39cc800d336dae7f5cd1ee9ec575efa27763759a103bcdae714b29ad3a3b701c0569ff709c531f8b5c706bcf2e801941e79c1346bf9f07002bf4530a8381305abbf8dc9d79ec99f3babbbbad53503ac5cca06f0fe7e0ef3be9734c47d98f9272dea6f60f333ff72c03761f15503d7ee7eff8b9919f8e65ec7bc238077bf1ee2667f371e7b3a482b88984de224177d229c5371d69fad774ce3941ea600f7f5a7f0bcb8d948ae5fc6f2ab940e66a79b49f0d236c0eb452aeb3b0505358d6ce3044376b88d1e4564b8410617471cb1a1a0b5ad13ad82f0adbd374c2b62e970983cc741306936b61675c2e138615cf210c24aa3048682dd66ed14e582b0525c1be9ee891056ffd643f31dec5763a380f5978b0b0cb65c0403203060974056bb7486373d47492ed9a6835b69660a2b1ac21dc8c11a30a8716aaba3499a173a84aaa42aa94b9daa95bc690a8d6da5aab8d223e37e80d0b29c8b03451506b6f8c78aaada09542d5a385172ad4b0f224ab35362c3c3d8182532d41939d18623e44d149824a4a43c376690186b453ab5a545161462da856415016a92c533a560b283954b0382dbcceccd8c2895dcab1e2c82543d52b4d0a2d298ba64948e5220205f0c6507565b0b52c1926dfc52215d65a1827ac6a2b68abd89cc65fee94a42d4cae962418a05c294d4d52b85b98ca6441020ad78a129c2b546d52b854a29e787295ce98e0688625a7717523440af70a92d3b84abd056bb531ee72992f9aaa5301d2d0a428ac88c28250b40a162c81ab605f4eeec47e3b3492756d996b6c2885ba10850bfd421450a2386182615763f8962e9c06cb519dc0d629bac47e507411760595c60812a0b88101c5081ef00553a5ccd5ea5c2e2335c68ba95bc67098ac3bc722e0b53ef773f07e1c38450be3a77b80cb41c0726a05f70b6dabba603776bf1ca8fbc1d829a653d2cb73e7580476ed0e3845bedd8fc68e0e6cc68c1cafe3e87417643c96492ebf8ba114e7e91aee314a8363dfa13a1eac7a10a533669013cd61bd3e0bba2b6c852ea63fd46dcf66157c59ff725eac9c953b8c32d39e554fc7c16e8772de153b9fc69899dddd3d8852e7a911b393ce3927fde999053da70e77e74139aee752194f5b40a7ccba624f29a5b3a9831fa8cd9733695bd0b3a78e575b8f0a75d1164729a53476e9ec2ae831e59ee338fafde41ceeeee08ae551a93516b37632b347857a6037e7c859d03d7bea704ac7d2dd9dba6acfdcdddd031fe53caf2a0b8e070eea639f150563ab1779c77cbb81574320542cc74b6d776fb9108805c41fdf55f63d71ef3c13754ba63a6344a7c9ce57ea9ce8bc6b4309c30b1f818d5dbe2d1151c5be2edf969abab664854a73a51587a30a83ad71f9b664c4c54d121824ae3db14a194aadb666e17d395aa559a1637aaab5faf484ab05d52a08b261cad3c10a256f70ea6a55ca14b761a93e69e184aeb682d6cbcdcb114de35b565b461426a59b13372d7c89721ad7da2e148ca88862850a13bcd8d8e5326cb078c226ca8a5bb593c6fe6b7316148bcd6a352a2817c8e3d39626b135b02d5114c165e9fa8f311c5e8c10b3644d0d71962e000494119625bc10e185afa045cc6b8b2d4c06b8fe62e5b2420d2d4e2cf1b6bb8db89d658bdb3cb7bbbba930c02dc12c4a542d5eaeff8db0875b2d5688dddddd3f36e805b7049bc822c5e9fa5310f6f0ee26e0d0a8dc63178085c9f5976199d2b932029e89e58a93568e1bbf8254801a31226033b4b9dddd1f8b612913d298cd00c4f5df097b786c4b163a162060062334b12231532421c4ed043558407591963565b88102e9062dd690ed485baedc7e0cbabb5d57aceb8dbb2bd9aebbbbff8cb0873f54f7c48086013240b9fd3119a66e7fce178d8902cb161be0980083141650f1e2a60913ae2cd1054a112f7e853de8b4b19f710c47b7df4e31d50215292c249139019c2b965ca9a2061bc63041baaba094b4e3d3e36c72603d3e382ab062a5092b5edc7e1bfb59cd15f6e82034a0090a704b1c545a38c0ed1b955b1519aa70d1a36bfe4db4d4d072777710d6e30374fbab8dfd9434b71f9cc51963899a2e61de4c654196f68a3186131c23a0d06051854c618b1231ef41a3644fc46e590114495392b8909282142bf836e506830fb76758526345dddfc240e5fa33d4f5aff6d62394a46013848116e605bd50c56bd1972f9ea67c31e2090e932c5734a9c0c31299386ac86e7f727b86a5dbdddddd13b382612e20dd0a5cb8bd00e5c678862877f7353f36b8099f16c230114585285e6effbbb0e4f6d399bbff10dfe2745de7babbbb90283737464e5f7112b7c4b1c40a41dc56288205292c748184c5edef1a0c168618465cb230d1850f0f8822830e6a96e0c1cb15f27dcc772758c690ddeeee665561cbd8f58172e5ba1337a4216245d8128c01b1d4046ffbe0b8fd048cdb686ea760c4edb7586e7f4c051eee0d4a0bb79b8ace0550d13dbcc359cf3ff68cdd5d47b9ee2637ce5bc5c9016150e2b8cdb7073c79d03f2597b9fdcd0fe01d52547c0ec214c03b3c870d0005301d0682b5773c7b08715a7f5490bf106f162fb580c85d4f03053508e31d7db90c2ae21cfd2e2eb6e4a80ffaa73d1852442b655bd7c28a861a5a629eab56adcbb7265f784dd42646e0e6890b43a869c225022d98604b1546534d6150c5c8d0700480264a2618618210b7a937604c81c416494e609001a389362b4781474fa8265f40b9e9616a8c0f17332ce164b312c5153fb4c82c1d11fa518d799180cbb726656ebd7c6b32825bc69ed87cec535aa021e68fff84dbef8ae21d0ab83dc4b4fe3ae51b4bcbb3cb6daf7a2cef59abd5fb4bc99613a9fb22b2f52deb4621a3a59638957e78bd6d7d6b24fa22e3a0f5af1f6a754fd41a875a6f47a2d6f8484cb6be35ce35375cb1658a09466c36b2e63400b8c0e49710583d8084ff3df815012f2b047ac10fbf13cbb22c3f0f6e47e4769fe41e212a715cefbf1518f6f0efdc4191ef478ff85dcd27f3c81ba7d19b2e0aa69e713fd782f5f76173250aaa137c886a52c49466e904b715aa3cd1a613bbce3be69ef54fa58934935cac96096c300606e13aa57448ff34d03c81c947118e6a52e5960c877aeeeeaf415f9780734e3ef62919641fdf7b2a8250cbb8f3e96b309f8e17dc3a96fe21cc4bbffb221741a17e21fd3c7c6cf1b10fd1081620918313f9c59ffbfff1b13fd6cf950b8347bf8ffe5a50961b98a524b690800826c8fe7243e1cb104da8b238e98f1161220b962a63d06481e2a06aea8423c0d8e2099208638471fa410d12562c510123b6f850556509a937fdb17eae2f19ecc789f54c1a2d6c643721430c1ca87210d3448a871f94c0624910627c60c1fead529678b191b63fd6cf5589f91ff7ae25cb6af9e8adea5b98d7fa5abd5668a58e21ec60e1228606374cd848b0068a232dd0b839825af3926287d46a6d2cf63f63a91a4b79cf92a2993c67baa160bbec74f976e4743f26b27c43e176f98602983b5ebea1807487f48ff7f33f2052a47f72a6ae9bee4ea69c237887f7b3c981603febbb96ac1dcbe9f441d3261c1a36d81f395fc7399936e8bebeec47f775aac1623446aa4c9c273010a2cc0d66a658f2420b930def58c23ba27a4ea8fef97eceffe6114c4c93691ef1e4eceb82c296478cdcd50842ebfd5bdffa722a7963e97d9984ded5b7ecb55f6badb5e6884738e76bce1802bd762c8d5c10bcafa5915b5f6f73d8e9b74a3b26a1d7f5ae91486b1c12126165feb2fa3cda9ec194ec09be6c6182282a18a8a64082864a9c2b2cd460050a8f570cb6bce0732d59ffd796f9d4b4f9b53ed9d8131cfbc43721c448b1c20409d6984044820e5a34bd6042959a0834d08c9fbf5365cb2217dc243d9b457a5693fa03233debb468c00460209145102a7499d920c6042a299449a18a0f9a369fddd46974e79773f2190fb930403347542404f1c48c9932264c1d9d697263b4c47c32d289457ad685fdfb81164050c1e58d91192872b6d1028928553fdcb4d040ce9f4fee23c7856da630546f9cb0d0c55491162660c8b0a2855219241420872ab62c3b64f10517575c1184152c309489f244066af022840fb63064c842ce22bcb899828a2954472e90f3871069a69ca63185898767029f418de75c625f0f35e8eb7a8fbeebbf09d610ebbb44efbadeefce57917b4fa4ef12fd4e29071af22342cf3aeb605e6ca65ee394727e62ea5e1dd3eb4582d2ab6302d344c6d2989e0dbe3aa6d78ba1507a754c609ac8981ae32f15ec7c42430dbaa73d6b0f35f07fbd46d641b2ab2fa78d055bceeee7131f3b5fd6cb7ad6ce043a23fdd38d463aca932f71726394d3494d7d3ecd30706eff4cd33ff3c9dddd4892468a2242b39952fe5694fdb0fff68beeb7d3344ea69e7da8e529aa6748f535bf59457664cee92deed945ee4327cb7d39918828f942e3794622b2203c2f7bd9485444f28cb1779eed3bef772736b2aa6ccf53f0344670e7679687bdcef7e5c49db10261790809e2d113b881468c269287e3e197fa1023d0b32a4c4debaf33c6f135b2e959db2a6cf752734e4a458c100f7ad6423deb6e40144ece74a391243d6bd047cffa2718a15a6df85233212322f44f2b9c4d4c3c2f0bc2a3c32041dfe1908d27d2c6587357596f3896965e7eb20dc99e67249a5e2895e144ca461f11e89f3a4e309e38997ad6dc65ded14eb95b2ab94352e27453c54e2687b9d4a4ea9f55fd534af6fd350e83f0780e83c8dec64824eb81e4196be1101701c60c4e1f8fc824052211911498281bc9f33d225108c8f08194fd37b929d540f30629becdfda4916e73d485fa87fa85c489739b491e77f7300847021952f61c0eb90c462cd9c82007e2f9da6d9e1853ac5feafb8eb0fddf9cdebbd75a2ba5d5dde93f3dc0ed91529a0365cb22b0db8d429e5e3a0afd9303894ceba71dc017f0b75fc8fb85385587c5c73ee5ebe9f687515afa3e2b4e201b9b645eef0fa13ebd3f581f8ee5bce1cb44d9906cdae2c07922655f44f288b2219ea7e02918897c882079be88fc78c2ffe651d3fa8fc02afac36f1d9defae1b4bfffa9e58a70efa309df7b0478555d853711ec1749e75743e1a3bef630922f50f12adac6901ece9581601918ee897f3e8499d1694ddd7a943e775ead39ee970cf7490c43a75f8c344d6d4e1df61067e69fc0e8d9838abe01cf593e951d1df4120ac441725ba5c1d2c6cf94ae2f6cf38334ecf7cd671fccb09a76ac601c19fb4c5e99993b15d1f2717395ed809878b7e32a7de279ba3fef1714af16d775bffb4ecc7d3f57146cda7193258216e7f974560f7f54f13caa594f3dd3f859843f08e4904ef288277d4ef9f46f00ed8f7cf237887cef74f2478c7cef74f12f00e1adf3f93e01db1af319645b7c6bb484524b422e1de1391788fa4fb90d447027b243acf9c634744b2f3cc39688848683c738e988824f6aa21badec5d653be34ae8ec81726f2ad9c4b94f953993f53efc836c5f612cc0a1bba75b5e8d847b62a6cf8abe7e149e65db1530d2e9c21655a489e9d55ff78d139c1aebe93fcbd7bf7de7d2c3defbb71a8672df3808fea01113e70e352af593cb197ba14ac37cea5a9e4855dbd4c24eaa86411350449340217877b26a303c9f32c31961b874c1d1d342c00047e66666666d89335d3c2ad4851925617049f40db486ed26ee744197d4e46c70c486e3c0aea9acfe893dc7b7f142339ef39b1bb7e6449ee3dccc0bb3e86e0970b08b8efc4a34a72dfdcc829a185166fde903566a9fe8398002edf7ec072bfcbb7304c8058719d47415ec29bb71178b93c97cd2c41e2c62edf7878c303d30e5cee177ed997bfe7a5e276972321882bd280cfcff18eef79ec2e10ee8221d00bfe273ab9475c17fcafb3b89f63713f6ac5fdb836f7eb40296e0d351839baf2d56ad5abd55cad56dd6ab55aad3c9e565994e57e7fe361cd6589253febe9aeba58bef1e074fd5725b7bef51bb44068fe72f55d587a1f7e2bf4c12383d5f758b5c6927ff5ab6f3c8344e58223738eef592ce7adf469cf388ed2d583b07a07e232e328571258bd67b0fac6929ff5cc12fb57a57ba0a832d36f766aa60b7f294936e0cee7f9312166a55ce79de7cdd0051732486182344cc2d860421b29e09c20660c18b7523b8e7a0541170871db610b0803ebe5db0e31543163ea2c95d4d393271eeaca46a582102a64112285aa1f3ca030a0b0d0a204d5cb59132c985239fb40a71b3503c31466924c3003c3115aacb0c0e10bcf0464d01c523a3439316929c103992892d30f950a0c1028bc66535803b0915122892a1d71cbd9cae6468b2c39359ec2b0e03ddd30c5436d2aa91e8c563d5cf921ccb1b96d8713a46ee862c48aa98c1aa419948b36a55e03e9cc9da05315b79cdd7208e396c3d39ce01a3bbf35a0b7a508e0e2db3d151dc89f8978c7b55615eff8b9fe1da882edee27ef587db953b67a26adfbb2bb7567c633f98d43e013e53c38ca58b47f2a93bb12bddb610f99d04ece7bf83d117df0bf7168e7734622ff9d5f89f5d6e98a0a67c8581f4482a28c350ab9d2b8a06a2ea823b38ccbbd275a26fdc36242fba78f3aafd54ceec712bdff6628e3e0f5e04fe0f5e028ab13b02faba38c03f0777e08fc9d91e84b7d22d74e6b863d8e0099b77e8f9c6789dd65e5789525047e074c824ae8831f641a21068adc1995f887deddf921fa3ba38c35e42f638d320e66fcce0799f13ba3922f433b9ff34a68fc8c0f92b3c3dd6f47941d41f2a3aff742b03fa2015fd677c024ec775e2644e3651d3049431664e75735a779ddaf667c8ecca321cabc51c6018dd7f9203b0f1b95c07ee77546255f8660bff34a749ec633993303a6b3436386c8644ef7751cf20fdf13bddb39b1d35c223b8dc996c8242832190ad5ba23ebd353ebe8833f441f2487fc65de4856a775573a203ea3340618646061028909b27b1f0e5464dba2c58a1cc0f860860d59b4044a1b3143309d41820ca9c3062f360881e606259248fafe6051d761095e5aba8d88e872869c2f429223dc8837d5b4191141687e9d1309dbf76892dc1b9de00092fba3497a6f89be0c71ef7de78d44238011a20699506784182548ee4570da1c858c386d3e3bcd5f48cfe67c1895e5be7d2c2d518f1c6583192a2588e28964b6ee4fdd0b949d73b0b119cc07b43d5fddbd67a30b8c6d06fb87dee6cb21c5d13f3e3af9827ccffa6ffc1c6c3920d555ad9ef4c98210cd2b9848d6af3ec9bc1390cd3700154964002af2fbd5cff96d50455414412c45014206b2680464c0a084449821823022b7c0e2053171a8c0c0848ac40085a71b94bcb0820a2cc87e1687c3d39d5dbee1b08403d5e51b0e5237c7e51b9318d7beb86fadb5d62fbaccf5c674027ef2daab3491e370a508f204281b6a706a2f94d2d87c2a0c972724c88f2eb146852a0e7491d14c99e2886cb1070592a8c3f4108313720430cc9935443530e40833a2481f692b607eff60420f51648b0670437e1574712ad1a04413d9a20f11e4b7a26a93c4eae20c9a339f910d51648bb228c80f045d6c1a72f09244b6e8e304f985a08b73c9842826b245bb84fc5a608b4c4607d245a24e0d1167a2c8119cec9980f99f8bcc0c626c648b9f17e467cddc82787a812eb2102c5051912dee38437e39335a65d13d0096246c648b4c8ed0d369f85a1462ce9e453d43288bdc7b650410fa34083157672cff942a1ae2c8f694298971ac5f5866efa3cbd9e0dce7b03363e7730fdb83b34235da30b1e1d9755df71af4ed5e533aaf0525c8907039296ed8c53ef71c17b2e17e7429285977da338e653c663044135104780ac240c883a9cbfd646ab3e496175caeea4acdeebb14942e37e79c34944097829258bfc30dea8719ccb19c7fbbeefbcbeef9a36033375b836eace3cca7671c0fe7de87735f73ee6768b17cfb32e67ef7dc4ddb13eeeeeef475ef684ab949bbfb09fde9eeeeee66a7a9fc94525aa78ffd85bb37a5ceccdc49dfe7a6bbbb1dcd57c7e066116d41cfa9837bf69ebd5bc0b37ebb8a3501825cda4cebea73d72ba6756fc12ba8ebbefc8efee8deeeee3e99d5e2c6d993e7fcbc8cd9b7bf7412ee9c73cec93b9cfb865b56126e73a2f7d4b339a38c8d7370d3d96ddcb8c1ea98f8d828d3c81c9d143413efb0d1751dd7c3b4a05f8712ef293efe668fb67fb81f521f3b1039c98ef3d7ed27a70a441fb3103fa4b9fc968a356297c68f7aa9b87375ae27764c6b21b9fd13a4549c713f0fa462cefd2a48c5d7fd562015edfd5820155df7035bf703412a86f70b412a82f76b8154fceee702a9c8badf4b5cddef0552b1de2f07a4a2d7dd0f065291bb9f0e48457abf1d908a7e3f1a600c94c568ece8f0f0b4e85876d77f76e26405783fc723f3ef69c1641deeedb79f7693f021a19fa4debe1cf5f99cc3431ee1cea7237bf34fa52f4fbcb8e9a0adebcb98155d62d115bbd62fedea4bef093e4b2cebed0b8ee52cba3dbbddd71e445369264da4795415876aaa7b62a8db9de982bad9ed70c4ba31d651fef1be8a2cf108d1adeeb7b6d789653b7512d599a95475bba7ee7978774484eb7d39c211ef7a4dfb36d775cf608572379f8b1b487ca6f97ba27341b39bbe7ff380f013cdc753243fee2f5528b89489025fbcdcbcc479c1d23b479ec0375f1003cb9dcfad3897a12edf6a58ba9f8bd3813d7fc8d1b208ecd60f599e58c44808fe05bfd65c57ac4b8be9a569dc735e6a48bab4cbb72e6e3478fd1ccb0b0010c5e7accc399a1cc8c5168a9db3ebba2e27a79bd35f625944478489d569dc87455899f7ec34d758dacb4f361b29f346a1d9e434eea793d3b86f7df8dc774ec4f00095c58631481046110e4c6080c325892d504cd17aef3bd11b79625dd8128aedbe7cd9eb5d3f2f1565afa76fffabf54f7d4fecfe7bee71f8f4cf97f3dce3f8be097edfe7881df6c8f96ffe683697e595de7f33de8b6e92be33466761eaf89e874fa6727ab9dcf4d233ee91fcb0630f57f82e916f4b2c8bc0a697315dcea5cbfd6cea64b07f955853c20b2970e1248a0f24f7410e8463890f5f5439824b123190dc3ff733ee75cab0e58753cde53088800edc0b0d319284af074586847ce0bd375a8e2582d0acef39d40008eb57af01eb1b4bef4398ab2fea6789fd9e17eb19f7ae2ef62ff09955c0d56e9472f5cb499a5bd6cacfd5cafab1ec5a6bad95c5fd4a3c32c2a52c916f157a213c7c08395003902039aff5ff566e2cad5dd52a2484870f5617de732cd628c6bab0657deecbaf653726a1973ea780eb44f38d0c63a2c811c023294fc82ff4bf2762568277139eb8c1cc0f56a6c0d9610510d4608554972653496390fe3fa35cba44e9f2c4b5c137c14e9c262029e144beb2d892a9849e4098a38c2ed97226d53cc96792d370bbe54ca261ccc73a4358be7539e2de5b97db9d404cfafbd3530540147e32424555a9a8849e2cb3755b73a0298569fe33d08043cd81980cba67923887bf73c0861cd8e82003124b9a901e8124bc30a2ea852e8e4640fa1b1161866ab874748e487ad07156e9d94cda5963e79733c969b526d62cabfc20bddc7732ee396c7dad7f64e0f3fd5c63cdbf9a03f9b4cf133e3e5ae2acb3f950aaac557de3a316e48938663e65f0f0510bb230251e3e6a416077493a5458e71d3cc5dbffb7fc5ad0cfb8284138ae7397431be33a6fcd81362823c41194324360412211b065cb962e3d40f1e204b2ff672dd85bfb5ad0cfb828dcddd967379df96b2de65c53cacc4c9d3633e7d3bd646666160cfe22e7e0afb5567ed91aeccf0f02a5c1724efc2bc2ce7fb5a14c3b26da39ce1dca0aa7d6da1ff297729c3b9415ee1ea64abbe75565e154e41c948ad73fcf21137cc69d5c87395d3cfc7d74ff5023d6c4a09e716dfa70b9f1f781c3471e3e4af066c6cd7da9b165edba19a8ebef5e637f1f4f4d908943068e25819d338ca166dfc66828e185293053aef881098e4c950f54555841440ae0676bf383e6fffcd97c9d37cd6c2e37da6f96899a9579ba7396a972f956e6c905ba7c2353c29def2301ae7219bb1ef7fe1c97840b7b508e725c77d8a3390bf6604bb0b3f361936e614b4ee2cea7df3d27964f574f5775643da54e95a5409b5582c5a4bcef8e78196594217593f4adcfe10fef7abf128f78b78e471cd025e9dbceccea55d591cd35df12613f0e82ea06dd8298ba734e99103b8d257467ef3416aa5d22e0cf6fd67a5633eaa9396df66cbef73d9b73f2e8a060fb7f358e389a6c89a34cc2ddaf2088c7735741c31edc536f6c39a1ac9e2953a6fcb44cc2b15816a95def9bd2b954452525e5347586eaa98a7e3963e6a7ab23bee2eea7fffd7c1e3e6a4135e6dae59c2eff27b247f465e87bd648c4fa8fe81b814a49e8f2774cb7f96e40ef119f48211c3039c42a80f588b19fa47b60310454008e512b6869b0e5ffbb603ddbc1c6e61701679369013fb9f404b674c0edf7672fd681d8a9b37cec537ab6eb5fb9350c54470f7a6483053867ad23f8fdc379699a3f983ae62684737827d5c169a04ec9a9fa87763db7eca4bacea8673e6777d4d97af6e4409d94bf270e0945c081be69527ee6cc7527a7a0a6b263ea51bade52d7a9d8b2b3799467eb9c7c9f1b3b9bdfddddddddfde7f5b11472fbccb7630053001d00669f5bbabb3b05003776a2f7f5c6ca068b82af0794853cad1aae98a5f1dac9a99ed35ce7bacf80c166e8e4ecbc68d898ab468b2794813d1f052c1bab1bf53db11b3900501f0f400b006466e6010c400001f001c028fe0d1bb3164c8d99139e6e8dcb664e9072badd7f3221906f4c94d10f29a532fab3ef89c2f78862e317915df7ded7ae2b83389249d797f57632ee8538ade346241d302934128145e4835f4486a36c28fcefc35126645f36543f7cf21bbf74808bf75cbe6752c68d4246ab0785c0916892ab677d1159f21921ef3fae9b3694baaeeb9ce989cee9f6c58baeebbaeebba97f4a5f72a6ee1d4c372ff71acccb8d46f6c1e7d1bed43f6c66499bdbdd90713f491bf8b508fcd77fa168b36fed7ba327793f4971e81bcdac807493f8a5ff1abf700f8ab2a1ea4a4126597f92f557529d3381cf64f7fdeb8358fbaf51c997215089fdef434ab21dbd4423e2d4444ab21d81e23c12bb777debdb35ca66eb89c09fb3e98b8ac8ef13417149363ffc2292099ce137ce23a77520386d4eeb38071dbd91fb72dabea2d9e00da42acb546cd3bdf1e4cebff1a47fdae5d433d7adca72cf94386a0a304c60c4175e3035e1a72a35547961020e3684c9c0fbceef713939d024e77c16f9cb1fa3ba9eee7449b9a65c4faea81b484a627f6b8a770009c54a3e53bf1565c10fdffb46998f32f72762bd8f439f10a7f5cf4f94f1b7cec8f85bfcfd10ebbfe7ffbe6f7de3cc69dc27f223897defff89ecb221f0bf07c76facb2a15a32c771de58731abb9cbab92bb601ade734b71b6a5af7420ed41a89b890a921fd335b5fa489f40fc311a167dd3707ad0f95f4fb50bfb79ec9209187d3ba6f8941d3f67a26bb9f47b209b43efc20f65d1f24fcd7a8a4f5e1bb46255f865a1fbade8eb2f94c86cf647589b3ee8afd9f6726d36c126a8d32ee87e6ed791efdf195e930b1363e74a0d8773bdfe97cebbf9c4f3460aff3829d46335c4da6ee575f8ff8a5032699d402cc65282edfb260e276d8414be4f95094fd0c65dc0c858c96f8b77e497ff836c4497eb3c6c79e4319d7b3da31ad708e0e68c63069dd773939b30acb8af5aa88b17a19a7f3c412e11ddf77bf01069a38ac78ea1b2713e7e81ef6c511efbfe76fecc19a5cd803c9ea65dc28c423fbef0aebd1f81a6fb4f3b19f675cfd93897754a94e8df58b84de72daa611efe0befbb98481a615a675df4d2d29dcce4b94d6e5c659857374afa3c6f62d6795dbfd0c651cf07ccf0b913d053f43211bcfd9281be264725af714f4d834dc68a12cd4ed64423cdf01933c5c2b54222af9e2bd12ff967feb87fc5bef8d43fde1d710edc744d7d310737e477c3d4c045f479cf12cb103268d8c72debed1eb5dbf126542adef80c956f8b7c68a1432325a02fe8c3732ca7923fbad377abd91ebc39f4edddbd78cbadde7cc00275558649b4cf388079c62a77fbf95ba0c8011661475ad63c3c73ee5d724dbaebbbf03b19ebd6fcaf2f538ec2164b41a65dc13b1febf918887d33c1ecd126b32eebf2f228364dc281b628d445fbed5689de63d113b8d357a4cae4426bd6e8db59c83fb17e7787fa288c7a17e1f89fa8b98f8fd99471907f4b90fd2efa312ff1ef26fee953c93f499642a76576af383e6fffcd9fcd98d43d7759452da21016dd7dfab7b27657b6615dcfa823b71d482eee4ee33fd53f6b753dfa69a5b82b7991ca8c981e84ffa35083756a7b1d3bae94ecb39ea7d2ad30dda2efffc9482aebf07ee2ea7ddf3ae744bb0bb9b72dfcdd1728e097a3f1d9d87bf0fff9a7fd0cc66b3914065b391ee64b3d127be19e7a05fb6052bd6419fd98210eaede73276794649eef15b63fb3907f5f7a137f4659f5109082fdf53c67ca90ff7dc13e15e484827d440a213c73dd193cb719ce672d3d6f5ec1f4e86cbfdf76e67313b6321a759a9711fc4fd733fe3fa7bcdc001eb57ef2961fd4a497dd6589df6756489ab9145cf73f3214952effceef6551a6752cfbc2df669263d39500d2e4e9cd00509179e58229bdfdcb048e121ce9313b840f6bb939f99fc3c7e6b2c3f8f26e265b59c37c55101e1b8cd8da54f8f85d539966059c1edb1ac60ea28dde2348d2ca110f619a472c0e4f7333c22849d36ab12c24539ad1f4936c47af0c191a8b3398dca69fd330cc22ec47af6eab4faab3af210f895eb94b84ea98166388171ea8ee81fbe9939824a959d9715d50f44dcb26bfa21ca2dbb9bab7bbadd41ddeea26e3f379d5270ac43e0af46a2d58362d921d96ed36f648d31a75135714e1394ba53ee241baacf7a5649bf885c89b221227af445e468eb4c72a2722077aa8ad9a772a7f71957653ba2ba49b7df9d9cd61d537fd7d4df29754b2b29eba2df7ad641708efe293a99a9a39dbe29dca9a3ea3ac7045dabf18ebe44234c19d2e430457e993fc20442892936f28b0cc804a1fe1c651ddf308880d0f5395d25f82eb114baad77b148ed6210013676bef7fedfb78cd51265dfd7fb8db50f83fe019f7df4b19c0fba44eff3b00738c1393d6f0cea5957d033a0497a35ee8b66adea076fac9882cd142aa218e248165db8406305141055bc5a822df9a92c52bbb2f97ca96c7e2df926e4e8c70689b50aa4d4bc8092445397273be0f0859d0803c51a2c8080e28722c8ee580f14b68cdda6420dc45e485d2344fdc3b72f9878cae907f1529f258edbcf77def618880809f13b5f03bf1347516b82544f58bf2ed7751da26bd2af76ce49bb2dba6eceeeb8961a42848ecd397cba948fe5016235cee1ff019121b036b66428297f217f4bd7f5876d619da8a22aa754ff4cbe8d20cb9d3fd9f4cf7473e7b7d39dff31b785c980d1439a2a5e2843456a858549d31161e4f0840b9c088632587f3a8020a4d040440c62883922a783a9eae14d9ba91168414e22ac68e3c536258313121429edc0c50d642ce9824d19e4c462e714f71d8bb5065b26e12acf227e76160ff7446789493866f6af3f2f9b39d5b3d98d65112772fd45582ac9ca1beb7362e9b6cbd9a2aa9ea8ce4cb5939494d3d419aaa72adb1fcd902e07715c3f8bf4bd2344d7794cc25dcfe2f2cd8727530a0acb57a964a9cbfff1e8a060c79cb97c1bd374755cbe8d39baf38c034d364d9bef064eebc2aa6cc9539c63a6919a733e91f9736af2d4958a8a79673cae93677b652dc2ede43ac14ffaf6f22d4cd365fea13324a650e550460731b82c200c134a60614b1627d01401e1a6053039b850c2d112a47d224d1451b4fcd0c595f93fb3b125ee03d024358d1f804609bc73fefc99c368b565ec5233574ab004d5c5852666484a6d53d165b98509a66ea8f40c3685510b9952340200000000b314002028100c88c522914824249575d50714000b819e42724e17cba36110e3288a318618430801c01002883106cd117103361d7bf17ef21b87b57a05786e42424e9176cc55ccae26e17fcd6f59dd22c92b0de12313cefcb9ee0acd7b52d6da12e75d9fb17c0a2b24531d8744ac1644a677bcfa6f6741c5560a1c713f4b8546ed9484741a4ac3b274455c549a8d3e243fbc820fdb4f42168b29d65eda09aee4e49bd458c61eb266959589c6676403e25761e53f90a8de88be4276a4dc73f1277903c6d05df22ea69cedf6c73142401760ecc1fe65fc75959e872d7ad8c2bbd9ba8e9827320b3908e4223e511ab4bde1b63c16a897243f9f2c1efeedba8a17729f7d90fb83243a19fd48f49ba4d3a2d269fa03be9d30a6bf2d2d3c142cd1709b343756e95b1b68ae4fcc268666813188b27486dc1480e26438086f134c902aaae39ed58b41ebd7e93ac8f89117c8b95508612e10af65b1c5e58b6257bff5aba838a2fab455247efed91a0e675e42da2a66bcecffd80ee54821cd352c2202dae4e55103b99b378686e9c3db422a6165c5c7a0aad2905a0351f434ef54b653aa1021c8eee935beace546558daa17470cb51a76b5d67732aa5e8b33489f845dd68c3491c2abcdabc41d67b752b84c4af89279a738def83a1d77b21579a6635924cfcb149858cade8f7fc99b784c605ee6dbbb7523ffa7dc39d3775121b84b1bdb418976a61396cc247f8430c1a2b5ac37a2da56772fdb39ac8e71ea24a441288d28db6ad4cac5d6be3ad5688a00d9c47163832ab5e22bcecfd6a10602675481b6533ba81a18f90632048d39f62a6720d32f3f1755a767ca4d38c7f2a3f596cca4949462d4b9fc046eca498d26d347ac872f6b5b4c29ab90691605d916a57140bed5a5e0369af4bf8574a67fc543b4d69ea2d50f3e86b994b1a54a533e575b0742e584c6b42edabd1d60833b62924f8906725180848de2d7803003b3361374948601dde498dd614da0957300b7026215ff8b88b6f729f509822615580e527d653f3a993d0540f58efb6264ae21ce3fe096725a71eac7791b6d46404702cfb65f4e885680c7b04dbea3e3e5d90116ddf9bbd62f94c23ba7dea10681cc4333985c0e55cfb365286417e602278011f162d8eed43fb1c58c94b395f36b87130636940a691cde7bad78877d0504f9e53db246e37673f1730f56f141a81520743f11c10781eacc80b2bbce6c48bb068467e8ee4256d63b44d0625b1e644c595629bd3e695d0ee734e3214029eef1d07392d09d40ab28b943465d390b97b54555502fc77958e4671653a64e7fb6ac58e7679450393fe9ae313a4e2afac54897d329210aa5d862e4a170293a2564b68cb087c80c1178461f1c3a57dfd629044bb41501b5aed5eb2ab1f38804ed0e43592be3ce60602e86b0a051831130a8b472f7f59e83c2bd7c9b124a5442c32f0a0d3670b39349c78e8c585bcdc35aa9ede42b8e2051f751ba07c42fe181aa4f427b17b188efb35a0772418e1d6be447e061d8e7990dc2119c948d3a5a06067dfda514fa11af672da8f93a65b8715a4648a50bf245ebddf6e2fe00923f41ca2d608a1c48c1a8185a112d3be38cfb36326f0d51c76ad6ea18d6599c2ac39b958845862506623437cb0468187675d194516179471d35167ae886bfffd6e7508b9fc8d03738f888a98e97019b1aee5c686f2bc342b762b2ad24669fc58af43117cc3de853d2ee97aefad9ef8d49d736e937a15ae17b127e975335a06fd9f014bff4e6fbc66f75cc86a64cd0128f37b1add262d2225857405d74119d9e6c6d21f9c3c79706ec65349486424c9d0a16e7995ce1890ace1936a3344864524de6ba509250a25552976392c0318f2847c07ea534b39465ee4360d8248c8c4c76d2b143945ff084f3ce612d7412f23aa348ef02685652ca2b376e68e42fe65f17aca9dc22cedf3beb879a2eb0bbe7e00c6684168d606c7e3e4fe215b2218f2f1a81005ea00edab82b81b87020f90a84891c20f1c5181e5431dea7dca9b0474eee41a4e30e489944351838385306e614844a85c3379fe00944d7cf477a89793555bac6a20130f4f00b931d50e20345d60a31ee04128b9ea9070fe4a1361effacdd02c384a497771ab2cb668b1616c7ff0e965d4b213d24d6b42ad508a3a8874318dc6d0e37d47e6f3b03f74004b482014d7f51f6dcf39cc2a7db70e64d8e1c649d031d18ff1ed93026047b75c38e45c2b0481a93e46194302c12c34e625a24878de4b0482c1bc96921393697b879cccac4b76adf99929dcd030bde9885d62a10c18dece5eaa8611418870ac3a8330e9586a1661caa8c53cd70a8180c85e15231980a46a360bc548d46c57828318e22c3506a1c0a6160bb4a57ab1ba28f099a03cea3892ca151624a41838da6662150d7d6634575d348fca98ed39744edf1345be2cce09c51f1c4fbbf24faab2d192994c963e45aef0908dc0f50af50678960eaeef9abe4406e77e1709c3099c4f6385c0cdd5638b4835971a98803ce482910f5d63e7cc1b99f2931fb1b396617dfbaa028ca4589d96fe6785dc07b087bfd1f2dd27ceb6a1e9da0da9303241304001f918e1180da2a5cbd41c92070779fa70c1c68ffacfe4ea45bebdf2abc237c1a89d804a5b625b63ccea4daa6e51c74cca8a3e6db88c56014940a1f31badddc9e0a13b9c2d28fe45128cab9c6eccff8f18ac4759c5e54cee639e1ad82c3568d65df8e44bc137bd3056b2b6a7d7e7cabacc1590e8335aed803153c41030ef4f9f8df16c0212b98cf82827f6cc7d7c27d818a8c048235671e9be3ca48c464498eac766a389f6419a5485c3fe6c5c5ec8c5e20ac63fd51d486904dd74a4f76a1258ac51f3e1b026075193af74e887cd3cf3ece7b9397838039640bfcafddc921607a5bf850f605dd86fbdb32c17ff6601e94b4fda426ce496926c43dae99cfe171e838cbc03dc2610f0ebc068c99162604e373fc16481c7c60bbeb0388b01c121db3eb3c997ed69fd09148dbae5beb8daab8515d5bd10cebcb9d4059e92e4dd5d955aa124c6fb0a2c62eb73b8d7d5015482c7c7448cc7add8d3d2eda6d38fda089734946a3679a60b23e75c2ac8736b1b83588bbcc6d8272777625baab36070a3d6eb5c82fa9aa6510137ff129f842a4a0857e082285eed1d4b69a4c42397defc978522dd5c42d50c2b8f1966bdd30561e9525e8e141193525f8c45963b38c5c10b67b27c355bd4ce8f6fadc996396c769208341215f541782c74a09aeb3a06f12e37a4a5ca6121bb83ad53b4c2947b92b67916d6f20014f4ba7017ef904ac326d21d53bee824457ca1587df7129a6572fc5ed2d1b1a8538945da56c71e58708aebaddc30e48ea32c6f84cc314d5765129b15580b0dd5f8b38bf7a5a12ef6d46cff1fdd5d4251e30c92326abcc4db0d228f90b43697ceb309db5ff583018c9cffc1ccd0182743d229981a1c576201e95a321aea7d2b8a4ca5aaaca5ad58335b0db21d8962f5ac4b4512219401951c6865f1619f0e6459b815f77176ef496674400321382d9b884f0f51ddb6f1001125aab002fd560c31ec776ed09759cf25c5638efe93919f9bf8d0323e9e10451724cc5240b9939b16b4d9dce110041c9eb820213608b9b2778e77e034126a4e87b8763d155f158db3dcb17667ffa43cef00593ac98a099ab62a2a2fbf4ce24dee97e161005880568d724a49a933a51254b3a1d3567eeef063e17bb883d5e35ec99d8c25e413ea720c90d42e390137d88fdf45cd680e23da00947cc6c09ee280f0f4c68f89fadd9f0069127b641bb897187df3221c8394614a359267b0d9fc1052baed2087c7b4a0817bb5b45de950188eea32529aab89bba8bb39ef4c3d0847b8bb52e82acc16c8bfec054272ab5f99393fe9789c1a107e77e52492b96c8b602d332772bc18ab8306a3e8e7fdd8c5e304afd057753e9bcb504154ab8dd0368ef9611ad0fc712028896fdf659e63d0745a155e3f0f93df24c4b2a1b5dec81024084c37fcf346e78b40643fbefa19baeb06054b01b81cb3c748ddfc8f0e4f47ce9f94e4b8334d01fbdaed5be15e24b104d18c02de1a1cacae30f3030a7a09d2b8192af945961e9994630a1f7a2d660f5c77cc96f810cdcee3cd4fa1045782303923aca61e908d43998ac64090c3a3a5444b00c5b196607d94d6febd04bbca9af0838372bc696ffa034a90d57f841dd04595b241aee9980bd77024ef3702b9d8d6d62e3c312829cc8fc5715a5a816d88d05960fc14e2c32ace52f9be668b402fd72ee26371056b81c961d0dfaa05471d9048ad03952303d146f5cbedb590d1ad75ce6b3ad0d92cbce5090f1eb299a87b518c5697a5bda4f5dbae3c9f2fdb26e6adf02bab7be8dbff65742bc3583b7e45151499a4a8fe26e210d8351a4e9e9d5db7f33d02e9029a38f712b798565dd2cd98162c9f97cb52820174879d548847379da6b2b31b6f9eaa428ede67cabd2b68bf74346b7fa831c723d2659d0e4eee6bcaf226d5a426ef2a0dc0fb4b204063ff3f0b06d7b0fade285105a2373ab56b907069121ec20d188e1c4b06376f779906759a7ed9cdb906ab77acfc1ec7294f023080a2046400626bb70b48b841091f09f338842c98e7f42ad91056b8ebb9f028d95f9c51c0198c2374e3e48da70a1ec922cb6a0ffe80164f218d1782eae49a0b87393582c27fc875ca25dbc8f51696961568ee10c4a93d221c405887a0b6257fd31f718c512a52c99b20d7c074ad1c84f57345f97162218ae083232c09a1cf7d10c3c1c0824d620553dc0739e8b5ba5b521fd3dab8c1e8ec469c0948516882c6e035e1184cdcae2633e6fdc45d7da5195be18f977c9bd64b36aefd58fed2391b01320edd93c89808b8acb5c2cd0a231bbf729375dad9b11c52471e4dfb576f47850d32609e9bc62157ab540844139da4a9a1c0ac2f55bc34996d9bbbe044c05fbc13d739b3c6ffdfaca57205a8e848808d7015d74972eb557a03c8150c177737c91e9f6ca832809df1b7069908079b66eb800192f2cd5028ad111cdfd580e89a64c3039ccc1de8ed6db2d360ed9a089706f54a2646919a74cb387edaef487ae307ed10e9662fed400a417be8b89703edc4a0a2a83e7b78ace9587aa59bc656973e1cb23cf86850d9650db760fbd863b9a6e85e7a238edfc4ec849364780c6124258aec9ac6358bbf306321e0c1471207fbc2fd398baa60f319f8eea672aa19871fe37323186c0f6344bfa0eb183bf18f44e9c9aa522dae27380779c4a526dc777a7a372f2d6a02e14228a6d0006fe5f06a27df6877bd61990972256f2506fafb37528eed6412255eb40c075418494440cce3c1b35fb7a5310f64934ef606662c28b440d78e97902ed062e244e0e4ec1fdf949a640f21f671c7e98b89e5c1da249675868a21b1093eb02e3fa63810a4a0d874749380ae206775689e122ba8ee9d8fde734d1832aa7f548c09bb31fe43117f5f63319e7c603d52ba626ae277371771ed79c7c9e29aa8ca645eff9b908182b1b56ca5200976d8023097a186826b2bc9928204a98171af0dfc6ab2dd4b0631c27c1688031a46d27be66049abfebd63238593c12e02ba160911505e12da461826ba80741434971e62080cd1a53e2c5f34daa6469ae465ee1226ec272eee7f0dafa8336054c626eb29b3610d8b5b876c914955e2a99d7b4d32de8aea6eed5b1a093ad45965a55fa2ff53e6a73e21fc19b3c419097df7ba7c6e0001d8324bc46a482580c5c9908f7445a277533879f5986ee8bea98c05291580c67a31afc42452107225eff5b19ed7b5172c6c97b30dfc42e6b4cb2275db04b92a4ea7caf2dc95c869cf621f5a425c2242bbc7c60acd35546258591f40ccd5c0cae4a009fea1305843a1923d2c107dba6391976c35e2058d8742d77747efcf899c2ca9f0de847834668df5aa502989b6817266a3a813038fcf948877e04cdc464804b28082b2083818e3f7b8ec48f892733f2dacecf9f0278f44b8ac6906bbd0b345eab79f8ea3c4350f23af26852d44be8f2cf486379af9ff730222af72362041b0d01296d5523fe9f257ca5a1ebf2dd412ca7f32b60eb82b68247da67879380c2e1df977708426815a701e31fce916e7ecc01fd5eb775cc7bf8b7cbb7c4b2fdfd6493880762c683b8ba157675afef55595b3fffbde37ddcdbd0025b4dfea8f3928e74d652a87bbf95b18fafecdf548cb62a92c6fb861161e9f21177506e8be07b493d236e12e81e8e21eafebaa7e2331574589d08c125a674d86fcfe143c6f18f885725534f690b54cdcf4df13a10404c437b2e3b7978df0aaf031d7f0a82b029780587584ba51d545923f353e167cd8f8985bde97a69e63b9917e80069973f7c62b7dc1fb4007f2dcf57e5ee2f5aa8449b19b0ece2a9f236419b8d154a7ad1b15f1fd4520f499ef331bb285ed24c285b2575490ed1c85a96db802293506a30cf8ee8528df62e888a52191e015e1a3fa086d8c96c0b67ee640310ed471a13b60830b0421bc6437d3ef06efa6ca0d4dd29a85ea35387dea50978f0444e95c2264646a70f88cfad630193237d42bd367a1f0c0a05b43b0e465a03265027484b0fb2b1cb3f0ab0fa19b29efd987ed7054e090b1f8d22647d3863299c5b05a1319d1f60e2645af85af0aa80281621667425d32d3903900d41f07457a7ed95ee0b184613c763be292ad70600a290d3bbda5427ab1e26dac54a7218c3e922b8ce4a181fe53202346029886c018790ff00b563f49079c1184dfae66e77efdf55ea4a49817470caa9e9ecf7d8b912a65b12d0d4bb0f9fb061826aee821dd0cb25fac20e57d9a03eb136b8e01ddf7d6b1c25f19322a047822e51e73c5402f4f87d1855af6007207331af89a79dff67e9216059a6eec3cc0620c313f8d1eb8a53647e66e9dd4fcf01960b18113ebe42127cbbe6b2b2a30b37daec49c1d8d52bed373b0b14b130362f57c058df35029269f98f362b40247ca3350b550b3053b340c489647dc851a1d82ff6135b762b6494ae1cb37e8ee3ce019e5631a1a504aad3704ffeafaf14d348d8a8fcd7af06e9d0ebbdc9715e3a2af1c2df9dbce1c6e0136c3003d949f59968a66eae36f205e0aeb565ce3e5e48be41ddbc0b5e300472e87b77e3b7a43f245074673cb6d0fa42f726ba9c994a8401c9397fa272ca042beceb2ee68df13b440e8992889a784cd783ae3997df26f82e87806b3875b086591cf6baa003f15dad1e3450ff785ea2afeae5c470d0634a760c33eda604c22cdb303b1a7c4a2cc30998a720284a8ee0d8e5b0b760af27e4c37184549fc1837cd1fdd08cc32a7dbc2faf100e7b6db8541795791eb482f09e98eaf1c8477d948967b172dcaa0f32233cd92d9df14c466a0cbbb1f071cc7ba3fa4ea9e8f99aae3692dcff38f162b406f800de1e9e35c57165eca80417974069e62904d8fafc41881010f2c6c62749db8b45bdf33a78f007490d05ea3588fe535acabb564fa50d71d1143343606b8f68fa8403fa9a97c5e4812e1486073ceb940f5f2d9021be2e491a64db4ba275c73d0a273d6eaf5513c382a96f2839e6367948c50d6c0930868dbc5c8d35620ca6f860e6013eb978050135d16f3e6baa063eae019160e9c7932a8104048185e4530a9285857b418f3f57021ee0cae144c9e92dd024eeccd03e6b31059c997469af26653ab61394a2a2d647dee23820eb384f3507d628039e08f965d4b630852b59fcd8777322e111b7d8811a017185d858d50f20a3404786500c166aa2716a2f333e3da3de2d7c720b2e6d0430f6ae760d79f07cc330b77e10a34045556c9a026a5bacdbbd12b253daa1a439cd875205571231e252f9c9052787f0ef27e7671e5c7f8f469431b6f7607ba96bba7bf797b7a92904fb5e3058d2f476ffbdd068c5d47e8da1dec280ac0cc83d8fa08cae7b8f6464cf16965e82dbac7ee0dc5372949a1e05937769ae9e47ba6e92035ba3fcc878101c48dcc3aace88918bd47a09f17151a91a606c5c5cd531c4abf09fa923912adc4be0ffd289226f9184c642771da5b0d5467711008ce3c380dce928766d69876d778a9a0067df0b5c1989d0979e18b3caf2823848fdc97124f602d556c399744380bc27edc8fd4c607bf13a621217e37c3f2aea456bfb29c0b4d954c35b35c79b5e080cde4d53c7c2c3f058224fb5a1f562bf2615ee466e5019acde4d779a5e06bb550598e383957a37e555fe68c8d876c249685614d507b2b1353ff7f25e58c5b135069e67c422c5ab38316172188c5f6f611f4ba8f278165b901bb49a05e95455903cb41729b49e45a77701c1dd69d74da0ac20620617bdff8037c7f40d4a74eafd568c337bd53b4bce55108702443b2ab4491f2c898d1810ffa410d780771c5deea12aede50487f89443f8a803d6e04c069dfb314ad2918b0a3ec1656ec482ca891498a1d198292ec11ce0ddf7a8d44a3d81d8176a0708d68a38ecbc9679f882022badaf9277116f3ab58b4aa70723d260df757adb76532ae36bf2e270c11343e343cae87a03a43fc48d82ea607fb47e07417b70c8452a92933930181238519652f8a8a0363d7aea1c08af61f46342256842e3cdb205ea46c5c6dd376a32bcc4994746d2e135cc2535834507144121fc84245f5c6f242814b1882ef658ae003c24682673ad4551dd90c86974860b6b87ecb8b0865b8543317cdfea29859962b1375189cc8774c57f9d9f2b04b112e9e180e8a850cc43dda16035d9af1667e66c180fa847941beb7bda205990f9980f9169d6f05571ff72c04730d5c2b4dc21d150c3a2b397187ffd6322c97c8cced2cd7a7cf7f51e5c8156a5abb1a245c7633404efe2dfa85aa0c289761fa154b11a049266435a549c03359022d24b293973cdb14b9c77b7ec6a11e1ade8dc61f8c0be974325ce5df25a66d3fcc6b97d0bfd6b0500c72567875572a9ddd3861dfbae03cb3181f3d1fc95d6c15227e549b67dcbb9ffde20985f087b3f2ef231f084503b6ad711e2486c0add80c9eb2470de6034929f3f633569d6add91ab0723ea80ea4c77e5c68699c2c329476406dac605d649f7094110eb276b48fcead2d40051831143763d407b54d299d40f2b75442a0b83b135977904205d99420b2f133109171307491d3a3f3d68560c1aca92ca244155236bb65d13c602dff114a3317617b936c1bdb9205930f7d931c82c997225034168489ba6efd05c9199d74314dfcf88415b404ae9d920046f7b1954a127cc6c1736758b61b0b517373c0ed9fecd8dadef76de0ded2cffee8f5017bfb7ed75854f11a3f3c965130b388c55e23c10a33226b03938591d8c43fd6b77e19767f549cb91ca6a66779848b66a51d8a5392a7f780e0ab45af592b6a1831fd724847be1a41682564d500048236500702bc633d772fe01d1cc59ecefa6e60132e060f266a0febc59308ecf005c400537b10da289c5816736c825cf60411c86a22af70f8a64aee8a273e229024a0232b413facbf25ed60c484e24064132fb6629c05a903cff88af4474e3bdc9a67a9d70aa07b563a8348327e6045560dea10fbb46a5c3d7611c708f6947d8846c4f5d6e6ff2394fc5db4d0a81bb5f18f23c22db6103a28c583a833cf7244e429150f11b5c5030d797624305a1e8dad582283795d7e574b32eb1052491fe241898541eef08e02d01715f512b9157c475c66c2d72f1460606261c8e532ec17817910d881257ec98de02ed2b4a61860542c06ee0e0cb04c449ad2ad653b4321786472987be87f88b6b2e71e5a918548bad810934667eb9fc58b7d0d05c4ec86e876f50602e09ab7cff6aa3f199f6dc507c4b6eac3ef974b3f89f75d235931efacce9308be924076f5c76b388cf36eefe3655e9b0bb19442f85ff8052de6dd97c37650a830411f25fdf45f1539c771840b403ade374e864c60423ade51a405fd795ba6c26f45a119c626dfeae532a62c21cdffeaa42916bc5575a0183cdeda33be400f781479e7e5435f0dfb0ae98d224b892aa8d32bb2ec103a0c57ce1792c045d7b97eaf28fe3748a5070492882cf9f746048bf9932ccdce39e49c7d97c9de56e817f9e45148063af4d823687fd5db50a166ef15e68533d6ee0187b052a3605211c6cd4645506dfcea1e879d220e5f13bad72400db6f64db683323034103307537fc1b7c6cdc050440b439e859c858e70d4878cbd190a4b14c8e8b4ddcfff7747c18758d16fe0d66430f5e6548b1431323cf02806b08c14bd87c26ee36aa531eada113a851d33d94294141fcac57ad1f70f1c038961b9ce69301d15881010281a50342d84bae13ae15ff6ee19795e3f763c5d7cc37f7dbe3b509863741a3f15538ae21be2f45847dfb97b0014420bb07d25c2a860583a5260861a9c0681cd797495cca2714d8c1f848f58d8d0fa4f1ef857da92c0e34473b76dad102399c4109ee4d5b8c84bd8270d5eea1f4a27ac7877f77264719dbcf6906a1ddbc58b140a23e335ec046af94895ea8d15408be13f47ad18b08b8817bf59653ed0507d4b661e7d6c5fe8d10937d46a5acc7f1df48382c0131505bb9a587bfbf759b807e0c14e186880f5cbf640131fae6453515da4bdbbfb7a3c3af57cbbded4e35b5b52ae1ead677537cb0947460f63de9b423f63757ff3ac263b17697641536c4ec79a9cba4112c3888e98bbd0dc42ee7b9eba839ef6e26cbdad6802b902614543a8f2e252b13e6e0f5d8c3fe07dc1fa8ba134e85ce864f519bd57ef511d5466b34f7950c9b57496aff02f3114117893290d46c4da0cd8f6a9a2a8dea31447cad7d55ddddca20d9789f6a6ae78d8830d6cef9451a1b0268c65315d3d66685006a84bd68a94aefbdfc841301e09b2852e4f9bd01bc014c911a3949d384554f03ad3ca90d7b084696baafb1e968d875d876bf98a885b4dafca75d5c7a459c1b386974b09a0c680ee028e98f9b40a384dc51069fd373b06d2103d3a27d4b7b341b14b8d424ba8d859ae75b2756329709beb8ce0be18cb78b24ce71aaa9d2c45c898ad6a957fc6e443b084de2a16814fb70d05b92cf8082cbd67ce3d0c48284323cd5afe893d4cedfa054968f8a3d4dcd2deb056ff78734bdfe32b949d9149ecf9c56f4990037ccd426f4ee927c515bde40d4dced30e7d860089695c4a030e1a4a68400a52648665d0a88e6a563f6df6b04296357b35571da75cd91d06111607d9ea61244729977265255caca213ac0f3fe97c468bd8cbaa8fee51163b7f040989b339aa233cef7baa1450c29f129394d5ea87dde776d638a49986e80a62f3757b50bfe425cfe94f5ad9323a3385dca87a9c212d77cc8ad3f979d9745fa0e068ae3740084484d04f0bc1c79eddef6963a5710965abb3de00faa199a60f8a8e656c7d20c96d6ea2895e5405f9b3fa7c56ba43efd4a98f7ce0811e9e342df3bd4e13350460f10e31ca979922cc2c8a4891afc7969679bb4be83924596eceac47a8a5e32c7bc84e69a84b9e8077b23c3fd7009384e697a271bf18045e2dd2f3f4872b5549a6f46d2cd179a9c77542664ac3188607d2ff3772d42cbb5d1cab494d69d7ff3869352c6356e4accf62a6e597f84e60df3f4f3b2ed1c213bcf960b2023c839f64e1d99437a45bbcd509433724c5591c5f55774a0923adffcd54d226d710705effd7a576b45f8423f449ca717e1f41409da3b0cd9afa22a300861dd6d1fe07fe992fd105b744d2bd0c6d972a8844e9b3a9738b1a7ff8817c7c06d0e8d49e75089c8042f01cd094fc1c064bda73afdd7d0a72c9bec3381f2e7886ed12290eaaa07f2a211afd0f91cf94c2965269c9d84d81483b903a5f3e5e2bc8221fd405466c2a31a3acb4c71a4fa6a157dab5644673b38e61247d37d1c08d45d3004e73245666a8300321da5ee549454b3e483dfe88bbb06dda1949d26787884754183040baa997c07ab683e6a354e06ae73a2585df8eb5a3b731bed6616b03fc89afca8aa25b16aac0f880c4bf44fd94bf89ef1006b70bc671747159fb0e93cbd01f45783646912852abbc668952b46b6f5601820a9b1a58aaff820c144d82878ff1f10cd6a694a1a99ceec8406c50ccd53b9002a47ea62a25a24e8f830bcb40a9adca47751d9194ee3c8f4f04dc58a067f9251cb6a28073c70f1f49ce8546a61dccebe920fcd10c34bc7f93e7396a1ca0044f6d6635e70b4441b45735b48027c7a63d0f53a2bd1759623d0610d2999cfb7114185f7fe71202e3b8d90491d03ecf0b4a892e5aa04d2ccf039d9b7c3daa1fe4394ca4b21d0d38e0e7b26dcce39763e0a1c3992dc65e1b33e62c857a749ecb7e6857a8d60445e32ec5ff78958762827edc16436918513132cbca852a97dff0565fde6e53a1479cc1e15be1b099cc494108efef6bd6173d09a9e82910e9c022632fb00a01f3326237746a877ae3d0f4a8313e30f61b0090681e11fbb195e20bce1c4b69a7ec9183be2eaa53f9ada649dd7e8d7163f4d11fa010a3294d20872cc3a45a2625c9d4a443bdd443ce11568945cf4e460b46aeb4bbd7fdd02081ce6b0b2f488e9adfd4182b5767f818312c1347562baefbb2fc7b9ce2824fe45bbbdfc2f7a4331563e67563dc363ebaabe1c13d22ea840854f9014565c2159a5c7e3eb9b32e6aaaaa7180c128d7ba47293f594d196fe1ecfb0b6a5a630037cf7ff5096967a2318c71168f4ba599fda8dcc074f2e41541576f3e32ee48c78736a00e57117964c2fa7f9ecbc2d4a0e9b9faf0c963957f0b40c1c4043219ae6b3ceecf06dd3729195660b9032e250c4a62692351e42de32c23054d8368e96d6a2cf52e0c0870c7ae483df2b7d746bc8211c3c7d8245327eafc8b10e064ae1c5d278e12e9bba746b10e9babf2b8819734d5167fcaba42cdf3810f206edf66b6ee810731f15be490ec726e5d1278c09d11581c253b86a17a2b82992d7cd2a69f7f253adfeab21ea3f776f01cbc540b7192a826bf5d3b251c3ccbf833f29df6de25f5d4ee02f45deccc823389d16546fb3ef2fb66e4b65af7d26ff50ffc546789b6e4439ab9fa6feac8507c2b43a0ba2cfe45f288c689515a3f5b9f261c73599811f1195b714c17525ea8980746f6eaba45c520579b3cf77e639f72acb0b3b540c815a9dfce5c15b2c2460642a91f10e85addedcd301f6790cf2f9b160d906db8aad798b427aff97d226301d41ebe092b6f064689e8b102893347e2b0ad97597f080d3acccc5b6b462175ddec57cdb3044279f730c5ec02c293bbcc8119c3124a3981390cd15ee82fbfc3e5ae4bd6e05fb5093f6c9aca568fc95838fa3d7d50ab4ae70bbab66d4391b41a19ed4f2453e1e38e011dd489b132ce25e8cbc50109641696af1d589a66302282287b711504db0825264fe6e2076dbd21840fd5427ec5aaa0cf2ea9e146bddaf82daea236d9ebacb02a4179022cb93dcc9480006f074da3703c9aac19ff3c2a9693502851508efe5d32a973198fae2fdb991407eb54f3738837a17d3be7da790fb16d74cc99b2c76d2c00d5a33b0bca395cb887131bf8da28df477796fe410c064c16055e54686a5556f1a6e492e551a1bd77bb55a90db22cc11101ba5536afb5b6c9e96ac2d8d8c6103d2ee5770e9e86665cb38c3ca46f496a8528186a4ed61e709b58dca569df4891641d8b794bd6cebfd3334c1179c9740facdc62b42b70da743751bb7de5d5d48de515d02b32eb983d3d49488a7f2a8299e4b85a1c1850524ca58372338978db5ca87e8658cd19bdd293c36de66a7a873e1f3070e17a7692474f46bdc019cb26b68db79814bec97e304778c8a1f909c696b0152b3d997b560c5fa15caa975903fd3720b39f8a2849e8b03dee50432a4429997d7592dc6bc61cc6224d6047fa357958a15a59cd428129791adad1e5e62ee353e8a0249c2ff293d3f375d9b1c1a0f47c107917a12626f64d48e407630b8b8923a7ba7f59aa23b4813e8b9b196f7f983104f55cd7c247d3ef7777afef1ab6287dce7d6d96009d4df8b7d3b4a1bf334d05caa4c852f21d1b6ba9dd411b58dac76364521fae381ed79fbdac742811c3bb77619b30c1078dff9d47265fdcd72c4422a8dfd24252dc7282dda6d5c9f386e00b709cfc387171c3196aeb6393f7ab6afc5a01c948606afa4a4b534e388c49c23c0568c88081323da6a76be6fe2baeb5c129ba64f4a4a35790a4a34aca4200e8532380495421436745e1d5d19a3f12d96f5f18043f2d3357aee266c232e4ea473c81c27aea2cf05cc57652e62e0b0bf1479b8ab3a596a78a1fd478cc28c698034b816704fdcf29d05315ec84512c96800e113af80c173c7f24a44bdbdd3982a6edab2128d721eac1a5c35b6f543e9dfef455b47bdaea9e11a7c33cc10083112ccc25d6267d4fedde6454874236842feed3e51a046e6445ebf5770a74d1446afc88398888576fa4de0603457b2c4fa4ad3190aa08978812781d112988c3f18ae1385a9acc92483b780defce0ebd90d87a937d929588ddee79c516afea4b051ec0148939deb1463a1302aaf9fced52c55fa6351e82753b1ca28324da87a255a81350cae67536d4e6f7d9eaaeebf4847732d8e27a41ba9b44d3973e0913148b54c46f39a173bd2b1e08fedf8eb87c45180142aa5218f380a14e11672f444cb214672648a2791a3b00c7301d359a490108979455669ff36acb172a56586a76a1939669babbee51f9988e36079c355b6e2581ee4043970eeae2c578c3589bdd3e41c18ab99afdb8c5a2ab0a64c2253e60904c9b75d69eefc8ccb04fbb98a282ce638ce9d740df01d16ee589dcaa1f6dab8db278a51f5baa58d65522b470ed09c7ab226c25a7c22eff3825188a6e62e0e18bd0a20b615880a744008c44fa13aa845557675e6f23fef2d3b5e349aaacbe1892331dccd7662d41786144513900e3c51a316c856b24b26ece4761c9feb709a8600ce529fa079ec598d77986a85ffef16b5e4378df87dfedc1c439d8f004bd4bce7a51168991090e3441c7402336440d55b70b1c27c29dea3c6ad3066a62c3dd6dff1e99ea620028d1f3c87a9bc73399f9666236678d241b5b4bd688c007cc481e6f099ff36decb3af0474bbc945934d4d00969ab0513b3f4e1787d6a1f7a83bd035df497671a807c60b075e036d55cc0864f5113d802cd9d51c5a1c36a4b33dd97313633ccd106708d4b0d8d77473248b824eb8cb2aa6b7469185d951c5f57559900761249e7c5d2235f29743b102622e9184dec4805c4d06cb416010fb397024a7329b14c0643f50a0e3d20160cab06233ee01601b57f4eb82f333d6867567c2b0cd3f6cae3915d33564dae2ca225f4237eb8be22b67e3ce87839fcfa7f4bfbd5a1912e2342cb7e7133d3a39aa067e365c071b3482638f27cc3477c1cbefba1e7e217b7995b7b53f486ed39972da55889fb8e5ad6d12d95c205438b10c180b5462033fc0e382b56911beb4df3d7c57e1d83ff1d239ef255e33c607edb7152c3e016fb4db996cfd959805d7d6c0736aa840a1cd36ae6d00e0d187daa5a9805ab15da83424ac557207dfca740febce4daa38498774a87ff53cb02311b5a9d022cc93f1376b0055ad0afa593ca21308a30a3d1c62385f326ad7edf396a75c41d5f46f1221919f94876cdc7d708d93319845c9295279463172f806cbe71abaf22b7195f7216dad65b4694bf1d71ce788b6270af56774ba52aa90fe2334afdfb459d628e96bbe97d03385b2684ab57cf2281025219afec3048091cf0e76e96cfeab1358bd571c7fc32381126421c39e9aac360db272826a0f664ab0ae67d622ad2711a7991700b8969884bfe9effeaea210634c9f9066783e891d88864f1b070c5b0b2c0b25ca00191db7fde84a2420712325ebbbcf1c2050c09da84656b03384425301c06d6f9f725b3bd318a101c9c16c2e060ffa05095e8523aa86bcd306f560598cc3edce4b61fd7f2de905315c07472f1228636163ade468d2eb41e1ba6fa999085d8a5e6459e4d72054a932771eaaaa17418956a1bd963a026ed4a82065218af7e1142d9e73d171dc667261d6cbe0967c5d6228373b20236ada6c89c755c48aedf66a8105641863ef6d96918fb20ceaefb576ef29bc2e06dc7d9ce0fd12c6060f0645b9e5caceb9041e52a0c716e7bd614361933e560f4cc31bd33c112793b123b83914d14a562d4b9ed5441ec26a6ef1fafb3bafddb08919c828466d41f9fee89c362cbb88d862f76f01ee6f7cc8cc6395c196022de17e7d5fab9024459cc9a812ee4d40a6c1fe80b0ed1f7a37be68040b53357630469c8b867cb04c9b109b20405998adcff49ae2989fdef012177731c5c0e9890ff7d88b8f2ae4423c42599e620fa0cfb64613c54623fea611562cfb9d2c01a3576e9d14838fc4bc191a0a64815635a11bf237b457a8cf24ef3845ccfd7cf0b9e339dd9d0d7bcd59c07adeb1c65c687643316bf6862d50c59ee674ec682730b2b389bff15a3235f3a044266458968660a588d9f6eb358b0012f83761e7f058b5a85e800c8d9a401678de8f5afdf5b76d9744df0a3af0b26bffeb8ca3477d0bfd5062593846738999f044c7662bc9fac42efd921405e87bcc73a8515a76592c2a7f5ceb1fcc1f581dcdef6d3520f804149634e8e26a34c383fd2affa4787ad0422d03accd0fd621e23ffd8379f93b7ca0097fbd14b187b29fde04e9aab14c324329df524cc125376e5dfb1990521b2eb8a939cd23de76c45c2bc6891b89e741c23a19ef591fd8d6b2f62535fd559427030ea0882ea1844bd6cc194df2511382444480d649d6027a0314987c18de44a33b21f9676993df5300fb12f380cc19fad22c264dc106fb97b6cb9c486192f8ca6a18284b9f82566e1a69b7128ffb6caa53a261a598cb3ade384e37971324c2bb231450c75a0555230dac776263a450cddc4812a936cad21a12d93243a2d11d323e7ae0e22ea4ee0454750372a25c7365bd9c8b15235a1e368494c7ebd7fce46050aa9172613648ee6de84522644ed20e42329786ffd5b9335718b46e275a3ef08293fe734823a7e4800e4c8e767ec1e205457b84c6dbb9484556571d3288e0b5c6e64d36281bbb38ca202eeced00338d13fd75b2e62d4bf0c5d7e11a17bb4767b24b93929029c6513a0b199306e1b9e34cc005ce1762600b0453a08b92f89e5a5b58ca390f8ba1aa737f39a0691426e71cbc56e5286b5126edb9e379eb4dd32f778958bf9cf72620616fca252f0f988c99d37e2bbd8a397722e4c40a4a10f968a71d5787742991b3ac4817e73d00435821a14bb457f54a9bf85030efd3f0ea5222171c93aec295d7817c908f8447477ff2d6c18a38d17c61f25df28d4146228754bded89855d43015f31d8af08252ed423d3bb118e0522f8bbdb7c7528d0adf00bff0758b7630b0df805be0bbc0d5bf2b07b0615d3cf5ec1f7c161ad83aae2187f1e04d4324fba2cd25c34325cdaa91a96f49990a6334cc8be20e59f84452e408ac2f7f06bba660918e3135e57ac1af0c877975819168bac28e8ca711e53e5c2ec1b9c87a6102e19a4a7e42efeb26a24cfd1ab4e0f68d530da8dda1c53af01dbec9f7f3bdc6267118805d7965ce3517e6c905e3b575d023b2288deadeafafa0b104b7f3748d6fbb8b9d51f2909161b1eb1b3fcc3f17dce5835b8a7042a2b0e406d9edb7ccfbd16d3761799a2a8555a39986b4453b1460393e5b4c0ad1e49311648833e849dbda13f8097b33340e462e4d61d0418fa0888fdfdcd5b762fa8b7d5529b3aae774a6efe16cac3ceb6db1889eafa658078f0496795ff6810aeb2c312cd47a77b4124bf0a20d890a144eb648405bff784b5ede65034059360c159aa339db095686157e131e6808112c5f23025d23a727ceee852c4546b159edf1c2e11230774d496c542435870f382a023c40b3c2641fbe2acff04fe17106ed5b5fecad35bb2ee4c786cc8b33845a56e9597ef4f92a992383c472af31d1c7bb1e3b6f79bec7142a65c0be3b9b2b6b7c1c2c3f02929a5b6ec021f5c3ea3da23cc4a3fd058e23b8720b4af89fd0d400ba953f876463e8229096e0a05a506938e8e012564cf9fcf8204c6ca709c879f99191d412f24eef609fe69a6183599ab09fdaafa4dfeb8d472df6927d90c991f9ded40b8c7a9f98fac16a653304fda0d7e936a44804184f15d30326d6816df20c749692b84978aa8c46a41f92ebc1a3cdc316b4c378235bc1093449a458e8f9d0692e209b642dc9536f3aebccd085b4429d277821019b00624c471445b3bd0e6ff1606878b763a5db8a9e46812b39d4e1a4ed2805096a4ef96574763cddefb4460075e9dc1d7a479a774b02e4f0ee6d704126ff613c6e35d8237ababb62305e37347f6860e0cf335f102bd4957822d5e220e30a88931b3e322b850accb95dfd6bffc4f16017f5bf41a7034b11ceaec29f8a63439d7142f0adb0814bfccd02a66b8ce72c2897c824d6a016e84d679113db2ca9238f8a47a4f63befac2781a69f3a54dff1d09393324df544e6402ffda68382f2fc8c693bcbac703cc3795eb294d829f4c4d2711d0b07ae09be2e282ffa1cd7dfafc14ed2259faf8e6276f7f7c7331d8e2b440e9646d286970909f2895c8ca438b3a1288034d8680409b74cdc64ca10bd9055d980028af78995d6ff65d401226c10419312553767c5a480c70082c10c9117dd92d9c0c13d291dea7232e51804d4cbc6c999c8f169548ebd688b1c81e0e9862159343eda0e5056b5412836032121bcc0bfe7c2874f29f48457730eeec7ff6f6373f5a39c05a74edeb398e496187bded9c5d4ca4114380791f89ad23f89d206f717df2641f41c0a706f0f5d2940e61b09d03e5f4060a044bdc2a5b839ced54f044600654dfe3e3a9fa6448fc10e8cec21b0d77b451a38cb63ace648f481dca0d26c193ba4c740f0d6de8eabcc9144e1ae84716c36cfdf1f5c9277f59963f2f4b3fecc466218b0f96fa320c96c32f2a49f3dcdbc726e3e02e9202420ccf9313c6470961c9a428f2dd158e5f12f7aba5c5ee46a890ec2456279e80293fdcba8ab7e67ff2d01a8636a35d04e07a272bac4211638fbcd91bdab9eae1db10888885e1304096d997c5b90f88c2c8374e1607b6cfff6f0d9da21c12be46175e0eb3b2a09bd56c17718a84f2b86427c987ff6b65934286271a7174ee3e97bbb9ea20aaead8a49eb2452e99d181a5cab882c29336cebdf5704a13fb7896cd3dd315891171b43998b3f6ca755c5e0b0f862d700ce39a009b44bc83a4c09958d2f80e0c9873523ee7a333616f498d24f32a1512c37dbfea3a962597cfa2dafed25b91a8565a29a5a62695158ca58c1a4f690933711df6f4dfe870cab9d67be1a5f2c17b05709112df4334494b0a1d6551f161c8410e1294e685ab331908314c19c74a4fbb3c85a84de4259e7bc4ad84ee0597b41e83a055e216218a803d79af9cc895109ef6444a9c2d82e0632595ce7319702cd9fff69343e7862f565c052a7c48cd7a8b292a26d2b728a4b972693ed560e38e2b938241821b18b226fc4d4360e3830b0a3544d4050f43e3856b69a97c02115bad5a32ff30955506625029790a93fc188527620aaea4b7c4aa586ac16fb0916d0d4f41fd7e935b8a2b0b0a46a815188c5baa9c932034a5467d1dcfff29695f7082817d49e0d6347a4bd1f0d2ecb35384b00488be5a6e0903ad29954586acea5398bb7498d450e62d20ff57d1a7e8cb7f8cca88b76bcc78c7811f848ece9c7c03a36ca1afe78372417dd742a5d69ab674619fb03dfeab78d51505c87ab6b3d7ff18d4fd28a163d509d6c5061f8b0ef26953a1efb1218e5f0f53351c64ead9a491863f1678f3efa53a245cd6daef7ee855dbb10133be9ed75e7638427cdf1d928f60715a5c0b5cbad06e8edf2e9f7968b064ca1d90a741ec0cd52a952ca57023214c25f73442f6ac6f1b73787a0ad7bec27bdff68d892cc56e389a9a1d7f4cff0285ea6a1ff4fcced5acedf3859fb1dceda264b7f1828f0bf2847b22711c2ffb13f9711e5c37a30ff7b7901228c0e54a36bce6f9e3a03a66d1f849d72b8418aef50abd53179487b3b922c92de9f2ce91b5cae0cc46f2cb2ad833cfe519da26050ab09fc40f4f5b2881eb56a39aa214aa20f8aa923dfa80f8c3d86c8f0433cc892c494d931dc2e12fcbebaa7a78cfa7d8d206abfc830220a918487075593156eddb626cc109361d1dcc9cd1ac761385feb9e53c1e5ff691b54e720619cd2097be5309dbad88880116a77b046ed01163f54b65c07b2e26520e379329c2a3d4b3d668e1d56e4cd7ae0e3b2d1927bd204819b30bd936383e750361c40bc670c2e62d4bde4a7025e9067a54859a1f037d33e25ac9be4d14bead615b18ed287f2ba814e152f34b0986db1670bae06c5a1bc2d6c43b14bc6f3b92d10811d795398abd5901a0686992d2acdba22fe24ff83e7ad196e4beabd88d74e676f0777d57a15b3dee3867ab25bd61f4ccc304ae5d32ba27a7042cc05708cbfa698827df9ae400c0234a60f733aa3cd8f718409d3eeb7f1a9c0e928fa244b319826426d1f9e8d643c658ed7f7e33d2affe16ce5f1c85df07c1080a4fa1f1f2424366a7aa6c4285dd9d48ee864c5e7e08539d7d77d406839a611a7e8d78a4f95d1ae5b323f06b19a5adbc5c06bb38113636c3b6aaa760b645c95dc6263384a34f07b7a2aa19661437611ecf479e4ec7560ca98520dda50930a62b7f37bd403b5c8b43d29f383896a12b01209025010564d501ef5be08806db334a82b03705742a22d08086c40e25cdcd933f047f991135ec9ba1ff0be5e1eac1dcb7574883d646b65e6a5022122353d529a57f3a18983881299ccc4bb14942ee4a9753338ea5bb332929550f897da6cf10a78f39d83bbd5924a8605bd97ba874a2017c7ede235443615c25f19fd2624edea81fd922fbc5dd78975f186070bc7d751534d179f12d6ff91af4574138c59d6cb5f89ce9b255aa8ea09fd1f3b791bd0f75ef988bed33bbdd996b3c39633ab1a2fb0406c2469ec303d88b673ee4cbd2b5e64ac65f9e458bb255458d9bda250c74aa16634e3b123e4b3e186300747358c81d0652279d8e7ca2343a0e118d60fb8bef94497ee119c0c54e3dce70ce4d2d96fbe2714e045d8fba6814b57e61f075acb5a84f209b964370617857ceeaeb4eec0523a57bd2731225345fc39c71c18d8a563865f491ff705c01960078435361590ada7c083bd72439bb6dc07678a1c9938e4946bc32804f8a727a5efba93c68560694c63c2d23b604bc5e39b2ed245a5c501f8a5b37181681076b36fec0f4d4f963d94d24ccc2d94fe7aee004fb3112d138c66a3496aaa0e30c9f65cdc9a9a30acb7eb097e33629218def5ed98f109c7bee962c4d12061904de94884c9e5bbdd242b0ca8f4f8339ca3dd43dae557dab861f7c88f2932fe6d5ffb73cb5389cfb53c7841d20492fdc46a78369ec1c8af88159f205924162927da722e59073795b18afc4420071ec7bc7268161ff554e2320ea8e54c01d662993e3dffb0e30a25133d37797bacc8dcdc8cdf099eac830dc47d1a5b2b44bf0b9142480c9d0d832c1cc78ae0238ac55236d1548ecd502bb0817d7f38819124b422f6a5b7cc31dbf101a73c4046afd49a2a1a0b0d38d33a1f71e6a04e4d0a29c7b7dd46972a7c29d033904d720a3e1389572a6a461df86ea930d1c2bbd5a08e29a49924b6fe8e089e3c70b2c776006b0a82267b72049e36077be9bd00ed79bb3d1595adcb85ef62966aab817ce63dc29b5791f2516b73c9152939812f1e0ecec56770a723969e4ed32ab17a77d58ec4862a84fd033253c9489c7fe75931d4ac8fdd3e01638d3fba94c3f1795f855507edc09d6111dd2ed10706041026d5ac6dcaab7c8ea3eede9f0d8a88b86a77c8861d6f884aca3b456f0bb9a83cc9af6b0517154fd55e95c8d2fc1d80345f496a881db09577f27e8f2e11db54bca99b3659e2a3a41f2f17c16171991987e5b9459e6097e7e593a8aaf69b47af8e9e5b3b021791a58cce4dfb6965b4d0839ea360bbd862d24faed45da96812a5abd68cedfd73a3770dbedcb3a03e6d216230a9642d284b3cedfb38371008d133fc1cc1979069fbe472636be983b0559a6b8d2f08b7527203d22b63c5105c9adeb53f9d50846d77943a8ffb1b9b8d86819032e8ddb33141c12a48f8f4ca4420363494ca5e324311a6f335bb9c86b56fb7fc4182d8448050fb347e17933554313e39ab044ee2a36632b2c317a87bc67ccd55d3e8a9af9148419e73b1002c3f5adca282791b127b344274bfb71bb10498288d08cd480a3252d0394f065aa99ef57c058d90b4afd684a7ed001924a54f68939a63b661d6e40e6730e089dc6bc8ea60107b141c78b1104120b8be1633b93b77c227eb1325c993e0523060c0a0044164f05ad8999f0df1d4e9587a74996d5c7b09326d226bd2e239c6b1e486b4ab69a589f8155d2c3dae2f036114ecfbfa45071f208c0eff2bbacd8b3ff847619887db611853cd78882a34f15388ac219432043d29e546434fcc9853889a3894111129c500228ca54f84c5e2aeb398a87437898a3ed440a91c71181229311282fc04e2ea93f82bb9ca24dc67f4a9f02fa27358b430959d4410b3702d118bcf1ef689ee16a3c045c0c21d2730988c2f1355f9f7c96ca325f6eba54753da1a93eb1ad676330664ba35002436faf9ce627b74c44781b311088c440d380435a7f21c7596a1d5996a0fc2ce1fd06d880d05a00fefde86fa47cfef0a84cf7fc76b1e2450e6ab77ebbd64cd4facafe99cdaa0d0751f2a0ad44016efa9fa49bcb543d25f1c5f0a22595994381a0072b3f37a34aa8c98dd3c073c3d155879ff2339275fe5b7de077c27cbf9049afb5bcb9207a81380e3ef05ad08fa5b521071fc53158768174e8c9160d9c3e287ed2c4602bd9e50439bd312b401a1693e33f4ab686eeef79c810d49ffdafe86cbe9bf16726af74eb586f1b52c01a5fa1b0d57614d70edcdc00ad61d30bb570084fd99684e2754a477973babaa5852bf185f7965e878a41fed829994847824e95b1bee1f8c22631f1d05c7eacc275352a4856d1ec25a713b093fb2653fce10140144cc4aad1fb1c0645510a670c84405037159514c827fbaa733fae621810a298caad59d38f7881759932d77aa1a24ffff25ad6f9e3d892d79bae2ce1138eb031b1830b92420d8169396a64e4109b391a8d86929e8abbca928bd12c8ed654e3ff30f5139120ed02f97a06edc920b4d26e4bb9a5d196c5232aa8d39c947c2e353602947141f21c30cc415793855c1d3a140d26a6f2946cda6b19be40e54abbfc34f5dcebfa3935344ff2c455671a4ca5079ba30a88e1dde4ff96e9cccc1e13529dffceaa8848cb5432c60cb9c385ee160b9ed7c4c69a582961dda3330e72ce4a8e85f6e20393a359578c010d9f7d81eb8e4a88f8a7e29e0a671b7681a01eba361e8fcb1885aad4862d822325c5e5e1c71f1f640faf3077de3ac70383adf49be52706443966d705a9eeae0fad710076b840e071040eb13e617b630a9c4b98d367d1d2d583ebadd707a193bf5e72c5ffd6d92edff46786c980ad4800b3dca8bac507183bbddc313e9cd85da06eb8cf8079770a9f19b1e6e093684cadffe5209b3c6349f8d4cfc72293e2f979141a69a02125c933acf2a9868db18d8d726f10178bc9e4f2e3ae34fd869864489d1b3955c824fe22c01583e537324114b2bbedd1f3d5c099701138483f8df7e3a6613b3c0c28ddc3994f4bc48c80d4fd579f2775a984948626ae696322d5cf80974f3f42886611e6573ff8dc4714cb94ec9261521b77e8ae7dcca0ff2e51cbdb09126689e482e114ccc02985e291030933c2c154a12b849710bdcf084cd6ae42967e83aa374d3bfe2d4eb7282058d4f3b49828caee6d57e75f63b57a0f131248e90acded0a4284792d94baad242a4246a9e77517f8670dd05fc152f2a57a8aa9a7bba9518419dff53e69fe2b2063973ae8250aa7bcc4a6faac6fc3d33e882ae1a5bd7b522bdc2a31b2b5a71979913a4ea56f8de5f8139742946cf7e7cb6d99bf49e229e842db087c1262f25da695a2324cfb3e0afb729da728347adadb6590bf658f7ece8e335ec2a82b934311f02c655d720ade120e7e425df4d37c943e4714f81f05cceaf9ed9fc87bc9e8f0ac4e04023ec9a8cda50012da2247fdecd1a6547bb71144bc7a0dfee83c458be0ef50cfef377247823ebc01ec2a3df29c10632fb87fe629ef5b01174db48b574b0056fc02c3596545524c800f7dbfcc3a428c2b6e627e7bbc6fbf227676efe022323208e938b2ac514a667ca90bd9dcdd297849ea4507c3dfec4742b0042e4dfd1d67b379cc30ce8ec05880318d0ed48645c8b8b5667169af468746b88c35efd3f6d45c6fd73e8893fe28d948d931db7d523a0b657988aeac34e3b5dc5e46cce02a04282511f32f32c0654bcd9c27e86242f89d32df8a0b088d415e53f3e2958d4922e0a10c8ecdbf7a7d0fa07128d033bb039383ec841172567b7fa74f9eaf636e8acca5e3cab67fe41a16792373522bb3002802c694a001bffe8db28088c568d68bca04fadf3225b71e55b2969af33e659abc540bfd727f8ca080295278ba5ed8481d47eaa6480e374e51573efb4b55b03520a028ffe2db32efedb1c663ddfe049bf872f6421f93f3cd74f33df9f19b895663270ca41511673595dbecb847a117324eae94503bbf379bf958dbbb4b6666cb182789468324a4ed178578ad91b2145ff390f661554ee42500c524c2a5d26364e49f20c5052ef7b803d03e87605f02f2bd8eefdc49e8d7d26fcad7126aec9828af3ee258d28cd821a297e9ab357912db8e369ed1d76da0c2974ac5cc916ba73f13b0c0be1e7591e823d9de2cb541a467aba8880bf2788f94d2efa2a4e15d557ebb0544f498d0cec6b03f32b176117b1c5219711060b7180c3854da1029ad915ea8586ef2d232d578858efad298d649645f43f8af8d47a27cfc9174b5ec12e3ce8bad57a4796154be4fccb37255074bbe4ce343f94209b99fa21266e20bd8afa394604cbe573c5c3fa6be0ca0f8a9fabcdc1077cd4f9783c4d1f75efc43183f749015f2639d3ecf2ac2880c70b3703886168741fabedf4a0713afd76e07f644ba27c302f086cc67dcc91ba81c40af759258bbb4db725f10e789f8fcf1ce415f3eefe38637a079258091e9a7a383362be1b65e25210974b30a44677fbecdcbe1b4bbaa9cecf3b18005e89afd9c66caf9ed1ee128ded3d82bcb692399275a64d14ef916271c48706be24335ac9b99b56932ed050db9603e808e75f69740542ea0f7c434a8b3cfc72933863d76e61a324ff898dbc7bc29b36330e6a952c8c814309f09c5d253b192c77a2dc30bdc9bf2eb865608c568a35d938d9cfdae9d04832f55ccf83f27b158a1eb849ac17a4fc378b038a11075ccc513e8cf5cc7c4c1a3feb0201ce6c22685015b0ebc21f608d7d00c214ced1d1511e409f26f4a69e74cc7003007afc6f06468a4033ce3b40158102534022712aa2260017eadfd185a799344d7141b1f46b532a52ba6e4a1d97ff33c807785cee2a1817ee5f28e6df495efb2e54d8e00688a3268d9e13a6a57eb7365760f1894342f314ba759b2072f424268e5cd2dcd5d070d3eccef06800cc8551642518d8db0eb76e8b57bdc684f15292c9d1b92f7d89f1d203e52e7dae366fab838245bccde628c373657d9804adbada52bbcbe33c0a74f2602b34cab1fdcc52ef458ec4a5a40a63c208965dfb09b43bef8c3880a102fba83ae7c2119a00606ce0cfa1f6b1e405b379538c1d2627aa97cfd3209e56eb0bd660e088791c5970ef9cbcd08a62aa39f46a0927728ae240388f964a5167f0f349c24f3cdfd33e8207bc55134f968b77047d0c9f491d25afe87854ef3fff9f0a6ac0e283d974ae80807eab01922328e3848795dc04847471d41ecef36dec93e58f57e031078b7421ed5d2c856906c94208120bf5ae3fe41d553de380811b312f9ed9b8b955166165e4e17dfa858bf4e050cbb8397335686610224417a7c64527c5a2eea397f5df025f06a39d49d36cbdb11f1bcd1d55bbc17adc5d5dd788ae45db0619b572ea9b903a0d3f42b08af49ac6d673c7cde3100de5819e1cdf872cb77eb07cd154125f78604cc2e4f57012052b29fe75f2adbc635b4e68fc9769378d142b2966ecb3a76a79eb546cc4744d9c1257b367c6e2c00af45175fd74ebeac1572861cc58cb5a7e231d336834bd99e41349df19e8b9d61882f66c6a22215e76b801c936fe340d4f133965389db24ce4c4bdcccbd51ed21463a8130e10675018c20b99d090372368508b09f50638adcbfa0f3fd04254273c3e24d2540891cb8cdcabff103ed027373f0f1986eda0823481ebcb99386419772d64018ce8fb452cf331cb209e9ea9c511c312a3f1a7ee31c8695da60761bb1ab4bb1302e6ed918bb08cf93ad3423418e67783492b284f3e2af2c425027076b4b47e2b60fa7a74cde2f111a48f8bb9d1ffb7182a3e6c302d59b48e91581b727b95900eb8a779cd4ef357212f13d086445c7bb4f7ecbd016f67f2b697ee552693ee3f20d2daaed9bc89e364f5a7ccfc632d1b19a58134374203dfe303fe53b542273fa167487927f11667be1d910944acc0a6e26e3bb70745967f0d94d278bc798d42df256b11bb8687ed5a00e4a00b80f2f7dd558e031e55d27dfcfce380cc41b96cf59a34d6a4a3611189a4b7fead4e0900a7158bfd13a7a9711155cd317c5e17630f9890090f27c19fae0470fa6da8af55eccc5bd04b8773529d27228e22ca30aa39d6d69f096a02dc9877a290dc289c549238e901224fa24f2d9c86dc0a22ea9b03f55c25312f39ed454588bf7f31a40b2f980d4fea1ce7a121be24b04b96f2d99d418619ed34184dd446d73e23a38b430774758797be6504008a9e8154c342eed8d79ad3c058597dad93da4705e5f3a4824bc21cc9cab347fb85eb126ab2bc651144542a7b62dc0ac9b8e1c95919594f008d4055299fc762e1c47895f8af2e3381b0c466fad562488ea6d012f7714df8c4615212805c851db077945468921e3eb9f3c3991848d41be9b3369d93f5d1e396a00ffcee40c2bbde0699bb2773dc629e36af9db33570ad56b7cef85fc19ff7344d9cf65b31d3c52411781ff762145b2df5a385380e8265f888f2cbaf63e193286a6a35c5ff72d60dd1b4d2c6da57b808c7b58421d424f402405f942b8c94356e9f20544814093afa820b271f25451df6e01fa28913fe01dac99e5f866b59d60016cc5da22c58616ab61e03dfa21d8e32d17ae53fe13fe4de84e11d25c5a540cfc9b7d8f84f0b408ed7654eaaabd993e80f2839df583c47ada559483ab240c78ca9b6a5136bd88cefd6f932497bba5df8b7d68ba319aa83394cd232df8ccae7c2b338f216864a5cf73a2541cb81ccae24128a2295d82fd7cecc5035ea7a48673906382b844907823800e02e3c79b4e87b5c53b51856e7a17993c1f4101053ea1a4eb50bd9d10d91f772357c14efa6452d7c587c07e1314cdc093e229971e2aa91dc6ee48b48754b155ac8ef9e8866685a03b56d402e80661f0c1f5adeec71d968723e603b764e5531b1839288152e34f30257ea9768837a9e7eb4cfe9bfe79c9f3a751608e00dcfad2f24ca339feab6b9952102e18bdfa08600acd717129ec207ea6b41b252b1a6821ad4c2fd02f7ff6513760f68f8ff3d641ce6997394fbcd291d1fe67b3993a5122bede1000e2095c851410087ccac2406f21c0bb4946b25443656c15919568665f43a2cb537f020d644ed82daa4104c4da95c3ff4782488ae4dcc61859ed6cac70078853f18ad5b191b65eec9e578fc49abfc4ab5e97492f2b4f10f56a248bdfecd2896ed10c0b7798d62b7d63c6c527b18ea4365debce0ac5fad8ad1f9c2d6ed90c2beb1f8ba393470f766b524a7c06d24c2d21870ce69fac8eda99c80ec58be9ba029c982f5784f26996a9ecdfcc4a2ff5fb1435ec19ffee46179011f9add10b0a1f47089e8b65320110b4090a586f03d07ab29525b32b60031179aa81770c2879a790414a65496e8ae759189739b0b63150413654da8f707147ab37a357446aa3de3ba72513a052a63c5f050cc0605d3dcaeff8f9741bc4b11034f18a2ed4ce4c5e9783151dbac6c664aaaecbfbc2edd117dd3e9596e59b09dad16607735d59d9bc049de5ff042d8210c57a91129c1d1fac78195223cbacda5368ecd948059e2dad7b13f49a77cf65b63eea94e66201aac66d987e15c5d15b4dfd7d3c0fa5f1eaa6e6878c2b819302b3785cd8e8cd2c740f9e80bad52e75a4e4a1b79c003f44021604af441c1dc810884c6ad7e4428fcc0f84641bb8960a516606f3cdd17354ce80c564c8ac2f1926b1e4280c531e27f401b1a379d7dc620860f2c160834cd7274302528e3f929c035ad3c99c6e2956e0acc10d930677dfbcd27514d84e9a9b1623d48e2c9916040339c88f69e2de89f0f082a94e8bac55986dd295e9db807ef0e33c0c83d28ebe604cda54e83dd67b767b689bf02d65861d518dd22f319f2e88e1a89a1c3a28feea89f8b51aef626df1484621463441707f25395f1bb375920869e500c34c8cca7b0abfa74005eee9c1642ba2e87a3c29a417334e74ea22da336abcf0a9618d7e404d6a4a07e298f7bd27c62e866a4e3f22bb3140c0d015710e6c9f4a9593d04460f4223716bf99751a46a4a13a1c407b1957fb71b105ce6df74a9023f389d5adf7cf0d83ff6178b0030a72a12ce8b9bf9ff08759403e9fab189d5a2eaa0df01e6417601be77cf148da4a1bb2c6b09194f094feaa794ce00155f03244324dd87b53d0e54e4c65cb18c24e285db5ea3e4fa1a5f32ff785506cd1d557548adef9f3f6783d4a06c2e2bc869d88e2f65dd7ccc84385fab555dfc5be4f2f479417b208fd312f35a2ef20f58d57037136558931f23b9b8047d968c6e04af37ec3a161a68f89fd0f4ac38a32cb78b6c629ff587d8a21175c81a3c686bf51871e21f238a6c21ca271dcdaa238166bc6090c9670415df90613dfd138b9648b59efa8010891cc1c75c892d3f5d6b7bb3ef49a5c74e8c009adc8864f768a9af4342b24bb69e84606a064aea09ef59a62d40937f8c6bb062d8b83e0dcad909a922e3f285befc26ac0aa9ea6b20519a8db44871d09fe401180b861a3941cc6abf45304b31749b81dfdea4283cc05cf1e41353536bd2c696817a144919a8dc49525e06ea776209ac3e4fbf2c26492578a0d6672bbe1a28853e2368d364b4dbba8bad03535452a6a378bb4cf26afd38bf82ef297f3016a4a2781de6d168ffe161580ef3e511b9e4f42a387c9ce600db0cda29d84cc0bad2b74fa4cd5c314d6ad244a51e3424a2452c326b81b2b5889855740da2be211a178a4475c3b411a8110c2af6d81202efb679aa499c03705da87812e1e14727e282879efdf9636befa36b5b835f026f1536d6bf09ceaf46348778b8b5ffeba71f818f1120f3000a8bd78cfe8fce408cd1603e8fe009267673cf3945c3668716c2e8ce6d5b167d8ffb4217eb50b49b26da92604f37e97a8f7dcd3cc6cc8d021d5e27295ab65819506cb637ee97ca76f7fd45646f8b14233813c1d8d79c3cd58f4156e10006e81813cc2410b2bf4012e66f1d6dcfbb91d33582a20d4da7e253683f652b813e01b7f112fb710b53bdfd40bda4d0501ab8cdc25d4174b9f1a8b006d912b87b9d6cd95c299accab395f835eb32b1ee6b2ea843507b9b620be5f6a423ab5951ada40c6b6cc3e66e230b5966d922328973080213a366274ee9aa3242ec40481fb49f6085c34b02a125b43ded3e1e618e1248a36b63ed4285f0eb63965e09e900142d9738091de0c07791b9548691bdc72e7179a2ac7b7ebaf7546fd01cddb4267332cd539ddf63f9756d1b7f6f0ddaa13559e4365d6067b25c570516914a93ecaab0060ecd06cb12b3e6cfe4ad37080da6630947629561fc28a6e0e0bccd61c1ce4ea759dbae9acb736cb456f11d0da1d95ce6acafdb9f139f56e5dcf92f3d7195bddf4f60789f975b6d3faa897284e12f806363d388ae8b5b3036300b7349d7f7218ee62f55c9952174ee7046f5e46de25b9a4d9605cee5eb64718c2f3780ab66c75c3d483a5effa53a6ebefc155e7747deb0c6058f0997b9b4d3c2245906827930d09bc50e5a5ffc51b21b0bfc9b844ea5c8700e8bfe062300727cbee2c2c9e1f087094c1427cd53806cb555097a126393649f73c5a601d33a46502e4ee655835c7b659c5392bc95834080b2d1d2cfe54ec631ad5d463eff12bcb62e937b3cafd39991c277527943059141c2d86c69b92ab3c0fa1d9ff1c9f58aef844f098bb5e31de4b4023009732456bef7c10e8af7e7ebbf2937eda84746d06a2c00577125b73a246927dbdd89d44f1d7c877d4778df513417f8e67c144300c87cffb672c4e30a07ef93e22dae8631239b26497f43954c4296ebb3cdcb6ec8103814b36727ded618fcc2b200cf76b7a55fbf2f90583f146046df107b3de4252754ebc386b9c6cc37a1082a302a7de4c106a5dc21292cb267ff850a5f24e9c3ad2d3e11a602e6133d27b420656342390d32ed2b00816e17f954ca9cc20f7cd78f11913de81fdc0f1fb8904edd63d10659f05abaab88692ee3973b34ef8272ed423710bbbd69494fe72952928f1cc3c9314572aa69207aae1df478d45ca8cf2fdfaa9270ccc988ed4d782d62a7dfd1354140c75223ded185cdc2c38638aaa0e9b9e47c752cfd986d8b83120dafa889ff57af071af28adcb2b690c5ee135c920576ec13342cc028e14e83d2dd4eadda2035c6426e5c05d3b9fbdecb1f278c26e7af41a117879912d6a54f160b5bdaa958d1b17d3bbe270b39516079ece025fbdb53b5629fba21b46fc6e919effdfbf1a44b02778dce1d725d6fe61a5a5f73de5bb16556f0023dba8bb370937a702b0919b4bb7e9a79f44aa44f8c0bf3d69ce51f502ed7f582e1d550a35614333a0b3a30f6f67020e40eb3cb9e6e2b1dd66125da67bfc5ff1669ed8699c5511a14e7cd29cdd4d0dfa2e59b413bb2a21c05fe5751ea87f2e64f7b76390c7ef89f8f7ee1af419c7314c47931ad56563c137185fb96788e036c699612359771290b77c78ee7deea1086554b5ce7f2b20fcddcdf6c349d1cfacf864c36f433485f03c5f4a981050198723ddf10a8c9440f6e0c33f25a2f28e8af1dc56cbc6d368aca8331aa022585c0627f8e939a365052b76dbc702edc64147244986599d6bf9f5887686fd58fc6f56370ca71eea536368ece4fd2c3b2ec66909a6a5514363f4972c2fc9d8a3f5352153e0877d61bed18e4331258873aa961133556b7aae62542b98f68d81c0cbf2602b12217fc76d98f76d0c5d85b3112232eabe78cbf195dc249ec8247f551a324395a22e6ccfb47ab276c663492c289c4a01ec72967f8dde5f59ec2ba55a7eb7429c4878bacb1bdd55feb1e06eedcbf11f00ab8bff363191a5b291fcfc3e35c56711bdc1bb194756848039121bdcdbe85d36844fc54e2e2183c367c6b45dd9563efd28e88926f1acb93d0ec48b68ed4749e2c221ac07acfaa47ffe0570caf22f85ac16ff8d3ec13372dae6f5589e3d974f0b6ffb04c24ba2913ea64e3757a481084b07e57c5032ce49285dfefb8fad9c427134d945123e942aeecb7d5cb623d075d262f073582b1718e491811496c9edfc341ac64bec71664a2f94e3cad4ec1195500d748474c261f8645ee804cb25fc7bc4f222d7d47ab954c8b3a8cf412c166a2be85e1134941601b49e28838145e0005863a2e9e4ed4b56fb65cb1ea61c62cffa46d8ba3806393b4396d6f0dfed077ea6b3b786cb9d466a50c7a86e3c6fe17fabc828c3b6a16c83a1b1f4b58fe84ff463010643db533857f8ad89bd08d440adc6cf0dbb129035b31d2ad2504991df6bd987d454529f4385d42af92fb55508d295c11664fb559b42d23337f153f102c2475627e142aa9838e5bc31d36bdfd9648f1c9620e53e6731ddf266a66dd091e0a73727f9708d420df2db3ef4cef04f21795eca7f15ef159db7ef0cf64b473ed5c1e11b7414f39ccbe09773a13c8311cff68be02c66b3088dd617055fd960b2686fdc4717c0abf7c806bbf963256bd50b9500e9f56a992a04b5493847a6bae207aa3fb8b6615dc500506fe19da33a887712060d41bc541b2d48beef3597625397706ed134ac0b50b0d6fe8f2803b9468c976fc275cd16ae945303e1dc9acd5b0694402756e5a42b5b58bb6db1f3ad2b13354f12d438212758947aa91ff7ca9dbb9d93bdb1b338837e0e712351eaaacdd504f3d1c7daba352584b693f1b017f5d46c5ee384e0d56b9cb9679a618ed9578dac2a23c39520740b01e4ac842acf8ab18e3f87a3ae82c94b7a0902c6123596dc87cde81812322e0bd99447a694242b9090697a114d108d031429dc032260b45e6b35adc57dcb63b07a175bc28be198168e4a530ad0b5eb5dffe5a6062810955839da8b4f33287a9ace2cd724ccc8f2b0793aaf2604a5bf35252588acd00311b0d05997306b2d2415d294b8980a33504465f4b57978de1dbc9c98f52c4c734be91c66dcd8244387773ab94a68961723c3a3221acb752ad4eaf5eb892f1b12a601e236ceaeb5dc7a8394b5717202a6529350365f66c4610c4021a440e1fe89c0d6b5b57d09f4d47588678c65ad4f7d5952298d10ef555957a15f9454b9c604df6bd65aaebe2a55510d40cf19b67abbf6aa502535003dbb55752dda5741956a6438cb505d06bb81e0b790a89486e3c0d40e5f80125a0c63786e9a1766212f5fe337294f88d7add46391ff5789b71fc626fc2f133713c522f957096f1bc6baa124f1c14af64c58404ccccb3b3ffbcac9e842b761ba4ac7a709639197e0b75371f9fbc8b008cd7857815400f73d1a0f804660413b374632eca918dd3447e8411772b949862be68ecd0532836e93183e6b1a17aadc566e5f824134e72949a40dfc1d99ce89f25a44cdb3a978357bfc364431ccc84066091a4b5a4a73a489fd6301b74bd169b1d8c1a80e21a811c241bc6c98d2020e493a0326d6c264644ec4c887cb042d56475e555eb6810c625a8c0255c2a0ad99fd8cf0b6cb2cdd19f3c1ddf6929d5fbf48c8f1674c96598fd7ad35f999d1c64f94e6b01f74842e66792d87fa7477fa09d001c3eb0ae8b8d40b71ab0c2c67f334eabb36c97885b59e44465ee43b425992866d9aa5b78ff28685822378c801a5bcea1ab9c26f5bd5697b7784e877ec6e3db18e85605fec1540cd3cb4a141c5001082c97156119ead7b518fdf35725c9a2aa0613cebffa6711aaa3b92eaed30aeafcb751dcf044609edffa793c1dd90e62c30e3b8b45bb6b4ff333c10c475aae79cf40bf28c929543ab94bb0470fb00ced9a3cc7890611a984414698427e0a7616a948d42e18e16c5b63053093e5899b526ccefd8460d02a5f934f49351d6341dbc3fa8b8e91df3b4629ba5cab40f5b650d6eb2407b816f2985cb49c91b7caca691bbbcf454f2591ce6fa7efa173729d6638ea43a7c5a909bf72313dab0d61308fb303d7c96fd22455d1d78ec56079cec2cc6a0b7c5d6c8c1929a768710727440bb2b3a80bf66e36a8e4b6e7a0f89cf52757c96f9a62b0044c1fd4de21038450033b6de47bf9c33bebef6d9470872cec817d26e2039a9507b3efc342aced3d8c157a1e31b54105905742387c6886904250f79d0422ccc6d434f96d9588cf32883948c26c64f4c6f55f4a22072d438b0d9d24ed4343486a33e22f04459625ce2eee4a4321367ad9fb727943a90c65746bc6025df18006b2bca9f112e4080ea957105e3fcf802706bab67ad26499f5c6054c9b619831661b77e0937fc76d8e05979375d63fd4e6b457d18c3c1f0de368b6e5e0bf8412e10c283f2b383a4807373d261ce8d91fe5c46da18abd1cc5df424df288dd0facbde848f8a046e8ea48c6f9d503c319cd2cf41b83629ac5055a171c552e2d2ba014646952614c7e4b1fa5e1803c980f98aaad87dc683837b0c1856b2a9516a703993c4fe1e0449e1da704c1e58302131b7e6b437d62e25f1239380371e6fb21f6bed6e65b0d482ae86650280a96269d6f99c89396b8705f6b84fdbbfd11620297c9b94844c6248a42661cc8994504a7147f9e16423dac9ecb8c292cac1bf52b4988b714503e1ee1c31ec22b26c151db0a74e60460feef8493be32a6281cd3cfc88787b16199fce15e3593b4949e9c204c9c967b25e145435bdfd4615414b493b31494143189ac070a56baa4dc022e038b83a9c660de396694746acf23adaa8518b32986b2a071c669c4cde4b1893beafce1b3c912c89721ee26e262f195fe05a2e05d8a428d9c5f33fd9b08b69d5af077bb8fdd61c83a8762e851a4e92efdb26ff5d95d50b1ee3f70eafc276432e1a3a4fa4c17b04f5cbaa3c6f26f1e138d49a03aae356955a2010b34a07023e9d9fb8a2fd0eb7d71911278fb9c0fb728d4f6df1a98b838df5654ab907eabc03d5e638a950559c0b0c385415a04095f6961c5106efec93ed305a03f78ba2bff69231b0814565434412b2b7dc5bee2d654a520670090d0927095c839cdffcebe6bd202f090889df4f4048fc5efffdcdffa0a0ca0ba488df4be65b2f6f6488f06c6f9b454532532b14cf59a65414e5ad4eacd43ba36cc249f471158a9332fdeb3ece0334c50055069ae28c481e94be2a9056e5592479d06f7dc1f3bb975db805a6d9049abf2026dc6ccfc9fcd0ccb7fede8039fe05e2781bd0bf066ca42dd39d4cfb29a54bf4fb1cfff37d0effef6bf8e33d8e10a8df7b207d037eff02bdb701a558034ab1f5f2f1beef02619e0664fd0c885f065c7d0b54bd65fd6a035f3edf4f408adf0ff15e7e1acc0f0de11f52bdf7f44b62c1d0bfb7c87328fd56146e096ddd0a627bd96f7fc8fc2d0ce27ebe0d83a6fc0449d7bf64fffc9f39a77da0f91dbea490284169a5fbf813f107e22fc4ff251fc9ccaffa3f76e697fca029f483faed074dd1c29fede707d997e1ab8612e8b7ffd36fc39ff9db07a980fb7572545dc13629a5946aee5ea7f61a582b3592258c14ae20f2a5535addddb56d7377b7bd3352f953baa437caf654db7ef484d1f3d4be740b52d0010ddbb6e7b6f62c968341185c974518ddcd12c6f5b284e16d1b0925e032f540fdedcb1286cadecebe203586d3e994bad418568cd1c6185263488d51eb9439947279ce29358665434a297ff450f90e685857107468d5b6e01d3058d56a1818e75fdbe88dcb15426b86ad4d62390f4b0833db9b13df62cb0b33e02fcbd996211ab4d4404b192b50bb4293e758bfa2e5a90a8cb39c6969d2c2b46d9d262dd6729447573dc385b15522aa4b3616b8409b386932c4e04ca02ad31a37b42c2acba472931875316d51c354214905253c636a72818911131c8216238b5d35cb991652d96b6206ccca724685863ceacc33a8b4d084bd2c675450e8826f96331fbee878c13459ce7c78f2c10727275895e5cc872780c05a96331f66216811d5ca72f6030d665a40a16bfc3be86a7094575e40ca483a53c943524aefcd52a3b3bb1d06524ae92ea59452b6fc6f4a43f7f64abbbb5b76774b29a50c15dddd5b0addddad6d575c97724e9efa62cd0c8fabec5c985ef6d05852fce983cbf25d23d4308163b26c228a2828b0c6967add245d3df65133e5feb652d4df4abde36d91c74eea273b72a6450db99b28f7efd0b9228beb2ca093a83a15a14a80932324151aa9b1341079eb97e3946a28519aa230a30524b0d4e00c2211065df410050f27f4f00619ddbdc588052765c4a230b9414ce20564746181922d80d822ca1975002a28c480a50ca72c2b882e195801420919941c7d11bbeee578936ff28893bb9745e4eebb0e8b2eb9cbe287dc65e106cc4767efb92f88d73758c090efdfb75f90bbf403a7eb584f479d2333122c4947a96769490aa6ce7162cadc73bf7d41389e0fae5822265abcbdbca20bbbf3b1acd17a4552aeb2675644f917058fae599eaea6fce540adb5f6890b0d771b5554d226b4224bf6afb13aece0eaee767d41e8b4c24a155d647f1a0c458bcc9c99a20a18b2bfcc05d4c002892727ccd0040a09450f5ea2684202cae907c943142f30b38ba2e288ec4ffd5bd69b9a8408e2062849348183e80f739e1d175c40c30e533079a222fa3c727731b2efd0c491bbbbc75098c94153d131e80374ff904b4db2dc4e34c5a0498d183c21850db95fa7470a2a723f901e72cfa668234837e5c043377730854116d97f65a7680204284088620a2c8a2ab23cc902031b7a584d58ccf891fbbf2f48b3a0c052c54deef78ea2d0babb7b87fa4b2c3164ffee0be216567b9ab8a2bb5b4865d292e763c08948735f900e42e72c6f3ccca05041ee7ecd4651c2ddddddf444164be4c9123038b1c69798119523a628523265c411d314e2508e96b81b0f7874b9a66bced91352b2fbbbe5e10795d7f2704b004eb82143e5c689598fdc9f84ce0c78b4796e7162052c3209d35296b31f8ef27893c8f377643963727297b6251dc9d339d9da4f73bf0b07cbba649df0d30e4ff2d425f7913c3649e6cc974ed35a9cc7ce29cfad93eaa7b09dbac06306dec8f4c776ca2864fa5b14e5b19d62a66ca1a44b1ad84fada59d5480df89822fffbae43cd60532673e114c4ae4f9636dcad3893c7fc979a4c8949b9c6c92e491827b0deba49a6702f174634446174aefc8591352f2bc453879eca42e529ee27893f27cea7d4484d43bb39de4f9736c1af2fcd935e469431efb499e3b635ff1345493c8f3e7b879c9f3e768a9642aae02af8a151c2c20e4711e69e922860e799c5ef2cc218f732ae3c7cf4975319be494e76f5e7a6793b2b14d6a93daa436291bb3325bb449d9a399349526524d4267e97e271b366a49796a4a758929d7a1de19ab5195555995c966519ed528cf7a94a7ac265d11c5fbfcd331d10b7d3c677a9f335f7611a5d8fd289f8678df852f9feeaf8f17be3aaa9d9ef0d84e56093c721eabe439f36723b9f0bb92fea99192946c92e7cc5aeb5265b2e10892a81a648ffe10f452f84a024483ece11f820fc82e392a16cb347ccdd85097dca0ec92634e6444b22e2a72d244bdf39a46d326e539df2e59269b6495eed257b91247cef9529ed0030d9870a1e4cb094788f261ce0383f44693a7315a682a42948f5db7e9117e89237d983f7fce23fd49ba48efc8b0ff828141c8ad01c9b343e6c81e6e7442eed91ad88c1d5f2ce003c9f33247fe1450e4e6c9ad002a9f28e5994d31234872cf5ef024f70e2773e905529abadca1d32bc8a3f774244911238d81de915f001f95257b346d3e9572bb5bcf99af9fd0be7eb6d77e0b353a22f1ec2f3d9440c7bcb91a6e6b79caf2bdb5d027f9b59d1a26df2bd5eaa6598e729cf7e4eaa6d98db3ddc6d98ebb9d673dee76defd3cd58aae56de7325efe7a9be950a7b2b2938692525cb67612b593e8c529eead8d45413b54caa090b154d58b43831cda3f964429947f3c994328d5a0c2f51528c29a9fe31136182e30f8985e9626f8559442c98988a94e5b7aa146ddbace5b8eed27bbde7b55cd7ddeb79dff5be4fa55aad308bb258de93a55a61cc62c1c0c4b468abe53d5b2c989898564b4666a62533334343e372d54c9b1a9b9b178e9b1c3874f47c4f84996dbc06c7960833df97d7e0cdbdf11ac4f18930730e9a2387f7cc6155af11b87004ca1387558d2390f944c041951a9cb934decc47f3c1803bf4b08dcdeb355fb5bf7387a305728363975425cb39bb241b1b6a63e36d336de48c6a14caf33dcf69dde8e6bd4d69333f903fd22c250f5a4202cac848fa67961f095eee708606b0e14e29b1b5ac11b82ccdfc3247beb5ae235fd0c4519ee18875b27c21b20b2094c8a18b2836581013e50b711e0b74d1b284ac054b9a5811a5944dbec4bd52de4e060bdc2fb1c09e25dd825cd508d2892b3af7b78193a634f2ebf627c22a73d882fedbefa01e9b0f6298a1d91fbc306a90e9533190f00e3e69477176cc257904e1879c498ac3a1643aa53c31add0e0884c9fbec5ae87e92c91e9f70011e20305834c9f889cd1e08d4cdfc89126997e122f64887de144c694e90c0a8aa32f5c80a444cec078ca7416460f993e5d820205fb17c4311bb9bf314680d1b4d87a34c456f248d171075d5461b15774bbdffb8370bc571c372f7b9215e10fbff71ffe8a18b1458c7c4f47921431528b203de5485204c98bc98abea7573dccd39a777d546c161d6d1b305224aa4a11aefb3bbd1cdf7bffc2e0f72ad0c318ff87bd7f81538401836efef53160d0949f9b7f7d108e5f7539b6b96d7583a718d19193272935242bda2a92ec08ca91cb9cc70158b00c0b9639004b4f8f57443edd1b06b15fc31108e5cd841fe2bffa21fdafbf1ef8e25ec70b891ff8e2c29704f07bff83df7beebdf0e6559fe385c45ba4796c928c2089f9604536343b4e463433f722ccccbd2480fffb1ffc5f0834a5fb1c21108ef0c5bdffeaf177e18feabd10e8267c71feabfff9d7ab3ee65f20ccdb80325f03b65ce08cccc7fc50eb613076b17ee68786647e28e6f1ab68304c4c4b668625625611cfa143aaf79e0883453c47e515c99e6499be143bc9b6ccacfed0121df17b19169da79f04ae3cc328434bac387f0916fd47ffd13943321dd17f0916bfa70f841619cd236cb4c247cef3aaaaaf59d5d49762cdabc25775d5804fa3644792d02f7c714a32ca25dba929b279197524894c6c9c471549c36892230d8b9aa936d5b6fa97cbe66b1e87cd7b604dcd7f6f53f33868fec5d5bc144720d2804f5a2145a6d6da6d8329736274b461a339e7c446ce83012dd8488b1106b4744298b81ab08419334146c91a64faf34854f7f56b18c4cecf841717fad8d4fc36f3343f24f32f4c0346c2357cd808e790e94b6c2479549b773d919abff90a769e9f0f8eaf0183fabdb701836cbee68be0008f780efd1bd0a5c9f0063060034ee1be060cf2ff6c763dcdffb89ec6f535fca1f95708d44f4303bafe05d2bc0df87d0de8f97fff13fe74beaa9f01592f03e28f01efb74018aff524494c566474849474041f61a38661a3a5ad656c58512a45da3df74354dc5f8e53714b4c494a494b4c494a1f4729a594d22e7c6918534a29a59445f153181af3dcf774f5b4a31e55514b875abfcd24fa1bebf1c77420eb3910771dfeee591dfe18160bc378d3a64e9fce4fd230fa5dd75c3797989294b82e69892949c988eca13da54f29a5946e0ff3ad51fafdbd3423f429b7517f23bd3387fe03cdd34fff3ab879acc74fbf9716fa741d97c4944429a5d407261c1afafe0e510974cffa9fee59f8ae54ff797f87bae7be528e7e77bd8fbe6a6529a5f413a2cd8aba151012eb05a3e65db2872acf9d3cc13c730690e7bb7e3e109f3b7b86a6ab612e31bcfbce2698766a9abfa262364929a5924f9b5b5258ca77b96bf68450254f252c383a5dccf2f883c95b2af58e95def11674fb780fa4dde5db6bdc5b0a48b1aeac5c6d3ead93ced5d24ac9257f5cfd8a13f2f69458bbc99a6c51e282c2122e4c69b0b0e589cb0c5c8a665ba420e202e539d27291d4556145d2175092643093e50c08a52965a5b5d6d1ab63cc29bd6ef58ebc851be89c7edbc23778035d7a29a4946a76563a83614c7550d82810337822fb12323afc0c74f0a0bb65504577379db09ba75e93a93f89915d0646649f810a4f58b2bf85799e24838d2f454cbdc0449292e4f2e58a339ee84286c314de430e55d09e2daee4eeb74f4e72bfe6b9fbbbfc688aeceed3cb9d658b2759723ff53c77876294fd4370cfc1c57a1ede6185eceeee4e9dcb0b3a546e5c2d309d479034acfb5b5e8400a45ff6839207c898937becc91b0081f38440e6f45472851b6a7c40f2681a1a29d2b0fe961958763b1057c5fd0480e4e1c20f8c04c83ef6c8ae05ae597e812a61e60e481efef3332279f85f2d78944c42ac65c259ab1a7dd5d0c788e7f857d164d847f27097cbdd2e7911573ee892c77c58c3e6ef08711a36bf6506963fe2e860295f02b958ca7749f952cab752be7ccafd97fbee87cc976190fcf95d1834e5a7fba0f91c97a461cd49494d39e4bee46418c4bd74a0293fdc4b97aec74db99fc34ef7e5ff5c19024df1f0673e170205c9e77e862f0a1434c53f687e47854421a08fe7f45fb0fb6752ff549adffdcf94f3bb57229ffb0b069e49b2c796bbbf48c9f69392d702967916716fc3d1168556ba67b9dde7cba7adbdd8ddb6cd6e2008b539e73ac8beff56b721f76eb76a39d417525fa77e4fedc29efa5dedfb2b095f347cd190d20d94f9d6966d944996eff6fd7fecf640fec37d8740fdda2cf872c2811be86341a3a234788652984bacf80dc97ac4ef9758b15d62c3c4fe3186f20c2de911675e66c59b1f6b0264569c41800c26cefc90f58833ad76d1bc8c72337d682e18401ca68ad2719e666a7218f71488f3786f53f33b744258c36053acca02619e536970f8abc0f67e1cabf75e7eaf0df79521c215562bec87909fd593d402934b128b53d576c615d3ea69d565f5d42b26e769b5564c4cad569554cb913c4000cc1cfa0d0e2d7951ce028caa3c0d3012205318acfead7fb7d0c7bd7f0442599b01ebeb573f64f3de5f07bf6f50f5dd0883c91eaa4c67fee687ccfc4df8aa4368bebff921dfdfa83ec86ffe260cea57bd145720cc7b20eb5f60eb6dc0987781f86b4099d6c3fc50ccb35e5359d19322875fe687865a3f04f3df0fc5fc10eb55200df8d27e067c69bf7a5b5f47c6b46428141ea2527d05877cbf7a0d9480ea8356ffd9eb81af124cf0f1be8409ac40296281d14dfc5eb5c2d230fad25ee7035f5ae8e34d2b26d88a290a46c836cc13edecf6f78768df8541dd6b7fc3a0293fdd6b0fbe7ceefdd7101346e83cbfe9cf9ed3c73afde933b4b59caeeade822ffffbdc0fe9de8641f6bbe7c2a02941dcdf6ae46a20a61d483fb08186c92eddd40577f310a4d3e963b3f265f7fe43ae5f398fb69f48ab1fa2f282beb9fd6a7bd5e6b33d91ed816c2f64fb42e9db7ba18f10cfd980b0803d0c9a523fc8bfbb3fbbfff1f045dfffa5bdf7e14f872ffafd2f6dd3b9449bddb8172276e08b0b7d80780ed23c6ad8b625796b449f0d284521ff1f0fa8e61dc886fe074ab107484f4fbeee7d60cd5f9f1791efbd1fd2ef3fc4fb5718f4bdf71e064df9f9de0b5ff3c3d77cd1bea7e580e94f24fa4d5ae4f275a3e578efe94f3af3f4486673d2303a8d6851974ec41ba0da4822126b786ae3a848346a6aa3896883d194d40b220d4918cc72b684c46bcb2a0967c72c96ecc99b2b07ace910e3a955d264c24d588e80285e7c1a6e12400a2d68a395c38ce5b53cdca25b72bfc547b9514021b74b268a0cb2db28f0e8e1c026ce1b643065bf12d372e50422b2ff6cb58476c0610a2e5cbe20428a14645278e388ca17255e1842f4184461faa6e4d91b3de4f65adc12b7ff36f881816796b32929790327532b9079fe9c3b5722c192a908a8a3de914c4a51d9998aa892fdb727bd3337281b7dfbdd6fcffd10fbdd6f2fc4fdcfe5fabb10084828091311239f14c204259d7eb8ef58cf3d0d57521df8a21cf8a2dd1ff607f57cdcb3422097e738100cc8daeffebae8eabb0f62adbefbefbd7f5116f8a2a19ccf81f8615e48544da518592b049a48464a48329889559d6c1ac92085af1afa0889342f45fce35482f9f9ac079a0234e567fecfea6142a009b50a81a653170241014da6399d3826cea99b536a43021b7cd5b7dbf70ff9272da47851e3281613550ff3537ef0dfbff755ff735f2543fab90f1302f50d1bc9e8fed8b26b84e4322829974149d18033a0c641b5d4bbacf5fdf881a6fcc4fc7d207f990244981f95ea71a80a815a616327a08e09974c11a699582f45d68fadc40a5ff585c42d29bbafc25735da903cc7fd5f48dc9fe27dd5af7eb57ad6ffac9ee5bf525a3d0e817c15ba0a09c973fc393005588adc8f6ec421650feac22f94ee3f449392218c1b6e608ac54467f21c7f2014c85aecde0b5ff4bdff7e74a5ecbf810a588a4e4e4c6e658520b264e9d2854128f8a2a65851841145b13b02955199e7f8bf5e3e503f3847b9a143798e7ff7dcdb50811130b494251479a448dc4f917b232ae336a44c8d5e43a6d8fd14bbf7d1a1b214bd1bfa6c4647a34b657fed86a8ec3f6e46d97f8b6d322d4a93ea9e29fb8b86f449838aca4e99a892e738559a024bb113671ea952136d1a26089067b682917c34e0f9012fd3569ed4b78d4e1f5b2d0f6f5ae7d708af56c366973dc4eeb3d5db465f0b698bfe4080a63bd47b8996bdd6bbff6cb5d7caa387fd89ec3c98ce0fe67729d4a56df3b6af3f6e4f1be66d3fd22df47ee4b1a7c7d62a78c4d85fa7772a486f7a473e6d699e3d2f18ffd0aa2b55fa76db6828b790229158f2a0b4cb985e10ad6cc673b94e4943af7bafb60bbd2c25f59eaa5e4339dd5dbafb7b69e0ec9202e9cad10ab60c56e52f4b1cff42db2895545249259554baeca9ca1ea0efdaf6bed551cb1af8aaafbd0d19307328eb691d87d117354b652e71dba80c8bda6b1b28b3a2f655b35c77bd4fb5c22c9898964c9df9685c3536af1b1c39743c186e80c341071ec072001000efbb2c1a57065706d636cbe9c881e3e66553e3a2999109abcca92feb086438e8c0030f602a1a52c9a37e3dc16b475c896339a79b50aedad641be96039cef68148c7e517e837c6f98af07e6fb7dbe2a1df9ae72e48b71e4cbbac917e6956f8c4dbead9a7c656668f2a571592ee68b2267c035ad7c6d5e30f9dee0c8a1c3e3fecb170c6fbe1be0781c071d7800cb014000765070e60beb80074c4543cf5e371886b6e7a408f3205fef205fca41c6d1b42f0ad636c8770bf3b560bedce7dbe9c8f7e6c8d7c391ef7793afea95efca265f5c932f8b26df9896e7291c9132c765ae4c2bdf99987c6960f275b1f2adc1f9daacf27da9f2bdf9f2c5e1e59be3e6abe3b97c419b6fb881962f4ecd97039a6f079eaf079eed7c733c80c1541e4e214abfb6a6c57ec11e044e104b74ec54ec0361cae64f2185d38e35661bace145f677d5a088ecff6c10657f181b5d041025da7eb2507098222de1e6ec2a7a27b7940aa4d0f802e5792074e1d2c2be2ce57e49bdfa82146c189186438dd15fb0e6853371995e9c60c0b649862dd3bc02734924813522a80b5803c2a5f026c5b95003ca176adc80851a2bf4106a9c80c61a47a45186175ee8ccd2d882a680b72c676938a5d1a4695c9be175b1a205ee8ba3dbe50922fb4553d7c5081736a828ae4bd20a1a0d9e6c171a66a850b2ad0b110b5030d020890b2f62f042c6851429f082898b590b5da481f42c37ec92ddacdd98a8e2830e555430832a2e5026d8cb72562585c9068ec9720644d4101033a032e056963320b2582a41e8f991c6104d96b32160584ae15e7941c6dcdb8a817156e355ab3eaf6fd79cf5ed85788e6c0a5babd47bbc7d7677b7b5f6758caedcdd322a0020a92d949f561fcfe906a16192877ca17c9bfa9b804afa32fb4b863ed941990c56305f5955d6055b24532be50374e4391dafdcdd9f52ea9e1a31565a8d182beeeebe6d4d965a6ae9a6d533a8ddb45a049dfae2deeb556a37cdbdf9dee7764e9f931661a9a59b56cfa076d36a115add2cd5ea7646d5b4ba1541ad568bb0d4d24dab6750bb69b508346c3bddb82f887dce3bdfecedb44a6f8786ddb44a3727a2bb5da7e4deeb558e3b9239cef3be20f63dff7cb376b34ec4f77d41ec7faef2cdde4eabf47668d84dabd43a11f43f6de59bbd5da5daedd0a0b552ab1161b74a3727c2b16ff6765aa5b743c36e5aa59b1381dd63ac4c295d6e9af67daaad08912b81b052640e9539c491ba04ff44f9ac56b86a5527bbe4199bdd1eb0bdfdd5478208b0c4f80b521f53a308fcf605b1ee5bd5963c168b05e3407a7a7a3a29ac2f88f62c1bd33e2034cf2c2afa411400fce39673ec1f9932d8ff46f4b3a8b347c27132e58e0ac7b914356531315f10ff984f84d9e964ebd27edc787c1c991fb419b38a521f993ee614f941bf0da9481efd5a1855330da714c9a33fc6082976b376721dd7c2022f654f00d7fd00a173b870688afdfe2558e4deb95f82c5ee27c646181fad5ef543bac7ddab3a2d87234926e8f2efdcdddd9d0b5fb5ebdcdddd9dab7177efdedd5baef74fa27a779af7eb2b776ff7d9fc9a1e910da317fc9e057a35dc7717e49e0576ef02277eaed3fe55c3064720d200f7add67677777777afedeeeeee4618d0b2492192879b407f04337709e08cf977ee6fc3235ff0bc558a332ff32a508aadcf6768f5aa18f03e0d08d302a7d8e0cbe7a3e0cb87fb094891fb21dddff9f9c4acdaddddddddddbd03a5c4719690d6303458bc84db48725103983cbb280c2bc46562a71779ce2e1deb9deee7f7d09cf327549e515e5cc8f7e9fdee0b7229878612948933d008b259cdcb1501b99e51c58c2f9800eee456f806eeffc396e1247b1960648f5a22bb1946d967661841c62c3b6ea37c27b7065ec2f885b0d64209c2e630460daf4c3f3bfef3aff64d82cedba645a0be3fa04e3fe1cade713a028dc5a6845590045d2b102dc1df981aa163333441933ceaf7cfcf49d0599b92aa4af0ac8572870e31ad7bf777c3e87cdc43c51a8581481ea128455336f090e5e90534c4f942248f10122ff8d2c3540b76787286387b8a8f17037afae8a78ff388a9830d76f383f95a138cf388b1e48140174cc2c09285951f8cc4f92ec9d38aa1c9d3134b98803213a714b5d6dade72ea78aab5d61764b9d65a6bad75d65abfd62ae5d471546bad454fb9d65a6badb3d65a6badd5bbd6aeb5d6eeeeeeaeddd387e7faddf4d138550d77af9b66e3ee5e5425bbbbbbbb6bd4df9d524aa3b6d7b66936eeee2e4c65777777f7df344a29a5deb9d34a9dbabbdbe9a3f3bb6d61a6c885994c930b4453662903e96e9a2d34dd2a3736e9ce58a1f294326785721e21b3de58f3b0aeec3ab94757cad00d79bc44f7890524260b4479bc5058b7ca55caf32b6d1a82e481c7ce4be7a577a46c96b28763b794fb65b260f950b2c7ccf33b99fc41964f956a51b7347d684b98b2fcb16bca5d972cdf1b02774e59cae943e6f9ddf421b33dd12b123accd8fdfbfb23e104b4865e747baebe9fedb51005af21a216ca3c717b191587a41cc048bf8a5bb8248595a87d8bbde3f563c04a4a3980d13f12dcbb8f564353e4c473d523b5293c0f5f3ef4a512999581b49c69d45a6b6d10ec77afb5d6eaaec504a52771ebdf2a29955eabd75ac34f0dafd5dddd471d9d5a6bad5bb07c5b6badd5ab173332a5d6059b96a6a0cc46a274af9347f945f697dfcf0ba100c8beedc218170e2de121722f8b11eddb6c508475f2d8ca141c63ea8f5b0d81ec926b18456a72946c64fffa13945fc121e27c4a6b100a64962251863199a5485cb5f29c21907c97e7b4b2fda1252dda9725409ccf81b20488168888e7f8cf9ff2c3fdd89f2110ccad962b5fd3344dabf225b869c1a107b4efb207a4d5344dd3b4ee39356d7b9f9bf7a869ad815db63d5859babb7b0be6beeba14496bf436eb95d64471d8b64243577fdf94f5b9aa6699af665399baa92e5574d764adcce876c6badb256ea39617f55964b781185277bcc2c354da334d3f7af2f7ff340fdcec15a69ad74ac5c681a48c2075728f10650aead5d51a1cb6cd7c2b102f1eadfe53b5d00061979dbb46c54d3aa04ebf69bb6bdb6695ac5a15576e55fda06a5b4522a434d0c4cdfab94b28dfbd3872bb3ed9d3624a5b471b892524ab7580f5d3e8d1ff02d1c17b9b4637c197e6a60fa5ad02c675c2855297be4b1beacb2beac52dadc18e0fea7b2c78e3c6a2fb5aa895043291bc605d14450f298a513442a64e90491932c5778236b593ab142176be50a91143b7a22b82014efce2916bce66b42a09a7785342fd3322692441997cbf5ae10c8f5adf0351302cd84a05d0282ffa04ba603d4c901c2708037604f183e42943081eec44a02c33cebefdb572dadbe1fcb648f03e486227be0877920fdf180615efb7a7ae45cd2c91496e9d7d878afbd0d5803badcfd7f7e0cf03e86f51f08f3de18035eff8268aef94b245a8679e38d37320c4c389fb0c0e9049c3aa481c72965498759ef8c134aeeeff6f759c5be0eb2870832d37ffd37935e5ea5b2f11f388966d1946dc1abf0ad0c2440c20a275a80861455b2782a362c91a2c4088515546109336bffe1d0fd6c42a2e52b97acab7b0747245af6de5270ecd88c3949354531412d3d51ea4deee4eeeef61decdebbb5bb0fca3c33b7fdcc5b38a540c19fa568300845c1218b2b6ad8a18d1538d1000d54bc3c9531c50b3a348fcc22ab142973cb6c3a6da90255a9cfa19934877ae745642e0561c9828aa4136420c6196273608819a0704852628d29b17f2ef54fa696e21195acc80c6884c911cfe96f8149545809c1f4cc13579848c944e6152650f2bc2b202140a9645c20ce33c5a9f3451704eeaaf8cfef719e7e4f096b2ba863e0870117719e12fcc0830b9e1ce9a08311e2ec22c9288aca96246ac0449cef43e436c1d2cfb812676ce7918961adbecb7d0d5f3f40db57d70b89362f24debc9098e385c47f21317c2111e785c40e5e4884bd909833d382c12aef35ed85449a17126b5e08c70b893a5e48045f48dce085440e5e48f4407e0e887bc030f03d005d58e00e3800619e331f3b611c7003b0270987a00f080a09033f58440748c40b9c03c4011a79c2a3849ab1245f0c78945279be0d388b6ac0290303bbc07944034ea30e0a1ea7d18ccc8c8cdc50e081c2b664a515d38a6135f1929ab060c089c4026792148cc1a9e473a98a81c7a9a4fa54dfccdd5688a62529ed45089b9b62dddddef5ee8744470d21f1dd8eeb380e0a9818141c93cf2620f0387f4e4d1ffd734ec99c3935a77ac9c3114f2ef383f9736a4e354f4dd18eccf31b8908313a694eb593993c36943c5b4a9e5d25cfa7deed858b17ad972697af873a36a7e614140742b43d7832e7d48e62b1180b491a155fe47e985a148bc55c10c252a146ee67d518129b92dc8fe9512c1673b25df162c8fd2b5a148bc58c6260a3e47e150c587449e4fe2f6a72716390fbbda7582c4603199c7fd9aaf092fbbba8582cb6025d21f7734fb158ac058ac22643eeb73478131694dcbff5522c167ba186ee88dcaf25c562b11aa0c064c9fdd505216c0b487c567cc9fd5e0405a724f7370eb11815ab14e4fee9b52bcf8d0b3c3ddb3c9e7605c56183d492a6156243427a57dac6407658cccb8573646c5fe486c26435e96a903050a615e243427250b41cb3fc9f3e5c86a32bcb7f4c454fcf8645bf87a5b9231d595e61424576657985891515624d65285d9952fa418599520e5e28c98005cb6439533aa15b304419d309cf64391b028b2e43303151220d259b124218f9d294941f20f4fcd05172844bc90b727f595e5192a49531b9e93dd5657b6eeea2ae4a35dfdad68eeb582fb870753b7d6bafb5d65a2ba5da9c78b571d6dd7d14caf21231e79cb5c874e94770b694ca23986ed5ddddbfc8bb3c82dbdd6b75c7c1f9e26e4f4d9cfd608949e7830f54dfca66d50733279701f063a8dc5a3233d2c3cffb4810010bd3b47737d7ce079200ad1ead6f2d698551330257e5eac05c1c8d80645111641f816559956e15cc00982bf54c298ba3b4939139fddb370e0e8ee5965aaa8bc032e45107478a12255e03c6697815dc928143815553a46088899ee156965786a850273826cb2b434f7a0ccccaf2cad00aae03c6595e49810d1b6ccc1b3514e11a9460de50a168a50225961a4e543644611a147d333caddc888206ef8698ca8d2516ae11d2e7860e37743728796ec86c88b571860c33884f8edae0c2057106591b4d31d0f0d48695a259a8348c198a921422a211000000008316003020100e8604e2408cc4992eab0e14800e6e964e6452329688834990a3280842c6180208300600608c31668a6c2b00587eee503c70f5865420a8f70594b782e6782feac973bdfa411ba7386e89319203ef383da6cb50d7e3eefa96d71842323813565fd276ce46d2e9d8329b0efef62342217caee420c6649b549e84fd3ca32d426489036282598fd6b5094d638a6191956cc72275dcc41e618074baf354cb154110c5ec2a027d66789657f1a489616faf00fadd37924927dfbc61e19837e3a49cbcf31565c64287ac6d7dab97c8e4e276e7c4e1fb5213609d8787a13046878c647ce2756e6ef0405cdec20df3bc6f80fdf69b4dc7da1a7ca9ba96022a2e3ef82afa5d4df7bb10d8a9a18376ec8d03e16548e67f13ddc13484d74540e0142e03056ade72391b247dd9cf4c8f03c982e35e7a7daad7c9b2fd49dab26c1f2eb80e17d6116a0dbd2d7cec336e5c3fd92e0563ef523b4121f8d289cc63f4e6a90bc76932e049ba26f462adbccafb154bfb273701d3f5a1f58547904662253e2bb5123831fc6ab9063859f5b09a7004ca9df7eb8442d9034f406cc99851b44f8cf0b51d9fc0af5628b8a19a0825b1184dac742fbd7d99392013a874248e722cad73c88785d0d14a8e2521a7614bed8a8bd05b076c2db1561685c34b6ad6f8e6eff9aa058876076c809e13bba8991ea73c4d209a85a6fd939b80e9f6e97a728846f50fdf9f3f67a8a6182c8d3558b8f215c2c3c64bf7ad71db21b812541b858aca66fa3ef4805858e6b09bbce764acaf5b93182ce721902f22e4b420dfefda39b385bca95264ce57e30373f457685a7fa89fa6b48f9f335d2246f23c7d3f94266106d2ef76e80a393562723bcce44f90afdd989ceb03d1e589195c9ec6066ef4c9e72edb35ffbfd12f57c39ba878b018ee74a03b58d0a9585f9204168374abd0838af151e009c9bddb0f8ac4c4a083d715363f1ffb5c682d8ba21b9a994b7b98d72110662b62de8060d7439179aaa94fa785d7788eb4971f9900e78bc00e1ba7bddbc9780470203a04819fa07fcd3c36ddf45ae466a2bb951f6cbac888c3e71ab6444a82fd1d09711ed886e0f19458340461c147351e3cbd8ca02e5dca16f7abcd1c0d96ec7c30578a4fae697637a66b23e570b9026308b57122e3cf3b2188619ff72e60dc4294ea510272383313bcf91f72a0aa1343321678ca38e32487cc9f50943904092458e52c3bd5f5d569b03fedb5f7e391a9dd0a7c3a2c6a76ccfaa725dd3c17a553b2668e6bd0a7fd80f5085021725067d1d3839f77feff129b7f5800d35b8c941e2b3bfe287950fc8ba170990c2ffe378dafe3e84e48d1e81bd1307ba9b8758c0a7fabcf6a1df4f9ce87848b10eaa810f6746fbb24d6a11d1b0da907d389e431f014e699538dae985f593acee1279a58cb15999af94ca66122a7f679827407b30de2e6ca65ba320784050504190a160d789bb0200e80a56995e195dfd26340b508e74e31aacb1549b39c5af8a7a18bd28bfac5f2ab8a79a01092aeb052212637fccb4a6388d41c769f52e1264a853e91e652ead477a79fd0dc0b46ae8b7b37852c06438b49adae822ef96205a19de929b6c9203e75cbfa65212d2ed0d36db920614572f03e6763415f024a1548634c612400e186683fb61deb2047e0dd8bce3f9f284064b14c4b100983b9e34c2973d5c733730aedb1119c4639d7483981e1b949a7aa0d0add5e2d42715874a204cc47f472ccd99fc982bb5555bd33463f24e54e1498def3ed6a29ae8df6491636c4529429aa9c7b3cbe9a3aab2d135d4b34219f1cef1f1c3c365f4df47b7daed1231bc2bf1d959956aa48341ed2e42c2788418044b25ffee9f03438f865f02b75cfae3f381fe4afc1d883c3a8c77ac3113ede3f37f01e6fb51ee31144fd779db4baf152722951dfe0bf201c7e8f2e21c8118ead4490f06ad636c71cf792f3861b7e730bb8fa06ffabf50dbe84f3854aa41b46d2f6ff8169d7bed7c190db1b7ce30a20709a80529c690a912c34dabd0a2eea1b1cd60a1eae8fd708af3a50ac8c050621cc1b36d946f839f63481f54a6968166da01318819b106adb07b3586dc31e695f7b14b7d04d7504c2924312332131bcf94b311518b7b832ffc9b844906d848f2336815dbfb328fd20c0c4af6cbce2a36c2fd1ca59a6510d484a7636e8892ff1518a00ac11577e1844e8680acef86eb6fa8730dbc1dc6c91ed02e85202e0d8c194535a42db3af4ef22c5a685b97d60c6f346b9832f416c5e28ecdd45a4639811b7159928663103beb22c17c3a6985aa86d61eae375b06838785dc9cf33746c4e767eaedfe21236cb714f47d419e2103a69db83af2b5017696f0b0fb88ffdae3f6d31c72219ea631dc29fa415e283d7d7a82c189daaced16e062e792838cd4de133949b49bbd93a89506c9fa315b0d3d443afcb012e2810e6a672e9dfeb031d47a632d4967233d1aea669888291c8d323a04a79bc5a456594959a81d41974f110534216599c256d338f8829c812f9c3630236703dedde44b3b9b091251edc54e0cb0bf731223521a7c028a972527747ec42b00e82bb51d0e15a72a9acb974a31a3a6603fa9c8daefc3ced463ee928f68615ccc2c45579fbe14fa62bef46b7ab6549de312344157644735fc8fdba13a0579fb359e4fbd8cae2733658c0192131936d523972ff2ef430d980c195de9a409a50b883f5676d34439a2274df8e30107c089a0427906a5b66811d96bcde98ad29354b9478e57170866476760f076802704f9b7cb4bc1c8a958313e0ea1a88cc908e254c1f9b48e8fc9233f2760fbcbea9346c77f59e3f5c2e6a9312622e144b535fb4cf90e12392682f697d04fea3af5a919770289754480bb91ab85bccb12e8a232522e80b3d330ee587181b6ff9aef7f0af80c60352d31846d368e480f0e32872c2a161517b1d3a1dbb750bb1b3a6f9892e9aec622ac89ebe782910861b69dc8d2d2c7d6af343934727dbd5a9d7c981ff1acaca4c497f872826bf5843e0e711ae85c1b26c8300fbd0ec324e1391572c11523c03af0df9ca77a7d7849c4209ef14051d19e8c5c7126b186701ee0c50ad76d08e5c759e2cbcfc82aa108514290aa7ab4254293f1d6ca89535651c9707bc3cb925efa50864c43f9924877d3c32073450a0cb0c8397e45f1550401c39a366b4087f13e9223c2a6cfc40f7fc52b5ec28fe5b03c9daff8f1d93a0f2bea80e3b21bf3a633ffafb1f0984a6b33b97ecff522dbb0f1a57e3b3456f5059f943185e72f207aa8a3dc21518bfb86f8dbf03dd76b92b509cdec254564fa577b80e2021c6598fa72536b8f53596650c1c588e99f98e9ca7d9cd8f19cd41881f201c4c66d9919b5e8db5826254647c29d88b63ec046530798af00a9bff31ae8ed184eb20867798bdaa1651ec42c9c09c152fb513ec19dd6936724183c61e1a545cf7656f051aa93d93f134b3bc5ba467fdb1135226fd50cbd47aed47d64f8d45e60cba2c80e6adb79ee0a83e81021b274b6396536bb5681147d702419b99605d1a8805479e230d22a288a21cda59ec3e55c416fddbbc29c1b24472286ae85883c16822b072e0a9a37a9f5c0f20938925f611ee2e88cf5a4c41173b73d4bbd9e881f1b37c4a41a2bd91c9221d46129657d620f14fba540e9483c3b07dbad1e09f4160761418fa24364251e87d2a53d9672509004e3d12a1d2cc1ca733fe22a5beed739b6701e660f4eb5c7deb94b0b4713c9fd4c8a87d3486c2b4437350e64753a728ad6877f3167aee2fa5f69ab637f80e6830d040a3a4a72455035f3c67a40e3a362322110dfa7536d7eda13182d38a2ef07eca12ce86ad34248a9cf518205a6999a1cb46454fe8e188b72d8b94114bb441c58c9bf7008801451c9cdf9751b516da4eda4d31b028426385dcc44a51dd9f8bdc8d497f97dcd1d9841048126aef042373c3f2b70330661914acf6ff6bfa8fb1bcfca21ea2aa0f65910b5a9e57c5a620753bea9c7b986754ab89ab61631d2db47d6d7b0ec13fe768769d44136a1ae4280c5eea1398352e45d407876685d7e206dc3ab4c9985fed2079316c3884a8dc266b201cb398d99cd2e1016482d5413a5a6523356b5c8f5fab0693893a168640878961179ec9deb75090f654d2c078699d16342cfdbcf31bf6f7039e5220343e1f9514498021ae7f4523d7bab8622041d04b3c12d4ed85953858b14dc807bcc259108fb1f83cd478758ab895a90495278d594444859da1349ca01f980d957a3519940b1c64a25e4ff3fd7e03b90d4c46f71d6ae49e2e75d7eb7e0e5972d0491ee268269c9703c6ef4a53f3d46d86d002991e679b733e6ff13b4788ede50518ee508d002243c52e2196b659b6f35bb86bbccd8a2bea40149a0ca9a4ec03b187b110ea4641724ed46e512b966a9d06a009f7b45e8bb59c779271b4dbe5fc3447b363ff43531f96f2c41e04144dc3390ebd62f34fffadbcc06d1a57f7c3e379cce9cd49362838e6fc199c284a46dd08b89e157acb7c966a85e77231da25e63e80aa49972ffb774c181aa1c171100d8285d2581923279c4fb8dbc2efc62b17364be2e0e03f1ec2a67acf406dd32d0a7a719bd1d041417e53f1694c192f4fa8398903c7f1d79e772350e4144db0a2a57a63bf5888e777f689285ac1023086627393a482e3a01abfcf65902d64a4a74684be4534de20d41bdd2276337b5da02d22a79d4d283d7a8833ec8aece8605daefc004053e26c4bbc286af440b51ff94f9111d8873e009be3521d6b8eb10882cf41093f8c10e7d71d37484fe09b6b5cd133b806b652ac09441918143a04387173ed32f6c644cee956a415576803d20a2047bd71630110d55f915f70a01289751ffc2b3221cdc7a838c605658df066601c8cc0fdab7c29746ee54fcf6bda7afd36d7635c86f7087701719595eea458a9c324cbbf154d4638f16c68bba679e2c68a2d5710f457a78324307635d596621730951461bab209515e8d5bacd6d558b1e10dc16736b9fc8950c526693f110a9c6913f219d03c5c28862d7752726508beded4004d991e0cb264dd09d747e45d7d89a71cbd3ea457cd0410085a8eec2cc4cc70a3d1aae6016bd04cd945ea5fe6a393e235b9466e6a8314bd2f7c2cda0c52753b2dae821eb1b08d818f6b0bd5fb0672380de2c7c5de678abf18ec2da1cbe47afaac78ad64efe6b8cc186b1c0ab207886e396072713adf43f9ed04e66f26752de798fb7c5c86700106147f9c503cd995c5c7032fad8c065316f7d2915bef8fc67583a3eb6aaef0881015be94e917f7907edd764e6a4ad47b3fc1d144c1a9bb8c31ec958589f6783316d046cf93d632164b5e8ee65fff82827093f21fa008891e6e82b5af5f23fe5990da1574d508e9cb49ce8fc11ba0e2e82568d4b31b2e31377164561e680d00f56bbd09bd50f701fa124d0ac12b57ede050509362e068252a45573fb40ebaef139f6814d695411e8072a2bdf656018ba0d70814cd27f60b9fb22e065dfd45308ce57a2dfa9d9af0bc758395f753a2e21650c1350c32e4e22ce638057a1262d8bd3efd5be45bd4ead94e6a2859e0632834a50802c1aafe9371bba9023faba9bbdd500ef8b29650ff12101300c5a71689dc7a18284a0759ccc79e528c8cc0dbb16e6f12bf296913592f712b64adfe579607af2bc733311a0185f2788a727d3e4da93c4fa15cfe2752aacf53c2c1f6f1cacb1260fdba7079785d189e0891882997ff1394cae329e1b42d65fd3cd1049ee5037e167a0ff0345b42f5c4c887a0511982d57c3bf7e4de68c2a2fe438d04833937f90885ac2b13f59b636f6b1f0d3b32f0cc4e4ea1c0c97d82714cc6ee28c4a2b1c28efcce8b537828453fc05360c3cb1a371692d5c3d568b2e99c354d2eb92bf6482c92581f28e20c0bf1ec9074164eefb6cb36a9859540365bc25f2af98e23367b3c7542e5fb2151d94ccd17414d27149040ad0107fedee0205207755137af46d5b7854252449f794e2d582939f2c13493eb9ec0c525c18a14b8fe3752227c9d8f4188781eadff7e9e46eba249fb38707b59c814fa78593a6dc7c1952956923a656b33354aeac9015c4ce521c82e75ec2a3212f48a75226cfb03f19d166ce19108bdccc068b5dd04ac030111a8809b7cf49ef74ae38f85bdc94d7f5967075a42dce89f244bccf2b590b9d227ece2e69833f1176e65ca3339ec0bd7c736c5b4bf0761f1834c33dddddf1ce8e532f1be1de2a62601885f01c04a414d8c2a079a70568ae012c82c021d5c403d41b8bd1dc49473a8e206e96a9ace959bf26db7f8de4c9685238cb701bee2d5ebcd3b298949642b0243c71369cce6cea7938eaba56dec42ff7195369377d9636c794aa9799bc59382dcc87752fda37470fccec4bb9ccc2cc477b7a642d4ede1939ed48441fc42a469b58ba5adb0b46299582adfbbe9bcc9c7b51a079e7de25c400a5eaad61838b5fd56f66321f05cef00cbb6e4d54d645433754e8acde803881c69345f73bb11522713c061fb5fc437dfcd142d4ae77a4bb3a547e8ceac3e8bbc4d13a808b66bc4f6cb2249a7490a2f3e7c9a312b6d251228183de0b9e53a15207d4b6be80c41b0c87c23a49f316d390c0029405ea9d14afe6d6503d23ead7b661f8a932424ad0801dc670674e4dfd6facf4545907cdd90fd90ff64b85e49e3d856100fd430a5e5441dbe942e2ce65d1868b21fbd7c49392d0a8269adac51bf75dc6665a25004161987e3098fae5128019cd7de5060511c701ae94845964339a132b0f162fe30f08ba7849c81ebe298a8a6d204ef851a73f357b590a6b30d6e1defcd654bf575ba3ab1b9073350dee1ab5a1431afc1715a4ead4c70cc3072aad7bd5626d04676d70ceeede7f9001f10d5f84aa5e74bcba463d717f584ba1dc0eacbfadc45a0502a90258897c6cee2175425a5fdd9f41cef48ed812072caa146a73b80f2ae0a51f966b78c9122639a7c0d98a6b77706d25ac0ca588cf489d3d48f02b6fc685e82f4deea68e4dc7a29253822bcb63808a1221df602ea5d3f1978e81a0d9c81cc34f377945d5d04b7ff7fc0834d1703b21f1245e4d206dce34e1d20ebfb92e962577f3a348098c19b49282cdcabb3088560564b0fe1657e481fa492af8f13fd7333d114257f0795dbcdd313712c7aaa772bc7c1e7804b1ea872a546f9481a58dab26bc9905b24e5993e6ec41ca3abb1b6ff11e231b6dc9c4ef554449ce8d3e7bd64f6f647a4eebbb68a115ef7fc21f37cad51dcbb1725732261d2c1e2d06bf32dbb91c5a76662547392b6d94428bb27c3c71818d59ca46da91914ba24cfb7d564842685685fcda1d8051d3e4621c2d8efdf2ccaa08ad9788baf17c17ef0c76454315a282f0685d550a50cdee25e0bb777dfa0bcf88ae8249c1817ad9614334cb8222dad6d25adc97063dc7bbb08c99234d520a271e2ee375fc1c0d074d778ed620bf024fbd82e223df88913dff429cc25ad6455424767b5679605d7fd6451c203e31bfd4d348097f3e708f67836fb2450e6486c658c119000858e9a060beeca09e2f3e883b46d5fff50978e0d30a19e01ad79027bf014b03a8bc0ac90bd9e0deb0a731cf3e7f06da1ab059fc1600bee859400877388cac6c5835abe7c1fd2633e69322ee3bf0835fa5e821afcab6c71c0f285823ff4a88ec18f66819ebbf25ac2a48c7d0489c5d939764329d718c8f8627861b109d94572dd42a64bc0b741e47282c62d1fe69f41e6ca1c02c41aca3529231c2e20ccab17d6cdca75ce561e1531917e2f0256a86abfa1f94b1c8c4d5893ee8315c2076d895de8f80ab9e6ca9630c313c2389a21b62130fd2ef231d4a746b784735007c0a4b8d8e6de9eeeb7ba817fef017b6c254c9c3b3e7598c70882c061fd64fded139da506ec04a4b8ae6a315886fccd0285b547f47942b631286ddba58f24f463fb2d83622efb138e68542d9e07e93f4d57c8ce1a0d884c0ee24c2b6233cdc5dab84ca3d11b7d56b93ffcfd8639516396103b4cae3426268c342bd2fdc510f85cd78fb2ef833a9b3d2d515a11bf0523dd3aa831f10eb572a06fb670fc4536a231efd10b669ec43d3f913156be6c46ed822663efd019e1b029a8cbf811bdc113c79115529c0b45233e083a62280b9bfb81e3501628186393a1e87925a5bca741a6b0468fb2edc1d0b3fdf25761e01f3f938bc07e19dd1b5c0acddf932cc9507cb304780555ac91cd52795e86da57c78f10cea5785ba6cde26170a6c9d74e2beef85f62f54e8aca510c52bba8acde5bb3c6c66e30db695fba703a4d982d47f34f8ae4d81a7c3fa9a21d8b403116fee1af02c7532820273b48a551ef623813d08d5e81c08663e97229929f96bc9fee6390f9b02a5733f3fcf8516165223574d39f60e35fcd2bfe2a4763d22986f072ff98abb87caf1191cccb119bfa003eed3ec1b853da267e139f3a314418f84cf1aee0059f263885d054a79d6681033726f0d5170595833352d704d96018667a6e251ac0ae437184b3118ea0d25995da951fb49ab0ec53f7b5552c12973080c412e1e588e34dd2104416c4b9a5c34f68a95dcfe4efb875eeb73fbc3afe6381be853ab85f8e1748a591b638e7d5690c30e5a8e2b090115692248fa15d11eedc757717b9f310a3dcfd8b01267a54fc411dfab4207a66d6398b751b4f5920c0c96e77fad722a53d5c35e5792bad71c6078fc80549642ed6824ed858aaf4d309ee8139081c1a3bc9b4ff76371c63edc14b4036eb8f2f1254f92f686f6230c38b54f135b0410794499cbb2cf5a11c9b31523ff4a0e36580dd8376c72c6640e6f4341d4ee7cf2f164644786e0b573ec2c7fec8273a0ef2e98f5493927c0de5710d3a92d5c3785db3730b6a0b9cee8aeafe464e27bcf593932007b4c7bb8bb6b36caa226706f3513eb42480a4bc4f60ad170f55ee6592dd0a000785b213eca6063e720c9a988a6f3966e033d5200d9e5dd5d7446b47625be207fdad05452069adb65c1337015929c4c8b41cc47fce8ebabfc26ddeee06b88f1a391d35fdd4a183cb1c92245c4784f9e5e93d0835cfa3c59a8ed44344b471fe244c18fb342c75397525da15b16bd1fd8bb1ba8f2879df74a7b7df515a04342fc0afad494fa41682233d113833fcba4bbd6e9e5da41b3730c9f9a4679a85f91fd35b8d0b282316fdb6bb569bc4be571821dec92186f754cdb63e566802b249bab817254bc99424ceb671c7a020640c72762b83b95375fd7c5fe1882d52c2069fbefaf0448c3b206f211a469a936314dac7660f73bc4a6d7a192660cbdef4f086cbd97c448234890bcaf28edd0058394ae09d7b192d4d7be18afa2f996fae7c3f6ec0a03a50c30cfdd5cdc41e10770a7eeb28b7e835a7712ed1f17d9568b8c7505d8d6506a6e2c906a14c8f40e361a5b33106ed05b7da0ed376013bbc818d459c4a8966eb8ab856fa1b80b99c1e62dbf782e3459420e3c4d9d936039a638083b47e4db94da17e51d120462f6ec3e424d45c361207089cdb794e05baff946c710405ee54746b02ca50341dee908dbd3cb6b1a3e316100ce46d47dc85ac45d09112002484c112a7497ac5d1dadc6438ba4b539ada75af3e74e67919eaf39caf86e3c0b729d62a40196eefe29444e62e639b7c96cb65d37db2b8dd9561774db0e5c5e8eae510a6d7ef0b798ecc733e36860733e740921f7c56be0fe3081e805abd797da60193dd5943205d968989d74b995fe973450b70d78a23db0da4c6e69870441600cbff4cadde4870d516277bbb75d136d85bd43437f1b53696d8408d07677fb3b65cd2b1b62d1cc5e8cb8023b319381e6177df685b2e1761b803738ebb365120a383110a72382623480d397f7e7116b7bb4f018f65fa56af6683ca8143a680fb9382d713c9ecc7b3b0d52b2dca4c5992dd34f3d50c2ed9b7ba984b5b9f118c543d23c2b67ec3180828449b738a894e5f2531619204894adcadf238f438c44fcac976b5353410b28fda77b2910352b7c04076da495a9879f8ec94e36b7f83d57f6909979fa984843f179f8061a8fdb569e42e3620ee249455b3d3b0c6e940904eed803b958539a18019f8e07c0d9decb3da081286ceccf8a0e8196fbac198b859d433c9a60abeec42c8615bd9b719555c34eef6748a49878dfc0916ce198ed94d1666e7cc98dd2289650d37b79b9bad9dedeee66e77773392c78ab393c984d97ce27c3231319b9e9c4ecc26ea14c834475f8eb6ffa5a1de90f7e9be483feead23b36682e787b53696179938e9fc4128f67c578acac7db86842f6b0d9b79a93af4963b63f7342ed4a871b7d86836e778e90c4a724242db2bddd657282cae41f312742318bd9583440987019a7e63b98bd851fbd071a59e724f857e045a0abadeabb0fb665ede73c6abbc45acaf58e44204658d1975f92568e8d9f769e7a1ff328fa29ea480db57ee784cb40b89e29e45d48a491a8cbfbb011529b5287b776ff886b50bc0c5fc10c592b6b5d9520b4b67d7228cb214dd1d18e2e8eb14b24a99956d0fadd11f6c99db8530c2ac953bb121cf76ac33c0a079dc8e0132fdb663dc6e3bc5efba6d47094bbcb6f729f38e4edb3378b41d8f5dc89c7c36dbbde2b27dbb4eb66ffb637b0a0d2db637dc34f551e2bf5d33b6e85849d1ffe46088b8963d2853ecc5f7c08ea112470871e27ae63137bb0bd7fdaf61ae445c514b76da94fae4d21928aa318d8836ed48d293d7b5096a2fca810a0d57508a2a41f152046caca7c19bfea23aed6d52e5221aa69291c80f9d65f026765e7e5a84485ad8e7005a77765a7b73c54a99e8f3afb43310caa8a529e8086fdbf016cdd53d232c86a63e738f6a70fa69cd1b906fdf0494e02ee8162cae7fd435f4e2a9ec656c0f9f2446290f0fe7706b511729b494707ebbe04a8ede9e772456fcebc5587705fe1ee4fdf7d9d5c186c47cebb175a7686f2efd53db11c2874b855165b5c215464cae09bd647ed2204cc57d4b4dfdd08415665acaef391ddc7fe69e6b5b8272643a26220c9e01062f2eb62e56723e252c8a51365fdb3f25bef83c5534e87cb9898cc30cf4c470eb4848235c66d80a5ca3eb843eacd0265f5dfbd6ba76af1eca0f64dd12367d4b71ec190a9ba7627cf867e5681c92bfc309361d19e9184ea8d2f5bccb338981436c017d074582942cb59fc3cf76a7111a5e66f765bf0ebc938132485d66179bb9bf3d7bcebc31b1eb3deffa5c911f320a2f2019dc64da36f6a0ddf190f87c2d49e535b9977d2f02327c272ee97dd2528e68218fd5228b802597e9e9ff88e3aa51b53fbb1f2ba2518f88da8beb6a17738d1b67b30ad1390ac28e8792c7c5042eae8c4998cc798185eeddf433c1161dc80f7958bb9e477503bc7524b9eddc5404b1ce41d21ca820ce9ee82e2f6c72188822ba13693cd619a467dcffbc83db9d7520b0b63c79c529e0e418ff0d845aed5d7ce7b378cc4887fb2a4113cab6bb2750db95aef199e19970c0488d0b6f6f9d42a19b72f9ae2c466840e8db98b6f9d11b905c79f3478b6a2896ab91c2192656a445332c57cc8c0c2837b3867ac0930fc3c9ac1463ac88d630463c7144b5e698cb42e3fb9992232b44a5080610d6acbdba87c9a0227f3929a0c220e6b4cadcc17e9808809e455ef38449646ad4aab9a164b3ceaba225225f81b9be2fc21980c5a298eee446e683258d3f16433736606131b918ecdfb9bd51976a133a71e681034c3c58531d96eefda7f74f7adae4d09a6a128ec851082d3eca3d31396e9575399c48b5adfdf7fc4f2f9c802f64eff6bf3763236143f46efefac60d0476be38a577993881a9d0ee0a0ad07ea8e6e65f50ce2c0ecb1397d888da4d6d25c0b10366bdc6d14775cc8f7ffa7ff47edc74eecedefba47716db3650210faab8bbb8836296b987f862b37ffe4f20414d3b66d4de5dcbf5a440278cf21c05518e9d6472479d07786071aef326bf660d5085e77a0236492ef0f1bec96d00c167414de23e08fe7d38bb6d3409f6e63a8eb652b32b409c3148713970ca9ce03e6100a2d68e5f16662a729aee3903d63524d353187a5356f212dc076b56fa5541122dae4ce9c5ab9fe0390427fa6e39bc9dd8e826335c3a915518a94f28c983a954e174e74c19273c9215d1b9bacfe971d2046e54f83b3fe7d9ce365ca27f7d60ca7b86ced0fdd6415b94a0d28222cbefc3a05e873586974be7c20ce5c13c2cbe9e6e8840a1e2e86f695c2840e4d32bd28d25705aa0b928e9637be9dfe5722ffa3efd42bc81854f1c6eed59b7fdabd690ac20d75c9fb0f48e96c7885be11dce19a2ee94280560cbabf700bdcd70a38482e2cb344e8edf318e630f0af12cc2df2050f2013c143a3e935d55682b5d8b80020421235f8673083df7b5a1e53f5fdfb47bc32608b7c4bdaee75aba2dd16b8ba910dcb21270324e709d3c57113016eb17fc24957701d14db5b2a495b09875c2d4c6cf0ffc7a9f86af1b793e3cae29e59442a6d97d241c055cd6e2858e61e146086934d1e0290812ef6e0bb0bbad93179c1cf1b0e811bc597b2088d636dd2ce6748263e9b781dc5112dc55834162da7e51494906505957b9e47b0399aa9bd795024d8c53c4b219bb1910318e03a6587e4ee0d40994b3d2774a12804ab82525fe1b644abd7cd79540e398863bda643620c1697fab6b069182a63e3864f3b7d4be339903036b310aa47e8e4ace4e67ce71e550ac04ae8e3cd7a7ff4390f229da27f793638e352bb43c38782a7c01625603f1ad93f21504734050e70165f0b39d5140fdc9311a30cf90818a067ec23194166dae0d02c8aee728b11f00c0e59e11b7c1983233f22736fa75e27a3cad7014b5f5883bf144559229a39c690d3738f426ee6a78b18fc2c46cbe4f391fd384d495eff8755f0f971f1607b23d40d8b140adde5d90c638626baea803897059316867bd0382f61e9db6295f1979f74265241272c8fd9d4ea84e2eaedffc0d1c2389af7a0f18930cdf2980e2a5c4451c344df90b868e45e192f9187c21155b9b5e2273424cc5e4c622baa0c299ae95031bbc240c08b73285f58a1c96f041c13969adfc8ba10146d0910c958e0d6bbe7b259ae367578fe2f3e1a3b2f96aa37759ec445252d49ce6c49dd3b4cca669f291673b26d72c2cabd354500a2816bf2338c9c880664042ed307157740f71bccbb5049fe903bc8a220541a05a0d41563c617284962f0a516689ee40184c4108e6a9bf879b00093e26771c9b552006a1252d1a7e1e1d4ea948b5a80a1cce1e832ce5e27b783e13a867049410db6c50ff29ea7c3aec9178170628849f01cc997f0fb12a09bc355a51a492512accf6c69dc02b4a78f40b9488998b41317cdaec4f9ca013d8c2edddc36ae09948c42b39af7787eb37e34ca925d1da129e6cf78770058b9818ef7ae5d1d06991311175404e24c2af40c5039f344a24f4932ab7e0163e539484d52134ff377002a240f10b46b35e21fd4c6b96409a3986c1f382dfe8f03834707532cb3a725a15406d7e264f6e59212bf3a2b72163a39467f440f093efe3b0c7d6b61fe174cee9653824161ca054916556a32816e57a2161ad1195b47333113c821b473a27cf61d6a9e81c8dcac95013b7238290ce4717cc6838aa3504fbf9377352a7b3dfbd1f7d36c034a928922d7b1100003234adbfd067933f1f01879b7f02b79627b8d127d38e2e8c63cefa5a890f13923aa8502a54fe3261205d10058553d10af22e84d440cc12536b18df4af9ee3ac29d030f270e7dc84003fb1aebb01ee57832c29e33fac85a84959af0fee3e53a3436bc7a3a987b81157847cff24cf919856b8d6cd7d372adcbdbea5eef6aa8445859014a064e9d4d02a5294fdf29ca5353c52d4aa6554cc01280484f3144ccec60b3d117952c64ec2b4ee0e4c90f7f08f913effba8cc2eceb1b821a55ed60228076e47650e39f406cba5ddebd7b49390e08d825738806ef888a8f8454a2c7d935ec8362846c639039249a01780b32d80bfb8be4cb69c26efe367459eb60d9b086f73ba58dbd8aa95461ef229302b9ac9da9861d94495b3f14b0a91b9a7be845b4525395eae2ee4de6748cc9f76cc0ebf52f7cbded9fe23c02f1d016239c31cc84a275a4299c0ed8572493bbb803895c25af060897fef842f349c88cbfc71b6ec1d7a90d00940f1867d5215352372498376d1862345e9eb4ac2073348834bd8ce188d93daed0b217ed004a9e8ae76e00ae0b1e822f01d4dbccd57bb682d149cb43cf1f692ffa0adc2b45d75f2202c929aa327b3ffe4a54e2c9d357e3b007ebb058828ecc06dd5f989d53fcb3013177d148489479e6860cb4f110a090202d9616502568c307323dabdb2d3010a65485137b16d5fcc438aca5061178b478744f34b6d7300de24687ec7cab46982188b2dca11c1815e6efa6c200a5f9d11cf944fc42011fcc130548ddc5286fab8a2b96f26ffe023c033f1e0ea11412436855bbc3aecc3315bc340e750dbd21a6804ae6684bc4ddc51de1a280769c034252bb6ff2e24c51fd82d315d72f4d4f74a5b69ba7470f202564064a6bbc2ee3424663810c9e4e4ba1444b94d0a75243f956878640d379484f0fe42f452cae6d8a9f1b4df3140013025642040c35c54ddce1f003872aa243ba6e2bc7ccb7f211ed9bf5d6690d242462ed561f5e7f50e0819b9a0242ffe5e2e4da1633bf9e2624f43875b0c2e5060445156bea82c7d0b5c6e351008a03fa5400e5a4b54814ef771fb09c5b1cebc92a9353e09935170d06810db89cb1d8818f34cb0714db6011e6bf64d084588f882a46c9c4c91da5916948e41498b4f263cdca98c59d6cdedd26a77be6440f75550c42c67e017360c7eaf62db56f7137fab7c86df8c413dfcf44c69619a1e87e4fd07d346be2c04943d12fc4e0bbcc3a85a336e4a524ede466719eb92af56ccfa202b82f6b4d6b5d06964b8e6154a1c859e8c779cc0ba7db640a75cd336a8d92fa9df85bf4c8ce800fd5c110d75f857cb38258a30dadf7921a3a1317d8e8c10a2dd2807cf06ccf6673b27945db417a7a03d88b482261482858c89af25ff98591d2b1328ba7e6ba31dc1b4ab3799b10cc8538f65e94e839795f534583e2f04b0484edf69300723f3345e6d255c7d1bd02fdd3a30c854ffd5b79a64e778527ab6abb0c971b037abad5896dcef0a2be4ce7581ffff78e610eff8b0bcfe97e2954ccd5d20b1a2cadab7a8a917c51a8fc48b666c2d768b0c6a9f5a636139955b317b14944fb5582850506b8ef2f817e319c2055942f05572d3610cce119f477a70392449634d00639348a054c96aec97f7f3c6387199e85477eba22fb3e662c2555ea59971d3db4282d8c9cc26fb55b3064358aa608eb54f1e9f88a8197db215f52ff17ff7037ad84bb537eac72242319212ad58e49cc22067142e90e891c63de106cdbec2a709f5cf7998b2cfbcc9cda90fed571002fb4145a013a2f9a45918375e4dea89485b8341303407fc93b2cd1bf5b1008cd29aa1a166f678d83a84621ba781595222d4ed86103e429572d107c9acb2ea35ac9b5f887d3b14011b3419117531a2011fb4f79d2848f1afabf75d2ec2d1a30869ba4033cd248eaeb5fe417bebba46ac79b6855d4376eea9a805a756f0148644f8158d5712d853113a3d61351d47df01044007d3516589fb1d6e0f9b8a418a08a523eac2ff42593f30187c1c0bab8f9b70a069de64ceed63e18c65e1febdc96c8f051f304f077f8592f726e3f9e4723438cc4e724f7d4560a6a895b44c663251dde06e21e070c183de6441d2b620bc78f2a1d77dde987a692a52136807bd453f43607585860f949a3a28a6e8db741b0fa9da8c5b56bd4cee9e1a7408b5c4d942caacee480bebd8b7f6680181029719f033328abb3a0f6995df415434c3a94f58e4329a74ca77c3fc17794815032a9e52da9aae0fbae8e4a0a40e8a6957f4058af846798453f879d37de4c826dbdf16b52eddc503360bd7db6534a3ac3f41209130d529c2aefea27132289f95f063963c29256925176baaabcca87b57a3b40b92d7b2dfe25751f0e10a88fbd94df7c35188a185e216470508e56d4e63e1041b86c5556b6c50aa3965901c113e3c6610ebe0bf35a0f1911b0849af134932ee76cefe2fd91092c73f23981895a620a0ee4232984072bbe066f59ba77bb442e72ccfd5e721c09322790e251eb108ecb698b73056ba0dcaa119daa35eed5d6a3848a6a20a161cb99bffd1037ec909f8192a49813fe1a9c3a60841625672f4882181b6350a22e8a9d813547979c2bace2e61162ab55148bd2267d9468eb05549a76bfaff4ff5b463692394a69e09358ae981bab186e35e9f0f9af5b04660bf07c1007c1684c43a216dfe189eaff1b424ec2a564d49446c82b1b5a4d19871cb476257da3fda03887d2151d2902fa531ba926d68fc2f2bd399a0793b52f104c0405afafaa78229d963bf5b7cae3577ab73a768f5ad89b56d71905b1c20f47969f44f86223e28df0bb96de05704fd9642f8e2be38e6b74226be25bdb124fd788c7de6b0e5c6da0621f320e17c18b5dcc087bd831880e921eb16f52ef0203697ad77b02d8b5fd7e03b32558fff2c8ccf1f3c3fbc3a51274b0fe062cc18636f1c5b439760882f1a9b43875eb33657ebc48319fd2cb36b327ed730fa5d069dc6f95dd6061c022fea17a26dd09cd1c37c0dedf704385a6f44ac5a5e88bd1e306846a51cc7081c2dee9c0c8d758279a7bc2ef8ab865de5e37ad65026382531387a6136d84585173416ce1f50ab228e1516ca0415ce3d467fc302692862202b128bca63c269b6cfdffaffdca0044507e3a98f5a85ee62376162a364dca20cd1f04edad5ec9e5d7479f0341854ed59bb4953a80b94b3790a71a85d0d41fadb5cac69dcc667c2e5e36e273d192e011824cf598823075a087b7803fcc7096044fba4e4623cbb900300582e78ca30772c5cf18ac3331cc70e6075e33f4860c5d9f2a891388d383c233e749dd6f4395f6c9b9efb30d397a3b723e69b7f9c99e0f881157162753f9a2992aa0802dcb4d308adfd7277ddd79f23b92f5fb53d7a22ae4392547f8d5c660ede63f710333a43e9baabd39926285914b1fe6809323abe89831cac996bda0f7656a0a417e75254dcd05a3748266151c9d11e53f92035def8880e2497ebfb6f42f063ea17de1220027f444f536bb1d4f5e347886c7170a936e58721f211ad9846d1ef9b29e292d5f43209aed9572344dc2719260633a4ee241c0378e7b6c915c1d80301d40e721bee7a3d2aa21d94a5a0f0e3a645f7c1d01cea92e78e4716f5847f62030d79f3051c5a821cb673feb97b0199ae75a7fd77ed0be37bbd068aad790f1692f0e33078ad8811fe27eb6948adc1c57446d9741f73636f38443ca5a57237ceca7a6391e6ad9ead1b312eb282919b90437dbe4deaf75408e450c4425b2c8706b2552f61c6afed1c2addde5eca28354101d8604928d79e6934d98c846ed7920d34e3c3373de14de5d37b861ef815e6f78eefb4c44ede6e6343a957118eba066d0670a25f646dce22d9aea95f19f16baa7d23cdac441510f56be6b0ad5a434061ae24b66d98af5542750a46ddb4c6de1eb9537ae0f85f0ba9410877cab4d6503d83ab3db245d0e68bbd652152fd3026055794148d0104883f513764823518e622057e4cc9ad0d87ca89a146528e748690073c5823d768663381bb9d4b0a9609f18e55cea107046875f72a1663b9025bd78b1a948b953cec35c7ba7265b69e92650d6225b60586480d79729c2803554ac8b92a96e2c3998f0d5c5942a5bd264598d58e5f74063ce4bc753c7c7444ece542f8a107de1401f8fd4949e7086c34bc4b65ccfab8397c45e22443619e7303e1e551d9573a42cf83105e9f0afc7023609abcb2efc2c7cc9ea05ef4b9128af20454e129691427aad74fac492bd6c2a6e6419f571d40afb9deacc59ad25b9008869e5b1917b47bc7a74b4be409dfccde0e7618d169642fe74bd3799d396b01968adb25dc30976b0e55c96ddee2b1007bf5a5bfc5f21d1a9e32e131d29f382b35ff829b358d43dc4649b3d657f50f0f78a4e679a0c5c5bbee721808e9414f92d3c18017b3a087a6261617ea89d28be4b489563b727bf6e05194ee4fa76ec46e0e2ace2010b89b884dab8539b57c26fad087074b60a16c5073677a4dc3177c594a46e5f39f83b271ef8dd352b7204fe94dead678b18a7e4739a8719af2c13627add078596c5eb72e27b034abaed820e0ba597d153a77ada14e053d8ed32ef925e62c2f03fca3385c1dd34fedebcbe9d62748f151bdce6c8a0df73bffa49372e46c8ce9041a947f03ba2df81c4cbcfb34909a586eb6f9e37785fe27164cfd2cc4cfbe4e13ee941d543a4e8bbea9d5cf891f986f8182367945d7ec29a12d623858e0e92d225e25517dff8701e41279d326d5a377837b363f1157a83d97f6b0077bfcdd5072f53a95caee9aa46411efcc87466cd16fdc1cdb014f59c9760777544ba822eec3a84c83174684775430d0a437ecdfb6f02ef2d6beff2e589dd12e4a40cb98036460e20e2959a80f492405ffa0c03f6701fa70014e02ae5e0bf7a9e9318a6a39b33e3b3a9cdbc56158f4afb1154b7cd3fb41f58e1b318df117082a56202598237f17ab15bbc5319a178d2f3a8ab4e0a34f971c0e8ff804d2a10d0bf95cec268e482faf2e66b756b15d961edffa3b73cef0ee1a17f659dabee5306fd2b25fbf156b062a2d203422c6f5ba51147ff74c0b9ff6178345b88c1bc9f9249cca1d5512b0e1d224706a8174183a280b9c91e9695d496c31c01f8898da3466659c83e0da2576a3ba126e2cab475177e239814d288fa06a9e408adaf2caee2e5fa09da9bc0f2286f4ebdbbef4689e55a5d1393ec08f516484d746da409cffa8747dca56445d6dd26db5f99f8b6665d0e1e454b20d93b74906fd31122f601b9a082006c72ad6a79bdeb4aca7114b13438f1cc5aeb8d97c2d756172b1233811b04e91ed98cb6ce54f88b4bd6c108bda0836ee300802b922a71f8cfaa0814ec339e398a39ade2ec3c303d270f479ef119f966120248826b8734532fb409a77dfc243373008b103b8bc311237624e8bdd16cf6bbe05fa769d85d25eeef47636b1cc6b6fa2579b86e5988e84a2e438d5377b0a6f2142fd56a577d870cda76e91ea6a2b8c6814a4dee9cba3e3ce25056650cdf82b5ff4ba28918636489b3db78132f01ad1fffe2232a222287d86cb696cf2ea62dda12e34fdd53f41eaf543f85d3b0963329ce971446818b5ee029d4ae3a3de08d7ea896ef9c3d72887a67b4f4aef19fbf70b4e9643863234b2213d17c714b7b1459e8cb4f28848b17e2fe732386c8629a5e18b9a64bae65557a1f272c42e8a4365011b9b9f85fe5192611b037fd4e9286986e5c3b54c0ce0f26ab87c765ba598e8c39bf52f36b214363c17b5260b52c4f6886c5d3c6c07b103175370cdbe79bf53696405ece7179687bfe28cfcea9cf7279ad8b6a64b5e6b1c68bf2aedf1bfac060d43400d147a9810266c5d2bd586a26ecdf974383885db9b65939eca6db1a70d4281b31ed731c874b6eb969bed34836114c883acb03ffeba45c88f8847a754dadeae0816ddef9d69ec1f1cce3747d4730f7d58235484291d008e9f6ba92583f4304a155f253128c5f28956918f531ec72def5ae9c72e1e3fdecacec8ea4be95b644f52e84307824d89e0879db15fae36696aa77f0d3cd715da3afc2e1578ca46cf7618a07f987a0055403ae18f29cd9bbd49ee0e9dc8419d1e4b12b3ec6a3ffeb33ddfcb7b59bc201adf433aa8558995ffbe3c9f48433ef434ed4ad39ff3d830ea780df9d2880b0c970954163c414834bcac601d0ee7ae2a89ca3a8c905202561e841f3ce72da7c619e99720c6c01c80c9c80862b930d6d63e91dda6be409d8003bb7f8e49c29a8dbd887ca6b1a45c4aa3d24eb038ebdfa69e959a6654e145094eb2b68175baa4d3d29ab0c633a6df5cfbbdd98b9113351be7c43b324af17cbe611e6dadcc629eaba554c1dfe82dda67e34a103e22c39e988a10bfa933151efb11f2b5832cbbeda1191b803450609b51e4819a355842c28ca2cbc08d1b08827037fc0d1483f2fe7020daad9f228a6bb121117aa179bcad4402393dc06a341c20a337f8e0c370503e38196b815958f4f07f18cfe5609dca188acc9a1b20d00255cce18a1c086ad72413dd0ccfb1ff62f4bbca023f7145b57f4d9c602302c700817054ff84dfc4f9d31f5c543d1bb50fa7db3b50d5fd8552851c8f63bb60856b427fafcb81e64280051821103406d3eb0cc327056be11fb916874a8966efbe40510ff1d83f023b47238924bdfd90e3fb37c87c01a617f1528590838ce00440580dc95e240a0b013c9c464fb8f7dc4aa40cb1062d04a40190787fed36f7edb19b138581b0100188aaa77b3c2c8ef83391f2d1061b683337c2c94f728c472a79fd29d1f4e91843e6bc3b77e953f0e4b23ed2b26159d265b61635b7b20b0b53806eb29c2c71f05312e2082e947198337be03e6b74f517c41818ec78a3916644325b64c203e0de27f727582b786afc09d6c7b52470b790805cb7ee5fb7a7814c62a550c142c2cf2515e48398becc56424877b6b9a75844718fa815f33ddfb0fb8c2fa3981d7d9ce046540aee0719d3d4f26d3aeb2be0339ebac2978d9ececc67606f84b6f2aa1607e40520ba95194bda2b4644f29bf6d04359ea7d13d1cb6996a237701ac5e26170b5a512f7d4b668678c86e2850d475fd99a66381351f61dfa053ccbbf33d19e83c1745fc2f882f94ac33a14980a74c0db4b3631c54d40fe17c22e55b0fad37a103fac789c854fd4a5bd0062b9f609042ef454dce84d18c1f275ff23d374be4a3cc7047a7155b48c3d5f7d1bf9b4969a91b80d22c49fee63842d91ec1220e54dd2ed22851ba9bcd87d54f13eee3dfed2f4c002034908d2ea59817cff510547ecab84aacce25f2b8146fdb73b85b72db4960af70ba3e9f08f50533e1f55d0adba0c49cb18d80735015c777f76c6b32cb496089ed832f1ede8a0cdc027389bc0c0aea22df1d8a78b15911cbeed14d5e0611ef2d8cdf9a54a59139382b2c1eee7728963d46d3f9b93ca806a72a90f1eee02eb1f30fca26ce9ed73c9b446853f4d19a7cecaea031a60a2919f5e95e2b5c6955f9875c27812d18115e4050f623b26485181de0648e1e437d198e333680796b9f99e869ce2e908b56734a5992ac216b8414ca83fab521c1001c4786f975969558541f825b97cf85da5ec38c74ae9be32ae22c887186d81a314c9d09388f91a031c8257a91bc6e07d900dd9d9c16abc97c9e75a3f12d237d261c8fa26494b86d09e95cef693941b43a729058f289ec807707d6eb60890d5ce90c7e5d0622a48aacfc58d579b7969c10049bd99a402fcd78bc2f549d57a211c843d383007d0a4f0c80a52626c1ebe88dc5accbe2f0af8a493621b1c8eac653179ed57ebf3cca2c8b052775095f446e01c860486e9db89f49c16b18d53e228de02c3906a5ace7bbc2bac74fe0c3e426d4ad97c7cc071996d1f99c7312a211ee0d10cb8111836d0ee17a6cb29822428c92551206dc594ac48ae41c62c74806088acb5491bd920b390c9589981da3353011e71a0c0509815f734b88aa91661ce77f4d3bca0282e0219472fd456a0736cfb09f618098ec0a7432d0fba87ead24889b19823ae4baaacf00d52e62a1a88f207899aed890e039b47eec3508cfaabd628689d7b71294a2999af980ef79e972960750d8eb8282632d9aefb9cc1db0d51c0e3b85316685e6afb1b46bd8c52eeba4bee09c64e292bfdb1b13180ae5d4bf67211fd19375730afb09eb9d76f93ea0bef9aebbc3853cb659f9174456adbef26b217a50e72001a4d41a9b65e0094497d30bb3b57cca9a9d3e950ea5ed409a3d8ced0a974d2d8447d089755e2f15b366a393df4a41a481ceb32597abf1090a575176258220bc806994ad401a60bd288d6bbbde566d0041c4a401e024e89bf3359a8f682de6415dbf2d95eb31fe2797e7a884fc89325abc3224933329d906bbe79958658084edf74d146831d47ef7ff03a5a50ee3dc32a04402a706290fb1385f15e89941b9a958047800a805929c8657369bcf811c3b7ad89d83439be1e2f71f3996b8b89d22c48ed55776901fc04647795024befeaeec8236f7f4e75a8fb89afc104a8a5ecf55e8137162be1b82000d260602e2e72a15be8d3a8b88826901bb3e4177d856a0c4acb2447e9d14e711baa8b365148daea04feef11058711063a4f433ed786e7709f25f33d2c0cc741a110713776161f0769782989f6251d83be1bab54037821052b19b99c4508583ee011986611bdd7b0dac0935155a14577973f1e275f99dd499d66fd476cd461537657939097f389c5dc15c2a7c8248ad299997ccc3edf7b3f6defafb82abbb4bd840beb534e9258aaaa4bdd60ddcdb0db5fbc4d0d67d8f616e7e64b4bb52b489a399709fae0cdbc0153b64e50e25268d8062e62117b711135d8825b696d5b369d265b49a9ef0f71dcee82ad70c42c20b290d8533fa0b112cc17d86012a77ba1d4223990abbaa6345108f30a04eafa06fcd39311fe9a5d113bebeb493075c09663a5667adc5ac7a07fb6a04960595da44e2ca0acb0686d7ce15c73ce1e05708643de904ab52e3ebf673ba08cc46826e22cd7fd95302f5ccc8c9a1c89305d4656662af151aee2e3d4f33e1036acd3fa44643be9e2ad29a29a9a43acaaeddcf2e9f78c5b559ad1867abc267e9efdac44af2f9b0166aaa2725ab218b7ae3fbbce8476c1e335f449749d912cb609900c90f5f076565c005e1e11c2f4a108618dd51dd5815c00e4fbe16c6b8ae9a566ce7608ede8f2dcdac7bb9c9e853f0ee32341e546a2b7c7138e3271693f37bef6d156fb90bd4777bea552beb15e594810fd18768d95f603d4a57be00609ee9e1c1cdceec5d17f96796c569f9c540f035fe15fd112616f517204500f8436c7c65986540116ec3e037cd9d8913f6e7add39c980f7f4471f0527014292548265d2931b4421da674173f400ea5e8462d2a5a74b5bf2f2e28ac694b4bbbd82f120a32ee9e76b74a38ca05642c31912f607eb4e2f8154d0821d9a26a44bb848322a47ff8d5aaa54992e81271d156c81c9070408029b5a2b895c8cd3e9c38de8ab23ddd3340aa77a2b6e4f40f940c41cec536a2c28d2ce6a565b6b67f70866a19690923bd28d9a779bf6707365ac8fb8141e4570c3fd58df3ea8a89ae2b9178960b01491a68497ce5dfe03aebde6a78cdd63acdf6d623ede30f6afd5beae1d3a2137fa2482f4880318e08989d15f1491bf23c052a3e96939995a7b4a71f2db24f6bdfe33782c234d098c0dad395955133d8209246a56355a0eea5c0632c169d49a1dbd82adc0013a885d9f3415adadebebe1665cdab26502c18975e6ed6f51320bde7056fb6062027e87a88a8eafe0e57a544a649771d3db7d7b4d6cc2815398a8ec52de220e92d9234c13e63623db0631f428977bcd52b997327dfe8f96dcbb945feb4b5538d0e8a0f4d0e7f9bf783e655fc7203cdd3626033dcf88e5612ee4478d5dbb967d8c28091fad3f87aa0daf2fd4faaa10fd3e0f3931ee206485e7a64203bea16f5b4cc1b116b0455ec437cb53cc96662b9667559be8abb6787fbef409c367321ad80e31be01f92ba02dd5435198281f136f47ee2ecac3463ad58578608685a3f40607e5c79ee2e035bfb0b11144a9aa197cb701821bc6212415351fa8d73b06ab579835e108828fdf6ad7b91baf0579808f8560bcc13d0954a6fbd4a6caafd3825fda686f4c590ca7282ec485ec97d8554f0bced9966a3a8b9d1c591cb859875db1ef64a10e50db31f7c5a7addebd7a65c412396f9f91b793efa8e6a41058730bf242ec648f9acbdc582693d84e20ab73761e91f6c9ab305f90644aa74083f56a6341a68f5ebd91720bada0dea721adf92ce5ae5e3789284aae1ce16c71b9c78e11ef339a2620b4db2e6938ac28fd26995a17f5edcf021f02f03fe9b0b1085d8dee921a5d0da043698c1396842ea05daa5e7ae2a4f4b1361620069cea744a394e80dbd7d76108b09a09f3be731829c673f95145cd4158b13189ef35b48175ea811dc41a753a0510a4a66feac45e2761c6492e30d96e14f649d6e45150126d103034807c0f389c8b741e4937a4c8df3dbf7ff5fd561cb47ad9b593bf3740c20c9ad87da762b9a46ddd084a8ca49dcd4e9141d353a058820785dbc3c0da68ffd307057dd8bb9f0ec2f8a19099d238f3503cf0a4e94b398c832b6679887d430ced3b7da936569a760ca6ecb276ecdbe9d586fa9d0f4db9eb3f7d1312a2e23bf09ba4ab61aeab8b178a28573dd303fd7b97546d39ede74a820f5317b2c0ba9bff968f9c1a0c9b4796748e8ccfbef9aebb7f3039e9f9e75dc71e306c354a35bb618693debf24a9cebe4cf36f7b0bf35a758cd9e30205622efc1618a2a53d86bc203449ce9c7a700ed61dae9830acf144d4ed91dff7eac248508089acd9c1fdf28fac44451703080a33a34ba261b1fd4c0a292f811f6776ebf1020ba9f6b46dd436cc4bd9f6c5accf193f085341c019b19d9f7019f14a43577706ecdbec97db5e606d459cba473013987531dcb443f5702188f752c18e6c5aaa235d6bbc3973286158e5192bfb64d40810d3bae51bf56b499f8d11df1258101c1449ef0dad0698b6bb37eb42c0484da981fe2e38528463e4adba1e9bd8ce901d867454122ccd22521f5c681f3e11c5f1d9e4d6a5fe24875b3c8b883c7653101299b51b83959be46ef702ffc0a0a88cd321b3ddc12536106283163b22a3c4ec027ca9920a75431376459370643c3d97d47d83658c39e1171e08236b0b4c5c58287345714cd559d0768b6f31fe3cc3c194ca7652688d1a441a2d063fe9202e63b9336be69a1aa07e7ff6358871bd890daf5d6b524e5e724ee69245d21c4c85e36c4ee5f26f045d7a18e24c522e7bd7f0c473b7a725f859a806ca9e5ab79ccecb210e489d138690495c7f9de31ef8c21ee5067a80215f6eb3dcee73b5392d4045cd7260ccad4ea5617fadcbc9f4964f68a7b8cc453bc2c471437e04e0efdc8290845f480725363e20e30bd5f7010f11f8e93d49da2a4370236d900c52263ee53ef3367dc428e7b15b8029b765ca4b67f4c092483373d2422e0b7275d896b4d9524d6bbe04b3713ec2eec2b0392a5943dd2fa2f4f20114830b1c462bdad712036685f0e1155a16cc6fead4174c906e6da51db220d3e5b9fe00f472ec8f2a725f89ecbace9d932bb962d89085ddb06bc9298a70c90d0da1876aa72cbaf600fbb835c8a8827e5cdc35b673c7a2fb0300da99853fc985e9831a38e987e43164fc904564c0420ee31c29bf894a357b4608e0dbe97c8e059612ffbc3894ff688b4eda0fec58a91311486df7041670a9ad14e2b823f48eb138460683667609d01c99ee971a6285ba57269e124e57e11c89ebd6b1c7d0df495639f70e72adb6460094e0d7f04d4189031bfe4ec80e5d78a07e145e39168edbb3bdec06ae02ef17b74973ceb32d72320e5859d1754d7e551c18ca361e830e43ca8198fa92f3b5e426e32a854918b801a93837b8e73adfc41efc2a32bd6aa8a4cc21da590a966c5f9de3901771393a770d32d9924a560e1037e34edf694c8dd1cb1de7a9dbcb1c4f3ace17665e0ce40f65929039fe0e549a5fb167700b76639f60edddfdeb248ccf9ad046a37d3a1bf1238c397cd4eb32967c787f031b00905914cd21490961e6c7ed07ed96cbaf7380fdd8a4c15a70b41e5786179d88fe5b0d2843940636a36c24a6e0802ca335f2851ac275e89c9d3d89e46ea79b12deb8710e76a53e9f9c66e488d0649e44c13ca119b8e153ed1a1a0e4c34f8d02027dbc93c9be8a3d7e4ba951ab95b696a46931a183c17126e85787811928cddbf02fd6e4e311baad46e32eab0a35e519c685caf810b9bdf175231948104e0074cb6585b91e879ea22361a841d98033dad279c80b9e283553b7ffc9362998a5ef2e0abbfb1c3526d6d202a9a34d737ad5a24384249aad873012322734bb977083f45574bdbcf28e8328583129281ffd9b0ae4e2f4a32833b247320c0abaf469f2ccca03c08135c55255d434db273a1dc1d6be55ef348c2aa8e883f89c7bc0e3f2a3305dd2a05ea04e0355652407765109085193c6530cb4e9fef656c20f62b21406e2c48e467b45e6304c6ba12f800a6a29b38cb2a2c2a1c1373fd4350fd327c29bf7cb003723a7244c75106c0c4685a1107a33c36123b4d2b666c42e2903f98f16ce9cae5392812ce4f30b3dbc294eec0a208c40bb310b6d37920510899d50add62ef1bc30740f0589aa301d8f486619a2bad156005a48025134c7031ba2097f11ab7146fe07e847fb648897a11b2b3bcadaf048fc8c68f8729bb32ee9eba41947e9f381ca81d1e797112aed05263182b0174e918ba75211ab40a846262961dc343b91bfad2a5ba4bb71549c9d0c61b1f4985dce35ac4798d683fc7cead6b5e61730fbbbfca614b4600279d0f2cf4357445002b048ca8deee516517306837ce8bdd4f3cacd2c326e00e68ee7ab5ab855615d79281db7b95ec155e0c3aeb43cbeac23d91367c324e7f910dbfea234abd306b65f6828fbbeb03fc49a802cc3a51202e240da258876a6c503cc7759afac48bf0f96b408041ea84c17920914905b6d46fcd517d6e710c9562e0e5a46baae88b9062f414fd477b2b93cc606c0223dbb0654a7dd62673fa614f607c2a2ccdb182b6b931c2e410e7684db90a26c02c4d7895d96f4e8c89971bd9a3d31d259640f2c253f1dc8b837b8bd7096e70a89fadd5db15af85a9ca8c928616ee1d92c255cd4e32f0f51365af87b7224e488293276c0044309e46f20b2471092355c8d1adc28295965a3d4f46eef913a079b405846f8b804119d145ae7668b28425010025de7eef32d484a650ae9f6ad4ff4b7e52efe8971a9ba19691f3ad9bc7fc065490eccf131c8acc07cde97560736a53e66f58fa88ad27c3bc6fdb3a7980499f6c1a61460c018ebac0836368f9b2430c6e540c8576860a333889830d513cb574c4cc31790c4702afc9659360822739f2105cb67a983dca0e82af97dabc56e7c195c176830bc1e3ec55bceb24720185c3e54615306307c5473f5bc0091de28e1978618f346d5e92e025292f6575a0f20d0304c846bac02b85b1b7a1f353bfac68e57044d0731d0d8d9222c22289a4754fbfa4b9b7ac03f4524473481c905f566b3765cf03a8dded0b3652aa614028e3fd01f866263d8e3b1bf329e3f72c04abfbce90817991a19951ac0065b13b428df9d1d80b617a849e7aea2f51fdd99a92aa1671b2687d699e6d87ebd805866baac401d2d2fb3a8d1e5b7d6c56d6159ee9ea52cda1b6ac608783021bd136fddc7600a8f377fc40b026ef7ba0281e085e436dd63dd76d8d31ac9ab3358d7cc929688f9d9b15951dc80f5d42a4bb9282b54581450bac73471a6d168a74ab4deed825223a9b2851d78e37e9a991ed44493a0a64566d6506bb22a231a892ea008a66cc7057c56c174da6aaa3ca2cd5587ae070fab48a6b345b3a49768dd879cfa1852a140ad657d0acd6c4664eac513f6e3a22a65aa94a28515ab75c076775e028672b8c994e90c898f02de2311df717f5b1cbc976e75b95e71b2efc3bcde8aa575178016e65e1d5deb3d1959e7e4087d5e1cbbd003a3318dada3052a4afed9345e2d366e960961f7ed09f392e9aa3e67224985f8cdff41e6dd0e1d82f35a833e18d1c3ffeaa484958903f82467056ea2617f2050ccb7e23210253550815e56b27589e07cd75968665809fcd2cefe35cf462f277f01779810d5bc274af7dbe6bc07b320013a4728581f191c72e105a431eb22d337be47cdf619442289bcd9c56dea659c78afc4cdfe22a154abeb1fa9299a8273a6d7dd8e3c544247b9232878b128c132ed80759f157e5e7b3e97e719b9e27cc345026a2a3a004898a60149460f4dc88eb7b83f3b02c72f4277048fc47ea7711f2e92c7ae866878afb4dba5163746a586727c70e5b4a1623ce8913443243c1fc2585ce24c9e7704b733a90030235b4bea898a640f4b6f7cd065b375af032126b16812de6725fa20ab8a6d1064699ca152393208c521d80da57625401ce57c0817e640464b4038ad14a8d552098b24907baff14aa6d42caaf220cee696172a7b0bf8036993b3edf8cdf047fb6d157784da84fea6c0e72cae9f51d5ef4da519ec5732ed06876a349cb75b964a8897d0ca79e3c5adb26c99652ee2da59452a624036d083909ed08a5ab5f85ab7d7b30597d9bab7dcdd5feb6affc67ad486dc71a554bdddaacf2c9a54ad2aaca66bc3433b216fd79f23ed529ca29d3ea5e3feea959dd5bbd56ef28b386d476484d083f48dda4144f8a1a79663db33cab9c3a5fa591b52ac9948f6a2fcb82db86b4c0f259b7e06393c25746f88aa7c332663a2fca29e59329c5b21cbe9a2e915053f6941fed0034da77d01e3d7a605cc48387f770ea6c4f8fa7011e5702322e725cbe9da504f1463cf7b63d363396f3e8e1cf6f8f8b078f1d3c5ee5c1c37becf01e3c78f0f0d20e1eaf477dbec3791af2bf40e487775351b8edb5bdbdb5fb4de754b76ee58cee8cb7c7d039343935eeed32381d52120ff43049e274747040daa7067678f770feb63e3dbe0796e5c0c3791c8fcb8636edc06ec03440ba9888bf5ceca54ded341777b95888cb68cbd55e5d0c0507d1a6293ab8662947dc76d740bb93b6c340df6f4c1e5d89719412be28811a52a2e8071429caf420488e2b8ad290821b3f8cd1050ee26081182f6a406a1be8c3753e2d0d381ce8b997c1e77109c4ae1b1d853ee86298ccabce397fd0b9057a875538788c66085b83adb5eee69a192fddd59f070454c43bb13e3d3e62590e2f9f3bc7c3f56b573937657c8ea22a8a32e361853dfdbca1bbe055a2da4bb3bd244bb1217c0f3eea1ca4aad8d13c5c9bc2bf87b978636539fcc3241422f3ebd99d3919a1eb39a9394723e7cdb573d0db941136f7dc9176e78ff6e5dc79bbd7de6bcd00569603c5500ce6e8eef17b9557d494ef39e75af3ee76559e93baf1ab64c3e832368c31bb4a1535f9c9861edde51236ad431dbe6bd3959bd5f7ce890b0177ba3edcf62d3e1b488641d660ca8759a0ebbe0d1d71e59b05e2362f2d41258cd5ca2cf0f34d37e1e4cbcaa0c8e0e56bcd9f409b033577ccef2ab57b4f28a7a68ceebd7eeeb9e990c0699f37ebdc6531824e2184108a376786fce4e19bec25c95e8aeca5c7b03936c2ee987da8677f489c736b7fec6c69a09e9bb3320934c6e6641726ba59ad94dbaac69ac432f6e78422df4608f0ad9df7eb2be3926b1d9fbcfb96c112d5bc344bb27909b6fe79f2dd3fee764ef3187be2bb9a0fe5a245e2fc7ddb76687dfa7ace9686e9288b04e71b6b4d88c31ec5b10bb53bbcd983b3469a1a1fbd45027c6c4ba2438fd87c6d6a5b68233920d40728403bc0a27a9f9aa5403b590c05d5dbe9542ba51240720370b74d3f5c2a2b5b234f52509d2a8c80921a7b90d56d91a646913654840033c953f5ca92fc745ad51723334f4787e4e7b53d325ed3055d764aa91eeadde1b66f275b9bd3712729a164f249faef559e51d32be9254a7aa9a597a68c3f4ffef1c7079f4bbef89ff581b55e59dae9556a77d29d2dd2869e002ffdd923958c2e9f358203ddecea09d4f6709f33ede893fa29b1874d135019325a1a810ccfa33fa03df518b125d4dfc8aee0424f02a7d32ba39c49f5d429e56c8db435a650e2cb0c6d8d2994f8e2e9b348aaa72a67914c77b1aa3cc64863f5e465cf33e8d9f4ea2a41ac48f5a58915a94a32569564e99192cefacccabdf4ca5d9288551492e99dd399047e4a2820750928b52f51bd7a7bd565d263493eee272fb359a2cf4bd5f312f5bc341f4bee187d1e663300658c121573c27a7d107a6906b75e4f58afcef60150fe0d206b5e6230a5b7f49627a01ce18b1c3eb8e1c58a03aab77d00140cb4e680da39f811448c042d60e1bcddc0276f54afb7732caf36d1a1d7cbba4ab15a4f3e56875766ddba4ab67a89562f55d54b54b57e9e7cb4a2ffb838b251ee92ea6fc9f4ecb96c36ab58c65f9ff4c0654e59a0a7a03a591f1801256af0f1658d2994f8b2c614544ecef66079b8d59d1adfc4df2ea9cd72cbf2677bac8cbdc414b4ae1f379fbce554bd32ea59e55974789528e5a58af252a4bcc414b4ae9f276fa1b56eb1d291da9f558fd579dac27e38c95becb3ea9567fc4b66167d62cf797a4e2815c728d08a7a55512f38a0f292aab172677b2a9bcfac53fbf5c95b77d79565cf33cb1b2b527da9951e56a47a6e429cbb7f1e67a7ffb89f745287d6473ac5b291bfd684586f4d88e5f41a61d69551871e33eacf5b4f468b506faf57741eb76462251fe9cf324c43012f706001cddb06cef8e6ad0368e8e0d989d0831c40b8000e2b824e74d4f1841b619ce005114df0c24940a9019632a400430935a6a0828b189ebdb1cf212287c5f3408b144d1421471b5f9c501085873a84acd042032e809edb5017579e31275c009cf75cb71d3eb86de8082a9f918e90f2d924fdf09b5292e9ed9534d089f22b659e7e20729a2e659e288afabcaa7689809a5e02ca0f40c57e6fc0d0cddc8db949bf93fea0a9a459ca3c4d6f6d27687ae65cca465d990e32465ee2a4ff61d36ba69226749a6f09da5ace7bae61e8d684df49bfd7ad357fcd1e6120a026f40d732af8e2b0527882f004f09b2861e83452dcb018671e5e250858af5e83ad94caf85e51a0bc8bde4ead1540fa647ff56a27ea2ecaa1f53980b31685519e31c6e94e6633bdb244ac418161d076532dac943651c2d269bd9a8fccafb2d6cb6258085e0d1666bd067741cafd69645a9887728272ea28d5af8b62dd0522ee4f2373a2d4c953cd487f805aaf2caeccab579619640609726302125b76f7b4b4d62b4bd5f206b4d940af2c52fa91f79553d95c614ba0bb875d1fe793c3437654b6a72805afcae915854a6fad00b7732a1b327ea6549ea8192b4b832b53c6bd27e995853ee91945757705ad89cdd63cb911a108da9c4e969725fabb9ad0781d81df4a981b10d84e7dd72025cb0f915fe2c4fd74d34339514e7fb8cc535714ca7fc8f243e49db80244efcbf1672970d6a7e6656b0dad89e1d02f190848be275f16f91c46050723e7143e2c83f2ed197c471cfa92b6d3be093982b61b18238c2ea343189dca0a9fa4a1f290f667eb1bb7e1f48c9a0e2f7e4a5538dbb3a2bbd755d05681db7c1085cc43ef9cee0b6b8be44983ef7acad68670f6e41114fcf3e9f3def9204a98b646a0044022d08c95748a925489b1a0ea708e36399c8b48bb24f684c29ab8900c1cd3c66d7f0ec7b4e93d306e06c7bc7326148ee99cd211e67ec75890143f4de9b35ba74f2d6b5e8ad0ffe1327186d691508626d3769ebb07aff67c85e768e59b0b2988505ecf3ac6fc8c8f4ba5edec78603e2cbb8d719b7a5a175754f1ad8b2b843e9b4f7dfcac7e73c1cd98a8094139512f311151187a3118eb599454a64aa85b5a8928652d6d1abae2e50df06de88a114f5dad84c4b436bde7a45c6993b33e4ca0c3b7247ae5f209662b28be48a8aec8437848ceece9ef4b9bba78e1e72b5dbc705013d2fe9861c8f8e1129f97923625893c846f1c9783be3d63def24dc3e321ec108b3c849d8915cc2cc4425644cfd80ae6e23ccd448d61e03132279fb1c322ecd3795cc58183a8b3154e8762dca5b98b1556389d776a67a1188fe8f28d03136c0821087528e1061aa74642c40f8a28820fa488e284533b13b5b3962d5cf40dc46de7a0b6238588a8759a13d2e0319d43471a523aca9426c27c569fc3f01c0de44e594b61295cc5142b4d80e12a3da4309831ce5a989b3da7f3da18aa6bb030cb25ec502261874e1d4666ac8a794f407ffea2cf29a57c0f5b02b1f9dc734920e20c1b22a13259282e86aca0d156baf89a6f4356b648411bdbe0b6212684e85d029db1eafcf9982083efda6b421e96b15bc22cb8f7a13cc4da8f29e7e4c9524a296105e59450fac4247ce9ef9748aced34ccb5881d291d29f93c20a07f24b81fd049e79c73ce39e79c73123ae72084f0b5e7d19fc3779e9de0dd7b29e3053f0ca5a4ce291dc1b2e88d958eb80d94ef1e62c2ca4b7ff0ef92e88ddd5abf394b67eb63827f2ef95f13025b834b1e46f202864207e1334da902861518b4003e77311185df8b3a446e706280416d445aa47c56877af0440f311144d37484af0dc5a0e8bb877a00f45ddf7bcf5df6c803dae19d67586b3eec2c0d2e0efadef5196f3e73cd06e4b6b33f1d7e1e993f9f75f58f2e6ea6eaf00447e053a7b1b5739685f134b597d54ccf694010df4ddb84bc8a6556938fcdb555515866ff8de07b36d3f3ea643a9b5ec3ac7e5544e718639c3f3008fdc5185f8c4ec6379d1959700163bd58e39561bd780187480c3660c0c0872d42785edc0b23238482a408e20836720083262c218c319cf083239a8892c48d12747d4104a48648c25130ca0a282fc8504b2011d12eda171dd4c145cc1757741192c201845023066cf82045962a6ef0a6088017517c784580ef0dfa9e60bd1e924069d1031a0ba01c20c30c33096f016c7c939c6403c6bf2f4844140c6d4bda3d865ba4db9f3b81320d768ed3f807a5999940df7bd399a0bad28494211f0c01610744627085ca0e415e60c0860f860049c1084b08434a1a5d382f027803880719f840892f4ea02202265c300516357020e607cf8b2028d1822644c95287eba28159a28bda083c4df841095158e1a28332929459830c2ab008117406172088e3092bd882065b4c210a433f20c21b5f68a9c11969c0408946d4c5882ce8f8e18a28488c110605a4b0c11238b0011852b874a1a38b153f0c81043692d0628b1b2b8a30f40327ae18821a0d8c3096d8024b901a58b610c013a860820cca88028d2f5a94c0091ea610850f3f8001930511a8400298a02f430811c71245a0f8e20a31ca08e3092d0dcc162220810e20c06029c30915b5210331c6d47106143d786d14a145085a5c91a28d257698810b9ad00229ace0e14484105db060826807301c0f0ca0441551c0c11276400508b7031faa0114a82c4185139ea0841bb17551250baea2857f1baad2c457df86aa2401a938e7b0f66e1be75c7715ee9c13f87a0b9b96f3da39e798b9fd4187b0391e44f0af6b769f79360dde7bd573ce357c0f3ec7cdc5dd06e50a6e3b5ba1d252fecd00e57d14e132af1123344d9c78d538b116e37365406ef5c783a427a5431b292bfc9cfa3af223020c9586017bd8ad3c846d1ac2ee76f172024997793829fa2239200e5bc264dcec7d93c1ee4113847e65251ffec9c263dfda0adfda1037abd0ab1910b6e610420899d838e7dc18cffb31fbe3c78f1f3f7e0fbe36021b8d1b5f9705d7a393978509c6fc9bf2cda3164ce094387c7871b3f9368f54db741923b536f19db575780778838dff831062d5dd36c5cb09fc57df73cebd87351bb435185e3fda1dfb317737773712865e10c4b7a125b07cd6888694a0e3819e1f0c33b32988ab2189122554996b43e7b027e91c1d063a31e3bcd033744e4b23bbc96268ee4a5b202ebb75caa4c66cad8a9273f2688e66467384958ebc3b294d0bbe428db39063e3cd2f6f3e43e7cc8c8ad88b62aaaa86a06d479b62c414d3c88330ebd705e7e9a09b2000389d5e5dd25bb882309f57900b5eaf2000b85f4137be820b7e01c059b8692b4bc1cbb74b90df8ed08444b77200e00a13bf591b7bd9c071b38e7273d5600cc62a025a6b6d122544103e8dd2118921da1e2bc30c5e1af23840888c1e22e468341adda00130a31747a3d1c814c404e768341ad560031914458d463e1ae1bc80834597b687067381ddc1227032263a4afa4182d6034cc25094e5371e2d83a175070345b17cf657573fa564cf4829d4e1492323254561590e6f4d5aedbb36774a49e9652d660d21abbdac1bb70dbd80ccb7212eb63c3f9db26374ebd6a1edb1f36229313ab5e6a4d4b4284ab9f5677bec9c1435298aa2e674cb29cba2cfc1b62c66b5e05b4adba9a295cc14c5d78f631e59abe21f37ed45513c4d5114d543955cc83921caad10f7496d27637b556f81c6a97ecc9b6dd2737d045c53eb7594ce49a94f29e7acaa49c917b9d0566165a55b232da80da386d2191aa736b585169ca7a99edb53e3d4adabc7a6c9cb8aa156c52e2643c4c3230ff73aaf20cc29c644904a314ef826460cb562eea5a1719eb6df86b808e3291fced3232d48626efc36c405971efc74852a2feb36d6487fc9da313e58a05328b9bcec1c2a5cfc2bfcf0abe09447bd2e0e6353ad122c5bfd45b1f14b3a0b3545dc4b2ea1465e23afecc5788ed1c56088685c9cd1c2257d85abc6f6d0600cc60535f2b26fdcf96da8ca166f5dfc148dbc6654b03d3e2efe196bca95de420f5b84df8753158678177cd81f7e92d5822b9d6facc46c10f7ddfe70fbb0c20e78050b2d5579b59436c5284d48f40ae87218cf3a4a917e0673711a6d8a5eba7277780b33d10a146d0a45b0a74eab8bbada4be9d3f648165670ca57606185d211aab2d8dd0fe7773fa8e51656e594f4622a5f0aa2f2c36f3995d4a90bb5ba28ca9f6bce514c5a57fbd4d238d2828da29fcefac93357ce8bba774429ad75524a6beabcfa27753aa7539b49fb672e6729a555ad5a41586153d2d12531aeab758e99ceb9f6dc058aad8d9cb6e7ea68e43c2d2f3b44bd4c6d627b317fc1986f3fad6a6b45599665c93abaa453554a697ba4d3aada911c5dd2efd57e749db4aa55af5358efd5469715732f552f93edb998dfb429ba15c4957654ab48f9667b6eb5d777d069556bafcb2dc47079ead20523ae7c8a99da148bf45bce9eb965afd359d558d5aa344e394d0d4dadd5da5a2b465367ec7549a7a5b959fd51f5aa8e4623ab5a75e4948f6a6a463e1ab1936ccfa81a71f96c08b76ed2aa56e546e1a820447b5609f7ede8f71a427795e28f7b29a17beee7c9977ca8c7e87456e9dcbb7edc978ec0e81456ecfc95f5e9f18c6539504a7d76ce6b42daf6bc26846bbbe99c944e4a29a353e728d316e8004c7bbb69d2bb9a5d7f81a4032eeffc8723dd76298d0891183ac755b9ffc4f8acbe0d637a3a00faf79e3f334c5c05165ebedd6603ada4c4cd5e5fcef6b804dce6ed6aef98cfa0ec364cbb307e088b2bed887a08092d28684ce0149742830db6f7bcb5065b83104208636bad41302d4629a38cafb586b5385a6bade9b015cfcf3fe4e5a1436c3aac87ae50eed6167bb9828ebf9d037dcb43aff01e69df615a01c68a31bff354887db6e7a77f6299bdb214bccd469002ca1f569dba5a1352b1ccba735b2d610c077ef648ff9c0ef419758864e72956fd03a2b42bdbaac86c4d0857143674c5947f3e87aeb0f2d6ab8bbabd8eec7ce593ce678b4c7f259f379d6259f3d38c7a36dd517a496f6d6709939daf3010ec7ce515d6a4722773ce2684f2495d2ca14c8650b85c80bebd5d5b7c797609d0f6eddde0649a9d0c6551c54b0fbac818a48ca1755ab06243e7bc7f55ccf16a1b238df6868c90e4ef55293a3dfff1185a646eb34a5e95a22a45a76695b410728004d0a99d3b1a7419b7c7b7a124902893c40e7d834bfa3684849866e2da7c1b4242085cdc1ddf869010c2a9c2cb2bf3b6a0f035d71a6750fe5da1b3765f704aaaaf2763d5977bd8f4a5854622bb2d40a0624c182aba402a862882ca0ca61831440595218a08d343c594a1249030940335c498463910e3b9e639088e9b440823e7b39b299c78e7cfb929e678b7e58b7739a862ca9161fe7dc13c7be2fc6b6d87141cc7fc2283232cae8670d0c43ba79a1c68781912c38b2bd610a399046105708c79410f3c18e3d424309ae012c5cd4c26a71385b07262c7e9e685101a53804eec35389dc87e43e74c1210d0296b445214399f5e7cb03af216f881209820c4841bf4400575d88891041c5d30418b26f88004041a8c616332914cefc4afe2e17f480a1fdef9eb9c21ef261843e892e50a11b294b141106e10c50dca68d9e21b0708d714a4a8089ffdf8ec26080d80bebd7d5e1a6cf1ed24266a00856f3761e14196242e114efb8a003cbdeed6ddba47426daab43820140f3783542a2d532015a70301787a588b55dcfeacaab668693b34abb4bc90d361c2441760c6c851841c6d9cd82b2f4e670044b8824b1d5cb841e58a137ba5a5b282a888c679dd1d43dc4c3e476fd3390a5e8bf141263548fa743a12b3c121e226d976d8e1b840b8140cd3d1845cfff8e2cc3f54b8521ac22bc33ca93d25042b4a3ac8886f1f9572f5a6bd04fdb9ff9d49e2f2a87081b859b55f2e7ff33be7accdab1b695e1dca534f2edacdba0b4a851980877ce983ac5fa763b19b06d2de378975e884eb0ec5063c6ce184942ee0286207a7056021a5082184d18324e238b5f3c8602f1ed78ed34ea4dd4db4aba269f37cc618e85c4ed6884a3ed0a12072d239ee070f9d56d59c8f346f92e73c1d544a02695c00e2b653667a38f28cc8df8bc669a859517352675899152583294c51143543735d5ac971a7f70749f1538d53a7afaab3aab5fa024c9d551442b0aa625567556b85e5073eaeccc127e87556592b7ae8be3c742aabaa7223fc95a5a1f25291f796d7a7164a815e5da524345e39cec72ad76237b4894809cdc5522eee0285eb4e2748d11458141104279400c609ba0e4e47062e74acd1c411b62411c409fa0dd03d00bdb56695d0f8c59e947670a2f166b9b00111d06926a8c66d00034c1464288aa2b8564262d87aa04d306a79ca69d8b895499ba006a85b79cd75cbd0f1f7e2201a086c60a4e450b2483f8531148249bc289980f3196f76024fc9c867b0273bb0f042e874bda13146a8ef35e3a38bc6a92b8215321ec54533b8d2d60897f99e19ca4b93b9507352add3cc98c2538c80565a073a5fe91c2c9006f609faaca81ba06b000ec960cc4367d2394c546133b409d25c74c609185c96d2394e8619aa093cbfce76024ec98c5fec49e5729a71b64a687c843d5140165d844e3434d7c867aeebafb947394fcb0065e81c2aa772ea7aed74af769252a0917626aa9a8528b648e2cbbbf06d0b248abefb878393c70e7709fbf325943376f3b02514cfb7bcb585654c9c3ce51c1fc5b239fd5d4bd8a3c7c83c2443c1b3371e929da0099467be32eaa74b2cab4fb5cf1ec523ca1fc3509df2c8305ca77cb61deb94536d670710f7790f4131e507f06de889342c0d344efdcaa8dbb4e91ee1b257a738f0b3df4a436968ac26c23437887c7c3b93278abe5d044e682c4afba91be9a717080808a74dcf3353c972eaedeb55b22acdad3434b50d229a5b9fa0f2ed2fd45add087f75cef6307d2260c34abb0ef481f9f61798996f6e9e57af3e6be7d078adfea35e3759dcead98f77ec868691d3b87515b1905caf334e5bcfd438a9719ed6696b6869575243ebf0f0f61b3440f3ed4c74681d776adf6153630a8263c4b7bfd0869cd0f24d54535353532fcbc278da4483d1e05c41accb4443d99e19a7f19aab6439bfe53357c9f2f6752648c99ac178da4403657fb8cc1504a74dcc33c7ad472ca78df120e1b23f8cfa8f2b53c688f49b363d765610f7619969362194d78b6a4228e7ebf110cae91579c8741e5775654caadb21e6b6f63c2df8e13725e8efe17bd77b0cc04a1033e1b4a9dfbbab25a98147069be63114adbc7bad83d353cb4f1dd9886c8f18b6b0a84daeb58660fa8264b4698cd73a4d884658f4ce6d48633410e7cd92c2b8191c630c4846e7c039baa8752019370608378369c0343a27ccacfc79a39c3a94937c64b49d1dff1c5e794fcb5f708c0b5a04b1c51a57b2a0833a07215b16dc6cc89796b86d280e23de0555a7b0c9ea2ecbc6cd86546f273d2b88fa754066943a282ac297222e9f3534dc9343fcf8d13926933b8974eff387d9fc00c386d4a66e92a94d7daa7caaf60937aba7f6d4112e2c9fb5f0ed9736e72c235c7e6e24e9a4748f995f74eff18bfe73b6289d94324a292147ec8bd7b321f62264cf8aaec3dab379ae813c7ffd6c5e84ede6d5c10439a63be754ecd9a6e98ea29c369b9ab043efcb097f3bf439a1cf253312e91c88e47a8891dca7945246be74ce393d9b48964c3821f4d9a608638c31c410e1ec1be3102e4551d86d539c737e83bd0335e7743aa49a18d454b91e3dfa8fce991e2b2c52734aac62238efa03da6c78de747c7b954510ef1f7dee54b3f2ca29d3763571c22f297549e85c5ce2de78e811c9f5d179dc9cf78e604e36f2ac857723cf7abc1b79cb89eeae67fdeeba73d91c9651147cc19ddfda84401f8d79e1b3faf0059eb6e31cba073ed0769e431ab73c7a8906f3313d8dd36041da647dc6a1c760679bac5b666ea185e76cf27413fe7b35e1cf6a36dfbab2f716ab8ebd91bc25fdfcbdf7ea1c3727abf57a6d7acd590d87702b871526dd37d83b70733a3c0d04d6c4e0b2d754b959ab0c033f8f03a6c481bf8db13c78e33d212c6fcdb84342507cf61ea7a947a12f0fa3b59c853ec399f13e6394aa413ae7b911ffcadb84c3cfe8d9655f19ce3b9c1864507203131da24ca972658bd017323a270d6a5d51b2d0a6d2fa54de58867d745bd9d0a7ecbd4d8c58acb5215974f6691f147cf4209d432ba7984f15b9d09eed187a7b3edc1ed9d4a61fcf92dab8d9cdbb0f8299b00c872854f41a0da37f14f6c3410ad084b8e7f17a2143c13f6f382fb8d90db731540dd87b5a6061851f25157c907af0d861534333734796adb4a2a68cf0b96e410e6328dd7dc66beefc02ee98b1d08680fbbcb18d6ef2738b1c23738ceecae28dcf46ff6c111f1f63c4b21cbee3a0ed86ab65eb25720f06cba97c23cb56cc5ccd3927555d2cedc8a9ab677a751969499c8e0e73cecb0a41751d59d6c15955ca29ac125a24336534364213129de6e2222af1fabd7e3dbb360a977dca8ba6352a641a1532546835536bb34728cfd4db39149d5f532b29e79c92fa9c4ed5e9a5d1f49235bd642795544a1e3392ce28e954a15e472795cf00966bd6870fead20adb228dc494377d1b2262cb531e334ea9cf29294a5da56a598aa2241dcdcb3d5b234d0a2f25d64f47d4475e73f1573bdcc66d3a67079641f91d3b8c406185354e5f1d5dd4a9acd2353779cec97ce346cee3aa8bf21d3647e8089b3d3d3c5d73b10ddb1ec96e25665570b9a293721a6bcdd5bef23a6d8aeefce11ff91219b15c697b244fdb237b540a1f6438fb5d5606450632bec89163640680f5935a745e39e36c8d3480c84b33b567328aaa3f1b4853bd8e2c3be394cfd0cc8c463695a23b662a12ca2baf6c4f656bb5239f979176519ec4e9b0150e48f47849564a674b5df2a4d4c5456dfa69a638baf845d039d62315e7a4ed501e49d6c545e021d1ed159d9a3f44c773194d0895237cf4c850c848623ebac4a830194d8885c2cd1a191d9eb41dfe91b5ec4ca5459f711907749b0051d0761329cf9a16dfba7cd6b2f8968002489303d23b1c3de0807821e221268a6544702a2cc33199dc490ecb48dd85bbf010969784965dc68be70ce380300c0d050f692782836332b993485d6274c91ca6dd4d261c1c37c545d1749a94c5bd428a6f7753da49f73e37c5b9a00d699f972ba299da1b0a86a1bff0904ee2dbbf7c3b14ef6e406226b0a0ef31539a103adc941deeda5cd74f29096785d26f9ca230ca369626846d4f636942dacda8b773a04fdb03493f6484585f21723a8e0806d2be04194e80794783300c8ff8f6d6a2447f61181c113ca45d0a2f517cbb26bedb1901047859379c0bdc94be32e5b15811cb670e8c191a7644581d9dd3e0e45879b602f3a8d6b3f8cdb9ed5097d97bac470f58c1393956b001a128eac7539e3140520e2fd7865058463957d0b9aa20e50c678eab6685319c932586f39121c3c738ad6a99039c5b9b9028e004dd19dfa19ef5c3303d7330a35ebe679b701370339392229c315c107430e66db000c3c003294f794fa7636af75ca4851e5c191806e83d83c98ddef935f972cdd48650deda908cfdd1c04f61494a665cc69af83b97dfac1102fc4f2b53c7c30c7be7b3090ef12977d2cf80a730befa3d0948ef84f4f048137aee309c20455a17a01e5e094d148a6c906186249dd313315390295ce79969060eea5cfaab6816a9c9d1410bc75d47720ec87bef5128a594ecf0ea794eef9cd746b7435cc74fdad496adc1e1e040fe203b813e594c071bc7cd1a910918483b0fdf2cf8268389f8f647861b2568425a8726a4dd92b959234aa2a487d476a473f7822aef1ab674fe96ccb477983174c51bdf86ae28fa8cc8d0155ab87079e77d958cb8cdf6d030ee7353109cf6dab86d88cb97cf883c0e1c03911774f8d4596bcd1f66d3267e87dd98719bc7761809bb6ed3a4093d0efd4d70980fdd49fcfee89c3ffa30e021f6d3ca94f9871d39630a0f69df3b0da04c92ad49795bcbae52a5d494b259692d563a12a7f479498f33e339259c82cdf47a3ba79a2e298acaee55bab6d2585196fbac46d32565dbb8ed9b1662d0f1366d82b74dd025b4467cf8f8b0dc72cb9a981de2368fd44ef5c615236d51e51b4579ac3cc619e9bb4ab6522ace26e7aca6d3d9aa0a9356148fed1c8edb4efbaf8a9ebb9ef7981f33f37bd02fa95eee803421555ce98e9f8d11c68a9a12c6c7b246cfa4f44bb1a561e27c662387705b62de3a7c9ad6a3ef5153c25755b4aa2074861073d4940e4208bd3d5fd0e17b0f005696034ed55614fe9609d74dffa15b3e3a44b48498b2babaab25d3291aa653dea294755acae545399d9352ab5a95a297bc2ca7b3c76f848816280b194d095f5d25ebed8d48a71ea7f3c7d99050acc7be80cbcf221da19da8442d77744d2b15aa1109000000d3144000180c0c878422b1502c1ccbc2680f14800e87a2466c449a480325886114859031c81043000100200032333313074082aacb7a8120dd7fdc6eaa563fdcc6ce6b6845930912be5b163161b2112e8c72f8fb09f48055282d4479201e807cafc8f80dfdfa8ce691debda618239477f686da7a7147401a52f21697104e330b3d21c3627d2d384c0bd2f901c100bf7fe3cd84dff705f71d4cb218a845093143631e44460aadfac57fafde631761d93841c749766099f38ac4c224dec7ff61721d133eab7363bf5d5f9718db2c98a6c64ff52b78d5c8fd4749c7b9227d08062d9fe84937a8073dfc0b8dc76eac378b8b8eedac579cc61e94de86b59c3ce4646d60978ba4f1560df665af05499a12a5d27a75c5102fa83dfff31fca7b9b5fdee6cc036fcd3f15dfb258c787cf0331cbe42426cc29e684db8f3b646c5eda6096a39c0f3ed9bed3d40b9b7fde2343db117e6e1e294031743b0347ee0a45a13647253ed5030da83f33b812449a6b3aac94738810d400f4b0ffa579b02e7e7d11e6e1a43fc36fb74d67f8e3aae42390302a5caa57e173fbd5a7b7281e0770becc9dd1fdb0684038bbb114887c81bb31eaaa0de42f95b539373b273d04986d90b00aa378716d39949f41b51906dd9c565380850d3427b3587c7010e35b6898e4fcba760dab170089939d0cf5ad1e64a55fd690c45cbac00ba1fca74ad2aaeb95c2bafe3e9ad7af9a7d42d4cad059d8945a5d27c9829a419af880173e63c150ba6e102466a1be506a962e33da37226d7ea8cc4b8446f7c80ea02ff716040cb2ef2555f29abd42c182130cb69f0673f4bbc131aef3656bf3d63adb3552e9ee31b3a7586d521cc9eca1528004780520e1f4c71904a427a32af6c3a762d3858945ce07bbead1bc0dc4001328bce82f9306504a799735295cc7ff5f2efd2e1eedd0de6cb4070e8c9975fb5521063be8532b79f1a24016fb871b2e9a04067c93a2ea52e8db66feb99aaceef77766bef6cf5a03301e16cb6bd12eaff7093f188183dc6be372f092ce44123d187e7c28e7fbf5087f50d22d69dee14627d7d68bfa54ad522ee40bd7292afef63fd2ad6c278209e0dc43697bcfc5c8c4bfc5d1b00514c77290bd2d8c08d1f2a0779f898acc61e21d0f434feb6a6f884f3497df01ee3ce5f2ab09dfab0117057b49905045098bf9a66a780445c70b800de498c551b9f5f0255a36612780a562797f89cba05a185197741d2f0894d59bc01b0e20b8dd76c8c86e3b7205f37487bae80c921bf1fbd475f88835ff7b4910c068279ce80c02ed402bd6fcd1bd85c746df3c0f3a8f4c9943a0d57676010fc58b7ee04b6fc94c002393352314904368767b1c2f735bf1c32cd56176050ea2d9ad4ae860ec8ddc46656f874f98e9042726ef50dc0e997e08bbf94fb26b091209cc48fe52ded19a39995c8bd5ca0a1a20d585aa648975ba0aea32a9c8f118e1a60e5f6d8d9e1e308d3a6637bb2a92f0267fb715d9e9dc77f3aa68bb4cb2515343d1b701fce5ec13cd1e159fb4b13791f66e96fb1bd4e664e408e85b0c3b3f87ff001e4b7d795e83397a3a2b1eaef7a2291e0c7628e6c96d68fcf3199f2e954dbcf66a4b85b76c2e51b5876ae39b84f2f771310dfabcbfca13c8f7630bbb5294960e41598b3105d04c8bddf9beeb12cb5da0d0931ab2e95d7d5202c5701327e5ab6ace53cf02d2cf246f9a8c8a6edb3569028a778579b9fecb5abcd21931884f30c3e4c528ca3f3c29c2b4b4075cc8cd79c5684a8f95ee810c5e6cbf9b763832b121a5914ba034fd9a5e8c94fcdd404bc4075f110c7e505e420e286ec43f3049e0c30255b88d3160a6de220832a4aed034f4e87c8a6abcf3a540a7c837af1ea0f3caf42fee7445529332b41069ee9610de8c8c8328b560e165e64aa4159177bab41249240f70d7bf288a8f0304cfe364fca90134118b66e4959214365e7141042e192098f1f3c7f03b38f55fc04ddd8c27edbcda9ec69cabea71f6249d0e974fb5fa5e51ead00de30dc2b9200424f531ec23fd5990ea33469fda5dc5af3ff860bea3e1e19d5154513cdde7ae1abb675f1257e892cfdd21c4a1127bbcc97c12745bf6f4ed375499970cb884e932cca3c5b9a4cb322da6cf422b8d3f458950f6092b72a0fd79f51b5f4d6f71829a50b41011b5cd88b39d8281b7c1a8ead271ef7cb57650bca3cc48c6c703a032dbb240e39b8b8ead9de0f72efcee8f3096bae49468ef3436d95e38c613dc918b97c412da91826b9bd7d2e6474c1479f192803b41cb0c050565c087b691d2705847a48b83d5a82ac5890839f75d55fd41481279983729a49bc7213392e19d1f7029059e658380f25294d63d1b83a2d749cd6897f588910dca2ec242734387a0a964c18992e373a7cb9e3fd560427bb7b436181d357f701102da40dd7e9d4015dcfcf8df4dd72778fb0f0f338d57b492e9df5df0c1b3dad3090e70981aa949468add80b4da59e1dbdd2255bd8f12e73e2844329160c7d593e8f8c1e345083e5ce0893b89a4a3b98e524aa33d65c1ed38dee78256418c2ee877831923754c6e93a2a4734d2637a5c50db5ca8978c5ff68234bb891d4928ee1a4cad0ae3f7d0be599ddd70ba6d8b03b1a89787875a3eef7b7e6a665d04b32539e9f03f60939c9f7b2a0499393bd254d3624298f8734db03bcbcff74a8201b09cef153d041b95543daa6ebdd3fba6436c6cf92449e3646d25a09987c928ba51fa334fa09119a4428b152623e39c69706e1e1d686b470bb9599f0a18a81341b6a0d5e3760e3a0bac5163f2f4cd271b8db7a29912b16381aafadf456af3612c0188f368e12618c46b80330f42c360c0d4bd8d7aa736c6dc00b3b0a072074a2571f22324393fbabb93709b3a75b5c1b8990bb4c1bd2794dd03834fcdc44714ffd45713848c6f5568755bc7bcba928b1e749af320cd8542e2494ad65d84a7f1cde95b35f8796756fc2d10afccb58f94acf358f1904b5246f0e8233000741ccb31c908d8e48083ef890074d02fbf9d02b78a6304c33248e7375b955b780b9c4ab41b545ccf35486a345c9c98dc91e17ced23d081b1e756e34f29f0e917ab7d8633aaa6e841a0169f6d41a400f8e8fb8709c10b3bebfeccfe28c443732ac4800d10ecd8bc8bad2a0a109323c2fef5cc0d3881388f5c5d9b5d0aa771592974daf68f776126a6f39da9140fa86ea22261c0358c6461a860bc35becd4aa3bf21c556381e84c8d12ddaec92e9eb59c5ce7cc42db570fb7c3e5de74d1a0512ab26a2a3e81bc5e8ad4f905923c586ef633a1a2ba3ddc8fd0a84c5145c9c1b932beb5b486ba097e18ac923252f331c9444de7bf0965b955465ad7e984f70754d2b279d34a22718a01dcb7b45c6b95d567138fafcb26259d10d57217c69dc8586accef89dde209db011dc7eb635fc11283b682b897da03a04e89fb201b3d974c879d223a8562d7956cfc8aef9f179c7c45a672f3d42ff06d670f98be3efc5e7263fe563a78e36c2df79eae299d9ef4665e6f547a679db5cfcf1a9f2363142037eab413aa22d6ac597a7c504223a652922e6e53f5cc8b503fb71341cd7f6ff37a2d1df10ca5df9b9b03a531df6254154fae276f9989266ea175a6e77adb3b5ba9cac07b70e01396d43dbfec83845f1de43715b91e122949201e53929da0d63d8acd0c59d1d225977b9bc9e38e6617f41b3b818a2984b1ada1780bb8026daf30d31580df70aedb03fac8d8dc79957e6c2d0e65945792bac4608ca109553c70b85985e426feee50dc42484a235c4931b0795041e1c7ada3b22c0e6800f413524307093461cdc6c93389e1d50cc8023000a613a17fd04f455b6af7f9abaf7d47079c223e81698ced8ef39b1f8439c07e4c55269dbd337c3ce5faecc9090f20be89ab8936ef5a207d8910cdbfbf03510aea283de90e95f0c16301b3558384f01cdbb907654271758e0265cc7ec83fa043f2bb91787a7978e11deadde6aa29b76bd3c368e40ffb1ff579af9a1ed8f77b2ff00d14e3578c1bc81d52b699d281833b5035683ab0d2bd1b0a8d7f966f8bdde052d2b00d6e405fe80a4cb99c5d89a973441239c7cd4b4313c4630d7fb37d207b171b5093389f2d1ca95aebe4a93e4647d9d7442c2b99befcf172804a5bb8ead74d33a8e201881eac953022928514d8b5f7d73b312770f5249044fb75a79556c4df725d21e0504bf38ae248b48dc0f44949459bd88e0fe2a8284478a51653219756430ade7d515a2d12689018944e3156d952eba61f5e7d58936244cb16c9c774cb1b36908909836cd006d913371cf7640c68507686997d33664b311ae300adb98e4d86fb20e8f25c998cd66ac62ec907dab25508703a6d247138bd3cfad85eb96a9ae2525f9efe693b12d517ca28710c246a563fea66728d9de3de6f555a9a3cc01a406b43742267a7f17320cdbaaa0cc451060d7e62d6d2827b911abfafe5a3eabec77f6e804cf578ea7f3432dad214c92e22fb8c7329452e4a27ddf38937fe6f3154008f95970baaae1e5d40fc76bf781c7f258c83e36dc4e1c3185ae0a1353218b91795b4225d2989453469a9e509f5bb01a45cd530080179e3cc4a492a05b3657581f3b212baa24a0a1a07a32e2e378ba07823f5c3fadb20d263f653103920185163b1735a06956432e2f10861bd74b8fa1e3728c4f92bbef3e0ac7c2f106eb543ac14f5258d73629cf792eb093236de4ac63291a448e69ba28acf380069ea9805669976bee5cf57765310b4796b0ef2a8809c2680375b92f95778aa59b1bc5b6487a0da09fe2fe438bab59abd12d543b786a9f735c082d2c52364959a4023115ebb9b703becbae5897a23ee634499a2cccb6a8fe3e8c404cc480770b6ea8f992357876572ef24757408c0e3eb8aa0d4a552da5ed275933a414213b78871b258e89172f2aa34828854ddda0f2d353132a1105426d791cda75aad8bffc234fa66a9012430a842d2408da6f0dd0c0d05ae4536336508f8938d408914e7b428e8888a439ecf7aef9e2bef11a38cd6e711a95000240dce969cf1c69db09146788744022376b6ac0964a45f5c53e29c0c515babf4b5ec6f3110096da48d473d2b98cf515e1fc3646e5e6b959bb596d8ac62534ed980236c06cbc4be6dfd1aa1e96798a7fbe3db2a792c626d15196920a6bbee452adb62fe0e34b7ed7e18c19393e0c59fa1912833aa9daeea5bd8d4283e5058ba5d31a8e45cb9fd4f009f339d6f7f87f47c20b89b50e388436d623a4a599a7d408b3e05fcf5ed0d61a8955614cd37014b9e0ec2949e5b0a798688e443e6ae165864e7eea20bb46113672482b40b3c3a32d0650ec349d2088e66f33e8cdaa1c3ba5449e25d5247c69454dcd6dd511a51b94253862ce6b5a2714b03cb0d535a5d642a20a49524e41c52b0d760f9bd338318d6c3f27426ead41c6a8922d483d7e33f88d759e324fbf66b603cf8b6489a2a600135bd5ec4010c43df13a9f03f95888c4dae31706e580d436c0640eea5b2a0e6ef9406d11d44f27374b1c69b75766e3b9cc277cfe5a9181f77a1352efa3a7c0b8350ecb74ba22128180daf16f67e8c4781a88521199320a82a57cc57d1424ad05834adc4328460dc872a9905ad63117e8889a5009c1ba9ab9a156e235f5491de701c4262621b3f2f5d0ef4f75362d6d6001323b32e3b17a9ef38404f270b4bf28502e6b79445e23fc5ae9502e660c15b91087827b3aa9679c068c8824bf88e5058c31fa36f27b8206d34a4f3de4e4db751944a16a8e8ecfd5c5ea4c8307602c900ead44d60cf66481785296018c3db08ef7d529b16edd705df06a95e50cc037cc8ff7ebb58bf3231185978e52435306d693dcfeda84ea1d57a6f6245586ebd5ba97100bb412653db7a23c63e40068e42a695a6ce4cb9b371bae598325d373cf3b8cbcad66bf5afefb1ae5cac6c5991dbe2c91db6e6b45e402404fc21274067cb63976b81d0ab319e84ede2662f6e85c541924c3de255b7b323a61d0067465139135f844aea52624c3789e188d25dd5bd8cd14111073e80081e213e10c0025f8a8e448374dc660195fe9d23b250d3d8bf398aeccbb0910796f3d1e1c45c51b79bf395b5056c8279ef997469b11bf370b762b0be381df1a6d323e7370f99286337ee4c882a399fe02522cfa27463d58b975656986135dc6a80fe75e6e00e9c2724969cba1ec77bf41e7997f2f1b131e7d24b9e0bfa7e5b131946d4328539b73c19630609322ac17759401f680e8482c4119a4d8348b70641e9a10b48fab732a7c7fc211137ecba6d7c8bb62c9aceb610c5534494a5c0453082b6d9c805f35238249c663bd3201c0a2eef1734afb1a1acf18dc4ba1c7c34e5357f14c0e4d31b27adc6c64872f148cc3c0e31221f8fa0e14690d14818bc351b9163305f741392db7e3f90010e6d3ad68a6a5b39b76e8cd9802d19526b046b8cc9fc3633632c98b2688bae8cff80332f79c9b2fe21b08e3581f6ddfc47be9cd9eef05c9e011100d3341980f3b7cd981e62b49c6c8e01991f010dc1ffebc603a4c14edd42bdac06b834e56097b45707f6bc181f431f3356924d8aa2a89e4baf0f9e0deb367b0c762ed800025fc94652d0589ba2e589039f7ef87e09f9af14f723c296947a071fbea4619d5dc7b4e4de9c499580aa91f5480a38be975e0b8287e14abd662270f13ee5bac6e57ebc90198ab27cb82815739cb9d274f1da6fc3511a324cddb8ad3fe1bb693f82673c912bafd3ae6e15606065737b820e761516fbaf64f567634a2ac0401c2eec527c921b9d5e742e93028b1f8e13dc00f601955e6473d0fcca767041ae3ea73b1ea8a814ba9e36c871ee767ea93772eeda883fd6f7402bd51a2dea05118f09505b1c3c3fbabcbe6842f5bde811465a0e51e05c474d28f6a5ab8c0de8accfea766a1cbf0213a3926d2c33e0a03a9deaca9bd10426f1b449da402a3dbd0a3251fa031fc8d26c3e66ba5c2726a07c10a93707e238c60e1c5401dfc249248d5704c5c8c27762a2c97358a32e8ccca985bda6119d0cc1b8234844efd0163e729b5cc713f40fe31a262cdcd3fd9c64a9b65c8a5984edebabe30404d01b18ae5543a5777668fd8b83fa30747b6ecf4d808e65dac0beb821a0cc0b01e10ad9b1cdc119961e84f2eec87d73ec3c9d29088606311104673a90716b7335d99b625b892dad4353704665d5314e9f7c3876df32f6c00c7716a44d1988b66f8f53f9f1be620249e18f32134024d37b407b3c1f4c821fa5010650c54f942a82cfe812812d714107a9aaad46099b9f48b106a892ed6a0ce8c5288bd0b007919d233b6a26fb680048c133146c63c15cc678bd2c7f5146ffe899797169e465ac22e01417c2639ff7efe7b5e348151b3ec820e258cbaadece9d9b7d8f6cef340c7fef3605457762fe949d6a66c80c3b628a30d11281eac796878574599022e09bbed2f1cfb1d1abad6288ec60f48fbcde96484136347959847771b42555c88258e0125e01b9a5f0e7212e6953fe3a35bff51388064adfa8bbd755271eb307fa1bbe0155017098d62c7fc7c827225380fa516c52913cf123bd9cd3121ae0aaaff49be8883548864a3f0b6b9338b37b1ef83c022434ff70da935eb7b6aa51beb8d264ca39a63b92b5f9fa493d0104d3c60af350a11e8c8750488f7af29f3b5df760276cba435d3841d35e0a45ad656882d1e7584ca73bfe7f636db71961a1272c21d6987ab3487187da4074977114e550b002a9c747ad28acb97af4cf1d2db8695ee1c1ff0a1331173cc54a4e9e9f4e4aac9e86f29dfd25aabcbd2948e5f6c0ae4aaf4592c888eaadd3124b074acf554ebd2d0368293f3999034c5ef88e7cb45fd3c9a9e6981bd5207f21ad853fe4df20fcd0c884e3c0cb695d1f3cde1231a460492da630d72d679c34b8173fc34378b6f99f47f7d36ea8d361d39d80e28097c1a66d8e11e3cfeccaad87edf846cb9118a3b714f6460d2cccb5b8602c64e0860c7455d36faf18d91fb45d626a141a443b478d616f091e041448f022553f1dd43510edacc5264411179f2b9a01e861476017a238545361bf2a8ae38c00bed58a0fd42f057b36a3de53ec01605ef8e3a20839545b972617ec21910f9bd516d81f51ea347548e6af5d5f24a2b7002a2f3f56ce09afd72b300294bc7b00728901d86f2c836408b07cc829f62713887cac5bee063794e917a6e408acc7fb5b1f912024670d3af481ba04ada7b4f9231d7b6ec2805c510d7ad86ea3703059a7e5232268eb9c85aa166ebaf56af95dbd253cbd056040910d820cd84d262b38994d59eecca1e8dbc3784e7c114f0180cd3c76bb16416d892c73843118e41e5cf0113c93bdec1fbdfc35c5c8b88ae30c41a7fc7b774529a7af7fc1b6c893fc07b5162928055504a083668dcf8ca7975fc6ab4f6235f4e6a16ecb34ab92f4ac59bc16d491bdd95600091a81bacad6a7659912638515deedd683d001f5c0710dfd6070e48b82f08daacd3ed2763c9a0c6f38c99cfc975938e4e240d3f5b6e1e1a8c726475eeadb9b9f2a08820961dade9277fac627bf1da80c359c04e2b1c92367c8597b6f07d2ae9d974f13d71d130da2468c78a6978cabeb1dfa11697e941ea98e3a5b61ea9c715bfbd4d88db5edc211582db9e7df3f1f5d057dcdcc1b0ca3d893a6bc649fc587803d3525c168ab6664dbdae5ef9e069e65b0fa7d07e5ffba7ce880e733041bb3f7f77b8ae4086c7751883295ec5ce9c13ff71d330b1c152596fcb16cd1862a005680a109050084bd0b58efde83b4f5edeedf25a04b323e820a9228c316554649c13cf282e35076325543e0df19a5ce126e1a5546a1f626c2ebf01c71fece05a560d748b673ae77b310c6e62bd8466108863fab0c40176c4c5dbfa9673baa8028529691ddd131bca26cbdb03b420888a59cf75c23948ea4673b3184149a968121a26a186a544684d517190eb3ea37d06379250deff5d403003a6a243eeecae97f1557ccf81aa6934c18e27befe40bfcdd9ad9534ac5ea054c01a53fe63fb3b37cca90d063a35e942c03546ab93c0d2d2ce3937536a342b533614488ae688fe4ae963be7037251f4a435fa5a3525affb08dd8d3f9b09fe403df2ba8a8bb769bbfba9e0232d1db585d2c520c401af146d2e9767869751719708ed5bbfe2141fb5c0ba555310f38ad42e2e1b95b28972cc93dab0600d51d8f4d25e19b1b3b03313706bd7f4dbf1875f58b85d3aa09c6693e8abcd3cd4be3c0ac622fa5d41ce4064e42d6e292b4cae087ea1f4d4bf76ab468ecc8ac7b2b43df3c322caa736fcbefe39aeea1e07eed970b800026a1745593b517a63a2c9b5becdf5c2837bb8e4d62d9c3e58299fa50c86ea7f70d5dffc5ba9c339c3192e5fbe2eb8a2eb2fb100d9584f3a1512feae9dfbbb77df6d859ae13ae4778389797382807309a5a800de933462a5f9ae8185461c95c1588043acef270cb407beb10097e3219ec09b907c3b4c8af906f0022e532b9d4392bdb7f0d87cce18a93ff05aec8f38ed7847323c2ca62733ca41336f98fc0ac00348f311c622f72df0a906452458ddc87104ebd80436ba08f6cbeb1fda267e9c8d53fe4baedd3a4fe5c27379a535f86766e81b5e16137d4d848dec1bf8d89fc38051bf7b50006940833a3dfb36f685df250e224d5c19860f9b04e285b59d2ddf3dbc48354d27cd9b26fca5bc02065a1c40f5a1fe0c64a3fa46474b8070d945334d18391fb5cde525003489258a2512efcaf953dbf8989d2d78b9a145c2a4571aca12711bd7fc9b0aa665be00c19c7350f73fcf777399b063e56efdeaf33680e253bb86e4f90ee31909ceee96fcfb7ae85b91d462f54e5ff1c0256b15f11808ac2e18f94964c9495d48171da85e54fb59c1c3f8a9b7f22bb1adfbf16b4aa3cf438cd7eb83b8a99f1ea0167322b42517282fd1f8d1cde22d82395004e3c180af57497bc61adefe3b0683e195ca90aab51540d5c51ddf37404d03afc7023a76107408ae5ae9b763f87b6b879750141ee84cf0d6531988ac1d4cf7738ad5f818b135afd62d10bab5f28dcc617554507cd415c8a9e8a345e94daf63a73fc8901e31dfbc10758408de356e0965c93fcd50496672d28d43c27fae0d8a313ec65c954b27905c884b696a376725a58809a947cc71eb25516e00a587ce28103b1d933eb6cff10fdb8ba8abe2fd353bbfdcee5f314b310e08c4532a809631052dfd4999cc504ebc39e1939ddc7e3f1b81c4605f8ed3b0b4f30d2b9aedb94917b6cd1e9b53e753a054cc13bea366a14b340133fad98420c95c80b9cc0e43aa8251fe7cb2b296f00dbf81971da5a24f475e17fae3a2ed430d08d604ce0ccd76c0fea86f6712fd8e0fedb5f87e5cc893c7d80d50e861f345e3c29b1fa07310f5e06b427e147352235ae64de31850c549ca32bcd9b6f278905947f1bf676ecce3a908f848eec175ca4c2138e52a5098f456cdf94e8d51952a791726e0ea12a01b0777fc144715f1d73ef53051b370447bc434ead8e14f3203a441de389a0d8809a8f6050730607bf7492ea032af19a69d3cff88a17697a1a264c123112f119c9d0ec3e1c2015e184fccc2c81d44d16f8c8f930726a51f2af2c28900011f094ff4a940e99a5f479d55e064d52809c8b89107e567568669f73574835335b631a4aebc9f02c58192f4d849787c56e8150f162d4e9ea093766e32887ce38cb1cbb861b742c05825cfde581a77fac1759438e13c94002972933ab3d17ad81fde05289301a8a4311ca267f5e2029231a68075fd7a728c67181fedbc8a726fc170c323a3e3dcb38ba7978d35d044e3da9456066f3a3bdd9adbd6c961d2b24494dd2921720aa582699522a7ceb574a27461779b11dce1cce0bef1dad20c7089829da4faab779dd3f340b820e60232427aefe44e232c3739a9f4c409258386bf1b2b5db654bc60b11e0722b75f56da1b035cacf6cf57624aec4ba9516b51476a57d3f036072e0d0eef1b289be99d571f407f8c9ee7a3c738d30e64c5004e790dda4fae8c44c20ddcb92b847565394ac1c8a35afcb74cef909cc535fec91d998d87b48aec4409166460ce26ab4f5aabf11d53ecc57d29afc11150490a987f56a9e4cdd446af0dd8cd696f148036d06c706e2d6dcdc0ef6d8d7b1e457f21a5ccf4476dc6afbabefe5bc0e75b8ad903a4f455e99135e11a9a866e4b577d552829ab82157d10b8ac3aac9d54b514b8c64cbf3c133eb6c95c0dae37d1908514967e91e41cd635628f3d3c92a57a4e7a35e4d43e0b4737aa902960edbc78499007d565cadb6d21e9c7874fa7c8a618209d05d9132cfa1bce8e9b8e11f007438b5be0608446e60ad408c8e0c042c35d3fb54e217f4a6badbaaa90e2ae045eb7590bb71dbf6c45b378ae304180e6449fce8b7e2f2d0321afdc0b39b4098a8a8089fd7d8971a24e776d701261d7d09369980c05ca89db7589c3841aad36586fcef4c45d8e12c5c60b7613b9ff1c7dd8c675d0efff43f288f25c06542c28cc422410d7bb73ebf08e8d8437190d93c4c7ed7f3337ef0f0677fae209f9238b39938f508478904a0be7cee074b5a2d97cfbc2cdc3ba4da028ec7d39e04811559cc20f0f0813aa656ba204aab1e3d0c49aeec0b404bb961aa9cdb53d69fb836e8ce698d14e375b8166689ba53efce422116d7bdc2e31c81a679640ab4bcc9732a5494d53bc446e94ba7c138112db7a9850622e6360c481ca700378a632f552c046057464588a17d8e20ab03ce4a34b7e0bc27f48bdba146fc59e4783d9706d8a6c803a3b708bcc5ab43a0028c502a6df41e2ab25d152bd7662ce4698eecfa55833e93afeb92fdaaa943a18b8d1dc1ceee0dd11d773392170885386f6cc5c0448c40ae681fa9ec435c3dc3566bba50ee24e16153f21d085e37631510787833f9a8e2144d9bf12e439b7d1fcd5668e3b879f2f00ffde9819c86d644300d1c85ece0ece5ebcefc95e9bc8937b079a15d0090145fb0012ee77a2e565f42407de3c3a369e0e31199d588c8d84988eb2bef2387fe98a6c0ebc855398ab97f7d5c0828a88c3ceb346e8d2027dca923e0902e840ab48f9096d4d319e2a83b65f933328f13cc37fe8426f0c3db067a3f9ab71d7b868a6ddddf538aa719aa11a08762336e1eacc4c33ed0f4307a69102cf7a98a8941f115b7cee4e3d0bc1d73441de15304061c11fb762e8da3ac88a403b7f99bcfb930331b3bf0c399e5698cae09675ddd985ae8cc5f94fc0962384681ba26f5edf805fc10586925b1ed74603d39a80b14cc51a3658a16d685ccd0d575dd2e8b7a748715c5c46497307a7fdb72c01078a4719a05e35e72b813b4b6736f8612f058edb652ec8f263df759855f79729c36ddd221d659900e039523701e4263c701eda3f84612e374bda63e8c61b4c090b88fedfc4145ddb357662207660f12ce273dc706ad6f8021fcac3d8bee59c325a1f66f322defce2815e1bf587f1eb745733da2ccbae43b653dc4163512a37bc9ef8c57eadc83a93fbdaded76ae9e38077445de4a55257ddd4746d5086a541ae7d9940990568d735dddc63b4eaf4f71f148f1b378ee98059178222e1d6e87278f0e1b9e59466ca3b20d61b304adf866efc4ad7ba6bd41963df5aa4fd8ae724dba3d7a8f12ef9c8f8edf1c6b158f0a73845a93bccda230026eafb759acdd124f6cf45a209daf91b4ef25a5b824bbd56b986742f9781b084ac20b39238d09ab3d03f605c5460efc9f0ec7a8e6f05f1a70c3f51711b7143e3bfb9690e7db040ead90cdb9840827c47ce8194247732d287a10d6bf1bb487e6f3aa5ffa1ab7bca112c94f707ae7c410788c93d9d67fd5b0e88d10c40d7377336b0b04b15b0d469b1c943129b241074e160d32d11f591f08a0936afd7473769c6b23896002b96a3bf67c057d359a18b28cd8b5f69c5fd8b4f0650701a6dc1022fa7a055902661c8e93ca75b433e0e7a95e6f28e899d5543f6d845d128fdc9a4fc230819295eeb27a77613aa5d7784d31d06d1f3382a794324011593e37e74c84493d52b308863742d6bf78a8409b0b56456af7cda1f66b938b9b17feb541e8842f59b51df8a4a06e9af1453252dd34d08497c3d6129366671f170a46225040bd6ff2af34c0ad2f6b6cce9ff031c45872ba48e75a1d834879492663f2aff6b9118904e32b95e83feeced6fc6e5dc43feccebfdb1afec60b6c6d32b3570a2e3b8137bc5a30ac8ea50593233d43e5a6fd5b06419fe0234b8513f7c8c900e79f12a1d3aeeeca702076622ab54feb0b4afb88a63ca804c6509d65efef222f72df4a551612071673b8b54666b61c8653ce9639e8ac888fa87e21358cad05355dec360961f5287c3598601a97f15a431fcf00a6ae2bb06be53d5a457995050e881a86c678bd09c51dcba9b248fc049fa38020b529f04a1aac2cacac66624ef60f789f02279aba226d4821458adc412468da05bfdd861e707df9d548dab07b24a6ef1b1294d3dc496636fd33c1f23645493df42f5247f44752b1e5280d9833b9410bd0831ec09034972741894e5be5b88af22cc3a49d40a4509f1facd5b8a5af5fc4b8e13b1cd6fd3703c4f03bc2058e45fe20c24a62383e9b6e7ddabfccdd369cff07ecbfdf3e9022d71b792c1f4a4adbaeeeea5102741a2a240b11d6e06b675d3bfc2a1191314dba9778e7111c6cb20232cd60ebbac4707643d71713820c89bf2dba3f69ab518f947d27e7c0d544534f798c52d55d8ed061e42fe0afb71b4142edbd04921f400114b89eda11d950f23c420dd2e70991d8c310214e80871f6ae471ccd4bc7ee6b5321ec548b6c9203d038824fcc94f9417c7ceacc705c05e245f002864e32d1b1daa658b8e1604994cdf1144fae8939c84d4881733e6988f268bcb108b97b3ca1a3b4638c968f2f25fde325605e1f190559fa2e6c55eb3d10519e370ec0a220cb0fb48c856e2971f5c40031aedb606783065a40015fea6b121b1c19dc3a239ef5120a9ed0d9f2cd785345aa5ed9c5915305df38754499190dba97b32824489fa9f86049a780cad454313937bf2d70e504ed33b9ec036d0f39f9365084597c39122150e249276f51113b027132e51be6f50ec37192e994002fca78447e46bd4ef1ffe212668b56d16b7508f5b6909c45e0961c8ef99144ab97a7ad802a422058295b8d996aa71b696eea74de797bbd9bacf7aab446e4742f4767a9875b1ddb1293d5ee017b1b2654c026622ced449968f3f94e3929a7024ee2ce9bef073810c62f455c30ec0d009518f00d4c6f81412c4f98f6c9b419fcfc11d4eb1a0785010a0c641e941e7142d261c9e84c07d4144f5ad79145b22aa33354d2344c440618a86badabf1064d8a8a78f616ae6b5ef27de0666feaec23030e03e0d888998ab44f4d0890cecce96200f951c05438c9f35ab3105c09f28c7eb43c53dcb38c6ddc3dd1371831381ea7cbc3ff696dcc54d00329e9a9ed2c815c48cfeb97716a48ad7c4dc166902eb667fd82ce90ae39c6a44060ae29142ff3fc0bc29cac277d8032ac9e7f057a481712d8e6a68f5088e7a8301333f4e3e4b1d7cdf09627f973ed4b66521e7c27e25d09c359e29030eae04817d2205ceeb63b190c03d5914fc6d258cf30134b9ba68c91360230b667c79bf61f534a8379cd3ec7f758c02010c387e296e96d2b3c9a397a5333045c06f7e05c90f72c0b14be7819546ac008ffad707ed3e98f963d711ebc6f84febe5ab034fa9c4ab1d955d37959af9faace28f099fdf694390f902f37684819967e46dd431df27b57ebc3923dff9ca87d9e53fd91c8606dc3692aa067f34573c14af4150b3b607a8ce71728de900b7fff0752980fdef25a6d5abca9e56cfe27ef316ea92f4249dfe58e46d1830529cfe30133276b7e7e187c62ac02dc4bd263154b7538b1987c0b45a2210ecc17c5e75b31f4dd347dba0551a231d45494aa820afa7e18ccd2a65fda1c1396606888543c3cae0c333e5d215c6e457211ced96338b8351bea6debc85cd6368cdf50c73d3a3dee187139470bb42a9c88bdfdea4aba1b6a364c6b68c2968d816fbea3dcc901930d3ad7447b523a91fb78fccbe7cddb11346c370c56870e30b980f88bf4547a81acf105589d375c96dd6775bca610cfc291864098c98a26493b7296bca0fed1c191c93b93dc1c2cedf581f86c711d30890de0b418d45756266b8799d22115b0c2675c331e32ca1f4f0efb3a3c80ef8cd37d11f5c51aec9f44e4a4e2a769205391c04eddb73580e237cccf298dddd5445ff3b46143b32e115b89c5d2659bd68203fff2b24261d0ffcfa5dc981b97c38351ecba0ac343e661fac5719010ef63223a40c1666995af931053a92813124ae110e47044278d692824559987a5c9d09f3555a51ebef99350a6f0705b3838947eb0a58f7e46b000c3ab13811a0c21ee65df20b03932b1277644c781c4e99fce1af6eb6a6541af49a87c238664c299b55b2a48223678ae6cb488edae2d6729535dd5e35b8bd4517c6d3850bac380038436b89f3ee6d21169354d98eaa0aefd3de48d1d1b2b62fcc0aef852aa3cb6e6b58ae8bd113450f301c3ec6de14c2e9c45fc7bc8b20351d6cb88554f97a3c093cfbf46411f3d3089341e7fabbdc5453b4cae3228d590a2d628da222a40034cc5c79c2e24962fa6e9e66d3ec3095cd1c802a61126ec762f40b5439fb291e7da2839e866a7e898d4a5f803ef6b9ad983d2deb95cfa138fb6f18431187187a5064816e06a43ec60f2a37cbb23401a714efcc29d282e34607a0cf4d23f229d2d981373f65796cea106db3954b1471237a3671fb41e9fba1808c3d0f3ad0a8d41d22c5e36c441e35680ae5369d91d000e5429effdb2e8bbfbb479b3b87b4a7ee3030fd0cde3f8e058606a811d473f8469c92318e9acbbfea9a9e9ac6197847ef132290514a3d1512cc9d4cbfc683cb3c2532375d888878e92ba2a784ee325f641cec4746552faa619c44de9ad996bf2253ed42e890e9dadddf91ab2ab6635530b5f36eaa11b4028f480b8640295ca3b0841c1370b19174c16e927f13fcd16b1888882801df37f241bde00e5d8987661c6eca6224b154d76a48aac30e0824c7a22af06ae21685b664b17e8ae60bb3f989791016c17f63a62d9a5fe09ec2f2a509ea9c81b4e0d31db84710e5d5509c35351c212b0da32efc3cd71b6a739c3725fa94b7008ac592a53828968f3bd13accef0028b96958f7fd978f05b9687322e2116309eb071f09ce2eded77e3c0182319cf56200b18c1c9b7771dc8875c53dc55e73efe1c485f1106af5a124d0dde4277e1bb5849e42a43925f8220590b3ecee9c10623f6f64759b98f8170180be9d52a8e0e0acb5f35309552c358790d8a8f820192f824b3be1f49faac00cab83a1949d30e52a773fff3ffb32f0e14d527682c28dee9cc113b9f1fbc9d5e48a0c7437873a970e58487c04170f9dfae7069240854a11c6b2f3310fac0395da22597340ea6c68b5344a8c356bd16f6b84428611997003fe712c76ec193c84839e86efd712f68408a343d1984ae6aaae3a189255a473b734f0a792f76e877aa343968dd6fbb028bb735343f12eb1eac0ef7405753d00155a5419657dc6124663727f044233c7a56eb4cfcc0c6436662a485dcb8f4335a4647f98d6697858de9239e822e8fa107283bb24d560c9e8bdc0ee85a9a47c57f2056e63150fd8d32f72806968b83e0d257ed9d596734538bdad94138d18d1e130d9197b138ad2da273f9fd60cd7139ac6e8876773283ee56f578d3ca967c16f51f3be785e007b0b6d9c85c2729633c25d8ecf27d1998c0dcc5c27911de87d4ad89850e78d339c4caa14dad6f77af21a278b013f165af7ba5b17135ccb58ed88bb4e4b3d47464671aef78e9f0e84faf1a9aba99ecee2e5ff18d25af1a14e7b11ac224be681795452afeb308962e0246e376c12803bc6e74d5317eb0d4df43277573bb7cd2b58d01e07fa96ddce6f4e87b33c53807999d50126d92416f7f5b1d8d91f0db8036e0ec5837ae839112f26779473750a8743f5ed5556c40284fabc626d7ff983754b030041e14ae2fae5022e4b1b36d5e3e10c7bd60926ddbcf929f55496be3bc5e0fabfd8fb15e85e44d27ce370320f2e8bf963bd33e3c88fc268af4899b4fb23b743ac5860420e0420d4837e1964ea618b71ec232e08c8026b7fd2e0b576d01c13a2710fade819dcef2775e02230d3a5e60f2c20a3af383bcefebad80b71fc8b408033b9a53220646f864e2d7e6e73b1bba508aaa8284721ffa45892dd0dcf76c76a5bf686bcbf190f0e0f28ac98da78ae9b2f315c279b0f52ffcad7e2d5eedd63198c34a31a80e38085bdf22f3da5f11e6460479c1c5f3933b513ff0d8725a923f733aee56885825a5b275a929ccf620e1194fafd75b400c9f7a4ebf86eced99c6b6c2439bc4627388fe62dcd866a3f38438219cc225d6110f98b0a197da2e4ee2235234249a79024ed925cac0c05c8ea70d0758549aff11ba541545a37c603927cf586743c37eca557d6e9b11f2b33d518eee83dc96c7b84bf81c5b14cbd0dd60c9ab1a7e5ea86a8e7d51c9f45e7d8026a8ec818e8d8e6a577c71904577c579b74fefe4cded656fa4fab8a83dfc931c8bf903cea5809c3b6127192a84ea6d50ef4703171dffee1c3c05cdac2c58a3f39b7640427d83dec3838f312f92811f70b161883a299ea8936f635340f31326fac531ac656ee84d0059ef3f5d3d409deae049cf141dd2d3c5aba509748aed5c58f27e0bf86c6d4e9c38fd07eadfb845ea6cf72421fb8782caea8f21ef288b8c3fe5da7cd3fe2fdcaf27bdcb737c69f0dcff858b9dffbf7e267b81294ef9458349335c71f73ad29c485dd1cd5d87bacba4c20fe47a8a0da27c76cb37ea6e847547e9b114e3953a4cc94b9889614d545ef20a2d4f1844f00d02c412b8c391656d331b7032dfa38902c6761b52abf10dcfd4af18410e901eae365bb987c2911191378165dd0c8c9797c85060e9b8516821d410937084081fb79d1acbdee3ecf2275c96aa3755b2915a4c74610158d6dd6de01de990a81046c602463c89b88f0ff2edf3437d01d38d600e4cc64e4396050c5b390b72996f65aad1deef10ac982960b4fb8ad386f7d42ae65a99e50d5e0e3cdffe72efc35922a5b639b1db2d4d563499cecddf954ba50b284edbe6134bcdf2acd407e29e62fcbe5b72fd3d254610e35ff7e6a61d5361174d17b734ccc5b140caa444cc4d523cb5d1ad1030df4e83431b7d2320f3a42e3220dfe47536654302daa596414a7c5d0e72bf4d99015cfb0ca40a7a188baeefef72541e7a1ea605a609cd5a79fd8605ae2b337b5d3edce0466c0247937600cee814ce56e80bff8c1617b7130ceba814df31afaf1aa74680d761cc83e00fc1da2b25014caf745148371696b9a31435d09340a693baa2285352c32573ac7ef6c9f2913b103ed2cfbab8520d7da9f81fbbddbafd6f1864499eacec44b89c772c7f6d6272771c7eb4f6911900bac8be2a2a537e10542a09a19f50e7f76d9fee662007b8c0368072714c0bb70950c3eae7152ea4e4dc28a728398a9eb811d2b6e14dcc2bf420ee83ccd6f00900f5800024afd2a3e2aa3d4237752b774194496838c128a70b21d50b64dd45d97a46b276f592db6ecc9fcb6be83756d5604f78efb84b6d44e84f754315580e14ee2e128376849aad11e1f872b75bbab4a3784085a089377b2581703ae95ed7e13450d773bab554872dacf7a553ede608fe5c1e37f7bdec7a2db8ee063da7a0e32f3e80dac48801f520501c5cafcf72f3bd65c448eda420b567196f07f35dba1e47fb977adcc0fe4645e997a6ef68fe259ebc61a7bc579f0cf190bb77ba656dc84d37da81713ab586627d07f9867b2bad0377684f9b66264f496ea7a68a4039af5d9e7cf7969f3dc5b06e27d0e2effa061aa4dc24c3600a209588e0cc816756184bd27b9729880a4a41f79340991d54161b04ad6d00aead1ae2d3ba9702834f782114c85ef8d563ce43da8e93d4f1d612030fa5290e3c7f88e808b3eb2f3531c8472f7b11dd4a90f563b5d680f551f2a213a44b7e1b02ecf8852565285430917aa25a690f958e5c542c5ecd6cd4aa09907aa3d310182e067294000f99654b0261f308afa097d329f84d20d62511e17343ae4d192385f266388c8d589ddbf9c4b246c096e033f20d685f0f98fb3f054a452c8709994a1d4b23458756eb60195f7c47cc7188435cb9ddcbd39f32f31489c15d22de03254eee27d6506b589f04af2abb5c9bcada973e6b278230f9fa5f57128f96a0abfb6cf3099b8fe42ca53859ebf6096fda502863d48221c3a6cd92bf99357e3901bccd4439a5414072127cbc930df5082832fe82074d5ac8cd83a9fe417142a37a23b05f58a5f82b1797868806c62de6c18c1c0e4960994ceedef2c86c4fcff1d1622c5aa50862403f4711678d64de3fd07a9354b2197b9acac6326a3ee8829cf1c1580d907db537e3e9a38e0783274fb4dea7f99a280999c07a80c9a9f53fcee0e28229edc534dec17040c78cd75ade79e345b9efc483bdde7175abf38f1bc04cf5887d89ff726f70851513c290701232e0c960444a61a560d3b200fb04b854b8970d8786c8971a29975889a92410e72d135fde74c0a769e0e4dc7a66c56f3bd6f4a4bc8564d66447ef95134efd46df5b3453a142c793e36ec6024c8dcdbadaef3c1eff459a09c825d4e10048b3b8bfdb65a06ceb0f6006642e130d42a3c9f6e769430034af8f4e3f9470fff29932d8a411fdc8ae4d48d0ee667d53325032b8868fb56d99c543f49c2a27f2008dbd781f35acf863f27b97cb70ebe092d923ea714a502ea25257bbec83fb946044c21300924fda5d7dffc7e9e411a8cef48a63c152f183f42080e2013f191c204a413ea642c2f1e7c22a02480bb9ce9d08c4750f19e98dd2214d18cb7e0d0d2e441eab3b98c56991dfe9f67d7e8b5dbf94d06b22011bebfca0c107b90006ae5ce55df8275208885f2e396b31488573fde59f78d9a2748b6d86a4148d3e24dc36e8619ff040a86ff06ffa8e4b35c1ea5a917eceffa668af251c1a7377caa0a8686fdaaeebdbf0a3cd0a0268f4b66f6c7a5cc4b7ab3d40743b3b360db1a3108127185ae1d7bde126f30074fd13209642d9373148f5f6f6ac449f25456af6f954161d5767c8a99fcf78350e2cedf883889ccd6db115e2f7d9e388a5656ffb38eb5a7c39103b08486033e9dd4fb06fe7f398e56c9e007a98139819c57dfc8a90f1da499bc1021afa52ddf1706e3e45b00e6632a05ea494bc486cbaa794dc4bae11d0dce80d767d76c474895b19dc914eb8a90e9a8b722b092bfbaf8786a66a5041352a7100b8b33c804cc9bae6cad467384592b8615d23c2f4b6ee1a9910cc1957f90def95be435ee5881039d1454a08b1980aac95c948aa3a83b2d4b19f8543c114db04ebc30c6d8c24f0cdd3532edf453de89ddca710b716469d57610bc3e5fd992b0c2d61a0a323887fd60546b3a6eb43f33d190805720d9e3d652833a4738d4c64bf046ebf778ebb9389de397d92945d2114669b465a70f4dcb31ec9bfc0259e1ee245b8677c8b6b6a2b7ddc924f4ff09470da7946942a42b9406c7af5b569a2d57a5ac6028d883537a1df960c8079896921524e4f9ecc8acc602131c0778445454222debd46ac87d0641acdc0cbd08aa0c7dcc88faf48a54ebcfc364a71629a69272914e9cfed4b5d1559c1622954416cff19d52e0fecd20005a9572985446173b9659a6c2502cc7e8031654064b0a567a66a967dc6ca57bb5d806b1d4793a6143fcfee3d3bf9d02977263a0112a36e04a5a56fce86752f019e6029c99a4936ec43f06eb6902e12993c672d4a49d0450e1dfb586e975a944a048bf1556600f765a1ef43bf66d3a42cfd8b25d0648cd2fdb7ea5254038a40c220d89e11409996fc347dccec551a2188ff5e1649931ff688c23d224af487a057ba7d20fd5ccfe16f6b375924056c44a00100f81dac1266cd61447ac0e665487a7373a20421183c293fbef8b08f4b7d05b142bc2e7147f9cd8278f8f341f05f28b2913a599f959700d7fb8012b6c0529f49e6839fea714a24c1922961096ba5ae09a8f21282c5a45694b3bcf97c92b65e081870667de070d0a206be473c63f12209945294627732c0fcd744374fb642dd2adcd3968c32b895bff33f297602a55a743623fd09a987e7ddabc1b70199dcb379942a7bdf7f189622c3ef54a1051b19a1a5df092c87c6d6ac93efb8aae63be171c162dae02efbdc3d28bb02c0cb6749aa30e0b4fbe114c66a3519ee2c934fb91f444ef36380c39bd0c66fa58925858ec7d7bc5de76b5fad5cccdb2d3fd0d522ff1b5fa528fd258e15682f02bdf3406a3da885f0d3c131880616796f7187ae209c098821bb018088b6c8198a64c1599782a46fd0d6f668288ccd0dae9759b787a08773882fc9a27c723026a7fa148e6671185424fb067964db8471d3e31f31c823ca80556eadf22f57199051442af8ea99dca578b98bc0a1166d241e1585ec2b8231846ef9a8157d2e08da78496c685f025312238016e6067306edff0c843310b4a297b569e3304e525430ecbc1903cb10fc889bcc9b06ec2290628cb35395092f9dc00cbfdfe620320c0d9bca2cb0b76faff43d49186620f4c0c63d2a396348a807dee93d09e52b0864e6a00120e0852f5a0564bc3337523791cd8a2fbec49ac0bc531e8cb69dbe08e50a4efb19db700b28391a6b22e5061efed4c66b859a2ed6fafd70ff9add0fd92ab9cdfbf089b0c94b52fb396106f9d8cf9a7b58240292363e58b1257e8f5c1e445c60e0d82b4b56ba038385b00513b6cc23974997cd1f26cce9ab8217b612a06c40d8a4d761e2c85028f06183ab4594d77c43f6a22337e8f6915a8f9e6f7912a5ffd7d50f390aed487a6f3978bb110d5258aa705c9ece5f7903b291239d36e2e23e63dc6954d6232e14607aed6862033a879f4a246b89f68bf83a498dc4c23b140ecdc48c6d0539f8009e792315ba009120cf9ef3f40f191f52e8456853ddc8f58c9374639d6b5efea84b1d2648a085962ab7543443e28ce11c14f3b01c7c29240de6af95841a84da2965c60e02f2875461b488e439b89c1cdceab565b42887d742ea8962add70b3b91c967c1a207db47665922aac1eb8fd576d47407160dd17c508fdacfdae871c40bb70963c4c457eec9827dfd70bb8388ef297ddba5bbd7f4de4a8ea68cedc0d2c727ad57681467b6ff7974b372b4d058e7344e64820283b9425489a6972018ba46a5a2d6900cf1c6fff768504068820f47f29f183394c14cc2818a25e37698ca7fe00495dc6723262282d28cfa80785254d9c388c08ef2951e0b043ba8e05a1b8827774d2b7a488a54625572e0cafe07ba5a382c19dda3e3c4743bf91c945709ad7332e6e1ff8ba799fd7603b666ef6bbaa466f875247e187e4bdcf41d1f6627f7e061874b2f8b411bd78a2464e9848d8328df0859fb5a5db68065ccb52db66673713ff78e7945bc1175b297eedbce3d5ffd57f434d179a3d10c5849034b718e29eefe7f94967c238a81fc914dd39cb240afe1b91f90aa45b98c45f6c1d29d8b23fd4f94e008bca7c8b8e82e61055915440eff8ec6b73e1c07184dfc438664683511452897726924377d1c5957f6ccba1f72062d4b43809680c71e3eb20ce6b16d566b1d3a1a0ac2f0fd03eac76202ef5c6cf3ef39e12d25bb14559f804054fa16db6b5cc2294e40d8f811bc3ddfbf76bad5c5721cc8ebe2e6187da5635ddd0981ebe65e17114082f2fec295c4f524f31b42b938295ff7b98d7cb5dcda2e122e883cd0899a16ea6ac510d5e0c3af690ea5a93a135f87fcc19f54d9293a88a33f857953fb94b6c5b8092d4b5191d331c3ee3aa3b793cdecff1ef2b3bf4838920c0d44a58b44c03467f10b83c76d485cb18110a96741ead70d263be80a4dcad6e5c43bda9d0c7d8c78107c8887fe87bd5eb568fc53748ac29fcdae582536b661e5a8e4c0f19c2e65d1be991d7218da723ef342e5491b30f082654ffb041a1751ac37b847a2e9f092fa09f52233e9beff7372998b77485ed5aa1da41ca4118a64e3bba6cd763f4894582ee8024efd4954d33ab480b4654050edfa70e8471b42a343e3191aa9441edb320bce24daa5e6549f1529aeeb900d36f0b1d113b4ad8d8c0cbef61526d5c9a12ade9a82c727be09766710dfee8a6b52ae8908605c4931305fd3b2544a91acf4196a23d8d420fafb9aa4cd01c9db791faa13fe5f26927c1f6b35adc58fd6f0de199625bc472b8db3c955dbc825292035015f4913af21fc66b8defbf3bfa1b4cac50bdc820763a4cb7306d99aa82bb9ffb377fc882f38ea9d850fa651c3e0af9af625cca7a34448095b7ae50c62d1e5ce6608d062da204ba7d1e8bc22b58a3fdfc5745a9c2f14401809c0d135d84ec7a8f0ae35641d28cae9665867a0ba06c784a75d3bd29274cc11ca327a5430833de0cdf99927b988290fc019e0ac5a3bf889a92240ac87474f27ace9a6377ef24504f3b842700d656f898c3abe26afa851fc8be9d1393f7af9196bbde8181b570a4f9106c60cb2556f3eab2b9112f441415255bbb318409613639ad39ea51e2f9b62b9a9f6c4e4bf68d898a3c3d6a758e7463bd4a11007d53ee2c4a26364ad5872f9704d9ee35684dd0d7e965aedd8343344214ef2ca026cd2ed6e484d5328cb3f405f0d6120a8f8876776b89da6ea42448dfa1fc54a4fd288ae3a39fb5d81979da35d855640e874a66cef8789715cca870e3fda99c99876b57548f7142d1eb4ce44303d2ff4ee3c12a800672c9ea0a86091c0ea06006c795cd977827bd491ccd092201657ff590995b51a50e85024fc2ae61851f4a613c71b19041074bd37976bcf8d7cd075625d55ee46303e4181c82937e6c3aaf048dd8db98cea02442b4f7d2c04228bdae441508ea64f8afe8c5c237c98ace909c1771fa79a28adbeac77ec247819274d37e401abd7794ae07b44f163ecfdc54a42a039d9d60395b1e947af2472c172c864944978acbc262bcab9759ced286c61f601e5e17096c5c2ac4f8e5298d50f82383a8f22549ac79f15ce1a55585d477dc69faac48e6452ef34578e35417063d8cdb4f7e6b7bdedb5f7b4e3e82efb2be7710e4773356b7e262271c054a1ae8ede84c7af2a5e2878a0bc6e529a148e646e51e196e3c9328f18be13733e9b5e9164535c65f3a94509ace26421b513c7cb5220c5094f1f417d9f3d3cfefca087b358aa5f765b54f2ebea0f19f6a6865d769982f46d154c330ab05ab5d85f9c1c4cc1b2b8dc0540a5d8e3772e93d09678388b702be051c70848c13beb173cc230e95161f1f4c7a25578e1e25446503dbee8b83b78ad51ee558e0bea9082bed16abc12d3fc619eeda5a2802fac1be0b03edd668f28d5b6e127c2a0fa6d7782e000c1247e2bba06851dce35d21651041ae15f6d8d2ea55c4398d29e98424cd54e3c2c4dd0083a7cd8e5b36f7bbaaf04f5e4ba9d7866d098d8b6677eb36a74ab1338022d86b98ac7d08b7418a9a26a9bd3c970b2a3ca087822de92b11c00eb13426639d4a30cf586172ae41106a13f71c04498fee4c06dcd959b54005c8ead383b82c143dc30a6f6a4e4d071702d784f148edc42700ae92ae2ea71f851d9721a75e0b5db61ddd911abb23222ac974306a410113ef17e5089bef09ab288a11f681ad852eee9c21477b0ed7187e76257818a6ff8630cec3fc80531751aecdf92845afccc10cb966b6a655d82682c32315718cd8d72df3631ddf86042d79e7cbfb7b13cb96fa196edf5efb0703e45ee7945ca0d6a4064f8f7c3b50a1209373910c8b28be949548cb88404ed91b314531d92535aa53500a80d8d880a902707b7d04e6bdc1550018fbd80b064a087878b6947495b5a5d9c0c0cbb90924f4bd2d3bca65a3843a6ed492134e4ddffd5001907abb7fc48d3d3450fa4b3f1c980cb02392b9f394ff0cbb175cbf190dadb4501c6ccc5fd2877ea8b5f5be91fcac0ecfe38c147b367e3669c9afc2dd3ecb6d57219e07213b844c13d736735d456f2dc1f644f60d2acf63b7a802c0b73b4a515c86b0845dfd94d68e7be8b33c49b444ccab9aae5c2286c2a1e2371be4ef8255da2fe2447e352bcaddf183ab5dc103c6fa798492ea5035a305ee2c3147dfddc462e65b8300388e93dc70e277a0391979a7296a908b7d898c877f4f50cf2bb8e876307a66934a44bf7b17d116622bd7c448f57bacf63e6f06c3eed4cf2d771e42eca7c1c605d3fa080721063251a5034adba671407b0fc77b6aedd59ccc569db1e455d62487d6acb1a3198cf350d008447ac415a21decaa6e8d6c4dc7794fe7563bc579865c81d00a885007045b002b3e6b0dc56a9be61c5c1f20bf24e4944cbffdb5ea58261f889a9c6bc7bc267baea055390b2e8488a3376349034a60e45af6ce6694d43ecd114c029bece4c6748a8d727b284e508ee86409e01bb0837ae62f0392dd7d8059d742dfc973bda7ceff2c125129be2c01422511bd28aae91cf23c6c2393a622c04f537839668527a185cdb7640ee87333098588f82278f8181de8c71150c6ad85e430e5ce8e346798fb965d7096fd41a04c22c7bec0dfb324e569048ee078fb30ddcff384a25e14a878e89010747ecbcf6b90714ef9678a08c4f8a748f4443d950796ee6e712376c0b6429b62068828de3e1bb62cf43d23cc2d27d9c3c08a42da3f68e448bb6c2013059be108bd348bda44f4f694b60c8c1a31abbd147569e44913f4b18a16ecb49904be049997b71353d114477a2e62248cb57e471040d5b9d188d7d4beb2caad9b685945facc9ef26b283ff267308a3d62549fcf352c94b75cb539548a40407f7a7fa2f00cc6ef70c4560be15d468660b2401ea16fd8acebbea90473931d3fbaabab06d9935ffa5f5e6246f5b0e42686b37547dc79902da2b4268eedf220b7d38ca6eb67d6888eee3d94442a315109df04a89a1392811f04d197331d8048ae5c3a9e46461785445ccc92a61364cc0e10757541e19405c384dbd9612d9385aeb6f088f4943f92ab0700ef4e6d25b1f29e0ce98902a729fd22ecc50c6b39f7b0deb60b2fd8348dcc182856bdee8dd12e6c0e37d53e516925491f0086daa657d7ddc18e11a42c9184fa9ad79ecd38a0bc0a273f943360758402a74eddaaca7160118fb1054112b1c3104c399b8f7ffc34bde92081a2176fde0b4f835b3805634307b93993dd9110ad69ec12e4b0d5df48e0f246ba47658c300d61b0e38b456dab062e72b117ac3f09e8ab4be2137505943a6205df3c444a9ff0b603eeeb4da306456fba03b024ed64dba21344c964ebcd0f45ebd61732206a5d7adcdcba7a8a816975bbe04358eacae481464707d198082018298a1779b2747b70912ac0d0043e09cb37e2b1e08388e034b569e0f023a8b5d9c2516d36eac798d7f021305710eb302c5b092ff6c0c721bde443f452db9665c715765993f7ce580300172bc619eb7f14ae7c66bb4134d37c754ac4c126bb55a067080b70bb9a9691982e5f53dfa332c1df732b379400a98ad0500349b090ae73eebe4924419d3c7783c31a149b933029990a69c4238712633e189168fd5e6fad8f7729b9a42a7aca99842a7480c438c540052463e823a492489a0d0f1233e64ccae95b271fc5a602020b7c5925a2bdae14c7948745015d3cb057b0a26b19071fbbab76016dc12e22a1192f3da4c08cda8fde0e0b27d4f33cc2b5bb0a7018ae815285ce978495218bf582ff8b04cdf58e1b2102b35e55d474fb586646f4ac64a862deab4d6a60eedc2ccb5acc867f7d23aee2df15f52cad11108719527898460d144c404286e3f03a6808abe46b5096af2be151330ac98bfc11f94ee102170271f3f2f89e01828393e50095b67586ec358124eb808205134d7dce624c4a185f9e8f0cb70e5c4a78b7841eeee6c5126cc76074d9c945b5426b206754a9c03f1ba00211f63b5b5bf4f685d70d50e34c7852b221a7af50fdbb6c4f6e00e6bca846f133128cdbf311f91b2538c653e5f16e6c8573b7ce6813c1a21387dbf18e89fdb4d20c973ff701dfa256a341b944a7354e7837392c9ed7f108df53d7544415efae08cb1036df9483edd47cd9e9c0ad489d3295960c8307c04850f22e67a232c12bc6a45d04d31c24b081d4e204140bcabb441e741bcf1415e2b3c8ed587d978fa05feb6e183ee105fb547d8b0ed0fa9647fd894e8a81f7fb05ca3fcba086eecea8b5341fc58654881ca56a30f1bac57211471e94a1a2e9c8fe4554f0a63f27e1897de03971126b092ceb75e1ab6362c5aa742b3e54ea8f27b520a284d232256587aee749b974443db73dd1d9b73725f02868279b206f824e8de8458ed43a7a4b14204b29e1e717817c44293887cfc7e4d05344f205aa2c7e38362fc53669ca2c7eb1e45fe449c2bf406b6e5b7d18d72a25c856935dc48a19cd34fc6c800f7018a519e9f57ecc2430042d107d5bbb0940ae10dc99aa6a708e5b2709764cb8e2ef485a258a68a5fe1ff013f83cadd1b630be6ab3338eb00edac16432673b991bc0a57b8ec37b5434322a4a9424bb900e92fce4efde8194a5e9eca6ce977989048253e3f6001b469b3aaea856710bcdab1c56ae2a0eed5f3aed3b13c36a00db1a08edfeda0a2ee6c2932e4cac952fd93bbd5b0ee82f0e28b656d3e370aef1ba2beb10c5d0fd28416479441bfb5e1e2133e62d2249f74480b0f41666a78b7f947fb4e3b4665a3084ec65fe3ff7d23afbfc7e2bb19c6e04c08890754265a855eaeccf70433e0956aab1c8e0d716087279388902973587573998c7e030c48c6c2380da4249daf455c61dfd7cded3139981776a75d467aad9bebfe35d289969ce1ead3be385eed4b52c167a27a7985463c2788d57870c1adcc2a2b4eedceb63f292854b20d2a1a19dfd455d109242997f4558841c3116a362bdf88520dfcea8d37c23f7dde09c99b57adf435f35d447223de6ffac146b5926442341b6f92e31f75b2058d0a2534c10b6afa25e452a8658ada959c48fdf392a71f31076c9763d2c11251a91c6fa43c306949e9be6f6f6cfc58b2a6ba8c606c0251cb41eacd307107c1d4dd76a412e39ae2adf87134d2a00c818ad567f72af996f81b19a6ee5c3de69ef94bd090f2d48adced882191a718a1254912e7db68a01e77159e286e482017761aa62cddac51e65071de56611c4544667c0747ee4b48a5eca4866fa5df09253fa9c045e30665c41aa17b14b0478a21a141b78f02cb17307813220b622f2809271fdca679c208b85d8c9ff28cea55244703246eab5dd2545a8fd6603565d4c0196966ba8d15ba440b37c070cd61e19554bf4183c5ead33d306de0ca21f6adc65e5a3aea4a8d31febaabccaf41c36d057638cf11d485db1216ce9475eaf0513aaa22049f42893dd9870c4d0b47cba1b214692132f2f8f69d14e94289323f9f71d493e84f11ebdc8006d6b12b422a291b9d36b35b8e00bc4b2f73cbf63145e1f7694072c0ece0c8af62aa5d45bba688c394c7f02bc42507b6b7f84152ce7901734b00c72194dd845ffb72bd60dfdc7f5c7263a4e072e8235612ba9948b932989c4eae833e49c6ca9b8a061ce758093e99e147578bad94c4ad79aac35d7bdcd0cd1997097a01781fc60337bd5de66950b037d8a699503a573005b6849f8f04fc387c2ebe6677b227bd46010012a9ed54c1a031c77445b677521a4979714423c7f13cfa262d8885e35c0a61aa682ab970d60c970fc231acb93a1fa25d8ba5b15142f5117425f850127af6ea262b98ec51b12f2cc8274a93e8d611c4a78190fc57138dec50695c2847cf6a111e349b093c93743195947c5235bd30508fa16ebc3b968bc13a6ef87a52d31837147c4e7df3e26c023b0ca76dc53ee30b03b1f3fddefe6e823cbba5372f128b7a28a46a7188268d767069458a1a30e38a74ae958905eb8a4636928c92179aa6b2fec4a8c056c2e0340a80cd16312fbd1481ccd225490c37b22691bd534897c9b2b2eaead21bed3c669f4bd390ce617b4f8c9d931f068f0085639b0997a316fab1d95f607ee9da6ba623131bf7b8f556b76ae7ebf79b0362ae2ad7c00689e3f9a2e637932df54aa5fb97de232aebf179f3b794af4d96ba1830ff5b565a9c154fbe034865e9ae4841cc256f95cc7e29c6e71659112b97d9574d860582bf579da63382c725822dc020f9b760c516a5994679414ea2c48ddcbe2e55db5d5fe994c1d26c522d0a54b399b90ad39e8a395d70867feac47dc214c147e5b97136ea7788d7835208f7d897c6f9e4fc9ca97e2aa48c9d6e670ebef6b6d9ce81dc3213008c66ebd59fea3f3c114d3dbb7598d6cd4b2a6641641a500624a07cbb0ec172e7c20424d4fe4b295872baba5569e5ec2df2baf3e948dcd66b0522adc1c9dba9a05242eb7578fdf0198021e0b90e2996b3bebfeba0b04bd3e4d012cf04c463b332daf1c1e25e80ad003e85fcc96cc32ba82135a00d38458100d7d979be664123cd45ebac20ff0145f41a993a9ba7c95f6518a5075502d620c53149c33665a1a3641352a14e4b85071040eb0e346499744679226c9e1bfe0a6430ac155a247284294eabadb95c1071ee366f267460d8473ab01ae36ed6afe28f74ddf73d480940d2389e769a4431de7d8cdb996b7d10b6542a2c93b15e09b6745912b96c7c6f751fe742b518fc692f17ba484700b8cf9a4c3f3f4d15346fa9caf7dfe946fe1d090a028fb7eca3286ea82cfd88b08109147836240640f0680ecd14fe1352ca7c33753191a315b5420b97098f4cb4789aeeb734e07dc98ee178fcfbb493bd284f8312f6c1431dcab8585be18d5466973d65aa92e560763796dfe12a4ff65834c1df5413db3c2fda6482b5a24d26c025a6f891169863c2bc0b9ab0d75ac62ca1708c31e51ae600e684fa24ccd669ba7e91008d14c0e662e8ecf07fcd0f783a5ad270bf89930f35a428617fd975b6450ae1329db248a42e9a2c9a68f70aa2d0f88c0705c435f2bbcb171f0d9315aec71b75b5f98b1add4d8b6856df4c80ac08626d5d1a707a0a8478032aacee895b3054aa710e1a3e90fdaf4ae14759d6be28fd78fdd7d768e0f4b7d2e66ce3ac34a51848c97081ba3cd033b540d0fc39409b1f87ef0e0018000ac7fad938666c560f4a574643a87747d1be073460836fdd28b67b656f912bb74c52065e08a5087108d66ee20c88091c683685ca8845e64b1340330bdb40302f51f1d2cdaa7c24cf7889fed5685418db9435e2a3d0085badaaf256356dfb8ca4e9a2795078da0bd61452c1a33296fcd0976a02c554a026501228a97e34ed4365ec14fa12ab26d0ac9292404da034ea67fb73768a8cfb8f23d274c9a02bb468c7ddf4b9fded720422a14157e8bccb918575a919e3c52c592cbc83cd98cd06618efcf5ab1b0216042a1b0b2f755e7c37848559d874e168b1fd75a0e5c83937d3c5ffcbd0b0e992c2a664979a2e9ab55a1d7d670e014673e433c3a0334d593549fe99dbb56afa6565337f0bb331fffa7535d0a585554ddbea3dd1b10c6db48e9905a3321b99a3982ffe4edee08bbc7a3765959fe8587e56812cd056665eda68368ef7f4c31943f7f4e7544009eabe64d9dbd36f4161cad4a75f63627cb249baa763896398f953f7f35b70cc83dedbcbb2121fb99fec98c47befe9388a7e742f41980235e615ab923cb7b2ab929cdbb04e175ad3bc52afa04886bae9d34dc9f2864dbfd3be1d04d894ccaa2db466ad56bb51a59984758b51194b5a2c62a019288d9cb2b6d67babc582ca84e8cbac9af4ab82d2a0269d85c562baf8d791345d46d3c53f446510305f60f60028c9b3cb918581bef64b0bcbaa6a9aa78a39ae62abddaf5f1660cf2f5fd8f341332a63c9107dd1c8395d66db5fe49e595012b76bd70aa36edbb63202e9f9a8824868edb7cd6e6f371b5d8a27d82ea332a0187df11f65414d2ef8ae4d966c7f8fcca058c6810b94c91e65186c7fcf39d8fe1a28b6b38a06babed6c93a33bc6461dbdfc2d2d837658dd4b1e332580e1153a757b6e1fc01d0c9d92e94c3471ab66489b7fbd65a6b2d102135eed37d6ff0f1ddf8c347da832ad0f5c9203bf8487b1f7e830706da0c92c7dc9c9744dc6b44e88c111a7ac44b397c344f4ab696c347346ccfa3074943a901e16cfc35bc54c3da2cb4e541ab1bb6638df9f251010e78e9c70d14b8809726f7dae7807d44030df7b7b734e478a2e7cee126ed94a997a3070ddaa8ede0db5a7d6bdc1de867e7e63ca15fd36d63d4020c5e9a1b6fa487395de812d34e8a4c01fada66b6f5fbc7037ccf53abb3b543327746fd211a1a47355de0f3da97930ae8cb1c3ebbf3f32ff0214b7c5fbff6c9007a4d969d07fdfc7480c2f20c5dce96e7bdaf8fc3bdce48778efb398fbfbbf1b7eeccce7f8f416489b5264bbdbf902c43261c93742f94994d9f43b33fefb10d3ec7e66683cff9ce38f7b7759d0e59d20d7ace58723edcc137e8af26cb1cb6ee3cfd7800a15736e8b70f021f52f351e7fd71d4b0ece0d02173f86cce7f9cb9ed37037dce83c6cee3a89d716eceb8037cff6fcce173ef1d39ef1971f0e7bc3796fe1ee73d211abaf3a00a34e7e9cfd3edcc003ee76d5c1bf4006081be8f833fe84bffcfd7effcfdcf387d04fa1d86370c5ffb74849d9146fffd20b07dc73e1e3b3f3b23005aa03b5f3d6f9c9bf3f5d3b8e78c221938afb31e3ddf194bba3b1f8ea50ed0ebb104913be674e9fc9c2ee16bef3fa3e77d149222193a0f7e2724cb1c3efb7bcd19c1c98d1bf8ec32879dc3e7b327fdcba1df1219bf634d7b20f6cb0fe0701f6f1ac7711cc79140b6b7288028d07302a1fb92980462bfbcf435fb638931a69704b291493472d617e40fa050a81ef6b491ed7b9ff1c6c1fffbdedaaa3f53af03da2b5b7fd636ae7babeedecf19c33d4996f8c1afcf8df8bf21ab3dbf1df4cac665e6f203d138928796cdcde9b201d1be0338e0af59cbda6f9ff1e3cf9804c2691f34fd30db0f47fb7373507b4e174d9696ac9f6b7e4eb6f6f39778e72fede7b7f5856c5cf1de88cc2b39e8620c349cf08434ae9c3c3f027a9ab9271f869c3ce4244b9cc6de362094c7dc40eeb63f6b1d7768df79dd9743564356bb3e10eecb0fec4af2d0b2c12f2b09571208f7e5f63cd49d04049ec7ef83fbedf1d7dff0f6907392ca8d040292498a78de07213e0c397d3c1e8fc7e3f1fc0f374e9e17e2217525d1274284c8cc8dd3e76746a7cf1399099d3e3f834f9f27c299a150a1d308ae15223f8c4e23a869a04e9fffe1c6e9436a1ff46be3d0fddc5f125b48995912c410579c3c417c0105b6022745b039212162059125a25801e3855520c515427c118516454ef467f75e3964b5bdcfdb8883bf48066ed7cfe16e1eea9015529a7b7a6597f8bb0d02f7ca952b4cd8db46961c99c4f3fe2599f9938714325fa725156f6deb408bd5a68fa36caa831b1b1e30500ed91bb87b9301dc1bb943dddb57140a8512cdb07dfd8d74000f74df1ceede481e2aed309129f5fca9120800a11501845604184d76e40083354723ed491031841e8bcf32a90b0182ff8d3972e0c85fce1668c31edd79f39defad53b316678cbdee7e3a12305d36dff467fbcce53167f2868fb6bf93563049cbb790389c65a4c149db87c6e907f8c8d0e58d9dc32948824512706b94ecb9f17873cef971b8fd74e4fc58cc789ca0077afe41c0bb1ced25b1849d6f189fc723e7c591c8120dfaedd3117ec661cc0fe4c21c60f8b9f3c4919e3e6312f143e3cc9f42cf3212f9e14f2172e64f22d9a39272e8c0e1a38d031a7bf8086b1c3eda72f8687bb048170a61cf4f0707846160e87877fcc4b002dbf9ef0a46eee74f12b1ad7d3ce84e22ae60c4a9bb4f0b961dd899ece1a3eddbe1bbf3dca88591983f1f101471f7e9b8de678e25cf1d72c6b93da338ce53e77addbdf7e67c83d37d5344d9e5ec62c2b4935f94003f29017e626386951a729841c624cd3d270957c1f933f54f07108fe338eefb6ee24e08efd3719fbbe46b5efd2c8fb9afe7799e0ee07fff79dfe3d1fb3b7e2608a716c637d20ddaf0d13771063df0f372e6e606b187a9e7795ea846f7d1eebb6f87f5bc245edb7e1ee945a16d843c5a76fe1c7adf48b7f6d27dcff3c091f3fbcdd0b2738731c69352dc919e078e737bf82fb6913dda7df8f1d2dc9c8f47cb0c2d1b9335ec3a5e3737c771ba13c5167ca425890fa3a3443fc4ffbc48d29908ffe7c5078da21f2c0f7a16d241a408bf487a8daa923059839f400f223d453a0d767d3755855ffafdb1ab9a40ef8fb1e03e1d61081afd5455d58431ae2a5c55a3c7cd97fa5855435a67acd2da695ca2471ef0ee3e7f593920d067c2dcbfa7343306bf23a09c308e1bef836399bbf7bc0d7ef2fc4769f42eb1eb7a9df78cf3343f9bc37ddff6fdd475221f9dec9dc743061172f23c0e9f8fc9ba799e513b793a7eaad8855db5caee10ed2c46a000fb7293ccd22acd5264163de5d17b6d4c925906c876abdacdac2cc52543b4ebaca0242de45b17a3f9872e466560e80bea076aca52c0804e68cdc66c18762685955119cb042b06758275716654d1ac1933afb5d65e4ab7ed05b77375567456d0fc4317cba8d9c5eeedba2374b1ce8ace95599ded9f9ba0809a31389826eb7a41d93608517c4c17af2108dbdd612ac9c1cd99a1392468985b31ae18d3cca2f41ea9c12ec04dbe719eb691db2874e138e4df384f4e68add6a7a76e2442e4873f7dff03cca97bf0c76cc43c80ff36e61a25a68bbf506624b617a0cc49ecacaa79093a0ac06e627bf77da39fbc51f423480c429c01cbded8c5441fd9c5becfa3e807f8f941b293559293b392684494ecc88cca33309c12b4c615419799b55906781100be5f76367d9829334d9dcb334b9ccc7d2e26699a761051846980ce554dd6e572752e2033025d97599f59d59431ea2260fb67d40d0a95676ef8e8c403def8879c849c50997523011b93ddd39d24db96976cbcb46516ebdeba69acccca2c981b58d574038605a3330b46d3b44ba5adcb4b656645718fb5d117fa28d821d807b09a3e0077cd9aa6216092fca793ed3738378ad0a5a50961d735b469da966badf78642d60779dab01a69a3da70c18698001b35e780fad8d3c55f4c0095a961bef8d32b7018d1a59dd6da59dd346dab1aa59ab5333bbb57abdaf8332a53c971852684f4d560137ae525676d7b439696864993cc1d214f1b254b2b5b6143059db5c0108bf095672116d355e6d9ad9bd57e1bc1869adb08a0d8fe1eaee6c873abb2b4aa29cf6aaeff2ed0934a014c2a4c0135854db07c1645353545a46a6a6aaa295cd514b17a16b295996667160fe851270dd90a0d5f95149211ca94108611ce2c42d98c710c7e700a21193117b4cd6e282ab391e16a43e5594ea31ac0a332b9455f666950d30328c93fb71cf6007ab3a94ce845f883108c3cc5f6a7e12b8a9ef4858ebe6bed38177dc11cc7699aa30390c3e17cf53511c4830f0804aa21ba50340a2291682ca520457adb985f4eb29429f215740779369bfd388e95c5aa69a95ce574598d85f0150bc998a6cc841e98b0dd9ba942e7d6cc060b2cb0306b54d8949d9067e036b313bc147acd4bf148fd2ce519315dee9c4750927b43a43c94a7f296f066521e8d47d303cd63bad46c5186c5d9f6150b6a55e3d949ae224bc95a6894b29a78a99c3ae00173e3c62b7c659b1972abf6b0b535c32c8545a43cdbb8c2d8872b5948464d1155422550928761cc9193e1cdeda0c22684b05016fa40b77a4c5a2ba594525a354b69aef93a310242f56556f8100a4e7419a6364c4d19b1a95502498cd5c29ab0098d7cfa123651c322c25413352cdecc746102456d2ae315992ffeb9091e10dbbf24b7cf4229d34547f89a42c3f8a8870c53cad4627ab1fda7ad1aa55ad5b4aa69365cd5a858db723b012fc08c3b05616a92fc613e1ead2d34fd3253b2cb812ec5d86cb557b319437766c2f47af08a4c6f88edef427e79796179c95f0993263633bfb01d00066f1b6568c048838f7cb87a58a1277d31c00b2fbce07f23a68e7423c0d3c6ec64bae429f20f76e0ca2d2974f8aaa63967f8aa5b11d3c7834e6bf30daf56edc6576fcda971436d33d3257c511a43c8445833732b646252a1c3147df127ada84cfdcbaa268caf3d62014f7458934a1d09b58aa3ce95f7434e23cfea5cadb295560f0d64a0ac1698237f1f73e6fd3095906719e8a1810aac726b75935b3daa4903d3144a09b5986484b0f065a3c31a1f79f80a5fb5661a2f9561cdf652fd05d054d1655e80977178da28c37469c0dcc29b993ff050dbdfd363baf87738d065b80a57219390e531dcaf39e2231a1f79f81263a26cfbe7933737d48c125ed1c36ae12b9422a40125f93c556edf2aba1461375cf915b3f4c20c5f616a52999049149630554d21bd76ccb05535e52fe80b396b915d5926451663955fb915da199659b217f92615a66e6e6d0f6b7ee7d6cd8cf1629a6818db67d7d265ce355895675e6a7bc7d265de50ac5d4e57f8421253222bedccc392a24750211b83939a3130b8fccb71bb879b2cb9161e74578d526dba7ac86c68f64ae947e90a4368ba7d3a344a37ada4ffc518638ebbdb915a572dd8d83620756bdb1d81544ddb8ee04c97eda7325c155cb836cca674a4557202a1955e4dbb9aa65d4dbbdacf8fe2b7c14f98e2e942e323acad9539f719340993e46f8432f149855a4ab4869e605c34475f4946fcd47dcac974694d17d674a15350520c3b58d55baab0e9a3304bb47a192606186895ed3f9aa61285a9150471ce377fcd631d93e49097e88c8b668902f114081ac51cf99ffc531a6a35c38ad5f1f78c991bfc401026661f388284a2384bc42e112fc164a046df40011f79d6429eaef63520e30d54899b1b724829a5b40758a32fca4b3d6818d3858a419bb05d09aa9a4a19a9dcce750cedd68cf1edf3c46a3999261ac624f93b19556c9fad4097740a9d0203372569ec0c7ddf7e98e3380ec762dbcd9ed8a44cbcb0fd1d668efcb55dd25878842e69cd8cd1b63ffd6e4f283cf001c575e4b6a67dbc7afdd3a1038ff9d93f4a2ba595eac063ee24dddbe0a78e0c22e4446b680da578baa47c04435d95c6fc358e7524adc9577489b1a5b92de4c03f39d8fe79d639c9f973c8ee6abce481cd98016c3f62441341efd2d2509a4d638ff888d2d0d0d0d4daaac20531b5fd7356a9668c7d27a071050998e822c583f98325bea882082d584448e0d5a5713c154276735dcc7d3a34cd086eca946aa750196fab9ea75fd5b26c132f618ec359956b37daba592ca84c253ff4450391d0f59201dbf6d74fd0e5effb1c87eabc5a3dcf8e560accbeec8db53fb060f8f0d281c7d4344dd3b4fb94fa88138a40d702e080992efe01a0a649bb2a5466cf177f0350d293246c7fed04ed9933ae07fd7ac9548079c9a1e9e24fcfd0d347a15ae9bd75ab75ab78a3a15a616cb0e16923011c3eba156649664e72744325b904666985f919103dfa02d6ba9de0c60a3244b69780d21ee6c8bf23476237e9cc7429f285ae61ba7468e8bf5f9f729cd534f2f3d1c53240a9f5baaeda0c50194b5a608231c598373e3a1f20143a561f875b9a2ddb64ad56add619ea9222a45c49727f7e13b8246a497d214b5ee41da1ebd3af956e1bbdb7d61de469a3d41aa6737a9ba554084a652c99c37c81711998c550716433a6b461e80abb66742e4208c0d7e173de89a04baaaaa6f043a01ffc10703e7ca7ff037cfd3f4211256b005fbf0da0266d0849bae2907446db8d96c1014a3d24b4aef8031259ae4ad57935baa4332ace4f910ff0e7fef1a00c8c369fe0ebdb6ab57218638c5b3c954aa5a98aaaa88aaa549a84a9a4b7f184ae233a72156fb5aba07d2d735ce632c7654de334dac4764dab1849cbd5e9e0d70ffaeb51b373637207ba5de71c8621c7c2e22c20511431c65743d2728df84b72dbf018f4972d50ba6d2387c373d63eb098db384ecb81be78e9a9a2e2b4cd729af6c2344d198a84bef82c6190d08b5f071e73f33ceff3bceffbf965527f0e54268754c6fbe64b383ad9f4c9a65fb292c8b943a2715bc338056fd34fc72433a39326b51d79d01bffc5240d82cef440cf92aaa0a02afa82198359aaffa95437d84e9616894d5578a4309be8ce0de3adc6866b7c586b328890937e1c8e552a8cf598d238aeab5f9ec700b1a126ab8a2a663385d58af2ba815191adaea89430594d18589e8d893fa11fb5007383d5c4b2582c0d6b7343b1f2b451da4caf88b353bce4228edce19bf32856e5260a845d3511f784b2839873f8da318e58247eefbd3b986dfc28a4be1d2a6c8d85c3908f280ef73d4c7eb0c8aaf6b61171580b31132d52632282ab48034a15b0eddbad56e525edab11ea562b99a4f3aac9aa9ce46f555675d3a9b69bbaa7af3d27f9fd4ae23aea811955383e6cb041235fe68b015e78d06366e1635e714d9b3be81b946c7f2852904c0141d1f34911b60f2fcd2745a8d9fe3f6e30cd1af05f528475dd4ed0d1a09a30899a43809deed3fb415c909df06352147a2b03fd21fbb9bf8f1b74e0e19a86e7cb07a5d8d2a0b6c8d346d9b9da4885d14794811c9899f87acd8cf18d0138b473e159c85c5bf181faea4c93325875937101f383da4065f4820f9274065e4aa26819545685a8339f56eb4c1582caa84c2571d0972a0435b9404938a88c5be1000fb3f5e174f1e78186369519e74b87927c85ac678cbb83605acf988f476b1f323738f003fb70335c66961c0d3da70c0d33b4bffca51d0b4cb92f414cba1341495e648efcbd66fb7314e5476cff4ba240306d77496bb6adde0bd374979a03c1be4fc7f6ee4a7c3463c05aa5cabc9467cc6cb126c93f08db7f86a5c4644d568de2261f9d10153d653b169ba226c91f33d14ddc66fbd31b3c9994075b97a1cbf9f290d0a1dd3d95e56daa36644c532d326d606048a4716c6909c33a833f1d95acad2368140b63ff984069f8eb6b5523eb0c147aab1098545e2f1edebddeedba7befbd97dbaa8f6a9a73ce099b5de66cf55e0ea91f1c59d9feb81699268a9a78086d44a82a81a392fc5bdb13f192a59452bd55aebbb7bbf7de7b2fb7b936fd1a65d3b72f160a6569306cab9ac7d3469f992e291fe2abc14fdfd39089065f7f596764ac3ac3da74d4bd3f65b9739bba9633a574eb2c8dcda6a036ce0b3aa1ebdf6d6a34873c104c6b2878b466c650533552837092cbd42213082694e05ebf737e359de0dc4c17709cfa7b1c4eb5a05500e07da3b3183047387c543f4d764789aebafe762b0c9825bf3247fea32528e9ca2ccde9256ac41c71e4eae5829b047cbcbff7919eb47e4d06e1fc4706d9645298e024a422e1b4e4fe97447f246555d2485b95e4cfe1ca90f9cb5f546685aeff31a1cb3a4305115c54235486d620ca5a67a60b14bae4ca2aa36658084c2adbb2741cd785384ab9d0c77d1f44085767ea0cc77de38869365b03c515db659df152d951b25d35dbbf06e1255a8d6c7f910cdaae6469b1d8f43babec3140815d2010896f6060405f62187e819cad73a6b50c6dcb591c459d67f92127d028ea32dd6159551c0e0763ee87f82c64109617bf1b7f803e945946d18f9667f91692ce44dcb37ccbb770a10fb170dfe357a8130a75422ceff13aa1100bc83d02b68bf739d805aecafa02d0384f2276ec72799c05164a854ef0f297bffefd554d7ef21fa24806b94740e38993104742a506a725f6879ccaf7171e895f7a6cbbdf541c8badb87cefb73d1d719f8eedadb5e5909a8d032d87d46c2d042c1f44f4437cd08ba40f434ea1077de8fd61bef7c7e334f913b3bcb19d8607a5cf32060981105650c589e5716c05fa16d00f39b5fc10452ffe90530e8d8e1a7da69242a14781749488fbd0a3f0a2515483f4191129e21e05d2552b8eacc14f2ddf12229d33e39b711ecb700c9bc1f9ab9ab00b74f90bbbb00bbbfc55862e71cc69fc75c1d017e625eefdc6f3fefeaaa696f7f7295eeafce74396b465f4138e55d38d610e8e753ce18d79de8d7937e6dd584ba725f41eef4b1cebb4b484f2e49ce8e0c8395d3059d2327b600c2434273acead39b16ff446f16df093f8d93dfca3ed20d1be36ce2b8a7c8044510451512483083989af8922481445502c164a7db6e0f4c0e9014402448245c63206c65a8742ff23ecb2d633c54bf4b18bf5da1507c12548cde014c4f342fcc80f499c96d8ef384869f8025d776c60c2360e5c8d809f40ef19c58ff811c56721e98ce53fa3e847e83f1ffab0886568936257c558eb50e87f342ab1ebdecfa029bafcfdaea3f385ae3f6aa18c3d8ecc6260d78cd1db9f25356316e0897e781ee4f921a7ce28fad101e5cf48670122cdcc4d9df7bc5d8a4474097a75c679e3b9bb1f12a14bb155f16fbaecb476cb498e3f32e491e57f4796a3d12541af1bbb145b37c496f8852e4148402d0035414d220806201a80a400515182acd848f684828403ec0925092ed8db8ee146dffee9b82fa6aa0984b106bd522031b5412f6a47d14684f2aa26910a4af21793302b828c8b5815b300c1442b6eb68b2d161ae812840489aa23bab6bf8b36628ba506faf7d48110ac5d7a68c294d6de3ef7e9b04f474bf72da946dff71d7d8fe26b0c26e49e50923003125b44d0a58726cb6852493a9fc5a00e43e7e9db3d6da860eddc1941587428097aa1f4bfb236412fd0cbc3020f8d18ba145b2ccccc98036cac3d7d0f0afd1be6efc5fcbd9777233a99a66d7b8955eced4694b25da2169e157868362b36d724f99b40dbd7f053a1271424cc404cd8aa555075b3c55635815e4e92b1f68482041600f68482049aeda1a926d1468c52b3fda19041048acc0a154110d904d813ca6c8a24ac5d8a2d976cfbd44113b1ed2fda885140ef258a31ef554da24b6c792f11e6bd40526c812c5d7ae20bf4d07858e06101e5e2456534b2d39a2fd574c324d54eebe56d1863bc69358a4d7f7329f172e266c336d766c56605cd62d350198d04bde68bab9abcd72455d08b7e3ce8e6388e031f87831b3e69536c790987cf1ca2cd0e4af267618c0e934e4de78887c653e3a1e9a8c2988f3cacc241a24b4fc9f6a7d93b68af3fde91ed6f247b373ef25e62abf5f2521d5551a620d96ee3f21216e28dd7c0bc8f077ded3dd06bc63c47a54b100c54e5dbe11bf43203f40231316334122465ba7c3cbe0d7a51d1e111ba04bdbc648f7082a4871fec1284c5f60fbdd0a5086a89302fd9a75a87e3e891d0e2cb4323bac4964b13d9a5d8125b5ee812f4dafea2ee2795cd7d29b680a0f1d72f41af97976e3c34d5d47979686060f0917b43e8526c394074230162cb8e9d996aea30f1ceac9a3a479ce4dfc43383647ba7a3eab4aa299485338d0acd745abb93da9dd8eed04c1bcac0c5ebc5977823b6fc4597d7bad50d7c1bfc04ba2ac937ef25b6c416a5b25dce9bed374d3c864466b36f94c8a8b0b69df936e35bca379a1da54663c1f318bab03299b6327f9c3fd3a5053366d68a97b8b796fee59ee6fbe9b8f437eecbcf76f20343dbd636031a439796073c6a0146fbf2c552cf8e76cf4f06d0aee467c6741d15ad235b5648b3b24adac18e9c5585ae5fda9565425a594796982365563663b8edff616d9a5a6c63b68aa5e2a31195fd8dbe9a40925a4db6b6eb404154b4dde5878e49f26b63128f9cf95326edead348bcb2ac193e9e8f1c6fed86ca64b25a41a9cf0479da285348dd16a5ab556ac6381154b5f7bea8783521220575d693968f56af26f42573fe93d9119402bea68b833fa0247f104605b8050b6c812bf005727eddd6bbfad2f8cee0bc4cff1294a4c9551a2e90e9d476475512cd74a9992edf8bca6ce4b7a22ff65bc9be337a38839a26a5323ec47c7111142103ad55772156fe830c0f71ab0913414997bcb34aaa11621fe10157e0caafd771522ba8a0f466ba709e437aab9262ad59493733c62b6d5121d01b0aa3361b6db5ee0d15c22c5d21cc91ff855592ff255d0b21ccd29c375e7229d3b7a024b7b7f5c5f6af17e644a2305223aa3ff1f8a95cfe60ece32e0705ce4a50b6fd413de8129cd9e10fe4a691201468d946e6f7de820ffa4d35814c9c6413039b60474dfa84b6be5525390b0f315dee9339baad7b5756c8206263b1582c90891fc03f73bc24e1b7f2236ec4a4272da4407283531021b74aeaa45f08b58206270e19a400273805117280932697883e20848513875c32238282690a46013a01abd833b4eb3841294f66e983627ae95bf9e8258322ca5e7909ac628efc5f3e64b1047512c2ade0e6b444647f6ed10c7383353e998f2e187374613ef2bfad4afaccf026fb82314bf4c91cf9d3968f5ad544efec09c645e6884306a14fa050b09310af04b2d39292ee6bfdc32f7d23c229ce6f348d8ae676e9377e3363b6f7772dbcd825cceec0d5113d2b89b4919fac9a40164896a37f8f2c43218d94698e2c474838248c127095862e412420122f95df4a89caeb476f27e23563bed57491324d5f281486dff70251d1e02efde6872667fd11aa24ff9004ba0c6dcb7d2b4beea0af11d944977494cff8c851dfaa62acf5b7eab62d7ff43f9597b677ad5aaa2b33c295c998706733c64e3cc42c3231ee41d3a8ac9a38b61ad1343ae2d474f17689b1112f814c7c44534d20cb492e033e315f4028a64b115a48845583263fd286ef55534994c6592c67811b87f36daf8dbe399c4dd35ed5c4d196d3f978382a83a8f700ae50a827a6e328b6834eb683558c4057b2fc669cbe88ce04b16b4ad3acd5448e0539ca695c0977c257e0aa074dc9f29bd9e06abaf8b5f1d175dd968f4a674561c437335ddc5f4e54b15d09271c1e2aec2de6ac99ef894d6b9cf86894d8f4cb2fb55d1ba7a6659107a2a27d97e02b057025659abc072f026ae12910e6a81b68bacb2babc005600ed076067210693fb7fd215bc33407645776653552482185d10351d1749738a58ddcaee3c4a91933c434814f80516023c016ae01f5155d7e2fd4eabb218147842e9d35631c355d3c8a697247b11ce52c4739cb0351d1db2e716a834ce8933be85b6d04594534bda4e88621e872de388a5c618515381c0e27b330f73ccdd33c952cdb240425ad13d53667357eb22f4ca2cbfbc9b6eb0f7f02fa4332fc09705e4471f89579a992a2d148cfaa495713e7c3116c69d6cabe5935699233ab8903320157b78c2be3d45aaba37c4424852e50d5e42c4a2aa3fc6457e6a54f364720e82c14b89a317536636e6cff2bbb32b005bac0953fc86a3182f69fbb3ad9138a184db66f9005aebc34a18891dafe2093265e0daae5251b2fd914b80257db6605c0e160d48aca5412f7804700cae0ceae8c7365200d7409ae64dbdfe3f212b862e1cba500fbdc023ac8d346d9f90b1b5983be58c720484d01d0b60f005983966a5099ae4a57657b0d5b35fbb2594cfaf2aa26984aca829a4a94443a95c1f4a5847bd82cec2b7b7906e03fb01b239ecda8042d1547418f323524000000b314000020100c0604c3c1903c102541eb0314800a7e8e48625236170864418ea32886310619c308010610420c80a1999ada20002011d5a1c51008ecf03fc0819b077580e46b3271092025552cc64358a3ca2ae2b8d61b924988a8fac707846a0e73cdcbb04936fdf3928dafaf775d6fbfbb215386b63049f91d849af4db3c993dc67e7dd63e101437e128cc5055b5bbf655cbaae67250266b92400eb0b4875aec5e9fba3083046e115c2cc20923ced21f5640f03ebe61e9bcb4b48922a62cd0d1c186139e8579696fe8e96abd79449d34a8a50c1b42a8f7dd43611cae50c73761cc19d5b98d187e3434d243f5e601304a2f87c48e227631a3d3b631001a677457c3fdbe8e8348917e08490867d19d6213ad34edbb556cc08c4cf271b78b9374b915bdedf51cc17ac4db42daf4c5ff775ffb35935aee26f13a52dbadc65770edb54d721f6cfa1531bdec551a67de9bc7b423dfb68d23893a7132cfa62558984d3bbc1b9f6170c0ebc0cecb063fb02345d6bbe2b008037397355b0618b8021c167ea07b47edfc208d61b81479405b953fd3baf6568d8feffaa9baa61daf8f406e9d5fbfc1afe82ce1cd3823fd1beaeb4020640ae389a9d0eef26504932d3d85d6ecf8152d257a9625f5e88977a1dd849dca9c670f7067391a06c0c3140ee92999f56d7208773d8bc29b083099fad22030e993e21cb639b87a9e1dbfa6620a8b7566292cf6a4b2732c5c830ee7ad797280a7f3ccaf072cdb21bad9318829641ffcc53b16568ba65c7bb80c7d2106451a72473566e670e2b36ee0fe1a422e1a2efd9730706d65698e2956c3f0e132ec216a064d486a9440cd580a2e7b34919b7a8409cb4c4fa3a7fda750d1d5ba90b615ee1a729deb89bcc2cf46050c7c408a25e18926d8748f6fb98c1aec19143cb5e38e229c2610247a632cb6dc5f0eb1692a866d72dd0ffba4bb42a34fbc21856b689e8d46dc7c1d1e124ea820a2f85df8a2c3dd2b33fac9af3d32377df7c5ac2d03b1a75738770f4c0c81323284e5868d1b23a2a8433e4a757e42ecf4f23e45c0952365895f1d9486d443213891befcd1861bd2f0e899089b97391e655046c9b3173a86da67e99e15715db9dfc5722ae0e1eabb4db07a0cf91a43ef6cba731dbacd1a9e55d975256d09fd721cd16208078edd9546a5c3c0252ed39bc6b9baf52f1e9737f45cd6e9c4dd8ddfafb50aa83506654989c682eb97a7776f0c7797a431465008540df60136a8a473f4316d8ffb269f3457c20e384432289e899b47984bc87bef68790824d8db6acf68d9498bc66f87a309b3a88faca7c7710733dda983e3ec4f7c8305efc34e2beaa72c6470d3e3a5e2c72b3a69bc2eca3c088da8674588b6a83f7b9d224741fa5774c8c20d3c6fe88b8bda7c35556028092b5fdc8b084fe3deabc57c57126d14da5645658a13d29c0a4f151d431c02596a8434a22eec48dcb9bfda0c8568b36a3a038d3b258465e9c7504a8fb5937f3aa3244eabe4a2d8c532247d1b2b203b5d8ce2c12a76a5789238c82b146284837c7a2aa43069be85ae0dda2a16a2f95e3bb4e2af5aeab3d514079ef9661c8c44ccf544a671fd842f83198fda4312751575080b1c768572b08c41a0424490d5f2a3f0d048b6f7a0c7405c1c7e63a2adab82722025ac0c1d7da1ee05adfa4a1fa78f4318e5400224a2f9d82d700c8b2cac6e5054c09a73626439b9704f6f98d88e47b3be11763d3283950285d74a61999b31aa8cb4adebc4c4375c15e433742ac8cf39a00432322b0b81534d4734e8fd76ad509db68ccab07864170188897ad4eeb4a79db3bd62cc8ae4a03cf742a676f48871016df8d035be63ec44d88af07c5f1e424c1b6e20002fed5ee6a498766d52bc1337b7ca392eaa0cc2a9e94c5483b77c28359c0c37ea65cdda2b8ca4872c340921c3166db99e45a4311315484c3afe2c6183e4bc89a2fd99c2e3f9e1de090e17926beeb259ab0c9be77ec77b7e4ea75d4ca921bc323d3253929a8457b09ea9348546d152ff7c75743522cb7cf4cb9347a9250af8745fbec403807a2a928981a58e237aaf23f96485c0b9eb01ccdcb5f77e05a4a9e78dd233e236e148d16d933dc46608544a7fe0f9776b34434dfb4fc527f4f08a1d1d9025951b6ff811c9b84e19a3bb6000e4890c9b8d358ca349193001d7ad78593621614915533adae0ce1d9ce90bfb45c161e8f25546200590c0497c4cb5b22bf1673048634f36bfe9906e50382f31cbf54528fef303156eefaebafc336419ff25bfffc7c447a3783319548049459c3818aa85e4f9c547215391e9ff1723e186fbdaf75b92f09742cc1b0069051422e0ff8c7191f34fd65b6850435b129972cba7183b0b8fda1707af19e2faccc1e52403db3ab2212eb7ad71e86be7891874ca2aab0d9380d6d6ea8396c1711e32e540b9b62fa4d1d115ea526516f03745c3e03808eb44432a9d0900854ccb72c830dabf16502f57c1667ffaccc4eb5699b6404e94e6e373aa8bad97e01f281e7e98e853fdbfe708e995050fa3b8f58c162b9ff77a78d47e1406e22c7d8e3a14f22eedc47ac76eda146a2436b35edfe2cd7d091a09140b4d0b935c6a066eec491abd101b666d90f43976e50c92dd6e9103abfe097aa5a06fd38f7aa88dcd4050284f098c38ec5614cf849345b941ba15de9edc179c25990f516c47b7670704c23433f4db350c909095fb19614603a3c7b01c9bdfd76d6a846d997a887d460f7fa9cf68da09c94f1e526de4f7cfb3c00642ad1785bb580aa1e0d50be5b163cfb3f29ef080d1b6fed43ff637e024daa83dcbe7521387d5a5695775435b1ca4ec9a3f22fc809b9a1b9ea1252a84b1843402f17b811778796004dd40856d141302652d302b27da234ec44035e18e90f2e5ff9d533b23023a08302cdccdd3cf78868a2f40548a96550448cb4c20102565a212330c56487a2bbb1c0f6e5b4d42e1e6898087193eba7d01157c333b5cbd90b3e22c4126a5686607f0e11666d462d0672991baaf67bf405d4f3b850efe02ce4b30adfb2e2258fa1b2615001c0f8648f3dc1a6870fd9e81dcc05794927e72669f3f6dc8120c797e0273d3e5038ba8cea2edacfffb0ca2f10732e42509150d32151ea1b0a3ab0a4bc3a8b451b50016ff8dc435cb3b690085ebc1ac8e5fd912294ab4eeaf3179362f57187b1f7f5c7b5b14edfccada2429062e30c7355c0aa82d1b97d7883fcc5a90338a4613952c242f9851c0b9216ceba7737d8196f5f8f5f5c96e027c67adcf735d238e06552502bb887b4e12356557248c4d1cfc7e83973596d28aacdd0c41c93a648948ace4a73df23188817ac60b7e25fe30d277898899f0533864ae7a81d7da653cc9b665e37bbc6e953d4530fa7fdaa096d0a09cf7d6d37bf41cd39c7a034601f7a762f151d71b84991502b5d304d4f87e6932af61dfbeee2335c28286761e782f68c673ce4429a063972408c5fd735e11a46cb03dcfb25ee97005c94b6d6f0a326d2bcbf8c4f3cf9a65c7689007e89d33cd9f9cf4c9624a628ac1950ef0715e1ccdad4bc2131dc55eb2dc3209649b99a5a01d6a6aadd913425553852c74170565513299661c527832f07ffa5876c84441b7964d307fb569f78ea722bb22283e078a288bff65431afd358cd7226de39aebfa3630a9f6ed6d2386215db820c2e37544b65a30994f8e508175bf380d24f6a390f9a0f915a97f4cd5e1aa6224473c36ef60296f0e3d28fc0eb70adb135eeec7e5390153c609373d9450117fff6a56b1f968bb7a125fee7192fcf2b986d06145cc8ac771202364b2bb5655c38b688c40ea2de25d8b7d1995bbc8fdb28867ab17187ead7ff2101a81872587914f18ffc93a4f13dbd149b1739a7172eb4ea1fdefbdb905182aa218f8350e1329b149e94d696b83dee9767cce7fb2301ef994209652e031a8dcd93ac5fbff06461762f77a923f630b40c2ef9bb1cd0383869800593499f9c5bfac4b242a3e50566db50f8a4abb6fda86fc6c1972ee393eedd0b917b4cc96636b8151e5cbddc19d4bd834fc2375a10556291ee4f31cec05a998a95aa50c24ab7008417aa2b98b0a2f27dea693dc9df8a04e0408e1b4d1fb867ebced49c13c111a98c8a882b7818320a283bd385e9d2d85735cbf354e3890067a62f3fc82880832880f36a3bf99d6635aa4d215f00943fb6a1de5c30964806876bb130d45d342b4e6731d216460eadf588ed6f12277c7f03f16b1c6d514c9dd90b4772fe2623fe254d80b627dbee6245bdc0276416f9504ca9bf890b5a1845e47b7774e4cd7440eebc50a83a625a2f756f64e31d96f0bc1c5c6ab4ae1628f85565d54ceba3f75d61d5ac05f0f8af3546814931042f012cfe02a6b4717160eb21a90efda91c35ea47876ff1e6d989bd7d5e49f4449a4b2120147ef48c1d8484b4ef342a8e7ab96d4913ce42534a874602c14c09a03ba7b43c093249bae5e2548592b7261a226a6d40ad58adc6b02cbbd9e8104c179dc3525aca3e10b94d8e7e796d0ea5612cb4eb17439dcd1126c0ce5f1665bdb0f44909b6ea48094ee9e4ec65a2b6e90759ee4c8a92ae3c34c02fcbbbc5756d2b7dabe63222061e536e1da4a490e951d8197448ca59ff9c230778038323e00f49d4a6da16239dbb4297ddedd12abbca5e110f13ebfe5045a4bc23bc7e6b82a70debada5e51baff825b16852971829b8ee124cafc20676e5ae77b1987d3b882f966b7dba0b660270abf6fbc73c3af5324d255313d04b1d8dd17080688d507a4982b8952afdd8e20f3bfda5019c16f6cda80577663de17550c66e6cd6d65a542ceb0db01f270b45f370bc00b778522844f44794d15611fdfcf82155f90c98492ca5ee7c021474bec4b65a237911111e220ab2ecfb00404b96d326e519ac19139e408cfb1447902d077d6915a22f16a93c9698a51c925260b25c6a30361e3e9fea593ae1bb99af28da2c2cffe49c5ec467c9b1a5842684e5b42a7708c93e0a54eb273bd760de539aa798f2821ac22af744d025c07755a8f6f11c970141f125020ce6a7a8840c179062270dbd572d9fe857ab7044b247c377976f7616a263551ef28f94dc2a02f6a454b6526bf4944c4b76ed62f48c93b92ad60e8b437b6efdfa4732201084824f292df24a8f6b1bd0dd4dd0296d9369aa9759d7c25b6c1cf97cc7b8de729393567fc209d570433e4123b062612056c40ec2a7266f1843ac04b35a22e8434c45b67d36b12dcca1b0bd5717ce1ba850eff763630dda7c3da6c66902a44debc9db306cc6d8d99c9f8c81bb0b83786441f01a8ed4ccbb1d1f5cf0e1e5672e588118a9b5a9e004ca90574a9836899e75a2035c36010d12fa8fcb0164ad7f574bd8740f34a549c623d028ded048c180813a154d93d484a3383dceace7f04d2833efdbd93c98e1b7e451003342edcb75d3b0c963508f3f37637100870ba67aee949bd3b872b6ce192f74c9c92f8652c3b00b8729b9233231ceb4059b46ef0193a878487f6c74799c44cacb1ec7bf3124589d0497e4120a8a0edfadfa803898a834bb53014f1fd48c75485cd86cc36bb336a2574a95cf7058526248da79aa9857fbd9f02a7f4a79e9b7a480f272e85cf48cc4e73cd81294be55bb601ba734500507d369e5714edd3c636f1fbe371ee7d0270afe55b74f9c6d58fa48adc7a33cb7080de3a187101057bbf036bc3e8d3c9f31812fc57b884180adb09429964bcd992ad0ea334958d7458cc5430d05bd9b6b1d160db66ee2dabced69167589ece8f7fcd75e9a3589d4d0f9bd3b692f402cd4987d82da0c8450cd0d40bda5b4d0f5ac9de0bf5507e93dbe6182cfccaa46995622e8d00938d5ba0a3f225a1549ca75f63863bdba40745312bb3379ea8e4b290f7f6b66e490a9acfa24b3140b53e13aaa95d9ffea4fd63bc0c73bced1f91850646b7eb0453c0ae712960874a925f2e883b03b8712ba8244f04a8ae045adeabe35e2fff934f00face72507b76ae0fa26c0a89206c47555bb680bcf3887218a20c29c6e02eb4ea9272a583dce85e5a316935eee5eadc0d0fb03287534dff88d272d17565b25c36f8c797c70c8a9c19b8cccb0b1e006fecd1df8b971c04d27519e890bd05e75bc67b0fc2fdfef3f174ea4b0868f53c091321915e80fcff6e3f7862b6e466734f4a6962864ffdd26100b8fed1613a4efdff588c9e6f75089031dd8d1b44f7ae62f374beb8006debe62d53aba9104df087cb9c2098fe5dbda61eed09e2c4b2f325a191922ad007dbec7b321199774d75483c0e09f8ee134a64309f9259a4b59af4b23ee991dcc62eb1d1f712c13173001c6dcfd5e3ecce9565d1c92ae2cfcf93297adacb421b3dd038082ee0b1e4ef057038eab9b83bdc68ca8a0c634a192149888d175087f242b45f9483554f921a26bdea2f416f881cc12818d8e8af5d07f17739018638ee4419ee1b0b5f5b167b2dc7d776708d30dc073de7c7a9de62c52e210f0f360d406a3e5205af3d6c0d324f2b50be5382c2491d9c1a60aba04ead4f6025bac6cb796cca5081b870862e186d20faffc383772f3b8cbb31010c5b207b27b092c11c2184c007c01ace45c757d8f091dd5e74fa3780f27103072f37a52c65e280594b20cd55021acca85cace806fa9d86465bcc7bc190a6441c78f0331f7707835c00f9d2b42d57ef7fd2c933518b7d441deaebe584f0630a292b7047c01be9125b43ea2e762ce1f376705554e523b51005df0cf30d86adf795e6ff10876fd7d6691537d60dfeb71dd7f09ae2362d8d2befc018831d8633328c25092985c80dae860db003deadb59705645943d9566238071f5fc6cc869a219e072a8eb6f022104c2180e3b357624bc846d6aae3186e2cc9b3967f3afa87687e4db1eb80b10bf6cf2f0e5b93740edfe32d8058846d0d98c9bc831daeb1fa9a81bf78def0edaa3c97d52591d00ed062ec9d810362975c5267a8ffac576a9d3be471975fd4400838ac762f779740e09d5221264efddc6bc06b137cf994ef4af5fefc37844c11c03e31cfaef4ec318011472f3ed60ad40139a5e7ebbe47ecdc6355a198258c89545a574c34f88d24b88df1c64f35afca3e5a38fbec75e90cef48cb2b5162291cf3fc10e6561c5edbbec5e022c859932e918b5736ab7f74fe45a86b161c430703e4efe9d16ab981ef93ff545656bd10dd3b9173d3b1a7f47f2daae551142c3e1e9d24b110127c9fec6988e8383298d47bdd509e087b3712c22a50e13ee6455a68868e1ae32930041fdb71dae9169af18d525332cb42255835a66516075425b38cdb51591b6396398ff70dfbb211e37fa69b6030588b273dd17a6f1c0145295e6164d7bb8a8d815ca1464c9fa7434fafac88e97370b9402dcb667d639548777f7e0bde14a93cc3c93a75e09959f9fe2dd802e05821d30d64b3bc69370ee530a802c90d6de3544c29c00838c755530a504829a1f119608a03a26871b0c97f04b274c95876f017f98aef9c0a6634a9d60ea4f597f4b241927fed9adc02d6f05d168cc28f31b44da21db9ed1776db4279287ff4fba185cdde9172574902e2f48750eb860d855b7ddf08a796a9de21e4f7791a55bc06ee1a50f1052504d85d450dc5bf712a2773322f72d40c32bb67cd6a5edfa31e531264ceb9c72a955e3c4d51dde77e3fd66c372323d26b472c4403d49988d0a5afefad594ef6323bc15199ab8d006ab4c91bfa193dadbd9240467d2ce423a9acc027d7453f0b0382828d1675f43ff820d09143678776e091bc806e36842cfab274bbd6afc3568fd782a2acccbc0ab6416cdae03aa815ed6ea366b6f299fbace8236ade0f20d34d600023cb8d69658de2993499fdac2e66f8da4b0b81f8341376ff0c7a4c41bb6495213ca6bc63289482bd116e94494d9970bf562b60a7a1eeb96a6617b9d46c8638eff4baa30d8088bdc17bbd95f1cb840868794c1344000060c07dbcb34c8e0351d2b4083565f17ad91558d3b2b6c8d6913d0404b296533667d3702cd55a68a3f80ae56e81704f23aacba083ddd010353dc07b139702de3bd58288e848f353a6a7eb8c027e06df83d92274ce3b4080c056b1a4d28ea67b1afc210370139bc14698967d4aac8ff76a0ce376a0220afe6fc35ef8c77ba1223d6c99165580a9e849016c01b70400b8aed6876f197989447342b9f5106d8b86eb2aab5e8a688364b2bb25618c7d246f40bf079682fb9bcd36ea2dd4dec51ec47e4b51fd34889e8e1fc464183768b44fb3a36b14567d03dda0312fe5be04bdbbcaa947431bd23f947e573f6213681655fef0c3566fa0bb82dc773281f8c35b0b40cb54a4b3ea7e6a4443224a5034f6268071b4defe7c29f4b8d1a48d6ce212d9a8f21db1ee6c610e6aaba6d4463879da3801a9d1fe8a581bb3090f5504e2b5e378a7a154933cd84fac394fcac741e4da49f0f261345ddf97302dd2b781b8602d2caa0a91267452fb44b03dc86625ab6079b79053e93d36c62c212a55114626a91c12e3aeda46ef720f917a7612c096177b2191a72644dec2c8004206b4625a82decf10d8603181ee9457db8f1af318fdb2550fb085d6dd58f0c3fe15ac9da8a6067b1210c37882aef824200442d8054ca05e3e331daa6edef384ab83841f64a75aa53478b73b8be62f7b2bcbf635f763ec5d83201714266cf84269beafffdabb613d3c18429bc0ee08344ffcba48b9494d098eaf3a9800f58bd72c8b0a06c71cdb2173dc9a985a5f041b3478f2d3a1496c9b58f1258c7c9815352411eeaa3d412874849db0d772ad948171a9d0b5b53b7fd757f87d3567698f72c59a6ed30a2ca9a6b2992c116ba926299ba381811f16af28e3dfc30a307f1f51d4d8e8689b5d83396274b7b35b2aacaf17b0e390feaa41a378222d8fcf91846890b20f21fef92ba663a67e43e6efcc7ede963e72865043c93266efafc6046064068881657943418dc39f11cb02945d4c25da0d4fce441dd4f0857fe3626445ce26f1b9021e8eca4bbe2997c2cbcdc1019837594a5f0042a7d9d9b6c40bedcedb88cb7af89fc0fe1dadc0db5daa07bf01d4509818acf0030993c876431030a5979403c29f0331e4d5a3b9d543940c4cae7a0e7a23627ff2a9e23479b86d11a2e500e4deb3463c09137824840b435d4ae203298b6879a93fb27741834ce8e0d99ec8ac39a42853c1f322b2a3f54b183e08683571f03e1148e88586829c0d1fca925d735c15c4c66e1eef2ec2fa04e9b2c8094a5195703c619f4430a47d2c89e6280f3aa0b845d9dbf3c236f06adad99d68e453b02686144f2a05bb20e01eb271432325a650d543ebbe76d9294d583009418e0aa91541af1b10f55b8649a4aaa657a7dc6b7675975e1b1d0ada7e038a8a1805bde04264d4e54e64127b0bb760ff29a0996b9c93fa962ab883c5657928f4166b517bfc49330f897402aac07c7f20a8c48f70c21b7862a90eb8c9e58c4c10de07a8fe27636043bcb68181f1e9ced5e051f6374d05683e8a4aae413645a429d148e63f7a8cea9944d19d18b83a0b6a9c921387598db49f63c6a301f1cf892b013713cf7db446f93a4812d618c8895f47605d56ada68ef5e69bd39655b802a2a9cd363f8ab0dbb28b906f690de186feedde7b97a2526769092ef8b45132aa2e0c4bfda281b366e7053d9279c20e7af5ecbc0732bf76121128acec470c43c0a337b5458b66c2aa9918bba570fda6732c6af2b6771ce05bd0c35cf1af9fe75f607576995e71c13765b689fee5730f8c2fe10023f3ff4a561d00b6ecc955ac9361c6d7b3e2c82676298d4634acbd2ca0c78e6ad297b2e14b67955d8d4af97e562fde4abd654666896e4caa2db15067bc8e1b1a70cd7976d1dfa3988adcfe8a7027d0bf1fd5f961e743985fe6004a551021ff2af40b496c2271185cebc19e227da680423fdcc3798e15fb5e24d7132c3b08a0353ce43a13471070f87d03209e87153fa2408e1d2cc082ba437550fd95ffb744ffc1d079ee0a77f2b26eb91df4989bc2cddc520129db2cab8d8d4ff4cc6b5bb6b2ac0e1d74520861114c2166ec8fd29b091686775f720032049e9106fd0f5e042b10621281450908d8ccbf599995d3396cc2f9cdeafac803962070d2fde02e4b179120a9d303b276ea620ceb7cc9537bc47468c886af415579d2b0bc8a51e4e7bdd1f11247154b000929ddfad0c2331a58d07e5562f4fac87ef604ce8e58af89c9e45cf7f78ae5e79b6433ce5355dbc9e0c08403dad9584982af5f4000426e920844382f591fbae187e3b84d873998fdc7723e1bb0067162899e72efb4af44bd1ad6ca51608153e90118cdf43934d81cffa6b9d89883d872a5e9d76222936af241b4182101fc3e426b27761b1de5605506efd1eee43032cb2a2033d9731b6439cc8c204640c9dd171c0262a02b7e3daadef40f3df52e89eb6c7780d0b82e56d4fa6fb68143f6e423141a7650b1bee2402907e0dbc079d33bd25a374bc57ea994a97d0c58c79a9582f349f235b0b011293f0d188c8df9457295a16d0f1b61cf1501c98f7bf6ed118074a6d15076981b1b3975cf966e9db4e5472b69740c1224fe92155c80a3c96b0638a0a240c222b1ce4cbecc59676f4e09a30125dc35286016d0781282d562f0ce5abc288416045fc0baaa899484cd6f4eff383c86036eed0d5879cebad39010343b266aa626292da11fba92b6ec25f1c48e7e6343e8d2f1873ef4fd3c6cb981401192fe55956e9ba6deec0cd4685dea54ffe138e075acea5745a7ad9a1af65242b82646dcc5a4adcf144c614fbcb06df3cd1f655152ecff7efa09ec8a8c29465584f613926b9df612e22cddcdab23cd7cb82791858921794869064da0bdacdd5e5cbc060d0104595d655af5db9b9b3b8d19cbc811cd80f051aac3d2a7026c171d918eae440e78680958bac2caea93435699f3f40a368eabee91b17404b21a9df60d0c7e8cd11e89e58804f1d5e5b510c14a89a2af87d04f4ba3a39f0844782a50446025101a104637d0f9b2e13f1a9ea26a3a570d605f58fe32ffebb9de3a4830c436843888e6318a2508a82f61ea838e50528e12c4b64d85819110f655f93003383634aadaf92557825feb83f93038772181ba4d6146a6fc385e04a71ff4f53bb4b4565358d5a86537c01f52d34f2df495c324b3206f4942a41ec49135ddff20910edd5ed0567af17f3973977722e61883838e4afbcaac76ec42a80b015c4fc5f547296d186ed81536897e730ded1724e603a8ed875c485dd9e105d731dc6ceb4cc7ad81e1d460709b969b9ffc43e111712737518ec2440647f2e04d6f18d983f0120897e402471ff4ebf67343f5668d6840876b70290dce12289708cf189e72740666bd38f1aea884007a09ece8b78b5f03c03871d363de650d914c42d794f285fac4130b07b000d6a739c08978726052b98adfa89d29ee09558a57ef074f1f2c1c171ab58d473c2599714ca91b30855dac9e0a0d78b1485dd1721fb92be80b2f0707d80959a761727cabcb47995af8db58d14ae32b68d60d4ab486570af0bdee626f703772b385dcea58fc948d42416459c2f12f286ade8580cc3c6bc751e31fc12a9b481c3afaf6dfb7e740504c0b2e5412ee79bc064c8437ad015a2571bf60219ef924f2d40313374c1a3688879b4388cc993560992e1958b6357ddc0aafe2455a6995eb2bd403c0cc1242c328f221bcdc5f3a8236984373a45f20e31478ab4b588538afa3ae12fe6265c2fd6afb509a6e0fcc545de12b3bdcb6889c3f1f34edf839d1cc83edd395c3157e91e6e01a3520baf184fe4a57092665d4ffb1c9e920bee40ca71cf29b596707a7b451a0bc9cd30ec9745cf9722a1012f79232d5fc0889a50245cd581213f9530e42b59b72170d7c195e3756c635c320f51f0584a47a79c100e6a36a23654bff2a3a3d772a407fc4f59064c2e81c4213371496b7b8bd2306751d0c25c3230364850d1036635582637d1954d3a11781f327e00ad371e4509628a37569d0603d0e5d9d29fef818e5dd6d057f9c0a262953b8a27cadec9348165af441a4c2ad0cd3042f1e6f9305ab4e054b3ab38c3688886368af0a890963ac15fdb34101989007b8864c4954b65983dd3c235d6b8f322c33481586c040d931c45f0044e731593a16c141e524422d0e61de73c4d48962f12c0e8c1ee79ef198e95b7a63d55d287e98c5a50da1476f00930b94db456327e7254e176b3f6558fa7131f0a365cd8f5b042c9f241f6aecb75602c0584f90ad5757316c76ff9fde88d3977bea38db22a0d86c5ea5c74089745b7df6655cbe4c8246c9119c983015a249b648916f5786a2ee1ed0b134c975d6beddc17063a5a84c267f8414afcbeae702f8f0a8c9be4a21c4cb67c5947504a9c7aa3010d523c5ea12177283e4b1114dad56e5b013f1dac20cd540e1827e7bcf37621a5700e15a85916ef018bda5fb8b5a0c2865bdfa3f2da24bbdfe35fd2f1830e23e4fc37eac40cf85d9576147f46a9687ef25178e5418b8f7fdade3a9b51a0a5b5d0de3fae41800574eb964cd0d5f44a2d96816106d4e76202ec6fd56e2dc8fb2bb4517385f4254c724b9d08a325111a22b4d7423b153aa5e8158ba6a9c152d0f9b3f7c5386aa5b551a44241c9225c115a1a849a004d85f1ffbc25fd0add587e38ba148ae48936ba325b2fb3f9915572b0206869a82108858a2b6de7cd5bcb3daa74215697643a0b3d83feeed95ccdd605174e0fadafa95c2a4d34c4d94c99e09a2520748cb438bd703c9800188ba044a1a9fd5dc52035a62cc6b5d1a3b0ab6c453214c859e2e68e516530f6047542bc8df6185ac34b4e69a9932a19304c67d0d25d2e455a4b03aec6212a93e19a0a68efdd1a13354a23d8f230e25f5a9fdd37483bd0c31bcbf649884346ad6a6b5a9d5c754a3f2aebe2be3eccc52286f917f00d7b1ae8a5262c308dd6b22d7bd0afb05184c92814caccfd4124649a92c10dad871d083d87eb79e0206332f6120c03868b0d26a620ad24a1f8029e386306a51c0a4b465c643ee62df8550baea9ec3f07bc1e634fe52a4e2625c00fa857190675a7b3eedf75878c54578e8d98330d23e374221192cb987f46b106bd57e620260b56101aa07c4a0aa3893df0e252078a0749a393ec875208647cc6bc083d41ca54905933fd2f66d01bc97576b18a57821280394ead1e547d74f8a741825292b45230e54a3c93dc820a2e6d911e40d5aeea8c4babca8e9b54016d5e0a7b38f10d4283a67e4e09f82e7fd191283752a0bc53618c34509fe288989709d6ac0d4f93afced45b14758ef670ded51d05043fdc0451a1142d2c8daa112a3045b028081b22bf3b1d031f986869944d4afe25a0435d95ab36b7a4bd64ca1c93eded62202149a4b8ac98bd879a2dd345530a98c968ca305f5644711909871f33db7c69d175980b2a205e7de1e580e4a04e1a2e8293936cc2034224b1dda6fcd77f65e7ecd74b1667d54a0c95b66a07ed291d95aac62b118899e34badb54c2ee4a3502b26bdca62e9227ddb3b416e9136c469c9bfab4507075ff06a69249a136546ba081cfbfc0f983d648529f58485efd49eca9359e4207c750b9c86773d0c5a0f47992665c5041dc319a264ec93ce8c606aab4992fa4b83cb2a8246e7a7ae5cdb19700a93c3676be603249fa7098c7054168cbaf7a507981c31dc7fec407dc9faa57cf602ec01748d88c1c2d1e41e01959b4bead80c90a5f85db166090ce2135dcd34567c532d670f14e1015e6a9d95fab4b905c3e54677ef4d6506e9c1035cf07e90d78cd2b1f3518d05227ab9517a87f30c420ae825ab9c66febce55bcf74c8b1159a8380f7548cfb5457530c924903b3168aae66b83036a9247cdecb1152c74376787f0f9317f0a399cbb50185806aab6381a5a0e95a9df3e485b84b79da02c69dcda702cb8df4f7d3919a746b3029a655e1111131bdc42801179b381dd5b1da0aea9477b73aa9520b9865f8539826f16013d02af8f3a93f10324141c6b47f64aa1f6bd68133d14d8d8de751c95b0d5ecd4d8afe1c2e67feb66c9e79f7a9daaa801b45f561733e82fa88261bf37c9cb6eac2cbdf9a57d211bb4f754d2f807b33424f0719b893f9ef59ba4dca2073e190da5177ec1b44b252383eb4073e02186f135a17cf488981c486acb7cf323743e887f671a3ef3f271674d6a3ef1e473158857e396124b1ffad7625e10ce17b18365e49acc80827cded063879ece88548c10afa88cb4b343433a11e052d658ecc6085ff52504c2fbb85d9cc7d209e3313bf39ad6fc710444efe81317eea1142811609dbb290699f3c94ac7aa31d170817833d74a1557f60bd9e5c29d0038a7fcf540aa921521aa1761ed932abc6c69cf0c9316957a62bc91364c7da99cba0c0191224367b7919a15a58025d0f99db884a4043319e552322589b6e9f9589276d49f2471763c6569e77aff870ca5cbeea5539bc7e1006f1a078d2b4582e6d56b470635c85de6937d64f9a74d83ff5e75f6a11716f8876ab05382ccb3ad0e42536ace05b56ed67a7b9a220c8cbdc9da742edab8d52910cea621bed61acbe79127a8a53f70973da62ff7e204ef13688e96a19924ae1c8f243072ef13a418ab396c5b47d5d900a08f9667bd93d3c078703d2ac8fb5633aa0a85bd1b8ff09206b2d643d28bebfc10140f9c6b4cf44c1f80f5c1f0bae119fde351a5d254980d56805fff9ef2fc0e3287f28dcf6f3b334b8f0cb156399f806db6c9e107d40a1c9915e1b27bce9874ee03703061b66cc1025e80e0082c68eb44b43a6a8c4a85a864491d4e47308c78502589725969988a6a94438142b4ea9795fc9074657b21919e6660c85e8cfe3f69682642e5c337dcd0935e7c21441716bc05f50b1589432a3ed5b0a30cd2bc3fb703bd52957ca85e1e817a67ba158e790029726bca6516ef278b4d526c946c97f61350550cc5e3aa311cde78dfd6b073f95043b7ff622a4d2c56a0682c70d176a77dc1c8cfb8cc3f47705c3aab9699fa8582b94eecbacb5fc26ff9c14e82c96814fa466958078b249042cc5cb5a26d9c7fa93d648c630c31a81c2d9e25761eb0d765b601e33880c9c90e252899b8770a5b69c879b1e3f1c8964d8b93f112365fbefedb5a5fe7c86635fb68b4e51b8b41b6318ff538cde4a246ee66f2f3ed500290b36ec8f350534c27f31dc9a0bfbaf9fbc1f1ef6c88b629c8347bb923c13d8e26e1d8003600fb62610825b6430f58c2428c0ed42da963af2f155436b39e529053ba0ed73d38f51f351f440fa55870ab5be2178801649bdc2dabbc03744252c36938b6482dc4a25e35fadac458fbfa46bf6e45fc4c79c6d0fb66f772f75985504b9c62faf71b7ea827414c1c90f57d9c94d2adbbaed1b4c2914f512654557563f723eeb427dd7a091c0c9fe8adb724977652f11c2f24cd6d1802a6620d4e5c32e43113d43fe2387c00940b11f546b0f506f9f29a3d96daaa99cec40bc5c0f1571880e9b7b409ec2361d2860d547eacf2ff4ae51f6864d8319e34d3c75060c08bd267749bbb759884f777a6441c19a4c8b09f84535f4159b33ddc59e10ad344e8ab14983080c5d72db9e138c392595cde5341aca4075388271a32c1d0f8ed0d3fb5f9b02fac54c1defa6e633e119643fd34f20062cf3d5b45c347b8e79e68631a5d977080ee6fa32d3c303eceefdc50cceb64fbb411096048b154f740d173afaf75ffad438e2ebb14d4338823b4a17cf858d533eff7a0fc850b7a754b324e234f6719d1ea3db6371f7d3835fbae36ffd11e9cad42c584b3a3b77d4019c7119a0ed542af34812f816ed7436ef97413072fdd77869a868c76d3f4fbe03166a6921b7b9dc1a6ed83f03ff7526007e7bc3795961cbc46e2441393fbcb8d932e7019caefee984c5fe323f6384cdce714a8630829dcac07735f543e1c7405aa7901dde9292720704fc0d73df6ee5f8f73011e8e97675273229b4edbf459181b5edd0df3bab60be1bd138ea09291a5b872d73609aa16baf8fdaa2e744616840231503a160ae84643661371dcce5800f43ae3bd70ee39538bc3934043e955122b2ba0e80a74a1d98b8aee71f49856fdfc0e2c73bd5ed0996cfb20517b72446412c833265eb4797b4dd8c3492e9dd19e4195cae8cae04b09336d56b27002d48d9ac59b834d42bb0ce7b363074d09113fb3fbed81f14e00b8bd7080b26aa525c3a9a8bf4eb3909640b5a9fc9d057a461ce0df41bdfc778c01f094806a8067c190c6a8a6433628f644ac41ac22721d1e4642e4d15a3ae61f1fa16c4ab0de62edf6a4e2b9432ebae14ec98daa407fd64e0994337b3294864358bd6b73f8eeefc17db234ed86446228944ce8f8dc62a88e644609062db2af1d54ea95a4d7d78b6f806bffd4003648a637de8397daf1bc4bc6b9506ff703ca7bf8c4c1b13376a7bc9c358f8687f54d111614ee4d2e97e466ba47bdb52dbde7b42d7c0bd24888e888a448b5d53d9a12a62b7a7d2e9f6ff5f0c636a567ffe5cfbf346d95d3c2f7a4d030626f7c9c5b3563d948c9862eb34aae84ac24ff4ab69955d2bffc383859fbb0f9fbdd491f7874d9a521e6b0dd9f8bf61bc0600e27847090c14246304dd1b8b146ac91a20320f785edbf3bf24a07944ca2bd5f8770a6fc6a2b7549925518ccd32885648e646c65a51c34c3b85fb5a0d18d0d703d43d6c73374b4ff7dafa9e7394b4d891ffcf4f33977b577b6a75bcc5a1779b4c450cfe090edb8b05683b52cca232d2800bd4de9f3ec97b2d6ae502cb0121f0fae1fc04c33969015058fd5cb49f2c6310f67cdeaf4dda52e3a56cd27be99602e8a034164c79a9e933a981799db4a1599d2ac9cd4ff3cac28e6a2fc019b27fc68ea578d62f7cc7c2f0899155746f32c22f89c340edd0c5c9df886c4ecb3b00239a979ed84be2f3e2d3b1cf371860dad50902209ef31e736c015886893331f8c1ed7d2ee42560e0ffea71499534927a2b156ea5b3403a4bddcb84be6df8641616cc444738437ec8bd7ba70901d5aca4f94b270d882e83775234a1d498b32e0300af1cd598bb8d8bc925b8185ba61a33d852977ac0746ccdd576034040954a2cf5e723d44747a8ad5db40abbe7df2c02ab56ad74150e0221799dd01690888cd1ed202f312dc311e726396ac8c2944ecc5229171161f24a7d4255612db2c77ced384cabec1a7da14ef02b52e36432392dd6611b362787ae80ba0249215314d05f2b04007ba52cde23371bce2af875ff161eeb179f871130bcde2d20f9d8e27297bdc7be9b0f169edb9c049014433d366bbcbae648495f774212c1f22da2df003f6f7d10730ba418b4e6d679a0f82fc280499fd537022644bb0ee042fd00fbe3c3314800aebebd9ec82b46315a54a746350e7e5038de1886e536aad20ee6e6f551f68f39042987380f5d0f255c1e59580bb433eba7c70d019f84fc59aeb1cf4581399644523cf5e63a811096a08308b545b8ebe623ccb828c759a685962e299875ca435c953265938df503306197f9a1a40b3d63bb4a0b6ded86db8c5cc3d3caec9c06a727be363ca48c8cf956702c46b8ad7b5a24b256777b5cd9198ac64d6a986b422ff17084d68a020a02ede9910638918132a84b0a91522d915da8c559f1da45b2324d6f88bf3b5e5ad20fc7cff44c8538bcb0122ca467c0889176a19500c480f9205844022a3c6703aaf99a87931c0c9a11659f1a59a407f366108dd9a208a512240586a14d3bb4e2875e01949e345ce6225ae4c0b3c7a4b98a1355227c8a6ab91dad5ae63f6ac47f003231b82a1803fea5d0c8c3a738715731051335ee6e0f8cc79c3662fa9b0e086efb5aa46846455e87500f22d4d3e18116c4ecc1e99278825b126c35304f08bb3d8237ddd409677c59df7ba98f8113800b4450841afbaaa7414885ea5560d91fcf5163d83bf319575950f9da09a137f8a0aff38b381d37145214f5d2c235c22839c87654448fc9d280be2401fce9827cb8edb920fdb7b070ee90202607cecea3eb9938000c2fde48f1a0a042c0c26f81f6d0bfb295b00f8b7bb3f4fd39b0590190196ac7713df1f07383e01e89de927c09df2c2b0567e41a3c1a3088a443442dfb1bbbc4efb6b97509bec496d947782a016a3978282824acf5764cd5199d544f3754899848aed7901753b0c340a330f4cba3ddcf498ece354a25ce7cd6223e61fada0609b7ce8f45c134e42d917ecc77ac4a29d5eb56458716a5a49c33ceca3f2740844730a7b7300a1dad2dd3901d493a15e2ce2fe25c1a66c408164ce08855cc84ccbfd4c68479079b6854c31d0bcbef2d41ff80f6e3168b517224b03590b5779d7984c77fe3d34b54a410383142cc5e644cdfc42b29c71ab7e3dbc04765b1c25e1f87fca4fcb89d5815cea918e85d0e8857e70581fbd898cc6234f06d1f47ac1d1ecaf5374f2b0e6db8ffc00b49a66a15910cd83888931619f2beac4d1dc0613ac6be38bd0292bedf6f64dc467bd515f7b77a5a1fa993f0947cd9881cbcad329aabca5bf76284bc738a0e62a7147294d7b22da409239b32c24b2ec0a6e9f95e9858b13e5c85f7c805b76a3cd5fb3b057ada016af51f38a1925de4411702a7ad6c7a3f036da0dcc7249de82fb6eff81e84a5dd8aa20cd5f02ea36ff062d2ecf872d57cc06bb4da6dcbf02137c2aa2162fe420abef8eacc0d0a072e81704bf0d408a0313745a24524d230589d98518da20a344ac0fb7a81c972e817ece4b10e3c46c10093b217de755c85441968fb9e35a261d6261892d8ed3165c155b7fd32b317934c91404ae8cdde30953f7c5b1ac1a3b4180354a95cc20280d9980f91d9f389d85f142a4351dea9c1b9822763a311fcaa55667acf2c445d1cc703093b611a78c992670b21883a66b9d41587de4361a9ef1e4ec93c99e532c264d4cec72b223e99bfbf22df61ec1af2063c47873f066afb5a6e8fddb3539d01efbf33b213b02a7198bae81fee739e635e77192f60afcf1b0798ee7ee9eaa73826a94f5b6beb5c2efca88390ab549cf6b139b3256a4f0e385396c6b9f49bd6340ee60398658c65cd23cf202ebd2d9f93aa918b8828d64ab0454642b3c3cf9076324904da0931ec81eef835b55a00c5419334bb22d21905d22ef25696c8a304ca4bdd4f90ef14cc5cafda2c5959a72b31e9a8a1b7f6a6f26dda14cd09492e04a58389912c9355831a7c43ab4db146fa52e0a7f1b314bf5d58126482c69c35f45323472246fbb9f05bfed049523060e1e9bc67405c8a406fe0d3d26f4d07a1e43656e7ae03d7a1965fc1039f435b2834202e57a4ae264176961f5f0d5e22f75e840d606c31df131447f43022b95e0333f09651d73d21fb78954053cac405d59726585d46c1bdcf1c65c1f78b129aa881b08c40bf961a53ce65f59516c1f5f88b66d8f5047ab7dd9c51f0e57449e689a139f8eb83f6a2f0cceca9c759d3841fc7e1392f6e03d4358fbd5732902fcf8bbfa5bdc10271a5482fce5ba3a4575431472e09b3b14937d807f084546881704723a1ace4c2031573cded232488579206891ac2940340aea92e0643c26d362021b1e354961c84e8942251ce0f3190dc8596e9a78efdced7e88b9d37948ee810098249c6b43f43cabe52ded088cab0b2b29597c28614cec7c36945bc859d4e7adc88963e9432a979a45989e4374878a9f2b40cbf23fc886f30e8b53ee85574418fd7a98421f187b21fb1206a21f820686b597b03b3c032dd2f0b891f966be17438759cb9a34f21d0771b0f717949961476bb88fa8605a4251af841962efec65d9a6cb4474340c2ca9d75266e66357840f3729ee8dbbddd259c3ce20c2252b6037b2519fd6422c32f03bf6186c4d951b6ccaf08483718720700c393896de944a1b3fcd2127b2d43862b43b51efca066a50028c6c548860160dfc31952c3ccc89c6bd67682abecc5684b8c99a95993a32c6de91e6a0a485c035520fc3060b3ea6cd237e0d437cdcf727f3d0dd2375e85b736a2c84e81c13e0305e3c920e36454528d7f428a5745c81d76d003905bd074d9550a991e5aada82de2b9d7f3336de5536d0251330764a8a11e94c88ec9e36485d74299cfbe9e4fe98be9d3bd78e59dbebc95cc564f25b7ce13a04675b1b22109a7103db6bae7e7d86e3cfc67b88ab3d49de6737c0cea22ae046cdd86428d36c47333f6fb15165b9d75e219780909a368e201e8ea4ba1c0762d59881c2da19bb493f528e15c2413a97a7d7a6a5beff6bd9f6ac0d32a0b6e209be3fb0dedc6001b0b1b00774d68b94fc8b1422427c28f41f0b49390db48f0854206037fd741bc736513cf173c7355ccfa8d9f993633a7128071aa1561e23226a140ea34dce2347a8d700ae0a207bbf4ba1af90c6139a9c2daa6bd99d21a5958b39e46cc1ce4684c8ba8bcf2cf40109c0f15b48a023df1c02a3e704919a50fa58464b6a598c60f8b2b6c4eda4e0daa5718b73016d710d6e18c7de337e090321c9087fc70f90a2061a1876749e896849a21f8e8a1d5a80e4ae8b89d1cf4f7f3b067373e8f110e4440eafff17aad8254475071ef62c315d681a57ff5fd04c3030640cfcb738de6e463e27b1166f14e39f873f754a2992b7b6562f9db9644ad74b6789c4e0290935c526a7dc2e40752b165924c7742b80278cca9c921d07e93b4d8801095743011646d666f9327814e0beb252bd07524cba2f25aef03e6abaada91fe6fc3a55dfc84312040f4290b07797ddcc0f060cc8bcc88048aef7fd3eeed89b98b57d2361c57dcf40fd914ef02eff6c06edc51299ff47a88552e3fcff58b507c6f2898414acdeb211cb02c284f302c30111974473042895b042acb2215ed9ddc4bd284f0e6fdf7f4d294671cf6995c223f6f8d670a6f5d61c002719b4c114e9571c5282f36382a11ecd8638993bef6b117dcb5ae06daa80ef6a5b4104af00feeaced34e1a43a073d2904e3db128564b61c2d442affa47cccdf018d0860ec91182e0566b6ed4215cad61fbb89a1410951a2ef6def6304db2ef0c64d9b562c31ff9438ddfef93cc54391dc9f0402bd89cfa44edd0f3c98772fb5a13eb8fdb3220dba5faaa44bc93d30438eeb32cd1e268d65457defb690586666294a86b6b66457202e8bf55ae100bf9a425e472fbd9fd7973d9d880484023ff170f17d5ce504806482a3457a01509220f25745bc0a5167514dd4fc826fdc6b75ad270c4357d10e622226b7615fd60d8a7bb5af26135f998733866a955d1be786c9f0f2e526f510cdc53a5f482aa6666e4e90679438d728c233a1f9c784440900e5c6b1cc4f8c243adb0dfee3d68561b0d9eb573ec4eb03070f5c261349e9f74c78d5bc6f4b3569cd668b6f1eded56b63938bb6882fbf93e1f37431c7172ea3c6274ff37ef3ad37e47e42ed9806e449ba9c64915786b4a702d357940fcc89ae5a45898ed708f2d10f3de7d3001f7989fe70e65b72f0c85a18c190b05526e74e3ba36a9d919a244a4c7a44efe5055499316ceb1100b92debea0cc3a405444c6a7f21125b71e2ed7497cc82bd63e8aff86cfdcf023976c4f82e13a12d3400543a3d54ea92a4de68635bed3901426a421b479b52d7d049be1224e0949668555228d8d30f9167d983ffb57cf7498c23555efc2ef3e95a67ff592f158c1d0bd760d2a8e3f1eeeba20c2a7fda8d4baa37d977ac00b2fd12dfd3d5d8592012aa03a9df03158f7e865fc210e15a1d458d4618e22a3d31ab73779cf2107bd3845807a3b86b373cc235e8055fa260cb0dea0bcb619d2c64b268b7f803b8aa4973f443444462acf708218e223ce31b4026b9af2fb152add6f1f4574db496f95bf9ad8d509e0cff6539c7cc8f472f92a863a97ef4ad552ae62a56d73b079a54aed1ef5e2267ef4026be1d436f41ab883c3e3a6507503677a3ec676c33112e2f1c502c485e62ef82b6ef146cb5eb98dcda9e68a76c3acea61d92890dbd5028af2dbf7010ce95cde1a837e42a5b6c558f1aa4716ec231a0d5decd1145aa3b1a4212f772d9f297260e11b9d93214cd0f0f080cb7808290f1a2c5c85fdb1a2ce7a811372f076116034340870e9fdec5f93d0dbd2d0ea5031de26398497353f09cb9ca624a8836d5810c0303514d9fc6fbd17165c09959f9e589e2356cca2aab5f7610d1911bb7d267f7ba3f0fab8222b13515794946b288653cb49d71a01c38990cf816f43f1981bbf0e9abb585522d06853f10d4646dfc8b3b8981b265897c080bcf8c73bede91817a5c8cbb1256b936386d8bc50314e1e9b5a4142c82ceab88a6847649814070123febadb4f214fe4f520981fb15574c5f9f7cb929c92b5bfc0a61dfffefaccaf23fd36502982035af9766777a18e5e378cc6edff2d7455b0516745a02da7a6431605fd4dad44045a8dc658844b49160bfd00cf80b12226ea1f3168b79412d784b2b732c244818bbbdab4ee59191056bb627148797a1d2f31b028f30b80225f830ee37b7706918ed61820ed4ba3886cb737311e5a66e62926e0827927121a076630f9d51ebf7568aae3684a5694c108f351ae6b743db73a613ba791f824a5b565439bfce2f29895e65eaf19502e5f74447509649111e04196006821973e52ef78363e9d7995e86f69a7224f1fa987ef1af01aad41b3c8ecfce2defbb59ae282057150609b4ebd3591a6e24e8d6e4f5da17992d679a24671c2288ce00b188a341c94be8d390d164755ab093ed651dd34c68b9206bcecb8e5c35f5c99015a50f3bcb3946405b599c31105fb169e0d5ea7211308c626a1707c2921c10445eb52c250b10ff12dbf140949d9c1b6e999d1d21028c00ffe4f37c30b9130665f723c1f3e995ad4dccc5ddc27778d85fa6c19274bcad741f99de48445c3d7b604cfa6c6d811259c72ca30ebf5d4e40e598417267fc3f1109c4acd23eb5fe019c28ffb6034874b2fd0b9e2c4a30f7b466f5863b74dd2acad4b3317d6c4a807d9ebf1472d730717c703d753437c77e94347689da52f384eaffbecf92e66c18b902b44ead935ecb0214fe0f46cfb4cf8e68518c1dde4ef4c7f814fff2f69e523a20b6cf431b53fbcc21b47cfc40f39d50cac8e532cf4d5625fd96cfe95d68648cd1a8c2e1b36843265f94a36d54ba937b254820c29bcb4f5ab2703da62e70c078b43f66cf760c5d9cf92c8d046c78dd7b710e57691d072ce5e92fc974fd774c7f8ad4334c386708f3216a9e514f5a288ec5c76dc32ba5f939b98494d0ee5dbe9c570b8c821d4d6919169790c1b679fc7edd182ab2cac1e5b0ebab5c8914c55819e7b99e022579742a100861a411673170bb3988d350b7872020bee3f82619978bb673498184451a46f684f2348741841e64b0f2deed5d2405d1ccb5a8f79190fe434a0c1c0243e291339c4dce8c745aa29e20ce30d140ba14d1d235a6285f97db1c0d01457914abb03eef7835ec542a3665bcbeca95568d03f3e5bf6dba2602402e67643bfa4f8293142cbbd7f748b4737dfb9225a096ae87f6abc331e6e758a899c7620b480cf4e81b18352d930425673f736124dc40653919cfabb75d3b04e63c140b2ef567890c53114df62a47f9469f47fa54843903382e9c9e0162f740d03c4c88695bf94725c94690a173ebbc7381b3ea1556fa3d8cd7f1ac5d19427c3ad79d621025d1d35fc3a90c0c3ee28628c9c33253c157a109e299435119b990a4160a7de360e2a61049c3930f6c371c708dfb5ebc278eccb22c80edaf828889fe477cc7d63e1cf662cbf2d80f2b5996ab479c28060d827321baec0309bb5f9f9681cdfe5d88683ffdc180c16fd7c63f5ec6fd92337c7a46ef1775dfb4a8be659e623089e35087540fea07c0504831b3284427731f4e4b3dcb8203d57954b300fd5b76d1c444f16147c171e0ad8c406b0b0c8a04ba6ca1877cc83310a504e49b4e2ff352ae80f67dbf6551a512ccac8b8239cda5b53a62c5d0def05dbc1a489f1049d79796a901322a08cd44160a4bea0ee23292b0d943b293ed8d0caa9dd206a447c0e6d7f345f673bdab70f7c83fd97f5ecb87e363b9fc837504403c562bab2bcbeb74bca54264796345a432867e73e458b41923145b1012f086c77bf3c9bc70041c8d3ce559bf712bb5b08a28b655618f936df232b22fdfe362caea9700c7a9419cc3b80629cd510bd8cbddf55dc79f38a8ef6523012d767f6b8364ff3d332a640d5c97e21c16e2cc91fc46b143b74151d9f13d378951b0ee1bcf32cb397e06e6b7d2f13f0e68183628a0d6dcdb99867ecaa42b26fa3094de7cb654cc7e20a830e6d28eb0e258627bd7b0a1e38b85b70d4953699707099f4c69ef1843c27a30c22f0a3c6d58e376428e02f68e8f5f16a3989a0f2f3ada39b92097a51ef781377247d09b86a8761dabfe26cf00cbc7903779ab9675eff7b5aae1e69ce29acf38ade8b63d75dde74694fbede40bdcb6db5cfb011ae8897811b4e44e6c90df3f5b700bf095df8dce33285ca2f917503d3184d70e0c6e4ae6f4ba244518f145c656afbbd69b4154627211227a08195eadde689da7a8067e80c8867591ae1af5ce435502d29f57796728465a8f82be9eb452ee1c68e7cc6cd2f1218d2f5eb6c53f7dc35ce8e1d06561c75a4810c3c58b7e6aee3ee513856a44258d8f500319e856a9c0e51d547e440efe434b091803e07e655b39ebc42383f56a581d6318c51979eacfe8744c5fd4da80cd049f28271f17c6524341784a4d2c65f273ce5bcc829a02173e570b666ba7081875468baf9bf8001a8e389abebf2c664932e847305f5e7442bc01a930a6c1d8fd02d4667cb44a281f28be40cbe5a46800c25490f526013d9d19ea6956c2431924f4856d3bf97764e848af61e7f93401dc2286205abfd22bcdbfaec7ec24b4cc5ea291af8e2284d8458ba198a7ef6d8779080d24c51ef044c8128d4a8a0b5558cd99b8b492a2424a0db6a56ab55dc4c709e263dffc21a8340c409617e7edd465445b34e431baf827db37d32d8229b3264372ef8986ffcbd043be9f85341c5028ce3e25400a0507000d45ccd58848255b3322e0c1a1e5ca78df9d4891e4343d52a5832ccafb904a7606785e24d3f8aef5ea3870ce2edfcd86b63780b3bfc5e903638203a6e4afa463bc1ba5e570575f514109e5da485c1d136059d56414c79ab0524a3385f43bdb82a323647beba970a1ad0ccca158dd4e4077daebd287c64166610845d3996561da58747c4e40ac04c28787fe3800e875e85cbdcefeaf472c9dab5152916c6a16780caa9ce6b369d3370305458778d715f803453b6cd825098701a7c1eb4e84f5f9ebe88c75d3a5d2f43779995b888678475129cf0d39a84210906db3777f16730dafc1976f72f9c938fe67183090e8cf632f0d11ea45ced8594009c1fe53a362472e4db9d54cc75db96671137868b31ef4c7ecdafcaefc99f9fa8a0c217b5041b383664666553ccf678e42db2ce236e7d4813ffe1f3b7072ac73dd3a05b6cb16736f250d5972963c1c807c0fa03a108f13e9f459784584ea0333026c36e148d29cf4c413930c6803a3dc12138081059b52353c312c2ac48443fded3a6559610482de5bcb6292daa65e6c24bc22974762a3263cf21b03f33b6980b1a208f4ce7bf34b30414cd6fd32f9d67d0fcb2818275b1500b240b45c68e2fe2546a38683a4b9b21b8d26fd48c24ebb0e5f2e187dba986cb5e345de5e16c393f9595dd597b08545ef03365b570e8239aaa8fe9b625b0bf12bed1438dd8de54b544090cd01f4f97dcd79046aa2c762f8cbe41b289e3f81af6752362996b0a8680e45478489b2d869b2e2ebb32163f31f845524d5dabf5fb0822e7d4cdc7d524e0807b89b8c0a2988211ffc778552b8c0f7fd499cbebe16631f9792261307eb367c3057882759023024ff345eca56b82573a66e2ca62ea2d3b575290a02f45fc8a73a7e46ff474379c2386e08fa8a641cff003d7b9da6cfd0ffd17aee59928c4b1db48dfad2a31c095017320b29b302687b29e8db543d127720f9ab85009e4e477087a00849bb5f911f2ebbf85f74bad18bb75c5b4be3d5e2861d5b46ed27c44eb0327a7b5212b9504d042032228b4ab274052960f4cdce0adb3e2fdfa019fa2b6e39fa7f19680c98dd30fe662e02a6f0c2ff9da4d1c867cb976897bd3c3804c1ccf4c711439fe5e2fba8324080d84ea050bd77c500d13ea03b773501b51fd7d17f2d0df360c8c6ef53f99eb3c779530ec8a7f273596fd576bf836684448f220e3c699b6175b169b8abec35193b714250c8d5894bf4680197773055bab167146f09a8496283fddbbb31d772fcdb2c6a1a138423727a3d30ec8f89264b9707824e3b1e6dc9a6362bfc9607d88f196abcd3c3b234327d1a178f8b30fa773c833569a61441f131ec2e14adb2c2291e041bd88bd248c95e377c539ea504f76280300eac4fb05685c85dd70fdcc70867669625d030b827a09fe9073dad116c40d282425ef84a01d269407109777cc5d2d9048b4f95c2f210ef62f762e649e541fd1a7248f3fddbfd875fffc71568e79618afd4e11c80fa16bd1607d6941444dff1bd7b4fb1397809bd8e0369e0ee42010058a4f5c6f0b58894e444aec6d2c27abf61a6116baccf4c59f2c0facccd14df5e1a9c88eaf3750cbdabcbdbbe9ebed928120d0ca9dad18b671ad95acf19b32da64015cd2bd48d41dfb43135060017464e2ecd541d362af326ce74ce6d0c8e4ef4638d9d689b8b37ba4720f7c9e116dc2d2c23b21b914a0314dadd6f521b79484035c014d1f45360c49b45a69c3a8096ff9162609816cff6097048939ab35e57bf53896416821ddf22f23fa39d6f22bacce99d52d254b1e07d1e087b175d04b1afc1d4f7d7529ef701a5487d0ce7884dbda302a80c82a8ae35afecd0b3d1c3335916a013ed187d83782d66a68f3395aec65b1c891bda7292b15cb98d4adc11f6878fea197e05452434c87f9150fa9e705f57df1f02465ed4793477d7ea98be04014832e70f5ec92b34d6c0c37ba70fc7abd780349001d48550bed5dca1462027de042dd68335061be980b992cf730866b6974d61d2338a0d15028c5c912ca1de718e0cc9288b5d4fba45eeafd00ac0d0a28f39359abc36eff2a4a596aebeecb55321f4694ae43f1e52099faedbe143a9e27d5ffd4596b210db481b0835cbdd5ba7084ea492620a477b5ab94833b55d88bfd3637cbfb9f9472ae066f791088e9dea517e5cdedce31116b3059839573af4a027ddae1c4ceb84033d1b94eaaf8d877b1b04f687d54f364a3e2b4961cef8e12d6f154447973afd8a5c2c51c0f68003095b37a4c77808d91b60a777ef6fb4a6e309c4a4cc9439f8d932987171fc4fc18a8052a9ce617378cafbcac26bff8278822f0f6b0f4402b78a50d2e6952902fd4b18a5c2591325065f9bd1172e91dc1d358506d6fc7e47bee0883cfb9bed6a6ef91c5f0a5c3d0d9138fbcb5aa2d046877c350e0efbc0c15788559a826d981ddf5f735ebaaa148c2c8f6fee98cc73f57eed5991070c6c8afbe68113cc687a4891d545ae98c125c5fcad66e3a7122ad7e55021d26fad5e00ce084a26763af244653a92b3151234e35295a050191377742b6c421c730f05705a6313a8a8ea23ccde173dd009d95b01955a1b880221fc2fd0a929ba3bccf02b565fe0c9a78bbb4ab9b5e9d539893e3dbac1891abc92e2c4599f04248861a8d627c3f7cd76fde12252c2723e041f8e82eb41fa51ae04ca9999e818b5c67043a320b9e59405a59a5038d9095ce4d2f67307a6aa0f063d750003c7197aa289b691735439c01b5fc212aebf5a052330bb86ebc81db37168c624715e8b5c7abfb0feaf9065265a68405d0da2b0d81629089899584ecbdf7965b4a29534a01f509a609a50941d9749ca2ca158924787ad5454d80a894e785dae32340d4cbab506d23bb82bdfa6824cf6e394f2321ea243fda6312139599ac0be830dbc29ef92ecc8b1b8181ee00d849201fbd8308f9d875517becd663dde584e7d9ad5ef9a07eda33bbc0554167695584ecf3dbd31e67104229999d7cbd72b2328a908993561db50a3a6c204b0c59f42437321938ccc9c30e4684900c09f9294224c6de81871d3a92dc20c1d45271a66237433e8ff6600761642925cbddadc9932450abd19e8df6da37a699c49c5a9674cba16561324b59d70d9903f5188ddf907215bb45766e49dfa38f0f79b4574150bf5dc91b104646b7b40bad2cc9cead93a3bdf61d6e18a93232cd6317bb057ab7f0106f00d58fae28cad3ea4985b3a008c9e24f922810794ee2378868f5d96ef40542282510f6e9d15edfb00edc81871d3a1a071a3ad88021231f762c84e645a77ecca8674f41779882dd0c199b9b3c794292df27bf4149187dc6e2b5e742945ca67d933c95f2f05f4a3af41ca8b75ca649dc8e7eee248973a0fea2b9b497d82dcc9e62874eea52dccd90b24b5935043087f62c1d3c5d9745725294360fb98fddb27821b37639bcdcba8428b92c79cdd24243bb989722d4f6efe5bbbb18a5a7a04f776b720a76da9f7e1b80437beba919f2a1435fd7f807050a429880f3489cfc0621f9f11f8b678ff90d4252e4b3dd6822a9a8ee7f8d4344a5f1d41dbb4662a2ee9321db16355b7d944e2a450bf0d710d4cd499e437b6bcb4a4e51ed492f717c848d04a9de4be95711200e22bb4fc596ba8f739e46e9d44bdc534ad9e772e9f584622139e619895bc738cb829a934aa592c7d82f75a9ea384a6e79c92daf7e6ddcb7e3372771b544da6c7ed3302cb6876197e5d329b5d8a2d6d0444277b7cd431a6cdbbbbe87e6d3a2ad80cb65b41cc2e9395029cb726bce283908210ee8f5b3fad07d8390e8bccd5bdca7fd8ebf7c72df3ea16ef31797437bdab93523f30fd1aee8e8e407e807a8f4734e6e5f56ef3ed473a5b08515403dee7f29ea24dff648dd6793f39be7403d2945bb19f2e966a3f39b97b25537e638308fdb865930538259949c725ffc926fdcc7385fc24a9d4c5b1bbc9854721c24875e22397452bbcd53eed35e5b3de61bb7b4bd4d7b2db3807c363e6f591df7d41904485a52bf5384124209e34eb62ca42ad4cb3187de5e7fa8eb593da154b44af3e843ab2835b9d1d0cda38ad7b6ead13321f5b379d2469375a9148ae3b09ca278e6363f67e53efeea28de2c55cee62577d580595020bfb90c6c4f6adeaa6d338e424a3bb678b18bd314009dc4a4aecbec8c31ced97d3b28b5ba1733b6f838d755ccf5e827d4f4b94e6a2b888cb4a442af2425ea773a552e76ec110c1dd181d5ef111c40f2bf4770c0c84352156a33a9b2472ac6fc0b84e9c1330b5bd6b7732b725b8bf6a06ff7cdd9bdd8ed5a04a1b6787fd975b82b65e963b747782004bf5b4de991c8484ad4f66c0cb07ba876f318bae7e808764bf746e33b24ea887a4201605754a0ff53f1103a5501c333545b17ccaeed88a0becc219e3a30efee076c66a643ee03363396f3e6009b190f4cb75ea4d7706939ed7a40b77a449fd36d66266a39140cb49d8d064e845d852deb3ad02ad037bf8e7946c38652a75d6a7b50bf3a9bcb3df7d74450a95f6e394651280bcbba8f62388fed6a5cff6e852d188643bbab4b2df51a975378b9e53eccacabe1c3d5a5b64b39603af51ad22d976e3323d316e69e6196438f807539ed7ca07e51bfba54e6c3e55697ca76c692812d98675c4c7bd817f3986b3bf55b231a962f6c869ad7807ef9e6fc34731f2e87eec3105b57233a751f606abb94d639e072e8352e875d6a7d26eb6a508fee43ec52dbe9680f731eb005d358505359d6a51c70b9e511b8dcea7c18a20674ea3e44b898af85753878470bd9b2d09df9ea36fdea286c814e399e4921a2f205805e3a36816a606e753d3cefadc6e5b3ebe1b0053e6067504f98b9726040d12d1cd2630d9d1c852d95b91785f469e07757bcc06e22441091849d1d9f9f9d9f9d9d9e9d9d9e9d9d231f19c8200943432b218684181a221a1a221a1a12fa590d0dad5e30f482a121a2a121a2a121a19fd58e1021f366e6cc9b797354b4742709ab95d18fd58fd5aa68b52a5aad8884961a2581073c18320408480e0d0134041090101090101010119f2123a38fbe1190faa14e464647464647464645adfa4e431f7d5a91d4769bac46c951b65ca3048edc6a941ce9a07ef548a504ce57a3e40957a3044e1135fa1ea1e4c9ef16a346899baf2a9b772570b8ab5172f47d8dc55ea3c4a855acc448c91325986b943c696fbf460939a4c44dc36c1f358c1c52e28495385162a4c448491339a4c4497b42ccd528592561892c1ce108471c633f665aab8ab8db86a666c07dd86db3a335e6d86d23e5c2e55ede5e9642884b68c20846d826b2ede628e5a4b15634526a5ad5eb0a826159a669a8ba2bb68de6474622f5c4286d3459953243a1a68d26c50415769f1c42e4a4a2c22a2929a7d346a3320349a8ee114b70fe2a41c580da832ebd28052a458a1428565452a438a5a44891c29402a5a64891e2a2dc00ece3673339ef25f716017ec98e94adaa59b2d3defe929cbee125394b7296f02c9172094f7bfb354b7eb4b7df354b7ae8929d86d9253a4b7496e42cc95982d3ded62c5992d3de3e100a18b0a18771ce18543ffa981045b517ab507b1de94d94f461ac141bb26e62179a28a20819022210a10a5818c2109a14fd06612189df202c04f158e7fc06353942e237e80a485e4ec8bef1b38911ee4b0b6769550711d22d907dba85e4b02375a96dde681cd56847ac9fb82877f2a9bccde09b9bb7ba480f698fc81686cc9beafc039d8940671f9527d48f7da414ea87e27918bfe39cf3b434c68e373132c7185972e4200f997dba05323333e4d835db6c4d3a411272b220442984e91fd1e75b93a86d7d90e4218c3f60e42911a17ebd13795ab5bd9392d1bfded9f6a64c7b30b6d73b10554495326ebc8110c638e7c6eded96de5d94ede873c92063788a4cd4e8ec352b278f44d167037ba66a7657d87ccdca49cdca091247cbdbb7e36757b37252b36af2370dfd6b564f6ca665d5ac8e6a9644ad66f5c449c3d4af59193de456464d5a65f3fbbdd5ac9aa0d4acbe5ab332825dcdaa497bfb960a9020ca4acbf2d964481069cdb250364e0089361a09082894f4da1eaa086ba554d9fcc73bbf4147843e7afd0d3ad283bfe1ad01d6134fc4d39c2f2d0ba5049fdf2024843e3aea37e8880b7e3f7e1aab6ce2ceb09e78e28932c45944e66df7761f7da0162232240819b4075a4de1dbb37d89710f8632c7025baca015c5b743674175760c0695dd218c32d8028fca6f9016a6f02a433c80ba626405289248242f5512974367505c06c2683fe016ed070ba4fd007a759b191390c9880fea97d29362c8d5287955495203c5495eb91ed54b2a48dadb548d52f592dbcc90b81eb44bd520a138c96d66b21754d3911c15547541fd4c47df283e2a105a510ee4db578e6c3d4a5e9dc4f520398aa712445df159099205be949485da4eb5ca7df14d1d0e4d2ac94b7e51d7b68bdbcb51fce439b437f98d5655a7be030fad4a71eaa72e757533e45f7e755ca43dcc590040d414bfbc7ac6c5d8cf6aca4ca929355ac565ae790ed4578f1b4ded525937437ee659c7a33dcd637b9ac6516faf7a4a47dbbb368d3bb547811ef3ca7d2c4fbdf600875631114d73ca3fed6114c5a960523197c1b0ebcafce2a13dead78df6a8f7d4bd18a79e61de0246aba8bbecff7561580b80a742e874638a856c4b4cd4d85e2adbd6505a25d1a09b63f47a8ab107ca47c8b693f4eeaec5db38db3731c9aa49113402e11681ebecd31edced5aa77922748b639e95ad73c4737ae8437f8546b042f901f61b348404292081bf423b396bc4cc37420c3bbacb9612aac4267eac843da77c69d1de7e1a0aa02e2a024073f67b85df6ed48a995062f4df0e99a00ab8414a8a7e89f8f5531190dfcf2d0821dc68a2cf9902c84692182674fedb210024592d84104ecd274f67d952faa4ce107a2714e4ee81bf5d1bc22998a8ebfbdc84df2026847cd45a34f1eb2e4ce0fcfacbc6fc4208a1842b5dda5b97dda916d52f6aeb427671077ca7d0a561566e5ac8e060a30a4c7e23904687ace0f3fbe43f965d26bf3e25646181477e4fd589eaffb9fcfa8b85b17c14a1e0c8880f7e3064661dc6c2b811a640e4811f442148929975b93845864cb694511bfa2af4c8d8dddddc2c2f2f64305969431ec7861042c8db8ae5e5850c263fda908a163c65d4946831c6183b21d67b3bef162f51a1eeaeac90d1b4b3678bedf0124f56a8f9d41eeff6b0818f5644d5fa70a7b5732e66c44d7a867d5a0b77b2cc9901c960a751a36130bfc1be43ab02408521ffec3b1a06ceb05f74aa68c1d0679b13ebc2baf5c4187e7d7296151d46c97d3be2b7c3988af145c35c4630683c3b0f457e9670e13fed770914f012241c0086cc7059983b547b2ccfbb2732d4259560653505219f879ecd2063b051084654844919728969957cb824e7e1cb43a802e132d43e6da5cf07b265612d46a7b208c2a4d8f21a56d76308b6ba1453ef31e7bc96c87b1f3526665d48200a1fdd89a12b7cdc255ab467cd25924432e785c846c3a08c9e07e34cc1490ceb2cd11aed9398b313f322c6bcb49046dd720c3e1f59db4ffbad541249a26e89ced1b1a375d11e2350b6d3847df271080bc3c7ece6630ce2a3633eeb427a8c2e8da41379249fb46fdd6373adeb6a9034275d44ad4ad23075992503bdc543b80833cbf6556cf2d125101c6a9524924d589594c27ad163648e2ed9c77bd1b84c4ac18888fd9347da10db306a2d9b4b7137b5266269dded855dd197d6a7670edbb8db34e6e4938fa42591a4935d11bdb9bbdd15dc797bd13f6e1b894422f956628ec240dba99f349247b0253aa9bd5854f9fb35dffc6bf99675219dd81505e817c1c7e8e2a3183efa97808f462ced45df38ca1cbd319fc8eced45ef1986e411cedc893e7ffcf8f84d201f63e45189d36706f9e8b239c6e8990fedd250f6f3d282301b77bda52dad246ee6c01659c3ced34ff142d89d97f7b46af24f11f5867d264ece0fea2a7ee2748bf44f5361aa4b05bb7943ea42950e7de2703759f79d6e485ca8cced1144763e9b9a258b38d9a43d23e9a43de91b278fba457a364367a47ef3c6c94bcf6416e4e5106cf1a1c2eabc5c65227829b31effb01cbc6c97d2c2913e7520ccf4ad41f26d7352c71dc94bddce0953a7cf4f2ef9f64faeac215ca4869c1a7e601bf8670d3b7f43007e7d1f6667e493972e8756ad92452da9b02a8985f5a44bf9849fdd17a1f0d3bf8582cf63dd17f3e3b950898555fd4d51ab78bde93267721589cfa836b9d3fbe0b34b13f219a64d2e45059f651a7329f6154a82d1af90125ef0934b71d7032cc3cd4367f1aacf34300821b269f30b4982c080f3b3eba1c75f60e57790b4c9999a1082cf4adae4b4317c56b5c9999af80c4563212624f1969f9e7a66d2268721e12d9f5a865da72591dab7676e85982084b772745ec698cf9dd64d9cf6a4dc9ce4fba5a8c185cb1a6a78e97be2c0ae902e7d8685d9edc04b97293e458aefee9b2640d9e9e3658a9737bb42fae5815adb934ee2e88c41ddecc60af2d331d9033f31a58a99c3337de62ac93787bcf49d374a08f1dfec79e9ebf3df0cf272febc9c445e3ab5e6a711e126686fe43f3632393eb52afb49d94236a95f9c655db4eb516968d09dce43d9b2cc8f44bf9b9a7152da7ec508501fa0d3aece700c6c917eb90c6438830daabcba548d8e422e6559310d03801f191c6cec2037c94b6baa248b8b94d22b0ac2409737b355a75f17428c325a3da28cf6a6978a90813774b48afde276e0e1ba5eda9bd5e2e4ec0abddb6187aa813974d8d545ed742cc6e952769ff69a4b7bb323a27e2e3f5d0684d916bab12e267495ff249199f3b38333d820a3302ae69cd3592789cf4f179e294c7aa38419a40424339b70c2e9d492a8e9b308d16723e152b344fa74148469873e7dee585fc8b0ba82e2265f6ff2d8aa3d26d60d6a6bdef457b08808c9d04a6a30eb841dafc5f7e2e42e2f310bd4462697d52ad4d81e86619ee22426951df317babd789eb7c7ddd05bd3ba3ed21ed646dac34a41a0280ff3ac6bb4c7188daac23b1cda6322d90f0ac2f440e1a8e68d06056dd9ed2de5467df3d3e9141d07f42b764be914aa5095cd379c13c74336c5338b7fdae12219bab9b9e1c00ce62c84081b69557ccc79a8091685234c0a24f88f8b7c50149c3c1f798c913cc6491e730daa3e0a8b1ed31c8781b487b589339196d436f298b791166a9815c71a487b984f7b18156ab37fedf398679b66e22caf5cbb0973b9d134e6d946c338ed615eba41fd28c95988964cd70b3de6dd8275a139e6ed0212f7c5c7fce27a05cc02f3c27f0c44eb5a05bb02f3d2116afbc7401e73c69c3167ccd9876dd8c7fce31d1e8c7f3ce699e6996f9ba66d5a4779fae4041f448ff26b840f23928613d4e93b9ab6b7b3e7ec78b4b7b0553e5d9b994e29b70e379a598d54fe4d59be9eb2fc5bcbe54fa773f6ecd9bebbddcd903c64bc3992316bf3061f21e29716cb9ec73ca0d62d10c53e9dd99b07441dbd89843e7a1b31fae82c30b007b644a79475589818d8129d3259220f0a01c5fc2e6c99dd87024ac141fd7828e5a7a6045133cb270d40d49e396df0c043871b3bec803df007f469552fed21a0c6e1e6ca08094cc2a4a849ab66f7cc59e408f4e19f2113c8c8ece08ff67a9afbb42d0581b417a190ff79f2cc3e3906c2740f6c41a16a8d31c698c4ea15f01b94840d3e63d6e996e840504b549987525a2b0ae5014578a45ba23341257988e4a3d3e9703610e6ec1fec11001075892e873d10a6570dbb25fad08b90f735901fa15e2aa5dd4781bafbea077b3ed8f3d14b4d5418a347ef9e56c92096e50364c88ffed13e427ed8090e0f50efb44a76f1894eab28ff20f9d9494ea63d86944d01d0a7b7e41e300bc9511eb37db7391bb24723d9f68bf61877555baa41fd4ed063acb70f3527955fbc18820dd6611df6c13936d807eb6841a7072d6df8601b74bc900283210009c2d98c71bb076e5f588a54da5e4475772f30045d81e0f2d262476cee01dbb0446213f5433d03be3dcea0a28a64ec5cafb2cc231956dc7d3c9eb71aeb25e4e10d7ce4985bcf76cb019a8059ac338b5e4113300b1e9007f26c478f5c6c2f1a35554184fc72b07cd4c2508568235f3812af1fa01f1a6a4637edbaae8b5e57365bc6cb2513435ffa0d7a32e40b42e2178a30a1c91be0b708422b78275f8ecdb5cfe62f8725ea1b780d6ebe9bd665be713087ab06cc827ad62db3c81c72579087ae519ff6e0550366012177098919d5e41623928aeabe7499ce817ee690bb84c8c01eaccf32c86941613812378c3ae4f8079d387c23c3d0852641bf415d00f24fbef0a37ff80d72a2d3446dcf4abdd33d43489e2c117e839a40e49b10e437880945fe631efe1a0944e140635dec0a4844fd50194b8be59efdf5ed3e7e72c3b32828dbf10f9ef6983d56e12c964f5fad6e5eb5f6e2a954b9fd6c1745f3f658050be76d9ccb0bd7828b79212383c3814687ba42e58fec83c298930839c618494d90ac50b1b853c6d8f5ce370fa7cddd75384fedf16e572b5cf8d528039753d11e8a88fab9b8bcc061d7bb1718ade29e8f37873659bc1d49e58f9e4a4d972fdd9add0cf95ce4d9c8b733101bf9eea60b200b11027300696f8518a176276d98b908d996b050ba428d9984d9cf25c7cb60b46ab9e3af955287c11de75020eab7463cc30cdd10275fdf93ab389f4e2737dd68d55e14c5f9d2ae8d06855f1b4d444141718a8282a34514160a2ac54693a24ba1505c1cebecb4b7710e121565fa76f9ca8aa3fcda68505d6aa59b217fc5573a1eed652e5397e34071cb2f14b71c253a9334149eedc63958e5523212b7b9892b3973b5d37114b52ba328282b59868292a1b84caf642819675f8e7d8292a178adce1c8a5794ad2ed3d01483e4d5798b61f20c853bf9cae5321005c72283a3514387f660b4275dfa8d934bd7ea499248180a0a4ad783f5a40d3cca67f328cc5a2591485e397652ed5aab934e45ad7581678d98830163c84c477b260ec53907baac15ca6f8d2a60f2baddc012b71826af4ee250ed49534a8a7ff5b3948e1d86774346c3e8e816e972895e7aa6a3c73e0d1ea82667e71ce83c2612c9651a43716c739936994c2693676ef2cc535cabd549a414cec4281585b3f95ac29c3127615ac6dc53a9a62151a3431f95560981f5fc34e458bf414900a1c107cbcb75962a1d256504b2deaa68921062bdfd0ffe37101947272cb823ed0a2454e8a418d129eb60d695e29777712c16a9898a9f3cc5331515151a356cb40a73cb55ba19f2555ca5d3dacbfc443a9d4818e64c553818a7935f9e03f52a0e371a952e75ea66c83ff9a9e3d1dee511a670fbf5330bf5d64ee12da7ed65d9e9d451ff3254ab486eb90a676955c9ad46a9685575cb9fe52defad7a72cb77a3690cc330cc33c73c731527edf814ec3a7126df2de5c4d97c8aa9fa555168abb676dc439d94f9e5189665b53dcbf28b5b26d5a2945e17e65796759f8df62c1aed59288fa5850a7779f9eba2d4ea70ec0a4b22db1655c5f9af35798c675c8bf6aeeba27e516d05c5955dbeb989fb3437f98a8a67590a0abfb1030fad52f10b45f5537bd539010051553cf315d7b818fbda8a0a545951a9d1aad57cc5e146b3d2a5b46ec6b665dda56528b41557c94c1b776aeff214eeab5f7de5caae0b8756d5d85eddaebd9ca572f587da9e79adaadbe697b7d8dcbd14ff5efe6af1977f317f9956fc72d3ca67f329de281cc78682fbb4cf5c85fb76bc0a8a2cf3ac5556389b5739993c33c5b4cad4710f0ab779a66d9443b577398953716559c643d6dd68eff2626468305a95b9bca832bf3ce32cbb32220cad3aa77f762d5256b24a19098b813074ebbeda39393939b4733a07c2505a73380993cee12d467f47ae99e8c5d321f28a8988622c7a26222292a9428d2426757aac9b6f739fb479e5faa615109d393e6a2ffab6f99cddecbd6d31a7737a989fa7370f90d669d5feb67f04613aa75ba26f471f4bbe59a4acd4d1ef9cae5605f8bf986da3e99c86e199a53423f554eef939db180893e2d4e4266e6fea76749dce61428d1c4e7510f84ced86609fc1b4d1340e36947feb6ef2114d0ddb129d08ab8fd18a395291f0f4fce820423a738bcbac4bc875d560bad553db9b4e29695b769b9ccf38cbaeb8d160fcc433335ba5ee8cfbf6c967256ebb33eceaf8c77b692fd2c082dafe79b47f524970018994914629ad962dbb37a2d4ac7a5aba94527ae7b22ba4979050a34bee58daf368836c4b4535b27c94e41667f2222325cfb28d86c41717864c81a46d64e85996f14663a5a474292b831adc684cde34b6cb25f5def630cf817a1eed611edbc35c6e327a7acfcb49ce1b0dc9b30bd223d628b659d470b443b7e12e0e470fd65fbe0f7bb0deea70b4ef6f3410520c52eacc41a70c31ef1aad02ec99672934de62a0b8e68c719b43aee4570fd47219e869321aa6e4d161b44a0040d49257e75297485aa43eeae5df1ae1c93cdadb3c568fd16b3d31c9b907ebe106be99314edbb08fd9b16e9905e6904bf2d03b638db94c0966011dcbe4465381cca1c7189943c7b8e8d1e5ba3c7389a1c103f55b2398c3908103ff7c272e1e51f2c0131a4250db6376bb19723bf96e1530f90cf9344be1f64d4d6ae69a9b4e1ccec941e033a76e084afdda68a4fc34a9b5475329bebe4054a4a8f3533f7129dabd98d96e89698f09557e31291cbfc9944ab93a9329e6a1c9533c87f697c7b40a739375596e79ed25f1b6234456e5f2d07f5ab52aba053af5e5202c6d2c9ecb8bc96166e2485ee2a474b8d1c892c94b5eb9cfa64ba5380eead2a94b4ff1cd6d7e3785a36be2507cb7cbe62f94e5be582d12e6bbda47dfdac844626e59968a1815d7d57d2c2a626264506a398c1a2f6470a0b1962523af507a0342467d59208490a7f430c63ea55da914547a1949beb085c61849306a3950af699625a5cf39354dd3bad4e638346fdf346fd718c332da1ec5b04b3ae52cc93f2fd189acbb9f83ed134ad85cb98043c3cb96ae19a1c6de68b86b7bedc9e83c990e8bced6d11e8c9085a08e86611d35d33167a0de37d057c8a8c222218f0684d1d12dd0a1840bbb0f856aa2b65fce1c8c1f2e2f2f64264babaca8024a1df008f20d8c3e54054e7e839c60f2f21be4c4901fa09f55c2c752c3b8744b74926770d3b6adfb481d75d9a55f455dd15d5a6473bba1ffea5c7645f45250855e5cb12dd115501710947dfc9fcb47bf4abeb0e5926ed156c0e673dbf6a4942ebd8dba4c6f94fab4b66ddb36879b43d2e51947b96f9f90b6cce6332e87f6589729417788fe9042a4a3691a17d31ebdba16ed51dfa6019e599cf41825a7a6cb48e3ee8a1bda398b9cf5ddd09e83d5591ea97b1f7f9d7633bcb73aafbd8db17b42c511c4491729c21186bcff16e10822df98b6add2ba0596340e256773ba24ef3e7e3a037bead9d2893a712aea9cb0142fe95416f9ec4aa2629d6fab3e7693dbe8b455d695fdd5b10fea57b73ffb601672a3913a160732c86cc40872de7f8df051f4596bada56adadda2bc496b9b61b9b5594fbe8df031e4d7081f400cf06b84088e9e92e1737cc6f2bd6ae64bcf2c2dd2342704d66d409b1982badc6ea035f3a9cf902f29f5dd6afadb314081cf665fa63b87761cb34b4d9771886c27f5a959b17bfa7ae65a564a827a6f34a7ef8cd37268ff628be02fff27940a16bf7aa3e1b9dd504aa2c6c83a4d8553a6b34ec73c07ada39ec1e7be48ddea9c6d32a640b2da5e183cc67a2e2f0db333fc1ba3fb3ab442b6ccddcc1ac89685b6077d5f3efe049c30610292b7e856d3f231d2a7d4ebbab89c3add68e80bcdb42eae071d726b40744b7adc6aa25b2ada833df053dac1a0db0dfd960bb9b00bbb7a58ebc450bf06f2c906b22e2c87de32a057cc817aa41ea35f1cf5e838d0c000bfec6ab4d73aedb1d691f4d9bc8cf6a00bc003357a7418ad727114a5b5a250a89213ea97c29cba95c2ba19def418696845416d671bcad710ab979e59d66e2b08338168adbecd6e85a2718a632abea2b27263c48dce9f5cc533d44ea048f4495dbb790d079a63470ce9fcc9b194143f79b63a506729ec3c7bc98df0c091df25fc1ad181a3cf388dbb2fd4d293bcd3785d78da662c1dc77d27a721000148b1a8a838c95350a05652380ae52bdc970295da72484949594959515151515949b1e5a0e22b598b165b85f900768614294c2856563cda3a29edf9f4ee0b35c553ba1406e29fbc87d29f1cc3fcd438ed598eb2e57072950e03fc296eda6e48e94e5d013aa3faf50e01b4090451a85aadccbfb87acb53fa8b48deb25cc9bae8818d9edff21424ad824431c9bad8b7dcb4cd883edd84017e53f7993cc5e391567d581cd2dcf2687956b7191c05a3a7aeb9e6b3669b9a0781962ff42096e55a27864af206d22a1c989fd6c58a5b2854dcf20ce3508e82eba1f4285c85fb501d8aae77dab3b62d8793637e84129efc4943c1edaf70fb2adc8779efcc38a9601c067adab31cfb52b215d901305fb1dd90b568bc2e38c577f0ab7429dd77f21827d226358bebb6107770740f4f7b96a774dd16ead73b383ddf89a755384e9ee2966f29ae6d35a7140468bc2e6ec0d13aed59be83bb2dc0ce0b96e50dc42af9e596b74fab7094b46d0675f66cab29754d79a1245dd32946dd2745f16f003f3f0054ff547efab630bc822d16d5d685e6130975ce19aca58e39addc474bdc173ff09693b84f7b96e9c66915742bbae5ad133fb02d969300056fc516bc15717685d565dd8ff6694f5e5dff90fec36baf57527e6abae55ed7e2ebb36559947694ae54d88b8c3e3ebc9943df53c805e855680b3361cecc7a0b1885be8d3e0884e1a26e699f413e5a6f72be27affea3421c781dee5ac77453f9d708443ffe8b457a629108d4aae845be3df6c49ed803bdf638f6fc8d13563ad8a8515a42dd186b766fefb4a7e10cc10e029fd956c0c7432f9d85a46750b2506f6c64a81a5142dd1e76de69efbbc7093dade2ee8bdede4e674f926af3cbdf43e3b74c5ece163f5d58a6f4e971a399f2c893972f9eb31154952dd9487bd29350bf65b24676e021878e1d4c9ee0a4daf7bbabd11e921a3070a02ec3dd39088924242b79c9468c907260c40fa35f2358c0a4fe1ac1022434d08790aca35ed416bf4eaf2722009ee59bf676971942082124421111b560258322231ecb89fd1ba2790339cee118a73dc928d816e954062f8778e9dcf1ec0ae999e50417eab7443a93899c522210c6869492773eca37366c03ca29a72492442ebf45fce0fc879adc372621fc0ce1204309adc266e1a5175e42605b648d5d2119889056e1e4ec300e0b789e47c370233026fcc0b648974c82978c82972d609c5d21bdbf24547f88f879488adb3b2ef022a6e428d4b7443238250781cf94ba2148dd2412a9b32ccbb22ccb370e00bb8256acfb2a6a89bc1b7e72c4f59026d245da09db78f13cf766d81b03b5d7224b56a8d26791565d4d24e50415077b8e39a461a83584ba2fbb39b98bcc19ad59dcb7831f8787234a126d4fb25f4f7bc80eee22edf590f6203ff1edc4ae80cc9376912e0259fa1400269dfdc2ba1ae9ecd2729b76d29e122ae70c6922451aa68f625e5e3ccf1d851af2b08d9250e94fabd837e8c9901477317c755ac503b33350881025e7230853eada08a2f8a855cc3eb9c8d94913a39692d25aa111ec36ba800edbc2feb9130813f379539838936307dbc0bfdbf476625ba0c30ec353c8818750040fb98d7605f492508d460f6b7bed2c500551b62c1ff4618d99598358766d241499c6f94f9b5c07b12bd84b1cfb301066224ed21e932236e21fd34d6ef9374d26eef9e8271ede69ef06394073761993e0a32fdbd0fef10fdf4192d4b43ce3c439a7c9d4993aa135121b04cc2246e7ae3f7084da3d403ae7eb1c311cfd0689a1e73fde11c3075e9e3c655d601e9d49b02e7e601b4c5e8241e1116665734d95798c5ed7496f93fe5e3e9afcf33e9afc735749f961e2502a730b894bf2ec4c76c50583a7d1307126e2b00edb10f3f23136fb3c7710cf3fa00f490bd9f24fdda031acbedd3308e10a614108fdbdf6a04308e14f1832286188b13f1dba0d1d74f05858040b6eb2c9a55e200df802595c585e7241f2684fee68efa53df9d22dd2ad2ed40d7ad2b333f53aa4cba571d1d9b994846a3b0e4a462c4b863a69ccccccf237c6057c7400a84039aa3b2d1eacff344d4a293576232017ca6f8a5f6708773f8fbecdd1a333f4872c6d841a7ea821a7861c1d1d1f393a384c982cb1b2b1840d263b3bfd43ebfcd03b3836a4c0861d1b7640d045fa074da47fc03f45ba08f78087e0684cb425b455e7684b748ec6446302824c892cc92f4eb6ad92d1b2aecbb22ecb2ac30d940ebdb92bc877273d4218e1aefbf068d80d21a4b199f204c10b11223d18d2032612448e5d5d41a8cf25844639e1b4ac0c0c21e8053b004288074360804f083e10c4134cc842116620189859e805c8882322041d11f907a201e76cb78c31881cf2c7861e1b786cd8b12105db6d438fcf8e96d29233010968d162045f7c6f292d2965cf2c6316d239b6431ebdd33bedc94029f9b3f9ddd683c856467c39644eac61a7069d1a726af8a1869d1a76b29211dcdd10ca0bec0af9b2db1deba2a9b6635df0468f425c70078f1eade980307cd3ddbd0980a7b65b31badbd15ed43154bf058a2e23e849cf47a7718328a3dfcb4b11558623478e52fa063dc1798fdd02633e680c461fdd73d9c8bb6357b0f38eb5c426d1d1f19163c3874e1186a8dfe98950d95fc40c11139359dce591fb7044d9fed197ce7293fc0eb8bbd8f5ed6879f112cc62dd921faf5e46b904b3906eb94c472b32694f46cbe26d2e9540302ac3cecb33cf4937f01272a807a8142e3585450b191a19000000000314002028140c08c462c16038229663617d14800b9fa64c74461789410ec31442c400638c2102023030020019482a007a48212baebd1d298a040688076d766c6a9a37967d9a29083cc044f0fddcb070a7318c634c75ef87bcb1fd2afa0c04899b662b27973311caa7ff67e0b0a7127904252460819c37e1edd10d2f59e13cc3bd06cf73e2e04cea4d491f8167387311fb69d8c10fb3fdf16ad3b86f1be059cdffac8e245b909a47468025f53fea95860052389d1f2f2d9dda55003cdd65aa2dc582a79d173770b37e23d68449a73b8c1fe58d2e0590ec372e041c5f5dabb720619ea889fae988f66ea418ebe45afeba63dd865cf1e4f0fcbde6e4158371050ce787d19569ae58693e879f1cc5e0ca012c5c2b32fd8ef2c8d45c760397fcc7d69a21c6acfcae4dc6deb1c0ab5bb9dc48ef99248387d6f339662276042f0089411bd1fa7b4ea80494fcd8a84e911e4d16045cb03bc6f4eb20cbcfce915fed8fd65de393f5a609b817221b2f48698595a1a666284949e5ba2cccc73aaa39d37f16353fa61c3cc59e5cc381a37667773734fd1d795c30ac685e7822137d36bea984f0f4b81b5a00364a011e428f5db2f88d583659d9d70132715e59b0b858bcb5cf4f6442b6a652a61642e8d2ee5007997b7a8035d601d7d72ff503ae59f194f76f8fa9ffb23dfded11c29d395ed5fec8657d8212ffbca8f78904d03b4f5910d996c1aac451c6b5bb029aac8bb17177da48dea6f22f3f5ef917925af313341e1257fb636b9686165ea29e8d9dfc475e751505589244e57e53ab0d8ca77eec31e2fcf4c92285dfb6226c5d0106f90dcbe315f6c3c9d80317f53c051c375562733ce3d7cbe01162692b9c83a5d40b882da70f4a6d5330f155fd3418fc8fef5dedad77254c997f8687f90277b36c01ffe8113b0b2ceaea71e0a7833a81eef201aec2bf51d66530257e04fb7366840954697dc1b646c7f2668708fb15bf60e35e13f42dd6d6a42fa040fc9d014598e7cb4f245356fd8450b6bfe81af88c79e478a621beec3ac05811a33cda761f1327a267c826257540fced063d687c1404e1e550899cc47f8628f725f8145a89cdafdcbd9ad33c865d13f340eb1c7c9f61e10ed91160b3629210a63f2c2490f5b0acd6a0ef52def4ff609fb45677696f01bafdd17e554cf145cb4212fda6151cd2ae48ffe53c334c8eba7d663c33d698b84754de62d623de7aebb3ec6a47cc290f6db9ae5bc0889b8d5719ee40668c4389a854127e8d5bd2e8c11e123c41f451ac457e2b1531bd517e72383a88cb533c536ad12e8d37db23614578d0330d9fba500972a97e089ab94542675eda4a2978cfeb9bf8a88b0f91164e18d1319f51bcdc252e1178c3dc260970717b1418d902ed3d24cda5c41020465c0c153f54e8321361dab42e9bdbc42b000d5fdc2a172d9fb4cebe5bd7b543a1b10a4c550ba88f11d7aabaf18c7896460cb51a1f1888696452a760b493080a6bd69d2b001faa6ca43caba7011c907af6edabb570bf017850f834771ede786602a481e4a53a701f58388be2aa535eda0872629db291b4f6cb5f8b41650e06dfa962bc92086f1eabc76d8fbec0d194056c748482dcb0c719f7b15b3f300b2148768629f1067a0d7477388496856cd150d9ac0808e4d516f0833d42dde52a7143f720790302265de509649b41e24b95bc93b8a1acf94abf24d1f8a46d480128977102a371111cbbd6488e931099f8157fdd52e761b7bbe8b67573d726a2afe886419b59db99886ad7541d910976504b2bd563047fd10ee5c554ee9483aae7ef328ee2da13d75d598a267c6a5f88941eccd79bec65103923ed18610bc04e15b7955143f9c8908cdd1b243e09a8ff60ae12dad3595a6f7efe96bd0ead3ced2fa6e73adde701f875c1c1ab338c959a9b8e9457a4c95fe5496acabe69d03b1242b00b08231056cddf31c7f4af1e64ebbb746acc6ffa0ba851c02ccf36c2611cc9735254ff9714c47aa1ed5fbee5cfc9c714997d938c60d248912da3482a070801692e7fed0b9fa7d7fd3051897c9145594a66c518f05d90d1099ee4ec5d4b976743a5e29ff7ed7a9cd004600979e193ad9a68f10d4af4444c074d4984b6201db7826a1e827156cf6b9518dfe3a3b000ca51bbffb11ef06b1b90cf86cbd0331f5db19ccad6ebb9f13913f70422774e40b9ef2ea8e1a3f10cddea9218ae547b31309162562b246f0d1d57674523de98b6b63781ab9307bcc326d3d068ba712d62f2a239316dfa8dae9e00231d7d54256cb69611025132c804191883d56bae819a2a82e2a192019a1e897899e60835e370b9050e4ff47f8eac18538da83330910590ba25c68caa8d22a53dfe6deafc838f9632c6169aa31cbae678cb5c07d5a101dbd8f5c79610b8d02ac315d80f7ea8707a85a4578c06e5a682aca7536ce724b607a13bcf45891502223083aed0b1d3a64583707d0cd886325906c9043528c2d9d832ad4d6a91ac5e62cc74b3b08d7bf8218883c092cf401ec9ac3ac65b87eb53f2fe754415865ba064d95fe3afb4771d79fe9abd9017d09c8b84a9325ea6235c2d9f5c80b7f660f8ae660d64badfc7a61e0b726d52ede1391ae99b3acd21e99f38cc05a815f6c2315b4ba1ab6a8ddd27c5beb9d849e123f854a2dc1c9915f991c36a65ec4ed28f85fefe7b33b33c483b43650242415f1403e909aab9c55ee8d2f16ead7a197ee2236a98dfab1c7660f72711cba2f35e3d74527540c10e0cb0b5498873ec37b5a4726179a639b4d0f40fb77588284c34e0a9bd0bc517832083517618caee7e5f2f5bc60588fe40b2458af1dd2877e7ff978ffc073ce520b07e8902ef5143f1b44a59353ea8e0dfcf1a8509c5b9988a8cbab19cb3fea52528b63dacc5a4336718fb860c229b905bd41c63de3768402020f5577a9fd1e667a6bdbc58692c1d55ae7bcfeb6eb84563fd035e185b9e3e2bb9fa3c1347f589bd15f14be97446f5dc82b8cea60c9fbe4012a08166da58a319c2d8ff68ba667abcff015ad4b3a2079ad2aa78ee5c380cdc4a0b3b8f9055a0789553a664b6ca7e4d229dabb6bc06963f2c8a17c6074306638430cb163371b40390ea93800145a284075884d946760efed22a10e1f471ca74121da02e56fc39b2a33fda946b4152254451b500000722908cbdd062f4044d5ebb79adf1b24e08266b31ade37d1e8a0aa15bc8f91143022ab407887e479a38638d8657a114937fd25b17941c6d0aa8ed0aaa3dc5ebab33d1d773a8aca00d799bc9cdaa8b6aa2fbf2bd18cd9a299492bbc5839fbdb295690888e217b42623854eb72f20e5ee723984ad87fe07add8962923af42117b48f77df3d2780010e450aa742ec432747922204e1f1d2801e45e13dde41f8439995201ae3da082cd172c5b6896a4c060f68ea346a835d09941266204c9f4ddad1556e66b3263102d6abf308ac260009656c4dc056920458eae1847687d91b767618a40fd24e0ca9ba3331525e5efc3df9c9ad764dc1ee5b34fcdcbd3296753acc1d5b6a656e0cec3a46f9049f91fc0e58e54ff41954a38574b75a95240b44895cd1109c5d56acc15123fddf3dc05492cde3e3a0b5794561b5c2de2bc09c7caa320e7f5182d8a138f20f2950954e0419b921ae634729cb5c6c6661d96fe8161e8b669d54f72db733984bcd6dbbe3052fc81c899d69cd47a0a7e281fdeb6816b1bae5134f3e6116a217759c2b14759e680b0af533e60d2f770903d30ee1fe053b92215b1bed1adcf1119aa380470982a8025242a07a4658f45dfa1ed02755f9ea3a799e7278ccab5ab1e08611bc49a9d2a8cc5fc11664fc5c1aa171e1fe57af93792bfe5afec6a2649c3cdf2f4c43e0943d34b59b47ece2af27684aa50a3f4a065047413caf444c3e9cf2c43999f0c55abc98b16288482b2156c1095ea98a002c068c11f020de9de33529a55c4a95a71d65150983c28baaec9a4f43fa534e7c12c754950539335507d88155377024030e90caef2c16e484017c45cf7ffe60c0970902c93b27cab3742dc989b821ada105d94f6b4589168a547886ed1b3b0183c968314c786982e27d8d40c560218f4e69017dd3b3b53eeff3b8c0ddf5601ee19d29397d59db690d70cb1fd12a4147ea09c0e762d9a6f1a247ec34832d8d0d57dc2a624404f54140b868934f06262a479df60448db196b94297576755b31e69dad56800503cadf9f2384ed8bb5638693385fdac627d6f518ce31f04a9ab0dd24f170b8c02455558644c22262c86017d1326ec8bfd93e4a4780f151d2456152782615d6047abbf388a26071308dfe3ae355e6bf83057bae6a9bfe3cdf36baf44643c5b1c64ca91355718ee481c4abe7c40c32601430b13681c62cfe206358ee890969428b2297377e53a7b7394b29d730a23339a19a2d3a0102a3587d255bb19b927c883a8c72abe44c7cf2a638cfdc4d8872533a7ebd12746e44f2bb1208785d988f50e5c31925dd20ee1437b260d46b2775375758dcf1f88c15ea1fabdb11f7cce166a0e512edbb9b193bcba347d8849ec21bb1017ba858d179acd903416f2f6183b5c64f08c0db5dc5ca4eb7a60e5e6ec97efad562f52ce0e938ac0aeea5de36b00fa800d4be5a715571d2c2999237e886917ce8f7df814c643cb6ac237c7c52379cbfcffdfa0c03f9b4d23f601415b2ef1c269ae44e06d73b30680c761bc42da076779e5828905bd4d16e453e5eca8f05b58d73e1c645f5ebf323299c98a3d71c82752ee44542b78afff4a9413bf1ac4d0ba03e5899c52554e742b02fed3baa486792103705abde5e2c54a025fd5f4eb79f940c8553b9d0651fd35e1924226a8403451c8577447ada0e19441e82167e2ea14533c8131b34b267bef5745273dae9730d70d41fbcc6a2a801994fedb2ae72a746f334f49645b58e6a6647169aa5f422c8150321f8ba0df850c775ac9bc0f98d548793d6141a1a92ea3af8711f74a32c2032d6ae67e31c4f028ecfd084e93b43da0f2024e54f031699a686b83843a968195d212149acb867c5d15fe0f97e577336c0bdc34ec75b3f340a27034b763fa8cfc79f1cdec58dc6a8cb446dd6b1809a62dbeca3a9de243042ef7f415f66d6e491731091508213836cd0ebe5b3ba56015b17cdd129e8c8a96975bff8fabf8a72c8ddbfecf9421c324cb87c9db441afc2918b962e8282aefa03f6e0f1cb02efe34c4adf17a259e47a603edbe01c369081a3cb500fc730ac7ba455a0bd595bb190760a49cb6210185ed9212c2c847efd1d15d333a2ef9203318c9afb4a3fb8464e8e099b75785b38513ad6b88fc57c74cdf16d8f0d73f004a5de7855ba5105aac101dc7a00e9322c6198648d7b6b1ed0859a31c8d21ca2b1296d91ed557695e0dc0e5e95c2aafca8c3bb9eb228bc96743c79348a8c0c696934d7ad07c04f5986fc486422d16919fd778165639886cf8e273ee1d1cea3702cc6f6cf3f25c8a32bcf65934158c5cdd096d3a09ee3025055114bcc48fea6b9baf1e8a665c8c7a778f01bacbde08da5b7d97cf45d35fb87aeb7d20b28948ae3fcd0d00a0fa4ef55210e61a70904086417e1b6ea04f719f0dc47ad93e0749ad7c71e1714641b877795f50c1e43244a290bee8d782d6d008e6f48caa945953b42e14b246a70aa38a5d45df90e695e58f684c72733a8f3424c6a12c9d6c60b7975d9141c6c72401403993ccf6b386ed747a02e193efc2f8e7ea7afe7b1517518aad5c004b64e6d3609910c31058802ee9c8cff97648313de49a4dbe0cee2c278845f648862b50bd47a173cff776a6f4b99f2b39041b3215b036c04d3bc140dec0badaa26aa9d1cff812008f8aa119406bc77d9ba49abc44a8d52d39be89154efea6ac939858e6c87507c7c048d307f1063d0382e8432bf48bbdeca436cbc9865ee00041d7c74acfbb308ff9819040553218d913731f75cf1a0ac2353f39b2985a5b9188b8006b068c118c35ef935fe9c92aaee7b10365d625955c854620cbb5b5ecbd84a75cc25c073fe6cc7916d7a19c583884304eaee09790b5134612992d00c4aeb02d2e4b657d02158db82919c80b926dbeddd0e1b92188a9d0aba87c0975e7711ef80ff10c1047e90b01585b05831f7c302be295662a273ba7098d790677c9d23aec762f79c37e1ae035b13011d81cbb7bbe2b2f692e753b0b07ac67e8f8f85afd398f1d65f4b644c42b884619530e2afd9e26473ca690e54ec3cd105e98128f5bd6e0a20481563e03df0268e1e1245f50493a2140e54357c94c5cf6f2fdc4fe67f21ad53825582ab3a5b0f3a5048d72afb95fb2c466b3c5fd42baae2c3e1862d36df1fd484b7c5b7e9573039f21d6b8dac1e8cdfc480205bf8e01871eb49a26d5412476903b23d432600bfd5c07cfdc3d54df998763c0d2a89d83974f8c70f42393ac102e031b0749c9e9cf56f3a03ea7d166d3c446b636a0988156ee1f75959033742de7ce54fae2476f6e08a3aa3599b9bb80fac0711c41b35fce01ff5081a6c23669ea911cc838508710aa65267564a03245a66991e18431836d85e25551c01f43eb6321363df217ee7460bf017a6e3fbfa7e4f2d85e4a7767137b04c3b0d569aaf0a3179048879393d470d99854e38f365216208e23f0746d9ab2d9b169b6aba5a13913bfb433f3d92039343722b752641a059acda0b436fc55f4f728563d55caf0ed550d8b7a48664cdb172045867bcf142bd93f31adf714910f727f2f484a3468656509fdaff090d108bf0c0b6c7c489bd3b974e3b18ee9e79c3c21d7cab0e4ca4150628c95783b6de9565fa0a59b87b72fecd93b8af87063953e388ab442afa70dab381a4143e648a0f6c9b8d56dd0fc2ab44204a21683d7eb820b6b650bccfbf05f3bcbacb5f35823b56ff5b3081bcab36989237ce92cbd9722db7ab7d3bbb0b2f8197a9969f7ed39e952e83bc5d87ec747cb62d25e7bc0db645de40f58a99300108a387734ced8b7049b9d429bb661db2401db06285555bf06ba54f0852b395b974d120c24c1ae8dfffb962a0bd01361e446dcbb6e47c83f293e6ec8bbd9fcd1279e21601f161cc1819159d996dccd561fe94b4266bcb0e70aa2cd8e1055981c56e8be8cb75cbd94d79ec35b66da8fb680f8c082d58b0d4605b07af0aa7715dd9e88a504bfe0df08c05905b3aa70220a935429f4628462110103dc088cea2af98e1a5e67228405ae93c025940a04a4e06ea3ac8cc7af5e9fd543f4c5f18098a725b5b945e307488b951cc6956ca1079e400572a3c2aee1e14049145f3303d70fcd64bf570260eb15600851e4aadad63eb39433429d94ae9d744f00f06e065b55e890c73c2176b5545c6ee2375106fa017122031d615f310a5a18c678c8bf6dc3a23716df1dad507cce04f71f1acd331ec316666eb6d3434c9d137c29ad4c1884742c992501f887b6b8003d0bd9b0881cc860c5d245ef20ba1457c89641c245a1efd9e153f96c2f74ad34792db0e7a16bf14851f69623e7eb7f52e5b81d8e656ca84592a484c9363bf10a347d012874be87ee365d8fdd2c8ea565e070e25c16b5215c6c540dd1c603da88f7391b5e9f4110896bcf2e04a45ec3af189fc1cfb5e5b1a1cf61b675ff3e2035e57ea01dcba5f23a86017b173a582c55b00bc971c4f8c4325aacbcfc785e3bec3550991e14d4c6e6aa3b539539c40fb11170754ef39c9e77036011cd9e91fc515240d07d3305b4911c608b0dc752ad50a5df12e2c81ce8aea115b99c0a95bde090e52d0636e2a773d5a360e58e97baecda6eb190cd43025e2eb85c653a262b97b7783dcfabf257320e9beae1b7b417799738fe2b5c3522c3ca5696c45101e2ca57964b832a8fa4f2231aec5501b042b8b3db1857614f0092bbb50fa413fd5efdbfa86ec741dbe512d11ae688f7eecadece5d4514d8b68eec12cbe59a94d1b1e3387f2e080718797cf3e64cc08e8b04a2638eecf8ed8e113ca03c57ca9fea81e0432aacca51b3b16e49bdc1f335c66d02ed1781a4c67c7fe9933df160e9aacff16d2874668ef297c03dab960b8c0d01271ee32461cfb1dad289d884d72d237b2b222b91dbcc3d46df8881156eac561a19db16993b08212ef1aed8743fb7a48bfc8eb07051722cb37f156a444c4fb1720c32bf31b57214db786171f24c38c54af7dc46a92742a5a02be941f007dce851e8fd58a81dc05108abb7d88437b7a593573f04aaa01b26f48a8195b71145c8cac1b12ed63f4a785a9358749f6ea48cd8b3a06b1ef757a50ae88b956442e4933f843adc340120760138464c9f5f586012d55c5a8b4578e5de9184f766111af175f715d0572bcbbcd3477fc79504c59ef8069fa10fbf8b482cc2efaed13d8e69fdfe46294c37b25ab94fe07b4ccb0dc61eb8a30031121bc54ef7ec4e8af0de8a6015765ab857405fae2cf3421ffd1d5712147b3ab35096a9cb40ec8457ee8e14da1b96963ef4a394881eb5a2cc217f082c03b1fca063a184e0b47b6091f13e5b39c54ef7e63e5258cf4567255a2fe0fe120b271281d7e2d8b45a3baf2ac5c829aa838d08c412361d9d54175a881851159f987cd0523dbb8b9a92a3ad424580ac8e8cb07a7aaddf4264f973e68d27e1bdc4a8a5446bd944fb50f80b07d69bead9d7de45cbb8574a99333631f839926c65475286c0c96b2f1746c3efde6afbb88e46a758952b0231541d1baa020c011088ab8018550c141889324b99c83a0e8dd4051c7040e0a8ba56580b2599ee0858aa99c8130159fd0464fec66aa5122b9361a55ff98a810aad27021f480f3d624fdf9049ba4ff9c1280cbd13ec4731eeb1307001cb92652ddec4bf7131355047f9015c45275e201fbd3458ff91d2cd81c38de7f91c10c9e0166b6dd57f06421c8aca9c91a45a307968c4327a05dabeb324c9ccdcd2e359a5b94d34ba7ae730e7404d9e11a25911365b7578be1e8370e5e5c388a7978645e97285fb159ace702039e5df2870dc326ef48eb8dee54bcce93a621466768d7f190a2a0c70c47ff70deee02e5fb20218c65feb89784c4f394323ed63ba4af49d5bd60844e0325469028741a4a6db4d2258163470c14ba0bf1e004539a5d32aeccadc3032f8611fb058e0029633af08aa2bb38080066769459ec1ad06e390676444998e8052156ef42706c258684fef1b3932a4566cf1712f57780d83b3a1cb3b38e31c187f753043dfffae0455a262e26e081fd82f8133e7c3bc4e377177be6d2fcf8ca7e67f05017c0962a84915d4dc11e31ba769542e99a517b1a2587900357751a2fecf5caa201647e65be763f10bc131c812333feb7446265e7e9cef39431304df381fe74f440937c8f564c91fee3a5b9b995bc2680699f5d0d27ab67d7ff73a4d76ffb581f7065e35e06d4dd814401efe6d5d54b78fbcf5d8780fe1af6fbf03d414bd9f73a5491677859e8725ccf6a534cb49e96955971b713f88297b1acbded5bf0cc00225bafdb872d12fb9d3d585e7e2407b407365deeb2d5ef4cf4699c47ecc0ac0052f475c9185ae2c011d8bcea422625ff90f4da0d413c19f15745c4da91d22dc4585fc12a8be85cf7bcea66a394cb1b393ffbf1ca1b49ecd1a2080b68f841f96d83ad197108d6abde00112ec2b7da4e7a345367ec9cd00a5b7571dfbc8f85aa28e632b91c8a46278d8734e12fcd358909c6fa880990555c324b956413333441044c49e16a90ea822ab4be08fed51934fea4f5a2e037d70b3c6e6cbff56402cad7f48ac10aa0a7950a36442e8d692be06802a9f4b8fbb89d0366b3df6eb69a1670547cf1e5871206d3f3d1f221ec06f62a60d95dde142674f491680a27873409f3db3cc5d375c1d05147bbbaa0df3eb1dabad224ea5dc31bda2ce77e76ac541c5a77d13392d33a1bf49cc0e84c222df3bb6a3b9a1215607aae33b98240cda24eeb2ea584317f6fd5529c5ebe3986593c1562a741cb982ed78d8bd7f21c589f5fa8cc3e7a3651d0c9327c4c10419a5d77337fa9c876b9ea86989ffee3f22c8ca1a152b414cccc8216a007a5f707f37d6845e965ef150f2f4ebe7b9d5909f3f14f72bac60479e668124c6036b5ec8cce6f80daf2712a8b0435a94344f1ab10023921214301a405c80b1103b89e011c7a9029d35130d78b210214343ad108bc58825d6c93dea9b7253f15bef1d6b2ed093a6d0c4748d8a01b42b6ec923710612880957b3ea8f6859eac7b2dc51c88b0670c99a122debb2c12b41ac033689772a898959fa1dee9cc575b0e938e266ebc585cbb3486fcf12fef9bc5beaa1cdd2c8c91be6f2aad0689df150ea464aab916e7001d4f18e885de30caf045146e56a7a6895c130201b8ca066d16e44f8bf1ce0af8f205399577032eb13e9907659f27cf66a8d538a451978cdaadba97ed61d1389ce7dbfab5790e46066035812aceb5bf100283b071f38506e9a3ba815a55da57fd3057b1389fc8c1667549193f461a56b417ed37fdefcf858cccc44f8bf8fcd94d1acf34887bd27c5b7061a524d67b05a7a79660998beaa99cc8291396add313c11fef3397e1c9cb9cf443868175c01d0328bba395d6be6481d7381b0a004ec9f8e53c984a2775562a93899f9f73fda2c1d6e802934f02e9de82d1ec5eb011145fae819cf185ae78bcacf8a4524536c8db9bc8c08f3ce3a672de8941f9ef40589ac4fb0bb10fe437ca951cf528e03e5fd637d3e71fa7c29b9db0890921c450878bde2d2389d269de2daf5acb330284044622b30a1c89864e6b5f962a03b101f9713ff7d0b85ddb8e67b94a75ff9a253a308dad223bf1f54fa845e136b41f0313377a0ffb889a65f4b69241fb0600ce24cccc0ac9fbbff9694c3c0e1233dab4e99d4834b92dd85f284d77bf87e3a529d8b8bd16390ed2568f41aa83d291b9412c4acea82992cabf926bb7cc06c0f409bb6fe6abd666cd8366dd1df60bec54604d9c568ef2ce3a30629f94821b6497afe9e2b484a55ac433d2c9ad3e9be5416b98793f47ee8fd6472152f7a26304776c2c1405163311e6b4d2afc058e6d7134fbd892a811b7b91dbd7d585217254a6b0561606acd2a9a2c5ce4c8f093c8e2f8dbae2775b9df25fad201b5fa17eaf21d39bb6c683c81dd8317443c8f78755bd3ea93082b08c25af758607975bba8cbc161a8f9c51085192c99c75c1198447bc64635967cf60bbcd991e2d7efb729fa74a2d3acec7c2e67cd2ec6e4c317836d8737be177f5eb56a32dbed47591895fed56a36e686b36ea1e3464f32e9f343c7ac8a1e1939aa981f0c078aed48b0a7b566d2bf270eb774fe9d18b013f2c1c1673bb42fb05f93f05aba81746f53be78277ef0fe57a388d481e467baa56396fbb9f6132aa3cd86b32a0caabbfcb37401507f7ad41a6bd80263309fb85dc52120d5ac4de2fa2fd9d3d49a3f60b67487487c919a475bb338361953d0fc2680be7cbfec9b6a480868374d1c4bf1b6291002423d395214636748db582da68d725386542e4d4488e67d9c3418413662a77dd110854679da1708c7fe94395a95621bec3698349ba53c1738c07b88e5c0e35077a9dd626e471a3a586bbf35734ae33edfa68e4a34a8ca6fdc4b33d5f94ddbb4a5d8b85ed8fccd72da54c76f4b8601c5eced925024d0d240cf47cb07b138f5509c7b60d4394d742ea04396a78e2f3d622dbe6a1f997a9bb2bb2441157aec32e8dedc03f604ba6c80618309cf12651965399b4f4dbaa765ee1db2cd5b21fa61319d9b85c1e2c91e11287cfc907df8787be707287c0617adc81f85fcd05f4c0ac7b6b0e3f5cf8aec6fe31d60bcef0a951707a6643833c565754c4b6a083f5fedb78c427836b56f2b07d31090ca1b84f8b0e326c85dd26243bedd2f275448d2f6e01a800b97047d2851a34901ac08c6611fe8f08f738af7c2bbe1af585bdc70848ed3233f64465c91a15ffe07a3a3b4444f45c793d534f5fa4132056952bfe0a55f5a23eff803697e582850455bd5777cf2eb9d8f03a0ed4fccd8ce54fac85ff33a93ddffc80bf50339a17661327ddb401a60c3aa5968705cfd5859ddcbd4ce78b5f1cf452187542eb47029738473a4ce7b3dab0b37365231707ce18864a19838a193986c04214e3341a7bbe8a7bb33995117d69449c42a710872f7d83d0f32921ffbdf0d46a825c002338e0ed517b008392be32544534c2102370e736a125ac40c5efa33eefe9ed119e1288d04e52d68cd87df9408c8af828dfc48e5cb95ce4511868ee171b4f431480ccd0ea71b3d24e8e8d2f51008aa8a3ce5d2c6d27f7962d3d7c7b5e10bb0478e5c78fdc2b7ef5a973955b546aaf8b4f46112b5cf752a31f15e5ed18ee29078649203ae0a41781ea035ae5f99eeb34f8bac4b5cc00107c63cd87567e9e60f4955d8da4ff60d27cbacc8a39d4ed635ca691927791f3e7cf6ba143b9bdf9b664b78d3185915405cd3adb446482f19756267815d033a0ed24a284e69f0ba2acd65d3d7c9e756125ad8cb3215bfd77c88dacc8630548f96ed76161f95a8a516233195d1916b64ae03e4a21b440c087aaf15403ad6a6a7ae7d591352dcc8ff3fe8784a86ec18985f4970e5e91c06b6c9674c45167a8615352a3b246067cf7a2131a51b022cfa57ff78c0eedd32244d5fc2391d4d34c019ca92281602b61245e320f371981cb04a445508ae3b98e10e3dc3e414ca84cd3f8ccf75e89fc9d64ae4f8cf7ec12a8eaaaa661b37a257a6c3f53e4b9175990bec091902e0c900f0f084fec3eb22cf6166c79d70de1484615508f744f38f9cf1d0cc4910b3513bede5b2af429938a5d2e611ca53566db5ebdd32d426ee0be6fbd744a687cc746576e742e109dd876fe6fe16610071b41e93d7d789f592f47ccb07f851b929c0efb385130f0e9b88f95d0c8434119c04311022a0b77d2aabe59673c10ce5ea772c85b6e71e88ff42c82ad689c550c883e5bf4fc5a79a8cfc03e4b129e3fe39de1478e1a8e74b4ca00b8b91f7e62670408315f2980089cbf813a1e26b3a3fc1eac66fb581473b642f4c50e422e82219db6d65e141a93a93be47f81746bba360726beb943f678fa3a3727825272497c5245cc1a296cc99605cb8ac5a2271e3baddd2abff2640dd9686bd3322b55653d49faf5b553cfb1d630c101a7207cf17066a2a6eeca99fee944027869c81babdb98ab22415c9281b4e76c01ce1f0f10c8e2912f168a5093b16b82c09a715a3da17caba2f71ac9cac9c1825dc760e2a44295dbf8869132c8545888871633051c74c2206bee3be02ac913f647205316f8c553d8e692cb96131cb77f4781ab2935e5718ed942b08cbdc422eab8aaa3c5be8ea8b74ea72490bc56dd59d04d1334a410bc87e0030984c37fe0eb5df73a2dc8a8d7346868ce4e35dadc58992ae28304f2b08a2776e253dd6ab53e75c1b8d797f24839e460de64aa23c3dc866f87f720d3b7eebd3072ddfaefc9ef79253137365e7ba6b34b3adf58027d415cb244786f7e2203dbca4399832b71cc922c829bc9e108418c8f5612632ad4c7b3178988747662697dfbd550407b50f80f0725abc89a9c82ea37310e502589a39c1776742444088ec1603f8af2016720ec71b3be109f43cfbcb47c24c56cc0d2ffe12d9890360309612d1aede1f14e3f3ffd1bc7bbdb59975db04d8ae903970c04dfe54e729bc834339446d1fa971c838210705629023d53e6ba39b5e9b10f2043db60ab13634372933683b2d624ef50a6c9cd5a461e6ba2f491af944498a8377bd4d8d68de45fdc6c440d86045bb13c1731156b88bd5e19050e18acd819a85941f9bfe36ace3fa9938f624e46f3467a79c58dbbb426f96a7903f4c038aec1a2736f1ece995d6dd22ef6bb342fb50a20b426483f8899dd7bc4515b66f16160cd0fbc15e4a4c2920140ecdc56bd5bdfad7162976ca6498e4e0b58314fb89727350a9eb58df16504af153c50f69e4d8792d0c46ed1054c641acd3f4aeee9846c22be71858944c35607573bd0ca4553ddb929c2a215a446a3a2af8d14b7417f31b702d4d559af70ab2fb4681d7d9b4031ed4bb54b117ee00e02318034a4b15fcc362eb7c23e4f164d5f0701591ddf9ea1492d7ec10ece6724898a4dbdf3d3a5247f8c86a0544256adf004b23d6b185490ca17adf74258d9a6c2ba7cedfae1477681597a4ff56eed1cad3239e7f42ec885ffe787602b50910abd37e058dad679a609eba19aad7cffeac3540bd6d43aa14f22246484845ae2194433f32f77fd95074e4e8bed7ab4133930ed583278678cd067c7e4ea82800e563f10ab4a3f6c2284f5bfd2b87a23706689c45154ee69e6bc03e76a6565a3d2a5e43c59ebb8ea159db2b45ad4809b1d49e9788e6d4d73308063822172439941d28e9750fe396bdb73c2a3212d8a0ed64a024d4b4aaee7b37f563de973b726db934f7515785f077f6e9b5b6c38bc5cda516062ceca5b519353a00b03183e5854f67a5579598cb9ce4919045fced31b83b511cf5be30df4a7f737efe90db6ef3c9b2473628754961e3f47caedb509cc5ba2e8d523d5277324d774a5d614fc09716d251d8cdd65263382ada1a7709b3c883ab4cc0886eae0c3cb576c413edd61ca49d24432a9c961108e5e20c350517f6cbaeeec68db8300be26b245aa4ccb1a0e77161f330d84906c65160601917adbdd9708e69f09c562ab0807694b6181883c16a8df315e75ca1f0ce0f45693f2ba7d7eb6c425f362c0beca1539638852c87275a6e008237ca406737be43408ebb219248bda98271b17c3a367a08c9d4b3094100bcc2d42c630e2b1fdf0e827ad3da6ab2c6fbb022310447c5033886d8607f6f0587818d537c85a2554dbd9f9755787372f8992b2d5ea3c2dd609379b2200c199e9e31a415196a7d53782d02ce8ff95ee3bd8c0cfdb7ea53131b8815d1fb68ef80168f1719922ba21daf0e483ae3ca66fa3e45e5a04d2cca8cd930ec9286002baa0a2843a9f34adbcd55e1210aebb04bab555d54261209ca4e59c79521ae6eae2aa135dd0897188e1974bcfaca908d850d78826cb15aefd232f464320d27be05ec615ee7197ff03d78b44f2bb8db6267fd41e0316187067edc80c003c1eb8450eeb3d74119b851ae748cce148da1f99469b6797e7b3a695b34af1b16534c7269d1ce313b12e9fe0aab466dea365272306b6989959018618d2630e328d140ec4409395709096a35395026e5061f97b2c4c0ad82419b0a14ed9a136fc9b6f1010bc3433e760f6fdb41ed68b9de52efddc1780b6c514d6eea79d78afb96b63243d17467a454a1515fa70765d695178fcad8782a77fd191c990fa1bf0b181192eae6d3b44c16b3850999695e8399c5b4ca052a479d4275d0c8443f1963b7f15e5c90467a8cb0c1a65e006c3782f842ef6539de9dd87837a7d2660ea1dd985f5979512ae9b03ccef0ff16105039d1dbb1b7f6cf1b885daa818410852438375a8caf96abe328af8be6464dd95d24485526d0d244588f0ba0d783d3576a037ea395e06dc2ee3d842f96c77860a29122f91cebcaa17234c046d8c6841c5cc62e745b8a1750b5979cd959e29f922f201e651dcd6e0d8ffab061baaf7f2e3d4c366f37c39992bd6c2a9b8e2fd477db583edd74a6c01fbe888fd03420a73f5e9d51806191a43841c446929ac8936826567b79edc3362a656b5ccc7a2b51a8b89277809d351290da8c77d9eca2801e873b1d3b9c23bc9b2b60ebccc79c1ff7a8a9a9ba31c115e4c95fd828051fcd87ae40c59924c126cf5c3b21e0fd0ac53989ae0c8cac2d582952c5ba607d6f5904cdc6fd66c17d701ae67e9b150443a862a3a039a1acf73cae2a920970a6952e9e9241925c84de21db39eaecad49505d921a56ca9e9c3ec9497776579fb2539514ad769006dca739e2fdaa337a45c974b9725b31a7b3386ab76b22cb8261b416e7a506bef0a2aa27896e72526761295cacfbf0dfff9b0a448f6ac238938bd9a17946caad8b2ee4d31a0316e7faa11000f2592b5e37cc988ca51137d5800d69a2d11afed13399d6664954342af19a8490de7ebcdd7949a76c53b47acf8c40ca1769340f33f321eff66ab653b21732f4628468432b4989b7a1dac284cc9b2106d2c572c05bc1b89c641acb234598ae5265f74c5f39b339ff9328f13fa7be88f06d5d1bea31a71e6ca6a669a78c530db0f20a3e368c2e9c43fbc20e3c658ea7ac9dd061e892b35a094ad30d0ad51c0ae22019ec458c1f9981b8459bfacf1cf6f2afbbcb82fcfa52b24089b0a7d602f4e5d195631d9192ee885f36929b64eb1021c28394867e7b434fe5cd2c79b54973f4dbe02a01f1188146deefd0c62b0de54dc9a84513fec994066fcde72fa02e204163d8c3f9c462468113c1223bd7dc2e2368d0bfa1459ffd320b245a9285e5b06e3bcb7dd0deaab1cc509929c72d0594a67a604fd9f7df7980ae1bf25872675adf905286187e734be3fe825ac09fbabfd8a3ee6af9117b75011b5337c7285c58e1ba63c853fc42a4c942cd3af30b9100c92b5cccea9d1c1e15ab22bdf7e69e0940fa3ed1dcd7654e379451c9305eea21d049c720251bd2769211b10a09704082b43c479b82799786bbf6a315f704e8d03dc17433e48a72d15649e220206f99d3b50b6622c1112f56d880230b33e94fb174baf9c3628e302577aa1d392ea684616ba176519b163e6ddc982de9e5851130105d395e948b280541d2bb1f268649c23c3af48e41fe075d4a98c9e184794eaf7d7a92c0e638e39fc61679e566d6953572210310b021a30aa3cb9baf5349476787acda776002d41d01a17b9c02378ac8a530400040228ffe295054ae3bdb702f444f4a5122ce88a34606fbd60df9d111bf737ab27fd85e69f7844afd061b98e22429d740a015d0cc16fa7d332997f1b021f61244341493f6a78a6f3ae0a0f4224374afa127197384ccbe2e0169f719105b703edd542c2052f661e6775fee32fd71f2d1c413f8d9ad0d3524f27e1269ba75480ca3f81fbc95e5420668ff27491e3643165e0acdc8cb01cb6e954a4815370a7a86b9a8bfb6cb279b652e4565c71dc7f4477a3efe2fb5ab95b13281df8eb794d52763d5d8283a62c04967b4c3ccc2de1de9b1192c5869f77a2906d9cbf1c24dc836c73cce79202cd345922f4ecf4e9bbff928e785b02f0950809f573f68759527586c14aa5d43a838a1fa2b32c1e2f3de58ada0619c08df65460bbbbc10bdb58da1cfdc706606b8da8fb025c2ec4a2cc024a099f5e60462d5150ba34f5756ac2a1072c295b85030298caa60436692820e0622eea86bcc0edf7e9873e225008210f541161b8478c82eeba600dc21b74f33e195423c6454876d9a48a8cddf5a926b448c6a564ca8df883b121363e844a69117405d24acda3f1dbb728d2e5636ad8f657211bf22d32a7856e22d382326dd4243fe893c70c0c7bf85c118e9db6e20caa30a5d411b3acce7ef0fcc2b675526ce1b303d73514cdf692b3514f7b02be86ca1104c18215526dd1d120c92726a67fed4d4f079b25cef6e75f25445d176230273f3c19f50db15e56558ac7a10051a9762f32f21bc78b17b054b272b9715c93a0405d77e323154c05df72ec5b2c864373cfab83770311e18a411938a888d31a4b0e40b2a42c6c043010ca95f02e3d3f5ef14fd70986deec37eaae7ad196385598190ad11072ef55b598112ee0437b9a5ecb014c3044f13a8a8f289d0de8b010ed707738c7ed38d8d5f1a69a3bb6160ca54af3f6a4d61b49dee4270eba4386d62109e260737ff15cb250e1fa05741f6829a7429f5b9d67fa5f206db9d48c1c6fa6ab872306a30a2629a9f86f19c03ab62e666d7cf422c5052100a621c79521d50cee698fc68a3791750d488a329c85e8e33d48ee5a6cda3fd13c8becd78d00195c9ed2a1e0c27c57e0e32e0495502aedd3f561a06960b55860af6ddc0bdc0f9c648f0fb4cab98885ad9929f8501121046b71c98f69da61bff590ebc304c78fb91be79f65a1afad0f8379f8e67856d7956d0c9e27651ed01370238bb0945b0e044af3de24b8e110216c7a588357130407057f5b4ba6c19f1da44c174196182a5c9b2bd281e5235084cd2b076746d407d1b48ed021f2b5695b7e1dc34dd2a2f89b16bc1b89c1559106629fa50f602648930814a96fb9ba6821f48583bef8be8565731ee858331b676957a0baedd9151b92169fa180bea6f37068673c60a84fc63f8e706257a61a0d8ece78cf62c0e42860053969b89e1d5e70c3b601a37e1002ddad59c84c8ea418d1abc211a50761a0053d52483f0b2262ccf8e912f9cee30e2423ca460120b45741ed1d0a2c5318d3cd47dd02e66176b02722b813f480587da3ed9cae0873094a0ef196f3d96536054e20bb82cac47d08cce1d7fe4a852754f10d90e3d49ac778617a4eaff6e97bd56f7bc65a010a7a196a7ebc99e43065ef502f6f55c0beee094558f81e7f0489a5eb27cd5c8c089c3c0d1a21c17c821b30346dba1790c32ec6cc77f3afd29a1170dd1c6a81d62afbaa05a3934ed4833c77ba8168fed82c78f71a6addb409065d1a2491ed61973b34ad5979782359ecb7a1b9a8bf4a6075a5db3afbe301832da19e649a5a746f0c79bc0b1a7bf2c332ffab10b4684d5e79e46e8ea931f3e1bca1e2cc0e99766c91ce92477d058276418183d72f9fda731d5128325eae538b3eb577744e1b000b0ada227864aa42f1bdccb48b24e8374a828a52b3f8782470f8394cee86e020f68aca8063d0b4a4e2548c10dd34d3dc6158a9d90052fbb7adcf9e24c3b32f887a2b0c89853c8f3dd0a4113546bd3368f4dde21a36b282ee828a7b21d80d50aecb2a8cd025d1c600cceaeda74e64e1d6a81d8314012b985eec2f5514b83667ccb7b9eef01eda048d34ebeab0f18b70530ba857cc5e36b88720d645326aca9b74a380caab2e17445b445a53cdd737cde6aa0637337f16dfce2aa13f4283b08c71bccc06f7f74895b7ebc331676fb69ef273c5fb013fed1202a2014b25ad859d01500fbe569c5e792ef7ca809c242a18002f510ea85ed13e923065914235a738fa9c8cc5ffd892c528371a1c2285409f330b86a01532d17add8944ae22e9c0eae4e2f0b25b8681fc02634a3dcf0558db59f4d7168c23b6cc30baeed8676ea80284c3bbf060cbc7d1628df0f78a3fdb57c93d4be8927422156801755a039ca014154c6b5b562faad571c6f66f6f4674b545d78c5f048481a4068123b79f4b8522b752d528c3f3f1195a2128ee209c1e7f3c095cc40eb0678ac38b9f6d563ea7d6bbb78ee664814a9d008678a2f5dab7afec336767d93b20414842dc72b01457d8633201027a4447e518e7ded8679cdffa8a838ed874f6e29be815d15642e516977667196088a1aafb07fb3bc18f8440e3c7fa3762b284f4e380215240e3b295b57344ee88372438390f57b5841c5af464e4907d88bb95e45ee7c569425f33b4d6fd05ecc99c7b273d6ab12302170c64bb23fac02e163f808f3ca9611bfb6f148767852a7bdb3ada580d5a0e2d01f4157ad6a5c72780488b886be9fe2523e9e252ed3255a34d7ace96fe58f6f008f3bb1ce44e1e9aef51bc34538dbcd09109c1e31f49a133ebac5aac5f84679915078fd1cbbf32b819162f65c92dbc4fc8d08a3b2093513436d85932aa7d5f1001b3856ac5feead3c4b4b1c491ca03e8cbe2f1633b001cb1249e5bc086a49e0dca0cf31e6c406740461fc3298bb416562dfd99ae2f88902dc4279c84501d8391ddf8c5b5c3d1c35a1afca36977518948068fa5013a9c6c5c01404f1cc2813119e94f7d72bede6c2af1db9ca5a95885a1230e693d15082211a1b5e3724c50ed47a18a186586bc6b0c4c2f446df4bb5d89222753f58af4529d632a1312e063f4c581dff3e2d9e80469a8790a68831cb7a9fdb5feb6f4e92c7425648a5bd5d9e5763cfeb8a70188f069091e08ae06148e2f87736e5314be6753d1ceea123bd774f0d104caffef26c78e62bbd4898f17d1b17a67a3731be34f28dc91be0525e0abcc28ada7b69207a0010c72d7e4d0d8309237eb8075aca7bfc1934eaf0c038c7093489d58aff8e54c0ff4613d0efcc6ed840ba5d28bd99197a117bbe13228ccd4da619d7bf1b04665830da98a51a8f9388934918027965d725b8f9d8e0daa826eef5b59ddcd8d8a6cfcaeb76368a4ad149a2abcaf8cf82c5966421e2dc93bf381f45aa61666bb0c1a33bf563358fbd05e49f9c58bca3ca9a33599eb54d5177ad4b31030a76f8a056527dbafb4ffb7cf92b6db6beb3e432bb9e5d27aa465a53d7d01ac1afef58abee25a012c426e3731f7f30d9e8a4cf3b58cf0e59bcfe6281285aeffdf121b5a76d076bdda18d3168e8f918f9801835edf4d7d66412f197fbf44b541670bc23851a470de1282fa8dc69047a75c4d11d035fbc28860c26eca14daec9a5daf911ad122d58f59dcdebd39480469241b31fe9c6988829a731cdc9cd0b46439a5f21c26bb67168bf904958d276a544f4d97d7fe61d246acf2adc1350fa7ed595ec4bd82ed4dd03b7e091a9e70d20d9f79386c595401ca6c7500b8621c9a1601802a088932c1dc7d5a409438dc8a040df294aa908935becd243c2e77ecbb3c13855672250c1b985019d2221a1b1238398e9e3e6a45943c8708557b51a55a4fd6c9c02ec78ae113886073cb4242ce41b5f7d9a2ed5df3efd408c6a30861b20f77fdc542334a5f3a1ab97143ff65a07ce41c506d4e3bdc51554a764539175b6cc48212f8392723cb8c50a7d5393d60d407f577f50c8fbda43333f5c5199b154a81fffd12c18103620fa899fc9430d0bb714d6afad86d4227d924b58543ff6d23d1756222f642c9249ef9ae635f75f4934f54348fedf43bfd2814d1ca009efb6fc56c7cb0a24ba516701445ce8cf602615e5dce2e8230884c8628e14e2683e1e94d1396dc8a3d6acd5c61078f5cc68eb90ab743d4b7dec6871a3f83eee25e8477c5bd1b2a54b65487ec06ec15a8b92f1ff1e0069d240187b83c52d68adfb8012c5a36c21436fa57a1ecfef873c106cc5cee692f1e724619a743869861761849a4cbe262f9b7bcba633871ea1dbf502e6bc6abe470a3d923ca80d3920b611e7a2ca8262609b799533a656a96197dc6214f72d0913c3c9b3bab724a8d8b55d62d4e42c97c294c1c828d6c6509b1d6818ff601521eb64c6d15e82543d64d3481000b2d4e648d266dd987dd18094662903f9d0b31eba19789b166d8865d719a01a3d56c1f081152a8b451a120159dad72a8993195a06f512d407d30a6120b42ae319bbc2889c579cb8bcb15a87eba324291dde9f8a342d263b1e55efb11cc01fda38c10c84da45412e755be3426a318252d94633e347d6184ebf67b4d64d3043219b0bbd4cf5ec06ba0512ba12ec633589536936244f8693fd26b4a2274a1490a65205e16122b3241b6a63761f7c5e4eb1102cfb0d965910afbae07f8e75f808447d7b3c6c82edabe9890c850006d5ca9a53b271ad9b1a0ad579a4a2f2c206d29bc71b0469cfe7053a2a8eee5de045e20b67da0bb13b19331fe085af77aaaf554a1d6de0be575d8bdc3c2d8f1880e07fcf71bc110487d31d9390f60eb80ca65dcb9d254a61c5571ee6bbc8066f0a02b10aaaa4a1a28505cced2c519cfdfdbf81c6630fd107f118f55bd6902f0b5fad79ceb63e6ee3fd795db85cd3cf31b4d64bc7b32bad23c6b2855987503fe133cf373846ef85719738d3d1786516d51002d1b5e222ef1a44e7055499c8a0b6374477b474228b4215fb552d61fe60e0ffe8f01953d4e32d3beccd5f136e61e8a0a510c8fe831521f9d35562c13dd515b07898e27fcebb73cf5ac00a7054469d6d977a4e2aa24e1f64db28e21d63c8c6724733e4292e3ce35727c3d244782f4683ba3dabb51a25f9cf711b4f9f7c6372c1e1ac7bf4375057502c2d5b7b2cd80b02739bddb3dc8de6be0cc30611a2eb96dad4fea4ae86e1136e732215a9a1f7317667c17026976eec7d45e2b9ce3a9db9b2b1d2e951b5ca6217e584c8bc0fb97dfdada4276c48982c77a5d9d31f5c86ae5ce76e3ce19b84564e57d13d8acd6dbb82ccf2f8bba15c4371b6d0db93b6132172f6222cbefceacf7fbf1cdca3e161ae7c09bb76cd12dfe046ac5ad8960ae4d2584349ff36258f35f7929afb38b4cd193b17bee422021b7a2912cb97419a6368133bb34584db639906b65c025a853beded00050ff66df425755b813c8064977738f447e4fa247b094d853a81ce8ea6c9f7d3f10fbaec014fb1bfdbef2695578ddbdf7e6b5905e52f2b5363a0bddd55b8821968776fe65b3f33ce0bc1be0cb4cd5d39ba7f041550845c8ca1b2140d6fc741aa9283bc964ce9fa0126b85d05f294bf29a5769414fbad99554ae52f8d7b76f110851407996821f32acd977a175c5e66399a0a00e8c3fd8ff2b9e4e41e3d89190ff98dd7001513616446afd38591d1548baac85f6bb9462f4c3230448beab5d4099f879851940d55f3fe3376a5e3e0758e1f69939c20f5f15ac78d3f0bb2d3d21ec8665a774df06879842c033e47003f96442514115aa8003d6b1c492a42795d4a327fef01272ffa9c2fb4463f2742c27da3739d871047f15eb946fdf44800c97e4db550f94e69242a39ea504e90c60b5f18d10ecc47764a2d9480988c108c15d6c112ed531d77717ff5e3bf2b42029bd29ed349f134328c51a3a9f85f86b1734e069c06256c9c2961fd397a23f4ceb08f71dd411b6d889071b5ee2378a7ce58667040267d0ad0ad680f4b84f64d91dcc3ea4668d77d1285e8a5874b39428de9fc8aefa479b38d47c4d140c8d2243a28588c466d84360b4cde75aa0290500d18623cd4b63db19a5181a903e0f75153f80e0a100e9588b4564ab7e641a29548b803a1014ed81d94172ad32f4b7e070b88431361c846ecf37ad95b49789a08b9374ec133c703b91b7040efb45ff8b083f1720a001a3af74986123967f920efac567591b40b00abe0082e254f2975849825c54b839deb3ea92a548191ee2b1fa2183e8d9e139a961ff1abd1e7a5fd75cc6bdf74adcec2ef0ee0348da33c29cb303814f1bf8bb1cadd398152327aec2311f200789f922b814e7f89e3808f0a9ae0977f766a2cb3e507adde136ecae179439cb0f2fa6553e81bac4bd4620e75a7516d156855d72f16f25b7234342d5bf7c70ec1298c08dc867404f4f0b9014d7e0e2abc8128ad0333a616fc327d9a2e0df589fe2bd0d41d7bec11a0351588a627294c048bdf8f5aa64164d02e74cc3ddc21065b94be86275e5a84a59b34117092fe6b51c8a2b1e694b77f58604e4f0aaefd7e8a0256f42b58b80a68899f56ea0ccf037bef01a8047490a8778e1332ff008c28b5773bdd18196356478bff7e0d0a0e7a969d271c279a8142d812a234025bb9e0fd672808b71ad599358c0186a0474510794c57372d69dbccd2f14b4ca63540fffba5f04864d3299816e38e49dd9b106573f143e71a8c110ae31e4bf471bc660dad16c98f8e8fb115d79e179a36c843c0a773098a90f55c618a2f6b89610f5a7bb562810bc632618ea25c96756745b1c388c789871ad936a84b08a9790a476c14aa7a2a62ac2515089c65514a7c0e797ce2e17a533d0426d37f35d32488e0aab5525109fdb4af9a65f65a9a1b058deb54d8d97aa9133ef6266b89b49b47cb3a4b519913577c8d758ad2a2112686e8e063de8162928f23ce2f429d97bc2f9c4305aa48241a98d10d62c6f4ec33a25066c98fa1debab11528fdc4bd59d7e2c0fc571c57561cdc876bf4cb0b85fc29348f34ad1547ea853e5fe6ff294a42999cccdd294058e8fcc5b4626f049ed984b339daeacdb7fa2929e64b92341be61f84abc970a35630b660d2b0ec7431fc3399fafb93ce8e1338bcb47986e4959c00cbdfe094c0a3b24c867fdd98ae225141ff13a3c2029b3fe852b96d5661ef62acb8ddfb30a3f7c02e89e301aeba0876971d6f412d9cbeb07719f1b131ea26bea9b13eb1148bf8e11796977b6d9615f04e2057a67d50aed1d2d0cda511758b3acd6631ce3db71a8e1c11877ee3fbc6a16de5a470f7259cc265e7a632d826f0c32d5dbd719d01e65b30a92ed1443387549b68431eb5afe1dedde9a4820d50d445bb533e46fa4f1af8e7a78a851503a5de3939ab35417b294caf4cb8a290f8451a023a930bd5f3a0bc8bfcdeb77a5a32ce2b00068fee204f837055306b7059e09e7b17ebb2c1d6561dcd2c65e234b9ef0a9ffab511587cab35833dabc134c306bbf3b676e25b03fec55498c12bcf3f8c08809e8a2b7a9afb3bf1e420dc729852343ef5b428a96255e28ad32e612292f8920de19a3b80ebd23c24136eff084d013d280f3cca90488844bc48c1256a62a7850a9376c3b33ad49e7c1a74bcd7086fa45701e9c88558843f6552a4c24c474098586a5e824002e8c7d515b704a04c9f069fc29b2bfd9124a0de0f96c11c010a9b27d371b0a861caf4f59209a2e765157c87a7a16982e5b60a1ec1622435d62aa3d9c0c39308b8c619c49c60cd4d9618f2a7c19c5a91a4bca9824f10fe8a44b6a6e539c5c74a08756d8c9594d10227bbb56fe4d642fa15f0081b44be923d2fbaa1f10950a2d7946b2bc59d7d0b457e9c50d154c3479eda2997428681892883e1fb45cb73786a6f0de0028ab8f3e91d83ff1f0b6418754df4283a73f64c791974ae682239af236fc1f0a58900d38ef4428bc9f69da33fe91fe52433cadf7fe7b59b927e12296c623125968a06b7b0fcb313c8e72e142ab4e583692bdeacaf997b1259823c05ace671bfb0b12d9401d90b9656353b1d692910723a026e5cb71e104ef2a9058f61b2a92f38e3f7024092632bd21245532b2aabc57f3d54dcb4db90a5d051d74ddf4e6cbcd6622ce203c66b29606baa42f5b93279d58fb0bfcd83443857181df8692f04b1616512935d96a3bc1e87c6d19d1681d8f5fa2144b9851b340d262484be2cd20ed802493d466e94de2b8daec9887acb5dc79dd496b5a73a38e4191d6f2172ba4b81c0331ed6dffdbd07d3977f772473bd9378cf243837ac57048cf9096ec945df4c121a6587fd3ea906f3f0a8126dd236ea25a47bc79d313c2a159cf65d08cc0142317e689ac0b0c3a3aab6c6d3791253a0fe3ec3de62807b0c3b9533551d0f62da04ffa2c1a83b5e1b7614688af210f488df65aa5f40f28167994bd80e74d26364d58f982fa564f744f0ce0431b24c48602c710063c426066e6ff08ddd2f4b85cfa1e2666a9eac73a28fbe53b098735e66bfaa03f65c09db40ae0e07685b4cf97b778ce99a281596f8e6dba3622d351b111ea5f4ce27dca212aede81e64a927ed14bccb14b72f4921721794830854c31edb74c479f292e4d07d9246a3a4853ab353dc26f21a6fb26e1f7740cf735a3229b5258b29949ca855ce69fa2747cacd87c0bc1df7d3f5db19e942a5562d31e03ba9704f4fa22c37f28195f5c2a9f1886c49bf89adef3d77afbd39e42752ddac9eea3670ae309d4b9d69f72a4d121bc4ed56725a55c382c3254a7428211cc32c79b0bdb6ff207c2074ef741edd053c972c0c9cb1f390ec9113338273480944314bd41285a0ca8b25c1c8c96b8e7e5c422f74742902e074bca802000ebb46b73e755e1bfe5c88ae5f919a525594305ba611e1986dfcff83209beea4b0c99f0d9a813b190a10cf134f0c94fe5cf6294aa37c54932862211b457a22af6a0c28f4cd8f7e66a24138132c91523ec6a01c742de76722ad1273a06c50082fbe5bee1a69faf37106eade008ebd8f967e82c98ddcbb2b4354589a1693c6340c296227ee89ff419bba5677bd8992e658299023896262796d57a38fe7cb301ba34a7cd6c294bbd92161974e6034292265546a221419d4d7214259c03228ba51b5cadeeb580c4a9da12445b478d229964072c5cc118dc93ce0b96e22978a87697448245d5ca693fc8e76c42848f03a68457cb83f1b2634e3fd1594a4fa13b9ebb5a0db64543af9604117d6b11629488200c56a953b5ded2a1f70c463792de4ef240fa8504c1e945181aec15c6e4a37b9939408df5d5aad614bd7a9a330a8cf6802e56f04a1cda1e07674fa08a3d80e5a93f1b5a0b055943fb1b45cb61b00f94cb0d92b951375171cad6f44116fd4e9e1bc79373a693a107c5568f225351d3ae2c6c8fcce76203d430d58787c55adfd9cdbbdd2016ead83d8059c60ee24f3fc48d13ad04120408c75c2e8c62911f33696e95d6147cc11e9ccb7c262a149dd6f6cb829e7b9e54b9ae72b32233f9da4b79c23a8fb9e00c502a84caaaa44a1e1fe73fed2ee3ba3205ccef88d6807af3a968505ad157565915aa86b33c98817a316bdcb7c4ba3bf1bf31f8ea5f65c3834071b20939946b9ed9cf0de40b01a03b9cf38796e0e39c01d4d031db0dff29f147ad5cf5eb9972d84c74993af115a4439ed328a21957dfc1270f9cff81e934e1c4b42a21ea22e240f9b4819df9ffa75793e887025c3338698051815ddb5dba4de4a6168ef7bfc18bcc4073da38469527a2f6e563b6546d596351279197bc6c9d60073a8f19256f3fffe22c99387ffb22c6310c8e2c496e02707dc6e6389d437901a6499a46430e0c852fe384ca4c1fe9d3a974b79cd1242c62803a4de29098cac142c7517645e8f1db31c325e5c7054db63473313e90c1419ca6b5c29a7523c69133196129cf687093c08a11f12d8ae3b86129ea793ab98b4f72dcc770180e8f5738fcb15dd3919d10869a3c817f0d1be97e8bce8a15711bf041d46c8c41c64a164faa18e09ffe239e0e6db236e24ed21b6dd6ec23ecc5ae15ec11780c88eb97af5423e61e82a9f334dd21be0518898aba4c149a44f02a5601feaec687e503e9f6e5926692c6d95fbcacd314818b4c7fd4f29236f6c2a8ccabf1925696678c263ec31a0d0046b9cb6986c9a2be7af0c9d792c9622b833e7b06144bed494e206f997de8d4b6f2c9b278c8496b59bec472e4ee1d8fe05d76554d7921fc60df510f3c19eccd5ea60c7725e81c6be6b437638ae10f8e5e508a3f1757c5385d4b4b399476343c6262d8af6a67f111331395900e5404473a6b1e839c8b02c3082830d4864db4cf720707927b294b467007a700b16c158e90c034a5cfeec80c1ca62ce8b2d8468cec8f498d1d45a04bdc76d1f6c056f863fcaa96a94188bdc62cf4dacf78e7afcb5ba463c1351360d3d447ff79f7fdb53deb772df5d39087b9f02086833e6f9b161789d83a09b2f58f6dd6c896b478004c2ac4616027c836ad9237bb8ebc27f087d7f60139ee22e0049a5bd0e0850cd396384a5095a78c8c4468e066d2d2f2aba46065f5c0fe57dd6c2df2fe7d8bf18d9f413d16be8891303ed5d6bf21f53398c690c4cca43be61b941121291276b0571553e6897cf6c367d344ec9b6d114be83318f6af717172e6a19d918076a6977b7e52cbbc36e42d6d6150375f7803e8748864fe5797295dd2baf80ddd683608a9008b62e3c0f005d8df474b6c7e9b38fd6dbed73270ee05484b0700d063150567da1d2e65d6d500d66330ba97e4708de4746ce26ec1629053cf60143bb6629b2dc5d6fa6d1d59f2e8d196b97897502db6c92fef7c356cc348cc3f7635a2225bb2844d0eb335363bdf4b8e43c3ba6ca33c764fd8baa97ce780063be0d912edd66ef66d5ad584aaf2f330723895a6b5bbb8274f6c9032b4a2bb6e92af168284f654c67af4663e4a4f8f037fe1d231c9af3adf5c7ccc38161a4391eb34461e6492cb401135258d96793386fd0b4f9cfc8b038b9044b687f5ec29069353bf03cbfe3e965339481be28666b2bc0f1f6a794d4b7efed205c6eba61988028e2630be8c1b47a9997b99f52c867b8bbd471f7ed685dfed9ccda4d743c1c7f276cab694820035483356ad10a3d30d7e5c5d05d0f097887466141e679726cd51b3d1363a7e4b7627ae9db390582204d9854a020f60ea9f92e1b3d3203f4115760b8bfddf9c9a3d1b8c3dbb398a862f7f191c89013661173ba28fa805e3c5282a4ad508c1027b283025336a456a6582ca27fead4d63ed78efb809b972f8c3929b0d8d928170e037cf96f7a28f5d0d0d50d0a03008af6e7138164bb01e03eebef0e88a24ac7088eafc81cd8d529021d85bb3c40a119061c06776f7a3072ff36085a4d227ed4a09a4034c8ec9040d9ef9869364a1a54391b83feb0d2ae89cc36ea85f27b5612b4dac231e40dffbed2ccacbaa182636e0acab38563a1a1ae9b73d95a77d3a86e5c6a853aa92398c0f9c58c4934f2470428de57af931c0d4f25c89118f92e65ccdc7fe203df8acd96d0126260ea9324aeb2a81623ee1de05757446f49afce116a84768729025549e407f4491867c900c058cce43b034f288cefc5ec2c078b586d82cfc1316b5cebca8b8d51096ab4f80fc224d8220031d2c30777e824a8e4c831cc6794556ec2afe70d42212151a602853b4b62d0d8d370074859f8041a318583f1d4488422dd9184b13e6d07bf41683de539ed1ac7e446c998114421a495d031ce72d55bc68ab8e3e0557ec82b9c8d70285df473053bd63dff9a405181bc74f2b4e7f4739d486e3465842fa1f4666db8ce2600845dc9fbd4251e6c3c2087d262f73c99a8435dd306d56b1d504ea493881d215cca8158122712876193be9da5ec9e3ec5919c436100bae9be1f27b5888e3a30c300e090f2c446dbfd62728de800bd0aeff6522ebef5445f83ff016dcb738d7bf38a1f976708a33af9f1e601abbba8a5e197ef1c2d5c29030ef811ed004c5eb4f5aa9c9091db9a231feb3d27fc03e72c6dc824426012df16898da00191a339f59d6f42e296070b42981126dc8dda9ca01f532815be5680f336f5f23e24bffddd56c5c1d52877aad718fd4a15ebf16a48a1ca3fb2364c50ce871c99a081155ecd7218476db59d8437231e7af6b38809b9eb971beeee256755019a67d7bec1a8f842d3fa92baad68a2aa39c52c95284c9e771bed39a31d6e2821182224d3291dfd8a1c8811ebaeb5d86c00a5f648d48dc9a4f90f045b321a274cfa75a56b44d83802a9a8d49ca83c045eb3e6f139ecf481ce3d7edc1b88f44cb22ec4ef8506611f72e619c1ea6a10f85e5c611283b42c67e2774905e02ee9016d37182efba99263feb29107f9147f654124da69ad62d5dbd874999aabc0b885948d6f93b71ac7340a19603028752b1f8d60616a1dc798359cb61047806951449ceccc869e495ec3fa23aefe8d9412c9fb00af67d5458b604e25449f9f697a31e8ece65befbfe0a048f158f72feac8b1bdfd45d74f3ae110694519bae286d49362470618a13de2402dac19750d0fa9d50a5d84655afa78d3f19645350c3a46e494f6fc132d2ab48aa1effa4a69097a7b93a523c1a2d31ed76c9ff15f4842d09bd829d082e3d14128469de2a641fe353e82656210a8a50c846d2adcf2afb58e09be11199ad89a5f87c990f1b78e5aa72fc01fe7106c005c40a37c55a089d71fdca0af99ae0845e95c50c090e7177ff9748ba29f2dd0901d453934cb8fc632c98763499b5f54dc1318f44f8c58fb4e0ccb6f8b759ef0db6dbd8848be138e4e4935ea5d356e8148db95b9c3c2dbefbc62153d8dca68cbabaded9abfbd07d7a4518eeb1766fafc527eb56f74f5bb054d339b43cb369875eb1d7201194729abbad291e390a24a26208c9fcf1971060db280f477cb7ac11f1085494e16b7d21ab72a75a52e431a38e994c9aa6e8ee05d572f58f3cc4b430d0951c08dcefa019660029c82df543fd6a217e523450c8cc87de72568f97c2fc5b20cab3a65273b1338eebd14c4ceaf7ca24554d04f235eb1b7053ce4a665089df57e753dbb5ec5110095b246aa0b351d5c14bd11d9e2306abed048c19d84459f4264cbcfad7c464348b32841f827e668a9d5622877a4ac43aa2e853b150873af478e9c8a183203a9e63a03908053685ccc5b03477b7262c887097d453afe8b086c5a78976b438a0b36d3e50d9e8892af16827826034e5113a413bfaafa8929602db5ba4178a01fa140a484fd7bad6b308baae319081b94079bed3a3a4290b89ba6df8510281440ece450001ed6e276b514e22ca95d24c5289aac7dfd6a4de4a4ad88e661d4b77437ccc056c07d1128884fcb1287d246632929b0bfbe0c99d1087c610b6d03057213d397e8532b3c054ddf23d921a311c706feda94109228aea7fcfce3fe458a905081080e412b206ab2663a8b604ce4331d6459813a23adb91b4e9ca1c0caea681bd2526fa7fe00e575b4a9d42a35f5ea02070db5a08389d7d69d8d4ea67b25b36cd4b5ad5404eadd242257c226dd37e66a2d9c1a4bdd672a81fcb15ab247abfd55e465ef2ca5de91a45ebf2c8460397dd34af443f5b2051b80f50ab2facf308e763de7c8b1af0527133b8746419712c79440c2b38fffe6c95a311b7a401fd9593e21aa32eb9eecce25c3bb4dc62148193f9f134f982a797ff30b0b10032ec5975c20eb6cb4be968a30a12e4b69a997504e34636f7b079e5b7663ed0419afb7a74ddfb667bead49b5ec2253bab8a0d1720fd10aee69efbf3bf73aebb0549d3fa5173a4632161d4f51afc61908a5ba8b79f5ad71109b32dbbba030caf9bc539f30e618216c744b0765243ba0e1f11d701b1316f3dcbf9672e29a1d339d5e7411d36e7e82a7a8b7a480adcdd719b4ea2a0e936d2c83f557aa0cc8dcc972e60cf9048dc103ec104830af3428908e7a3ead2e5a2108754952f9376a9f44de8e31a318013758d1d01fcd5dde5912eb69aedd2448f87c2162189951341f0862ae43a11158309c7b0fa391ba04e0045cfcd2bc457d21891dc494ea62798ca7d16293149129d9c47de5995c51f465ab1cec0b692688e91ec19211996eb49562dc43c958a1e3a0fcbfd2c3242b9aa6d3f9851c694ad3b842da7eefe150637b7e740001e4078d933dde0184d99ad0a5e6231d36c18e70adfda373108dc9bb44d8d65e51562f03434728f941dcb138ad718e50b022236181e327f6230a8c8b9e346bf2531e01a1bf0591406ca91d9e280cd792f0a782600996318fcb4dd29db0500a3ddc4a224bd52881fcc77bf63539d45a2c499ead0d7f609d6e214b1313ece49ccc64ec5f060244cd40f0e4dd8795b6cd559878e514272a52cfd150f64445b63150f73f63039e4b0cfe62f489fa788b1747c3ae66ae9ad9c80e5264b36a42d4eafc353b9d297d5d47a31921ff37ba43b17ad46808f235901c0f439278c413bd5728f2922260530aaefc572d5066c61ec038fa883509829def1b93fac663f97ff6cbde7e7952e8cf1abaad3ddd61a74e054d45c53c626f86313a19283181661696425ebab594bc6da6b2c1e3c45b194544f40836b2b1589077ed0b8e8598513d55eacc978c4fead821af1878df9071f6333cc31b433496980efbfe43de881d08a040156566fc5edde73e9f21db7577914e9ce4dbacfd77b4d25b2531f3a98436fcfd2b7e737e6d229d1e2bb81776181b8cb0a71fbd8494793b45274296a8b69de715579e174c70104fd453c60fdd2aadf8d6d67a2038a1978d9425bd4bcc51d663d5b42a7a955e0c382e179e87d99cfa1d9d423cc7d44b1de69de2ef53ec2892e096041bbb41c557517d3f8c330f0177d0d06a1b04da72d4ef6903b2730d496072417330b7b7a4bbc067221d82d0cb41ffe21c4e40034ca5c376215509a4c4c93a8aef2873e4161a78f886a2a7cc3d560d390110e9eff757c2a9144531f2c14858f0bdae9170b2cbf48f43c78937c7bc8d55d279b417a917edd55ae11bcab0257862107ce95026f03526a7432a628de82f0d2971b414a4f6a69f95b6100088ef19a300abcce4403f49204d056a25283742dc39a1a0a5df3c6395c574261c4faf39644a29e7a895b062f84b1852d3052d9e0f519ab52fac53e87016fb85bae97a50d4a36d99f50caff29f171671bc595d0c32a6b6dc06f19c265cf77bde75498f8a1749419ba2cf688009f6f7f06bb7f235d1d12055bd6e389997c9dc46c230f85dd63386e3de37550804106757962d1e4e02e10d3df4e4bf1c90c71f1677e49739d08aa6b7e70e014bd0423dfdf4280691e1c08b804239cda0365628c3e10b01d88994d79f0efacdd973a94a931ac1c6262a41c8ec85a6e041e73b2ea9c5b0c6eff8531e8e98f3febe920dfe4f3b84bb41eb3a05ea61ecb1943909c2a7d5ed382cf9dff28f0e2945655c0779ecf5d8d5a702949f741dc460b18e98d0adf8f5e8865857fd63489e520bc36ee974895a81bd897397063140317ad62b40ffa94995ee724353249eee0552fa792f4589ac87fa9f3be612ea565102a929f4aae5aba15bf0de62a56ad112670e8261c79c9a279942fd7ed1beb1c7d5c29163a2568dbd864f44657d3ab3b6319ec21701ac73743af377a51ea949027d13b353b9c95305cb8412fb889db121d59eae5eae9169cbf2cf715a813b89f51efb7373cc0169423d9bb953bdc95c84fdc578cfb708f0239b17b19f5787b83076c593992bd5871c75db9fcc44dc59cc582293c7a3e5432089c4651275791b1679dd96d12a05aae4b7dcf7065d48df10df0302bc30fc2a6f77de9266aec77ed25f01ae52353cf777a53ca95c921d56b553bbc95e327b095e1e3d147a209007d19d63b56e1ae3f9a5e96de92557f7b6d164d6c7f26bdef6ee88057268754ef2aedf8568a9f708742ea0dc207ef5d3addbb66772d0bb953506665ba7dd4ab2c764abb6272a47aa96ae7b7720d7ed6d99d65380983f74ddb0fdbdd97a733e4700d59cc58d0488969baa4471ea62152797ddc5124c87f92b359d3463589d000eaf337301e4a54abcb9a1ef245eee16b3de16abbe5612fcd7bb1d103610d0a6e00c09191b3f7f081f4b3503b4a10c18411baf2f43e9c3a435a15a04a50a07f2a518b9a5c7478ac783f64f0b140813e4049d560e9a3f66fd7421823421c738801a06d8e87c34c42a36685b810d9b4ebd462b8750255db893b8e780bf8a721028b503021fa94df4cd9a6022fc8132643bc3c8580cfe293e6013e94de66a7d355944deeaac44d4255475529ed00451682d8644df58bb60e77b24c3ea1b41ee4ed920b08ce308dd6ed33343e2506ec55652def5f707bf2484bf9f4fa7437badb0b93d15c7c71b9430b47a92660132227b85861687c0951e8b54fdf52c71d935222c2a908ac78c9491d094547274536e387eb6d956274030655b37e1df4922c4827a93b2f767eaefcf80942ed9bf0e370b8b4a8d4812e974ed4aafd25c4f93c24aa89ffd6f9b2ef2db327a0b8e20afc2608cd45f65e27978d30bfc3bb02beed2762670a9c57c0a4e482bc78355fa1d39af5cb5ba0afa16200d7ceb3d7e082ecab7a55ead3eaa7b9d1955e99f8a8cadd10cace33bc853879ce5975440cb4da14ff8d7763c9502525031b34dcb43c2db6680dcda68e13c2c87254bf651f6ae17d5bad701701c3b50e0fea6c51b70f6e671939b102c37a5be786c9acb65380de3bd5788ba532588857fe20343d892d0d50128908cae5f8bf7b4f182cb0ec12b5665307d87c4a41b72131ab32cd499184f25826e8606425c05f2dbc071d4daddcd605f151adb3bbab5492a2bfb49ba89f01923bfa91cd4a33c8220255b462fddcef5a26889ab096ffb47082d98a9916a794c42fb4eb27e20ccf60a9c2f11d5b683c4638373b85e9d49080f56ee33b19ae9863871deb3af279b406d5720ca58d43f4776a2b6a9f5d6d49d2a08b9317975461a3ebe5737b54d202357c0a3ec28a26a45d508a02af9f625582b41c4e777793294991cfc0db8c7f0e37a55541df55ccdc0a25023f98085153f510450bba413c755d5cff490aca70eb2247a824d20d93957a5440298069ed0e04ea773ad2464110298ebaee282e9e6c62ecd43f4d0bda8115b7e2b4c478a7f10f52915d88752542778e17df3388a7bb2335afa28d6528eb0be1efa17a2b7e02ab41d13a0e304b4756379c9c187b4aa6093a0a9cd520f9c44b6d1d81a4607b788f46a499ade470950271ded6794cf05bbcf9b5acbae2c0e04f14d568d0eb1c2d3e9895bdd414b4c358ff249b04e43bb416d04bca3bc4c0f106177bf8ec482a3091c94e7577dec4f6e0ad9e7b02ed428d8f084eb2ca6107b9212d4c3d0c96b5ebdc7157637f0318b10a32351b05a94333484f23984ea01ed7805d6dbaae79b902b4d898e3fc187e0fbb8903559a424880ecd691627420c95a8f6ef2700109b44b1e6c4195b97607bfedba2ce5692f0349e51aab944fab5f73a3ab57f1a9feced5a38b1b988c5b7da594a7d75775d3b95e32f99429186f17be9e12cee4a245b156d7df0e03974caeea40a2e24bcff550aaf3f630a8df97b3e7dbdd73b60883157b15dcda713e3513c1643c2dd8d4db252d116a073f31629642d365d3d1b96c2fc1251c7ebe29f4cc178613b8af54f6ed46af60988776c1a079ca93b5c0d6ab45426dcd2d5c079ae57139528981f2e93a8ad49dffdd42f70a4d9191a837047c4331200d5a94168f0fc2cc48deb767e7eb142d02d59b9eaeb9284606e44711876ea6445297c6a7b1f7b7f5991f07ceb00d8466d8fe9209705028dd188366068cd626fa262fb4225a48ef0c29b36003a90103dc79870b70db0e1da1dfb18dd28f1260b1c5d26a5ef74a5e38170bba57caba97d04a56d43bd3ed09226b0fc4b94e180c00b9d0d0ac5c24ba8189724d2d16268c12834b9151270c23bceff764f08a892a43ff8aa1ea2291a19e7b4f5d71e7b70f16c0724c2b41f20386c10a861ca1e51186f3331ab65070097be77129850e58013ece2796a16675642e0782e36a49ca47cc38b63ecd28eb591e22562ae0aa8923934957b60a864ac1af9284834c81e7998b67a94613f4080c98c324503a0f524f7bbf4ab1523d738550ddbbfb3879fb09e99737b12da66aac634b7649a12d625e3444b54cbd8189effae305177a70b66dc7954d4e01c487589efda9d1afc62427cc9093239ae5a2f3671733ca0b58c62ace70a61556d7052e5e3601fcb8140039ccf73cdf384d807f76aeac6c975a02af0a1c41cac149e87955dc8fc1b119c798d14ed2a9a967bbc7b399a1f3d81c210f7625c51f32fd08963c852985e2bee66cc86e1769901fff51a9120f7a4a133795533ae3b49ce6cfec06355f3e304f31335bc785eb45972a143108e93e3e7c97902208559a6b696123def48ac9c2ad7b9f90152dd8dbd0c10acc147e0867b6102f5e0a42a01210eaa66483cdb9118be064affe51fed08576bfda1dec7d3b59352b4faf04dec798b1619f6622d64ba37fa669c13046274dfd110066e0f8fc8e1198c83dec00f5e0431670aa3017ee7437a8e156dd8b6fe0a0e7700334b8d122744a80649bf73f74b5fd2f0023c55b1152600b9712a49801098a383bee07df31892bc7bdc86a628f3472befc76438f04cb6ec2f9733caef02798e408af270bd58fd7bfb5a254d6dae2b97250fa5cf457d28449c6a3a9356a4638e2bb31e1079a9f39120ae398cdf3c4e0f2c4fe42ca645a313940008de1e734a93320d3615d53948dc24c1040153b075ff4e5622147364ca1518fc0354c120b5244c7806b2daa9068a3f017ae1484a76f72dbf8fd44eb67b93ceec64220ae9ac18c2863321557d7a37cf5dc869c0a3751e0efdeebcb104508d0e1b9a7a8b50f21d559664632e7e27655d28a785dd64373ea6f8a4fea6dab261a002f4f1105a754f32bed5d2a80447822e122d3aa7c7280c5e3beda1301dec3cdcfb784c9e2ea61db4bfbe2bf2599590b123c2378f603c4d3553212326a77dc094432595d432669e0ca3d36a3cbb8a9904ea1da1a760b8c4fc009404c0214ae957f3705ee078975b43f705e2ab81cc54eecce1174fab67a43669aff6b84b38049e77a0327bb27d01fd0f586240ea6a78a08f5cbe48398aaac20d8dfee45be9d5a24427bf229c29c8386bdc1af2062f1f90e8c7aa1077dbb275b0b00fc3216f2e660ab97058daeeba42ebc047df7d605a1cfdc0ecafb8f89aa366f61a7e115a25d42ccbc1177b25f6cc62e7d87b2b6c8ad0805ea508e9c931e1b6037c64da89b7c63d8877939e76aff452f58d59a9234ec641a657a65bc8d8c16fca7cf790640d7cf60797c6db026778f86b8e5c7c29f0e18fa27ac8b93a3e97129e28fff14a08aaef945d99e1cf05315203a71150355ff1d6358b5c0420a1d4e398132b594c7ace54f122e8eb02c972298cd0c57990cac3195362c7ebb6de99f98350d5915003affb73f3e947f9585dacecb6bac27d4707d6e195794cd6b94b9d5b472c61088a93ef94ec77ebacf2a8970c16be1480dfe2c735c1510c9779eaffc03d3ea31237075a7d2a753edcbc56883b2e5083baf7cad93d8f3d427035ef10036c06fa37e82af268b749a573c12e96786d9cdd26f1d729c9ad6c74d111993e6d9cf9119d79fc551e2d6aedd36cf12a9eed2cebb2862049050cfba16f06729fe64e904e55b91c78525e25a402680c581bed6c8fb7475122a4c2b71dae7af6856f5e6324463edc3096e64821d4ceb69fdb3b4a2879358c31998c3a7396799ad8e98fe98346f8b9a2b20219552c82b29507a621a0c9cc6682331fe34971377001a93c89767f3521a1a776b6cd6c542caa27547b18d208d27e6b008c25935bfa594fd5de4626edbbd02cf07da4a8e94e470202682b29a8859f67087ab141a961a1805f74cd181feb06caae13d6f1f22beada373f71103d92ec6235b99ccb1959dac38d2f72c4c21034a7f127e55302015a70359c548ce020a26868f21b33c2ae8e2f37073f0f28053fa7b916662cef57d936fa2f75cefe698a38eee61b64036fac37d1d1c123e2cf9b0e736ddbebede8ba887b26426ad957befbdf796724b999294019d07ab07f207446ccb2ddc767a346dace1269c7ba6659ac8cafd2d11eefd334abf7bdadd691938df8235a4d251530649643088a31453e8c1db27f38d4f8929c5cddfa83e86f598bffd8ef95ba8049659be0cd2d88604902b34ecf6828b8cfb1e7c1fffc88fcb833be79c330be1996560c61dc1d9db9a2e4d8bca7e205de4912fd1bf3f753469ea1802081df4adb5b57ef7f5bdc73230db1a4c7f5239a90b70f0e49e0bed13375b9c45940b33c74d6e72dc05b8e7384e62eebd0b828bd386bae99b8df78a4423bc71a006661360ed2d986960eb71d807719c85530ab982bd05c2ab0d1c6528a1497ac3c6d401178aef6d09e05d1016b4b387fcec77c8cf4259df294600ef7643cda9370737df3943b8eb94b812e9a297bc6f0fd4d1a4d65eba24e2db6fdbf63b22de4214ee816cffdccfe736c902b9e25fc13c678f669372a61464f0dc42510f6e16459d510aee928dd2454a996eac943d27bb171217c2e1842b9fbb3b73b5ddcddd3d461f72a4028e3fb05a6b8dd187302381b5cfc08a61188661189601e148e09c09a194d25a6badb5d6f93192b209dcddfb632465da0a58e418e2eeeeeededd2d848643fae99c73cef7f843f69e448c05c8de95c0397b2d8cd1874c7bda43e21e166bd97f12d80f1152830966f081146db8820e5a39a810257ac08514d40108457eb0041672b8bb8743b0100a6d84b3774a29a5943e133872d01f9284fd15b0c8314408566badb5d66702478efa4392d07260a40836980113a680ca918415125ba93b0cd1e1d1021ea0c8719d24adb5d65a6beb1c72310cc3300c7b2670e4c042214394c841c321b149eeeeeefe4ce0c8e1e19057c285d40e41b1c524ac540d8c69470912d569e6c72727c991540c0ccfce0a09cde9f5a393836dd0d87a7a4467e4cb9c2447523386676785c469fcf4fad1c9b139e2e2c1594994a459f28a17e6caf0c2f89c358a4b65387dba674362d1bb522f0973ce18e78c535a1c6badcd329a373cea910a8fa681e9cb3007f118b5084e9caa553b712c9d52500ca37335a5a0383d9234629b596e82d37b2216b1884def9998a701c3dce569c0bcc77b30fa14ec3935a99de1c2dc179a179a971bbc9c5e6ef042f342033365646c4ae7a947b162f344270d289d335366d280d2799a270a36c5c12645b06d31b26c7793c1b6c96ed92e7bc61ad1c627756a14232adb9b358a1bc1ac2271a882c9f6e40be1587ebc8163ffc49d93c0b2a57be195c2feffd8a5fc6447a74bcbe6c116b9387dce3944a592ad8f74c52660709402c7299858e1edbbc295dd0e8b65285d47b8b285f3c4999b54860a3217d325bbe3a4492b8c74e50a83fbed8efb0eee1ee99aa174f5a84d57c62c5dd6470e5000010a206cefdbfb1655b6205cf95eb92dfbc1a5efdf6384bdb95ab75a7fd46d9ffe7c95aad5a752a268dba847600924d6421a3fdc433b5cec57f306dc4bee25f7720bc28d2da349f8baf4ef0f6e7e8ca178285ed863847ffbefc26c2da6853fb226293dcafeb17f95d126bfb1a75d11f239dc20ca269f1be1ed7bdb421a3f3a9cb3433bdc7015c5167fb8f3ad754277bf9493d62cac6fc129bfd69fa0fc3a7b8747dde69c2f259513a4730795dedd966b3a279d2efb892dfe703f0f2986d322edb3f7df621682b1302b41b3cc86f63390fe665d06d3491f63d167306bff6b9de0f44f6916da94aae0194631432030bc70f3dd42cd323991ec504ee99b6f0d2b9b49ebcbd3b7a36b4384e357a389a934c956471b2c3e8f429fdfd4364ea26f23e6b0087364c51548a542a17e7c7a44df5922d03b06f5b028167a98ada35c24b23d2a57c54ae9c0c274891cd71a3c89b3505e922a0c95a11c05eac2eee99ff691f1e16361b6e06761be2f2374344412fdd00d160ce9f0e112983ecbb506362891b4dbdf51ee2854cf286957f7b44fc5695606bef488ba2b087f1018d2d12c3a7a54b3a4a2910e9c5b3fbf0011ea6059f1313e469430af08638f627cdbf488a2842fc2186d5ae5a876d4136e8e318a5c1743f88acf36503e8f547c7e2cf392b36cac08b30d94308f5e4598dfe441365d0c9bb669128511b25c29619de91175222c168b556badb566ef38a3ef2e47f9c4b42186484cb35807652a50422702ba0ad0653cef41ee3de6de67ee72944f1b3c86baaba7c5d3f71f7ff91253b3889efe846916164f7fc634cb8aa7ef2c2fb5cb49f4513e5b159fafb39ca65972db9cdc5d4609acb91c25cc5645982f287461fa5b067eee8a35e87faceb22cc51a76dfaa691344eb34493cfe86f2dc0ec4560c6029c2b405f314c857ba602cc4270160223f6d0d7cf422050adb53ee86b05fd76c41d04657f725239d0ce48ff829fbb307dcf51d93930fc1ef9c4167cd17145b3e2399540691fb28092c11f8e269bfccd76f7edebee750ad7dd52ec2769ba1013b7bbc72cd698ff5961096fe77ce9419852caef97352b149f4f9f624f89a5e8042968e164041d2ca9c21b72f4df88252574b005229c0107397560031672740aa6c3959f399987ad65e21c638c51babb77cb76d313e8a044f2e420c1f102848ed034429281c70e56e0ae3542af66dbe8ad12270b54c4e166ceae607fd73ed464c6e19b44e808fb7504310f79c8031e720a96b665780487b1b004b3c709b4f0032da0300d81c8ef1df2fb6db8600bf5c8bf3fce25cc60cb9a3033296ef4b66c75b2459539bf875ccf96f02f68af246ca7b592c48088bbbf368ac41e1b618ab343e2192d32defb69ea524da5664c6acaa4e66949b33c1da24b65b1ecf08a2da1922ed598189e9e9f56b3805a882eb5a6860b3ab12586aa4b98cbb572b15c3937cd923284e852618860135b60bcf73ed3258cc5721a560deb08f65ebcf7de82e882f1f0f80bb0f74e24b6a0f874094ba55e2937a57a9a458486e882e1e0a8017bdfaed8e2e23d2c464789d7e209d105aba981024e6c6191ea1275b96c5caad07bdf46a20b06d33bc0de372ab6ac78ef1ba64b94c56a22ac9ef154dc21ba501e9e3c2c892da09d2ed154ca95f249bd9434cb4917a20bc5c1f9422bb69820e9128d89c18949a283bdefbd9745882eb446aed09a2360efe54d6cb95d9a2e9744b9529e062303ecbd844174a13041ba34594ea2cf5ac2d306ec7d08a2cbe491ef3d12cdb2bdf747c4164fb9bcffd1a59972127d9c2960ef794497892357e8479c9718ef697469c61031446ca9effda859ec7bb907ec7d6ceb4d18ec7d073a9e115d668d4a6c99efbd6dcf7b195d268c5ca1efbdf72cba20bc151ed556fde921ac2d0084b53523ac2d95f007d397714ff7fb5a59a95a2b0bd307851e586bfd5aeb498c2e05ab2e0cab2630b8171886a560187651361186a57030fdcf85d6028bc16ab018111683c5603598bec7220bb95c2157e7c26030fd6e8555c1e2f15821168b3e07aa27299c542a457f33c13e1a436b4434c60b694c0da6af5daa4d1785f9c2e99aaee9a230987e76ba13e79a64b278582c160fa6bf65927a30987a30299c542a85832967bd7bcd989a1933636a30de2638df66a63ac3dcf5f4c0f5d0f120e1cd763c94d3400c37d8b9b8dbd3dd18e2ca3cf56949f7d39521d6e8c26e27d6a8c1cdaec464edbd31dd4ec7d3a3ced524fa9e09dfdbed5c57d22cd6799aa5bddbd1b8eb79d999fab2332dec37f39dba1480ae87c7c5819246bbcb4bf6e5242a5db625a225f427d86fc1ae87837979898b59225db825e20a7d8ac2f45ff6655f987e8c2d9c0a620dfa79c303a6af71b706777efe56d7adfd565eea76be15a6499a25773b55a759328769e39ad32c60b7d3f17489f4f4bb9ecea7fb6996d6408a5de5a56ec7493ad2e5ca15fa9cc949f4efdd5161ea3ad83993e9e4917eeb3cd638c2b64bbb35609f3b17a6da631718c771bf71e07497db2f316d01801e4c93e86fa0673279a9db69127d6b2f6782b9b907242fa6596c4b8f967afe1367a0d4e911fd0080b2d524fa34e8934011f82aa31e511b3edd8e97426fbb1d97a102ce04d3253f3967e23813a6ef27f750973a9e6e070bbb6e07d3e7be1c9526811076b814b870a4028e532c41042fa1045f8c75cf75cf79cf758f615fbbe7ea63dd632e44d99c2f56133dc634159d1013cfe985dbe4c25711be6e96387c5d20412406b2c140692162c1424528347b645f7c520ee11c2e7de7ba1e1fc6f0f6b1b1ecba8e761ce528108e29685f701c98e5d310a9a47073cee97a3931e9b44eb374ad56125bbcf7df3c50e20683ff495704f75d17a2785ec7837b2fecbe0b6ff4487ed7853892344bae9dd32c40be59cdc2753d645744f7d8733cea635ce51ee37ebb3e5f857d81e7cfd8627cde7758addc7fef799d8feeb9eeb98a799cd77ddcf61c07dad92cdc37eee1f1f8646c2fa300dbd938a3a0b1e7d8034339dc78efddbeeb703f1db1c5e4fd0f105b4ede7f3b0147f0ddff4cea63f53f10fb13f0b188bf0a02a98ffd05b7ae47f7d86b1d0feeb1904b410b4735e038c5123d780300179b05858b35e4479c3b2c517838ce42b09558e2f91bb76919c751af6dd6de176614e01a62e0c4e8742f0bd9bc65f4e979dc775c16e11717ce2ff9081bf8ca9437aca6302dc1d83fc6344da3b4eb8ef448ce1912f5911ed9f42895879bfba687f092b52cd68ec7d8f74db3683f5d646f7febba202c27bbc85263dc64ad75d3aa8652b510a5d6af32d411c626718f71cf7540b0a73745a88f655a86d53e354d93b0bec9f5b59bd8228b105bb68a64d3be763e28fd397fa33f8930a247fe138440773b1adbf0e4babc52d85232151a986cc956ab0bd81656edadcd52c5321ff4279f6dc92422e03e105996ddecb3a8657aa60e37cb9a9a1418adcd9c37a91e51dabf3d10de92e22c5b4128be01e2e8118db45b40b427db7288887bd606e9b4130c42b1164e1ac8156bedb6cd39ed9c73ced93394eb99fad5e16e8fad4b77faee4878c96d787db0e833a238c61ab30698965a26b60cb2a88b60fa99bf344b16799fefd7324ea274f412858b237ce911fdc250ba42b9f358d29d1e5116787eec78b0c092272a69b5eeccd66a1916383e210f3238c7556e99ed056f37f046036f2a1bd7b6592a2732800f383ec9863005432dbbad4f4da24f9f65c3c66854c3fcbf83e90a04400c41577858826fbc4c93cf23049cbc833dd32390a5a18c4ccbf4c8040f57723922982de28e23196bc8186b7c41c898b9b347db941d3de7b6e05a2ec62cc33ed3424a372588689ad530ac33c982ccdacce3671f23a516a434528c0644e4caef9f617c15bab36dddf1a898ebbaad13826bb55c87e9d3c73e82148bdff1311c638c94d6ec25d831d4625d8ccfad28c562c46a7d396717f199207412a16307970433e3c0619ba7776220c16945ee3187b5b1456e6efd3bb024f2c7283770afc73fe2399942f1e09a4c6eea063dc6184494419a45be778c72740412b1e5c7471af6ef0b0a679584a5d3fab2703d7eb62ef296740e369894528294e39134d6e046d1f44c8fbc0932fe4ee4244d3877daacc0bf0b5e17ea7c785df7bdf79f17765dce0b50e22e47870a3d3c4aace079a16c0c0335535115555133291cc7711cc7755df7dde7893beea38f8ee3bcefdeebc22c39ee484adbb40f9ad5ab563510ba97ccebf59241d9b66ddbb68de3b8e7b8eda4f3c16d5bf7dc775bb86d78039b480fe99aa6e9996e82e34299924324272787880b4dd3344dd3b66dd34c3a1f9ba66d9af69aa6f1b80025d6785c63c0f24df2257d6419b64dee60a998542a15d322cbb22ccb324dd3b4ec763eb42cd3b2ecb32c5b499cad70a250a29384099a16b6001bbb30c160261891b5d65a6bb32cfb2cb35fe723b3565a2bb1953412256da0b249c922b1a5995aad966662516badb5566bed5b5bbdce87add586b5be24aeaf257190339208cc1c58808d45364b6c6c6c9660ff6d058661188661b5d6af15eb3a1f15c3ea5b89612be215b07c9f1c176b270bb586aaec255d36945c7191c855504a29a514c3b0c730ca753e304a2b166649a90d89a98d1b9ec4b5d58a10b2f10ac7de39114b361ef0793ee180cf138a067c9e45f8f127dfef748825237c7c9e4b30e0f35c41119f270c8868901662499a7a7c76302ce0b39b81c7675fc3109ffd07f71d422cc9d48ecf8e04213e7b1382f8ec51d0d126dfef2d882599a380cf3e831c9fdd09fcd99f00a23d34c4927c25e073bb01019f9b0e07f8ec4bbcfcf784586a94cbe7a642cbe7d682013e37187034f7fd6d24969a55fadc3e60f9dc43f8e17323e146777788a5f629c0e71e4280cfdd021f3ef70c6c7c6e9ad8a27dbfec422cad7c966318c06789861a347a1b7d963aa4cf920a01f82c9f2080cf320adc2f8b104bbe7292ab481f48233d7c9636c0fd1206f126b6d8ef4cc6674924fc2c87809fe31dfe738c03ee0f412c4d1927794ae7d885189fe315a6ea88d8827da37c8e38f9002d3eff80bb06ee908acf2d709bcc88a5b9e3a4d842bb0ba2ed03c26c1d10e6db80f047986318e13ec26c1910e65b44984544c45626d323cc760161be3cc22cca64b0ff10a69497ac6b4798ad1061be41a45cd85f47986360bb5240986d8e305f9cb3c2fe40843906b6a70484d92220ccf700f2e5ff225f282f551f9730db96305f038459e483fd71a0585eaaac52982d4b98ef0f2cff1b3e5eaaa80284d91220ccd787b0a2b0bf8d30c7c0d8cb49fe2b61b60308f3ad717a617f1a618e9183a59ce42f8030db0084f992c22ccac1fea395ed21ccf60220cc7746e8afe22e192f61a6a9f2129511e618a230cc225006bbffcbc49830e68be99f3277bc446d5c537989c638c91f25cc31442ec22cba2dc27c6db0bf68ee581661b6774598af8ad03f14e618386b271b6a63c2a6da6cb654121c63886e2814e69902818d4fc0c6dbcd648490ca50d969c2985857d64466b22feb73721266dfc1f2ef4a0cad1c1692cf9eec11ac8d4d59d4f513968d3d1ffb021b634daf1fcc3ac34e2bc7f3c2dc398d37ada298a0b2491dd95eb50655a6c65413d736a70dae9d164f9682c24a65a3c95586370c336139c04e988ca4a9ad39f8b876ac0d737c61d998da5881b552619a2ad6700d09ad1e5c01158593d604ec7f736023d6684cc1c61b0a97b2e9c0467b74d950b2bbcb20717f773e6868bb7b475302f6bf38b8fd1b4a53a132c5f259d8ab0e620d194ddc3c4ae144a38bc2bea19c14abc5715722d6e7448a65495335c95d6202e248fe86f2920222897edea0c053c0f2e9e7189c9493de90d1c4d554988732310db310ae03521699a2c80d9c70c209279c70c209279c70c28922458a14a1a1a1a1a1a1a1a1a1a1a1a12952a4489122457a54a0045fdc7fadbdff5cace1b147f65d2492dddfbf92305c52e4caec5e410e9636b42fb970e58e2943939461c0f36974914ae4cafcd8425ffef7ba2842582cc31ca4e2969d0f19da1ea1f0b02e5251327fca904a2ca6e15f1a5c7f6a9a2253f78dddd4638d2913c3b09601836e3a298d72a782618b2af9cbc1b27d52acda4cdbb8cefbe6ea041452b18285a8850b9494173062e00de45c4a39ea3ebe0d1a230e02467449002f4a727a51a9742a8ef16fb8ca6974716fc915aa6a49976f656f0bdb2bb91491184d66485cf95628ae094cff5bd556a55f957489c60cee050072351caa47a626d1efcba5ec91d6bcf900f0df37e3bfadd56ab53e95ffb6d7eb93f1dfa652a9545ff8dfa6a3f381ff6da7d3e9fbfebfede6e68bf19ff68afd7a7d30fedb66be17ff69ad56abf5a5fca7fdfc7c28ff692a954af5b9f84fd3d1f95afca79dbeeffb44ff6937371f8bffb2d7ebf5fa56fca7cd7c9f8affb256abd5fa42ff653f3f1fe8bf4ca552a9be93ff321db942753e93ffb2d3f79dbeefe5f765379f6db55aad9fcffe7cf7bf47a259b2fffe88d8b2a954aaef7f74c9aa9c44753eabf39dbe8f7dfaece9ebfef3ff6ebed7f7fa5edfccf79abdf9befafa3e3bf37d33ba203e00fc64ced49a6183fba9b45ead56eb85e98332bc7053e96caa4da583e93fd8fd76da6eb6d376da4e316270305edbccebf5da66307d182fb694d64fabd5fac1f45fa0682e3495a6f3a9542a1d4c3fa54526d24edacda79d34ede469a71b4c1f85855d91bdb4992f7b69d9eba5cd60fa2e54d450d6ca7eb29696b55a3f987e0b107692a9329d4c95a93255a683e98b4c6c7029ce354976ca6eb25376ca4ed90da6bf5df07b29fabe2fcc9e8c4ceba7d56afd60fa17dc3e63b16d9bcaea5895555995d5c1f437d0bf5be1f6646fecc99eecc9de60faee6f5578bd5e5b7285febd9ee26a7a14c3c170a6588323525b3498ce542f60fadf1c6eb62ffbb24bba1480e76076d474a9cef83c8f00e0f3bce9e1f34482bd9fa86619bdf7d389e8527f543ecf1c60ef274d0cee83eb47f7c1f5b71fb8cd418a35700412db1779098b69527d6bef15351633c23260eea87ed6f5a8ef6109aafd89ad633e38ca20810f78a082279ef079c27bf7defdb3977207fbf777777faf9b6df469136902816d9968826f0f6eee15ee699f66d17e4a9793e6d7ee453c57899b4ca1e98823a6fc0e9b488fb29b56acd8429d76148af0f728fde6e1ef51a7d3c652af226b35a50b193217887c3965d83331fb114fe23571b3ff00e90f2279fc95e70ad37eb98c2bfbc9f5f8c416cf0db1e5bbff7dcf81f97aab4753eb7c642fb3975c2bebde71256e826952cbb4c4cd6e8a3fdf61ba64f2f3b7087a0af4234d8aa9ee76782b0bb39d6669e73ec68b5ac898acb3dfe1d8e49b879a84bdf25270810491d85fce13bae166ff89b4c72872ac24ddc3a34487c3e91109a63cd223154fd2a3e9a958637ecc05e2730291dfa698ece77b0b620be7bd1772e1ed7cf44b8efef4684af7d097d4dcf9f3fda7595072af46af66419172266916ae8b44d2fc1d5820e0f94d043c3fa5043c1fa77bf0ec562267124ca45924ce7ee2cc5f22c133cf5e329f03a54d9fbc245710491fa385282666abedea55b39c349f6a60f7f42867bffd7c4fb90f620bf71348f6f6b3dbe0117cdb6756cae76496851125fb1ea1fc3cc2aa9e283cb08c8935e6f7348b16d2e8d1ca4b9eb21e7aea6df6edef9f3d65c33c9adfb34e1b63b19d45f43b11440041e1e14010a1230537c7154d22a7e971b0a948d9616422be4c9044b3340ec6feb157a1618a02fbcdff630b1831ecb3013086612c24825070c65008faf3354d888944901f18f611d4b470f6e8069e375c368d54fb89b570ce39e78cd6647e9ca289199ce3ab8a3096048661d8a7685aa6fda68159c8e5ce97788888a7b4c3118e4892fc2d823b403d718c428022c08181983c08c710b83fd6c79ec6dffef3b8eebe83d14acebf41937cb3283fdefe82b907bcc51c5018121d8103fb0f414da0026913f2a7dea1108aeda5cdbd1ba8bdbc607c8e048d4720c48437b07f034920c1ac82dda482fb3521261cc4e6feef1dcc1d1ea182e37baf81283d2e8e7fbb07a2a5aa5972cc4142ff02d8ebb20deb2f041f69961c22a247f4a5b5f78efcf3881b42a5479446a10b29a9c249307d89240a2d1d4c25112d25c53523bfc82a6e74b1f443e352b270230d537a44a5cd4d8fe84f21e2fb7b388598618c1b4abf1ce1fe56f9e125162f6211c6488abfc25a1561288c9bb4cd4d0e671cd87e7ec1f6e38d1ed96ef6c836d60581552a63edcad9d04d11e5514a69e6e88a18616badb5962601cef8710a264e38c71f110cf52822d1a3f82b10ca67ce39e79c65983ee79c734e77b731e79c73fa9c3ee77cc39d73ce39e72c831be8901b23861cc1f42fd06096d35a2662701ee12998a03fa2bd69f124bac052be8c9d8c35a48cb44584c3a57984e94f1acd3222a25976dc0c28140a8542a15028140a8542a1502823468c183162c4881123468c183162c48811d47cd9cd19a58c2499e330d82267c2aef2a1d083407f72f226267fef7fdf7bde77dd73dc6fdb6bda67d95bfb15fb68d3e0da8e4bae7c8cd6255d3219b9e2a22b635ddb078a24f928584e16316631d850994c4b948c74897245e68ba038922c549e10637644288131c94d01f3d256cd8204fb6f359aaa59e214303ed85f43e21aceec66cfac89251b1ff83c8f78e0f3bce94087be3315073ecf1ca87cff34c592111bf83c6334f079ca64a041df19120cb4925892a60b7c761e0b7cf69e0af4c977b6a2c067e742a88a259932e2b3af26f0d959126893ef0c27029f9d08602cc91c08788d03fa7e67ac067cf617bc4f2cc9d70f3731a0274b52c4e756438c24b1d428225ac9023acbe1f1b9a10023154bcd1aa2554274f79de904f1b977f0e2fb1b2696da47c7e726827b264773df590b7f967948d989253f01217d10d0dbb792037c965f4041124bbe7a91495aa46a47aeb8015c7cbf3cc592bb70c814cbcb1f9a27c80d1f3ec736b8642eb9e22dde8a6cc49dfe1f353ec729b8643d72c53f009f23ce0b0d1a95c537e9730f78f4f94577c66777c97ce4ca0a4d25fa80073aa0922eda0d07541bd040986f06620b8974d16c3080e402260b982a605a4917ed080556464c4002291ce9a2a52280038107382087255db49a06b07ef8604012e9a2a18a484204aa076a01a81ce9a2d1f0c8b1f6b24438d3912edae9a44301395ad2459bc12d201280804c8974d164e48aff0194ec48178d885ce1912e5a8c5cf17f59b9ac5a5606d8c15162f981277349170d46ae643dd24533c915ff1b0520808c0f2ed18a6a00357a321fe9922d912b3fd2257bc9157f1a3601d821f9e097ffb6a16ea4cbdcd950fe9b4a28140a8542a10ea1743e5442a119aff2335442a10f854249544089434972e64e145c3bad294c32cc98114a1b1b1920100804028142a1d0874220179d8f100824e3432f2304023d08044ac9002506a58e3c8183e4a607a15028036cac92c91cc96432994ce648787272727272720202811e043a69d1f9009d9c841ef4215098e5c949084a7c02ce98b9c444cdd394992a00814257cae572a540131313131313939393933f393111753e4e4c4c407ff22093d0c4c46407042536d9e101c3929f1e319c9c8420d8385cd5ac56ab9abff7de7baf898989c965d1f930b9f7e44dfec4e4de8be441892f9215125a392c2598988427d40915e3fbbeeffbbe7befdffbade87cdcef33f9fb2637fcbe2f86d3f80cfcc68f788dd72006d8f87d687c7c7c6860789ee7799ef77ddf7f9fa7a2f3f179defdefef177a9ef7030394d8fb79b9c1653cc64d70f8be907562b158a7175dd7755dd7799ef75e9dc1a8f46b98cb92a643330300000000e3150000281010864302915096c7c21ae30314800e799e4c60549dcb84510c2419028851cc0063080200000002200032b401556a54009f20ea0602fc420e2c5247d5404e792f095d0cc555248b39b12b8a39671f9995ba869ac0f66a03a4318c21962ba9fd2d0040289ad4031f335c4d3392c2d7a4ef1bf7b90016045ffbdc50a7071dbf617014d874526f5c3a1d0f252f1955529c5d55f00d7a7b03e9c6375f3efa10c15e4d1b81520e2977822a0ca38c03a90ac7b4ba8669eaf7fb5891ea03487e7c342a971936ae701a68ed41406e5ec5df852ded724d06420da5e94756b1d094da86c0d91e279355ff371826bec603e168b61319ea6e25bdeee827a7417c96c5472f0ec817c56be053b76117563576e5b6ff2531a149840c49c0c1221d316aba1e722b7b91b8da1c6186035e424324616685bd4242d1e18a6d7b2c8f8e8d2f6575d5c89e983086b0ee6c0bc9c2190b19b742208d3a25a3f467c8e0f4adcd1b6e547a1712495349318376420c9ac0f2151a8099b7a2421f21e00d73fcdedc32ef820de26caae9efcfc6d7326fb140eab065defc49e5e6398483e3c7261650b193f9b2783dee0d36ab9be12ced7d56a5ca0ecf5afb4cb53145216751bc05922a550ca56847cbcbcfa3d28a8fe3057762878e4f035f50b2fa71d51696a903075cb4281ad5391f2bd9b6015d847288212db588555cd10a479ba0024d5c071a70f4b8b3f0fd984beb30cf81c8d5c83e0bbf7e02e95693c1762162b10e41b6064f3044c6514c52b52b406bbd990f36a9ab0065c0d87fd7e76041393da5076885f40e7073fe3bc1344e2836971b9705de41c7b588115e551d46d96f81b00703d5b0f361d63bbbbbb9df8481944736139a8500f9e471b8f259147ae5fcf97f6f8b0eb0b6d2d9cd31b1048d4542461e134087a4db4196792bbaa871710e8feee0d83f1d203e04f9730e52456ef51a083a1729b5a29190ff20189ec48caa0e456414f41ed2784c34cb6c961458b28925b8405f45ed8883d290108c040eea5faa23401cdd61a756552a3cd8c0d4b83fd77a6a21a46811f38ed0c61f89bb98ee77e4da05bba83add5bb40da5070387bf2a6bca23dcc3511d653a983da56365234c0c8063122ca40538cd3f6254dcc08b524a311f11e68907187b5f65e2ef3d48aeaecb9c7c848347a54a82bfa2a4a1259151766a1914e3a351f5af1c6b0430fea4eaeca2bca28b724cf05946945683d9b510811415744bc421258998b86d0e5c68593f83d54062da89b3a0e2d6e0a3559bf208bfb2adb12ac842039b20e859c504bd7657d0f692ecfc2d20ebc6a2867d30a3e8a5eec2d01343ca82f6f82a5143cef5d2bbb9d2e9f6610f30145bc5a03f5b3157e3dd79302c240dde4cbbc939cb1b304378993197b70f0005367274ff0cb120f74f37ce0447f1da995c3369362ab75b4f749c725e187187873e120e8835ab79063fddf111b6901c5dbe438726079eeba02ce8ca92cc33e7a87bd6b4ad15784a72512997c797dc93793961447d4768020b4decdf79d576f32b417753225c388e81b3e41cc8789b6451ae74ca713a718a2c17ea21e2f3c8a125bcd2b8bb38f17c10da09623d4a360f4e293dba9b07a5c91b2ac4dba02b008f4a1ab1f9981b97ba93e3007ffc770f62cea53d0f88afe8cf52974ecaf638bc88d155d254312550b324b68cadbb4e1f17be8b0e735076e558f53f7b66636421673f45484ad801ea139a27363966767ec4cf421b221835fb4aca70ce92829d399e849be94e1e108e9fbab95804cd9f3329955de1db48736a26bab76b5116805ee06975047deeb987b2849c8bd337e3b101b62907612b792c9ca80febc4bc3438b53ab96bba4af2fa3d5b04854febf8ff9386a132f6992107212f90561352278b74e5d16256e2e183b070c0a6e701de6dd62abf3ca7d584ea37384e9ca34848e5deb9105df38354da04c4d599a23a08e26155181a219d35ea07605453b571b84a8a1a061bdab08276dd50a96aa441bba25d2a72781505d119295d2a18249a31622802b5a68edb804e1313f65c6856a9930653c3cee04537e488a08e62a66a016e160587a2ba4cb7e728156797d2bb812442c0849e1e206d20eb9c064daa07e65bd94e31aecf5482bf95b5ac6e0e0194179032c65dc5370965ca630a20326043a14d6e5f7ae55ab005dd4f1a15b945205b6f97ec22abb9f2bc607710e71e498cc7c0d456022f1f7cd9d3552e4a168d335a30e1d69bce62e88e8407835d328a1d44bb85f957c4c83b9722b9b052000c2afff97e49cfe2e56682a1e6cbb52ec9d07890f8baa75ce04ebb073278bd4f5d23f0ee2544406cd3b22af6a114a3241267fc337bd0c0593ba648df235c10fd98fb9f57e4d0e460d29baeaac939f46135ffc9bf8d4ad5c4398d09c94f20768c6d594291bf5f14adbb524a6cee50a5cf0ddb0885dd3c9fc9ded0ab8bd57c23506afcbe346e6a125517233134c51c0f11523e4fdaed526b58d96a27251993d3bdc681340b53aed71e20b696c6386dd34f2eb3299b9d816d2c5616036dacbdfea17d3f40948d43a9c5f4463c682001b9127c9cfa582c2174105db4134a5e496bdb02925922104149f06824c81e4f8957c3373b75f896f11fbe711ec8e062d0770626266fc5e397bc497c158021d980e4cdcb18b750ecba600ed7e339414d58ca0c736d184d29270b7f23d4ee20bcadc4e2a17612012074474d1fea9322d3ac872ebba2513b11c2fae80a42b758828de23d92acdfd6f1894e30933629c0c65592089c59597b18b7b4932548036499760b762fe1a81e315f88ff4ceded92ffde4cb43741346a83ab523fcd0afddc965f39037d5606422e134330022e0605202919318b670fa0b48a014298d014d6a114fd585c9a34e51863d2a9ee379da2e80a42efd62b489644a6ed8f40d1fd1d2c49dc1052fb49686b107c38fbfd7ec5bdc6a05857020b2f6202f5aa7a828ac8457497a628037c298e8ef56680347167ab0ddda3a8e60aca1a594ce55cd09e29b18bd7992b14d665a1859a04d032f13418644bf7c8e6e1cfa37fd1db467eeaed139dd8c4dfd82d7cc28503fe0104d41cda2bdf31f846410781a9ada7618ba627e134a72ab34a5e673f7baa171156f148e075f0e8ff9e98e7a0c6a5408c2fb245106ea8f0d2e756c694a8136598ebb6a2a39e751671c99c4cd35910eaf4268c722db57c585e8af459782e6b6916fe43ea644f0446f1e55c9c4ed7558784b5006095474916824f4d2c13d1148b4a12fb154e706d9a5234c178213bf1b3e12d720f2cd034b3e84f93f5d1b6e9140c92da432a9e427fcaf459d8cb612e3979d4c2c3096b9494614667287a7ae193fa925ca72d5fefcc451ed84a63b37b95a60ab35c9adb21025db82d8574e2605afacaabc55eecff7f33cf293e978eb4c15e56197849847b9904319029b56718fa55d00feeab40a7356f562638ddd14c99e36003a8562fd6bf5d8ad44bfb3dc1fc97538a79a87d8758d8b7c825abde2e9663670d493de738bbc8ac12b70a68314f2d94b2e6fcf78528cdbf469cc5bac801dbcc78b5399abc25ed6c5e03f05c57420e474e63b70c7b4d13e7f59ecb943ac8e818e4fdb4a2b15648f62e82ae566c0ef9954992cd0880a041f903c84d41bbb0ffe871e1e78e7112b0bc3981ede11b431ed5ce7c1846f312f939b4f40f493894c6bce5921c70febc154350bc356e8e73f7fa9b463d458fcb40f332b92f5e49acd85e414464b347c5eed96d21e8cee0272671f799f30ab0f733630b01022cc5545b06d0d8fc88410d5c0292ad277807821ff42e10ff4e4c8c4adaf26ea6119be02c11e8ede54810fa1253c7d67f38e5d18060c546437e5e0b28786a9787d2f2b5dd6ad4fe4ebffb143d14e824f57ed1571bdadcc9f24f99d09e84420d67a477c289d07c19ff199f3e193fb35099f91f3f953b688adc1d1a3f5cbc9be63fc7b5f850daf6e7be2522bf349078e367024f423d4fa0f7033d27d2f303bd27d6e3033d27d6fba15e27eaf980de13f4fe909e13f4feb0defd146f8e3ea01bbc048058187a406e60a58063c5d001768397048c8d410fe026ae7401e8add4d7c37adc00cc6c38855d1358ae49d08c9cff18977a26c58c342ecc1fe4febfe531931a5ad2b70fc7855c3617dac7c5898c6327498873c9a51247a36109d382a5b0527cdf24bd14fd3dc4b7085ab0fdc08c022de5b65f20b7eb5f02dab09ea717f1e477dbd2c54c0549371e34a46aa26d62772e514d7c946233f248ff61cde1bc49cb4654ac8494ad4a1222408d6a7eb6a60d2fe886023a8e9f1218e15b390901a4b4b842ef1cd09f47d9e1cfefc448dd4a15dc1dec25e292f0d3014b03c99d17b9ceea406c9e30c754eda9ddc529204460d894df38e5bd9a4e54718b3ec255d1df1828eaa6526b125e8222d7c77d8d3c862f145fee6e55d8f7020d29efc39c0d8b4171a2a921916f7b12117601a627ae183a2a24515f2cc8f002ccb83f8a9440b10900f76e0c179f1df00f700dcd88c9af61a5f7cc0146ca82d025306e1d92706604382d94cba4197992c88f233df733cc9f01fa8a356e8e517d3f84a70122cf1cf02c5304e3bd6c6a4c0d16fb8ec5da528af7c25f3900804890caa0d83324b536439ed51050e2b54bb4ab88cf8a28c44570bafd006af41f8b9315fa1e355fb3a25a2fc51de9a829607cadc4a8c7a73ba0359d6ef79731f1cf5caec4f0c71713a04bcc2b9889919f5db190ccceb5b1726639af889d460ceadf229a3596ea2be0e2d6393ebe3200dd7f791879c0827246df84bf1e9e34ee232ccedfa82b39faf8fd958dd984a63e2c50edf8f4e667653d46bed6cad23d3a67c79e187ec722a63c629ae4be5bf52392ecb9fb8efe7305e18abe1da55cfa24398ef12fb368ba3327ecb8131bcf592ea063e5c8d74d4a47b1408bc19c723d8e1e4a4f11dbf1bf5f8f96d65dace1958d3df83955bb775a34f48f13f8dac6238341432f6f921c93b558ab6997fa7441b92ad732081a2701b67c04f0567a45edf43666af4a361e6a39a7e8d67cc5235fa877ea8327aeb571cbc05e4fa426f7e3a2b78630261a7214a237dfb10cae94afa09e00809278fcb516b9f3cd6e5f30a638e30a84e130cb0ce0cbda9947d1d2d6e0f6a11f9edd0ec540b2022b96a0eff811744722e4753ed780fcc76b378bcc44f13467cba51af6fcea9ab9d5209d21312036c1fbb4a9b8b607176b4edc93c9a679b009451a890104b18a5d76c177ed240551d719b4c1e82614dd74d89dd12d3e4396f63eb8c956d9853a3cb8c375bcd61c6875d092da49cd67228cc6187dd0f2e2c2e12b25e48e3c6619e00fb28bf596493372fda79718bd992fbf5320b504c8deccb6c58ddd9b825a39064a33f95b48106612381cc878dd03ef8664ea93c1545bc5fe725a34db82753f81d596f92620a94364b33ac6742b89ac15fac816c7df8b0d17bf0a1d5cab9ad1f0b09580296b5b3db1e68caed86144edb539ae184657951ba083abd85d1f1d5db65965bb6a2b5b7bcecdfc581f49e76e4c9cd24c047246bc716dcbe6183fe85c55680ec11e49c86ca6ea84e1ba29c77615edf8e6e6b1f6bfdcad6f87e08f7545c80bce1d90906e7a2f0f554253460f6c439f72ecd256200c23c65f8e1ddb0e43de08accf1c3e861092c548830ee5169c251c652261f3049449b3a17b028cbde7415eab9a26ed6e5beb08ad8681349e03f15dbd585a57547891ee650698ae00eed2af20597812e400d66bff6fc2dfb3946c880fd2af0bd3b06da4ad714700b67eb28d22c0f8a21f6a035e2d52a4747b173e767f19a4a6e641681f74414fa4b20378903f5ec80061658d8f37aa805f14d3ee984ab1690870010dd22940ef8fc099cb8d9a04b35604ad8951afdfa728b48563f2f8acb2355cb6001ebbf3de2508a87b5d45e0de2e00ef89711a4ac2c89854feeaf75a202b0a15a9c3e6c297e15e9e0a59fdd272f2b158e68ab9ae0198edf2beeac67515f4f8fa6162b54f137eeafc2a610a3888059cb3caa116a0d5454597606f62a398ef250ca210d29199fdeb53ddbd356d32d280a6cce3564d6f759685ff9203ecb7d026a57717537c1204d6411ef63311f7d2f954b8928647807f4b11829573e6d544b013df47289e8bb1082458de7b14a248cf3b2b4c36657ddeee48af625ed82e6c6c7c740a5963c7843b6b5e41b39c8ff8712e8b673d8070281cd879ad36b1a759ef315d166190493ae37835aea60eccf7791ce588c9db454d74d82ed615f499f82ae12e08383788bb3a80578a172ddfd2450cd33920c40f91d56a049b3c033a833290b3e92c180be48f8ba7002c748e1179ad2a4cf6e04d5444617f8296e80f5bb181d004e2e904098ffe30e4ff5ded0ce22765f6d5a0c2a264eb2854e36d8c82a04a138d631153cd65cef0b295b753e8807fda2a049aed22e036228fae8e68216932713b110568ab77aa8c04de2a41fdc4fb5060fb082851ccd9be555092ed2939a555d34d376f6e55ae2e302f3c1b1fb00dc352d4b60622d12eb0911d078134e220e58cda45d1a1585cd536916dbc9577f089b6113297664c4c9d8b3d83c356deae1cc844cf84dc5fea445c0781902e41d072bfd16d10d1bbe13e362063a98565acbbf01aafe168412abd73035a0b3c346b839c2d6b30396f2fbd51b12d6c172d6e3f1b85ee06d321a22612739548a9b66c4b4032d146a4230ac054211094cdbc64e18e4da0f7c530921b43bb721a4a14499961c2f858a9dd73bbf36dcdb29055beb0fadf751a9bbfe4b67611ad88cf1de8844ee185b2f597d7cfbe0e33607e07759d554317eec7cfeb1262becc00d425d4589fd1ed842eacca938ddb2cd244c690ab87e68d3cdf5223ecb1d0a6ee14fbfc9d622fcf54637debb81f50ee143fb49a2e51289f7a1fc99cbf148f9cf43c5c20457ecfb67eca1b0e21de21a266c77ce420e26b97819b63355ae7866bf3e78bdbd73d478e80014a02df10dc0865c6736af50f29c22ab57f29fdc3af91461a00c3d9f1c5340816d7687ed0edaa072526b412cc7118b40bc183fac50f1346129a1a153ddaaea1fd1e34bd9d0e3215b43791d2043041e542a3a8849af049089148a43cb67b4da6f33f44d56db9f83bfce72a4d154ddfe8d7da4bfe48c0e92699faabc56b2193fbc4e72759df5ee5eee560d2a708ad037df375b783bd4f2c0f07600f9cb20b6683a878a4db07d371f9316b278a4dc2da369647166c378a12f7411ffb5b598f34e46e9abbdf30f7f07ad82a9f9778a44aa87eddbf3194f5c8cb184c1deb7ce07779060f5aa8a94583fef0f7e2879d99a8bab8ffc95ddc072e26ce4dbee0fa0c6cda9ef5d1e80fd910a0655246a5b88867c04714d8b730ae960a056682470c11c6e6bfa0afa33fafb0ad25fb86756501901c3faa912cafb7b16dc582746a75f1fe6b0e1110637e1e2702b441b22febe4c7b76bfc71ea414d6ff23764d33f791043e00c033630a3ad437526ae452ba35544a10c9027e4e5a6c018e318a229947867c495417dd3f6b7a0da25c05cd474ccc2e416b6109f58eaae396c3ba4c7333769d73654694b9aebe98fc1d3b469a97b4f15c4187149e27a37e07ed8e38799369823e7ae8c70410ec1ed02d26d00576985513b56030b1bb9eea1d2708270d4c6a0db9327539d953fe608d0ef883781b41261766db960d4e483faa1835d5823fb6edcd408ed6dfed0dd7b4f33694a27e411a8197c56b81a6cb3e6825fc7e2b63e9004e29cdef5bb81e8aa6723788e50d52c6320f5afdd7a4d3cc1ba6fca76bb314a84779e53d90452a6b40e57a63e3c72f372c92ead55b46f51e4841cc092c898db4abc57ddc841eae2bf9bac2589d6e140a3fae0c71a5e373726023700d36b6b4eb1f7929971bdb98380fe0de60976268585940fcd98fd745c49ffb69a8f4de83d399ecdb0cbead3b13e85825e41a861a0d209ed69616e09e808ed98c981aa8a32c20e0f9ede2f83e2aef49d588b68e88407baf1c48b8a29057864fb172f8665ffeebc915377d26de7af1f107ac6df1cf7821d1f28f90cf6461b6ad89083ff25be3acd65b2050b15ad87f170374593a7eabcfe833088fc097f815239d9add0511b480ed8065ffd0dd9ea598055d5ae4d328505b6809f5503ed8bb20b83f090d8f2de8e7535035f5481538c0c9fa9a437ab82ac514b81ff6d803a2f7cc811f09d651fe495aef4d68bb6e45d5b44c1f45fc505d1a628a0a064b0ad39b3e0b310925c202b6acb02d64a40593a8273dc41e747ffc2be464c42e9e9609457592379a7d34ac41a7e5ad6ccc4e64b504a08e0dc49e252a425c4ca93df3fe125a70686231a84105301b8288d6ed189b43ad00fa9614c8d1a4c447dd464a94cc4cc6a571d0a7589fbe90e535328ac2603995e46bd21837428c98f1b55f99e218f47cf4669bc852e175f5ae87168eb604e20c883fa1a2f34b20a1de35c8a1f6837b251bdf6a8500505171d1bfb1a396d5ed16247616380c432d1cf4d3777043c181efb3b46d0068eafadd712e7404e5b1b0074d4b55a021890ef90126108116e70c0fa48f851b64e30727e83282c9803c32609fb41c0718a3abff3215d5c4f76011caca56403791e704ca100c562cea3c67c562604c328819f29d545581e1c9f05dbdfa64fc91c5401b31c8c6f307aaa7331ba4fadc205460a0b4b252c9ff938c357de52e473885eb1886daba02060dfc868c29e4c812d2aab8f1c0f33a965fd61fd793354ca7ff5672b72b4a17c3048566928ebf71fb46187a1d360ea82157dd2ef46af9300be486e052b47762b5819d94de18a48b7022b45b84f5a11017dc76f3aba29f21b8f33fe42f7082b0adc445a51e02ef2ca02f7c82b15ba47ae9ce036829b8edd80e866da3712e85dc1ee85a6cb5f78cedc14855804f630add858a11ec9339fd90a155c7f66b72d16ba1740d13f8a8066c6ea1cbe3f4e20385af6398a5d0912b8a536fca93b9b98c1d672d94157a86902e83a4e3eedd6414d53e2cc1da6a4a80515536a574fd086ca912cfee57249c324c012cb754a4394d008e7f2e27e2b4da9a8c5709d099178ebb21e4aaf6b912bf00d2cd1afe6c84159b24f91e0138737c254e5af7822b17051e632596c2e153afa2d225495266378587d3006d2463f672507dd6e8d341e07525f1a83560eb7c8dcea67bc25e7fc7a2c5a6e8fb895cd36872f6033f7204b65d46148d97b4b8ce7d3e828d7d4f48b362639d7ed8af32e58141cc60a2751230954d5be54fb172c4ad5a6ce2499a3ae47455566065fb6649e255f76813743f9b892126b92ef1938a4afc1d3bd60412b5d55c12451ffe9ff601e2145b2ea804b91e82d7b76cc582057ce520972ae071efc6b73422d3e04a97c901d3f843f170418e40a692363df15a8d79c42c8e87d3a40d76ad2065e614cabd838130f6db58b484455ccec38401eaa6addeca7d250356cb66afe691d41137dc68c038bc9a99c3afd112c45cdef53c4215df1a6a4651192e0944425edb5b9140b05b118996e582cfc2184fb729269997afd3764df53ff5b19f7a87b93acbd636d30bf07a5bdd91f77828674d8f56f64b7a7e637b2ef51ff6d997b582deb31a547098db0f0f7cd9e62985da46f01bfb6ea4f3b8ecdc0f0399d8316ec05663084e9094d51e61401e31265e4957aefc8173bf724a5b1cc5f1e5b0b79ec808d30fc6db90a6435a96aa0d6c412d70bd95eee354f0978e550ee4698047992ab564dae1115a8442dbefb67e67399acd0ced013b065f3292aa361a966e44bcb6ce439d7214ef6e9a80a4b17002c5b3be069a5b546a3c2209b3ea824db1aa5202d5bca4fd99416aa09cb51bad83e15a5857fad8d0bc8edeb2e553edce08d617a71b4e2eeaa3c8e8c2ba16bd5464dbe13cef8e9e682abebe78605c74e0cf4e6827d454879674a4b81f228116c3e2f26584c2adb0ad91046ddfa0b420fae261b3fddf94335d0ba2824990aca6308ce8c1942e12e4fe53ce1aadcd459c7974ed0cc9e219852013fd2e1ff08223f68687598b24f3ff17a3998b253bf7d0ebf64917f007a38989aa77f526840989af1af562438314cd95913c392e031961dfe21b8b5c3148ffd566cd0c1d45c012595be6385eefe8bc9ff2cd260989a37cf596b6acab62a4cf1eb2f15e9ff079edf7cb7064cd9b85f4dbd09a6ec999fcef46fb0db1f431a3b4ccdd29f65ff3ae04fa278cff9e690f803254277025c3035b77f9e387e989ae7bf87887f09323fb325fb17be7303abbb56986aef3f0dd2df3f9edf69070c9882b8df420d124cc1995fb1e9bf40b73f8b14f730d54a73932efc0bb6df235830a5842a879a54749d205860aaaf2d5b254d6498ef5ecb04052b12c41c873ac19905faa031d6fc8300a632bdfd8d67db2038fb3e00a6f811806e8fbfed5461609852753f667dab3f4c654461d64c52ab070b3f6b920aa60edab96f98822e89bff19dc1e9de4023e52d47c0b507590910632e8e81a93ca9ebec9e7a94eac1a94efef98457d827221ab0d48963cbad29e849f3711b7053de1f42c336c1c7fdef471c78fb13c24de9d5eede5bf56ed89193d77406a46576efebe1d87bc1bc78852487ba9dfc18b138f6a1709b0c3e86fc558fc816e3c0196a3f6136935f5e0326b507a3a5892261044414e43a6976842daacd6537080303a97a0e2b233ba07327865888191f27fc868167689e1c003326d30c8e93da5d1aeb2ee96a8f6007e0fa5c8b71652ca10ba87ed0da91416f23613e972ce70a87d3ac991e4db632352dc15fd2560a3c50e177179a0e9371ae15b480d600dd6c10709b89bbf52d1a60b69c32bbea40422aab1de8013da053c62c21de35252b580f42e1151af61691f2a10acc7b14ddb556dc8f952aa8129c42ee9d781629e5356626b100327451c949fad080dacebe81aac121bce45e02e576e48a8225c79b2d291472fbc0ee22eed674335f95d2c0715012f9fb20e495ff8e0051cd844d689f741fdcfe124884ae0ebaba437d523a668e194e9d0dec4f5580de469b5f424793b0e370f87eafd6901b61e1b7164c087c4a002f981c3c43fd719e1921936cd5cc497a47deb8d607a6ff1afb31bf1781637fce57aa3f1bffec7486042c8c86419ef6ef2f03ef67acd41976741e2066a2f71cec791bf8972f0a55ca0234357e505f4b2e541d578312c06b8ff781606131e91c45c146bf3694e4426f6e14a196917a3ed579c331b9d1859d39ac5c8a5b24f1efeb2382beb1018d2001836eaec0c9f29b39f7071420163ddb7727c294f3669dda19018e07fb81244354f6b6db2d9ab5c7b19d6311bf61034e812e185dc9fa7e496210c5d7f341c75ff0563e80ea37e8daaa5ebf1eab56992bc5d0534e6340d178cc280b228bda30d765f475ab76e92ed939a55bb968616f62e9145697086c6578c0bd40d3b9a6c9ae9ba1601748db4e7880fa9f218796d676e356f207eb0f7796c1ddb7bcb746d05248f4a7898b273ad2c9645793a123a0fd924aa2c8860fa37f5dcbe4bb05abc3b66a499d4c28acacf8be889986bae1e7c3d8adf8fe080ba98a9b9d71531905349b068413121c0dc59cfc7e28f0c339d610ce09ea19570235acb604d362fa1f6ead1120d89782d5a1f88e3eb67f76b8efe29722bc1c0c94cea53ba68764d981dd8b228034d3f83e1c8e6b4e5716430d86e90a5e265baba096a137efe31534ac933c711adb13838b0f219ff4eacc8974b9063c54456e2dcccc1763664353a6a6e81a35ba919b94a06586765529dc3c2060d6e3d53e82b430a0ba695198354c846947be154dd0d2a6c40a8a4ab8b05c31ea6b9ec43993717a3a168f0030e78fb9dc238006fd3088475e5019a530f65b2297b1663624469e812e4049d0a97ad60e18e0f46ef8d806625a4e6354a1785b6cd369f76322c48c9c2baba1f313c93c6c2c7cb2553f0bd8d24fe9d6819b797ea2c4123bda34a21c83ed6152851a2bd3bbab67402ebf63ac08e260fab04780616c7584618be9e446dbf9eeeb187f5a9604027b4b427a06988d1a28c801ed716d1baba9a686d56136b50d28ceeed8dc69ac2870dbcb3a479c3f08f366819dcddee096d3bc6146b20ed0ae30a8fb29b99794b1493b747f79cc0e657e97959640a7327a0eee4623e03bfe20b64880150221b928a088c329759e022446dc6292c7034892de49c70c00b7695434f5ab199a1b3745c4dc3fd14889203a6d9036e5fc8fad5fcf92d3e73ed6ff6d0d45e73b6e776be9ac65259750a042a8d85a102fadb5322658cfcc8c975e8082f61f211396f6e79858db11dbc8246c58d8064efdd5431d9a7acd2090d91548faccc5e6c03fecb81f9fc9b705de9f2acbaa9c7d54144f21ed1a0ae2e9d99d169bd3f92b3480636b3b612c0b577c31d08ccc920ef64f7b1db1b165d4ecd9bd4034e229b05b07e3989c486fd9cdac5a1740852aeeb4dbec105ab33cf57ce951cf7512cd13d3d8c87300f0223af8c02de697b5b8845ec34c9ce0dafcb91917424d1c2899719ac8170ec471574ce5ab8b5ff2582e1a07122946a0f3845be2234d3cf751c854ff242b08ee0b1c2bc86c1b9b8746ce3c3cfe7098958d201cd9dec181c581b26fa6e5a676f3cadc2e5b7e2c3224b8654940e8547e85a17292fdef0c5252d70ae854de5c0b1a531d6c0b3f0f1895e017179ee3d3feb78572063fb11210c6e3c8195cdc7e8ea1357361365d29dc6ca87002a9102c86aeab95af7e8eecd2694726ce8141c878c8c77fb84e3ced354c6fdc75c2a6033c27514c1d7f30f63705efd3cf4613331b3b122e50dfab8cb27ede096151bc43cd3d9b434d478ef5ac761e1e6857eae266b480a6aea6eb976c2bceba98c94348ab4ba983576e539bcacd49d12238d2ce82b0c03acc8448bab65985653dfee4de707b675845f717f5c0eca1ccb0e9f79409dcee7640c3665d99915b8702274462774070590129f60e6e936811105e258529a6afca0840981c427d775d8890a6c0405a98b6fcc2b23a9fb10a3749b317287d2306fd940e92803abae75b11d684f639b25fcbe23a547aa0463b50acf2718772910b31328a912767347d95dbc9ca386292ecdfcd30266ab1c4ba761f0fb27a08cd29aed7fc5f68bc5829f737049e2966560666624be395c0c3a1133e73155414c3c741531ee65c4e61c566063e681b60cd0ffc486465e726baa1ae994a9d6a5ed86d5a9c3aa25f65cf6e265229536484a01e492fb00daa08fee7a4e9bbbbe2351c640cfad5c9fceefe0eccab5a3cc3afbc26327aca755c7a9f4a027ddb0aaf9ff151267b723197b55786b07cf351ee897129ba0d39112a8b6cc5c70e5e01b7effe8efac4d827aacba6a2d89423ef598f98ccf7c25235cc45fe148a4b12da09b064efc5d3796f7a8b503356031ed980f73b2387b8c6c38c45df500581a3e33703b22190fa699b6b77ef0f9855908c953c900b616255f24d79e42cc13f40ab8c46ec57def26f16fc2362293e3e6c65662b17f9dc0c2ee58d424905b9fc4f241f41ce8b1e1bc78f1e0ace5bdca5f6225ea2c6a723b826dbb2f0ac0c9b3bd682bc5e25540281e1af85701dcf285a5cdba68af6419fb9ca13b590c1357149463a0bbde5c4779bc3514f860637fe54b18590f30e4400c00f4238d3b8668ef328ca23eb46f5b33b937e4b3819fd250bbb13aebaa61f1975a704aa5af725e259693cb98c1e6b5d212e020070f23ce0a03aff65eef39410a60aae141151794f6af4ef8faa1168aedcf131c6c6ea678db841ca4896ebba0232b7643d2fb152b57a60e0c7afa8e31ea2462d6a8c335acbe0a1a369ee3e5f41065d7f77672ad94c281318b17bd83cd002f203eb985b9a3d5baccc60b0f09091b98d6dc7bb91b2d36bc05ecaf1c55348eed3602dc91f9e3cd897df12ba9c99370abc41c588c5360e758677a8d007a007884a7512cff1bf94613dcd2b71a7e6b05a7a067df2195f135180509cd59b2574685e9f49738d8b3bd69a1c8d78fbf303d98dd8ab1ec806a437b66371bf17147266c15fa6a9a504f110c7fabd3c1664c64e640a12cd1b33a8e6ddb484c4e690f3a90c213e56d50200a4043fba51c633655e5c863d15ece75254b8bbf91a5c945887a989ce7cd9f9224472c41a79e19287fd6dbde28ca652eb8dbccc8b3d6c2a455e966c77c5c4cd0057036c41ada510b480205a5b9a4a55e75f678a88047c8ae0053e90ae3102b98bfef5f95eed621e9e625048a703439dcf3146f963fa607ad0b9f5b2e1f2f188c43c41f451b2409806ea21a84a87504e5cd765c595161972cd4b451d01b2f0a88c153e82ee2836d23dc4d2404502b1ac4c40674a136adc7346e6d730f001f147bee21a574688e16d5d4ab5b17b1f6ce0f0b7eb1940be809bd42e039d2b25a4100442b7c2899730e64692ac4bd0904c5b85aebbd966e18c082f2b546b9c01bfca0a9095618341a584e982a96d608cab8de9840420660ba1dbe0c4570e651179b3344a6e010032651608e6ab2613eec96df33f03fed7da4530c29b1d170f20bf9f4101235d60179e8a41507c11401a1f28d402a6066c7c440bbce77e6856a261d528c7e66d6747a365e40353251700ac8b185acda1c6426219327b668ecdb2de8b10d3cf2117a5b04c59b702305f4f2854d3b34af25bf2d6e7c181e934fb912360a71e63ed8c068562e089935df2e7a9f96305a084bf3aced67c4691bf5ad1ce6821afff8c6584fc2f9253c665999b59edc5c16a84398b118b1bc45f00380d40303c91c22ac950c189a071e38cab52529fad25e10c2255b95a17310f1b2759a187d27a03c030b74d71067f9575787faa3e9b3007ff0d13905733c11b37e3ac3fd369bc003e8641004b112c8d58ae0e39f7eb37438d608537fb766d68a2964826bf61e42e7365803865dea2ed1e422979058c19fb816c03984c31e6b424f0575b8017ed0a2bd3fdb6b00814199711abf395d4878c28182df86d3698aa1e89a11d4647c991517bddbd4607d47364733d44f18938e594c94cc7eba9826231bea2ffea875d8b715572caa029693b415a8ebf434b4fc7a10ba686a8fdf6f04f11d5d070dc373680bf0bf00497ba657aca0276056a53977d2f4d3ac77eac1c839bdbacb5a6f7fad97bc51327e89f1b47ef026c9be78211ce25c6817e961e051c70c33403e07883f76c8a020b3e5ec4f8e719ba1da23d1db9881402508f8797b04a75ab1a8c1d035c1302a024ee8d2e0c3528a9d8bf6c5155630bab76b0ccfa09bb94e8b134c281962e88870486068e0f36cf6f45dd1aea042e2a742ccd238c3fd449e2daea57c08e719431d3286cd59474179522ba803a97275153c3e04f9b50c09b8ba4813cd232d01648bbef49cd18e19ac0d1058feb8f40f4b201b84694b039c8b57da990cbd2da9c0336fd5b7605f813c76cf760d288f0c04280385052a8b93be1020b3fee119fa2913ddd69a251f2a1368af5835ea0bef5b63430bdb952aeb5158b5968183f30cd3d94caae452c907a544145e70a77fb52d6ac2696439b7d6a07e9cac7334a611faba10dc795714b7f42fb12057e300cb78c2a602193dcac5c9d6f827f72df9c72cc587ee56b3ce9aab4e2e0c41ca4558dfc476dfc64e6f38d3729eb459bc06ca36c4ccf581ae1a85a760bfb65636dc70cac56824adb46b1a7bfee03e2eea8b304f033debaa99001134b626bc121a226f90b89bd23b66052b1aa90b7ab3e23bcbd1ebdbb3050675ed20826bd7fb2736d32f3c381ebaa1d9846847d9125c603dfd49d32c94e61550ffcb4e30b96121aa3f99f421300f20c96458468823c671710056b22925cd74fd4b4464303a33a33c8f5faed63c88e68e89f00fd5b0e6c62c5180d867ce0af08c07ad264429b1cd20e846e92c8673105de966147b892e8b2d30b3fb4d5284437e8e644166497096985c039c89048b427059d9256f013e3aab82c9ff9e5c2c14046d08f9615065d040864c9cc80c4d2441520308e07312716335cc707ecd6919351f69d8c43f04c681c7e811f380c2c20b9246221e7f2e350c1cd31ff6ead9039999c8924e85acc76a077a757fdc0a2a914fea3c8aaddd60f4166e63c7fc239af1f45cb3279993867700ce2038990777d7cc4410a0e1b690afab4aadb13587558dc967a26293850e278154ba76deefe5cb16d7caf95ca2ef6dc6a56cfb93342c1a58289eaf3cac0bbe0395b9b48056ce3ee4ef89530b78caac0a284d51087b5eafe148953aaa2c0ce766f53789b83941aef04e60462cb04629a56b4cc8388d531bbcdb31debf2c61cc2105489018b6d6b8dec28437fac5bf70715f30a8cc359cc5a008025236683be3acfad684545426854b89c024e2609c89f571899f10566d9e91183aadb205fc5e3a5b887b8518f0abc6f7027c118c0f2bf8b58b7655de1ac4be400804634bcd8731a3380f439b1aaf9976e12c589e68aadfec728a41013a9e508d37ae4592a2ecfc0c3a5e252bbd7b69216f39a2f06637255fcc5aa1183aff57453fa5383b86a63f5a78d486063f10868309756b81768368a9786d17225851c3085db9d032fff199e92c208a6db084d0725517fe7720f43036a97ff6a11d3c2c0150d901c1b108e92e0df2e1651d4a0fa9f60e48b4244abef96b5559c8ca68894568fcebc8ae61829a0e20bcb2f13cddca71d1190287b67a0f86f35e44e3f92df70385c5045594e1f4d5c74a23945612e4495ac8fb9be51a3201206a3ed1638cf7f5ad4f66131da8bb98a2eadc2e470e7bd15d680a9a29334fc0434c32b1e9da8f470ecbd95d75432177a379ce5fd58a15037338971d18ee764b74db26ce723f11c8ce270261050ec113026bd1334251d304f7107899d300f49802935ca5becc1ca2abdba7a40fc83683265616ba730be0a7bce033f7e15ee5adc2dde9001eb8f7dabb56c0b77631600ce8315cc8117cc69f23ce1e60d75adc4d570c8ecddfe413f9d125206dc6cf50f93a0d61444b9ada18e9243016f08078b46c787ebc16f0560ef9e28ab45e2b65f1747a36c2e888916c97311e57f50e6bc7a960aae650498fb9039f264c0ac9a3f90950a26e7ff9a27bbbc1edc11c698e5932408ccd59930b742b589baaf22fd016f6679b021a037347cdfcaadf094d7ae7200082d6e0642f959316ca704d20cb77f52d2f48ac31718ca6239846a0c910cac17298c3f2e250d2393ef51d37087b22cdd7e1c6aa200d2aa9725d1ad38dd010510cbe4aa03c4b968eb6898f46292759566bf8ac8eae9cb4af94c9569ee4e975e31de3d24287d314ceb289b75c454c521f78a14b8a9512aeb926fda7a70b0aacae1715c642bf365a3c724ddda0b4407dc751b949acdb1de3f1c232c8c64e5462efb8e390084e0f78b070bf673184b41442d5731534241050c6270dc99213de877852d24d6c10daa26ef1e63d0d3a46ce0f5b08409643939440098a2ec67a844461f6bdb26c35de3219a1704151e71948162cf41744d1822c0885f4332d855e660e393469ab6c11e869c45832631febab8c029a576ee4b009d603116b0f15de3caee84eebc206c4d4bdefcb0c2ff8a1097d158be13f5a653273d6d9056710ad7c755db2e67d5317dac713f1d38286534c9d0c9122ec522b4e93274d76af25c1b995c685573e70f64c7e772d9aea521a1cc215bb2c030e31174a13e86572ed6c63373f6276d151a915a02472f0b2473b44a9302b68a802b165db5bfa155b4056ec3a32f6d5dfeee98eed7c814e1af9f94680b068e64b1087858687962716fc426b03087648512934b9457fbf0c50e2750f8c122cb5c697843dd30daa7e92555692c1c9135691859461983091f7c20d9285b74832a1831fa4192c8a4806daf0e0406245dc5d754c9dfb8a6ce4817b8e9f0604292a4b912d1241c7b8cccab27a30e7601b5d49db306bf4828290da325d013661a14c97860ba5d356fa9530867a7dad44219da9674c9e9ae7d4b1d7d33dd210a936acce273c7a02b93296b1025d39b5254337a61e2ca7d68d430af3fb82daa6fb663edde1eb3e5da23007bd8157fb8644192985c1e784aa5fc2dd76784a654f49dab85d0236e17ea7b7d3dd53c50fad2be16813b30a6fbfee6e0eb3ed4c0d28e43130fa21c700a1c284133eeea4d8efaff7b0d96f98cb0f06503f04f7999c2401e54daba86892bdf9b7324f30cf60372862ed7116c22274fcc1e42a512c121df41ede782493cda3b98c474b7e89668e9af976e6d300912290884307d25984895e1477eea2660ea84d9e0f862fdd5d17f74dc6116c427d17c2dcf24c3836f7a1161d8f0c74dc5af4d2d9d05d937d6cb0990f8d565e5119898c56da22356b9ad98ef7bd478e7d3a1617f8d78c706a7cd9eb3a80ec0d1a1eb5c7fae275c0541f9577386b2c96003a6e615b0c36fc16e98fe46c98129d6459bcf139e9bf8a6770aad68a3c8d5cfef025b59c3e71a1fc9c8f0fc3ca5769ce2595237792baf13b0deb4cf81259c0bc1242699001024168a0490849dc324f7ecd4a436ab805cce07d7bd0d5ada0ad68aa20ef9e01f4c4ea8569d554096b12c7060ba54d6078cb27e950831ec854923f761db64716ab61776e629cc942b1a0da84c8eff16f30f9c25b78449042976e2f53ba82f24fbee6bcbc3fe95bbee6f670ac0d541d40508030379e7845ad04d4ab046383c428d622cca8fb833c8a4695f37b6c628b9e28b3f2271af9433b15342c55267b48a43d02c666a5d31efced2b32a596def0e875ba469b52c2311fc13413fbeec9c5676c5516d62a50e84eb21bffab877f15edcdd74ea72ed73185558808dfdc050faba0c022bfe27a6423a209dbcd035a58156506251c367fa5d807f7bc51fa3a407a40199587182ee0afaed85ab1099a1abe8c84406eab816ff7645453bf3af5fbb214c12af5d5614b88238a82b70677c57876b4429582654b80f05bf5d2a2fecc8dd81288bc0510d72577472d8040be760594c398ee2adcf7d92afe3cc8ad36dae724b814098779308a4d7aec0c8f6c8af84344192c6f1ae3d4df8d25db93c9b8afc9d7945b4c710443034ab3fba95bef0b716820234190c4aa970a84de59c849ef0a06ad9a47e0ed430c86a0c8d3c3b0a5419469f3a16f86d3c10defbb620e523e86a0b9baf357af5e1557a5c427c6e41d60f6d5999114c4595c4da4f0f31c6b9e5c71882c2b184ea0facddb9d3ce245993f63f2b4f53650d8f6165b537d6bd6fe93d56deb2e66d0bdeb6f6a6156f59f2c672efac7bdbda3b2cbc776b873ad7a1e34070826155d8f8a68cc146d9924c694df05f5634f53a490b2cb63211358d600632c59a6065917782fffaf61b99ad78d3baf70ffd3b2d78cb9a372c7b6bfa85c1c85fc977e8933797519a0ded9d2d586f19e9abd25b457710ef3766d52d8698b68598e58afd8aa4ea4f1acff77b018ec5b83186510ba5a4c1b9f29ecf5ceaab4c739fb93de18a3157a5afefb3878623358e5e4339fc743dbc50c78ec2c85d9e2d20feb1fcdde01c3ab9648033f08bac0a6d647ac6871abc2fcd399125b8e2031af391c3879278404e0988df8675f94e3bf4b4a5942f3882139465a173f9ef9e08ad8ae5c25d35bc97334bf2eb6b03fd2de672be4e279a9bdc98ba6825291de680d6a2ac45d31731e7a8fbcf571a30d51c936d823e970175d191ae33114cbdeaa4e6ae79e34751f1a86cf16585bf7935ebfae06c0199df83d666e03615b88e7eaefaf17f20f2b0ae254f3e2e89ccce311198d56f7d374ffb8db4d0b9ab882e7e619938b60c9fe6748221bdffb71838cf6426ce3150ea4c2e7ec35cc4ec418f77ffb7ffc5073f3edaecdeb427276c26f64adbfb43e6227ac132ee9e2f8477e252f7c682e06cfaabc26fab1d7f939dd350ad7e09ce85d1c0a0cf08a89ca86587dec151c03d81acf6ad6d06eb2974c836b77ccbd136f70686c0d04c3718087a0ae755aaee2769c3c2b2af2d85552f59bed1b9ff45db8cfa616d9edaf2dc0d8427c72b220e5011d5e7819150be232c801a1853cf299b6189ec73746d3c17b47b1f3b0fe1c70c47e4d69cfcb481ca2d444509ad37edb19d5736b9596ac103a39a03fe080d2b415ccc80734349b064dfb0d0edb0c794f78a3edcc7092b210ed11466f4af8ceee560d0c48e91fb0117f40a841a7801dc5ae1230403b72acc38b3c676c090d0c887257db1ca4ba97d9978923564be26bc4f663e19cd0ab7cdc86efb1bda991c49ff68881b11839948181e2d0f63e91cc25fa2536a08aab588cc99dc080b258d6645ad8bc4e4846e8bb6c3cbe3bcb323412a60c63f5e11aab922f152e969b02f490333bbef10b8d96e90d3b32fc6d8912542aff653b04c0444223201912b79020cac994a766c3f3571300ea0b8f14c88d9327fad3028ddb06081486ef023f05492dda0825d99e96eda18ce8b5727b9ff0a0a5e8a69f2d9720139202b25890051acb54bfa35dd6178241897780b0946cbbfaaddc15b855fed0931408cfd516c9947287b4fceb8e8c93301f692d3c261b0c670f6d1d519c83075a504889f3266bdc979c8d7ae705cc5844c3aa04f5142342d4aee05cac6abb21d47b3cd17ba951bc9484dd2b8849106bd56d1b632b332b0ee161a2fd496cbf033e84b18cab6db4e1f2926b3b0717df150899bdd1f244636b1d6d27c9881ef433edff2f416145bea05ba98e4e7c31aff0b8da390efa326dca2de023e2275a0a0d7a17e74659bed5b8d3caa2a48ac2b03a53a253248262f68b3629779a8849a811cf7527abb47cbb7769e8da1d98671dfcb03af7982ef7d7440c2708071dffefbda1cc6b8ada46dd186318d48ac6fc871de24c0a0cc386c68f72151676cdc7e04d7507408ebbca58f851b2bebc5f49464552fe0dd1a9b9c58d78010082e3af08dc4cb148382ea35d6a3ec5fe88aef34007ed4fb2a1e725115718fe25f4077cf7773ca8d833df3b72cf14ea1dc951d1440ef52a2f935734d46210645ca16d15a7bbe47690fef386b6d7cc2991ff6645084c3efc839e68298eb71281536e96d8716d48fc8dd1ee496ca6e2d561e202fe8b303f1a67c714b45c3bb730c76cc0655234af67969bfd33bf784a9168737b48fe99fdd034136180d2ea929e82bb0dfe4a969aeb2a7beb130833286046fc9586b2c769ff193a4be7d05f73a64887308d6a48a1b8ac42731131d077d9d9ddcbc54070affb31d0ecb805b9e50af2e6d8ede004821b53010cd73e4f07e707161e2f08ccef05853223d70bbda6c59b96b80676d3489b0fb0aae943f49ae83cbc1bb8aa87c16e6096d34ff722089bf762d26eba3783140a61dc9d59642f7363e7da1fa9318e8a4f5f287dcba52fe5505d427512847e2e599e8b996039f3d842148a256593b04fdf4c5fa6de9733f6e3f9ab09cd90591510dfc522da5d6b253a50b63805719e16f4a05ca6436d435f320b462e83ae6138e0a68418063d6f0d64a2b4c8b76907851bc510fc3946c9982681e24db41ade8fd5c90530f67731410bd1f05c2836240fe13832e448d22585b32aed6011ebc0a36a0d0564424aa11ab7b4487c055bf070f22e6785b1c5a761b7567b5c60a9c9ea98366419eb9a93e12b2c7646322d1484efc961615f683e920dbd6b155d64447cc010422653dbf6484a0c522fe81aa025e779a8931d8db720dd4aeb3f8a6bb081578f99d548070ff0be8d2fb1728098c63a0c405ce0583a123fed4108e2a8392441a010a9dc40626c4d461e42570ef4dec1faf3b3d96689403d900c82846a2112e371e256c983af284c4b6b892c41c5f73af21eec5e2de86abe7047e74ae2989b16db5e157ee94057aac3360535c9197bd4049d28c2643bc6d62ab508b7b1f36dd6a6948252df69d659444cff0c1f06e4c3c0448ccf531f0141f6a5ea312130e95c92eb573dd2f0c74f2122f93f87240b0a081a226d25eeeb53c9cbfd2c1bfa759208b50c87049c540498ff31754de9f475e903462d0f0e4f8398756d235cc5a23e47a182d1bd7ec3ec48c4dc0b1ab83e419d350f75c6e5b23f18ebbbd5cc0468ef97c2fcf4079f2a4c952848ac411efa077b7c65947da5ce098cf379162f423c6104d1c4a4e964633bc33c4f1e86444e0fe47142365520f946b599cc94b63f2dd5e150e12bd19d9a8f3489bf94427f7845754a7929c178804c30dd311bf9b70d0eb513d7b60eb9a7224175b42177713e99b6a70e497d9047da58d74f09f023dcce20dcbe00d873d7662e9540701db6e01b0c73ebcb1c69a6792772ffc660670e736cdd070d3054d74597088cc00766a53b30f66c53306a4e97af04c61d6c7aa25e2c9c2eedb67ce5ee492554c0ebf7642ddcd12e2b1be37b159e6949a80dcb19c7e1070f509e60bbd7fe02e9d08d677e8126737a5bd717504f2b3c4d33fd1223f4109e23ee5738cfe643cc87323c35670a3244601c3e8879641d50e5dad520aed26bd49545909f30122c657e1f50081c75ed5afc1689994638f603a104a0a75bd5e5da0c7f9c77152b9986e632d70b781211f0c7b2bb5c2ce11ac81567010abeaf6be8bda683f0d469401de7d5209727b8b82df8821309323c6f6f820ba386b292bba0324d4746465a74976245a1a11c6683874377c16d5ec89513a4f0aafa23bc80b541522645320ff0256b2d3b58f820f236708357f0e372ee890cd19045000b6fe9ca1470dca86156336e2e8c26231021a9daf782bfdebcc22d5e6be37560bdc1afaeab4eb123deea80d6dadfab7d7049f66da29d977d2b05940bc1a867ddb91acf62b74f79d688433f6967b3b42cee83b88cf3d538fff29993b9fd59ef2314c0d43b782ead49acf5c120ebc654f056c88864f2c9fcf531b8ebb3fc08d06f26059e81de44b2244b007956b105b1c4c1590195063977817e3686657d61f50a404c17d0d59047df14f4df895cb47f2782691574378cd7a2299af9568b85d0f754bec03f00a353c17949558f7d0f42afd6c87316c06d43e32f6481d63749d4f41e195547e284007eea73c98e517a6a55021154cd00fa00a630874043441246ac11e41e67669e6fe1fcd3d35632c8c89a36e2c2e291d6a44bfda896aa4c82291bb11468e2c249ab9463c3797140333228a3346e9499d6d6e6f5664f5800283af76d3d65d42b1c9945714c6726b4774a384a7080d08e584b2fa0577b69564ddd28d42c6567c19830130de7fcdf8a484a302e9fd3c153098b1e2825b4ca10cb6ee2e4a36a4c13b0df929b4db1a6747407d325759222c2d04caf69902c2325099302f4303f9f658c14ba3ec5a5db9b93c06c9c5ca8a3a23d001c23f429fc4c8a47ed647525985796ba696b15ac5390e259ee720c5a21fb2c237617c796bf95527d0042a69dc759297b6742d03b253529e92bfbc8b6ef52aaf522ce6d36972eec3cb9d8594aa56128955d23e560669f788392c98c0f2a1050f53eeebf881aae18be569c570f9bfd5f2b1d455e0729845664ca106162824f502eae24e5fe44fb819e848e726c5754be1a9af8ad3d80059d69bf909c1b564187d413f394b405695697d611aeb1d4587723869b666b3cff06744f6b81986ae69ceaf293cd6de83a88477987ef5fde5b4263688100328b59def322a2b1c0184be883ed8da931a47bbadd765720d63689468f5135826312f812cba829e42b15b722b34b68aea09cf24376bad18a5bd24815b18ae0abe0e1905af5206b3036075833d02a838b3c1cd6266e458b6a8de069d506b72bad6bc460d3b7a105aa2e0d4b4416e9d42590dc69df8a2be52edd6a4ee45261ae1347eca09198326519d55d50ac8379fd0d54b6719c188c263cb2b459982c0ae51475bd2e7506fd67a31168e213833bbdc91442f39e44779a2e69f286c3473fe9423f39a2f9b9611416513e8ab9795a91dfe6d6794d17d55306e2067b089ad03668fe546778ba1ddcfafb438b86d51ad90a75358471b5eb4225a76e2b65dc0b342612acc9803a0cd51cacc0e579ca11e1d9c7bd8435d181b5527b7bacf73bea226c33cd6a16ce659b34867e45bdb16ed5d56642798f9d417861ef6259f0bd7c00bf0f6a4852aa661b6e1a1610fe667d0b2a54eee3c7a7c7d631b3c112d55af9b7bb000d0cd785715ec1cf5782152327f1681d623951113c09202014d80eea3d0017ed8c8ef8ff8791b694ced3f768a21fe9e3a11f8cb9067b87e1a5cddd903df9c5162a2b45e95129d425b6c28262895177bf303b0899f3936302ba57057997a4f0453d7b215d50d41dc8534f2861098156f40b90bd8f1141eff58c73a4fcced6cca96d70e6bef2d53ea64663c49f924ab8bc63bf72383762408de270b068a4b7cc5fae10d6e544929faa9b66bf9eab2918e50988430b432b641c844580880d4fe422c34ccd015ea70811e632c1dd530bbcc9eca743b4e52aeb28bc29d8985da1f55040a26a5d1ddf468b36325169e7c6d16fcb46062be13ecbf095cb13c38741b6c3d47bdf7771b5343d493a8f2937075e137e9bf7768d6adaa2e05c0b85155dd88be702cdc1e1a052c35a4a9ea8a930f097d836b0bc02a1cc3491949b52ef7302d4ce5971bf47ed0d25e127ec53ac828c85c6b0b332dd24547de15621b02f1eac9ab89d4110ed2f6d7fa15d4fd0ca2fc5d8a67f419dab18fa4d5d3956e6649858b7c79c6d648a29622da9e8bea3febe7a370a53a48c4fac84972de7e91c0b5ae1b8449d0f87efee169a78dd709bf01f632db2eb563ce71b752bd940719573a0534db75618799c61663605b2bb08952b0d490ee974f1d2d857ae5ecc083f5ca6aa29d37d8d80816b7db3475d95f1061c55478754d65ba5238c51a6cc046e977fc454fb9b576cdd097d40326f37d025e1ad078f7771253a1d3d091bd1c5ba4da2bae502ebf81ef961f0154f9028a6d3a7a5a309c55a50339600f98a56466517776f28f6442a2c347d9a0e665c83922b0a55f7160679b72522f008500309a8fcfe98ba51bd802c3be43548ae136960f8dce02075f86c35cd9ba95303533332332b2f7de7b932de596322599024307910784071ed675d9679c23b14af32bdc8927c91ca92365139cc671dcf723d32cbd59e71b57613655f6fe18ab6cc06c9c76556de3344dd3348e55d9e7015671d79196944d701c52b6cd1b649bc66d5cc66d9e75da0db68ed3b46ecbb22cdbb26ddbb2acc3b20dcb7eeb302cd3348efb4cb3d7e5b638b3389be03ee332ed058ca7df6d305e685cc76d56be66e7e5f177be1049c8b8a556cf8bfe9947d9ee9e79483c7fd065eacb6780cbd42fda34aa4a9fcf3eabb5e479d8e9f4d9f090cd953fe50dfb46c9b1b98e2d8905fa59f6ecce7277777777777777f79fa1b98143478f1e5a01ed95068896899146fa91e55762bcca09c68b4f4171f12d4cef7529eeb78fafa353a56ba6a4ccf75adc7c441d335ec6cff8705c199f8e06e3bb0791f11e793caabd6beff37b7e47283cfa95c66b167b6967fc6fb6f49cddbeb3dc7b2dac09867df1270be355ec49860542041120318b5bab473fc334164be3572ccbc7b02baf62637c66e3fdac4d0d663c07bee67b0f89178f9a62df44bca40fbbf514a851f4b3f6bcd3a98132fb2178b32f6c9b0cbc322c5f4dc5c6fb168805b2c7361fdabb6b9a8a2643060ddb42434433ac1be16914fd0804a358259b360d126f26c3564d46bd2cb6856c0cdb44b68b1aa47fb26dd447f4536c23755283fdc48958b7b17ee3380db2725cc7771a2cf25937d228fa9af5233bc4eba5378a4f7f6c5cfa6134ba543edb1f1aeceffe9e52ca066a30c8092f8c464dacb8f3db281ec526f3ebea9eaf340a13665ae6e428fad5a7612ee59690e546ed19a56574388a62acc256dbb3e452963d8795341d2e23851a459fc8a8725cb776640967b912f7e914a5943ad0a5cfa12fb9f49de5f4c17f16cb59fdc37d52fb4a5f56d284361ed9973edbb4a1e84f5ae6c299363d712ebd8ce45cdab2738d5c5aeb9655afd699ac66b5d65aabdfd4aea27615b5aba85d45fdc9325d05c7546df3c1651997655a6d2310e7d2faa1dbd076d2c4cb5ed33c4cfb5a08db786475f3917d3d54fa266a9076777777777737dd72f4974eb59eeaa5bd57b9e349eec4911aa41e135e78dd5cac232efd0b675e37cd2a2e7d953f1c94755dd6c29db4d86950ba3ff7fe58a9f4dea5efd277e9bb1fbbbe6e5fb7afd9f7fc2831ad03429786cb4c3ac073b7af3837beb41cdbebfdc658b7cd4f54fa0d5237fd13cb44a4158799dbcd477f34ee3d1ac43acc396cb3dfdf8c8d87775fd8fdf632361ffe5886030edb0ed4954e9e780dd4410dd2f8fd25abc365ba87a769c02ef4dbb60cf885feb4cdd9de6cdb20bed0c76cd7a08f484963e311bf78532a95745837441ca9644ba5922339922339526946e97acece2fe1348a3e9219989cfa61c12b7de9b7cf7b7b1722af3f90eefa5fdb5baa04af3f7b9e29faa196892c7b5be5b6e976e5fe371ffdd1dc087667d1c751f47f92084ac1502c8a47d7755dd7755dd7755dd72563cb71451bffe24d58fa88d3206d1ef0ff74f23c6f1e9f1b599115595964f595c5958d47fff585dda77d4635cecef716ba8208e1952c668558211e1126b4b2f9287d0b750a6b56318fd2f7873f4c2f44bc2ddeffba7199e6a99ed771be0576a1efc2fa15fc42bf858d3736e2b8f785b5761f3df5973ec4be146d606c3cfa31476a9ee66117278ee4499d9ab2659ac751f45b5a0f0aa541309f15b26dda88b66155a96ddaa66d4aa52cac2c9b8fedd3c2d27bdb8eec75f8e17d3fb42fe2f4176fa28d4da756fa834809e4e4d267f9c3d53b3d68e3a7663768d19de45cfacdfcc9a6f7b28ee457b816dc09cdd1e132fe0487da5cfad5dd5ff3a2a3a121affe33ee2b4ec9187f77b1f9f0eaf5b3e81e6fb65def9b76e1a0518f094f06b12a5e2011e9fa4fa7fc33c91fef54f5361edb273d243c47ba6e2e9c4eb13a25a3d154e979091b5fe324c34b992c73dd308a3eff050296712447a59a781a9c5ee0a520bc9288ecd16d8b8b1ec032917f60557d151593296e3ab41079fb8174b7bff4b541fadce623fbfe84c45b3f0fc965a48602735d2c9c9b9c46d1473273e4d20f61c09d4b5f4a29258d8c524af961c1abff938755d7a53f8f340512aff640a7259e924b2792700ad5981b4e1ecfe8349b5cca40743ed9b2abb57df6098957fbc218b492bd945c3d17127b5df662b10b7dcc5e47b00bfdcd5e485c390db61552af7f3e8da2d74ea3e8ffd4206fa8e8a8e53272a90e7d976015bdf465920462955fbfd78da3e84f7ca1df725784c8bb3d90ee6e5f3fe36868621a8c340d466e90caa3a0d30f0cfd963e2d27195e4a0b2efd70bbfd9365640b18454bacba300d8bd8737cb11eb164db863137be34c2f4975c5aa2255aa22f7ffe47c3bae6d978688f7d59d4e44f5c9d6ebc2fd44a5f387f745fb7b4161d41b0900cc5274596f4114e4bc893fa56db3c3eb6af9f904d87ecb5cf6a686eaf9bd91cfdd55e37170eab51f4ff4f9ef77eb52efd8ba7c1f9f59118c385c32eb455faf8b541dfe147f6dad79610f16e5f1fa996a7c47344ee5cfa4aa43cfd6ef5005e3c7dce4a76e9c75e7c200c1179c30a9241abb1e9d0df8fed6ba2eceba19290d4be20d29d0c756aa53a52f3b856513c9653cbd3772497816954ff8c8ff7730aac72f1f36515bca249f165264581552854f08a3e5902af2a1124f0aada148157f566885542ac52f9f93288552bffe4099748136c947073843b5f4ec1ab8a2305af2a2bbefca007bcaa2c3f97b02ac6cf973eac7af138446009210708774a1fdcf972be6c020a56c22ad32aeac497d983035e51567c99485855575327becc973cb8f209560eeefc2c86a5e15fd8186fb22fdeb3a6afd6fb19b67e66514fc3660000800d1b2e2e0108c0cb0b0c4c0d35d860c30d37c4c4e080432a2523333393430eaa1a2d317c1f0dcf6265a8d8953f599587614f8f626170b6c5a7a4bc66bbbfac56b2d8cfb0f269d8d2c71e9701823e0d0200002e16900d1b40412e2e4142010880d0d0cbcb10110c0c51510d351419d96083d1d10d371c358989698284030e484e52292749322ff361d327333f432487cfc146755303a78515c3f72a9b1a372d383706d6f755c73e0d1dabf34f4367c6b3e40c1bce4b9f867d1b6e97beb59f0d532efd186c8b0d655cfa35acca86352efd1cec8c0d5d2e7d191bd670e9a76c88c3a58f830d73b8f4636c28804bff061b720f2e7d1b6cc83fb8f46bb0214b71e9c3d890a7b8f45f6cc845b8f4036043171bf2122e7d1b36642a2e7d00d890abb8f429bbd0f76c6517fa26abb10bfd17d66317fa312c0abbd0a7c19ed885be0ccbc22ef459ecb30bfd15dbc22ef4552cc82ef44fd606bbd08761616266d8857e0b4bc32ef4397b835de8a7581c3a7ab00bfdcbf6a00076a15fb20cf0815de8a3ec0fec4259d3b4d2b6c3af1fc964ab412492057e4a869f1f7d5835c3cf8f3d60d566024e8253595c39114b2e712395608113d1cfa89414b42b72062b835d914f5734bba21ddde94617eb8997f5c4a28be5d5f3344c7ef2b1c71ec3361ee46bdb0ef95a2c52129168acf27ebe648255dd4fd9698f7936deabf3a4f3acacc8efeb8227445e2011e962b2155748625186511f325eec334d2bdd2c01df56ecf473735f2e33b9c9b999a76554d218656701be1d52a1438e9a574e944400df9e549c876d380d58a69bc0a8f931c4b0b2e2c245673ce3f9fc04b52ed68a7f1079e5f8c703bc97923bff0b83475997559a24ea54f7f3a592961942b6e449c8039ad3f34e271d0ff85cf032130fe8dc8c9b394a2e1ca2e33217cb5194e5a8f92b34de3e7b0c355e7c38430b241eabb00fe5933bc170e7cb2097f1960f4159745fb6dcc7e7c973d9aaf185b5e50b6b0c5fe87d5fe8d92f3cfd179e7cea7c75ea807e5384271eb15c262661d47cd6cd9d1fe30b9f3533c312be082729583d60296197a9d3e40e4171e74f1f9c6f9bd313cf894e34ca828a47c269e807777e58e7177bd8a5c7939ffd4dd26db9cce446e8c6e6f2d53e3369a66d07ea76ef460dcea2062f56831307dec47ebe4cc22a1eb04cd4798253d9cfbad352421361ce1d2965187b78c85e66eeeed1af7685be2c3a8037712730a44d0b940f5dbc6c49240dce593f6fe5a22dc05bdfc555a9ca09c68b16f4bdcaf78b3a40c90efaf225e581f20f8e0778bbef3ee5a3ce4e5c451d9d4b77ee7cde76285d8f6118866517a7d9ee46cd729add34ab6936d36c49b39866ab66a9662fcd4ecd4acdfb82d06c6b259898ae0ed12fc402babde2e5c0e3c97262d59c93851808ab11ba8438dcd97214cf9ff4fa92a761358b975ef33b6c5eac6772cd7639e5b28ccb352ecfc0dc6d3a642db4ec69485f1a5df9852d378896ebddcb7637eeb04be9bb7b592e89bb97dd84b67b59ada5ddcb668e93ddcb968e4af7b2d812ec5eb676917a2f4b9f5c4313c9bc9795917559bf41b04be96fb40ebf97eddbc22ea5a7f166295ae845462d93008983800fa54d0f1ffa131f1fba930324e0932df921e0fb1ebe938fefab3788f6402c70b90f531efb0cb3b22591685b0e0c5bc15e8903bcb42bd8772fb107aff729de83570691b2e53207f8624fa3e6d7eab9f842afc5275ba62ffc8fbfd69ddf25c1935f7a2c84a15521e4d5f8d6af5f9fd6a7545b0922fd88f3bc665778938fd92a87e89f2716cf0977823d2738616a6cfaf2d2fe5ae4720c44cc213b3a2211450956d0c9eed9176bf311bb7ddad8a4dbc993b6b9f2ebf555ab97dac8e2550c01bf48551c01bb481deaf52fe2b08b7c0f055e1873a394f2a8ee74c4e9238d24ac9516f1e4e51f43d08a24b832aae0ca08832bff1ae284b71c92b5d8ddcda403463d82de7248564e83f18b38280df6f71071b6f9f1349d1ab44083f19b85fd7025f0f8e327806b66a87d1b07624df75d0fde5784f7d7a6837fe6d7af70bfc271cfb97f40e687db0bf1abc405bc2f2203446451e3bd11436abccf8816df6d1f90f9fe3ec5950d72eb62f57f65fe2861fa16968822388b9a1b951ad3e701efbbaeebbaaeeb3acff33ccff39e033335de13e17d9ea3baebbaaeebbae7c04c4df779ddbd35b5c20d6e8003df382deb386df3ac2b71df6d734e6cde6a2592ac5d9c37d0b86cebba2de3322ee334ee061ca76d1b97711cc7655cc771d8778f715c86719f7dd87db66d9f71df611ab769b17effac5de42637e72ccd1297c9b6520a56719350064daed6c7ea7752d3ba5a2bf72db9dfb4f8cef96bf5aa5cc675da57aed6ceeb2ad675f531ef0bb1fadd2537f7d865da949393a5d20ccc567aaec465567657fdb4ba5dd7bbd6711997751a97691ae7eeeeeeeeeeeeee9a5f1bc76d767eb4f3332b3fe551b2aeebba162e4c1e9682e2a245670af23317dd130f0525eb56cbf4de47281f7615eefc36eaa24ea1689b0f94efbaa8cb361e282835b21aac9ee41139ddb464b5e6699acda17d276b3d11214ec12f404111a941d39b3e7ba1c94e99a22926c97477b7c7c4a7052fec224528b5fe9852acdf4c4525ebbce085f127feb04b8ae6751769d2a91613c9c1ffd3e9c7a77a444e37cf72502725fe701111a6106ad4fc262723a2141b7fd8a5e5799e77bd28046f2da98b782189559e664ad1ba8829c994644a327d88457631ad0891d7f440ba6bfa9e3f89f2b541d3a354c9db0ea60f05e5bb0f05e5e727fea07cff2098a3599ef9f9719f96ffccd0a5b8a68f1fdb7c98bef36115f3307df285c46b6ad5da7df7857cf4020549171515b10fabe89def48bea402b577e83ea1fbb8d0349bc3f4addb7df7194a37c12ef39b097ee939b55cb331c5d25b77f02b0176315dde5c48c4357d2e655eb0caf4debfb091519de6bd8a8ac9d47d88dd68ea5cbaee8174b7fbf84b9b0fda2d9f9fc9eaa198537ab1ed40dd2682a1d93642d244190cadb342ea35bde732eede3539cb71fce6a8c1268d8aabaec2e6cee9a4a3c050b833e5eb227699dfeec3aa8b55ec15c9f3a413913bbb5b27a23bbf8196485fe23e3ae898647a94e74e99be2417b65b487ae28f8d40d7ed84c02ef3a314fc12831c35bf95b4d7ad6efdf09f06e7922f5ef7e9d44af741e40d3bb5d27d5f13759dea96041a353fe2b0d1cf44418a3f39ad562b4bf181baee31e1c519c6225c1f282f7f3aa50105a1bc4c49f9c21f292f44bc51e87e7e57c1abeea78b1632dd725411ab4c3fbf8d3ae575ebf4844845b1f2859662e7f55264ba95e2a57ccaa77cf8291f823743b1eed3e0fcb2e0cdef074a10213ccdc61b9f74aa7e2bf5b59f2bf54bf125289ffbb8005bd8305909b00b5fa10add9a31a78924b5768c78474e3e51c99d30bc23c3981cf7f272db0704bbccb7f1c625ac2a7d3a609f10f1b2d1adb2088e9eccfdf4f2e40025edb77f6437abbbbbbbbbbbbbbbbbbbbbbbbb3f19dd378e9ab38bdce9742586ca09c68b1414172d4c5ec76d5a56c22e5b63cb88dd2c3f83c56d107f96ef1b97e9eaf1c890d4ddfd72bf323fc953ad33becac86ce9359bfd663522885cfa2cd53d1e6dc5ce3859156b9da72ef194dc89e444e343e7c29d4b1a35bf7adee9d44bfe0bfd87e5c35ef25f08deec64e3a5c1f2dbe6e3743abde4df78866da0202119d6778a346abe6415e53959e9b1dd397f165bafb4f152db3f2bb681e6abd83ed91eb24dd4e0fc17b68bda08c5f65193466a279dd44f9c88dbf88d3b6bceb7d677dc482f79c2f3c6e994fb0da30c78e8cf6ffb03108deaefee0fdb78e8250dfe384f2f694d4ae9b7f3300f4ae9773367f7757de1755d2c7dda4112279c48c243ffe9d427cd87742d72fbb3d825792d769992553ddcc32ff35b3c160ad333ed3354a45116bfc822144579ce7f00af6814318a28dcece93b805794890faca2f1f41bc02b2a85144db8f419c0aad2d35f002be1d25700abb0a78f00fa3db0ea7afa3cf08a0a09f56095f6f477f08a0ed1d7c1aaeee9e760205cfa385895f2f42ffd1b2f00025cfa34ac6af1f473585dfa33ac72f1f47190b9f4635885f2f46bb8e1d28761150c272f97be0bafa89324005cfa285ed124fa3578459fd0b7bcaa446cb0eaf4f44156a93cfd1656adb0d8d0b8f465f0aadad057e155bde1978903e3d24fe155c5a16fe25565b1b04ac6d33fb12ac6d347f15865cae92efd8d5735873ec6abaa437ff2aaee445e451d7e994f5f6395f7f42bab5835e3ed5389fade7c5049e5bb8cb57a1eaf64cb4d06199e7986199e99061a9e79b57a661a9a671680009e79000378660210e0996fdc78e67b9fb9a6e6990b508067c68123c733e7d0e19975d8e1997778661d3a761880470ff0c3be3c3cf38e6736c033f378e61efc023e0f8fb259c9d2b82cf69abdbeeb9eb329dfc272302c8acab3d8959721c3da19cf830da3ce8e4e0e0be7c6a6127992e404a9c9915111d190501090144c74681451dcb9d339f0e2f5e7ebc7514591e8ce135663cfd4697045fb207247fb7880577b6d2ea958bd589da761d7acd7c5f2b06b5e75ce79cd9ff90382ce83a93375ead461d49c296099cb07f4c19d4f9c9af068707d5e10e9dce9d4ca755d7f61acea9d4e60ec99e1c3b6d93e6c233a22cd26722145a0303ec1aaf93109af280eeae7538f6a94522ac3830ffe85e4323de4387135734e8e747328ce75b14a9fcfe573f9d4ea79992c728d07dbc3f2b006b06165ddf93bac0ebb830dabcd9daf83cd6171d802d81a7bed0d4b003b002b001b52a23b9fc6ae2c0d76062b830da91494098de2ce6fd00601800d250eee7c1b369449ee7c171b4a28eefc00d850f6e0ce7fb1a1fcc19d0f634329c59d5f830de51477be0d369445b8f36fb0a144c29d1f6343b9843b1f071b4a2aeefc940d651577be8c0da514eefc191bca2adcf939d8505a71e7ab6c28afb8f36bd8507221945ef8e6bf0da711d3037786e0ce70c8bfbc3fe3c31eeaf19e7a674e5c5dac9c3b7f8680571408680438acca3cc02b1a1404821b56d13082575448a80377fe9c3f35c02b3a8bb8130303af281151164f5875798157b4a8e80b49acd2b8c02b6a64848513567557f08a1e1d6de14e2b78459b34c9c29d2f9bb0aa0abca248f165225de1ce9747ac6af1f3a5142615ee7c6914f3c3f83438e28734f19b0687fc1f8da353cdfd386ed0441a1c1d230d8e3863a3052608343038886ec0e820f28186a6d584669ae02311181a1cddcd4b74f4b870f490b247a7a49415870e5ed2df4376e3e8d137626cb4045482e0858c648125420c11bfe31704100dfac7d0f142a912041bb747a77a30e2010207a3fc7909132388442e18481b0c68d0631a15637e28257dfa3fe4cfd0c48f699026e6c697f173af1f63661a74a671a5d378acfcf900d3a04fab80066362a6e01f81b8eaf757098217e343a7523264c55c8f6194c7c85311663203a12bbfd0c32efbe00858b88c34bd90714b0e76d0df46fc79e3a7f9f7bfb7340b14bc16427c900aa6626803317072032a4ca001199e385a02055c68e20338a889efc507e37bf14f4419b758e1853337c61db73f0d33ed70c2d19d5eccc707e37bf14f4f48b242a80ad9f439e50b56e3c8201e1bdc10e45a4c64f0022632d8a1b21fc508b76fbbbbdb6f54ff8d669658e42088d509ef081fa4a2209c20272a932382b00083243280c211474e180c47556052041eec10c1a13b60c26a8980650794c5bb310225d88142169000021f2041871e6ca0084b7660e0035624329fa0b17d52edd2ae2d878be74e458c5e35fbf0c4a53c1b31edb199c1eece784bc09014b434b0851230a901129e50c38d2a7ddbed0bb5d066ae993cccc0f5dead5502e55b58256ebe06e5031b75e796c323f2b45a19dc9eb78f426856ca6d086e7bd736ed0b33704b9f8c528252ca16af2f18d8b8cc048922ae77998908b0888206ee041b6072c410124bdc1697998cc047eb14054ef747ac3d2d9e2231b2faa6c1388405de6d8c1892840970a8b8d900163920a8999f110c348229b06200051f2b9ca0467e3fdc246e08227143f639e2863cc4ba21238de086f146045786e086b14786277052d0c4113a1cb8424df8577c410749fc180102079aa8e120126861062258c211aed0428d7f2107c5e009461f38c2e6092e78a1a6bf9a9d154891852c1c018b1c4419ec408a1c259490c4889a30ea0841eae9a10209269298414d185b37e20c1141178c38c112596c60051ee8610a249020410b8a88a0055f70c291245918c12249a8263e8ccb0cd919820c9c38d281a12cb4a0050556d0a1c212273028aa89546091051646c8c14d914d4dfc215c86a11045912f50d1039608aca889439cc082091ba19ea29e286aa28d23551401029f0f0425d5449f7ba3af2ca69452ca39a594524a29a594524a29a594524aeff4c48e37dda59c3edd5d4a97d2a57429dddda5113773b2e68c485adeacd8ac2576c03136c0b00d311d4304056877bedb7e7bb574ff0cebeedab5db62b2bb65cb96ddb56bcbeedab565dfe8d89d43ca8fc8cd955f1804f71017f3525684552c47edcf3c23bafd9d39c1fd72e9b29b8bb42e49498a1c422dfd44e3f8f77b3f61c3cccc92671fc529a3e43e62d93d8596b2dba8a7d0477d84a4032f4a969e26999b9b9bd9d9b9999d9d1be47effc2205a076d05b39c4e57a3781ebda897b05a72a1c72ab57ddd85aa80752093524a29b152a66dcc723a6919d7289e97953a79f910aee0d336bbc8af241f9332f386700553564a22b64f66399dae46f13caac91b63838d6acd8ae8f64a99558d59e5609227e5c6567871b2f466e688710c4385213a554f27fa4374eafa533cd5215ca084676666389e50939b04c1a8189f48729a2bdf691a945078d2079e3ec32eb289b8120042075e387365942f445ba002344c8057607c912fe5a936f12bdf064c4ca77856504a1aae9c4534d112af8669f08ad7cb4e5d50bbeea5b5c72a1fd885012d2fd4ee875c146de2f511e721c0423233403c80570a882fd75fd7cfc49957c00573fab93809f7dabc89615c4425cf6795df398518d8bce00557bc205ea19f5b9f6245b78d34181b68a8c128e3f6ba4abceedf59ce6ed653c2ab4f3f94add655fa53e9c3be1656bf26fa5aa841df6168a751bcc3909106dd993a913f611f62170e78582873a4ccf6f15d49a71c09a5a1f3dc185feae474aaf4f1e54e11565d1f5fb6805599f69905d295a2bc71be37184be2780b49a36efc65361f72a246b5a4bca91fc6aa8cebd3f8934a68721626857c7b29d4a93ab47d3f781aecb6e0f9f38dd208c58e74aaf6740a53523f4aa20683c848341487d825fea02d47d2a91ffe2defe9941256c98fef50b0aa04a4bbbe30722ea59106238f3ce2022fd4da880fe5841209c873c49f4822432ed3516054fc2bd42d785fb8f1878a882f91747cd92292ade851a85343db96c3bfd22fb9316c237ec4a741250df63418bf8b5c261ec1a8f8583579ae12695ca0ee548c5f28dde587f21312afff0dc7b08f17fb7ef8d30fa91c6a1996d4625f7b6eec14df5a6ba569d0a57ff51f98f98819897df3e1b57ae94b3d380b61cc752c6ecce2c60e548051f1e9c78006fd9b5ca9645776c8ec8b2c76892e6ec46416378cd7b19806b1a7ee58fdeaee37da81e8d4ca8e7a6718effbf083043a1523069617b3b8cd2d0d6af1b397ad4ead949ec539110ad99365afc50f79d546e20b8b55a58fcf1e63c4be5a3d2fb2b42fec1bb611a0cb611f673330a466935f2a62fb0c0ca9d95eda901557535cec23112ef6d9177609e8625f38a475b7e7eb3d6cdff698a51820729d3e6f09e09aada1b851fb7c5074f9dbfad020cb221fa2758d234992245192248992244aa080c289c911a73d3627ff46fb95dc929b9300bb649f4939d3329ea326d819caf3c3b8b8e1a8c92ad37b3fa4acbae768b2dd6217244243f466ae55ed42f199995dd7994cdf99be33d1ef505ea2bc44f99b19a854ac180a8b9829442303000004058315000030140a858382e16810c691b6d70314000e7c9e5264501e4ac430c9611432c8106308010000004000400446880300022e0327beee649b364cc30ac27550b78f6988d48537cfed3a9cf0e022304c6bc351d288346e6c29071d52190e9c7e2782b3f71602bc8b01cabad8b6df584a71537c98bb2aa863bc4295aec2a6e89b3d540299fc6a868a39bca219081d9c3de1b493dd84cecd65164a91c9a1b7226fe3dd9d58e5b383abb0a87448f6895713b0870b240448f258640598b64276e1d84e143199509e17ed292a0a59087aba5be6c8771c5b18ea2a1f011a86f38a4171caa970b2db391d34eaa0c1562158548201d8ea720a387bfab3916222ab3afe9e796b140a650a26209e528e0450ee44bb21fda011624a330794163e09a194af224626ddb5c04bac759d4c413289de27e19342454da831b98fa0c1396988a0b93f1935bc7c6a0147c8ee87beca9335cc778f832f857da994b1b507ec553dfe6aa8eb35e55b165f34f1adf059f2989c987c3661838fbf43c1c12800e1568c7170262da8a561aa36764319696c28cc1fc49a3ea6a174b8b50c5684c2a42567267ee80dfcfa3135ca690b2c16ccd149ab0e1f0bb1c0d4a645148ea58f03eaf0a234cf9502a06be3e152600a5d3a32f3dc249508cabf77541ade41527d8fea8ada010eecde0af6aa22953125e55321f488c3a1872606c06ca1d9067857f00b41114576742eac55cdf297eaeefd8effbf47e32fe60595ef976d94dcdd6d32160cc43647268678b49335ed4d47e412bd2a19df356b7c1b27dc93f893d143471acd8bd88836c4e2432db18af3c127b31d0856d5829cec93ca8c0725e46e84635f58ca5bdacfd14e30391486e1a72a4632cdfb1cda8921a36be97c6d52dc1f440b67836ed41377a301ffd856fed724cc07d13b6050898824ddfad12f608bead836365e7062dcc81576ce034aafc690aa017cd8bff817f10c7da514554552e4c34fdcc3ac9a402b8be46955f19db5c37d27892ed6ef7f6fc7158ba4594e028ea151239e3f7f46f340898788eb9ec517dfa6a4b03a03eabd71792a0957a107a65fb9dd09be53451496c6d8c7f7f219942cda8f5c9c6a6cfaaf91c49f03d43e82ccd1ec0ecd214f51ba94ecc473d7551feb002e1c3ba3533bdedaf012882893a9eb55bfb1c06d15ddbfceaf6263e948dc0f247a495c446e467e844ab8756425730c62c9d2db466f7bd58d21d79365ac363b91abbe37c2dcf3c4f8ea738031d1244fa2e80469606ac29fb0aead925436f1403ef58cea1eedc93358d00a1dec0359f23f09b9803477b3039333ac6618f1ee1e9c0612e16e4915b31e79dbb2fb83fee0284ccfed75f3c87d29bfe224b544ddaabcb03c5a443b43190f4aa9f1e02047e78bd68748f991857648d88fee5a1a6c5a002bcdd7eb33e66d957e8c5e18a97d73d74c4d07e27d6d4e4c20189fed7014617b8cc42e8c28750546d7a4baa32cac9ea68b1776ef020a68d5eac3b55df72e059abb007d46f38de722502c408afb6d5ed6231cebd033296f991de0226b1bf4db55e834a93ffbc064eab93261b007e68501e1e707b167b6a8313cc22d2de8ae7d12b81e410ac4b2b4bd6a2a6b86cde8b4c508f63c04a625c88d6199e35c82c374f8b9bb95691fd6519706cd15f3465b3e24ced41f2991e3632cac844822917beee8da9e6417f5f2823cfac24890aad7668a67dcb2f156cd982c8b9c0c5a628af59587507d58858d967528cc49bc04075fe000f25fecdcdf0252e647d590d695d965f1d68d61d793450f123a3fdd634e0a6aca1373a6bb927ef8b83e33819be0cb74458dd9125ba5db9fa095a36e40f54616c17d8a6cea50af7a7fb37b66756a10f05e45a5f59384787655330c1d6ed2e4f2364577a56c239ffdd4f89238b45e333694f8402b20bdc4927080ca8532b3a5d5a055a08428b01d45264bbaf4a4a597c84f7a607101ce109e3801bdba35e0948a5d6cd14d774b44c17159fb6b12e82fabb2f169c5e96de9696160141345652f498ff6d094e66a89109fd490499a95002d493a1898c769fb090d1c8a99c25c7f1c4cd4e7b607f5985ada5d0f44897025eaff1204e707ceeaf4d4066ff2ee0d42ee259a72c4ca819ea8d796e8c17a191dfc1a584ff74c626cfdca712450cee6d0cbe3015c62cc347a167a678a8fd137fc9b15fce0cee0dfb8bfac067ff66da037fbe9b42a850431387878c40e292df2f0e47835128bd9b69df5adfb7a4e411b69efc99b075ea789e5f8e8d410b3794c32d4e6a906553d3291e74e04efff2d862b971f09e8e76788cc9126c982098a2c8a703805dc49548c840db5329ee16475761cec4a99e247fc76f045acf6f20a8cb65ef271aba4975dbf0ee9d1beb8ea0f151783493409e434f8c0236918801ef984a7c7862b7ccf0fd4d9d876c1d108bba7670eeba58b1d30059299f82ff428158efa8f35be5732150b52f03fe2d8f9a3d0a2f3c9bb14513f48badd40530e84b427760ce7ac0f815e1073a3cc02ff20432f563d5a642aedb7ead15610a1e2119a8a84046209d5fa7bc50b2c6397007121c90304417fb625141ae96636ab2958bf0e56aecf82e9ee3de958aa4c6703c7cf0129babe9b2e85355ce8961b331bf86c714e2caac3ce4dab0c5c7f2416f3792f8613eaf77f0fd2fc8f7c0015be57e7743d8392dfd1cd615098f48fbb5a2cb76250ad613bfda22055d825acc2b817079eb1e0640371996f80e3dca43a8caf2e7cc470b5d385e64815f5b4368d8026f9401e91418219020a9116e4eb06fdd11e04c278cdcd2bacc61dc54da7a5507c814f645f6f8e5bf85a5f6115c448900272bbe49267891d692c118847ee77f68af99b8a59884e5840555eaafdf46d6f300ffdae85d0caae359161fe2e5c610d2ae208fc7a2ffac1d13898b60875b0219a3a63218005e19beb237db9018df615d618b101e34f08e8e2c642d1886e7cbbb074529f5a394b4b086a49c87bb349426cc726a9a09c430412e865e31deb28844cb44c70189a3dee928c14d7b13ea5f638f97538f2f4264015f50630bc074ee426599157c0899c0174108e40822c3a807268b6a506bf2083fa40c2f01f8ab740effceeb5029af22a24593bc5f0db65c711d5c6446a7ea244cf2d84a0b1077daa8633d732816c2b517ae243c0d1b8fe9ababfd925dfc17d1df7b0d80b80a3bc4214a20c955b09f1fa82ea09ce353b9a2a479e048ba616a6fef8ff6ed0496619e81656691ca6ef4004ff2153073ccfd891a24a08d3e0d7376333cfe8f229657b7fc4e287442c6da37456f840a9a8bf4a8bff107e441fbee6f1c9cf70e8c87ffe14475a9b01111744c6c65dfcb1fd134306c9a5638bc19ffb0c033cc3f9723ccd97734c76e9f1a3085881789f1ea0a15f9308809083f44c63dd1609fe0cd518b0e5b3b49cc6dbee9e1ace438d9b0718ce1c14eac7074ece4c875a753d07d65cd1dd4f04687c3343a18efbfdaee17cfbb8619c4eaf8b5c95da04a99913ee2f4e5bec880eb9938de6908ad7ba53dfcc4a69633bc72402520e73fb95300c5717ab5d4a436070a6b858bf14e97578a55665571f6872b1a1bc8e46c43e7073e142f1aed3dc45f0349fa6880d6651cc99d1017dc1192d3217b4e2b0cc97a35c9f505ca450f0f0af8c0086bad8f18291a4234d07809ed82f02bb7e3150c089baf806ec28ea37a6eb95d90160eac30186030f65f8f181932bd7a13662758a91f73c69e0c23d41a32bd01225bc5eeeaaf9c4f085050295fda51ed51522a92100f4d0745f5f5209f3ee0b8ffe327f40e6af81064946af24c5ae0a887aa1713083636b35dcbc207daac393424f18f17458608ca77db99a719a81b54982c7a379fc895ce15c74dfde7bd9a3730bdbbef91d59bf6fccf4cfdbf775e833763aee3b63277ecee3781bbae0d3dcf7fa80554f1f8453ef1061475241e5314a21c95c8be306465751f2e7c8c24252319f3c8643401d788b8ebb8accf17d54eee6503abd39f0d2e68cfb409d161a98941ce8a2f6e6b2041d4146c7dec8a3440aac9e436cc09fb0b143c88b4c1df8c84f20a066de8933de9db13c47c2eca51b6caa4e77487d69abaec818bfe464b8dcb5320eabe9becab4c063566682ad1277fb947b8a17cac1643d9f22b3a2ec694cd7fc7fce42dacd48a4d93b0e7e991d62854a040b5547115c22ec0c674cfb280d2e00aa7595d6573ed19d1a0043730d99237b094be58e669328f61eafb00a396a28340e7d21235d499336342b47edb0df208a918a145b24328e5b318c9507d34bbd8e1bdf3a557a8923b37f6356276b29578053e33429b0691b3f7532b882eaa59f8c73290de6df5ce685ccb731146000c0d4857f59e3e596e81c6bd1462501c90967c469123307ff3513caaf214e9ae3ce93379fc774dbe9b8d50e33a9a37972708afaa9ad75bf2de01b1c0f19cfbb3ea7ea0ae1de0a27f527b0748d5bf0f3deac05d687a289d2a723cb160d683a80d5f5d19160698f0fdbf4f7647d615691cd17e9a55659fbdd243384479f129d5ad2e26c4e3cf3800db51565e1299c36b5d7ddf33981e3f222150b667a002077ca33eb00a213c11889887b47a2e0ce30e8eeafc1b8775ca2af7d667daa024d3f79fae991eb3f9974fa2221d31ebfdc00bd17c85ed1a5e9f55a91ce27a258b1314c18a39e55690cba35e417a765230907e5cf187c3dab0c26be785af85210b79dfefa61be25886e4117a619cca4532b66ba51cbf0d57dfbfcbd7a9205dfb643a3c02ef92f31b26978b5bbde081a4f29dbd5bfb400172b9de358f1e832b9fc13576434764aaeb4106fd6b97c9b82f762d85060fda3509806232cba0f51d00ae5efc265462b932c0eabd25eed460aec876aa49a1c2c6baa53a7a3c68a4af9a89aead70735fc882aa0d210a738b797e99f51bd13d1d84d0444ff1e5c410e21355a87048f4010e33b62990582490fa2cfbe1d376983da7bd9dfec59402d05a8ed46528d08ef4cd5a223649c6af450aef5f3e3a90ce90934e3cc0ff99c4c08ba3f2a57a7cf44c7d872753840d4c92b422a5aa56864ca816f07a2be5f9e1eb8e7fccd6122372f80ebc98b0740b41278b1b397d863ec3f54c694873eb3bc1f30918bfd3491e02e5ada0d9dedf29a210727ab8b030db03613ad55bff5aec3715b7860325c275a5955e75c67a5f727d1522f264a198a9f547c1b1645cae1446b6783715339fa2d89b72c60aa871f265d813802e3e46a4dbaa3720ce3be43ebd5a446f870c31537fc8028916604bc058618e2229e2cc2487159eea739a77b5cfce3ce37a2155f603855b797a67bc2a95ef3f1820f4ee90d52627aab059f47b44a07ef9ff829002bfe9cbb78e81f073fea2f95cd9eca812c548047ffbe5c8c2e4f22690d4205b629a81d0a4053fd165ba7ad00fa525025fe4f29020a732ba7ee4b1a90798939ec0ac02aed742f5ce2cc5bf691dbb27863d7781e1203c48afc1ad77de62b332036770dffdd6efc52446709007b47a3b67feb607d561f64b352afd32b7cc0d988986034fc17c9f2fa44a767c4af1f942c87828a90c1b3b1c26f3204446c4e35e032e5183b1963387037fc28e2f1d07a1fa341f03d55fbe587639dab3c151f17916b828c68fd4a2d1f61930ab979da3f0a2f8016713fa1c3f09412de8547235bfd751ecea23dac48a571c5aa35928131e5ec70b37efb29fda49771fc530a5e9205e959c9c24473db6c72909e6165ae0c003e6e49e5746b3d7df48bd534ea26f7a35b587bc0bd6f59f16a27e8bbf949bfbceeddadd23cd037b496286ef47b0920c621218f96ee152213c15fd3e23539ab8ac395503edda52c275ce7b2ddce59c2b16c38dbedcbf63c549c27277c80668b4c6ca3028a1770aa0ccd78f4b3f7a1a69c6f72c99ac47f275e8ea156fb72542b06e6b8d9f918071ae5886ceb6ba3ebdfad7776a209f2d71ebe524e76f616427bfa63ebdd025919d4604aa60fc582294a4cc451716d3fc3d735434a4b32add8d9959f354e6f5d15f664f8476bb895d67cc6c4cdf228c872da1e995017407e42546c196630f666c852a68caf6f566dc3d6ab8859212493bebc06e4c9ae178b0cf0892dea9cf08dfa3e33ec4cd024eab4b2f55f407abc08059aa997c5a27b6e40b00e6a69905e597bce40b9fbad2dd2a086f67c06492c79ee34fbbfc6d4298ea51f87b26cdbaf2bc0d8949c015d8d0e90a398f1f96a8b302ab0610212b67bbc8fe80fbe73dc19e524e1113febd877ee434a563cf7ce1795126a7fe329b1593e2a0aeea76425e6adc2b6dd43136bffa77522268a6b1b4ae2d8bea29876cf50b6a7646064d5306edeba87d5a4e4e62cb5af923b17dab9aaa374604cb0b5f35e753377da370d6ec53067fdac6003696c7af57466b355dcf12c974f3ee23583de2bddaf80e95dc5533e7972e0054a7f3ae8709fc5d42cfb07294c80634a95a420328f111ac73e0fc7380237f62406f2e353897b258ea56d0210f3115f0134f19f81b683f3b8812d01b237408bce7d684f105b3e12a573a010cfa5e904c14b8a5922db39e94a2e3d165303e104e8d0e4d4ed9008526af99cd5bbc887401de1cbacf65c1ce37f2724cbd64d3f48e0eea05a54e563fbf9e299afa3f37b7d7e49ceaf5caf71ce0faa57721b3fa5de31ad17659f0ba533eac0878271d1cbc2a972100e9050a63ed4ad8f2e9cec37e60d02ed4280c8fe2d82747e7cc3914769200a2d6f22bb951e1787ce78bf5fdb85020acb4dcaab562ffbbb1a3f44253ecbcfad48666d81271b65200ba8b1301fb3307cbaacfbf10272cd8a6ee2d19b286596894b66958eb71c7f01d424295edbcb7e6c7fd63c5d7cd4826c55c116f6dd222312a2c1d7906703b38a56697ea4e7d4b54e0a99848e8684f00d698a3c14fbcdf2dd48fdcd813cd4f9bfaa7190ebaac10fbc2fc895e439a587dc782c027ab73e328a615dba5a634eb6b71d5e361e7f34bd2984b951edfe06141272042fc33b507af69869c40bdc3dedb73a2ec5d8866c1058abadf9edf7930364420e6442f5c92fc0d22b454915b90dc9d06a0139d988adb17a35596dd7759127b0f67a224740f68a3b90c5ab3caaca268207ce790fcdb0bc22d20adc9003dabc726e6ba272ee887b2b29047ca61bb62f7090f3638cc592ece1267b9364315bc69e579cc72d41b266f7afbe91b1694f1cf31924d6c473b3319dc9275f5d49f895ced0373b9009ac9dfd3fe3ce4b333f4f43f2fe77cb508ad92a7614b8f83efc0d8d0120b074a09d09f93ffa264c52275ae7a8ac5cd1d8c2a74dd74a3b92d85cb947aec043bd801ced870d239551fbef41f80ed3b38c70885e1f01e09b2d6e20a3f8445089f01db2e850dede439aef54a6d60e1f323f514530eb59c5aab112ab24d0294b68415ceba1aa9a959d5a89c8188c0b72e28aff0c8e35c65545e37f5cac64d6ece8789251dc5b99b7cf97f683deca8c1bcfd717f049a8fb736cd6c893d97013feffaeba38b1dd8288453f0c31c76aa37fcd6b891381b22da49f3d561c0a7a4c8b5ac1dc06d3f23aa5a62ea20836a83febd0303f481f651aefb6d3c1458227711cfae1ab3c83e19e4191bc2ecdc33f889acf0789151111fe368c91049e2de25e0b597dfc814380f653159299a7c7d06e198f54659a233a3bc52ac6af708aeb4444afd46138bf61325e4f59cf234d0e83a90670ec9d9fde48154971e17334efc10bc882e9f52b0a24a3f45a412090c8044d1f8d2cfae952333b9ff6c8af113b8452bb50b5a29b12d83565b074f1b16e6f4a948e48f8062a1ba244d00f22fdeb0c31071b9122af978c47dceaa8c091414ff2c9dfa8a00d7af618b96df1379f5a60743a559c9f47c37cfc774d2dbe1d192a512bafb41ec950346cd9a8959ad69c22d4b929cac824ecdee625c683b2934b5c420fc77bc17fb07ef556654634063de6c1aef97a3b1179ab584c9adae537f33a8998bd8997790a634e9ee00beb4e55941749342626dbde527448219767eb0ff2e790ea801e3c85ec5d7a11b3584cb703fb7767060d7d958923aec0e827a48037596a7c18faa10093b0fa1c0f2ce9f6bc026bea82dade16810bd81d99e1dde7fa555c2e4e9ab9794ced35f6d4f642fefbe0c6702f0be289c687f870f64a9cc4c79847e9eda3ed81b1bf0e596c8e54e67d5289a269ce7918e9100a9c5696adb2afd7a2631cf90851c0d8010eaac52ac05da0e152b2cba84ddd034fd7ad60096d8d6f2f60072c731889be64b4b8b652944dbd10bf18dc1013450f02992cf5e990a177d7a0c924c3201168a51a1005c992f2d6ac66c2e9965dad027be6b2294dc9669a39868155b2270c62a9f7ab9732ee7b8f6857cd6ab1fc3fcf6c16b9f2d5aaf488edd0a522fe8dc283847fc15e113588c8333ffc3821e4a68e5683223721b616e4b3f0764873f7cf8f9001f43efd93b2f5eeb7e3579dd0ff85aec6cc4d2d4db797167e8c8b41ae3453292e5cd219d8ff088edc0cc7d8f5f39d00476bbb5d0e9d347e7b64dbc6ba17399d87e317b9da391fb5bd8b48544f76075a88b48779035e03fbb0ced9cf111c657194f38c13574b235a88c03059aac79dae394971a2ad909ab336082403580054a851649b93955f75bec005dde6cbd17cd326e888cc8c69484cc6caf0d68a15c0f22ac380b20bfb0066c2e0057c1a2620a278657e4fe7ebda99728ea16975b13e7f51a7933bb067d21ec7e30b19263459487a84704298555613eb1432ae08cd8be605db580d2f14ce9670cc9ab10409c597c91e6630d25cfcf9116ad979351558c41f7fe8b06321780b5bbe7521b6d86f079a7e3dcb23c77445614288b5aba1cd2951f542cf08c0cdc4e56a0b4d0e228342d2e25ce1b1ec326a403621f50b42c15b9ce69900f40585e7ddd7d91c05674b032e0b93010e7fcafcdbb377d72cf2d452b704457c2c3fc5e525ab5d853ed8f68f59fe91eebfcaa1071f2aa13abf6005d607238c43f416cb155e0654f9d1f84f9df7cde101bfaa823e8413298156c00d0165e55fb29e753bf2ac5791961a4a2d2bb2a9bda9e8c741632d60a92e113c36e4821dd9fbd7dd54efb95c097c845394460626f3fb342b303e4e82ed83a4701a8b8fe92b24bb0bc4c6729ffa218a98bba5da54dca0bacf7a9a0e7a586ebc866447aafbe34a5d4552983a5cd37249d1eff7fe7af31f4464ad040d8f393027d5a24e2b600acae04cdfe2423aa89e2690088d107ad0f080d1919cbe9a117bfe01db3a0b73fe27a11d334548226679893be01036c47e38980d1027ec89143f5fe58df9b9a4ace29ab20e1c8495438c936c97802a16e73bfebbb93b1f354571343f223f8dc85e1f256ebb308eeae8c225c36022c25884e93e4f5bb66d96f437d1e5a3b3fd2b3f6b212e05dc948e83537e431e535e6d238e686a3916b123a9e9071a9de7d6a214b144cf52029301c474dd90c416b7888f5f17eddade927ac280bbd2f1bcafa4a6f1a6dca25da962382835a64f863b9860c7e51388f735a38d2d4df7c66a234f7b484598f2e68b3cba557364c7ff3cd5957091c3711a0d90b84c847fd3ba1854e9074d9d8ef4ef6ce14a9b2bd2e86d61cbcb3d69ca79fe04cd6324dab402ec6a9c1fa754791c52a757ed18a923df1bb1e1107813eb7a8f3047f0579bf81afd233c9bff1b0df0031708b992f3f9a790cbd8eb7d8d993ea87946776a61f51bb287e628eede1887743aef9de1f68c8c60eac6326fe89eca737dfd64b0b396ac2efc72edc0300f8d9d79a0b2f1a668f9f4a05cacf29fa37bccacbc365ae7dc0d4bc7b51928fc1155274dafb0784e68f31098304eb7df479a69a5f3cc4b6603fa9f76d9ac5cf4d900ac0c6a2b90e416175c255ba79f8acfa04af8a4978dc5011a936cf14cd73b86663d72380297c9569d55d791a2fb398b9b73e4c1305c7f4fd1a9a0a1cb0ef222c4676b6261b00b8a484eaa4804f32c41dd000f5e8ba2cc60979958380a983066195b3f9275d730b92515c5be8a6d53aff81ab9e06cd85328d4a13012411c8f29f98dc9d6c9dc3b3c15c2eced0733f070ea786d0352743e4e9dd218ca395c5c2dfe624b476c1b2af8b7bca28e4845fd21df3569a5aa19ced9dfaaca636c99121be95f2b6c94fca64133fa72feafc6226d0acd1229c967bcba01df25e3c1be0dc09addaf65da4e3a172900aac12e217109687e990a54797bc781116ab669a0422277885ba3f83e2ed4b019a56ba0302a519e76eb798fc407e2ac90449f27f2e7b396b17d85ec3c32122fa9b763619517160d8d8fbda4b99c774ed91547f1fab0c52a57ef8318d0b92a87eda59a8599e32c4c98d454398c99b9ed1971ec123401b77f91190b1a07368a1c45aaafc391ec3b8e0dc646be938b137f98047f4a08bfb84dfe28c427617c95bb769d5cf2164019d6e393decc785e48246c383cd684aacda51ab206aa32ca42e902ba334ea90b100a13742aebc638d3c9860619744fff4f57b86107088a70c14ce9c8d9759ebcf85e37b19549518a8ccd4d327310d26ef05ea6c6a8977ac8c833926cfffac8ebc36fb7993ca9a0a4e2e3e842afb4855e3324b7cc1912978b4ef21a04587ce29ba20f171043a51e6502bd01a94c6c863ee800262726f605275fa2e288321185f878500004921cc2de2c00cc6124d3c01dc07450fa4514d6a1c8bab2ff566ea16d812240110b03fa4520b884953ab053d7ad58b4eb89bf29f8588626d0ff19600b6c91e02a0f180b4294b66399a9164b50068542979198251a8a723ce5f28728a1b26053e01779085da8c6a8407a50b7c16ba3e22fa2347ea3198b2b5c2104356949ead84df56016c41ffe58420a44d5a73d75244d4675f71dd938b6290bc172620120a63320f2a8f8c57486131f15bf98ce70faa3e217b9349c8234cab4d9d64dee891ea093b941202148073e6f12ac3912b8ccbcf61dfe00d825479006579a69d046266f3489ce36eaf4a5418bfaacf8afd3cddb1c03261154d6a556a31ca25cf4df220c2e5107a8886b8150993369b7adb905ae810142d1d6dbc7e8fa4807eebf0c4115dcecf920f5d34a307b82cc0ceada426ca14ba7a19c7569113269a8efaec7cecc0504afe52ec2ecd7353085604908361ddc4ab6820dd0ba213073bc668f7339c39f3f67b21e3e98620c56877cbaa6e98886779275c428de7157ad3f714c905420c16c86381a550b96ff3cfa7b261c44b4d90016c8c9374b4f754c99e324549b21d42070c74c998b1163c3974ef796cf2eb5c22d8692db57d26d28322db8426d95a50ab188c81d90ded78e39b1817b7b702993d665630c4e66b68d5ae92e1837dd5c22fae850269edf0b5142292b78c012c5e2edcb5eaf4cf9391afad1d9191fddd0ed35fcd7db3fbe15dc3e5f06fe0c158b52748a06db428940a7f1a26a10bffbe7f71ad571d80c53566c0deec21b582f80012cdc9a5464e89ef301c21e5714a1835cea5e32de1c1c521188d6a1cb6a68b1b7cb8cd107ec6d886a88a686f215b960a450959099a1f90421505e80916047e206954b523b1e9adc7db549eaa14b6fdcb3dd19d419454ca09f6399a0d866d84b7b7f88d4019b2bdaead55e96d2bd66194c9653ee498564cba272c1e110173d44df94c01caae1e77b61e3f52b49a956fea11d8c33bd2ead8ec051b08756b7321d330c359765d8d3f164d00c53a0eeb5bef10a79bd76d93112807ddece63598b6abca032d98ee5f838fbb295833f06b8f6d72622aae1edb1da71e48e9da7046dedd8daa41040fd18ca14cd2db06bebc0aabd37fe056cf6c725a696f2252841b2bdec4110ae2820c0ad0f4ee097eb358218a545de2165153524da3ed9dde51a94407eaaea33dd22bac7f8427e8123f2f462ddfb682e614ee9d33f411a85102055bba0086307cc59c5a634c13ab99d49cb41809aa54c2271de1bad215a08b4e7c3a917e6783dff99771593c600065b7fefcd31907f8951f3c77cbb98addb914f7a6f4b10bd49774509a4b29ae028be8ce5d951b229421c63f90ce06ad364ccd99e74c2f6e3fd7e139d2ec330cca4455187ccb0329fef834176892ca94029c16fabbd68794b144d35e035eb75419bf292bbf7903d743616d59630697365054d8612258a0108b494a548d02133ae33a65e1f5dd5de2cb1625a5985b4d5026f1addc63e85f1d05bed9d8a8528a43aefb1cfc87e241b25582a3a0d21fbb5db05e28a92f727641ccf0481492878f60841e82b73759bb91f5404915311424e5e11118240aa20920513948a16f90aca73ed405b2e4b8680cc0c119b0a32a254c6004813ed66ffaa4894a5c7a263030d41f7f5b7488ce4732320fc733150d32741269af8748d6c8d2a589401c76f1b33ca0ce4454fb441a8d3725b6c202d94ae48fe9823759e26c956ffb96ab9aa5fb8ca10659729c65529ad7f65536245dfa79e08db0702985101790f780cf8778a8e3f16673ac8fa06a3fdaf6e33e456f0a7d204a090daa6ceccb4e05ecd1770eec1e422ab52a6d5fb1e3ce40cc477bc45188915434ec432850ff15328ac486a4a4f5c52c9d87d4b09f5e91fd037b3b599e53220228669235d9f976cb16b78e1573edf7443540b83cfc546bbfa759228fed66f49c1d3fea79f584a3fb303a31b32becd9acc00a9fd4c85047b0d3ec65fe6584a856e09231ea754dc9538ea51ba0a1d09c71ea7aad82d61e4d1b48ad50ebd7da3864b78bc699a38b6cdd68a375a3b0e45b96bec42dbff2a8573cd2cfa917a5b566100d4f60afed0c7ffa92df4279030cc36653350c19cf6f401547079e6841c54205604400d0fee4ed07bb614f11a93a47b2095cfb128bf43a97c8e45f91d4ae5732ccaef502a9f63517e8752795ce21e89fb1b3f7be0895a18896e91feef3108166e872404461d68b7fb5dedfcc9104c3240598b15d7757976ca471cb3f07adad8af20f2ccbee571416bffe82e94d90a05d4cd240c811626eeaad2e9ebae406a39868259ca13000925b4b9600b81e5091f6b173af87a6ef19d56c817993b7ddc742b1daadf679f043a8d88aa36c7c8e55f34db8cd08e6ae64a38420d39ef0866f0718a3dbd0a3f7c3d16af466a4a970446333f7f9931e60a4e5f7f50084c3ddd1c036102789c817f3022d706b579ea0e13b9b02f1b9810c92f6d8be22400c1ad5400513c60578e9af67137d5f31a6dae64e9722542338989423ba409d5c003822a10824f21b4793a259e061706ef5f7fa72d443a0a3593e052c14a5cd4d1ea028ce7142041c6297e6c0b709cb9846938491db9fc85aa69342ac9888da2b053113326beb238398f5d9ccab7068605155f820aa29198bfb4b56eae154271cc8ed6cd934b77f64d872fa0f530708a9841257063da2cb9203e1367dcb7632c035fe2dc7192b01c466704b0be9e792f6603d00a2a5860c1e10f8a1563ee5bf6636813abdae60067a103999d82f11c09c350cdc9c63660c1c352cd7d33a25978a680d4b38fe699e6d7b976cdde759a86bb2a8e58dc107dd1a84c4d2d777b79da645666481bc53eb53cdbb162789eb8198be25a0ed0d9401b282097a119af9b87e6cf4b99232ad6ecac88e138d0a1db06cada720258a66bbeea09e63c2617ea0cb6e80b8be489c25ab9d3dd31698ffb0e52fe1684b620ab27a45531248491acd2e8c48c721050c9d689a406f51ba0c209ea4068afbf2b80131260a3dfd727535510e5330e863f7ba36c0cbd36bf484366c9181e1ebb69d23e9390112cb363b7b1b36403bbf3af58fac13116c413afc1b4b8908648bf4ab1b58a88544e2350ee5618d0ba3fe2a00aba486220421a8cb5e4d0487664a2c31eb8ddbe1420987ce62c8b27e82264476f5645e045912afe146886dc75d02e944c47bda24078a369e69a88e6b635a41662a9ef33ed256b6e48a625a048e54364e6dbc2c46065ce52808d31524c1477b98150f7b3094297a72d479c609d53c33116a85485988c81094af2a97ada88ccbbde876cf82a945f01b5ae064b20a6d5da1f0057da00e6d134bb719a8035677b17e7022659695ada6da8765b42d05e9839f6a030bb0261f8404baf481262b3134bcd5085576a164fa40f72526e622338dbe94399a2c9e436a3d6b446381ebf9bcf8a549d84fc04f086f2785d0223991b8abb622b991395ef7a0cf018baedc0bdae81c019dd065cbcdcab4e1326d14ff04de27cd3f9d20d257184b8b1d7041905939120979a71d85b2c8b3ec2b72052760e4ba7db05131630dfcedddcece58b1865ce655cf037f73c956f5c9074a3582e068d92969631b18ed2007de9716d0066a7ca19c5a21d98a00ba4aaa375a4afac3eb2235d74ad752aa10db823b1a1d962236a74bc84e946faed0b31be1b6ad80fe973a51e8a22cc2969e7e9975745f36ed4c60b50df9b050ebaa20acddb13f7147715251559e11248d11a2e8d2a16e282edb20b062fd8a99ebb6c3cab77e392eae5778b9ca4785c82952c92d9535adbe17a80db03f121fd03b8ea62ada9c3dfdea8c59361b962f48d196242326d069587f1d44ce36f75b3f60cb778f54fd422a6e662985f8ca1d551611738b43c5fdca530a5a6a2f7a71846b94056b131ad7d073c8bd78d6311c920979d533e9ad88d1a8811425b3cb26ca9e57264a909602f8852ce0ff960c6953cfeda498d065d961a5dc974ca89305cff4618b66ee4b272adbdeb937869df75f569d4b36be23fc88875c1ce08aca76f08f44578226646d1a615a988659ca8a35009c3783206909adaaf4666df39c74df297399f620b1f24544a82075986e200b202c2a8fa0d771ede8b02e009f997299c6572451cc7c76dc8e61ffd7eddb9cfbdee18b35e2cd8fc75da5dc769c2e38bb29b404dd90a912d02bfbba8199b2bd86a5ab02c12f0ab509dca178d1271de5aa1ff8aea62b5917e36a94209742094aa446be3f6c437e928d612791592b3f0dc9006215c6343b792e87da90a11bb5a188a7f5f6a866a8a0a253797ff66d9f7d21eab85779458a9f910bb65df9c10f904658fe4a4363de02ea5486ffff3a29fe0dd68c375285d1a9fb5e42ba436bc5ba1acaad549863d863efe09d5fc538bfaeb8f5ba6517dc25cc2983247dffc98fe5ff855e8f9927cc1fb622e6382d338848c3be8380fb698e84817b7b0c448e27b51e4f26c231270a31b927924840cf933822c9c71400a078a1f3d27361f87675d8f901b82c7a27d5402db51dec5b974c881fea10c07389827784d615dd4d1a652ab72b3fea614ad73fb386bdac87f3af530e49f8598988e82d13de1818c44426f406e145738fddf7b6795f5575fe3a46b8af82bc604e858d893fa8f7bb67e1da98ce1829d97fd6e47a1b20fe44298b176d6378d8d603e5613a9d8a97545aa8c0ea20a846c1dd7bec311646bef04999039bd684efba2e6a62c52cbe6db807494f250521647898f5898b43abe9582c2980c5c8995b296a277d5bbd65371ef76d0a4e2932fdfa0248a59be1fd044c9064effe250dab644a721fbfb4e145c1d0a6e277d57f56e254de677625415d3ec1b88e4cbc92a6819f8c6936dcc60b3b5a54e4feff28d27f5a58b6c30c603446e8d997ceb6914ebf99f0aebb679d142c3ac3705d1d7a1daa625f5b075cd41dc0b2b5a07a99b3c769d29a67a6d5e244778ee364115ca126f6c8d81271a6ee8648c9a2b7e46ff42309b06211619b05e7baf0f23119d320aebd014df537684bc72b22d8ce256106e8814dd8b82ac1162e72673e64f5b5fd8eb64e4c91d395e0f145341725d9043862791fdc6342fa87334190b92e0e768ca9461302f2a59774bb98efa0d46d3c2a089ac192187904ead9b51b5f2f9e6485ba74f7259de2185b8f086fad310f1d00761f4e0b5e97030db612946419f767841eb81743ee9be1a5b64309acecb9ec72a140262f349c1486da2ad6f35c80426cbf8e5a550615a6415dddd2fb6c69209629f2fd67867b0a842d96fd6d011c5ba67ea6fa15ee6a8c89f780a6531ca2d7d2b7923ceef185b111a88b895af15b683c5cc3a311275c5dca15c93c48fcff3bb432709bef113167f3ba387c7c7b83db3b315ada2d8d30a47633de06eac8732cde03be3aae83e17b1912b1ce257ca47759a933338aaadfa1bab256aed6c5cbf5db4722bb6f56c0754e82a01c738fecd320d41aca982ba5197a55d9e7fe2d6d5edd3a1fe7a2daf5e6f5f62c36ea67455bb749731408c4b362a395a1c7ce10834dcbf3d2c41e8be1fa01443a5008e2e487b2cc7b0d391cb316664f976c09ab42821a073a19be78b48365e2194f59372a7a6c04df3bd3e14429f91657c953411b371571b0be3e722969872fe2c451d366d12aa0373a406205d7a8e698dda7cd08da129237962c4d043ea4d7a45735f7af49e37bf216a3d9e6525e76def03b814bb68115c287ab5facc66b27897e635169f72d014e5174c640f29a2a78388a6495b20065dfa2cec3f44c238ab3dcd70c1c092614dd6a229badd565ba130daa25a88122329119a98ec0a882c34ef5424835ad8e206468c944a38103a083866dbb15fbb76181ea48d52b8178aa12f256a5f401cb32fb11599da60de5c31ddfb9c7b93f4279a2f03dd71566c448f85a8dc82933417dab4ccac6d7bc0a12274b52a6ebc7fe1ba276e5fb3fefe86c58a47c0986bdcd2f62747f9f84246d9d89bfc25e31f67908d2bab4f9d096cae9846bb07ad8467ac72aa952fb3fc7a052f7473756c84e3b7b79840806e75cc3e5c2049bc7714b7b3aeeddeed4f50149108493fd2f30cbdf3c16f0a73e090f3f1ea9144ff156d88aaa54254ac098106df6baab15526ef6f2c58d5e662cf000592fbf6ee9da9992f52d8690c09d9a5141a843aef0ff0245163733df11a92374837e5320afb33ab34ee4f02e7b0521a21bce1fa4ede5a9c16e7d910140833d7fbd19f96417b008c9cb9fc765d4544a9e4cba557233d88ebd4d44e90e52989da51e850937172bc9d2f5bd4a273007015957bda51fc8293a310bc003cbee5ddf8e68b23094a39ea2e38f0561a8d185b8722be4078a19579dd73f4dc8a82892acf3673ef1adb68a3b98b391e2458f1a63ee24acbb2e65ff458fb46d7d7f3636b6ffc3877c1c052595b17b9acb2c573cc9c9e263929c67aab426718f6df687ddea31755da529aabd654aedefbe2f8ff71d05959bef3afc55cf229a99642859490b1e046f8cc630c77f1509e092824820d79ca3eab7f979be0c6b98511618741cc010d9641ae281767a3d08349787fef1b8f461a3581227a2c18e137b10fb8f1c9a68768d98eb9f0ea172dda218670b80dfca6083e023ea98bed4b7d94177d68c57236c87d2e0c94fde982bd8c6502df6bf601ac4b9bb459c1443512b412e7fd188716773c8d711cadd7143f1c84aa548a57a53d593e2660839e3fe9caf0de2ff5054ff954931d99aa4a88d197175c8aa736b013f69a6816c234d328e07a2c0d50f558c0dd2b82e0ab674a190d8274164a636f94d276018797ade28934f6df23bb53ab16b67b6dcbc66b7768849891e674a577df45c8a13c7aeb4329c1579b0f96a239b3eba5ca363f69db9fbe7ed371df43eaba004ff251fefa6fbcf91f1a4fcc2b82b5c997d97c9cad5ef4e3fe1f933df0b548dc277f8188be6eaed2dc5fe21f083fd89cb6c5a031a09b0487c05d7001380462f7363f053dad66ff3281bee4d307b7612853b76306540be0ad5221de26f288750e71329cfec8484514f66febb1eeb4cd39467a61332045f9b2b8fa490fe54194e27cc854793138cb602259f58bed25bd9b23570ca2d27bef074b78360c8c33fb6fcc3a47cf8d2e33170c2f1aa08394f704b9b9cb44710c6fec9c377ae643b74efccc8b644bfcd5d07fc8f964fabff6a642babe6e22d8fa3c1e9abfbdc3bf433050d5fbb49955fefc82338dd16b68b2d48ac73cbb97747bde9d2234bd7d5948a4487a0233353f1d97c794bc85324aa247085163a0ad8e2018df7bdb0f8bff05ceada072fa856996d7b03b2861c023adbdd9b39e93add9e4b9b9fa066a2fbeaee6ce13c7ef89b5737b83c8b8d9c3ab49e6d40461c435aa4670ca79a3b908c02e6004d3e72d1a29abc7033b3fd7649643b7910175f8cea2022174dc8fef5457a2a77abbd5718d8c506233e9f08da77ab897331d2fe4d924743adcacbc133093204dc6243474f5702b4b12661658480746aa45b1091bf1a447612a8306c6a6eba84d7e15819850ddfc0d738e6a4938b74c2a29119453e6d8f16137b4f355854e907fb40e9447f68d0b103ad065a7b6a2e967d65bac08889f94e3f4c6b168c7066484d03b9e3a4bdb616d5316e2d46c905da8d8db48b4342568c904f955d0b798e811f77a1b7bdb5252905497c9a33bba6ed62180b01e54e189238b2da4d8f5a6dc757487ead67da6ab8d5c9b5bbbc3b7d92ed34795f1f7979962c8fd510afef2d5e7f1021ba89c0a46e0888b337e0b478beeb955cb182f0518072a47c33c5e166a167cbea422899655ae76dc3871d064fc71a3e5babea81aee04a8c1abe3b701442175e30b35e9416c71d52d97c92736d46c17c7356375de6ce510c305833fae6a846a4a599ec828d7ef4ce4af0e3f96ff53ef1bd166d5607a905ece6b36a175afcdd82cb46dcd2c1de0593defd272a8ae5b3f68afd160b24f8616d02b5b21322a66c4a9633e73d702a019c3f1c6eadf72e166127769cc10d6e99a547a5db23cc45f1a1956089b4f78bf32c8e69cafd2861e61451bdd8dadf978bfc174c14001d725aebbdcef26d562b8569f8a6d5b3be68b557ec66cbde88a2222ef5dc7177da4a1cdd70ba6c1212111829cdf66bc35562fa30b8c3db964cbe42490ef4d01e4be288c573b0c98b7583c980bfc4a35bbe3bd169501b44e0633640c20e79a2f75cc9763bd6eb1c1a544ab41968e7752662370aa3f83846c92dd6540c848f9169bd0b635e7598e520ad78fc28b5311c974b2cf109631834f588b9c488b009d731cfda056594e20d9803ef7bd4a828359c11c6ba64d121d6ca2f88f5bacde207eb03385dbb3872752382f5c8b2f8fa50cd8f7f59e6d10fd34dbca4e491d43de82fa8ee3a6252eb04fff8720eb41c5cacab7db5830857e8c4f209ecf51a5fbf3eb4bf3d7f9ece46f74e1945100c9c61078ef2c2346469596616182c90ce19d3b7ea3e10bd0fc2bc281a451194e162eccccf4bf04337c98c09043c32c85e2e014731515b49214ee0b254a40f1d73b87c59237c47e906b4097b10df6d5f2cda75ca3fbd1d32e798a13fc148293305739f633c32dc453c0395e7bb416ed08cfbfde0dfa04295439a0a0086a51e2dfc2e2e3010029b357a25c604df4283015fefe02524b1d46cf7028b351ed407997919b9c164d229599901f41e8b360488bbd377fe6de4ab3e18afa182809c3ea552f3e552598a46fb08a3bd3f4747b9273e2ada3440a60cacb1cd02618ad058213478144ac5e0e2d4182a47ba38aca4eb0fa05db595a3c75a9e6163057adc6c391a73997d68d3a14398d0581a42594fe70dfcc7134928c377d339086a20e0a3a626315466fc6a1db39182dd4ba567dc54af73a7083d07d4243a13dc12b10fa6e319f39951e6b2a0ac8783e0289053c1772c6983c13b1d7ce0d5bd4cbfdf36a63118724ec601ba455b929d4374b12adffef00297997164e5a952e384f1dcfa83d797a750b8184f713c98410b1252916f93398224d45fda1cebee9566f7552c2114a0200e855482759818e7fee34360fcd4a2abfb349ae483863a5021071dedf0ca6419cc8957e019f84d611907809c46b176e2b479743418f34f16f4d80c9654891192e6525cc0334fe9d4f2c68c210f1e252e6d946e9bb75672ac34c04ff7faacbd188ca92ede9d6cbe7594dbe7579cc109fe35248df394a6a619e395483888ba5acbd055a746bcf1ddc463cc82c8816b5713a9b63ccc6843b739fe3181f9e347c4d330aeebbe8cf3b99560210ee38be96adf3d72cb27b2dcd6e645c606549b0971eb21a22c7e15cc383f0a801732a9f53e1f54210cb42d6453f69c16dff48ac63f532585050228d4b1087efb650021166684fa3a747c3f320d89738b6e98dfd60dc7f51cc2c10f44d8f7e43e4a0a3c06b0bb761d7812ba988174807074970089475478ca32d3675fb8701e23cddd4f1416d3a73f5330c1ea2fc6f02dad57f13dc35acde97fbe66d10f998f95bbf90cca0cf153564b19d96d0a6a68c66699ca9664be032bc0ca3bfcc6628b46bf433590d3e98ab811702791352898af934b0c732068a88eced5161f5d4c5708623842217613678f180f1a1bab93c26255f60575f4c4e456c50f8462ff8341e24f5c17d3bbcf25ab2a330e2c0d4e6f15207b9f3126267637058092224d28ec89b7af889f9ded19ef65b426d9c50b868407ebb828b71ae730d8b61e621b07c647c504d5bdd1f2a3ee06ccfc515a7bd122ec404191826bc9b3cb68b169ee1a751109f62c6857a423017162d7d7294b92bd265a8026f9246ec59342e75b26f1165850c433ce5333cd06ba78ec971166cf86c826dc35b541d1710b4fbacc037eed4d59ac32bdf323f6a869c505bc78a5b46215b4a86c9b42f3e646982dc01acab9c515e110ecfcb417d5dec7ad5938600155bc704947a897cff2b5b7729e641d44fdda1c9e2de4a0e4b921604789fede0daa44c49dd230f9296af1ebad445f61009699a95a80057a1ecda6df20baf756172bee380ee55ead2cec5c5a2c7172b526e838e3b2f2abf46e2f62276bc91ec09fef1fa27974aa2b5a4f3c8a05aace61c3fead7ccd22413dbdcad265fb58bf7e97cae4b68f4d536ef9967c9092c4170d76c5fd231332294182c74c27858e47aeb2bfd7094709277c733e888394b247c6541d5e8459584174431f17a10221a5a11972ae6a603d298edde2a03058b9a2bb64f5cb8d141d194cf39388238a57346df47e333ecb8d9fce9732ea93ec8ee0030c1ed988f85917ca3e814b43ca9152761c94426387ae635563b9185808ac1a30921555d08b24c3a4d192de438648dd18d926fc55b923d4c5fd59792656f24daa360657a9b04d14f75bfc5aab2941653d8a6c7cea52ed89c9b61812762be36431776f614daf0c2d3330b054225991d0df9eb5a13703be36a8d2a6b05a533d3308d0bce3044e9ea3c1cede75c844ea83042f107feac3c6a91071a836eb921286be0beeafee640531015fe7b62a879a1a709df6a1fb4b57beeecc68a4801f30c28c322766b61db1cf4911df3866c88dd0cc964f08ee2b8cdeb1a01906dfd235070de9dd2e7c2eea06cdcc10bc52cfa59ea3d56ad2fc498317a4c9776292b4c4794e3b8d8b9e1b41af039e1357b1dbe4c8bea86df862f8c6a0576a18c01a4c4f1e204166f57780029d7c0f8a7e894e3ee8689fcd32c4b5832a559f5982db895a89040272f0b60306d800d37860f2edf3a51e43955cd09b2f8df0f22877b71f950f5ed34d6e62994f6f01d4c8a505d455528dfa4be626ac3203a6e4614fe1d6c8ac96dc4412d111346198481d8c0a60dc89c1a68aa1a02f2d7da0d69c0f1013768707f6d82f5e811514163705c3f0ae3ca116dc722feb089b380af2147ebb660223b3508702b2dd386acf725f541483e503985557c4a69f3914fc1b0a25d5d6202cf55d38d9526bc04cdab06c37196c205f2dc2c53852d10664e1a6c0f7d37178aa573fcbc403d6f73796bce43e33868ffd7bd444b831df53a3de078103838358891d8a087ed73c3d3a6983550a2098aa0d511157cf3e86f478375ec81a547b32b6928de44e91e8d2f3417a68cb20c5bf4c0891cc512ca2e8959ac6d76e94fd4b52319fcc862bd390e137838eaf299927841cd315197bb0119fe4b6062e360ff4e221555f66a40449c49a6f0abca002c7aa0f31b4d015580d0be824673a108721802d6df9b156f1cbb1f4ee705b2ac160d41dc97189acbba70b168dcf759f7b291ee72fa55042b1ed9cdb9a3af5e3e00611aecc237d8029b30fd6092b43f08c7e4e1ff432f11674a115220ebabe9174aa9124d8c805d842b66538980c400e285eb7e371ae811344a0dd12494012146594d3c38f06609882d0985c488ab18555e06991d9a6f77d220dd1cd8bc421817905859cee5c3b9fb617d38d42f04852d2837d42f8c34a9831181c6a951f6bd1e0311899e7e73f9e5ca44339df8970bc6052f74145f5c616a1813510f72e2a517289d1eeae17f47c969a02b114ff3206bace9ed6d55cf07207c4668ba3da18bf5702c63d003c494065f5da6e2224a4633eed4e448d838bdea68c87144e2519926466bb448f4ccd6cbd85ec2cdaf919dca4dc925613b4f4ce55e64ac45523293b533f59528bebf6ed792810445dffbe8d6fa7595ca4509257bb3621d74eb2f4dc2b7a26f7e61cd414a2eeffd1df9d6652e2e26ad574db600739569f4c2a99f4dc7d01755cd9d4089c288bd9e91f38863960b13fbf995a1b7891121f771254ecf6a984460b0b6d0bfa72af7c8b37603541ad988f6bfa0f81972d115cda037da8abc7cc517e30db3697dd5d08318ecf7ddc55fd553e8c20847077442f7ed9b38593f6188283557142748b3f349d10f3fbbbc579f36460b06e73624dd92813ecf889f4d9cf256e30f0827a57310be7cf01e7018ef1cd14dcf0994288c7d29f400fb83e6c1955f7d54e52c837d47cd1808cd4184bb43e3526d6afb8cda5f768845c0a2885b3b823140c7b3adbf7d98229a4a3d8a8eb074628ff81407b152c0d208475b2ac750cc2814f4d05e1be906437709643909145a25a82003b8b9266eb4e8022d91ae538a3feafee18989b63ca8da1120765b7a61ce21cfc76c2bbe8901603708ccfb18a94f603afdd7cc995388281ff50993f8105b60b213653d44182347b6e421221f74062c35d4aab6130b86168ad47bbf29905a6f21584e604015b6e4088072ef786ea464552b4a74ea5e2c91fa9c12690e739c53739f6f10ddf0e35f0bf2fb6d219ba7b12c84cd165762fb9158d749527c672da150f40268423078eed02f818402b689f30d18642a9d6ed4d4be77f09b5237124c1029fb3065ae15a5ce44aaf3d300511a49a7603d76f283ffd5cde8697ebb1f42e6b3086eaa176a6b5a31859f89f1e43ac27f84fe01af895c129ffafd496581140a49b3c9a7cd37f829d7b03bfe4e84d88692a6b7187c88f6cdd81656963c1a4378f94951297d168dc81a1d74b6a54c8c29ae6c8c20dd380cd76af7657da2626824bcbeaad9a55c8aa2cbf864e18d7e69fb455f9b1f482a3828b0620f87eb9dff42979208bb93916a2e09b3e9e50d0498e40f37d522a1842ad9b0b2476c5aae64b929e0bd2f0403e9d944eb9cb1b50cc17ab643c1430d30aa94c8d96e481b03ec0a51d27079102c089992a02696df7a6e4f39a38eb5fe71a01c966ca9fd319ac103ecff038ad4ee905a3090ba4a07aa71dc3a36d3de05587ba84af8c474b9f4df8215fe3ca7f64eed95bce2059eb767e5f2a7e319bdacbae1012a74ae4128c0daaa7ef37840816b452ff581b9ba019819e1bd3adc25e2fbff9290bdf7de724b29539229d108c7083f09ffa34798c84464a249ebd13e593542a4887cc90ab0d86bcf4404998bbdf6da6584e3be47fb70efde23f5370f6056ea6604ff1ffe937a1a2f1a793d90e8a0a8a0814a1a444499792a3e2ccdfb483dcd77844aa7c0d4077e0398c1a6befe865c87ea0054802a64b8028815c020424bd1d10d58bc94012649142599c77df5b68f21f743b69b9d20db0b57370cc3484290dbbfb517ee5c2ecaf6b2d7e44baf8414ae9679f229878393f21b425b48945c67d96c0110d9534f7bec69ba303aba3cecb52f2c22bfbdedc6ef464787dc60e4fe467ed1955a58e40ed92ef6d10bbb9b693afae3f84687fc7ef97d357f252f1a1d69d06ffae5edc7fa690f16887f10ff1e3f3c1f3d7e80e14fc488fff438c7b79e3142e31cbe78b095fecd9c3c45939191910a2cbe373e095492badc18a7a4aaf838f19fc98d4c4234eddc4829a5d6c6c83c21373333ab5a277e8c31aa1a8cf189e2af809a7e9901989ac2314626ddeeb24a183bb91c1ddc257e7a5db672386cddb69927d65fc3b22b1c0e262e4b09c65ec996b24c6699771633f9b13b7729a937f51f6a6ff931f384a8a63b899053ce5495cbfd190bd6bfef86bdd06ace5df5b48f048a1d857a629fd12925dbd33a316bd9b0e7c69b10fa82c03cfc7de36daee8aa6a8854c407e3dbf8aab88d805fd352c4c657c5e74ac6fddb6166ee89537ea1bbfba5b2acd3d33edefe61ff4e833dab06e3f7f44e833dfdf185f8d7b30a776eefac7ae2f3d0c11de3dca1b9590bad73cc6839beaa04da7cef6eef6e4e87f82a28ba91b048b840a1a1872a963082052f9ed8c24403521551beb493efeeee18638c6162c7cb1c142ff7f7fda21e5cb0a2060e5f24ada1820c9a9b2f262002ae8e8daf8a01f7650e629ff8cc7ca78a6b6c793b8d1736ccb9eeed5fb5f1551d680ae2488715b48044464c038caf8acf3503523298f353be8a7de66b52cae9d9f994e77c21b2ce489568dc63776e8ccd3bdfcc086cffecb0e2ce1d6acb158ab85915d7d884555d87a99277d0b908b32a8b5de7ddb3ae1391b49bf839cdfcfce0ea0429a3472e9ec5cececebc41fb47d30fdab49b8891272246e6d0bfb6b392d32736ebcffeebe7bcbe3f5eff393fd4ee3bcce3afd97cb1d90d771840e4e949f53d2ebd8100f6da0781faec3af3676eb873773868be3f0fff94f0b41389308ffff6c4a240c547f6f551d01e7b14321c2c0a541a85fad9cbbf51f1c5f9a23b93ecabfc8918f962fd47a89fddcccf01d86bef037bedfbf3513fbbbcbf874f9f3e7772f4b8fd853d6ed31e77c86a7a526a8f079f8ce211112348b3b91dae07bd4d76ff177bdd70bbed6997e7d90098d8a75f78d139db05ecafc54eafa460fffe836db5566b57f4e55f177dfaf2fd4aea9b6f76631efae176e7a5dc8e9a2bbb9bdb2184e6886bcc9b1c7ce7f785f44f884557be7b52b0ad75b8bd6e0d761943fd44fd2ba0a6eb8b28a3ec52afd02ec7c1c1e978110ddd581aba801a742998759c46a9b29f20eb78335c5930366a72c3e1a07eff0ef8670298eddeb91dac45767bd5bf421ddd1075742f20d50bc24b744b2262044810777720cce34f2cf6598b8b7f5df487acb0b7fe837d43f55affa92c690448904c06ad531bbb7be49ac4cd8b4c1aec8814b7f819697029668955e21529344fc47f68b6d50dedede13afdb6e929beffd8bceb08e17efbf8e14ac886c0ede07e1bb2ba1c181bef9600cb4c4364b9fe33af4994cd972a5e2e33554172c3588569882e3756f11f0ebe3f36d99a88c4b469336d2e04f99c7783faed6f76a4f80b91a71b07d07ccd8f40f335df08dddb0c59dd90034577e6fd69bcce7bd789dfc3db675e9bf9eb7b5c9979a819ef86fbed67fef26eb8ec539ead799a8740cdc7ae833dcd078194b7fd009858aa7d52687ec88ae68b55387bbbbffbadca36aa08ad5f26f9fe87c8eaffabb6171b2d2c07a1ae7c7fd0316fa9497aab9b79d2c8888579cda21e852189c51c8e1e2a335a7f89180112447ad1da5a1f0dae68c0b02173f1f1e33341de21ab4be9ceb4d6da7cb1f286d67210ea165dfa4d828f5a577ef5b842fac3d5cd3ef310fa8b2f7fc8877a75a9aa935eb536d8bffe44fe2b7f207faab4a5e0c61761d3c276047ab08625206c36f19fa46f004bec3c6210b4ae33771aaccf49d9c0b021081ab9f2a7d31528c0d0254adcf99ea47faea52b1c149dacb4a674695a72264f406140f1045db2c4394de99265e9e9295cdda555cf92ff704cb82759b8284ddc942e565a4c382d3d7148e1ea2ead7abcdd818678fca80063e126f6329d588c4bb07d96aa1a34744a9a419924a6c9458319a60d33db7fea7bcc3aaabcc241fdd7cf9f324825661622b8f3db4bff5c473de79cb3c7dc7989b913e95a423d21c39ddc922c3824e6994fbd2b65949aa09698677e35e3a23d5f4c9331495b19252455eee492dc399b6e98212ddd49bfad15859d619e4873e34f0ddcfef91d9d1d1516851bb8f6ca1b29ed13d8a3d455ba3b9b7e4b9529b46091b1bb3b85748571266c713888dd639494be7f3d423df49d4e4a29fdc2e909793ddd406efc1e20a11e21a12e43cdc547777bf7dc25b6f0efd9f4fdb5cfe9df208acfdf71c823e2e72f6c6ee62fbc3ca2a11b0db6ff8da166bfdc3f21b03bc810a418a37b777bb3b3b3bb777b777b37d9c8008d73e25ca272f9b380211e4088b912c791986eb85d4f53b0b856a46cd9f2630731e6ca7fa629536e9354b9671bbc64b7831bfcbefd59ffd9b1fe1359f255d82567156df3e77ab0bd85bd0108c87f72564240434042434043404343404240424043cc4043dc03fe0ed0ce90d0ce8d1d0602020202a396d8f1d9022c637d1eaa2f3f66666666668e6c79604173368bf0197d90c0e507093e48e042824aa55291e0e307971f3e48f041428f1b424446b2708948da47c624478a70e9ae0b452312c6fc884640c68c29e2838b4ac5854b479b8eb182e58228da30b69fb91cb5d6ea54e88690c418935262f59a4008010dd55c66aa5266aef13b40437288e85aba6e10d1212222a2a11b4b378688a61c22126a051982b4d4dde0e5d633cba1a5252620b45cc94bd711b2ae2ea11bf39a938847bdc183078d92e8060fe93778cc6f0808cb0d1e5f887a7cf9520120207923fbc80639ca792713104c8ce5898eb13cc416d823140328ebc175fd25a763b4661a97ebd3b0d8f81abde10d1561638a63a36813713bb810e8671beca25e18a7a3af90c7e19e9c4e25d30da219022b2f4f5e14b5a4b5b7d3ab66da86da52290e87dd543bcc926eb607fc71a7c42a96d56c126d391bf7ef77667b9028daf01f9a432bb0339a697fb5d7382fde0bbb15d3b48d63a3b8ecd3be2dc370540df6bbcf0461e9d36ca8e7df8936fcf9f2db8ef973c09487f286b4286c7c0d9b0c562cf440e64506eb57105cfa91be86716c14f67125923728f5a9d16cf485da87d63cdd967ce88647345bb05bcd26d43ef4f26b12c5cc23256fcd11a1b22b25e6425b217109e8721499548ef1061cae8d2f545231bfceb7364c71e7b3185325a5f51c67cb0d73eedf70a7dee0af2ac1f51ad0b8de648aeb8fe5faea87596d956ed115a91429e6cb5f3f0bd0c0840f388879e2c14a95168cd1c39195336050b484530bba18634913564851f4448c2790c0800b1334a145259b5c5903105a54f0850d41202d5c6f261aa010e0c9b1c8c8c484891b3f3e18dfaa74d0e64b6ec714d2718ddb947e0ebef41b00135b64defefa63ffe42bff068d73c2cee8d6c9dccc87bf3199bbc586a49615170d92485d1d58050613863483956022f807950dbc84ab08fca74a32de443af90f45f2a3277706091b26b54fbcf5270e6c8327943b5533bb9e8392b44e95485aa7b2c03cf5c301d8902af007f56794362d1b6ff8cf6074aacce2da9ed8eb3b42857e47da891e9678615d9fe527604862f56bda26376d2608ee865fbd34c82c1befc6077d9bb7f98e80e08445bf9f1f7aeb56faf4c63ff4a65b7f7ea177b9f5afef481401194eacd4a062a1021615ec8b581a175947580a1c56b003eb480a9a161695d4a740bd18b1a86020386185aa896566699f1ad6a90fe54369c6ad328c6bebcf28f632616522a9498098cc272c70f7a11cc1ad9204b786d2c9ad6fbfb049f2879a53c286d228ec2e46dd67bfa86256e470f460d7b9c93ef42c5a183bbf7e8d1207cd26ed53f395e6ebcb2cf8471a4925637a32d13f3f7c3e691517bbe5569e58a6953aa354596622b9f5b96712cf9d98a7be34f21f07e36494dc5a3ffb1cd02cfa7916d7a93fd4d3435dac0636942d4c8c0d3d0b15fc03c43af56b7d0b835bb3b8f503e0545f8c11ae974eae838961c3766acdcda665fb86dfafcd046143d91241fb507edbcfbcf64ac8515f87f6c99f39c2c6975f7db07ec6e5a0f9649276356d9bf1b2cb1cb797fe895dba4b27f94f740afb4badd6aadea993a2539d41d2a0379b3458e713d9ea52abb52ad53f08aeead315ec8ce5c286dcc5c88458df0807655fff47fd5a2dbb53bd298f6f3b614fb7d616f3d46f27ff9146b5daaaa53e79f449a306eb67180aac3c6a1fbef5a59144a2611c0ead6ad816e678b0a104aa2fbfb40ff7f5a59868a3bfd6cf9ef32412a31ca8ab7d72c608ebf5652b7eb5b625027fb9587ffd847402a0a2c5185dfadbb46c7c7eecb506c45b9bd60fe3cf9f2fa568d5d6a0d970b1915be6405d39bbbbbbdb9953365c6c7cf6cadddd265c19a6664b61913a0737be6bc9c96162522549b7dd2c5a5b774c94aeabb3dbd6e13031ba687c39e00f52dc7095236589a681d52e332519a25560b1cb4c497c7062b9cb4c496c58c1cecb4c4998844002324b1b5c668a21862b2f339120881baa2ecb17685ae82f99f3c14b2cf935b6c5767c6c8bad0df24dfca21b6f4288b7324f941faf1479a3833f3e7fd8162b3d13e41dc2adfb647694ad828defd23b265dc65060e3fb106e5dfe6d0c4fea83bb5f159b948231c19059b06cce2fbcc85c932e6516c961534c6df3628b59a894fedc9cf20b2f50110b01b7a2949bfc492ff74aafeb0bfa4591cb5ab189a3aad909ac7ba681e1b4500e87fb07ee1ba55305305cc6c38c183362d830368cd6736ed1c67c6ddb6682b0f239dae0ea9632d04a4ec9451bf3f23f7581da521b5f13e2bd13c8e4302aac7c39916eca2f7f672d173f204c367ec6ada758d566368e36e2dda25ed777a37de2871ce6867cb21b96aad150ac6233e840962531a2c90dbacc548497aba538e787caa29492ad603f586b88b06087438056fe175fa04bbf6d6e659eb09b5fbbeeb79d0add4209c6dc947cce6195f53afb5d3386192152047b2d664f91c9d0f6a89ff9c9f5e32f54a17869c6d69ab29653a9501b7f61f60d5909917f69be3dea21b04180fbc94356f752f5b5d4e3c710d196f5758228a4c51e691f23eec7e6e313f1e851a47d32ed4775f9dca1fd8eec518ffa8464cf1785faaab769b2416ed0768ffa42d41776b7db81fad4d37842509f7a0d554393f26a68be9b1d343ff339688608dd9a2f44fd09f1d27cfd99ed69bced516e514237a2521f5f4311b50fca07f5a1f8a222d743f38c14e141e40db54e14ba317e218b59ddc85f680ff66f28143f36891f8de251d757193e8e14f93852c431a564a5582529a9d689dfcef37b621981971b4625294aedc3b7882d979fb8cc54c4d1d55893fca594ec95bda67d94c24159900f1ca47d387106e619c2a21efb5000d56e57eb3f1bd6e1678c879dfbb22fb402b8d5e3316efccb0b2b654ffef4e498f844e21b890f2488642232d160a411c2f233c7d9d2975dd9c26657fc078bf3a87de2cdbabbf0b51dcca37b5171c3970b5ea6e28617ae2667528e0e2ed6c43cf13325e718c05a5c5769927b2ca6d1bd70bc971cde8479e21bcde7c0fcfa55e92ccc139f874ca4ebcf52b0c7beec8a6757ea0d4065c5b7d99506e3d760ff863329feac127f5e893f93a6526ae90a428bdedc7d9da04a775fcccc1cd6b0c815c23f64bbf5eb73fce0fa1b4abf7f980a24b0678847e5f24058b234f555378be5c65709717463c5b991bfc8efcf43b63b25d0831798264f9844a37844c408d0508f2051f0975f1d61a2207f7eccfa8eafb10502eaeeee06a238d8b7aaee7ee9b9679927b62c43e31cf9ddc42f6235f19ff9ddc4af0712f9f48b58f38178445ca7fb8f503972848a8ffaf37d5c8f7d4740d591ef486d3db3aeebcb22bf1bff7ae3df0d04e65fef437efd8e50f1318fcc2f62318b7e37f1236ab07bb84e531d2c917e23fd40fa83b440e31c259b61a1e2b104083b086d6e7fc741317accecdcfbf35b7e153f5767793b52157ec50fc4fffca06b0149338832c5183418fdc00af3041513985145114b4cb28728f76fb4cfbcf28b123fa8b0c48a1862c022001a564c414392962356604929a5ecc4642d5cf7de42c62867addf5369a59c720594667f5d9256cdf28f75fa7107086e96fd7cab527de1f5d887f5661f431a3911b21d12c879a91281db01824b85d0cf7eb58a2ea40e9acb0b03bfb3ae3dbbfe7cac7eb2c1298f5c9eeaebec6a8ac62083f3aa58a66d1c2af4713d07fc71fd7348b88ef340364f855381ebdd3422e5f77151c2a06925b0d16eee2d9d3bb60aba60bce5325f92660b10100b556090a185841759c4d0001a60681dd9c0a40c2554f2805d28ace103134344d9010d18b0422b77605262c114443091418415359ab610e0329392104a49fd953f6eb0ce2bbfc168bf984131470ff3c44bfa5429e727e53564bb91b7a7971382524a29717aceae1fce3985ccf7404b777dfaedc96795f5408bad0dda505e69e345f7d150c9f8fd6d9f54dd505e747eee461c6623e3c79850445e2946372344d6fcc89adfd1a6c37fe31fef8d8ed4f54f5dffc2a22be503d3bd4caaf9e94769a7acdfbc312497962e7d2d76b1222ab51a080e8a9fcf4022d19748520925892491686aa5a916c72ebe955cc98dfc87df3ed3be504abf9338e87a9a7afaad03fb481130489fa63e6fbd8d64505fb8b343abf68536fba8a5d847e511f3d0cfa4c426ffb9190105fba9cfe23fdca5e5f4c44129efc8cca3b0426a048bc2ccdb67d691d4cfa43e2a37b48a2f7916afe25728a594524a29a594524a29a594524a29a5e0aa33bafc5dc4a29ff28a58f288835afec32cfafe449fa9b7e412d65b1a18f66118866118a6699a8604182a182e0d4b122e6831509b45a6e48afec902149204bbd896545762034a86d6dcf3ee5b902986324870fb57b5ff81fc8be14a7b8dfd271c0274b36ffb64ab7e57dc8b7ef33b8096283368a1444c0e4858d2bf1054e202cd6da05b59356434ed0a8b699f83d32047eb4fe46bad2b5beee44f4e461ac923377223ff993e0e0306e5cbf97915d7913f3ffc50b5b3734337aab55ed652959c3330b0dd25dae8cfabb4151ce49f17c13cd2bb685958ff7e3264daa88f1aa99b7452962c4d5d5a4e4fb1495254aa7265899d821031c24b471109086888a8c70ff7e00b5badea1d5c55f19f2296fc6e6af97dc57f244b2e718e8c7deda0714e641bf19d021ce45f7f11097fd0df4c850b584c99733adffafa1c88ff6c9fbdb26643d8d8ffb56c4720fe1391b04e7f1227264f80f80fb39c98cc65214ee90f230bb7bfa34194abe713cd84bf44e61bb93efb11ea631f0ad8d7cf6af628d4bfbe1b66797305f460e47a5c0f068b78f9ab17c1346bd2a79f86c51d6a237964e3847aaff72d7e5f7e1b6dc46f287e409f3e0d07f5c7621ebaad362d035a4a79465c870eb90e7daed6cd5a4da5cafe3f06eb47c475b8d0693b5f7e590f76be5435e8006655d78949b607fd1ff487e813d1d722b786edaf45dd92068fd598a587185cbffe35880eb458f1c58c2296ac9084758802c5853244085cb0b4c49415b4066b96589c9ddbbf03e2bccaa969680a143562d06282020a27f1e082140d581c41450d4994b2d0c09d87dff85f49afa7c5b0394d441826a0814b196994f1a207283c34d19608c02811c49213325441e305b852a2078b179ca891c61258b48852f0d004f560055f01284a5f9c743922045b72d8c10c1a1b5a3061c1941f9e383981fd24564a78d892d4021cba9002a9e2b04315a6628c0f2f84d1039924b8b055d8509593a3c5863939e03f51e4c405165820468c16944088273bd8c071174c568c9a3c9961c508b65815cee70c11dde0619b0100564023f6b542991a2551011d0d30451724322e70210410426051e6871850a1820316481a142c38a9d2c9ea71543527ae80c0028414b7bfaa1e082a40d070435513b6f4d8045608a38a0a56acc14402313ae4f0b5627e496c62d817d60e6cfa85557efe5dff4496ff50851730a0c1861ba674b9e28631334e48c1618b0b2c488115329490b7862f809146961dcae022065668af7313491b84e88a966c41bae28b3233c8e088e572eb6dbe60c3edfe48560f35961c985c9ecb4c3840b93978b9e1e7c0e5f6e7ec304171bae1676126282db07fa7b5319e96ec03e44f22ff91df0dfd964114505c1013c60fac59e5019e58cc92b187eb349215d08349479799a090b9e133e160749f833c88e36dce01cca23f59882c2afe3a3ea2d1c7b14bb76ca2c9d7640b3df1fa39f8f2d80b815c7e72ab777d7c3aeffc846e881fa090c53d194da0b9c45267672f04fb7eecfbb38fd5c8ce75cc931b7bf28bf8a59f84227e20df3ffeea2daa317e691d3b1174c93c22b0e16a004b6cb326fd57b55a2be50db5cb1e98d39799c75b65849e6848777edc3e5a2d7a1a121d6c4606c99d19991e499fdc707ae92f77b377dbb6b79ed72da11b849edce9a57d3626d7cb9dafcd1b0dceed1b6a705ad4f314b23b770ad1feba849e5c1cc771dcf77fe0cbd5382ceb2bd8277443f56483943524ea448b318ab9f236450e87e665af7d772473b06187251ab9d67acfbeb0bfdc4c9565afba59f6298fb9bff4cf8d6ebd878936e2cdc4dce091fda0de7f52efffaed39ff298756c4bc97521d84f1793f9a685da7f4541e956afc8bcd7e761e207455405580d2c3603db2070b13397999c4411c930828be541c949132748376c512d0d32c0c09d7194a28105255b93ebf01309d0709a410c696479c108cc484a0119a4298ecec86285046a344199a1cc13d30c30c8604697326a1875b1048d242f4aca246d413ae3a9da5aad8a8356c59a8312b8096cea32130c5b5c066b2f33c1c0840c81ad979960b0e2636c77990986240e5a5a534a2995524aa12b7d4ea02929ed9194522965271b8b73b7136d7797b7dd638c919f70ef7ead2a557709b73f1a67b66861bc373a4c40dd035cfe62945276f7b709f416e0c6cf849b2e32afecee19bda2eb234aafaf8ef88e43af0945e6bdf98bdd8e5b6d34a494d23f6acef6fa90fe74fadce320d77ac5c6bf24d0aa417ea1cb44bd8d81736527a2c0f26459299decef57a8417eee0c8eb1bd9d5e35d338d4c6e1982929a59c9b76b9bc30f9492398a65d2f7fbbe4d472b8ff8cb31c26e955336d73416340fe669986551c95ea4a493923e955336d1bd2a4b0f16e18f652c3fed2b09720b853c7cc30ac7e7c4d3072c6e5b544b3d56c35cd5ddfd0355466098c9cc2514e7a65dcf555b351e104c003a75995393b437ce3fa00a0c251712ad506361ce008405e1af7d3315a33a2ad725f58ed379d589b0d6866ba9aceda5426b0746ab28c23dd766973a5f4ad4aa3e6d23fedc5cb972f62c494b9a1fde6d7ad28ec9c5b37b5cf0697db91c6a83e407ef9fb6c1f963d0dc69752b68fbf531fcbb44cfb84642fbf155644debe7cfc9313c8e7c584cd715adf93f4af12f8e57782bcf513427fd29fdcf585567eab9c06e3d722842cc04d52ae84c08932b44063063192a8610b1041acf102193819051952d2431233aeb4c6a081041a2e78a28a154028517182b1d8228c245da0408c195a70c48dd2d2184cb0d083152c600086234ee025063057d0c0082b5c850a9ee0420722c620f32488130ab040c70003171434b460028a1aa06849236490428a921155ac11821660c0a568229ec0861a8451822c4f489c7ec040960b042173b4c4cb0b4384a182225ed80286056a9031c395313010ab0862060b5dc85082c5862f558860400e553051e38b2b2e604a800c56544006172f38638a2a591669843103259ec8218c0b3c51c59513242911c30d3cbc308410122f41f8608608bcec80010eb3c59332559648638b2c428080050946a004531369f880018f825b4182a868218a0c8a3063853154526812c58c155471e58a162ed00414247620820a15d280c19422293f388199b2441624a80471a18b2621ae4899618b3032880888c1d4841148c860890c622ed0557f0df812fc8c811a5f3585146e74e373fcca145f1545bc1c04272c3fc25ba610c10aac14ae189460d506217ec502c61141b052a05270615d5abc70410a560a570a94b0ae8f1b842296d65badec37235c8fd59b11eaf5d857a54b6c8b9d1f4e83118450e59757bf230c45134f2860a5e05e34d820f46328b01e658cd816ebfe6d3020f59532d30aadda997a31316cf5662d010f67dcb0c50939e5125f28d5eb8af22589796d9877e3a33ef658fd8a589818fed1c3415fb361904b27f6fe452c2d7a9827bd8a79d8877d11ab8835e4553eb75c0c3bfda32755d7232b7a7ca5576ff52f3e6daea57d5a8c57b7bb9493d2ebaab57561582bcb324dbbb6ede238140acc954ac54fcd0461e35b0e87eac6994803c6468de39c734e7a451a238d31ce18638c31721087da3d0d644b57487f75bb22f782c639e16cbad4b52400501ad9fdf9f2e6d5e2b5925e651e27fed95887fef6844326e752ded95a3c6dfff893a45794660a2e9d9b3f3d61de66d43fcc2adae4d2f7329776f792c38e5a226172e9674ea675687fad8d27773df9d5df7783bdfcf63ea2dbe74f0dd2975ec85dfa28235bdf3ff4272a9f4a025c6a74e9871d5cfa8536971e451dfa2a95b5f5d2cd67fc57d4fba3686304dc4ab8531cd43fbaf453dec53af533cf19ac1fd44779f539affee535e71e0ebfe655bdab5ed7e5d7359baee6a268176639a8aff4aed49942573e563bbed2a4e370d8cdfecc91be25c51cc7d5c8d875d9c79aefbaaeeb6a6abe8b59ace9baafa9f9aee63b9aafa1f91a9a0dba8ec6bb54c7755d57d3d5d474355dd7755dd7d1745ff317a7a3a6a6e66b6aba9aaee6b3afc998439bd97c57f334345f53f334344f4363e3cda713e2a5f9783428bfc6e3db755d97755d9775351dd775af655dd7755df7d6d6d4785bd73ff343bdc14b6fe699ebb61a9a1a8da3d9c07628145793d5d43ccd06d486d6bf50a80d3e6984d9d47c42baaf799a2fec9e4684ee6b685e8bccd57ce1763d85e2362dc3ea45e727b98b1d93249c92c072ad5cbe7ce94f8fb1051b9b502af84fc422a42b17c275a3dc5047b66efda37d83777ed14b83d16d3ff584d0ecaff7c7a1ef391c44000ec266a53fa98c27c4dbb1e98c3c5148a45197d1f89d5e7c31957f51ead4bf332c07d5efe7596fcbaf97cb8f0c1b9d7a4e9414a46883c95cbe4e1ee6272eb9748a1ff4fbf387a3b68d596eb7ca29da88ad499fe2b6bbbb2fb14e47c13f326ab9fdfc31f360b1615cc2e26e3d2e87a5f29bd24627891ff895a37be9b8dee90b6bea4345a78825892701e3ba13ebf8d7d90587b106d75ffbe212f3f8a7b04c6e54587433cf84882df9172f3b52577e4b32b23b2a4c0109c341e39cf0626db6ae7f124caefdae7bdbbd7d9befbe68742bd379ceb51e3d2ad3a003e0da996ba3056ff7d38b08f69b5fbee9d4a00b91491af4a306fd3f32d6fe57860dbff36412795486f5f6890a615efbf9873961a9d137c934e80cb0dffdc5e9e8befbcef248c3da0fa5d124c3419d57bff3e265fee9c13afe35ac331f5a9a77c26ef0f63906746ff394d361f3dd479bb7f9721af4f9c4a3c1f6f1b75ebc636ef75d833827b05d8e993296afb5df14d3a0dbb71e6d817990cca061572b6b64add16bdad61c0ebbaaf1c2be353fc5cca7f6f1ef3ce61a8f8367cefe504fa7fe6156f6d2c8e6fd3525cba404925ba46ff721454291709972fd6d3c0e8c9c599bf68560f71955efbe1edddb7c4891502432cba5dffab9360e5ad7065f58fd5146b6fb84d8efdee60beddb7ce7e55afb8543e2985b5f8b4ed7be4d21c9b529205d5b4b48e1766fbdd09baef6dd0f752d21deee359c069f0130736d885d6b3ff20fb3ec470e87654a22cae56b3f7222d8ef5eb35e08f132f3d8741ef7361eaaf36a83a92fdc6eeaed338783431c8c925ef5c248a5d1f59f5ed85124d79fc81fa77df87ab2895dd31312464db48e684a751da6c476a36bf93d42daab54f2b53a37ef1bcc3c99e3715d83f1a36cb0c98de09d5771e5000861fff677fcea162bad992f2cc7cb4c56906e6839e77ad94cb74dda30a148bd2ce5f309f57a45a209f16fb84119250e36b400e0a01b1dfdd89bf094fbf8f47138887bfa5dfb08c9be9f3e7d55071c84fa1252407925c4db9ebd9a2700d4ed47a1fe6ade023cb8fd1e7870b55e5ac3b7cd8b4657f3a2130ab8fd0ab8fd98a780abf1f54d24346e1cee3969959ebf96699bbbe538a7ee2e3d2638acf454339bf4682875eaee359cc672ba7497ee2ebfaf74775719205b9a3153b231b6ecba5d3113848d717ea1bcee3ae89d5f659ed933dde8fa4a4e4aaf39a9a4556e495d6755adabebacaa55eba68483a37a27d5b561acc6bdd5c8dee5fad74c65c3d86ddb9eae8fe12cd7d17061adea519b0d636b2a2705e6583b3343b3855ee5ce795d4a77ee14c2da5cd0a50300150ea155be83294c462891e139b371a7f1c71a6c686ff7955b16a3273ef1fa807373e2132dd2605397a730238a1b9f519ed3606d70d5603f5083fdfc3b5fce7cbaf24b0261ce7521d3935284b90304d7db3fbb5a0d55b1515ed1d87f986daf640ca4a3a8e42d97743dc914d908001000d314000020100c8704228150301e910375fa14800c8098486a58970ba45114e4288490310418000000003002303234c30000811011fc4640313a6889f5cecabe4b06acc7b4509cce547c962cea6be96ba6bd172cdbf9f25cb77174c1695501404ac44eef835b2a2b9aa379b3672ebb6eba828254de6348efe5ab27622b83720bed98be3634ccb965f7a46ee53ae3bdf75c6a51c4fbc9a4247456b6f1f2b3e0e9e9859e089eb3f8584b55dd05a76d1b087fc1cb4efeaa896e80b9b13fe2fcb23bd0dabf6b2f1eadfd00c1f5d03ea1d2d0e75a1bae8921f60dadeff8b0d70113512568c54ac0d0aa132600dc2b8787952c409138e0d685507f7ed484c6bd4d70c7c418bc5fab3db8b8bd47d06ae03a6ba0d6b9e455b584d366206160001449d8552b7c85ed365c875bd9255fe2c05ba604bb3d963e2b57ba6b8ca017fa011b8fac0681c68e58e079098c6ad8062597c2878c8f4c2f599d8b17c32421809baa4bbfac0a0ff4f2cb015855ca8c880b40965c0429e25e1ef4b503c6e63a7bd146db0deb3ba14f6cb24fb5d91943fbeabc33e3945cba5ce06c227c44484eb062a1a2cde33c8512c1f1366e540fff8f4ad4e733457d13a8a93968fb14c7e73633d0745859853f832e0ee8102f6a96e55b3741f26cffa2bc64d1ab26d576ef09b5aabdd052a5ccb47c143ede1e69bdb072c2091320290fb687454fa776accbe9ede9ede52729ca552562b93d73e469836713e5a7684e072f1ae3f71bc72387ffbd69a3089edcd3ea78fe438d552c38afdf74c5a0d53742802ca146804b9a39563b8a09add5841e288b90bad5b5da1084190a0b56e8a0b6727259f9e18cd3986e236d5d5635178eb4586dddaabb6dd13a73cf5d5353a5cd05e49c6755da3588ad74b5512ac00475b52ce165062da2c2931a2f5582419aec0cdadcb850f0b9a341cb245bd354eb309f4b01a6cf7d879dc246447a52b368152626714e4086c3bfe9b0e35ca438f8bd6964357730c9f3b4b97ac163b9424fab4b492ee937b26a4235ae3ceb727ebac350f23b455b5abaa456aedbd20e4748d50209b4698fa451cc2c81f6a29364abeb5cfcdbca2099cb0c27ff817586e408aa8e67866a4b278db7226e9a8cddf0f56d3714d3a4dd45e8f66d9cb03870d625808244ace29f8db8b1407ae4d0e6d6ce3035cef4be7f296ecf9f17304e033a9871e49c77cf5b39583ecfac084e4126de4303a087420d7d688b2253d064423eb4aa5099f35a8950dce3248d016f2ad3a2ebff105a1d8b2042ef4092ebd9d0f276a988bc5ecf96d1f24ee8584f4b2af59ee55af8f48a6121f07d48b2df46d00ae19e4585a0fb291289b576e1e97cc90b7492e5f30b2d583786345eb118c9625514c1bcaa6bc199cc33100350625595e1eba8d70b1feb65b18acc761752c6fb7dd05d25f5fa13ffca2b13aca3267a44e89097cb0160c2da02ca1d7d9d47cf7a02a46b2b2b27e9fbaea4776d67dde159f7efb1dbdba3c45869b7f50ac155c34d2b4b1dcc6e48a28633233622f1c33a527c2ccea1fd2f46c4d08f2e66c71d71b11c2dd4e041ba8233797df73ec362394a17568f0e34f42b53ccae70ee0cf19f231f3d098cc2ca689158c849c6d04b569f4230be64968c2a3fe77a2eead5c769f4695345c2393ef514ac833b57735fe52776ad7f849707d47550d5db32b9992fec3e615182c386ee0885e96b89216a47ce2106c50b82578bca298f5904019179ea88632b182ccade249d0277dd88f6bc8ea8168a5f4bda1bd4602458882919b850d52c6e6a4e3add7e280c7089822cf94cfd027fb77f4634ceb55e804de97e32b844601fd4859cc812138b892a6e3acb2fd3857c453b290bee7e6b617d3d27f7b01117231681d90bce29d85acc8b4868d6b3464cf109d680b15a8c09294efb053a4bfd4541b774aeb6a0654f6370257a31057fd8953fcdf5f1e7922b01411ce3caa936b8bbbed7715bdfb442594ee93f928429ed6aee7a3d5c278c8959f18583e7db653e104e1d4f2cbe1cc3f214e9c90c6673f5a3c2d661d4540c19e4019a3c8f9857b12827204c113fc797acc9997666bf3bc9147b1a8fd76da3776d768ed7b95eb3c29309d836ba5a3d86cb8f720db692e8cb308bbdb4ec66b46a1b9db70b979e911fcf97fcea203ef9d1bf92253ed06609e77b9754259101db9f6da33b7360f0e466d3d1036b83594ed928acf05ce637e58f385c47d84814bcf3ea81f834adc4e6cb9b683efeb71113de083107c6dd4cb0913b1bc5b8fd502aadd277b1f2c3c790c50ea354b7a05ba517b08cd3169cd320d219f2d65182a2f7b5ee01c48463fa19367035b71981a66fbfb1bd76ae3254f20476cac7c2ae98bb47fe88aaed232a2131297e46551f7d30e3c241963f9471eb72509f43c00dbd40813124ed03fe6a5240d6c6421177034d7b01bf3dbb4e83db66df010802fc7a725e9758cb077f1ff9cbce67f89e8fd3d3cfa2cb1220a023b95326bd056ffb01351ed11af8a21fecd0e358902d758d1445ff9e39ccc105dfaab73bd2f8a6e45d3ea346cef46ed7bbc791cc495059e325c265541d50e1a1fd89e650e99d684df0d8319459b8ca3639c5b059f541fb48cc3f2cd38b8afe1dbc8f7c6e4eb8466e1f0ea2326d56eb1812912f0164d805bbb2dc7fe3741a2b09479decfa1c95697b87cdfd69ac43ca8746ebafcb73217ea973dac7beaaeb4266e5770b840270e13e17d9ef500f6e5e9855925ebead5cd66e79e81fc820c7f9ee80baa57d6d69ad81d4160b48bade23dbcbb7703a55c8475124f2efbb38ef1858024fd175df2a2c17672197975f3e0fdac53404b17d453438241405894e6a838a3e90381f3cc36cc72ee7e3724139dea3a20339b485fdccaeae4f76f7fb611b2afe9569a065b821b9fe1d6bcd3deeb27a56d2dcbfb14904f3c0b548ab919f1d759b00cf029ab6e95769142595b943372f19af361c68771be16fc9ef924ad3010e93e18372d0202ef9e93c3ccaffefe7889a8a4ab5cbf4a5bce7fd68d3de8f736111155b2fafac5f4601b659c0faf7376b9cd8fd7ebeed445858b00e27d7b4a14dce1c92b30408264ef785aab6ea52b5ec870e631b842fe92bf4266860f0adc0c3f992b8f42048338569891e9e70244504a34cc590699168a604eec0e5f2ff994290336017d1ff7d203fe5beb72784f741031b7cca5aa0ae125a3741031049e407dd3780813b16954f4713e4f491fcb9ea7632a5b5fda080093e5dcee39250be58159d481f3a13aa276483e455eff2371dd3b00de19ced4866594d4d046efd05ca7a04adf5f4bcc75f522a3351dc2697b6fc4a850bd337d10abc4365d0738d670c68a74274cbd4ed51fdb5037d325560c9173ab711e75130042e9174588f826f690e661b8764eed130e6cd8ce61baf001c9465332c83d843331c039e9fa0d2a8152b7d978cef2834e9cdcccffb7f8eeac94ac9503ae8da9281a0275af460547968f6587e28dd2f750e73d35042345312ecaa434992d9c4d0a1484f348bc17ec96c28796de630007450ca78c386f604527f903c48e6049434e9588aa2a144ffb5ef79364f3e4feac9746907a037fac40c2159ea6b02240ee823db4afa7f665428049570b33449b3fae7ff2b144d771f8d881c59c0838963590caa7e5c00b40976089c6ae34856b6b6673f4c59d8ccd4a08196c1b30d5a6483c288a253e3ae8a2e234051186a42a1dbe1eec13c8db3eeb489888b9ccaa3bbe68e4b8a542cddbe88a3b7cb41a217dda6f2b32f672346ac203880b9a0140691622719c2508c94d62a5517b41a7e06b441d3c961ef182f47937202af79c65a4f616f530bbd63019d0a50a96712740086c305c7f01073f5e20e1c4cf66338e05084c837be788730cc091a971960b8831b788381a545a0d8eee4a967f0778335d316e86cc270c0e9e4af15e643b9ebee2ce290f08f1769d988d8ff639e3c2a3fbb95eeba373567a1272880a06e776fe60e8d40a11366b9369ebb0dee14cf2bdf4c125c33645519debca3184288e16ebc528343599793fd2a11162e8d24230d1f9bf45c897cf32d5c9fcc4c71094089312b90b41874ced09b48e1d0e60b6865b7b726c910dce43fcc3c93dd5f702398f40971918256846f00ced03f91419bc2d09fc078acd19780f0f745008fb6a21723f5f0181b0f514fd6621832a6e06c4cc1f7620672380f76bb5710a8f08a824bbd5ae8264832722e059304d2e040049e4f726af0a8d48aa394b4c4a3bc2ddc69aaf5e7e4d20a14cd1d0c3aca03d916b04201400a9b6dc2e48593cc74e0d7520c370a4d47d751d7ed708991837c4a244df84d6379575f19f5354f463b396910ece8359a94550e70ad3d5279ab0e6bf81b93347750d4acaaf55d521d5dbe79a6603f0223b396b6d15db2803c5130cf1c0e63c9fdbd9e7a582aea1dbad886a73df3ff6307bc7059dbe5f3ef19f0c3e27522cedd319293774867808b102dfbf3c1bfca980c14d2ec20a96206bacf56787985b42bc48e0a1ed022db4f1c967961b58d948a7926cc83287823660ec7251c98e46bd61d05a01334c50807c0e511fd8cd178981492a1770e4537e682eefe8c6801cc7f70a1fba19d9ee1c9594249237f2706871a98ebc052508295f6b06e0fd089c9de2a05d08562f99d8a13690c75c23d8e47dc11253452c8a0d1f3a71f0ce6e1f861dc9f9a8cfc04e1464629c365f3b81c0ed1564dd6477b585501febda684414babdf7375d80c9de88862076447c0183d719da20b3fe8274069c0a58a6512ff957cb0255479e18bc6e3951e9beff68bf8697d50586043ff4d19cf8e684405711be1ec67baf1780a8b1581bce4395a1f03dee1c74b1b0f0968b98f083f5dc474cc1a6ade5c4c2e867e26999ac9afecaac522086a492d353ed5026f63b7b94f3193b7b0528f5b96c83359563ca6b10a713ec984f88e0f871f672ee97678a04ac15b465780ccf2929ea1df18eebc584040240d05b6746ca9dfc63016bebaa20d60b75f77f10068c042971d127900741d9c7228a504f78d35030d1a677a83a842acfa7e6c87742824251806e1a663cb000135114eb52e6db9069a10141d26bb1749d0dd27499c6c0297e6fd8d222e84f6ed0e90e3c54528ac687ef1db381e825c3e467c65855a9f9c2c55a3e33e6a6ae14dae0dad543892011301cb54465301714de03edeb9e6f36e8261830e8e7c717caf2d419a8657991666d4a4bbdfda4dd0446ae491b1e8a4122110d7c98092e8e39f679da026fb50e8732767ac45438dc153562d001f4ddb8aff94f89a466fd8b7b78e7cbad9fdf9ea867046dc9f70458f7c619f44f0a3e893e2d18f13db13837b6d46fd0c0926793a857214103eab141789f0155987c76bfdfab196d9d537842914e4889823b1fca361088bf06895ab9b6585b45543fc74b7a320c7545b4781b0be5107ac33822a056b0f3fab1004cf1ddd791045dc9a37d6ef5d53f9525d67c333174efb0b8d3ece809efb18cd85177435646c5936051068c459ac0e3462d55f0043dc58c66a9e498a892769c2ca17866528ce7aea03d7c57223501f517b4847470a24d87896d401db5037cee96d2d123555b9420aae0c33d1b9e9d001fa7e8f52e4add2eb2bdf5dcac3224df99c3a36f024b6b91c0a51b1d526a32074ae3097ae371c334b97067ccbf1a2b3baacae4298da87904fab2fdf1cf008895bb8fe2f1698ca4e1e5129b464d360a93c54af929fa89256ab1793a3bd94a2a4efa4e7bd5984c1a91838f4f0f15c1ffdec1e102fbc03001901eced7f6a27dd6272e5e116e061a6703730595a9ab1369b1e00ca794efd708105afa65157d93131ae8cf3368649d500361d0deae3f1ab39599daf2801dfe9df8ec4fe7cfc1a33e99a2543becb72f9cd704c99ae919bfde179c5d87d8a2cb20e3e9888a039e56f482096901b48b80f4143733651b61b85ada66cb7ad1f2994e9f86b801a96cf0bac5abe826dd32536978ac92d311bd9adbab7c427de75dcaebcb1dea7ba3f6d4e3a78cf3371a5542a2f30dd06c0d825f8933e79ef3e60d54249cd5b7ea4b7a934276ae529d7cd60dd509e4cdde8748340aacdeace461b6dc11310cf54b0355416ff8d8998e7e4c1804664334b031108c333eb7124714c236ca648f0743d66aca38e6f92a41ce1242004a6c7788f4ffa557a6d8a3bc16917cd1b421290401c2307c56978dc5c6245312c6ee27ae15585fea993bedfbba14d96030802a0f461e952f793d807ea0401a9479c7880b67755d6182f26b91f86185dc074cfc22b5a9c9c900c45619068a597e6d71537cfea2ab95465799de42d42cee5f08e1885e99fde38bdc7e60a9e7587c05a739353182e3932090cb5a5d00368002381ca26948def2a6a04e24194cc5222bc1e42d0efa93b62d8ecd51d41d5832e90278b92f201dda86598ee3fd691e4486364b261248f2c80d79174f0c716e8b79e7d88f1f8c8dc667e89751b2058a850c2d2d89be63815e9a6646747f1d7807a7c5dbfcf54d697c801ca9f04c9c352b9aafce0b440122f0dbee02a1db8089845be2fa0e6673395e7ca72d8ffe234f4356a9b49878405c65e551e2832e1a4263e0c4e61ab0df4fce4664dc896b9208b6923ad5eabff96862849e1d7291b676906061c0fcfd5eee3bc98a0062a5d67cdedbf73d4b715af1d826918c0d68c92661f374230b56477a44747e873b1ec8395a81790ded18806efb3a5280a1880973e381ba6dab575cddbb3b7cd327549fc5610cc7bc57e121e37ee721d0168966d67aaddeeeb5a4e8378b1d71a0658a582cd6d08fac829c3eeeb126b70bcbe6dc3310d0cdfa97ca864b997ce0aa242c1f1ab508a7884192688f653b036112e3456196e861f3620f7f3c421448c24c0cd5db4e8477198a2ff12d062bb4404b31579061b99df3650032d4b94ca8e46b90344fb45131edd3f745b27f47bd4c1b62112f8b39fe18c207f7deaa2bfdfb74588e7576bfd9dc9b6e44cf71f9a0ba57760ebb023f3adde5666317e23688b2515fd95078557e075ab9e6ed013c613dc73f4a5d55503b51ba4172fc51fa8098185ff53d825d30045c15a8af44f49194d5d55be441a0badc39bd0c306e01a25f68c16a7928e7eb696a8ad212c293dfaec50d5ad9ec6dd43c3f59686a974a01bd035bd07080553cce1e378b0c0db2eb2d0bbcf696ca0872c77f186992985456685fe54b77167af4afe77574b8a124133acdb941c7d01c6d7006d4a32087b0e41fef4832dcd569472563ce0012c2132ff151a7db99f759ea6d7d80390d3981498d995211fdb866d1bb468b8a5d331f2268b46aa9a1f32b998d72a34ac06288d07b64c2a1c7eaf5000875f2cf91b465f0939d466e36d3063e2cf755cc1a033ba01f5020e22202f8c617f5c29b10c0552e1a91f0f5fc888ea67d47774987d301f88a67eb6fd2d93874fd93f6c40131a6751d1256a7ac6c46a901ab8fb37c57a19fddf683e7fe2e31ab64efaf222fb054f14d458029f0be18f7285a8848b447588136e03737f0f3eb134465a2fc1c8a8800ce9b7ac132a6ec2549ab14a1e5497f4eac26bfbcef7432cfe42ef5ce757385e426464b47bc925cea59b259aacccf48a000ffc8219c791f5fd13d84a8111359a5cf14885cb408f86bb32217cba99e0f7eacb1a48f3f496fc1cbd14f15fa9812b26c0e6c90cbabe342e473d1977651533e2fc2001f81bcdc8260580360b4b5230d583718b029d59b1fd8f8d64eac0c415a7d4bfd9c964c6644a712ee9eb512dc22e46e729100947fb3a848f704dfdd1ac87014090b0b474d710c58644a0cd287b09a3c6c1682672576bdfde34e6b6b57d76c289065532537c78b0386515ef5e9051c6668278f0bde95d54f07f836466005079ab2b96c9b2f028474df66981e482b68f905f28a51c8f8d59555cdb3d7c08f86025a6013fd7d14d86422bc737d84fd97b0edae5ff5c7f49d0984d9f8be668391d8bdd07fd165b990f4ca2f7f5a99a979860d72a137d1cd77dba0d68f76ee0a719215825c12f6cdbc4b7980e25aeb30c0675f8047775811e051f46a9e84beaa78068e1985b77fbb802b437548b7dda386239e7541649046101c47e62f4138b2845ea7e68cd6ca58ba912a249ee7f02813a5c59b8251cf4a94cad80722681e3f228fb2291931338e0a9038c5c28a91faf4d7e7c7505e8d909a5c22cf72381c05433f1904837fe14b7934de0dd8fbe62904af3b72f46e5f2031c0b9b21bc9d5f8b2becd9085912bcb4e2a6f348520ca7c55a97b1a1cf19870175c4f156ed8e335756dacdb8436c462635d45e87c029e0783a2b57c6480d6eced7ed4b8709c10da0c3bc14381245789994e0e9cd87e52d2a7be1de363c57aefeb0f53c6b1a70ed5c42f7d59976e1fcde02aabd8c886503868bb684022375aa18c2d57c3c6356565cee53fab2a103cd0dfa4506f892a4171b8bc48d80243c9e2e870b032dcdea16bd7fb889a80c6c156ba8c59825a30a32db30c8018ca893eb795619080bf05b021c775ec433f46a4cb739bfbe151c2a57f5416d8e5b3d2e7471c20d5c266a71e82b857c0ed9a187cae97b76149838fe86013f81ab6ccfc3b9bd224ce287334930542c3e33d3523aa39beaf41551e267d62da77798df0bea30ee352635cc3e3313f423ef895fca69b97d3e0d9cdc9530d83080b8d0d29b5d6f459bdf72672f1fd98e9c220f5e03000cd4af297a430e3c6865d83de61ad9d10d0a06b033cc8a5712ba4086eaa9248c205139cde043d93109bd8be38b4f2ce6e0d20dde82df7288aedf05691ae58f827e28e4877df689c97c431022ea11a8b3bbd00ad64fbb699d86209d8a24abe5fa2f376e6d91fb3d282dc18fed9c263ad46954f9875e0a448d3d460f16912828abb9cf52a59bac84dc9a957c68a14988843c162f3dbad2f670b59b8e5971280206cd44a7208cb44e8e2e9111ded0aa80988582f1ae6281e407c0306ba396d11dddfa39a435affee0295ff89b82f99cf5a5e604145f1e10215d66d486015c2a5e487a8337c129d2ef83d2bbabcb547b81a8f17b6f3a888b6cc102f354715e9fe4b244d9919d01dfbd3b20fdbc7b9383a3af62d3f48d0a74b498a50f22f5f619cc9b7be3859e5c34a2ab867fefd3608721bc9ae737eda78b3fe33422a43f245b91afb4b2a7bfb5ae1dc7486b295d63e8c02ada28772b5be7d6bc0f6cb3b31266cb7ffa3435f206124f3aebc5c2a500ee80415d21e9efa9eb3ef4514ffe55016f00abfb51a9b1f71245175e62bc8bc49010ba97e968069715694805dd56d37cad0abc4db4227f6d8e9930f2cd20d098ab4695fde0c35c5bcf36de4c7057f96761246835b33b98af8880a52cb8428beb21d8ec8e55f7086a5b69a5d5e42248746c5c21472c86c3e4585ee2bc1a041e6263dc20e2665fc5a598a2661e6be28776e63a45224d45595c329345a648855dd4b242e4b6c55420df5ae3e953bc996fdb04be7073bf84496444103da9fe8f77b73e2c72b0b7a9b1af82754c5d4bc86ff478909d59f66952e4f1c03baf3fd44e69895a9f89e4cd59d44fa6950304404f02a6c913fd682b96313423cf607fac69b26d1dcd0400c6ba939d7f9291935f644b4fc453a68440adcd9b80bf66a1334e76fea92ff9e3da73f2baa2a0c34bc9e12020098edbfa214835a7fea7a9cfa719c92c389934f02f9eb07efbc690727c312f58695c5a7a1ad0661fa80b20739f2f1a1032a093994a35e90f953224477f7fd12dce0cf2385c46a4d2396e252f5a1839428239d555494494421bcf7f920f4c4887b1fd29ba70963b058ea5c82d45222d5d5f6f6015c6777215baa3873aa4dac26d57fd7af22aadfc24fcae54920e62c7b57e207fd2906f5112d1433643c30e7d540bf9a7cf375134c24234d8f9528bbe764307c9d018a9f2eb3bde74065f1ebf0d63018dd815662c958743f009840a2089611e04148cbecb3e38901202ace039ee545f00fb31bb2c0d6a04d4a464dd5d85aa0cad4d9f27821cf16342512d2cbdd5bd90931381ade3960dd15d3b0612f4053a3534e800c3209822058b3f7727a816c5ec2a8bfc4505de047c38e8897c20e743bf8ac296e08c53f4e4f0279379005848b2b43a7c1867aaafb3f3651f4d19523327da939f23e7021f6b0358a198e137bf6f09483459bcfceefa652f49e1dbb046387927bd60b69d13d0d4fc696a48ad019df1bb16e5434932fb8390119fafcbd618d97b64f3bda78e61b652170940940ddf6998a9a003d805b995b176da885d1eda38e9acbde12ded0d8c666f44b2b7c42372e89fa32190891de1e7260465d80c0913e706543e7d6a1f3b6f2f4f94a7673801bc5da23d7c69b1cfa7aea8cc2f1bdeebbdea90a6412ad63fd5fc81f9c47ac4f0ca9705e5f1a4bb9f512e0c4aba48399aff98ec00f73a58d7dda118d1bbcb82023793a9caf3e1242fde66425b1ac1b0967c53d211734f9761617550fb9ea43f26d459606b0f7878146e3ea21a6552af70f0c7192c63b8c89765bc07bf0b37da1e691c3d9020cbb26bf29081f75330f330aa31067450806d651f1567a0ae5d0fa06ac07a41c3712c1316e87b61d59cee18634ca7fbe7148a579d472001a405380066ca1bc1de087c2733eed2c0f596b142575e02bdcb7059a0ae3c72d740d382cc189c8e7c7e51cc677794d0f32bc61c1dd33757e714d7068224dc919af9733fdb2c9d12b5cc247f1760caf6d5e339aa4938869e9623d5ba58cc24a0d64938278013889ad40ebbc9276cd642b77740c384e1cd6fe9e1fa7d4055d53344324c57d0fb40a17199f978df5473baf31f4a01b1e599c2c057e701c39858a8709bdfd9e78915a4cb614e0f09a55e699dacce67ff1eab92992828ff021b3466ddb26bf60f7385521a4b64bd71bc5a6547d04f623112ec549f3207dcf4fbe84d9e489ab05b415f344a2ceef8d3d72a85b9b3f3a86de27e635aafcf16d833cab97ea9c9ab413de83446b0f78bc34d2611eb04043020a29bbb68f5b110122580e913e8a14ccf444ce43946f4b9659556f1a044b4908601ab93f6e4844df9bdc46cb247b0270a22361f0219a3fc8552c32fa7f9eb49e942b36f342ade04b0272876cd20faa61249e59427501a5491a6161b19313c0ddc9a46a08c771b7ac38df53f5238d75c4debea4f9ac5e095de5a3e61fdb3e7af98c03b3702c7d40db01f584ccc9c92fd0621956dfa1ba035fa09233545cd37bde4cb9cdee1179e9c9a50dd975690ee270b8343a761d21def82e866b954f3288d3547bd960db2ef8b3aaf4f2cd5f4ee0b529484e54d3087503be45a15cb418434778fa0c33e2d53ebecf4808a0e6a698ce6e3ad9db6f67123ca292419e903da4ca233a6eb26ada444468a4266e1ad9cc81983da779870dba6bf33e6d8933f9e8e029ff764e4103a5cb8663ea08cf87918d2ea2a3621a313755978e7b3628a8d501577374a1da323d6d12aeed64d4846aa1921da17ecf9db282050aa9a86c19fcf7a8a6e4777795bece3524ce35f04f03b0e49388ce8a41366181bd30c228d01873c5b3371747da4a6d0793e45648c0067471bf5842f3c9cae5d69f15e39a8e1f064f93d3398e22b1015a413623996819e97e7af40dd246f8141838d19d2a7ddb91a1bb8b77ad4f4f7fda646079915b0f2e544884ba4d7fee830572cc72ca1a5af1d254ded1c1e1ec37cfbab9afa4d73f44b4f09ae735c3751cb800be3c090b6619db80b013892aa1fdd5edd21b1496b7245b3303fcb6728190e6e94cfb4cd679ffdef8bd4248238002b84b682f6243e112bc2d8dca0296d8b28f1e9be1f2d2493d7528aec212e4c46094f4b9c06c37d592c7a07ac506a0ade2ed67ccb9ebacce8726d485224a550e3b02b7749e4eeffc7f02c6141a56be5c519d39fd72d815934d78d165d7059da549260cb6d12c482aa46ff56f7c35a32e95115963726e925d3cfb5386936e8a0e1438abc2cda82dd8969013a85ef08dca339c87a97b29e731d03e481dd8e478ff294f8183c38c7da14d41683adf4e2127ac50651ec70e58f6bf6b4c917feabb6f8b6635d07db05d04cb52ac7b8eb31edd1235f644b7ba46529f2d47ee7ef8de39f76b575738881b729891a1d1276ffbcc47faa24573053730ba8146bd8b44e75feec0149952d05e5342290e17c516c55ecf8e0bc9268528d0efcf1c3575b8e8a81b5553986841f4289169eab6ac3f8079bec83f02d727c5600b6dc68dc71cb83ac41828d49de140a657a8e5d0a7d39610a584f3fdd288c3576037a98797213be4a468222046153e4dc7c1bc2698d13b07b8ea21b467cd0f1d48a4551b4a6dc04ada47299fa0f2296efdb08d3594bd7a023ee96235e760a467691b2a67774333348c33611b47aab87d5486e6dc097a2acb6f490f23d9c9b5586bcd61106e7137c11b19a9228371f6726947e22783aa11e8b0f06762c625e83b2303e603b0b46a00e128b2289eda9e974940499316e08cae81a1105ebdebaaca495aea03ab59086a1e1c1483b2b5dd555c546cdbb7eceb1577503972a628aae7a82e34209b388c957a214362095772570729298700998a4dfb4b3d9ba0d60436a464cfcb9d2bbb5be861df84801f0409228894300688e0412e9601a3e9dbdcccb65a629cb4cb2ae52a70e6fb6fe09d1d6a39627c5d0519d6582aac3d9c1e4996821a35b63e4c53a3a3f4234d533825156dd6cfa48527a1870e200d0296309dc07ee59f5f7267c9a9764f762de9b68f76698a04f8b91bbeaa1d1ee747323797b929b91f488db6e60729956f2c555d4e59887fe33cd326970a1a6d053bb2b5af601b46a9c19cc6c6bd285feaac68a184a897c39655585803d7ff0811c87da1fed689985d1f1473f672d9b5d05948075a40d174ff8f4b2d387150b8604a2d8021f98ea21acd9090bcb0e907ca2556f50a0d3e9035f7ad5a7a1c77c249a922041af91cc69a298340c0fc1382a1de7e39048f04935be9d3e5b01bd13aaf9ee2f0aa2002121f829a6e4b606a875e444d0df41c37a9adb1b508a9cc9ae48c6ed635027a43f7f82f2a5f4bb9f5cef51d9ca19b0d7dd1e89615403f1484cdc1a8586ea1e006bf2307dec1e0640de8719b84d5c75ac77bca60f73e9d9f034e3f0820dad6d9b0c611c68566d9288ae1bed7ecab35b203519fd1fd349e4248b5661900ca89d823a85bfc6617a14baea4035627035b76fddd4f5cc7530c631729fa566991cb7c28cc1e349d019ac7774c9acfa5c5e5df0561e1687eb088e4751d6ec5d3e21778b1ea1b18fea540329161b860488d0b58a32aecc6b0a2d7d02c5cd462949fc3645a6cc7c1c29b62106c403a9789ff0e9cb837a7b4311dcb8e06bc4eeb6284ebe7ade906bde5e735a68c1b48986bfca1c6c308c32a210713f4a18eacbde5311e8fc0a6c285b32193ad5a219138378531505829d2fa99840339880193b479881337a5da5c298766d6afa3188fa2de6ddad4174ea464a7ec9fb3d362f164723ef0c9cbc1e2a1ca97c398b54ca36f779d0a322e9732d7b49edc070b72d639c3a42e3ba8f115e52aef2da49ae20fed3fd04479e29491005d5e950367f4f06bd3d240df656935583a42df06e99fede218bdc714dae66c8853eb01156faa478fe14839cc7bcb3085a34abfa733baa464c22cbbaf091e8d72aebf018f2e32ce40abee428dd6e80627dff3bb48822606e7d053137c8ed5f8bc93f5e34fd84b70146c9c47a99177a29d317d187aea287a0028530168da1012fda81fe97c79f597d378a8e7abd0ee8abeb1ffcaaa9a35269dcf3e6a6bc3e93752ecefdeb697820bdb042ddede4fc61cf3949421958ae63cd98b5a0edc10cb3f9928a48d31968f3f63f739b0e89a87c216616068c4ff5d02e057b3cfdd6612665e8b6cafe405a19a2567aac2ea061c6d95cbf5bcc18f116803f9fe09b410159153d587a309beca04cc95b73290c0d6f86543acf9afae8bbd57c4f44c22e07256967b1937e80193fa09a2dc0b8f8d01f12c49f53bf2334fa48ef0d0b412d49ddba5358ac3b811a534226e6b6bb300d46270344b280e123af63d634eb09c425d6e4a080862b71cb4c79c193eaa0b2a94080add8bf6cc5b3702623d3129341ee1808925ee16931d1a402e56963fa924ce2e7ad7a12cea5017926e0ec5c62308e62b1571a03b4760f15a5e7203f9c1467d02b5329df250c72b3d3d35b5f881ab415770082eef33b16c07ffbcfc8bcce52e42957932bc63b699641a00ee53d8826e03bee15cedf16ada808431a95e31de7076aec6993d8006150eb9e12ea314ca2069c2f6d7242d772c4a3c5f126e47c90827813d32f887771b014e7ae9abdec163d7940dd7e760f5318b0105742e9001ade1858bdfaf7fd07e96ae5f4f6d28a60e5c403e144de28f5acc256d4f2dc5702e1cea11cf2a95750ec1ef82508dec10a997e8b7ef586f61ca05f370b01041500f5156195166fc9f7ab4355cb94c57a2b04e72d6ff9fe422bc51b32ebe5a68a453a4af4a2ef028b1beeebe5a68a457a1a3d6d95e970a4179c845ba2f5f5a5ea251d2d3c656fa1841be73f5cc4e5ad0b8a4528b7dd62f92baf77c36d5391ffe4be50d1a6d9d584f62c40cfd314a0e3cf3e3c6e59064ee903e904ab2d3e6469369adea68716ae4bd1cb5fd6ac182eeab302420b62d2b169613db8cbe5001355fc78f1dc2cedc1f825e660c7c53d169aa4e933bf22367952a51f90c8c4c161cb0c42b78044366e87e84886f58c7a2b695a936635fc26db85f4b45fdadc62958f5d86ae4ae6e7ec879c3a8d0b54b0f3a3f02901f40edb5ecf235fb147c183b20025e96e442e68d0011a0f62a05466b55e0a514c0c8c5db34c6b96599f055366dc9fbbb280c8929b8cf79ba4457db09077d72783f8d36555342a9c3470a1877953c3dcc86fc5ffcc2d686176c4e47c1816d200f71ebf38ca02bc98225c5107f6e3fe8165b1f4c41ad47856a0260858296b7ca46afc640f7b72701834dfc3d7afe82d8d5487f01ced67e4f6a63d44b632b852d9395b9e3846c8df2e15e7c3cc67d0ef16b6bfeb3d6141931b8088c16e335bf9ba804fce0d2fb8cf9688e71a348b33f4a46d458c012f142f5045416a05480e5e89df2975eee25b726cb11fb160c9294bfe3323bff08b612a03e06cc806f1f177e8509dad0ba1c8daaaf486846d165b5c8899a3ff134b1ddb57e6d73b690d4e406f53a5240e8f76c7785eaef7d9f2fedee0c5f6dbfbeeca598197cb6b49af340ee0610409f071632bda1f1845e9539448894e4588c6150dd0708d38e9d4c62b6be3a91e5562e2c946af842227eaada5a4500968c3adc588ce7c865c8273fc799c06b295f1701dbdb5926798d19ef48d8eecba32057aa12d28f1061ae5f3a0342bc749b99e4870186f2bf65e8ce6c88186d246a3a8d57bf431b66aec48c034d70ee760f39af4bc68add2a4a9344d19fb29b38e143ad727297ca3ad2ad0fa82f1ed38be50f559d1706832143419ab3ce584ef5d66ecff132e703697c6e61f59500588e2fbdde81ed6b5a591c6194a54cc46949fda7520dd6ee557e223e8bef62cd93eaffbb2c4f0e12aec96493eb3b0cfc5384a8168aac639d71bde01804ee36d40d32d511e0d9e65c0a4695b047d5965f2fb9262d4af453cb79976c372ce8d61a88973cdf8fb144e09136a8359e8e94360848cabca7e8a4bb22c4e0790ae973d5c5cb4bb73cab1b435193be48b2d8f1e5141a3206b31be662843d65fbb71c4a5947910c6e99b046a741c8dbdb6c7c109f06852ef86ac47010c74f39020a8529ff62fc33cd792b1136024053ce445434af1979fbcb05139044a43161109db5e9439f2314935c53549857710b4388667ad19496fd4302ef171a975c5dd3ba2169551eb0509384e2807a99c295442055d15dccb89758f1d0cf9b6f9d55361f65955cb39d6eea85f4812176076f8afe83d964aaf7cb2e8f26d9ec4c42f6dace87a45e304aa76179796eff22bb9e4418b9bfa04c4001512be471a0d1f56103e5dce164d3ce35dd1e8f19c2d08fcde79440e0582a497a8f63b8a81dcd7139b069110daa6dc812da4edb203c85634893f68f34909c7fb24826f87e6b16cef17333bc80c8a5c5453486b88bd0134a9286a800fdc4c27303a780fc71fb7c815345c2c4d4f9e3ab611a0f93edafa1abd263b97b6a3f0534e2d8ab02d6d536153c714cd267ae6d38add4fd38e9dfeef75782776e21b4b89256080e60047a7ddf07af4ac6c43a1b9d1942d6d5b67e163e95650b0c0e5c75aeada98d6a9d77de67fa5e7ed845ff60afd2caa9131580708b1146bb24bf88925b866e92877c68970320611b60f6373f30c6a609c5b0ffff0b0f71187d73405139da5affb85841ea2d97ab6898cc5891589dcd31d20db26be4df840b9534991579bb9d38599035efb4153b510196836f822d1a074bf7fd8d6293c0fe71e11a03cb669528bbaf732ce63f311e83e24d2d70baecddb71a72657527c69c58efa1fbc8f12e1d9be04efb2d7b41c9ca101ebc3cf129f46574adc53a0f9f70bed49485867c3d841163265f9ad8d3d4c87bcdf50dba7b590a1d5679bc50063b557dfc172b11db77447aaf3a93cbfcc507c6fb4679eabdf1d00525194012e871b8e03974a9ccfa99afec773df29102930c5d2d32430a7e99a944624d9b7de02246c04377078cbcd85b7a2c81a137e0c4945904a6726e410a58f366abb1d4b32cfb49bd3982a6acfb599911b5bbbfabbc029d2962c0b02f095658e85aee1e9b01f8b77fc6e0962b2eaf878585e64c6f552d18a84c401433b293c1d61ed6754176eec20a55a1ecbfa9d9f91dc6f4ebb183287cae8ece08f442af9549c8aec3058bc24c1e82eb44156ee2018db3a97a6cd022f3f9ba94faad816a59176e0b126e0a9cf05af74ec0cc4077af6611c617479ee33bdcb86cb2300ad566a4c861723398d3f96c12bbcd90a213bab25a8676b514387fe9ede58ed52867613d413232285bef01f5326e168f8004f6ba2b28628a01b98d11a0070eb9473b236b6ba349ba6a69f5a735cf7173bda836d51ed4f3d6b1f3a88e211040b019ed3dc37bd619ed694f2e0be37d365ef7d59858b670b247925963826069c0a1fec1da847d7620f33e92190c72f3132b77d2257e752ed6048a7916fadfa41e2a663d3a31e5574e451c3ead0b70196a7829aed37346899ec538339be7a6c2d97473ab4426be175d7d9e34a1fca48e87cfbfab7c2cb6364ffc17e63c1d597b33f5e6e54d5187ce060fd78844af584806911ef9219dbdae7ac09bf7f11653c8601c5995cb8836cc95c99ccc0255e45b2d6761a84d697503088c6dd02587c63028fbcf5866da2943f9e3f326bd2bef29d7d0dde5304648e63f6387715bf8666b58013a4b37f36104618bd05923b1c69906757e881eae2368d8731dd744b70036f06ae832fe9894769dccc0d4e38041e2c75791e2f194d0e49f998b53488e2cdb20804170513b39d0707eedb262df71810248bede0698cd023b9fa1682b953ba402b077e983be6e1cb71ce7f8031d7d2846ef23dd020e50ccb6bc6478bcda54aa8c05d1de516d11fd69991a60f06205e3f07e76f118c713124f96dadfc8ec103cd2a6a532bc7753ddaba90824900e1bcfc8c82a7f17d60f9d1eebc1cd9a16b70f316b993d70d4610f20ddf81d1bd205b398abb59c0f3d1c05460ba85da111597311fe9b9cc667c1724eee85236856649c81950ff30d3bb19fa195a59b829896e78d4b98b9d3f602ac0be9358f10cc8f586fc07462e1570f00588120dc770d26d467e0037a98e49aec23fb755850014785d4966cd79959fa472c5d446128541448cc105c441f4d83b8b547e0e64698b9919c11755cca3de1553e08597d3c13c0d262a22f814599d85290fe7e96cca6d629a48e638e1416bb1c8d5dda1ff85398e79366523e23b6b13b53e7e69db56be7bc825d578a1685eb4e6cb26ba4775c8b808525c9959aedd13c8246414f960d7ee15286bbee4c415cba9468bb0c202b1c55c908e9a5b2c3a3264fd1597c78c119a54d61ef6ce610dd144f9c8fcfadd5fbad065a254fa949eb317e943617bb5d4f1e7764cd1337b3bbb1f326fcddd5c2f320bf6f2c45058b43f0a634812d90cace8560e5864c91a701cb6668802c4ba0cbc500cac64c0b2ca78d2950c7fdf4ef06968dfd5fb16d8ea42a7727670d1f3090a83db5dbd321939444b9e06ad26a4231dd3fa84070b476f0c5c78dba0d2eab0f9351a188308ed6108e64dbc804c0d1b259fa72c60ce941cbab45186eda346b0cf4ea0b13be6cc43c2cd87b4e361362742ce6a3cf1b24db9b0283d67680bb07a2f8ff61c3303ab0b796402b578f244229834a8fd43542fb8408dbaf8f9bb605eac40c6b094c885cc0fe0746907475093967e256693e54f8cbd5c0e7a226058b4fe8fea2eccea7d0b960d91caa6a946ba5da23718524dc7748b68c9c60dc83fa89fb393edfffe85a01a2f775c24bc883888d5fc36482becab9b03886f5a4d9e2e45884a4d5736c70a05ada8a95eed1f37e1792c018d066472d50736ade9d58fe7f0c54f02112d3ffa112288841142ad33291d291b6a7a8c5108c7e1c19e5f3d1c321220d331b1cb4db2d3baea11e3488c07507cc5c8a7a13d76c6f5e1f11cf63f7ec7d9e33d9a57817a647b0f72ba4f5ed27c693bdefcc204468c9bb01a21438f184a6ae20c45c5e425062c32f5fcb85e3a29df4626a64b365413800a0a0722d1064979a6246988a1ce23e1266fa5907e5b0ba15591bcc90bff2e3402e94e154b71cf34a66f226fb315e4bd054bb80fd80ab36b532cfe69a09d73ccfc255a67e9228b448618e7068440d898204e1890a024bf18a323c4e686b8d6b9a611f2ec81bba58e6031c2c4c25bb5c2c8e30ddc1f87fb079b9c1ec3f0522c507d4abbe5310e41f579c606402818b95c759844716c82482da8055ae9f0c102cb77919a99258910ab70966920f258c55260357f25b5405c07d3b7b7ab49f64006ec0d10af02a3b5e003e40f4d931c9309162ddec6c8a45c8a640a9da5bf02c4f85a10d77af14e348620d85a71aa1903996e1a995b9b210471931936e957f9437345a6d9e2df2d815920f3614ebabffe2cfe409d3c9a0f07ec1692ae3b79afcbc08fd92165e8fec1b0b8337cad718ea3c22b99e7ec24721c7d974ab5a054a9be2ac557c5fb3dbfc87c5e71a0e7886b6d9337e26f817aee942a9d8ec2da15ee0c54681f449d9f065f1798feb0df0bcb7963b4e397fe7286f6604bbd4235d41d9e150c359371640d7b9594789549b927ba53f822fae5c2709353a695dcf0c44a8d6030762557c7f1b9c8d32c7e6397781c72a10267a64a3cd80b2679feb159ee546760904145a94dfc22e3ae130f0d2d3545aac979e8bc0070206d4831cd6384d157b43853b04c6007cb55c6acf63282f6df3d90b88fcc57b59128901dd72d1b8ae8f3fab9192db9a9d5411cc556b4c6faee2f3722e61cfa43acb97db7adabb7e58bdf35778cb4869e32a7c30dac5d1a8f915a788c8861f445d9dc54a3e7b6c97ae42e2ed65e7d8613fe4b20b7a0229aa11709a89f85f77d27e269443da637c1e87daac395e27499d1f5b857e6d5bd1d74367e9736fefe8be9e2cf6f6e3c9dd353abc0052d1918af358446e230dd60b388df1717f8afd4ba1631032ea14bb59ee2629a4f7478da2a095bd633ef5d501fa91c5c05ba1643ede37fd1da5d95f5c0d6f2a66f69c842358e3f2a7ebe321ea4c176f2d1fee67ed39b874274c6e3a1389319cc423d59b63c446e49820e0bd9d4a2d10dd61a29c8602796f75cda8b23cca2c1744e8ad1a42502468802173660a57568cda550f2ea2791824011d221cddcb6b12ab924ce475ea43d2f8a59b4ba8bc454c2b1839bb33ca9914a2061281c0adaeb988ab84a4572bb690a82205990c733e668ea3b99052dcc6e7db6a417ebb5a2068c7e3fc78bf291ec9b2036e9acdc8d96c1d6c4111837513391e85b07c169597613d6576e9213a7da074f7d9364ff45dca4e1b0cf0755c2dcbcb3a442bdc2ff58bfd32bb4a81477bf158ea2abde71a48804acb533656604f1ae217a8c601ad1248af18d91fedfbfbd9f4e457f54202deb7c06792eb66c0b07d8535f6908b625383eefc0cf10cb9697a84e9df60727109fa1432d196f049df6e0ca41a4eed361814d7f80e0b4d6541861d8a5006f84b608fad94317ef57e4d93d91d5993b44ec02963484a18d4f3bfdd1b5f592c86ff82bce301234e734f1ae16882c005c0d02961069b9b2b35d64709dd5125db609d726445c95d0098ba673b7689802e1d188aade5e956c6ba94a4fd3230650e2884603282c88bf91fc28fd0995e1eac09717a459682027e7d1e56802e98697620668acb2cb2eb97261f70a2f82207f50a5fc9f441bb551c7011d12c2b7ee330fd449d00a77a26371556b147ba68d28be185151a287921d0c5079112703ceaf276f8e59b4edbeb1dcec0972757fe79c2a63fbb243c5f55298297b36afaac620256ead91582e4df2030ed57381fefe4aa164260e727eec1db8cad234e6da470dfdf21abbdbbe7463a7a60733682aac3191a04d9b47576311e4df4e030b37605f0275aec20a130adaa47934359684039d6f9160af5ce9a0c6635dbbc2d402e63d6ee587b46475dfdb78e4e1595314d4fb5344d3060db41616cb6afb12effcfd75c27b273b12fa075306849ff4d94dec24f691158e444c13c5ed107ce068d9a29c93d81d2c6076ae77e42a6bd445630e257e7f86c4852bf44a74a03b14aa5e0ce811bb4258a9f6f715534f2c16bee00180d4b502b6e511a61db591610bd4f74a5689c7dd47746ef61042897b724761f461a1527c2ec26007cd811da2fdd803c4796963dd7319ba2ef6b267691183c5f509681849f5d7d76b3a0c0e498302c5a0ad1cbbaf188804b08b810ef608ef60bbbcee697da7cdab8b18a5558b8276009d61d84729838d376d38c234989aeba633f8a17447d995c1e1f56595eaeff81423c26a42c067082083fd3adb64957b612792211c034858db25b316a30c67e79bae0f2345c1b636a54f19b294de50be54006d2b0647921d038a71cc5648e564fb968430519cdccc1b1be7adfe2aa2a398112a3e8e36f34573615000a231b5ab395848202a81804fe64d76567986734862500249028bafe8801ff088689141db8c08d78db1dd2344b9235540eba80d339a241c043d1f1eb3d21427941ffacbb0473db47bd71adbb25724f866b6e029bb631d88cdc43e359914f8c9ba40391269029f4e730a9118305d02c507167260d25f560740465c05655e78e73271adf21000e3da2aa183061d7419840ed5de566bc5ae259cf0fff884d035ac5eac5d73a968f0c00e51939e1d9829f30e67862987018c26c239ca9034b8fd7a789e111c828b58c50c411e128171298d26b567d62ec0a69d52719d41e6cca5161e4f94b635e56c4bde9844d8700ea3c88555ecc344ab1d3f1df79372a4b1d60a9cff3caf6984947c62ce2f793e061beba10aa6127067530384b31fd8d8d569c1def1188632d881f97963bbc65e4a97926208c9bc2f69b8be5c03f8482dfc743e1093a6a55d3abb761bf20a4d6d05516f86d66330de3e4a12b9cb165eaa69442f210513f33dd6f235a4208ee9636fb1c426f0184564ad25c95a6daa37c35cd6543856b40a4071e916b603d6db346d2fc7fcdafd05e2a3e33f70e184d94900993edfb60fda1794e9e4a4fed0554d987f6e92b0bb574ecd5694ecaba2f76c4cc725b6bd2d315d8681d00383b0a35d5f318062c44bf5e10f4a6815aee8a73433c49d115fc7594d19a9de8de09bbab1094a48db3a44878c128456b3bd6379637196651ceba6d4f7c528a709a060a82bb619a86bab20f470ecc5b9160faf25fe9237e210e7f22b9597366c22dc304a073627c25d527c75d3d1f40f3cd7f86215a2284d99eba35022352a1a35ae8ab194f82a7f7d223ad672ca8db4d00db6f8225cdf45aac3d42db45c91e1b04dace13c85ef3c76d59f357132af4aaf279bc8f57a5a54edf2079bcd64b74fa357617b36811f407067b8c4b4c84701d5ca189260d2ed8818a6e0813f086c1bde7b60d71873cabc951a2605438c4e6b5c741c61221861a3626273ae8c0534ce59f3aa983172be74a98f1bfc6f6d3a444331c9cec390bbe24960586082e219942972ca16d9ccf15173b81cc9a240a332dc6cbb4211d2c9189f02848316611f5e481192c66211ab6c2aaf5ae3cddb45741cf7e668d10aaa384164f246080d09a8531d01cd05a1c2e982c83301224d8c5c29fe560243eaca73580d5140eae18e6d5437285669a842c8a6624167ef021c937f857da22dd99365b251ea3f4d39eab3dbcd9436e23e313699ec31859b936e66263c7436c036fe6588374ef48699bfb024d67a711d793584240695a8607136fa69dde0c0a54f71b423ab1ccc4c48f4397e6c31c0cfa0ef2feb2fccc5f686c816ac780f1d13eb34f207831cb3d76d3d3d1171345d33973b7c1f485f0669347ad1cbaeb8a1fcd54a59f92bb2b9841d052311d3d9a56fdf2ad88f22366cac8fec129580e9382536e766bb06f0f6a713d58b19775f90384621b6f9d6c01c9a89c3347fbe0f3d4ff2e7a131e269339678e3e13d90bc2b1c8aa8d409bb742b92e8c654f693c9a37f509082a72e81a0931672996c383316c555507ca64de274c4d16a9df217f2fb15c24ac32b886419c8da814ef0138f9a2d53dc47f8ae8eceba8b641af797963776706e178e817529bd624f6ec827800044a0c018404d02469d5230c03d5a9454180db1caf96e7a7dbff226fe1165e58e983b422f64cc6163b312bc1506047e94b9d0d0c9004ed652abeede1e1ae30c209a5c80757110fc10d79c1e2b18ea10b4fbb96a4d672e3be8c0c59505213e389dca4928e980a41f2cad4f5c5f1c1591326f86cd66e5cbe39c4c8ed9e08070c7b7a25078f7a96d20f3479c96943ea520a48ddcf58f0f9872372c8dedcca04510632aeb5f6638cce8ae7a7121510fe1caae240e64005c53331b647ddee2b9af36d9b386baeb15fb66b8dd06c6197d13a30a72f1ced31bdd8ed0777a8748956e5e20635cdfe9bb9cde9440193273fa1667fa7d9ed4d6ff60d3307113ccce99bb1432251f1b93e6ad501c70c0a99bd83bbb8f839114b280e79ddfa007a6cc0edc3a56a6c0ab639acab4a2aa01f8e2c4c7d98b9592a5406cdfa153f854318df6bfd22d2661d3d6891bb40d2678e179c784d359e4e528b417c21c446533fdfbefc1bd09c1ffde071e1aab214375c4246893cf0a638131d912fe6228ec42d68b1c9a6f9de7fd66657eb9b2d176690951231f53cf9f484a0d91d6dcdbc951521ebc04945cccc0e7a6180f9b1ac7a2700b9eaf01001d26cfa2880ac1fa6140585f43fdd63cfe16dee9642bd4e06f37737028a29570df1074a8c5a95862acea5b7b234ff9430d03d79fa980136a19466d4166665a903953d370ab8a2bc6be163e411e815784967a3537f5bc249eca9bd6ddb0abad75307afc170700a1d1eaa8290e1fc0b592c792ae356e443ab29fc3ed17a6c6882ad147579a81a3a07f1a625c9b39b4a9a8dd69abc6a7762466aca20eba4c4caa4a7fff795c6c85a8f1ceba1fb76b8d0381566bc2d7d39b7f10bb5a5eb95b668045948d18295b968762705ca894f968234da879dd855b599a100b7cd8695f84a5437f7865036c845215d70f938aa2a30b152af328e0eb29b34b9df826524024213dfa2056e55659d48555e030e36e15924c8df81e0cc6191680c7c8820a38263ebe0eb934c37d03782e5ccc0b9b0ae757abe4b32e093277b6ee366c37b54e6ec7f56c559bc000246b4330cdce533e6f546033471a8f3ecbbfa7b9f066a9ab88157066e8587ece1264cce8007866997440b7234bc6082b22d88943535268c53e64a54d54574ab7de6cdf94c77ad45aaa1552b76bbe4d247f7db649ee4f5704fe83f1a1180bb27ed6a22841ad9fd5dbfa59b1e6663adb6742e04304d42ce5266e0ef9e6df4a2c279c9aeafae2c6464aea4b7476091ed46fb32dc5a1cd7a1f08f7a4488b51706a6eaabb769679f0fbab034c3c4875ddda649c8c4c681070678c36aa084c13232a9a12e01ec69605a0811fc1135c1a349db9367ecfa5e5fb647397a12759ed88e1019f0eae9d74e5c3a1b5a2471a7d58369871e9b907503dc0323654d822a89750abad55f298cc68159a93058b714b256cc8a2a4542db924b9d6442e974bd5b8f4c92bd436339a9b1fb554ebd0aa001b73ddca5e680dae7a880808cb6e7ce895b47e79df3b44aae040541a6c5443674d6a8c78b9774b5a766e28c72d9585cd9a323f035a1647abdbd8f89210a2c03570201209ea2789f7c39db5361f99198f321b0b99e69a7139076396d7fde6573504df38b2ad3d4bda7af36169011c5f1f9d0dab59b652a901d9bf1f4773671627b6c6b66d895ca7b04f33e659714942e9469122436308fc7986ef582fdb5a13fe247903105a3f7e215fddbcc11c78ded33403b3e837782a2800f0f3fb9c88af85a93a721125e18e37f6860e46157ba64ddd3a15a5a66b9fd920427b32da039bd7da01bfda8a41330a98f8b5c43cb0d67b408ab28c4745a1c5d73ec31b994010c109639bc5f691b862352c012559cb33383925b4333c3adc8f68f7a2459b2c9bb5140f1ae2ac64e225f91c29572a804a6a6fa88d9feb1300cf846895a1cdaa92dafa2c06b30912768c5ba1c0fa341a660013435d424701f9864a73a3c9c6174639c0c5e703ad61f035e69dc65e65b02193e1addaa18ae2b7e1548cc8699a28b336080dc9e16083e3189a6459c53d8db56309372dc3fcc54a6e5134d746f6c4398b2568c6e4163a2b33b98b815bc048bebf59184356cbdb2cb9d0454122942cd57d505ead1a946cc5d77df3dc1c602e54d973e7039065cd8e9340b51fd844a49c10d3376024941d398bd4c1409ed16766559d41b77f21a6bbaaaba0f0fc4b52432a10f35b8821c32204c9ebd144ff2dc4d4ba0af85173d0d851252ef3a806dad1d37ee8fe39b45826f7946dbe12620e5124ef412f7ced4a2d60b3aea8c718df7ebecc644b4d762143013c1e2a57c8822067ae52c901941c1d0dc08ea60ee37c2bb5101b4839949f33665cea8511f6cc81ac19f01204c86fdd545d7b328a1814767434a8d6e7088863e8e2d7f82076f385123436c6e5cc7bdbaa432efafad46f881540415abe192f83561ff8da7cc80f648e9f57e28108048b6ad693438a085c74943690efc173c8ade00a385052124f2ada7d29336025fc98435eb14912782564650501c8c1161cf2e3c9575a0409d11ed2954ab4370fc72826c11d03b1839e053ac7a40c138b7fc840fa1f5b09c508894a61a465a10e9103599330999a889cc1e09a0052851da305f3cdf5b4ba0cf7fd4a2504ca52698f9ede89bfdd60fc134c712173e2d51cb5c45bf09efe26c5bbb01b0ceb1ff35b07eee835cba55eee2edd102a2d9b1a4f029f0480212d5fee0cd58bf7b99938928673c09066607b7b7925a6abb9f1ad45ab03e2f580d3375591237cbfaa87d5fda557c9476a47178edbde62263c8a533d9853ec66db68c15b0d924ecc0acb9f44ca8cec055d710f85122193cd6e7ad40a24da55fa4bb0ae9753003ea2d5089185a0faf0da35a4ce87a473f34ba54af7852a5552932c47c0735f1158ef9b20aa8674f483f404447d3ad68aa1c74c3eab6fe1aaec613a9826721a90169b64ae0b1481de7e3ec0e008dc0ac40c5c43f1f816719b3cb8b847583ae6a91acce0703bef94c6b8548101cef7a9ca5190ac26724dc555838f4f6ff13be2e7f8366dbe85e15cc6fcd75bdd27759a72a938f8a52f8bb1dc25bae2c46dbae212eeefa0d6e44bc5fcc7621e4c3c051cb3bcaa5036e6d343ae457ac70b78901047e21fecd6d400193ba2d7558f511d4eec51197e1135996372a405f26d294f825d286e684295a315b25b36af0d1a41843ebd3eef8a72a5deaa74d35bc0f316f207ab63e4652484ba37782177810a97ed60f7875fd5a85747626c905963d7b0e0eba69761bf2e17bf3cb075f1d012edad0152e869dcb0b886bfe11f0f594f67715899c2ccbf27f31965ffa360b881320bc1cc9bd192d9298bebfad9d19bac8e03268a473cc6c88d0f1d3fa3ab3151fc31e1cdc99bcbee3a0bb802167b0472798573012594818c1182872e2e2b772621841f0f0472f10edb1dad159bfe71c5aa0fd0a872ef0f07082ec149ed6c06c524a8a9c4d363d55864e4cafa00ee7762485cc7a5019c50a2c1b6488006706ef4815e9ff1621360f58e676eca158830bd5625e1e872c71708b163bb30210c02433b540ea737a81d664875285ffbd4a931291d3d856ee9df762474d93e35b58d73e09e501fdb84654a00abc46ba11deab872d8484c294004ecc50e966b6c0bc2f89109d616b1d49cf427194f9ae67504b5e3e0f7a5b6e148d93f71a4e0bad7778fb876ba2e18e630d3217e629dab25e426640d4e16bbd6fd195eea0a3b407338454fd738cc089e6dcaf32bfed12e5e9d3e27a41a476eb8bb9d1bae99e9868bb5bd6df9ca6d0a57587c14dec7b0915dc3df3919bf6328aff59aa45743f211a4d39de0a184a3889de7e299768721b035f4dc8e447d8af6e83720f4a5622334be0e392d0ae1c2eef7b93f7aca01cd77022be59ceb384e099e3e576551c42be6d998573d5819d6e7b8b5958858376a31aece76ba07097072a7d87bd01fdacf709e65f50e7c063e31b44714c5ec181405b14834be03573cba468e281bab601ba1ac748817115a6cfe736979fd5d1a7944867b1b723608e6f64c8925d71f9a16ca57e457e52952becbcde8572bd09179200e006678844368c309a60dc95fe225537078b648d0d867621bcb869bfd29699390b86f2582c31a0558543142304d29cf5312bb5a1ba59ab34c2e00dbc7b776d2753d809774ad51f244cf8d3419d5bf874631b19535f8fac1853454927e7a208f41cfa72a7353ec8fabcd03e59be7c42d36b2227085781685d5964711c0f379b201c08883614a80060036d0335b32f600a36776d88a93de5280d331fa4077cb0ee8a187f1c833cf3d585ca0b66942afe86282b86d343a680dcda016f7bfd5edc60823ac1a91a7fed1a77de8c70a8abb0b34a9a186455c439b87b1550aa4060d5f48bc35c2646c90ea94f808d4dc0125ff69d0a169e16fe94d8374535aa422d113779fc8030e0fb9856201b45916a4a9c1cad6a002445f624157441a78f82ad9d11085ba07020b70cd565da1a67ce9d9842b807c1789378ce4b72e8b5961e01a1504425d84be840e9a5ec7b2d461d9095d85e120a9c477905d24467dd80bdf5bbe369bd73686b555946df7fee2c558bbfeb0d7044bd39191f9f16d1982a5c3e09892796e7d8602154ef989edacc235949941c0769aa831cbdc9bb6aca2cf10466954c56295cf9e32061312037657173e286067e955b23acd3ff564e248f629aac4afe055f5d884595aa035cbba5bac105195006def2e14cfcabdb9aac021b1172b78abfa3b0a12e728ce4d615c0618ec5639a4b943c11ac34244319bdf3e984a3e45df32598e231b10ceabcf11d513a493a50f99f54ce9bc9e628cf47c60a6dcd6e7541a4fd1b9ae737648e0edbc5d2f85d6f165109795d4067caded387e56a4babb6d864b658a6ee2125c40a2d6b4efd26b60ad049bc780bdf2e87f05a147f22ad4c854914a5f2c841b357564f8db467692991c7b89d171f345078b14452945165139b7d76afccc9986c7faa1db5ef0c5a9580773094f72d311cc36b5c499ba3be8280f9bdd4389e6ca4fab1c2c8d98fc3a5fd0aed6dfc02e08e9ef88d526551ce2f7aea815796a633c41cc19478e2deca3c51a6fa20db968c69206a99acb476aba7ab51e673a8ae784803768c512118631a561c5181d31f83bd2bd1f428c39829af669c729ed0502a48fcb865d9f0d75d379b090c80c1d6a3ce8e3e4f424788a96dff3e445299b54f7d5146b90a7553b7bd21586ccbcb42a747421472225d08e3c7fda5eb093895681381769708f6b72fe13bdeac4d92fa12ca501f3c682eaa1421d6b725da04cabc7eb2da9b3981d2f47b7fefd848d3f224d229657256d71e00bbaa39ce031178a2d099c88144360a8ae7f92408a1bba64a15354525dd6064cd501b6007555ceb9db6ea27d2bb190642f932a530f1b4774944b260f352bc53b02e2b4890081c2a7e5484089884daad3da77dcc95b4d465a86923d6f35700d65012cc5f31c11266b2b7cb7d3e8908c816717c49d098205ffc73fcc68be40e527d3cb94504c4c17304607f62aad5790d8261ccef28081d06ec379ab137bf355175978eef3c8b76ac4864ba4fe508c9adc5737c8c715a9fef88a0022a6da4df267d0f35d1c7d2ddc8b74fcc50c4d444a6aa81e637113815129cceecdbf81bdc1fc2214422364394a424fac6a4c7b35998b86307a027580cc3f9c011db9f95068a20125142708f37127df5cab6c6475476e5b2f8538216b8c45d90e38af5c470a76e731bc3e6168b0335fa9899c22b0f2907938283f314769081c2932c8c57d7f67e94300c40ce3c4e4a26a75e902406e9e075006edda4c45475915f7c04ab10ac7fb7757a8bb17e5c953540e6c3bfac2e8a622d68160f1ad1c44f4122c25abe97cf944b6a74e226db9a1ef84efe046bc05d4b9371fafc85f2736c3611c7dd510fee91aaefbdc1df0f9d42f7714d1dbc4961a528058abb3f4dfe8827d66ab588bd881ee6968004e3c0909aa916656458c204d540b66d18041fe7a1f5b156c8a9012c5ead384a41b1a98aad92eb77956219c73d507a5a497b2797d3f83e9c23a243506cd1913920083f6d564bfb4ffd323a8eabb14937baea597967741bea3ad5fff06c31120b7dc6813ddd1801ab56120973c363237157fe3ee87c9b6399643518e02d1b87145c2c30fbe399c9337f1a68af055797b266445674a5abdc8b427f9244d44972048982c684a76709911beb8f8ab103bf7e1a154819552810f5181a1a780eea00906e93b1ce68d74a65ed12f1731133de06b9908f661ca49da577e44308bf0a20ed839ee0db909cc02a5d97ae317df2bab3c2d45d8bee81f59512d24fe7f871e292931e7ffbdf912d9debcb00928bafe692afa697049d00792a794ad2ccf433f07cfe026b0101d3090de47ca17b1fa560da14656f62a0b151b49889d4f474df2b2d79239646738db2154c2b5b1a86408e262ca7b4b772052e620abd84f096a45d00a5b0fcabc7b9bd7272add61ee36410be9de8397db0403f38f08ae4dc585573483ebd05b3f0ddf764ea2c2be2d61b1f17edaa4121a7b4c58e4ceecbd8ea536f2e5efb585b652ca288c236e98e61e20c99a0067378842e43aa0bb52b9a651ef538c12057ef315159a7e91d0bdfd4bf6793cbb1c4dff2e11a2ad827bf62e90673143c5c8e8e8c6d7d49c73df052b3b493bf98252c8bbb871e17c8d6ed804063cd23bf6e01e4549af93507facab0091ec7efe9937e44447228a25c7952fdaa7f0e409c633caf103a307d4a168e5c777536ad48ed718491f18603c4f583ad5cbe89895c38d989b81adc1302dcb5935b39c725eb649870463af2548486d3b1d70f034c05c7d5a6819877ecf49fddba6c92efb629969705425fcd9a4477e7cc0d9a30c52c9b868758aacfc82382eb9084170c3baba36c676d0ed4219204497ca2e29aa3e96915f26495429468f5b0918fe3ef843801358c57781cf4e888d73ff120374b10a111201eeb35e38c6c338a6c6be369c6d80dbf07351e4f324bb0aea3cc33c6baf5768d184c387220038771d46bf2db3c77890c388f1d950849369eb5c8c48775e444210e6e966a832a1353a54a296b7b0b5182bfc2db08f1e2e69d3dee47e03e217200c3ac785d9cddc7107de1f6593ed00227a6540d0b08df4f05981529e4605e8294d39a78fae0a3f484e8d878940969e9632cdc4531685cfbadd87abf301a9f3e8667054a73d9a369f7b03db5089b0b3bab53c474683b9faf91248011e4ad89bdf8158b738b6db722b7e356fe6ad324540af95ba4d69c79cb52ebce7246844b2c0d2a87bf6d2891f6c6f411784b5dc8876d9073bdfddc7f89f830ddc989e78c6239a2d0e540acfc0a22c8107f1a0e4388189b6f42ca0381f3f97a6a617cd64357ef831125dd81f481c8b3585dd66d358a8f48d5a1cc365b9a009a62d13e07e766dcda0641c20c8fec8d79dde8523a28d659c6d7a58cc21106ae41ed436346abc5caab3da0446fd8892a21741d3a78b3e5bf21c4e1b5f799c1a39a75a0b0eada2ac71ab28bee52a0a26bb8ac2c4aa4550d54de880bb8b174fcf5614f414312397ace89ee014aebe1fae4a7d4f0b8140207763e9997f2af83fa995cb83ece68f79c2723ac1ebe16bb9c65cf65b4a4047372ccbac6beca25510ac286875a31066ea02c7b0d7d93bb05cae55bc0dec238a1b31e1754298ca2a5a4b89094e7c04c0fb8d0d227d26a691c60b4dd9ed9982e89a08b45a628bcdb8705f313baee62bf203d1e4ed3ab6ac9ea19be555c4fa22db35821927bdd0a217fdab0244acce9fc2ca558275895f157b9df1a5abb25857471417123973395cfdfd2909214472acc9ebb7fdc1f50ebc3f18e50c83b9372926c9f2e6d7050f8f83a9b7df4f824264cfa50aa239c6a9745f9590bba3ce67abc223e70f9eec1af4a54298d8bd3b6aab9a9d16e7b9fbada051ebd5cc19edad61f42cffd74be2abd09d0ba316dde9158282d7978a30b6fd1c3141f8ed31e68df8aa9ba0d4c0bb92f6db963da8b5eb33b6337cbe1cacc6951894d25df906a4bffdad81cbebc5e9e6b9a877de9c000ec5b3b750e708eefab1d7686a5f22139669456e4563f2cc2f5b2a688d1026dfc8a2ba5b9185cdec3d9740392c7336a4382811e0a0b629a6c82c916ac6655915e002db266ba07146186172f0d48ad3a1a6aa31a001dcaea99fe70b46f6ec3a59e113d66a685d067014799c669de8197f8bf08fd4221cc1894fb1dad7f1dd8ec1d29596afa87173d30d185756d7074b2832858899c243309a2c887a90600ce54c8aed576e9a816bfb6e5f1a6d37c8685230c6bd77ed19c5d268584d76965ee48962c57e506d1ae92103db06dddebdaa3381b3d427c8a20c0a4d01a2cb050d51db2bdc25ca8a9e7f809eb0c74bc1c82aaeb47fa3e9cd0a9aa1d8ae72ff81ecaf8b43d97b01f4872454ec1eea66f85590c5903dfe7d01822507cd1943d0e03aa29ab940f8e40c6d9f1a8298237613a4f6c909735df124cbe03ec049ab38d01d0b0a1b427e520aefc4a8f649607f6a718f524a25796358167b04617f06ee51e6b203de0afecb4dd8667bddfef0d01b1079e384c476e4c7c0ae45267e05850b465ae95abb985aa6ee867ffb55521f1b077e3a8d4b99d43c664fee2868c26a1d324cda008d3783e7e57baead162243e188849fbdb0bd57942d4029b92c607e69adfef4258be39346bcbbd5152db35b89aab2d2fa410eef7c9cd71b5ea126a95d94f5bca9f3691c9632fdfd0e1e57d2c40240fc24d7287127eb8d1f4577762158cd8b8a8534285b496c2de221a16ecefb3014b1de06174ac3f700abd9063c6233e67cfd719e29ac710eb1a10f926d3ad8fd04243229dd239032e56abdb9fd255ac800b51a95eb640a880d3aea6742b8678c2a09b0ae867b32e849d40525ef0fa7ebb535c0932001ca8b95d8541046cc51f7c93f1100b417dbbcbbfaba4a0d747473bee7a2c6ee3bc7d250d0886e70d49aa62561a4b75a3b87eca5c7fd5ee675aff8eb0fcc15b274c13ce4c34652f8603fbdbab0a41af8a899f709ef9f03d841eb946f27631c9e105b05f253f86e8cc52e1dab0df0d8cc08888478499c3c68b8560f18e3ab37d9529c197ee2373fe487a08b01304922be15904adbfd9adeb3c7d37dfbe267b4d43216ef567e4d14c94a8d9b2d08e825eb1420fc1c0881e93b7ee786227bb6b846d12f1a7e61269bcca01ae4e3fb303f3984c6bbae58e30604aeea705f6fef3e30d4b552f7779d1beb515f4e2ec45b6922971912a868190aa8706147a7456c262447cd05c9ac5adfb10b58ecad704105335cd56d66393ad866d5602ad3f389a8307cc1aaba382cd9843058552d4c4baa8085699620ed6428e1420dbb861665740fa4c71ad5e61416ca52a63aa0ea6c719ed5a71377c2890612cf9c545b1f6fecface28abfdb7ca493115e9b0b00d1c70e15f1310b443129c45c0a9e2baaf04b07b70973255b1141ae9ac6d10115b7c7edeac0844bb65b42095f247fdc688aa219feb98782bb51ba7039271d83127ded62455ef571324ea803f6f43a71cc4990b4f22bab82d6ed8c04e87cd10be25bd4330b6f3dde54986274065d8bdeda899dc6ab21c2779b41b97c61b5fa3c94fdc472776f15685b02e87fd7f86811a8df65952a37e9c224dc58ca5716701f7a9d1efc93bf30124e6f456bb20426452569cb4b37da7c56ab781fa6f52c8ae7d33706ca1e95e2dc65721c7a4c9b6cf4326a8ca4f9a0a82a058165eb0c98da816bd1b1fd2bd66e2dc2550c26963b586205044570c2acb771b568e42ea3819044e1d1c2f551c2574f46493b8e8f7fcd0d183d509a1a555b3e00726fe5c6b91495ee0e8967adf129a56c4dfd547011c4124f8926286c34ac923d68ca7ce4c8a902990868ee97998d465fc553109ca69b30633c69c7a25a76c0b0b1df712a26228872df7a8f8374a0cfbaaadee3736caf7311bedbaedb03770020bf1e40b51418f6c7e711d485ceecb70cb36ca8aa700becb7065c37b1ace5a1b14b80d02e85b04b8ec79bb76b97082b63b1814054e8cf615e5fa09885c6c26a1ccb2374f5c71b96201aaccfaf21dc92e57770490b1063c6b7f7c21570e1115628cacfbfd90bc29ef5625b4b9d684c8fcc39909ba8512c0b9eeee9e87b640665176c617008278ffeb97488e453092ee72eb474bdb7bd99ef7defe0a1ee535543616d1fdb35a588acb0321ef7a5558f98a63610fb5fd7483acc883d7761ac47c4c22f44d1ef2640a7e0502885a4521a941c59809552709bb263753eae8073f0fb8f8a54ac9a2f87119d6a903d9270ba814c1324146eecc4214da4287949591e9c22412540e181ab4f035d21986fa76b0d14b15cfb34a20b54ac9c363b569fabcf839e0fb074aec2e046b645cf5374b13b5c6511ee493263b196f945bda90a014056810ff0e8703d72a319484039a3e9e6f58305816a503c58e06cb4ddb312f09db52950f07315fa16af6488193252cebedb860b08d7b14628ade1e26d7e67c862c40394e8ef3c26142d20a451f295c27eef315287d6cdc4bd3eb41d867eddf846c29f79652ca94529201e106ac06ad06d656d7b60a5c2ce079d09bd4a072f80857e2dfe89e7a866df8a4642f288078fde23b6b08ab767584b3a9f079c5cd9c60ceeb76d8cf65845e7dca9be253de149ff2a6340d35536a5a1be20867d31a122e4d71a5e7d2ddddd7d168b59db45320ad77afe6302e3142329211fa2bcd7c46ca81add474c0ddf0e9c765694b03287c4be096c06484fefa87a74fcea7b4b2bbb553dfec0fe9e73464d6fda9025b910bf3b8b460bab8b8f8836d59daf27c4f7a8542179d560ac6e72d237cefaa0442e2c3ca4c871c580a4b49c00d527c80e048c1712543c8da9f0167d39a105c02424a50f4e82e2b77555b25ebb1ea2e28be67a420fab1b47d706a66b21cd508c9a892113e7a3db7daca48988cf0f9156aaf29f9563242ab535b855caac845f2cb1bd33df692ea4e472eeec7a8ba9ad2cc67a41cd80a2b714b2aad826205754b507997a8fcce75a072a96e0bb43c2c4f9667081cd5b9e7e26af07735663cec0005027bf5d0356609b8c147871c24101c1c1b826c85190d69bc66a949c00747c3af2403cec635215e2e20801688c4ebd80abd518b0b0e16924b8e1c2b1b33f7e3bdbb8ca216bf8bc4ef6789d563758d164475dd0ff72e75c2c45099aa99592a38958ed165e4c868d4c212a383aed41c59753338b2aa324c4a8de76998af583574897474a07246cab1025403d4ad006c79a4dc05e2010282a16e0bc305dc0cbf114e92485511ac8f09748c30c4aa5153f2c4516151c8b930ab4bdde1123987101eb45efbdbe7a0830e3ae8a07bce5b56d65c3a93390d563a17a1bfe7b0d93989ed76771b21ca6a7783ac49af90c839ac64814a622e74c5958b7a1a562563954da1f05c57a5ef1999a3ad3a279d967327281bff9a0d7777df753424d27befbdf7de730c3c2b9e16733ab669e68fddd9c6a3f21bd8fe5fc130451606d657bbf2aff3f60b783cca27dba47d94667034fcf04ab2b5a60646490047c35792ad38281c97f9b7c2704fa257215e84a1a3429dbe993b6e865f4a0cd37928c08ee0c58e4e6b222855c0f673381a12e575d343aebd6ad228767476749ee09b19c5ce3b61bee369509e0a0b975574f76aca126e875cab292ebbdbfb1d4ee80e1d3ae4d1808f54b8ebd300746d7777dd98527900ebccada8ce5fc7e0c0f0416e7f311b61b3b3b5a8c0812b84bb17ac2f061615704208a1c88a18e4402757c0d6ad8b1e6aedbdd86e07dbe069e69c98f0cd5462e634019b394646558ac350d58f63e10b2687ea5dd5814f268b5fb6d42351664c90c031555a7c09e55799953141429ae4e7e098aa9feeaf6147ad6271b3bae08cb0df255562aa621292ef8543ac1410d5f72e4b126b6b475e847f81f818cc46573b7b03db77ce3106cbedef257c7789056cbfddddfded74550318dda2f4adf874526b5251ce57550e56a59494523a85a82d4b2dfeb45ed41c4208330764b5dd0a922b2fe6834bec699e4ef3c47bda9c8e33ba8cae14a5b05625050749a4efe12b74e3b1bb8771da81f2acf023540773ac94e5c4f2e112bff50357b29cf48df5e3c33616d00f9c8d6506cd81c9fcca7a24a469bef5d337561420b6b1a898e16c2c375c897fb59fba1d7033fc56b64bb819f8ad287d53d3337bb2dc70367b448d15659958120c609efa6696c0b92596a873050f053b737a869f094e4eec896de6894b27c0760977339f7f3b30e11ab135f9a2d0b42af99790a76debbcc11c1d754f8fd9578aa898a78d9a8847b671aa24fbc9fae2b7cd91b3bbdbdf7bcfddddffb9bbff4bf5f71ebbfb3bc7515be31f2e3d312ad83f46e98c1a3570d8c0515b7b415c62e389d21baff31375b8c44f489d20d7561c0d630fb54365063b6e39f452bd8744a9430e3b3f3b51f04d3fa15305a34ce28152e4eceeeeaeb7e664b08ee6a5f242b8bb6f035348efa154cb3f9de37ec06f6c0cd219af06f7101cf5690fe80cc8048e12359049e98d67e3a951b951282e3113dea8077415e1dd5d1985258a26eea52ee926e2a86e860b6c834d2a37814ef04d338152a351a44a270af07fc7c3fa77eb6ed9eb4aae69156048ba3bad02b6f53d57e2520b173b752b5567fd387d0fc228ab28839046d560547e28e0f679d73301bc9e139de212bf13606b5432aed13c83e8838eb28a520c2955950dead4eebebf6f10a4e24054afa4921977aeaaaa4a0aad6dac958c5288c28ac843856d5e28102eb14c816d38953b87a9548f843459f0c70626c195d8c70642e1123f6cc3cdf05719ace266e0873e50d80606712909ce064ec135900f6cc3750f2a77aab57037918965267e509989c844e56f2648d4989c9b618b480c801f02f54d1bc1cd7015279230881f0255e6f71452698ba5be1f3037f37e5b5618c436ec4aef1962e027a4d6c32aeea60d775382821443ae6d2cc263ad34794141a7806de7d4ad532f15b2c8a023cf17bdfd5073edfdef3d290f6e77773750cb130cb643b1a4569843199d4cc39afe013d022ca4b6756989b026331326e16fbb496de3bafbde5b74328fa5d0898991990c6f90d536f9cf0931f55391b6b6bda5716beea3760624e6df881453dfbf9b203ad5872818bbb63eb093282c73b05116959f9953110a51409111051419329b0f9e5495559b53b3befac9046cabe51bdd567e59a5ea8a112b53c07e803c5209ecc7fd88a99087c80c758d7890a7a6ae06931a95816d2f9c52f585986afd381ab67e60523e78aaccf73a45ab6d23ba21a9f2a9923a3722ea7cb73584fefa79a1816d5b7f1855f94fce19daddddddddadd61b55996d3bc4bfdee5d660cda921a195c6a04e0dc648d7f95da7f6c3a81e596d1b6d49ba4a50b53424efa76e1258c1448ee6852e3a2d094847f35e02d5caf01c13e91a5f9f2a13395511cbea576a706015fdfcd9046cab4814d433fc382dda8653c3a26d352b2cb5adb2344c5b8ad115cac2a3d1b7b47c0bcb8ab6494cbb98a9f01bccc606f16f90a5559ad47e7e7e76dbbab19418c9b99f13a7ce13aa67f8a524912a6d51fb95d29f9ae3d2d4980a37c36f45e527ecc58851a4c7f19b7c61d4a3481a0e291f07f5a985e915a6a301cb91aa52c73e9c1aa5f32d2b0ab695887cf87d115907df254be5b77e2f21568e54e5df5856d8c04ceea19522a2a32e0d6af51b7cf25e4c5d0d078fa3f900b6d1a0202b8bbaed5e436aea6aced13c1c34a8f2478d6a3a805e1993bfb91b0123de649558950edd8f24f2b7fa16eb47f35d9edf723f92d07ff991e47a1ca127893e07f62d54df422673903288237b2f99bb8c326e592cc34219cdacaccaa4aceed1e136f2a91bacfcd0fd48525dba1f49aa57b3fa5fcf6fd1e79ff3f969a8fa5bcf7f89aa7ff5fc21acbac8fd48e21c4d84a26c1d0d847f65ed68e0d3ccb397414703bfcaa2a3812fb398558ec6e5d8d7c6915165b80e67a5adc8b2220a5d5483306a1b1224f53d5c4cf3c7b423579c6a0e4dac7022c6366a22dcee7ac89d2340f519aacf545f59c609695b4da944e5052a7ca8a43a5e5909248229d22e54fb6db861ddd6b0b5dfb435c0efb7e106af39cc17e5b81fee49eddfa1dfca64329ab98d37c020901cee26c8f53d4080bba135cefda076d436599d46175e68603768a32660ef49706570ad9fb2cdd6b0a42e31f9bbbbe8615153dbc59f0e3a2737c6df81e4063e54c72a7437f29db6c18f3083f0dff74cbb8f9a7c323e24a4ea5cdbc818637c323af750739b10ed560a2be51cb10dd311750d6b86ab21a1d59d0c73e1ce9d736de49c73cedd9d732eca6c9f4e9d36ea517fdce0bb6e52f4b8f13968b273f7f760949665cdeb9231d8d5ddcccccc5d843945ddddddfca3c69c226ca973cc8e1dd73c87d2a90ee6dc3a29a9c458a23812bdf6e914ceadc3569c5b9763850ad331af4c004b1918899999d94a49d9853c4e589d3945b30968601b7da16d496566cc394706760686b19881b14c012f214f604e087f6c04c41d8ddcb76fd9578e301d4f919312339d107f300249a0cabd35e925c439ec72ed9c0bb90f8958cac0f6451bc9b96e8c4b8eb4d2d29cb570e69c6b19895c2e21f3c5e5e5e565d4c2f2f2b282bdbcbc885e42d7cbcb0b7d62fa73e7ce9d3b7777ce9db34c8139afa1ef4187d23f469628d8864949e54e4559a6c058a2b04ce12c53384b199873ee17768d204f75cfe2040c233dcb1498fb736c6585c539e79cf3e7ee588e98dccdb284d53ae045133fb33a2f9ad862778268a28aaece8b2678aaf3a2099d5a9d174da4a05ad579d1c40818a0839c275420dbac9493ba512456ca2d99991a18f579c284cf13545d1c202f4830861724f882045a54d6b440238a4a80eab440235527bf029e06057c205c6adf8014fef03983a1c18def2ff563fd248c8c9d9508bfbb20dd2998ceb9dd023c5f33e07b2b376612c6dd8dbb0d332939988e872ac6e7efbd2dbe7f7519815fbdbc8ac4afb4ad5d46f7f032721511021d1e49a3c1780ec2eaac775de97bf73ef47ed9fd98ef439ac301f59ebf7765349b19bba3795fd55761bdb65be0dbee52c6f85a73ecfeedeeeeaed1290cf184784918e2e1e0004989b323e81f64ea917ecaa5452223ab580616df57e71b37c921b6aee6da0f32156a47fc9f46b9f481c90f7fffe11b52694ea2413a4251411e4cdcbc84a2aa34e7192741eefe99cd044cfbc14ac9dd004b8fbbbb3b7753c9c6ab56726ce8ef391bcc6f096cdfebb640036ce58fd819747fefeea3510b4e532ab8bb3b8e7b4d753ddeef3dca86fb4a0a463f98e3828911f8d44d92625e06faefc2c8d230c2f8413a66526631c6766bba532ef97b8f5ed46dfe9e83f5c5ba69a03e0d7334d64e6d5a549a2a9884441dcabf0094527e8432340a758b442291086651c20fc1985597bc74d878e1b068c1a205b6ef926c15ef2cbf6d1555549ebfb3352cc0c9f09e87505fdd76678bbad1276414df552675703bb8d2fb1c1c8d6b8bc556614515ac433780a24a462f99079e61ba04ec693045e2bfa8d9b0cbc37c20e8db584a88601bb94c80500d0807a1cf577c906a416ce0928c4ab8c49b1303882cfaa5c43012e9bf54aaa92ac7ee0e53448329b2f5c87b251e08323020241ada72e9e3654fca02dbdf48a8a9c4966d9466245e29428693b9234bc3b49119d8266576847fe32ec318612bdc0d00ab198db2187853c46a5bbf354283c4259662ab8f0f2b082574acce11c9b26c8e581fbfb2aa7d9790aa8a9a7b254c9704735b60f14695a96e0b2ca0d4cdb677a5524ded76a46fe70f7034fd4a68cb844bdd2ec5a4f6ecf7dc907985582343bcea624c27b3c9914371368f8ce5018604844badc99f0b298dbbebc63a26b420e1ee46b661b7e06ebf6602141b18577aeb6c48ee3d97d5b983e95fe2eed79d0c97b65bdb96876a9b10431a9e1ecacdf8cfac49f5a743f2a74475772aaaffe698c0e3681c15b597f378aa3b0fb0fe0d9ea44c5d18a4a106f472aa6b30079eb4c0961a613a1a300c73a7fd52092ea3f30aa3e659a07424ad49295b313c333552129873c9b2acf767775c65a42a8fb8d37f2f2603014665a8c941d550ebe9d4366b6bfb840e77d4eabb54a9cb18e9725116ad62c5438d6e47953b80558c9514e91ea594525652a4c8e8342781f46dac86ae50e80c0c26f44b6ae8f789b809b1b6bec62c08af9b8322b796da2fe52f8c11be57a8c1c05f527758791a3672373cf04cb3e143e68c2771bb95a7814bbde21ae51293540d8988bf921a8968d2c664259e592a638c91542d524cbc992faf808d5c74256224a2ca9f726b7c57a2ae4268397418477566471c4af92ea52b5573e98fbd8c74954a6a45448dbf915e0a70cd9d9c2affc484b0c954ec47bbbbd8c79f31a365e05474df5f3d887645db375ca68a32a0d1a83efe8d44229148a438c2481a102048648cc43859c38cfa3418238e09015b2069605b33d9960d06f280a0de68e7b43ed7f60dc756f2c0654f88ba4a6a44027683c75f24a42a61a266e429f198ba95984b5cdaafaaaaaaaae75e6f1c6afe48483c0f08d6c3af2cf7835eee87e8e187dc0fece18bdc8f95878fb91f2c0f7fc5fd6879f82c5b831c55b7046c2b84dc8ee6fde58ee67de8c1e868deafb0b4682b8ee63d3f4bb692891c4d3f9685b2cbd1f48732ea68faaf6c3a9a7e9a595925595686eea52cdb6bcc195fbe1861c6382411d5f7d4fd9071d70af4b7f9710c0ce6fa25eea1e3baa2f9e895c114b93ef45728946d17115769c649b6ca10aed5bbcaf01202bf0b1e44517354d7050f5275524ab37e2be3cad7902bdb88b87a0409fff5ef2fed07fea797107865cefaeb22e29a84d97c2b08215ca77681035475d5852cf8ab1db1349822fcde7a1a2d2b9b5c6955a51a51e5af7ccbfde0ba2ea7c6d6bb4c3a1a8a5dd7422a4c5e72aaef976451fd830872e46930450c50fd0d50fd9db75da8fc417c75da013c54f983c0aad37654e732aeaf4ae56c2bc20821ecfa3dc956f12330460c50f983a852a7d38d53260cfcd772026c5fb6b583c88e2ab5243bf61a82d5241b34e46b9205aaf26365c4949b842ff45ca480f7d67756bd95b9b5d785c33b40759791f7db01aad4921ca0ca9f18edb5b83d4401ae4340cd083c02132a153e8c11f8efe1a600f8d5b66d95ba55e08b6ad45a545d4b22aabb564491e2547839695441ca0f30caa5294176f0458d0f5d6a1b7c49c0fc8f40f831c6b8c5f8b2aab22dbe8c10461c6015e716505a66e66ef7f758a680314a8a61efbdf7dea3ee1066d6a474a965cd397dcee6b973a53ee968dc7bafbe6902e71c330ae63277333373dc01c6fd6e0c0d6688acee9da3dc871eac12ee0ada4389800520d1841a14d6d74c0358ef3e48df4ccd079ed9df651fb8c0360765877650eafe34edcf59495969a493c3a88ff82e8bcf393e58816dd4693e706ab69a8df249fb552561dc5c8a9f3047ee9ccb5833a2994b753d46a6ba6b1bfcfe2b8687082c4b4a392d522329556eefccdb9b29f7934d225faacab6c773915cf074ac5f54df84b4b7d333fcefa12a3f272e70364f07ce09efd3016b9be49ff01f4fcbd7fdf2f91141b0bed2b6f73cb3f0dfc8d7f9ba21eb146d562af5be0f7f3ff6af95f2b7d77b2d37094f0404487d33b0fc36d392a3ee5e74fe868deabaf62d1a8bb6f2a277ec4299ab9784fd6fcb51e1c70c0990de5e5f0115f59baec45ce25d6d7b19fdca46f4fbbc72972babe2e97e583374611616baa625faea077ff5a1a73fe52584ce2bab9bed5b6faf21ef63cc908ca0866464440026f8a209b55fb4100d2030282e84cf043acae3b1800e9a08414453b1dc7362e0a7eebb02e317d9d6ce6e70cd86246c01af95eeeeaa21faa4bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbdb8539e7b464da7bbcab1e6fd9e3dde3dde3dde3dde3ddb36365656565a5478fb7ecf1eef1eef1eef1eef1eef9979797971eed3ddeb1c7bbc7bba707080808c8811aa80706062646870e175cd8b1e333cfb2e6cdfa851eef1eef1eef1eef9e1d3b3ecb348d070f991edea347f3f6e8177a9d78f778f7683c64647af478018692974acd5bea177abc7bbc7bba5f68eff1eee9f1420fb67f55504c22d9aec01d86fab1ea2f080781422720481a93a5aaae6fe6bc2c2b93d55956acecaa73349291147b69b98c1c198d58565ca8cb1584107f49ea9bf9ee49bf4148b7ec4543d79097972b0821d6471c4f42085f045fdcda980d3708911812b07da10d5d8e6dfc2251c73617843f570ba693d9f607fbc128a1acac499dd2e6a54116bd4222cc31ac79b1a010b6c2d292f2d9e20b9f94183fa9202a6cbc4125e83179a720da727261a244e57fc9c14142e5f01c399a37c7c949155838e1d922c5d351fa8c56a3a3341b1dd440a8264c38d104f584ce16fc45e5ef207cf31f2eb1a75a52d8e62c433be85fd775d113ebf08e139fa094cf0f14a0e639f1cfe9743a9d180a5094202a938787878787e7743a9d4ea7aca5a5a5058651905c2ad8899453e226299f1f2840a9542a954aa15028140ad5403cacc3c3c3c3c3c33b3cec8453ec63792a954aa55028140ac5c3c3c3c3c3d392c2606849adcffe40014aa552a9140a8542a1500d140444854f9cc3a82a954aa55229140a8542a11aa881801a88870e1d3a5cd8b1e33fcb341ece8347f3f26059946cb23abbb33c3da452a9542a854aa15028146a7d7e160a5094542a954aa55028140a8592c9341e3c64647af4780106870186e6856145278a0bf2a0d4a252a9542ad564757687679da452a994a77ac8f478e105186028956662f0186268de18b01a89a393d2f1d1713f3a1ed443a924a36041a43fe5903c287a10f4a0e741ed41ee412fbcb059e9895214957f666786c6701189816eb6bd2a2a3f002e225b1f8f0ff7e1a3797d38ed892a0f11604fa7674abf6113677329e97e7edecfd3793a4fe7fd4c1842d539e79cbb5ab2285dfcc3362e0d4f110883e7746fef36facd5d2973346af1edeeeed66477773bb7bbdbed42a82ac6232e23ab659c54cadd20a4412f57c9188a0d85ee119251bfd72d869432e67a752e475cb8fbf953c9f1dc01197c5e031c1b8cb0b303ac5a819b006b273a0b5994a00ac6d57591451375c3301f3cb324df20953727b3956a4e5517592451192361a4eabae041944aabeb82076360efc9947dc3fd8e062f489996983a5b629a8c4413530b6e90639abe7345ca341f169a982654638d1c8ea28920d394558c00c849453b5b1b3801324d4b8a20d39cb4b395c11341a64977061bf8b98ca062c7d4590094c022c83445b4b335038a11d0c034311238e959c215291367306698260bed6c5fc0819369a138c3c7b43058029069bad0ce36d5c68e69bed0ce568a279c4c13c70d82a0c489d4c2c93461781dcc175f5c7132cd1c36704308a91c3030609860c03899660caf8bf1620c25d408da42c7345ba8e209377c60c068e13901b31f938429268993a933989369eae0753a3ce42e6d303175b65a3c59c2144ea609b357d0b902d0139dc1e8d03fa58029e2cea8fbee8cba1a8c08eafec9e4217f9c107cd18394696e0fa48c11f49c70adb3ad011486f063e20c060cd3d4413bdb228440c7345da09ded13537c4c7307edec4d799232cde7541646ec641b0233bc7052534567d815ae10c5c4194c0c4c9307edac881d0309275311ae0b2a3f3ba67ece8a8849c2d4548687963d0f1e3c78f0e8e16a429c39d3922d827986e0a786d26a13a2764bedc1c0e2d74a4af954fe64323cc36f65a49ee10783849a3132beea9d8e4623248c82fc40aa47aabf814b6b031187990d7b830d6cc3123e18a8c5d46f29318c44aabcda6e9822befd40aa47fa97547e2ead93793273f449299d9c01a54c44853ec32dc487cc017c60ee3c53c3251f491ca0f21fc1cc39e8f01e902034ecdbb710e001b3e98ed137181a80dc50b7d5a147153ae6eea30ab56dd1681819189c21bc1e5920cfbd33ffa80de1d56947fcbd6b6484e0cebca1e3645b0d892506221f4829dfca16b3a65f3d847289a558fafedee7ec19b12ab39839a7dd352ae837e0dc9f17119ced079c7a64716a7cfa547bd790d5e4c34b48a4d90f3875bba1fa76691b4ebddedfa2a994864a7f1b55ea52a98e4a7b548ab9506dbb7ebe4b36caf65bb27d966cf745fb216db5ed7ab71e86ca3fdf8543ac52a5ca1af5c19f99574bfe80539f7604e397842f5018d80e574021756f1037a33bc8efc003f7e03b5c01e5793f929362f4e8de6190b290b3c36f3dec90c6936298758030473cdd0c8b0b283f8e8b30a2e0028a12cc84f57e0909b28285f6f5bed741e8bb0bc6c8db940f979889fb219fb9061e5606feeaa9e8350fbb3fb56dc65ed9c7f6572ed5168bf941da22d5986d529471a0f256614515d7bbe1ebba4831104106440002b6395c62d9c2836d5b05e74c6bba2f7ec4601b981984f26322c0fcfdda14979803ae86dd5919f81906a36ca8242e1994d8a91901000000025315000020100a078442a1583c0f5445ce1d14000c7c8c3e6c5a3a9747a328486114858c41cc18048090010181999101090510517000c63bf1835ea19db37bbf953e049dc07965895c641345debe40c9cd11e770c9a0b6a8e9fe05fd6d169f540a012c3d3ad560efe6d6586f334ddc2c7723bdcd64ea36b9ccb13273e30dc135899d4c666ecb3d8ba599ab6e92db1c2b33cf6e05f72456329fb929772d96669eba4d6e73accc3cbb115c93585166169fb9da3a0c41515b91abe469a67e03c5bf388246330af05e774d3d33c63ece837b85bb501ab11af7e0b6f28e14c618c77b047c1aac79805a341aff8a46fa4997e902344a2df4686a6c7205ad122b7a5a35325d804621951efd5d5407d53f437c2c42ec348c006f2bef4661c6729c1d14061dd74940b64148000164e140388748b4d9443f8b3adbf14bada4b651ab9e7bd010a4420f971561c5e5ca6156b8c46f414f9b46a65b502abdd1a4ad81c10da00c1a1a57b39da061a32fe39665d30c35090322e63afb4befddeaef84419b0f0b9d14a5452e4b043ed96d9dbb284cb17e8cf4000ed919e491d638b2d607953d758f8ace115f37933c9a450e24d1b1428efc0b3d5a359a5c4157a4df525fb25d51fc59cb1a9dee6f04076f54cba787c6a049b6685276bf6b2f565807824d9b671d6c22f48626fd1c0cd5932e5da6f66bcd82c5570ac431680f47f5c91e909bad0d38a123265bc478eef80d9c101dcc52d737d32c3fd8c748004dbec97eb28ac8a2ae9f611d10366230cfd8d9ee53d6378fb77abe557405b7a15f8ebc01c19cedb01675cfa9ce3fbba4aa25ae74ea28f96e0649cebd604aa651b1fe196d225116b27ee870bfda58149bc0dea0bbd13a88c37ce011344806af88826f3caadb1ea37a3b87aa42020ed2cfe6fc8cacfead6b69d81c0cf5ee43e2c563d1355d3e830b86f0f7a933c8d4c8ad614c1b2ff4a6df5b27b59a654300996fcde3e588d2b0981e3e88533632c801f254bf66744e31394d54ce33481577181b7bd2ec60a186691faa809907b9da190b9181a2fb3dc8a732f6c1e77ab8eaa4b44878c0ce49738eb263341bfa42986674a252d9ec77d9bffd2ce030783d7de1361a5541d887e2ed67f525a7f781d36ae615971c114af0369dd07528a5365477ac0010296b5d1ef8fe80155bbcaf1df5ca7b4207a96ac00b10b082b05960b795b1d0ed373ae1b53a5c5f88036b9cc58049737aaecfbf453529ebc39c5eb967db7e6091b2e5f3c7a2350bfe64567fdcbd15da652b63a3647f8ad6540e519b7f7a995f24762ad81daf00b666fe585453c9556d3a6f2abf902fe5ad32e42e65cb9fc5d42ccc27acbdb913acfef93a9f5d2be204a1a49678f19cd6d25e826e5108106b9a248f2386ab285c751667ee795b05fb4d73f8f34e26571623f685b4e85ba9c4b0779f493c2aa0c8e61045f68ac9265ae066cb8b42f16059957ad538a215be3e5be3b01c97b40cdb92eb059b7589a644f060d273ababcaef6556336a850dedade3944b944963ca4664f5c70f40667d6320501097ee14915eff80b89aa42df3c86fcb93a5ef73a2d372d34b9ff5de570a26e5c49e6e8f7463a7d41404a5a7eebd639ab3c832eda8bcba5737737418be5a39013288a7923271aeaac92c67ce90ebbfd24356cb21200073aa658f65ff01a194f70d000fccffcf50f8dcc7c12036e8001c577b4fc6efda53f8e658f12d5bd1420bd44a77d3c78339bd30bcbb0d81b2e39dff3e3b1a30f9ae717d840853e9751f28fe2e78dbd50bc3facdbb7162993d1dbd1add7bf02b90d7ce448ecc5577a733d5f064cb3537e440ab8c0d52ce3aebec199d3cb09f5dfb6c2e2831091318c1b76c6300c3ca178d433b321e82c0f0c353f82d855b94bde096a61eeaad6a059f54f4e3b7df9b0e34eb93d4bdf11aed3c40923be3f23151e6d3ecb62d14b246c07cc9acafee94c85c286b48618bae22fa803813d2a9931c076542aa0c11c92efbd75268ecc28059ce5c53d62458acb09b95ec98e9e4ba5e3720f664a6d51190823d5a7dd34c0d1eb56fcff87e5fd87429f432c98a5be5872faff0d8d934d1cc2be49a6e07dea35fdeea8ec8f0d24e71b16cfc2b4e91861df39139d828a6c0e9cdb172b36f899b4ab72b287dea7030911bc64d66ba5dac2b8e0ae3d5bce3a79066690857b1b34dad381ce7e27cf559d3e9a5cd6cfeb2224466ba33bcace0023e1506998b000c3831a896e511180c08a8ffffd10597bd3fc4b67ff4647bedda51d98c997e73eac9539e4e4a5db855a9375b67e140c5f9f7a1f3c109ee8dcbc7c49a9abe6340dbe1cfa7dd969af7819904d0f982cbdbe2738b15e497c06a8edc16d50f7197b35b270f5439b8f9c087e66abed2eb3a4be677892f046230171d54cc4046c83cbbbf9f1bd9b1f1f3a953e7f47e59130bc852a376ac68ec4da668bd84803bcd7f52b4dc48b90d914d272125a20d4186c8ec47a7f8fdadea43444d427a54eb91897cacc147f0bc16376e8f8de66d62260175bfecf29677c2686c849337bab55ccfd587b989a735e3b29a96c1d938c52d8ba31804299c7be3799909cbf48b2fb77c0460dbfac48664e9c72f01a66ea683680c0f464904e21ac9859fa2ccea66b685a29ed492b8eac978d81559d6ee04d2f2fbaf10de0afc85488ea06668a5026dc33a0404ab43ce7b7111c8bb36704192e09b5c8d3d10f20ab6ca75a92d7ad4f7bb2ef9395def43171069d33a4c6653f3bb15223889a0de9b172f5a46b6a2312f90d47501b7ff030591c7e0eab172ad312800bc45a795088bb8ef850e051f3e02078409ddff06a7e60c10b5fa44e86f5edbef1c93c7267b42978d453811eb2f2a3b15fb91e95b4142edf443680e6a6776651fb7b12712424f9da0c9b0c18ca50aa3fc13251f23496f3f1f870b5467536b20c13ce39965f40112daf3dc2cd48efdd4089c4117fb0cc31e47abd7b498c58291eccaaafa6b6e4b780e1fe9dd216a5ed05eab2d3d8c198831d2128ffd402b5ac979e4f1ac27c5699e33b223938c5b80310e28d44ed3c659d0196a4ded201345cc0d314e40a1b7e1dbc6b92927f290f069ce9e7001db6e246d2b065695d924cdc194be4c21f74ea584e851b090407571480f87cf3cb08a70dd72b5d251cdbf82195511718690d0c35950542c3337641c6ff0048e572d487d6412334bb0e1ecaec244124d74b64cb6e914c4bea2719bebfa551fefb936cf4802b514520fee78c13bdad3694b43de8ce28bff7dd9e4e77bfe8b9b0d228119bdca9e6161fe2d9be582f6762a7bf5819d0daf04f4aaf948b4f758ab4d5aa9f40b21133ed899cf7ae6071dd29b1d9e3e160e585526ba093bf06a81ff685412cb21d19104abfd90af43f5c104b43b839713300837409084a8966ec2a5391a08bdd8a3579006e2136a11e3b94aa0b63d51fe714d00b6b080e698b0892433da0c21444ca1ca28ae80e91ca21332d8345588f49d6732de3cda784def8f63a47f890f908822bfe3860693ba9f9f20c2d68245ca186f2b9d9008b3a2d31f77979fabfe96a184a1bfe6ad8d96f7cc9bf4075c1ca8cd07220491a922505709ea32a0d90e48b1d0483a74c2a880ed0d2b571834d75b5a212aabe07a96f0a39ccc10423917430e763d9eaae30bf64c8ccf18959cc81495c07c0cecf1a96e47e004ae78e6193389f7d8061961594322b249832183a9e8f157228c5178e7fb3ed9c39830407d0a2e23c426b688b6e0052d19c3a99321128c46fe74b040758761c72a91c4b739ca507abe7059dc163e98082b7febe720a63bf7d45d01a6f9017c210ac7bd31608d7a20feafa957057b7eedd307a88e91798be67c1c404f6725699839a0bde3c04b60e53719e1ba8c9997354defc1bb5bf52b05a59646bd2537a2abab4bc18617b300c19fd235b029d55245227f799d77a967057ca5a08f5fb91fee90d3f1f3fc4c865aef683a2410c38ee1aeae36f730fe599b95be1f38712b9ace6ba43481a75373623e37368e622903eb998ff5d21062380a9e3e0add2a4738821d2f492058a55e4b54c836ae47c9672dc585d7dd05663e0241dbadf9411fe2773abe3aa8610d10c4fad5547f291d3db58ff2872922fbbd346bdc06f3c2a350acfc1805e421fa9bde039bb7a81ece255dc1defab8c4c77cb4a767e722e6249e7cc6fa61d5a609b5673f9e08fb3a6ba25a344f1a717ef416fb31a6eeec1c178c8bd2f773d8b25334bc17a356aeb8839ee0e9049b7730ba96e2836c901f05811bb4504417ad2e219fd54527808adc5e0dd616fb0c37dc789c35797b4594cd3f24427a07c8362d4b8d108b6a0b3bdf980334591d3ba0ad8155cff0f6fc947c26ea671c19a795596747fbc8dfe2f6a325f79c3f7e6758c9dee8ef9000865bd1f2b11d90756ecf9e113d3b5406a0128c0449e825f1d4990edb80902226116cb164e5d78e16a670192630078f81b2ff224948759814c0c0bd12081e1906b7ff3f7615b170b466c335e3c4a83d1811393ded0479101eb1bafad3196345d52caa2cfa1a2f4071c041d484fb0b10b02908e71b82ac511c24a91992e06a7e14a27c3de8160eefa070755355ca8676d0fadedfa3a22c04ffbc059981c72e052e7a40ab1457fc18069ca881bbbe2e0b3dfc54ae26cf1d464711e4fe5915227e9163dc3e41fa1a3b8bfc458acbf951526741812c6b1ad046b814b0601aafa0b2b2a0fd2a88152b01394f7b0b31ea693966e4df095b445631ea7eb7d5b18046934e214e4a42c811abf0428638fa0077b7ad7d20b94469c5657074e193c3a0a9148088cca9fafcb834f8057abf5eb36e2ff7efd07b10784ce8c25280ca1ecd82ef5b2ca0d2d0dae09627858efac2509b5e55426f79388786e38687c6724950442153287c8cdd349bbcf2d60cd632f08e4011f8f63e1a9786f6c85d3629b9e394f5dd76e303f1c17bb146956a28fd932b167189e8d10a31d56701801318df0e00bd46c48a6f809d0709bf88967a517724fc6e626e64572f9ea2a0260b356243411ce5c88ec21b75c8656949eb3d608a22c26dec7d549f916dfdb9138b133d60f570bc3034b1909306e9e24b8a1ca1a2476dbdd3fc5f960d6c3fab62abed28fa029044acbc2c7b6edf0c1b2efbf55130c1592f00c7e5b199c0cb94b97bee4e71b923ac27507cb11c5ce28d339a014ba4c97e7ba8774a03f5fd61511a07dd21c7537b857a47a120620cb66c1352608b073477fda3bb57e1d495b8f93d7dc1311fd96e0f0927149e8c800d1d0ad13387a2f85b0dcdcb8cf2794be0f326e88e8e6bbdc8cf0d1634d3d824e2d899a5671aa53a0c856ce469f32eb8ea3320395e40c53003a9d661a42b34eee53a804a5558b62fc074722047a136a2f016102125baff3b562920b51a94ad13a7917a6c005aa7fe4da19fb58ebce05c235ee936a5b5419a94d43468a8be5ae0804b2cb6b918dc94de06c94a714d5866f7236a2844003e8bdb20480419724674c45a4271d7977a72e6860d8e0bc5ed02e67b7b4abdc81cb95813f2dd76d13647d85013427c82bd435f20eb1578149e117334f4885be53c442595b2c40cdc2e46f0d8a635b56d00a1dca15fcfddd355e9f3a3e84a8fd3522acf6a2e0a15b181253ec3ce0ee58ae2607d9655d447612aeb31b257b385f890e9ad331badd8d95e1ea0b9403a8899b4dfdf72b5770f1c9e2c651daa9e246b0057b5c139e10f3c9b6401a2332de517a72c855277113d0757dae01e1fd9a922227c619d0b27117742b67ed2bb2a1856c182610addd684a704abe40fc10a8e32c244fe352bb1ff6bad9706e20614961e2cadfbb9a12dabd633c9d442f53f35f97299e4cb596724eede98fd2db984ee7735dcf9925e3852ba36d9e4362b485490eaeed75bd6e216be2250641dd6060560d56d38b26e38ce6424a8ba974c2232f984cf60c9a6ef546e3821bb29a491f4b5b3721b22e42147032ed484e4ba906da7b8de2c5490d507158612757a45ff638e3c24d8b73964f109952115c681355c90678839e584faa5932c40495d55a5757eb105de958fc64c8db9300495abcb120a28e7150511b340c49a09740ac151e663986911063af1e47abcdb1b8455425ca372866a10b430594a32c0a5bda99a282d113f52b8a866f5848019e2a2a3dc0412db37471b6759c66a1d249aab968982526dfc5a960252b270498929fc3adddccff88097223644d7a846974cf998eca9ef29aea70cd01e33e717b63a87d8b08ce94466abe06331fe94b8138c60fa120bea2b9e3686576bb16f9e75814d6a91503f5d407091c294854cd1561823027f69ac23f72ee184b12f70e1cab529d3bc08241f6ecaa1c7c4a6b4c4ab2e279d71b280acee80c53dcf405c78df239fa807f54e9257dc261a0a4014765e70e4fa6723da613780ca4d0ee69b14fdf2142c09bef521b22a9e9c45af4d002dbe914e3a6ba1c565ea856980f11428306185b5d2cb5310936356fa2bdc8b5cb4ede7c8b732688790d8aa3de788e9cac210309c52912280b4e26f992afe7a258e7b2712c66a0026ca31b2a3afdc19efcf867b09049196a4ee76eba8eae2da6f54f5af3a8ef4eea40bb09996ddbda71790f7cdf25d8c8aa13ebf5ab1ef19251f90144675243f0319dc3419037f06e38c178a7256aa4c58323376d50423ad779c1e75331cf10dee938a89430b66ca62441091ddf06c79e45f4c30af3dd75ee00abca15a660d4b89f7264a0bee63df09cdc9c149ea53fae74ef4d76d3299b5d2f90355a40f1754084d4845a9c5dc1159c4606e5278cf0c1241234ca46cfdcac70efd3e95adca4060569fae0b2fb9cbc99c04733b1bcc6ee3491bab5ef0a7712048ba024464802abaf0d0e39a41a6b04769ad97b01d3c5410ea33487fdb9dfe06ff78b7f1a39850b4bdc8702e70d645e37520e288d1857f8ee1e5684b4e9fdc45847867d0a09b8f53cd74fc5fd1d80481f2820bf30828b474e4cef00ebc7a56d0c875f3c73b08abb0e0d2aeb83c7ade5b4794406d32c272834105b9e1666e80bb580947f2edf83b039fb8fae688d1dddefd8017f43f6009d02665f9914aed48bbec961eb1b9de0af5f7775a60c55492a211ec341a1af26071bf6342e6fad5b182ea8f9b839ddc3d80f56cb54b90a0c720b08b167147e87f4423911458976342882c2f1897e4ad2dafd75cc668581eb20a240e06001c9366902411c356adc42c27488d5a9c5d569923e9d4eebebaa7640f561412c835a9827578aba770a5ea994b4e7044c0528b5c87737ff9c65e8cf77daf2f2515c4f681a77aac3bbd90c0f857ca426f6033ddb2a388617ccbf640640cd1a29d44ccab5adf3e1e98e2fccbae8b6e09f47982e5b2312c054c6f96b4ac4a8c1e26176aac342d23bd4e760d899c40cc23f512bb7c2c3226a4d286648dced8b71b12309ba59fe220e7d0eacb8cc94fabd4c99de39c0a53331a6537e91980965ad4c5a8bacdb33abbe5cd5dc63ab063bd6aa71bd48f1f40b8b04256fb18a01525c2f515aa86fcfe9a3bf0732d8bb5728c25c214912d3276279def0c23a6f613efa8807e8114de11422332026dea5c95bc8c10cb791eb660b8e71ca55a490832169130534c202aecc4882866e917250f2757ab1b15178771e70cbe1fe1544f9e9c02cac0bc2252b8e7f9b18272a88e3cecb305d2c31e834dc07735390d5eef5a4dc28ba1bb2171616b4e2bbbfa91c110a2d18dff459e5c0216736519ddb60334e272aca2da47bfe9446300383f9b43083a05caf9d0e2fadcaef393e5a7d217838cc771deb0f25a54c3ecd995c8dabad825b52869c3f45710fc22481e4b5ccfc265aac4b0d74d96c66c4de57fd87bb97f5ea3adb3cf955a1205bb78bd5612368ea2efa11c9d4c3631e831379ea6a50ff9e010ccde18566328ddd510ff8344ab9411d15c067f20d5cd8f9ef7c66e34afde0f82d3dedfb675b307dffd50c6934e0bb42a5320c07384171beda427d837625c935cf053e713938dc7e2921dd6b8a3705409143cb8a13ce645800e63300d82eb020f07993d5e1b69459f7699d3532aaddd98035fc788f1136e1e48e392d3e6b9455894bfa68a5d7669cfa6e3e80849d58399bc3522fe30c6c00343cffcc3cff25c675d7d5ce3850bdb010a8c0b5b25b91da280aaa8dac3da76a22a6d0cc53026566771fd0f6ba8a7c5006423ce7ae2a222136331b2193b0c5cbacea0b7a84856efc8289e05f2e4e4de892fa54302b016e7f429f7c1aef236916731acdc813657a842b5d0e792b1888b4190ddbbd61cf357b789a5a45a00593e1e738833e84b3de2f84234332feb1d8876d441ec6bb1221f1f6c7092f3ab39bb8552eb9efcced2afe06811e08905f4c01279b7f7569b206b7ce97c7bb6ac07fc742b615e24671c522f892ec9aa312e9072a8e9e002034d9754533cbcb9541c1b22baaa7cf4dc8576b2b039f881eec890c08067fcce3b3a8a64643605290d1f5c09a918136d239d5aa8fd986157779ee09978bbcd4ec3b9eed5fe6b8681181333af27ce194d65e597f2b9323fa1028ece4f1339f474587e88da6dd6412bc70a2880619e0575c4829bd330fd9eb05aa76e5402ebf599065e9cf06eadd9adc803686ee0e13d6e0bef194b9f36425c68c8877e817736a1385116183172d0bbebf18c54d76754db4e3811684db0d74c6108b0a3e606390e7d2aa0a65cf39cdb00d454b28656475e70dacd90f8dd5b99082eb680423664ca50b32f7e0b60ca4b6294daf88b2a7b31455b692c024910dd2306da6dae5fc388239185a49093d1bc98c968551fabd53915b92639276bd7303447c2d012ba8533ee00b8c554560931310178ca43aa380b33e7090756a2ae330994ad4236fca1f5f35385b52118a2f7166d19aaa85420bce4a0473a6a5e104ae7b624b585f87b1fa6c617083d08d7f1e6294464525d057bf399a308040bca74b807cedf3138e18a95d9ef2c2b1aa433826853b086e9a7d67254a35975ce1e0c4ea5d752536bc9554d5269de3964963667afb88f90f3c2d64d780d01df4ab61e41e5df4c2314c8f020b511db729be39d803a66ce5fac332dcfaad193b0e3cb472a894c26c9514a264a2c093a49696e56ac79ae9e3abeb72f58b27595895bb8bcf6c8349a5b8fed6ed3ea7653866615c8dea7372bb4c315e32c2686cc11c66c0c8dd2bb4378efdb7cb89e4b8238b812990dc790cab608eb2180996be8b330dac97a99122b7186c8ab046e5592424241bc0c14313a50d7835879b5cb08cd13282bae355e6760a79ad17ee4303ad74039071fa6a393ad0fb40960e64fad5d83294f3a8ed46640d4f2a2555c4bdfdbda400f24d5fad7a54e75c13402fa15c5311d3c9d01f6a38b1103a41bb47e1ce9bc20bdc5c6070aa674b606d1bb2bc3038d55bb4ee093395530836ed075f8d20897ff704f10cc096aad54761f3c73646a1c95320eb797772a9e2a5a6169ee6139e6eb592cb1a81238f839eb519aa0c34fa07ae70e2880691a536ff7d833defe39aae995686adb3c60741cf75095f61e9423211ae2060afe27fbb58192baa7afaed50781a59c0b604268784cc99ab161e4408762e977f1970fbd425407df5cb00c8994ef88d9f1ecef1e85365047e9a12aba1b6bec841d9e7463112e9133fcc70f370d50d9b0ca425fdf06d2f9d06fba8099613d77352ce200cdc3d044407a930a6c4b384a6173e055928f2b77943546e131cf0f288f086599a4e41e31f663b88715d1e74f0d0f8cd85806a4fee224e8e1cffc88f8dcd4e1e131e3357a59e1cb67607164a0c547db94c00e7de9705bfb64102819664c49cc0f5ce2e5f898e6e35168e48aee03cd21a036a37817ad1b4d16a3607c39221985878f8225a6a1d7f59a12000e224bbf926d5d12115cf8cedfb3168a4b79b0643450aa9c88bd105cf12fa8d3bb2337af171f149dda47cf942b6e28a84309386ea60b6788a85655cc212728eb287869e4d71ba3f4bd85bd02527ec62e81e0d618598dad7f57d380d51854217914de4b794c0d15ba7ceb2fec55d9132379588c23a232978a1552b6d4b085d0879d6f67072368f86525e339598bbe227112e3e1d798a0c1131fd4d3d6344cf196e24474fcd67800083021a00343e0c00cc3842a2dad6109615bda3d1849b8a8d8daa0967367a1c53973667112fff29aceb751a0d29e50408d767d8562e6b5c9725e1f1bf130f368eee8e24c84eb9e2222f7c02fc44ea7a780f00d83f825b8f7918ad1640c29f5479ec1f9e5daabf1d83842cc461e70128a44021ddfa65f1bea6faece2afdaca88e1cb8ba289401e389b4123a5b140a09bf5891d711c215b901e2e5e2216003377fab31b14dc8fcbca4e1abee17a78b59778ca05c054c8048ba8c2086b1a2d1d6dd59a6a2588384c582d4860841c284c11622214d1f9c325c70c34883df02c42ace5c83412c1f5fd9e1e46280aa9a934fcaa0fc812c0c0b5d85edc44231a5e541f93e864c0b6ab61f9cc250964c51a17a8789229b03597db6b094887ffd4c74c89213fa1a09779f29f3bb4ef64482336941b4f0b9447cbd5b2c7438115fcfa319a52181e8418284615fdfdcba111ee2264d5a74edbf8d9b668cd2882990efb4c889390f3783f7d2a5ee17e8e597b89a7541f1dd8b871f983ca58f5c678b6144abc295b40ecb760a1c28f59ee2f8f666cb67630b35e144a025a812f545910c7d9553a4b70249fd9f42d5351c79c493b35f94791356d454f37d51d42239cd53ed47c845593d1e8748ce0c9c5029e359ffc65adf8448fedf799140e7aa45f8446d5d35e1165c5165f8e0c39b3061e7290abcf02a2abb10ca7cf893e3a1b1c444a7972c02c6cadf2ad1bfd7f473e8e72ac735f79a9b891934f1edb275b076451a4f0d851efb28a1c2f8bcde5010e976d60366cbb7dd06d7627bde105a9417afb558a7c9553f89640c163f5abac5e74c4280b1d0405f4d07c8128f493c926d64888e7858c8633c2a3c38650cda8ce09172f5773cce77f41bf94a9877e46bbd372cda1ddfe78e4e43be6d18928d26097d6386dcf3ff215e640f19a38d1d07ec83599fd500a324bb181b2434b0c5c64dad915a612224f2ef3a039757e61ead0e7a21de891033039c4a0619644c4d7711b17ae7c49306e21f7e4541e6097316b17020248043bfedec2b353c8424b6ea9ebcc952a91c0ddf4f9b90d0179cf589e3d53f11d330571d4e8edeaebf7776f21edb3fe9f555f67102e7dd775138b17d8b785255488e83da5ef10ba059506fe875fdda6f5be11f9926c79cb1102a7460ddc6793d51f5fab130f6df9d14d04b2b0497672d05077426ebaa4ddac0675cb6460f02b9abdb9b7ac45c0dc7ae9b6cdc25a06b0e39cf76175e7e4ebbafeb5cee20f751d48777c8d088e6d4f3874af1809898d70c19b54ecc09b71575500ba3fc34b83101e7894bfe79615bc1484a6a43f892fc4bccc3cfa0f1651aad6fb0a7debff56d501e8564030d6b5f50c77be7bb898971af371c5057dbc4fe268546f6b847483a0e2ec3c7a88b3f7399da8ff9b7ed32d08f4dd2a1a95e906c48eabf786ca43fc0ba14a1e011c518afaffd9f299019bcf77eb49e6984805f43c5fbcc7ce3d4f5941e741d929c8a3b7cb5f329e88663da68856257872c0b2b6b91113bd5e5c537aade6d9039a5d8d850436665046eb0a1b87ad0cfa2e2c86a1d767285670f4049a7c312a93e6cc88ddd2e1759d71dae47594de32a0712efc22d07397fa6d64dcf3bf061c1f1c6c31862063d94614705c8f2d57d278f9e1539b034ad018fabe53fc0fdc185340962e8ba38f5ecb46affbf245a85e9afa34d59d39566d88ab0bcbe0497407d559c3a261905fb518f5f82e2369bd051939c13fb3371fe47ab8aab2cc2faadbe3f3cafb111f041f1249556d728b6ba59310dd6fa180d62579a3aeb37347d6812cdabc4ad6fa44e51b8088411aeb9f12248aa1d21a7f76f2aecfa3887768390dedff79eb760168d4be074d88d10ef1ff29e36dafe79b491d6bf7bb98a69436b05bda991d7272269e90dfb1f647550f672bd087df114d449160dd01b7a6770ecaf8b7b4440b52002d9a3d6690675c2a960a05bfbd32fdd757d3646e9dcf2408632fa1b85bd644e7833528b24b580562523bb82f5040e0b048b7a715ac239df1b7a8f7ac6224dac3851406838f27b8ba5bc14212da955513dede6aac162eda611858bc2167c862a4475556239c240a4cebb0a53af32be3ecbb22cf4a7a55f96fb6b44c4cb9f291a675088a97184a17a2f265507ee08b427cbdce07e3728acaf5d2e54a256840bbdc00674564b65a5214cb02c2fbcbded07d9644220e27eb215ad972b56d6949773db29b8f559a9de035fa6eb7973fe8b36ad7f81f23487caa659595263aa3249dd624dd6df492874b7c5c8c9535a8fda8cad69b6183d095a7d2a9df9842d8da8678488c4781b1c8d6e7a6242d29913e9990bf278b34f6639027197581abb1f0001cc294530b6c3cfeec3f0322fdff0cc5c7b9e40b1c867657ffb108ca9339d009bb26a12dd54cda853e2be2ef910910e4e75b4d5581f8b08f7f78236391cee2faed375c66304fd28b79ff0bd988f483af2df42b8b72c56ae60c810e93ebb624ab7a4fc2b9a485e71c594eae5c43b53514d664313789f8fd54fea30a520f692e3caa23dd871653d902e219affa05d92872fd8bf0432583f3ed393863dc3c2fec45919f933064149abca35ff858d796dc0602d0ee399b6a5951727dc34e1a571c0e62b0ab0b81b736c2992b3382a460e8263785f2ba82024be07af45c883fc36e1f2a7ed55e1325343c5fb4e35f52b81e126bf4cf076faaccb644c3642640bee039e7019414155dd841bbbc46cb070c4c51c01f771e0b9a98d7a5a220b7a34f3009e555f2fbbe9886ecacb379a4876e7912f72d41ecf3eca8cc336164da001b3a29a5b034faffa3d92e8b21b3f447b335b99b8ee81a5de1fb475d354dc160e9a65f1880f0433d36e792606aa2018de1d14e421b56671437416e22007b2f14507352af451c664ff92609e55595341d4ee195fda2f63d3e4be05ef577873dddde54ab5f34ac517d45711af26ed975066fd3b6b4a1ee4fd6a391778df0c1672f3e2310a26ff13c23a68bf3300c2ebba9865747914e95e6c8c97a5b70b3508d164cf729710b085ddbc900e2940e2ddb3ccef1ea92f10900310c90b054d3a0d5445c7347d3c30888d0f0160c3660cd5142ee498fc0b12034a4d1b1107ce9639802e032db506a04edd0b16b5ebaaf2b1de2046fef991eb01c160f731d64e9f69d27881a1f027155785e32003f73d5b408c0ebcf02b8458b4da0e69c58bcc5653c0439b3aca776b77b2c815930334c527f0623d8a967076ac5236a8805f536b27d781de3f0283717b04d96d068c980217fd26d822ea6ebb077b888f5d3ea6422a180d51517debf23266c4f0cc3c9c91c6cbbc4469e9c7877b473f8f6c2699a2109bd37a22c2fad9454e6825c6481cf97a9dcb55b503e2d3d10b0e21511c76868a522f9a010cad8a6d170a78cf3447d9843814bc30ac074ee739bce6ff1db323c2a5e3de82566643200f7bffafb14ba973557754df07c85a717d5246ab447fd7f9fa26d7279a0f1e82eb71c7fd102e47e572b4e2eaf075391797ec46a4e707103b2bdf35dabffdf23f0dfe8dc46d1a182b87027809c595e544eef45e34b5a6cdc1c3b81bbf6a579cccf87065d7c867883e53db9150ac665c668c4dc0f5db7c26238e3973d8855fde21abe615af3e672447b03b046423d289f84afc101a5b7f0fe02c6173d034785a56cd837e16683f7465f2872d8481b2d0e822226f139cbfa1365fe907bc3102e703bf60d00543679183cbc21b6503acdb6d7925a49b5d22fc6671b6a30933241fc62398be9dc6395a66708dbebfb2ecd8cc7db52a5ddd185da01b01bb7ea766a80ddb0573b6f18288c1c765b7646625a084cd5234914fc2097480c73854a37d26a9d170e1394844471014d5d88430af87f0c12e8479c131577648351aa659024d4b8cca128cb5403df6e8b6354963c16835d30d4728933d8e599d079f076a48f75b7dd83277dc80fc83ed225fc8a8272fe8cf685d8ab4f29a028095f6b564a867c90817b3ed00e19692ef7cf4dc821219ca49d5d68439098862c868e6c2aa7c9e950e99fad1baa83d97d465e607d5a1272daa9d15cc65954c33a417c294c2cca0702a6ccda973aa0248ba77a4f65d151e2be5dcca33e0adbef344555d3613d7b0ed11c85fdb81058b4786da1a736fe6a8feca6e15f12e9c09d154df4b5f37f59aa09e26fe4f1094aeab46aefb28362c7aa0679ffff56bb726cd10cc7379a861a603176a879e62bbb1abdc39987568d6e06f428452d1a6bdd2246329482ea130ca6f4c2c051733528837e3cf2e75ed5cea984eb6cdf21af1f57e4baf7fcf44fece33da849449cc5f55a3ed52f2d01de04e2b697bd47646085683ce3004172d5471e6d706997a9f2b219cd4840aafc781db43defaeda8447741fbc8449a90b442b5a964d854d814fd1a79c7d85f259cdff7dab7b4c8db3d7202b7894986082b824fbe73cb783f7e222c2f8d260d073688d721a714169d412b39f7fe32e201c6a5e6a565b84e1bf527f24432743f56e184179e83fdc402d295d30e8bce1a1c8c9395d92f1fba123c661c56de39c631cc9d0ce96762b5d79a0c712dd4d4c850a9362442d6cb148ce20e9d68d8d3b496f384bac4ae11da98ad13ac8b72f10f5bcc2cb0be76c182025cd75b1a882d731fc11aff9fd5a55766e13761b61d4f535795b8a9ea0b31105a65c3ef2df83f756f025b0adea851ae16427068141ea4a9fb4e11eaec99204c1d069ce343ac2e564700d7b57d1b6280d0e0eb6b2641b09806d775669282d8d6a8e340127d584d71ef1134e99e2111338e85af37f8de5548995e97c2a011ae27603ecd58c43c20845d922eac24afd6bc02687bfebd99d6e784cccf240da54f896b52f1c155b49e838935befd5d71e468f65272222c7ddd97a9138890a8dcf2213dd294b359c3207c2206cc6a2f0a940432119825fe32441ea116f305b7f85db60eda39d4ea17f3bf0c5abe26d386b19c661fabb8fbec3cca9366d02a5eb01077d5d51e699b10e269df556410314648831ce9d3e20d035a2927c34563562851b60134e7096e75ac89a8c53f1aac21bce15522810156e79281df0156e5784d1120871b910db68c0c3be97d8dc4baf31407d34846c23b655f9cb79c39d4e98be00813d923d1799bde5f935fc805ec5a819879c296d28485b1604b79f4946a9220bec828788bcfd8a87c27536e2031d21ae73a8632d3bba04785f52362360aa32b487b2a488c3df89c8b8dbad75f94fff154390b2fd00cd957375f70883ffbf75bdd3534b2c8f2862db11debd69526fc69757a354b4bbdd822b6cce8db075aafadc01af816a14b4296699f3cc00511ac5a95410c51949deeee8d4c4fdfe1e8c88060d32b88477f19bf2ef0366f02c281e3dbbd4ddee102c87d1f5dc2ef3e6a95cdc5e26562b689c92896587956b6e4306848469dd0494c3a096c97a1da53fef18df953114bcbfc7de90e49a8dfc1cbab8c46ea7ab8dd069f022c1bb20cb07214fe710c637f93399ba194947383e71180f304daac4fa581155a2ea47e3a3b24f33c91898c8463c32adc11a8b59a6ebd2e03a1cbf5c3439a10ddeb384a793dbe495a61a90375aa9fbf24795e27d3da2b691e6de41d1871cd6ad275589fb11fe695330724a69de7eac538581bc17f0ae10b24761378e90ac1e410f3c93b8c8335a457e6ac312ce4d9f932de886b1e0d67ebb561724c9d54dd891926ba984fefb9ecc1bbb6fd74feeb05893cf7aa9c8cd5d224544403e02703933986a7db5ff6221246d9f234e91c550a464cb19a96bae436ac9ee66ba06a9f8e54165c4edf4379711af99f7699335a6c99e34196abf9c42f1290deef49408a46749d5af793a0c62cbb645756fe1d1d7dd8e96c1794e44fb484637d2acde83666d04679029bf2873a6ff47f66027814158249f3e238d207bae8c8f2b5f92b370a2236fd813952ce9d0c226151e7835187e2a99eb44b4bdfc57c76410a4d5b89c86592255e619a187c74bd71b54c5af0296de54a22c3edc903dd37292594cddf99148d9383d70fa7a91b19b2ded9db80c8039720baddcbbe73663d251dba1e871fe5dbb2e9d9743b367e7d1fd7b32f39923571961e0ee2e43d74ebdf225c5ce047ed4d75231170b31b127eb5853909616eff65c1663b9d1e808c4e9c33f7aecd3420613a9aacfaaf6f188c7f244a736b8c87dd9601be139a5c55801fd3f477a13d786a94c91b27403b1dc6b28ae94a8e8dd2a59e9490314b1eae520dc7ddd61150b216b67d0083d58f6e0f15d2053b86ae9ae25000eafb00cf5dc252d44605345431e91974f3b5044706704959cc71b4800919ad78351feee6c8df14150d969d0ce061ab0d69673d7186f5fc08a6a0179745c97b6d404748cf43b4cc867e22fcce225304780b0382db33609ba4af4cc01d9b814edccfb5259276b0e3617ed464e15f44f66cec8fa687e1bb28c581b819e35e7440e7f9029d793ab989adc368a5fc5e824412a702537cb81c11278a1e363f04ee37563e480cebcc623a433eb00566bc973934be49c569735884590944f6d347cb5ee44a6892af78e7c22e1b4f75dbbc21f3bb5c18ea854569c8283ca5bc75695275c2e61b76231f2b44f09eab1023f017e7c0a5e4e441c4bcb0ded2e205d324d90dafbfb450fc158a97a4130e015645230ee1b64eb09b604a7d605c7eb6ef66b664d80b7c029f4c2283ddfd2f342e23c2f64d228aa8648bcc9cd89241b3a18c57a0a39a185f1abb7441d5d2f56408f5cdea305753a250118461c334da1fae45a6add027add9cfa4b57f7fe08ae77ba9ccfefb5a7cb427082538baab1496af1a8847bb5d572139dd8582cb9ab23ffea553e37326f16813dfe72dfa91ffad56e211c78e7869d107347131e8501806dcb7b1e5f79c896f2c509d0c69f7007fcf6f4fdb88cf4c7af34c66fd2927d9cc8657863bcf8edf25f9d0b283590f97d8dc8b24f7062dd8ec473013bcb8d33c446f481349b290ec8ab4ebeb900607a84c86f41ad435aaa5098c4e137c67df631219f490c1d6e5b127332f1964130531892e23e0d9cf7c7512b4e72033f034306c8b37b0a997a295ba59b140535f4ed92dd544b2d7127d04ca1a472d602f31282fa1b7d41c5e0bdb4b415605d599046505b541929e19e52e0f60e287666a85468d3b924dc4e44f51e97eaa09b4fbbb89631cd81ad7707594b2dd2adbf2b6155c723bf2842d1b88bd46d4f9e4af9fe146d4afd52c2b911f9e4f844f78cbb3720a188e40043001416f1d1d2e78040187044f8b2bcee5f0d9d52652b4506511821694052f6876089ed077d86717991d75c7d70a2dfae8ab1e6b24a07b8624d30e4a60e5b10c6f8e94cbe7c313f35dd8a57d79a33c1551ef6b033a1617054123b1122c2a37206f26a6470814b1269560544f9f84f206702160cda8c3f4e2e317763969043e057b1fb29c20e1ddd2d8628fe1f6fbc6ced3fa8c1e4d92d1e050a6c47d2b00ffb8a92a4f22949a804ec4e89172bdd061a7a8475ee07bab2641ad5caabbd3eabe0da0be2cb29e886bb6d695f627e17e165bcb07a4873ce74443963406f570437e42b47412a856c7068d557fe2483350a35f57f962a2b78880d1fc35ddffd84358102d6998d94142ae666e285c2d10552a53401553b18bf0443814315abd16a7fd66c54c471c08f6eb2da1fa1ccf2e6df56e86dc15ec2a3eae73c29d22761cbd8c2a75fc2ed23c0242446762097aff6e048e875446640095662a0d511cbcc53454e72b5ab27613fc1ca1e2ddbf038e433eca238e4c733d0205521de50e96b68e86f3e37e591beda3e6f4c1247a60bc848ae80061634b15096650444e4a446fdc83db5f755f2760166a51f26ae01a4f50f4aa6fa3ef7a3a64f95b0757fe524bb25b3984c3bc14da116915f1489cc7919958661d4b8cb6c0fb4ad7a2889c918dd1edfd8a41abd32865d13fe776a3fc36a921a4886ea3b05f6ea579b265c166415e417a474b2b9244366c2282d5febc9479291a16acb177cfd152122735dc7362ab359f2318a1511010030473e3e11b8c10ad759f6dc51c4ceda775d877d6e97fe4eac25ec5250b5ab3eac4b1f91df21009c9b5994300831fff397a75a36aa1243c68a8957cc5a200949f7072fb993e85e5d3798d02e2bf05779ebfa4fdcb472b01abfa9bc6576c04d4f7ce537fda3ba9c16e9a9768b0c887e5bb9d6b97979233409b02f238ce30a0a95373bb8e40ba856609433387be629e4e8f98f9aa54653cb39f8731c517f2d7458b8e33feec7a36d3fa5c527a70d86293676ed471033b6cfad944e1ee385242e8bc0066c685892734d8bc163311d6552a93e1f04f3de1a95b4bb4eecef0e536dce43f6a400124428aa4f8a3d20dd3d0679d410a14ee949a66e9ff0744b264d981a320a3ae59d0ccfbc6a78bb2786c88d3268537aa874e8dbbb050826e9db9dd4cc89b6f89b68db3ff47ca48bf789dcfc952dfec95fa92a1f552315e56b35b5ef0c563b0452e0281e0bac3f2edbada96634280cd6e675c05a05d57ec7481ebd92fb7461559cd098cb613cf3d13bb60fd2349ed8ca7419521b41f879cd0183d90d67f66e794f8f354accfb59702543364a081074081564cf9494d764969426f979fa59b6df72104d36acf32c6cad7f5f5cc73e864867f3333b03fb648443b178037267f01dbb31e5fcb2f1f8a97627cafea0737a13aef4827ac69256ea975edc24205381edfa5f85a19e4ace2d80dc1a03465d6f3a12ce0dcab9e1eee254c02d62a79016413ef131229c39a89dab2eae9053a59da070800214d4491079b6ac3e78fe94f25ac567eef781903a3844783d26fd035a6ddce3853ac99a8d3e866d8cf20484d01675ca84c9f6d88bf4dca21a140998a9c7df2b7f7279dc10232da0af6674b9e8f95d2f944caae19957b5407421075b7888d68e28712e9038227d260d0f792fca1ee73c275d04d31e31aac19728e03a5b0904c387e68e5b79c00469b852b44c1ba6fc1a37891b40b2dd55e875f5f739f8b89e541434726855e110e80afc5e64ead9f019e67d3f1007f32cf734da53b4b4ccf9a154c1c441af6d4e3bfb8a954ee8ac2f83fe3163e8b851a1a4748e4d6c8ec6c8b2445e6e8b9e4f21e4bc4fc9e2b1075457ce2d635d2cda4431510c443603cd442d7dc9d0a0959538674615dc8c8311a5ccf9f7a50776a2b9b8f33ce49843e464f0cc1b8a32eb5e6b7e4bc4a81282ab35d1d25b434ac17565a14313015b486611c8b6ae35eebe47d752cca7970f813b26201d21f513854eaf33e0df10a3efff16906f1f755b9be3649d7f977d4691fabba6c167548a563b0791e0b8a455ac083cd599218c946f5481ed90ae0c2474dca667b265468631d262d19721ebb4472ce5db6a06aa990122117bc4c261a55dd2e9f91a2d9686bc08ec9df4760fd3a71e0839f0e8f93eebc0be05befcadf4dcf5661fd0e2ed24556abe90f3450fc745caec5de721cb7a499930ce5c7465d56a6261d608e4da086ee1ab70ca5bba2d61b485d3baa6c5cce1fa8ad55ad714b4280208a3afd01815c3a263dc010cb2db752bd6ee902dec585f46649312211551f25c6741d5ddb571bec0c2f880ced9219a735bf231ba3e7a7e409540a68dd8b9934697a886920346073438fdaaf788c3f6cb284056e04ba136e16485572dbba7425ba01a7133b3dbb4a49f625422177043289d485f58bbc04d17532c9fa07a0ac6435c3e160b39c0111af24c5eece98bd0a228cd0fd080b2bca18830ea402ced30747e542503f253387b0991829dcefe2aff08a724303d66b269e48b099386e5549ae9e5275634889504c6eabd8e9c4a200695926bbaef2169d134ca96863146a7b318858e8b6eacdb46c900910bb861f061038948f1e7d4987a5c337cac6ada7c653545aa68d19939f09a8230fe1734bcb970f06c7c66460d50a40423d45fb210ab1f3314f3426a3bb40797cb4cb5ee47ade41e7ae28913a4703f0a803a3cb0e6941dcf360ea827bc21bc92baaf87557aeb871fc04937d664665d141063daf5d796164bbf8814f82a186694e009ba17bb1190150792dead32a0410082f06e25c5e6acdb737b954ce7c434ea184003ba043164c340be0a1d4a2e420b450fe88d56cfce3e711eb9257004bc905e165434c45346b7395ce02431ee2d70c3560e90e12da55d901a8316a015a317fbfb9d7c94479c8a392ff51bab5a988020eef50f69d741619eb0a58a82b42f78cf7e8fa60b695f0ff414fbf0d1b416eb49da20985c487d4bc19fcb96bcc269d25b877010530fb5c89f083646d82fcf792dd2c2c99057349015b2529399014c4da55563c38bb5a361585deb5ca8057494c5ce0b4c04ca97239a877abb7ab55e3dea7633dfb60952bb6578fb95a5dcb09711000eacf47b42b495caee5545cf1ff7e563cd9107352a6d1ee625a23325abfb35400c8c949baa0161d7b2f236bf87f9cf02ae18fbce944cb0a081e2b859037d5b56915a1693c0ef4806baf5d38bb58e2b3ec51965c56b81b6c3abfc5090df68cf692c5b201f3e34c68da0507e8b3d15ea583998bfc3ff038dfc6ad4542ded4930e11c12ccec264909c253257e96d5439e059a8402a8d12b6609e8c4a5ddf3304caaa18381a2154d11b94bf1a4a58cb1ce7475e48fe51d9a71a858b253ed1697970b993dfd0e5144330c5f26e0b8862aa358a8e10102f53477ae7b61c4143624ed3ad113f7100fb2cf40bc22bd0dc5a2a0467dc51192e62c0554cf0dd67a81f60d8adfd6b1867c920ae9af541a1ac457f7f623d5df55cc1d22e5c1c682e06f735bfd992b414baa0b3856690122dec9f701fec72d21061da9f1847d80b876315b20081556b5293719f7a1b50dd60baff3fead1280b8cabdffec999c0b686aee05b6c9d3b56d67d991b74f960287e2e772bf1946c190375c37a39c07ead67a9d1fad92a50378ee0cb660d45e26b819a219265039e02319bda40fd97ec5eb7cc5211fa6d08f45239d12defb3d071b3332495303a2d78033e221b3fb55c4b60823b9bd4a7a746f5afebeaa3012ee2c27786d9d34195897a88da63b9cd64f41904b3c8b4279b74894ae03c9fefb1c1b3304c53c1395a13117935712837689beca48d63f6d2a61b2ca7fbb1c8efd8da2c32b5f3e95d85e1f5b864192b253aff44ac87da5c614bc79b13fa84cf4036bb2c080ed75cd600f020ac86aa909e9b620f62f9f78cbf424d5f64786802956daeb19c378cd5ecb4ff341f8680be7d5b169b41430294e1c104d715195435c7614f80ab1d793d039d885e926a0cf760abde86d48fb97f015567916fdc086383e83a9316dd1d2274282ea0003154715f8dc54769f4e69564a86a1f92cada18ecd6e06a9d926ab48e97642929fb806c2ac260decb2510ce916b2367d281170a2460879f8f803371b588ce76844c3a71d740ebf520a2088a8df1fc14b181c07442e502456f1849f9986e8545d49f8ff4fd0a8a21c0b0f917882dcd1ae20a34aaf36b5c2b8d77456aa6d9935d4632695d510da1481e57b8edfd62ef9b508e3a1890b3f3e592b8d7ec079f4167d9fcafccc999558d6c2ff1e7602644d990db72a52aacdf159c876f52c83d140f20122f7b276a50856efcca411d24338cf7376b2cbe2270b459191fee8e961cbaba9f2f329aabebcf50951759f60f66eea1a0b44fe5ed713d0f33336699390e6e29e103f5e368ea9a70806640c46f5aa2e78778278bee874f729d4e69662d946527cb9fdfa4665633cc467cfdb19fa808402a68a45b6a949fd44ac90b115e1a880bb3ec3d691c49785a4c0eabe4e25e804a422bf046aa6d2ea8fdc59bf29c3678dea95eaa898473042d3faa7df62112798e4711726625d82833528dfbbf7fcbf64134dbfaeba4260fa95d687abc2aea152d19da796acc500d644dc22cf975a441ce67c33509ecc8deae954c8ed9bc0e7aa6e198059a67b64f81a1fbd5d62946cd5e1fedebd7063a9083a776a0906f2c8a02b9c20b5448b8447dbc3da55eb229896938d7a0676ac2c89fdc3cf02780b4ac3705f07511329a0ac20feb69b2e93a283f6a70f03311262d4097cb1b993ee1ed4cebebeb9e7c82e5010a040973afc22ccb91b912ee0a7bf596d739610c1205d4594cc6c6ca48a97442dfb705d3f05423bd8f0314f3130014d5eb6930e00e2dd695d16d4aae85635084a61fe9c30d68576f84142fc96d6bf78b1c1c8e006a15024110680b746f6fa78141e6ad5c94235e8911e302e56ff246553eb2489ae15daca842b738a2f3ac206ffaa4d22c82ef165baa41ada13f78eadbf6beaf549f17c23fa588234eebdda38bb7775b1f91a617ade0013d56d52a11d742e5e3f51e463a167101a1bc674440299ab5ef3dbb5c941b66f97c25df47fccfc14f6626eaa97b25dbeff33ce5521702c854d6a38e8dc7e46362ecf01e490e12123f1890158716bdff6355a5131749ec0839895fb1d8958fb6390960ff922364d474e32950090c3c5d25302e3b4edc8bd41b93dcaa372df1730f57c6b44001f35a4b3088bfc93e44ac517c1810c3d58e6974568989a1d8ed60753563ffffaba43f3023a5b81b5392db599079ed7c0f855e187ab3664ed73d438c87c0adeac57e2f3038bd492d76474f17a3a3ce39da58f8eeff0642b26e1e3c9ac0b73a140c928dba64f532cafa41aa3d9e7b5198407d7a456addbe21b5d211a6718d00bc1a52ab0506d668bc8811dc5b998e640477215801f3abe0bfafd1c52b43ab6e0e8a10888dedeaf52f741bb805398b297cf36eaed235eacd73a9244cd04b3457a2f752b089fdbe0519d27f702aa687a4e024533bb5506680dd72dd20d42ab67b58ae9f2a3cf759b5e3c8bb73dc73e5e85fec65a1432f52d40dd89ae069d17fe060829e8970cffde9f3bd24b73ba436c3a0f2e6ef7503d0d31f19783598f3ca00e21e391145dc2bbce23d42f789d790bf4a20984c93e833d6db731e0d4605d0067000b5f824f7b05d5d20d05ad206343506725d0ba4dd8a3a9c8e4f436fd1ddfe1e5ceb51e43683955aded2dd4d2fbb0a39db30a911ae6d11a8b18a719446cd8d73219a2e39cf5213cd6b655c6fa0959f4dd4c4cf08c526042f4da3b41e200bcb1937a47276ba5fcddfa91679c07d5b0ab6c4023f661bed1d40181c1c5082cdc137a4f39714b0bd300a50d9d3a55267a8942c49dd03c0c66e714f2923dff6ccf1641d2088b4a92256ad8c573727b5cf767d4bb8dbebc2224cf690750788c7aa89aa3eb02c1dde55d3c0430e92117dfc98006979ff4c470cfb122ef5445a8946d281f4e940d3930d690f7a827bf57d260bb6eb0ab10361f88b6c210f8c9ab6f8577787eb8334ae594e93f88ea62af34a6f0f4d5619a5da35bab6400bb144d8cc21077810d09bd2dd28724cb7a58c80404d4571b62cfc00bea492e810cac226d426054f2c9049b83bd216e71ae84d2d68f5dfc156a4fa1174297853aecac17a80e2ea0c836f6a9a43d8a1aafc8ed6a1b45bcf88e7a891cfe9f3e4932728272afae6620b66d8057e0115e7884d51d517c984695d108b0b9947d5c13260e805606966dbc7e665560981a64761ec8254ce0393711a81f8602add6ea0dd68fdd7dcc0c5b41f4663a60482eaf1c2185f84440073244d6a9c4ac84b087e826ef163583e30c4982ef15e1ea9920121d61c59b36d44aa7d1b02a356ad7ea78a5c85f9dd773aa9d6f3b889d20628a0d5aabe36e08a2ca122aa82d913c6eb0a5f8545b986f0932007ae498b59eb673899130e775e2129767db3a5112c6665661a0854ff6449190ecc7e9caf5c4ece1153dc48a8a5dbba78d88cccabb2f2227a2fca1534b50e5d7e730393b584e1c19485cff1c04cf8c6979b0a84508924cad725c0275a1d208e35336981d2be677cb65c5173bc7110c387d5d637b9953a108e6bce348011fea73013692354840e67f73704af7cdc7b0787245613cba064141bdd7e83d4c29370f191bd08ed1c953f6019ba16d4314d0e7404f430d9244f68bc49b9a519df025e522bdae6116fa3d48ce7c6d7c60ddbc3c81ecd53ab3b5c9a72cd641b3ce2a2c88bb74aceab77a9ec274756b52fd2453a5376611d13d9f2224867604e86e35a917a5f5f7a789f98a3d932b96e0c4c9567a070f7bdc305222b6dbe7409959009161fdb1e85b022c428117a0ca5bbec0c49877c9d124e7c263710f440b79c6b29d21d4aaf11fed5526ed13236d1242335191fc724b7ff3136bd24a33785915c0c16c9521b6db091dfbddb4e211655327e5eae7d2078baaaa5cf507afa243f1fa2d07c68845a4fa937c31fcafb2635a069089ec686e24c7748cc7faf5928761b887f855f886504b6df71ac862b68c082a781127ea32cd64d0b570812b35a3250e12f99284ef0609602df3ff0d2ff489f75dcb516ec9d8b967014164e1fd0367e164c48a34018d6d266b73db5d9bf55c2dfdaed10c3c10ead6ac880ccb869b6aec57ff93677cac4f3f38f289132d60108c83cd57e262b78f479d9f203009a03c77691732e985733a20ea876fdcbad978d1c6d64c2e5ee25ccc31424b3a5fdc72172e19df05ea630c42db9611cb19d89b2d31b2528de40c96f4c4d25483bb0f0838a55871a65609429505f9b97ff42be54202c29e8b7d3da5b0906177063eec863b96578f382e80fe3d4d8615d1618394dfc9305845fa2a956ab5c554c3a8932e0805b278e08b76b1469cd448b65864c7fe4248eaa4154ff60afe0de409360439c5f18d54663c749131962fa99c431334ad2f59e0b7edcf2608776905b6955ad20c8992dd47f4392e6c64abd188888e429504f58755d84907d4d0705e06ad7324ad52e746616c28c206359719376258ed826dee1b1fc694c6f7c2556ecee3fea2269345dd95f26a16af5fa38b1d8b14b244892bb57866f6cfcf9cb56237759733dac3ffd4e9a7bfbf667bb810b3d57558d13afc1e2af762013c7795038e487ce946d5f27465b085d54b25420ed527d6e3be2f5a051c342fd39a0ab54231cb45506e4ed4a5b35350b5cee9e9c543325ff123a3eeb737fcf407f691cbf20b72e0beb7159aa98e94a6868cbdff8086978328d871016ed220d49049307566dceb05762f0afcaebb0703c9c05d7f4e056f3ba867951712efa30806f4ec8edc943dd3e0fb40346b523e8a5dd78d46a7fdb36e8f342c11157925988ca9b0c4756029eadad2be0ecf8da5bff6da75f5be62270f88b6a95630e6a748b86c3ce3a00bcb63d2844ead0408fc768e67e094b0e1b732048476137327e931012a38f24b5b20b64319e0be43a630ea8e8652c1cb5cce3b5c7cdc74059057a777dec22277efbb2c188d7aba02acaed7588ce736d5ce9d2100624edce8374ce8d47c28d5a2db3041afd413936ac3a45eec91af648741983d708b01a054c8f672787a730b95eb125c7b15c1aec778b9a757558fa33a8011c8b5f575c892a0496e0a280c76c614355056ef45d2de6d9d9fa4ca6945b2822b5619dfdde46a3cb9015d9b93adf7b8c806519a84619381cad76e1fbc7e677d0b0198e93ff3ee3ec8b142f4ed137835690d3998bf6fcb13da623077f6ffa126b454619fc4b9946e1b1abd8c31c765322486dc31acf3853cd6361dfce24f096112ae9b263ad0d7a826d3cb897680426996036d347a8951da26df10c9af17f053208b9759e006a00977271e385680da3e98ecd11b1fc2ce4d1e91f81993d3c9048a0a57e2cfe816c64981918fdcbca5c493c52c3e822db7662340ae60de131f922399e9de607561d0b48f0565497eac30b7ed575031644472fa3cf0bcd9fb7f1521f9044047aa2ce88b4a28e2553f1f80a16e7bd25e79cbd86e9f6cf62f909f5cea71a7bdf6015d75fc1a7fac0111c36071bcd3fc8d146b499d2d44c538566af9a27aa73a0dc206a667dfef5d43bb3985e24a638802581db6de7911141af4006292105c809f1d8f8faecb06026f5cd09ea17e775a3995586745296ab633854cfc726e659c0d2b96992c8ce1c874d2617cbb6d301f2150a332cea3ab7f7e6121271ee213a6b12026faf34dcffe1434c0dbb05f5b50b0689deb07a9bed21404e18ed3e992c3b0e5f90b5e44f1b92ea4dd1942b43f8c1d6e0ea079881710d634326da44f11230e670b2616513035c50ef81e4c3420c8f20177bca0c8f9efad02f1f95f21e1a87acb7474708254804e6f8fa152860e130ed17c2d9e8ce429cbd8f6ddb403261ae210a8a6fa07f65ccf2bb44c9199a307aee80c0cdfe508a2885c8fd146119ea37a6eee3201f45564f7f0b2ba47d56ec6346ac3de846a479b15c15a807f5c63a9b7bd26583a3381c6332e0d5103e588ff1ce319d42d539314bdc6ce3103548cd4b79a89167c25f25dcdb7eec478afea322bf7a842dc5d6eddd0b49f7086d4124d49ff5ef46e1bb8abf166eee8faf91c622bb9719fb089365def964025095ef5c958da405a8a0c769a2e5bdb58c339bb82e5b822f09dcd40d12accbba202838fa70e14b010f7000341d8af76222202ccdb6875a2da5f68babd41a4b334b22bc774ab3eec2c2c79310e7dd081c41359fc3b4b03f5e214c372ad7964535572a238410499a2d1ad38ffaeb0c6b4cc206606fe6093cf3610b28a3bbc930a5c26d8b6bd4e5d57e4841c1211cf8a2b47352bfa1612a1e689d7919d1b484f28bb944410937cd07a251df8f8ed37a2eefcc4f035287d21dae91140fead78c95983530b30bf2508e1f22032080d93cb6e4aec464c5c64d1d009b40ef08ed95967e9111495909c5abef6eeb6fb16c9aaebfa7b451263afac99a9c2dc4695f8924bd0e71123bf2407a88dc95511a6178d28936500397dba42f1002920172221637c2a4822093f2eb60f5796a4431c64fc411721731ba3e17f7b15d525b05e7635b9088dd0e9a64bd7fddba8d6400fda84fd3b84b21815a66e89bae8186590ef4870f1040e36f82433c94815362394f5b75d31b3fa56c0cbb52d68f0ef4370addafe5312ca069e1c900dfdf1cf7eac3ed60ebdde9eae05e7959217760e5ebf4ec5b745423b5d786dc64f7b36b59477ed7c81dab042ae3012b7abde8ea4707240ab157201a1211d148c9bfcb1f901a3043eb3119a7957de565712d5938608656d13347f863421ddeca93ea3b2d8a6c883c0542879acdee59096c7ef6b0c78b5dedae795406d25dfa2046c80a277a11df3c74dec5ce4960f10597638bef5da8dcaa113211026bb758ac2cc18f503dc7029018c0ec4a4b8efa5f0592ad1de19083540412d273415629c4380fbe415b302612b826eabe44b8497a3b026dc67bf701414b345d203e4582e15868b9a8c316a75ad8d3ad86f6ae549d29fc58b34b371e3009ddf76401e555e678d8419fb21f8a3cbc2eb9119c0dc9bb0f61c8066f40f63bd1c190c4d4344e653f7181bec569f456f6c7069500d2ef48b8bd0ae6b1dcf496681e63a454e0b16f8de8eed59b8860f7e872a91cb75fcc5a994322e550273926c92dbcc86a82064ad27cb2e9bc305aeac910f52be8d06f50ba13942015d9a2ec1709a536420bd2888d565301fa2d525d84638afa7957127c8e5cf05959525ffd35632c0861afa4af10d498c12c9ba43656f33e12f9037df2cd2239a965b1818c723786f25bc9ac051e3d0fdbc37ac35e709b140dd7f670201a95a4547f8c0d4b4bf7196e6292f4c31dc12da9c455b4d6c25f65eb723a0f8d68361843834aef9f0f91439836bbf439d87a4c53c9fd9e76793d5f78542ecbdccad3bf0388cabd268ac4686188161c07c0d12719576f5a62eb26b3f9ba811faeb77f36ac151822f4d7adc527d57279683ca8e4105aa9a9799f6869c60e5576fda8fb3ef90161f74e5aaf915ddb1a81aa8c9b4bffd6a51d31c7dfec8d3edd9e51d822f9407ae1e363257245b8b5b2cc013a7ece7aff005e0eed60a5308f54251c240de2f814aac87c7080ab333590d3f99cc645c363102e0292b120b898fd37db1142fe1a38890b26eb3169a2c04265bbe06f5c081812c4f00a68ff0994503ed75e75d422b4f4a06dd4f62327d1ee535691130824a677f474bd76fd2b0b8920adbb8ac9735cbd190447d212d5553d58e2d29e73795877ecb4928b44d65757a15b055ee11330f2e6526d4ffbf799fc8229b76d47ad36e9e0a045ca69145a6b584f499701087901baac43e022a6da75ec4a4db999fccee2d8a86572dc620ca555ec6bdcdc552a6cf535b14855a31c6c4c1c6500e1c2fefe459804f4b2e9757a9c331e3acd6a622f3139e0d47eeb976ebb0da558c9ab7f357fd6836a3cf0c19082910b387a523af655e0db9ad96eaec58d37e748526ecb122a4d07ac0e74f6b6eb80927a34bb34724117aa59bea11152ea4aefd6116e5aed35a255accc77ec311e8e118e571c250bbebe176288d1e19cde8f8b600386a3fc212c5720731deaedae646cd551b586bce7848fcc93233552f3b28b2c276372183dd7aa7ab20e881b62706e1dc793edcb76fc1afaa26cadfb1d05499104d79b149afc2e6b99430cb86f0e9a431f5ffed66773ccfee2d9d9832da8310ee679873a1c763ce52a064c49b1ca2c041b7ef39ee7cf0d0ea4fbea97c1883b185fa7770bab754d9fccca7bec0fd1b164091f5b4fc4e37a72d05bc88d723cf3660853ce7a719a772da7d8fde495b0e5f40f35b7e70f833c4c9d8448558ef74c80239e571b564e55c3e8957331e5dd2212402d46101728f1de183a8612ddfd8a74d84d239e1744b6f6ddfe1b6a286717e2e2f29dbeb2a2aaf57fb62d01c0d25d2fa0c4b1bad17800a25c35b619b196d2f4324efe99f1e74298137b27d06fca639766ef6e39c28f2167529ef63d0c4a6fe434c482a52d43a74102a8f94f2dbb185bfe008c918482b7ee31d2d6e071068c39a65cb7826612ef69030a628221ae30a088ba75d3179c756ce1143c9cabd0ec54ab40e7ad1eb251f534a6c23386d29e210a43b22c41d95b020bef51b28701f5d8fbebb832532974276a7241162fb36604c1e4388288a9e78db596f3322992948c4812c15b92abfbea8a11cb60795f390fa0767d1cdf49d94e3d6237f588ed97a211fc56447169cafef4875815be8dd30adc39ec24b01c2dad85219a55eb5c15cc2e47ccb4ff61c5d770fdcc1d8a89c48e5f5cb579a0473c360d3a8f28012b876f77ee10092d6a3acbb5093fa2b33cba002fa8b78fbf36628cc19f8e4059703e50131bd84495118b2fc3cea49e3773bfcd0dc413ab3eb40d29acc6101860e8fcc9f66f60afadca36ca7206e2b5904346dab9f7d32ef8c8d7d76eac652811cef337a3a97123d108244bb48963a81f97218a68ab3875242b28609226337f332646cb88746d3f629143f6b7e26ef422c8c9d3d99dbdae6eadf2314a762b0c7c592d7766b4e9b8281e34222151a9e8a093f835afc139e090ca3ef2bf072aa44292852b8d5b48a14715ef8eaa953986130b55096a791f1c7de81b3ef7b7df8bbc6e1c810a723f22d203a22b86289b554c375c8304eaae22c193da5ef3c224037265ade30c40eed5b54f3b6f2d4ccd1551267bb10f38b4d6537992f8a7e4059a884f987bac4e1f723d81f4bced4cde6779fb550f9e0e84c4e9ca51ba9c9d5b3ba9a84a9dd7f110575c9d74362aa40f9e53b174c2f224adab5dd28728bd31435f9046d0c0d09bb549d06a77dfb755616a1cf509e2f61bcb3589f0304bdad740de56db6202016ae22c01a675b28264e2043ef80bb2004fd95616134980bfe9b8a6d8461d44a1d2c982cb776c26c3b8981be9ed14db647e5185a5db658aba255f5d11e5e01bd68e1c2211b0810be7ff0922dbe4bd7daffea7ad566e10f410f5fc68becbd84a8ad95587c227932dd336b2804e57625e1fcecc290edd5e6f889a9e38a207cfb5c7edc9d8448890c03a4c55d36912f38cd8e80377fc27b345d2f4b07d27a85f10ff42774742778d5e32366a19a5b8d2660f837913d4e3790d7b5d1c70c6c6f167c972b8e5a0fba1635c27e85d8c9d2ba29b2bd5e02365c18bb71ee34381aba8e5d4610cafc3d53f48aac4ada178392d7ba7892b5ab05732c65c87a47100db8593e19ca8973c5b207d0e083e6eff989b23b6c89a0f7ce712309a36e302b55b683432d4cd7c62cca775ebfb6b5d0f6bb738804be5c012cec6c4e717890ba4c42337a8f144cee9184622377487a4009d2c7c06b97e2ae4698e12653505fb9d2166357eaafc68206f983337d21ce5620fcdf8cfd5469bfaee08ff8abe6a824aca64f27123921d2d705895770bc64e47b1e9f7a1c90e9ef87b68d2cfc944362d5b821d9effa2302ce562cef4445ae4ead8346d06908d23dcd4a08cda63100082ac99dca8c277335417c5de2e2362b71ccff6717d05ff7d46048f61230007e7721672a7084af4551886ad322a12972fda8ea710237f7165d0eaaf4c1058e8dc19663063b64d8ca0d7370dddd7edee02f4b0435475e2c539ec03c124213bd8acc1f9e53d6833251d6e14d61ce2e13ad0258dfd978b85c7e8e31dead98f9c31e11b08dc671f3c113ae8f659c9ce2a943052104ea1b21e88fce9fbac507a3f38fea93098fe142a2b61a3f46e2c4b1a9a2f550a944002da9d05586140905d710e09d83aaf7e1545b2bf307945b4ce8a4f6e031b0a4ef18c381c865b6504cc76e27bc019d9b2a53ebfe21cd867045977c03d03ec3b608bf7d47f30ba976cc3186c13c8e26c25dae84c578b3d5195d2dbc77eaba09f969636913249290339054b0590055f987b6828228e4806fd9fc30fcae74273905fd20d1191ae8123298638ad9e751616031e5ff156350460a1051035e5a5358ddf88886804fb726bcad897c354986e39e660ce17d539fb86a519c3148109c3a49935eccbcd1098203069303f60ce60ca60e29831eccb4d1854a60748f0cc17e60bfb72b303a60be66c084238c28828a820eccb8b487b2788a0008188274e7e806a424289e2a950ff559000f2a03d4d28f2f1444c2ec5119edccf91128da756a2fd67fd9faf4d3eb3f828da0e2414f74934425eae9174421e89776f275e296a7d5184141d91d771985374425eae89bcec93d71ac6dcca645f988feb4bb72b5ae769d27fcdb8b0a98c99155860a1c4c396f1d1c868c4aeab9ea5dcc5a698af5636b569689fe6d580fedcbeb2d83306fa3f0fed2b7317169e66733d81f34373354813ddae3c1408dab30cb8881ccdab956be2748be1ca27d3bb46690d1791a70dc28a564d53b189d5b52bf2744ddfb44dd74aa8a9a9fd0caeb9bdfa34f13f9496eea2e1ff8291497b46531e9ef6214ebc56ffc0513cd120f1ee4987c463e916cff04ec0b2a2864ff3995b9bff8e609552e9d69a17f37f7465b55202b26525ac74162cec0a7bf17dc1f6791addd3652f9b4fbfcdfff37499ce758c75eee493db35fc8193d53ce30f49e3477e485aed5d30ed0f0c651ad5330b4dc38dc161a8432d03a7638db1c66803d36819f88535ede3df0d3a47cbd0345c161a868ea143a06934b0f65a4b9362e3bff106c8c7deae71838e26810ddd723dc3b2d0326e0c4ec15ce7a4d8e858e7a4f048e1816764293b52768840c61b3a67ec89b71c5d43dfa0655c167a86b6419340e7a4d46aa06637fbd81517c7aef87abaec924a6bce117bc4e8966b18985b52131d245eedd32fba4c0ce2d3c59b68c329167f80c41e1d3f2ad678eccb65620d35fb1978ca6e79fe213cfcacb679e479b5933d862e13bb1d699a368a350b0b8bd029aa9191916ab4b28ae17eb9e279d6af8b6369ae8c2bc3ee90ffebcc28e1d5ae0065f0df8f88a311d79b120f4072ba2e13813a50c9052caea599881385702ada3a166de20dd38842e22aae251dd815eae79ace437e56adb1e9e25c07f3d0397f5a6b7db59a55b54ce136348f96010f5de35a2745c796e7d5ae18f98c3cc233a262ae0898882f4b1739b0c19b72ae34cfa979e89ab6e91b298518b3063c1df39289e6c088f508f05de153ede4255dd40c5726094815756404cb30dff77d5aeda41ea15fbbe25eb5935f892ada97a388f6e5281feccb51bb7d394ab72f47ad70a194eccb87d8b74425d9975b14927d39aa07fb72d4917d39cac8be9c85e2c15691e8e1d3ac98ec1da85043fb7294102b281deccb5141eccb51b87d39aac8be1c95837d390a08971225b42f4711d997a370f0821a928665a876d4ba2f47dd6084122504a644d90056a282a028513fc494a81aa8250ac84ea1aa31286030239c78a52ac883579ca2807ec6db9787451bb4f6fb7f6d79b6b06c9a289bffbf24a2c9ffffaac9befcfe974facb5d6863c205141a10cafdd72cbc1afd62dd7f9312a685f8e31c6d85a960030c873f13f983513adb5d65a9346e5902e65fddd3bf4ddeb040c7348ba01c79c73586eb30266aa248ae0a8bf71c8565e0bd37803e348ba01cb9c737e307ffc861f9a498fa230647bfc9954ca60adb5d65a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6bb3d96c369bcd66b3d96c369bcd66b3d96c369bcd66b3d96c369bcd667bf96ccb6f33f1627b11410517bfd61f983f080a28189124788a3d04350966d24e04bf1209a2607e3014b9155114de56838210b6f05f147fb0ef386a1d96dbac804992a5586ef38864819be79aa4b5d65f7e1d86f70b625972b1442f49f291fcbe076f6ff1ffe57d25a4cdc0cefc8380d4e8986b6e5d9ae37b57f26ab07f59d7f01d924b1d6ca45df353947df9d568ceb90c7920cb1e61c9a63ccfa61d86e536c5d467308764c9d22a5b50d94cad2c9ec139e7179c92af329f240c850a64917d492ca0c031572dcf1425264185cc8df172e644b91140349af2e48309132f2f2f2f2f26d013afd0af39f9bae73ff1f77a9d3871e2c489177aca6499ff976042c94f287530819442daf1092d5af47e492041850a152a549020c28bccbf8dd9988dd9988d59196bc2e5b26f4a155458c1bcc10a0228c9220220b1a07dfec58309269c70c209279c60020640e9a245ef25016c02b0730250a240bab128dc9c7aec9b425900155678d97d0d70ea7107905d6417d94576915de401e4132f100c8d088d404079b5d60ab0d62ee0fbf87fb7db0394190165862109a0084e40d900d28d024abb8012c65b20fdff6b0694640b257882284e0d563fcd1c3cc5c759d9809c7400788622c85b0079087214309083f9010f8000042290738ec07f8e80c625cc4088903bebc1d75a6b7f65f57f0ba650da2dbff8ffc91e6df95f149039c89c4bfb57ccffbf0d5158ce5b6046d027be17a88396863a64ffff3f721b1ef1e3e5743341baac2df74a27e42effe593efc96bd9ffffafb88d9dfef98f3bc9e74464db7ef93fd9b36f4b97fdff3f99a3853ab198a815935522454295572b95b52548a458255458268923b259b40ed9ffff9f7c9c5a5a26deb279792d2cef14f42cf3ffbfce29a1f94f3e5cf6f785e57f7884891711d24dc4b5b06f84d292ac35839c20dd586eb3e67a84323cc25a58ce39679892cc61da60df9288ff7f4ba280e11814aa8e18d28de56fd51531b8f89ff624daffe360179361b486c1ffbf921d918bffaab8868b1fcafe377addb3fefee3353caafedee803f50a423c83a2af1e5f75f534aa0a638be148c26c2ee2c2d63a11e61f4cb762585a50fd5709365ea3e21c533a21a3ae2e8d8caa8678e6d5433c135324a5f2e35f7f423b0cf96a85829b0f413d7ae8fc8142567ba79ccbc00664fe004371246be7b521476ca383fcffbf3638f14af1f7c8088a52a381cb0b763ba19dd06e375e0c8a63f8e9f1483c0a8f78faea1b4ef1a7857628205febdfe9ffdff1ffd7af1f4d6180d3ec83ff074330ca06344bff34aa82ddeee8e868955209da35ac3fd0063cfa642b6cd343db717474048369df7b7378ea1c9cde0b8257c96e8793a01d376a20ffbe1d351c1d1d45794194dd6eb7dbedf427748faeb57886acf3f7598338e88b22e27456b23382b3063f4aaab392dd0f699b524a25495e32cab5b0915b30e4e078b274cb01d3d13e4a29fd403a22b13681929d929d929d59337dc0700af0ffdb6fb7a49bbfd7ec61f660f23077983c983a4c1fb3c7cc61cec09481b9831903530793e7ff8fcc1c4c1898384c1ccc17982e306f9836cc1db305260bcc1ae60afe7f67aac0a461ea98293051609ec0bcc1b4215f0bf67850e1c145237353aef64e39f78039c3cc314bf0813aa78fe61173bfda3bf7e4c7b777e295e6ac73fe1c3db6585a9af166dec29cf1f6342bdc6e2bf4d8b271681c124288db2df7568ff163fc183f5ead60613fb75c76c1e642442484480811d1e7702445fd91bc9127f2aec8abe9db164274cbba7ff933335146773efd6934cd81a7fd311e418a4e0d5d7673429c9c8ec59a85b53a19837d3540c4e3f1562995dace1f188617bcd646e7fc3978f89cc1f0fb1e42cc0331efc3bce731ed71fcff8f1479a8735c847ce4f9a620a21b0d897a7820e40ffc720ff1968341f0eb81c887cbffcf2014f0fb78c831886e34ec61470a187e9f431ec8fbec43f99c3f639c032844444444444459e70f1462c1e7ab154f01dff2a703b44f6fe92d25bda53730bde5f4f6cae9b8f436f6bf4ab8cfc6e9f4a6fe232f5d6e2e3fb8acae1a5c38ae1c970d2b554a45245d3a2e3fb8dc5c56570d2e1c970dae9c95cbaa7259532eab8acb2abaaca4cbead22151a6f963f9285449f231d54b4551cd543e543eaa9bea079b5e4e82cb6252195f6dd56a41331525d553cd543e543eaa1f543712aad94a3553a966aa996a76433553ad26c85b605085746382e50a5505722ccd53e72673146d5f95152da6f412278eccc973a7559e16d0fc0261b7c005764fe1612a951a4b381613962ec54b398949f9aac54b825f58cde19405fbea92e42cecb2881d49110da57478261604928ef998a4631d5a09c762927292e29525dc9770a4126e9770255c0987c4c28ed818cc33aae62c8ce3b0653baba8a44837204f3173be3b2727cf1d948fe70eeb7c81c3e43084362f804318c2106c7058e002bb97fc4f13cfe4c4d43bf59c784eb513904d6f4ccaefe9d62f4771e8591ac22f5d02714e86ba898767624194ce984e0cc7d47b9a188d534fce89e76962304e40311a4e353c13930195c57499a9a762ea8926d264ea997afb74eb989fbad387ebb214391deb4e15897a848633538d507bbc2235094e4d54cd711c2188ce6cb4782c5dc75cc5e22a920ab97fa44e9e3b272fcf1df444718a77636e4f07f4cc99834e50a70967612c5d09b776590a9d263606737ea6c849d13a53e0a47891a2e5547bfb549fa83c0b53756a12271df314efb2508fa84852bc0f557338b6ac8433e97258ba905495680cf72f9c8b8e724fd76a3a74b84163565a69e9b364b578e98cd9b0b01c0b6bc56e589d1e9b616330ac8c8e713b437480fcf4565da6e6742ba6f066a775b3d3e225c873a7c5c7164f593971b84d0931c98de1e1195187d3ecc4ce88442297e12ecb451df3dc7b1a91d76369c61cec0b8fa30f4e35909d1977c4a4b937d64a94688bd74378c67031a118ea8cdd925c16b1213646248a0511757826062446a4632e627e3a63b353a66761380623079c8e9f26e6827ded9031c207cfc81411abf5181d1debc06f744ca363be51d99ed1b19a1b6b253446e34eb6acc5cb9d3c0b2be15a67eb097e614e9ab9bd62b1f46f3955d2a9169d2acba9f6fe857989d324a510d34354d5e114f37368cb56ac73e56c59395b5c501288b678ac4e9a58f9b34427cf1d162f59688973bf90405958563e9daa3ac9c2b2f2ad906e5a4f74abd7e2b14ebd6f04b39330222c649dd6e64fb0836189d315d6696dca33cf667d67858f56d7652d9e919d6bb93d4d8adaebba4c6d59795db673d7c22e5f21532915fd697d43aec14f45c524ddb0742c5dd6f963e970f2a751a8d3e96432b578ad2737252e842d5373bc8eb9cac333b212aee35c129d5a84676415e836a6c2d7ae9458a7b529715a9b19da0ab7d093b366a299e47c4df081d8da90f95a5cfaee0f36b4c13637058f5dc048b226bb6c638c83b0538e9031fa814d07c3d9610ed7d824101788db3bd9a56e836c3c10d9723881ad053bb0cdc044d866008212c3f5639b48b0905d16c13d08f23fd8a6cf3582e306403496009160070402308a08583708445db6837e2cb950f6d86dd08f1db4982132830de625c6aa148c61a3b0820f3f6e7f64a7741bf443c70f1c4060a6e0870e911f31b08ebdbb0dfaf1c291ad2a7a26469404fd04e9b2fd38827e6a1b28e867065db65b10f46363ef1df47382bddae62ae8e7033e1bd5cb6d12467e063b2c728fd826900d9b942307b51bb8033bd56d502dc65611c22562939a7c3a3f0a2b1060af38a964af5bb7dbed847642bb9d919151cfa8676484afddc1e136244e45a27087e425d1f7a9fd43475e12ad6af04b4625229a41da27f9cb2778071118f1d163021e3d4243a4dc40c7901c2f784c60d478d0a0a8c96e090d40a0d8154a8e1c3d2110c110517e6631a4b28f1ee4201fb59ed26d900f22fdbb0df2b176d27e2972d9c86524977d5c1696b7bc280739492a9538a9746f0f3399630e013c43cb5ca6ca4afdf22fe7acaa2add06dd6c5055a33555d51ab5c6d6a832aa2a53f3afd6906cd8aa7a8ba2821de83275fd22cfd59a5bd322b7384bc0e9675ed3a2a685aec195806bf17d38cb02f3dc6b6a827c08ea1995ed9a9e9788427ab82e987f189cca0cede7df2713869f9581b9a70af3321706d35c1bcc652e9a92a80197c14000cfc8b00c86c3d817e621cc26024606b3829bcb301fa9db201f8a7cdd0209e51e66452efc4c414f2d932a951691b34d142d1d456e712274cb370bb7dc846521e26e0c2671975d516ab55aadd6da6ab58a5aa8219698a76ed515ad3a9dce853c775cb83e633a0b8b1911ebc578ff2ac2291ec2adb9df79d142633b1b835d562c1c0d426888101da36eb858505c0b55579d93ebac247abe404578e12670e0d941f449a1a4bcd90be49fee0b0776435e45385520ac0acc5f4eb5884d81b989531d6263389cf250545d752b0ee90e294f8a43ea93424979af17f08ccc8e27f5497d78ea634a7dc0d4e78503bb0185dde032bdc849979a0b90cbcd15836be6a2b962b04a9058a9905c39a98dd10508e57273c5e09ab962b868b5181da90efcc68a06c9e5e6ca496da436ba48aeab2a6722491617cf49aad7c353035ae1b2181697a532bedaaa1b6b88b4822a27bc544fd5a3e25101a96a2ba91e2bd52b91ea9148f556a9dd533dd5ad63ee620d9158431df39c4a6522479144d57555e55a482c278eccc773e7244fdc94c2a5865246c6d2ca5ac2caa592a49688644b972abaa1d0aa4aa5702923312044701dd350a595b524b52495442cad64692dad29a5b5b49656221636c4c608e1b4282ceaeb6a52995439f2dc71f1f1dc31c1c5173854cf595c3a225e0e367c769058a990ee3dd552423a13674908bc99682813ef94c3c9c669c7c987046fc5e3d1e0cd30f156275c2e89d065a10e6163d42529a16ea2b1d9baaeb915a7639c4a64c84cedf18a74b921d3a90aa95075d5ad672fa7cba95ae3b9e3e2e4b9634274711613ba247b66c2953a4d6b6ea5812e670a9cde139cf2707aca59988a5385907475089124ebbae6722b89e6a2229926453b9bf2dca0310346cbd9da381676cea0c9605f2ed8f445bfede8701a0eef3275c5fd6b6dd11559986a646354263ae82834365bcf73144d2d2c4339242aba1d1d9e1d48ab7d1a7d4a416e8c09d72ac2af96ee86ad3376539d315bed8cf958188efd88487888393c13d301d4315791e1c9e844ddd3c45c1877647aa3ced3c8341977281a79f08ccc4ed48da28e86a87b5107a3639e22ea64e8989f441dadafab2a14e4b2508128622a05d9686ca65b75ad22dd8a659f2cfdd1535dff35c4394b0b6eed98b75a56ce16b46c7592d4529e2e24106de970da7a295ba7b56919cf9d16275b2c2d2294adf1dc69e1620b1ab64837ad22566ed5e572ab106e28b7b65a2d165d6e5d8570436bd18ea72bad50b64c5d75b97515c20dad30650b26b65aa3ae28b7ea72b9550837945b7545b95597cbad42b8a1dcaa2b5a575d6e5d857043abae685d75b97515c20dad5bd72a4a21dd94d655975b5721dcd00a7efac432636109cc30732a36159b99337333b47c948b9cd8146b19ec4ce6e11473169fa769912cd735f0cc7e91c24d14b75cd3d02bd03b3a45f026b45dcfce7a10432c4deed1e81efbb23cff58201eddf2acc3ce94f8c994c347fe0247c961e03625b85de19693f65e8c7366e950e54b853b2c9eb35e81fcfcb9ea3adc387d2c71c4a50e77c951bd3c7738d767ac67613334cce0cccc6246e01417e972bcdf79c1e23084362d513ae6b1226c0ce62b9b172f60506d4af0965d922344340bc36789167eaa3ad0865563cb603ceff3afcb599ea7c3783a3eb24fa7f36c395fb4b8380caa8d0b47531e692d052ad3db2b86d7ec457bc5787ec1578eaecbd2531dc2aac0dce55497d81498a3a77ac4c674389dfd0bb7a06acea6c08196f24881d25a99f2486faf185eb3578c579743a8544b5cae69c94606000200731700001810088543825916855920797714800e5480485c583c9a4863d1481083288aa220046210866180010a21a214424add110097c407368c02c65efce8928e8983c1b7e59924b2a21c902fa82ec00be1afe8858f31bca848c8c38adc0c73e504c42015c2d2aaa187cbf341286e0c183cebb3873315ae39265ca145c486508e9df5537cf43ab4f492ceda37c7da75b8b34b0526e4d0e2d0e87d274a7116d8d4e33cde805a05b1be17d3f0df15c2e44ca23cb6ac0276d484aa55b92a11d974ca8bcfe64797cfe24a7ff363aa8990b996eb63e198f6b5d005d59f28394a658be3e9471513a6895015e94fde3a70a67d4714d0e3ff66653be28739d4bede2306a3217316e73157ddf75a14044067523a5f5fa8aa5aa71689e9653bad13c12a126c55ebf47c4d8fd397012d02ffd09cd5f3414c6b83065b4d21c41980e5f4f69f505bc1dcc07dc13843e81e402a00f3b528faa0c8f4eb969e92f83f6444bf5c5b7aeefdd49bb23ce6082569080a8118de026b62f566056e53f2966c8f1f1fabb72c0f05e4c21d5310eb59b7144a24070da7857b8b0c4e3fb3f9d221090773162516d477cdaf782790c2fe296a8989e64018522b9ae3b3e17a65bd596cdd42f77d2de9eab0d5e485f6e346135cbd90aad89f6ee1e7e4cdb0f705375dc500d34e52192546eaa0eca634e05576e30a7957e5c99690b680415ca55b238282eca8c0900470b518b0c7aba69c5e89a770abbf96605532b59011fa8a1bd184c39911253b2818258d2991b3c6b4bbc7a32323a4146c151124a4ead6eb2799d0303e420f0ad93a8c5c4a0d512f3b5211124f42493de6a20def7d516c21e5bef70b1e8b92bab009a64c9145959ae7ae499eed877d6437a14db740128950ec9c0dea11528497168d08f951b39e12a97a7222260d2ba80e9ddd19d0064a75a3dfd8cf9748f8224fa2264b2c5483991da00cb04da65331bff8c9ff46c0302bbcf303cff86665ded05615651f57de1b5fab887419a3d917bc0f36839e707ec6990d922569d1b238383e8a7237adcd753510e2a32507453045b910820222b54aa137a8631c4e875c874064f1d1385f617aa14e81b7da73f00800edee589d06e9461d017fc030be278bc4a1b463d2a85ecf659d3aeae3ba14115c7d22aa4b23e98c30427a6ab9d844462a327d3012293782e3e0985a682b0e85d7977ad920eff6b1c8d557803dd3bc964a11f3d555597d85298cdcd7d0ef5c97b3eaaee9f290a19147a513968f421af08c7aaa471123222323b7a1431d30c187499f11294850a1c91a71ced12974aac69914acfb99ec353a99900ac033d9585dcf56115ef93d2c51c4ced110a76e41c9161fa17a49df4f2af4074390acef7df6a1f48b0c18d019fde568e1b7d510750806332a5aae20f6056d9efd621a189746a882347b60f918b14a1301d92ddbc539c5b83630eb66c6078bd140cb2ce23aeff5bf344329aa1cfdeb088a31fedc108b0763208e683d61ea1756db53fa626c1ed1da8b7c8d41862350de02a25bc218b0af394d05058080a0150ca8040213088006008de0af07be37845df4c17fd6b14c02a241ae4087bdc8a480c8c1f3595bf07a806d3b2a8f14a97c67acf00716b615d0f95c46cc9c66115cbd391c3164cc70e14a191087c821b099d0d8ce0d0d65bc8b4b29f173c292c8a1ed9d5d3bf3f420fc558020e3d802f54b57f93fd16c77bfb704c9efe16026c913428b6337cfb263a425eaf905a26bbad029f48bd7a78b8596f507ca5e35a544d69c657436e36bcb675424a362a1b08f8906e4055cdf3fe81d1220a90a806000a724591c273775b32c2574e8de51388e8a6b6743e9331a5817c5aa9ef5d4ea0116a74cad789e377241474a08772643a184a0071479c43340235be094504994aaec32ded4f2191fc22e3c57008815e7e18cbd119f07d2851186415199c32a12e65e8086416040d7db78eec5fa5b2ffe5daa90b3df4ea5547c0a830c9a30ad2a6476c53028d034bc80e8ca42ec520ecf104b439484176a830d008b2469dc510f063234b2e22736a1888f97320eeda25e56883800c9a76ffd023b4f0d93cd0f6b8c3090f62410fd123c62ea1f0e40c1c340b1bdb62360843a0d549372c6a9d88781b2a620d809ac0a4fb6ce1bc56634252b6c69e04e0b34bac76694686313abffad5ac22c3460447cb7b1a6a7c34423c6550a9b30c63634c53cbf24e53f11a965a1c3cd02a0d0e194fa81d15c2cc5e7f94f48b7a4794adcce62d84852ae991458454662620a4a733aa22771b2f265f1368fc4c63ffbe9016dd50ed3f80665205f212d470e8a382d3f72f1e0b63c8c63761b3b61bd9993084dd9e54747ebcf585edda7aca5d91a972c680e5d7085d40abfe50c14e70e2ebb8c425ec3821023802ebc4e43b696ff19666c2ffba48ba0e155185b28f919feb983e50144bbebab10e1933b703c023a8fbc98a5ac785394b6d4f67837ef457b3e2e279b6ed784b84106d49ccbb7cdb1fbf0797c8037d5de8ad3731af747b922824736a10699012e1ce8e220bce0d09850a8b5b7f3f79e188e539899405675ef09d1b39be4e2319a03c7849b7f57f2e0f2e9a3a0fc8222fa5bccf01c09b6f784b6855f9dd615a9e05a71d14cea442f5c59d270aeb31555b49d01d1acbe43b81ceb6629fec052749e0710a67f916a1d0dcfd35bfe5b8350279af234d8c83108b328ece00e236b9b4f203e9b0d88c2f3ac2a0158c53b8f5db467c2cea4d43ae8087a1782e7b9476b6367ed8f4e26aa5bcf56e5791eb061b9ee727ae462b91e50689e478f3790aa198bd820b7680d54bb249a9614930a2cd132d376c92a44adbe35b2f0054ac3cfd14c75ffda08d1968b0482cffc44aefab9d5a0225845be21e021cb7e69024604461ffe7d18e203e6e7705ecab9de8ed0af38e5d2f40b517a055ca4ca0479d97720966ea0150a4b6daa474e2b48d26a9be201341f8b102b328824c8b7f2d7bf0984b466a2a898c4d0c02103fa774524ceb0df1374a2a1843966247de6c25283fdfd415b995cf28aa07bf981f3e7bec7c833bd6a4eb9519c2ab39832e754a42f3a08ddb185dab77ba4b329ddaa4af9648b528c5a9f8c19f324a89cc92298b0f8b24357b98465b2375e5112505a4a89da1c616dd8310ce442d03ee50af7dc571388124249114a83d1982260a379ba1d9554a286760b15310bfbf267a4567917de453246ab80fb1132d877375e6a838081293ddf2e03999dc12ce79b4207b47a2da3d6a0972b212c26bdc9da8c0b1b8520516aef2cb44250a0d65598cf351c1c020a398f94f4441b46facf17c8cb180144c1dc3da9c215401745124b2a8e361926b53ea93576f051b7c4c60565b6cf7fb80399c7285e0690b1bd10250232189a137c15d79d67cc974c28be805379f4e2ff3aa2959e0e42c408dfb192044bc08e481da34204628a5eaa1a9c69db2058a7241a5fbb17726b4e358154ceab4bef3be12043ef93b2ed3ba4e76b2456fe71e3729bf2030b899be6eb1c1a806209fbf8486f5477529ab9601670a8529e5feb028a06a36afc1bd65c2328a65e3b037ee12df9e08edbb1528c9fbef3cdb30d84b14f497ae2e1a593c906bae15a38cc3606edfeb2d1d9c708897c8461c28b7220d4ae2bc6a7344356fae0935f836ed1911df93b00472a257ad6c7f83ab27c4247fb5407a45ad17210437763cf2edc80c559cc1689ad51a924fe57f2571a977cc89347f1921b3566074303b31acc921259b4be0e69ccc01414de930280506a48c278a81e5c7f110379363ce52ac12be84c154e1ffbda20acf6a005971617167af5572ac6a95984d9abe7e9560ee22b699f645fd65708111926887dee859be0c10c01c2060fa3103f4b1ce9b7e4f52a52f88582908c7f6bd5cba559103070f97cf86d0fbbe911912ad75a8aa35a11db9f54ed8b9cc018bfeae06b2122373560fbb54299ead42f9af31ae81c8b0a2f01821f7c3f6127cd46d028aac17d5522fa6a73d2145ceecca7cd10d3e5eec6265798cd1ee1266ed368c61b71af7817ece8813e1d72bb00be046eff600b057565400b14e33d495fb7649811fd7bb06589db710946a94c80c8cd015e6416b112869348c8e18f276b3712cb88a473a28da1b9b88f5a8966402607f52eb62da5b9e84971ad88ca688e16b41759c1009f783b99f6d5c39c9a998e33465bd4bbc1c4a969367b1be3929f40b5c11d7092878e72e35a0bb11b4d6500e387013a4fdecfc4361a62f3032a6a80f7e0d36d1cf0cc64acaa4e7aacaee55a7c0e282783a129d8f3d7199aa870c92934a854f0507a44eea67f79b6c75ad50e2e9ea8adcf016ec08f0989006a59a2f3fed47f2e041f9c1da72467a76224dac01c01a9436f665189eed4ffef0a0357b94f7a7cc4f24967fa080e4f01fb2d18ef339af8e5e75398304380ec530636d2ede229ede9ef7224c0e5ff2e42160cc6837479510d3f1eb7632b6cd0ab589fa42c989458e319e8f2c83176c59844fe8fc447b5d32f05517b3947cc64e0f3b2053a6f6a92d894419be55875736b0996c210242fc622f5465b132e71cd501be7d0a25017cdbaa0a143a2f35149a8e3dbbc4aaba29f01a17213cabe7f96382d7d4abe3b04382bdc4ae6415f99a1b0d6a40e60f622771270698f92651dbdacb194509394d4889cba26f26c0def5b7be74242ba0e00caf868303f9bb022ef9e288c92e1d698c2740c7f5549d7da228c7842f5e2813c16c0dc4bc4e202e424939bdff69835ffed97fb67de9c10db9b434d3fa63b273f506c3016be7ddb2acba8e6e8891b69bb523016f78b703f4baa2234883bb189d534eafabceb3f060700fb5d028707bbf17cc737cb100c8e20555a67fddd2d2b667bb3ba40452e760bf11d8fcf22171b11f937e337c3f3b673ba28a3fa0c1a5e3a93de4568a8f22d333e2039e90ee3b4b9863b79e0d3da1605498986a216367a4718bc8c7c74548e8b161c21a50037577727414338c884f079df20678f595b565b0c95255493a5ebb295eb7029d6047ad02ac2bbfca8ac8908ca5a4a29c7ced4b538995e00525c7be73996f02dd1a95e728cf5efeac53c98d792481a9e31023009df15c81abbc13d24729d795368d456e4515e0d9ff1217699930091db4c19d49ca17ec19fc11403cfb6c6bb71016e25ba77f3d5f0f454f2396979e09d58fa2b33a55fff0ab4acae488136389411cf49ff987f4d6d38689b6f2f5b9eef63fdbc54a914c254f539f809a0aec37ed5da0f1263642b4e40c5fc6708a906c671ba49bcc7fc045be2af0b0fb6c8ad4c14276116539316cd8d756f2a99a5094450e6a1f950c05d81ed4e64c585aa2b5dbc1623451fc9c148014d3a85ca9ac3b4abc3064ba1d08d4168e5a6c2acaa5574d0b2b0bbb260c745e64666ba44aa20e8dea5c5288d3494bfb038794c9608af43c2be01210aaf1d2453444b3d995b51bdf2a1acc9497049b9949d18d9ad3750b4acf6ff9cce69d08cd6e242fa8a031cd2817ef5785385590e6788500cd2eb622cc9244d42feaa0065e4a40c8bed0ac81fd6d4831e212ad7a583784a967986a64cf70bb88407c8488548f8201a51019cb73ec01ef0101a2ac10319b1d614047c08bd27c52e8a97ec8f9981b4780c783355e248efea31a85b39efd5fdac84a08b2e2586ae9cac6d2fc63060a17c15a14241fda7d659dbac026dcf72f9fadc3ef6a15baddb2135ad26ee4a385e4f10acb930a40e17166d3494585512638494c76d238291160ab1cd79a173663223c90647823de3c385c2a6a620d2bda110ce563e663e9402610321581c711b86db775d834cbc58a74ebc1a6aac849856f03a2f911df04a153127e286239a8aa31a99fa18aa64d603cff7945b7bada77d6c0f923ca80d9ded061fc83c4116310b7a5dc03ab40b0ac4c22073e8e779a0daeee2d3d665647ac69dfbd95f0824cb6d43e256c06c35332f4c0db40c29b1a3925182d0610ffa5ad8f2e13344cd7462dff28a73b0a678cb51431559e2fc4bec0b909aa3e14e9a8835074928df2d4b0cbaf02403b86377174a823247395bcc4b5a3c854cc78310c9dbfbe5dd1e0dc34b0b7f809810e870824ff2a7f96118fd22db306e2e8353590c7ebe5b4a5630d3325025fd684890776ec08d23000d8cd8a9a1c958d668b1ab11134ed094945a7547ba4cb61ee5009d8fdb4421b67c3fc2e833883c14e64bd44f0ce742019e698aa0d3db6a9429dd83a968ea15835180a46edeeb9ea4fa4e9bfe3dab5b21aa6ea30ca2a140437575b31964edf403f911e142e0520bda3e2bc19b46cc7353a41e5c07e0b764b00f7435793cbf1c384f01676af26d5f7f2b09f951b08dc17ab269e33ffe2262ad84410de564a1b7c8a2ae12dbe116edd1c6577f8b540bd820cdc85554344a12b328c3604bf52388d2358ba5436048c22f9e10b5f41d214b420546232a1e327b667fbbdd34d1479c683eb6ac030c74b56c9124efbcd6329a014c844c85216d2814a0a9a59efa50777d20ec49a53b70f9d59dd587c69aac9baa8bd7016447e88d114818285e571ee53d73671be35d1512fae679c3ec2ce3bdadeaf0e451c4cda477510495abc339033399c57aeac17abb57f67875218af2375d61f5ad168975812c880a1f97ed49d63523591f2554c9599d8becb10682e29f688d1c43b3bf4b33d93ccafeb3d25284585da715bd3b218dc29267f2d8457b4c183931cb8384f7303a361e0a2c29e2284fe432e300dfa06750e9175a9e04e19a769fa81ea787610d4e2c9d483176c01d779d077fd06da5ad44e76aa75536ed08e64a54ba3db6774baa9d0c0497d64b9341ba11574cb3d860afbdacc1377f563362b5062fdddc884230886a94a6516f596efbc80b3061c19c86839475dd4dc012ad864043f044398b7aa28c70af8928d207e620df8e9e6220533a97c6b5a4fce45636b7057d7aa72f655851fc1ea705e9eb036395321387652098c35d27f499bfe489c6576bcee36783424237ec63bc879c0955903210f2ad2643707d126c1146589fa4254ac78dfea9229b4dd9274690c75c4cd0baa9bd14231d509e0e3d91473144a246d02a58359eb4cfa9728e57162cdcc731925f2e3138d418320d4191a32f68ed82d0c43eda0491e2b5f28f74705aed4015bd400e5e270a4eae6689f1af40b4cde25785901e5f49ac168ce21ac182cb57b2480ab4fb874c495ccfe2c0607f7cce684a9f5d8bb078e044ceda82df99350da89fb767917a2a0c190aee05dd960e70d6e06a0f5ce4354f9c254f1518ce1163ba087441d0797d38c032225b0762c1e16c1b4833262d3aa4eea0937f62b730b14a1e65b7f4a6ecd755c0ce406fc63447bdd837fc22bc8c4a33217a55cc2d736b026b3a76fe7b5b1ac23c26b3a9a81ce6721462a510094a51f7de65d797b646a66cc56940cffc74aa0d81a608642c11a72c45e26444d49bc3c4a50d327a775cd6e77ab2e8ea153036bca5223bcfd8c5b6143eabfae3e3c372ea9665e2fa93a28042ed421aa6820d6957648d67776af9bf8479074378882b24759fdd5b1bf2abe47c213017cd48f9079353e48102530fa12ded24a0e8b004d1b76efb5a202e8af7971fea46fb26d0d9e0a99b6b5cb186194b759bbd6122ca58e51b4486e8b2eec1c70e1798769d5f0a9f26b8ed93b8957c1a191be5663967716c17dc301c119355481bca9ae191e946a83693a2738ee9f22bec930b0d6e7fb4a6e14a91aee0f09e60e27a6c17f63bd0ba6747361339598811abeaa68ce6f52894f0ef4344609c7828c20aaebf2a7de51d3e0d7b9b9948c6ca371084b81bece3e628953ca9e101f28ffd74d4d0985729d5b59946ea49e44a9c81012422b116a03a0a11741bba11332d62d068cd64514f0d96f73b57c48c695c1277218680560d1ddb956dba02b3b8981beabd69d9b3855d08cc44192f2f0cb05d854644e17fb82a939d6e2fc2f6e8eb0c88345cdba3ba85795a056da5fff84c72c976c521804c14051bac54016444b5affb0fca8dc185272d5f6ecd6d05f50cd5ae8ffc81a8416b9ebc15412dc004cf646042b64066c933f449ff8b741866b89a7a5c6ea934ecd08d540d05e444f62725a07ab4184513a1e6ba29ad81003bc40de4a6a6aae9a22947812039b672a6cece40015d6829dd875311d8cd147ce414889c8853da32ff9c53742a227b8a3126f233847dd2fd20a9ec1739e09faeef42e1fe923481c9aa2b01d320bd3c166df34a695de04281aed474cadd2aefe4a5eb39762b116dc8675cdb5dad7c9fb46985a2220b950bac3ef42e665449901e1ece4b913e360d0e65506e6c6a6685598d995f5e1e2a8f97650c33b5de131310606e81b4c589b2f56afba2121ad349049f0559d5f5a7a573736f2953be8eb1554ad3bfe588a884c6eee9d1e86497297d803f24bcbd60f9b7c308c143ccd641aa84db28605930e907c60f455b32cad3622661ea32ba904776fff3bee94b9dc193e9e06cef31b01472c215f202ecca3d307a2ad1aec27323085b36b3292fe4d057d0778337846d801e9c5790654b0dd1deb95ab33f341ad1da15a3cbfac812a9399b96636162e6369701c4bb40fad6be8b9612fc9d28472511a51ae7dd8e6905873a4727c39d41c2a08124d33eb3041cbcb491c86fdceb9b7b326bddbbfbd5736b32b0c9fc2a60dca019832ec151544509d47c0bac4f25a6c8cc0d065c356cc0a179db698aad9ea427a420bb0591ddf30ef3e01f4bcf108242d54a6c150b0b25709b1eeeac93ea3b822ac8738bd0d24506932c5dae5ad43540106521f1d1ebbb5be4bd57f035ef087f6fbc33e0406a1117af18cd02a6855f5129e0940c16df38e57d7306c98ddc66d5b14f1c86d2c8bc6715e86fdae03435dab7b737805ebcc80a8e33fc62031591aa60f7a4135a88996b5d8a1629e7274ff648cef949c4ed6c54f7ad935e2ad16596b648b8bae94e63a275b611ec1c9c9d3c46e604ceebbfea7884be3908f6f9149f449b185037c4356463e74379b4e8744de75b5bb52721f0133b11c04e2ed19b4b4af4a3b68a6e0ff57bd901606df481cb544b27607ecceab2314383959608b08ede41e3d81fb483c66b3f0f4ec4d17e9d0407a47a18cc65d931a410b601287140a3b97bcad3c65239a06e4a9923e4c4fa21bc1d4ff58d069d8052ade87016adcb7896b6390d5cbe4e0b9831d75ccbe797a9f0ee54497822f311f9446ecf3aefe8036a7802f57134c2f67c35427760586f30f1d65008528e009329540bf0e1a1f7f059b4e823244fd2d0bd522a0d6d49f4c262267d2824a2ef77755b1c982dc0cbc18b35cf59606ebeffab53012679fa015fb8421f7bbfd8af4cb78e5edfb39ec28317217bf43ec9930dfed3519d203af8148746040c38cd54fc3e4ce69404ead1d29ddd3f2f51a69284ff4585440d778f18b1d521dd36efe85bdbf4dbd94b7d4bd6b167a172d79e1386afd44776b4032e98e75e488878b8a106b00ab8128fe0333df904fc33314e8e0f684954a330ef993d71713cea7e15c5c9ea72bbabd09b6cf7c61635509091ce16063f01fab94115c0b7b0c40a7e820d4489e3947794db8b26f4b1c599bd0deddc2611905a545b5ae7bd37771987f8eeac677a792210e4dce2205ff95ae1fc9f90a1c925d3e2d9ed4c8d04ae179f67d32d529c60340899444499cb7a5dd0dee41430a6a79c37d1d04e25c12c8b99201d290f2889d8a916f6ba34fd2ce2f855c4de8982ef3d62d8fe099a2235295f68c2c03d2ca54d879b21405bad919e698fc20920ffed0a74aba316c14418202df27971627d87a523431b1350ebde345457b87d2a115000f7bca1ac31a6064735a9ba2a12bee3f44ce79e8c458a4022e2926a363af11696b3d4808a326a30f9cf95870f87e9d0b87cd8d16b94cd9fee56cbea682e188b88ce01af251755abccbb6ec25c2cbcd293e96205920a55790019471f7e28f34a8d3c6981d13312284e6d492605a2a2d9db39a1b3e4c6ee23594df506866d811dfc9b8c329807467a953ed5dcc4707c2b45a3c49a2140f3158d5659ddb1e43fd0ce71c7566eaafad39d4999cc2a3da1f12558516dec73d69dea4f52e37e4a40fa262d877516658009d4aed55f2daeaf7260aa3b58ddbb0990f8648249849e48b5aa071b766074fa132b170d49a943436850e2b8c2a2f23355da113f20849b37826231518d4d32da7aaef4e1b24a3703b94bc966980366b3e7a1e90b3ddd99c64330fa0e12c56d98744fcaa3437355ea0f67510d2b32809cfb34b06d51fdf86c119fe5b5d617fa0ed162aaab5a5e3e27ea1d5c811f860ee6c0836ac94694af8018e6abe9e5a814b42f05e7bfe8bff773417041ca34522918f58244068b6b688224e031cdb4ea3f9512105a33288d69185869da4daed2306534121f30ee13e8509ae43fee87529e9b388d97e102e967a2577cfdc58c371fb16e0062a1a206f2be2440d008e3a2abec9622ba27bae27d0511accaf6b893e0a0247e8742348e548aba3894555ce81ee251e29a0b6f623d39829ee6a05eb7aa2905c3afec26f17da33d8d34617475e8747e5d8c0e017f4c701a9d3b4a97dc38844500cfa3a82446ad401b8635ca5a7958572fa15782d003cd900e73df0ba3c6b624fbf02c5d98eafdd65c17559e4899588538d8430814e81659d7ba691e1d1a85cfc41689ef63a6fb13370cd28223ad71b45626155dfe8ad8fa1deab66871007dc582a9bc6a07f4ce58560168e4aa51751db56a88a478158c2e881de80a004e9745d4f8f566485aa7d0b5c7f4a688b861a4ba7c5b8852bb3787c7b87cbfef90ca08fe43f47f2fb21d72e1497e1585657f2701b525f6e5bc74a4caccc313a35b8a5d60427d6b1cd529f4a85dbbf966ece7618796c78915cfcf4a4e59af0a461e75c096ff4cf10b475d32261aaf26a41b3ecf1ebfb53e076c9fa1b8be2b6f5dc0d7310de754cfcd78c0aec85cd5413079de43e7fd3bc851f840afa08b1235782fb6cd35aac4dd143d3d990e1fb451dbecd7a153d79b63443feb712a705c54133d37a3bd14d57b8b9424bb78b37d307984dc026dca823bf40ecebfa1843b7dffecc99ca47f1da90873801d4c8e0f3b5948cdc36e0bd773af9102800f8d7f9a7041797b21ae8fa4ea517c5abe2ee11ced97a28d528f2fb3a7812e963d0500ab071e7193ece48756607933ebb433767d422349ed606c1d27a0a1f53c351493a903e0af24948b4f6a68b806a5c4d351ae52107eaff75a3608da886a859b0d11cf3efc3861100565149bfab732a95ecdf590de287cc74d8f2785bbbc1c08c7bd16bcfa0a79164714fb430dd8e9794f16b1a73765e4a7562b8e23e9202055d1e4cf589cdc26a8725e2c463cc5db22efa4c8b70b8ea17960025f059524b7f03593fac16982e179ba182f8a29c150885c89b02ad2e423f1e93c1d169f9b0a0de81e80079ddea4b99c6e0b596b229a6e103a4fa32bdd7e1beadcf5696354a5dd143f68fe881feef97c96ff044c3c0d2a7cd2c97ea938c30b817d99288e21ece9f462e3f6b9a1c2f5881a84dbf5cc0c7419b9037498d194d457fd50559d5be998cecf71de6a6ad3bfe98bf83ee379f28e9df1ac49d430cd54057a9143a449b6a69795296255f089f3e85a3d3c8ac9be58c45a854d13627236d35bfb66c97ad7ab5929c9f567224091d5a83a870ac56648b330aa03ed44cc62242b4e9445b5a5f925ba3093cc6ffa3b359ccfa009a86c11443db6e00506ca3f7ed073c54350626d93e809a621c70e5c432077fee4966e380ec7dec6e64d619f97011e39579897392781b77824108440696f69e9c1c0d60338eb89d5bd656371bcfb2a10856e58156930c2a26dc58a40c89ff38acebd2ca1b050243ef85369490ac56193c39332c8431df2ece549f57c87a41bc8f7fbf2af8cdeb2f598a2209202dc624b2ed0e5c86be21fdb43606bf8cfd4e9443ece1227d8eb380b3007c42afce8b30285b6dfcd95c38d5c24642266c6c5d25e85dc1ccd795d8d94b0ece4108ca766c3e5f38ed617ff5f088cd5ad1a9f3b8a489f3bac5124043d5d70ba3c79b9ec76482665b13765f602770c89dbac41a843d1f6f304e1bf982d6a48bb423c1cafbab3037d990635cd90be743ba1f7605a73a41507d9b2b284cdf00c11fa4dd7e0c509ec051340e6605baf127f17bc2a61c5901fc3ab6f9c318043d150281222c3b8292d484313b760969ba8c5f6659f22872305ee4bfe49517cc4903ba7d07b6411bcf2c97c943d36f94fe6e0423a9ffc5d26e3b135594c0de699786c1ec66c51949ea4e094b8572487e3153148ca1953b480556347daf4590dd53718bb1e336259f13531ded729b008cf86f7bf5c57ec9afc99f5700988ffe7b30a56e4b5b7dcac3c9eb0025c02d2dfcf516af4b40c0f582b32ab1e86409a88f0fc347105522a4bc9ff713ae46e92ed18f6d51b08e4b45400a01553e35a730860afb89f70e6af6b70871694adc2a155c5e27500b6a854aefb17ca2033c5b50ef4336966878c2779600f30eeabb1409d4fc9767fe049ebb8b0b1d4b33f618fae8f4a6de4c3c5f55068ecb8ad3b40ff0b76b481201fbd7cbb8610ba52a0e3b81d4c4b97013153019fd4fe2254fc490967a7dad9cd40e428a882dbaf60f626bb1d712c0d6ec16c075b5b38ab4dbd44009f0c30350e3e804bde8ddb5497c3094adc9d02eac555268ff2e43fb5ca18fc006d83abdac87feb7b52012fce02a172d6a57f03a8a0e4cc9e035ca8e1852d9147a69498203a5a44d3a9268b207eb6170402556c2efe04e68ad58f142737d602093f4e59e2a5e4d4c0b1a0b065daf32cfd5f5e4292ab18ba5b52c5a334b0f9d002baab0f118aabea719a386bec511d72cb41e35431e42e407919715559b7bfd3abe5ac2a1ff4cc5f42ac698b926242b11c2f4d860ea56f0b32c636e1e6e9db320ba2f9a7284804bacc60f2c1456ce43a4624616b5287f6f3f70caceb7148a37209b1a02123147858c37f5617fb4b0705d444bd69146db50b2d9bac278ad7f94a0392b8be01a28622ada4ff824948b02180e1807b998c49de4c52de7c0bdac238706c439cd36ca7509c38de99c7cea577e7d0c01dc6ffda8b4e44ca8f579b39491b9198a31d2745d141339fdba74d1d39a9290238c58c41b4cbdcf00c22d3a2ebb67b29f86632e5d74d3ecf28e99688e44eb8a7282e738189920663c277e2ba8ca7e0bf5a6861890ad3252748faf19a497fd2b1e11ee01367033221f883295abc0112023fb10c0542fa54266204222ca551e4150a54bb165f0850175acc479edd5141d13340369473f933f92224cb998b4468b40867701d6340ca9b1375c6a5d0a045cf05dc852a1ea2b14454902eab35fe7d185867fc02e213d7960789c581e8006732d0f420cdb56603c39d75df152b1e5b784746b0de57d3425c054a051e922450007def6d19be66b4d575a48e370a0b134ee22796ab6138f391911f76b0639d807d04e119e139c9b516aa4e0e72b5836f2a07c83eedd7ab8c57dfa0b7815e9ed2a5b8b510edc86e8ae1051604e0ce852dfa63c627b857d69e677e41b110f660599fec28493c30d66b30dce38a928d26e003b2ba348e6b1bcf16fab1ad0756ccb7b75fd8da8e03d413c91f4907e431c4310b334585a19c611f5054b8fdbc47ba1ea4047c584019cc8360fa777416546277ddedd9d2489b78365452000c9e696030caf6fa40f87a87d542ed560c7e15e11d1e5d1c7f04897b06ca7daa7feabb052678c355ad5fe6c62c3ce9ae0696c4abef480fe289440eda1589985637a4c9f5a98df3707daba49ec9b2b2580178dd83083723f3078ca5a08bbd7c90b1b5889c7ea378e6c98e74d4df0dd3fc33236e044e8efcbbcdef6e8a90a28e960e5729880b434235dbf24c03bce9244e2b3e32ce9ea3ba00bc93c9c5d71dd338c7d6a9fd80989480f92edd2d09240fd3b669398e15317d5e22d6f24bf8bbd08449d3b1611a7a5f7fa0ee70416ae3c8b1a3d1707e5e05a066472572a178ee632dc3e70514681ca6304afcb850f5de1779e0370e78b6a15e4f17c60e7e47dc5ee6e41c7109a36315dda3ec0ce3af98f2f5728f90ea5bc840baf13599a06fc61a684501e08ac99473eab8f9f591e7bcd91c08e2ea930e2f7741acdec8c1088f277282abad291ebfaa6ba624cb1bfb43dd963b79dc5fc0c405093428d043ab2b99d833a13456335833613123d8dd9ef4ee8bf0898213e1f4885cdea16c25affbc8e1ad29b8d60cdaecd100a4f8b44c4033afdbdbb9ecc9dcad82fc9df4996d146f2ce8a233a5623bf4cd9692e519a2ff73bcd4c398641e5c67f61ffce69c86d138ea7091107ad3a394a231d0e4361ddda3dd616a25a008da454127860fea540fed063b510d26a22c49ab4e7e6c0051216b86472df661cab28aaec3f681a53d6df1a488faa63d8a64b311e2d2bcd534b077d0aadb67a5e2311731df6e5870f2193403a9195e4a9181a4c5189c0d3836aa4dde5ccaa505925fa64ed2e3b9e33685090ddb0d1cd3b1a6bd3529eaedefbc4a13053a7ab3a1db4880a81275cf661707d43b185ec486f1589df930ebe494b462b8d1ea4e662e7ce10f27c430715ecf6837136b174b41953c266f8d11f67178c3f2f2178170ba5dff6b8ab0497bdd460fd8d4202aa9c1166b98b507c8bdcb269ca6b3a271bbd21ab218208b69ff4eaea83bba2c51d40623302060d60113184cb9122941c48c796e10267388042dd2073e8d5d20726b6618fa6711002ac0e1257ca573d4b7d1a174b6c4e8889ed669654aa20799a904c32c82994dee159edc97073ea995b9c5b687fdae4377d94ce003e2e44c6f1e34fa3b482560d454bf5499e1539c6ad60ec4dbc7afb5bc6668c60b34a8b3f9d358bec79fe894a2c842ecf80a5e64f71e244ea16735225ee1eb2b0afee1e6c797b2e99d72b937d72c3f6bee8994b587820442af9dbed632b86f2c7dbc5349e5abae726499dd274e8bbd2aa143010e454798b5a27357227e5639a2bd365d38ca5d2d0bdd57aaf1602328308c0e5e796d62d2cddd12344d426c4034e9a877b5a9ad2a568ee20699ceb057b7d1afaf971e0c689419c19c7dd71f4aa81aa3f6e15739dfaed464faf20417c83973a2059596593af57430e998c3f749cc7558d79329ae57d0f488a2ad19ee7879339e73187f76005779318cdd826289e51faf0ca202959235a07ac92a79953814a5a41365529647236d46def5f3048bb99f3e9a850ed643d07bf7b999a335d862b9074d9c67a89c413319ee5e65d3316ff27729bd8fede47b1fc669cf896bcaadac0ff542b5e5543c48c11cf11cd044c4056dc581ac928498c08de544630890ab461029db1684cd1d9dcbcd36f5edc9feafd4857563f6968a78c88285cff730d97a760b89fcc9239561765743bf31bcfb60231dff8758b537c62bc77d13395f5f27fe091fd5d683f1fa1f7f090c32664ac388637347a4e96b540aa98af83b5bd5ddbca4605628a6eb9bb972c441c37b2c2b44491b033ff8d34c3d76d26e5e3fd8638f5b5b69f999c10d80a6081d8473c72af586f82ea1af9e1b047b04c0a2fa0f3c184678b5f9fa789c522fc42cc8e8314f357ad69446a517e905e2bc113061399542d4cfd06d20f85591fda0c52aea83e3c048fb9fc43a61996ba8814583b1db4881e5955cceef6ded3f5aa7b30636a122959f1fc0f3fcf41484a12fd85bfd6a51a90ac02e4a7bbc989fd7d2b39811c2b327c161bb9d281a4e79bafa0070bdf2a52314434d720f07c0e6ec907d90a464f35664100c5f6948c5608c86d592b3f7545bf57f8205d44a06fbc26e3250e8a88249f2cf92b1c4353529e53fb7c9c02c2251fd372438a35960a1ad4203d23dfa1601fc193f17817982eaa9c8a198c21b12de36af3365d8705bc61644f0a82e8d42db2ab7bf59679050cd01e2b69012cdbdd963250092ff5b5baec38a66f0abab003b3f10970b32983ed7f62b09fe96c1fde522e3e1e2fe7c9877b98d638a37e1593b05a81eaeb13bd95159cd348a299202d3d6ea2011231c4f6eabb2e814d3fc7314ba38010cd9b9612121a32e04556332a4f18946e133a34b82de52e0e5b2c43b63ea9ed9baa1ee1d49d1899a7d453b7694bc650ad591050698ef9b903ad3c21562b31ec78d80c7b72aff6c8ca475bad3f662ec8bb49e238f546b09620657cb0b83a90c25516f755200a22cf630f09eaf51118b6bed3a9b39e7de314a0a42ccc3846d9fa58924bf616af33f3010179db4db0a0850c0fade203cbf487504708120f3bc19f588f49a0873b9038556d6c40d17e0249637267d4bdea58297e82dfca43c95d705a33d05a03f6c069a19ad0b7488fff41150774e09f162894b1e35d11459cb65ef105f5a6cfd54b629c606eaa3557986955646f42edb95950c871c38f99075ada022c3826e636d8402b14a1ff5d5710c64b2eb90bdea30216489ec13850faa79360f470ca4a9e9e9e55d0ebfdc5344feb569ff0f8d161a4241b78dc17946661440fc0b39de73885ec573b8e88afc3585d0e6b21caddf233313947776ee24460d2e38c3766d6604d663441c7b84ade8bb16d97ea7c093aa21708124eb0e713a83f0003c1493da2b704f10b55930715c834ac7e5523ee2b0221161502e4c2fe5d411ffad4fcc7239b2de8bf0895b7f0bb6208c692fc0307fedbf50a700f385978cdc34192b784f75990f07d87a87ecc56641d3d7d6c1d43438222b246bd33de6938014e116ed3c37352eeb68ddfe5fb35726cece783b7dcdf208420973011ec45d48de6c7cbcbe6b2468376bbb57e38f0306ff05560d7224e929e53313e2b4220f709c03f7b56495d215b2c8284df57d7556279eaba4e6bcdabe36638b88e52f6752d31a5b0683a69a9443924d3dc4881f19280297760422306d336b427105bf6b7600fe71fc965f8e41a454cb1bd7a66c8af181f49b288b2dc807bd4f67abd498537dbed406d12ff2827b160c340b709572ea79b90058b90cd62b205a8ad9e3a645572cf6900f8b23aa1ac748a6fede3a55c3dc3a7885006c14dc172465338789a5b6201de08527f21d49f945ab02f5d6770cbc4123ab8659d03d1aa2f5557adb5063fd48b7a784a655dbe9654983e3b6e5903292235253e87b4adad586da45a666f3446633160e8bc1223207efa9d796749e5f5078ed47235e18dbd5bfd6a3f3112914c88df3421e4f855bffc861cbe28eb84b64a72c6e8c987d032c868f97cfa757c53b5a1863a1e77923f6a5725e15813e1c26b883c33ffe69bb5c0413aac69970aaeb046d9c33d9c2cc953ff1736c71b985f0ec4e51bab18819900bd383168e4e016aed78dcba33d7dadc3803f49da5fe5f9dc43be71ff4fffc0d3bdc2acf676d9e0dac2d841af47cbaad93d39826775b24903360f4869271fac00179f00a5e78b62f1e987a8288e783ef192981b3e9ab72ca8b4d694781c90cacf5f6cf6dd4399391e0e91be527e454deeab46a6720372e504a5438405293a6a38d812c8db04dea4c3ed7c9feb3b043d738359af0c476e66aa0b49dc6151dcf9901695892ee7932a329b3a00da5ed9c27329a660464b61673c5ddee34d9d19c31a053eb9866ae74aa891d4f19059dad633ee54e679ecc380fe0572d9fc444ddf5a488bb3a21e206cefb27abc84afd11a1af33454bb1a65f65b9121775ad26445cfb0266db05efe8ab5a4456d45f113a941fd37a91778f25b66a115951de8f549135d2afbfa2742ad53a755cdd3b288512934144710da19f2d6195eebcec5fe2d643cc0dd052ec778577dc12647602905d0f42fcb86a2e99596b01c9ff84fe68ed2a32a267e7d0e336b3c5547c6e8bae34a080aedcb87b48481970277522710cc6cf067565e015e6281f8ab03a000b1d7d765453569e7ec4b3decc2cf440f0d8143c0ac8746b427ec569225e2efa47ba4c4d70f08f86b0eb689a018f50c0cb002b19976d673a6105f29e6a871f4ed68719a0b06d17cd003323aeb3e258070bbb2c2631165f32a55d485680ef628f487bf9775c3515d28741959f2326fdbc142bcd63e01c2bea93c95d826a4fd3b86dc2a2854de90b82d7d911138fd268961990f8620a3cc0b91def2063adf71a57effbc0628e3f1a02b4fc031a15439d5720da55491b79926f2389b533c1fd20fcc1ef1f6f6a3bc18bc2b7e2a88ea7ddab8d179a4e0bc528c7ed3f49e223d01c720a06f4e0601743ef22f00a9b8b9e9bf5fdaf71cf3621e2fda98d8db42692109184480aadec4d3b0d0a030a3d09db85c705053f40ab552d5add5e58b5e8638c727b656fb32cb31886613ec86654c11d3a7238c15707ed821755510b5b58222019a44910213148d5b16303b6526aa12e4c071e62a22a08eac2ae6b59d675b921780737a2071ec48db846401cee37a30a7e3b74e40803be4dac0e4b0ade1ea449901f1ac452d7216776a854ffa81889850b0759bccee33c3c3600448e4e0f1f0f88332a39e9d5321e6668685010e53c51db417bfad7828f3d7a1f660f336e08deceb343067e8079367cb87dfc0c401ce08d2a6bb5ab05f6f00e2fe0ed3cee3c1a659f46ceeca8bf038574331292d5a1a97d5881d8c08ebfae60e5978396df6981dd566badb4b666a7f56bad96a472661415e251d2e4001fcebc74fbd0678d5d60db0554d1574dd731f584f4777c0a9c8ba22b642004294688e0c066a3e094220730581db8800942a210c2164bc881cd7cd56b32c0980294221c218307704918f49578420ba818fae981176e80a74f010bdd7c3c5f257164626d3094c408647c81083398b28019851115b21d237864c093021d3041892f2c1224219448620b45b800e4082d34a1896a330425a420230b2f4c91c40f22806b9ad8088d225250cc0ea630020308585c21841dc8a9c4e8093d100105222c514410a23ca1252fa695427c67065d7841050da288a24919300a125690042a18e1083c50016c82919e7a2e91832a822c29c20a80aaa0f1006f2c75fc8fa1440880a20740389882470a44409924464dec08e109527480b485d091932c4809a1f01a55c020090a238e906408db1344fc8881118c785c5004859110a78412538c300328a6e0059b099483304419c28824e02d502fdcc5a80830c6a8a2e80b19c84c244637389180083710429213455f24513a12a409523431042c1c3901b180484646e0a049a3c44058c51447301ada021584f800ce27c0c02b2c8001137a008627907084166cdc095f80938e47661e79cc2e00464932c5e3f9aa39e79c79621886e57dd98a69b6995e9c7129671139889ca0042046acc0670a2e53d044d5009110275770c109901d401803a3f429a20c2024a608e10924a429a713437a6ab884086490f102214da430d192c0d6a170d16b9044c8ce39a7f4f8843fa4331029c2c8085114394892c391244198508c5ad082a41f4f924c6133e79c93feb0534619546bb5e65b537b2b775ae07dad5a75b5764e0e9abe655d697951c6d25e6a9aa67da5b91ad69aa6e57ddf7e763fefe20ab50561e05b6fabad37969553377b6aeb6a2be7e4a0e9dcd15616fe03e314785f2d639452e660444f2d2faadc934bb0f474fc3969740e46a4a7cc53fe487c19e13db51474a65e3babb5ae5bd46646cab9d64346555053e9f9535e49857466c9481d5a96f5515b795b20d33910aa9775426f58f442c31f3a0f39e33d12e6b25c70fff19140b4a9d97fae80dd01523b00d63841a1e845f54a10924a3c6a3bcc8ff325102f40c899fbf079f490bef21e39c3fd4683d7171dad7fe1a25d40fb2ca340cb7e086be3b000d7dfcf6da28663da687988157036d9471bcb6657f623fa7a2798e0da0d74c26fe0117841a31da33734fa23dabed584ae37f0c8c4b28a4654bdc01af14d4978b962bd22b3518605b5a2f2dbd693672a7598dbb49b6197ad169d32ba862ca8960d4a988802df9151fb9172daf9cd39bf156dab9530b406d83fce39e79c73cef96173cea972e79c53f3e1eb377d90d3082d51864a69a34c8b86cfa2517a45459f74fd288499337e35e992ce30ac399d6db77ed066bb3ad359774db75a9d79d969255bb9a8cb92b9a45a3669021ddf55d1af286ac210bdafff4d065f36853830f6359122913d863df63b3614c7f6d967bf6343e31713b58fdacca9ed707df62eb7d48dcca1b52fdac4cfb52d03436a24e9d1d326d40a8a94047188af520371c874751dbf93a64428ad0258c2501cdb73d947f65bb638b0bff9da8752c2d4cf3e1c6fa80fb508a0244cfd9a18e347ed95549f071cba7e8e14a2020b5dabd7fad6a35194d9340a5d12659c48d78f46b9b94295336e13b5f8d8c7a3c495b9b823619708531f6ad408d6a83f0553a31a1dea3fc07efd586bad50e08d424519ff4a932e26493e40d8850fd1a3dbfb850f59ce06688c138fc0853d2a066583a523078e08488d923334312ff5ab6268f66e4c92e4317fc7a6befc1e72c6caa999776c2a8d84916feb5bd8d7ebb3eb6df6e1032561e4dbeca3623969db4a1ffbadd2b25ea0fef538acc7b20f2572b53935330f11a091d5925f6450e301135db18f353af0f080289361157d80adc17226c64a6d7d506b2f04fe16563cec082405df358c2a29fe9ec47efd1e6acd38f26df62d1c7af621d1fd798880bfc51885fa9fee953e0f71c67940a403081d289068874cb43b8ca2dde114ed16859452ba77349cfed877f9bbbbbbbbdbcc0fea0b2567a08dbbbb13f1e02e644d01221a25a1888ebf8128e3d473ec8880b59faa00fdf840c8199b7948189e1daf040eebe9536a71d0afd987caa271c638334d8d4a661d38a22a7a5098c828b9e80127c906d416f7848bc23921e29ce8f835181361224c8489b0f778902950b0e67a200e36e8a844c729583908f8947e98084322f8a15e1543532361a20dd14ca25b582d039f079853b0eacf8b2aab084c731818feb6f0b72082d108f6035c7f7b111410f7d15a74be73b9e62659a555d7e77024ecd19becac6c72c8196883a493a6f80ada64a820540e09131f368137f85f1f8d15e9116045023ac10e8016dd53e64061a6fef4219d94520a9d420a27842eddddbd06f8fe11ca4077a7451821ca1690c2a710c24ab394104a082194902271083fbe0e19edcdd3f3e2862361dfd4475f44aa8be78bcb8bb6830b8c96e516ed6eb008faa8f23929a594bab8b8b4a490fede175389db5a043bc968d0b07e40c3f24c83062d82068d30dc6294cdcecaa606c6c8196803dfbef778b6d862248bb403db6bedc516bb0f8f0bd911dfd626ac3d82fc9263332ee43072d3ce840b4d8138d86091808f68f9ae24de5a6b0c0294e4a746b969ffbc4854c921178a2af93fc011cb1dfe4407617dfd0c4b61d8f52e14671cc86ab55aa5004994398a32ae6151511327aa82de6e44cb2a044516f476232896c826db91986085c42e77776fb1b97e3a7638c43d98ce24ecf82863200cbff405de2e5a7e7c69030cb7c0fe4cd0d04adf82c18cf22bcdd80aac13bee0524e1fe2262dabb49351f9135ec9db7b72deeea371debed292cb199555194e9100b4e141bad07cc1a6dd89641ff2f2b11fe06de3f32067dcc6628c423dca7b7c7c8583581af5a8574d9900b4e1c1eac1337a49424519152ccb9252cad8c5a66191110b2e2f4e3748aab5d6fab45ab5d65a43532bb5284d0db56107101bc82167fce35719d0d0cc22085515bc8e39ddfd63626a135ac62fd0b7e69c73ce39e79c735a3448524a39259d4645344834280150c68d84b210434353435363adada1c9818626871a8bd6c838a38cb14687a026f2639431c6ce89964f307181de34d488da84eb6ebebf5dad562b221bf8f3936f4d97ff8f6958a4e4887f229e0e0b9717518842053c0146388e524a979694284b7a0c8ca1a11155f12546c779a76e94be7ba879ec54966f4adc77f8a1e6517aab7baaf1e0bae5f1b7f16b7906108cb3ced4dd73dff25dc669f92ce3a01eeb4c8d9ffbf69675a66ec930aa56fea21e3ecbb7a73ebdd47cf0c71fb51b549e51b5929f3e3efd8caa13f703f783f7d76f14e88bfb1ba9afff61e3bf3bf47663eaeb87cd3df6f23e81be9ede90fafa817bcc436f79d3d791fae2328c2a53de3bfacaa6a7afddc4eb33fdfd1965b2bf3f0308d691fab14fc7afced4d75f7f8282533eb8c6ef1a3f9771b2cfa91be7f2c674e6e4478b283a8b97fb70b2b79fe1ec6d86bfcddf166541a4337ab96ff3d0317ce9619c7179ee61de5673df7d0cdf7d97af46de4f7beedb3a73fb84708d7f6a3751e377cd07bfc16ff3ce1ee36f73ed068c1ae7ed1afff6dcd7fdfd36bee1becb35125f0744bd3dbee1328e2aeda3de324ef6be6fd6993acbf621d6fb7968b8d220a86594514692d691dafd59e2152383b1c8c9942b1c8df10386298e34050c45c4386121458c26623891018b21620c89f193ed9ed342ed736fc1153c5f089a9204638522538ca600614ba22c41d250c992230d5fd350c9122734a6a1922543daff5e71a4e3d7acbe8949138804938c20893699152dcb85a2300625928210b09514aa20052126cbe39020212209509b1a446dec0cf0ae3f7588c524aa5c47cb89152dcb6b104de1c7f2e8e4e88991133f621265e21339438d66060484a34209236bc8d693a8aa515ca6acb642341059e163f4e4c85a46d623909c99d39a12046feb48d7faf547ce54210953bfd6215d2d0df0b69ee86aa3244519d7f52d295146fa1075e6f1faf69494de502d9f5a4ba2cae8aa41570d8a3316a90a5523d5a832e1a95654a2baa41ed5261549d7bfacb4a6205919f5f844996d39d1d59af223c8f535517e6f21b92ca378643571620db182a28c47216b8828ca58d9837cde2361ead3cf5712a6befc7a4495670bc84754d520fb83b705f403a4eb5b53ac31563c40fea3d3c3475459d1b2fc74748590e5114af1954e0f1fbef21e0f92044e39c03ed4d65154d5abfe542151258095154c4eb0bdf636fbfb36d755b61a8eecaff5648a84c12c865d14080a3cd865ada3fa634db19ed8cffaeca36f1dd59f2aa4aee4cc131c3974ec00824794b126406db2ec3f12a6d6006f6b8aae5f83a24cac45ac2951e6437d0fe10cfdb495fd66d19665c1d8f9d9a79fa5a121ac613defaf346026e3872d9723072242752daa02125d6bd01279c484deb742618a0a85217abb11bd9da84e9bed47babee5b10645997d85a2ccc6435166a388a2cca65189441947a2ebe4a206e9ea84ded588ae4ff4ae4874a51165ac9733d88b32b226bd5c410522afbb5aeedca6a155615711158e22adf32d5823d6449f336f99b1c7e8494c41ca941f5e98a2d2e489177ac2f83140149684b102e309bc02921396fc0b4d4111fd695854858f2eaa62a5676858f4041dc46fe778454c889c9ae0a8b7d4b04828ca0c45990da77816f49646741548da0944b0a88a226e44bb0504bc235074a4a8827ac7dc23aaa2cf0ff07d158b4495c7217f5a05bced8f280333122a50624695fb4f18e1d476c8d1399e85ce0208e35fc4d10c9ae00089e78912494598a2fda1ff8e2be7297101ef281485a28cbff3643d7ac819771e2ef0bb7f248a4630628441052886a46461c4c63f0eb924aa3ec8ac3ca2e16f298f68f98e23e59c7332c0e55641998970e6c7497390d1af96e6c30e139cd0f3ad76038f58f4c2681050000da15f3eec34a1e9cff9180e9dd68dd43bd427181984386817c20c83f08a31c61863b52884f3c6183f461c638c114208e1c583a3210d8b9c1044ef28342c3a32d29e0b0ae2603f566b82c1a3e54b01d232eb442d0294de3d56ab95d641694e6fd9d674106fe9d7f7086bc8f9d4da76574df39e195bedbf2402389c4c2115461d91f9670e218410ee441741065f32c8c575b7aca5d58a2eaf3d8c114acf7e1767509b4632ea6cd28756a31f35fb52578c888bcbb2be94056cd58f0a7d36ca9ff7699138636de45b4bf0a63ff40fea13656aa6446890387333158a30f2239d026f2a44cb97f2a9100a0413a9eb9510c4610ed1546794a8920131222e3c0b2e5e54fd8c4513638611c6ca515e2d09de5747a9b3222d8fa0b3e812c6b97553cf0f2641c2125a7e97766d075c049c29c86e0cc0546537bb164c76b36b05905debd9c5b0ecd69b5deb5ed9bdd9e5bc7b4fd9f556502c2d2997186498e1554aa7d27732e5192f340020002a1801a80ce0d4021a356e8669f75e0dcb08d0d580ef25edbd64ccbdf716600bfa394208d0bcf792f65ed200f7de7b001b6e9099a14100ca6506f012064b8a139043a6dd0ddb34ed33ed33edde7b334c010bc05606201a32b2b8e7af1b033055168c7d202a14a5ccacbbb43af36aa03ff7a98f84f1bf19b795bad3d53e20d4a33e94e5bed01e9788e1db6cfbec2abe401986e2a41b5d41d5be34948190f638c0d236cb6fc74002c850e3bab368778738c08ffac8a1a1164088030d335e66d0607d4d693bd496cbb67c18fe545916999233aa5c80b755c500e32200ec198d1aa81e02d400dfc402bca765b9bde467cdd076b09606eb69b00a6080d25050124484ae9b0491212122490c0959446810f7d9037434a854d3064c030ccc0def107adda32e693d2c73edfd4d8fa042802600e6000670a5ce3e4cc811414072624266b44d81d09f9e20f603bade06b932f5a1b916fa45c08556e390801cee8c32530177c6997917601ff718434b1a7e0077b7da67254441294f53e02ddffaebaaa1ed50ab0d393650ab6b20c55a0a70c5a3447d8d0e51228a446752f0ff0f674870af7d2be0c17dc67d7448fbf6d115ed7101de7488001a6a56ae41040d5d3f1a145552b3a1d2f333ebca4f00dafae82aaa78224ca445aa35b306a36d6203ee8c3374d563eac17bea550d00a0e16506016ad018808b00605431345b64ee369442ef6610426a512b83d942092184d9cbb7b2ec294d54cdc73e9c659845b139a7b4209c561733fa08a44871e284091324488a14f1b0884c102961624843254c04e94d7b34644288864a98f8019530c1020d06ed1cf01d2811e2c22f0d95082169ff0c31907d59f0f02ce9f1c94e4de400432542474a849068a844a888de584321221a2a1112a2370a2a1102a23b0d9508ad34b083e3673f17291a914f2615473ea9389241815a4ad08c2c6a842d09d5124222044b4510153db890a8f8c154f450b1caa648b2f7092f68560bed7248170ad6650a27d025fe780a235308e9798325780aa0e90d7553f828513279484e25309c6e142631b4b0b2228514cc0a2c58152d33359d40828b13445ca47022459321298c2612ff24ed08568619845e0a20297e1c4910297cf0112cbeb904ff642bc5cac73fa908342c41b20070a02338d0d7920b05ff6b89ff25ba4b84ec12a0253ffe544459a282954a141b8515d9915b2908e0b6a0c0c85cf2de1303305214c5129686455104691a378a9faa6151143e51ac8a9a20a5094eacd09106b5a000c3a22630d1f606584b820035c45c24d15d6690c1bf50c912562cb1446ba86409249a06b86aa8648925682ff24174da0dee4da6c718e3c79f79ae33f73e53c9f479bff26dd3c33f7d4df4bc3c0308f6bcdf56de7a93e9bdcf4c5f777ad3c7e510b83e3dd4dc7738a70c821b18550ed0dd6732e5d336692bdd4f2fe3687fca38db7b6ffa725a1e6f2aded6e2e5cda2a2d2751876b1ee7a8f39eff1eddee33a8c42a150ddcdb0ca0aa77cd0a6ef32cefdebb7a7dacdeddebfbbdd87734da7bc77f4e9b96f7b9ad3de875d565654defb524983ef7dd6ab985efbd327846bd347a9dd98feca51bbf111d6c4fab0269aaecf4c1f67e21e7fde9732a9dd94fef450b381dffb9a78faa27683df33696fb9376937a5879a8deeb11755db47ed06e7ed61c6b95bcb399ebef9fab0c63ea82f154d8e378339b5e543cf79a3cab77a78146128dd47bda945c5e36e74afbdf65dd63254b9570577af6dcf759a0f1f9abbf77ab7c5e4954ca652a9542a85e1c68d66e4559b833d2b6329c6d1e6e4783972bca431566ef6a83769dfd23df75da70931833e75dff6f4b66ddeab647fea3e8ff3b82ec7f3768ec6bf7376c9cb4e9ef61e67ef659cec4f19477bcefb1693c6725126d3bdf7de9595959531bc1cdde1d307a36adb1e7fea831106a74e9fcaf1ac673d4efbed793acb16432fc77b0d8accd69a6515e3fa3ab2a714f3505747ce8b8e9c97242f064bf69786fa96bfdea7b62fa93cf7759ebddeca772adf6d2ffac6e94d2f9ac31ce63087734a25df9cb289c3bff2ed1246bd09a3be266e9853791d3f70df618cd218a74ebfe59dba61fad2f65ddea953be3175af75e8ee4b18a5827a9c7150de8bc6df7d7bcb392f1a951f7eea7a5ad6726f966559d7651c0b0b0b8b18a65cfaf68b0ebdfde97bcd752b5c5475dbd35cd7a1f2c69a8b2a957cfa3a1595bcbddffe74ca1bfef659ef7d3be74597baaef4ddb75f7457eaba979c1768a4e3e5b914f8f444991ff9b3167a63539fab650690bc4b90a4e98fa8a27fc34704487ac3cfa13e35f09952527915963fbdb7f2a8fbdcdffbb5acc8b7705e386fcb638dfb7b7fbbdfe5adfb966f670f9fe5b5fb752c5f13b96ebb29ed46f61da7e59b0cea122469fc3b6369c9338060ae63f92ee3b0bc9671569ecbc12c5b5e79f8286f45c574f23c8c4d2693e93ec7992e572a954a18638cf114ee76df0c2098fae8fb92fae8ebbaa80ff6437db8a01224511f2d84531f0d67eca0fc4261c6d6aa63c1e8d0e849615c1786a5321694cb8bf65c96734da69ccab4d49b52998e49c7a4a3a393ca726e2af5a68cc3927353378cebbaaeebbaaecb54baae7b2f8851378c7bdfaa55e7bab5668f83bdfd0cd30122e7621e8f48b92e0c1362869c5bd2c9b9d6eae8e4dc9c8b619e94ebbaaeebbaaeabbbaeebf6b83dee05312a6e4b98d3663a1fd6ec23fa88bee4bfb8ae95c74c8f951ef55ef6db67dfe9f1c76d9bbdde7d2e6f104c2d440c5a65fbecf4d929f7b0a355baef5ee354ddc32ffd29fbb492963dde3efbac1e76b416b710ece82e8b6006ad651fdb679df6eded4f5bd6895a2bbd96714a7fca382dafb3b3ac1375297adb53cfc34c8f993013866d19866d260cc3328cdb56b0bc827d2bd8866116e330ec8b2ddf6b7bff6dbbb278356d07045173d7f559d4da7bbf7ddbee1e1a9f5ea5fb934ed43b0452fbd29bb6df6054e1fbdad6f13e10d4d2975ec3d189ba94b74ea4d7953f4dd37efbbac79f94f8abf6dc1735bc5abe20b63e745cf3e2ad6a7758f49dfedb8b5994da5cef07210ca53554fae0933254ea532b7f9fc5d465dc77faedc3f67ad85e4fe5b5102dfad43dc7fdf6edd7dbb66da5dcc38e3ea97cdbb356be6471bffd3c7db7637bec71de6fac39ef374a73dee3bc756817821d5dca2298417b7987c6df3db73d6ee5bb6f777fe2569ecb382b5fca382ddea743bbac43f54a865195a2269614eab2b0a0507f3d6afb6c436d1df71b8aebb62dcbb26cdbb66ddb92b877cd71ded77d7b87eeb62def19f436830c32c410838b4b2ad5d2c2c28242adaca8a89c4e9e6732954a5d8731c76d9ba6dd9b6518765d2b2bf9f42a1f84354e1587964ffda62b8f4ae56de9ed59bee583b0064bde96c6af821fa2f29e1abfcaaf7c10d650c97beaed4fdb432873facdf4dde33f7d10aa70def7bdaf91de07bffbac37717fbfc471dcc6715cf712e3a8314777ccf79ac0f52d6bbef53e55f2b109337bd8d1a9eb71ecd7bff28c20f86ba67307145e7827d4a31eaebc0acbb794fe66a5cff4dd874ba567313dce1b04580b91d2dbe3b7b41bf74bdc97beeb3a2ef7b0a3b71955a5d2730f5f2b7d25ed6b62e9bb9fa6bf5ffa360f5db2ba94533dec68ee31fe1b821d9d6511cca0b9ecb9ecb9e732f730aab2cc43dfbf5fda5c497b539e0104dfac7d29e3689f651c962f7d4de43e9da94b8fb50ca30af51dcbc36f5129b1a04e4fbf94f78a8acae9f4d79f4ea5ef6ee9bb53e9769de7795ed7755dd779517ad7a552097f9b87c6a9c75df7a9ee6b64a7336fa9542a955ceb61a7542a99ba4f728f83ff3e87ff726feabe4696bea8bb120f50a74a8fd33dfe52f7f8bb1754dc8a9051ec6fdeaeb5d7d1967edc7eded0cf7efb6cd06c7d76e50d84b6f2b60fbd46da4fcb9b8a3dfdb60eac98d740a17dcbde5c6fbdfd6c5837960deb6bcd57ca2fe74e1b4439a9fcc5e23dea575a3ec5fd771fc6374acf85c0f5dd57775deae65410a6bfdc5baf01ffed3ebbdfcdb6e57b737fbbbf71dc67dfbe0fbf07efb7af891cf7dd4f8efb9692e6ded27ee81e5b7d736afbd2f6f731ce965341645ffa1be8356c1f1a3ff41a4a0f75097f2997be9bcfc6f6a6cfdca44b1fde972b95f2cf9f19c7fb2de3b43cf7f7cb29e59cab3d96eff2ceb9bae5e1a756b8161695a7cfe58d5a59c158454585fb8c53e99e2b75cfa9e0ef4adc63ee743a9d388ee3382e4af7aebbc7f8fd31eeba52de3bba84bfada3b737e18751c66afc97c3cf71dae36fe7dc52d775dd77df7623bb2e6fd7f7b94f6aa9204c8fffc6e31ebff7953ec3df8df7f84d9f0dcf87e66ef0df377d36f0dffbdcd7c8ee8b9abb917afb2e1544f7dcdf58af41fb52865ec3f6b4f6dc77537aeebbcf46294fed86b3c17dced5c9b95a08972c1127a189268086454e82aeae155ef9eb471f6a3778e819319b61a48f7d33dee0a1e9ffe6a1377c9d19774cc288df1314fcaefde0da8968614591164b8ab458d12c33b5cc3002eb48bd43b0a3bd5ff9959657f9d3c328837a96edf1f6697f3fce1f2769fc28a42c8ef43b6148cb97ccba50bb493da73df7967603ffb6a5b47c53fafb3572fbba4f7dbbf4f07b68f96cfbba871a045cb7ecedbb7c7ffea03dfeeddb3cf4f696f6c37daefb6d752a7b1c0fbf658611784f7d3dfced5927c2eeb7f571676f6bd5fe62bf719f66651da92d69bf1940b0456dec1d1c99e39575a29611c7df7a7f2b3b114e84d710b34789c0f934fad1f3ca2e86fd9e3f742561a88c3147d7341b2d8ffd8c32116af973b51d629677c89329d3be9647a99c32eda53fe68fc92098fc1a29b50f877b1468872eee31ba6871ebc870837b19f28eba7e4dc4b8edd9b18c539f7b8f31efa9ad1d1ff1a55bdb7a9d88e38f021d65c534f9da14a2b785b98bf6567d0ccb3a5147cc8461926292629262d284ed8824a9a492def847abf21ba328175fd6540c6f3df6317266c70ccff2bff2fde6fd70e31f6ff8cc209e80f8528bdbc2be45e33e669cf82dd8ef90333132c0d4f65fdea8cf1bcf90b78df267c0a426f3f68b3dfd1819b11c7f0619f2f650aee85096cc487ff1db11c3b781084454d1a7c1d1bd86aad96889eff2ddf72ffb96fdf4694665bce58d3ae58dcaa6acc2b85a0dbbbbd78c631f7b4c034fc0d6e2131db3f5d99cf723d55cc6d1be3e761dc3b0fa37e3d7f2761d9abadefafa3172263ffd1d7226d3f0fb376ac66ffcf23464f779b1764696d85b53fb6fbf2392ae9952ad65cea74e1a60cffdc57ecb3b2269aa412d5b3f7d260de60fa534b8e64903afc1028a21ba78e1b3021e9e231da361121e20ad02297a001a26598d51445f2ddffe18fa060d930c814427192288566998840551f4104374a6fd2dd3c3aff4598e28e37f2feedee6ed5b27db341f306d35cdc696f98f2893bdb64306b7cff4b619eb1d1f36fb1cf6678dcc70b04781b6305aeb2bef513a119e80f99e6dcbdd9099cb3bfa0fedd6e619dfddce8c131f7bfb7b636deb8e0f9bed1348bbebcf0fc73e0ab47f5bea4cdfcc3f47f6d27df4ae20907afb8dec37f673e6ed3f7ee66ccbbeb1ac13f59d3fb91bfb59276aee072cafe4e939b5f2d9cd7b8e1e4f807f9637eaeb6fffc1e1f863bf4dfffad3ce8dcadbe69a66c33ecebcda8dab6dde21c88c609fafc48f067bcff6d9d7cf5fa57b4fdb608ea82a619f3dd45ca9e45c16afcdee6f1db975647673767fb0ef335f99f843e9b7bcfd2ae514f6f5a5d49bce6f6885be8f3ff84dedb3341bfe389bf654bb71b57bdedadfcf01f5bd3fe6b45165fd45a36d7622bc869a4d5e4a02194c228d2849565668f8fe148891165a95569f6444618161e9f7322715be0a3a1225592541631a265909dd180906920ed058a96f4a43941841a382c48bcb10179ce817edfef3f3dc2f85995d7bc04e1c223ba258d2e840bf3f72815546121b057224a445189098d283841d1c8001451631c002a80c2d9471048b0800e8e945193e47cc2a56a4dcc9419422325c10831f3d46d0b0c20632c84110b4e0c207504e49562d9036a0e49c11f533cba9e939a7f5734e9fbf21910e93baa0f0d4f3ed0af4d4735af95128949c73ce395153cacfc2145047f727bb8e9ca88c239491442cc34796b1d227287aa50aed6fa3ccb61389f67721181685a188de330c3e08c38ff69f561860a0fde31864488999232109489a204a6243e64b70260881fd6d80dd8fc0fe35f1004564382123c9d46e81223288148d31e48117bd5f74ce8bb61e42683469626c882a4fa2e54f89836bf93134d2860d16b62f5f25636812f65a998c27b4941adac8bc735e5482a6cdfc5ebc0bbd511b0003132434d10594257ed86c4c86133b4308030a9194231b78a10c9b18f7179161e412d128a4f86858e4e489068086455d78a233cefac79e8eecc421842fe7cb2f0251e54db4bbb720015722d83d7b4f54455507056fef89ef59929e5f10aec7d0442d48d2f283442e08f22bb2e91255546841f0ccfcf8a82e20e98d62c0b421c2c4581476c11e51106e1788e88d8a712ca74603bcaf17b22c3ef63c8b18a5e3e3484a26047f61e43a22a39148c7a7eeee4816e98b95467262a70502c9fa4a070909297efc1e7012390f3dd2f10638c59bc4ef21672a0f9ffddc47ca734a02f6e9e3f08c83fe957da022b4d102cb1c8da2929a23511c8236d717b809c441628191e88ddd8acb0a8c610ec27510ae21846f05ce71a88937b9a2c03b0e0d4523f7c832c2c5062ef8e8eda23703682c9c9158081e41a2263ac4958533b325083885233e91292b629a836ac3231a1c3439c8277a5649407ac79e950e7826d045c248e0285115e31379a4059e3eb046fc0904d688b36725616cec99ab5554f548604e2025643c34fe38016fabad2cb08f8d3e3d4ff48e3e7bc620fef02331f02452d9215dc6840289fcdd8118c35afb1a69d6f8d8c3f6555de06dad9cd16102d9e87064ca49f3b613665b0159467ddf028fdeafed8482840b0ffb512f2817f804e5c512bd510c701b506f04a689892a322812d425c27846d91d83a7ac42c80b9f28146485de5128caec4905912833a1cc3a69401869608d1885a26a8809ded86202ef19142467a20b204c7c204247c41d044de98135bc8984b1c080b7b5771e3531647601a4b70fd911c8ca28c41dc144e0101797fb2faa181b682c9c37c4af41f81a03ef08a4fdc765883506de9e878a4213891c62a2e81828b0940576270e91600e3a4c9183765554c51d9c3b82770e3a7e0e51c65f87eb1a1d7880da65b641aef08e89345fb58037caa5674a895264fe106f631fbe44afb5d65aa5aceed6d5f1116f88d35a62b5ca788678f872834fbc21bef504bcb145045b72c671ecd18291deb167f25024f0c69007ac112d4b7a93267a634742dafe64634fdad848da58591e05e13d7926cfecb9d3674a995a0832c4dbd09fdf8d37dc109fca00474f5aad563088443894a009c5f1750c0ade9785076f5f3db9281726b0bf2a8c152a496f5fe17843fcd412ccc2838780b7af2e30f0f6955c451b646e035f7a38841042772825cd3a5115df471030f49f500ae6e24774271aba43cbb22c8b52f7d5d7c387ce1578bb13294e9ec499bf9e4483cc6d2c20e0ed3dd77b5cefc8c3446fe7891fa15c32f05ee97d75ca1f3e0c2c44f204486f2b7f88b7991f43c38b3adc10bf43c2db2279c24f848140380825f443110636e009441186264639e4250b46ac8f7e437c8d08a6b1b122c4dc608b25a72618ba86455878a2f7e4f1957c2b20d9f8074519acbbc18228aab21a99f98d3d473fa20c34eac290fc21512625dfb5cc3a8b4c276af9d033cee60cfd07997170e2fbfc01a73e813dbb0c62c6811f1ffbba6df6e2ae9ca3a361cec6c18c131f4eec3deb443dbfe258ef635e7b5f9b7ad2cffef4b73ea8376d738e8e8e3820c03e1048bde5940f9e2375b4b24c67c6813f29b5f12fab6184b15f23af9ba85d52faedf83fb1a53dc4524a9c6196adae91395f23e917dfbff8d8b7737434ccb9f6e55b1cf870c2169a73e0dfc8746ae69b88d20ea4454c8acc55afcb068665ecedced1393456afab65aeddc8dee68d73723c398357592db9f5423d86b57c0bcbab6ca6e7def4f833d3b7f2f8ebe2e9bb8f01a49fa8342c990a7b542aa2110000007315000020100c068442c1602cc9f2505b3b14000f83a4446c4e17cad3248751146690210610630001068088080d098d13eac871f150e686a9fea7693e33334e5009271787088b97944e100407fdb28fdf80ded04e6f11e16140c112b8e099433fc3eb6842c0bc53ff8686da4752ffd0bc09cdaf00d96636ef14d0897f738e1d671235ac48a2acf415f9062e281e49008719e296097e40c97ff7e8e473078e139af76a0d744a95496b734e960fe1f86266ad960bb2fc48495ae1cfc4441a598fd1833a76029cf7af93cce7b75edb97456392b16d7a7faa390bc8f414e544e43b1c1782ccb2e37d5d5ba876362f2de9b80d249cc583d0235bbf02d37a1fa71b4803000d47a34973fca5dbc074cea515d75ac7889912e04d924e0efd2a478066db2851bb664951a1dd62f8af85a266110b4a2775ec7db5e0b3de9e5cb159bbe7b128584fe856637b6121739547128809bf027260958a13c63d3a7910eb3d257c9abc8550c669e3e62d09f78356b425675e57280c743cf4b86105c0f8f9c76520dcd728a8f630eee663eaae10f7e68f1fa6303fd1142184885d177b0d5651cb5cb4d228f7f8585d976f31b437ec302c5a5b0664768197e6e2941767b2a28a8cd4556d849d6181ccbbc5ee387660f1e048a6838a50f3839a8c27a8215b02a420e6b4d6b97215540c830d0a26edfd7e2b83442bcf75f9089cb94852d1e3dd89f9661941cee4810a269449d84251a51458ce494dc84aa706c23ce2b2a4e19bce7df1cb9904ad466a37fc3675c157d22d680af063596946b20682b5ee9a4a5a7e71248443392c7f49b0017c7b0c77816b3461522094d5293d22ea0e948f03eae45ef268a8acdb3572f46e8acf019aa3088564c2bc8247c495f4c83b9303eb7452c1cb8eaf914f4a9f3597755ecc9395981899f224c3852b63ede1b1f76add895f3454ac7e25e6dce7c982857088d206ed886217b3e82ba105d660f749cc643fea5e40385b2c3484d407fd21e724d028682bc8b92764824cb518240dbc08f980cc718c8c40f6caec409b31e2afd6fdbca53b8779092ef3b67099435384ec9932de4222c0dbdae4e34c8280b189b30291fe310fadcb31205d3061e46bbdb098699a7169754a76dbfacdee7b330f9dc8e04cc286b302c941372794742f083bf3fdc29e7634dcc014fb731e5a93212e8ee5e9e79f278da5c01bad00ff960b5860b36cf888835631b4d184e506eeff6bfe9e8e49280e1f438a4aee2d9b6de6a9c2034e0fe98e086ee1b3fc7708bb82aa6c0e188d89ac004bdaf52a56807848e500e6775b3ed50a2ce1a1789bc0be27ad28b9c28b922a04d4a4ea1bffc4f6ce3c8f10b77342ac3f6c410040b77f26b133a91a2d46b3b4853e06b1ead4186d224f50fe874faf7c6c1e70f81a80d09c365d00aafae091a2174486a5b86cc19dde6a577820c7f67d5da1682528640e6defbb90d8bb64eb6dea8970e236bb9c9531156a050a735b0dd10c9971de648f4b78e8c2ea4a495e415cee0f1c63260d6efcb94fc2ea18cfa6f3f32553b4f3289894564220bf30fe6c5d74108e81d8d9f41040287ba558b0df339d3ddd635b219f3438621010c5ff700b8068abd7a01cafe2efbbd89c626c95daeba9c419c75380e24b512b89d124386fc6b412409e8dd7b45e178df2f47b5504b29c59ad76feedb9a0d27a8a8366acd2854185d4c75d2637c22d8988f2f05124044e8b8376692a97dd3501027211b173bb521dade650423a419063c6bb50925c280a15b9ac55ec1d5e6acc325ad2e32d3cc4d74e5f5e6a8f60ed905ffbd8d6d610eeb24b5ceea74c12d1a0414b07f28c7176f83661d34f7f8a1279324942bb93fab5509be1c472e06074ed0b41dc2c82fb74d9a04d36da14cd88791343e42e372077a64895019b9aa03d826fc328adb12a61abc255a1fef3d7f847de5b91f85d5f93402379fcf107c3da18e086f0452992e41b265e5d9784e4acbb33b13baec0d200a59ca2d550fbb93092c25c1263a2136681482c61bc60c8df6d9adb89da733147d08ede91a6c6a1df259c0c73678520938cdd68928eae6761dfec50ff7a0016b978df53b7e6bda82e8bc66deb88db89d06efd535e2146ab09861d2f9a0cfc554071630bda1430333f4fbb6f75d2c7c585a60641851510278d3fe57f279f6018043f5050b3134ec7d1e828f5357b34dfb1e6fa0384fee67e869ba53df9fee7a209c7888a60953e46ffa2bc70af91bdda3efa7b5a202e8788304f699b73518a9278a54e62bf6e414d7ac005528a26535b2c3bd78a29083377d2f62e9b27f92f25f4a8c445d66900e43ccb99164524a6eaef81d60aa6f7d8a946abb3e6f6fc0f69c681601690e754e09d611f1833fbfa67503e3cc34e548323c242f0de5fbb4a7aead10c7af006f01088dd8b268ba81f53f14e8a4f3f3d1ff89eed00c8a4c0ce7449854c121fdab15c898c6540819c8eea64778c7955ebc99774958509d9f80177a9c304da6deb34cd72afc789e9d421265f5864466815c540a1f510c5c21d040ab87f89329dc6fc0666457a51c4191252a23996a1467adb4d78d0e5f8cba24da38b9d73e1bbd2157433a4bef5d9a8cfa822c41154b4d24e6c9bbdd9dc940006ddbf993e4e2323b3b392189a957478c8bef475266e78fa2e7686607b9b7ba73350a9a43e757af47cd0137a4ff98cf716a577a55c5444f0d425a3a429eda4b8c4a43ded8d52366afd86b372fd1456c70b298353d23277cbc31ec3894f74dc26d568e96cd9ceb0d1b799a805fbccd79b73f91105625c0b5145e40f6711883c23e6f009cf3a55430a57fcda4a74bd91d1e1be6f9f727f103f4d70d552c18d271fcfcf5eaf54014812332776a75bedaf51a65fc3c923394c19c25b85fdbb8d00d01c36d873dc27d49ec7c14d38fea4739ac07c8e5bc645838391600c0f306ecd823b1f9a1a0b06d61a9e391843f45e225dc2c3138ff5e84f151ffef40b45cf1f0e9dfd24fd9897f614213083a1f8b13c89d233a982ca976ea9078a3c9888c4d7ea1a8a23f0e9c1cf0010cc33eb014868059972e6b9e9c9f39df470ff4366654e32a20aa41a230ab232a3e040584c52c0725eb79a4a7a203733c2588441e49c078061ee15086d8e6ae58f9e8271e10dd92b34203a8f23f7ec3b68718fe90ca4c287bed855460a37d6b4db049ada51774f898a571935313d991bc24c6ba0649e96ef97ecea9c6e815167467dccbde4556863645fb7cc5f9d95fdef42f611ae0de69081304d6128ada6ca4fd59fc40d666522e71fdfce9374a56e29b666567d4a8565c30920d64b2f22adf962bae2b900f9833bd61d0f9c486dde3d888907c0ac17c41b81eff42046975a96ab750578f222c605e9b4d8a462109ecedef3fa9ae0ff2638eea8885737fdf51c6ded8defd2b9a834e9f994759cb48568a6bf631701440969896074d2bad26f07bdb89c551f340b77dce27d814ebd3fa31bd8c856144ff062f55dd3bdfa42673860a6d9870d5f156efa533761e88261d9e467ac92e222c623dea5abfeea60b69d26343ff114185b568259d5c4e7078d21df9b583b0cb4ad42a838000ccf814a2094465703346972e2b3088c020b04436927e65608efe664781ae636e5ec9881c4f0c999894b78199f7c9ee13fc85a1bee016afaa662f2f77012c7153d714b5fd02a969100ba4a9bc84435dd955011c7823b1aa6621944f75407f8259c9c4c735e586810ef4b8b6cdef53df6718cbf28267c04825ea3bf6a354ba5046d6ee720ac96247a5a48655b28beeb9ef5b939730deffbfdae016c5eb2c2527b4b49e2886c8905aaec2678f829e63de41d63d559a651dd0c335d76c3d241497c5084d90b22dce744ce7764357b8b8cfbbc4f18aa4d2742c5127a1acdce772c812eb8edaa437c6e1d32148a2184746098981761bdfc7b121432e11bd9bbd1488c683c5ce7ffe95ff9ea14f417f197cc87fbfbe3c6444b613b08d5dfee99b7041483ee9d27c298771554ac37e04ccfe750b51145dab07e2dba538fba47e50a974813d834bac0943cf4b54b6304a38ee8af3485c533fa26d463857e82204772a21a75b2ae3d4257880693033166ff7035dc69fe920cf3dfd217acbc3569d15f6259f588202c9a07b637711510abf0a83e9258410f849693fee97c494f7af736ca3811aa1175055be366b7184cae314108765be8e67f98d99390e43ff1d0a2074f7bf1db0123d754b2a57344a5fe4d61385e937b2949d018fe6befd533fe67cbab45e2b85d5a78b30a014a8ffbaf3cc83c4f1658074642c4d54b1600560a6598a1dafb6e11512b206ceb5375c6f2efd06181372fb1b81ded872d1156b722141169e4eeab22ecd990492d7d8a0324429d8979936a55f84f3c46f998234b336cfe8e3580f1932bba6721538b0e97becdbb4aafd596f69c576dde53d278649698c82ad8f68fd3531a4d6c18a8d3e532a0dc6d971d32ef9936d3a3b0c92dfbc9b86dee51cc53fcd89078e945595dcca3909d67db549b8f06b584fea1f68c0e4d2ac71879f2bc46311cb53c72e985993e5c75e7097cd588e3b8afb65c4b3298f9a1d550c47d199181a16638494a6857338cd92e3671acbbe6e972947dd16f2488d8ae1546eaf935baafea5d620e68d6342ad08803d7b1f3dd166157bad184872e49371e54078a6f46883b8be7641113103c5a440056acd8746f8905c5a0493ab8d70305f7d825590738c9abb537b5784d25f2ce380fd8354ce5f3c54651e748da55c6d4e206d12a987ebe9f5f6f1acb1c585ee70cc0313fa6b1a3bb76857a52d3da7350b159850dd51838bcaa4adcc4307074bec4acb214079a1b5bad9713c78a057891cb554aea2b9f2809d0aa6462d7a74bbdf2283e8781422e7fb8825b24243e803afbd23301ad2132d05bf2f25bf2e95bb0adc3938e0706e47aea6faab575c3dd733a1fda900638e81f2fb002c6a2814bab7a70ec1053050f85c8b352081b5a895e61a91e0abe2e5f40b79eca18c5620ce8cc4ea7ef9644e35ddbd86b4de1b3b8b2f6f74990664eafaa0a59ff484cbd8feae871fc732e0e4a58fe98a2f2b399b6330ac7d66c80b03e042329d30f7c14e6eb33d4a0eb19f734291ef3519190bdbb2bb79d0b44c3c8390efcec7f3cab057877450787da341a537dd363e53ea6d753560a5e8052ac1c260a653ac140f0b8a120fffd007b6ea19da7205402790e29e254f972747d373e0f175570e457a17e7b66225f99e660aeb2a057ca787718727c8d8d33929a78169a52944e31d4612d1281f1152658d9333ab1b3146e814d0489ac35b5ef92030e5e0c8095770f0a1f4ce62664d178516bb06ad18e123f2e9a3dbc823568963f205bd1a7cef475083d05cc309bcd605b559858646ee5505736d5295369f2c64338b161dde9aa6f0185fd09a00cd64141508422d0f20358008c0d4f1c84d86a62d47d1d22e0d150e1b43180655151bfd71b8360f10d38bac4b8914f8ed5cf80c3f1ae0631377a0a43b0d9d245c03d41e891e092d5cc97a971125f0c276ed436b688607b1e05cc1bfb7e497b622b13edd03ff159f4045e16f7dc46bf3e2e82ae49dd7ebbcb35736666c681814081314ac5bf55434e4c2b92d6cab31be728f7013fa24fa0aa429e35f53426453661a7cf6229b10d6bfc27b2d1fd0a4c01215d6f561a1e196859637f301d98c0d1252a469fbbfbae36c2700c031eabded0f800e78968530151eb32f4802b00c8182ba5f75b20d3813b4d32ea18dbec466af45f293d6792783dbb180a87b843acf22885acf1b68d3ab5c1c0717a8e8903ef68cd74a6b80e9788c71b1c4477a4ac2100050992854955d2babeeadac95cdc7a13d58a7a2429293f3bf3d03909e234430ceb2463dbb2f7712bd851835bd30de7768ee483949bdd2ed370dae3872abc8b643ad9746d63d263bf51492ed763d9a713f6ee2425d86494834f50361387a0c47e7d77a36212b2a6238164045ac64ec66e64ca0cd0129561a25ca4980da08cb2586f0c190c35a79972145b4a308dd25b09502229e3ac5d725774f45d42e4e497f4c97cf36984273e9965bf8af261723d7003cd753a698e8161483c8623d936c6332a93178036343857a67ed3d8bd373e0e9d1d159a7a9a14cfcd8a0936030d497fb9a07ab719e74096582199c2467637b724fce86506eb7a17bae6dcf1d1f255dd59b7ce69f93ff561ac2f1df524a62a61d5d93a0290350a357580f7ab2366d015fb3554c853885c3143406d8ac6f408152ec212214967a6063434066a5ed089574f4c7505f28513265f99a030459941c11e7a5508c1aae1080879dc1c9e09b78357d40e55ef81dae60ca26a868801bc4bd36744d48f18b5900f1033fc57ce8263942d9f33fd33e1a3eb1f5e4b0a6a985ce6ac372bd7b63b22a0854cdab186f0906e1241214d58169be9bf9f542097b3c0bc4d1e2439fadc219c8bd40bc7e9bea157d23546b90fd81eec185dea04ab04e1d8c83a935c28b2f327076ecb14d9b9732760579e4d8d57db454511f56a6be08ad322a4f3213a4fcc11120709077874186639265a79b57fb84af588132b004d97fa1b0eb5680fcf1db41321e37e3bd3e9110e28b6d1ad295f79e06a267a24ee44a34087695398f57f0ce934ecd5906d3363c0b714b8e0e3870391693eff15da02cc63852ff97d89837524c01b461baf0c711c84965b301405c1941cf7815fc6d90ef2cb349856c6a0ad429ff58ad03fb0d35dc79842b1fcf064cce0cf3d0355e70a313cc18746625eea02b41bcae7132356b9755efd5a30e3bc6600c7850e46b589d992bfb76e7fc5b0069c1597150bed3812aac153bc2f32faf4bbbd9e070a944978260c0aa49cac016151ced08530aceebd27221fb3bb3ec2aef3a0de6c5bfc6ac6f71bcc34e674508f7b10540467582572952fdf2c0d356d9835fec6cb6bcd88b0940045592aa5946a924ba84e51d226d3ec763821dec1546d1c57152cd6c294d942d14e8f3c0beaa32d63764f443e8bf14ac7894c29f07f1ee86c06da2fdc294af56c4be2ef9ce441a99705e3a9c8bba6c970d340a671b519a2a9f3d21af8f9ed88651f938629761816fb5655d305ad99281b7106831feba88509acb84ce1974f54c615c76664ff7651f9605c92e0ab108b3aa4018c0f26c151a48a2aa5b594585cc071202dc20514590440a9bd29ba46bf5043c4b93d10e910f4812261bc92c7ed93d6cec43009226e96711052c54683f4f4aa556c10b5ea212f4bf8c9cd7612ca0f2a0c130ea048c6f32bbdf1ee5be829bad2c232bec1ba5b30bdcb48c1c604c7833fb968eecd6e9117611b223295665c7bbb38b80e363dc373a39a9613e8f634e2ae00e504b752faca4a06f71ec8a6cae2f2376c7788dbda9136986b47a6647067e742d7170f04d5cdfc3bed3953ede741e7971d11352f274ca4486567394dbd0baa152cce9cf587e4632c2dd34ce459e240a3ecff05b31184316a716664f8fe535e1c2be3b97e892bc87c5f2139fd81249666a2af1185b0be87b317a8298a545cd2a86dd7a4d6902b0c5805ebcae481d6a4b78615fff9939e96e2962562f605ba29692013badff842caded01054cc7f1143193c40d58784cee9b10cf31d94bf45a3289d67f7fe8b85cd1c129e892b8656040fe0d191c19a97ef4ede1f8d5655ba0408632bef3314a98a3ce4a114dca4a2a421e0ece7aed72b0b8d4e1b76ec1e3d1451d802e54b5d1e61018bbc75505dc4e162d21df1f60462aa42b9857b507aa168187e3ae27611ef652e9dc2a64c7d7e744c006c4165f9c9029dd54cba0d9a4e0b8f0ed9539873b89338fac5c3f1a3b3539287d9995f22ac7a65daed8cb75db5229afe6a76284b6462ebf3a0fdae851ffebdb38aa60b02b2e4b914272e672beb57320b9cfb66333e9ae5a608f0e4262507ae1fe8e16c8fba39cf2e4f3c100f7207b5fa170e140acb542928f11d2192805d71464d68b1b71529d9e4d3ae859e75f2e9fdd208285d211d8ff4fada898daf41bfb2a954580fa0530dd4620fa3ae16fb210f29ec07bdd69794b2811f35196d08b9294bc011e524c83659096bdc04ad15e2b7314cbb6ed40acaa648e997eff01c439d72c36c0a60834c2ccecc9414fd1c183f57a4f4e4584253061d145221c402d29416bc8021ee029c0da354cca5fd31c682fd188c8b52e0aab10bcebad8435a2c32ef2529f2ff6e2c4b2a37538f2fe88ccafdfee105445e960dee0f8c542a6c66b385cb0d758df734766ace3269fcf72190a26cc699b2d2ad8bf4ff0133ed40097209177e068995f017200477dbe60a35c5c65935df92a3b50a2f9411c59029399976fb325f24493786cdd711947a9a14a4732bf434d6fb25be55af2a6a2b0f460d2a9f13740cc86f8125c0a064ca38b70cb16f1be7e8ad1d08cb7c8758099c923e12dc5ba83402d51587c3ee313c1c5e3d73c05db1907177416bce5cead83020938ca564ec00935cf90f96ce1b8ff2a953cbdb5b40b31936590358a24c4a59d67d8aa42d487a8923631168026624dc5453271afce45a32342182915adbc2be5504bbc8a8bb07c923f9e0749cdbc792b885388c0497bc7004ed5c41b511f3049ddf89bcc10a3e5c5d27e0247f03b3b6324bca6726d5c2975c0249025860632955fccb2612908f642e02ee313b636f0fbe6ddb275cf04cd6fd5a33b3e23b33297faf344ae1d5c0f8b11f236e55c2ac2c3d2b691c564c149b2f4b11a6b3111706871b32a48550383091c3106ab5ae6305857933e4cf09174e719de7e90de62d7f58928d04d4f1808ce1dce0ef84682568f943d113f923298da2102279f5a8ac883806e3e0d7bd9360bc1eea2d883ee8628847118d9569170ad641a1102c87ec5b9de10c5ac72ab313fff50c202819f8a078ef7e3072847fb9ffa028f1416ab991bd8291acae55b58aed103812219fbac9c09fac22501127abf0fa59ea0ab00a8587252af484ad09855631ec2c4a3b2215df789446f0b1f3dfb8da08574f50c212db26fcd48e93232c0a9ddbeb79c3026399930a3e0aa414f0002c9ab622b5c5cb00475ee17768c8fa0abdd2fc441e32eee417c6e9f8260dfb0f5ec875a6cfb3731cafc4465325c3d9f50ff0f72a2bab903e27b66ac3df0c09987e12abd131572dccceb0eacfcf781221aa32f78fc0650bfab2d998feafd779d710c92d4c94085efc9c76a8d737c82405f97cea1c46da3c420b4a61e4dac00a4fd22374aa6eee27b852bb7328c214443bbe2667e2b7756efc0ce790127d038c5987e7c77b28aa8cbdf21bc7f1344371aaabe51e54da576b547e0f355f3e6f40658f836f01d9e10875edf4797e4286450df093d0266fa5287a1f59dcc3db24a41b91b1ff59aefca73e680059488ec73a83402a2a10a87cdb454bff893dd107a45303bd8af6942f6ab88ab50ae4be8466b552fa445a05d4681a724a5001a0d8086515f3d94049ee637955ef1a0e198773654857f5d16fbc9faf6fcb48221945dd4623df425709ead17fba2b52b82ee7751ed918d334abf9bad590c227d4fa6b94d908fd0a924a669c62908946c49fdeca11c2b765d65d5112915e8187d8454932f43ccb84dfffa2128d043ac0fe575c13139a009cc5e240a6d7a1f8de9b21fb731405d2b130e3aabd55bb5f85a7988c635d390daef37fe0b9369f5e96c1768681df28622c4d79190bca33a3839a6003fd88c57a39799d3b463b6f278f339b83a4bf97acceebd7efc9ee09ca2b83d70e719de72dccbefdc684f89dca0b1dfdd3269c5d77a449f89660ccc769aa8b19656e9fbca53a390c20c18db917a6182336e84ebade50118417f3941408a093f0a7e240dd06445fd2de290ed1903710d55fdd68a30467a40d219e78cf2a02a09f8a8e06ca6601886151ebf59cadd16883b9ac5618d2c68ccf992f8bcb8b968fe0fff6eeb15a79c10c7d7850bfe3ac733421ecfffe0ae035553ab469dcee1438aa798ea70011d16fac1721a14c71dca4000e95611030107ff014a8b744e61343af8429b13bcc3a3050e9dfb97e52fb5a851aa88627ee51c05cfc9e713fb9ad92d5d8657585f5afa6e3e684451dd687f8549f535aee829b62a4ed5d303e46a0aab7523271b1607d706f8a3f33bfadfaadf7b4a8f71e64cffd9ef32d51a346650449f6e7b354e7cef3d3fc83c119b3147b000467d66fadae49d6047d90186e8ed8a287c65953576d7167bbfea6c671cb0c2fd0e220fadd95b504121caaad60767135f0ea083eea4a45798bb66458006cde9d4c9af94d2bd494976bab816dae19e2ffd72655471c6b29ec4595ee214b8978e47d436b90a27ab7628a6a1eee0aaeca1323e5ff904765df666cf47f60383ef54499fd9e33c1a75edf9b90294b6e78f7cba0a7610d4fb93dc37b807c6da7f9cfe5ff0cd8cdae2e7a5b510ffe5e03d7ac565a673928ff6d1be45a847e33eebe039f8364464cc807ec7bdfa4c8fcf2f84eb057f826a74991f3e7b542a3024fb6347e6696cf1943c9e5511fc3b6c97b07a4b62f51a391cbef5eece325b5458d5536a1b872a94d2718803c9eccc397d3fc4aa9f99fc3ded2cd1dedf81f8cec6dc831102be29ed35e9d03a5b6dfb85169c18459547782e069d7077c57d383bd3fee9c10464d35524b614b9e5215379e48a83e25b585c207fd001ccc670aeecedc476aabeddd119f37122cd0073cd04ff15b61ef4f6d5ca7de0af7e2e5defc2e4c3655eac3505707a32c3c07126a146c82f73b6c533025d244c3647a872aacb03247d0182f13fa02fd452f00c522a0c9786241e0bf6d453ecd1c268d2d3fc82f236471404128bff07fdc9cb4db5e338a471d454f825c804c11ba03041758922f576a47e9ba24338b49cd5f8b56d92abf434b0d91d607b9aca51cd8e839fce34c9d4795022cf7e3b699d0742af69f0c38713a2d9e5dd6ac98a97d87d867ca0f2a85f3fa562369c2043f991fbe9b927c24ab4dfc99e85128758e59fedbe26bf42cef2d66314082093aa9410355be33f408fc6ca17173ca41fb26f64e1afb615ed840e838da28a5e55010cb5a963af231017d42a7d4725ddfec736ae7a3a62a9aa80ce6f14013a1e6cf36f1fa79fa1492d98473585c2b06b1fda747b224932e950ac450cf9c6a89b23f641c72096030e67b64447d8981c612581f17e32f3a71f281f7ff89e4773455ca9cd0c0e73936738fdfc9690f26266f4a6386ff02f6e2700d5d4e0731dec8c500050d7a6a74508e6cfe1f6ebf36b0dfa6687d0aa57ac65093371c83e2da51a44e289ce570dbc8a55ce598f13a31942a8877b9657cb4c3481552fa00fe19dbc11b2522c6cbf224840c58ae828d5a0fd9a7ea49cc200a0c59305b2867ef4592172a9189a4c263916ba8cb15823d762d77578fe137207de7859d92999a88c9afbceffeeddd75dcf5030367b072bd11b497f50ae2d367493280e1dd3666860c4cee9f6a7b0838b0faa9d28f64546df8b93f8c8ecf86f322fc494d5697a2d395706dc984336480983d4f23523d3c369189aa85928ecc08100f0963b0e44a47e2cb7af47cafe517717d7de672b0af7cfc2aca1ef17782189850a7a5eff171931280bf226f085a0f940682e8a3d6eb75134fd39e3c4cb4229b154473bdd09a4e19e000632e3a1a54e839a7048dc2073cf45382af95dddc630ce821bdf2a3d61489009611e26b0e04c0d83d1326ca5251f3331c9e6dfbea15985596a4062445deea46ca616aa42d8d92013e07eab7d2ea5375496fe2d22778ffc7d537946528b781b27cf9a90e93b2fdaac56d66e23f6fd8bd38482a6d9071c7f8a275fa79805da091b816d2037fea2fbc441074a816d3a0cadc5f6b33e4741c51334c6ddbaef90c54f6d6f5a0162ae74d882fbd44f29a974746e63a9dc93b8147455d66de0183531e95866721e6648e4b386a5de4a2f8ed53fe41653eaeaf27649d25e2fd05a9f91c0e836771e3f376d8744aaa1b0474b18aa8961191d3677b2a2f12d5ce34bb89ed27d9386dcf94ed29b6a66c9eb435adfd043bd3ed26b29b6c739abdd336a6d89eb269c2f6747b13ed4eb163a32c0f572c6b46426048882eee966da72c753cf1139f73160a2690633c0c75ba409d71e31342e04b25659eb621d37d62ca8308f496cc60646c87db9bc3817db4d01450bff85fc02412f0ce2d372df261cdead4b7a0e9b319661a9c2fd33e7ef7d3e0b255732d5f4b985262c4910b816013dae5224e2801f4132b9985540c2228700f0e6766ccc9089f5c12ae3d8bd22321965326d6e0f391b661e1e2164f8d94fa6ed3aa216c8c7c3061a645b75ea84a63c54fff03f43fa33714f950eb6bbe88422b93192bd503f19d3d566b892bb14a6705a1a9c85756d9a9175cbc303170b35e21e5da3f6149935e51c5c9301113d32c4dc35097e576578a3e522b067319128fe394860c046a9a1de3409330f699fefb9795ca82bc9e5dd5b45329afda12115d7185283f15f035ff8435a9e4183113ebb61f371bccceb9480d8b63c809f33d751d4b93e8cc0daced8215800a2836834fbea2d5a65a097a9c3b959cb8dc5b92b156c8e5375adb395e0c4fe3b69f4581903cb3115c447b2a3ac0976ed8b779c0251d8d999c82fb46c32f71c27b4ae666231cb95d526b7c7d1c9a24b7f6ccb3edfb4efc111a6d68aefaf2b3a0c29fe15004369c45cbffda60a21d0dbcf6b3bea146f5e1ce20201cbb25732a269928e69105f2bd696ad260600a5a14eb40463f152b9df84d00f45669542d997e00932af8b02883c914b3806244d5759953001a5cc242e5872be4bce1d1a76d0efb8a7096e9704f042e002784e306a4766fe8bfd65f6b1d00a1b46d0ff7b51e61acaf6a0539124fd705d14559ceae91cc88749f6d1b60aa0bbd9ed4613fdeb522d47802388f370af0d11dabb32b7e1ddf8be2c6b61c70f2f6fb215e3a9b2b153ff56ef16654812f3c3af21d420b7e66fade03ec5e726573993b7ebd0adff91500a4ed339eccabbe564bc2ef3e1706b5e5504b32a9dab276ac10fc5629a5d571acca7745ab2b89613ae746000005c63253348a32d42b2f86a5f67b43d8b95b84d77e071eef27ebb9c36ab6357cfb99ad6bda8a409fdc233a4409676a25e88acbba16e403811d8130b18d88f32456897084c59cf2578f557f13afa6fc0bcc21264de2a4befe6d3826472f8a37f222c22cfa021a62d193b3421615a62a1d34340e68d8fbc48591225e1438d4fef27e09840e59e9d4370d1a5aa0222706becddf34421e795b05dd444470336345f19777cca4b677712317230d18b891a38f90c3e06270119fffd6327be4b171f20261bc9d1d3938109b30e03ee762e19ddb4af9e21046dd6dff33d641343312c610d7b9c6c455a22c9e0feb447425832b37f005268bd3e910f051cc91ae302bc5e9a5d365d7fd15ef1a2716ee7cf024a800591a6bf68af87f5ae09d39f067ced5d96bdb33f81a4b2cf2ece1e244c6bb8441faa94d37a14c39ed4e3015a8aef39cdd75067fa66b4ed3b54eaa1792e477f867f888d157899111b6ecd29496501b18aeff5162ddfd2be9b0ec1d08202340efa2c5a80b581668f1d1af92881e56bf7bd7dab10bfaa846421da83015c6c4a3c0e016c9c1f9d4aeeab9e4dc1d37d6a9302ce0efb86ac51a03adf2615bebdaed0338ccafd01d6f27db2436a40954e7c17ebb803315900b38b674fafaf57a5f4a69e03b040c32a8b0ea6c18c1e47404784c4908c42694b502cb85a1f74d03ba3c34f7b1eee6eae65c1000f551b28597da46b20e5ff80468b8b06eaf72dfac905940dcc79486df72b5efd30b3210de6d380e7793cf7ac1e120bebc314fe98f2990e0a441ca0ec2d0d0f6818a8a4ab0ee6efb1b869b451792a029d0738807a5032a03e4dd8fbf00a5b0fece46b1fa5c2cc2d6eabbb802f2dab7001ce7bf10fe20f90900b5da9b8c829d63f394c92c2861c7632ebe1fe5a90f00846b707e4ee9b74c59f320f98449a827e724f040a61fd2dc683bbf7075e92271e37c96ecb2a89a65fe221619ee05b3f9bb909ca8655d265fd34919f0938a96beaf0e281a4bbb35dbaec3cacef77a0cecfdb836b4094eb257b994da77357242dd26e26c77298ff7ee4432d0e8058e3c2904a96b00778417d4ab1f52a4e3f0d749f9eb9f99c34c1f82061ad5cd5e09fc9c35cf16eb362b32fc217462d8a70e5a9af2fe2700d72f7d351658c8a3bff4fe4745feabdb4b3394a49fb134ff6e98866edbcaa2870aca7fe0b5f93929cbfde53f31fd41df780ca035c316862703c0ccae4bcb4c7b43dc4a8183aaa4af8f4f218e597fba4a98b8ddfda6a3d652ee75022c96b820c7ef28dc516d43d5cb362370df254a5f0cc0bf29adb58c2b3f87aa7292d05f7cd61ba2f22ba014f42eb9577eed50e4a17f619f7e8b925b7f941de82d469b9bf73c89d6d14e0449141262dee2c98fdeaffdcf040de8c09ab35edf75b22de2e22afb36de8a6910bd396eefd75fe0a3534e415789def25780a202fd45ffb1272275a4c5b7a33ede3c8859a48e44181982bbb4322fc61302d7bf77630832f7e1d7e20fcb45438972760be23d8384b381d8e2ac82a63410e37205204520614023018867e2535e7fd44dfbe6958a42a0fb0ed3b6f11ca5e16abfa531366363dbaf934a0017ab8cffa8efabfb36d608095c924140be761adb8dd2580113ee9a71d0b61c361fb4a5964a3c0fae8fe7bd179b5d10b1f71d58fbc42f6561cfc61a5abc7962aabfb5c4c7d3a74631e3e4c1a34115a38464efb5389d03ea3535e2148b80255d6011f1d373e1bedea1fd7453eb234c372ba9d0f7afd6686a696cf39fed97dbf3cd46ef3ec807330b8ab5ff2eff7ced9702a43d691a399400ba49310e88c8063ee1766dd00f1ceee3a337015d537014c38d2d17602945080437736602266718a947f599d00097bd8946a9fefb65c9d4d898e99241b7fba619859f2e256e1c4886c96302b22726f31c5c77ac79127436c38ffb6e7f506d677445b18b46084b4acf33f10237b95e30a6765bc1add388e6e3bddfef40776b68ecab289bfbd49f31a4ce24a39b66d20118c18b49b64b4e2a4f9b5027009921e8a9ee38d790e0157c11a62e1627291ea68d97481e53d52173236846953f3e03b5c804823ca07391b18e351b4bb9b41e0b87701b95a304c895fc7af1cc7e2a0900a17c7959892ce51d283aeb43f65e8179bf97ff6ff7c4635b532e4a0369dbadcfbbe6045b14a6db7823f683d61847d4a8f1ddbf8a29f4b14ec3212b7835ae6b2ed991a8e9c0bb4fbfee34c7fab5e458b839915b400d888e88969b68b5290c15a11d6c93e8b088ad6b6d44896ab5789b0879f1c2d11f50ecbd62f6b7ddfa5eb62074ad3c91967ea660165797ce2dc6d330912ff20142386af153bbc107521e48773a7666e6ea7a79aebe392dd89ea02db53f62bc46770305c27209ad057d6f494297cac1a53749d069bd2722e2756612a3e2e69b4b13bb6f53b75f3a0415c795d6d056ae0232630169f8c802016513be6630f8d102bba2b17ed45a8b0392c0573184e9dfe394620bf4bf6aef842bf64b7d4cab580bf4f9e7390b64581b6c6a55c2171a4e5838395c6ce13f57bb7f9620d6d5d42de04d305e3575edc7674b2fd56ca46ed8971d59aa349d45a3ced7be344720536b5d873bbb1bd3593e7a58f353d85034fd7cda77ac3e50431af4691810af7406c9f52a0dbdbb3deca7aca455da82cfb367ed3e66911ac0454a1e9eb4dc353d800747a467f843528d98438fbd605cea49299e6f3ceda52a7f1d353a54b45cd54495493ceff2f0d451a41532ecff50154a3c5ed90797760ac70bab95eedc51fe95bffceba8bcbbd7949f94836b88103f4b8e9f5b3b1481ce25f7865f178a79e82fa2ebade8bcd5a1e843efc2f6ab51068f36fe1bc60b7306fd3c887d6779413c32c784451de856449b7d4d20dbeac1ac4f990b41d26f1be956bd685ea8e689d16e230aeba45223f66f00affb4b4e35f422a9a988e5ff1f8e6ab2501a27f099bb8bf82b3d03024ba9addb3e75df9ebdfd5ebe9a73bb039d79827a22c9692d89125f73c3b40d9c5a9c38297f6bfac59f4ad7b3f3b79c6cd88f45f968dca7829f7ac144783d4254432844592cc175462c165fe9824a75431540796a1a71d1ee5196444f12175aa4ed73457121648d1fec0edd1f6ba9a3ef519f71532eba655a549b8a7972bfec6fdb332af8184d3e806a70a32d3bee727f5f29cae48925c035562f8b188e53615461914068b5501a33903bdab3ffb0b6a482fcbb41ec9c0a3478effd6fb0434bc96ec7fc912cf0b1664ea0b5dc75d11da938a248c566b39dd9c4e27deeb918a434a3de5e77b5797f2505d1ee25bd88b245b69d3980df0a56a0b35d73439f1574c68635ac008ae2c2475f960e54b05ff16ac52506f300f4c57b3ef38dd7fca684d08fc86195b21ab266d465534fecfe2bfdcf0cdbf35f472c6d7b6a448067236242be5ecbec6e23bc526f4b307f41b613219b8a6dbe5e4e20b2dea4c0feb4404228149f9a77cae56915df49a1b31ca5333db6e76c4c7ef0676965d0939d481a1b156683a317272072dace4352e5fbd2684f7b4681140e4878ef2ecb5bc55eb35e1d7cb31ccb58e902eb04546553058d7d1589c8b08dc8e7a0648f170c5581362e1f460fcb24ca8691433fa33d49f95b09473ea1bfa0e99542616db819e80c9818162a4c50df7f6d8844ce7b00eaf137d639eb49d729ffd6e1ae445d96a31b3b708ffbe51e9d5e4de64d0c0fe3271c3f7a78e15d109b46e347a635aecd655563dd28023fe7e37d863b9b27df496cbbf96d0e2c541a94d6fcd43f210c8e957023c24e4fa9fe85d5cda9fae84111ebcd4a646f83d58cc8eb5ab51711b43910a6cdbef4bf7bb63094a2cd722f51909daae86914812a20c5c62d1510cea4100d1aa044ba51c8c890098dcef9a6d85437209694ca4553761564b94e5d15ba118f4bbf13bb9636b1c05e3779fa4ec51032642e2c61b4a6874ef5d2d838f1d5407c4f21e5d3fc01ad36bdeac3442a2db7fca6408ceaad16eafb2a6612a662efe7c1636f06a06be36d4019d29e224109708c39a7238200868e055a99cfb597ced64aecac57c1700f369c02e01a235c0a5a0543af0e1d016ba8c50ad69f7e31be140e58cf07209e46a75375f345945666d9f1a049363da5a845bf7e67dbe4c67f349998ab0c08ec3e8f7ca97b8f6ada2247f12091f672914b4334c175e681226d7f6f46b64f433067a699805a33cd1eb5e8ec3efdb0142005f4c6dd71a24cec772fc9c973b3364cb6d0342a7dc2c5d1cb6d5089b313ef7ae3e3773c9725435928521b649eabfb41473f37ce0cede789c64118fef880d7db5c2bc53b3c3316295fcf824c32032eef411b032b7ad6737ac7a0f944952c4c790afab7b37bcd4effd31d29f8df060a392c3b7a8bee73e5da4f8829c01e222e24a01b48d65087a2a387794b3e10647414584a2850bdc26ea718450c394a7907a87057f16b4879aa129adcd26603f4f1bf3a294db8626a389538135ea7127b040abc6ce7b39b096a1f2f26d7dd86a377dba1d20f0aa9bc6041209315fb7b0d1781ce5a402c0eb61bc8e75ab766b4a4261984273db29c6e5094103315a448660a81c816e01730dfe2d62126b6004ab2a48182ea44bed1162d92b093a472bbbad315f6202d66dacd383ba54f24fa0f85ac8f226e1bced54845d903e1753dcc66b904ec7a824d3b82f990f8743d8f76f7da5951731d85b60fb1f111d06ba3d2f958a79abe9f35ec89d8f6b77a4afedc72c298ace74cb7777a2df05596496b9b672182c117f09be8edacdb59b0ca72212c28814297340bc288989786907c8212987002d13579823bfb4907349ecd15226c45c22687dfc458d4a4f35bac8e638b32cb783cce900d63ed0c27444cb303027df35fb4822e554f2a645d445f8afeee41b79862e066336577e769ff88fab29f438739f7a7824f404171dfa062d96b9b1bd230fa2919eaf6f0735a3cc264c52b63f2d3925a528d7d0e42e1cc45bf71b9f0c31383350cbeff3ad56bc006f12364258dee83ee223e625f23f76a62a1154e3848e919e1b22debf6d6bdb758be8f925c7c3a93b51e881d37c6959562756242a06f4a7518c1aaefa7c8a4dbb4defd3e54a6ad9ba400ac2bf80704b731b0325ba02fa33584a36cb0d4b012e2723503387deb03607f5c7ad6fe473cc524ffe7cdbe051301409f30d177dc51490f06a500378c7f398b3f790f3f7f45ce4f3d4f9c299c336661891399d1b3ea16f4c187bc8d3a8174f212213f7ba90e5ab0ec17d82b9be52da4b7786a8e49264e83277bc9f677e1dce09e24b16dc70f0203e2fd69012887c279890a973e805286ab96fd6042aca3303ea6b7bd92dcd11a8613202526cb087175eb1b17464b0ed705d975fc2128f8774f30c4642723e78fffd56a30843c27ac07be7b728d8f0e4fc45f1c574e91acbf2796c733967776fe4586dc412a7ab63a95cbf685cc97d922ec4a34fef3b6647e23e2f1e1da21be9cae1b00718282e29811a9a9c343bbb6b56eae13a854e1f2feac62ca5a1764b47a804a842c6e8cd4bb43250c430410065844ee88964f35c2d03b0338ded5124358798771650e85b7125d60c7b43d3a20dc9e69167cdc0af4afb9f93e1d0e01bb0a3461f3ed1a51cb17d72735a4a99c949ef82c7aad50c93d1c9b635ebf2f7bd83991fe6cd51deebb81b7fd85182cdea44d05e57c3a6d730aa8bf50f8ee5571c20c9692302046787298a794d977e944738863e011ccb125e773edd23314c13f411a09ab1a55769c8d5a780c26980e4080f25a780fc745611e18502349a791c96c87e996eb9196f56540ca3ed18f715d5fbf5be1e5e427349f359e220c35bec8369cb548ee38ca408493ec6bd4be7e9142611664785f01990c332289f5d85889c00c9c8d6bccede8c00cc2f131d5a3da444138a417581691e32fa93cc4011bf62d145e08009c1adc7812e78c7fe573807611ef07e2c7652458701745932f6bdd27e46e8b77969d65e70bc3dd0123e209fd1076375429482f8408c4eab7fca83e8b866195e22a09c07667348614f21f7a886c0ce31000cce8368615ab0a2df8b0c6c696bac438d39683c0393e6e832949328ab5f859bf669b2d3022c69974786b6d03a625027c4a1e2a4f86feb49ef30081fafde564080a8ab185a662505675b5691a2605c280d1caa3b967c7e1236a32ee0a67f0c8501277217f3515c92825a8462d34fcc1377140f97012269e6c30ac9877a57996a88cf643bb1934e72402c114da43b97c931b305d3d28bed54174d65fb55f79ec02e907dc1208d0071010041f7c846bebd6d983bf1c5316d4d4043b0b7a849e09606f3f2fb045f1487c9067e8b702063f754ed81b463c753bc68078cc24c3cd17af0bf16a36d3b57dd9bdc03c594260d685c762347ffff95e01c05239da945856f1542a3c2a1e6a58ce489f89bd35a47c59f6a88289f82be6f689f3825c66eafd13f377c2b1516f56d03f3f0ed01fb910dec053d30fd31536f5da2d15e03645699ce9392288ca16da229e080680a5a83f51b0563c5027e0eb41cd6e12fdbeab1dcfcaa8f51a5918c539de3610ca2f985bc372764ff8c29c3aa60fa74ab01c95347d63d03e4090b4f6a93144988bf790dcce2d8d92e974201510e49a8148bc36bba68f834363d1099c0e719274f17dafc9929d9310ca9d28ac83504edbf5eb0621e42b299aace4841dbcaf4a46f37b40cfc0428018c7ca58d05efb4b2d071e6d79d5e54bfc8e4ef327d188467144dcef6db9f6683b1a0056afdf151d5648c9bbb6a3aabdbed2b89c415c20df10649ed763bdb32bddb5f3a376b4dbc2d6f94decad789175b69a8884e4593bb3583fabca589d7b5282018cc5e4ebfd2300c61236ba9ff2dbe062a1bab1a0ce3994d441901f39dace918441731e2f6760f5f3aaf8b4b6eceabef5faa11b63e001d28ff5d314753d38f77cbf00e64e61cdee5a682acce087bc4f580c79f6a688381450d3f723a000566a867cc044feb7cac1d666ab1bf6b56166823310a7791f70f6cbf32b6ef7dd72bd42dc677b97cfed4dd655d622b9f6bf1bc2bff5269a4a5500eabddd6b9b7e3f3832bc39e173714ce818b833103f01b7e4d5ccaa79456dac807847844b51c6cb65f1c678d0e2494b1332654f3c2b45f5fd3072e77bd77136e361870ab3e362cd610531ec3af7b903ffb61c514505296b8e1840eeb083f644d1b900ca2414ddca3627704977e32e6de2cd6a4350b3285ca74ca9248ec701018060ce94ea28bf8e39ba06b4797d2bcc8e52d70a69036872ededd60cc52597ff71a6c47e8066319fa5816705290d0165317e9256e26ad0798f9d80b6528773353461af0b433b1e9ad3db6ec266955a734ddf1670f5eb5df532eb19eeb0aa250bd2f24e67cdbfb98423f9128def42a1559e645e148015ac5105f4a0bf4e189cc1471d0cd8051f7de5bca86bcd8827551093e38ad79263bfd0cf2aead4ff3101870f23141472edad81af14f12f9321464ce2599ba120e9fb23f170d362de750cdffbfbe0572ad2811979019720f936d81d3f2ed2b114483580dfea12d465baeca69a095bacbc53e3c64a4f1d2d6325ecba0d84f4c69e280fcaec4f0e0f4a30e8d898e23783591d7ecc12744c2f67f8c41013f6f2b822860cde424e01274aed426482da71a2489d48e367e08093c9760934c58e92c89fc39ed5e88a85b1919154271256829852be41102d2e808d3018a83b1c5de448dbcc5dffecf6f61c4ee3f38a8fd3b22ff898ee1df16e26aeb623bb8788cfbb2f3e5798fbe12eb3de2e66c9ec5e39b6df2d8e7732a39974b7050dee0e83b4aba579e2662a22c81cad6bd21b88d8d5a49cdfa04f22223f288666fdd45cf75606176df4dd7e938b526a28f45e0eff27fe64bdd465a01aeadfc90ca72ed1b045115ad94ce9ca21809c5a48ae01268a2e3556dd0a4930e4ccfc6cb55b0c2080260c418daf9a87acdbfe164fd50190757618da596afbf0a877a60a0454c499adfdd43ec5ec18fe80592c47b155f9c9233f68aac1cc142aec6f60fc3de14d54aa4d5be3ba356750b453e44aca5fd05e2149d4d813d54ae3e6cc4f6f60e9a09961e429698e19414ffb23e853367e40830c50336bf51de92382026449d0499f814f073df99583eaac87bc79832500adde2f85ff70ce0074c80572022e2481088b42c7dcf2757c1fcfad032a8d355d395562010970fcfe39a117164dc267429156f61e0e8c5738256f9420011170401344a675884459786b6534956dd346551d39f20ee8cbc02f08927294469e5b394f7591644fc2bb77749a43830b2b5a3402091363891f8fc3c3a5d16a05b7924a8002528ba660e189d406eee77f7896eabbeaf2c67c80cef2a7df1e69faf719d2809e0dc3f68d261825356c89f7947e6c160e26a9985ff56a0d72b7cfcffa60921bfbf22624e00907f5f91f9a387659012a9e8363cf50362555bb4c45cc7ca26db80a514087453f4e708d183ca7c8fa8aceced4744ded7cb2620925ca3e237d2b2d1f772f86fc5b71961dc494e56601afc311a3cb8cf6ef49a366f1867e94715d326d63948ffb8eb3d50a5f5ecc0c66be7f239da655bc2edcca793ea4c842b43d4634782a836fcbfcad2bf4e449de737c27e98d86448444c7459c86189890191e1410774b2bdbe10155a92a41c344fff7aa370b86e3d9d56bad8ea7784ae63613025cfdf02667b3ddc955fb1d64c343ef6b08063d634a5dd23ddc24d98ffe1a464b9cb9d15ee0e27ede5909edfb6d0fc748a5c9c8034efea8ab4e95dff81020b1ac02edd56de2f5f629630d821681ea56450f21ab11e754265061dac9e004dafc5f9829b8161935f68b7f913a22feb7484d217a03f50606421db51b0915b78bd028968d5a37d96173c1470226ab08976e63ace0af05ac13383bfede45d69cc515272545f88be840ede3832f50290e5703ba8b3ca603813695fa3f4c30e705a1a992184a8a1cc1d517f6cc0c7c896eb9071a33786943a474214b9ff19642a9f70cb389b2cc428ba2a7e4a3394503f37c3b818900145be6c1f1888bfe2947f49bde33b96d40f41fc5bb85eca2378d2f1215e73979f891093b9ce74a413d93adb3832fccb13957ef3dba9843dca714ca41315b021b4aab86a95182b089c3549de70be18434c9460b6f610b286d958c5055483524c9690d8ae0f0304ddd7936e52155cebebe4d93128c267cd7d0ae034bf0909ddd756e17246fe66c42f4faa9a9a711f0aa47cbc5929f2be44134ef7b1628153817f0e018f483bf1359c74316f0ea649f24ea3aab38d0681d9db984fb1a123a625b89a2e39b80bf0cbb406e0786632104def597bbe6be9c1f4292b9d1e3aaeb6f67bb6b10642dac59b17235306a299d73b44aab285629545680a4a504985ed327ce09c769aec597f684c031985504bae1aea435265029c68d14fe2c02815bc6b1664e2d53f53f4d03df2f8f172ab849870048602c3d9e58b848be1052a48f0973d1d95bc9b8d56e1b63d0195040677e768753630b3a66d3b745175af6b7187a81d275ab869afe0c44282ae33f43a57e7e1749f7dfa10b3a76b6e1ea9ff16919986ba4f7eb3423b55b4a8caa0409b18779ec2d978700365750c7f1974d7e9051d38048f9aa2f36941b47b22d22e644851a11a925030955f845bf9a1b220809b55c85453afbaec8055fe06d27806f7d36e1a9f507309c02d8e4f5a5ac2458719e8b9ff2b1b33e087e293cee457fa4538af5b818cf6786006102b5d21ecea72b727994e81ea4de620c58da93fea4ab66efa10ee5262ae3d8c2767295eb3f231524964cca8ef25045b4c16c2c0dda3161221d27ea0fb2a1638f40726c7139a5be5fd16dbe12c2cf4d5251fdfb4f01b2b95324ed338849568022417c8589cd0323e10ecf2a4e0406182f0c061d37a6b2e7653463b35829d126a54d37308833f8565b3b91ac63acbd33b0a57ebd0a9bea21650d87e70c78873d272c5958e185d40604a8b5fe2c97f245de8edf9f8b3a7d64e8ac9a848d1b94fa485c039b6b27d4a5a2aae0e1b942c13671e8d73cda398ca7ca1870b81ee528f2a8391c5b69a208016974cb2ba9c72cf9b7f71443444f8b0f1e6eb952fe07d687230b7dc4a70143ca71b020b2322e23701d549d6010a4204cd2a2194ced2c538766ca350dbe720a43f9b77be1d549976472ce2022023f9e6d48b83144153f43f47e25c2ae5bdd506dcf5195121032827a27d894054afba7c44312022da3c00328c9df04baf97390ec8ffcbe8946f9fc1d2420421c7a9e570d08f5a305f6f4a4208eea8043efbf047f6b9c2fad5c624a01138bbf27a8fc9f617aff83ba1f134128dcff762f978e871ec67ad46c0e15733fcb783e8de7da43eb3ad11fe935f3ba8b55e6d04788601eb2069e61571b3ef3714463b4e53cbab433a7c49a3fd7b54b67ed807ebc77cccf98551ace6e4f24f0bf93777ae622de1551f77a6c5b99236ce99e09e7fe3f16f6927be330b2cd77f3432f273c22fe5080a4beccbf5055dfb771570f010259382847fe9b2076b5ca1d6d5ba068107612fcdda6ca82868ab674529eedbb9a482a7db2b2ecc3d47e49468f1288a6584d02213e546ea830323ace3145cfe671b9e63799354734eb02f53fe7996ac3c71e394269e180a7d8a8b5f9c7e9574f51ffcffa17ac863586004243a792f3e2eab470992d4f54d6819c8af35b93d7ea6118e13d456766a791cd7556f25afa666ec9d95a082f01e5db90d476f1889b5dc5aedbf73c38dcd0b0016a987d12219fd9a9e99c78cabe17666f55a84a1e174059b62c3ed2adb556a2b8c723ad93cff6dc4796ebcc16b12cb26fa8c52b4ffd8bafbc50e7eba3dc1ae9c80b3fb4e85d7044bc5bf0e9b267f956c2f0d36f211c9a818092b8869f08ed66a23b03239d564a2a79b856160ca4d162e6cfc149a7a2de5fa621e44ed75c37490637d07b1d4d54124f3a6390cf2fac76280599af7e2649b2ad3fac758ca4af59fee5c45ccec1ba775d501d908611f28f9242f8c5e59d15121fc891808bba46c8a7c8200ee733c45b44371dc1a55ea4dd427d8976ed59db29819cba187ca84c89ab68f5f8a05db7a1cc795854d262fb5854a4d777d5f2895ea88df291c6169c0df20972203e5484059c73950f72058f3e1899e408628d611d3716e671dadcd890ff82ace36215cc404c36a0510f1492ba54031583f33859c714f73ac7a99fbcb7ef1f01fc73757dec8b58c8ad19117842fff82c4964f9dd633d40e8b3e55a85c782e687027e296f19470b204464c0a464d00251b9bf086c0be101128d2b75532ab3329878dbd99aea684d5cc6ab2d5ac1dfcedc54f4ec557991f66adadc94825aa980f9aebaa18dc064d896e049d6be3eeced1c271b0418940baa37d80b2f54b098bdc422e7c1109638f3a9d6586d7ab26796b3aae003098f2a048ffd89f04cc6ec99dd72436e3c1acd1dee26632adfd4a982d2b7846d9368b0d2fba742ab27220fcf2e6fd204a628404a24e0d362724d68ee202cef6cb636b21a9cdf55f3d3ee8ae2f48fd1ae92e3e59d5e01f38ebe9e0729d9f0278979873380766bd7fa9c9aaccb95b7b5a02d9b725813077ba6d4bba84c092c1d4cca989c6632eed69ef99679edc00fff5a9373dbfc7cb2a537e7256e33c98fe305db740ea7e39730423319f97797a3cce2c5a032a6f21d0b5d20059823b3ec3e2ea3158dbdf1ccdc91dbcce71960a43233504c6201fdc8863189c10bb227bf1fd6f805110157032107f4e05681c158645466f56b65f25ee2714ce3b10e6d1355bd8a25866a55021b1ff596eb850e414cdfc13185794e46c299604f70a7ccd41534b3af739a57d48b20426c7925bc6aac99d936d6c5947addef6ccebb01ea2696098716afab1440e36a8b53a91e52c70241001b9432aac869d80f237c16aadfc03edaacea525a769d049c8d2e38c889d08aa1f14f8531cd3d2799510d711af89a87c308a0711e044f42c0fa07f5440190f9b98354df122f644ffe01d598efb30a2e8c1e83890b21accb88e9ac4f4482f2ac77caf484f56ea2b3e06e4370eadd0786d717ea6bfe7914f41f87bc3396ca7f774247a290ffd16bd9d32db67a16bf609682df059090e46b033dd92b6d25849291b24ac2d2ad7e3bb2afc15f0067b6299f0ab394046615371d440387aa2d6f8d174c646177b6c01a984421828bb27f32c4ebde2616179faa345060c7d30788108c3cc74fb54c8fa68465a0bb9a2cd462874e2ccd49d5a5690229db74788cb8fea0a5e4cfb2be801412fefe6ac585078de84aa8d1083fb293560b09174263e6b89f994e81acff7cbe1ea6710d490fc975311e232b2e183e5dea021db8addb7aef49bd90895f0d0d1adc6ac706b9d9583d46c84c1a2bae2e56e0c7fba4babf4b02ffefd512d982a0d01fb774d61272a588c64101839d8f2aee0b7e19e6219bd24a240a3ae1ea001c4296f5f1dca31feac4be073a2e87535bab39e3d79e4044566b027f6908f3182793aace07e7981ba8a101519d1d58e1ea58117a73c521bf21f5da35ab363cc6e70939664f40ae70adc20543fefcd174462ced0519851e31842f20d0d8eb112322adc965d1763cf47d0427ad98a2b20bea11571fe88e14ad3a325690b246b19dc90ceea5904fbd509872070b90f3d129cf29c820b11ac30a1a9c7cd64dbe4faa5eef29e12d668f6721a9838259076fd6b06ec6b3b3c420f27017effffdd3b9534e4888728ed4121f3f2c3f68ad8e9661e8189b106a24104302a4cb0c79e18cfa4ec42071add93c1885b13040654760b7642aa42da12b5308950cde9f5029654b79c204a76fbcfd9e03897b3778d149c7ac1c1c6bdcee73ebd9a9e093550a6e4da1f8b618c5d73887ca93145ff297bc8a743de884a0ae2cf5cada3b252656f115a2efd199cd46c0b854ad38be3a207b33ed2f333423fa00bf5c997a016ee86da74205742353191b2efeb55d816d346875735b280b484de680eaa14369055528168df4b95ed0c76ca50671e4d10c66aa0aab32515bcb04ca4a26682b3a4159cb89d54a4c28567a82585313c55a4facd6ca4e94fd51119565f18e25dcf09813085b5ffc4382cb99f580bf3ae2dc7b9f93d4240792eace78d58c2c52bd683e3b4ef242f9fa86bc56df10bde00defb20b86bfee28c5417cdeece3a291c511ff501fbf521f41930a209b807269977f84afe00a2954aab143ae3755e5555bde4fff41e61f9300e667c2c93499fd810a05c4afba9a1b9efdbb754b7fd6bcdb9372b51586d344932cf73dc3b5a4dc949a55d561170e3792e537413daa953c856dd9a52f8d3c443dbbaf251e56a2e5612270931860be5f6d3bff6a9e31274e339e3215b336d241ce11c3b353f78e302c37db1ae07a96a9c76bcfd59a845dcd0c409ec3bb5a74115e6d62e4ffc919acc2af86bd01d632ebd0df7eff83a80cd632bde7f098fba05f0a09d2f9e6dc9f10ce8426d71e14b0a39c599cb4ff6dd301b9df644d8e094831ee0f409a04f0ed00272599e4955bc35615409641358c2e08e7b37936b7d7d92f42df4fd7875768f342c8e707ff2cdda85bae53eb08400a1ac447219d9fdb84a9e15752622e226c5701cd36761a95fbf9081d553052476dab034e4f8b270d487ac58bcf5af481d4cef37e05e32a695b32b57f7476a0f84754963bab27708baa8f9e56a3d634b04d839d3acb3b87e3766b28f765a61d0ee2103528a0645701b190de2734b104a2a5cd3f41640834cffa6d93e0bd2c996c64792202ce6476a798badd8eda2b66106370dfbe1c41c166f207755256306598a27b4aff0afc9801efbe7d05797245efd7ea4bdefe61392884bb2e2e6c97bf4c33acae06b2466c2066a988615d303e571427c8ae6854021253ca437dfbd8f8cafe488c9c7939046a615c0cedede2cf0f67eb8d0f6dc34cecca442872b61906d638970beb906437330eb52e8935b4354da7ba684e858de3255aa3007eed23d1e74dc138ff54ca13bb581eba38deb74c9e2c850c36378c99a44f180ea8f068084ffa80c09ec4e897ac08e05c96a37fdf16cc3f61aa11a1f3e31860c08d242b0da89d65a9af6c8efa6b1b37fed5d00cc09c5736d85104aada9aba7353995d6c228154628121303a0348f560cb2879c2821db62ccb07f2b26854f6a301cede91aede16aa6a97b8828508ceb3250d8edb8015af816df5f4813dfbedf0f03b7f3cbbe2c788e6b79c7d674b3c96336d809422793b720d81f48724c30c0015d123629ea9d0b2946af8a7db1d1374b1d8378673149d98a76141cff9c77c32e5f1303ef281c03ff7721ed3d1231e83f8b615049a611e34a3692843297456d20726638b30e544a988a147cba277e224b89e599518d6e5dcde00191bb252acbdfe71f2098c965382ec23dc25db3054e03218f3f380c8dbef861a32b2634646adeea60659f0a7940eca8fb7859875f1422806c87292bdc6b7d90dc0b6796a75c8dbc41c6273b657aebdc03d78105b56062ee4101bd880ef06f76a73f514ea12d4b3ff5ed006903cfd6e5bc0e06d7228cf25e9c73cd4116fb83546a3ec41d5179c927be22806ef3d1ca98a4d6bfca3c6b08d3ef6228ab669546028b56397a0436c5f2d3ad76db35ca594535d2b652c7df7cc5d79a78bde592e71e8810a1b4ada2479295e084458ba22a89ddd943bb0403a751f5ea7aa2de04c31900ecaa0cdd889f37c759e84712121c54a8794319d08384709766233bc358e9feacf85136974c2c63c0e79442555bae3020034d02ad9ba8c4ceb60023a409fc43d359237d991e6682df5b1e5904ce6ea12f77264dd03082691cd92728224248383634cd090539416c931a5ab711975f2f8c49145fed05ca2b52d144b7f6d4d291ba33ebedadbb62f8c0658891265e2827a8ce6c6d6897ea27b99f9a08eba8188df8f70a00ecea0d0c25e10d98e72b72393d9140d5374b8290f334afa2296d700cbd05935210c896570e69c427f3d1134a2a2720079ea3ada0a432d659e388c11f37783d76fb212a68aba31c63aeae0922e4d2e123175eb279cdbe080136d6a2e23b289fe1af6065c9a8a11cd4ea6f5ac7afa453d64a212eedcb0c80b037028e22da12ac2df294b03bcb197e550551acc4ed345686844367d2651c9466802cdc18c0c3a66e90bdf19086d85788d94f589ac3284132bb8ff2a9098e523386ceddf7939e56e18cb372656fc4627223437db4083d7d53cfb0f024629fad3e5be030fbca6b4d6cfa61180ec1086da4bc5b120f5df5549ee8c050c434b738252ce80d312320f1fffda8ad3568aadc96e85b07e3f3193669087c5ba2880bbda1ab4650714689d1962b1b7caadcdb24f5eee04e05afae32fe358072281aaeab11756ab50ddd3e9341b574996e44e439e5addcaadc13f0ef39d56922b512a18d2e4a34755faa988cf264ee0144c7f59e90a700c166753724890f0421b8a2ca23418d45bbef42b07b205e9b77b8a049d5cbcccb8e69ed94b6b9557ddcb399d426ebb06ff55e7c2d87b22a6bb7771d64e61d364a700db59fa27213a8ca863bebfbaa7b131452c6382deac7ac8c63f76210292ea4c9e73148473a2810ef53b2a8c741b7e24c18727db9ac34aa66b96d95fb3ae24297360f6f304b3a4c78c3c1bc01fbdfa2eceaaa092173d3ce618a34a3cf9f5a39c00f7480701ad9ea96c564c2f0e5bbc1cf249ddcc6a590c8e3b9ddf340a92404397d3bfe18363dc74b532d137be7f81ae4d3014eff572395d84442f143e015c7727f9f268b330b68c35a03f3c2a522857fadb753371bb1687c258f4770d817401fa24bdc01b855a5d7ea6d5a214b062669cde99585eaae5188fbbc70ea4a8471136f8701ccf68e783bf4bdc5eddffa8f0f4a6208f2e0b8f142b65b97aedb391c21dd0b9133b62f9ce3b9642ff8ef5b1dc1e864b513bf7f5654151148357303fd39d1487aca3020824e5fe2f4eaba3022691e8d3fa9f559cb582c368c1d337ab154971159de95a23ea83c6730778f86047f28d561f99fba54829fcf990f4ec813d95baa4ce5ff09d27c1b978440777563ca38df5d56d67d1a813fcdb98a20ed8c6691539747f48c60d5933c33aba98c6ef391d9b566e0add4bb6ab1e38033b87591ad512071c0bdb78cfa2799e41ef71471a756de3e245d58ef45008621d9585a0ad65bb898ecdc26a5701c90beeb9ddfbd058989301035cbd9fd88e3c7f15e387b9e99135c85fc56ff5121b08167a5493c84dc933a19ec81dc73066d4bf60aaa031eacf38f8e56f61aad2a9b94510863c37f1bdaaa1d39df13c7de5e4cfbac15f3661f225acf2a1ab5ad93edeaebe49e0b461d150e4e400e63350ca589442075f805366c7e01d99e8cce281ac5a7ce42791928bf60afdd8f716024f6d0f1fcf23b776f3ebdfa9055f9c89cc199b299c803846c5bc53034fa178c90ee7359472b95deef1638df825bc3532965105a84cbede7d1930aa76102a9a621fe65aa2e2a642bbf3aaf78c789a3c7ff002eac2a0ddb2ea19b09adf24eac90866040f20034a80d3ed1f200646e2142692dcd6e518990013de86200d0de0a5c5e860608db959cc85a704ba4814f60de236f871e0bdca9ae7d84a49ad2c7638dfc3fe86a99195fac68b67d2c10107d39663c13c2bf2720ad59231783d9e0a4eb4eddaa6b3b0e993e0e3cc74f12882ecd77c42800f92eb6ae34c4b671c0b7b7740dbc823da94b3edf15fa448a4a9a095b5e107fb5ebf0e26354a8323c50fefb5944c4836319d676f2d6ce43d9239f562c9a25958a771fda5b0d6b79d2efa9092d5655de06a25eb7b5ce1706a6e7c4e95f052c6d36616f26936effa03819881cbde9b35fb131f871c5b87ac6896b67a58b36e78ae9d0673f85fb55576592f2479050597e112c3a52e0a69a19e60dcebbf306f192ede843ceedb8ab71a576186065e5111f2eebd192e263d95ba0e84bc6782a688da58aa5812de2ec61bae1eea6ddb76410d27132df09907132165a91a4b397e82aa53b9ba4f0ad91772275a06df6f62904b67fdbf8e9231bbe29accf3a3005129cccb13d54b7581f05367630a42e08db58aec6da257cc0cdee89b2cdd0e44bea6fee485656f3fcec9613f99d86745f510191aaa76cbc23a5fe78e69114c728454ec33dbd96f3b469e2c5e8cbca82ce2a8e27ce9d767b14c92a31c8bf5c5e35a43a06bc5786b3f9588fb8bc0d86c31e4a21008cf54f9396ee4e60d18bc37269aa6294e403ac3dcb6fd3584c088b2a2cd608b3db23efb0db8ed87b6c6e1dfeffda5d50c2163261f393efab0dd310a4277cf7fdb5921773f2a2171784483b71dee3e227f6274be8dbf5650e9acfc38ba0eb526d1067eb121bd0d12a7c4758fa949531c44c3508dd9fc96172a3ef6786ff4e610479c7f99f3f8f32779e644804bb89ec556ff6921d125c5cf43263ae0a2c676b9fdbb100360076ccd5dac451e5459530bcc994a12e0271d6763848bf1d8b12c37767694030676bdd1503bfa6715a918b68ceacdda907a8d52fd8e9326e2d0d2672258a68dc2d7feff9a64fd8b214c3d9683f1cf568991306ad2c76ec22704d92815aec3408a053f0841411a95b9afb657cd76f04c76fb022d84bd395f2144451846c26356900e846c61b65eb258e97cba10759503b2c4d564209842f07c3a1623f1eef658dbbfd8b3be6fb17bd9337a609f0ad46af47c7537bd6624a2909718082f29945d28e0b55be04564088076426205736ecba45d1af9f98b588433888e1a0035fc8755d108f4a0b5445e39969090a00891951473511d65571e751e671947258308d12357939170a18288dc25ab08245d97f08d143c7d16d7ce5800d392e0e61f348f6321341848d7681858e835b699891f3497ebd6aa7bedd204d4763b4780723c50857f9aa8413c613016f44c95371f9ba1c36573b5e0ff84498dbe19d1017d04359f34edf0919a8619b38115923c8afddfc394297a06e3c2faaf0d9dec32516c85b8a9b9ae3a0164387af576d0f6c22c3c8bc286618236b00b17a24c047be01f9734597e0f5cee7e8b83125d9de6a0828137a099e478d1a1ee50182dd61570c17bb5d86db76720994b58ae02c47dfb804d6b7bbc2390743ed76220e725003c4b652028e4ce6eafa8244f2b3960a306602c2ca645611b88e581eb9584312a905074ab771971eb93e203858188bb56431dcbeefb230416985bf78cba52cce0bec39879293ccc5963119dd53931269e4fe111df62779db97dc46db003af680cbb54e695c4364cb083eea7607d047d8524733eac892e9b15ba65cc2c50229118903baee7462f591237a6da15bef136cc76a5a99363a489cfca40480b9c5d438d89af3f8c19278dc2cd0c7d1a7f3a75df8f7c555c050afe80453a78c424ca93031e5629bf19edee9de3949715f60138f1da5734b2bea038d676d545d2074431f705bfd39de65a1ef10e492fb28e9729b6fa3c8fe8d7b22023141972239086f855d416708e02196c0e128e3c01c1a6bc8d265f12ba051d03fea91ab1d2ab6a8376810ea9e060b9e69b421f3283733efd18c62e6f1571ea7ee678f7b50d4341a9a6faa29eeb0e69a4d36313c469e63dc6c6ba60cc1ed04e1728f3f9997c6b8d3552f6616defd99453d8b23403eedba0bc672f30ef5e986ff6a1f0989eea68c449a7abcbe81d52329eabc083ae80054b0d999f24ca227085a5a97307ac9cce23b7093b446fdd97f45a92632c791463fb6b18b5b27ea93d76a8e19256575181b7b42d2fb8b03581484ce44c3cff597c1c71535bfd99e3eb4f39da1ef4ab9c586224c69b2828840375f57afc5922523141321e202fb6041001a0b56ccc036eb205923fc225c0da5b940b7cd312c46b09bfe3a781cd3cd44c87ae8f68be000adc86dccd7ca39aef52a1ef2aabcd73a07ead8735d183ee4b13b1f075c8f7a4b9696f2ab8087d1c4083c43f70164402dc9e020aadc5555c40d45da5034b3b236b48bb92766518dbb179281286d019ee73b6b5045178795d5c33a1eb5f34a0dfb53ab053db4bec1310df806c66fe099d65efa9f5d40611714b8394c1418e000590b117b4197e8f80ebf5edde9b6c29a54c322519d2045e05490547ac4c23c0e771500ff64cccb62154923be280c12e6a0d99d252d204359062a5a49ce0880e468c90e2871778122880a50844f881a244871b30e987fd3afdf26390cdbac6a358f99f579cfe4173a8f476a0363d19fa3ac7a601065bfad5dc9c93636c25ac91cf24314ee93ea98c2beebd9a71c6e9d33d46193dc6e87189a5925229a54f97ee2e9d0a9592763be0adcebdc4dcfad39f52cf9c274b9f4764e7440bf4eaaadccfc7aa963369b4a9d66377c7b9650a7686f1bdcb005fe7a5ee76f6f66e29d14a1ae3eef3679c3e2184104209a1c378c49c7535e79cee51468f317ab432c5ef74e93ee70e789b9d230c30ecfa2c73afb1bb63d322ee32a61f523aa5f4e9d2dda5c7a06394524a8fe9f13d638894dd7c6b47a59cd3dda3841042082184d309066bd8ecfafdeb9252daf5cf2e06beb429bcb4b28468b9306bcff6cadf61d62b8f892fa5a4925229dd474a29a1c62379b2a332974f5b103dfa7cc85363aa3bb3471ff77c4e9eeb2c397ae4c8ccccec1caff8c7e8b516e396ee76ef6e668628f78fdcccdc168391eeee156231527e9d754d949e4f4b253e0004b303def9b3d499269f27a65f522d2793ae6952f6ca21ed628c18849a7c9c9ed33fe8c2d68fbdb0e581a5ebe3b10502a20b5b1fe8b99f8c96078e2084106a7e82feca45c418638cfc3d3d3d3bf2b6078347bbb793a5bbbb3beef45111a9226efc3dc6672dc79d99739a99f965a0397dc6957f28a533dc965dd37984dcc3634fd52b7feab94caf3c5564eb7fd90f0cdcf03858081b80df3ffbe15dd9f4e349155908bd52e99e0e4d096c40badd852d1b8a80bc3c7bd09d30763d7bb5572d48adc0ead097f7fb8b7dd75c27184cf2779d78f8a538517a2f1d87a13899ae99d0a513972916d8f97cbf8f994c6a0596eff74c4fa0a961e37e7c3f16c234240cb18a2a5a3610ddefa30d4337beea0416c234bc1779a57be6a70cf0dcf91fd3af9e578d90eccd9fde173f674efe79e23de40fe63d608cf32376274ccc63197d0c667a80ca757161cb034b2e163339e44231a889005d1f3e3dbf7ce97dfca383afd78f12e6b5e79797d5db89577bfa9d3c7e1adfafe6e9548ffe977954dea9535fab9e4e7c7935afbd8f1a03e48d1e0b39e9c0ea7cac8bf98913b198cdccda8fbbb58337a65b316b37df7698b6a2dad73aecb1dad9ce7ba6d2eff892651df4ae3d83e27e7830be8c91476b8d0accdd75bef9f167f0e9ee8f75a42fb25ed9537ad18b5ef4a28f13e9f559a773a21a863da519fdec82216aa7d353ab7df61fcc6b57efc46f276a339af7edfc8b0f6aaf79d6fb32ecba3cea7d17a667160f085d015cd812b27485245d1e72610b07262e0603a3ffa7f7c2f363fee9f4ec338374beebe5cf7067f75d3ee94fff9dbef2a295f2cd5808d398307f7a7939cd7f79c189a7eee3201dede1c93e869d4ea787991fef37c3d5e1d776b0df8ab7f35fa0e4fb3761cfbce87bd5b731cee2c5fb32c0f3adf076fa9ebc8f218c57e7e9fdb58e8564d83d79df553d54af78fe44492fb34d83f0614daf5b76e7c3e46384c3935b800b5b38f874f3fcd0e46bfd5a6bb2a30e9e0f7a9fcfa9c1d7a6a64d0dbe3635f85a7fec743cde091b2846ec3f4fd33a8979dabf90ffed4c9de97d8c354482f939e78ba75d0fd3793c27cfaba84c6b4a14c449909f8bc1b0f7eff4e52ec8961b800b5b417c9a5c035cd80ad2743f7b797ef4a030de481f5ed8b99401ce58c7d7833cc8857c6847df93f742c61ef71f646a8d01963fe6711af50c847d7e7c789089bd0f63a16beccbc72e1d0ff33c21d8cf7bbcce7d68e740ae2ca867e4a7a2b0f5637c0927ffa0ae29e1657df11f0b5de9c91dbef675dc0708cb2bff877cecfb49afe4abba66f58cfc17a9fffa8881d8a7277a5e94d17d7c65f8e895bcfe1f83f13e7efc5fdbb63d84dbe374d7b950af867a25df35f6516d8447ef798cff205309ff79100dd7fbe89a171a035cfcf5f3c5cbffd1e3e22f19f89ee095d1c15b426751bd922fd3c1e85eb8e0ba24aadfbad97d9eea3e2672e5b760fa38165d0cf47ef02883f1befa2235e9498bcd6659dd484603a0082d111ca582d00a811622d9d30a01526b07a3d60eac960e575a3ab0361a9abdfade11075d2f6619594691b5ac228bb744d6dda0d8cf2f23dd8f9338696362b3ff9826a92fcf9bcf4aed51dceb3dc9bddaabb8440496fa81bd5a3a34e1d21a22c425680df9b95d3aa51437277c863cb5e6944257a4a0be18b9bcc829e6c216d04f2b87a6560e44e02cbbb095030f2e3f06354f82c9b8ccc119b6c1a9d70c4ec5c9bcccab7054c8d12b2440c0e0a840e9124754e0d384891302a84269e80728764004238e609104f1b8704fe96451240a2192183282105364e8c92189a2185cc9c1092601b872e98c4b9b705428015076e957a14b632e9d50ea949c4a05ee57a90b5b391855218c05dbd87664a35a477a6ecc852d233f37f5c4a4e9958d1abd2a410d2f9432a50fa5b8941ee9e1524a294d41c95059aa0696c6860d64c9e4f0c39d71610b044c4a489fef4c7740d845a9cb5217a62a7a92226b3e3d9c66f62e54ba187539ea92144980455bf37c21bce199cb4002f4d32e063c407347d66f70e6cbdc702ddce460c105ff1d4d4970062ac1196e09ee68628233f07af7346150555bcbb1a798e5b0a0a901637b6822f69f4c21c67ff35696f27a025188ffc9cbb980299c1e3e0c78c3c6cdf34fdbdc74006e8cefd1c480b1c6b0487d8e1c37396e707244a6161b334d1a0303c3434c3b7d57dcb40dccb1e223cc8bf7b90d19ffd968cc850be8dcfb4b78a384f79f9c428c77ff77f7be176e56368eb0fe1f4d0d1b4fb8c70526c3fb64dc12627409601af1653a1660749d0b9a8ebe2f3c084014e2739d0a49967b7f7e26026f34b3f8a8e826d5c2e34d0d377ba28deaa30b0feb8779ae83bdda54dd0e2e54e00cbc33ba1d5c8ce00cbc5eb783cb119c8117ebba6e07972438036f771f77b7eeeb9e0b6d70e3a7ba16dd572faadbe94b69daa6da483db1f05216ac186fce1b1f380381e00cbc5d82ba0c5956510a076fe3382227f151af6e68689496e00cbc4c5d7a4eb88dbd7bb6571d0c1efef4a9a7f3f2ee3152af22f6d2395c5118e6f388777a497c9e93f8a8e8a68509dcdcdc70e9e1e2c305884b50a534931293b4e37bb5ce210c3f6e43b8a237f66c43d813ae0fc11948549bd81d5c56b086be9f70e3dba2a2a25befc74dc00ba30d8c918fbeadb51eb18aaf75bb1ff77cdb4df28fd398a451c219fa51868716973efd0778cf7bb0672603e915f7f42a47afe2bb77d3abf81cff4513f119a9474bd76ce11b63fc62dcd18508cec0267006dee915c11978a3cd8e2e2c3803efc741377ef7c4680f0698a79060dd47d77081377a3c26bfb0a5848acb4bb1c8dfbdfa7fdcffaa31d654600fc2e2f3dcacd33a1abb1d794ff4afee6b2447f58abba926bb05b11f177111175d8f028582289870618c2b43bca816b35e29348428f8cfceb3ce421afe2e83b33150988c4fc69549b4afd77f95797285b5106b8dded7e246d91e0aa210e12a7eed32b88a1f637ce1bacd74d4db30fcb8ae79b0675c900f8de0d23401065530e2d307d201ae020713fef930e243d85afc24b476d90d1547cc952cae7c0d1e407e8a06d67b2573e0164fba666aef1a0fcfe31358ffbd8b2c268eb42cc5261f22434b8aa6182129f9145dd33732d1dc351ef3ddfbbc8b7d554046b55abdaf6b392f1e8434344cfbc86302cddaf1758c6a3c1cfb8a558d472cea15cacb3a78ab664b60bfe8e449d7603cdc8b45bd92812f256aa20098fb4c4fdac98381e3932805a2101f7386fe3fbb38c5bdc882284423f68b4e6efc2f3a894550f6645d93601c440cc6441431c5044cad13f85cd832814f0b09536a084a4a47472d24545a488ab6a1243a734f51b11ffd50d723c31b74d2495356ecf79752d409aa156ace39256d1a52483cd1523a74c27e198a9371f7eeb7ac85312cd6a5944acc3973522eb01f7767d7a8569945c16ec6104a99294f1a545a939c9eced7a1dfff510fc60afdf4db93eea16aadb5d65aeb75d148a912c584fdfe4a57adbaa67bf6a40142d31580511343ac2122b76560a1123720920236c5968039848191ad191781e81ebc22eb0f0caa3cb584fde26d78835b5e2a06961fd260354bbde0cb7a60504b2961fdfd6bb6006c0457aeeac25611a38b71969304c60afe3af2fb3fe9c158a1bd2471a6aa40256e40e44e5b931851398185ad2120b109831b91852d1210b9f5e7bab74840e4faa3a0f799fcdaab58c4720f573418562331eeb49d04c0cb4042b0ecc3186d609e8da88d659652db30736ae3e7ba39a3e570cce334b33026ba865bc47c57226dc3d9b8f8d47f75fbeb5d74acb4795e1713f32bba961f079a5ced3f4ebaf2593cea5f64c7f3828a7916311fbbaf91623829da4ce084657fd272b2f82f3f8388c55e7a1e9ff9b2c6d887ba1fb7935411ec77c34284213dd82baf458aae7b10d519102924ec80973fc6ad06cb0fb71a64366b4b09315af905df0a3da8c69fc065e619918e7480611fb6c3f3d6c1a3232855050603bf993bd5c576aacb4603736f34d87e9fe185080caafcb1541596524a293d7d77a7ff9e464fc1024c831f4b75b1b608d1b5cd1d5f2044a15a805350310dce3c955207f335daac549c420ea651551cfbe59be1c2782f40141803bde25fe5b86ad6ded7bc1d61fb1b76cdc9fbe0962d997c7ba55775442017402925ffcc39a5ec7cf8010876508e4048a887aec02fdffc153daeefeb337ff7e475ba2eb51dfed8d472ba1fa26e64e1d2877961a46cf6e8c1334545ad97c5378b0ef60c76dbe377a41e7307eee6d410d2a574664e11419bf3e632eac2e041bf7ef574e06dff0bdc5c9a38a4a688b01f0da7efb667d8e9bdf8a7579e7375df0c77d21860af6a8dd43b3d4ef48ca689293f46ffd4139436408a9110406045891eb440024e9870c2830d94384982a36590dbdd50a6f458c3c60dcb1b78844041931a18d1a464a4030e9e233b7092c41129504801018e8fc607202d1f6c68f5d0f4c47f7e8c0cb57e68d2f2e10677c196560f4f8c5252b0965a4149ad2022ad202053b478d0d2e201484b044d29295a3d2c69f5d0d3e2e10ae646362ad8a91edb68b0aa8e09f63e3862d89f3abe8620e0483e0fba41f27d5c89e36320ce3e4e2e943dcfa8c17efe73e5c97f7a05e47eb147ffe99a6b03d0c65e8f752ee4433d23df8b5c06c136d2d1cf8fdfc386e18c7d78017171ed7f4cc4c70fef3700e5fb803784baa6d26071b832f51f0fb91f23814c7de43d4e9f30cbdd093bfd2965adedf1f163c9663fffeb239b7d7cda90e38bf4def392a8be27d6da7d74d447998bbf5cfcf5e4bae0930c1f736a39dd637c72cc83e24c9013456e65832ab631b1fe17cdb7baac74a165669cbe6aca080bddb11355b13081050b164f311354dda9bbfc849dec5f8f4d5a67987075de557a3a9d4e9e0c978eeb75b0ab977493165ee758e733baa6d22bf92674cd04ad4017919f1f0f721bd5cbf7265ee42c47e24efc89135db9e4ca0f9c109c91ed061c0b38232ce058c01989b2fb38643e112f19192e888c4a8584ead6ca598f344a173343c89021ffb7326265e2cffd645ca27e4e996233a649046fc8a6b6b99090b468d9b2658ac99aac78014dd692b69953260b75c9200ef59c62cbfd1e026982ff62e989595f858a4343d80d1996997dba1ed6445b4b48827ded30ac5321cef4cf1e10d0f1e24aaf0517cc172e736957a39b1e0da462837323d3ab1b8e6b86ee30f8ad7c922cda5adc10678523c106053702ae0827c4fdc0f9c0f5c005713c7022e042c055e188703b703a704338202e070e04dc079c89c382050b5785abc205c165d9b27051b8281c144e069c118785c3c2cd8023dab2704bb820b8197033e0a27059b62c1c144e0a27858bc249e1a27051382c1c160e0b870317858bc261e182b0cccdc0f2671891e5ff645167b1f2321096df2fa7c0faddb2d8c82dd9b2d8bedc125b16cb77cb62e1e58fdc0c38281c969b22dc105c0cb826e0d2732e2efcaeebf26f8fc626fe27e37e978c0ba18d7f9cacd5bde8c1486334736d28b1dc397056b821b82338168b63714f3624b82adc109e747bc3411623479c861c314e12451b2a47ac4ba1984d4edc935adfaff753f57fe9eae59c152dbb620f083494494abd4a4ad20c3dbe486f0037091b9fa377026babd5e5f1ea6492d422b72cc51926d9d4ab991b3da9a424eb641237914dbac649db482d3d93e42a8dab2267ae77367292d0c4192b15091b15ce870bc2ddc0d9c001e13ac0d5c0d1c0f56c556c5d362e5bd396840d091b151b1367653bc26684ad08db149b141b11b6216c4b9b10b6206c40d8b66c3fe0aa6c3ed8a2d894b61e6c3cd876b069d974b04dc1e198cde95c155eda6cb03db1216d4f6c48441b92fdeaf6c45683df9ed8ac6c58dc2fa0daaea8b625623cb12014480439b19a90b353e06487d8248b6ae582091e38596d4b1cd50861e5ee7a5afaa474424a7a04944d4e4b43752eb97bb7b76f4fd8f6b8e4fa47245188c8f59feb40ae4d643593f7bd109b3411599995d78a4543d34cf1db8b3e42c49fd82970a2439c4b93e8c4b2c1c9892a272768b61c9c582d805cba4f1b7126ae98b051e5df16f2a156bef2a6f9355beade6a9075d635be19599fff4d29374acffe588e2193737a2fcc26d7878c88aec358e102b3c9f55e55e9d81551656763c99620982ed48cd849a38add325141dca4d0b49808d9103796c7950ab696b498d470e785ad254d5b9456104ad27bec560417bb1d21814e432e6ec0a04a0849a822c529d3a38c91b58a3e058aedaaa532b19cdb78298c70151f3e437677210c3677331781619b11167a2ed4c47474c5499308147fb628519982a4879a908e8a9c30d0d20b2aa8b0cd08cbd20807d4016c45702bb2cccc7cdd37202c4a46d52af2e47e367cd88106373c51d2411244c0a51b6c20e2870a1cb0c0c06fb5fdb0bf76bd506b1ae6014b1d2efc168eae0b2b52400185890b80280247008a60c52789072444b1048e540d2cac7c83ccabb86701081d70297a72041d7c400128c8220320b4200a24584790d08e18cd90439cc024d1b40b5b4ab6cc2160f7cb8e086140971222941031d15212a4dd1cc1e244ae6b3e28f37136462ccb300cbb3a188c615d3685d5e1bf5e890f1047f7b32cfb1df4b3e7b931d6ac3b61270f0927563a9b9b731baa1368a28e3bec15160caab05412acfc2fa393a6b35412ec1257f97f283f59fbd884b102eafbdbfb563cea792e4e0341e5d6b8b045c4ba18cda8025ab0f816cf73af53d75c2ba5945e3eeea9c3beb640752cba15d84b2731ce566d63555d63e95bebc28f6e4705f68357eea5700aed5dbb31c783c183fefc1dd4765fbdf65f3ad8fcb2d337a6637c9c5859b32ef4a840d7bcfc75a59e6c6a0a6b6b5aa8f91a369ac7f4fce773afda999fbd0f3e4f8a0a5b5f66aaae81d72f9c9dabb8e75445cacb5a8b68e8f66b8f7936a303b69f9f93e99a18fcb1f8d5b0b93abf5a9704e62f987f111fabdec75f16994da884ef1346b574341300d00033150000281008070443a14828cd1431583e14800b7b9e406e449908448118c7611405311c07114308310000438821c618860c29006111f9dc8780a656e5ff21ae22de225ac9f0fe0528dd3f2275a6c53f0f1600b50406bf8ccc3db722b2cfdf8128ba0fae9984e94ac7cfd7f2d8ece38236a35f49813e3cf60626564995efadd186602dcb2464c52fc740bf01bc44839c4d39966b96df844e46594b33c556ff565d9d46b2e26abd0ef34f44a1711e22ba8d1321cc802cfa656099c08946ace38ae29ae08fd10f455f4f9808c1c066bb99d9d4e4c1acbbb0ac11b2da26717252db1ba5b2586af585bec1ec61044a1409a0b526256069e0c01f6db6dcfd4d483b525869274e4ea8795360b4cb91b6e76f2ca065e14140a2b4dd95474ecb98bd83e7faa1df59bb2a4a891ea2c65c70e31e83a0412636a1743f9200b16e8ee8e69ec8c23e243d1feebeeaee6bec442649bbac217ff29c0a241afe5b90a97fa0e93a00b1ec9c1330dcf2aac01c4e463028da73cd00063362bdbfa30b24972ccf1f2c6d0c35c1ffe30ede59664696baf26e0b4006c187c9e938301c7133af33362d225fd5313562d8435966f393309786f5a6275b24f22275af9bfb02515bc1b7597707935f96e7dd4ac45d8fcbd11c8f239b48cb81c9fdbda984811174bfc8e5f4b2c964b58f2e9e4c4859fa74a3ec6df64352fe45cf98bc6002a5e901bdce8123ca32f2ee7dfa0813ef9147ce8f8515b57a50b149e55d7cba0446c50266668f7224d6b467f0b811d7dc521a980af4081d58a3ee33a266d93ebb69d92c5b20392b75626aa11046f87de66a3f16235ed830120efdeca07e731ae1ea3255daa280d0e5615ed6e5391c4cfd3ec4c1dd3ba0aedb519f600115142f23e8fe2dc187284a4be9f31e2096ac831e038b540c22f3b4ce345c136e2275d270195577b24e5b0e5cae9b08b4a4375c33111f0c0daa432413528613e812b41b5270e34b48ae76b0ca217d1b92f1d8b2cbc0d2f4dd981a3722d466e54d15731a58784a8809d7a5f17500b4555401f6ed493a99dfe2a9498acd390c1ef500e407f7113d12f4c5a295095df5ca484ceae26a7114bccdb4aa81ad71fce7f5d3bea3d1dc4f4c749af97b9acbf23052f7cb531bbdda7f866462b4b75939cc206b48ff35765c9eacfa8934c370f4ba3c5174b6fad38d0a31a232c2bc501b77f8879ac7d4620a5d51cdfa226385b499fd5cdd93cd9b463bd4c660e5c83efe50d309261b367bebe9918730903c461548380f09816ef6a74f7ae9a7154b5cb008e8700206b38c4611ac8e6bc05f5d8f8df53e9fd2a835f812873b472b369601a20f3a70505b8f8889432bea4cf0613140da1bc87cd206eb29dbb96afd4258e758999d1712ff89f07c0b03c75869cfe80e209fb81659a70b5386cb9dd4da70998175a210a3d05088cc61ac06c1efc3e39abeeb99ff67960338b1f949da98a6241298d9d4254ff02a36a72c256efdbeb08f8aa7240401fc6c0d62dce2c6f6f536079ff0185d1be04c13a88b7d6797ac8c4c9c57ea9bdd3c6be84ecc3313a14cd8a70867888910c477e168ec9bc70d57b3a248600b3a76a447c78f422fa4afc2333228508ce155319c33058caf884915bb8aec939281ccaaa561ee128334d980d4db48119803ead0510ca788428c51e0bb235903e560fe2ad003577c47f6bb4130adbec10f1ed461ae84d6eb8c4fba426dd5d2ac603413b4a12b768da496c13eac3d98ce802161712cce27dac4bd02cd1197c1fd4a0b7394903dec2dd5c38da76650f0496e2b5097273aa8c95c41852adb56b2d9c5f3c4a9bd23a740ef0438e2eb96421fa0900ab938c7fc3d032944b22f7841414f48bf3c9dbede6885e4506aa5a847b7214b12afdae6ce1f017627c2204d753feb2ba4d931560f32a3c46d800454c8943ea9837e49ee0961d441c505989ee2155733a5697dafbb39024eb1b7d8548b5ffe5064aa97c3a74f52c50501a6ba818f90c753707dd6d08b3d4d556008411444482d8f9ff8f1ce3cbbd282761f517d4545bf6f00c6ff0905614148fc01d373fae3c3d813c7bee9c23445b50a95091c10627992c5925274e38db3ea00c76f163755dd479c8c56a01bd36825768474735375d3b59819090277f8dbf5cde48f31275c972e3f65e1275a7fa361f40d6300f61d61ff64697cd10cd87c04a0bb122ba9ec321071af45b4530c45ab2543570194ee8418b82517a5467d447ada22652dd7426ab9f9b71cf57934d2345351f5e055a6d4a0b90f24d4a8077a79ea522d53af8a557072bc76156071c9c36bc6528ed47043c4ec82941d6f429919c1d386c946c081a98fda31772c788a5cbd25c1dec8834cc9d21313ade1073bdfd5013f07c03d412e2f25e35430ad4117f489427c6428b1238834d13f1e89883e8db9b664ed1d89dead1033a3334abf8b2f14a89208266c666e8444fc1e4bfeec630c2bd97b97919ea456c5907e220c885030c9c7b4376ab8f0b13a8bc855617c106760777cb67e5818391064101da6eca0fc79b2027a1fa4e447a93dc120aa23e118c820810240772631cccb61158f7b9f07a649db417e289126fce17ac4bab9916cfb4caf164f488c127f00bd5bd620e715f66867d67d12af534b7101cc1349febb4c9dca601bec4b7a1b04310c4f5c2b239307980cef9d0f00d3313ab235f861f6e86854c6ae82a7406049064594e85e5a28f8e304c2bdda75c4c328de4da0ea4e6a77b21fcd04a79ae1ec5b302a567dd79e83c2d0df88a29c7589740a51d933f1e8ea6d4ccec54dab96a8428f1a2e205f5c5edc4ad93611995d6f4b47f395676b86b2124ec2cfe195f9949d222ad37eb38dc7f17afa3a2da2f52f72f8001adddfbeccf29985399ce9037b953dad8377dd2c05eb54f68afc151772021ca43cc78aed4075e34069cd1e1025384e50afd14baf9fa7782a2d2f662de22a40f0be01d1c08489656f0ce82f916b86fffcb11c532cb54212f241839f65dc7c7505fabec92f7f5fd9aa2f1abd528910d3a34e432c7d9f38c4adf7818920219f95aa468865bf2502a5ad33b6e0825217351ac93d9dcf670745e35c7490136fe63d89166e56c07de0a4dedcacee514dd9376c99e0f41e2c47eda3429dc121895f2e6e05b1ec0f804554a872bb0aedccfb881d9203a21f1bac1dca91cbaa1dd7249b308fed8c61fb2db7a5e5abfb1005880af5baa1e2e45447df2a52559626b1de092bbfeb5463e5e368d5c84f853bbd7425d0b1b618076d97b60f8669096fb158fb7b35656475caad3301f82abaf0a5b578c48140dae281d70ac37714c1a3f8a2398417a07f7fc6802544946e5ec039c6c669aa6be256e25a2bfc40090fff81ab9b92c6bb4ef3e40281b990250651b7b2e03351cfa01f4d4c9e4a333eac8ac06f28f27fef88bdf2865b96d961fda88813402513f1450dfd8a5baf2e7e9ed4723b7068763a8a2984b3f89f1023d5accf7eb63fc6b975455040aadf0679099c1195610a399568ebf32e16c9466c7286219c8a451e33b513f59bbdfbe530b10494855400bcc8b6594c9491ec9e740e3ba7093001d140b84ee424dcbec0096faf44f605e33c0a3e330a352699eb53e58dbaa6ceceaeb95104c153515cb44219a1d3f934aa1db40cb860917001737ae2a438bbf5e6904c06821b9ec15ea0d0dd12cef14252f11cc236bb130a9c908452dca84a3f834154343e4dfb16a68ac040533c49f8b69f294afc6a9bc057d00366a29ab256659034735395374c9440a82acbe2091725d9cb70df83c0e70c1202cfa9380606133ff132a31c0f0f8b5cf007b7d649e31715c1d1f055e90c3001d919a18b6c5b9ea8b630e0fb68b8a1eb1c1ee079e42a801932d2ff7abc0f71550fc75e59cc692e6becae9f0621299f8d478e9f0fbce8b148613b2b0fefc5f55de6e660b6a7c8e08e308a5da7b80a1469b44d96216ca444d8800bca2ba6114609e0e1f6311e992d8137df0f5e359f4b35953d2899ab2512e3114b8e198337070df0c11c80676f45f1ae56bf569a57ee1440b08128f484b51c9d04a284c9fb270929dbacc277271abcaf9ecc8dabc5a1549ac46104f911ad24c4962ba169be254c1c7c280af46a4ff5bd8242bb1930c4387b1f602ea0a370744b8ed5696bced71b2fe1aedaccf57a88eaa03ab5d02360e9b890ce6e23bac6ac8dae8966a56ca4e7d69883023448a7ca3a3c01abc04580db54a65d1f9ffd0ba6b9930990526a101dca2ec533c53ade55f2a91ed0ba1d434fade32a0c27b6457661f75d259faa557c33e79367caeca7e5cbd62415b6c2d37d3218cc22a6362e57076d228782dc2483f159985d357645fc2cdb053918d1b55c81a2f66724fed5047c49b993736a8ee67612d55e76e1927e1b84e55f9b7c73436aefaebd74be1d70a6bfe9d525bec7cf6c2f4f2d2dc7fed6429e060e662fb6454145731c0ebbe5e27c009a5c3cdd440c4ac7b6fd26f619cb502efe9e89dd6e73e61e04bffb5f177fd3454cd3e9e59d94b2d113f30f59350fa677c3090c9a5f953217c3ef5899c213c2e5175a126c8e6f3739d59bfaecdd94aa44bebc738b13cd71f3724ee3cb93778a90b8cb7abd1d5c59a18cbcde0d616aae73efa6a6012eaf131f801dd6f1e4d00a31ad2cbf9a36cfc025d41420eafd484cdff6dea8a0bdb7f765f6578680d95d384ee3ce892982f84de3a84405b0216190932d2a64e48f38fe241d99d1bd205e1dea54e2d8456b27e18057a6ed33d51099bafe50dc8f43f9a87f3575170b2f62e990a9fa89b44b2f39fd06eb3f5025803574d4ea6d0722f50900a026857833c749977e04784456da2bc6212aa93c485ac22ba610abab788844a2d70c2155a97d9c644864de1d04418a725db21aa753429b4f300a5155fd2372125e321da29ada83a4a5bc630ab5b2ca432412bd46a634d4dbf0de3430eec5910cd4687ef9239820ba45d1a076b85cbbf87667613bd00cf90cfbc97a541459754bc70c3acb9011b89a5b06ba67cc2d5325204c8e3eef20a3ee7ec20ccde10f042848f88d4e61aaab9477760f7b5aad9b29376585dad68bc2abe7462dfce14326d4a5eb8541e8fae4626e96b453e80d136e7f665ef48703f5aa688093330e12d16ee04d14b44a832428a48060659b365a48de43f1ad6c28736bd35aac6bb1774c5e6c02d182962668050f0e2599b3e7cd5140df513816b1b2a103149f5bbb5220c36f9d2a7043f3b9f9a9b3c27241d3ea55dfca6028f43d442b930da2e7d24d8dc9ae810413e6e5816d1a204d914518440b1c795116d562257bbf9686668ea67b9244d05349dea790a49229864914a5c59ed50465ad5f1909c025edf5c6d15987e52a2bcbf00bb2cd9e84a3ebd552aeecc590f3f75957692c81ed0e8c410b638873937491af42f5581b2b40ff64d724a02e885e6b31546ac9cc7748ec6b7a10a739e53c241cbc2edb9d22f9a6a526da719297f990d48c0545912d36ab8abd562987645b30df8e287969e2a67418460d4ae3840f951b8a074fb7b80bff00e46b6dc0f9dca78533d680a7b2c822d09d8cd74118d107909212a69a5b321d4ec99fc2347a5277e567df3bd6d857a3e0f3caa21c43c3b2f62d9641d3b2c3ab3502ecca437904be978b83dee2bb1ca6a14ae67b9df88c99e438e44a8f49d6b8dc18e32f97fd7705f5eb00c74a8fad345c533807b9b2123562ffae016e1b69e004c943359dd06e81afaabf35a858091ab605de163bb720d2a0cf39a82f4a6495262ddfd04f66be64349e415450f3afa2397df4921f9e30bf768b5c49cf90ce7ba8869fa1f24c28ecc5b245f44b33581799b01080f5e0177e523e56233d6dd35d4cc09544329d5e9cf2bda8c36ae41d250cbd4948c5880098528395a1b8dac301c5ab6a87000e914c7a284a2c90e511a9e9a32e9cbf76b74419fa3d8e15f532a122e594b24e061880dd488022fa67a0b3d66002e52a44ea9387055158f745c8da14bffe41f5b1981234a10a3dc3ac130e4f23a066e5bd043d557dbb1cc5685c8b61c4cd9921898a96d338d7524cc36ba2f4324cc3dba64268be97145cd2b4325e1748e5ee1668f4ca8f0bf9d8e8591128fcec2c8c420df4e8d0daf71e5d2dcc57772c9fd59880a863ba663696ccd54c8dedd577caf951da3a41206fa7c280ef324d9ff0d71a70726c8f8c759d7f38e83c0e4c30dadd36d85d0378a8915be290f39b18e89f9a16af482ac33d23ce1519fe8b389dbbecea3cb84347bcd45f19c805a244e99958fcf497873de32a490182caf9a70368014c98ef58d1a77bb1b1a5e56983022918302d374e39be844a6e5a440002fb1c644d3f3c405f8a9d39748daa112ab6e7c8752596257716ba2401660e44dfc081267eb867a1f51d5f56810e458b7e3f838aa591e9f1c95f4a1ccc734b21d82307116ec1f575b104904c7f419b3e7a82880641f4c1e76bd1154378516dfa3413ec6b097a433f39b8378f23a493da5073b4d01e87234255542df5482e5f00a4fdec100f2d43465fd19a4cd66dc90d1e52d16d23c0a0e09ccf771a80b9467d38b4d4a35bd306128f5eec977c28a627e6d79000a0b3470eb11d3027a3134f628633f3acfc03162e2d4e4f51dab9cddc6ad14ba317ea4b923a5f5fc3500aaf01e0e0ce29c7f90de881004552d3fb9b6c0d46d46e6636780234944273f53cb17f61744b0d0a936004f0e753291f02fb6ead9d81c5e77836a8f0ad68e1a48c495c62c3ea1e7b5bd3568cc02db9ca05ae3c958989a11494384214a9f22c53419fff616cc8500da5e861a9d9ef617cf28b801b46d4a9961c2cd5a86504d6d6b1070570172f53784fc6a63c258f9ad220e09198d7d00c772c92147755a529d3f201dc3ad92023cfd3c8df3f9722672d48e5cc397f3e4b04b204dabcd5f149a5d0d971207847a9e65cfd2ed702d9dc3b11b59fb9bf7e9509a3dba0540afdfae65de8c645714aec070aeca6da36d38fe35bf68e319266b599035595277e4e0b0b52967a596feed2e39521b2225953bd1e47a74726c7cce6043948e8480b6b5d1ec01a81b97a625cf9a55b5075c32c3b75d13967cf7dd34c10feeabe736d24bbbc2ce5a741cb59d8e54f499119555a298399181e316d871b41230530dc98a7f2470425f5570696b5127981f87f39bdc4fa716e8b2c9d3e38f9950be5e265ca4d7df1f706a8f17dfe121891d679727275a5daaa9944410b8ac0939bfa14e20d47c5057af2669e4bcdf00284628214c6f5d8895b41609df9ae79b95fa41fcc31a07d65b84f77324e9b69d015d35a423fceabf5bf1207d5080e94d70b42a283917d2b18bc42741296ab14c8f2fcb40172f3959ae8c928279a7897b42e75e21b0b98cdc5aff3883e6e62dfa924d2634ee7b457c5449bf4793e2ce30fa544f6199344ef77757187855ba6ac6edb19d95791ea765cdad2465f56bd6e6b46103d3cad661584b673c9a4ce47d314133d89c2e5fd75c6fdda32ded7d22089cad6461e8baf9f05e3ccf22c9973a0353101d520b9bc65aeb8ab4fd3552ce35d3916165c3069f0e94de54b94e189ddc58400b265e48ae06862573c37d5c14a79680b99ad5dc7b1b0f576383bb5b0f16f089f93511ce92133104b0062ec2541fb76be49a5c86d48967f8b61e72631b3dd36dd6ebcbe468255d42185bb7c98e2f70a62b5de5c77fbc691823688f05bed8a63e0a77e609f25d5d3ba56b6db80c5b0a802ea4de95c297a11545397914892aaf09145d0a32977bcd21b9ab70cca5c007a868dfd28bf93ef1a9c9ae2cbdc56d03964af1e5d38e1e29606ba8f437cdbe1f61f92e9b5331a985f05862199922046da088a22df0698d5e4e0c14874a590b2e2e6fb4438bca7187b3a1967f51a80f2d714f110703e34b6908d7a5256dc68fb8fb01e7e478ab731ac44e6d23e02564773668c396b0733756fddae0826781bae28ca32460ec81143c44e2873e912a89c341d3373deb33efe44654058d8905decfe74a692ac2454c4cb3abced055d2607f07c72cecdbca54cbe5562b31a4c8fb002f428de02f7c428495b85b3da05445277998271faa46f416aef5f57fe6e74a961fa3c2358396f819feb442f4e1dc1b1ab3dc6f4f5b26c7dbcd63080db5390ee9e357fd6c37f63ab837b29ce78f7e2f350e5fbf4004e44b1f5871a2d9433b0544bd575898334b5d1f222b150426b406e0061e6ea73c8eabe2d89eccd404a62183a240613c10d114ab26eab842d3b7fa32211c7e9218543e99f332faf9bd0f16bdf45a5e5a83ad6501474ee8a8c140b155850e9ed6c35984c7d5fe05dce9ca4c02116a9c75bf651657b5ba0900d5c042b04d8c0fd1fe0928a4e8b52466b0e9e0518b8ba23c4b039c80c8ee57791b8c0a10f433f14fbdbf475ad68c484fd2642f2888a7581104f5ac2f6293beb5165c19c03fee3481b9b854d0d8be20ae06d0aca00e6228328563f4b1f4ca673e2a0e2763bde508c4617d72983be4144ddadbe8b77b1140c1f2af740bcead25e5dc3acad60a7961b116aef819f20f4e6be2fc6123ec1561d250620fa3b0ccb50488c51861343bf09f082acbf7a85e895fa4aab7a4a2a2232f4eeee4ef37247c48e33a61ffe60b8065af17bfb05e02625db8b09d62f443ddd54c31896791a32b27a461b1c4fde3666bae10ecaed9bd0c030f69d37e656ac3374fa9f288185f9005b45d8493bb854f97f96f6f259d1c70ec472d42521c42c89f79a640be0614788080d623a8428c3f2a4b0e86c043c850dd1e6427c544bf0b95eed21a3ee9bc064ddf317ef047b7bf8029dcd1280b971fa3e0860711e297aaa30e4aecac2cb3177c09acde18646136fe3a86cc6fa60aa999deedb2d10239e10c9963a00dc38ad8e2d4ddf99fe9919f0ace8d4bc8c7ddb9ba698731af56f2abcf0b022c222bcd0c9b37f5c81da3ab56a6982349c3ab3618aa17d74ca722f0103303f6ceb8e6bb94d9ee3a07c5ab7d6b838b01be308ed44eb83fa051615ce6fc0914b197feb8f2ba0a14104e28cf89e7b8bb5f921895ade155ff39245a8b2f2c059161bc302085a8d8067bc3cfb0f2760f4e7715515e6c71c9665e7d24455991c4bb6f8bd2c427486f0cd069f577759e534736f019d6553ed8b030e73f8d1239c7f520837b7387063a443cff786895cdae591b1465822da996ce1712f51b0bc6148d98b1763d321358e371480a655b47a7095abf9ca0f1ff4cb09d7445f5ca320e413dfc2f3a40e9d1eb84971188b97beb88790e2d7a854d63e9d84a1e9f2cecb2a9e08bbd60b59bccce97fc35d2a266e96209bf6a25eee510ae70fd37e00735d1edce55c795c5fa3e48abe728c1d4dd0259f72f3bf32e8a1530c90d5b4a6b6d416d22218ecd225f9a823211b2733095d55f531f2525e31845859e52132a9de338554a1e6c364d2bc64862ce4832848b19aabea3e7cbfd6a28007c94b79c51062659587c8a47acf105a958a0f9349f3c230f42a758f485689e44d2e2b4893e1ad90649032f2689690278e8624094d07c2d2da743dadcdb48c86648e8bc719ea4376484bf4a9a8e613fc78b7ce8f0a8c849685fdd3d96ff3420b1042f6e5013ddea4479bdd32aed8ca040c2a9d42ca0fcfa515e63558d78de5e1fd49abf7e6464a0d0fb37b10ee4dc4dde502542facd127d05924f0c5bd86f83f3d0d327898cf9a870cbd5335ad66072f2ff43347d40057cfe12500ada30f166e4a7472d672bf38b3c8dc755c705485474f99242757b98fc818914110fb46a745fe9c29f441a390db1f917037e3d38b43c04d6beb9fec453fa13b01fe2ab4f7abb4fc013b652db5b111c6024e80d804a3559c4f1c9c6a4a922fd9bced37f9fba137f7d1807764db8bd126103817b39996b203d7cdbdaa3cdf6d975c4bb966f2d11b41ff584cd54f0cc9bc76cf82ef2769c428db0abdca2970564bb9519a873e3421793e28e7c6c1be23f3444ea34f01ba34ba79687aa7d9a900f92d8d2bd9f0e0985678a81fd2af7bdd885c8040f886059cd519e110c64e4fb469fa4b6abb8072127a1c2067ffc60fe2e74f154d3414acbf9eccec2a4d5cbd6de90a6fcee4bc5b48220e5a216162d61e072bf772f303227f23b56bd368a5da9717ca9859b198f9d64ad77329d6138a7ee11173fb8d69a194db41ff6ca6ea539ce5e7ad598f6d59eb45a1a32f349c1f7999191f6f918374df61abe2c65faf95ac1e44d151ee8cbe7c1352f48d4b66305830956952a36d3e64b30e14fb1f6b53c3eea6ee3b7dadd1bac605cd5ed9bb84bda0883032c8a59273c829b9993945aa938ddf6fec764d41344ffd628d704d842825c0f79504c3314f87d7dbed00674ddf262c4eaecf7f8183fae68bc10795be22d5b7deb07afb533713cd39bfef2ca9fbf23147f3b38da901d173aa5d5ec1c0b25bb6b4db9818cde5c901b35adec961b83aa6eb6590c888e4a8db98d5104d227447c1d3603418a84a8b1ecc25f3d27b9986ec2bc75ffc9bb4428cb2014708fe78e471e98461924d9c3993ff105a06893173209f4ad72c2341a7d1685b6f83e134564a71aab7707ae2079949c0d095cc2f1a6add0023e0106b69fdafc994c65ae90928e5b180a2b6d2068a30cdb94f05c3803ec0a7c0bb9e9790d022005e031a19bedf4befadfbc8b9cf425c5f8f092c78457d75bdc9b1c758485999500c0bc321e26b242e4b6757cc26d701331fb39cac81b9b1e664b34c23386c8df278cda8f642de3527bb87b06116ad3d8ca489bd4120052548844d5b2890e2ebc74528eda51755ed435fe0f78c0028e35d42f455bac446b28dbe0579266eba5c9c87faa0a18786da1ebc41d456e5c77205a6160a5ed0153b65b183967d7182b71c5db4d03830aa897ca7840a6a2d1701f2c727f29586eb3ff901df62e2499226d46c22950e9717118e89ab00a60b87e703b692e2d6f03120dd89b0128283cf7ffcfcb4ca9131a94788a8a832ffbaea0a2be513012b0cb6dac9797b94fc6362bf4bbdac3ab89aa09f72f194f6dd000e887a013d9255d78be861c5eba1ac81b144dbd622078fe43eccc4fa989dae87de614fefa09d49d670bc947be606447d0233d6f00610e499df0450fbee6016814dbe561bb80537eb7d26c7fe2ef037da754200f4f462122c0e2cad5d8363059446d98f8b028e15af0104520e9ad50b1a10906800acb8a278259d70d46391c870a7781e694df0358d5e7939e66f5581d7fdf2b79035ea158880049d3277bb34899c7bcebd9ee07aa58159b2d5e087771e936dac69203182840664beea069ec6ce58ce1e6dc15f82e51e7af6624fb9254732aec93257317b1bdcc791472c53f7fe3bddc9260185687f57e98ae66f7582b4b08e6197406e0061cf4cb2b614ca0ef1ce00445f41cf870d1c1ffa32b6c0a242aaa8326479503e05b788b4125b8f450c04863c750646e2054084a8497f9ffe8fc0968778b9a7a9522004e82832b26dfd6d96454454f50c4878a4be9a73f16621ce50d825b2eb6861ca1df89b6b46b95eb6e15e2cea2b1830275e18099f84cba27780e79de4c33fc781a4b067fa8954f0918058abd25de5a80acb36eab3500c43c278780ea3404c579160d6e393bad5dd58a8778a5e0d7c9efe4134069beed3b67324c8366b677a32df29f65d3837d9cd8e9145e0468790fa4bf74eb4378aa219a19f502abbda9da1002c3daf03774d5d5434770a45ce74d97d2a4053a60902d5564516b39da33a9b2bbc84ad4a4ab282e36eb74c1123dc72ac5f9a79302f9cc23f53d02ee128a2657c67ce396ca7eb9cdcce3af80db2f75f3356f20747cb0b8d53e505dd3ba4fa1cafa3d2b276205b405a83e3193422aac5765eb3bd33c4a0a4a4be8f69b208c1eadd9212e6decc39111b2268a8020b98b5b33587c0989e830c638c3d2aec20204c7fc9eba8176c5c57bf9edd695d5492821a2792d084e6a85c03ea28394586496e7b63e769e377c704e4df8004971f59a648db169be3f093b8c5c65ba7105deeecd28135d64a05c1015c112ebde2422a85bdb17d34379ea7c92fa496c6d60277266e66d78217e2106360851222e05499a2d1d721b04dd308f009f3a183f5b64e701bbd13d36249090c9502852b4be18d83fcc014764a5bbb3c99c6aa93e120bc49f7be929050ba8fe067c1ae055c52abb0db03bc9e1c5b5082d51b4aa526b51db5bee66f4042377304233d37a61587caf0d3a536cde6d1129edfa08f07cd9fe02519f5a9496061eda3edf912c5a19c1236d97310fb28b5cd0f5a27545f59ed4247aec4ca14a32613ba01dbdac7acf5e9edf24b0585c2628e0916e623c574a8b4f52c6fd4d358502500baf3ee93ad57f263df47fcdc35b8dd334ab0ca344b2931fa73b758966c76744e7f369f1c97b0525369fdf422613c6c6daff8a0f461c3758fda5a8ec0d002ae2759f45ed791456137a070f610c97979e3d00f698e07322c903b91b12c100de4e522e756cea4de6f4a8fc287ee2ed075030049b65b77807be02a64a0a80c37207b0b03393061b83d0e9f788662f7436876434cd943c7d4ea6302fa8d62ac3b5d862f2bae34ec98bf0d89e1dc465e5a418c9600a769c1f95f2ef5d1554477ab3414608fdf0dc8bfdd94f02a2deef70d0579708cc9aa46a63f4f594534dd29c51ac15c0dab057407399d67cc16b07220372dcc3384a8c61774a06c4bfd865bfa74611e9ded1e762cb31225843d22dac01166fe47508c44f81fb24468bd6559f0a8681df082e428f43bdb9d825bcf0c5fa04d4eb2118b76b5276406faa08d10c295d5d8d5861a60132df572aafb79ceb3f9a6788673b60d961bda40c86e995620181be9e5bda50f5046708955a2df50d54dd8215a8b01ed48413277961d9bbafda3b8a380011e6689a9b0f600cba226442038c0df4674d3a1b3a9b3345f7264322a43caab89b669b985e8435fad67150d76616f6a54e325d84b3ac2ce8defbd3e07bd165e481ab54c90e8151b78a5326b7734537adf37c5beb2f2a41cf52933179baedccc524b1584c2d619e6923eeb69b6a0203e157a515fa056e5e8b38ebb8e4e990975726601160c2d396f2646b467cb16f00741e24771a8b56682286ad84b7fe45437cd24d1bd0b8c5a5531c927920e44f846a7d9632d29728708fa09fb62735d398377c56c0d2a9d4c0ff86d8d2bccde9e447b45651d09673de0718274de7fbca93567bd72ac0e7468feb975db750539be45ecc15cb55e3075988671455278d6a4b39930688551d8cd152681191e09ad9040cf34dc9f05d5495fdf0e056e2b4c9c770045b19cdf18cd088630eb77eded92cdbc08ecf6ad46bffbd4b0f9ce4db12ec7c0adeac14d855d8e77da012954f39f2acf37d2f044d0021f0dbf3743df21ced488044054de804f39555d5a47dd705f8ea6d975beebb7bb4c572ec8532e7cea219db50efcdee1e1a8214870311ef6d030a82f4114a8139060292666da5f1e8ae0f97324bf1f1163f511f2c63b63d02e9c6c562ecdc50bebb4400c7c882cc97c58e8ef125689c88532ca79ea703fd5b3c091cbbd0c01597116ac160b0f52dc79893c77fac4adf3a60320040d9dd77679dee639405227229a1609eb1d8ec5f1a05a919df02242958be63c9da65a09686865eddca4899d034af38edfcfcab61bd748f5dbcfd0e46ecda27d1b158d62105bae9501ab4b394d812234b90e20740a91918c6559750e1747018028843905c5846d46655bda711c9dae3f9bafec467fd572f64276907196714314ac19ed544b55afdd55b25816deae1506d73bbbec16a9f2acaa825daa52c50f8858db0235e3a34b10cd4cb4bfc89b042d33800b4bcaef0dbabb8223ac6616bce494757f9f6172340e0e67feee9015e1e4ddde82f2fa20dad1dcd6ff11af46d49507fc18aaa7b4951250954b3cfe37bb058f164fa374cb923c2106cb927fc6fd91ceba7d5c098d8ef9a218e11068391f5ad4db2239c46160da1e6bdc227bbe0035df566257ff2ff4bb76c7ea94ef7fd9807d46d8c7fc90a97759af6a74550039acc3c63987e002e4e04345f2c01255f903d13f85bb1e42ec50959cf42d34cbcc96e60103480b14295a3c7f6e7fa28dfd2d1f941b080c4db89e74f1463fc74610c5ef11e09a133e01221e3c6ad791fb8237e926c572e14bb19a10ef010396eb52d2fed7f68835fb7b1a0b19600590541ab6803604e7de990c74358fed36f908c5cad5a2d34c49b4e9c0d171554326d12452855bd457de32751109e85305ed5d5b925cdcce2f0279b844761a817845805af62c11759be12ff59252f9e8db6421e332b9edddb05f890fc585f925c7bbbd4b1518944f545a96e51a79a29eca7cc52ec926e7d139f83d082b39f98c11b25bf798effb1e846c674285ddd826019a8f0b4a9840134326cc528c31d9d99b4e8238724643c12603a332cf42382aea423fe24d5f1d298a88d82cdcdb6e31f4ddcbe06218bd466f78aecfd46918b9de4a41ed0142ed0afc63633e57b60e0a32ce976cb3d7e0a4682a80fad9342bd221e6f714c32472dcd254a052af044c02b95f424f28914cfb10abf2c7ccaeb01499a5b1c8233edc118e1fc703f3c23e28889ed0e861a4765868ee3dd88533c021df4d4ad8e32e1d85944a3489928fdcb8f8818d22b48d4b33140812de12c2f1bc87bccf9dcd81d9df0e558aaafb5320deafc6ef4821cdb2611b2b02c89adeb9ca60b1a99e3f3842fa1eecb6d1f3f342ec883c8f700cab7981d8d7ba2d67c7dc07cec9ecce4828ece409693a3c94bedab17fb91cc258e03f40edb3a8c39140966a0c8ea868caf04dfac8e78473db34c24316ae58d43c634246c71315a77aa4c6ccf3c25c01cef6e80c078826a002081dd1ccb2180ad3be599127216a5c6772125c3ccf5b8eb74cf10f80a48894039707dd2275f689ea44757e55b4f2cb88fc2ef99d442fd1414c866b4f580d8a013572315012baa517218ea6e43a13121daa0f73d5a3db607f08e3e85d86eabac083e138b102927faa189c0b05a18c5a1c7223f9c4befc57a3f1a70b6bc53460ddc27bc223f18f72b45da98bea940b9a0abfbe2531d45e8e42939d773422decec5af39d988c1392213eeea3542086f5f5c988740ff55e220e688bd2775d4d69bcb3057e992456912d71b47b042390bac828469b11b12632ec7dae861b0f887f652ec46273d36c990aec6348962bc9c8524a765a41dc7d51530edf61e71da635c303ead93bb2f00c0f31d946457d2b98cc56fc723ab5bfb22ec348f396722786600a74b27c70aa136b95a3b1016c9dc544749f2e24b37b6d2839b79b8023cfe8b2975c2a8ef1c32332aeb466804bec3190aef218e8f594025a9d6472ed569e18e6b4e9971fb814c41a25f0842c7098309446172e250248df3adb0cd7fd930d241c528311ebcd26e3fb10f43ea5e424d707278ce32939a945185e9557f2d513df651bf314580bc0c7191e365a5a7ed40672cba229e341939cbde52ad4e6693175626a3bc4a5a74d0bebfc9e0ffc02b6c0a690f21ff835b1847c9cea0a5eed0844459d631b532db034e8737f770b9a74088310448ff8c20099ccd5386a7daa16afdc9c27fb50a4617ccdeb295b7b45c74803fd4819589fc5dd7cf9658c8895273dce3d20af045f475ec87b112574649e03d68f2fd48c1cf278b4371d6b38f566c6d6f40d10f9c82fa4e2ab26a8e63e440867ae9222cb782a0793677b91ae5b1410b6764da85d645903d1e8ff9d81e89b990ffa743dc500c49b17004c2b8e27b49989bda6888f647f5739f924121b7b92d1b0de7fd574459b0013d89a251841383342a89f5acd27faf6ad5f9362ab7c7d8652813d080666425988bad9ab6de200b56747e65677b1816a5a311cd6f877871a31d2fe95b337834e2a15fab7e4acaab612b0e750d51be858209066d8b5309ed312ecb1e4401dbc506bceeb82081193857e3178ae955e4c3d7e16110866a971b87f01044d6343dc3df2fe7ec44e33a883aa84574e6589476fe0b68c62bcd276c93af6ec35a6dcd7a8993646f8ce064057a5caeeeb58a6208d307496a7beff7068ea899df3f5f41c2a11ca111682bf813199c21f45e1641291b10a1a79b2f6c7d578bc9dd6851a779fd89a471c0f592130d3440fc15452610db759142a9fc53a9414c79f13c4e8dc3887b63d4ec712212495c8124964e262b25be6853aab489c89953a0e422ca533c530d73e4b6bf5818e9d6881ace8a3121fdcaf106137b692ef7cacd7baf065f98c9e420ddd58e7a6c83b5ef34e4ad7f33915e56e96a0ca5ae0c602e3ad97471090a84f8aecfd7e470c1b04bd0825d97877a5677c2325eb1df8f63025b3500ddfea2a347783a388b28201f5b22f62daf461d35f64708d37a953ed9d723ae0abacb1c829d48ed7fcbc55464e66de132939a017f29522ea160208de9cc316de881c6a1c61be448cb00dc434df1ca8aa0da9e6cf4f79ed83f6044ecd6df6135921ac5a2b4cd7212f6319308cc5ea02e7399050c2afff6926bfbde4b5886e73c3a4dff94fe6bccd4d19bcf5ee5513a7f9e13643a3ea231b809c49e2d44a300839eab886d890aa0433fa2007f48d5fb7d34a407075f7cc19eb3323ef8a30bb8ad513b4f5d033aa0fc4d990b58b1589a70a2456e0b38c85174c1abe77a3ef07008a9147a16e4622fc02db013ac7a965814459dc5bfe0973f421d2938d6d76c4a07242387ceab31ab3ef29dbe18eeb8a58e4ef37715daaab8c23c20a555d391bbab687f36a489ac51c64f31011bd4a03055fa776d953ef021759d6af732692e09a1fa4b71b7e766944a9c33060d1f3545b633c5357cb4c8890912c1a3f4cfb86a65149ecb32872fd4e25b19181edb24b15a39e44ac7f906d44ce70a8df4d80d3698818f02e8a2ca4931d98e883c008e9508e50c31e8a7bb492fb18b8c199817920fe3cbb71c98eeeda1489e450acedd302c4892b8680b08e103d855c1007664452758e1aef2547c67da987162dffba8e328ea6e9aac543db357ab21a2b34fa6d2d0d90b563f00a2b8c8533f1a89826003b8c26edf4b6621b368b494e17bc053442d43ffae0471597dea35ff509d402f9f4bca8eff1f2a73a19655f878aad9fc6025e2dcfb227bf977c941457e0e0f4836588c4e70b21df0597a2643c4d4f35830754d40b02140edfcd90ff625f846ccf668c29b0ca03f48527f75abda8aaec6d9fb61d70a4e37ee34f67bb7f5cb2c54f23dea54fe51266f36a4b1b62587438d17656567c3b389f1eeec52b009a91ab048353a533162ee5eabf2f8e246155f7cf9b38067073cc4c27c093686c720ce5ffe9346b0a8240e5a0228d79ed572784a490cbeb9c1ec1476e801218927cdecf7378303c995955ec3b37f7bb5655e0c9a89077dd4acdb6e4192f3154b6e0c4b2802d383ed8dca7abb5080de4e71c8fbeb3b003b8a40385d611f4fd6f48a45c12d438622a377a0395790b6d96c98d00f11cf8aa942502184b3f3a9171c468d8aef12ab4a3e5144399d11a7ea66254fc1f930960d85e6b27b97ab82015c21da9057a6729fc2cc45975dde466517df52321b1ccde6e524f10805722271978f1dca28735c8d7de1697e70cb7c367744044e54b47f22a2cf5eccfcbd29fa36f24adf07b41eb3e2256de2abb6bf9190afa0d397534604836033289a4268e71606cd69aa7f24ac49c821ea6cab090355bcd44eaa9019258606b43ff3c76fdaac8244653ec7b12353f250111aceec87092417ada0eb5735613719d1f703cb18ec2f61e4f23099c4e38f2fd3c86b041d9276dde2cec2f7b851ff2a81b09c66a04121d76814a5bfb99f6110610ab92d35468b2e0d0f75d31a153c7faedb5b5f317cb221c62e591764328b672f813543262e4d005fec3a66490562e244e707d9e956ed255e2742467562c7d8a409dba31dca77ef020ab96d2670c22d4b1c4d560e67772b7d619be63757942fe4ca8ecc3714d91e021c53a41a2c583307b6390634d50336f1dc499540f8b31836085d46994026c6e8c4c0936fcf24dd8f0704e3709334c9fb44dced4c7d7e99c1022368846e88c48d596057f777b903ccb4394e99d78778a6aab195a1703a106c90380fa8b125aed8c5d540644a749bf7d8e5204dd4722b1337cb4c9a4f5c70b7eee7054491af9e1bc32d2e99fb29498692c00a9794ec4dab0c28f04f97fc7e2b79bb118fc66fe070052de4b029e8b4e720921b6e01d2af3271932b7fff90a32e6f2b6dd5395d9f70efc3bf0523703383d951d8a107ac9b809467bf1e1b1868aea5701ca44f26c4d4c71d8efcbae5df4d186266cb70e3447eea176cc00df729361f4e1a20e36b0c07758a948c75fcc14ff40d1dcb937397d3bbe3fbd123a33ed85b385047b8daf11462219fb940f82a3b6214efcd5173832e28c2264a3951a5f7dd7c6a870bdf79217a406c042345cfe107ef78b67e3cc4ec9c9db0734ee8028fe3cb44e5bb33d447b327f87ec00e18b96d002c6ae7edea8cb6173296246c98fde397103c55c41db92332f8a799abb39246586c1087d04a678e717c1fe24bfc6918c17650d7afae5db920cccf764e8572d2a523e4d51dac5debc88c70ddc5522896663c9787be399cffb9a0b39d172624bc5fcf8faafd1c5213bd2f3220504f1ccd9fe3fd3dd6e99b4b9036f1337d14e76fa300f34822522f9be38d5adc7e7e1516ffcc001a2b4881d5ddeea82fe4d00a02df73513aa0ad9dc1c4a439d4f1b8af3fdbde40f06c901f49101521f97fec32a6374b87d2777ead3d750035935dcb1724b15ca3f7aa15230c6c9e25c83c72aad3031259c181ea7998047fe0077dc15c5cebfa67454b4455707d48d88aff9220b9b0464e0d4ee2ebdd1f7d155de45c8b42b307c25d44325092cf5a1a0eaf3d6112445910713f8007842537c70497273e25c6e09d92d0a121b49fdd448990f635cde765b6180182a427c47b81a384978905e7eb95060de3a2b077cca1aed6ef44a814f1da7913e0e0cfa9f20e73083a2fa707ae6712add729e1d96f9ea030fbf48586839b7935da46564066dd0405f905732f76d7cb0a51e7a4aa669ffe06afa1cf94d7c1ca47a3ab4fc32e5aaad099b43c6b8c39cf5ba23390802a9ea9f1f2a2ea3a34232f98eaa36395483426019e82b8d5cd9387beb93fb5a8c215a41a748b1aeee4872783051d8e33fa2a221a2bfa22c5c70d799392bc181a39e4a582081804d3ffddc4a5aa30c902147a4311c27d134a4bd4a2c87ca0c54ccdd947f8adc1e5f799aee09ecfb1475ff206a19d1de3e73b9a9d34c83f21bfce0132099ce66e0bedb728c767481a1c889e1d7723110c1b2dea261e57e7248ae31f853f1296ae348aae6068a095d4829e0481f73f043466bc17c9683fd9d40d35c88578d4bc9da4501a0ba945764985092176ed11c4edc9e6325bdc892e65e556f3423c1d101c5cb8b0448b58f0db9e51cb816cc3fab05ac2aa680e8f138fb0db5f31b4a68b44855be699ccf4335f932e796d30f9b9b224bfafe4df77171878e055a3747f22282871f5efbb15c80aa5a790a6bb8b93ed3d0812bd170da842f7a53e6e0ca7cf7b8d0432b045bc6b4168a704ebcff99870651619ec59df5dd00ebcffb987df91224547f852ec70c2f5e920133e69cd9d1cd17e1bad9a7564ccc02ecfc1e54b92a88aa2e0337aef5a16429171bfce939bf24dbd7d82d0c48f8de9aabbfcb66c0c16a2e24dddd460d7b09428080f0011f0e938227cb164a81517e8c5e290fadfe7022d595452b7f6723d1178cc8fec42b83adf4bec0369d71033eb53d90300657033fe52d9565595297e2dc349fc08d5801a82d913c155a8b69e9c3f10589dba7e0d97c6d6a63fdcc821e1966aacbeb9de8cd8a694b3d54302816c9e089a976d655b618712d7a14580881e932d1f6d056a0cc6dbd58202a41260dbd1e6e7d075a479a37c7d42676ee5fe53b86d7ca1a938a1d817307b581e6aee81e81f56b7701530370ba0d5d6c8ec97fd93a888e58098d22bdfcc4872919f6668c8c208a4b2bb335d03aad23a77f31a3e995cf50892df72b9e1addcd4521a48cd97df185787ae6ed8a08d3db2527e72a3984ac8846fc4354b6e7acba06c27cab98da11a331a66f1a4a5a26a1080f56c1e421468d9eb1fc9b0eade4d6f9c8a81cc7c03dfae7e8458320229a54e0af8a5d5e8d392b1aebd810342a00ac6bd428a51949769ee3c43b7dae501ef8f2074ca6ec1f3eab77b27932c8e479b9080d533235fcab06bfb681c1fdae69bed53904ab4160c33a97b2763241951587393d884ae81f606b91f7006c7eb08cea6d594f6605cd0219ccf838959870926c9944e93dbb14eb720c51dcf9d3f1a16fc5bb4aac49edcd1e2253c788a26f96570a99c98dd5f3a721eb933b45a1d81e8bc39495cda34b4c5afb301e2e4a6c50a68b90016ba8c1f2c06f024b65ee423d5e437e47ced685034adb61d7fa9ba6cd26f4984e83f11669074e1f5d4a1c4cf69471ad9687ae65c8311e55e0e4c7eeba1654b994848d8be4c048510ec9de3a16b0bbc0eafe94c4b1676a41aef1d8036c76180eff7193bca4d7e099d9235ed0d5e3a3d46862b340a1d9f5a38b735448f1b61dbbe4d08caeeaa6fbeda66747d0ccd81b6bb83cef66aab78ea3d2be6465c46ef16fc49ceaaba3dd7dd4d24ad8d7aae36530bbf23ba646923e5abab59f7287ca132afe80ea7913b3f5993c125c98cf2e2e4c1755b2d3216da2a2f0d756309c412f70496e2ac66bd9ec5b1e611ddf755e64aff4a1d0bc5cf9298c82038e8b6dce38fb31220b39c04a706851aec03a59ffd5539437ebebd02d6a3bd0079e8ecf8db3d78825108009952016e31131f4a97009745c7e10eb160122ddc759bc4c45469c94c18f5b319c39c23deb10c81de4168004fef320701d7ae784113076204e38d1fc76ee11f8b45212ab9960bd3bcacc5b2d857227d9501a384b41b6c144416a8de5811e32ea18037203b47c773123d60aeac19fbdabd13dae62bf4f6b880834084d8a5080b0a2ec43cdadd39c2abf5a5028fe9fd0106ad1cb32de2e30db494c950460f37d7f3834859ece06ce141ab2f81304eebb95cf65f8a792436a41cc37638b66e84ce1fb62d3a382a8142ea653c1a5586d7ac58db8c92d768781337240f2a908494eb23690eb711250ddb2cc61701320cae9bdc185a9e2054ffbe3fb7727d4263f0850f908bc31c7f3b21cc057ef7511fda23348bf243d03b0d360aa38b1323c594b4e056b11ebb58d76109ab506f55f7e95ca11b846f5de4f725dcb44bb09ff465f746a36893232371c5b77bdc61ba2abd57ae871266a8f2a50f388fc6f8d2d0a49f3c4c727b002e89d0da537aa45664579f9cb47ba54f39ab98a631b3669a1be6a553e3d94c586e483b0aec566499557e8ede55c5210004de3be16602f767c23993d8bb192247be6f894653fd8a38afad478adfcf4e1158f261307ce93a5a31e11fadd8f547ed9821d4b726491e0f98f878bcab8d9438ecfa94e7e08513bc4461d56d27679f55a0c5106c8fd0adec8f7d593aaa0d329cb38ab3b893ab03a96d77f96fcaf0ba1b861fedf77f8b834ba6e8153ec2336e8a92cb86216cd9b1f63488c230b7b684bd86713fa01730e48a5fcee3aed959978f575d7068b6f22dd0f9c3b4627c37915fc20ccc39ac559a7bb5fd2535bf127838158f9b48cfaf7856d37260773dfd0ef32e2ea395aeb6326cebe564988b696c1d229cd0fba43ff9c617f90199a3c4dc97d3b306f73c7a81b6b761f12e3c5c52b23e871aa3b6303089e33d4fe217cd20a786b3a186c46de616c588c89782a70703a311abd76bceb9201403cec33cf7f384fc00fb0da74338e82526fa8e74d45e62322d2a832f7a4adce7b83f800c2cbbd637e986531819ce939094372916b743449dc3aa5cf752ff1c013aa990eff33d6b38da99c3f2e3ada567147c369781b2609c0c83267ebed3d28aa80f670992a01f45efb1e206abde844867ed011799bce2cd13de7d7baae551f8fe96de45b99b2113b44c8cc46d0225cc86d3535c13470f6351d702c6111877bfbe55b19d5b5b88358502995cd879bbfa8f55138ff84e8b424b0150fe9bb83784cf66aa93048b88fe2c00a58b0a20e40410e7704b5405f687e24786aabf501a2b81746bedb77c29511ccd7f24b63e669efa5e626e606a602a2a4645f54a706be27d99d12ca18fac7f51295a25752246aff5f65bba02e2f8f3d0086728197e22cd3f8836e6f114e55c90be0d51dddd918071eb67e9cdd889cb19c1fc47855957e06aaf85c8ac7a64c7d9802b8adbdce3c641e8e841d5c3af9ab17cc907392d200e639903d7a71823a478e5db3655c52a0bc6ad64356e65d905bfbc286ca7e118c1c2343769abe1c0421dcbf895b9737446e8382e2d6aa5b53011dc57711ae7b44d59560be77b910e371db319c341395942cb9ef2a566a6422f4f355b19c32357f8b8a02859e85078a222cd3153ae726f60245621cbc9673c719df4a05f4f11a418037bfb86fe31c7043aa6ff494960db26f7ef2fa438c190173c015ce14718894903a580fb8cb6803459db55cc62a4a4e86881d33ac674fad47ed5e2fe45161c301caf039b8b15573f5dc5e70c4ab3cfce87c5790e116ae0f284297c7c020a9801555e400cca9a0efa8b2e5e8fa68471a7e75311936573905df76e73e733c6bfbe361c7a63cfa8a82b0644ea4ac26b33da6f1f19d5e8e898338e8abf31f7d7aeed7db7f4757fc087dc160647886f6c2fb6ed58d5d226166b6d77db5b4a29a594322a055a05f804f7ade75491e85335ccc30f967e5a26add7d6964ba9db5bf60ffb071a3305f75e4983c4f6612f6d1f76962d448ac8ae61d3b0b9ec2dbbc82eb2b5eca1ed652f6d2f3b4b066e941b8122a2222129355b0f537cd88a84a4b5d65e5bb5586badf5f6be73566badbdb6ee2829d010594aaf5f6be7c7d1acb5d60ad16e4ef474798568b1d41199a2a5683289b76f94524af4d2a567e958fab555fabeed9bf4ec6473c93963afd6eb6ce2b8739662e2210a203c46f579a9500481c6a4ba2caad8d345a0a74ea71007a4e2f53dfd8d5329e0e63b222088705eca1540e89b1b1f7b731cbdb32aaae080b696c85a3b33622f91d4554507261da09ec2e890b48f74a01501ed23d7954b34e6a52d87a31c8a3cd193ad68f6d2a6c3912d8720d686b5875c21ddab36e49cac5f9cdf4bae0bdfd4db6149cf715aefed5eab18a4448f35a803fa78ce79c3d01816ba5094c5751a19a27be668470dc8e324217f23c21414de3c66aab18e4675a87798e93b9a508d7967a80ef51d342044428e9ee2da378493be23f8e64511d1d1aa9495ae6ac54e5487a9a361a6a7ded1ba233456890405d58f885bda5c3697ed54ebcd9b4c2f9d2ebd945e99e81298a7db187b7b326739aed2c9e1cc755c97f264cafb54d2e527559286e793e16a6875e4a5d3d086f492975e43c4b22c56a5934585284c7a1499335164e80e3a1b938484250969e9569b41422691193485cca1977e857e025130615e7a85024366cc0793f67c8f44e29973ce496bb5f65e6c2fc639735c97b2a954a53395b9ae4ba53cef535995aad2a94a79dfa752ad563473d268fdcd9a9a6fb26cac8d4da5d3e693ad1b89e3da76ef4ae79eac6fdacc70fc3898372a0ee6c4a1a2ccf8869b1ec24f8f612bd1b47e71aa4dc85a6b4e9445fd2259d49a4fc83a640c83c1639ee2fce33118d71398a7d300a3dd61795c905b88e1a9d75af36c966779566badb9d6a559e9929e4e2b105a7bd4238941f524213722b43e1da9504baa2cbcf93aa6c6f28cce6a35d62d511dea4e49606e61989e76649e7a77062ad731b75c69ea520f072a28f0951c6ef015914a086a50c14a10172605f061248532654c803ac3244833a1e12b4c7a68332b2311d4183541f3d2862405a922bc711c318659eb5547de4b3b4b43aaab4ece39cf70c6cdcb19ae5e560d50d716a7d4762effe03555f9a5e26c04456564c54a2c5fccb4e065e84717236ed03aa0608626224ef43002a319ae1191ea330b46468c887cce2e1f9020d1d5e83402b2c3101797d7ab898f9c5fd9479e9e9c73ce2fd70fd6c524fb5a29c09736243724547e7c39e16d2a9a52143f7fb89af4000460c1cfa6d7cf26ad427435e9f0a7ab49fb4f5793aee0a7ab4907e0a7ab4903e0a7ab49a7f8e96ad2393f5d4d1ac5cf260dfe6cd2fb679376e1a0d04173373f9b74eb6793b6f9e96ad2ac9f4dbac6d5a4f5cf264df3d3d5a4573f9bb4ea6793fe5c4dda4bfd6cd2ddcf26cdfd6cd2f96793c6dfebb3e01bc00060ab2a39dcc3db52f4bcb349a9951dd975d0702e8f5efaaeb1ae86037801bc473ffd00e9c331712ac40fdf2b08000052bcf77daaaf8628c0ed7aafe6b3a97ea3ea80fb69d3bac1716df043919302005f0d53ef05e0abc04351c5cb02d857c349000158f052a1035b55b15e606fa52bdc82b77fc80954998129659494b3564a612678764a29a5a4524aa9654a29e5b5b39d656ba19c945288275f39526ed9b2b76ca7bda52ef9f6968b31cb4bd57cde6785845eab6ed425f593db68a5d25cadb55e4cabb415567d4ef5e3dea98665d3bad97acfb09db69387a4899e5e29b02f8a1b754905736ed42515458aba444faf1b489732858a2f349d02240d3b2abd5598b3383b4e15b6a80eed3890145637e86c15a518a6b24eca6928edf8bdf6f52e871307cde1512b8602ddc00d64d0420317bb070df221d193d3a1ddcd04d5842c0b568805ba4036c806f1b85efdba9c21af74b902f4a1ebbddade7b6dedc1628cb1bc564af00848038f48253c1e1848cb13536bafadb5d60ad2f4a4b4dafad1ecc10b05ebd84eeefbc07d80345b25086fc1136cd8b75ecd39671bd57a3978204dce39edf7a2140522db949bad072136aaa540680f1a840ac80304027980b4223c1326adf6621a3088ae79f6decbd929c112f404675a8a79358ef0e00d7ade2642e3fe3b6b8b6ae3ebcf5710f6193d69061446b138ce9ddfd46abdb73bc7c5b64b8ee32a4521468f5063345156465571f47fb17ae25450fa133d314a1c3367235018f511c01f5aa863caa06707893661addf00c1c67ea7306befc5588ef08d2d59e3aa0bb01d7b2fe77d1e4761581c53a92efb1d65cd5fd7330d1c575a6aed9477e5a3bc49b2b5d6daf002b25156656fbd0b3d97530606e9cfa9d351537a77deaa686698f25538c278fe8a35ece822e57d2f06dc382a8111b45468ab6c352d9327c2fd195fcbf3c416f486e7f13c47615df7f9f5578522dc9f71dd4ef72e9742fb4e81ee7c87a74746e35c4a5398e7f92afc28cc731d6eaae3b92ab414e6791c1e45f1b31609068b68ea1e278e326a9c3d401634e7a34e91e9b277610dfb1ef72391706ce08429517fa7e7545e404671e2376f94cb46c107d234e530c618a4ddd146952819276daefb7bf8f1b87bacb1385ef147f62db1d6cc58c9e1c21345806851497c58a216c5a61684cebd41626121e84c97212bc8f0a44c171d96280aa3c4932146b2882940506ef8e1644b919a0a35351a726c2823254c8d14276eac50991c43491c0531a24d39f3454a15295a5cb43216bcb44991e16f5edaa400a1b2c5c41ab02592c4d2f3527278fab5575318f5fb25a1c3fc503a3f2233d5091a1c30513e1045c948992844e4261e57b91da58917658667bdb44501aaf19861ba34c0134b8c6e6044e0648222398a9228419414a6cc50e4870ac89ae624d6a0858bda87a5320146d9c0f65a6f05c206045ffd6be1a2d65aa118f1b54221c1d721b2323cdcab8993a7af1d20343c01d2c2b621d7b9ddf9e95ccf4fc7f74559749d67f7badc752ed22f8b56625d6b75ce0ac10123a124284c48e878e1d62099988a80818c0ea722229a6667929a3811458926ee10134c474b04f9a1c41412f84897326c50886c4f9ed48ced5729ed4a91094644c930935d9a8021534212430c71e6d2f0b5d65d26df197e9489b112e40459506064e6230681020f4ed8d04211147c469e27283cf9f1c484a9e3b58f907159fbfea2ed4b9b93277ee47162c65e224eca385902eac27065b059e2aa443782bf57832f2b2112706f13a4bf397f9ddcfede108ac090420941864c40d4e342142840949172a68922242a84b67bc0a6033b06287d9b6ce0ef75a2e32febeff5c0df7bedeee1e19a30b1b91478b7dbc4847c69bdb7898f16958787333cec477988da8104e77a69e3a188c77969e3e1caad8bede8666342c428fb1fd95f4e666c53b01c685d18fcfaad3cd4f0b53a57e9d70dc5556edc3cfc78ea96db2f6d474bbccd4bdbd1130a93b31cc6188b23121a734a2b38e9426476029822f88891a21c96a6d444a0011f8cf125f21863282ddfc610460712695b42fbb147c919a23b64eef036968d6563d958887697dd6577d95df6957dc5c8de72802dc456d2d2a644c8a604682769695332b32521b22589b229994db19e8039eede20aa9dcdb29d72059dee5d9a6da53388c99544cc296b4dd588909b897efdaca002898194527e3019ee882f24ad5572e2f86fcec41d0a9b0ea3b0e9c362e0f674cfa0e50f261a5fbf63fd059b019de8a57c860a219a13a58cbfbe5f6ca12a631ccca1ca930de8399fd9aa2cb971e138e8fb6b4d6755197a967f426c55760c7d80c857ff5a2254d07216aba6c6131790e3572c1c9cb1d56ac9d0da1b7fb68c168eb7c2b1d5127f360ecef7b35be2cf7e1cd5cffe6f7f2a17b8b7cbe572b55cad9b9b9b1b30079b0d8bcd26349dfb0099e7dc5badb68c6fd9e81ced395adbe4dc78cb6d6cbe9b70fcd9cff2cf571c77a3b55b2dd7debaa1722daa7cf7c8d83432d8d98437ce108441cfea551c6b54b761733a9035ec4f297952df65fc349ce1b869b5178b013d40f3812fe8f15b5155fdac7753b8cb5f8bb2a8624bcf1665c1d91fbf095811c4414fa72922b6137afca2aabc12b85163fe5e2a42fe19b48a276f3fe79c2f28ec32613ce79c73e6eb2d28bed465542d72bb01c26799eca53dd6ca80c2a84dc80a53af1a6a69c872e5b552783e65558935eccfe794054fbe40239a5e51de5cd019689e794edea491ce5b504b67099698923e63d920e70b48a89f919df35142ad54ac1b9b1a8f461bb9f11a1b2d83f1d4188eb7bcc6c69d15da14b2104675b2e384597e0ac65363ad1abf71df2d562104bed0830fe48aec3721477532d5c9f947c6a2d7c9b3591c659fc351dbff5e7adeb95ee5995d95fd9b7b84f1fc146b588ee3c4ac271573efbd424a9052567c6fcf4e0364322e8806f4f41b159248b057cf4ba25b0c379b97d3c168a3fec8f9284ed1cbe960da9f628ef7c49c0e3ef7dc1347fb9e7f9fe7788f53a99c5389dde7612c6ba38fadec82c2ac0614262fa6d55aaff6be72a8a635e3e225a882eca5942de40ad9baf76a0f5e1cf879c13ece0389e8e977dc79e93b7b0890b663a6faae15f644220d91486fad0bb0879e5e2da71b2031b821574c9ada0e8d794075a62c2acc1832328e78f2d5a2b19d8c428c0687f4f8eadca6a02cae57f794387229b72f555d4afcf92c4f0d9eecd12ab73f21d0c52610aad30171415960aff1ae9b2f7ce763eca5cbcec70b5eb09eaebb5dd7390a28a952715d3767d775b70381cc2793a330aeb35dc7e55c83428ccefb093d44895051fa0d67c871dfb990c1aba19e772a15d40d3fd0328986677fea67563bef3a0769e83aefdc830f26adebbaee7ae71389b25079e79dd87d53de54f6bdd0fe0d65d77548df79d7752e5f9d38637633e5e56b21310041ae984e697a523ccfd7c47455ad76389f72324e94d5a06535a17cafd294531a98571d55387fe53c5e632c7756c8559da90a65ae31190567d01ab8e076288bf1474255e7f1bc7adf27fec83ee555c500d690920a9f97122717aab0e841a5a1f987dbf768309e33aa83fdb5318a32fa73cf030a8bd2a304f3d85140e971668a7d0e512cff8811eb316aec85f1278e1b851820d8411930f6181e7c30694142130808f753b42fb982c2280a319a3a68838e713ed8776434267db073afc7dbce2a524a09aea0a72f7d2f7f7c90b5d65a2f96f75ee9145f6aadb5f68ade2357c899bdf75e29a5e4340eb256cece27bc8a438b84056908890a521492d37bf5bb4356a812a1419ff36351c88b1488c2329ea20d1ab3c1e2b8f2ec358e31e66accc6abcab5dbb042497534a63a36b24a9c31677ce23889ee77e20cea998a33a6dfbfa278a728a664f5be2be3edcf5b2c2363f102fbad3863bab5549cde5fdaa63cbd8cc2aadbe978bacd2a95036a40b4167b9127d1cfb9e4a79db40705128402f5a041806a19d320b300b4c78b1af3442cb6a8600a9aab33bb0dc54b83d0a87fef8a6a1a0b1e5679345d48531b500f92c2a8b4b9ee77d26211008ec0e98aedce6aa9a77012d2452849c72b8c13d28e5718a71e74bcc258271c3ebfb4390dfdc8b3c4932febe3f79893c91657d35447fa28933aea5dc865db05e8a59697b62626799b47bcb49ea45ebc78f122317ee2c2f418db309fbec09062fb4ce80445466a63805488c14448192b28e88081861cb830098db8d4d0711992fa5eb837e4743041263d4a2690494bcff1397e8ab556216b6dd0bdf752204a690f250fcbab410b171436b9acc07141a1b356cc99b7feedf0d65a6b6d972d48bcb5d65a0e6bf98199bc51fa58a9cf8b712d75ab4c6ef08267ac7e1d96baf5c5ae3a321cedbdfaa6ae9d7352eaa2eac8db9293f47c31be14a8e224052838428bcd880323284f88e9c08f15be6ca152b754b959925b2f6d4b4dbcf7d2b6148676a10e2e1dd5189e1833d11e4f781e551deade0735967d94637e16f500e9f341d5a1d7a78f0d5f541d12b0db1086258173ebcd2f3b85d1171cf61b38aebd7e9d0b6f20813149b08395990f093838b77e0307f6ec9c88037bb62e5463b41ab34e2fa84c2f664869d36730aee7c0b08ebdea502a447bea9488524c028f9318cca7a1d1cf5931700d092ceca96a58aa49548367ad06dfb87c0323382c957b9eb79ab7b01339a6314f5035aaabbcec2c678924d47876e9a3f2183930586ee3362209d8592e7dbc96dba86260b7f11839d65b9ec3c7ab610dea306e7cee398dc3b8a15de529af4123068d731e23e52bdfc0488c9a18d859fe6207cbf3e7d95962ce7557cd7c8123caaa7323ce5a36618e155f00551a646984309f068d07481f96d388910323e5344e2392e079caa54ff6183930681c3b164950398d4b1f9673206b1cbb57e3521543e5d8c3f9b926ccf1b1e148857ebab783c6535ec3a982e179caa92a86ca69bcc6f8626891f6a83ad369c49cea2bffbc549853c5179db84558a6e20b597572f8e060e5b0943bf2242d020492c7158415796445941cb183124a4a62a410494d4f62a27861e288998e4907289990596b6584008947d39920526a5607d1348486a2db10537c2c972e6f2d9723dedabc55f2d65af9c15e42ec58f26af44a55165dada7a8a2de4c04a17aeb560fad3d5992f80ac4a7f65058f5b1479601117af5d296c509c665b9fd7d69cb72e54758cd526b03ad4be241c13749121982264844e1f14393264cd288231c9c3ad04425045f8676e661331844bdb5ca2ead4be26d8182b714815f5e3b5996bc7e69cb3264664b90962237979c5cce4f308bfe797d06628fcc294b0c3d39cb10fda4e58f3a66f50e2c45961752bcb208f91b11ae1ea671e325e721ccfb183f16c7e9d6b138ce1bd77310345b961d3fee5bd253dfb5a794d61fa787908346b5d748772e1dd07570af4f9f519df3acdac07e34638c710733aacfa87e6f38c37e34362bc733027007990c5cc2713250c9d7e19c7356b2923f177dceb9fbdce916f4dc4bdbad869a1d7203ea7103b20308248070f23e8fd66e369bcd4a903dfdfc01ea0988147e7cfd0065c18f3d19f830c6565ae953e7803ea5f3c9abdbbb39f7c66a6d369b95e03301a7a7b0b7b31db20ec8e6c3d08ff266c342e647e90465595ca2a7f308366939a4680457a627c2932ef7952557867efa77411324274f3e60bb22c40213b405b1296db99282066c0675d0a997b62b3a3eea47094e80f2e1623bac8297362b4a6ff3d266c5e8479e16289864ab218621a28a8c39a34290213422509c74211285ab622f0eb2a21a2f64f1228406259204b114831125844e80841216a5234a4593495694853e67b0e87b69b372c309e6eb25830f6a85851f2f2b403c5ed6c57698151d3ff2dc2794809288804a4a4b262805a1e365415b0aa5306f5fda94a05e840a3e841c585e20111790a88249b45291c7182c32624b0262b339791c27e3b5de9fa4019837a8146f9535b1636668000014010013160000200c0a09c30171401485613c9a0f14000c708e3e644c2e14c842b1480e85200882180662188618420842c830a31033771b00989e5b914918a02ccb6d0416835a848193c8158a2e7ec027f7be103623e33ebbf834e0f38def885faec17607f8f4aefb8437c97fe2e356d89781b8121d651c3ccce06dab39f7f19da82702d3f1c6802c784e13024b422a51aae2e1b50515c296748cc6db0d5291a248304bfb69ae87c0eb192c0dc20895dc036ac1e93e8432b71a89434e19ee4f57530456283977590cb07c90d2a9f646458c1bc282c5f0ae0418a4456c338a24f93a947c18867e0cc59314f41437665f19d8965855b15c16f28d9f19284c3b2ed4eb5a868f78c327667a5c5899c9cf6cc67b04f455562a5204e91b16eee4b9cef904266efd19dc931821bfc6f2f90c2e18521a18387c200085d898bef23d793f22fb09eecaa5ef8d890787020ee0143b91c1fa8fa54bac50c8bbab31ab7d53dc97f07636559f015b5304b13b1b2a57a1621d4047e8f0c1d7421b3984e9b46291cca1fe1bba0d63ac26905c2c02aed201e833b778e19548d8d010512e37db12fed7286cf60478e699bea61b47355e6bf00502a9f1527b490d122a34e33ba27672c97a91606ec95e6393af7ca51cbdf248e90675ec29f850262a51951230ad6e5bd29f3ad6645bc61245bb9c0400085e2c40e89571460cb3fa1604425394aaf83712cc0d4ce872a4930e68e9073329d76ae66e2b91b77a92932e01ad141e0673362f46564fb53b04d7aa9c358f8bcc9b42fec0d23aecda2039bb1f014349b9bbb6eb766c23497a0532883e238aa46fb3a5f2ba3afb2b85cfd8986a3047ad9d2670f5c60d9393e321f452a194d656d064211f21a44665479fa94fc2cb4cf7eeaa100af89fd77edc8e15658e235f355c6cc5c378c77230ece3ef818d58c17289fa2598d2ef586d41d5faccd2aed7c0095fa29e3a8280d6c5385700532e1653c9449dba25f126760aabad2a6be02483d063bd875031c61475359e0e1d4afeb7c7bb670e346dd1d4fc43dcf0a45e575a08e897373020bd21b69a087fe8931ff773d7c99285f53b6737f3974ba323d5a415089102330435452e9803d74b378df1cb39fe2b87400ebd4020395b4b68652b773ebeef05b9b491894433dc0ae7ce39929aacaecd3e0c48649c3ce14d1d7152301a083da03c2619b9b7c83bf0547a6e9b510b72a0e2e382ad7329210fab1f30bc7ccf55dc28b8f3c59499878af43356fda9ebe8f44423fda22a7951cc2e50b70a618c4649db4a0623276b86eb59280c3bf5342d8033678ab32882083b5f0ec2cba64b65e186fc5ea5d0fc0fc17132c68fbd2ce8b1ad9d4025b8c854dcd86f2b992110f73984a7274344b15618c42c251e991a390a02a4c23bf309d6e703191813c68b7693db014aa4246105e70cf6c16f6faf38fd6f34a89f217585ffc819c2624edcf9005443b19a2357dcb595fd403b57af08c3bb192680deb2a1567981ce40f46dfe515bfd4dbfcff6f0d28c31ae519bc24dcbe60e4b6bf329a1a8cf552dcb106f44a427daada6161b8a5ee902f160edaf5643de349878afb583fe58b7b06f1152e62451129fd3590fa992d16f4dcec95d84cd70d47cdeda2c591a4a6ed39bb92edf0c425ede26bb8d2edde4f68f86433ebdd53273dd32788171ffd3243c2286f6cf308ad06cf6b006afe4c3404cd10ab62bea468b39895559a9d0b38e3d9d101f3af69ac31f7079c5762221711be29aeaed2038d7d8de1faa94833f4169f108bdaa843a5f6d02d3921d6e9492c0eeeb74c40de7dad9ddd2eb877bfff0284b34596470e9113a07291e009484e500edfd1682eb56272a550f558bc726d95d43897af8094442b596f1bffd58d54746ddbf89ab910d47fca733764d5972166179d08514df1a237eefee1b60dc344f20a60bc54080bdf67e8f48275c68619e63235c5f357e8282404557770d43d2aaa88975faa91f95cb7c3511cca450ccb072223b67de9c7584c055bc19938ebbcf748a84109434f0f7448e8a394bfcfd1adde39e286bd7fa4c95d99b3381f86c91a65ac2202360170df0e451a63c346e79513625e17bba1d3c56b0e724e9dcab162b01748db176ab40781e25d804be1d309fbf18e9c595da9e6e90ef7bc411bb9e2e95ef9f858be2485cc65e2db166dafbdfe285d186f73c82e5b2874200c0ac648a1e6031007f5d24352e049e67cf442c6fd0a06995e8dc71ec083911330697e2d1c7a51b529cebadef5cac4bfc8ee9a21454fb29e3fa449aef128da0cc360dc1339ed35955815068a22526c742287a1926a9905ee78aa38ec0fe17038791039dc3f14194011af1b465203aedbf976c0d581046356c82c52c12308c5cade897c54c111e9d9131dbf6ec436fb20fbfe7d3b04dbaca223534d72f6ae2f43d628e57ec637da691ef18e7f60240c4dba4152f829f9b8b2578a1b6470b775bc7452c4d03844685acbc33e1edb1d67dabfac8408a32c9b64728a4ca8e7a42c16e7b84a6cab0339859cf47efdb1871103aa318d517b5f69b4a2ecf8469f6313e8e49a3cb108ed74b9f8e9e8f80b1215a8ee1d0304de3a0bb15ef1294ea0930e1cd3e97945cf2b92f318441bae1384d850d33943dc40cb805e344765f739872926b5fe3136b6fdd2d61dc038e97f7cf9303c1369b2d58637a6c5f07cde96a100d5ec6cda2da0aaac972f1c05cb797d4ee1272b6ca43ce8d3de36877b084eed6ca013082c42967476815541d63e754bd315f95c91d3be7d46c3f26af7024e64c827d9eb45249e353a042d402c4edeb7faca78f123645c9cdc84ac435d293e5f6811f318b0e2dfd7fdfcee2945392a9e6ea26aeaee385813fce1b286cf891cf5032d585063a745df640df76951a12259b1217168e69e076263ccd0f5cfee0b3fd7f32eff89ee6a52fa96316fab9d3b17461f276502f39c0fdb9aa29462d61a3d409a46140a38a29d74fe3672929288b93bf136fc2bd987cb4fea2ebe44d59e68ae3bdadba3696cb12984692f2a4930e471b1ab988c74bd1838a75ea0f23ed56f9854521f9d02d37ff693fc8195e07fc31a32176fcd1e20c27763fe34894b636006e0b09ee0e837eee5b9e9eaa0275d894bc184d5c447a82b217a6684bddaa4eae7ab873ce8eeb230413f672b36e41ecb824c259d54025785b952f8d03825b5d5de0cfd3bc8e99ae9d6904b46bd69f20c2e1aee9ed84d0ab9d45c082a15749180a9211eceeb420e3df13452cdce4dec06e4c2177c80f66187fd2da9973691eb71d3c689031f7b6f691aafb82fd4be08d763d738c4d338e57a715bd4024380718e1e2979ed5ff44737e4c196f6a08c7bde0c2ec00df9f718646009c9e9844492b5642803482ecf8c6e4e9ebc29099a5a99dcf6feec9172ec34c8b945fa0e5057cece2a2607c3af641393d88600916ec31ca9faf1923ac850099888cfab3d4016cc2ae32980d8ad42c2e0e66a72d1ca45b29d38765ee2fc1d9fe9322a77080b54b06b682d8630653a12bc83d1264da7aed4cb3b43a9db290cae5b4943ed4eb9ee4481452b99ab278243404a4ff96304fac13a1169a3e5c6b65ade5094119efd164c68aa88ea46ca35e0b2279aeb8e9714af43c0c34babe732b1fc98921f9bfc398572d24d970126027dcc98d58a9f24d873ec465b1d9bf4777d98755a05293aacbfba963f2f9c65e725588ded043779d880a067c2a65e96e5d530dcb7ca5dcf7b05691faf5a56288f57018dc60c06a0bb3655ea5eeb788fc4b5b81fee55dfe2567041769ea457a596f940eac4fad1d5ee5339c47f87ee914c3be06ad2885866c16250744f830bd38d21dcdcb45d16d3b1724022329532a6ff7481f12ee63600f42eace6b8fea91ba49fd2085c69fd8bb7167ef6798e617c5a24e843f4c85391d53f990fac15c3d98e08018d16d05ae4908244e85fca03d767ce45849c6595477fd68e8bdda9dd746d78463c2db9df5c4795a72f830b0bfb2ca5d7f25791efcc5f58d6fd1fb13787e5f51f0bca311d059d7dd972a1c4415b590c4433d05ada780fc753c350bb8c8aba87b2f79202e4094a892354d901cd410462a672cd75afb3647362ca52bb43974a4be27a15e6a214a685b2c5ce585aae6b88c278d0835222b968167798cb242f2573588386a02110d9a377b1a31bd5b3d98598c3f428732f5c69ecc6768cc016632888872d32ce94caef3fa6cd33ceb3611af7c34a2e52492ba8a8f30168426485bacd9504b26b2d6d1304960321b34bb06ecaaa622418e853ac70b59f001e3ccb186d9520aeb2bd076bddfc9b1b0a2f582e6027e1269b1acd8070cb600ccd8a2f85b0d5eb35983c18eb73b182f774b2860042d5785f4c5663051c0004dc1c400a33ceadba733edff8e26e991fafb93be53731578a7f5a2e97e7d85419d39a7dfed74b59a53d983e6f4843e04540c820146d86d133645e1dc719e752d0693982620fdd8f3389c1c37dcace79805215823342a99e0c7133813602c2cbc7986e7aae3c10ca6400659cdb0711d229a898668d61034caa1c02ae4596d43feba41290d46d045215febe4dff193c384fd58952cd04dce819c8dbf4f4095690d24c1f8158726c99d7ec4eb01fe810c43dd326067d402ba721c04ede7babd2c67e910d79a4fff0b6d2d21e02078f7cd0f1460de589e7af2c909d7a390bdc96c85da8caa7cdef99e2764fc18d1d142343bebd81b4b8b3f343ab621dbff133017049f19795e1401768e5cef15191406166d205cb780964b8ce7711afac745d7be8ba6f92e9afedd28fa7cf230186367ceca57f6753916aa8cde5be30c6b1b1065a26f8229621bf59322661a3c8850d69de867da9c27d2bd9d880a031300e613b7e335a8e989e812e2b5aac98e0239469209b00d34b0321035d602aa04f2a711a85aa0f2aefb8be72b3ad5dd595287aa92c3191a01be4efb5747c2f71c573e63e981edc5d114838e8c861302737b7916c324f6d8eb7c298a1b4a9eab4cfc4ab5c3f2512af886c985be2e5541d365f81b1c6e0eb7f544039a233d02cc5a8c183d07a91fc9f7c33234cebfe34be61f571b1190e4a67acf0c0a78a37a85fbbfce0e548116c26d1396d6c0ccc708cd1b63e2778b87187183a6237853ecf31fa6b97099686a15c011d16133e849e189a53688977b38dd8c13c43ccb4a0326179d5717c3ec05b7c0b54bb576c4f2df007a2495fa6e0fd0fc9adfeb89b8252a953e74ef28e831476e11a82ccc9a6a991dc0c709d71ef90f5d7d803766936745cdbedbd1fe4fc9ae4812ab85d2adbb8cf59e6e326d979755ad7a36011a2572215bba538e1ea84b54d55cbca088a77640d451722848251c511986f92f11a6f8097b97715d89922a9f7b49977d58668188a8cea179c7555318881aef46b0823a5be75c6266f95501f2f34efb64b710187e3c4b29f47056fcb69c8dc2d779f22d59aa062312601bc01570aa70eda5c221169f28f3added6675906e36bdaa88628970700c17812281244195e3e9e7283795ead410dcc50245352aa1dd851040fa1b7275b6d15b1c0c96d41759b253ae1acdc01999c99d63a429746f005ff12a556edd0f80770948b44d066cd34570587b2c99beaa4cdf9cb1bae45575bce653a9b239ccc9b25deb010487fb2bd17c7615fb824e615bd93528da357fa7a5156ff16c500c9aaa9158d6e63c80636f2d3bf9af538c9a78ac0c15577094fca81f09e56e0db0e9da2e3eb96a29d311677d47210123cb1f5c280b9dda5b40e4300203008c89777715ab7f1e6163b93c1c72bbdf90f822f9aded38bd2ad68687281cb3c43646c6eb96f8a9acd584fd7d31571325dc24d1de874c87880cc8102c4bd9b5bb2513e744a311a7053fe5e9afa8a4d3f0d0f3bb80101cd0126c40fc1627572b5683f3e5a8ec5f245d197855824a38f270a32d87eea8f8f62c1be8a5ab489f1088ec1d332458daddaef6f29d81e378161af43bf911c63be9b84582a6455193e3838ad4e32e9070c4eeda73d1624e99c169f8bf8d010eb11e47528c40212e2c55019ba43bd867c0bb562bfaab3c5de8103ddbe764f44601e2a9f1931b52602ea4469daebd1f51cf29b31136b34f292c278bbc1ed0f10328d2e3093fe0c699f7a2b9664432ad4d38bb5c759a5fcad2d651e822abad4cfb638cd0460e3c1c592b58201ecf467b12337be038553761d5c39db6cffe76b1843ff87645618c183e5319c429e8378480ee12176d5800098c994a3e701dfb8084500e9495db7fbfcd21a52854f96abfb7ac4beec6081ccd818b01f89126b485eca1400c64f29eddde56568a8dec23128d3872bb62bcb98d88b339afef8178953607c60c0c41550f79021d9e421e32349517676f0fc2f0793b680d764cfa4ea9b8593502e6a04c4a9599872951bbf4e0c17d10c344d91f43be25c7c599cd36307298414db393f72278d449e8c6e06edb014c2f86a358fe7bb3ef82698583ebbed308cc6a74912ddb008ce60ded223441826b86618a48fea40b2dfbdff7cdd7dca15c09040831506ec6714bf9a55993b6a1b5b3f79f5eb77dbb53637929bb3ed543fbb6a3cd8f434c710a6264a352ec3631c973ad833468cad12ba0629eb3b0f145ca0f0d4e7ce7b211dd20ef45a1df4af4ece9f944c6363ce483ccccf5b3a2338ece139b89dd0a63f41c926910273c32d29b43ce89ad5c5f0272fdd5ea5e382a0db2d8e18379592d2a9a9af8bea3d4892b3e93d8bd7d391b828f131bb91a2e2bf0a4fc7d41bdb47ea4b28846ace474764432644b7ef7f4a8db50bf10c1d627eaca148ae0e3a94cb841aecbd07088f09f39db94318a6cf0eee722c62d8acb28d322b8a866c9408a4f663ba13cbdc87d8c62e388311b8800250c8a3699ae98ec3612037463b73af619c579494025a94410c08e0300634f31e0bd09020b2c470ad81c500b84327e6731a65068997c88375b3fffb265d0b0c8c94fa31eb680e8fa4835ae03397f3cfa37c7587109311041c521f91e48f1be5eebfafecc8ef0f69dedcb54714c855d5e48c05b98c609423aec5ba6d29e1b1720a5fa69f7363923ee55bd81506e784013c87138ea6f7f45a12a0bad8d0df6e1eba13e449e2526018a000185722362d10a790b052a490e810516f96b5efde7d29530f09db88ae2f3494ea667e0bfbfac394c6fceda82b35570205bd471adb24299b28df9186b35eca6c69352e5e3aa566557a6b40a5f66bba500811996e59fce88f6fd636849ba5757be88d86493cb4bc9b2e28f4ad5093e0303fb79732eddaa3a966247aae5746eaea670d3684035205caef2dc3daad48b98f288f211502dee4541bd64644e1ab8a2f0b98bdd78c0e041ade0a0371542644385b0115d79c7746050bc39456c511b9cc7b460a21aaadf00480d83f2babe0e245891bf4aa1363b04b111a929a7bb841a9337c4dad568cc172744ae9db165f673b090b40b5e378d81352d9ac507872c3dac047f74974f574117a419214323984f12cd69d60c35cd3690e0403ab2c91fc8ca32acdaecd5ee65dbda7fdb14297c358fd04872d467e7989b79f2fb527bf0e1a428de0307381c91a6df7c3ba4b736c4822590bf0804a0e8a742e2de1739e825cf09e47362f7816aaa43f1bbda55d2658791a55f53a1aeaeeec5a471107611ddeec8146439ddacc43c967855390a11a7821147d1bf82b605a77564d89f206d2b200d1a2435377c2cca092347caa74ed3c5dd0704506fb367b8d12c06e50f8d680b01ce01017553dc9d5ffd66f1d56e35e8ba0f6eb90869923bb92016708f126b0bec78d003c2433cb61d03adca888fdf929327e7116c13d1da8c6564c2f2363d5007e48e941a848390f15b5a25c74ca0239613b3a5df610f2e49c79c92f743c8060b5014c8905deb2efb254979b01ca89e9ec70df822eb13420ec6797c2b3af0a50e8393410aa8c1ab6507a745761f854e37478f5ce54db6529afa1bb5048e9f834da64ce15203e31b7db6653992e51648a5a031f3ed1e5550de6552788530f1d63d2e27cd021e74f37d000327638d7a08e5b8ae12f030a537efb13821624406a7c36705c6b9b3e4027f12acc6b778f6a5a040ecd3bcee0a9d378bad94b97a9485aadebe2ab6500edd0279e1d085c118b2ecfeaa87c8630b5794aa51df3d4b2022ff58dcb989729a6e3f341d3e5e1adb25bb6924f7fe9a72efba75f221a78289b13fec963ae515d8538f5d8054d4aa5fbdbf7ea9c128ee97d24792aef99736df33feee7761ad491ad5352d5c4678e0314e84208bbd17068745e7b9415b2c933b958479831f0c328edfade14ce9f85ee501794ac75d19444782796bae7b5871858810cb0c5d41e0212a7aa92ec751a43b09d8f22bf5615e3c7fee33a5393a0255f74670d97dbd2021ff2bcf97f11be9fe641ade23b06386871a8cb6e71c82eb23fdbe746c556a108a4dc7800eb7d4674132e0f5adfff8754ec6fcfdcaed98667a4eb1fbdb677e06a8ab297a9df14a8cfc21efbe87ed8e480aa1d01309e09712bb01f7dbb33e40be4fb23d3ad57f4b366b720bdada3ca76a015450f2c53f7a92a83b72f51b62baf7e4ae5bd6627d48b04705697de4c190f68e22e7f179ff5607c0dd58bd89a30ad2261288540cc561e97df78174cb3820b65636029a43a14a3109e2a4374a3fef6c246fccad81418b6071dce7d10136c1b44ba84098bf7d58b6b375c28d074a666be0a5f6cf2b2de83d5f3ccbb927657c8da5aafe15b75da191ba5c005fac88593c7b8dc0d4d990956877462b51ee5bd9e3f90a382856d3a352bb911be0644b85d762daeddc6be7abda790b4dc95f02a594394f9083e133e4ccb062f0fc65535b2a8f4f08955181238de92ddc74e039c3f846da46d400f61773383cfb8da64c2be1c36a250452e92628715cee3d9fb94d871a11d0a6ef2979287d668d68936821ffaea0aac1f274f4e396343c548b83c84609b0e1150c5843d70f82fc0d0d7a790772cb121672942b007f88ee9bbd79269cf4e91b6ea77051c09507f383965d4b82a3900526e949c12ded965d35b96b497d15252ba1210c95df063d29ae342015a53f470345228501473d6e9a74fa613c8c2a3dd63c1c5fd072c161c432edbf025cec5b5af29f17a9fead5e50974898f4986482279be1f17349c99cb9aa57d1e71ed3e0d127d01937d4f63018f5c67fdc6a67622e1e42168576e5d039f188a2a527f1b1dd1f988ca81ac8c3e0f83d81002ab3aee53bcac33279dd5374d1ba16979ffdab7413a2430bb9551f472ea203b638ddff41c05dcd30cadd116a6400fe68843ddefd5d5580a681ec61c4cafcd848375912513038c2cca55ad2fdadc7e93d5c506e23aebce8a2927adff6965cdcc621949a941afa77449caea66e6e1810f8623f00694d85b41f81c1e4db43a8b39e2fd5a5b21699af41625c32177861d92c34d0844ec18319c440736d198e17803991d32e998147ff04b7e5f6eef5fd0705112c3db9b9e04ec7fe46daab09e53c22c0b600604cb65b8c19cb58587cae1289e9f01160ee7d82a289c7021bd75b5a47722ecc3c26ae6864005e4be6e028b8dcc95db416b950f50f7f6fb57170826489268f4bc87526cef05970c4480989cf099ed8bda3ade779067f2d8c0093b27f0dc003ec048cb60945a206c05646cd5a4eb3c500660b4560b4af0120a86a404bcd9e659edbb7f9278009bfb7789735fdcca68b9e6d5a2cb19413aae73e87dc16c39e48509ca94f72de81cbb718aa03e5051d062541650e8436d298e78fb38bd26b02dfbf76ce9105b83e6263bfde4e28526282a7a8c2f1cb15c736de9b13f2dc81803a077ad320891df05d0e8d446a487f4a71c445e9b11996ce27fefe63e4383fce7f7ebdde2a94b9708bf11bc88ca8724a1cf7e8c4f8a795ca8e3353eff372450cd6327caaaead97cd858c3ae19a085bef96a5f47d2e3d89817149d93f835e68dfe7f8b4fe5e5113e02037df3c9ca94845a23fe07ef2e3c7fe58594535113a55b652e4935629aefa55ca3825df96b8b56527dd701653eb8475378a4a785c1ed3aca9ac6d3644264221618a6b037575f4448abd86649e7742e6f912b13a547434fc205cf115126f7ab7888458fe8a2e9a5563ea715ee34a2292c91aa81292238d642aa2940c670e1740e0749025b4cca8da944a2891cf922762c6014023c2ad8865cf709d6ef1a1fbbde239c299633b9c9b3142acc5d28aada54eca349fe00a443ec7076d67091ad02c17ad7690a7ef3f7f38c3617e6380cf6f867417bd0538333f3435a090005035f0da842d32f4b135c3f511c40781574c8d361bc36b14f286e0566d931f76b419d7a29b47d20a786fa940e6cd6995c8db55948e16cec2a1830ddf0590e7eead4b6a33d1e21daf910defb2bd191f8e57ba228afc19b1346e70252fe2c2986bd104e8280b8e5efe1d9f4f215d7598b2cbbdf3e210e500031bdc08894c8377f8cfe3c32603d211ba7a4b849b82c1fc526d7f1b1729281e95dd3c8500b9b33e5b9002c74474bc8d910e240d7e741a3cc17f9931153642614e0328baf1ef35051d82f47428ca9839c6ab0ab7a805295d8c0748b18261016dd0d5dbcc7e12d031986b067ce84c89638119e81776b7ad322bb511ca04afd103fb17f37ce67a5ced8e2b190d7f7d521cd75e1df768830b5832642c82d99e7eedb976bb8496a4091321a9bc8de97025536044c416166523b7df181f7dbab106974ea4c6732931df3909ad32a056f3397181acd64f70dcf68b1826e46ec47d44ece7198b756bdd67e805aafc7684b12cf49e3a8768965efc4b964cad40f16e5a979bcda32448fdbaf9929301a2d3cb145011c36ecf2ee0e81cf649459abf00e003e0ab0b9fab99e24e6666903adeaf6f8dfd9ac7491afad69c1f5fafd031e0249b9edf7b20829def75bacdf5d8c49006ccac5e5cac51cd1af40670d5b653bba6418c9fb1336feb9467eaa902e0438ce862cb5eef2c9f7059453c00857756c37c425e153d3c944e4afccc99e0094080c12ac35db4a6e52a0ad50ae344345bd97695ac400a1d0c8f463062e98a34bd25677222374e829f26b9924ab9e703b01daeb1083ded6567c8f6bdb4027a62402355a4da9923dfb4ca000ff4eaac21d134c38bd05c5b1588189d88f2196a09687cf2a2a780e992afd03336a5a390b94662c1e5fa8d1129bd943960583c0b65097d0440ec8fc8c689f29f40620c38719a36cde0939c0e53c2d6a95bd1ad755b49e1f339fda32230935b21c22e1c9816788c05cf67156ccadfd1cc6d691f77f2ddcbc51876420ed62d09ca8343b184e8d760948b53c7ccfa4eb036f06e64537cf07e73ff373e83c0245509e0c832f08702686009c309ba3d77aaeccc416025e75bffdec0698ac90a85965021e4a2c42d6999900c6c8f4fa56aeeb399313c1033798a31bbc30a0c0febd5c1fe906261b8b31073d4bf1352e72b6489b453c4b07509ca072fe8853964af4561c8c2037d77705622b73c321716b68ecb9c5af3f4b11cb09cd4d1034086774a33b0d472ceb84110621988dbee5edb972a3f3158aa29a1acbf19e2a27d72f22bab16f1884aa700871286bba4bb8ebd4c71fe5b04ee2acba62113fa1e4ecd613785870e25efd81138970d621315db34fbea3fae56868c5dc290e08d10f85c95a4f545b9b248dc6074d2a3f4e2f08a4bb7d7cf51c6a6ceda59ddf8b3db3f8194dfd57e10fa10c845d9cddd4edb5e0752cc8e656052ad06d032864ac243a41ac47e987e1407a0129d67bc554c918249c5600181026128a62bee9d726be0a0a6da73030893503f5988a7efe822824f68a57c54408496a3903f4902a7d395df98192d62f75b2a2d5182f2f248e6a1daf0f1cddf12a06c26c7d27bd27ea4b335a8c544d8228aef7fe4556b94d3af6289a5d7e8b45f95b6cc8ae96cd6b4030d92e2f1e090fc9cc54b005994d07e32f93f03be491c338be22422cde8911ee503548eb9eb48d0a0e6f130df0a347dafef88e4c8c04f45dbb453b3585bc565989b3a95009d4eaa2c91ee9fc04d6e699146bb786b7f3829cdfb446812ce25239efcfbe60b851f13e3bbfd419c7aaadd21ef552c585fbaf8204c9854c5fc49f07daec8b2f0b8cf517b273e933473841f8b8ce4b96d8e9ed177cf5c77f84ee2ebd709c7b30d5d90f6d9d47b00e071c90db1733bda5a0d62ab1c74c3fa1777569c6a1ba4056a60020c835f6bc5eb9a13e668667b0a123f794a7e20639d7f258a7932240c56eb802616ba1fc2b8d229476cdcc57db331849d8e7844e905d752266b2b04a65debaf453c4363809b859dd165b7a33b1143b401a3194e29d9635dbb52da1ed8610a3d5e9b51026dc960b27da8d0a3f5cc496f25362d26b697593cd27af45975df25a314192f111b36f0daf876b4cf9f3b7d1bc18dc66f21e352ac4209e5438ccee0c870d319bedf80f595551c92cf8e851f31fd912b11fc887d405ee0f50b3bf1735c159200cec2b95bf7537a474d16fca82c3983681be4bf28a0cc386f2805467540f4389bbccd8f939f7ca4e9f4f2501f3d555e0b1481ea260741a571aeaadc026676de7293bab0fee0fc083022ecff31efa53baa6d6ea943d28af89c7489085cea2123dea6224d5e7b30be4118f91ab836298354e3e63643bbae88b8acf8983ddf4f864fe16d33682895b0f724e3b644553e2e725f62a87dd6e21059ea84a4a7a4e6d3ba6748627875df80ecfe2720df104f9bd2c4e02e2531ee5ea60656b6a592a42435ae4e5b5c56a20c4dec0e32b35f3d3d3910a8416a26d271d2a37743e7b7ec35df88cbfdc4aba41c0618bd0e57a87dd55190aa3f505db4b9a14c2efe16feb6ef67297f0610a097317a76876fa5a4913df44c20bc035f40e8bdf27b11455e8014523d3b0d9b914550436927068fbec3f5d221eff2db982a2f24b7f077eab8f6a101d483c2712ac74f203ae5e50b2099ee5de0ca44d39cfeb552393a854dbd4c19358b406bbab3c699ddc12e6ca58e1b6ea04211c46ca4ef877bc207af2d20719748b166e0fad6a024135f03d5d2beba20ccd89534f9b09ca4dd56300e35ff8729ca329a1a5c4ede60a96a1d29b4e27a87940d269d09506b254e2cd69ea6d029ea00ef0d9760a2ede76fed5ef807e7fba9f9bd2eb4d75329cc9060aed016fa9e490fb8c2cc7e81f56070c2862205e9dcd1c7916dd3c153aada1c3e7d3c35d6bacdd24069d9abd810266dd821183b0afb215247120729cab3894bfaa2f9dd0aa6888abe7cc3d67eb3725f154a4f4ae92e6aab3b017388271fb49e930b9383bde460c3d3cdd291d99cb9e3a26649a2a5dc1535e9a76dc85998458d3c89e2a646e82354afe9da2e65e5f90b4b984829db9f9aa23023a48631112b101058b1abd63eaa4f08b1706e74d3d835ba48f2424297c4dbb9746d7358c0c963f19ac678d15e6de3851102f71e4144c82770f32705f484dd306de2833e55edd7827b2c6e6d5e6e33855d8f913548358714ffa018f6fc35495c50963c147b51637280ff2452b58d1446e7b262d3336c19aa885bd053fa826128e299e55f4bafa309c44dcc79fc262f2562076af3d2a271918e43fc2532e89e3117934ac24e63b648fa44d892a7a134d1e79b4e9804aa692ef7b7376bb64d8cf9758a4d10bccda29f62c0a684330f33e01857939a961336dbafc69a2ccd298bf5cf286f4e2f62e6b403e7616005d1ee4605c394f62954dbf11c5f2ed6ce6ec4321be122a9510da044c404f86abd0ba2bf79e3dd63d771826361c50580ceb727574ae7b78662fe4d6cd5d91d7077b86edfc1d5582e9d6ad654f1938d73cb253122baed0e42698eeeb33d7eca46400fea01ad96ceaed26fb680001629ed44d3b916b10623afa3e49ffbec01c185649cee3e1c4f410639d94eae10363e6733b6328637b412357301d66957c39a302bbafe346f4aa2131dc22d18aafb7ff5dbb5da507c97c974c7cf23c6c812b3af8283ddc0aa2d8a283526a0a92243a4483bc83e7a3266c500bc97d921ac499dabd7ef82c20d4b41977d89c8140e6e34b73e94244ccb8b731d9dbc3b52d30539f0879b84c441c22d67057ec66dff583ed8bf0e0f4d99d93ecb3e828bc7c3a428120d4d1aadf56c5cb4b27975983b21e77a5240a7bbd900fef2dd92e953ca066da7cf0a9dd1cb9c6122440fd6ba6aed433f29a149df1fecb5b98717aec49d53d2206576c1363e4806fcfaf0941b2d0625b2d923aa8d0d83bd497ad5ab49e6ef6d0c54088effb038cc7e78a8690b4fbb2d0c0e009b10934ce02c856fe524f8ac154b9df090b3cb112457259953e4c1cc5ff96940ab17f1ae828e0df741978b46faef0f9c1b40f6d05d717c8db81998bfcb72ec962e2bcbd8afa246712e1599288d6a21ba2c02b864e3844dc33b4058a086d7971096623c282c4f72539aba661b56b5d2694e4c2431905617b082c510acab07a176c99599a5f8be0b5b99952339d3651bda34e21499927f8da839944f377e08571c2f2d2956453d26b2c44805ca0f6eb00309092758465c337f621ba5535789104766d24ebc12401eb45d4a0d8ab621dd9c064cb781c29298f65ed41248e025dc9200005511adf59d1a5603bbd07d8ef56b27998c3def23b11fba59b376bed320662ffa3d15a5d738f2a4ecc8263131e4f38c45e8c04fa7374be031260839b70261be32b0fc68c386549c02289c58a02f7bff68622691ce6fe65b1f61df95fb3149b3738f85e2d1ccd5c2aefba17d519ad611c2a5607d8e50f58941f5bfb01ed3cd5cf1c78ab6552a2882d6e54f9d07bd86b16bb26bb5f9355b8698ff3dd275e74b909fafafb2252ac78014221294791d8cd4b24882b4516e945a3e30f0e18a5fa20eea3c2bfa93132baf988a47052641150c4c7110e49751cd1ee6e09d14c2cf23d15764b5d25f24bf18fc46e5e02419c1479a41795199f46b0cfdf11ce4d258f68221e9e5068ca712476b34180caee9ddd6fae356f902048ca71a477cb485003d8e7ef09e7a69245b4481bf8aaea355b5bd2ade886e05ca202e7ece079c4b5bb0e2ffc3c4e4e405639c5cb609bac678159f1155ea867ceadafcf77a25860479f1880b8b95c895d55bacae1d3cdbc7e1db430bdeed1b332d6b2f4166db12ff4f7425bd8fc8010b4f2207ea74911d25a7255eaebaf472ad1e2ec45b4ce9c6ff362f2b317db711dc7c941ead659765139df6850f8eb0627ac9241276c0cf992ffbeab1c34f594fc431a855b4f4c5ded52ef21342581bc618a8be87050efa7b297ee5497697be9f27b8dd90ac4de0ca2189fc649f1d6043901cb9030a0209487296e14aa48f18e3942ff9734190c9ac1e79477be06be0354973b160f13ab9600f80500c0c9e289a9b0a091837273e372dbe931a235bac364c324ca98d5c630aa90172ecf4efde6cef80ab0a73de01f670c25ee55d2d07e9e5cf730f9a46de300b0a25658fe2d91648a49701d4a1c26bcc814a42d4f6e7fc875be9fa32e116b096926d240adb5df0f8df12bdb057638f2a5830863753564977c77be4c5159fd30fac61d7f9019b336e532a8e3ddc9cd1fabbd14a67ceb04cf4c6afb8488b8ffa1740cc9b0ce4a2a5d7005b2bfb8a4aa9a4480f363450502bfa5870b8c34ecb25ab2253fe36ce0510797178114d08ba1b16c5fb50336fcb26e6ae784dc27cfc498cf6ba6c816998c0cd3611d04a15cc866f1830a3a0137a0f203619977e0fc3a66ff4fb49c394c79aa228da0ae7234abbf74e8290791fa8c3c004c70af813204e11584d341e1f411252d2cf29de6787960647b6a2cdf38f8dcaa4e6992627e1107e2cbe0e8805898a1d1602541c264890f363884839a328ddc88cbf44e82b2038bc7d87f2523ea82a2e9e0063ecf478cd55ff0cd9f1ee57cc33b7d60a4fa7cbe7ef8758ed9a84bef51ba6fe91c5d8c51c94522c4ee085931c1fecf67f6d2176cd97202061d9eaaea83f58ae223ec22086e91ab78405d7cc3c794fe9e9d7061724cb6a513d62ef7f2f604dc5abc7f644470a48d406e34cb3404bfe426b4983715fb8589ec296a445432e2689eaba4533d3af6b4fa442626a3c4035a70a1eef8a65b182372a4278b6f0552aebfee3ef412b8721bb1b2a5e0cb3e396dccc9026d1b16b03ffdd25f1bfc5b97ee7b8fc338b56a9769d66ae2e9fe04c8b2604e790a12af3665f0e5f8c0fda92c50ba13bea615276458d40cd25719869594053628a86404c366f55645a484604c000fe6c8494cdff65f7be3c983af618f68f32b77d7806c7516f058659819d22a02cec012f44cbe3070953879b359e3630a930c81a152386e31268bc65980ac4f3fe001fb1898641976bee1be8c58833c9bf5fb0d5651f3610d447ac4021db39bcb78759a46640540e2c11bb86eb01a7f94ca03a0bc2c57640c12fbf7ed8573019f8b4a3795602a9518500f0b6fa28229f27de991f25920078886cd233cf9760b0e531789f79e0374238bb9031ba824f33280bbbb54cc481a51b38ab9830d3c88fbd1de85d1a7db0b10051a704df5b185e7bf866eaf11c10335dc822da8aa8fe9e14384acd96e5e6308841fc09ae10887ea8f0ce1ffe8f0a0d86a8090f97af0cfa887d6cbde2396b3b334b1e98af4d43e7f544602db793a5b6deb281040e410382d446c4b4376e07a24dcd80f6b45bde0f24b48a4a74057ce1203ee59aa86c59e049e835b614884e3d09108e76f81f32a46843271d186cf14460815ebf44ab97587c4cddc1007c1577d207208f991c066eef0fcbff30fb0660d180117c9703c0cb2c2198f71f036748136f84dcad68710d29c9ca8096c2c5fcabb1ccccc6935d0c1209e5b903cbd2d6a6db3682bf6cd28eda60d5187effeff440d88b33bb4d8e5b4f9ecfe93ad4ff73edd7cd6de189f3540cc3904ba391360ffd9ce67db4fdd7f4eed8c4f1af8e4ec00ee0624f8dad9cfb73fb1459f8e36f76ebee17eb6860854cdfa8be2995345ab0df8e161c3e448918a645d6e947f711204aa7d04e3b7a191c13d74e409a81b6bedba82756a7c2dfa14f53bf8e365fd372ad95f13c6d14fe822739188704789b5ab56b5f19fd709b95100714c17ce51facd0082b329e702959f1976f15e55a9ce52e3eaeab6aad778d68334ebc7cb9f189ec84f2829efd039d32557eca8ab91f4f1bc1bf021c530a5bfe9c9d78c0b748b06029d9c8a4707a3daac1d71ac6f854fdf908bbf65a8cb9f4a1fb67843b3f85de5d8b5df1918565ff20727f1d72a7166cbb96bc0b17ac89d453254f3116cbda815a9831b1d70866afd43ee884e2068eaffdb736f1f11f33aeeb180046c5d99e553495d695bb48ea7ab245bbcdaa78a5ef853502a74ac721850ba8840f1a411d4014a91dbcfee1b75409eeb45c87376e3559e4b7b213e096ec8759cfbceffa4099bdad484e823d52817df05c2381794d2827218fc3fa6a12cee8e20e039a4e903ba7491895a00b8349bb4f596f11c0938c835e2817efe69d1eccda905197b1116800e96a0ca1ae5a06a8f69a5a38d0b81f1417edbef72a501b74864505ed528cee60c7088646608f4452cda0531409e6231f8aee27785f5bfabc1fc4fbcdbea8bc4df61a890c4d37cc400cfb81acf003f10526b8a8ebf7c28e9cd99b981b8272e141b646e207c0b72f157a24d493e209d03a8cb83415ee09f886b0429f9f80089b94193b077d2b747eaea045a29e612f9260614f13fd9a1c0d43de6e768e7f899ff61a30f1fcb41bcb780ce589478994a05067398c3b72f3c66c537e48a6d11c680a688a8e97d637249fb0a5267b3c3690611be43138a32e870b52fb3f21159437cb3ec664268e21c7062b880a277106017495af0a0a8159430d780dc7d82ba5e475b2ee154f90b6aec093db5c15da29bb806f6b7ed7e558bde232dc75f60034402ad2bcb37582f880355ff9d4f3df4bb763f9a8899034380cc315c831699d1ae655d843e4a6ea27f29d6a32597cbf3c9032119f724dc5c4ccdc602d18f7365e690b00e7df4125339ec5c44e92b5f790ab75e89bded6f3de909f2bb18a1a5e94ac654cd0eab3e22d257d85a3853d706441dd209fcf480a75db76a961b1c25109d06b7055f5b88598312d3a84a537ffcec37a82b65d2d666859a22511ae03382eced532cc1974c5eeec09242584a1aca28be03282f243f947e643348a16b41002ac4516a078140ac8c73b9d94229395f6664d563ea26109b68491d070019627809a4b756ee2fd95229c6e9d7859b28d5e2cb9e46f12628d9b3d6f4ac3ec91cd02aa8f2ef8efbfc5addb33f2c3d1b89687130bdbefb5c642ce92935bc0265a986d2b57358c9eeabc65498d500dad5a003d0132051f40a5708003ca111a00a00701ff298af84bd16e602e52630ab4a6dd8cc7b9b7533adcb3a152321e902c3fc8f4b6688cc33370f14da751e68d291c81eb0e22c1ceb7feb30e20998779bda58a4c7db86eed347bc880272bab651b18cc1b132d59a7a520f4cec3c6c4497ec6deaa824d46f7f20ad1c3562bafbb96454c551f9751e2e091e6d087873e118415d85f52cbe23a1d98256785376e719d4e737e0b881616f6a6c96a8489ec410fa152a74042fe6a1181c7decaa2ca411ebe2d9fc6aeca92ca411ebe2d96c6a7643052e010af504c309f0b42f41bb16db2e4dd4463f0f669a7c7914972321d382dcf1392e330707960cd21ee1a578b7ce0bc1cba10377ffe220e93c38db3cb5f744e414bb6354eb576053d16e59025474619db36d9eb764e16387bfbed1870d5f072244c9f13d54e18e249ffb6e6d6afdc9a4e24fa6368e03bde95f02c3726af40aee01ee0ba09d73a24fd312f001b55660271805afeb3ec7df2de941706ce48d44f41e60df90106108a4509cf621b7cf686a0f62c6b55247074ae0e7fd389e0c0144364ab42d6e5880a07b753d655fdcd565dde3005e89e0e1f5bc9480ad8c3512f7aa08dae06fc5d22da27dd19b95909e421a527849e6f6e5018213a7b86b1335d043d0dcb8cb03e0597b74a30c63d41c724fcdcd772ce7f68fd21b9336460714a4fe057a2343a806e4728b72f524a5ff3f3a2481d0da240a54d565f903557548e1949e516a616b5c836823f86f43a0b3501d187efb2836e3cdb7da4829ab7a8e500b849c0c4810b16afde7b822237b9909bf88d09096f5df11fbfb1c810268638216a5a74c645a6ea32baddf47aceeb9695ebb57ec2c70d7ad428d756925482bde1de323973ebb52d713c1ddb72fd24b7dd177716f7ca95c9166a391b40a521b02b7a303ef1ec97dd6cef809ea4a256f9c6087cf11249f145d32094a7fb4ed5d050583d7830ebb4164da953ed051661833e084221232e0f24ed9aa9c649d0ea3423681616e35ea0451a3c27a3fd63b6ea25008a3025870c0a433f5d540ff3c066c075b43f8c911f44f15d8771e93f2875abeed9110241823290e86745c73f723aeda1e656af63343d12e2dcb0a93d5f8ea4eea63b7a8940b059b7a53fe3a1dab3a535ae3ce6756e5b23f598e0dab8253a324e053b567699dcf47a752842dc87adf949ec1535205ffd99fcf361b8a239de9b9794877adbce03bbefb099958432ec1ef77c8a24f19bc7bd6424b2c852e116b36315288908658a7b238131136da0fe3c19984612d69885c6121b83b4c3d1c63bb5548f7249646b3c0c876ea863d204b1092b568d852e7e00c1d7a52531bdd9090504f8cf6a96fa83d315c2f300b05b4d02eb5775fb748bb2a0188a4d5c89e2579b5b9fc1cac830ebadd64c7a03e7dfb3cf754471a9d3ee89d3b1399cfc5bf418c584106e1e223c28372ad7de1a09b6ebb5ab79261bd9d3dd7c6c9605167be20355cb963b35aae53ff33e2e0b838eb005b17d292358115b5de6912c744005b0990879690f1ee6470089cc66f8c3befb8e1e0b9ad36f9273db00fe397a0a70fcfbd0b9ea95c35db3c4e810aae382caed2f4c2ae27af5d6df9a5e16dbcf0b74e04e82bb0b9b5edaaf849430db8a716c874a130c32ab04a01724c2d5a8e8a326ccc726c43fb2e3ef4af61f30b8d8dd3cf84f002230935d5c3c5d753367bb36c5cd4ad5f8213d75044687b32d791eea09e621cd21b5ee8a39647889e064a5d2b4a8713af7440ad457ab5f44da3fb0a129a55b6f44fdda5b827574b88a182490a2de18e10a1541a6db1b23d3d922eaa731d2d493745fffd30c9304fd2c18795ab144d5af9ddcd047240863f84ac4d7c7f83c28e2459b71e636da72d487d98125e8c5ecc157264232add7b2cceac3a53f4e4040a801538cd18ef546f69ba6a8bf9c423880401522ade23acf285e090a874c2991523154866c077f18e1cc3ee7711d97bb56c17b0ee9f20a3f421bf3dd4c94abf6ae86d2c90d8f18b402e7f8398fda9f2b1cac3cf0f880408a43cb699e52ded9b5d0016b282e8da9657b914bfa7bda68980990040a959859d7822ce6b9b69820739b1fabc95fd62251fa7bf7461152e6909454fcb6fafeeb4aa12436620a6e04f1dbca7d3ccd3d41ff95cbc1ec2457052f1949f7ca30c53d6635ccb162ae221ef680dc4320369e7ec9a793e033da29df53c8947f5064965f3edb18e6a8ae122bdff99fe171952feca3fe8a17194795c3a37037905804280b53d120da0c23d36548b143a6c9613d772a3fcf12a599d3ea6262dbc69ec3bd4b9cf0532f2408f3b3701463cab0321321102ec3aa3982e47ee59c8783a856cd6fb0e009ccf7af5f5852addc9256ae7d528114de7051b73b5cefad501498dde1987cf70de596e5f5a5368fb15a7e9bce3c8b85b76f96da7d7e22fc7b7b7f11d6e7a6b4fcd07afc856e25fc88c2e3d8581046f1a08b10d4061b99f509953bc788c229a819771868801594595951222768ab64579b6a1a2467c804ce2c92a8b74e071c2e6e4a675c6d3eb7ecb8850627dc0a32733d4008a019401b8557a07ef6cffa0626524980954515920cf4018b282be390456ad41e3dc013a723b94196a6a9295270f75da2241b31909c88ad2db46d4e9d9506709ee7179da5121d000eaa70dff69ebf55c459ca6b3cf227c59e7ba6854b4f4761de18313876b3ccfb741e83d5b785a3babece90f10c1ee198f24c774f9025891a38034342b77e31b9f78299a56d2bf1d2783ad7f31b7014cb403dab5f28b5b304e4a4e07b5bebef2555b5e049161afbebf8c241c4168f0601d65f7d361bf2376674f57c7e04d679c9f6519f23a9eed158002a8c2b00282d1119abbbd30e79835c8269e517072c993d7f26b00f7847d696defbdb7dc524a29930c080946086b08edf1c8c634a39836e79c136c49af1ea408096cc99c2306b1d5edf43a317842bbf4d61058ce39a99f406754923dc858d76fd8ac863c75fce6c95357b5daad0729420a21c6a45b8f396210e931d64debb27dfa50b7a00ff5d61078baf4188b4843d54fa879031a7c7bf7389a2e65932e4a1ab5c65ab5dbddeee66e6a130cab479b87e4952fd5949bd4366d4aa772725ded6ae79b73d53730bc74da3c349d6b0b4384c18250c1989ee8c0986ea55306e023939b20dc44a95c34ae85add366719157cacb5272e364c94b29a5c49c662b9d67dce8d0d84d125c71603181c3a0cfebb49fcdb28ec0f786aaa1cf3d7733c4f3fbe9f0fc6eeeb9077e7e411d439a73774873ce3b79358f5ffb053def4f730f1c6aefc0f8f4d3fc0335f740cee3e71f38dd03371be31752bce0e2c592adb56a5e35bf165bf772383457f2abde69a0f50aead0ac5bd7c0a1ea1a18ffb31ebf5a87a6abec163323602e171294bab4b0b468d1e2e2e2050f2f8c4008b5954ee9850dcdc5e5c50b2e0af3543d6d5ef0a14b697aa1b5a9e1b6d1c19bb531c2b5d9d86c81d950816203c66b8385e402c99a26ac247aa4a042268a24aec8408402498c699ab919e28619d8f8a07a8d0dd36b39af31b1c161d5ad69b139d235914fe0ea22094f172dece42c604091c385125c5081b1982e4b893652da3091c282b5e50c8b69cd12f991694d088ce8ba069c5a13c35553658ba53543debeddc24a819ad9fb7c645213859a2790400ae9cf0df424027090ea5598450587de74ebc997aae62b5f160c4950491a9e4ad52a0f5b4f157adfded3b72fbd7eb54c734b07f596cdaeb07ef55eba915a2bab4acbf6ee1f60f523d31658ba8f4c5b4c99327600a4df5a0b447e8d9186f469e7df393f1d2d93e9a073e680eb0e19398834ca90445a20e565f8f3e3d2a9d24baf6af9d003c281e990cf7c6bae5407ad9f0e2a935114e403facdd3dcd333a4db8f85022c7bba83f83772d0dbb34cb0002449a3637f64f5949ea6557dba046c8e2c1ef0f4992c1eb027797a7a92b2cea1594262d2fb4854e2482cc6a214b21e9694796a851063473da4d54302d3a1cc971ed41df4cb7eb586c0314600294550a1148bb10e7088c10921489e843d44cb21cae3e71248a1721014f6180bf2a59cf3afe3c00e4c39ca7da450eee522cf539da7dc47c7f9978b52ce79118e77df4e9471bdd5ee1ed8ea0cc487e7f8ae702e2a8ad82886031621f9c009a1a43c95f254562188d0f499ee014d9fe99edf8c339608b821100da81c678fe9b341111c639f7b1f6814f340a3d88e09b6acc884e9337d84e93353983ed38184106319983ed37f841063280f21c63ecfc39679f1297633e9234c92309128f7c094771d053ba3f043b6d2f4992e3f203e528eca45452847e54eea183b42b5126abad04cc558cc033b16bfceaa28e3e69084d56c51ef9a5b34efa02374b9469abc2460edb0036c079764c9d09435036e8bc153d702b77bc1ed33d3a428a38d6035b9f4360b0431ce0952954a07365938e026f83aab094b09984b351b638c91523ae7c4b62dad946a20e794546a4bd09e4a584a245512638c9146ca4282b76f24f822c1da37126c5948706521c1948504cf6f96122458d280db5948584870fcf6ab4dcb0a016ea794524a29a59452aa52e9a828be944e4a5938e0f61963ac32de15a51aa5b49b2de79cb46bad2c2594522ffa997790be03448102c294245b929c208629c66861e43b40942f67cea49901cd39e79c73ce39e79c53071cae5673ce19e39cb7351f8a2ea68023539a294f4f6efe6f166cfe038f1e5a6bad8dd1436badb5d15a6b6d64e5809598d0cc6abd1eadadb6d65ae9b49212790a93c689c5248b34ac25787e64cae24c165eb2a8a2e924016e9f79684ad60cb876679aa34a75463e9d916ae4933c23ddb071baa2746549e90a9759954969add66ad4abd66adabddb9cdabddbc671736e1cd7759ef7759ef77d28542a8787bab2f4d2534a575e3ac65c5eca2af2255d1e9146249223d288cc21891c12a6294c99a630679cbe74524be9299dd452fa4a4771d332377dd432376da487a420b9cc2e61e49223b69473525a5bce4969ad96566b35edde4dbbdbc6715de7719de77d1f0a95fa50a914c6383839393a2ad5ce0e0c183c52f5e190abf0e725cd2bf9923f9de44bba7421c97a82c3159d450e765e7a4d12398805d0a16b2c4a4c44144184a524c61815c072e244b29c68b6d2e9c4495da26389e04a9608345be9942c11605994a16d79820503ec5eaed25ba516af02c1808260678ed8d8f485d3165e38d1a40d9a58b8fa3349ec191d7c80628c113327315f2a1140404e5638ca801c4f5503bd7b3396af36c10726164ca8d0ac21893cc2801c5da6d0ac712793d3101856473c5c03c71549a60f90193694c62d031d01b2a28a154a0c10eab282a7ee619aa35e2b66d58a2426a5b7c68d01c1cc3cb9cb0c1066a67c4c9da093a87f0946a62c72f8aebd323fe79c9252a633528c6877c00c922a4480ed56271582796082d9302198072af94aa2c2660d06c89e66a4fce4187004476eced913435c02faf198c4873026b228e2430d5bd00491442c7cbd00053b7c31534273a44d2c0432c3431c63a604fe32f3e45b2362a92853468b2a96b070bd76a62a6a20f29a2c2238aa7c581f99a87043859a0f557e64888b2584cc93146e9e6e5e6efd71c9d74b4e31fb5a7175d5aa66d70b38ce7094e972359096f9f295a1c2cb97e5028edfeefa9134228e2994a64ffcd536859029641fae7678f3e6cd1b1a9f5468419a249a847182072e463d680145922f42b489c2451464ae9216529491228c106b2d0f27786bb1586b59b21da458a2515cf101969a3a4288d28d41403020ac13667eb8728407d2a0e04817315428a18225a83481408a1c34299cc0a8430ce129d1225df0ed59b91430a09c8b5515580b4e9313b8c90a37a6070d4d0c02823551a130996de229d117b468eb54addce0fb91698c920f8362b8006b1f99c680e0e735a6850f5f3074f4c6dab3f218ee16fa02dac4024c16c5d3d3354fdd93a591a274e385010589b942886b0531511471ad406f960f5d4a405c2ac4802fc460111263450c9523d60a626a78d447263143aca04c5184a9428871616611f3c24b0f53c5732c16582d285d1b6b50145cc68069b2816b12016a5ad16982728515309cf1e186cd88316d56a0810898a4a622b429861bb7b064364c18314888e942890857c2155704324d6773a881b0f80384376f5ef09d47d88746477e6e79e621cf87b4104669e8e510f69e6b8ee3dda107040323e7405bf4cd2f2a877786f73def6e60f843a578c10bb5fec386f5ed8705c009de3c8db03ceb8d967c8cc2e6b0fa09465fbd2e3df5d68e4c9fbc1db2bee33960683de785294f7dd3a437411da7608c323cdfc0d0e8370f04c3ca834eaf461fbfa9ba3eb7b9751b783dce3730c7afdfaf478f945f0831d6d303b6d072173ab6c56fe5f56ede75e1f4558ccdb5fa7d3cac7f77bdebc791e33ca88773f32db776f8159a2c6ff9e769de722179abafc0a11d8fef8140560ea30363802b9007f52d87d6b1d7fcb9d0e4017ff4ebb0aee3305ae01dfa747268f4e1070353e0102a7fad1b7149d6d55abdae7ade01e9bcea5d3de16e5ec1fe6e5ca75e41ce7d82d68b32aedf4ce52ba8072c3fce5e986151eb46f41792fdfd48e1888515641fe32b42207e8c3fd486d3eb037ae61f454a4d5049a3a9bff09db6febc565bd10a529043617e98c2134d1256f5b3c1c9bf1c487fbb9e9d4fe5079e4f974f250d569a0c883082075e295cdd607c169979012a020546c880a4f1a4b1005349cfeb3a5444c5ae5deff927bfaf537217f7b9c6f577b7ff0075c65dac46983ed289f584a3377e8ef39ee3bcbf4e925f5ec95777d439fa3e8ea4111c7cd5e0cbc5dc3c08fb176b7cfd6c2003e61cc7b739a7a48f03beba2e056a29d0fe571f83cde2fcdb7cfb6c7cdb07d2e732f7ed68fa1c9802670a94ff695e0aec323885022978a7c061885fbae639e0953e9b7f9e4b304ab951ea71be81f42947e94b8c92160ba2d9b2c9022b585650c9b2828812d12fedad99dddd1e0289c0c2a287eb75c373d87bbd06484a29a5ec8a57ab9b43f7179008d2477aad15264294219d8506f7f49aae6bd3644581af4b77d1eea15212d1d78f77af6b1a052ba63ebd8244b4e9bc5ad32561c77eaac2cf7973d8deb9259a1c38f438c2fe0dfcd15f6d77bd417d4a30f4e5fd09a996c3e9ca02b75ad6ea977fdf82aa10a8d6c054d258b1a25881b9f463a350b8c723072bef0d64c05ec1d0b565b74473477c43694f3bd8617c2f8f0e8c9d9c18aef215f62f06485dfb6caceef57b633c0f8c1d70a503624779fd6c7c299a42b9457d207d0fa4fddd906ec190045747c2aa6b1afa965eefb1eabbbb810c3845a9d7cf06ca46a6df8ef8e6cd9bcf06f6542ba22a65aae70cac16e0d0557f5cd2ae41debc7933a33e58cabae82ac1153d6edc4a487a608eef562136bda7fde8ef38e7724882eb86bcdfac2db0275f783a392335cda70b69ee9dc0d231c24f8f19943d2418ce2119b5ba8ec8012a72d03fe5356fed68d7bc73385de5b968cf936ee60292df9ca2bcd3d14d90f39b43a3bf9ee3f53acab9d6f1186570ae02511e3f1d280e54390f1b281e170c8dbef3ee7a32b7d1a37ab4d031a3e7746c4e1d1c42f9e62a304439e73a60880a8d1e80f2cdbb94a751cda7bb70b04f30fcbe1bd7edfd78687e739843231ed43b94779c7b1f0fcd557e55b9b50335b79973dcd5a3858e4dd7f11d179a4252fb78689b4f774119126301c2ebd6773ce53a60989343a3276a1c7008e5fd181cfa7c4be51df04e1f0cfb78685e8f1739e8e601c7990b3e4fe8ff1a608405c7eb0f07fe6cd04e035b3aa8ece7c74f07feeb4b32d95fc7f9ba0b02f9119f64b227caf9ce2791f71d0f13fe02f901c2cb28637322fb403827b23c46f8abc10f10bea38ccde3d780f8b3e5f9d9b8f2cb21f431fe84d4ed0dba63668dfba603b564f40df9f35568231df92dd959993c453d3d8d1ccd73cdd2f739e79c4a33c8aa6cb4f6c9fb6cd8cf46671a03c46e55b05923ae5a2c0cac67e0f2bb71abcf1cbedee670c657efbacef3da3d0f1c92aec25b1eefba39a777eeedf1e4a12e46e752031e3172285fba063994df85f4e93b831cce68c220872f303d39f42558395c19d1ca44acb2b5411ee8796881be6d177a136554d428eae6439413c9a1493b4df3da3daae64314fd788428cf51de79c8b9a6e5903e3dcaa503f98031705eeb580336a3e6dacdd6b91ccd343581f9b28456b504bc5680d772484290e6b545ad1e203345938964c872946b2670f7f338533bee30a6db1cea986e79586fcf85e67b618fa33ca44fafb9cab32a4759cfe10c0d72f84a79061983dcca324fe9adb0275b0c7e1f8ee9433263f7a6f53a7378829106c3fa4eeab37e6d6ee510e851ce7d363426af025b4a27d989722179e6ad6b1f0e957b8e02a70b4d1ce7011f06b803a6c0afa37015366b440c83c1fe7a38e34398d5b160ce8f7ef3264c9fea393787335ebeaa787a1ebf51391e8736efbcd1c0ba8b077541df6deeb57b39047aeb759a7b9da779b6cb140db5ae45993e75c68cd7cb7db5c2b5766e49087a94872404fdf5140ed81983f7c38172ede3e13dca3bcaac404ff87401675fbbcece2109411795bf4cd1f40ceb144d77f0d4523aa9a37c758ac6a8a75d8816bcbc7f9cb1f005c9037d9cb550e65998fd003ece56b872e6bde75c26f93b13326576e46676c46576f4647614c6e96f4e52534fe171ea77d658391932b8a993c8387512e69a8c8a9a3aa96976439fabf037dedb3b1c1915ca3f1dee731d94d3b7ef64a79d87d7c3dbf7d23cd44d46454d9dd4a40695c479377167502a0fdb89f334ff74680ebf4c24dfcb1aa528ea9a8e873d856a7dbfdc645a3b9dd4c471309c9e3ae63e8e0c191819d3cbf18044343585a364c8c8241fd8647650649ab00af45c074cb904797c822bbfa0e638389ef3354efb874346e33a0fbbce69e771d6a0f9ce1ab3060e0ef626d31d5cd73e9c29e501e3f4a1a92964c8741219273239594001060c10ce0a83434fe5a9662b3c99c9923e7e938a37683ca0c4174a627882ce5698528f60b1e0e54a7d9cc93cf0f4e34c26458a2efa773187fd92355c48d6f0d87de90e78b9aa112fdd8b36e0100836e4e54cf6e4a50779f01207d9c7742f1775c6b9c884e9c365998b5a968f1421f96897b9a873d1e7328f307d34f71c201d8fb1d8b4e331a6a93cc676c022a41eaa5cd431ec38ae03e68041907c7499f3201bd080ad57c7c938f7064570ae6e3dc6b81ca47a8c859df41af51418fb3ce92d841121987c1765942828ad1ed6438831eb12e8587521198b2e2d6534a5f683d2fcc0cad11522af7d9c5d99724357e6ca132b4f6f63888438c1e8f36b1b42570ff6b09bc0bdcd2544affd5c09dccf0936ccca9197728884e99e9523da255032483229ad14b4a8b4aab47c9860602d1f5cb115040ca669b321ae5005c05a3f5c15ebe32c882bbf7d9c05c1c686208c04f105568170faea415daa1d470831d6ee1d7311528f5cd45f8f23cd6f2b02334ba01581e99afb98b908c9c7e6d287746ce6a2163a267dcb472e80109b3ea463d22f951425342308e4531dc9472e426a45a03dba8ff6988b90ac17b5fb68bfb9a8b3e7f6d0bf1ecd262ac46c082933218068595982e1ca109736abe20311576b0a6d01f17d9c5599a28a172a653ef4e28c4a98bf1f6754bce08f332a4b135081d34f975deba4b1521a29a534c61969949da49e94f5c7bc3da33d4e39371a656cd59794522a3f4e8ece09b62a8d94464a298db1c65a639d37b2cc593acdb1d321ec7926c618638c31c618e5129d37259ba72ebb83d841d84e443fb41e12ddd79c883e77a3df7ccf094a7be7b5dc6dbbe5d60e2aa9a451a737d89a9552cd6d4b6b6dd55bb6d24965ed1f96724b6d871ea2fc73ee71d66a9ad5344db31a8eead4a5d756d334afbfd3913b8c9c312ff52a67bf90f3212ab7ed09de5cfa50276fa8a2944a09d257f17c284f0357a90ea742a32b32d99f30936432d96b19c84cf6d489b82ef2d331d9c83e2ac99e66183d637a7faa9e31bd4502dc71cdd39d28634619b35502ce69bf2a72c0f974cd3510cbd754d91d5c8b079e9f6e6394a1b2e0fc1d158c8e53713e7d07cb2ae7aa5673b68882e1f5d66d759cb736ce5b95b3cd511dda0f537e18f2fdf130ba7244f62718614992dd9855644f93644ff38fc946f65c46793d637a8b04b869951c8f82f175a66aa3d3e3367bcfa963abe18b31de308731eef0873d8cf2810a2bf0e1953152f452ca7194e39e729b5bedb3d128c09c47f99ad25a6bbf1d9edb7c673d7cf99517250d6a290539ef5c761e3bf08e0073435ddee139a5a07c8aad73976a92730ab6bad6d6aad75b7d29edb7e08fa2a7d4abee7137f28d18e63befbc8b9f0e2e87ad6921e774e6c390eff2c68116149a1944d2cd39bbce2d1d791add96437a48f2d365f509b6aad08c9f0d4a370f43eb726b69ed2ddb15fc51f472f2a0ff63ca2c6768396939c1a194721ee1604b09962ea7d704d0e914bc73003116b5514f231d6439a8f988a36a0050992e4adc1e673984f9d093d1457fc5b9c40c87244f7ce825c1e1fd399f50a3faa9d1236888f2d5a6a8b76ccb4ef71c7eface95dff18fcbeb388f4f97461e0c3b6c952a07293f5d878624489c6a7755e521cedf0f07b6a1a3e1fcd5008f069efb76e8388f735fa700530f3f97383eff3e17924252fb76ecf8e79cd5c0211c9fde21c681bdead8d0c9e1e6d527e7a857e168e03730c409c1a9e0600227a610620b9398f6e9b8afb9edb494a7c070fbb03ace0e186ea1959f03b60fa977e1868303ef79b83dc781e77248bd52c72e34bf1c6e5f9d0ecda1ea1cf80e0cab8d8aa4ca6bdeca61caab6b51de733c7bcf2d922faf69fe79b70352a7200cffc0211851c686e316d4e80dead8b79473e0055b3b52cee329e7f1ae7ed4c6cae990f5a1947fd7b92863f3cea9cb19d621ead1736c6eadf20da347794bc78ea77cc7539e722159bdcb721e70c77940eb1ef5185e419b873caf3abe5557b9d0eca4c7037a2c1c468ff21662b80b3116a063314018e06ac873cf3b9c0c6bedf03ce5ca43de971b60844585a72ebf0618d5cf01465870d0a20fb2390555f8cde8e7e692729d13d9dfbcdb3c27b2ff43fb1865a4bc203f34f8cd63a7c25f2e6f60f5442ba3bf39ac6eaf578166f780b78fb31bce7cee95c42f9881e04bf71810cc3ece663853e3e36c86291fb49af2d289972d1ab00c38ce66c8414886ba8297ee3325b1d0eb160db83df98a1987ee062f3d1f673754b9610437d8e0dae28729e8e32c0908546f3e2082054507890d2ea0d87867c6a0ba08a1c383a7c3ac06212c2c5a1f673474e91af0eae38c862aac9608e28a07c68e4a2727068a4a173d7aaaa8a2d1c5b7d1c58fae0ee76c8d00b7cfa9f428d82fc627787a9cf49ffe87f628e47ca96e7e28d86f20ddf42878df405af63f40f87699ac3f1d58871473ab47d7c720e5511f6730287d27a9172f537aa1b17a79493b7644a6fa54b48918aec418d47ccf899a99ced0750d180748beaa4826138621f4a986b15db4a53b65cb81fbc090ce9bd4784c9ce9afc78b7ca196a892803b0790aa5d708b319224826d03beb8aae0a59b9731677ba1eb12641824c0991599159915a1d2b32251be9d02b3221389599121b2e7ac20965db3377d3abd47beac7a344d53b1cce055cf08da0532d01df46b6e82a4d1af39510adaaa6552ba5884e3cc03b38f33225ede001f67449a7cad9652961678864493b6c7a202f7f0214277d05f5f7a25c2e4b11c8281f2b86b8554a0abaca65a2b8b0b4c9f281afa24eba41ef2d44e928cec24324e4e4f5d745daf935cadd1c3d6c3d5c79eb71eba97c3d7c79fb739b4915a6b81647b740c0ee9d359c3933ed4fd69f51c87748f06bde52c0941bf658aa66754afb602bda2bd7773d7fd31e5d4bc355bdd25a5a4b4c768eb7a249b1199bd5045d0133d13291afa449f96b88ee372bc0273d92506872e1feaafb9c2f8a7243d373f901f48a72e49a373eba469ad084c4fb904a4a3847c2e443a2a1b3d078698861d726eaf77d273449493d44c175d5d177639747de77feb4579ad7e6bcaabcebd5e0efd596470f8f3d537ff01aa395edd034903f47440cf5328b03f1b5fbe60d8f9f4ebe5b073eb1d5f530a3ab4134b8c844081c4e9ca13332ea47860650a256e7ee022e68858124bb0751225a544c4952763aeb8d0c502d4103173258a93a72f623324d2bcb54d7850b36486364b36d0c14c2b895df412b108201dfa2936f1192c2d65b065498c31c61863c718638c31c68e1e9b59bae80a7a29251baa6977ce39e7d47258a98d41038ef2d543a64fe8c10819288a1c50972e820975f32e7ef7f66743d35a36412ddb4ab938f3f1f4edd369f49034666e27f9aa3674d115cae8316cc05d721c0307808771e6018ecb7b7c6ee033fb8c4a2d87f5f080c31fe73807573ebda7e498357c5e3e3d855943001e80cd3bca0bc68e14f7d0c34ed29d6ff851d0ac0f782569c4f0e95d0c306c5957c3eed29384afe770408fd99a5b8d8258152387351369af65ebad784021114c48a148a69383037652cfe4ab3d0576939a66d36ec0d5f4697f81020003008e000017d84ca64ffb066057993eed19ec2ed3a71d041dd420030c7a5a5f9e7e9c5c4d3f73c80b481ab6c8124764f1f1a377d676b7962d0d787396f778d85d5a3e3d9fde6a30f069bd9dfacc4fcf61330930eb3d24c0e1cf0f5010ac9ffc03fb8c2c85a23e8a32da37b093c8573b1b37f2d58e01d803f6908e524a29255108f41a510af2d583846587405e4a6cc4235348c4324514c8c00aba3b6b1c216961c2bc0f59c387cc316b7ca9558fc3844678751405bea64fa7c00b05e516953f7025344294d12e4115a65127a5134d31ae803eba099183e8e5591ee2181ebe1e46811e9286e73d2d8fde7de0d534d890e6a82f7f3dccf128179238393ad7793cce1a19f8caa3b49e01880118a50f4f0eef5f1508347bfebafeca97a7d10f0c51d9cb3d2dd03b201618c37ba468d1e9d96499011e699fa034768931c618a98d31c618638cd50ac94a3523dbb349675db3b3d65aab47a7aef35a35ef3901e63c8c6c5e7aefe558fdba06aa9aa60c43b5eb4a80fd10f539bdd36061500d1cb7d6facaadbf38a7d8edbdfe79e00a74c9d7bd3ec2775efdce5ff2753dbb7c5d4f5dd8dfac552ddf39c6738eab9e76b5cd7b4a804320a020980758bebacea54afa742ebd73afba24d572a5667ba6e0f0b64cf6b4ae7a4cb0dadcdc0d087d159b14969ac820fb7a71f8a0a0c9234b74ed463cf9389b2d7d98fae8411f67b3183e7e3aecff08001692d11541e800808d3e7a043bd706b47a987aad194b6fd9ace5e8ad2db04b2940c74748b47aa652d2ac019ebe806bebb5aa55bcde75d5bd4e2dad1960cd8f90aa758f01835a6badf255dde5abe505eef9a956ce1e0c54a4bbd1df6a69da55c997e65773aa697305a4fffacd50b6497366e123a4eadb56ebddaaf55a6fbd5a1ef2e9421703c911474078493dfecc8829d265b39270f853bd55f38ffee940faa76728edd23db64b26a4ecaed34ae9b302f9a7acd4259e30ac5c3c3146183ee28d3e32ef6002a8eecd3af808a9662a5f9e44c0f4e9ad2eb0bcd2dd8b3117fa871c177db82863fec8d7f41e1b70f8c3fdf41fa0209807393f7437fa71f0f49d0ee348bb143e4292d33f90dd32a3707702ba0f47da59abb21eaec0561b1c7a6fe50a483f7597544e0f573f429ab6a514d2f524c11cd6e96ef46ff8e2486b572bbf1bf2ad7b2b16305df5741604d26fdd7a43d15c48b6868f90a66bdedf2572106950ebf5dd4d67f111524b0448a7a181ad797dc0748d5a3a35ed7694a88ef1e2e888c29b0df9fe1e59fb8fa4618bb8aa7b4ee84e006e8f33d9775be9e8c4d1a3ed6647c83ece8c7822c0c799114adfe3f2d5f202873df4f5d32fbd6b4f6628d6291867464c91f808a957e81a1f21450a1875ab05d86ba9c1144b1a3b68d85f33ee978d43be91ed6eea36d0611a524aa9aaadcac395d6ef7c5dae69ad69adb11647c59e0455f2357178df79d65ab9e81617764a9fd28a2e5240a670b863baf5f9e9a0b54a3cb73cb59c1a882096eed42af6542b78418911284b20f5d0c5e8861b96bea8418812279058a3c5d3039da969b2983195a1423aaa5d3be5183bdbc28527a7e860882d52d005095e70c6cd6ad544572b125f9954f0d53d2e57537d9c315159e1b0e5889625351cb1210c0b2358e30505b11086b74e9966780b80b75a08408722c6304184082ab868c1c4c2162e98c065bebdeb26b32d5e3e3aeae36ccbd2e72d533ee7e36c0b938f468eb0662b9db2051c674c4f4fbfc0c07d4af3edb1fd26e04a962225284325298a8ac6e88618968c3cf1800a982c510205539295a52c5e10822474a0e2041556903ce9a25da1a5861cec0666056ab4bcf06e96ce7ccf96a4f8bcccefe36c8969a9ca52940fbdd9d207e4d2d117df3da3894b61dfdd65c6afbbcc1a940997431810cab51cbe6a77b1395c751995e3cb670d792494476040afd75ce5cce4a7514cce2f43ed2dfbf861bb94cd22a4ce5dba4bcf22072c59cbbaa865b149a4bdb5d25b96876cc8fc0305ed650e8d5ef8c731166335d768596cb6f9d65e3aabcd4bcf91454d7c451a39b274115ff17bb6c1111cdb7cfc30aae0e715476db8bca1a18b196631232b3e60d1e5cb0e3c286125e601952b684ea0a689a712c48c4600c5055046c0464d165ac4e2122f2051811769940859226684030b2c90a108306dbe2cd180082e7ec0c20217bcc02236a178f2c1890c38b029a24d6cce8b822eca2f5fbec469670f5e514a29a594aef0cfebcb972c4e78eac0020c6857d36eb804125a685962a20a2a26e046091130d143134e589005062bb228a164055e8a9839815981cac31f675986c85285367d499f7665e9e143579559961acc6429c12c4b088aa8428416231a9e90a2c9104c54966698159146832a8c9a28d1821400a1054c0ade8029e24b11557031c28817238c286144886ff740a0dea42d2764ed300c111af01268095149031e10d8ce2a899029c530232205415e4b0ba637e7e38c88274f3fce8838f2124a17e5527777b79c44fd59b0283145aa4d2c5386c84200274f242961e1e48627b170f53325d95b3bc505b840a22407304a0ca1a6a524808f332c60de7e9c6169024b2bbdf4b8fa6e7241384f79070641f2c1e5387d344f79100936e7d47d704ea573be651f9ecf5c84ea104b1ec7c1cee35e84e403864bd73af7d1de753e569eca45295fe51ed347eb5c04347d34c7719e8c938b84a68fe65d54e4d347731813f41c057ed439f741372fc24e7d0ba120a8d4ed55753d0b19aa91000000f314000020100a07042291482c18a9723cfc14800b89a4406a541749b3208761140441c418638c2106100010318484c6441d0a216325327ee9f33406513c96560c0694fe45f8176ff7088460721d9fe9e0fbca741c622deb6a516734f2c802967f4866a508a5346ecb58a9a3ac7ab447878c8c4e3bd6a2341cf532c7bdc0a1a796bbc958c14124bdb4e92303bd4682d84084112f69a7bca9d7c23c7ba27bd49c8883a36a1de2d21f47907c88e2c26de3082af49e9eb442c32800736d3b80318363aaf1bb92a0f036db287950a86ea7b66352d078f24192a06038f0930de742ecc62cf7fa0830fde3e08c126d3827ff38bb42c70264defc1018613eb8cc76aa6d91ca4cf105309504cb171275a6436ec1c82dbf82d21888ac988f0733b944e96923f34a335625b7695f884e7f3b04e65ce9850c6a4de137c9ab0945f0c28e92b22c5aad1990b614a317e58dea99b4803a5e951ff2c3275a5ab996e751c9fa34764a1ff1f505afc0311a9ae842cd8d0872d9185b7667c7caab5e397da022ca0da2e77d4fa9a4086b2e11a6485ba3b544f88f2b843f1048e37e52d61e5fae127cd3d76eb785ecc027a437338cb3ffb78402956d4044a79377d0f2e34331ae9347c9eba3266d94c828d066574e5047d08687504caf2b51be852795030a9cc16f98f334e695500c3bdac3eaaba782a7e3aa3f64201a7719febe83204afc561e87c9823c62a8a9772f09b3f9e6625e4d8191eebc93f2e35f1ea3adace2fad187681f1789bf83b84a4136fef7cd5670394ffbb202e3f77638b8b0fe60567ad69518e3d167d91daab70708b63330d37406768c4de89282b4558704bdabac3e24318467ed83c52860d94ac1c5b7ac72c0b15bc9472361613d58627d0a80a6dd02baf4355c55acbd1fed3286f58e6f6afa47e045d60d52a0088e90cfb3b0f82ac84d85ec22dd3e603dc8103123f5087cb82686e09f42479a3216056b804f52b01a5b98f31ec82cc07f8f019bb8c09b710f6057ec0a9b2d80e5c17f4f9a1e157e885b4878f14c251975e11d40690fedf32c1e7552c0c1929f73ca3ad12c622095fc1751942448b70d7857db2dd327795daa166fb24c6a3ca36cf5e4edc6a535e31e6acbc45e2bc7d50388ea5d2d0c97548dade1e7f21edbc4dbd9f3ace1a6424f35b03439110c327cc9a4a790aa466ef1c71846a30f70850ed42b0b3469435d671b623811b6b2361ba30a4dff9d107fe0294392ed66df0901debff147213bdf7d01becfa538786d45287c91683ec5f2c5283a8c8f00ff38adc835908472e1b3dba7973e295d1ed9644bf859a95625508987106ff00f955a78d0d440fc340bd594d2752033a4cbd20a78ceac60db278e0c3da0a2cdc79d6a918b963cd42e3dd8135f9a81b659ff3fc55a4f7f2ab34bf6ca32b14333199f0577bd1103e2d117c8a5219aaf8adaf8a2e69e18e1849816a02273dd2e28f291434b3bbbb4d44a0b37c78696c64b8891557b291540ac7cc2c7fe5d3f3ead3850b1bd3fbc8fda64ae9f2e614dab0e40a2d2b4b46139370ff61a3f141a0b9be084da5be535ad4dc1f84bcd8c479023d816f0ff4779ab4e36545fbacb8f848490d807fc4671b0669018b8237d1f90425c7a362471064806d756bc685f68f4676837c5c2a38818ab591c960054193b2235501ba31a21e421cf0831ef025c6acaac5a2e4cc9bf1925f5582706020dedcf0869a803451618593f6d626a34bac85e44308f3c0f74089f03f0eb80fb993d8db91cab94a5b4e188a886a04001f44d5525dc5319d7309a704f13851787632e55183fdc2fe8dbc8f3ad4af80e2a7bb7f6ae37ba81cd160e0669692fb28d04e27d6d242c937d1de10bb01ab7114ccbab252b3bc0246dc8acb637a7296c987280a94b77ec004cedade1cdd5bd990583a6cde3d64d7073690dcacd4ecbe340d726967e99e987347a3b6e06ec29cf38e13fe7987e88ab35214efe0416c2cbcc3e1dec71bf0ada07cbdeee8c44a5d8a91328b76c51527ac5dd23685a0bb66532907339ede2bfb4cb1ecca09a7886213870f645f0be8a44bd83a4b4c1703e87cd64f0b0e427661bb1248647cf1adab72b45abb7c58c73c760ac9928e76ce7a3f6749f1dcf64eb82ef3fd40c8c0fdbc5996ef069a64c1e7bc3b0e29b0cc6b3954888332f25d1b18579a787fbe06688635e4c5ac16590daa484cee0f1d995b58cbb277ca2d6190184c2a963f995b1f5addd046a483543771363d0d46d005097363164bc0802f2ed7ad4b4409077aa14474f531dd66202be6955e13e3920b886f16cd769964b36a5aa6032bef948be391c9b3bc8357947115955c57891ee9700ec1775e4fe13efcc12ba2f9bc7e04b8a497ffe64635d532c5766925e75dad9e194d01733b66032fad94aa3b3b8bc14511e4dd0ea5488009073529b3dae281b979ca6538e6b14c7e0940ba09d307b00f3b573802395dd3785d8aabfc64dae5135a20c70011015bad31699171aeeb0298d31ee2b0ae88e75b4b953200151582da524496853c676e5f9a125ae6fa14dd08d0d45988391832cc0c2c9ecf7d95b5d5b5faa386593a30337e2eab50046813a872949d9046763931bf576335db84993cd26589eb39f3bf75cf6d68d4873291743289bb00ca6810674ea08944dfffdf782fb54f50d137b9f3ee83fd7e792d0d5a90e45b85e3ed924401cf133186df0d73844196cd2357a1613c29673e360c851f25beb8352368dc5303472f8ac6346af0265d3e7974ddcd00c38b675cd2fc0d34db5bf747c85151811266e2c0e5fd9a3c9575b08784734d509f7496794ed2b13de3d9e4cf605dd630fa071f6a0419f1c39ea95d8c806064dce4de1d13a9e456450ead79217de672513ea18c09260de9c4cc26a60579d48cefca3b9bd49af2736ca7628e2af3b2506d28082e25302241b920625f63f24cdc6eaef92b8826024ebc4b7099933b9e565360f6eb310f5b58d5044010c3bc5338eb69d8b154a5f998511578876b312b64ed1ec34607de3e43dd43871d1befa5633b11998153763edb56623b6864dcd9ade4954abc41e7639b46c04350ecc877d78c5398c65cb7a78401872744a277f4e30891d846dd49b0586ea49eee218fb488081d7e6a15481b98bf105926d6d204b7cd550e647f323b2afac1af5273fdc96b35f1341b9c73ebcadab441904533e68627d8fd9538ff9df9d39601d139bde3015e905618ebc44b2bdfe598f2db835d7f22b72ec0a49f0aa00de9da947eae32deb5c294389423c51c9e610fdd951dbb7b0e99385ab476df0dc1baa94d581661bc2637544d18207338225214d3e6508d3a275a5dcfc323f19ee8ff49304908dc6d16c10d0feb404ac0278f35a9b77be70d72f4a4ef8bd1e327cd277e5af522f30195c8c39e249653fdb699a34f07232845656150ec14c218c37d46c776d3bfa968c0f9f17d0530ec208759c33fbf67cc8fccf203d991b7993f20d0e160e1b9533c3023c5cf219e341bf0b70aa7e9a05148f1a8a11232aeb591c3f8b0cec00b24868a42843cb80a97a8ff82bbdc592bed88bf53efe135dbcf36b278980f5ec5b2f50f8f098d73f7cc996500f9da954f5e8f3caf2e8bb30398de96bfec0a09581c889cfa51c9148ed786768b388edd8af76e451ed99f1bd56c2ab3a7402bebf03899a810b12b74578e8c803659c94944920c3d776e815f17268325e24cc629883874a3128dbf308158556c8a57286731af08df310e68b8492d74c8d5130945d8723cb92daecc629b5431716d0544179cd50242b0e4c2b5e74494c7dad6603a7b78f3158ff2d81396302b540269f5c50368e7e00425352951f2059c70ae3d1c8dceecaed78ab0bb9f50da0b53501683ead824b5dc9075d032878377e5e1dd4939c3ae0052736a52ecb97ffe9444fdbd783d3bd2b1625f93111cb23cc41ae31734560b56672a8333ab209fc51464ed3b823238ef71024269444419081a58c48601af35a356d7cc86782112b7b81ce616dfdc3df055d35e505804be49b744e0d758382e0141bae0a82328846606e5a3c6376ba88e3604cc0cadd5d6b7ebc39fd6598429fc36bae7300ccb6f3b8a0ce216e981ee48bb10fd2bc068b4c985d3a7e8412751b66e2725f0273867c7404f5e10ec55260122c5bb61d58755e2890d5b9cd2cda814c638f5d461281640b33d9e34de8727cfa01237bfd93456b1b9b0cd481adfb7c70d90fa6cd50cc37997f02768310d79322eeb9f622f5404f7010060857350bb31d9ba22ead984b74210cea4d9eb3ee55d32654ccc60e981c1b4a89997fd808c1a7a56a55b32889cde09d3b77ec6d98f33bb5757a843dc2e16e387e2e38e40767b2397e3ba2f52ef4a59c54f1004bdd079dd0e0e55e284568a089553369e4975633d06500f167809384c013bae1a0d0d83fd54e261ebec1e7d7f9c3770e4c314daaebf87aa8cfc892f29da24be0de7bb280096080d85359c0917f8f0e70aafac9297dc9f037b19e1a144763c0567a299ce7c5a6033c7f9a1473663a881b7c33953191d4612a281af65b2f17dd2f562c8554e7d756cc7bacd262d52e4e71a3b654e517b8348bc4722d80dd2f0721870e15dd58a32941c026b054cf4ee1b1bea65a73f5033ecae457f43d4647a551cdcc76a5c7d6099bfb9972348bcfbb10953b7f4c665fea52468c224711a02bcbc95b4f0746dcb51cc9643641aac77a759fe649375126f0d3e1cd8a1e367de46ba13b22c89e35d89aa3e7302053ecc787ea3e0620c9903912874cc6d37abfc1ab91c3a803936b1749609d210380083c8274075229f25784a2d31f8d19b06391f1bca71547aafbb7d4f092816cba37983851dbc53951ead86b3f37ebbc9d714193c1b42137b83779f5c4e333b489bdd6fbfc7a12b661a49c19d64f8e67981a8c3f0db15db68dec83c250a96060fe3c92871485dc9b1d487139f0465dabf687c73e601860e998092a4a85d1980d6eb8fbd07ca006e4208240bb2b0fc1de47f765bb7643152319d8e7fc4636f2d853c419cad80a8845d5597e07877f3a0175c5517926d16732148645d2da01a9ac3f541212513d98d5fc43aad86d760c15c2ee9efa43458b9e00602c40ccc869da85181ed873af9f3665a6c8675bd77d49304e055c66af6a5038216a1749724f6467736e8948140700fbde7c10736fa45bf069036a3a5f57f4ba4810c672bc37733b9aacd272333e3662fbc8659e183fc6aa7b16a77e1960c58034312ccbe1b61df9764f4ec378e49db7710c77b35b3a94a1265d0738f98fb7100e3b3617b3a231780266f6885cf2013f38260f0bab88ca4902f2ac91c907d5baccea71247f5720e4e5f06a7298703d106f637af1137e2e62b84910c017f12663263c020fbcc8abda883419c6cd394a7b65459492587238f19e0243cc53b3945153a782b330756beeda44d720a0776c7157b558126eedb044520705bf58ee81046527ffa603ee70b98f3bbef507c4088d8a49c939b09de613cc4a8f04bb01e2a4be23e70b671e464da510d1fa16440b40b78dea8b1f2b56b4a22e5a9152d15b6506df07e04f0c96310560d85675a282c27aa9619ded6c557f8010911fd687833bb0362d68773a9ade6c3e8098061d3edb84b583826ad307263e8253fd72679d66ebe52a57482a16941abc096841849c8428ba696d83592415379512db20861931a0078258513b89d2bf3d08bb7761f1d2961cd48c4c41a3a1a457a00f165b2349ce44d1c9e3ad49082f89d251dbf26cef7ab9caf9f7a120ec67a38de93c4cdc5e6c1105312ccf2b17092cefeee220cc2f44fb808b821e829b7c293472b7568c082f8373be16e09e3aabffb2eec3e03736679b129cc05ee64bcc894b9916644807917c799195db2fc93b35921630dcf278b1aca015e4763dd372e0c3b34434a84a9f4ccab5743f4df5905d10c31c11c265f7d301644dfcbd176686c9a941596bda5ccf06f4a68b157eb69dcf05d112325d4f9fe6acbf818b9b178ffd5a5f04179bc42bceb2f60a2e2e6381832a3c25661b44730eeab9becd3613c2f98a85a4ef1f0e0d5d0a73d3cdab8f762aeec927c8fd75d76c1cf144ea3921b9f2b909299a5f44b60af36caf5cf538e6b894129039aa390ec9ea3ce134c162598102d5c719d114aa7450c8d3e8537522c74791097d51057796d5e88be4f337f2df56e3f76075e0e2805560fa236f703a3ec4a29bb39bc1f7995fd3fc69043d4a2c5c96b2d34a46ca45118739fca7223bca879c5781978a48b5d804fdccc4b4ada8a0ff80ec30baf95fe3f0e89554717aae7f207a007365f4aaa2a8ebc19c10e9453195d06b69ebb5c04ee1788d9376e2bbadf9842bd02fae4b2e09331399776315dcd0e9c134f75661985ab19be0d45b630e223537a257b2d0faa9db9b520f9f6bc00fe415a7b51b3327b6c7bc267d785ac3712bac6188125505b25daf9c7c9b8e606d1222404711faa262781c506f4337518792a30d9edf6dc16fae88771f66a536157db50f634018c25007421799ef466d5cc1f4104418edca14494b05f28ce9d28b0dfb7e73bd0b324e8d26439c519a7f718c99dd1a32c843803e52acc3dfab89f9d129271a4aaa9e9bd62136f44aa4e50b4265944e79f988d22a55cd53e1fc6278be27a0a75f0157d388629e24843c6bc669845aaaa76cf3dce79d158a32ba61a0429e3e548e98bbe3aa1808dc67c467f87b039567d972f107d7ca7f0e962ad41836dcbf99f91a5fb93cab219c16bbb5ff8a66461c5ad5128aa443954aef1abe61a439f9f0a574772c3d76f90652ea63bdcb7fb252cb1daf8b555654fc89884c6d8520d47aa68d334a6eefc3807bd9f61694759d50bf6f8b63ca28f211aa15fd7cf5535893ff6001e58fae8f6201f05e4156c41e39e37282fb9d18cdc881246c05d4cc78fc1ae2320ee9e018664e51dda7d599f9454aa7f5be75c500e7d42fa003dcc0d797212b1f68e59649e68207e4986bb1fda7838a1ab06a7573e48f7f485952b6ab551826ec0ebe6b3e3a20d3f20cc289b2f308779ecd6133134a22768c1cb93e39660a843f3917b40557439bb02c827dd7e603a04e74ee2582917a44fd334cbcaaad4a0f4a18e292aef43fb23f3ebb5844b674ca022fdd69d0985111663ed85bb0dfdc5c098ec38d249c959552c778a6d3ffcaf37f3cc9dfb3916694097afddf7c856a1b6b6df7c43b985ef5f6fa0419f42a56c334a5395ae4b3123b322fe714180d692a371d0a7ade5d1351b517ab2bf798fb0daf0c16ecaf3ec1f2dd9bad68d8a0a741030e0dff792918dd6344dfcd47acd6bc238d65deb019625188942526a6fc5111d52cd2f765be3c0617766ad8a07fc5d4523223758172de104d97b34aaaf1e4cdb8c745b8b4aeb08299884754bc0b540711bec7d5addbc411eec0f5c4a2413987eda85e59934447da81041f153b2260e70935877f88b71ff0749d3d11413b33031cbea14b2394fa22f666e31692cb1fcd2426889575e2f109e3f947623cd069e654cf657792787ee0c9271357d937f77eb88a6a82d7e4987fc36f5c745b7e211308c4c9861c7ea4a19597aff269902ab87d5e625ad8403ede21dffe5462cb9ac046a35ae375e3e1920dfe76c1c33debeab653c29475b907ab99e1bb014a148668ed1d242554927271b8706b82c12b2b46c9ae23b2c1fe12316c11c1f5289919b1df0bf07f3900983c11500b04f042a3fcb188377cdc8a30e59f1caed50b0523fd187b57bf3b4c7a9751ef450626b0e4cb9ac6fe3c9621a1d87184c7820182bdaf4bd3b747124e4c27badd05d88902a192344bb73a0fd0745cb8a92af323e17db3f866f409c6f3d11a80101a8458ab6e153eaa21fc4838e2d210fcd341ff767d76f54aefaaf8f7855e4092d05358b76458b8c5e0abf4da2ddd1b9673e82d6feede4a82d0f7be4809f1e5c76961a1b372d2bd0e1b7ed9c89119465268744d13bc9509add710742512e4e9f9c3cee82350ecc1d1b1c948ce69623e39f473f55f3f7b29d744867a1039244da2767fb76eb90bd146d60a3e23a8561241386e4ea6d5ef72368b27e244e896fe5a556a7545c9fd840f4974b1a2d374f9e39dac067de219a3fe50a100c6692fc0554606c86d068dcf271fbbfffff8d1b6e35db7a4d49cc7a9475f7050204e903208f976127a5b4c443778d4741dd4946e80a4cd7d73261b1fd17964b48073d5684299a08ae720b80b28ff897a49f47bfebcefcefbd6b316f077fe1a56bc91b4bcefefb5c98084968cb57fc4c2478984537c417f191ede3353d9967730d16b43a8d4ae61f30cceda6817c7f19374bcc7d42e414b2f9b68a500123ae64ddb1335e58ceb6724ab27a8a8d74ad50d2299726dff31141c44da89d030ba06bc42072de2aa6ef59a4e6884acca4e2985c555c906000ea23b2924aac57b6de667485739520585aaa770fbcfeb43c298ac21ccc3e9bb28b54d7e25be879e0759e400c81a7ad171a2a851538d73937fee2fb5fde1391a2080c7cf7f4ca2b9281a7242a620a81296bc7301b46965ef23867537250da638bfdb282d1e837cefe76fd45d892dd37a1059f352baf4ce1de1049555a64e46e9917455219abd0e4c3b2ce1dd2b58cf9f88a0129ff0c40fae33d1eba61df6d1680f2cd461851ba829142064ed8e43afbc99e9a149024c3b590adc6aabeb2f2510addf3879cd864907fe8a6a99e19ce83653d0d9dbbe955160d58c8d2152939cdbfc7f088fd1c53724188b2699523b15373ce4d4716314ea7ec3e7495fb1d1af0e2f205519e43251e337350068f40663c35f5d2dda7b703cdab0cc5377f6b1bd79f2c0273b2b239baab3a55d3c180d7e014f5d755a8146df1b74046690d4b596990308b934743f3fa0e86438b11566b5c69f0ad02f3b2fab1196518be30a4e2243f228fbc09bfb03308d5c63615f1db8c51e97c496df9913da1608eaba62323c61aef4db34e8451c4df81a022cf5f78999c0359d2e33e4744991c58b44b5c7f440321ebe67ca6efa6ed091eed2cbed2a616f0d16801ee2eec21f49d871705da2d8404bad8b9605f19ea295aa53ac8ec025a48386d593ec8646136f7bd2836907e96d228fa06012f001607448307a692e554bb4b1fb09f332ae8d07836b959fe1ea37c880790b2a9861a62a2a3f23cc0f00892f9ce9f6bfe093083d8a13c1afdb6173c658de3ea8fc9e21bfe9b1df68f989a3cee633ddcfc03f5eb2f43dee8c0abf36015229cbb54c3c84178fada7a2774ec2dbcad06161389957ec34b6956cd6f244bbacd39de52756b218014c55a03ad235f06cf31913e89552dd47dba2fd1fca6ea9cec0881fe9243126d4375e286f662ac5b4f4b2ea7a19ba4ed6ba9291eecb2474839ffda6ef5c039351cc78cded883239e97a554444377a1d78b804ee628c53b920a459bbee52cbc69ab6810840287be5a777f158770c7930b0e1dd23caa8cfadaa0e51fc22f564a3aff26e835931725581c914ae5426e2cb75af3a632b7e07d4fd774639a441087f34266885c41b2bf9ff732cbdd35aa824acb31c612ed881397a50e342b8e5da90f7923222771e78f560b50d63a669da3577fa53e965d6dd13147d39b8600bb3d3fa7cefbb0e404975eab2c38c78a70ed388e3653015296392d34b2ce9fcad7f1e014cb64c44288368a746f3143c2483a108e26ce83f84d4d14510f5027baad743f7c466702d069d00abbdc521de94b48630b47643b072294c837c2e69e6ae9c8c4353344a2c74c24ae69d4eef2812e70075a7d4e0c2a6ad18cbfc694d396a4c2b42cb8904925835c586e3770a2491cb7402c7ae31fc3818710e80be9f4d5a5e9846c778a876c766938b254d3127d4c658793ffece073296875e1ef5c98e06cf105444e4f0fa752f239db32b60a47fa0455183a016ccd591e383f8a626ba1685478cf939ef9034a8fb84387984bfaddcff167c9d7ef53a983e42c536b1ce1485acc2e9e7e7fdb1ae0cc9e64123b41290bc22c9198c233c050944fa070da93b541e58d7a3bea4d1b32634298a73d585edcdd45b86db6d0a56fdfd1dc33639820a906a37d2fb2fa1e1815ab8494c6383ca2edcbfbc60b45624260e79a2b8454ce07794551a394c9bcce6c6df3b3859a727d8e04690936229f994c1fbc66f4341c9c9694e0ec0dd0ee6d6223594cf678c4359801a0d28185d75f759248c415f58e6fe612a9b99002f5fa5d775f64b92784230c0de6851448fa0b7ca7caf0dc268edf15886e1b461ab7e8519a58db5e0844e027c47c91216f6bcb77541d523e21f277260c00d0f276f000ea11d9840b570c9e717a699e6d8cf0a28a8acbcc877904a49d8fccad391d2bf495548b2002bfcf1615d54b831eff1bd411c78bf240ad72958ffd063485d67840592af1b5443dbfa6d2a733b5afae6394b6cbcc00d778aff4cb9e51d88174fd7afe6bcc607689bda363ac2380bb745670620adc2076eec5dd835242f515c6a64ad61ac7096a925c3f45489f08b3ba0bf5ee152dfedf8f6163dd844e0f63f9542730ceb6d7e04c877700582d45ccf0c864d822ca740e99cd2abf1a13cf849a6d0cb8dca3c94c11eaed27e911136eba4e9610b9969d91270cbe8f90662f0c770380834f54c04b9ee0bc1bd18015ee5990d631df1879c6f47973f20fe6697effe7adb09630878e551b3a360623dd21307ccacf4ff70c379b6c1be1306aef5cd5ccbae82577dc4715972c05c213f463147938c88d9f3f117238ae9806aeebbcd7c67a271cea01b35541f198a510da262b7363dbdc9a414b8af4e2c4d61949a184a858d2116b8fa3237c11bcdade4bb61a18990b8f20b862546cfcaad372fd27bb5ce53baaff9c75e9a0be632e77eb9c07426602ad38efd6ae9524a6306076bcf1f29676138902864952eda396a3ad7c1063baee6572b2b56597b2bbacae4d360db2405f0a3577d1562e476ecc4052b6f00997a1dd3e86408ef219d40a6154d68c514359e2aa59790a22c2a968b893b1653cdc5904880550e64573a73ac1521d9288fcd6d18cb333c08e769bdd0f4c6ffa2b4719dd6f1973d239fe430fad560113b0283cb2cba80bebb6735837ebf1a511622bebba935bdafc72870f2ea088c1a83241ad6a6a8642b9bb84b1d7dc9d1cdc774fafadeb62187671834c9dc029905139f951d9fd393a49bcd7a031b1f5498798ee520206e1ea56e20fa53c8a17689f84c7bf38750aca2acc358903f8c4dfb321ba6277d21357940c41ef8d4516bba19f5d31d2c1f70082a57cf0fcdc5819886594be4318be7050a1e4a44d21be7c26862bfee4a3b140725e3878922649026945a51168835c83a9bc8550cc5c31485bb8eea3890429a1486147217ab078c0b22552a22cbc8ef035e648d2712762f2ef0f56a73c2e9cf5cea538b96741473a6caf4e08b3e4eb069b62484ddedd873e06bbc91ec1238b9c18acce59f5c3e166c47c98c296f21aacbd601a930cb0a0374c8b26b3b73b5019bdbbb96d403c8662939297c3a9fc958489f980151f275ee7709583f89409aaa8e58c36188d7e520037ea4a49741bfb470458e21c6f8ff9d8674439377df1864f5c44f73d6045a82f3864692ce946f5ef28674b8761af240f42db71362fd8e2ed646ef04b47259c64070cb90ee9ed0694d466ede9dbaa7f98b8ca7765bf4e8fda7df6a74d5fb2d3ea5a3fe35d7bed55ca8d59b3f1a5f98ac55d60647ec47d1ad36d97eb73cd7884bb2c3e7eff8698e961a33ffe919b80991872d08ffa34c7a1b81c45ada63ae9e8e5b7d35dd786684d61a796136589b1e5db45c68b8c72430cd3dc0625cbf896498d3da8e5c701be4b53bbcc775ad4b3efd8086f37d4eb2c2f0189a575033a1b7c7e78624f7d60e37858aa0e7353c0070c68a0d610b65d698843b5041b7811e659397c64577702db3aa2c038d971b55d80c6ce54d42c2143e1edabecc60dfcb045e7ce08b200553a41bfa8417285a636f3d828d4a19420be580662f961471d76589570358fb8fac6186f81b17e58ce6d22d907c09646634ab13364ab9ecdd1a9b8cfc6ad55d14a4bdc9b5caf1b15c19e5e2b801eeffdecbb5e47459a84a32d3f92b89566ce5c1f8ecc6a7a81ffc0baa4048cb585a6451d86990dfdbc270be4658b11ba41e4bd7b9722bc1e5117aa4c92a2c678391bb1271512576a8cc67017fbc923c9acfbba8dd365509e50b777db5ee009598e2cdd0541668c8461e32678c222b0b29f7a9e5b9ddbccb14d8246c8e0d00eda51300cded7282e4d299f7bb9786bbeb2810e545db005e2397c71467df9c5c6d8ff54dadb3454321690f4c61b31c2af606dcf4ab8d8ee24393d189c75409a784796b65be9a999c07bd80beed87ccad37fbed1740671e693c86e02d671461b8b940549c1601d52ea97c0021207347965c44351704c1181535878e3f0ace41e778a64e37bc6925d6863454247661dfd9a105f8d80861cdc007cb49c8155ba2a0afcf3e70f7a90db2990d4f6cda8edac96293726f715478d5935eac048da965f0b9b6c55e6b8b53f434afdba2d7dae2eb6db1d7b6d0ebb6e0355bc241e9dab3b121af55230ed02bf554877c06dc151821d8b657a5fca5c1c04b8c061e820989934dc0fa76ac13a7830bac420abb0e093dd718cf01aadfbf8a322ed7b672626a6c7fc9ee53cb21d459f5220d143813477f81404e1f8c693192bdd76fa6e9151a34b038b60cdf09dd62bafd7128e0a9134a6305f104094218a53a62f1384b5d26b58c52f57856b254f968f0d80c2fd712548e3d16d388bb8eddfbc6187566c59c75dbc327a37b08b037549604de415e9af24f6be62e13c39e7ebc405af0c32522cd58e485a2164e0c408893d43e7c93e7993d3975a898c0f3e618a88f6ae83b98e76e40e42330631f1ba8390de1f4c53a689905778b2ec0398fe9f90cd96070d1362d0d86e0bdc1cd6393d59200fc87c25cc6f4e1e1d6270d600a36cb8362b0d22798858d406a2ba3339e06df3b38a2652bc6dcc16cfc303cf771fd29aaafafa23524e6cf27ef12eb79fe31ed30bf782eb402f445d14636d524c40d76245548accf2cccac2cc9d2ad64b81fb5ec29d23edcfac1dfb2dec12a508a20918332ef71baa6603a630e5185c3355bf5bc3af10ac514105a25699e07204ac04d64f8d9774dbcfd773e8bd8bb5897d81b88c51505f10ac522498c9e0c62e4569c13f123c37ba70decf3b726dcf73c7131d7f8ca15b2a13895fe82215ce3c8187bef031e44014ae4fe5bc42871b14af3ad9b4c32ed87e85c3da199e8f4f5cdf85f8808d11f5b1ad57cb5e6fd97f5833483b945a3cc692fdbaff05a650de2ee176072e24c70f4e2ac9a9952aea19d0a957e0d8dff1a2d39a97aa241bcb7f1fc8f3ec00f410530e2a4c7380d0f5bc890f774085474b41c0626c49313d383c87529cd207e5c178b4f36043de1db62a2788e92c4cecb97b1b663597044695ed152e7a2290ab5954f3884a7f7057d6e20bad818da8e84cc5123d3028d4283199052cd08c3c2651e1a1e6e3f6c8f5858378625481d755a3564a535daa4c207439dce5e6d3e08538d5c170ea8d41bce0fa2d1d0fb60ba7de850a0d894734da3e92699339f03b271010870c6e142c311991b74a03fbe20e45ed101a00391baa65d67208dda0cf74217e298cd2ec1a2bd0f98b2b00106c2f0530d5147f630fa248954f7324b4203c0e21ff1544138d2348eddc117af5ba43bb0b9e420c00de285a6a3dfe72d67c9e5c5b545450a7d9e300bbe3ee46e709ac05013dfe3591cec89663abc6a4f7a55a8a32d15e1f3101a56e2845a465c2a2dbc8615c9549c86ef42a254f2345713c7e0cedd4b2c30c303c3fe30011230778c5b84a126d152985fa9366279da7dd6088234dc563f6c8c0fe777678f9ed0440cadc488ff2927c5359fd07f09028dd003f2c46837f02eac695f418f39ce97b7ef4a9e95a4203432f365ad3e901d6ccd9d3076d20463fa30e8d6b0afd940e37e7bda4d260baf4cd50616fd4de7c3ae8e7b71831aa9c29deb84a05fb8a8977a13dde4ae15a849b7dbe8525d1fccc5e99778379ec1fa4174a0df57005ae0794c569a83d8a8455c813bdb81598993b6d49e5019945ade79789a6ba601116f92bf54c1da17d5a1d0f98e75c0372a136213a43ccd4d3e2276f03651c0b9b894d41440c35488057db491b4014a04dee653de6ec5730285f90a571a428d4e809bbbeb253e1654420ee33082979256f68cff991971ea3e91111ff77c62d107c72b81f8cc273491174f739e0a89ab82bf09b20d07db7c753ef81b947ee2c184fc7465b47288cb135d4038a3507e830ee453ac9a560183ed00a68fb3b1cb99081d5165de1e57a6eff10c73c74a75cb8eff819161200d7ebc557525083d127e0fc0c819c21d779297e855692e3d5e57862474b7e7b7dc628e5249a99abd73968f337e3dc5498d129b7d5f50743cc9911aea572d2ed0cdeb91b24110aae87f373002de91c4156a16d78871c41f7b26a4dac30fe3de46a306352b44dcda1e2d9dbc2239004021ca36532c08ba597ad2da7b26bb5bd21f13a98e9ccb1281006290e8904fc3ed8037f2f99c12b6a1ba5ff109f7daa19a9c6dc21f46e98581c01ecc8e55e29137fefd76c18efeb33c4bf955197cfbf971c81fea30f5450b9094b99aec4c44dc01d72a3c23b38f78f56ea429678c5d46f99dec93df626e90ee3cb9899c1e944a186bebccd721cdb9dd689a6c554ff9c0570e807e7154a3b930ebc4342daffb0516c2f63294a62d8b5f02cda399a1993f8960cf93b93d501c5cda59a3f33c777836b6e72c6cf716892c0006bc67cac9afd914cd53d5ad3b8a55c6a1bbfc4113bd446096fb3d35677f09a70b1994fc42d3f6ecfa94c7495a0007a2e7b6bcf4cfb78945a78accd202e18d0c6de20e53bf45a54205803ec986cc82b40e26f83ac62b411200a92ed323e5fbfa70c148dfb53002c15cb87791fd48031b9af269e837a6867e33a3471b22c831dd61f5f056fb9885ef45a8601f6ffcade969650f07871a1a7102ca9bd4037d6e590d74c06e5081b04a45df78bc2eb43fb894fe82878596e880316435cc61e2c283edb2312f7846eb16cda3e862dd86cda0d20863f5174951acb4f181e61c27b5831cf538a7b6f526622dedd5927b59e1292dafa3dd6fe2bd3323a0c01fb2bbab330cf2ccf5b4ef7159d21af8698b3aa10dd8be460331a51f592831cc06cb0034d42f4f997723d9c0deb98ff8b3b5bcd891985732da9b61f79513a11f3be5bd37cb9873978ea9ce00b7b50b7fe0d2ce91403acc129e508b7f3e5d9b31cbcee1b5645df16abb0d1e7ece55848c3c679cf888dbc55cf282047984f09f775af76f509be30da57173569484baf85a777c4b12998fe2068728a32557d54b7c860a5773d6dc6248d50fd49354342ec7a1591e9b1333c5944a6b0123eeb7008139adea412633fcf7075648c4103d897f96387eab1e3636c25ca6c2e5d4a3b37ee88e6283afa03b83dac13b5c315889627acfa4829ec0f3c83851fddd0b152304d7d265f0d6383946e4cc1875997cdc6876cfdb5a7b1ca9acd6e93f968bcba2b3939c79bbd8d9042796f53582c9c336b27620edeb55214c8eb4c56e98390cd6786460582d8ca80c013fe518f84d243403fc9bd9ec00a2451a4fb66eb5d298f98e2f3ae45b1a9e945ddc763b2390d47eedc003648a452b1dee1294fbf2e0d9fb9b6660a7f97b01176450dc5f72e8d5558ae0d2c47c19f820b76a8af2513f0127a62b4dc662f94845316fb70e665fb78d6a3aa38ebbed6884c1bd71385c9c7fa09908b6928491633957ac6be9384f20112db71ec1e2d846cf7567942899db21be67968b0b896c784b3172e7d98f20255438e434044fc76634d2ecae59a02bbf11417d0c08e9ce46eb14679e639444b7819d65f594606e895976b91a4bb0ff79e5b503c6b39359c617a731c598945787e45be2a4b72cce7192ec497acb30c868f48e427b6a233b0eb9087450ca4656ff068664515d94f52ad619605314d05f232848cdfc4d6483d9287adab09b06cb82ca27b56253ad8f04f3cfb7a66403f387da878a59044ee4f144197cab0cff956c8e732294287a10d6c081297655b29b2a022a4eb7420dca6d07c4b835040e229a1a042af752dbbe923f2dcb4a4c20c05546b4a823e3ec45e333d5ca35c9820e74cde2c90fd6c92e3cc70ff26896051c7bd0c6b0472580f4c9044fc686716e917cbbb942a3bc04ae041544587350157d79b295d49b5f2c2d05adddb7d9acc90f5c4a8f09b408a1abcd401dafce97b29b64ba1bbb446656836955a59c912f99f8e180afa84ee9e3abf6e02c0411fc94204b9caf5a840ef083fcc61c07b1998a4065621901c959ced8d4ece4a13e015abaff3e3b802cdc795468edbbc90678485f89798b8b703626af11e938edd1fdf18c6e96875a3fd0deda8e571410b6aa13a5f693dcd2c71cee514a49223ab95dd5b0d40555c3f9cbfecd777543ad497ce0b5468406c082d54457fd17b02392027a406acaceb8831ff8b6ab509809f99d2c4d6db76e7eb8a225261cb51d80de6417c0624159113f64e2b5de57b6ac9174ceecb279f0450e76a5a24a8ea29f12d2506436c89a14e96e9502d8e99b730e0183d4d5334503b90ee56360d83ccda07f786fea347d9676a000581334da699afe7266910ffa651e2f3d9f02116f26a8b813c8f321773679cf6a538d96038991a23d3cad237a4b6ad4fcd0e8a0ed2435e1c9aa679dc53b138ef70513fd0a75db03c4d26b0d137ed8a13e91a08673ab01293afcc6c80ee946965b83cc53b07d6cd12374d31a15c8505c5bf5cb27cfc9306d6613fe388d0c48833fe0b075d8cc3987f2ce9d05cebf58ea885e73bd40342439f01ecd4052320a40765090c46573c7e6699670d3bd180336f61e153df22a2a4b132b33e8f270066814db8d18fbf599cbe6bbf8e6f9cc092738b8a671dac9b29ae2e6c5588bd39afdf02ba11067721f6b70bf53d4d86ea944ef63c4cdbb3ba040e78cb6e7db01dd366a90441f7e22c6aac3401b3fa3f35ff9f57a70d02f41ec8f11890c5fe80de80017e298074da6a80e638c62edb399d7b39b28decfeca1da4e4ab581bb5a9bd38b032378eb70a548869feae1f7a2abeba9eb53ca4743a8de277457a86854542a094754219cf53530213d886c9894e446c0b8e58fb2c8ea4455739898411201e0c2dc76c666fdb62cfd835021bace20f41f4d17d8f6b6a9a150e7442e5f890ef7492224919ffe1f248baa1d7e1522572d21f613767f667c9a3d8e11f07d3640c98309ef77e9e92fc3b4284d42d7fbdfcfed401a95d8159ed8bb22c59a0532440dfc79f90b1a48bf2c361e5b11092e4ed815625044730de717cde6ad1c16c47de0564bffa473eac5d1be077a78ed9b78e82b600c86f5c1bf2ce73b56c49b6ab2a7d9714d5fe819d18330e8e82d7702654c4fa3cca1dddd5b7ab38670a5cc40938dfe8b39c71e1486e5be944253a2dc2443df743ab6eb1343554b22f184c51c0150e6bf8a6c64396562cde78fd4f7d395302439da877985507294b9e29db02b2f85a230aea1802535c4eaaac5da697bd6777a682658523d08a9303d4fd1d50a547af00ac9c9408d55ba4098bf010141518aa91b09cfee250563768d3edbb9fa973ecf57431a6dc6f6cc2953914aae63c923dd184c6a9da5e9b20082b066d08ccf001cd313ff97ca17ed945fa1f7cbbd933db5573f9a5edcb53c7cb467fba93218f169e7fdb007c14d113cbd37c747b08392cc0a57ccec44835bb2be213f004f621a818beab1e30063936a421cc5132243a040dad106db7bc358482d175395cd6dadf3cdd964487d22893f1a0c120eedd614000c37aaedd5cc61c8243fac40055dfc478ccdc1e0a0d395cbfe4be8ee57fedbd49da6514b62e72d8471e10c03d54e43e92d6fb8c42e3caa3b750c9190388b26bad52a57a28950561e9b2e5e0a5124c679c863baf9c5ce6ec492cc2cb22f26ffadf8135d2c88d873d0cb4bc711e6aa655160a8499372482eb75e84453b0d54ca9e066b4c06d71df2314c655bd770e7d56d63927eb659e1e21a84b88621de16b6455b791894b9359b2ee17dc3276254d603c6a41e1a55990740660c1c25b167ffba7482b77e156f33fb1b46c65b2c975e3492a8b593acd6a997585e64ade1f117a670f038f9450783e20b1747b792482c8b8a3b2c5f2ec80c664104d70024b6f4265eb01750b596e7f7c2092460b24def4a1595073f217cdb607541781c486a96c1d6a586d8a1a4e868b312bbcbab1bf5fcc4d9ded0c0fa7d2f130f37a59254c7fd8f23a9b1bd1f03f581c27896c1b3c0dd5bd3c77bd0cfbeb5e2071a639e0d6c3dbbe506dc176178e52b2ee0068d8e9dbb4170901fc35ac9b91db95120636cd26ace1b0895a5eea8e99dfd15580604015548e38fd6b876ccb88353956a451bc547d00a4c15c05ac63a772eb500ee855bad61b8f7aadbc24a9a005c3cac459fb88de7f03766a02f051a71f8b659b5a44823c4990702fdc227097f458bda2a588b4d3d2c630298e9045c13b6f5ad69b760da983b56d4d9f0dd609191ff670c4eeac98b41e5702684cf4a1b95a3887b5001218656aa3f0121755cbad47189605262b1019ada54bd926d942a9bca502d95775ba145e6e3aa3f7856c4cdb8a04a9497d0715bb338a40a2e2aef509a923154da121576c28e741a16a3bc59fdc53c06ba61725d00a6db691770dc61c378566c8d5feb4f4ef30bf0a51aa23dcb2e9fbea2eeb16673ad266d0fefb68f48d4963943056ae17df4ad71537348d2438f87098a8b7f68ca2bebd4784362794bae1a0807ab30a2d863c11f53c3b3b51ef219740fc54aee56453bce1958fca1fa15c8373282cd88ab08b3f9787ed572a4ecb0c780a87add98d95eb57fbe1906fc4a01f4c1c13571ae53e6f2df7e86d5841dc087dffad1d4466a98ed264ad4ff8366560e1fb729ef909a94db290d53c572dd2d5b4327472e8b5302a426e7eac2afd940fb0aa8d64bcc2f73a25c1391d8091a77caf71dde7dadf4ac80159b24e32f69e626057fd9680c7afaa9c6307f332616f22271744be9f48458b62bb9fa23f37aba0a9b6962e6f7124d91b98654748527bee08da6afa9052feb232ffd144178f524e99782b48a72eaec771e47122c37d80b6230011758aeb636a610b030de7dd05c8b105ce30c70076e6705d55eaa2c5d01e2a80a7320da5d6ed096eca64c7e282c4fc7cc417acbcc608ac7ba829140ab6e7e79545700de4e0c75341f68684545ec9f93e96188ed9195af4981bbeec83196981f7fd420a05054b123fb31d505a50f38b6dc3a22524458ef3be92abd0573fa14f7832a971a109c70e7717ee05e7f8a28920a7c36384fb86372b9390872c72101d273ac4c621819e2792b71ca06828e864bf3b5c450d72078b46edea5160417af276766bb984ddc30976b0023aae342473fafcfc1e2c3d97590d0a1c7986e07c622556146e02f35012afc8bd4c6627bd84c9178ac151c19163019481d94f9d83c561610377b28931ce133913487f151f8b3fc93a6c72969b6c2720b06a02ccd955b2e065952a7f4d9c68dd759ac2acb4de9d6e4a34da4000b89e3a6ce95a66c84ad36460d1d2c79c90436aed9c0e1052d52cb41d5750bd4948d7cd11542e3a4ec6fc04ae185961a977955a1b239e25eba48219f119d8455a521194e7535e2f2c544695abfe5e810cdfaa8660b98c019f8c9f256938e2985c2f5d510ad88ce75718dbb113cf19cb57d6490b9c4cbbc32712e02132a2be40057ae29f4e00cd5eaa9e4aa2ea568966535ed25dd58cafc1c0ec67110f4485f747aaed69f56792114c45a1636ff59ca5e3636fa2aa364be6af0031c6da15bd3dcf5a43f9b10e671aecae0fc5f7959471c166c4f752c383bc046b9fc239c6178252ceb5cf3a3f36378e2da9901b4d3cea13b1f1a33e19f03de72cef7a6383752e730db545527a0219eda03f6ca784b2c31941d216249e3dc70602e3a129acab4c6ca17a842cb230035b072d451c633b2899a0ed2dfe02b97075dd4a2a0f34b014e82e7d55e9c507cf9ac1912d0f14bc2cf3ccd674130942fc8c29820f80c09c9786128c287aab1f83ad3f79263a24562ce3399390e14f6333b00307c60400415e8fd39538d5d6752af734bbf1586ccd09600ad3fd0081e8053b99ca97203fd7eb7163abb169616e730c565d9c1a56c88149e8215e6e4b726f2526891e480831f06645f3ad71288f9d3666cfbdbcecaed1218c362a9d8085a99ce3bc2150c528687e1b47050db0017e75aa19c86023893f712f8450f8ec23a4c7d9b40b0d1e9e018cd747dfbad81324923ecedb2da1efc462fab0712d053b301eb9f6b914744dab71a6dbfd1c49ce6ed09f2d4a593ec5581c3a49f700b349f52a3e7104f24f29b4f0bdbdfee82c4b5380f66fa81130202e6c14628a2b4bfc21cbd7d4c860022dbd54c7210012e3ee9743ad92f4cae7b611ff2deec9a442b3c96a2a0869fd2215343a99bd1af9a413eb150f34f10daf7513a92b16c8b0785e76d492a243478283c414930cc8bc2c3584d9c2306246441147d2d706ab9611bfd89900706999e6b25c2700c469096cabe5c181b0be65e02e71717452b10352333ff3cf2ce79037fdc8c641200027ec0af11389ba0e3a35e761c89ad4259205e7e7ec30c0b2dad090492b531869eed73c14481bfaa91af840757712aa26b39e1b504aee31ed01c0a6d285f121ea8108a601314feca1cf0652342b8d42e462b1a8ad0fb5146f190c9cb909878b87f68776ce95a5fce7c4e8d07d13b8c9d4c57966495397a9c9f96622a73144e1d0ad83387f02173585cc9c137ce59a804f85d8aca9c58caffde53e68c83dc0204106b83943910c38d2873e0cdee042873c09b11770d4e7332a7dbaec99c70e7e284af02bb99fe56535ad7f9ddadc0644eee6aefc7b21de3f1d6dbc45ebd141eab2773e2e33bf308a29ee486e8e5cca12ca067246773191313dd96c6e87045e6203af1fcd5905990f2d5e5d816217302cedcfea30699f33dc717aaea254deb21530fd83d8b12c89c59a94a822ba499431f5c053f3d93894eceb1347d2e41bd2d4735892d220036fe74584ea0ed4edb98d3a03fa3da73d956a6c29249ee82ead66e9da5bc31678e4efc1b692dc5e70f957ecce1925e391289487aebbd7db1e3f6318749a5cc613dabf26d6871ea14c10f4b47026532451969cbad7accc9a755c63f0e1dc3b85c8909f1336d71063ce63cd82f18e7123b46278e0a5366c174cf71dc08640e177307469e59943b18b39535ed19014b9d3107f0bdc097a5a45aec8593fb0c003e39d27ee3145c5e20ba5afc31d4c4b062ceb1c03a06feaf5f127354841d71ee368ed39fc4a95378f8717b07c51c49bc7b825a23e62c8b47e42bc59c32d2630ee9633628a4a53027ab4115ae5583efff823f701b42441080620e1f3139dc27e6f0e800e07ca5a27693c41cd0c7fe10134272eeed0d7236c0fdf9045128c966e1cba49939714025e47e1235af8b39a85e44ae0046c76708f11314146eb79b806917c67b5ba6edd8ccbd799c501daead661b12e60dd289d8de99072686ef53b76a2e8df959ade8e2e4b5b3b6b981b99aecc0e426489fe681f04e4d521d6cea7df27048b45f56b7da9f83020983f27ce0c5c4802bb8a2fb5f3a0bda04701767a9903d9ddfa20abd6f89d917530fcc3e761f03179aee0d15517f3b36882b684cd107c318554123bc2c1853c9e32667c287908472f5d46bef9d7429fee202a98aa05e6f126274e42ef920869a9fd492d6dab199b72279eb7777f2c2b8dc0e34b0bf8fdbb8997defa13a3aff66e2020a0f67e307794e0028e13a1bff1b8ded28777d2468c8f8623bc246579074ff598974ba53e205a4f3dd745d3d414139eb5fdacf37879ba084d5044b50586d548113d9aaef095242cb621b49a61323ff0f057ed19681fc78edbe906d654942fb1a71e97f0d785c6240f46638c6c51bffe9c18fb12acf930d4a7f0eff079eb80e2126b9b013ef38e8d87552eba0116e981eef355e456aece611347ef167a7f097ce5a607dcbd938e19ae63e5815bdb73e396b5294534720ef4a244559097945d35348d9b4c35eb13380728c2619eea407b0cf7284e160ecb26359cf47a763d0a762f034548bbef3cbcd4afc59d8aa5d8631d6656a5172871943c1b69e6ac6f21856dfc485438dc64aab396cd675d29fbc4e875b6aac34c4ef5404b365ba1562213e4879cce46a82e25afd441eb860c215ab967b3d5558141bc92d2b17b061c0320fa39e7b36b63ea6ac4d8fca37a36d8f05cb9c33f09251c069c89625a446e584e4f1fe0660011e74fd41e0451be723f0a4d62f6db5c3c0823c53f0f4e2226411cce7ed21d70246d3431f71027e500765a213fa3a0635d09e90616013d78987a710aa6d90186421f0707488182cb8e381d5481b2a606a1726e25ea9e5d35e9f59bdfe3a371547426d9282391930f5199dde0711fcd0959247caa7e99cc1b4f14d6188c0e8948b487f9f35079241c6d6675de31504c2a0ce46ee632a1585b3ed298c5b683aeb96db1cc0dca68645158e168641284e3e560a3ee215d8c083db4bf24afcc10054adf680a0f226373053074c0e270df43b0eea2908d6f9a0496f0697aebb586bbe10e5a32c836b84bb846776ca9ff5744fe25bb387b62f1d263bacb155e9cb45ab4811cf54617b1f31028fc04c6d56e63d5720073e63c0ff252740c064e1e438dcdd25fbf13daaa751403b4812a7cb7c566a328ad55620fe024fb02d7ddcee7af6335794f9d638866927f689d6d74f824126b4c80969c422b2cb4732e1e88a0f646203ecc78718662edf80e3e16d9d0d9e4c61fae5f4d04fe9bada343e766bc1096278cc76bde57b6a984f0db8230fed89fdd14d70a46cf584825b818ab7c6267829c4c4d18d71d98ee9956ba607d94831d0ed12513778fb299889e932d3b8a5ce1caa066bd76995b396da479eaa3b462f892a7e7846d727f2d050b3b8fd737ad1d48bdbd6737189433393da36b4c4556dae8a7e44e45d68e7eb6d5053ef7be5e10a8123ec37ec650f650f13705031c36f79de7261ebc0d2ba2b00598cf2ded0d4f646d119e37be9ff53579ca9df59be3d1413a0d9613f5908c217b7b427e23a35670d8d150f5250a06776ef6d0b112b07fe4b9d7489b6cf47b812497858f25468a050e3ce5867cccc24e3182abd59c436953ce4345ef4e766376491a558e1bcc981b77e20d3e01da7f763f2ca26861f2ab999ec06ac0951bca586c25e154464bdb1d80ef02cd0192b7004cdf4208c9043f31dbddef45930e4b25c672fda5b6b722120cf8187f9db40daec2be89a18930fa509a22541a3ab34263031e6a46aac620b759a8888e793848ef2c6ed4fb893c92e23f2cb68310bc7f8b04c734f7d1f2a14e64766df7b3b5f95e7442470c03614268a31e6ccae94694bc2ce3c475707f3ffe1a4268bede15fe9321c585557fd7d693553249256b05575664d1fa1664bec6015b2e7f55151537163f1b8274345c00edae499ad4c26fe951683a4d503d6ae7bbee6c0b6b0a0c649dfac51764b68b970dcd01723424ac21b1db4ecb22009a704e89a03f462869bb2947e27d8791e14e9cf35ad2a8191d7068dddf0987a204c0c907035d224cb2e875df5bc121c2882c8570a1957d96ffcc5a1b55dc636a14761956b9c20f9cd2bbb9b7bec93432e699ca030849ab806e4651bd85200826d587d04024f98e12806d40363ee5904741c18fadae0ac53df9ae2ada49a8228de52c265146d35eb5be0102a75266d65374109c893a77bf8f087bf6b534ac0992a5a9c41414c51cf912abb1618ca37f3563cb8ab6f71f3616a16bd51491f9e268414ccccf3428ec8660c061bdffaa33d7b8d02c413a45d0de806f33d3ef48db58a8d1dd2d8860a0e427a8872a96f62f2a1697cd4f36f98be8803d5cd5d1a74130b664a588d0d0f399d1671575fdc10f08e77bb64ba440b3fb1cc60a4f36af713329c4d36820036f5ddb23687e4427d693e1bd6b7bcaa47c79b17dad4d4492a0425645261ee62c35cdcbb17e5ef4618e214ab376d0e4443b8f075dc03907bd26716f0133a5228136c804a46eacec7df468f9e964f557b6b324d0552ae0304b2a79e2c0632f273a3f4c36f23877b2036f110d53924d032b21430e840705c3828e58cacfbb995d5c87cfcf2de1124a08ac77308dfaf844ddb5b9a8f8880e13a9ec4d9380d8005d0026e3bc0309e44815d4ffde22a368780fad74b2829916354318a5df2b403d8aacb9316eada0100fadf86a60244134e6584a2e92b6a8c0c6a90ea2ce6bd2e35e07612e1ebfb6fd6abfb39ab45fe4889280a41a99b68dabecdc73c2e9f0a959d918efb3744faf23a196624e147ac318df76e330608f99669c9303ca7a6ea32d82ac8464909debd69319b0ba39281c9701f153105d40aedc42a0178955394316feebbf03e315d5f063402cdd4af845ec1356a2c30835a7d83f3e96d9d847322f331d5fd3f00023b0110ef16970585225bf9920ddcdda2875c74de5159f9ff1964289b057910acc4301f260571c6e36de7c55624fda7a6fb751cf3e9ffc88ecd8e7119d6acc80caba373450cabc2c292b330dba7aa3853cd83c6f1527f1860f76f0c060d7633bb02829a6dde012fa469a2095619f887bb4a8bfdbaa9ec013bb18393b2af178cc6aa5deb236fb35d2d7efbf8144eeba7a1ad7ae2b10a318304ad91a6b7eb98e619975faf9973f09a8640748524ef2292dccb0b962c8a8749a7fe2c5cfe17c87cf185392b120850cec81078071c885c40d8e309aad1ff5efa99d8b813842e7a77174ce50f9b081bccacfe69739c132cd054ecb4a89a00b1a2e307c5cd826d0e8064e089bee9ad4a5d1a64197992d0c48519cb6002a70dae8bebe7275c3345e54f39e124dac108d5d0a593e5e45ecdffefe499a67f4b8c30e9e90ad2cb05213f476664f6c79bc5a8d403f5d227732698bab5e16814bd0cf45041cb297af9ffa7269bfe0893f255d8f82e112df62fedb8aa3e39442394efd0bacb68fb2819770a0950a69db33fff82db1ed404457c6820b40195a15f018321c75f0734cde670f94cb03e4d95d338c9230b08e966b46f1aeba360c4051da5b132b3d0cc193af8827a7a628b45a3b2a3832058d3c5c570ada1dbfc70d13d1471abe1d9852ac7ef3ef01a21d2294a5603fbe905e644ad885a1bd0da3068aa48258eb3a98f7dda3af6a9baff429467bb4e5debc330f94d02ae29e78e59006782f316615d354ccc39f41c12f2db6c500b5185298ed763fbde706bf907d1e8fa3896276fae92951ff6148a8e48124944636627922aaa77d9ba7f4e0b51757c2effd68c3e3757d51adc2e1a3a954b15544f7745c45db4deee660c0becf4529f0bf4234420fa227c1417a5b931843f449f6abe290cccf1de486161a38f19fe8c4d036633d260d7691aaa78618b21d43fbdb204503675149a1adf0f042ca3014c385c7cfeb2bb9d07fcd2039cc88e18a6be3358624ca7fb4ee64fc95dd5d2824639cd6e68cb40aea34ef7b556ff181587a83b73e5c2b77a85d14c1006086d7de5cbc5aaa2b049c833b187d81483b2e19e019dba93de195078e9521d3a656ef4ee4641e519829796ad777f3f05a535d4c204fd58e5560ca6dfa7056f955257c887a1d13696c1c494d721ae75ce01f6f3eb25c77fe8c11bb74cbeafcf24410a4a79f86af2706d3aa40a436c218c312900602e2d0584bc3a523ce548a53cc11d38b2b6c4c85e77697f732c938f1cba79ecd41ce463450c1af6d61a1b99d47448d9e9b8480b9171e3dd3488b1b7facc00b05e0f002b9a68c05e12447740a4962e1b06966a616811383567d64218edf59f33da8d8af018dd5aa361063362c5c2d319b47f646666dd5aea4ac9a7b7be190619af5309f3a8cd8760eaef73cbcfb056db834a8245f860c0faaf502919a5bee0af271801b48f0328f41c5fbfe0badb4f1eee453c75f62778f61a09cb2a230d9d15e713c78cb3cc3a970bcf4701c7b95e16f58835a03867c51f4c92f38842a737742336bf39cd02b7c95e84f9893d7ecbf6e8bf392f29b3c837b1171193bb24601c68d9a3dbdf48030793250d3b060ec44af7583807e3b0496ab23585c633cf272c219ec4955982dabfd9bac33405c15581459706e10776b7ff3230be5225071406ca01f31560eb7ccecf34f2ef160adacdfc2122aca4a95e1a9ddf041495860df618e5677f4263e9a5de5ea942c0f7d81be4f81c46bf23c5ee6983efae0d56ca1aa297d9d4a96d77ac7102c58785dd5b2380a040c53a6741db51f1b5aa17472feff43b0057e14958b6961dd773f337833bd5ae013b7ca9f057506082207acedeef99e420cdab5ebe8b0db6da488f30284b0c357e73097ac5aec1fc0b29d4975b9b28c502542493e4e5d11d17bb34d5e8afc2d2e4b7d2c3ab30179ab5c5aae9e2716adbff2db2e98a9b8af7e827b4b62dc4f5ffc0cd53c4b7701a29c5fd2731be8578d732a776c643148c046d33d0bf5b52a4b224935be6cc42561add060c910915800cf19d64f6f8219f589ac80f915a929d90b990b8a364f77b366e55eb01d0bb674a2df8a0abb3ea3835557633fd94071a6dd9fe4f4513e8f614920f36ea9347d8b04f9181a27852926e922c6e3a8a25fb2b8a1386cbf190416444eb7bcf683fc64d9211d5a018f5a40a12cd128813d20d95ead5fade2499a342de3741d51f4f14c60ee921873538a985d286fa1abe7e107972f109a75286480d595fe3e414ba30a11e7d3035f6e6fb72113770a1bc383a3fe89581b4cd976d3627179d5ff56c5459751b298338a4f833f4562af435c1c49eb07c7f37b05b84b385593bf11b1f3ca1f34f09737fa1c22043f651270f2fadbc6dc26660b68f92bf8f686d8c58f7a7e295b9a20e7b8b2f6a105baeb5efa1b0bb26300cca4672ba9e894104b3085b0fe0fc96cdb39786f8d5c9bad716007f4ed5806b0c62ec0f0583ac949bee33b860785e0559889388058b64e08db9500aae8b9d6481de490b210a6454094b1500f99496296dfc240d0561bd78a4293e0bb54981dc1559d09f00249566e75945a81d425ecaa5e7fca4197fbb829d0009fb525c049bd2f321b04dd400fc35c71555cee58c4051350473cae6587dd3083c75e93f884cd1529eee2d81e24377b2ec6d08c0ae725899bd0314fb3d5cd0485c8f7213639c8587e86a4c413f67cb95570b705209f38fd3008b4450b943cd7dbbe11a496965c2ec370b64fbae0ca8fdd8b2a4b966ad8b87465fe15e8f5a2702dda00685cb8d0376c36064c9bcb964611c3681a7ac6620023d0046ed8bc5a07a4deaf9e60ba03e2027129e76c6aafd867d6b8cb64355dca0208466c1962bfd9babff904b2d060009f23324c27572f3198bd83cbe73fb184ee3b5d2935caaa80440e7ce2f948ce84a4f51bcd1677be7e0674a07eba5cd531ca20c00cf89af2805a8cd9ce4c9c839a3c0d304000cc3c5c46cde020400cece4fb1cd5e528ed7d5ec8514dfcd0ee140b6e9b208b56d4f3507b3d72e5b1d8251cba47c4e30dc00809d1f79341386ae48d16fbdbff29fd83905370cc9952664bcf279e721c1c26db3031307020d05376636a0bb8eb2820e139f12bba12f57d22513323771d067687d7b292ee6a7d9d91014a700061c60960a54c7449df62fb34897736eeedd3b68c87d5594eb81d54ac2d63de9de90cb27a140fd83f0041d8b7f05d706588b16417973da6491a0f379806e81bd6bd37d957124c9a04708bbcfb61c3eccc9e7c4cdf169403684c1299c403810a2167eec24eb1cbbefd110fb7a3bc783aa9564ad07cfb991575d4021e53981b8fb97eaaf9ee3c635599422bd9ba00b7040a452c069f89036dae791057cb0dc361aa0ecc64b7bfd73da9ebe9f098804af26b01dccd6a4ed4dceb10debbc2af72603270ad49842b4162782c0de0ab1bcf45c90e5e465a0956f50fefffdf559ebc6ef8df3bc161727686d451571365567427d86d221067b14c71b11fbd7b07c8962743adebe17af2414f9c8aaad6c298dd8ff5c7f10ed54c444991d389e652f08fa704816d3fda574cee9cbd2cfd3c4d0d3e2de8371d305e556c2d0ffe9a1f9b2786950e53acf90839ecabc633228a7674663c542c4f69f89cb9a87dd53469be62fae4e11c9428db8b4a53e3545ff2b6462fbdf666eddcaa03c8988674b2f42d986482d1247c1ac0334daa22eba1b905edaeb71aef2050fa481f8dd58636e605618800d69c0a8074645a1a283525833c3a21531b09ab398155922046ca8dcac0ff198a816042c04c563c5c60f1b0dbe4db9dfbc99a9964d2dcaeb737c5878f42b5e97aaee4cb82319d8da35a28dbe0a232fc30fc17a8dde728471e921c5b8d98cffe2c3d6ce49134da6ff2f23d763cfab8b5d293c8f1a2db4df2fda6f1ac154894d8f5e6a8144e83963be83fc6e0065759ce919409e734df8f075b549a188ed8414b3840211a9398271d78c399fa761011ccd0dc44959029799aa342ca2ab1901024271956eb36a8df25a4ed28ad53375cc0f4adb3053128057cf185623eb2d31da7fd3886b70dfb95e838c612178d6121fc1445490d7bcb05a21a1459e6a266639636b83c514618ac88a3c8bd6c8f5837f543a79592025d3b476301bbc927c941985d720f6bfca59e078a682e7e794bdadd77408cd0ddc01930a0b4b2d8722dbdb8f5b3643f608f29aed55e54982a9739450c138cdbea7cdf7dcc53a94c73b506ab31ae34d32d198a1855aa3a28ab55623886147921ce22fffec6d68269a8abc1f87eed4c639a2ecf1b40a98426cb5f906b94cd7c69a89f94fc51d305a8833fe98942e020ae1b5158a33e8863d53ebf13eda649928ab765531e5dd43ae847af95ee5f669eabb11b9a9adf3a20cc5b81b34c0fa57b7c251caa0a9668c81f2d3fa65f908735a801ac272b08d34caee62cf8bc0846b942d2b5aae0bef9dba1ba9b3875afe3e030902b498c6a2da257eba344a0d72c36965b3e27ac92b087dea011e020c0cdab5ecae1e119dfb0a4d908145dd5d3742b1bcb7826482150da995ffac846a9cc586bd81be4dd245de7a44225512f9d8f611a4f0a7ce08118e4d1dc925d4e83212d5995861b5f1d1d3b49ccb75dccc1a9b1121a6da628d6c4ca877b1f3cee155bce0545598f11fa4f90db53b447d2329b0d2382cb45c6e12e0557e7772317a008a4e355250bdfe46fbe4bdc913624b5771eb03aab63ce00e4b57fd9d52e92c7a86e1294dea45a65e17d70963e9c2d458695da8952ec9a98d62fdab412b92cb209a09cda92c9b9f58ab837b9a82153d56cb84b478291bd83925a20ca977b5fc4e8f0f118bf8196b90814ca94d1d0ac20d322ab4e441db6eea1d5983627130c7bbe56057c3e1037d106e2cb5408760919c3ace447f43fd29cc293732a6ee80ccf2cbe1e29bc412f38d3b4b7ffac4756bf0f923d6a44428b8ba7aef910831b0ce25080101cf152036e2ac98cf1227cbce52e9a970a82ac8c3088ca813f904e516c397e3717dc2c6e898436c277bfc037e8f406c8cbf6c88a75c5fa82f071fc17e0cb1ce474830149f37023c8c9bb416e034caedc9337e2514dcac3d14c9750ba321835df097f2c5518390f0b21e17b8e9a18ae25f47c06a5841aff814f76ba4076c4ff83f2c45d2fc03810fca06c10d99900e7c79a988b30fc66323cfcd6e51570151847957801023e4ec07ed6824fabb2193540e880235604f65ceeb04f4bc1adb3e7c5cc3c57b432f3e752ca30635d1fcc8b28aec45b62259bf70eac0e044b9cc76519cf9347738625a80e6a0cbbedc5d2d2e89138f4cebf86a7cd0ed407de5b62e1ececfa59cff01b68162b57b071556b03cb0e3132cc1573383142de245f384b058f59c9d91ae8bdcf6f5c5d21ddf2e9032ee889a252d446ee83f90e6df7c9c55e9b31af9aff352ccc81533e423641d70bf99c7b152fb0964b6be5bd2e4221f41c5d930b4ee59399f3d6006bf603b4d493e025108219ebfb0be343b2133ff24830c7218f908fea6c1581fdb1fc6496e576971de38d69898fc6aee76e47cd78141e6eddf9ec98fbdc94742214c2bebc2c736af05dd6bcdab7b843cfa05c4804f65c256f4a341ec527439ffa3067329dd071734f08505d5892110f04d6876ca77c3421d67d01cd730748708cc140344a1570479231728ecfa0c2ace67e08de94715dea44c87d40c9dd55b47449f01da2f05445940cca4d50669151130e745848045711245e220a63c410500c00dbe81447932114c6778168de8bbcc9d9a01a905593b77cfdc50fb023bf95e9cf57f070ec4a11226aabffe0827566593247154914ff2caa095bdb425b74c29a547046804bf035d733f5e6f5f088395b6e99797361ff58c27f5f92eb01d7477e99ced8bb55d5b85bed66825e7d87e7a4fc243629d183dd0cab99274b8887a62ae12371ef87c508bec0b61b054235d6d5d67605d584deacf7157128cb82ba8cb668e8b0d4db26bc13a9bb8828c2857d2e722fadaa32a57d0e62ac187b6a2e0c45b693d2f4fe3969c8c4c194556e99071cb2165498e7c9b32698fb5c25afbce6565d79e2fcb344db6c8faf35d5887955bcb9fe3ad1a1f06415f6f655f3c70d38ad35afbc220565b06a84eb1ba649ffef2bbe4782bede7782bcad73e0b20f69a8bbf88e2ad2faca62f3481fc1c6f157df2e7780bc6477f8eb7843ae06299708b7392a88cd9d82101254859356a72bae290c65f26fdb24c72a3acd6648c3d5fcfc7f67c6c4f6b9ff4aebbc7754fc8f2dfdb1678cf9b93653aee1de9d5193e9ee44e9de928aa9a3b889669de2d1d8a4076305b75fdac76a073507b9d83ea0c3af25709cd2f6ed83aa6a6dee9b6c0df0b1760f206f9c2cb0719bef6eed52a8481911981da4fd948a1f0b9592f321a622b1258982cdc4a02095a471e6c97d5d17763ace7cfb1558c7f614c5d465891f8e7cf71d5dc17fa389c994773937ce4a9debb477aa1d6a37ecd91ef1209ae68dd280ad098b88a2d2dae4203c0e85eb94457ca3542c3074ac81859599d52c74100a21a1526a06c8d90f580ecb307dc2363325cbf807d4833d70daea30fa9eb24d3db800515939eebf4e21bc610c1c2864e8e361197e1e46022d882618ea2002a69bca10f7808ec65053e9a724283a12e520376c0502b9b0181b3913ea57550bdc55a48428248e52b24a69e2b34a11a29253a9211da542ed3018fc1e490a5f90de36032336932012555a763e8468e31205b3b2caea05832f57b3f32528389bc0c81600c86564f75703af469cb5d3a4818eca40d8601570080e139d45839acc40a7898e57c0ff800432b52841c4132c0500a1e83f57000c3fc667e60a2ab08511714dd89055584a4b68342a8f87bbf512367b1d1d06b4ab293a025395e8cb00306d3511ba8b802b70c6558c143706fa84928c2172c0cb788e82c06056652021f81f7575c42b9c305d8c0194c0311fe51b594e0b00a1c333463b20657b5672c437d35832e5f156098806199bf80e4aed07cb1fd60e36349527ec8ad15b999ea3abb5191d315780a3caec39b241e5843d169173f9e6ee668602d85bd6839bbe2c93a1ad6f05175a41715056098eb748abcf504eb1a1eb039c4304c83359a188c80219222b808ef1830cc6098a5729436a291642fb61b6e3b709e3382290cb9f45bcf10152f2748c0a0d48ac021c170211426d76d202d8175cc4199066205c5e24590af20a013f4a0d2428b080a1e2aa844f41a454f9ae0de7b37c7de7bef47170ce7f25985fce4070e8c0e7b9670c09a049550cf5f7a04194c80219c04868373d584a18c6e227b3549922449a6258d924670ede3e849722ae8936427fa2449f67a7ff4bd9ee7516a70866159b49f7e91260e4b504aa29b7039c1583095cbb001b909d043aaca53cfd44c6bc0e24b163548afd8499f3cf3dcd7beecf9eaab7d5a9e1ff25ccfef66ea9b9aedee774e6aa633640e29da4e32813b35e3c50a4fc6ed85ab90fd5ba8e16bd09de96fcf6e61303fa1fae711eee7b7226735e5b1e89f660c5beb1132968c4cdb8e8a4c54d62eac2713459cb0241355e6f031a12f455101510d4d889189327d3eff3665e7f4f2f2d696f3a676f36686e3f3f9e05bd69437a918226f4e9d1cf9bbae3eeffb397e3b2243b3cbcaae3d5f5996ec11feb602687deb2147bed7d5e7ddac7c619044727bd339ddca80766e477a4c566bed3fc76e546e4c27dc6e9c709391e3f6e2c64d0509b71f1cb71e9b11039fcf07d7e69eb03d09bb414dbff3e66bbe260f660c20cce43f937f3067a07d6633b0f3a637df1498d9bfbc94eccb0bcbfeacd39f7ed2afbe78ed9e14618720373781c6c1d9c0f83b8642f53708dfdfda87d03a04283950828a19eb030ce40b10e018f02c86f5810634c87c90010d6c801d7f8cefe778cdecf39fe335245fe8fb3c5dbf85ab5a1b4fec1b930b6484568a115b020c2115aed29a8f7bb476d32ecdb14d70646b6d5592b92fd6c7152b25cacd21c1b5e19176c452c96897b07051a8fdb823a8e1b042e8cca428614371d6ee08f391c556c5ed91212d091f2c151c6c12a216432750b837693a2d591a4d1b45c5cdd1c63a2961af8c5d69b934a462226c10202d9d0e1d35dc122f5aa5207609131e1706939af6491536cb8dadc204a76c8c0b0655bbc2a92d5a728b769c2802835d1d29d8ab2525b496d8b47072ad1414564dcd25519ce1c53ab17293a05a2a425228b1563790c468cb56c85062c21d524222c915362dca5b1317c96c04185b87d5fa18714b28c1460f2648ee8f196d8e16ad17da0997085a8e5b53c72299e2c44911ad1d8ab55c475826a23ba449ee471b96a3050d56898bf60cc8c4d90e3be44cc48db856c813976989ab4336b7c5ae4db5318ab42282b82424b9426cb06c439689503bc3aca7c96c046b66a57d739bd25c154886ba7054813db5344c5546c061d40281e12ea9609792f8b43592dcb451e6dc1e706e90b5a9246d93afb6e68a6d8b724790d0a2f1b0398292c18305cb55fc69818a383de8582b525ae2ba631baebb33373197488b2d9b6a4b38b526985c174aecd751db0caaa1f60ad010243cec199211ed8d9c8b0337d584c519db43ac85a2a536c5129d5a24a6b64b891d3b62e319ee8b211da09684321ea8b211ae0cb93607ae756ae2f69cb1526240b45aaba9284e6e0d26364e29eaa88419ecd6501b04c443c6c386918dc892c38223d2a4fd712626e6f2d06a6f4cb13f9c5c23a6f64769e7c8f599d14e19720362a18cf1b441c6461cc9b145b896ad89fb73468218eba5c53e4dc539b92998da224aed0847ee8a19ac91a1d605904b23c653446cc41339d7071c5d9376eb8c15137345687d4db5444e494c3b945aa623776706db643587ea5613a827aca7150abb699fe858342a2e0b371a6a2c96d9177a2362bfb502b6f585de7b6fc660549ffb9173ce7d3183d86b0d67c7c94a98553f65119e2e8404e995d4337a11f570af153d5e3d01bbd7e7d15455dfdb164eafaa2a0755f5ba28ddf1d40b2c1e26466607495f02356c80c00e929af46edd3af280a757530d4218d497e5091343fa73e7fbdeed5eb3882af9edaca52fbd307d0962b07bdf6dcf550ee638ee763b9d5fcabdc4bdde7b7f207ddd67ae2f0483fcc2867dc1d66fee1eec20e9756e0a4e60e49cf3fcf636bf10b363627e36ab3015c6fcd257ea37af9ca758dd269efb8ae780c473363fc7725162b9786f1d5b19fbdbeb5f8af5a7b30ac795fbdd0442e8a435c757d23e2f77bef457be4a9d2104fd3fbad78c61dcebb610c2de01c9bfb6640ba6e75add79529d71d9bd1db4d9d50eb9c90265598ea54679aa4bb07f1942a973b0ff92f79fceaa033db54f617a9aeea0e937f05dcfeace1bf805e36eacca165ae41b5e82db6fb5c3f9a63bc8fbe87f352b7f531813b8fe44acc217be2bfdd83d063f021ee874737502f9bb9cfe343de937aff428a9c7cd2babfc7c61fac738aee88f7e1540d06a7a7586dc7af3b847b5da81fea5cf2f595aa19bf351e540922449fa92f4a5d7c06e9642d203f99ea13efb3db2f099fcf5ab7dd7beef7c0962377e48fff8a265c0a9ed83f64d2f4cff787a8df23c0a3c81421ecf6a05c6d1f35e9e1f3def2579bef37cf7bcd7dc411fe2a37ee755e0e937f0effb26700c81ea3dd6db4d23eff46aef9df4400fbba3bd939d54d14c969e54d557b87f3ee941ecaf55157d3d78555537da3dba7ff666d19ea7ceb078d58f796bad76208b3727a8eaee51b78beda1e745d87b97db973b485ddf72fb685df674a7f00acd9657b89a6fda4b7dafbf2efb95a960c2eee965a97a1616a156bd0514f4f6a83ab3cfddab60a772409b58802d400d1b7670dc7af7b0f8ee49a0f62b10f51b48b2a42459be5a2d35bf307ade8b7a307df73ccfe3bd2ebbf4ddb0fdb8aa40d5a7be9451d557f8c1578ec0a328eabbca0195d1b083a3cc1f7bc69ac04623c5e64f699af2f3a344814b5bf1d3bffaad06c5548a3195a2784a5c3c052ba69293a2f122cbce498bfa15eabddf749ff99f3b274dd1b685f31cb94755e0ea0380a22152b07d59dcbe04b155a0070a5e84bff384bdf584d36fd8a999ce507a2ddc16f84dc15bf00af7e7a17d5d010f2db7de7b97af079ea7e0b7de3d752b794e5ad4194eafa669fc547929daefbe7ccb9297bce4bd1ece0a4ab543a9cfbd29687ff2fceef9ee4bbef7f6ba78aa2ada89f64bbfaa2b05cf5bcb161eaf5cef0ae5f6db7b385fa14e7705ee79bc4b0bb86f7d791005a006ee24e0e6b16556edf79b9ae9b4f8f7aafd0460ea7705dc7716d56b16adb5ca62a633f4aeb93f539edfaaefa7af87d3975ef5c20fbecfd36a279c045066a3f7decd71c7d04ecd9893bab117bcab12d6c6621e562f6864a7a20d487e94b86a0225a9cad652891f2745863892d0a8644547bdf76e8ebddbfcbe83a3f0d1b2410d0ca448530a935a5a12e3c0188cacb5b41a675f26a6786336aadc30c9d41c92f81a8a42132a6e71d191b1287a21b55821355a895dc086939b1b595838aa9480d12111c10aa2da3e4f3dcc73b09ddf80e8886c734a3fd69c98558122036eed8ad4cf891e98114992244992a949fa985e524535b61ab3351b1ef92b6612446314c79555e2adfc59fbf23cac87e45c24e9f38fce27fdc8b9b689badfb59011e933e277afa2ec4544edebcccb85943614e43cc9798231f5f4d4b5813ac4126dbc7301793af03aba103640604682b99fbfb0044c7befadb5d67bebbdb70278c21045bba79f3bc854573f7bad7690a3dc7e563bc850d4f212213f7b247099dc12a63c8694c1cab255905c75f533185999151d6b5502bda532062061c00e49963c6107a818b9ca4a03ab1f84f2b37fcd7e35826f01b8b16a51f1a3c101844c8446c407b1bdfe5b9540efef571882ad11862714c190961416ca3ecaf673d7cf274f4802acf2ac0b7175866cf1f3cf3eab11e84126d7cf339c681cf9388e7ce47c1c39e7e338f2515bf1849ffff8d9b334fd8ce1e7376b0db22f5d300981aad33ea54053cfce990e40ee0bcdac4c040dae273538a0888d1d3db13d80a7ceec569f73ce83f429fc4ce459fbfd67220f9a8df9b24118d26424933c2e768c809032303231bf1e303c883d389f73ce397f851f6482bf1ebcdc3bc49d16733f1e439a8cf4180fac65df7947c427fd48dcf1f92499e3b609197448e4087322578716f4c488d9d70ed28cabb391499557ea9b4af98f96f8932499439d328ebe7124499f571075627c92d4f1f9bc9f893a34e812079d0a2a5b116a4234175b9dd1f42924394e641ca9399da9fd9088396e441cba751cc71f8e2e15c2860f165d705c318288385742a8f0b9ba8a7a71c4841cff998863a508ffc5707fb451f59892f6e4e6022e261fbaa835222edc4ee28d9516e24f86053f1371d07efa3311e72b06d18fe847f42b2292182392702b126fb07e367e46464abfcbbdb3879d9245ebdea38b357be1f89b81c1a5c3f6dd87309e6bc670fab1f4208830b6640ca81f813967e0bf0974c02f81eecf4ddf04e6ba5f025d3a70f0b7e780839f5592a320dae41047a4e866d9e3cf39e7afb0ff6a98dd08d106c626daace04c7b1c2b7cd2ef38b32e5f90bf90a5438d5bffb5582b7ce0eb34ade0e3c742c54fe88782eb4db37f28be56a2081e441a232597ee4743f2e2d884e68dd6455959689f5fcc9ff3379186e6bfec993ab49fe77e8eafc4fda2b9a0af8b3b103bed771ac43677bbf3dce5ecd3d1dc69afdffc23b1eabff3a44bf63b9f5db22fbd4bf6e4d7de74c939ee8f1fd5a9799e9943d65efb519be0f7b3fa0fe93761c8bc9a60879e2ee7e9cf9d1fd35b575618219ff4a67e2a79492f698af234078f89a8544b5a724a88666c00400193170020200c088844921cc4510c5027f514000965ae3c523c24918fe490280a6218866118068100000010006018866110062219d6fb84e64d001cc21864293de77790067585e041db12304b4b49b550ed9ae33aa0953b8a275a1cf20ed77cba7ebc70e19798327ad062287a65060ad98e3b64b245c87d97b2f84f6625c48865731b06a97fc1a47ad5fff37429220ad743c46aa038d26913b7475d2c31fea44d5ff38e49081d8378ef25b43938964dee366a7a68356735f16c6708459514e65b4ddc7934643585f21d827014d105bda599ed15ef65dfd8dfa0082996236fb5ce1a94f1e9a811c1bdcee39c0b7c1bd9014ecdd97027e3da5ba7dce35d1cb9a5396e02b6d599ec8394e269dca170c6bb9bba356731a0246bdcebc7214f6868e381e7c93688711749ffabdc420c968089622487ea938a50a7f939989ca71637d575f3c9122150d2af83717f5826f7268c2f0bb7548166c66743426e2b9a88c5413581d9f1ccc4aa1afbe9b0cd6895a47ea49c1665ea21e9228a220a96a3a2d99829c21bccd83ab98a70607c9ea1e26cbf1a1f2467ff8da5bd4ad42abdcc51467b05d1f3fa1ea0fa8503fd5bf4a1740dd5f7951c6cec9b29eb03f5726f1a971aa6d74219ec75385224a331707cfa4d242659e83fafc53e77129213e83c82f369e2bbd668f4ef5dda3dc08c8a4a6384c000a620a14bf633ee43c7ed31654da7a0b2151cf5ce3d6e46c62c67188bba327b2c7e6939ea68c13e1e9320a68950dfa55321c452e29f286fe1a3d612a5523e624fadd0d7096870b1791613787a594d8cd30bd9c6c57bb2bec6fdfcab55440cb5aa713f3d34f9f03a8aa7a511165b8cd81d89bca12c7546829f807c157d2832d32abb7911035978a972a5965c8c13e831d96b000ba8c2d54f44097ae551ff87af33fddcf295e1d512e92194251651581eaa390868b4aafbf014670b1d706dddd87db06925a42eda1d1df6c4e91699d68d5d3a6140bc3e149d5a63579fd5bfa70f3885f3beeef6bca67c8dc29597eca11ce4b954b463ea54c11072b68ec34e638d7c061c52bc793b3f52164096567ea3c9091ed92891ecddc847442f1139501149bfb2cbc19e2b9b5e8fee8f2870e53fcb313b9bb81f163a1e80673dd6c34dd6b109165c29c46ec38f06274b302e88c46d3c58fe882ab61c827e2c8b658bd1902becd1afe4969b699c2a4ce10efc875f3c005b635f036cb8049a4753d19466320ddfe096b24fc3bb0523bde708a49012199ea7788679180f275f6e46c577182135cb761a523bbb40e12164e29109529492005c3426224b4087f9ad782fb99cfe29ee85d1fddc5dede3f2e5d08bbdf153548e3b1e8f821fbfcc1e11be03cbf5d13588692f719b17f85f6d8ecbb384750c848e1d433fa7af92deea9aeb18f914a56475f6de2c75131f1960fe2b5010af64fcf9a5d43d01f35768e5e4dcfc43326316dfa53c0662c1ca0c84c4d616a145fe315f3b65653092f38252cb480df2b7c0be60ac8c22921a6f25be10ec81bad717c2dfb2197cd7f0421a328ee5a3c9b660a4c6a1df2274add4cdf90415333125f2ce883b2012867c09ec66817437f6a9e1dd94a6a664306aff0bdefe81281b3d7a41b94a882fb0907c4890988b580d0ad71b84c8ba9252676225afe83b0f2772f8176c875354e24b3c09fdd2fc054e5bd25cabcad264759f73c02f4aca48d6b3e78a2eb69b720b9468bf0107fae1ca87de49c102f081bc8f0518db6f03dc4643145c316837be4dfed2b08b4fdb68d999f10796b25a3bde1dce2aad9efec3f0885d87bbfc6b750f093497031726b43a4d6aa5a73a8b8bed9a078ecf4a422491ae974d0548385b610419c40b685c7faa2d6d5b8048880730d9c89408507c14a0c79b32acc79d2a61913920748051d88d92e4ba6a852a5adc34a0cf957422f8f54da3200adc3dc906fa0dd3bb8a29dc4d454815c25738aab32a93ae195c829b9f2af4e54f7931f4f3290544e3b71077337c41f75f91ba128575bfa539fd6e0e2ae4faa318b6713168c2a62de468e8fe36a12df8e2c0d9922db1a3af007b8c2b46faa18aa03096338dae1db224dc6d4b175356207ce3cb28b36e7cc77058ddbac218fe15de1d568fceca1062449b1ce7900938457db22bec94b12ea3ded3c11ab367340caf271cca54259924fe05c12d97c3da5e0b51cbff0d2624fc5f13a2e04025f42bdc662857c6dfc75428f9e208ec5afe27659e3e9183473ca13fe7872cf9df654af155a5d183b7de9b8eb998ef60d105d3259e2a4a3e73f16b540c899000e37d9615836fd80977ec1cec161f43b412c062720c2151fd2188051d6ce61e87d34078b702564c7665830b73c81f4ac4dddf82fe393fcb11c4e2ee9425be7e0624f2dfc297a88112be480c15f9a05a73fd8816bc856ca8782bad514123cfe0a730a6edc53ecb14a369a1e2e02ce652713df34e87c8caa2ce2e84cbe1d096538bf2718939a4aabcdf1c15e1cca838f6571b346ace22ed5289ea9a570a53d2ecdc33c30dbe7941e602fd2a3bd9bce8a4671d6a25929f74ed558277e4162c9574d8ac9f6469de91fc1435003585fde6f2e0001eda7580e36892ee0a065ea1bec48f6b3a4cc781a032354ad1314efad0731024c5dd4259dd3b25b5ceffea0881dcdbc2b1bc908dbb292b55903228e920a00bc2b6668575ee616eb6f521a6248de1cd34d2898b24f13840962713f8d63746f5e80ab3526654ac0c9f84e84e49bf33fdf0d105f005b13d725396ef7191913af0a929d407824f62ad6fa4c496c6a14d68edacd00c4a18f80be76c1160a164bec3a74c3110e6f9661e012e3e4a4f7da08ed4c51308f316536a83ff5cc661db34f1ba2d37815fef89fe3efad8ee718f844aacfab5fa40935d0d261c477a103ce8224e30b10b1e873cc1a6bc0c1eef6c553c136adff4ae398d93d6b22d085e9c7e87b69978fcc1db5945e98027376a6aec81e04c866946773c8f4cb3c5e17b092499ba385cae589b00871048f91981107aa3771d5a62c8eb8bfe4bcfd4880bcae24a36659ad8406c5282941e25c923d0bde5c4eb3d1c1450bf64dca8d3795219293b9ce83251cc6c7312aab828e1743d84093be90cd310492077ea8ecfb42235e933f791a4184bc4dd5103c2faae917630b4bcc110a5dbc77dd9eec2a2e1df61fcb56e8e2b1f7db70dd685da2ef9563b5c818950087294fe44f9102041f5bb31d254965f5436e26d2ccea64775a0300071308cfc6d7b31a3b7ed119a76cdccca27c0ed1192d2d5b305d94aa8b0440485eb96285d07c0041b8ae35d18c26b60e7c877565f9bfa3191fc98551c3841bc0507911bc0a7cf420506a90c0e6e4a73e1d1430096565920148d79a4d1a69841101db1ebd84aad3740b3de29c5de0de867eb0ca66f73c37c6e9690904bc7bdb64ab28b8fad96365b110c0c466c84b7f17ac21f3c71ba304bb3d07e1af5d4012edf163334df1f2fd8a1cd1f15877f6368d2b082159308de5092147ea2a16bd2b5dac8397fbb0f61cff72086402f77e77a100cfadf68925dee6e36398cb7e0dec6fa93bcd17d1a97ee95eab7b07236ee35a44277fecfb55082fde77cd59527fcad4c579a4fdcbe3417cf6920e583f9b0ae16a45193fa269b127647660d4eac8259d5a4ee8884eb82033c2fed664d645d9738db092b4323b0d343edf36226dd8bf4b2c11ef6164ba47c11ce161736d8bd9fabc96bcb6946ea52df152b4bb3ed47996612e05ea77dd79203fb7616a234e7254b2ada2a386df42f03bac8d4c30af4e0d27e05c696dee83101fe7bd1de7fb5355dfc8eb9da1933567963e0fa87ae2e0b5da15404aa9d8fa87fa8d86b8ceb2f481dc2c1f8f5793948301a09c762000f73a0b20270cab1b1ee24504c26b860415845c87e4d16c622e78f173873130e60f503edf46f94d34c81ef01d80aa0e345db8a129e6f32b25beaf70681c2e2321199b542dc2fa8320494635855fc9209bcf21c59158b3c0eef42c1fd493745425bd6fb68d03fae8cbab9e94babc08a06e4cebf94a413a5bd4429f29345182d11be96dab7a9a5427c0853e6d55d6386e35ad75e63b61ec4caa4df0633211d274e95b982f754cd3fb31bc18e169c6370731409baf9fba6fc0d7c9d4ac6053ffad5d9c9a47ee97dd1165527152336cb3569f7ad292e105ba72b495f894646431516b6839520ea05d9b400866879252a0aca56d4505677c3c0352a7300aba1eacf9ece17f41a5a91cf269b80d77f0648aa6854507fefaac9b8be7d4d095142d025009f6724c0ed91527cf540f2148570094bb16f030e532a207aab52baeb230ee639bf9f03c9e039e38664369c470ae3e475eed7af06e79021a260ae7b70f416f53c22216e5ca4f44bf3efb896b5719c44e2d5254778de26d0c02fd35b24fdda655c2a50c599afdc4a57863cb665ed2e75fdd7a5ecf768b16271457bd2dfbdd2ae0f055c627024047dc8cced7bee071849f319c5346e88835a2c99fb814e744d0310656797189fbe23ba25bec9b744fded36499bc2aa3b4dcf38496bc92ade902a54f2bbe66ace73a2ebafb93ed36402c721d8b97dcf2833021ef9d03ff2ef33a383dd468a9c90222ce34b29b7d14362672d0ba588b61901f822fbb334873fedba9ed261fff25e14ab97c27ab6d0117ef136c2d486daf32ebfa0f6c30d0023d7b47ea0454c254ce7bf750fdcbca3b476658e9e46f77a988e44c2c203f99c853076740ea917fe83de97e8cd6264b25e858f7464189b9f68a1329628663bd65d096b68e1419d1bfb761addc63ba142ee6864d3392f397db20a82566bfbaaa571c40c7329fbe658aaeccfab9e04196138a1daf26a239f136eb4547ac0d9eb7cad6445d6712b066e2c345557f337d12c8da0e7d2a37bcbc0e69c33c00405271f8bcaa27741c55dfc31860213a3bb34ff9ec34a7852174b66e5d595ee861c369939a8862bd672ffba3ad6cb1b03b5733e66dd05f0f031d92ad7f52ba12122ecc030e75afb7f725c9c132d8c6be2df7aa7a0d4345f8e68bda323a6deb24250d9e6afc76ff27270b30428755f6859600f9188e5a180cfc7843cf42d918245b53a04c045827b0800efc7e857c4b90d49c3bbc00f1a87dab56d9769ef19dbc5c398e5e877a793b09a235e806b9434d814e4af50518e81c67620541b1f32d60b9e280de10176b07e6b5b2b2aa25f7c18b5ddc0d1d41c14ca0d9ff1cd80e905adf91333c2573ced56dbc2145759100746a2e844875ce513560bd8f0ec77077d1b95a00a4d78b4340cb0a24e53eef16697d48e0564ac57ec9574bcfa87953169160adb2597d3a74427fa7467c9f63660cc5802bc905d079ac532be8976731339466d2573b0b1b18a075912cdba4e6a7c12cb938702c99c57953b4942787295539c698131eb0a7710a4888c0816adeacf98a80ab37604cd0335c8643447772f9cff7e43ac08b4004c1e18826dd1bb3d1d5d49d99566fe73e720627609cfe71aca370ce7ac84068af7879774994f1e2ecef17fe891eb28637fac185a0626d29f1d3c3e5c95d40253c16b8c0da78d14b238376f8d8e08057a9b63ed1bbe5c5690d355a1d682c78605ed68f4cd457bb13f83dde4b8f2a93d587b2ffd54d01368688c4d8d56b6581b12526d1d2a9b7b0dab8445bb293a049eb375fe0aa1637681fd59dfd6470799a392eb38c2bcb0c3a5bdb209cad59d8e7a1a32266b8a531012dbda616cd9f276f8f0d971794304b151ccfb9af86857d328cb17effe36671754f6888131a23594aa2cb189537e91d16a6cfecc82b192acf1f0df7d0409d302434777eed85baa4e83b2b500193dba96993310d8b5012a68edb49a78fe40f97d4c777c3dd9c801eb65d2a0e16b3700e052b25dec57b91ebb704f0839c0e75a81fcc0d0df4bcbdb60d38623a1634ab2625de2cc9267b5725ee3a3df802dab0b3d96ca6a26655c488a9d68020bb8a299d79dbd638acf57d049e3d45c7cf70cb92ba154ba1aaccdf4ab08592bc2c94a6326ab7631005bb6e7348bdd9b0f5850da7c1ca4bd6147a3cf48a1e9e2731878eae9a73df3f30665241a060f54a3b634f61b48cff46eee5ce0956415177bb7d2a408bd705ccce4208e154cc6750d75d0f25dd060fb68ddfb19d966e5dab402fd99d929f7fd339ccfa2dfe326c2b30da765b74d1a2002108f034fded2bdc899b3670947182f10852ee31587bcbcba2a2d2b0e397995393547812dc9438e3c40344c0ce8fc0024cc4306163a4f1fad71c5bf15d99aee2584a81767b4b2aaa6c61a57f1af783dbf6d4543dcb82969c5c801e2863e752b04d543a18a2ac6d396483c8ed8a0885a9df24f5cc48e14f1c1110643321cab3fecda3c4938321c77d3b830a1394b0e4d5990f3956a4d2fb91e38ad32fdcdb8173960660c832b62b7300ddb610ffdee45de0ee1fb9b02bea2fa97d9600f0dc10d2ca9cadb7f8e42584c7f2d0b2fc10297912c2d62c318a2d91f669f75f57177788b02ab8ff30097fa542e15e01de1d3f5a9e8dd112ec6395cf8a0afde6a2fb877072247808cbc6b485cea264a850ea8b223ab1f50a599b3fb9258824dae9249029d4fb1649f129afb53890beec50df0a88a513f20ed565f75a2167a924f3ba8a0f0d9e32f54a3f2f21646057c5d4a2064929c64857187815e20fa7e35104e6b6a8efc55d642f23f0ae21a3869a0f81c0a0484d72747ebabcc22788912b605571635a03512d4a7ad3c276f80c2c0e76cdaa7e3aef21cac5a54cfa52952de981601961fab6ab2656e32933dee346b66c4a4cff843ed8afabd0d8c13f5b6aba1ae255cdceb316b8c1a0e63900610c9d37a72127e88638bfe5173a840a14105b77855597c7a7a407d7119ba6cd451bd20d68ca946e9232aa19d46fccda6b6486e7a26029866ffea1f3f2d698d2322ee41d5cae327f4400c290fd8c8c2564572d00c8ea8832f293d83f09af5dfb7f316aa68d34c016701d9bebf8f9a78af5979c8fadd720e8d055e8d621b108f1160350acdba4ace443499b32ca6b7aba00e4d5f7f57c1e3cfab692ad17b9d9596db4e25524a0e265e1bdd5914797211e38543b8eb532055ab54205920ae26e684b29295501b90ed6051b3c1ad9e671be522ca380505af2ff67654c07128f38461977caae77909a90752e04fa0c216a012e849641354d4a0fc8cc221119312d090ef9d2c267f82e306c7ac02089a14d0e4cf1e2c7feb37e0a0459e9ef3a32c6e3682ba4d5e5dd23951610f018c332f93975773bc56eabab41243fa03b5c0051a1ba783cf5a7338414b46319033311228580ad2efa1c88114ad7ae54a0434ae39984bd8e1e1e5cd42abc35dfadd37ba513b399f5c0a69e3820844d4f52109365e43cc9d443029b6f1e5791ee2d218c2de6144ecdab2f5a734d2aa3b26772cf4afe7866c0038415faf7c86a180ce6ef895b5b871c99fa852c19e45644a2070cb06c1523b7614b6d993b44888e4b6a6150f78ff970086410230490c5233c098243151613b3085c6dc9986ed25bbff254b8fbb84e3f0146edefa25d9a8dd0b93b39b086f70986821479425920753107908df3d70d883f52ec4acc8bc855d62aeee10bfa41ed21e0d2ffe29c41505cd011a7aef4a86230b2106d0b6e18bb94dbf407a87afda3b020909998a04fe651bc1cec9dc287e536a8b78855a71548538175f2c140d49debd784bed76d37bd0bed42a81a739109a628e03d8d78bbc9ad000cc1e2b53ba8f196ab68d0d32bbc40e44959efacb92e912ebff9bed37fa039505b9b72b0bf950b05c2833f5173b83e9534d857e6fb6750eef1a0432bdcf6056051e1cff08bf20eaec17737d6c5bf06cc2abebe02569be20fc87ee64c414dee581089f9afda23364446212acf4a506a46869e9dd4e9b1459b425361091d0cc2f9f0709ee21f12349922e42b152dd871a1f95e8f467eba829eb99f328f5af31add25001858ca25ec4ad78f1c5ddf44620ff388906db083a510abe5c4b5067f3c420414e101242ad0402337e67c85abf649ee406aaaa62033708dac6527b58fd4c3ea2aa5eb68677c6b054227faacb252948fb80d95115a50f2f22c04bb43d29e29833e646325f6086d5bf168f44bfc530df1c49d8abf058c4111f9b3f0138bb4ddc72707dc8a456081660114a1aff44a1f37c47afd7d8f270ff0bb50a67b1d13c6a6ce6a4ca67fe04e16927e3d957d59ab6bbbced3b88284ac9ac366c116c6e15dbe814131006b62494d17eeb0a50bea0aa0062ec944a730c2f31109153049b8ccc50226a9c521e89af9a959e40e484eff2c1c38033b3e80a3fa6da85b36116789c960a283e9e486786091b252463cd530d7905610a38e18aae5dcb55458d867348f9c4789714b4f8aba6bf1016080b2dfc193d0e80a8cdf177dc225e3444030c9da46e60d78e06e4e6125675bd1a42313f6e32f64339eac8bcaad637e3ef944717a1c006b31931315840609d4c98dbf7ef64a5edb0269c3a24e7dded1cadc989d114c7d7c44a1b99bcd6971845850be6ebdc7885f5f10116866a9c8ee8a8bb9ebe3e0c73f2e879b5c24266af16b1b0c0cfef4fda44d49fb4b42a4cb82afb9640cceed52136cc543275ea8fcb769bc854066567c54d3bdfadf531b8480377c7cb67c61a6e56a6053bdab70ea5ec5ad9c2cbcc25a18965e3bc4ced916f5c806734dab359e991ffbc94884cb83ddf4a892d386d5d1a5279cc3dac77ed7cd61d6482a875f1f229b70aa3dac0b4ec304afbf2be74e53bf9706e989aaf4c27f6d83f553a10a153e9f62f2bc7eb33718c47cab6c9524d0e9544e7f80101d2cc7cefd6a6b515fab0146d8277c63adc8b46eb6883599adb7745c669cf91828658bdb47e5e7fffb4177b67c62daeb721175d9352ebe0222dbc16fb57508a5e7bd05a34a4172ebbb97c4f9fcd3570f4c03f2edb6d22571b949911bb3c5a1a2b1b7bb549653bdade5969e3d7d35771030834b6178ebbd4fa0f1b3fcec591fb720f8bfcd30a6212ed8167f61abe43178eb1a0f1d868a1b37e2cefc0c849da650bae56f048b58ed1b74b31f52603abe7a03824e8f81cc306159d8f13ee77f809fa75caf1253f628805e9c114deb85c0643410325a40ffcde2aac71ff9ff938a19f73719e5a0456a0a864d8f5a571157c11801404a9caa3009262827ef4f372e4b1ba2ac9d808c61f54fe071c4c62ca518705710a244767e9916a70bf8428b32844b10656ee321e58b7b0ac0cfb05ca8a81d49c01fc40705e725e430a617df15f0bcea1e9db5921076dee6db8963fd0b68ad02ff117b516ae68c483322b4d43e5b77eabb30a99588867958d8b8591fac88067898d4fc3c5f4892041fd94a33ed1e4ceacf2e847200af7096f104ce2c9d90a3e3bbb522470679efc06cd8e390736a3ed5f3f1bd97c024bc7d801af939fa212a28afe0cf0f2c3d64372f7797ef22d6ae658fb8948ca980574f5f970d69f7b112606b750c3feff601340be37810338913e60c701338526d8d6a2f4746c11902c522054b7683fa615d1fbd1579f95378da5b4adad2fc0a91e465191206f448777294ecb26e493b8a278d02065cf4980a9c0e955868ad6ce0873a9f4efd08c0b05b5933e43d0d9b7c898cbb4854277aa69ff4046cb4950123986c07ccc40abcce8fb132b97b0c7ae74922c3888e2222c0d79b58f12fd906487f46cc15a40206d95b28a8b942dd64d14b4e0346c0c52b2f6c29931c908d4e81543c159190c20ac25250b26d0c43c1494d97e6306dddd5243db735a9694ef8b7985db7bdada6ba428289cf5e3cc6453d9eafed9ebb96fef664f3b61eeff1c98cbd59040df436afceda6910c89d6119c28e6cca3d28497af33133bf8320b120d5f5e343baac274f52672571a294b9e835b7f06e5f74aa1981ec662003caad9bfe28c12c6334cd796b900be50c616899b2c15d4ea331dd17baab92d5b4c62249c864480396a883472155b4844254662c6ba099e35b9fe9fbd93be6e8b6ed5877d015833672ce2007f643e764ca48c0a069023765830c5f703cec3d83af58ceca382d1be7ef63072858846332fde938a794ee0a64f31885454410555c0d4c359c0c2a00156592ddd5fc765e5457057b0c9f4443fffc45d010b95989e0515cb191dd0ca81c9bed0e0c7852207bbfe34131870236b159495b0a9bb4ad3a868ee083a739413c51fa7ab1380ce35302fd2e01a8ac7ff69c9c78f568889804d755e6b6fd956bf4ee92aeafb60eb009a6855d680a856766f591cb290dac8484f14194665b6188bd4c081aec08c7b48072141e7d25038348642fd27959ec6e19fe0f3fc8893fd233c1a56c9e62f9a4218fb0d583ccca391776ab490bf25b37385ce069f6f41f5cfdd4e8d9611ac7edcbe27daa7a8d38f1729c80c27188c8512b0b8e5909c1ee07e39aad42cc7202ded1615389284b4eefddd5a6899e2396d70a60ec0d5ac34df8cafd7b8e0df4c3d4e2eb9f61dbb4aaba9278c2dbaf34b2d3c2cd7f7f10b3645476e64d31dc08496b6f4b5548b987c0ed17e1d4473e8e44d917138603b0155304319afdd1661232fe8f4ac61f8f8e72ef2ff6f8df5d02f1d2d2ae8b18c98a30dd35b6ebbcbeae22692dabb6f892f11a2000277fed755fc742434648be510a296ddae1bad793203e7a1986058703cf7101bae05be44649a6c8305bdf093bab09ef478c4c3d9557fb9cde91c70b916676c628bcadba7f918a9fa061f4f2447823a6be343a0d62e70a09032dc5ecb733b94eb8b7200a60bd4e8b67ad118ed4577076f9da92007b3f562eee736c2bc4b5119f984701c70f565a0ed82178bbafe8efd9e78226247f1562d2699c4dcb307bf53c541b8ac2bd6a0b7cbbcb39ae082c1918f09eebd28a4f3e1abf78eefbb3a048a9b160057f71a98d46f8bac214b1e150d3c047c08386bf6eb7036d8ac8275fd6705f8457aee65eda4fa5525206015e6d7382acb97823e9818f81ff79f97fddb1c20e7cd875b3325e125288de7ee22e0392264b748d72f269a3db3188c5b25c64193f0522c48a714e3abfd59693d9227a800d903b70f650c131f9745946c85da2d1459d53c21ea39a4901134ed5e141db20e6487bba3dea197e3eba8c8f1ca0e123fda6ce5fccfb46209d9515a3c62e1703be81db8cb51d647a3bd903ca14d5bd217d3e0455876a8c84553cb8b1a57c01db8c751d647d327e9ec30244f23723292a31d4b2cd68ac8488aef70c94a03442e1cf8eef27aadd8391e8e0506fddba46083e536c1b70ebd741dac72905607c993b67b29cd198d5b32644c8b11ab0e78d588cc4218a05727dda827c9cb0537b485282e5d3e570e65e8b915116688facd15377548ee683d72f418ad2d65b934bda48383083e8d48c5103c8d0fc9c892962db90eb2ee384d43e33b1959a4650bdf6199430307bc1d66afb48082d70e63df345e14425e681c8910c7c81e6deaa46c9276802c73c83b20b183c4459bb590f582d64dc01cbaef48888fd63b32e24463cb48c7a2562f898ee18e417318c24ae34c29d2a1cd56caf267c7b9584e49f23a472345b42fa4c861bb17d96e8952193caec4ec5aa96c39d209d201de81c681d1218203dfe174d077e83bfc0ea8741459a0d50a1a479803d5f1ad8eb2623462c8c8082d56e2a543696e1a2d0a1117da72a410709a37c9a20ed3ba34238925c7c82cad2da20e650e8f0ea87414b1a0d58aa23a920642ebbe1c0408cd43081d5d471847ba235b0e63c7d01af2a38e6315343a24c1f1e00ed3d0348962e778e7800b07111b5ad914439434ce90912e6d5b1c1d92eb48c80b4d292f0e74073638888cd136127187b2c38f83924396ee5a760e634813481a43445931d263adf4a336ec4ead60afe3d80b6d01858e173412918c63049ab653401daaeb20f9a7ed8953071e0ee378e40c7a121a72d30c3655a4665eee3906499f9a2645ee72bc7298a5834483768384da51882c8d1b323246db1831c44ae392822c8e6688c8d251d60cad586464448b17b1e838ff4d5bb510e242e3900c718ce8695c4b904dd08c92458e798e841caf1c6b3a761d7f47563b8a2cd2ea11433aca86d28627230aeac4c676e80b97232f4340c21a1ac6b6def2c736128697b82fc1069098cc16b081a0b11211c7b2e3cb1195ace2edb4c25a88a4dce71ec652ed708c633f9e4f7f954dee46cbeef77aaf9106335930e819cac808245a53447328383c38281dafdc61889fc63a1971a635caa803971d24ffb40de9d081eb70396870e8e690bfc3904adac2c8c895465a3eef28124d1bbe14124ef34ea2c841b64b3b9050a895cd46a6536be9b63c39146f63c0f25923ff4698d64bfcc877b8fd18b1230506f297261a56edbfad743dfa2c4aa2e61730d35dbbbaacb9bd91224d0b66c1efa1e1cff58484b15aa4831ec4a31c83f6e5cc18fd3c091fe5d22dd40dd0836b61288f8ed38c291da315cb809eab4f925082e56c0c59f8c9772ca6fd49c86a2f01dac967c842f7c562871e700c97c297c72c70163f026f4684f63421d434f9b35f6266d8d27915276e2722c4064aec89a6723e8fef9e92eca9a53fb7747e09d3bc4b6247df118223d511ec0e1231da34a590312da6fc8583ec8bb626ee1c8fc641a4bd62b53a2d649902cae615645f40103a6e0e3210788f405fa919bf20fa87af4c184b290211bc67dee760b6aabc8f924af94b76117decbe1b8d4fbe1439a4b13e6243ea03748bc7c57e09832a19f822516a6684519511aa708c112ab608d8a3b5b591f5d2922da594522629039406ec0505061bd3d9c2ef0f03ea4983ff05c4608e4f8c71c5f6afd4cbb9566fead99f76c6283918d8efa2d2192499389568ce607ebef899465311138f09e62ddf7eccad0545a6cdc6c26c39cc6db697b77e6c3eb61e13e77bff8dc7b663d3b1b5b0f14c9c16987858b0e5d876260e0bdb0a361cdb6be25cd1c4e3236e42b6ff363a035ede9ffb60de04f32714ccaff0ab4015be8d3f05aac0da38b40126bc52260d12b3e55266cb5fee95ed578aed7f8b1c04fffbda74055ea2bbc4acf14f81978959739bb853668dff075e2ab3c6df04de2ab3c609eb8137ca4d02bc4a8057caacb9e09d5d23ee11b3068959e3cfe15cca78c38057caa4f17f01af1393c6b313fe9788cefb9a5910c6beb37ab36d77bbdbdd72b6ee37874c5edb6b16967ecbb7bdb657faa698cab91f387fce34eb3b8be59a56dfebbb0df5ac9935f339d3bfe013edf6a7fbc6fec0e7a3a24e0dbff09b35d395727fb761431074cf75d29f3fc7364382fefc26e8bc855a0b75f55c9f8bdaa0210ddda4da628d1ab7548236418735c21a95067b2efaf373f65cdcdcd9d3516d779f3143f3c23ff26daeed1a52bd4ddf6c886f3853823d6997ad027be37a8e82fbfa737e5ba4d46577fd39f59cb65a7bab8def4d9fa3f4de536f8684ef4d6fc2179a50f25c2ebcebcf2eae29c2dc38fcc067a3f92fa594d209ac2c8fe5d9f3ddddddabe7cab502d55a6bb59e0b5b6bad75ddeb3087edf9f75eecb92cc6d855b338919050d0e0d3a0792ebab9e7368cf573e18c8d8d3167eaaa67a34bb25f6ced560a3a30b67ecf0503c3a8c9a16889f67c4ec7b10aec0dcebb9d1765b2edd30b638f506fee7d7dfddf738bf5c53b43cd64bb6cd66cf9e88bf7f59a3594fe0eb26bee05bc990d9834febab210c0d9af16c4db06def51b3071bcf767c002268ee9fd153071bed3fbe34c1cd4fb2760e2a4debfc6c451bdff8d0d0834264ef7fe0838800126ce8c89a37fd205f07c082b05f0cc0861f5e2148201abdf26d0069e1921bcd408e1e53bbdbc0a54416f146a17afad7d0a54e1dbdaa34015585b0b6d780975a5394d10e873f4debdda1406841154a96dd347d13f7d25d3a6ef7d75d3e736fd8dbea6b3fbb6f8e652fdfd02ae52aeabe04ac8df47bd124cc0a10e2d48bb6ceab9e83685ee71bae429b8b65ddfb56de74cb4cb9e9e6bdbeea00afc467537e2519e501f7213ff31527b78f4ec6c1bc48a1b248a4df117d19b1bf2c141886ccf2121b12dd23d85f808d941dad3688b56df3d875c8062d3b72e146dfab38666e17e48093ee4904f934d831cf9e0b0e96b11d8700306224188d84189122058cce4a085cb114054663eb678c678b4b2b11618f8bdf7de1a503c562db6ca0e3558c1c1919f2c9cc4c47220ab5c11440f477c5cd1388b204a9892606ec71dab96252a152c6812ac6445e3de7b3b7defbdf7de7bef571b085122830b376822880c5bd4b821060409932e32e8c06592204398aec58259d052fc7e588b86f197b9d47ba5608cb1b6503801c30f21a680c244162b40628b19d0d0c44812319ae3c82c7340e4881051929c3499a288223030ca52840e5c2c942b6245519c20c1c50a768680400cbabc7c2802062e49b015bafe06c3dd71c7aaa5a70a9962890c1b6cbc8048e982072976d0c1e7c447ca0e3e7a089144de50c71a18800486860d318b4589120c0487bd2317ec2306aaa4e65c93c8393331e1a29c738fecc4db2a7c64c95992e018c67247782dc94207452c3082cb0d263dd07044febcf0a448101e25ba441bf9d8e22da14e6a80040964c809213c4c2b4db204a1c1131de008e2e7abf0a144a622e79c73cedfa5124032a285a31f19b000640eb1c5080d5870c3153698e207c94d2346a24d4b199f74235105a185247a66c042100ea2b8400f43c460c813566ce1838ddedea0267143c511c2c5121d46253f5222f06385141d418678818b8f1e21536856886c083890c2071521598078d0c28923a02b74b820cb0a804801002992dc7befbdb7d34758f0d044081e8874eca0002439a040828b2e445a4c51ac62e019b1084202c84845173400e930ea790d5d59c24b4aa0d02284831e2ef8b971430e4a2d4ab22052b20045122d4503486480011519cca8055aaca8e1091d43560471c93d90342b39e79c73ce2a6fd9fab13ed5ac37e7a9ed9773ce39e7fc7df7b51fae42152f046142c78c0b271d1842a2c8107267063f7e60a1a98e1ad02a5890b860c7280b1610792008911e37c460f623c30d4af88924d4045b86605d3c0105f6d3ed80c4022237b092a5861f3ef50713535113386cd1c10f2c40e1f243c906443899018f155818fde8919df84a8481202560d0e2e7881e35b85c88bc40423922032c02424246464040d42b596bad965a6b2f1005ba17531e1e9cc54944447e76528cf56b620a1bfff6da86575bbfce6ab5575b871674a49cb3e6ddcf4dfa297a94fa9a387500ab8dbf86628e7d4bbdda8bb3d636aef34aa6ef844aa9562f30ac181931e78633b3e6be983514860731660dfd1be434fe4f74947b657b160f1207b04ba4fb48946556c288cf4eb9e213e1637ddf9e4342ca4d8be223bfd9e742110b4276b04c606d8b07f0f8e0e40a2b8c7e902dc032e5ca0a86e0019ac184b5a8d1a95e8070f516356af4ec14c142882e8e28e9f143128e24aee4a801ca100e1fd5d8516387aed1a95e183193f4515145de73c8051e432eecf854b169079aec18f2c121e76c6b74aa173e4d60ad888f8b01c537db628b89d9e778a807d195df418c20bee7f1e5269fe38b51e513bf18557c5fd6ba8510b4d63a3f12eb877a8ef6cc9e433e40b6b7e790cfce165bb7059c3f37a3eab848a851c3d69bc35d2fe773f844ed3ad872261d3ac24e0e17386bb4d6e974d673cdd9124fade95279f65cdf478266cad9bc12366b9febbcebbaaea35397b4e7b2dbbc38eb0d87f3524c85b33f27a526d7dadd65c3da39fd8704ce9453023869b6d65aeb5497eacf1b4ee9f882699ed9fbd36e71853abb852784616c0d9e3ca17a734279f654daff2d9e4aadd48ebc6529a699d2d7555bed6e98bb1be672a7bddc694f2b6d26adb499b8af3b915bc77dddc9439552333a14fd147dd5a4bfb21ef3167d4a692914f4442828ca8c74fa958e7ea51acd2b47e509346aa593da907ab5f756a7d7abbdb7b317e70e67ad694dab4eb52e6b4ddb388eeb36aeebbc92a9643255a726cfd32999becee4e97c27d40985aa4e51309e2bc58af15c2b9999979999ea74e6e4e9d06d41cfa5433bfabdac5e5eaad3177dc3185d9a4961db9f1a635a4be20740cf13f29690b7bc2742270f752a8f4ea77aafb5b5d64ffa6af5726036a795def2231be0b6a186e4ad976e8b9327742a2b4d0e5f625a5976930cf21b8fe234f477ea4e52d2d151962c57ae4cd9a25696a04fc086da863ef3561d5f4a1052e5c4b9f82787434b42a46d71716c4217c6de84ea4d09a9d2f83bcf4dc9a06d91648b25a45289c354a9ac9567d6dc97bd3d711adf84bc25e42d7fe2ad52b9dddff4721bf1ceb6974748a5a4893375aa8cc11fc927da5d5fb6f59e5e956d07b8c8cd9f1bccf189a62316630e2ce2a32572d6d4079f7ce2e5d92898edf91ad0c4d1beeacfe3e5d1c212f9557cf4453dee5a2d930c8a9609f8f866ea23376363fe7dd7accf995cf5efdfd894bad7ae73d9bf36accf50c7da997b59b56ada7dee3a9dbae45adb705d1562ecfbd5dd4eea25f1c6be9fe7d2d673d91b82b3e67a2e3c43427efc39b45063cf756fececb9ec9c5adbb68dd3b4ad9690c31a352a8db65d8ec5e24cc8f8769a76efa340bb541bfe97bbd6daebf6865a7bae39b9cdf3af209769f77d9d57427edc7926e450579a4a633d4f84b96fb5cf599fba642df574b6145cdbbee1b6ed57cfb5ed2edbc5694f47dbded4de0d6d6c74df502cc1b6feede038137765d5d3c1fed573d12e3fc39743eeb376d12e7b7bd112cd39e79c1a10a5945237dafeeeee9e410d33aab5da2c64adbdf4621127c11e0aafe4d3af75d98340dedd73ba945fef9c1fec5eefced53df71bd176ff7af3168a1bcff64bb43d14f19d44db8a27986d105c99e6a82604579fab391ff87c56b629a594d208e45db46b8ebb7b1deb586b7592cca939d69665cebd34466339d8cb79d937b77ed9477fbac40f6cfb1ebaeeebe5552bd381b17d3e8e516ecfb5eb563c36a62db3e5a692526a2ab7380d4d5866cb4d46de72b0fe0bc87a1830e602e9305b3219b1b555a08ecfdadf66466e73933896697397e460fdcbe78879983779dd9bbc12647a9834342e991e66cb7fd5c244a17ece99fb02cedc708684978779135e1ee6efc3842bb8e08626c03c2b5c21e6617e05d6bffc8d106472de866ffbd553d4732f032443d69b18d48b75773f27eb0320dfe559f18cf506e6bdf4b3de9496cc96bf586daee93395a950646dff18504f1afa2c70ceab034a464fa02823b45dfcb6682a474059e28a47a6872d3393299a81e0cab678651bc3f65d326d0255aaa040bbe4a042858a575bafb5f8de8b31c678894f745fa22c497289cf8b8036f56dc2cd662a8fc55228923cd171fc665191694669cf7f2231856da33071ef8dee547ea3728bbd1ceb1fab662fc7daaece4e5f7c2fbeac8fa36e6d0e2d08b2f0892a8cb9e936dbbe5e4ed5aa66278e9d35d4ea50dd652ed5cdd747b84cd9e28783091d443c4a5089c2c411ff63f6c4e77b0e11814284881d6dcf2122558298205c2124471053aa50b1048a16b040c961684bd14f9136d2e88ebcc4ce6f8918d91eec39440487ed752982e366d4635e56d2d2f1cea2191bb8a32048e503a98054be49439fdd2cdc8bbaadf6da7bddabb5f75a7ca9689390c4bb632fcef627a6895628e889509459ceda6adbb5dc731c15ad110be338aeb35ee95a93d1952c4647e5d77d5e8eb5a7cac3455db5b2ab5575baea9a78cbc5ea03d066b77780d7a2f1884fb46eb1c6792694ea2566c6035086ea8f68f9952c3f7e33c37198e14d7c98e1413362f4c86f4e48f21de7e1339f9634c86fe838d227238d32d229e3159a65cfa7e4a42435427f70209b903eecf91bf01b5a561a7f9da54c9a4fc713dc06ff948fc27af2cda001bc0c1a7eb3f98cebbaaeebbad38bdf66fdd36a65dc9f3e53c9ab9cb6228348922455a3cf388e63aa08b5c96432d9ebb5f37abd5e03f0e084a2a259448e5dd7755d3763a6da3366cce06a91662a7955a5552e45069195e44812e5554ed3a74e26ab4daaaccaaaaccaaaaca69371e9388ee348721cc771dc092fea8fa5d5519b4a5e574f5afbc820922435921b7dc6711cc77aa516d5a25a548b6a1101044083da94244992d4344dd3b4718abef28de3a89dcc5e573953d61a19449224498e3ee3388e63016a68a9b5d65a5b6badb594aca2ae244792b9c4ef7595d34a58db8d0c22499224677405e8fe882f168b85d65a6b2d2d6949cb2391d212d398fffdb9b11bbbb1f7ac2ded11674bcd96da96d996d89606e80c70800320804687008e06083620d8d854a7363e6bfdb358338f692f6af18bfdd644d7a9542f5ec890b1c51b9b89d7019e7d566fee14222f9390bc7dc33b6b62a6791bbf32500ec1b068814101bb4209d88c06ac08581232580f6c07cc4905aefcd849e2c2852e32108ab8c18910586260c396dc428d4ef542871aa88061062e5692e0814300701831c50636a002a527f3e42b3025b32eb01e28603bb8187e674852d19023d8ce95214986c8f00d796188cf101f435a18f21ae2c39025863cd962cbc149b5cb1a29bd76787c4663bad6ee488ed472a48a43bd89f29ac27365cce21d7949dcce86b4257942ef848ab7ac303b835bd206eaf089b7dc92ca235b7a3de16644a87fdf556b75a9543eab87dfa5b3623b6b72adf97e9fd65aad341ad7ab6bfdbefbaeb9ebdfaf6fafcbdf3ee7d9f077cd9a3d1deddd70c686b6c2d6b625dc948171ce1c97b93cbd25b6f05fee81f8f2cba6c1c78562eef47361e6e69c73ce8be44294524a851c66e4eef5c276fe5a6bb5463be7b7d65ea09df3df8b45cbc3852fc40b51f2c2191b7a7bafb7178a296caff47a73ef9ecbf4a59068e72f8599f342d19176fe50c44976ce446fc515661b045546abad75e4464d411d3ef1b321c0e44ce2e1a3ab9159634e185e826138493d52874c1a7fbc64dad49ed9f2afa3b78ed4182a0cd5482d525f9838442a6ce20cc1b07a8365554875a1fad49e1aa402a9e3c441c930acfe5424dbbfc650a7cfb452a5b0a6f3c695bcee05cbb06ca34e9fc9ee952a85359d37aee475a8d3675aa952187572df9f89ee92b7693abfe092dd1bc666f96ed2ef601ea2de63788bdec927b61c93db14dfe75d574d24b058ae504f95ea039fcf7eeeb2d6e6ae7b21cdb32e954f8d6aa5fba1f581ab3f6588f8878f7e80c75b9687b7fe874fac3cdb5e226fe1177d56524a6904b2e8b1d2887477b7ef4664add588b4d68a74dcf7d68ac51939417c5a9bb1a1f7fd14767e2dbc15ccf9c0e7a34f3d170dbdd3a9b1ef483aab7d79785ef60d7de62d1bd2f7518b71f839d30f7da2ddf8c69ec1b8d6cfd5d53a5ddbf7abc57adfa7f47a22dc6bed65618cf1c5f729e5b257df1361ee5bb10b670cd22ef739d304eeae5aa35ac9feb612c0a113cdcc30bc41bddacb519ca3f33a2ee79cf3d58f5fb7bc359fa494524add9b801727985dd910d0ebca6e8023c803f4819b1081c508398390253847bc86e8d184069e2996b032a4ca1456ece0c30717661437c6204d604fa83cc14411aa19886072859116301ce51e5ca680c190c3123178c28a0c3166b6fd3b5aedad1767725a9cb5767179b3d6369c1ab3b529727ada676de33a99d63a4a29a5d3528ab1a6a178b63f87da41f1d8fe1d8ac767fb97466fb97d79aed5be32a0263e00c98248996be5e5e7bc4319a1aea0b2a08c5045a82354892aa223ccc7086cfc898ddae768a450d01321d2a6a2a466def214e9ad1452ea289594424a953baf5469a97badd662cd520ad379db6b7d624f6ec9dce80e1c883ddfc989a3f910167beaa732ec99278b098c15989e97a095162b242a292f7adb3f574b431693ed8f5f84b1b2fdef5656989eed5a235f7cd9565ad41592edef5a25856eaab5b5a1e833994c2693c95eafd7ebf5fa4e28544ab5caf88536b1a59bc9f6cfcad7630a2a69514272398f9d987c56be9eed8f4d415ed2a284c4639e44e6404eba10499224498e3220940c2543c95032940c254b7573b5eae6cb0447606138986e62bab9b9ed96e2f1743d70557045e892ed6fb7d293b2fdabc7b3fdbdeb81eecb55c1152991fce53c238c149a1115198da8225411aa0855842ae264342eb41cb4137407db5fa3e4f664fb7f1a17dbdfa4e5b0fda97682149a11151991244992e4388ee338c2e862f49881c059f890a6a3d51988ed1f93711674d391c2688c2691019124499230ba1819d3b03d0acdb308d3806f94132a0d7da352154352c554b156aa4c9562aa4c95b354992ab7ab542a954aa552d1a79b86aa98b7fc61768e29b03863dbf0e650c5eacd8c1a236542402a72fb2412dafe5c8cee6504748b312fcb4318f39a353bf8e88b31afed31330b20d9f22131d30194185b3cc982081fdf115fcf5724862257b6cc9e4345b828726465b4c8eb589db4e5a5b1f0f5897316bec2970ecab2dc9c78a3a88e4e963466e26074137ce14140056346c64ba2093c908961d5927882182c9897952d8928f85b12570071494c41984ba20a36f741a84bf4ed0f2fe88ccbd418cbbae107403e3bc32915068cd9cd68eff4479838f8a9ccd3a7e5c48979fa4ec23cfd5a34715e9e6a7f5f03579bebbc92e9e36228ed8f7af1189c41b2bb173f2d767dfaf269f1c27bf114b4eb3bcc2968a6f422aa67d7afac1e19d38b282bbbbe8d415989f97ee665c0fb2f4031c584757a918be9ac4b305e6f187f71bcec17a0c8c56036fdd4369b3555b5bd66cd6bd97e058e403f06a4e5aca1cf029d9c35f461c03ace1afa2f2bd59d899b11bb3e0a3c5119448a85e840881508e7d537abe11b6a201733cd268ea671316c55337423e2be685165e2f7255a2617477d62d3176bd1aca12f66641c8c89e1ce41567d98dd39f87239ede17d6d4a5e13c7fb1acef7402ba31cedc25aefe328c9664dadd5f4c2f2892ad56ce2787f354a7b51a69489cd9aba8a3d159f28b38aedfa316213e73efeed2f2823ca94bbaa5eabdd817373a64da6949161d7d7aad9f6122d93d58dc151cbc34d19a27d61654e678a5cc66b8c936e59a55f8a5f64e85ced49ad0c07f1fa884d5f04b799414fac8ce6d9a6ef801a320640430133a808c987a16caaf267bd9041a3c8cf586b78e2a4fd21a2bc3408d1189e61a808d09e4d369db35ce4678bdff622336cfa5f911836fd5c03eea5f81d5dbcf8547b0e15d1b1c5d60dfe49ddcbe1be8b8a3377a534f5411d64d8c000fcf55993abee7eaf5fbf0ea80e5a9f618120628a18505ee011e1633d12112a5e38524d1beeee6cfa17c7b4d1f8b4eb8ed9aa5f714c1be7f1567da05d2b6c573a0b61ec5be4c2aed135ba46d7e81a69b7b9a3b7aacd85d5f71dd326f7e4d15b63bdc9b04a535febef63b1eae79610099a6e8f69741b5369c88b79b0cec808d8ae222ac93542c5664d7d074f65ee41fdecfa1525c36cc132e99381b22cc760ec1ba666b3a6fe6fc1372c0979b4332ae219d930b7f188cc2e8bcfe8f1e8928ceacde9c869ea9f92ca9d8bc46357940fcfae2823bbbe88c75d3d3c95deaaff487c1634c1664dfd29346b36d8ae523efad7035a55b12e88137dfb6d79fdeae9b43005360ded2e6df77250b8af170a32afd76bcf9004f457788fc05a0f676cd8edefdb4391039bce4ae347be4a955aab755a96d65ef77b2fc6550299e5a8c4cd5606b164686e0400084000e316000028180e8a43a2240ac22c498bee14800b608246605e349408c3b1589422418863188e3104180200200000030c84e84c10001b6331d82306f0345464a64777f966149541cc400920b8de684a298dd1f714409a76a29e5301657c9aa9d97a2eb582c6e78b4513c92977cc822edaa0d7322628a08782bfe28791dda817033b35806794f3457370e964050d49ca122fa3644a0523dd0a2f0940bae79d0b4de3a80017629ac33ed3c51784929271cf35a737c5380962ebd64cc3b88fa1379360e9765ef340e86e22b57ef5e243d4f6743d1483c6c4eba85029fc4f13ce1b94f889306f948d75f6216f8aa2341db3fc9bfe63a9ecc6c3abbcc2a5bb6514b29daa64ffdae5f7d014d41de1a550ed2c2d296a1a48219c142526550b0fea55b7ee6ce5e4ab3ca87bb7652c7c02aaf2f549867dfb83f11225af93a90aba2e435b48d0dd69abcb497793f60f75a1948ce32c5f0d7468455f43331ead9bb8a1b00d4b1c45ef771ec2a91051c0c6e222a870c83d80037fd40e8ec20f838ff255716c5cb32b439e0efbb9f70854bc44aaef4f8f6a8264e07fdbd116f3ff17c5207c04fc3efbac75269b77ae19553b634a723304dbb387eaec306b1bccc92326025f46e82c820f14e4035b70a15150428db6af93e3d40f1ba5e0a818fa00aa16c51e37ae77f477d88205e6001105b5bfb81762a169561967ef6ce1550bb48315cffa905d9c8358e9e210059a46d8c165803b6584313c0c5d1460551e93212bb8a84f654a17accf0cb38d359b968809198d50c7aaaa5fea682a33a8e516c445bb93aac2e459c27b99bb5d19b704907774400bb4d486a7f221f670d17b6886ac4194d4459ce59886eb18df25f02448d8a39492a64390af1b1b3c72c397e229ef953c5b809e869e66d4cfb6bf10bb8bd326e908704ed215fa4ba743833622c3f7465ca9a50da15fcec8fc21a393dac1f922bbdc292dd36e012c1e50655e0344b692dd5ccbb751f2cd0c59faea1dc5efc005d38d835f06e5b8a160c13340e03abd3131c726df71fc3281f7c6d1ce4112c61dd4d11d0ddca11da33afa1cd765866420d2d6aedf055a3112d751b5a3a0084b6a5f88b8563370e48eaa33af7d3ebd50d7b8664d04e58f07d291acaca1a0f4f3c43a85853514a8f2339027de192e8c99a8da5f19d78616d11307d0c90b5e17b406a2315dc52828326e57f9848ff04a95dd70797927e81d11419957850f815364790e9009f3c604d7275d296d97fbb8c4db144c94eb89e5ba096935a06fee21ca57c3d27bf827547ace57a283165e663ac093d6780b8a3ac36df869e6eb40b2643f49f15b5aa31b7662971742cb7090ab7c4c81709a00f8a283021a16305814c0659a914a6b06056c8bf29be552892a1bba72a50bcf14822911bf275bd272d6dadc38321e49ca500a8c93c3c9c73a84e42d212dec04d60ca6595b361c09e94e3a82c9c944e61f7afbe502437c74399a332db1c7bc40fbc94cc3eb03eca73c0ae001cb602be290cec3c229647c5a44ff5750e261cfd1b646d61ab8677a5a3c75d3a757c9280e9b0aea7ec8f0d286a53b6bd80bf4024140e5ec1fb8e2a18016aed00f8208350683198417dce202fc34a32ac497df02e20df445e3619accdbb7a674b29658972ca65f86aff8408df77cae4b680570c7367cde6850b57e04bfa0deb94be9a06d6c13c5c0451ef0a10c7f28f6470192ee0675ef7b5dd0c8e11c6fdc595a3b83ac8acedc2bc38bea8d03e4e20da72b3a399443a9e7ad399726c7544831fa065a6669ca6b7873d625350c492366172e51f3c0f21a417d828e3c9dc1e090fa64d22b18fa35c8b1e394cb80c6be32bce11e0c670b44a2f5d262a4d560fc062a51264336f6da173fcbe6ab267143acb63b714ebc37fffb07e473cf71043b2e0bc6f00d187508f3f24a0afdb81f3114f202be59ec277b4060f3000b4e58014817a010f84ee67b96d4f7c10b7bf6260fa61be5066ced8a48a91cfbea28ef0a8ebe5fdc2fdee923c4f8dd207a8bc4bd98d982d67661190ac14d5ce44b4dc07b7b554055a4a05aabf786f6788cf71ddeddb3d2b51bd8954e18786fc2d2c43a67e4c2ca8fbd8c00ae78cec1e18ea29cff82be0f25f1c06ea50b4bb0abe86ec7880136e38180d5f5c0bd7de32c3f85387200017e055ea3ad447919feafd2a76875e6d3b8c72cac9da609fb71d969dab7679aad663500d1d4384a06b0867dbd6238c84d159a23f2e02af8cea6c19497a68988d3b117092780af93dce355478c09a157f8ebbdbdd8f5091abd0f65914d8477efe45304c0b6b2b7c1a3504e0d5c5bb0620bb1321dfee7b162ba684686cfb4a5bb6a8f7cf8a6768946c5993f5a93d7bbef0315b9e0e52581b16f8eb061f108a2525fef819af9658bba25003ef63a8635e6263fff959cc34c59a490defcd8192fe4216cf4cc883692916237804a39b2187735377b7fd403cc08f19bcd501cf9669fda69288d324a25de52dff2334602d5bb4843b7f0c82a5b2f2d007e13686002144b911c374eeeded28e75602bc4d8b97ade1ba68e2c35e1ba2a0c1e81778f7949ebfa8b53f9801b8e63e953b77be05ce9e24ae4df3cbc187c413d8d2e251d0a0158bb9ef3bdcec0a37ac4db07b141a42a11261165d2045c864a5f3365d3856364b7b8003b2833aeca404a95e1ce4061fac534379a1b855ddbd2a6e1823635ed976cc3e7e97dea27fa77ff2c8f90e8283047d8d01a1608b6019971208be72e6fcabaeea8014ba9c7b540c17598201fddfb0fe755e62fd94329981436dcc572462e29a2b343d096c531de37baed0b28b680671e329476acba7010e57082c2b7327fefa12d03c8890bbee83fa40b8727b1de82a1927dec832e19a19bc9a32a0dc442a8c1982eb9b3fd9cf03eabbba57703030091a1e8775f866cdc7cb9f25411010ca334b38d18a1dbe831dc28d551921d5e8004b7f0708e0ccec7d5a299659c41a0340af4d613c8a9136a54e89b9be879591c1a73e5fa0a5b874da2f7d57a41505bcddde0522e25ea726ab96b217236a61537363cbb247643ba3d6a799d143463155cc038c75e6ac4340a5727ad1feaa1aafb9ed5196c3c8a24483702b14a84208824258bd26094c4222b1bfab15cec41dec342c8713de18cbb93f05909065b8fecdaacd8c15295885747db7ba26c33df5a01ca379f3beac476b2b0bbb5c70d4ce0cacbfe10d68ce8c6e869fe9d6f6a6f7398f2cc59b2c74b8256a744bb43c27e0510741c9a39f11d087c090e3d362917491af0d19347cca497b20c2184d182a1739be370a37002df359e354a75e7c4a836e55e310a58c93db3221128e510290c5aa8c806b602813f802b30cfdb575782b4722105638d097b9f5d119952857d9517b6175e079b3201b2de56181826f614a4a48e98f0c3597a18f477a51029c7f29e36d9e58888763a2bed6ab2b7be09714309e44afbab038cd3a172c6c848e50e20a90cf8861ac38bb8c483d4c07616f1576a05aafee8585bbd67e9496670e2c364b343c637d2c7b7c0714d56614025acd6e22aa7040e3e242f42df5ef9ba5cd7f5e22cfd57713a7d8a0c3ab27f0d36804fa5e253a42a51e85fc5b8062862be46637ecfc4b06106d901ce76707047c92344309e17bc074c0043d00c998a1b4cb6a06bf4dc7fbb1af16604a44348a4613a676f6e5dff2527a91e16a1147920e8b88754a5b0930d919b8c4a3057824c7306a516816c98cd724bdf98aee62997c2a568faa02107defee690e0cc5c91d3bf5dbf143fa74560140272cf6807053bb4617c429b875302725902345e75ce0f09572163b7bf7d7625c584166644304eba295e1fc0c85362bbd955ae4c09e5d50dd623bf397646907ebc5aa29050c45f5dba6ee43856bc6fa72b7b6c81ce69ccd9664ff400374aef617e9f310f38f6667b560263a40dd055948dfbee97d3815f86ac39520a9dc3349dd192104813b59d8d0718cb9a8d28853d89eae65237ddd313c433fc538c576938cd79a6fffb6d687ca2b2545282b1780aa676899e3401b3d79513a08e435622d43f275e930a77d32107cabab1772b5d42216e9a15ec8818c879669d89902d342b46549bc8248bd144f95c87a254076b82f958b43e3b831a981ee96150bb831a576cd70801f2ef7842e847c037bf44e18663389042e04bb7133e9a663c262ccce365730eb0addafbf39c9a94cee7a84a3fdf26547560303440ad4d12a1c8a58784501d8cedee368f784beeef0db6e42101b03f27d987cb6c9725293c8629ab5db6ffdbdd6b959eec1e53d0d221f2e6c8c280520e09b9ac8242661e3f325dd63f6f8738e6074d89e0fe6a8a519a40ff3b960c935b6ac66500b76a36b85ea09a3355707d00809524f1896b77ddadc132e59d62a9694623cb412d92db92498078ad317bc6d11681b73e774b5f3dfb0ff7d420e2f73337d3b729ed0fc28acbdb66fb41efd3525942084c4ed9ea7fde9321a3b74fa20b9b58bafa2e075175858852696cd698f70dd2097c37f968de744f2fd9b08cdd1fc50b47f3f09621be71f305f8696a946e07d09d14c8fd2bc08395adac6e7bd61737dd5adb2e0218d9b2d04cfe26a82a74f82f1f70ebb3efa7f1d4a461f66a1325391b5c3738da4534d8325e4ee64b86a921192230b521ef9b24db18c2e0fef33bb0ab065748ee95ce29e78b4fde3195565467761fd8c8faad816a36476bfa3a29e7c8635b39647b6d1b371d462ab6b92ce9c56712066864803001c73ea64294779a8b16a17b5fbb1d19ac1d11a03e9b92fae87ee9565ca11d999c54d762766dc57593df07f5abbf68f3c303520ac76443419d1f598cd5d65faa742dc25ae9a906404a2e5e37bacf2dab996d9b6bcdb3cd5c481b74b1001cfcd3a4cdf51ccea8ac9d8a82c22b32db9eaaa85f1b16dba6f1333c5661a9325f7b4b3ddba943f2dc07321bb55bff6a53d5319051b64fbb207599a75a39c233bd1c749ea5d3fdca5e09b96eed28e050ac796cf621d06585a3c29dbf1616035db60c6fd9b80a1a564730cf1c073dc903418d8b822a57be63752817aad7d91a3363d3f5be2e58c064299a002da317020d59eb9befb5ff168a97cba341492443453cf828bcbd0d6aeeb7221106e598cf75f89801d5562674179792d4af7f308a9ea1c82ce783b82a06097c4cd256615ea6ffc36641858298afe8527ab5cb775d7e6023a9a10dce05d6741591e90e223df12dbba283c7311a3d707c67eaa2a8ed98a6c0f5b70ead59f909a4f2f9867986ec01aaa5e712bdfcb60b420e969fc8915911df3d188d42eb8235fce4e6367d545d5bc0037080a6e0e1442962fde2fd56007cb7d53841d9708f16d848b00eba70cac10b8da7eee65127229f181dfaa23696b14e050902547d511cf9a4f518c7bf91eee5fda3533e0ae4da49395f2e41ae52ea49c34715351d8a9237b8cd0c2a79060de708807c3d48c07e0c7e681600430795f3d085b224484ccbe1a5bd28b0f2181b1b474abbcca4633b96a84958e10c4f10e3a84189fb9f90314ae9e9c3ac13f8f7e61338430d103820750145d5a8761dee27ab94ce6c4389a1ff2f48858f6d4453dcb4063d4c83be5cf3938080b2d99ef34c80c29c5b5eef4343fb08a2446b71e6520a89288a06239dad0b0203e31889e92f4303a726ade9436292eac5d464e7a459241d65cb1ad15487303215b7e91eacdf4b3904704215c1a8cc13148ba98c62cabad71ed50625330ff2d958562238c034ad27110c8234bbee19be4a513228b612b1adf7219036b40e6ac49f1bc158797aeed8286b9ca015877c9911906d25ecb59e1c9652a2b26b9d9a1990f2bd8d354b5641106c0f94d42b8004d918ff532404613fd43efead12f0de68870a3c4a252d13bb730c5a8269d6274bc472984b6449d14a2f181a0d0ed709c4b49c8e447a0f8354f325fb8cdeee9347cf3e81747b63a7f3042195500332bbfe79806c74ae78d37d4e52405a31ddfdff0c931f260f21dceea1ae6168fd99ff87267d0195b4793e26b39caad62d2bee6b81ebb7e774cbc6f2d369cb3651635e051b55778325041b3d547d806ae96774868718729336b4f84e0edbb79e8de9cf0e2de4a604915217293418b84d93c6624d43cc8d8778ad3f7fca05523fb0cfbca16377672049fd346dca44a7f41e3fe7f8e75509344d916e02382ac93d7af510630fe07dc2fdd58b329b02f64e92450010d645679c423c34bd50c6d6bb1f9ed60783fc1795e092d4472e90d3ec7eb9e4a2ddfe2cb4dac3ebb3ce3d96998944c059c041073865824965e8d032c83fc681321104d90873fe96ef754cf423c18112b40540b3fe398deb0452c1d18df05c4a7b3c2d7425303cc4cd9d3164e2b6701fb54e4f7c7782ca55b3f8384e30a9841175b8fe98f26c619842427f09f6ef7164c5249384f4cf2476d44e11f387fde448bcdb7f74d3a3aeaf4478b0dc28b53dfdaabe506c021ea0769eee28c5adb80a72db20815ac8c313d94ac4cd788e180971c7c9eb73d071ab7dee21a80eeb0195d4ea3046f6170f67471ab6f75e19e936db8d12d01391d660c585c7ee58ca3b94869fe338f90bb410470ed4136951e196d29b5107116f842350c4eb644fb2a6fa45dfaa7b4fdaf97b6349cb063414850ae5b91f688b1b9192acd1664eac19dd63a89753327c3a4a307e1bd36f43c5e6811a6bd2be3b152bbcabe214bb2c2df51c559179eb912170846e14208c61467da4869ed304793c1e886cb8be20879d8e5d142ec3bbe7bb36bc61eaeadf95b85f81d2a7c9be7d62a02e59ba0773d8ef05d9ebf5e034bfd37c32a02ea0db1b03cb8f2ca4ab59c04de9cdf723804802228e74f54c4bcb284450bae1a5c83640e646a858eb96a2fa8e52118954d78dbbffee90cb3b5fa7d4629a02a80815ffd6cd8c42a4f34f1a0c057154e0b3c69c29596b88e396b6281b9e76e5caf87763ee8a7012f9a56feb1791980fe4382cc7399f8c0119413e65c0cf485cbe82ca35e4befd1536cb8acc64502a3478b27cfa223c7301e234484ebca090b2c50646f7dd47d54c36e8149f67549dd8605c1f84cb383fba3cf902b970e442ee6bc540c32e3908116838da188498ee5d4b2d31ebc2ccda45a53850bd8a51eb76a113634377b6cc0858c10fe7d54968fc33827cefd5e68d4fb5f37cb9351c12ed089f5d13f579b1959efef8e66e73b677b4e04a1f2e6a6087befa0c16f007b03a50bf5c55a63623b5a6a53a097c75b403cec435c2436068840377c1fc8809d5584e4673d8cc74bff0e57c6d99fd26fa54a5b4784373e40e68ab98841f737039b6e689116d427885e3a057f69a4b229f732e6741533923e734140e8daa24be64a9922c6b8375256534064a2dcc564b23d497757e159d463e0d8c5d1bc6be22c6fba988746253bef230c604b1cebf1a172bb69efc8724a3214d4f72dfa808ceb8ea99bbd28bf827a99e89b599d80a3ccbb4845c8740c3d25c1b42d7fc73b5d0d91ab5883ffcc84058774491eb1087b0ed98965dc64b6d19db6edf639e89114dcd5029d7cee99cc6a98b53916ce2fca0761cee7093eabb2188c770b6cec91d381efa903e07aa323c844e73cafa12294a2445ad694ed4c824a07c99668c8c9ee5257042daca4f021a83bf005261f02ea7f16da79f92d612892e0c39b5cf5b5023ca6d2839ec181153fdb101073e497074af6e37036ba5af1fbe79850201d7b321b8c0af868d1aef02220967b14fa9285ff3533dbda774aa989329708ef05e6de5ced9dc84b880a49051eb40c98abf8a1015dbe21b09179f751f842c70166112188e64e52a56f28803d418605816bbd7857120d3b54759d3f6ec4ec84d86943e46a5c21e20ad8d82035296d7a2c6cc8b4a3fbc72b4d7d9f803291602667b42344c9c85591af17a4f03a90b1ba48ab2e1c0e989168d1f1a72d56edccbf3ef7f8fe21458de0550afb6287e6e2eb8c282c477f165110669915db7e218388974b61587e23858575a1eef5092d3b8cc9fd3360e91d85a62867eb58097adf9cf2d1bc15dc7de039e28494cdcbb9936565a675aae7fdeb9daec2cb71dbcaf45fd52c7ba9d9ba84c681324b94dd4b695d0867649c1a56b6c9ddb98f21aefdd54736fe86c10050d5a2051a69e03b02cc742280014ece191b5e5f387e6810d44d2e768a03e613e94ea2a0b84b1bd60111c20479385da201493a91db0d94c8c095e7ab351adbda25f840d2fd3c9389243ecd2192da35a9c48309e6baa57d44acada98025e1679e713adca1c025070e9369b82d203b036d1f11673f70f5ba7766e8b8ae36187951e9120149f7ee3ce9b20971d707882371036c9cd706cdfdd592edd146e468ed2d1633b1f80a6b303d4dd144759c4aee5ddc3881eb2ba533657ae0e83d8a256077411265687cc6cd6aa03deaaaf87309f5ce8973a1d54632b4c41c110a231ab14b6a7aa774977e65ec31c0263f1b8adf6398c5d6110db076fa627b731987b23ad5667243a528532b0500274246a441c1cd4bb6dc1a8ad91a0665f29292c25126969ddf7c4c9987e3a1b570891225c6afc5433c1b2747c0a74c74b52baa0fd33ab976ec077dfc7ed4bcbb8d3449c5a351782b383a21b1ef54a6d6c048b3665e00ef237b5347f498b6881bc798abb56486c37270577557ebec46bf7575a393ac4fa8bc513f637c294bc59a4151f21932b84f78e62f02a1663b974c43d7d23c74e168fb1a42e27408513e441787405251335af0b71c51912053887229b90dbbe1349f2e5c77e82f74d41211d7e8a90a9191caf4e9e2e7a3f0eff30dbc4779854ef4e3ed27e509f91b7e313753ac83752fa3774c10987a6ae759a00fc800cce431f02fb6ecc4554e8241315f89a32a92f288941ad7870fc58d0c8bc3ddde21c86480ebe2a5ead128ce5997200cebd8daed78f53c002fc9561b0ac6ccf64fd3e3e02eb71b042d4e9eafbe213aedb81066f9b0409058262d75d8c114ef0eb56f776ea1a073a5c10235b366ff44963362c40af6760370a46ecbc7837bc5b1213a13f2abeb073779d0b75887a5296ed0aee5c258357fe158b77cbf4c78db85ad63198cb91d16a7e74a2d68b903c78deb7372bde800d8ab9e44241a341fbab917ec15e2e8ff3edb4889571bc346799205687759368c6bb429b390145bbda42ecf2bc46e4185d322568e817e97d734084272f0fc965017c3976b151a36a86a2d9ad07cc185474f50a35a1b4a35633567fdb29601f917b9232fccdbb7496c187b58ec36c08a0abd58492dd051d946cd01edd2522af6ea08a66a3ded44564183c83152330caf3c37c8d792f14e814e31ffe82dc9ee95fe9e21513db201775a3e7bbbc5a168905b9ac4f5564010001fa7102f2b24162d50e64d7f9fc05a9112400cc186f511d75c5b9a2c9d733c86121b98d6d5e41d85b0b932d90c346eded94cf339f53ec65c9e4ea6ae85aecc52cc6bea9b1d5c0c8a95def63bba2dfd8b38f8dde2746ab1a09d9faa576e9b9aa9f77eb669f7e29e4b8f1807cf33de9317988ec63d581f0ca1277c2f2badbd69a4e221631cf2c5e1c84366c0d0f8b9315365031c5ac23c29ee3c4ac75cfa4c05dbacd56555cbc08b2014ad9a76e515ea20fb891df01461778ae9d123d57a3ab1b974e51b4d53c74081366cee647db3ee29ee93b3b7321ae49b4b3cfc1be6a2513976b7fefea081f7c9a41ebc4831cf351f552767cc303d1f5755747acfb0b056386e8a92cc2e3b64fe8ae9e07af9bf081ac976e054eac93bb7a3ba8224449b03d48841872efeaa7c7a0fde5ea2deb4054171f801b0ab87057f3d47dafc65bff860cc9d30c2403a6bc969ac3d4958d8dcca8cb968975405d43cff2ab9daf56fc9a4287710af10602ac6952620c7f91c4fab83043b0ceb6d046bbf4a2dd5e718e1d38166d5bf3f5efde847090d021b3995e386ae9b68c765e7eb7ffb257ae8478cb7fc6b6bca7039a2f38b4669fe325d78c5cb34e5ffb1ac308a6cfc69ce4fcbbc6bf8a66f300cff594b4d1b907492b068a620e67836daf5d7daccca949d36de936b49dbb23aebb5913c3976fe4ef26164c911fdc43becd713943a8ffd2e263086b7ca705fa2111eab3461c04220df4fdd99d95a615f9d1078e3a5dccf0af4e9c7636fab54c787f6598c231599664912af2f5cbb251923523a5c6b78a533145b215b437fd23fb8df90743352f7b0739963a3c57f68a0f4396181615e4b202446d6ee590983b8a41d184cbdaf9c78b3ca19d7a7e0ce1808e86851d47b6c4c07bf898fc46dd6da68d3fb1aa9de1317a8eae815f8d26c85ffe41c0576ea662473f74c7bbc0c5e591dfe06b97fe36004383027023aad94dab25e59be00c8cbc1b50b1b8efbebd4628aa80b9c6aa35ca99ca5c388bc5ff8335e5c6f0e3ce381db23f2647ca461245ce9d0070ac58757d46f66778687100c40cf6970b506e7a5b0fe9bc2a04969ea93c5a9eb4ae8d3d94d87ff7d793765e94b495a3ebbf1a8183bb3a0022da2725f6903bfac6791c1943e7ab2a3eff1a2bc1fa425fc92c289d41610575d5446a96ba37d23d61e5f45ec64f1f7e32598e4d5f75b586ede1597f78c9fec7a764e4a4a8c3f444f6d5552d64e4f4df0b2155e64868ff42d306eda8f34d7b814bf91b53430ab3784a5e97665129aa1b62bd79219696cc10ebff43031c3e9e5bbbf8719459a1bff441c2d302724b774bfa4f5503662a06eea62cd8267d5398ce493da8a3cc2598c4bfb05bf9306a99b55aeb5e733edac7a59d75f8198e8230cab54a2daa2aa3c948fccc8e2e38669491cb2a1e87bb3a572cd2be80d85613a2612473b8d080e75ed4d3fd94f8e39d5712a255c09a6ca2b05251fe09d9823b4ebb2cc9021974e8a3523be69c6b8bc61ddb32fb1847183d41f63e67a7af7f81c1f3906c6e3f660633a19acf843d79f7af4bdeee3a8d0c16c5de67691553eda0e71604768d076a31315d163b5a034aa36748462a898ab0671e6238000f0666402eb498d248bd9827e360346d72794d5bb5f3e7da0eaaa827a042355470289673f9e0ee731bc307bbd64888e9f52e53304693ee503a782017db53af6628a8e3dcad43672298534f61075675d6fe1c7307696aa56872f222c9c82ec1f2516b6c901c8d583efe15cd884ab7776166405e3a380d88ad1a1f70c609f91fc01a72be623ac39bdef06339289158a35f5648563980fa6d54fcce9a6d313c423a09a8bf110e3ea3e0f395b35cf1e2ea4580f8e77c4506ae3155f6ce258db611dc7ce351b971514fc4986e7724796a7cea43976c05282e3bcdb30c5878df8df4ab2d4ed35d70e940908b9b0578e21d779bf26585ef57a1d4984eed28a6689dbf81afb2ac1ce7f70ece29acf0ecb11eec8ff2d967b3c5e53f8cf0b5109c76ef172d13fa2616a105e775b8f4252c87510840e6963bd51032ec1c1c3bd88c025cc12c3027b2cb93f76ccf6a812532a858f2a7d9ee31921adfe0c01a5da35ce4efdc36720293253718803f73f5436e8588bf4f03de6fadd2dfbe11b6e499096321348372c66603b5fe7e97688c5584d51b510dfab5fb6cec7944571261350eb667be4fe5b1f5d1960fb83d50773f2b2bdd2a45b07961697155585ee130dced372f3039f820e3b79fbe755e24e5bdadd835334ffb36fdc79b1bb1a9f00c84df462379f9b6befc887e1f416635ccf9f2fbfde3f7cced6f87b78f720b9a4f38b43b2ed43f9fedfad1d3bdc243cd9f412afcfc5d6ae8defb4ab637b52a78b7ba045642c68fbe6f1ff082508123e3de333ab36c5ebb5c7c2a31a9f44f01d51e163103179af9992bdabfccef20df3e083ace33df22ab9c4d5a28ac1440367964e911da8c4351b2fbce8e410e42a4f8cd3978b71599f630350451f2ec9ecf860e70704077b5bbc5cb159eb0a7035ecfe350030b10f90006a83f4e44749005e9eed29e470fa63622c50f78bb308833fa839d6035545d451f7500a94375257a6407281df5ab51061d4095e6a20322c0a7cbc9ebe91d11b0d43e0715f70c6c4c9ac0fc3444389a6ba8fe18172836259982b20bc569a3ecd40cd998111eda2bb86ca3c5052622d2aa9d31afe75729a2939b9ad6f2150d5f9b58f72e2addb4f7e4f019674bc309fef7f862788b9c1890831451c507bfe230d5ddf568d24a35e14cfc634ba6bf9813b5ec47c89450d0502b04f479d48647c77b0df2e3a65bd20625ba2fa318697b30132319ef2a6013308db68abb179447e3030e7ec0d6095bd739f53a74bbf1cd59bc3d32fdc6f0bf294ee50ae2474afc64de7fa98f0d52a751231ad00cd7bc5c25063bd4a0f42da1eb3a57e0223ef6e04acda9c1b11e1a25a33a9c07352a71f6730e90de7065713cf0d7c3be3b9b62434f139ae8b8e94b198af3b472d615647e41eb84921cf4bc759a3ceab7b84e414d5f2f6ad403a838c2d08f60e25c89e5b2b5c5d35d76e75b76c3fe01494ecec470cee2be19c91e9796de73620816fb7b3e4c504e742ddbeeb7d3d8e417f78e10d527726ad9dafc1041364179e0b05a0f62e926615f8c6086ba878dd7b1caef3e98e4861c5eb327365562486635fb109025c237f03d6a587adca169cb85b51557018ffb81e6517f0638fa23a11e6bdf2e3f5d9c1dda5d6c30daa2c31bb0259f2b1d036c018897aee220b997158cec15d772f0cd5923185fcab8153f886857021db37e234a20a9f47b85f32946c5e0beaa04f264bc8450a8bfcabf0f6d0922a695e10f92c8854c8e350ae1a99889ede36d2541fd77f6619a2fbd0e1805bd33850cce8c973c3aad24508f69dc83ae58ee397e90ee86d89bb9e193477c0eae38f57cbf938e1a10fda64806ba8fcf2fd08406c2708a71861ac998bc25146ba49ca08de00a75a8a7d12249b8b8ffdca6195196c7be5169b4b299f2fb9eb18b996d6c5454731de9727931026b6a7bdf331726b35c2d05f638da1d67251518500bd8bc96f72200ed4b28987a7edf1ed879f09a83189396b7a65ba5c1bb516d077f68984aeedd2e7caa501ea6110b1433b3baf983837e91bbf3618b8e31d58bf8794d91d6d6cfa8efe7facfbca965e433d9407c36634760a0e2a231b31bb313778f88f2bf78f127b129da2944c6dc75cf5c94010afb8c1eb070f9848c52818039e74c98f9000fc50d5da49576c65701c2092a37843ee4cf98a89b7d381264ac8641c0746bbcd5992403725dd0b00cf593ea185a54999ff7741b70738e5fb1b50dc2db7a297280bfd811648d13e97c346d46a3802b3f31e7ccd63556c31ba06e119ef9c701f6b3bfd76e1109bf53d0e93b0bfdf6ad9dd6c2c1a2185914ba35c47b9f91b1aade322fc2cc8387643f94a7fda4349ddd4c55ba953d48b739213a7d41b7feea7265e77b274c4829f613a751b08c6556d0d0e6a5e420e351af42221b9365a3e63559f8f4662e4b0ba2fac96846198ec13c8dae69340a0a174d3071404b0a1fc16162edadbf401458caf3e7f7ae2ac9da13fdd9eb34c89fe3a6da4ed25e68eaffebda18a0a85269a7bc0545d04be690a216268b016ce0ec0649439dde87be3b6b0860b4af47354c05b3d193df214a2b40150b02e9901f11b81a684700982e768481aeb319665b1743761002062b4aad193ac621dd76dbda07ad8ee6c18c80d01f4007e009aa3f558d5550edd526c74707fcdbd87584ad8d0052cd7247a8af0ca8ed6443d174cb76bacb2431aaf621d77cbf718d1b164d77f970c6ebdc9155b0e9a126f3934fd18621b1afbbc455d71168b773f8e26472747b1d848128b0f1ead479440d7680a273d543217a1fe630f10db2da51783104a2b8e60c4543321fc2d2a7e9f6d1ee572a6b12745754a52cc19079b0e070f9333725f2fee4258bce924f28af75284e3451f3e725e6936b206bae090dd072abdee0b26045a70357b35d0247076dada2ef87422640f4c19a0e98f1948130b6bc19e3b6adac36634379e864bd43aef9e36312b5358ba43d5cbba4c12b4ae35555f7aee7fc051d5de6d4f5d5d3e55085252f36805deb278e2a5c7d4d9639aeea2ed493103654e3b5bbd2ff7d6f7a88dfe7597559fc4dbbc6401cdea5abd25f7cc135e06eeba497fc386b8ae1e8aecd0b2d3111d880d8c07ca59f7c939478ac7a50b97de06a582cc9417b5473b63560df056823a79cea9b03d52c6c969cea1315ccc7c6fd65691cee944322a3907cecef99206fe690f0f652e36af72c3d85c60b11e1092e4279549f79eb7031b3d6879aa627997744aa6165ae14dbd2bf621f440938fa56b3a6aa6dc856ea7aeb824309c59e7a10d01aa130005faa2fe5a062b446484bc3422d518ddee0307c3a45f28f20b729e8552dfc2218fd762db0d497d9f434023e12f76c60e3dc74964c6b60f4cf8191979a34425bc79fd1a17c6847445a70fcc1c762ccf8b8e670863b4189ef08a7eccc03d35f4b0b11ba32c6b19878b1310a3595c7b54db00bafc30a788946c90e13741d310ee4309b1ce1e8109be89ec9b9eb2222eb23708c121bec1da790d3bc2e635e55dde2d19681ebc354083c214e05e063156aadd0174e1e36636c73053b4480d37277e849317f65a5d829c6a113d970bcee0d9fe021de90ed8f667752e591af8080a50a719c9010f50cbfafc1f7f4a9b94e475996124566345d7423eb0f6ae57d72c6eb554be93c533193d3f1862c70f2c8f45f9186c9540f646765833759c99813fbf25b87839c9f053e0afac98cb7c422b508efc8d0ca93df70e745b52445b29240d0f2c43ccf59829df649f022080a4be8a29de7d96cba1de34a21d585671b91853b8f27a74fcef7a00b4479ae3112f6a8da9997046083b01e8e821edff10814c5ccf54f1993f73ed2b6faaa0af431fca737f9d2c820c7b362e804d9926a15b6fb53f599a013f1d73ff1fda686a6cceda6af6152c7c49aa09c68b44271d51ba5e336375283a008b66c7b2ddaa928bc6569867bed59eedef8e92e7aac16771c06a1e498409d2e9664c95cd52a6e7959d45d1e70887d0844677472ffedeef5997e96a9be7607a5cb656bf384f4a61873681b9134e03cd6e34962a17176149d58c9cfc6732afbfed2ce38643411c605d814f7474c1ba5f8a81b4d6350a8899d7b6123e85e8eb9123807742794e1a2bcb2030e9352c03f49f526820d6d53a4e9f0916985e2dd632dad3508bc5f89119a83e9246f0d3f4f9dd3e075d084de126001cd794bfcfcba014f5d857db80b82a454c4a6e285a44b2a7edbe570a50846c8b579deb0bc0d7d951a9cf385f75dd2697198acdb225f579b06fc58d1912a7f013124d366eb165567c9cabced4bce75bb12036b78ee667aeb9e2859a1e757d558a72c984fa91c775a3ccb51f2efe9ef1c339acec1a0bdbf9b082b84d0c88df1009b81e93da27c05fa64d1956609981186a56797768f3d53d7034ffa4910c535870b16934a54d8d90dfcf37a699553997ac9a2fa408d7fb2d4c2c2253f51281752add92410388ab1a81be9497a8e980e90dfe300f95498ae6693c573983f8dbb701521cd06cfe46ca47db5076c8ef48f6d1227bb0f4fe0e93be182f7c0a82bd01bc27ae9ab16c461c92021a27ffc5d46f7c9b5a4f9edfa1030ced7448c0d10e75116aa4a8fd101a601071431b76d98b4378a6aa68c08cfdb0fdca2d70766d1a4a8bc52ca37fb1966403aa8434eacaa487b811180af4612ea5de25438b1757eac2b484276610f1356c42e0c8eba4ebee18fdcbb9f3d8f5a390c8bd259c2c6495e6ce2f2f5e689fdadab2ac86b73d1c487abb07084d9b43d5b6356c984844e6f6cbc43819ce444267ddcb2f96b818188d40a647f69dfa2d70e2c6cdd07e4a65aafbe5350faf0f6f4278dc37e79666803eff8bde416541574e4848ef74c1647a3bdc257987023b63ba09b53d16e9243db82cd336de95aa6ed12e35f4839b77ce8b439a2d145f4537430d539bfe6002e39f2fec50315f9e8537c89fc3d60fbc9a21274743910fb3072e08692d6fbe03f8991c554559df7210f65c6faa12e2e8c37a1f4d9d62549251929f869b708aa590b4e2ecf81055e1f5755a911f06e4b6ef6279bc279c52db5da76fb917fd72220e9c79bb9f2ec5cc9687a79d68b43bcf0ea52c36ef6a1f582d42b59cb60ad6f571bc0af4e81d4324f2dd733581214d9a8624b1b2f22161b32ea1b9fa1dfd7160ffdc6010d9200f7dcc601597bab8433fe9da3f71f433bad9e76ee5660fc1425f89a4f49df88b25c495de25017d8a6111a29bddbb38a1ccbedcde910d9ed3b89cb73086b7d4e098482544315190dca4533d88a353e9598535e4a15b26cce7eb0fcfb70d6440b0058fa556e8d5fee711339982232ea3ad80db461bef84a51e2b5bf600788d0bea52841402f5eab0ce076eea476a1716c7a4eca5539167df15191a80ec88be8d3d36045aae80300a4624d2babd65502c3cc579df73ca88949ba0862d71f144b518952a9e0330b59f6f223f70245f01fc0176f53cb0830d2d5acdb698e378e2a43477c239aeb9e60b6ac8975846589396075d20be2e582ed545bcb5577cf37769881b9ae3188b82281c754cebcaf01333e4eed8c42dc1f19583cc2c2ecea405a1d77e2d2110d764db601d30ecd43c1221b1ba9d841cdfb747166a8aaebf210c4e66af3202351f2a2a6466d19f8d621a6f86d6cf4f8cdb9cf1e4e9439b3fe8eca0458f4163b9799b51a0cdff7f8ee9a545ae4764f300675b737adba8c358a0ef20b7e027f4db6fc780655d1eb4051a33d4dc320cbb4b69fef13daf2d69fc359101015723d0358d890e9a18cb81c79882bb69e7c1675aea82da56618947b67cd09ce6baa55e3e06ee1ebdc9ccc60bdcfaccb740fa9510975f5ab2793404d1fd0ca45b06b041d9b2d352622510d23f0f504aac0710278d3402a4e30acc322fdb5feebdb5b6643d2f0c7575fa6f9413feabc84607b4082ee0755a49a4eb7053b489b4fd7c9a4d00ffc17da2a7b4d52ecf463c6e506ac2016bd0ae65745b5a8c2bba7e23da522985b69ddc716bf32b8a9824bac850e05fb2b143560d30a1d2b48ab2258158aa80d50f855cddd188845bb9f2027cd0a664c14740a9d407d1251e0f02913525b4ec0f20422d5e27a9369c62311a93b15cfe45f624d1641eb042ef1e509c9d8ca7474b9941ade1cee0b1b06e3a26815be72242fb5b2546e8e96a4c0c6960bfe2a6c063c5b672c8c7b0f195d038f1d32beb05d8484b7e77876d3c573b68ebd09d2fc5a9e2f9e3e6099bf066e9171297be176de92cd4d2fd7640bdf12971c43cb5bde8697e19538f3dbd4e8f96bcd51076b30a28e9dcd69f4aa89135e645de0fdee23e148302d2b8a5bb4e680900ef72b807be87452715cca9b7aeb33fb824922a19dcf9b7f5377570f4ad932446786014fd81ff0b3f04ea9215b65518a909a7e8f249f2277790307ad8da7958aacf97a270bcbcc796aadf0d8f72780c94c56457d3748d365f1b4bd7da84d50e3a07a5916f4759907c1189542c0ea89ee088593d38ce6984ff902f9a7b60f33b8e600160a2c01d69de50c610829b7ced242df5c367fc78d8850e9b1855fc02f93801ec8c7574d9169ce78b563a48e2531f28389c73c4e3e574e7050ff5a7a26389c1c6f02b73748d9652e66af3cd7080e95910f8711403d0c4373d0a86932374d797e048a292a85a491b6c16965386c2df9a626bb62bf850fed1130fdce025ec36b8ce3815f56db8889ecf8aabdcb4f331353c94401fffbd49ae7102fb2cc93f350c977dcba0eb11b0f02371633c35f4db7fb4a5d8908f23ebf55fba06818866c062f0b2125b3966b45bfd8c01f24191c4a09e5fd93e543bf5ed750776e241934720f554298eec35eea1290f6815c5272610cf719d4437dc3456be6f6fceb1207d2c5820960dd314f537e052b7283fb883a401d3feb2015ce46cde494857a2995ccd92c92781069817e171abeecbf030141cf9849c5099f16487ba3b6cac5ffa410aba1258791220b0ac7fbd663361ea446c5b61ceb3c3fe16189646f37e3df20976565fe78501aebb63ce944a5641fa7ba737093aedac6dda2246ac421c2814159b392717b8418be1920478794befdb5dac98ab9387cd16f9b768496ec8409318f37b78d02a4d4c549034add31b6cee317221610a16383f98637115be572c2c7fde4bd951388bd076c8b468c120076e91c17cfd01abf851beff79c1eac978c11ec3d5aa7bd4037d911c99db3e3d2354234a3dbaf43c250e461d0e294c5680c53e0286046ab66f797f0a391e1a7f2a9525e38d51704edba511ad7a1794839211f08b8e3d5bc936792889dd2a89fe9be452c7035d188e3c7f85649f4b3f15fcd24a214847bdffd9be3df0e0a5dd866f7c944c3a034b7543787501ce053d3959fddc97d16d59010bb2d40b6a491892906094742480697713ccefad837dca610ee143b2e142f234c65c82caee64d3fbee6298c50fde568eefe9efac6eef31de078aefa17fa1c5f1a3badf2dd73e00d1475d82ae14b23c0b38176edc1141e4438b9619df619da31efd3bfdee9d1b5ee194a9681bbe750211ad9d9a6b17ea886a84593929105bb7fcca869f492f8838042a1bb3ae093ee3a4337aa69947951170f103b80a95bea74ce161987fb2866f88972bd53d345918f5b480e3afc5738b451cfe0d287c88856f67d6f1c0ea89993343004df42a4ce710c2d918e06e07685c751be4a500daa81704c77d1141e07ae25c06602721124da039c8c59ddbfd48b7c7b32faec534ffc1351c90ab60233c2b889fade0dd13cc1347a5e4bb668ebaa9c7d49d9de1994c6f8b690e74cbca6f825d64e3dda8d263d9d992960db2b949ea9178e0b461723d4814d37f754dec77413020258fb140ee54c2248be5128120a9102963df3cdc16da36db7aa95b3d238846f4b02c698a1f2e3f2b7b46e0a3ce5ed19feb9b7572cab8a69c7e320d40ce81622d81e18f91d15f1da91b298166dfb6ff09dbc076dc243a59c70dbc948be7ae3221145522fc4962e222cd46df61b7f410d8479bdef9365a9891463943ed9c9fbaf5d2d5fcf08315a4d68172ec151c98a80eff96a7198acd5a2b5d5a997d05b8ffad7476f3d6d8c41729b13a8a1c9990958cdf0ee46ba8dc7126144a6ff4d3e73b90fe5a9cb2f8d4c362d912d945c91882b5dcecf3b4b9a0e6d41721bc7030539d966d3eb4968bba272972da4f8fa9486476622911f72bf47986ff84d2f3883cec41f6af66c3c43adfba6bd5e165de08f000f44910860c0fd2e232a2e44c0c047a44f67176eda20d13b506eb24dff9854f596711269290a2050bed0761193a180464e196144ae406d3f8307ab3fc5c2e131496c2048cccd988c7b4969028d5b317df71fee5f41fb105447df988f8cc0524f6c547629beef80264a6fd31a81ca4b6e84d166522c4a9f8e2f159b0079a596e7333e8371606004885cec24fecc7b23597a897d9906b6d89e29e83dd70323d95b08f50253f9da64a8229829a1c906824e9279c6a48fa8f8b16460807bbc08e909f4948240d7f0a9b75eb002995ee30d2a630cc848f5c58d82c3c8d9a207fc156d92590ac7dc5891a10e1a58de12c62bad3fcd298fb82f1f92834d69d3b23ab0a488d4ba249daaa825143165bcd58b8f50a44b738240344223a914d9e1e4a612350bb125a2e9ad6df8b85b2f5903cb74645d59d3973280b5ef3905bdf13b66046b29a1a37b8a8fa60275ac13fda8e5241d3d4933774494a0316ce8bad6ccbee5bcfb3816bc24cbded0695692bb44a3330e6439318e7f061b33c56fd452ae0af410be8cb5926f2a08619b332502714d65b21357be290e8f013a801d3eafdf086fea475f6001cfe80835f5862fc80016db634af6c6726024d662c276cc9366340a456a29dce6b447aad8e79539ce532bb9732c2279e8926067f627e03a6a1bd49733a870fb92cafdd6e8267a2475fd2ee303b8ceb1c108f9a50155d0d5ed4aed40c689f8cfbf13f4558477bc9288256c803eb5b89d0b9ed4599c49a45d31bf3f6224b86e121d49efb6440e1982973dd28b5e1922831187084255e4ec80465ca98bb4cc8d8f05465678e410cf524dd8ebb9b7ee5f56256aed3ef43ae77d3e6c421cca83ea7adf5ce7c551678aeb443d5b3428743f14e1d7d61ec5ec1c7f75e703017fca62396e73421b8f49e7de02411f779c56c95d6b49bb915201ef5c8d638283d3306b0891e999c7a1060e22e2d1ffb3477802de2d243934c544a2f92aa2c71065e5f041430f691e9abbf1496ff6754c32fdf0674399fc0662b88996f0773812d66d7acb91332b16f11159f319651f49e666e381661ecde1da46d7d0496347a4726bf636374cae3b819c16d71116d4316639648efc5e048ba9aec123dbd74982bf2c1797cfd8c7a238f1b75ca2e7f031ccc6f11023da9f2b34060023b6b2ef41566399ec089fe44f8427f767d744335336727f0e1e9d1522ec9ed19da6d131f11a895fc35cf9aaa7b27a5a88ca9f9c97daaafbd52c65c54e1815fd6e24d9119fe9d2087da1a99cfca6223d6f78052e728908c885bc2a96ad6c493c8df24d0e243fc15abdd54ce4dc86585f34bea67899aaf14d2ce710c088dad246717019ab97c05fe78bf546d0cdf203e4421eac887f4d587d0b7926d33e8ff93f8fe1b3520380e7ee5f651724b11681447400db1aef792919f1de84ed82d9171d69ffb1554fea45c41ac5f1036141aa95387ca473449ebd2c33d886c562361afcb193978f08ce468492cb2c0cc89f0d4d3ab5559799340d174742ccd95fd502623ce8e33119c2cee87ccb4bf3ee23d11c8b629ca550f9fabce316f36a79d01cd695160333f3e27e432b602d49d5d0e3be40706834d118fbe4de668903e877334f98b500fa90ca709335b986fa83ae02e849b44e0ef3ce92da8b62b85c7ff4bee1f381d330d245dae0d2a21b18eb7de3d5c21164df2f1bf612977ce3417973265e56558e491ba1495865e2c4c3ccde708b11194e7c7dcb14b2be2413fff1264e66bd5cd6b809e16ec590179d96dbf5e623820b96c7d245c72205cf0302b887379b34c476c07a14408766e563a46dd52386b3a43ab481242bd42dd3b432ac7a036a9442855c3012b29a3655d310b9bee3404c0031b2d635525b0235533b957e818cedb7d9fd0cd68e268f65ac788560778ea869542545a4e4ee67ee9bfbbe8ff7c78912adb7aae3687693191ed4f11a8f54147e91902ffede6689482291dddddd3b8c085908de0758c2176f299b3e3fee746cdcb431c7c14e474b7eadd331b76bb7ad74fa96d3ee1de0793fd35f6e2aed1f42eed169adc94d79b613dc98c06f467fb121bf59122efe6629900980bf590a7a78462a82edc3d722431cb6a277c36e38501ce8a5b50897bf6db4cfb93bc581c79862407cfb763f9e5f0f47c222fcca48af77636a3fa323b5dc05eff5530cb0bc6b7fb99662c07dedb5ddc36ecab3e70b52ed01fe21e429b7c8f529ec72d43a842c1fce1d8f42b80443a8e232d4e109150c0dc19a0b8d8427cb9284942486f89b2511c42d7fb3249624f18a804e029c25810fa39002884e8a22abe2d9182ebbc4185f0c824c6125094bb002a868c78715bca22c5183254950d8214c9e9dff5c44208e345be92c808d03249925c1018f7f9fbf5912152489c9966008e19c70c2e9f24c50024378c3137e836c4e21fe78f8fc18f483cf974259e65399b5d65a6ba9b5364e5aedec99d55e0d5b6e5e6dc3f70a37b789b96ec3989bb39bdc8f39bff4a33405b6a4ccf9a6c4d79b12812291a8e419cd409a814575250b9f0f7dc80fc02750ca0658e09105217cbe6c01f6cca730e84021d1cace4f957765e7d5775c3c3e8c52ce496194724e4aeba4b55a7baf66afa66d1bc6dc56398eab5d2d99ba6a32713567ae9e4e2dd4e565ea9e028a9b30b6ea175678d52e4755f714f8fc9717ae6ad40d483cd687bcde60f4b65c418af937bb7c52922460122251a27c98140910515c5c605e0d16e4508d9c3a360e30457e9e2359600dd1112cbcbbc05821858b8407de53883a49ee973f176292fc3eee1dfe10c6a84d095f846f7719e20c307c1cb5196584523e9450e338c6181fe42d40a2f524903401fc22157ea36a06c3028fbc24ccca34b2045a9a525b603928576342db92d82a9fc14cc0cd603d9d0b7f33244933243f4072454662c509091447c05e705ab840232e9819890263648998999124323323af19147f33233ea4808ed0e28318f0310dd010efdc0c88490d7cfc33a012000179e16f86e4888c1992133c3d43828aa767482cb1818f6920f163498035d0114710fea300d1ec08a13b3b4248035f022344516ba004fd57c2ac73d69a23cc8eb0471831e7bc73be1ec3e31145cc8ef87112844c0f31311f03e3b50802892d4e80840e821cc9810c17d6a749099cc0c0e503a0d60c7ad001072b8420850a88b4b8b1ca8853ce8985cf39e7a4c1e79c73ce2348e69c367cce398fbcf89c73ce13f89c73ce211cf131b28420644cf1d92dd0507a9e09203549f840638487183013f8c080f5fc904a1232f3832064745a78b22b6224122b7c609040e142c5fcfc1cf2e46f662409528b1e971cbc7081ab258acf69899e9cc4079391179092111f8674471082f34109f014126c4c84d08a0071814a40020b040448457244088ae4043d938a2124124b7e5e40c43943e287cf39e79c4788380c7fb3243b1ca1c2fb0a45348aa010f06380c8f60705a802045f69e24ab62e28000db209caf7902b7fb3224245827e4cc9c1506ee16f56e404bc6724e4137fb32240949071a8b1225bfe662f25bc8eb0c3e56f5644c92402c44fbec8277cb27301f2f0442edf9e90c3fd8604a1a55de17365d083952d68d557941fe8ab89199700913a2d3c190b2dc860bcc7bc807eb410f3aad716bcaf808b44b8020c17c36597ec12b3828d02bc84e06106901710adc8b964979a1dbc5a7cbf76d0814e196d702e305e28e07d86cc072b7490028813d7cc08253c68203131af32a28a1148e01b7f3323aef0be82e59915499a1dd1e26ffb88f0df09977b58727872534ea939eede17350d6ab44451c801a30ae6a0013661095d701ff32197372f5a97c3bed6e940a166dbe4364bf4b74e070a52d370abdf8d39333b54577639aa7c5d9f9c25ba537c8994524a2961c481eec10671ea1e661841840780bf59115722b633f46dacd28fbd625cf0d098e68108a4225e5c7bd78c8821ac4d419c7b18202284100922a284cb9f9ca9b40376c14b6fc2af234b3a7fa7fbe9df9774e6f04fee4ba5af9d03f09b52a7e7764fed805df0fc8f9b764f9db60ed805cfbb87a0889bbe87a08873ff78088a4e32cfe53765ee75e289a3311ce36050dcee2fa5e74a1cd7d2d2d2c2691eb88e7bf8dcac882ab322625c09ce88f8c1b5c779f71d9e4fcf95fe54ca9a06bb1da692ce2fb9cf1ca7a3fb4e63311a2b8ac140ee0a6badb52f65758981a14d3ae9a453db2e775fae951f971bde295eaecbee3bdce5a9ee3276fa2e95f84892821143f6d47c973fe0f714387c2e63015307a57f055943c696424471012f475a716fa6d93dc7d83d86c3d8fd53bbabb496afa514924431471659f172e40c9e4a48572e67f072501f5fdae0e5e0e0a1e0a33e95b2290da38af22209254a4f2e8b2494282db92c42e9c865514469c8a50dde0ede01de1340cf4631010768795c4ba947a1b4e55a3f7993da6f46bfbc8c7ee133320f03f3f202f3b231e45a78445a91962f5a5291d1f5954346fdf6da85eb1cf0bf882fa35b8e64f449484667ae73c8a697d126ae73c8fd5191d125ae73c82f0ff397c3ecce010ef31d8fd130fb45bb68f9547609041e9350d467ac4fdda98b4719128faf22a019648c4b796b114d341941069513462a2edfc7cc09a46b5f64fc723c39ed246740c6787d7cef53ada3fefd52e9b99843fb0ea7228071fa5d044838dd780322436e7a2251b5bde0c3bdfd3c9c4b65f7e62ceb35bc53d989cb5dfe78e18b143680df873614f1fb79b760da80f04e735103e441a8469c7642ecebc4ab6bcb157cfb49e5dd80bffdc3e2fe8b8ceb441bf04e650f8b972b7844c582d0cdde4dfc18c8e4151d0f78fcee68073cdedd11bd72df7efa898b972b50311a0ef729a948ee2d45b26f3f2d453c7e9725ded0ff717bb2901822500271aa84d3ef9d10fa7dbb3b2645158d71faba1d3346d849273315b56c2fb66ddbb66d2341863c9f4a2f765771182993355edcdbce1a722881208459628d2c63d27e329e6fce3132cb24a28fc170eda54ccaa44ccaa44cca6212efdc2b89dbd7b6e9e7a7c8bd2221bd1b1a6d425f4756241311ae0829066fedaf5af7573d9065ffdaee23f6958bc7dced28756fea5ee060dc2e6af72fddddddefa621eeb5dbc67539b895acd3f6c5a44d49166e76d5c3edd74dc3fc12e65f68d3af5a958a11ec76d0701a8608c2eb76c4eba974eafe044bdd97563e10ee1eda5f0c4d38ae7c3acdd44d43f08a74744d6f9fa32d0edff4a5ef30c6b987d1283dafc99aea67538bdf2fd995cfca67d55af9ac5c26246dc252ef5ef94015accb2b4798a317d94905454f0c41e1e22bf0375381117f2248280916ce71faf05944b3153ce106e06fb6821ffcc914aee26ff64409c7af02f9cd9e58e19873ac1f7e392e71f4b76da3104221084b0f19b0753b52cf72b186b07eb62e0785f76974e9a9beafe9d4c7d0f1694cd6d05e06e6e5c5898bb5d6fb34772e48ce3daeb5be7623fdee85edaf8fd8af162f0c60447c462a1b82c71823471f6afb05f81472faeaee99cf4977afa1bb3fd43df31d1be86b5a1f01a7af6d1610a77be0bf81d318da862cee59423a8b881603d3b0864096f6f55fcc89817d445ef3f45ff702cdee91e3afd93d72ee593fbcbef84e612fdf691198a7405e0d1a9337b3f56ed060ee31deac2135cf7df7a6cf0f83eeee02cbc5120259f45ff3117965fdf0f829ae47fdd4e338138382f12ef723c47fe96f38bb287d18f4337d13fd8e5e18ef25e2295da3f3932ca3972584d3d7fe6af83a9246973e86e63ea51f87a1b3ce2eddef63b98c6476bf7cc36c1a43ed974d632efb058d512a5c0b6b48855b9f36235923bbe4cdfc1c63c4e7e3169fdf55b145a7ee6b147606c0d34edda7cf6597ac41a9c89bf9d7b4fbcdd845a5d7f09e5d1db7ea77254d5bdd0eee058e734fa9c81a14c8bb8125a108d2109306a1c2e7b386401687592ed610d68f9685a2ea4954cdb759280bb1864015e87e91c96c815f44c07b1e12b0038651465a6b4dca58b2133cb5d67a9491321172cf546427a8180177c8e34665bcb90f47eb2664f83b9447ad79a50f82fa273e279d957214076a78ad1595008e356dcbe1f4bef03ee7b4216f22c710735839ec784028390a1ccb18a1dc4af0377f9d8e8dc37d1fcebc1c00f8b5e17706bf3238d6b8a837c71b17f56b01c758caf8f056922f05b79d8e4df37b63d5e8bc7167c6aa84202b4c0805d5208828288aa027829804190922d2638290970042900e6a00838862501432e8892026468288fcb84b6059220b6d09207048825aeb8c2550f083b684eb87fbae7cb7c08287ea035aa58719f335e041eab45063adb5d65a71906ba4e49898572d11b4840b9618e27d85a2d7b37e37eee38711b2b47fddff5852430d3e32a7c1470c975f838fcbb5e7b08638ee6bda521a7148971f3c3c8e9747007de256bf7e2ac4af5ac6a3f16ee2732ad4783751013c7efffbdfffe552aba77d81a1351cb872585f1c1607be1cd61507d638ac290ebc71584f1c1873584b1c98b3dc56c2c1cda8eaf4953739737cb94e4b1c78e33a1d71600c5fc4b3344b2ef12676393a195f374b9dde707031b2ebae842fe6a9b3bc9137f14a8df9bba6cd6a2dfcc67b84a9d47178d3ae9cc18c52431303466a46260606f5e2f2a2e5944da58ec39b766da55307fca2ac0a150cb51c814c08118960c2c5df8c099e2026041de14a22414841580459e1f08fc07a8b0c9f7382c80921e804cc0920fe664e08e13df30784c3e79ce069220b7fb326aef0aef96b02087cab02a714d96d22d6c4ab09571340348183a559fa2d0d8163e20a7f3326aaf0c7c41426662b04f53021b334c02ef83482f51514c0255c7cb6048f9324f02d64c562fac04915273570f202229c0cf1377312c439fe664e8e387971f8d7898bf7e9244a8175164e7670c2c309fccd943052a2c8023540886111338a213521830d1b2e296cfc20ad6b89eb82c20aa1042720808d1f6e4cccab623c3145469072ca7aefed41ee4f6683cc825c2533496a92e4c351894a13a2265044253f6c90049a3511329bfc609285432649fce61024c380c9d0bdf7de6b6dce319fc5d0e3c2860d283a2d58699f88f920419206367e48827f9057e05044152c569aa0031d2192e84113396822075782ec308300791de8b4b06dfc709930b142effc1865a4b5d62a9468a1a407bcd65a6b7d1df2468509528040a1a2c4090f4a8c98a244c81549284115e30263c98f25449608c941ca053924cb0977e67df21e743e08e89fe6a48f5f79f3027797e132cb9d39e7d401f9d53ce542a772f713f8eb905b6b2f9f48608d1fd6d6c7f3c5882ac98778c2cda5c09f8acb6ec78cc44dc837e6dcf087811590d49031f7dabfc732def0f0386c4403c08ab50dbd444a4a2fa7b7b7533ab6c8e5a7227f5c2752ac9f4c73fcea1f1b86d1004be4e359830762b8fd1a7c5cfe9e0a3e62f87b38b09b123e294b52eebc695a42b8532e3c9fff31fae1408d6b974b1a6ee0e192e229e3b5156a256e31ff1a6b116014591546e4ba640a13200e737c4e08ef0f83c90fde67f0ce29f9c1bb0d19fce4f1e1dd1d5400940509604230b2450e985851d282142429e2888764e3877b69aa3c00bfa738bcdf60a0157185609fd41fe80d6612f9a5cee8e1c4ef5c0f273e278b4f307e3d9c966d26d978b0c85ad2bb11c3e51f7e9797d760efc686fa4be5ddd060feb6de8d1bf356e8ddb0f1098f2ff3f5e8dda8335f7fde0d9a4ac2e3c3f899f46ec88f3cef468c7f2fb75207f8a6fd7d5be9cfc7f76a259abf9c667b1943539e1a607f3128d2211162748f51c0e82e83a074973c789949148717ba06f862008b10214651eafa1677c4e1c1401ac92045f0f8370a217019119e20c1223ff0f834063780e1e1c02431a0c685eb6a17e4f850139ab1dde2f3a7d0c399f1371712f8cdd82f845cfad8bd28e734dd497544d5355153a7e34595ca64ca0f673e97834e187eecb0830ef870b4c797ab2e1bc69ab6c56043deccc75b377ffbd7991e630e7631981e73cf7510c89cc9747ad36f9d8e8d9f36c627d349df87333bdccd1c437edc71dc77f3037b28f7adc56fcc256bb85c3f3fb16f2df9b0242425ff8b23210e4d42420f07fe6791e5f7adc5216d691799d4026f2a66ea471a63f01754b69852d1bb315fbeb88471f97d7bbda0f270e47f162f136cce57dc8fb6e44d7caab98c5181e4c89123db082d6246ba12e634fe8c4bcf7100e66d44e6def4dc9b3ebf8ee434f798d35c89cb98e3be64da7d6f23720f4111d7e112b77b748fbb9cb3911cdb886dc43642a220970216f45051e5f563edd1cf4fac3ffbe8a7e80707180c0683c16030180c0683c16030180c0683c16030180c0683c16030180c06437a6d24868ca87071ed79664341a7171899c7b3a12120ce3d4ac86ce807d06c0a22326fea7eb68cee9d4c8ccc51aa3beaf6d1d151172393df24b37ba09e9b81fef452ccdea87f0ff302f5d2e2f2e2454b4b4b4bcbe9743a6d24a89042c56b0a2c1cf7a5d2f7cb7ff6cffed93f3f3f473f2f2b2ec42e3e5fe9811a4e81ec88a6276f783c79f393721a60172f6edaa2adf8f2e18ed7c27cbd5eaf9795524a29e79c734e4a29a5b5d66aadbdf715f72b4ad9e9d0b1e9b089d844e8fc9c5aedbdb53e8f94e2777261077aaf5a70bf3885691701218410bef062641465b218a39552ca3ae7a4484894c2d7ab4abb8bd84564f84f7321caa7d485ba298fc471c628b44928954ca6687a6cdacfe94ee3f812ca3ce3bc77c7e3a6a75d0b8f9b2890eaf2a7dfe1c5b77ced5231b8fce979b86c1e2fb6bdf577e4bcdfc3e9b465da7b88dcedce3ddcfe75af2339a783ea903a206d3d1cf92da71f2e8170f937cc9d2e4a25fccc389f4eea6aad5c2b97fd39e76b73ae7a563e4232fa24d6221262e523c4563463cd01bf191dd3d88c73bf0ff069593f5165699cb3ff7c1c39a8427caaebee107ed410be408b36152e5f27d2295cbac4b0864002c097ef62c3a6f0e7a47d076a21594e7db16b49d10f6dc91aa5a72e0e63ae0f100bc92e24c89dc6722bf7b84fb1d5849ec88688b4550b68d314a6040816733625404ceac3a42b2140c48094c49cdb8ac582849ec8b6954f4c484a2ce8c9ca675bb5b695cf97baa96dfbf7ee0e5b312b9f228d287621dcda943f406ce1de3eb9d3a2b781e41eda53fcdaeb44bb718f8dac70bbef58964bdb3a926e3a4489a894a8928fe950cc9944540a8e6f52c8ed1f1e9f944564f7e4fa900e49d940322cb2dacbfb4731e76a33288e3815f9f2cda030e2f2e9145a85cb871d6b085401cedf2c57e7c0de974e8a7495304ba59285d65e5bbb4aab5db5563dab1ebbf2a989b54c492b9f1f3c3da6a496cb9465e533644a8a624a7af16e26498aa7d3f6898005a744b2991fcef68d083232a2179eedfb4c1217d8c3a14929a34cbf9b92389d79f59716a7bfe9ee92e4c5251305a74735312e621c207129b99843a5fc1c231f4208219d911184464a298410429db8116d2cb2945476ab4429e59c0f2d2ca6481ec2561e7943dfe2b7dbda21ac1fc872d5670da995f533ed63fdb08648c97249d69047e21448ee519fe62b31271f652c31c74223a498931473ac585ba5cb4650f29cf41f4ec96c85327594bff2c81a3866fa5e432b8cd3bc533fb16bc2311ceb70ec3e87639c622a9c3ed62f473249b797bbd76c5b4ac669ea88d3df3dc8f47b36e2f475e4a6fb0b169cbed6b3516a084e2b0feb873504a99404436eeacd4dee5f4739ee57adefba4eee0ef90bab5af78415f2c45a2bba6aad7a7c562ebadae11c842b6ef75fd15fd1d58aae285c71dc8ace3709c91bfb25fde40deebed324dcda7731e2f6f16ee51ef4a9142d2ec3df2c8a2b1c474ef7ca27e6fc0ea77de57af9e7caca8fddce22531a3e65ef867cfba619d541a0df4d336e5f520ab9979a86bf6e07f7b464f46ed4b7df691941e417042effda7fa9b56dc662dcfea53f1c3e57c365ef460db7af23a7ece1d887fa725165df24b35170fb37b65aad56abd56ab55ab918e1c845d1ad7a3a4abfabdac6755df76ee9deadeb3aeeb98de3ba9b396ef719ee951dbead95cfca67e5b3f2e9a225828b9452f9ba47b73fa9a531ca79add4b62e46968b252476ba077ea57bbfdb4a18ff8dddedb619aae476fa7dee6e1f37edeeceab1293cb1863bc61fc10527b1fc3956be59333fe552bdbc718639b33ce261f939a4cbbd317f2c6b437ed67ae421cefde7178e5b3f2a1d4558a768b2ab32862b3285e33598f69765dd7d1be7dfd1bb6aea3f7b7fb3332826c1ae5becb6fe7b4b37b1fb147e93467f7d97eeee67c9d787aa1f4b6fb994e4dbfd3a9a9fbf9ac21a54edb2e963504aa50a7d5418bd1b27ea2b5d55a1650b431da68adb59605146364b9228b88b5ffa2b516cbb8e13d83650d71e1b288c22325963a8a501457942c7c00fccda2104929bf93dfc9ef6457ef4bfd78473b1d3bfc3e9e3b36d8ee573df2a7ee4125b7f0e9556bca79eb775d1744bdddcfd4dfd1c3ee0e35fb774e6bed9f7669771c87adddb60b777378f3e7bd67dfd3f7543e7d9610caedb3ac1f8df563adb52f63fcebb6a3d46690ac21ac21ac215183738b1560598114d7bcb24251c269f037830205891380bf1994273cf31d1b6e78f2ce2bef9e91b172bd29bf5aaede96bf7f658dd3cb7f2dfffdd33dfdfd16ddd1163799fa29cbddebf6786b3db6db7d681a7dd9037ea5bbc39fefa9dc29c5da2aad642b577dcc710fe18e33db76dd8ed27dfcfe5bb5563eabb7bd8bce6ff5f65897a03cb5408c4d7645a447f7377078efca64b2d8f49d8b75d93df2ee5ffacac5eddc185b0821de104b6b37fb77b37f574478dfaed5717b7c1faf84f078573ea6bbfbcac5b7ff1be7cb8f31da0e3b34ed0e632e77778d77eae5b78f6f6db246f7ef3d5eb283667b8cb149d352840fc716654bc6a9845b2baae884056d304e7ffba15b0f7d3820bc9467dbb66d6b6d3d2e4da3943ee58939dcd3a73f628e8d39f8e9d31e88e3c91af337f9db86b96de3b4be5ca779781c4bf0630c71bdd3d4c4fdd856c443ee46409bd136653382fa05b72445db948d8aaca17dfc0d461413c5f6c4a684ea45e76f1d95d3405b6ff586a5f29ac4b72c1bd23ec186c4630d8f49bce7372f17ab414c3b489eff849ec88688a4144da152c5c8cad115242c495958435c3f3c41e41971c4aa2416049f0cc51c222931472b9a42655ba147f44acc49d57f5c7e7c4d83f5be8735b60d0544b8e66f0645d2aab557aea8a2f4e1c8df993141ee9606d96adf8d4763396eebdbdb1968eb75e49eb2f803ba5db9c3f814e84f0d5ff9ec2214063cfe8b3b085f0216ebc5c362b1582c168b25451211d20fcd5cb39869d5b3923ace89f1ca55c5942aa698551194a2e18599a2d16cfd4d453e09a968d068364208356d763968acb5b6ce994a697ff5d47d035c9b39b4ae054aaab0c2b1b6d9ba7539e2de4f32dcd408a9f2c49cf9925ec9428f28169a14ef771e54e4a767e4a8fba1c8fd240485c790bc0d882a498da24a9e8474648cf2146fbc9b8578926da22c4f42f2b4677946d57b2721222afc343425e6d427b2939493ac71d6e84fa68337ee753bb6d7368db7f94e8d5cef46cd772f835e81b746bf8c2d6b502f031f65236a84823468bc8dcddb6c1b6cbe66a2643d6453471db97cea077584ba82424261c9add2cb960e0b343e7e8ca16b7ea364a8a19853a5c49c13709097a37723c6cba39350cca979f9a72731e75ffe491673f4cb3f0dc59cfdb28583a08e8eeedbdc9d8a81c6db3c0f1a6fb36d5872df069ba771370fd5d3781adb061aafaaf9ab750ca316972721d4d1ce0956d2d0b0405f3e8a48d6a011f3fd7214ea65be4b0e23f330ff640d9b3f09551a9ac7969ba1efbf8ee642686b8c1d1e67a02d1e8385aa63a35391864ec59d8ac1e6693c0f9ba7f1364fe3b5afd1b4d75e86f67a6b1a0d6da36becead6892a293f86de5c0f47765bd32b9a1e512b5125bf4653b81d3d1cf934f486246fe4db68ad3b09fde44e8d665eeb72cca47ae6a97fb2462a7512d2ae3c69dac793108d7e5145f33174dfe1311e773962cc39a7cdbcd6c01a1a9aafba6f80d3bcf818bae5adee2aaefdd6e578a13d0cdde94f4a77da9ad19cee14480c0cea0575843a6a39e99ea712a693106a282b9167b87bca725e0a494694f1e4cdefb837fd0edd9746b024fe08b837bdedbe948a817bd3f3e0deb479745fda3a910391e32fea5d45a63019a342f4defbda16ebf2ca8804fc66749b223e1fcfef5c0d18e2cdfcd7f2ddee18e753f88e92b95c30059c8f31461a7988ecca43642478a3fa9be7a1fa1b9c57a9527855d532fe6aeda2212d74f9fe72147b81d103a305e3070c9ea89a36fa7530fcc0f9141e6f1664585f06d503e065b8791446b084470a8fc28f0067a7e403e0550f801f410a3b2577aaee1800f0aae70100d5a3f0f72fc6f1abee9cde43e4fa1d472965dce111c736608a9c0dac873cf3aabff98e92c1fc0c52cca364a82114114acacb91cc4f9997231878a83ec6538c32a2feb87fc6471b988d9298736d8262ce09ffe2e2f353a787f1fa1573f4cfdf2f63c6cf9723576da97e0747bc79d5f3b87995ea6ff6e681c2dffccdb6e1e651d83b38a2feaa659cf2cb119f28994d4cd6b8f91831bae43434fa753596dc09bafeebf0eb442961fc6b8a55eff068e211551335ffa4fff570a6fd193a9525aae6cbd0a9249dd23a85f4490f67de68cd236f66ad22bff84f7a3778648d9b577d7595e63f92bc995ffaf7722a4ff71dbbaebce9dec3e9beea80c4d3fdec3e6fffba4b5eb35348487cbe6874a74062e84e5f3074cf7c467719dd6d94f4ac044af7a9c48beecf5d747f25f8fc17ba731b940b283182154821e9570a49bf62b298539fc652adb1abc1e214d1bbc19dfebdf8e28b1d4ac667ace1dd67dd6378f7260d756ac6e7cb56a9b66aabfe5458eda9ae2aa412a9af0ac46d2af29337dd26c6e7dbc0e48d0dae83869f5014458e1a763c7edfe2ef29a41aaabff99e6f34176fa04abf780385be0daca62626a656fd8adcae1d14ae56cee5759b8a7cf32a17eef70b7cf72714bd1bdccf9b57edee634a0d8baad9e9d78e927b0a89cf4f21f1b8620ea76b0a4b2a299505c60f182d183d31276eeed5e080fbbdee6be1c3893244d5d440302551076921fd24e6d4cd23aa26571f0c51351f6da25f3a2c8f5bbf1ecefccd44d72f3ebf76f2373d238c32ce52bd7abe07e12c55c8ebe6380c3258b1a93b33228d229bd10dcb5b5cb8ef2aeda2b94d48dec8975da25cf4362a5c4a1d1dde66c4db8c75ea13ec5ece6fd27d2787a9dbd1fdb52ff2933c5ae44dd41deb3d448e2148e2703bfdeb203ce518cfbfe9be019e354e77158fbdd7e598789b11e26d46186d088a7847f74f86316bad8c20248d4919d34167a0b1abb5b29129724350aee0f8e3b83d5988325f47e65f61cb0e206501a24b0c8c19aa14a6ad744e1e1ceb21771ce3b1632ab985a9e02ad8085b8939491d07f1389320b4817dc120f804c6624e50cc118a394f624ef7d1061b950a8bd520d8bde97770c06e776f83e9f3e571fafc79db90ff8403eeee63e24ecfbfba3eb4710fe5d8158298a888c73bbb1d43e4d71eeaee3bbdc3e1d5ee15f6c52b8cc714b2291b29c150e6ec545132a510061e7b8a3cb71419bedc851279befced7770a4aab69fbca1bf8383c6f27cf930a26aaf20f72725aae2ef15e4ae6a4005669021e6c8878187052ef05454dfa89af3003aff906a0ba776c497f1dfa73607e2de3a62c426262323da0409a9364142b24d9a34b94dacd6646b82638450097bc95eb297ec257bc9139bc966b299b8c8389c09a0f6a8144dd666390b15918800000000c315002030140c88c342a14092e48924990f14000d7f984c644c1ccbc34912a3280832cc10831401040000202333333423006fcb0bdbe4cde89be0308a19a927e739b97bcf6275488256787ef44d4e2525e69e96f68dc458cee5e42b89e99877aba153d56ae726fbd4e67a1e9b8e7f22f3ca3ee3826e0ab822c74e2145899beb81776e7f9e281adc9202c3fff47672991d24263139cad8a4a12ff10021356e3f9845b91f6593cba9568ebe3c47add3609559b40da6a5b9614258e5b516d6ac2c3f423fd7e3c2179c9ee35dead6cd975a2f0282f12658094625446eab8c71b850d72b122695fa1dddd2b4261c76d2021bd41dee1244140b1f0633f3015b4f19bd09e5e641e0d6c5f66a2f2e6a64fc2f3c684af451bc3068eae1dd78bef220fcbfee2b953d184485c62a583cb1edbc0e2986a37f537b46b1283eabc2a350082c59b0d8431751330c08094d2812e8a1ed73df209a8f2a290a8d78e09bbd6abc527c79b39fab01364e3e51ecdafda8867c58b137dc931fca9fb5b32fa5967dd521f38521ee6ec8e86445105006a11e2ebdac1f68980e05a4ad5530945260037c53d03f62ea1657b51d7e0b422351070549ad8917a606bb08886a2f9e069dda69f45e7a5811e928aa1d7f988e0362ffc1add00dd1f3ca74d93f0d22e6930f3c733ff0332b80ba00c16dae9252c7d855770663f7b1d8eca0f7d23892a081cc18a2bfc303f70c657405259fb9f7ed9849b815373b1a2201527d6a77c943854a225b0d93904dd63f0cbf2afb403fecd8e61d9a2e80fb600e7da027a31ea0c270949f171034607bc7c4afda6663b08f21674b4cb5d1427388e89735e6dc77324026df5dd7db10c7865bac6c48b551e0a32cc851ae8bfadac74136d07621a2fa9adfa6c435be2198bb02466d341f9d189399b6e4bacdb6ddcca5957965a920a55f17229b8aacfa2d400c107896c625c9eca4d01a5b0076b05446cc89b0cd2e36068e1893d40f99c2b663bc420638b711c6a4bfb505f3b8a50a58f8cf6a829c14c2fa9035579122279bdb76771a5d23f6cad672feb1e70169a14c93f6bfb4528fb6c741e68a1c915562d09a542fdb1783c0fbb03669fcf41c3d94dbe35cd5020d546e1313e6ab581a3d7646f6e9ce586bef1355820e04f16378e71dd0aa8950d384b0c810e08cd8ef75048e75c3c4cc2f30834a8aa58dbcccdc5f1e9c86135b6047f14552c260145487fe5e0aa4a5f6bb97d3e065175513ed3e3c1cd108d0c4a45fd26bec876c404a28965d682909aff45818bda256fad8f75d9199ae8b018a0cad40aaa9bda596d87807aa23e929390737c0bdef48e325643fbcafe1ff2d3cd6986fa083cfc769f5a35a5a8814bb3c823015242a93b2fe534b74fe0170eb86903af43f54ad82bc0dd8ff713fcb605492131eb2fef8da51c147087bda4d01ff17d473bf2c6909d155f6253c23d09e582c347adb66eeaec744525020169b597b780f8c5204a6e1f88dfdb2f522ace82c8000ec15a2f441a63f34e686ca0fdfa4c32c5b24e9b038d2129163275a539e006f0877754d75ba645856c775afb38fa06029a75a7c7661940ab39b5b6346298081a855feb045939cd263d627828b77d95cb25e7a12fa414ca77c9f6d4d92b97c3cec612047c1ff6ca8214f04a6bdc34e7eac33af710cc68b5ecda5f4bfc152f3fc726b5340bc05a52754705a757d9fcf0b2fcf103d55dab83fe2933fde7d225ab7e448ff909a00229ffdaf8c0222d39a04720bc0ad7296cbd6cd6f4d075e1458e896997d570d851b6093423e69f1127130af18442d2aea1667e6006cb409c532e4b7338fae634ddcbda9f277027396d02de9ea137f1d1e1da22c0811c4204ecc882cd90659bb47afb0ed375415f68c71f0422b5d89126451178115ff46a30bf9f30552da7c925222b48892af65fd819825cc61bef889534a61a4a40866d6d93238a2ad665264c633d0f2106ce52e2c6fe4a73df8c945d74f8e599ad8ea86f92796660f7cb48033ce0b8169892993c141efd6ac3e8d9f6710a221dc5708eeb623fb0c3770cd46a91884c87faac85f2cd881b86eaf2aa92590def4d13b98766ad2851f5c9228966b65a384aebc1496fc7f9c0217c9e833e979b39a27b80554affd0b65c1d4f51471f428ebad739013664bed4a190030c46371903df35a9dec8573e34870f24be2ab8c2e1b6a2f37b32a2ef751faa27c08a78c55cbab1d7a8476719064b13125dcf39d592f22d8c909eedb12d69b1480eeb96751ec44670f0966affac3318eb5bbc5cec40cdc8f2cf6cc433943692dc12a080a4b06fafbfe3c4f4cc0642d5593c199efe534936d9e2c1b8216e85d74600f35540868f474586ab29518116caa5d096973dbcc9f7a6f7e29354d84ed1638cab582e6b3e515937f843a42c07443281c74843e6164fdb8b3b738480458d5ac95fe8567fe74d109ec81932464de96203a8e362e04f43869013c0ca0e9fb325908d9a39d0f1faf2c7edc785878e1468d1993fc823824ac557646ef3c751ddf3153a7f2734ef591e6f0ee16a380874eb22eeb58449ef636cfc0096454dd98df24de76280770ca96438600c7db40860ae0e486d594ea9c4391dc2e5c91011a54ded0a74d04ec95472bb2cb4677ec6f0153eb25f669e821d6cbfd0208c74992db9ceb4aeb4543c22bbbdc53c4c1395fa9928bb86f7c13dde6133b4724b36ba26381ea124ec566f15c36f25e572678a95944bffb8d189cd6adef77d2e0402537d0336ec2adb608cba9c5265da7d777a8390a3120221991ebe565cb27a06bd6f1de494148c49b521c2440e6736b57c471e1bc40dc230368b00a650d5ad6ceaf13913a8a052f46c9ba2eb56ed2f9552a5b322473bfa73bd556fcd03fa660eddc586fcb7ad0653076cf1a5fc5c1696868bf2a1c85685906f8a44240fda5c86a518fbd442836ca8350bff220d17fe856a5cfb175aac7f0dc5840efc89e545b57bd90680ba6fc8a7d6c946702397b5980c43e1f112bd553eac2614448907011be6c2fa5c3e7d116f63827db9641fd4aaeb07ffb5de268bd88d0e72185a6203b587d39a55ecbd05c7d3350ca9ad5cd218474fc181deaa5762062068f7f20d64f9b2e2ddbe32ccb2b47946a4522e1db96dfb2219965c077b19250330269c975148f359425d75174196cfa29297242e5aa62d30eb2c2a8f23c81b22f5f21b526d652c05977048e17576f8e7796f8e1729651049ef8c670c3523db5c3814bec7df2372d9013eea55dd9e5801556c140e47ac15879e3a931879602f101c263716b8887a9be920bf84345add2ffd88356a042567ec89cb6e4e0a455a7c1aaa73cb7dee320f76e917718bdb7adc7a2a6898a540f8ba218c702ae821293988f0d85ad8dcac856ce29284931818a8d82f4e75ed7b8ef88862a1cd83174fb37bd30b0cb14b2f3fa324d7a8632130fc06252650bf69871d9ad7819850bfaa2a3f172f95d8da280da49c317e14b68b64cdfd226200a4fac6b902c0eb101330319a3d2db0ef26fbf5825aa20251ae0a6debbd1d7767f04662e42cc0f251f3b3219c956f7b10204524cd654b47d0c3808527d082060a483f0bfd5968e6a06c911365cd755839451162f253c8c0554bc6a2b8cdcb690eb8620da054726e3750866f9922062a8ce7a6b4def6334bd866307b88c7a0b2c67e10afe6190a3899d93af1ab1d1914e984fb51ce1025a416e53d17751a570fcef4d813bc7de52e4cd77f12471d2a15d41292c0685fbe68a4af32f9450ff9a308b7c04993b4a1d8405e904346cfbacbfceab7a869c4a0f05086726f73954dcb202adffca0457b0bfccf367eda246c5afa91e710b1e2b13d7a4e8cccab66545778e972df4e18bd02254a190b0632af8649a7597e8a15a292b4c92b1f82113e8254a6e1bbc46507fcafd43910dc73327cdd460d9fc329eb30a8b3f3919a31a8049b84208ae58af7d045788fb17d41a0c62a88a76b0d90b2deefc91976a22a546b11c8f374dd1c02f82c8d9a5ab3c4c9cc9d294bc4064d965e983362d2885ad6b1679a0034c98554326f1c1dc9d3a4ded46d894c584b82a9af1f9cd37a6331023168d7932337a8f8599fa32fb710dcb319147bbd660dcbccc4dce1b77563c75d254c310871ab2135581e697c9f96deed90f342086bf488f4c21f08e9c4478c2633cde5fc791f9d42f8f727dc57686434664f87941d2f6165ba2ce65d2fb2cdb26d4dc240093f091ca386e9b99efbac27a73c791d646ea455a99df6a5d04348061262f70bf058f0a9432b656d358e01a02e17e90a9e642ee0e8b2fa061f470e8975212d94d46763346a359c6b0582b6d0c64994e4dc6316e2727a00e1a56eb7ac4e80dfa466ef63f09cd0321e22219a7321037871818e1b9b47fa20578c82712ff6345e8b8859b24e33c9a217d17d9e2182f4e7f54e891a007ee1713181bb876e26ae64c184845704cc3bd036227da0fe50f000c9360c85f38a7f048f06a5f5dbf42d8c32ff5896401e6a9ca01c37856e121880e3f774ace0d36402a244c70939f59cefdf3a4b35953036812590f97cbe3d5649de7523a918e81ab3a9557ded5be2a067a1a6bbfb0fd5756025f87e84efbdb363b06220a8b79e15216ca32f56c8671aad9f34c2fcf82de7f418fa1d025c110d13404ae309773232d40e7f24969056a844fa04304b93d721386936bafb35580e4ba86ace5b40a5cc8091d4c6b1d959a5a38b7ccb8573e695d266370a19222680606120eb94feaf9358597abe9404cb26e2842edf8fd111b1005481fd1049cd404496e3a2f58a5cb2c96dbe26c360680366fac80537bb5a8a4a87eff750c604c344f0b50ca673a6deb4a3273dc11fef3372af80e2d756d3d5f50a30805128b7990e6be148c9696733a99bd0596d7fb6e7c4d24f1d282888ba4851d426203e21e4f72f07c3a20b5c1c8ff734c5298c88f7c91b3f0a852b3eefbf1a731435e5af0cb745a8d7283412f04b9f42604c1f81cff95f10d296ea4ed097ac2b663917bfa61109b7fbe72af95ccd4aa78e8b3906380390e52ec598dd22044215bc8375a65803991c6a20444bef3fb6a8a05a993d62aeb79084ce2a15e6757bc9375b5b31d7b2604ae8cd49392bffacb7c3e8c187fe1fde755b603bc0da87c0e2aed3651dd4e88ae0ef07d36e7cadaeafcd4a8843302de7aa012d695cf790d4c7350f5efb9ab749df194d0782f7842597320078013f0d4dd28ddfacd8706b78daabcf4ed6d885759e5b78957d2bca97ef2719668bfef3a9c90a7297bd0aa6aec0242898a615ed68d25b4e46cbfca33bf501f20628d7206b3ea994f04a8b199f4e7f7dfff7bb26b2f2c920f413f17cfd313de6ee9a0ef11c8877e3c3afdc896961e6e66d6490d68f6daf72bf003069cab5615a27a6698325c34ce5bb27c0589c88973065776baf264063095a20d079f0ca2e6b960cb0bf1bd9c30ea0bc06721d17df6e6824d1079ea263180c1084e02098b3b04a65d4822f9da7b9ec0e3067ed06fbe77522773d475a279c3cacbbbc6490a8d79f54ab335dace2c4e22115a0c8bf200b8705ec1ee85a92e572853886602de554cca32a8af521177fce278810d44c475c988b0a69c15138e1dfd82ebdfa62208d6993ae5fd842cf8702d5b87ade7b28ca027409d48e544f7e7337780f2fdfafa715de81554b1dca2c8ab26e2b14ef3509ed9c2c4d4811083202d407ffef085661e0ea5bcb6d03f973a101255240bb28c28853079ea00d20046aa250a0b5a3494de78b4e693e76dd1c9604bb784156d2b35eee9f93f84b4ec4ceebb67f4439c865f6b83ae5f845e81c5e742653f9d38b55937d614a761c1fd65a01a0cb4a2f2f8b0d2b08fb6011818f451adec2cc93d0a0b0f7ca6413bc6a1647befd90342e5904f61434a63872285cfd4a9644ef4969fa4d21515a020c75167123b277423b463632570b004d8bfa0ce5776292b2f2df262428e640969fd957688ed2df415419564923a366a25f925df0cfef1a4b7589cec4ea4d30f579861a10ef1832ad0c56b101b522967fd8228066917ec675c19179b374c71188ec29ae459f8ff5ddfedb3e3de91592cb2ddc398b62e16c32bb3889e6105a44067f3ce76a8f6cd497f5d742450d46ccd1f6199a6a34b8a7dfe060f3328476ae3ea74668643d83547a15ee47e58d8ef8a6ecc3bfd6c23a11026b84d5e908486bed26b0ba47407a750307bc83495ac57dda3156a2a143b37263d9594f68deb60a19b9c61b6144262a8f45c16c4e19864541c83f17e2af477a162a4f0287f5b2a7203e8b193b68cbbf222a9cd81710db8614c7d983084530da84547c0d06c7884938da3cc5c39f9e0903bf456c111153a698d5a5a47f986cde16abaa69a6e315f1879ca0c6099edbd614ae3da82ae3918e964a539838e78cb6c1499500aa431b2511cf8564c96226c135764e27ea4465272d7a3137e434b2916889a32b321c341f09888d2dca6a6d2530292d17875d8e3ba4c5de0b4cdd49f77ce96ccd7ee4ce20ff61b4c7941c05f49577a2b0cc17e0cd06beebcca3c7bef0f71dfd9adbda256609b4d58d814a0caa25aa51ce0022a4889ce4f0a9b00800150523084a6d9c84fb80222001856539ac6ba3e3179d0d7bfe033a541ef736acf0e8c20ccc40bb42e66d918005bd45769ed766414721deda63b7854050fbf226f752d7a6476d5646429ebf8ead50c066b6feeb24ae330600fbe8a2dbfa5199d84588e7cb3cc29d8e19c6077d17b97532016832ac960c15dbbd0b39dc942d1cf19932283782be7906e0b0e3aa3d40a66b001aadaca63c222e40f06db83b8e90f8110f7e49149fd44f5c679146dfee1267c9e9a07a8d1941e7cdee2a5b7661dc128a0aaba2d271cb2892db31dc84919fa587b4b5433a45baf09c4a1028af991fd876ef737456347f4d1acece8574120062e5d98d4d1f6d06c27c5f929bf72082f1041963adb0049aade806067d6cfc5e035c18abda049027fb4ec6ce05189434bce6d592ec4e01291aa0990bf45ef2f7fe11c99b4af990529c033ab71ef33ba263bd5c80477e6c1b46486c17e030d35e7ff355d6850be790ecdd730322aa625c801acaa41325302023d51ca728f8c8c47fef501710bb0187a45bdb504b512d838b68015aed9ace1db2a09f50d10c4fd911ed896d4efc38bed0ac04a6768d95a856ca7a101a0f2764926d78f8bf6f2dfc6ccb896b08b1f185b7ebff4793150f030aeb3c8f4df1ed8ceb4b29797f8e19ed0d891dd3686bbd7dc6d8404aeecbedbc745ed7bbda5d794f335ee01a4f7badde2788ecd3587fc5ab51a02f5f2ab2bd5578702e74239cfaf4a7490f58b95e10668bd2f83e64cabb0f9f6295666bd59f7be5e2e73ea54ccf84b0e8133cfaf7e429a05c6e83ee1f3ab62ea571d13f654ec44a426d04efddaa68a6dd6bf168fc2109353bf86f2bfeb6bf8042f02c0aaca9016f70522c2df507a853978df55188a708050f2feedd81541187b0bfac22d9a7489a4b59e77d87ec5cdd2fb251fa0f84b7cbacd5f424f0b400292091853cb5485861cb8b1efb0c6cecc7b14a7714a8765b8cb13d7b8c7618db956574d96f40403b6959be2b2fc22fc7887372cc26d7c55ca4c3e2cfdbadcf1288b21b0d421fae8162066a9e3d1402b4070298711812b80f8b29de98a5214d1bd4591dc5334d7c5e060bbef246fd8f990cf1bb2433baa60d1f7cd00c265a71fc44f4ce419b780251aaa71a41d15a121fc2456aa2e7830ce83c5c27fd9d71d685fbbeeb81ab780331ae633e1a80c9c46dc8b1896a80ffb024aa3334616c83aaa1f81897cf95d46131c15d06a36ab1603ae0d69dbc0914d39c7aa358da5e19bfc4bd09ffe549e570a13a246505a80537e583ac52aa4f66d191993131c55cc3e3a115d2682660ee7ca123d7af2a296a70ed06bcfb57ce1ac6764fe7ac9f2efc757ba8d66b64605d559c03935c15394ed54c33d70dba65b6a58919490a17f639d240a177f7b17820680d04d5da8ec22e40a690d879526c733bf704b7df339ba51676a56746855ec16287cafc2d100ea9cca7d7c96338897ed90b22da680584d5137b97e5b0500c4f9f541a0a847b3bf9181095f26b59d680b20b82c9dc00bf3c6cf8287b07a119a8188e594d641bc5ca718b4a1621e25b830ad005b18d1d53c50a1b0e5a03f783a3b095bef2933c2d69d6505c83a49a78d0b88f5728aebb99b962ed8566383697ad2a79908e7311d931fd6783eaa5755d8d70788614cbb35452cea01ab6d6c11e9fd883aaa33bce07a68c5495badc08b5d00e169e9c5d824a25a9d1202c50075fb54410e7a1d491a05f97174bb831c18726e0fe9b04eeedd40d2f8f65bc5666004fa585a9ca35eda38afcf1674f4183c628b6fd05d53e513a6752a5050ffd4b280f6369850959224b2493742adb61d7e4fdd70fb406273a4b3bdf425a21fa464662cdbb9f69afb30dff4068e7b7dfc6a2e38d150e156948413dbda1018ad7d5abecb581d6ff133a1e1f10a82963995086472edf8215cb49f162e197c01d59fe0a07988abe5b92d8b46c41e311db0ac61313492dcb518510bed22740cef767f2d0b5e6884a1a3e3d03d0dda78b1394a0b4d2d802b3d0b2f456802a27a079cfc273328b4f114136e6a096859e6633e74e7f24c826277a91efeed529c98d74349554a62498a3f788ebc226c72bce8b7386c3b8a8928243621d25ba54ef6e645e0bc115c816b93eb00f80ca3416f23bebcb90e48807780e624230bf8f704b763949e5cecb8101e2c5a62ec9d891a06bfe8175cba764e41383351e6e4056d02e21c248caf65a66188e2e2ed103c149eebbcb599ddfdc9474b43ddef4b880864319e3a1b10c2c85fa31f2210fd5e3e0790b62221a666c997e5913db6dee2c48cc43f339ae17b199a764184eb806a846227379f2937be6f09908481143cac85447c5b7d32e347e21d24519a37b669d78f62d2865c57aecef9376e6fed4a7057b075507be88cb5091aea5315292027f7a8bffbb861e2b5a727527af436fbd1e8233abc8aecef389f755791f27e8c5b6427767fc6ba4ef52714142eca1bce926856763f16f0fce9b46d27674ad02c22806610a59abef07882f14d1a987c9c8ce61eb74f77e2273ec6f008492b9293952926c21eea0849759e676ca1bf77ca16cd10ba1cde095d97f28bd39be379505d56455373d9bec98abbb42e003a1d5bb1b80c99b78d9441a5afe8528dd9c1b496b1892f557267cae02da012b32905ef69894e24553b98bff01280841899f17dd4a6a610792f760111e16b945ca90929c190c6e5eca0bebacab4022a1a59c8239abb1ef509b86d35d082a5305d7e244cb7acdd3e003252e6cfd665a6d3804e2a6702f0b7f735a156803901097435c49e3367c1b5ed08d959cc57b68cf2a9c4fb9e5053d2923278e51e6e0a9a8e99a4a5662a8fbc335accea24e8fcc5a9b82e3118c8a265447d02efa8614745a694c1029f386b8f36f650b7bc0b2e68af76515e52498810035872e385b9109a83bc736ec4442bc0c28b702d2810123840bf13faff50bd3dadc238afdf52ff827a46ba809d55b1c2b7ec811a49d3b7cc9790194ab5a5cbf4e46c35ba56f01d58ea0d51bb1f722c811649a740991a02203aa88bac5586ba8ba15a55d4c1e1febd59c7d89398684a34b11f92fc8f9fcb5f87308cf399408ae105f27dba749960055b6a86550c250ff2f4e63f98af1064c530da4c0240c5c8065a264e087dc4e736c9d0e6ea10e3fb2458802eac443573bc7b9b7ced16a971f57279eb5a4950614fbd265634ce7948e1a7100406d73c551e13b7c26020b70abb6f904e1d4793a6a4100c3434525b826dd56760a07173045bd3179ce6d8f6e5f9b10d7b90da5a246f615ab361125d31e8e2163e7f970434d4956c41055ae4aaa8b4f3539f3d1e6200ea5fdfddde9cb9c51ab1f78dc9719a0d24bb8c20e2f2fb8de9a20405fc93400b2e355118e425657a1268832e9e26bbffcf931cc5a4f2ed26ccd14ad7e1c5c9204fe1db25489932b3911a8c40abb2d8c774d4570e3d83244176ed03b080d471ca028b84c8a068e50a9bfb02b4b58e39f97708a2c0016674941a5b7402242d4a0863a0e1843d40647c449f92d25900052d56a332a5057720abc760edcf602e9012580911ba487765381cd350cc5dd2c97b393cc24b4c355a09aed8bbf8f8a2ed93e2c615ff0a52636921aafcd58ba381e433e0f9723419cb6a3fa455ab6efc07d0b798325115594f17133a4b0ec64088c10a93d224f81ab0eb72f4e6041941494ce3f501dd2f4ec234dce322c5e0a364cf148ac2556bf6bbbde64941a3e4fcf94764122e3b2bac890fc508a6456b587cfe71bc83919ad568893b4e7997ef3d87984a32729565a0f8f79af00fff7281d979da2bd651293acb2134e38d5fc2816b7d24bfb878e4ec8b299f02bf80bf68ea151041024f60e9124ceb51d06b01eed1bdbfb72003833b8a796116297e5dc47139bbaffeff12214c380113f17c92936084fb7ce610c34fa2b65b1093a6019ce9370d10247419e70cf4911e0e30248bb3f2f89633b8bfe282503f6245bddd0e5a046bad427b6013885df8bdc542cc647de37152d2808d363a2fa6d937f3ecbe717604cc52b6c4e3e99407c2fb9d5949600c048a87e30864a189d46a8ce51f99451be63ba1d69f78478b05bc004c7cf2f5f0386a7720a82ce452ee8ca7f6bf8b6e62462da95e965ac32bacf88acfcb23bea1a7d29c5ff6d1850df3e38ada9dce725ad10ade4a8b6a08f8ed569f30acd65e9d9bea29a17a6367820f3f101786101f3f03e8e76eb995d30f75474bd30f43dc8e56597db9e9733b02bf08a104a5c721c9cd78930b4d31df24ad0d477d42833153528bc3115c996aa4b7f28f0874e613e76856276a79782e7c09026d6f02993da1bbabdc0f3a4973ba6ee4a2106573cc36b5f21106d65a91a95e1ad0c639daa6378f905e354976289ab204334c050968f64fcdb268356d4cf0b2d307f90fb4e51b837a8e4f7e2f26803123e88ad3f40685186fb0217519cdbd770649a46c3d56d011e532b81047e221156c5d81fb7e85e96a5644aa81d6582ab69c9ff9c3164157b3e23a33b29037f0b68257fbd94dfbe197c68f197ec1accbe3e818267a9f935e905593b009a9588b4067c5a0b3ecc6a4c6ec0cfda57119d4b2b2c792f3d3072e635d0e9df715d8ab2fc9deabc15fa5ef2130283cfc179cee84d3dca207c98b0bbce45b3c6d453c4adfabc6e0b041349aa155686f2995be27324cbe9ad8e8689320205ad263eabf7ea7d2f761149786d19923f8576df465890e01ad7b6ec711e487b7830fd3b7d0c6eca8f9ab76a37829610f551eee49dd5f0c6c2d45d16764a5ccc3ae6ba5db421da9f623360decd26981a7ced755e3a53695f6b7bb5a816f9da29608c2b2281c1cdd3c2f12412d2257dd1dabc0e5347adf76832192c81348bf4c077518e82482c85f014964ea2adbb55e7993cb97a5c391a9280d3b5b774c4a349eb73f0972d92d836e248016884ceb3b92520fc0b8e99d067a3dfd79c4a707def4b55598dda391029dbf7aec8d028451d99863e7e2c73878185d5bda69413a32f13036047abbd659774db1fba83dd562e4bd9d9c5247724a6d1cb7710c3f586194bc93b57a635901da020b24c14f746d5fec9cb8ee5b0abfa1196e458b65fb4dc53cfc1bc781e6387d151f89793c6178bf6fede1f05fd1201a2a0d661144e9a57668af76b6f2a139a3374ca2795dfd26a2d6793a25478944146642d0f3a65b3f53dcaf0cf644b430506a0a2a3610c745eaa08257a492c3cd9f0cfd3e4af9989377e7aa7e415a88e9360327fa23c55c8f4fae1ae7376024228b44298c91c718ccc0439876154ecb7a9c1ca346c25a09966f9eef4a560dfca620665b816bf7d1fb91c8b23cd3b04a4152088cc658167e80c0674fa96849abb33e6d983e0358fb6e40ee800f7c011b9013bfc21f333033f23b8067a2bfa586e9eb2c3291301db278710a13f8d4d389b4e70ed3baf7c5b8ec13390f9da72b64bd265cf60b05d9d85b909eced1abfafde2b83f32b05b124a0ab2fda7eb29f29b3623f4d48273f7f71dd93aa70f66b974dc1ccb23b29e14d51113fafb90e3903a160ee122316f2ac7fdb395af1b1c99f51162e8cfca32b22c41fa472a9806233d8df36191e461d0da78961584de44c226216844f457011cdf064a35c72c5112b2c34864cc34ccf14f681ba0094c84fa6d50a27a2febb0ca0e12927177405f8dab41639298bf4fe9f591a4abbdf443635b0ec38a809ce2ea5f790d9c7460452dcdebe8b1381c07d2d4fd09665a38eda8e82bcae294abd1bc1e372ba408469e0617be81257bd6ac9c489da5e6fbdfd0b3448f2477684d00a5b7bbc636a67e58a00345ba1448ac23b4dc9edcf6288e770221917685a112f8eae2028e7691233e4519e2ef1e4d3e63874f94091e4ef67411882d9334e85ebb7f4648a007b3f1fd40750f8d38807d1bcb264e31df61e338fd0d0c35c11b588b891733ea9e369fdc8728cd957c12367384a77a0b8a92a1a182bb7f5ff91266c938813c80e801a2691ceae399edcf0b0a4643e4786645d9751c09eaa55da64f60532c204a86cef6ab9a3a833ac81a6e4994c983ded95570d18c6c4b3965666812cc00f5a2dca2d0e577c10ac4975bdafb961c836fa165227a643e3a322150535c508bdc13d08740286cc7185b9e4896da35cabcb17e404b10a5a7c9b426d12dc70134fc5bb9f7b55e3f2bde0dd42f1df5830755d770eaecb9ebcf43420378016b507bb6883de233f82a1960271e563ea014788547496ef596ad1cceaf3b2837802d51a1535e2696fceb1e73ef5799966d9905a68dd939a99115d393f48c8d87d3f496f0e1d8c210fad8ee5693ab38c1b72889ee7a33dbba339865f9631a56437259b100888a294bc22cfb38aa24a72c1ee50ebb56267763a2056c5f138a169649e75a9e51fe24f37c7e11b406381e3c57758d8c1f48eb45b30a9ca2098dbd488169b6626fa4c3af3c2373f013980098ad110cdbc55392847846bfae6eb806fb1852aacaa6d6773a86c6615f966508b14e6eaa64d1588f387ea44a96486019f02eaacb8c57f7b6e6c71f7c0121236f36c4919b5a280ef391bb07d54af52d1955b2108b9fa63d32399c4aa65e1293edc5101d93c3473443cd20444825d1957b031c0a139b61e6640249cebb3f5c56ac52478cae0f7f4a4d60d40b3a88ad240358b6e25448222d3bbb7623d60f59ef57b59e2089113e7e552efc45cc1c02c7c070124df887164824dc301bbae0ac35a33d61c9a7ccb1fa0de31397e4b8284abf12e426952ea3b31512e2bc222ed9fddcb19b04d0273fccc8b1cb14203af2a681c88c1d22ef425d37b7743c5b724839c3b280c8f84e96a07cb4f2fc2443bf3261a2055e4d1c90920c7440ecda44f85940c36bb79238f7a582b8077f047c57b486b82f13a2f069a855def2a8e1db0c6bb476647d0ab30b172a304577a0253ffa84e8db9496fb80c8b751d74ba35e006e1704ded8923d8a6ccf8660cb3d77461a2a2f3d88a9491b6be6a6f18a55d1ea69ce35e651183660edc617458618e01da55276ad4875b8c788ec20a240642c496b6637a1791719516441316fae9be3664be4af517c59112205f5045c663a20e5e7fb006bb411590a95e929d1bf0d4154bc4854186d5ad129e157cb443e371421fc6a07d93145394c56c776660a163eec01154e4bb2bd866b1a86f7042d0772c2de74546d887f579a444662f013ad63e51d23259c0f62f9f368292c52bbcd979434dd912f86b39923007ecd96cc4af136892c13d324b26ce7d1f9681c50f832d36259763da59ffb18085b68bdfecaf2f84fb9104c9c19467f7c3266ca43bee94a57d84ec909907612cd19c4be89c951b8f4240b0ea75a46b1dd48ef931d762ec84ba5d8ea3203acd2336b09b5a80556128a58b7caad426ec5231c960a39b04147a0842d897948eb9e0b9aae548c48f0ed9ecbca5a14730866f97cd66d43460bed96eb876f36f0f46811181388a79ca5c3f353145b328f90c01168ccd6a69b735833d8ad3415440efe3f46899ad892f9c1b7c7bf3c6e1b715997130e989dbf20321e51a65f41acdc6e4ec4998a452e0c6da1d3702ad8d7e0b87c9e95ddbf9dc8d23d7853fc70c1c921df9d3636c9470f6b93ab713e21aef53deaddbe5ae9bb42eeb623a90e88d0a88873422d4838a22ed99470ff2297aee7d0cb893b5a7c8c417db987cfd542bdf4b88baca97c8e148963354c89b4214bed814d8de1d4113de6cda6334d8f5c1e45d7a27145b39c5c2957943f591e9df169285f555c905410027de53994357c0fa1143726b588bd79f3a30c0377dc98e136a784b1e5da4dd2b9ee18b88bcfff012d944835bd4d820aae0893b2a69acda5e3f116c4706014b62c1cfb8ed8f5688423db8a01ba4ccf405d7789e154e08581d6631fb8b8855e96073d90e8dcc96c4c7af2a4b515f9f67c344ff5760d4976e6a9015f99a4e4812c762f627f4016a38c17250c741bb56dd2044aefd47a45a5bd25c97e4967f57797d1331bbaa06c06c64fdd65a8e4b53f90b8504142dd5d162ac010bfa8e2f52605455488b1d5a7528528f003874947c854305a61dac6e0f83dcb4fadba7bec3ee160ff2ec90749566d3b694af3cb084916b2c8242c4212b5879490acc406e260783a32f4d7b9cc226ef10457b4c9985fcfaa07c26390f210f84c4a48b6d40b68528047f2882424af084fba85bf7c87cb08c9fcd831881f24ab5b125feb2428505257744a670ac833c0bb80c95a92c1f258e4c63a65ad9c49a421790e75918fac813137b9ac150c1d1373b051e58ca9b415030324d6debf5c4fde501c75b7b37b3f92a51a0059a4d48ae06822709aa804a9301a9c757803b1784e160332dc8c3fb6f5c567a0dcfd2a96aa17c57ec02a284e71c3e76f8832da23ce49d47edb2877cbf15c936d3d9a67728e78053ebae9353306f2ebf2b7f04e0573e4a266cb411bd4b8928c8aa906dba5a02a8b1067fdcda055d78742d12277f3dea62d8227823c74dd048c4cd02ebefcc35ab5de169c00290ce45ee18f0de37c46bafd55aa9ca25491c03ecb1ab034c274f40d6a6ae4e1c52c2b83ecaf6a6a1ca5ab920edd9119b06775096ad81c17492db0f8111ae694710c5eecda24405d50e6b1dc30c6cae8e7459e433af2313adcdde6aeb88bebea3c0bab25f3b2cfdaa267ae0258bf8c48e97c8f8ed6be848f678ac332c7d57962afa5bb0248c5dc9185548d565f2d8a30afb8d6f0f844e22e5be3b296c113c00756a2c40ce91886012a002d083cd6ac7c3985e062fc06c56d7a370fb103f890d8708b225918677d182511810365c045386bf4bd63cdd6073b2457d91c32f6d5b20c23c69125993e18d1384c44bbfd24105dd1439bb0f4ea83cdaf72b085a0445e983a37d91c1b3abc70e8e22997f5ea562b3adaa83770bb5940b808f646bd2a5a3c0ffaa5155eea3642af3c5cd545cace9629c836fc106b2f5a0e3e305813b85f99ebc091612f399620fc29a8ad4caf8753475dee69b1793d44c54c17b32ad6bd563cdb51513905d9622b850b13abeff32058bc3d0c7e2113b8f932297b13fd0512a4c0a35b5420b37c5e8e8676a444ff473cb7a61f75595f2c4d71eb8beb236b74a8abcf71ee03ea91139aeae2e0ea8c3d404cbe6c64a3ba93ca8e46e8ae87c393a51fc7c608c0410f60f1ea46c9889d47f43e6fb67d5eec80bff7c245e813e2f3cacb1a9c154a408b5bbc6b88d63c0ef11572c39f5ab8fcf0fc168c65589ba5c89e4cd8d866033c94d44a116eb61a8dbee688a3c93588707e4b3ebe6dba1fc8d334a41cf4b125a40b3244de139dada1b7b84215c3eaee96084e0f09e5d5de105a3bc4792df1b8aba187da4f62a0f33ec125c7918613fa2e79c188f648d58e34043be467fd92975797f80f65aeefc3569e1e62b94a065b0818d332deca660c29abe45bda5ac53779dc96c54ecd11b37395773b8b391bcbea5eb9b8735b36acab6e62d3932a6b709d29f4eafa14a140532c574059595567b5e6306721bbcc8757513898618c770ae1bdbad69d34343b2efdd5f38a2b8d5b781cf6deef0c8e8513a2529d3fbafe1b6ad189784b721ba7d1fb1e45a7dee90f97f3fa1124e25d356eb3e5e2234c3c88788987877849c90974fc66c1a0286118e32823c121f3bac783fd63f68b0e8457ac49e6740af26598f9e86c5ace17624306bceef11fc1dcf7908b2f5991524ab4fbb74bdab334db9b93814065d6f6d843c651570e692abfe6c43571942f4a3942475c8f5434097d61639a0c2b6d4ce7aae6e0417834b413f148af17719098eed88d38ba5b9a2571014fa213f625be53a6bf714298c23ca1fb6d29900f49e37b4c372a40aa92652b0b2a7397811d78336a496eeed57dba1d1054aa06bf2565f003cf2394348faeb9ef60871b285d2c904fcd21669f1b8add9173adfb0ae2c8b96e417670df5306917f2af8f4ea321dd44d9a4086171ae824c2351d38a8aeea36cef649789e4ff33a98b59b2b6baf73ae3a654e882e9935dd84835823e0dd9a6bac04889a04e2ba807835cdd18f865148b10d6099d5e130b1cf66f8e1ca863f7af6c7b40f13bd79984022911bb3bc76f2c821081d6ab3434b159bcf036d98cc66fb76ea10ccce5083d3fa3de59dfe17f1f7f2fafeb2c86b7df228fcc85c150d9ee15674d05d053e93ae87cf3179030bbe3bb1fbc42ef0260ffa05eaf1c958fa27834bf58f6c4306d6e71af09151acc3ccb6f7fc93158a7690c90ecda2cc6d27e1bac7abf3cb57f074ce451453264c34f5e5f08a78b375f12b4197fd215b8c2251dff15a7ad807ec99960a93a3488cfdbcefd9cfc2f11468def2caed9ca1c7caeb82ff95d8a0cf239fba544f5eefb6c0738244237b7e8db6bd9bacd002b57fc2371e38c56a5aaa2a948022c84610b6e53c01563716abe81a9d714956066d2d28b55941274386fc2d7f657759addaa16eb9739e8eec06183cc4c7fdaf1498a389cd6791a3596ec0b1cedc4c7d50ac6d738acff0271c80344d07ca4b516135d001b32567d7bcf87b6b00da0bd2a336c830ae3e93e0256b854b6258f0cb122bdf405be8ca8f17aeae7cbf7312d7d85f6d9a4ea250670755b3cefe441ed12a019515317b9873e09df63322b655a3e391acaa02daf662f5e648e5fe5dc41e774aeebbf9dc02a42450ca12fabe29d028f582c6ccbaa865cb728e4e927550b10bee3b3383ffa4c1d02b99f0d0ab2ff3b9289f7766884af4f4f4c8c71ad07f8fb308ca949b1367024eb595d8f3a026c6860b504550906d22c890e8a3d3b0f09c43115504a3c540dd806f36a01ddfe9335c70fba71bdafad342828e99212ab95966a29edf8fd4840e95ec253e83c929b8994f3380b72bc2aff8383b94653bd32a861c25d89541c174f3c76c2d873f81a6f3cbfe76770d5c4b28732e2583041cd01274ea1f30dab389ee90114902828360c4f8f750faa186e7e406c5acedbbed88b9d5a318b37b860fb5404ddf2d5a1474b862d5c9d21e77a9a495b0c5030ed38c93a629c6a7252d5c4a9dd637806976d95b67b3c544ae2e43208e382d4246b03d8dd5a7a9e9b1a561e258693471bc34983eeeb44d3526ad268d9b5653c649abe9395103878b09980d1b041a79f5a588e9c4eadaaf7909bb7ab56b64d9a1b2d1f043eb0e91460092a9889cac8e692051817a2146ba7dc6e5eff81e013f6a7e804a840f279a9942141eccf834399feee805cf1e6ddf4a4050f2412b7784633330ba01b2a42c1fbe60cad4711d551924be5c17c5324df61da6f9df124c901dde3568e8345f1251b121c57d999851937e95fd86217384a5a76f01a0a94092d913d48824193f80076050fa1c66255014b32463f72641f9f606b131a1857f1a244432d7761c23aea3ac4093209f3e5cf3a0d2d5a035f40895edeca966c43f4580c04da2288c9cb1b9d0c61624b106f7be97ca8b1065523cc3ae3a5cbfa8f61987a66a1f5d32f0c0012f4654e6269220d154672f4728659b39180066c674c694fd45ac0acc3587a07e48cb23d490201e591bce03f864d785386bee5728f27e9d9b38df3475f3412bb47548fe943a45ded043f02304ed120e418e4ea30e47d0c1fd4a4166fa95713e17913ca7d00bae7f37c7123c6952fd49f6c421f05de90fca2b368e3149cdc46f0a688086688dd5e33b14b7ec2ea421f519e4d24a30d7703bb00ad7a2fe219caf4ac9978cebe56722400a6654812e94e9a6f83629498b5d43678651008cbb13ae4cd404c18e34fba9ba00dcc24eacfd960ba7c5f33542186b898ca30673bd3aa0a18e002bfafbdf703a6ffe363eb8d78d2ce0f122b469397504e8f740931146131e0c7123d314da56aec9f6ae088d55c68e9eac04c52e9aa17011cd95e3ae42ed5a6b8368d4e9fbd942329731a269725f0f98667059e6597ca09a9f907f499f1000df6d03b8bf653a8699f00929aa4d270c801f56a0ea23c2316c8b6a95f73099f48856a4e3b412ae3b7f5e65c90aa8ffdc348bc309c316be1250b48bcdc6067ffef2462fe320db2bb3a8a74c1191cf185ada828871d390a7369abb6fabc539ea2909c329b16545a25d8666e57f6e5851c1846f874468e2583d76a79927866fc69558093e6ec133bb5c2e3e5668cfb578529595c99a82fe03dbc44c3bd9cb19e1e4a394e8039eb347cc3c05ddfcb9b12b88a1b89b50e811d8f59d24d7cdbae72c885473ac73efc1b379389df6d44aea5d6d517f02e4c269f14379651a9c0122b5adcda45c3d7c15b3dca8e28bd6ee8d721e043d65de63240dac4624e96ca3e421a9a0e05a5e084984de7a5aa4480ad3ea292f21a9fce7a9f110bd0c8a22100b7e870add6f28cbd743d5a205dacdc36db6e3890fbecc8f90b601d08ebddb01e1a9ab5f832ddc509b6aaaaede1af33d95201d5470454d484d2ea4d6d13d37d2bb4596e76cae16ee1cfe0727995a8e9f4c0ce8b94bd0626ee3ea5e6731b713945680c9837e6c105f66c1e91c3f55bc474bd36ee9a6f72921851452e5e61d935138b4bd16d66a4a1171114687e13398ece656f92332f109c00157b16ff110a6c1ec19bf9df557a00b6fea3f42ea78b004d7a3cf3ccb451c211ac0b81fceb986fbf1a3c42d45a869ae3805cbefc0d1a4442d6ef831dcd0072bc5f44c0130d710d52e60aef102be5ac884cdf0d689b04526f130244d2b73c7136dfb7e4497a2ab13ea7d40a6909f898db31be2025a5b8c3c9402081b114e173d3e95bc0739bc6a991628af4647b29b1fa21e720b998f40acb2076901b7aa6501f136962c1a02770419a015e0d8fbb4c17117ba8f955efaa4fc291650348253f21857eb986e2b219256a89cb62f948341a718419db1a6086d57b12734955ad47c967f9083ab621be4637748deafe90ae32ee3c49645b17d79b189f9fc77d11060a39829d0c5310e1e4f6f53982fffe9e0db5d0fd854e1f0ce028e065d09899f1abd35d9c6a0ca3e96667fe64f1173b1a98ccfa31e0194e75add5bd0ff74d7edf99fcfcebd752971d956f67f07b757199aca7c6abe7f0ba8f902626d9713133fb9e2698fa3b8110230c123f44f95b3e31127eb9cb78ce9a884604ab343bc5287c7faa60708e7c240e5085e608d8124188319d123a64af3720dbd25801a2228a1570ee8eb067139f104298eeabeb54aa07c7d8b7f23342ebe71d807b99e42536dc80b6d6996cc81774d49ae27f49dbb75c67ea49b6ae75475623b863e8838aa1db61e7f207c57b94b390a1b14402044075823a1e8a96c3f411487266f15eccc7fd889f7b1b9c75b7928f37c5b9c13d80d84530df7acf24b2e6b44cd934b8062407283ab52ca03782ddcd51c02c301eb4cb781092a5fa1d15b81634a80872c40cf1d87251b32e10c7c600c2d3f07160c100e4825315e446c6b67c10fb8888e9571291a174191752c16b7c01f6229ba590f8fa8780dd3c8cc847c535191aade872cbd1479b3093687f8ee5c21af05dba68de28e84c0d7462d3316edd32d00164fcd851a60bd2b2aa0b5579540dcea49bf32500ed0eb1fd0ad099c4c420772095c6722573d1508324c168c0b2cb54aecea400c24f62302602e03af43a60e6a296d5e492e4053df8001aed5be0fe2c8a5f42068d81d44e3e2ebbbbe65859930c6bc22527eb0af9721bf24e0482e33897e7d82820a37a5c13946dfa3af1ef5804cff0b1e69570218caf194abbfb211abae617bf19cac69c25ab38835763b34bb285a8c34e26a0e21905aa317c97a6a14f2087f9f70eb2dc8fccccf323d45b05e4ea3431cceaf1acaf33ff867dd9947ddd27f5829fc44a2ebf2644adf6f8da1b3238da95f250299fb356320e2432502ea344d540c1118800024b181c2e8fa600d40560b699c524d44df7d9502729c986e7de30ef10ac0e1826ac1e5c0d9ef5f4adaaf270ba9ef2c394e417e5a0f9059d84aeadf0680adad973cdec0297c34f4d323c9a6b4a212ce93d75612d12b7108d8cc7eb51ccb2e4bab81d549a04e2a6d678a1042772e9ba8a609885b0283e8aa0f1bf4c250e849d0f84860aced59800ec27101d035b48a02ee5d5eb9fbe21167d2b67ad0a4f50bfcae9715ed08715c78522c6cc89c184a151984ce313668bd19ffa8d00ab008079f03eeff6f5a0726919e8f52a09d2224cee688316cce1b90b632fa75a21db7d3b7173ed20d5a5d3d319d049d74cccb68ebbe6aa87fd7c3791a05e14ea42a81cc9f12cfd56d1fcd1a3d05ae224e6ff2a008511ee64f3d3492f0b1f56c3325847397b28a5e0747f988fbe31c2e49c6eec66dad0a0136bf6928424477291156425e045f95a1f8a5166a491db2a3c2d8ab8f4b169746828192860469d98d2bc420d7f45ba55ec46dbc2e3cec6c6e65924c5c1417a5a4c31870850c1c1b69a38fb59d795929fc4b044ec6d3be580648f5b8679618f19d3842fcbab5264dd196b1ebad791ff7b9b0bc13c8906f498236db0c14c9c2712c3181851f5fcf961dd56e5746feacf55a068e6b90d2b7af8249344a44b7528daf02c7376d9ff188210c0897683b81479570f25f44636d370dc1fdc56e5cec0deea1827f45787afe62f344f4505ab5cf142a4cfa3994c20d044560a5e77f1509821016c07aa0da4a5cc3156d3f946616337a4a304f5d20e8723d3363d22ba776519825f58b4e22ba68af01dd1afbd058292dc12f00d0f5ea6908043cceedab87ac3201aa8f091ed51ca72aa0203723910dd7761ea6fc635900183ef2c661e86ba2ffca053ac0053cb7f307031580ea2b0e0847edc046782400747690a2e847ba28e02ff1209afe4d41760810883145313a30720845fd019b292414a6f839c1974eca2b83c203f9284774ac133cc51e7fc528fafa71c5ff5354bc718dbd00027971bdba031a799053ecd51dd400a95a9a425608d22b06d4ed69a0e86d37c9dfd4f0c2adfa70eb2df62acac1c3a1f33f0c816fc89a1b3de23994b852d2567f20b2f865d15372f24501e60e0e20d2ba1d876586ed23ab4f1f0f9041c70f51682aa00126baa54d9279ce77058298de16407d20c86cc0c2e18e0f452433900ec098c680445743563aa4321373d588984236532c257b0487799ceffee7725ff039804c5299615de956d5322f31ca22d0cb6768b9c0359cb2973b0598210f1502393c2f9bd88a7468923e55c02ddf06e1c3ed8e3632cd02bd9049fa5a2fdf9550818ccf6a71c03bef585acb09945e6995c3dd5336b9fe607cd1dc31821554e572a025d26a1b6d14075343c5f3efaa300a81fcc757e8bfb3962ec5af748a6d0c33d87542cf708644771b31c8933722f7fb38d183c220dab484a5f95a1396213a5937e6d2f4c2ac9da40e4272298eae481ae3c4ed9fbc5436c81bf202e6880d421c787eec8af99f946ea77690d05989a0a390e46d70b2f18d05f1dd5c90583beb72876db80e2e1c8b4aa2e39b4026802fd6ed49bd32ba2f47c00bcf494442f10dbb3ad1d217ba9a8fd9d8bdf4c0cecc32f01a5a4c3c224d6be9a9c967771104bc60b60580eabf854524ede020f336aa530754c67f00e46ba9feff02495b9556877144846e0316d0226ebe46f1613a7478428db98680421aa5aa89d6f3e7fa1a753e6d5ef82a04ca1f285fc051bcbe1788d604f582d33d64edf125101a7105a20f3c124713f4185fecc508f8ba7386d36dd00b3e540794c251f7a5d505f59a6bf443ca35bebd699ad6016a7a50920d2bcdc493abd9edc429358e55868a5eb0aaa23713d1b1113a6a2262ab038b11eae3e1c132b362aae903ed0287ca0e1188b50af0c04e47ee11f0c9066e94ffe7635838f87b0a6148b60bd71e178386504ded44791f7187b36eebc7b58c78e4ccd098e9484339160c5d2607a8def8d5d4cffb96fda94d584aae5abeb8b7674fa183b4c0d6f0a666418043670bb0ede564109d5742a565837b1ea20ba036901d527cecec9239d4daf6c1d785283d6a23be4688016aa1e208691804675bd695289a6c2f0d56a1813b0ba471493db0f8cb80deedc4973c9135549ac8d90c9f26bdd7b40586571e90dd71adc85e66d8e91d7ad14ee5e5059563cd9b1ba696f9fbe045767e81516d8c75534f94ad9dd81cdaaa762b1ad1615c319240363befe02c7e5b9122a05f953a596063599c9de1174cd2be84ccaccf45f893aed07b9c6a13bdb64e2f108c1b15dad50c8b81132704e56f1f15b2b34f33158e7d74a2840e00e78624165c1a466192aaf9e5099b013b93fe6f099479962cb51cafed45bd297023a2d5ec88fc82ffee4e5bc6a805b498c89483500016c377570c420f1bc8c00b14008b250b3b7221164864288a5c31a978987557d96ab5f2780ff4ba8279a5f2022bf73009a8e4b24b94de6f15089b53355b48b3e391b7bae599e75a5fd74dbc6fb2a805ba7f1c58e923388052049daea8bc7be671214c1cf1b9d3fad54f0ba96d4159ed1ed93fe06b58d053d5e07aab9f6cdc0e2d832d72adb7dfe4b195b2e723d642b0ed11aee56f39ef9a6316b2a8408b12baee6f8d64cbcacf6509b194804e8b206e89a0938cf338e43edfc23919e11328fb9fcaaa232b6ebad58f67a097e136a3f49213e94ab34da93daae69bd67060496b778117ff411d4db1f36654eec512214e57664d55c6a8ae450904c682693608aee52b4e49c50ad570b48c6bc4cac5d16e11b975b06a15c548080c6fb8cff08ee415b22218b70f9fecda07624580db84925b9a16d3214add8a2eb692a8393b48718feb410d76d5a4bb00c8f1a343c9f77622f93e312d191e481b18252ab709abdbcb620f7ec650b5856720c884466ae70794fb725b12fcc8255fd8c91709bdb92a2c4ec725d9886f598e3e61f8b8bcfb00006841577be830a782beede0f094deff6cabf53e50a99b50f26cb4051493775054980556bcfca13372ca2bb829d90e192ddfa48e5d5da26a1fedf89952953fb83aa969fa1fc9ff820da1f9af1edaa356717a6b514d519e8f477e5ce1abcdd0c3fe18102d04bc650e07f893e7b9db968ba2b61362866de25773ae0d2ccab0dac1cd362797e0a18af17b66543956316b5c449fe5da6a424e08b066498260f806f83d481128a92b82a70dcadf44c8422b4e987938366103e37e7b7c1c9bc72e32c4aecf62c33e5d355f8ed3c5e9be0e528b4a9d5a139d80890d296e5119bba0cd99fa9e6a16b8cb00955b66125050014ccda5676d10e2c9e656429b6076a34591a5d904d22112252650cd4d6a16226d03364629ce2191c22658badbdab62fe99ba69a0f5fef2eed4fbab0e95728e8df3f89b996cfa12ccced4a7090f2ba99db52570947ad07efd167e4099014d04cbbd8ecd4ba6dd43e240520dbabe30410c68bf957b4ebb525f21cb0113a57221c166eaccb7f68ac7183a212bdaba7441d60cd98a0c780542f5ea04289dbc5923ca3340e447441d6e468132d17642acc5832007757ea9c8a9b43bf5b5893268d596bb1be9a0cb145e4c4b41228eaeeca352ee9487e4822deddf03977f4f5aa395bc704e5ab012a13d5decd89ecb86d3d9b9b08ba2762b23b5862bd1b8355f1cf9406fc1f377b6b68f401dcb493eac0d9e08a5b14643ec6b317bd5bdf0a9df2a9e999b33376f5bc8005d19561dcff220ae41752fb7f9156a087db2d0f81077b79a5b1be88bde21117da2d0763cdbe71cb5b90ff77b5ba3a9e431fe27aeea85faffb25252b4bf9e23d5077182a532a94a8aef49c08a12e0bc6cc5ae6f0f83e2b97b08ee4e1f1fd78b964758d5c1ebdcb05254d5de9f71c6d2b298044ae5513e88fc7f38e84641cb1aa854c24a09c3b41781da0c87367f594ecc4de3961788ee9919343e232c681b84e0afce214991c036420a54b5cf5f1f23e2e96b0aee6e0fd2e562a615d920bcff7bb8b92aba3fc3cbd8b4b25aaa338797e0717495647fbf1fa9eb324893a6467deefb90a24d775e6f2f29d06ba1c7ddfd3c94a1f34dcce8f23c324d9012b242bdd85008d9df50afb71b445d9dbc639d24594a073ad6f13e4a37ebfa323070aee4ee40fdabdc1ed436b1d3f5fd61fc75c3c4ba603b0652689f46205ea0e1e9a0e1e6a648a2139c7331ab84817124a5dd1c711b66cb90e12a316a1434681ab06a60ddb4947bb5517c7848bd11f70b1923e2e187d6d5ae5bd1d88f28a62fc55dc3f836a3dca16dc4e1b7eefa8942f08b8547ba37732778eea3f6d70e3e0b1ed8bfbdccbb51594d58c7178e373e20833a83dd1a9405e3454e71ea8b8eff8506e87bca1b9e995481895bf6a4b4abf8e92cae44a6ac0082fe89ce4e16555f618b57a03c4c1df464cd1ec63af0f8cc94a9ec681e8f2340b8e6cd064d24fe3835ed837c0a852235d558dbb445a30b2065a09740c9e9055614d83791e330b4b0ca486ee6b45ef534c63b857e64223d0546afccf365c51136ff6857468a5b51303233570a4c9a728865ffc2c1c722a3e44db7797f3242481150a143888778bc9561d2374025399d451f0b7cc7122ec48c7ccb7b734141238b33d45a088626d4a1ba08a371c85f7e62962ab415df9664d4e9dc298ed326bef98399fd19f280b2bc8ae397f7e5b10c3b18c591e6669edb2790fade260f8bf9c8ac2a82d6f65acd361a81351f4a71063b7e6fbc7be2e9fc24d091aeef2a7d1b767a9b5b6a91477f974dd939d3be87728ca7d51b8cd48fe9b56203388e3c3e69e756d0ddcd78b7e3769bb9f9a58dab0798e777017ed43c76d7a27412067338e7646d461909c606afd260a85e74040e1f97f2c25c3a94fe191f54cf8f4b6d07c777410308e310577c31f6ec3edf55aa625088261130795fdb238b03746d360fcc48bd830c3a31ca4040babb5adad46f1fe5c582e467f7998754b33b72bbc9b7dbd6210e041438d629c361248224f24f850205b65093220cbcf01432523997af81006c53878fbd27143918882bcef05e0d3f44168121017525c82d2345cf06e203f7627a168e725142d85a5aaae00960a54719dc265b53603e618965b5797de1985cee634993a066f070fcadd096e5675ebbfea2f91e8564597a12452c22adfaf6da23ac88eaad89d1ea63553d0070c30e4bc1414e927b5b508ba6b7752aaf1126008bb98a41fe6b732162194f2d498e8d9b92a97d0f325444b077e542f8875457268a9fc06ed1d95b78b85da41644a510cff662fa431ff91d65e28e951d00ae58077f387003deb7af12899a04a670f653556a86a673a6e7549386ffcc55a6afa1caa62bade0bd26619887b86348f598aca6602283497badd48e23e19219e2b3e10824ae15ecae86a9fd9d973a33f77d10b9f35a18a8309394f1246150f74d952f15cb539b2557a253f052acbf7c22c37a136c327d7d62c27879f7601d3fa92763a678913208309169fde6519e56a001673dab6b21c92528f994081bd93aa36b081e2f3f35c49f9c45841fa6377f9a5e72ea34717dd5f18e805ae06e7f7624ec1b152ec308aa10aa335c7d915cf954581750ea260f5746de2b992df822fd76eda4228581a47feb7cba301f17180bbe62800b2ee470d6261a0980dccd1438b495bf45bcdb6d973e4f80cf92042f188d81f1bdc7a73800ea657c03b9b229ce8bc54602dad1d43352347625fb756e9d4247bf1dadf6b8f6fc268756e30e48588d234cd32f4635db7a8dfd044876e4f79f4ef4678e78aacd40222b280b58b0bfe474f71624fb801ac5931b8ccac0712ebb93f6725a1d53eeecf8c57ca84e5bbc6cebc7fdcc332ec223479ac0632039d73d527f3b1ef8cfe1f0e441a079092b92965714cfff5a2750d0e40f79e93f486a52499905848fbe0a202d9dc801d0d559c9415391c5f2d8d8c1a51766628004001d54fff94ecd7a0d448136adb6c0e8d0f79166651fe2bee0f173a954ebcada566c14359a6bae8e88720ba1a6132583a046f4497d6865551f38a3a7d3bfc5f0839e93a8cae8992862525ce38320ee4493ce18a9106028873c88dddc3688dde6221558c8350c045e10868a02ab81ced8169bb3fe5bd45ae0424c6ba64574f5ffe65b8075f8b3040ec8ae8b595595a7d819094a894aaaa5107e1b2d04fc00042da4388906cb34fb545e6e9fba1ce71ad4289b39a9aa3c907ec26a470480547248d60b3d35525f8c25d8b8c6910447666bd090d6f011582b44a2445640ad1ea7dd4219ec1da9f68a4b48b0634d1257408a07ba45688a2a0cf227ea0b5579ae0abdc4fda5e5c6597660005d70a27b928f73472a827730dd48b5489ddae22c0fc6da63397ff67206cc29180a4ceeea4cb2368f88b86c0e3e93fd8e74fb47359caf98eda049cb08f8f08000c74a239b9e1781916e35c06ca595f4c1863465b655e52002be7bf8c3e169d89d172ea119f2ec5c94d971d033934181e941e2a11cae7ee279fb0614e4f3d616b78205226737e4ad680c1a99f32ab04d43debde448d1b06b554d2438e1abdb966a8ec4f1081f39d05b286339b403c14ae9d3b8ecb188f7c4694c6250b278e0a76aa10e7c9c35a29e2815211062f9070b828ae6a681b80ba03bcaad0f861fe7ecfa4392bea222d151619a864a2f197784d733be0e3a4a1737109f0c7014099ba86473bdcb12e1cbab0baa3222979d817c76a4f0adc17f85e1c4c905f988c4e194bd62f632644a36ba33596cee8ff470766025b39f29af3852a909d1920c53c69300e483d14cc4440bda1e4e8bbb5032489c6e04e6fa7d06ca862ae302e6370ed82598d9bd4c23e0361e0af84174900b07cf2a528ca5b5b54b99979a42be5293163c1363c6bc0a12a57d492c165122c57ee8c668357144b1606ea5cffe5fc9bb3c88e70545d722e538f67ba89aa9d928648292df97fe93d29062f01a652a26673a463722aba721262c5492459bd2cb0d781aacf392504c56c09551a3da9c92b65ad35e978ad75d1688023d68a1e94c226cc841b3a7979b9f297a67c9b2673b8a05d9dd0e39b640e48342700f6061aa29497b68070140f7402ca119b9e2157176a083fd4eb6490e6bfa20d0ce4d39ea8b2b386c7140e464d35717df87e513e7c05dd2415485e158b530045272355e9cc28063517128c10bd963b75fa6bf37b2f25090f4e3ab9326a87cbd00e72bbf610af3b13e756fa63823225444d4f7bdaee62b3bb8b3be694a7194c748632e4b1c48ace82dd8f8d8a7ed76b9923bd3a4c3faf36e71a5375b946ae061ffb62729f32bf351b27b988190747b7b470314895d07fcd2a0ba30a8046033d96b605aab2aa314b92c7679e242841b7a0a340623a771e930668dd9e0b0a2a9cd1e7973add595945e5dfb713c88a06099d1642004a914d0f5a5e06d8c2c2dfc54afed42544ed16a3e77d66106f501b5af43ccf12699efafdab0335d2896638553b1d97c73581595230453a4a7bb79e482d7ead79dc23672e1f39d2b6f7ab39d015adfb0f1704be72380a3078f2d886400089122941470ce01689efd19055849d92f642dafe2b96350318ccf04d7c963ea3a27189cd84719b276b53683f2a4ae605909a33876e2909df31866d923ac9ea0e9e609aa907b8ef7492906655741b55a59632143d060cc7c49d46f9c23aee061d759eebf19a0ff27dbd09f398e34469e629e23d15905d085c900266afc326cd3a0deaf7982f2cd0b5e7ace24c952be3c57698aef1cd4b17791750d21e350521c84db81fc4843921b170f2b40d39bc2287dc37e241d7306c2329e4e800774090b470415692fded2fb10914e105ae9cc5e712571058e9381dcaa3ce103ef3abd0f70fba700ca833f6ece953dccf48397cac90e5815633467a82b6941c5b64f7a3502372778b607889fcec07c91cfa8953a9df7ce2d13ef67a41536cd72d9f371eb332e0bf9b90bdb74c0171141e13b211ef7a1afeffdfdd5b707716dc7de7c70866fef5c412eeff5a8d20c40834ac4658f27fd5fc6bd3eaf85f23dbb69acdff9b564799aeb670d35b129d2449dcbdf56304d76a841bf7d77697b37f6dab6dbbfb0a2ab8d7bc7ed317eb52682f25b1b8f2da65948c731ec2e19c71908d06b83b08da205736aaac6c1ca19cec7438dc3a36d19b0fedda225ad4024f132170f71f587c7e6099bd92cfe2738556ce44e0ee3d7c95b385e89d2909fa8055c0e0de85d1d9408b194c1a746347a40b72240128f053106ae00e86082e5e23e8059f3c8471ffb172f7be707771eeb4729bbcd598b620ad9ce9d48b8b647fb1dda411052a8044124a58e0023b3f441e0992ff693d92ff16fe051c9ceb96cfcdbe8a96c98a8ff76ff256f7a6b3c60677077d552347a96dae41f96aec808811dc0f6c8183c1122f080c304106422c61831d1440e2c5208b20252cc0081f988009f19cf8a166440f00969c01c2e54560043a5ebce02531031e1f5e0f5c963c01c096095cb1030f8f4ca2f530981d1163e7863705072b0590e100236e1670e31d51c0ea88323908e267677ede639142182b0954e9e22ac343f580c40f6170e005237488d1ed00044c50a04ce088252b303a2cc850400d303862024b9078d171400c0c548084c5061a20428b4e015d84d9801645a4e0f3caa2cb010c8e198040830ed2165574b42ade0a05b0004b53049ee8a07829030825fc8005eba289eea7035a8c0029290722b062890e8710a2484086009806604962961101059440880c8cf8a0c211b3063460d2801020204ccc0646cc131c808525b014a188301a18622621c5102428a420224b121fa6103c5ce141882b0a80a2045d266e89242f1c909b410e5c0d13cb0f689a6858c286a51df60c7ac00d02084840183818c6f92306b307a20eb2003a10278e1051ac4b023b7060c5fd074f64398108415a4e4840929309c009543fe840a2cac03d04636850817c904209314bfc013c081ff093c51364fc40e25e1a60f463851212c01a12e2b716ac00e8082472c0c5e67224206e0062050d3ac042ba0339518415344c91224103ee28e4e08291a63186a0e9e2ee29d1b403289298dd9cf9e28b2c22b03a6385112f947146032ae8400956ba30a1bac43883001f9aa882061f79a9028c3337345146250a91a363075e9c09cd10c0067e100047010d2dce1055c0870f04582d040bb238037a8165f5040b2d1c415571e606025ce8220a2c68c0218927ce20420ac6a830a5fefc70a08933b62080cacc1823a841c2d212673ce18125a4018010a3802b923883026350207685976dc310479c018404b60841039828c30410469cb1b72002ce07b973430886386306228a76f021880fac30c587335c98a28933322124f041ea72860a0298c54e630d30f450c319351bd88012622a70860b13db8c3080d0c51806a081097cb0c268460b208004cd0a4e2c064210cdf8800c92187dd8308b40172c668431c05203ac00810a53109164c60e50cc60c90f1d2c48c107a098b1d4458a2cb65841142e1c5962c65106806a64b03024033f2031634818426ac094c04212658498b1230c0f57a4a08811142186cb0c7fc1de810a1574789dc0471937f842840e30901330463ccaa0a204ab21884421834a911b6560400724367259386045959b3288b040154441bcd084743bf39541830e8c60e17af4a0072aca28832e404b124028218129362046194c58100396d6cf940404008c325c05c0220525bee05006122fcac811019520c2802db9e0460b3284700687813244d08416465990a10512e419259c200151a0e08c2ac820c10d745ce125d131b485bb7b8dcd0dcea4319fcc1a802aeed387fbd452325d8bf37925afcb916c1a49506c8922cdedb4ea0deb98b6e08e2eafbd81626b56ea985897c26a0bc17de90d147d0b52125113a225b1264448312bb0289f44c9efb46e1d415a3923e23ea7178104eedee3ab5412ae3378718d66b12757ab9be6ad7bc22a02d923ed8434849816615821c6e581165cb438c110a634d1fa41254218255431453b119e49a281248805339c4002111f4a44411bb34206b4dc161c804c8d2b60b8e4120d8ea2b041428f00c8c0a00159042c10c01530600dd3bba21ca4b0822781203898d0440ac6c4e0894f0b150bae0802183db6173d35480032c3db020134e001944ccf61e4e5c005228811830914c1830bc40371044a294cff7ac073835dd921893072e8c1c30f3009dc714386709b1d94c0e70f8f3b0a5db8b887f3827bd1bba7b07077293a283e9f44c9d33d56b1fe4bd32277d7f115cac9a678a4c57256ecb99557bbbb155f9d66e0333bee8c67b40a77c7b23a914cb83725e1ee13c67d0fe19eb17871bf584e35b83b6b7522dd59337713dc89dcbf9ccf7327c17d04f79c69c40765f52df131f12f2dde12cf9e867f97f8f18e2541f2eebe72f71aee4e4308f8c3a3ebce7966dc8b818f23bd21619c942b8d56064d727671f7197ce51d55118755f40187803e3c4043f4ac87f6e3e333e487ce66408088457e684478b00575dd3487602e6f6d6b35f7e05aa621d833d28bc51e9dab9ed2f3b9dbb80f01d1f6941bce4cdcbd4615a4cbc2b71d49fdb24d65387cd5bdbbdbf05527c67da44cf856f3294c5764d51171f7127cd5d5dcfd86af3a24f7244d55bc36571d56a69dd7b6f5b78e8fe4ebecc5b1c436fd3bee0ec47d5e7737c157530c77d7190c6f4ed3d472a44c2fcb7948f697fec52fdb699134e36ef97aedb1d4558aecc53a8e3474f777ef66ee9ec357f38bcee0bed154ee3e3de519e75cffd217ebcde5ae79df7aab2379b3bf2dcdfb6bd7ee4d6f19d39efaf083bbebf09573b19a35dc9d045f7911c43a5a4a7b5d776ef64fc37fb1ddf47319dfea4d67b0c3e1ee3c7ce560dc3dc757be84bbe3f048cb95097f6edb909234d4190c2b530c477388c791ba3b8efb1ce2ee4f7ce52d77bff1956bd7b54c5fb42365ba566750c4b79e7da3f58459f7d48cc39e5ca67966c79e2041683421f4c787c84f0844459f2245421f1f22408ccc68919f2243861801222244a4448884614fb875997bdc1de5ee27ef73f78e660660d8b8135cb8c0dca3a9811436362aaf480d35dcd0bdf737ccff6abe862e5e3ee87403cdab6a5835f0f04127560d37d0b04e8f62dd807a15cbcb07799f62dd80629d5801f0bf0135af4d0f200a3079983c7c5dbccce7e163f5f0a1c70fabee6d6c964eff75cee3de7c62e3df695475d1210758f7dd373760e3734e1d4f4729a5c5fbbe2f45f37ddeab543f3d256f7a5ea74474faaf06a6ee55acedbdea559eaa86948ab551a925140d6b09f5fde93f96a7ea7e09e5b053f7be345f354f636cdceb6c6c68de4f797f4cdda372c09650efb01a96961ab4e480a158db7332612a0f46c352fa7eb2b4d400b371961687f9d780755f0295f718c0eafb1caaf91e6473a3d3fdcd8df7d1d074f9fe86e6d3f1209b9a1b146b0793d4a39652ac09e4ba47b12690f3de059807751daa86c5e5fbbaa86cb0f9f9dd04753a363a3cb810e47d8d4e172f33c87b1e5c08fade6f6e6650d77d2a1617efe7dfe878108d4e179af7f24135affaa09a9f362c2e5e171b6ef0be86c5c5ebe2e5836ebec399e146c7861bbca76171f1be7befbbf77092bcef6a74bccca09aa7d1f1328368de46a70b0f2e04d5bc971964f3369dcecd7f38433b62f8fee667f07eb26cb0e9a2aa8243d00dcb0625926c7ebe0d35dfbdce0af533a887102b2d7e0686622d4d20d7fd0472df1f753f7176c4f07df7494708b0517945baefbc28a1c5052f3a5dbc7c2c25b4b8c083125a5c80697127aaf884f9d0a1b939a95434a9d4eb2ca5fefb94527f4344a3faa9e383a6e655a8997a1a4c1f0d1d231aef513636362926a9473dcd4947e96607ea69fc37513a386fa39462d540a1584aa93fc16e5e6907eae7c7a2f134de6bf980b57058362ca51d291694aed529f950f2311da6e4c37523e406922754a716ac85458d1036de4da10519984f210330a69081135a4c3183267aece089b1711f4a2a958de73dd1114949a17a1b95a75239ccc3219a27d5cd89f5a1503f513f535fb07062ce474da25933e7ac614d550a85fa13172e5852aff2fe24832fb0d3a3726ce4e4bc0f1e23e030994ec0522ca51b9b7796928d4e172578f820259656384fe6ac81e3383434a99f1dec05ef26870f1f244e92646353972f4688994b74443ad8474287737343a33a7da7fad42be550427df734384f661898178548f5a9bf2142b14eaceef3a61338446062e35d8742d580790f03294e5fd73ab2ea7e3af108908139ccc98881f94f3030ff2f60fe645e3006ec7ba51a9ffb8b69c7c7d2d149bdeb3c99b0e9ef1f0d4e1496120e3b3e7f9fb06fced3f45ab028a8f7779df6974abdf7299c28f3957080a55c3e61a76f7e1fcb0553c15c65a433df7bd781eba8fed3f1dcfd74aa79af86a5721eef3f970ae651bcff5ce005cc7b940bb2e8ba16ea779c5ee983c13e2596772d1f9d07011bef6c2612abf99fe7d498af248495f7be74621561a5a2f9ef554ba8af791a94ca28f5a8d4a394509f7ad4fcd52c42164fc052af5a02e630d5cf208919f800db13e6fdcd2ba5523433353f1a9bbff954ea26b523a5d2d9917a54ea26a5b2a9497d9ff2683ca60ff6e14499acf94bf353af7a25ef77a876a858deb54ea954ca7b7fd74c7d8ad512c24a4b0dd8749ecf7b9419ef8f1802e63087b1a0cbf7dde85add64ad56fe3be6dbcc6f3e0e8d1a30a60fa6fafdc14e3c543972d8c03e9c3fe130999ff2ec3c38373a5a264c29c5da5143f334ae5483faafe6fb767c9ffa1ddfb36858ad6fc7f773a8d5fa5c9f1262054fc0dcc6f5bd520be6deef98ffbdc7da315933954aa596523f5fc5f296e6eb1d4f5ab0f993a565c24e3a1dcbe5116009180be653ace00bcca6461387317d302d35604ff37328955252ed409d7476a0fe44837275444e3bbe9f9f62b194767cac272d580bf6795d17362ed70ab8c05e309f42055a94a1c517b0ecbdd20eafd5b55c09853a9d7aecb09a307f25d58ed3bb77fa16ec7bd489f5a405fb58adaee5df827d2ee7f1ef2e707aef54df2435bbf94d9c85aaf9c9f28c4eef5d8d8eab5844a925d492d74d326898a05038384c76e0d0f8e3e8689951683c1ca3ef532ca6e9b19ea0de594a13365d9d0a6c3c152c01b379d5f7ce644fd87c98d7b526931d34359f72f7bfd132a3a8584cd3591e8bc97c94efa079d5a7be4667070deb490ba662b55c5d6bee095b755074ef75ef75ef6999666046ddf4973fe998e6981a5f4764e9c65f5d97011bef882c79dde97beffbd3e96767f4bd37719e7cefbd0ed3c4e134e705b480f9b40018b0ee6dae6802f5a92ca4a8e12da59e6805d3dddbd878caa686d2e93f9bb7612dd97ce73a4a3644dfdb7cf73636272d3560da9d47c9e64f46dddb9c74749826d3547d87d3c486e6776899307fa60f365f4b0d188e11ea532ca609b361297946a79f2c26ef3bef53aca5eff784b196badf1376627d4cb44c989609eb589f04b07c9f4a02cbf7aa2b8c80a91ef59e7beeb9e72d7fd282b9602a1dac332b2dde07f3be21140e940f8563f4bdea4f3844a8577d3727f7a6ce93ef3b16d3849dbe57e10c7d93680736594b4aa8573d0a8708f5aaf770b44ca68e69c24e4b9f77faa2c60dacbb7183070f1f30f7efd165a574faf92e16d384792c15095860b0c06081a1278cb5831dcc39a7cf1d745d97ea7660c68ce7a1bc1d7ca7ef74fa709a7c27d60e3c146b07abf94d3ad60e521e93a1219510de6aedb0c329cc176fe766c87bd590f7279c187c00be73e39d68d0781c96967986a583558dbfd1e19ee7795f43e746a7c6cd0d0e0d1d142ca55383460dd67cd4d3d041c11ca7c9c98bbf4e7f43f34a29a85837377f1ae3d57c37a9ee3480d4dba4be66a65e751a83fa14ece604c65f29d83ce58039cf87001817a820ec70e2e606c7179b1ba7316e26ece6956e60abd318a7314e639cc60893440ab039553663c88cf1549e0d991b2992388121851452482145f737ab530daa2655a3aac951e3440e8f75ca01eb9cc0f185842f2ab052c2f1650718ef4fded3b87b5e0d8e146027168e2f2b2e707c11018e2f6476386193031730154cc71858e7382480619d60f0ac1145c56ac26c5ee90483c9ba31a6460c9c1a22c0baa749fdac0111bc49c289c68604302712c43855011373127312731273129303eb52ff8d61a16e70810358f73ab8344101e6b16e8ca1c04a89043036588441992085bf68bef3583837342a168b84303ac4c0ba3f91c005460298aed5b148c042c718551833371d919b1b188c018299f9b1aa50fa927c928474ad9b396950363573ce316680e0d97c2a6fd6bcd2698c5547c4a72372c2c141d530e115a1c1aa21a38095528d14355274ac1b2a18cef7e13c0e0e8f8933dfc6fba9e319f1d2b1c0e7e4e37d1eab868bae45664566c26ce61821a7315652c01c06b0ee953e324ea44606deeac8a452a7d3186360e07923584d26dde98bef7c4f43c7fd3b9dc2f8ced711390dc05b32984cc0e063a1b89cc6e860d35bb146b03253838c1736b0810d3cf5a72054f3a3f9f9a72f5ed0d7d1f07e7eabeea43a35c171e2305587f337bf83cd8e1870fee69370584936352c15918aa5659e9941ac1aac944e0360d530e13cdde7c5182fbc183386a686092d6ac040797162c20b1a9a1a33a923ca942953a64c993265ca942953a64c993265ca942953a64c993265ca942953a64c993265ca942953c60958e7a8f91f13a957fa3cf0392a285583158d14ced39d6ac27cdfeba869e2fb58df98309eea6bc2743aa478c20b0ac5aa69e2bbae668953982554aa200fd87867c5172b7cb0c24b0a289cc063870e1372948083841b23d8c859d5a08173635343a34aa14edf14291883003653cce986102ba51bfe4ac1bac93a62a574da42f5c52a478e1c397270d18991822f29e852451948a6a8028959c503ba2ac054e1858a32603e051560c09c8a32b02d7ca8c8828a274a80f9145428414502a8e0810a2eb08982792c25265804a64081992950d0050ab0e850f08487822660d30b6153089b6eb26e9c057f0319b05000068a0c00014c18b7d1a9b1ba49a956aad409a749eac60945e39b7fa3b2d15175448c7831e2c30f4654353a9f4fb1a23162e407560a6543274747d5cd31467e40bd0005463841e31d214289e66f3e1adf7d0d0e0d1c1cd609a7c9912f4788c0e972f0f06ce67ff36b4e343aabaee57947be742a295629d61130aa0ff5f37b1d5abc336760dd9f266c4c87c5e98c262898962360dc53709eee3d9d9318e7e99e45c44a298514fce55e91d5173728182b01abf92756e7850d8db78ce1eadd98c992b1512492225aa2254d939634dd4a9290d08cc48cc32a658c5c86309071308b0c0631312e758cedaaad841406208c491856b724faa28c1139b1edce9424020366916d2bd61cc6889ac02c322227442d22cf65bcb5b53921e3648ca6b63097a4971889b3e844e6ee23d5b19de97602e4b12a96638e8e554a0d6b78299348c95b398b8d14576fcd4a62e36867b91e61126732b6349633f1d6d8c5b65673ec5a91d6511cb18e8db48a36b64b3c8e35b675b6b4a5108f41b13a525d331612714cd78c43d15252bc550979ab5be7f4b6414b9a46a9190be98bed2e6736ef8bc358dd94c966b2d61c25ebcd26e972d38d2474b1ade1a5230daaa1cde44873196f2a5e7a4b1ae92de38b69976889f87a25d93475f27a250d8de17e2b4952dbf35cfcd768880c496b1e624224cb976c088c0f89e16b8a83ad86fe2f6c091755d39ac32ae2f0382ef152cb25f9b56bebec6f383fce750bcfc537c8574b5a38e22b2133ee0e66fcb28c85645f0bed5048f36eaa8ff7337177177c2524c6c1baadc6e40d87cf73f115ab68435b220975117a01c4d52b5e9acbb056dcaeb3b092fa46ef575bd22ac80cafb65c7da2737569566a25b51c29955bdd5649ae3ec9d5a52ae230084c93a5d54c06d962414e1ccc225bcaf45673d03b9845a66b8d923192565b6c570d33036691e9d82e71157118db55c3aa884358985df509be82e13c368e766968dfca5495249178574d6d4755531ba9f7ad36b4345aa975deb7c442b42a856eba846e2ad6f0e24bf3500d2f2e7abd9232be3676ed2d63257a8b8d54c9cebb8004295bb98a44454b19e376bd30ec4b71b92e8578dcb596e9c6d12cdab6c5c5b655aa377a6398766d6c09d32e51bdd11bab6329e2db2db452452c5467391a656b7c8b6d1aab4cb63654c75989978c230d775d0aed8e35d1dbbed59236ac59bcf64925733b96ab78abae5bac8e35d1db2d6cd24df4268448d9446f19db5cf72562a2a4cc5b5f222461a5028409c92db4f27a0561bab56eba7551aeb35b79976c5d6b56dc18e7d82e499ba6b17d6ba6a4935c455a6d4a869084958a0eadbe36efa69a054890a62ade2c3e40fe0850794509508924ac544422987b06dc5de6ab241e7071b4a5cf0f088407d3aee5a9230db5586fcd6a4d6d9b1ec59ae84dd74a1b69b943aa2466d3d4c92db422da189121409cd834b529d96921b985566ea1958c73aee34843a032461abd5e5bd74dc7d7eb1636d51b0e7789b7c6a14824da58edda1c2591e0581d91c21dbc3dfd8c43bbe90def925efab65a89b36d8b477c7017a9942328bca4f04d5f06782931f28583bbc42f66fcae4d433b92a5f8d46efbae5c99eabdd13afb1cbd3d488d6cc0888c1a51edc86ea115f156245dd64dc3ad5c71af6b6532c557404dee0e94e47eab86010d290286835a93781749a20895221e110d20f98a888cc84dadb7ce1ee3dae7c6199de14cbeb6b732e5ba2fbdb932e1da8fb4bc34ca83e36871b97166b5c6e457dbd625ceb576a9b8b34b5c6f76e3fd19db4c8ab4e6daa57fedd3d62d5fdbd7d69604e6465d62cb5433596b34e3ad7f8816b6edee4d7c354487212ebded4ddb6b61e0b62fd68c2fb6e134b5092143c8110e8e230d1f5f59ac2ed12dab5dbb44732215a224e406981bc792a6750d43f1524d6d6fc457419c08a21424c758eafcda8a75d79a58deca9b6da2376adb9feba635d75edb0762032040000172072f264b5a6778bbde95eba6e3d35c5f5f4b6fb6ad2b1673b5b9965aea0e2bd93404c4c57ab3740c7f34c50dfd7c7107c94b3fa42379c348ee6ee4ab1f2007b52e9f8a75eb5a6aa9b956f12982cf112b9f2307653b554b799748f42edc92d55c6e7a6b563ffddab54cd416de92568a5f67b7d7d6b6ff886c1ca990ece9e37ded8bb7b4859b92da3e2856266db5bcc8646b58b3fe5cae650c3e36dc9d8aaf7a9a701057efe74d73cdde300ebf58491267f135c5d117a90dc8573db6c7ae7a5e2cc7702737fb7a339eb57e5b9d046a6ab3b6f0c24029bcde32ded46e7bad2db436dc8b9692a5969ac130eea0add96c04dac08b5f2f8578dcafa96d05fab83bf8fa070f163c5feaae2379c3e1b54fc35184acfc48430c85070a28d69d2bd3b562152d13cee4cb64492b1e958b09f7590d29a99f867f29a4e3d3d724b5e57a04eeaaffdadf012b685b5f4bad6dbd61fd9ae292562ed2fdda5baebb8a2e29be72ad7c29c4a3cef556ea8bc31f47bbf5d74cc55ac3b0d4b78ce2ab1698a0653a86557cbc33b68597f2d4dcc2979ac38b439e8befaa8517cabfe14ca3afa9ed7322ad79a4bfedd7f05afd497cc5c218ee7453f16bd78a1793bae68cc3afb6bd14e211e6ee31f88a055d2bed37cd8a6fdb16f77ae35bcdbf3326c95263f15dbb6a4db462e185dca59f31ad666bae4c585b9addb78af6efbe250e43ba6261e560ae7bb434fd5f6d493b641c146f89692fd6f0d65c69357fb525ed8011ebdf5a675f99a8ed75eed2db639cb443825f33fd7dab4eda713206b81345c84ab5edbfba66b2a97e9dfdc6f7d2f0b7056b606dcdc2ff5b996cedab2d69d50a035e9c2b896ddae23e476dfb77c691b6fee270ae1787bfda92562d27eed7525b8837e6f98daf90bb3bf1d50f31c4ba6b2673ddd77e9d3dde5fc7995875f9321afeafb6a41f5aac7eece00e6efb78d7aedd25ce4fc39fa3b8c7f7e96bfb3557dbfeaa4b1ad6d9e7c691e67a6bed5d759c515b486bbee56b8a136bb6ba8a5f6d493b2d254ac6910ad59bddb794f27a29a959dac542afe9272141720badd41ad5badeb6bd5928315c956dabd98a8b35d11b9020e5ad6e1bab95a604c92c476fb94c6d6869f5d6d92db432623c13aba804a6048add631945ac549034e1a0adabb8c20be2ad7a05d54a05293c47b31bdf589dd91cea59a96f0946059bdf4aea52af54f0c995a62fcd3b569972d535abe031b16e7bb3a30f32601699de556b1adb199375acdb8798950f12cc22bbd8ea5c9962b7b029b6c792d2aa18ab61c63477cfe12b1f460e6691d55d86b5a9be5ebb8e233d925df95a916a76a4758bd5bbc4390ac5cd709179ea96f2cfbf24d35361a678ca9929af314f38268da902f215716f880f8554a7529d3e6f4e2fa103bdf319c3e7c2f4d49193d7404d9f739e4e423a9bcee79c5ee764ced4ece6f4505bbad9cd548743ca9ca899f26ee2805e8742b56a7e7e5df77d99df9c5dcd0c423769fc34bfceab732a757376aa29dd8e6e76a8af9b3be8e64475338659c29c5ea732c1c94bd198388c7424a8bcb980d94d543767e7c566f7d5d008e96ea612d53cf9f092cc54d77d3f5e4dd7cd9d1a44260ddf8f0d13efa8f3cfbb08cccf6b7da76e7a7e3ac0ec627ae7abd5caa7cf6f76b30753d5b1306777ea3a6fce20b367aae64dd7751d4a68fee8baaf9b3e1e6863826a858963434757c43c7526cc6f7ad3bba3ee6be6e79d45f9cb66013cd731c1f417a2e8bc899a5f6ae24c0f4cd7a95ede04f266d77ddfddd0b4e669ce94cff79382cfec6a50aa2e35e76b769d0c3cd4a4e93e8f69b2ba724e8f67d2d87453959add0b1d0a1d0add099e7b3e6b4c54d74d9c6fe57d9d095dd74dd4fc6893c6c7b43975f3346914d9d111a56c68ba3953dda4ba19c354cde975f39b4ee6099d918e4767d3a5bad3f46637bbf99a2774365dea9bdec99bb3c8f4666bd2cc9b39e791894257e3a5a6ea9bdd9caf395138ba1bf3ebe6e99b463a9be975284ccfebbaaffba691ae9b3aba9a4933555f37e77ccd13ba9a94373fd537e72cf233070b2a245e0ba7e94d9af9e59834342f9b2b3b50983dbed975a82e55e78a041f1b277376b39b73f278ca499f01876946861ef8cbe0802fb09041c70b30aad02e2c30a5065c78924e0c1cc9012aa848f40a97e28026162045071bc5e00025334754c80b501c8002109c501e3e461c90a3c708a58144911ae0f828a2533389d4609a414476860144fe0c076564a0c02313d3b9b8900076bd0f0b2d8471859182ec6f52f8126c789811b2b8ec1484ff170077cfddfd2786778c2c63eeeee33dea0d23d58b8b7c5ec9e76adb58c82379bd6dcd8a337c7d26e1ee28f82a852f6a76d6732baffb2c0526dc9d86128bce602569a82bad8ae18c1a012a4264889020407e7cb0b81fad5290e90cd24dc5184e0d6f8727022e5f01b87c50502cfc4c0521879504b89c4e37a9156290c3e7809faf849b2390401180cb078506470d8f1c01e04223c337838782cd46dda898a8805035de911c35272ab8a898e072034b0e3445bc05fce0660b2ea7335c4e373a5cc0e566b344c08526078d2e75e4d4731ac20b09362614a1c3e703971a3a35743c9e9c1e558e9c333a9c5a5001a59078353c24aa23b878517e7a5035a824b87836281d9fcbe6c79bdfcde7aa61726a2125034a07aa06a57473e3e6064d0e1a1c29193c337440e9f0c6e87092828b0a4adfed632a9cf0bd6e6aa072bee9f17842dfd14d09a82e5525b52355742281c644d978a7efc6f3bcce4b792a8fa686c7e7a5a6a46cd438aac949a152d34b7d42be9e6faa4cf076e44093c209092e3492c82107f5ed502dd1e1db420756ecfdcc19388001191560318514650d29882f43412e2429826f183de8f9b1aaa14a5d99c1a8e88c1559ac2005207cc014f14202b678c115271841072e30811e700522ca0d84ce41f081192d5a9005141bc0e106006099c18a5151132629a050028e264080c3052c70830db11378e09b028d2d68a0e5c6e5cc19431002962b25e0c879c109a220c1083ac0010c00f1c300620090a18a5111d115564491821080712283185c710228462002091cd1c30e01f0819917b46004226822035db85491682807c74c192fb698020a107c60090a0451802ac60080e54a15a2a123af9d1c9c2bac9862010a08a24b150100031193a1235ec68b2bac40411420f8c01218a080103f74c90203519223af22427e766ce47c7ea68c173440c114514001820f6080024204f14301ba7411cb82c5851eb00c32a03ca94163063cbef8d083952a3e0f28400fb9262568ce786774669cc8e88aa042e2ab4047816e021348f7e3f94cd086c76bc17b1c29743ce68e940ecf8499e32b61e2a019c1860d6ff5d5b8a1b1c2d17163820d8f9a1c9a940a95ea50a8d3c99b8eea52a302155c5234299a8f868a488ac63be12629872296aa85aa51017d3735e677838a7d380fc7cbf9c80420015c5034ba14cde7c23901c8025c6aa8dc889f8b460e9d901da729df4421290197245096e404a0fb6a3e283b43e072031d58c02287797ae5a4f0420edda7c3e321a78e92530b2de08242a570d485841a413b784d721000171368aadcdcb8b9b1850909a44ad708810b924dd34426c42a45e3e19c96be01f89083eaa3813a61d60892030e1e40c3820bbaa8c628824667737a212765e47b52af8cd1618453ab8649cd0a282c1f0b29233a78c0014d74a8001038563e5d7042280478828b4d495340007080d49854787847522610c9a126650455a3a2e115216ae29d50c344085c6a524438482a273b8698d4d038b941129178804b099f8b480dea35020eaac6668805000970a951394161d6039793b73a4d540ca89ad311140b4a826c4a9a1f2a27a89a9409384b687c7c453425dce0b1820e1c2ca85a782265851c6a54602a084e90224447a99b2fa5e3f4f288d0dc7c3ffe85144daae6eb393df9805e98a71d9ece09870f8d2af48c0c1dc9a1aac141532407a1221b21aad6e7e3f381aa001716687c4b4e2d9c50a0f1f1f1a8f1e39da00317b0677a348fe7f34e34b000600011e07b010b60e1c4980b54e00802e06043935ea2d55006002c3358a13205e9080a0c4e5e40415a2ba8d0e3bf28a038130618387041890a2c1d26a4c2a4a08a0948208621175e27907063837aa2890f282166024740c001611630a5f5a3075440029290ce9421c66c86307a308218ce1102084b5372a4262526882f456860408602625e46889470c3a64695e2b1a3031cc05245a3221888980cbd84fcecd8c8a181f331e0870108c00617434270010b5400872a548a10c971e353011640a0a22409119a140a033c7c20030f20c2003dd0d00006300008a32225477edc4c32bc2274637c66be07dd171f0eba1a9cb89831e85ed0b980a6053759742ae8aee89ae830e05da05bfa94a68f9982ea84130f1c13ba123a12e68d9c114e36ba9cb9fa687436a79a8e46a5ea52a953f74d6f4e94d7b88e950946f838a3fbda4cf6541187f696d3338174135ed0f64da06142cd2a4719eeb2af5d5b6db8dff92448be9504c95f5babb31c58b83bca573950b0ca5182550e23563982707799ec69f877bef55f45abaf7d6d7fdb3f92cb34535bf8d4fececdb2802078450c51435aa7a0550e1eb9ee4dc99ebcb57f5ee773850306389eb876eb2afe6f7c5f572cfe4eab86b9c41a8704707c71f1d64d5fe320c55b573894e070bd6dd76e1d9f86bf8676d49f312dd3adbfd62ecd34376876d432efaa474a4b459182ca53703f91f1b1d1c5dd7bdc797460e4e7957cce65c882112340468a182162648811214682180162e4c7888f1123404040458088000d01120214040808d00f900f90912240458a142152644811214582140152e4a7884f112344808814214284c81022428804210284c80f111f224686000d293284c8902143840c093204c8909f213e438c08011252440811214384081112440810213f427c8418090214a4481022418604111224481020417e82f8043102040848112044800c0122044810204080fc00f10162e407e8a7c80f919f213f427e82fc00f9f9f9f1f931e203e453c48788cf101f213e417c80f8fcf8f8f8b85b77dfe1ab1b4d6ee56df2c9e2eeae1a574dab65c3db50e3aaa1e10375a9ea71a4385797beeacf62adda06b7614485db302a81db30ca80db304a82c69d68f5822feee36c66ef0cee53062a1d162f00723781af5c307aee522ad67a5db98c6ff546f1a86d6ef69786b9bda968c357f67a89f5e28caa48c32aeed38afbac426542c051700780af5a806514400cbe58a940e53b2d5d2bcd075974910516593cf1afa7b798b6ff2f5acdb17fd54aab591ce1ff92622445cad0ebe8e86411cb0200592cf957cc1673f5fc4bacb947c75c3696c57f9224495860060bbef067c1122ca0000bba786ca4ffda4dd5f5af6b5f4b0abc60811077d7b9f49358e0e35f2b2063053ce862054eecfc4b57bb732571265b0ffe4be7625b83b615eb0a5a2b38610524e80ce66a73a6331588eefeaf331010d0876726f2549bf7bc5830d11384a927cc7a8abbab669258b5fc11a42223a224a1a22930c4acc0a2e0fb19db29641309db1529d751bcd44945d2e548e61249bc25ad4ac99541b56bc5113ba9bb6948caada1ae4b32ada350ed5a8d4721b16eb286218cbc6527b7924663bd97da8470b588bc6527b9d2ea922a40985eaf5b68c58a06583184fb2d6c728f801bc00a1fcf5567f0a6292ea4349e1e5d99ecb6379b49a1891aa9fb0c7277d584b94f17a612f799c408f789c47d1e719f2ff769c47d02b9cf22ee9388fb1ca29a42dc6710f709c47dfeb84f1ff7d9e33e410354f1c4e471f76fba8edc8daa4839ce0f15388c55b4b721c85ebc96365b709f2cb8cf1df7d9729f3fdce70aee5305f7e9c37df6709f2cf7a9e33edf7da6e03e51709f27b84f1eee7387fbd4e13e4d709f39dc6709ee1387fb24c17dde709f23b84f1bee33c77daedc678d89336d268dfb54b9cfd444c9dc4326dc7d9e6c2878b769ca34c518d719eca99bf2f44c21007790b6434aabedf7ad48bbead8eb1513ab58e9a64b6023457232627c74b1159202ab17176d8ca5e0a894a45c8fbc4fe5850dbaa801175128208a1adc1fc93ff819d38aa2482a71ee8fd4512472e288288464ac7319fe6eaa4551bc4771e34486820b87a20928beb8bb8f133ea020dda1b0e25f6b140a249b6e7b89384063033d80e273d7b7b08987c7064fc8e0892a3c892b892bc9ab8ea28d5d6cf4c402dc5d8b99e296423a7bd1d2a35a99801a6fd26ef26647f2466562d574f6e4ad9cfdae3517467a10eb91bed6e5575cddb8e86532d91fd969e18fe428b5327916be85af95166b7d9227ed8eed3a1ed921ed6e85230d6349fe771d3366f23d3defdabacc3299ecc1dcec5d3ba4dd8f6febb758cd931b331deded9699675f1aca467acbb848a62fadb7df440fea8bedc5a4dd4fe99ec9446d5f96db56f6d96a8c59a4ddd932b1beee92bc69d9488d64b9da91acb4877d154cbb44ba92b93d5abaeb925a99d41b4612ab90d01078fb8ba73ca8c54ab3a5a4d083b2bae5758ee2462af868a455d36cae4c8fb738625b71bfcb19b638fd15278b5d7cebde36d7fcd7be2da4e16bfaba32e58af43a833d354b0b9b5eaf8b6f371cc6f4eb750b9b42004508401082302ed7bf4230524b2504408e14820f4810a4265cc064372dd230b1d25bc64cb4d5f5d626af33983108b6707f6d9d419e5bd8946bec62ab63204802821ee2b54beffa57aebacc952c9134ac488d0f7c0135b5d1a3123eb0c4dde9fbe081315c8b437880094f80079a40b16e3a96e148c3df14c9032df7ca64992803ac36ef4fa279370d21695db328c262a558ef149dc11e9ba6b65bbe5e4ce86002e532d9ae42dee53680810e88717741a623fb6bbf7671c6fdbb74b59b4a29611df061d581121c7cbc3f081520546ea19598f87ab9bbe72b0e9080031cb8854db7b02956bbb646b7e6e9e1216fe26eaa3c34977437d518cd25f5b901d4124270ff17ad8ad58637d1838fab451f812f0d30d3a37b6c9a3a79bd429bebad3552e73cb4643444d28cd38017fe2f9266dce3ad811478a5512da4e991ae95c99d22052986d15226519290842a49d29ca46f5da24955e72ae6c45a9413e9947d2b122c03fb56260c88712b6f7d59c6d59654c55bf59811ec5cc9df97da4c999ebe164a1a472a44a4a74c11dab8a8ea299748bc2566b271d15288a1ec1a65e3225d2b13a48d8bf45288a1e03094a45d1a2d85d5262422c19070914883441a94bb340ac649554a6e93b7a13ace2cd1c6454bc619bd53c4ca44bc1569ca2d6cba008e0bacdcfd5fae7f6d5d45122a99dbb7b029265e1a4ba20689338680040e5eef7a5dc9dc7e570c8b2b24bc208103125a949008ddbf49b43cb5d2dee5fa77bdeb6375e38bc4f7af5bd8c4d3730b9b7a489e0ae4e08e7730a20b9dc150db5b4f4fbdd9bd6d2dd4f6f67ae9d7cbdd9b7c45812fba6756ea1e5b58776edb4cc99e1b0ec15969dbb6d6d3f3d2e4deb6dff433f947c49a6bad66f32e2b93d5b7d2aaf87445811a285083fbbfba1f778ff98a02379bd62c139db50857ef4901365c2c2e571225497ea749b4ad4dab505e52b2d1a65528ffff170b0ddf24da58ad8935b614d2bc6f28158a0665648a2448be85130a9228f95bc7d8a6d531268ef844046f069f16fe1991e2b1b5f849928459cf94e488c010ee5e457cff75ebbfae113fcf431babfe24491eac35b18601c2ddaff8ea08325786242221d8114ce8917c9368c923863c97f7ad3d24bdf5d49af7ac478f380cf7ad4ce2be9529b66f659a9531f21636691dd3a2c5545eaf58ac26a6cbb1bc95614cc9eb15ab379a69b92ee11c94db76b47bca925b68a596b58c81bc8556b4ae4875ac48429abcd1ade45d48483266328e5468a442af57cdeb556f311cc6741563b78aa2b5c52c4963a47ebd6863d5af9792d08eb3f28824615270d2ebe5e3357d9a4b18129a4baae5262ab169eae45a6a13ba953716430019bc1f014d14012f7c8e8eff1786000737183260be80e2a5590463e53398162e2a420abdedccda70268b2035b615e1a32d2e22820b076f992d115fc8dab5302292be8a385c1111e4005de4c716a76d2dd3f167789cfd686baeb64b34c58b98298e2c63e2ad3a86c5f20047626c87f4d603fcc536b6ab1e220c2f63758bcdd8b64bba94e92dd74d7131f2966d4a445a6d30dc64caeb35d218aec544254e445a6d319a291924563dc5b6458b132f9dc5c4aacb216e0cc0010765d886937d6ee6aa95f632d26e190dbf4b562b2d267b98d67414d29a8e61adb4d8486ba5c574a924d25a69b1aae9ac8ea4dd4a6a6542542b2d76b1d5e5185edb446f315cbde2c53303a8dc5d14a9106484182304178fed2ac4916b1a1322b6ab0ec24c2c0829f6b5b1ca44eb1844111b8f3a1613471c132f9e8936a66d10404541ac2e0efaf2c5972f5e5c7f1902c28c83bbea1cbd19bdced525d18a1a0831977e6e068417100684cd41b15e8b9580f8c18c8fb4d4525f5bf10727fc072ffe83951f5ab600633858803005b0e12aad4229c00b3e7cb1e938e23047966188bf8ed6867b1c1e8598f0c18bbb0f567cf07190f6f08578f1ec73e1b5385c2deae18b6f2a5af1d270e351bffeb1446d0fa17bae772c992ed15f18aede1e5a041803cc22938200606204106fa5b6696a23c08334537266f5d3a328529c0cc0cc00c2b8def6e2df03c8b752d7fc7a8595e9f512b78e913aa6737529d75aa3474603f0924518eaa5c98b90971ca058f7b6b7fa7526002e2e158018770170710705f04229801c97d631ccb32af2d045ce38496bb1ea3276e3e10b0f3eba6cbd2ce323999869a8adf85178f0df418bda0e63769861071fafb9dcb7328d55dfaa6dbbc45af7a59996b5dff8ba6c6189744b6dbb5cd1650877b0766d2e6f9e9a3f37ab4c23d6358b976efa34dc56bc949265972d5d5aee0e8a23be4fd29a0360c64b5a594b2daf6d0098f000d8dc416d9972d55f6fcd8d36d38cc95bddaf6d001ebc96d67408827b8d1ed52d16e9f54aaa354ad61a2575f8e2b932e1980e4a99a966b26eb15a491424453a977866abd97a633991d65ca3475bd3b16eb1484a94d42d16e95d758b452269758204489029785fa277019524ad36264cc69ae88d6eba44a4d589486b9193588e8e352b4942b22b52ad392928071e2e65b867c1f22efc5caa00a30859e1a2012e5d3c0b9617ed5fc1024611b222668abb38bc64df7ac3515eaf241cbe5c64a8ba76ad4d5327e348856ad7e23086833830e15e6f58e3e00586831577c7d58b83ca7df6fbc7b57fe46fc0c271957643933bec86d6915cc58cad0d666c10e38e2fcc8626077fa7667c6b7deed2fde38e2315b2e1c8c18c1fc8d759115fd9b07270e31ba5062ec01ac48c35d760c5c11cc5e52aded2ba1e17d590038f381a4ce056ffa6b6f11ae96a338ed934b52951b26978df62e627268ed8a66bb6edd81627bc6e11c2eeb1bcc5348dd990d49b4dca5809ac89467957156f8983f448997026497ac3998677ad99a663b92f1ce3fcb9d9ef9a93021473a4fbac8a39973bb88377930d9abe90b95dd6327d50bc38acbae985a61a3827341e7f97d8b564e87178acb3dfe50ce70577e40ec2702a702763cb446d75a6ed8de90b90498c3bb843574c5e9cc909b85333adf522c531e598955f3848afbdbda6e517974c566a6d93c8f273dd74dcbaa4b6bdc9d41bdee2889d8823b6ed267750c6644bad99b65f700765ba8946917dbdd15bb457e368977a34164c0fd35f9c6e2bda528b1d7fa56d411a884797b7a06ca68a3f52bb6fc5fb7178cc4d94b7ea9ab57d8d8a122461a5526ba6c570f5be5e4964b9843194ec24bf16339b5631a6c509f791c6c85a97625ac0389845a6c5368bedaab5bc3c56459a6b6459a58844996829c450442b455fac69cdb76ec199566ba68955d7e8c884e6dd34a46b74a49125f871a421919f52897ebd929034e1204d9b7010e9c364ab18d39454f938d218179409dbb6380c0693b670d3193e0269186712e31cb8e87ee1e01222b1285797a4dc315797be6e6a43ac35bdd9d73fb67dacdf5599ecf8bbeacfd5273a579fbc5e49348c2f90fbaefaae3c579762b72f6e4edc484d7149e2886f396c61a6558f66dcc13c3ae1e068ab5dab2daef53fb696c65812e3eee012175f12e24a44501283efb5bfc7528f15e9c1dcf8ae71acfa52dc579c521677a5d690af2c196d2d182bab21cedabe6db9bbdfb08d0b91dede26c6bd2ed16db3921b71f5beb6361e973e0d8ff4da1bae895193404de60eeee44692c4d58e99d6afb6cd431bab1e478bd3b6a672f790e605ed095a1388f41b8b7469c44795067377508a388a23a65527c0d49b38e20ae460558958b8bb6b2b7aa933d189bb8b2b7710872fcc57a109dcdd43a6f0857035c457332ca8ee993dc0c17adb76e75d2d2dda18aede19154ca341106b6e1c3126a906e88caec0d9486fbddd705833ee656464611cd4d6e6ee2ef37177d734c6037707452bf68ca3c58d193389fd107b61071cf1d674bc4660dd74c4ba66aaf7c74ee0d143010016eea005c07607b52dafdd1787bba9dea67a014082833bac345afdba44f76b3bfb24777ff92a4b081c94d58c43d9b53599ec66b334558db31cb97b961c2e5e3ad28df7575b121633221626b070d9148b15108b0a94dd6ac3c972ad5d3cbec657b8b812e6ca2d6321253b3e3e448a0ca119e99de9d1bb603563a1d6adb72b3b1ccc35b7b10d370317eefe9786335cc0414d713370c1d53b83135b105fcda0a2a20c4e78ed5a199aaebdddec6b4b7196e1054dc32f830a57ad6001663a96a1a55648e7e959d2747fcdf8f6197fbdf8f18659015a1acba0a7e12a66782ebeab2a4c3815291eab7001c53a8e35bc34845579f76d331d4bad6d21adaf6bd792241d7365c28f711b8754c8b82852189531302a3edcfa78a6c457548e4cf9a2decfd15b93afb65d9bc2843b78cb5aedda904e91b9fb1495942426c02432c9c71d142d2577aefddc78f1b792544863f6adb71c25471a5aa4a6fca4b5e95c2fce68850424858cfbae3bb4796b2961745315afc545524877077363ed5a292e7c51439c495ddaf6ceaeb9d66f7cb5ad23458ac189189aec489294c690c3c1aa7fd8b6c5d17df1d117b97d34668bddf81e35ed23215f1db978eb571afd8c8dc6b8d71cb6b9925f47aae9ef9a7b232f172f656c848d7250bd9beafd7ac361ab888cbbfb8515e5a2a39d3acea8bee5d78c6935b75eb498e9b5fddab54b9ade8a543a0a17ee3e5aca44fff1fd9ae90bbe8a0206ac5d7bfff7b598fc8d992c135f4571e20e5e1cbe4bb7c4f8e86bc642af4b5c2fdd976e7d89fec55a6d49511edcda36d55bddf6bfda92a08ce1ee61537d6dff57509cd09a9256d32428a2bb8365ce387cfd838e2494264fc47030b4353cd2d7f447fad596b4330ef72df18dd6b114ab2d4412291e9732c6dd6ac331c96d3bd26b69a3dd014d494838d71996c26a13e241063f311e8e686c1c690c0522ec0086a4370628799286315cbd434e25078777ef6cbadb51541056503e96667fbca816b86fc57dbd61a407f5acd4b6f0d21c849a800d0f854f8cdab53a5d8d7b47a34a1de144bc7509837ba772ef521dcabd3b8d91840e4fe06a510374f072ed782d950fe4e8b0c43d278732c05a62817911a3a5791f19a9c53fbb95397cfa3a86f7b5b1a9c30774b5ed4cbf32e159c64455c445414baacd492f5efa7acd6e65169a478c96ca76798b6d4d475965fa51715c78e80c669c83c304fcf57ab9779f7be7b9fbd7753f3fe00f4f58991e7082123a19a80d4bb4a61b84dcf175efe63ce33ecf30c37d96e13ec970f7318ad0448e0d5e74066b78abd6353681726cb87529a4b358b5794f22b88fe116a8e146e50949a3d4dc9d7a0e0d4fb897b799586dde3678f4701b3c6edcc60e31bc041b3b27b88dd60fdc46ab09b7d13a80db68d1e0365a57dc462bc86db46cdcc60f1db88d1f2d68e1c7bb8e8f116d3705ac1a8fe137ed5ad65ebc387c12e3b10a4d0da899d0d480fa5692bce1905eda8fd45219b2e019fda491870e7720f874f9149a644c94fb0cdc51702b80fb1402de431eb6204793135fd2011d7531dc13fe2e1a2eda5bba1bdcad5418f8e35a068220869fc027107ee04e450e93ca0766dca1c0928a8c66209262e4645f2c8b32a52836d4048684341425b6440aaccad1949815581459f552e670f78d85bbbe653ea2957c13bded23dcebc5b5dde42fb1e6b650289b68bb76847ee3dbfa1c5dc6eb654b22473f51b3b397fe5c860feecea3abfbbf6288f278bfce60e6228bac6bfaf6ae4cbe9057f9bba2e5055aaa68526404e58d8c92fed5e3b368918016217c70ff1e9fe58a96981619dc8590e765483a8a32f4af1e5f6baf1769013124180741f0758f28e476f71c12897c42baf07ed7bf6e38d328f9b93b06230793f17f611bee5d7803eefebbc4399807acc5fd5f9bda70effad8dd2415692c17e65c32e702f98d4b732be3ef2a67af979e12a4a9c6eaa6d5e67d73e2ffaadbfaac99664c73d1d0d0d0d45c1a94dbd98a74db8c7bd80839230f5093d8d2bc84011800010720b034bace204dcdc52f5efa17d6bd64b11814549099c10c4307358ba3b585330c7797c1732c14d7b526d6dc8da70764dd7a89c4295b1393466ccab14d71ad04496e56c3a740be6eb1e57efa7addc2a6da18f77f61da25d2e9e139689e53cb519762230d71290147c27f709f3c10228766e507fce11929ce96e9563076e02ed65dde485a6daf6f4a8e78460d6bd0ef9d5ae6ea524be480ffa6df54af1962cbdd43324e74c3fb52db512c86322165c50d9c3805a106a1cab591191915dc01ee80996ce68ef87c418867f11cfac50fe8c3b331ce38b8c137cb4c1b7061032ebae0628b1a70b1050d66e0f39b362d58806f712d5ae4c472c470008645ff8a65f1a4253a836115f1b579fb04b7e49a704ce5d6590b89ef6d49c9da6a33c860a50a952949485262382a8a02e5090c4e9a30195a2214043bd3020b3bad1f2ba8e0a3074be75340e1041e3b749890a3041c6748b831828d9c33ab1a34706e6c6a6854a9335572b210016f3297c32c55b8bbec93f02c5f64596a56dc5d97599a00c9645976e464b97177fdab962365ca81014992a945093c50850a7c629183e5bb1206165702b06f450aad5c2112a5883468061db87b138d02669191b7d08aeccacce650579146c33c553c92a34bd8c7c7e7a7f5d826f4e02e718ede464b69b9712c6f56cfa20859b1ed8c437ba33727626d296ecfbef2d023f5e22141860c2182c3b9f6fa56567950267bd99291ecd28b711bbb68f8a65d952757269ce9cd16de3aa378cc5192d6baf5b536490a771f47faf58f247571f79a364ab2d203d7257924b7c9db8f4b4324324847b883b9a4fd912348b81c24d991712c69483efe52c6d052a4f03b25470a18f196333c06e548b1e2e091bfd19ab796f2eeee8539503c8f210ca65d9b1383cd9de7ed16fcaf2645444552605572620072f75aa3242d061eee630cd3dd6b8d923a4762a20859f9cfcdea5268938e6a70bf854d2bb46a37760b9bdc45a21879cb4e4aa39c2394bb0e2212eda9653ec92902c2dd48742769b5fdabc88b2215c090c3ffb5847150dd62916af4082929ac4cb9baa4ab759f3288411414b87bfd1ff70983494627270a1272acb6d80b40b16a797029631c141a783950a4e440097aa284fb6c4116fe01e11f02dc1d009e034306f4486b99c7b124400e0c2d5dcb7402c0ddade7106121c2c21de7ba651cf3d3ac4d8742402260109eb08a38e4f9d19112c3cfec26ca9dd8729c2071cf71f2b957b1add864887fd1729a58c969c2e35f596730870914f7e90177ef628e61a203ee73031c5862031af0b984fbd480e72cf1e2b56b8fd42e51ce12558e1010724e48c2dd1f073942399cf4c3bd3b93238472d7f2474422da255a4292225e1c245e1c2484ab454b70b54814ab28c270b508b462bdddece764af6fc6626db24c1ecc52b3b4250fe63485f2a058c39a7333cbd4547779fb3a93692d7b50efb872bb952bf92e1b6a22f1621c868271d20d672652b485829388362ed2759cd99a1d87709509c6494a8a604a845c1c94a34447248a02ea8bb77dd738b3fa56fd5497fadeaab12dfc5c62191ed455b44ce5a69992247d91051670f46bd012c6b6cfcde8acd47f3159beac9679cb1eef2a0fe61ca940ce911cbcc76ffa8fabf756b5a649b76ec199c914b156f1da50572944a214a420b1ee6ba388d5a6e98824d64d6dde94ac52a688485b63285b974bc48ac3e21d7a8dc979ed4094f3d2e2ee7aa4e5b56078bfdcb8e8419d7af1b62566a2b4a74f1babc64bfe55af1dff86f7c6410f62fbb9dcb596a3375de21c125ef24f9f2cff5612bf96b4cdb9c439fd58cc95a9e2b09307c51aabb90cabbe5656695f6dd58573dd629f85cc028de8758ca40ccdf0453027492f6528093624a5c90f057d12d294280fde4a62eaa140e76ba8e1c5fa49947c0d35fc4e0be7ba25a62d586ba63da8f1173db85433cd3543ca5dd883b694c99ebeaeba94e532b55a267bedd2341aae22cdf516f432990c36fcd34d97bc4b3c7abd0bc9cdda90481a25c9ff3f0dfff8ca64b2a1eff12379a34d95c9ee9056916ebd4bfc340cea6d6ff9402ee0ee4f3c07c88f1fff126dcca569357fc6b7d2baa476ed8c8ab7924d4352a0e4fc30a17375e9c70777077375a98597894495cc25e5ea935c5da25476b1ecb5b5e170fa3759972ad3d77146b5159f86895effc8b88a584b6babb3af5d8b5f571bda1bbe38ac63aee2d5b848e7ea135c94ab4fc42522110c17d130ce47392002dc6b57ac4b99deaa9471b44f8aaa889403aa90c363460ecf11d01024a4ba44afad361cbe4bf4c11c0b6888d6ac071a8254fb1fb325605dc24c21dd54a4619ba64eb6ceb6ace2885b4fd6ba747bad5f7a857fd046ca6ab6edd77ba7f5558f94c9833220414a99ec3715cb9cf4b27aa337aca496693cdaf6e3fb38dc22cdca769aaa78895c4a929064cca425ab365d73dd9546c3da5e6a0b75adddca54473b863caf43bbb50d2d09435269b8323d4d6afdd3282f53928444761369cdba54a2619e261cf420cfb54fa9e023dab55fb5c5d19a77f91a4a322a7a70dfca34f499922e2732a4dfd13f6e2dfda08ee2cad5b66b0defdf2539d29d6bf51222b1e25c67b8b84868c9c5214e22c2495aac35ac2452bdd1a2b092487eb2418e095b6c54bf888b2890d3c3003c74e9a125a78798d3234b4e8fa41e2ee4f448b243e624fe1d155adff33b2afcbb54f81789dfa5c2b7dea53f4b1571d8c3841cd6997fedb4e8e7b092004591be58c711e6ee29780eab4b0ecb8abb8335bc942757162b8795c3ddff7358a71c9d2f5ec9ff6b888c1c9d24ba99010c78393a5c7077239ea363c45d0b4dd483d9f4d2f146095f7cccdd41ed9e93c2122980f17fe90cf6e4a040840777d5b9bae492e55aa39746f159031d9dab4bf64625041c18a3af68c2c705393954c83981749d6bff07d3aecde1f1450e0f9dc3237c29112b49dabcf5eba6290e49ad656a13da5832968b85866586050b1616962baed2711588b2c9d1718506f2f9017dc01f9e8bb552ac8ab9ea9ac4338eb4e698e0e3eecec4057eb492b84f0b4c2594e4945081dce843d2ad6f76ef712ca702dc6702dc270254138c3f510411f30042789183e3c6b66da63d9ac4df09765a4bf86bd889bd4bb756a8e15dad5c5d8ae566b1582ed36b67a0d6bae6dab5a824493e97e187c4899543820ff719726e64e1eef89e7c726ef4e01bdf7d2b92ae4b60484c40baa918db557fad480fca644fc337bc75193eecb55df2d5b66dce95090b59c125d170784b7c2fee28ca94d9d74ab36315bf6a3adb21a5d5eedd5583a00e5f5f5b99a87ef15291e211a455531ccd7f1b6bb669925e3dd316ac81f55dae244a3e0def913eb8ad6d5b5b6873bd551b59bbd6dec252c45908578b6457ea0d23c95edb515f9875a1ca83d5e62dde708958b7b63ad723d9158defd3ecd33a86fbd6524bd51787a1bde5ed86c32a8238c4d5bbb30c2d31127abd74ae2ec562e35871a4be92e5ca8fa3753d0fae95af2b93ad5d8cf56bd88321d534d4fb5a1a5652d78cab178ff4ffab266b5d7a308b6c096327bad4b7ea8b8564577866186f2d668cbb440f5e0ae5c53b4584891b17096d8d9dc0362ea29b2ea152b3411827e582c47aa4a718e99cd30e5e97429a93909cc4c41a5e58ce9785bbebb85037dd48b56bf7a54c75ac525e160b63bbd6a612ee73889558f7adb75ad57fcb1c3ad7fed759103de47c9f3b92945aa34747606e94e9fa7ae94d7363ddf466b7add5f156cb8c693bb94b9f665b8fd444a380b97a2b537d9778c36bf4e0a56119eee85aa35b83596434a35ba134d128b22b9f9b699a1bb7ad66c791de5c1a93557c8c6b0ffb9bad354a6eb1bad25bc5edf05c7c5be23d9a7289c4235c546bf4081749d9b8e80c187750e80c69ef52ed5a29677cdc5d26d2ea044976461939918e365d339333a670f7d71950dc41bccda8c28c0e00a105be587322ad52f4928b6d4d48b4f4e85637d12d6b3548ac434255a451c411e323b11289f548ac39575a1d674764f0808c1090318e231502b56ea251a23c58f4221128e2a3faa058bfe6fff1f358bb566bfab85d6b34fc58fc9a71f815b773cbd683dbbaea48f5acd4e358436d6f4fc3af7321add57147d3305dd274b75e674b360d8d14572f2e1a47bb9174d5b46abc0427d5aeb56d5c74a76c5c546f36a97671aeb24b2371c448778a58439bc95c998c70d1a523b9947115d1622a4d43b931d3a1ba29148c933666b2471b175d6c6bde05e103b5d4626ff97ae5489cf7ad319af7b5af214cbbb7d74befa6fa7a8931c6eb0cec428c1b3aa27b310d2084bbc39a6894d72be9afae63d52310be80b576f1ad11d15c5220cc000420f7f09679bf6b86f90111641b8f48b25cb7606d99acf896de6ad66190c0e3800f9650baf64633258b0409f263754efb008c0f7af860849d7194241e9a4b4a7349c3a061c498c4d55bebd2482ed1ccd3be9549b4984aaee3488578706b5f38e1818c07463c68c283170f5a707794af78a082bbdf422b541cb11330b870d92e49d9143076f07a310e5d4cc05802c60e71bb3e7c699a4b7a0b9b30ed12c1682e61bb6988e612760bad08d5e03e69d8e23e73eeb309c7e43ecbed3e7576f7bee8e2c305ee3ebf28a70bc268f2020fe0a020c3ddbb994d827d600303e8c0dd3d19482948b4e0c61920b8fb27e60114381a0104521471f7e98210578cbe0c60014db8fbec610729ece4131224dcbd8332e442991e7ef4300477f74800028b1e1401a68915b83b2a0107186366f13ae30577efbc084210359451840d8ab8fba700590a01362a94b670f799c50c0814580aa065063c38c421ce319a4b0a46016532bc37c5fbb3c83492ecca573de54197956d4a7705913e972b93ac662c045610b4246c1ca910147097e4b5b25a99e0245949eeb2561aa65d0bd24a73bd256147b65dbb75ac9516c33b16ab9516c3b45bc7dd545a1256c30b565b1228a3e1af4d5e08ef97128be1f668cb59b5c9a8d083b96edac556acb51a4d026bce8ee42d635aaea458b596c9b4aeb7d437f16fa675c498fc25cc74ad6d572adfb473dd21c51bdf776971ac96fe3dfa5c8ab7e2d1a51fff0e6bce986897e358d2aa98bbf42fd64aa0ae99ac59267bba8974cd55bf78ad058b8c9060786ab34c26f49684d15cc2409a4bfab66d71196b5dc37a9fe808f6606ce3518362d5a5b67ad3d2951b692e619f310daca225e9cb82643aa6c16bf7e7326502edb54c1edcdadad7f52f2549982561558c404bd2cf7529635c8c46c3e0a6d1f0eb5c7d025a92227dae2e7d0b8fa3d98e7549dd14245ffc21283021a45b370d2f0ea53c58bb366ffd3220da2e652fda91ce1c6caa4f2dd38b55e702abc4a884508a06aa9e059942ce08880000100000631100303824180e484442c180380c95f514800376bc6886509e8ab324c82185943184180402000000800001000068db01d200ad186d63e854cb8a0619ef88cac2f1aca8e5fcd9628ec015c4672204c9769e9153bfb7dae666ccee06c0a004d0e0b4c42f10e02860ee07d52d44429cb622fcc6954874a3bc095a1034ed0f2c203b43202b56bd2b148d2ace3f9d30a506fac261a2b17b5a964b72c37c7ccbbcb67689c1ddb5afbe80389646517dbdd7f85374610176fce4e3bd840272f19b181c9b8f3b6190fe0617836036bb2e8ec02bcb7048afe403b76727c8ee190340a86fadcd807ffeace31fd08c1ef3daaefb50e66d47cb0ff6d1bfcc13c9ac5c9cf00ea19f40114b9a9eb8b752229c3fe1104a8a280bd5fd25d9dce3a30155d01abae39041fd660a797c2ef2448ed21e5fe1be82e27e4677493ee41a2fddca13a19dc65d85b2e35c36930cba0e967f07be858afda57feda7b4efbd3c1fb0726b5cb0d48c63d91ac3a01fb3b61da2e4cd72991b928373b3930f294d41f02849ecabb7e04beb34b9aa64dc89f6f94ff3b6a677a1eb79a0b4516bb15717e3454d07e5d99429b9541321da8ab8ae9f34ec3607d3ef776cff369eaed24ad059f22b883cec9c15b8ec59ba8ffb54666ca83bd0ba24b63f4ee0c7f5cc1b9d078407997599035dee4f2790c5b56a2883beae5d99fa62f511d5ab5de60264f017822fee1ba84c68a0288a793cd0151c345350d07bb049d435ff2330f8747a16a347485fad07ceee48656016bdf641df3e3d9e7dd678a1ac406281442071921e92c707259e013cf6d1bf40dbdc829b4fa0d0eaa60e97f331788339d88fc180759b9bd9a3befa907bfc6e548dfba16a9af5df39c863c4f3ea9d36648aaaf003485bfa70f8ea75eeea3fb3fe38d3b734d8e45cc1e2869299ea459842bccacf758695e886c4d05d9051bfaa06a6578afefaad979da72afebca40c765b0d23ff342cfc7988fa0e2c4d88a2d0eba3253f1dcd3fa4bd910dc8c7f44c838e4241d2e11c9c2af2ea8ca7478c5221f74d1fa8b8e33502dc2f080b89190c718e12206da557cb463b1070de531a094dcd7b2569488dd1978c63df63adf5208aebc71bf5d306b5329be4a5a0a523152295b4674a2fa2910ff25ac05ee70fc99664e277170e9c8431d85920b180e9cb2bfd1bd2221397dae90052e316f5fb9282e23759d74cc5f036fbe3fab98d4e1b5c775225f7e72507f6bba9ffd58e9d6aa81a640249148e79fd2f138e4000f4ed11f3fc1cc0ed19caff55fd53fe5183bc440b52fefc9a3245f3ebe842ca98347f3fb0689e03daee50175b2fdd3c5443658014bb51e38a449dc3f4cbe39a0f4baee06bd20a06e98574c68de0cfb4b6eaf2dbdc14458aa565e07a027b47c552ee81c69781bfabc58021c2acb136b72e5850ffd9a6f8ed81a7edb9fc4964006103c68b94759452b4c742d008dc111e0c1c4c63074e6559bfc54a712e1b5306c66a0f34ea97e3e9891284c4884c0a732536ed0a964c168851855974bd67298614e4c17d43d4c97c89294d1ad7f705ddd42a3ed89878b2d9b49ee7e8714f2e0901e5fb2fb21ff980c6ef173801deea332f975ac36f76bf66a6117ed2e5050c762e2ad60b80566d2600a12caf71126e62b5a31a25af73931952704b2b173bf6fdff59f07d61e415e3b0cc659b399eafd1e0105c2637162b29c13ae477fd84f5574a34ac2df54d85d820a7a2eec075f3ba8ec3f706441eaab6bf019f06dc1b2823c0138d44e784b02865209d1fb34ce09cfdba6e266187ff63d8bc0b6ab21bd2ad20fe5dc0ffd2019b81b8588ed77e6c7b6b1d325de6a035ef0805753909b7452287ba6640c0acfd19a2b5337f06f19870e4960b9e7843d64d1ff944c953f635ac5e21c71ae3dfb8124b763298d500303abd12a1eadc4b019b37e96cc37eef5f82b8788fdc00765a2210f661b5aba2d9041698178c7699744fe7ed5e6f6652365d3b44bf229495a4075cc0cbdbfbc00c73b567c37728adc71e4d12397bdeb72eb72cb07b084385179668f1e5790c23bc21e93a4101763b4e25ae87f9fe85a5e907349580c99e7921761d2726dcc72cac11c976fc4c3a6f6dc8e9dd0771f76d929b46fed2d220c093bedf04d00a6b699907cce98c260a11dec3d3e172887c80823bc805fefbf85c3c6f510fb2a6953593ec3df69c66bd3900d7c9734314a6642cb4c36ac13a90e5dfbfb5c8bc59aff56187c0619596c11d21c28643a4e23c12a4043dc0065fe6e7b993eda4bb855ffcac6b87fef183f3b8b4a4e9af5d18698c02f1522db822d5ceaf9c2876c3744f0a90fe9e481ef4b871e4ad3d42215ab5c18c28fdd250d5ca75420a2ab6012cc50526007dae0a8b93ff9ccac248ec916a29ef0d8e9ade0225328552c1fa384fd069b5c61f12625a46484af7c353e213d391b2dd9157650b362bbc875da8809d2e95c3b23d531d437fe50c7c5ba3ae66015c35765bf65bb25cd26da54c6bba6de413ec49c65ec45cacaf1a27cbb26697d540919350cc7b66deb1570c1f90cbf8a67c20cca171fc577177c8c0eee5adcb80956072a9fccf77eee4b51a50a5880f9490fdc5c26d8aa5af2e8eb4aa5d49e9a730a1f82ce731ce223dd53791ac8fc7e2758abd14513c8d05c799ada12ff2d022b497b124bc154746cdb4cd12768fe20ec6233bd94df63385e37a2671220721dc1f45676ee16219ca4a9ae9fb42a3ba1ec330ff84f89fe0cbeb29b42968e2c1d6c180537c2e71ac7694247d1ea4bc163482b2ec20399f251c67dfd80223158174b9e88f53a8106a3606574bc9b4336237d3b279456ab9404d2690f8b19971b1f1f7165cbc717487af3de0cee3eecced9fe9c9dc4d35f2807629bef111c24030d61d4338119a4995e2511603abcdb082a2ac59cc05a3993ed1692b96bfd67e04bacb82252173ef96ec4ee4a2211d4e05baff800993990afd2d7dbede841f47567ff57638a969eb09091bf81b76bc865dc9c91f3fc15bf1a80ef4ab1f19043ae1a1e61e757b2eeae29bf592140979f13ef16dcb4bc6a46295896c1ab15a97614a879c0f5d464e70859472c83e0e01ed741ef5a74d519ef605048e9e5d1e8fc1cc45ced26215894e88c1598a38352cb2c0846f7282453645e7c4903bfd617b02c139590dc8f7d6461e1ac5e0a9c5c2168ea5e1c0a8c9712043f8605ff6c2020aaaebb14aaf836350b5b5b7afd26a8bfd9633a1c19648204c039b01e71a92ad3a4ea5e08848eee2da85ced6fcd3a57f7c7e489bfc8414a6307efc2b3e3fc68bedd8d5a6e49c9ccb673cfd019072a3877f3c2276b94bdd72a1eab64bc46678f87860135acffd44bc1ce132caa5a31fbf4644e7e6c50f476ef331a7b8dda90d697cf0f6726a03363d8be96976f4b1cb7bf0cc9ee6e03d328118fd16c0ea5cb8ea775c6af9f6fc7c71e658e30aa4e0593f563dcbebaeb134a2ae0ee808961d7167ed94cbcfc6d06336df62cd4155c5f7f0eab28df97cf8df5525f7b7a1b6ddae959b77bbe866d3da04b6d1939400ced0c9e3929a855aa5b1b33762ef5c14191be6abb69a866c54095200329a552e8421cc62b83de2346c88b5c9518721ef82cfabe55bc5adda391ef9fb5a113f4a02b36d76138963a5f8a5063d5104834ce4ae173a41c196135111890f617bf81848249b63caffb6ad30837a8d8c8065c4db8ff7a36b3a9fda3d92c26e52708c351b802fa53ec46027fbcb79ba66d18a80e4fd81f0aa76c16fcecbd04741a677402da0337eaf7876be781b23c387ab11a8d40f97888891022fbfed11a67616d98461046ed44db342d6dd519717bee8d6b6ca4fa7b21a0f06a006d0d6e7962f085703dc3b5c60f612ee2e291b16c45887ae846698e543f1a0c05e466d81731c249782185eb1e412d64d8b4783fee42a052b76faa6ed8216770cd92dfeae78b3198d1a85560107ee502529b6dce85a4bbd3d2edeaaaca2658eda5a3b05749634320aa3cb127a2d93166d0ee315bfb584b49d3534f01cfd9ab6b75aa9cf48faca20f9d4ee209eeb12e09b5d0b1838702946e7806afef9172f00c592d3c675c3bf1f02dffb5d86409acf942f3fdfe5f1a5878b1e7583d6f75191df9a442b5551cedd300024f21cbe6e90acc9fe4633da5731fd1602fd75b74598743347f4c091b2acbaebb775f7d52a23b5cd2a1e8c3d72fea186cfed63a27430d0d3fc40425d73caab084894b0de4d6f8cbf31653493ed1793c9ee6d277678d2de83936a96f2d00b4015517f21d055fcbd0d9f1cc05776c914ed87e402fda946922b671e105c92e84d7163948b5bbd87f2adfc68291ae49fca9b63c5bd8ea5ab0ca452065edc2043fa81738225dcefdd80e64cdd9d19ce2a0824ff2bf5c2e46e49b0bac1ace8d8367e8152b1f9e2b03c41f2b3f32bebc03a2d5595f067492c7124618919f139c99b640a3a2370890f4998ddc12abfc8f95fe38effe0d0ae1f464d2b0eca99e616f1ab80ffb3edd1d0cc10fe994933ae414577460e13ce27f4ee60f0828c7d0e88fb7923ad2e49fb2487fe47e72fcc46a367c04c8c4b3306a3674be0827c405a2ba142af3739a6ad869e793cbec29377a342521f7a08ca57aabfa5c7f99ef3e0cddb4893cf40090296c3c52d12d9655753b5d55eb79a55fe686caa513c5f20e73c7230041efbb9ae83b01b9d80195970f2ac8e819cf4e0b11ca205b0cfd5c183bf03f6add664f1b8f9472149af265c7c0c786f2da63d5b97a4b2253fd5315576bc4f5c544ffc9c27d07bc6cfaea77374cdbc74a0553bba40d4a807769bb4c08fb2f29912fe41d89b9291c1032301c183492a782fe261912e30a20f61dbfa83cede6bb4487071da8a2849bc49ae9c8dd4fa873c721b2092ef9a0349c49e2ee992d2bc7d8376549857ba88f394abe24ff5f22b3dd2056b034072673d98eae908a448ff49df08282df624b0c4780393990dd04acd8199b4018d66004c63424edf01f63a887d57ff9a1f86347f2acfefcfef6720e67d1f4e0bb33f19a92e2509f033edfc5b9094bdc288c1168e3acd056231a39c81cc118b080ca0d2387b799b7e370079c247ebc24efbf13507d221dce6c4e685683f80c9f162867dcd8c2a43f40f06c1833fa7e9ab9d547853b9c2e878db994990a7a3f76376b2ec882f0e65434f3c2c739071d0a80dee6b22707553d9f9e3ef2c4ccbdec484ff5d2d6920cbc29b992262a704bb65e887ac9e9122793143b71a9e9701a5de8c18b0e178224c4fdf0d46a616f2803d79a606f6bce33ac48f8604d0ec97b9c3968a95347a9f400d6d18e1e7b81239f46cb036156ffd7d3bfaff7c87dded0990f05c658c9f54b66e94ec71bd7d67a9fcfa33fdc7b8fc1f05b083879620582543b2f56245065e1c6d049ee5f49e06e0f01653a4f49f360dbbf80c5005fb3a285f55e4b78f1a3b23fc0443fc32b5d3da764cc22c31701d8512626243696d3278eec1bfa44a15554f2ca3ce4673d23c050101173b122584a5f69cb21d424e317e630541f48f57a097ee312393a36898246ae144f624808f8e60498df32c088b8fb48a805f89dea37a8aaaeed2a4e62ce7590c340ed872b5e29d9cdc1b57c7f63892d3026519d4590424e0a487c2518de17d476036b68d758232d7a8d5b9395be3ab572b8f594986e34037088ed410031706645a8f0269226fd5a6e0608432b1207426f855ed0bfed1138fef1993a9defc850e37226943f8708c4dad4560e3b0feed3919f892322f668bea0faf03780e114ed96aae52eb12844f63d119914f17782d2e5960ffec2999bd267274a4c690dbaa0d6527fff1b8028fc94f0719457219027b3c76f609ed8dcadbc4e0a2605b45328a6ea06802104b20707cc54beb0b76309a2ae3e375a9327f7001cc25b604b587b91c323382661f77280317698df7facf762415de9653c209c72f72bbf9a8dfc3b3e6ccac7aac56f681fcbf95150123f4ba0d680e864ee8e02b3ee79077e62caf89ee06f8aee2ae1732ab51b928bc31d90cfb56fa5273f64bacf582cac99723d4158b6fad660d9d84419e26f45b12073bfeb6e28917ff8e00d64befa7e9727d8691d0151171c0280d1211ac98de46995a5055b1c15c8fcef36f53a860709c4eb9c43a08e02a09783f9653c1019d7eae0ce492a0db50513be89af7768f810fd4a23f24d9465758ff0cc2f4922448c8122926695abbfdd73acfa0f8036dbc0549369b80dc2f0117744da9c829e88e4a50d2a458e3db8c283e34b26094127b1dc0378ecdc1fa9130d6fc288ac1a0d5b496a654e5c960e670934eb07990e14372fda52f88173a22fa98a7a2e65122887f78145705f8f65fd3f8c52f67d2dbe036fbb6b152a938fda386ca47f6946222285a0df30656508f9d7ac4886f34f5bb675c745a2c9167c35ae971aff79da29f387a7bc6677c8814c4690a8c3bec478448219ed2a286704fe83012941a5e0a7af1e6e1ad1d4f6fd0b5067efc35bc6b734664f30a8e8cfbf23e0c8fffc59c3990e49e01aafc7e59b35945a72db0f66b4def3396cdfd8e9588a27bec6194b75f62173a341c3d41ded78ca2c40d14cf7270b5c4e234f94469691e49336ffa41507493e291d64f6a43659292d5e8408eba773dee8e6c321cdc3fbdbdb45fc7842723b2ee9f59b4d8fb25d30d685cb8ad603d4cd2265eb42e7aac082746bd433ac0f627af622afb3e0ac032f432b9c83003c87cae19a0306aca97b353f5e141005113ae75279109c3872ee504394c9226840c99b5120af8f3629b7ac0bee56fc720d5447cadf6ff3c1c71f02366a5f378e3d698d56729e3f9caf57fadf64b3bcec50c95602991c1f2d077f802090f3df76e06a7451685e6ba1896785a39f5b27a965a25cb64840a80aed2c505169edf5e8287abe83588a51f971e393c81f9df26c206b2c4448e0311bf0c751d86bf7ebec40416d3d019a4157fd36b4ec4016195653c5aecb0d154ccf532464b82e262282c53bf15785e20834f3f24a6166b4e0aef28075e49b7ba999abfc94438f48fde7daa97d0d893e7abd126e85ccb56ca7ff9f0d62731c67b3d79660f79a021f1e3edb38f84d215bcdcebcfd191bd639f0d446863aea51661af9e81fec22e271eda08d0695b49dc63ef787c95f5f8629887fbc2afd4a636aeabc78ef9f768cb3c45f27b98c11a1441f8c1f750878228ac3753225327505ecf4e6ef31c660f6bcbde30e8e671659235e19a52d778f7056b0a1064d70a1c1d9b815da5a4a276aeee37ab931b47864f25bda145e5e265f9151112fc05ce5584dca68d5a74657d5667f077401140144dcdc954c88e828aa0505b4a86e0b349254ad86810c3bd7cd74a04425ca4cfc63384bf4bc049423a5b650a3fd595aa9c208723fd8422a812b9b7052e1ba47dad6190df384b9a3d9046b7ba1c90df6b4568a44cf35782b61c37cc851226ba8d0efa47dfb4b73d1c088aef46550883b1873a462d79dd3380dba1891d783274048627abb64761b1a5f37678b196c8b2071f426fa2c3d1069afa214692fe0f497b2457c7eb47a28abd5a79a198450ef09832c0a740363134c85e6a6f713a8b360eedf05a59a7d4de9cf41e49b16c003a98925c382d309bb109f85445d11e056b0cc4361d9608da979b98511578a7750c4fe6cb293839c11d5d8c685f4987e823f0888e67de819000d62e63ab5e178695d1706ae3f2a3f1a75ca3863edf236f9cf026673510462a81dd0e8f61e1ff32dc32e8767e12e47ecd10b74d4f10c0cb3ddce0c0ff963e1e27db53dbc927e1c10203afd8093cf2823ef05021c3866f4dcd76457dfb57c846b59ee558c7f5807097b292731f670d2278e294999a1b10818dc10a05d481e4371ecda1ca00d9c706674da5e5b34530f00ec3c246e465c05374bcb83bd6cbe5047b36c0d5618e39f2f639d6e86b57ab11da058cfcb5ebba8fe2c2cfa451415e3d20c54cbc510d7ce1bc0029664fa096a9ea19f8440603673366753d03c2e1b5cf9a040def19c9cf1b98daf4bacfef98a2278aad14c2030c9349917741595eacb7d721bf30358ea0ffc0436ce6140d3d2c5837e3aff35ec88734af8dd2e2f2073a218624c7d4f1eee0677c97099fa94d8eb935c1419c28ba8147c2aa4594b8b966ff7fb1b843ca5aa93504aa91713ef44ad261377c65a19ee74e22fadee11a5a6c41e55380f35f229b8cc3246891b884683ddd88878c00702bdb7c0f0a53d0d60bdc3269d8acc2138dcb6c4631a70b42b48a9a1ec1e042441869733d01d2f1191fc7a38b94e44c90345b35d0df365a00005b7c947984815502eb754746e8c4f6b2ddd9cab47b5f0c9a48c24adcf7aa2a8ea76596f7997e1f87992170a0800f91010f5d2ee5c9f10c51f1b58a81a4a8114de6e5688f510cdc5cdfbb9d4269858ed754bec559013e4582ebd0c1ef94421854d634d1dcaf527fc880eaae99ad0ff794a5cb0a161a6abb9e01003f1f2a26880f0c9dcb485596dbe4040e4337e65c0643c961887bcc7936e1c6551b055d66066e5c63b872466be8950566d35fa70cb283be1c8ae38357943ac77e9689735962bab7a89d786f51a69d33107d0f60c3ea77aef777d2f7452fd9acbd7221ca5858aaef301fa1ca10749f155c6ce534aca7000460db145cace30fcb27108080d600a7ae13aef67bc020880bf32e7a43c40491404c09380b4395ac32fff800850ce604874803b63bf7907fed997d3de893eb0ba423b43c23ba59cbd237cfd8bfd6b135f21cb8e26eaf019c7ade6603f23998dbf3a82af42b1394d45727eb7834bb6c7fbac86c75ad3fe0e1fafeb6927830d33ae61fc192da8aa801e54bb7e778d26f931373e81ae55119a9b7756a3a8b1dd1055f58f829aa75b9b91c7af0dbcd8239e8dd0ed3cf846edce77195af83096867d651899f0fdd43f940ed4f0c3fc28e212515893e8c0ed51384a074b617fdc754747674883b0a1372b36b12fcb8a71c602a35b223d14db4abd7e2cb85909e2e0ecb5719a20ad3467ba5d049452e77189230684f0d37a2a23c5d62d00fc1155d3ce8f2cb0e73974faa0e23a6f90519d82b229c69a7153b333a7281f869100e25318fd6d377f63f5c0e5fdab618947f202f4318e35f3fa453fb01d45bdad30eb2f896eb2c8bb0b782c95760460301cf652ac2b93411970d532bdfb92a741413f6e22991c343c2c62145dca609d3322434f409a8eb9ad8674f02e450d9b9fb04ded2025d29cd5a35e3833e159c525245a84f907210acbbe2678711501ec73201335f012b7822a161f726abc0a246c53e96eaff2cbca868ea16c10b80029227b95e0df2d74b33a6e5b17651c9ca4671ad564b89a873b659e994a364f883fafff449cbad085737ae9da7bb3efd9e7ec34fa70c1f813e3ce0779c75f39f65dd0b8cbecef2c8e0242769a35fb32ad514917f121ef831b89e006121cb943f1f774daca36886d4340471671c4a4e2acd43e5fe5f94578935012a67559c0eaa9f9c8cdec48e9604d0f9a5cea4fa0b9bbd4e4d12c04a91b98adcb22aa526efaa86e5a3ba0c45d10e666d2a5e3682ab19a8de4ee3e23d8265f6851dfc881a5c3e55f86832aeec4caed410f3201002432a5ea7dcda392aa1f8350c312dab496444a51339fc06f65c449f9312c0f48381b997258f2cea29ff238197cdd07b8c0c734b67797fa4d2e0201b3895ed27028b3e4a3a52493d40572d8030e0b3f1c2071a80b5bedea58d093df0699635dd40c923c58ba5ef5e7f5e254cf7d20d1a3b39f5b9df15f5bb0391ebd46f0845a6a15047895baaea597e7efb967a5cdccbdb2d461af78bd4ef56d2af1e4eb172bd2d200f8b16c338ba7905cd1fe4f5d7176b4e7c06b5a75dca371031a04fb18c74663430ad6474181f041155d4e200e25ac9e256a180005f64e5c6236a92a9e614f80c8e2df12ab719022322de6a89448984965dedf23e22a06751c7dd04b3f139fa21ff9883744cbbc4aa7aa0ef15930ff94bdf8c69c17a19767db097d36214b39448a86e26f79db42ad0dcbaee4980205176b0ee9a170fa0daeb03f346fb6b3c3a0eb2a11f33921b33a372e55f0cf1b694b28306b023ab3bb26e91e7112f1cd6e4440fd40d1691746b12289fb00f3192428cbca0cdbb98b360172a69c6403692fe21b6774323544ce7ed82ca75b1e23c8dd3e2866825b4e5ca203a8c58d92ebba66fe4b8e428fafba336e0b2bcaf781315de796edaa6f28fa60af4ac1284586df2d841ca38f92c26ee515dbbdac428108226b4e4efda985610b052bcda8058a23fc584a965bea5db0850f9a08e6a893e82d953f7ec63feeaee5683ad359e1e25cec9a5d38731d28422dc3471744231097034450a88ef0ae41b37ed9e6f90e18443e50797cc21c1c9eb90c555d22b319ff3434147e99242fa10a86431857c43b406b4358ba548d1f7cf7b7d47154cac4f00b41a20e4d9f7b50a645dee975700ba9f635be7f5fdf006ec5d2e09c74e094e439e92c14e6ddb7ce7b78cefcd56fcf2d9ea3f97035211f31365c288c3972b2475be25727e4a929b14ef61ca67221b68d3513973be520948b3ddfabeb3c672230734c088636f38ee9660da6d24494a50d2ef317a66f233eb70086ba153711cc47d5b86b1ab99786ae1b47317b5794d4be6e7b141634b99e482abf3a46b697b6402a358e11073e5fc6da7ecee63149f7710fee352c658ab262d5aff7d20c9cf28496c59925f95fe0c265f6198e7dac64a6df7a3920972e1c1f5bf49e849e83fc33bb7c925d97b4cf4f877fc8b7d170eb560463c1cdd5563f9fe0e896a6b6ed4c5c611b21b2ad6774340b321705646cb94c94b9e0498fa68382230a4294296835c078fb8c708edbb87d1d758c4f8f58d2392a2d581c100c73101894dc2bdb9bd9a693b3c5337d0c404d858519fbc794281616149a0b8a7e920a5191ef471cd8ebc2f1a5eb7e9c3d0987a72841a2aa7d51a000bdedc0730707ca75fc60574f51c7071cc5d661bce4c2edfbfc1ec95817f6caf1a64f28a809098182dcee1d07214d176e112bb6b41b5d05e67b10d060b4152774de713d96bb78136f04fc9a5ac74502bef5aaad9011b39e40c7950f4dcdd7b249797c5002e7ca483f28d1a39c0ea7d08a7c571ba7d29469d6c003e58ea127900151ba8709f06e4e09fb8756d5382aa4bde25fe88bf544404eee0713ea21edd670da6be5fc7bace8b29cfbeacaf9ab5fe200b5b908ce53b5bf43cc237158257b8c193155604a2ebf94ff7c78f7c8741aefe41876e1976fd548e8bb3de8ea0c175d50aa7e4cc209a77601129e67a209cb81a4fdeb3ef3a7e7956fef26e8e8d0822bd0bbfcd8a394d7d2ddcb0659a28f15853a276c5e358319a69a4dcaf301b2c8f27fe188ba68793b7acbbf541b230ef0c1cba735fae9b33ce8736ea4f5a81e4101835dc0c359e9bde2a090b159e9708c5f5d931c80e7e3b9ff6eb6b4c13881141e82cd35c83eb8555bf5d16abeb77fc910ff01489d262c5e5f68bb80ef6900daa1ca817103cbbff4055cb8464884da7101b3f571700f550809ca5122b98c437a8afe972af8c0a837592d43074297b89554f68d2981aca87a1f9641c57aa82dde7719bb749d6c927bbff39220a42f41b7b02dad4f54fc681e444320a3021b35f7a7e4153d127786aaa1450262b2010a4662d2fae3dd0fe3a9bca314383e2f972b387bcba0f888921b5b272b081fd6a104cd55d418287871d2c96001a77f1c9dda0f50c50fe88ac5616eb136ff677b6095b069aaec372e2b9d7740c210452a18e00479e56c5cba69cdd91bdfec12215fbbeb897edffbf2aabe3f584748b4d15c7e6b3c2e756862913474d1475a6e303936aa42a3cef04f0aa08220770c22c161f7b86a8e6cad07b5ae73719d196baa3741ec6e887121365ea5b841a7347b22ef7e9dbdd24c8fea180ef0bcfe06afb13417dd742810848a4b65e38e96518a866cb0e915801e887c11b1a95738979eb0635c4dffb0d6bd13a798dd575b530710c2a269950464f04bce87e18486efc38df89eacd991928b11da6b7246895d1c397405ddba891b031bff11fa3212a40b634509c0c213c2bb94f68f96ca56bf6eefdfae5e4f5654eca5a5552cb04ac7265a6aa6f780b338c43a1e4b0400b5303c3ab634ec43798d51b5d4b512222b5340af754d3f023b3807e26a4a06f860a72d6a775aa0e46c2bf965e2d4ba82863f47f83463f9f309db562e1362dd3997706bb61efa095e538465725d0009311765259f5f7470ba3dcd84d0a1ddfb25e28811a0bfd9299101c26a46cd098352536c69df3c491d8073c9b73e7e019b717098b261a392cbc83dd8ebb471961626d0e89f4205d5f6569f752ce08fad34c4ea725b428edc596470203daa00ddb010a49a71354dbb8f8ea080a0a921db85b71de0bd29ea1a09de38ccb92869de455c51b3f7b6f7fe50a922ac74d138db1a4c8934e50d662de69e1b3193ef91fa83aad131b5524ddbdc2b0bfe05065c808d1438b9b767467d2dc44335d8f06154060f3d622c3dbd5adda5cdd6f26200de7cd4e83c8c239ac6ab63bc281d59e2d039b2102582ab54a34415dc17f9f51c57292324abf0e06e935aff01bf95fbf848dfb170b17d95bbc48b805fe3739a77d0b3c9e64eab5f3fdb15f085f43a57da77865004ad29c3bcd0c65057984a86c4d3c7aa0de9818e393e06531c4d009ebf65c4426c61fd8f9e8e3b77a85215d8555ab902c65a45f0b625d0ff50bc623a71eb75c1cfd1970feff37f630fd825b0e7595c58d570f6366beeee0d3242ae814eff268ccaf86a5646d1ed73d5a48a4e984d2524279aec52d4b0e410723372361de00e09c8698d77482ecdce165ce11c4b0af43fd776f28a7156be98e72836b963916adc6ffa7ba0a3b3d4bd449ce0e5d9b1a4bb1941e7e4ce0f99c4e2aa4cbd2cc9e0136d7929783e939587e9cb7ded8a685030148fd231d595c960e6970a3359af32d11f00dc17180fabf2f54326588f009ddf9413ffe201c34b2cb679e0e695b95e35744ecad9826b0f24a069d96326617f6dc1a6d7570bd5b2ad3189f3af8520577bb7132b32ee21a70c53590c642d27da585105389ad72e9d33e517cfd0465d89282d733d962640a8af692b1a2a6b0327f08b48049e9c332d04dedf84785a4f030d83d0fb09233e12691b823eb5b8b6e4bb95a2c35e9c13a1598ba87315d88680263bfc0f0ef17b70a922773e466f27be49b4627bd7151b85540be0fe68b1cefb5c79aeafcef45fa217939c52d26db09c1c3d45afec874974e03c517df4f3e38579611912724720247c204feaf835a7bc5e583217c093e291c2ede7d68af67c01335ed93261d9ae91f68ee0a4d64031a3ba26a279d0c6d723fddfef51ab8ab94eb208b065970cc9d87fd82f2b9f51427f3eca4e91ac68ab0732944e206cfe59895a779c071c44801c7c90e579aac711056033da25007b4fdb44f0c9fd9c8b8c4d01c1a42d092c0b6cf6ecd51950a3408210510013b6aaa8fb4b4d9d384e89831c7f1ab8f50dd6565b5069850ec406d5ff2bd2fff3682971a08a4748d37da83c6bf461c71a6f2ed2022111990ca43def168265fe7400bb4b57cd34c8670f5a20fc06a4816d9e32d06dcc5970bb9a4046c09f25c39bf29c56e17404c2274fef3e445f5e68fadfc0f8b94f897fddbb4506ebdba43b4d53c9ab86a361fa8eb4d234a238fa091fe3e9d13fe77466b4a5605f72e7e5f7f5f1e4903cc74d7eea8852a3cfb40278c686bbe1dacb368ebc9dcfff89a3cb41b72bedbb11e9ed680ea19e919b93d2bfd42e68bbce6848f01739aa0362219d0add5019dff7f8d36f53368fb02d34e6e4515e46eecef041803a2a171c9936a96976b11cdfa8b71a0c2ee7f80bdc5205f3b19e103054fe0acb46f1218ff26a152bbc16846cae9ba26068e9d5e0164fc0eb54474d4f94442662ae301e25545102ae3212e5e0ef89c2fc70c043e5cdb19dfb48179890baaccc3134999c4188e9709d2360cace41fdfb705b605318dfca9524d03530c9a99e2b0e911802fb475f313ad7ea8289137ef55c846374852cc22766e7429f0c54978724c2faa2ec6871aac0eb2a1fc7a7aec7d8263914aa5f8923bc270b02605b36ed6d57e5051407872c62ef357756a70feb956958d29973f68060c48ee44b93b0306ffd3e1625e9c8b264ab5f1b82068696bbfed997dc7e3d3c50b8e6f3e9d7d41375b1157b71d6902b697c649485bc7cedbd8bba0aa09b1b3a23d6fe60d074d315d9c120e923bc27a64ca355b25cb1c6c3a18b59c623f8a5e0a4159ae25844887409c2de8464fdb1dc0cb32132d27781715a17467206517d59c6fad5da3c63bfc6ab6bea24f045957c68fb5092685f82ec8ea899987487ee311e28b8dcc8779c982d401ee7b086bc75ba35e2505b74a0186f146e1e0c2f62a5eb40c218d925077e1fe444aa14aac974b67bed220b7021168809167ddd8afc99918dd69a851d4f6c60089bcefe81f94123985b20c1019dc45519a5686af23b48c1512ac86e7204b5d339d1529daf83b5af41aa34f04bb93af4ce777639b0abc621c85255daf88703d415a4853a15db35d1a620c1d97a26f0f918b60cfb951bb4be13175031909761819559217572504187ea8d7a4649f0a2bf8ba179e5c557078943f1c8fda99917ec7b5d4444cc0d5db9c124af4ed6d7f880fb7536e31e541a3a46019d2fb51ee9b38abce3a5a5c3f18a2d144ebe2d3cf2e98cd6e0bcb24dc268c9f0fc10a9c1dd3d142b121578641901f150aea629922193207da4982644242f02f78fb68a85b33bbd42357cee403e4532ae45e23cfe603847c91210a81494cf11879367d053dafd1a4ca99d7b82b68af0baa872d431aff31366880ffa0972064b1613cd9b4ea9680adde842a4dfa4d6dd18af8e58c205ae4eae5310698d32b0a8f94c5123f82e95a599bb8703cdb816929797e78b4607acff1ef1c0a30ef9dc0b9da93a90084ad057080c4ef220427bf45c55d3d5de41db9957d6899967b440a6f30a55418c358550c7fb4440b45979aac71f494756ecc861c54ded51141c2528234c0a058da89f0716470eb35e59d4df31c3db344abb918ba2ea1b4235873bb44e55472c16e6535e9eaa6fb27469c70083ee33101db3c4115cf39cd1cfdf75112000e5d30c81e777542138b524cb08a7516bd9ff84f46971203103a160dafbae584eab462747c199286000dc9445a32870700050e49273acc1137abf16e94cb8187620961335fc68fcfe140d8022b96e4f607810404465eeed42780fa35a5e697d8861e1d6fe0d43985d26add7839b16dba65557586c004aa5710b4629ec66e6b2680c7dd88cf5fe512d38f790bdb05010e40bfe99371ee73b42f32f978efdcdd05a6c40a4f2de23eb2ffe65d97d45dc65d535849102e63c7b6a0c9ffb6caf608a5d0af161cd676327cdf4fd999eb70bd1fd675c62d111590919f5954bfbbf164489916c6c6713838908716ce2066c71cef8cb0a7ae30b964263317eec96ad69e7ee6c4c99ac16226a6c2e2bdacfac6b36e82f2a37c66c26d9ecd8603e191897c4a2dfec3016fe7f6b0fcfc22364fb07fc37b6853fd3105c97c3ff8914c5d10cb6798db722bb7a802e9d89b6d88fad789e79d74bedf594b6a084101cb11f4ee52749a138e2eed2439ef8a1c153d821e260a22ebfe11bad783fe3518a19420d2c11d1c65ebec745abef2ee1ca83239c91487b36dd3467148773ec516409957de972db464395c915ed7613d259e3e924895871f16268d9f5d39bbcd7ae3402dd8f41fd4c9227c2b2ffe19dd4104f2e8aa979ad89fec8d4b430c5385617c29dfbc9b5868e783863ae4dc2f5a64842a7edfee48ead2ad955d4034aebc0b338920275a13155e15563dfcd3a461d211dadf96ed1737d3f156111d772741547ed517195670cd3ccb0b619cfeaa92c9558644dff9aacc8caa75d1c9c003b1264742967f82c1592fb69ca53798eaa5fd5bbb8a4e49ab1a42471a75756b68de2bc82dc250749bdb0efa47ea934ffbe388757b19b37524011a90f74c575f05110257f35ba6b41f3bce93da11c4c3d44de880b0372fb4dd3227d436392ae97e6466f07d53a6db0110f01e72c21318092267b7c6ff72d237758faccc5012919f627d4f24f6db52ccc4a48870854498c7c112f147d43aa0f5ac03078bfe51fd2009ed392c1bf001359ffaa891c57fa32bc55bd59e666f5eb9115bd171972c397511dcef51cd9e561a78edb870b375d2ada5b0fe2bec2f48232f3e019fc8f2875d994846edb15f9abc06583b8165a79c0e60a34dbb02d1b6c75ff0610d2fc05ee922ef1c70eb4012c34080e56637f2cf11eeefdce229f4dbb3ac18c26a65c90fe2a8be655d4e40f0027f52ace629282651e43fd72f8a175f4ed13481d29f4e991c1e7207bc7050946e622afc85d1c8c92c97f7199a746392e4b139be78eb4b6617d3b89698e9af9baa8fd4d4f5fc2f2b9aa23df04ba6a1f7c5afb229d6df1340b2837a30f3613546647f7a6e05a2fc22c42a2f6b75404950723f7e40bf0b02e832e99515bdf8d7c4147d8ba5a3af5ffdb4d619a40eafc435365d37ccccb4eec2dbd6441d5b58b44d001312e35ffb4bf226b50a96c7c5b489e6cb884e2b34065bfc91e1fb7d88d922df99fcc30586d42dd55367fc370f4326604715b5c55713cc81abb59b668f45314737d042f4f7efe5b192e7563ccff43dcb7a0eb1b295d1fa39856a0b6a9f3571ed0aba943d323f8d93b17faceaff2f9780246bfa7e5ef6e4517879c0d674e26296c661ffb2e3cfd89e3ecdd6dbe3be8638eabe717735c8d3341cb27857635966177693d742655a38ee5b72a91063354d0f122bf8f31aaff201d17562931e13587ff22687d845314751c1e0d0d05f5cafc12422807e7cef1d3aad85a93617f319e6bcfa2176a34629a6044a9348aaf39041fb3b52197924972a9a623cbfabe0de33ba13e95a8ec07bef8a4bd56f694d837e6738a8ccf24dcf672a518570ed303adc85f169caab64ee4c64f2be647877e74b174e9cfabd87a23ebd54ee092c0b3986020a069c9abae86e44606e5cc2ac96524c87bd209ee3fbab0ab6207d739b81020bf49127c5ea8ace217beab674141a17cf5ae554fe17090cdaf13671573cfd00c9fbe2c923e1a63b5951b9e53bef615fe3352137a52b837ca52af2feb7e1cf8b1a0537ab7091a6679eedaa7310ed8ee0855ba30635734ec4fb0c32a50c75f136d6349b0b256895047d486f9110dbdd1b4ac5654debf5d7087aa34b2185be4f938fa94127fbece38724f04e2a2ce89fad5a31f7d9c6d29736e9772a3f4a8e4ea6e2ac863ca4062ee86a3663d2f6f121856e28ff53562a43d5cf80d70ccd1ee7b2f15ad6e6d72bda07ea325f0ba7836d725c41fbae202308458b7ad477458eb91114fad31930eacdbdd8f5489b61ce8a70981d53d83724a57c642314b10a4265a82eb9c37beb57cc2a7cdb43eb3e758dbbfe45bd7ebbd81deefb25e8c5e609642cc21a114050fd71760f7d05c751ac10ab281d3d9e221c374e03b1a1393313ea178f7e1db063923c484d2598c5862ab7ca07a2e646340d852acf59e6782b74aabe10484724e904268b65e5513e42707d06c6fae6b8990621eebe40c2a92167fa7f47d5e09766338cd5c30983e3eb5b2db9769f0c2e40451708f98bc65f6068c241846cc3834aceee1fc5600651eedbef333c2e075803af636cbc41f908bd933dea902e1ede3ddfb53874db22e05ec97942219e95afc936ef1c8f466aaa00b17a9a1f9e6e9e1d5c58d60676b59ed8bbf91a2e70dcf91c882f76e5244cce8787f9a61ece62dc8026f018dd34a0cfd6b9bb499bf82a21ab09c50051bdffa9a839ef106bc91e974f8229cc948aadaf5cf51d137925deaa13bcac6e0fea4f6be1f502746633fd65f46b2dc5028c7044c2e6322301ded15363cb1ef7b841ff705d62d7b4e3297bc895eb4f709e98cefa9b2608b23544cba6248d1c8582e3ef398326d90b1603a5000a38784640f786066fa9e496db8ddd176e48609bdf6dfd682352679fdd4906f563effb9cc1d180301034aa500586d249857c1197ed4a45da53ae3ae9f278e283d3d89728b13d14419a900c40d3f1fca03e659a8271ddad97f3761197e6b610d1e06278846b08267378fe7a38569f0a8fdfc4cdcf460e6640252ef57f38b12335369fb0a1fdb53920151c2cd37f1d2afc9f66f80ee97c1eba0bef2f21e355640fca911090ae0e245fa59c1d4c9b7686d009e4d3e21d675b8ceb8414e61fbc9898c44b191ba7070c671c82af43b4b121188b3dc7f4fc9532e325ce86098f8e1dfc080840255ac8a50822461e55c621b5760468ec460f2f670dcb82a6f72153635592e99dff657bf68e0ad93296ee84d6001953f91a24ada9a6a03c8dbfbc444605d4ad240c19da6204a6d3bd9e8df1fbdef26f91c83e22a09e8cea8cb740dbfc5d146bd17ed70c447d1904eebe0236b78d5590c1b1f75811ada6839fe7f0bf082c7c2450a36b060e2a254b7da7037e5dd32495e2fea16250dec065c00ff7b0bfb1d123d2df918bcd53b1ae4b785bf132da336eddc28f4204d03840bf53b4542c547c4d1628b2f3f700c308ed824a08fa6bf53d3dcb05b48a4d9934f52081a58a359fb092c70fc451b446670c0c0387da6df18c99626872b779d9b298f5e997a5d115fcce29f8e427d1b705a48819e7e04eee84fd7295f04880dd79fecb6ba56baca01064513cf9097160e85c894dc6df3d936c6c319098c580efc8d5760179724899d38b2d9ce3c703e2204b1803dd3dd1f6e3c0ced874dc056c807adf8607c052226a18273464179cb83e48934ae39862a87c0881938e08ff8d8548d85aa42749cd0f0256713f4f172777292d8e32563f2b81ca88c8c76c565b0ed9e36d54a9efcff93d9042b6ddf4589cbe5ea03522da11105a83426d82dc4d1d2c224c2429f30f765c44bfbfa050fe277fb683bb2c375814f57717f11291ec6fbf5b80bc6286137162f53c509b13e1613fb2dc2180d4540a8c6f344a913abcd7e79400e18fca70503b66867dfcdfa690c2170a21bcc79a0247c41c11798371fce431f11b7b34c2dd9c1fde89d4e2e9d4c175c0dff58b57cb03966c5d549e60e807b1834e52bcc1147622e62136b6391f023aa458e83ccbdedddd2778c62fdb14fb0089bb51e27ba9eac4ddf074c84271f02bb82e27d4af870aa0e70f0d2791128eb872cb2ccf43d8bfa24c620c395c95c2c2f8bf72827d34c58b8d20e97e1e0d7c74d4170bc45e474fe02e7c813e71bf36ae4337ef64da4e2a818f87bac14a5f1eca219a7e9721bd2e00e7c01b51cb3b3e8c65a3cf6185a1acd57d09bc988b56363b1926045557671c300bc1e9484c288a5fb1c042aa501ef0f44e75e8657f4c9ced3dfc2916838ac1c411d443767225d615aa1129287e4e5ed88c4b9dcb058cec6a826c937850fe32878762dd95685f613eef123cc03cc27a1e661e1898c14d4f5fd550ae3a1342acc8c0b3a2c9e03b34428fa89e1238c30731137fdcc04fa2cbf055791f7c221f587c71d2fc8c150107f846ea51510e9e542c05742bdcec7a1a5d1ffce578477ac58ba9a557da93e6f1f3ac2dc99bb80cae89fb2945be85fa194d3474996c449d427430fd4895cd625d5b513045608310199365b833f46b831ca20cea2584378e576f34421b30839cd51e8948ea6549530980c85d4b08f9c09fdbc74214b04043472256f27f20641ad65d81dd490e19b83ffc13fe491a01ecf10d32b04af5ee1c6bb34f15d562689e91896adfd5289d7687f35f28d03000cccc02103b8b19a914c82927f7a4440dd5cfe02e374c669d28b42c073fd92cc3353fc74afbc3d4aa5ef17edac3c34455506eb46f7cdde3ab6659c16100b632d6d2843ca06c8e1c8352196c6522f2b5c5d1ec4088c801b1b65cc7eb07e0db584581000e5a0e4c082989224044325786fa06eaa44ca65abc6c53806fbcf7cc1d03e8b98c56d95d18a9d949b670ecaf459e22b4b5d308ab9155e0196009d8aaa45d055b9fd89b022001f92e49c902909a22b01d9aa15f2942c59dbd3dda91d89d60847b68b16655d2650ca4958ca8b8da92022dd2df9a6c46ae9bce1925671ebb4b7154e3b984e8bbb766a9c42bdd3a6aa8c69155741260319e23dd59b68984d09e097342db1a486f6228812bdb2bf16dcb13e6c9d9d10ce66d7dfd636fa26025786855749c98345a2aba36f0a5323ad6fe4a76d51abf18601f89999990f5bad1394b0c07c1566ae8aa4e27aff28a85b02f54c363ec748e378295446cd4acf7edee9070e9631573f0aeb815860b909c02b6bd2f1d67b6ad50bec70f40a3b5d51f48bc9e2e75fb47b666900f5d310715694d1b76393542c67a1fdfb87776f2b35403c2e06cfe4027b6630ba0c9dda63283d5645d114dff874bb007c66c7feef60a7e20ef160d85d4e69e29469d60a362f10bc9c5f3d1326233f041191406c945705535a3075cef507bd1ebb51a614cf2a2f6e970b97db81aff1f6f0bc56e80e06d619e86cbc66fc9d82437315b8cfac14fee8a35382fb0905a2248dfa447ec8aba7e739d3fbbc6c5f8c4e40dfa037637d15ec943d393ca80b711d8352560f3d7e071fc5e9b313195efb83e493a1959d2f934454ec097130c183d0a38a70caf41d8eb4b356f297736c1c79b68eeb9a3debec3b8f223300165f36952dd61774c0cd98ee7d5acf149c46f7aefcad769b7fcb26b89e244c400297277af88ab66468be068ba13495f28ea0c70a9c158b6adbd004393ea242ace658ccc5d3ad64fc6cb657dc11c274268531b48b57971d19fa4bd7fb6f99071549350848e826b64c994feb1e82042630c394a0bb203b3c0d3320f23c857d2daff06644611ae7ced5fe1a5a32ef2635961fa532a4ac1b077da198b71909cb4f80a9d2c3a8348d51f1d06f0219619d5771ab62e24aa2120a970d748009e9309c587fee0a93d624fd8a8ce4fb402a27222d5ed9dfbd40d2b00743a8a0af69fbefac691a64f0472d7fe9f92c23e7c304c242c6dd8606a369efb80eda60c60195c61273f89e5d5088dc63f49e0c0afd25b6183ec31f36cd6892d6dbfe3045d5fac725f346721dddc58aa35e1b5107abc646d1c30fc38960c1b679f3d94b0873b247cb8394078d2da506bdfcdf0ff62db7ecb58fcc08a3b05f71e427f80033784a4264853503cb7fef989d363e7fdbc4d20870074c69ab2e5e607554e815fcdcb49dd5612ea5da2518810bb0b6e502e6df42610d2366e5a80cbe6c9d5676a73df8950d3a10485234abf51d90c05b5a1464f46d4c40c533c8989e29a8081030a0a5b95fac6c96cbd249c19c1465f06cf9e31c4f4423b121b55cf5248a8a7a5709645cbd79a541398a123ccbfcb5cf682ca10f47d4b74d4d0d71cb7ba67c38701a083f2a45eaad17b9cbca57837acbe5f636813133441363c7279a4986ce496309e5461b51d489864365564655e03f17bb2d2bc4900bc88fce2af02dd7b0f79834b087a7615d76d8ddf1c71e6c329c11181360ddb13f318c36e90e3e69a815780f36e9569f7ae0072fe7a15074985a0dd4ef252d20524b30f04e160f9c1356c4d6d2a306050b3819f41ff9856b25be302b56f9dc01a153c1a74d1d37de4d7ee89f58f26959aeac6939312f0c2beef8e447997c0ffc57a90ad4ca322c160c24d22eaecfe3c55e0334022bbfa1cdd4f34adf5bfddf30593c31be59f7f0f7e2753242e5529fdef98a876fa731270c5a4c01b0dc080b4b300551bb65fb121e1fb98f678644886eb5376de450dac5fd52b2ae734f0c8243db78252ef6bbe18baa0333c74a12be8a37f23c777211596b0380860aaa50d7009f76e1712a15c3226ac083d6c3a6fee8d86c98a5a2e2ae327a4e1fbf34b34110a5f79829cb81ed608700267ac5c2c4bc6e8f3f7f18c7cba5bc96e90657381a10d3c5ca1cb4970d0ec2bcaecf6aaf106d0acfc8c62843741138b687367c7bfacb18c7ec0fc7fcf57673d512cbee1a7fad5ea481597668ef615c6dc65c470325c31e3e23187b0b3f88175c2b9e216a77f4a221da110c4aa4d8304a9a13c2ec565a7c1d2d7a21f67c1c551c4dd0f6da977f966985b1297050be7e2900d5596426dec61ac57fd2147992708ffddfd62723288d0296ca01f4aee0f27691e690595978f29737f37898e289b111c5658d711ab82d04d391aa5019abd179154e1bc0232c751105906cebaad4432dc805494178dd775db2638344140f246f1c87ccdbedca43a3b37448de6da521c4786cf085818f567f1b265abc4e627f5e6e1a4025ee4404e297419c49c6d987d9c2ead2ab2bf6cd9b36fd9dbf1b89b449ee438698aad271aae759e2b1c4fde682057a4e6a2f6ae5e0c6c58662ed07620b28e5792f192a7eb609f58714572a0fa426aa65e6c41531a84dffac6e09c0e8b08dff4b49b2637dd5c13216aaac692810b2b6767f048223d1758b026dfcce1f513ac479d39dee9e6f6957ca010c1e9bac8bdc975c4ca69f03cc71099b20721e82eb6444551726aa1b671c8d544cbaeb98f821627565a40111c478a30ad7fb14af574d0233001e2882a396158bbf65976b46ac0f00b7da9a4fc663ca9a928cfee7dce5f81ceef61bf735ee0170d1d3acd52e6a0507cbdd496274546e83a469989ca190583b255c198ed0d3c96f8a42ecf25d2e4192daa1ae6f9b2ed13b4decb2fbd11afb7275cfea35a61d51f1abaa84d26e6074f067e8d4f1593d01383bd91c46c59ac609d596fd691b96aa2f32d658cd7da343a10a620b6ecd21adacb72259d341ae6c60ed730905b044d6c8c887ab7a10f73e8b43abcf278f0dc01a809d72460720d6fbe43b0ce8b99ad3617de8b3dd922adf8f7c680e15fee65187d0c8046c78943da06481d19aaced6a28432d1dac5341b7e152ea8b3d4b404876987ce038637bf1b592461aefb20dc68b14554a7bd464376339f8aa2ce8c87c0def3a97ecab1802e3af18fc1c966869b7794a462320a882b035d88ecc3a8848c076cd8045976a2cca351681c16641194c9d360dd67b5dd26a4bd7c4f09260981792fe088ea9efcc3dc31801b6c4b0ab54deff4fea692b02c3d3abf6162c3182037dba96f4e5eeabdfc27e014b19123dc2e0b22af787de309b6c7b0005c703a259b72143e6ca2da266c10aa0c3275f14842d9789e3969eace81919ed0664c23cff53065ea72e6ae82a6bbf758dd649dd4e608ca7acdef7af5b9df424d2fb862ba5d43790b9263db873e2f8e7a70ae43677f6e3175bef45f579e0b838daf17ae8ea9d9c412be0cdc90dda19dd63031e63f068a8ea4d792d13f85888229c15a32e8681560f71c2cf5b8672228d2968355bf793467225c2cb989a3066282b69628146d9776c617313c10fb8058fca80c5910a50289f241f76ec4725b614d9284560500866ffe7096168bf95c87ae280a968d16bb554c66df37684509554af8f177ebc026d222fa1f85e5a4f0d8b0cca47b648b3b95befc01f2064a000610d3b211cc213ceba2702b343cbf7a39228bb676468b8a704d3700a542da885881d6304a6f63e420620ad79341a32b4761ce3af11a62556d55c69cf3cddd5778cf030eb2058dcdc51f2188c1e1cb3acf078f40aa3eedfd2f4462b00a204f65e21fb14e533f896f1cdfced093f838c5f22a32b94f302d4d9c8d1bc71d3373c75292fa4f0b8efeebb8490fa5c629a9b3a30a6a380c19c528ebcf983827d234953210bca3d4bea362986e8df8ed1008be891792ee9979a687309d19655121231ebc55b7a33a19145fcc55db5604974fdde3f506cf13d8fedd93a4ab2dc7abdbf80c6c4a8cc7c2cbb30581ca521cb5a90237e38521144d2aac6d3127104b7cdc5326199700214e4e221645c76e1f1fef5411e6262d3f30421eb93f167b1bb328eba1c982e74836c618c259e8dc769af2901d57f82291bdf8ab74993a4f2c78a42450de9c870dc06541729b3ec5d4b35e0cf912698c240a4fd7d9c9befcd40ee1977ea7bcd12b3906d715c047ba5b510b5e89a51aa20a1acde8c1f86ffb9f58efd3011cbf58f54941fa2ee6021275379a8c25d7421565c03ab20b25172269ebd8d9945284d5d786826b5908fa03b22086c0f57f12a20dc832d51011839f7f2bcb1c17d0a530975b7255c8bcd2ebacdc2af126c26e10cc3dee794e0bb3bdb18d9843295ccdd7a873d8d9b5a462236073fd12626c5568c008df38e1efe361f10888deafa0c208816010a8d140d2de0aa0ee44785ea073d162d05ef77bf0b692be389c950e95afc4cbeccab48ae4010194e7759c3bb385bc1b9424f6186c1552c058b8d9a7627ee62da2d889150c278ace47a98c552c1f07fcf59243003fcc2c8ee10e53189b6e162296f270dddbcbf9a4c5a804eceb817a18dd99028f64b8ab95e9253b2ac20006e72185ee0c309ca4f6a04f9026f21e2938a1563927ec923dc5b710ae56fc5fcb52f722b1173b3f7e60bad148ae592a0493afa7634d572711a7246dfa9ba092acd5b748ec4352386885025e5059784f6f84965ee5ee9ea2b89705f11d900d8417f9a1461b7af678a3af8274283d78356c57c49f42ac7aa956bfdc7c7da65185e25d1e52b3a7a4eaf311862b04f9600449389e1e1de6c1b573743ad3647b6c70d87dbe37fe39aaed8398437c142ae6537f07bdf1a3e18a38dc1b58d8570f9349226de7617d743e84c6c371ec716a434d31bc2c5569b6bbfebeb2bc2e2d0321e302207454852b1c8a34a01f49dc35e4669fbb2e2aeb3df8fc866dd1824108f073f64e9ef122670c5400e5eed8329b51f8ad667aaf6e8d5d65385624787c32174929a2c8d71885bece066ecc35ef6d51f94581469b90ac79d64f4baee9e8bf787dc6029ff105c40bfecc51d8e79e990f6c932b3179dca806ce1812efdc7b389ed85443adbb5388a30d59832d91b3f718e63d5716e50d98dd42366618b5091c180d9f8c0209cf67aeda7fb12a5f93da6ab073a1ad58bc4637352fcafd4021ede6f0a7ce7c001e9124b039f7d8997214d30bec63dd498d7a381377260bf6afe94ebd2021d6609fe75d52063b5e79c6f436dd34b40d225f086f70bbef8d74a39587f1dc352e580de08378ac5ba646f10331c50389f7009856a0c04ea1280c637955112183bb88b328472586f20b06a3b4c6a266fcdbddafd224156e778556750dee8e0eeaee82c5169d7d4c755ca59155962b69cd2c82223a9a062a21fcb748cc6dd61a531290cfde01e7a08dbbe9599d42d99ae15bd28312f05cf714512aaeea1d64c8902c85d020b64de27f53e73b6136092586f659987e4bd11aa6ca69fae8a466e51a8fd7dd6e3591819686ca4cd40d0820618522db8c0b410e121f01631c41f9e81d1542eddf6c615ad197822724632c2d5253bee792a53ab6a94d573e423da70cd81f5e2fa4c113378dbb9a973bb644a0acab79cd89a3e17ff60b278fa2917d216859a60b264da5b7c902974ed740956085a8de63f239a4b7562b5cf98b4493cca3abecd52bed8dd62c3f9cc89d13243b947f1f51edd338b63a39aa10b3f0b0b70b2d852617151140d34b00416368c137df612b5fc4d3834e81cfe4ce30231ed4a7ef3630c13201573a1ac463b7363ea2ec46ef15be915b9103970db07c4ef00c33aa08dbaa2ec832042b928fc3a3a9e1bb5cd788bd4019301fca103dd9177af917aaeea6cf62ae77a4b324933af821f4942b6d9beebaaad26ad26d43ef7ae99612960194c2b3e1e6939fdcec41b54ec24f6cf06ce185c179420fb544fe8b673993cdbf7d95bbb53ea39fa7edf0080a6d55dee166903c1fcec5f8cd2130242c229cb51626ce740598caae74dd35abe3f939f11df2c56d3bb2c161a8161067aff0d722a5089702a1042366f3f9c3330aece723e6259b10385eca83869015a11ed3d320de57990726cf4442806edff3444cf3bb4531f32e8c2a21e75194bd6c99db6684f0cad652b00d48fa98608b31cccf42d7f01a3190d218087f106c1fb836e75e67cfca400152e57312a10dd89f062aa15a0780cff8684e4e20dcaced90a99935d7db5b4f9af302063a20e18e0fe3528b396fe40aaa1106c6a47bf3600e1f07c9c7c5549c5f1e3d5f3a7a7c8512c36c197a78aaba6d16f4520a1964f09b544885fc7c9c6eefd887d32b6844b212a30cbd9bd416f7caf60d102f0709c7847c077d2d4e0a95c1c65ff667b3cf6931502bfb6a26805e7e3a7b27fd6660f5da380d013a7b0d5603544cd17032995b91ef2e956d7f510b895b10354e9712752bcd3951c072a646033ce1429e3784d94a2ba3416f38c6ef9da9ff2a362f94c462e15624aa4c017f6c4252c96a65fd752d27cef152dc4d922f7c11d1775a9060b4493463f972289d581c340abf57f1945342e891ca6d44df10d4626a3e18cf32bf49932b1560704c29ae7f585710663e712e036cdb380b61ca1331f36a7e9148142ea15432a38a419a984935ef91b090782ee9c4679b039542196c216f6240aff8f39f3dee33e1cbf0115ee32ad79e123cb8184d2201a7da1df04c6357320e781c09b4e6e59364998da943fc16b5b24eaa103fc0fe78f4567fafe9ec51faa5f34fcbd4a5250d542755367e18fbd814b079a85c17354c6ed75a372b85773449dcb80138aad0e15e4a34f1692a1413e5da37a19670191dc7a6a1b611bea7df229bbf6e22d01ab310b0f682396c2500d2f37c4e4bcabdf64531a7833a08f070ddf5d8f41e72cc09d90831c10b5a2cfdae4a1e6943ca8128e0de618206402d9855ba2a892a702f29a916f36a01a77b48c26650389ce7405b54b10dc2848b99c1e2fb9989ddc35c2f69341b3f050d7f60d19e2a80e3ef3f33950b8687a89de964f41aad76adfc942300e2f497bec7c796e8047f948254aade24f3fec40a4a281b3e48142ac6b7b717117ae42d7eb7f0ce83aec8c38a6fa074be565c8ea78fa7412ce679ebacd34d34ce6a96b8afb05720afaac839769b309c465efc29f5921ee5eb07542cdfb1e2b0ae0c4d91d397b578cbac39fc1b3bd430fc61e3166ef7de72665f802bdad98c652c30dd0e2a0dfa33bb0f070733746424ede961dfd75fe68a299eaa0a2a312b46825b4e603fb7afd60f3f7d14508a00617c345c25d53508e9f60ccb2e0b562806e9222e1ee44c09c8551de1d86d8c02c45e1c4a2b62c8aedc2b32e9666f6dec3d9aadd9480282e1e6c9ca4d219b6ff8b181cec76936699b1fcadecf33ac2993152fa4bfb73f7dacafb3393a30667069996eae84d0b6605585923acb0a2c43fbde7b7ea49d4848ddff2e70d02fc184ddb750b5ab8eb6d28e88e945489fe0fc4290901be8a2c8985f9006cbbfd487d00a67b272c30cf0e7924d92ed7f6927cc747c470a23624c17a0543c7b8478fde8514b073982ed35e1976e105e1213e84c90e5330ee2d72d10d7b0e19259669369b9427e673f4928c52f42604ea085c499e32bdc5d78fc3a989ec2a9f5d3223afcd0ed3d6a9d073302fb8493bf7894b76af9f0930f47e9cfc42e57adfedff7e7b3541d54067789b4158738aa3556c113d887a7b4a35498231973a5f6b2cf53c14b389916e1840b1792d8560089d37c7640d273c4f4207ae37fe14176b1d0dec5c3969ccfabde0e761cc16527fc08ae7444bddeae4ad2c251bf9001ba9729a3858dadb9a00ec82940f65aa2e8848469f973e7ce2efff19a485b665d4c2a9aee7049208f64663409c92789dab785bb788ac8153cab712573edcabd27f416fd720464761b5a686bc7e17b6685ba92e8075b77e5cd03e2568e227619b88d18513c280b261325db42f617224cc2a0e63929c3352f0dae821f8ec46913261256f805af65ab73d9d25e80fbb61ecb04f66a0952be6f43c38a4ad21e1fd8701287c991096fb4fd4c34a983db0894e2975f7614d34289f2c02a53596c97b7fa7458c88fa7dd0d33290dbf8152aff0c30a9c261c7fff013426b470bc5b20a7ea3a646a408483febe7b92b8f07dd65bd03b765a944a8fe15c65750c85cf1ca1a9dc9c1141892fff9dbd557d448c9dbb349c168fdf2b2922254d1b7f9dd46e57fda6cd618359aba7ada6c53b8b5ed132273f20c532b559c2a8b04427ab7822d720d1014017544f1a3e62ece67f78a35e97b3f53e4ce50ab148c46dfaef49219f407580df8d0346e122c0fb14567242392aadce95e17e4860e98c2f7fca7fb3725d62519823b2e37fe91d69d250f82da801cce8fc15663512d4c83906a311b5beaa4c88c9e415fcea7c2a58b6c3d854ad43321ffbbafbbc02eda090ee109a3011cd0deb116a77235028d268916ed985e24d512449fc70c3792e86bedf3ffb73333e6c4c2bd55c9f69b6ea384e8b7270cf898e8b9ec7f0708fa0ce1fc0968097e7869124581cdfc88dbdd1ec9896693d88da2ce7f6eba8afa54601e15481dffb803033b2aaf78b15c18b028028cc142bdc842e83762a3c145e118ff9443a4c368850fd2e2b5df879d476bd7e6d77d986c2765b87dfc859bca0583a8f13b7a304ee5763c2e4e786a9586ccc8e4178cec0965404d12ebd84bb604314834b4815568d0da382797ea1d2cc64fa3b7f2b29530709a95d0b48b10eea22b585ef20dee00f668b7b0045a376c09e61c517ef7ab9b84943114a574e77a287af317ece81890efc3e0898478c69173297991e81d230e88e0bd677b55eaae14575ec4063797f7b5b7df864c82c7c02d7275bcc8f12e4333ddf9ec6968564ec13015275b6927502ff76efb49b789c453c0d7a07905319f32f8dd1f641b7f8e1cd1415d8cde606f02fb128daf7d9683cb52ee13ae7923fbe568aadf4b5dcd9046382a7f8c7aeca189b43b82a81a106d0b9ee27f2a458715cd3ed736a746e7ac8017d9133ab1953e016e12a06a4d7841810defb5187d8080b0632c43c14907c44f8c5fbcb3814c55e610f8c7208e10616030f4208b81b0497d6e482c6b3abe3c42a9c6cb78bcbd3a384bd70e6db610648fd9efe5b473e58fd6791cae960f3369917fcc84fc5c6c5f803bdde5ce4d6032c6cb778d2e8bb3912f007e33e69a8e1ceb2f58dc3240b598a115a56675407446948079d3f8787d9689921d671360c16acaf872873efe552dcc03fe6a018ad5123e33de1d338c6da512daa89bb20750dbc61acacb99ebb2a3829e16588c2ea01269b7f825a711ff84a73316f2faa1b107cb41ace7088522cbe6082b465cb92c465379b8abfc2ffda951871d0ecea8efd49e9567ac8c236581e2d732ecb5043a2185eb6f5ac35363fd328dd53c4c94b08c9edf61cd2790d5d72ac53497332eaadce5b5b8085dda8b0a196acb1a76edc1b2741310545e6437f8832371259e65d49c5fa4bca1f56e4fd5adbfa098fff1b78faf3fa5fa9edc38057bff3ef1f304afb69d2403d38f7ece697cdce780e5ae779dd5cdd941ae3c34eddcb710eec420df61abf95926faa7ca72bdeb38513e3727ebaadf6b2453aaa351f180f7f8237b33e47e88ff88ff3ad7f575e9dcbbd1b929643e6cf8278340c567c06b7a2d5dcd9fdaee54ae63ced5595036aa2362445202477107ad6cb1449d31f1932454496a458e0b869074fdd6ed5b259f2bf14727bf3916858211e50666279125fa4b73e187aaf4610570c610c4e09bba44f321f15a5c27f269d3fcee32b8adf97698324c545d9629db88305ee8ac6af6fb314cd8f6701a2f5edb6b5a1ca5061b43cb72da48ad821f06ba34d97c3d4b5720df71ea73c415fa106c6a361a4836767dbf9ebd88920a5e4779f12e605ef8b7fdecc618d97eb0e35ec4063486ad5fe73c53f8a55d9b82c563a27e71898db6a97118f7fe83bf04c6c77ccfa51e3231c3b370b9a3bef6c774bdc007ae346d5aa6680de2340edc968620376dc9285ae51b93acfff2c7f23189c206f7cfa82331217af23b228aed3e18b50de44692ead27d3259c1904b35ef22147c295429c43af10ba9052e06be52ca64aa10b1dfe3bc9b593d1f676688fae097cb9cb6a8629fad6310e3bdef3df119ddab7e8270c46126ce5d5d177e93539515c9df9cdf5ac9d3eb2580e7db4361d0202386210908e272dfed623fe4c0a457cde8e9d76b789fc2a45e27607b07feed4fec46dafa41b388a8eb7b9c979c79398fb42498be12795be187c1c2ecd348d86aeb4723e54b2e2eca34a24163eb74462e64b25598c3ea9f4c4800fe3ded2ee359afd1627d13ce2f4ab969af5ae0a96e1ebc4faa8bf25b87116629e9ffda19214639f503a62fcf16514131f2c65b1e783252b8e1f5922b1fc792514f3be545262f089a527061f57c6626a3e202da11d17ae982f2d69100bae7c7b1480d838c7e3ee3171c35eb6faaa6a51726322adc7ffab91643f894271ef89436918b9fcd70ef3cf9ea1bc9c5ed60477b55e9dbc4df2cd83beec939391aeda6af0a7783ac9b3a5f4e5431b7effd1e7c7d83e3f6e7e61c86d31e2e74cf35cb4b2e081e14dbcbbf36d5cba626249c4039ef2499ec22b4faf79647186cfc5dafaf93cfebaa5b61fde7d77cb217133c72994ae8aa1a656e907157b88bc41e31f914e76b894b55c39ec2f0ef6e71b170f20d505ff92f9f6fd8ecb4fb9f6ea1d6aafbf706e1cea7dc381fabb780e2f7ae928435c13f6b01b6e70b717a245fb0e00b76bdf2da63da5904366fe33ba85fe2f29cb60c90f18bba8add403da00d5418d3f90e5d0b20f98dd189cfb78cf965204fffe94a10a3c7ec0c9aa34176ebeb854cbb3fc64c0d28613aa22f4509dbb486102d767ffe793511cdb334937364b22875874f40ec78ae9197085000c3f63e167fc12104536077634c4ac03f90c8936865c752343404014952f18deca90c0ee144977b097625614fef3088e7d83b3875258b5c0430062efccddc2a738def73dbbac799bb895be3ccefabac748b241fd256fd5971f26d1f07a998a66146e9bf2cb45950f8825d2a8c7d11294751fb420ec8689509f2c17650adcff44ed7366c040c04d9a5443fdbb1187994eeac9e5c0d90b4362218b394170a0c406ac103485d07b2713c1189c771218a28919301c047506996cc069c8b529f4399cc0d380e25e71fbb1cab01f0c506e9c4bbcdba29c4071ebd6911caf7cf0bcd5309e1c1730a575ea064737659f768d3e8a3665e5a0fa5b33f2626c0e14093b2aa73d0d19099bc5f1deeae91628c2f772313f844648590ad643bf5225c89d22bcda8e8ddc517b5514abf8dfe8f19afb92b4c1594bd15d6726974326a2ca097c7ff56794258afcdd79d04ad12676fca33a50579106efab61bc0304fe66b37bfaef6d2714f57e9be04bdec63945fcc179c9442b4df06ff440b6aa9a95a65a7035ce0f3b84a7589da1e6da36ce900e8bd5365bba3332ae56d416b422ee2b92ab8603c89753ad81dd376e96e5988fd974b3752dbe426f7b0029b2296fd196be928e433016f453e4457f0c390189c74532762ca68c71580dd40a8cab054ea4ff22c8e46a6a75a5453093d9bc76aa8683b89a39ac895130a0625328b4bfb65b8e8f8d648673b0a260ec61bf5d81216fb55433b9bdd2617097d94b14b511cd025c4f78d13a0204f38c329a2eed8fde4ebf0206bc201bfb44b8acbd40579465c1f2760b726854362421c5e49689e0681544442cc8866ffd22b13c7ecf2d0d53fcf2e6cf9c5b602d4c23e839a3d5e057b47b2c9619162daadc9f7e834f2bda17ec2a6fcd1ce404ffa4be24c740a50f047f48783eb3ac2a46b8a8e726dbdf6b45f1cf9f21cd6e6ecf089115ff94f07ba832e637235587d1661562cd0cad4333c0b8632771fe7e3b1374e6ac9d0bb767bc44d09199e29c0796e3b45b48fac7f4304324deca62399c4e774e61b0ac5bd92b2d14e3bc036287cfe9a4bc70fff4e8701aee337d4b3621fab0df98d6859bf1011eb19b7ca265db5ff62657f807bfef38ba2c4450785e7fe881ae3d6772807205a8c48cfb217150001839ecc02c641f137166bae76c532f9d512876a162f9ffbd44dd6e3ae78adcb1e25b680a45687a0e7b690eeb3b51bd096029028ce18e470fa3158622a999e22c9c039739522e668e13a13d76993485c257c7592c3b68bfa24f6c2678463144abb5fb36dd26ec8bc2d0ee4d272616ed6d0467b39372b9e8b979f8868cb7ceb981e07e76eabae1e8fddddadf2f1ccfbd7aaac58e4b7082d1d23206aecd635f37749fe173d56027540af2ba0cb23237a340c14c9c2081138b21443b480c5a4f673e461f9283a291941a7e035e921659999b23e7b35ea84908c8f9e6f248ef8060ca9655f77fb4f2158b869d851695b99167878efbc4f32091c800fc8a39c3f6f2d0dc6e46b62a199508689fa6683e788b39c3ee1359099de272ec0a34b8ca8eb07dba99e4d6e350f06964603e42addd705b1f3b4b7206d391793477cf2927bb9a44dfc0d07d6a2fefa389fbe730540ac9f28b155899150c4d1da6c49fee7447c825747181f6acf2f81977ac62cbcc7319453b4f7531b8115c8bf32cb2027355cc66b68acdc23bd51fd616242d0657d28e6028f76f57d5b78317771c5b8bc57e37c7d468ab69e30daacaa0e7128bdcb627eaf8fc6c9d923c22975e5e42645732fc61f20e8fcbbe236633a306ce217d3810259c5321244f3d0077ddf2a8d859527e8b0e8bf8815d9830c5f85ea190e5c02d743c2efd9db43078ae1eb1b6905bcdf9ae9490051c43ffe20f5e6841ece8756f8dd0634b03e656ad5b3358949144b9c0c493112497735a44c17227e0c22213c373a6c87b078b93a9fee76bc8d04898675d5c58c98aea0b7095679d9a8b1c34a25c31f9b9952b0706b54858eb08824a5a9f22c996cea19ef909e6e4e57441a5a05a5de9fe43ef38dcdd4a5963657fedbddac32803391b052871bea1965934b87b9d4c356462a28e38226fde285d6f803c5fc4119884663ddc343139b57395c7929ab4332e13a48e03b2306a56149d768f9a22426387b1e1e2e0a9af225a202beb31df1cbc3363fb8de05f386e9265316bdaa5708984a28158ae2a88674ac2fd0b232d890842c6332d04f5e2ae48756fdd424be5584d59ea65803cde0bb146d48d872c192494919cb21f991d20380b13f2eccda16c221470dd966972638a8b5ee5d89afde86c950827e8164ae8e6fb23c6f2724a91e771563820deafea72e38e11544cb67c8311362cc0d8b996b12c7a4a54223c4c51414f2f031239a4932ed46d745be9b2182bf19db6dc1d16fa42fe652d02259ae8b22de8d5b0e183d75dc727404a3d1e00246d5ee69006d3792a7144012c2140f6258e4cfb768007351ccf4c5ef63c60cc1385afa10efd21eefe77f5fa34cc309009144702f1e3f32539fa78f17485f4c0f9e4556c2889d62c1c3e2a1d650d7e712212147611d779de9812ab4c379b4843eaf68101b4de1da1f4a160ec4fdb34799f66a2067d8abcfbec2e5dde04fbcda46f1178f88b1849520ebb1b96a7061d657a484c87f25aa86a9d78743b162fa2cfcf29c26b382da6c2dd8abf841341189541ee84a5f19065dfde3201ea126e14c42d08b35cd1ddd39992141aa702f60f72641156cabaf5be88458cf4f0f1ed93c288c26c95f4bd24ac735bbea2d564a6263402604672b6914b987fe09d3ca038d177d34cb37d89619f442c5e0bcf85d9f1a6ad04814fb0a0f04ec3f564c7e27aec4d112dcd6f87d7592088e70aed75998e880d91393826cd64d0a4bf332dc98cac2ad86f9ad8031a4bc6b7aade3490a2203b141509234de1ec51a4c5bfd5a11c7f32cd1cd675196e3f6c4ffb93eb3ad7800bb4ea29f7d30ca4a9ac919693a130e098080972d39a2815c4ac5a26105f3330cd0991e366e62143e39f3657cbc261e469513fd188199b0c7b367a7244f757614c3bfad1a5d2959de2cf1ac1534a283f90b1421a95a01d521ca79c60c4c9e30789af9261ad64073cd37ffa3127d7016b5b06beb8558497fb476e8afbfe7c00fce266cad19ed665e80b70cf07988c170ced62afae0520be408ba37934c17cc6dc1f8601bde01343f424cc2b8e67d1c8c64ab34644a0942785234a70cb231c5c889cfd9b4fd93e74d3fa7c6f2c5a4c948f8faba708b7c345d6f604f9eb6b9b7c6a31d44562f715659e1c5f262f4151d1d2f578018a9aba504e7cca287ae74a5b42f74be7d1c5cf62418b4866e682a6bd4ff35662eac8743cc1633c4b37684561d73cf9233105419c8242287a1a18585d2779b359c73cb0fcdc99f6ba61c52a9661d8a8043c52f8c01c7212216fa87f3c4ef444ee501469cf4d27b9db353160a473a38108b35b8355dc79346e958ad7812415d8fb6b9f7903e6f456b9e03821518ee35278b42c05a339d4739c08e7d2145a1ebdbf8d30a1536bb59fce852dd0c2f18d45bbc3d47bda5c8645dcd2664019eff72ab82ba5994181b3cb288123f64d2eeca00526d24d383d49a935317cccb2f1841df293af607cbc938c91aac24f9625d3c31ebb45704cda002e2fda08617ef917d480d78d57a90995788aa9aee9506a4df6a0c040970e28fb0c783998516db3495acdcb58c4003b1b634a163f7a580ab3d9b680c4bfe57e7da90a333e12b7b233a20c4922619602e1fd505fa347865e76d0345e3cc5c1a48ab15a5d2baa0c3250246e7f78f6b3c00f5e3cf07079fab89f38e566986ebeed05bbbcf5eea6cc169b288d44baa754b9aef2f12ee6b07dbe90a968d0f08ffa82fd1ea7ebc3affdf972b6e7c0163a1c9d6601733a1ab46ff07b18582f20baa5110aa472b74dea475c5e4a0b528d9952f8d2b95ac421633c10688e820e0b2008c47e334900452c6c61b0b6bdda82c6a1ea900082f2993ab999e4c5d3798e3204c19de8dd2a1a53f9d721df43f8bc8d736d48086a1a34e7ebf16dec63ba52ecabbbcd2025a3b8945b8a59a9584412607e206b034ffb4f5e337d3565e9ac14f1520963ae6ff504684165b29dae5993bafc24c3dadf40d951fa2d2d6d09b7b47d0756e91067c43b96049b682d493f2f8d4392fb2cde853afdd86226b0d0c9a32a89f50152415c9c024213f0f7453172716a4bf74f217eb960ab6ed0a25a4a534ebbad99699445eb7712212b5c282178780280ea4d1b0bc05973cfd6f3f1dc76636f432a3a8b9e779b0ea8239e2614ee04b7e47914945a72b12ea0c7caa7938d4d28ce88ac860330993d50d27e44e25a514f36783ff0509de6c036b3cc09b8469a87d536e19c608a01c801e16756ab05efeba432db1d8916c6b878a66e7e37d8c67977e4f7752ae7828054ce456da99c7bcc1c146d1da1a2e77dc7918fcf263e46dc65147f98cc2925e8bf519e4a4ccfa1ba8dd52f6e81bd027cc84c41d840b50b6b07a13728753f73161808890c7a10844e4f18481a1ac719c0ce232b492c8dfaffbf08cac17c42b3459435281d1b74a16826a6e89dc4b084da520fe29040640a0ea8339c54cef5c4d6fb42647b9918cfcafad0975bb79615ddf833986b1900e527f28844c748c128f10c125b8e5d3d38ec64c885623eb1370e8b1d0bceaf08998df02b518b2cce0a62d02d6d07d39cf488ca6a9b66ce6ea7828eb1ab7b01c50ea5a0aaa3459987f8e8a55ce3f70b4209c875d72b03780987f9212ee3163f045a247577b617c3d7992c31ba0907daa2992d4e4b06412adaa09cef8435b37a4da9b8ff8d6d4fcdcf1cab5245210592af7075c36bb1fc9c1d06df0d36388c9e6c8a92cdbc0786b9ce666bab298e6b0085943e39ad5d13fac9fe4546b898ba2bc454c7d28665ec0271b509d1b85145e6714b473df19b093c04cc6b64b12188280109627564206db1302583f04e22b87a9615069b17972f341b55fac9eac1d508e181501cf3d91c0e51bebe83d37f13785554d9b192414a26d288f73c2a1329d9dc392773a5c44778047c2edb90d38de3c2bcc96b17e4319ea443ad857c5767dd760c98c9ae8a6db65c7286402472998e1391c58f57600c2b947cfab0b16b0fb94055ab941eb7156ef74f884cd0f0e25ee20663d22026e1f46d4d889ac990bcedcc7d768112d2b1a5b625ec0d4b277c3be3d9bccb2d4bad8f3dafcd417e7b117aa44b97d173397ebc1b6d6007d3577c0a8d1b8fd61a7c3dbe0b1b8c344d3eb495a213e2249c254f641aca6a2ffecd1f85047f21cf03e19d7c24e9ac7a12fcb7d0d33c52e8e6bd06f24f527c7a240708aa478186c2ee9039dce3a479aca4e03464a82b177a803e8256d6ced724caf5cad266e2505c13a5644798db2e83ac8cd0035a4ed897261085499e0dc91ac74c9ccd37cd86e714dd426159d74b5f1cd295e58248d6c861e2fc22af92c65915557f112236b132ef6ecc19266f230826f0a99c39f39dee0914348c903464aa8ba53cda3510f7cfccf90a7400371b16073361af5d6ac652c924c312f41bf4f75823c696f7ea1179a9db3e8b85d9994486cecff6d3eb71ee5cd8ce87b50862696f66424ee16748ebcc84f2ea4b88aebdcf90bc5f14e45aaf8a08f0010862f88cdcff26846d0af9ddbe0e99e50b3fe64bb785a5cb36acea7561e60d3df596702a76431beb54115936a739e8f664a709269fe30f3a6484cbf99ed281a4abd4af65e0aa9dd7dcbbec3c1bd5dc9fd56cc90218c4fa64498a922de9d1023ad66ca34d660316ff9fe1890ceaa0e56bce95da156d3942c816713fe253406ee6ec95d64c907aff21b536c5a5bd4041b18017d8cf422bce7221857448f3adb8e7624d39109a82ba3b50173d2060eab1d3b7399058604739c5f87cc74fb22c2ae2ece96f951d7cc1f02649b2b97dbdcd741358cc66ed13f8b503a4b9744636d5a0245fbc0ebdc29eb35d28b64b414b1f26aa353463d52d09b35b39782569c24dcc84ee2a06bff08986afd4addccbfa897dadd5511c24fd10f959d4da2b3ed7cab7a17b0e3d21876a87868fc3b0101541d6d6c4ba0a1cfc546cf2ccdccc979b7019c334b69fd33c625658f8d61a69eeb5a759c371b43aaf26935313e534799780ee9c78a18f6280c5015da8637eb0fad51cb60363cd563f314a1ac391a9275418529efff52e9d51528d046cce4c5aca4349814a2cbf9c62bad44f1ed1953a82bf38420e7d339cd91682be55fcf9a8dd9beea17b62bfdbe0bd3290d8a56b18de3956c607420405dc426952b4be28f05ba49840910c8730ff7118931f39e7dd015270538fa2ded29790294e2da7304a18b1218e0255b7c9feb20745760cf81dc33c81a114f2bd455d800cdd4f2a1e23e83fcfeb88e213d5ad0fce48ea4e0be8e4d6ad33646679dcdf8628583fce0c6f6002f6b207edbabbb3b2d2ec21df7939074928eeb3b4ad18c0afc27b8a0dee17b6fa73f4649c3ee04b6d521fc4c6479c14ea2a195b2a7339432532040347084182852ce08a6ce20cffd88d2edcaaf245f49747e50ed577fbbab18909990f921b9e648153a7c8bdca3822a0e6c47d612d9b7fb368aabfd929a44c709456a108c2cf29e8636735ffb43cc112140f01d303666a4fbe08f6a9ff9d086e17046f966441cc0d4d0e438c1b97adf4ff0c1ef636acfe03ebaa5dd42b7a13fe786de981f4f41194c181ae21b74fbb7cfcedc3dac6ff3ad78c4386c9015628c434a97b0f3a09747589dab7dc9c2b779b67b4251ea4ed09abebad837d8fdce5e404eeff66eced7f67380bd7e3ef4ecd2aaec7b0c19930d7ae620037a162d6fb463c9af1ec638a94a2cad86ac09a38b441e5b0f841ed3629ce1c5fc11cb700503d9bf886753f8472c75da62d0a26e89ade612a228cf16bcf9e30a229efcd7c00e858340600ea50755598b3a09c8d272c0d883337dc3bf9fc66368572ba4a904383ee868385681c648bba3dbd437319e63441c370cd630da77b6062115c3087d008accf1d36921d33c6f921587b0a51738ac0a0402960c4630dadcacee36a51cb609c6c8e6e2eaaa39eead8baf398a29315066e7830fb0f72ec021d27c0f420983720183aba0e7e21464b78bc70afd1318cca840121bdaea61d4636d6d01781497c08769cd7b0c22ec77cc41708a4a83453e52365f924ff77c7a0c550207e64112b29ecd919abe0cec09145a5c4536709aa3bc046210f96b847b73f8b8bdcc183e46c48a60124c1e54173d6200d928cbf1e7ee1c6cdbb93cabdeb59d7144a08433b31d59efdd22eb6f8f9cfe6219cec6d0fde94f266ed616d3487e80a55865f2cade806dacfeb55f6a1e355edb5ebe1519d6b6f1129c56243209238a1c70eb591b90e21fbaa53f7c5873390395deb13088788f7f69196a03f16756d154f7581b1c1a52a5895d35c0bda229b640b323799991767cb4a1b1d65eda0ad3939fa45adf05f38d0e4203ed16a5594bf7ae56960f602f3830d8a0f3ce87031db113becbfdb49c4f5386d552965230e1a55c4b135ea6f012f041d2a603f931abacb422ec804a34d3e67a395403de013104da42eb3eb997080e9f99cd9c8f62d225cf42b05eb308f927cf881320d06eddc90333a37576bb76fb98e4c376bdf506ad0796d697cd444f44c3c56228542842695c5089e561a2d35e8c8961aeed104b17ef0cd9210121ad5a770a9e15170a6ae3512cbf69de615ac7028a80bd6b0d39eb6958edacefb53c23d2bf30bf8bd75eb0ceb57683a6b9eaca934c2b4798ec50db43d3a2d7516d08f0a3833d792934d211485cd2df30537ecee5d033e0bcef495722b42d4bafc26b8485c4ee6fd0e8ffc826f776197e0f5db510f5fe02e00987baaa58302b8880266ab211b0811200a4adcd59811ecdbca6199e726e564b3e4c890e939dbcb10029e2cccb7091a42eeb23571c2bed09faaac575ba6aac1c87bd750ddbb8850c3508ed7e710c0d176ce0fe3680abd3c8b57d80dd93949d80b75ad5e6873645a7b40c3298c63afdd888ac872c822ec154a6050da01636832e52f7ac78d39046ac888cd8913e49081914932498350e17b0012d894e56053405dbea0c4c72b4248ed4b1ec5b39d09a26c72a9b487b209b752fe66d957a30b00fe30b7f2317d081f920ffd43f8ca45e563f4517c201ff00ff0818b980fe8c3f8887cec1f5054fe381fa20fe1538ae41fc547fc2d45a50ff0418af00f28421c16c955265bf706f0ff0d2c31f70cf8ed29c94f63b19ba561aa582289fe261058ee010c70f6a7343919a1005bdaf82421830d154c617c16b9e1832efc30e31d797787ca7737660248e6bcfa889cac6659cf316e79eb639f85586921e1bb66bc8c0206ccf2284c2ee7c76dd75c10b36d846f50984b3ce5302d7a9c9436c10d7326adb0f3c470159597180aa4e553e0430f54ab9a76a9b752438302c5f01e1b26f814889e2eda800d2db3e3fc20a4b6c26694e168088aa616f01a2798ea21d8a55f2f8a2e8743d67684a0732f92a7971e03dd713fce566f060ddbc551b85810b20698fe400d94a45421a9857df735792902c1ee860ec5026e840e8f25dc30dd890db9071d125b770fba3856714b7421b6e2cee9436cd94de8a058e086d0e9319c591a35c9f0f019a9b4b03762774af9df50b2d098ec37dc9beef8d10c8d6f853bd5b27ee64acb4d67215bf37c8e0907de56f374f392ee2dafbd2e0e39652139b6239ae1edcc1b08a3c76bbf8fd989bd639580da10158d7c1cfaee847d882ef3316e12ec2e3deb2ddff0892ccca5fb0afb13f92b06205430fdb6f8c882851a0a1e744fe3e469ced565514ebcd6188d2ae384b7cd9e4d4da317449826f6391239c32c21549c3b7e9d7a41cd5cc3036068c9c51e04713bee0d3813b06c3cd67099233684a3ef6ec885500db6042575f9a5727d42d56320b27e611eeef04b58adaa28a6a081486e34f48e1a9639ac1ad71980e8ddb285575258f801e16ec7b8cdc75c2a0fdf594e4eb3a5dceb9f15e1a09597febee5b7aae504212bb7ea4c2e7c0a180a30884a67c2b17c033af72cc8a33b69ca7991a60b0b3dc49b5b8b7d02f04d5d079450bfda52fc3c2be446a532db7c6ba428491c764857f094cf95a4553e96f945926fd0eb723dae6c8b0ef3173055bb61a500c748f0c93b316617aefcf702b8809bacfec86b79f09bb997bebcbb28fab4299ea94e02193dae915575f87c5a3302d6896656e3548da5c4f6d8098ff4e76d57dd14421e11ec384d7e36f8fdcbec1354f72c084659830c2c50d15c14f473620c99b9b8865cd20f1550521e04d62b2c29d022b719df4d2fd133b7641fc8d725304fcd172a14afacd3f3ea71f82aa70d30c7e8bbcfcb52913136149903e64c3d369a46b44b0cf9c23d57a88885124951157c70c686c02ac50b485210deab2affb3d884681f8a340b712cfb27b52f2bb5f43fc06ff9417a0baf0d3f6fe67d99dc255535407cf087ccc97b81bc17fce03d689c2079aed43a06e2b2f21136b0a978308e9dbebbef8ebd79a96d0aca68ed6aba5142a70fd65b0c49e6420469bce5957ea6e5e1a753eddfaa67b7eeac4694875570926661187bb5fec4c2894eaac96a0d00d29be73d0f179258583461d3e2d51005ccd2e83a68a8e715af34d13230b8a4cd77ab05892a0773520395c9e3e5524a365a79c8ee4d7ebcab434a330b15d70131957dc9b94d5ca026042f07a9e670ddda3c92354d66f11214375d31fa2de9bc3ccd02870c88dc37598270d15f90137b2afac1c8441151ea8fb435cc47a0b979708c9c1525d50fad956a5e180cb1c00ac6887b89e12356159c345b94e977eecfc45f277135a36eebe58596304187bbb181362c02590b60ce02a0075ddec491795dc6e789529fd4ff50b7b64cacc8f1c4f2d7b78e418f65a024e5e504fdbb36fd26b4d6fad585689d0f421e30b630a0b2f83f1b27d444096c2204aeea05a112481020b3366d90da7cb777a7fe511378c23f88451bfcf26aabf4b6dc1ccab6b5747747ed46922b5b053b2c1304c14321340a5f911871657777f7d2e09b355701bb08cc2c9d8fffbf0327183a12a50faf932b1b22b364054cea0a6be815dbbba56348055a53bd5e78b754aa212e9f0060a78ad6aae87490c347cbb9638e9c3772a09820ff6b860ad041490e8ebc6133c3160b30c0942d607186336f1091e300427c308315a104b06c00c48c192000c1023850821042063f8e0eb9008fd7046488220b2e299cc0822132ac0451218b46c48e0c15ce941d5a6c8d0c3b17747295b8c44d0c7614f1a6cc073e688921093451dc6840a58118760392d4a80089126220a1cb165d08493081211308c290915502070c6e34a0c51b6d80606110420a0f49771c6902c30a5658c132810e716008cac10e27d244392d20922407bcd8c46a5980195708b921841fb02c20879d447478a092c702badce1c8144282020ba82011acc1252b28200d223940b14004146648e345a5301c40f56916d0831a33968b561a2c0028818611c4f890c6870d275dcd16aea540241c0da049b365a90a219e28a1016fa82cbd20d042c2156cded21443229801166d5862c0022b74948993a394070cd395820290949a2062872fb2705428216121f4c111256428410bbcd1a0878d4cd07852748254c4893268de0829d1c62332b841438496604d1ab00334a79da31136b9c185c6833bcef440c21a326728012484287c8861006720b006212ea4c9679ce10109910bbc3122e1ccd1970cc6b0a9e2c319202b3270a1c5933e628dec7462880472481203e30e4f8cd0485123464315ef40035648b114a4d883902e6d1c880d808b203364109802abc0035e40363ed9302d50a8a1110924e1042c96871d60606926800dc55e1024ce1b09600e4072c11162aa6040d6c79843b458f2022583a210313680038647a65a220d28afa31a326a88c383853375643a463f64309c1c78d591c2021cd1e469f1428215070f4554c2c34b4380012888e2ecf11ac19317134f48f2e5854b3c61830014fc10c80b6d4039481a3f0e79010831cce8648815925e18d30012de9004615e38c0151cacd104f1714192b598904530e22ae3830e06d04616472e1c801cb9b266072257970ac0e011c3bdc345411b68d0f0a6cc0c2d386b8ea86345003a5a6e62c02f04fd5069a5d152c2887243112d6c811008496bceb47a0c29e20268c420028b0250348841934c088b8a358a20b1490d33b05e48c10b219c2029c12a218b0ce208af20585134f0820d356c3cb092001840cc12ec70add61c11e08c061c92c8aa63a1451c56b838b2821a841162223b80aa139d030881091955058764e48437327943d50021cc58c2c22101550b60b4d006100fd8a042401b325007a8cc244a74e650408b8390f4001706e96486285924ed0066860793ce48fa8226894a3c08e3920cc0c11a0ca822122d2e2ce2488ecde187065cf8021239429d428a0b33200294658528990b453850a0479aa4205c9020d5859537611e481572d4038acd953e5259001102411d4292a4608a4ce0871f9a4cea04320ad9620ba336a906d6404ac3450a5ea0f840ca619334f8208382c2004e684fae644125bd1cb513210850d3112922c851841fa89c1df41023054d04487404200349ac087204e988171c40e6110c7840ca9500d1e60029ec812482193120c27385013dce264834e24213b6b3a109b9c0196e32e93fb8f0099c530d4174313bd0218603ec78a06fa0471f9804e10095bf80011e404606a5fc6450f00378992cf237a080434f25703cf2467fe861749449f0137011fb832808227e481a9714421fa0bccd112b74340a09c397b0045edc174afc4a258251c2c61bbc478479c907a827362085841963e5044ff6145f28616102096e57104424b5c9618d2d3483178c4814776c1e78456d64112a341e967c39410284836662830c3e41a4eda11f0c4494c0a161a15f0b38a4c1a3e9903779a3c7255fc807f21b4244220451a68f3cc49b9986093128e532190fa63936a92477c0c61e1cb43869c3cc24f30c0e2b20a163268d0dc40879204913667430dac2a40302bc30e3858a303d3ce1a5123318f02106cf3186054e8a08424812004e929cbe28002290087d8180930c3e4831410b8ebc4e595c362cc141838553043f4c539723da2880902c6008a0889819148045942c94caf8a14301301e302398a1401f0a3801ca95a02d3068a10000b059453124ffb4b0070d626c1815c45a60d3b718a1852edc68c1052a85643102ceaa05e9c99628837411d3429bc395870ad952193908a9a0911f2f2c943162862c670c5100863219b231c28e225726041ce406875cb18585383b65161103880a0b6bac49e18b1b8920c1820f2310955142033eb01046cd9a224828410a1636901203d1184e6c20f3c804340f0b233841668c015850610892818c0d68b264e2308064b6f460852514bce142a600513ce286046c4c58c19045d2486541011d2b7431448200ce04c1c50a4a92032a307949b2025199461c19c183355608c0263e4a5986e6983fde4ce00d3612843152e86188a5e18333c6b4ca4855d2ac4460cccd1a08d166d218285bc0c8620b9088c1a3ca0796b0e1850f6294e844009034b1482162b81c590705b0000d621c1496901141500fa3c91a34562043884a9808a4e05078a3084fc20c21a58327f2e899230c0b2750a1e306a39f301cd0e10995f94700c048e29a838710810960ce50440b3d943290030c03bc4012889909a20093000a5042802fb02c02e60222325043c60bd95122814cc0caa49232470e28e2828322da88e128062b5d44a1c313a62314503d8471b57070f46306005a80c395c11741e2c4f41f5fec2f5660d2c2225c94e1f2251ba100161013c3035faa74e1431793642ebe48e9410a08786014e4458f2818f932fec0c0cb13490200c0072bc0e125b5c16b654617d78bb4008807982481c34b238003738c5943958038d020448b35669a04148104056124086f126046a9023e6d80592500041672c4e001b3802e960c60094ca05cd15dd418640044d0262ce8a28613481210c926a72e6090e08002082061862e1ae0310cc901024a7071240a08e0c1c7272c7011c3023aacf05182005c6a68d3c7230190c0878b162d3d44505446185c08204514b13d8a18c2c8900b6ab84410222b8cb6d024e58311f70123342633fa10040e2a46567a78a3059c27b811045bc0b00825f1c4163fd2f840026fd250b0258a4ece08c0dd04852d2cedc6214160f2da62b9ec30624226966cd979a574e879082d776010a3c2b5c6022d49c051000694b8198096cd081c386c5072450b098140c18242c64a854c62d822491366c4a8e006af4206ce96085410a2cb33a40b152c54204301232e50c0c9900a4115d0610709e2b0238548c050a904615549c10c335090c088185c0a39e43cce08d2891a2924c08200444006be440a1628400629720805518408228f0d146fb2222f7040c01760b029530443142a1e398a6f1461491a2312a2324e14f940f2c60a77c4a0254b200ee823ce046f96b2546189921b85b0c9595e2d68522ba040912c54f60792b451868a2c0cd8a043256b52c000853cecd003040240e1050a4e14800c2231290b5040fd6472c712d02128442bf905c7161bb0788207138dfc01c30e9637551cb2019638d66021828c30c2e0611500cbe907487690e22608cb075556b86c7c680457f20ad124113f34c06a204011120cf05303e6019017e07882830e3ee2a29231e0cec4403d802082073a435c69448968099026c0b812c6083a7054208538576888e48e285bf868c015152a80d387219074b9328036182885e1c30944151803c7cc10541a91166bac908cde34a233524c0e7fb06944436d2cd5426868440f2459d2816ccd4a1f68b8918110ad5989c2ad41e484d6acac2a28228a9ae5cc22ad352b3a6c4e4075d4f148f881c3fec163c884030d98b8d0c60e419cb0423b21a89910c9cf4f00d6b4ec656aa5740a694d8790d67406112427ce248c189233c80f0457b41f08d440000306ed0782a3d69a4a15630109bd6b09068183a00308328000484804113c78c092071e69ad3520d62aa66a6d20a067a562fb5f595ead5a4a8f426abd5eb1ec592dd5079d951a818410805e2d20a36c04046b217900f4b0142bd581b287b5963ee9032ccfb95899119c732e56c60320550b89955f663688a10511cc089901daef826e01b1f22bbbb070c13d4019e40396074baf7c7a65d456bd27511a00c01f0058d35a53a1fd00008696bd4c5202694baaa5ac7265a92b14684d6702ade900f2472b137bf5180ba66330c618e0a43520111878a4fd3040470bc84c9372c80f03468ddbe7afcf9e010f5afb61a0a7b59f289834383f51fe58c558ff13858ee6caab9f2868fc4499a23534cffa89224414185a83a558b11f9e457ea2f006f413250b6ce75746ed9f281e9889f2c0eb911ec64afdf06cf2c33389193340acfcaa564b2fe5d72b23b1726b3a766c11e2870705854d7b91f9810227bb485882d5a14347e645a360d905a4520d0909fd40f139c06be7084ab542039e2f7e74dc60f393a3a4486b01c69f364427ccf2d3a4fc9c945cebe1932db297e9c45f29d5770af62b9f4f7668adb9c0079446602472b0100277e96039630193e831002a66e6e84390344c5051c49213d428c20944a600b1c5ab814520d04404b290e20624336c796002903c80922a5e322102a1f24ac2874b36901a22b8e2b8014fa245e01d2b5808926459e10a0311c8d4e07941042fdc584241c5804a8e1d4b44a08a35624c60a9b1e1132d66c480414f2204cfbec2a211811254946103810b42550c705ae2069ac91a7b18c08f0c478c04342182031102e092a0c731009140eed89901c89236ce5c1904112a5c3e01e28f0fe620818329161401459aa10ee810c4cb8e16a6349c032fd42124d4091a9d68e9e4b5067bb5f450177a4648a8b52aa82c77b1b2594bd950b64262a5366b29cb4b59f59c85a6c555add63e9d5631d6ab4e4b2fd809c6180ae67aaec91731c68b848432e1e3798b880b9f4ca6340e30c10313333051a235202a53808084cc98018265d905a4e3864e1b6c5c9249537349964bda6a8fd9d1d9614087812896603264c915968c692615501eb2248be94a4c1cc6582555f8549200934af568b20c24c22f01659f0df1ff0c054b89416d58b642c91d4730552ca304c23030d6a7366be885792f93d8f065122049f2682658f64848b14c84cf32ca4812265a9304829694e5d5e9934f92b20c3b9d1e852629cbab7fb5760bee41e2c2ea6145ad2255abd5258b1575593dac284bcaf291aad5eaf22a5ef43bf7556bcdc217cb90b20a4bde596acb3f160b78e163811152ae7c822669722320b554663256ec742629f51a61e9935ad341a3359d335ad331a30c328fa0c92f688acfe44660a169bd342acba8473c0002426539cb23177c211212823156e5f47a57d26ea994f2aaca14a5bcaa02636c8a525ea9f2512363b42cab323018d9a2b55409664eaf96192bd98b0c9d315a6b75569103152c4246098b64f9d7c352a755ebd549d87f6691115afb7f61617d520bd6b29749955559919d6632998060ad57652a551652fd99579d845a6b89ac90889844885a33032484f24924a7c15e2d5406d46ac1843e7bfd997f652f132acba82e74b8d8a235aefad40ad94aabb38ab6644bb94b6b2da3ec5768c1664bb9cb7f3f654bd905670443a6306407363e15a0a11008b456a54a1521a14fbd6027577642ca56f904637d9605d66abd06d9d2c2a80063ac4a9529fbc39c4ecf5b1bcdb34e192ffad7676919a954312c199639052e7052caaba5bc9f9f608cd11753b55afa94a926b005201300440c357fa801885d42478924fcc0c48f2c3a48b49661f94a1297d60700f8f0c1880689196e0608014aec01cb5ea6936bf542e9f1a6b5e6831e2e3db23c9210422708207e684dc7871ebeca07483cf5d2431e4cd91fe6b45f589d5e585501128117c162ad936b7572ad6227186348d90a8f26b8e4a4604ada59b75e2da39c3b0ad1b9638ad6a2dcc19b97e67ceca8c404fb0cb7a6a3a6351d1e5a6b509a8e8f1d535a75a851c79b038739507254e223871b9f38e0e8e4d09a0e0e12e8dcd09a8e0d35f8bcc1c3e74d9be6f3068be6f3668a2843f9b3e457eed25a0e1dad61d7ea9585a8c8b57a6581b5545f5499e7f7d29ace0c4b2f180bf3fc5eb6c05a2d2f5f88bc58808a0802e1c384281841248e2b0099c2c200a2cc20258c067cc2b86308a033d2e8b02811e3821c0e21830301e4a045090d8480001ad10418608c30c904474c60071f585c91218f2335540689f2069bd6722cf0464ff632e9541a1f36ccf8ac31c51a1230b0841a56349d25a5d674d09cb152a54a1509dd9b02231858c66a110189606353248dc15cb18cb7a6f3e29fc54e2d239d17745cadd65a159f0714359f28abe613a54cf389d2a5f94489cd270a05cd274a04cd87e793e6c3f3c803517c4c58a2f998a0a6f99870a6f998d09b8f095b9a8f0927341f130ed07c4c90d27caa4c52e590e653058fe653058de653c54df3a9c2a6f954e1a1f95451ea69ad07020b0a20418f9b0d9a8f9b9fe6e3064af3691d349f1680d6f30927ade79338ade793445acf2782b49e4ffc683d9fd0d15a73e0a7c7811e7e9a4f0f3bcd474d24cd478d21cd478d1fcd47cd1dcd470d1ccd470d18cd47cd13cd47cd0fcd470d0ccd474d52f35153a6f9a8d12200293f0280619a0f4ca1f9c0129a0f74cd0752d07ce003cde769d27c9e22cde7e5d17c9e1b0228c0cf004890d27c48d0693e264b9a8f6990e663ca234a012e6940ebb90487d673c999d673096f3d97b0d07a2e4940ebb9844aebb90484d673c905ade71201b49e389cb49e3892b49e388cb49e3881b49e3879b49e3871b49e386cb49e3863b49e385cb49e3855b49e3848b49e386a5a4f9c1a5a4f1c58eb8983d47ae2b0d07ae27c693d71b0fc34108008a434c04003ad09000010480922a3f90461d17c828e683e414bcd27e8d47c82bab4d61e88a055e0268ad6e38688d6e326d67adcb0d07adc5c693d6e4c683d6e62eb71f341eb714380d6e3a681d6e3a6b59e368db49e3680b49e3673b49e366ab49e3662b49e3658b49e366b5a4f1b205a4f1b1e5a4f9b175a4f9b53eb6923a6f5b4d1d27ada0cb5d62a683c11b4067c1c80200013487160e70793199f32c040359f32ae9421a501099141470312222309202133404264780024344624ad01098da14603121ac387d68084c63802121a6382d680e00009f9887185183020a14c8c29404261e0d15a0b630d90106f3e61383030011202a30830cab4d68084c0f0a03520a12fdc685f94693a3f0e88c4013a34d312ccb5ca5e0ffb558b25c4b3153274544c74d0019003a2a20110ecb3de5b3c1d74d00110952a409cf53cb54139a341e1028a0e5088a05881320445ba89e4d5caaed86310373bb4d64070e304d0068c01b43183471676b4918008054b896969b891a34317b0d65a172e63a169b154e0024e6bb0d44ea95c4a988b295a6bbc281b4ae5d7111765baa8fecc6b71b58e3295aaade1028a8e065b90b185520312c292e534b14508ad69510628cbb24b878b163dcd94f964f15980f1c9624a6b2d4bca476db268008b488084bec0c28dd6da15ad692005165634c8409c95ea57a871c514adb51c4592d2a4b297c40a4ebaceebf0d674f6fe5566e954694d4767586b3a665a6b7a64fffda4ca2b5646f3675248ade928a085322dd8a74965cd90d7ebb0a052e5ad43c68d0cb6c2eb533944ade98c694d474c181d306d34358ebe78494097a6c3c5a865aefc3aca965e855651d6c2926562f8674baf024ce98d32d69ff191c2cca3b8141b9010850fadc5389a96aa030969e1a9ec6281c929d5d04eb95a3be56a1dc1fecbf3d696ec1f0becbf7cd26ec15e2d55ce5e7f26c502f3caaf225a7abd5aaf1786ed7729e157cc8a97e8f3041a4f78d1565bc94118d1642fbc48e9392bb7d678ecf0712290064b0d39e14af271020a0371b4d6b4349f26aed0a94245674ad343a7841c2d8474aed0e964c4a5e88b171ce6845118f2c2e5e8cbe924d49658a3c69a243255feacb5d693b3c6b6d64e2730e8c8f9311bfccbb5a4a3304427004cb8d6b6341426a1a402852ce182004bf359628216a6f92841466b9f7ac1584241d04025bfb28ba70805244246f3497c912d65af4ff5146cc7812424683a20b4d6a47cd060ac5ff5b09a0f126390b8c094c40508d66221d1d35a52cbe7083a5a3b828cd69a8f119cb4c64af16cc508188c40edf0476b4042d923e52e4659e81921a1ec65323d931b618422948a38027a576b6740acd497fd674e49f9d124e51703537aa3d4952b5911ebb5642ad5d01555d642f4fa2ed90ff1fc59f60b5b5e585d8165590b9787114c4bf525cb3ecba82e7f2605db995504cb48ff42421aea822613e35abdb2bcca957a1db58e8ab2182cc3b2a55781c3b29496ec1fcb95229e3f4b86e52ba82c67e902cbb216d87fe1a92bdcb57a656935c7121d0f701073b455965a05a1ca905e198520825a6bb0962a0b014147f63ac15aaa8654e6e4f343252d7b99741080e68d7e486a5846809103bdde95652b2618973ec9cc071f88e0416f8500245599672056563d4aa5ca8fa6a5a5a594b7a45aae9611abe8f5fcc5a57381c5b87c316a19f1cf542a353c3cb469adb5d3c994a95459c7b225978ab75619abc53a5282b59c1db2f8ec20828f0e63f8e860852b417ac6822efc1c379846dab3b3773faab38c0f9e90d30673f8a4bb344ee8e0eeb5d32b395de018dde66fdaa76dbff2512e707edebff3b9a794d55997515be069377ff5657fbeef479da305e6d2bdbd67bcd07dfc97e97bc1b22cb08c6f470727b7f5e99e292cc3025fbedff55c2dec99d20b5b2d7d058ed6d5def7fea8532af7acc030e6a96577d6521b6994591538d3a86ba4b5571829bc3fa9c0f3e5fdb6cc94ca9975a5720afc30671a25cd595239fb8c52e077ad7552736975aed5451805bebcd7bee5a4ba57cdab9c100adc799cd1d27ba18b8fc68aaaefbd9ac306c3defb9632dbc7fb8e1c664f60ae2b87cee91e6dcd7ddae8048e7b4a0d9fdc5bcf5c5f874d606bf39c1ccea927a46ed2d389c235785e4b238455f64eaf9d19551f6402473db7e3ce4d385f5af72e576c092c63ee90c6eddecdd14189aa4fe951a7d35302d307798eee59d9bfd6b851f53d4c9593c0365ee8ece694cbc7f9e54860feefbebff255fbb48654e61c81659e3a5e9a39bf3243fee0508e115842ed369dd67d8cb7c7ec2a02479ee78db0f2c7ab949008acb9d3aff97d3fb996bca3eacb5a5cbef9826534a70178d62e697753febd1f5fa2ea43f3ac68ca1902cb5bad9eefc1cca17e3785c07dca0939ccb6421b618d627282c0f45dcdf6c51bef73ae5b303940e058efc7c86d8eafd2396dce0f38f2ab6ba5b4da37bbbd4f4c8e0f18ce9ce386dfbb9cdba9f20bf660bbac5bffacf7ce7c2daa3e0b5fec045b759ba306eb38f9dd5ce6e7ea9e5d5bf8e2298707cd298c5056d7fb965bd2d8e9b35776c9b78ab1e2969c1db0d57ad20a339c3adbfa14c62c393ae0bf8fcbda2f9cb53a0d37aabe137fd88967d77daf875d13721880ffc20729a43643dd3974acd66ab54a5d38714e0e58e72aefbd373b0b39bc1996a5b4dc1c1cf03fea669f7ad2d8eb9c17f6d6e6dcf05d53f8dceef8eafc47d5375fcf62151de5d880759693536963a5bdc66d5d4e0db8f22ca9bb3ddffe7894f255aed891cba101bf5be19d91f79839775da3eaa35466c050dbc7f7d37d76feb15a547df3cb7b16b6ea5106cc279f4fabb37a4f0abb1be2b98bc994bdde52233227a418b0ae53bffadeeb4ef3a86d7c14c280ede5f5f6bfee5f86cec13b8dc89cc62ce05508fb737de3adee4533695ed3dc79af6ecf096146d5178d96f09e4f47fe4ebe9bb3ed7f9f127679bf964fcf17dfcdb673560a0d2bd662a1c151d60e63875a660a67afae552aea33f8ebef4eb9e4bac3dcb96c7556d14eb1721793a9d559a953352273ea31fc974e6ba1753c72fe3e3ad8cb9e469d2dad9bcf48b37d298dc89cf40bdbfb92f23ce3eb1bc2fcf151f8027ed3e6bd779fdccdbb3944d5539682efbab09633dec7b783fcddcf8aaacf154b6ab554949ff20b693ef86a0bbbc9adec1556ea789559a2ea8329fde944330a66f595515b7e61e14ceb9df03eb4967e9e329659e1173fe6de2fddcfe527abc9a452fd5e4185f9752fc6976eef7bdd8ca8fa78eaf4ae25580d3a422168893564322db172342273c24978567bb5def74d98737f1555df84ad7a072e6c9b75a63bc37bbfbf84d1c552b8c39867d437c2db697d5b891721b1b21793c964ca5cadd3ab46644e1c85f93b7ebbcdbcf23ca583fbf9a9053bd55702127e1c526ba97575f27e9d46d5c759b1d6ebb42457e8584e0bf5c3ee667d9c3ea58f27bd56e75ee78b35576d27c7113eed667696cfa78eba5aa7fb6259ea8534b56c5c27ff6b6bddee659bf9ce4a8f45e3ca79bc993ba8a7dbae3b547d53848cf57ed76abde97bfd6d7fa8faa0bd66707496c20aa39b1bdac837aa3e58f6f3159d70e6955719b7ed97f37e52c556ee39a9042352ca8aa5531480ab7b73ef096d967c4a7851f565f621b15249b7051cad8efbced8efd4b95b8baa8ff52acefa93847396c19ceecbed76d73de5b64a547deea169b94eaad8ea525b5731961516f09e55d61ceb769ddf581d0a646295d6c64729add639eb20b59fbbebf36a999f955cc7d7c38a884c26fe29576b9b4c99098b9720e8de0be6ca8962053cfbedb13beb6ab5b2fe66b5ee6f161716166a33574b680cd65c4f2ee9d4fcd5d2f9006270d5d9c9b73377ce3974b2bf974a9162faf984ad7a7485894f77b86f7f5be793f21581898ebadfd2de7e2dec10555f54e1c8d518e1ccf146ba6ded1bbe14bee01aa174d055da7bcc9f23e7adfbac179c6d9d564f3afbbd7be78daa8fb7841280ddd5f176fba08cb33b4a396fb9db05e70e679473d2fab0eeefee72c11ce668738f7b3ff9e0d6a8fa54ae55eac4ff955199ad46f8d528a17393e7d9fb3b0d61095bb09c705bdeedccda49fd322aab540b7eb723cd8e77bdf57ed2b2fecc9f5aabd6cbf5a0900a38f6ca9fed3647d71dcd16559fabf5e2cfa580f5cf1ce1bd503e8f7c3a546dc1e28345b843fbf8ae96c63939bdf3b453b00ccbe07b5930ed17cafa7ede2a399410559fb582028ed66679f9b34ebee552a2aac914e70be6128325057cdd8537ca19639450c2ebaa95d942e8ee9e56731e7b908331956b959aab182ba2b982f7c7c9bf5aa837a5f34293c9ce4cd36944e6048608736a2fa77b72ae2b8d5ca2ea7b8fda99696944e6e4ace007798d1aced7b393dafeab45f4ca61b415f9a81199531dc2536b09f7f30937cd7abe13f084f17539dfac74dfe9e4a446644e0a3001c7e7b6a3943e5ea7953cf6de3a5d2d55708cfd59cbaf8c95e70925154ce9bbbaf78ddad19fa7f8287dfbcfc4a22978c6ece08dd4d5fee2db8caaefb45f19c6cd5acae49512b09bb3df08a79db75bad2daabec96aa9884ca667b554db643299a81199130b42f84e9d61d65bdbcf52de8daaef041f85ad7aa417431e39fc87d7d249e5b6a8fadc7bde62c9f9de905db55a27157f9d4e00a898774df3e350cafa6add12551fec654fa038d67db5745dd3d74fe745d577aa7662396577b9d6c721d4d9be2ab1edfcf6c99f963cbe6d1daa3e34ad17d2e9c1f8e2cd4f5fce9c66b97fa3ea7bc132c8e36f097b7c913e2bffb61e969073bafb9b993e8d37a2ea3b71567eb0aee07086d5c17861dd90fed30f551f2a8bb94eaf56a7434144414768b297fbea342273d24282aefce6ca25efdbdda827aa3ef71e967a8911038baddc3422737ac184bf3a69fb73386d8ecfeea0231482ecfe3026d3fe332613955d46807957789f7b7aafb4b5a2eaab318bd0fbcd91eafab8a37a5a8aaa2fe80885a04f93ca6241475a824eac14852f982b4c08eed6f9eabd9746eadc8b76d2675a9d51a94cb8fe83dc7649657f3e2747d5f7687661ab1effd5da2a808065ef94bafa747f9659df0fb07557f6ce79b5d6ce7e27aa3ed8aac7a02314829062faaf984cb0553799fed5da590e723016741484c54b50d09196a0139446644e287870ca62afd3a9020428e595013a78a7960aa9a5a28003a0a00d0e70a21382b0413c390d1000e481013cc840040c1070010816b80a4e1f50f024c56002a5161a580605a013021100be13fca4acd22724560a956514d000e0eb00127010015cb5f6e9f5675afb5fa7d34ba213baf667f567e9743a800f027a320a04005bad57050148da59ab542d1020e0f95f153c908103eff4481434f032007820056ec0c02bbf6a5b10e5029e550650deab05cb17ec6ca0f34eb6c36218e4bcd3a34ea79da5562798d25fd00e7004d0256be4fc2ab3a0005d72c9030eb4382ac06668278e283400324006185c604105144c50000922f8f1e91140002078a001004861200a0f941d9df689279d70b2898e263a996062019f47d4683e8ffcd166070c075a1c823c32d4a220b2e244021798d25a8e052690460e1a3f2b0958c0a38109444180aa8ccafea8ecebf74b07146498618724588f942b3f2e44c200162e1401803b7e52709e70a2b5353a6469396481bd526d8b95d7b35829a01220100740ac57b15e357f505ace5089530917adcd6b4d09218208d3a559e042fb4102b2838e3ae8686d678e9ca2d69a941d374eabadd4da8e1c6f5adb81a3f1d48e1bad4bd263696de78d9d08b8017bb5da60a3b556aa1faec60f1740db59438dd65a8e10db0c04dcb4b6f38086c482e52c29c34eaa9ca7c83bfce4097e5a60c326883270ca1c11a521466b3b689cb143842aeb96ca0cd82bbb5adb29434a8665deda0e19632cbd0a685adb11238ca54f4ab5b60386e3aded7cb16ab16ed8516aedf54929566b0b2cc502b382172b54b1da4aa82cffab45c44ab5362c25445bc5b098d66eed9617ce7a58f6625adb718017ad25bd5a5896acb4b6b300374b56be1cb5d6da4e9bd6da4e17adb59cb6c3456b3c75daa211adf698d6768cd8d1228b06812c5adbc1e28a1d2b1850453c232444c514aded4861471c6e9411268c9f3023b45f65569819c2c05e315517ae4aa18896542c2e4baf82834b2fa9d273168c503436af566ae709277ec07469a2b5d6dace1a265adb594289d67692d84122fbc732149376867d31e2553ab78cf8b3c0746919a9f25f69197155ac2526bb56adfdabac52c5b0b886602da32ff88bd06a2bb956605cd9a5845bada3ec1f0b122b65f4ab5456b55e2c30b057cb9526f525e3aa569657e9dc326a6da708952a86e50563816181696d87881816d080216e683b4204c19f3f0b8c4a153362e52d5d60597e2db0a11796ecf57af55b7ea75a61965eb12cffeb0896a558a9151f7a554eed148fa5a0ca5248af4595778a85da7f8461291698bcca594c8525d610e4ac940a5c00e162c76a2bfd18c91fa3023417b610b2658fb6e3436b704c6b3b3da879600b6c304c258cb4d5568a61323ba68ea163e61839268e8163de987f7d162d4868f121832a8ca1c216baa5b202237d5607ae4a89696d87017fa5b59d1c70e0cf45a5ba81bf4a6543e7a2520dedd4b043032bd65bdb99a1b526654786c6534531b4b603c3ab5a46af8a6784847e8a20f92982b3b30018d3d0b764959a5cca2f34671a7f56aa3f6781c9603c232404cf5469755651d6eaaca229acd7f26a5561bd965f6523a5bce5579995619957e1453cf57acd8b84845eef8a65ab16ebf9aac57ab55e2f9c651957a5c45499b23f4c0a8915c3c28a75be59f459097be52e4bbc6505f6ca2e5eb4c45b56aa5481d1c217b3b1a54f9234c65330c67eb0c4768ebe3c2cf542c3f3bf5adbf19280d676baec70913406cf9cf01c388d1fbcc5074042bdd5ffe501166a992bb3b1fd61b2946b284bb932124be55aa55cd915011ca169119db29c417e8878f82172a04dc99eb7583f567640a1ca8f150d86aca0a18605c070029cd65a8665584e3862bd8b4bcbe8c7844aaefc9800b3b12aa81f2aaa1d9cc3cf94474e4a3f53d8b46f4d712490f0534224ad297196d01442115c3c5adbb9d2da0e516b3b56865adb3961c784d676aab4b64365cad04f3da3fdd434eda75e2c06e8a015e0fed40dda0f0da4fd5028da0fb5a1fdd031ed87c2f64323683f9393f633f9683f734dfb9930b49f0baeb49f0ba6b49f0ba294a2dfaf58eb0b5e82a5c0b48c5e3c5be1d94a96a160af94152bafcab02fff8ac1625854aa4cb4044bb1621929956525a44c405906d259b551b0574a03652096fec084647a0f80b2ffbe945d402d1810ab28bf3ebff09c73ce39a594524a29a58c31c618638c114208218410c2f7de7befbdf71c74d041071d74d041071d74f0de7befbdf75e6badb5d65a6b6badb5d65a6ba594524a29a574ce39e79c734e29a594524a29638c31c61863841042082184f0bdf7de7bcf39e79c73ceb977efbdf7de7bafb5d65a6badb5b5d65a6badb5524a29a594523ae79c73ce39a794524a29a59431c618638c31420821841042f8de7befbdf7dcbbb6d229237c5b56452bfc88a0a5b5965f4f42088db49f1004693f21d4d17e4260a3fd848046fb09c14dfb09618af6134212ed27041fda4f0830b4d618e87980ffab5a465cd5ca02fb2c1b42d352bd9525158b0b18dcdace6d6dc7eed496b58c28cf567648684b594bcb484b6b3b53b69d08a5b51db8f35a6b39e31b7fc1b056cbcbc3b2584629fd7bc98c88b215572ca995b15279d58ae9ecf9bf46d3b394528a63e1cf42935dd9eb97b20a4895b92aff975717be7a58d10e093ba62b5c888cf0c90b172f5ef0096b017385cb96d398a12d42420fcb48d9d57ab9b49ca982948fba7c52eb4815e3ad2db6caea6145482dd5b352482cccc101da071eb4d6c8684baad7154147fa9465d9b543809659a955eab5b314cf565946f30a6aade95c12a7b5302a64aa0ccb3da99555a962631996b92be3afca30322a690dcb95d6742899a435bc811b18390a969552fd57b14ce711475a6bb0bc7ab5b00cd9997de1d98a9d9f652b3c5bc15e5ae3ff6a8da75a61fef5b117b28b4b0b92b680c9147d395dc1648ab40c1579c15f4ed80b98a32123148abee48cef6f2dc83e5abb026ba9be481a6b4d071138b096ea0b10d0c9e5ca4242f7cd095fd9c96580230b5f2c0339b86450022ca52d7ca78c012a1824d1da211c642f53767abdeb07031f5a6b260c7000c346ca0f3f17b85a1312c24082f6734124ede702345a3bad5a013be03761ee75d6c9abe47beb80f757f8dacd48a1ae773300cfabddb39be61e61b73407acedd3b9d73e1de5ee511cf067d75fae5453ce659d506ec03aff9d7ccebcb5ce6e42b101dfd7b7be9977dedf7309a506aca1b46fbb9ddf7ca923141ab0eb9dda3b399cfa258cff09eef7d6dee1fcdcefbeee3dc1f4ce29bf77d8dd8cd57d27b8579e7fe7de7ba4ddb9e704ebf933f728efd6b3d6be09960eeabae584f65a2bbb265877adb3947ff5a5f2f24cb0d61dd23961ae74c2c931c10e72ddf5ac9cbbec1ebf04575da9fdad65fc49e58e83edcb47bbaeb9763aa3b604cb1cfb53e9aecdd0ed5b097ed3393e69bf75c67796121c2d9cb9724aed96efea24783e5da77d7edde651524970854fca781fe58f4afd22c1f6f9bd6f3fcc7a5afa3824d83948efaed53d7e013c65dcb96b09a58cf01db7007e90f2cc25e58f3e7e1d7f045bdae394da4e5effd6be1dc17ace9cebfefe8de038ffee6c6d7f0d61e68c6078df6f59e7bc8e7ed58be05e77eef365ef51f3a815c1115a289dcdf3bacc694e04bb38619df5de9c5d8c1911cc23b5916b97bbe6745f38583b0a23e73a3ed76ed24330fd4adf39b83bbddd4e4330e5dc4ea9b9ecfd4e1a2b8035e5f6cac7abdd51bbb80bc1f4edbeb1d3fdece4156e42f073c9bb7614e679bb837b10ec2ead92cbf936a453be2d08ae16ce98a58639bfe76e0782e5bc73f3dab9b3db51b7298079ce59d76a67ac72fe4f005b073b8c9be7b751f307044f7dabbeefda48a986ff078e1552ae357f5bda7bb91ff8efccf372289f9bdbee3e308d7aea9b6dcd525bbbf9c0f179bfb9bf47e5cc57ef8177ec77db5b397ca79fd503cb7c777436ebb7337c360fdc297ff1fbb65ade2ba79600ce36e7eea28d3a565da5c6035fc9f773bef5a3777ed477e02777d4f263d47bcf1db51df8c50d739d7b5257dd83ba0edce17692523eff257ca7e9c09c6f6aef86f9395a779f034b0ef5fee8ecf3cc6f97035309f58e15fed77cfbc78127cc31badbede6f9c17f83efe7d93fd2aba3bd9dc381afe3d6be4dffdafc9bbf819fbeb3b7ce98a5858f4700bb4cb5cd515a1adf3aee06be1bbedabb945acafcbb0dece6751576a9a58cfc6a3670863dcbf8fbdefb32ea35b094b53fbfda6e582dbd6ae03c29e5ddf1aa5fb5dd4200c3fe9e95afe3e3d6499b1f80337dfce9f97adebfadcc69e0f8a08b155a7ee58b1566347095d1ead8bb7576f2fdf219783afaa2b6b1f37ba57bd90c1c298cb9bbdfd34efb2e9781ef3bfe647f3cce7fba9381af8bd3f6ce257ffbd13e0676ae5af8b8b6935ecb5f0cfce4ee793a582de5f37e18b85fde79ce5b777d9f7d30b07e1f25ff9bbba5eefd17585e27a57dfcea4defdd0ec07a73a7a5ce34c37ddff602e7f81af2cca3db575eed064f3a67afaec35bbbabba0dceb5da6ce995f3c1ab7317f8f2dc21df956e69e5cd5ce00ae9de5dbf2ee3ccf26e816d754ef6fa78d49373ab05de99c2eafaeb75d2c86716383f9de5effefe72772716784737e3a6d2bab77ace7b05eeaef75edf7efbb8a3f25a81a5836ff5730d6bcd1ade2a30ecda3eebb2ecaeeffe2e1598df6c79ef4e4bbe697e770a6cefd4fad9b7f5752eba2b05ee0fa99333ee97af7e1418f60921bd77f66ddf4381758d9fa17c336f1a776783b984cfd21d5fbd5f737f024f2a25bdb4baed9cccdd09dc61ff78b3d3325b6a7b13f8e9ce0ed2b7db464dfb1a5c399416c67a337df77526308df5755da37d6ba3fd2530d7d3f1cf7cbb5a9d7c25f085b24afef2e4ef74df49606af5e3533e9777be3d2381b97d99f3e76aced6f67c04becff5e7b253be6bcfd9089c35742fdef85a3eaa6d1198d6686da4df6dbd725722f0a673471d6f872f464e1b80ed8cb66ea75ddf31673a04ce3047099fce0fbe4ba910d8dde9f85369f7d359cf20f0cf8fb73e0b2710d8cd28dd8571ce7b65fd014b6a23b50ff9e4ff66f4016bb9bb7bbab374b57e0fb8bbecf84be7787dd5aac194d21a2bd7b3db0b1fe4014f09a5cb7dc2677776c0996f4e75b6f3dffcf7ec8e0ed846ce69844efe8b4f9ddd610086f95e2b73efae3ece7bddc90167ae7396f63be75dcf5e7770c0575e0a5fe76c29a5faebce0d18ce679fd30b75b696f3ba6303d60eca1861e68e6bad77dda9013fbf71f32e75ef7dea5d7768c0f6a9a3eebefabbdfa9eb27783a3b1d755abf7c67cdd5130ca9ecefe0677e6197b976829de536da08f3d3faf3564eb07e53beb66ebaac67bc7513eca2fe0bab7dce61beb66a82678436722de9bfcdbdd64cb0cc36737933ddd0ca592b2698c2bf8ecefb57dbb769bd04dfebf88df9f747fa90d638d8c55aa58e333e9d12d26a09863dee0c6bed77720869ad045fab2fecf1f29adfa4b3528221ac0ed647dfe57753d649b07cb36aca2d871a6ee9aa24d86e0ae9847bdadaa9ee3412ac7785db5a2a35bf7c760a09a6d9c1b87b76daba4839bd00ae6e72e9669596f32a37b500963d47ed2277b1cbb8357d04effc64bc12f6f84eeb4c1dc1b4d3ca7be45bf30c75a68d601a1f8f9de7f79cde365346b084db3afaaaceb64e9ae922d8eef7f5d5fd6c8ddb65aa08de7be6f9627d534aca2f4d04e73ebfcedbe3d70ee5a588e0fb19cace2bacfacd4e291c6c7b8f363e97293d04cbfab74f7b79a78f5b4a0dc195c67755762be3f73e6905f07d8f3ffeb89e5bf697b4107c5f5eaeef3baaf59492128233e4b93abd6fa7b27fa483e06e9fb630c3d8b5e3365241f0dbda7f521b23e53c3f1a08eed1697d3bb4df6def3f2980fbdc56caecb4d5b3f69f13c054ffe4faf7953946f713105c6b75eeeef95ac25cf9fc03eb992db7b6c23cf9ad7cfa81f5bc1a4a7d25bff4279f7de0df0ed6ed22bcfd59c9271f98c2cd5d7cd4493d23e4730fbcb7851bde7ee7e4f1f1a907de79e61935bf7a67aef7cc03ebfd6feafca87d79ca3d2580659d3372fdf6ef7bb8271e38c3a8dfbdada7dc6eeb7907be564af968978ebeb57ada8165bcb73a9bff5ad7ab9e75e0596deeefe4e5d6baa8271db84318f9cc97de39b075eef9ed4ecffb369703c3095d9457d7fef65f1b078e916e7bedb4faf13be91bbc73ffabed7cc9e79e130e2ceb9dbc736d7f5ffd06b65abb47ad8dbc67b86304b0bef55d9db9d6b66f08ddc04f39fd0d5decbcefde06e6146e78b9b5ba67cbd9c0d34997abce79ebcff1ad81e3f77d9dbc36df5da19b6a60fe748c17de9fbcd28700fef8b6d595665e9f73fd01b8efeef26bcb21d74f3f0d4cabd63076979d7dbe391af8693d357fbd67b6739f811dbf8fc3e83687355733308cbd7fbdfd5d2b7fee32707e2e5207b3b67cefa7c9c0d6ea2cf57b5affcf1f03cbeb6ceed4c29a1dac590ccc9fe6fdf6cbf6d5586d183857472dcfbbbafcd982817b7edafb9cb247d9eb17586a5839dc9d5bfbd401d849f8609efd4228a7ab5e60c8e9b6fd55386fbcef06e7a7dda3953ad76b9db30dd62fef6fe7debecb6d17b8c327b98ef137dd717281b9db76eaf75cae37c6b805763c4aeeaeb514f237a116f8651be3d53cbbbeed7d320b7cf58d50d6cd9f8d933e1638f647dd8dd2bd0de7bd02cfd75dcd3b4ff91e526e05eefab78ed451ad7fda2a70940fbeca1da72fefb9a9c0f1a5de72eb77b9cd534f8177acbadf6bb37b4af39502ff7635bbdc75a44eef2870a79f6b847666f8788502f32c63fc2afbb35f291b6ceb8d37eaff3bb99ef609ec1e7c5bf3f32a61e64ee0f7e47dfa6aac30725a9bc0144eda617e71e67c235d83ef7e75d3e8f28697c3c904a6b73eba2fac5dcfbae5129873a7ef9c37f6cd9d5602d72977eef671fb5ea631091c9fe48ff21b679eb32381e7a3b53f1bffbefa283c02cbcf194248a9d3535b23707ef2f6aea38c9376f98ac07fbbae9d4f4bafd499086ca19c34bbef0fb5732e3600cb07f7e559c79bffd621f0a5b6bb6c73ec9dc6d885c0ba4aeddc67993fbeff20f0d3b6cedd758db7db0e04be3443db67ef91d75c7fc0376e1ae74f6bf38693fb8033bc75eb5a6dcffdbf073cabd3d4de3ea77697abc153c3772bd53d7799350ff8c9daabaeb3667be5db3be0f8f653297bb597d7ae03762ebf7da7d6badf373503307dd9d91df38577467a73c0704afb7346a8f59e1d073cb5fc19e7e370fefc1b30dc516a3e77e67c3e6d039e9c3f3ba9ccddea286bc0f7bd7cb4f258a10e0d98562deb9cf027b4f152f80976f3cd6ca3953a6a7d23f404cf7f90beaba5b32fdf083bc19a47b861bd93d6fc1d424ef096dbbeeef4ee072f7d70134ce38c317ecef0da271fd404730b7bad99bf9bd0550733c1f5ffc63bf353db5dec9860f9303e7df949bea5e397e07ca3e3bcbf1cf9e656c7c1d1d599e5ab5f7bbe505b827b740fdaab757477f25b097e4fef8e114e29b57b9712dce98befb91cbbbb37da49b0bd5c5a17e7bdef715e25c1fa9f8b9b42579fbdb9be48b0ab5d4eede4ebdcee4d1f24985b4a2dd73ad277012ce7d5b6c2c9df8b34c667013c21a4d5c90adf3b49e17b0467f832ad5f37bdf0f2f71cc1b7f70d797591d3b7efbd4630851666e8b8ac56ff758f115cf79c51d7f91e87b9f745b0cb7046aeede749a17e45f074afbebdd07d2278db27e3ccbafeeb1c119ca5bc0ee6b7b986f3391cfcf74d0bbbcbf0f1fcf621586f38e7966fceebea1b82a5be70d30beb7e9d7905f0bc2fdf93bad2fabcea42b0767253e8decfaba5bb8460c737ddd5e929efad7d10ace1db39cf3a6977390b829d9b50de48a37650d34030a53bc25ca1edefea682980df5a6d2f8d33d2fa760298ffc77ddfde9929941510bc6bde8fdeedb8e4bbfe81ebeffd76d7f7e3e48efa81a9b6f573cece65597ff6816d8750e619dd577b2fe4033fecd0dd5d77d5d6d93d70ad93f3fbf9cd281fd5033b0739b5f6ddf752bb9707eebd4359e147f8744ae750f561093ad2129485a96f9edc9300be7adbf97bdb69a19e9de38127d4b5eff876e6fbca3defc09de777b3b4947eaccf5a9349522332a71672ecc0f2d658e5d6efe5e64ecf3a2e94bbba7c3b7d4773a483d757e9963577feb04a97330796d5e97f07dd6b7d1d9403eb7c698d1b42aa237de7e2c0daf6a8af937adb9f50df6944e6e425e70da6fb559a9de3f65948df8ec181e3fe4aafd452f328ffe63770df5bdb3a6de4b7bb4c73228033b4fd9f9d99f39773dc909943f7f767dfb5cf47d5276975ad52b128a70dfc7aac3bd3af133e67756403476b9d7c534b58f9d65bae812bccfde63d61d55dee38d5c01d72fb2cbdd756b9f37310c015561de9eb9bcb689fac0fc03df2d9e9bb33462da77d6960d8edd695d27fda5afb321a78d3ea6ccdbc3bee36ec93be33f07593caf7e4a3f72b87cfe5026306aef57ebc9cce47e7bbfe29a5cff27a342d2d0ac82903e7791f75cfbb7d5adbaa25ed6672c8c06ffeed7c3afdf4cb91c687ca1903f34ee96b6da9cb97ff9cf6cbaaf5c26232994c2f5846573116528e1878cfbfdde9dc2fe5db4509c6646abd3e0dabc53299563116352273d23961e0a7f98b11caaea1bb16f20906a6d6c9fab4c35ce97fa4a7fb66ce173877d7f9a3b352c9a3bbfbcb0bf6e5bdfa826537c7017857cbf3dd79be8fb6da0e8bdd0cb6ed0b96c598e3059e2f9febcf53ef6e238527d6abea5b72b5f6e433167414ee9d1e14511c80237d92cbece69d96eb7a51f5398845142f30bc5cf6d735ddb4ca9d2faa3e377846d99d9daf5277b37c5ba5f31c51da604df5eb71c797946bfaae94224a1710d20d33df2f4ee8eca3ea4b6ab5502a9e82300251b8c0d7caf7a285eeb9fb714e11650b9cffdedd6fbe9dc358dd44d597a25444d102ffedd5425ba9bdf1edc8e2428482a5c4642ad5501051501051501051501051d097a0232d41d2bdf9a264311db4af531a65ec8f473fa2608165941df2abe98b953ffd2bb086514707bfeaf9a4733c8d2856e09fb346abe17c3673ea3aaabe4fca3039254a15d8d5bfff37c2fc56bedba9c0b172c867bc9246b8a9ec53e0a867a57d3ee4d3d2eaba14b84bc8258779ba1761ec51601eb98df7a1e40f05e699feb45fa3754edafd6cf0e65966dedf6518addcff04aed55e57f58d5b7f94fa9dc073de9ffa4ab8e9fc99bf099c7b76d375687774b0db5f83a1def9f548e3db4ce0a9e9b5bc772ee9d33cef25707dc91f4208af8b7dcbad04b69a669939ecdcfdac7127812d75b4f2eeeaa3116ab791c0915feaeedcf9599ea1db47e097737e73e7ce69dcb56b2330b5d2cd6875ac6fd6c8751118ceff5d7be7b9e799ab260277a85f42f894c6da69d50dc0555be8e69674ea21f0ed59f26de5ed3b3aeeb410f83af824871aceedb4bc3908dcafa56ff60cdfde7dda0c04ce5d525aa79e945ffa2fff80ef75d9d5281fd7f0e15f1f70d4b2e76c259d594a9d6f0f98c60e2bb4ef72e6eeeb5583f59d55e6bab7db59da7a79c03556cbf7beee6e2d27bd3b60cde1e499e6799f7d0dad0ef8d54eade337eae8747c9601783efe6afcfdacccd9dd1a25071cebc779e9a379c6cb698d8203ae9cbb4dddbb2f7378658d7203ce375fa9e9d3b2bff7648d6203de97cfa97f7edcbbf258a3d480eb9ccfd1a77452e722a75168c072eb5a759c1c465a21a79fe01e757fa9eda354739ea72758cac72f94b0be7e79b6b3135cb5dc39d70ea1e5b46ec909e6db5e3af9a33cbfcc596e822785f63dfbec73b7d32a35c154f75e9fcc9af2aaab9499e03ce78bcedda831c10f76ea7a84f7c6bee9bc0473fede513ba9d61ad219e3606b21bcf05ef7f8b653464b70ce3d5afddb715bff7725587ee470d3682377b36b4a70b7bc4efea8d693604da9aecfba9753667925c13d4f38abe4d1c248309535e697b2d67e39bd0f125ce77ef96cfddd37956f5f80c639ebfdacb97c19757aefcb7c16c0163e6a1dedd3fdcb355a5b06cf23984e4721d4f0e6b9b58c998ec1e30876194ebbb7a4553ab7ed9eb0117cede5355f47f3be7a7e670457aa9f7defed28259f9aa2828e50e0aa544cc24530e40fee0b69e652114cf7967b7ebcb9677ef3bb46f0248275ec536efdcff5a48f57227810c1dd72a9dfc7b963aeee4d3858c37ee73f4b7574f7bdbba721780ec17ce74c6dcc35f34c637e547dfcf44919061f8486e0a95fbef66d086ba58f3e93c96472eff4e4ab00ce96d60ba3a4fd664b5727952a9f6ea6520d994c5952ab857a58f01482b9ae9abab92bb4efbeb662f01092f54348397f30cffa8fe2c13308de16dededf3daae1e52ee620a220a2a0a1a0232d604ca62f7804c15ac3986fed915b27e7f720a2a0232d41a6f74e2f69b7547a068225cf357359a3bbd43d1d2920a7834fe7bb2d8fd465d33b3d0703e19900ae13ca77f1e9dc9c77f880602af5ec52e7df6eeef8fc0f5c5fbef372699f73af5df6033fce6dedb0c2dc63beb9f681dd864f732d6fcd5a67cd07fe092bbc1c566d2f9559ee811fe757726adf9b8fcbaead0411050d0575d122f5c0f63e79ab734f5e4edfad79e0ba9d9bd3cacb77ac7c5348331e0960ee72b7f44d5a69a7175a5496b304110519051d690932994ca69d32b9777aafe7f95174a72a1eb85239f9745d6b6e39a53b53b956a915cf1d783fae5fb6fb56be6ba714559f2bbfc4d881afb4735ee932acdb6949ebc019d67afffff6cd277d6e97e0a1033f97f3efba73b7d74d2951a74f93cae6c0d3e69bdf3ebdeb83973a547d2d180b2bc12307ced63d3e257f5ccb7e678d03cf98f5df18777e3cbaeade60aeff52a76fff1efb8e100ebc67de7a432af9bf81abb6314fc9fbcdefa3cc11c0afeaa7b3f2b89fbe9da71bb86afab346a761de96cbdc06be9bda7ce5ac32f2f9b1b281f3d3cde3b49adbbdefff1a78ce28b57e10461b25bcddbdd37b6b78d4c0dbde087fefcae7ccf26acc03015cb78bf4dd2a2dd5f3d6598fe07900e657da67b79daebefdde4e034b6adfbfc82f77b0f77add0d82070decaebef55e5ae7e6fb3df767cec051ebed7addffb6750fea57ebf5c2f3071e33f0d3f9aebcf152a9f37519555fabb34c267b7ad4079e32b0b5f161af3fe9ed50de8eaacf6e1e3270e437dad8f7a6dc3e4739aabe68634441415dbcacf618a2205e6432994c415db40411994c5db44c097592e01903ebfc2895b55a0eed8b5ac32e5e8282ba68b12f984b89478c982bc31306e6d6ea78bfe6ed7ad4d9d2333c60e0fc3a3e1bb5b351dafd3026613c5f601af9ac97df27e385155a07e0ddaffc2779e48ed6cb21f40253b875a7cef558f5a6b6a2ea9b71061e3738cfda6f7dd85fc32b6f46d5f7f1fd2b96b1307c967ee16983a973f146e7a0a6934efda8fa5adcb278bac092de2ea77bd1ba9f30fbefa7fdde44e2e10267aea57371ba6a61d69d675836bbe0d9023b1b279deedf7dfaeabfb04c9a22173c5ae0bddfe9ae2d77fdf78d0e55df2a95551b662693835bf064819d9433f2faeabe79667a915829eb050f16d8c5b865bddc6aae39dcef484b107dc15c3c573cb767a49cf23dbbae5ca5ca26d37cc15c3c56e079a975996fa86fde9d529e2ab095595bcaed7b935a4b69a4e2e78b595b5eb59cd7dd6d3241fa82b9d2f04c41a37cf04a09df8c93ce0aaf9c91d2c8dd7eb2cb8eaaef858741472804bd804d26d76a6726536632c53326931199530e0e3c52e048e353f815721e05ee70d72c6f87315b2e9f45d5c7e262329d582d2870aebbf75ca37575efba1f29da1a9f119953093c6c70cc975ac9eb8dbfbfee8eaaef3d93c9641a72b55e574ca67c7a2f0b9e27f096fbc618a3fe3e67ad50061da11064f212441454c48aa1beec1475024b3d63d45b734debd691a3eae3d764da596a8583884ca61c1e789ac09a576aad9cef757d7dfb1abce5fecadfe5abff69f94c60faf72b9cd371f9f8ed77096c6594934bbdffe6c7a733d291562332a7178f12f8becb10de3cf3eb37a3b3647892c05ac2d9ddfd9eabb4f3724991c05972f9f4bcbdc35a39a5301e81e7b53cfef7eaecacf4c52a8f11983b6b23b70fb9e4db3a6932994c63a61199d389a7082c67b7fadda79008fc4fdf86eef1af974b6a024f0370ccf576b7e9940fabeb15555f64618a02cf10d8eeef4fe3cb56c67f752ee90b8bb95845738847084c21ed37c309238d2f7f10d8c24a79cc35ce7d39d516089cdd8eb1bee96087bc4afa03762fbb9de3b48edf4eb70f38e6ca2dd570df1b659d8fa7076c39af9fb775fbf2ea6a8b755283f37e31432bf9bb4f75ed3c60c7edf3b86fe5f965dd3be077fde17fccb05aebb20ef8a18e7566f8a474705e06e0b85d9d4fe57efbfeb639601d7b9433e66a379df63d0eb8cfcbef74ae3ff8f6d61b30e459c74de3cdfdea2eb90d3873d96f775d6a4de5e335e09babfd0ba5b63c34e0c89dcb6f3e855b6a4e3fc1eeffcaeffb1d85f6d1ed09ae544af7f2d655f2fbe0ee044bc9f5b57b3a68f3ac6f7382ad8bff2f5de77a130c75763cbfbdf2c218b9d604ffe355ebbbbfbe86b9ea4c30cf1dde6aa1ab1a13ec2acff5e9b7effd7df92558bf95565bde39949ac7c15172fd53ee4b2d7fd312bc67cd7a3e0be3bd2f692578fe769c727b67b73dbf4c09de8fcabe617e47f9db3c0976afee3c7586324bfaa824b8ba1a61eebbdeeb3a9d37126cdff7b73b7deeee730b09a6b3e64df3e53af75aa5bd00e6ddee4bbf4ef96f766d014cbbbe16d6d7335668f32398733ee3ad7757be6fad8ee02773b7755be7faa56f36826f841dcaa7bbe6f3ab6404bb3de386d5f24c5fa57011ec2c7dbf75eeb267d95d55046b07e9db52de979fa74e04d7bf5ae6e86074f09d45044779f3bdf2499df5db48e1602af77e9cda0a1de4761f8227d5eff668bbed3a666d089ecf76cef3dbaf3eddb702b8f7196775d2e52db78eb310ac7b8c944afab285af6742f0bbb0d3ed1e9d7cde6907c1b0d22767ccf39f5b4905c177c35a9dd3ee5acaf394816099af752fbe7efa75fa14c0bfb9a4b7c64b797c29e304f0fbfdf8e557579b7f3f20583fa7a3953b6bfdf6f23f70a795d2c9797793ebbcfdc019da1c6bbc795269791f58769e7b957dd228b3ce900fccb37436c29adf3f8dbf07bef36a0a37977253f9b41e98baf9aeeebae79dcfc23c30d4d0fea4b14fd969774f0278579e1dffcbf9834e6e3cf0cd39be83b2c7677bbd034f5ae1957567faae8eda0eac1f97f3c21caf93f0d53af094aed7fcd159ed7ed38167a45257f7bceecba39c03c7cbe3d47cf29fb65e2807b6164aeba0ec50fecccfa1ea63bd6aff99fbe6e9649f119913162871e00be17df93debb8754fdb37585b98ffe5fcbc65e43fe1c0d47668b57514c2abb97c6f609bffea0c3fbb4d9de50e551f12eb794562a596ae506875fa8012014c6977eed9db5fd29a5d7703eb9a259c0f2de514be7ba8fafe5fb0d37bef5a3a922fcbe1034a1b98471ef77c164e0a23fccc06def6fe9bb0d7db6994baae81e9bfeddbf1d7e3aef327aabe33499652008a1af8f12927a47cef0c29bd0f010c63cdf0527925afba5ef9000c2f9f51e7fe3ea2ea3b9374eaf95527f9c2a830a14e1d50d2c03473a735efd63a371f4703cb38e3dc73ba4b3b7cbb9f81f9c7fc2097743f0769e766603a33b54fafcd764a1bcbc07ac72b3bec5b6edd1fb464602d77bc3ceb2d779471ce31f0731166cde1b415ca77a5183852fbb29d4f7baf2eea785599f5e2c29f85868bad8fe6c4811206ce513f6ee59e4ecebcb906035f173bad363aee9eb4367f8179d639764b378da8fa4e2d6e5b80e200dc2995aff2edf2735cc7f70273cae1ecf74e779db33cbbc1f04ad725d7f12bfc7791f8bf7e35610b4a1bcce9ebdff5d354da7ffe5de0fbef64b5735bba61e5910b7c6fafbb5f9e6b7c2dffa1eaa31dca1678e718697e5ccad99fdd5a60f84ee6aab7cb97ea5a7716f8bb7d345bdee785f9aaf2c3b253922aa68fb404c1941ec6b2721f0a16d8e5fa5ecd1febee5cc7bf02437b9fe3b2f2df56e0b8ef75fbda77db6ed7771598426eebe50ff97c32fea6027397297c74c3e9a6fdb9a7c04e775de57cfdc11c2dcd5260db73bffae53e5f8d13e628f0bfae4fbbbd2d1458df7d337d29e5a533b3c19343f7df617e0f4aa9e91398d7c9e57655bae7b95f27b08c32ee48f5cd3d3b5a1daa3e24d6e93d12c7f9b510058509220a522188280816db6232bdfa7b79de3232994c26937b50670d9426b07315c647abdd6e5afe6bb09c5ac6e82a9ff2bd7e26f0f319a97e95ef79e5f325f0ed306b47217d7cc69b95c0f95a6a257c10e62ded4d02d3d8b9ee34ef7e637417093c2db4f2719aa9dd13da2370cdf349175faf904e5a8dc052be6721e435736b672d02c3b9e57d336e7af5cb9308fcd2bebefbdcb076f9b20158eb6af3d4b33ab9e78e436019f9a4cf6939fb960f85c0ef41c9dded3443c82dec41e00b6984357279e194d4752070ef953fbd7977b972e9fa0f78caec5c8c10d668b973dd07ac398d79c76c1dd71c7e0f98bafbf2767f9d9319be1a2cabbdba572df9bbbb721ef073d6eefa3a971d52be039709a8c44eeaa5a13448510c832000c09071470440033314003040241a8cc662b18822ebe307140003457e66b0382a1708c4b1401406410c84300804210800000cc020084232b444631d8beaac2e00bab958841852b068ffa970b87d558eed33d92601753b5cd03b79b7b1512fbd9848ece40f8655de801789036833d1196c35da1ee7dee52bdd3c1b10346c973db80f339070ec1f289d79b4c54269465fd597c037b481544772f5ac1ac84be229a3933e229fc2d80072cbe34c2df3fad89cbb2d03e08e3e22c41d4db2be3605caea93c68909b379e831d0f416d97d3e5893695fa8ded7fea2e31543dd37e7e4b1d4589efe5844893db573245f0ee26de1d5f15fc22207bbf4b92c69a834c09ec1e79d1c6205cb50b70b80243012001ac0446f08bfecf0ac262212a8129709c964740244623269a9645fca45ec0d605dc52ee29631c958757c45ec1a938a47c540c626e3d6f18638c4d863dc39a6106bc657c5ae6292f1c818e8d88471a3ee2684953970c74c6256b19e71d5c492ffe708c1472b8ac7e0e97996c5e11488d8f411e38d4ca7c040a2f7398b03c4dd9f59a0c5980446e289acc29c020071baf2169dbd37a0d6370acef810b02fdc29ddde6e46290f3364610a8497d9c4a88ce22f12f5db0d70aeeb832ba06e7af2ac0d3ad6c0d5ae46471921ed43b61c9423c4fb3df77882a3dac2360a4df057ce6839839f328d566bf05f72dcd9724541d42b2c8e9473d7cc18cd6c40f1a305c0208531560f4cb9e8c78c96722db34403f3a62adf7de0c9f99a5436465fa32879863d6bae274a65a6030bf9f0d7ac8ed0d532b0ea40edbf9829d64bcae3fc08ee07dda14ac4e220941cf57b4c1a8ecf08f771df72b9d65459c5304a78ed7aefb4b8eed80404f91124455359aa31e8699bbe6e3db43181fd8e3ee44df11ab5f1926c043922521eb9065621702921003b4f927eebaa57debd01319850d33f853562a5abeef486f9327be56a26eb974bd7f6e564644a80ca0e5dd10f2e1ff97c99ba5138e12e3108f06797e92266cf029dac6d8d7feca456994ff70aa01b8283bf548bad435e0445f287a7deb530d4857572f2d85a01370b4a6182d03b492c2b54a7e05d85311ac0905c51f6b63339ec2e512bb31c1eaf9adb6876f49e3372c56cec57c487b7f84ee0c5142f4af63709eee639b188f52cf5b83402ec99ccb9d0f4fca3227e3cac7440fac2bb431d42b92fe0f1ae89681fd35f678502111df3596f14f5d2819ee412930787ce2a6c7bed3df16ae056a95c7f20e13713bce62873c2abea38c1f9518dd343bdf8ccb107485bb3892a10588289850ae6a05567bc34605f88ba8cecd16ca14a6c85eaf16b2b5a85e64f178b0a12d05a56b729924233a7b1f5eb30aca15261981ca19f5cdc00c616349014932708bce87a8c55e418600eb0b21f8c4c045d853556baa328de82cecc70375b710ac3f10a7cc57dc83b20968369edec9e99570e25ad092b56c0c86c3a01f72d358de02e5ea0244d25ec2812da446c48f8571d21149355ce01c98639f04c9ecf94f4b19486a93ee9a2a95e365ab046a8133d6298d121005169503b3a90de4c1fcc72100dcedabf6df27fda17433f5676c4ce3e84021cfee321f9656a8b07d79cfd97fe8ef3e606cc6148f7b9322c5c90331b04699714df12dcb476314422e9255fea0f23f322489615eee94897d904bd4081979116c3d12580ec398516275e60714d97dbcf63e3e91e7b64abd9eff89d2a50a39f13ea816db9380e7385b67e5f07b95c362f1e0a2275a2d6515636864a2cb1c13801340965400a7ff222d5738c5cc3539f0db54946caeb4a599a5c76e1ab9ba66d319c67711613f349425bd0c5b2f7090f686d1030f9d206249b74692dc4d99d7cda48db9e81e8ba4c5d3ba495933e1ac9c676325d0bb7bf600c96154c3f7188c2fadfd13d5b365e642c1eba1f4c2e702d636aff087574c0381b50178e924a49a0761305de09bba7140d28fc46a33e45fe64fafe0acfedc7de14ae875aec0f6ccd731c75113ae009400975328d73b4ad9e9ae7ba4ff5d3c078b4f15622e4ee483af7852dc15d6266975c98b887d8683e5b715786b194fd91a8eb88bd6502f9ef3de8a0788776a2aa9af51b4a0f6f6213489d4aa6e71ce752a1a1527638ed14f78d2703fc00880ad678037a7d3dcd703ead3f946ce8947b0e5712d89828b11408a68c385366e33b5cc71436d17b863b9b5ef6d4a8d84f080c399d8b21afab437fe7670169789fe7e544f92823c686eff85e4f3d40b6a6fa1138dc3c3ecf6765b2aa00560a700900385dfdc60fbb2728134abcd1231484b2fa1a150c1dc977088a8a76ed2fc321440e24585d7da468e509b05894d1102fe4bdd387be16a89d5253d2a2c879e5b26dcf6a23663507bb4dc420bce8d3e071e47954f8a39391212068b11b4a3b5d748b58a5a717a2fb23a14d28bed2e132cdffd8a66b6e1429dfafdcc2f0b24c895176a7a3e4fea01984af9cf1d25a23ad5c7a2b09d4fcb275b38c4b68ab46dcd69f1055f4bdd28bb78466959069e412a9d6437627c02799d29d98ac3ea2396659eba4ea9c2729b3a9ff9abc0f5e5c3bd336a5b9d2c4eb946e4ef2ad43ab534f98cc6cc32d591b4efdd4f47c66f15993d541de2fc9dd833693969bce57cd7de2654a756ab376464a9995f59d852fa52fb21e42805e6b2062b863a7885e52647a278bbad253d3040817a5aedba1d419a204d500f2c1c7a10fb7e73c6379052236a7975b962472f1ca1944bfdf679f74c0397e6584aa786738eafc127414928d2869af5549acf5d2dcd83b009887a77bdcfb48769c1e18511e0fead5f1508dd694316445f82b0968fed8a6467f7a73f41058f78746db9365666243b9db5b96beccc68ef237a08ce9a6dc4f14f6ac4798f3bc8ffdbf236479e9442a7232ef1f64be3fbe93619686c894b825b2df6addf1c7b9913a6ffd2ae8d0a5955bef5a2e261ed913747777c0a508d5e8a3aac488b9a389e59f26979d591ab4a1c6dd66f5d227716e3bd3e80cab2f0160dacb1f8d86c6750358041bf83f2c0cbbbac9355a0beb8905f5a005f5dcc27a6401eb4d0b838c46cd6ac7b1905e68a0872f343d7e8611286df1f2ea08a9b601baa38f0bdc6ae5c03c8b27919ab346ce381ea0d62e7c9f90ecd8fcb21119819086f4c3246a172410cf9fca11e6e2390bcfe09bd3d13a434e3677e7087899ad32154a32206b75e8c1feec9c016fe6a3e9465d2c570d194e32d19d2200c946b6e9d882eded5e812ea6b3f98cbe598ffa33e66478978f482bcee8e322ace03ba41255a5f9ab0e9322b4406dcf8a0bea1cb96b0e9873e059be211d53b645c15093c81e094d0f15fd27f039f86e1d90eed455b9c09c33669786408c936d12881e55b42ea46beaaa9c60ce99bbf0003e279dad1be418733b162c3581ac93d0f4105155429d93eed60172c75c9d0be0397c36dd50c7c85973c2dc038ff285b4265375129a1ca2ab045c72062dcc818f49b775815c63cece09f01e3e9a4ea873e4ae3960eec0ab7c413aa7ce54bad6204754e56a0d27c6360b9b94d575ca1db0bcb14a26d2d960489bd49377ca30928fee398920257dc9749a88f0d0041419e52673490ab49dc82689482b9d9720a7262a872240dac86c9a967020d3496ada449c8a567d36d7066ea973429a92a8534a2e49278f681982803c23a5692e71818a536cea88142579e9734288e4900768c4089a487cfe63d20493cd9c8537308dd1b5e704b60723ad0c694da64a29e473faae1ae0d199b4f0063626e5d605628d413b4841f7394639056c4ee14d09d41db11a2b287352dab241923167e704680f234d182a1bb16a529873e05d3e20995369c50693ccd8c20cd89a449b49a07cf2d13641d1f179c7008887b1a60cca1c496b6e1863205a4621e14ca96cbb016fa239899c210cc834729af61219ead0e57c659fa3a7fd9d730c3ccd6632cda876508b537c8e1423a9492f9d8120af9e6b793aeb808e08f8e13cdde49c64fb30229599ae2b4b04a5416f72810639bd644ae594e3cc95b108b1e3f49238e59c188a39c55ea85748d17fe4a8c3aa111423222d62d61dc0b61814326a0dfee91419f5a2bc50959b937f6a433a33545c0d5220b423e5dc098978d3a8e93efd210441b4cecd3983794e5f96ec5ab3c9adb6cb7d30e3ef7bc004bdec108a9e82bac9ec8a0b49cdb9d14c71d8e2ab77445b59028b58606dd8c02bca02bc8696f78252f059f3624bc049c75ff678d7d0d5be5c440b8e687905d42fd127e5371838964d431ada9117484a0d8d2d1bcb38eadf1cba0832d0bf0e1ae02f9267b8538bc03890a131303e1295cad4c024ffa16bbd56a41b4d8e05c7a6c55e09a790458edf575e4843f9a3e8df2264b248fa601588097e37937c430bcb9a7f485f5e08fc29bcb2ff2d00a0ac18e83d5a9bb6363da917b8a708b1f260fa9653a8c7cfe964c7176d69648029de0866b761bd194b03aee5b000a309523fb0a128be8d08c32dde9aaf8d0f310f0b05b1e8ba6257dbba4bbcbfc16af0503348e1ccb2ca2ba247ca799443692f5a648235a11cbc003f3492944a2c3a646222238bd2989eb1b710fbf0862f793f0ce5a53f5db694978173d1c1089ea533f2cfe480300d5957623150411d5d9d008c5f0218106bb0685ab0acba5a0f4e0f8d8a3dd48b08c765e19d33a59f8b9260a010f3374dbe127a49e91b48bdc3c600e42527950b9270360a538054c0097aba18b250527d670aa2684c46233d3353457bfafca8e21844f738d683a7bd5fdde93ddfc3f78c0d6228edd6c1850c5fae41444b334a6334d498098518addc683bd4d3e6b0ed3bad0a3c57da30ad4925da70c64ddb25b9c9588daeda9d8bc38462cb132456b38c724ed075247f1f0e4e1a45de60718f35b804653d2457d56eec4ecfc3ad2b55d0b5d9908d1323129101d4c15f79c40372304d1ccc1ed3c0f5b6d83b9ecb82852195c3bc5c390dc1cb92bc918192736b1cb3ca6c284c2ef828523cbd2112d673d91abe964915e473f1d9b7120b34730fe19d3c776101c606437d49ff2a6a003e1a071e9ccec8242b9315d05fa82b548e09ecb55bb1786c1db9c06041beb4dc43cb7fafb9309c86b3054815a534dfd2f515d0a2d225298d0ed55d808b98d8cffdbb55b2240834183e843fd9ecd3fb419e214ada002aaac606bc1f5c9e7fe8be066eeab189525a1b2fd882707c1bec69e8e19c17d63a1c86866185dcc9b174e76d45444e66bfe178b887c2acf0b8a630832b279065a3446f8c212aca642b78c9813047832a015dc3a2c0ad7fb08a4b9a75b962d6c478afb0710e3efc07b4d4d298b82c96f8a1fd42d7dc15fb7bd806bb59af2617fb395dbea6f1ec35b3876ac02f12c40bb3a7bd73adc7d1aa17b905100e03fb90dd3905ebfd7e22b1ae9799d5942ba3f7eddb050a1b8f24057c6d1e3a93fe5923402f02fec18afc71c0e0ab8d02762fccd0e11239f8b990b5e0805f7072b08d52bf15583f89cf112c3b228c7f3779f4788e1804ac9bf44318b6d0d466cd0fb74e39f7382d1228c0f1403ea33704c9c25ec7805581c40aaf1a65c1bbef0f8448502f73511c66baae1ce5e4b3d01ddb53646c6478a3e1aefd63871026f0bd3d7879fdf1d76f8b3e4cbf1eeb947d6e36c36dbf5472cf134b612f2a1db37f1e8396e32bad437276ee34eb6b1563b1b285f12255435cb810a0d45d64e6824bad5431a0778c0169a6beb758b5f8034d8799921aef0dd3805f754fc72addbb05afcd13a9db600e2a309865953079265d1e9a186774199d1c89a0ccfd11d11a059551ad4bba74c66eec069da4db33335056675bd5ed37fa9b05e99807aef7736f4b557cd7172faccd445909d731641e585adddbc757398ef9085913d5bd0fd348c34ed6ae1dbdf6d43d69e39537686199994237c5bcdca2e170acecd7e7c721bb84bfedef11916142e0d2ff3b7440abf8900de9fbcb8db5a509bd9003fce915af497e0e34148b88a082976217433cff16595a5196f4063c13e69705fa53b6241aa6445a43c196aaa7a53a49a6f116ea5b5323e12284199ab01b42514d17d5a465bac4ff000a44890347400fd22bee2c897ed3ed09b063e6c8a02453e468bce8280d320706801db55c61c025b6ea7a970aaf63eec767bb5f543c12b87051259575368bbf9675d8191455f5ff106b839efcddfb4a1b03e5726592c5d66ad34bcee5f670f6dbb15c510412ef046346673b51c074dc8b90ae38b20a192a641ad24be9ba7858c65e7b646df1c346814d2803d98c2ec8b7d17224a8d5314394498d9939fce0d1125bc8a691b3292e62dba411bea1b86f10f57003de1fef1bc58f9aecf69dc34fe9d56cbaa11394e44305fc852c20b0613c512900f31b1766033a153f93f9f209ebfb6c59c908df47c90c215a82d7883b2036b47a3c25ddafee22e821bf8b2578aaf9b9da34dcce8f1ad6b98fa09c41018db3fb6c126294a535758a6e85e155e244c3cf31f05880ad33bd6899a8ee276dfc33d098b889d6d08cb84a24abf68751151bbee4a2644e54b5f2ba35e042e7382cb218aad62e4adf66a46f534c49878f644f348b019adc9c024396edbbf8d9878c90a545e3298399b0e3d7a495d4b75d3ed1b50525d75d25d349348a3c4a0bcd878c589181b8415f5f1a8eef4084fabba488341feb019d38462621830ffcac77e81f880d0b113e1342efb464687909134a0cc2f74a8e5c0eda93777004f610be2decff51065951182c55a8dfc3a6a4100e2b325b3658319920d53fa29a45eec3c8dc37533274ab5004fe25f506ed967e7e3256c995b163ee93dbf9ba1a27bd65c9e864c7e06485ec58436a6d7d746f796c467760a1392da1366fbc3aee797ca27e685d3f9ed5a1c9fa25f2d71c9aea1d96cd7b264c9b7d5ca52346bf426cae5cf1aed1af64c3d3fdf80a16ff496809ff7015ecbfc7b46f610fa06c17bd9b5125fa7407fe3cee0ec26a8b177f5e9e507ad68195e6887c3f1c264435695e8616ff9cf543f956cfe9041c88962e6adf908d84f0e8a79e098d5d411e7bcf8cfe3cffc9b52d9c3c56e195821bf26be92ed17a79a324f2a0e320b7d4d174f669341dbe8ed7c0183b64367d7127d9fb4e8cf7a3ee9002b01d6f527e49991e3b779247e24f84e79ded4a0ba4e125fc2046cc10a91c5e210d5c67cefec3f5e35b3c5d1234d138bcf940d3fd382608e59bd06415ab8482582d6b22838a364e6b08ca5b7899a378efa1bc10a751149ba155fbaa0cfe6fb681f6d73967e2efc3136d7e788aa8eecc49e39f9c307786ed088c975e8643b25fca218f92ed0b47368b94b9b48b6addf001802780c55b1a9a3e4079bd6b4890f415eb5699e42459f007c1c1ce72f921c73942d4d867d813e2983899d953243c8a09e506e5d0896d75341f8e3433d9606dcc5895cab099f2335f8f4e2c7328b6648128356657d6c295d0d88c6cb2216d59a2001d0e5decc9fe8c2a63e595532ac492458e11a7df7123cf9f1e9457be71e7242a5bdca0feb2b141e02777de123e53c9e9f943dfb120f9ffb4c5dd3f837988440c38cc0f9f7c67c23951207702982e6b8e7813ff84bbde1ffec31ef458dc289c3fad8a68cbaa8ea17c8de195131e89d826c60f4fcbfd3fba96ad87a1ff7f3568b3a459c307d1d1cc0d73d30d06d82fbcafbaae7d5cac4e33cdd08f7d04764fbc7cc6661d4145107a065bb2c15fc85430501bbd707f9afb4b4656b7850a7fc045bf6702df3d3cd37f1bfd319a0c50ce8009d9e1f0b6e92d81ab173ec0031d60ccb8a0c5f4dfce51dac1c0eb5b47bdee370eb6a4e74dc0fd40874fad848694f6bb0dd55dd4ccc5972bf754f30752397cf2df559aa02969eab617c5fabc3a99e673d10a7092d9220f32ee43b9f10720dfa7ed07dcaef299b9456b759b8cc59275bb737d7a6150b3b066dc5878939fec7159e23c860c338e18612c81bffaa2589228e0f81d5091811450ddc0316fd6e540a362707f542afb48a9be86a09b1133ff4b541efb087d725364fecd79f0b126148772b84cd6bc4fcbba7444ceb62d23b4bf9ea6ef00f6ec85333184fd1f43f586af7c43ef1d2b7cad01c8eb86149651fdb2c57fa48e6f2b8fad5c985383fc42fe7df11796abc5990f5474708eb2544fcac6690c83ee7d837e03befa3913de6ac6e5062064ec1ca0ff4c984e51782ad5448f825a3cf5b2e0900f2dcbb29c3d3adff827dae32fec7e832a00eec9962d79eb4ce75d6b2264603ab9c135ce767026049de793f7175019c3983aaad8a5945f9708dab586863709395b089ab77238498b63d58a49485e3b5ae955cb37bcf0005e990f594581f7cef5752b04cf334201129ea453f15b1fbf05e7ca52b32185e5ea4829205d4eaf30240dd243ae5274d29be51b679423757e082aaefdc26e437257b7929228b404b37a1e9342ed0c1981adc393c775db1c69ea85b82ab56f2b6fc54f2bc3cd39d7908eb9b7911c5db1a2115cb415338f01babfa25c4a1cd4e6934a2a000c13e57c7e999b638ccdc75dc377300a978c5bad2b910d6923b436c98c6354a938a1dc0802032c9edfd3bc863617917bc8008c2b42c06d39a1ac2dde5f0c06cd8e2ae53a7b0d8a92e969cf648c65623bd01fd77cc9e8507c74d98050ad114ac4af4a20463c972c39f3689ef5e17b1ca0cf338f776642a7382aa0811bcab7f7be93b4beb4fab8f460e44a58607dbd1a334ee3701d8182834422fb5d122f379c3c0a1f0eff2a9b6ce16d899e295c505b9f16289d2a3383e4e51fe4296d52dc3e481a81259a9482f98df64992d80792207c70faff1b43e4ce9d1b84c63753ec36f49ead553d95c9d53f25570976e57b3a189c195c4d6ffed6ddddcb677199e80be12d315719d2ae27712c208823ab3b795adc24901d0eb3a8787a95621329d32bb82b9ff0010e3778ea4248d4b402eef06d55847187908a0b7c25e5aa1135dc6d35e73e4d1d2dd0e8efe213afe16a8fa4b1ce9afe4dbf7c35e5c999a05a584c1bb88e87c060939a7cd55ffed0f8cb7bf74c692b7b2f7bde3e082f58dc0204e0a4ff4e8dc414889b5137286d78e6e7ce456b2b420f6e2e5ddf11e1586f1ed543cd7a39816b5b33a3ed5a154f3da19f4f628d7283297ecef98855490692f6901e20f9a9bd351f6771e5add560455673c33e39e7e0e1c83b083df551187bf44e87e202849bcdcd5e18d26c1e8e409745dfcc58928b78f5beebbd3e890af5718564a87ca1ebcf0333c91e91301a8ecfc4d5c1e81b191f1b8b6c23de4cd015d716448b00041a8fb8a87f2614b191e9cd011d9f783418d09446b91ce86f76d73f48bb2fd0fc503f2d02dcf0ca82238fb1426abe772d971120f34a4add49945d4ea5ec499747a9a195c6017a7830b3117423b875e7eafa96f3f917037d0f57baa89ef9e718e71cbdc7a0cf1f1652f97fc9b63c26d6a543030f50e0ddbecb766be80949fc8327821dec4c9b24dfb4a1c249b598f1c06d80423d17c29a181cf84cf493ba81e4f8dab9ddc3f9b4cc71c0aacc63ba9cb086225c5069485389a10cc5e6cadc4d6f0b803a253dbe351b8bdb5fc2ea235dd5e365c3478e5fa42a60fc12f0773d4332b70c69dfa3cca8bafa5ffd6f293f9ca150e010c3a73c68cfa190ad8acc6837f3eb6ef5e32d576d2eb79901d576054a3e2e15f79dc878a5ef90455921c178b0e303703c452215bf36cc98ea936aeaba23ba185d29dcbc72a49b64be6bbdf27eac466a2572534473c43f84a2cb08e2047dc4ea902623031d5d3205e49c582cdf01a2079a1a82406a7feadc78cbd35cc18abb40cdf12cf113b86b93e04f9dfb611f7296b1dba111fcc6314fe38ac77fdc93ef127c00dd5c5485a5242e5593dc926487fe7c76a8ac1b32fe5100ec796edb2f84ec5aba117edacb8a5183ced9b81b8046ce69d61a905bed823433738d6ae2a4b71277b764965bb6917bb026859a4cf54bc4f693151ee894e312b2f87294d650cdb8a27bb81c07c96a347ce8f8256360e02deff34f74679b8794e962f6978987a9cb30d36ef2fc6dcf6a240efe25bed5b8d45409d9dbd62297745331f74965fdce93957bc7446bc0cbe58c941061d86b1e70278fc2dee29c94764526fd7c849ed60b910961a13ec4beddf18d297933e12f2a41d7680a777a054f0c5a5104e208dff59d748a475a0b60e1552331e51e36d0fac0910c546fc89680411df1cf8469404c3e3b392f87c3884b0922d373778b02a8a8dcb00c7f2f42dce1ac8d093baab79dac6c92e8b0b0af26e364f8189dd37e16f5c7bb1270d4ca451463b6548eb2c0aa81c722d5843311be8164059cef94bde348c0b4ef0ccb429341c9a65c6512ced83f9183862ff20866c0249a3237cef8a286b79ba70cd85eacca1c744129b4f274a9a2a0bac4c6f3363d396c2eaae1be044a14251f8a7bfeddf23840464b556d050291bfa97a12dd2ffb00b4ad59ac326e695b78472bf8011d3c4b82255bf0512f3056830b76e8492d3457028bf6c0532b3256830b9659f78328b242643a287c4322b9ee60d14ccdabf3a19a58bb942f5ba3d99e50ba961f7693d59a58bb149ff606db9654ba961fd646bb2559b9159ff606b335b970975ed646bb25b1742fbcb626b335b9702dbe2d4dab2db1745f3b3c5dbab5655cdcd66d73585bfcb22d6273c3b538adadaee612d4cad2667089505969811b062196173c4d8b1e8b811d88009d07804d4b878ecb078d81c60c40a325c0c2cd07c38de78248131144e33084e2c267c3e25329a0231980e31070c3f2c869f1b039c09011d8e06562408a45e41b489ce70c676d9a3f0c174b4c061baafa725d43dee231943ce04d857a37b80e94637a4c258019b0429916a785d73e3a711dd9bf5c055a84d1b7c120be2b04c8dfc32507f61094c0205d5ce707ce2a47bc79252538a5970a4527b6015a4815322bccf0037182f206e2d1488313af9c235878f99d306e83de0d0ffb2ccd9729d59a81f1d987bdb6f3478dcbabd5fe929ee56968d0539b0697dfdfce7aff4758ddb30e90982f6b67369428f6869ddfa2faae0d757d654f1d4bf0111026032cb28965406495e2abd5d3ca947458cc9ff0263cc7fc44aca5cd3387616c2ddfe9d39e82e2728ffa5ba4a11feef69e464ad5cb1a8c03e712464081629d75e6de9d2c4e32c2c6a6734f0f2b10a51d49e28362cd077c0e9556156dec7cbc97b0ba78ee490a99ef9317817eaf10955e8644ce38171cca3363970ae1bf5ce59c4a7f2c477cc38355f8c5dbe74f75dd78b09e3c3ab77e29e801615eff7946960d4ef90d81a77df1d6d6422d641790409468a28c53b5ea00ee3b32f5e0c81dfa803d184dc98daa2b9e8d7d927956ddb1b43c8afa3c6571fc805fdb9d66b0ce9d34097687a18ad97faf53aad20c396496d40e7db759b932d360833e6a13f08f20e5b0d93ceffe7b91c151134319695c827a65bd1352c0fe64b793121322c8c3798fc018ccb7e0417a74a26d62520468a98239ed9b21ae651c5ddafec1a091f77d0c30becfade1f44db9eb4ead0ffbf427f95959d4b1b973570f0fc8fa0e2a8db3a3f68424813f51f07a4b7f5482eab4d99a533e79ae69acf601c4d7bb4776373455949e299ab3a22f73380ff8434318e3ceaeaaf413879193b0d3524712e391e1eee8de46d4f6a71cf293a27207aff687db5c1ebc218b366c04deecc1410dc1d0bb20b22da28191e31e317d96720c745087e1dd7dfbbdf57402f0891ed92c74fa00393e219de3808b27f5b8eb8e5025ae12231e4a19d15e307d74052e41379b0a61cb1c28de9c92aae175095f51f3327745051a70e7796ac58e7817dda9da2b729f06b9d67af6e68545cfa560f6cc72481b71e2d303a22feca1b9e40d86e2967609645a3bdc72b9591bf330912139e1764284590cf9e70fbbacb659bd7b8f17b8d3c060c90da9d353481682d1242cf2f6222979b745f712c8e85e895cd863c41eefc1f9bcd384f0a60fedad74868fe83b0bad83fd43e6c76155ac0f141ecffa22ebcba2d54cb05706f3e9a45209ce57dcf77fd6adbcbf7fab206a98de7b4d4cbd2b91b537dcb63a3da17e8879b6f686486bed3ccdcbf4a24fa77698f2d694fd51b375d316cc6336af918d0a737a7c742af68e8c2ce921e2e3c18299c125b93517f9e4b632d0b0519ba23ef3b8273aa5a3be567948b782706db1216bc458ef99f39086aa7de77d3706ecef21a52e7abcf245f7e8fa94e4529cda4f9aa6d44c38a1be1f54df5377c228ae6013f0de26856d074a8207cf68db208035ed049406b2c9311e8bf2eed01d17f0094d0cf4ae075f0345d94a09f033bc3bc8d759fb0e4113b0a074e719afce85c4e4cd66ed6dd9869eb7488a3a33effe91c5f911571ca849e81b59771ec8fedb8587717b5bc73e8f983746be557626b75c784593a6138cb9efc7e2f2ee7e49a672ecd7ae44302ccdd35fb1e34d7aabd55bfd67add0815149b9a6b84f1a18f32650b445981d92f62020b6f61f7339cc01b438d04e72bd810628047591cba22bbc060a1db5a88c1409289cdb48448898fad56516657676032b9a32cd5fa52e37a897eeb00ec2fff681140c5ff8afe30c80b0f1a355d1e18bca1c7fe6b0db49e4ae71d35d08266b5995d8d05defbd2bae7b7443309d94d7e0cecab1a57bf804e0182037bb9a0d488c37f36a6629b429a3b0621b22aed3cad92926052e4390a756ec0e33b7610a127dbe9873043526267033a8beb2c7b1dbdee88bc12516b19c5d9b00a3b80743bfe9feca0d4ea573ea5396234937afcf6b3c96573bf0fd9322c85f4726f68fe288e76d25459251293ee07bd358cca4f8dd337a8c6fc77fc07ecee6d809763effb392924dc48ec73e367afe0a4fb169925a59c81eead0ac287fb161e4b4945d7beee34db99a63556f179388559315a8752a9b1158c97912da33a11547c684b4e15f5dc9f4569f637826616aa9fc22220e806981edbf6004002581eb5f9647442789ab2a0de455fe87a8bfa3dc4145768d3b699936bac088f2aa84ba82d8337ad15716dbcb0236f78184ceff78ce294e147686fb9fa920fc2d6e6f5d992cbda4b4fb15057b961e84bdff294409de6da42ec75bb589a46e67c9eaec1f4ebba368a5ebd7582d15bee38022f3418786b79c1d5c363502550d3c0b6f79a9a6dd841b93f1a63b29bfeeb2de0c19e647a8bde2efc59a96b7d54b18ba20faa0317921b683c2ceaf379be0a6a73b00d99c30c884935cfc3ffc800764ebc0f5f7e334c4fa2b78fc2100ab1ac0710e36bec98ecf40980b9a8f83f89ea8c9c72471d8bd055384fa149486d498960c3911385ce1b556cb0c9cc946db2d607dabfdf9260c55c13f70cfe4ca11714824c1236fc1fe8f5b2e1d0755ee01619d3db54af974db0e4dddd21455e7931f6cc1844a2658cd03f809fffcf4e550b63a6811054b8efd5f2d0cbb95ed360a4cebd8c81bc4c161252cb6b6ad0bf708d0d92f73d3a84b364b8d14facb70da50a258ad30ee9c859513cc0d102456595a900ae9ea5bd52749a6416ba3950cca5cd342a0bebf3c2a2ff241bb1878f5a77e5d99fe162730ad1bb72bbaed8a6e8084b313cd2e4b3942a0679e6884ba5574ef9dfbc6a9fffe9e6b357ecf29071ee15a1ddfc8ac62af1f4cd20c97f7faffb47b3ea60d2c5c3da417845f8cf4e12836b28fead1de8d752b6c5b4844b5d881cf4ce6064634b745b3da6b57a132ed2e4eb0837ee0b345eeb8e8e5fa1eb2024d2f774218135b82c8a60d40345663c0c0dcce5dd28487af9fc75e5bf9d66a3af3dff3e848069e6be029713f93e05e24c122c6f330445b084ee890e83516c33dc8d0edceb2e925471d13eb3186e4001cdc1efc12fa4987499e3430bd286f97ed18409918847847d00fc72506e93cf74023e7848390ee70910d48069b4441c40d4dde34b45933d6a7c2ff9f5c9632669cd85e0ffe377442308a2fc8efbb17eee45ed823ce0cd1da1fb488e9f3c890f474b8520b88b0c7c47b3cc1a4d56a3a4947a695f0a47a89a7f6001b8cbf0d44ee1ddc66c4e8371636edff2621e40282f7b11fe0515b3d387b646051d919113506752658cb3b02e8f0622d69073b87d311d3c7eef4b1600bf06312545f011a49c6bf83f98e19d15ad16b4bb93982228fdf1a882669af2af7c6667f772cc919b22ec9fb7139e8eb64bc194f4ec1b0425352a200957ae9b73394af9f5aa5eea6543db5707828e16bff44a565cedd1ed2013474d4b2835e81a9760af3f0c426644d34712caca212efcc881366f6497a98a46522838ac29fce9b0c13874aaa68630314d1d2b9854b0679cfc5d6bece90e39198ea3ff54ffef50a76f6b3ac6fab633e4315a479ce598c1c55f1490bff691d7f77c850d23f7b2ea3f8341e6cc99f7c9784677795ae89c4e796df8b83fd27b5aea9122297bf7cd7d2f207f27a63f13027b88cea3bfe06242bcccb54ce0a2d78e264625db507ba7e6cdde54c3c1352ada5b3b2c55b4242725d78b4986b93dae9c4aac5d27f5368eecf4a7861b0780a3d695dd15585817a584f4413b0b23b696edfcb5d0e3321a18141f06446071a9c8a9a6223baf047a7b55d311020afa26355094383b8baffa1fd81179d5c7c962265fbae2916165565f8c75b31dae0579d7f252ac94dbadbeca355f085b4469d7f0eb0ab6c69dacbab8dbcf547aff85c2a80953eb94d6cdd7bb43e3ff53b1a259bf1859e51c35cf7d035743cef19dc7340646bb11a781a2fb9b9d53f04f3ad473e4d908d30f7fad28c59a6aec90addfe8969e8f0a33ffb8a70ac1b8becc38360484078c43560bc09a10bc9687b6caf9c58dac503b239b30fa3d3b7d1a207a97ae85d60b6e5f675d5677c9b6bde8a5d5193cc38b1b67c25510b52ba92ee11332a228250985512e159207411920255153371466b504ac0187a05ee44805d34d58d3aef296ec520c54e8e8b32b840b5f2b91265a1b29a37151d728f6c471a31a9926d008b0291bf0db9a85b975333998e4f3d05e99f7520402e0d06747caa79db5614c093b166bd320c87828f3f19d091fe47c273d0608fd11fcd2dabb188827be6d75e163a4661719761028c52022d065ae6dac024cd38af298adaaba7b12988649a48dd4407526283970696f400309e22f8d76c7da65cbb10d52867af268e2e8e775e0662757e4cc60966db234afd585ca5fdb7a1de6330f63172c1c853d35f4e9cf2b6d3cb4e7cd57346e28abb9b3cef78f94362c749cf2a4fa0ddbd50f40f89f79239dcd0e414579122f80d80a63e75d2bc78e9f32b6ae43354efd0c2b8765eb2de0b5125788e14ed6324edd2ec34d83f40e7ca311d8c531efc622e7290b61cb615cce31d748e86b2a4161a707d1b264d3829bf1d2a6d4a52fce5c4dc3842d5aebbba7426595ef6d240b4e8d1f4759132abaeee6a72e67f3590ae496f8c883931bd32e723ee6a49599db7a89572a19afba26fa8589fd26ea32491199ed652cfeab1b90c869e1f224d72b845822c146c56276ce62ab94b3273b03b69a2dcd15ec9e4fe4761ec076d0f1a28d4fbe510255a01e1310161ad9cf172a0645b2fd022da668ae3170678c7d8202f9198f18ca3d90bd10385176c6ae8ce3e47004aa63d4f5a99010f167e5078141a8a06640a9a432c2c5c3889aa85a1b22cf13e39380667241c404a2cf0a67eea4c2c37e0c5184facd9735aec88c57af419d8805dc8569245b76940406305edca8a3b22a1f3683419b68256068cb5075bf9ec41cccbcd626e5cf064d1fb875879d6369d9b29642bfee1ce5eb6081b6fca47171c152e3130ccc34224a39df0a7df0b7944134f04c09cf09e4cf03532fe4b1687e49c33cd7b3dbea569759e78c905a23442bc41650ab68cec87c3318d24dab089686ee25be84f0048d2a7ae5ff5cb9c3ed9760f76f271a3fb4890205661a4d05a567eb90f7573621caf2bcfb0e00b94af9a2cd226714a5b8bc758ee1e1ca70f4cfd6b57b0ef4e8df4dbcc6ca1c188f2424a7fc46a3370281f5d37073ac96022c04e65fdd2ab4195ae67a76669d96336c35823105ff37b6f6559af8b196f608ef00f81833271271ed2dda59bc0ac58c5709e1f0834a0d74e0bc2c7f5e9ade0910d68aa16b032a415ecf09c5eb5fa22739276d5d148f01aa7b4afb11552e849aa80a2b22105c413b0f852b5c8f0f10071700e4c184be91374d8e8c69f269d4bb858a19f2851021e879a7b80ffbe06f28a44b666da367984957f61ba5562829a03740b76ec54ccacc42b711ff0cfe7f771c502e76eba2770b96fb75b67cd658b15e4e3d798a9bd52c5b729c88b4e5504d8fbd7bb0befd04f93ffed9c1fdd2507bc9f9e2be768f3b38bbf82ec2eb8a86d10bc7f16a5c41d15c485532f9e377fe4f23f91bbc7f49058eceb19cc62d53928ea97b1d5c155363a6dfd2d9fb538385b67a9fc7988b18268f1c8d164a3ce88f19a6ad6a1c706916368721b043df8ca20d536b30ea1f585c939367eb35a05e852ff744e61cbd4b1e891a7452ea8a5279fd08b7e45b97492fdcbe298547bf3d00bd68f231523c3099ed63a9bebca39c23cf16eae6463ee9a66b4943b977fd95cb8438f69d1a9d7de0e4ee74c0b9cbc4e0d9cc925e117112fb2c55306dd5a1525690feca6d662cbcaab6d5ec87e0920bb56d7d218545f1678fa9f1c41d2c23d25c7ada4adc364bdae26ac6e1205dd4e2c25b0b233443f63bbc6bfb026505a73b39a1cfa13b9f8b1839d7c363bddcd4f40061c0d0cd1173fddbaef75d4e8dad60fbcb2cd51a97bbf2f33e1433c5becfd7b713ac924b33ff491932db1e00ff9fd183a31e855ecc8746e39a361507df482fd49ee2fd9ac6e3b1356e521dff5996e121878e630625921690ebe4c7092ae62073f27a1763856c691cdff1a49600ca9739866fcb7a2f19dd3e5b3e590b9114d3cb00c264e7fecd1823c3b2a8c18df6923695a48ce6def01bbef8681f9f364be29e53705617b6e78cd906cb93e797b1107bab1b6aa65d90fb617e90e395d9e4e6e390d26c6ffe4703f9cdf9a26bee58d3c8fe379baca0c531afbcd309f4f0cc449c05d20d9e4ed8d48d0da2429bfc37ffc2f9e6dca5dd0d0ac52ec276daf7d6e1c073a197995d247fa3ddf86ac27d646cedaa16bf13b8a7dd20cba1d370df2272c2349bee63758df54959b8c643d1ee40cc8f00d2c46e7cb088cfe45ee21326a697233d07fadccd9fac07863eb6418b85a5e7c38b176b92d97b037f6e3e4cc2505f7ebebe361202fe55893d67df6d4c76877594fe8db7f4cfd9e71e75fd6c30fc1ed14f83c3d201fc6ee131363047d2c336238f5a93c2145158268c4a652e3c142aed97e0599767ffd2a44cc568f007ff9a357a3fc381087008fef698d0dea968213ffe7d36b7ede5a6ba1be0b71fde7408d5c373db90f7c6f9fa6c21f187f26cfe369ff8ecefeab9e5e2eb091afd55dd19e056af8c53370bd3319005c18f708e6f3eab979c4d476ab71ca45febdfc0ff8bfb41d27f879182c308ec2076cc563a623f322ca55fc335043dd504e5e62eff4cf8593bf6bd56379f32beaf1d58c516e12f96124269b0cdf49159366bba9d045a6d8da0de34ee929720ab8574170a7ddf3381280a3059c87192e3e011d6b38f1c1d6853cbd786c05972b4562aced772cef6f889027ab3c6ad8cae4b0d062309ad4ad2dc81656754d6690c4ada49756e7b2aa7a5f8589d4e054f59c2a8c8f9926b97f474d775e5287880dfc4f820554f2623e8f4af7a9445fedf754a5c3ebb147cea3ed6660f5f858d06e0aff30ebd37af98d87a0ea5e643e3ac914ea2d09e5f82b5b76dcb8b080b990fa71d4dfe8caf2bb34dd7ee7d8bf18dec3d367d8a7a71bc2fe786e59fcc0feff97ea6f947ba7aa1c4aecbc2b47588964752658cf12f6a20c09780a5871ab227b3a3a7d4e934320bdd12f0c7e3b6c04ee0a034bfcea90bdbdc015eaa42a1ae21d7a521edd22c324e7c20bf440cee11afc89ac1c278f72ca370278226c2629500306efddbc2fdefc205bbfb2daf4164d83286ad592f85a4ebe5cde68a8da6587ce66b65d1fe93ed5355e18d98fceeffea22e4b8af0ac4ede6023f0c11b16fe2bde6b23b37c8a252c41351fe972ed094f8f76831e5dbe638e70039101cf91372518913d40809ae6bf5a5e8fc53d272eb2a0c137e1749abc136e99560a3e97250e16f8af2dce84055f0be0acb6f58fff622ca6d5427e03733990edfb25c0de46f11ca6a53ff812afbab58721b51f13629d92b4ee21b534d433797d72b63c884e9625a7042e62b53a477537e7caad69a00ddee603135339078f817f970ced52064b3a83d46cd0449b0ffe1ba4552f64829a8bb6c9cba58d347226d54c04ae06e46d5fe59c1d6fd9d947611122d1f889f36975847f479aa743b832f6d59fec8b99f3230db76ee406a54cbf47cedf04ab6ffa2376e9de5ebfcd172065d8d7dbfd68d8a4cd59cb44abd9ca0f1acad666ee68f72f16320fcf0158cef035f3ce05283033418d719a3744b9e5df4dddcdda62c63657f1807b962a4fd6d57e973debfff32bb84355e9152332d61d99cda9ad4a35118624fc5852033ec47d216a16981acd2a160510fe33aa2b831f382afc62c1bf6c064da2052bf2da11965c19cfaffd905790f3d10b3d200aa9b3e0535fefa0f32b67b89b271b6b76b4022fe75632dd50ca8ab122276a8de486bfd73843ba13a755fae540a9f08a6be9c25a85b9cd2814503faa7b6a573bb3db2df63511503831939cb155651eae2d140c7f4d03bba941970e32d12a066e3e80fdf216aeb446576c53548a7da25dd0a204dfb28ec30264211e50b4488b6c46471f70c625b7aef2e019d087140af9cea44b2328507184dd813a75880be3ecd46342bc51676931cd5892f548896455dd93828ac01e93c3e9dfd4bad54821a6fd10737b3c566c0e3a3cba2f1e1027d44bd9325cbaa0a6cf7a33ed9cc349fb44784c06278aa664e059bc3e7be7d4add898115de9a301cf2e1851f7f423da9d3c377d9485ca964963f0392a8368c665ec569af750c412bb5aa1cf0c5ece90942741106c6d807ca27944a307d854d2f4d6b3e10b52d33701cf978cda45725f02b79a9d0d081386af7387997493da04eae49f07420d4db1ba087e2f1e36d56fdba3be4e7c7d33c4265eb86c49acfbb6f22140d79dbe1259713bc1bbb8c65180e898e9372074ef62c82764a5114bb710c447247dd0ba8ec10fc6487dad9c358068c1d498541e3f9671d557097c7ae02dcc4ec41b89fc8c98532c67e1c3d4b2f7c8e232c5e1beeb1c0eff181bfee966f83ebdac6a7e873753d1de733ffb08981d5fbde199959b3652099b6d4f41e33769b31fd51154f6c0668ebd3bddcbe2e4e780d8bfe78baddf620415fa1db7dbe188ff48156aaffccd3541fe231952c94c012c5be7b424e89f73c69b1bdd3d973f68c2329736fbf2fce7d1c6400ac57014fb37f5b7ab6a45a6258f40f627a3affda946ed5577e076485e285771a92ca2ebcbf20b2919ee4cbbca758fa7d180cf2fd867868d3483f4283d1b5c9b4d3f487fa4b16ab2c39c47f6b9b0b53f53c5360481760c80d8c7d6ebe06b2e3d1170dd8f8fcc5c0de574061a1fc15e1bcacf849ecee266fef1c641b5110349cff0e9b868200188e8ac40cbc03c0c9ce3fd40cf0d41043dfebd203acbb79100de7e6defa6b160d2eca5110ea8840910b8b96de87543f90a2da4511fceaab0bd18feca8fe45deeb7b871e404d67b7102155448fc30c6bc734e1e1b6f1043645889d02eaf3e773d1b04391e057d85941d464da085b056d85a2623156aa20b5efb2c84412ce8242626e6f3c83da3f49fafcd142357176924be2a70738c71c341757c0ca014f48dfd2f52243562781de8ea6858ba93e9dfefe2c11d84a13ccce7919a7a8bcf04c4ab49e98549669382112aaf11c0fa8b65eb609e2b0437d2006e683286ec96fb7c2c62b525f1052cd7c0dd5943219c53add9ff0dbdd9dd7766047fcb50d79652d5f5dd4a62fb907ff26dae12de3614aa2e0e6e09e9beeda7cb469acec1ea221e85f1ba36c80970d96b54f8a9d19f3aade328a3f98165292b700831b180e7d502dedb7694f8007f9f7853a653c70f07fe154ffd53dab175f2ba0fdf0310fba7e4f92cbedc55bfbc3efe35a629f8c624b83a34e86b704620ad70c8c930bce00d1a780ee57c7db65399c2e26e620171cbc01543b0bdf84477a71abe2a41a164c6be77632f1eb6c8a2ef97903e46707a726afe9ef2e3839f784dc23065f50be41f7e548486231cb34bdf82fc7ee9878860b67d081c97083371600286828e93d90f3ae8f15275947468350ae991e5ef969dff41c7f1ce346f971ddfcd1e7d5dbf3945bd8a6636a52bfd9d425e309ed947fc9bdd45ec9462edd8ae8fb4a6e230e503dabc1fc9fc0cf463a048240d6c6722168d0f451efc41d19f9bd1470a1c4913cd1d77890c82a85b3ac5157440dd58f691ef2a874c7f47ef376f3aeed52cac0f5ba9680c0a5c82d53a939043af91d755bd9e79f8818c5093a46004c60aa077dc0c0d2c9f8b61e2d56be617b651b675d0aa7ffe22ae9c20c672f67a00acca3576e9798a11097de9cfea5bd52c9f5c24623428bbba4ef5261dd43e3be87acf4a1794bb1f18883805cd56f808fae2ee0ef22a63e08a795221c2a7486c276ab60b5e78109abf1f626e59ade3d90c3749f87ede422ba455483f3cf7fe6618975a43428b25d63e07650ae127e18f324f6a612140ea4852946da02a0237ea6aa163bf4cf2887e2d0a08830284d89427d6a061973a58a833c0f6ee122458061f2bc802974cf6e24e6a6dba8b28457a964d71c443b46e456676b778a12991065a90418e17c5fadf7bdc9e416037e5abf777dc548cd4d393e29a733c8d4ce85523251b819979853c0af5c3fd49cd070cc0029e7184a80b3c50b2a4d001c33f3f3f3f3f3f3f3f6fb26d5bb0ad89421264da495ac1cb5b7952e450644a292599924a000000501400000000000000c012d2886d512ede0b610b8a0b28a9bbb55a9224d70e0809a1d1c516b836c0c206a555940bf5740d5ad5b1266725b9ffaa102dff8d13e010c1b123ed131c5ca064b9f042a40358d4e078a13356538cb5929b480a72ec601a9cf33b2fef495abea6dab0d1ce09b8c180909090101d39c06206a73053292f9f0c33391b381203c06809848480d15f8484d4000b199ce485aa6fd115c38926236b3a540658c4e02047bfb995ec3b3ea291351d8b82131202801960018393a8ae8e93bdb1d215c61722088018c878c5299a5c32a653731b7532b226a2a3cb742480990b2f445a20c3158737ef3b1d96ae4dc6561c84d8d3e021eb6e639215a73442db5a08a1247145236b5ffc9e40c62aceb6f35e663fa62cd69135551cf5f4c8b9c57713ed32b2660219a938eba520e7fa54c5966e47181240c5e1326f7ce3fba57ce27c8ac3f22821de6eca6219a640bf687dbf936fc40319a538492a899633b89cec1a1da080111d3de2001a5ad050c002980b2f4474c820c53108a921c4d6bfb8a3389e656c0b33715ddc17c57163dc5acb7c7979f7501c2c599ef0ee256f4a4071902dcdfa7c13f5cdb553199f38a5a0623f7e32a8cf124f1c7783f055df7d642d6db9f042a46474e2202beda49fcf6cbb513070e4482c1012e23942429813e7925f926b8826f14345c6264ee9274735548abd698fac8deca87102eb02c9d0c4f1627e3f259caca07429132749c7a6aa2e71729624983868c65b0f95ef2d69bdc479645c93314dce329c96389bddedd8c85989e3b8fa6b341565254c4a9cab4dc95a558617112791ccc8f8796212499c94bc75a94a29938dc4497526b3ab144c2c1b12c714256e5350b944d1dc234e52c6eedfbf77b476c429a4c87c82c6d5f49a469ca40dfd9a5515b766469c6a549041d6e2966817711e0bca4d9c2064d2cc38204311c7ab12b39a6dccbdf9449c5d34f3d9857ba97442c4f9d49450a1c45a1e3f39c4d1f2ff43fec5c92c19e254ea57f2882e298bde0b711ead905fa56a421c4d548a077130b9b76346ed9998840571b498ba4af3b7c810e2409cd4fcfd462fdb967301714a516247d4583aabf50fa78a6133fcd52549c9d40fa7502548bff8653aa4d887a39820ef6932b3b8a8f0e160a943afb65bf670f212d4668b7a36232c7a38c5942ff36dda78417c79387798d8a0fb4b12e73a3c9ca2a6a44c87b69325bec329efdf9e24ddfae4343b9c43c9d4bdbd318410ad0ea7cc57aaa2c9191d4e2b7e522b25cb6f750ec70b1a5c939ba49b52e4702cdb20ee44c47ea92a0e0725e447efcbc43ec9040ea714f775c48a699e3c47d66ed410f91d6d6f307cc912eeb3b36e4b1190e186737b25b199e69555e2369cfb3d9492ffb55495101bce275928e933ce6c8ad9359c920c99e792694cb3500d87d90bdb363126a9eb8daca54005bd45ae1064a4e1e8f5a55e92c76c27f2450e1c29c7835147a38b06a4fe2db2ec908186f3dcd5952825e80c2761d48ddea6659b9acd70b42044f528e1a7445a86530c26c64c9294d1aa9c0c322caafca499945bc65460c818c329069549b8d433311c12121252d9850c31202f93704ad8f0fdf188411b32c2806f0a5a6b941253e499bc37181748c1472024045321030c5cca265e5ef271a6e5829c24b642f923de5a8484848484d0d022051f81111ded002d14b08014e4c0f1c54b202404252234bad882c651c0d7c8d14508971c3bc0280258838c2f1c458e9832492f88cd0970d8d061722440cd0032bc703a1d13fcbf52be986d644df3709ca08b90909090624490d18593b49979938f880ba259e1c20b9111195c38a9cb3dbdd94ab068d1c2828c2d9c4a85d8a45b7317080911b1355307195a38b90519835c58bab564164e2a8bfa56b2fcdb8c61e1743f16b3c9a5d377935ce19c6f62a8caf4e2256c6458e19ca75fd74f3e9976375538c6edcda3aa6209b9a2909014830c2a1cf304154becb16a2f311953386f989469db1a195238669e6ccd1a2d178553ecd9af144fc9567b41e12458658d5f5f49529a7cc2e1b4e9fc321116271c54ccdba349f5cb864902c7b145138ebb576ab4fd494b73d2915290c18453c56df90c72ac628604194b38da86b8a9cc745bdd240f50c2712ea59cb3bef1cd655304194938b8bf8ab0cdd258263f07194838aa5da6f435ea114e77a3a225494c0d73d1080711d93ea7cc62d452e020a308c7aeae334d8d7d278b6c904184e328a1e9e566a9273b930619433856894db292891563a6e5cc204308e7efcbd69384cbd231da914146108e96224c926230a9b9495ae8176400e1e87ec137a478c925b32dc8f8c1e904cb574ae53825ad9d05193e388d12f4c6202a6731770f4e7b25947b261354ee932bc8e0c1d9e4c6dbd1cb2b652a1906193b3808cfb459e75cc4a8d20b32747050629e94f7ca92cae88241460ecede1b33e24fa660b1ef820c1c9c34933625c91bd456753738dfe593e5af2b8913ff5141860d4e7af3a14f3615534e54460d4e92da921bd43a2f992c0d4ef26b16213fbee425a529c898c1c964acb064f9e45d7265c8e0fc9b6e55c24879175964c78b60c7372024040d175e88004007326270f8cb1d37edde6c26282464970b2f446ac880c1c15f2cc7428f8953999118af38aee51a0bb1b0a9b554cb8517221ec315076919325a4c9bef136fc5e174fba2fc9828e2625871ca936d6489b9a02449ba8a83124f0a4a4d84aa7739b2b6ca8517222888a18a63da6f6e926e3193924dc5c9f44893c2e46f9f6c7741430b1a18a041812d261003152749368b33315eeac5f8294e829a3ad93296c4556a8a83a535492d297d259a60298e7942ec92bfe553ab90e2d81637a524c8ac3b4d8dac89a420c70e33cef13b6a608c511c47758945df64525a518043012121c9a30007e21d3144714ae2654a2da66fdaba9135065880061b2046280e1add3e4ffa87dc3882e27cb14ac55693c2e8d0c5f8c44996cba6a04a104afa313c71b65b139a3aa6c42c3324e493189d389c3c41d6bf9ce6157f64cdd0e8a2013a4242caccc5e0c43137693dd1f2a49da0e44c1f626ce2f09d419b98498af52a97e310431347d7307a8366ca26966864ad9881438c4c1cef6db47a895f0bd947d69207dc98c0186260e2142addafd428a9c4d19b895ce22488ad98949ada79cd58e2a42994eca3ad41d94975ecb8d1976254e2642ea2c415b19872967c2006259cadf8367d61abe391b513740e11cf499c2bad5e4c827755786f64ad6c10431227e9e4cd621f27a3f686861679881189f3590a27a9bd98478d4a49430c489cfbe5e24585f635dd1f719e313f7d9642a659ef88934937332a2d8485188d387ebde689615d113c430c461cf76294cdc6918b3187c78517221d88b1889324732bcc04993249592d7e0831147132b1cf4e5f87cce8bda317a060889188d32929a9ad7ad10b3110710ab1e9546598d8e396901033113bc4d9b3d3546b12374a44d4d28b1886389f5eb7b2b137f19a8eac318d2e1ab0e375e8e81c359a025ffc8ecfe12121c785172201c8418c421c94d86c49ca275e051927c4f92dda059954d413641c1212122262a976883188f309616a54ed6532c916c43194204a56d05b79610cc4794b6f94893dd167298038e87237b15df3c9b1de1f4edb27ce4cd29a6f2be687d35e6906d5175a93d8f4e16031c86eedce922a347c38e67a0bf2b173529c7b38686d9ad81ad46b8aa91e8ee12c5cb63f49a5b45a8c3c9c4da5cc7625dc25919303c4c0c361b46d5d3231a2521cdde1f062afd9f756291fdbe1b417a237e90cd66fc7a8c361545410beeba72e753a9c940695e4680559eae21cce1e562a4a2b996c4a7238093f99042d2553b55b4e881187e36fbe182ca53ca6ef86c3796344299d3df7255b16a0a1058daa000d0a6c41636d80f1450d5d428c379c46b4c94fbf902927e986738913dcd364d813f9f11362b4e17062b29a20f4e54cb6a60931d8708aab232f59abc8a02c6c5b88b186831ed98b16da5452a2aae13063e7be65f1f22bc63611230da724c824f48f7c15eb120d2d6874b1058d903a2ebc1001802862a0e1245d3e41086da9ee3536b28636011a5d6c412324c413cb991634ead0a0c01634942911e30c67cf68ba925535b296dc781d35d20d1c5ad8b081e3c65f202424c78e1b383c2424d70f31cc7090295b22b2436878885186534c5277ded2e4aadf8d88a5116290e170422d4f685af18a97861634686841e36968111222821a3aaeac21c6188e2364a524c6a06b2d6834bad8824648488d9c38ea9a021332ea75c83b6daa2162b6221ea5386905f53afda1694a6a642d0548e4ee0606a4e0418ac38e14ad9e117296d691a5d1450356e0318aa3eee8bffc728d288e25d6fa629a04cb1fd5113c4271389345cdd2c93f77affdc00314a753255d7bb7d88ed6641d273c3ea198f64c6a77b6bf24118487274e62f2ae24b59c7c71d2e7d189734972969ea8919d2a3c3871d4de53fd21834916c581c7264e2afa94cc4d99db60a30d3c3471de9354dbc24b9938280d266ec8fe5c36194c9cb6bb2435a2f4366ca420c78e4b1c4e1a7513722527168eace5781b3652081e96d86f940c6262c3e64a7892921a7bce4d7958070f4a9ca477a939e1924ce26cb65d66e1c2ffc837b256e62189b35eb0501725ca9b8047248eb92e6c10b515a192d20344be0106061e903877b72995a406e121465b048f479c6493ea68beea199366237838e21a118607234eab9b45d97fc92763b9083309a53f5f29ba49236b366cb48848927448488dced18515527828c25cde26e46c4ec6fc02478e1412c2fb098f44d82173d6e90cfb2a4144ea74585e6e5232163e44d9b67c73a98628866890164b9051edf02844d286b960c29d1cb12e21b274b2529d97d89644c0631007613a75567eb468cb0571cab81822c34fb734e81188c2c26290934b71b1dc3be3ae5c6fe4648c5f1cf000c44153eae589bb38a34efe70d2b7936218d11b43c87e38fda553c9849365739bf4e1ec16f3f533f4d2c332050f3e1ce3089f8b2dda943c6f0f65b111a53296ebe1a04c74292dd9d138417938a5ecd393c2b88a50413c1ce3e62f6d821455792b1e7738c638cb7f692dbaa132112b07050f3b1c5c5c63452b29539171e8b881c3cdf40c175e8840c0a30e87eb11ee3fa3b94ae8860e67bfccdb272c4fbe354181c71c8ea3eb528c63b296d695c3d9a46cac932e5647ad27f088c3717b4d4c55ca649e89f180c3b964948d7793faed3f8f379cb2ce26db12965d52dd85871b8e712aba727c2561d5c2a30da7eb2c75ea3773a46b980de78fd327c967d667e2ba86f38996a9d3ea4acb6847d6540d477d379584fa52f1ea3e4bc3c1d45ddf8592a46c7d828693cda5c95c9f6a5a97912df6090e2e903dce704cb26a9a37d9352769f20b0f33580897e1b07fe9e4123dd9af4f996307186438a50b9e969ab54c56d0c85ad2386c8484ec7811885806b60809d12d4bf018c3295c6350bf3b794bd4aa54c1430ce74cf59139af92a0cc1486f3062586d25cf2c8dfcd46dfc8f123de2e0246182224c081c3c65e058c093cc0706c79bd0d69276992c62f6a8ce8083141a1171e5f389f091a5bbbf55f474cf5c2f1be44788979be4cd48cacd9b0d18e371870e6d18593fe188d969b432893840ba73c9515b3666bf11df1011e5b38c530b5d164d0efb05f0be73f133329134db270d42416644cef5a11212c9c56de94ae51275a9a5ce138dad4465968cb59da0a47134354e46cb08a53154ef27b27b987f2d60d15ce2fe2c4da1cbab4b83c8583ded5b4992c4f96b4144e27c6fd908d7af6e246e194de33d32babf55f85c239dd4cebd5c87855c9279c4e8a3108939d130e7b9b7a1b47453db535e16829467d3f4c90b6b991b51c389248311d393ee9b8f1856f600d9307134e324952999896349794e70a782ce1a0ccd2df5cc53cfa948cac95f9c04309472d95a69b7f4cd794ef14d88246484848888e3070ecb8f18090101c401c3c927094ab3413bd37f15ef6408285781ce124f6284b8dea61979b043c8c70ba16f565ea4ab473e4781130fa8b3508f028c2314b5ab756d0984b8a236b227a8907110e9f6eeda6faddafcc91b51c4b018f219ca4b3e0276fc63d84602123f0088207100e1a677faa62fccecd073c7e70bc9333fcca787ac9fc7f11860e14860edc80870f4e317e2a09776ff344529063c765c0a307c79ca535d388d390a98fac954004c70e1e1ce6a445d514622563e628cbebc263072721dfc3bf84b73a31d1c1e9842e3b25f31b8492f5c8818594070e3ae0718353dcd83826cb86397114090f1b1cb35b38c94dc818ef441dc08008d0d08286038c470d2c84041e3438093f2a2549bef5baa8a1c70c0e1f4a9227ff09e25e2f29c8b1a372fc8e30b658409a4088221a3c6470aa92462d498278c5296370364df5dba2e1effff380c1a932eb8e122709abfb445023ddc0e15ff8068c1158bce274f9a6b792924fc9edbef00d946905b070c579636cad643a5e4db7ad386ebbc87171b75362c5f174e4f2fc974ca94bab38bfdc954ca6a575f1abe2b0e7164b36b735a9245351a95cdaf29794041527394f645eae99df12d461ca290efad2a4d097aa66bcfe0216a63895702aee72b88ac85a8a63b84d6af43fe66d4c529c3e35674cd047711a73b51394aca01d8be224458d3571e54efe3df90116a138652ba162a7c5503b1f1487b32b7d952cfca83af9c4e9f73b4b907742be483d719c4d2ac6cae93227e63a7150f5e69969acd336c9032c3871d079db69f9dc4d1cd74f58127b4bacd4af268e27ee6535c75ed00dfa008b4c9cd48e87759b92bf49ab02169838e9fd10da7343a9b7984b1c56d3ff87d2722242678953896cfccdaa34e6974a9cc42cb12e64e68a49959438463fa5ccac32e5c47f12a7ac27dd98dccf122f451227b94b52b3d4a799a0148983c820d694588b504a84c4314b292dee7fd94b921f714a52c5ce4b2735dc061d719284abcc917933a6d41b712ec9f29d2435bc7255461cf632988755ccdaad2ee2fc61c97f2b646d4657c4392b26135b968269d589385998b54a9967e28d8b8863d85897ed7dafc1728738955cbb7157742841a60d71fcad144f1a7d2bf171210e6a5d34a8ccfdb72327c4b14fb832efcaad16e7419cffd2066dfee5994f50102729562af69dce6d2b05020b409c35c9156e9b2e7e6712ef008b3f9cfd378454ebfd703a25fc049d933f94d4f5e170296ae94aeb5f8d277c386b924249cacf4a4c16dcc3d9f45af8eee78993d2c3c1e7379489367e1b5b1e0eca533679c95782d2141e0e325f46454b2ea5c4ee0ec7dc95df4d4c2556c8bc1d8e49143b6194fc0f37b13a9c774f9a95a4221d4e2adbd24f9afb127299c3d9c41436096697d972391c84f8cbdbd3b41f31e3705e7fcd946f576583090e272184ada6fc5026e5cc1b8e736d41df66798bb56e386b69bfa424614d3849d786a39a504910f2c54eb08a0dc72b319eac226377957c0d276bb378d2b26a9574a9e118d53ac7e4ca52d89a86936a89dea755f56b8368382971a62594924749a53e03b2dd52ea461199e1dc6d2d32653c29e8f5ca701ad5b94a3b631b2d27c331cab56b45bb30177d0c07a1ccfb5490cb8ae189e194da71963c4be81671188e715f4f5566b2929703c34989a5a49167d29edeea0b07a144c456d5a9a462e985b37a9d90a315f5a26b5d38092fd968696a4b92e5c2e1e42c336d56e25a0eb770d07995b405573dcf590b47efb1f495aebf4aa7593829199ad28fb61394ba5838556c8e14f9b47cdabac271c3e4b68a0be6a64aac707a3733ad66a228bd60158e29a5ba0b25bc44cf940aa773fbd09535c12f8753389cc866db8f2add51a5708a3da7d36249148ea14acc5fbdb493520685636fca196f4baee026fc8483266d773dcb7bcb09a72a6152f4942ac9b41c59a3916c18343e47183a70d8701a68c3a021c207072c9a7094d55bcd6f3a139c14b060c2e132abe4e93271848cc512ce6d4a4c462fc7dfb88181911d3534101212042c94a0fd9e9798e269dcceac58b16282b38145124ea3e51bc45c7e6c4f4838f8dfc8d1b9b9a9ab3fc2b924d5250679328ee5d1c89a885d13b030c229491795c4d314c564b50807997367eb65e3a9da8d1af9856f8046175bd09040081f010b221c4d8edef74c92faafa4211c5334b6a858cfbe6422849329415d8dd91e846c53ed695c160d9b64e4cc0c5800e1517ab6a299d6f192fee0601636e57809f9e0bc622a6a49d352d9ec1e9472b27a68b856ccf58a4902163cd0f592f63f95276ec80258ece070b14413111376d4963a38ad9eca7fbf29b30c737092dab6bfdb3b1c703f26af65885f9027bbc1061f873889a89eb2b425dee9df10e752194a5572edd1275a8853f8ab7c6e25f79a344d15e18310c7933f4189d04bf9bdbd8f419c3a9334bf745d7a2c2e860f419c5594e4a7328a92aae4095b8ed75108f01188738a8a49a952aa5d52e60310a79dcb9c9b4c18a12da7848f3f9c4d63bf3389bceac9ddc0c166840f3f9cbc2ff4b2bd245946cdbfa377842101ddc48a818f3e1c3786f0b09ccdc81a8e1b66581f7c388889977db4a5f7907e8686b494a23bf8d0c34934ed050f4b5fe27741f8c8c3b1b2c4f678336931fb236b08840f3c9c434e448eca88f13b6d0f3eee70faaa92266f1093a406d9e1b44908edf378917a771d4e324fca9e94f167daa6c3513bc77463377338f7a6f1afd7d196c42b8763ae6d8b41c76457cbc5e120365799c59244dfe904680f460abac8a101331f70386a3429881293a95db747d64ef037446ee0c004e80b3ede7034f1648b1ffe999499b8e168f2757456bfa46f501b8e496d6d16212766fc101b8ed699dc64ab681e9759c349e5e59e70d5701c956694d0539a4e491a8e9f9e49ac39f1b73744c3c9046f533dd14e432f6738582cdb5f3d7157f4668693f5c6cce8b631c147194ebd554a3c69f15da74486b3d958d40db9b160a7319c825f5e1216aef72d12c3d9f2a554f1328815290ac34934f50da267e7c45283e1642a54af89ce5f384952926795827a967cbd70ec0d3bfad6444d49a25d386612a6b13f363fe4e3c241699b582f962fee2b1d1f5b382551419652c9c7fa762d1c935d10cbdab449ad958573f5ff8cd0eb8c395446d6ccdb385fe0c8c1007f302e1012f2c5db782ebc10e90f2c9c2eb3ef54921d69a97d5ce12dd75c418d2831d9c8dac88e1b65031f56d0d2ff96ec53b249012ae38f2a6cc104b5a0662abd287203070d2d68d0d0220909e182a3f8a0c279bf57b429b1af848b7f4ce168fae1a2f7a2d6c2fd2185b32893e43b7131de09db35e0230a274ff3136eaf99b6e70f281c4efb66ea90c16694f0c89a4866e1e3092753491691d7721614a951ca153e9c70729172c2ff9924be660a1f4d388593b3a441c3a6fc98f0c184d3e8516a7e2b9994d71f59b35bc2c7128e974a36415f8492c25dac0e1f4a38fb9f54317ae6f4d99a0e1f4938880c4b52be36ae493e120ee2746c6c2d7175137384534a51b2e24aa6187b618bc387114e19ce77eee5c229a152849330538b73a7f64eda140d1f4438990c96de425aca44cef03184a3ba867b4daae40cb9a30f211c84cd5beabdd37515253e8270b23671fb2c06a19695233e8070103e7b4a3251d2f296ab888f1f1c36f89ade688aa5f408f1e183539ea033334666398d25e1a307a70fa9255d0975644d07f7e18307a7ec23539d387f91de1e3e7670125654bd5918a54a6baa101f3a38b9ec5a8f92ac446a81f8c8c161c48959fa456a4aa91b3d7ce0e058d952123fdb9a956cbdc3c70d4e424d499acf7664f09f0330870f1b9cbef208f126877a312b0e1f353855cecd1742c375bfb564f8a0c129996c49c2a9124a8cee0c8e49a92eb914946ca7a68cc2870c4e2a2529aae569dba3040a1f31389c98d1f4c9ca542549f1173e607096d754ab9a2d4b4286bf30e315c714a4d949b549cca0415e98e18a836c7f11c2db6dc5e92e88ac9cf97b3f9515a73cc94e66cb77b159dc2dcc58c5712caea9fa14d1b4550866a8e23c7b1fa6e2df9d6a5003335271da983309e1997f6222e506335071ac31b972faa73859fa9bef9850f216c1919c290e5e92ec1d21d3236b3a7411334ac12893ff52a5577422381266c20c529c4bd82c6b1b4c92f29010be002862c6284ef2b5e49382d68bfe25519c4bae6bc8f6b1cce287e21464cafe27ce5fcca3041427dbcb2469ad9f38f8ce5c3ad1b16282ee8953c538a6948fa749a64e1c3fb4096acdb4cd6738718cd7aab6a4bea2897b1367bd114a7c1f8d260e62aaaf3b53a4298f33714eebaecdcca3b4e7644c9c6c4dcadc93d94dc3bdc459eb438bee6a2d718afdaf49922d84285156e27449c89bf81b2a4f474a1ca39a920f1b25bae6cb2452f2262a4c8a41a8b1300031982189e3689c4b7dedfa793912275375c9f3843d1b7d8584141331b648cc80c4b17534b456f6ce55f811e7f1d5fb122c88305974c4d143c993b1620d98d188836d940d42c7283fd9352ebc10e96206230e234245796870135e2ee2a8a32e4693a4132766a388f36a123559f1b35e3a0b6146224eba96334ac333c95741c449c61199fc926a87384913b55f4e8658d2dc10c77a15ffde6df32cb310a7cbce0ccddee5aa13e2e4bfaea14a0a254aa63461c620cede6f6234e12717f4e83830431027e135c9d49b32891d6a204e76e15aad227d4bbe50600620ce7db3567ac25de6c98cac89e0488c0b66fce158b25254f59f9afcca2d98e18793d61255192c6e92847464cd060e1c6088e048960533fa709cdf529ab42519a1a19135dbc10c3e9c2ec5bc259cdf26d5e960c61e8e274cc5f7feecd37f1a59631cccd0c371af62ebc6ae3899f59135111c89da60461e4ee1b6746375aff4b691351b39f070129723bb637143c532b29677388bc66c8a552b25e99391353b9c664bca272ca8d0a2088e046930a30ee7dfdc2a2a637355b047d6c2a0c3418ad85eb514ecf4c58caccde178f3f61532a3c935d3c89a1c0e1a7bf2e4ff950e251c598bc3f1dc4d6dfb95ca8d9991b517c1915c81c3b1c2afe6d26f388b9062c9a2c6cc5a29236b6088e0482c0633dc70789591af5296d7b334b2f63650c360461b4e318979f94a52bb64ab604f30830d0729224456ed06919a60c61a0e7732fd4fca9691b52a2b98a186d4259d59649d5ade46ebc091c38c46170d102181d7d8513684196938a812b59cd92e8c9a9b0387885d0766a0e1f42126cdb633637b7486539235b254f6b8c5c598e1b0794ec652cea02fca33ca70b67c3dda72656acd35830c07b16076a19592b03a97e28619633859cd28f1e57cbbcf82838bb2841962784705b3fed126499543a38b2d6890614618ceef31a3f93797e4a21ec30c309c3cf3df745577c5124576c6174e5af28a30f9bd6412126678e1b86f16949413362ac8b898d185a3c818cf6fa399504ac980610617ce99f635b7baafc9322464a130630ba7fe2f7f3b8b75694e723c0970e4d08251653563da330c33b290283931ff95e592225c988185d388c9ae6d257c56aa0833ae703c0f3737dfb826ae3fc30ac7afd718459e2ef9a2e824a884195538a6902347e93e13458ca6851954e0ca55638c5b0cb72c5bf115639942b69a2ecd664ce1945e4f4ca6415aa59547d67686140e7a2a73fe468d10ff8eac7d0e30ce140233a27018214d9c58137acec60287195038089d1f9747365e69dfd430e30927696682b2dad02e1a3713b1b2b3c30c271cd7926b9954def9966fc241c83f916f4aec143361c249fe53dda66a73e4972ce11c2a35883d519ab4e64a3888d6cffb7ea991229484c3c9b0194a0acffc1021e114d4a5500debed12ea239cc478ab13947c5193d8463808e19ef6693145389670ef3527225c6386080779e6ed35fb962fbc4338a9f18b6e32eeb2092a4238b5885da8259954062f08e74aba2b2a5c0e080795de4c8592f9459c7e70d215548c15d4af98693e3876c9a4736e72ab05abb806337a70f8cb384955185bdf130f0ed72647c8ff3093b5dfc17194bc92a41ad52625131d9cc6620c1577e14e359e8353d4934949aad5549e0607e7cd24e58bbdd8921abdc1c12bc32565ea3acc441b1c93d4a925d7d99a57656530a306070f196a3497954c23448393b013329f70af331b9dc14154092fa29270394c23cc90c1e9472fa82498ec118d5261460c4e5529b5d7f7da52a73b6ae8a8610243a38b06e0d85143478d0c2436be0603444442424242161012221212528919303889899624947cf206599a2778bce2f47a2769a9a879335dc615474b497d28297635c06843058f561c93343129cd14c3adefef3770dc48c18e1a213bb4080909d1a185162908094935727c062470250ccd800dff44040c1d5c8c0b2f443e92e0c18ab3896565c2a570a3171129b7048f559c55439688ba94c4ca2253c5c1a2080d9d1fb1c14ba9389898a9cd848df4fd0c2a4e5b416a4ecb250e82c729ce962376f3a50189dc37e14cc5e80c0ba990051bceaf49c6744d29838f46a38b2d684c218b359c0475714a3c33534a9dd0d082c6aba0c60544d0140809c9420de7d875cdb167764ad2ca81208b341c3c546ecd9434dda8e390051acea3393efb19676498ce70ec7b518216e96b41970e3b1926dd82ca97e1f82247c5d36322c3e9db4b8a1b948ccfd08ee1706ba5f169d9ee476238863f299609539238c90cc341d4eb9e9a68576212188e399bb23627e2825abe70b450a6b7349fd0289abf098c0c5978e17071d625e9ae2468fe5d38877e96d465722e1cfce4fa67186d976eb485b3494a6d873a91168e1a9e553d367a7de92c9cca43b7ed49a54ec9120b474b177662b246bdb0ae70d4a826c86c95a1bd7d2ba45a26af3126f5d42016d3d444933d6a3689ca812caa700a97b229df2b5aaf4e85b36e6d09b7109766ef299c32aba9fab3a449f87b802ca4704ecf5c5194264da53151389fde2d75993b39640c85933c13dae6a56e37d2271cfd94fe2b25b75dead20927416dcfc6935e13ce9a74f48e98c9b45661c2c1755d633ef1259c4f2c95b6e354d7d49785124ee2b67f32572d986c3b218b249ca4fa522a852a29bce6d49005128ea5ed349d993431e69ced0c591ce16c23e3a425db58d72e0b239ca41263be98b25c899661a3d14503b228c2a9dff49b10da44bf926464edec8e08c77e33719420ba4343164338b549bb6ba979296512219c72aebabf247532321a84b36aaafe50b94e881d08a733d1e4504ab8e88ae5058090c50f4e526f938eae66afa4d2e183b36c963237c1e82f44921bbf278b1e1cabde4b54fa8bef391a01c2c183538cd135e97f9d944b7e64ed068e1a2228a891ce32078e1c393e0b90c50e4e52e7afffa8a42a323052b043448404ff602c05b2d0c1296ecaa2a4249734336eb90c649183d3fc9f343397e4220b1c9cf662fcbaeb1f992b6f700a1d933445ed6e1f51043770d8e00a6461836334298955d98ddba7acc149d2a752144d359ac9bac34016343879866d5262b9174735b286829fc1a9647b1f59a99e410651134a200b191cb5ee7425d94797d8a22f6af827658b2c6270b09a91f95756f4c9cc02769f1c04b280c131eff3a4aca056329f5e711263661284fc52d72477c5d163c45bea6f5a71929fd113f5c4149dd980b0e27041e9de689298087915c7989113839204fd7221551c7446c6f5cc7373259c8a93ca9b2433d94ed75e0441c5f1cfc243cc89d1442f39c5414f98dcd86aa9674f10531c67449fd032a9529c2aa6bb345933878f8e3c0021c56993a64c57270833bd19c5c15d7f6318dd26762da2389989b65431b9eebbdd0024148775ad203ada82e21467abf39468322629fdc44997f026bd78a75dde3c7196ebb62b419bf58bba1307a5a2661bb5931126fd399046170da01106185703104e1cd64b5d123226e9ecc29b385c7a1393cba99a386693cdf72fa9c9d030c406209938057da17b25697e51e2c85a9e18403071749372a5946399790a528d1d9738c9a0414993d637464605104b1cd39d5ad41aeddcd0ae005289c3a950999256ecf976b4884839308050e21494b4dfd014adf6173fe08b1a3b42b60032899385d6d5ccd4162c566aa01c4f81909090100691c449976ddcd320e719cf1c2724a4737c0189c4c1477a6f9d88f711a1c88d24f2858e3e8188088e1d45012090389fa4dc344d101acd2479c4318ac6ac714fda104adc11251719730525a86912a411c7f3b824e66b67c431955e4af2c60ff71a2de2a4a96b7d53fc5267b2220ea241754b875af1cc26e264ea7dba82cac52a2522ce6b6619c39de4218efa6bb9c1dbf4ef8586387cc65ed2d1ddd07b21924ffb86fb5d226960b4042e704988836b4cf25dd8e4dddd0e0244109d6d4ad1e8a201852081b01010409c379d9aee8c56429709c81f4e62bb29316e32932c2941fc708aa3d75373a5148307d287a3ca5f12b6d4a268b680f0e1bc49e651199e178489a501640fa7a04dc435d9bb8951731940f470f633c14d5d969a09291d40f2702e2d75e048376aa48ed75105103c1ce7c249c154984d728746d68acdcccccc0caf6ee1c20b11014001e40e27f55b99439cfa9e7cb301c40e5645d1be3fe9f4e607903a9cd38476493341868f8b1640e87012949e609be2893d1ded003287836acc255feeb7c4174b1a40e4709213839f9c7ae24cd4d10012878326e1b4a587fe8b25091c0e3b6b61e4dbaa2bb66f385d9dc97bfd993280b8e15831c9171bc62b956a6d388d369347ffae44fd0fc286a3669156b2a46b5c908eac5d0840d6704cdd55256e3c0b77266a38db49f94bcde68af53a8e74a34601a01420693889b1f4f9254d7f270b090909d9000d2d684880861617f862878e30469024e09f01c98702040d279d3d3237430472066cc346e3dd8840cc708a49e570711b1fb5ee034242ce44ac98e04c1e48198eb1b22deec42ef91622c359364fdb88cad028b2319c644b3fca6d7428f12e10319cf5d5847da67c4bfae20490309cfb45968618ad703bc17092b2d2499224cbad6f10e40ba70a27985213648ce597170ef2c5d409f515bf1407e9c249935872590c53599bf1000817cebb76f5994cce51e2650be7f6907329e8510b07378db1b2a45f0248164e7349cca1f5269da4435838c62faba4feb5fdbebbc2298d12ca425c87bc18df2c8058e1b8f2fa22c4b45538fc67ca5ca1c92449c30208154e992ed3880dab6f9b640ae716959be56545e5aaa57070cbe79dc95d2bef5b0590281c6be3092daa4b669e7484918888e0460d912ff81008140ed76f4a383529fe4c44409e70eedf8bc1ff74e4853203204e38c83115e464281f1317a30490261c4cc9a16288b053a94946d6de06ea430208134e2a9a142dba614e2c08204b3809d71354920d277692663000a284835cfce67aad7a8c6a8a009284e349bb24ff5210114090703099a6369b54ff9724a5007284638c139336d31b54f46f042bf354b6684caa004811ce5ff23b648c92cf7a1194128010e12c276dc491180e90219cdf5292d4f4369b8a72642d87888e1ac56874d1801c3842ec15204238f5596e2b11275bed07e1b449eeecae418070aad45d4abf648b9639b237267061981180fce0cd7899528a4936312f1fa07dde6209a5843271295d00e9c1c162a67c45b55ad36ca01a1e46f239d676f883111212802280f02015ad64e2da4853fac89a8e564b6e60a08c0520f5e912fa57331e80e8e078f9747be92af9729588a8f10640727036f17abf944cfb7d494d00c1c1d1f6634e8b3cdde02066626fccd12b93661b9cadda4e562de982a6ca2801a40667bdb43797bdbf6a411a9c667f4d5a926e5bd36483003283b375f6ccdaa59294ac321040647034492a61829762709633217b553716ae7902080c8e77a1796a5b3b4a8d46d672e8023e5e71becd0c5b27dc986dd21547ab0da5d17e94986434818f569cb3727a49ebb1d2a97db0e2ac1b97a6ed9a65117cace2a4921855e1ef4f896944c1872a8e192cc3fb43a81fd147d6ee52712a2558bed732c70e303e5071d45bb7ae2d19359ee438c5494c2b62954906b3e0fb8df6b3f1618af349f15405692717a21d592b1bc14729bc78cbeda357d223c5b924559a75f3a237d5519cd289b7934d12a14d9217c5f95f638494b1b6f03c14c78aaf624952b3c9d2088a5356bbb859a3892663b6a3c6278ef2721e4a8c1d397fee87274edb632932335548eff4a313c71493d0277989fa2776e3c4419f3aa5924c9366f9b4894e08d34b79e2a877dc7813bc5d6ae220dd2c37dde67459dc091f993897fe4cfdb16226631c59631a5d3420051e1262ac580066f08189b36d29c13ca3c5fed0ef254ed7f1215b49d01ab5a4860e1c14b0c4415fb66c3661443bf4800788e0b9f8a2464888880d30bea81112a29538f688dcb3b0c1237c50c22eb17dc4fe654dda91b53b1b7c4c82eb52b9f2e92c830f499c344c12940c3ab784ba46d6443e121f9038663f13aead94d8b50e1c60146bc2c723d2f199d7365ee788c37a09328fda8933b53105c447238c6d561dda1adfa6deea19373458e6d10bd1c81a1a8d2e1a90c888f3bb6ab2b31323564d43f858c43946d7a67463bee1641471ceb024859e9ab510f1c147220e76729249633285d420441c637f3fb36788d3de20218ea9a8f4b145b3601c0a85c23010c320100ace3b03e31200000010181507a3f1984017b6f5011480044d3a32502e2c222a201a180d05c28130140e0442e15018100a04c3601404623051e21cd909578674c7a185446496372aa357a01a88a1f8e038510bac962de644064a15be548c3f420c7d432949d1098293614b1320b187bc87cc32345099413f9fdaf7f900cb1d87ebe4a31ad0da56be81d663995fc62d5ae9bb48ad9174460c46ec4758d5917734c5cae8c3cd46bbf248612416fb8833524c33dad52619abe088120e512164e8c8df13df594e621a528559ec1c6507f7a98f049d651b95f47f2282a3aa6c0b82a9f844fa037e9d674cc3081864d5320eafaca96da0a74628bc6d546eb4d755b7a51778b1a58c15c7509b2646ea132c6e7829d330d7d2e5dc8f0e335c3ec64949821e5f3773279b53e57ded03e3387061bc131702fee8b09ab42f71ca7a528088cce1e4558e2d298b9a3a0d658080eb885c973402f8d539634a39bcf177594a017e0ab1cbecb9f48a32103109193bc059d68e83a68efb4301c90b50e1ba5b8ac9094d3f2590bf603cf88f481c6b3fa94d0a10e0cbe45ff702b733664b96f369fc5f7e800b98a073c9d29b24195343a8f5976e1ce5ca1ea51c61dbdb00b410db5cc63627188216ff89660c4138835247b8ae997c0c1be91900e4abde7ee21bf0b3edbf7200ef2407ed41561dc40b346b7d3f3c2381a1b6820a7caa3d893577b2b66a4174f77442905df9c8b54a496416ba6cdb790525d3aae67dc925b8d7b209425d000065efb18b53bbfb3698307ab737959cfe8fedf2eaabd086ea0851c3ca6f686dfc1d7aa6086a27bc0261e09c29426890c0810d0c52d123708ea80bf5ec22bc3715156dd9f6d1643910611f10b611b8e150c8130c926eecb959dc8c6021f4dc6d66a7ecb63d561d2cc2f1798fd8b1cfab087ee0bc6081610719ca067d2ccd485325a6023248c4036718802bc68fb058fde93e419d0a69631415f13a2125c500c68112e558a8ce3ada01204903549d9c754b3af16b48a1c249c75853ff2142aa5ea9e12086145830c506d3a65a4cea96071b0410c2ec286cde2e086ffc33b563305694da2093df5f26a80d728fd2b21c0a61834897de652d6801398802d7322c350cf4bf05e65f3f757bb024cfe05254acaf25972b28b08840de367f88ff88c635c269c3bbf48b88bd8d5f4ef3842f6db4c02d8662cb973f64030bc403800232a49b6f14b0b195dd3a1d248eb7254a6e9e82e340d28a5987c5426d45e0e73a74951b99058ba7fcb35b89bffa33ece5b05fcef614e1d4231f13e86318286cde08be066fc734df77f5545da6e6b89a5f7fecd243554ff2c87834b0c9a90713a9da862b2842cee48bbd41320c249c9c7c2b3d70b032fe0b64b8d0a41e3285af1c6b34184944e210320530fbba14226ba5df1b2b9c484d1de371ccb696b86cb53252b41b2d041cdd19c6faf5479d2f9ead14be511c961129462a9d767f5ba4efdae0fd3d4687c6672357aee62e0d4d9f8dd42b9799b4797cb6febe7b42edc76303ff33b3b1b995a9d33b3dd15c05565f588f77095a4698df372c49a789b648eb954caedc9b73b5fcdeb2091e9178f25978e085cf7c17b3b1ba206268cdcafb7e80e682c93a33791968e910554b14fcbdfa077b8cf314b2e85df77d983cb4faaca7a414ac8eaf4a5a5355f63a58aa4f964c70247970774f07eb3269a32990063b1aa64c30bd56c894826d28205b8f6a35368c0c467ce5668217b72db21d023c54509ea2d0b01a0271018faf23bdca56d1e28e7aa36429f6b87bd44263a253f2bf7378cb53e041bc1b8629d8b989e6e664595202e44492bed038a860dbeacd9e33fea847ca69209e80e67e416f1d6f0ca26a4236c751e41e0a4590c0ca49bc8612298441a172dd059e856b41f33725c86f7f1081494408a1cfdad701b52384d2839cd5e8be13f8bf83641c63a190e7a1d88754d949585c1ddfec3591bf2c80a6318860be09c574789938abc323233adaad25009cd1d921ccb656ca67afdfac111b614eab041434a9a6755ab1977b74487a9c16c9a3a547ca6bcbe50fd70677cc65ef0222681917ff1c2fa27830c8e497560aea2d097a6ad60254806c78bff12b8f35733275b6ebd8429ec6db722bbd15757539da94d2b7ee0778e16a3c705db7863d3ea829457a6d8c5626f246b9e4180cf4561b44854204dd132907ecaa72339fab6c7af99a611a5840eff153fb7f79ae3de5248334ddc6c08ccd8d5879102f0c9de54f43c0824100666de8a3bf09613a23d112a4edef6f1ad5ed56c00a9987da6539989c32710f451460fd29f2bc284ab541975ce3a77dd37551ed2a120c58735c0e5e555382f78dac38fa028719809064dba65fbcc24a1417a8ff4ef8b03b0f85dd51589495b6ff3ac016acb21d54921e4a5bcfc0a4f3a0389b4613636a04ca40e4cab7415fc1ba7cafdc4f6b7640571a70e2bc2608937fa866aee1f129567e0aaffee3f045d44ed9a39d214b7d914f21319146682292a44dbd2c469ec71ede61a399d7c1149598fc328cfa98462f89e1cb87441f480b9a7e732b5d22a02c7bc8d6aadcf62f0d922e68ad07d2fabd9caf384f0347f5c96ba928ed2c0b70428e62a39e153dd6f4348c6acf8d97c4522957c60326745509631d53a1374cd943c82891e4b051930af08a0a698563b6070d52ac8e7e5000e88c20a953f99a16c7c42910e0e63c36e1e2977413571a5f955c2b87936b7f6bb6f9f74b1ce1376358f0bd72ce1e1166876218ffc069e87974625e8b7b7987acc35530e23ecbdf31aed7a060393a252f5defd705bd90bc746c75667b9d9db50176b6759125e812d2cb6cfa6a290d8f0f80ce2371068ea293184974c288ef02922c079233ab28b79999475693848dde1637a9fbffa8fb59b61a89cdc1fcb426ebe993e7611c332f400edef669f06843874f8803cde06cb2f528581233946118b2f18fc9d5a89795d67777ec84d8a9a25b8c1cddc0dad9c28f343b6b26f0b424bc3f65e4b36b3d7d9fea93faeb1f42a2ec7d60f04069f56890230dbe945ca84acc19a80838e85cce0f53c550dd2da1021221bc9f7d5567e430d874f5cf902ee52cef1c55d971a4263024d3c937b88ccc2e82f47006c9c1700752a4a8517ca239cba60480d52b9281332b02d328d5d819ce55b69e04c01c59f3f1630a0ae857adae103f6284372d4f48dc5622ff97498c8308591d27f13c77e488ea463352a71db923535e7c7e4d4016ecb1751dc4326623f2a9292dce5e95801a1ccea0dd0a39ba8b40dea21a3ec9b167a322032fae66cd6409ba38699851e673651602ddd2750ad03c569e2d071f41274f27718485ca1bffc9669eeb0cecf466c169c22ab9c41275a9e7c55f51390e672aa3c843ceaddaa08b69a1b15d4481c7f171e2e8cfb3baa45c0b9b2c1862319262641122936986bb1af39d3ae5558f6b96f8f529f5728e49ff4a9ef8cd9675233a0b1b71202f610f65a659e3611f24f8875c751ddfe9de791933e4aa4770a9d9c39a3bc3ce353478067391d1064e9643b4c1e02f9503e9b724ad5da251f11ba207596f219c2b8d47630596e66a5f8052407d70808c1b8a0e14a539548a86b472d4abe1f588744e5f8ea0dde662e0bf27521d7934ea0e601b448026f439b507eb9e5757f6635eb28239cd967777909ba848d2916ffc30045e9aec0974137a8d753f2a73cc7f7cbdd4473e455b2cd75d1583e52af6ae524de1ec7523f5227fd13b3f533e0e22b1f3803928da4fee26aabc399737100992b26ed49d4b8ece939f2a4924a2f80a9af507859a76e0109160329488d108360b05ee20a32ae781ed028eee0111efd7910304ba524bb3b7b53af78fac7f6cbdb3386e58aaec871eb539ca2c04a9b6535d91285212d6e676296b1448fa0dd5dc7343490c327910be14e2459a8bcd416eef1746cd1de69819e8be109c35c41d154c114a170197f987a490e2b7ce433f0e06616f49dc42951d58b81c3016f65248633407104d452bb83d5b36704b2652b83e82776c4f8e0ea521d62860a0fab30b7a33a7c0ca63d4b2286d7295093fe849efe228f5aed5eed0bc69e4d91ba455b73f68a550e3f0b1d820f78c07fc5315b9849075081cf18910b3d434645e209c25846946ff3bd06037084863232b891b3d0788a9685c3d79bb4209aef83ef33300de447f3b7926d8ae7e7208082325344ffd1bcc264e2b046d3188943ad882c924fd9436df563eea10b19f6edbec4c170cd30ab1a87f7514705f1cb31192be494ee00605e52aaf27ffd62743446a45aa10fc82eb551db98cfa01aa0f79d0e096d1a43e1b99369280e8c1b2b91c2dbed1f590fd6ab9a52d62ff41e1d8e12de2b44065a05f1d001e7a61baf5aaeecac5b812da03442eab885c0b2d61ef458a3a722ce9aeb18e8049bf5070b03b9562331f59842127a191d9ae0b0d72e729ec97956065b8bbde18e1b10762efd0ebb999c84040110104f5126767b936ba2f931e5f538f7f4c40d1a1a997e91d999bf8a7c29bd498ee99ce8073b1ce61b83541f60199be4cf270b7fe4968618af6534da7fd9af4c769491c9bd852d181167a770cce385fa5946d5aa9ff836f88e6089d11ba4c02a681cc96106d127b28f8915e461430111ef956633fa8c923e2ff75176a5f147a10c02c2c514839c3f64c9cf1ca3e09f90ab8847521e4022997bbff9696fd295d0e43a330729102cec0b2901b8f72d09f26c94abf81eecf7130a6f8cad9810df368965728f2aa4252109f71c4b3d7438317380e66c380038ec96073ecc001f12f0db51e6f51e9fd8c6a011a95e340985d0831b2b712fd442513fe260031852e021dee139bbc96ff09e6470c13144d856db04051c6f4e3b43e45fde178f36942e654b0ff61b08067d76c7052b2e0fda7f7eaf33995bf78f49efb2156aebef0d39bef399534bbd1e8dc50478dbbe41538450c1a17096ea27c4e30a51b36d03f151279182481463225ef9e09e5e592b5f64fab1b800c07fd18c3227b869554ba6408e2b30446cabbe68adae04c6ab24143a7f4464f85e379c5904911151959ad77e70efc7d2a6fa271140add135304c70c06d064593cc75c3d59e68061c444a2a98e08a0f399b8535e4625eec860ec0243ca0b16aa0f61c8034fe9f0137e2237167927f1eb015318f072e43b0ab9053da8d883aa89323295113744b8eec1ce10424979113db101834ea445602ad6b13a943572b6aabc70fe5dd226c32ba17cc3e38965420aa63f352139ac4a322d52209fadd613bcb446ff034b6c35aa16b0ff626a963d26433e6930eee7bd70e4022cb438429a769245513f364fecd145f024261848524ec5fccb79c6238eecb6a9fb4552d32b54c470bfa8ae4aeb55dfd52bae1555fa57858a3332da6d137827111261b3763cb034e8b7f69a8e95f3d6122cc8953ca81e80b79c45e3c09415973ffeec90cb9ad1861e907403aa64a3074d3c3acce9128dc240363a2361dc3cdb78459d603ccdad3bdda5960e42aa125b560b53a9a2059b67a38c2b61df4ef4d9d47f7410ce10975132da7b7de4f5e742e1822105333c4d189c5291a894a91b0d54909d6438b067639f34802cc1da490737ce0feda02762b3e6341b91451301a1a9bb0d44f2d2a487337e53f3bcc24a6ea1a48432c861c053c247466930472343cbc4bc5691c03e6cb31d29ed8b72938297b20275dde46ac1404f88d20f6dfa2858abc727c294e918cb51a726e39c83b7ca222d6107a4fd4ec6c96b84887d85d2bfe1d64984c8850aa141c823ccf25ca210e1d2a644432a802c9a8cd52071633293369a2640ff07c0725622113d43b518bcf0b4851fcac1b0b4c28a68e005e0dd71dd080cdc81d15faf2a118b76b4f2e67489a16d33b9558d90fcd4542bdb106dd63e16d18646618d461917358c1306989a0c16dfbd408e6dbe4e5d3e2bbad24eff7547911a8f0831350176ebb37f115f1952ebfc31e5a0c23c3f43b7b50a24908f1869821d477bcf7629dcc9853913ef1430367bb3e435c43d5ab0fa56b0a5e2dfec33b4c9ca6ad74eaf7438ae14fc6edeec4b980eb51c32195cf9fe5bc98d938e9e12becfe21660abed53bdd783b001f5fdb576d61f600119952fda664bf4d4a5a2cdafb846d88d4e4b63a52b7bb630d0cc33cf62a98368b8d7ac263d1907b580fca861c090450aa96df48c0344591bd2013bfafbe007b929320414199b2d112813ed31d6f07454014951eedad8d35a39c6136ec50c38242ba3f08c0fd120b1e3bf32fc4568bb1cd561f22cfff5574fb61cbf8e0d90cf622ba6b9f1460c2157b195008b786ac75ffb04a6f2aaac20a10757702582f601f0ae5b9096fffec03f3a7924ebc716ffc8efdf8c8d9bc7d14c6b58b6159fbbfec04f1f79a07f6552e2378222066d439f1f9e3169bc6e9a54310c4067154d9a58178d7d5b23b6f7c7f1b05bb158f8cb1fe370297f42bfed796bfd25e141591c802d097de5c4cbfc9230b5220e9aa024344b7dd6a23872c2840b9ef07e1298c62acc6f5aef5fda66419c7cdada8076ff41c5ddcbf1fff5fed1451f5c00548f0e4288ed91cf45f70b2a1a4c7d1b0c9c550840a7486e22af8946c3cd797206810ccb90177b5853e2d0f8a90df9d1f3e23726a0a0d878fa2218d650bf6b1c250278f392a8419f505e95e1d53d3d041cd85c64f6184c42bc9311363aedc8a884c05c624894330808de0d8a2d08c1ca6c792338c311f24042ec129436cbe21b57ec440a4ba20d57a876f6e15a22f9064195d7ee98b532c35dc2caa1d062a01ab2cbda2e5fd52f191cc960d589c6cdbf4b0f41327e894a1631234a12c0e5d1bd7b578b14a0d49f38b387180aa23276fb6daad1575cd3ca1020c636d453882f49c735f69ed33d1515dcf514006540d9d04c54a01683a217c0564ab6db81729c2c70cc52524bb75182cba3cc9e051722daabc30264c35ef4e3a6ac7716106ee444da9b223ad0aad89ba3a155816bcfa1cd999ec57568fd07a89916eb55ccaf2088daba87705f6896de956ce269ca08b25c4b4831d777a6519e8c8e5849f2d26ad2fef81e4004be123e0829f0d8411ab285e64566635f08c24682e7e9ff9723cbc86a4b054c93b5de31756fe31d3f73685049706ffefa0284dff4b857949dae7cebbe6e7cf6fdfba13e8083c85b3225e2ff8e18188214fef8a08406bac347d49c08a16efc963b8c93230fc0d81ba73aaa1f62d3e08c01b831153fac8b135cfdbf71704e7340fb680ab06b780f83b1b722572df74c1901080a258ba663b28ca4914d27b3388bb19e4ef219b1695b7bbb529aca8917bad9da0c143486d6236d99f5feeedfa99b1ab423517cd0b9a3dda202424d402d1d854d40610d73d244235a2fca155a0054939f7a5a313f943f2cad4a651f94418e36d8f5fa4e2d4c18bc286a28d2277223065e5caa985262c23b701cae8a027447dd12a4c1e04a699703ebd3f63a7058b53d514c6489cea82d6a6dfdf7e86475c4080195ada901664998fc140e37c9d3179699747ccf4e3d17e8e3a9f0708756805167c779efbb067b59b5e8fd791fa2d59f87af7d47c45ee2592c7554069c1aa966b9959856667b280f3ddb1ea2a81ecacb4e4107755bcec89fedf97c9fab414ef81ebea4c9e29b21eb0e4e69e15b2a632f8b0802239daf72d65672e8b44a13d015cdc00c60d525e0b636388056c03b30bd0726072e40311d0980d3229b19a400e9c2efdabf81820dbdc7f03ba3283845ffe1e4c40ff0951f118da7646728e49746bd90c300c7e995a67cf771f750440516ee4757b5547114c2477694be7ef75db038b5ce43c485e21c781caca502fde24ed917ca5051d32345b25cf8feb3ca338a86132d63e8740089df1a0650ae39962f4d3dedec1e30c344ef879be899464bea0e01e81f7c4a91ce04e86a7c43ed02a69e36b04d82de88288a4ea53deeec207762376eb2e66cba05cf1696c28848dc511b100354ba018f8bc6d8dd388c0d99bea2718e240c9069afa75821d8984e9a90b5bd845321f9b058a132f388beef94ebadfa58d4586204e37e12a158176563d7522ad8648690c4c85dc2984df09c66ba068d40cc41b28e3036c53c3416f19df65eaf0fc05b1963ae352db3c2a1f5e6c127c22b52d48aa5b369d02c3c267599d08ed1739455c6f36c4916062811b85828c5a8003a2f51b1354c5616d15c52ad31813f0504cae0ad0d6410b6368955dfa018463e21423723b3a4bb352da4ba042be327747c839889e13956fbd7e2a78fd4954755a29df9dadedc80313312a18fa7d171f631422c95f8a8a273695521cd622c155b26143611c288f1cc6d465fbd7042b63bdbe2a05dc6c16758ad2a82b710f96026eeebc82b9cd11a43fa1a3ccc0e0c87f467438832f84f1f632b774c7fb8fa346e181d975782380fa993dfcdf5543facb75d1dcc5b0d27933cbc8ad68bf80c1a885b00fb0964fc15f2feaa188c22b1b969eecb5482fd7a45c4b1ca3646a78c05e5f80e6998d793f2447e16a7627a29f90cd6359353a46f31cbc5d5c71ad462564da26ea4c315d3ca0aabe1b6b4f50fa988d0c70856c859bdec86ff5b559634cac36485662816e29f7ed965c65b6f75121d1c71ecc484e40480a98e245f8768bf3434cd30e48b3b84b4f7d3a71b19b88346c8ef61f9e44fb22c1033e3a0afb806bc003c7466e8e8af355b1a0417a401464c0f9abbec312b21f7e816351a54305c0be79d80892ea0cb67ebbdb6f7d592e7fc7056c6b83dc12c70feb66e1550b5bbca9701248793f7293c8056b95131a25f4329f38ba29b80db8cb58cfc19e90dea46991ba54b18b276ec9eedc295362be61c42ecfcc0355615a757e7b48cee2bbe13d41d9cce575bd20cb98a2db0f412544bfa311e78647a3e3ea68c05d1f24d0c40c9bf2083b36f4bbcac44e60f1a27d54e0e156d86b6367329e6e7db1854ed16100e4f85a1e103f094e63d6e30336b562576832bf30b1eef17d2add3353e32f8136bee0dbbbf1e381cbbc4146843400650da942cff4e93b8884cf361c9ebdc79c1d4c9dc0c0aaad61ec0dacf97069402c85f56c1369e5bb35bda74f0880d8f450c6d9fca2f811228afc5173e26b2d9aef84362253b0f15cebbbdf3ba2fc821f313e396564df9aac349773e72c7238ea3df9368033fd8bae9bb0d444505f8bbabf8d82d7eddc75f2f8a33aac073ad251783609072b7e2fb1545d76fd92bf31abe24317939c256795b10baf0dbf03fdf44aa0012f4c30c9a0746f598d846989901e2a4be1e405794a555bbb979f2ce4265e3a5be6e98aa95d75ff133ca98c8f84dfc6ea73ec0203ae19bd5113a80c9a0ce3d34fe940b5568f1ed9bed53832d8541772a454faaa0c27c172f6af976f73918be10c36c2bfd41cbaee0b6fbdb486e52f2ecc564c64e6179cea6939cf86e5a666abfc42ed8bf13ad543ba552dd0a21b77352de45c878be8001a06aa88d516c01f4f23db260a16e7bfe099bde9f36a098cf6abd012caa310726dde05a2b824587ab8555834d1d460b9b064f5fd3ac52b336536e8cf107d58651790d4fe8e63b7280e9bc2a38725cdb8e2bf57d23f9224350d8feaa3ed371921b3790eda626f45f4ef4aacf84c9726091097fecf172ffc385223c0199fe591083304438b4f8714baaaff33e8edb26ec5244f7352498510f351a22c7be0bfe2cf7560791f0c769789fb36589bb3511a4af37b399acd98488e1ec93983fa594b9ebd20c81d47e12302cf42864058e2546b48a83cfd1f013b5e6041ca88db363d488ee9904645c7315f6e5bd2c9cbdd7a51d565bcc1201b6695d715e8a266585008c0c78bc6ec903daba632f76b718eb11f16f56e328bee020a1412922b05a8429d362d05e7e014c76c5206b19d9e4b283cdd021d600ab832b9c44e3edc3e4214d88f4494a1cfe68f18c5f532d2e6d9606c57c2aaa410082f13403678b21657a9c7bcc80fd5eb436e58b2801f3b6df878fef3ead6a374ef48b16a234dc3dbdee3a1a7a38c0a68f57aefab6078057ad5fe09b718a8f442e009b2761f1593e3695d9848f0f1351910d20e3112d4d17e0992f1551db6659167f27f32988d1b151861dbf601885b7ccb49a226e106a6c6e6f11336fc19dad41670751daee2586d51e63a7b3fcb1d67b546f4929ce3e0aa0e52d512d55ecb4623fc3a8bf89acd80375dd15cf69b5e4d2ecaf6ee98c282038cfd1b9696103d11a741cd9d4fe1ddc7f994c6457d6b24978f5364983bce1f9a78357c8fcac5e18581de3f3c9ade1b284cef16d82ed736332f355caa3b002ca74347b12e178bc95b323b062449ee0f1c6112e649ab02a6178b8f612580d0dda771dc320c1167ba21a280534882af21370177885765285acf06bf6ed1f49c242182683c7b962cc8445c438c5ce250f7d631466430e821850fa2f7fcbd3548043f2787927695923e7ae69187b076b912c6ad9afd79ab33461ec4a0375d2d17ae9fe6588c2eb1282007b3431d1125582dbe953894cd675f2b2d52fc399c09048eb348e0af6c3441ea3b7cfaaa0e68160806043f1f154c17b992bab909573940c18cb775f698f655914e7d19ad71f56075a3c2d11407a1d92e6458117d75e9bf3cae4a5002fbb79f9e8c5a4574d5e06f062a7171dbdbe7ace8b06af427ba9cfcb939727bcc0cceb201818d9943e396d817ecd30ffa1d021a3b6213c13a8f0f0470a2b87790280f5b1d096a5460a48c4b98ab4ddddabaf22f9ef54be328135c4cb1e2f9e7931e715265e236ec40b4141f2eab52f0481b5d4cb8b1767bc30f78a50af39bacb6b072fa67bd5e865a017eb1be9433fdc4a5ee2459117075e9bf4cae825c344f27f8757afbd9af3c2c4af0581d5e3a58b97d3bc6cf322c8ab1d5e9e7971d20ba35708eaaf89e94b54017bc5e7554ebca4c3d851cb08d406c7558c54cc009f4b991f148df54c4a16f177b347463e371a59153093c0305cbb607a05c10752754f24e0318db6e97cc8dbbc109756d5aaaa549bc419b2ac2c314b0393fc13f1e871d096e98bfe60f959e88d76cafe8713023f1e648a4f657c0263fe8d48e2a549297b5a3e217bc7784219a4cf2f47588ec3402f327896100076bd4dbee5da8f4e340e5892559fd120120ce881756556baf7a5263c61822530413f8648200f805f700d4655bf0bf68574c80c8f89b651c687241425e8b41918679c4429872f9a469774c2c8e7c5c2d68b1fe41a94a7acbe39985baaa8ee8ce1bf08512d3e0acc992243887dd6a3c8497800046a24830ad0556d58691043444aa28e8ff07f75891b140bb1be840500f41170d99cdfba9165f145b084ca77e993b10c658bf2b8edcf1e134528f66a39c05c9f09f623cf78d5d094f4cc52bb971fc7d8ef3b1ad033867dedb8828c819b4884f98aaaa7841311566fdf861d388336e9989db874df2a700347375b40a1815f8f9f7509749cbceea3e20ac29ec428fc93741bc18c50a94dc03f58e50cc92a729d11a0ac301bb56b8d1fa5ad3f0b588826236c60e0bb4c4c7d39a000cc260eacebe74f64098cee8b1a27db99cb63e3eb95b763aa8557cb9bb3b14dc7770df649fce81413465479eed7609ee7aefb5a62e4c9ce9927e2cbf3d3361ffa608e807e85004528c3b01782ed2959760af9e403f03e334e94b11fb4aa490437ff4d858df6b91e4a18d7cd9b3c80104b80879a888e526fb2d62ead77206a3599f30036b691a2379dcaa526a47fb628431467fff24dfe8a0ec39f695d38b90a5f1bb89c76488f22b37aacf5c6c591abd03bb92d7c9e2052973b48f6eccc3594c1cf6cc1170f0869538c43f6a15d6983c613512c5f75e8bb3e300cf48a9cd8e3075a3b6830e017e43645b35c59e620ee0a74cb26df8529314833e0dc7125df8dbb093d4ea2e6b1ba2abbe1327fd95d1471a2e18ade06fc4616f84c615e8ec6509a2457c94c0243d2ae5c278a9ba43d96fb810ed1f43c2dc188189026954a4402423e206fb0c5e2ddbe08b89d7e40348aec69b127a32f459f12bc9dc31c37a77ab463c64ce27e0428b8c76ff3abd96e74f84b90b2baa044c484ea5d10578a8c88608e808c1b81091740e9810c2e8362f461352e76e111ce12c4865a2d4e4ba4f8876427473db86e3022dbc9b8621cf54a252297ff5bcac4852f0b702e94b83a580ca3bb85132d3c6f56c54bee603fc8c97282716644b76a58b0f0602799a2538041926f95fa8cf82fd2ef923446402802684deecefbf9d8546d7fad544bfeabaeefe3ee000cf5fcdba7a3c3c0d2fe4f3406317da10b30a3580fe9c1e0097b12a588e536ed590380051ccd31fa8aa8b42507914d78ee5812d0ae8cea77c19694d790bddb445cd10af1567ef714ec85a2446047a3d0af4b94726c734ddd011a6370149bccfe6f17a4805052f579e8838ca19f14064ad092666916f73100158d308c268a24c3284a301286dc4f993431c2d124a3ed9fc74e0abe386a08a2643236ab1798cd9b39bb8c629d11d9a1ec31224e85cb7c6ce2367e142bf81837d03b68414d73ed9c6b2772eaa81122bc61f9517a24776921d00017280a861d39664e066c34f78aa2a8a9d387ba888e4c553a10a24557b7711ec574b3937307fd662afd9dcc45105dcc3c6c607bdd113f663a50482a0a3e8ab484c147cb93ae50a5180ea8fbef1cd9a2981b437b11226c4bab4944583167536ce7fe125034914dcf26ab7c36350c8d9ea4d5f7207bfb0127a935638e60ab20159847c68349a5693b6d08110e0bbe90c03a5a9b9b94760958c134c576abf5efd48b8ecf86fdd730bd8f43880158ce711a9c7a38c9a9d1a52268fea38986e52c66cc6a77e56aa645a4c46a210baf3cf4ebb8d3613676e45100c739ac0ca51721515e69278025858c099319d7cb9466734b6a268f931aedd6ede318f38b75c3cf804c6b8b35bbd98cae3f56e606b9d299ab4b5fc9a5c9ba89afc4bc184e6dffa2e52bf0b4d36e9650dd5069694c875444218413baf2e5af762ea94ae0935f23e454cc579c28b1c549c4bc5a30179a26ad8f948ac01fd7f026399945e4ae8547132e554b7e4dca75cd2b67935836780a3ea8ec2697deee84be8201e3f3c860a0ab9a6f6bde2421ee4ad32c8acdb80dedf15a2b6e187ea64f68d8135a98c36a8c286aacf53faaa825020f068bf4497a0427f4399df573b7e179c7fc973b7517b650de06e33c73d675ec191687db3129727054a29c8cbb9dd9affde15055753656adc41d17db2381b153fc3f250ecee1d75ee417c8aba62eaea089c60bbd3f8c3926048daa9e0e3edfaa5a1cb76121de075d931aabb2194ad97f910e58d6bc4abab66d26e8af7a51b9aa46db17edc22f7aae9a5c40446b645932fb0d1a681d24a2e78cee9804d9f8d6346a47a9c8498f5658110d0d005745d5946c3691dda9a553859413226982076d365a95c5553219e991d386988a41028bca0629c185557f9914e2bd4599144de9dda7a40bc1a2d59c4d17068a0b04b3e62f40aaa57b8e07c7979a5c49195e845d970d5cc06cda048f8130e6e0d23c8c20a6cf1675f6b8731daed96384a187f04eeb3adb2f0c334b1091a9ca2f972fd7ef5fe02493a80df9d534cb4880f17cee3b2b9a89d97384eaeed990f8a61d7865461975375b5ca3df4efa38f006228f9ad1bba5f63340d593d1399ee8f2146f8809a44e9e53e182bcd260e4b0866d077a25636bf3bacdb2ad80af6121b074192276101f72e81a42a9adc7f5d436b29e7f822ac103a15e8626eb42544863377c12ea9fd048482b8986f23d6b782a8ddf44285a1ba41532de81d81e052abaa766c9b53ce6e99d1f42755c07f1662231104f649a932f7898f3e298f7bd37536a8d3102c29b924da149244ab2d0b0f249a131dad721ee26951cc0d80b361e183905641012b696a847bb735a4980ca9370216baebcfaae9aa1707c81ea261a28c48ac1945ff5faf58d1e01d7a8831b0105789b8c71d51aff021dc085ffe86160655005afacfe26429d7cefac4c735b2f5eea460c05220c1bf54d0c090192a1e7298f4f9b040309c3037941d88f02faecb3663c11539388d7c69de4ba6cbee07f9ce0e1213233b830e9e6246ee7369cd9f29e33c4b95e2e1a8cdb9ba6d02cfa6d34e28016d7074077c1d906972d32ba54f34ecd8adc078c7fb165c5258bb186c5a442e374cc0104764b4281b26fdb050a2fca2fa6b6295835f0dff8beb190a7633c821e0a6b98f298b1bcc7d51cf6312578ecb25837111d99cd893f45c3871f0d938427cdce612f7722d6dad1760d8ffeb4cc91a01b590886f0702b2b179dce6ce1a741c94456a127e8cdafce282c0622a59b64c5becf3a7baf210c6ee86c0c6e4637ccbb557587817f0993100a44314498242eb6652bf98b8483376261a174ca44a6d0da8556473fef5aec89af44fb2af26d3ddcd3a6e246f0c48ea28da364f9c4881c2d30b92889c6ca2d6f99ebf3c55cd3689936ecc651b279bcc77cf67b085bbc1522b290380bc72f115805e2fe1a1f32a68ad44c1c3df96d828a3473a99d20939f92b61251e0dadaecee6fc56f48256355768048a2890ee982ce3e0934e011b2146da83be42e0e0beb7830589e3b5ee6c3e3d4fedc00e2040651d9650aed8d40ee509c6802ca764e061ae0e19780318f35b7eda76d21f835e8363e38634c203c13b42c697c5e012406ad34c7093a997b37f1dbdffa199bd35156764a99917dc9c2f4a51884035f17f209341a6d294136492ded658cc7f4d7548fac13d7fb32415479db79930b65283b7f0ab67cad5a44c127855ad402adab10a005030cecea958d54839c6e71ee6fae119eb1051994c6503070b1a1b641c02969f6ae3003d2ff9c4c5ba9e4efdaba0e0098f5de0268ae24c5832e6029c5a2857f5730b51940f652660977f62c9ae9ca337f1ddf7f4b8cd72b0914dae603e5eaee6df23be5ec8b6259cfdfec699d82bf21968e22036c6102ae1e44850a3860b26639ff0000000000000000805ae02082cd3654094e494ad923bd50c6b9ba292529534a49c24c7cf47466e2d3e566dd6829f1e9cc042eb20a8e0a930a687c3af8208261ceed6f2e975a4dd7790cc16497b535b4dd88dc721d0e3e84608cfc96ba93681995936ff0110493082a9fec8fb8fe2de2500382c943b47a8594d792c83f309b88729d21c446dbe7037344fd208230b97f175c1b7cf4c0a046bfc2542ed78e0726093a7e7597eeb85d3874141a7cecc03c974fa4502aab3a3004512a654bd7109d4c3c52061f3930a5ec594f33110f1c986542d03495e4c41879e4d8c27be4c071821b3d3c043730c7b7b009219a52f13f061f363057949ce23a296b601853aae2bc93dedb9406869cf5b3de3d2266d583c1c70ccc96a347cef94f6ea2c6a1562ef89081f9462d2c967a9994e5f11103b35ef8a417350ec1070cf0e305a64f5591a023ddaa7c1cfa850f176c52653d9e12aba0c4a12681b31d3dbc40438c5698f368869d0aedc95338062bcc1b167ea93fdee4f9ab30e508a16b3e7755185363d65452553141a930463ee5e12abb6684890af36b688848928a710a830879ff74245f7937be48416f512e03314c613cf7902164ff5ed2932d85f125aa04b5b85a0d597b71c3cf7801314861f290347e252b56b7ef8249116314e6edd3f6d7364972e5a388210ae3a7b210792686a988110a93d25f3aef641f879ea077a41a59d4b861aa88010ac3ea29b917721ec5521c6a68f909d35338213eade60973fc293d5e92d3b25bd888189d30ddb6a57748f7e16f84436dc7c5e084d93a89104b5df8ac902bd603058e1b88b10983b6386e313b07c5d0846994bb589eb7ec023b7ae8309809835a93623ac48a50611d397a47b2c38479d3b2b45e2921324438d4eab8887109c3f54ac891b37b56d72d613eddeaeef9d47974b10552eb11a312c6f4a0431c6f47108312a67efb52e52526c94e78600fe7c11e63122639edbb5421ee73822386244cf2ce54e7244f2c1f231286536d9bf59f5e74f801312061360f4b5194d9d64809393511c47884294369f99474f7ab0d88e108d32891394982987feb9880188d30e749f954c65975ce0d3446986f2cbf88b4efa93543333116614839c47daeec77426715611a2d9353873c0f6eca44982598680471a13a7588fc023cb6f0828b1c8830e820f4a56ea43d21f11a59d4c8a24616356cd84033c43884f93b5a8a33926dd255928ebed103f90e1d11b04004b47000c9430c4358d925c48a5d965ae9465954af94c61c5ce4d862470f1e3a72e003b2a881811a5a38a00662e11bc4288449055b49fab9dbb3840861f8103297f679c743671026e9611e2dadaba3bb823076aaff4c0a3510667317df4ef7a6a20f08838564af272f42dca7fcc160ea46c8cd0899b1a51f4caacfe257ad57d6df07537a532d2fa9f2a97c30a754bb5036b24646700fa693d16eea4d9bc829a607738a9c27989ee45a57e1501d396ee828c18eb41e28f06279305d923a394524fde4113c182c44f54f37524736bf8371928cdc113116a9467630e76ce7937abefe3c5607b396f60ea7547508daa183c9bc928cf5e59ca434d511630e2665e3917e44ce2172580ea68bf0733a099d389857cd84ac5aa46cb9858331ed227624fd7ffaaf37988358cef515522de5e20683654b5a4907b70d86f49f93fc1096376b6183414711b1922f7a2925b20693585db4a02ca60693b0330be2ef7764490831d2600edb8ba73735dbb295e304b945a32e1ca0f6858fe0c6168dbad8821510030da69c72de855c366c300c629cc13412948f8c24fb3fab19cc2a49241fd1a7e35b57088818653056cc521b13b92c888a0ce66c4252f20cf11c533406b3658997d868fd8fb31e6288c170953e794e108d530983d9e46d7a909e3cf8e4701d6280c1742d3adbeda96453d3178caa9f23e8d28b15abd2218617cc419e2599a442b0b9bb0ba6eae0d9dac9d511811a59c4e082792b9eaa109e924bae481c626cc1b81e5346f35399fa241c6268c1282a82ce927f9205636d95850de929a7bbb0601e887105930c31511752cc9411b182517fcbdf3d4292daa22a9862274af41531150ce165f4f7ce68b9e731a66008c23727880a1ec4ef86185230f76a8b4a518da0d646c12c427cc56d7c28a02cdae824475f9e606c1165af1226dee9d7090625525b3835aa4788d586184d3045d8ea4bfa2f86e7b0d8168d1188c104b351622cc11cbb6997ca3656a288d710430906dd75e5254d64e813e1e891e3044930a8cd4fe6957ab3f9b9e1c9300a31aaf2c617e7c60d2f7818a0070a8c0d1b3d50e046887104d385cba48aed938b6104738454e7bbbd679e3d38d43cc78e1ec510d8c00d00c4288239b753ca6f11644751952c6210c1a8b5f392dd6d84529fefb891a6c5099a027627e81dc810d8c00d07c41882b12fe66fe979c918950a6208c1a45fad93e4b21822df41308c25f50f31cc3d7d0c04531af555dd624ac4ed1f98f4d67ed657acea087d605eb90bda95d2ed7cac07a61c4eeeba477537552d0e62f0c02c6e26ddef93e8f7241c6a8725d881797b4448fca8ebc0a0278c641fb15c4abf1c185f3db7a2df7d77663830b58bc8282d7ff966528318373069d38be8dfc9dcc36716c4b0812167c5cbed0f493bec3530ff7eae1b1de27dcfa58131d2bf099d3e16969e81f1e5ef57d67cd2478a0c4c09d1bec13688110373ca576a259652e2843a631003066679f5dad5f5a062b4f302e308b1eed1540ff1f4165ea42eb2e0182e3089a016d4bb2605bda621c06885b9524572486bd94cc71b5614062b4ca276f3c3be69f190afc2a42b65767c30550951855947d89a5241f9dd4752610cd90b2ee24c67890515e61fd9515697a27ed04e61ea11b376dd39b7d14d61d0b0fd9cb632e7712395c29043caf6af5721857144ae32bd728b998b07608cc26cc1df54d64f558b4914069dbb5f4789142f212914a65a53d232239f8b66ee15d0624161ca215b8bef8853bbcf270c163f54129ee7a672da132639e969bd94a513c64ad6b9e47cee941e278c736395ff92ccb5693d50e03ace0a4002af002f8c4d18f4277d3c75a344148626cc714489aa1445e45c3b0b8c4c184ebda3e5685a445a480930610e3e1ef5c2da7d2e2ee1e8ec7172be99978b2e7af028012a5620b0811b278061095347bb68da2f6b57a6e8e9088c4a98e4863e914447d5e9144a1867829f65f718d1e4641246f7e8dfa73ac7bb182561505dda2dd56f47d16044c268ba39a275c2bc258543ad402279e163473c490e188f40c44cb86a9c8c984b82e10893fe9e742f29fc071114008c461874df97c593534a2bcb1180c108188b38188a30448bb91573ca430afa121ea76024c22826effd26a7ebb98f08a3f7047dda836629593a844989f230e2226b08838d9e10754902a310868f09b22cc439cf21088310a64bfea21d23b470803108e39c5c90954279b6480ac214b5d6d2ba5f0261f6ce254b45573000619c3427c793c83c1df63f183beaa9581b162dc0f083c975bbf6527caf2474187d30a7d2779e9b5b7ad4a70330f860d6b14a6169326de5e35182f6e2068f1c6cc3869102c61e0c39aec85a104238d4accc00861e0c3af3aa245efba49371a8251d5d144b3a2260c346e92760e4c1a8117cd28d6ae9ec0a0e35af3b040c3c984b8fe84a21d77690671757438b04d801c61d1e0f55f77e1f0eb5ed020c3b985aae75d7b7e3028c3a18bb4c281969e27b369b0e86fcc18425358b969152038c39987343e73e4d8aceed09430e86d159b77b2e77b87b5edce8d137925fc38883417e3d5682ca6ae7e6173b7a2c1ccc4929291f84083597ed3200e30de690f1102487939f6ff322c70878b8c158afb5a2ee715eedc7a156a6d7066367e4a4747a5b4b1a296c30be9ba8646245d2b9670b30d66002df88ad9158122f5318542b8772db89e5dd970215b133a3fd375a52f039bbd342de68e65b1c26838c5118d5234571f5f07d551285617e6f76eec5acb60e8579cf3d9a10734161b6a44fdc842047e99f30854b1ee3965208f1d29e3005a1967bfa8308a3974e98f5f3947a39fdab0e274c422525dcfe52470e132bc8d88439f6c37f67aba47e2c5490a10953e83f91245f52a1722901d7801a59d4309e828c4c7c2103139befbdabb5bf27ff12897c4a9c102dafbd2550774d113b1dcb93ba12892459f4f88520b2cf94402f8697eedbae3a89f3670f8f7a9bf24949782ace3272f01d55aa48ac91524508c9c22511725cf53b5752b9bd682eca7674d1a31912869d51cae48de48a91f3a21f501c20e31186bda04628fd9caa2ac911468ff3492aeea811c69f381a722d6b4fb78c30f676f976a893f9a933198b307cfee433f1721daf5784f1f2fe8ad26a4a84a9322be79567366c1c4106220cfa2bfde4892617641cc274f13b964a712a88a56d0b320c61caea9595edaaa07684a3478e4b7b808c4298f42871d94f6adebdb77c90410883eafa2cbab478e49c17b3838c41984a9f5e93d82976849021086388ee9895678212e325a04616351050238b03ec4046208c9df6f3274f7a42ea1d10660bf5345f41f207d3785ea80c71f5a9f27e30e8d2fd20b7ab94907d1fcc611bfa733bca07b3798e73b5bfb3773a7b309f485eaa5a173d1847a8e84b9244c895cd83e944d2ea50f1b73e8778304b5a713b693a12fcbb8339e5a810c394acb7dcec60109f62664b87aecb791d4cde5bf1bb3fc9a8b8d2c1dc267c5c4f821089dab0c1021973308a70f11393dd891502c89083497d5e9a0b21a5d9ec71306593b27ff25386a7281c8ca62eebdadaa5abe46f308b28ef6f112927c8d573ecd0227bc8708341bf77e89ce29a04bb0da6b3911ff27a49c99183c0066ee890c106934e237752e4dcc9fcb206c34910428c3e4ff9cf83434d0da6542a5975eacefde55c461a8ca2bf629a89d160ae7caa3dd29f0925476730f7a5a869a9f3e568130eb52fbad8d1838727ed0202756630e590152d490a9243a528c8f15c06a35b955825f91ff92d19cc2df6b9a4a4a8a6f3c2a146648cc12c41e4158ffd1143d259e0e0d10ad8f3a2b960800c3130c1f3445c53c12ae5c360be1c3949bf46d2ed3d184c36da1bd6dd6ed1c50d3509c8f8c2712e22575d48da35834086174c3fa216ee91b43ba97ae4b8512220a30b4b8a1564b249b71017ca1a9193255dd56dc15849df2715c29e5c4870c8d042714f8574114d4d9f05c3c6ab4e554a414e0c0b066115e3c39d8ed86b5fc1d82157be9d88658a670553599d4650593c6ec9ab60aed73e8f7a4aa65eaea860ceebfb140c7b6a56645ce44b139182b12d8c0a3251ddd28551308950124d65bf3ef7950990010553b5bc9e2ec9b177949e601a93a97195a2552aee045310d2a2eba8785d13cc393fd4f928755a62aae3045d9005c860822984a8f8593ce87709598279448589dd72418b694a3048d2a17256ca26c124b4847fdb6df6788b04536849f1b255b8b0321ec16025b5548ea22e5cc74986118ca26de4c5a75abfd8777471c375e4d842478e94510473cde5e7beb020026410c1285927ce4891233d8f56011943305d8f1a253caa38d4b8f01e39180232846052b247cc67d605b9054046108c975ecdd7cf73c9bb38200432806090af2351aef23f30fa8dca362ff314268a64f8c01494e5302a8817f5e8f5c01872cfacef523bbac83b7264f0c03c72aa1d4f7ba4337f072693643a85ec900eccd6973fa99f545e2bc98121a7389e7c847060c8e6759542957c49eb0d0cee71c2c8f8549ee26203934e21f58a6a76f69cd4c09c3a24b1e05e6769cc0bc8a0c137427bbe6bc9bd2f0eb5828347e3c818c898c10c64c840460c8ca03baac8564717396cc880813969d719f5db0bf1de1718c35d941a093a2f90e1828f5618748f1c95a53bacc4cc0aa48ceccc4921c5a1050f1fab3009efb3104e0921bf6fe1431588dd16fdf954362acfb1430b367ca4c268a9dc2cf72f8a52692b45f84085d15f43b8dfec79afa7ec071fa7302571b19c2a3385d94e99e7b471f928c5d5f263134ecda4308a34f5a9b9fd1a261d853177e4dba8f56edbf8218a748efa47352d59be8642ab90747ad15a13165070b9fbf127278bcba94f989dcdbac683e50a9fadb127cce65154259f347a6ee2502b03f8e88459cee6aa73d529d3951326754979d9295cdec9d9001f9b307f8a154fb84c3e3461ae50418f962fcf0f392d3e32619058e5e915422f4926f081098350a245ec558a26455b8257077c5cc23c6bd1543be8f68f6cf9b08429efc58c794e5397a7ea47250c62d34ca29c05edef97067c50c2e821a895560a49117e347c4cc29ccd74a77afacf0912fb9084a94bb79b74e468408d2c6ad4c8a2c617de805d37277c44c210cb7e3f88644992c8cef00109a3640b2a74ca5e86e1e3116651a9f2ed22e8d241a95df87084415dc8fa13162e65d31b61aeebb6eb12a7792d62844972450f19ef2c67d922cc3ba7af737a8f0e512bc2741a6662325b612a7c858f4418fd634c69a66dc71e1161bc4e767929f8cb08ed10e60bd5d9cba6a64f04b7e81dc6064143f45a6af4a4cb1b22a8818f42182c5f6951192aa6224a88dc3434a29ed2296e8a43ad043c6e2057e1631046f5135a7218cf49545b086ce006013e0461502a9869959055c72f5c788f05142021bfc0165b341715b06103a9f0110873b2ad24feb95d844500c1798714dff172169e638716850f1f7f30f9289d75d783fc521387da7ef8c11cc7fe4dee33a2c71087da08dc79e4471f8ce77e2ff1438e5f0e3ba0dc2ae0830f8628d122ad890b1f7b309d47bafff1ac1e0c39db5b576f3fa8892d163ef2e0e7483dd16329f3f504bd63f160daf43ea5de65657e5ae1e30e085167397729c5ad8c60d25454a9bd0ee2143eea604a07a3f79ed82c9917324e366cd89883e9c3a4bc973ad5234ebed8a145042890b6c881230b1b49f8900371748a8f35ab3f53c5814df13737e1c08d5b4ed9be376c5a5dd4858d99187a3720da4776d9882db30d054db50ba3573ff5c60674d9566dbde70ae61aba6c9752b4bae814ae1a76bfb87c233b8c270da6bfbb7d67bfce514343a2bee3f14c8814c22f5291f3a2b9c08f331857544afaefde7192f002663025d38bd1fddbbfeb2983e9f53c4fcaf6116dc43bbcc70278f04106f38a4a3217b4a8205e31e1630ce652e9b3e74b73e9622406c3c9ff7995f0c1530585c16cda492f720e18cc219f7fb43026348485c717de802f98d3a45b12d2e64db7f782f1cd3736275e085b62171052ff62086d8f767be13bbcc8a246161538415320af2e051f5c30e42b4f4996daf9d4df1c7c6cc1a0d56a7b94bdebfb480b06114f4d08bb390b5ac8616ed9dadaab622f488b20ff72c84ae1030b461d5bdb499eec7412af6058f3caf27ce2d4bc680583faaca24d5f84921bab60b693f03bd7312a98ef2428a16d4176f23d059336ff5cd92477c55a523058dfa9b78d3099de47c11c72ccb6d3895ef001058359ca6231774f442e0938a0c6c7138c958469f5c88d4357f0e104439af861225654f0d10473d00ce13941f6e434ca7182fce283094617f94fb6af11def213b80e371cc2c712cc1e2b690b61db02e14309a69044c9f893f10a55151f7c24c1dc5539f6372498b294b4ac967b418888024f3a721cc1e429c52ad1afb311b23abc878e0e01b91e7c18c1b0bf66e9b4b6894aa122986386ddc7c72a3d7dc74bcee1c14a021a92305cdcf7655355c95da41b091a90b874ca5e95c338d4104081b332d078442a82a58f1d361a8186230c32f12dcbd2f7b33c1a8d306d7f9ece0f9dbb9fc6a16644a0c1088348a22e3d75e8afb82fc230223a7b494c4f12941461f653231bee12c4542811e6ea8f2222a7542dde4184e13da89ccea25edaca8730bedbea9aca22f2d586308739bf5163ba92aa5288ed54e5180d4298530cf1c99428ebc9168d4118562eb69ef75dea938e1caf05175dec40808e1c08604dd01084f97fe4460c179556d25f1cee51022f7a94200206a011084310d7a6cf3c87a5a0a501085330d7fbbc3dbacefb3f1894a8147207d99576763f18ff2ca5ce6df7f95ba6d107e3bfbd4f98df4965691268f0c1f0d7a5f3bd0753f8d3c184c795ecf2ebc1642336eed1dab4a487438db740230f06c92539c71011c243bd800a785182e407f0a204c9135a81061ecca274444ba71942362dd21dcc3976d8d31d7fb2f376308f10e69d26416d45f7041a753058fa8f24750f1dcc6f2e6afb6d3e45b4ccc19462b9e4fe739940430ea610ed3e2dfc648b368a83f9c542c8fe37b32f0d0e66916469c3dd9208617a83d14d6d4eca66eb041a6e3025c996724d34112425b5c17c97e3563eb282bd87c80626e7b64e1d847e0d051123c7ce5e570da6b8173fd48d38dbde10d360caeee7a29208a1c1dce92e8b9acb229ec1bc3161c6d4753398bf4ca5fda0efa3e7530683ce1372ce31b4c73515443298a4de4b88da93839824d3188321697d0921a9490c265133553988250c77b23e99fb49642dd00083290769e3499c75051a5f30e56e958e96949ad3712f9824a4d331c23f9467b50b9cbb8b98985ca9e40a090d2e18c4c8251d4dfd446f8254a0b105b3f558a85b6f51af90160c3b792fd69e3a0be61492b24f9fc28dca5a7651a08105e3a551e15373b5408fde0201366ce8f01e3d7a8bb71fd0b8826177525291fffbebf45630f7870719b7a3bb925f05937e55dc8b4e6922f854b0dc838e97a5fd14ccd9fd21eaf5d2b72849c114576e5225ffca7b52144c29e46c0f1392ce7813148ca63627f566f2644b7a823174baec6891134c4185e491d72c057d76134cb975a7cfd4d47f88996010223afebb88d331ee12cc5f7deb49b3a20453c7af9c578224097dd061a6ac4a890483d8c91b3124e8b4a03c82d146be46e89817ec934630fb4e32719d54048390587542a9b67b0e11ccaf97a7a3840aa51f82495f562b2569cb8488423025d5a267ea07c15c29c9ec9b1a08a63cb9e3454b4a4fb7fb8141697d7c93a126669d0f8cf62aaaad720f0c172baf98ca7255d7786032a1f9f162a990fc543b30efa5daca9d5babd2a203433691f04977d4eaef7260faac1d714f6fd775690b68e0c01462f29561a14b8c7f0353c7959830c1533d4575010d1b1827e86bc9c165b42ea9062691e3738cca9b9011d3c09c52d372483a7c9093cec028a7e276b608399e90d0908149dd87f3b577c949e53da0110343f449ba6e2107e195631a3030956b884a4a2ba5b0660f1a2f30e88a8550232e28112637767471e304bd8301345c601e6d5b224e54eaaf120ed4c3df8c5839c08c5698730a5e73e954e4d2392b4c3129538448f0307fd262c62a0cc922959f9d7c56f8bae87103078f1278911898a10af388b58aebdfa7aa27db8e0ecc4885f1b25c72edcc0c5418fc2c567b9ae914064b1ee6b4c75ac8222e6698c26c596cd4b4d95e0a4308a72b2d377c846ee8c811023f6735b4484005b868dfd1838742600337483083146663c62850db79940cf78ea1a328ea30ded5fe21c9271199118a9c018a6aee7ed39cf109b3a950f23f69f72c08333cb167fbf4b192ea74b1c328cce8c40c4e98d3e585052d972f219db109739e66292b1dd78421074f2622ab3dd984333261bc14bc52d49b8bded112d0d1458e14e4e022470f2f2290766306264c123bc6e914ae27cba765987109d3d85ecc7a5a67c878675ff8f1608625cc2ffac4fe544a1a6654c2a4c7839af0cb79c20751c2a4ee35ffcf2e6911ed9961c624cc497685c76f8db0fd6f6186248cfa9d7208ad22845d50cd888429bbdb8f5ee913f9d70287199030681366ebd1bb4798437ea5fab10c6086230ceadd92b05c923c4539a31126abdaae95772d99274698e48b4839574b499f2c6a94046a6451a32250238b1a05811a59d4a807d4c8a24639a04616356a0d3316614a3951fb238c48e64138d41461c8a9aedb5bb2e5ad236624c2d46579c4af65e77769c7891988404c0ac29b710843bcec13ee6dd9b96308739f48fa3cb7606246214c9ffcc4e5edbc6b6d94984108737b8a306676394e904b8002939831089355752c91cae57e6d4118e737840e11dd21eb06c22cb77ec9e60584a9e3e5c892b2272556fd8341fb49b9a423cdc22f7e3004c915fdecba5348227d309fa8f1b872963ee97c2874998a593ab9076dd74a4fbe93512910b83accd083412439ea274bdab9370fc6ef4b9aa223860783e594950f56ea8c3b184c8f09112f3746d045170af8a2470ed4c5167e013b98439c0ed7f73eda2b6287197530fc9c48e1dd92ba41cca083494df474a5252819676141cc9883295c332ec58d4932f4251033e460969f181fb225bbec901b27dde0d16547991107e39f144f5622b9c5169d050270f4c8810139cc8083e98307a12aa5bbc8a5df60502a29292337a47e8fa40833dc60c8a1dec6236f08214466b4c1a02bab794a4a5d499c3885196c30a5dbd2f9cd2eca85bb06b3597aa474aaf56d5229cc5083495aae9dda3b6172ef341892ece8c599e5c448a2c1e87f91dad44e253dda8c3398929e0a41e8331de1c00c33982c7f876c8de9182a550653aa107cc24c0a2a9d14871aeb98410653cea6c4732d33c660b6f65a33af60de956e31430ce694e485af533944ddc77bece882475e0d2d12405a30230c260fc9ac3a0495a3b60706e3a4fc74671b79667433be604a496f569be105d3e4b83d595444c9f9ef82e9524e3a56ab1f6d3e5098c105837b65bdd788284a9f5b309c1239c7e649be3a9d166664c1902ecc7f5ec8f5974d988105738a47d11f36df199611f0e807d8b031021ecd052f61c6158c67724be9d3ec17a5b782b1f3a2c6c9b9a81afa2a987290ef1d4d7b2a1864bee6e753d949159a8229798ef1c9f4c78858a5609e20424e697e89822994983591ac837a8440c16c722aa2bc3bbe444f304b8aa13f5a7dc98ee904a379129eae3e96420e9b60cebb16f14b528b3e1d130ca34cbb87eb2472922de128304309660f5274fd74242d7a49826146c7f08e914482c17c52ae798e388430e308661f9d9d33547453cb19c190c292951ef917c1a8a973127bab3a8812118caff2ba9f3b4330fe8576dccd34fbd8118249a49fb56c2525a376100ca646e28b4e1b08e6b475d7cbbad06de11f182e7fd42e11533ae7d60726c9324947bcbea473a507e636a12dd607cfcf1ee181b16c8264c9ade629077760ce33ed60b2caafd781a6fb6437452e1b368a096cd8b01b564c703cbc302307a624aee31e724ef9b24ae0050ecc6aeab48c1851a3f20d4cda53c8f57d22bd6e6e03634fb6f0092aae81e1ac93e87913f9c10c1a987ff497756929a5443f039389ecbca09db166be0c4c566de5f1241e0353d8a710f48c9dc81d06a660a1a6f37e3c5961f402534b0e9e43bd544567860b4c2959f794148ba2d4a715e670f94d820a8f172cca0a831af3bd907672e98cab3025a1a1c3e72861cf355598dd74decefc94694152a197cafe753f316e54183e07afaff414273d8730ba0895b591d35acad010a68a66213eb95f08534a512d95768aafb4096112b2267d4821de01168330a891fd173e47e599920fb01084f16767524ea14ec47c02611c8ba371fea132cd826b032c0061f008f223bc5c89182b167f30a67fe98caf10f6e7112cfc60ca1571d9d53c27cf9e3e982d986e4515990f79c5dcce032cf66012b5ed793f276cb585851e8cae7b395bf2f3602ead152a5808cd49723c9823841525b2ac94652b0758dcc1ac1d2de8041bd3fe931d0c3b227d9467b99160d7c1a422ebd245e8d0c1f0b15a74f73772d93d07730e4a9f72f17055d7c9c1209250f25db3dcb4567130a73f5d9ed3727af01a0e86b72c29fec9c7f818bfc16451e5a299ff7f8e123798cab2ca3d459b4ed5da601242abfb535cb444cc0643cead0fa372b664466b30c5501dad547ec892536a30e4c8312b9a472aa54b8371b32ce413f2794fa768307fb56ca8a4268a5cfe0c46fbf7df4b1f9bc1a03bbd79548b2062c432183cfd468e2792272d8f0ce6770b612a29e9919434998bf4bea5d42506537b88df78d705fb2a0ce6d7bef7a4a2aaefc36030a88a0e3d93922f98e3fd82e71f75895b7bc1a444570a2134cbc4e72e985dcde4c24f485adae482a95f434417b5b1d882f92de57aac4ef657c3420be69f0b9539592e26cd5864c11817417fead39f76d45860c164d7a237679fa5c682c5154cb9295b5726e2d39d5858c138b1b46bf6bdbac9874515cc9595e2febaaac4aa60410573f03ebd6c1d9f4472584cc1a85eb2c2cb7748154f5848c15cd1e34bb21d89f2611105c3f958bfb667fea88b05144ca73b257dd7a39722098b2718ad725c6bcf2d5e1dc7c20906a574c8717d3672870b164d485d55aa4c305d99beb6a41eba935f8231be52bb4af4541f562598e4d554dc9266120ca2ecaf4ccc0409a6b6b80df73862fae4473056a834298fedef85d408a6fe703a4c12a55210b708c64ae2e39ece93114c02164430a79061232badcdc7c8100c1fb952daff10bbfb138221470b313dece5917e10cc1d3a2be5a0d4a47015104c16fb913f665d1e15fc81219a04a54cf5eb03e3a87ed5f88f8bf9aa07a6d8222b847e4bd77de18141b448b4381def7e523b3085124af4b9593a30bf781e51ad1e59ec9203634dd09268c9535b7638309cbc9c32e24e4e4a826e60b8ec4827aa2a1b98ef63b29a09df0db506e6706791437a9006860ba274f4bf494bbacec020353f8524b4e30993c9c01c6cc28575516360ec24944e21a7199d9783814985ec94a2443ba5727e8149f372a5521d2c5c6090629156ab47c897aa15c648e165e3629b6a7fac308409229dd5a79f49afc2e0e6417e9bf0202da80a9375886822fcaac5445361feac0e17e6faddad830ab3cae9e4e1713bc4750a8387f0ed3ba23ff523a630a56c8c654b103ae574298ceb215a369192d69049617e55b3bd54965118279852a3153526465c14c65e4bed5e173fe542611e1b532289cf75f52f280c96aaf2f1ffd35f073f61f4a47de425c67ae9d113a69393d5d1f1634ade3a615eb1ca8a16448de8c909437af132b16ad984c1945a123a7bac0953467e2d4bda4c1865d4c67dd8c5fd14c584a9f5b4a414e34c55c34b98fc55b66267dd1286fca9b78448f982b2b212066d15cd632799ee28258c295faaab65a65e934998e424a5a6f4d8888c93244c32b2e4ca919c7ba49150d2689177970b12e6247164bea89091527c84395e921bcd9e31713ac2a0ee933b96d88f192a8d307e7ef6ff20bf5fc2cc08b3ffce859092f74f8e2dc2a4729478caa4c6fe0929c2f8167223b95f29ad27c29cdef7f3be2d88309c97b8cbe79ff0963c84b924a890bf8488214c16f4d7d2633bc87985b864856aa57d8d10e6a06c2cd8e83c0883c81fd673e54589941384f9654bfce532997b6120cca2ee64a4ebc997bd020873f409f227cf4b9414ff60ce395aa24790ffb12e3f988246ce59e446eb787d305712f94992103167e283713f840a3fbf1cdb720f263d2a7a7a39f5609e9cb5c24b4e69246b7930a74a19a9375a4ba7f0602a3d324705fb0e66919426a684538b90ba6149b8c20e064ff33c8976aa9de48757d4216fadcc180b5791b72031e2e9a415a6345c4107536b69be869ac4d2990b57ccc1a03ce9c6c53e3d1f593998d524e91421dd489e3f0ec6387b3fe1ad1793363898928831611e532ec5fa0693ee96ec5851bd2e88ef0a3798ce423e937095bb2bda608edf3e21fb74a5cf7759b8820d86a0a37fd3654bf9488870c51acc919410cfdab7fc271dae5083313c3b849c538e79bad3605ecb39fff3ac58e7091a4cdbc9824ee92fdce9601cae3883c9bb45478e52a3c0938eb3335c6106e39587f8d7f59e4e71f104dc0dae2883717ffd3e92b8a4333e19cc574a8753dfb193aad3184c5fa16bb74243851289e19e1199d3b59f309873c4cf27b98388a574c060bcb95041da5ecacbf517cc7dc22ad6342f98725d868ef3394b56dc05a3c5af2525aad4dfb65c30861227644794f290b76052cab2ccadc644b7aa055388da932f2e59305e1a75374957b0600c753174c34c6c85af602a319ee6c92bd46c690593bc9f875c0f17f72a18f48c2425a236e29c900a26d511cf45b897a8f4144c2fc99229ad9723c39382c9c2abff68cdac5c8a82e94b2746fcbc581a81823977c5092b0d95b3674f30283deab2a550b74eaa9dc1154e30a70c113454756f89dd04e3de96d223d764925c99604ef5d9e2b9fa9bfe540dae5882b183ceb594c2cb0757bfb84209a6b9f03be99764860a5f910443481f7f61ac37f2ec3c6e78ea4287f115483088525a394d57f2c9e708a6e0d13f3c558e118cda692e849df0fb945204731c35c2258860f3272382b1255ef5a970a777ab1d82e1728891a74250094ec7154230aa59a40a2a5fea0e3a4130d8ed9c8fd0394030a597481344dda378fb0393aedb3e30c991dd3ea5a3cddb035312219dca394bbabcc203732c49e245b5c8b32cd981e96f720efa3d44b15ceac0745abc4e56169145e88a1c18f42ca795cd884e3ae1c094a294fa132998ce9374035312d5309d14bcda3d3630e994fb9c4a486b604837ca73cce8ce17131a983e8e879ceba3b66539034314b55ab3fa64608cd733d5d2978b25c3a17a450c4c3d22e63030d6c491e9964a6c86fa028350513ff8f8978be40a17982e57cd639412513dd20a73ba77e96826bc432959619eb12cb7a2c2df4dfb008d55183d4a50ebb29e127d5685412425ea73e90f56c1d32215a699099a7e37d34085218b4af3f9917476ff294ce6f75ae17259861a99c2682afbe64c3e55de4e298cf2efe92227b344704961c81d6e44c2afa33087eca89654165e4ebc210ab37dd2164a4eee3eeb7028026884c2381e6e2adb7ec869d4a0307fca0f7257d4bcee2a1b008d4fa04fa993305a797de9c8d13d7c07f184697ef227d91d2b849277c294c6fa4f6f44909137270c41e46ddf9a4e631366d51bf9616b4ef77f0cd0d084b9e5c4dc4fe8d0c88479434bbc3e5507252e0d4ce0258c9282d895e861a31ae3502b858625b87e1f2d71f129fdb7021a9530875862ab663da56cc2da1d342841684cc2e4a7420d8bcda864afa60269200e8783e150301086c201e61373130000000c1894c54281604c24ace31e14000358362c46382a1a201e1216140983e35038100805c36130180c080642a13020200c8f8361381f7cf932fef52b4c2644e352c12e1631cd4aa40e9a692cfcbd9f534ebfc3a78b3afb9dba9c1b905c46da4512b39f3b17a5c55bea8821e7f73bd2d2a5884cf3741f5f125c487e4a45f6aa8c1b2fae4230aa9d6d11a9ef1050d82319f5d01c220996de28e1b9a669bf8d1b8cacbcc457821ab0621a1f49c51d1e0e0d354cacbd46435046f3434ff95f4c71bb6bca36295a92a2405482949724e2a267a7b69c08f80915284275483c0e2c2150f04f918d0a2a1dd44aa81052c03207ca6ba87ea80ba85144514a51014545a1ee31411f0124854204c507c546cd52de3407284f28581aea1e40a18930d44fa89550520e05ccfc90faf69eac9e103cf1796af5f4fb747b02f9c4e20985135514b2a7cf276d9f7c9faed01df7fa680a0ce50795dda1800688141061a1b28133c4341d5364eb0d55010514839a026d0fa443412d14a2a338a458428d77d4bdb78f027c857a071506ea2ba87b2b7f03de10d471280ca8a117545ffda72ab61a95bca474548e91dc1ad402a8770aa56399db76a8424941e11728a0eda2a94bc0274c288e46f1700a5a0a08d49451924ae940dd8e28a0bb906a6e86fb132843b905c59f8a0c14202828282051c032dd8f02c674c2ad521410c76c4aab15a5236da3db870dd43d144c382a8ef729be6541a521ca98d405148345f12fb59ea90b3f79838277d4b8d43c1400281250888a0217527d311358d3a1cc7e545f9156d5c477283151400d60af0aea8942d5cb6c4256a19ea0fe42cda0004291481422a630a4c052281d7062a5e72eb55dd42c4a01758a1378f81e6f3f4b116d42c0381e9d690d87579c41d3bacb152018d7b3916e7f2e0f388edc6b7c15d2e360d0f53cbb37705aaaa03ed46657e66d85e59d721a127ea6bb3ec49b94f3b23582d3500dd560344d2ce2abeb5cbe9c9a7a7a212efc3fb29a92d0d73dba09b6879a26b588eb17ab35452fbe3eb362ad3122c11c41a512f033f6ae0dea4b4b990e3f5e3b6df032a3d41cda5b4ce9a98f6cd86ac48fd54b7a228b884ca9e3c235271b040d702681f2938628ad3a53aabd82386d0e4a6d982b93543854aaf94c9e75135469d6f01512c56748bacc3dcb9db40586ac23c036cf14c84280bc8c0a49e810ad46dd6e569c369e81743f475ebc42ec8f135158e8d051cf421ea3e9058d82eaf55258d345c8ef57fd088546ba58558c9431030ff206f9d0aeac2ce88d2065ac2e23ea293be514994a04d38c5867a8af441907778ced4a092566425d9ca980ead442cea91cce2c84ace386fce2a07ae625404ce99ecb515f4269513d923c45f8caa93c44fca685f158083e5b4f222fc9bc226df89e5a38db2d3fe29852ba0654790e600ec47a419c703beeab93b86cd5d4f517aae064c54a82e9c8744bb871f303d50ab1591449037022137f38c6b1c83609a170c4cdca03dc38f31205e27f7fba92e1b81860aec1c11f2e70d634f222b2109211ca52513571911db2008900c8369039630be5ef80c460655f408728c0d2ed00758287f3259f243f7cf98a3fb6aa6ef555cbf149e7b1cc80c0308049e085928f3b406431d38e63043c51e1abeefe67a5405b827594479d7618e4c8bc38358400f8f75dbd9058dd0bb2163c5c035f48ac67f367c36e432f373359fb32079d6c66bb53141e1bf44f166bc103933e34731aa338f23557e3a89f780a2cfa4f1f872812f3c61ba7c62b28b26ff86c04b70aa805ad4f8a830c742f1936e438484b311e486e8766c0f2c23f90806da710ec476295cc23130a66ed32fe69caf67581102d9f5d2c4555f0f19b2f2dd7fb44d21627d92caddbf13be6ac85360843f4542701836c89c9a4fa719d5b9ad3e0170a9626b04d2613fee01e7b6676fb8ae9362ab45376fffe90dad36f7c5aecf270e1363430ad23163c4bba2af5b46cf17d5f03d3b2c6198e658d31e0313444cc54a4a3fbf4400cbcea55e6ac4cdf1a31cae2634ee740b9c978dacbfabd6d9e027e5141d45761d9cc08ffd390b2d576826e2187e4c695e1cacc074dfe3bea58722cc88c621908bbc6a0a95b94598a9a92f78ec0cab2cd2090a860d733f665b2d49f185a913393c1edc979c67fa4bef2e6e266dbf4f2dcd94dce9c4e94268c76b37579fde0d7cea985ba34d294568d21fa4c74930b6d2128f0674980a5cd21f5931642e834189122e166d8bdada4709742b464020e74a526d3b6fe99342f16fccabda2393f83d449410e4d85278a672c942fb711be489106935ea5ceed27b6a717bff88311a16501fd1cb029614d0a0400775d465261fdc8ab07f04ac85b37aadc42d610caebaa9994d7fbcd23b69c984b0e93889b4ce45fdea34ec9c638e49bf3423e68a9c307265ae6a1d701f9344604d5f49ad162b24d99ea3ba2e9cd543f1a13c4464905064773d24327ad9438d4c52214d6719f14c98d8c44751a60889610c9806ce199aa39d1c7496ab8001d1931f39e7a228f79695eb8d59f645ec2f544e5b17933ac843a8587b397180bbedeccb05e0d537c6d3343b1008ec7d2f99270c67be813033bcc72d07ad63a71064771995929c6a9ca269596d0e62a54c575301963f59a80e881e97c56fff29889b8484d77a13ee7cd2c3646cf9fddcc7e5574878c0b41bb3e88096ca2a8d5e937b9b0788c3149998f8ca8598f555a1b5625e5b8893d5df1be3efa672a63424e6448a2b26caac91589ea15879e18a5d71641665d2a821994f45c7fd66d9868a456447bba556fb596227a286b24c2ac44a86d75924cdb2689b61d5dbb39fc01115f9e7adb79aa7b97e63b7a40653c138f638f742f04781318d1b3280250d103daa3babf830e60ef4233df414c22f3c3ff7bacb5fbaf50f182785fde9bb03fd09c1a17420b5c223e76ef70b3f210ea03e123c00ff081010978fc096fa121e44156c1f4f20e93e70942891510235809f87185c6cb766f0d0fca4bc564bc97fe904860d1070af2262003fe46c34ac9d35fe39d0174c6ee6bf1eeb44a2d801f137611ecadb942fcb46655ddd8eef688b637c97943fdc551d12b6618011ecc76e44dfac0c5a1a99b09235d619f85efcb4781c215c2caaff03a0d2c3fe5f822d1f07db71cf67c6c4dfd0851fc665bd21c8fb04b8ed15cba41b81d8af289e8f9ad7b1b7592f8e3c4a18cda644581fffd6054e8e70ab69f8538765063c8bfdebf9499784abe08e0822b4b265b21ee6b732b344ff3263ac09dffa0b6a5404e436fc511e6098778c1dee79f79d88485e6ac68cd90255d55af85de73e45de10cc9a095097b9a68f6fcb3e379eb7357a717398f8ecc09470c09e5947e8295c53040ca13b526f9a51af86f8b28185c1c4b0130b1529452a65f9b9e17ca15efd33404004aa13a65195d694257843781208721da2ce68f38bbe6c130dfc12f4c1b8c1013cf990b4eab318c443dc8069561a161e2c1918ba00adfe66f75439563b2af5fb9c2dda33562753da62f42818a0a06558884d7471b42a6ca6f3177daf4689ca850bb68bb1394c16d2e1d9375842d20f84915c42d9b5d44aee038287f10672ab90170755eb9ca21cea98ade775cc789db9e99294df3ddd3f35a99b5625141477ebf7920bd3265b7e7fd0c92f03332659f51a5161aa2ced07163a5d17b11ad56ddc2e92c25224c14dbfbae4edc3d13ee14ef6ccbd5768afda9d9f68b74aac4ff64b5d1763cc2520e9622cf13301a56fa9e62b0b44f3463f964158d5033b6d11a5455d8600b71cc2223d5e817bd33021695b7306d416ebd94bb6d8c04afc63a546505a6bb4af5a658304f54f8cbe0c1afb288ef5daba958633351700f0b3f57f52aa23268381abc596299eb87789608a9fb47844a9cd7730904604b2ea32965c617ecc2df5e0cd274028c38662485107acfb283f5641a1b0a84693c46697652169bd5022d7a912121a5ab5e8c0b682d8c0eb1ffdcb31689913dc5962264f3708abe8d42503c095626f052d6d0fbc48831e3d29a51895e1dbb4d477f8c51c6d1687ce6e83d00f807d0ac31159346f91889459c4c4352f8a840ec6dc2026ada80f8a30182b2688863ab81e02ac8d16bb5e4ec6499d16b6d9866cb02f00e76ff0d88d56d75ccdbdb9e1cb726a17f53a3ad19d89ec3c592bfa366c052d30bf1b8b5631a9bd75b608ddc026f26cd10b1792f89677e0ccdb18b8a18940d51c91fdb96e013eff6dd6e9c6a882e28287fa63f81646c941b3ea84405180f44ab7639866ea0bbc020fb09f80d55cb01992882be52b4aacff44a93bb32a8aa8c321bea96642d084e7346e19f83ea85465941a5fdada0c272cf852c61177af5a8bfd6f3a0c04dcdf516465e761a17ef93d4b92a09444042130e5b3cd7a1fe9140242b0abe9b1b1190626e1a5b99ded87759b3be84cd79593098498e533f8e9308ef4bcdf383b589089bb850ba1e721008b62b5794c9bb55ca74f51b4710c5967b38da8b1180dfe4ea451e59511cfd09dfeaadfdc9b49e411ec9f404ad17b1c350bb1db87eb4d516994a2074ddb7031d2b06f1104fa8e468fd45ed1798fc2a1f18b94799c0a527ef7a83eab07a1defb959ee7df6a5fb07391704e5a3f42776b7e7729c1dfa400ad08de9461be601cc8aa74a9837e9851c26b462e24926181a62d227a6cb26b0c92955fac29e2268976f2430d03e7a15d7dc41872b2e23a7f70acf51b49236679a4db62b4d60985b790d3f12d2d25f35d2250adad98fe6074757ce42f38ef2d2882ffde7590594803f38f19728cb4b403b380165b28a6fbd32afb5316e03aad2a57efbff9da1b7cbecafa1255015824da5722aa4f65602d3d3c50a693d580e1c2617747488e3b2491504103f3f53854d121973d05cc3c93e25ebbeab8db86c38d8c6ebb403b207721111786a82ebd784cd611ba6e60b13ebbe0b838e792d0879376659185b89de57ab630ce2b9c1f216fb6d3a1bb4199cf70793538d0a7c31b8e260240285011506a93ad82819811499863f513328669b03b571838da2efa5c083838de4f30b7852bf5aa65c4bfc5b65fb46b718bfe85e3f00790d40b8dbe81930024400bc60018157c81de929c0150032803f00ad00ba0180c99da9b7b51d24a5f188a7cd55676fc6a1fb211847bcb45dbf20834c3e75d4661e50ecc31e1dc2fa32858ca859130841008c02d916f30a802168ebb9f446c296dc6688ac0ee20ee4e203dc27624362c223f023602078415c41a8b608d0720b3b614f9d334d88e3473a1312905c912f78d2676374c1924643a8e0643708048cf44fea7b5478180181c3ee5e4d07801504199426966328ae9e0c4c9cb0361ab08ee7fa636da7f895924860a61f797441c9d75056ced52db1815d06f7cb8bb2cfa497d573403866ed2062779c5569e338e432ef97a8615eca6bb01243eb0ab066ce7065bd69b045eab645220384e41bcefa668722756c222dd09642a936341657e45e696e874aae926854c39c6a1b9a681c571e6c0d8f2a079b711950f1107be37a29f4791c2de4c100041a57dc170e0a542072a0511fcdbc3a19cf1ce5a9965495f603ad946e7bac0282743adf6adc871301befd99324902209531dea933e072caeb32f8e164c71fdf44a69979f73c1e752873a3876725edb681a64080389def191b2340985b16dab654c145f629bee846283f3b5b3e65ae9bc67ae24a1a5b235165e4eb4756fe24efc4d2712e5e16ceb5e850d197d16b64b9dcca035c8ecafb9bf2b4a35f40315662ec5271142f55576896451eafd451c52cea40a156defa8600f567b1f6273f2a74c8585d8368857c2667e6a6f7eea92f75577a195ebcda4fcb7f3260e609132d26251d0b695df4e3e053ce64f94fb674fd8161a57cefb9ce20440bf05835581a95f7325c47359b3dccd32a79f70a1804c1f74ade78d898a8cd055e3326b0963c9969d59e6c08f689566b80d309c9e703b33d2f0096dc745be1047142904810a10ce085cab64a9f6b60204d2a0d5823fa2a8883a5f7a08b930f68abab51e412c4efa2651166c4fc8a643f65a21fb08ccb0b3567971922f48b55c18e690681b8100481f504687a65c53c32e476f7c10ec09888d2ed4e8dd3d5dff45700f7f8d8f86bbca857905ca82e5907fb4b40f300e479315d849b384b35eb163c3cdd6ca5fbd57890c78c51c731740f0c9398d11771b7990fe50018068e0efc17d15556f83142e4f518f09f18c230fc2acac32ec01a7936d4e3115a160392e8b68d19fa3e391a2d27250ba7684bf02e62aaafc73c3f73d1386870f4e864cdcbe36ed476b6a9d5c458244186b66e3af6d66921bd809782d00018cde022ed650b13eddc8439aecc4b94907c540b3830496cc581d862f9533230b2f94bf878b7bbd427902f9d8723c47aa2400a39fd156d10bc9e1e4205b0a61bf873da8ca96b0799436154cc28310c5bcaa40ddd9531e9788c20a0095e144dd4f8bcf8bbc8811756ce1958265488ba1061d287f34562555e8293a9507488b1c6a45555348f49f60aa712555cbb385012ef339fd6a1c4314c5d05e377dca8c178017ff828b302bb2289ade20730422a7af11b1dff353c2e29581b6262d74ae6090713685ee325c37c78b04f6f952127d2e16c8444d0112d5f7b7ae5826d262bab6802da6f56141feb1a74a2adb5e83996a7982f063d5bf90bef85b82838fd082b236e3358760ede59abcbb5941a3986f612d126e2f409e3c3feccbb34c8c424810a3130338094366b2cb9d5f60605ff454abd26419a7c4ce6d3478a9eb7b0172543f050e4819a0da86936d7b3d8574af05528ffd793324c9d6dcf491039cc2a75062defc4cb2de00544085d30ab1fc54153d71634ee323d55e4129fa18313c465bc98dac976c8d742b4d158c87eddb411c53df8b2060f1f2af7456308e2d531f3af77d857c143b693f2ae5accc3d740ad4da299c692ff672c1c2846ec840c4bf0012340386fb9905b959eb464a88e1cf3ccc60f5810c6832f9c71894e176f7aa1a4f26c059f40cf786569c1be65be5b1ca0408fc8e7f33f0d18f72002fb565924bbf8c0e305daccdb64f455ae39eba50b81d8048296fe5698f70bfe01206c7a85071d95fe05969c634317714495d90e98cee1aa1470e1c48c3888ed7f5fff3b23c6c3a683a5915e881f637c1840a7ca4f0b9ccba19271fa2a26807278ade4c13b47d1949d2754e9e6dab42f75a7ea0644488e90e59287f509f5e68d7cf581832e16face54aad97f9bf5442015140d35a03c5b6d399e313cb22355af5f25590b8fb48bc095ab70ebe1c0eb748eb08aba80c31462b89ced23eaec0b866121fc2cac5a58242cd6a72b388214a28a61291c42407101c308112ec36de0a245ed0719ef6545a9d03d92a8ea48c6cb194ee722ad8517089e4d95a57633e98d4ef1576964200e1b57ae32a86018cd7c3512b3428f52ec138d5329375ea8c668912ab494e1a30c4335c1e2ae10852d164132810b9d1f5702f616fbc2b7923c43405731e8607f48d8cc613323848d8413b5700bc680202d5388bca85b0459bc8eadd80ac2f172aa82741a58c19274acf6960220d65b83a0b6f0acdaff4255bf2f2fc6f34426f90e92691791862e8aaef07245432b9b14813d50809544ce6dfb7165ee501fecf2d5995da6e61dcfe50a8b979911f695ac5c1a70569c7df6c73285fdca915cd1231741842c246b7126ec9702f2060ba71cf0c2d08412772dc76ccdbd34aa1770507c51b71ce93d9fcaa51fbc6f6b0bc32ca90ec1ba28512b09125020866a60c31cd6296cc2658058f42c69c3e730eb3b3b37b2070bda97b3659fb3b597b3de62af66a07e246d935e3f0c108db16529d2c9b409c962b8d650c3c6f0612320f664bb490271159b24162d31d46fdc00d9de70dbc1bcd879bac74379f450f759f0043f2326398d124004e5128ed08d69ba62307e6c6cb9513d72e59937fba46b90e36fe7beb5c8980331ae3f92f9cf19c84aeada588c05c22ff3c62685432ba4579153eed743c8ff4622cfb2082c23687eff1c45b8fcf4a0d1de4f8ea8b17a7327e2d564485393dfd1c0f506d229c45f0f95a17d05cd869fa5318a4cb5b558e136de23ca4c73c109749d9bd13c3cc5b16af993fae8f918d17030334ba390466a964da2273f5b6a1cc9f1d1c8f3e317a0019cbd1cfce42f80ee53b3e1afe4e12f1ed501e0d4ecc03fa9dbe322fd08578df48c73a3bc30b9939d0ac3d2d607476270daa668080a5f2772225efd8e5dcba048bd721ee296c0119d50a56978032ab9e3e1f6690b28b0cd29dcf5fc559e99eef43805d9a3e7ca21ddffc3de06895e775b8c60f2cc105ab253fae14e35c40f6fdf7d1bdaf4bacc32df9d0a22c042b0e67b11b4f5460493a31d39704d34bc457eed2cf6ee7d0e48acad1789f34747f83c7f8b4c7eaf3c1568dd420b28e6bd017a6549b336a39538e43fc56355317789c6eac0e68cce66c61c1682dfd9a05bd83001a7cb1b9c22d2a79a8ad3d98eb27b857f9943cf8b9807a628d8ea30e1eb9d0161c0121c9b3bae289d4a84f60fba79a9569104df21e090b8375991f3fa691c0596cb77a0f23fa536e0e0120e504aff489937e026bd8114d0d377a6109f3dca3346ff80a277b3cbd8e4f4973cb5c759b415df427438b600a5e45e0382154759b836bbb5c3956d43587ac5de18643bd6f4239ccf49c08fe78a56348909def6584c8773cc25f771f5c12b1e160a0e345d2084aa227319393fc42900216beb4a90e13f02cfdadfea450af1d83d9b8011227d8d47baa97116f8704ee91399fa8dcf7c23ae0478d25d1306c5633a01f9160d539fc3f1e9f66e757de978c418b82014d638b35c29b190a5306d78e38e43ea2b1acceabaf2c32a14db366d7e9d50188c680c973fc127141d66b4e696432532e5b2a2a9bc5e44825b832a2e85885abb1f6e2cbc5b74e5cb2e43a0b22d46dd2787de1157ef46f65b4ec551f21eb38709a30938167844d24d89592e9a8df5cf0b8d8afdc10bbd806784e24bdb781db3024776a1fa21328f0acd701b513357a766638581a55619c402070cca3f3ac0b4d2587e97ec548b16d5bf34aa8b37edf0508e0265c9c2592830a72a2d3be9bd155c9f530aa1f073326df5495a415fb8e37e54baa5a5a311f7a6e854ac0551a6ffc96b5db154269fd4930a81cfada77dc4992a7f15254a2aaa22221892a4503cbf3c61e5a7c71158068c965d5601e3b431233d0157695fa1b0eb00f515e4823a89742449c633a6bfcf3cccfd213156fcfed6ef25fa861499e63c51b8d85e6ba72d63f992506e054872c75e77182d09c673e773ec7a7ec85264db99489dbc72a32751bdce18efa169b416c111cc412a0cc1a42a885b7fa233c856b8d3834be3d8443f2d33fa3b98f0cc411372b02564cedd8de155dd8daba938ca75ea5993f0e105f7cd6e72f9913a1570e867507b1609bfd891cbca822054fd75e1e81f1d736148eb5945af592723d3698722f5094d31131f6399864f82b54a47428f6a8455454ba582a8b4b8928158707cd95e27a9c55cbb90fdea9e91ea3e6b71bf74454ad442971d18bc85caec8079b2ed1e8daf3298c954911dd040ce4e8fffe3ab82680e4d035c154d38331e658c32c24cd8dd138c79c725b2ee7a1ae27c59f85a61e818779102335183f4037b1d8052a1611409b7cbcef491b1928370fbebe8298a8f101bacb575334969b745f0068e06fdc618f5e5e750790471585520b9cd4262c9469a48e911b6428ad394cda2c3ecfe6d82d17113a86c27f0e3c5e4c7c4679f820302be446134e09ef93897c6162cc83223906e2a3aa95ec9a8bb43c45425f847054999ca1aa2b1144402c3422a851c32a4b7e51e5e22d22a24ada47a4a123982a6af0edb02bcfafff7cda1cc9dd9a7e014d4ade900bf67a41d9db262e00619abc794519649ae1852298f7ea51b649f0ed441d1ca38fd44d892e38bbaac15725a9a6e98d0c4b37f1123968d6229b17cee0de12143c8c12aa63819d047b6c665daab53930544e40fbb2af6b715288da3520a5b944e0cdc69462ca312ca29f2ca9db714bf868223d78b7d78fec34d5bce79805886d3ec00b7c674732994574366fa0addaba541cc2db83d64796783422362b1f1cf471e60cf617fecc85aee84fb4e96b217d3b481c98c0303b34dac63e20101946603bef6b8b76d87e69d5f35a5cdaf6d184880f47956f303b83bbe452096bcc462760603372f452e865b5080d5224091855bdcbfb3766fe460b9f2581bbcd5ab596cd1e0c4466b6891967fd0fb49c9146a935964c63474d48148b320f27d880b8d3f1ea2ef396ee3daa56a54e23c45be013ad8359d8b0b41291bc649ae51d911bfa6f8efb5a60bb7e32aa5acde878bfa684c993e7eade7241fd6050a23ec6112ff645c4f86368dc0e190d025bffdce7990e78fab27897927a44f41710e7d5c093b551aebc6fe6d758a35d6c0b104a4bec978ff054a147828a87925fbedb96a443b9d2218880cbef15e105d5ac50bee69e8fde00426788289d352314121a779051a128d6183de757a4e4d5a262f5a63bbf820fb1afe643056635ddb20c683d3aa951f3a0e1dd256aeff495cf55a692715e334bf0b094cb810611b7c497723dc7a60e851e2a0ae4b22b6a211282621f8785f2490d5d30315db591a6cda79a2b4388e795ecec2df12499c63dc48f846b31c4b8076274a401452b08da9da4b271338641f3c2f15dc741da5ff5fcf3585959536aa377d2fcea6d04508d171c4d6aba75c7e2f6bbc032681eaf869e61f5c9c0d0b9ec9f53de26cf1f882b8e259dfb1ef0c1603e6f102b99a009416c79eca9359014e236caee2862dc06810377eb455a8bb1580dedbb76baff0df8f3c58a6489e20ab468ecc51d689bb633404f520e94cb50e84b012d9d3de3a7ce56fd3ec5cc1d0d14b9da4a119f13bb0af486e1b5fb4f0dcdc07a37e3f399b09ec0ae323d430d25c2b0761e6ea0a8d9b12011e7e802caea49a3a09cde57038761a89968c31202e2ba7c564e3abef885b0fa14b04ea3b5db6f51b93a162f435e79e1c11e68218fc3d940ba5bc0bbd0006363433d3aac88fe0157e136ec0bfdd14fd3a29ffbfaf004e3e23b04df7d4364a5c090030864e4ac6b5f42e61ad6b1a39454f33b086fe4cb27a433a0f4ced43ec1f60d142667a07986c5c2201f6542bc53533bddab8df42a044c87761c6b0b0f234b959c2e154ae9b4260cbfc1b2d11b2ba6264890732c97233931642208a753d8c882d37f35703d5d352a020dd662671900dc4e214934ef4bf12b0563256bca535cd905634a5d76dc786b02fa83c38ee6474f483c7794b541ad4559498ced9fc6e956dc71818e42a45291c50233e489886ddc60d533b63f43fb2684a795cf3016b83fa86e15194d95f405e79cbfea52df80bbe49c07ab83a86b14b7df3f4cd0a1b1449510d0add5892356113be2e6432f885911f02f00a7c89514587379dbaf5a9518f6384c14cc79476540c85c54023beedc864f1a66b71ed4540a652828822093e9a08eaec3175226f9893c33c35e8d6d8ed9861e2a05e2378d204c59ee2111ea44096ed1c3afa9d13a866a1b531447f98c9a36d4ecbffbf4b8e8429a8a2a3a9803a6784f07c58420678bfb0a35d20e1c47ad1f3826b8cd7e974812cfb752c5def55507c2849166d6a39e19d09576ace1a995d37d7cdfb78dde036af699e32ab247267a4ffdf1de9d38cf5d9bda4563ec2f52ecf81f4410bd833cda1ca2b7c8126b8e4ec2662817e3e3668fcc0986197d5f18a5c24e20f1dc942e7ae3512be686a7b4d090003302cc8cbb6f363067afb8b79ccc81119ab9c4712f85a9f9dd0da7442ac2bad122abc27a10ad1250cb250464e843214812847f1779b50458f0c37211e7c72e5c505db811a778b84834537033dca3a1b868d84aff58c0b94739abc382cc708147568149212346e1e0ae92b7170fb3f8259522c65548495f65505713543340f6156dc9abd845eb36467471684827c7ed77fad36d652fdb670d68e8a96e1bf8f4296e639f1574254b86d001fff5ad584cc761e8d2b7c3928a846d6b46392d5d094a17218de13f7781a2f55ceb990388b86f5c2cf63f10249138c7e87f0bc7c84bc6a2972e0467aa601be4f814b9f50f0dbf1736d7f23be33752bf8b4d3fe819be731c741ef5bce647aa7638464207acb185ca23f513998e1a30d9dc99e9ba029275a949c983c28055fcd1e5d52a97e1c38085a08bf545c82ba01cd768492f880c2225c7f8a85984ae803463ebdef896ccc02ce0305c60c3650b2a4d001c33f3f3f3f3f3f3f3f9f73db826d1684b6206592e5273ce82a8ceb524a29a59452190070a0c0344208213fd60100000082e00c7a0cda0c99ac9244edc612b6e008c5d0d5b249ba6c5de06184c2f848f93c9a6bfc4a1a6c386cd0607b8147114affa969294245f75834d84c0ef333ee860711ca315396d039dac8345a0c6020d9b071030468a8c68d1caaf0188271367eaef4927193347864840214c0337808a1982b32fdd283d225a73d8280e838d1f7536bed3ec2030876ec66a9edcd8d76d7cc8f125d925cc286a9088f1f144c506dd2d745cf3ae8060f1f146eb3a44ddf49e7786a8f1e94f39938fbd983ca2fd38307c5505b2732779e069bd5e8d845617fc67428552a66372f3a745198bd2bf93d6f79d297848e5c147daf3cc8ce2d3acf0617054df2b3e85862cf56efb845416384997909eda2ab1e74d88291b74f71af6bb1ac16cb3ee124c1dd7fc51d43472d0ada46fe6a8e7799e6170d1db428987a480d6d9bac4549cac051a16316e57e3913b6f4ab850e5994c4ad5aba8d198b929fd4920e5814636ea87c6dea31a57e4549462cbfcbce0e5794dc3b3393c9d090b13b5a51902bd1fceefdfba10e5614c4c4f1fc9b444922933a5651ce0d5f3b5451126e92dc89cc0e32753a52511011da3747733de9845051de13d4c6f3d6718ab2891726db7ee3285987294a3a7e924950213bbdc47494a2f4e1545cc969de7c263ae8204551454b8ed7e5675a991996898e5114d45f44b8b69fd09b7688a2b45e1a56e4870d4351f4d3aad07b3d0db6f64107280a1ff37b6652718fc9a6c18639e8f844d9d47a1a3f951d46d534d8fc7ed0e189725e8fa737efbcd9de75343a3a514c9fce34fafe7f9c9a13257127a3c9e6eff966ae14746ca224b59a7f278bfb74bf431325b964a813c356e61a7926cab231d293927d63eb888992206c3c7bae6910e9250a3268a70cfdbac312e5e441aac6535725ca5f92a8a612ba74d2794a14c64dbaea2959c7243c93bd977b4dddf1bc4fb2d434d8323b2491e83a42948c668a44496b8c923d3ae98c79048952c92f31353ae811651369ed1fccff557b47945e369fcadedc56ee6944f9c3fac7dfcb3ad1734694f4fece8692f14e1af522caff1a3abaf3ac88624c137fe3946968934414df45f6893f113247444997ecf176ff93f8f61ea298a36bc7d78e99e3470d51b6bcb80c1a4c6dce17a2b031dc36ac6ace4409517413f6c4f3978328c91be4d9692b0551fed8b13393246a92740c447e179f9ee41110a5cc31662741a9524f5dc71fcadb9bc428425ad8d8d6e187e2893e9f3bc63032e7601f4aa6ff7bcb94d89c6d75f0a128f2246125e84fc71e4a67976dd669932c7277e8a1e8b71be4a7f38bd375471e4a2647ff26cf39c949eec043a9c3c7f0d9a2d2e3ec8e3b982fe79956b3f26d59e5f9ffaac2b78499da3bec50baadcfb31bc3b5c3bb97e8a843398c69b5ca9814f6b90e3a1477dea3c81c32364959c71c0aa246f57930bd77deaba0430e653f194aea11ab8d8e3894bd4e922d949ce452556dea804331c62cd64128d17430d18e3794f6746a6b296977f2ed7043b1acf5f7bac5db3dec6843f9838c41093b772f1ad3c18692109ff3a224e96a2a77aca11cc793f49dcdf3be7b40871a2c0d651ba1ef1eb29329b94243414963423fb56730551b1c3ace502e1b19a99a3e62eced3043d9b475108f7992f09ea40cc5bcb595f9326c7b6a64f0d63cefe26a43ee2d5dd33c9b6a0b15a6ed443bc6503495ad6b42c80feae60e31944fd05622776f93a4550e934304da1e48c18c1b1d61289df00e6aefe174e83b32d20106bde492b7933a6c81102c803bbea065c66a86c7bd5d66ea6d0c99fa945226167478a1a8b51f9ac4ccc7934aba50b60d42894936efecff7670a1d8b2499efac9883d5dc716caff9a4a304f9a1994dea10501746441a4030b3316d071051b098c1a3328d0800e2b544715bcf0c250800a53e89002033aa230630409e880c2013a9e80800e2728a0a3090ae860c28c190de858821212d09104910e24cc90d17184900e23c8e828c2003a8810a3630804e81042003a8250800e20cca8118604cc8d18482046c70fec739393248a010c50050e2a811d8a010cd0cf384806ee820e1f944b65b744ea5a6512d3e01937728451b6dad18372aad74cf53e32c824dec183928572cf156d4ad00deda2605fb297585295924ba68b6288e724b928684c3ac918a1dacc7d5c94cc93f264ab26b728f6ca9afc9a71cde4df16a58f416dd2ee259c287b2d8a99326734061f21eaa2454189e9a15f76b298e6b328b5673931c8f4d3bab32c0a721e6abe15961bec5894357b5cd16d3513198545f193ebd8c9ae7962ac5f514c932f4ee6126aae93ae2887f7ed37cd0d5da5b6a2a0c442cdfa4cfaa849562c2734557ac87315e5f658616182f02ea1524559368939bb5364be87a92876e9b30e7d16abe5a3a2b0c94be44bf493aebb539484877f39b984bc989123d5a081630618366ae8c530454932615486d88c065b598e1b367064296290c2f09c51cbf82a37c6280ab2539da4466fe8e5288a82f4ec320dddf11ffa6e448c5094c40edabf9ed384690c8a921846cc64e658c25b0f448c4f1484d57b7ad173224b92ef10c313c58b6dcf3ecac6d23d313a51d21d9333b6ca0923fb36c4e044496d0adda064f5e82ec721c626cabeb13adc44c8ba8e6ba2dc4974b46fc9b6269c68b0e57b11031b34443032328111ed438c4c94937c3e33557252ba9498284831511e4dc9720d312e5192ff2f949897cf9e8769886189628cd624fa3b4dd817fd0c312a6131285150a297fb79d64e269fcc9804a2cf04259a1a95248aed9e2956278949189f08312251784f6966a77e23c48044497adf247a868bd1a68e21c6238aa6db4b6f0e9bfc2b3f420c4714732c2d3f374a4604237b88d188729974c2e3bdcd095d69b0350e623082d39b842f3fa98ab188b26514d51acca388923826997c233ff64d1e2311c524f532c6f253efab921888289ca989a634cd3d4417e31005a1f493d68f218a4907eb14a23c37b235d8dd8dfc10218afed965437a83289d9c5ff48925c5a8eb08a2a454be68ff7135cbb0c608c4c60044597e53eed7ff3c9a6d81102cc09c10e30fc5ceb9bfae1de487829cbedda419a3da49d28792249ea0c4c96b6d4ae97c28e832bd61de312e88b187727ec9bf25e75b0f65bd2a51ad24c1d48c9c074bcbe3e7d4e9e2a1f4396550f2b747b38cdea1f87e429b4e723e49ead20e85eb581d346d8b5187c28915da2b64fced8be85052f26fbe8fdc584adee7503a41e3f576ffa62da1399b618c8288218772bb464d92eab4e5399b22461c8a496e38fd0db98d49d26658dd2862c0a17892d85964b7bcff4a6f287a6b58e69da004db911b4abe9ace6637d8a8926f4351ee648e8d73f9a57c36143d46cd60da534d89ce1a4ae2ce99d23174d4500cb2c3a7124a8cd61d93868292aea4b292e36828d6faea090fa29ec33e43b14506fd6c614adf673394bbd327e13eafe4937319cabab7333a9b4b86a2b759092657279d9c8ea1f822734c529d88a124fcde35bce4d12a66188af7555f72b762ee82a1ec6a15ba4a29a149c52f94334b4ec99d747ebbadc7f0424912b31ba46948bd1575a1704ac996b80a71a1f45b82567f367164e8b750be8f2798557a920411c6d04241d867f5ac29c7fb4359289df41a7ed407045c888185527799e89ee4e9e818b510e30aa59cfbd25cf5e3b135562869909feb25ba68783146158a3183e8afb9b43ef98e4185b259e79274686a0b18c1057050600114f8e29ce0d06064c4171231a650ceeefd245d75e5692f8562f2f7582236d22c3c51286fb8abd57037140a2e42a8756dc7916d3ea1f8ff72d29a50329390134abe1fabfb24e1fbe44d28ed6ce6adccf7dd969850ecb3f7cf4bbbff13b48472763cf9e1e45c090531e5c1afc449289858a7d2c44e3eaa2f128a71363b469774fa3e7a845296dc5127ab7dfc123542d962e38ef23816a13c16e2438e92f9940e11ca31f333636949e5263584628a66506b5bd2b69b8450ced82509a6f32808e5d49b3f9694a173e9402865f0ba0f1bc2d39ae607454b4d29da2475235efba02c326dcc264dd3ef447b50f2591f3161654f47110a3178609e3669522fde455173c9a7eb74122a6219401705d711eb273e7582017251da50633aa60c808b92a4cdf428930f73c100b7280972eeffbb367b8d8e2d8aa3debee4c9bdca19b160805a14b46713e4867b0e9ff306a045316490a1946e27117a8661be4003cce2dc28779e245da2e3481699da9cf427a144b1406eaaaaaf8c115b7a58246b63c9cdbe41d3785e91dc9cca735de39ab802533d22e3a2c4b25bd18928adebd9df99157efced1fcf679a5d5e45c2e374da8d314eab8a245b2b0d7a95399b8a748d898da202dda0c453692d79844ec168bbcc5adac38edc147dd6334f8d2e7796c292e172ff7766424e8a53a95ae81073df8de2bc8dd63167505714d679cc6526a2a583168af5dbff730769428d0a147ff6a90bffeccac2305f600d0cf0897290b973f8c58fe724f2848d2403744235c94507ff24fa95697560004e9c013651f8204cf2a4ba49e7fca3180ca08952cbecaa863ac9c4ce9b60804c147fd7a451ba7f1727c644317efd65b6b5901ad54b944dbefda46ab2099b939628e596493b2567c1086128e9bc4c2d329998b949c050fa9c459e18ec53d7c9bf500e4bd377eb186f52e98572e78eced72367f2490640ba50903eea36ab7f3b1f3b350308178a49bef0b65ccd516453dd4249cb5e28af3d69a17482c6c64d7f3b2fb1aa66a118d54fc7dcf9c4a614a9a501040bc55dd1b06ad27acedcc92b14d7dc449e68d2d3fbdb05102b943f4e88c6ae49ab50ccdba293c926219a9404102a94fcf4d465dfa7e7cfaa4ea1285729df7a1868396ed800818d1c60646064a40637dc072052286f6abcaf13275c3f4c2b415b5200240a05316baa544f2cd118ed408d3024a0ad6c008142c9e49ff86e56234f89419e50f29c7382b666e98492d8f9b426938cda13648302693218194993018234a118ed54fdf6b9da668f16409850f490f7a362d7ffe44c16204b288b6cde247ab2cc98f500440925c924393d96a73b4e4e06902494af84077dfbbdfcb4100d204848446d5ffe3fbed318801ca198c13f3e9cf4a05fd59111318018a15ca32439491d965a82686404c77b816aa4f5024811ca7e3e9aba64dc04102294de33e7a4e924086a90a30639ee0a2043c06e6dd5b4e2f35a773c94680aa5e3685272b4c2002284a266859f0ceacc8499970012848256bd0d35c9fe53ee5906102094cec3bcb985c877c981fca03caae22263ac689bc707a5cd928450db670f4a6e4ab490a2b7264a0c840745bd39a57487981c47df45514bb333fc7d3e17b52eca1f63bcce41cbb928ff8cf65ad7a751e37fe0620d17b79b717b51597dad8f5b1d936b6c4ee22dca2e27cf8f8e48d3db7dd8c2758fb6a557f4b5b0c3eade2e74363ed566b3454c12cfd6a3810f5a149318a9ba419da7aa8e0e1fb3284932c95952e58b870f5994cb3daba4a90de213c6173768988151c3d0a000afe023164593dd52e2662eb1d4d672f88045e165e44d92f1c354c97fbca2702156d4683f6bb1eac315b57d5c7e6a68cea759efaa83ea5c2b4a26a5c754b2e6bf795694e368491abc3eab28c9af79d3f5acffc85b15259d46af9e9467b757a6a25462278fd1b5e22a26a828e5ebb8aee8fbe314c5d40c5f92f0df14655beb4dbddda2ed2495a218aae56bfea725c8ff83149977bd5a7d9a5b9b95b7e7ddd7e8311937f0318a52075d9224bfc6eb142f081fa22897d4fb352376e329f9501474ab79892f49405152edd2de4e329360821f9f282739cb8f984c9fe59dc287278ab9c6b24b4cc7da0e7d74a2185f43e93edd2f27287d70a23ca2b6712659818f4d94e49363db8e90d9594c1f9a28ae96be90d679cf44494ef80aeda1249339480d1f9828e9a05a4b499a36e74c3e2e5114f16157d3a93e2c51f8f0adf9a5349ca0592a7c54a29c840e7a3d9495acada3f04189e25a095e3247a926516a93f458b9067d48a2ac214e337ff73d29f547244ae727ae09bfb924d9ec0f4814dd4566f8a04e8c1af1e3110525c6e947939ab4edc987234ab29408a5b1747ab7bb11a653a5ad296345644449363133abf4091751340d6772091d234bc828a2a44af6e57a86921d950b1f892889b69693626eb265e7ae0b1f8828a999f631b945ed3e797788920efd937dfe99f5b2218a31869511e9d7e939548892ec1c0dfb4968ce8cf9204449183b31ac3b9e6c62a3c1f631883485b42db1fd66063e0451f0cc9ca46749a289a913885258e92e9d4f534eab1f802877921d6ba46f3efe507c37517b62d4e8edf4c30f65135625f3c7b7739041ec4349266165bab2a2794a443e94c3275945e434756bbc87a275fa7a0b179dce45443d944528a993101e5682f020e6a1249d28a921b42841c62c1e4a961b7583ea5323ab535ff8b843b184899585ff6bddc9871dfc3aaf6fd9584b1937efec312af64be6a30ec553a5b972446e4cf67ed0a1a0694db4125c338592ff9843494cf24d541322264982ea430ec57b2df94df8ff118792898e613d69d6527afd8043b9c34d0ea57dbca1a471367630bdabf6398ae1c30d25d795ad597fcdd4b12c7cb4613b614b4c51a7d9337cb0a168b96372121d36efdb6b28461d3149e9f1aff0a186b28c162d61ef5d21f7471a8a3907a5ceba35d442fe4043a95db4a4699f9e7ff0e30c25af2d91fd24dbefcf1f6628ea95e609994d6dda4f19ca9741fb9eb8b6bbccf5e1830c2549a3277153ab499265632828b1ef6b5b3fc450ccf93ae347b1cfb531f7118672c8d090d3533fc05052f72d2a23f7dd5b64247c7ca12c9ec23b8a0cca6ad60f2f94f3dd2f64caa04acafda30b6579fdec3fd9e45c79c285c28d2cb9c4dbef606d6fa1e81d3d6e92ea27a70769a1a896962974f688979585929273ccaf5546d5dcb15050656299395e098d5da1d8164a4d8e5aa28ad25ba1184d30ef244f58859269f392e79324688e692a948377fdbd875cc73c4da16471f2cb968532f904a5507ed30cc2476993949751284815d52784ae3cc98642d9bed77bbbf22714b64d662d7154271454658e9ff5f7d18472301931219448abea3f9850f2f79125e6333542e76309e58b373186db1c259453777cc60e1f3e92504adfccd2b10a9739cf0b1f48289b249f10ea3678e68e99f07184242bff12320671123e8c5036e184ccb14fdb44f3a308c531ed71b3af12a1d4719fe48bb7b40fe5104a32b8c91eb3be4228ac9b8fb9462f0805bfd2dc9899f97d03847289d161ea6d4a52a2ffa07492d866e2f15be2331f14cc64cb24e7c867177d0f4a823c694bfaa052dd341f3c28a5c6ff0ec2be5d94434b7bb3c61826dfd245b96fb4493e97f1f6cc45f1328c7dba09429c24c34561bfa4c64dfae41685510dfd119b312baf2d4a1e9625696a0a994f6b514cddd39245a89f3b695a94aac246c7f3139308cd2c121e4ec9c8a22ce7b1932449db51cb63511e252766d11ed4fffbb028e6b5aaff2b25af280751279be4171bd3e38ad25e8a7a9243d38a72fe4799edd292193a2b0aa61973bd426615254bf9f938aa5673d854510ab1b6ce272641ea665351aafd31c94d07a1734b505152a6f49e5c6a6c93fe294ab2c895d892d372359ba2184d082549151d44be588ad2a7d53771214dee2891a2e8f226726b93ad0977140513449c98ef7470f59828caaab1d4acdc1a8a927589d9afe53b47e680a2bc41fede73754cfa361e9f2827d1243d5d5f0f4f145ca4568b0a591d1dd389a2c7191d8d797b70a2fcbe2597ee125aa33b9b28ffde2835e983c9a4e39a68af349758265c86d731132511bfa754f746b61e98487a4c3f2927737c09bac41e6ab615e3d9266b9b6e59a28c70ef4c9e943c2c5110756a9fea5387f57c021e95e83cf7799b32a144d144647f5d6f96d8781205e9d93e7fca9887244aab25c939f5c730b1241225abbb925d52b989152151d25faad7cd45a7ed0b051e8f28079939aa67b25b4ec911850d7dcbd125a711e54e97490a1d3f8c28a59f68f2e47399d8f422caf2d1440ff76f31112ba258f2eaf74ffa1251dc1017a7428f88d295a0e12a47fe29751e6273b3b8d0d2d42fd3d2b59817ddcfd3c31005d3678214116a37e85588828c31fba7d599102525e93e73cfc14194bd4f65aac77c1dab1544c9e3e57fd50b44a94ae7b3f7d879641c102525879149beab3cfe80b00e9e4b92e18e82871f8a1b4d73d8b0ab7fdbf7a17ca6935c4d157bf0a12428f927c61cbdc71e4aa594cad239316d5ca73df450da981521225a645d24018f3ce0e1c1676db6324fd0030f360286c71d8aad576d237ea64abe3dec50f64dd1ed6ae26d4a4e1dd2fb50dbb91457cb2acd071e742807b9dfa6c487daea4b0b1e7328c89226c764072529ed3ce450d68d9353a13ce3ce1f87a26ccf1e7028be9b9cfcb4e9fb8672965ce2c4555b9fcd33c2c30d2519d2e6ea53af63e990f06883f15ab736c79ca11ce6c320c1044646cc3cd850da8d39bfe9794cbfc71aca66b57eddd1efce75f4504369cb3ff7cb68e5ff891ff4364ed9033cd250d2bb95a7eb3de9781e68288c79a6981cb467289595b45d995366289aac87da29cda30c252f317baf3e175b2632947495c97bdc39efa03386d29d70a1af74530f31b4b1f6b2d7fa359a226fb2ef1b732e3166f48e3dc25050b296f67a8e3cc0806768d3fa7ca62f94ac94a851ff8c2657c7c30b05cd9334af64aed39ff5e8424149a1574f9aee9b6f3cb850d42c2dc1ca4afe5482b650cec9fcbf4489e9fc1b3c187868a19c937d1293dc588fb67a64a1f0257d8a27319b492c14ad4f569595acd649ec0a05a57793a07f73d767de0a25d59aa41159f6d9522f6abc007be051859210b1bfa7d337e7493a1b7850a1789d2f335e6e63a90dc7144af2efc44bb81b31d39142299459cbdcec77d22b0a05bdffaa29a39ce7d06ae00185d26a8c7ffae6c6898d37f0784241c355e7548f16cf0a69e0e184a226b147eba7521373d6ce8647130a9f317fb0511e130a671db44dcfa5cc49f570782ca198324ad09b5542f932dd379c204f2c692f3c92504c733244f409193deafe8507124ad20a226228e7db304a8ef6973e27226128773a491ead131130203aa6fa6955636d9b1e9ffd4a9293cbe9d251912f14c3f3e572fbd38925c671c380e00cfd79a19c7243dce24c2d742a8c2f6a8c8cd8a83132b202912ea03fe4bbcfb30917cabb694a2e4b75bef2b7505072768b3cd14413db988004225a288f8fbcca32ed99bfa4b250b0b4d22be9ae2ef7ea8d1c619c40040be5f120dee43c29912b94af933c795bdba294dcbd88154a25727443a3ef09a5845e60be282b13a902ef35b6b2a19dd72d779e3ebbbb093731fc7d225428c858c8d12d6b1f5d4d81c8144a1d646798cee615bb119142e964114a66d36db7441460814814ca9fe6b7f3e96f101fa7c166a3c69d08144a1e4294183ecae6516aab40e409c58ed57432eddf86d733449c6092357f4c9f322dd284528951f328f1ca3a3c4c28c67a79c71c14594231cfd6c914adf90002e30323105142614b890f5a7b73ec549c1e48c10c0e8824a198b4999cf49b93400409e5dee022ab1e34ec4f4728092594dc5eb57e9bdecc8088110ac23bc724b674e7f05b110a3257874927f7bb9b9208118a1f2eef93529e366c5e6408c512eaa4ee54be41a6ce8808a1d499d4af56f331f002dd08835b240865b1f6182dd4a5c1366306088cb5098800a198ebb3fde99e69e43020481a394c1859831c97223fc04bc3b5ddbc63dcb473f3c8244f723149c784061b8d1c060423233472e88d1c61d810f14149f4bbabb9ebe05ebf8721d28372688e6c8c3d1e23f51af902111e94db24f3d86c7f33f9b48b82a9ce47fdd8da25477551107d4a0751cd344a45b92869b4ab9244966873276b317841082e0ada6a639bca36f9ddd00521b728bf8c982872d5e536a95e84d8a2dc493ceb2ad9e74394d4a2bcb1a498ba8649fa9a105a944e923cb39aeabe517221b32837354e43576c5d543ed3eaa6330fbdd70d1b161819f9e2868d3432628410599436534f4c7ab2897a712c4a42a82c71ae6449b2ca1b3666807103b1dd401e088145d14e890b8fe9f973fabda2f026492599eab02b4afe2163e4c751a30d87173572c4000221ad28e9ffdc3a237b3a644da8023208614541292194d44c5a67bb81701545352594f62659939785a8a2e0e9d9c14409278a9b8a92dac84ee56e314aa82896d2e6379bf2294a3227d82615b9e94fd0147ccba589b58e76ad77f8e63a19299795a2fca52707d36127f62691a2bcaaa3c495afa3f8440df77da297b8284aa3c3753ee7d3efd786a2243a46dd248ed82675028ae295b0fd9b2eba3187433e51d2243bb88fa73d51d0d1e8b9a7d5904e9436efe793994c385155d8a9905fd29b28e9fdb065923cda36754234517451aaa3c924ae724d423251104dcfc1d44b091a3b4c9434cf5c29f524278de6258a6b1f63c6ecdb73426909ac46bd4e432cd7aeea33b5f43eb737b69c2a51cc23f35d9bf426bec4aa81104a94848f49108f6ef71de42193289c669a13939adadc9667d80c354968a19b7215b6d5b1a57aeab954cf6f12a334e98114cc382191288ad44ad77029240ab6f39b74f2244566465e0e306ad800c19ad98c90471433eff7f396b21591234a25b69f20c3b5fcca3b328276086944499ac9f0df19fff2278c28e6cf66eab39e421651da934ac9b43ef9449b1451125a2b3faf9549d678224a6266ec6eee300411c50bdd2aefedecffce218a31d56a73f36d08f4fcc5cce95121ca2774d2a4e45958ad4688822ae17e73e209b2de19443974671d354166def409c2bcce38b9d793bbafafd7b8ab12b3a1a7be3187d60f4a32b541342460e3023585104014b37d4db03315931bf72b84fca124674b939b99a44da3635808f143b1644e46d3ddd98dddcae0bc0f0525f483de58a6fc248d0fe5b85b92d819738ef69c07217b28e7d218df6546f4899d103d14649650dd1e739824ec6c08c94369735052c7a45d0fa460868d103c1484de6ca610327b89e5dba040e721e40ee5eb9c6a946ca5f3ed04c01c42ec502c253285d26c9f25f6b31a6198195fe03033e80e84d4a1d8255e3fe4e77428853a31b7ff666ce5670ee518f43f071963c6d235440eacb58baecb7d8dda995dee9b97da8558e9a490381433667dabcce839b41f0287b2a732ed38e187bc211943491b43ff8406dbdec88123c40d2513bdd67d2136cb04b5219935c814ef1acb5183840fc78d18500007ca5183093421840d2539e953ef5d22df3f9323061f0859c3fa194b7efc53c611a286ca5275f7c6ec43c5abda3b7a2e2d0d178286b2762e49c4c46555561a6c680b18c105104a23233b083943d94b99d628e26162fe65806a7c61038c1a786103040859a0cf0c66f253823a19fe329493863449a7b4d1ba3a198af184ccbef50e56aa8dc18f77d92fcdf43c1f2bddd4394c878d188adac9947ea8fee7100a0943b14fe76c36b73e7c4908180a7a920eae695b4cc809f10b458d3313a573741a4fbf10e28572c9612f6b8314e5e58574a11cf3499650621017ca41a55be7d175c816ca29ed24cda4d3102d9404af8f9bf673507aa42159d05356eeadc96d271f08c1c2b916d7329b369af7e156a384dd509f734c1231845ca1e0419be878b642ac50923fa88da7e46d74d5cc084248154adaad4789d1ac377e1b4285a2f589e94ffa193285624e7288bdc925d4fb0b9142b936e4e9f01bf64a761711128582d021b4272d4a6a986008144af2cc933ec93d7a5271c8134ab339291394b4595a73442794a432ddb24cfac3d8ed869026944a66f493924cf74b0e13ca49ca184ecd374b282629f5f375f4cec728a1a0934c1f26c7950c52938482f8bc0badf7dc316a154290508cdb35a19ddd7cc50b3942b1647c11dd7ffd9d232a8418a1fc3532c75a99d87f9a2294373e093fc9631c25888950fe0e4ad093b4a7d11c870ca120e2ba61571e64fa324408c5901a326a92857e1a8504a1b8a6b4470ffab6a413464208104ad71ff244089da74451c80fcaf7efaf1fe7723656213e28c74e9a9b5b46875142213d28bcec9bb9ba9db85512c2836ccbea4be76aeb4c9d762b51824c21ef5d94574c85d0de1d22b3d445497dfc3c7a32a9a4997251ded0f4a6f1735c143ea9ec78cf096db2bb4569ab4baabbaf9c248937882d4a7b1bd7d6c554c6e46b5116259a28a7dd26ebc7d0a2bc62f719845ab3282791c9b53255c87de64f009145b154c935427706132a8f4529bb57439c929ac45e7604105814c604ddb9e35e578be81505134a952ed94e7bfc0f07105714a3c9dfdefa4b172f6945314cc3e3b5358f922b2bcad6ff41876f341d34d5559446937a7daede52a307514551ffcc3349d2998a92bc1993b0569236258320a8287bf81d9dedc6e3d807728a728e57b641ee764c7a10531463da5162fcf5b414e54f8248ebeaa83176dba428b9fd7e3e69e334b8461866c60cf4400a668c808ca2a4fd496acedba5734e7a91540320a228cde97cfa2493447369c30b0c457376eae521b6c1810405b369f5951f96a59edda2e4e81ff4c488500b5a60830361d8f0c0c8480b6c78a178234718209f286988900ff2999ac1f74441cea649d29b5827ca2a4ac6a7daa04b300f270a3a7b10b3b1bd4d981a6319dea55d16b6e923aaa7f15b92288368a298e477e8db9a2d259932512ca594f0195da14f483151dcf0bf41fdbc65494d2f51ce937a26bdcb65d0906301c412658db9939c37bc4e00a944513493e8a24eee7462cc05104a14b309f550e9a964d3220d904914f4c2bc7743064412a58bad0b3f51aedd3a34fc22513c31d78e061bad9a36386c783181b33d48b4671afb3972bb769b995bd25c4c385593c601868d1a2323ae208f286ef6b65bcfbe238a794bf04f57a1be46de88a28ee890ad9d64041046d8398986380c0d10ccb01a802ca294fd7943d45544e1cdbd3af7eb7e4c992f8024a22ce6d6413f44d89f06828872850c27c5fe9f74133a44492ef9fa3e89927f3cc610259d6e9e3b7c4f92c493422c9bd6f44977194294e40d9d84f48c752739889224fd97e099394f4438c30451309d6a939ea851fb830e8e1a5f2406a274d249bd9a9e3b4926c9df3031b8c00d5403c3012f0c0f400051fad04126f1a6fda1ac9ed566db19cb01094ce0031cb8c05a00c40fa5ddb9f08c251880f4a1245cbb5a4e4394924b0e02207c288e321dfce4d42675d21e8a21a674de2911881eca9adf430975b27d893e481e0a3a99709289eed4551d103c944d9897704a3407f1afdfa15462907a23646b8736d5e66f6e96741440ea50d46ad13871fd0413561cc60b0ab81440e8508e41ee2699f192fa371c35302098612073280693a4b6fff6bd0f53a6e3eee363198a43414b35a3d89e246a74e050ba11eae2a93b90379493eb2641ce8c7d9534881bcae93fb5cd96e61cc56e83f3f6e1e159f261666aa6d9bc3d986019640e80b0a124ba3a7dd0de63c276206b285a299dabba25659c41d450f03621931cf479ee29014943e13668aad325e7eb7041d050b812a7eb69f95f27090a206728ae9a7d4982297947c94600c40c65534a90bb51cdb214678461be60ab41370640ca50fc9374db260f4a0e6a024286c2a8ceb8166bdd6d2563286f524a2621427d99b8e6001143c1e7245122eb71b207057f286db4cc25323af2f14341e89c537f4a2cb9b93e946b4ddc865fcd9b1d1f4a72d3b5dac4f6501c213ec7296953c99a1eca9ff1b964b83a0fe58ff1a93d8ea777d5782809427e7e3a4977289ed650bdde7d9f931dca9fa38971213c9f09aa4341cf27213347e950d2633da636fcac99cca19897e139961fd75e39943b633a2dee4187b9712829b3121d6bf6bb5a3894e62459c546e69884f20d253178bdc59f782783ec8682b6f5c70ca76a2f721b4af2a9141bed3dea346643a974aa6693b38692b0ec4db29b9cbc24a9a1f8b2f79b41bc6fd2901225e5a7d4203414f47e92bc67748682c7cdba33a16fff3743c94ad23f36f722fe2f43e1bf56fd640e194aee2528990493d1849331940419c367d31231148389139485d8b6d084a1f87a629a9bcddc130c858fa3b32859e3e6d85f28fce968ae75a66e5b2f944ade6d9c91d7dd6617ca9945c885728faa4e9fe4b680d47ca2872cd14231859c93493688df2f0ba53599fd5b33ac74b050aa923d7fa2b507b84239ac249de4fe70134d7a002b146ede32f637b504911ea00ac5a063ec9918a64249d908b936fd148a2e1ebca493c6c4ce91424198f698c39a44a178d96a72473f49630e85629097ad39f6a9623fa1184469a74fb3138a9ba22c4ee79d1173130a9ea2be64d11a4dbe4c2897e86b6e4aba8482dcbcaeaf99983b5542418d303947359350169d047ff5bcf9848984528715259860215aa31ea11ce38b09b111ca72d29450f7eaa3c322947457858ebe61ef1d11ca67b1ff7672728b368472c70ca3fb59e3c885501c9d623e328d0eb53408a592f934d35556e88150d69031ea1ff483929cb2fff1faa0249ea9d36963cc9ea8078593ca73b4d8a8c173001e143666e7089322e3eea2a41d457e9ed293a45e17e513d67d2753f3e92717651ba124f5a3041785ef939fc4a8b945e1f73d739df43ea1b145319774223e63f0ca4c2dcab949dd077957b5715a148455968afb0eea79cea22474ea6c1fe65e67a72ccad9c48da2ff4a878e3316450d192fb6ec653b4e589433635dd3ebc92bcaa1b1941aa144332597ae28559da079630927792c5b51381d4a4d5fb5fd24212b8a65e6213767f568827015e513deed8314f1f9715445f13ccbba2971b2841a53513825b704bb1b15e5d5ee9824594acc8c4f5152ea24af312ddbbc29ca31e8cd49e64f827db61445b9f564aa7d727f9414050f256af44bd935d9284a423ec7d1a5cbe22a1445494d9c56c9589ed6148ac27aa5ed9dc922c5038a52bd897b92967ffc924f944fbb5eaae8e667d613e524a81b8ff161270a3e32a88f79e544e9d4d7a7888e4e4f6ea2eca984b63b0d1ddf34512a49d97666ea51b72e1305cd78a7366e36314a98287b7c8df9f7106dba44f9d2cae3a42fb1794b943dea482b135489e2963625f38712459735914985f7a77e122591dd3993acb7f62792287cc7c689db27651889728c31e91a3226cf194894bc35c72093d0cdd51f518acd9ee411724441852c372b69443174d09913c388828939959cebec12ed459404994cb39eb022cab7319fca642811c52458783ccd7ca5ae21a2a04e924c4e663335ab1da2747daa79543e27a19a210aab277f4ecc9b4a525a214aa2b64c9c933334c919218a41fc466df3065192378ef630b2a6732688823ca95594249f92a2b24014c4e49ce4291e62024429d44f73b4633ee70fa513dce418254cf864f243a9f563959e6899b9ef434992e263ba9a24d7880f45138359c79833cf4df650ce994f75e87ed5a4d143419f87f63413b5a73c9483cb6fd4de0c6e311e4a6a5d173e9a9e367b8772ffc98895a4e122b543e14edca01a74307dd7a128aa1b633c9652a24351c47b6e6a9376a33887728ecdbb317925430e8557538fa90429576225230ee50c56a29bfa094d3228030e255193944abd36196ca6c136030c1b35500b6ed8488776fe86a2fbdcbadd68f87c90065b9a0cba64b8a1d855e29a28a24465b4a1741974f858d296187e556543b9dc37e959c69f99cd1f64aca114c2cc3e0833ddfd4d066ed49811068e34196a28a7faa4343edd32d250529d54ac8e906d3209a3a19c9370929049c624e9279da1a831b989e9acd7a493198a419824991a53c92843e9426357dd668da181f9c23720830cc556bbcc6f3969410b6c78318692787210a6d746e669530c7a9247a8951c4d0b43b13dbe563c5409e2c468b0e1d5b89123c150d6b06f62c4a6f0f90b45f552d1f1619b7412c6e1857289f01377fea9f46eba50cade387f352587901e2e14d3e8b88d9947663b2d0a646ca1bc1bf3bcc79216caa5192d946ea837e166a1b8c1938c3135454c4d2b90818572e6948fcff34f9f357625907105f4aa54e55a8b99ac9f0c2b68efdad6f932235eedb527272fd5cf79e2886454a198defde4a047092693dac2f822033598000e1c0604231819a9413232a2051954289f8ea3bdb12537c86c0632a650126b845d2611d536973320430a05dffadeb232fdaa220db68e423196e01e5f763695560f0ac5645f9ff7e327edc51d90f184a2e949a74b181d27146367cc7193a4d1605b0b818c2694e783547153e2cb6042317586dda8eee8657234d8d240206309055963423e9e12f254641b810c2514d47b58dc864e7256114712caad9ba42f1d7b31ed414261948dbb9c38d1396326907184c2291d6a5b9d6401194628853a134a78d0292a7e1945284737ff7ca55a5f79171944285bf6c946bf90490e6f08c5136446113a46dbfd1c096408a1a4226454c7d1ca0842295d3ebe58e9fa0725bd800c201476ae439724934ea9511a327e5050dd13a75e5908bcf0a2c606464664f8e0c1a83103306230038c1a2d40c90064f4a0d475393df198f9a899d1b3d66b973478023278503af1ed3ba693f8d817bb8b92cf956617fd992ea694ae8b727f2acdd1b0d160fd80482e4a7a9bde64cb694c823c0718b8287c8dee28594536bc9b038c1a37c2f0193372e0b04163c69e8d1a33c2c0a11e48c10c0c88dca2983bad98a4bc33dd98d8a278e925a84caf355fad482d0ab75b7265ed4b8bc2c61271f26a3e1dd39c45b1fd0465f2268ba2575b6ade189158942cb48b38d5ddf6b9128145b99478a2b7ac91525a062c6081919113794549ccbb99aab269ec52115794f37efb97c96b2b2ccf15af8d8b17bfee0f1de6af4d93242bb6f5b96ad9b94a7115c56c7af389eb39aaa8453e35ae724b7490714f9a32194f91549457cdc45d880b9dd3455051b2aa76bd923d6bdc1811444e51ae73dd6032274b99ff4c51ea68a2ded52e62c22d4571e343f4f967485138c1744919fdd751944bc96b223e7dbfafdb1608c1025a441405bd27c59e505993f3271465399dca549e76a6394151cef8334966ede6faa4c8276a173775b5dcb76c35750de59deb94443c513a61948cefb71ea3e78fd02c20d289e2e73822f7408413c53aef35214b1265c2641325396ace1ec394b449e934518c2ba2a5add3673069c581a31d209289b26765b2ea1c732d8d8ccc98d18a031913453121b73e5927d35c5fa2f4278812c73d5f46554b14a38a0c6d7db513daae8472152b2f776dd7161ea764cf4c6f7293d250a29893acb3f95d9346d13e9a44f957f43298127672e5229228963cea57b389b14a12138992ed7c085992f698152151ac2a21a7e6497a49a1c8238a2a5fc2e6123bf346a97f20e288e64b4f9077b2876ed8383c10694471c39e5a9ad8ae90d6b05182fd428411e52e7df31954b38852a68e7ae53fdf88410e3332826ef00c3338fe20dd8188228aea63e19e2459220a27cecce7dca52eb71301114414dcba843dede33626e910c5923b84cb8c6d08b46cf55bed2adb53836a1379224e8d440a51ccb143e7786247ed982342889252e9a324f1298434c90a20416410c5b4b226099dd9464942396c7821829191198623870d2f70b48908a26872a6c7fc7154e9c98904a2983369516e3297f0944500614ccd697bbf3fb876d5f65562719af5a6995b9e53dc7e28c84ce5d1bdbadc37333232323232627603079b1b3130227d28f88a7eb7c949880e1e3e946d62dfb6617b9b5b739e6ba7d23d94838c2173c9ccbd6550e3b102de679e1e10d143b94b50df41764c72f7a6a2209287720e726dbb168be0a118b4ccbb64521354f477287ed0a74e1a99fae49ced509025c8911dfe4594552275286b2615a7316ce850d8a4576723749fc9c93914a3e59c58279514b2537228e579322f1db13657c6a130a337082593b857920e0ee86ea79588a9aa76cd79d49c656b9137143e7ecab57effe7ac4646aa20e286b27b9b5e0f9fc54e4d1e8c18d8e0cb2541b7a19c5bb4af49db9217ba919119226c289cda24d6733c712f746b289ff413423f65a83e25226a2856789c704ad4a4a170a2e7e425a9af5e2082864f64d2ccb9936ca019376c989da1983e9e996df27c2f1d1a3c22628652671ce5af62d260a301a2c17643a40c05edacd99b4d523672af21428683c89ad8f399f40284c2400343640c4531c9ed3fbbd70b18c1050c0a013a35bc10c1c8c81b7483468cfca8844e8522d250281087c4e170301408156f570073130800203c200ac542a1603412367a148003542e1e3e30241c20261218181889c4c27030100a04446120200c0a85c361404820584b85a007f0e66eef9317615963c4ca3fc56d9183de214699be4961a9c246d2d433f7266d13d403830a4747c9917a34be714fb3f9a225c22785e50f0b86c269fe5bc355fac97ebb52c3eebfd72af2e2731bc222f8a968f2e0b9796b2d659c1ad43561bb9dec1f2e0722a7c8abc018082aac653be53d4935ac1bd60e48fc4fa46ced2353e159cd12e7619cbbc833bfd91d7991c5e4c5c3e6c8c8615d3938079e80eea9862d607ae594ba1bde8a5ce4b826d82a9ef31f16bf4ac09fd7d22865d1aba1bf4156cb56efc787d6f8c6a6e85ba0c20ea4ff0e3c6c267d9cf6506ad8d01edd66ca7b9e5398e3435f56ba1d309df083f4c5d019bda7c68938511e7ad2448f56fb05c96d0a4d0ff483d088be2c88dd770986e223c518949cde6b278729a97d1ef1c78a8b6ca75081af3b7cd143053634cb4ee5d133c65683ec53fcb554a287fabb2558abb6ebfa1ec9b6b7b78632f979306f8a2a50d606d1a9d8e20d139f19d951287586a5529e5216a6926e3bacf5fea8df22035da553a24f1471e97257eae38e9f93ad9d884528139837bd0923d5beff1b9364932be726b18194309722698a8502c9af678481a7b3e708e22add3336c74620fdc444eea2995931a7bae95318f80b89ccbf41c0feed5ef0ade6b0fb893b53526783f054b6e00dd01412e6d5e814bf044d5c91ee0cc5ee5bbfb28d0f40384ec959b25c8c78f612552e3cdadf55a8194f6cecb46692d7c300ba77859942af449e351ab79e90eed5a44f5f931918813dd8360a7fb30ce6cc6edbfb0e061a5507856a58bddf4eee726217ad6ce7265be14384f28886b78a2262309c56d13d528753d3354085f90b752443d7dca533a6a34d5cdeaa22b524831ceec2d36a6316f01f710fb9e211b02cd02caac8bd866e09730f113692a52059373f0b4bb4ea7166ad6a9fd1d0e903e645f0f51d20edcb9d6d833f0cb8b8a036fda388f282a04bb3446251af8277edcb9df37f37ba344906635d971d6a2a01dea030039a40d600f21b9cd595651212242654dc716f76ceaed566f1aca6e86ff2b0d363fb4c0526f9bb231993e7125c91d2c9dd7baab0a9248a187fe6f11b03310a155ee9edf28c0859ba9fffe6d9b4a913a0df1513eb785bfa31bbfb7eb7227c2b3068985ec38751274c02385eac69fcb845f33449e39eda260eed2cba00355c61bb2d993a6b4317ec3671b13682d988662236137e26cd12068525c24b3297094c1318e5e91acc91a97c565032a3ec2329624a8bf0cc9481eef9f4f94b68692274e092b78060257449335d49743f3dbb99a31d812c2b6cccf397b911aa00a9a3048ef2552bb1113bdf3c0c0f3c3159d52208a11cad9ed7b472289a0bcdeca2ec95859ff61506b2691b424ecadbb81b8d87e37ca50de1aea25153ac63a02d9aeae846649cbc367f87a66a1bbd794d7993779d83b679427b8c0abaf888d5b7752676b101f97cb1559f9894203bc012011075ccb38a88247b0d7db28acfc2cc54208084260bf9f50e30c3663f2d25e3dcb060842a625225790585453666bf5339635755aa37b763b0c9a8836a035773cb0bdecd03a922252481dd7e051b438afa91599ce01ad9802c1efae356af4d7aae3d9181a17e43d9df295e57e9086112ef037981e5327d424db1872320f9712235edf4a5ec11a33bb35093bf4b09b5cfd70b7534fa59d6fc328f6f7a703544d610ae890d9639b1bc7e9581056b42385358805ce047c0483d0f6e2030b4c92e3d15dddb5d96ad0a2c7f8d19f6770dbb51ec672a3ebce7ecf37f52a55a63939c6d07f8c8e5103980c295fa374083130b8978999fd9107fd747e9b7da436e0655d98b9f7ec9c6dab30107c672662f2a3251b22d4f356eb2b9b17efda7f8831af274300a3ff8885b426f569dc2a2e2e889d311591c75cad84d7b2def5fc938aee1aa55315010a53ba7684f3467e87725766a157359a7150e947c7ac416cff1c3cd5467dea857a19cbf4722b39d968958a5bc282702d9491bbfe0dc0da66d185c7c402d279889dbf6393110a2bda297dba243040a97f31c1dc90f511af58a9c276249cc168118f3e0e106c08ea86f238fe1ec1507819cdc797ea931fec78efb6147723a86b4428479e07c0f68709425094ee8920eeeb8574d42308f477b1c3735f495327e6a2f5463a9af62664243af614e3f9c3f3633f565ce6847d934507f80bb2c7322d2f4d000321e42ba29b56325edce6e759a5f0c33e3bf2b30b118e1f5b3f7721c03714c9ba3456fc52752eb0d0f2ecead2fc69f7bf494355cb8ee5197efae02e0374a98f2d52567b149c8d90b88ee90a2654e98af51cca8eb4f8ad696b3354fe484cd79f3706316296126cdf07b0a6edc85e7c9def21d6f678db3aec125654059c6fc8af6b09b55b55da3b965f5730d621cd7891862fdbbf67ad95b273ad7c41b304a1688f928759d24adfcd03cb2e5ab0cf6517568943164ba60cbd5be3f7e8156ea882216ab888daa9fc966c076d4182619b07f130bc5d024fdcb8fbef4eda4b1d9d36cff38ad81439b3637e08506d4634538efb8ef813b327d364989aa2ac4d50de0496081a9a769da43ca9d07aa2e7a2f4d24d40778ddee024508cd3d0c2ee69dbb668ecc28e89606db326e5f4006104f393fdfd5078495bf1d0fdc4070bce8c6ee98fe0594a68b6cf7adbedd60a79d5373d467af9222a9958d4f5ecc6a17557830b968f4ad285f0d3e4e28e4825027c2e7aee309ab8271d31c197e0dc853a35f1231f42761a455a0091b7f1e404f5c33017fc86d381093a1096169afa8c4727c576313c4c1b8d701a459f2ec822022d766a186ae5de0c2bcb9aa9d8e223a14d23d57d20351fd26bc906eb54c7a05b46458531291667e08e27d23b3114bcbd1d4c0b06419871f30989e39436c9106232eeaab1c738b357354d7178ef625944deb96789c51c8c0eec9c5201727dff7a1aaca090c3ffcd2605f93ac1bd71a72f8b904edde8a278f4ec2ed1ced5a75b433603be0d4d8e3960a0ec5f0fac9a17968099a5ac85478a357003494b5c9d0585b050f9630a27558043cde17dca8daabcdbc9fae14bd9e99ad00f40bb770f42c6216abf81a6d29c6389ee7b5c540754da004a48c4a0ef64b86050d48ace841d847eb619d86af690e82b5a9ef9ba2f6fd5e2a0c0a4416602443b90d1395005a6fe2c1f5d0e5f3bc61b2e081e4c6542ddfb17dae94720bf07ee5c3a77015e74a85ab7679991dcaeb6e254f5072f679b64acfd5d8ffbac8cf60672385fa2d6955fdd1a22b0249f71d606d4426d53382cafbe3d4a1e151c05e78ecba99c25073b4df41323a2d4758f77d8cf3f06d9b006d745fcd68112d3f0d075976ed47a758c4c0929a7d524e808a4bc24b29c6cc34045c5c42932c696ec5f380443c9d9c48478c4367b2038dada914f9bdee74ef59dd369884e832a822262fa62a1db589122d8941b37f51019246a67a2bddd1a3e311da0a90d44e3760d46c14446cdd67e81aa533394e65f9c64ae2088c952100d1ea5814713625d749e721cb4da9d91f4cb87c7066097084ec31bb478c5d70778e8e7c104001bba1e9291064b899bab8cec009f5701958d117c02b268332f1ed63e527cc30c05c81c0318f0225225dd22e1dc420561093fd503c3036bc8eb56ffa9854a63ca9e17f0949e1e60046ccff8eb1f8bbc81879533d5475302cfb4ece028fb2d5a162132f215f96e4e0953186d7737e7edaf2f802bbbcc88872a5c7b242d915f50aa149191384a3903ead589066f07586c582224ecb3ab37c09e7b528658eb250de01282bfea8066985fca3f66e665c2e9c06a4d728b3f669295f587366c50e143ee6d8f7d0ed22bd9a4085fc47057e8dfde1409733bfb54acabb504ad3ddf8dd5152fe905564c81a2f2a1de0ed32377eadbf971e2482b9b0844145c236d9d2288f8067ef621caf6a2f9014e13d82f2abc2ec65970514477bc7503e6ba0485dca0b7aa2f5aab90f020da876f393babf00e0063721799afde578969228053321ac8150e7263368246964a1735c39db23060cf0b68bd622188d5da7ab00e344f8b428829979c12cfbeb32c8176f1c3b5771068b7b7e576a229ce6e0a938651887162b931434fc8d254241f79d6c942006b82f5e9211bc0af831c641b91a2469a8ec838675da7d5b52a01b9650b4a29dd3d4c72564dea2bda1a3cd6576da15bd90eaefee4917605bda69c1c3a8340cf32ba515d3a8642085c3b9436d5509afc206d0bd9af78bd0d780dde929e69da0c1c271ad78902fad6279fd10f270e407e763162ad49ac064e084307566a39fb4810413a0fb6c6ea04f9ba5afda386fe5dadc0bef8bac99605c4d12459a4cee918599ad2120c4e85e3eb9735757dc3e07df07c346967c20c07b651c825c048010320a291d0f2d6bc6e53edd078c52c985d44b0074f07c086c0efa4eea7a3e901e61cfb0f4386fbb9bc687a04e56dab9547db21e9872101f441d13cb6891aef2f3c10619f56556bbcd6aa2853e830f3b9c2cf4572d7aecdad55c85bc409264b19cd33b21b37089844f5c510c32bdf855f4a04db8a7e0550e7305c866f35aef17579eb3770817e97d0634a1490d191f07ab911154ea820bd08e882a9b702bbf34c95630757c1d95e9816945a256dd3c93f8e543047a24dd56b022d44d0540fa1d43c76cea437889e461baa2023a0022431c04484ce9aa30168269afeedc304b4f70b616d62c04f7cc03c676f2023df3c11a23929184d36903292d42a0ae45ea463fc9574ac447f2d83c54acbc9ead3811b927a9d64873f614d7f805e9eafac3386ceb3f10d2063c31408949116aed7644b9544b0e7e76e1776956a1edb8d0cd156b15176b2600b151bb1eb10ec13cb055dc6e9dacdf474e18a853267e5886d63932593303075cdcd80421680f7d1af82ef69d95aec84b2e30f03514b6fc9819c3a7f16f06d0940f9cf79ecf44534d698cf4c4b03809cc940c35ed2de8f977ea132103ac6b33665563fd1116906403d9d3b362ed4e146522f60b82c8ed7a2218ec3ef92d96c4d9af26b1604f372798585c2952887935fe6155e3401c33d83fa44b1f832c2469af09ec2eccfbba4f7a10c5ff3085155f8abe9e69d9e1b5bbc9ef7f6837f612619bd44e0253dc8fd5e0e1d3649d8633575c9843a78565a5f745b215e1263b032790c37070b368c11daecb43d915f02a7fc967c5d84dacc4bb842cce7adb05e2558a9a772c6f89bb2ce156268e14c2dc239000a4a48398fb820c11e7ec4621f55eb78583ecc8c1d80507c102a34d63522f4796cbfda929d1da166df5589510ea6508a429091afeea6e88d0671225088f0631664445e9100294d8dba8e87ef266580b3eeba1bbb34ae961c9944d83858f58652a115562276c4035d0cfda427eb6a956907776e7d719e866d90b683b787a3619ce3d1c1cad4c3c3330adfc3211ed480591bfe56b14bd0f106627035c08685c2737f23fdf4de4b4b0f7ba37752d8c4d39a353398045c3303575410ccd4d1c52f970fc1e6e31462644ee20b05f6713f4a7a10188610d71533d205a3f43eaf4f9d382f8a35e18638d20527341e6662bc3ed58ba844e8a65fa38077659aeaeae648db576f77673e393fe0a27c82d38aa108bd83eb6ca9f4feaa1da5c664d080568e5f861fdb06bec083bb4b5e9847f9f93df523b986ba8b0554941e52605604dd205caa197510d63f91749718ab6cb3c6db66bc95cecfb0389eca1e4d0e9a34183c74a06b899c5a16f101aae57393395900a718f91d0369dfe3728823587db4607449f1a0e40dd2970c87276805f7dbf9491bb3857cb49d430939d2db474c124b59d003c170e6e3a72ba893cc1aef329d737f1da23ad3954521bfd80598267f8a7a3d4f7dfefeb9c43cc7c9878aa80f74d240eb7a2b52c7a7b9387cc25a0ea70053539690b1854cccc9e1c30938f7c5c8443cb86716ef946f9e1029e21fe82bd55378099b8da4ac9298d580d4f108b3732d8b4fd8ec2b5ef1b6b60d14a2dba79fb67b207ca4ffa0a6ca27aa08988f650a51afea47c4efb4a18b90885fdd0106db24b93ad09aa836a9fbed5f0aec906c153d82e4eea02c1df914c19d523cfc7a12587d389ee98434be80f5de34eb2285c7765357e2e2f2a2b8d2671d2a9712d361225428c0f475bf609fe89eba672761cde87928e2fdbd9063f88ef9b5ddd2cbee02c4150d1f53eb41558705b9cf312a89238f19ee00b27532342984e42e38fd9384fed31dd341a5bbd075f5a0a2ce5df3b5051a0842107f8ae5540367f76d8a02939ab608bc8731c85e8cd5d5bded67cd759c8cf3ce6390cfb642a71783bb01e5958101f68a6fd86fac6ba07902e764733d5a891f9d3636be7c6b5e633ffe79249e571bba60254a48535c23b0250264a71fb071b47061bb959416e60f1e14bd017789053a04e87910b4c6827d7b7a5fa44ac5f94a13b2ba82dc6f87302061fa184365203b4d3b19b7f0b6d5988a0f04b0901d17c038833e8fe41099882671190a2c5613addd0194d9574a642f79914f0c5e9db533bc148043ce2ae4eeaccac6a936b3b70ba2471a1b750aa3ba1b009b7aef510df2d51a8c97c2ad6300ba80cc98cc5624733bbd4d4da84695c89398aa3103028e3e24955b12c5eb53ead3b1452875af3a9c127f4bec735b3bf57287aeb9e163efc98981cb888687de82a51a29532cc6981d9d60c349fd5310c228de6fd3b24e246418d13a55e9f5a25f78a5b80340048cc44036249a2da6c6b6d2bfe24080e0175ad3401a91f443ea03919504358403286414f10f0a3e52d96904db6228dc09f068aa8301bd49ecf28a4003f903abe253630eea3fb9622319619e1724eb0baa1dd5e7c2e84f659474646bc3f01eee49322f26562e1c53e7936efdf2b97161917141faf6735ee815fd1334c691e788ce75e49eb810e52029b4a75f97c95bb972db83a8f52ec61340b258db676d0874608cbd9030e62d53d5709cdf424d19fdf6da6060dc8e0275409da110bf8c453a175e422690317d185aa160d421984b1424fdf40622e2b91589d1a2c838c3190342fad45a333d1c4c6a316edf8f026f2e9128db02d0dfc77adcbd897b2eef52e2f4cea698ceb25f6c883a6905222bdf4067461862e7f4c455b99782e3aceba5e8efbe97f55892abfb8ece9e967baadcc1fd663d22117ad4adeb10d16e18f5bcb6f720cd7b05091b0f27e9115e149f9474fc1525a1cdc7dca2e30eb5a10b21630773ee4371c8792ab48b57ed24bf919bc7f68061b8137ae203d933d38c11f45448118a8f10c4e44de019d901efc292c535c86cc32bebb327f693d33fac6cece45d19074fba35222c95905dfa27f0aa5a2f3aa533a0fcd28aa834f8443e58cac4b039ad53e601555b1b22c56212b2b6ef44be9ca134579399b172d7a890a87bf2f6696a89b7fec8b40b101cf3633ab6aba323861823a015aea9da2f22a69ccb1ac7b76c89d8d737bd18d734fe90f79a56343d42b44f4b59745f8c76e92180a45318bf0ab39862b8ba45332f88dd78c4deecf5a9205295e9787bbc98ee273122fafbb52fa0163823448a9425640c1f845cdf5a99e0f9295f50343fafe8d2b000d0390533534012288a1de3e51eaa2eccff7dce2c450ccd2c2cb570cb273f5059189868641bec80890a4b15c9c7e1ccd113a2cc2ce08cd68f08dab463c006cc9f4d686967497c81fae80e039a61dce54480c6c4a39ae4e9fe81eea78878fd97329d805d55d5906f6a1807c46200e43d977da9d53b24712370dd53acdf0039d2fb450e86e4b9ff5500d3bb9231a1214a60fb76972efb6489d7d8743a282703edea11c3847539b5bcbec822be90d711e98a471cadd8ad700ad79b8d044f40c9af5da83781ca270d31d0775f8e9ceb082bac32c0decbd1b262c9d575e9599944f3530e6b903cf8ecaa21061366e5c1a5680d794972918a608065f2bd06be59c73d53bb8f87bb2f08cffa6d36632e2842243df75104432a14ef344f00f8074c780f039b3d6b405f50d19a3334acc7526294b2a1b11559d1b4892e6a65ebe7ecaea1b32fc275a80dc767f3f3d17dd253a1455931948510c0c6d3454c410d25bea4a298e6f05da2027932852a5b1380dc2d435895326b84ee93ca2822870df86c9064a520daae611c7dcff426f8761a15f8a72ca92223dd269918e1a2251c2fe1651774158ec6eb381342a156172f8825321a3300ae5d31a614e9b840b4157bfa35ef134a36d1ad70403153b5385f84f101bfbc640449c4d7008689bb5083303c8e902a2df0014f12c819ca5cf3a04393131d6174a63978ec234e70d87bfb0a732836b3fc5a03ad9d86d62b2a6b3d850f9c6b1fd6bda8fc45b69faf6d0a700df9576cbc723869faf7187edcfd2ca603ba7b07e1761baf2e3b1c21a0e8a5ccf9a72f0f25c8ad3c449da32412b7ba67e84d1706d604182a267ac31bb096cbc4daa79c35aa5a6394e218fe4dc68056dfede9ed8329ab87518cea53fce49d31a10c6313e7815a7d10c2efc2b1b7cb903ebcf6661ffd099b1c5885b92985097c079831dafb130b980958829e70201fe390938186ff610460127a120268244d7ef97ee941bd7872a87b4c7590307bd380e86e4719a1a30cb393057b4ab7b4e44eaacf9b98da6d1f65e053c4886d6faa954f4564e283e200ed02b7c8caa2a57ae6ffd7b0cc763c9209f8b034572f264204e72e675c30c0fd3076a8c27d534dc840af81e8489f8471031f1d2e8d592176faff6fdfa0ef669be361100f9316ebcb87b41f10ac68b95be224bd8d15ad09b541c5ec7f6da6b51f5752c55cf91d83535d7cef22231730f2ea2d7b1343f0202bdb603ec21f50559830c5b5eba4f97814da9cbacf2165fa48d5eaabc27b32a0bd36971d697d2b4780214bf2b2c99a32dd597fc541bddefa601965d792fa215543084021aae3d0d45202a8edd5506b4a951f9526f43718122052a6070027a6bfec15a2849a380941af545d16eaee189e243050b7501ea0c28e88bd2615a8fbf42a4eac882ba03f5e240f521e2c30d49a27ee3541f0d2a4ef5821284a1ca9e0ee6b56a0f3503052214fb50c440d18142136a1394d6507a57545f0c25922481b26528609ce0c4fbd3c25522964d3c8e6515993eb4620d0cec06de742ea20adac54feb0c462d6522408d4970683e35eb590a9f168692e4646ed17f1eb8d50b0ecc5dec5952ca8103dd0a2ee2cf63b7cc3b55174855f31d638f9a41387294803393e3d0fc5a8498d860659db04fee8304f179f33d2198f3ba554a8abde8c7db0bc11bbb5a14516977b4624652975ab3dda5a404168f07229964ae46381784acdc88cd64c37e6a57f2e8bdcb7c1ca713408395af3a4d8ef8b259214f602b9193ccbfcca2f2af5d7795f445eec675680ca64c80dada54586e2561c7edd8ff44d322e9e069c7733c3207bba4c02375e45021a9585b7067a397441c5523eb6173d60822044c17d10bcd901c6b0b4f2ead8646c5e960f71578335572b12882f5e36d05c22e7ee1e4c45964a61725fe03da7c660c1219dea4d14de5e0f96bec699307f02c36d7a1459cc27d3c0eacd08f04be256388576194df787453df0bbe78e5ecd3efdaf6e24a711ee300e524e4531cb5c3a02ab02bf44d803ee8b09c20d67e2a7a3ca0c92b41ff620443ad6c41565ee7a8c126c83154146183eae6fec482d36ed72981aad055378c691688e502aec975204db62b031e4aa6fc9ceb95f833095388a2b7a60ffbeb77679154c42c6843fe281789e08d8d9c24abd59716697a64e3e6a1c3c277374d10e3c7a59c95cdfa04ba3fe7f4d910b48258a44a3ab7a9f30b9fb68307dbb4b3186a638319717a957466bfa67490b53e3acc8a6b8f5ba6d3db318b37976463fe01c392e086c2eb9102f26360bcd4dbdf308200d6c2bf1e115dd00a06487cda0a87d059e3b605bf2c306bc3a478e76e708254de8f13651c734bf6c83aa11f7b401f22f7ceca972ed5ab1e1344a6a0a6ae55bc02359fc0fd46924080774d98c184149f95b313a2789e449dad28c19b05388f9994ef9904e482f922c65b06c63857605ac43451e3056878274363ba5111b1966782543838f924e0af9cc0556d923cc2611338395d2da08f8aa696427b895b5212e2b1b490f80704ae4ff417d6467b5042e3f72430123d1904c29ebd56e88c979f5030e9766295d8479ce7390290019b702ce4c6703658b0598ecdcb79fc5be307436dda436a9036e24b8c8ec71bbfe52f816182aa4f6a44d7b163b5434f14489c96116077f2ec60bc23abf0d12f84d0ac0bd4056394f6ea480ecc6440e4cb73ae1616d98b5e8f1c16061b6cfa2e3dff873e0ce8fb11b99d257c00e49adf4e327778710a1f19839aff7fc39e38461b3c15fcca57f0814350baee37e34c94139316fe630c2b7cd33392010ca1e140ca87121c7a409e2b91a1947231dc0085eaa5310211327d18945bf8640586db1bc0f8bd903194a49542103705606ff5eeb9c88f03cb8bd093ff8275f9c49ba1feee60a5e96925ce24fc72a2b275e329e8520a2fdd0fd1214dabdcda864fcece8335b09a73322063a326d6e85af2bda09ff6591b389f2148582c29a1a3fc9c512d8564308822384d3a4086603e0989496d44eae6d33e88e08ea75041759758145203f15641b5395ba9269776f6ffa58912acf513cc12f144134a47c47a9735dff9be7befb9ba770d69addfa35b5bfa58ca36ad44832675fe58d904c0810a82cf15375645ae8efe4966a09ee9e020cfeee7a73c4645d219cde66468a975bfe2e5f77b4e12de2218a4bfeb382901d0d3e68988271e85c82011203d05bb0f3cf51f53c517e536326103d30c537e85cbf8b6857959bcfb9804cef94b2d1ad0117bf7f232e307f95fda93029d305d8bb9d57b395dd82190a74408b653be3517abc193c4ff3c983627a5c1edce2343097f7098d0dda53af54a52aae2c67cdfb4090a006d28deada351588756ee8628541b360d1d0b0694a7def200031994ba3eeff070677cefd67529030c93dbb4ef6855dea11fc3115f7209132f2e30852ed7afc9101b40ac77cf30e95a6cce2b7019bfee0c213805b0c8375f9c09c8c584e9c8fff1bc436d4e86dde24cfa3da774850ddf8e4eeec9c9933b1f569d6553a119f7b1534cf0818475e389c614d33d59b57312cc10d4b01b7c1fd99fe9e748e3906beee423d9511a7724daf48b5ca38fba21d26e08db80728dd4dec6cd93c9e82c14980afcbf0aaadcf8e7fec30d54399f4caf085d9d00be04883c6c51032fba0c64efca66820f4778805428bb360f7f439250da9901a22d796c28b420d0fd1008201d9bd1ee71e4118b6b15ea4f0d59ed7ffb28c5c532a7a34e31d4c31c13f97e60ab291bbe8a406b068eb0d0b7bcb925bf51712d70996b34fb9608379067d03c6abd552b52757db3e2686350ea94864e3e4e10a39212e5d50d543fe0dce6a41ae3c69b95f419822b364c58bdc7c9ef58f20d649c68df56d3d5b0f764e1560c0cb282ba5f67d17fdd40f24411ae1838e40ee36e8d22dfbfdd831894acfd011d807f79e7317be1ae9f3d3a853808fd6bc8dadcbfc85f91ee5cd7dff4c83aaf0a57f42d941b2eafb76f84ad5387ef7fa5082b52a2a01f0e6473e217c0d4656cfd51a35c96c440b001bb73412664718018425cd137debc30cbb85fa3223ba37b25d09fb388fecab905db541bc24d3a22e49644188b4b46ff3607635cf16dcd3aafa6ea33e8df3a6f9a09ee94cd3d9e89b67b006b94afd7acfd29e72911979f88bc803e2a7b762cd4ff4cab317dd556cf96ce1b7c57eca8f083d003673a9d512e38a12940820600a7d443485c032314151059f400728106e88c806d6ae9dc0313710f0031f4cf675cf0ca91d80ac7bd506055eecdc8edb62a30816f983f321f980bc5b04da4ea722e84f7adc3a70e8040e0b01373032e80553ad4083e0eab93d755a71c6ed3288427a7568ac1aaa9e458ec3e1e7509b3d2c3d3bea61dde9ef122362ce97eb29715cbe48a25790d13d0f50442808254c9f2270f340a3971728d89ab4ba1726264820273ab63afad3a497468dea84570c076519239c73732feca4db2070e63ce04251e5f3ebb254c21f3ce44f786d1a47d8ea7b7147fa4656fc35cf798b20c152e52dd2267140345d208c984d916f793a0aeda075a5fb73c136b3aa448a915c5ce9ac9764162c8df0dff3b9ddc2974b2ddf71b4dcbd4365d672d3b995983ab5f1d2ead2e5b5a037cded8809d06df59f11da4e60ee2f01cddc7463906419d9f75c2ff6a824c4d36e48ea567a2c1ca892d2e936b651208d8fddaa2c0742f1107aa7e905e6a31ea1291dbb6fa3a8d5b4aaeb9ecc20e19d12b84c1f419747b4821d41dda7dc0eccc50c785acb962a4d4cc57b4b4f923bc789020fd548866a50bb73ba2f3de9628a6656c87517327f793aba919a1210897ba91055b000d50f8feb7d74e3788ca8262eebe10dd25dc058743354497f4754145965f3714fec9b5a5094d604976f32e1cf7b8e2eac6f101f306dff495318f2a5ac6fcb34220dbb09f8332cce2e02c91d64bcfa9ae0518dd8a74d437872984a64bcff0880989cf7960e13850655d0e967bf9a0eff441706850c83d87315b468288874c7638a3f62f998e1e5da68fdfd399c871e4564ac50fae0f8c47b883e21a9a589886f1dccc2c111bd6c6da9e03cae59f3bfcb876ee0608adcdf4c93d87b7342195422d86bba05c8b916cdb5329bbded574bd77943e1c55a8e6b8467a50d0787a61d0de4e09688379aaa76fb77fab764f2637a5568cdfe1c639d353616c580f03a224501985e8db7c15555b5dd2368bb95a2ea835ffbe1b0bca786d67a1bb9978c497d41ca3ffd0e9ee359aa0c76567a16ae7fbb583205495714c94289a0af7e904600b548095fcc655131b2af36984a28036f659fcdc1c39ad1793599747977c5d9075610bbae798701c7d751119bbcba51f0c4c8bee5c5d10746943ddf38d0b89c6a3ebd1d55d8e26fc37f6bc61b32b02efb574eb8dbd7e602509b9cf29327987143502c1290e0472816ddc380ef561681f7bde6b30e7bdcc2c00425ef5a88daebc40006f7c9cfe11e9bec26cc2f21b0418dc781e639330093e38e56ec927384a2a513ca550d01422f74fc4135708befde17a86c47ef4a48cfa3c40885228efd1ed5d9554130f5536166d12f307d85144d137903f23927524b8b4ea8b7a28ff815c03dc56146477b23f2119cc31987e0d36100c1f916ff3b8f43e717c906a5eab6bc21e08720d0e8dc1a68557c8cb8b06638027e85c1206b20d4231e09d0c66284c40d11f0f14dd340d7ae6af72d0ea68187030799677c420fbe003c2b60cba194c180ccd71d096fb8b8246d85c14f971747131829482639c46632a363f877c174317029a48bc2e482a848270e392109eeb595447b1f09a261ab0a579318a3f56990b3b439a8e1f7b85fd1d403b9d3eba646c2813a212ed00245eeb98c12b06e493c159dc61391b34f5faf14a1c81e9f733835b4f4a6a6bdb6787b08f6e7a63c0b1fb1010f6826769ad249adb7cf3308feb6ec5802549f4ac8de18e345c05497898b25a6b428c73fcc4931c672209800aa8442bd16fc6ddfc060411e3d0f7ccc3ef23abc94bb0b39ac4e39cfe5fd27b4b62f19c887fc9bffbdd10e6c29ba7c5d38d38eeafc50f56b90731a71ba4a2c5175211fe50c0d8c1393aa680c7783108961fa6ab263953beee1782667d64e291034e5cc33e91813ba335e3c1f59e18db9a042e8604234af33f4fd7af5fafb4ea1b20ffeb1b54575bf34493f0abe3ff9576228b1b5581434925bf015a19f77e3540b0a6d0013c0c3c0c3c0c3c0c50633cdffaba7be39afd5b2629ecb3df444b04924c29a5949227e800f1092124e340f6bbffee73fe9c07b207d7076a000182398dbe9babdc8c9518e407e6fd6c4f6b0b27f1d10b93eef2506ac7e48317a6dc62951f2b09b30afad88531b6624dd2ed8bf1a10b739812f4da9d0a272529e92317868f25ef44ee8a3e7061bc94f4792e51564b9f617cdcc270512ce9fcecf0266a0bb357f268e962fca885491895839c12421fb4d05464285d37266a1b1fb3303c5ed6927a6d5aca6d560a2abad4bed9ce1fb2308d997e6ad7db62610e934fe73374c7860f5898acea2a5ebb5de55c7b0e1faf30aa5f8798f9b330ba7585713feacc2879c3ee746df86885f1628bd262b9a72a09470d6785d9b58274b3247f5ecf9ed5e9e1631546b9b35ca3bae7274baa30e7ed0ba5a77da4c25cef6a41b493deeb13eae00315e67c33710bb10a4afc14c6fb933f29d929f3fce4d6140625c99fd7a7e39fb4998d33c647290c16cbbf93cc30cf69e50e3e486138295812dc774e92621d85c91085412749f435c92e3b7ae8f80885793dfca4784ee984c107284cba53be3b4b9e4c89a14f98534939cc7cd6bb2a714f709ec26bd4763a61146126d60926795d9f78a4306a3c153e3861f2d1bd64a2e9b47eae18354876c4a881a94d98342e8778dfe85c367e68c254bab65dc1f47f2c158f8f4c9883e51ca7b43e3db4a3c1b628684c18744f12b191efc7250c9e44774a92c9f86e751f9630fa08bf687230a5c7a424083e2a614edf2ad7caca7be2a68449597a59768e7f4cc2a05a646ccc7f6fe8d887244c1ee72b2977531f5d7d44c2acaaf29d5292f67a64594af88084497c3749278f264abaa44718abead3b5726ece424798cd4c12f343670d1f8d30ae5f899f37f24b4e3f234cbae4d9ff24d729d9838b305ff63816aaab0f459884eaf6f43b49da51f747224cbb9556296a08112641a85767cfc14d5b3e8451ef74a553eaeebe9d214cb23f8fea5aa8f7a8b9e0a31006515238b94a9ef25a4e088349ea4acaf22427ffcb200c7263feccfc3a48f3431056acb016532d2ebaca5b651b55a256129e5a421f8130e5fc0893d493c94909204c2aa4e50a5d52fcffff60ceefb8e4d72927f7fd60dcd1aa51a972e90aea83d9ca441153f3694bc407e36d8cc82dbb8fddd983399da0d5f721e753470f66f3184a75f0bc33ea3c9804596e9f26cbddd378306ea751d254ce76baef60d271bf3f5c76ceb9dac1609724499227eac94eeb604c2bf15574797b9774307a0ead50729ed32dcec16841ccc5f0510e2659ff3d6798ceb7c6c15c52a8ae4f82850e0773fa19694af0de603cd9cc72f88ddc60ca253f4429b1b46d256d305c9c24da351b4c522ed1b3480f13ccb406d3872f35495091d6bf1acc49d42acb6e889e3d0d7d0c5db1653e68307bfcd4a94cfa0c06bfd8493a49cc60142dbbfe347d94c1289f22d779d40996a60f3218ebc37c56ae7ad165fa1843ca3f2d5d4e4e0cc6151da2bdc5cca31606f38921ea83ec3e1d3098b74d99a72476dc55e90be67db12e71ee52c78917929ee48512faf41f5d30a520272e983ccbe3ad097372a52d98929244b73e5d0be61f55db6de6dbf57f164cd5a62c282db9f38c1e0be676538f63f9158c9e2f4ab6cb3197a458c1546a73f35e42bbc35530a6c94149e14eb27b970aa6cbcf22dc4a0ed9760a06fdae32d15f5216510a06257cdd599d0916541f05b3e7a5aed6095ea27a2898cdc3e725259e50b1f404f369569e146e9ef3778239989a3e537e13cc7a69727f599fc9ce0493f0a827d67f9660325953847aff24a2a304b3a7cf719affafe349824992d2c7d11ae1626924183bd5dc74ef231884c576ebef146e172398d74c25ad69714ebb4530e830d204192b114c36f2e34b50f937150dc1206f317b74524a47454230f8f7c997ae24d9f6d047100c7abcf5dd0465ab1afa18c3dcb7dede26a9b82cf90082c944e5dc2711a54afff88149f6a4eca209aae7792f8c1d2b26a964e72a3abc30a738af16e7b30b938ee96e42ce3d4f5a1726dd784bf7613abe9d0bb3ade93ca6a39e580a2e0c97964fd413dfc26cc1730e257fd0d7515b983ce7795275d6c2b8651b6fd2c26cd208f5246c5e1c7316e6b024a5794911fae464613c7df36c9ef358186f4bbe9426a8f992392c1e69a5bec2ecb57b729c5cb254922bcc2643e8a4a6d30a73521b258dfe529b21569844d33a5d77afaafb2a0cca2aa8301532ac735518dd5b46092add27b55361302997c8ae98a8b4a0c26c39e59e49de1e4df614a63c41b3abf4c549595398e478ec13438538497a4a61125df5c7548af57d871406f9b1b6a45fb18eef8cc2285a595289ea88c2b83b5ac7c482dc3485c278e25ef06b0ff6c107857943e8b47b498c58d1274cea71c4e8de13a67191a14d9f3022f44e68e5774af2ce3961f214a71aaac47c75366194df72397915fe543461788f267992b24faa4a264cf2cee54b21b792cb9830f97b52c1ff7409b3976c97ad0b95626b09e3e51069a6cc4a184c4e51d3f7d2e81ca4842a3652abffeb4914b5fde43c89b5248ca23edc739da5d15647c264a293e8a8d8d5510209738ede67ea4c74f7e9112651f394883a315f7c47987212d524392f2fd537c214164ffd65c9d0d733c2202c9ba5143e6f7a5f84c975fc8292f357ff4711e66865fa7e4b1a0b9d4498dcfbd5a2bb07536a4418cc5b45e837efddfb10a6102643259376fd2e86307ffcbeb25249fcb314c2d8394d12fc654298dfdef4e4b09d3cb783309d9caf2a7c9c10a20ac21467ee925aa998495a336c1c331e21673049513522474f34d86c943319849801f116d4f64cba8494c19c4aacd075413c855369b0a5ce21840ce652cf17ead636c504c760946b933543b613438818cca74b8eca3b56e2ec9030182cc8df106acb3042c0609239e9e7f9b2c808910b215f309ca586b8242272c2e742bc603e13ddab9313843b4c2043868e1b2806215d30288f3aa6ecac3f5f5008179236162cc791bba2902dd4f9f6ec1e215a309624dfc4c2975c532ab4119205837f284199c917b3541c0bc6aad5b992d47d0553a8b0a62dce09e2e96205e36cc9dfdfa7d48d5df04648158aa3764a9dc9679a4c05834a992fefda15d3d190292c6b9b957129eb82dcc89f27651ff231bc0c9182b14bdaffa9925733275130079d6326fba8772b41c12c679de6ee7d15fa2798abbff37379a7a4162798841efda34f68966853134c92905f925c55aac43531c1943f4cc80e2ae34abe0493126d642518bfcd0433d1e37b3f9f04638925364f10124ca2a9f2b1207ae49e8e60aeaab26d8b53428c8c6010bd26778ea51cdb2982712b98094a9c6c280b114c71be6d4525e1f5726808e65c73f247b949934c42305ff8974ba20fc27ed5ef18e678d9aaa49660e517209865ec2e971cf5901f98b7ed64a8a69b18cf7b619a4f6263c2a4de3d1d5e982f2feeeebccd69d32e8ca53b435c90e271a1d685a9043373612ab184ccad6df9898d0ba3e5f0cf8aeabd26d7b730edd6f9099f7350cb6d61ce12eaaf2e2db5307b49e3abf99626ce420bf3b88b6afd549985e9f3c7ea4ace9e3e2f0bc377d61d9d262d7e251646354b92a68baa515158984f2c4b72ea14e472925f6174cbe964937e27fbc7ae30c98abe8ddb5b611e953b44a6b55589b2c27cca540edad35d85f92c5a78758779275715267d922c234e1ca173705361f2fc514e2b840a9349c136439f0ca5fb29cc39284fcf353f723ea630d9977c39e7e82679ba14e62074f59ae778feb192c2d425eec7c498144fa5a33089bed65261e67a7d519873386d35ea87c2a4d3275733b7947e0785b99309515ff98441f4cd858a3af1d2f684f1cc721495844952899d30969c24355aff52893961f40b212b9b2cbb9d6dc22449267d88565d53566ac21442b5985c33132631ba544eb61113c6ce2596aa54973774f012e69ca4a857769afa1db484414feae0fef9456d8c953066bc078ba54ed3b44809f399ac12d77bddd3c44918ce4576e9f86fa6622809735cfa9bfbf97533b94898744e82343f59fedc3f4898c29ebaffdd1c55fd1e611297dc6beee5aeb47384e15e4fbe70b95439bb4698fdee4f4a2a49a3d3758c30d5ac5a4a49f49a4bdd224c1f4c5a6df895c9c71461369d47ac9bf892265b224c6284d2224f10613cb976f6cfa25d8e8730dcecee996d9870728630c7adfe59492a99a0b24298f40515d479f5799810a6bcbc26e9094a8b361984d954cafe7a4f82f492204c1d3ea246a938761208b3ec7538d10f9aa7030883a5d68a5c93dc24e13f18c48fd65e121dcfda02f183e94bd492cde2ec433583478d5e1e80f461b77c27679384061b1f4aa79af6769666e92a6f82aeed536f41f660bef8b2a773a5207a3099f6ac6996d79204903c98b543373ee5f4745bcf063340f0704aaa72ce1aa783675e5a00720733437df41bfdda65ca4b01881d7a91abf332af34662bef9dfffe04611ba2930b5207d3e54979a2fa25a1b4e4338c870f40e860da3f35977288b3d8d13994b5ce3d55e6bd65e633ab332e2c4c6799e460b238a7d2446c89cb1e240ec64e52cd840e11a29b83c0c174425ff00aa144c71bcc9a9d153f3ea72f79206e30bc8b8cd4b9d829c90ad20693b2abf413c478a935d9604a2525dd66e11a6ef758cbb12997cd63cb241517af4afe206a307c28b18e7f397eecd40d726c40868c1be4d8b1230d66113222d6e4fb302b8902081a4c494a3141589e77f4cf600e3a7a126257c6fa93cc607efbfbe8a32148194caa73c36a2fd6e64b40c86032515d845675de13da3118ea6e615d46de3dd6bb64f5b4247d2bb7ab1483d98336bbf4cac1e2c35d04903018548ea32ceb645cfc0f0206830cddc1f65f3e445b902f983c76be9df3b0234d07f1822945b992445ff81cccd20593eed1294e3b8f55ea34d892936c980e102e5ca62956f7a2dda59aa925698ef4f82e59399203c816ccf924b1a4dcf149fe2404d182f93ef8b56569133baccb91e000c1dba84163035d5958d7e484ab66c9ff0d0bb59ca9d99d5c6ab90b17da15974cfe922be46ddae48ed36a238815346db5b513ab9fdd8478d1cfb60a26394b6a85561a9373ee0008158cf6b142dbff5357a84cc174ba174568e88048c118d2e44a56e2c675fa51d8ccbec2a6bd9968767ffd2929092596205030892f4278a98fa2c54c409e60ca91e2a14f496ade94803841b11013aff9aa51b730add40d91a1bee49207698249daf0d0222dd776508230c1f02987e7980b332a27c101821cfc493b6c642008204b30967a7cfc93c465c890214308204a3028e9f38917e3f554de20493058ae0f4ac51242eb7d204830a9b01c9fd33e204730d7f99c09723f2fa89a57408c60d2fd99ed7ab245438fd603070937005204530e2649fb17fda49604214295ab62d3523697abdd18dd41866016b3136ddae98e1c330a5a094084608a7d2ac9f0ecddfe211c67c78c3070d4c081e3e8e03183470ae3d38ce4a442548004c158265f3e495f84e7141bc330e3eaa7bf74b6919674831c36663c8e1ac99d8e1ca8c0011b08c8bc8b20f20993f09d92794a829e3069d8299524edbad127aa4827cc6349141f5dba2dda450a229c483e4b337fe522b209c38dcafebe5c5ad4cc434d9847bfca462b9992c27999782d29152a267af7c31d3d748860a2133fadd66891b1fee725ea24e5b72489ae191c442c61523e4267fa78b0249688215209a5c4c91099445be132c63aacb25b66ec645ccc932459129184794c465ba7f1bd249e9130ee785b6a881efd71ee410412e652a273c7295144914798e39d64dfe7a94fce2ee208935e350b27755af3d35620d20863097b794a2593126184e9ab83ba54a3a36eab34d86af02825105984f952186f1d3bd152caa61d3a4e11e63c3dd20425965b76c6e338ca02914498e2b67e4739570411e698a74d7a7f51b3beb186c821ac78ed416baa69131143980c9142184ea5a092bba550828ad260cb1d3d749c408410e9d4254a8e35498a2832081411c4d565a65ad153eead522281308ad0134098b3f36399b0fe0f9f4ae6e549a7b81f0c3a899d4cffc8ba9374fa701247e50aa926850f06534af6f9d7ca1e4c52b23cb1c45d2913b31e4cc28ca55a93e7d3a79b07a359988f56b952b1947830781a31272b99cf58f00ea8a96d1b71b283497bd62557d349e6bd3a18ec4a90f31d647430f5487395df2e7d199a83b1d2a5bb770a16dd7444e4603e79ebfc49de2c1207cdb6cc656b2beb5decb3d604f17226a2938ae1600a932dc73f95edc384de60d2cf279750cddd60f8f8eac1764ff6748e481b0c2a498208b310a5665444d8605ef91023ce654b98157b20b206c3982cf5b417ffa2c3c7915220a206938dcea1e470eaf4c5d704913498528eac5297eea3e512418379cfbef366897e0c11b1207206f3e7bf6c71298d98cdcd604a7b2a45d1fead0ab24819cc17774d66af2b47692f204206e6841f3b59a1640cc6f7a0deb44eca7e2a8988c1704ae5891c655541e784c1243e072b77d33d26cd6030afb87ed8ff225f306cc99b9b7d362d35f182f1bb6449113549e9b6bb604aa193feaec5225c30f88bcacc0b9ba59275b7053543678bef96b560eafcf639ace434a3a451240bc6d835f9ae6963155f112c98f392aca54ad21626b21682c8150caa25fac5d3a7a45eb782298c8f95f5779f566d8120520583be2862ff5fb9649a8850c154a7ff763b8be9039129186daf2ae85e7d638848c1143a985032c37341108982f1f43e27398957c9d4250205e3764af9a2673d61647e46107982e135f4575c4eb6ce122798540a3a7b09d7324ae8459a6018d1f956714449755b8409e65b2bb9ba8392946a576409e63449dc9c8a67ee51748188124c8290f58e964e56253d09a67855a162a8e79e2446822996a444bf13ac23a096c473fef7b007448c80ac96aa757ac5daba9415f25ec9d3b27e9b448a600cf78e353bb1f472132182417cd2ad761de49e884586601e31e1b6b7de2f762f0473d68bd5a95507c1641c0d44c6305c96d6594e0408e6b8ac3357f18bfcc060293fc686e9129eef905e984f34d11c2da35bfe0be185395f4fe894e19bf55bc82e0a225a166a59e912a20b93b45f628d34a1f5e6e6c27c5e29c8fa2b39744e12820b93c9497b5aacd7f4a413720b53c8491d5f4ab6e75d43882dcc26850c95b49fe81926b530975e963bc153e4654f0b93e41d357f64c7f1cf67715c279d67a993fa8310599824af3a49ac105a498ac5c29c4b5eaebb3d4b1542606194cf2c599f0b7945ba22a415a6dbb7eea02e7417086185f9e295ac8b65073bd53e10b20a8388ffe8d94c8ead89790e1b61cc50c596c2855cb05896ab635d3872ec4866702a0c22b663ff27d9717accc01084a0c2e0f5224557e5716ccce851c3860e1e653cfa14c6f0f578c2a7da8e275d1b620ad305e13d26c48da530c568ffb5f898fab691c278a2872795d3a88d6914e624a769e36fe29615c541586fa69c264648284c214f5adb37d5b5350a018539efb484ac132df9d6397ae000c10d423e61369ddb2e79901e42db219e1823a413288313b809f64a548b16008810a289c458b1dd3125a67d25241326031326e32e61ecec597212b1a4252cfbae345e5fc136cbca4d54088b9f06dbe120a412c6d84fd245359157d9434a187c84d64e32da9b84492cf1e36f76940d21923009937b15d3947c72cb3c2261d412456de4bbeb585e5f10020963f688dceeb62c69cfbb47982e2b9999d49fa4934cee1c61ec1ff19ec3f392dfe8ae1186bff9144f9ddac17e4698bc6664573f5c3059bd5b8429e74e29e331ba538451b663c96eb14f89267d9708b3579293b88e669d2d7c87087379057daad41c720893b7d8b7852a65d1ab358449aa2466a6cbc95936c72b84b9bdc365ece42384416a0839424815d35db941183b4d6664b572da52c11384d19386a8e974425db4f00261dc322f698400c294e3e77592e0fee70c1c3970cce05143adee04217ff04bb55bec9464cf0fa6930dd929587cbc93e4fa501c6972bf5fd2f0f86012da5bce52f6d932d587ecc124eccbe46ac3fd42881e0c62f2fa43dd7657cab20b217930e77026e2cc3cb5e2c283c14cc9a33c897ac81dcc4965fb8aea775b855908b183396647f44c539494fdd6c124cb86e87237a5b4c65608a183d9fa7a66a45bfcec979039986a94a7676c89a7dc24440ec6f33cfaf2d746aaf53842e2805b3459fdf2352d84c0c1a42e09faaf90375c881bcc579f9498afa54efcd8869341831036184d3cd194a89f4a3c863670ca87903598479a94a355124f4f9942d4608a4f4af6d139c19034984f7dcef324a5fbf84d03e13869470141081a8c16a7774e6afd1cac0a3d70902680238c1a3c0e10011e1310e386022210001e2999a100097c0101ac09944d00af2ee401212503598635800000c8814f20015ff4e021060a06008014c611230c1cc7c60102c063070248c0a3868e9300006ce10b007cf1c51702a8800234f0050f1e2e630001383dcecb2000004e8ff33976c830c0170260000272e8984103747af0983143015f00600106c0190700630a3a6e48c1006044016bf4b04183c799310301604021073ad0137a241e37d28d0280e104a35c52ea3f4a6b82614f3e417fed789924648249c776cd94fd8df7c98d7483178c25982cab9d9c092a1a6c39d0816ea41b7b23dd50309480357ad8a0c627016bf4f81c37c4983103016020c198ae16bce33ffe6f8506973331ce6ea41d336c50e3677cd2418db61e386a200f1c357ad8a82186cfd8916cd4d071230762308e80357aeca0c1c3c68c190800c308e6ff525ef921eb4a892a7988e180138cc0010609308ac0d77b5d148b75e15c2c9b784a308860d6bdf4b12c95e55402c610cc9e45dbef09e59554900c6008c17895258e129f6e92a4c7716c9c207d8e1294f4397024821104e35e66c9f4bb4e5bd605c01823bbfbb4e06131e56b43030308e60bd2e4bc1565b101c60fcc324aea4c2b2949f1a47b243568f0681e3a72cca80a8cf4c2a05aab3af8bd75a88959ef082fb8ca6e3223ee61b14accfe950ce1710d467661fe524b2a86c5142bd5882e0cdaf1eff63f589f58a2c1f6388e8ec31f8ce4c2a07bbf2f9432e1de8c341c23b830757d5ef59443442dbc8579648525d1ddf0be9fc7b1610bc329b12a494c30cbaeeac05a1835df3fcb2f577c2d62e848946cd068841626f95561d3e7e34489bfc30423b330e8a0da3d6a7b9a945368b0d5201d4a2c40c3882c4c9a9e1e2d2979c4c294c72a49eac4d584117304162649bc8af2203edd72a85e61708b6196e604d51546d35df9bbfbf5452eb863a415a620fea2e2694ffa63498d15c63c93224ca466fca939500d1b2928810c1966bb8a5585a642b7d7b20a56b12bb53b2d79c89bead022351a6c09c7b58e1ba80323a8305a4e35224c85a6a8dcc829cc7dd19328d3474c61b8125f43c52941c9b58f94c2242f0555965be9933c8730420a1c058ae242610ef9de19429a2a955d5074f1159fd915ea274ca5e4d4de1bb1a2e48883844355308230762412e0ed483d6ac060c4132671f92e09364a4e42460b8c74c2247a674f68b919f9493861ca71dd3454da74dbcb260c2bea63a9f956ed3d35610a192d3a9e3a13a6bddbcaf6922b99b83061ca723a4d1aed13c47a5a18b984f93c69b1f51454be545260c412a638c264239530afcea9a8373d1a5691214307239430a52df19716574a1d9021e3c68c94929149183deae849654189fe9ee888248c7957f23c9e2044a509859148543a67eb24b11b2390d02451b2b7e4ae998291478c38028fb770b7b57011bb4a2a4a97543b9ac148234cbd7a7a3127ffa8ab30c250e22df6a2c946166132a9aa5484a94a3bbe97141a49c415d36bd5eab5dcc2dd783e41c9f2b6252388404976ed667be24d872844542b996cc410e60be741c9af2f9f04b91026d3a32f99a02c9558b28430c68995c43ce7537b920661ba52aa640fffa4e2298230c5da4e4156300361fe7dd329ddaa114018534b6811267a7f30e59c53a7b5cfd1bad6113f68396a5efa805aa5e4aa226217eb2b4d3c1d4c900ba547747a8cf0c15482e83b39862a314e6c640f86d1e1498f5caf07933261f6c34feed5fc913c18fb4bae0dd17761fe64040f46b19cb36c27f9c81dcc722e7b3a6233dd53e3066260c40e8dd2a2c43f7d60a40edb8a923cdd59e5ce081d8c69c9f793786a27db19c1c81c8cabdb299b2585032372d064ea9c8bc91b188983712fb793b0b2bfa3d23c56042370f02cfe672f8dbc0100401871c3b54147d890236b30952e31ae53b53b7ae81851432998a6867cd855ab59ca3293ed7392449a687054309206a365cb1851428c92453d82067352ea4ad049f070aa62236738335c194cc60819cceef184d6b0f4188c26892849b7c5236230969c6222ea3afbd61e09c30818cc41b9083dbb7ee40b26438c112f98bfabb3fbe9f8e06232d20593c1059331b20593be1484b01cee112d9894a8a7aa732a25479547b2605c1344092a75d20b5ac40272afdd5e5a61c166e672dc7a8ba7e4d5e593072357307dd80ba6c4782356309f965568ffff90591aa98241d9896e56e8bd09f96662840a067962b157d2e3494a1e9982c957fcdea3e59a4bd1458c48c160d2ba5434efbd523d0ae638954f5e754a3aad0d05b3ebc6a965879f60126ecb94e67c4e7a197182f1bd2e7a585652a32e4d30fd5af59b5c71f2941c831126984a57d07f69eb74707509c716f532c788124c95bd2dcfc59732fd26c1202b98b87fffaf2cc24d469060104f6e712fea82c9d1114c314359aadf258d18c120bcd2747d68496a74468a604af357399560619fda112294cbd52a45d5ab2cb57bc62d181982f174d0b1f7a0d527eb4230a5eae7fdbcd95b4a07c114cd2a9e28ff1926a4236318cd2dc88ab858927852882340307a76bbd6ab10477e60b02a534ab8fbd58d13b117a68c4fa3e5b922f2c2249ed826c9efe3c1c46a1786ffe07f314b184574611af5b515bde74e9c3f05915c98ee73e89ff5cbd5a9435c1844b96a98681ec5a46f614e4a522949f1a3091e7d5b98e3983c3a9a7db5306fc7f1baf3ea86082dee18d555aa4df65325320b59a0402416b0c057f4107185417fd0aa95fbd20a4cde82688553970df14ecb922cbd5c7dcab3c25c7b77722a3badc23c63d9f3c9792b7ebd24a20a835cd549ff1f74a714a6c2a0a4cb2b39bed99612174185e1322c7b124dfd7f7da73096ec736df21626c913408898c214badfebfd52097272a5308d099d53714452184d4ac274aef551985297f8b8919e53df2343062212444461d222526b67f3b4c41b3114e6137f39cefc642f538a80c26c826f45d323c38851a8546e66326924108902028148140cc3a7970900c3130800103c208cc582b1581ceba2f801140002562a20342e2222281e14101c1c1a1044c270280c088302a12020100686838150482c95785a0f8586c3a807e85baabb031791c3d33dd556759415c0a112f08bc4ee86139a0ead8e45e228629037dd3b9c8bcbf8cd2ce2dc6697badbc7840730a46989778ee93ffa5913aa1601eea58a88bf8dbbaec85a7483d00e43efeb2ca3c790fe4bf209ec308647a676e55b134bfc9fb4f0330e38c4e4f27fd88c5249d23529965c61bce594509f253d84be6a3b39929a56334f1ff59f61a84671cd5abe64c6883a3818f0ad36fa348bfdf3cfa93d90f312b9ab3a5a2911a0ae58bc1b1e3253a0d3d9fa1ef0afeb7aec75d05bde4a35e9a23e283808b3a0ec11660649a4e386a1582d438f2223e563c6125c7fdc829cb1f13009a65e109996490e40e86123c5db683023d928abbca3f839374b66c2761f87ca63f4047eb8e2951d525649c4d7956bf95609d0215db13ae1972010b012bcf7e456040cb22c1a5802c116133318a1b1fa282eaa37e14828bfc112e4b5aea956c54369f48b20caece51aa95489291ca3d5c0674d10b05a8e681531a95732bb0c3370e06d13b1cc4bdafdc3c727bb16b7088380877f3727eb8f23bdb07e575e21c10673b2b0e63194e04739d46573c6e903cf8a1c85d0434a760138a8cece18ce111e9affc868908f44763861ba757681a115df8e246dc6d1e22be3e4c137dc42d5ebabcce0f4a4f5078daacd97962fe7fbca9bb40b07d1cda5d1e049c45ede48f404777ea0b6420ccd712c71d3addfe0af4df588468c11494a8b5f29b4825a9362e27ea5fdb14f00a117b1d82276ff0be8961c4d5778fe73508e1113831efe7a08415d91f8a80cab6ee1d7c0219354fc17b002c27b8ae077f3d8fc0a9e18b9e3f3e56e07a02f1888a59dcf282cc4b45ed14f9b7a18a760226e6aa73a0d3b4dfcd586c560b3f1577112234f489dfa2afe2f4211b73d04f9c1d683e17817178d92e4fe9d2f5499d86205061b3871ed8a1201c8f21560a0dcd16091eff99e74b4fa6a4fd06e4e8f165ecb6a362c690ce12e4d414017ffaf03e3b62b57c543eac2acd22a2c2afa82ac981ce9786b43bb599ac8efc85e358f7d6db553f2d4eb84ebcc63a9dd9593c83209126c63b6302b07498c4cacdf335627fb5a0eeac5fe9108c97a082c8fa2dacfb1447938654b16b10dd1e8e8305fd9230ffd73c156b76eddb98f4af443908c86bd39f3491ff3914d3cc682626f0c4b3605067be8aee7b69628aa661334281f11d4275c3bb19abbbeb9eeb098431c7933028a5be3003309f7f629714cd3ce25492bc75929fa9e65c8532df2346a211e18cee714a0594335251d715ea4993a8fd2f5563c0b7628a5f8662d75841840d36d1e55e4ec2b3bf734a469dc999cf3da1f65dd12ea3733d9c5210521772854c5cdececdda59ebed2aabbd1d48dbab51ffde45c59baa7b822c494624f949ca291bda8c17f41572aee45a70e619e74d0af7fa402d7f032f7f8a284acad046f4999dc11a5fbb7e7fc8bc2aa905d4a35f0963fd049c0427251ba1b4d910548e274c8da88460aaabb3a8a7bc4e12e65299d51293368298c1014ef42b55a9eb9d54bf90269a9c74b1cc50de8bc028884dc03c4d1a0013b6af68e82bac1b3bccdeed452b4d5f7641d0d7e7e0503f2bd84feedba7680c06ce3d5ac33dcb6220d818f60bddb148ce512fe600e326c19111afc2aea374d1a7fb73e46e846066f928a770ca173db7fc5232508c35b5834daa6dbe686a1f6c5659b0d725c8069f8687699a8aef64f4b0dd55d8a750634b9f34c86db3bc2145dac51fea1ab890b97c14a5aa848261e71d61d101382888dab7677857b6be6899d00d9cf455aafa7e615ff6d6ac5623bbb362bee2dced200b0a8b7b85180d7b1fb5c16f45ef937c99c595719db54223da88f1e11b90cb262754c533067821320235560cf3dd85a508ec46bd95a68625196accfece1c2ec954c929eb3aaf73a5f135219dd5e73ab6f08989f1d0fad8bc7d1c350bce3de1db856e7de1005a355ce7b2bf76bb1c1585abadc8ffbcb3ecae760c7eddf8056912ebc5dcbe3579b55a97101906d80e85e9b1f6241260084c1d2b09fc4b37e1ddcbdbb87b8868c9f10eb5d017abb14ac4edeb7844946ac8f22169495a2ebfa20887b040e9476a0b6802614ceff7e05108592ca4ff88c74f6540032fd379ae4e88e859bdd9ca40aa8551e2cc08aa2f3afd9ddd5d604231d6e6088c2206e3c57897960c145fe005e16c26d533898c19eeafda32a35251d6f19c867edcb6769c1e25d0142127011d5a164ec89cb4f787667677c24d57c433bcb9bee73f7580af93da639c64b25fd50a7bb5827e4acd8bd054d8b192b9110b8814a738ae75655009cb8a1fb26c6ca29089b961c82e2e46aad7e90d8e6fb32b50946d01d31ec42f86fc703b85351331efd157c7a55586dd894afc3c985cf00e771f526c335596ec353b5cfbad3460850c580d9aca1d1526677e7c61b8a8e94d7306d4b33e637dba6fbb9f2f0ba511ae822bb76060b13239fe3a677978581e5a79a285c1dcabfeb5c7682e270d81e84b6140a8729361be7cb969f38c0e51031adf527f72e25a505cd6859e4841707504003022804732bdc8ed0a4eb4dead56a38c8390d5688aaf1196872c03a0cb8597fb5599cf5531645851dcc3e1f53abeb61d88feb9e6ed641e7751b5ffcaed4a5490b240144ee2197640428a46ecee57f0ecc2790c342e49fe31136eef55d6fa86b467dff152b0017a2a181850deeb6947210ec04252cb68596d1c5a0f052ec02ce1054517c936f9da72b8ff288094f5afa7644dce8625b346e1ad009d20cd00f61283340112aa0e6411d7d16eaf6ebbbbc9160dc6697a3ddbfa968cb5e46f19b3e10d88059bb48ae2268d7e9a6e38eef967a8413158b937a0c7970648b7e7055764337b3bbcc2e34606077ac271f802f1ab7d3dcfde5db4ecc2c630a03dfef539106606a44fc6a3d9669912c051d0735d27a153d5f5bb896508b063b3dbb519f4c490a4f3b7a455d8db91ce3770c32acfae212ab00fec432c871bdd018a514b397df3a25f1c569103971d0321173e58b1533aa909e4afa4e4d9917e45245d6cb15e373573392e764f9c4080193825595abaae235679b48c4c43620a30c009bc08f6eff52c29a00c996f05d8398fe68a026d1b0303d98e443601e5ee2bbe246b7003ab6ece6a46faac363818dab69002b2e2945dab3d8687dd2f5dabda10a0e5448f3932c98e232371278e8c38d575509b2e65e28e6a2aa1565ac4d99b3f179bbd681eed7f14169354f39f5a15e7e3d6152179eb236de8911e63afa038ace68f75857e40ee72397e96ddf644a28e9927a6eec6373dd02d62a9ba5a756b9820bc1735ca1143b4d1921283a6e20064698f83aabcbadc2112796365ccc954add869cc8fa5283375678370283b07ce84d3a0d09717250e0310d225857583acd9cd6a476ee998ab1c34cab614f3e16a692be27600970c5b8e21768d3e5c52f213e00090b3e636cad431bc775772bc5f6a3fac0c38474a63934d65245d4a6aaec702bdbf521c3a8349732acdd745db8d39175b169ae2e3b8630ee0a89d50d8620d615900950039eae17a02b2082f102127e11c75805c917ff13973e384b949d0f6f6c0d1d293884bd3987c693a6d791639df770afc81a26317f99c15758db7c4e6c66b928916f0460eefd1f969806531c8582c621d8d0505c1e1c3db56f5b108e2085ab5c2a7bd8620c599f526bd0cef6326016f6b459ed857725766819b63b416170671716a568de5ed9c55361107fedea58e38fbaa6fb706938b4dd9b393c961857b548c72792b42edf5d5320d5c6e294bcdf9f973bdfb23509f98d7bce6e8cc8a78a74f7f03002ba31ea732b05567cb10fd64649682680e9ab8950de8a83aa9acd433c408feb921ca8065237977ce348887c4586520fbec6bf0669d42c36c133e9d779771d4b757a507e8934471694da9e6079ae5122b49b62b4f99b85b187a9565ed61e4efe0efe269dceb3d7548168ba333cedc502edf6700454efdd4d2ef013ef61f5d8820ed31df5aed57b08f815c8ca8713b12747867e0b35e367647d09a8abf897ff1c39003a63138ca332e719d8653bfa19ae460ba035bd74628a1e32c362f85b4bcd2e7b1294aa0f55a3b86c469269b9766007e6537af0589cc4299e985c14ed45e8aa81884b9843063d0ea0e369adfaba7bf10cb0792add8ca09a4c0f80fa774ba3df68489970dc437471d68022c14a64ca4f5f1b9b7d0c8a3e82d360936b3f754b4b3dcd3f46754615b956f5e510e31067ae0ac17ea6cf87e6c1a02e83259acd7945dad46dd66234ee3e51958876ed747e5ae0b65aa3212ac83debac0b0180fb754bc4693db84e8149b8170e09104822b6d4cd676ebc4190185ab66f95feb41e86c810b0f45aa9db58cc978041e9d6cd54e86a0d43ffbf3f227642f9ee53e7b23402b158e74dd97a94c62960e084975c3a3e1059f4c4c15f5b82b19b9daeb2e3d58ab74c0949cac69b2a525453e7141c288669a3e34dcb84d0245c5595b79e7a9970c128495f34a709dbe312b0989890c79243106d0b68c0fd3ee55fb26f4319cda16db83b79da1c324e96249c6f0813279fa0967167ff08e3434cff3a90299440b9d4b68e88498864af5246ede3c1c7894081618bc609ebada9d1f374e20f2d0d418526d1cf6a974257f72b79717ca98c520367b068fa42d99698e1a3e128764dd848b19e396d9f5c3c4da8dc17c7416905b4f3e1746a07624e644eb48bd18cbbd9233e5397714ded57afb19ea9f351e9a7a6651a9329d49f2c109ed0c479412db83758e0d0ce1f3196cf09b4ff4c2ba23c28fdc2a4c532f49d160bc01348d23aa812986f441a94e4be16c7ffb23af809f55e4ceaf466ba0695387a720cfe09fe365e219f0926d3216ef749a45c089aa67e15054aed69ae4a271069b93c24ddeb58836c37c5fbdb3c560632baf2f7d4c11d3246c1c002c2070531640d48b82a38401ee48ad6db5547d9990ef28d70458a57857e5c0713640ff8af85697da9560c001b019d3985239a1ab3491094dadf55892fd95392f42415eb03f5c1ab217529af9adf032d1cf4c830ead491411d48c6f9dc13433d02385a7d019660392721822d5462c28e080d6a3c43e11971462dd42172fdd1ad05e311dffd56d2e268f41e01ce3673fdd481700c9b5d878cfac0b6a810c12bcc63f8112b421a0d712b4fc2a2a709ca865f72049212ce3cd0d8aba5b51ff277bc2fe071486e949f9af0d8ad78dcc47a5593c760b726fbcad2dc48e6a895cfa9acf65e5354417851425c6cc9fb39b677a084338490356c813358b084d656fdcd13bc60c55eecdbc10d28947df0e1b4b21edb38f43da42a1c75ee7b919686e770174cc1630e56f51e77f394a0e79103452e79196a0a72fa5106a46a394e2294d62f6fab207951754b161f2dbbba354137a6c3ece3699c9151c5def5519fe9b500bb5ff367d8162e48245b864f2a8f994e4ca4586e8436f673c0b4f14d13236ea7879d28ff291b2441ee319bd20dcc315931c66b5d205a03875a037f17bd132c09cca4cc8f5291c7feab2d7bb0d7cd55de46551cc305da5696720f5a8861f31049d557f87bedc6e2157e2022955e40dd6ac094c28956be2e96dfdbd887a3dc134cbe442eae0d64bef8f3c51b2533cd909f2a72c330e99bfdaa05fc61bac4ad93257ac63be82317499f1f92106a80353226f0a8e235e1d6894b132dd64132e04bbdcc42aa8bf2c16883d3218dd7b452c5ca217da4d9212a74a16293f357c731c67ea9d209be9fe4a6a1bb1d26022e19dd20865978e84cddf06dd5f899341af6ce3f9f1dee6bf62d5103eeb63080593b53beda629a62a65145428688b4c5d021dadc9bd6983f6da4a620b0aa6c1ffd5fe395183b4cff2f2f62c20a2e70de3b74a985152698d29a53719b0597c9888da9b5d7f4a0ec4692cb0b2e422ce4d3d43ac8c8da107d5e0194bee7826b77e69db2b517ae4e2983739b14b9c83ce090b3628a5fa7a04e2931f678383bd4a384cdc1eac32e5144c4523708c34d86ca415de48203259fa996566b8c8cb17f2b9667e0d4cd3b09b722d8256f53bd09392ca027eda7251672c4446f5dd4455c6fd13d7672662549e58d16193ba8f3963e1eb8565a51850932ef7d35afa96216510aaa9b323b8ce660764b953f022435f2484694462c342109b2276de449dea44a86e4a42859ede24295e4ef1b64dec96b2a3d916632159cdb4d692e67f9fa7d5a44b3ac9a948b1467752dbf96a452149ada5709e5a91b8c9780b2c687231098d5775608a482704a81dc9d3ab33c3ba7d4f2ac8c272f9b061e039e2397067586553f2bd5a4aada73867571752e197303615e7ed9d1ceb84c7e020890d5ea608d9c77b27513a3af150cf8fbece7de497a91ed57eb945e171e0cb3851bcd48c46d391a8de44dd32099a01ef30481d7823b89aae4f71654e0e521a9c6b544bc5e7778fc04bde8957c594e9da279208f7121183be842dab376e3870e4a599b433936bcc6484058cd75074541e78937983af9b5685f6e4f1ae01916188bdd1beed6eace4a3f6320a7c2b6eb7f9f3562113098ad469cd3a8ae5f878831f6b15a80f245aecb83110f7159eb722285c298fb84563980061b8e83131737a8613112ec5032c0a6a32e5adfae4a3343f2de4073b3d2552337ff7785720f80dfe0eee64b3ba8f3a1f25918b947054ea687f56a257b38247c3d74f0d7d9a912e8d214361776ee9e5e8e5528b14566cc311ca210b263bf56848c888fbbf0a0faae0e678a3c141e29c16f2adaf39b9c2fce5dfc431e58fa01200043062fb75c7d01b9226d335ca340954789b15aeaa820dabf980a6471b71eecf5461395eaf721fa26eae08d7efc328b05af10492a7795a399ac6166d32290e792537c711e0dbb0e7eef70f6c6d4a382ed927c671bb9df750848a09e7a0938c5898c9ba0a9c5086cf5484c28b1159683d4478324dd38febe3ce663d5d27ec2d5adc0643812887a5a352f4af0dc326edc90ea6da116ce1613893bfd39a9beee256b7f8d1f768642917c88e64c876cb8b3da52397c7598fe5879be8f1b1d854b937dd57b53cd50784abb307203679a1fb8e9122b6811035a8355849165fc5a99b6ba836d2566ce64d251a63ae37ec3afbd775fa5fe0f4569e4445092b17e7ec5652ea56367547b2afa8c0c394cbf97d94c7698f9524a2ff1c3face632d3318d5e57c964f8815cfef69cf435731a0b4af432e80429afd8d74022aac4b3f1076efb2a1f166f68a0addcb2840f550bec34e8de083acf292ee58314ca5b583997899d3ccc9eb56305df1999dd365aa0a07b617a547ce8fc78b12eadcb54815ef9acde66b44e3baf51ae47f055ef03eddd79f1ad849781f7603aa41ed08392fe28ca729e847886b299b539327eb0c537f08ec2e4a4be6d43b8d5dd51ffb3d0c6bf121ec8537e650408db5ec0b083ba9838591705dea8808cf714f88c4378b512c0046227005a93a1ae2912b120ce73fb6ed3f4434791ede482b4bd2a2510c70fae0966d9191bf30a165b613e0f9cc3dfd0b6c371a5321afec605709c57fe078c646969a9b3ff1b7f2e4bbaabbdcbf0fa9513e8347a6dd121b6113e3fdd1a269939798e7ac6ee202b1cad94c309cdbca202444e4ab90023948d9c74182db3d787d1899780a09f66cac6bdf502698f87dbd9d9f0c0836d61bef5d9a7c891b326607eb4003aae38630c06c453698cced27ef43bc010269ae7d8856d23b21f730fe5a5b5b5e595d35864c3bb46d4f920b64f4acbcfeb8d17d4bef32b5a662e31cd94fc83989e2bcbfeaf399399137fd7f9b3dabd6a1ec6a1e5185297676482bf946a793d5699ea552728d75fa86763ab4768a9d72e98bfc9c225f2ff4bca5ecd4476850a17fd3eadc4eed2113c0e30e7d20270c39e60b1bc61fe3329448ab095312e507d48b3283cfad8d4e2674651cecc2a33cf55df901908932763d6ab2b5fa62e3008da67630f1842d8e3bdeee362c772b7cd2cbaf4bbdb9307d38a3d1c39d96289140d26321ce76711cbd7068f3feb8f9c652d86c205f7b0fd17778cde980a2bd3baaad6120e04be9e45bb2fbcb3d88fb08ca68975a8b5242784b4ac5059f57cd9551aa7393e934dec7137fc2ced32976ce9cd26b79306fc1f99dcf199628ec0045d883e5c7abb292d18723f922bdb55bc6148bfae8dca08ec6f47b5fcfae29290072f44d53d6f0fdb8076d8aa18d16bbf75436cf389946276c120fd259c0fb7f1579daeaa32c7a8a5d01d90a1af5ce547a59f2d8d1ba61836d155e4d94ee192583bcb2a1741779318fc2ed3b6ff326e565d899c62231334015b22b07f77114e8de0aba74e7fc8cc2b0d02c2db378e4cee1da8789741591e9d007898f37f12465127536f23edc8bc420f2e37920ef0e2ed2125c3e447f4c38a5f4e0cada336c6a10db5871e8cee62c0289e40204915d91f83618b459627e7ad36e10c52b569cfaa49ed2f33c9727e1ec9d6d33a6604295f54160d1a58eabe2e93fbbb9485cc3481e9f90669601f03cf09ca0e7f7949e475b4454b77772d27391f2d6f80b7a2b9b524f422686517932d42f5337292de72775964fcff37342cfc8f379098edc2d3f5b61f4ca0f2ba1763ccfc3797e376bfa01 \ No newline at end of file -- GitLab From e3242d2c1e2018395c218357046cc88caaed78f3 Mon Sep 17 00:00:00 2001 From: Julian Eager Date: Fri, 24 Nov 2023 18:32:43 +0800 Subject: [PATCH 054/102] Adapt test worker to profile flag (#2450) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit closes #2194 cc @mrcnski --------- Co-authored-by: Bastian Köcher --- .../benches/host_prepare_rococo_runtime.rs | 2 +- polkadot/node/core/pvf/build.rs | 21 +++++++++++++++++++ polkadot/node/core/pvf/src/testing.rs | 11 +++++----- polkadot/node/core/pvf/tests/it/main.rs | 2 +- .../node/core/pvf/tests/it/worker_common.rs | 6 +++--- 5 files changed, 32 insertions(+), 10 deletions(-) create mode 100644 polkadot/node/core/pvf/build.rs diff --git a/polkadot/node/core/pvf/benches/host_prepare_rococo_runtime.rs b/polkadot/node/core/pvf/benches/host_prepare_rococo_runtime.rs index f2551b701c2..e625a2303b5 100644 --- a/polkadot/node/core/pvf/benches/host_prepare_rococo_runtime.rs +++ b/polkadot/node/core/pvf/benches/host_prepare_rococo_runtime.rs @@ -36,7 +36,7 @@ impl TestHost { where F: FnOnce(&mut Config), { - let (prepare_worker_path, execute_worker_path) = testing::build_workers_and_get_paths(true); + let (prepare_worker_path, execute_worker_path) = testing::build_workers_and_get_paths(); let cache_dir = tempfile::tempdir().unwrap(); let mut config = Config::new( diff --git a/polkadot/node/core/pvf/build.rs b/polkadot/node/core/pvf/build.rs new file mode 100644 index 00000000000..e01cc6deecc --- /dev/null +++ b/polkadot/node/core/pvf/build.rs @@ -0,0 +1,21 @@ +// Copyright (C) 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 . + +fn main() { + if let Ok(profile) = std::env::var("PROFILE") { + println!(r#"cargo:rustc-cfg=build_type="{}""#, profile); + } +} diff --git a/polkadot/node/core/pvf/src/testing.rs b/polkadot/node/core/pvf/src/testing.rs index 400b65bfe7d..c7c885c4342 100644 --- a/polkadot/node/core/pvf/src/testing.rs +++ b/polkadot/node/core/pvf/src/testing.rs @@ -59,21 +59,22 @@ pub fn validate_candidate( /// /// NOTE: This should only be called in dev code (tests, benchmarks) as it relies on the relative /// paths of the built workers. -pub fn build_workers_and_get_paths(is_bench: bool) -> (PathBuf, PathBuf) { +pub fn build_workers_and_get_paths() -> (PathBuf, PathBuf) { // Only needs to be called once for the current process. static WORKER_PATHS: OnceLock> = OnceLock::new(); - fn build_workers(is_bench: bool) { + fn build_workers() { let mut build_args = vec![ "build", "--package=polkadot", "--bin=polkadot-prepare-worker", "--bin=polkadot-execute-worker", ]; - if is_bench { - // Benches require --release. Regular tests are debug (no flag needed). + + if cfg!(build_type = "release") { build_args.push("--release"); } + let mut cargo = std::process::Command::new("cargo"); let cmd = cargo // wasm runtime not needed @@ -117,7 +118,7 @@ pub fn build_workers_and_get_paths(is_bench: bool) -> (PathBuf, PathBuf) { } } - build_workers(is_bench); + build_workers(); Mutex::new((prepare_worker_path, execute_worker_path)) }); diff --git a/polkadot/node/core/pvf/tests/it/main.rs b/polkadot/node/core/pvf/tests/it/main.rs index b53d598cd0f..bd6b04182fd 100644 --- a/polkadot/node/core/pvf/tests/it/main.rs +++ b/polkadot/node/core/pvf/tests/it/main.rs @@ -52,7 +52,7 @@ impl TestHost { where F: FnOnce(&mut Config), { - let (prepare_worker_path, execute_worker_path) = build_workers_and_get_paths(false); + let (prepare_worker_path, execute_worker_path) = build_workers_and_get_paths(); let cache_dir = tempfile::tempdir().unwrap(); let mut config = Config::new( diff --git a/polkadot/node/core/pvf/tests/it/worker_common.rs b/polkadot/node/core/pvf/tests/it/worker_common.rs index 0d33af7e096..4b736b08ba6 100644 --- a/polkadot/node/core/pvf/tests/it/worker_common.rs +++ b/polkadot/node/core/pvf/tests/it/worker_common.rs @@ -23,7 +23,7 @@ use std::{env, time::Duration}; // Test spawning a program that immediately exits with a failure code. #[tokio::test] async fn spawn_immediate_exit() { - let (prepare_worker_path, _) = build_workers_and_get_paths(false); + let (prepare_worker_path, _) = build_workers_and_get_paths(); // There's no explicit `exit` subcommand in the worker; it will panic on an unknown // subcommand anyway @@ -41,7 +41,7 @@ async fn spawn_immediate_exit() { #[tokio::test] async fn spawn_timeout() { - let (_, execute_worker_path) = build_workers_and_get_paths(false); + let (_, execute_worker_path) = build_workers_and_get_paths(); let result = spawn_with_program_path( "integration-test", @@ -57,7 +57,7 @@ async fn spawn_timeout() { #[tokio::test] async fn should_connect() { - let (prepare_worker_path, _) = build_workers_and_get_paths(false); + let (prepare_worker_path, _) = build_workers_and_get_paths(); let _ = spawn_with_program_path( "integration-test", -- GitLab From f1aca09881237511ad6cb34df5175cca9626e52c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=B3nal=20Murray?= Date: Fri, 24 Nov 2023 10:27:38 +0000 Subject: [PATCH 055/102] Add coretime-rococo live chainspec --- .../chain-specs/coretime-rococo.json | 37 ++++++++++--------- .../scripts/create_coretime_rococo_spec.sh | 11 +++--- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/cumulus/parachains/chain-specs/coretime-rococo.json b/cumulus/parachains/chain-specs/coretime-rococo.json index 587be650629..88fd0ef8c96 100644 --- a/cumulus/parachains/chain-specs/coretime-rococo.json +++ b/cumulus/parachains/chain-specs/coretime-rococo.json @@ -1,9 +1,10 @@ { - "name": "Rococo Coretime Development", - "id": "coretime-rococo-dev", - "chainType": "Development", + "name": "Rococo Coretime", + "id": "coretime-rococo", + "chainType": "Live", "bootNodes": [ - "/ip4/127.0.0.1/tcp/30333/p2p/12D3KooWDihfWvwW2vU25LWVmTFYrRWodSdSgo5rB7m3k81vedtt" + "/dns/rococo-coretime-collator-node-0.polkadot.io/tcp/30333/p2p/12D3KooWHBUH9wGBx1Yq1ZePov9VL3AzxRPv5DTR4KadiCU6VKxy", + "/dns/rococo-coretime-collator-node-1.polkadot.io/tcp/30333/p2p/12D3KooWB3SKxdj6kpwTkdMnHJi6YmadojCzmEqFkeFJjxN812XX" ], "telemetryEndpoints": null, "protocolId": null, @@ -12,7 +13,7 @@ "tokenDecimals": 12, "tokenSymbol": "ROC" }, - "relay_chain": "rococo-dev", + "relay_chain": "rococo", "para_id": 1005, "codeSubstitutes": {}, "genesis": { @@ -22,7 +23,7 @@ "0x0d715f2646c8f85767b5d2764bb278264e7b9012096b41c4eb3aaf947f6ea429": "0x0000", "0x15464cac3378d46f113cd5b7a4d71c84476f594316a7dfe49c1f352d95abdaf1": "0x00000000", "0x15464cac3378d46f113cd5b7a4d71c844e7b9012096b41c4eb3aaf947f6ea429": "0x0100", - "0x15464cac3378d46f113cd5b7a4d71c845579297f4dfb9609e7e4c2ebab9ce40a": "0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0x15464cac3378d46f113cd5b7a4d71c845579297f4dfb9609e7e4c2ebab9ce40a": "0x0802f40601439cb3765ef8e2a0a5770a78fdda8ea3675f0d4262ceac46fe9b8a38b25ca9a71a8570a05814e75eee9eab0757d2c98e91b24c1fa2e3eb75f7b26d4b", "0x15464cac3378d46f113cd5b7a4d71c84579f5a43435b04a98d64da0cefe18505": "0x50cd2d03000000000000000000000000", "0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96": "0x000000000000", "0x26aa394eea5630e07c48ae0c9558cef74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", @@ -30,33 +31,33 @@ "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", "0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da932a5935f6edc617ae178fef9eb1e211fbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x000000000000000001000000000000000050cd2d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da94f9aea1afa791265fae359272badc1cf8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48": "0x000000000000000001000000000000000050cd2d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da96f2e33376834a63c86a195bcf685aebbfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0x000000000000000001000000000000000050cd2d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9de1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0x000000000100000001000000000000000050cd2d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9bb2c1ae8590211c475b041d595d99230b25ca9a71a8570a05814e75eee9eab0757d2c98e91b24c1fa2e3eb75f7b26d4b": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9d440d8395438d7269bad990f83715c2002f40601439cb3765ef8e2a0a5770a78fdda8ea3675f0d4262ceac46fe9b8a38": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x59933c636f726574696d652d726f636f636f", "0x3a63": "0x", - "0x3a636f6465": "0x52bc537646db8e0528b52ffd00585436042ea60580125010284e271daf9b00245216909da40993fe8e859b1148e45cb8729243aa1823da08d0d96910fa75d49c70180540e8ee08a87d2f3dac77eac03c73195e4b93bb35754ddfd3da2664efbdf7de5b4a99640a4413f1101011d23f094e79b98eb594e2761ac16f216037f105a2e6f26122cfaca8799e5991fdb8e3db07f03cab42e73b2472f4ed47603b71de2eb693e6ed451d12e134cd3f09caff64a8f9a7d929294584b68b3a94f89acb5001fc9a734884db35822feb1d635f39ce9f266747fa23f5a9f99b7348a4fa537f1f87f38eb09fced9d19f73cd8edc2e129ef391db358af09c8f9a73bbc6109ef3a739ed76a5603f5db3fc9c1d959efa27c1cdf26b969fc323f467b552f3a753cbed9297b64bfa26a70b5fd769b56f2b5fda31042ffd63d9bd1a47f0725ae91c42d597f4dbf2c75a22f978ea0d08449e55593381287f747d7b3fcfaa9479573bb5ffe0106a8b181808ff5383ed144466f9d887c82e9d3b3bcc739e999d7bf065e21b7cec244a67e7eee376922c9ffd63713bf1b3733bb58fdc7f32096a8b330c84ff931c4eead3a5cf9088bc2c87a0b468d32efef669b95dd3bf094a2bbfc3760ee9e5763d35874468bba6cb9001b1efa796667cfcdd2ebb2fc7a484fad8b907db51940e4a19644e9752ca9efed4724eef39e7943e65b773dfb765a49d7a4b28e97dc7f6d9523af1718fd1bffd630cc48f2f10b95d5386454890c964547eb6d37476da4e926b57fb534f0bb6ab7d00e258f4edd2a98fdcb77f47edc4dffe49b0a89dda8fda497ebb523b4d6fe790c8f4a77e6a6aa5ecf82831eea5732f6fcb8874ead2e99d923f2f9577942ffda97b4ac9c4c7cf3d46f1db3fae9dc6241e6144e923f81d44947e443a9379a9b4fdb397a2855f83cc43a48fd3b9761ae54f67ffa6ad409ccece2107b45decf372ed627feaaf4169e983805e6a7b2944e08a874091b297dae0a5682fbd9dc543a048d94b6df0d2dbbf094a3b3fe42150a4eca5367829da4b6f07790814c9e7a5802fbd7dc543a048d94b6df0d2db393c4265b297fed4328412652f1d6c27fe760ea1a4eca53ff5533ff553b3e576b1738fbe4cc4671eb196adc5f7310f4169a1a65dfcdc2e760e89d076b13f352b7ddc1ff7c75322cfa868f991fbea623bf18c8a96afceb513cfa8c8be3ad84ef2ab730be1d758f4d53f16f718fdab733b511fc167e7da693a3bb7937476da4eedec623bf1b37308d53ecaa7ce2114f5f6a7e61ef532f1671e312925958f650e22cfd4f47929fbe91fcb1c449ea9e9f352f6d33f163bf718a5ecdb3fb6f20491093bff28653fb2b7f7f34c4d122f5f7a8746a4ece71da5ecd93f0e8f884f7d5a29f4e99592553f9ded187b76e62123f51694f7f44ab17eba900ff22357fdc8defe34d9f24fcb0c84fd93205b7982c8849d7f94b21fd9dbfb79a62689972fbd432352f6f38e52f6ec1f8747c4a73ead14faf44ac9aa9fce768c3d3bf390917a0bca7b7aa5583f9df17c901fb9ea47f6f6a7c9967f5a6620ec5f836c2512a274f9cc16b0cb50ca7f3a8752e2cfabd42ee94ffdd44ffdd44fcd96dbc5ce3dfa3291b2671eb1291bcf27eb88d2b95dec0c7e2c4494cecedd3543c24123f37864e141e5be71afb87bae16178a6be7e6b9565c2cee13568c2bc5cde24671ebdc3577888b83a760a7b8586c1996900564d3b071ec10568d3dc3a261035935ac0c760d6b854d63abb07aec1d6b84a5c10a619bb0782c15560b9bc7bdb048d824ec12566699b072ec1cafb24a78204b8625c2866163b033d81f6c0df605cbc7c1b063b81f57c3e9b80a4ec67b7033f68db3e06ef818f7c1cbd822bc057b849d59202c1c1b84bfe06c380fb6059b83d5c19bb055f68d5bc5d7b857ac1fbb83cdc2b2b13e3814ee8485c18e7122dc8dff60ddf80e6ec7ae6053b067ac19dbc696b9567614b1c3881d3dec106207103b82d8c1c30e1c76b4d9a1c38e1c76bcb003861d67767cd98185c90da636980631a9c15405131b4c6b3009620ac48487a90ed3164c7f98f83069c14405531f263d4c5c3075c1f404d31da63c4c57b4a460faa2d586490c26305a78980031d1619aa25587c90c25314a6194c0287d69bdd122d472434905a51494c628a1a0c482520b4a3328c9a01483d219251894cc28bda05446c985962025354a695a55ad424a3528d1a08446c98b5217252e4a272899a0b445498b52094a5994b0285d51b2d222a365468b8b1618ad325a5fb4feb4bc68f56975d1daa2f5446b4f8b89d69c5613ad295a4eb4e2b4906845d162d3caa165a6f5420b865699d697960b2d312d145a605a675a615a29b44e6899d0da2283904a4835ad125a595a555a5a92f024e549b2931445d211496b92564852218986a41390c84042a325432a03e90b242f90fa2075818407690aa43a484e203d814407490fd21ba42290e22019817404d20c0988a3318eca38027444c6111a47818ed2383ae3e8cf119fa32f8eba38ea73e4451211474a1cc9394ae2688923218e72d081838e37497174b8315a43070d3ab0e8b8c1688f0e2174a0d1714587151d5974f4a06307a3318cc43032c3e88f11193ad61861619485911ea32f74f8605485111ba31c8cda18e9607483110c4631189d315a632483d10c46668c70c8e1270718493de468224716ab311aa00e0d911e223c3988f862c801a7ab81888a1c457430686574317c33e4981161419487c88aee4cf7c2d09f4f06a22a3a1b7220010a1ae2026990c743a84348c4f605898d8dcbd665f312b60981200a430403d19e1c468455847872bce96e20da026c8353037483684b919e231d884af8bc782584728af2708188ae7c7a86000da93174461215958a7008222fdb0b4429ecb821dc81a885ed86d04dd210442b108d0107693d886d8882c435c42a442abc339e190f866f8a4f0af14e4b07710d6b0dd1065620510d4b8d0e894e0eeb8da12586e40c2531a404cb8d8d8d2d10ab4ab42256a952ecf062e4876585e80d56151c5558b21d5c767469f281555592119aa01d27e090857b880a855c6864745274518074be33ab37566e20a0d525d462d5c68a506b85708bd5a0904f2b8b9697169721328e76a8775a6f92de782c843d10b9b09921124364064482080524338854406a8348860d06a217b6185a2a20a5d1e2033e31148626464885e6e7bb022681830a3805680794a2150618855d13ea21aa01a98a1d3f205d816487e8cb76e52324e5e4f8a2c3617be3e353a3f86af868f06cf0d40c8d914308b04ea746479b30cf87065482e543121c2330bc304374be2fde180f8c0e1ebc2f484a1065d9c020090a7fd8cab494601a83a80b12145d191d15dd14dd9d2e4fa7a7f3a2aba2ebd3e1e9ace87ee80675823a36aa9e232eb42d342d3c14bc162a1e26346a9ed6182d31bc324431ecd8a14251f7b496203ad382d3b5e974e888e876e87ab07f3a3717cfa522c7114844dc2a3a2d57080b468e385a218be6b321071d223044345c4220143bde6c3c6c6b6c6ab0bc60f5d9746059c1ba82a587b5879587b5058bcfd6c6e6c6366823b409daaab6424fdb0e2c32ac2b2c13585b582bb0bcb060609961bdc06281e502ab0cab051617161856092c145659b0c2b0b0b0c4b0546075618d619db0e262a5c58acf0a0b9616d6175616d619560aab16562eac58d8da6c3de8804187191d2fe828a3c3051d2de8604107191d2be85041470a3ac6e8404187181d617480d1f14587171d5d7470d171820e13746cf9a0e80a21f9213a01290caf4bab08cf05a4353a1aba193a193433b433760c115a219730a2c1084d92092d1e9082f05230aa81084be803d115564c98436706094eb7069317e21444652a16d5ce111b758aa42298b2e8c8e418c285a83ee42063ed1055dd3b0ec47783f5a24b93e4a65bc3e4e74321b45389006f68d9010979260cedb08901d5d82d2c0e200b5b16a4243c2e445c9258204a035a49ba82340492109e16efe3e901df8036d42186e0745a845158173c159290f05e189ae9880316f15901d98477bc8a4bc5b362a88d77021119eb4652178dcf37c6764184c6b9b06498d2b07d3e2a55087fe38909df301102c9d42d2c0a1e1622161c0d6f05ed0bed4d5215434770692005d2b248926359f027be2a1c1a5f0a476b843c24116a51613ac37ee16df1b280558aa4289a02acc2110478a556a1b9f12188b47857b4a0600a23a98d1d441c6d4164828605911aa4429e9724379c0af00d8fc2eb7c7692de48aa6a6901caf120c04244336c5590d4f0c82415b251483ad209d9840423bf482ff209d94572992299b000930b481f96c835218c4004502a20d9482124e041048a40e0011d1c69809105402920011b0071493b72ce8f260b0220000aa46c517cf259b2ac743da3a228e10012119444858004c92727084ea29020f18000317a6165540684264b46e040cbc805f6c0920e38791235a5240aca07519644897212c5410fa3163e40f2a4034ea09a34798280a90fa29a347982000a8c58086244a64913251f3469a204012b8430e50127514d54e0a8a80e20793285642a040f2c89024193510a1ca5c9122553512020898aea800fa331fca4034e9620090194a811a4902c11e1a79c447d20044a3a70231438ea03274f9c2051826489081ff58193270e987232c2930f3ef8252331203cf9200a841d4661384a08a298208912250451469c3c5912254a5404ac111806c112111e4a1413284f2870c41a7de1a82925202c69a2440a92a811a246788007204479c0034a3ca0c0c80b4761f24154081f74e128534ea2a04485e064891b7171b2a4032da313f88325519c2c81324542149210341141042548a04481d064c9082f261f3c69f252323281a324196d612548948cb4f00790289952028292a9a8060c19952082254d942c995ae264490ea32ccce483274d3880246a6a840fa248882232c2c2509e200034bac251a2964c2d81f22484a91194e030b2c24e9e2c995202650410904c3d691205c912115e0994113e07cba8261c5032e564840e2099fa200aca12109c2c418204c9b91cb6364c6cb1e639f6f14c267b199b48da26c5268514416eb4b56d776bb55ab799d2c94c6b73fdba72ad9556eab529a5b5d63aeb9c3da6e4cab567d35a99a5ac952b4b596ba54c65adbdb1644a6977af9af2e498bb6eb576add4e36653ae9b22c77dabc935e9a3f4d3666b1da555e324d3eead29e5ae94997b1a590057aeb26bd38deb2665add5db6a5d71ccccdc21d795d649b923e64ac35e6adab356ba35a5b3b68f5abbe9ec9e4ce79cdc7157a69425cbcab269334b28daa369d39ecc3d9999bb69e59e92b967f7a4b5d639b9b9fab8d9899ca6699472dd95ce6e36d76d5266d994725d5bee6eb1721cd7dacd9472a574ce2ae54627ad739b54d64a694f4a7b76735d65ae95b97b72ad0c824c6b55004b5a996bad2be61e6a5a290749495c3353aeb76e52da71731d6f3c9bd5719416a1dddc1ae5a16626c25ed3e666aeb9e6a80fe6d975cc1ce5e6ecd56aae567376d77573dc9c1c37394ab9cabc6d94d6c9d55a7bd5ad3aaefbdb66524fa65c731c4727e55876b3945276cf9ecc534ae69a39ee9bab1d93eb49b76e8e4eb159239294cec9511e47455c4f59abe4ba9b73524e009db267d39eb47bf25118ce150264edbaae63b138aee3b849a9eceeaa647577d75dd7edabb252ae762177b737dd6633d3d9944eee9a39295f1409090969e38d3362ee5efabeff98999959e3902957a3a63d2995cc61184ae66e1c3cc2f9141a49d69a354a99bb63d6d106cc9da4b3b26a53e68f997b7077d7969293956bad95a39443d6e00074d249e547bf6e1e94f6eda673f616f60c299592992b737377d72c6e2a2537addcb47677e56d6eb46bcb75576616eb64aecc35ed6aad95e9ac1918a02947bbe9b651ee6d72f79cccbdf547bbbb6e937273dbe6b445454545a2c8949b4c7b36b7e4e6dadd6187cdcc4328b37737d7ee6eda949b32f7e4ae9552dacd54b6ec5a6b77ad5dbb7637334fe6ba6ada3b7a450b403f26666eae94007476d75aabec6e4ae9eca6dd3de76c6e721dc7cd2aa4525a75701ca594d6ba715b6d96130030d0c19a3a2e00808e29a5acdbb6b12aad75ab750002a816485025901b959b646d5cad74d5b53657a994b4d6de6a5d05e1e8e4689d1ba595b96a95ce39bb49e7a4ccd5da85b5366ddadddd5acfadd2aeccccd5dad78c7bc6c4c11d02284f3e10f501cd630ba2a44435414282920fec30620b3cf0a409120f3859e2010f3c698284c387488802c1c912244e962809e1830e74e0c9ad008428285120407982c4090301442d813235c1009a3459c22448007c0071fd70e5f891c30705134c100407084d9684f00192a9262328e94014084d17382d91f00404534c4e1808c0890460011201443151d28403483ce0644908519484e002e0d134a5044a9493280f4091006401444589120545840f3cf900099428294f3e888282444914103e8842620113270c0420c20751518430756049012cc0000301801085e4c994082180f2010f284aa6a2f8c01105698905f0e4099424261f28e14093264fa04ce0521205252904514c904c9110e58449692aca03484451a6a22c21214a9bfa404914274aa04c21995af2810f3c71e560012ce940141411ee101425514d3e68e100c149940822284112e50125509e4c45916cc10798382a0a4a0790407932a5e483274d9a2851620ba23eb064cac908502e013a3035c29214275173882d40e2e4c9922850a2a42021212a0424534e96401101c90751967c00c91409514a529c444d17e845f346553b2ac94962d28bd1189d5454b1d8c654541c8bc5382aaa30494c76311615159d9d84a9689298a4a26aaa992426a9629d844ac6a8a86612a68ac566929884c568128e69545431fa2561aa58972426633199848a8a8a2a569330151515552ca62589c999844a525175128e7949988aaa93c424954cc254924b1293b12d095351c5623409958c494ec2312d5693c4242789c958ac67128ec562319a8463b14e129331998463320903681b9299e507a228e1285cf9e99e36fbea8909f4d33d317d3ece80a4a0e6a0d3f0c874cf69a88011c497d24e89bff9e775584406790b9e43cfeb187bc9790d8f783eca6722dde3bc76397ade3e6b48446a0c8f4c97b786443eff34c9bd92925532f4ce436f3b5576b56badd567e71ad0c0cfcaff38e4c073240f5b28a0f9e95e2b4461cc4fe740d041ae4b2a12862b50ca2516abc5e450628b6929946dc270290cedd2aa864bde2dad58385aada5bed36a11d1961b798b25825216ed988276b45a361c9aadd07578e85f685b6bdaa9e5d53f11079324f73cc8e3088b24b9e7353432ddf38f08ec069794c2100a14c8e4a0e8502ce71c64021d14ef28c50aedd295a2fa964b3b82a095afd46af9532f597e9048cba792e507bf7e2dafadd08f3c9456b345a473fe3491ec283f29f4248b8464f98f74d84aa65dd58dec0cd4aeea9d0dad1d613f6447d813d911b6b2236c0a9a82be7a25d34e7de7abcf40edd479f54f033dcbff7dde6d414d67e2d437e75001da9a760abdfa1786a177e8d2ae507083821c14eea0d0078540fc795afce5a0bbe717e61ef835f4ef03c3d09ffa03b7ce57def9cab537edb4f2eadf6ab55a791e4b044128509ef739e79ee73977c70fb4acb196f12cbff8acd52a74e9e1956bda55dddd7a244ca172bf7eafccdd5a6bf92539aff53c9b41f15f8356b2d1fcaba094fed45e788443223cebb2e69b5e5eed4dbbaa77d880eebd3b82a035702b4322a05391f0d2dd4acfe22f983b156c86317f642febb2b9678c31b297df2b59fce5cedd917eae49c977ce399453dace3d3bfdb32309df39870d707de74fed79768eb5cc57d7deb49d7655af23f855b6f95abdedc83655baf95af4d54577feea728d57075b03f74a430facbbcfd00377d875bfd6b5d9330faa196bb58f31c6a39fec5ce6fc740a3e07b1dfa6a8cf3b428d30285238d7ee1475cd47fa23d5d79104a91dcf3987476ab3061aacf34ae1ee66ab33bb3c23b5a39e6917cf78f8e93dc322ae323ec800608c04607a70e1a1e5fe7479c5fe7429f39f0edbf1d34960fae9534b3f5d04a59fdea4f5d34348fae92020fdf424473f3d033a7e7a058c7eba07397e7a07453f9d01387eba02887e7a02867efa93f8d33360fd7402ac7efa05e14f0f02fef41fdf4f77793fbd47f7d39dfbe94adb4f3fd27e7a51fde922fde9e0fce95c91fe795b46e4b7cb6fa73c7be93c43287fe95f75cd72756d9cdad83ebdb2db191a7149a92f9d43235dd5c736c99d5192f43c9b9179a50638cba79f76525252529a4a4c4afe4d5049c99f5a14999898fc93a0689998bc43224c2cbb62d91521efcc534f72764e1a60937b7efa942b5ff2efcb9f9f9e64c7fe96330f09f22c4fe201466c79901f65cb9f9a798805dffe7960120f30a2e6417eece7dc0b8db47cec0fe5b77f1c1629c03303e162ed9a1d8bc45eb3b197b6e52c3b2679fbe78547fa35e79c03ed7237f6d27276942e3d74d6fcc369958b7440173aa0ba0682219195b32cbf68f93f8e505df2a5a5a5a5bab4c3772cf9d2d28ea525255fb9d26af54934497694dff2c9e42b671a83bc928f2d6fd7c222d35bf2957c7584b4b49a7f9656abd5ca2ef5eab68ce8f025d7e14b632f2125e1f856df5205b35a5afa9696ec072ef9d26d1939f2cf8ffcf34fc942a1afe449ad22cd0dcb396c807ccdfb909ce548cef28f653f57b2dc7f5e8e952f4589fd6acb237f6965f943229f11f99a3fb592e597deb56c923fcd24cb8f64b73beda27e64b536eda2aec3562e7684bd6747d88f9a1b181b39cb8d2e27a85dd459579e6917cd619388f3c72dcf96e7a973828a6c12b17fd4dc686e9efa76a79d2a171c3689287fac609ebad6a69d584efd9b7eda6968c8f33c34e2e33d3fede439fdba7b8ee71d12f1bce5b49374511445e7f0a945ff5803dd9ce028d1bce8332422bab4fc43965f86479a5ebc2da75dd4bfae939dd3ced9fa177b4ddaa7fefce30c8079f3409e6760b85c7921cf333074c2d079a7e7599831610485d9a3e6979e6762b4bc983baff43c1313c47f44e0e61f7f1fc8217747d8732eed28be746bb5f8cb82d25e98752aefc58d01c7f9f781d6f24b5aea1a273bff40b0eb14503fcdb6a4f3c7be658473cd39e0e69fa72e5d937784bdf4d8cb9088b453fdd2b7f048d3e72cff9c752b97767d4efddb42233efe0bfd6b508650d239972194e63274a95d6e97bc53fda08f1ca190c8ca3f0e5977a47a966b76e45e7369430b052a74cea1883c746e27ee8e50a0381f7228d1390fefa839d1e57685ceed34744729f9a17377e476692eb22c78a5a8341b5afe959592ff7d1e5a7ef0fb3c34e2faefb68c78deb977a79f7651ef3c69e4083d75af4c3b75579e49c280a83906308001513e93cdf9a96f494944269cf38ff34fcf494a224aa7dc959b1d41fc29f1b59b468bbf60ede6cc1331c85e54d40f9c16e2bca68400167bf5f01282bcb20479b1915eb9b4d3fcd34ef2cb3cff38017dcf79ea4d87c7f4c3a3e7b4063c4689e6a94b35b7e55c89a635b84e3d890718519279fe917beab49d5a9aa7d1e22febdcd2ae07a2f57ef9d4b935b04e5dda235981f46a93f887f41a420dfd741a7a70ddfa0c3d70eb1d76c0e38ab349ba0c3bb8979b4dd239ecc05e9e4dd23d1a5bea00089267daa9f379798411e599a7ce9cf4cee5ed5c5ace934f73f27b9f043d5bc169579e6c079d4322de4d23b6a639c7b9e7711d1e71bd27ddb3a06b76d334f76cbd9ae71fe85ce89e4fcb39683f7f9adce7b463ff2c7f589d7d654739d5dfd53ffe189436f4ceb68c4cef7c761ab09ba4ce77acfeb9bc69449fb6fac7217847d8839e68b5f84b746e0dc40ba3623937069ec3b831982e1e71fd537b965ddacf41db2e5a7eb12c1bd03f69c33bd2970e5aceb3352ca2b9f4693dff2ce74fd3e39cfad3ecf8db4ef5cbafde2191ea9a1da7bafa53571e604479e6f9e599671e541d035b33a18699ab9d3210858d6cb2d85bb3f6a2e559b63dcfbafc79e619dde3491b10fb79d6e5ceb38b5f6fde76a49bd5e2af0ddcb60bdb9caa023c7164af6de397e234e0fa4f82f2cc38d53f8df8f8e969387feab61c12a9332deffa097bea6d39abc55f1cc869f197e6da1da906dc85714eb53937064d093df5afc1b6ec9ce5178747e6b7d32b35abaaaaaa7eb3dc188c3c8b81cc4ff5f79976e279a4e9e79567fa4a6d541dabad95f1717fdcdfc7606c26f1c74a449e7109e2ebf3ec843ccf43df74ee31b29d6fffa695d13bc69efab4a39c763a88488076625792726648443c6aa731489076ea6f27400b71994c267bb53fb5107fb52ba09d18c043e6b394c437df5ed44ef25bacc598e4392cc27b9efd9b206d43c18aa6825a4884cc066a19b4107e9dc04593b572f358b1b378085f6620d3fbd276f10ae218e4a90900e8db8304faf60bda49cacfe0d94eed7347d2cb5dee3141f039406c17eb931410395c40ec29bd522640089e084032e530b737c8de210362cf84af14d5b38fed922fb78ba51126dc799e99e0869aa0e527fd64c880d873bb46fab1d7ee374322b541adbaa51cc8d7b8766a1591afb976f9a5572b9f7bd0cb446c349f039848cb030529b9c8c714009ffec7ea3b9d56ad7d7aab48fbf4a9b9acce646aceb553bf06fe533f754c4a39e7630a881fcb843e94013179b97651a7feb1182045f594e5d3cb818f7bce39bd9dd239e98cfa38d07edc630cf2d3bf3b722fa574e9ec5bf81011fb47a59f5bec28f568a7f1c78f76a23edddb290c7f74fd14c2dd4429e5da89493bd72ee9d2b985d06e9ace4eefc83dcf216e17fb489fdb89675bd43c3b65e75a08bfd839ec22edd4e9f4204d84963725002ac18fa4f2c922a411a29422ca1644295910a53f35fff8a40ae2ea7956029d97ceab354f5d13c27264b217bbec3f67ff58b49d3467b7f2ec1ff390957f5f0cf495650602def193eae7e0bb63ffe7d2413b523d287f3546a1facfa97bce3ca4f3150359ddf1f3e9a1779619487847d027bfb4525b555555a1a70eda3156443ef5a7fe2cbf6799d02b45bee650fd9acfd008f5be63ecdbf93f97768645345ff9675b502f430e40670622fd693e3568a564d573beb2ad9083cdbb3bcaefdcb3a37ccf3fcd8ef2350f9d8647a883fed41f6740e459096f9ebae61f7f0d72c841e8df1de97fb3a570bff2d59521147dcdbf8fc3d51d63bf72d04ae11ef4cf8ef23f671e02de11f426439e19c8e79f3fcdcf4eff24f8d9e91caeaed47ccd89681eda5133425d9323abf29fe7ec32e440563d7899818cdf959255ff79750e15c0ff5de61f9d4fcff27756ba8c8154dfecd8defed4b14e6a553e9f42b0b0dc9d37c762e49a0369c782e42b0fc0742c5ba41f7905ce530816a40b23f299e45876f8e7ecdc14822508161d8ee4ec47530816a30b337216cb91869c65ddc861461736d4c3911c66e4a0b31ccbbc308e73f1c244dfa6c3e68571778b7418e74c3ee4a1b38b530816efc23ceff60fe9c2ae6f3cdc87f7e6480e6b47bab05a5dbc30cf458721f9e758a8275d585191135dd8f4eec23ab79fc3ac7f1736a7c33e6f390e5174f0c26a75efc2e6852db9e7e274d161a08b17567138ac7a934be030d125b8b0a222cf7161397cdb9ce9c28a983cc796c32570d8e6125c185337991cd6f5b85b5c382e0c87e7c8e12d1c39725ce7e179ceb4e4799fd7d91c48464353dcbaf38c26f7e5a82c5bc1e6908658cdd94d9ca2b7e5f82a688464c459d650f5ba6e7ee2966308148d3a1069686bae3d96ad3966cd8134391f13885fb3ece7140c49e0f9f08103e99b5d5393c3da9b9a3a23a3eb2e91731738c1040ef37c8209ecb6b1fc7a13e8795375b91c66dde5c3c5b172887e7d02a4219fc02970989153d0d4e4b0cf9b2468720a1cd6551f3e3eebd75d3587bbda870f1f13386cf3092ecc878fa1e9144820c192c3405feafc7a13932ff130a2c09b1c86e44d2e17005c820b73390f09bcc9619ef37098787b380e1c8de4d77d2c2d390f26266ff9120f5f72d8902f71eec37f388ce53f641025a7c0612ca740f6701e14f80f8719390f8771dee45252baaed4e44a0eb3ae241df6b9924bd06a390fa60b5bbab025e7e12d266f390cf49674587509dce530d15d12003e1cb6b98f0b03800fbf17060067627297c3a65f8775fee3c22698c07b5c58ebc25a8e03872b5d585292b72e4cc971e0f096c37278ebc2925a9ee430f03e7193f41e4e010f90c8972e2ce9c2927cc941d0afc33cbf1746c4c3afc3be2b02374927720a1ce65d12b8493a051736c1dd229b3e97e0c23ccf8b2eacc83f09fc7358772bf05d98f7b9d285790e760e3accde0eb849ba92c3725c05709374d785f9c8e100b8b07b61d725b0dee3c278b8df0b6331ae0ca253f5421a62b4bc6c14258c81a20d335ac012c50b8bf527a4cb7193747b617edde8323749df717936b1332d21b9d285b58e3ce9c26244f430869d3c35dc5087881752cc852a568489a367501e185e480e1bba47dc241de9c28e2ecfa60aeee87a7618eb8adc245dc7e56613bb91c3e60d819ba41b5d588ebb45beb00c79d185b11cc7dd12e485653ad1850dad9c7561311ad2bc9186064181c838e335f90a403dcc10c605417106bdb04c67394cbc04e026e9ac0b5b5d9e4d01b823019e1db6dd20dc243dbc47b3891dd637093749072fecbb5b5c2f2c9a7b179601106fcad021d01480707875778bbfb0ec80b3860f475891a58d315e58da378771d7c54dd2b70bd32ecf2620770cf2ecb07a9d9ba4d32bce2676f6d8a46a6a20559fbce18bda258fda2571f82229fa4a0c445e6e97b492037e2959f5ec1c860ca42dc840daa73df323fd66e1a9449e65993d7b7d9e6519f323c843a6b787337c9e6569c3657cd429ab91f345ede24bdbd5cea194acfa6a3906d21efbe96c47f9ecb28ac8331919fa1c0fa9dedef110fef66a791b02dbc5ed1a8f7e4643145fd42ee9d4ca674ba59c65b9f2a7bb7bbe99d3e7f439e774da6366000b991fb9fef93cc3227b6fa776da63fce18de40a98e799953e3fb27e3a05cf332b41fcc7e21eb49d623fb61b61226fcb087de9f4a5932093c964df943a875023094f9d5e2926d2f9c7eda58b57248b6bdb3ea70c1f6bfa9c73ce39794e8d634b25f20c073e5f9d6a9ae540dbbc6960b1582b0f1df4cf592c168bb5e7fb3ecf3be77cf3effbbe4f8a8f99999925f7063290cda5a51235af23f7dbe6200f69df3ce421fc9bb7edb1f1e4f6209f94fa524e5f4a94d23f8ad27130d2575dbb23c8ed511519b9b7f57311bcffae136fa47aea3db637916b7cbd4ebc767a47cf39ef3d1cec7c7dcf3f0ab6f6dee5768df4b53a436f825eadb765055a77deb665059a7f536addfeb5119e7ddff109e46da83acf9e6738807986f37d69bb34ade3b69fbed9b109f8b55622b493f5cb07b539a5d46ed4b7ce3bef9088c64991bf51bbf9d7ed0c8499348073cdbb4b394aed485d76fe71524aea9c94523a47db3929a573dd35d75cbb6ccd52966dd1b62dead42ae06973f93528694bc92a2853e04b6df05204a824cf71ec9b1d39ffa8cfee4291624032d94f113de7734e81cf1d11c1b350a436f86620d4a7b4f73a0bc5f329cd0892ef7c87d4062f1908a5dd65fe413d2c525dbbd4729c9560bb84422fc7c92dd0acfe4dff6458ad94f3faa67f5fec3939b673d3cede7cf69582b14fcb3f2d959a727329a5cd3fae5d9c735864a3eddab6cbede2eeb4e37429e237a1322a3f722eb511a252f552b88e09f5f6cfb7cb5970e4b8bbf9c8b91477a50a95872265fb28b1dffc696e5673cef2b31d35ef4a49424fa7faa9b7a0e48c48bb66e5e69ab795d29cf757e7a4c62937eb1bbbb44ce4ddec6cee8ed2d937879a3f46897d117e7a99cccb84bdd9a5a7f1152989ede43f9f9d9dda15e48d6f8ad8e10d7ede817cd2b9c7284e11572c1ec2e7a580ab0e8f50990c4a94bd5ce3634171ce3977ecdc3977ee39b3f5acd87152e4739cbcfe495073d093ff791ee43b9792f3cf0335cd08e7df65752e43898238fd76f7e3ecc879e7de1d63ef49effc69f6f7791dc7bdf4ce6e1aff68af947f7411fab2b3b3f947fbb880d8112ff947fb0262473cf38ff6cee3ce4a31e28412dbf26f16c86b56a95dccd9b1baf4cdb6e49592af5d253932d953f0da11604e109954f7f163e5e78fe22150827c1af6187fe1d299af76af6401f2d25c0b8e1797762a7aea4dbe7a901f8b7e642f1ec0af2b9a4b2de228b978f1d461ece26c52a30c103000d1868f4cf6d25c7e9a8ce2e065862a3214f1ba9205c84bba161c2ff62b59fab5b9160d5ed235ab4583178c8d07d2611dcc26ead20e8c8d079b6b17f6349ba86f17c6c603cde585f96ca2aedd203c9b6633e923dbe1354a60220d1956dcb085143c5210f9154b814e1166ccc0c9c3431a2f7eb18f413c7099ec25b9b4938fa760ba690c9f34419c4d46df9011caa34e29d54f975d3c1d35eadb75a2dd51f3267307405fafe6e3bc9a4f5be7cb6bd547aa1fa5cfea4d62657e73c275c07cf55104af6dd709f7f9aa3939c095d9d76b478d1115e0897347126ec873c39b4f0363a76255555595797569644b5d681873068a04677498239b1281fb7c1a590578e2c8a41ce0ca8c0419d701f3621f45f0b50af7797557c67d5eec23eceb1da54fae60e4999a403f253f8dcc288b1dac842193bdf8c2d8a99c9889410f154232d98bbbb22b2375398ac04eedf40e2750011e38551318da228b1a0a59a9aa7a153d1b29633b1d78508176da78cf53ff640fd78f204fddb5d9d1bdc766997a056405d43d6817f50e3a98429ced20613bfe813834329fa73efacf9eab31c66d22481282082448594de3ab556c27ced99d876c50d4ab7fd57ed539e4a03af52a53d0fc93cd1f053924c275486c97f4ceb53bc6be16d96a4769a5c81fa5c8a7d4bf66c94d57d563227dfafca69e7e9a6d41719fffbed6c721d4e6e7bfcbb282b1bf6a9c6665f35cb1aca0faa4b609f8d49f3a0551fa51bbd88bdac59a6b9789e6d3f9f9c5760af2ec9d0df2ee1569ee71cea114f74a0c446c17fb669d81f0e54be91d419116faaa738f910394451cb9d9ac9d36a7cec9716e4e3b714e7de4e83cf56ff6123ccfd0b0f0df4453abf58048a773cec999b58bfac831a03a77b9393200dc6c0ae1c0741375cacd400e88d5b91907a65dd4a3c47a5b502d93fd742a99ec99dc31c74ba176c018e1378ef87a9b546f2980bf725e7feacb4803f0532e2432bdff9b600a14dcecc88179ca819106e8a7ce8d11f3d43932ed349ffa2767cbb96adb6a4fa3658357e7f2ab95bfd9567bab3acfb8cc69d51b017e75ce3334619e6768c03cd4fceaf3eba512838754a7ced999423ea7cee59942e48b3ac7670a593975ce8f3400e7d43fcd5bd54140e741e0c4af6cabba7cf5ebb3ad7a1fc07916f9fadce5abda0e40e7ec0882275e73fadf6cc993aec6d8b73af0bcb539fdf9ad0784deda6e07e1b5c255823aa7df2fffa9e783d68a7c7db7a55d2956d5a7d172c1ab732bac42af2cf2d5f9154e269379d7ca565555d5cfa112e9b2b34548e7003df3a0d262b5372d3ee99f8c4989c1c72eab4c4a6d7529b75a359fbed55a3fcd2ac91d68cf509d129192554f5dbb4a945af9b47b8a4f3ac743e44583e78bda359de321d3b98dfc18485f6e1737a5dc61b27f75cae993f3a9f9d47c3a01386dfad47ccee955a95d5ae740abe53aa4b9d4bc455d7e7f8bb2d1bc6e57a95ddaa51c0361f9d4b6145f3be521cd924e7988bc52b2aa2b03e1584b69e5e3ea948768ce5e7988bca05d55cd079923380504955a88e7d533e021ce4038affea39dc476719d7713e73d5a08d74ddcd8025b485137715e676aaefc78c1576ff110f9d53babd42ece270d4fed9c4f07f49cb74b9721e7adadb56dce3335679e676a66f8a27671ae59f9dd556a17b7d9ca40d839a40c84e5b38cd59e6c3ef9df274322de6643affe7db648ec47d0bdcd797376d08e9b4f35659e3290b0886d0fede69d95dfce711e4aee8e1c67fb73f94dee9b20671bbc9f7f13640b3a871c78a07b1f0539dbce21075f08762e432912ae54a1227ba911046ebc51f551d88e9a31263c7b94d87777043f7024e1bf06847724e13f07f9825ec322debbe74f938980978957c473be52b01fe77bff5d269cb78f1ce79d3fcda78e7d9222f1f194483d8ad83f06f99a26d08f475f09d04ed52f6827a6af197c75d16badce3327df2832e3f8b816e100e81bce154aedb8023af03bbfb957dfb8eabf691e459c3f12e0b734657ee43cbf1d3db5d3c82960f3cd3368272639bf39b7d38e1f990eb7abfa532b7d6db73e928bdffa8fda896735f069c97325b6d3f4cd8bda89fab639d84eed9b738fed3261405d887935a3edeae00a96295960b10306cb1259f479f16cc2f251f080021d3f83d880f3e2d9d4ce3d04b68b5e974b3a4f21dc4da3f8decf331a043d0547b13a6d0f22effc047f74652064be46f0a5e5781bd22ed8ae7ac1e7190d7f9edea276499e3df38855d9823e56a2221629f110f9ed200d84befd0807191a426344daaea128a29c3339a69f6ee4936ec4d6e179f666876f189e67438879d7f34c883850535600fd187ba3fd384218259e9d25dd8833cef3ec07d94b39cf33376ffec7f3ac873e32e4c07b82cf4b2579760e3c40665e8a6af5e31417591cc1f0e3941a183e2e7e9c3a818bfa63143d3e5030849d1fa30461e7d939992c84a232d973d5b3cbff58fedc2990f98ae7a57f2c29f9d43f6a2bbda394a191e97dc738749e16a12ebf5adb3252f13cf58ae7c728b1a75e5d8aabaaaaec18fbae748ed0f2f6ed573cdf76c7cb9003ff766aa5e49077aa8df8b7cfafa564559db705257d3a07d2e79dfa1ece9c9feaaf776c97227f7aeced4f6bbfa7be678f55d96c7c43a4ec3d1e32c47b766603b0ac803a8b87f01b423429b5a723ee3010ea217d36c0d311527005fcf48e7d47aa97d2ef0128f2a577459ef88120cf8e50f352ac97c269d200fc73ec1f351144e99f0c9f882db94ecb912111292a93311f1a44dda3f5616900e967cfb3b7f4a401a8ecd9bf0d9c6111deb3711cc769cd7153721c575d2be9da9d1510dff38c86355fa4f4f11452002d3f64b15268893704bd40b89284151bca9cf1060e2f76da2e49fb08f5a7d6eee8af39c77588b6eb8e53f3a5775ed44edff66d9e77c70d6ca7cda78bede4f9f46fb3f23f1972b0f4b45d9d6f53f33dff64b39c2bc9ff597e573bfd18955efa74a5769277d4bcfaf46f4aa959fece721b4cd59745df24d8917be6b80ed1b047bba66feeedda6e3bb5a37c29c9aed9a92943227ceb15dbd56091bf523bf94fffc143e6cf1eefc93a03b390397952672b853e3bb550e2b3cfc9ce781a0329abe34b44e9231d45b19da301cdb783454b9e7af6938fdba9baa5effaea3ddefc7d9ecdd0c20c33d041239b20b5a3e6ed346cc0f4be745e26a253325f9982d43269a75ec306f47cb16854fa7a994c6f1f7d769d61851f95befa573ffa3650da7e0ea93f354f1fc5af5e1d9406e0af3eaf940668280a65c13303913e73f82675bef3dd003932f4f9f6e93cc4f3ce69c880ead46978a47d3ab541de9bee496f7ae0f47c820e4ef73c9f9f95ee8dd3a56be00c8df49dc2b9a665912fcea764912f4df3299a6f5e01cea77015e07c732ae70a9fcc7b557e3e3f5d7a9fc334cfb2399b30063bac0e88d53dd79c3acb875cde21d7ac15ce35af96ca7b55671eb2b976a9bc97e62cee404be7b55af9ea2c1ba90d7e8c7d0c33ebc4fbcf410be5fdb7f21916914e04fa689934f91cf4d01bb44e3e0ffd6912d931f643d2592c172de81c32405ed61d41fc91ca64d257fed41f4b8631007afb3c3bc3860c68bec7f34c06990c6e5aab30dc420efc6ceb5bd9d617d6300c8d841ec398d742235e07dab5c25d58ece5dd2c9bcb574da36503efe74f5f2f4cabbe75daa5aad70a4b731815e7dad5e22fcdb5f8abbb54dcd5e2af7ab368d9e08525f6aa5e7dd3fabb4c2410abdefa2895c8c14412ea6d7d5eab4b795b5fbdb1333fab73d841bd3c9b382aadb92c3e2641e419973fdfb31aec3c3f071aa09dba9d7ab29caa022f7102a153151d857e7484e4a116fa516841ff1aa4b273f68f5690bf0e2b009bf26a79d02ff10253921cf429a227b90c3d4872f0c2562e56fb7d32bcc0ca7338cb4e5939cb872c6ce5432e5ad8ca45e7f002381cc99f3a8785b17c878316b67230f69f7bfe3558ad7cd10e79e83016d285891eeeb05360b0d045bfde2f223b050603f9c5b230983b930fd929d6a7b84f617218d5142527f21c0e3b729891c38a5cbcb095072b1f720e2b203a8e0b8bbd58fed44916265fac5bed0556d587ee14d187cce479a4e7991940ff714864f36a9d785f7db350ded7323f5dc2c0650339bc00920f3968435fd92948bef22dbc008ea10b5b790e671e720118e83b1cb67222e7d0031c1e5e1892832bcb2f223b05741cbec34ec1e1489ec34e81818ee49b1d635fc30a808ee34e091d87d7d003245ff99185858ee3524dd1e13b3c74cd5e00c957770ae82cff38ac0078ade070d05997ca7b0d7968a9bc97c83ca4de31c8a7d1b272f052792fd0db872ccb451bca57871c48e79c8613102f0cf4f06659391bed3269527d73cd879c79c877c720bfb97747e9edd39fda49754d5ac1e14317265fad3be55e5892c3867c87779673d05ac1e13b5c87851db90edf03c39affa4d6e5cc731d305a9733af797dfa66e63c47f11204713ca25dca702104c31f18089de172a6cc993567de8060b52dee1ae95e73f9de6f7e9efb6c7e5ef3f9fd1c42719f035c99512ed8c85ef3edb5ff5660b5adea9c6dd50bf59a77cf3d875015e08923fb10ea005766afd501b3f21d17265f307b77880ef31d4ce2a552f2d0972e95129bcd45cf21e6a50f592dfe1af296d5e22fd059968ae5393ce952819e63e852b19ce5a1e3b0b0d80be966595d36521b3c9391650523cfc68079e9d5f9e5ebc86af1178c835961c1b4f88b0af4d071b80e0b33ba5420e8391c4645e439ae167fadbce86af1178e4b4574b5f80bbc5986ae950d5e430e7a78adb0469e8dd1f2f24ed197de8547388a97f703629d1f6b9a36df84edbcc7ce3c0782be72ea3c8538f52d9cc0ca592e4e215658beba5a862e1bcd632feadaad97c97625107b89fd5a39a512399894c94412782693dd56f59567f1d7ca351f4578edb6eacaa58f497e0a61dd29a1834e9d930690d7bf70023baa5eabd0419fa107a0af2e6ce5e02a04a974c4b8168108329819c3842ae07421c60d951fb87c79230c0f40482b720b156f8a40830e95417d2a10431270cc98714315963870005520ab6cdbb65519360fc91a4d8881c2123ac80825608c4127544d9127061c3849854b632b80a85119fa42f685962fc050e65384c16cc38eb84513b5282420ca9c9214ada623aab5d65aeb9f2142493bcc9913ac2146174db030a88f0968b8f002202f60c820c5981f66de0f4df0903220c8d037b21c1abcc943a78d78a441c147cd8a8d1a26e668454a45474a79ce281562c2e056b1c28a4345d037e34c59121f1513363b55dc5a9bbda1c56b5da8915f14b5d6ca67d6f19923825cadb55e50b94160187dad72e1cc0a27d45a3570ba65d6b1e2311b5f5ce9e3851b6bc4b14301212f8840a186237ec0a28d405c1b84b84262301846a43106a02d6ed294800136a890c327100e6d5e78230623adc32301793c041184a02100cd188298010b511ff00621d0bcc1c68e952d53dce04612566608038a2fb2bc34991d42f4db9ee8c8ba4ed3ac0071641122b16d05b84869f85ca1a38550a13545f00953488f1755c0a0a2882c67b8b16ddb36069dfa34c69d5adb60c16b63062604b54107edf9d84c267604c00e1534a81933c31837384025893588a8e104356e88b001501b6a7094213341d334ed7546d02b069918470632bc3486363c03586ac18626a800a443156a4630051870c208ca82e58e3848d3344dd3b42ece0e150d3f19705f9b06b939b3a981a05a8b94a8689aa6694f4c9ce93a1b5c8013080926b0e081028aa127f810bd71e60b387f76d003e80941fc2710d20d7994f0b30a033c40d1d1126d5adceed809c103507186761ac4d1f204b7f14329771acc59ef747738273c67de0a30475c0b52101157ce9420c4164b98a1031635a871050a2a73d830c34bd4d003183e90c1041366f01473f4f031c3882cd658b3c65421cf347a02872c4354f1859d2fa838c28d2d69d238a3439d1c8480e28f1a52fbb36ddb06839f5ae1a881059c7166a8321b0d9920408d070dd145106fc478018839d786312c2401c6202ca6786db48a4ed2073ac3e8b702bca050810c1762ac810344ac8d9d1dae18438e102ca45045e6ab9ac14b638c9a678b37b5562e438d2e74a8c2091d702822e6260a4074c80082428925aae650387cf2ec40c36917ae9231b10307665046d334edb500c3d12774d2d07002186a445147db82cc6b70b67861c7d5b2440a512c01e88b225eda195f0ccb1068c4f8a2860c1accc022873e6b9ab8c1063332146af31a2022357ee61531b6d0628715d68c49d3a4d01f1fb43061cb0f6cbce143e1bce9634611732aa7cd992f459e5aeb50a069ce54bcbce654a3d33c3c177c96900328f351400e1870b4e0018d365654608597146af892c60d74926833411969dc0377bafca1820b3536a8d183196bc2cc79a3ce0a5b5c71c99042b8577d5a6bad54bed1344dd3a8bc795191c3c4187d03193d5f9dd65a955439a30d152baa9440c102266c81850b6d00e1468638367cd19dd9fe34897fe664e1a64a17308a5042d01073ea2021e78f115d8c6103fd6aadf575822090d3a0d65a8b28971cb123eab811268929bed0e10c1d4084e1849f22d2d8e20d98d73431d46c6484f0d369f04380919c531582362c60b0cc34423ed8f13e0540311eb880b1218729d89411080c198e822e7240238941587e60e115061c9a8406dbb6714e2f585ec30a2ed47ca1d2660714b6e0d0470d2f39f830c6a0384abce1f2630318368841818525cae8e132f6b040430c5ce8a9ea0386e6bda6699ac6c66c3631a769db05b5e2f85a6baddba3c0c39e144e708387405ec31183de0001c68b365eb5d6fa05172b640146193e787993420c8c183764e860b185154fccdcb8423d2ff4dc24298029b44707316a30c38c34c450a14687362b1c81c49c1e7dc22040ee5b0187af0e56ae562d0cf00043276031c6cf0d65acc04187291c54e032c60a17dc5cd105ed4d84e3f48ff862ce7462952e2e44f145081d8cd0d478638d2f5ee052a606335e9a1c2e2ae0428da669daeb86391c05330419366ec28479a3063855d2c4c1e189d7b43b7ab630e30da13676c0e2a56d01c60b4b10e0ac58cad020ce952d58662b1f8ea40e7e280a43ac51841c1caa00638631f42041a60438568e38638538dc0a4df0f901cc242288ea4387c41d244424e81c75d9f2db061e40883644b28889220fa03b29d470866c4e0967bcb146883c70bce0d069f14db439e2defcd0860e5e100263f683130170024d0a5d7cf963e64a1631fcd03826626bb0a091a5882d60c05042cc8b9c36b4c8c172a70b3f58744f4da88162862f427ce181cd173775500061f87a5cc16282171b4ca062ce6bcf1368ac3498312202a900a6109e2cb24843042904a52964258c405e5e9bf64417a42bbe961510a883861279aa6ce922852a33ecec61c28b37e49041e9f469595145c7a6dba2cd38555f661ca76168df2ce6c5ce9b366bde08030b1582e811620d0f3cf409c38c0f308ca1674d7f5138f963e7043745e83043a0980a5ba00024061880d270237bd3e551a3a591270d3e3485d9d442246afd669585382dbc2904270d12258c50820b60bc40424c0e3b1432630e82020fddb66ddb36a7626835c8342d83d945ec4a18347252f0410713a87871a5321364a071451268c460039a571552b870c4173e6ae6546186083d9829a387074072a0a0c3074e1f40455438f59294c4571c5f6badb5d6ea2087029f0a421f41627620230e126d30c539638623ac28a4431271e428f1da9d1b8ebed65a6b551c6d00b56a51e0d9b66d7bc9ced4cac70d3f69b451850c83ca788d475f850667457bb8220b26e6f8c122cf6b9be28a4c088e89b903f7003a5ae0d9c30215616811a392674b991dd44093850736cc746ca479a597a2e3c8d474e276c75f7bcd8f5a08bf1c20288a2d81d00c61859748a3cc11596e30230930be287060fd187c34cd3b8017940c199841adb5562c41cc26e6c8981a2881620c3664b8fc10268824b09421238d3067da80f1c212080e9636be563bb5d65aaba0394f82ec884ff4b03d318447a7ea6b0d0740460041dcf95347901856e284897591610b4262d058a18437af384bbcb104c566e7cd6b4eb503783185cc1946d8e0460d3b81667990c0010d3851e85153c7cca76901784dd3348da3da006aa89ad16fdbb66d6a64737274fc88a2065a75b1daa3eaa35854efd1137bba89ff893bddc4af798744345144a2cf501e9139cac99923c54e03f1482c3a6242c64756b85ad8a10637e6ccca0033480a324ee8410525ca18e2892760d0344dd30eb06ddbb67551339b98f2540c27b4b122862f57c8bcc6a3bf627b4287df1cec81501b3f5061236788422f3af322e1050d629a208307880ab6a4e9326850153f84e27429e2eba2399102196540a182134ee4a91a64061979da48e20f175a1da226bca82ac3843a6eb4f0058f911ee27ce105193f645ce062859e11b2c34c68426cfddbb66d1b196766136fdbb6b9693083403f6c9b5717c2088a83450cbac467f59c708295302ea029424cd705a132eacc310207165e6f58788d8c394c839a0cea7c91a7900c5d6419a3021f17866235a8a1858e1a3c55d630f3d296e82f402d205757d8f3b55607ab09b5d65a6bfd3182408e4f1a31c2f0f2a707165450a3aad006d73191c5202a296cd1d3e65595a82a38f1b5fbca39d11334307cba89fd742f3080c4a341af890982f5da05d3ca572beb6badb5825c2d84c6d75a6badb32a32bed65a679e1d67a05088893f847a00420c32b81884860c6988f1461354b0784d4bc206d1653259151ac6986ee230ca7062109e9cea049b3074aa7421e38b27723013260e1561f05c31e80670d00f2d874b63bb20876fdbc2dfb66ddb8ac41d5c30a1ca1e32aaf6bcb082c20831f6cc7153e78527e47c8c44085ec8c9a2879097236662147a5c9861073b56c42974c56fde6f338efdb367853335a0918510e7c1328511720871d1439e274a2874e637f13738221d4342c9c2e029f4c3173eb0211a31068f0f5eba28414850a1efb559ec0516c434e1830d368439a39503196e4811041676bc6ca0e306990f6a3615c2000f10459e158ca05d7ce834c8c3c76955e725083152809aa669da0bcd1c8ee278934317333b5aaef88953c312afd5916970c50a50c0f9e20413785e1a88dd87abe0d75a6b15c3cf6ce2efd80d37eccc408511794a08e3351efd0a526870bcd832823275c4dc50e7cb175cbc0e000b23093e570451e80c1890d02893268c13cc00a3861fc84c385cd28019501372701339148221891466f8238602f4f4d0039a1ab40c32224e107a5e5bc3006abcd65a6bad7582afb5d60a72edaa150e95335f6b3800909b428a34374d8c516626830a385429644b747133831630f4bc2a1c990d5febd7425e7cf5be0ef95a6b11f5a2229f552049e0469e3e5c644185062acca8c2068d2bf6e020e7cfac509e9f0548f3718f51d434cde9e69ae645ada4699aa6719ba54b574c0185126d30f1a5cf6b3c7a2d0a17a2f0e208d9a01ed8bc34678e00af695abd2015fb05aee620a8bb42691431fb63849e2a5a08d2069735eec8b800142609d92a092f4542389103c524e6486e0a296233d8104241d01a65e40122043db8a003a0384aa061039c26f8847054b8c339fde6ae1f2d4494c964545e454a454757a95df49d00339b98fb2225d9c71788474fdf9f6e7794bfdd9163ce3bdf5cd4aa6f7ed44282c864322bafcd9d87703d7e73de2cb795206ebe5d2e5037f11a8438214f6c5ce9a67af44fddd9a27651e7ec2a8832849821ce0e7c78788d47dfc60d436d1091839df8a3830a2dc4f122839b1706e2d1287e11cfea3c85c4ccfc51e28d2d5fb86841e1c79e16c498c1a18b306810340697c67601a739a5aef953f314226a77e4846ce0868c126474f8d24516aff1e83717a710961e2a82acd8f1b24513af6dd096df7e9b09cae2c3dfdcdb6900bfb96b0aa1afcd83dcb109015ebb62bba86f5844165b08f7a2ce3da826eb1073e4cc713367a4cf736cd09e6773668013049b59a067ff9e677064e89e677058a0cc73f2e439adc8aa171b9ed3320391ddfee3db8fd8fe68a710d87b7c3be7f9fee671d4af2029f49c734e6e4a2b6522cfd4b829e38b666270379a6f89f8cd4999af52bbda09386324121288bddaa74cc7326f091bbcdafb52b5f44f0e809d576c01a53e7e94de639058e5a89ebb70b69c574bed087bea75ee00e8c55d19d701437dec7efa78e7f0023e5e4e2144881716754a6d4b73bea2857b715ab8d7e66c472a0f5af6e2bcb35908f0da5a50f2ccd7abdd0e36e7f7407c719a76a5585f6f1ace19cf07f931f6d39fe6739be5d934725fbbc1083143ad16faa23ead07e28b4e6f41793faf14ebd3d06e09830b7336a0cc0bb34a56604648994ff6f38e52c678e40b9f2c41642ca26c97e449017b5b29f94aed920e9331d91bc8ff9aa790cd4751db2ecfa6e93c9be8e69a4f6f8e48eb029d6bee01e71be7f57ad0b976616caa77d767d384e281e6dc8589b3693a7508f0eb6836556d7a2f7e6d3e8a3ff9a5597e513bbade7e90d953864f3e1d9b783f9d7a3ffb37ef48bdde349ad39003fe345afcc566fa0c8d744fefd8c1cfd97dcbbf636c94c0330fe121fc3dbbc750f0494591df5d26d23bef41ce8f0d453290ea53dc4b7115e89ee75f953d6a5ebdb3ec1f67803a78e7c1afab60f774d0656804f4ce3f0aca9083cdbfce824e43239c4b979719881cfb76fed9b13b29dc4bcd42b267dfec3825639a6c313e5622d23374beee70c77bb8928470ed9f1fab94526a92a5e62c7d4a7b96dfa39d2a14f629cd08926fd7da59f665fe21ef382593e992d2331c588124b2cfd71eb8bce6d3837ce5395f79c8f36390afae0e2ad04ee3110398ea8fbce7abbb2695e10262474c0ea64be92191e9df085e73d89429541c5557a47d7277c77626dc1da7b38f9aa6dd29dfceefedd43d5d6ad788f4f6ea4a62d16c072eafd9fa623bb1e6f58d42859ec32afec1ae5959f51ccaf807fb536bb665cf21545379e93d01717e3e9687ce5e74d44e9ff770b593e6b1f76ce89c8dfdf77d9e4f076d8bf3cec33f4fbdf38f3340a50e22cfdad079cdbf366f9e7ae81f076a96faf7c5a466c7ead3bbced64f82f5f3073fd6e74c5a4636afbe6dabcd08b76dabede3fceb3ce7efbc5b84f3ce3b26d5bb0b3ad7819da78547a87b9749f5917a94d86b5ec323d43bd0996847a86f77d41cbc9df3d7819a65d9d959982d90af2b2ccfc26c81e6f2f53441eb5d29d87416cbf2cbb3fc634c6a1ae92e93d029111e63c4d0c7cf678746a87faedd31f4efb63edf3cbcadef729e6fdc6684dbb8ee8e9a7ffe31f1fcbba3fc5173b0cd9ea7fed911f456e7dcea6e91ea9f7f17fcbcf3ef3203b952b2aa73ffeee839683f7f4d3e279f5e3066f0ecec1c95675f052100958c790d6ef9b89df8e360b6902b9e5f6133fdeb2ccfbabf0627d859e6133280864726bffaabdc3f1710fbf2dc91200cc8014fcff90c8d34eb37ff645d8d54605a014fcf79871c3879292a28f077fcd6e10262303c572476e6a592c8d56aa43af31af38f9173b980d8119a4bdf38d0e3ee28f9f575a067f9d5597e7508d5ae5d6fa4fa1ccabce62d5aef7947eee7e47669779ce111eaf3994caffcdb1de1e8a78e5ebbcc402613e9d2a96d191943f0edadb526cbe10a1b376bf8d421763946644b3f045752889e999999999999190ac7adc6c7d36606a26daeb17b3c64bbdce6d2b72bdd7b599da7107eb5b776c47b76efc8773d06d2db66a5ecdb99817453f97a451f62c3f9e41851faf7b1ec41a4229797ce3d3e6aef57f9c90e19007a5be9a065d21cb44b971fcb1b449ead29f31ee779ef41ffbe09ca9003ce3b67f2b9e7792be4d0dbf6871b489981b0bc7adb95b3ecd83e8a45da5745da457f9aa26d19695f79fbeada9611efdbbdef9bc440666fde5308bfa6b765f96a0b8f780f7a120f995ec3232d06321dbc4952f61c7220656986fca9c52964e84ed61db9d79c49bbe7633b33207684e73df547db3b846af798ac18c874160399b2a70c643a11a98cca87dd175e963303e94296af3a3bceff7cf5f994f6abd04259b1407f6a16e8ab10f4ce8ef2bf1fdfeddcf3b6fccc7568bb62bbb47bbfde225ff5e6c227c7acc1f263c4fa3c5b2363062241f79c93e59595ef48c2735b2993f74b188621e89f87611886ce3dc2bef27ddff77ddff739f7f8dee8baaee37cf3aeebbaceb947b7c6b66ddbb66d9b19b6c3b6f2db396420956b5775599dad9489f46bf5908710691ee2e7eb780891c9432ef83804e2b6799c68a8c4c955ea23999a4461ce213443244d0248331640303020140b87f33c55551d14800d88b24c52469306434196a3208661108661106300008000030c408a398ad600bee2f76699a64b19d322b38210575da53fca8b3c2813dde7acf76dfde7aae1f7121ce521c267e40b41afb14085cafb883c1ed6c12b4b548da32e8c240da96019d65c9d48d5aa918fd6511f009f9abd60afeb281acd6a04eb060d05c6745c8ad05830a7fc9128e3ed767d234b9f82039979f2456ca52161dda359a1405dda54468088db03627a34e1dc34bb24cbeb080970a024480559eba0d37aa540bf56bb256adb2c11e843c66792a45a1e6a9a81bef8572b60f7f8c33094ac7600a49dd691abc63e97165d9395c763b24689d6c39eb4de312814aecc8828f6a043a24a22ad6c2512dd8813b75dc86309b5f60d4d0c760b8ce6ca787b5c04902682460d372022a8de6b0b496e0e4e1493d93f5d100207deec71405783a531d1cd12fb14ac2debf994129472d08623d77a7b5eeaf663ed1499ef39a825ea15505e105d193abeeac9ef1c94b5df6cd18d5f5acf501a454d927ec2afbf9f1afa99daa14f0348c6591c18477ff08db5cdcc8f294954e59646e2a67e81b47fb57228b967ba7a94f6e4f713a8f45e596ddc7c097b9f758bc5353e18ae164a1e98fc2fc926c6b954d4d04ba2a9831c778ccaf42cf02f6bc241e285cd2661a5504ae08cfabfc6fb21a1653814bb202f5b0b7dc5753f6aa8901b3e96d2848720f124489d31ba2043d6b465fc1f08f25300b1a7ef70b8e7149ec601d55b0736c6982e380bfae8e65811bc3f5069ec21c580a47b338106c6a0cb2debc54713411780a152e40648591ae07a5805ba7a0b3e4907ef53cdc4d0db75f532868e2652499b9c986a035edcd47df57ca7fa915dfc24ea1f70c37764b7c7c4d26b0f558bbb61ee23a6470403094762127a16aef287d8d64007cc9d8f51e1ba42dc5624c5c6b0618899071ff8c613cf662b0eece892ad25a8fe9209d6e2d36f44a936533b6fe990e57a20a8a83be5d7d5949d10d2c01a0997e0a6c65daf58fd6ca537d2366d5365993f079fbd0f74d48f454f80dc4cddaea1e6bb9b02c9e2c4835e05e427566f8324daa64bb74cdb6725eef9ea1a3c92e7ed69e169a5d85d8f2c9e7fe690ccef2fc69bbb9849972928fc2625074c8427fca35a69682683102c45e071cab34010592f57df6d93628b53e057022b5be00581c349b337162adad44293a4e4c8718ca5e3aa71aa58d1ece634b29a25aa1122c7eda2e366d02dee72513ceef691cf8310f0290da9b68fcb4bc29319040274936b8d41eee1333e81126ab6408b324905329358757aaf31c781d4e16c8aa5496aa35478ca637ec060f8e5c25951f36bf91d5f361bb545dfc60ec026e22c0e45f0453f391dece9f56fae7b75147c38a402e0bfb00492cbd3ad69f82500fd786c738b9538c4c46b0d68f92c32f1e136974f91c73c9f52684396bc8804b36921b0c6a89145465837114bc22fee81cbdfe26f436b8512191726e4a777b3cd2460508c89639f3da8619a37893d582802b10ff1261b038d28cc3ab5c20aa6139b12af4b8f11ad89e216b9077b135d7dc2f7a6185e348ef6f7fd35de87ea479e9570c6536bba2f40c12c3bafa8a13e62831d7c2d0fb87dadbd9e9e697005a2fa37eef941210666b84e716705909683cf36e5c36b28e0d1eae4fa1e495c776f148ef8b8f834d960765db875e99d4774472345d79fd8b47a0d3f121952053d330fc45c381dad3a477bdbd4f542a9935be16d5604dc7d5180a45cc927fb87cdae173f732955a941503a1171c46c7ce4fa2dcb5a5fc0c3a0597c4ed358f6c486261acbbdd1fb123cced1e52e091b647145a00cbe06d6553c1a1a577cd113f7fd6abcca1c5df3aaaea1503c359b41331791a544088da44b15dfe1266decb5a10f7d443d8aefb062f22ced6d6ffba648da4c8bbe4e03c2ec14ca8bb4402e175054baa4c33ab3caa858b21e2c9ca01c8ee178c57dc115b187dea51ec3b1c148d06d943e5c9e61dba7d8d48bc4b6ebf4857fdc2500d85fae1e9dfa30faecce1c94de9734daa8809897776e9fbafc97f456807a126b47e2831461146637af48bd0c72c7fee7bb723ab3da2bdaf9bb245d73df38cb47aae7c2c8bb8ad1ce446c88b225838a4c5cb1814b4b9c413fe1a28c88fa11991d269b03a053325ec80e81e4a53fa4a9176f34190d2815496dbddea1554ffaaf8104c34c539a26bc12ab916ebada60a80f195c773ad7da44bc761a6fc932a14f519abc4c58cbbd61c54840d3cdef2462605f201be62cb71c6dbe8a64d10cd52aba9b3c094907be049f6f8f03ee9e257122907446f88525cdb2f27fec49d20eabc65b9c6e45e00ea4094f6dc48682f7d5fc0f6b46e8b3d800048de06ad591ff2883f1fe0781b1d0e5840b4481fe8dd54ec2fba27f7445db8574515ef608bea917a28b80523f58006e284b4a08faf57d0d28e929e523329ac855f8c89ad16775d533d491b1615fe4c38f432a2a9fbdcf4f885d8e12ffe9babef7bd41ac2ddc39c4f9cc2d3216578448a053ee2d3821584d57493582d1402a416479c29218cd2ff83e6ee3e04709f159bce648f59ca289f544dda84c1785583e8b52ad432a72d26a20650f664691b35f1bae07dee977a11ead47fef231db23bf8e5ac6da5f9a080f716d700c42d74c2c400fddb5d69e967dc7dee7ff783468f4cbfe75edcd32534aa7908fc53d685109559b58c4545946f55b215e3e5af1a3c8686c4233f0dc9e36f44a11b0258cb4a78cae49b40247ab1fc5ac2353097cc172d95696d91063cbfa05820d1d204d69d121d2d493534c7a12e8f0ca9ea6c4cac9ab1d1ec5b198802782025af531c8b735ff4c99a08fb8ac32fa39894c0c8b0f2f69622d65035e455419d7c1b7ea341c0c6e0ce13bbb7e9d21448b70f912da59de315fb1c12c131a3a2ef48ed674dc912a41bdf784b9252b401068c52c1a71f127851aee30ee8bfa8546f4853435f9432338f54fc730b279baac6e6a40620fe8337736dee647572dc4ef6678ae5f0fe47754595a0f17d17299e64a7d1e6ab0080c8e43c654146384540ae32660cb5ab39c48459f78c73e6d3864d270f847d1eff131c37f3e250a263800980272738d5bbaf431077dd8791089da66ae01790282422d191c56bf554cef4db44080cb8b2fe2e124c04afb276182317dda7304ee68f50d0d8a8230b05c2b95415d10e17379783311226e7dc0b92e4043648801a831e0ce09c49a46f3ab5db1e124e62d8671eaa8cda8dd90e90bba601d40322b990e94ec00d580b428ffa2fb71ec966da900ce8fcc926ff9919df9d9d2e621de79c3e37b3e67f0b4f8d1becf7fc3010ae35dc3748e5c78e8f4a3df1dcd4f45c57ccab6c01219a222c4a37db55b9931836e526356e63344f54c2932c643183af5957337ad2e157fc40ba1af65cb6f201e803a5f89a0088380105f9312f4498fc14e7a5b877a2e20828bd41903c8981f4f079c418def5d4fc420d1ba42e3244f034133115f75887cb81d096a32a0e526e20f83ed89569bc3350abbb2a012a8520b10636b808685a9c3d494b5b0e3632f9649a410c3a911f2781399851c8141dac076be682b46ee92e2ca6a09c15d015e3591dcdaebda9b644bc0d071fdd52649b9a10ea4c4df90bea630d1ea01a18ee8aba364be3c3a18da65216be8bf9e0ed20b74b116a09e3296a2be45e7db80d0088fd285fa102bc63abb67b6d2f3dc93e8bff90ae9bbc8d72af66e694b2d70640c1cf9949d0371aec79d0947635cd2a30194f13dbcb8115abf86ccd15ff08ec5735f43ae104be5506907563ad0b4d7f8112e97e83311ec0b9a9b6b5bf83e5620b316e2c29b3535010fdc9a084adc5bebc0c26e7de0e968961e28d1334a420cd91194a634f4b96d4c34f880ed3c034b322601b01c4f9e636234ffebac605ce29ecb39957ac1020bbe9fe52164e2b899d3035a99f6ff0ec110c20c895af1c3623b27e2a56f111e849ee5630b8961f65fc8ef6b9d8119dad18bb81ba5a5a035c744337dbadbe026b33a3221d81e920d52c5143919afb628905aee74f88e08e813f8f9e4addc35fa8cbf95534c2492f0ac0837021ba5142a9b5ad9f026a9c4e4544deaf54f714d0851ca6c298ce4fe83e8896326f55a579392a6702e94746490b8bf78016620404881695fb4a1316622bc60fb93d222696082109249892d390e101a7a2d1b30306d3d0ca881683f66708300145e16516835051df0a158fd9f294ac68f0b14965b2e4b6f53a90c0272016b04bb4e23cf8717d890245f74395ad32fc77df68e819dc2448d2424e54fd018edfcca993ad5e40c8791119e1fa131bae76b7bd5b8935b052edd79559c137360597c64e567671e5d130906f907a320cceaba24150f8e2d8f82cae0a0e59d8a61acec5e57975cc51c1e1a49c3fd0605c1c1aaa39b93f90d00b88af18057341a99cce3f5e541332dc8d2a6a3df844362fcfcb5c55617b82c47c21dee8e9e2271456bb3a92e74c851e22515cd794ef94670d78bc7d11e93fa9c2bd0793b27ea5eb7a1885ae5a8165320cf51e407a7516cecff4d3f301f47fa7b2f8f16e0ca6c56ea50a099c96dc3f97506c412a6b7ebbe1adcfb3d4dc1aa449bbb4372ca8de78546430e8a01f67595d13e05683363eed1b0ada7b1726721bdc0bf458da4e3492267dab5925ba944b62ee2c3acaf52844610e42379a9534a91c88b887b56bb8c21f95edf7f322cdd69c423b137790774c1a87cc47b1d0ad5ce1592ba2eeffa9eb7cc45f3ce3cc0c8ea94043420fa13ee4cc3af43d2930292d834e9f33489bc3b7904fecc53240dfe972aecc82ab67a364784e4036e7d960b7d92fe0c11349fc40e0f176de24ab5bdf7e144fa91c25e03df1b90cc2bd51a6ccb06e81816978f091470a64415e7c90ed6c9111d8648d9224f14e648449385c87e19e7f81175e51d18fd7322141494612cd6c9ec81e644936ce322a760a8057a3d40a6af352e222f5c08597942831bf7a57c35cf30d351eab36a4d501a98f28238b836d83828a8a664a6d5b86b7177bc219f8c27d27b94a007a6c1b0abba7e324931d2e39c835a52a08b5fdc7f0bd53039c871fcf93bd43bfea355e1075b703467a2231a761165b1484cee7800f45a21e4c76d27333b843c9cb30aa1fcf88f4306c485f08e0e5c0463ba670304a3f19d23a567aa4d9d79e4740dcfbad534f09906cf9a2c311f2f241d60e25658d68b97e6ab3bef6e7ab1ee89ddd9275c3e6c64d61fc2561169bb3f2a3feafcbad2badf447aa66bf217195a2440e3ba785974cf8d62f867b4a0cd37d5d3d7036c5402e254148055923ddc4097dcbb242be20faa8c25cb5fb455000f5193944b56245392b27ffcbfb1202ac0c01a3381b36197fb0c0cce95ff46d3d9a9461a4ec37581828d536c6892e550f5a829311ce7e647080f056d9bc96b94664d3b1f0b98b4d8b91a9d69f056f7c4f9cca7e23fe22ce6c3ab76310483c3960788f3494192f9a7e41d81a057799d5d6850024708632200a015d08e72162020765c884df8162a186d9f06af888516f77a53d6208726481ae2a5456be99cb2076b779955bf91d5b8873f2488fc863bf61784aabe459625f10441b152ab4d492e415200064b0554f702702d9170314da43b78f84aa0509253765b1849ef8fb8638e66f65cb1745c3e07089e3c1f601d0687e926934ce361fb3db4f08e89244726486b2396f5f9d907d61326c5963730c3ce4566423eded4bc90a51dbd2d28f5040abc6129f3fcb829e5ca8cfd11f3dd486bca856016d40c12bae982f9d2f39c91a107bac0af11449a52b01646833dbaa418cd6a8f9ff2adb6c6eedeb81c8bfbf4a7c127c1d4436f42d09c0096eb12ba72d580cb3ba7f1c428c9cc38289cc92b2e47a96d9ff76aca9a8e8a0f4cfc80d7206982be25686709a04957cc4684da552d285a28535b730ea7dfe1118caa35eb7dce13e26a462e3ac883c200f8a9259c7ab048225b263060a752e0b3958e5994decae3eb9c3c0cefb44f0f314017d4657a4d3b1c1f004ffc23cb41a8a3c730f4419bd934893575db1c17480bd57cad772a904c8df24d972c9c8d1f42fe2a5cfbb2c913c4ff73a22f6fa59353aa4cc563766abbef2db05e38f7657eb08dfa2510514cb79a0b127ab144f4d14be855867b05241a308c1d8d3d4919366ef5f425e70701d61b201d5d38ea671a5249f554e395edde984d3c962c76aa64471c3d2763b702ed22ebc1c426847b23725cac77b5f182e6f947911da6b3384cf1ba67b5c67df396a4d157e5d2b5ed13de319d428c7e462bd38a9c9eba441372da695985362ea7ade74d4c5ab87a91fb54177b6e76e0b612ba7f8b646165cd667a2880f62dd68e6d3e3c0a3710bec093c3b9bb027c590220db8da828a9a71a20389b72b46c930b2b7c81d979281ae6d33898d0b6c4aff3a321ce1587c791875c5d24290b22b2cfe5c80c9eb0676384807992aa3beeeadf6ae678a1eb9adebd3e0cb8d4ce2c1d4e6b3532da28c2ed88268516ad1176229afed97d07ab105f92b1fc938d9e948434415c2714d3a207b2ddadfb18df196367d9244582982ad78dc81ab1d5c1925ee42433601298d8349b5a134325f2837023cfa83d9caa884307bcbe9c71a2ca3197b1e426cfa58f6410cd4b43736ee434ffd5a6aa759dd1825bcf589c927769d55a4a6b7a21a04d24d806877ba4d67dc9714ca5049e9b5e5c898cfa8ad268afdaf3d02ee4c3c79d0fd85ad644f9b089197eb23ee609a8d321f7832fd72a7f2708f8cf48e242f929b56957550fd842427ffc3bf47a62f759290e900fdf69a27dc8e8ffb51970070425b06c1313a42f145a970a388af824f3b88b72382cd6325331ba2cb5393b9454f032a2b311770595a803df17c95f9bfd0281863b12297c3bc92bcf703e803e3d2c166c7647b322c1752b94170d5ec8f04ecb88561ea0bb1cdd952045cefc84ad045e7790aba712d265bff2aa22b3f46826dd203c4304f4b12b5034b49933c421b1e36412f6fcf062e1e794e322da9a5429a7f84f33b8703a516ee9ff23581d574124701ad5131510fffd70c532644a8d0844c519b9d5ddd4bebecccc027794a1880447b3a95b5e363db95c697961737b29b368a5cc9c52c563a5b8fbbd229bb860518879a8e5e467629961b191f899580c4576a92489bb7952d37b49fe4e3e487f4030881d509b781aa26f26e16a58a15ce85915ff5bd4dda5497a6312809774aa058bcab8b891b52f22e21d56e3618c3009e102a6a392c6a00fb224a3ec9866de38299c4ecc80b527a65c38c748be16486362ed1c1007ea69803d257f4f729c70f6c4a4b995de2a73cc5c460971905ddd29404af1ef388cd8b74338a9a646ac9a15cfa1078208765f7ebcae4c3abfa4774c0230e1c77d336cb79bcb2d809aa1e386291de2512d13071bcd14bac51346471dcfc6e5f81bb45fa3513987ca7820248101bd841e5e3a028165524d01b7d3f144996e2049a9322d30c4421305a21a54e35b86637eba3a6eb40a4b46d2c999e3db098a44b2c049b156b24f9a2b0ab3c6a517ded7b28ec7d43831220c6dbd49458d04d28c8f1e741cfa92263c51ad8138e957a39ac2c56ad18132ac19864b3e4cea1abab89a8321bb25ed48318a1b2d5a4a7c0b862e1bd469b9bd34c6a7157959c7eb540812e3e13a8c2fbdc8c77bdb4d2b02accd4576f94d2dbca8f45945a4390234a37b285d2a38b19e9acf98684d802be70c5df006191da1561bb29bfd8dd734a76b22662d927554c2f549a7183550004d961c22e9f58ff8848cd631292378e514f21a4ac0b701bd803ea3e03f4b745d06ba319dd0affc531a235f3b547ebb608d27e1136370abb16ce9407bd69562ebbbc417b260ebb50ed1c4ef11130053dea3ff02f2930f55e4161ef39b57420a10185cddf3e104a7e724889c466337451ce44c9e374ae99e9994331de9676750ed96f5405800e03ce072fd428771e313a4ec3af41a0eb844c55188495ccffa56144a690c9d85ef922aab3e90022c5d62043dd071b5407d0abb797fdb9999e16ea6fa05a9be09ab2270e751753add2c293deac3acbe7867c9198b87b383fd9d04b7a2577a81c5f97419fd3095c32f67fa035445e7b292c3a22ee8f4c11233490bc9efa0d020c84a4943adb9cf1cb199e7858be847c6cbf1443c8d09ad35b546d284d5414996bda43d2204799abb13ff5694cb29a3ac266eabf72824b5e4939d23e40d8f35e7069e3d14b3a010c4070f42e17f21f706c5ff38dc464abca7ad6e839eb618d0b94299301c4876c6480ce2a7e4e03d0439568f44b824b67037b871d605e785a62bfd236238d65af7f04638c0c1e96b3c63a9a9df102ea4c60251688c01ed5340ea2064a0694b69e5d80fb87834c50bcdda1b007d0d169c663e25e3f339ec24cd699eb23a73b6bafd37b5d70a389bdda4249fc6a084721835f0603664c5b77929fa64d4edfc14e387c616214e3ec66ec65c244696cc5b73130b9e92c88d788cbd6a7d15b97c134c347b0ba8e8ada945cc381831d904070e78d40c912e542cc3a5c282c4474ea4bde74d891a2077353eadf9fdf8d07223547eb6988f57a07b552adac1cbb019cd6119b3fe330891cc788902413c29fa43e46c2dccd3e1500abf78de70098d3fb459658b1bb23177a1816e71c39ffa1740c7f10806d72276fe15ebe3f659b36d23e27c9f1158327cc0afb478c2f6d0e523efe5fdc85337bbe1ef1b783448f75f26077636a794cbaac188d4219330b7c2ed4b30f0f74b382f19d19455cfc1a71c8e1aca696aa1a2ee2622b118d6f38c01f9b2102c8a6d9bb31fb79869805961c59f168b7053b926408655dda8da6e5439390943baedbc946a2fe8fa1378128abd0e8755138391fb233e8c4e974fd63dfaf390db4872fa6e2e64a2a14226c460cf1057b1cd4eaa1a7372ef32effd00e82889ba416ad7c1798db4ea4b0ee3ad5bf215725eabfb6253303492ed856b97926ac477c9f4898646b400fc40d583a4441aa7e538d0cfffb4d1e6e17ec2558abefc325fb8e1b10b668720f870c8840622251269118d34a97dda05ad091b3724b931db937124ca86114300a60a3e61b418432fb83848cfd6f3db05ab1e0946d87ad983775c57781c4650dfb4fcc1314d70c51e8ac5a019b49395e76e7327bbf0f009070286caf50701eda260b6ae58f9042db67055734abb2b650c3e11fbc60a8859a1618b941cb7c5cbd65cae260275b92b0073a0cc086e2e21697711bd6b96966fdbb05b257a8435e158e2722cb844a715fb91b7fb9f3d423f6d55805749570a3aaa26b6472094420e01be32dc5032665c12d071a0217f10d7c503853cfc172e6d264e58bb49646e731ec21edafd54a712ba1298cc1160c4a0e69c0e60e9d714fa5cef55f80b01625cafa610b0fa650aef170349edf5da572a00f6fc8a49f76226759be69d7fee683b34896d6fba75f096d6b773ffa55ca8184aa1cc31940e588aaa3ea45df8dcadbdfbf18ed5dc1df37d96be5d6db7d749400e94c6eb4111ef8a561f0cb65527393b29c41bcaa0b9cbc00ee717b3d81a41f317839014d5299a983fcb2af6b0ea63cbba3f50f42aab02aa6e3a986705d37d94119cc68a0bf8bb6a29d1123f307845b87de87cb794133bf0021191270d672410cec79f4358241489ae1a02e27d99cd6ae67d6d9aa90027691ddb2291ca77e4cd91a20512604ec24e231c10bc418c76b6ab6bb7068c37d6863b0ed8367bfbc104d5b48de13cf13cf0688ece56be67ee0aa15fefb8caa336e830a9c6ea143dda1701636739909b8464faa1314ff7e736a023207c934e8c45bde6980ca3ff640257ee7cd9c591269e080feb073276782e42a1a72a5b6ee5da08e1e7bef8b625696e9e0c691496760b9a8a6829fd6ce8aeaf227ab18ce788b247803553a6b1c9811c04aab25e6176d4ae81f12d6320e64bdf9add83e5210cc463a26ef6d5147a957be2a581398e431af785b28a2a794e83f55d664bee30e4d2a15f01423f07a0ee683256d78f56788b63184504eede90b621f1e9dab5a8b76c5599c0ee32ac6c05c85887f78aca408d213843e18eb1f6b359212cacd4530a6f9a7dc563db6dc810c176e1fdcac4bd2fea5c6f616852994244c77645782518a0b920bb965146e039debd0e60a12345f976aeb5b57cb243d5b111350ac2f864980bca867042d121da5239bd2753f76c7ba2bba72d85df577e223bd475487ba74bfe717208d02c490001a07e0b2063c7d42e1aa4fb757b8de817f481eec2bd154fac931103a1a3942c8bef6495ca4c4aa40abad4bfe59b1aa244e8c4512879d40d4afa789aff7012e1f75b462a1ad9aafb4d992e12ea2e43e2ac4162f39a184097a982cc508d1a8b3b37e23c49836c4488176d59b03c4746013b27918736d791aa60d79059002102bd2b8f44c7252177e7c5521f9eb279c200685a5a9b6ed1c3b044bbc3e813ca9d8c0aeaa1b0eca408d02cc04f40e1aa28e1ea624b3bdcb38a83ec4683c7cc53e3e0712d43c39aaba8510cedcc8263968c732767cd08edbb3352929f7a0955c0c978da535e2bde84e113b0000d01324022010cc1a200047a4220cf4957a0400d3df9b2606006625dd744add20a09dcff0969fc27d9efdfa323d9020da846122bd7d19dc6ddbf43d810b2ed61cbd899462b423041aa9c265903848d289789bf9105ad02a491c080605b9e2f941e66c969b207b5643c876eaf66be38399bdd858362e5e1d5623c3ce0019d94a6ac32fcd16934a22cfbc859c29ec6abc6801ac4cf45a37dde934f267ef39cf662cd3dfa3826dce906a4cf21cb9ce05e98d8ac57cf853ad803a16760cb83a284723ac133a863e2f7502804ab452b3782ce47e0375a0a91fb014d6399a4e6d62a92d6cdc9289760403f1ca766268cbca6c3e10fe7bc7d32c84425e1cfa368afcdd6dd8f0d876f33d449e82fdd5d6ea77dbec52c36e92279382ec75dc06ad03a84fa2341c659d7d3598365d78bdeab1db174d5f0fb67098e383068788bb5312e31c5fe448c9ea264c778875bc6687e756347a71da8f9452ba3918d5acd3dfd59949ea73a2650e70224a15636e00077c6ae07d6aea7b9690c5f1b3f1ada2fd4d3d662d0829a072e28ada14b8e7a26e51ae8d0069ba78b141be52ee24ae2822dd1961a35a47924b12523b2e1e254007f80df4f9e2be837db83025b7936db3c0bec7b05ae0c90680214a27d21295fe88c754a70ecb040cb979f6d632916036e4c61056e85a91096b4bd395fa033e7b8157aa16eb85bce7f8b16878c86775e8c79c98c4d7aece3babf3c37a58718e169531043f4e13fa3335e93455988ec3f83ce2a15f86313cbb8e62a604175a927085d1d43cd4dbe3fbd0f91c824f20bf99ba47540c3b754635914cf51de0668225faeb6fbebc416abd45817cf23926c063bea64f56f1a5959bb43a291abbacc8a6d0266b5712fba7b622004195b4904202e90b5625b243b99ca96ec9044180dbb6f22dc9c5d9f5d2703e89e1babc163f16348201a66593f552f0c0fae12c6f27b28799960bc7889eda95ee09dbd4c0ad0c0d386a5ed92e09d6ca5b5c5d9d647b63430a9abdbb6894b246b4d94d4716fbd24ceffaf6f192a685129e0c475708e9075e97e27969e1a0b5c293c7576650ff44b6ae45ade253b1b442bbd57af7e2d693df40b3f40b777cda0ef964c52210de683309b62721bf355f5d49bcc5e9e2a8e6f442eb3a2e48b8c2a7058db42b52ceb9a3251a385c7f4d5b114a908823e79917ae66ce888ea311f111f1e03790965d90adb0c56e06c4c5237efe8a8386ad682184718e1e37c80d5e4fb7599646bceeb85e0b110253c3836e76cf503e5a9c6e4a3576d6e9356be02057bb93d65d0545d5e431f0870fa82136f62e08c725df1fb4d38a05e9161aacfac56a06a219e80ac06427de279102bf7916a3dc202ffd678ab6192b939e23c8db9e156768468d59e77d3a2b808b38223bba04753ce2eef48512611e91bd7bbd99c336bdb4bd16fa9f2aaec1a39487a07ec3b127e07d483b6c2a5a08f82b90ed2a8a926d22356b03f398a32a21c7da74a9856c1561491b2b7db21f6ae1d8d7595a10270bcf8247c61ec3393a77c077bd30cec739cfacb9169cda94853a69d71592a5c25504f81c25679d387c1001c2f29403a8dfe2f66a1a7ba0126a58cb595e1b7dcdb6124841594ef4490defc76406424ff79dc56a5e697daf4fbb511e8297878ae2beb8d5b2c4884bfde83ffcc98792b4b41ff3c1dc9bbff12cd9cb2a434a87f9667cc60781653f42230f911bc1adeb4c3ddff09c1177819d81fd5e50cd93b3e2864a3e0467aa7c7072236b453a0e712215ce802daff2f06ff795529098518563ccf0d0421d661821fb57cd8e6787b515d70fb349a59a022ca4d032d83d9fe57619a2b00c104997fb3a66a2fb516d811e63aaf69407d7b3a678252d2388e8e19f6c4a2afe2194531c92fa4f73d762303f971d138860ddf1ae2468416bb1f610a28218a029c2728e0f7f45d3a57d668a97828a0353b21090b37079487a969539c7bada90b60714dc5f21c52a45153f3d5f06fa5b67640be6d3e0ac0facdd33e66525a9a4af386259aad17e183435d381ec4b0da597858b17add18c424deea350610f8fd1dab73cc17b2c893e4ce9dcaa9fb34405a5f7f8813ecedc6b61871c1820527d9a0578e257cf47ecc6e47f95e7bc035fd2935d13805ddf389a29d20813090fe11a711d7d6b5783c1416c8ce02187bbf1d5cd697aa1a6de8af62961197589a319dd078a270aff8a0b5f3d5191f730814a62b308dcc69442f98d647dec0b44c23c7c282a9dfcb3b48f397766ab6acd2aabda8e73b78126a6068a0b95adfde8b96377195b2ba05e8bbcabf402068dd97b13a3393b15293de99978734633fdb044f938726d77e8d4c330fe0949d734457e44bfc9420466d85bee1dbf5fab42dc0b73ccabc9f2a09ac00696073a9149efb68a3c619117899792f8c92ef5ce30b1668f15a8ef1b1b83dc4d98bfc185b9e02366c2451e8b8ec9080dde9a9c891920d67fd4c8837c378ccd5fe05a0785599fc910abe3c4039ee2beadf19d6820b7aab85c7f0e1296de72f7612eea50c60f6b8b56c606f1dba9250a92cb2946ef6b02cea95e93a88131bd18195c2c5464932e5cd432aff412851c20a99364cfe88622141f6873d38181183ca906fe34c99a6acf1d6c8bc536a4cf92cb72d27f3860278c3cfb599cf2bcfe38c66ab3418baa66eca34b25700788284f8ebe6b2152fb56d7a0115b8b1c551f480ede5e4177f8c555bf0b1e313874ffc366fe29c5222d06de7c7aaf3a9777f47a3deee12cba84790786d0352fcb161871a7c95f06a162c97163f839a36b18c448f103a14f0dc8ad1ba9fae576a702b8bd171a1d9070f154fbed3cb8a16000b7c442aed3c5b6a607cbd1c6ff7f87d3d5f45b1d1653134d625c2c38457e552f363c5c6459dab3d2cf9b6b389c0ab544321603da4fff74f5f908058412a1c9def28bcbe08a15dbd7c31d2a9272230a1c4416c33ef0b8edbc560967f7c2d94473d5bd1cba2bf64f0b1974c627222ca800b629ac81efc47a4ab6400d97efa7df26d26df3287b8e22ce7531ba1c54c0e00dffe900bac4c2c437cda9e59edf801e08c58411b53077a10ab4493bc430c9592841f2e4984024937e1919d47eca0f05d87cf56b01d93e221bc072077072dfb4f1578e3e8270e59100aaf8b7b35bb12306a1215ecf7ebed2f22a1250270b3febbb4aedd300618d5f8c1a6a170cc560b5309f7ce3386bf00fa497c31e6c8c373371064d2b7721131843a1611db286f0558623740cc3baa29ee926b72b78a6692f91212a778225086c9089983029766777e8877bd2f1b9e7f52886a502eac8d2d4e5e80126cb3cd4c03d6280b4d1934a82929da3cbd5838b22a5ff733a25d9b77f8204ed0b06df3273ff9e4934af9a46b168fb6cd0f0882b3bd6c786d9da41840367f8f42a8f017aff7186e5c33cb7072c4266100a41088afad1149b9c8213442ea2e7233673ef316c673c89ce89887f91f12340b4f44b499c184036547f93da3ab80cea293c63880cc457d027fc72084cc5b1d8f88e4fa69fa1871661b50cf8cedf2915642abcf287a3735e102434279785877c62948b44a06d868b8da209a5c4b63217592398d2b4cccb4868a44a68bb8ec855d969f62674d252fb1213aedb07680fc662a09694120043f05e2662cf3ccb56bd5cdfb8e70924253475322f97f4aa9491376168506deb0978bcbea9752689b84b7bd04dd2fbd98bd2b4f38a97319c90b6380d03ae0481afd8e4c6326c481c3a6e4df10edfe69f16f0bea70ff876d1d488e3e185608a374120bd190aeb1b09ec88ad0a7dd2832eeb6c739a82d6ea8b8781d8900c2264d1ec6e8f7f102e45f5b971b1cf0736e2d1f4ab33863318a270903ce82bf5a65ddb79d61443f2092b6507d9c7cdab268af05ba3f1ea239fbb1827c2d019afed016139291f7c8f256c0ebe746aa2ff2cb8277653f3606262601dd55f1637b6b80fa84753e827b3466646c2ceca36b6203aef61b0acc38c322e3364ba50699b3c11f581fb2154d7c91e9f13465ba151ba7f54007430a18c0df0211d51081fd594916be86d500bb6814fc3828145639ca5dca543c8fb7e6ea6c04e061a1e6bba78f5c55014c65735a1199fd4738b3d18d32250a42d1178c7e2d1129bd8e5cf1ed4f6b4dc77bd710dda96de00aa673a6f5b402041d2d29f2073c2cf862e5bf8d364545c60da67fcf657ae43374aa3fec1630563e61b5af988242a78ac67b52fc708d91ce62a4ceff490e4ca3f21ea3266057a975abc34e2af005a6496ddc253be8c0ce104c53efcd1affd8dd44085747e59a97adbc05820457f2813461ba852f826a32aaa04fdd58b115c50284c144a7ad847406ec2d3fd86fb78f93638db888485731e2427e169f9bbdad22b5e0fc7f3cea746b9ef2c45568485b3b51a3daeab075676f73852e9fd49ef82153e2b6f40744788aea56f38e014af6e6546ca8230382aef4f34c66c180ef0f100836617b9f0a245b848ffa71fafd13206ff77ec7a5c20b2bc9271b84597902701b20d306b1e374cc602a170c2702f1e0fcb6f5ecd0deb9aea06dfcbacc12c17965297270bcc17b847b05f35b85f97a279885f236734328168d19fbfa6da0abb5894de4fed69747d6d84ec1f974e44b8b3ed093181e865a74c9da6088148719716c603c5f264fa880cef7f6cc4cbb685785c19df3b66c492218cf46bb54cfdb3c2364c09f66672d5298fa1814e7475c3a57043efe8f13928a4264d5d7a6ae611554e7c6355dc152b1557c95e5605d7c42d3e7c6acc066612b3f1db919be7af815e5887d9edfc2810ad3ab9d869a9f9dd79cb47dc9f94dac3756f5dc210066e333e6f9200495636ee9858913bfaf2f0c87df507b1d22b981af272a42989ea2a3009dddd2e3cec3dad3ddb1d36b0824940994cbe73cabb9f2862815ffeb9a1899712d5514a3ea969c47948069126c4d0ccfd6c4656c29bd4cd4d7b2cceae717727ecad484568cabee039f132b6a520d4260df48a6ab482c49b72ab1863b5581176309f1252e6046827da2c36cae22aa5a976f1872f3aa9ae0af0666e6501864e504f4ebeaaaf99665e6d756fcf2cece20e69a5b110b4dd41e514ab5f736a7eb3f93d93640fb50055a95ac7705d7ab97c14bf6903db5558c639cdbe1f665ec10c3cdca88f908b481b557b8a751a03f8a61e59404eba4c40e66c56119b45062777958d4c070a37863328669d970944831b6fe5a76fb9f2ec5a8b09502ae4421934570775c97bfcc3bc26b6f4643762705f82b6d45c5cb5be89750ca3c5cf1008c33ecb400db689c25edf891193bac3306d4b532b60bf1231cb366d28c7411c606164bee6558c890546d6cd28804e5e37b057cd6bbb3f7e8812731e04719706d4372b2f69ec355d1cfee324c0a24d5f55a1c0f00f82c781dabcc3c42d6d35a8ebe6e9949552c46efa529a1f3a7e06890c79e0844c9e36a7f4dcf126eb5bdd66255aebc56d446ca3b3fecb060e172c85d8239371655aa754fe30d589103c79a1028f0112cfb2b085e21b24305ee6e9910a60170c78956f29520a896446bd7a4bc0882aa90428dda0454d0a1f33dddfd28a83b3e61e8252b037ab6922fa0b39c85e9e6e588a6359c41c0db4d8b37d44cefb84cf6bc16adf7ffbd9e5d99690780d341296668385b870a0996d16175f57abfcb09e19da06daa1143c5b48e99acc7a10ea1e95e6055ff86f6fbb42f8102f84e4aa062ef2937a376675418ee26b0594597e44eeab53da6edf81235498deb2b326ef30b99c2f3031303054cb92dae795f0381a82d1557e568185a4894df1c6dfe55070d9321676da6278dd8c45792ab26f7b7bb6796cb4b501ee1940d00ea2cc969cd2f055b36ee6bbc11169918d7fcb9f064c752e74b039689ebcade0f410a2e357a88436c2eb7557179dc89cf435864af971ec6fff4350cb5de0028e54eb383b10e3424c8c6d2d5d89aba5e1a550f89ec470bdb23cff8a6d1f52e4ec475a2332e6c244e049d239100df498fa7155e349573b9378b532348cd9a598b75d88d7836e9225babea9116b7de2ee97c4f986af485e76a83edd20591c53a632946b658e6b676e6bb9a0e5b24e10a7f83b1309d69289824d39d7a731be8ab5f9e8b5e06fecb396d4024da3c44605d661a15971b99e804814c38321ddffa34166f4412ff7e1656b9b2655ad0c113cdb144b56c7869932cffcbc9014aab0d8edd7f3a73e65061aefe4624f6eb84b573c73f8f951581f0a709c771d055780b3728c973972d60259dc5ac26e4246c8b0ebdb54bf9d404ca86165a6ce4361a125c53e22c1bfd8283d5fc6af6164115f05313bbc4b49b6e3c7c2e27bb5ca40fe1e079a174d72ce8e194232edd6215f97ece24ce8e75288438d06c01eaf94114aac66edef8bddbbc1abc5f8d3951664da9bf68ddae38e6a7ebfe373404a846970d3e68b0b7966bd18b461d2f4f8a4874378b99949a7a663ae1bbc361f72acb6340a40228a265f4961bf378d5b9d0e5f88e5a59ed06b77f99cdd9ccb2d02ae99da9f11a38e3ccf6a59598bd4ed3d782d859250c3f635085192a57ce9c7559c68a2dee7e3d30a54953a321592a097e76a32490012bf582966ed493f93463e56aefe6ebe1a37799cc943bd71b68fe423d42b618d8ec861789914bf5058c9e32b781d3b48f4f25ada7492de37f2671ae0e5e7019ecce469e703e706de8175efa26f54c1a78333ef333bc1c6a0b30e0d063ceca9fade6fb46ab307f810d9207dabb447f857d6936f7a2085aa6b232fd66f71958d9166528a088ff3a725dffcc10fea55ab8f8e220d6c7988b7300b9dbe96e15f0e77b7ba76c0951340048eb2635cde8641ff41a9277b9ad923b4569e4db408d0769113b6273f5ceabbeeea65fd6a220df2284a5022e2705a7b285ce51828ba832d053b90f42dd582866381c941c1dbc75dde4db359aa9c985e320ddadcf994a1ad3a9e039abd6b00b744884a1fe139172441e26541fdbe213982261055cfb90ba6c4e7144ecff23b3287e9b89f2306b79f91f167f5d893dd4c84756f8d5328e24578784c19239480b320d760ffe84f5d5447f91d8fbfb2290d09bc800bf8d438074333e2ddab0a54c28903c6013c82a423b6b19f45151c765a03c0f529f41b351b2c313579a0ada1cde24700e166ea1a9280e4cf00514c112d0161e16e398a08546c56f18aa08b45e9093f2450619fd982eab6a13099724ec8904612e11820d699ebb4edfb2fc0f47221283d7c8722282822d9a2c61114cdbbc038b6630554b1456116cff6e60b932c19fbc68d7765bae0c11a9df4102a68f093d0b49af05f5335cf41f78efccc70f236e0820a9284ace23aa7c0a6874983b82ae5683cb0f3cc3c436369f98f2fefd630446e5c437f29cefb72bcfd06ec8712bfdbc4db0b2bd2395b5122141e4f648199c5afb4e8580b42bd0faace1d0984eca27c2111c5b62562964000ce950c32d2bbbe616c54c59157f89186590966798b9417353590d5259e18cdca9445866d532358ba402640fce861b5bd9086528d24244c5f7f2e539ce4a63afa5d8a04c70341a04d0a137efb414eb168b1c1a2683481ca754e90fd2a691dce0b16a2a5fb504930da8620dc7d06321550818da2124cab40728aae8fd8f2c122ab6f2ce9c01b6a1fdc1f3bfd5cfca415ac51a2f908745f2528686aa006714c74c32cf15757f68a7c576cd4acd47411089c49784808de2ad7d247d9272ac62258abbef10eb5e39db5c23f128c998001fb39c80f2408a7ad1ea3eeefa74bbc322e78da6c208153420c3210f3c960a31856e46ea26529bb9e15291595b21412c5e803c34e70882cbb41fe0d1f117e3f770eb0ddedc994b240aec0931380fa11d135c807806ac798b1d6db7ed41d11dad31f4bd3afa0e9a756b532e59024474d8e7f478266358995153f5749022095fbb8c9115a03240340d146a95eb521cd498b526faf98142a003f25412281aee7a022e1b4094800e88e7a3d4dc4de812e51a899873c5b82be5095410639455703f6aca54393f9c98b0e8a6eca1ea880109c2972d10036c90a4d005cc39a404267f2a53b4e70e2b25785306d38ea2a1ab17449fb8b61281de37ae4f37e19e68e30007a1fd862ede3a9eb06edeceeeb7c40ed5a627ff0b24e7e11d57fde6f55c015fe08040bc9ff46fe28a957d21b9ecfeaea8999e26e434e5e8e042e517dfd0de0bd8da06d927a6d118f0a6ed4ee63494762285184cd34daeece7e2a0c231bc73f0596a4d0a77181288b86bd5d23e90f9b10feb87b14dc3cde3358d3d9272d169c2baf5c95473e8d18d1670e9d8989582be9f4f185e5163d268011d0e320f7295fee2699301b46c599a33af9ff9486b3aeb3a70eb93fe7ab95fa14bc187293ac53a8959e1d5da273a2cce6ca7b5ad66dba3264426ee94438065be776e5d6d590133cf6b06e52f687ba942170b843bf4cf4d1c9a489907c67093116455e420196a203787383e65d71d97890b8e110f818c0bd10542ae700588a9a6c7629504fd027e3ac06d16944f8d8260b176d3729c484a8e6f30ccfdfc29d22a8971cf8651d79f45f312699ce110ebf0e748a624c76d1ac65dfe14dd9588718786a8d39f45d89234ae7918ebf873745622c73518e24efe146995c4b867c3a8ebcfa275f721ba1c1aa24e3f8b604bd2c8971be68c8d8e89d17375d308b3be208b521d066615acb270aedb634833fc62d2b263978df6920d2be072b66297aad84fbc9129bef5902b96dfa0b66cc247b9283f8c90f525897449158df78e2d1e3b57f0d51a1a139bacb5743b5e408b7559220673ef4a791ba931a19cc6a7f392c945a67b80a7939909532110f860346424c0311dcbcd802d8c1d88d89df7cacafb94fa5390ed2e958ea963b3db66b88154ad7bce0269a314fd966614f560218e3498d3896b909ba9846200c65fecba85606eeb8d23751dda9b9afb5cf7bd2c3ab959150103d3135d20184fdc642beec576b8b2b26b5fc40d5f4e2962cf7a10bae7dd2b8ffbc0ba4ed4eb203da024ef3ae696ddbcfea0fd03e743c45c13be4cdaaf83af3a2992b9d0a60fa4cd6370ab7a4caf000b0bc766b2e2a7e27fc65f1f8aabe7352a8409ad8966995b402b1dfadc9275bd517a0f2921fb56e535630028c91650ac77b4b21d13cf008ae8a504d3631ca0024bff9f879a4059b5179b5c841176546210d2232f58f1c7c81d58cb60bc9f4c70958afaa6515dd03f6a1e7f1282fe2f7f1196f86a4a458885f3fdbc17b474976ba695e430357d9a20e3683ff629e22987f468ebe9c211ec6e4d26b403b26b451d9e2caa21fd2365a362787aaeba2cfbbe9fdccfe02fbea233d261e972f3519c6e8ba606e041b328ffcfcc9fe71d0d1e66760f43ecae5de06fa2f9722c0616d95e90f4c6bd8cd182fd307023c06eb50e62d21c6cb56ffe6431c46a506754f13a50d19a6ada96bcac91dbf496424283db1a841f0590fd5ef27ebc7c7108c0bb1f60abd7c54693d63a95ef7b880270b90c9176762eee812910e3d2f43769e37dd860f9e1d730e0603c25c6fab773c8532b7159a81af966a71110143fb17404c40497c9ffe8eae8a5991bd92427aee06665d4607c2dd1e280c84d3ed8d569b5b8b48fca58d704958e5d578356ab1820499336e212edc956e5d3d1a29f7b910c4694439122161544c1979a8330caba1f2793b3ac606c1f7c441566b32f160a03d124d5001db0d64f02b1a181c1dfca4138abce816f9d6e9c91196794e22850949a736c1dec974c3b095f9ef2383ccee1c4dc25f4063133c551c572ad88a8958e0fd3a12e104664c08d56e46ce0166dc8eae1478189ff085173aa4e4b857fbdce36005bce25a017b3060113058a55376a8893310b43fa93cea793395a10afc03e62665c926144392d3b2c6a4b6b4f1785786ca60f072f062c43452d340b44291274cb8ebd0d1451cfae9cce65b81fd80eaa67cb234cd2e827d0e4733cb5631a5b311c76735f428107687997f089d9d95c2b9f57571d52950845f54dd6f835ce643dc0007da40a877ee0f5ea31f7f0bbe6ab127fc9378afa6cf261d154400b8faf90118cd82f9d02733b8f29183835e48ad9d62fe4a07282a0cc80fe0fddd40447c57310b02e8af60e68d81f366add608a2e0d3eeaf27609c0a20a4908f1ead4b7f8fe7eaec73751e436175363ef2043f0c0aa5a89d5a11c354482fa26b656b0eef21e17f69fc3fea16e760711ca71a8344e48adc669417791877dd69c5540ae4193598b2ac3d5b68d280b13f2afeb414150bc35075656c99aad2051f5104d945921ab5e3da98a52d42520a5328145fff28e8e2496d282e623decd020764c8fbdcaa53c333be13d2e0b831bc112c19cdf219b06d670ed87e0d9f54167dc683b3b7d9e1bc6df223a3d72bd8ba0628a902dfe501cd995796c8be667e68b594eedb2063148c43c50b5b53ae34d3da5b18ff5ecafb17374f271416653bde9baecc1c46c4605caf05f377c20141239238d8a3371b66c141f86202b39972fceee98fc82ab725f99d1267088f23675b537ad2183ed63d8831fe8c8fc27948de812ed9478acb94a301bb4eddefdc3692cbe72c14e4e828a62c62ded7b833b1e8e2a53b438d91c621df75158c41a4038000dda40395d195f12d86a856645cef11992072c6850424bfb92a25ea2ebf14688681abfcaece31f24ca2970477b227b7e098c27b2e8d1a0a44d8b4b0081b23b0db02d42caadc45bcfa16f4c55e2470150192642ab8602027d3a24a787932492f6a66a4ce1d0823c7d0fefa2c352f651cff35e95069228b9a2a1be862da9b0a74f78b2e2877355f64e28d1748179757b1cae6030097fa4e667bd26acc630f0bd39148e3f172289698ef7f8bbe15a51ce7506e86f39164c8097ca7e54ce387ce83f4811281ad8ccb3d45f3cd3871bf1a40c227113cc8fe0b4f05d139b0fb4db9e5b2f94c906b0a96d06c184b14838a0953c22088c841c96685c19e5ba32ecf12c68b7ccd343e4460c2c9b047d9e4c13c1319bafff948128efa51144ca9b63f8267f82fc0e7a5e0a4ae8210ac760c0812c1ab9a85905a1e8858b94d780f690759febd6569e7853871b50190bc712fec0c0b362896ed89e27a89a44358c9c26ea021f389d3a381e0783082810d8297820c120a9251c3de60749ae022d2b410a782d9aa4247d5675e344b7d90e00decf88c7a8ddf429694844168c07c1767e27775c56e3b30185e726aeff1bbe7feb2a9203162aa43f53f09f0ca5b6db7928deba260a8a221526f45e45f4ecbcf0d695a348fda75bd6a8c5f8d821c292904c2c8b1595cf418f581773cf9dfa50c044999a5d5a57660351e2e9e158fe345fa2b41720211e65b7bc4db8c64080956a2b66ecc1088295261d3b287b5576c6102cafc05695d400c4a930efabeec3e4a0391331be6acec2ce40d8c50887980bcee5da1cecd595aefbe418ce67f93724f7e0078c94f13cf4ab979c2c6a3f6efe0d184cc2d1006046047c21c5199b3681a264f845ae907f868932df7de5b4a29b7946907c0075106c605562cd0a06b912671cb86c8d3ace0065144f22b6203440493b5201015add7129c550e5c979b224f3a3c4d23f289547d12a44271418716c02a51ab49820c4703062def9a3ddbe5366bb13e6b2d1ec096bb96969c91ba218c53991eba964982d160b1c08509a2a220bad0a84e5b682ddc258a6896960793725304194ab5911267eb0d224c6c691d3142cc941d376c708243942ba72149984c21b18208a5948e79eac6447563a4baeeda5a6bad4df269cb732c3a5f8ed496407255440920263b6a579e28a1b283940e4dd65a304b148c103103331ce5f0c2919151171a3ba6c5cc6ac4bc909582d316920f128a90e0432a577d9833aab428a54f3860021e656a20e28923570ec871f5248921474bbcd0a0b6060c5c064e8324278a1c99111152c40742bc14b1e388091033496e0cfea47768d55a6b9d4f42782c20a04349d71618aa48b962238a1614aa5031a20a19a9ab1a2130256fca4071281d49b9fa81a307933042703a825842248b129125b62c91e03040f1218a51561524924441a116250623be1021d3248aaefec286446bb2e928f2c229840c2d01918703c60a1917b040f952e5888c0e1f60b000f1a389231c2e10d98a1640022845b82025848b099a42550d85326162480289041ace246f13318cd406384d3b5c1745e33a0ea0d028a5f409bc37544142849618ce68f5a0b163fa08968af5a8b2c31366809022a251026a0425343a0203e15d4f9dee8a12ab6741a0e756b8b31f77b6a09452daecd92e07f40611c65bc09991f50413cb38a1ad071980f4c135a1c2c7254544b5d65a6bc74451dadd89656a314547a4c09bdd17a82f49be507db1fa12e50bd697acba85ab8196e3686e63a66c8d0912a6899a1206394ae8c28547932a39f0405b82755175597d3737705041414b55112360c02104151e5670084325052b4cedd0c3822701a22f23b812c6c8941d42f0454c0a3e0c5135c584a912b0000236dd16f092224b6dad83c5a6189922a4e2a02a521e4e78dbe52e0f5178b0923d5b50157b9800761c4461e29490c1e0063b443189fa920037a82aeac23454a27840793c60d1883111166ba2f4c3335e184a297de1a9eb400f04da72d4a4eaad14062545e9ed38b0d6de184ba2bc194f663274562c30189385e304222a2a6cd92f1011d5b8842863830f34e8ac006b9238b42cfec432539c4691a8209cac142d46658b09233e98ac787c5865c07c0183e4f4e50a0ba521315a3112a65aaf7841916644431269396aac4ad55254a9d9b3ddcbd58ac5c98428acec54919c5871a0b3170c3bbb22410920a53706a594524ab1aec08b55a394163142a5062156d872e4861b2420c1870a53527e20d1a5c30987b5c53a09b6ab1ae6429138a39543cb285664f3c40c0bf8499427a99c402a19865a2df5935ae1010f25352557ac8ca9d168d90175a48992150e4b949286d870d6da2e6728570e91c811474cace065044e709499a24c6e24819ad5ce84292247170d57e15a20e556229c36b158266fceacb5168b102c46b040c5b86d72f0150aa751e832b2b2ced178a188890d5c6af66cf7723aa6c0985b4b5b42ae4829adb5524a610019a3357bb6275d3d01d3162d1c7a48717142a535c4aa88aaaaa9aa170a8aa8c0919848c15a1498e98e5061bebd3a800f2cfc60c3162b4b78d89680e1d2030f513ffc70f4a3d65abb66cf7673984224053f3831658932857405424dd52d4a5c751962c6cc153f7a1d75c9a8b5d6da4544446442adb52e41933ddbd5ad895ab1ae5f820c0f1822d9b351197a86ecaeb5d6523c802d3d1db00ac2c2d313558ab26880072733426c78022a09d50e163e86843e9a6a8d4165789aa2c55fa21ee9872c668e9c99218a07143d4e40a2ea8c8e258890dad299895b93101a4d464419c44c70aa09ca03819e16a9e1b689c35a6ba328b5d65a3b858349d9620426c5851b134a00c207095d4c6004d1036428e284cb902cb423557a7a28316408232f654830618a93187ea052b244133f5a601283f3a8b5d6fa63566b4dbc316de44c0ed122b9ba5ce78428050f2340360b93ecd99ab23c89317bc358184aacb5d6a869f66c4f78d66e931b240c5d253811228814225c141004eb29c81114104e6e782285153b5888d282414c9817cc700089099ca68c08820b8813e8e0c58808a59466a029a5943e4129d647802f493aa6b0ae245144cb095d82a0a149989a901b47c13958a2e952446d88821ae24e4151e1a2f4ab4f00f0812d20475576d09cd8e1024da0b04002a91c3af4507277cc1c4a4b381aa5317d365a8a66cf76bf21be2b7800226d41fa48e283ca8755ec9b25bcd80017a91e8610e234b56501243520479890e025062a222784dcc67973ea6b8e5bbbb5d65a6b0bb5d9b35d20eee9c94a8de7860b56ac3029e291340410381c8182c3102030d4304409135e8423a618a2693e294245c8d15923ea3a3006406202850b1313c4a060010d4098ac90048c951a134710ddb8091c0ea908e00812a509929a951f3aace8a8610cb08060eaa2a40424627c0495b6e8ca81aa6b2604055206c06566a54bd28e286138196cc4e01ce185d91acf506a6955445b440ab8582b96b1378073ea8932e29caa3610f5c0fd5039e84189de8e032757378692aead5ad1f82043694729edb004c0de7469c112a4c7122482a802e6460950cae80003d4921426127eb02458b90e2fe2b5a1cb2f27799270f03890bb2056d19c8167042247b0e870441345ac34312973a447511349703169729383068a4c0537e881763b28339ac434b9a11d37a7c5b9ef2bcbeed7f77f7d3843bef2ceb4f5e905df3e17d6c7d9beef007f87ff6cfafb8a833e371abf029b5f7335fb0ecf80d278cdccb9a5c9e54ca0e7459a12cd1e3af3761db9e91a178883e48783661661e251e7633821f63cefa796f7da52489922cb2c96dbf18abca5b65c5afa7b96bf3dbf5ecaec55f9d3e79c64a6ff085a4e2bebe3f97876c91473cb7fb09d934b7bef79934e3aa9cd32f93e6d7e4b2e9bdf32abde2b8ab1cdb183b1df17e7b778f3923fad7d9977547c7def5d4c1f11583c8aff9cf1c31d1ebdb75a07fe1284dad4f21ff913cb71d37872cdc9a5bdd7c132cbe4ebb8f7224c1f172b7e5fbdf39bf4d9f971abfde72d3e8bbcaf64e1cdafff7ad0c5942cf2965961cecc7b88a2e09674c6b9254711548c15b02306e4efade6796ec9a925a4233fc508be8ff57b9d71d33be37ebdb79a8eccb2e662f6d04791f78de57d73f21671f2167598774c6f17b1d7dbc5f3e8ed8247b4178beeee569c5b5b7269995ff2c19754bfb20cbf7d0f74cff33c30df2b8ab1cd67dbe6161ea2fabe7d17d327e7bcb72b00fcfefc3bd6e2b758c1ef9b7d367be8efafe0de16799b5b2de76df6ecd8dcc21ffe9659da664a35fefad867f8e9cfadb995a5abcf623151e30de73d44656d6e4d2e112a50abcd2d4fe1c509957ebd4d35897a9243bbd0db949328ba49931680dea6aa80686950bf7e724d01f1a409a0b7292b327acaaa4af3e86dca8a494f595de94fbb4cb275692afed6fdf79b06b74cb2b7289a2e40f6b827d15ede2ef3f6107be0e989b110ce7bcfc918eefe32898c21df1fc441ee8d1c0e92799b37bfafcdd3fc8e7d76c4f9bf799ba7f9ef9bd9be9cefcdf7a4bf37df93bd7e043d371473baa3b02e0bff65f396faf53b794b1d6e9944fb9cf9b5dda72cfcd77b546fefe7b8453deb0d1b23687f99a7dc22d073d71f65f347d03eeea9e573b883a9c1ed5acab7524aef9a3930f5760cc2967aa29027f01feb7979cb24bafe90d4fe20f5c02cfb5de33f0763b1a79ef7dbc19bffe0e52fe708a53defe87c7def7ffacc983df4533c86d57cd0c17c7f7ff75ebe8cf21f7f69a5f65d7fcb24da7b9cf185855eef59e68ff3e16bdceefd8ce92382fc7d75ce6f3267e753e47dbfbe37e5949f0263a1f932e9ff7a70fe7b72ba97f7d063e99f226f87fab87046d709c704481efa32c4e9196c19a5e75b2c84f3f6ebe88f62047f8ef57b9c71d3b19c71831a67dcfc49f2d4f7799c6ff2beb06c93b7a86bf28ed164d13d87f745d13dccb2fbde8727f09ff9725f2d3f9d163fc4214ebf3efcaad3e2875803d4af2cf3de3e18feeb3f073fb0da73707ce5ed50f2fd1d7fe0896fb38ff74331ef743f7d44983df463b12deabd496df6f7d50ba0ded7d963730b1fe21ee2c01a35406d1fff76280d7ec542fe329b5f4f3108e1d317c13ef5bc3d70437bff7a30cc7b88d3de539b770d507b8ff376285dbfb669f0e509fc67d3e07338084ca2476f9c7100c943ff8e32c42b793e6db33c81675073cc633f4c325c1ee306cc153744adb5563257b2d6d06aad158bd338428352ba9981834d69f66c94523a0526e543a22591c20e54de1841a42767a05998b8a4de219868a51d073a90e1b820ae6615ad6b254a0437d82e779f4489d602c1625194c6f08fb006d44111e170e51328faf184cad11248a6cc00a2ca095a4874f930e4861d6290785cb3b9424b6d892c60be6c8dd19a53474c1df1107302948e1ea81a5585c59525223d5848228a151719483fbca420490a9594253d1cf15c50a2481045906c0991c00c880b5aba382909e183850d53065756951928199e082201244e3d9a20828731597ac841abe146d4f23a12e5754574811bd0689c940d1e4c8ab5d64a516aad15adb5960598498523f292b0f024a26d44629ac0ed69892d62915a58a54645ab5464ae54a51bc812a43a1a255489e09d2a81e644e96fb789094e81275788c8e1ea4a871c4b62bc9c90c409259adc70860af4a7edea832b320829c282630b880de20a8e0f45b09c40e10ad51134a80928dda9026b9a439a381b040c82684eaba8ceaa763b0e6e8c1c6a2bf080c0e5e94912abab261d25f0e2820e3194c0881d3e70390d4d494a0258d243120c4bb4b62c4962aa49323060045f9458c24896ad291a33745eaa36a8b5d64a290581766c445d4464cce8fa6991f2362c52a2dc408399155400820425943839f13006091cb8dc08910d054a94521a263d4441286d005111304cd4463084991a7280418c94102001d3de50ce23ffb13f517c61ec5dc626929e373634f9f79c9f65f7c3f7df376cd48f6972f8fbbe974a737e55eefc0e2792ae7fadb5167f3b79486a9c65f3c33cb4596b67c6b1f7f99f8e9d794767c64e8a5731f3eec07ffadbff7ecefc67fe37e75e81a4ede78c58e8fb9965f3c30f310856c5d7c070e6d7b7df8a6c2dfef276f07bfabd8a9c227f79277f54e1387512307f6f52477396f312c5883f36bedec70a7e4ececcb28673bb17e5f7f3e8cef97d967d6f311e3fb1f3668cf78633acfde6d1f7619e479e417dfcb2368ffc67d3f8391c84271238e300f3a8a6e3395a64ddb2607ce8755dd7c96af7dbed3a29bd5b2b7deafdf71b7c8cf386a1e97f370f492df30de6fb5bf7e5fc4276eff6d56d2efca77bef37a73d185ddeaeb1079eff0b0b81bebd80216374413e7238a8abdd088a376c54f92ee4267547d9274ad9fd7d17fe53ffcad0dbe63b2966d9fd4ffc2abfab35220cddc9fbdfad5f7e713bafd6fadebd0bfff1ef320cbd6d9efe86a1bd07bfc7fef4756cb2942016aa2fc32080bafe0bffa9d2c341de96f58203a70b5dbfc342e0774f47af8ed45ff84ff8da74f57fe11984ffd930efdca7ef3d386efac590c46305f38b2fbff00ce87bdebff09f4d7bcfe1200f46c7bd10457f21d548202b075abaa969fa1fe83df8af1a8b5dcf4040b0508d6fb2d6075a92317050f57090cbee61e3ebebd8fd37d6bccde87dad5469f6d4af5fadb2fe3745a14b95beac24bf6f7edff7404a1f50d31c65d86ddcfd996c6075cb1bd8cd065ad2f5a594b24a29e57cfc72d6ecddb0d1d577a026bdbb1f9232f923e83aeed9c1d49fac0129d50dc4a477e77d5956a5cdf7dd74a025dd3de7799ee7cd2cab2fb7d4d2de6f3206ccf33ceffd5eb9f978b4d9633ff09c776ebe7b4f6c0a51e87c4e07357f2025ffa9ef750fc90db4a4bdef452c5483ff55e3596bdfeae41d43616dfdaec693dd831f7af61e4bb75ebfa6dba497c19cbc63eef5bb0ff3be16b4c2631dc52ac963ff6614ad248ffd398a34c9635f8658ed6f40403c83ee2b9092aef9efbb51fe8c091b5f6f33e2afa9b1bf6994b6efd1a68f58347becefbb45cfa369fbef58e8ead7dbd1eb128ba68fd8347be8c7bcbc63a2287311cd18dad0020159d2f3bb2f7fbb5f9a0b04c4e2ed7569fa62d3f4a151b3877e2c268a4ddaa34bdadf7e88edc554496f4edb570dba44a3ec530702b2639b46d94da3340502e23f5b1008b4f48955a2955825560101b9a9e9adc50d1c57d1e55322d9ac1c0fb4d666c2e6cd7cfd9438bf670dcd8b3ff31e9a527a089ec5b390ecf785a3ce6fb13b676d862063d4ec1d65e18fa0e7b633a7e3f79ddb027f7843ec59da63138773fa9c73ce39a7cd32fce14fb7376cc82abd4b36395cbbae65718bdf9e75bf5a9bb767e96a2dce565a6b2dc538576bad9d43f36ab0f3dba6f85db58adf74058b979b06fff37dd360fc1cfacb3c47cf3b157c7d8be20120df6bf77ad6f52c6d43770b8047310360a77d704e1b00004824cff2158c15e091e73d8bd7f40c5b8ce0e7b1e6c791e67f149fc588f32bc6d7ab186f3ec508fb9dd1e667387eaf03ea84208a39ee39e776ef397eb3ac7b99e359e4ddb2f4fdfedea9c12c936fff62bf585e6981cc9ec533c879db4ddd7d4edef1bebebf3829955f3db7f021eea1a92fce0dd5feb0aafd6dc66dc3a066a419c5f135721b06150bd9975d6cffa987796f589ec57f2cce9e2504cfe259727cc943df1b2bb8d4b35830bac8323603a5277123eee57db556faa34cd60faba5df26f790a4f2cbdb8d34e53e7ff9df87ff39f87d720cf3e6befadf577fbb1197f3f617f6c00bb190f8b66ebec38d648cfafe1807791dc5dfc21b36ece645fed695c251066e34d686ef45fe233ff459b534608deff01ffb95c64187bdd7800f33d235ef6bc307430966df11d6bc53f3d347b4792ca57cfffa5e54dd88fe7623fdbd38622c048a0f6210c6ed362e6d3e2c245f6633f81e0601d4f29f936e833b1cf4791271ac192b1879240ff732447f893bf8b4742fd2f22f1612bf3e1dfd69c6efe5e8bd386efae3406abf2ffbd7ffbe0f9b9e1f0ef2aed206fe87e7f4bcf085ffc3f25ee177c57b8537375f4d7b3f7fbbe7a1bd61c3abdec7a577fd51263dcfc3f21fefcbbae23fd3fb6ababecdd66699d7fcf6a23abd1b7a5edeb1f1fec3f2e6dc5f4ddb0767087e68692613cc25ce0df6f27650e24c264fbabdc930a60f075970e6a354b219e512d377e5c3d212fcf91aedcbb17e351704b72b86f7fdbbe2f3b71781e14b8c410c628cbf2bb7c867a0549a3ef7bb82fff5db8bb405bfe2f0e97646ef1adb19ed15e9faf7bbf25db160dedc770507d9af2695e49254924adf95f954e33855523029a5e48c16e25aabac5fadb4e26fcb99e42167dabf2c7b7cb12c924672266392c7ebf173328674592479c8197efda5b1181be1252d836d22c6b2c80849570c3ecc4a1efe83450b03e54cd3e42d6af1ba86810fabd20358cd3b344f1fbfcc33a48ce9f33536b248c6c05f5f1ac9999c69fc2fd80b861fe706cbdf3562b0f7a484e11a292579c8a01981c071860cc9431abdc497e481718e51fc9245d3075f31763f043ffc0d7b10fa833f7d64cc1eee451167c9c37f62312c83935b86e662babee42179c822c943ce6400c9902179780674b3e1921d566764d234fdefabeee1bbdb6b445b595ff532754e9d112b252df4c6d783a3b508d8e4b8c51b36669d4352e66de09c97a96bc24f75821eac7302ddc379f71e276fe9d5dd3dfcb5bae3f7dea9949deca2f4ee9cc3f27ed7d43d55fcd2c97fe6773f3443e271cbce88ee7edb7c40b0f550076c3e1b980dd83480bdcd36537ee76f6d9d9f049d48f6501fad94924cb61efad49da96b9273ee21b93b23dafe6bc442f2256dcd7cc2b15d8e042713f90ed87a64f7246dfe724ef738793e7558afb173923419455e491e2a69dd774dbabec542aff7be1b3d7c70c4364eb431499e0d4c1f290582cd47c2883495e14ba9e933a52493cd6732c11235288aee60e7b4d5f4fc5d63ab7555e22ecbeeae017e8e2f4dbe795f2152fcd7c5d25bd2a4a68f134d269b8f9bb0f5d0ed3550d2a6cf063aa71a5b4dfbbfbefe07febe421ab06180ffbef2766bc2b65d69fcf49d68fa3860a3699c778dada66d4dd3dfc0f4d964e7643fcc9d13ce42f46592319cbeaf33e2d951d264144993b4ce69d26c1c459518cb71625e1c954be97a8369388ee3f2b6f76fde365bce6e216cda3e47256378901d391cf47df277469ab7a37c70ccb98f4247450afb2b5e6204bcf21675f5bc635cdeaf6dde16e8ca71376cbc2cf72f8e66c11f4173b0ff6ee8d71802f78265d97c70c74e8ec5733b2cb8717354daaec829f27e2754e41d1b93b7a8b70beeb78de3b8bc6b5cf0e238cb71af2c9b96e3c62d6a4edeb06139a9399adedc8fa02d37ef0dc1ffb5b9aacbbdbfcc9ba3d2f279461434bbd3f7fdfefc3bb3cc3eb715e139684e548dd9a474fdbd29a1af0cbdc5c7c5eca9bf3723f4fd6dd36067d7b8e0deb77b68be38143a1f807b68eea478f9f77df6adf82e14c78f75c0bd7dfb21c818f7fd3929ffb1ef79933cafd71e929ba3d2f7735e58c8e67cc8ddd88f795b20fe6716b5fb152a32a7e272d2da2ced632cc4bdecc5d9e7f2f6c00d6c3f665fb41fdaef6c5621fffbc4e48c9e6274a4d195244f7d19a2e5a4e5a4b4055f8edccf983b23cdeb8c368f62ac79d808fb1c710cc71dd3db675c0e41f2b8a8bfefeb774cfeb6406f177afbedaf1d6fdeb1d0a4f96dfa887023f3b6e067de1f7be51dab378f33ee7c0ffea6fdb7df7459e6fdcd94ff60dd2c912b26e6cf68e77e7b0eedd9fe7781c6defbbfb2f7f7fdf5729cd7b887a6ffcd0dec4598d5020bfe63b17adf5ea05fbf6b5ca0bb1761afb735d93ecdb86d18f85f2cf47a5917bede67d3c7b79e2dc6b6f16c1e1cc627144d344cba76daf3ae7181be2fe6bd617153fef3ba1f3efe10b8a9ca51f96c7424c953df1b5d49579fe97a3337e519d89a652e95c257385155c52971330e49ab36c489622c762f9724b91997c4295571330e49724b5c929296fe9e65ad7242b81987c42d714a5c12a734c4d56cbc1a97c4cd38244e89539253d6aab8242e8943e266f6d6b8242cb586b8216e88ab71495c528d4be29286b81a37e39238252ee9f34935916a2288f19e48f435943d677e471309c441d37e2ec79cdf6e6cc62ddeb03182accd99fdf66492be5df7a9f30197d5a8942c783635c99049240000400023170000300c08878483619e4a52e80314800d5ba8505454308c8623a1380c83108601180600100000100060188681488c642ad7063040a752ad3c42b16a590bf50cd5e8211d7df7daf7bf36b0bec324d8fccaa04accc1b6250849c3d61f63bef8f20543d5ce990b5e05af81ad0fc0f74c6c2d100ce400a06b6480357b4e809f1851e7dbdea07ccd5ac75554e63ea778945f8377ebaf6fa2d5b0958b38a84fadc526f3387843035e2e7f92f648e9069690b1200149d2622e427ed8171ae3b40b3f41fec0666a0fbaa494b3a286240188209386ea27646246bb178894dd0cf2c74f2ed303ff1f28a673cc9c09ffea470031606ed6548cb2c6cbfc6153bee9e25cc11006115e95fd7cd2c4382b359acc44107d218f4e2f256121955ee9634f20ef7fdf356dd2e69bf3ef55209a1f40bd9ff63a4b0005e0f343420226a1b3203cef72696fa95c8ffa10e4fa4630afc6c2af0507f7739594ef2ada82f5693d394c23575de283adc253ed8f37d885a0cae575632d85a70e1ac061725e00a592258e3d2a8d6a4d28bc5a25175c387ed2887ccbc33295058d99f7af3b959c0c6a9e5423d7367698e934f64eff9bb071e2aefb2c434467d1efbcf52271775c03e3063cc6344740178d517317dae07448b9312db161c41b29d117254521ca70b93330ce9cb4a584c75d031bcdbcedcf746c5ba21bcda25331105df25b6f679f1bd2560ac4277cb61441b3405f0348bd4a945b7a27213f2ba6ae9bce4f99bfd379186ee556832273ccebb0af16f57ea5698d18043150ad0d23e8481ab61d2988ac633abc2dc99b89ab8591f83cb9b87e3d0df1d8c470558ab78e32a28f3d8ae18438c7cce49942e617c2256e916f1de0658729045cf1e8f3005c97c33b7f9e985fe4340e8e8c794b157f69580208c8af7f0441a36f138e85ae6667ac7cde5e81841389ae1b3b4102d90ede8bf8ad9185bfd07dbba8fa1abb49ad6b5fcc34057a4ddd9713785c8d102ba9057b60080d5d847ad403cb28cece45f4531809852f98de5c4c6c71bfe5a2337ba85109da795a8206c5e614de3d8020fb33ba496ce1440bde8793c0f15372d718293b75b1b8e5f84f453ed2f56a562157b7338006accb60b22fd4d7d92193d81a860820f9fa5640413a4404a5c257d4e69375629a3d1903bdc6360146242f90e7a5ef6957e3876e30eadda77ee27057dcccac91012a75c5b2c5e0c2cc613b84daa044f80cb952d2fae6d7970ada5b24aa5055d17c4e5000239fd42588aaf1d50d1d0ff3da06826bee54398319fb367818e11cc9b86d4778ba3318464e6d39eb9329e255ed323d1b99406405258ad6465e0fb9d535512cb80a526ca8e99bd1a584f2d8526f13f8d46b0d902e6b90f5a633d21ca64b5c7bcd241d184f169b88889adf39f2a20b05f844ee8432d1256f2eb08f3ba52fcf0887e45162f60b27fec7b0ae6036e6094097a8e093b2449389c66a38c3a3120c4db6a58727d15a036036e6e3b91370129d179a1e9f1b0470bc9637538827b72a3e0d815f4c2ebc2a3cb43f89218553bba6078f51de1a0feb9780d07e9566378b2f31d23388e9ed23b9fbfd969d5141005ab5efb73966850fdae315e233f9ab5f43ad680d0e7b6590c3bac4354b472d90bea8dc06310111395efb76d870b03f40588c60539e92dd260bb0882a5e39b9fb01a0a802a6f6d17f62fe833388a4dd8402cf640dc2471a0143813970d38161126584c4cc891d4095916e1bb1c4fae019d987d38cec926bc43e9b661662340d9bc4a8d733772a457d6b5ee21e3154591d4116d196d6c8e0d8bfc818bc2ae2f8a138f0d457f17864bfc36adadc880d64dfb6f8a4ee5f6738a6f5cf0d6b8e42f616047d58821e7226dd8fd5137952a1c328ee917f263bbce3bc567b7c01a76640d9a4a09396fbbd71a20fc08b137f36cec5efca36163ef1c9c4ea63ac16cfd5e3a8491be168f1d9b81f64b26ed9cbb9f22bed6b94668739e4491de202fc2368fefb6645789853f7ea9ca901e144300bb51a9e2c8a935a433dbf43ff228efa35e209699f3e3593f99da7c95d9a004fbf33e77ebeecc266fb4ccf4fbf068f724690476a00c2f0d9474ee2b9da3a3f838f7dde69383aac76bd2daaab332f66d912cb8fe6eafd1ac9036610d18d236b50001b8cfa318fab6f37175fa1253371679b009024fd60836cac6424bbff9b08b054c5a2d169f725b4e72f291ec1145eef6397943b110a567afd7518895bdc5b34263cdb1cfadd73cb045452e5dadbef15e2c7e717f4792d3d2766e56dcd9623c9be12f9538332d28659463cfb4d9ff0222f47a97adbb87f6ae4ff4913e6a737d772d6636420d1da36a020db92042b579d74cda03cf5b1e1094245f24051842ed8d5241a573564f3d724b4f9cacb43e18ad04c8050a213a09b045e881c2c64a863417960638d48d7076aa4a0c7409c244597a1a751295d7705a3d8f31034f7fd6d152d134755d8ccc766ea862a0e1fe589041ef47b487b7d1bfca298bab985404b336e1a2a3fc2a666ef8f3f235586904dc0cd628c2e09770d416ffa0bf8e1ba4e4bb7670d56383e1e28ac9e23c63f3f2a314672f72ab1410ebf61725a515a0474ef1857c117448674172f61653be1c2d8330014a8f98447ba75777ca8c65e5be0cd6edfa928522f5c62f10dcc7a5728929ce06b6110bc326c8ca3f92b90068d7a15a02c235412cef5621d9e72090c3306e327216b1edcbe909222541cf89cf084c7ff905c92be86de4cf7148d002d52a92bafbf1e8e2d21a38b8cf02cab61079668a3a3065370a2860ed0be23e553247a78d10709f366372e0e9ed20c253c4e897a8aa844a1246078a9a3eca6e735c8918ee310e4c425acfe099c4a2e8e662fcd8baf6b94dd32f61085efacf78c19f574f3e85afeb5e657177cb5bcac69582c332c82bd77c5783c6e1eda3a7e3e762545ca3a1c808ea8dad237f4332a7ce7410f3fe0342703154b4abfecb1f9b8bc74b9e1415a2f2a44d8472cec97534fa34a8516716bf28cdd6187a159cc94662fc1dbb245750124dd989ce0a34781c645a948ea5f5c310b6dd30099a3a6c56c97f0a6ff71173ba9d26640e81669bbfede170dad0b118886019bd502fa7134f0d621b7a6c3d159649057d12a4633f5c1304ad82f90c8b2674763c0115c09c9eb8add0e0463f02156125f0f675faaf0923c9d4d15e20d0806a75ad7bbeb225bbf2968b8ef10c3db5439ae12f18a22b6603ad78173e98a1a8290a0e8ec9b0db9edfedec9603b48a411d9c479e174a432786012babfbeec7e854baee28c78c2a0539e7c564348bd61f444720453422b925fa372b8443225bb0b6ba9594267621009a9cc42b22be415801b0c551744311f8ada3346488823329e30a84ff4425bc804ae2c5fc4442e42839c494e6ea79a75db22f1afea10d1aa48fb6daa527986cdb79b648312be8a59f13205c5994bd4b7ba0a916a648956a0c5f08d27b6ddf752035cad46e0c20487ccd2baf712517e27ee5a5ecfa6fa10903942c0a810d1aa550da664c63721ab2806881c712c0816b62bc95902cdb4dd006583517daf266ae77d4575630590e779f9d14cb611c98761199c578c3be1384d21692628ccc37f0d63bc59a03bb9bea0ac80aa7975364585ddb1b3f8a57455929f81ac88eb52f4098bfa0f3588397250313d6e9c44c636ceaada743363d0aa3079f5bc248a6872bb0810d4d5946bc59d6fda2c8d32682df60f92c2efba840fa8cd46432a8b7a48cff7826effca03bd3fbb2f0c018c1f6eb5f3f52ed01fa3e1b5f493432234009b68c848833326b606f36afd7d5ada02b3d22db42eb6f4c4cabd9f63a15ad121903e0587200ae2e60203c722017fa087f4e845603c980ea7a1071149342aab7c38143831efbe2092d9cda84929f25278c34faf82de0101fc87acabf99078f49657f7c7f7e3b8c77da963dc5f4118ff814e8b4268dc2330b043d12af33c14a345dd9c043128e5de31300c09221d11afef8b71bfc49585daf0826369ec2da6d0264ebf75d3780381117d12870d0098dd8bc08898feb20ac7210b8b03986298d9c0fbc8309b9c073e9c8183e324a756e4d7320678268191914121134b669bd68f99b067e018389079953f4cb5fea1f84886ed705b2b0cd57e04b50b02836478dd377d1711b35c28e5354323d09891f9ce0a88ea3f60cb0559e4f11218858ea04dc26f91054155ddd75b53694bb0d338048b204a6064d407de448c0894dc1f545b25aab2cdd7c87fb60d3f7830e14000a2f1a6687c65eb3db4e087e23d3e5198d562491c055029847f390a3b63070dd968f0f3e3f95479db6f25c76ca1f84661bd43c5cd21bfebf3c7cf0fe0e8ac478df10393887f7c12b59bae838edc18aa23cb79373f03361e0abf1e5172d0a56ce294eb2371f13827b41420def06362699239d6b288b32bcd0be64cbb4b2754ba719d0bfd37752257a952d9d6047a985ac37692f05ed9044c5ce08a1695a5c759d126b15c74b9738b561a437b7404c94fbe2ace6e056419e5e6b7bdf202614d6ec3261da109d83b6c0a8425a86d335b4ac485d1a55f7dee499804ddd55208969a90a7c00b08cbec11130a338630961e0c9e22ee9254fc71679711629a815c9bba665fa4afeb5638a1cdc43e9e367b5c58883d46118fa401bf99c62f6c60f2d2c50a3b3ca1550fdec0fcf9fcb7bafc1925f206c88ef1d88c24c7bdff39195d7bbd8a112b8517c5f601d0ae385156b1bdf15d05a028d415a21028ffb6b401e80c5c71ffc059bea3768240f08335bedd5f8e6cccaf30e1feaa6308519d69baa6c455009d1a7ff38a8640f366b53eeb579161bb6287ea0a77184c3f8e7736dc6660e0516855e9a77068cd323acb83e395d651bd7c02f6a808e7ec8dc7722e2f333ab877b2ead8f5f1efbeb193a963d0530fa6bdc0c0bf9c15de844370394c8947a8e6d3023c439789fdd528d92d9acaf483d02279958a999735626d7be59717075729dc5f951ac445a54da468f2ab1967b47ceb26d18b802b96d105641627e4b661e0580164c6f65520246f64889cc80157f8d23f6f6e03f3517a3532e88b9e4f8486f68f411f116694a20f349ae7a52499948981605956eab8003d4e469d8419aab5c5e37e0fa0b5ada5b13de86768475171decce00e7e38c9b2c1bd2ebfffe135fa13f3ba8e4ab9bd2e45cdd23ccd0cc6ff84fb56454e23d8b09439069dedadbb7a15e7ab91824b9a0026f7e46108ecd99036e261e297aea186c3cc22953a0239f13aea82744e2faa51917831308bc03a204aa968eac832d99d12d8ee1c9c5d046627eadae7b086a77d1243c98cc199fb644c5d158e5eef2dc476e9dbb82a87fef8bf0f818b80b53271d8521d8ee09d1fa5892ceda94da4752573399095d5389a14a4d5718f268706e809613231c1f97d2716545414500a3b04d6e189c1c64e59c97a71a3022fdf0ad9ee6097e913ac39d2f904f3bf6f6e26d132afd054879674c93ba0b801c0d4f38a6fe7bdeb18e8fd176980aee10f40c6a80d16aed3c866dbd0cdc4cb76094b3bb0d0cd12fdb2a8a51043fb8e1c295627b18578a2ce2ec812725468412f566a3cea9968bbc78f4b4b758b666379b19fb5a697a9c4bc4cd6979312837d29ed605249647a9431307f7730769aa954c0043f00095fc796aac132bed19e1243b58c51dd086c6c337e39ee726cbb24b409279287dfec87502bd6578ce791810242098869c4993dd0fd58da03bbfca14b582898f207202654c4bbc17340641e35d2eeafc320c3680c846a859768c52518f2071292134c07f86628b4c1b64941922b486993410889e7e0ac8a9d4650accb3feff576e2aca57db7acfa070925095ad271af845e9d81bb5fc4c2fd793eaf67616f29a02034c5d2a9bded5b2245a120729afdc891fd110f9f720c492e7ae7c3601c2e066e4cac3ebdab9dd901a8ea9eb4cccf9d5a58eb0bc229c7d12891d40df4a2764483953d1a3e4c62d3ed8bbde220c86ebf31ce0d4b74abfb31372bdec7983980ff1e1e9c20da1e9166066aac4a003a48706b71011552a2df45f81274b87ea42f3836c8520158f071ecc4d87482c7fa06445b33368a7a9586df7ce6a7810b741c58f897196d7626646d03c961c3584e9ec025078eba5a0fa1c837efeee0835b573867efc7032fac8b0e2b63ccba77b8d5e853ad531abf6191d9cc07c796d4245a2733749cb0da71116ed2f49f95abeb64a19c1c11d274a77061df6f6cd512e198cc725db210512b0ce196e3f149c431114534ea65e26ad16eb6897c09e6b96644f2359abdbb431a77ab79a3dfdd13c0e7b4ccbf108be5a32fd752660711c12b63799dae8e1a310d0c621d40bc726f106a39d17b68f4c12c0db142f2e2bc7c0e6a080381814ff0e89683724e72db8a0f513fdcc592ec56f2963c739dd6e688f5eeeaf49033cbf3b196a18d227b9d9feb794aacddde479b8b303ba34cd3f1c57af64ac5ba22bb2c5241c9e78de0d08c8fc60686652a7b973bbb5d110db9832940d2cb0e4377a759800a986d2667b498de36fc6056fcaf1dc68d2b828c2d5a988003427d253d67f4cbe62349515011720c18e2f798d7e60e73dfc5a1dfa5e4b257e0b4c78838acb2ea81372d80dfe0a67f1c3f773e2385a0cd6958eb5e2255118a1cd1fac3bb5b1d305a96b2224703807842d87dc192e9cf8c48ef57dd85cd62971f4a677aca8d6dc0b994cb14c90c5aa4a47e682cb0409514e43c1e0a7dc6cd30c5286c1c5e70369f8125f3a9f2990a9669222f71c98a8eda7604a8d61a179b7507818be3d617f2cbd9474213839a0e9af851b61c7c64938989b7af6647e90d506cbf7ab3db4b7e6d00935785ff1d418a21b6542213020f0fc194dcaff38e513245ea769391987a3139ff1ce8e6b357d67a030db8fc47fa020d32e8db99637f4990c4691164e49990ca51d4f816454f63182ccb7a150c075430078fe0ac6e5416cf2985ce82d89fd819666055878870f617e3e8ced608a1843326b9b694c0afa7d238034e930770231c4dca905a7ebb76b5451e881beac6677bd3426eb05108537cb02e423c16a93ecda3006bf50528eced9ac8712b149e3c809187a2d786756d1f93c7048d31ff129e89a626707973c4aa0c20c9a3eb59d62190fe256942bb6e31c0cb976d0c1951726cb7604763a65f0fa21cd7336aa81c33ffef6aac29dfe12b2eed46f0df0124ad97c941f920e9ace19c3fc2b9b4f65d033ef192391c56b09f3910dc1cb6b28bf5004430d81c1598762bee819b22c0a18096d4cf3999ee59c64f20221ca2653f42a16bd3eb59ce5cc78d79a182e6e54b29d8ccd259dca0e2da1fe470a07eadf6172518089408d7fc87c7047671be5a7bfd6f327d172e77fb05ca3ac38c9e202686e1cfd216c67a70b047dc54a7a634d79d616f0aaf2956e61950da4f263da26b75e119291d61d310de4d7e14ada17ec1fc1fb3a3cdca9863d4d33fbb8a16aac49830e730e65c6467bafa8da14dc667d70e296f14aee6f25270f03c3383137571a7e6d58a2ccdc8dbc6653e62bab1260362d2450e01295149170abdc11422a72746b7850b811185afb06685671c8564ac7146de8dfb3125cc16ce06fc3effa16b5a69595225f545184cb6ec2f11dca78c1b7c6c1ce3caf0d878d61ebecb41270604c44eadfb7b6156ee2e2290f39f11891a0d103d2d6dd2c4837c0f56b3fd2a46ddafebed1eb2f65f35b919c7533d0c7e6a2385372fc3c73d380b80aea7db7374177b682193592378c76aac894d9b6f6fa61e4ec25b7e79d0c8064ad4e34d5b9f44209c35e225bc3db3ffa812875b143f8d91905d0aef407cc0220da31e5594e1316d4ebdbc0ee34f1cac3f29357bb89c1df2280f9e134dadd6fb29269834288653a3f6721deadc2ba8ceb7c546a96ff6fda36061f2afeac83803fbb9899487c33a9bb9c7adb7b5d53340e4dd33a153cf101b46042040524c342c2dc9a3944648baf2bb81455945ff672eaa41bbd2152a7d5e69df7535960a298f95e90975bf9aabc63d94fd459619c34ff91b371d33a8b42c2d3a16e5fc17df8dd33a293a79bc680283c2f098075891570088c0b2291ca41a65b03aae2b70487eb4790a5c4a650074c369a15b65cce9125fc6bee9c00a2cfb6756aaf420a0e21b4c43f026da8f604762b6324a5330261a75ef3ba81d934a4f4a29df550dc8d503d6c914e9442a604c3d8dec888f804dab502a7996d0f8ef21438dde2ed138355270b7ce3e17d168a87d57ecb8ea45905931002b970ad0a8ae862a73f0586ec1de793c196a732e0257f9104fcfb7c9168470680ff074a5c182243deb58d49bc9f62ce7933d6c9ce2997554d0b33c40d51957dec9a40274fc22556841dca05aa14dba1666d71857ab8c2e511d72b62a1024296c8fcc95fc238288b6d9c5bb1b3f386f482a0eeddec14ae93b9181e54b39651b21f8d8500c9d91f10cc201df04bbde2d93b1cd98aa79e482714f8b54612bad201e5133ab8aa43eae14c9548676d8aa860575fe911394d7edeac9737d459f643b1514c81aa37573c89a89c8d6649515f33907cedaed466face2fd0047f5199fe2dff8d4ac45c5d573054a2625333acd73ceb7dc15e38ea8191ac37d10416ff76df19152090844b8e4480f4d83c8a822c74356d157411e6c84ca098997b26764dc8192f25dcdaaede1d91748f1d5068d19ef9bae8a2c3e1133476bed9632a044ace47a1455543ff201466ae76de2f4ca816b9061dbc0e5d32d1e3b3dc8462e188f455e5d2debc826d785353cf8e2f066caa4e8e054834b832fbe0b19b4b82670eecb89fe12a1fcbb4e699730ce02f2c77d2cd0eb57fc14001cfebec8741b97ede1d8c1bf39fc6207100a5d43c4b9f1cf61aef3e422d5f378205a48f3941766f3233fec650f0cc2d616013235f5d2c97149f0aba5f1f7bde07d6b44f6991414f270985df49704aff5745ce1effbd2c5f92f4b32dc50c98ea029098a02cb925ec8a48724f70e7657ddf36ca7da7d73521d056a8542cb6ed18d1ae2f7b529554e923491b8325dd549e2de50e4e65169100ee77cccc893752f9a5aadd89cada15b8d45944cfa0d9b1c32b92586b37619e9b44c8eb4af2e79abbb4849ed3685ff03138429ddad8f4c5724ed2458e3aabe5f14591047f6eb3eb09e155ef257e3aa69ea7ddbfd709e2ac3a1eec01bad88cad8226bf21e38e1a047245cbad9f968e5e3edde01e5862a939d2cd35d13603032686c2dc7c13a85ac3a00586b08c14146937d9b6aad52af35ae37fc5830e62a216b48f750b9c3e533e35a660a094a66cf4c6fac77eff53ec88b6c182daaafbbff3beebaebdc0f01ecb298e72358053c71d72ce150a4e34c9ae497f1fe85ae52566c27a8b418fa54f5f466c8b4e5dce40f9a63cc65aefef9bc840ee51b09d98d0e22c2de604d3e995a1b900d7d0269180f5a8e2ade8288d2e938ca49c1fb69bd5d8efa37cd156839f0b74f70b79cd59c6c92515a96328247f360cccd77c3358f5571c88b2637dfa03432ad52cdec3240803f11ff9aebb01770c047a379ead924eade479d4f60e5d982b6a90cc13442633510b110f34778f26d459a7fda186e3bb2990ba56eb0b19a0989432c316d79d04400d00daf87376e3b20a84299f18c670854497d724cf424038e1cdae4e17ebd74248f6b2530d459b63124b8b2972fae762fa8db00a04bd733ac1b49238dd3ce1c35c25da322bf4ee6a967ee258765e8103fbc8a93ac08b32928261949b2b897209665abf0782847a5ff1da22df481d72c1e6ec12516c29f24dfebcf76730845eca067e986f24d2f716226fceb66203279526efa827421c9b56d534f14c39f742ed0ebe6e8926953578759110c533d3c9a5957827da72738513e766b2d8cba3acc0a01d9ce64e13e8608ad98190e34a2ff5e7c870d3d8c7b603774c06a61e565bc03c7b9875ceff3849fcd78f89d73cf8f5ad1e796d3817b65382a9d9cf91388ef4c28f1175b2d46f8804f28e3d0c9acafde808c1cedecc53e46954ed6aa9ec30df92cffb1e56c75a4c8048dc385e364b14e78ee02a227b313f5ebd5dcac84da9b9527aa81754265e2f546af324840f43e9f5ae9953e947a7b4c949f3ace2cf1713a8e383d4fbcdfca74bb4c40ef97cb887ff06316d712670455d8fd5cbfdb1702ed1cb2ad7248afc622673e95be4ff40e16ec0df4bf549441a4b85bad24a619368dcfefc5d09918a3e16e35af806405a3b5aa82e862485c767f778870473d666e047117192ceaf72115ec9b5ba16513d207513be314a72ef54c8ae50cd57423e1a0ee3dfd30b3a2d70e41e4373a28417280584cb640269b570e5ff66d0247fb19c05fda74f60031370a73f26b6ddfa527f4ccf933ea8ca2913aca1bebc991489ec6e9d6c25c6c330a1be37e4bcfa0918eb7303c14530270e8c52cd5d0cfd6338347ad1b53f2c6de5e236e9bcee6afa5253d7ff791a249cd1625aa306fd8bb5a9568941b34e348b44f2e3287f33151dc2b61c15d1aca9d5cd0504129f1702b864bf22c0d5b5207e2c245b8029f4719d0306835b7d145e8740047f7b94fbe7d0d2f8823b24994d3bf0f437a361c226156d62e2c52291d632bfc22985a7702dc2f4b3a25c32d7bc3491c0a103d9aa39a8f2f22e6d59b6ca2daa88f693929779c9db4afca45d83c40277e43ff2e43b38e687de9765a4d3e396dfee2a645fefa5f4791765bbf091e7642984842ed464c8d4223ad421ae5769ea91b3ad40f7468bdbfe7e8a8efd78db033dab553bcc408abf41d5482e002c890f9bebb518711fc8c921ddf3eee632a32d95962dcffd2f6a1b5e40796d8c668f49ed5f44da5552848342b2fe739b101e055ab0d97479ad635a969b29189f5f3892223a38830e63812b584c2289f29dbc083d09f77432599b8228ccb5e180991ef1d598b35f6d725c8889f556f9ac1bb44de5c252c8d280c930bb8573e3e558762985d7a88784082ad90d213bc1d638e0949407b85800ac90920f33945d96d1c7f58c2303a4600819649d56b479c61f7bf0ec29ea928ec66d298e5fade89d1846c547ea47335dc1712bb2620826dfa452122d239dee205eb8c5909ac04dfddcdf22fb6467427aa742b59c22ffde5bf6023f3ade49604a4ff1c8be6577bfe8921fd974ee2fdb65f234ac0bcec2243b16f409e1c98ad256ee30c5b00451111ec3048ad21e547240d08cb91e060b98548d4c06a2cd445d720adb76fafaf64cdb7363af53b33d80501a565d31417874ed906f43a419f596e1bfa94934d64f1dcfd5879f5623a9ab64d20e603c80330d0fdc793e6dee96e84fb5ee853d11877f4f97d082b04c8b3eee3748a46c8282ac931ac3123a07a003f10e5948fadb9837221e5354c56aa40442c5ae98078d2a02d2dfb9a22a1b42b828e2af5d87e21276ddd0ba8111488fa426dd77eb3bb03cc9211ad8cae56bc5a1be0bc8cf51d0178f627aa02cb89a692c040c4b33134b7011f6af55ed8088e60898d66e792ec2872fc3fd79514b8eae2ed92535ee228b05e0940a9c812d2a2fcd994326de01945a84460e1edb8aad8dc803a54a237f5f28d7a49586daff2e9205b4967814fc7c023953545cf49effa7f8a499b50075de8e94a40c91fd8cfb1c4f03a01bb66a3cabfae2191433d2bff5f0495ec9bbdac661f3d102f814226005fc466ec0e31f78e6f397e9fb1ba247d14c6921cec367a36e45e93432e5d8d1c0a1930fabec2b58493596d8c930b6446b2a2e53f536fbdff480852608aeb8bad32acfcd0d72ad1ebeb43758e9bef4b8f3522d56c7bd35bce7101778755f4ba11e07bb13a7b0d12d3cbdb142d001d2e31f6dee44da4004b77d670aac28792867c740b5b741c8957521783415bc8269f50efe36e8716fd5533a5a2e5442d40b037d229c249db7ebc745167c18af7b51fc6b26514661b3537a0036cf76f749ea0a3b68ed855521ff4441b11edfcc79936dfd9b0139d261ebd9543186488a4803543349c6be934545537fa8b21da3326a29f8734706d6479ca5e6d95803b17fb837b65aa6c444d56ccc4b237ca8d6719219f3971cd910a41489455b0b8f29c50f06570d7d8e8297451bdcc408ac26621a8c906d54902054435fb90b9e1c1a82275901e21be20d25bf6f4dcd44a08f6eb3556974d08eb445159224a6f1e41cb636e87b859d83497b99051d344ca83ec49f7d3208a1736ccca00700974d4c86e2a6ee4d6bd6c1492f7b74ee2f6abba680c0f6c2d847a45b005fa73e9cec6531600b97f00a44c1c765532652d60dba69540ad060d861a0812827444362ebdeb3a8fe7e9c8b2ce60f4f02f47c9bab9240d3883512687d79a991a209ae1ebe8608bf9706e93fd8c79223939f147d18b12f7c0d030d79c3ad931d08766e5f81c3184feca0d230971d4439b81d204ffbc164584bb9144362e5ff8d610a65f4e78cb09830f511238d5c83204344a93981bbc9e2c9dc8f573af9683334672e2812cb69497c413ceb290adbbddcb438df38bd8adc1c8cc73ba2ed03c44480f662f21ce4a6adcc651fd551c0cfcf5bec821892b02e26ab92314641444e636cc1dfd875c3b1c50ef32f7b5670a51c445470d4749a2484511d4171346e245d15ee33642f3eb367eeda05082ed381b446010dcdfc6ef64c20a0270acf66ec4ea8224c6c3c2113668c43556bc1037e867a482db29daf30befe6133f2cd2a0d4a10d0c2fa1b0f11f2a6aeaa70becc13e2af9a60b6c117ab0549e2e73190ce8a16d978c8d90fcc44eb5206ef4ce12fe57c0846adc40b1c837d41e38922763ccb5fe7569b31120ca85eaa34111c297b5a2c13b4be9f9338738373a50f30ba73e30689d77a9b3638361bb262cff134cb3c43a01f2b174a28f8783c6d789fe41466cf38a419f8c031b665a24ca7577b71ad483daad88b6e6006db53129d8e07ec1ea61448632de81e396344a4f53a9c4c0d5dcb63c6a09a4a454b340d36d5ca20474020097d6d12db2a7ad5f61226acc83d744fccd8d55dae3affe824dd735eb969205f82aa3994f193b80ec8f24d21f11c188fa0f28feac3b7c455f01117661103ae2b6e1b99aff00678b4317ee6adb4a642d0d70a65d4f23629416e662bfbba02c32c2f54acd02e2d6e24a5cc8682469437e5242b3ba01aa4de573cba28b32f476fc3d00e1a4aeff3b94760a9423bdcbb05989bd8a6bcac7ff8540c68531d6e817097be81929c126bc308f591c4670dcab68b39f35375648b8dbaab36c837683d935026d05cfc99e28615af44e56833852894d49efb8fe064c6438dd779a1c37035c454ad4fda3333258bc5bb1f2717b6405966b3e1fd5a3edad8a09590e1d37400539f44824aef47692f3494b4679f60739c9ddd87cf08f1e4bf4c2e1888a43c51dd9ea4404c450e3cb16d0aac8899e4954f4dd69bc35886ad8fc63a57d92d90514c93e93fc9e6e97e6f8bbc5f31672a78df6399148e20f1207f4475882e6aa76c7234e74ec0048fad89ef2480fbb8c082eb13ec26f08128e25536b4761fa13d51aee2a8e820a7f77620df8470afe7bb98e2c7d9180334f1e20ad007e3ec4389c62952e6477308716ed1e889646052b21b223f7cd98ae9637ed955155856cab88f6383342e89856ed2869eaa7ca6c085dd1a1010b2e1ed7fb689c1c021980c9caf0319d70680abcee1ce9d61b861a3421416fb04b36e8debec4543a7e3f4dd80875833892116071d9eb4ef7ffe604098c75bff6eaac46bfc5b3840a33f0033a538687e0060b1018c174be6bb2d99a073cabe1e0c12e8ceb1d53dffe1eb2be7bed9a967684fa84cff07c6e96c893d43ad32e6574dab664b7e6ab8b1a43ada8d9a6df9662f105f75da8ece71508f772867d1ee50301d20242192406ec496eb3614cdf82b82afa570b50106fe506b1db440d97438f392746aa4acb4a7f24c233066855017dd965576810e34b9d6003698a32e6c2ecbd3039e0fce83a6ff10d94016e5e5b75846d6c76f418710e1a7bef4c12bdea600dd70435e20fc6081262136f852194ea4ed0f27272292b4726587d4ea7c50feaf37dcc41275ed79bc35200d03c28302795c9fce872e2e36e96c00f50d728d87d5a5ee0b99ef8f97117f1adc4447dc9ebd40860fd9a00d2a0d72b452762d5879ca1a4be4232443752612122805b06e2f5cf0da123d48d5e9138e09fb94f124061dd5d8d81cb1fe10f3852f924175cd11431eeeeabb7c695545eb9eba3eef7911fe3dcd837873b3710761195bb24cb338d3e9225614c78693f911174a249047a37d1499e8f822122af11a0299ec4a443bbb06b3f7d49f0d6dc8dfddd5080d28da4123a8fbd78b69ec2229f652de6f6454c07acaff65b6ba4dca682f70cfec82d38b654f746799ec8f5a4775aea4ebb3e829e30015f4b47af9550c497740c69c4939da6327ab0106290182689ec2e864a1e2b322310513a7d374b6ea2462446b61187350fc6af2d73a31ddb5b1828634186b2c358d183c02485b5417ddf06619324afd3986d58fb8e4615bdda08e8c71901c708d48da41d8bda8bc439c588b4c5cc36d143a95c4c1544df85e80d1ef93e6016b3cb9ab83764c895c73fb03dfcd41feff6d9c0781c060e0b8ad1e3b4f4dd9870c52ad88d8e1d431c8eedf45301560ae6e20130fe03829faf92460c22d321b2a47cb30fced6a5714ca47b8df7510fd9cc4752af47cd7207a9495c8ea6bb1626d95ae11ab97ceea7371b613b3d45b0ac57bb28318e06774341fe468bc078de51799f7ce28af6908926ed6025ae33ca61fd35f6a8cd43492426afb43629f1752235e3dc518fc063b98d5cb251fed6158d94f33def66637bb91f4b85fa679386e1158afee698e824131042527291b7c6cb4d438ec09d825d1e60487f86c0981fe2009d986ed3a85afe6d36e56ba86562fac5059ea59a432343437681151fc85c9e9aee0ef17678a406c60c55d1fd8ab19287731d52e0749a69253b4cb3f39e4888f91110d42ac43e3387a3ed4f024bce886959deb1ad2e6a06c8020d9196e42d9b1bf872e200ac14144490d48d34d41c0a14f2dbf2920c5be2e07712594231f491cbc75cb2863102e636157918ea6d339e41435f82b4c32ef67b8dc1468a341b613dc23935d11a294e9f66a9958ca59d84de43eec211334ccf526c07cbaac9600c8a1070d0107c27cc9551ec13a26a0b1d4c71337ef290d49d21731a20e02e0b14018bf0b9744b44f3233e94cbc8c47059abb8d6a130f5325db97598d17767b991667d88e90824dd72ad3c2cd2fcce7656c72c733f1c7d73586e855a57dfe5cd757951ce822dd3da614d3bcd5c90a19df98668296c2b54681b63901a8720638b476a2b3d81d85f15c6193f13dc75aad51d61161b2abaf20c9b5589f461aae530b729c86a805bbe0b427e4575b2a24cea685b913c62e24a66573cfd440d811406b0ec19d44051c174caf5c976855dc37eda56d50f5555ba3989c20ea27999ce9d1fdc0e5b8aeaab1a9b8a7d77426e590266bfe78d0eb61e1f1aa9a6cd920130abda02a2477a41ef9f435f46d50d235da1e24680daea8976502cf93f9f8a7c0f9b69b7d0384dc9dd26dde860cb1370fe4402f3d02682adb4fef8838fadf3a53b1939db36579336d3813e23700bdd9f022ec8bd78a1f6cba24acfa570b69356ff1d299b5db26e67caa594e6900b0d3a81c1074cb924e27d4d5b4ebab8f9d61b9bf6f56902a2026b8462fd9e37301714aa003a4f46a454e98727ca55af0abea9cc2e6f2e565afeb65b23b5a3b8dc889dadb2fb127db26123ec114f53d890cf65b7c058bf6f8fa8d8107dfeb083d1be2d484d527155694651083a6b7668e1a863283315a5f92323cd439b4159645660a6317278a18be29e8c40631fea4d80b4bef728e044328890bb56907a3c2d2c0adea85e6ab891df067f4a43007e03a22a217c4ac54ca0b9d97d9e44402240ab849a32fe80da56f936f5a083a9a10f37141af6d0aa3b4986219ffaa3c9d682a0864e380e251a9d8be0735c1ffd315452f3fa2417032ce2d4a1a6f8933771f87ed531aa68caf46759fb0e9a4780a38d35abe24203c577f887208843728ea420265ecea3bbd3c75999753f51f5037c5bc8ceaa2352bf521ab03330bf4b8f4108105d8e5e731503cb91cfe4cfb7720b520c1589876f2df0adfcd800feeb9a446679b9329c6b64d5b300adb6998bfbe93936f7d9223c29732f09f907e7305d3bc66c9f4e1b7ab4ffc93cc051f6d2f612ac4983c758a324cb31405bab2b3e34662fddc286bf0caf6482386e774041d7c7df0a168f326d8fc1ecbe8628520d2eda9a843609069934073e1e525e8e37e1b93536adb7b7c55607943237fa142e821726ca67d40a20dae90f9a9290d4aee5671def281c4894a9a42e6f2d471911d99f3aa2190a7d4e0c0261277404b1778b9e00e854b82ebc2b6fe2a2de0c1725f097551d294d7480df2c017e1f52ede7220ca3454df3ed38fb70504985661551ab999987411bacafbf53daecfc15c17a825a87e7fa81280964a1573dcd38a1f069fbf8076934b430adbef932c7e15dce77f24f398d492785646a5c37b7ab600d608a9f0661d6e447fb4dff1b8ba4dad0560d4121dcbaa215feab99cecff677485e8f653b6950c2f51b9a7e3f99ad358337757d34a75614e67021b3aeb84759b486b4f7e7571b9ddfdfd158d9c2b182f208e6b48742e25d7f82022f86169503c322661cc7bf1a77b33350c922dc0dea20042a317e90b8245f9880f23c8537c70b969cdb814a6352fdd14e6f9142a092f9f7565d32121f3a773f8075d05ff8de09a7ee3e951be3f47f820611bee9149f8ff5aecd610b86030bf94ba69c7bcf1478a79c540deef1167b901106a1745d557cb5cbe24ed836150bbfd64f347ecfba6f92b5c9c5150162285da3ba071916cd13073f283c861b2c2d3c4dc9246ab274f050b44476a82c7c702b6139c9dddbc5033e80aee34bc0db798acc117ecad0f4e9ed9d8dc75411a9300c63ce2e509501cd50311b93e02e96a5924a16e60050a26f7566f1441310b00e991e8bbc37f49e5c3279544a97ffe6cac54cf429faa1974058ab4fbd807b7e27c147866dc48978f38e9b261b823fe2077627f8040c954b1f28c4fb5f42d921ffb2fafd147a0950b6b888f8547c67f2cd9a3dea1e714d7cc208a4bcfb98feb915627a0716a32c94a3ad7c4d6760e22381d7775469f0d28e14c13381d8349d3cc69c9ee00f9f27a887fab91a06dc06acaa836a6216c5a7175ce7175d625adc00d4cf03ca21fc64b69ff0ea16cbce10cf20b7a3ce38c709d6813ab61bcca2fe4b242664b186d9cadae0d8898aa1e0d26029fbebdaf36eff9624f6af348e9b08531666e0ff18b4961ec078db2544bd35245e200ea0fb040cc63a46bc0813e213c1bb775550a6c73990c844f0c6a0f27ece3e82ea7bfa1c14b9060c1dc8bc20b1c2155b669ba834659325703e1697245ffe8a8a87433c65141cb8073275d60d61f2ee16f84e68dc28f7376ea8d21e892e6df911e93f5f216c04b64627c4244ad992995458f3b4812b3e708cbe51f2f35bc216928542116a609fab1804c18b1274c5456e8dfdb003c84ce8e2ea2cae5a08ed33956919e39b5f71fd5797554244a0f4174177a90d2b7396eb0370e494ebd6337d05ebfa55824cf1425d8bd045e8987ecdad43c06d143972090512b522538148b3b8e03ac60ebbc9902c7186a382efe0197ac89695bf3ca404a98c455a46b553ea190a768f27966309f77e2600b1b86b2d4f83bf636dd5f403d21530f502e3a47c7303821d63d2316ddd09bba67552cb878d083470c55cd41a5fd40315ec538440be5af0ca127b4cf49315031e400882846f9721c733313457ed10d7172bc9fa099a865919ed97693cf33431ba9d243d9bc7b32f412e9d024db477d4deb0aee457cdb89478bfd7e5de856df870e4c10b49d97c472d00103d5cc6b5e92f3713765d78604c3f897ebcb6a4485b5d5c8b684431e0c6c7142a9378cec94cd443122015c91c9e32d95993d210a712c2250135d2e67750247af735a0484d7badcaf45858193339ac4b04dae7ebc157309e15a5039d3d182dff2d5d6d1af314525b6aaf32823e0f3862c0f9b3a81d65229dbc368ad537d5c096e398dcddddb1a1de07aa9446b1e792f65d08edc8e517c3728bf622e8ab4f3d482c217293bde5de524a29659232760bfc0b090cd89308afae5145c1a38a82e7a982206bc57eaa4e8eaa899d27543c4860086b133b4fa8b027984fad393a4fe428d104f6045bcdaea9473ec31c55b5b5aade568739319563cac19ea8ca70253402392b9580d7870838c39b24b08cf579ab85f99d10f36b59ee3a699c4ed2398dd349729e9c4ac8797d98c0d461e3744ea36412182281383049a372a012d70974b177657344f23730c97562b99b22342ccb45e7320866328637310571ae13e81271ac2db27d0f065a7e21f7642f0131c84d39049cfde39558ccdec3edbd040296b17c7ef6b7dc477ba3eacdb009b7acfacb30ee4117f916e7234e8eb4995648a6957e722e21e7842e8580a967d28dd88a040286ef2cd16d78d9c1037ed6015d2e37b3640a4d3e7b0e1f3d4ee18a8fce62c3cb2e5723302f992757ad7c2cf1424b83212b9f274f7cfac86b92df2a13894f86ac863cf119f2c4670e590d79e2f364c8156d289e5d6da3d72687ac82befa9055185f7dc80ae8ab0f5981f1d587ac7ebefa90954f3633e873d1e7efa5449e435ea95bcfe7290a97e9e9729948c417bbd7e3c3ae8f930e9f5833ab539bdc844f2ed257bfa00f2f3ff0f287b7f297671f20e92527732766796853321af9e532e92bdd32a778022247f198c5d45add47bc14d336ea55c9c87df4ad58b651bf242072140c6f23d7b6ccefb5558719e544f5c2cbaf2d93feba2e1f6d589f2e87289bc8474ab0d72d46b4c93e61a6bbad74e72c98c37d823e4f7c9ef83cf179e2f34484841d27443b4e88442251133ba3d1cfcecf4bdef1d489269cd8f91139b1236ac2899d1f27442291f43aa5903c318a56c1271e360177baab19ee7c1ee590d3ea91e4f429972fd79e6793c7d3e9a497a734ba1559a78e82a3087c713e60af35975fb23ce2e674c969a24c4227200e9893b95c9baf71d009cb5d93834e40971de804c5ae74a96997742845205f06ba65798d518252a963efbad55ab15321be5687db0ff02b4a90e99a5fc9c9eea01292cfed9138db278c5d9be52f0b6265577739ca66fb745dde1910cbaf89b2911c6e57756d3a692bb244c857e03f96b04a50bc6e31cf924c2bae04eb1375cac11de884e31671e1c6c923a3884fb9ce81c7c71dcf61c69c7279c7f54abd693bf59a1f27a5cbbf9cccbb129b1f5d07e617e364a4cfbf9c8ee688f46799773cd5015d289def65078d52c7f31d54ce395f9e8e1d91ce47b7c6b2b476c3fa3ab65d1a63314c9ab9e0b5e26587d4f1a263878e171d3b74e8f02b818085ccc78dda2151d2ab57793d0bb9b559bfb7725906c142d6ab0504e3e0679bb5852ceb56e698fb8899ed0ec3a4eee00e1d18b494b8d1eb144306c5301aa8c178d93fd62fdc3f2f7dce11a924034371ea244b72eb25eb32b6f74e96cb26eaa58db49d2c1f6def9d2887a3088c7144e64bb7a05f15fbc42e85604e06fa7c697116acf2878b39e79cb37f6efae726dbcbf43cb84c643617edd35cf4cfcd6c2efa67b64f73d13f37cdc59c5c4017e924b8b88c318f8f7ef183791f4d268c6fe04d3c45b72ec70f0602b9dcc2f3cd675527410ce13882fd2daf268d9b5cc6218b04d6e30bb2411f2917a9bd9c567fcfb2ac65b9ad1c7e2d916ea28f19de64d3771f5f1e7a7ee99fe602ce19ad473f37ba9c393249c469240f9f7237cfc523ddd5cca753cc2967f2199ead0c7f2f5572eb35b75ba2d0889ab8f74ed4dfe90abd13e53291d98397b6f74e227fd8a9c849224711857cfaa8ceb7d365739936dd72f996931171d6a5c825c61169914f889311b9751127537dbe9d1c271251988944227f191589bc57d1261e7112cae8a57cc453f44a2bac95cbd2271ad1ab68443c22f25e452344b257d18878241a2112f5ea7daae4d13da64a5c0ff114bde4222e9b64389dc191b86c657028256ee4d7b58832724be4974f2eb3bc8ff87aa83404ff5d1eda7a888ec2656beb9d5b66f929fb341db3a49f2b3fbbebd335c75bc8214dcc36e3a8b9b68536d9d9b0bdec8829dba708b18d47a211738e9a84840b311a515ac829f548a4e3dc288546e89039a71c12239d911bd25ddc94883cb429a9f11f22bf58f5abd139e79cd187c01a0e1ae92e6297439f9e319f5166ebf1f97491e69913897f1de6904fcb1189917abdb42c884c74f9192763b9cc69b53473cbc9449f9f85b848279c535e3e1ac8a5146f22a73ee28d18c54cd8f65eb48ddc6ed5a9e36de42f0372b90dfe68937dc22cf66cbb98ec93f5bbc10c4875eb173ed83184b98fc636bcd93e41bf364c824170d263cc334fe594320a1167b2cece3023c5f8947f4baa58fd8dd8c49148e24d1f7909bf72362f396864de3c39223d332030f3fadc56b7aae5a78bcbb25a98dbf7accb7f9ccce59eb55c96f3a5c5c94c7f422627437dfeeb6b3eed5a1fee2e46ae72b9e5261d429a89bcf4b975007bc9c9402070a5bd658aa54f1112110189bd4e599eb1af2c7d8a338b81dc566bad4ff888328b8154360ad648e9d04804aef4d1f6330bcb480a38c6184da68f41703ee28444401739332be57e883f657757878ac0ec9cd88ace0461af5066ede521c75659c85a2c86ac6799a5d3a3cd2c6643a68f9db5097b823dc19e604f9ef0a49d73ce2893abcbe92fc3e9b6d2685d98b5d65a6bede5445ae6fa0b598b6197e57e88a17bbd2dd65c86d33beb68310f79b6619c7716c24259b4d77a96718d5d8e711efd6e96e5f2c3ce60058235af9452b6a41e5d082ae5957e3bd6d06c6bb985cd0451afbf3c95cc55b35ab1ea9885dd47679757f7d19a5b5c2692fbe2ac550f655cc62c6fbf361dd0c5b295cbafc1a9063c13c4bc60cceb7357d7c94c10ef36d1445293ae89ae7657b006c39adc455e1369198b44f362cc490cbb4eae93ebe43ab94eaa181a662dbff7ce0451670592c997d3774939abf53aa9bc9c068e222ecb27f6c4abdf2b9a0902faed9a5b459b4cc8df4389a5ac2e922eaa57f4b20884442eb99adbc85b52a32ea7c873acd1367c3969799e22bfd73197edcbcb651f4c555e9f1edab027d0a566d8e5f265595ab127747258773321686f7a3ec7bf255524f92a8e3c2ce2df921e9abf9a55697f5fdd86300cc364b2e5d385b0302c14823cfa2766d52c5fe479c75bcf3bbe3e40870ee88239a68542a110a66d32993f1c0a691a16e27e888fe23e1a6f598897819e65ee9ae791632eef784cc4c9b79eb108873822fd285c06c14c1e61cc650d73e9d9a603ba60dc835903ee532e5b9c0ee86239920ee842ea0e4e4e0774911c86219de2c6e8b56782a8b4d66aad9c09a2d69a63770db6823834f6536bc57cbad68a430638fb60a297572d14db721ad7b1c4eef58b6f761dbb17c3b02bf2eb8fcb18a59be4da4571cd495a6bde8e32d2b81ce27c30bde5b439ce726fbb2c23d81312a6b5a5ea96b32dcba2916ed5dff6be6b8dfdfaf5b3fca525a534461e9f3bb685514e5acfd8e588b4b4948451234c11468c376e54284145112a805ec7bf25543c1163748b5ad1a22ee30ff12d0ec8cc5bbff86782686255b7acea3e628d2e379919bf42af55569757fe101f7ab6fcf9b3a26559d62d77ecbae5d9072d730c664164eaa555cd43212d140a61d750bc6b087b91bf1e39ca488435ee6d197739ce090913b51503e75bde159e09e2dd26f2827157f7aeaa5f36f1d421cfd6f2b6892958134f1de26c3286619c86f3edb026a646de6eb96cdf3ac61e8b44210edb2c875df5d658d731eb5e57b43827d7c975729de0e0ae3553ee787edf7b1c9d0942be97e7323edd647e08026ef9a9e4b4767c534ae9e5b27c1c4560ca11e9a756267216673d4b6fd70171a89c0c74c9e9802ecd912e943c54f8a182aaca8cf97c8e176e53e0bc00fe2da1c2143e5f807f4ba6d0f967ed8b6e1d5bd917dfda647e08e2adbf7f5bc6803ecee9f3b27c229d21f7b88cf97c749ac5d818eb2fa39179e8269eaa5b7f9ded5bccaf47ef9b58dd625cc6d5bb75ba737b6e9daf9a57915b5cc6d82d17c5d4c82d9712b9f51167b968b38e37cbd193c57196ab1be6eda10d471138e36a1bc15104be9c0fa6af97e719998b936e791bf9e8d3a3634f200e9693815e8540af94c3babb92c39e4097c8459daceb134298cd5d459d9ff836a9f5aee6d5f1ba4eeeaa51574b994515c352d201bea1a625e8069a0793b9f51b86783096b704dd7073038e7d30fdd679b0ce034f4cc11f165b53931fd10af0fd42c3f9fca88083819f07e36ffd01d307587a7e54c0796c1e8183b484e1a16ec8e9cede90444b182d3c78eb2d380fe67a0a130ddc90c41651dc90d3280d40f1341e1c45bcbd1c0e9b0ca82ed703d04c82b3c6f3351e25e8b558bf17174c58546fafadc64f8c34463b0f2a88430f617b087a3035b4f86c63b53ac30d23bcf52b5baec4ae103ddb58499dd712a36716550a93b7359b47609ad71263a2dbc8e2a158546d83c983b96efd3d144b135e673ddb68f2365af0d66dd43c98cbb38dd596d2f35aacb33421e58ab76e9d45d5a8942a5e67dd7aca106ffd7ab6b17aab30bc751babb7de17a9e76e337a2e2e85e6b558bfa41e1bbf7aeb5896e3ad5b0378eb35d6b3c6d3294c00b0454f368fc0d0695e0bf416a0d7626b7c0bce6bf1dc01b5e03c98905b6f017a30d22d159f25139f3ba0b721ae071f03965ba67a2d3604f45aac9f24975fde7abe546fef1758a6e6c1dc780b3dbf263c6f9d07554c75ccf518074410f817d7bd16eb416cf8cb29d13c9a4cd2f21045cf1e601e78bab37e713ca8bab36e71b97beb24313451bdf5c7623999d78555ed9424ee63914f8a6c77a647db552895cea3535115dd8703867000497e60489a283e63960d90cf12a02662fcfc7e3e027d742abb6b54cc6f8c8f7e848f3b9fb1eeee0b7b7baf83fe945437c5ca65f6499110274cba7b34d1e73e966c43e7e55d423787f9688266d3280835249093ddcd07ef17b8069307d3bde4791f3185fb246b1eeb6e32f13c572f3dcf9f977902bd5c4077f2b366e4a51b69948a9c38b8720ce84e7a733eba1053fe4ed2e9e432c65c367d36bdd5029712a6349b7892de9a8dff00735ce0acd9a85eba66d3a83e728304a751cd05799fa4514f5342d369940af4f74d348a7ad66c9e50bd0cf2be3d6b51bcc6f3d235295e6a3d2acd614f3d6b57fc93404cce6236742a146ecad490235d81b1eeda7a8121168136e2b6dfd7affdf97d2dc2dda9a81e7ab6e1db552407a45ffa8342164c523856ed3b7cf4122b68f25b459d1e7cc65245ac8a868686e6c7126fc9154a687f363feacfafc9f311b24592eedec74d88939a4d881323ddbd676954b66fc91535df46804eac3ce841e0434ec816339f314ce8430f281e6104d68ac05a932903eed6f4041348897a2f828ed9fee3a0073efa14825fe607f41909a11110aa3c7faf0204fe6bfca04318396ce1d63f13a108626afa3b8de0a3c7f7636ef0c7cb226063c316742690920729210e1007e892a37737e0040d6104fa6562b320ca179fcbf7dee364af40ca96b25dcac829a794b2094603c628a38c71a53dc6187d8b2812a2054d77ef33f4e9949b8e752749dd4999b1976ec230894a3474fbcc5fedc11803e467240c01f498638c5101d83f1f50d5f374ebcde9b63f57b736c941386bfdeafd1e7e38efbc7e7a4fbbf940fa3921161e97f1cb4833f54729b5dd4d2258b09cba7d29ebb56e0f6b76bbd4a1b47af06c3886cc13faf49e9cedaeb13070e41e6a7a866e1b4523085806baec0e931b11f9107a8144174856286098d92dbae51e9e5e2cb3ac0ce3f2f4cb2fae5903a45b2e6b40067e5e9bb46cb56e58cb722aed9513c17ccac94c0e73368ee184ee25bcf0a4ad29608a7b9c98403a718e6134455403a4d4a709534aef65f9ece1a94f9fb45a49558438e544305f7637c53097cc59473bd717967dc938f3dc85f0a66d2ffaf0f2d65281ad67f9d1665bc55ebd707588bfba65ddf0e1a504042c8060ff65f3e56ac90308a594375680021a8107960969b1203927a4b7ce3927be9cf657ed87a72ead7b65089ec658ee17275d8ae0a94b21d7534e7627abd359ed934a58bd909ca004c32415d85aad794dae46c14763fc96acf38608e64b5cf2041cc069f2ee25f3c0f45a2905b696e41de672f7f2f9f5bcf0087199876874b96cbab8ec3bc41489433199469c889bfedeecc1aa2e7b989edd12a11aa52fb950cf33c01e69bbdfea85218b1786b7a67cab0b0b2060f1562f61cf0cacc59807014e5b8a2987976ef11516c3241289aa4816c339886aa2e8410e4da040d2469d97f2694bdb300a022e7d5422268948e29168e4652cf2d25b8c4e455507713128eabc9454c05246d58daaa88a2a1b552f2f9fa3aa8362908ca75cac11028e46620ba10923a20e05a2397254856987da0763f974ebc15c3e6053f873b9f4ba5421fa2f5ae95b95ce3a27a595ca184808e513e484f039e962c54ae105890640524a9927145367c914c284a28e8cf0a60e5c02144b983a17108e17242872f022ed9cdc9c734e3ab19f120a0eab9913a4c51a4224a6c9316952871042698315968ec233a59c3452ee493985482e72718c319ab824e7615acf38355fe2c93320f12967375356831729b93c7d660da021c81726375377f129c9b422492d905a0e96ee236224ccf38e97def21200afc64b5c7aa91d480f8692403a46b202c3a41d4870e3e78dcfaf67f6cc672be56c782dd1af0d869e5b3ef218258982113c1eda888162f375f77cdb0fd0e29e159bc294052cbde725271f84b2e50c2e89d40d4d3f08f1b269b52cebd372cfefc4eaf458a5f462663124d34a14b572d675330c6b5ebd1f4cc8eb86d589376d0b6dfd5aa6679b7c2dd3b1edbd963bfd9a6ecd49823a21266baadbea73b35cc650989a73460a7178cf05dbeeb5f5dfedbe6ebaf6c34b21f32dfc3be1eb18bab8ebb54c8bcbf7670862ecf553042f5fd2496be5e0a452ba4025ad9c128b425a0c77a31e530e2c808085290556d26038e8a58f9e60f97c5ebe9f97ff561268c88391300c02c19f9770f5123279e9b027f2c4d4e592eb1d188445db446b43b9ec91e7b3694702f1c7c5c1558e09fe60980483a4cd921a0b8324cdbc74ee280858facb82d4903a9d270f9878e95287d24c1b264f8ba79e270f743e531a1b3f39a9a24cc892896903852e52306d2e1d294079b19016eba0409b36b54b48e975ce29bde0b20b317a0c86b07dd6cedd43534f97db0f423ca51b269f44c2f083996ec24850c030c914532c94d41d8b1458c6f89393af45ce9726a832081f714aa710ce24aed61e2727a5849c9c89102281ea7431857cab6eb2f4ca4b12f652baecae0a3ca2b5320fffd9a42b6452972205174490ddcbee56164a314a36232fb0c45aca7c5571a9782e263cf57c55f1f293c3a41b608aa5c52ed5cb2d9ab0027ba94a36b10a5312995c76b8c10f08417abafdd073ba9d734281e7b4b625a63feb70bae5a6bf97724e3939e985d74df9937b41fc9c724a22b2013dc618638c9f527e0fea74f8a4ee62acfc41fe00492b90445a59b15c9256a6209956e696a74bb7b625a4dbac01d5a9d74cc8943e65cd62acd3cc01332f1dfecb84484e6672b833ac0b96645ac11e1640c0020818edb983fb788850184392d6b0104bb43f975b962e5d660dc884486f97911c864f80905228e10c145a725276f7b6601fccecafdc7b2d70c656da2ab01890163853285ebae4b2c49e202dd65da44278ea9942b1f2d356818180d2620da9ce4b9c9e1c4b751e036a315c395dfe7d06c05262d365779813f0f4f9ba4aabb5bdd7519776b3ddc5972e699d9323121bf068a59c8a90f6e9ed9313417c1961405dfe6d2c8bc1ba8b99f4b237d9103e197aafc507d24fafee23ce17fd619cb1f5523a7ca98ecbb63b0c052c8370b89b9af69d01994f39d26b898e9f80a167d2472022a59c0fa40614c0065270f132c9a908e900e965f05305e1003607b03980cd018c1ca0e6003030028d40230f12b104871b1c6e70b8c1e1080e3638d0e0b54d6d1b5bfb7d5fe931c2ae911b0ca2acb09b60f39a8d76bb3c6eefda2d8bb92f03b25d1b16b71bda82bc0f39e62f8380941ee2422e1dfa0c712a0c781ff220ef439ccae53221a77e71388e60152121a71ee26c7733efa361b65dee2362d0efcc5b9b0fa6b7f0cd5cd84deeab24d8b183524925953be4f4ca45e0e9802e9063b1214a25e076930e52dca1046c31fcc2849e2337488e603e984ff4dbd3467a30b72e6a77306cf5d221f6448926742e974d3d3b57b65cc63b4cc09e604f98d06335cde2c29a464197b2e523c15d7557efaabb3abb2d2939534c5d1ea94e3c459792cbf2e5467d6ed0a57d6e94cb107a6ff93679e910460026f9a88a2993e96374b904dcb853417c6005fee33a8105804170117a0ce57e8873cb42e419b8cd25e076fa64ac4d91501da9375f917c3d622bf76410ea9d15368133cca9484ceb42387dd6aee9ae062dd22fc6a6122c1d4b2e9b3e480cd1c80b3c1a6531a38c524a29a5db8c191b0a36632365319784cdd8769e78e9a52ca6899732644019d4fbe9d47912a9549221238b99519a316306096534638608cf9831439b11ca66ccc0ee65d93a834e0184de6be172bfa402bebc44053c1dc5afdc72e4dc2d078ef49c03475e2e382b6f9576def2974b4cbce5f57295cb112f7501457be50df21efb951b0dbf1b76d146f2d2a6e29a9215fba2ed7d697b1ff22b83cea033ee4884954aa2918c50e8d2c03615d38a295321a1683eb398d0bd9a9215f7d1a311f697c58c62b05f577914dd59a822dd594eb3981c49bab37c950327478e0e4628d5c1a63b4c071bf83ad848298370bd946e2d1daedc74b091417430c205e18168a0d36bb128d7bd164b72f9f5bc25a19c34b90055bce51206cb650c6fb9243180126f390fae85c9e984e534a897a6c0925e2a1f2e55690a7c371d6cb44d879a2d70fff597b91eba5457184a3a0fe67a0ba26850343a186954c82dd7c1a651d72dd7a1a6519a5b9e2327474ece4bef41450f9e77b25cfec8a5dfd19623a73bcbe59603a73bcb2b0f1e79ce81f316f591cb0dbbf3e448d228ca2959f1915b9e03a75138d4630a2fe5aa3e596ef97ba81e56bce5da663f074ea7ec0fcb73e48cb06f2ac0f949a1e62d4771ccefd479e9a4cb630f9eef1410f46068b895e2a64883c95f5c96303a6f7989c96716a0b75c86bb84d12891bffebca30a8dc38e2a3c170b0a9f2793b77cc6670320f196e76800245e67f9f494cd343720e08c2dbb20e11286b75cc6965d82def21209c55f1683c2a16abab31c45d39de5283538a368def2d18a8b36154cea0efb0fb0abdef20bc8c2dbca26fb545ddbb00d7757bd7a765330bad5df816fa8debeccee0d95d6f3da1531f8dc41f1d42fd583c9ac2a4f1e23a03c8d5dfd98c5d012cd6f54c0ed749302532ef700924c1e0c75cbbbb73a20359e721ace6bb1dcbfc0edd905e72dcf17d08b02e72d97301aa5e2f396bbe03c18d25bee92f360e65bee02f460ee5b5e809e0733e32d9f38d8b122b0ce53bf6f367c327479fc6b3a76b90a865dbf803a059b00ba828a34caa651f32dbf4890e41d10c70a597cc6aa0a0b9ecfb7e62d264d3eb3583b3edf9bb7ece78bf396fd916fce5b8eddab074fa3a05bde430acb7bf4f460d2c3f21e3f3d807a58ee83a651d631267ceed164099f7bf828e133cb139f7b849184cf3b3ef7e0790b099f9faac85b2f640b1ffd582c4ee6516183d21748721f4bd6543a0fa6c63f9712755fd7d0e7100f6527cd83910eb364e2a14b9d07131d722d4b2fe585d35dcc3c02676b5bcacea2f419238d914e9bd95d770de4ca69c9b36602ef47759a055162b9929a45bf2e7addc9c9693bd9b2fad2e1e6cd8359108b839c0a05e20febf095582e08217e546e5a5fe01c1ba9e934c1c4b7f716df9e45df1e43abef4be77b02f3c795134fed3edaf20243cf57ceb7a6ba78ee63c91dd057b74a56e0cc9fdf6c53c1517a197f63548444bb819f3af15f06c4df5a48709e366e5d894d1d4c3d5f3a5f5dc3797e017537174e922ba751d7ab4d0a4f4ce1f889a7261ecac6165e97c2c443d958754af5949d980ae5949eaf29aaaf5e3db4d978827e6d6ce1a1de8b29533c41aff075d02bf48c03e82bb59d3d60faf56ca37e39f461ea98983c18ebd5ca2293721e663140849c887d259a97acc0f6df5fce476b5b8dfd11f2db58fb8d31469905a9f1d6e57b96655916e5302a2756b2025f99e5b762a1cd864f9f2ceeb68d5577d5a7bb0ae46bc011d4a87c01e108a3514a2c303a01a11f1c4017d08379cff649ba8683d243e20109879404a50a0d6716f98ce347469f360fe6f2ea96eac140af7e15f150d74d77360fc6f2eaefa12e1cbcae7a9e452e9caf3e6d8080d5afb575170ec0b86e1ad579f1baead5c2f183e3e7b5541c213c10f0b38d958dd56ba990c361f35aaafb1870756b0bc0cf6ba9b0dde2726783af9eadafd572ddcd6b9942f8f90e28e4731f4bae01f4b164051efdbb5fe01a370f46c747fb71dac4e879de7cf7a11e6b0538db0ff57cb435808a70df0e7ca9debe06f4d41f967de85fa3ac2bca86f2c91ab2eea3b5efb021e0977f89a9e8d479c49474ea0c68544c7d8167d014a353d7a96b370fc6e5e903eafa645197531fc243a7709fa8531269e5f3eb61a1d4ad0dfb02ceaf67070a54b731d55ebdba29a6a457973d0fa6c6579f398d8a5f7dea34ca86af97ea5f66bdfea53e45429cf4703b744735201fdcc7d2410e6f01438f9f25056ca85efa859989b482bb93f0717e1e4c019e67bcc34f4cbd3c6c816690947e5b24c4c94e77ef87ecd01d44f25243b2c390ee60ec10e428d09dec6ec80eddbdbc93746b5f947809218473c20927742da73ba9e9bcd4925844e0acbdbc742dc9f322783a4ced104f721b024f2595db41eee05bd070341c2bbdb320386b392f694828355815fb4ee17640628cb1469f33097e3daf257a95dbab55c3d18e906e63e7081b4f7cf468e308af8b5ec38b0a440041293b2b3b92abf153b9949d8f413a9ed712e5f66ca838a0d712b72ae04cd231ad5e0b0e0e87f279c7d345e1a14839285212af8b9e3b293e3a49e7a30b20e8c1548f2aed2609249fd328cd062f1405e9d9864a006720e9e0e0517df458390104bd9678e1d8b29bd7122b17e2b1381fa7cd75035f87a6fbe8fa74833f250e29ba8b387a70f090c480a1671c3cdff59ce1be2418eefc53c518a5cb4d66312bddbd39e18c5cb6807717638c5246196564e9eef98a6902ef878da7d7a1f75aa40aeed55856624329432a42e4c3387a82271503ced80ce599b7d0e5b98f7eef69ef3d6cae465ae0c9a1d8bc0b2f95171066eff9a80b2c21d7cd5d5be9bc32367c5728cfc42c268b9192d25aad7d6e75efbab4fbf2b5401aca330f2916a325c1f95df1cfafca31e9399602e7c7f3cfefb3cf6ad81de5964ddfddddd11bfe00bfe3a6592830c0cd65ecba58f642b086f28cedb7afa55a16b5a68c56434c4548f63fc0319a9b7046cdbd2fc6f6d158770fc7f89ebc68630aeb13f4ee3e3abee19f63f74e18637fbc3d670b118db201cbf1cf516a70c66ca34e32f6848fc6deb9f70ac8e49ff715dde49f47267d85cf4a4e5aadb43636b48f566b51ec3d6b5d179318161b62167befba58d61392a1506c18525dd87bd8cb9e86bd2d9424a4c43fd77292fc738cb1b7e56ee29f8b744672348a0d471d14861841617491a601e289420a9e28aee851c11b780422b98147601268d33e0f8ce737fa8401d4c30e1e6fcb393cfc1d2f8a87ff02bb6394725249696c4861c728e59cb4ca5a63c32a27a5b55a6b5df2ba62c3ab5acbbaae7bb14c66596c985d17c3b22c14d2b0c43836c418d4340c6291088323148982121ba28cb0f7b66c5fa9843d1932b037c3244da6d8d0744718dc50240a0637922561b09405296170939105818fdf0c3963466c38c3865484580f3d886faed22963c3920da908b10f1d04df3ddd3d6f78030d6e3fec201d3b66416294591029e5cc824c3ae79c340b42ab8d0da594d29a05a91ffd6a740c9ca5ce43cf52e79fdbd52ada449b56b50a0808e2409ce7358ba163d8ec01f5aff560473969b5a13cf392831e391521322f755ecb73aa82fb58320d9d8f5dca995eca79a2c453ba82a7d4a494535295a428f594989456536a3c8dea6954be549a141a8f9452ce1fe06ca97c524e9d982ae5c4537477934967ea08811a0f1097d77aa480f3b5539225d54747b1c1b9f44490957fddd197a59c924e4c693c259e8f26ade7a3d3520e901baff55081f3b513ca42c42c480d4ab96b875e4fa004a19ce152c949218df29a3a1f77ba8b41d431d640f3b472d71394bb49d4dcf81426af8508a1e83914868ff94ac9a28aaff1924b611254e369e02802c79a2ffd8ca0eea2a34001e76be7a3e752ce47bf15d6174379a6b31072ce1d28af9d46416ee57aa25196864e6889fb58f2ebc2aa5dfb715749b0f5f3f23f00a99183ad0b48fccb2f84b0bba4ee4c31a4eeac94504aef975cb6c05fd7004fa3620e6963d5a8c8836ac35cb812c317a3d45a68674845087de8fd90cb1678db9d8c5309c69a5be7a127a6a65be781494c51b7cec3eac70beead5fdadbfbf1050f51783096b3740c8085cd1f60e9f70b6d5381ae39e4944cc7ded03e98cca15b0fc672e8219e07736d37e8c49375baddb0134f09a0c1f109a089a9be41a70d70c3f6bdf3d6e90daab77ec3ea6513e81f93bb21279eec18f20d396f5398584038db58d958c514fc61e3a702d4358f5905a6638e07553c59d7361e78e2c9ba25069c53989464803bb76566dd0cc544699868d8d8301c0138e5a01472365c7ec3c64a0d1500b44cd984529594696ab137c0d47f2e4dc0514616135d28954d4bf0917e84f4850073ca1919901a2fcf00a71033b2181ae37bf1c538371d110c6088514606c409a52c26de508058228d50440490524ab9634ac95d15868eb3d9043ca796ed300036a3c013cb6266369b800d30650a12ae74897a14c22598f45933f5a949b20c587a26bde7ed373a04e3768a63e9d0137014563f9f59fec68d46c954c7f2c3827981a1cb29fb5f7a0517cdb7d4993430d6a0601a62918f1e87782818d45dbb183861dc8061e3f3b16b9a7cf4bea2534d134f340fa6876b9d6b31f1399f6d4d8fa58169b0456050a3ec103960dcd4408b429a98aa57f4a9bd498d8f0d18df358c6faf62e47cf77c9e34edcd551428f0f33c691ac6f72e1a5a44cb8a4979bb5aa3192b98a4409fdaa5d7bcfd7bc3ef43a802047ef408e30cee9251a221832ba9e0c05ea36cc02cff2ca9533b340578c494e5dcf3f3f97e4d2c6bdbe3090b183a7d1cad4e1d857b3650708c705800c0c8fa01781100187dd928bac1d7cd29439583337f0320003925a41e7dd2444e0058901a4fb949935fcf8c28598cbc2b1c475ae0279fec301b53d69f3f6bb3d817f0668a4a703c7d017750a0b09ca22800a3934800d87c3043b1c170e6c064f417e3835a1633b9fb040c4f52c6c81c5a0e2cc65016a47f723ba830f42c8b91723201c75833804b6fe8cd9e7f386c1001df8b300dd2e1ec9e49f31d673ecefca558dd209d9256b9f3606adab33c824eb566c0d0a9f4980199f909c4c2d721a730faf497c5480ef78f49139d5075a19237e862e708d8f46f49173862c032fe2de982885e42191a0b1cfa790117564c810b24441d60d2bf255cfc0086818b18c41b5c42432c03cebc20039cad9ec033a250c511d6c005254d8351fe2de1c2911e70a1087482edbf253e62c80067ff96f880410b78f46f898f16b8f0c9820bd8fab7c4a7c787c7078792c162acd97b558af2d055b218eaa329e06c2d86498dca2c9f9bf381e5e1163db831658187c6163288c18c26392964d0810c2c4cab2cdca09485ce8c55143520e9c858314105284c7e4af665450423238b2d86adb0435a2121727283b2a2810c301636a3151146342ddc8856344484aa00c25fd020abe246d3228b22b02b84b498020cee1535997dd14275596c315c8555157e30ec0411568fea2261b5a0ba90bca0f6585ac000069489d5a2052a9856d8d430dcc82cd4d017ab8511f185c7cb0e1e4d56d3be5ca1a62d86f88a9d28b318fb12ad14b0fda53b1eedf9e57734c7030b4f582c44615f62cac207450ad2d0d0d0b8e0473bd6a9f7a3ad77bb73d90796b7d0a74fef7d5001469f1ef7a0a81dbf446d3e37b55e1b4b9f30662d36cd7f4bb60086cfa6cf560048b8ef07fc54622079d13f551a72dedffed5e07ba7977ae9537e57589e7390e29fefd028ea3c16701f8ea680ad0f2c6f034b77b06302632d58568067f0f417f08d7f4bb6800414d8ff2dd9420be40bb08d2e7411704a15a0c0222898e08a042fe01947c41cacfd5bf2e4c8473560f96fc9131bf903c22735945adbca66b27244050cfde5a1f3c8a151d0b4c512dea1db4e3de8af558ae0f76f4915c4f8d1bf255838f1f2df922d90f02cd0f644e23e967cc2f97e38ddc55c7f0f26fafb94957ca9cc9fe3e0a5322ec5a74f8d8a47c82cc6c6181d6636c62e2c0a5f0cd5987ffe1ce6fd58406f06fd73f85273154f9db27a2ded252a703e9d8a9c6a3a9579fbc9e674e474d3288b24f4279ad7d277d4e5f4bda1341827a6ae913eb51fc139df292b7a8d5c23d7dbef914661de7e8778a849c4eb681eccfb9e2ff8f67c8b7ccf2298f8f6ab613bd6db6d726d97c92aa6ee4ebe373f3cb7e7bb3ddb2e4e9fdaaded2a71756e13ddb557eee6dc8ba4bb3ed174772ad25d4b79aa39d174d7279a134d4ca92ab5a6ac3a05d30094f29312060d9a46c96fa761c44992ef4be3c8774a9093263ed328927da65143c386c6cdb7572aef4da3f25c3d4ea3f289e644d3a8d545d22818c577133e632d659e45489d3959f03965f57d5f5eaa2d30fce991e6a1e7942ee611f82dc9c2e6618defed849381e1527961823eea02435f69f8847b6316b3f23a6eb262d3c2aa8513c64d89987bc109218417cb20845906278410c60d3a868ea15f8c455116734558dc301c79817177170513a16473ce199d84c5ad94c5dc1216a1cb802e03ce980167c01286220323cdc04aa692c96422a18c4c261136994c9a2994994c2608fd39f49909af24d69cf3bdf9e69bbee5eee70525fc2b651693c54c2f5981a316d45df5b9696274d798a6bbea76ba8ab5d049399d823fb0a1a1a119e2477592ce13241ed21547bea6e834f94a527dbdc2139f5906f099d4f3f53389c9fc91492b215b24a93182ca76a75179daa81ad55353a258f239458aaf507c66794d0d2f0135f6c7f5ea1a026aba2172a8e1f1e37ac629f8ea9a182f872b539aa059cce452746a8a4ecd62529ad082483b8dca5a10a989eb4a7402ae5727e590741a15f460debbd74d8847b3c1436938dacd111a925014b423483938a44bb1aeb1454e8a4e8a4eacb182a41c6b6a39504b420b4ad1815b4ace6ba9ae25a1c46b398d4a41029272483951d082ae9beb6672219eea709b9133772047cab15fb33531792dd56de88478701f4b26017dd76fd49c73ce28279c574c26ddf574d74e1203a69e67cfece9b96232b9822e313a55bd9d74d35e6793d9337b2694714631a3983c0f7d740f068304245b16a9b67fd8edfd90734a29a5843fecf6dea9edc3fed13768be5df55ada5fe89f8dc73efb2b5bc227a3ac21e93e5afb1b31d218384f9ec9037180df98e7dbe5a6ade0a6fddc2f70a9a651d1db4b463a65bddd46ce8379f9c634f3893e693f8d02a35333499fda9b9457e6cebc9948b689d35d6b2bad5df3e96ca2f1d26d4c55972ea5fd3c6fbe7ddec494ca0ed62d1704fc513915e9ef47f5991f720e01fb676da501c5540a1364e041174d9ee0010a7eb46b413135e3832cf460a1878826a8e1073fdab5554ccd24c10946e090c1e6c90eb6f0a35dfb89a9215958c1099a3384b1a4c98ff697c9fa9a8fd47eba6b8f9cb6eaae1dfbe08cb5d5f70d1a2a85fb58f2a3c2e62dbfaf6405a65d29850f448ce430efe67a48113120622e975e4ad2a9151b8f6fdeba36d4a5004f9657e10cf0947b6061882dde72da83e7b5dc00e7ae640556910e5f05087dc9f5e0e9cef2fed13ffb57ca2c86250c162096a0eeac49e92c598125dd4a56e0947f460012fab904be3d7a2ecde61158d3701e4ce92def1eccc82de771371f353e449b8f1c3ad5a3c9e9a57a44e19dac1c72d8b1c3061b5858563a9901892fb91e4c3a1bbab3aeeba5eb0e0738776f7536bc348afa75d1f02b5dfa88baf4e1523dbd0d33e98ff3e1d920d7a6a4c6f52f70be806ab8e517d01546a36862ea865b7e6b62ca865b7e6d62caddf2949d075323878d9db72eb7b1b9ec6c2e3736179d78b2dc5d543536979c78b25c6edddfb81a56b2024b7f573a7cc9e5217f71760db886dff01a7ec33dbbe0c4140b509fac120e7eddb100757763ebd1134f96d7d876e8c1134f968780b0e71e3c2e97bc2e6a49d125794b8bcf971896c60954a0c109545cf1f91eb9105e545a2aea82d3a8cc024437215be400b184f160a45bce12d4a8118c08f05fce428687c3caa683913e593e3b8bb91ccd8020823f870f9ecb75b9e548f25afaa5cf238d92e112cbbebe0a89949168d0a0e13efa5d19980cabaf8fb6fe3bafe3bfa27b59ccf0160bcb185e4a871a16181d189d975d1fad7a30a1175d9eaf285e74f1bc285f3d2fd2685ee44c5ee45a931789442291db073372915b0fe6bac80d808436c48b442ff298c5882eec6201ba2eb70f46e4975b0fa6e4570dbf7caa62ea865f3e79626ac5af8bc50c7ff98dcdc693f51adbca660d80440e1c192724de7219396f59397058825ecb0e2c40f164f936058c0ecb0eac2b0cafc572117701bd16cbe956ff8403a39380d583a14027168de7ad1b6198e208ae5abde53a64f17060d9c17369a20313161e64e12d961e14f160260b186fb9e53ab4e0a158bc789df560484100527fe43d785ecb46053cfd3a4cc0ea4260e7c1dc04aca6e71c303a4ffd6e3da2f05a8200d19f23478e1c6134eae254a83f9f1baea09852b97ec3df0fcb2fa01e3c0f86d27f31a572391509acb80daf400dbfc19de086d7701bdc0996a0c00dafe127b0e12bfe7e64fcf9028aa91b5c9115f4f8b1e235f0470db7c1d5c01f2b3d784c3d783c63cc02c4b2b9ca0e2bfe9e02fda3c6b58d9ec53113931a9b8d27ea2bdb8ba74bb1193fd2b8f94b03c9df92cd5fbf5410874ee2af97681e8c08453d978afcf5f772a9e62f065fea027aa76b0c2fe5829386ae44f3f6afc4e46834a218158944229197ae1e54bc5512dd9f77865f087be5be18a59c94d66aad65adb04b89982be75e0ccb32895f4b4886ec7591bcf477f35a24368fbc744dcb82c89f362fa6aaa8948b96a6518f3a86480600008002131500203018100845e30191a84952ec0114000e8fac4e64441709b324876114320619630c21841822320030539b340002b26cd4b38f866c31468ceb1388f02b3a9767f0862059a6168928425c3d965d4eee317a6c841e18135ce012660d4418a150bd08f8fe3af87f90088ec21e9d3589509bd353d1d8775f6e91e88edf41a30d0bc0eecb2d0d7453f9a02387d40cd8d0cd8572fad64ddb10af03949d87a042e33e3e1f5068483777c24443835690da93ef94a3455ad15282588443a3cae9dee2a3297e1a26d1ceaa16a994d2f0cbc640a9e21690ba92c0ae3cb4f84626ab69e1148011ac4959a825fd702b3a516cf578532aee1930d1d44b090aac39db460a4a21fb5aee745c989e33de80814edf7a4c7c4213b18c8c5d1746359269d553422ffcf737b82f5614db6310e9ef82a1f3cab4e01b703c51744833f6902cd299e333d1cba7057edc1f3169084670ced9bd8e99597a24c1980b1820ceb70f69baab1060e9af4aa1aaa40fa62b7e26ccd23f3bae6be4be08311814b712f251b161932d04f9270c1d6e08a40f8c80d0002fdb082487748d5ecba1183347c34bdd47e8583d45f28a2f357c5fba48b47385bf9b0057ed002b8ff63f32274ed26e377e250209835ad82b13c0c91cae138cdc24f6e980f3fd6e4ccc4e9dd54e5d929e633f0c3854ef29182df332c9b5a391d93531bf67e99f82401d88eb784c28b0e02a7f86e8f6e1206e9eb1cef4a3153720cf4504c63a22faa32d6ea48b169f33c0525eaaaa4a2f59c0b734effe59670764cadcb947e2695729fa6b6c10d33b9c19193cf74346cc960815fd517f9df9fbbcb88266fcf58893a6846a2d9017cd8687d3a837cf322530907536d5f10c03f861e8f4dab05b19cf0a4faa9e686ba5894b3049cd8d833ba6a972057879561a8481605d02bca4bd57567cdae9d99edf8340f1aacb621dbedf52e1daed713cf41480a5eea4f6e6ed674f56e5211ab60214f30db4769c1840783863455d19478bb4bc0bf0f0ce81371c5b08526b18c4725e4639b718d0b535a1a34141bdc3f541507915a588e05bbccd5a6342ede722442cfd5651b0dc6e0551f9b09d4893c716b4a70f3fe1320f20070918b78370a9c7ddffa236f59cbfaf7d2f6a252a136871bef1eb7773e2c4b46ca1528aa288bfcf0656a8942ece227a5060ef77140b5df03568b1bc485a36d081385113511cbd751418d4c54d925e2a5ae37d7822daa7e8f06f6625793f83f704fc26c7a5cd01fcd23c305d454777e6a3bf034cce1e7a7f0fddd2d2d4bbf976b2955b830cc3c073ed9bb9f550885c584ee39428e53eb2d306b342967bbb379e835d68752dfed4dee5dbfd7a1511b86133d7b0fbd3d513779f24c79f0c181bf5056aecee4e766fc7f1b06163e0b91df0835f4dcdfc9ebcbff2cb4954b105747cefc90f47202fad5b0f93313951c45d5d477e206e1e192d51c429ceb86753e4c24da14c19d548733246b4b5a32c46b502c1482708c32e489135619c9641b84eb5772c0aac8d70749ca4fe968a2807c965ca7d427006a137f37b26b9059d95a7a4473b4c7d15b0b96f2c4a28e0c27531b7dca9fc833e38269b0c7908c855a94a17bf7a39a39053f2aea6df00b1c9c7ef205c874b395ed419f3a09fe4088fdd7d7c67f3382a2b3440d69d92f83d419ca1bfb20ad0f22fa557fe2134d7ff7dac39e1ef1f871d1e691ee94348f0efbf499ab8441a6a818b0e5439e5b5b583a78d17ab13b171a1825747ff3f34965194ae4591f3187f5974a37dda992a0d9fe2908cc35bf51766e4989b49434a206cb13fa195a7d2ddc18fd9f73ec6ced2b6faff0f38785924c46adeabe6a4f7b084adfbde677fd09fbdb8518e3861f1e8494aebfe01d1d5905cbe67fe4bf6593368cbdf6450b74306eb137072dbae4c1f1ba61e6522e2a3af555e6a628c3e035bc41fa53296278892b5299c94e588e03275bd788d3c68a8d8a6a8d2215644fcfcde876c41ada44d332310b0e56e9f56b94204728e7057ff2325468f47bdf0b4e2095ce6551a6df86e2ce5035269f98962f6e160fbb2a4ed83d78880ba88de53019510f27998098f6d9c35d94ace6f63b964a3878db1463aca1d36be44a260e900067257b8a8bd9c89a83b41e4b2d2e011fa51cc2de006f3c56d516d73baf8186c735b916ceef66139fb8c038438e6cb280e3c3994ee7d16788b8d1773555d0f30561e46931feb178c1f6a5758d3ba2b6d71a56691f7ac7971e8acf3a277bca35d50335dfa1d8d17e90b3e8ef59e7a3c0422e91de9f6ced87279fffe73f742c7bde4abc49a6ac6b75daeae0ce10813024c119f62a3c03e396c7c96a925859097fb974c9f47f2fe9e28f1bc2dfed147395adcd1f3be7f177a1722def620abf41d6b9973b8da22eb8baef3f56dc717d3cd2a4c20b928adf5fff64df7161624deed2b21fd2a12aff7a1933e8fc0bb3d54d04345e5d5be2ee749affe8faff2d1925cc938cbb115cffb3be40765ac420f83a2692c42e18b9e2d9dc3c37e7b4b4acf22f17edf6efa7534bcec57158fd6d57ff8a2f7968e9a17fb4a47fab69621879ee4f54563d5499e1eedaf5793c0bc9a33cfffb25f8c9f47c94874986f7c995aaef8b15d1fca98676ff7e821b8b2310729eff0fb81cf3b06a5654615eaf49fb0f3511735d179afaa3ca4b3a38d37909a3031274e03a71990fbfeb2f7b565ca4640bd0348a25087bbb0a487f991d5a298d12a43ff2a73d4f5fe844f5f0d73c28e1e3216a32f732b165b461d97e3e6b67e4553087cac10baaa9cf1993fed101ef9552d909a6f0d259a115661c8c5e8d36493325d600cd5ebe49c985f136f58bf5b414e7720ab148dc880a3a10a753ff5f76cb061cf372b612fea4c8d533c1c096e60f8547daddd98983c6a0e15ae9363a13f1f0e02a9a462b5a35884fffde23896a6c7f2938c676da1a8ed3e3352e10aa3a26974a5c56ff9d3f6112d310a78e8b653484f26c85e4305b0d8206eac5c412a56f8854bad97e072fdf42b8cd06548abba136deb82e8198b56b7e3223d4fa14de8a6f4709c1b17796596e52fa6417074dfc213ba43e160c391614bcc208d49c3ac6a938ecdd642a3b44d7b60f5b8d0230cda7500c29b6e54ecc2c80ff9bd8ab5f99602d2634d7f7a6aca7b66ad6d75d49be81d15c2620cd0cc85b97a0898e3a126de10e23c6a27ae0daef36e22ac6b851eab749577e8a0342239cf6987ce741a3458ae40fdddf82e41577123bbeb6e66bf461d7ef04d2a745210e8b56cc18ad82499f5d0a8d799a7dfff4fe0414119e5ff2fce48a7d8beba606afe31aac3851501c915690b176227529f46c6043da3da0f9ca7cf5ca29b33357c3a1c66e0dcafb17e33f3cf0a070b1010b053bc0a9621e2b50346f0df589177a25e6164c5ce686f8e44eb0525aebd8ccdb3ccaab297b6c0f9572c3fe920b746c014599572e905bc2fa357c81caf5ef63281745896c5dbedea159654438119a17d3dbd3cb32b21aa6817aa90d823967d06f8e7bb86a240750f343a0fe534e11fc134d18cc2fc7fcd7601d24906d098a8875e4b61c80b54d967299a52a9915910841a6b858b741182a4a490b47ac0a8b41cc80b90d26cfa97d8e93b2d6edc5ab98b0468895740b65312f5137493f751b67e6258762e7967ec750c64dddd6b2bd55a2d7b44346e4e5df2199ca60756df42c1615e9d39405fddee400bcc4a3c820afd71d842614ac7e1c936b73475debb7d9c2b20f53750b2663da3bf439f726a515926d236112207d6667fda01aa14c871db246237356f00e020681daf1d0f7d44fbf76280b85c2a311d72f70a834c69b06658e6840cce1e0200f4cbb481bffa92b5de7d98250c6c5977e7b7c8ee70472995df35f8fa76398000a95ecaf50eec24ad6bc1779beb365e31801c925b812ab72de0bd948b758baa5a07f3286ef97cf27c93009d64d0b0b2360a66e9c2c863a67c803900f384715c0f59b8a2fe3d451348ae81eb60ff4e0d3ae98b304b8102528e9a33893e41940f42a08621ab96a823f88ab75e571f53845a0e7c5d87195288f02a5c4fa9d37d1d63d24ff95e5613eaa71d38462684dda1816935fea94c9913a0956c40e2de43b7b70c45f72aa451fdbb1c572fa66385a021e68d38ba00dfc4ed8e8154b09ebd1ecfdcac6a62826743ad19d3053ddfa432de40609f8ffdea15da372c6cb40e2aa62518460000af9c63e9ad3c5b130968eafcca05135d8a77cb66752dc2e0dd1f7ff03cfe54d5a7214643e67e14230338cfe5fa589a67ef0668fc1849d30a0f9d3ef828f1c0896dfd0577b70daea0e3cbbcaf3b5fdf58501dbd8a680ef4a077ebc10ebcb3538ecbdd08c20eabaa097777ee6703f566715c5e9a7bdeeb6b6629275d818fc4edbbd00de47028ed57f712d971da4c2c16f09a3f28b88ec4dfd276a861150b7461c68e6442e464e8cf17d20fe1f9510b3c338782c326e90cae0558d0a729a87c85880c01e5aa125a63c9b500c7d4675bdbf9f2077b6b03f7012ddc2c4a7e84ee0cb1785bc04c731cc72873176117b3b1bcbba3cfb73f9108cac7c2fb0a00eda4d018f6e2a6aa61b57f37baafdebdf91e43bc02567eb5ed6980f870af40935e80bd4da057406d659f0e98db9b99757ae55d761b1a9c0b8ecf3f7c6db196b9c996800e61021256f49e4b6b762470c62bb38f3ab4652bc2651a78a75d8ee4b25a63bb5fb80940e2f742fcf8067d41668037d109f038f2fe3d0d61ad0e31dd22330998e2acfa12202095a8d2901f221419908cd505ca8ae2978d212492e6d6539609217f0b7552573fb13e2da688ce87e0990c1ddb225d9b98d2079c804d5102c5649c5313af355c27ecdb0fef66d82d37d11aacc3ef0ffa3ffc87cd263611f89babe2251805727874e9a73b7770c1401805dba93ece6300e80110a1ce1c5873392af759902f99d0b949176a2816126e8a96e45854457e8faba9f8edb74e04efe0bad89611622093dc31d4210625972a1866a5f752d55543a4abdb2b8178663c6ca8b85117b6bf02df1c4081a2b7092f1b13fd4ba113a8341916e4e560fb9019a305f3b81dba260a5156116ec996b2d02749cf175a820bf9ce3466ba3390ee5751f751a13db458706a4180ea3c8b337cc380b81535b2658dbdef1b7d08ae0e425c8e4a3c6d908464440d1cab44dc4dddc54b662acf095551dda80e652f19a5f4ea07e1579a25895690b8bc002dc6e09197b047b7a54493471bbc84a297b145f255a1dd1bd738d2cd31206fdf7a3933394b993a5be98955b2aee9e5581c337520a7c9ea073109159b46bf44e5361143e34933edc667d05e529e2d0e5f593cd9048804168bd7ba68fe92cce1a5354588e16353b695f909bb48de6decc84c3862c4946f2c6fcdcb5c9c675cf7ba6b45eeca98572d339a4c84561f701ea0e2a07f6c36226cd39c66a47093681cd2b7051177f6a45004c7e277e5c87b960ccb13cfe78f365a718235e2384cb9937dc48567a32cdfcde963aae4d272098a43cddaebf4906ca5b908388a22aeadd722786b832c4f29a0a302e214caa50b621deb374bc37c3da370c0c49169e8591d00e14a031ce24b9391b5c981bfacdaf59a0e71a5c35e73434087b450ec3187d83945f10f03f2283df06bc1bf82060603d6bc84c740a9589ff329e91af8557601562954eb951c27d8ccada7fb7b0b7485754e339cbecc4e83b69f7fe82fc8b8ebff8adc485d2dd363c88a22a68612ecbf9cf25d5f6b1286ca3da8e89cc6cad14175e313709b8c3db9a9b1153db2e818473758911a8f9a0ecc3708a12d650751dc54492728fcaa5d791982e76d4d05cd3d96cb91830372d0490c8463724f0bb87f009251d84615d18be31dde18721c36c3c96dbfedf923df5e5a842cb84c5666e12df369e30181c183fddfb7b0815844bdacc322326dd7b3f1d8710f6d26c457a99585ad1cc3a4625106773273dbad8b7a56ffa1c80a1130420a1c1cb72e9753371c200ad8af95b97394d30e4c54f503d67ef6f5dc823ae7b87bb0360db59cfcbf0684dc9b4f48685e446f8f5b33cbcd0efb3085c8f753114d3c7640ce807b8e4ea3ecc10f266d9cd4725d871aaa0bd37c5defbe62e6099bf9043cb1617982b4724c39db5a312f3f64326deab805c55611f27e2fffa5f73235d62ce2c6d1200d642bec61babe989e2913cea32c78b0ab3d19c19d5d8eac339f435e3bcb1951de82dbaae0fe476cb5fd2370fbe8db632edc51b87b9c6e69d5294dad35b465d174e11c7c4db6f8c12adb59e5bf21628aa9c4588c2e78c88c574c2bd751eb75ebbfaaadfcd9d146433d12c56475802cce5cc49e8d465a380d0824a26d301110a2514e43c9b5ac60a6228e5be5ebadc2b79e36b0d57046061f3187d4e0d11b190c2c3c0ca66204345a954f597a845ac86cffce08b14fbcd0ea9de6b9748de85fff5c4ea41d8bdd5fd7dd6b2506e8a803aa264326d4f09aea24aa9175b03e67856329c91a1b0975a2899bd8aa7dc9ccba198d9e52d3b58374378df9e60328b4ba416f6320bb2e9559caa44e891270c473de083f3139c4e81c79c2b68c93cea70bd60d8f542d92ba1ed20f3691bb017a04649f49c33dfbe4537020671ef9488de4f724d9b3b5fd650aeac53138986c83c3893bb0330408e9e91e60d677d462205ce74f297b140517f94267745a8fbbdee2844e335c103913f15e14cdf88f440b676465ac645bb3028b26fb0dffe67419fd2f71168f40bb528350612ff4ce139f22808d8c98f6f0565928ea0d0abb8c1b0a17791b7d63ce4aabde230f982e2b0509b33b9297f69ac2678923e64647f867f432308a8dcf85fe5a6b765549867a4be46b3ab3402c8cb415db09f52beeb100a54568caafd88bac25335e06a16752d7282d471b8f348fb97b066e70bf709bbcdfcae6ba0c0ca38aedf380d441ca088f2316779642031a93c01a3e8c161782f2cdf6b1de4f99c18f3b11cd7c7fca630021d9990f0f9772a2673a8cada86787a82ccb45fb0169845ab2520e2504b503d4065715f4236e7a6c6b450c0645279698770f4fdcbddf11c593487705dd45bd8f45def9c51461681d052e3a51e21308e27beed0ac6da04283d0290f0dfa0c6d3badde4e08c09f69fc0fbd754515e2a499f8e148a4be9255eb955343d9fb5327ba03225f83b506b4af3908f1631ea51a6747ae2e44c2d7fbafe0195ce91983e186b706920d61f022e904b9c9d1b2ae76c7ef7becb37dcca113f118f21087d7f4eb42415e77cde4805775dcb7c800cfbdf2e6c967de0388b566d0e62c73d81c958f94b131c938bfc51407ae613349bb668eb67f6903844ed63775fca4fb6028bc528987427fd2257d5a4a93c63c79bea12797c24e2fb5af40eac20958b96aa7ac458e112622934763523a7f648b414f6162a117269775c2283ded3422f2b98c2e91974df183b49d6e313160d6bd3e17a87b07cc67b166bb00962bbdd4940cb996e8e33b5ac994a06b44e8bb51df8b3db073c59dd1f6ff06b9ba6e57bf53e39a0e262dd4eeced21f40e329ebc3c7c9128226730a531766e90b9bfd0e1396ef9560295ec4cc235c8d90920d754151f5edd49be0d3f5f9b1b8e508decf244a7ab3d2eb4b0bb6973827aac5aa72b9f572d3a354daff7f0be9774328e1021491ba1f9a176c9c749b61da149ae977cc34337e1398708e18890b17506b052eaf647db0668bea87ecb02e55ff1a0dc4e1331eabfd05947cc6d71910b4edb6392bc25c6d02bfef2e1d5083764e1580dfbb64de9fa275f77a6bb6e2d19f5119545a00a8032d185bfc063d92340c2bbd39a9946d7b3628ec87513f90cd15045e9747d92944e40b33b5f527f6cc76de9c213c3137bcad3d63e1b286aafaaa6dcb0504044c5a2bb88da1872594be4b7b62294fe4e24c856d1388e673b17424614312abd2cbe55c96c7a951f58d731e4b1ae44bcf41e99fc41f552643a5fe02ab34a1106823c96f79d0dcfa355fdb5beeedeca17cecbb6b2f8f4f439dbd18d28fc8f6740feed00e673c03cae378874b27ef77b8946a138014a4862877b80ab5c7b7fd92a37764fae941f5f4ca9847314f5f6ccecb149b193b93ad84ee0a824037bb26f0c048f413e3417aa6858c22883396c2b4de3c916baaa36eae84b9ec973eadca04c7a1b1945491c50cfca0a69deda342288b1836a7a55bb1c565a6bc05b669e9aaea260afaa86b2817106fd5878eb80abca375bef2b0d97534c411fa863a07551c7a3d0201303a430259677e19463b7679871df1170d92902a2e133cb45e729f928c739474015ac302cd2db941612478a3b645ae8d61745d4ac97e52e54acd9fe1d6c692c6583397672d68d9d8c3ad25f9695d7543d170de102bc1fb0b0fb64f9eb9102fa39508d09c4edcfa47983bbd96398c8a31c6a8ad14ef9b7bc8200d23929d90fee401e40f22b1f1d2a09d08f0cfd8db28d50ef86f7cac4c93ecc09ca73cdee25bc38e8116ab5da6916d4a582671c9db64982ddd55381834713c0b062a17b3e936f7061399192db302a9f86d6bdcd27947ebcc7a613da74889d81119c3c3d93452905fb4ae310b59c3eacd83a9c9d558be83873aba64355422120595524c44580519be98452707c999ded260a49ee5f28c73c1ed4ca41cd6ce6d4b411807163a39874cb80d361c59056f64a40ec7ba74ce603775463a101dfcdec4457ee06dec62abd53676f41fc8f46b8740164079c6aff19b2f325bf90122e7051c292fba2737c5565000eb5ecbc78abf3d50aa45384f52120e8da920f71fbea1eeb8f8857595a100624ef2218415dcef8173c9ed3b9360607ef18e6627ef6d1e211590b627e8dbe1040050464d17c032eb563583b333c0b3f04aadc7196c878030401a781a81a0b529ca5788453c311b128dc4bddf8f625ce47322305fae20a8fd01511c67cad82ce84d6ad9d0f5f02e0bacf01389ebadac3929825ffe9f9083998e0a8d1cd5250040febcf1c0b8f0b68b7d929cb20ea69e1eb4d712fc18f8ac0c122ef902e58d122e67d22f40cbe07ae7d1de3f7ec1149a91e32bef78a50eb4150fef6c165282974f496a96e20c6d99591caee0f6913fc741069f2b12c31c293b7ec140a8c31c1c65a83c40830477c9cf47a516c6f640934dae2a8fe2fbd1a4d040a97192092892795a01c71fbc185ccf6634403f986621e35d8d0004ff91faa11b2098a25b8216607c35ac8c0f5ac9a2bbc8272287b807bdb3fb0a1b7bb1583746262f701f69a28cc9a172694ab4cb3abd071e421dcdd29816ef3261895347ba074f8ad413eb4acdf9575041f3a41de6304057527125a524eaa29034d59883af2612df663d055e9848fca1458b6f5aecb08d968a09955eaa2933b027ff4c714a18365011f0eb247bccec3f05623c28450b8de042389b5ce9e2f02397727acfe27f57060f15b97a81d760a0eb57a616b7e30b9f3b85a961fbd60916c3f5a17704559e6116150848fa3c8c4ebcf4b725fd628ee93f7bdf9a5181a1037facaa84560e23bda82f8443601551775ca10136df1fe5026d6d5ac97006c326e6646ec04e2e757ec44146cccd759e16f7d87cf80cb1d17379d9dd501093d8f57066d5671d94de1f1af2cbed974ec03e69c932f2e7c9c970331d1de9b60c562fc1ab3008c7b05db215364a578b571c87ed4527311b44459d54ae666a362ea558d0354d5164b308c9c1830a3af1977cefb5ec2b2095cfb3da5baeca876c976b91ddaad8f374e4968fc22178cac2441f2627c3a7d465af8202cef213605eefc7944e54d7ddc410bb9a0093f57f90dad26440f6f272629c253bb3c80cb62c2205b9d2d234895a2d5bb80cf733894161f78bc18329b50193d46c7b5e43f0aca173de9551fc277c9855d9c97455f19c21793ab36a331a4da68ef9f99c41acbd5c35d58b2f66d44081e2e42c94c3533dfa67920b7abda941e66ad458fc7471f5143f9a2c640d03f97516423709c8e429ee1835120c232609513478da41cbd146dd9be73c3bc569142d0b4be9146cbc338aca1000f7e6d29ab5a962195a4b01058009045e668237f17af1295a901be342b2cece4a60f1390ce81a2df5980e1ca4633c6421a2dbafcbcb4096a6cc710168f29d44e03ccde15c0a56f8ecef0dc0dbdb60f10b13d56f5547d6b2f12a77d1c9dc641c731e0c83bf59ef1f3273e3d45abf2a6a2e24407283d6c72d88c251f32ef02002cfae8015942edb328b21332e64898311a87ffc419b24d95c629e8db54ddb27a93bec04cc92217157222f063b1f37c02dd1ac21823c94ab7b12f529494f8178c8e1919cb582d162e4afc98741b7f48a0a516e795105a4116e2bd9e8af539ab482405daa836b0660b13208ef2f56f74704154897eb843cdc31ef95798c9c273fc861b7fef34b68db81198cd378ceada283bcea46d379b6b261a45688977a91021c8d230553a32bbf5b2eb3dc6e2e25c86cb9483d7798225898d9d9cc3f1ece4588c0a2b04dedb51e8f24c7b57fb78d10f6d37e04e09f06bd431740265f734777120ad849dcd004b4d74f21a40acd51187d00d75cf277ce013b589cd860cd6b8074abb3c1a40495f868c85b096886f76284345b0407fe0309bbd8484b3c14ce315d2e113de39c1de5c7e73096e57377606229db41e7acf3b0221e65282175396539de524b79b8f0b889c54336a75cff4c74b2ae02ae0dcb20f5c5d8217eac2302d20c0af0cac38f43632c20e89360b936491344853a55b1fc8e5d8c30c44b0138c1a3a10a2f89032e1100bc279e48e8d0076093c5428f58a0e666cd4c9f44ec76f4e12df5c8f32b1f0a77105f7dc7d7a777a78e9ac4ec41af2bb73d825ba7fbd4612cec33e6a8e86a39e8742f58f750db15f48c619cc219325bd308b8bda495feb555dba59800dd73c5c8a944f9c0660ac5cecb308efff9d455677c33074d8a08a73fd3df14edf35470c574d097b1daaf189f679c92b63e600006d0b09ecb51d7e0807a9d940678aa2ed13a3671534e3d8b426dbd0f02c6171f45bc06f32c544831ca7023b7107946cd7be3e654abcfd9813afd8659f214c7584f49759497e11c523dd8e0690838a29c70d6581703ad43a55a9d3da66605aed8e1556b0ad9c2725508e1afce904a4e48235486790a0144096b441778455a0340b2bebed79673d1697d77fff62687a07fdf473393f5943f0fed0b54dca2a6ec9325b337309e9204762a7eca47d99dfc4d4ac5ba2d37126106dc8f35c44bb3fa8231db676c258a999e46d8de4038a24f7479fde1a66180d2b2a65685ebc62dc589726b184aacb8e7294a91918aa4eec2c719768fc4d89eba1d030a89953ed998f20b487258e3e5144b0b4c19739485d288effbf150f6654472ac3d652e0b85233664c13ee164ec8b2e57a0a8358df832d9f7c99c7c1987ca8ca0e455cfaba15fbde9573d5914548985e285494f109af9ebf0f41c213c2f5e53d37ed8b598448ad3dafe20f705870e9f0ad7c13b2c8a00b0adb65766d2b5859cf055e13b2318ddba41243e936a4a9771d4e38c4f5b6f74966904166203d4cfe88acb7be5198b738b32fa1efaa1eca65ced85468fda65f2c8560a4b9aaa4a9a467c40248e4bdb2dd2dc53e768b4757a19197b77875205ec9c7e18c01a54242588847b630b53573e89f6f907d678c5ebcd9c54d093fdc2f498c6f8ac74666afa05e28574650f674a9600250b7a7af5ed523e82622a041fe1d1fd99c700e07eed6f13a7bace73f3eb4d0d531fdd7c13c364e8b8547526d410bcccb94c10d5f1aaaaee5b8c2c6cf8023cc9a09f4fbdd83de90e3938000a3259324806bf01440e6e04b018615a694fc9dd5002ef0c2ff9d5bfea8d8110085ddf72ad8215e862d5e4449265227bf0a5bf20315a5ba89b0fa4009c0f5adb69c7a21e4e7a65519316caab0ab1f26646de5428d500a2b15407847d5c4c07a2a6719c52a1c12ecf72e561777da532e39e22f22c16fe0c641ab53a55fc11d4f6ac3ae2d7477cf0d2d3210d4f9134777ff4810130c147f561871060c0316c456c0a03f6c47b2af87a64a9f20f0ce84a48ad91ed97f5ceca026f52b277eef502b1711f1e22254ddd2bf76bea1b9aa2e1415b8f49231ee57cbb2e8f512b1e9b45f19323ebbf143b8f219c164054b1911cfeefe482d24c95777bfa0984308e3a694d743c38de5099dc4568cd283c78dc5632d945d1cca82878bcd533990b92db504a9338c892e9c504eab16931fd3eb73eff1e6981733ac1e4b97d8af88ffd23112c3a29cdf42a7ec0f9cefcac001181c2900b799530c26a8893797108ed23e0c99387f5b264492cec41ce1517df01b982aafee2b1532127f513203bfb4e295e287bad137df63ced17d140cb640b87879dc2d4684e1f481c3b02ab5146c5d09fc61c03e0ba49716006b513b036513fe388785e4e8544cd3a8c1510df6b10e35343a8e689691587f5e456dd12c27415029fcc499b2eebcbe20e44c23587aeee89d3ef505046e2d9435822ea9770593c2b87398acd5069db34e12d468601d3a97d169e6d13f749ac830204ed13c53e1158898401303ed1a50f24fac012a3bab46d9f8faebde431b99345c740309fcde6830a86d97d7c0a939e21552a3e7db5cf56497a56a8f7f210dd91b38a29382cd2cdd4b8eb4084508e49e5a9d8bd7cca2cc83851fbc7db692fd8b1131348d57e03102bcca0cf619493f1b5f2c62a9019e768c69c00294366f0b70883914a33773d61b2bf98b77c653a577d034c064714da896a4048b0eb0f0eebcfca4c3cdae5d2f2708834267a5153bc6ddcc202402b0c3cdd3c2b717bf31c85ec5110091887d7d2d48aa3a7ce5a1e9868371b7bde74be281e2480443fd5ebcc8772065631a09e6b5e824dcb166931a5aa7d0b216fcb5af3884b91cd1ceee639460f8dc00d2525716c25aee874b0794aa06bfe4961c9ecac08dfe3231e28e7bfb4f9f166be8f36a756ec0ba1a4297d1f55957f6489e233cb3b56fa5e61010c56dc9c8ad42c78114a10448b1b21e95c389fd8dc4d03e42e62869548d4a310b80d2122ee80a33ca02e7f5b02637530cdae0f4a5b073dde75a06e3068c820e3c9303b8266f579bb9edfadc9f40dceb4272019d1b8a42d2e5aba5c3037bac6dfe0251b6e24e71f5b68b310981d3a937f9246f5723a50eb5075e82408b7db3bebf52147391002b968df43ea3a9bf960c1c2f5373a3869017c343b773d6081c2c6191103ccc3dcb3d90c36f0b25fc64a874ec47ab63f89f1cad3230a584d00abf4bf0cea2f8b26425d2bce46bcb9e8683dc5e98ba7c8542464160910fcf7d6f075f31b18fdb91838ba89e186f1915358bafcc7d92657df3a48f8c2ab1626407a38f17960cfb0129510a99b0e9f89acbd18f13cffcd9b6261c3bd335e23081dd341f5a14cacac92e8a578554da687dea95877cbe114ca053912d5ead0c81cd17313ead2f3523ae12965e6580ec5ead33d7c3fb3f8a7cc45e92cb2a2304d8985042db70defc658d04d78253ad04a1b892fccfddcf128aa7cdee8f67f53e5a024083d16c677a646daba8feb8c94ae06510eb926bc8404ab7da95a7012392bb91c873203c677e94b844576685f2619e7aaae868f82163199d6af2558e08f2320a85c319f8e447433cbe9e14e0025581a514cc3680f60afd00e866a031d5b36bce621abaceb2d4756ebe79b14dce3a4907478d49f155f2785c24bb4644b2c3fdb484a646e7d0a8563bbbcdd80e4b66eaf2cd675b7164ff857bbb128f9aaa8f6bcd04ad3382606eb68e48b399aa068317aeb070687efb63e0c9f22d7f28dd75a0e79a23b855d958e97718c593594fba5246616e38c223700517530b7ce44a62f7230c4e9201842a159508ae745416e7475e512143b1bdf0a20b01cd5d75c94f550d12fa4d31d2d6326bd57c108650565d020ccc48f69f38e9ca4cbb99d2c5e20f757a23cf28b14d2336ce03ff96d6cd9c4092f102eecc3659a8b54f553822338443ffc00ccf8ec4300c116d7338e62fa39504f93481aa23dd0b7b86f6c7fcc7b7e86157d826844c0e52a0b631c7ccc08652526789f4f61bae082fa9c13ed2d4fa4c08cb274fd3227a2e0771d4d9679fcfcd0d5eafb713ca1e507410294ca9852cf7121ae61397e9273ac2bd04f128f4b8c876acf11c3d483c6ef2dfaff5f92b4e74b806c505a8fa72b2072150cdf959c668c6191256b4172a80d66494c25d88a6dd43d25c282f789736d3547beb2f1b921a8b18c8c50caf067878719d605e3697cfdc5cc0f24309754d50eda8e0d67d46f72ab7ac9db58f2079aac87683e287963011d94dbbb677bfa81985234846270e6ed2220db26d5df6a02349a2073a5ba174d1385cd9dcf83b24331dac18cf6a80a1b7a75b0c11beaaa13288b58efb89d3fbe5689e589b8b4ba50541c99b5402ae1175aef726d02d9d782aaae130c80d4bac576d8b4df743da06f64e00ce0e56b89f6c56f1a2222e2eb71e5165a8b8a8ed3befab19df741c82c455c13ef07746c8fed8b8e92d11e157bfb1a3013dbf2d96eefb25b9c6af11ec0e13990d1439207cf65342b629461050fe0d72bb242198ed04c6fdda624088a44c3a3a1733c5c5c4602b3070979575f9adee17c81c881cf875deee95f90b0f583b525882ec7ada25d04640d8af0d1d110dae8f10c5e63f56e3f487c07be27e188e6cb0a7e0f472f538424e12bdb724e013cf370184584f0c514489727aedc895db231b8e1d431964f73112d205a6403331a2ac7809926f8294d34871ee1cd421db85b7ac046fc5a7fd5c2635136ec6914801d56893e448e151bd34ee2a0cc31ea0e429c92d0eb593de05a74a14051046fe6f4a428854d9dc5b19d2addc25accf1cfacff75502fed864e57741b628cbedf51f0d04b437f8e166049f445d16be502fc8b1443cfc87cbf16ad8f057d7d7948e31d2e95a920176a48d17a561e639197bb0f373c8d0f2667581c0ef14df93cc4037eee1ede2df10be342084a09114af0a01a7478704350ffef2df8752c1c2b5f9897c622bfc7fe63fc75d979ad2245def4e83a0397d8c2b863998e83bfab3e311b76fada411766b0581439a3ed3dc15f448179aa24ab0d09298f976d003bc21224c241f3c0b4f5186570429849a180fd60efe758b6ca1d20c00ca37f8930b86ce272e42e8914f6e81cc46aab823b84cb826d3f9355f11707307b50a837862b733fb8e5723161fab1735747a65c0ca54dff029869852091295b9719222403f717f945812bef7a74322d8333f08ded7a783e0bc8727e13469ffde026f7d393f1d3cb7595df67263bb92177dbf279f3c24c50b40cc7ffc57712150377ec7fb47ca2468a3d38d1e38b780d4ca007edda023e5a434b98aba9df8e1896b9334d625e1a6504b7b4336a54fcf4986b8a2a089e9ac6207e011c33631f6653a8739a944f6813842b65f1baf1505626f070dcfb9b8f20dc93697df5b74ca4d16951506ff4c10402972bf89a60939a010de7f5ebdc736dcf22b461b5648e9ea2b72f1b9bbef0ab120568d6c6dfd96d48e9bf1339e35817613f993ed19771a86a926103c446c2dcc23a86e0f00ba7d3edcb1fec8dbbf93fbc70a0f5c5df51a43e009578899256c7e818f680331e5bfd783d3de5dd10fd27f979927cb69bf45bc93387d73b36a78a1a341a31c4fdfaf700a16eb9028a53de39c68437dc2c7af843c32e908b9d04e028ba3fe5fd7fcecf780ddc7f4e9cc6acdf129a76490f599832edd9845e515617ea422a826d9eeda290c73719f7d4f493571a0520a291d55040ac2b81a351b1619f1ea29c8fd94b14e8df18f407281b249067e195f2143f1d8dba34174a030f726860bee87aaa5da2b9843b2c13a89b25d6f9305c3a87660a9539363b8b0450a8970a4195104e1f50ae249fb04a494757fee7a66c5af6ee9d49d3b6933456ce50f41f16bc8e943c2be792ed901b852a037ad896a0bb645aa1904f63234e4b6f33f27361fe94a878869efe82079270c0dc7249c20104c768b88a10a66d502a38b57f07ede62e0cf09fbd80a6e3c7d7cb82ae5ddd77a6c2780e7ad976d09e6a6cd2615115396b9254a12eae733cc0c8c980ec215cb33f83f61b30f0286fa2bd047a13dee41c4d6eb00d15c0332071b2e147d831fc07b87f9ea8ca3a980422017505afd19580f78b1042fd745710f44a2f97af538d84f6452bebafe026bd3b81456ba2b8ff0b12dd171483a1901986058e2c55a1cfc1a7fcd443ddea8b0d4f45797c783745036f859cfa526d8018f5ab39e56043774f2839ee739ae5b97624d250fcd5a4a52f6c609586dc0717a3e53fa6d7727f47e6939e9a988055b8dc8707876a185906087d0aedb7110f127407242b536e78242b4b2d6e11ded91329a6e62aad8c9a85cb0e14c523395d93566510f6bb6cb00fb55b61765632e4b4de5e4d461e00a562555b7c9ed1ad8e552bc850ef2ac995cd821f9431281d409ec96a587ad219b53330b14bb0dafd550b42178706ca7d8e29bb8b92d1bfa784d08394feb2a2848d03ce89dc4d5124f17bc3f927b19a6271c550dbc3bc07ec2119a51712bd39ba34c64a1d0c0f880a258498272c00b601a90f8d5828611e04e41e15660a1f45354fd0f64e8429459dab62b6d8629b18dac05f3427a49bc991151ed98fb426c9c694d726ea80d31692097654e6d40f198ebd2299895206b4977d47fb05bd2319ef821e07d34de92a6757ee03d38e5363199f2353846141b0f47ca302119a08110aa22d1c605444600813b9401b55e9361d3d485ce1eccdc80220f3419d2fa341108e04d9a97b7a92c83071f69087c4b09a392f4abf5202696db4cd36832049608225fea2b10c0247465f523864dbd65de87919b0c875b95f56212f3eceb9e1469071b297181e507230dae5626e473da32b4e8c6d7090d8fddd73779df045d00e69b0ab8070530c7b423c5587df1c447931fac1eb5dcccde9e059d27855615b7f74e671bb55de6de8e0cd0435fb81dfa1c7a95ea5e9b0969eec55ab782f9081df74449057425a9d9a6fd21fc33fe84af5dfe90dcc53d32c34a6429bd7c3925848bd58c5e8f9f80a36a06074cf800151304f7bc3fce03a3d554ebbac1f3388f47a62b2e716c341bb0b328c0acd486a52b4054378e745f1e22ee4ccaea5f2cfa8798df9d2de1eb4deea263aabbe9687b288807e437f233368e8e2caa6f784baef05e9e8bc866511407a5e0b7f3fbac4548a87f30b9f0eba21f5d52950ee6627d203aa24d954fa6a475ad95b3cb6625ceeab4100d3aedfb4a41e47f99cc61d3ca2cab2f3f7c4d052796dc60416b561e8f612d6fdd142d108f6d5c46b5bb426aaac28ab19002a62f000da96fff30220266d9e47afeca7615ef6a237e1ed3a3cad9211f99305950cf595d66be14bf4532c7f41e8e1eb9883b5e3292f48c7674dd365cf75c37a88dc998080a9b6917bff79dc77ddfb9cf56663da8775b263249ac5f53bf63a92d888033f3cb759bfb19651acb6f71ff9080f804b1bf245049993b11ee6c04634b5af4daa3d523f0f692a9139e7061e085c0758d0778c68e95a03eed919108f1c62f9ef7bc4b177faed6e20d422c74c3ba38eeaa01bfc27e9d17a39e9d91f61d73c3010e01dfa66b1caf2564b8368fcb629d16d8a0a80a6c408cb97a28525fc07b9f9b963792d21aef65aefeae13f791b68aa0e0a575d1243f6941b066dc2b27a955c408a921b5cb056eaa5b73007d7b274c4f56d3e5edeac7d954b8515bbb39b5dd2e0f34f382e88eaeef9553f0b67bf173735964a789a2c125edb8aee18e08fabc1cb28d538e73671b83533df3901345a1b04a7d5056ee7dd034323a3a78ebdf1de4794cd1ac836eb34244b10a5be70938e4001c492923dead9e9a8b903cd1a0f03f12ce4e6f82779850d977266f46cbc4e6162ee0662ea3bf5ffbd33cdac1f80c4c3274a9ec7b5702c3ea157c14ebbb2641d59055645a14e6a034c73d734b626f206023ad947d2e4f5aa5f290834adf2a233bab333c00f54c903fa44066b8f7ecc0025956cd3fc8d895af154073d408029fdb38613716893592daa7396cbfcb03e8a6331e3158e3ae5992dbdcf31be38ed14c05a5300f5e0be2c46fb81423912981382c8a814f78adce52f0315f5147e71abbd90753a28605f5fdce923ee5e76a9bdc3ddffa88d2f1b77f7848820568db38938f88b6f5561fd025174268e12babaef24843949b87303df5f7902fd14a31ba832f787b89046efb1e5fa57aa89337fdba25fd14df4bc8c06f41b3938b165beb5da7360efc2ae5cbd854490e29dcaf4a59b56085c1a04b44995a5d0581a82d564ff0a6fab178de63fa4ed346276166b28315f4404b5b13177c9d8707f2ab63cd3cbf57920a3a158f5062e0685eeefb1fff2b34774e8bb883ce572fc5bc167387c2e57584d8f495aa327092043bc86a185ee61b637ae8f5d246a04352fff3ea13c940c448e477a43c348400be94c9f8a37052766a201ccb7b56d0ac4d974b859e9370827b7723ee5bbddca3798272aea097088dd3c3811c9d33a268093f9b8ae837744a1ab2f49185fd404f876dfafdd5e8a3ee944e8d817f45e092c34f6b02016e72382c5a01c4cd55b0a4feb231008fbc052cd2aa815b5ae7bf0df65254b3b6f73ac50c1a04f5b39094f39f34e2100968fa706ea19ecca1cc1a3a6fe569ba026a1d4724cc80ba8090104bc56aced8e1aface8882dfd038a0f5564b5845bb5a59872958b4f99eb1d2cec99c14b131cfd52d6853081dff1a1de5544b7b109fcd6476fdce427b09cdcd5f94854674992975fe5eed9a578414a2ff266988b6a4a7dabb9fbedde40f0cbcf2fcfd38650982e5cfb7e12a668e92b14fbfa15bda22b16997052ebf45f875654543472b1415c2b51d916dbdb4378c8bf9d879cbbc39a486c22ffb9dd3395a9bea19fc274d889aa686bf59ac7d25f396fc243e93b58aa07ca192b997322308f74afc6d9b47b6b6bdf6374733aa56ad40446e1222b7eac2ed52275b95fe0cfce7f2857595d8ec0f74a06e100d124524565e8d33b678805eb29d07753fd0187d8d23b80adca7ce54e1b026636b409650097b1f0f8c21e94582804556acbad944383efefadece8505b8e0a916fb960e4159182f3fb0e07a0f8e4221e7db9e17e046181d7486ffc605b6c89fdd6c838d15f8a58c2f2c9de12b5c815454e13b2b44df76691dcc01a1b904b1e6853c6ac769843e431c32d208a5536f7c1e1008050411102be4bbffbe645c081ebe8c3fd30375185cfb63870e6a116c82380e88cad08e25c783653717ecbb3a44e7413eda4172d73515e78891dbfdc1e605b680bdc0cf24c606a978e114e3a031747e6b1f3e4e5b951c114e05a61601db04dd229ad5b9a9710ff6100b19274373d4a2b8e3583043d2c1915c58f7a7a1cf098102093cf2c5e0790951455f90ff5092308584f754a72e1de098eba83835f27f37f5175bba3f0a87c95195519193c3d28b0d7ea0658b001d7508caf06b835beb32ef61e487e18c5434c8774875a74b41fab04c40ee49366a48302f8005c475e6777f712987afc016c1ba5e0b8cde24acd2582ffc5e5ebaf42d81f8fb5688cf008450496cd04a88118007aeff5006e99c604a78cc6a9581389e0b1b462603c8684cca44988a04678bc947e03480b8fb1741e3503a75793256bc02e8a4741ca4757130f837da4adebd41dc6efd33057a830ccb8675afd529214939d4527bdda10f96ae731cfff79051bd94dccd170c0c024bd4572da8689db741342d1bea1f239f020052388efdcd8bffbd78b299325d522ba9c7836a3a5bbb1068fbe207653b28d9675d94c20966eafd47a133a6f9b02af5d6d69f891122ed2bd9ee764d6423900260da2fc77649733dc0f4405cb504511bd868e29a2bb1c1dfa652f31e05bf714fa063db4769ae428d8c5e10c51d18e209edf4e67c7252b3748f5bae0388886d7923f3c856bf560ed8d6c8409d07b958333787a3adabf8659321d67796c67bf80c86f5cd97f0c7c85e568b32260c31feff6148ec86ee57da30eb55ee2b460edf5ee560e92d292c036afa7c40e7f3ae0078f84c1ba45a0cd10f363fd4cd07dd33fb2229af42a7656f33ce40d4e3adac1d6b56348a7c40162f3d49f3cd1f8faca172ffa0f31654cfad1b46c00f11945b8e9a72b8654e642d64bd3838fa6fae68554e51688f637a6df00e663e64188f980a8ada922cd7387c3772e90ac5f4fefbaa4661616c4a0d24946d4271f07cc6c7a91be5800dc0081243c34691b30e995c9609b31836310f760222be07ac64f24de6a093c52f084644be853e8500d3cc1e658adc8ccd418925492fa0802b718af0b52f02cabb6ebc4bd0bb7c6245c9712a6095e02b8a48071502f7de22d0b44e2a467f387dfae7609d8f798017dee214444ab97cfe965a81b510a8158e0848677d91dfcb395aa358f02361676342176c6477e85a499c56fbaa69fa89c12991842093b6e78f8fb08b470df453da2850f596089f972480b8b6df1aa80c06a7f7841b5aa514c86be5fca292458dd701d31dd583901e47d2e222654c3b00e6c44774187966581201b7fd3985c4adf130eaedd1a327a915d1db73eb48505b2a8d80264709877050aa6251e92c56784d13d459ab5a15a87d5fd57f06e00a6be09c0a2208d123e484003d4fcceaa428ae9a54e7ca3edc32d61ed8417d1000c58e2ec0585d91b1716edca9408a48843bb8ddc371ea4051c8dccae0cf23b1fd89650e9e407f8c8192adc390b01625c0a85b133cb2d3b64b17d8def6808419f1e0cc54c22d153439a73fb96f1c6068a24bcb21a9a7c1776a19eb5ceed575eb74e5b0da61f45c22ef020948a285c8cac26d89f02a95e594b2106dc911576d19816ec2f87ce4113fc229adfa5155e5cdf55147e2082215d560ffd18e46f9cd4bfd80c2c58f867e1a58cf35a50fbe8695c473129029d79fb8e4ed0e6d079a9ca4eabe482122e7968790140f506cc672c22abbd28c0c9056834474ff109525facff911fc8c0f907daf62ded49c2c26e5dfe40601fd03d456b4f83895212e7aeb73b9539956e834feccd8f268f84933cdeddf778a94d2e4c92cfd2a68a7d1f0b0bed6e632cc7aad5e5b5003dc82b7fb4fb08b784aded5be39ac4312fcb1b408f81793964580ef363e02d071f0a1e14209edb16c318409bd46a7937b19c36041b890a661c3192107bc19456d2ab6127d04fb0c4df68fb3ce1d563605042fd887436983d2b5c9e9dbb5ed2a7850327fbaa93b3adc679a1a0fb562fb4346dcd67f727b3e2fd468a977fceb05c584cf415db8c675fac87da401267f55def86d25e7bbe1f1858759c9700914e9139069bbfad87d654924529c7c28912f0673d282689dc2d7e7de9dbe8ac7cefea3bd9387f9353a5c493aa3532de2c162ed35c6c6407167a758038e298a91f2980787599afc6b37664d1c14fa1c6d6a61cea642cb0df6e9264ffefc4626921414a899ee45c960fe1db61f07f0fb531d974947d4f7e34a997b3b7f007aa318b931b421ca5b085213a1dc040517eb1cdd6e90a8fa1eaa36b1c9b718b4c6c761022b826980e7ab75b68ea31fce096b72d926c3f0fa00d2833c4c67e6b8fbe88f885b0f8b106cbfc62a155229d4fb42a8e20155feee6d48819929482f62679e66a0640099d840da2c9c6e0357f8e5a2c0c87886cb0d841b93608850c39c9411c955a7cf4919a451350c1d93e2d3c188111920b6f01701d3ce44274b47cf5e7c6a1b08d5cbf44bd3c7cd325e8906b6c3b63885dc3e4714e206e26179de4837ffb6e7439bd4b8f51523cfac1571ae12d127306307085c36be450bc314e140590bfc4da29130c5af9869888147cf7154fba05b07d688d52e0eee8b385eab9cd00f783879b4cb17ae2355cce4f6b2bef2faa69830cb59e9ac23e51dd971bc3355bc7638a08ab4ef48a03977d0a31ff57a5f68c7aab7729d6cee453ef5b8eea31d2bf597e9d34b6e53d2f8058d8e6cc05dbcf4f8bacf72963a45c64f8076f616e38cc810dcec17a3145f864e23b99942e367346a6442b891e64e98496479686a3849f378226d9d5a09007cecbf9c7ffcb15d1daf4009f75f5ccac16901bdf1ccb2a84da41956f66559e1dc005a9b96e41593e1a13374e7b08c59791e32f2322ca75a81bed3f4a2fdf2298d85cc8e3e03c2c79e61bab4546769bcf46150e1a96c58eb0a4ba04db4fecd2ac8028da3f6353f7b354bb327524f159d2bea2c7524ad1e23f94c900575aad01f442fa0a658a345c433696a6f019c3faf17eded101b8ea3c5880c721a474e083e5460b34cd9365d30382c8328241ce3229b3f8aa85cb503073b1172636945c53b196a60a53243b839aa8a446568b72dd78f14dba44f477254e9b671da5a5c01bc77363b560177f205a0939c6ac47d7248e428b69c26c602b9983bd34f402352ede3a2d7c6dc1bf3e0d2a76a47e6391eea536b4d53a3dfe91f7b5156515662b14833a489306b52364bd7e02ed17039c80e0d597aebfd4ff19c1b3aa59bed836578199cc60333dc87aa653bad7a886d87d77f888ceefa8f171bc40223f3b59e90db2259a58cfee3d8cc6eb418a4a2003d5ca5f6ea81bd643d24d1d572c32f6e28e9c58b176e7f95e0b4bbf5a42c8f4f0ba585e115c1fa9a33605c1f4dbe3937073214a575b95d348ea2ce5902d49ca1a5f8107df8e553c90dabca8942eed02dcfabef6916d28474cb97d13d364290424503c86438c35d653db0338c34d91abc83412677f387c8794937407fd290e5ba4fa38568ccfcf1c4a481622647def4648f7bbe13a591760cefdb312f864d6ba97900e371ac336aa9d6c23b1728b31bd2e9caa0071e5fa84bf465fea818d8a21df8e636e453f6a738e83a6f612444e8e3f0988a27c5da7a2b4d6b968b3920f9681005e84f2c02574c779d9474dddddea3990e75422e365240e1665f95d94181a83944cf9ca544d7855b428191e295c8560dbdb066a0b33ae7b20f87965a9d330a88883388e505139f26127b01621562dd69827d52c0a1e34d148bf1effe44e73c02508cfcb84fee481dac937450ef33736405ebea7f581f259686853165de028adfe5d9f988b78bab2a4ab4cdc96709fd78f528d3e141adc44af3197da980f1bf58f6a1f9d4630b20328161d9d632cc6ec8c23dd9cfab54d9b1924ff68c2f02c6efecc86378f8102e97a2379c65c6faf5318a5a4d46f177f8346f535cc7a7c591a926020670a6cf890bad05bb601c573ad93b9701bce6e6fc7b52c37ef577ca519034f1509f9b57ca972927370279377878205f7303714278b056568a4413843bd2e4f5180d568d956b5d08f6988370b1367ce508232347cbeff12982ce0e679408986771180303fcc21aef8b3ebd64cf0be65d3a03d68f90fac4053b0bb792f6ad665c915732f0ce4d066d1fc864c89c293e0b4ae185d0a62e0ad87022cec794be21a8e085dc17f295308512c554df59cb2d7435b47d8fd236b3cf3c8f6e73642bbccf85f5ad61b569455672eda77722d56614db21f154fb1bdb106cc836d4b379c60e12d0215a908095d0aa0cdc0af4992e10f1141048a4c29ad869fb881f9d0f683f135b58a8d3bac7ed3295959f75d91c52ffb71f315b6d4929e4b4b258b0815f0db4d988eb93480e954a909c9e070da67b846e40d248174dae1eb4f2ad2fa990568840a4dd4534eb972522171bb82aed848be7d1bc20cfb8112888530b19984ef946522365eada163b7c7bea5ba81ea8ff2b55cbf5d96b7a42638f732da19c29af1e81f9850eb7f3d6c5c05bb3688cd9750e683996333822aa88c100837309653675f89ea82e9f7c7c360b43d3a7a7899c688c5b346094413af853509e219cdf19a2b74c77fd6aba8e353f06ca56e1314eafc9fa8898cdcf1197c3d216cac3e9119cfd16073f359e3f66392e7c1b8f6d683b72ff9c7848379721e7ae90c911f6e7dfdf4f13357cbcc25d6b835d470c14b70636d061e9674668d483c2ddd908178aa67a49c5f99edca0af19801f72bfd8a5c90ad32b9d05518ec9bd1526eba7d2cbbf10e237bd02c8fb5dc403dd0e0c31b938bf14344ef02fdc9888027d38186a5acec0a32e1753fe08b27432df229752bae45f09460f288758d51ef7aaeaccc989f77bca2bbd4a2ca3eaa9afda382e41395b1ff80b8baf9dd99d1e24ad058ca5d26ded8c8ed2b5c24bda07bfab6653abc9f002c4f501a588f9e102f404d3a18aed8c27799643ce0c098248a2a8000f8b51dc53930cd4d765ef70dd8ed91f442ec0a0a50484037cbb00d38d520c3de3e2d039d89dc03317ee883dabc5059874433c533723053380c8deac53d8c33a78b1cd16f3595e8c87074c7f3b36cdb8f860cebb9ec5a0853c2a6d565c48e86ea0e64246969325ff89c65f8ec11828a44b4058f30e7153aa7de26de066de932da7a7a824a3b19deb3ad9bcd8aba3bddf98559ad3f441f36c85b4076a999c51f2ba01b9d32ec1f562dc81d58c69fadc254769ba8874e5f643f36225224762976e7f8e342759feed5adcf9938f3ea4eec0cda91e4765a08d5c7ae17646d2b9f1c9ec5be6e34e7ec00595ca3f4177dcf835203671a361db9fea0b7812ddd9dca85cd3ccc2393813cc38d6b93c6f2c48ada8e3c731b1ea808d88f09edecac7e6e351bbf3fc4ff67e08956074b1b3f9a855bcf6d5570b91e91c870e20c64a8f052389140e39d376fa3160ea44a54087c4bc1929ef14fe6beefc98cdeca810a546d1c9b1aa5035fb2787ab6128fa3837a338192f7287282afe3ea8a6c5bdfc63ff646d8ac4749be4568888a27614a841fc825eecc5eed2521cf44e3a5a90201d132e3c6da88472c4afc053bd49b1adb5ae4ac765cca6443d751eab9593b42e7f2985d24009e2d1699ad6b61cb22e001b6d5ed836ec67bf1ca327e3587850ec6e6ff7e772dd77be18a0551a99c9c7c1d2ef8c6d820d2d41b7296270062404f36b80fcde4af7e5a252b8e3b017a4366605ab809dd7ef83fa7b2b2347c9553e39062698b10b259c11d8b2a6be1c41605cdb4d4a77633946b6d4afd11f1594b43baf378a610dbffe71a6a5fff10528964eb7f0c7762d8aeef60686bb4834664287e82adcd34c00c45ea150649a0e0a596ad24f08dee405b44646f98716203c94c3a9f29a4ac726e6b39c2efd7d9525afc006a59d8ee5335676c4d53dada48dadd263bf697515eb86b85dcc8f8330514b6498f8f37e006babe41e06bdc388c6dde8fb3f1f9148e11707a3facb812aa684fa2979ab255512569671591c66e2135cf108e7b232b6e01447799b6002d4092df41f169b8b36a7399f650aaa89129caab107490dd09910280cbf8a9bf8c016b74a63b0cb38a1d14f25a52c4b311fecd6444da3b5014a3826bf0f2ab47ec7bc0aa2152bcaa782c2a50ab4e766c762ca2b00ed0d6475dade5791bd92deac70b2384cfa24ed61800fbf8ac372b77661bc7c18e21f060388c1650454584cbb941c78c680908338565fcbb1b62dd9fedd41a60db6288b761d1f3cf3e4d3fe015f66ef5822900560b6c5e3471ee3f4380358f8b98017129befb15c869fe8873accf303f38e82e6337106be938ce61fc1f38087a59d8939d54a2600a1299b6b1ee3a83d0fac96f88277f913e93934672c8afeabadd505f457d9cebd3ee31ae072c92833d5357a30048991e9d95201194e8f4baefcef433d9632162190ad476885bc1bad72cff707547105a5832d6d284120b46e619845226e8d3bba6b3a137743fbeb48653157590b6bbe1627b6e8e8e2037f65ba9795a10c7b0f3a5b8e66c4db2275b8c556b76009a0d46709e0ba107f8b231b7659f083eab100dc5b510577c9854c3057d75407f510aee2a181d6caf0bf0d20ecbf80b06e5a437e79c7dbda02095befe0290fb9805a6856cc0b43f35c75f962b27aa2b047ba6dc6a14b58400520b733fe96cdf9206cd8a2a843af442a55e522428c1afd78be8455ac99a28067f73a9eb51b3f89b8e36742dde9f38591f457e8a96cfecf7f377fb1627966d8755a531d77ed254ab2897bc5940b8196699c756ada40381d40bd612e58e97990dc0fbc5a7c85bf9f83c378b3d4c6d9705bec1b29a0b668da53ab0614ee84cc4034000dfba9e42e0584bbb80afa28167cf4e217942600377e002d116a24fd66eb1f783c01a7e6caada11072c941f438111256b92f5cf194c4303502cfdadba7226206ab2c22a7640d9e4bc0540b58ae9f175a502c5e55af869a8bb41d39b8c8fa3a73634c4f2fba5db491a7d57083804d2f6b18ff5acc391674f3364b7853b30fb6ca13a188740fbaf5438d647786708e3cb2ba5d6050f35049d3bbfd6d988408686b059d651a950c687969ceb13c0857513d6a50514925c82c6ab5d296c77acdc8b829bd90b8f9ce74dd3652f4c91577b88cb14c94906df9c49d95e216b937ef20626702c5a397016445676ae701d8ad1997c006ed4c79e1b21ebb758bb16f02a37d838a3ca3acede555d0d32e1035859edf38d2aa4872d6634595de2ba4c38e30fcfbd9d518d9b76a670b8f1f3adb0ef577687e9f9d9e9eef9e0bbd9b9c1edb62d027c4de2d8f163160dc8320e5300b5d4bc293b43d6c67160e839a54c08a07f796fd025b63b96bf8e1cbf057c5c232f1e4059794c382b83436782d3a0ba00dc43cd8e639c2c41d0e40a66f434037f7552687d987f8374c9e61bbec8d7b487d6c498b1c2d66c052191fd6c7fa6b9700e714160cfa50e6d72039994cd08411a431cf15e420a5107ce23a2f32b79dde8f23b660e0c81f25db8957a0c6bfa72d5aec4d48ca4caecd896889a9adbe63a4a7bac2751c0c189ec1e70add7f59054e97be801bed8874be910a228313dc26d1ae3bb00f14834efd460515a100b5624300ed25dad5076fb8e87b6266ebd95da60807c32f6b42109470cc9a08cac39f59139fdcd726f2b417835c9dd22f63bf36b01cd924e832b403830a4000159ef3292090b4bc4b0b7d603e3182141c64036164cae06c1894e6ae75987ffc2ed4cce95f1a582631606960b62122d4f2f41844c4da3eeb746f81d00596b61f0c8163de4e8722f03ae8ce61ef3d0f02d09ea88199ccbcd8d3970acf2bc261656a8e9ebe5a1f70006b4d7fe2a522b828d6e90f6b2c188f0b64c2319abe1cf5d5f1106c10737e22404dc08c7a817c07ddf3e0e9ba6a60d04c0a8ad9a4eeb0cc670182a91d906b4ba711002aa288b37276b8bf0e61e1bbe2ac09e0d6615fa20541cf6cf33badbbe4617b56d0b4bb7520ee9ce3a90e113f1eb04c46df2109cdf96f126604528e47d18b445617a45733d7ad5c16937e7c22a9995ad9be3e9fd695fccc065754106d54b1a9f53610d6bc0c5b58e5ded1b6b2c16fbe723010b6f763c67e29c74b7dc195ab63c59fa72ae1f227927129df4b8b208e8a63badb69bf06079c6e9d106032cda4dfcf6ed725c52ad5744c469c5f1a782fb28ec0fdd0d299eba07ee6e2648a4d667c9a7528fa76ce2196955b780aab40eece227b12472de6344d9fc399b2de648c1c31d636446a79b42b61e76f33a7c014278d308532176135aa8763cb3179fe378492c66f09c4a0b5b5acacf0ecd1faa84a8768147f4056570c336a91881ba9521447f2f972a9adfeda40a55b055722454d2eef0718b6975d8dd88f4417e1abb897562e758648c25f832556188553181354006d3713dfdfa71b8e71f80a1589046a3e51c4e45f1a37e6041963dc4be8def493f1acf7054da4abbe1ddeea44fddf5866aa25d6c0338fc3ec48978bc826aed5a99dd9225692f26aa2b99cb50910641314a056a8564042c43a4def79c0729d99bde64128470668d5be101d6468589e6c2af9aa0d386598e40130a9133399460bfb94480dba437f7e312fd22b12f3b018186d30f3a8333184ad0cf24754b2a78d631e6a123bca01790754afae1fbc7ed273560b0ea9707f30d1f758015e5a4a8cae491bdb8e0c13a9a1a2cbbe04d5a36c587150df84310e1f25a6f9b67e259cc9290c79801e4368201c90572e0db7fb4a868cf2f7269b9e0dd32bb50306cb70679eaff174bc1c22385c04d04003a6e3073a24cb568e48ed7fb06d187656582b58866dabd8b4eb3ade61ba5d36ae1f4a8e612dda5a12537dd1b693b224f1e28b30cdcbc6b57511b62aa1aed88f412beb28ab76be95881025903bf57fdd5e8bbc121e0f105e288a10b7b0d9dbc5d481200b370f08e9cabb70876f1803dc7786b131d50fafeacc2d0b96d5efc03362b10002ca4b55d135262480b0c17bb0e05fc09a483be402f07822d9c265fb9f6f3e309e51de85b2523c39eaff9c390dc045000dcd807b821e68e939f4645e0bca6bd7b956c130d67133d975381aa09c10470ef32ae0e5083eeb65bb970c43d06b9f40c17596daea9ea970ef830bf9833bd28c46a6c48533314446681bb7f66894239ad1c6b1b6bdf4190e63e50c9965d301e7fad6a2c7d089157356dd31ca06194a52ff9238bbe59f3c12bf213ca67fa927ea79d6e8d3481086404517d8ca51dab90a273af07bdef2ea1a66d4070adbe743f7c7cdd578e6d1c3b2d4c1db647e6a5e75d08f0019ef4025c04ef993a8c2c4938c51261146bc9fb491f6324f451d10dcbb8b8483d13a143fd25b29822cbed5a44ca2cd6a04293162365d9933a5f5cc6ca64015e61413a5968ee0c46d8883f5b6135aa0c4189d9f69a6f647ffcbcefd8a73695c5a921dc1acf7117ce0183695a2ae1321994fcd8a05139000eaaa22fb82366c4098ed7e20f6bf80aa8bdaac0a7502d0348379f7a2b3c1e09577e780bb2e9fe55e1fd26f97eac3f209df3d5d24468dc5b1f838f1e867664dcae621068b3ce6348af1a4cac759ce290732c032c730cefbf8c9946d1c8c479b6b612e5cec82046024cd97779c31717a6e02644600efb5aa01fd2eec787018ef8ad3580403ad9e7312fcd7bf508f39bd8a38f83bd47c445fb49cd634de1cddc172f842d520e5690dc66925b5d02523d98a587d85337f8dd2abe5eea246d6a6b68c8a0ec5de7c5484bb20748368fdcc6edf3f244baf6e4ef6261dd72cae7319919caf14d633dccf3dc91a37784cf7c5ff6b67c8e2d871b3dba425f90729d637e9d62aad322ea9bd0801f4163d89bc2a90917f9fde690a1aa2a04b64f430a6cd74ce161675302ef2169ca1d8ec88a6d9f4934a46b707166f0daf135c94beb5cddf69dab4528cecd8b324b52a0bf455ea91ea27ee8ce8343f16ad6ad67e2e7c606ba919674cc0ab7b6b2b3e536d6ccfa1a3d0bad1f0b850b5ee59c4feae193566e3caaac3437743f97d0727cb09633ac489e013a2de5b2a370d1a6df08399e957e8f1f104b391ce89b9c017139cc1cd8984ef867fe4007ddb60135afbfdc4a759957b288182f37a32dba5d0cbd474559a7fb5191270e72991501fa30d3dd9c04d8eb64f84f61a6935ad9d37a7f98a78399bc68d7904e0c0744fc20b85fbce5d5f1dea4d403f47afb4fa76bfc2f91f75308f4d2da159155f1f29709b5c95bfbaddeefeb4fb6933b86b0d504efe7c6d713f0c60a3a3880560564adcfe5a04947db14400d1d105fcad33ecc14571e508cae7f7f50bf3ca804d350097bc912251cc07c8482440ffeb04aac9bc60fef03305a20cf3c1207f05f521013962033caf2e8c9be35d1e735f80a97a5213724a26ce002f8b7b06b5809cf0b8b8a6695fec2120eb504349791f46e2cc22c79b2d9585405c503298f05f2589fe43a17e4a094ed9831cd0416a8557935462ad488c0a900842c0a71e7b837fed05b4fae9f09fd1c3695f687fa137f6e1f16eca4f63d14913532b83181469dc1322c6470b9c425081fe078896ad1794c0c3568ac54ed016807f3bbd3c2894c5b4f882f72e3088c88bcdbffa3e3cfa17bb703b1f3ed08ca50623688f6656c13bde48d71d99acedb7080be29b85552668d67125c7bf62d681150b43cbdc208daf4501329605e105d8c99e42f8e57eab8c91f9062d5bb65611d54b2601347e3c1710a561e327b961cedee0d4872bf2d93af800d9c5bb5260ba4fcae233302b784386415ce10dba59125580a5fad5fef3916fe86fee89894b2a192cd737a6f07f957a51aae2f72ae74ffa41494977e87a0a6518f443e94ee4ac80ae4c87f0edb1fab8fe99986d22881260f705cf57df3a66d524a244bbed3b7102041cf8e38a92f4e310ac671a841bdbd4fa6fe606600f82389b9f38e082272c79bb77c39c2ad530caf94fc3d6277170faa311704a42c0f8675e4ced643b3aace3bf727ce93b252142b81dfd3f37f22a546190d95797db0096a309109a05bc33597407c8e5ef1673d02cb9ca6c5cd661a75916fdc70007ccff83f4c6827d8126d479ba221d11abc5f7358b8786b90f1fb24086b60690c830d9dfa698c5780f4ad263ea23e98d20c0cbee50321476f0fe5377c22b9f0f00f02c7f92d13fd664b7cf7c4f287945fe20c074f7b2ec83ad8f312b17e4cc85393fac7cfada812947f1ebb63d4457353a018f3d33e49e33523f80c482929df4eb9b27654c612130c221ff57447ffc3c9c363714db9830d7afcad1035f7b1f22941f14f7e7f7ac23e7f9353da5bbf2d001a4f6c3bcfe53d71238e2e16ae2ec1dae29dc71ef10790d7d6295b15ba5c36434e756b5e91dae4efd6846525cb3b9a9c433bd8cf0191fc7acb373ed1dccc704737b926162b5be35c52cfdedc3e34bf4abcf757f9f14234913ca6115d7f28c24944d3424b6d09328513148fc22335a2660afaa15ac65ec8daf35ca0c1c6a5d3a287d76a29d9ed22cf90a09b86f35a54be369b4acfea7c71c4034862278face8431d374c79ccaac0846d02d29f9f499dc06cfd92ed4674da5c02f751ee0b81698a8aaf5b91c0489b8399519b4096fe29ef776513a4c0c61c4a58982fcb347b810267761df0462909cb8946992e0f87a105b25c0ae92ac12bedd18fe110a841395a2a3003e67a62c45e22311acc6cbbd4036b1f49e9ffb6de79f9fdd891e05526fb02a698adc2e032310c5c727e19b199211fd6f805959faa2865cb956f17da84b93aa3597c86be39d5e7df47b0ba561ef2a9c4d4e842d62183d9af30c066599c1ce574e2d76eb14bd5456c425c7622d7ec948afc690288fdedaf13d4c2d05f439087e4f8a797520819b3f98bd4e58dfcd3d17b28b63481ce5c8ed37196453835c7b6c279e692b15a44beaa52c2036bcc29521c85c11a12c81710170c2dcc9d7c786fc0682212e6491aba60160b5626b9feca6c40b79a5715cd94d2f8429ee1a01c94640ed5661c611e30bcfc2697400c6f6f5a61c8df7cd53b8ce41f8ffbb165685dd600f43118dce72854289299a836f377f73d70a76a01f8b7bdeaff008dc2590b3dce396396551e940d73f1a2d979ba76275bccbc9e9b4ae0bca87e5e6a196c13f44e62bc1407a0872e978e0e13f4787a5b8398431d0981b245ac64f33e2b36bffa7cc6601a3ab081055809da2a1e0c30f41de16f2bd0688b6407bd6623077b6693484aa77ee96adec52c51dc6e4bde47b4d33bb5fb6c28a14d26c56935461c11c8e7cd537664c3f184cfc89a8157f90b3649d8625a3c32399e34fccbf6fae599621a9fa9b67a90d365ef0b6fd45d5a13a6f0aaaa47a08306a1b7e38a7c9762d3a2529b6e1a63301255858a5c36c6564b880c0afcb94ece73b93b793517702aa9250472dfe4f5930181db36532b80bccc3567a4f5b9a06dddd8475d8bd3df0e98b9412a3c0361127f77068ab6a7c4b875da8888f3dc9408db460549214b9b7118e9401c0edb677d292e602f2e625a0ee19865b71db56d5d7f6419d60ece0244ab88e9e32c8421b57e17cbac0f84888579fd85a940812a61085024fb3f096c6f400298cd6057359d47e28990723c0ae2f439bf2a2452da5f1702bf639f483169b85196406e447e9fd260a34610948c35c6e4d200fcdc9e998b36b6e106b5c15cb7c341b4e38bf772ce5652b15c44ea62b12657e9a2f4d0d27223049690a6063452c027e1a47a1c03dd2f7a7f0fc216089f8536a938cb79ed411a6c6cd2ef976c972959fe82cfce8b39aa40689545135147ead04435d1b915c2d18dbe2350cb6ad3ba33c5fe2d83a31d00011d50ea1875c034e6606f1854467597f901c0749b280d2c14d6264928b5133d6172e9f82d5a99998074e57177d74d3d0ea8190e67c626217c613d22fe4c657fe483094427657bb9ad7d0b2889d3c8a44001b0f3706f93521fc0b713e4726f134102504f099f533000cebe1ce8482204d4ca6035a53c3ab551040ec381decebc8915871f130cee2040457b8781b21a390908a0e8bd407d0f1d01264c000c241ff104ed7e96fd5f70ce1ba87f1b3c158d2a7829396703e8dfcc831fadbe88dd40e41754144765bdb7b4b99529201ab0a5a0aa20a4728bb749be977c2c042e6a3503b765cf992572b053007e1a1360b01691c45277170788000b946748ca965b45aaf214694ac9162b46e619092a4d293864999ad6159adabd57fabf57a5d19f36fb9cbb1d451a66901c78529039021b1e9d5a0eb3fba901807395924edf26724564991a1caa41c61fc71fb57d2a73fc642a47cf57b532eacb2e7a5830497dfdfb39ded57c3fe87ffd5b06690c6cd680caad7eb873687a8752f17bbb00430afa414a448303c2589690dcf788856c2cb880453b5a8a3047327207bfc3fa63aca2430a3042305151a26e7fb4f6069c810225d5763282df96ad8d7e9fd9c73a2e097fb1f15785056ca9687fa9f86a1c2f1c9e5bcf0d52d4fd22dffe9962369fa3ea59e8f83738d7c546a4701a42567f8b2a79fe78cfb79aedf8f45e9eceeeeeeeeeea693bb18b5faf2fbc7b2dbe60a279b6bbfed310e5e301193d209a4e5fdb8924dcbb2d57fb254bafabdd4ed1e97655784db5bb9d8326fba11235f5459a5c804072d8068638c3562d440267f254515ce94b1a161441633cc90c99752be27e54b12765cf9458c1501cc66cd4c98d3cccc1a62acecf851e68c0e694409c256832ac5e88aa42125c4e0a0bd2de8accc1a4a6670d8c26392d2dd2de718a3450fce5892a34b16576438a2882ae6c081e88aee0d8ec6544607a4324abcd1793f02b92e8f8c245161851662728d3c924ad28c7374c6388721312446d0d4f937d4c6d7e590e7a77baf1e4823e24c9a3b56fe6ae6f2f552565c3c70238c298cd2e8e0091d293ae87046064a789122e39f1e48a6825dc400c90c1152a68c21e36fb99823830e6e20c49834d6c02093685c91c586227ad0061318311da04069030621c8a041f6c2d2ef8eba23ceddc141f89de90ccdc958999189c2c71d3740b9bbef2880183130e24c1c60e090b10d6e1c9d210311574819c289cf93a3bbdbbbbbbb794c517fecee6eefee97dd27e40835770e9fec27ae84b3bb33d14b9d85afe1c1b7acb1c34ad6128c205963e8ababff98b8e09a8a0484d2ed977ce7490c19e44ef87ac882ece93f6151471673fb590c2775bfb7a45bfc4a6bc034a8c2e12bbda801468d326eea4a2f6a88b999c15121592cd18fc342f8f22f711147baf819a759a9c795543441bb53c711a5da955fba308345558d9fc72fbf9159d7f8c78bda1d3f60e69fde4b1ac65fba30e3f2e5ef40c318e9f2afd030e9a50cedb20dee08b2dffe13fcf6a786e926a3a95964a74aadb7bf5e9e6ef1778b71bac54afc92dfa3484c15ba1377b2a28c7fc7a550a02864e0facdf3e6770f76cb3df4cab8b3cfa74c260cbe7e06d230faaba5aa94448a49dcd5bf3a7add5e314f55657d49f1054ab13a675d68218b3afb651229915eafd78bcaba5afd92197d01cfc013e5bad979a0aafba5a7ea16b77854155c4d9e4dd6426671e5983077944db75fb7b140430b29a0ac310796236467cc31668e199ad28c918d12e9033338624a0d6cc481c60cb2512eb1200a2eacc0c18926bce8221b25131a346edff6a29fc81ab77f49c3a417346fdc7e8f67516aeb4a2f686a8046cb8df372e371c11b29bebc492508205855ab57ac13ea414d0d8adb992ade088301512031c41b55a0b8624d126a8d0e6cb078c55e3f2f17c166e2d6b8c1b11520d8e2515570f5fa890d39f115456a700319305b6ca8f283900f6da071e28849cad211b2b1852243cd104c58cc01851c4b4c1c5be18650126da47901531858c21803aac01f577a59fa62690b30cdec2697823fbc1f99fd39c4e9563f93d611a34e90d6d979b35b607be1697ec7cd707cdd34759cdd37d8b0fe5073ce70ec965f387ad23b85402e4f0f4422e4df447569e85db7ac2373f26c76e7cfd05be26b666766549fdc73f9737e37c7d16e7a7e6a1483f33f97dced11d1456e78992e7a86a31cc801c265af3c28d74dd6e5df81451d12fec4d2a87ea597252dee286ffc4d43ed2bbd2c85b963ad40dac5a9aac4a99cc5d8bafd1a63098bba8aa14e71c7d664830479c5e597fc1eff8a0a494615f2e88eadcb3d4c01c344e54c125d64e35faffc92dfe35fb92874030d46a421058a97a21d64fce2d7b5a18a981e6850304da9020062664062892ea0f0a20c9974e5db600938d2e022892b3cc8c67aa9b8f293c80a70a586284c692481430d32f912043284cb492b961489b8e8b98b2577dbb9fc1ca6ae709ea761636c15bbdf2dfe1f326a00a207723401c60c9d39685813c618668eb42882b3713cc50e37338066ba265033806656bfc221e29d1c49705c382ffd448c7409abaefbb666cdedeff64d8e196e77f7bf563154697f38fb7a9c15efc8a21229a1617df98d20691857323fdc7e12aef442a676fbbddb5dfdb8625de965698ecb5de96589e98e2b2454141f45aaf26577bbfe5f2745cbe49e5345daa85d4eb9cc54116ad42de78ad008e913dd72caa55b383bd2d4f1b95c9cc69141a922b39b23e3c9ffacd4966a4bb69cd5c7dedff3f3bae5425170b9c1e8c808232acc90f9c75c2c81ca0c9ab8210b520c6e90f9bf7fcb5f070ceaf8d7dfd2a754ec19907e1a2661f4fa23c9729dcb750772ddcb175cee28c15c07c01de5d1759974fd29532e0d1b71a851c3180c5755b5daaa3bf8fbf476da81267d3ee53a29a5678fa8f2393c816c51b4e8d2cbe107b2ad20c8d6bb5f8a296dfed83ffa694edb7d9a6dbb524a297d1e3616a4a1fc2eebc8c8f73452b05bb275e7a5d71e514d683999b75b94b3e1b04f42f7af0c397c3475fc2b2d1255fe2755aaa9d2711b75c118f87e379fe4fea025ad47ab9cc72caafd0e7a437425d1d5c15529a5949f0fdd9bcf4ce5f73a5a7317910d1dea96fc144a7e966ec9e9b66e81ee524a29e58e35957f4717952fd3e6ca9bd369d195cf85e3ea5222e992b0f94954eaf43151d9f33a4abbd2bbf164573dc9ad3c578b9e64cf7bde5465e1eeee27fbee722999c8d0eb160ff56ae579cfe1e87ffd9949180f657425aa0865a3b62bdf93c3f207e0a7c6fda0878ac70e1df5c626057e208070755c0f470e5c9b23d923df87cb37f21dfb1d45fd3bc9ca5dd3ddfd85aefbe7ce922f74a57d3455fe8ba9f2275f7ae995e1a3a9deed76422f1314f8bda282f9a72b534ae66ca6846733d97c57226fb21936614df9fc1cd6a24b8b2e87ac23fcfd1d3eab5fe876287485aed0fdda3e9ada2fa6f6b77733f2651d09477ac7262cd92d197a45177563f10b5d0e4766fb682aff8ba9fc0c127d32483ecb1ef9283ea972307f7477f7e9f9ece49c92c714a3bbbb4f96dcf74495979bfda09aa9d2c255c0794b1cf774cf6b98ff4c82e7b702da854a7747ba73871295dfc17777779f61a53ea7cf39e7f439e70c418fddbf13dcaeabc2a05cca0f0465cac3510548d7d3a8fcb2095774fdc1342da59432f4e4a03ca6a8fc93be37933df3d973f6f7507e36a3d06d11cedca61ae7b828383a5466d2b0861eff0e374e279dfe06e775ec338a8e6bd96ef47f3de79c5f4feee6a6076f61f96085f03c0298407aba6e27e40982426253468e6eff8790a383d37a99112346490a432c2c2931f1100b38a82574ab1f2745c40595fb593f563e5e238c300b30aba813840280dc653ba45b3dc35851e5ff7cde2910a716e0cf3d2b85020b2e7d8e09955254fea1524a4a817ec5545f2da6ca3fb66eff2a45ada8730498ab2a081fa46815aa5411da2345ab707717c159a90b78a48a78f879a9fc3b52b48aaa638a73ced83caad42655845651e773cc26c5b5550f94295bc18c851a13cae7ee923e53d904955da831a75bbecc687c524a29a594524ae933fad2e984839bf48b4b292913a594524a299d73ce49299d73ce19699a387dd9d922cd19a72cb7bbebbe0187ee9e673ee08248094690740718729b24929a363e353d7023063770b8b9d28b9a31d7bbd28b1a3192e89b699feb778fbe7347e83b0be614a2cc5d7c9267a4b52bb5fbcff342a7e9c075006fc73716d285acc441e6cf672f32c843d681ec99e08e190af5943b85ed85e3caeba7ee4ee8b7d09241dd813a6bd4d169de45c2e8900db2357ff4271a66a561a79fefb686656918eae77b9173712319e4fd7ca751a7f1928b42b2f9cce4dcb4a661e04c4ac3523fbf876410dff95fcaf2b5b1728c0cfcd9624d06fae01171a71fe154a46b3e2d023a4df6cc471551e7bb74e729c7cc4badbc3656ca96c89ec997b3cec5baedb38eb29ec5ad74abd6ade93477d9f0c41d6a987791adf9d384be5ee846b267be8e240ed42146f59f2f77cd47923df389f4898dda857c7bb968f3956f2eb292bbe6cfaab49a3661cfdc35df2d7744eda7557177efb8d069dd9a4ed42d35d59dd6e264a586b13cd06977bed7e6bb6dbed3e63b11ad01f179a09494524aa994744a3bbd070cb5634443428a832a7ffcb95e873ca254f94278218757da9bf54ca95f434bdcd53fe42233b18bdff36a65d7d0e5f0d6d95ee2524a1bd4919992682216e24b1ca4bf4b43f6f48fa8eb6580b8fdbec442a8117b1a328836d19fc51dbb5a19ae56435d1b07193b28ba5a5773aeabdda6b76e8aa33b724946dcbe52a9110be1bc904dc8200e0c31b2a79f48eb00a38e5c4dccede76a35af79cd9fc3daed179b4817b3100dc820fc6f48d87c382e33c93497996e4b33d8b852f9df4597f1953fa5973bb2942496c81e7e6a3bc0dfee319d72f0c551e5735a98a50d90b4b481050719ae8041288b145c7439828b2992ba90f1d7150fea4b059fe401afa8f23f1d46d49b0ceacb7df7e36429e13c777167594aba27d55d2c533a64b73a649920a7a8610c4b029e8c2501d49ffe14b6807bd44b59a7ba2d130f594778dc7e1eb7bf99f414358cb93cae5b39450d44b72d0b3c5812005b807af0a5ccb32c0970df7d17b6a07beea54ca652f8be0b594abad3775c6894020af55cc852c2bdf75ef8c47b0e0cbbc85d4a95b3efa89b747ed98913a2fe1d5b7ed16106548421e38b2fb8c8f83bc94521176851069533389cf9a149c6dfb73eea4e88f684e3933ce3f7b1903ae36870fbc4d97a48f674d3205dfd4d83a672fb9997dcd536f783a38e9ccde31049698999188d14427d90419a12b521450a8474f5bf5e0420c0ce0e8b7579dc9197e41775a4479cad8f4890ee1ae9edf6a368de910cb2b9fd9ccd45cad956dfd1e94c1d1d8c1fd3368b5c4c7d7b1cd29b64101c5248921429cdc150c39b1e88db3ba0c2b1da703b9c51ba705c3171e15897a4173a8a883a769a134eb7995af67160fb4b7ac4423cec1ad32b6410875d84ec69909f39d41146ca724adcd2edc96191aefe55a5c9c073a27eb9fd1c169c4d8ddbef2907b4ec0bb92477f5b3e56c9c0e2faaffc848f3a674a7d2adbfd5fa57527a258f9b373a6f7d2bbae39fd8a8a344eae7b250a95c51c8d9baa532a3b29ad66abd120c0d8cde457ae4ae16bfef55b75a77fcdb5d7357bf47c3d1ab331c2b3d72d917f6cd5dbda58e9c8d9b6c384754fe51753fa653d72e3e095451cf977f549f9c73cee9631315116f1abebac531d771848c99ff4bd825d2495cfc808ba42e62d8420d2c73fc9001133f3811440d4eeca0c3883ab6993623835a6429f91e6429016d6e5e0889a5e4fbd4a7c227292119ff8ded2377f19f94aa8d95eec2a2f27f6a2a10cb02c327a9b0be90ecb32c25a927a970f542b24f8b3ad6967d77f18356d4f12ffb904be9560e7ce6b316a5155fc846ef8e3ebb7c479f7259f6f57fb3ed09f2ee54a93797e5ff0549cd95a9136e6eafe9165bf1c56da634ddd466b829f593b828a444165b6c31a58a2b3ec021e34fc145177af061073fe480a54b4dc6443ce4c00a9a33c4c440c66fc4c514a0e1021d9076d085b646c6ffbd515f2e1269f2193132f66dbf7dc1ca32c87b95ce14a1916ef10e95ee4f2111baa89e96b28753b538654e3badf9248f077af5c9a9eb3ccff33cafdbeb3a54e842b798676dd8da60838d1a8fb2a9fbfeba56b2b9f2a88da4db85e3abbd3696eee8446d28b9951e47557a49c3e58e4e246f9a2c35b7d2a29485b94e1baad1bc4ac39806602ebf07e1562ebf0fb5285d478deaa4857afb0d3532083f97cb3335593e4ac18e534538aeeb3a2fb553a59e5e76cbf35227b4463efd37fd84934e0eaa178e2e748bbf5327f4a3bed334ac439e758b9dd6305458e3e0b454f03f1e54d781a576f708b8e932e9c2f18521136e6ea7913dfc5c96cadf371753cf4849b7ff5bbafd2866fad1e40097a5423ef2cf8edef5bc70eca3cbdf597fd0fed816ba2599d4ccae13f1ac610fba90a6e9f23f71228f9bac1313f03d854e506f02ea7e6f02dfd33d51a1db96864d57be872c744b8ee0951e848b2a902e7e289586cb4ce5f24b6717b828d56b4ed474f9553ba8a3135d20dd92cf61a9d28bc0ae5c303775edafddea9518d557ddea06d3549c667e66be60c3383c6551758c51fbe7f7f8a2363f8f276a3f4bb9eeb54b77cd70e4a3cbfe4dde74db6fc0df9d9a9c7b5c8a32995d8745cada9c501fd8b5cd959b1b1bf0439d38cfbb203aff948752f67064beeed27c92679cb7dbff9d7e3aa06536ff71f44a5d2283e8f37760059be750d6a42b5b2eb519c6c18c2b5f0352084fe120fd2c1426931a32b944ba8f6490f7fd3f9c70e8362ad8f36af5ae37858574953bf214dba357c7d5f877645a1fddeeef2a2ca4c17010efabb0d73657eacb94045856c3272fc86ec2497317918b93c85dfd46f78b6e3f188e2bdbedff7ad66ebf7339f2a2f62c6e03c342fc0819a4bfb1c89ebe6383b9fd3d84a8fca3db403e72d1652758dd165657560239c7a561e765eabc81edc5a0e366cfc993bbbb7b227174069e57eb7fabf57ac5623db8481ae50ce54e3abc295b92bdd59ce2743a79d53f06d2eaeeeeb62c5b94e5741b6628b7d84d11758c5dcf81883aca2325e34be62083ac1c238a74817c2531e2ae6e68ccc4c1e1e1010264a6a298f38c5ae5913c8add24de8546dcb5030f7080548303a4716d0c3993ea94636a65a4d1d2d5224ad5e30b97fb727711963d921d0d66660e9bc390228a722b1cd4e93467b37b0a67b7aaaac96d90bd16c08942491e741fb5dcfd7c728f8237bb5c38a99c6dc3852c7b7ea8f5db5996aed3e523a70ea44c5347e8edff4e5ed799e9d93039248684ca397b82b41a4c4ae79c73b628a58b9be7cc976aafef68364433d2b0719564082447f51a49812615494155e58dc84f09ffafc7a999292222c32cadc0c293860d5549e2209678c65398c6445c838dbc25a9f36cf5dce5df3978a68e122949094ac4d7ab05a428cbbc8282b421ba6d7390f932758465379deec6a474567f8fdd56d23070e5e2b75c7c49571391ae368224c994230b97ef9cb31d707054e06d9efe39ce392be2bd1800a48bdfebb93a783a2947156e8fecc69cdc9c93e3388ea39c5f24edb2db86650f77df9f86cd66e9d38627a5c9563fb9eccd99b321bdd59ce110ebbaae8b0d69f17bd4cb1f6bd7ba52c988bbec9076c57430e2a391dbef5e7884b29e74fdac30ab0b1e9df3748a354c72cd712183082a4512319b94ce39e7942e7e5902176edf123cb9dd6b3efaf33673036975777fcd96656b3ea7022c25a8f7478554c9f31b27933c5ec88432713b7c92875ea91d58a15bbc44f630fd07b48c8fbc24eef2f7fe49d2f5cfb39c65f59f5e48f684d521cb01dc7bdfef854fb474a8c4fb53f8c4df0b9f7c0c7249569c1975863a6452d6859ebbdef3a67dc0898dca920a75bbd18a35a92739ffeeb8f2e173f20317635481811a4b6c21c50c71458d9a1a325684b962855e3922952445194fdc80c5eb71561e4fcb1b37c65e07b8fdff068f315e0d697545061e6f743df04a206204c9ea57e0955fa024dd7185d489e1dd015e057883892b9810a2890c3551e8e0850d65683920f3c415292f310023078c03dc71d583ce5ef9050a0d2eeaca2f50b46cf1bc4e3ae7a7f6ba3da57abaf20b142b7c83fa5df9058a0f506cc0c1d3a18863c3872e897219f50331fc4add7185cba087eea689aff6ace4e0afd8eb2726cba1e62e89a682577e99119d51bd2bbfcc685f66516e98a152217297f4aef4ba0ec5adfa63820778d389538aac6b508553660dc7a2bbbb5127af939213ddf33ab79ebbe87429bbbbbbbb7b7edc1e176f3673400733daf8e18d1e50510389460d381c79d9d2850b3332af5fa47133c1e981adcbdfada39f830c9ef96a398a2ebd8222d2276f8e038bec20a37238cedb04f0fea320ca525abb28a5758b2a7955ba45e9946e511b7634d59112dd29361baca0de0ba2494011d5a80dedeaffe833c769413d8e5baadc83692aa54fa7d029947627cf0b9bb0bae6425ac471d148fc2ca59452324bff98991964a105179e346cd6e2c9e91c73b23ca65d6c833ac1321d2bb151cb8cb9239b19c34bdd6aa66454fe91951a6986f9a484c966299b8a77d79ddb74e8675a77ca9f6335b3c5184d6cf1060de428433656a12a6ec8b14506331db0b124ebf6e2b61531b7bf04234894a4d0bfa4bb7b7200eea8ba0ebbee5fbbcc1165755534384344430e8cb0e2c60f32cfc5140c7800650735bc184309999286b52891fc9718b92ce63a15459071fd4b68d8773d1c9bc8a556b74555f1b4b0d49187a74596f10301c1b823ce973bf2ac59ba00b8fd5e7fbde17a91834c0f6eb77589343de3e3977fa57b2865fba98872b9352c0c4d1273fb653bd21a19da435a03838ec34cff682a061d73dbe55cd1da4492413dbab8fd7204716e532b3e55c3540da3a00a6432bf9e280da38ee03d819be1e3709ee7795ec755afa3a06a9e2e0d5947c679297869b86a02f2dc8f3b75a4dd2f7bd8923dfcdf39f1790d93f2b9efb8e7595d6c6f521a7a3e5fe86e17d430ea38af983a4e663ec1c6849b3b9fcefb71ea487f0d72ca84ce59f6f0971c8c6e0b7da7137ea7f94b29d2e7b03df79fd4b2f77cd9c3dc3f7ab8e5b1c3a9784fbb99d050f56aa28e20ad81033f1aaa1ef563f76077dd9d2c1d792e772c9e3bd20b8475847ef76113f04e0fa378cfa33f56af5b070b5fa2569e9348f334122f0c5dee9957df3fbb05f68f3364d2efa98e68304dada193799b70d3ed66822f37b9e9819f2a0b2925cb1ef9535a504271461d273308ce3975588ee95d793f0ef4c87412cf5dd5f3bc2f7ca5d931d8dc14de7bb42b83dcf31ef59f8742d9a48aa0b8540a89d09d2cbe7eb9907544e80a79de0b5d2f1cf93e9adabd98dafdc72edb66e4c03d857c39ee852e17a2a9f35f4c9da71ba5354bbfe981eb568591de5e1a7504572bd5642e74422ffd26ace682fe944bfe398efea4b4057a27d82d1beb9694b2f32cf8213c91aedf9fde93226a75a58ae3be0beb87b25ce87704ebbcdc754a43d61127f3d271c8a5610bf4468d601f5754d8f89416aec25a553ca6709ea02747d76eada66ad5f4b9baa22f74e70ca70ed3a7735f970a366c3ec7b9bb0439ca4daeb5a84dd4715efa9f5396f5833ea927725ec7c11abce3f4de03db93ef96724a0142d7bfb9be3235bb75ba9fb7773633ac530877e9524a3aab94967129e51c65d4f8a6bb9f51ddc970ee3ecd90a122d6aeb7d5f1e7026931d6aefe9f38ea7cf99c42417567c8a95a1f678a3afe481148bbfa5b14860ab6bc9b145b3ac9492abbe3a86df79f9ee59312d6edddfd0dc6279f4af9fe9c5b1976d82d3ee35bc9a05ec9a0e63ab0aa563228f5a3755d39c295ef438a12fc0641f047039c70fd6d2a5c8d3e406055b2b55ae1faab9a9c2ce81ee82f294ff7d0996e689eeb5c39d4307e2b65cb876490910cf26faae44e83847543dd12a3c56ea8933a1ba65ca35bb4c696a63ba231ddedb61454524454294503956c90a92a77a861292ad2688d8dc8e6c69c733b9a8be018d04c4704a6e96ae09ace9692d215a5a67446285a779b21a8c43fa268b79f32dfd06cf0790da3ff4d2969db194a29651614acb4935cdb7458fb0a71cc3b98030e2afa0575c7955ee0e0d25ce0b842c6ca8d88ef53a3ddc3d1dddd5bdedcdddd9275a46f7fdf0ec708dc69348506ae0bbbd29d65ea486d2099992567c3f7044eb8900ec91eff9e46b2c743277c47afe675b55a8b3e66362eb730369a989a119823a4245ac3468fa861635785d6257d9267a453ae0c474a85862b5f8aebd3c87665874ed89341dc098dbc3c87ec99962da5c99e1b9a85666991078d72a1371a8626f1400c1a0455a25928188a44c55031e8181a44c3c64aadd01a0d8269dae0933ce3ceecfa7fec2295c91bdbbcb1b50832dd14dd3c71737423e68d35aba61b31e8ac69881bdbada98a3bdedc9aa6dcf1260c8f3bde20dd285dffc9bd6a6ad878b35af3801c26a6a69a5f54ad4ba5443736da1d931b47d2a8f68f351c6f8a1e80a6facb3bded838640a6b395b3eb8c19126674bce9622260750d98dcd5dfea732d53f07c9c55593bbfc57ab5a7390ae0ff150ba7e53744322cab8feccaba6b0267b564d2ee6144997bfd1ec36743d8796b345f644a963ce16abaa42f6ac9a285d35b5486b3e66537c10f9b012074d7594652ab9b1c66dba7e2a7aa3ca1d7dd0dc48baa38f203eb8a38fdaf51f7dd87c145d7f3a5975d4b03187a98a300de31a70a13afad03facc9a00faeabaa9041fdfe37326867a623884ff28c3d4a773e1929b922343ab05b5f27bdfb71a0537a620ec789baf2a50caa2fff93428aaa216f91a93bb41d2517a5e8f81d3f7f67a945d45a9241e0cf6f31b5d234cc4909788e6bf32d78ada69e2119a4736f7ed449ba53678b3b75acb82d332d1f2e99bb43a58c3bbf5a1f470cb9e8030976cd9f3e5443ec4085a38a4835e4c3468d2a6ab6238584ddcc766e3208bc89b203e6ce1aeefc314473e7874c32e8fb9b1bdc64504ab5a6c78cb357863c190f8ebba1f84f4f9f518c62a65e07f6e8a29ec699e2617d6469d7f461eb56111f59bad5753e6cdd5235ed784307a961a3aa49274cc34e609a041e379d2355d3747b336b98cad63751e64d0d3737b8f33fd0eea8b0ec80d99142e7a673d3b9c99e9c1ba4e67b4e92ec99ff6d54d0da9bec9921136a66534461b8f351b3d94da2238cc273c8743c91864176b1c59de3bc53d5d48595b2cef6b83aac9475b4eb68d7e9dc7c14a54e688e528e727fa21445298a7296a64ed0390a7d14756bee1cddb9e33b7b4587eaafeca05c77e2b8532885769074acb8f3399d23d933bf0b3b55a8d3f178be5778844f5e90ed78b65778fc298daa53e4a28e9faf63e4228f9fb34b8e920cea7e3e674f77f461bbf379584a7317bf0f9b8b3b7ebe8fa2282fcc643a26f7a3aae9ce1da1277b8ce890bb4e97bb5cee514af58a884e29e5ff023cdb02bd72dad8bb7beddedf9322f71ece9f9c9d73ce59bb5dcd140e87283e1248b8e30a5481a72bbdb8f1039693b7b35ae13c0f112325744932030d1ebc8029834c1156f460849721a8247143b77f74d96ccce78bcfad61fdaa1f453cbea96148b2a75321cf4c00b356916bc8459d9055abbb86dc664b1d779446afd61d2538aaf7630f950f12856279d826978d42b9a36b871d7b4cb9fd3aea4dcaf2fdec95d5bbbdc2ea31b47a4ed9be223c21c24d84a26e89c0a55bfea99fa1b4f356e57511c0a4ac084fc8973e483e480d73310dbb496a988d0e47c150f013ec0437c15dd88869c04cf00c980bcb8097e0224e82b330126ce318b0152e826bfc020e827f6022760157611d98c638f014ae8187580696c230f0ec85272b7001052d386121841298e0042950010b5a20c450380ac7c033300d6c03dfc0393015de8179e01ed807068285e021980886011bc157f808c6f2fdb1241759cbf7c7945ce42ddf1f5b729195f8fe1853ac4946c433bb27dabd793e3b4aff7dee4e9d3653493b9b28ec085e47044d988c215801041ff040079e656039f0bc84ddc0b31236e7b9c86ae0798bb5cf49d825cf5a6cf89cc566e0198bdd7946c262e0f908cbf36cb31778be6201f01c03abc2b3113600cf56ac059e616005f05c84adc03311b6f55cb314781ec2ba9e5f60537816c2b29e83b0137806c20ee0f9072b81671f2c019e896c049e7bb0409e5d60953cf3607b9eab58083cef604578d6c13ee0998a0df24cb30e78cec1be9e71b0499e6fb0233c4fb10d78b6c116e0b906cb80671aaccff3905dc0f30cf6e759068be439060bf42cc5a2f01cc5c29e61b00a788662c5e7993df24236f62f5823df026b807f624f7816d8a05f8135e1556085bc0bb6c8a7c00e7914d812fe04f600df824dc09bc092f04eacec4b6011f02cd8fb215822eff6e6a62c01dc450b5d43dd72d9380a4b826728ec089e9fb0227876c236796ec23279ee62c767231b82671ad8159e99b020789e81fdc03317eb816719d80e3c8ecd795ec272e059096b9f8bec069eb7d8f03909ab81672d76e7398b5df28cc5f23c236133f07c8405c0b3cd62e0f98a0dc0730cec059e8db00278b662557886816d3d17612df04c84753dd76c059e87b0ace717580a3c0b6107f01c844de119084b80e71fec049e7db0409e89ac049e7bb03dcf2eb01178e6c18af05cc52a79dec10679d6c142e0998a7d3dd3ec039e73b0233ce3601df07c832dc0f3149be4d906ebf35c836dc0330df6e779c832e079060bf42c835dc0730c16f62cc522798e62c567182c0acf506cec796615f042d600ff823df22db041ffc41a79165821bf027bc2abc00e7917ac099f027b8047812df227b0247c0bb684378145c03bb109f8125822cf82957d08f67ecabaee946eb58bd6adfe54e81adab9ddfe4aa68e3e48a36be80621ea20b36ef5dfd820526c109f5bff8ed2f7efdc5c0ce1fb778e5cd4f9fe9da486f9eddf417211e7479fdbed1da51ba4f6ad51c71f56c620b34b821fc18be09b7cbf0f938b4cbedfa7c9c5f1fb7f662e86e0fb7f865c5ce1fb7f682e82e0fb7f885cfcc0f7ffd45cf4c0f7ffd85cecc0f7ff14b9c881efff31727103dfff73735103dfff73e4e292efff41723103dfff93e42206beff47c9c50b7cffcf928b2a7cff0f938b16f8fe9f26172bf0fd40331729f0fd40432ea6f0fd40341727f0fd40442e4ae0fb816a2e46e0fb816c2e2af97ea0221721f0fd40462e3ee0fb816e2e3ae0fb818e5c4cf2fd40482e36e0fb81925c64c0f70329b9b880ef075a7211c9f70331b988c2f70335b9a880ef87cd5c3cf2fdb021178d7c3f8ce6e209df0f2372d184ef87d55c2cf2fd309b8b257c3facc8c5047c3fccc845d9f7c36e2edeef871db948e4fb61482e22e0fb61492e92f0fd3025170ff0fdb02517877c3f8cc94521df0f6b7231e8fbc5998b06f87e71c8c5d8f78b3417c5ef17895c847dbf587311e8fb459b8b3fdf2f16b9e8f3fda2918b05f87ef1e6e208df2f1eb9f8fa7e11c9c520df2f26b928c2f78b4a2ef67cbfb8e42290ef17995c24c0f78b4d2e0ec0455628250acf21d3927a193cd97f7f6cc845d7f7c7682eb6be3f46e4a200be3f56733100df1fb3b90880ef8f15b9c8f3fd31231777be3f767331fcfed8918bf6fb63483facfcb07921bcebbcbb17f1d4092058963feb85641fb5a20484d44b12581f249f241f259f251f269fa69fd9cfd00fed87e8a7f663fb29fa31fab9fd1cfd20fd24fd28fd2cfd30fd3401cd8086806840444035201b50119011d00de80808092809480968098809a80936830dc1683022580d668315c18c6037d8110c09960453822dc198604de24c1c1269229158136d62916824dec42311494c1295c42591496c8a0dc56831a2582d668b15c58c62b7d8512c65afb0feed90276385b1fb354802fba36804f6879108ec8f5b13fbe38889fd8134da1f4921b03f9456b03f9640607f307dc0fe68f28065cd3a6059431cb02cda062c8b480396555b6259b60c585611062ccbe802967553c1b28e2c60594815b0ac240a5896520a96b53401cb629280653545c0e2cc94589c2108581cda032c0e91032c4e2d89c5b135c0e21431c0e2182dc0e2dc90589c23142c0e92022c4ed2118ba364c4e22c9d6071984cb0384d456cceac049b3394009b4393d91ca26b736a446c8e0d0136a788049b6374009b731b62738e84d81ca4209b9364009ba314b339a2cd81d91c20abf363757cac4e01acce0856e7657582589d2277f58b60758cdcd5df637580581d02589d01581d97d569591d2677f50bc0ea3405c08600001b028f0d61c78610da106aeeeab736841c2b85f5515e98c972fead142932bc4c4a9fef6578c9a41c017c9d322450a7421d25d9d33e48302439420e0c4906a5be3f36934139b7ff71504797cd0709884df6744f92ece9c7b13f42b03f74ec8f21fb83a85bedb2dd1e75d0b8fd9f1d757670fb514166b7ffe483145b331a60e8b6171f82d46e7f973241e7fab06da9a308454d2214b9e82346c3e6af4428f21163f441aa7054bfa308205829e3140816041b040c2f33f7ba53833a53593fde30dd30a196583696e42ed452ebe4e0b050472eeae4a08e705047ac233555823a3938dd63a85b9fce8f9eb3747270587c7b486952ade956dba42ae0e34108594a4078d6b3c22720bc90ecab6a54ff91de7e14ddd651fa328a6249dd8a81a00425fbf1326582ce8dcd648f4d125585f3a3c7faa61f57fd2b1773421fa476f5e3781e2b6c10563e6664d01b55ded1a74e966ee3ff0388e9f6fbb033940c68c95ded83b4b2b55d2dfbc04a191743fd3bfa20f928b9e852c2688a2c66b4b1258cacdf67c9451666492061049825c27843d6ef83e493e485e9082155a750e593f59352ece62b36fbdd257b4865a321030d36f084577a3113e6e673d8eebcb38debcfff6ab19166b3190f327e8f1f54e15ce719818c3f43ae4b306176ee28c548317adc518e0133c21d659aeb77946baeb31431ce55aebf1c39886b73a51cd77ffa7b307471fdeb1718c6b8fe1f6589ebdf8a72e6fabfa478b9fe31223a5c7f23445cff244a5cff149688b9fe2bc440e6fab3a0e5fabb30c6f5211974409b8109a21baeff97a11db08dc69ca9957ae59547d0809166064c1899518300a2a19b4d8938987890857105099b06c11fbcb43184540609295064b20158e2483305142f88238cec06b61c745c7f23485aecd96c36a3c9fc95b4386532884179c7294529ebae1e0a6559e6b9e82f7fac37f5f2c7075f8e2fe9455ee46ee4224b89cda3fef428b746dcc53dcab6d1f57e64a5ebd591872e0f8196c5bd90cc912c8b0b934871214f6a2933904999167e561455ca92b8cbfb7fa245893ff84fb43cd1a2e47bd4874fb428e94f854f88b8cbfb7e307ca24509f81d3e79811e3e79f2eef2fe0b6f2f1b5fa89732cf5fca3a6471e1926e799f62d2f245134ed06633d90aeef2bce78870244f72effde6defb917befd60577798fb23fb0d49187aee73d0ff5a3429ae42e2f9f28a8140c1667552c955224228000008a004315002028140a878442f170384ec5d90714800e85aa4e62489489a3248771140521638c210418420021841840866a64aa046db76a1e1e604c429fa5968caea05192f450143d4976c2f86fe21369b4edcbede00cdc5953c372b0fc285c7e0c23b10f6430efe671bb9fe85f7aa67de433b095a75bb31e6543145e9d51986d43a611cab9d584e7a23bc67c474c3bba81792970cc3220ea83a7718854ac78db8b042b8c66753e250750b6ba79d342eae069e696ad7245c1d6c476fc5771bbb84d885aa493518a84f2cf7a824a668868a64ea9942ab2ca78f5ae54232cfe01900382516adcac0fb79591b91959779a2db0c4c84889662aa81d940d4bfcb13c4b75b8d3eee8239e9f50c9c6682a9de8c9ca10bfca9c9886a66f28717fe4fcbfc3a8e18d34256b772d817c76b4f1612a07283fc94b529f59f3d390c0bda23f4a03debbacc64fed49ec85bd7a21e8bcc80a2f41dcc538ecc2e0bad02e5d849b4b78e4620071e1355c88f316f1b825406d316bb630bb1672528bc0d2121bb418e22cec350bc19445366409662cc62f16860a0bedc022cc57c2e31503ef0a2f7185b8ad88472b01c88a5963853957218f550457983bcc4e748037ac17b0e7b8a12faa6258aab0d354082615d9442508a818ef5318c629b4698a304c09ff520c945278671562aa221eaa047c2a66492acc45853c5011c05362ed14c3e16a0a1b95ec888e7eb4fb86cde4894614a3a271a009c701e20e7015c1c5217633a12f20b2ef0c141257fe9949025c765c36b7c85ce63f39f3767a67efc7329e37d6481ce5b52dd8d5a728a2458507c03934a938bbeb45e0a7c82f799835bcf6bb96fc848c6d257150b3f21424a8027dc117063d436383929cd283fc017a07b6a244f99b3233b7cf2c4c1086e9b3f9cf7e4d5086d881511087716627088e096535892a279bb46011c20956bfbbf57c3b614f0ae0f2f50ff38e4ca301ac7b6c564ca48440bbdde9e1e6aa3f2a8559719ee67ff3b829727431fd4ed3d239a5ff8debe50a2fddd55777dce2ab8d568983ffe6c1588dbd4c389b8197076333f7e2616ce64e3c8cc5d88783b29e3af13016531f0ec67ecac7c1d80ff93808eb190f0b6d3be4e3206c673c1cbcad998783b734f330d0ae7f6aec3af2db25c39918f637e7104aa4fe376511fe2b45d0ff9a52347f941ae47fa62e827fa50cf27f5314e5af5282fe8fa945f2a7d441fc6fca22fc578aa0ff35a568fe2835c8ff4c5d04ff4a19e4ffa6288af36cfacff3e6d13c75f7ae7494d99f0e6b70f85d92259ed5bafaa85cfb8bb9413a5d9a928d07c4bce8f11ccef161c03628a8b5f1a2d284a44aef37137dd7613fb8c05b37819f50222d086bc0dbd2e6268e71c70946559f4ea71f953fd54f4fdfa08beff429db8b8476201c77aa002fee8411cdfbb6eb97e49c0489c980f46a7bf2131911d9c0358d481db1832ca4995986034b37b1b20f8104f141fd8041ba0830cd23cd782c07d20b4dae4648b769ec357d78f117f1c34c8ed7aba6c7297a7b14e3a94870bf178a9b5030414f8850ca060560c83af9511c9c20dbecb3348c8738ffc8cca5a33874048a02e01ba188e7068a46a91e4a6b2245c404aab9294e0e17814fa36e5f2c2583f53a6bb1c61eeb5baa669315d5b9564a5461b4301f0bb3cc5e76cdd0bf84d677020a6572fa8fe1974113f5f4852c99641760e5d924b690d0a3d7e4c6ae842f2af9c67ff7d0e5417fca03b4e86567a5870240410d965ba5ddf09234c8de47790bfec789b65353e34cc7c3001227ac84be0048e5502c78ed6ea7f87daeb8f400035a5ecfb47f874e2ead741a40c8aa53e1fdfe172551487f12b4be40c3796088300b5dc02bd07f6c4d42863b537b82a557ef1b687c94715f1fadb54618fee9e3df2295d4b9540930d446313e9ac25f66c0a893e936aca95734dc93017b6768f88a444351a9e9e3aa20fef567dc0a1a08b946d00414728e99d87260af001b8388674604afe5b7b727f03a77d1964187aabf3be754f09737807f0df050d449d767a1d96fa0f8b2ce3548e295b846c8f0742d133c3d593121beb5525b211018b289d93a65b465ee51532e6558eb8d24ab70df8612f16a1f27836598128916632f52cee589b9cd649f8e2d20fa45236c1a105a36c3e6a1ee618971f729166f197e0e45ef2916e91fa5dcd99be2ade43138204b86a3e008ab98be4df10d45143bfc2fc4ba6b2a26aca6fdc123778366530ae4c0b2193a07f509d338d7177d2f419ac0d1198195ad40ce19fe48bb5e02650f1cb579eab9f1e3a65e4396640f945d5f357bce2084fb1c6a1775c8464efb3a6c643e9e6df3363a0a61b908ed68a930e3b0ff6b7b376d784cbd8734b2577473913c947c390fa8bcf5335c8be3c0a0271745b74da438ccde6ff204e6dc42c0546b0e373b5d0482fe2aa5c926014e3771513dadf699385ba64ba3a657540500e586f2e8497aac5e2e5174b952fc57065390e93ff20f5f947770949145c43b89406b2a08c826194d6834d70d3a26d7140b64f96537aee00248589012a09a45bccf7e815a82a6ca1330fbc42ab758e11d54a52181f266358ee0940da9cf765cf6efa5aea3990c80c67459dd1d633b073a862ef9f2a439424997878b1a58b01358ac19aa6628d79083aea8ba4da363b6f02741d2aa9268f0c31904a6d7963987a8ed352006a6f891e7be024e93c561547dd3b8756f9af551bb69e21e592eb2f099fc114853a4e48b3fe078e68d63f28a060457a67281a0eac7f6e2626a2b5f5b61f35c575ae82cf6f25d5c982932e7f8c6cf61b87118fc134b411f236570a0cbd294a881266239e3de7a9c4e8a018a2f8cdb9fc9645f6c0a257e264a5d801cb1ebd4786cbaf10b299ff4e436020613f03a7fa8c88869b4a4f07e59924c2cdf6a2ad4088cf1ca7362da92d4ebf4a304e564fe549579ed0f314fc856eec6d5c3d01bf141025dfa2d598981be196def2df9533e31e9f066daa0893ee2f900b3ef845035ae4fcfe03e82df7f1c7280a0a294df869b1a5e7aee272c415ec2370f78073c211c693cbcdf3da2abda1facd000c37d9bd6087125989f3cfc808b0f21ca54b049c2fe84fe24970597a428d8b1af13efab30b82dc3b89e0b9fcbe9f6c6b4164f7f69fc5863c5133aade7cbff8ccd0fd02b822840e05e4ea0f70437a1bfd7ea1194a9212a82758833f6a41c14c185e052eb69029f519651bbd40b737a798ae516a8f5e15deb27930a334c04d989c8116bc312593caa489e403cebb5a916c29c63d66f31db5b8beaba6786871f1ecc75c0f42cfa9e7e671482229c1ed436d8c8cb8f9315ed78aca7fe15c33289e5b663473824f6aab7e7555bd82431c1da389fd530f612607cb57ec89e0eadbce922cf2b9402fd7c98f5d5aec089eea20aa6daf8b1ccc257e6edf9b59ce76ac9fc9c8e6d8ce91dcedcf9e082fbf8f895f85600e69eb48ce78f454c5105251f4713e421586f0ee3f6c3535e0b31014812faf32ebe7db72e807bc11cb4e9c641ef6ddc667b3b5f8f695a4a03f20f48b65060f3868d6ce58c63fde622928732b36293a0f879fd7d10c5e45e7190452003318c14f007364e188ff61a29995b2ae4a181ad9c03d58f3ccc8e0784e9003f0f81d300fcc14599baeaad2e975c53498cf65902b32d340725d15f256f4ea4e027b105e561721c8c517513a2ef0316f9ac5430ce8be02523fa781d0d61064bb7a698a9f16551b15e3a30ebd648c89e033634681d7b1f1585e7cb9739d4b6410534e0973fc1a6d49771012b555e3801393ea8d5a821e9945aefdd1c323220fd4a1f2f1f79a139499e4a2989edad843a8d54a3647b62f64ec89875710c8c47f2f413f4e69d3fc43accbcc3935a68e1685c6a45bd06c49740b0ac1f9e32f1d328ce73ddd9f291da37e536445c562c0ab86949bd7a34b7a8396826ac4760bb704ad66f011046b5b04111a3003e686c93a74bc7fa3d37ea1f03d1e566c22ca2da6d723dcdfaa06a6c625ad5c856dbec0d5110a3d9ec7ac5871683c05c078b8ebd1475e8a05949c00bf562566b966a4b51fd52f71404bf51dea3cb083bc899b4d8278925b18cbed8922269699c0ce1cb1c79b983d5855b0538f6e91915c3bcc3ce5601218325951f3b53222867d9c13424a9499667306aa2e19699b14e21c060164c5d7de6f755c750eae903c998d378cf93a3cf9cdf61f23e6d3d88890a3603027f65e2f20c4e9a3c1b6e5c8d5df763c0a13406abc9ccdad5109b0672f9c914cc720d3b598b9425c91f9af9f8968371862ad369946bfca96ad334cd0347ea1ae6837acd300a53187bbc0aa54339a83a966ad08318ed43dc87ed19b8f88d6387e4bb880aec42865dc491cf9d1627fce440243171306d25895b38000e1fc0021b4efb7927b82249192e270cb1ceb3ccd5638bca46f08aea45480126f16668f92b6f8cea4e58fbdc925e82541058ec11fbfb95e202148e77326536336e33ba0203c12c831284f4185a911a29796e4af16daa3115d47f2cf8efcd26b80bf6ec61fb5288d2d4d883c75898352db253187a7792e327b5e07e9647d483fdee4563c2fc0c25c6d6ad7fa0f7f2644038e5a96973bb1643ae36dbbdc10df1bd0bebd4c171abebbd867f8b9c3c6616f44cb3dc96ffc818b37c144c33c9dec4dbc407af833415132bae51662153c2004d7bc9a33959556eda46572fa0ec79d04e90d79a6bc7bba9cda138567027c66a0573fd3f1addeb286125b07e036327c5d2e14f14d6f1e039cf963b810a71ad268408e40a51e7c91003e741dbb0d1a55efd1c61292841a6a2fa20f99699f37cc4a5429ad1195f84e28e40823539138833d3da5c67d880ed3af4bfc2e6535f625065e326dbbf21e511de3d22e01a9495bfc16c4a04a081a23ee2a33a0c95706e628f0f50ac3dba388538dd0f323924c14a0dd9fb52b919ec2b2e751ea5f21d46d433b4b139258d80187a360a705df97e6d31943aa4db5f0b006a2bbd838cc6ecd6a67a33259a8ad719c612ff474165ccb6c90cb207c7eb27ffab11dbbf01dd8d95a3452d8e29dfd029333f6a72f1bfff3acc8a00b104119c557f986d952815dc5a1355fcc5f539f148888f1ee1d3a0e730acddc9fed583870373dca1da12cca43df09ced41b5d93f4b645b6f67418843be171cca7145f29a4f1589044702a93262c6eb5e6201581fa6107608488cb6830cee4bacbb65426866b59d7520953e742713bd0f452fefdf87f2acb200576d769e1e5735238c0717166c2d4471b92a615e43e41a8e1803f144a2234b77958aefcd4a37f68937eaed9f9f03b7ab199c5a056e2f6c43bbe082bbc76ddf2bd0d6f5b4f8c6a9d3be5911794a378452e264a9b60ad73da228088b73bd33e9d6e27e87fe9bd8a60394b6aee88217c4a80fd945a5f2febdb50e35c73cf877cd5e33529efbc615b5b4d21e2f3a18259aea433fc9d0abc29a88fd01de5ff09043774e2b093b438649f57bd37382838a073f52e81de9caba8a13abaa6ec1e42930db97a70310adb72d94679f0d95256951c1556c0bca2ad664ddd99730ce9d175ff7716e21db9286b0ad2b5bfcab1150192259913b198515715fb46c0d36e3473ea5b9f46d3889f08c897b35f1ae813e908938d2f594ada590113d6748a641882548d3eee59cf47ad6586bbfcc026740c0d1118b5d3c55d70b11f50cc4bc0cca02c9606250d2605041ffae4a42fb1c834a4dee269493d349a064dd1764c23eb6023511f9833262f34bd5346908092cc79bcbbbfc4c045d722aaccb2e54a617bb4c177d5fc9c5473f643130fab8f4cb39651a378705bd56d56794ab6e3bcf077a59bf2857002050fb4ff12bd2b69d1af1b90c790f65d6de74448e916be95ed0db1dfd328b1d70d65f47d1808bd3d9a2f11411c00d34c080ab404f95e2afe60dab425f2143bf6340e80c1388a7150fb78fa84758e8910563bbd437a6c5e4edd4a61c73e43a94a2aba5090ee871f9cee14f4b89beada1090c9d86cd3df31c7fe82af584a6e5c06e7903f603b4efb46cdc194758c2c1af808947f40818949ca0dede139c2baaaecc50959d4658b48b386a4fb5d9bb00879574acfaddd9ae52c2bcc51f40724237334c90507d0cf6db2d9f70e01ec781fba42f6e4569590bcfc828a0289800431209e4c93b9b4d4aa4e2eadc3477126c5fd203e642d700f1fefadf4544c1ffc981e1e0194debeedd0821bc3b440eba19c5871d40d896399618a10f6c96ab47f166721bc5b13878330105f3903dae0dc497b33bbeb0ec45ac5bca5c31e869683ab85cbe526d8fe7cf0b8c929325008e08aa358aadefa24950552e2b88592693fb5d8a288b86da52e67534c39aa7f39d959f9eaa62c871322f96f03bc2e00ce552c26aa1778c73dcdbb1eab5c6992760aef9ccb1d5e50e0bd48f3632b96fdce93eea22268b7978494312d7004456618d51b4f14e33e8923acd6f3980cf374be97e5916dc3d8f34f465709ddf765d4f465e0ef13cd906021e314e883f8324c8014ffcefe8a39bbc9a712c8ddd6b7edb22369e678fdd123fad6fce46d5443c2023fb8032ad526d678387345628aac2419b5bf3bccc01b805bac01b0db9e647351cd6960644a5b141cbd4ee1e1dbb4b431d14b22d25e4a72a6dce4b6ddeaa7260ae5521efe5b41823659ef93ac730e04e2be6e12554bdfda4de6556068a295024c6f6229fe66e2bd4056d7af805fc8d05bdcb84b6abb1a922216830ef57cd8b9c626c013ac53e0d4ac5637f54a7369942719db5b912ab785afea6131128e54dbe8c052a8edc3891513ae1bef7670ce5dea34fe9084790dc19fbcaf378b02c53e81178d98ce989d05b6df65d35b5f944915eba3f9aa19e8c9a09e995aca9734a0c06cb3abf970e15c25579d6a2fff3a4b3517689f9fc2bbd69b6368ebaa112e91ca523761115fd3e60890a1bcbf7a54f50429d901303568eba079d0b7794e7e1f89c174312a769cbd96051f913532d1176287f046a4bb462f143158f8a61ae4dc877da8b3360e4a90df01d3e7d218f846c73534a29f2bf3bebb0cea3c8ae9649d5b6768550ddbbdef9c293da9a4b451afe58bc0eae475b50a8799a3d3b69822aa399a1c7db53938466ea7646669355c3848577267cf89751cce728d7ef3d303777207d33e859cb6cef8a81ae3d14b730fccc7ca8834c9a553f01829cdce00a23e96af7dfc1aa990fff0122fa8aeb112c4d497c4a7989c9af70ec5b43c02c74428b9b4883bf7393e64cdd5f3e7c81ffd00ca57b36d0c580b752ea60d030d68dcebf71d6b220a5b8cd3174363385f479f6ac9beba2dd4665bd79f49cc9f52630de46255e0b67a9e6889dbcb45f90299b81cdbde01d82ed6c87914e5f75cfdba4b9bca28740a6b9c2da18ec2a468974d7dd39e8d888578bb8f39911936e58a5f097e76de4b2e05a98b6e7edc8ae13d98ddd48bcaf749262e0fd790aaa659e6adaef1a08bcbf34e10d940e91be4f2c22573535b80eab8f2e781a5c8c926bcadf5af8917b83009a62a36aa47ef8ec7805787dd645ecadd81a7494e4b198e0e9e2bd4ac24411c773595ddcb1aee0dbceaab69dc9f0dc3395214eccbe9875f394f7e34b0fc0e448a3bf53558a37ac31a4420b333626f5046798047d1baa01553bb77281fbba59f981fadd8475bca2d791a43f584793c87b61fec0c3e6149aa0fa043ed6173e1d68d196569ff29eb4a3c0d85cd614330b01986e94a7533c0fc096d372f01cb7b53121c6f4b00c10657e1201bbf76eb251ea87d68217a5e1ba4de8bb5404e77118d092d36e822dfd12d18223d721219d809dd9b623781ebd194f4319e64e3c7b222e33ab3cfe0a1da0f8b9da6ee504505562bc319f23a2828c1f2b8581ebc5d7c668da59dac1f3532affa704b551b7b89c0121dcaabc5e373831b7d08cc869d04e6276691a0cc9c4363400e8e057756e6391c949836a7a2afad4d9876e984fb715662ec9f1bc3764305703e31ed431a91d83d94e61d33023187155d0f8ae6e7688c15ab881f29e88fd776e7540556048a15747c59ed959844f791f984fcd7e13add161cd9ee6b6497648815eddc4cbacb74ed74f5d2c5259f761c7bcf8872937870ad42e44acb5e3a33952fe4a909c3de93ee30c593a499a2a54e720dd950880070f8c3a4ad45506b1d6f7a056415014ba8a3d82441f9e664bb367d525e84b26ffbb726a6fc71103681eb0c0cd33807b2f81b0b32e7a77360e3865aedcab34fc6b037388f8b46d4deb948bbe566ede70eb326ea5ac5aaa1498315479fb79c48eb568e753d53a4962a1173aae03b1cce5f5e8483f8078fc6e73d56a3c405efb0ba034a3e489c76ecbc0a24e20526a63be1ecde1736b85f5d22215967640a62364c361de81e1d625189403953c04e0e692c06896f4c8c536c77b8904ecf623cdcfffa8db3b62c6685962f2e23512b93ffe2f6a7d9bf198f4628beab0005475afa433e3e4c1ab899f25262b1a02b0212ea817fe4afd96355db8e8ee03bc8420e95337de17e63da10044b552896b8c1b319db5f186321d89f67b33981918a2f8a62399a207051b39b5823d2a3f70d1ece4398ea55f6c830060ed146cc34c53da63f28c0ddcc9ceaae6b58201decc7c099e1b7a0103f359d177080258e333effe242200112ebcef177259cee837681b3c0f32fb9982221a68837885ef8e520036da43fc070968d6280b4f958cc8ab2721e2a03a934c9e04afe078f91730243215ac3de5c30791dd6ce3125759175ee49dc6d01013d8bde313093e3054e9ee60c1e5e96d12475a7cdac8944c780a5ef7f9093d6ad44603dd228fd9dfe6f972ac4aabc019eeb112eb5f6392224f6a75b7edfba1eceb524fcf3d25504379d68dfb2c2fb0a03c09bb7896831ded9f0299483febaf770997ee01551227c54c18e26371c4d8cd6ba2f97a5de6d293e1b0c013390fbaa29ab39989d9012aad818b3220a08a4c11328704e9e23ee3c116588d3560e689903f842784de531ba6a17a1c105fc0d3d9df4ac9a65c5f9e99fa7b7ac78b182cd445cee641f57798b9618484f97034c960b91af652aeb400eac2952e6de723432d9a046578b91fee347d3d75801ec0641be6677297ecd5200fd347e5dfe39bbc78ef2e7a2ad21a7ef88b669a8ac87559e3f5b1421c9dfe6592523a2893a1a25a289a1039575215989a4046d7f01b577e57056b6b6cf9b81aa7fe55f09c7f3237b296563ad0390c1a0b3cae40be2201b96be1fa265d7ce4d21a6960398a3acf71d66f9c91953a2caca80431645b84f9ff06bc3913fa94f26604548f312cd3968b05215a1218bb73c643cc00993a0548201c130a547e0ad275ad87afad7f9f354850682813488fb9e00e56d0cfc3d5f971d58c29b54afa4b1c1309c1eb88a058197ebe3cd29b690ef9470dfed28df24a2c1843c59164b9b7d56dcec780e864ddccf72d634767b71e98dcc5791c0d595fce1668df1143a66c90518ace897cbe003db1e3f0dd13b4f91064bb630e807b6d3167c6cab510f31a6917d37ebdeb4d5ac00400c6e180887769b91f4ed729d1bf8c2016cf83e97fff77d712c3afa5b340f1c17143668d0f7a253fbbadf047a68b3cff82d2e7aa9619633ee2fb1b175ba882994c6e3380ba52c1f485247d33c91719ed164e16a7dd9fecdb570f70b59aacea6e21e26092cc533441716e9d23f1a32d61e5248c95e6644b8e921155871df4fd15fb474847b6bd7e31903a1d86dad8462e5850a06ccb657b62b00b53fbf11eb5f19a18a29be3edfd87bff134437f3914c96e921898240f225818f4972e659a9b087463434900dcfb430cfbf239b7b0dcb60497430d49188f678869b3f1fea1053804f90943cca66b375449f28ed59b9fd1527ad2d1f696bf644e016756cb48839e0ff4a3262683f9396f7aa9c275e067c50723e05855a095caf874178bde1ef7580bb600662b594c2a46745d811f092946dc7c01048bb672a2cb0ce0fe3078d2599a8f5cff1ab3e67de6dbb894804d172089c778c3b741cced089d0e513b9dab7357723a17aca1c256ad0afdb882581c6b77d269fc758fe2608e4f15aea0b61256786146c3ee7abbc2abc530c4abf19db2d6cf40421e76254da1737ce088beed3e0e848b2e5425c792ee8413cd1fb367a17159f767ca7f9138d91f70eb49b716797c854987dfd85a90da46652351741387d6e692362b2fdd3fdf3f6143d6ee3d5e4351c4af354d46d1ead1b45a8abb72d7e0c6722cb56619ff376d5d29f0d47282dc1ded0be37d40288ea9ffe7de05752be8600b8b3f83fab3a619fb32d418d3e419ff7355e45af9e1debe4c921051f3f1f673d838010f59f9a30167ba9f2ea5cf12bdcbe1fb35f2f4fdc6cd4f7de37c956153529d8122c1a8b31afbe12cfe82318e86a3b6105e95ac57cd68c100ea9accc4974fd143ed91b5e957792ab807688e96671ff9fd59ff41c42fef62f87c5d3d03c0c1df0b374ae394a4b25bade23a36467708831adc7a4975d4e213c7cc9d0abac2636c243a5c9c892a1ea354a896cb721310a86418e1d404178e412236677e02cd0ff5c9a94aea8c347068a2644e957d93268acdf739927a3a1a180b0b0f7649427e87aa8c11144face35365ba3e4d85a9bde68aabac37d2e8dbc027517d714cdf18a0ca88c3b689bec15cbd0b3eb320f17508551f7d77180d90001395730c7b3e839fa47005f675fc4759f739c6c6f37fcdc6af53f7ef167337daccb5f28876ccdbea9d85914f7ac4bb5c957dd70914c031b35688afcdb0f77909f6dd4ecdcd5079a3bf09382066e1905e493f1a6950d68ba9599ca5e96f2cf80ad7ba43ed7badfe3e2031e853fb7ef9b7aaefd7290d932e6ca587867e66014836d871639a43a1e1ab7ab40759dff4ba9a9a7d0a626c6acd85d410373807c946eb69a7890928a9d0fc11d18b648ed19adeed1a688e57cc83660e60da12495a35306be09bcf0f3138e37c46b33bdfef35abad9586544ad044b3f007ecdc919b8830aa7de3e32ab2fad561c3ee30b8c6a658b1cf1ce5765f2804cf344020dc75309b0c86276ea91180ae1998237c925a897497d9e57989805cd626378637e4bd1c2e891e98093c4f4d36b5d255843e350e5a3162e87b93cecedb64d047f91955baad4ecf08e41ad66403172c41b43cfa42d66dc3aa73c2c0a3bbc02d4f93a341fa7cf61fad41e81870b735072300c432ae1f650c4695b121c8d89d8530b1aa21256cb2eb3f758ea1ed20dc3a53b523997e8a49c142a02a3fe9100fd8ab8e1bc25e1b17d2112a848d38f05fc1891756271384ed3fe82530ee32ed70ec2aa0d25a5f883f55b6e9e5b4acd1eb045d6212a42e7c4ee2fae65c1cbc261ae27879a7b505e2b9587dec9a02a99a4d3c7623cf68f28b82607099247e97e4fcc0c7c0e099f21ae6a11a20830d74fd1b92488da7dfbfb401145efa41fddd8a9ff1521179695b05961492b49a64ab505fdc780101cbbd047a25f7aedf8544c933df6f129f602f8df82043615608c8c4a7b8080c791e141dd35b5b89463de23b8fbd68570c9a2dc6546e4f023c36ab030952ca3f1f2463eb62b57c228769bcba368a6c1f601c3d75026a402c77a01f4fcc4eedf3fc066fd3de1740244e345f8d64e458216952f5e0dc909b048d493c804b30873628eaa3fb645d1e8b3d2c732b964db4337715320a74b48e45204f0d788de4365813385b271ca6d1758ee6806e9a8d3202084a9a6dacfcb6080d9c8b66d6410304ab8d1494e4e9ca79aa4daa5eb1a847e6a50198ea79c9ffaa33cd9e0c94102d2b83923aeac8db8c0b96f8a73d5d1d736b4c6edfe0824623f4168403673079553203e06843bc7cdd085a5ea7ba0f563a10a0f330b1f3aad9d51e71291f194e34c86a4fe6c85dfddaad5ca593f6568019cd20fe623f2a6fd326cfe4a976a6eb53b4a09d5e8f5b8e80ddea389884d6f694ffd46e91f37b37d66e1213948689a5424fb115f6db1e3672b4902467bf536bd5c2d12ce61cf3af0e7d0a887eb33a5956c0407b2566c218ead457d6557833dde3543b59aea9a1f1d5635c93d2a19117f55619d22850ad7139e35854cad03557633cfe164dcfed5f7c5e56b20c5ea5b4285338c1a0dc6832c8944924975282cebe32c86adbbc28c3c413272e363cff4dbba4c1659fdd91166e2b27ff8d5052ed8947c6a04cf94762b22e421efa113324141817e87d1962f7fe596ae4a73f690f4f25152b5486e3545c91d23fdae0a657130de38a1031ddcace3a77a6a2f05a05fe80c5e82c938caf0b94bb578cad2d14927ea0f74ec8788211459c393e719141b248d8e5de06aa2dd557bf5e479b232b4cc53e1e4eef96ae411503ef02d19913400decdba2536616a2b27720e88b5a0121d2136600a4526d90b1b6b48380d5656d8d33b2d03a69e660c9182f9fcecd390de46dc8bc9427150674c27db10a7a6faa0196f3d37303407db942903f956682e26b5658c9a5bb46f8979a57c6f556cf206e5fb869292619c2e17be066d22ad7fc6527ac5f9b7c2d52122b759ab02a1e03b8a07b4f27dd3e65a630606cfc9503f33053574986bc40498af533c2222394d8c9b19d35f614cb35013c8c528fc3546fcdb303879d90ae463c7e01fb2102b5a03e424ba3b8640e1301e4e3c2ba4578010224e63b2295347729eaf6163f9818f4edb2b86eaae7b97c3f8ba408cd8c20db9244edb7c8346b34a2bb52ede1ae085523ef6b4815c8e55a755d3108dcb974e56e75025c64f54d1a13fdde667ae5d86e42ac86e8eeb64083c881feebb4e6824eb94e24b1d40d960a52cb19e8f0cb0faa5e9918fe4c4b97d56457e4f47b7a6c2b16eba590ce63f548e9e53cff4ee1321d75a049b922debd82298410da9ef9e0363be1fb6349e1ce11510fc28d000212d712a6194b9ccb4fcb896629eb6d9cc2c5d5bf109ca632dd951f58a512211adac4bd8e86faee0ba3ead881a2fa96a52e070f9a14083e0c927faed7acf567b7d042eaa78e6b7479dbcc8aa401d363eb23e7fefef02d75c565e24f2df2131d40abdce48a379508cbcd9d378271e21e5d12077f0b3942a6c965710b40eb1da4bea65fec057eab7681fb13557f91b8535f0d690ba604a87245c9133c343a440ddd75f55a43e13ee86293191ba4e5a85278902f021ce566bd59175f1998e27d709667a6c81bfe6242bb0b58708898a375f9e96292929b03e9ef62c3847ab6600515e2645bc5b1278c0471023a8ff31e5239508f92d1f2c9e015825512ad1004dfefbb33c6568132f6ff8b8b82a33a352937c06b0787ea7f267bfa8d79c57c9e6a863f868c289dc88e74d8066bafb9ab2f65535f59bed1f999fd1eb6275eb6171993ce246b4e1d589a69df11d70a18fdf9027e6789ce2c6008894bb8e49a133e95fb224cc43633d5db26a7769810552c4ca38f19f9564026b6c3ded5feeb1e16133f6b0f1e3f0ef3e51b52115db424798b101a3b62d1e0b586f1a94bb6d075775ffdfe44af578f230615954ca2328b5ce0147b3fafcae80470863fe2e9004b151ddb728096c4544753dd1d151da000af03383ec0290001cf0bef1fae449d9c4cd31a171c4bab5c6d50e837aa94a522b675379b494514dd6bf81c7c241654299b8fcfc6d35d4402e178a1454880ba8f08909dac939d5f21e8d2b699b072a5ac0d28b45c36067394a5f053d3f25ed1fd1ef9bf476a33c3fc16e024b5b97ce517e1415b96e57af659183fb7f75b0472ccb9e4759a1484df24e35e852dadda279a652d509db91393e98da19eb1d2f7dccf090894d08e0f7a5b24c37c9014b1d2790a188f8b183e8e7a96096663e1b5e5f93544e01d1929c8ebabee5e767f99d557c0e4b1ab5da6f9d20318e9a3d4a1ea368a9e0edaff61421674429ace124dfd5f8763811829f838ad7664b4fd1085776732063bf64b24499586b94db18f15aa008461293a80e24537631393061204d922946a8a627fe3f5f052447f66d07d1a64de1f7df7d7b6cbef66873f8a74f24e6c950c05aa37dfaae4ff28bc6647412a1f16dd8298cf2bf6694c4eebed25c87a7e51b78045c168404edc8be3a3e385616b77f3defb268bb11af14967890d78bb88a56e953ad16f13a8a832169bd5432a7c77dd8936e2796495cd9a4212b3871950ac23bce4ad7123fa40d152b35298521cad392a07247d9a68422fc26c2dbd75e1fc549883f7ce53d883303c60f477506273044a154f5a6b5adae5cf7bee1352b3baef272f716f3a0d15a26caf64f13967031b10c0451f1f4b9f1c9965165156aef576c67c938d02caaa5f6d0e4e619af88d46c523829d8cc3595361f22f521bbb36143f59d597d398d112d324095fdb9c258432e3545fb070edf95cf3b87e807a2772b5844fd571ea526eca1cf17612a12fc756a141edd8d3b8f4400287d8c3c449ba49dab03699afab9606a315a98dc7253cf232bf245149a31b0f180afe0c0a9cb46b15a88da77bba66b83a5a0920fcc848d50296dd8a9c629432f3b74697d6c16da89a0be8df4cb60c8a7034515ed9442fa11778df92ab1d8a20cca525ff2e07d9216867275c44df6145536c7b2c97c74c71824a56c9f4106c87c018c32063dda17bc8cc4b448ceeccefcaae76d7fbe092ae66a2151519695ed6dc11c336183bbaaccdf811e99fb28ebc322aacb2c7315421628275522b52371bd4302799de9de40e10ab2d7b6bffd96228338c6a010e036a7e4295b983626fc6386cfcd24746c70f375decf69039e02d2cc31aa8023a9a6c5055ed9388641aaf739ac389b6c3d40e38756e51f71d9b9997e5ccbb569d1248931afce94172164c03059e20fc1cf3f6d0afba332bfcf80c340ed2c119053f6c12d70413bdb3ed3917c495af5af15824a66b069713adb56d761afbc21365cb6f4f0daa5e9ff66e946d10e42050f1493e2ba08475730aabb546951a1e6b00eead2f7c9ec4f6f2093e08124bf2f9772a651a3d2267b31f01f3e214ad4c71c265c3bcf3a34375a9845db43365b37f21897573ff17caa52417ea6a004fdba658f690339fed4ff9f1be65d9bc90e49f23a2ae2a35e371a630b911077223a87858fa951c83c66b3528ad9284a08bdbdf139b7a7c0a30cba7cc35baa93db8aa1f63014c30f78d9f6e722306c7d9e5e6c699b5966d0fc6a465d67d64efdfba80dbec04156785d12c29ab81207c526dae35216956fb49a521dd8d3514703849ea79d372648fa9d681512f0960dce64c1d3cd0521ed5cfe1623262ca04560b5b5ab87c1c29fc4f933819f412f897a279bf97a4a8db109bc5657be2e5d3197b16e2f8d23e06b945f1245592e46f1e6d923543230f0fc0ec19cc56c91cc4979d06162df58f12306c4abcb6189f1e7f343cfbb91c7bcb34ce08979ef8bd98f55acda9cfddd3986a6791ab15e5b64eb5ec7d7b5d914b9496c10ef9d13cebc481622ee068d07451fc1313ff2a049afd2f9d070c146cf0a1820541572c2489d90b71d3bd0b718686ed821f4f980c1f7ccf079df0299f590c7a898183eed2798886689b62a8e304acac9858558561ea03ac4c7402de39e86585a877cec67c7ecdc9c59f1bcece3db5a3eb50da344af5b57b8dc7e2ce73fd078edf625d6df287eb22516bed958c4cd786cb4de74c9ed3bacac7851c9dce4914c1617706d55248b7659ba3f07fc2d1087a5a608bfcc61ff946202f785bb567012027dd4164d95633d4d654bc8af1b23ff4196bd1f4436b18840d189d5f2dc8001446506409d31f47df0cd1b52c67a40fc84dff802d001a863b06a1008241c55ee5f170845523c43ce0d4ded2d3802078e52d6a4709f70bee589a2f24fec98b0eddc62572a42e703e141514f3bc9b5ec8d7a09dbda24ad9303ab05aba22036e52113e8c213f2cab3823278195eca0c3c9b3525033ebe22f3335907a526c8e6e031f70c4ae79c888ec01cd564fa96cb607d2fed4286784b1e97c83d0bd3c0927c01a9fb8483bc7fb5d8eb264538bf4dc394c19e1b93e5f523a58243d7017e757c598e78affb883224b8c63d77d0ec99399d706a1ee0c221414b52f1346715a6dd040f15181bc949c2ab3b01bd30773ba55e030607678df3e37d6e7703268cfa1aabff7e5c6dc8c3d818e8980625ba22287b4105c96f8e508cae50a325ba1ad2f3e4d76ee82d1fb8608dcb2c259aef3316315b5f34964cde4123f29f3006d3a2ac3924c605d350151cf89df9fe050fb65a395d049248ea9434ed80f00ff77c7d5a8072fcceb3033fd321db6c1b4e4de7b7114f4909393ecce977296f385981c5d7e731c25718a1b031e24927dd4fb8729921365ab53ba1af3e620d4a7477589d8136b73f010cf2e4e10c8beb1a1430d9408daa05b0b49182104a0b0276da7105c2e0b534472aa75934d5cc6cde41c5b164f6d57bb091b68355a65ba689546565b7cf3c57c7ebe48e4b66f6814bad310d05be842ad91174d142d2897dc0db18fbf667de4db014532d0ef34354c3337965f166f0948de026cb16703d3e50ff78d13372cf7b4fcc573608f9787aaf13a8a74b27fdd01bfc2ea8b612b7d99d2e80b3afece17f05f13cd47ae2c8c5c16e2f4ac135b71543ae1ff3bd11bbd45d30a98ee6fae17238a53a6ad5e0996d0f76703c37ffb821092b7d9b33277f49ab4351c50be58908968666315df88b953489228b6de37fc50fca2dc47b1d969227ecef5cff09c0baeb6eb7ea634ca24befc4ed9f04d007247d0f1ac3b258381c6609c205aeaf93018c03583eb3e41c1b76859c8304a6f4605991d4ef5539497856bb5f0dbdcde00f602a674c04c31c94e6c64ca047d8477fcccf4a15e2f961256ec329ec0f66399f161043910b776b07f11f138f0eed96396477d6bbceb2dba9567bbb560fb3ae23902163bcb2f428aa86905a50e431dffc6abe2c6b85b5503a154697ad07167ef737da1e13f6132c736951a0dc2d0be0b72ca17373a0b5cd2451b1b8e77bb8fe36423dc48dc22f96a98c6f529240dfa890d3f004043df0b525a6a4dfb4c28b713bef5158b4e4644684c4973dc10a84ef4f0d5584260a33c7566947c3c63ff681e13fea4a1cb04006aef0842fdd9e08995326abcf32ced731160ac4c155f369567d8ba41de9465d792ff6ce8c8579db315727f55c4551c0e511aafc18f32ae698d57fab484298e9e8742ad15b1122de143cb4cce2360b8ee3980f5802886bb4998e35fdc3bd5e8ee858a151b6c2cc8d9f18f5b91a9cdf754624522ad0b3446b4bd85458069e28ebcc136c8c368c81fa666b542640c032f5e7f303ff5c8c04c24a96c67dc5f290673a10a26440f832584a782c5a899cf8df91e7893c84057dcdb1a5dd6396caf86f3530e814d0e4051098b519a1a29009c276e5add10913c53377b1a09cd8a51291ad0583f54fe2bc4254630edf8138c754e04cac2a7b0f1a0ec7b97e972e366917a4d94cf9d333f45f7e88bd91e5a6825605a9154171eb9ff6b8762656c535a6dcd778722bfa73c96779f300c785c1610562c48133035a4b46be19ae49f0de8d02ea1cfd5889394584131456a2581bb91176c51d96eb431834a3b6ef6c1d4e616e1424e8e4d7f097782edd5c551068c6fe081cadffe223501e63e0d43120c21b0e826029dd48192706627d0fd94db3b663c98a7903d2a277cac259c1ad0a51ebc60d65f6ec144edd808d60f814c6d23e6ce26c06c0e18e94f9b0169c7a9bbc7e40b2cc84c9eca168c74a66288931c552e082d7f9fa46f0115b8baa8b63d5ea97d489603f666347ccbabb869a3364cf0a6f2a8a14daec559e6960dcbb1cca898db08130959c9524b89eca7b31f81a4c7180f9cc03a679b69440732c236b0e6ad688e94cf3bbcc2a80f480d3689966d9b9a46a9120aafe50670389ccd0fe59c0b47d62aadf2710452a88d657a06bf335d009529219d268e69a7b91f5e2c4b6a66d3bacd8391609b029bd0f6a3ae94a715532e700215ac1ad383338cd66a7ffa9c8d6449cb9610bbe2b199cac37ac04d3b10586b0e2616af5e886c28dba60c87554d338e1acd2bf111f014dec01da101975917dad44678101702b52d61b23938fa0a82fd747e8bdd95c8fdf25f94729433c93326fccb0c06ec05fa81730ed96a1add61d03c156a894793dcf29e229e1e8c1176905b08e6180d62eae973122d11a34888a8991d1ee373a5aa77380422be7626bd37cef09c3fffd39b90d552d8a5bba25bd3a16180997d7e551396c74a887a8cee4b27bd2cfeae49f6d9a3835f71e71604335ed002489e3e2e987757e3f60ebfc7db59558a909d8eefaa1ddc0f18741b3b0d0a6981579b65705ee2c4f88b117a34da5f97cc072b1d1cd0ebf46511ddfdfaa5fe8250cb1be938824ed106c0d6232a4c19cd068f4e493443a71195833c42cc8c82402b99fd1597a8d42fc5b87961ca4f525641450a2a595ba881644fef11f726824d4ffa51f8ed3e269493a875de864e8abf461043ba93b4475384c89effc29ae39f3d4c669a303404ca4ab67be54f89d33d9c4c1bd3cdfaa65826679d2404b033632a7a8c300e5e77fd10a538fb017f0114a25ef7b756e40160a5b0e8fa84853fc4fd7ab9ca4d04bd5298f0191d59bc12910fe28f4d5b5ad10f547bd46f7b112bbeecab8a5b0357860fbe8a0fdcd879b86acaecf9b4c49d506533aae25b08fe89ada9838e8cd014c6eceec277090ff8c265eeae9a018c5f695c63ba35a22d0826330f654a6147853818c938d2004c92aa14d974c04a9f7fc81e402c63406937e33f9ac1d70b9643af085fb2e0048aff2c2f19f98493161d5b8a9f5b449a652d39fc8d5c41e28d97db67d7011c64d96a6a5d5370553407828faa11b722770225dd7381877dc875cb9bb2f75048b6cc2dfa0acd1f217566f55790e788e2056818ca51e870b780575dc553fbf56a93ab4cc4e628a9e829ff9eaa3f78d548741acf6f6944881c9a0caa2ee8ec0ef0bf2128b564004e75c92729e4aaa38d3b05142cecb5d16c65612e79f78988d06c9f06227a7ecf48ba9d021a50f745dddebeb673031a5deeff13869a218cc76454e14af875c5a50fc928c28a61f5a66c87051e41799dda68fa3bacc417e5e76d5114610037e38e41f1dbf804a526535f6da4f6fc065208e6885f679d6d7cfce493129ac40f6b3e52109c657d667a07295044e1a4b1793af187e16a3f1bdf330177ad3c3a95c6195e8de77e6e690682a6c5d6afe7f80755ccef1a1507a97e61e27c05d8850222b3b48c0cfddcf05646ce52fc74c60ec458b1c9f27b8c0ad9e4031f63379b3c0c1fa36b08ee1255132cb4985f2f37444c549abad3bba72c733ea0f8409abdce6e9c74af864a367a5d6102bf6ece44dee4a06db56be65119cbe6671d58801efd589608fef238371415d1ce6f0927c48792a10f1027336dd9792d79fc7ecf437cfc36cb5191969a6c3b8b56c666f1ac8ce803c0d5ee4b7802a37ac706c51ae7aea55ed6794e4f7b49d0ef8988df481614e6a115635e7b18a7d621fbc1a0a351dfd3a98fe6e9b52f60d89147a1d7ce98048e31176c75c31fd2470d1b0310267949e0a22af8daeeac9f0f2bef139444b85082c36158d43d772ed5a965e50955e4da6a7fd12f5fc13618ff78bd5a00509615151f659d4d05be69c1f0000822163bc4dade5caf501dee25c141be8701b6a7a1f20381dbaa964d7051c3367ba9d6524700b589321a698f8295344b00bb1931c6317e204cd7dd0ca20a4cc857ab64f4a1d304f7cac5b920e8ece2666c5012844a50ba885a70752dcdb7215b8aeab3705cdac571254679c672633a2ecc755cd51d4196d416d48eebfb0647fabe71670691a1b276b5590484610a895091071c179014f3d2cc0966e4fe9330cdf463d9e1cd5d889e8f350af098d4a3b408ab4b25653c42f3be95e83b2df285d15bf361af04dc6c73e666ae57a2faf072cb205b804b43e1541e0f70869674efd757e2086ead9bba9f8be02caa19fa56d91702bae353b3f362e15f143d20f921f0a81288fcffc2ddde9a3857387431759fbd120d9aff1a1787bd22e24afd98e9dfefd3bb7320b081b201d3a35486befbd9c294797a91583f509922908a750893d8ffc1a4a5a7d1274de2d2410e53c9204f57309d9f64bc39822551e96a6e4049c16d8bf9fd4a1e8101ca2293646f03031571cc1305dfe4d585a7cf9fcc07d48f1a223cc1776ec95624b2d82bcc21bea1d3a442a82a904abd9973d6952b93d8ec81a6a30a0afede069682518a0bd3e460679916b4f2628d7ac3e213cd1d47860102f6f228764dc5089bb156ea931623301c0a9bee7022a7e0299c11e22f52d0d7de3208919570260bbcd47c0db339b84922dd00894dbb8b202c58ba49a528d5fa2efed8acae1762afd174c33cebc02d4822d78e20ee2cde8e141d0d27bdd72180e8e272cc434b6a5a5ac932f2f82eb719ebe28febec46dbf74cd5de6d24516e585b25bc835a07867fbf81fbbaf0e5a6986ba3845d5bd537a3c65ecc303e9e4244cd48b7b10c7ab119b7f83f3abdc84e2f4cc7c2c87b1f70aae3aeb549b84f7e25ff3058a70c69200b389c5f979f4549219b03074c2063be3820421ce0f66d2083ce07da90359814afd17a4332d817685144b59760a0c39c3ec3ec7a15b719bcb0aa2b87d6b193cdc7200ecce096cff070b8088b98c451b3ed8d859579b5d289b6823a21eca66ea8eb9521aa7be1e5f7278c85b5448ddabab205c77988cce78950bd1ddca1ecfd5a8f0dd1657c69245148a6ddab55d20aba771f178426ff9874bfc86e200de61c6aa50abc65ed91bd1125e8d7f8a977dbb8d11559334a0d5467ec09382d224aea20fcc5fbb4d7d2d9cdd73594247943c5159ce2580b8e1e93c1c537d578330afb119faaecfc595c90e035f851d37aa89c6a59d1dadd69308216df44e2fde72b937231829ab4cc14ee6061f4cd468fbf85e7a0da0f134398a909ed0ac6bbf3023e62b579c9f91167d017a31d6b09dadbeab2409136cfbefad4a86e74c5496154047dfc2e4600b9aa25a72251300c2ccfdf21fc30114dac77d183e365ddd372f1bad8190ab7520f49c6bca6ec968f72339f4442d26c6a8527f7010190ab646a5900b59f8a1b254256e714f5cc640db412fd329683d8a11f2460f8e1feca1d1688c336d246f065e0690d00c52258bf9dbfc88319bef3d35acb44036622f47824c022cfff01e0f6953473cf9f0be029c2f34efbc35ec653b747275a0cb7709b8d92e195d6ba9787c3cb5d3c0a35f0159dc726eb898605f19994e114961844be00e4e29fc5a371c8376ccb0e387621e38f0035c98cc5f3b3bdf934774005954856290a2aaa37b7e948dc2a147b81fcd5e3097d5efc84f68194d33ac7b99a0abfa1e9353c4767785dbf8ca939b92e879c4b636e4ad3a900d333eb26cbd507817d684079ed54cd03c758a6c09879c53f4e93db59446ee594118aa5d4b332d1f287d8338e38d610dc16238046182853acf8d401c13d921ed018c4b3c816fb515a0f8d931944f2fd104542157e658b744aaf75c3684aced82a3ac732912435c4f191db6a1f7c23a43197863931d345e8f4e3987e6f91c3630bea0fdfaaea59515c16151d25a6aaa75ee553a56a7354560b71ed12b64fb979a09852ac8df5255dc5cbc29bd3ebfde844aa9c120900d1171aa448bad1b27af1d841aaf13b07497c4a6fa113a36809f076cf66d206a020c1417710fb2acef415db7b748ad96939763854ae4962ba4a333f650d394e89db2a4e8c7d09d81112de6cc365768ef63e2e38a37ad84f1c6437d434886a7937b8e3926b033051da42c361213cdfd1df015b1e8fe7727cb50894217443a2550be0dde6e6be29b11d045062f96b881995a22d4e6cc419f8a7584a991d8e767e8680ef527055b0e4dc789ca8557484d424a6e20a4d749fed153aab8b6de0da7f4a941851f2650311bee9d5424a20a7897bd84c8f0abdd1284924894e1450f0eb3790e0da660432ce05a06d49b4c7a91d3f45b70ac56eda3ce541079b272531de172c9787a7f6cd401c6d11b47023d23ff6efe2f200007588d8222fab182b326cb3f5d64bd010250265f0567c69847cc03a2c247c53e39b20a52c3fcd64472bac2dbc892b88c5bafa55f50e169dcfabf442f66441ecfce1852df4fcc7fa56f08a3f28a62f1419b9a8f9895058193cf1912e0a0291211f2e5bee83e3fa2328e99e3ea1fa949d852d98b47d226d7ba291e33c353943340c339ce67e969b819288cb35df315c7496be5ea95f6e96a81b5ca377b8552616ab4a46696f703dbd249a880401492d9fd37c44f9984d57d84621a2dbe277be582a5a7a518f1669efc45542ad7b3842d857c69ce795e01a71e84fa377bbb818f8df9457332c370f3a81af065cd05d8876df989b25eda622ff1ef9dbbf04015abde1d5a9f8f4bb87206642464c5f53f91a829125b7c2acf438405da25366641e348925d3e87a84f698f66cb618a387cd2af874018f4b0f6cd600a8b9c16c32e56ee5d65adcf9415992c0e5a759ef4f76a9875e4343fab328e61097f1d5b994d8273ebb80e6eb4fcdc6060c45c9cc2a5cba9257ae305c211c469081c85f415e10435e5366517b3a6eedd05910173dd93f8883f26d6156b6699c91ba6a3aeeb87e414c2537a15290906c2d209811be60048cc6900b68dfb323a555e32f7ce818f43f6324f4bce1f0d749d45d78fcb48d278c0a10322e10c9b980b8a1b0a9d118b2bf76c6948077f0041db20ba57a157e41e5ac4ec61079cb87d885fe1729ecb54b5fe456a56e2d976ae679e53dec84ab2b7aa1caa560fd32adda2b3fa4a082c16ac90aea7816101ebb7b6c7cf2bb0358d35a579b23957c3bf414fe2898aa09f38d40a10f7df60097624cc58e83a2717293ecc7b738f98bee3adbf9247a0d2ef522a0658984f90f805c81b5abb1372a1c619f856f342e3a0baa5622b64c87604b09f455133ea653cd1b6e4aa7651595f01d4ac7c6ee0ac02663004c92a41429ae50d12e38dccd9284e750339c3828a743d283c2f8a0946e5e02f56541f16204606144cfcf06d422efc7ea1fcbafdf4060a5dc0820cb783bf458f2f305a6ff7ef5511558f6ac8eb138bcb4eee2cd9ed97e09dda338686c6df8ef2cea06919300b0ab87423bf71070d985a206a8d4c26814c2423a37b5e308bdb9cd124d7b565bbde7b0ee106f2e15c8225db12598deab2bb1bbed364719bb214ccf899df946573f96801293932038b782f82202c0947239bfb7a8195f544b34f8a42936d7f9260c3f1385a077277992e028733dbbcd5a1b96f9a5c0f2a0faa2878224e05f65c17b7fa333eab4368fb850268e5b026eb10a84268b2693d8987b8e14e09697ca086cbac2a651aeb5cf47cda9d76f84c0bb6eba77b93cde5d16432160c4c8999a66718b12ce9c96f4b5f96a6b02a6f025e247d859b53b91297156ec06277c69d1885e382728203756e27cfd7f1883b0f98b941a735d3de3937efeac62dd27ceb1d4fd02c09fc39b1598a8e4329a3db20f16133f4db841338b2bff684743fb24bec2a764b5f7a21179d619962382b7afe28427b007c4f75d82d780e9c60fbe9cb43a9487e8bd20ee4c1ca07af1b4f08274c6e2ba18f2c3f1f049924fc91b9e05639754b32969a3c13a68ebc738ba57a3110952a430117b601faaf735b889ae98281d59f4020aaf85f9ea08c9361c2f273f8fd180191160713557666e1b0116c672750fdb1dc2dd7cdd2f8ec3a506871c95b50c35378db4571873581df9f0cbebdcd552d11e588a53c88d2e3d3422bfda4a898ab14dd9ca0f2ec8dfb4133189541fe40b0c682a24a581d8187687889112702229d7724d4b7316990c67bc38f5972d9f460517154ec5c580bd4bd87e32a9988bd02d2d00e02d7da0cd31588831f3b2b7adf665804fa5bf1e26f97b1319de5e53cc6ccdb15773efc1a1be3efaaa3955b2df82e9affd702314cbb97dc47be18750b012971239bd3dfb27e39d0f596e906b5313b2c4c9cb5c38153b09ce8cd5d708bd619cc02b8ffd1798b3f1f49dbbfe3372588e07eccb15f3ad90995df8547016a3c45685eda812e5162774074b5c0c0f183b838f0a31f8f6308633a0c0b710cff2c744326a6d869c15054076004eddf9219e7150b02a33b41618e51852181f8b2e68a204a3c602475c5595c735856e548a2338831d237d97c709b0143a7f76500704ae17e86d2492f2acbac728b5882ad4a8471ab8bae304d04108fb14968a0bce582a6ec6bc341cbd4c37995ba4b53b7b53cd46e54aa0c508d6c70d5c76353d3f40a630686055ba955f542ce8f351806830a3be06a7c3161a360ab582ffa5801bc1c5508f20116b9c14dc81057971f0a69521d37ce720413d8aad2f70b45763c6ce5a2432264daeca27bbafceb95b0dce50680062e91c9f375070efc0ac04575f185dfd81e4d27d8694d0646390450c294197bcf355485c02dd647d3afd110967459e683091007d15dcb4cd652a19323086bb790ea415b53e59bab73c560e19180a79df88d4c9653ab6fb20afb73a329bc7116ab8ae7a6fef846c309166459e6b7b0ee4bbae6ba12ecd59f200802b78daf7eca6cbc6c99fdfcf7ab161500e961788cac601bdf6913848c629fe1ac4429930aee8747e969faa63f4b576338d415818e34a1e225f8f9252dff1af7ace268fd74273efdc87206091c15013b418a7e360533e28836840895e8fda74d726417ab060067e18e029b8849dc1d9971d94b89d6e75613ec497bbc2e3677c8bba16ce8d9e0c585b7da6ef54281751fb007e9eb345d7990b3f8c7fb1fc6ff73f1566ae16876931b8fdff20bbc060630166d91317d3172ef52ac43fd8055022dfc191b9a52e1cb8a22af34277a7ef3e3f733c565c834f580c74df61ec1ddb5f9524b319b34022b062cac73bb61671316142297d1dd8adccb80abb1a3a34b32a81c72224e88dc826d08b315e86e1e3e2377071c0ad0c9c335f5d1ab8d5172e27d64ecd5a8a89cc280e77b38620b0dd7d3db57ac585f3e8a79d6e2abdea226b8dc1dab7f1d7a6afcc71ab695d3e39ab9584a24bd3a5ecbf9ead6bc3a0763ff17b3b28d15e0228bed2f4936ea19e8301dcd5aad6c8dbad39ea37a1619abdb13e7740a5680f2b76fdc5b8e19887f6b5c97d214f979f5c33b385e8c9b041941557303999844ad52f8a39f67c96e339841dff717dc496c440fa91303db4c60730345f33925916dca24cf3e2706bfaa089666a7785c84a0eb488f00fac589183dd8fb98a282548502b5ee46fe0f3012f5df5bb5121e5baaf760a0af427e76adb8ec305d74c371c938a6710d566185650df22f1ab63c67195a83792199cf1fe8b5756363469fbb9a60e69eb8bfb3751765c38522cb1af9ee4f901f84628ba8d5190750820a3c1b5bdb82cca9dc230202405bfb5254bd7f62496e027dbf10199f1a20c8a198523ee3c88f3eac436e422534661731ac310482e1832302450823a62d2f86a6da4618e171b088b0fd62885007654dff341540360f0d0d1dfbf7928f696eba02ebdeebd1ba63bc31c2a71032300a45714e078c771a7200470893ef0c37af8d5916f08d9e36410e36205a0d1e6875f47f56da33f92a0c2c23c1f054c3c3acb9216c9c05b1f1cddd3189e33d1a5a00ac82a92fe72e7fa43707ee19b0c537f8a48a63180bf17f9125ccc3bbbc7f48a25da3d9a7c70b313617530516e2848a28cd818213f7e97dc078206e34bbbb27cd90d044d8fc249d75a40ebf56062b13a4489d3ec5c4a081e9a160b2413809170f0cff8c569848db10de2fd10bf6c90c1cdc0d3fe37f68831a91f7085ddb62840a218d21483d2b0b607f669f444c4f00c82640c5f5042d7692852325597a19449d74b3b129d692e41bb3e6c01805c308487990989d7c11bce02f2bd2848ac452fef925960df8d0528eb74d92ead9bca9b168afed94b41fb1d7e45f1979991642da889b6a60c05e5bb2d8d34d0002c3ffa729e936f627bab1b0c77c0a813a603cf541a7c4f4be7c09a629c9530839bd9b50dcd902ae821b64e3160ff72d3cc08b286fb8519f90a1edeb33d549434382c2d5729206010ff544b00aad593933c0d0c7c84a4407a9f6d9a7b5c2b52c48eef9f8cbdb293cc29ef752abf4b77a93390c8252f2d8229aab4e016c803107529faef58ec01f02a8565ba9bcaa71491329d1484818fa045ce3a63688fe09ab85a36741eda634048615884b2b694f8cc2370f8a2c09d97ae4fcf1751891faf5cea6ee1149683354b6a44212176f47c5c8b9010ac547fdafa6b62e7a6df395a3641ac2bda763c3dd9c183267b5fb7385c3e94362992855e39a9364a7abd41734cf6bf88f2d646dad9287391547a814744e86d3015ea315c03250518e93ad17ea10534f8b79ec7ca94d136fb4a30d5a3580a4ecc461c44ba37a54e79fa5f09c76adac3a440f6e164afda51c93af9724ec99776491f5830ab9899d38d584f8d0d6e9e9977a8e3551d612baeec93048e8dfa1a89317fce23bd7413c32ad0e5bb7aea38c4be334eb4a0c3938e46fb7aa19df6a238aef80f60cf6f5e82942512604cf2baac26a07527c077afa9f119c277d2996882276b807ada457fc55532d969fd69e02740214679e03458ca4f0900804055aef700361486078609104c079f4679305091004eca27e7f90eecd3b89ce8bbcf688c42351f0ed636b8e0fc07808af3298b6309ce212861058f533ce276ba4b7b4614aeb7933d271dfc36698a5f1196abbd5900a0a25e119780460e10b06c03ac8b03faee46965b3014566d0e090ab09e4c5f1096b2c6a46e414cf0526fecadefe5a1532f7f1f407fd29ddc16a545e5cdfc03ab8cc097efe1b1c09fd80088f0733bd21d9cf30122a6c5af2d6ef9508b6e2c4243c82ebbeeeb97e9eeee95dd5bca946486094a0924091dd796ab5c70d3eeee77e955b50fd2f09db3e66d9cadd443dfc211fcc6b2064ff41847fb16dad4efc63a5ac6d1fec5e0860ba04360e8dcf074bc933cd50a0aa944f8e6d441bde75c81714cf78c2efbdc41d33a9a6718478e26659a9cb47a8fa81bb452b2c9e936f490eeca0537addac6d9eef3c015589be40d991c33acc3f3e9343b5807759449bcfd9a1dad0c2e7b6961260ecd06049e8e1c4c0c3e7168be85363d46c0450b6d9a7a0d6daa4b0540d14e95e69f38a78aa23070b9eb7a0417cf290bb0064a2883081333221f9210c1c10a9126296c64648aa52418b181163a434e700321a6c091c28812f44064052c4466c05d3817455a3a5892640c19112fbad0a573bf15888c81e2bab977e65b2106faa0b880d270e7b257b773f4bcee542b57670df06c92326fda93ae230284c7a3c9169af4818a700631f1581076f724f281091e911dc08e761d52f8ade0838ff779df0a330e01458e4019e26ae1830a6a6b055ab7c35a1f82a035e83c996e471122b687d7eb67c9114b468cd1c412e8038e898bb9041ed0a08c2e986002308a189dac056211ba3c66fc047291d19a0cb61a742be4603d952e5e1e9f50437800038a1e92ae1822084828f05a708730b344154763084167091ccebb51664666e4b499f666a7267ffae1f9e6741478ce4999681afd99f2734a40f4e6786adc3bb3a0d94a3fbd190769ca28b9ec5306f35196e694458b702fe93e2323d3020f18805055d78045b83cdb8670b3124cedb771f911a308a6e32838f661d59aee116c3ac5dd7e02b962f08ec40d0cd9dc0eb5bb1d3b88e8c013d8fd0472ed84c129b9e5a93b8810fa362a3c4c800832d35678d63612baceed88ea446fb2f3ae099f751e4d5a3bc3d87292380abf1eea851905902b08a6f113c8d5fafb138808124ac6f1e09b293386696abd33665ab6c16af5ecd3b2a37600fbbeac63fe7410b4618862328517b42929a6229316a6d99b8a985c3e3ff4ec537ba6ec05794da827f384ea97b34865055ca9d5ebf9d686d470e2901a14a46bea31f134d93445a9b6d3ac0ee98544eb9e26df1acf776b49beb5ca3dbd2a4d3c48ba9a787a557aaff75e1e8fd7639a3a2bb046916707e7aa3a337bc972f32c39cfce1cd770fd5c5196269ed96b18310a27f08e436a3e96ce5ed30ccb9950688096e33694100572e2909a6f0bb521359f16fe78794d3cc2b967f28c7842cc8e499de2db4b9647911d6167c67417b4536a7627889dc3b04765b1aaf8c67b793cfd6ad2e3a9c08c696de7f5bd63a4579ac6b339f5f60a4c9a095696b6e353bce16e9b08863dea6d69a1ddd2d2d25279b67c28e590e7c4596382691d83c5d7fe9918701b10fef0c1cd5a6badcd16853abb7c541919cade5bdd4c0c98a12af6994ab5d39733cf5cebfad8c21f5edb19f3997c30909b1c72b05435f9873863d8c519633b6bf201d27248b5e10f4ef919fe38fde872c873e18f7b19c07d7554033c53d955ffc006411004795a141bfeb03386bd8e76c64cffbcc99e87a279f8631b67cac6fb19b88c0f3c1db72cbee93dcfce44dc094464e77936392ff04d18afb35dd7596bad9d4a9ec845b3436ee49917742a71111bf1ece8a907914148cb341c30d7d9d02778d3ab8f365293d4d9a849eaa6266ed9b296cd907af5397f3b111aea155864d4abd0a9f751af40a7e2fc761ecd799ee7792d27d6ad6d91e3d1dee7799ee7793d866c63dc928dd8a8577cd4ab6954030dbda261b251eb2973377bf5ca8d2dbbe25a2f6e0f19b593166a99f6e40aa181c6bc99853dadb5d6af5f5f95260d7b750e623226ab5f1da3aada45be360f5ffb86afb5f6ec2bdd706294b5b9a88a3a75236f2c51336d2c2df51a31eafda296bad7d853e76992f63449b5d78ca11b8e36569feda7c66cabac3e4fbddc7e9ef2e8b5fafcf42a49afd8c2b6d6b36bcea383284b737656d284a88a5d48683633e2b2e270c5a9f54b6a922a35d9483386860be89b2629d5464dd673cbbec179ea7dd32b9ccee9d5d6eaa64944a0e1a06ba02a4a50661df80d9708ce972e35b87527900f4a5fa2c08ae217f818284213434d989ec8bedb64d3d387ea0f85a299cf4f883179470e9313b7bcd71de43ff56abe0b0c79832bfd8c70cb5be9b7db4933b52317f5cdf680e9e71349412ef2cdadc138dcc9831cf4f0912b4e609c20f83805f7f4d309328078f68952562fedd0659f0be05103d5bde9fdf459c7d2865a5d135dc061451365d4f01c64169536bc0674029806824c295c5f470e387b2f85eb3d199af34d9827808a6851773b57d59dfaa7899b7f0dc4439219199f6fcfd13b1cb03160730e484d519f359a6f3733c906453c30c1d9297244d5438ce8879c239a34818a56dc88580b147d3104105b1c21a1c3067eb064093d38a2093bf0a2a65da67da65d64da5ba0ed32b47d86ca685725df8429efebab8bd5c811352bb313bc9634bf508d1c5153bd855e3111d1124ac55923ca7292a6c69473ca3abcc6a1a1c9bc3a77e7baae6b4bd1e995c682a155d599e00057afcae9e4eaf48a9fe42c8121868ab479c7c25455679b62f324d6e4bcd55abbcd90d84d136148fbcccc94a5d5bcb4727634aec62be7a66a434bdcf6d569a0acd6344d4b0169efb106aeb9436a6812ae4c8bd745552db31e84b26066a6ac1e49aadaea049a64e609a0663e1cfd2fd6030e97cc339bbf962e58c94f2013f07c7d1a7a687d75214b9d6b9aa6a5341ff2d78532868f1d7e67185d97a669da7555ffbeb832987e260d02be7a0c4d56185e60a1c9eafe5bd02da7d0921996960964738939865a376f7293a159a758751a6e5cbd32d2ab09c4c311e37c35c14d3da1f2eb2bf77ce509f4aacac4d02b6e62e84bf0b1a8b5ca50d6048c64268581aab4264cd63c421a420c1e7c61839793c91273e0c30d8844818219485153271265c1d0ab1fdcc3b0b9ae7f3991aa738bb26c5001154247479ef882a7a62ee00b590e706e9c38411535d565a84e8391236a28174d20eaa969af0ea2288bfa4be6c83761cae90412b3b44223d7ffa4d42bebeda7259656af50dce494d24fe4a7a21dc2a38c297126410543688594fc9392123e665a93069c349f77056bc05e6027cc6ac07c9c504580f4a5f5209aebc337894766784a470f66106349c29de1d65590f5aa8469fd0cb1864fabdaad1d6bc0b6205a603d302207372059020505768ac8a20a2894f021065fcace55f5f40a09ac579fb7ab7c7a45bdfe11123d426a1200b326bb8841ae242cf4b614e86d32b98e7f61188a286f7a501cc0a7f8c7604a24408fea5baf0212e0a7c976702400acc9949fa08251e86d2cde7e526271eda4a4828f0a3ebd0abd5d859f30e5e1091ebe781886a177d823ac95b2527e4305272a08a9206bb2fd0ae1d2232e4e809e4903aa00b45221e60480c5084d9ad071b402b6a9e801368965d57cde73163dc08f22962cf49e73e2e73928962c44b83ceb55d944aac830ee29e2963ceb79cf79e6f54595eeb9cce69ee73b7258f798c7c53bef9595717ae5398f49c3ef39e7785e8166d51aaf9c4d9493c97b738af7e615efcda3f792def3609e7bee79e1585a0b8e13c61b35d0ae300b2698008a8d13f83470c48629ab49a24c117148711507f29406d98b20c5e78b350ca949019232a638157904adafec299ba788380c69c55e2e9c9b12dcd0aac961480dc7d0a4e5c1428e26ed0a91ebf955726d577b457dbe06792cef12ce8928773439bfc93931f4691ab967526e148e6f260d4eaf4c23fb3469ddfac74e5cdfbceccd477d6e64d88cb17e9bb8a09b46be29eb977c73e301eee93eb106b1ccf1d65988704b86754c24724ba4a149eb2b35b825c360d4de8b4279c9b01ff3ab5bebd6bae5bc9c496fa7b596073c20bdf51ccdaa35d68158b7aab73ecb1d6fedb42a10fa723ab1ceb3ae41247cccb399476621df84e97ea149cac29ccf5a6d0da6495add9b9c4bca934b9314753ab9f44a66840a5e3f8184f0f901fc041202e75d34cdc96659d7bc6a4d6a8e030a48ad96b74a53e27223ea36a979e9726a5203756e75ea1acb1861a90ce5c682524a293ba5dc57504a2965a7941b084db9814029a5949d52ee2b6028a59452cadd58cc504a29a5dc57504a296d2c28a59476134a29a5945da3573073534a29a5dc340873a6b9f8892e6e349710ceb65a2d211c14ac545d4ef0a074c58e149c2545eca83d43b634e1c28734ea8e8ecc601acd19079933af0a248000044bad006715a01085b50c7c8078f66dbbad56cb890c0b1255c040c60a4eaa4204d1032709d158b3f156abe5c48b4d2d8076f0623e0872524188265d043959b1bd64473cfb154228b75aad96102a140425802a900002ca8aee566b3056d204131aec0a975e09a942aa103b37b3cf6f6e7610544a7b540e22f32c485481c4f39066eec199296df6d6e12bbfef3ac7eae3002e1d3b9cc3395e6978b64fdbd5e4909f817b4a79a4e25302da31fa01fc040a62a8b96efbcd78d019384b3771fe370b3297b6ef13bfa1a7af4d4ac31e1e68a7d5294891f026cbb66aeab88c83bacaf3cf70aa306740ab152cc1b99ad9c412f57503c2b9013e0523bc9ea618eedc127c4aef56c7539334c8e94e1a3e6d9ba7941d78cd5729297fabcfea73a63e65536a3f5d736d2c597e8e414e3fc910e39bfdcd46fdb43fe7acf9e634fa07f0a8637963893b9d4c59939f3c9a9ccea3799aec41bd53741cb58df3163b2543906f4eab1bf38c48ae6bfa8562faedc165b0ab9db447deb9456ec9497efa0dba25c37e72acf1c0f533207abebd87bae8db8f5c7e02fd20f4dface14e209da19f403a4dbeec8a30817e487aa01434f9989f402930f2462415c163c451b9e57c7b4729b37fe3697409523dd2b7d72435261383cb9af3e899842ef1817dcf77e579aab444c68ce91b6ed948df7e5bb7ec590b356d7d136e49718cf01c2d3969f1f9289f4fc3e7cff0f92c3e94d384a8a84952cec9e7aff87c159f9fe2f3efec51901ef4229f254b499c0c1d7de7f3b7d8db9ff784de86a8f5364f8c7e8979f4edce257151925c264f74de1af5aab4b3a39b6fb7b3a25e4d209da56fef56afca166a1cd6319fb266cd6a3e65cd9a09fba1b15ef158216ea75737bd9ae258722f1f4b9b83c2585ad90963699dbc8c2587e4db652cb99f4f8d25b7f45d632c6debdb6d88767ad5373fbf45b421da3162e4d5abc6e1e7a3441ba2170f8f51afba043f9f866843647474a4d4abbee1e7cf106d889496968864bdead6cf67116d8864444e889c08f58acbf8f927d18648686808a757dc849fbf22dacc707272827ac54cf8f92aa20d51509326b356af78e9e7a78836b3d6ec66764384d42b5ec2cfbfa20d111251125112d1ac57ac849f6f126d8866444544454f827ac564fc7c14d1e649d093264f9a20f58a957e7e28da3c414a4a22c2e91527e1e783a20d110e510e51ceac573cc6cfef449b27b3a22258af18093f7f136d9ec07c7c62bde2a49f5f459b27b1254b947ac547f8f956b479a2b4b4f4d32b36c2cfe7449b273f49923c91f58ac5f8f99e68f344f6c4c9132742bd62a4177a32f46488a8d52b2ec213b5886e886e6c9e18f58ac3f8f92cda3c316a72becd93a39fa1cd93a3a64964b0911662318e6bdbe9d5ecd5e49f3b50c2cd97dbd2b76f3c5e6e3d2f03a16d8aefd7c6e4dbb7a1de8e98ac46357171f0adc477d1f7d1b7e7e596f4edd632335ba733f073fda2acad45554d596d326dad97b5fdd3adb6467c2faab428bc35a2ac6602cd21e74b6bd4432dd4a2acce62aa963059db0d53d58e846f2f5144f876ad5b43f8f6160f3814e9e17b13e2dbcb0e089d245f6e38bd6adf5abd9a403a3edfbedd74b9b5849aeca126dcedb70bc4f5c63208f8cee21ad6a48173cbad55fdf3ad4559d37e9e6b9a53917ea2e673c6f053565ae2a426616e7ad6424d6a585c4e6a96864435a5ef926fb4d6cdc935a2698d5ad55e8246dbd24debdb3524cada905ad5de4a1a1252ab859a24c1ed8a5bb6901bf5e516ea9c6ff47cccccccd6ebc897014519715671d94b52eb0184acc28ad772b408283b495048ad7406d4d3b6c9d512e46c67bb15970e7672d0e18b254770a204567c44e85962048a207084745c272fc7cc0efec18a6fb7367e02fda0c49b7e02fde002ad483bfb4c93dd39fa9b33a428d865a7535018dc70c6b083a0575a06019f8e768bea19d55a45172d0564f396ef7e3b9a1e778f332c4b6b6dd7395531bfd5b46ddb2e55f16b94daeffbbe7162f1cd1c5aad4d52dbe43cdd5ac16ac1ea63aafacba3f03c9a715425be3975cc8d7168edb4d4343b639a85f0dc19047cae62cc3841d3aa566bf3e947a6232db79f4e858e482992c25ffca003cbccd4eac57c9263664707d147fa68d32acd31b36386257431c6131c4e10c40f807eb8399a31257411a4d31ae20708f0041659323252b4842a5a00c514562c6dc103b7858b63306cc09020497a62c415b11f7c0f410993209804818727807a0b21be7800173b3c59284145127c20064ac64531b5e0f901053b0002113e506861a4694104cf8b19a22637687df1041227d802872d09b6fac02180470b2f14c1e23f59d187a26d53355d1b4bdb1ae3981b7b5139cea35e71949a6ff403cfd9702e90e0b7afcd1cb79249b9e582aac165efd36dd2d6663a85f775d523a787644eb276d552aeb55a43fde93ae738d7eadc3a8d56af4ed06ea1c2387a1baf122e768bcb5e3bdfc892eb1440bd3a17ba3082efbc8a9da67d1c2ea0736104cf7927969c530e17c039f5ec33440fa22cad87aad863b31fa1d7600500ad01402ab60ae0ac2b908a3c3b9141e6e737b14093c8dbd310671b0035035271a27c5ac5220d34d85baf1cf71d00a462ea3f1a908a359e138fd0704b8345bc3a402ab63c271e99e128e268778054a4f19f28ba831ef640f934c9d672a81f14ecbe660c7b900bf5aadaca799dcf89f64b0048c5d37f3c402aae3c271e71712b1e49798b988aa550441caf49a5645495124afda45aa99b144e2a27e5d2523848e9a490a4785246381711054305a19aa09ca01032a06b66388a3dd583faa1ac94b3a790348ba587d270984df9a492a096781332e584452835f4f243a282282b0525aa5262ae6ce034ca67ae6cf4304946c1c42b83a9624f89f7c854b1dbe861ae6e1136707a755f4dca60d29c9cfdc660d2a838fb4d62d2ac38fb453269529cfdc260d25c67bf484c9a23268dc9d96fcfa44171f67b240525cab2e1ba46dc174c9acb738b98349fb35f175c22ee6bd26c365c2928310270dc67078e4c0d0d2faf0d9efdc27a051aae0519a0f42b666e642bca14cf6efac1b33715cf7e9d3c7b4a15cfbe02846757b1e2d94f42cf948ade831923c58cf181cb9efd37d199cc1828664c14a237a92771ce9815f1088e4c4dcb4c4d8ba7dc164711416039378920b820403d371e69194bcfe2d9759071a267f72ba601f8b94f892ea32a761a1ee4412c3d94a592d42a7695a567bf79ce89e904ad1879f6925ce1117abeaf13421f33be8e2a484a6e90a6d9ef412aa23c271e49394a6ab4e1a22aa32fbd9c21b2d4105962a2a3448f51157bd843592c3d3d0f43410985a5265ba2dfe8c07dfea757aec424d9d9c31865790e12e74119b93acf1eebf912f56568f4ec34c4971faa62ffc4975893ecd745592f4b5ac5fed2e4d95d3e50af8d8ee34fdcee8b2205253c93a923052567b7a1d3ac19ce6ec335437c49d22af696b08737befc20e1befc3cbb0735e995e7ec2e7327bd2a8328f50a747654cfa4596a16008cb48a7d68a8a8e8e8a8939296be64e9792e597a7cb03c48519c57b1e336d76e0f276e224f9782921043a4a0c412f6d89c25fc51df85e5bd11004ec52d51b0a017d829b4e95a45ce6bc09e5d7bbd9edd8a9a6b13351b2ed651e4d95903e2d986ebd9bf1a1640fb1f0ba00d704e1a979fdf0d18008ca25669ccf8419b4d282e2873c6b4b3786fc30e59e920627c13a683ca70f273e967101394feab606dd60de73a780d3726517dabb4d232a579f520a8df9cb5d105ed35d7461a9aac0e36d9f6e7321258cce309d5aaea558a5beb0c176087f8e6e7258c75f959fd136f3ed7c16bc06aebf8752027ce9f60af2c7b4e390fab8736057041861335efc21e9a0535919f1f043b7441e63be7d7ac17f6d82a8d5980ea9f386316a0ba279e184775166f93d6bbea431bc1266b131fef70e7a4b356fa3c99523ef27da6d924a887e7a6351b4af2b3a39384246b82a407e7a668164b62644729c9894ce6c691a6c3ceb226487a2a4ebd299ac5925023744729c9890c86a4731ac7a868498c5f6c6449690a3961cef153c6ea70e78c21b9252eed1c935be256cda4826fc29428ad6f37f2f56b653662b93af2acfbb925a8331bd2d92e8ac96724ca9a35ed3c6b6d2c493ad6b144690f001c4a5067a759211255e9f48a82a72f7956823adf1e22d11069924f51784a4dcd4d15753ac9599f3f1bf6601ffeb6595c341b79d6ba3c5a0e515a9c14dfe69fdde16efe3137f8cd664a2b8af635fc9c315bfff779153fdfc412e637b7d74b4795b462807150df52dcea7053c60d0889247f9b7bf3d90265590cb00e1894a0fa81e2754b59240ceb608171d0494b98a7a50d7fc7203386cad02475b273ea2c788e3296a8702c6fe7f9927e9bc3ad3e9b14fbbda323cbf97d4e33f1d6032657f4fc0eef34f9ee25cf44c8c9b7c7d04596e4168316875bf28ecef70d0eb48c326a42d7c16b9298de0ce8318918ebd352e79cbd196c6879a07f061b5a56ac5ac3fc8c69bde6552c617cb073a50dad17629f1d1c83c07062ca85fbecf799294ae73c3a86feef13cb1bbf9532df95b579d659daf0cf38305096b5f7a250ce9f9d42386429b4972fcf2ec31e3375c03071b4b38793354355ed9d6567d15271d939ce190025b825e77c33bb58d4461f2d4c1f95728ef6c2909f62aa7a6999ad1d53757481fcea759469b2bdceccf44c873d369f62992307ddb4d95463cd47322ed7a3df6ae53abb6e28299badb4e1e7388e718fe0d89a10072ea326741ebd859ea357379a6487a155dd53a8a7504f21f24d40b8658af3e95a8a1b5d20c79214c9fa757883afbd7a3c5f366966be3a9049c37ded3a14a7aaea9d77f803e581cc98ea77e99673090b93861590b2a1290b8ea9d0e79b6ca8a75cb8297e7dfe9ddd9378b3b8d4c3ef2ba99b465e115b10532aceafe2a12844fb94cac8c2bf20a642d79270fd2740595d144abcb0828c1718a18a9aea18a02ccf084750a0e4490f4cbaa8a90e84b26611be60810e39d842891c14d40cb9f1a10649512871a254a4a6a25c5ef744845b4e19102fed9d4e515ce63dc00199d7c074d3e50d8bc94a34f6edd58bc2cab2ac25dc0a9c5847b79efa37c2bc6e0903036591ada232ac1b4393ade22d5807771565502e0e43364be66727064f0c51831f245500a62848059aa4304f1d666ae31744c31f35043f678c0d38df80518613ebe0a76e35a26fc2a09cdd321545da472c5531e9151dbb869680b2d26ba38fa82aee7c2d4af00d5354613c185cee586c850577020de1e4bb287e020d11fb0934c44fa0217afe3e47e0c77c991ea89e745362c1bbc9f415b76be2d2ba6955085ce7c4d5a273db795dec56d734b79c756fdcdcb3de753edff39cedc86dda10644e37605a55bdcb61fa49c92ded57b2bbb6d6a6e272291ba53d417b390c670a4ef1c778623aa9cfcded58dd6ece713edf32b7695dad702decc1b5cbe12e59efc13763b893c90e416f9d73db4d9a0236c9d6ab83acc3b25827e7dd580300ae6b7d7ef7c210aef211f7f56a824740ef380f1f30a406e4c0f1f36e4435f9f9a9c92f850c98ffbc3cfde72cf4ea73985efd9837c8cf73f4eac77cce3f7fa157d5bfcfb9cf7e43e87c3983fefb1c9c305f83c1041331a09712254d38d12ecff332c5f36f86dc12dea2c98eb3f3eec639b250935efb4c9a76cff9a757dde8f947451caea7d47a7dfee63c3ae5def17a15b5b1b4dba65df62b4ece69d2f36410d2a4e73cdaf340bf4cdc4fe4229eb1bb699bb6699bc674738d7dd4ef916733c6f30b743b6f2f65def34d6e475ed457185d8471e4c59117475e701494521a0614dac6519a02ce529a026b99d8a0cbfe040f76b004c8892662274aa9174c58254b24d1410e70f0f3529598c1f8b2e5fbd230597c732305df5c6bd9756467c70635f0a1c10c288b569fd3ab88a2aabedc1940794e9a6c2af44d95beb7a06fdf6ef065cb742a13b986e31a0aa3b219df29712d4f878e7e4da98f4be3547a2cc762b19856a9760425e322a59bdcdddbdd5e77f3816948db4b4b6a5677b3c1e86b83d1d706a3af0d465f1b8cbe36187d75ad0da6d54a5fb0585b0a5e5b5ba84dda86a4553d3b3bd448b3b69f56f5e6b36377621484c97ce84f6f2d8d0375be74f9e609eb9c689d4ceb5c5dacd36916c8d3c9b65827db629d6c8b75b22dd6c9bec157273b8517d6b94019ac6acdcccc8ceaadaf66b4ed1c354bd396926eb4a59c9b9f9b4ececfcd88cecf978644dbf5482a3e97bda4af31be09536e302bbbe07324275eabd43369aab7f752b3b61b0a23298c24298c249bd2716b6dbcc174e072f9ef77f8b2db5cb4f525756d2e6db6a2e4ba3ab76083b103e83269e64653fd360b468a6951b747fea19b56766dcedf5353df96b4aab718a829f5aa67d270de9d4eabda87868a8a8e8e92b6d816fbee5cdbcf9664f3a13d3edf4e7b2892666d4bb6d8698bdd98d267ad533ae79cd3ebe4589dd4aaf6a599e43c365273be6d9bdbf15eeb30cd429de8ab42f16db5ce39e7dc7eb83c7594c39037ae25c51c33e28ed0070a4f47192e6e3b07224d5a82e6ebf2200c4caf98e5d2aa76541928193e41d354052d4c6b794b5928a4cb32b8ec934637a3f358605682b8ec25ccc9c600046d1297dd2241012d0c2e831689cb7e440a687b2ebb3d72d9ad1197ddbe600668bfb6cb8360d0002d0f0ab4455c76eb821aa025e2b2bf5c40db8217d0b2e004d0aee0a200beb8a46ab4a068b8a0a070020fd2537f661ecde2d76b524a69a9e2c56de7416990815f94c543d629e7747440ab603c5e2b709647202cb25b4e241928ebd44894c553d5de91324fdbcb19cfcb964f79eb65f7dd8dd78e37be9d278b1b7950959f9a7469d4e8326995b1b4000c239e7a0b54a3b54bb17962e42b3f81c000a2e636ecc6cf19d365f5201ec7e29cd65621d5ee8e50278bfa741c934547203c96ac6f9e2c9f2a76b293997981c507b7b4dfedd65a8bc42db2166cac4428fd0422a2a7003f815e49782b9eba07b83569b81922ca59c4197e12597c453cb98ab8e29ba8e22d6ece892ccf396a86b3f36bd2b0383b23758cbae8ac9d8677bb8ab8f98aa8e22771c559c493cf10591c25ce702b50220de7449637e2a96b1f129eba05973cf50e88a7ee855b3cf50f0c51fcb35e7e46b87c4848795e824bc41a9f972110156cb105f432dca24554e8258a124f9d068a73608b331ee7eb50506e1fe52ccfdea10f96a761f2d2c379ea34c4536bc65cafe20a6cc6985aeec56d694d9aea3485079d214e11c88c613f89bc223292d831da229dcd18f61453eba99bc4f274c3534709c5724ef14c048bf1dd042d52522d9e29b55f726375ad3576599580cd186e99c1e014b3d7fcfb1adc6c6bd26800f47e27c22def6b45b8a17b1817d4fce3a655db6c8712bafdb03e0f0a8af3b522cd35694eafb9b633696693e67b8dc66b1e58e4d6d8a499f1da87129b319a5b212ed55c0b7f7c0ffa0c7da4f0e0b8b9172ec0fe6cb21b2b689ad52c3efb759efa3ecf6ff4aa9f3ad8acd509f69405824f7dc6c853dfc1833a0b5ec76137a65ce8effc477f37c3de9cd35adbfccab11ffc36ecd1b9fd2efcc1ff7aeb1fd71c731c37398eab17a51cf2cef98d7d0115d1836fb16e5e7dab5a95b53e2ff6dc0a6e5e73e67c7341b3819b7bb49a5ae36758e1e78c6170d60c691bb8b9f54dcaa2359acf9ea3163392f4d5698cb236afae691ee4806db42110ed87aa3671fa58f9ea261bda4110419203d5ac1d93d034df9ce3348dd3ea5637d73c08ea394f6d9b6f9a462ba5947b763b5c769091fe14c60d88c4b099bc04b5130f168cab71d585cd39a7f5b5f16ea3e5e1fbb8b605b9df9e473b6372c854d3c66975b3157cfd74ee749a5d6b41dbe3e26244777efa37410b86618f53f745b9955d6b1a4d374585992965ca945c515949b92b2b2b2b2bec2ecf4328b3b0e09b30a58d570c2efbc7e10c1f13b3325ec87401f5d38b05d11eca0a7b66f8741aa3ac1a3e9dee50568b4fa72fca4279a88349b29754e7a7d322731586b39c50d647cd0a6354e59a349d4f6fa12ef236ba498243296ffcf44b593749b0f8749866dd49c3a7fb6745b0d65a350dc5bf6ddb42ff388eb3b6c7e75fd731b3e7853dead763061ff535977f2018863544414131815d10b7d47a9edd74aff52f25450554f14fc5a48212aaacaca8a8a8a8a8b4701f088afc9f27f27b218ac8cf3203a4e28c6f05ec147883939342a19e2f6737d0a485ff79e04f938c82a1849a1c7acea79bc21ef6c2805454317a795979adf4bcfceccc8a8c8e9a646f4508d97dbd7a90f8a82039798da58771b0751cff99341b4a08526fbcf952f3d17a668c06d3901c01836724deaaa878272fe559586ab534be9724f4e5a7befc34f992e4e54773174e3c929a7d7983ee8dddd7bd2ffff196df388ee6491c07aee33ef75f7e7e5e622f412f4d5e9ca4441b3a365c367a90b0b0f8f4aab42baf494363698816792c2c3d34945e1c27878e650f0d7d63d94545de38befcbcfc683ba816f0bf29bbe57dbd9abc3c4df27d69e0030052d1f42de24acf8a8a8a8a8a0a4b8d6d45a50c65e07dddd7eda1aa7befcbcf12ab82d4aba466a56e50b0a2a2a3a3246f2c3b0905a3375fde170a4673bebc2f142cd5aaae54d8e3f354f8a33ee7ec390ae09119cea33758171e00402bbb0400a9185af1884bca45e84b16a120194b0f0bec0715cb69d2d5a4cece92268c24797ef9a12f3ff4e5e765f6fc920a9235c92f4e5e8650bf8d8ea36d9c8d1f6cb8acd7b14906a422d88394a4b49442923ae286278ce9e4a0603f4996682d620a41b300b6002015bfcf71e9c8847e62414d9c6c56a50a7b78de89d35a6d00608b5cadec962858b7f62d62aa074655af1a46358e6a20d548aaa1d4240d11c76b5828113596c2d9b397a1d0cd85f92461b9af5e693cbdf27a7aa5a55a29d8a4b9e9a1b2878abae8081c51b0fb42c1ee0b05eb4615a48d05094bcfe47ce36e8037c21e9cafb8ae0a2015eb6f628d1a4b37384da6523c42b2140a86fa8935c94b9a7863aae554a4103463d85f92bcfcf4aa5e1ed47da1602858af6aaf6c121ca0e642456ac523359c868882cda89164c937a27e8ad4102f55059ee8a8848c9576514e32552332020000c314002028100c88c482d158284e956def14800b81a84e66541a49b3208851104431c6106290310400000c80214245431d00cd4fa821af035db2c3020b488199c7f57c9729c4167ae13ec8ba8e7ed7c78aba3f2ba72e209311272771787f3667571d5505e647bcee0cc5b2f404b66d4ad5428f65885d8ea93660db0471d452caccc9cffe9518220b3930a34c6259b6e3a54c556177cf145d9aa93c04af8d5cea2bcebabd99ddfed18230ff7d02436607688dff4b2624c32cbe297fc852456f1296c009a7a08a130232a6097c1c45f7b5060390a088183a5e62edbd57ee271edcf12704e39c7f0c7b7e4fbf987bf87dde9ad8ffc1f5a22327ddcd9eb96eac9bec1ae5d6f169f20ff10b20c0baefc1e267c74f0e1cf7f8c145508984c5cd59a1cf86ae362f7c9acdfb7dfbbcfd9ed4ef7bacebe6976b1422978006d8d83dc0c874adea54ac3604fc3086268149713e9f9d45c55a5aed92310adbf832d474f5e1cc1321477ba118f8682eb5fdab454d30f13fc23368da195df4c21e7e422f25e2f1e93598d033d292e1e4d19972f4fea7863d3661a7833d6b66e9c34483534a0a8652a7f1b384a3de8940d72757c4f9b9621892e737df1c050da01c59bc6b1529f7cadd7d70b976943137976a73b9dc2d8b30d36851c899af2dc2345a1c7d5d27b939bfa07c386c5fc28721fc4ef7f9c8256e442f6dbc2de364e7dcb26a77e35ab680260c53e826ae79f0b9b4214325ac6241cd78fea7e4559da59b177d4727d12df1eedef3216148f9d7bc0ec8dd538766e5f5a3e1ac5631c7c44a9d8d0b6e5fcffe185b4a75f4c8616f55c46c8836b037ce9b6bc591f23dc9decaea9514a9d62508a1398a78341022eef2aa7a5b2688f6225f21340eabc6df6c34eea4ef47a5dab369085859ddb695d9ada2874ff25714fea8fd050168b5dd5385163eafd90f2bfc1a6698edce6b35b053a4067d67ae16983204ea2867cbe38315ff1f2ee9c0eae3d5ac1225c9d1f7d25f38a41bca6abe48b2f7cff9875d75422ee1da2178e51ebd42e1345e29933f88aae2f372ed850fd64a254514aed5f484ea8d83018b8d9dfcb04672cf538d3bd49c4691a31131ed3f34c646e8002e516c0639a0d104ec42b44cff84c8cc127507ed5ce8046784baeee3c657c2e01eb7b7d36be3a55026c278c72c2936dbc1114fc3b4568474356cc56376d679b154dda6c675be6f47cb455f6b3141a407ebe8b1087d8071ce303fd3c9947727b825185cfab93904aea5944e3118ce1a9ef4f2d95427f99b9875d8dfb942abb179f9369631528caccaaffa51917c8689a38095947357310099e701389dc5b5909a8f0d95c7edda0995c9323a6bc7f832f89f8d10e9b0b4311f9747cf6c14c8db2fb88cd2d7495aa9ee5bae84eb514959676d9d27d4fcd50c5524a222bec2ad4e52508a2a1da3a29fad3c717c5480153e25c3c1df07a452658d81dd6e4ddada8b0f6ef16f5b8dc6db3236d79dc4a850aea83b37c508cc7e39d33e548a4d0905f4bd361c51b9c56f6013da401aefb6a42ab98cc2b892734b983e0a94940376f54595131624664e86909f45904205ff282892aa43415ecc94f7b3da0e2ca66344cdcb69516c95f997d4487cade501c33888e2a0b208223d913f7e11bcde09943feb557bd5b8a5c741573f2e35f5a870a528aa4aa98b42a61ced25a486990b3c45c6328b8f3f2745ba3a0e221db373288313a92ee93a29c9aa81fc144e120e388d8d04d688f87d38cf16ca2b6c6dacc1f03d1e159f8414412129b8a2911085276aeeefd8b5fa2be0bd2248b41f59e20187ddbfc4f04cd02ca59aa7ad78f3fbbeafa09aaa7fe0b0f353a68d21ab43c2c11e63367310d28929ffad22f0507a4814065b6076ffe5f8e711c301171f50cba8388961008815302c3ae0101f18282d91c374f70dadc8a3079dd41eb686bec9bc4fc8b44944b1f70000d7705a816d4cc7c96ff3dc0300258de154ad50a8570086e6d6031b2c7102545933e0feb9dbba2619a82a00f0875bd813e9d76a29c93fe342dd41f5dc2f94150ac49249e4f1970955a6fc4b7ace1d716e838a709b5bb17337a0c9c3ad96421150b55bf857ed00d654a913ae0975dac99be2cacc609622b0394e8753e3eb41c4317363cd4b3e770373fa2f14b98fdcbf7fd5a381de745cc80bb712abd309b4d19eec3c737a58e531a27b26b192ca4c45f95640b5966eee80f018c15ee1d62c7cd9176f72585edf8fadc1daa9465d84272c9faaca66aac246a2a06ecde0d5ea08e4a83fbd81cbb38829b0e21958162a76a0d722c4f6254f8e04d3eb7298602a7f2864b465593c82b4b9ce13ae4deb88471d0a621af4f8041eb77210fdd2844743e8a0c561b23dc4ea43c61ed966844f0907a891b11a39288e51df0040f1f84be872e8d86b277eae369ddadffc5491c0b769215697255e9f418b38412838e4fd121a82e0edf5f0ce9a7b902387fb961a24948cd8e933505036824f90463b1859a06e1cc35815dac3c2da4a23d8a12b9c1027dc347406c814b0460f813f6283a9354c7183b61320b2cd90abc4bdd0bbb3543baafda4e003b40df520810beeef8fd2ef47ace161e9bddfa24d52a15d852b553cc27b75e95d19ffc151a7efd76b8e3b8862edc98a806ba073b44b1c0aa4f430d6f35dbffd42cc20ee22fe5b58051abb7621ab87097dbf6211f494691a72a6aad76d559c1676c440801464cbc3a470ded073a58f2d7b5a3a0fb6b3ebc88859e4f637a4817bb1833e90e3f1155c05b053cceb5f12fa4d2d9a5a3b241347502c1a3fce3d9c72330a1d68009b3994e4d63f35f27a12ea10cdbb9263959d37c8f80732698d7fdc378b14c17fc9a906b60dc18e8ff0bdb575ac615239894335c5ebb9fa11b84a9c6e0524415836db136690045c09daec0495966e18ba2534c0308dc2f68cedfa69fc61d4b16d9c7c09c294c75a61853486258563e94f895e9a681b19fb47c9f42b42d5180c55d6270202a22f2d862c51708583c58d4e86e7529f81fc01f27947b4e1be5acc000dd93fa437fa2a44e8bf208eca85a33ab9deec9e105c617d03d304c1be100b326193e683990feb223cc2c1a06314dfa7557d0efa6c9cfa4e769c40e4b7c491dd95ccc13330f10a5c1663b30c59a5c9bcca97a1ef3e5fff3ff9d9bffc113b93d314760d0a32a4604ebf6e23f0eccd49c4418d6751ff72cf89d7893902079cde59710681254f2160bb6cdbbac94724b043dca3bbb4de3903bab3c4282c587a44435d2561115d7829ec678d113cb288e298f0124d1b1990324952771a11c490bc2dd7692b5409b6ef1605f0149109e411f37b2b7c7fdb61982311017644d147883a65cb3be06eef9a7577238309f8371f6a04b66aa1d4301b67d26bc50da4520eb4ac9b877ffb4351e15398260d5451ba4ed595f638e951fd16f4b8282e13e5e653e52a5879c98fb90949093c4270cc391aee7f85dc8938f1b3ea98c74f2be1982a4885dff5b61ccc98061b842a6695cff197dd65bc041dbb2c5312a4bab94bf8ed7b03113ecc4a6d5ae2b3158cc01df0d54c9babcf2c0d61eed69bc31ec579d41af24722d4ad47895b149cb72ed60840dbe115a757465d5bebe5ef9790493a6a958aec70bf526cb3791c1b70355f580fd0c609ee8eb810fc62124c27dbc85b102495874fcb03721983a897d9f7a3264e96043076252023a9c42767984ca1005bf6733278d2ad7dc24fd4e57b30d5f7b21e211bf47537993f296b8c1e070873ce92c480c917cbe9acac3d2ba466cce3b819c4b0bdb8daa4b2ce02d6549b2cbcd1f8c2ca609e9474733237c2f7b2700f94d34ad18eabb13648688f5c4fdd1211d362a04a502d7463da0f29c44e0582520777db84001e8f86206c7f44cd793a78d88e5b7e02a93ca99f9a0a92dead29c2ef477229d23a488d808e548e0d5bd6a2f95d2f70d5a575661ea285a05399efca9ea898ceab8cabcad64ee3a214ed0ae13277909be6f72c58f98b4a876ce70e876e7ef633d9975fc201f47880cf1c689d0dc6d767d98ee79247c25f5ab6600e1518f614d06c0c3608e6573000beb5dfdcbab24d8dbb4e3fbf379476d7f07de74fc72fc95b1b66aa2ccf1c35a3828498c62e6953010adbf7622233d1f8caacaa4ca66347896727c91be59a118005439c4fa27ea74eddfdcae16c79851e91829baa3e261fa50952bbf48b9b393dc8f538f2f59b01010cfdbb5620e7e1a71a8f266500498e5dbb15892d43450674a51d92a19ad27014ecf1af873a6c84cdcd25b694672627c93d418e328fa1b0971e5d77bc5bfe85441a7e709f16101ca65a345d56b8f1ed32fa26141bcc34172f40fc89e0774bb9cfd503900888ca375a881c70c84fb709ed33873f123e33373d59da02cb328cdb6c1205817c3c7be4e9fb073a6be2ec273056b35bc87dc53ece68a24c5d57464bbe10d3d157b3e81f071fe95221422cd140741605d2b82e34b546759d9f36f75cb784029e074447c77485c44eb7fc2ce776de535be2b3b874998261276f41aa5847ea8977f50b8982b38976edc2a8dd5237dc68cc61419e52f623f0b2d6bcfcf067d075e2235968d4530a28923a25b8952e530ed2d3425e4845bdc5e5025761255d0244a9d91418785d7b7cfd1dd012398b39a48040fd8e66196fadd8b423bc07aeeaf4f56e87eaf10b47f7b835f377e8ab557d33ede4055b17f27cc15098c147f024f72e3c17b6ee179b029cf08550c372e8e72da09a2139be7fb828cec9d46227db9d1ed681ab3016046c82aa20058ae24747cdbfbf2ba65252eeff29b048a35f7e8303eee6e8050b18e41ea60d0357a9d1d79c8b0e08338b80f0253f1d901a641dfafcd50c316b50662073884443615bf7211cc97ebcdd2e152ef8b186adde83fd83e0b899f80184c50f641a24b7a1cb346283c8df35c431715b4d3a75181233202b6dd745b788aaef12c4fae3e0178963089a4dcb2770c7a0061d9dd7fe43bf01a50c1cbd7010d91e3ac6f7f33635c8cc95c6dcfd8695e081ea0b73ea8926236d1aebabeb3b378419a49d396274d0ad272d1b752c7fecb8cd19d1dfdfb66d08042ba5d6af171bf36230f0538f328c45e6e92eb9731a5f98cfc0a502d846f36e13680979222e15c02adf568aecec994ac6e5df04d016a6dce31c43a1a2fa04af86397bf51d7ee9e5a0b22832b6b886fa4660113aaa7be8a7374e6a1e31792723a52112a385098388af8beb8f6b8e791b302fb91f121ec4280b28f1d36a56e6c1f15315e89889fd2e29b19c84a729e225a0c6af5a2a9ab2a2860adc8124863229765ac3e0c3301597074522f7f4e25bad6630ba7f1e72d85b46220b0e47b7a13b6755a57cb9b739ea14918756ca1c2312e7a8fa79429038f106c2792b65028a88b6d14fd0e3090b8b3b26022d4e24638ba6f23ded31f0d0d3e96fd9410d2e091041ecbd45c2300127cde31c4cb8474319025206fe7ccc1390d99755aded9b0581ce093192cf49142db0409b564859c420a15379dff4f8cd5830e946083db4c78c0824608a5e6fe4834ed9aa428e9cecfc202d39d56b33c7ec4831f33953df46187d2e87de68ac5600b66fa1d85bac5a22f73be524ce052a7e85c0c1b63bfaec3fd6019853f9b549e2ef16bc0400c6c79b1c5ae913046a4c9d4e21bf2f056c4638196e4c978681c0b9641109f0973bb26f1f5dbe3dd7df96fc346915b1bb6d160540cfb73cd72dc7fb1b5d46f466a084d490b866c590008cefaddd02012becf3f94b69d728859924807698bd0d6eac7f6df76c313191024645028bba87c1c94f184662b4c7e975a43b4a4c27dd8a8e2f29c5690fb0047a395919ee5c0cba94678d8ca62be75f5b5f3e063ac11599609dae1ff581b2f6fdb7bbf108a3cb3498eb20431a304f1852296763a7f20c33b8d1ac82c50f24221f2529dff92756bef51cc3bc563648775e89e4f264ca981b60d8b9c466f8f39bf9e44dbe99372a368f8f6bba73c131e9f658e27011de6d999349a7bcb310de161f608c1b06b5f3d1b06ea9317398527d658a4a65189601c4be410c6b52d90d85c80a11d98473b69441dfd4cf18d422d16f1c30a28b1cdb147fa8f8f4c6ab7ed5f4ac9afda0e370ba55a2de00be492fa3727e9c2575b67c9c11c67e1755276f8b0ed8f84bf80c3a6a70e1868b5e2ff1ef98463e1abd20140e0216128d2c2cfd50362060801712cbcb43ac4ccff95479f8c5f38c097c396f511022ad5f089570dec4d08613bdf063c2a8e7b4357a8c821894eed587cbccdcdcea01bf76f6633ab95768e437bff71ef8aae8536dc8abf43738d8279f9cc39d4de6cf9dfb2ad73ad072d58feb18df722f7b7e92b5a78ae92fed04ed45aace95b33e504377ecf94435abf86f0d590eba776ed55c7bcff9a33c7f23fdc5d060ef49f15372e90d921e9eda50a460206a79a256094536d1bd0335d3e8f21cce764eb2f644a0042675260182831d4e1c33193a07ef1a52da8f64dd7ac9e9e226fcc7bdee9d7a122345a4d1db209600577bf505be11b6e0a2b8512916db35a9616319ea23587c37fd4862bf0c14ed8ac54cf016e7bb841c13a7a9525a257ea2eed06fde0b115a797a6655589300f9322a370c339de133b9cf2b862d53555ab167bf943ff4de93cf7d72b6b94614f5d49fb2a4c3fb91cbfabc1bbf3041b85084894d8287dfe3b7fba8dab9c7d794d317399b026d34b7fa9bedc4ee2d0bb124269e52b5f710ce256e18b99186a9f9a8f574952690c6ee60f5842d46ad931802d671e0591788c3f2d8bf61629260dc8cda4da9449425bc2115bfefd8e9ad1d24909f3a042a5b6c15ad2836b39a3a71b527dbf164db7a033e4311715287abc51c737f921d34f0767a5c7a8386a3558c289ce7f0f147d578d8064e773d6272c7546ccacb9ae056f4adf4d41e4f549698c03a43a25f551bade5773b66e330c6e05158b453eff12c29b34eec2bcf5865342cb8df27cf9ca133782675e2bbe8f9d88e8c23a2327c456751ad473a2bbfea782569342d1586a1c8e7b9d636387f017813e1c54be2cc777ff9c7f2492aadcf6f0b16bae2b22dd554193c567ba1d585e7aea84b9e709c25385a876253d595e56d290f642ab9c9af2c945cb1d886e4f1c80345592ae48c0942a89e61f2e34e102e11c7310760616c38931db254f30c67f483e6cfb8e2fc7a88737b40e62d8f6f73f9a47a2c2a7a1e83aa25d1eaf2624733eda7db1945694da36417e62f2e6b10c7594c9f95012ccb3d8f3170d4cd712cfa038d6712af42f94a8bc78298bae21083e1ca3c592e843691a966d50d370e5c0a80bd0f7983ae986dc6154a60f2566cb68e5f008039ddcf1ab5e954d031a698ea366bb6fb38dd7d1d3b3190d4c4c3ea10cb461836a1ce02959095cabc1f30c92b36bc186a4a83f035acf0fb5a5b8879dedfc1324902cf11559dc1327f8d95dfa6518599826f766c59e42accc23c26c1be495bdf4b9cba086446adea0a30ffb49f31b9718f94868b25a17f75e3c9b516d86afc58d529fd50f5eaf317b93563fe4f7b9c2d813c43ae1f6daab5283d7d09345f5764cd3658d63013cd9efa8734d44d9522d0a0fb19e4e984caf12f338d675f986b05a6db3f782fd3d3c3861d65f126e6d6f864ce020629ff8c42005233532815d7c3b33e1f363a15b120cdaaeebcb7e8d5d2f55da2c1e83a501ef06cd09f261d365dddab3b905ac15b18217d9ecc55bc6bb28c66255cae3704b3071d812218d744160fcb7cf215580ca889261618a977098240683c5ba458285e8a664c16e6a219739984e6327a0efc6ce40a8ca80d01e9fab7cc73c656717d2328bcc2d79d776d7e0aa4cd6b5f65598175977ce2dd5cb0ca12295141c5aa694fcd1b59e4e18af230e8cbce4306ac4d53c1f4a4ca316c3e22475dd097ebf4bec97729a230de3d588fea5ede749b345f8d8006f1c15b33d26700ee4f6a3da04e70c736a1caba4dfcab8a3caaf5fc95e632efa2f73fa833f7e7433c1c6ba952835918268e7f67d420fd841a228738444d43147c04a131ec164bda666cf2c9682946ccedc4c87daf4221568e70f41386c072a62b70394a2a6678244da4d6d6011dd41a06d7c94e766b5805bd30f9c6dbc0e5904fea04b9e2542dda7b409117d0b1080284051d491ac2f2be765d5dd8fc0cae56c58523b54c50f7ccb21badfa58a9296e089a96efb1553af4f3a1bf7ac8f356e72d7d1d5cdbe31287ad254f6c0a928f14c2392a289214bc304b460bbabda479b3b865bb075a26ed4310cfaaf8620a5905635b61015a14c54dde3d90a1f7eb62a60280a18942f6c4050c53ab01c7c2701cb93d00a227a088097f462077d211a7937cacd0acf26761eb1ff9531c5236db079840a831ae1712c1ebd51cd22a47263b56e68aed435a8469e16afd2ae9d6cd1f3d05bc63126c05a1613ed84c41424e216178abeec10dc887530fd35d1b03653ac7167a15fab8d8a69c2b1b3a7df430ce5236b842905f576c312c89cdc731d73430912db11262fa7703b4443800beb481476ab72e62b260a28ffa9ba4a7ebdeb71d424d580b32409a79aac2a974999f7bf44763f77014ef73a5f0bd61263d354834f40ac54f7fe90d30146dcc836af2d1c0204a3046de5f24a76358ca85c2a4b6326e4c0729ec47104b3a85ad4e609e9c2c067ccdd4b35ff6e7252efc19908448ab343bad7a66b00f67de0104e5a5417e8d636ed838d4267797ce24128d48479d7eb00a36d18fdc9a9be19ca6f97d4e15dbab054e4532c4527a8b5c8fb232faa69bdbcfe549bc185ff46d54a73911c1f35469d817955c10919973c6d0d91258a53be3869f3199e670f84f03b48fd26cef213c980d0d919d9106a4935b7c1781500fc1abd78b17585c747765fae5b0d47c1a1d07bb3e6832fa8d1407279ad1f6a9656c30883576a5e48a5955b570aaad351420b900bd2bae90465b4c11f1e90a36527349bf1c5fbbed7e00e9ce2e6004dc7c96bdadb12912f8f881297be6512c07d2a46ac136b27e95ca791c1ee0315684c6b624729ed9099193d3c261ae17fa1183bc318f0b686c216594db04ff0226ee8dcca0c24d9a652280772d289a58b0d2fad2ba7114f7eb1a0378e8a73fbc3e39f33817e84dbe7544c005086a9d2703c26c5bb95fe416188e04b75bdafc5ca2b13ef9a8610411c4c274c90faf0aa5bb8dc0dfa280314b2002142c4dbad1bf67bad06aa526ee084d86add77e4d9619f2cd15ea206e6fda5a0cac1a27b9029d60134dc315e4f607c1be40d81388f6098a7d41643fd0ec0b22fb0261bf20d91b28fb0591fd40b32fc8ecd78d32b769c1935ac9556e58ccb012ba0104aee8b15a229d07ba992a17d742e366d7f524c331b338de6cbb1eb28e6df6c6ccea58b3ea5ac876bc591a3313af1599c660b3d6c9156a5c18487cce7a85f0c0cf564e820be4d501f411f3a9deff177db8a686711a61bfbd2308ea0624fc3f9dd3d9a8baa85b508cd5bd25ea6784339fa979d81ec3f1725736e04558291326d81ea3a9b9cc0be7c100df1810cdee56dcde2ea05afd84a1b2ce5e077a6dfc5e78f990ae18ff97837765300240ea4a6aa0df8f77be8590bcd72df4917ad133b147b4083c5737d7dda2ab86157509ada78272af8482ccdc277f32da4deedff2c76b0fdd5af7c5e2ba5c449fa90cc0fc74b8661c51eadc211e96d778704ab2ee6c3df3107df4865cddcc3f3122ff8a06a9d2d62d179399a70f1df945dadb78c626c661113803ab379546d4758e6802eaa8f308dd4248830aa2a83692114b79db60e6c126200a46ca138142397e43677045bf301198f6c0ce1c7e373a141a266383215772a695001a16b3052fe3d152e495acf80bc22d9c773e544c5c8dd33374b465d11adb831c393faaad6a2f23258be90a5f97619c21def67d0c7fb8741d9c37188fd63bb0a5862b3d6d0da8f196baf6ef98f56f8343a085452e9231f4d7155abf82972c425a4c09fda1f7b67f539e8d0802e501441a9e081bb02aeb277dbe2854f0400b951bb20826823cbae3d20d8b692327125311f59c6867ab8a6ab8a050a200d4ba9ff17d724a727416517d95877d16dc0718e49c5e6ec68059bcecb0ebe338d0a266771047811574d0e8201425b6d9653cd0df79d6bb03bca614a1eb36e2e3156179674ace02d8c76497790aab00f1a7d532232e2d538591aaca3c9f8605d3deec0d9504b2d660b20f9ca628683b850baa1d42bb7b12d88b7893ee234270dc7191307a55c026cb053fc2e9981f130a4a9a0823e19a473c380742d218b8aa6babbfc912a875963d467019f4ba88472698d3d00c9a6d24c84a701a463d25b3d4a63fa4ef794268fd8be91a39230864109a17ea1b29e033dfc6ade1e1fdd6b72dce9a31f8d7ee7df6f7512771ff58f7c3d51a594d5fb28ad06830639e54819634bda90871ff94d2e809bed61e871a6adcaef6b63c6d847616ce6da17a5899adbce888d1667350e20638cdd1281e6ea80a0ec03e7c727471a2119a96603f9a48cbd1573fd45b21bfa06bc2ed0c30a5285a887a9b658e1eaefa2173e8677c1662f3d7985f30385cea6fa5329eb43a34e69ca63c31cf19a174275f28970550f5d4a69b31419eb87ffeb7062a2981d4d25c50037124d71ee22baad0f527cc90e33acb10e536c3acdf0bae1152a3c44a0674acd01050d59ea5071d601022301d9f9e27919ef8c7809452885cb2fb92d31f779c2c80f57633cebbb42552b17d7b238e0408bf365457b318a0bc4b75b21a740991cc6c2b7b3d4996a3194768d9b2683ca37f6206d23a5f5c6f6a163a9138e437199ab61c86320427a8dda0f41cb4c114af8dcc01b08831121779c86f50235d0c5d668b4a38d98f61535f497dff7b1cea5a0500a276f43c83a84d8c88683b40fb71075248b00657c587df40b9ba50dc5172012c7abab1602746faad49788f02262a5975506ec2f7421728cd030880d9050e40b125bda9460a5b51173295fdf93ec4fe92dfc6ae207f97ec97ff8151a09c7e763e97197deb90ec4d2aa531f1137cf4a539b520fcfc3f79a8a5228b115708292c74513ff762c20375ba5cb3e0578818c6e29b5019d17496a56398b8088db9b12b16de378d87b91401b86f9b3d51fde7379d985488f5fed441f28c34923d07fdd14e44d86f5c180bfb235fe6482b4157e6e0d34022e7843d0ef46480898c0bc84056fddff126ea3cf38f30cbeeabff1966576f39f2fbf830308e96e7f42a60d95003e81aca68d45e18b8c6efbe678a7f2af26e089989e08941086a4fc4bb21cb559bc711611f247d21f9a004735adf9a108a1be58a0d9abb859499d475a5428bdbb60b21d4fd988ec1e4ee81937d69bce040ca75fa1c5c7d993c07b4c8f585295a80676a5ada2ab64fb7251204895acbdaf0a99b58efca5394f0836e030a5217770d46e6a10024f136e0dd7f454ef94dda0656e7c0a33323873e09217a54ca06175847388d96573fd319ac6425cf909c9636fb35afdb8cc42b6b291744707b41173580061314a423b67bb72226fff378bd49406f0206ed8df9238068a3f6a5e1fa694176c0a516a59df32b930344119eb31e7df281efc99f15ea2c070a053dc21cbcc9edf9cc3e600bb875ebcf507d6195121ffb5ad4fba89bc5737096899fe14d5c78cde30de54b6b4464c731b331e3273e24e4d2e50356d01ff933947c4d67ea97cc3539eee16d8f9ced3a86e35bfb223f0f78bef67fc4e1e0bd3b0ee87c37e79faca0d01131e47699ea49be091e2711b683818057557c944382deccf3948ea9956e51402555e0005fb5fe2e02e797d863f49a81e27caa0481f7f0577d9d2379f6ef51b6ea32e1697ebaa06f4088f08052971375fc939c6495d5e6373da973d8d424868f964d0e92eed3fcf05114c1800b5b35ed77fd7ac2cabe32de758c8108d5d744d7188bfab6777947de04b68d7805121c37e2c4cf18c33b26225c6e734d6a9aca5b9d4502cfea271c470d26167c8046ae47059696051002a0c24a82f9010e435aef51c83de7a321164e013d46e192ef2b75589352775ff2dbc234e4d0c20d410dcfe973a2deb1005a068e473fee58f114449449a00a83c639e66e5852983067ab3c2f5b3b0160a5b26a45c7ab163a0eadf0c079506f0cbdd1bcbe6686d0a00dd57cf620b9b5f2fca2fdbea224f4f2c43f438aef8c4833b51a16ea956720de24cbfa50e51ea42ac3315eb4dbef272e486389fd69cebd187ede89e971fcd47c9f678e1decd7e9de301c8e0d52a0972fa8f36faff961c24a8aa49e2d56a9b538e8c32b7035e2f4fc9818e1bb9291d213f20f1a15f0781be392df3616a06fa824b9448514e449586225d2c557d0611c8c3ffb78a84ec11b975051d664651b9cf709facc4dc9bb87ef44d08580aff59fb13f830bf828b24103e88435984f14391828ceb90c4871eed840098c497ad11eec43252b1786eb4e2f29a706a8b0a7bd524b0801229e53aaf36e004d23035ad8a298158263e1c0d509dceddef279b9b53c836b6721a4aa646f4602c3080467b2c0ac29d292094446b55a086b2c35c86385bc0a5b2991523fe77ce9054b9e833f90a6f7550d338fae2bcb022d1a8cb1923c50b9e0dad829e4efc6cd7a647daaafb00828e2e7ec9da72b53c89bdffcbe4603a5bc89efcc2e32817c4ff5ae698f50466fca07604a5f364c06f5b65f1f38f87ab2b4cbb49ce16d820ef249586fa5ae2b4f45d4766a8f713f89828684a19800af1513ac0ee442b7d66c3cf1475cb07aa240c0612d95634eaa0c4c63948554d96a624ecc3e1d807a34dde3b4d2d08dd50819e070e3404724b6af58d4b9a201ab2f7ec2ae55a02be247b083b877078a2fdec12b809497726e3e3c3edf0d16ddb1323f0d31cd0b0d62c8f7a4f106cf9744db3f2b19a0cc8403c66989031e12e6a4a130e0a622835467c50ab13e2bb4422c0712b7bdf0de2bd26de21b4f1e3f98e4c79b9e089d4472c33de2a29419e2882023e07c25686f5a3daf93afa645934cf5dcb0eec854818cada4e2fedda6cec3a63c73981d5b1b597138b23db89a1b9ce84ca4461fb0b8ea26dca866cca2131731930aaaa70491971d2a610ecd0546d53c6b6439f660f8a1dd428cd6c081d57c69cfd0e7d3ce67811f54b3d77ee46aaa4ba9e1bfae24e7fff614047b882e383c42c412c5484c3a453ee86f0dfe564bea2714c2691ad319ce7ced1ca9866ee0325be0a74f6edf7b0bb20a72ebce2f745282e8d9fd336fdbffb6814388e14e285e543b50c780ebc4261d94285583e69934362e142d42390fc4abfc343b8851aa4eb13b1d9516c84deac1894c2314f09ab76612f5832f53933a554d16ca4dad05153dc153cbdba1f8b9184e62c018d351510cfbdac433a0ce87c6cf72356f75e71ca103ca1465fcc242363a4e5af44685cbe5205f80e09e9d4d1d74da8d1e1b6a206bec126831d66e104d91b88f5e0ca8dda99e4a2ac4a2e3f1e72d5219182ebb6ca8e1074ead6b734aed449bb4aa4b7a265e3385449a4202450615118c1a778e12413e84ffc1b61e1cf4f2a0e74fa58ed033f56f716710efeb4ecf635f7c0f2cc806b11a9ada66bd19fa3954c0a95d844643628181ae887dfdc254a25d2bb69a1a504e5b86fe6eb4936eaa3e8ea6c8641a1a898003d136e81d8628826bc060bb649316d9281ce7e6306270c81526a575f5dc96915d538cb769388abd9a6ce800c986f1e988780cad31219e7e0fdd74b8ba031cb0eb796505151458819edf8238558e6081f5c87276336998564217ce4c5731cc945d1967f572f925953abb4a4c15d04a03551b3a0c29302ba3bf79429dcfba6b7e338614f231f8cdb962ac94f2ca31be266fdfe1e56e72f050e839306311de42dbe2c4705167426bd96f481bedb07fc4393d0b739ac1c2f6fe2d5489b3d76351bd10d8d766b99725e278c5e8cb24d69ae8eaa5e8fefb2663a6af7c23c0200993395c7f07a2af4ceaf1ce637a21cd670abe95a18c50cf4d06fc3cef0c0a4c8e77d8bbcba2f2855141ad5b75d057414b94e41e32879af0485914e6444b3ea1a13f5c450dc18e41024ac83e73312d9f0db16dff06d9d9e019b3a29ccaf89457032e79f19b151bf4f6004ca94b191750946963a46c25aabfde2f573fabd00a4fae278daa8a8e07453552af7f366522a017436585e67da1afa555e219545cb70446a53671a1cba35f269dd1e518445549b0ae1dfbd400ffda0d53e511003458120c509c87c42bdd5149dc460e0f62eb72c5a392656586df173e780c3500bb6a8d683a13c36d26278341d3cda6962920197da36e0265a11290ae5c02532ec486d05362eb512a7e9859158fb6454daf4d7a44884464c34ec504919e82e76dee4af1290694204b85c3710ab826cdff5292d01488962949bc34611916709302aa63eb910b167c4866f5ad08d9b9c1fc79ef82966fc6058d1f3eb810fa2adb64d4991d4b24959890781d7fc0d261e06659e528a8250d5033d37e143a3464b4a9e74075d24b9cd753682e23851165e458069c2fe171dce9b009302e402e305fd3593d1a127c0f2a9eb419ac8d06e23dcfc02daa3c1314b549cc8ecbf71be4113976de4ee1929154c705c368de0d1b88c0014a8bd34ed8ed133f235b5cfd8b04a6eb6e274c432bb94ddb381898718e1980e492eee7f52412710323a3d636a89a59770576a58e1ab81ecedc143aea7b6864533bdbf887d892480324036b36b91ce07407bcd007bdbc5ec62477260d9e1d4fc4d24663019f67e32dd55e596bf709577b50eabe11bab46ab1c060804e7ab9206fedf72fdaa843446182461deb8e860cbda27833ec40202039b87090825d7f3f16a9d6587c597beac04533b031baba56809bff1329470ce4be666ed0a154626875a979d867924b41ac316a537a1c27d6e7faaf209d1a10e5f589909672af375cba7b2e59d42029551bcacc3a4388919bab9e6200906ce893d67b56a293a04b4ac0a7f7aa75e2a61cd236f2aa7f0d3a47cbd3373dea894300b162f552ff555bac4dc87c2576fcd0d704d31e4d2635dea13be56cfe5109e9253b6a6723f86322e42d093e645091fdf42a7633da6894b8c692aba19faef6b65d5192872fb2d05ea1842e7f435e81d669b37c18d973417212cb875126021af2965ceb704dbdeb7c8f77a5dfdae61a8d12a1036bd15abd2e4f4a1d6729757d9f46e8c456713597221d7cab65de44041794643c755d351c1c540ad7265c460d96a2ff5083f29eae4ebc760212a65523e6d62f2033b1a93aa8565f90ea037a28a913a4ecc318ba7cc8a41c1720b0a3a4090d48e7d2e6364f67750df4e4e3ad71b731bdc87cc4fe1407fec33fe8b27aea6ed1c33f6a08d5b586d4f87915250e8097e3a80932847ecc05402519b656dcb5a9287e878ab899b52802bff73e49f1b57245d710534b234f1d8ea5ed51d54a55bcd385391bde3cdfe9946701852bced9406b8c9b28e999a0d83ca875f9436f04941d36ae78cd8d182c93daeffae42bc1fc1d729cf4df15409618e5ccc6c78278c7561d07d748ee13fd0f44a9b426648f9eb428a05c2831496efc713a941c1bff79aae24ac71ea2310163f3b388b88d586767dbda134431a313b89a11cdc954880b62bbf08931b585ed5e0084c31cddb507238de30c528f0c14281da2eb6c2410118236ae495a9bb9e5168d2277689730c42a992dc979beb24e0685b937009bb2295ca49a6f2beec6aa59e81e409128c11d35a5609fc8b188dc819578933bae598c417184f441aafb9a18402730b249d5b41bef7ad81451aa191232903d0565fe09890095f32bc401b33d076813167e1f723b06b94da63df50519112989ce468e1481c8fb7a5f32b1a6a194e6fd2fa2ac11f69c9bfe664b61eb298c9a083b038c20539951caf1f03f51c64779f85d55dc6036a0ad9500a1a01c10a231f0a70011f55745a4626552b5fce6908b1c903c4041e9806ca124c9f020b15225d15b3b86ab905e123cf21094f4b34a92bc80f8715706922454a234732686122338a59b1fce116191e707f3c7bc54cf174c315101ce5f103a2916afec789a3aa45926efcd499466400371bfeca3d30f62e1234492f6a332f08ddb6e213d57f15b898949e56c4d08d4d7797ccd16ffa03e866ab0ae6315c9b388538c150fa93265979c03690c35b02465145bdfee0852e62c62928a4a610cc11f2646fc1f9366217c29956b74823d81a8decdd6c81526cf9e062ec6956d73d180ac70fb14d7b10a64ad629c1805da406da4f1910cc8581985317123e235a1b2864dd5be0880aea8a49597d30c0a1b0d26e178f6a3d0b721a94c2b53fb03c66ff73193fd35316664c53dd7dde5f83ea648ccbca1b0ce3a0240978dc6adbf366700a8e61634e2755c74ddb02abf289961c2fa538a8a8884efbce4528ae456c8d34d6d3fa8284838dec89a920bdc550de16f40c2e0f4a00230a836dff8c5bce782b5c97a00c326e553638c9c81c251a89d9d69a81678c1d2f2bdbcb714468288142490eae582dcd75c77367a32b0271829a2f56afcdbcaf81dac6f444a4acac44ae39bc51d15cde5347d13c324bd2c857cd301f36916751056c654aa03aca84d275c60e4c98885bdbff8d579205311ce82b83829b3c5a39c288058294b45d065f92748c7fc21adf59acbcd1979a98cb674f8f870aaf3a0c609131153d520e903e99aa6a0413491b8d033c03955c44b5e413161ae5985ec7d1c02e1fa86383b42654e27dca11c543d924545c76ced0cf6a70cd4e653b42cb39a42353c071208e009a0f75644a0c7783c6b348e742c471a1208567e7ce28f7c118c64e029de120f9f78b20020de1e4cca0370182b21ba3be6e60f67bc3f716206b28457029f73c2128af8cc3116817cbe2d6f1e8ad04b44f8c3805b960f3cea62f53d0a832d1fc1fc2d48865dc8206e0c4f7222573d19cf1ea49cea0afe7f711549b51bac804fd7b6748b695a4cc282f4888509a49bfefabca1608ec47403032758cc60f2c17819767058541fe670935c1ef6223206780f371ccd4a0980f428899f99d65f555102c9ca220c075f7d60b752004caf0776fa21a0418d48c1f1a83e559e9f6a3070c649951a65a32bbd84a577d299023d65139737e03e865879f2b5508d2d1170aac786eb0d088e36e83c027562b86aa3e0da1208c75bba19a1fa1d46545d4b23baa5c5886c12e0a85ed7919ee1c0d51200a7766438e813c1551d03a7da35f61809a427acbd1a01a3ec4543072863de4e4dfb99fc7c271ce56fa31c49e0ecf9692ba12e5ee8b44043a88042bf89ba20b06f57fa1c04fea51a44518876460e7100f6976b91fd4cedf6522d44b5eaa6502c6452d0193725e13f8d9a4d375f25c2b55c3a6f586c24c06320ff9d96d7285e309f2dbff53948b41c40500d04e217c4d962f4aa592d3bef8aa40b070d1865b4d4d598fa09fae705c53a8746f9f711a6df239042857b1980c862054cf98eb06208ec5409682c082b20a2b71bab16050fadec7989036c4ec4005bce6370702ad3bb6872ff4d94340cdeb41939b7e73bd0a55ce7c3cf30fe2130e5601f92a8d74a3215912d1e60f669b0845070d56570949170624c4ef0a5768a92cf9a4df6cd0797082104facb40a40483641805ad96bb22680001cea4cbcf596c17d6c06fad0d39bb8941d4c4f781232a47c67fb652700236f67d085ccf07bc26fec9988629d435a56cdb29cc087227456b5420ca66958d6465c98a9b26ca1f397d4d68859da73dcfc8cf0df9bcf9bb5e225a57ed92e466dd46172c8ff7212c243202e5e50bb3113448845ae604c11a31bd13713299f068060e3b7ab30293122cf023c776c8840d028d3b0aeda94d409bc6d15c684c30f3f483265fdb70b12b200d5d490ea12ee921878fc393461d153a60187349236ece665e9592377c9b083d063c30ec2d19a3106f0414cb083d7046aca98e399a81f19908a52597d6b0c75897b990cdbf8c8c0f518f30031f303a82805b0d38ecf807bf849563bfc4f161a1c973ba43067d402a58523e7b507712c515eebe5c28b3933ed8ef1cb2389acd4c774efb64036b7dd77254808d3dfcb2b0a1ce061fd5e998d37e88e39de4b0931abe7bdbad988cb4e074950b673ea662ddb75aab68f3800e0052af83aee42b798e1e5e60e3a598d1f6ef413179145705d3c2c511bbc943c689581ae3aef1c5a21c0ac040738e57885aaac78f5f734228409d47efdfe6769840ba4dba204a05291c939ff816cf8c52256e539332f2414e9b24fdcd66ca3f744ad34aa47cd8087c96ca0968fb505ae0fcb2961c6ef64dd783b4271135e521008a1d00ae3204aadd81978eb305d044a173c0b76b24f13ee4d05fb1c620e61d21047d6e9dbdc83377892efefc3b8904cc1a168344f86cf0c16da3065f5b3d5409c968210c4ab90f8af49050b68bef13129a48ead9aee050d681780e9622b33f5a78043b3c5c40b7a27b280778723e7c8e173021ce8812b6052db0c5d8e42f6216bdae25e2b69c1446a0b8a47fc8698e9427191e282911271fa7b5e759ef94a19120a7716a4e5300f14f45441d296e89e3cbf561ae3eed856a4869961ca180ba0330c1b82c43973e158ac165afe95f16076f834b0305aea7c6e21a927ecd4b1c110fc55d4a4e6ab2d293d85ab8d8f78a9cc521e76c04013d2d00ac4011b1ea4ccadf7a14716508f0a8c6dfb9d2bd00a462ff47e986aaea0726d71e0751788d004e9addce1d4d12140306311a9d910cffadf26d172a28dbec469a4b110ab2842098dee7bf4a00f49dd1c16f5a9a2f9b8e6c76b35618dc715063d90b86599c1fe2adce5f5786b6451223f0dd0e1c6b6cd0ab15e787802427cd8f1a80535e4287c40d3a7b5202c15bc7588c2c984403f1184a652c46c2210d0edcf49daf05ecc2e5d5a4f38a800773836498a7124f75675872821e184956d57675bb95e1a70c01583850903f70bb34786920b69fcb6e0bc2c66ccc3b3feb79926e14c6ef465802449fa693a1ac9ec36d2c4887e1fd8d402bb67dc45679f6c70ce531dba4f09c4ec2ddf294c1f7086f3c57333c52c7fea1bc6b43a865a80f715e8ae38b19a8d4000582b554c00db9a7b58a2280d2232c9ed4eb92b645be7a7c3a8ccca4a5e64adfb50a9e6b5b6dcb14431431050029a717226ebf2b8f08a5e698286e5fc3ba83a25d219a94f12bb03c31ca64ecb4f552c2dd445c9940e67fc474bb0c51d42d805de6b1605626f20367091b479e9d7fa24b966920f87dfcc06ea31add932f6687781739203e9d1920f9ecfbbbc9ad2de98b9cade07d6c8327038592b6841e93a911c45f72d8c1a7cf1669515720fa3e3b43c7bdb68abe24f93fbff59b6331206972bd534af62bc702802d11153c5d24cf9b4bd6a17a6564a431a6a49630e907aa057a7f4e90bcf924bd89623bfbafd9a8016bd9b5bd7d26b399cd9963b6db7dae38d306709b7ff019418a0e18fa74fba9cac65d528f6a425392fd2548d1c212901a1bf99c6f143522073d5a7995a53d722d4ba69ddf88d2564308711096b9624f511a49969e80a9853f878845b289b30e3ff186b15015c6ac581179d2b65f8b28647d1cd115f5b58cf05cd814b105210e1285177e76c807950eb83c6ca0bd57bf05979624f22c53c9db283cd8e7244147d9975ea837d62a34895efff9b28293c53f8c4ab75cbb7a887b5556bacf0dfd6db95fff49af4d220632a7ebebcaeeb077584ebcddf088a9ab4f31b17da217ee6f78ce66fccd554dd0577cc3459c88d037fc8f979fed95ba8550c8568bc264afee273cb50ae6cf5be292c533627d59997f799f6fa66e85fb10241fcad7d55a9cb36efd5514fd82076c6068c84ecac263794ab9225d1f21ca6a7a04ed7e56a9ab55515114e4b3ce89fc6d6c13618567f7c0ea2d4c0d1f7391615e19df6408623100a807c064633efebe1f0786069dd40f8195e734a178c2f5010ef1c57f299c4bae14dd6d2ad176c3a05045e00a4ae0265ca902586241483f46f13110874450e27f60fbbc2e971a4cc4bd32f951b07292c88e880fc8bbda0ba6b37afbaa28d90a4937fa78e966e3b43767443cb46e07cedc5f74f8f926615d51c3d03f63f0a50e80fbe7dd714362bb4a2d6c8c82e5aaaf141bfc269c71d2a001fb913dfb5a722950d349ad9b46056a41001d6ca427e34202a09a5fae8d75c1c1b9882fbc820c22911c3af59dffd6013216063c0159a24a87c779dabfe8325aa26493379f902a7f676fa0aadd424b60f5abe656a071b830943e9d7d6e2003e2e0f2a3143eddbfc08410489f8f51281f696523fbec7b8a50d39bce97da2d66bc81138e6fb072fc5aa6e393eb767c816a915f0d74fdf1bc7cab5bcd85d540a50a2ccda0383c5a1e0ec35cf9ae226fb663d8ca1a6c15dec50dd3b38087a7ee45e9905af201194b2420702eb80fd87344b1dad8aa89282d007001523665c450c1cd78bafd8ac86a60945fc691455b934555c9c625bdc447a34150665928fd4ae00074e41964ec5493cd383f3920274feaeb1b3d235a86a10eb5667128425588c81f5f169e9c9c2ff9478c273342b669f6e712d9f540d4dfa8349a3c72e034c95af86d4b6cc91aa08976eee05105195e53615a3061dad2a06f6780cc521f37af25396c6a305a2e17d90fbcdd670445cea5faa5c128e714530a4cf944381fc0010ce7721de474086763869200edd67f208583d303b426303f3742ab5b15bc03e24aff4fe61ddc7d0f00fcbe087001f2015894ad5eef7b7b68d25868d21e4437e31b3f78ee8025041f6a00a705193185d0eb10c95b49025a2e3befa8263583e3b35d0633b31d2e3f2d15cea330b88095d9e41f69ad7c85f07d2cff5630575f1650a80334870d925086741f7cfe8f6b5e3e31429272f4c169c1f095aaa0949a8a87b75ee2cfeb5010a1feff65c4908c94166435f259829a015ae32b1f3b4a127524fde76fe1698fc5e3f06e4af8bb9c126025ffc0ef30f7abc62305c8c3516f75786c03c05233e2db471c494f7d6ef9a5f7849e7e7b68997d16e27aba8f8814621035f375b2d9075164f59c2d985a16acf0d2bfe2a3f76e29e4d848b092ccb71d1799535ec2b8be6b33fc6365cc11ba6718a77f40ed8c2ade3672daeeb0eb7d1794be00847bdf62e3de1877a7cdccde1cd86e1c404465dd212bc924048c748f4c81d9cd0f394434d40cc9a40c37b8d40b3e916b33d47ffaf6067dd743a1600a8b1fad8083a20a7d1071874989781c442910c874c567f98fad131532e37c4abe6d0de130a3188f4f97104be7c52e31292726b089e3c4f3dbe1b0a1f732640922fba96ae0cce04f4281618ab05121bd324c08e8e7c64b58128270ca7e9a0f0f0024045b761f5a80efc4314dabc06a9460db2a10eda518dfa059580f34fee598838ca8e0e6779177dbfb23eef7f0cb41cb82880ea68388f098c09d8a10cdb94477f9c8ed1b47378857886ce58f41d4ac6c562fd9875bae4bd382c1396818eaeadce8721800f1033f03432979806a1303134c901d461b22549147acbbeb4a94d90bc64b8988e0230593606b4da359b2cc56308af25a325ce55b62534a9081d43f325caede4253c093814aaa987f808c7f9070252af21a4aea3d6e7b364742db9dcb3b0052368752c857961be7b5df0388b3d4bcee138dda80d03007fb664b21f9c01e962f7b5dc98a06ad678e1cd33cc119bed20d70b65d0bdc99f02992000b31491905cece56c397e092f9f043e007922403c4b1031a67bf13c2c2879c93a57c3411debf84f26d6fc74f1c98c17e79d926334f3f3fb59c34b5aea178f003190ff9d2bf1ff9fe181976b19a67c6d824e7b3532b4ac9642dc5f53576a76ba58077c831cba34c9b92c7bb800cc4364e47b59f083ad2dede6c4bd684c81454b0192a8c03a7d317e3e51275243530f6f2f18ff311123492d38a22308c75c312b1f4ec800d64e28eb854fc8968242c588625e53bc00c73e895345121ee90fa9d33ac25834fb501e8e660458847230ae728f210e70776905da09e7bd566a0e5ec50e7def7cae7ff49640a8dd86ba664859fe1ad3c2dccc21d932b92a71049b8c3770b3390db1e818bcd59fd3178c11f2eb3f99b398f1f8b61a7787a6067b07cd1881ce83534062455f66425d53327336955754eab944f3c3dc8352ce167c5953b7e6d94e236596ed4849b95da0fe551e71214ce4a22801ffa0444beba39fb5c36110ab3f5a2cb4c4864c3495e894e8bf8fb78b2d5a8b15f43d5bce8b8f9cfe30c4ded13d6ed8da21696c26018fd09c66068fe3c0b0e2e922278e7892b2728ec8aad95f7fe023d793029db601e54ad08212f5021f7aca7a082ab8435ae5a4aa277059acdaef1c1cb136d53e12fa8779b148d6d141e7296d6c5abab14fde09d7443a47120c45724e73f5c67817b8f5c4cd07166f42d28cda2e4786db0dbda415c5b0e0a18363c221369bffd2cae5888213966d891d59ed895ee27a6ee8b95beddcdde92b719c59f4b6884e26f80056ea95ecd1da5ceaf898d9258e4f340f327a21594b0594f1832803c0e69d2f0352eb03c8a578a3d0e3b904378041cb9b3eee1c643067868480fd1eda4fd5be936634d3643cb4b362814d405c90c78af7df2e0fd7bfa88d203bdc1276cd6dfd6a6be3947da74341fc2642a241f78f84bad31e0aa0a8666b3b5a8450d610791221ae2bccc43fa986954a08e0d2625aee1922e1aaa3dde54da78c8dfa2184cd2ccfe72b910122bda3d0cb70d5fc0f944a22942e7b34e941e927a9a2fe0abd2def995a382874e0fb225d01a5582587565b307424a7f4c4a13bc426d5f8884bd3ae6b4cd9b7a09a5dbc0b5c22d4936a584352ef2d1ff427d71892e3e0cfe64712e260024a714bda80eec7cb840c3a9069a5c89a0d1882d7a5d389e13572f3f109d626b470f1e71c26638551172e2624bda8263752b1fc5b809a72a2e33a49b57a8f9d9b449c57d0288182e114c6e88c989845f2220702a9ed23bc6cc1484758fd1dc6a069ceaad3592892fe42946a3e550a7114fa575b448669e455b4d2180c25878019c75d7277fca10acdeacab846b353f0b74875329702ea17595c170a4c25487e60b26a0bda70d809ee09633ab1b07729c45b08f7cc46db06cd420ae33f08f28dd761426eb1d552f5ccbee9aa477947a4bbfe22c434dea1d85bd4a74352f0352027561b74c11b4efb0c514a449bc8d0a842e1611e818b0cdbf3877a5ff64e1c2dc5c5465f2b600c3d77f945e43c11b43ebf340ff87ce3545e896ca6cabeb5f4069b24d1acabe9fe6fbe77e1e5da02e5169258e0d38e30f500d949632d1c4309479aa63c059c68d2d652162a874a9d2396800fcd2b0eea570d24f6a7324796d78e71459c2d8864fd1fcee0c3c67ea0f85948bf00bce4167a349b016496acc69b150007f47b8611566e5275751fa1e229c0c25a8066ae375279344d9e608f1b12911025fcdf31443ba388fd88d26fafde68774fe1c52073cfe58475b22b94e11a6efe35fc3dee625f9659cc4086e6222386304e01957288a82c5fd9df63ec888c9ec779dde1bc4b1ceb557fa2c15441254f801bb35333de0436802f7d7a371adc2b6e109e9457b6bffab6e1a3e8bc9a35f61dfec13063fae683f9085d407babaf5a6a674cb4ee0fe0bb1e10009dd557ec4abf8ec30132ac1016c95809d928fa384f025d9dbd4559276b75c7439ce0edad5d9cc06cc714bc51d6252311b0ad1bc4c2d76e999e2662659023918b05ba1b372e71944b8161f0e09a8200f20014c75401b9b4104f14ad74368c245918802b607a7393ef033c30de085445c87c8e1bc0f0cd01d4205947df5990e23d6c067b503181632c034860fd0cba70ae41802119bbea3ecb011ba6022e0e3bfd07280da97bc5e037b62c3fbbfa4af6bb188f38f93aa03798e68d2d382f12dcc537d3140ec0c48e1695f9f529a89661b71120b816c57217df357148fd2d46314d70757637f487dec2fa80de1f81f3269e5f436cd712704eb6143f98b6c70d81dd8fc151ee9017cb1accfce86b5cc3b42a9646213e4795dd02bfe46bab332f5977065058dffc431d1b82c8359423fa4737f4a8ee45c8d04eff5012e455a484009c4c5d406a41807affcf59ecda1e1a4414051a47c5be960a20939980af8bc924588fc85c606d1d1fd526aa62efbd3a8709cbdf574f06ff6e1be45ddb1851516479ed7d833ca4446aa45c0aa61398962498f8a1a94023aa36a6a44c1d2ee90326d5ad93846a4a3bf79a9ce8d2ba946d224e20508d1c71663618bb350bfeed33a1180361cc394c68d2c8eccb10e626c8a198c39ecb95b0c8fadd22e20016adf84de22bc013613e5084358a484db87ae896b8091c26cc9288839618e1d29c25871d5f93296ce0553848747a47c677bc571db70f653fe2f8ce3aedcf0a110bc8bf29be5b3c951bb8fb59a83fc4fd14be98b0f007db7ad67cb210a3040039db4ce83ec8b29bae7a3d47310ca2c9e951ea68c90d0ae81a31aa7a25bf91ddeb801b9936fc38870714f526d2a3ca3964a3d62b7fa2318cefe1be6fdd5697dc956b0b507c2b1ba82db03712f9f84c305733e2c6ce606d6c6fe64c41e0a83100e6a74c3a54bad2359b0de4f2321e4a709c9bbee9f2ff69e2a357cd21c951eda6445029f05f74b9d7459269ac2d7d3e553e1b57724f698f27cb2dbde40fb8b63a80f72a8a2aaf484a3c381aa0ff21d5fe15efa02747343fe716b76fff661c28eb2f2cca3403d04b9d70ff2eef6bdc8fbec64165294962a0312091116c9d892bc84cac3c72120be1edb49ce0049bb0ee6b7b53b5835d97f8a4984a19ca45df7f091ef2bc26395afdd39cb0032588e3b6f4bb2601cb592f0877a5b44729043b154dc9ef0412ddb35ff64f1389188d3c339d645adcf85bc87bb22e4f2b3929627c7467e1efd1ae5413c88fe5fde28be9952c4147cedee0018d593682d054021a390417c5a921184486298b9cefd298ba009989fdd6a54bcc867b7eb74e356e48f415d25d744648635f33e67064803b96f1c00eaad1ae2168092fb7e19a2a7fe7f2f2936c801449259d5ec091909d388c192fd37e9ab19b34fc9b5272217526ac47922600aaadadd46a50fa46a9e88d8c4a0e49362c93ed900805e9d8a2fd38c3cf98d808d9b1b3cb228612787bd4c4a827bc7dc5c240fa1f21b3dbe45b68669ce49298423a40fd4e694f3c2ea5bc0285670adb5cb5bb97f896e4eb5012c3065cfc8442969cbd583d970d6f4001cc1803999eb13ec551002acfb2a2fa031b366d5943f451aef5ece28efbc591ea322b7dd4e43776c42817e3df949c149934fd08a24e08dd31dd0186c984c20b29237c75fd1f3b5bf846e78095fc385e5c50133733a7fc5e1eae53270e502211e22943b7e494fe03e08788988ccdabbd9a64ec5ba75a20bcb1689203774992d219806621644350951e3b3448930bfe30bd6e6f743156505320d35be5eacf920f58620b7251014fb15738003bfac218e44c415be865d0f01b24534f710641888863c75a07fd5ed582b41c99eba4fa63380ed07481116b9b81ea5edb2334c37121e1e496b13b1eb30dc18f1dac8907e1d79a2cf64dbcc9c35f41240872f7e08527d4e74f8316a0a3f74c59368f6a60503f3108a181e6d147f8f8aa41d63d12a66f18b1f4ae3ce583e79e1a59ec2467396b4f30147dd319b8fcda605ffdfea1de43cdc5d1ee9a683b027fe61acf837e2c2c1648108da02860411c11a7a938f1e2ffe36e77d11450ab064c96dc758c7eabfafeab3aafab33f4b8f254d7e93221297ef217992065b80aeca3665d752a768ac90960c6fc14643543c3da1e02d443ff7f5e9bd6bada64b2fd042397ae60b8360a5dba7724324571cb6c357b1a8dc867bdf40bae1a8b22667d8bff9dab04b1f9107d85f6e18c300a326d6df65dd0f4ec089513cc69cf0838ed372313d86b3be7d85185e70bc4cb971c1a727b04c3d9692b4d072e5e0635e907e7316c7611ed0fbf4823b9c3f31ac9042722d42d14af2290ce024381752190748673300d4e48ccba7741cc5569489e70ea1d31af85bbd23e4ae5d3100ee5f759c055ecf335b0d73b631ba420d4cb918538871a589284e5f08eecfc1be92fd8aeeee9178a34cb2494d739fdb48b04eaf02eb49ffdf24987e4261217ce51792b6cbc6884c244ad44681774f6fafbed20d1178820a0271f6295a9728dba8d41249b87bc960d8b2a734414dba9387873d15248d1455e38857a0b9dab07b95bd4f60df00622c1e671f82873f1cc6857de35d63229a38c2ee627c1e5fd17f09fe0503bd196e4a653fdb2fbe09f9c10cf1287a755ae9d052f798741fe77a22a315c67ea4c5bd70679466b03b2040e89bff02ad1939dac371419161fd1c3a87294d264a50850e6294038a7c3d82dad14efd6ac0a6f1eb992bef16aa9b2c9907aa5fb0af0581b164eb08bd0de8f409bdb8ea7b10b24bc3434fd6a49981b7b455462f95b47eac8a22edebb1ae4baa5ff3be929eda355a0d192a48b0e202e1a52352e824ee48255b813f7057bd63cdefeeb598c0194706e1ec1c48b18cc218f3383452bde7c2dbba35f6b8e920cddee2d905e2892cf98bc85e42579795c91c0a739b68460f97d0b8305abf58d0382b5d200fe3f2e0dfb7e2c18cddee516e556ee58f0475771258567a99f46989e844f581ddbaf7dfd78db523fe3e3b0ac3cb7a219a3d540118192b6ae68ba8bde83eee90369ecab81a6092c6b606277d819c977edba1abcfce40185c80a46c6ae68a2e69b0e2d9c5737d041c9634132b67b5fed5fb03fd8d92b8c3070e5a9fbf7067b6010b8d97677a6bae2cef9a35a8ecac11562d81607cc97225b5a54f22671c1a99f500646f56a6a5c2ed632194a0e748740fb6c61dc58fa3eb49aaeabb5e101f87b47a4e1eb2bb5202df2e00d218787f77d701c8148ea0be119ac93037221b74272fa198fa9c92189761d676368a63552f882a0cabfaa8cd56720864bf9507b297e4a0f9fc4a58eaf52767baf696a0cd7542cb3750729ed17649bb8f868d6421a806c921ee34120d6a393e20e09a40e521e83ccf00cd80186dbcd16874aba09e0ab28540ca318a03a15832c580f4a5fc67f44246b2dc42703d1c7bda15994c731bdb68fd537712843438ff4b686566d201600e03865ca1f44f7903834af3572d7cd6e95149a9d3d0d3d810020b573322939fb470f8b973c44612d433f322744c436b224013b9f68c02a1d25dfb5eec657ca8221f31b6fe36b1ad09e043537c61ace45700166749fddc73e6d797613910a89791fd4c941386b02fdd6ee2200c241786026d41eddfe9e567ccace673d2c35e684116f0583cacfceaa5e257c4a283795661dee3b15bc930c1a52ca0e0ab7f59b61694a70e7069008d1cd5911d96b3f1361d153349111644e9fe5e72672bbd009f4f148b772f9b293b8918f7b0ef41202256ebcca8aef086a4fb17c79dc5734ad5e44000e820cfdf30d8c91f31022c81036acba2905b309a15a9033941f29c0b843556f8d9598e159b18afff90688d5d89a406cf89db861be111e32d69d5c999fc5e08644cd929b8886e57cb412fd2ef21be8aaa7e33054d30e665e3a643636ff046c6b84569bb96ecdd64ef2da54c49ca49090409e60828120583fa8bfa1d2e291205937a9bfa1d2eb6f4c1fe4969fa0a3f15614efe963edc3f29df57f84b4a8c272b4696622599af185082f90a7fc86724b164bec26f49d6cc57f8c1aeb5e928747e20d767c1b56b47c6df7d8aa42e2892ba9848165c9bf85368780ca5d032fecaa2b2605161b0b9c9814dad2ef85954961f9625edea212c387fb1781e8bad4dfc26d2cc219c910e9942269f2cb68c9f05d7ae93e5a7d6ae13dba86cedc2ac18cb8fe97174e95931da52cf14db4aae654a10502d7b6922cd9c526b970990949b149c1eb989e94b40da855126250d9d4d3c86cfccac47bba8901ccc6ada15d6fc64fc259bd28d89c959b1769d29b6145bbb5034a83228a334f07bac9976b54dd6ae90c7ac5d1f0dee2670b489f197c81d2a89dcc18e58b18c7f2cc1422cb88c5f2477b0f924dd32fe903c473e2459c60f224f122d63122d489388d01619c9c65f9e0bfe510d0e6946bae1c927b6f9ca9304cba02d8c657c9e3cf25cc9d886646b17ad65fca39bbfa80b0f2e778ae11fddb48b9e6419cf327eea275ac6a35ac6e78848c6f466937167bf9627dfe59f905da274a8f9e6280dfcfee73d92718acd57d809e37979327e177ffa1a4c7ca6d832fecbe32fdccdd1169a57c81abec21daaeb4ab07eb98095623c4ab4d28f20670948d77a5891cf107703119460190be9b193cf528f8c4b3519976c322edd64fc5d6d6c73bba9e1c78f81b4ab0e8108f90c7113f9c43819bf70e377417a24f5555b155ce21003ecee20b50c34f040908fd0c7f82abe88df871bfb7b895859e50ba3b9e2afd07b5fa35de17b6fa35de27b8f838a3aec8b9e8a3aee87648e00812f92b6a41e198e21d2eb18a8af3c9ff134b3677aef99fdfa7c566cd4d0ae9bbd87f13c96ecd11dca53bf5d67cafbc87e9f0b0349b6b3bbbb6d1dbed66ddddd4db28df5bb0b024822c2489f4404d117b246a850725239a89c931c1739a79c16392c7250527258e498e498724a39a49c514ecae78c72c61c514e2847cc793247cc0973c01c500e59e68072be1c2fa77c91e3e574392f5472ba1c15183930629804219352a1e8a474503a273a2e744e3a2d7458e8a0a4e8b0d031d131e99474483a239d94d719e98c3a229d908ea8f3a48ea813ea803a201db2d401e97c3a9e4ef942c7d3e9745ea8e8743a2a307460c4f8402632b77d0b63fd1db5dd5edc791f080cc590681c914a2613162d4e2e50523ec4d160d6064595429db8383d99a2dd1beed4828589e99225aa6b34979548a3b17c7122c33e5d138544ec93fbc3172a2eaacc27ec54609c32fd935296fbbbd2403218315a64fad99070be182cf20b21464ac2911182be50089a24413d2dc074d055d820ba886a04151529ac0055052d8aba33da4c85d09050bd308232154223020e9a104cd0420508bf8286c410a3285321341bb8682e4081690534133809c6d00bad8271b4c283185b2ca1e28a908408259c408411f9a444d0b640040b88889d00a40244f924184959e89bb14445e346174570d9e835e134184d3a6882064366c0c36f30b2f0422d329a642a44064772cb8c62a642645024ff0c3528e0f4268884d30d8c0246db61a2a606418ce0831d3980d17e789458410b7aa0c384ffba24c84600032094f003081b76b00412b523354424c1a50b5750758e1019e8804264d0238b3215220325b2672a44064078bcddddad086ca59452eaa1124a29f5bcda0b438204091224486aad48ae13e1d656c156c15e5b055b858b6d156c1570adb50a9de7757e6bcbb2b262a3468d7657f99f619aae761d39dd1c1ec1dee3ab5e778eedbd9652ec94864a6c7b96524a318f77b7e1c5a19338831de8859f6d976d53a46d6627411904c35c9a9810865d2928e4a57dfb0eca7faba28a36a9b0365b6b1283da27f75eb7d6765b6bad758b81ecf607a8100b2794b60bcf9e6c0b4a31be2c3a8ab14967a234c442f51a098a91e6ea37241e8458b8189340d02804434ba3e5517c1a1247cfddfdd678cde97477774ceac158c5100bb3f09672dc7d44e9573aad874ac2769df4fd2b7d7f1c2ab62d3c80bd2a308b5329c7ddddddbd85ec1cad3d85dea9d6d33b71d1a893148aa64265ae7a6dbf7e4f4c86304fb25b77f79e23f6d229eee3ae5db466fba6af584eb22d5760804f32bea0d1346780207b005b9224277babcba52e4744912489244a8c9210021448842421042449dc7b2d14486e48bb99902411024bdb6191249193c426991182040912244890b8db1f4b8e5e12ef070a2442448064486dfc486290e4892448904821899116b4808a284c8183c2139c50a4094c402205cf129410c50e144950a5dced152a35ed53eb2899ba7b3ed280caa7368ff054a633ccb1be6ab0b078ed4265daae146bb500cbed4e29a594d6e6d7e3ebf1d57c340bfa74bbb5d7edbd34dcde87c14f0c89a111a964326171d2379b0dd73c604ad7fac65749fae69f3c3590b6699bf2058b1f353526b7e7768fa6b58a09c6d703c65793fb61c0f8689fed23f2d9c2590cefbbb98f565d3eb2672d93b9b8873791ed88b13e498a2fe14ef9e285f812eea8c8207db41f1f5f25f141f10969b44549bfbc22458c18e9e951752c25fa6858c35e98a39e5c2e9542c1588d4670b89b439dac562c186098c112d5223c3c27260c37177eb4eee95c25d266bfaddaaedf209deb5ce73ad7b9be379ddb51775c88f5d6221a0843084378a341437c0929bd3ce10d00225a8b18dedcdbf18a7846706ab59b3b65ef8694c48c9ba371731f596b2acdbb69578eb6f8f77b41fa25ead1abfe22458c18e9e95112de4eb714d1dcfdd442f4516d2a0d10889a6149727fb4f006fa08194100b456be3a138bf190d1d4595da9326d56589b4802100ae05632871b723c6cc0c787363b000a60003e3777733f230c032c90127d4800851240e8dd46969bbb36bcf57c3d3eda0c38da4422a2896eb405ff0b54f2d1c2db470b6f1f2dbc7db4f0f6d150a00fd93dedd3b9f016eef4ebebf1d114f0d16a005958c4177b63b8167b413c1c8fc8cddddccddd9c7783bf1e5f4d9bd74fc417b77122d64012431883f88263b82e90f75d0b4af29137475e25f7a7cd139186947ccbebf3c458ffbcb91517a20fd374f5ab86697cd508091022a9117e3d3e5a2edc096f57044d80fbb01b3770bf3ba771cc0d31841356587102d55a6b5fec82adcb0e9a097e2fc65620e16e838cacbbbb5b4bb3f7765bff603648dc267a8e2061dddddddaeaf762ec7ec43aa634d34891c025a8b5dddddd5adbd769b411095b04bf185b61bdda12c3ec5bc1c49123478e1c39e27e778edc6a85975db09ed736d7473adc31d173e408b53113250d2ff65128f1e5f6e34f8507e87ceec8d6965e2a057e2f187180bed0ba817e4015647f3025457c69fd68d3bf6573c18ce865e645d6afd15f373c9bf12637ad8500093cdda51f7ddb78ae0841f63fa9d950b22dad0fa53133d668ecec28c94d1a8d4a1822b7ec5f0bc693d65c09a0b519fa657aaf9946a4c7cfa2e9eebed567e8953f26472403dc9638485b68fb260c8cad4d222489a4be1a91ad1a7fd9540a3cd1774192e2cb074a800ef50bb987318f2f02e5f0de821ffe7d2ae6003f449adaa4ed6a914f79c430b7361d8688cd16922032f5916d8a24a842317100203b580a623c2d2d0725a4294f3e492e8186d4dd6dfe2a9524cf6bd95ea8541e4fd4fa43c148f31788ba6e5041cd20a8eb062e46e62f524df63f472337a800fddcc035e807db276ab31adb335a48435bea37c5e8c8bd22572a854a7d1830c497ee653c415fa5b286254021e360cd58337f9dbc1f67a669faaf58b4ecbfa2b4b503fa2a9520cc57fea4b1a504cd67ab26fbcfc7821b38d04f06d1da8d5cbb58d9ff464fbf606cde7903977da554c468eb3207cddd46c4f787e96957e87d47c94aa8cc41a390892266cbd64e6e15a151ccb478c8d6ad656b1169d35758daf45f296fc69335abc94dcba7b7628534dcb1258c2d05e3cc67d9ff6ca1bd4a4f473133fd2a9530b77054ee98ac688191fe04692db07ec1106989d9f20c4db90546616ca50f469adf88f164b9919a01f7e6c682018676b1c8f4c16f05a3cd0163334d1fa387b1f9cb776ea771068d1c9f10230468da85aa61c3465b4c109849e0a7067e6b8f5c0064fad6826a472ce80963cc4c4cccde7043e6ef194f5a841b9324202088ff02fc1170d3ae7e22d96d9cb40837798a231c99e593da8a70cbfe4dae3489f3252d088096d70aa9bfb00bfdcff4e94a48db85abf8f2c956724cc046697895c00fa5e10108006dd7c900c22ae6007d7f9904156d0065344b586b45dbb2b5e974a76583b1f1b4eb7e088687842172db69d77d1c8c9176dd12e616226176da0c91345f1822244c11185c9b3e22c1e048240ccf8884b9c1d83e5a8b8909a0e6f63e2477a8198ce5706d56c497feca7305476b8b21d1e82392bd2593098b16b83bb93841a55428294f7a5ff94205460c900c73c5026198410300ad15ba42776c18df87b1f54b861acc0da6084c0e46494d8fecd4486c674976bab393fd473ee94ecf299f74c727fbce4ff62860d91f5f1b138b99695723213b3d12eada230b205539c94b74df321409b1efa66ae61289d1ff0479a8399c9db72c3d59ae4f93fd0bb5ec5df6da45297d2cf3e1c2548f7c86f9b4aeda39904d08475bace8e6c62697be8ab1ff14dd64b7b937188665da754bd47d6ae4c385a1090825ccbef09f2168e6afae0ce178211c31bbb56122fb9f62f61fb9963bd8104ef6b7e457a334fc2f493a31762a83640da5e12d7c5234da52df2d0ff2d982ac21f964ff124ebb50d4927c483fa55a0b5aea27fbab720923815f59a988b19639683faabbaf612307cdf5a97f2d4313dd194b20238d6917ca33924dd9ff445b6ef6b780bf75bf321b265c29b8b5281d5891f5b6e075613c6d0e31696b0edd5a54eddad783af07decdbbddda2276bbf29441168490e7e98432ccc2300cbd0f79a00ff47d08f495149f00319e20e3796534cce9022ec39069ce4f1319b4611545f81a69d3c7f2f288256df3f2dc641e6b1bcf6bb379b5f168577551fceae5100164e78e2c863ef45414953a74397469c83b6b9347cd976673657746f3a35d627967217969dabcb47655bf34cffb473523f2d27ce53f9277e62b9785ac30d2ecf631795e1ef5ad27f63704a4eda2d5878c4f1e6aa8f98a2f5f55c00ed0d7fc551a5a72b623eb50bf50a26aa019f4396806fd8efc91e7e7ef2b795a208f67edea95e4e1e6aeb42ea82dfbd88e65d8ef4778ddddddfdb8bea88b0c349f282c5ed4e50ce52e0dd04305d4a4d94b03f460016dd17cdaaf466d2b7455ff9319bb41ee7ec50e5dbcb0cb0a53114412ae401de79aab586f69dfcb76a5899bdca01b5f51613c2fc8f346cff33c553eed4df640372010080412d91150c174bbd764aba52b6ac927f79fd44437b9f1c684a0af8fae62fe24e96274de58927cae72fd73955d74c075b9b19ef114dde4ee17fd80be2815dd8890907b48ee5a8a98c8eef8cada6c17aff401042e5d69badd1a90aa9c31c0327e90c2a8b5fa09ee064b4ab36babd76ced3a2f4fdf32c63618a79fc82726c28af92bc5c3514349a614cb25589b33b29c32c3232545c63d05d6263e536279099a198f8c5f4c1109194f568c159bf9e3079d4491b589593cdad5283319cfd0304accaba79b499b989802500363dd9898526c29b7230cb9d5b224f32e5f5030965e120573ffe44f4a1fbc4bc4d834a858b13e592d70193f6862c54ca6ee59b17eb55832160dab8605c4878d15841563d1583f5836961563d5327e5397724be169d7e90296710a9176b51344528aa0c4f20e281da71f506abec27f7aea7249940e17282e9eba84a4184f56cc5f35329b8cc1320994980d3cd49c72ca3246a1c91803009771cb2663d6ac01d44526f5f75168fefa21e5e431ca4b5403506f5f07ea6df9c31130f7edff7093f1ebb08f7a54f9c32dc713e587945bff891163cacd575d9e283519bfbd7f52a2d058702cb99a62ab29b67ea96c526e29455272294ada45738ae0484b320e537019a7f4649ce293cf95fcb08cbf7a936e249e769d2c36d24ebbba0923906e2c3916db5982a1dc6e89d281fae1e4514f5d4e50787cb0254a87fdd4a7ca1f5c2e5845095c1d27250aaa44a959db057968e00cedea463ff677a0604e4eca91cfef70b12469e62b4c929180b837490a42aae1b409023de9c644926c4812109274d326eec720282ac1442598e869bf48375fe11f49b7f169936ee33749faf1c9f98c7efc8582b9249fd18faff0ef70c14f9f24dd7ad4d559b1aeb5533e2738f851bd8b40caf90bf5f8493efe4a3d7e127ed2ad5d26f169bf5268bec22f3e2904e39902246393efaf47ba479bac1aea3694f1e817d6ccbd18779de7e1be0f070a81b4d9ba01d98060188a228b864563cd288dd04c487c61c96678b4d9a34d5c436994066ed1bcb4686de2d66c0c3f20c6d18fe20b8b4669e0076180c120d3261e892f2c9a36bb8e356b13b3686d5252abd6a6d9a285d3266e0569d5dac4ad1a4e2b489bb875d32636994c4c58b066dac4cf427c61c9dac4ac18a5813faf1b68edc8efbb07b1f8d2d9166f70efe4795fbfafdf759f75b1de405b66ea2c03f455c357de7b9547a5a95d41b770d61074168869d3a3409bde531f85dedf1aee79dec9fb4eccf1df83b44721cddd9043d7753ec23779de9b5e497b55dff354b2378386bb0056237a00c1fa0320e0d421d488a0836a00ac35439cc8e533d3214ee0321de2c42dd3ff321de2044ea6439c0092cf4c8738e1042df70552505429d4898b530b1626a61269348a426208823eafc3d77a933e3a138095c7d8990a292207d505632cd3b799654a69986065a2891a040bf853186b08d61c8cf52d1d0d00a42aa788965d879afbff938d276816a33466b4c5e6d99bbb8223de0ab2bf2543364ac3c9274610ed17d13ac82ddb52dbfa4bb80756f75bc3e1a393dfa6256bf6f2f499bc2e7cd174917c5fd90fc993bd0ffa8aaa7f9f66fa3818ed975318cf5b739d52edc26ece58b1d66d673fb7d6ad97349b6c97474ac3fe986d484369d44775dd8b6a81765259b101cbb6661641cb274bb6f9ac912db565fb1df66b6fed3a439a5cdffeadb50ba75db58976f9db6a5024219fb7c80ae8e6f5f704087e408cf4a905da5c01a9ca124246aa522b2083910e3182483ec33cc4089c4c871801847e97e910238ec862a6438c78002cdf076b93a8307eeeeeee6195c9f74958be3eb479edf9d615521af74f97e1545bf7e9fdd4abf44bfcfb3356586ab4cbff3a6d175669f3f6e3e8ebeda1eeb135f9d0ab5b3b1083d17ebdc15f14e8d5fd9befe77202a843916f137250f33e481a80dea0e6fd93029caa0c366aebfebdff912b6ddef7489636ef3b59a3cd3ba3cdfba936efedc69e1783f15efa83619d10a85beba4a8d640aaa2f2bad202b1406c4c76796e919b4a7109a4b6988938924cc46527e570658b9947ca657f0fe7e53e9b0f882823e548b9163e4d00a9ca09432de307abb5d65a6ba9bbbb7b04b2674a65b0bc320f77f8b960bc7f8670ead30fe1846cd85a6cbdc77faa78f8f647fb6fc99104919eafac373b3f26323eaf8c06940f41c658e6af934caff0492663ec7de50e369fa1934c094669e06f32443a317664e80603475bfa710cd226e32e59394a037f1563f767ca26e357c9e0940d6d3165fca91bfc2a18fec761fca110e319e32663fcaadcc150f36ac07eb0c906b47f8eb2dd566bada5a9d0c981bcf3c97c329f109f109f109f109f10f448cd5a4a695cdbd8ddbb4e7cf91e8755543282fede2bda6002b62b811ff7d0925008e667e4b3f31a7d8f4fbb4ca020cbfe108085aeab868a53a1f8b92d5b14e3c99a594bd23c2241f214cb1cae4d0e1f83bcef05a3bd3418fb495ffa3c7a2fcf5b634909fce068d07e0c2d66b644ad185f1cb59858bbecaca65de2cf62665c3431b4981eedb2658caccd181e6dda1a4313438b898572f82fd4d7f33e30dfc03511cfff86911bad9a2abe7c113560ff12f7de7b2fc6175f7cf147c2c01481c1c1d8ae18c33f692d876b032251fd61d9b269d3c52ec7cee2f003028b2fe04f9bce5a921d08fcc1603c59331f503a4a4f7a52f903aabff4265f7aea3222f980d231fa01d5a50f163f7ad38f9eba904c4816248cad63f0a7f52b0e1275800acb5d61b9cb9a3b9b4c317ade389e4ea09f3f413f1e763de3498fcc483fea2e0b1284750cfe26b1ec6f22650e6817d04f13e38ce232e947a28ed17f56184bedea9f5c8be1d12f1cbdf2bff5b0dd995b03ae0b06c268ffbc3e264818cf96edda684bfb2b86a657fe8a89f5ca7f87466486230b120302fb91bde5938dcca8115991ec4f77765a43a80b6608359dba608850330aa7fe11d8791f080cad37c478823630d026fb0f318296807ef08bf6ebad24ce2392e81ba2b32191574657f4d2e8ea06414d2ae80cd815e6067a9b0561a09f162824e2966db56cad96adb56405b62213f35666b2bfc5606972f34c6e2191a8d5b2b58874d9bac228866e5071036722b16661bdb476830a102b086b36b266a00c2b48f6c760486405e99a9b76e1b74fb3a948f6196d93c5935933168ec8229259b7eca00c6b8745d32ecafac1b26101f13102fdf86b54c6ccf4092efb77a27b8283b1d1169cfd2740a32de1e84935af1fecf2ac36a471145f5499bec3d8ee15c21b8206b9ff3c85c45bde18a5d1658ccc3e6b56cb8192c31297bff2cce1c6f22d5934d64cc878a6e45aee50ed894a410333578baa31b5bea15e424fb9cac45c1a1ed96978c28f88b49eec093f994563d9b066a09f2ad6f048c9086bd789ff04fd4c31daef4b7616c91c403fa0253770bdf207f3e360bca11b0a7deece0fe85e91d583f563c6a209c912c8d87e8a99e9957fc89aa5f8e0cfa6f8647f9b71145f44f776e313e3f8a311c61b3e377027add5684bb53eb4c52447998120231e36d0ae7e99d420636f22c82f992fe7093eb2bf056268d9ff867699e440c1866f6cda75d22341b2fbb780b4ab4281337093812036fcb158001259b250f437f13489030b63e8e62fd2bb11a8e91f92389348927aa972c2e10218ff1b387fb56a7ae5ad9a1bb821634dee445df7fead9a76fdf007d5680b28f7ce130d63a33046a0af98980b8a973ec178b2669e07b68cd0b279a0181c4f6b7f7afeca1daa7762508cc1c1000bb40b7f0e8cb509ceb4e9fe202641589b3e430d0ab05d82728f62624e63019dc9fd1e44f644498c60aba74b7307e3e9392c77a823e8a7d5339e23ddc19d2bb93691db0e8f2d826b1969e57c949e661fa4f76ff5b47c5a4a5a3fad25ed1257602b322bb176d9d2c7e8fd5766da85ea129469d31fb4e42766a67bf50303d69176bc3218b091b6eba44c22946424fde8362a513a4c3ffa51f943e94d4f5d4a3cfe42c18c7c2095281da4377993f287d1939eba8c7e874b1de92895a0a9046ba31109977319182c86cb91bc5677c5f0f117e9eb833ffe1a7ded96e51acee46aed0c0f189bd7401f5fd52f95600d05537ad39b4a1f7e72fd5249bb3c415b8ccc571e13f3953f782f8c8d3503afed59bbce968d45e32d5bbb6c26d0c4447c196be84fe2cbf739f0778b8d0dfd2577a8fe227982b11caecb42641163af98b8498bfb63ec9237faea1a3176971806c272f561a44388d023d3213ab701643a448726bb58a2db7677c7c46a15296969aeb59489246d539ca14666d4084da64668d96362359fb436036db1d94568fabb105f6266da6491cd4cbfec418c1a39f91331260ea42a67db64fca0fb06fcd5e2b1c9872c1e6ce1cfc2c4bdd6f0579a203819bf0d8dc62fbdedbef30678e8c82a9634745fbfab81e6eeeb06786857e8f1d729f09f8efc15196f21e3af9e773a61b17bb0234b241dfd74cab824be93d55a5c3d532d65cb8e1f44415fef9d612a954aa5b2879a4de5d97dc5a1fb90bdb71bfb497a339637e5cd0d786386d4f49b1fc130acb2ecddf82e7621599bf8861810e3105983b4596bbdc2ffa713f61b208c2b5fffbe3d2b4e26635c4bfcb5a72ae91fedaa0cf0554e2ceda9c7d83495e59bf54cee6a50d37fc7666623fbe3d088d464c71f8a6247d66001bb2ed7aeb3dedce0af41f057fc15d79e8c1ff442ff6aa45dde63fcee892f9d571c6da119bb888a4a1468139f3593be8a3eaa37b87a532448bb4eea53c391d9da75561e387f6dc057f83d8c49a491f461f2a28ae3a166b18c916dc0df7b5c520f3f053ed232a06d448dd2059082351ccf13ed0c7e0e1d38007d9de80909a614e09f748a0c3ef540251904bbae92ddff2892694fa6428cf0c96015bdd2ebc893255796ebb52fbddedbec95270872d726187a239310238ae4d34606ffbe0dd0f5e0d7f0e729f44aafec5306bf69d9957e25fdbe06dae2197c0578a97675e59fba072bcc0bb57c55219493db2dbefc835515423195a739bee7aaf2f46e406ecbf7cf93b35bdcc65f32fe7ec7fc25a3bcb8d35bfd399ea75589c3f9aa529a55ae7a1053d35fabd397566425eb10296accc6e9c24ad6ec36fe32316cc7c5f5eafe0d99be7c91eaeba83e4efda394e7e95565097608c7f27df08508542ad5ab7adabc285f49154a49437dd5ab4a1b7a1c1eaa535057f9f7cf2b857c8fa4febc4850f76221df2d841e47e36819a4cc11aa2fc1bbc8403dca871e0485d447639b2fa8f5c2d1744abdcac5229b428db067dba45de843dd335228140a55aabec441f5a66a7b6abda14da1462a1377a3e99452e9c2173752b3e7a0a20a85423ffa8af2a1b2879a556f3a8db4791dd72e557986cafb5e0474bfc2789a25697a10c556946a226b50b3bec8a65023950c92d2187c982f838cbd8be9b9366fada053536983a66c999ae6699294ae3c51013bb2eaa9aaa46d863ef426b2469bf5592c154b25e3697315a2839e7c73399b5c95681715a20323f9bc3d55c5a22a7d87d66bbd290ebdcda1f204411685507f71e5a92ccb0f912fa872a5cd50e93b6d5e93371a9f0ad1c1127cfa4e4fbb4e5349bb4e37f2e3d32e6b964ef9c58f481f32bebc381e6a4629bd88e92f1bf3d5fd52798ef74966965196bed3aed3c23a76ff741a4733df8ea94ada8dc2365fbc7fa5dd686cf3561f3260ee79e3783afd9be60b9286023f545f71a8f29aea698faa577de855af52bd6d17caab9e8a2f2a1c8d42be10c2ab2ff365bce7fc6596600836be8b2fff6e536548fd7d4782b6d4bfef4950d78bbf5e36195b50fe3c6593a7aa37f917a45353f52992d296ea5152b2ea4d52f53248d55732ab501e47a3c813f529182a15213b5092455f9f48aeff19148d3162c4888161c0f8182a2a38354251a95436885e55f650334a79d60fe1902abf763cdaf5e2ef77b37ec9f8fb2dfee28ce44a3245ca58fdb4793f065997c0201b36de911d816981b044d09a7d41be7fd6b02ac8f7cf150bb322b0b054cac2527fa61ef659c5aa7ceafdc50b1569db54bdea6b0e7db6300bb33228256d53559e398419a543cda1efc1e6fa3a889e7c1b445fcb1e2a0da11f1f47b3f8db737ddaa552c2e3ab5ba6c8ea5395b4f9ed0a9567ea43a2bf0f922e0d3894cf43cd2f3e559649461c5d928e7b417a11122c5353c6eacf2f5f2aa879ff84f96b555e2ad0d5fdfb8599a90559965126c9f73ea5325c5c6ddd3f3b0a16a77acf53bdea737cae3654394ae8cb24e379e2c9a11287d0f350b3e871701e6af6226ddea7f7a6fe05597bdabca73f3b86c3060a5983c7db55f2d07073aa34dbbc2a0bcbf9eafee8699f5e1e959ef49e33fd6dd3a73c97efe3701599f224793a6b3ec928e5c5856063fd94173fac39d7ae94bf7f7bda555d9cb28ba7ede2492b43da589b1724e2fce536bebaefa194a73786ca73545d5c4a69616ddeefdefbd3c28ed4af36a85ef5b876a1186957cd613101aaaf291415697ba839559ea8f71c45d27c42d2ec82c49dc893e2b020cf9309b94367224f5b224f533e2fce34224f9b4f0bcbf74792879a45e5e986e4ca1d3f9b0ebf8949b32bdb85b602191274bfbef066baa56e2a33a85d725e993b93a9ede997c5ddfcf5fd7c3fdfcfed76fb7e6edf12100fd0cc0e4826f73bcfb7a45ddf9f2058ea5479727d6fe7e4799ffd75651eeed459dc69715d04917cfff3901d5b767be2b160f4cab3debe1f5ff58360e3f773fa7e9e7e3ffeb2b85ef5dfff3f9dc611678dd8255689cdf6e47e6c8db4ab9e3667828d1d915cdfdab2783f7f48e0daf452309ef6b438cb0327579a7f861b666c76ea0f4dad8dc47edc5cc9cc06a12ddd890758e5fbb66b7a5dddbb8d19e6e5d166bfca2975594069f49f5da61ff6ebcea80c5708daf25430f2084da3ca95dd9b36cd7eaf03fdce89c848713c1b993e4bcbda7567bcca29355e1e7dfad1655f1e271364321d2285927c7e3f52d8ee83b7563fbdbfaeac57fd9e378ea7d35f599985f17bb0b97b1d44b92b6df0efca1e6ac6e1febd69b0afadb46f08447331b35cf880a0d4d22ccd921f9e1d20362ef3999e9c0da747d31ab6a408cf0d101e55e69303911a542aad7e83005296d1fbeea3c0653a240a990c43a643767832280ae98bd2ae5eafa4d7c930daaf3965fab6a577b2dcf65362acb90a04f971a3c9dfdb07ef155fbaffbc8bafcdadf9abf6f4aacdf7aa929a731c5bbf2ecd71daf5798ee338ee2e721d597f9b6fae363dfdba40ae4d7ffdca6be344dab4715b9b5d6d4e8ed3e67dc7b9f1f941eebf403a1bbeb7361748bb6e5a4cc0d7919f257ba8d92b4fda66d8665752dbc9ba2ac0cf06042bb5f762dc759ef755f2c70ba80604c350a494d24a86dca9534a69a52fa22faae46974c4414a326b254df44d5ec092c96462c20274c547abcd48851811247fffd9abb4c25c9ca35c69a02aa8540c1737452b19a21101000020004315003030140c874463f1789c4679327e14000d77a4466c5a1d0ba320876114c518640c4186016000014306066a46a300c1013f703f84e0e822866134805a21eee75a26a8e73548ff2085b405cd77af8b1592afddd243774074684b736e469374d749dd755461c283b49b928efde4984e61d5a4b76b4d63a3067c7d1b42e1484201ce981e24e47ac0461b05a7dff4df46399c330e68f6051bb0dbf8f4d5781de45367390c53379a50a0c0daec326b467077c7223f3f24cc3562ba5957142ac19d66eafeca2f26276eae8b98341412cc637e8d045b9f1d52d858a4137c3dc5e7ad489c6687ee0fbc1906abc51be8022bb00ea9a39ab5863202fa138dedc5abc98574422ecbbf02124af406a167a217908ff70b4797f3269c731a03ec29f39404bfa0fffc232a862d6104f297959379ff00358de6917dc88788682469a65ecc920b90eafa956c6f53265c8cf632bb79ae3b4248b38648a01cba0e87bef69e7663c5082f97c838e94e2171ec9c00ec8c110736ae974cf3cdde38753bdd25a78505557d6eab652f7b65a93cc63477b5ae111f731a171139460629605d4d090aaed20d074bbcd2b67a0aa1e7b97cd3722d4ed08fe98d4617ce72726c5d00eb4f6c09408fe383146aa0e26cd5864b503d78817077e2adf0b0d4d3c582e9fc95d25ab444a77db8db93671163d3d4e38f0a8e2f7488a1b4d1b30016cf040cbdab54c80a71ec55ce0fad64c8e14aa10e78a186b42a13016e290ef4c51251e8f01842a6322789215a7fc32e9320d5b17172b695fed3fd2e4c66793bfbc12a9940cbc274bb16ad950999e83e7197b87e56354b4e6b12aedd5fae3e93b3518b45390a6d9fe4fabdd28a5da0423a3171239ba59bc058a1158384a797eef6938a496ebcdb68394468db35784b40948c17b7e7f864ac856e00c3757204222bf51084b5c7ada967881392842098be017111f77783b8ee4f3869889b2629b7d9af01bb5b3835f18e46a02dc79700d002fcaeff263e3b35cfca1371b61a6e2ad5c806840bd7e6bd9d6cc162337b20ca82893554d1b92f86b32ed28af24c0a314095c465207fec750ee8def200e84f37a1695b64b8f23319e80250879d829613e9dc9f19c2b8b10f3d9fa8189010cb47cb512a5d3b35e4dc58c1d7f8e00a315b6589d1351d42ed54edc6933c7011e649b00bcd6648f74e1829a6b22ac51608f29b17e1583398fbc4de86899ce0b7f62c58c8acb7a85edb56a6fe9326a63ee03c0e3752c60e8cf32dac717859506e56ee3d71c6420855b5a109d2874f0e5ff8547ba330b667ba4d7c4572fda6f36447f7532bc8295a54ce133e0f7dce726219b613ac6ca166afc00b4e4b14a152a144bd69e6ff0528de7f07e8d88f3afd6118ef57c0c11bccc039ceaaa64d5421abc00a808ea0b86d781f85ca3b2281417d2b607e66d765e698b660810be671c62626ea11a3303629d32e5c352bc07e2e821da3c2c571a4c72c8a084a63988ce6f4017adde41430f3a10117f493f0b5228485133086e44a5380938fa9da830c2a40b4a4a639cbed8e2dba39cdc0058600d266d90d33f8eac5d143e6a2b548053ded274095774ccc9425de6a01c605bab4af2be5621794b603f2e1a5cd6b6a3e2edb0ee0c4f3491c335befd4ac1f748b15078859cb5cc5e122eb96185c66602ece5c90b7c07e2ef31668923f83a36095ab6c7beb61922ae6e67f2e8155acd7684d32012c0a5ba58d1d70051f3cd43cd1a366429a71365323d97c404813b000437f0204e88b84b398e89b0681150a2c25d31b5d09707d232fdc7a82b8cf1dafff0bab0cb0d5abbdbe048dc62807be6293c7cafdce843c576d1b62a143e269250fff900be253bb5cdf50b1d06a2beca74fafd6e9ff2f7eb92a177009850df13880039f1d324057defa280bb4e53b9462b979cfb61b4cad9e577a48ca6fd553e7a2360d48db4aab6d9a765af9cca73359b1c6863e699b66ca6a880f216091c8f7100ba081d969d96cb568e47506177802b2285e92e8383254866a147f18caab8d518dda9fd20d3feda5a8b8d680cc3ee068e6fc582a67892d214eafd4db3c58d59c00086a42a8d07eab4f4f9d4d432d3f4e2cbdbf5647e9cab7111a7471634b1dbc794cd3eb16f5c9a033e7e528e4d83cd18fcf125617ce7aa417ee2ff06620e177b277155e01baf5c2d1a4d2a8856803d0abe1d4d40528e57f88e0253a004aa5be9b01d800821b06354a97dbd7f469a6a660c517c2dd3cd344139fca319775d55dca1f593aff461c0c1a523394a6b8394b4cd52aa73a2f395fca0b2a4bc6597479f2cd3b2429f7f0d04e8430bebc76ada3ab4b16d678f3632811938d1c92a38659a2633c40361f1328150385a49f14116e146c62bc5261a1f7d61d5b59d3c231dd693723b680e2438278eaa77c60c1e5272cfe5c5821c1153a61a13843ab0f766f65221c527e18c6eb618b7e20721816a05d78025955e7dd56e51e64c712892d0d66705bfac18ccd43991ad1e2ff49023ce104f4c21e453e706fe4bea91d879b006e88741ab28632f8b721cea05856b1b3a16855cd9b12d8c7b8e68e875087d0fe905797c93b76f99c0e29b26409a180b4252749686a244200eb8feacf12dadea158248ac6c50c81feac4a4042c12e245a1fa5da253a7f4fb8a45d7557be946ec19a6945343f9cee623d82a05b5a654b511d424492ba936fda1c99e9abf221bc08116171b946b2c30239e15bd14db01132344142e3b99188e24d5d63f552559cd06961a967305562f138b4e8c692d95a0c46d0df55f80f59159a003546d210a09b80624231c339ecaeb270f326ff69e60cf7103cd51ad9677f9eea347f49d0b9cfba566e0d3211e62c0bd92ee9e6cf3cdfcdcdf1aae9ca5f04f9d425e0a4708768b76925b89cc73fd4bad35d99d8b99a9a98318a8c65b3b97eae945ddabc6ec222ca4fe93e04bd5289b7c3bb2b69132a86f8821c7ea92b7172cab1226e88dff9ccdc48e452415ab7a044dcf6d8735fcb93424dcb6ccf9ac61b5d3696b01259690fdac4f7b3e622c35974d10fcde53d0244fe91648b2dd242efd6d374fe5c64a920a74350222c0bd40e401b225a873a376d292bb21d3d31156e9cd74a0477111c89581290c41f53171d764e28542338049aced2f80e2167d1abbde3a4dc504d5876662436b395eed92245a60109b483bf6d5d0422aa9c66d03f079c56cb499155145a0645671253050f2fb5073aa57e8d96b8cc0cd2252ba738f2ee23fc09b11b9dbf77238a14893e7157486d09a82575f857de959be8fa14cef1f924dd485b6f2018908915e52a3d5bf33998fa1c100a7871840f6ea179e5e71ff1ecbd3b2ecbfc13c43840d3b034964b7c3d518b30b44135ff93685b7e56aed65f4556cbea164f217d859c9c1b0279ac7c21f8fb40d74d088ad17800d9add1b705c5afba59cb17e4c63af74567c84bfe19fee92c582071d39d22f9a8a0cc8d106b112f92fc25e729d427bc216772b9d16ef294f4c6470c798c5548e1ea41cc6ba340061fcdec2259466529659946fcfa1f9b80d37c5c6921e0502d45703907354aec4239ee9cb7ae68591c174030aa5016c2da5e35e3a0918b7613cdea007269a24915606a0b030c6411421e2beef68b1460a2b889740c7e08e14197aa95bcf38b4e5b46872901a08ec4a64ac552bd9f83808c2c18d398d2a9736e3925c3268b94645d35a6eb53db7f2316dd2f81d4badf72692d1d3e57da050ba7a1db33da2c7b9dcaf346f9c927bef41b8e7362af4b091db3d67f169978f51f3d296a439a2818269d485e26785acd203041eebb78ea85be6f4d31fa30a2bd36886dd06045ecd97a5843ce8bebb001dadaf478b08ba29d0c894f9ef89d097417af0c65410084ee17e16d1b74a4060a314ab7ee9548ef6de32a0b189bc699c04a67f5fa166940cfebc45b1677a675290ca4a04d8a8876506c81601b124d0a0a76b7e666c7858353ef1b08b3136378eb002554a87bb0077508e29213060e302a941f195843c6790cdafef41658b307b7f2d5a98160de1557572f2503bbf0a821b259808bbe9612e6a2f90a1756e67b25fa9578ded20ca8ce9f272ee63feeaa1d55e8b22fb323c6c45d0f3b1e8cd9de9327ced98d8b8325e0c62cef141be16b962a714a0c7f11b131972f0525f421a38cf07b0fb67b92ee92b20d329844681df1d3a8e597d6f9a55faf477412865893761c91fdbf23ed2c52d27b40e088f2dc061206d6836cc416ac222b867c6d5e34f174919ab888c5ef0bb86fd99c6c1c67ee3841ef8a51a9a22b0d8304186e5d4e5706d7c679795bb2b57c44418555309515e07a67e50a0334dfab608a0c3b28005cafa229d546eba97f01b13dbaf94329bb86943335228243d02d555c36b2f4c2eff0dce0508e4082eb361185e613ec082b21b10322a6c81ced504323dbfe479b1b5cedb639570d083063eeda3a0b17e65f33327a18b4ab8ab35a3c622bcd957abc993ac8b2a40e4ea0d513f72df537fb6351d706405095d5e73c886f1cdf5030cc9e2ea23b6c0f042f7edc30facd95729e4abd91c4cb1066dddc934346ed0985c4bae5ee90139c6c30e7d54003dcbcad2850b39714b3d785478583e6c3c8f931e002287f1727f1cbf2145fbbb66541ba157b5a7b420e6fea876df5b08d4bab9f67265160a084f44d900ede2611412247516f92a6666b5fc85b60df82c061428177cc8382fd90389b42f76b2daf82f6660882a21aed63084cc7619d6f7c13183acbe52d333f0750f22d7b66ae62aaf1cce18a976ff26822d6a13080d487f5ee0471c8107b446bb37187e02cd5ab620e65f0a23a77abdb84e6a99ee998f0a260c3f044702872e55e3a022c7afa0275ac1c0d2aa3ae319181900efa5373f7ebcfbe864b1f2abe058276a3ef4109031a28c2de7c2df92da00fa16c0be57e4f6a0ab0146d775402c241c32c2c91151781e97816ebaacf3eac693bd874d98af24797c0d38ff8ecd1da6a68ae31a48a56cd5fb39b5b5f4b89439138ec23eedec1cb81156656b303f174a52ba798dfbcbae6768c694326a0e1a318b70bee468d5095fdc60918d1de6b68f2aa40700f2006661e0df4e302679ce3557e59d88d506fb3ab1af9c6d4e88daced3630809ee986f446a17427288f658e1584abff74255a3f2890cac6402c59152fd668a8456ee4356a08fea06db84a40b95d6493ed070bda8380fda9e5209f5b177873b856849f284f49cda4748309a5afd700da4e8d351aa32a5f5d376e2925633523502b20b841160ffa7d4b8cb0b3e2db62deb02057c95bfb88998a77b191a9c69778fe73c52b8a3f0a68b6010e8c4921e0d6bac5325851e80323b95b353fae143a4503816bd30233442261f021b31bedc964bee18d6831bbb8485884c8e0e0678f33ad1fcd5083cfa12a6ade8fd6752cd5c3747a755add21adf98e95ee766351d208accb075c4a89d62e5401adfa4e64190d77f27ef327ea4ac79f2eb78d967ffbc134c985ae79a600dd8443dd9a2dada96a40689709a3b0ac1680f9b61a055ce096bffecdf06d617aede3c08958bf72e89bc4d35603d7e7812b66c8d6e84ef79a63ded2e33607b3a033b34ff3fda8f3bf746b0b5f38f3453af43c9cc39a3dc88d812f66c3597b5315820a741d3b6cee179fe8d85d591f15dac4c44f8bf23090b789fe5ed50e2a5058575f2752cf16fb6cd236e052640afd92351402d67e3c267b385840bf78616c1132c670b0630b40bc3367eac1a379a9de75e7622cf3669b09e02aa12bdecdd48df99ea8bbfa312339afce1b0af0d77466aec1206b6baf0ee01f2f76013a6e61609c02693523d279efedbebf2388b23681bccfc4e15b7d9ec01f99ca36b93c43ca59c31b79d60a47daea7cd395759f5bb4e4303d8cac3d498e4e329bfda0def0a22a1e7700914e9a3817aa582d0c93bb799c79b24482f59c371cf8d247f6ec90097cfd7b8602f15886333e3fc1b9f5931bcd5435ebf7e28fb64659a3b2ce497f540a6b8a186ed974e9edb02d12752dcb99135194ce38470c66b99faf10543ce78a5f24b08db06fc5d0a554875e266c3f196b39689ac976f1fc633d13d6e8407c55c045873c6050484835e9af85bc671f9330796130c3b59b89c44ddebef2a7d03e9013452362fe9e817cf72fa5532fc12ccc41cc6cfa6508dc393119b2905f467f6d64a9de24ab682f8009ef8732908d78260ddc30a879376de76687b0b88721bb0acbbf400997c0018301b6e1e664d8094085b4e027bb30038426d613e5a0b119856de7532fc4de997e0b3baae76d6d669bb5a7da22c132b24648f982786bcb02aa3aef2022aac7ae1e8ef7075e5a3003b80ac308ec13b08c228f8fe18f4c9b7d36511731062fe3f896feb53c0b7d3add09d1459fc53da75c65e620bbd8db48d54eba37363e7394f558cc5b274b2f1147dbf43bb4678045fd50568abe9225ddea2d20c4fed781d836498427bbc47ae966694f0492238f92db9d91b15768351ab3847d53a559a8df51ab1893e355c6e34c5f233e2dafd9ef9c4448ff51c95f01a79608dab976ce780ad0c7ddd1e4f15d406c418b89381be0b61b592ba9f9a8e84f1ace00fcc5488dc4e46805f003fd451f5ad5d1ba8657e0330876bea4f7aea3658194a05ccece7660453162fdf796215a22ec61a3709c4850080b22a1d2cb9f020d0437283d16308738496e92034460f535b45bd094dcac45d204189b17333de5566801d372fe5fe0740db641bad67e7afc67782955deccf4860bcceafde08a0d4dfce904a3937735fae6c1dcb8c486f271646966bd8bfc18e86130215ebcd9861ebfdbe6fe3b167e0b6f654fb51b0d76aba1ee35a0ab0676d1e82e34d8ad06bad798ae1aec46e3ddd1b09b1a745d03dd6b743afc50ff1eb9be1a9a2f72a93b73f1e4e189db62d6747d152cabc31dcbbf4675d75a8956c9e0b47ea63fe91f9d8990ee76e90eb3e90d5a7213d68087aa5286e45c1f002a4db719c1b1bae20ab90eabdeb21043159a276cfc48102d2d28a76693f96a2d81699011b305218acb267dca13d8dd16ad08e82c9f93b03a14e0b90c1abe8d434c59d7d2f8c9ed15d5010ecefdde81d063403903422cc71fe46dbab3b01751e1f5ba39f21a7c70c5cbda827e3f2b2d167df0cb748063268121250eb670b4a9cae55d22158e4d861c426a2e0646ae3fab058e57320fa7ace692857fe458e111566d9359c1c3d4303e3e4080ddf3ba2294ce56df476032a1620a36b0c2ab3eac5e09c2841efb2a0e3cb0e266a428948b7028ce82eb85e1989c1be7ea23dce10e017a69f6c6ade384d1d15ebe3846881b86bb60867d52cd4230cfca82f2f08a28e5a415c6edf13489af1200a3559827f1daa66065b9aefce310c52d64d2136a317dbc9b87a9023379b3b83141bd9beae4ca890542ec99015800384e2a59400f97b144a40a53ebf465e6918ccc4bc72df75ee5bdcabf4310ba53704acd96e0e753d81ddea8708296c92ebe89e6acef76f921141cf08a5ee2f0f1bee68abcd38228c121f921bdfe28663e956862da0dbe4cab27440e2d1b8959462c77aa0e3877b5d90235350502b852901c4831ecf11699f96b4012dfb2a7febb3899ae6802b6dad400feafa4ae1e5d2b3ab62058de237ba88e93360e7b7f16ea95f6712a55bed32658e2137ee77df3026a2ce926a122546030b1cd267019e0a168bef9cf66b0effc7b5f1d2d2d6b315cf005ae27c67f720fdc0beb01e404d47e5d62068b44d4008e00b2dc0310c6314a186cb7ae5dc392516c51f424e958f4ddc8ce791265d212e2fb630bea3a8d780c650eb604a4f1115c292815b6ec6f1619990405d71cc9bc3080f4ec07a6693ac85a441c6bb9ac3d7cd67f473f97bc2f7fef0986902adf853243a15aa80c9a8aa31c67a8de130ef0948be991892eef7ec8a19df2859005da6b7168fd02f04498727b6c1a02e966a22fe240995a3b6a0028b223f50c179418d0ce62d71376fe555c716446b3440cfeaf137a962b118e71712285ae780589a00872320a905832f9ac72fa72eb98591e1852e88c2e33a4f8b2703dde726514bdae84478482103570b7e63d7c7afe65b10ff7cf504fd0c97c7050b943d8ed92e6ef98c6501fa5d97b6eb8741dcfa59acbdde4539c0c23a8b8f60b4343e8f3c6f674e491216c7477ef33f9c9cba29f466cc71bbbdbd5fe63a1e6986a48a58d07edaa34fd1ac556d5f42dc5542d2fb408eb9ddf009a5dc64a98fedb9a35140a27c02260270b102bd8342bd50d67df620c7f51cfad3622419365eefab5197e9119ed59cd8ce38aa8f971afe7754749dad78c5ac4039f566ef6b51056033a38bf45a95d84ca3cf4ddcf215752036508d76abc0f7dd21c615c9406485422141fba7ccf22e84d29c990c0ae03eee589f06471f4db33696218b1ecced4b9bd08b3962321ba544e851409611412bab32190fa41b11486c1a32563b9c3eec93247c7231e70fe4ef1d348ec7ab550f4598692797d23d540deea09a134c6a78b32307033f4879a20e4870a6f156dcc3ed002a378425aed45311b3c24deeab6066fcd1e7bd1e90d007a373acc3ba3d98677e1e21ae8aa14db4f2ffc8eb49df882c0524940e3a0962e07e8d62f08f2ec9e4d0a69d7afe3b5c5dd59afefac869d30dc987102a5debaec98cdd00e05827a571f104f8c4ecfda75a77f4b0a2dac8b26608662660750b5dfb29fdb33200ed3352d74e843e7adc01905c77803f23bb83408d5767848adeccd6cdde8c35a6b30ce38f428f1160c0c183ea4363d890eb5a516e24bcd411727bad8b62a2e088d104253a0497db332a8564131207c16a37305406fa552b7f9b8196aeebc43b9c785727709ac3502338b502748fc17d237734e79d1ebe8766229d6f2773c5ad9263d81347789a5a324f968b5f0735817838723fe6443ec99ee7d98a2166bd38d1a1f5b7d54f15cc6d243cbd9578458933503fda85676547d74c6f2aa8bc7a34f51f67767cd31d756d3701b7247b50af0b1cd2b887ec60e0ea708033f29fe0a908845a2337ec77f46b4d1328264377fc03c77854270ed70b62a5c413ac8ba017be8d038cb8944aba2a640856e1bb9e24427482efd7235058712e730dcf5de90865044bbc24ce70494f3874ca76d81f952da0539252ab0bc1c449abb20f158ed9540247aac651132f073ae889a148d4d4560132fd5f1737fd986a0ccaf09c1448303839919c951b7a199cc9f940e088548d91efa509df3152dd2a6e530cc7015be7bdc3922c245cf63a39ad1aff9762b4a87b871856f1f6ef3ada1a0d4d4410e28b449db25bcdc1d3178caa25f90a99d45a15a9ed7b6ebedb84e5048034f3897b0235a52d0490d65d2b1a3f1464175263bcb811adcbb74bc428435228926bcdbe49140ab0245b85860216afe7a60d12bcccc9b0a5f486c11845daa80ad216e262756430cc9ab04ceb11b44c27f8df64b95d334ea1a617c8815c34309f11cb2228cd16b0e16aa90159e1cd36318545aec10919eb9876ceb5d8dbfd2dbc3f74a64332d2d9a6fd9e8a4146f3b9437ad1e82b8ebd940d3139955e421bc8a9c6b73ce48a327be6e0596efccb7c6780953be5be78e7fee845660a7ed756dc6dc6d5705bac8fd295e2c64212ebce5aad425bb78bc5e4c96fbbee81db3d8881b02b4714d6e01cda300bacb7d6a051a36afc0f7d1b7fe47227220e8cf15b2b7525c007552dcb9edaca8b54d49351f562de6d0c777d9e9299c61150014065417be045ad37498a074665e653ecfe02d0053f6e88417b8f26cbf24497e89deceb2e5e1b5ff36122fd2dfe560321b1c41517949f8c8a9ef6ac8f0f0da619d5eb198ee6e4b86a7618888dbe75619f74e7bea413e093a9ff39b1be7c11d7835ef18c3ff25c9750833ac98759517273246dd40f15f1c58b2d7669d22148b4e96d84579758e7457c3a63e6f6f6dd23c5f632abfaf410cf240c5538d0c73a71c983ad642fca1dcc69b2c6f71e26137892417aedd639ed920d0d50d3c62da7839408a449f50fdf3f523db285adde358465f4f347100da4aad1fa38a7c9dcfa4b5b3688e93a21d5731d030a5b71d8d1b142032d49e28f0f76f4b3e9f42aa10e3c16046d53720c70b38ff9728f74a8c2f74f29b824745ffd0b7d00bf20c2773640834820945261c3c0c8bacb64f940527389791273d6927a9c1670eaee51ab6e10f44f017dd4e528535968f6576c8bc44983c5ef1709bb04225ea4cbf746102033bb4755dcc0323159253acf785bb03f8a3022c0e183170a8469410b078696607872eeffd3143a7f73ccebb89bb10d291fa12485edde3657aad8f6dc6e66b190a6898ceab08767c67f49e00d67180f02b5af022d2f0100236a3be48d4ede85d744f3ddaa2d7f93d3e641ef5cc24c6166d73ca09c0ba939726704ce71eb6223aabb5be69999bd8b1490625afa1774d1d784682c5bbebb20092358b7283ca90b89434565565c858393166c1f5e78ab555dec3353c54992a34c6bc859b10b720a3f4d12d76b8c34a814d3d2f6f51d730f0ed46a553a3559c841a2b9caccf27876b83adcbc6ad023dbefc7e749fd48a8566489f47e9c1e2ff08043646b583127cc5cd0850d831c609bc9b19f3d8f5a25de62c95b5c2ff9023963da64cd845073fef23624ddebb4a7c29e8190f411fa07dee8c6c51c275e9caf2518e3ac15eb2958cb5a7aab9e5ee98d03f543a84b253afcad42529a24b3a96ec2881ac57c6b28902fe56350ae3c2fe58eeb7847bd8aa6bb90fdb63014f780f283ceca4279c580b1cee1913b02f8ed841c7905bae989c3cfb624ef311d0e16d389bc480b1f60d3cb6f231f012d354807b90b08ee8c99ddbfd36e050335b75998bec8bbb2f8ba46fb34c6f380cd36b3febe0c6341da6fbab8bb24436055126af2d955df8c3e7a62e103a0d44a9e2d119271d8bc8edc5186bfac30f86ffacc478d380f87f0464297941d9c38169f9a0a4ad8e94c2782cdf56cbadf2638ab7ab35a76341132cdc7409b73db977d0153e084bdefc58a0d9135bd7ffffc37010e4a99789fb1b42cbc1a1a9404b763f2070d8e2eef9a270f1b42f881c952085656e54c47d1bc66a691903c751b641170941bbaf96d519db42a302533877abc535a6ab4f0e2d802c88b7dbf68f643aa08177bc4ef526fdf593532eb722a32f8b92aedd69ab0514f12958849355bf167edf08da696458cfbdb94a929b986fa4e0d31b4bfdde71136017824cfc56ae889b69cfa423636227b19d1a43c8bc3be9d22eca700eda768b4e728de67154943de3c1902029fa7a4d0613fab04ac89658b27554a0556d28b0cdac2319b8e20b0b1b2bac5822dae8eb4a3c4b74bb215542434fdde22dc6e96b8bb6ab38a3f90053529172447f0ed24e007ca32a53d05351faa3fc7aa6830ba4b87216913a15a339939f2e6521cb65ed68f4b6205155644e042e8703bdadeb73c34606b61de9d7710e02b496d4e858a656b84c9903e20a9e0c4d3bc89d9bcc006dcd63ad9e89794bce132e8f6aa60c6d4824625606ebcfeba8f6aa3ffbc7750c6b0eb566245954fa64d7bf3d4226dc6849665c1cf8775c90d7917be93801bc9d7833f1c14c98b90bca0c3243e4da912c234a4308d0c656a4fdf007d902ba280c3d7098c618d1dc2784ea9bbdbd86ba00fc7e19d26017e8584d02a48dc3dd61b4b603c0e9affb06ce2b758fbe1c843d9a0f6c3eb70d85dabf6847912d5d21608bd638f83e13135dc51cdc0f04ad9c995eb61817b93e8e78d63519f2c121cf2c8c7174cced1da201c5608d4535c87abeb140248495137a4c2c69953a12cd21a63aa8313ad8f8b4b6a70f69c2f8f9f3f71b1610ffe3324d65f94c5fdc8f21fa7f36e60b2155a0fa4228eb0270eeb2af25ab46720f9438e9744053836b5f7d0c27c9d8305de89610f18d9f925582d30d54ba49d706a17b95c7ac20523430cc55bedebdfec47d4572b30912aebbaae0ecd58fb2e46efdd5c9c604731b42c632e617a3bb495ce7dbd84f9bef04bf7511f1495bf3b9ed04223d9e0a460f8840328c2cfdb445f549009292d86b7e1f122ae4ab8812088f0446fcaa6ffdb5109c7480b732df0cf95ab93c2d745274b8b3ee9a82137ce2a2cca61544c3b06581abd53efc47cad0610027889f5dfcf5d880c34ed9a716ac04903f73e9c0377727a90565700f7a6d75f3edf1607bafa714e9e538dcf792dac88398d4fcf575579e1059088abdd16fe0cce239a5036414216717bc4082c2a29d53eafe15a6676f7ab2d9b2fe81047a8720c80e6496042d97c615a30fb7b3e0776a3df4d2cfddb05d6d57386d0f643a490c73a77eb2623a6203d7eb8f017133a25e72430db316d250950029e51a596fac566c5a589a5192ac157dc39afe82aadb093fe8c5efdd388672cfcc47f8fb10e979d69705087e09309778acf10a36bf0df1cbf0e8722f2e9a7b6360fa957b04a41dc8d535a8ff137a35afb08f9c5c4780b8cd37e6f4c3b381e75de46d5b7e5950889ab8cca16fd26c576db03ac20ac8e21861323f25e778271414817144a88eba892d188e97465e17f4ebaaf62fb21a10b52499de20e26e4fbfbb0e00f6b220f34786adca9ef2831492c9fb291424f57c05c69c248a7bcd26634791a3cef1a6b81a5658ab50f7220eb233ba84e990209364b5ba82e1bd8f7ca735a609df88e83f6f076bfdf54dbeef882beca0b8c9340681996a856b80146b4679eab58e1c6547f890e0449e3d53454a53b02e829158b5fa8a8cbf8370ee28a6a971d064abd509a773e5eb89dc1cf9da456952b54bff6db190bf3115b93c86504b632fcf73a48e41428552598b65c46d89e5dd7ed795342b25929cf4dc37f3f4155068f1db871d9ace8c14a1ef7e9c436f665d563e31c4ab730dcd071a972b9dbcdb17015c6116e80a33388d0da191e2fb5c4e741f9cd80ab72f4a67fbe01e2e951701921f8a48cdc3c734c4739e4e48be55649d86741e6f87b0a0764cb0cde6d50d3bf0c4c4e64e96a0fa0e0eae2d02fcb4087d8fab39898f5c31924878111384a545a5c9ae97f4644702aff1bb7de7a9147bb264b74b32c9e5dc84644759e48f22cdcd2e730b96cca641f2a62fbc1023f01f0c35e257cbe80ff00a026a9611b4b0f5f97bd9d276ed06c496e8b13d08d85e1137b4c7b1844a9e0804f9587dad3951e4f959a100c0618dc0650208254001e3cdc6270f0f9da58d18d6f9ad02338d2bf224a831af0b02683b21864a0b38fa4f6c4d4f9ae8d8ba80688f520519e17e642e5ccd394dc419d7ca4fe79563a5152f0952d357593c3357fa554515cc6a82db21661b724636a05b3783c8c4986c53c40e0ff5ff40c0def33ea8e25ea28a27d7864775ff1880d70dd06cee863d7425c195e02f01ac7adf534cc018e679ba2d2a3bd7d236a85487addf6a4aaf7d707f785dbdbe35b575e61e9ea5ed4b5d49f304fc0db7ee119a6f746881f246687b92892418011a04b7c8b15e662e46d2ff94f37191d3b7aa4f0d430f27fbf9c08db1fc1cf7cca7c388b79d3edc7aa0c30b14965861354a5f901b837f728db1a18c0b129f550a64710119cff5ae77509fdad8638509782bd7ad0b165fd24d301f75293ee8b9b68b61471f8dd57b1c472d92b789d1cbc752d70bd4a1be7197d5abbfb89dac01dc12efa7cde05bd34bfe723d3513595efa6d9139c9c785c2b095c4f29eed53dad3bb7b2613e9de7e8f9df952ae8f53e183cc775b73a07a3076e56c94791671140d09744171f9822ada6319de5ef04d06f03d8660b95ec0b5c5007c0ff3bd5b86d2a338a95bd7439a678e93bbf5850214af775117b0b05ee241529720d5fc780726fff490b77a89080d563668f747824a96baa6ed23d1b62a936455411215ee509c35667e7e42c07990a8a32ca1fd2659b839d93284aac775986ed25eed2baed2d792826cd2e00db1d9578e05fb40ece18b4e70ba1cfc57e0aa9ed5849267a0961ce0583d8e435218bb099362b3ce6089c1a28a45096054208c2c04511d5d415650792d46b82ce77623cf6ea4d6acaa48419e570fc7beadcfea30e0212c551064e45ca6c1a7ee2f3f050e79ed5c08528be02ad26e2ed8f8315141146bb4b21fdccd055fd4f9e95f00f62d0bc0793f19377e55c669436758af7f3f13ed3a503e85d70567de714f6354a528006040d341532b02130e8bb1c1ad6e17082aec516b3826ad83ecb1caab8b2c5e4d61dba468db234fffd13eceecd890202899c5cb3e16a8c408657c524c0dc369b2745b5baaeffc7339beaee7776e69a4a7a5058cc45e6f118bd7ae523dc441e38090b21810dadde7c73a9b300f76ce7a5d0ab2d3f8efa888314cb8e034ceb19aabe9c79269dcb2aa77a79fc5f8af4c9d4d8a029c4fb856c62e39dfc6944344e5d1e16bc8896294d7b6a10ed69b30a09130499884430ac6f13a4c459b562d089b49c79cfa647fb8e30f189badb41c42f1b97bb2b6187a215924d2d4a385181c6f8be696d0d51771aa35c3e9e6c910b747f4bacd62a06470f3f18ba28596cc3a2f31f98dc12513fee6bc0ab0d527921c1061e84537245fd99c4e11a0b7e4fa99516aeda37368da80844b6bb3a1cbf905281be7fa854ba23eb543c13f863d70ec250ac46a01a9097a52a61c6149e2c7c94405f46642b9d52052147dce834add05942f7c46e9c0ced16126c753470bbeac8710153441c09389d595ccad6767181aa73766a5ed3c7d1c4ba3972be29305d0a21ce655cc089d74435511a79d5794e365a2def0c6e332942bee32162ce25cda2ebdeb120acdb12ee5c899efa516e5c3b27904ce2b4ffc54e4dd57b1a2e4a241dd4fb35c047793ef0cf485f21b3f70b573817ba1f75e99fe2eaf48cec904fe4b5a8c73b13abf3b93c0592d97d7632eb433a2a167758631cf41d3fa8fc01f44da8b8f1034055dde86c3594b60d37bf39e85a0ab12d7104284f9a870fd97d601cd6b05a4c9f5e7f4c032277fc2b693bda7504957045aaf32df30432941db11ff534839cfe525c520204462328aa6b6fe4d2c61613e0999b62ee2232786196b191c6afb28b68a88e89413b052cc0ad9152e5a5c43bc3b883bf4d590a5c0a34c512eb48d7674376e07ed6500d1f9af2486aec9d917ea385bc54d27008f19ee58923260fcce855e878f0d93b02134f495eafcd393f1c421c70e3df2249454c264ac2b4cde01a74678329422b334c1115d8798a6429e44a28c5c69b0bc582c228ddaea229495156a979b8d349079d02b87bce172d6b71b6450e1ffcf0170f3b2ed35ac311eb6ac141ee18d4ea7bc5abad7ec3be6b1d605b70a63727a9284dc0a2008086c7117182cd756bf7064ac5e81286443541e6b00b72dde5ac7dce229ad03509e0c347adbdafeae905a619fc072a547cf30cd493d8f7f1e4b18e0bc8a62ebcd53ff398689b189b0fd440d827d0b01f8f4a6afd92ac3b2b6ddaef23325e0d98bb5cb7e8d86448d5e786014e66d4b42bfb181bd3591850458bd41bc6f33bfd1fc1653d6a62566f37e6bb7e871544618212e4962a2b7ed8e92ce6e580156515d5e0cdb6cc56120b861789972ee463b0e174efa5c91029c186c18861562dd29e0a5ac5d9ac67fac7ca7f4bf04b4a8fcfe9a8ecc0532363282bac01bd510e8f6fa3ee6089030bb10225b7ceb64b08415ab462b5732cda69200ca7ecacb95a9c93fd27f4aa4ea87b98901c316fd8bdd6f36d0d99b131ad769407bedb43428f873314bd3b1d2e97fbc69303e1d7a3c7047ca608d2753303f14d6fe951976c9fb1d1f18273bcb41777cf3421db1471977543d92f37e2ce106efa5507ed0dbaace3e2adfd42390c684387cc8fa1abc0a353d732a583ee6256df3b951d2340e3f60c96fd371f7aa79b9e329c032f79fdbcdf9002e16c362bd426cbfe7641b2316228c434489af698a92134152994dde59c46ec0739f67c5da81caa1faaccbdae34b5768749dc87ff6e80a179336379c47ea3a0479a6027c3ba48743506f2f70721e06d1d65e1f9d016056390a62fc1b40bc1584906e9653359ff1830cdec2f5ef6b7ffb7bec2e299ac06b4f3376d8ae84faae14e6bef24eb63facab9c899d446f0796b2f2cde682f61d17939f348f729bfda9850a42cdbaf170b9857251d6543bd00de88b64c19aadcf8b379a455a95ac0d2932a709d1417cc21d1d05b4b3486c22d4212ced7d7a425fe0a3636a7a2fa3e0a27cdc379b4ec568409df54bedf90eb2629c3239c218f49ab46da1f7006c1cc00a5c478ba8c55abead4f1a04e217a1ff14f440319b80c3be2e94ed3a3c3d1f9cc750b4e2f90d9b438395c5faa8f87a3ac31292939807077f1224733815efd17a443fd02d2ba5e0b17ee9aa73091f45ff6e490ee2284c515b5c3e644e7696041e970d0efb07f60725f7b3d23ae125b06ed459a735dbe72376bca89638c3fc4f26021d5dd632737feb173994602d8b84b46ef2700dda1fe0358e45423be24f2a94df479c330d234028869f769779c15a5b9ac4adb38ea6c1f68db29d553f1d80524c7ff31a63c8796bff8b6e74643ef1908e8799b5cb58209af3313ac4f4531d3ef1ba133bde31e443c8ba8463ea190ae985224a7cafcf98185833e85fcb7747ba2ee18102e746e7898e3403c1d815663ed02e102290e8495b27bff7979fb7d9f8616f276b5373aa52319fce4ff17323df493ea41f6f25fc371640a0056f3339c0310e40116ded8307db0a4d02d7ab16a956d3fa88e18a5ac8573048e1f1ead13ca1cf068f4c2da80873a9c263b23db9a5bcf4e9cf68ac34c1369f226dd7d1cc32c1a5389a9875d9b7a59c254076f09de95abcedf8d43ed1bf5dab8f0e065362f39d8c6bb111de40da828e3478abb3a4dca40a258e8df535825f8a81c267e09a4f261299506548b4def1c0a881a2d6e941fac80c34042a9c8b898a18cb51c659f0e9ef1d59f1a1c856907073de42936a8abd47087a2cdb5362d934ea0508ab2a7427268733c4186161e39cabd6730270b4c542de5174cae03e4c17ee822a040a2bf57ccf4ca25bc2ae1dbf5f109f890d2d4f2cabf237161802ff6293f2897ce6782c38c4779c82f4a613e860a40810837f1647197af7cee7dfc7393929a11073581e4dc37ac86d00b201038de56fb2b4de6686a1f359e7be128663ea5a42a7be74ac4d694ac59237f4b852d28d1ec50a0cc450d7584e8178dbe552a1802032da9a2110944ea07a55ae7194409a1aee52a20c8ad01f83c48d7fe212ee601691e5fab48528a15a1b9a7b636921cb1d4f98a55b8b2858ee16196f777053081a92c1d878745b7a848f440840b45f34f46105f35facf81266f04ab557a3fd0b0d71dacdd25a3bf9f5c56b1caa51363d92f1d390b74b03d07c1baef705073375a65dc20ea9a0533534202585b295319017b5cae754379989efc82585f12ddb070f966561dfdc81b779a8451d26e782c6c5a97569d3f6a9bdf0344f0778d9dfe8c65cbc9946fd8cf51c260f1e3543dcf90221648b156db62628870d1d822472e8dfe966b3797fb78165c2df32477737fc2b35a282ae84913b7c0ac9db135a79ac8f0b9460bc26c65d937a816d5329c8f5222713c9b210444b86c30aa76a5554afb1c37ca650ba6b4861db848696ee0d9235877ecee5423d3a60733adc5f78b24f693eee335686f577d49e5e21c337b9bfaed800a3c768a23ec7f2d3e52fe87d8c5b9d71200516cd36744d7b8d770726428e04f9461affc8f5ba9d681f902ef0f1bd1590b2b1bb89111d0dee4a61e88e0446ae4c59de203d5feaf6f69f85dd44f664bda2fcc7e45857edeb3f354eb5b0b1fb974fc11551af5e0ed9ca39da8cc4f62f1afc27c7a5fc43977ebf19559b8fbba5a90ade90994cb7acb1ccfeb559a6bee723649a37a14b8c22ef84e1d349f1a887a4b47a820333ed1e40dd95a1d05392b75ea72964762e33eec76f693dd77bc0dca58a1271a27962d371baf096d6ca5b541cfae33e215617034a9ab7f70ea0c7aef551d86ab7028d0271b325676838f83a30863d7fddd52eaa68a0cb18bf09630ddf491a0ec60ff13918f4b35c2dbc89583fc59e930cf780d8a9046e2e243828d51da219115e910e24c5c1fa314f44d773cc1c83b9f7ee1cb630ac596673fd174152aa2a48a71128138b1cac291c5420182738655d2adc79639ac7b929a58a53e7842202542c736922c00a5c6c0e4fb8fcb3ab68a7cf51a6e8a69cd5b056e6e8ad121f57b3b92b13ea55d25f4dc3cab3804b95d5a864432a4621401a5069bb9be51c4de5a2e63bbae8b9db8ac667e2879763f53768b5728c5c154acd19d5c636a679b1c902f8b9272911d7aa652bb2bddc4736a2bf007db3f91d8b15fe687afb535c145c32bca4f18b9d1988a8734529e4095a3ee752f5b11149559d6ba3469110d86378308aded4e169ac6dcc312891a354d666cd49ba500a7c396f636ca624bb047ad1ec449380d51c9ae5a29d4127370aadd0119a5adc314b98df63bac9d816b56160d45356d888211d0b6b92a74b60f98250d4a69b65ebdd5674f250f4c8a33cb2ce658d8aa7c7dd6cc38150ec3aac28b176b7f7fbc7728c2f32546696d98cef925e01d9bdd9b15b590651355a74292b26841eed990d4ffba62b3fcb0a78ee405145b53aabafe5eff39bffc4734f918fc05dbe3f5914e7d18c19a6a61eeeb6133a88618b5240cc244c12b6cc177e5534a62eea581173171beb717f793476404eeaa160f04c34214274d341c6370075ab0056fbb2628fc7fa507f355ad69fd2e178bc16c79ea1e6331cca489c3bd45d118f365d850e86ea11d0fbae38cf53a7ec1467ef50f2b33b06e9818ed85f48ac17e15fb0d293ba78454778482f279648b44405073b53038161e9328feef9516625d4fb1635ff43d400ab133df17c69ab04a39da7ad52420fe4a15bcf3136ab46c954e2ef8755843a940787dd76c7b4e62ac4549f1334613f5e9d8ff34b9eba27aaf686f50d5c80e12707b1e262882fc88f145d6ec15911199ad9cbcf418888cd86451df65778a62158f7e907e7e0bfba5dcdb85b695135fa380032cfffa964344e3ba4ba1710dbdca0b0509930597b7ac46cc05230080c70807245c54afc6f4d2e3409f4ad35b8b1c6ce1c4c924061163b27df091caa2987648a19e6d7e5944ba062cd603230834041ed6485e3bdbd5e6e5ec7247e360d622745e9cfcffe48ba9a6a0dd293479f9fae04db230102137a81c0f4ace342059d3af33e2d7d3b91a6b70372397b13e0c41bc762118e68573d72b927881b3ebc92ae8c043abd8d0a01aecc104c0f339c6ba9e3b41ab69a6da37d470dc50f965b6695e259f0842b9630e022a1c7410ca40184d44bd2405444b77fd11be04c2948e577d35b718b2afc86b0454004953d7a031cf3d67ea8d9c7716787a816f431901128a0b17a2971b085409535621e9db160162f1d05ce43fe3bc54113d3d09680f1fdf23ca65841ebab724e9eb76872a78bfd82fa083a472d8b43b2ba3072a8b5c26032deb1a86185706462ad641a5c272b01bcf8b92cc86d8c6317b5168c67b1b63c16aa9be7a1103d25c6aa0dd41e8f59933cf4c6454d789c299dae0986dd83451399b79504c434a79ab50b024c51ef1450dcc9664bb164c305367148b3bb2590d8289fe4c9599e33038f0c0448cc45067398e6e8e3bda0f020838591942aa51fe6739ada8dbd0c063f54c69d7da502301d6f6006bb000f4255c0acaf724f386659d02442accdda315f76226e3ddb08ca0cd66928393136401b6ecc7366662ccd8a170ce9cd7e292398498d01de39d7e83f4e197212d0340908051591b687eb77c24aa5f59d5b21e3acb874a5d0fa90a5c6e3a84cc1f14a5266159fc782e6023507253bb5afc5ade41b1d7205f256473d7dc2e1fe64b4b0be68310c07b9a51bd288996c02a300a336c64ae6e00a7c9f406d00d8bacb2a02f53a4a0a22da40ccfe31ac3ed2f6b0d0ec09b42b9be01cc02a0aa0decdcb2286f1e0632fabe5c9e3ed00a92fab7b05184acb42b6d9f35230fb9288c692917efb652936e89b76359ca9ccf3528770d451edc6b70b27631bb21815315c12138e54b00400ecd6b7fc3eff65d49e8bc4990da3945d983851daa0e4e965257b0838c1aadf4e05458c87dfd95f0972c2bea0431aef92b532f149ebc8a76f13831621adfdc6f4fe8baee6475ece5d15325c104727f45f81fb0ef8fc7724548c7c0759a54c6013b5b01629299596f02b95d7195a746505a472fd1802c8757f4fbdfb871c8823099d6b7c30b2d17d666e9322cb7df6686ae9000bac472cd17648c573b7f399fdc461a1b69cac0c267c3c81e13b7ab6bc746f69f6f9cb1170c64badc2842ed7af71e3701af7316e05303d6e3608f929f73140bf27c6b26ba796d9c97e1a602e2f7e9a2aaf964e8dbc8bf367bf96d35a1efe93b299faa72e9e779d5c51776e81b0eb54a974b3320f45a9514a21617ffaf5eb53f8d136185cf5b19d9c877f4109ad5f458b1b6400be1cdcb13989adf9cb038f5497d890229460a5ff12f84827d5c9801d1e68b252775fbcebd0b647e6e6de84c7ca5ab68c3a1dabd27105cb58e51871193ce8f8f5608110ba2c6ba8cf31fdc9b053cf6593999a12ff0554885376473518b9d125da11cbb32d3fe1203bafba2a00c3d7be177d419d6598615d7a852de816026f682b42c79586d2582e5b88be5066dc918d6b6dac829fa9de0a1be0e6a709f542237886f49ea19ae45b80f3ed4a7d55c16b6814e000ec8f19a7f18b475db85ac9d0509c4ad1da2846ecb153af3475afd75a8376013443cf0939f4a59b4c68e68e82b7e0ff53c2b960c74d3d39674613b6b93452dbd9e566098cbb4f74a30e20a187f90510a8992bceaf2fe1728f7ecda49ef4692fa3d5ad925fc466e2e788c237af562d1415e98fdb0a896ab90e00c3477dbcb555e0c53bc7910d74678795a0c06e2d445cd5460feaa6e354de531ac5b028d961dfabf8c52edb9021a78ca409b9e41e2775f55b5d8c208e9af0711ad93e4e988de1826c382dbc91234fea54ee2a667c1713f9b5c8e310b73d5f4a847f8b00725afe9b78be1865a8622a9cb5afb98ea69973f791228222ec14325b750c74f899869a9c2be88e342ed98154546bece09007ceb8b8791864fd3969ed587b9cc77041d9ecbc1a95e47dbdc957aaf01b024bcbaeb259ee33841776da012da656e9b39111afd2f8bb9512ffcf02b1bf92694f10c60c4c66459c1aaa89dfe566477735341e3288114507a468847cdabcb553f84c68a0e109eb3c522f4e53ca4888d451362f64d149e2fa13dc516206f4bfa9ecec32f01db550b41f2ed0381eeb504ccb90abca3d09ccda9d6059928869cb198c25d3319692386e266364708275e914662c27b22f320712f464bc940093add38c2552b8e692ac18a472beff67e08ce13a7178e0e2f5ff86132cdbfc43c02a188b26e32c258cb88c97844319f9d1adb1b848aaf743981b26f6530fa3bbbad3668f33494ddbcb0085cdae297043c024ec34b0848d03a8d68371691ae606ce992e25c6c0e824cb3ae190538face513305a3a63bf201543937b8d64221d2d27332c4cc5c0ee1ce63273d8eecef39f86d31996a722ec250c624acc7bfc8fddb99010bc0afbc214b44989152f6b3973882603749269d76cb3a16a5f36be7b04039e3390c02b4b4d8db9c4e4b9742bc071369e3c20f02f668a2852d24e42f3b74f873b3e03f80ceb0c81c4f5b9e31924a1fb37bb5d9c5733a4bab888fa98a3778641433f95161bcc70f900c4ac27fc52b63acf09a1de1affe01cf8e0ee606c0fb2dd3f20d1c293abee5fbe49555e41e175ed5e0104b806da4a4569a3544ed076f9ce264d8a9c071e53d62fd7a353d8929b832229a7d7439d326855f255126ca5bb1c7a66b66830f79b3099a5b2542e1b4cdb60c84ea3e1c1240f24fb24203c6a2f91e3c9ac5d4ee803cf76d3d09fe1378a1a11fca27b896b2f9fec97a38c0e549528a91444cca85420945725e83f331ab4cc0a644814a8f12f15f6df85031ce2e219f69479b902012a4be0889f6d11d607fef28452caae17301fd0f2e4ca22014024050ee0c442087ec58660b2a2a1b731a27a7a85125c1f514fd3c36160abb8d3c7d7e633070e81c5fc6f7a710ed5aebc9d4d0de29f2e05fefd1c681a4c20e883a10a79ad3a370440ed6b84baa9f5dd10781f9e0c2698c7a71dc3cd8f52bbe96583f97cdd402321d37c88f6e373183d16ba072dc9c2f50a33ec26b17a632a09cb5627bd6979df3bee28d7c24c4a49ac7bc10e1ea4b64a4a9aa17d30223d434b1ce68568d027521a5e8a87007d8414880a37ae74bc81bf811b4a70ecfdc08e57126a1e5e856bc01a9c4539c45221f7516e41de16084912b787de58e0f525b1c2224f12748bd3f34eba7a86b663ff9f7ec435806790d0c48a51500daaa2a06b57e9732dda915d3eb9872aa043d0db46c9329f387bccbaa37d3261e2c9bf160106fa8b9f572b7615eb456c04f7942ede1bce84b30e3eac00bf944e5335286bbbb2366ea7bf47d116b05d26bba818e1508515032a7d3147d3f617683114c5991044d418fccb0e8a0962c1e5a0d74600eff900a0d7e3b24d32483470110b5dea3b9d1a4724e66d835abe9d8325e68bbea247917cf39e1d098414176e5703e7168021f812304a1f32822b47818fb423d39e0ec0edf701288c5b5018b7a690956405eded3ab621702ce948f719d09914ad5a5f380e7db9d587ae5dc258c5197a43b969856c08cd9296f202e482593d11b8246cf59e0445406fbb347a788acd7a7fd6c640f8288d9caa411f7ad30fb2ce9a9850f005d89767ffe41937f25df184141ccab016b21540e26aa7eaeb1997eb77de25aee46bb288c2c4dece5d9cb4a13102a12ade2b6d4586f5d9048c8f7213fe0b25bf3db51f004f01ba8053165f72e4415a43819986dfb986c4cfe4b1422e1c8e5949300fbb582cfe872d5d5c14f2914072c0b3458eba81569703a532a9cf4bbe63a8a72fefd4c1426e57a85968fd9356a4fd9079e6ab346e5db9796a18421b42334bd365bd6e9243ec82933ee895c6b9cd5f956ae944fe4b04a2b51ab4c663da9e6a74c990207d19261280634c6eac926ba32ceed5ca662b86d1d9274f6912bec86f25cb3ae823557604d75a46b4432784fe2f1ad6c9cb3217fbd9c16670e1f0a7749463c474333365a9a583fda41b37cecfa01ba06474ecaa66ca68246fe7cde26827d4196c8363152d00767dc5687d4bcaf10df0801cb9f4237ca3e3806747fdc18a11a0685afb407d1dd47a0440dbf039af005e89420893cbdfb1d74c7750112e1a291e0af705ef3b781c5b94b41647a2b00abae390485cc27d62a173c0316c96c21c20929f179ef646928c87c5198aa44ef5082fca0cd116d08513e8942f2e0ead1f09b43f51288f125b29a474161b26b7d3fcd000a0e2f4143b44e20e083efb35836707074fe25ce622310e39708fcf3033500d755c9a3e106271b93374c10f2a02b08665d3869d348022ac9dc0f95798bdf3f2808a6a4209c3ac70e094f2f9ede5292c79478911e93aa35afaf4c12787ef02b54c54e06f24c35254141cb9b6939900c42e4738b31fd152a901d087b8542fa4a9a9c2118f8fdb9584aac334caaade79b4bc7abe0468292e5eda496dc44c8a2e772329c61c82c5a7d9383487a202c72dbe8454c76e128c7ad942ed8e79780fe79a8a91280cba5c8c2e1917795e86361b97405ab4491a5e97543b74996c05dd4a52bdef006551c0ee4342945505c78e84359a56d17681b65f46eb3adb030a441e1dbf7fae0c511f975e4de4476fa6d7597bd04972cb19c5f82cee2cfb51ec61970ede89b5c8df0770078217eb5b917ea5dc3d30d70e483c1303c7fe1803dc1e1dd602eabd086cd0b03b1d014650486367d77aa17c1c6cffc5c2ae3dab839b03f777506b0ad4c668867e6cc8abcf39f11ffaec1bfaf97141fa18db7831ad202f8ce139f61921153d56aa957b7510f37bc68ae73ef1597686e138f26c592fdb3a94a268bc66c7c7532cc8e7293393c476573376a0e0baf373286b1e9441a63dd81089925a9ff8e1346a7cec84f50770d8bb2b1126fe07fe2ca0d8fc0be65cf77c0950af83778f45495216d0715c15cfea01537fb9536aaaaf6ffee5296225e72ea805af400b5fbdccc2fc08eb3f566f6d11549acf40f83876588d01b90ffb8e0ba79ea264881d9c404807f90bfc20a871481b7b97c59cd0a86d728f1d591d2ad0abeb0e197c4c6a02e8e5c7c0b9daef6b82770b4ed35ac8661c52c7c860730ad6021dc566a18faf429b61ff6301cc81c38fe93212a4a479ceff7e70b239158115af0ad57898c468acb928550a85f860d13e0fcee362702b4c8c1404a5d470b92e7337eac59f03b8f0f12e7c993ae2222cff39b009784b8ea94fa6381ca25bca06cf3eee663f3fe224865d7dd1b4e121ec85ecaf131b25ec1c4b3ed22bd648deaba89e0fc47300b45b26112826f237ffad32142197f85027f7d31305bb3aa6474ae87af55aa7f8307b0e81952005917d8ea838a8972a61f6da46a5a4d9bd7e21a203d04595b32650412f25d0b49e08e51cf2406345833b538f6edda5fe508aaaa02b0d0e06be8049a76cec2beb774a1ea0f748a1139aedc6b8933faf43dedb2a6a49f9b5ed01a8bc72b0502cb9878e53a17d6489b4db20b34b79e810517ba36b2de0e05ba9b012228316ac10910345d1815c78700f8d173122c4f1cb8eb3b5abb0c94d82b25e707f1d7eb9a40a5b5835ded3158b8e80d1037f216674ff8884cb65c67d2a624f875be24f258f2e3afd9f4db3986f64f749b040f2aea606940addfebb92e214d345761a6edc825e4afffd075a73ec01712ab134e3d4eaad5e1ee855630d9ecfce07dd0779b3f84feea521b211ceb5fd75c3001b81d060e368de4d235dd6d9eb827c55007a87714df6fad3887dedf9225359715705912d38e773331dc1acd44d2b045aafb0b301285c6a26a61101cb6c05c66b1369e513846f7c49c49ac9c72e415076e95419d88bb2e18ec2dfa30a50b5ed2bb72830b2779d143ea56ff9312e8a6abc3d1a37ca13c247c3302dcc12e31c2bbffd2b6303aa204560d3ab3b27b2e03de211c65203a8088739854002629d824342e4ed110e145a32aa79a87ab937b04d3c0522ef3bbe56aa8afe5607e11396008d5d665fb91c4ba3f049e0397bd31b8ea6df8ceab7aa722e6fce223d754b6a2c07e7b8cb4b7d989d89fe17dd3b8c175b18c5d86c5b7478daa61c1eb8a8a9b7e8d8710bf048cf1785fe2ce0d97b4aa073abef35c92d615cab842b9e0c8c6e60d686716635e4d092f79e250ba71a18b2afeaa3ab598621ff29ae75217c34507641607bc568be8703a1ed8d43b91564a4b0307e228734ddc0206c9155ee0bc8b4c1b467b6a13d917d87b2d2060c360ab9e345114606b2a770c8036aae9ccea7f1a44e0f10477e6779b8c4fc5e8960307beebe4481a098530c8b344b593f907b5da53a8b80d0443b81576118723537579cea018ba108c221433acf57fbc5335c21de9d78c26723b81675b7a6a94fb6da8c774e182a5d6493f94ee7c11efd0d1bcfe644562c491eccaa5b216bc67b100ea052eee691985b9c8ecaf466f911e8e47d945fb23b9e09979c8fd193b933edce7655ede3643946097e1503be0a74c5419bad0ea94a5bc9762dbbcef9459bcffc66289004be12fc52e9890c5a3d536a824eff7656040f37d5f7318cc52315c0cde9e051f8878ac8100601171835ffdddae92970e9c98dc1bd74171d3f22eb28b60bff3af392762de1aaa131c11145532215dae1385807392fbb86e12e7b7e82b3448db84ac30ba41f9f8bdfeef64187c286db1c89d23ee5e58d972bf910c528c65593f1a7b894004f387754507d608e9d2ba6b0331b8fc90c30bb6029435c464f2cdf029577d651a51d8aea80d90a19197ddd7ee6d205160e6c067290e75491ab87509c77c839005ffe66fee5300101cd4aa8c1c373b097945cd6c3a8e9859ed81c46f328197388800bd8d343a5e0561b00aa317024d37292f321294d2c94592053bb57a0365ab05e8a4ddcaffc67bb0fdcfd69e4a1b7bde49d40f9c369f02722d5d6b6b094f15f235e5643254319f90286131be7b640256fa8f478c1f5ea9c5f2e5279b4d6c2e87d048669cdb72a58e1e9de964d80c617f2dc59c105a19bd79dcd4c29e0db2909f4508742d796c20143f127f85cae1efb2bc035cd6a334885d5d54cbb8eb9caece60387bf4a9676a3db76603d1d741d95012b0581ac4c7b77133a62ca8361ca3dbe7d717ea6f7c0b84f3e2635c32e4bc4363f719d14b420b0c03b9d587a13942bb1f926502e42c159f0ef79b8930b0c4e4ffed007c1d158202795e8105a0dc2632927bd8b7901379bcf4601e16245e369e77e4e3a0712af8183ccbabaa72d08171a1f03736603d90513dd87f75679ffc13f071ae2646a623dddbaa39cfeba7cb0eabc78b81e09c62ec2746607c1d758da84831f1698d7fa0c1e96c0d1f55d77582c1fece3e1b09e26594546556d867e4b931a810dcd3004a42636ecc026d9a53619cca70b5b3923dae7c9dd283dcd8004a0711c8f4e2250b9c0808dd6463d942c562dfbcfd99305037467244734c19c569eceac4b62efeefeb17ab8a9f5ce014fb8d09592b5e99e2ced1a80670403010eb80c24882c7189f7936ada576a93bef2f1685703e7134c11e4cd123498599ab5d4d401fc0ccd2ae17680cbde852fd2ce4e2f16f1d1ed6015e1c997de4080ff8fe53232f45133a0146994a5502cc452dfe5fac8c687ab12046676abf2ea97844c0b77e80823cc8f9aabd7e9031c2d7758fd9b100482e1b40c8a89fe73eda0de306370bb5a69948f45977daef7aeaabcf7f3eb8a675ad185a1f6e8a71a1594e3638437c39d8af7bb936702b5f1d2a9f04fd7c6b66d2d414acb8d771e75486f2031bc0d1c4e4061610e4ca863c5ec02690465857cf61a75ec3bf6c2661b8f01f531e7387aaf428fe931dcf06192e29b20eedc6e83f42dacbae36e8313b942b3de54fe50641f31ba3aa41435f6a0c8bfe2e5c073fdee138942d575ff3106c895520b5a486bab770771c058b9caa7fde2dda1e44d71233d2f5f5e5e3783cdaf789c459a11a5011a0e8c945c0f518d6834594a49535384251a043c3e9da1f20f78b8a9b499e76c874920f5634dedb024775c74c49970ef90e2b4bfbc7f202d6c75ff5ce847e0273b569d7e5ec6dbbf0b068459f1fe9211e4e4ff87b36043e04e15eb2d4a6557ba4105ec0b225f4a692964b6f587a26f50259a2224f48cd5fdff9cc09a06ffb94e69e20285c4ad8dfa6426ca5f495a19e2411fac88c841b99521ad540aea96b228f44be9e47fc4da1c8a4c1bddc6705913e99726a1f3281b51ae69f488cb068e31cb7087bc309901d3c27dbc8607f9116c2926ff7319347397867118d3c1c02c86b454f875b60074d45efaafaaf637c3bc01dfe78898e1aa0b1d3a2c4e7ac139bcb21ce45a047ab2dfc05720504a4e077ebebadd3bba413a385ca244f1104244121dde55ed51008a2ca5a3e75a5d548c91ae2f411d4d9759ea458652f921b9dc7e59a50f67bbcd30076b73c78e00f5677b633b7e076b2424a4eddd6defbda59429c9750b6f0c360ce390a12c579c6a44aa0c4cdefc6849dc10a756c759e32255874c6dc837c588548dc8c462840b5b7454d488bc82a859329c5a60b8214a6d42a13465a936c33845d154e32655a024d5ea1844a506725cb72a8fbe7d46a1a689a45a1d7b90d4e6172c62a46a4fd49ad21280f4d4ada95d76cf12d5403b0ea16f6858532302ca6048238169aa11c9a1830d4b6ad6eb38846f3522734bcd9253908459aa1101aa236789218c24b55423129464ca87e602431b2e9c6a43b80810646a44e891daec034ceea637b580ba62aa564790895a93f4a8db93526bd672d672d6d65a2ba5941ea1dd9ad45ace5aceda5a6b9d94c697690dec2cc7614accd64ffff829a5b4bbbb8da8b59b99f9fbb8efe3be2fc6f480509a1562ceda0a6185b801b04f93669554242c005f5a2194e8d356752a270c76ef37d5ed20d779d982e13daf53f4bb5fd7ea14a553758ad6299fe209361f40f7416b203984484d557e3324cf6e95a85da296e97b8cf23d6f38b14b753c743d499680ad716ebdb68c8637a0fe9d3776462fb754715e93386fee3a7208911a47322db9b5ce26bdf65aadbd5d16b34499c04e00d82c96add29f64b982256b2ac8b24a942ba5475f048b13517fabcd2a55e63ad352ea74c8140bf01b22ba706e7d4875ce9244b8871bf870aba94084bcd5aa57d246d11977db2970fe9456ea79c89d5cc67cf9c9458c932fa9d44f2e62d83c559a44f4893acd78e2961e95519a0a0e9d2fbedc6a3cb582d51627ba28dd6adc4f37251a668c13596e357666a2b419756ba2b4a66345e9d64c94d6ec7deb24254a7345c120cdadc6de4b1d1515670d194a6b29298eeaa99e7a768ed2c44e25501a75fa22268678aab1ff00d24e97de286dd66aec4394c6b5d924d3dbb3952a0376b51cedba6e5a5187c94c0c7e50634689014b1c89538495179c69c346092a6fbef3b08540f8aecd7cd7753dc4de23449697f1134b141533e8b2042cd927bb17ce1b1d4271a7d79f58a2c299832f6b6d2de0990b9be29be29ba2fbce19c23e33b779de10e0499fc09f027676f2538c80f7dc006bab2d633102de7bf3c664e6eab5cf160a22d0f718885d04d7ab655140fe594578fd54813c43d497e7196eec2716335918765ba8b4ded6277f51b77c3dd7d8efcf1fe62038cee7cf9c94db9fda7a2c81d27ecea82f3115a60c47b5aca526d8da2105d5b2e979cca36f6f491d2da3466308534c6f51319f42d0413b8eeb382f3bb71e9bc0aca97cc87caab1e07316a8bc556fb7eaf37d3037f64f31e6913d54e4fb984fb5d9799e771e09e3e7be2fb79265d0cf2f886e266e599f32fdbe5c7602aaa02840cbcaac1503992a0cd276f17c44311e501ac2e032a5945ef1784228975de5354843e530e932a594d2a75d1ab0b9af96e3a1f10abaae07c57015f2587f04af7fc5260375f03e0f5ebbd3a2c12dbd960c6ee975ed4ac718f5efc507999907f3f74c5a2fb7f42cfdfafc204782f0a0373ea80a796c5914eca760455b2915c5e6f9853cdcf9f168fffb78ec0755e1a567980c9f2b1872a5b06a5fb39b9ef7a0ea13c515bc17875231484899c34ca9e7dd0b83b9cb6436896ef5b58538fb5f9b7e67ad53766a9f398e64eeba315934a5f469875adfd0254a290b5928cd49bd4aa78ce37ccec9bdaab5c6f52d498947da1b0deef4ae55cfbbf636653505d87f757bab0ebb8d5f3bf076c7f8d641ae4e9552adc362bab676b3d6ead82447833bad953b7db44ab07bbb2477da666be748a7b8c7343582d629d5e6e03291ca759e772f0ce62e935925ba95ad2deee09e72477e49b01b05bdf1a7672c75a5bc07c652957cfaa99250813a801cb70533178a30108fac64480157539f6793265107a63acda807e79cb4575ead9986558e858a1a9952156a4fe47c7f71bea90fce8a69de68f7e4dce9e547e73776cd1b51e89cf31e94f6795ed4442105ef7b02594f01f673def8a628ed1b61d6fad477c981a73b489e4c571dc9f386a5b5ce7135a790c0f9d3792fd513deb7130563f14d42cb5a477c2a066a01a102c3e975bed842e5795fbb8a8e83a02a1459419f0a0c59caf3ee85c1dc6532bb450cebd8d332981322fb20bbcdb8dd6e2b4c9ae7ed4e691ec96982f81dd80696c1859ecdf976a46f6f9f8175cba1201064331f61333c0f060dc377b7f05d729d0fbde42d44cf0bef056130157993795883cb52f3c693ab7a8fb572ed8453ea76c5bc3183efc0586aceb098b4cfdbf946691fc95ff0161ff993d23cd25b005fe14a5c85e04af5adbc6ec5d9555dd1660370dc6535d731b20067d75aad7ddd703f2f7fd69440695efb0faf69ada357eb4fb707c15ae87a0bc5f05e89eef2d942d5e52075f9146dd5e546ad62dd5779f42d076918637cf9145b945217613e25633c1e843ac753eb7d97bf78c6595fe38e4fd1bec6a3b73bd7eb75d7580af9eb46b435de96dd4bce3a7a4ce52949daa09fd77589e3db7184e0a385ac0fe530d23102395f61cb6e3cac02829919647d2a1557fe6857011d309f1ecdeffbfce8bdb174203fddda6ff49c27f56e3cfac951b7d48d686551fe2972149442e9a0b4708829e52aeb19536166366a5950d3847c2aa7b6853eabea5ce5e0581e3d586b7511e65732267a90ea9ee89f1f3d7379c5718647dfa1ca79e446230ad250a5f2ea472bad6e2dadb576505cebb5ecc62019adb4bae7df96a3e353ef08ec865b86e5900e3a64a795ae323aab4ca569e17c0bcec611de176c829dada0576df89e8a395e7990951dbb57d6b60541326cd9f49eec41b2ce465090edbc9475dd411ff88d41321b32cebb2ab311d491e5f835985ceb1e29f53d8175ceacdb7abf2bb7fc79fbc395d5e6b3651dd86c291370ce39c92028b70c922a19ca5ba7540849bbb7dbed66b9cb715c6b04d233eb9c577e8e5b0a71bc75202128610424fcf0d142a15b0fa169d72d8ea6f12d47d338893aa55d9295e8ccfab5a46ac877201d57f09da7e080f93474903dcf7311e67ba40a4d373a96fed4572cff8efe6385be1acb8efad0bbd08da8188664c8374a9b3e6df5a08e1345a8ee552ada54b506935b9dbdae460c5c055be5423b3f672db5a203e673bb154738fa66cf8623156d21331913613e93b1ce83903598dcd80ea6deb9ca8fbec7322c5378ebf9377ef6e8edd8473010e83d964ce541f7c652c8836e44c391aafc2b693b282ee76ed4747c3a6f50f7bcda31fcb8d13b53b2b8a3036ffd136d1f57dd0bc7b764ad1d1270fe949dd4db2fac1e70b7166de3175615778379f8a9c0008c4402f0b95107609ca2223d6c95caf973466aa1f2ded7109be4f425772be79c217ce36e9c92b7dcad32df3ad04beef63987a187e40f126afd8ce80f12b82293d664b8187ceac7373294c6484edeba0f59c2423be4885b992839776fc3683c673e6e3f252d263e5e724ec2cfb9221f70505aa8a985da3d243786b71f78c9d1f0968bf29693f2dc2d1c3bd176020f7f15296b998f773c862ab201eca187e40763c9efe3fcd3321f0769c81dfaf817aab82491bb71489f950b3a67a74aeee60366b997f421006ea75aa85d494949494989060d1a30d99c777ea17fdfe7df57bfd04ea92ac97dd49d8ab6d17f64400353e883fa398f7ff079f779fdbeeff3194b1fefbeebec6028ae00200300ed56f5fbbeaf86a1b7dca841b1fb71eea8744e327ec68a34d6a4fed232ebb2b1a37a661d14c115df5843867ce0354a6daa4ed5499552a94079eb1f7cce638f160add7a37f257a5aa5499d425b27e610d2fb95b8b11b861e82d329c122526f5f6e33d5a2824cb6e8416bae48fa7c0ff817724b9c535ea9fb126552456385b8849cbacdba9f44db99ef778074ebd7e494b1c1317a585bc9893b71c94b79663f2d6c97042d55b480609af07a94915c9724921b48cecfc83b19f3a4bcfc8309391955849bdfd901d39a42acda9760aecc097efb89d527576ea1bdd6b8c3a3cf0c0fd73d2b91b87e46e9d5332597335c549fbf18d21b48c248dc6b13259e26e94f683ceacd79024e36455ea29ab12872489068d189744e3fbc8d2c75d6e447dc6f91e8cf33b18ef8bc60cee368797b8db245356ee5695cafaaeb135a6c07fc9115a66fd07b52c928c385b56ad776f509014d901d4e9b690d022a2a060cc807184a72ed7842388eb553173bb24a8911b6a6972bd30cd745565aa1226da85aed04fae0b4a75e17a55fa058e73e6c81630ec6629e3d59d59f2e54fbf01efdd99fc74bdcec371c4e51e8793eb556973bb246a70c39f58c4685173ad88b9220762de740c6e6784a1b82d24b48beb559973bf2f6f551a33e6ae70b99f58c65ca1e3c2dc4c155fcaa29a86dc87fcc9830d4149bde73dbd27f59ebb37f5dedf86dedbb9551666515d9a40ecb586167ece2f515d745182f4029d36b559e689d31b2d4ba0a9424a8d996e58e3040e48bc847962e6f0c4125e989c4933268b5ac94f454b7878c1c8d2912fdad44a8e7a1f2850bee0028a274ba2d44a2633357b8bc94d3fdffcf4396173e8a7074d1dd3814c67a449746ba1120c7d101fb20221d37f4c379a2e9b7e67d3ed769361c279badd6e4a6ad386f00563e285b76e6536dee2187aeb464f6f3deb5fae97730c1022de5a24cb63e3d4f036864d5212c34b66b2f4d699890a116f19cadb2852de7ac9549c9f5ac87296b750fce52dcc5a672928236fd3bce5356e188e854af396c7769212264ede7a333d79eb6543796b5bca5b2a6fadbcf57e4af2fab2b3940df5e56d8f69a92bdeaeac975db69bb70de7adcfd964806fb90ed1d6b222c4bb5c2e97cbc75dae2728ef0a5d5ab87adce56ab97cba5c2e09c021220b132e5c71c20a974f4a83ed2045141642d8e04413aed62b8b2f7bb2d8c0e24b1cdfeaf22d33df728f063c7c2b09a56f2521e75b2d0faa010dbee52288b6d6504f4f4f8f952ddfe30d106d3deee3c647cac7ab8fcf116ade078930ef73840eefe336d1e613826873097d075bc67c07ce00d1d68117e3636e3ed6f258cce5b1d80d7596780267092a30d8a216838013115155d2dcc00b175b92f898bb5eef2a7bdea5a5e95d2e979628deb585c9bbbc26da5cde6ab55a2d7fd1d632126db125c07ce86118fa8f8d16eaf1d083bab8f0618c904d183a09610761188661ccc3d083300cc3d0c7c3d0c3300cc3300cbba07977f7058836f77c7c7c7c7c5c01a2cdc7832e4fde034f8068f3c08bc562b198e7b8f11d2c41c577e045a2ad8356abd56ab55aad56cb89445bcb89efa1f33d8e00d1d6e3d5265c72dee543a2cd45136d21140cbed6365fdd7f6c34add66a857af2b555d9b8bc3a09334d8572fa5a5b4c9c4085f9ba5319aa85625e9dbff0183e73b424082e3958d1d2444e0d2ef8d0258b1c335d60d0a2569b888326491d1996c01283da0d3a524e45c82083261b6eb572d3578f79f9582c167321d116f396c35aeeb5a086f8961f40b4b55c2e97cbe572b95c2ec721da5c340ca2dc058ac987ee8550317ce806106d6101445b95f2a7c1c58aa7e12088361a3366cc9831c38366ccf0277e060f411f7a90576b75af72c1e1ab0389b6ea04106d33866033687a98df106db021a0f0780bb97ce53f365633b8e157ab2c56fea3855abe721256e16ab5f2550f4e20a962053149702162f5b42488245e56102385ceca695fbe867802c01036f8d06d88b6b0d58afa967bad218cf8960f40b4b55c89578f8d8943cb57f79a6ef0d52f95af0e7359d0d4d7a6295f5d00a2ad0e4d3a62caf4e034870d961bb8d6bc8b898d9b1fb4c010c50a333557d30feff2996873b94cb4ad645071f2323c00a24d86f772d8ebe53f2f0f7ab9f7bafff2f9c2bf6660e6c3027ce800106de107a2adfa8f687b0dc5e0f231bc86688be1bd7e078bdf716fa1d077fc6767c7839ac64ab7db0d496d4786a62b7596dc7c59614b6dc727a59150a58c981998bc608a30b5f2fe8ecf19fc4ef9eaf9fae3f3a58d32c7eccb99e5ca0a34aedcf0d56157bcf8eaae0497af2eabe1ab076131e2ab1b6549f2d549d156a13a0c4337a10d5566a0a44508264b6629fbd067e86168830fddbff8d08de47ce81ea58160a4a98a39388041aa8b5af8c4c587522eda76ce3c4f11659ec77d441b0f115e9e52354fdd7f6cb4102502ced315e525688bd22a659eee50f6425d4e77bc6427515a686229a2cb53294fd37cc950fc85c73c254324ce9418285aca84c1a1468db0a0050c103430e28b5a7927d4b481122d4178591aa20b256a06c882082469a6aaa841105dfccb6b0bcd27fee51e88b657bd22e86badee5c7cadd53b106d75a74a92dff11ed1b6a3812361a2a0428a2259bca995f75dae2bdee51ea5152581832a5ffc10869b3935571523eff2986873d1f81611527ccb6988b69617fa2c5f1f86b10f432a6c3e24c2e9432a603ef419a22dbcbffa95c356ee51d9f22b87b90cd146a56ed4edafc7106d97092a2f8a4dbce82eb3d1422b173d08cc0a2fee885688fe4374124411cc162fb6c446237a35d159147d8aee892206bed8428314255db4508438bdf8a18a15350821850c6220b6e007374e766052226507d127a50d608a2e9cea4cb9811354881ef4e50bcc0c5f6bf50ba6065f9d47b455d897afb267c6849aa7589ae8e12913569efa4bb4d1300c430f7d47b485357ec5440cbf7297685bb5449bc8f2a9e559543cd83d28f5600df4a0a1301eccf1830411045d08110f3a15a0b3520b31015720e81ea51dd1a0092dba68a2260a39526aa04f4adbe124861e6880c444530db5f29633ce8320962f2efc6ae52cd1b6f2eed75ac5d73a8327befa4ab4d5192f7a51f3a28ba24d5c4189a82b45bc1173840bb54a450d0b2e52535468c121861aade2e63df472c4870e8ab6d0136d60140218a1c5abfc136d2a21f1bf29fe7397d9f83ce8f3212bfecbf1df99ff41695eedfbd2fcb7e63ff7288dc611533ae400050c242cb56faab949bd400b183c11c597031a2ea0886021cd53ad9c4f5f0020ead060871e92c00187cfa71131f8cf0824be7af5bc25be7c3da57ed53c75ba027bdb3765e9edab93965107750cd1b1b4e40886261347d62533b73671d526ae027ce9aa4baebae4aa4b2e97cbd5d4e47235715fbad8c997ae09e64b57e92a5d49dfaed2c5f4ed2a5d4edf2e2d5a5ab4665fb6a65a53ada938df3af39de6db5b5f9a56917ac68ed41af3edad2aad365fb696be6c95adb295f4dd2a5b4cdfadb2e5f4dd7a2a73cb5cd997f7cc75f3672e9c6fbf495ca42f6f0cda6fd41d73cf7ca7f9f659dea4ef5b5ea6ef5b5ea7ef3b853585457ec96a6235b168138b75e63bcdb7b3be348d42f58c1d8a35e6db595a5825eb055fb24a56c94afa66b158b4c98a36598d5faee8d28a2eade8d22aceb7afc4845995ab355fae56abd5aa5c257dafca15d3f78a16116911d1bf142992e8e6299208e7db45316544518b2fc5265114c55264fa16a3683181b4a8f31dcef99eea197b19ba09e17c7b786ba19e607c1996210d5f8661184a856bbe7d9661d27758864cdf61193a7d874f5a2690963adf6043810d0536140882e097a6f5993e038ef97650cc1b50c997600952f9122cc1a46fb00499bec11274fa069fa6a8a6a8605faa9a544daaa69b4aa552a954aa6ef27593ef5bfa96bea5ef131346fdf2fbbeeffb3e3a13884e9d6f8ffde6f5cdf38c745f7a485d7ce93df9d2fbe14bcff3bcd24bfaf64a8fe9db2b3da76f4fcd045253e7bb5bd3ade9d67471bebd43f2ed658754f46507c3975dd9755d577649df5dd9317d77dd13131c33c1955c1417c545715c0daa2f398ee3388e93621e2610f350e7db46b1516c146bcfa4a1b1157bebd222bdf9d236591b45850944a7ce779df37cab6b6eb5d63335cdb7d72f4d63265cc77c7bbd55f9ae4852beac4b437c59cb5ad6a4ef5acbeaf45d9f4840b5a8f373be85507a43a2ed944a25f1255d43ddd826109da9a5cef71c1d7436d571befb4c9a6fef2f4d23e1cc981bcf453726107bc97482e88c3ba8bdbd34d2bff0652f35959df4dd4adfa5adf3ed2acc223b39cab74f2ed9e99bc9d0aeb5cf92a1ac7822be64a431df3e6412cdef9ea7f5f48cbdd61acb982b66996f0f6a1dbedd6befa19e4e44dd96d3457af65611b7a453cf5b6458b2ee3f36823cbb65c99b17c0532a349f00e2ebdbecd0abc0a050cfae92734b6a865d0473cbca2e367139286ed94dcfae9a72cb5e7af6b0c92dfbf6ece111b7e435cfae3a734b8e7a764ecd2deb7369d8c31c6e59d9431c6ec9b7671742697589adf5699f64f1d6436821f0adeb18c1ba0f1280787569e939cdd7a5ca24659e79f630885bce25378c5bd62f7b9e1da4737be7f6d579880bab2fab302b312b2faba870d5c46a4ced1f1b505db80273a3c09adc49f6c434ca0b574f7ce18a891514150c574edcd27bbb44cb9b870478e672d7afb5c278ca5cee4bff09e7b6739dc0b4961c42a436e9acbbfb08087259c165e4965ee59c2387300e627c8853abe4a4d506236a963caa710c4be834d5ec586d30a236451168915b7acf5fc4d89b0630a6d6d43a6a0a2c986a31266749b599e605b57e810b315235a4245648d56eb801863ab53afe80e12ab418824ead8e53ca082bd9828ed4114e4f4c359a19294f35b00b6d16e43e1e296e17060d511acb414fb4f558f9147794c040d58eb11d6409b8a8e4e744587d47321312b79de5ec568c49807abb05a83719eb2cd0ce2263dd518d9be8acb61c4667d5a7f860f9f54b0e99e2e37a8b1c727dd62a8b5481a583ceaab3bace3def4812c8188f2e88e79dcfafe2033cf2071993bd8d96c9a81881922c0103556ff101961c010355b7d58726114741c0a4f10f73567d680804106641cc14c44c65d08a64263aabced97099be1e2df55045cb97375aa828d56a9c26726813e50a12401c714bb2334b50cb989bd88999384a3d52b52a071d2b2aec3e5781dd58c2beebbaae1b551eaac68f478aeb623314c445aa559c960c3788d23ac85ed1132174a3164724919cc27d47de96bdbef36f2c5fa2873eb9280cc9f203c7c9402c36e0734f35723e82d7731d8b9dcf8ef3c9f9d3e8a5af20a3761ded41ed431d0536670554920d79104c76fdfa68a1180fee6b0f2e7a7d75d6946aca9707e956ea601523c091432d7b81714b06e207586f1f4df668590f4a664acdeade24fa316f541a06e6acfad0100820cc66e33863c6d7d657e71e7456b9237704328496bddc5cb6e36472fdeb5891daa2ce134b4c62a8d51c6c30358585e9083a5bd4aaf7a8fe638a8b03ce1f1ad61086cbe65687d12a34a9e7c9829a9ca44767a10bf7ab33491dd5acf740f2213b06d159e7d73ae783f38e1c32499f354baa606174c6b6dbab3769838cf1e820b296fdfca1dd3cf5d47bb4ac65944d4ce547b5282e72828b422e02bb34776912cd2b4f9de3501a8fc754640fa496bffca8b6e3a57bd937207426c435b214cc83791ea9c28e77464011e5569b358e4267d4a7883e6b53623b44ff5c24d90a19e3f1b9e82219849de6b760b8252b715148963eecf8ce8eef9044a680bee3d4b90b1781646c07e8a283648c47e8a0836410d043f2045ae7453216fad137d191b11d5fe79f1f09695996164aa165948b40a71c9de4d80206a2ce8ddde8cdb119887d677cf501d85b4d6ec9b720a287de051183701e72eedc183a37969e6beaca38beb58c8b9a1a03069933ac14924ae27c564a32bdf82249993935f0a2cc990fdef020070c122f80a20b4f92d59ca7d5e75bbfe427725ce8e27802d7a953278c17bf4ce1ff1b4fe017c91284cf914142f7c021afaf9e870e8ea17f630c74ce45262de0a28e8ced705aa7ce7f64c9df9d60059f83e30944077da2c0e73917471d9f73e0a863be386f9dabe86b6c9dc0757e253ee765083ee7a5ca04ce4b139e731164da0e597b06fa6c59f820cbbf7064f91d990947f29253d1c622596989e64515578a20020a1b2ad30a2f50841802e906226ed487b42005955f212500015be34e8b77f8a836e92c96c49d35970fd119f5293e76a6f868b98b1c2223279ded902d2f654f777cd65c3b23e7b336051c1213e2d2ff7cd656a075ead4a604e11ee02019dbf1b9e79f7b203896b0d2eb31e96ce8e34972cb790647d22de719125a8813777cce8d31ce45efead4a953e7794ccba80ece45525473392439aa652f1bdc52e5a0770e8e9e6accc140d3a718818f2462a0e91ea9808e84e79c8b8ebca6bd7e04a62b459dd750e728ea4ce64ed9a355f32099ccdddc4a2d546bb5b65a25f2049b0f9cfba07506e074aeb4565a5ba8f21ce77f6e6e6973b04c93366d0e93a83a5ba74996df4fae5b7c39eb4a398e1c42a4f6340478e7f4b900f04eda7c2a9385921ca061418a216817a8e28c9727b05401c40ed3bd397d1acd687243a54e659125ea0a2a635858dc6461f77ef0a106418b4481944b95ef1a282004ef1ab9c11ad1c182b408089e9ca4a1828b34313cf9f114068918645841a90c9b2f2c9b396ca46051aa2a580cebbed1fb3e6fce3a29ab89150509acb5d65a6bad75cedb25d4428ba24f68bef098aa00237c011a25236890d3c6290b1a8a38138592275e544103707ae04ea832567ec64fa8324caadbcfa19e7d7b6bcedaef9d37b8156e0e1c2df312c733ecaab994f421e66308e72a18b1ce91310b742a70de91536a1c79e98c279d3179bbacfdb6c3289b2ab268f2a6d729878618248142058c2647a4c4a801030a216ce0644a8d527a7beac391a7d47d78fdcac285356dbe1bb6262a16be641853438da24a526ea6d0b030a6061503ae4869d3450f467cf1c4a482cb972fe8d46922a5a5bab70509384fdd4b03f573cb4f2c698a74e8254bf472b5f252647d692f837ece6e5f2f412f55aa97108f500c26c3a7ff08a135693b442e9f208d1a32dc1452a825e74cbbcea0e1f73583c67802bfe705f1bc7255c833356aaf96e1cfa01ccbe99633aa071021317cfc20210425b410ccdb47d04232bc3de6f9cb5f4efdf3d7475abfafefe5796c0ce2b9375a07cbfb5c328fce4bf6d74ca13e8dc5e6bf03a1341c6e6a00c308168ec8d1a1d65e02a51dd1c00ba43851e8bc80c5975ab7477bd0f018ed7c4e8fd2603d284d46d2204bcfab942c61d3e76132468e31322b697f8d3ba38f0a40f1ed378aef1b2b518a76703cf3acd4324adbc09cb5cf395cbad0e2dbcba16f35df3daadcd2b39cc657f01c7aeff9c472859c67fa1cc9564c32751ed1e055185c53949495a6296e4d9c8c3053b069d205cb0c4ca0202a88a4274eb0a0e4450ba580fb20b36535c0d942ed65cfcb6797e0fcf9f9e91cb447b5e93d4e6593881ff4e92f1808ba4fa1f2e8ad6803c7fa3daa1cf4a7dbed064548e5dff7fd7c17ee00c9d8a722e97fcef5f0e88ce392ee0842d032ce5f53b7bd9c69e6d41251cfdf31ddb2967504ea3a6a770853c8c88ba2516fd45e4014d853f09e73ebe018e331bdf37edacf29f9d809a9eae132134e6a9952cb9284aca7b0822141943681501a181414144eef5050f9e746cd4b2db3de779bd6af07bb0e0b7a2b65e71fdd6ade85b9ad7149979df06bea32930c6a18aa1b962b9c74530c94b05471054b154b6154768f6fd6ca1aa49f58b080f308f889050ba7bf2f2c6b9ebab1ac71faee76b186e96204b8179e88d50beb75d985b514b4a70be0f21468f2a8b96a6ef7659d444d93c09c512f6d933de60deaa0172cd66002f441f30675ea77d2409833ea3366b85caa2f81cad5d34a02cd1bd47170fd813c2b4db298a9b3c50919d41e00668815a2c0cca9f2458d7a0f4a0393849103c6083869b4d4a8ffa0b49d304a3051a5882429236a534484eded93e73bf8409c339e1dea70cb7076735d9547cf6174dd330cc04f2c6c94d0b45162c9f7073fb164d1e655689ea09fe5badadd0d80c1123d1c1115678a93274070a1a58a2a78807253eb1a68d7f9663fb1b029028d1828e80c4bf09b269070162324d13451485a882f90b40e06609529126785a817a0e9d242b521893a994e2069322becd001873649a0b872c51224cd048b242c66a8e3dc115aa031b00c487a0a8cbab97cd91790445596e3ae7eed757bd40c1a301f89c6cbbdb4aaba171663014d964702da2b5446aca719c3dce9b32bc1173932804206a7362b9030878b259e58f141cb9411356d3a0c2ebce0dea2843634cc20032750924041fa1075648a254880d182197bc588946d3a416d96f41668bac01c6683286cdab46901e6e100ba159f17aa280ad04a62d61a42a6aa437267460e09b75f7cba7b5aeb3e1e30b564eda6dd4e432578382cc0b0071558037787b7eeee56b900aac8dce92037d4a7d0abc9e6b37834f5fb27599e4043c99d0edeee1ccf38f914faa7f5677204e24e3f7a2ee4d13271a7db31cc832a105a6f1f5cb16ec7d95a69334fd5ea4ae8c39d3e96edec20334f3a6b4abd698ffc747261913b1d9ce26af52774df6439c2f8354e948c9ac48c172d5c55193117bc428acbe64b5914172097847b74cacee39ceb98f4d33ad7ca913eb44fad9d0b97bd561fb4469ddf074a0e21526b72d2d917e09c44566423c59c39893c6e91275187c5c42285144fa25a83c96507bb9027913881898321c8686103178450c28adaf4429e445d83c9e549c435985cea4d8fbdcef3ba729e5dadca21df7e840b07977f62698af261993b1d7c838599319dd499db0243c5e512c5158f90e24e67fdc42245105f7affc49582877e02642fb5f5138b144cdaf0d7e6ae5dabcfe96dab9c0b4bb041f3656d21eb96d6ae3f7d05a43ca79006398ee3b87204af9f6edd885af28a8d96d12b734eea15b9ec3fb4b283522861e632645a2c54cea8d9b35d04fe4927a54dd494e639aaa74a19a884258a272c64e0b4684f2ee624633cea4f17a1fef426f7a453ea4ac8e582d3d92f3b6cb46bee74d50e77b6ccc8cc05e1dc6983d28e6070c2250b9924559a40aa2d600a28362f4c5972854c8da3983344921543d0b1e205005891b2441155bab0c1a2c6dee3082d9bfefd130b191a1e94e2cea05b4f29012386a61750713b23013276a30627e80aa758ab534a291dbd395bdc2d514a29dd81b5007e2a30ecc083aef3a00391870ab47d7004050175d023f25081b6b77a62dd4892359448a39eb5db90a3c64a8bcb72c468f4fc7c20da90c9687c20250584671d7e80697ceb614ff59aac44b5d010c3e0db0c0004206452d158899730d9d170f96786686700120022a6d8ce4f0763985feb075957253aeb1e98d2d22c9c395c25a529c36c1bbe73f430f14402e6ac73cc1b611841e5a8e1b2830298011379a8407b005d4761326cdc08fbf35ce265a076dbe4f2282386c8c304ad7b8300a157ab5763f08004a05f795e40b51ae590ca51db0499c99123478eb9001248cf287e82995c94a494a49480cc70d941107662883c5ccf90b3f3b4d229b3ce2c78ea4c55a06ed4adb7de7719e4b155e79c575cb142f0b2c695c87366390e0443b17eecf500a10010e07a7cdef759177cfc71eef1cc1bd68d3a46d91c4f90cf53815f4c04deec185fcb3a97419e3a7bf503417147839e4aecf979311c411022f0d4f9734ef591a39d40b6faec58d0adee9b8b98d9c57debb626907526c153679047db2d133cb5df5b67153c75b62e784abf5a6be65aab05338320188a620836f93a9684a7ddf926d25c3791ee5afcdd4ff5799c753a0255ee6b0bbcca79e5c8baf239837e258e2158bd5e3014c3d7ece1cd5aabf7a0b439a3beef1343d7832f158d35e0f94fe03a3ca7accef0d2f8e9aecfa77faa14a8e6acac15739175064170ba8a5f9306faecf9098eaa911dc8b353f63caf24276402713e27f75c0bbe3a6787d4ee291369d7a4740ab93bafb0b968f633fbe7e5f5e6ec2be47a947eed496b8c7e5ae1dcea595c19fced79de24837ad65e23b6f30d06057530087756535d7bb0542bb3bad8e2d12343603ce7f8418265762140acbe9c708438261db317649e2f33147ff9f888890d503dace0a5892b5e6a4730c86186225fb6685204925a799f26d48cc3ece485d37ffe799d1748beb3cfb9156d9c8db74dbcb5fdb51ea08b189e7a7bded1c7dc1ce64b693737932f166db57ae8dc08f62d3982d7571cf0e48902a7ca6d7ac30202074064e1f9e10662be7aad2e7e4009cd191cae408962a516f495ce106bba94497222c64badbaacceeab1f0d5875a684a71d9e2a9c2dcb2a7876fd002c823850b3564e509820ba80ebefa7724031c184c61058c315d88408196263778b1050f4360419178d8c1a3bc850b23dfde3dc0099a2ca4e4b0c31329970b3ed4d161862d4d38d0159e54e1b8054c61b17598db33a5c3f8758b241896725082862ebacc00051249ac9c996a52ab5ca911285021d310ce2d7bb8d26a8deb164b74d8425e9df2750717c407526b0d05b0450e35bc3600ad7f100ee7de36ac672017b5103ba5b1bce5cc54029d3150085a56e78dea3c2c5c201e98b4d605e6acfa28c27c4a81490ba24366bef6a0b406cc5975e2cbb9e52b52cb449844284c1f1d930805cee7bcb16312a1d08d0e984428785ec2784c2214be1a234c2214543f0f984428801f406012a11002200293080531000d984428acdc83796335729179c3c8bc519d1b798579a37a3732d2bc51dd1b998579a3fa37f291915b08917c7591934c60d690589874769d056e51926fe37c5a4b00d2b2d79b4b3d470bb153b2878158fc768cf1e020b09655354086865a568beccd7a6da1a020eb0100bebaeb06b7e45be9c11090965547e224beb54c06b3c1453db04964bdfa8c49f35830285e1a999e356973d622ac1bdf84b4ac0261a0cafa9b94d252b803b80a1ba45f65591617a3136d9cd4b28f8b39a3617391f51b70119c394d13bd93969828b560e0b9dd92957898dcf60e2463d5418e61d2786acee824e2a7b14ac62410bae83e405f81e49029a50f20083a481261b90ae0f54bced095f80b0f079c83a7be125547dcd6913ba5faca45a75ea3c98a1449bfa1833c2bdc92913a27429d8c1217f5122e62c245968cf1e08e32999d23b764246629cd594458fd47f2940a891b3ae88c9434893ea7ce48a610af6919e53653465d4522719cb16f7446b9cd149a933a6539d332e8d93897973c9295da3b5248cb2240126120ea547c8025873010a534d0a9eb98441c67c7a4b19c39a33e34040208b3d938ce279e1225d035906426ea1c456989da98446919652506a26ed47da3de495371bc0ea3a8d5888bbaaf1e420bcd241d514c61944ecaa3110e6e79795eb8250e1e186e8943e6e3418c4669428c79a3ba0c514d29fb5aab5359cb82b85c6a83c704f3d4717c084d8bc1b3ea1e7c95d1a08aa365d56908355c1de4ab8b5b3a797fb8e8c54095ceead58dbae38cac5ceaecb39341174185575c6605f030aba98ccaf3647b17e0dbbbeb6bcd753246c9767bd4dd1607979f48bde52c3786e30a286dfeb06ec4453b6f9d953489e695765b3909663d0fd55ceaedd429ed73eb939223346dd6ecb467de4ecb712c29faa6e5aa9c94446943b4a350da2b69ca531a5a9a5194934ace7fb851d7298e9b6a9a8ce328b593169a4a88b951da4c9ef652337594a7ce555ed34254893169284b85a06794893b9fc75f5e0e7953493c872a79d5ea1c526f6fb9ed6ad476e4a4a929b6c8d718b33ec38f6a3c63cc9231eb9d7f60cb09e677c7613e78fce57694008fbf1c7c85714b8e59ea356ac9980462380db7800c8f912ac05c86d3205598e203e6325c851d8fe1b3c6705a469de3f054cb784ae4e1c524b0e331fc07cc65b8510f99f2913e5efef2213bcee3cc14c473ebb011b633d670e1ceda14ebb1cf617e548b7d240a3e761c368159939530195ecaa6783e6b31b89d71d660966419232b4db1c78e933c45a73a722a89a7e88c7a085a464b0092e692311e753e75ced98d28cf386baf71d6bcb134c17a6942e7a5099e7f5e9aa0f2d204d04b13422f4d10bd3481e526ac1c6c9e71d658dce122cb16f91a670d6473190ec799e2a2fbd4af935fb2bccf1a579f0aececd00798b64372139d5177186cc799b643aa984ccb9a288de12051254f29933ad5c2b5249fe131af35b764a931b4a5f4b30691efe8b68b0d8b46eca9935cf463adccdf5c6ea794524aa9167e90612d83b2aa6d19dfd7cb2018eeca55ab359348e8a76a3e79df2bb273d528a3b34b22250dd5567ec4ab21211df11ae847826aa18bceaa7ec4abadbcbd3f5235daf03c1cdf3150a1c553af9336d51061e64d0f31d0e0065335ea56b4d109f0a5b2713667ed22082094b46f039407f856713bdc4a7a33cd7d40c93e994c06ea395e73596ed45756115fee97162aa7ca884b9d554485623b825a562b2f59f7623c52c091b1cee7fffcea23b450ecb6acbe5a5669b356fdc27a603fe424aad5983406cc5975186c67e74bff0a7e39c137b273aecfa7280e8ac52c83fed46f973917bdbe3b887f64deb2dec17d5f6e3ca87de806750473c2c23ba9b5978bc05f919944f34a79143eacd92d194a7167fcacb20b6bf2f2f4d4412ac5ad3e9d8bc4e7d59ad60bb7f4a79492d5bb1f9b29e0af2d8bf990cb40ef755f414394f5449d60e2b8a95775d0b6b71b175528234c2b810e3aabf3cd92f946480f43995252b8f9866f136ac9f33c1de56b6583e778c65e4e2afe7e75a3965577ea4dcebfdd92946e49486eb7dbed76e31b9d551fa1878e1b13185c1416f9e9aa225c548b1459159925d059f51efb3a308d95f0ac7aedc06b7979882f55349829e62567a1f578c95fbe3abf803b2075f4ac7a257ff4ac92b3674dc2bc3a095c34c3ab7360129d2086cbf076d1cb5985f515e72c2f279aceaf972acf5b5ece2b3e777919aa7cc7cba906f417991384cee3e5c4c283008fc04533481839575f4ea8927bb65157fde48206ea9fb48b3a585f7975de61129dc082d2f9f5eaccc3243aa1d5c3e72e1f54be1305f4d70fa1f3783de104472f83e4e60df618e49c37a857e719bf7983fa6bdc19bb919b37a8b7463b6f50bf639d37a8b3463a6f50eae2c83cdee89e390a3731130daf7e5b9ee7791e0d9299588999d418ade281478adbf3d33b1eae7f961a50e90215e60b2b476ec839b204cd162482f8a1d6eeb22e0264a7b483cc242ea24f9d3529a53c4897c2caa0b7ee8d93d2eadd38e98c996c76ca942953e69c524a29a594524a39b247a594ce2ae73e09a1b3ca3109c5785867672e9a6b564e9e974c86b294087a37021142692b926f94e441ba485c74846947515622c94faa8f0c01370281e19641dfcf7b9fcc5955d15bc3a4cea8046c96b5b1a0548acd4000000000b314003028140c87c442d158340c5449db0314800f879e4668561809e428c9410a1963802106100000002002000333a82000c004692ef8320a6389e4a36d12bd2d029f14334b76049000625b7b03a7d6ad9f493cbbebe7a8bb3813e8d89ce6c314dfe612081f8f3f87eab3beeceb902a8091d9f07e03aadacd1bb1a369b2ba05fbddcc80c20806d70270199e3d1620ef30bb98246ff9390b0e2b3e631be4a28548b9c19d796713fb6ff24f480ba9e2152d03a89db5c1834833ebc0345ac0e3ff58594e3bcd165d634225d5e92489899b513b14c6b575147a19813e4fcdd02e1daf8f842a7bf67414549aa102595e742d2db0e66368b35cf8fe1944574425b1a0cc55fba2b44bd6953a25ee9e0c42c50ef09ad560258499f9c52afc805d38dbfecae1b49b1e136ad7eb2171ece396e48ed038e5bd83d13b7684c668b4c1deb8216ccb3aa3e73101f22f805812db839f9640a81eacaba00e5a220136512efa83f87ad073ecc2696abda46b420866a76b4526a2d345d82b45d04070cbb6151cd4fc2d0ea2a0aba7c5aa9fdc6b0e8cb656bb028deabeecd2d719465ac7f769b6fa0810324459945e746e9d6c7b0d7e4b2d733a1b8bd068f85f8ce47232b9f47c12a220f403fecb710e0399016b1b00d9c632fca55c0d26749e28a809f9b9075b005b8fe26e611dd7856795bc9c7709b4d9c6a4b42d097b71e8a7f40e4fabe97fac4f32d24d8d8ff6a85b594a67694330fc6542ac09d9af26b2b6ca28786f854bba8109ff1d32434670c2bee76123605c517e15af8fbaac15cc6cc929a5e73e6912f0f337b32c11468927a36c3dd507094ff187e357815e4c3752f83861a0bbf1557a6bd57a86bc6c9b889d1139b3e4c718fec5140a75efe21382fcc6ceaff47cbdcacba1a95533068a39b80dab702aeebc1ab0e38fe7fd016193acccb145e5bc156b70181276b91f55153c563761e4ce149774f1fb166da808202ee08d489c8f4c38ab73a049b75f6e52e16b24bf124ef123ee015e1068e291ac3acb5f3fe7e6d3e4870be0dfdf3d56cefcfd2b6ee695c5dfe18b5cfd0af0e6d4f0355b8f1254335be781c7c6e91fadc0407cb7354885007956c1444ee75c310932da4efea288534a5de205366c2111b8480a0d4e445d72b64e18962c9e32bfbbd3398a4bbd15c22e70c1604d1425eb05e75dd00e6456557444642e64551d6d469291b0ce0b9aa6a2d702a303c169bd92af653dfc1302f1916a07bb4047b4dbe3d810dd88d1638ebdf8a383ba88f365ceb7b6759480a667d80ec5b31e1c25648f128a070ac57e6d25c98964327b5b339220d3c89af0045291292b434119d4a2c1cf4e87e32f905f54336b0b6b05b80b1f6d4e1a3d49158e49647341f1dc8a8b037532210efb3b3558f1bf52cce487649add58a0d07325bc867fd95674910835de49d380a92b7e7b6b84dbb6fd414f277649d08d10d8453e1f54a32f81535fe00413935df3585bd960fb1161950465342532631dc8365e916fd3a4c8ca59ac61f61cb6100305b726f5f4c29b8986af4c5d253bf39901d2981330929dc8eac58b3b5c8a2b7e80995521c09dd46ff2690aef0bbc79b755188fd55845a1dab279144397fc72a94059ce7f8f82e710d3ac6034151082695f9b8b10e925b8625381ed46ffc905e91667df9154be7e3298fc6e8691415d6aa694de342194010f5b1d1a0b74aea00bb70effa5ebaab1ca7409267d4d4378f8b56201c7a02b670a95160f44514a516ab9bfc69bdb81694ddf331ee3958e335ad4185e985c6b816e18e77062d0c277024b4dab6f560d67a505704807d2a17d448056ab73baaf3731b4a0d9e9eddbd6e87cff8be87335eae9c4dfdeb1882d514e9a850bc86d1739a87ce85196c97af9c34c258c938c75ce272e4d98f43b625db0f0835ffaed7aaecfa75ebd62564fedc4075c2867078ae61659b01287b15d87352f6e02446ee0122e6e318d08801a833a7f3a374ce49c43996b3434f3b83a05c373afd243c4428be39b8f4149b5563ee55d1665033ea9284abdc0d2082b97c96c718b733f97b484783954202eb864d5a02b244dd5eab836b00a79019c0604349f1d009d43556aad5456314c902c6fb1eef1f02b3d85eddff3a7cc4f7ec345ddb61e3bb44131ea1ac7deecfe5697837bef85d85dcdd6e8d93988ade9ac598dc74bb1e2bf0fdc36841fbf199fa413723682c1d9e1b9ab3ee3afaafe356ba5c5ce3bf759012b9dbd556c985efc0460684bde952c95102b63226ae6187f715da0aeef4322b3076d92ccbbf9793e6134c406cdb4593841d7115e3e99af0b41d9f090a58f91a84579c54e647fcc4d046341338fe7332b5aff50bb73ae7ca5e38f52499a4a95c4fb07bebc2977156be839885a95308e5e4f552602005b09d36d93dcf2cdbfc7614f30216b1801d07a2c3e326dc99ec0355652253e576aa5935788fc20d065334b4d5174151cd2bd7ed45aa5e1680a377f31aa06630cf8df68f25939300e7841c1efeae8d23019f9ec7a1d231e493f19037025fc2be433f50a0ba0318f91ecccf79bba7440f2a461d6d1b5d60b4afb94466b9480a2a0e7bc4f9f93ac0646b9b3f5b07cb33f80a56cc66c759386e702d5b0ba5a8d82103e4af0a1b4e7da0303169986a5e18153e35e2b9412824dff11a39527434756b05515438c57c2c07fc136a560d66727ddf84835baabd63b1e37dcf114d325eb00d5997a426a3d6588bf8022beddca660cc8c041c13660e24134ef97dc1497be9884269cc9e79c3c1beb1b080a302c54525a3ed34028a230a4c14c7ca69c25a29bb5ac3671e2b83e300111422ecdd4f1290f7fba1914eb88462743a850717739e258874072ab5a7daa326017dc49ca664b5d1e1e653e36d759c4dc44007aeb4c74b4a193953f5699589455fe0a6b42318787befdf40a02b92ddd47850c40a4ec24530ee0868b8b9870416193976c280026ec8c5203b89b8f7d297a50c85735b5cbd7b8a1c83d250a8461e7335d0778d9bf71aba003e584ab647c9336d98ee5ff007ec19ac23e211f989fb123f9a690a637a54a8609cecd10c38b26920f90d449e9876a43704345d7114a087d84322a6007fda35560b456facfc5f995047f3db88afff0beaf9371d7b10c19e1e727a7ebc4b82fe09bf2b516734498f7f258dda840b75f9463ab22fcfdf09d6cb909d06661e14fca506ca5645072139fc18ecf70230873082a0b7f98ebd2d2caf30badd0dfb1d90726ee0d30f4950c97b11d154b23bb6eece8214193301c9c26b2a443bb9a7d3c4621d811784c87e11c2b5adb3c5d5f2d05610dc3e1449580b6b46b73167aea7587bc15fd661c0e895be44ad4013e14c3426d8477f3330b988d5cb146ec77c06e3ef769160c2f0f51efd65d81e075375f2481abd77c34076c133845f7b2f026d6bafd85b104f58a169fc44d6f3ba640a9874f777aa4b8fb1f69672caa1d00d9da7706401b1728d71c68037b946ef340cbcdc78041332ae7980c8845d3b44d3fd7233e5716c54e7d1d8ff436b8fec0fd9c0b309fc11b01f9a133204c75f0178c8af74f8ba016f005db9822383e1cd9085f8c375e5ad18bfe5fd4d492fe9178e20e114fb38eaf4178c01cf208ccd97f4bd3a022a9278e7da5fb4ab02fecc1ae1f3487b93531f9c21eaf9e89d7b532a335e1c11c79f2ee33302984aff97dd274dee706472133359991ad1db21b2698b9723d7c8abe41518b53b79d69f39b62095bc7a93404f629d8b35a8d67023d164b5157f80e2aec90b4925d113bdfced28910704ad167968629392650a97c36d242dcf859e58f6e3307ebd0d662747394f9435b6d8f7120880fa4cf535d62a370472b21a9f194043d05e728c5dfc0de18b156d97d2b376adcf55ff1c3e18239b60adc4e8d4b179144c97b388f8f85e4084558e7a142b079468281d0977093334bb58365891b9dcfa2e307e5f30474c358867f79935ad35977fe966c8ef4ca17ec9f159959a5fe01536f3d9c23908d9b37308a3a8afb1616db8f582c037daeec81a12cfe9d52475bde221466b1319cfeda3dc149f5611015aa87c6af600d62c97ae436acf36c9a71b47b4146fba1f04480a8ef36613ea6832dbdf8eacf36b1563d08a21e93295a8803a27e91f17ed1e01a4568f755a5b7c854a8692fd64b46afba512ea336ce9aaec2821de2471177ca1ebeb590848a8d3626e2150bee2ddd827dcd96b6d66cdb9d9cf200a9e516d0be27dc205d1943eab3a74f8aadaef8d3f1230d1c11cfa4a33017ca5182a6bb39ee39995abb096b1c1a8edf551b864ccc22f496806e2457027bb2915af8cf4d0942f1ae7ab4aeff72654fd45dec24f752da0dc54b00ad32d27895c10905852836540c51f650d4884158acd33c1b2c8df3054990929aa074a2f94d2b04e9a9323b816cc5c59998124d6f74e94271217d12e7722f52d6b5492f610d023c5daad3682e919924786aaf5718360b31102c20257f93d2be3272d203eebe7c0e7914268e597bdb770c2a594c20a4c92194ba0790232b9aaef31b45fedac03ee1d524c6c3e8e547aa6dfb4811ab6257dced25a690ee000606c95901a6cb25504ca26bf9ecdf927ce33208319901f7b05ceda83def4fca86b6b74ae0517d4ff09d563484568810c1f4284ed8c8ccf430cf016242033ddad319dc3beba16210e9fe5591db8f4632303ad5631bfd361c9f51c90cbfd50e1957bdaad0a2d58567d0d30e604f9ae5f20fdb84bcf0695c46a530627a80e8f45fecaa594a1d063d6e0288a507f73ef11de21b0c9e329801514116d9c4c467bd0d9de933e11f2f6d12cb280b04739b010fcd88813ec35e393c6302dacc078e9922c2f70c0539a3d4466a0ac2a979074bc8e6245d15fa61ca148a644d50f96ba38e7c0ecd44c00b08995715130f6000631dd235f22518f52383213a04189b701ed32f00958e1e94de7e2443c9a1c965984ce55181cd0b68ca312cabac4565a282fead0ae80aebbbb53f3973d26ac02eadaf02a2dd6929d4fa01924e3d66d4bd318319ece8f677844d6621aa3c0408a68a46873a08d4f2a5ec24c040bfb5fc917a5714940b7201fa44bc5ae6ebc51014fecbb48d7cf7e002673747e8a8f5eec7d3322c399aa849062e62adc3af444dc4bfc65e37448249616e99ba6328ace331130d85dd37f888238fd1452591d3982defab8b7a62d3f911a52f832765a19f621f206860e815ea5df5ac5fc10222bca35ed42fa1a076d7f01d9437d0618dc82cf579d99bf407f13fa3060c65d744462045950947b55be1eec16cda2668e9412491ecba3a12761124386b32f55afa4bf96cf4098ab910d81b7fb357db54ef7dfdb21480b8658aa85878ea539dd7b574489190466145d9ffed53926b826cfdaa95f1c1ac894ce7fd15af3adde46048473a9fd222f4b84ddac68eb005aff782c499ba67920f4d064d6de9b90422f41a2e64d484b8620933d27ed1a10a8748c5e1df962b3db954a8f7c1e18653296f362348319d2f483f3f0406c3600dc41459753a77b53170dc8669bf54dba3513d2ef95d28954dd54f8fb8b76d22a9b3ab9ddd15ebfdc452923814ead7447667ceddcd5736313936b56753f0e954cc0ba906c8390a8838de741d3283a9254f6f0fa05f342720839d854b05ef43f23ff895604ba20632bfca2ff5fb4e86d5e7f3c94fb84e5034f8bb0dc66215162413a87d6fb5415a252933316dba133ad7a65e017482ea9bb39f0bc47fb8b8a133ecb334b406cad970e237029b028b0e7a46ac0195c4cf6fd7fbf7219df350fd3430f98364916b2cb62e1c701750f21af944b2f9feeb356acb1a0ae9f007822a883f25f424388b41c0fc16d5a7966079ed1432d37b5362ded9f636d99b30b20853107590bef76e0a84ff2ae6eb41d44ac6febddf9460b2446e9fddb45727c63cdb6f60097e5719527978d5495fbe0114494459b4c65e310bc9a268d5c6fb7af3aa3ffc2ac7c0cf105fbb6442de596ec354d7c215999b6a22c1d6db9b4dcbcbc61addc40350702f599e00ffd75c9c3a9d12174826f8c487ec88d129e18588f61105bf3e2482216978e6672c0eb423fa460a1f28e4946861c79dbdceb3166ef22c991fe0dd6dae8952a845a80dda446f1adf993ec08243e138e24fd72b3c6af62a20f2fb7b848a7a372b5edfe37013552eaf6c05feee506273b0c1966cccc65b5b3a894431a321ec09bc53ef9926112ea5958e28f8234622a141ccdec6055b4b3a273db70df3263dfebd111e9292e1c824841ed822eaf59267cac6fddc391c1b62a3e388238cc16435c336c57dc85a2b15590e222a75b35dbfe3cf26f68281874c487bb809f776771d064e0ceaca81fb1a96004aab46534ff864110f5bcbeaafa34d5b7dec684e114c82a1c3503a644dd31ff646c39134af2b90d265a3b213b6be26c89469ca2b118088fb10e7406c9a3a34a8a5f75a037bb20856e6994ece5fc9bd4d767dbcd52e562d9fa0faa7295a039476a96a800ceb8075b452b56c882868a8c8097982ec026b1bf9c83ec749b4a66cfc5a18a7c5b7b2d6b36f60948599d473c3b773a5311fc8ea4a231896d519411576d66a0a1a54e3fb43be0a3bd7a723a351e4668d87390ebc5cc0a3d8e869e0caac3fa2e68a1a4b94d00ca1a59b495685d5bd56704b09c6c061e1f308b1a44b57edc10a27a65aca8c3f18772f6542dacb17c66fe600fc13b810cf7851ba66ab5d87ac73990e291c4601df413e41c5704f5d6564abd18730cd2c07bf8c60d1b60371231f68d59ec96bc21d6fd89cab352bbb9cf37bb3e3abc924c6c6afdba05421dd06a931251b6f8050d63cb80fa93719b85246b7a29837c68a577c665532d21c17278fa5283d4d3db95bdbbf51563cdd051a3d4c6d52f63385060094815fb3cdcd824cc3d5a890710f971a7f9c0965ebbbc61f2069180b9cfc95b2dbc573ac3623af72a714ce87c390a57cefbf1ae8598d7a7db9ec91c2fbf1b97a4398724363fe26cf630df03b5f46a4fc6112852c6cd9e28e0a03d16f92c8c721c613e366f284f0569c448c20d35aa377c4996184dbcbde3540e70602bf9c8d897be5fd14617698c8eb60747e237059547c2e6197717639c260d2109847c94a2438578f07e79cd805d10ed5207a2a5aca90b0f3bddbbc553792786dd1c3131bdd9f06bd211416d736d938d2920370a32223446f8f15f406200e8f7e4c89939bdd17f0682c9a32df1f55b3785ae1293ad895b1787a51bda6be7387093f54cde2bb092e8853a10ef637a94223b2760ada3ee03f681de4e412b79a17d07a86e37d54fce1f978c26922413abb7a5c5421c5899d91828564af46a1bd56f096bcd9cc2076fe48a09b71c6443017970e25daaa92fb05cc79dd24b115ac68db012a954675d291436be807cf0abca3c739be80db9689d4d1c13a64659d8795055e1b8a2d4b21b5b298bd56f2aa0bebd4039931984c44fa246a74757560352b27d79d16fc32ad166317917e08632a979a05efae8712c4c211c7317eb7c546e51240aa9c88ba50ed9f2fdaa4e12bea8d475d37dc84267eb6eca0a1093ac511bac6f46f697412a347554150dc70e201499c6d7b5a739f5d60d31b3ccd65c326f9acf48941a17a25249e6674a2009b865d99dbbbfb8aab73dd938d2e752d4d01e23b10f5fe52598d9bd594c113f98a9b17b4e58cad5c806192ed5838e969e589d12122478eee6506f031bdafb55346a672f5d3d386f0504bf63d12acc024bae1ef00e2e55244117ada4fb549f8824ad7f60c3d6f63ea10b79423ff53887ebd56ddf1132fd5d51f9e42c833ab88631e0c970666f3083ef92fc8a89672e401b488598d17c89c684a18cf802b6c5c597e8cb9b2141dc8dd05793ea46e756480f53d26cb3f3a6d48a9634be4acc95b96420afcfbf44c87d78bf810111010498b344a4bb5932ec7dd589e27f64f4fe6bc9ea030ec092f4cf6d5547e02d623a01e7ee07379af30af625bb9a45a76e7492f93e53ea7e5960423238e6b23f7b6887f393b08633130b156db508110222a462ede1a11c0ea4c211fe250f885d675ca7c5f1cd0c275c77f0d602bdba3991a4f4e237e403152237f3aae3b4f7840d44c5625e5fa91540de5549a17e8c1878a11932659e9a82b67b2304db4dd234f69e06deb1510a8208f3deec311396f0e307ea4dd7d187decc11958a1b9097420efd3cdf79e4e21ca680275dd14e978109cde939af773318c86d64e408b51aed18581675c23108115d840313084348b9454be49b64fe24845690347a5d9e562c5734cf2c2599b6e7b0d70378251104d8182e8ca3dd47f7e0286c2053d314603d47579d59306502911848b6c8149946b2fecb9162e009e5fe1ff0f22c601688ab29a03d08a0b5e1b3846628c2b5306d82057704dabc3852a6adb5eafa468ff5424517dae9fc6374bf31790ec74185c6a92d5f8a88f75bb3a7f83dcc74948d1efe0002d9e72904d05d332018b2215d5331c30078c6c6af5730f30df22400ce4b2c32bac7fe4a73fc70582ce2981e970615904aa6f863276c9df0196e0f6b704414e93380335c6e162719cb181d888029db1e0f85d2ab45e5f5a40e31a094e51802b94e376244bbdd15436a310c2fdfe3bc749514695bd069a72e6d25d51a55014bea52b2994068d9ec40147c4795656c5daaff2e69bb07f5ac166c9f5a44d5d647a667f0215984032b00b28238266c182e2183a995412ac697a1253f06e0eb8335374db92836e76616ec80d2d064a1bd969ced05cebe73e6d47e252ece69af7b96f30b7acc03e7dc4cd0d2273d59a9e6bb862e642f4272668e6760175268570dc71b3e66d48e5c5bc5f62e30da88c7d92a06c9d8a2be4d7470e44243043166456d620f782dc488fca28574b4e322f3bf614e695b98cd80dad8ea667c4bec33d71036ca815694c87bb8033794055989becff7b2ec88524cad2f5692cc677c17326fd3d91c557f2790d65c99660a3cca0a49467d5d244d318761f52199bd3a70a959c127816180b31b124d7257b9c6735305e406f124e2f26047279a0080cfae0ee793dfd7b00203c089f378f89aac82a627e861cd5c83b0e13414e63c7e10d89591f094c05049bd223d5c0f41815f3d1986ae380f864d16b061a2d8ee0067bc7b0ab38781e3326c2758767ae767147c0de541d05686b92d0f635ac1d462e576ec5af8023d030f02421d487b2d4562401ee166eddb01488956042b4111a26a4c0ecd39e59f00b06fb6a469100042f39bbb6d3d5c2126167c688b5747635c2987f50a13953746dbfc802704362a94cd63b91474352436ae9f5aa7226820c08803eae269ec96b34cc562ef69dd7fe45ade86a18f54bdf7f08f1541e2af71a5f724d549b38958747b6e7462da94d0d85fb827a680eef75e5e65f99d8686a7f06c8695cdead08426d4fc67d993ff68c514cdab3144b41ccd88ea5486fe4a08cafdd77faf81f1f9c307b9a044a087535b150ae2033498a150b9f991742b5eea48e27f9a22a4c626163e38cf20fe6abbf2bc6b84c922905087efe58fc42e9e65799bb2cbfaabe164f30ecddee5f8723c91e189f5ebe54ac9596345eb7fb55580109902016efab55d32b529bd72483ae361e8c61425c7b492a5a46f9fc51bf03b8ded5e65049113c37309d1975ca08bdcab52adf744df2c22cdf6b43c57e4500d699d861448aca71c22703d62b2c834540dc607cf33ab44de586e138013c8ed1ffcc04a59045338735b673aa30f954b34aa43e0170c874f264be924a9df0f19fba8b3ac586ed273d49493aef141b916fcca9483b0b3f801661cfea9df6927b4f925e99b2b2f0387fea242ba92fa70e426cda58081e283367dba38842edbc7994a79de4b36c447873e058c47ff95345dc0ee7ed9bafed193d39a0d702669d1a0b844d230424046d0c8b696e22d7f398acd419a241a4ca1086e209363d1d29a6c6b609f272d35569ef7be5ce4d9cfbc2d0512203fc04e8853ed465e94230e4b97d48d198a6b3f2cb3819eb0dbe2acfb0119c332a683ec9473c862e380007b18cc6b5d03f10bb5a205ec09f84c2a8c4b34b2543ea9b95a6bd11806381fd4c8e4dfd4e9a102590d0a23b3e26794b864c956997103a5e1851fa6e497801223a4758ae6589a2f7fc3be5801c6b00020c0ec4d90c78d00cf3b352ecc60106e3a5fd92103373a86db92e09847f20fd3bad95106bc70d98785767e34600e064af12d811682c5e347e7d004b025d9e06fed14de8470fd42438480e529aaf6c573f4858c3217e41a515b2a13b49b72d04b51ed13290cb25eaad5616f458a25a4a91e7d5ffa1d05fb61a6899b5420f670e6cdf2c9c5fe6f629b29e550c46c3d0927d1a42cc69f8b14a98030b4546252317716a381a98baf6b3e9515a19d6e529e1af2e0c98f52457b30235db11650911503458779f1a05d55155ac9c249473e996dfcb794cf40a44d5ab3f42bed71c8bcb917dcc99035201244026b2283c21ec193605c8893b8225e772c725b4e6f9491237097b93d1c7fe3df2fd26b10b29d11a1c4302ac388c35dc7a156eb94d231895cc448dc82add36c9b6eb163d8c4e42411fad3ef2a0e17dcbd04c3140dd42f5f0ca44581c29959d94ce64fdefa3951128d06eae31c11ada5359e540d7d387324d785b48c0a7ea22f8f8c7422276fd348fcc3be34ddb510fbcf81765c8492177f3af5cc2fe61291032f72c381cb64c45ad2ad8773dd465a146792258d0d6a2bd6c489a0fde9dd677341b604eb4e4b374f209c6824d3a2ee82a8489f2e3cb055154cc3e0e2d2ae73909eef31a5e46517be9ac452637ff256837518dcacf4122b45b719b1070077223cdb0ea298b9f9f97fdca32e70ecc63435e57519cc028ec4ae2c3a6c862878e97747dfdf86043a4f1023dd547a7c1ebff4e455ca708e29c4a0859d8c012c6982dc63c76a3a0172f55d86e8e19536c107eef3ba2fb31e557f74a728bd6130b146bfa0887508282d2bfe2da8bbbf868bd8a47e81403a055241e0e5e4fac10b901a44f077104417d9a5f1373a5d6a5a6ddeb0e3062da55fa28519edbd117b0903872ec9d43f36c967c61cca2633d61fc5fa7bcb9c0e38b626bb7c124181e4323fb08541871eb0f2d8e3fecc58e049f98ed81293711277add920a587655278e93f6c22aa829c7a553cd452d6882dcaac52d5242a652b0b1b67a7a7f0a71755841db29e04eeabe6f41354818a1573deab65961eb994d88578c9983f114d052fad0e02243177261538f213848ad7ed52337ca0cb715aaf1063a25b2ac24a3593cc89495fc36406c66181ab0797305aae91972b7f4d007c727b0866970fc98546cb29b62915303e44a0a481520c582c8c15f089f3aeafa247533cd11b5a16f8d988ea8e989dabe2a308237ea13651a51e0c6b41044793b40fc604f857ff38dd7dfabb0e901223588d3b5ed6d64f940286b16d99eb732879701b913fad2861459134542ca0589de9d50ad2cdfac5498067398e1d67895ad23115ac15bad5a9a462c6de4b5dff3bd60f2e94e148703e0f25eae973ac85dd6b2e9b3817d182656cce4a3383173b2eddf9bc1a1857b421b1771f02481b9e02e279d270fb6e40c8d0efd2f44f0cb1d6f0fc632997beb284046bc852eb14d950a4c0281cd716506ab2f8abdeb73e1d06b93d8459949351cc5676705cb4e053076820f3bfb918518ccc63802cb0ba0828d031d8dcd610768ad8a6acdbfceb03ffe1d02f0d0b7a40a8fbe1e7da16b4afd2128826f4aaf1d5cb02f0b16474cad5a9fa8dff96cc9d063dd069bb3ce4ce54de48337873463fc7d2bd3bdf1c88c746d1a96c62191908a3e0890e5bfd4114d22cd80ec07b670a53c3f08f482826e742bc06b4aa7f4693c1d60576069545f90e245db1e3e91e15475cce6693d8cf0893d5df3f5ffb1e330c2cdbace82c4d09ee3e932dfa3ed1b375bdfb36c16f3388e8b91a6c923aba8a8caed12f53d15718e01fbfa0d240cbf0d9f82384f72bfcfc8463c9d9f753fa2f8b99ca40f00a80273c3f93c900a3766c574c2aac839d1a2a6d40d495bd6f953b5d88136a971db418e9cbce9b28ea37046f5c6ef63e68f2914117abaef12773121443a0f79564f73945707a6cdc012d3cd055c5378bcebfab9ede8fd2fae51f4ee4921c72943c88aaaa8d58b3876e8fc31f5448d9e6f831096524e0888e28214a0f569cc5d71cb0f141a247f47d59a52966be000e82e1ce55c9ff074ef5c9304fda46767ceb5845c41458a5d7f94ebb4c2389797de2e6c8dbdaaa927cf4f505de3812a8bdc23f2b0e94868e0e3afab3a6f8215589243ca15ab28fc0cdd30aea3de3b29ac71655d84a507061056858b5ef5163445e154edac499ad7375028ab491c81e263941407d7a0e30f1851360db95fb9e767ff802bdd91c17dd7231d4ac0dde6d6509a2c6b4ce53846527aae74f800214a4b4f3747b2b2a020d07371f864f1417630360063214945952ab6ea40a2ea586cd3de546e99ffe8cc382351d6ba77a75eac09b2c8137a09189c0c093a446ceb1ab58770fb5def5a08a1f40cd4efdb5a3f491e26fa6ea10bae8c9780100f0ca01bc97333a2a031634b28bacc5a4255d601e1ca146dd7ee0b99249316059b6a3079f1181b3e598c88eac061a4bcf18fcd2e8314f9978cc2f37ee19c215671e63540fa677140a263dcf7e9b24ac6b615fdff52367d5cb9b238ef777817ed36132c1b3f13a28ca009f18705b1d1418a8a6745616ba2da456a4b1880cd2338b6266148a98decd3af76397d135c6d953ba1a3820d3967a9ada93480b5d725c9d9ceafc5781c2041ddd7484217b9525b5f13db34e450b63dd050b187b3dd961520a4da6eda88e1b81abbb0af39da0d76ca7df81780bc52db330e56aeda0e2429b5bdd7f75ce62caf1a248c41db182f93ee8ad9023abe8996fe30ff1c9b471b1b05b602a8f51c895993143aeb697a70e1d90ba9279ae15cf20ac2c64532d079ed4e5ed07af1c4cf8f3051e5dc416477e1749786efe95720bb8e6ea40e65c7b70448643cc46a27cccdad6886835244f0224cd6e2795aa08b985a363b2e2ac2335ae56682c4ad49ee05d121fceef923255f00a77548beb2637d9fe1b58ed67c99d12fa313674737ecd99650a7d6506e244a945d9bfa6c52109adae0fe9781a2e157cc71c4ba23e1de8fcc3c0f1574e2fc837a08adf2038e1b90a43f7bb740ae03a872538a422ee0b6e8aca28a62dfed92d0adb99ed814a51313c37d90de30a2052d33ffb78f52ac87f498fa5a0955c6c0cdda6f26d4168c6f6d08033944e4eea7451918a884add0cca24a98672a01340a44269a0959dd407e90598c5b155121a32a818aeff7db33317944cd1c21170e05ea0453d26801f3a08bb9c3a5d4bf2a209a8de9a6899459d2f2446ea7adfd78f22789f7cb032418f1ebfacf34c541e4ccb76d81e774192e036305967467c7b0641837da8de1d93a79dc200ef0bc92a13e763acede354923bd7f8be4688c7b52f97edfac8a86d3a761e1953ac68a9ccd181af5102da1a83fda2d39e47d581e663a131d8593be66605b5789a2f53dcc1d0b02125af531bf8389550cf17024b2fd4ecaa28d3b7a9095654e2c6f4458feccea849c038aeb94f050d287986dd4969c21f5223add46eb9a0ed94b7e39759531cd25304b889b58596348b5ad89f34556c9fa86faa1784679cb17f6242dbc612c99446a63886dbef4b02cb7969139c062be007d3a512e5cb5a7d9f20ff37906d7474fe847e73102957acc70475f3e4e50e84a0c8d052cf9e003c5f16468a29bd47fc85514eecc07c9ddd40f12ad5f9ad8f567c78a09f444cf83c59c193ad078e48fb8629701b48e972aa7130afa48f54a9024c51bd88f4cb04eaa7422f1ea59f6f04a9093376328e9b1859351a869b78b5e7063f6437f86b3861defe23ff8b41f0374517c68f2f5e69eae5ca67584700fc95fd702f2b3b196dbf125855d4119cff89140ac940a6ec7e5381ccbd3a3978c317a0f5d700cc634130ffaede986838a6613be0f66cb1416d2046c2a65e45ed8ed169323f3af651e669c1d50be875521f10c0e86917c547d1245a9f9f54129fd7fb93648fddda06989c462cc1bcf0b1cb97bcdd475a7e61e99f66aff522e58e360832069a8c2d442393e5dc56d44b9ee139daad0f52cd1f26b2ee5b20184c6274557a925eb9939c2098c5df6628bda044cb15622d0205fbb2598cd2e830027a55e490ba996ae10105fc0a4eca8874ef66821d8e7b5758f7f09d1d405d778a600232b5eee2a846be05f267dd8ee53fa708eb06e6c1d8245871e14926d29ed0352053bf74309171237f022ad1f2c1d90ddd8329ec21cd8d2f48e66844e0c9ad10eb2d0c6d05c3dc68cad5b8914e4082a0db2339bd5cdeb71283cfc8a29ca68e1b2bd080c37479e5c3624391ff087720a1166d4aa2cc361d264721614ac5d9cd58e95f2758d13c6cf238b3abc00638cd0f06aac949c198aabf329c48744cf9be6b9832cd1f79f32542fd0bc326e1cdf5e202cd96e28ada80a1e0859fef67aa82615ef9f959c3f28a6e3c24b6701a6ae7a4c3b7a712d985f44fb5f95d3c9e45de1989bfc69f0f52cb8326e5a481ccb941075c27a1ca6654a4ba94c4969dc5f099af47a0f83620794c73194b755de69a3c8a9bf60b555d70cd8644dd185b2607ab3caa278a75c81f412b0462c7c3a06ac1947e6f99aca6f6788166272924d827e13d0fccec32c1cb97cf84280f2f90e89565f38c9a2d2dc0ba0cc532946404324e9660dba87d151ae10288caae5182260ef50fa0e648d8d053157e4117e8470989a2f72445351d61ec33aa1cdbc3280e14b5eb0d033c62bec7cfa4e6452001085ca25c10598c130ce33a184b3f8ff3c0eea686b7d1e9d32ee4692fa821590bfbc381c67cea033209a15a5dd48d0c783b89a7413b725114633e9b27f19b12f9979c825b2e45142c1c368c4aa91b5b4bd6f2a59c6fee8dcbdd72d0ae723e2aa974deb3c70af6a6ed98d04164f487d5c3e1e9b878439a3f9e200e2574bed2612e96852a6d02dea9165710f8e9bfa4f81f2c9454bca56a2fadb67237d5c15a04008dbac9bc32c6d47c2b759edfef4a192f5ccfbde2b78cfb0e354b21b134e2f422f8e606ec9a5d3a551bbbc068afa13bd5e11469fa06b5c41c1015aab21fe95865f9f2e6e8a40bdd3d53bf03456b151dc204d6ade1586d31b61eaa8f6f61d8352f40d46760ef9ac229c7a23843eb391ef7e024ea6e238024e6adf0ac2e8f540c2a8f637272c28b746a07f560e6bbd0d3487b83af2ae8036b062a39f3eda40ed596d58bd3910b8df051f45c1511458eff2fb593d3c7a4568517acd692a23f8089edd29cbe1ef66f8dd18e1961c47b55b627431c533607472f4b81ff6c6078afb5f15a4281a85daa982f93d91eb2d0d1d9aa837bab921a9888ec781a6d00936c220e867cdd7ed7037ee607947b5561da52355336ba55fdfea61a8f781d0b7b5ed82242f38514d391741247b4a1b4d8bba4888998c514473bca99efcc3dc9d88f54c1b414369f747552a0d9de3c88f14f8e7211a1165fefee8c577146b298867d95027702a43c890a0842d342c0f8b620f3388b8c99a70d5048a86a2e6cd601b04e65d0b0ecfcb34db549c42be5151324c97014294e4fba6054020963e17209dbe8cc1fb0c340759cdfedd3166e19e15fb2e1183207e51bcaf93d330e26aeda1619b39a807b841541a2d54b6210a14b8c8af4f42532cc28b4091aad5f58a364a5d30d17e5102f8c47fd651d3f5318c52e501834d8280275246add7b8229b5d965cd48753c0ab112cd3561ce52401476ecc5937da96089dd9ca4dff7f92b42cb7e9eccda079f1366aef31ba09ff3b69f3401ca68d575bf05c1f57860906bfc825b81a03b00b969aad60bce1629d6c5a63ca332af98e0e79a34eae51a58fa3ebb5d7779f39c4790034352f6ef6acc19c96ff2531453250b81d0cbc9e4546a64d57f137e05dcc32e914ec3ee2b6fb0406e4939a8d1be016e630bbe43fb91408d2091aafe34d313a9d4647bea3255f8c2ef03e6476c121ec5c979c584bccb5460ae8e8ad4dab3b38f7f55892541926127b6e3555d97fb85b1dbba78e982693fab0bb795c1d7938d2657d7605c06200acdf7a15cc93d56a5c968793db8e396bffb886da7d5ee1e9435aeb92c992d5cfa6e3b230a04819d78955d492b9e098fd5ab80891b878303afacd77ae3e56c455834a2647ea9643742b43f73f1713dab94ae62401a77798667d01360086120c82f55aa8d9ad3cd213c501cc6ccf1abc02e78056fed7ad6a4dbd3bb38e590d5c7406635a7d3ab55583a0b89e04012d40a417b22812caf15c5b5d8845b6c42cefd1e290035085802a6f192ff54c7fe25289ea6d3547334b99f2d4a0ada27ffeee9d01cbcb28225055b12007b84d3fd026be005fb8a0e40ade051fba18f27a42c469a968e798ed82d041fcd140c228dfb921bb8c457763b5d57a819f64b879e168aca8d7d7fa6ccc15dbebd45a2a29ea08894d40f02a8f54bea85260a2ba46f80d3a040483c2d6320555132d4d6e3b858e76a65e6eb22f080df83a600d09dc97a561280f891bba7383cf8691b059e1aa1a4377a2b0065ed87bd12d6e491a7a647f465e066cdaff8282571423b6f32aebd5e9c5b15f486e9bda3fdfb37f2e2c6df9b1e4cde98fea97c471364ed757c9596d5580f9dcbb897a0fe7d8e70b36c4ef9a3b2cf5059b2eb3a212805a09ccc37cbb3c6b44636f801b70546348bf3bd3af1c233610b771485767b804658981c684250deddb35c126ceada0bad83ce58e74aa853afa191ac02dc48a5195367fa32297e236b759d670008c25dae6d54c59d20e925f4adbeaeffa2772201e713a54d718f4ccc32763d9a9f053ad9ae6cff87f7f63465a0a83dd9f01e436367a3de439b0ddf0a35e681a68cdd3728571da8921c350ea36ea8650e615fe4dacaa07024364336d20c6093b51f272065a73fad90b250701aea7e95598ec7f7efd0b7eca3afb909cfe819a639a392b855d8a54f86f8dd3f20fec25d1698c9bb7bca682f953384391af50479a60ba28aedaddd2c078d10bc616995fccfc63df35f87b4a92e8898b80a81d7fd6ff4bb2a8da8d0035dee7af096f9a9d9b0ac6afad2df264907aed061daf1d3a38b78947e727098bf70f22a0e9fe69e429b517dddd31872d18379019493c75570327193be5b15a7d42a2854d373dbeede0a8e43c795f146cd76f1a241296f48a5c41167d3da722c0eed3ca1399f2792aba21bed6783e3441cba8986d3f9ec5fbadb603882e4c3f9a8484786245245a09f751bd104844827c957044971269d91a8759eec51312df587c167b302d1ea4abf475b36c033b0e070a119b936ed8e30c7335c9613f56c1086b2fb34e870a17db5752188f0c3c765247640753bdcb5a609977381cb0e5c280090f22bb6f0990e269c1027337695026b068a932558487e0c8aea421e5c18d5282a8199d5a50f089672cc67e737f083302fa78c78d4647c06aac4a3247dc93a79fe77266442034fd71a29c572c7c675c84bbb9226af821130d0a44323593111769e851e4d9364ab9f2e14a873f947b248dd194a030c0a12f1290035ff2f50db806bc0a25de519eaf36eb2e91869620f0c065655e6cb3f2657a532c7434a3f73c856614dafd57ff53b6390f11522e026634d408ab1df1f69e065219401e9aad68ff675e972251f5235ac9cbdd628381008a30fd612e69d03ad1af10a976daa1cfe26ccbf328fad0f1050e69b68c6c51c63c068807b19d06080eab98825b60063907bd0f623bbf6e5cfc72b1c957ffd6f2b2b5fda8e6595f70dba80e9689a422854564218ab7106294fe97747423d8c39d4495aa7936fb627a7500bcda0f1a295666d8f0bfa79455f89acb46be99ff993e855062c6f0374b75fff001318c249c063d0d0f547cbd9791fd07268f7c67e48b55853ebbdb9d39336c458d08a28749e4262afa0d1ab8e52862dfdee773ce712cefb9113871d19c4196b5e87bcca915d29cbf0c91f10a8bccb9ead244040d7ce275d9be772baab84139a3219393cab681b71237f8761faa54d483d687c78b7c83948717855564965e24f12f4471c9460a73ddc1a42c5035545a7a403591e406a7a071ed0a930267a473142b5ad7509d4819d59b74b0959a0f48f007c1341c96d75dbc0336659e6957d2de465771f6b09d466bceaf3f55e593d8efae35000ca22c55ac3eb638230ece39f0cd33bd853169cadd60c8a5dcb5e7cd016f7b066786adee7b1d2bbbdf4cb1489f267ba285af36cf5f2528a675821f5652410918b564e4b12832ae7707838582c8314539e2e995cd4bec05f04062f888bb378c25e36862b7620830b5b6f2a9f21b1becf8b0a766c4b4fca03d46dbe45e4bf44198359d398881ce53e6584f8cec4629bd2c733a1f0857b639871c47478491870364faaae453e79ca13c1a7f9bce754b7ca16f62779d295d10c0f9d68b0c0700cd2af03e457bdf0db5a5def9525e03548609cb049744e7c2b70293b630a1251d45f606d324268030df3731cea53fa093b7f7ccbbe8d9ae9e7e93d2ba1b891b8981df9f110dd10b0652a88b0f1aeb372bf826fe9a1a51605d8af9f71fa5d3e80e6226bd58bc48e5a42a2fa7336b22be44dc2e5bbca68fce2dca9927fa9b87c00db4d13ba8824f4fdcbc60ff21c8905d974ca670dd5c365a22652f6ce641cce48998ee64661f185e2cfc0e7cdc17b61b07643a1295d5420cfbe277e3905e66707bd9176be5281440b05601cd1cb26b84e53a00b70b38ab49b44b87bea7a276aa6214f5cf517498553ce5a34cc38fee3494693a354c7ba38e949f6eb70496620c19846aada9332bb40aec077700bb58142fcf9f20cf753d72500c68e4fec2773bcca0f787ea84311c412f02950e26e3c3e4a717683f3bcca656b36830146babace8e3b4ad739da3623548cfc532963f06224b91945999bece6d64c23dbe842a322b153889ebfb59f4d640ba56226ec70678ba9ad4367fd195d0bbcc70a91287f1001e109c7f58f83145c87cd7e716447b089d02d31f43405b4322b862083f6ce1648863e240d1351245a30e4574aca15aba6456b330c8eb6771355e4735fdc628f05c98144983ce6db7f107e08284e14dd5321920b0a1c75e3353f95faf87d1135f9592501aa5ac4f1cf7493223d45a5536569b7de767e9868369360e3058cdfa49b8cb549ea086ac8b0d19e114286744800cc1a0fb7227839601dd7212356b1c67a97f4b5393845e8580f7fbb8591e06d9151f30b7ad58c5fec0256dce4408081f2dc1eed3c1e73bbad43bd9330af2e8ef4b1245bc052d48c042c08dd6b757a939acc9db08db77146cd48418d485ae663fceee818565c3f5736bb85e114956ed7e3d0b7da0114e80f4d086b885720f01af3e30dc2983c437785f77752949791badc6ee148bc6823bd91658fee3cdb3cb5a9b9334b37394009ad9c7e3fcf52b207278dfcbefa92d2216f5da3a0637e7d2ada5fa09598d96e8f31fd401acde1e448ceb570b4d6e1c9b7785c6c732ed96c024a72ebabf4952c2c564f122ba9d3b440453a9bdecd620af1aaf80518a222e29c8384baf921dc2e0eca8437a0778bed25f9ab29c05039b58877e5c88d3cda8b7467cdd8f488502956362d003bc1db0abfc3da7a0f0b5ba139a551c1a77624e469ec8ed8830fbaff2361ad55182c11734516c65464ae7baf8567c8a6bc69b9fb04ef717c45dbd6571f098046206f45b9b705e2f6d0c3e9c2fe9369f79ee468d2370142c73a3d4d2e3f75ada9ae3b28dc095aa1397457f9747e832af01bcc4ccf876321a5586cc6c62d6c1739c9ae616ec4caa9d622ccd2b3ffff7cbdac0d021bf58d188e329f953673701844102da50e3118a127b225fbc91363398bd0fa3755881a13031848af443aa41a11fa3ab30007d9856e1a6967a8f092e89c050f4adbc659eef2d57e0a5486cd94c6fe5ee986cf7b518970716ff052459774e6ea96afbf35a838925413b467e446d31cf4d56c8e8d3589f3c43e9d587bf858ec28c1bf405239933130ce61bbd9173713372010eb216360401996283a92eac0f44a43ecc8d00829c67b1abe85c5473b81d6061cec196eed953a18b0963eb61b486991eb2ac379a1b523e43bf5874076f59ec94ebfdd9dca8c0b66eb968c53eb2ea6d484c5a11b8e52ed4a7d994dc9631c8cbc5684e2f46eb1f58e83fabf54d02a19557a1f200a273bcdf5696f8399b3f2a80843b1541bced6f1bc196f4c3207bf2fe590d1e11da425f5de91842f65edc518d70a201869ce6799560385bddc2acee5ab8d8e7f86493e6a04ab9d52518c44a4a101ab620d097b22be90a8a00552deab9c53506f1ef21b1bfcc67a83d640ee1c93de0af65ce17651ff866470f38d308b0c27817600e1117b684db837743e79bda21491b6f56fa57031fc83eae5c47ca4cb9a8cbb31e423b25f6459b0c74d81fb5ee6f79c904577bd557d736e2013cb9274033eddc5a8a88990e176640d9130e7484850999a7bf3fd16a86443b20e7c53a7a92ce0b7223e90512cd92b9bc60d593c15483bfda22806a45e5fb777526405b98c3211ec7b26bf8a749ef0e8ded593cfd6b3e4c641b4c53369229cf7d53b8065f82415880b464924963353c4dd50d62483e5354518607bf067916568322a2c6a5820f47e9340fe7f60488c3652a662d650ae98781d2f5741ae90c918f42690b4184424e731b8a8a7ed815443d65e56c6578c634130d9f10a1af6611edaa66342ee6a93c15f911958a225ec6e71866a25fce9749785e92b90762f2f1f9e4739f5c70bed4d86c528886081b231e2e255f09073a681cc5776f8ec101827533aa4e0f31aafba844432b58029826589d52ef0f3fcc5c391666fca8011c270ca445a5ea196e99c9323d4bc3389dbc160aadd28651345e04b3fcf5b2d0ef3ac073512347f15a2fb49a58af459d0e7edbc9fb356531ae9d0a73d4cb41d1044179b1279c687b7f86c6d7804349174906a211276f9b497a03f94be196331af07da0e5aa11e7f140ed2c4727509673620e9baef92cde11f90c735e31413462e0144c795e2147bdff5c0fee510a2fca85b058d0a516bbc5cb567646fcac4c3fb8e054a98bf9cbf93e29349b3d63814a470e7044230bf263807075ae3881f58d8bcba4c7831552f8fc7edf4db231ef857ce7eeb508d5ff74898b7f45884bf4698093b84394d0cf0e79e703eac67c10c6d20e1958191b6a89e22c18fc902676fd3bba0f175f7145d1ddad2311001d823f310c0250d19ffa9f28b80254773a8a44523aa2d11597a7b4257239d01676320ed71d972146630ca1d60a4147e78d9971151b069a026b9ab9cd63d83204b382d6cde0b9b6404845f8ad87ebf048f341026048e69976c7d1f3a8e51cdf9dd11716600ba0f4e02f88c116254e7f81530fc635bbee3d340345f40ae2495665394cd0641cd667e72128269e03da118f860e03e18970fa004038374867f7613a6c46e699fe56c6927078a1d378a70e436214a6dae434e9b40c3db24019c1ed197192a1a6d409cb93d4f56aa80c84b549ec77dad4effc21ef043aa4d83f16201348f7c2b50a62847d0d81a768401308beb22e86a9564843cac5e699a7fc00d9aff2ff4ea45dc41b2b328ed42d1053fd3b6801b202445a0935f76e1c5c780e2a88e457cbb98cf324f768b313ab701375403f3144e6a4d99eca7cc8a8fa838ffd39c9a884a03c1a1b7a4d6932d4c7fb5fe0b83a40062f07c17b8600b201d9874e6aef2b2e08e8d926ebf683935dd90e39a09e31da3962ca08a22765fa7d5264422d929e9951cd3d2dfa9f204c20067481d705a4e42680a809d161382e1d2ba8cee889b30b9d7a259234d8337474fccae2d5d064a6a340448e7f11a9d995de37d613cb280f455f6b98a1fa9388168fa0f0d41d7a7255a6a20d2b288348a80101cd38942062897149a8eb0efb2a70f29be53b71c553d19da0e235cf5d1ce2e4d239d9b6593514a60b03340e4ea148ef51d7273c037beb27d4c8acbfe558a7d56cb43a55435f80b703b0b41e77a6b593b578f5a021585627cfd617822524af2e4e320d9f455886cf8808e542cffdadfc364e1425f6b78a61148dc9c714df210e71e32d4ffd56d110c345362285a4e1f91c372f1a42c58e68092057a705c0fe61d2da4e8e337f2b432c11fa21e2567575226ec47703b9016117f002f21d066f5dc31dbf0179a9f7a6b6ad5403f98edacaf446ad5ce66f544fb68ea726db91f9efeb46e9a0989a7416fee681c7e6803c5e007dd44cfdff722069d692cce1106d069632931be6979a29e11b6e6033d9b136cfcc2bb71f476243a62c7d591d86eab7cf5bb7e234a02da35a33071c318d2839900636b2610bd2598d5563122a6a6cdc673be81321a9a28a307e108066d24b2af24fb9518b03a0d0c270d305c0d1d0c6cff063c530c4ec092c9c53b79b44e7ffc54d5690d9cf019aa5a394fa868e8daa600bb64f8e9bb0034109d0565e5cc048593bd131ccc61f2f566c8fabf6465ef469c58c54fe167311f0307d90314c30484be1721ec894fb45deada167a5d7b5c730b330b265ff6360739e377931a9e0a80bba189c652364bdb6486235f4dc27a18cda7a8b2170bd5509babebd98ed03cd6712c9d8d47eb478ca701162dc173618a116df9ec82841ef4a39e1cc35ab0aac3c6de0f0419f2b681011054d8eef15ce435b19c41d927ca50937da9ea1a820cab73f88c39c82a4bd4d6e015e7d554fd68784f373425344836a6dd829435cfa9db0e99b66979423648bf5f527de4fdff380ec19e06fbb59017505d55b3508296c1349d0fe2cc81252e2a939104d61ae5f5584c60f37df8a0691ca837b458ce7a9a0c844a09d254008fc6dc70e31e4298e40c46e23a47a2ff6ca2a1c81380a42d2f747c35a683dd40a6bf9c08c750e8639940ae0d830321d34892b187fb4f9a4c420c511ec29e75d2b4b3e7b45c212e60e72c17ad8340877cda5d1bb83cb32ea62b1e2913650a8126e0d4cd43855e672e9164c88cdad0810c97b2de23999fecfe0eb1840d677da171f63c2550f3c267ad2cc60f5c881b78da433f0853b24edb1427a69130dadb6c9cf4e5caca039e42349b4d0092152a27f7de2503583f38aced02bf2c2e88e13b3c3a0efce937c2aa3de5f557139cc75c84391208372168a7e43f0474695e9b8152a160dd955c50088d20330578bbb4803f7f9a811e25cd6a41fc7f1e8883f71fba2ffb3d4b97961b820c21a40b94ce60f84cc0c4ff89790ffb6fcc76736d54281e41e5250255227f3416de44f60920ca8a82fb69be1ec83ffe463495d541141a08d71d73f3db7372fb3bd91c27936303838bd8b4db2e6ae0c40ed8c509e95d22580f0c1a7bc9bcd6fae89fc4bb05ee1a2db072045406cc7e98d9e301b5640b246af1fc7ed7cdd74f428ce63fbd720317ab8c352d61efb2841ca55e1148e35523d95ce4dd0a11df4d774db07abcad56c819a19172b57096070b10ab67b18b284ff6aaf4b1507b9287d153c8b80807a52bb11482bd39711aecefa3c1b8da19b204d5ecdc827a04ae4123eea9b683df483020f9d56583f22bf001949670e2237341d2647baad636a02ea4bd6863e200ea45622b1fbc471d24cfc0f93c33412f83d44518cfbce1e256a5ded23b8505baf4bbb923dd521e6f7638e4d3bf81bf6188b72010e085dea89dcc9cf5d75e3344b6446d883f03085edf49a2dcacb72e16781ef284a3d2a9eaa1f1958d1a8887c620fbc0769a4cd9b98f2f65d0ccfd1b12c7f0b11ea0e7fee173882ddecfd90a5b4f554d1ad8a20e59397f0c5500ce789e2541b3aeaf721ac23df2b2c2e54b690b8c9e5e3eb5528ebcef2508f67c77462e1beb8623ee74226bf67521a99eef53a3ad741d5a31c3a570bb67f3cb08005f18b2d4789fbc37466ee7dd5afabb8d6a96c739f8f45aed26fad9a2ab5a6ba03b7a83bb693c963baf3f6dc935075f45407097ddf3d167a0567ec49cfe5f255d4c09b4be97d64acb277f489f4a2351c039979f3c6eb6a269f8da2f2a302bcfb9d191b0a894364be874e923237a3554d331dd14a28df1b67b7c7ad241b78b3374059e3baefc030e3b858331247a805738bbe096f53605cc021d76e5cc7f7701ef648e4fc2347fc66eac346d32429962c7cf53ff10cb8bfe3de8842fc83ca2856979cec9bbe3989a07f18a17b724eb0d88e295fc99b3ba310bde5dfd9cf3913d2d97e8cfc02765a1f544c096769052674356a5e0a8e12eeb8d24671a621aad99f2393b435e6b107dc8805d92430a213909cf1ecde65ce58db7dff454f12a6922734a55bf4edb953049cd5884934b45a1b5078e0f478f63e6bf1ccb15b84dc6ee5bbe38b5f8437fe560cfbea85aef706d7d917fb2e3aa6feeababf9583bcb1c085081d47d17382bb2e211801895a13a5fb6602d9605c8a443de68df77829334b5bc6a479db64ef95647624d0c10aaf137aa60df557051e8c7043d501ae61f575282837fbc2885a7fe1952e3aaedbc931952098698793b9d653f0935e1ee96a9eeaf0a774a2538c4c35977df18e11f4214faf7bea4fe9dc8c7a486bd890e600a38cbc85c6dda12029a43a9c0820fd8b9ee13456a82442ebf9d201919b9836cb570134000716d9ec96312ff43a8e5d13891ddbb69ea42c9b06f0197c062c9f1e5d05d1873e306a11be8e66dbbb5ac86352042fc1a4e2796c277463f496f8345c0a2495cf54229bbbce32d10ba614da962189efd7cca4899cc761dd504174c1b42e8352241aa1e130ba6a6b9e331d347cf6a66ea880b58ab74d9f093188b890f20cb981db1ee9433ac4c2c28bd5d9728f593e0e498c3fe7b78703cd5bbedf805e26c245511751931814017303b1fc85d4cc812cc7497f3b679558140237f0f2fdb77d1b14f7832379c2e9e014b6ab65d782114bcd393f4030bfd19844933efe372825d586310cd01ded7b3a4de645bf27f228e67cb4d3e2f7f67b102e164d949b15bf3f534be647523b9163d538fed1796cf8d71f0c01b8d5e98fd1462bfb75b8d320def9a34cfd9ad3b9d26fb88b5b56a926c84fc5f4a09b1f969af75b6e53469ebcd0f7732bdd52d6ba2196e5fe35804c189fded9464c22aefe0955ce82400a5a6683a7a2c11b3ea4e59e8154bd371b4e445855ec551484ab199d12d1d3f274540abdc3606cb2095819db0f4ae4115d7e9257037ce49606b3e2fbf65c5878375da2bd68835cfc3a6b5d0b6fc0788267ac3400780356143056ce05264b8604f9dbceb3626f610b4c37d1446bf7a054ad528fad1fccd9f777825d6d30abb4b06d0b962d3b95f844e9163d3273b603b0c2fec674f6bbc7fbdc82d31edf68096fb7031b243c809a625de7d9972e8c8438dbf59a95ad04fab4732d1667b81633d3d9d5c4ac8332d4e3480e5e4fe9dd667efbe263279b9fe5fb30372133c9f07f32f5c2765e5069ce7e420cdf26e6b5c6223fe1121b4b22f9dd6b48a3d4c2b8198fb523dfe4f530404e4370228a5e729c6651d3e24655d6e6d4c4236915dbc974134a0a4ba03c763dade7b80b24aac6704733b450a132ea3d9c36fb2862d6100908d69b2c815d59f3f25a432f0c8c2df3bc77160afc8e8209bd4ebe8934d0ada0bf5dc180743205dc760c8b57f86ef112f3e8ef3eabe8663d7b6446d077a65fbdfc089568e2b7f76f5897a84ba86d4424e94ef37ca9e9be5aa1f0e3961092fc74cd1a4369ace28424682e1cb227927ff845b5621da0e95627fd5d11a134325b7477080ef427c61ac52ed081e86bc032ccbad57c5ff0ae54668c82179dbe6aeac727567558e3dc1ac1b502daa073f13c4759905d0c4a591eaae7aef12e5b0e7d3e219cf2b98c4a83e6d45e47bd9ab772fcdcc1a6417302ef38727cc255ac2db3237d7032613f60394ab3638ad58657c9e9aad142124386adc55b631f843b1b5c1faafd6a021a4e7a2e6b6cb7c8b3edc6b061995ed52f9faeb190863a20de186e425b2bf231c49d5dc6ead46f21df7649381454970fbb4f673599bc34a2068bc941c86eca1570f1a9b80d56c74b21ad6a1f3d876c70863d45cbfe2b8653b915d9acaa6d62bfc3a5be60977293e96a84e3f36f10ce2fe1c8bcec8e5479f17d884b9ef46e155e06b16567bfab22ed332d0479fadc0e8f1ebf162c54d2f151ab78a89d07142fca37c6d25d55b7706602fefb6111a52530f23dcea6cd05acfa7b8e1cdae45518e3657a518554318215e1be30615856379d38548dda6797206b5713bc8e68c4eb93c0746bb1b83c96fef60ad48ef6270a944e4fd13bf5b727967da2d5d3709d2aa90af9d065c5f455c5728d3a58a578131778c123c2f8ada68ace717719a0c23c2341b5f33b4a4f5a96c9d62d3c2198d20884ba5d2dc74596335e5f34796ffcb29aa83a4156e5ccdfa2792e8b85f916d87698ad46ac418382efd8863cb3db192d24ffa20ff3319b9ae62915cc12f780d261a4835e597dcee382cfafc132a0168448fdc1a9d80e17d683c6e412ab59ed431fafba3038b949dd3a60902dfbfc12a28fc162031514b57dda77a680c44252443012d6f43ae41736b84e247df709b4505624f636ed4c99aa103319655913d22cd3fa0799df7fe11254704ee438fa7bb27e51e38418fac9c02dbc15815215fab0870f9fc8fab0278eff4afbb0c9964f439cb82d219c8ead018db44540ba3c6f2034937f58160b2b2e454fbffa818ae18e6dd0f50d0f431b38409ad284bd54459312edea151b82f486f6ed040ef138ad0515f7840494014eb6ecec7da32b011cde938fa18b0b71d7eeae0bdd510146eb07f402b5f23c9013b9540f2772f8c823549c55747421a86aa862fa0a6894ec47e96ff0d03bc884982593e839c355f1539d4d0887a72c2ce84467450dd536d0914f44979ccbf849cc2612374b3ee11fe1d0870f01651b91b9c5c4cbbcedec0c9864f2248bd07b27687ccdf73472c4dc8bc9fbdbfd30866b39ffc53c12845a3ce29cc0a031a2cb9540cbbaba9dbb2a81fad9af7c6c8a977dd94876e9ca53eb08693ad711f94b36a8d9aa34f06f960637bac8bdf3c1269a0343e763f77c42b6da78f771e9dcf0c5a9997b453d1d37adce49b43f03b3692532a04c0aaffae6319445286f0f0f837e1d94387f493124e09b0f320ce5e365aaa299882e4c31216ceadb5b9ee1feee35cfd5126e6cb1e2312703a3b7ece665311c1ee945284a98325c9507c3874e56bcb2788b8dbabbe57b4899531056f88dfea4fc5b2b2617920298739daa9004ead30339c2262426794a864d6d1f86d90229c943db931f285640a14ac774631c2d2d2b88ca954f18228952148c2c7fc64995ef39a906022513e0f08649bf159368c4078aee1b3d34de05ebc75e7295a5dee2326ff7634b3a4248edc76090a4cd5970a410b3b9e142e2c28247840386cc8d6d1dbf8448938849685cc58891a3ee796240acf95392e76d48f9330d6b8aae3dfc50a60e5603a465b468279f4b6143d3eef4a680b59190b0ecf116413126d6d2221268f67012730b2281804ffcf698b73c10c731aea6ed9f0823496da2ef89db360b1e73ae11a177834c08dbe5ad66ee7fa80a54e985c3de0d343f2c15fc1c0b519f390091fadbcec315011511aacd6d4d540f48facdb92ea4e4c1a21b2b81e15826d1f32c0cff93c2221a7490855104bc47e28fc4d97e80c729448dcd8b1b798cdb476fd3bfc404a0299813b43f74b4e9d87773f32ff7bbd7a65fa34bbdc51d8ad466a359506e51db1b52185bea75bc6afe39a608a5fd9e3f47afe0b7097736c569556595a5884a43210301da4ffc4e786722242938fcc74d5dd59eac5b67889b06d77bd1c854cd3bebd5bf44e6ddf961cf6f0b096e7dff478eb3807dad88937eaf9e569c1b1c55e8732cd0ebfe53f789f4ae8112b0ecaad23866032d5ce49407a3284ace0ef169271ec063b503c0e65c83b9fb1f79f8fedef9654845f20f0436216e61afbb821728321788f2aa60f699583563642caee02d789f0148244f38920ff1cc22363d4a3bff2325afdd4ebf5d1b1337733574d588822eb03138b727a74a83a4f5a840263f7a3ca39be5323594f1ee9832f8f3f6e19b28107e2f2c52f9320d0ca9e9dbfbfe1f860e2715a4762562300eb937218bd76d1322e04c73101c91de24c876d6c278db35cdd2ddb5013e02203dd8d10a445db5cb49b7b8524fc374deae17520e829c589ff535606cdcf6a2da475c410020c383fb893a61baf56f55eb82d2b0afebb3f435302cb66c868fa2134dae9cb244881c0274d0dcc367555ee1735d80b432a4530982e3d9518761f995231994888ea08bf627442775dd30bdffc9666ca1ca332fa278a682404dd3c5325728db7c06d77341bd65b3a664a3fc476adbf82270274b6e0e962f89cb6f1269d97c310f09c22181d861a351545460a9eddbfd1151fd450ba4de42001f1f6dbb92e58903e73f7df78688cd0305d458149c3c9fef130466849e286d22e86baa55d9e3c9192902d6671082bb1e9f7285307793de2b2e8064db913e63bf5caa8220b342d273a2a748291bc98364138fa306446f9e41ea50f2687aedcad3ba0094dd1f36c33c78a7ef0b8cea9ddc3697c771857cb1e8781041537ba39df89e5f673520a181d70cc5427b0e005894c413066c16719c3cf91558e09a6533e4f7874324983b3fc5a0e1894ff7e0ebcc8683c8cc82dda655c767691a550669e57b229bb4cbf3fd34f2f9a8b4125037c2a661dc22807bfc72ffccfb1802842241ab621582866441e328f910948cc59d07a2c9026546c5cef67fbbef1428c7faf446fa89baf7cb9c6d4f14e5145f083435e8ad68a96a448209c8cc41beb377a95595c61728111c6985c9d722ea66018aeebe67181001739836d0d8c8259006ab2b9f28883285c6930da6efada49ec03653af78b36ed0a94d3f77f084178f30b4733a9c403613cba0fbacb40084b2c9bd6ebf80f2b49f201560e9e0fce9aedc809ef6abc34f01a105d464a6ba1a0b822b82fcdc467a7975316076f9ce0ff0dd95bbdd7091b4ac75e55aeb595f5545addddd55d30dfdac7636f086d3ddb5460409383343675812fc6752ac7ca96eedeed4f8a9a018814f24b07cd8e8281ddb276f90d23093c70fac0492bcd00670d3e78454348a889bd65e2d618b68056b3914f8cbd13e191648ebb5e1d92e519419f485ef67b813efd5857b61047fa7ed05334244c5be51a50114bc131382ffdf2022e605afd621bda84bef83d69d40c53e452fb00777b448dde8bce877804fec62e36c13b22e409680f5e6a7c203b4c4e140a73e59207011241d5c46e6fa27716416bbe00c5e9e43e6c7908c3b262124fea7966c71ed8f288d7dc9bec056c4f4e62efbed492f863544402af1963e6069701c56f8bf623a0101422e30c15b4550a53304bec29b1068787b2bfd82781531cfc7023322c72cd3a7f4ef12d536ca5d7845dc2e84540776f997c430ede6d6c5e4cf300e3800c63923e67e8f2a484ee8dd9b64a5212681bc751535a0f76009b7670254857f890c2d89c6465c03a80185d6eec110193c546553f1cccb4dde2e964ff48905667a4dc90901aa2af8f8146d239421a57337a485731c347169a998ab0a556196f74902b672b606844d955da52fffb3c59e451b04f13dbf8e881b8656f242712855a63bec06c6d0ee51cc471ae341bd4284a02a23d0d254e7b575dce2b5325eaedbbfdd98dc4b923b57a215835a44a830201e20ddd2e4285df7234b7484bd704a6f4c408f192eb740ec9dacac3b7aee4d862bffcd78016cf89bf86be9981dc9dc382b57b3fe1a0b66bf05935cc5ffcb8aac78baa72a4366fa3374a6588f73792b7c6caca808268b8804d7420cdb814173d1eb95aa56269a98784b62ba411290555d73570d1bebd3b91df0570cffd61367890dc654890381554fdf2f9138d726f96507ec371905b65d3d4fd24ffc2b988f81eb80c70df09ddf0577c5323a3cc527a64006af0f00a93f49358cb7b4d1268d26d5f34255af49a71640bac1dc20999a14784c4e42ce8297f4a98e363512b6f079ce15d934c1fc42564f84da8d5a4277933523273e46a17991b3c5c3e421773a0d09e694fa252d3724a816edfe1228e13b557dc4f0ce34101ad224a66cb1aaaadca824e53c8a6c860c093432d450f8dcc6770fcbb32bba3ed30f3e7167483cf0887b19d2e104ecf0dd9103a42ce3bd3dbc864793c2f0aef980827cc8a009c9f60228b0a4643d2a599cd5ca2b8e079872701df6bc2c63add9c21c4e8a25f6d2d7f901a30112de81ec8bc15e23fe9583cdb7f9cdc770831a7ee9a868f91ab4a5416800ec9c193598a611a5bded19dc25f72ca5320d9f1390645339b04287b963dd625188c8e2a69dca8fdb6b42c4f408f6a8c755506a2a11454043b0eb09ad0d117bbe4a335dc0a25c4732b80c34e5373eebaaeaff18a1792d94c72aed200b0c6c5e160ab1f53ae81fc8429b48444e666c48de28278d2c5ac6fd083fadd598ba2f6401f255822f390c0af81895a51dce868dc4cb1565c42665291473870252e1d5366ffe12576b8db8af00506198a4f6276d928c3c590c66e15f8a4545e114bdf6e2fae5362e6d529e2c106a9953bad2a7d89dc372b2467200bece58885ee6ac1944f11b4fa0050aa07931703a04ffc96572a305c0637864d2c76196ec0b19059b607eef239cf01c3e206980e21c199ccb6ae877a78ed97fd35debaa253983feaedd088848efa56942de1e846c4b9a7c432fa6e5920e8fc06b74846bca8dcda4d73f68c9ae0706f1e1d0d6bd0c82dbd3080f273b2f3d2385ddbe4b2f626b63aa9520dddb8a35ae9cd15c76c2411ec20ffc8afc9c07d1c368a382738b5c1d8324bb04a4e98e23b79f8b40596e59809e93a23016fc65bec2cb1120164c63b3b2c8e4b9cb1084c15272ee9ad6a498ec367b00a9f1ce26326edf214758a41aa2e3453467c38908e6edf04c4fb561b671feab66c55f2bc3b77b8e7fc62ea94d8aad9cfa07ac0ed0000e560acbf1cb8f84a54bb583af8d6b7e69954c6ae68877963c675babf254cd8f091f3a129462a376927fc0024caef541f45020125ee7301181f552010bb449bc1a095a34e88894e887977544a890a1fdbae13106b2375f30e60fc133348815644c92ce400cf1789286ead184ae714a30f1689c1833b0127259d9e05fe59d6205f47d95810bdcadd8533bdac8b9c34207242347a020f6063e2ce068c018598e6655f778659a25098830d09c898da9f27b5234d4f7d39de7f31bd7185474a65e3e9f46885355ff3324fb4e5bfb03c7504974cc6cd441443f700070c5bd2fcaa7e2e148fcac26002bd376189d52081c8ef6b98d7375d42487246e22b63d83036f79ab5a94a233258ca8e534bb29548a0a4bc481045c905d102d4ae87d69416e8b459a61474b9019d4f80f0b12314a683503b9085f718e4084dbbba7de02087222117edab46f01b7521efda1270b3e0facee23d228d2d4a9772667722a7efad2efbb3107e1211557a1971a2bd274110c404fe943fe5f2fc0b45636610b6e5e5045f1d4e71c0a8a1672dfd247314115de7e2df07ffc2b116f6fb66557f374b3b6bb293cbbcaaa1aed63b06b74d7544b8081fd710422245e1410e54a2d0b1084039b723c6a8c8348ef2a11bedff22bb4f4cfbebc270c4c250daa1477938a71727f70f6778a564ab8ee851971582d229e6d4649a1218d48b6843b939dee4f335a4012acbb8f43d2c5c7a94a159cdd22882f0d103232d87090510ced22948ed9e9ad8488f3d54b8bed7e5021cafe84f48cfef0513b9246be7ae58d9531e07152c0b965fa2903e6115497394730495a0f65c40ed3a906fb7467ca23ee5a524eb3c6fae70fa96f95a63123fc4077903e450d835ac9663b62d561853e823c91b2d1bc1ff12e3ab4a7fd8fca240c7c8f3f7b57dcfa0a34b7e8527e76c9ffd2fe40407a9a44c21e725dc5601fd3c6d55649e3b7a1c20371aa19aa2db2eb1fa9d713dc5a517db33109fa68100d4dece10da595953463b5dabbd7eb37cd7418bde51219373edb91f745f1db87d83c01dc7a2641ce33362ca4f6689b13a3cdd098af9273509620591e31fa3d094a96e0428ad1eafd27cfbc60ccc51ff06e7d4e1532aad9a7f0e6f115374ea02ea3ba196a523303c5ed739f0395ae6ed03364f0dcd042e0a59b3c7b57f9f058d9ec122261744137d562e4bcf4b82c486aedc690402e14f841e465c40e2817cc4f75eaf93aa7df1a036971f02df1179380d284709643420079568bcab9e04e0cc56d41adb26bdaf87079e3ad7bcdae582e0cc0153e1235f8fc32a4ac9dfd1099db2c78182f710925410c8693f3dabb86a2d9575bea9f9d57bfbf528e5333072aadc856b241eb38285db484af11fbaf029406ecacccf64b625d33fee9c078c4b958392020ddb7889eaa09856dc3d7120ce8e8883c1aef1c0db1443dd89c7227571fff5dab5c8fd3b15080a8542ba90e2a0f8340aa182b2595b13c8dbe89887769df770203afb4b4a5b7b7089a2cd69b8958dbcad22b7b4531b0c425f368a7423f1d93f7cda1a56cb4730f0cf2f76cda5c77358cf0142d84b731cd3d45bb1fd794509b58fb61100a3dbe475e615cd1bed1bff2fb45c584f82c6e89d6699382d1b75fb17307ec43259da0c7106204c64cb44c54b410fda495aa4d3a5fef6751c5ab1155eaa697be33260df1f0593d5f856b900c0c5367b2acff6203fcb34520dc53b5059080658668a7494933901a48d353696b2720c99f153673ce35da75f490772be4d86a6223b029bb43a391babff282b9f621eec39567b4057396142cd471f90cb10ba1598185501bb1334eb468d16847d7eb1ff8f6009e62e6e29dc2602470a127e1dfbea82deb14abebd20fa30b151e0ded942a0f8251635704b2b1f08117d98275a83afbf4393f44acc951c4c1729ea918155b47cf3667443648b071cfbf4f81b50bc51dcf463d0474045a9cc7bc59208cca9a0e4d5fea1f4a839e3ad8d332762b8b370175d991b7075bbebb0fa67cec490728235510a278b80ac5d75d0446cf27c41c040246ece93bb9b84b3ee363bd0ac49e692bd1dc273fd87d508e24a4edddd6e4de5ba62453760b3d0cb20b5ff2d490a963837eea597340c57e7f27d98e84f4cf6af40f811b6516f645b785f4acdf4b9a5be372993198eed7a04c249a534fc8b091b2e711894616489eff623d356e7c7f37d9f8d2c2c8b0fe53c9e767a1a18da7e085dcf81e5194d1179fc91729f8ff203d2f8e4a6e7ccfffa8e4cbd08def7925e40742b1e2ffdbb729758b2ff692d36cfc8d2fdb6673a0f7ba17bd7483b97d83fe8d2f226574443264e36f8c44b1b103268bc872f64cf6d818bfd06792022ace31b3a9676dc3c6a8d44a9da567fdbd44234bffcc26259f61074d761bf5ac8fdad64afe65db848c2818d9693d6333dd9601194398b7977a160ab592d3a66cd94ae2053790df15562612f5510c28402147a8f9b7d2b46075fbfb8a1d322df011025347bf8fa9a3db5822d302fffe72024d25a7f5f7e441e84826ce3351481145f2887f23bf196ad0d7c7b64d1d4da44b28d2b49e3cb060bb499ca319a76d5d14fbcdd44dadd44baf5a146b0068f1b18fc33e06bb8ee3388eeb3aceff76c4741770b90c154ef7e324966f474ab3a3a4db383a1b857d3db1abe77002ab7f1d591ecda369f843fcbaa072225922933ec389f5ba71057606d7eb9ef3c6b27bffb2c82dc2a5bec5805e180631d8bf0d7145d39a32da242165cb1025c05005431870c8fe9f51327a8a655dbe3109630c9b73f9c6646a4edd98a87122acbd7c639204dde19d2a6b8b13af4952d358a9c952d3eaaf622adc9a44d6071b88c95a3f56ff794777eb5816f1b9f56bcf6cb54ec6348d6ff588a6f1259d40358dfbe3b0c0e4c509e49152154850a04032992a83891326794292d3b89671841189c2936adb82d5a5443b9172c291902a41cfe532527cd1c2270382a367fcb49be37ed92f03720570bf396750f7cc69ecee2cce833a70b2260332c51b803bbddd89cf198e76af7550bba27ce675f7a26c53778f4d4a1d8c7287e1ab1f8bb2c476da518f0a7d50abd5af422022a8d72b08f206fedcb3bc3b265660ff7821901088084aca754cb8739496d179d597f0eab469d339ddebc4be9476ddc81c9cd94e2b6bf5fcb11e9668c5ae5de7e10fea633705fb879fabd83ce3be9b3eb9bb6737cd6233cab3d9cfdd45adf507b5b95d5b8807dd46c830b9e5ec6663466a07a5225630810f24103650854102136ed090387ac6e3793dd7f3b9def39beb3df5be0271bdb7de094d5c8f49520f6f46852d6733e79514b6ac7782b71be3764fbb9b11d4ed962cdd58bd1c4797a04c509a047d6b74e9ad04272e3501874b7798519bedbad35ef2c4bc99d7d48d84166e37173103125fb515b453c775365f6c596f361c6e77b5ef657c2c96e8ddf309527d5610ef6b4e5bfd1c328d8e30e80b70165be5ae56abf7d140d58abb5aadc0b051ab1533732d2ee1d3fb5d61cb79f44cae64413c25df7bcfe4ea87f08e79577f01ded1fd8a7ff5b38a6b897734e0ae1e0313a8326df5f60ae6e2ae9e278751e31cabf7c42ab2d3ba709c396da50383fda7a0d8b1c4d50882b571613ef629a7d3f53cefeb31bfb6be1b87386da8eb46224ef3be882ced5df5cf825aacb3a967dee78dd3d6d636c1cc313df3fe6b8933298b30b6a00eea99f770aca5b21e8fa6795f6b7b5e04664abef477e3ec1d4816a4232a22bbf149efc33276f597f59fe8dd668dac2a5b4416917776d7880371effd90ce9ba217fc0e59ff89327044b28190d7c0ffe31088ff37d67ae67d2982dbac91720e6addc31eff7d8b20f4ff58bdec4773b7bf88863f7a649e8900c8bc34cc80def6fb2c917efd958f9ed5f78c3887f7def760a0b98469de7b3d3d3a3a61e8bdadc2fa872112b6a4b567deb7f7b55a1b8bfd7b4f7a1fe479447ae67d8f437ae679de74fab8484d61bb5b670a3b9178bcc36f7f03aeff171a31adcf7ae6346885810f1ed52bb8a067b220e0871f8e4abed407471b7320591025e08763cc69fe65d1a514031f3c7a26817e19102a03d2815284bb7a769ae18fd5653d6b04410684459f35faacc6190642ad00ffae07ebf020ae9f8e4f839c49bf3cbc0257478654ecc7df819a7227caf86b2eca38c6c3d618fdb2b2e0d87ece40747e19577d74ac81660b484ca02e7d1c411738e598615275e90b355093f4b9e66abbf4416a0685a64b1f4699997f7819716ebb1914d05c2ad54d5ff8d8876dcc4e8fd22e8b8a6e1884ed9fe237b2c81ae90ab3b9db6b4305d51e0f09f1e0c6502d5b2bfc696b20be02e9288a8b31e6fab3d3182fdc12bc33a9cc1846b79c59e6d2640a29978973bb334c1948d79f6a9452ca71052c0e79d0330efc58347ee7abd77969a3fe508b2dadad16d4b3e7ef302463ad03d5da5eaff5ac5bc1cea32aac078a467a5684c8073de344f88478f08d43ace79210b981e37acd80bd5bfa6e8f9eb48458d76b060c89efcb520fc6a19eb91b2ac4150bafd8210f7ae67afb3fafd073c422fd43dfc569e4b2e25caab9bfe54b450f721a0b475b329bb02a41495382953652c268d982f4a22f51423469220b335d7220fda7cd7f1ed5f77644d9d0ce7fe9dff922928628139aa4ce17919f8bd3681ecd273ab38a536966e9d952cfbcf46c476452e74e5b151b547b63f9cbda7cca691d7e32c296f6520dfa6dcca728f39f398dfabfd344998f19d01b74bb2ab037b6ac2c38763e4d12b8a594d6590448abdf222015dff7bf298294e3e66a0447faec596e2c6397ce7f4abfe97cf7a1d60a36adb68e1606b3f4bdbb9cb76bf156e0e828f3efb9e5a4742c02bb9cc38ee9764072c1f53109980741d07229801c12ee26a126843ec45631a7f15cd654f36af3e5abfdc3ccdc014f2a266bca963400b7d4b9f4c34b9f63a018d3f827a867f3c31e3221ee7fae00eed852585338ad74fa28fb41653e39cc800d336dae7f5cd1ee9ec575efa27763759a103bcdae714b29ad3a3b701c0569ff709c531f8b5c706bcf2e801941e79c1346bf9f07002bf4530a8381305abbf8dc9d79ec99f3babbbbad53503ac5cca06f0fe7e0ef3be9734c47d98f9272dea6f60f333ff72c03761f15503d7ee7eff8b9919f8e65ec7bc238077bf1ee2667f371e7b3a482b88984de224177d229c5371d69fad774ce3941ea600f7f5a7f0bcb8d948ae5fc6f2ab940e66a79b49f0d236c0eb452aeb3b0505358d6ce3044376b88d1e4564b8410617471cb1a1a0b5ad13ad82f0adbd374c2b62e970983cc741306936b61675c2e138615cf210c24aa3048682dd66ed14e582b0525c1be9ee891056ffd643f31dec5763a380f5978b0b0cb65c0403203060974056bb7486373d47492ed9a6835b69660a2b1ac21dc8c11a30a8716aaba3499a173a84aaa42aa94b9daa95bc690a8d6da5aab8d223e37e80d0b29c8b03451506b6f8c78aaada09542d5a385172ad4b0f224ab35362c3c3d8182532d41939d18623e44d149824a4a43c376690186b453ab5a545161462da856415016a92c533a560b283954b0382dbcceccd8c2895dcab1e2c82543d52b4d0a2d298ba64948e5220205f0c6507565b0b52c1926dfc52215d65a1827ac6a2b68abd89cc65fee94a42d4cae962418a05c294d4d52b85b98ca6441020ad78a129c2b546d52b854a29e787295ce98e0688625a7717523440af70a92d3b84abd056bb531ee72992f9aaa5301d2d0a428ac88c28250b40a162c81ab605f4eeec47e3b3492756d996b6c2885ba10850bfd421450a2386182615763f8962e9c06cb519dc0d629bac47e507411760595c60812a0b88101c5081ef00553a5ccd5ea5c2e2335c68ba95bc67098ac3bc722e0b53ef773f07e1c38450be3a77b80cb41c0726a05f70b6dabba603776bf1ca8fbc1d829a653d2cb73e7580476ed0e3845bedd8fc68e0e6cc68c1cafe3e87417643c96492ebf8ba114e7e91aee314a8363dfa13a1eac7a10a533669013cd61bd3e0bba2b6c852ea63fd46dcf66157c59ff725eac9c953b8c32d39e554fc7c16e8772de153b9fc69899dddd3d8852e7a911b393ce3927fde999053da70e77e74139aee752194f5b40a7ccba624f29a5b3a9831fa8cd9733695bd0b3a78e575b8f0a75d1164729a53476e9ec2ae831e59ee338fafde41ceeeee08ae551a93516b37632b347857a6037e7c859d03d7bea704ac7d2dd9dba6acfdcdddd031fe53caf2a0b8e070eea639f150563ab1779c77cbb81574320542cc74b6d776fb9108805c41fdf55f63d71ef3c13754ba63a6344a7c9ce57ea9ce8bc6b4309c30b1f818d5dbe2d1151c5be2edf969abab664854a73a51587a30a83ad71f9b664c4c54d121824ae3db14a194aadb666e17d395aa559a1637aaab5faf484ab05d52a08b261cad3c10a256f70ea6a55ca14b761a93e69e184aeb682d6cbcdcb114de35b565b461426a59b13372d7c89721ad7da2e148ca88862850a13bcd8d8e5326cb078c226ca8a5bb593c6fe6b7316148bcd6a352a2817c8e3d39626b135b02d5114c165e9fa8f311c5e8c10b3644d0d71962e000494119625bc10e185afa045cc6b8b2d4c06b8fe62e5b2420d2d4e2cf1b6bb8db89d658bdb3cb7bbbba930c02dc12c4a542d5eaeff8db0875b2d5688dddddd3f36e805b7049bc822c5e9fa5310f6f0ee26e0d0a8dc63178085c9f5976199d2b932029e89e58a93568e1bbf8254801a31226033b4b9dddd1f8b612913d298cd00c4f5df097b786c4b163a162060062334b12231532421c4ed043558407591963565b88102e9062dd690ed485baedc7e0cbabb5d57aceb8dbb2bd9aebbbbff8cb0873f54f7c48086013240b9fd3119a66e7fce178d8902cb161be0980083141650f1e2a60913ae2cd1054a112f7e853de8b4b19f710c47b7df4e31d50215292c249139019c2b965ca9a2061bc63041baaba094b4e3d3e36c72603d3e382ab062a5092b5edc7e1bfb59cd15f6e82034a0090a704b1c545a38c0ed1b955b1519aa70d1a36bfe4db4d4d072777710d6e30374fbab8dfd9434b71f9cc51963899a2e61de4c654196f68a3186131c23a0d06051854c618b1231ef41a3644fc46e590114495392b8909282142bf836e506830fb76758526345dddfc240e5fa33d4f5aff6d62394a46013848116e605bd50c56bd1972f9ea67c31e2090e932c5734a9c0c31299386ac86e7f727b86a5dbdddddd13b382612e20dd0a5cb8bd00e5c678862877f7353f36b8099f16c230114585285e6effbbb0e4f6d399bbff10dfe2745de7babbbb90283737464e5f7112b7c4b1c40a41dc56288205292c748184c5edef1a0c168618465cb230d1850f0f8822830e6a96e0c1cb15f27dcc772758c690ddeeee665561cbd8f58172e5ba1337a4216245d8128c01b1d4046ffbe0b8fd048cdb686ea760c4edb7586e7f4c051eee0d4a0bb79b8ace0550d13dbcc359cf3ff68cdd5d47b9ee2637ce5bc5c9016150e2b8cdb7073c79d03f2597b9fdcd0fe01d52547c0ec214c03b3c870d0005301d0682b5773c7b08715a7f5490bf106f162fb580c85d4f03053508e31d7db90c2ae21cfd2e2eb6e4a80ffaa73d1852442b655bd7c28a861a5a629eab56adcbb7265f784dd42646e0e6890b43a869c225022d98604b1546534d6150c5c8d0700480264a2618618210b7a937604c81c416494e609001a389362b4781474fa8265f40b9e9616a8c0f17332ce164b312c5153fb4c82c1d11fa518d799180cbb726656ebd7c6b32825bc69ed87cec535aa021e68fff84dbef8ae21d0ab83dc4b4fe3ae51b4bcbb3cb6daf7a2cef59abd5fb4bc99613a9fb22b2f52deb4621a3a59638957e78bd6d7d6b24fa22e3a0f5af1f6a754fd41a875a6f47a2d6f8484cb6be35ce35375cb1658a09466c36b2e63400b8c0e49710583d8084ff3df815012f2b047ac10fbf13cbb22c3f0f6e47e4769fe41e212a715cefbf1518f6f0efdc4191ef478ff85dcd27f3c81ba7d19b2e0aa69e713fd782f5f76173250aaa137c886a52c49466e904b715aa3cd1a613bbce3be69ef54fa58934935cac96096c300606e13aa57448ff34d03c81c947118e6a52e5960c877aeeeeaf415f9780734e3ef62919641fdf7b2a8250cbb8f3e96b309f8e17dc3a96fe21cc4bbffb221741a17e21fd3c7c6cf1b10fd1081620918313f9c59ffbfff1b13fd6cf950b8347bf8ffe5a50961b98a524b690800826c8fe7243e1cb104da8b238e98f1161220b962a63d06481e2a06aea8423c0d8e2099208638471fa410d12562c510123b6f850556509a937fdb17eae2f19ecc789f54c1a2d6c643721430c1ca87210d3448a871f94c0624910627c60c1fead529678b191b63fd6cf5589f91ff7ae25cb6af9e8adea5b98d7fa5abd5668a58e21ec60e1228606374cd848b0068a232dd0b839825af3926287d46a6d2cf63f63a91a4b79cf92a2993c67baa160bbec74f976e4743f26b27c43e176f98602983b5ebea1807487f48ff7f33f2052a47f72a6ae9bee4ea69c237887f7b3c981603febbb96ac1dcbe9f441d3261c1a36d81f395fc7399936e8bebeec47f775aac1623446aa4c9c273010a2cc0d66a658f2420b930def58c23ba27a4ea8fef97eceffe6114c4c93691ef1e4eceb82c296478cdcd50842ebfd5bdffa722a7963e97d9984ded5b7ecb55f6badb5e6884738e76bce1802bd762c8d5c10bcafa5915b5f6f73d8e9b74a3b26a1d7f5ae91486b1c12126165feb2fa3cda9ec194ec09be6c6182282a18a8a64082864a9c2b2cd460050a8f570cb6bce0732d59ffd796f9d4b4f9b53ed9d8131cfbc43721c448b1c20409d6984044820e5a34bd6042959a0834d08c9fbf5365cb2217dc243d9b457a5693fa03233debb468c00460209145102a7499d920c6042a299449a18a0f9a369fddd46974e79773f2190fb930403347542404f1c48c9932264c1d9d697263b4c47c32d289457ad685fdfb81164050c1e58d91192872b6d1028928553fdcb4d040ce9f4fee23c7856da630546f9cb0d0c55491162660c8b0a2855219241420872ab62c3b64f10517575c1184152c309489f244066af022840fb63064c842ce22bcb899828a2954472e90f3871069a69ca63185898767029f418de75c625f0f35e8eb7a8fbeebbf09d610ebbb44efbadeefce57917b4fa4ef12fd4e29071af22342cf3aeb605e6ca65ee394727e62ea5e1dd3eb4582d2ab6302d344c6d2989e0dbe3aa6d78ba1507a754c609ac8981ae32f15ec7c42430dbaa73d6b0f35f07fbd46d641b2ab2fa78d055bceeee7131f3b5fd6cb7ad6ce043a23fdd38d463aca932f71726394d3494d7d3ecd30706eff4cd33ff3c9dddd4892468a2242b39952fe5694fdb0fff68beeb7d3344ea69e7da8e529aa6748f535bf59457664cee92deed945ee4327cb7d39918828f942e3794622b2203c2f7bd9485444f28cb1779eed3bef772736b2aa6ccf53f0344670e7679687bdcef7e5c49db10261790809e2d113b881468c269287e3e197fa1023d0b32a4c4debaf33c6f135b2e959db2a6cf752734e4a458c100f7ad6423deb6e40144ece74a391243d6bd047cffa2718a15a6df85233212322f44f2b9c4d4c3c2f0bc2a3c32041dfe1908d27d2c6587357596f3896965e7eb20dc99e67249a5e2895e144ca461f11e89f3a4e309e38997ad6dc65ded14eb95b2ab94352e27453c54e2687b9d4a4ea9f55fd534af6fd350e83f0780e83c8dec64824eb81e4196be1101701c60c4e1f8fc824052211911498281bc9f33d225108c8f08194fd37b929d540f30629becdfda4916e73d485fa87fa85c489739b491e77f7300847021952f61c0eb90c462cd9c82007e2f9da6d9e1853ac5feafb8eb0fddf9cdebbd75a2ba5d5dde93f3dc0ed91529a0365cb22b0db8d429e5e3a0afd9303894ceba71dc017f0b75fc8fb85385587c5c73ee5ebe9f687515afa3e2b4e201b9b645eef0fa13ebd3f581f8ee5bce1cb44d9906cdae2c07922655f44f288b2219ea7e02918897c882079be88fc78c2ffe651d3fa8fc02afac36f1d9defae1b4bfffa9e58a70efa309df7b0478555d853711ec1749e75743e1a3bef630922f50f12adac6901ece9581601918ee897f3e8499d1694ddd7a943e775ead39ee970cf7490c43a75f8c344d6d4e1df61067e69fc0e8d9838abe01cf593e951d1df4120ac441725ba5c1d2c6cf94ae2f6cf38334ecf7cd671fccb09a76ac601c19fb4c5e99993b15d1f2717395ed809878b7e32a7de279ba3fef1714af16d775bffb4ecc7d3f57146cda7193258216e7f974560f7f54f13caa594f3dd3f859843f08e4904ef288277d4ef9f46f00ed8f7cf237887cef74f2478c7cef74f12f00e1adf3f93e01db1af319645b7c6bb484524b422e1de1391788fa4fb90d447027b243acf9c634744b2f3cc39688848683c738e988824f6aa21badec5d653be34ae8ec81726f2ad9c4b94f953993f53efc836c5f612cc0a1bba75b5e8d847b62a6cf8abe7e149e65db1530d2e9c21655a489e9d55ff78d139c1aebe93fcbd7bf7de7d2c3defbb71a8672df3808fea01113e70e352af593cb197ba14ac37cea5a9e4855dbd4c24eaa86411350449340217877b26a303c9f32c31961b874c1d1d342c00047e66666666d89335d3c2ad4851925617049f40db486ed26ee744197d4e46c70c486e3c0aea9acfe893dc7b7f142339ef39b1bb7e6449ee3dccc0bb3e86e0970b08b8efc4a34a72dfdcc829a185166fde903566a9fe8398002edf7ec072bfcbb7304c8058719d47415ec29bb71178b93c97cd2c41e2c62edf7878c303d30e5cee177ed997bfe7a5e276972321882bd280cfcff18eef79ec2e10ee8221d00bfe273ab9475c17fcafb3b89f63713f6ac5fdb836f7eb40296e0d351839baf2d56ad5abd55cad56dd6ab55aad3c9e565994e57e7fe361cd6589253febe9aeba58bef1e074fd5725b7bef51bb44068fe72f55d587a1f7e2bf4c12383d5f758b5c6927ff5ab6f3c8344e58223738eef592ce7adf469cf388ed2d583b07a07e232e328571258bd67b0fac6929ff5cc12fb57a57ba0a832d36f766aa60b7f294936e0cee7f9312166a55ce79de7cdd0051732486182344cc2d860421b29e09c20660c18b7523b8e7a0541170871db610b0803ebe5db0e31543163ea2c95d4d393271eeaca46a582102a64112285aa1f3ca030a0b0d0a204d5cb59132c985239fb40a71b3503c31466924c3003c3115aacb0c0e10bcf0464d01c523a3439316929c103992892d30f950a0c1028bc66535803b0915122892a1d71cbd9cae6468b2c39359ec2b0e03ddd30c5436d2aa91e8c563d5cf921ccb1b96d8713a46ee862c48aa98c1aa419948b36a55e03e9cc9da05315b79cdd7208e396c3d39ce01a3bbf35a0b7a508e0e2db3d151dc89f8978c7b55615eff8b9fe1da882edee27ef587db953b67a26adfbb2bb7567c633f98d43e013e53c38ca58b47f2a93bb12bddb610f99d04ece7bf83d117df0bf7168e7734622ff9d5f89f5d6e98a0a67c8581f4482a28c350ab9d2b8a06a2ea823b38ccbbd275a26fdc36242fba78f3aafd54ceec712bdff6628e3e0f5e04fe0f5e028ab13b02faba38c03f0777e08fc9d91e84b7d22d74e6b863d8e0099b77e8f9c6789dd65e5789525047e074c824ae8831f641a21068adc1995f887deddf921fa3ba38c35e42f638d320e66fcce0799f13ba3922f433b9ff34a68fc8c0f92b3c3dd6f47941d41f2a3aff742b03fa2015fd677c024ec775e2644e3651d3049431664e75735a779ddaf667c8ecca321cabc51c6018dd7f9203b0f1b95c07ee77546255f8660bff34a749ec633993303a6b3436386c8644ef7751cf20fdf13bddb39b1d35c223b8dc996c8242832190ad5ba23ebd353ebe8833f441f2487fc65de4856a775573a203ea3340618646061028909b27b1f0e5464dba2c58a1cc0f860860d59b4044a1b3143309d41820ca9c3062f360881e606259248fafe6051d761095e5aba8d88e872869c2f429223dc8837d5b4191141687e9d1309dbf76892dc1b9de00092fba3497a6f89be0c71ef7de78d44238011a20699506784182548ee4570da1c858c386d3e3bcd5f48cfe67c1895e5be7d2c2d518f1c6583192a2588e28964b6ee4fdd0b949d73b0b119cc07b43d5fddbd67a30b8c6d06fb87dee6cb21c5d13f3e3af9827ccffa6ffc1c6c3920d555ad9ef4c98210cd2b9848d6af3ec9bc1390cd3700154964002af2fbd5cff96d50455414412c45014206b2680464c0a084449821823022b7c0e2053171a8c0c0848ac40085a71b94bcb0820a2cc87e1687c3d39d5dbee1b08403d5e51b0e5237c7e51b9318d7beb86fadb5d62fbaccf5c674027ef2daab3491e370a508f204281b6a706a2f94d2d87c2a0c972724c88f2eb146852a0e7491d14c99e2886cb1070592a8c3f4108313720430cc9935443530e40833a2481f692b607eff60420f51648b0670437e1574712ad1a04413d9a20f11e4b7a26a93c4eae20c9a339f910d51648bb228c80f045d6c1a72f09244b6e8e304f985a08b73c9842826b245bb84fc5a608b4c4607d245a24e0d1167a2c8119cec9980f99f8bcc0c626c648b9f17e467cddc82787a812eb2102c5051912dee38437e39335a65d13d0096246c648b4c8ed0d369f85a1462ce9e453d43288bdc7b650410fa34083157672cff942a1ae2c8f694298971ac5f5866efa3cbd9e0dce7b03363e7730fdb83b34235da30b1e1d9755df71af4ed5e533aaf0525c8907039296ed8c53ef71c17b2e17e7429285977da338e653c663044135104780ac240c883a9cbfd646ab3e496175caeea4acdeebb14942e37e79c34944097829258bfc30dea8719ccb19c7fbbeefbcbeef9a36033375b836eace3cca7671c0fe7de87735f73ee6768b17cfb32e67ef7dc4ddb13eeeeeef475ef684ab949bbfb09fde9eeeeee66a7a9fc94525aa78ffd85bb37a5ceccdc49dfe7a6bbbb1dcd57c7e066116d41cfa9837bf69ebd5bc0b37ebb8a3501825cda4cebea73d72ba6756fc12ba8ebbefc8efee8deeeee3e99d5e2c6d993e7fcbc8cd9b7bf7412ee9c73cec93b9cfb865b56126e73a2f7d4b339a38c8d7370d3d96ddcb8c1ea98f8d828d3c81c9d143413efb0d1751dd7c3b4a05f8712ef293efe668fb67fb81f521f3b1039c98ef3d7ed27a70a441fb3103fa4b9fc968a356297c68f7aa9b87375ae27764c6b21b9fd13a4549c713f0fa462cefd2a48c5d7fd562015edfd5820155df7035bf703412a86f70b412a82f76b8154fceee702a9c8badf4b5cddef0552b1de2f07a4a2d7dd0f065291bb9f0e48457abf1d908a7e3f1a600c94c568ece8f0f0b4e85876d77f76e26405783fc723f3ef69c1641deeedb79f7693f021a19fa4debe1cf5f99cc3431ee1cea7237bf34fa52f4fbcb8e9a0adebcb98155d62d115bbd62fedea4bef093e4b2cebed0b8ee52cba3dbbddd71e445369264da4795415876aaa7b62a8db9de982bad9ed70c4ba31d651fef1be8a2cf108d1adeeb7b6d789653b7512d599a95475bba7ee7978774484eb7d39c211ef7a4dfb36d775cf608572379f8b1b487ca6f97ba27341b39bbe7ff380f013cdc753243fee2f5528b89489025fbcdcbcc479c1d23b479ec0375f1003cb9dcfad3897a12edf6a58ba9f8bd3813d7fc8d1b208ecd60f599e58c44808fe05bfd65c57ac4b8be9a569dc735e6a48bab4cbb72e6e3478fd1ccb0b0010c5e7accc399a1cc8c5168a9db3ebba2e27a79bd35f625944478489d569dc87455899f7ec34d758dacb4f361b29f346a1d9e434eea793d3b86f7df8dc774ec4f00095c58631481046110e4c6080c325892d504cd17aef3bd11b79625dd8128aedbe7cd9eb5d3f2f1565afa76fffabf54f7d4fecfe7bee71f8f4cf97f3dce3f8be097edfe7881df6c8f96ffe683697e595de7f33de8b6e92be33466761eaf89e874fa6727ab9dcf4d233ee91fcb0630f57f82e916f4b2c8bc0a697315dcea5cbfd6cea64b07f955853c20b2970e1248a0f24f7410e8463890f5f5439824b123190dc3ff733ee75cab0e58753cde53088800edc0b0d319284af074586847ce0bd375a8e2582d0acef39d40008eb57af01eb1b4bef4398ab2fea6789fd9e17eb19f7ae2ef62ff09955c0d56e9472f5cb499a5bd6cacfd5cafab1ec5a6bad95c5fd4a3c32c2a52c916f157a213c7c08395003902039aff5ff566e2cad5dd52a2484870f5617de732cd628c6bab0657deecbaf653726a1973ea780eb44f38d0c63a2c811c023294fc82ff4bf2762568277139eb8c1cc0f56a6c0d9610510d4608554972653496390fe3fa35cba44e9f2c4b5c137c14e9c262029e144beb2d892a9849e4098a38c2ed97226d53cc96792d370bbe54ca261ccc73a4358be7539e2de5b97db9d404cfafbd3530540147e32424555a9a8849e2cb3755b73a0298569fe33d08043cd81980cba67923887bf73c0861cd8e82003124b9a901e8124bc30a2ea852e8e4640fa1b1161866ab874748e487ad07156e9d94cda5963e79733c969b526d62cabfc20bddc7732ee396c7dad7f64e0f3fd5c63cdbf9a03f9b4cf133e3e5ae2acb3f950aaac557de3a316e48938663e65f0f0510bb230251e3e6a416077493a5458e71d3cc5dbffb7fc5ad0cfb8284138ae7397431be33a6fcd81362823c41194324360412211b065cb962e3d40f1e204b2ff672dd85bfb5ad0cfb828dcddd967379df96b2de65c53cacc4c9d3633e7d3bd646666160cfe22e7e0afb5567ed91aeccf0f02a5c1724efc2bc2ce7fb5a14c3b26da39ce1dca0aa7d6da1ff297729c3b9415ee1ea64abbe75565e154e41c948ad73fcf21137cc69d5c87395d3cfc7d74ff5023d6c4a09e716dfa70b9f1f781c3471e3e4af066c6cd7da9b165edba19a8ebef5e637f1f4f4d908943068e25819d338ca166dfc66828e185293053aef881098e4c950f54555841440ae0676bf383e6fffcd97c9d37cd6c2e37da6f96899a9579ba7396a972f956e6c905ba7c2353c29def2301ae7219bb1ef7fe1c97840b7b508e725c77d8a3390bf6604bb0b3f361936e614b4ee2cea7df3d27964f574f5775643da54e95a5409b5582c5a4bcef8e78196594217593f4adcfe10fef7abf128f78b78e471cd025e9dbceccea55d591cd35df12613f0e82ea06dd8298ba734e99103b8d257467ef3416aa5d22e0cf6fd67a5633eaa9396df66cbef73d9b73f2e8a060fb7f358e389a6c89a34cc2ddaf2088c7735741c31edc536f6c39a1ac9e2953a6fcb44cc2b15816a95def9bd2b954452525e5347586eaa98a7e3963e6a7ab23bee2eea7fffd7c1e3e6a4135e6dae59c2eff27b247f465e87bd648c4fa8fe81b814a49e8f2774cb7f96e40ef119f48211c3039c42a80f588b19fa47b60310454008e512b6869b0e5ffbb603ddbc1c6e61701679369013fb9f404b674c0edf7672fd681d8a9b37cec537ab6eb5fb9350c54470f7a6483053867ad23f8fdc379699a3f983ae62684737827d5c169a04ec9a9fa87763db7eca4bacea8673e6777d4d97af6e4409d94bf270e0945c081be69527ee6cc7527a7a0a6b263ea51bade52d7a9d8b2b3799467eb9c7c9f1b3b9bdfddddddddfde7f5b11472fbccb7630053001d00669f5bbabb3b05003776a2f7f5c6ca068b82af0794853cad1aae98a5f1dac9a99ed35ce7bacf80c166e8e4ecbc68d898ab468b2794813d1f052c1bab1bf53db11b3900501f0f400b006466e6010c400001f001c028fe0d1bb3164c8d99139e6e8dcb664e9072badd7f3221906f4c94d10f29a532fab3ef89c2f78862e317915df7ded7ae2b83389249d797f57632ee8538ade346241d302934128145e4835f4486a36c28fcefc35126645f36543f7cf21bbf74808bf75cbe6752c68d4246ab0785c0916892ab677d1159f21921ef3fae9b3694baaeeb9ce989cee9f6c58baeebbaeebba97f4a5f72a6ee1d4c372ff71acccb8d46f6c1e7d1bed43f6c66499bdbdd90713f491bf8b508fcd77fa168b36fed7ba327793f4971e81bcdac807493f8a5ff1abf700f8ab2a1ea4a4126597f92f557529d3381cf64f7fdeb8358fbaf51c997215089fdef434ab21dbd4423e2d4444ab21d81e23c12bb777debdb35ca66eb89c09fb3e98b8ac8ef13417149363ffc2292099ce137ce23a77520386d4eeb38071dbd91fb72dabea2d9e00da42acb546cd3bdf1e4cebff1a47fdae5d433d7adca72cf94386a0a304c60c4175e3035e1a72a35547961020e3684c9c0fbceef713939d024e77c16f9cb1fa3ba9eee7449b9a65c4faea81b484a627f6b8a770009c54a3e53bf1565c10fdffb46998f32f72762bd8f439f10a7f5cf4f94f1b7cec8f85bfcfd10ebbfe7ffbe6f7de3cc69dc27f223897defff89ecb221f0bf07c76facb2a15a32c771de58731abb9cbab92bb601ade734b71b6a5af7420ed41a89b890a921fd335b5fa489f40fc311a167dd3707ad0f95f4fb50bfb79ec9209187d3ba6f8941d3f67a26bb9f47b209b43efc20f65d1f24fcd7a8a4f5e1bb46255f865a1fbade8eb2f94c86cf647589b3ee8afd9f6726d36c126a8d32ee87e6ed791efdf195e930b1363e74a0d8773bdfe97cebbf9c4f3460aff3829d46335c4da6ee575f8ff8a5032699d402cc65282edfb260e276d8414be4f95094fd0c65dc0c858c96f8b77e497ff836c4497eb3c6c79e4319d7b3da31ad708e0e68c63069dd773939b30acb8af5aa88b17a19a7f3c412e11ddf77bf01069a38ac78ea1b2713e7e81ef6c511efbfe76fecc19a5cd803c9ea65dc28c423fbef0aebd1f81a6fb4f3b19f675cfd93897754a94e8df58b84de72daa611efe0befbb98481a615a675df4d2d29dcce4b94d6e5c659857374afa3c6f62d6795dbfd0c651cf07ccf0b913d053f43211bcfd9281be264725af714f4d834dc68a12cd4ed64423cdf01933c5c2b54222af9e2bd12ff967feb87fc5bef8d43fde1d710edc744d7d310737e477c3d4c045f479cf12cb103268d8c72debed1eb5dbf126542adef80c956f8b7c68a1432325a02fe8c3732ca7923fbad377abd91ebc39f4edddbd78cbadde7cc00275558649b4cf388079c62a77fbf95ba0c8011661475ad63c3c73ee5d724dbaebbbf03b19ebd6fcaf2f538ec2164b41a65dc13b1febf918887d33c1ecd126b32eebf2f228364dc281b628d445fbed5689de63d113b8d357a4cae4426bd6e8db59c83fb17e7787fa288c7a17e1f89fa8b98f8fd99471907f4b90fd2efa312ff1ef26fee953c93f499642a76576af383e6fffcd9fcd98d43d7759452da21016dd7dfab7b27657b6615dcfa823b71d482eee4ee33fd53f6b753dfa69a5b82b7991ca8c981e84ffa35083756a7b1d3bae94ecb39ea7d2ad30dda2efffc9482aebf07ee2ea7ddf3ae744bb0bb9b72dfcdd1728e097a3f1d9d87bf0fff9a7fd0cc66b3914065b391ee64b3d127be19e7a05fb6052bd6419fd98210eaede73276794649eef15b63fb3907f5f7a137f4659f5109082fdf53c67ca90ff7dc13e15e484827d440a213c73dd193cb719ce672d3d6f5ec1f4e86cbfdf76e67313b6321a759a9711fc4fd733fe3fa7bcdc001eb57ef2961fd4a497dd6589df6756489ab9145cf73f3214952effceef6551a6752cfbc2df669263d39500d2e4e9cd00509179e58229bdfdcb048e121ce9313b840f6bb939f99fc3c7e6b2c3f8f26e265b59c37c55101e1b8cd8da54f8f85d539966059c1edb1ac60ea28dde2348d2ca110f619a472c0e4f7333c22849d36ab12c24539ad1f4936c47af0c191a8b3398dca69fd330cc22ec47af6eab4faab3af210f895eb94b84ea98166388171ea8ee81fbe9939824a959d9715d50f44dcb26bfa21ca2dbb9bab7bbadd41ddeea26e3f379d5270ac43e0af46a2d58362d921d96ed36f648d31a75135714e1394ba53ee241baacf7a5649bf885c89b221227af445e468eb4c72a2722077aa8ad9a772a7f71957653ba2ba49b7df9d9cd61d537fd7d4df29754b2b29eba2df7ad641708efe293a99a9a39dbe29dca9a3ea3ac7045dabf18ebe44234c19d2e430457e993fc20442892936f28b0cc804a1fe1c651ddf308880d0f5395d25f82eb114baad77b148ed6210013676bef7fedfb78cd51265dfd7fb8db50f83fe019f7df4b19c0fba44eff3b00738c1393d6f0cea5957d033a0497a35ee8b66adea076fac9882cd142aa218e248165db8406305141055bc5a822df9a92c52bbb2f97ca96c7e2df926e4e8c70689b50aa4d4bc8092445397273be0f0859d0803c51a2c8080e28722c8ee580f14b68cdda6420dc45e485d2344fdc3b72f9878cae907f1529f258edbcf77def618880809f13b5f03bf1347516b82544f58bf2ed7751da26bd2af76ce49bb2dba6eceeeb8961a42848ecd397cba948fe5016235cee1ff019121b036b66428297f217f4bd7f5876d619da8a22aa754ff4cbe8d20cb9d3fd9f4cf7473e7b7d39dff31b785c980d1439a2a5e2843456a858549d31161e4f0840b9c088632587f3a8020a4d040440c62883922a783a9eae14d9ba91168414e22ac68e3c536258313121429edc0c50d642ce9824d19e4c462e714f71d8bb5065b26e12acf227e76160ff7446789493866f6af3f2f9b39d5b3d98d65112772fd45582ac9ca1beb7362e9b6cbd9a2aa9ea8ce4cb5939494d3d419aaa72adb1fcd902e07715c3f8bf4bd2344d7794cc25dcfe2f2cd8727530a0acb57a964a9cbfff1e8a060c79cb97c1bd374755cbe8d39baf38c034d364d9bef064eebc2aa6cc9539c63a6919a733e91f9736af2d4958a8a79673cae93677b652dc2ede43ac14ffaf6f22d4cd365fea13324a650e550460731b82c200c134a60614b1627d01401e1a6053039b850c2d112a47d224d1451b4fcd0c595f93fb3b125ee03d024358d1f804609bc73fefc99c368b565ec5233574ab004d5c5852666484a6d53d165b98509a66ea8f40c3685510b9952340200000000b314002028100c88c522914824249575d50714000b819e42724e17cba36110e3288a318618430801c01002883106cd117103361d7bf17ef21b87b57a05786e42424e9176cc55ccae26e17fcd6f59dd22c92b0de12313cefcb9ee0acd7b52d6da12e75d9fb17c0a2b24531d8744ac1644a677bcfa6f6741c5560a1c713f4b8546ed9484741a4ac3b274455c549a8d3e243fbc820fdb4f42168b29d65eda09aee4e49bd458c61eb266959589c6676403e25761e53f90a8de88be4276a4dc73f1277903c6d05df22ea69cedf6c73142401760ecc1fe65fc75959e872d7ad8c2bbd9ba8e9827320b3908e4223e511ab4bde1b63c16a897243f9f2c1efeedba8a17729f7d90fb83243a19fd48f49ba4d3a2d269fa03be9d30a6bf2d2d3c142cd1709b343756e95b1b68ae4fcc268666813188b27486dc1480e26438086f134c902aaae39ed58b41ebd7e93ac8f89117c8b95508612e10af65b1c5e58b6257bff5aba838a2fab455247efed91a0e675e42da2a66bcecffd80ee54821cd352c2202dae4e55103b99b378686e9c3db422a6165c5c7a0aad2905a0351f434ef54b653aa1021c8eee935beace546558daa17470cb51a76b5d67732aa5e8b33489f845dd68c3491c2abcdabc41d67b752b84c4af89279a738def83a1d77b21579a6635924cfcb149858cade8f7fc99b784c605ee6dbbb7523ffa7dc39d3775121b84b1bdb418976a61396cc247f8430c1a2b5ac37a2da56772fdb39ac8e71ea24a441288d28db6ad4cac5d6be3ad5688a00d9c47163832ab5e22bcecfd6a10602675481b6533ba81a18f90632048d39f62a6720d32f3f1755a767ca4d38c7f2a3f596cca4949462d4b9fc046eca498d26d347ac872f6b5b4c29ab90691605d916a57140bed5a5e0369af4bf8574a67fc543b4d69ea2d50f3e86b994b1a54a533e575b0742e584c6b42edabd1d60833b62924f8906725180848de2d7803003b3361374948601dde498dd614da0957300b7026215ff8b88b6f729f509822615580e527d653f3a993d0540f58efb6264ae21ce3fe096725a71eac7791b6d46404702cfb65f4e885680c7b04dbea3e3e5d90116ddf9bbd62f94c23ba7dea10681cc4333985c0e55cfb365286417e602278011f162d8eed43fb1c58c94b395f36b87130636940a691cde7bad78877d0504f9e53db246e37673f1730f56f141a81520743f11c10781eacc80b2bbce6c48bb068467e8ee4256d63b44d0625b1e644c595629bd3e695d0ee734e3214029eef1d07392d09d40ab28b943465d390b97b54555502fc77958e4671653a64e7fb6ac58e7679450393fe9ae313a4e2afac54897d329210aa5d862e4a170293a2564b68cb087c80c1178461f1c3a57dfd629044bb41501b5aed5eb2ab1f38804ed0e43592be3ce60602e86b0a051831130a8b472f7f59e83c2bd7c9b124a5442c32f0a0d3670b39349c78e8c585bcdc35aa9ede42b8e2051f751ba07c42fe181aa4f427b17b188efb35a0772418e1d6be447e061d8e7990dc2119c948d3a5a06067dfda514fa11af672da8f93a65b8715a4648a50bf245ebddf6e2fe00923f41ca2d608a1c48c1a8185a112d3be38cfb36326f0d51c76ad6ea18d6599c2ac39b958845862506623437cb0468187675d194516179471d35167ae886bfffd6e7508b9fc8d03738f888a98e97019b1aee5c686f2bc342b762b2ad24669fc58af43117cc3de853d2ee97aefad9ef8d49d736e937a15ae17b127e975335a06fd9f014bff4e6fbc66f75cc86a64cd0128f37b1add262d2225857405d74119d9e6c6d21f9c3c79706ec65349486424c9d0a16e7995ce1890ace1936a3344864524de6ba509250a25552976392c0318f2847c07ea534b39465ee4360d8248c8c4c76d2b143945ff084f3ce612d7412f23aa348ef02685652ca2b376e68e42fe65f17aca9dc22cedf3beb879a2eb0bbe7e00c6684168d606c7e3e4fe215b2218f2f1a81005ea00edab82b81b87020f90a84891c20f1c5181e5431dea7dca9b0474eee41a4e30e489944351838385306e614844a85c3379fe00944d7cf477a89793555bac6a20130f4f00b931d50e20345d60a31ee04128b9ea9070fe4a1361effacdd02c384a497771ab2cb668b1616c7ff0e965d4b213d24d6b42ad508a3a8874318dc6d0e37d47e6f3b03f74004b482014d7f51f6dcf39cc2a7db70e64d8e1c649d031d18ff1ed93026047b75c38e45c2b0481a93e46194302c12c34e625a24878de4b0482c1bc96921393697b879cccac4b76adf99929dcd030bde9885d62a10c18dece5eaa8611418870ac3a8330e9586a1661caa8c53cd70a8180c85e15231980a46a360bc548d46c57828318e22c3506a1c0a6160bb4a57ab1ba28f099a03cea3892ca151624a41838da6662150d7d6634575d348fca98ed39744edf1345be2cce09c51f1c4fbbf24faab2d192994c963e45aef0908dc0f50af50678960eaeef9abe4406e77e1709c3099c4f6385c0cdd5638b4835971a98803ce482910f5d63e7cc1b99f2931fb1b396617dfbaa028ca4589d96fe6785dc07b087bfd1f2dd27ceb6a1e9da0da9303241304001f918e1180da2a5cbd41c92070779fa70c1c68ffacfe4ea45bebdf2abc237c1a89d804a5b625b63ccea4daa6e51c74cca8a3e6db88c56014940a1f31badddc9e0a13b9c2d28fe45128cab9c6eccff8f18ac4759c5e54cee639e1ad82c3568d65df8e44bc137bd3056b2b6a7d7e7cabacc1590e8335aed803153c41030ef4f9f8df16c0212b98cf82827f6cc7d7c27d818a8c048235671e9be3ca48c464498eac766a389f6419a5485c3fe6c5c5ec8c5e20ac63fd51d486904dd74a4f76a1258ac51f3e1b026075193af74e887cd3cf3ece7b9397838039640bfcafddc921607a5bf850f605dd86fbdb32c17ff6601e94b4fda426ce496926c43dae99cfe171e838cbc03dc2610f0ebc068c99162604e373fc16481c7c60bbeb0388b01c121db3eb3c997ed69fd09148dbae5beb8daab8515d5bd10cebcb9d4059e92e4dd5d955aa124c6fb0a2c62eb73b8d7d5015482c7c7448cc7add8d3d2eda6d38fda089734946a3679a60b23e75c2ac8736b1b83588bbcc6d8272777625baab36070a3d6eb5c82fa9aa6510137ff129f842a4a0857e082285eed1d4b69a4c42397defc978522dd5c42d50c2b8f1966bdd30561e9525e8e141193525f8c45963b38c5c10b67b27c355bd4ce8f6fadc996396c769208341215f541782c74a09aeb3a06f12e37a4a5ca6121bb83ad53b4c2947b92b67916d6f20014f4ba7017ef904ac326d21d53bee824457ca1587df7129a6572fc5ed2d1b1a8538945da56c71e58708aebaddc30e48ea32c6f84cc314d5765129b15580b0dd5f8b38bf7a5a12ef6d46cff1fdd5d4251e30c92326abcc4db0d228f90b43697ceb309db5ff583018c9cffc1ccd0182743d229981a1c576201e95a321aea7d2b8a4ca5aaaca5ad58335b0db21d8962f5ac4b4512219401951c6865f1619f0e6459b815f77176ef496674400321382d9b884f0f51ddb6f1001125aab002fd560c31ec776ed09759cf25c5638efe93919f9bf8d0323e9e10451724cc5240b9939b16b4d9dce110041c9eb820213608b9b2778e77e034126a4e87b8763d155f158db3dcb17667ffa43cef00593ac98a099ab62a2a2fbf4ce24dee97e161005880568d724a49a933a51254b3a1d3567eeef063e17bb883d5e35ec99d8c25e413ea720c90d42e390137d88fdf45cd680e23da00947cc6c09ee280f0f4c68f89fadd9f0069127b641bb897187df3221c8394614a359267b0d9fc1052baed2087c7b4a0817bb5b45de950188eea32529aab89bba8bb39ef4c3d0847b8bb52e82acc16c8bfec054272ab5f99393fe9789c1a107e77e52492b96c8b602d332772bc18ab8306a3e8e7fdd8c5e304afd057753e9bcb504154ab8dd0368ef9611ad0fc712028896fdf659e63d0745a155e3f0f93df24c4b2a1b5dec81024084c37fcf346e78b40643fbefa19baeb06054b01b81cb3c748ddfc8f0e4f47ce9f94e4b8334d01fbdaed5be15e24b104d18c02de1a1cacae30f3030a7a09d2b8192af945961e9994630a1f7a2d660f5c77cc96f810cdcee3cd4fa1045782303923aca61e908d43998ac64090c3a3a5444b00c5b196607d94d6febd04bbca9af0838372bc696ffa034a90d57f841dd04595b241aee9980bd77024ef3702b9d8d6d62e3c312829cc8fc5715a5a816d88d05960fc14e2c32ace52f9be668b402fd72ee26371056b81c961d0dfaa05471d9048ad03952303d146f5cbedb590d1ad75ce6b3ad0d92cbce5090f1eb299a87b518c5697a5bda4f5dbae3c9f2fdb26e6adf02bab7be8dbff65742bc3583b7e45151499a4a8fe26e210d8351a4e9e9d5db7f33d02e9029a38f712b798565dd2cd98162c9f97cb52820174879d548847379da6b2b31b6f9eaa428ede67cabd2b68bf74346b7fa831c723d2659d0e4eee6bcaf226d5a426ef2a0dc0fb4b204063ff3f0b06d7b0fade285105a2373ab56b907069121ec20d188e1c4b06376f779906759a7ed9cdb906ab77acfc1ec7294f023080a2046400626bb70b48b841091f09f338842c98e7f42ad91056b8ebb9f028d95f9c51c0198c2374e3e48da70a1ec922cb6a0ffe80164f218d1782eae49a0b87393582c27fc875ca25dbc8f51696961568ee10c4a93d221c405887a0b6257fd31f718c512a52c99b20d7c074ad1c84f57345f97162218ae083232c09a1cf7d10c3c1c0824d620553dc0739e8b5ba5b521fd3dab8c1e8ec469c0948516882c6e035e1184cdcae2633e6fdc45d7da5195be18f977c9bd64b36aefd58fed2391b01320edd93c89808b8acb5c2cd0a231bbf729375dad9b11c52471e4dfb576f47850d32609e9bc62157ab540844139da4a9a1c0ac2f55bc34996d9bbbe044c05fbc13d739b3c6ffdfaca57205a8e848808d7015d74972eb557a03c8150c177737c91e9f6ca832809df1b7069908079b66eb800192f2cd5028ad111cdfd580e89a64c3039ccc1de8ed6db2d360ed9a089706f54a2646919a74cb387edaef487ae307ed10e9662fed400a417be8b89703edc4a0a2a83e7b78ace9587aa59bc656973e1cb23cf86850d9650db760fbd863b9a6e85e7a238edfc4ec849364780c6124258aec9ac6358bbf306321e0c1471207fbc2fd398baa60f319f8eea672aa19871fe37323186c0f6344bfa0eb183bf18f44e9c9aa522dae27380779c4a526dc777a7a372f2d6a02e14228a6d0006fe5f06a27df6877bd61990972256f2506fafb37528eed6412255eb40c075418494440cce3c1b35fb7a5310f64934ef606662c28b440d78e97902ed062e244e0e4ec1fdf949a640f21f671c7e98b89e5c1da249675868a21b1093eb02e3fa63810a4a0d874749380ae206775689e122ba8ee9d8fde734d1832aa7f548c09bb31fe43117f5f63319e7c603d52ba626ae277371771ed79c7c9e29aa8ca645eff9b908182b1b56ca5200976d8023097a186826b2bc9928204a98171af0dfc6ab2dd4b0631c27c1688031a46d27be66049abfebd63238593c12e02ba160911505e12da461826ba80741434971e62080cd1a53e2c5f34daa6469ae465ee1226ec272eee7f0dafa8336054c626eb29b3610d8b5b876c914955e2a99d7b4d32de8aea6eed5b1a093ad45965a55fa2ff53e6a73e21fc19b3c419097df7ba7c6e0001d8324bc46a482580c5c9908f7445a277533879f5986ee8bea98c05291580c67a31afc42452107225eff5b19ed7b5172c6c97b30dfc42e6b4cb2275db04b92a4ea7caf2dc95c869cf621f5a425c2242bbc7c60acd35546258591f40ccd5c0cae4a009fea1305843a1923d2c107dba6391976c35e2058d8742d77747efcf899c2ca9f0de847834668df5aa502989b6817266a3a813038fcf948877e04cdc464804b28082b2083818e3f7b8ec48f892733f2dacecf9f0278f44b8ac6906bbd0b345eab79f8ea3c4350f23af26852d44be8f2cf486379af9ff730222af72362041b0d01296d5523fe9f257ca5a1ebf2dd412ca7f32b60eb82b68247da67879380c2e1df977708426815a701e31fce916e7ecc01fd5eb775cc7bf8b7cbb7c4b2fdfd6493880762c683b8ba157675afef55595b3fffbde37ddcdbd0025b4dfea8f3928e74d652a87bbf95b18fafecdf548cb62a92c6fb861161e9f21177506e8be07b493d236e12e81e8e21eafebaa7e2331574589d08c125a674d86fcfe143c6f18f885725534f690b54cdcf4df13a10404c437b2e3b7978df0aaf031d7f0a82b029780587584ba51d545923f353e167cd8f8985bde97a69e63b9917e80069973f7c62b7dc1fb4007f2dcf57e5ee2f5aa8449b19b0ece2a9f236419b8d154a7ad1b15f1fd4520f499ef331bb285ed24c285b2575490ed1c85a96db802293506a30cf8ee8528df62e888a52191e015e1a3fa086d8c96c0b67ee640310ed471a13b60830b0421bc6437d3ef06efa6ca0d4dd29a85ea35387dea50978f0444e95c2264646a70f88cfad630193237d42bd367a1f0c0a05b43b0e465a03265027484b0fb2b1cb3f0ab0fa19b29efd987ed7054e090b1f8d22647d3863299c5b05a1319d1f60e2645af85af0aa80281621667425d32d3903900d41f07457a7ed95ee0b184613c763be292ad70600a290d3bbda5427ab1e26dac54a7218c3e922b8ce4a181fe53202346029886c018790ff00b563f49079c1184dfae66e77efdf55ea4a49817470caa9e9ecf7d8b912a65b12d0d4bb0f9fb061826aee821dd0cb25fac20e57d9a03eb136b8e01ddf7d6b1c25f19322a047822e51e73c5402f4f87d1855af6007207331af89a79dff67e9216059a6eec3cc0620c313f8d1eb8a53647e66e9dd4fcf01960b18113ebe42127cbbe6b2b2a30b37daec49c1d8d52bed373b0b14b130362f57c058df35029269f98f362b40247ca3350b550b3053b340c489647dc851a1d82ff6135b762b6494ae1cb37e8ee3ce019e5631a1a504aad3704ffeafaf14d348d8a8fcd7af06e9d0ebbdc9715e3a2af1c2df9dbce1c6e0136c3003d949f59968a66eae36f205e0aeb565ce3e5e48be41ddbc0b5e300472e87b77e3b7a43f245074673cb6d0fa42f726ba9c994a8401c9397fa272ca042beceb2ee68df13b440e8992889a784cd783ae3997df26f82e87806b3875b086591cf6baa003f15dad1e3450ff785ea2afeae5c470d0634a760c33eda604c22cdb303b1a7c4a2cc30998a720284a8ee0d8e5b0b760af27e4c37184549fc1837cd1fdd08cc32a7dbc2faf100e7b6db8541795791eb482f09e98eaf1c8477d948967b172dcaa0f32233cd92d9df14c466a0cbbb1f071cc7ba3fa4ea9e8f99aae3692dcff38f162b406f800de1e9e35c57165eca80417974069e62904d8fafc41881010f2c6c62749db8b45bdf33a78f007490d05ea3588fe535acabb564fa50d71d1143343606b8f68fa8403fa9a97c5e4812e1486073ceb940f5f2d9021be2e491a64db4ba275c73d0a273d6eaf5513c382a96f2839e6367948c50d6c0930868dbc5c8d35620ca6f860e6013eb978050135d16f3e6baa063eae019160e9c7932a8104048185e4530a9285857b418f3f57021ee0cae144c9e92dd024eeccd03e6b31059c997469af26653ab61394a2a2d647dee23820eb384f3507d628039e08f965d4b630852b59fcd8777322e111b7d8811a017185d858d50f20a3404786500c166aa2716a2f333e3da3de2d7c720b2e6d0430f6ae760d79f07cc330b77e10a34045556c9a026a5bacdbbd12b253daa1a439cd875205571231e252f9c9052787f0ef27e7671e5c7f8f469431b6f7607ba96bba7bf797b7a92904fb5e3058d2f476ffbdd068c5d47e8da1dec280ac0cc83d8fa08cae7b8f6464cf16965e82dbac7ee0dc5372949a1e05937769ae9e47ba6e92035ba3fcc878101c48dcc3aace88918bd47a09f17151a91a606c5c5cd531c4abf09fa923912adc4be0ffd289226f9184c642771da5b0d5467711008ce3c380dce928766d69876d778a9a0067df0b5c1989d0979e18b3caf2823848fdc97124f602d556c399744380bc27edc8fd4c607bf13a621217e37c3f2aea456bfb29c0b4d954c35b35c79b5e080cde4d53c7c2c3f058224fb5a1f562bf2615ee466e5019acde4d779a5e06bb550598e383957a37e555fe68c8d876c249685614d507b2b1353ff7f25e58c5b135069e67c422c5ab38316172188c5f6f611f4ba8f278165b901bb49a05e95455903cb41729b49e45a77701c1dd69d74da0ac20620617bdff8037c7f40d4a74eafd568c337bd53b4bce55108702443b2ab4491f2c898d1810ffa410d780771c5deea12aede50487f89443f8a803d6e04c069dfb314ad2918b0a3ec1656ec482ca891498a1d198292ec11ce0ddf7a8d44a3d81d8176a0708d68a38ecbc9679f882022badaf9277116f3ab58b4aa70723d260df757adb76532ae36bf2e270c11343e343cae87a03a43fc48d82ea607fb47e07417b70c8452a92933930181238519652f8a8a0363d7aea1c08af61f46342256842e3cdb205ea46c5c6dd376a32bcc4994746d2e135cc2535834507144121fc84245f5c6f242814b1882ef658ae003c24682673ad4551dd90c86974860b6b87ecb8b0865b8543317cdfea29859962b1375189cc8774c57f9d9f2b04b112e9e180e8a850cc43dda16035d9af1667e66c180fa847941beb7bda205990f9980f9169d6f05571ff72c04730d5c2b4dc21d150c3a2b397187ffd6322c97c8cced2cd7a7cf7f51e5c8156a5abb1a245c7633404efe2dfa85aa0c289761fa154b11a049266435a549c03359022d24b293973cdb14b9c77b7ec6a11e1ade8dc61f8c0be974325ce5df25a66d3fcc6b97d0bfd6b0500c72567875572a9ddd3861dfbae03cb3181f3d1fc95d6c15227e549b67dcbb9ffde20985f087b3f2ef231f084503b6ad711e2486c0add80c9eb2470de6034929f3f633569d6add91ab0723ea80ea4c77e5c68699c2c329476406dac605d649f7094110eb276b48fcead2d40051831143763d407b54d299d40f2b75442a0b83b135977904205d99420b2f133109171307491d3a3f3d68560c1aca92ca244155236bb65d13c602dff114a3317617b936c1bdb9205930f7d931c82c997225034168489ba6efd05c9199d74314dfcf88415b404ae9d920046f7b1954a127cc6c1736758b61b0b517373c0ed9fecd8dadef76de0ded2cffee8f5017bfb7ed75854f11a3f3c965130b388c55e23c10a33226b03938591d8c43fd6b77e19767f549cb91ca6a66779848b66a51d8a5392a7f780e0ab45af592b6a1831fd724847be1a41682564d500048236500702bc633d772fe01d1cc59ecefa6e60132e060f266a0febc59308ecf005c400537b10da289c5816736c825cf60411c86a22af70f8a64aee8a273e229024a0232b413facbf25ed60c484e24064132fb6629c05a903cff88af4474e3bdc9a67a9d70aa07b563a8348327e6045560dea10fbb46a5c3d7611c708f6947d8846c4f5d6e6ff2394fc5db4d0a81bb5f18f23c22db6103a28c583a833cf7244e429150f11b5c5030d797624305a1e8dad582283795d7e574b32eb1052491fe241898541eef08e02d01715f512b9157c475c66c2d72f1460606261c8e532ec17817910d881257ec98de02ed2b4a61860542c06ee0e0cb04c449ad2ad653b4321786472987be87f88b6b2e71e5a918548bad810934667eb9fc58b7d0d05c4ec86e876f50602e09ab7cff6aa3f199f6dc507c4b6eac3ef974b3f89f75d235931efacce9308be924076f5c76b388cf36eefe3655e9b0bb19442f85ff8052de6dd97c37650a830411f25fdf45f1539c771840b403ade374e864c60423ade51a405fd795ba6c26f45a119c626dfeae532a62c21cdffeaa42916bc5575a0183cdeda33be400f781479e7e5435f0dfb0ae98d224b892aa8d32bb2ec103a0c57ce1792c045d7b97eaf28fe3748a5070492882cf9f746048bf9932ccdce39e49c7d97c9de56e817f9e45148063af4d823687fd5db50a166ef15e68533d6ee0187b052a3605211c6cd4645506dfcea1e879d220e5f13bad72400db6f64db683323034103307537fc1b7c6cdc050440b439e859c858e70d4878cbd190a4b14c8e8b4ddcfff7747c18758d16fe0d66430f5e6548b1431323cf02806b08c14bd87c26ee36aa531eada113a851d33d94294141fcac57ad1f70f1c038961b9ce69301d15881010281a50342d84bae13ae15ff6ee19795e3f763c5d7cc37f7dbe3b509863741a3f15538ae21be2f45847dfb97b0014420bb07d25c2a860583a5260861a9c0681cd797495cca2714d8c1f848f58d8d0fa4f1ef857da92c0e34473b76dad102399c4109ee4d5b8c84bd8270d5eea1f4a27ac7877f77264719dbcf6906a1ddbc58b140a23e335ec046af94895ea8d15408be13f47ad18b08b8817bf59653ed0507d4b661e7d6c5fe8d10937d46a5acc7f1df48382c0131505bb9a587bfbf759b807e0c14e186880f5cbf640131fae6453515da4bdbbfb7a3c3af57cbbded4e35b5b52ae1ead677537cb0947460f63de9b423f63757ff3ac263b17697641536c4ec79a9cba4112c3888e98bbd0dc42ee7b9eba839ef6e26cbdad6802b902614543a8f2e252b13e6e0f5d8c3fe07dc1fa8ba134e85ce864f519bd57ef511d5466b34f7950c9b57496aff02f3114117893290d46c4da0cd8f6a9a2a8dea31447cad7d55ddddca20d9789f6a6ae78d8830d6cef9451a1b0268c65315d3d66685006a84bd68a94aefbdfc841301e09b2852e4f9bd01bc014c911a3949d384554f03ad3ca90d7b084696baafb1e968d875d876bf98a885b4dafca75d5c7a459c1b386974b09a0c680ee028e98f9b40a384dc51069fd373b06d2103d3a27d4b7b341b14b8d424ba8d859ae75b2756329709beb8ce0be18cb78b24ce71aaa9d2c45c898ad6a957fc6e443b084de2a16814fb70d05b92cf8082cbd67ce3d0c48284323cd5afe893d4cedfa054968f8a3d4dcd2deb056ff78734bdfe32b949d9149ecf9c56f4990037ccd426f4ee927c515bde40d4dced30e7d860089695c4a030e1a4a68400a52648665d0a88e6a563f6df6b04296357b35571da75cd91d06111607d9ea61244729977265255caca213ac0f3fe97c468bd8cbaa8fee51163b7f040989b339aa233cef7baa1450c29f129394d5ea87dde776d638a49986e80a62f3757b50bfe425cfe94f5ad9323a3385dca87a9c212d77cc8ad3f979d9745fa0e068ae3740084484d04f0bc1c79eddef6963a5710965abb3de00faa199a60f8a8e656c7d20c96d6ea2895e5405f9b3fa7c56ba43efd4a98f7ce0811e9e342df3bd4e13350460f10e31ca979922cc2c8a4891afc7969679bb4be83924596eceac47a8a5e32c7bc84e69a84b9e8077b23c3fd7009384e697a271bf18045e2dd2f3f4872b5549a6f46d2cd179a9c77542664ac3188607d2ff3772d42cbb5d1cab494d69d7ff3869352c6356e4accf62a6e597f84e60df3f4f3b2ed1c213bcf960b2023c839f64e1d99437a45bbcd509433724c5591c5f55774a0923adffcd54d226d710705effd7a576b45f8423f449ca717e1f41409da3b0cd9afa22a300861dd6d1fe07fe992fd105b744d2bd0c6d972a8844e9b3a9738b1a7ff8817c7c06d0e8d49e75089c8042f01cd094fc1c064bda73afdd7d0a72c9bec3381f2e7886ed12290eaaa07f2a211afd0f91cf94c2965269c9d84d81483b903a5f3e5e2bc8221fd405466c2a31a3acb4c71a4fa6a157dab5644673b38e61247d37d1c08d45d3004e73245666a8300321da5ee549454b3e483dfe88bbb06dda1949d26787884754183040baa997c07ab683e6a354e06ae73a2585df8eb5a3b731bed6616b03fc89afca8aa25b16aac0f880c4bf44fd94bf89ef1006b70bc671747159fb0e93cbd01f45783646912852abbc668952b46b6f5601820a9b1a58aaff820c144d82878ff1f10cd6a694a1a99ceec8406c50ccd53b9002a47ea62a25a24e8f830bcb40a9adca47751d9194ee3c8f4f04dc58a067f9251cb6a28073c70f1f49ce8546a61dccebe920fcd10c34bc7f93e7396a1ca0044f6d6635e70b4441b45735b48027c7a63d0f53a2bd1759623d0610d2999cfb7114185f7fe71202e3b8d90491d03ecf0b4a892e5aa04d2ccf039d9b7c3daa1fe4394ca4b21d0d38e0e7b26dcce39763e0a1c3992dc65e1b33e62c857a749ecb7e6857a8d60445e32ec5ff78958762827edc16436918513132cbca852a97dff0565fde6e53a1479cc1e15be1b099cc494108efef6bd6173d09a9e82910e9c022632fb00a01f3326237746a877ae3d0f4a8313e30f61b0090681e11fbb195e20bce1c4b69a7ec9183be2eaa53f9ada649dd7e8d7163f4d11fa010a3294d20872cc3a45a2625c9d4a443bdd443ce11568945cf4e460b46aeb4bbd7fdd02081ce6b0b2f488e9adfd4182b5767f818312c1347562baefbb2fc7b9ce2824fe45bbbdfc2f7a4331563e67563dc363ebaabe1c13d22ea840854f9014565c2159a5c7e3eb9b32e6aaaaa7180c128d7ba47293f594d196fe1ecfb0b6a5a630037cf7ff5096967a2318c71168f4ba599fda8dcc074f2e41541576f3e32ee48c78736a00e57117964c2fa7f9ecbc2d4a0e9b9faf0c963957f0b40c1c4043219ae6b3ceecf06dd3729195660b9032e250c4a62692351e42de32c23054d8368e96d6a2cf52e0c0870c7ae483df2b7d746bc8211c3c7d8245327eafc8b10e064ae1c5d278e12e9bba746b10e9babf2b8819734d5167fcaba42cdf3810f206edf66b6ee810731f15be490ec726e5d1278c09d11581c253b86a17a2b82992d7cd2a69f7f253adfeab21ea3f776f01cbc540b7192a826bf5d3b251c3ccbf833f29df6de25f5d4ee02f45deccc823389d16546fb3ef2fb66e4b65af7d26ff50ffc546789b6e4439ab9fa6feac8507c2b43a0ba2cfe45f288c689515a3f5b9f261c73599811f1195b714c17525ea8980746f6eaba45c520579b3cf77e639f72acb0b3b540c815a9dfce5c15b2c2460642a91f10e85addedcd301f6790cf2f9b160d906db8aad798b427aff97d226301d41ebe092b6f064689e8b102893347e2b0ad97597f080d3acccc5b6b462175ddec57cdb3044279f730c5ec02c293bbcc8119c3124a3981390cd15ee82fbfc3e5ae4bd6e05fb5093f6c9aca568fc95838fa3d7d50ab4ae70bbab66d4391b41a19ed4f2453e1e38e011dd489b132ce25e8cbc50109641696af1d589a66302282287b711504db0825264fe6e2076dbd21840fd5427ec5aaa0cf2ea9e146bddaf82daea236d9ebacb02a4179022cb93dcc9480006f074da3703c9aac19ff3c2a9693502851508efe5d32a973198fae2fdb991407eb54f3738837a17d3be7da790fb16d74cc99b2c76d2c00d5a33b0bca395cb887131bf8da28df477796fe410c064c16055e54686a5556f1a6e492e551a1bd77bb55a90db22cc11101ba5536afb5b6c9e96ac2d8d8c6103d2ee5770e9e86665cb38c3ca46f496a8528186a4ed61e709b58dca569df4891641d8b794bd6cebfd3334c1179c9740facdc62b42b70da743751bb7de5d5d48de515d02b32eb983d3d49488a7f2a8299e4b85a1c1850524ca58372338978db5ca87e8658cd19bdd293c36de66a7a873e1f3070e17a7692474f46bdc019cb26b68db79814bec97e304778c8a1f909c696b0152b3d997b560c5fa15caa975903fd3720b39f8a2849e8b03dee50432a4429997d7592dc6bc61cc6224d6047fa357958a15a59cd428129791adad1e5e62ee353e8a0249c2ff293d3f375d9b1c1a0f47c107917a12626f64d48e407630b8b8923a7ba7f59aa23b4813e8b9b196f7f983104f55cd7c247d3ef7777afef1ab6287dce7d6d96009d4df8b7d3b4a1bf334d05caa4c852f21d1b6ba9dd411b58dac76364521fae381ed79fbdac742811c3bb77619b30c1078dff9d47265fdcd72c4422a8dfd24252dc7282dda6d5c9f386e00b709cfc387171c3196aeb6393f7ab6afc5a01c948606afa4a4b534e388c49c23c0568c88081323da6a76be6fe2baeb5c129ba64f4a4a35790a4a34aca4200e8532380495421436745e1d5d19a3f12d96f5f18043f2d3357aee266c232e4ea473c81c27aea2cf05cc57652e62e0b0bf1479b8ab3a596a78a1fd478cc28c698034b816704fdcf29d05315ec84512c96800e113af80c173c7f24a44bdbdd3982a6edab2128d721eac1a5c35b6f543e9dfef455b47bdaea9e11a7c33cc10083112ccc25d6267d4fedde6454874236842feed3e51a046e6445ebf5770a74d1446afc88398888576fa4de0603457b2c4fa4ad3190aa08978812781d112988c3f18ae1385a9acc92483b780defce0ebd90d87a937d929588ddee79c516afea4b051ec0148939deb1463a1302aaf9fced52c55fa6351e82753b1ca28324da87a255a81350cae67536d4e6f7d9eaaeebf4847732d8e27a41ba9b44d3973e0913148b54c46f39a173bd2b1e08fedf8eb87c45180142aa5218f380a14e11672f444cb214672648a2791a3b00c7301d359a490108979455669ff36acb172a56586a76a1939669babbee51f9988e36079c355b6e2581ee4043970eeae2c578c3589bdd3e41c18ab99afdb8c5a2ab0a64c2253e60904c9b75d69eefc8ccb04fbb98a282ce638ce9d740df01d16ee589dcaa1f6dab8db278a51f5baa58d65522b470ed09c7ab226c25a7c22eff3825188a6e62e0e18bd0a20b615880a744008c44fa13aa845557675e6f23fef2d3b5e349aaacbe1892331dccd7662d41786144513900e3c51a316c856b24b26ece4761c9feb709a8600ce529fa079ec598d77986a85ffef16b5e4378df87dfedc1c439d8f004bd4bce7a51168991090e3441c7402336440d55b70b1c27c29dea3c6ad3066a62c3dd6dff1e99ea620028d1f3c87a9bc73399f9666236678d241b5b4bd688c007cc481e6f099ff36decb3af0474bbc945934d4d00969ab0513b3f4e1787d6a1f7a83bd035df497671a807c60b075e036d55cc0864f5113d802cd9d51c5a1c36a4b33dd97313633ccd106708d4b0d8d77473248b824eb8cb2aa6b7469185d951c5f57559900761249e7c5d2235f29743b102622e9184dec4805c4d06cb416010fb397024a7329b14c0643f50a0e3d20160cab06233ee01601b57f4eb82f333d6867567c2b0cd3f6cae3915d33564dae2ca225f4237eb8be22b67e3ce87839fcfa7f4bfbd5a1912e2342cb7e7133d3a39aa067e365c071b3482638f27cc3477c1cbefba1e7e217b7995b7b53f486ed39972da55889fb8e5ad6d12d95c205438b10c180b5462033fc0e382b56911beb4df3d7c57e1d83ff1d239ef255e33c607edb7152c3e016fb4db996cfd959805d7d6c0736aa840a1cd36ae6d00e0d187daa5a9805ab15da83424ac557207dfca740febce4daa38498774a87ff53cb02311b5a9d022cc93f1376b0055ad0afa593ca21308a30a3d1c62385f326ad7edf396a75c41d5f46f1221919f94876cdc7d708d93319845c9295279463172f806cbe71abaf22b7195f7216dad65b4694bf1d71ce788b6270af56774ba52aa90fe2334afdfb459d628e96bbe97d03385b2684ab57cf2281025219afec3048091cf0e76e96cfeab1358bd571c7fc32381126421c39e9aac360db272826a0f664ab0ae67d622ad2711a7991700b8969884bfe9effeaea210634c9f9066783e891d88864f1b070c5b0b2c0b25ca00191db7fde84a2420712325ebbbcf1c2050c09da84656b03384425301c06d6f9f725b3bd318a101c9c16c2e060ffa05095e8523aa86bcd306f560598cc3edce4b61fd7f2de905315c07472f1228636163ade468d2eb41e1ba6fa999085d8a5e6459e4d72054a932771eaaaa17418956a1bd963a026ed4a82065218af7e1142d9e73d171dc667261d6cbe0967c5d6228373b20236ada6c89c755c48aedf66a8105641863ef6d96918fb20ceaefb576ef29bc2e06dc7d9ce0fd12c6060f0645b9e5caceb9041e52a0c716e7bd614361933e560f4cc31bd33c112793b123b83914d14a562d4b9ed5441ec26a6ef1fafb3bafddb08919c828466d41f9fee89c362cbb88d862f76f01ee6f7cc8cc6395c196022de17e7d5fab9024459cc9a812ee4d40a6c1fe80b0ed1f7a37be68040b53357630469c8b867cb04c9b109b20405998adcff49ae2989fdef012177731c5c0e9890ff7d88b8f2ae4423c42599e620fa0cfb64613c54623fea611562cfb9d2c01a3576e9d14838fc4bc191a0a64815635a11bf237b457a8cf24ef3845ccfd7cf0b9e339dd9d0d7bcd59c07adeb1c65c687643316bf6862d50c59ee674ec682730b2b389bff15a3235f3a044266458968660a588d9f6eb358b0012f83761e7f058b5a85e800c8d9a401678de8f5afdf5b76d9744df0a3af0b26bffeb8ca3477d0bfd5062593846738999f044c7662bc9fac42efd921405e87bcc73a8515a76592c2a7f5ceb1fcc1f581dcdef6d3520f804149634e8e26a34c383fd2affa4787ad0422d03accd0fd621e23ffd8379f93b7ca0097fbd14b187b29fde04e9aab14c324329df524cc125376e5dfb1990521b2eb8a939cd23de76c45c2bc6891b89e741c23a19ef591fd8d6b2f62535fd559427030ea0882ea1844bd6cc194df2511382444480d649d6027a0314987c18de44a33b21f9676993df5300fb12f380cc19fad22c264dc106fb97b6cb9c486192f8ca6a18284b9f82566e1a69b7128ffb6caa53a261a598cb3ade384e37971324c2bb231450c75a0555230dac776263a450cddc4812a936cad21a12d93243a2d11d323e7ae0e22ea4ee0454750372a25c7365bd9c8b15235a1e368494c7ebd7fce46050aa9172613648ee6de84522644ed20e42329786ffd5b9335718b46e275a3ef08293fe734823a7e4800e4c8e767ec1e205457b84c6dbb9484556571d3288e0b5c6e64d36281bbb38ca202eeced00338d13fd75b2e62d4bf0c5d7e11a17bb4767b24b93929029c6513a0b199306e1b9e34cc005ce1762600b0453a08b92f89e5a5b58ca390f8ba1aa737f39a0691426e71cbc56e5286b5126edb9e379eb4dd32f778958bf9cf72620616fca252f0f988c99d37e2bbd8a397722e4c40a4a10f968a71d5787742991b3ac4817e73d00435821a14bb457f54a9bf85030efd3f0ea5222171c93aec295d7817c908f8447477ff2d6c18a38d17c61f25df28d4146228754bded89855d43015f31d8af08252ed423d3bb118e0522f8bbdb7c7528d0adf00bff0758b7630b0df805be0bbc0d5bf2b07b0615d3cf5ec1f7c161ad83aae2187f1e04d4324fba2cd25c34325cdaa91a96f49990a6334cc8be20e59f84452e408ac2f7f06bba660918e3135e57ac1af0c877975819168bac28e8ca711e53e5c2ec1b9c87a6102e19a4a7e42efeb26a24cfd1ab4e0f68d530da8dda1c53af01dbec9f7f3bdc6267118805d7965ce3517e6c905e3b575d023b2288deadeafafa0b104b7f3748d6fbb8b9d51f2909161b1eb1b3fcc3f17dce5835b8a7042a2b0e406d9edb7ccfbd16d3761799a2a8555a39986b4453b1460393e5b4c0ad1e49311648833e849dbda13f8097b33340e462e4d61d0418fa0888fdfdcd5b762fa8b7d5529b3aae774a6efe16cac3ceb6db1889eafa658078f0496795ff6810aeb2c312cd47a77b4124bf0a20d890a144eb648405bff784b5ede65034059360c159aa339db095686157e131e6808112c5f23025d23a727ceee852c4546b159edf1c2e11230774d496c542435870f382a023c40b3c2641fbe2acff04fe17106ed5b5fecad35bb2ee4c786cc8b33845a56e9597ef4f92a992383c472af31d1c7bb1e3b6f79bec7142a65c0be3b9b2b6b7c1c2c3f02929a5b6ec021f5c3ea3da23cc4a3fd058e23b8720b4af89fd0d400ba953f876463e8229096e0a05a506938e8e012564cf9fcf8204c6ca709c879f99191d412f24eef609fe69a6183599ab09fdaafa4dfeb8d472df6927d90c991f9ded40b8c7a9f98fac16a653304fda0d7e936a44804184f15d30326d6816df20c749692b84978aa8c46a41f92ebc1a3cdc316b4c378235bc1093449a458e8f9d0692e209b642dc9536f3aebccd085b4429d277821019b00624c471445b3bd0e6ff1606878b763a5db8a9e46812b39d4e1a4ed2805096a4ef96574763cddefb4460075e9dc1d7a479a774b02e4f0ee6d704126ff613c6e35d8237ababb62305e37347f6860e0cf335f102bd4957822d5e220e30a88931b3e322b850accb95dfd6bffc4f16017f5bf41a7034b11ceaec29f8a63439d7142f0adb0814bfccd02a66b8ce72c2897c824d6a016e84d679113db2ca9238f8a47a4f63befac2781a69f3a54dff1d09393324df544e6402ffda68382f2fc8c693bcbac703cc3795eb294d829f4c4d2711d0b07ae09be2e282ffa1cd7dfafc14ed2259faf8e6276f7f7c7331d8e2b440e9646d286970909f2895c8ca438b3a1288034d8680409b74cdc64ca10bd9055d980028af78995d6ff65d401226c10419312553767c5a480c70082c10c9117dd92d9c0c13d291dea7232e51804d4cbc6c999c8f169548ebd688b1c81e0e9862159343eda0e5056b5412836032121bcc0bfe7c2874f29f48457730eeec7ff6f6373f5a39c05a74edeb398e496187bded9c5d4ca4114380791f89ad23f89d206f717df2641f41c0a706f0f5d2940e61b09d03e5f4060a044bdc2a5b839ced54f044600654dfe3e3a9fa6448fc10e8cec21b0d77b451a38cb63ace648f481dca0d26c193ba4c740f0d6de8eabcc9144e1ae84716c36cfdf1f5c9277f59963f2f4b3fecc466218b0f96fa320c96c32f2a49f3dcdbc726e3e02e9202420ccf9313c6470961c9a428f2dd158e5f12f7aba5c5ee46a890ec2456279e80293fdcba8ab7e67ff2d01a8636a35d04e07a272bac4211638fbcd91bdab9eae1db10888885e1304096d997c5b90f88c2c8374e1607b6cfff6f0d9da21c12be46175e0eb3b2a09bd56c17718a84f2b86427c987ff6b65934286271a7174ee3e97bbb9ea20aaead8a49eb2452e99d181a5cab882c29336cebdf5704a13fb7896cd3dd315891171b43998b3f6ca755c5e0b0f862d700ce39a009b44bc83a4c09958d2f80e0c9873523ee7a333616f498d24f32a1512c37dbfea3a962597cfa2dafed25b91a8565a29a5a62695158ca58c1a4f690933711df6f4dfe870cab9d67be1a5f2c17b05709112df4334494b0a1d6551f161c8410e1294e685ab331908314c19c74a4fbb3c85a84de4259e7bc4ad84ee0597b41e83a055e216218a803d79af9cc895109ef6444a9c2d82e0632595ce7319702cd9fff69343e7862f565c052a7c48cd7a8b292a26d2b728a4b972693ed560e38e2b938241821b18b226fc4d4360e3830b0a3544d4050f43e3856b69a97c02115bad5a32ff30955506625029790a93fc188527620aaea4b7c4aa586ac16fb0916d0d4f41fd7e935b8a2b0b0a46a815188c5baa9c932034a5467d1dcfff29695f7082817d49e0d6347a4bd1f0d2ecb35384b00488be5a6e0903ad29954586acea5398bb7498d450e62d20ff57d1a7e8cb7f8cca88b76bcc78c7811f848ece9c7c03a36ca1afe78372417dd742a5d69ab674619fb03dfeab78d51505c87ab6b3d7ff18d4fd28a163d509d6c5061f8b0ef26953a1efb1218e5f0f53351c64ead9a491863f1678f3efa53a245cd6daef7ee855dbb10133be9ed75e7638427cdf1d928f60715a5c0b5cbad06e8edf2e9f7968b064ca1d90a741ec0cd52a952ca57023214c25f73442f6ac6f1b73787a0ad7bec27bdff68d892cc56e389a9a1d7f4cff0285ea6a1ff4fcced5acedf3859fb1dceda264b7f1828f0bf2847b22711c2ffb13f9711e5c37a30ff7b7901228c0e54a36bce6f9e3a03a66d1f849d72b8418aef50abd53179487b3b922c92de9f2ce91b5cae0cc46f2cb2ad833cfe519da26050ab09fc40f4f5b2881eb56a39aa214aa20f8aa923dfa80f8c3d86c8f0433cc892c494d931dc2e12fcbebaa7a78cfa7d8d206abfc830220a918487075593156eddb626cc109361d1dcc9cd1ac761385feb9e53c1e5ff691b54e720619cd2097be5309dbad88880116a77b046ed01163f54b65c07b2e26520e379329c2a3d4b3d668e1d56e4cd7ae0e3b2d1927bd204819b30bd936383e750361c40bc670c2e62d4bde4a7025e9067a54859a1f037d33e25ac9be4d14bead615b18ed287f2ba814e152f34b0986db1670bae06c5a1bc2d6c43b14bc6f3b92d10811d795398abd5901a0686992d2acdba22fe24ff83e7ad196e4beabd88d74e676f0777d57a15b3dee3867ab25bd61f4ccc304ae5d32ba27a7042cc05708cbfa698827df9ae400c0234a60f733aa3cd8f718409d3eeb7f1a9c0e928fa244b319826426d1f9e8d643c658ed7f7e33d2affe16ce5f1c85df07c1080a4fa1f1f2424366a7aa6c4285dd9d48ee864c5e7e08539d7d77d406839a611a7e8d78a4f95d1ae5b323f06b19a5adbc5c06bb38113636c3b6aaa760b645c95dc6263384a34f07b7a2aa19661437611ecf479e4ec7560ca98520dda50930a62b7f37bd403b5c8b43d29f383896a12b01209025010564d501ef5be08806db334a82b03705742a22d08086c40e25cdcd933f047f991135ec9ba1ff0be5e1eac1dcb7574883d646b65e6a5022122353d529a57f3a18983881299ccc4bb14942ee4a9753338ea5bb332929550f897da6cf10a78f39d83bbd5924a8605bd97ba874a2017c7ede235443615c25f19fd2624edea81fd922fbc5dd78975f186070bc7d751534d179f12d6ff91af4574138c59d6cb5f89ce9b255aa8ea09fd1f3b791bd0f75ef988bed33bbdd996b3c39633ab1a2fb0406c2469ec303d88b673ee4cbd2b5e64ac65f9e458bb255458d9bda250c74aa16634e3b123e4b3e186300747358c81d0652279d8e7ca2343a0e118d60fb8bef94497ee119c0c54e3dce70ce4d2d96fbe2714e045d8fba6814b57e61f075acb5a84f209b964370617857ceeaeb4eec0523a57bd2731225345fc39c71c18d8a563865f491ff705c01960078435361590ada7c083bd72439bb6dc07678a1c9938e4946bc32804f8a727a5efba93c68560694c63c2d23b604bc5e39b2ed245a5c501f8a5b37181681076b36fec0f4d4f963d94d24ccc2d94fe7aee004fb3112d138c66a3496aaa0e30c9f65cdc9a9a30acb7eb097e33629218def5ed98f109c7bee962c4d12061904de94884c9e5bbdd242b0ca8f4f8339ca3dd43dae557dab861f7c88f2932fe6d5ffb73cb5389cfb53c7841d20492fdc46a78369ec1c8af88159f205924162927da722e59073795b18afc4420071ec7bc7268161ff554e2320ea8e54c01d662993e3dffb0e30a25133d37797bacc8dcdc8cdf099eac830dc47d1a5b2b44bf0b9142480c9d0d832c1cc78ae0238ac55236d1548ecd502bb0817d7f38819124b422f6a5b7cc31dbf101a73c4046afd49a2a1a0b0d38d33a1f71e6a04e4d0a29c7b7dd46972a7c29d033904d720a3e1389572a6a461df86ea930d1c2bbd5a08e29a49924b6fe8e089e3c70b2c776006b0a82267b72049e36077be9bd00ed79bb3d1595adcb85ef62966aab817ce63dc29b5791f2516b73c9152939812f1e0ecec56770a723969e4ed32ab17a77d58ec4862a84fd033253c9489c7fe75931d4ac8fdd3e01638d3fba94c3f1795f855507edc09d6111dd2ed10706041026d5ac6dcaab7c8ea3eede9f0d8a88b86a77c8861d6f884aca3b456f0bb9a83cc9af6b0517154fd55e95c8d2fc1d80345f496a881db09577f27e8f2e11db54bca99b3659e2a3a41f2f17c16171991987e5b9459e6097e7e593a8aaf69b47af8e9e5b3b021791a58cce4dfb6965b4d0839ea360bbd862d24faed45da96812a5abd68cedfd73a3770dbedcb3a03e6d216230a9642d284b3cedfb38371008d133fc1cc1979069fbe472636be983b0559a6b8d2f08b7527203d22b63c5105c9adeb53f9d50846d77943a8ffb1b9b8d86819032e8ddb33141c12a48f8f4ca4420363494ca5e324311a6f335bb9c86b56fb7fc4182d8448050fb347e17933554313e39ab044ee2a36632b2c317a87bc67ccd55d3e8a9af9148419e73b1002c3f5adca282791b127b344274bfb71bb10498288d08cd480a3252d0394f065aa99ef57c058d90b4afd684a7ed001924a54f68939a63b661d6e40e6730e089dc6bc8ea60107b141c78b1104120b8be1633b93b77c227eb1325c993e0523060c0a0044164f05ad8999f0df1d4e9587a74996d5c7b09326d226bd2e239c6b1e486b4ab69a589f8155d2c3dae2f036114ecfbfa45071f208c0eff2bbacd8b3ff847619887db611853cd78882a34f15388ac219432043d29e546434fcc9853889a3894111129c500228ca54f84c5e2aeb398a87437898a3ed440a91c71181229311282fc04e2ea93f82bb9ca24dc67f4a9f02fa27358b430959d4410b3702d118bcf1ef689ee16a3c045c0c21d2730988c2f1355f9f7c96ca325f6eba54753da1a93eb1ad676330664ba35002436faf9ce627b74c44781b311088c440d380435a7f21c7596a1d5996a0fc2ce1fd06d880d05a00fefde86fa47cfef0a84cf7fc76b1e2450e6ab77ebbd64cd4facafe99cdaa0d0751f2a0ad44016efa9fa49bcb543d25f1c5f0a22595994381a0072b3f37a34aa8c98dd3c073c3d155879ff2339275fe5b7de077c27cbf9049afb5bcb9207a81380e3ef05ad08fa5b521071fc53158768174e8c9160d9c3e287ed2c4602bd9e50439bd312b401a1693e33f4ab686eeef79c810d49ffdafe86cbe9bf16726af74eb586f1b52c01a5fa1b0d57614d70edcdc00ad61d30bb570084fd99684e2754a477973babaa5852bf185f7965e878a41fed829994847824e95b1bee1f8c22631f1d05c7eacc275352a4856d1ec25a713b093fb2653fce10140144cc4aad1fb1c0645510a670c84405037159514c827fbaa733fae621810a298caad59d38f7881759932d77aa1a24ffff25ad6f9e3d892d79bae2ce1138eb031b1830b92420d8169396a64e4109b391a8d86929e8abbca928bd12c8ed654e3ff30f5139120ed02f97a06edc920b4d26e4bb9a5d196c5232aa8d39c947c2e353602947141f21c30cc415793855c1d3a140d26a6f2946cda6b19be40e54abbfc34f5dcebfa3935344ff2c455671a4ca5079ba30a88e1dde4ff96e9cccc1e13529dffceaa8848cb5432c60cb9c385ee160b9ed7c4c69a582961dda3330e72ce4a8e85f6e20393a359578c010d9f7d81eb8e4a88f8a7e29e0a671b7681a01eba361e8fcb1885aad4862d822325c5e5e1c71f1f640faf3077de3ac70383adf49be52706443966d705a9eeae0fad710076b840e071040eb13e617b630a9c4b98d367d1d2d583ebadd707a193bf5e72c5ffd6d92edff46786c980ad4800b3dca8bac507183bbddc313e9cd85da06eb8cf8079770a9f19b1e6e093684cadffe5209b3c6349f8d4cfc72293e2f979141a69a02125c933acf2a9868db18d8d726f10178bc9e4f2e3ae34fd869864489d1b3955c824fe22c01583e537324114b2bbedd1f3d5c099701138483f8df7e3a6613b3c0c28ddc3994f4bc48c80d4fd579f2775a984948626ae696322d5cf80974f3f42886611e6573ff8dc4714cb94ec9261521b77e8ae7dcca0ff2e51cbdb09126689e482e114ccc02985e291030933c2c154a12b849710bdcf084cd6ae42967e83aa374d3bfe2d4eb7282058d4f3b49828caee6d57e75f63b57a0f131248e90acded0a4284792d94baad242a4246a9e77517f8670dd05fc152f2a57a8aa9a7bba9518419dff53e69fe2b2063973ae8250aa7bcc4a6faac6fc3d33e882ae1a5bd7b522bdc2a31b2b5a71979913a4ea56f8de5f8139742946cf7e7cb6d99bf49e229e842db087c1262f25da695a2324cfb3e0afb729da728347adadb6590bf658f7ece8e335ec2a82b934311f02c655d720ade120e7e425df4d37c943e4714f81f05cceaf9ed9fc87bc9e8f0ac4e04023ec9a8cda50012da2247fdecd1a6547bb71144bc7a0dfee83c458be0ef50cfef377247823ebc01ec2a3df29c10632fb87fe629ef5b01174db48b574b0056fc02c3596545524c800f7dbfcc3a428c2b6e627e7bbc6fbf227676efe022323208e938b2ac514a667ca90bd9dcdd297849ea4507c3dfec4742b0042e4dfd1d67b379cc30ce8ec05880318d0ed48645c8b8b5667169af468746b88c35efd3f6d45c6fd73e8893fe28d948d931db7d523a0b657988aeac34e3b5dc5e46cce02a04282511f32f32c0654bcd9c27e86242f89d32df8a0b088d415e53f3e2958d4922e0a10c8ecdbf7a7d0fa07128d033bb039383ec841172567b7fa74f9eaf636e8acca5e3cab67fe41a16792373522bb3002802c694a001bffe8db28088c568d68bca04fadf3225b71e55b2969af33e659abc540bfd727f8ca080295278ba5ed8481d47eaa6480e374e51573efb4b55b03520a028ffe2db32efedb1c663ddfe049bf872f6421f93f3cd74f33df9f19b895663270ca41511673595dbecb847a117324eae94503bbf379bf958dbbb4b6666cb182789468324a4ed178578ad91b2145ff390f661554ee42500c524c2a5d26364e49f20c5052ef7b803d03e87605f02f2bd8eefdc49e8d7d26fcad7126aec9828af3ee258d28cd821a297e9ab357912db8e369ed1d76da0c2974ac5cc916ba73f13b0c0be1e7591e823d9de2cb541a467aba8880bf2788f94d2efa2a4e15d557ebb0544f498d0cec6b03f32b176117b1c5219711060b7180c3854da1029ad915ea8586ef2d232d578858efad298d649645f43f8af8d47a27cfc9174b5ec12e3ce8bad57a4796154be4fccb37255074bbe4ce343f94209b99fa21266e20bd8afa394604cbe573c5c3fa6be0ca0f8a9fabcdc1077cd4f9783c4d1f75efc43183f749015f2639d3ecf2ac2880c70b3703886168741fabedf4a0713afd76e07f644ba27c302f086cc67dcc91ba81c40af759258bbb4db725f10e789f8fcf1ce415f3eefe38637a079258091e9a7a383362be1b65e25210974b30a44677fbecdcbe1b4bbaa9cecf3b18005e89afd9c66caf9ed1ee128ded3d82bcb692399275a64d14ef916271c48706be24335ac9b99b56932ed050db9603e808e75f69740542ea0f7c434a8b3cfc72933863d76e61a324ff898dbc7bc29b36330e6a952c8c814309f09c5d253b192c77a2dc30bdc9bf2eb865608c568a35d938d9cfdae9d04832f55ccf83f27b158a1eb849ac17a4fc378b038a11075ccc513e8cf5cc7c4c1a3feb0201ce6c22685015b0ebc21f608d7d00c214ced1d1511e409f26f4a69e74cc7003007afc6f06468a4033ce3b40158102534022712aa2260017eadfd185a799344d7141b1f46b532a52ba6e4a1d97ff33c807785cee2a1817ee5f28e6df495efb2e54d8e00688a3268d9e13a6a57eb7365760f1894342f314ba759b2072f424268e5cd2dcd5d070d3eccef06800cc8551642518d8db0eb76e8b57bdc684f15292c9d1b92f7d89f1d203e52e7dae366fab838245bccde628c373657d9804adbada52bbcbe33c0a74f2602b34cab1fdcc52ef458ec4a5a40a63c208965dfb09b43bef8c3880a102fba83ae7c2119a00606ce0cfa1f6b1e405b379538c1d2627aa97cfd3209e56eb0bd660e088791c5970ef9cbcd08a62aa39f46a0927728ae240388f964a5167f0f349c24f3cdfd33e8207bc55134f968b77047d0c9f491d25afe87854ef3fff9f0a6ac0e283d974ae80807eab01922328e3848795dc04847471d41ecef36dec93e58f57e031078b7421ed5d2c856906c94208120bf5ae3fe41d553de380811b312f9ed9b8b955166165e4e17dfa858bf4e050cbb8397335686610224417a7c64527c5a2eea397f5df025f06a39d49d36cbdb11f1bcd1d55bbc17adc5d5dd788ae45db0619b572ea9b903a0d3f42b08af49ac6d673c7cde3100de5819e1cdf872cb77eb07cd154125f78604cc2e4f57012052b29fe75f2adbc635b4e68fc9769378d142b2966ecb3a76a79eb546cc4744d9c1257b367c6e2c00af45175fd74ebeac1572861cc58cb5a7e231d336834bd99e41349df19e8b9d61882f66c6a22215e76b801c936fe340d4f133965389db24ce4c4bdcccbd51ed21463a8130e10675018c20b99d090372368508b09f50638adcbfa0f3fd04254273c3e24d2540891cb8cdcabff103ed027373f0f1986eda0823481ebcb99386419772d64018ce8fb452cf331cb209e9ea9c511c312a3f1a7ee31c8695da60761bb1ab4bb1302e6ed918bb08cf93ad3423418e67783492b284f3e2af2c425027076b4b47e2b60fa7a74cde2f111a48f8bb9d1ffb7182a3e6c302d59b48e91581b727b95900eb8a779cd4ef357212f13d086445c7bb4f7ecbd016f67f2b697ee552693ee3f20d2daaed9bc89e364f5a7ccfc632d1b19a58134374203dfe303fe53b542273fa167487927f11667be1d910944acc0a6e26e3bb70745967f0d94d278bc798d42df256b11bb8687ed5a00e4a00b80f2f7dd558e031e55d27dfcfce380cc41b96cf59a34d6a4a3611189a4b7fead4e0900a7158bfd13a7a9711155cd317c5e17630f9890090f27c19fae0470fa6da8af55eccc5bd04b8773529d27228e22ca30aa39d6d69f096a02dc9877a290dc289c549238e901224fa24f2d9c86dc0a22ea9b03f55c25312f39ed454588bf7f31a40b2f980d4fea1ce7a121be24b04b96f2d99d418619ed34184dd446d73e23a38b430774758797be6504008a9e8154c342eed8d79ad3c058597dad93da4705e5f3a4824bc21cc9cab347fb85eb126ab2bc651144542a7b62dc0ac9b8e1c95919594f008d4055299fc762e1c47895f8af2e3381b0c466fad562488ea6d012f7714df8c4615212805c851db077945468921e3eb9f3c3991848d41be9b3369d93f5d1e396a00ffcee40c2bbde0699bb2773dc629e36af9db33570ad56b7cef85fc19ff7344d9cf65b31d3c52411781ff762145b2df5a385380e8265f888f2cbaf63e193286a6a35c5ff72d60dd1b4d2c6da57b808c7b58421d424f402405f942b8c94356e9f20544814093afa820b271f25451df6e01fa28913fe01dac99e5f866b59d60016cc5da22c58616ab61e03dfa21d8e32d17ae53fe13fe4de84e11d25c5a540cfc9b7d8f84f0b408ed7654eaaabd993e80f2839df583c47ada559483ab240c78ca9b6a5136bd88cefd6f932497bba5df8b7d68ba319aa83394cd232df8ccae7c2b338f216864a5cf73a2541cb81ccae24128a2295d82fd7cecc5035ea7a48673906382b844907823800e02e3c79b4e87b5c53b51856e7a17993c1f4101053ea1a4eb50bd9d10d91f772357c14efa6452d7c587c07e1314cdc093e229971e2aa91dc6ee48b48754b155ac8ef9e8866685a03b56d402e80661f0c1f5adeec71d968723e603b764e5531b1839288152e34f30257ea9768837a9e7eb4cfe9bfe79c9f3a751608e00dcfad2f24ca339feab6b9952102e18bdfa08600acd717129ec207ea6b41b252b1a6821ad4c2fd02f7ff6513760f68f8ff3d641ce6997394fbcd291d1fe67b3993a5122bede1000e2095c851410087ccac2406f21c0bb4946b25443656c15919568665f43a2cb537f020d644ed82daa4104c4da95c3ff4782488ae4dcc61859ed6cac70078853f18ad5b191b65eec9e578fc49abfc4ab5e97492f2b4f10f56a248bdfecd2896ed10c0b7798d62b7d63c6c527b18ea4365debce0ac5fad8ad1f9c2d6ed90c2beb1f8ba393470f766b524a7c06d24c2d21870ce69fac8eda99c80ec58be9ba029c982f5784f26996a9ecdfcc4a2ff5fb1435ec19ffee46179011f9add10b0a1f47089e8b65320110b4090a586f03d07ab29525b32b60031179aa81770c2879a790414a65496e8ae759189739b0b63150413654da8f707147ab37a357446aa3de3ba72513a052a63c5f050cc0605d3dcaeff8f9741bc4b11034f18a2ed4ce4c5e9783151dbac6c664aaaecbfbc2edd117dd3e9596e59b09dad16607735d59d9bc049de5ff042d8210c57a91129c1d1fac78195223cbacda5368ecd948059e2dad7b13f49a77cf65b63eea94e66201aac66d987e15c5d15b4dfd7d3c0fa5f1eaa6e6878c2b819302b3785cd8e8cd2c740f9e80bad52e75a4e4a1b79c003f44021604af441c1dc810884c6ad7e4428fcc0f84641bb8960a516606f3cdd17354ce80c564c8ac2f1926b1e4280c531e27f401b1a379d7dc620860f2c160834cd7274302528e3f929c035ad3c99c6e2956e0acc10d930677dfbcd27514d84e9a9b1623d48e2c9916040339c88f69e2de89f0f082a94e8bac55986dd295e9db807ef0e33c0c83d28ebe604cda54e83dd67b767b689bf02d65861d518dd22f319f2e88e1a89a1c3a28feea89f8b51aef626df1484621463441707f25395f1bb375920869e500c34c8cca7b0abfa74005eee9c1642ba2e87a3c29a417334e74ea22da336abcf0a9618d7e404d6a4a07e298f7bd27c62e866a4e3f22bb3140c0d015710e6c9f4a9593d04460f4223716bf99751a46a4a13a1c407b1957fb71b105ce6df74a9023f389d5adf7cf0d83ff6178b0030a72a12ce8b9bf9ff08759403e9fab189d5a2eaa0df01e6417601be77cf148da4a1bb2c6b09194f094feaa794ce00155f03244324dd87b53d0e54e4c65cb18c24e285db5ea3e4fa1a5f32ff785506cd1d557548adef9f3f6783d4a06c2e2bc869d88e2f65dd7ccc84385fab555dfc5be4f2f479417b208fd312f35a2ef20f58d57037136558931f23b9b8047d968c6e04af37ec3a161a68f89fd0f4ac38a32cb78b6c629ff587d8a21175c81a3c686bf51871e21f238a6c21ca271dcdaa238166bc6090c9670415df90613dfd138b9648b59efa8010891cc1c75c892d3f5d6b7bb3ef49a5c74e8c009adc8864f768a9af4342b24bb69e84606a064aea09ef59a62d40937f8c6bb062d8b83e0dcad909a922e3f285befc26ac0aa9ea6b20519a8db44871d09fe401180b861a3941cc6abf45304b31749b81dfdea4283cc05cf1e41353536bd2c696817a144919a8dc49525e06ea776209ac3e4fbf2c26492578a0d6672bbe1a28853e2368d364b4dbba8bad03535452a6a378bb4cf26afd38bf82ef297f3016a4a2781de6d168ffe161580ef3e511b9e4f42a387c9ce600db0cda29d84cc0bad2b74fa4cd5c314d6ad244a51e3424a2452c326b81b2b5889855740da2be211a178a4475c3b411a8110c2af6d81202efb679aa499c03705da87812e1e14727e282879efdf9636befa36b5b835f026f1536d6bf09ceaf46348778b8b5ffeba71f818f1120f3000a8bd78cfe8fce408cd1603e8fe009267673cf3945c3668716c2e8ce6d5b167d8ffb4217eb50b49b26da92604f37e97a8f7dcd3cc6cc8d021d5e27295ab65819506cb637ee97ca76f7fd45646f8b14233813c1d8d79c3cd58f4156e10006e81813cc2410b2bf4012e66f1d6dcfbb91d33582a20d4da7e253683f652b813e01b7f112fb710b53bdfd40bda4d0501ab8cdc25d4174b9f1a8b006d912b87b9d6cd95c299accab395f835eb32b1ee6b2ea843507b9b620be5f6a423ab5951ada40c6b6cc3e66e230b5966d922328973080213a366274ee9aa3242ec40481fb49f6085c34b02a125b43ded3e1e618e1248a36b63ed4285f0eb63965e09e900142d9738091de0c07791b9548691bdc72e7179a2ac7b7ebaf7546fd01cddb4267332cd539ddf63f9756d1b7f6f0ddaa13559e4365d6067b25c570516914a93ecaab0060ecd06cb12b3e6cfe4ad37080da6630947629561fc28a6e0e0bccd61c1ce4ea759dbae9acb736cb456f11d0da1d95ce6acafdb9f139f56e5dcf92f3d7195bddf4f60789f975b6d3faa897284e12f806363d388ae8b5b3036300b7349d7f7218ee62f55c9952174ee7046f5e46de25b9a4d9605cee5eb64718c2f3780ab66c75c3d483a5effa53a6ebefc155e7747deb0c6058f0997b9b4d3c2245906827930d09bc50e5a5ffc51b21b0bfc9b844ea5c8700e8bfe062300727cbee2c2c9e1f087094c1427cd53806cb555097a126393649f73c5a601d33a46502e4ee655835c7b659c5392bc95834080b2d1d2cfe54ec631ad5d463eff12bcb62e937b3cafd39991c277527943059141c2d86c69b92ab3c0fa1d9ff1c9f58aef844f098bb5e31de4b4023009732456bef7c10e8af7e7ebbf2937eda84746d06a2c00577125b73a246927dbdd89d44f1d7c877d4778df513417f8e67c144300c87cffb672c4e30a07ef93e22dae8631239b26497f43954c4296ebb3cdcb6ec8103814b36727ded618fcc2b200cf76b7a55fbf2f90583f146046df107b3de4252754ebc386b9c6cc37a1082a302a7de4c106a5dc21292cb267ff850a5f24e9c3ad2d3e11a602e6133d27b420656342390d32ed2b00816e17f954ca9cc20f7cd78f11913de81fdc0f1fb8904edd63d10659f05abaab88692ee3973b34ef8272ed423710bbbd69494fe72952928f1cc3c9314572aa69207aae1df478d45ca8cf2fdfaa9270ccc988ed4d782d62a7dfd1354140c75223ded185cdc2c38638aaa0e9b9e47c752cfd986d8b83120dafa889ff57af071af28adcb2b690c5ee135c920576ec13342cc028e14e83d2dd4eadda2035c6426e5c05d3b9fbdecb1f278c26e7af41a117879912d6a54f160b5bdaa958d1b17d3bbe270b39516079ece025fbdb53b5629fba21b46fc6e919effdfbf1a44b02778dce1d725d6fe61a5a5f73de5bb16556f0023dba8bb370937a702b0919b4bb7e9a79f44aa44f8c0bf3d69ce51f502ed7f582e1d550a35614333a0b3a30f6f67020e40eb3cb9e6e2b1dd66125da67bfc5ff1669ed8699c5511a14e7cd29cdd4d0dfa2e59b413bb2a21c05fe5751ea87f2e64f7b76390c7ef89f8f7ee1af419c7314c47931ad56563c137185fb96788e036c699612359771290b77c78ee7deea1086554b5ce7f2b20fcddcdf6c349d1cfacf864c36f433485f03c5f4a981050198723ddf10a8c9440f6e0c33f25a2f28e8af1dc56cbc6d368aca8331aa022585c0627f8e939a365052b76dbc702edc64147244986599d6bf9f5887686fd58fc6f56370ca71eea536368ece4fd2c3b2ec66909a6a5514363f4972c2fc9d8a3f5352153e0877d61bed18e4331258873aa961133556b7aae62542b98f68d81c0cbf2602b12217fc76d98f76d0c5d85b3112232eabe78cbf195dc249ec8247f551a324395a22e6ccfb47ab276c663492c289c4a01ec72967f8dde5f59ec2ba55a7eb7429c4878bacb1bdd55feb1e06eedcbf11f00ab8bff363191a5b291fcfc3e35c56711bdc1bb194756848039121bdcdbe85d36844fc54e2e2183c367c6b45dd9563efd28e88926f1acb93d0ec48b68ed4749e2c221ac07acfaa47ffe0570caf22f85ac16ff8d3ec13372dae6f5589e3d974f0b6ffb04c24ba2913ea64e3757a481084b07e57c5032ce49285dfefb8fad9c427134d945123e942aeecb7d5cb623d075d262f073582b1718e491811496c9edfc341ac64bec71664a2f94e3cad4ec1195500d748474c261f8645ee804cb25fc7bc4f222d7d47ab954c8b3a8cf412c166a2be85e1134941601b49e28838145e0005863a2e9e4ed4b56fb65cb1ea61c62cffa46d8ba3806393b4396d6f0dfed077ea6b3b786cb9d466a50c7a86e3c6fe17fabc828c3b6a16c83a1b1f4b58fe84ff463010643db533857f8ad89bd08d440adc6cf0dbb129035b31d2ad2504991df6bd987d454529f4385d42af92fb55508d295c11664fb559b42d23337f153f102c2475627e142aa9838e5bc31d36bdfd9648f1c9620e53e6731ddf266a66dd091e0a73727f9708d420df2db3ef4cef04f21795eca7f15ef159db7ef0cf64b473ed5c1e11b7414f39ccbe09773a13c8311cff68be02c66b3088dd617055fd960b2686fdc4717c0abf7c806bbf963256bd50b9500e9f56a992a04b5493847a6bae207aa3fb8b6615dc500506fe19da33a887712060d41bc541b2d48beef3597625397706ed134ac0b50b0d6fe8f2803b9468c976fc275cd16ae945303e1dc9acd5b0694402756e5a42b5b58bb6db1f3ad2b13354f12d438212758947aa91ff7ca9dbb9d93bdb1b338837e0e712351eaaacdd504f3d1c7daba352584b693f1b017f5d46c5ee384e0d56b9cb9679a618ed9578dac2a23c39520740b01e4ac842acf8ab18e3f87a3ae82c94b7a0902c6123596dc87cde81812322e0bd99447a694242b9090697a114d108d031429dc032260b45e6b35adc57dcb63b07a175bc28be198168e4a530ad0b5eb5dffe5a6062810955839da8b4f33287a9ace2cd724ccc8f2b0793aaf2604a5bf35252588acd00311b0d05997306b2d2415d294b8980a33504465f4b57978de1dbc9c98f52c4c734be91c66dcd8244387773ab94a68961723c3a3221acb752ad4eaf5eb892f1b12a601e236ceaeb5dc7a8394b5717202a6529350365f66c4610c4021a440e1fe89c0d6b5b57d09f4d47588678c65ad4f7d5952298d10ef555957a15f9454b9c604df6bd65aaebe2a55510d40cf19b67abbf6aa502535003dbb55752dda5741956a6438cb505d06bb81e0b790a89486e3c0d40e5f80125a0c63786e9a1766212f5fe337294f88d7add46391ff5789b71fc626fc2f133713c522f957096f1bc6baa124f1c14af64c58404ccccb3b3ffbcac9e842b761ba4ac7a709639197e0b75371f9fbc8b008cd7857815400f73d1a0f804660413b374632eca918dd3447e8411772b949862be68ecd0532836e93183e6b1a17aadc566e5f824134e72949a40dfc1d99ce89f25a44cdb3a978357bfc364431ccc84066091a4b5a4a73a489fd6301b74bd169b1d8c1a80e21a811c241bc6c98d2020e493a0326d6c264644ec4c887cb042d56475e555eb6810c625a8c0255c2a0ad99fd8cf0b6cb2cdd19f3c1ddf6929d5fbf48c8f1674c96598fd7ad35f999d1c64f94e6b01f74842e66792d87fa7477fa09d001c3eb0ae8b8d40b71ab0c2c67f334eabb36c97885b59e44465ee43b425992866d9aa5b78ff28685822378c801a5bcea1ab9c26f5bd5697b7784e877ec6e3db18e85605fec1540cd3cb4a141c5001082c97156119ead7b518fdf35725c9a2aa0613cebffa6711aaa3b92eaed30aeafcb751dcf044609edffa793c1dd90e62c30e3b8b45bb6b4ff333c10c475aae79cf40bf28c929543ab94bb0470fb00ced9a3cc7890611a984414698427e0a7616a948d42e18e16c5b63053093e5899b526ccefd8460d02a5f934f49351d6341dbc3fa8b8e91df3b4629ba5cab40f5b650d6eb2407b816f2985cb49c91b7caca691bbbcf454f2591ce6fa7efa173729d6638ea43a7c5a909bf72313dab0d61308fb303d7c96fd22455d1d78ec56079cec2cc6a0b7c5d6c8c1929a768710727440bb2b3a80bf66e36a8e4b6e7a0f89cf52757c96f9a62b0044c1fd4de21038450033b6de47bf9c33bebef6d9470872cec817d26e2039a9507b3efc342aced3d8c157a1e31b54105905742387c6886904250f79d0422ccc6d434f96d9588cf32883948c26c64f4c6f55f4a22072d438b0d9d24ed4343486a33e22f04459625ce2eee4a4321367ad9fb727943a90c65746bc6025df18006b2bca9f112e4080ea957105e3fcf802706bab67ad26499f5c6054c9b619831661b77e0937fc76d8e05979375d63fd4e6b457d18c3c1f0de368b6e5e0bf8412e10c283f2b383a4807373d261ce8d91fe5c46da18abd1cc5df424df288dd0facbde848f8a046e8ea48c6f9d503c319cd2cf41b83629ac5055a171c552e2d2ba014646952614c7e4b1fa5e1803c980f98aaad87dc683837b0c1856b2a9516a703993c4fe1e0449e1da704c1e58302131b7e6b437d62e25f1239380371e6fb21f6bed6e65b0d482ae86650280a96269d6f99c89396b8705f6b84fdbbfd11620297c9b94844c6248a42661cc8994504a7147f9e16423dac9ecb8c292cac1bf52b4988b714503e1ee1c31ec22b26c151db0a74e60460feef8493be32a6281cd3cfc88787b16199fce15e3593b4949e9c204c9c967b25e145435bdfd4615414b493b31494143189ac070a56baa4dc022e038b83a9c660de396694746acf23adaa8518b32986b2a071c669c4cde4b1893beafce1b3c912c89721ee26e262f195fe05a2e05d8a428d9c5f33fd9b08b69d5af077bb8fdd61c83a8762e851a4e92efdb26ff5d95d50b1ee3f70eafc276432e1a3a4fa4c17b04f5cbaa3c6f26f1e138d49a03aae356955a2010b34a07023e9d9fb8a2fd0eb7d71911278fb9c0fb728d4f6df1a98b838df5654ab907eabc03d5e638a950559c0b0c385415a04095f6961c5106efec93ed305a03f78ba2bff69231b0814565434412b2b7dc5bee2d654a520670090d0927095c839cdffcebe6bd202f090889df4f4048fc5efffdcdffa0a0ca0ba488df4be65b2f6f6488f06c6f9b454532532b14cf59a65414e5ad4eacd43ba36cc249f471158a9332fdeb3ece0334c50055069ae28c481e94be2a9056e5592479d06f7dc1f3bb975db805a6d9049abf2026dc6ccfc9fcd0ccb7fede8039fe05e2781bd0bf066ca42dd39d4cfb29a54bf4fb1cfff37d0effef6bf8e33d8e10a8df7b207d037eff02bdb701a558034ab1f5f2f1beef02619e0664fd0c885f065c7d0b54bd65fd6a035f3edf4f408adf0ff15e7e1acc0f0de11f52bdf7f44b62c1d0bfb7c87328fd56146e096ddd0a627bd96f7fc8fc2d0ce27ebe0d83a6fc0449d7bf64fffc9f39a77da0f91dbea490284169a5fbf813f107e22fc4ff251fc9ccaffa3f76e697fca029f483faed074dd1c29fede707d997e1ab8612e8b7ffd36fc39ff9db07a980fb7572545dc13629a5946aee5ea7f61a582b3592258c14ae20f2a5535addddb56d7377b7bd3352f953baa437caf654db7ef484d1f3d4be740b52d0010ddbb6e7b6f62c968341185c974518ddcd12c6f5b284e16d1b0925e032f540fdedcb1286cadecebe203586d3e994bad418568cd1c6185263488d51eb9439947279ce29358665434a297ff450f90e685857107468d5b6e01d3058d56a1818e75fdbe88dcb15426b86ad4d62390f4b0833db9b13df62cb0b33e02fcbd996211ab4d4404b192b50bb4293e758bfa2e5a90a8cb39c6969d2c2b46d9d262dd6729447573dc385b15522aa4b3616b8409b386932c4e04ca02ad31a37b42c2acba472931875316d51c354214905253c636a72818911131c8216238b5d35cb991652d96b6206ccca724685863ceacc33a8b4d084bd2c675450e8826f96331fbee878c13459ce7c78f2c10727275895e5cc872780c05a96331f66216811d5ca72f6030d665a40a16bfc3be86a7094575e40ca483a53c943524aefcd52a3b3bb1d06524ae92ea59452b6fc6f4a43f7f64abbbb5b76774b29a50c15dddd5b0addddad6d575c97724e9efa62cd0c8fabec5c985ef6d05852fce983cbf25d23d4308163b26c228a2828b0c6967add245d3df65133e5feb652d4df4abde36d91c74eea273b72a6450db99b28f7efd0b9228beb2ca093a83a15a14a80932324151aa9b1341079eb97e3946a28519aa230a30524b0d4e00c2211065df410050f27f4f00619ddbdc588052765c4a230b9414ce20564746181922d80d822ca1975002a28c480a50ca72c2b882e195801420919941c7d11bbeee578936ff28893bb9745e4eebb0e8b2eb9cbe287dc65e106cc4767efb92f88d73758c090efdfb75f90bbf403a7eb584f479d2333122c4947a96769490aa6ce7162cadc73bf7d41389e0fae5822265abcbdbca20bbbf3b1acd17a4552aeb2675644f917058fae599eaea6fce540adb5f6890b0d771b5554d226b4224bf6afb13aece0eaee767d41e8b4c24a155d647f1a0c458bcc9c99a20a18b2bfcc05d4c002892727ccd0040a09450f5ea2684202cae907c943142f30b38ba2e288ec4ffd5bd69b9a8408e2062849348183e80f739e1d175c40c30e533079a222fa3c727731b2efd0c491bbbbc75098c94153d131e80374ff904b4db2dc4e34c5a0498d183c21850db95fa7470a2a723f901e72cfa668234837e5c043377730854116d97f65a7680204284088620a2c8a2ab23cc902031b7a584d58ccf891fbbf2f48b3a0c052c54deef78ea2d0babb7b87fa4b2c3164ffee0be216567b9ab8a2bb5b4865d292e763c08948735f900e42e72c6f3ccca05041ee7ecd4651c2ddddddf444164be4c9123038b1c69798119523a628523265c411d314e2508e96b81b0f7874b9a66bced91352b2fbbbe5e10795d7f2704b004eb82143e5c689598fdc9f84ce0c78b4796e7162052c3209d35296b31f8ef27893c8f377643963727297b6251dc9d339d9da4f73bf0b07cbba649df0d30e4ff2d425f7913c3649e6cc974ed35a9cc7ce29cfad93eaa7b09dbac06306dec8f4c776ca2864fa5b14e5b19d62a66ca1a44b1ad84fada59d5480df89822fffbae43cd60532673e114c4ae4f9636dcad3893c7fc979a4c8949b9c6c92e491827b0deba49a6702f174634446174aefc8591352f2bc453879eca42e529ee27893f27cea7d4484d43bb39de4f9736c1af2fcd935e469431efb499e3b635ff1345493c8f3e7b879c9f3e768a9642aae02af8a151c2c20e4711e69e922860e799c5ef2cc218f732ae3c7cf4975319be494e76f5e7a6793b2b14d6a93daa436291bb3325bb449d9a399349526524d4267e97e271b366a49796a4a758929d7a1de19ab5195555995c966519ed528cf7a94a7ac265d11c5fbfcd331d10b7d3c677a9f335f7611a5d8fd289f8678df852f9feeaf8f17be3aaa9d9ef0d84e56093c721eabe439f36723b9f0bb92fea99192946c92e7cc5aeb5265b2e10892a81a648ffe10f452f84a024483ece11f820fc82e392a16cb347ccdd85097dca0ec92634e6444b22e2a72d244bdf39a46d326e539df2e59269b6495eed257b91247cef9529ed0030d9870a1e4cb094788f261ce0383f44693a7315a682a42948f5db7e9117e89237d983f7fce23fd49ba48efc8b0ff828141c8ad01c9b343e6c81e6e7442eed91ad88c1d5f2ce003c9f33247fe1450e4e6c9ad002a9f28e5994d31234872cf5ef024f70e2773e905529abadca1d32bc8a3f774244911238d81de915f001f95257b346d3e9572bb5bcf99af9fd0be7eb6d77e0b353a22f1ec2f3d9440c7bcb91a6e6b79caf2bdb5d027f9b59d1a26df2bd5eaa6598e729cf7e4eaa6d98db3ddc6d98ebb9d673dee76defd3cd58aae56de7325efe7a9be950a7b2b2938692525cb67612b593e8c529eead8d45413b54caa090b154d58b43831cda3f964429947f3c994328d5a0c2f51528c29a9fe31136182e30f8985e9626f8559442c98988a94e5b7aa146ddbace5b8eed27bbde7b55cd7ddeb79dff5be4fa55aad308bb258de93a55a61cc62c1c0c4b468abe53d5b2c989898564b4666a62533334343e372d54c9b1a9b9b178e9b1c3874f47c4f84996dbc06c7960833df97d7e0cdbdf11ac4f18930730e9a2387f7cc6155af11b87004ca1387558d2390f944c041951a9cb934decc47f3c1803bf4b08dcdeb355fb5bf7387a305728363975425cb39bb241b1b6a63e36d336de48c6a14caf33dcf69dde8e6bd4d69333f903fd22c250f5a4202cac848fa67961f095eee708606b0e14e29b1b5ac11b82ccdfc3247beb5ae235fd0c4519ee18875b27c21b20b2094c8a18b2836581013e50b711e0b74d1b284ac054b9a5811a5944dbec4bd52de4e060bdc2fb1c09e25dd825cd508d2892b3af7b78193a634f2ebf627c22a73d882fedbefa01e9b0f6298a1d91fbc306a90e9533190f00e3e69477176cc257904e1879c498ac3a1643aa53c31add0e0884c9fbec5ae87e92c91e9f70011e20305834c9f889cd1e08d4cdfc89126997e122f64887de144c694e90c0a8aa32f5c80a444cec078ca7416460f993e5d820205fb17c4311bb9bf314680d1b4d87a34c456f248d171075d5461b15774bbdffb8370bc571c372f7b9215e10fbff71ffe8a18b1458c7c4f47921431528b203de5485204c98bc98abea7573dccd39a777d546c161d6d1b305224aa4a11aefb3bbd1cdf7bffc2e0f72ad0c318ff87bd7f81538401836efef53160d0949f9b7f7d108e5f7539b6b96d7583a718d19193272935242bda2a92ec08ca91cb9cc70158b00c0b9639004b4f8f57443edd1b06b15fc31108e5cd841fe2bffa21fdafbf1ef8e25ec70b891ff8e2c29704f07bff83df7beebdf0e6559fe385c45ba4796c928c2089f9604536343b4e463433f722ccccbd2480fffb1ffc5f0834a5fb1c21108ef0c5bdffeaf177e18feabd10e8267c71feabfff9d7ab3ee65f20ccdb80325f03b65ce08cccc7fc50eb613076b17ee68786647e28e6f1ab68304c4c4b668625625611cfa143aaf79e0883453c47e515c99e6499be143bc9b6ccacfed0121df17b19169da79f04ae3cc328434bac387f0916fd47ffd13943321dd17f0916bfa70f841619cd236cb4c247cef3aaaaaf59d5d49762cdabc25775d5804fa3644792d02f7c714a32ca25dba929b279197524894c6c9c471549c36892230d8b9aa936d5b6fa97cbe66b1e87cd7b604dcd7f6f53f33868fec5d5bc144720d2804f5a2145a6d6da6d8329736274b461a339e7c446ce83012dd8488b1106b4744298b81ab08419334146c91a64faf34854f7f56b18c4cecf841717fad8d4fc36f3343f24f32f4c0346c2357cd808e790e94b6c2479549b773d919abff90a769e9f0f8eaf0183fabdb701836cbee68be0008f780efd1bd0a5c9f0063060034ee1be060cf2ff6c763dcdffb89ec6f535fca1f95708d44f4303bafe05d2bc0df87d0de8f97fff13fe74beaa9f01592f03e28f01efb74018aff524494c566474849474041f61a38661a3a5ad656c58512a45da3df74354dc5f8e53714b4c494a494b4c494a1f4729a594d22e7c6918534a29a59445f153181af3dcf774f5b4a31e55514b875abfcd24fa1bebf1c77420eb3910771dfeee591dfe18160bc378d3a64e9fce4fd230fa5dd75c3797989294b82e69892949c988eca13da54f29a5946e0ff3ad51fafdbd3423f429b7517f23bd3387fe03cdd34fff3ab879acc74fbf9716fa741d97c4944429a5d407261c1afafe0e510974cffa9fee59f8ae54ff797f87bae7be528e7e77bd8fbe6a6529a5f413a2cd8aba151012eb05a3e65db2872acf9d3cc13c730690e7bb7e3e109f3b7b86a6ab612e31bcfbce2698766a9abfa262364929a5924f9b5b5258ca77b96bf68450254f252c383a5dccf2f883c95b2af58e95def11674fb780fa4dde5db6bdc5b0a48b1aeac5c6d3ead93ced5d24ac9257f5cfd8a13f2f69458bbc99a6c51e282c2122e4c69b0b0e589cb0c5c8a665ba420e202e539d27291d4556145d2175092643093e50c08a52965a5b5d6d1ab63cc29bd6ef58ebc851be89c7edbc23778035d7a29a4946a76563a83614c7550d82810337822fb12323afc0c74f0a0bb65504577379db09ba75e93a93f89915d0646649f810a4f58b2bf85799e24838d2f454cbdc0449292e4f2e58a339ee84286c314de430e55d09e2daee4eeb74f4e72bfe6b9fbbbfc688aeceed3cb9d658b2759723ff53c77876294fd4370cfc1c57a1ede6185eceeee4e9dcb0b3a546e5c2d309d479034acfb5b5e8400a45ff6839207c898937becc91b0081f38440e6f45472851b6a7c40f2681a1a29d2b0fe961958763b1057c5fd0480e4e1c20f8c04c83ef6c8ae05ae597e812a61e60e481efef3332279f85f2d78944c42ac65c259ab1a7dd5d0c788e7f857d164d847f27097cbdd2e7911573ee892c77c58c3e6ef08711a36bf6506963fe2e860295f02b958ca7749f952cab752be7ccafd97fbee87cc976190fcf95d1834e5a7fba0f91c97a461cd49494d39e4bee46418c4bd74a0293fdc4b97aec74db99fc34ef7e5ff5c19024df1f0673e170205c9e77e862f0a1434c53f687e47854421a08fe7f45fb0fb6752ff549adffdcf94f3bb57229ffb0b069e49b2c796bbbf48c9f69392d702967916716fc3d1168556ba67b9dde7cba7adbdd8ddb6cd6e2008b539e73ac8beff56b721f76eb76a39d417525fa77e4fedc29efa5dedfb2b095f347cd190d20d94f9d6966d944996eff6fd7fecf640fec37d8740fdda2cf872c2811be86341a3a234788652984bacf80dc97ac4ef9758b15d62c3c4fe3186f20c2de911675e66c59b1f6b0264569c41800c26cefc90f58833ad76d1bc8c72337d682e18401ca68ad2719e666a7218f71488f3786f53f33b744258c36053acca02619e536970f8abc0f67e1cabf75e7eaf0df79521c215562bec87909fd593d402934b128b53d576c615d3ea69d565f5d42b26e769b5564c4cad569554cb913c4000cc1cfa0d0e2d7951ce028caa3c0d3012205318acfead7fb7d0c7bd7f0442599b01ebeb573f64f3de5f07bf6f50f5dd0883c91eaa4c67fee687ccfc4df8aa4368bebff921dfdfa83ec86ffe260cea57bd145720cc7b20eb5f60eb6dc0987781f86b4099d6c3fc50ccb35e5359d19322875fe687865a3f04f3df0fc5fc10eb55200df8d27e067c69bf7a5b5f47c6b46428141ea2527d05877cbf7a0d9480ea8356ffd9eb81af124cf0f1be8409ac40296281d14dfc5eb5c2d230fad25ee7035f5ae8e34d2b26d88a290a46c836cc13edecf6f78768df8541dd6b7fc3a0293fdd6b0fbe7ceefdd7101346e83cbfe9cf9ed3c73afde933b4b59caeeade822ffffbdc0fe9de8641f6bbe7c2a02941dcdf6ae46a20a61d483fb08186c92eddd40577f310a4d3e963b3f265f7fe43ae5f398fb69f48ab1fa2f282beb9fd6a7bd5e6b33d91ed816c2f64fb42e9db7ba18f10cfd980b0803d0c9a523fc8bfbb3fbbfff1f045dfffa5bdf7e14f872ffafd2f6dd3b9449bddb8172276e08b0b7d80780ed23c6ad8b625796b449f0d284521ff1f0fa8e61dc886fe074ab107484f4fbeee7d60cd5f9f1791efbd1fd2ef3fc4fb5718f4bdf71e064df9f9de0b5ff3c3d77cd1bea7e580e94f24fa4d5ae4f275a3e578efe94f3af3f4486673d2303a8d6851974ec41ba0da4822126b786ae3a848346a6aa3896883d194d40b220d4918cc72b684c46bcb2a0967c72c96ecc99b2b07ace910e3a955d264c24d588e80285e7c1a6e12400a2d68a395c38ce5b53cdca25b72bfc547b9514021b74b268a0cb2db28f0e8e1c026ce1b643065bf12d372e50422b2ff6cb58476c0610a2e5cbe20428a14645278e388ca17255e1842f4184461faa6e4d91b3de4f65adc12b7ff36f881816796b32929790327532b9079fe9c3b5722c192a908a8a3de914c4a51d9998aa892fdb727bd3337281b7dfbdd6fcffd10fbdd6f2fc4fdcfe5fabb10084828091311239f14c204259d7eb8ef58cf3d0d57521df8a21cf8a2dd1ff607f57cdcb3422097e738100cc8daeffebae8eabb0f62adbefbefbd7f5116f8a2a19ccf81f8615e48544da518592b049a48464a48329889559d6c1ac92085af1afa0889342f45fce35482f9f9ac079a0234e567fecfea6142a009b50a81a653170241014da6399d3826cea99b536a43021b7cd5b7dbf70ff9272da47851e3281613550ff3537ef0dfbff755ff735f2543fab90f1302f50d1bc9e8fed8b26b84e4322829974149d18033a0c641b5d4bbacf5fdf881a6fcc4fc7d207f990244981f95ea71a80a815a616327a08e09974c11a699582f45d68fadc40a5ff585c42d29bbafc25735da903cc7fd5f48dc9fe27dd5af7eb57ad6ffac9ee5bf525a3d0e817c15ba0a09c973fc393005588adc8f6ec421650feac22f94ee3f449392218c1b6e608ac54467f21c7f2014c85aecde0b5ff4bdff7e74a5ecbf810a588a4e4e4c6e658520b264e9d2854128f8a2a65851841145b13b02955199e7f8bf5e3e503f3847b9a143798e7ff7dcdb50811130b494251479a448dc4f917b232ae336a44c8d5e43a6d8fd14bbf7d1a1b214bd1bfa6c4647a34b657fed86a8ec3f6e46d97f8b6d322d4a93ea9e29fb8b86f449838aca4e99a892e738559a024bb113671ea952136d1a26089067b682917c34e0f9012fd3569ed4b78d4e1f5b2d0f6f5ae7d708af56c366973dc4eeb3d5db465f0b698bfe4080a63bd47b8996bdd6bbff6cb5d7caa387fd89ec3c98ce0fe67729d4a56df3b6af3f6e4f1be66d3fd22df47ee4b1a7c7d62a78c4d85fa7772a486f7a473e6d699e3d2f18ffd0aa2b55fa76db6828b790229158f2a0b4cb985e10ad6cc673b94e4943af7bafb60bbd2c25f59eaa5e4339dd5dbafb7b69e0ec9202e9cad10ab60c56e52f4b1cff42db2895545249259554baeca9ca1ea0efdaf6bed551cb1af8aaafbd0d19307328eb691d87d117354b652e71dba80c8bda6b1b28b3a2f655b35c77bd4fb5c22c9898964c9df9685c3536af1b1c39743c186e80c341071ec072001000efbb2c1a57065706d636cbe9c881e3e66553e3a2999109abcca92feb086438e8c0030f602a1a52c9a37e3dc16b475c896339a79b50aedad641be96039cef68148c7e517e837c6f98af07e6fb7dbe2a1df9ae72e48b71e4cbbac917e6956f8c4dbead9a7c656668f2a571592ee68b2267c035ad7c6d5e30f9dee0c8a1c3e3fecb170c6fbe1be0781c071d7800cb014000765070e60beb80074c4543cf5e371886b6e7a408f3205fef205fca41c6d1b42f0ad636c8770bf3b560bedce7dbe9c8f7e6c8d7c391ef7793afea95efca265f5c932f8b26df9896e7291c9132c765ae4c2bdf99987c6960f275b1f2adc1f9daacf27da9f2bdf9f2c5e1e59be3e6abe3b97c419b6fb881962f4ecd97039a6f079eaf079eed7c733c80c1541e4e214abfb6a6c57ec11e044e104b74ec54ec0361cae64f2185d38e35661bace145f677d5a088ecff6c10657f181b5d041025da7eb2507098222de1e6ec2a7a27b7940aa4d0f802e5792074e1d2c2be2ce57e49bdfa82146c189186438dd15fb0e6853371995e9c60c0b649862dd3bc02734924813522a80b5803c2a5f026c5b95003ca176adc80851a2bf4106a9c80c61a47a45186175ee8ccd2d882a680b72c676938a5d1a4695c9be175b1a205ee8ba3dbe50922fb4553d7c5081736a828ae4bd20a1a0d9e6c171a66a850b2ad0b110b5030d020890b2f62f042c6851429f082898b590b5da481f42c37ec92ddacdd98a8e2830e555430832a2e5026d8cb72562585c9068ec9720644d4101033a032e056963320b2582a41e8f991c6104d96b32160584ae15e7941c6dcdb8a817156e355ab3eaf6fd79cf5ed85788e6c0a5babd47bbc7d7677b7b5f6758caedcdd322a0020a92d949f561fcfe906a16192877ca17c9bfa9b804afa32fb4b863ed941990c56305f5955d6055b24532be50374e4391dafdcdd9f52ea9e1a31565a8d182beeeebe6d4d965a6ae9a6d533a8ddb45a049dfae2deeb556a37cdbdf9dee7764e9f931661a9a59b56cfa076d36a115add2cd5ea7646d5b4ba1541ad568bb0d4d24dab6750bb69b508346c3bddb82f887dce3bdfecedb44a6f8786ddb44a3727a2bb5da7e4deeb558e3b9239cef3be20f63dff7cb376b34ec4f77d41ec7faef2cdde4eabf47668d84dabd43a11f43f6de59bbd5da5daedd0a0b552ab1161b74a3727c2b16ff6765aa5b743c36e5aa59b1381dd63ac4c295d6e9af67daaad08912b81b052640e9539c491ba04ff44f9ac56b86a5527bbe4199bdd1eb0bdfdd5478208b0c4f80b521f53a308fcf605b1ee5bd5963c168b05e3407a7a7a3a29ac2f88f62c1bd33e2034cf2c2afa411400fce39673ec1f9932d8ff46f4b3a8b347c27132e58e0ac7b914356531315f10ff984f84d9e964ebd27edc787c1c991fb419b38a521f993ee614f941bf0da9481efd5a1855330da714c9a33fc6082976b376721dd7c2022f654f00d7fd00a173b870688afdfe2558e4deb95f82c5ee27c646181fad5ef543bac7ddab3a2d87234926e8f2efdcdddd9d0b5fb5ebdcdddd9dab7177efdedd5baef74fa27a779af7eb2b776ff7d9fc9a1e910da317fc9e057a35dc7717e49e0576ef02277eaed3fe55c3064720d200f7add67677777777afedeeeeee4618d0b2492192879b407f04337709e08cf977ee6fc3235ff0bc558a332ff32a508aadcf6768f5aa18f03e0d08d302a7d8e0cbe7a3e0cb87fb094891fb21dddff9f9c4acdaddddddddddbd03a5c4719690d6303458bc84db48725103983cbb280c2bc46562a71779ce2e1deb9deee7f7d09cf327549e515e5cc8f7e9fdee0b7229878612948933d008b259cdcb1501b99e51c58c2f9800eee456f806eeffc396e1247b1960648f5a22bb1946d967661841c62c3b6ea37c27b7065ec2f885b0d64209c2e630460daf4c3f3bfef3aff64d82cedba645a0be3fa04e3fe1cade713a028dc5a6845590045d2b102dc1df981aa163333441933ceaf7cfcf49d0599b92aa4af0ac8572870e31ad7bf777c3e87cdc43c51a8581481ea128455336f090e5e90534c4f942248f10122ff8d2c3540b76787286387b8a8f17037afae8a78ff388a9830d76f383f95a138cf388b1e48140174cc2c09285951f8cc4f92ec9d38aa1c9d3134b98803213a714b5d6dade72ea78aab5d61764b9d65a6bad75d65abfd62ae5d471546bad454fb9d65a6badb3d65a6badd5bbd6aeb5d6eeeeeeaeddd387e7faddf4d138550d77af9b66e3ee5e5425bbbbbbbb6bd4df9d524aa3b6d7b66936eeee2e4c65777777f7df344a29a5deb9d34a9dbabbdbe9a3f3bb6d61a6c885994c930b4453662903e96e9a2d34dd2a3736e9ce58a1f294326785721e21b3de58f3b0aeec3ab94757cad00d79bc44f7890524260b4479bc5058b7ca55caf32b6d1a82e481c7ce4be7a577a46c96b28763b794fb65b260f950b2c7ccf33b99fc41964f956a51b7347d684b98b2fcb16bca5d972cdf1b02774e59cae943e6f9ddf421b33dd12b123accd8fdfbfb23e104b4865e747baebe9fedb51005af21a216ca3c717b191587a41cc048bf8a5bb8248595a87d8bbde3f563c04a4a3980d13f12dcbb8f564353e4c473d523b5293c0f5f3ef4a512999581b49c69d45a6b6d10ec77afb5d6eaaec504a52771ebdf2a29955eabd75ac34f0dafd5dddd471d9d5a6bad5bb07c5b6badd5ab173332a5d6059b96a6a0cc46a274af9347f945f697dfcf0ba100c8beedc218170e2de121722f8b11eddb6c508475f2d8ca141c63ea8f5b0d81ec926b18456a72946c64fffa13945fc121e27c4a6b100a64962251863199a5485cb5f29c21907c97e7b4b2fda1252dda9725409ccf81b20488168888e7f8cf9ff2c3fdd89f2110ccad962b5fd3344dabf225b869c1a107b4efb207a4d5344dd3b4ee39356d7b9f9bf7a869ad815db63d5859babb7b0be6beeba14496bf436eb95d64471d8b64243577fdf94f5b9aa6699af665399baa92e5574d764adcce876c6badb256ea39617f55964b781185277bcc2c354da334d3f7af2f7ff340fdcec15a69ad74ac5c681a48c2075728f10650aead5d51a1cb6cd7c2b102f1eadfe53b5d00061979dbb46c54d3aa04ebf69bb6bdb6695ac5a15576e55fda06a5b4522a434d0c4cdfab94b28dfbd3872bb3ed9d3624a5b471b892524ab7580f5d3e8d1ff02d1c17b9b4637c197e6a60fa5ad02c675c2855297be4b1beacb2beac52dadc18e0fea7b2c78e3c6a2fb5aa895043291bc605d14450f298a513442a64e90491932c5778236b593ab142176be50a91143b7a22b82014efce2916bce66b42a09a7785342fd3322692441997cbf5ae10c8f5adf0351302cd84a05d0282ffa04ba603d4c901c2708037604f183e42943081eec44a02c33cebefdb572dadbe1fcb648f03e486227be0877920fdf180615efb7a7ae45cd2c91496e9d7d878afbd0d5803badcfd7f7e0cf03e86f51f08f3de18035eff8268aef94b245a8679e38d37320c4c389fb0c0e9049c3aa481c72965498759ef8c134aeeeff6f759c5be0eb2870832d37ffd37935e5ea5b2f11f388966d1946dc1abf0ad0c2440c20a275a80861455b2782a362c91a2c4088515546109336bffe1d0fd6c42a2e52b97acab7b0747245af6de5270ecd88c3949354531412d3d51ea4deee4eeeef61decdebbb5bb0fca3c33b7fdcc5b38a540c19fa568300845c1218b2b6ad8a18d1538d1000d54bc3c9531c50b3a348fcc22ab142973cb6c3a6da90255a9cfa19934877ae745642e0561c9828aa4136420c6196273608819a0704852628d29b17f2ef54fa696e21195acc80c6884c911cfe96f8149545809c1f4cc13579848c944e6152650f2bc2b202140a9645c20ce33c5a9f3451704eeaaf8cfef719e7e4f096b2ba863e0870117719e12fcc0830b9e1ce9a08311e2ec22c9288aca96246ac0449cef43e436c1d2cfb812676ce7918961adbecb7d0d5f3f40db57d70b89362f24debc9098e385c47f21317c2111e785c40e5e4884bd909833d382c12aef35ed85449a17126b5e08c70b893a5e48045f48dce085440e5e48f4407e0e887bc030f03d005d58e00e3800619e331f3b611c7003b0270987a00f080a09033f58440748c40b9c03c4011a79c2a3849ab1245f0c78945279be0d388b6ac0290303bbc07944034ea30e0a1ea7d18ccc8c8cdc50e081c2b664a515d38a6135f1929ab060c089c4026792148cc1a9e473a98a81c7a9a4fa54dfccdd5688a62529ed45089b9b62dddddef5ee8744470d21f1dd8eeb380e0a9818141c93cf2620f0387f4e4d1ffd734ec99c3935a77ac9c3114f2ef383f9736a4e354f4dd18eccf31b8908313a694eb593993c36943c5b4a9e5d25cfa7deed858b17ad972697af873a36a7e614140742b43d7832e7d48e62b1180b491a155fe47e985a148bc55c10c252a146ee67d518129b92dc8fe9512c1673b25df162c8fd2b5a148bc58c6260a3e47e150c587449e4fe2f6a72716390fbbda7582c4603199c7fd9aaf092fbbba8582cb6025d21f7734fb158ac058ac22643eeb73478131694dcbff5522c167ba186ee88dcaf25c562b11aa0c064c9fdd505216c0b487c567cc9fd5e0405a724f7370eb11815ab14e4fee9b52bcf8d0b3c3ddb3c9e7605c56183d492a6156243427a57dac6407658cccb8573646c5fe486c26435e96a903050a615e243427250b41cb3fc9f3e5c86a32bcb7f4c454fcf8645bf87a5b9231d595e61424576657985891515624d65285d9952fa418599520e5e28c98005cb6439533aa15b304419d309cf64391b028b2e43303151220d259b124218f9d294941f20f4fcd05172844bc90b727f595e5192a49531b9e93dd5657b6eeea2ae4a35dfdad68eeb582fb870753b7d6bafb5d65a2ba5da9c78b571d6dd7d14caf21231e79cb5c874e94770b694ca23986ed5ddddbfc8bb3c82dbdd6b75c7c1f9e26e4f4d9cfd608949e7830f54dfca66d50733279701f063a8dc5a3233d2c3cffb4810010bd3b47737d7ce079200ad1ead6f2d698551330257e5eac05c1c8d80645111641f816559956e15cc00982bf54c298ba3b4939139fddb370e0e8ee5965aaa8bc032e45107478a12255e03c6697815dc928143815553a46088899ee156965786a850273826cb2b434f7a0ccccaf2cad00aae03c6595e49810d1b6ccc1b3514e11a9460de50a168a50225961a4e543644611a147d333caddc888206ef8698ca8d2516ae11d2e7860e37743728796ec86c88b571860c33884f8edae0c2057106591b4d31d0f0d48695a259a8348c198a921422a211000000008316003020100e8604e2408cc4992eab0e14800e6e964e6452329688834990a3280842c6180208300600608c31668a6c2b00587eee503c70f5865420a8f70594b782e6782feac973bdfa411ba7386e89319203ef383da6cb50d7e3eefa96d71842323813565fd276ce46d2e9d8329b0efef62342217caee420c6649b549e84fd3ca32d426489036282598fd6b5094d638a6191956cc72275dcc41e618074baf354cb154110c5ec2a027d66789657f1a489616faf00fadd37924927dfbc61e19837e3a49cbcf31565c64287ac6d7dab97c8e4e276e7c4e1fb5213609d8787a13046878c647ce2756e6ef0405cdec20df3bc6f80fdf69b4dc7da1a7ca9ba96022a2e3ef82afa5d4df7bb10d8a9a18376ec8d03e16548e67f13ddc13484d74540e0142e03056ade72391b247dd9cf4c8f03c982e35e7a7daad7c9b2fd49dab26c1f2eb80e17d6116a0dbd2d7cec336e5c3fd92e0563ef523b4121f8d289cc63f4e6a90bc76932e049ba26f462adbccafb154bfb273701d3f5a1f58547904662253e2bb5123831fc6ab9063859f5b09a7004ca9df7eb8442d9034f406cc99851b44f8cf0b51d9fc0af5628b8a19a0825b1184dac742fbd7d99392013a874248e722cad73c88785d0d14a8e2521a7614bed8a8bd05b076c2db1561685c34b6ad6f8e6eff9aa058876076c809e13bba8991ea73c4d209a85a6fd939b80e9f6e97a728846f50fdf9f3f67a8a6182c8d3558b8f215c2c3c64bf7ad71db21b812541b858aca66fa3ef4805858e6b09bbce764acaf5b93182ce721902f22e4b420dfefda39b385bca95264ce57e30373f457685a7fa89fa6b48f9f335d2246f23c7d3f94266106d2ef76e80a393562723bcce44f90afdd989ceb03d1e589195c9ec6066ef4c9e72edb35ffbfd12f57c39ba878b018ee74a03b58d0a9585f9204168374abd0838af151e009c9bddb0f8ac4c4a083d715363f1ffb5c682d8ba21b9a994b7b98d72110662b62de8060d7439179aaa94fa785d7788eb4971f9900e78bc00e1ba7bddbc9780470203a04819fa07fcd3c36ddf45ae466a2bb951f6cbac888c3e71ab6444a82fd1d09711ed886e0f19458340461c147351e3cbd8ca02e5dca16f7abcd1c0d96ec7c30578a4fae697637a66b23e570b9026308b57122e3cf3b2188619ff72e60dc4294ea510272383313bcf91f72a0aa1343321678ca38e32487cc9f50943904092458e52c3bd5f5d569b03fedb5f7e391a9dd0a7c3a2c6a76ccfaa725dd3c17a553b2668e6bd0a7fd80f5085021725067d1d3839f77feff129b7f5800d35b8c941e2b3bfe287950fc8ba170990c2ffe378dafe3e84e48d1e81bd1307ba9b8758c0a7fabcf6a1df4f9ce87848b10eaa810f6746fbb24d6a11d1b0da907d389e431f014e699538dae985f593acee1279a58cb15999af94ca66122a7f679827407b30de2e6ca65ba320784050504190a160d789bb0200e80a56995e195dfd26340b508e74e31aacb1549b39c5af8a7a18bd28bfac5f2ab8a79a01092aeb052212637fccb4a6388d41c769f52e1264a853e91e652ead477a79fd0dc0b46ae8b7b37852c06438b49adae822ef96205a19de929b6c9203e75cbfa65212d2ed0d36db920614572f03e6763415f024a1548634c612400e186683fb61deb2047e0dd8bce3f9f284064b14c4b100983b9e34c2973d5c733730aedb1119c4639d7483981e1b949a7aa0d0add5e2d42715874a204cc47f472ccd99fc982bb5555bd33463f24e54e1498def3ed6a29ae8df6491636c4529429aa9c7b3cbe9a3aab2d135d4b34219f1cef1f1c3c365f4df47b7daed1231bc2bf1d959956aa48341ed2e42c2788418044b25ffee9f03438f865f02b75cfae3f381fe4afc1d883c3a8c77ac3113ede3f37f01e6fb51ee31144fd779db4baf152722951dfe0bf201c7e8f2e21c8118ead4490f06ad636c71cf792f3861b7e730bb8fa06ffabf50dbe84f3854aa41b46d2f6ff8169d7bed7c190db1b7ce30a20709a80529c690a912c34dabd0a2eea1b1cd60a1eae8fd708af3a50ac8c050621cc1b36d946f839f63481f54a6968166da01318819b106adb07b3586dc31e695f7b14b7d04d7504c2924312332131bcf94b311518b7b832ffc9b844906d848f2336815dbfb328fd20c0c4af6cbce2a36c2fd1ca59a6510d484a7636e8892ff1518a00ac11577e1844e8680acef86eb6fa8730dbc1dc6c91ed02e85202e0d8c194535a42db3af4ef22c5a685b97d60c6f346b9832f416c5e28ecdd45a4639811b7159928663103beb22c17c3a6985aa86d61eae375b06838785dc9cf33746c4e767eaedfe21236cb714f47d419e2103a69db83af2b5017696f0b0fb88ffdae3f6d31c72219ea631dc29fa415e283d7d7a82c189daaced16e062e792838cd4de133949b49bbd93a89506c9fa315b0d3d443afcb012e2810e6a672e9dfeb031d47a632d4967233d1aea669888291c8d323a04a79bc5a456594959a81d41974f110534216599c256d338f8829c812f9c3630236703dedde44b3b9b091251edc54e0cb0bf731223521a7c028a972527747ec42b00e82bb51d0e15a72a9acb974a31a3a6603fa9c8daefc3ced463ee928f68615ccc2c45579fbe14fa62bef46b7ab6549de312344157644735fc8fdba13a0579fb359e4fbd8cae2733658c0192131936d523972ff2ef430d980c195de9a409a50b883f5676d34439a2274df8e30107c089a0427906a5b66811d96bcde98ad29354b9478e57170866476760f076802704f9b7cb4bc1c8a958313e0ea1a88cc908e254c1f9b48e8fc9233f2760fbcbea9346c77f59e3f5c2e6a9312622e144b535fb4cf90e12392682f697d04fea3af5a919770289754480bb91ab85bccb12e8a232522e80b3d330ee587181b6ff9aef7f0af80c60352d31846d368e480f0e32872c2a161517b1d3a1dbb750bb1b3a6f9892e9aec622ac89ebe782910861b69dc8d2d2c7d6af343934727dbd5a9d7c981ff1acaca4c497f872826bf5843e0e711ae85c1b26c8300fbd0ec324e1391572c11523c03af0df9ca77a7d7849c4209ef14051d19e8c5c7126b186701ee0c50ad76d08e5c759e2cbcfc82aa108514290aa7ab4254293f1d6ca89535651c9707bc3cb925efa50864c43f9924877d3c32073450a0cb0c8397e45f1550401c39a366b4087f13e9223c2a6cfc40f7fc52b5ec28fe5b03c9daff8f1d93a0f2bea80e3b21bf3a633ffafb1f0984a6b33b97ecff522dbb0f1a57e3b3456f5059f943185e72f207aa8a3dc21518bfb86f8dbf03dd76b92b509cdec254564fa577b80e2021c6598fa72536b8f53596650c1c588e99f98e9ca7d9cd8f19cd41881f201c4c66d9919b5e8db5826254647c29d88b63ec046530798af00a9bff31ae8ed184eb20867798bdaa1651ec42c9c09c152fb513ec19dd6936724183c61e1a545cf7656f051aa93d93f134b3bc5ba467fdb1135226fd50cbd47aed47d64f8d45e60cba2c80e6adb79ee0a83e81021b274b6396536bb5681147d702419b99605d1a8805479e230d22a288a21cda59ec3e55c416fddbbc29c1b24472286ae85883c16822b072e0a9a37a9f5c0f20938925f611ee2e88cf5a4c41173b73d4bbd9e881f1b37c4a41a2bd91c9221d46129657d620f14fba540e9483c3b07dbad1e09f4160761418fa24364251e87d2a53d9672509004e3d12a1d2cc1ca733fe22a5beed739b6701e660f4eb5c7deb94b0b4713c9fd4c8a87d3486c2b4437350e64753a728ad6877f3167aee2fa5f69ab637f80e6830d040a3a4a72455035f3c67a40e3a362322110dfa7536d7eda13182d38a2ef07eca12ce86ad34248a9cf518205a6999a1cb46454fe8e188b72d8b94114bb441c58c9bf7008801451c9cdf9751b516da4eda4d31b028426385dcc44a51dd9f8bdc8d497f97dcd1d9841048126aef042373c3f2b70330661914acf6ff6bfa8fb1bcfca21ea2aa0f65910b5a9e57c5a620753bea9c7b986754ab89ab61631d2db47d6d7b0ec13fe768769d44136a1ae4280c5eea1398352e45d407876685d7e206dc3ab4c9985fed2079316c3884a8dc266b201cb398d99cd2e1016482d5413a5a6523356b5c8f5fab0693893a168640878961179ec9deb75090f654d2c078699d16342cfdbcf31bf6f7039e5220343e1f9514498021ae7f4523d7bab8622041d04b3c12d4ed85953858b14dc807bcc259108fb1f83cd478758ab895a90495278d594444859da1349ca01f980d957a3519940b1c64a25e4ff3fd7e03b90d4c46f71d6ae49e2e75d7eb7e0e5972d0491ee268269c9703c6ef4a53f3d46d86d002991e679b733e6ff13b4788ede50518ee508d002243c52e2196b659b6f35bb86bbccd8a2bea40149a0ca9a4ec03b187b110ea4641724ed46e512b966a9d06a009f7b45e8bb59c779271b4dbe5fc3447b363ff43531f96f2c41e04144dc3390ebd62f34fffadbcc06d1a57f7c3e379cce9cd49362838e6fc199c284a46dd08b89e157acb7c966a85e77231da25e63e80aa49972ffb774c181aa1c171100d8285d2581923279c4fb8dbc2efc62b17364be2e0e03f1ec2a67acf406dd32d0a7a719bd1d041417e53f1694c192f4fa8398903c7f1d79e772350e4144db0a2a57a63bf5888e777f689285ac1023086627393a482e3a01abfcf65902d64a4a74684be4534de20d41bdd2276337b5da02d22a79d4d283d7a8833ec8aece8605daefc004053e26c4bbc286af440b51ff94f9111d8873e009be3521d6b8eb10882cf41093f8c10e7d71d37484fe09b6b5cd133b806b652ac09441918143a04387173ed32f6c644cee956a415576803d20a2047bd71630110d55f915f70a01289751ffc2b3221cdc7a838c605658df066601c8cc0fdab7c29746ee54fcf6bda7afd36d7635c86f7087701719595eea458a9c324cbbf154d4638f16c68bba679e2c68a2d5710f457a78324307635d596621730951461bab209515e8d5bacd6d558b1e10dc16736b9fc8950c526693f110a9c6913f219d03c5c28862d7752726508beded4004d991e0cb264dd09d747e45d7d89a71cbd3ea457cd0410085a8eec2cc4cc70a3d1aae6016bd04cd945ea5fe6a393e235b9466e6a8314bd2f7c2cda0c52753b2dae821eb1b08d818f6b0bd5fb0672380de2c7c5de678abf18ec2da1cbe47afaac78ad64efe6b8cc186b1c0ab207886e396072713adf43f9ed04e66f26752de798fb7c5c86700106147f9c503cd995c5c7032fad8c065316f7d2915bef8fc67583a3eb6aaef0881015be94e917f7907edd764e6a4ad47b3fc1d144c1a9bb8c31ec958589f6783316d046cf93d632164b5e8ee65fff82827093f21fa008891e6e82b5af5f23fe5990da1574d508e9cb49ce8fc11ba0e2e82568d4b31b2e31377164561e680d00f56bbd09bd50f701fa124d0ac12b57ede050509362e068252a45573fb40ebaef139f6814d695411e8072a2bdf656018ba0d70814cd27f60b9fb22e065dfd45308ce57a2dfa9d9af0bc758395f753a2e21650c1350c32e4e22ce638057a1262d8bd3efd5be45bd4ead94e6a2859e0632834a50802c1aafe9371bba9023faba9bbdd500ef8b29650ff12101300c5a71689dc7a18284a0759ccc79e528c8cc0dbb16e6f12bf296913592f712b64adfe579607af2bc733311a0185f2788a727d3e4da93c4fa15cfe2752aacf53c2c1f6f1cacb1260fdba7079785d189e0891882997ff1394cae329e1b42d65fd3cd1049ee5037e167a0ff0345b42f5c4c887a0511982d57c3bf7e4de68c2a2fe438d04833937f90885ac2b13f59b636f6b1f0d3b32f0cc4e4ea1c0c97d82714cc6ee28c4a2b1c28efcce8b537828453fc05360c3cb1a371692d5c3d568b2e99c354d2eb92bf6482c92581f28e20c0bf1ec9074164eefb6cb36a9859540365bc25f2af98e23367b3c7542e5fb2151d94ccd17414d27149040ad0107fedee0205207755137af46d5b7854252449f794e2d582939f2c13493eb9ec0c525c18a14b8fe3752227c9d8f4188781eadff7e9e46eba249fb38707b59c814fa78593a6dc7c1952956923a656b33354aeac9015c4ce521c82e75ec2a3212f48a75226cfb03f19d166ce19108bdccc068b5dd04ac030111a8809b7cf49ef74ae38f85bdc94d7f5967075a42dce89f244bccf2b590b9d227ece2e69833f1176e65ca3339ec0bd7c736c5b4bf0761f1834c33dddddf1ce8e532f1be1de2a62601885f01c04a414d8c2a079a70568ae012c82c021d5c403d41b8bd1dc49473a8e206e96a9ace959bf26db7f8de4c9685238cb701bee2d5ebcd3b298949642b0243c71369cce6cea7938eaba56dec42ff7195369377d9636c794aa9799bc59382dcc87752fda37470fccec4bb9ccc2cc477b7a642d4ede1939ed48441fc42a469b58ba5adb0b46299582adfbbe9bcc9c7b51a079e7de25c400a5eaad61838b5fd56f66321f05cef00cbb6e4d54d645433754e8acde803881c69345f73bb11522713c061fb5fc437dfcd142d4ae77a4bb3a547e8ceac3e8bbc4d13a808b66bc4f6cb2249a7490a2f3e7c9a312b6d251228183de0b9e53a15207d4b6be80c41b0c87c23a49f316d390c0029405ea9d14afe6d6503d23ead7b661f8a932424ad0801dc670674e4dfd6facf4545907cdd90fd90ff64b85e49e3d856100fd430a5e5441dbe942e2ce65d1868b21fbd7c49392d0a8269adac51bf75dc6665a25004161987e3098fae5128019cd7de5060511c701ae94845964339a132b0f162fe30f08ba7849c81ebe298a8a6d204ef851a73f357b590a6b30d6e1defcd654bf575ba3ab1b9073350dee1ab5a1431afc1715a4ead4c70cc3072aad7bd5626d04676d70ceeede7f9001f10d5f84aa5e74bcba463d717f584ba1dc0eacbfadc45a0502a90258897c6cee2175425a5fdd9f41cef48ed812072caa146a73b80f2ae0a51f966b78c9122639a7c0d98a6b77706d25ac0ca588cf489d3d48f02b6fc685e82f4deea68e4dc7a29253822bcb63808a1221df602ea5d3f1978e81a0d9c81cc34f377945d5d04b7ff7fc0834d1703b21f1245e4d206dce34e1d20ebfb92e962577f3a348098c19b49282cdcabb3088560564b0fe1657e481fa492af8f13fd7333d114257f0795dbcdd313712c7aaa772bc7c1e7804b1ea872a546f9481a58dab26bc9905b24e5993e6ec41ca3abb1b6ff11e231b6dc9c4ef554449ce8d3e7bd64f6f647a4eebbb68a115ef7fc21f37cad51dcbb1725732261d2c1e2d06bf32dbb91c5a76662547392b6d94428bb27c3c71818d59ca46da91914ba24cfb7d564842685685fcda1d8051d3e4621c2d8efdf2ccaa08ad9788baf17c17ef0c76454315a282f0685d550a50cdee25e0bb777dfa0bcf88ae8249c1817ad9614334cb8222dad6d25adc97063dc7bbb08c99234d520a271e2ee375fc1c0d074d778ed620bf024fbd82e223df88913dff429cc25ad6455424767b5679605d7fd6451c203e31bfd4d348097f3e708f67836fb2450e6486c658c119000858e9a060beeca09e2f3e883b46d5fff50978e0d30a19e01ad79027bf014b03a8bc0ac90bd9e0deb0a731cf3e7f06da1ab059fc1600bee859400877388cac6c5835abe7c1fd2633e69322ee3bf0835fa5e821afcab6c71c0f285823ff4a88ec18f66819ebbf25ac2a48c7d0489c5d939764329d718c8f8627861b109d94572dd42a64bc0b741e47282c62d1fe69f41e6ca1c02c41aca3529231c2e20ccab17d6cdca75ce561e1531917e2f0256a86abfa1f94b1c8c4d5893ee8315c2076d895de8f80ab9e6ca9630c313c2389a21b62130fd2ef231d4a746b784735007c0a4b8d8e6de9eeeb7ba817fef017b6c254c9c3b3e7598c70882c061fd64fded139da506ec04a4b8ae6a315886fccd0285b547f47942b631286ddba58f24f463fb2d83622efb138e68542d9e07e93f4d57c8ce1a0d884c0ee24c2b6233cdc5dab84ca3d11b7d56b93ffcfd8639516396103b4cae3426268c342bd2fdc510f85cd78fb2ef833a9b3d2d515a11bf0523dd3aa831f10eb572a06fb670fc4536a231efd10b669ec43d3f913156be6c46ed822663efd019e1b029a8cbf811bdc113c79115529c0b45233e083a62280b9bfb81e3501628186393a1e87925a5bca741a6b0468fb2edc1d0b3fdf25761e01f3f938bc07e19dd1b5c0acddf932cc9507cb304780555ac91cd52795e86da57c78f10cea5785ba6cde26170a6c9d74e2beef85f62f54e8aca510c52bba8acde5bb3c6c66e30db695fba703a4d982d47f34f8ae4d81a7c3fa9a21d8b403116fee1af02c7532820273b48a551ef623813d08d5e81c08663e97229929f96bc9fee6390f9b02a5733f3fcf8516165223574d39f60e35fcd2bfe2a4763d22986f072ff98abb87caf1191cccb119bfa003eed3ec1b853da267e139f3a314418f84cf1aee0059f263885d054a79d6681033726f0d5170595833352d704d96018667a6e251ac0ae437184b3118ea0d25995da951fb49ab0ec53f7b5552c12973080c412e1e588e34dd2104416c4b9a5c34f68a95dcfe4efb875eeb73fbc3afe6381be853ab85f8e1748a591b638e7d5690c30e5a8e2b090115692248fa15d11eedc757717b9f310a3dcfd8b01267a54fc411dfab4207a66d6398b751b4f5920c0c96e77fad722a53d5c35e5792bad71c6078fc80549642ed6824ed858aaf4d309ee8139081c1a3bc9b4ff76371c63edc14b4036eb8f2f1254f92f686f6230c38b54f135b0410794499cbb2cf5a11c9b31523ff4a0e36580dd8376c72c6640e6f4341d4ee7cf2f164644786e0b573ec2c7fec8273a0ef2e98f5493927c0de5710d3a92d5c3785db3730b6a0b9cee8aeafe464e27bcf593932007b4c7bb8bb6b36caa226706f3513eb42480a4bc4f60ad170f55ee6592dd0a000785b213eca6063e720c9a988a6f3966e033d5200d9e5dd5d7446b47625be207fdad05452069adb65c1337015929c4c8b41cc47fce8ebabfc26ddeee06b88f1a391d35fdd4a183cb1c92245c4784f9e5e93d0835cfa3c59a8ed44344b471fe244c18fb342c75397525da15b16bd1fd8bb1ba8f2879df74a7b7df515a04342fc0afad494fa41682233d113833fcba4bbd6e9e5da41b3730c9f9a4679a85f91fd35b8d0b282316fdb6bb569bc4be571821dec92186f754cdb63e566802b249bab817254bc99424ceb671c7a020640c72762b83b95375fd7c5fe1882d52c2069fbefaf0448c3b206f211a469a936314dac7660f73bc4a6d7a192660cbdef4f086cbd97c448234890bcaf28edd0058394ae09d7b192d4d7be18afa2f996fae7c3f6ec0a03a50c30cfdd5cdc41e10770a7eeb28b7e835a7712ed1f17d9568b8c7505d8d6506a6e2c906a14c8f40e361a5b33106ed05b7da0ed376013bbc818d459c4a8966eb8ab856fa1b80b99c1e62dbf782e3459420e3c4d9d936039a638083b47e4db94da17e51d120462f6ec3e424d45c361207089cdb794e05baff946c710405ee54746b02ca50341dee908dbd3cb6b1a3e316100ce46d47dc85ac45d09112002484c112a7497ac5d1dadc6438ba4b539ada75af3e74e67919eaf39caf86e3c0b729d62a40196eefe29444e62e639b7c96cb65d37db2b8dd9561774db0e5c5e8eae510a6d7ef0b798ecc733e36860733e740921f7c56be0fe3081e805abd797da60193dd5943205d968989d74b995fe973450b70d78a23db0da4c6e69870441600cbff4cadde4870d516277bbb75d136d85bd43437f1b53696d8408d07677fb3b65cd2b1b62d1cc5e8cb8023b319381e6177df685b2e1761b803738ebb365120a383110a72382623480d397f7e7116b7bb4f018f65fa56af6683ca8143a680fb9382d713c9ecc7b3b0d52b2dca4c5992dd34f3d50c2ed9b7ba984b5b9f118c543d23c2b67ec3180828449b738a894e5f2531619204894adcadf238f438c44fcac976b5353410b28fda77b2910352b7c04076da495a9879f8ec94e36b7f83d57f6909979fa984843f179f8061a8fdb569e42e3620ee249455b3d3b0c6e940904eed803b958539a18019f8e07c0d9decb3da081286ceccf8a0e8196fbac198b859d433c9a60abeec42c8615bd9b719555c34eef6748a49878dfc0916ce198ed94d1666e7cc98dd2289650d37b79b9bad9dedeee66e77773392c78ab393c984d97ce27c3231319b9e9c4ecc26ea14c834475f8eb6ffa5a1de90f7e9be483feead23b36682e787b53696179938e9fc4128f67c578acac7db86842f6b0d9b79a93af4963b63f7342ed4a871b7d86836e778e90c4a724242db2bddd657282cae41f312742318bd9583440987019a7e63b98bd851fbd071a59e724f857e045a0abadeabb0fb665ede73c6abbc45acaf58e44204658d1975f92568e8d9f769e7a1ff328fa29ea480db57ee784cb40b89e29e45d48a491a8cbfbb011529b5287b776ff886b50bc0c5fc10c592b6b5d9520b4b67d7228cb214dd1d18e2e8eb14b24a99956d0fadd11f6c99db8530c2ac953bb121cf76ac33c0a079dc8e0132fdb663dc6e3bc5efba6d47094bbcb6f729f38e4edb3378b41d8f5dc89c7c36dbbde2b27dbb4eb66ffb637b0a0d2db637dc34f551e2bf5d33b6e85849d1ffe46088b8963d2853ecc5f7c08ea112470871e27ae63137bb0bd7fdaf61ae445c514b76da94fae4d21928aa318d8836ed48d293d7b5096a2fca810a0d57508a2a41f152046caca7c19bfea23aed6d52e5221aa69291c80f9d65f026765e7e5a84485ad8e7005a77765a7b73c54a99e8f3afb43310caa8a529e8086fdbf016cdd53d232c86a63e738f6a70fa69cd1b906fdf0494e02ee8162cae7fd435f4e2a9ec656c0f9f2446290f0fe7706b511729b494707ebbe04a8ede9e772456fcebc5587705fe1ee4fdf7d9d5c186c47cebb175a7686f2efd53db11c2874b855165b5c215464cae09bd647ed2204cc57d4b4dfdd08415665acaef391ddc7fe69e6b5b8272643a26220c9e01062f2eb62e56723e252c8a51365fdb3f25bef83c5534e87cb9898cc30cf4c470eb4848235c66d80a5ca3eb843eacd0265f5dfbd6ba76af1eca0f64dd12367d4b71ec190a9ba7627cf867e5681c92bfc309361d19e9184ea8d2f5bccb338981436c017d074582942cb59fc3cf76a7111a5e66f765bf0ebc938132485d66179bb9bf3d7bcebc31b1eb3deffa5c911f320a2f2019dc64da36f6a0ddf190f87c2d49e535b9977d2f02327c272ee97dd2528e68218fd5228b802597e9e9ff88e3aa51b53fbb1f2ba2518f88da8beb6a17738d1b67b30ad1390ac28e8792c7c5042eae8c4998cc798185eeddf433c1161dc80f7958bb9e477503bc7524b9eddc5404b1ce41d21ca820ce9ee82e2f6c72188822ba13693cd619a467dcffbc83db9d7520b0b63c79c529e0e418ff0d845aed5d7ce7b378cc4887fb2a4113cab6bb2750db95aef199e19970c0488d0b6f6f9d42a19b72f9ae2c466840e8db98b6f9d11b905c79f3478b6a2896ab91c2192656a445332c57cc8c0c2837b3867ac0930fc3c9ac1463ac88d630463c7144b5e698cb42e3fb9992232b44a5080610d6acbdba87c9a0227f3929a0c220e6b4cadcc17e9808809e455ef38449646ad4aab9a164b3ceaba225225f81b9be2fc21980c5a298eee446e683258d3f16433736606131b918ecdfb9bd51976a133a71e681034c3c58531d96eefda7f74f7adae4d09a6a128ec851082d3eca3d31396e9575399c48b5adfdf7fc4f2f9c802f64eff6bf3763236143f46efefac60d0476be38a577993881a9d0ee0a0ad07ea8e6e65f50ce2c0ecb1397d888da4d6d25c0b10366bdc6d14775cc8f7ffa7ff47edc74eecedefba47716db3650210faab8bbb8836296b987f862b37ffe4f20414d3b66d4de5dcbf5a440278cf21c05518e9d6472479d07786071aef326bf660d5085e77a0236492ef0f1bec96d00c167414de23e08fe7d38bb6d3409f6e63a8eb652b32b409c3148713970ca9ce03e6100a2d68e5f16662a729aee3903d63524d353187a5356f212dc076b56fa5541122dae4ce9c5ab9fe0390427fa6e39bc9dd8e826335c3a915518a94f28c983a954e174e74c19273c9215d1b9bacfe971d2046e54f83b3fe7d9ce365ca27f7d60ca7b86ced0fdd6415b94a0d28222cbefc3a05e873586974be7c20ce5c13c2cbe9e6e8840a1e2e86f695c2840e4d32bd28d25705aa0b928e9637be9dfe5722ffa3efd42bc81854f1c6eed59b7fdabd690ac20d75c9fb0f48e96c7885be11dce19a2ee94280560cbabf700bdcd70a38482e2cb344e8edf318e630f0af12cc2df2050f2013c143a3e935d55682b5d8b80020421235f8673083df7b5a1e53f5fdfb47bc32608b7c4bdaee75aba2dd16b8ba910dcb21270324e709d3c57113016eb17fc24957701d14db5b2a495b09875c2d4c6cf0ffc7a9f86af1b793e3cae29e59442a6d97d241c055cd6e2858e61e146086934d1e0290812ef6e0bb0bbad93179c1cf1b0e811bc597b2088d636dd2ce6748263e9b781dc5112dc55834162da7e51494906505957b9e47b0399aa9bd795024d8c53c4b219bb1910318e03a6587e4ee0d40994b3d2774a12804ab82525fe1b644abd7cd79540e398863bda643620c1697fab6b069182a63e3864f3b7d4be339903036b310aa47e8e4ace4e67ce71e550ac04ae8e3cd7a7ff4390f229da27f793638e352bb43c38782a7c01625603f1ad93f21504734050e70165f0b39d5140fdc9311a30cf90818a067ec23194166dae0d02c8aee728b11f00c0e59e11b7c1983233f22736fa75e27a3cad7014b5f5883bf144559229a39c690d3738f426ee6a78b18fc2c46cbe4f391fd384d495eff8755f0f971f1607b23d40d8b140adde5d90c638626baea803897059316867bd0382f61e9db6295f1979f74265241272c8fd9d4ea84e2eaedffc0d1c2389af7a0f18930cdf2980e2a5c4451c344df90b868e45e192f9187c21155b9b5e2273424cc5e4c622baa0c299ae95031bbc240c08b73285f58a1c96f041c13969adfc8ba10146d0910c958e0d6bbe7b259ae367578fe2f3e1a3b2f96aa37759ec445252d49ce6c49dd3b4cca669f291673b26d72c2cabd354500a2816bf2338c9c880664042ed307157740f71bccbb5049fe903bc8a220541a05a0d41563c617284962f0a516689ee40184c4108e6a9bf879b00093e26771c9b552006a1252d1a7e1e1d4ea948b5a80a1cce1e832ce5e27b783e13a867049410db6c50ff29ea7c3aec9178170628849f01cc997f0fb12a09bc355a51a492512accf6c69dc02b4a78f40b9488998b41317cdaec4f9ca013d8c2edddc36ae09948c42b39af7787eb37e34ca925d1da129e6cf78770058b9818ef7ae5d1d06991311175404e24c2af40c5039f344a24f4932ab7e0163e539484d52134ff377002a240f10b46b35e21fd4c6b96409a3986c1f382dfe8f03834707532cb3a725a15406d7e264f6e59212bf3a2b72163a39467f440f093efe3b0c7d6b61fe174cee9653824161ca054916556a32816e57a2161ad1195b47333113c821b473a27cf61d6a9e81c8dcac95013b7238290ce4717cc6838aa3504fbf9377352a7b3dfbd1f7d36c034a928922d7b1100003234adbfd067933f1f01879b7f02b79627b8d127d38e2e8c63cefa5a890f13923aa8502a54fe3261205d10058553d10af22e84d440cc12536b18df4af9ee3ac29d030f270e7dc84003fb1aebb01ee57832c29e33fac85a84959af0fee3e53a3436bc7a3a987b81157847cff24cf919856b8d6cd7d372adcbdbea5eef6aa8445859014a064e9d4d02a5294fdf29ca5353c52d4aa6554cc01280484f3144ccec60b3d117952c64ec2b4ee0e4c90f7f08f913effba8cc2eceb1b821a55ed60228076e47650e39f406cba5ddebd7b49390e08d825738806ef888a8f8454a2c7d935ec8362846c639039249a01780b32d80bfb8be4cb69c26efe367459eb60d9b086f73ba58dbd8aa95461ef229302b9ac9da9861d94495b3f14b0a91b9a7be845b4525395eae2ee4de6748cc9f76cc0ebf52f7cbded9fe23c02f1d016239c31cc84a275a4299c0ed8572493bbb803895c25af060897fef842f349c88cbfc71b6ec1d7a90d00940f1867d5215352372498376d1862345e9eb4ac2073348834bd8ce188d93daed0b217ed004a9e8ae76e00ae0b1e822f01d4dbccd57bb682d149cb43cf1f692ffa0adc2b45d75f2202c929aa327b3ffe4a54e2c9d357e3b007ebb058828ecc06dd5f989d53fcb3013177d148489479e6860cb4f110a090202d9616502568c307323dabdb2d3010a65485137b16d5fcc438aca5061178b478744f34b6d7300de24687ec7cab46982188b2dca11c1815e6efa6c200a5f9d11cf944fc42011fcc130548ddc5286fab8a2b96f26ffe023c033f1e0ea11412436855bbc3aecc3315bc340e750dbd21a6804ae6684bc4ddc51de1a280769c034252bb6ff2e24c51fd82d315d72f4d4f74a5b69ba7470f202564064a6bbc2ee3424663810c9e4e4ba1444b94d0a75243f956878640d379484f0fe42f452cae6d8a9f1b4df3140013025642040c35c54ddce1f003872aa243ba6e2bc7ccb7f211ed9bf5d6690d242462ed561f5e7f50e0819b9a0242ffe5e2e4da1633bf9e2624f43875b0c2e5060445156bea82c7d0b5c6e351008a03fa5400e5a4b54814ef771fb09c5b1cebc92a9353e09935170d06810db89cb1d8818f34cb0714db6011e6bf64d084588f882a46c9c4c91da5916948e41498b4f263cdca98c59d6cdedd26a77be6440f75550c42c67e017360c7eaf62db56f7137fab7c86df8c413dfcf44c69619a1e87e4fd07d346be2c04943d12fc4e0bbcc3a85a336e4a524ede466719eb92af56ccfa202b82f6b4d6b5d06964b8e6154a1c859e8c779cc0ba7db640a75cd336a8d92fa9df85bf4c8ce800fd5c110d75f857cb38258a30dadf7921a3a1317d8e8c10a2dd2807cf06ccf6673b27945db417a7a03d88b482261482858c89af25ff98591d2b1328ba7e6ba31dc1b4ab3799b10cc8538f65e94e839795f534583e2f04b0484edf69300723f3345e6d255c7d1bd02fdd3a30c854ffd5b79a64e778527ab6abb0c971b037abad5896dcef0a2be4ce7581ffff78e610eff8b0bcfe97e2954ccd5d20b1a2cadab7a8a917c51a8fc48b666c2d768b0c6a9f5a636139955b317b14944fb5582850506b8ef2f817e319c2055942f05572d3610cce119f477a70392449634d00639348a054c96aec97f7f3c6387199e85477eba22fb3e662c2555ea59971d3db4282d8c9cc26fb55b3064358aa608eb54f1e9f88a8197db215f52ff17ff7037ad84bb537eac72242319212ad58e49cc22067142e90e891c63de106cdbec2a709f5cf7998b2cfbcc9cda90fed571002fb4145a013a2f9a45918375e4dea89485b8341303407fc93b2cd1bf5b1008cd29aa1a166f678d83a84621ba781595222d4ed86103e429572d107c9acb2ea35ac9b5f887d3b14011b3419117531a2011fb4f79d2848f1afabf75d2ec2d1a30869ba4033cd248eaeb5fe417bebba46ac79b6855d4376eea9a805a756f0148644f8158d5712d853113a3d61351d47df01044007d3516589fb1d6e0f9b8a418a08a523eac2ff42593f30187c1c0bab8f9b70a069de64ceed63e18c65e1febdc96c8f051f304f077f8592f726e3f9e4723438cc4e724f7d4560a6a895b44c663251dde06e21e070c183de6441d2b620bc78f2a1d77dde987a692a52136807bd453f43607585860f949a3a28a6e8db741b0fa9da8c5b56bd4cee9e1a7408b5c4d942caacee480bebd8b7f6680181029719f033328abb3a0f6995df415434c3a94f58e4329a74ca77c3fc17794815032a9e52da9aae0fbae8e4a0a40e8a6957f4058af846798453f879d37de4c826dbdf16b52eddc503360bd7db6534a3ac3f41209130d529c2aefea27132289f95f063963c29256925176baaabcca87b57a3b40b92d7b2dfe25751f0e10a88fbd94df7c35188a185e216470508e56d4e63e1041b86c5556b6c50aa3965901c113e3c6610ebe0bf35a0f1911b0849af134932ee76cefe2fd91092c73f23981895a620a0ee4232984072bbe066f59ba77bb442e72ccfd5e721c09322790e251eb108ecb698b73056ba0dcaa119daa35eed5d6a3848a6a20a161cb99bffd1037ec909f8192a49813fe1a9c3a60841625672f4882181b6350a22e8a9d813547979c2bace2e61162ab55148bd2267d9468eb05549a76bfaff4ff5b463692394a69e09358ae981bab186e35e9f0f9af5b04660bf07c1007c1684c43a216dfe189eaff1b424ec2a564d49446c82b1b5a4d19871cb476257da3fda03887d2151d2902fa531ba926d68fc2f2bd399a0793b52f104c0405afafaa78229d963bf5b7cae3577ab73a768f5ad89b56d71905b1c20f47969f44f86223e28df0bb96de05704fd9642f8e2be38e6b74226be25bdb124fd788c7de6b0e5c6da0621f320e17c18b5dcc087bd831880e921eb16f52ef0203697ad77b02d8b5fd7e03b32558fff2c8ccf1f3c3fbc3a51274b0fe062cc18636f1c5b439760882f1a9b43875eb33657ebc48319fd2cb36b327ed730fa5d069dc6f95dd6061c022fea17a26dd09cd1c37c0dedf704385a6f44ac5a5e88bd1e306846a51cc7081c2dee9c0c8d758279a7bc2ef8ab865de5e37ad65026382531387a6136d84585173416ce1f50ab228e1516ca0415ce3d467fc302692862202b128bca63c269b6cfdffaffdca0044507e3a98f5a85ee62376162a364dca20cd1f04edad5ec9e5d7479f0341854ed59bb4953a80b94b3790a71a85d0d41fadb5cac69dcc667c2e5e36e273d192e011824cf598823075a087b7803fcc7096044fba4e4623cbb900300582e78ca30772c5cf18ac3331cc70e6075e33f4860c5d9f2a891388d383c233e749dd6f4395f6c9b9efb30d397a3b723e69b7f9c99e0f881157162753f9a2992aa0802dcb4d308adfd7277ddd79f23b92f5fb53d7a22ae4392547f8d5c660ede63f710333a43e9baabd39926285914b1fe6809323abe89831cac996bda0f7656a0a417e75254dcd05a3748266151c9d11e53f92035def8880e2497ebfb6f42f063ea17de1220027f444f536bb1d4f5e347886c7170a936e58721f211ad9846d1ef9b29e292d5f43209aed9572344dc2719260633a4ee241c0378e7b6c915c1d80301d40e721bee7a3d2aa21d94a5a0f0e3a645f7c1d01cea92e78e4716f5847f62030d79f3051c5a821cb673feb97b0199ae75a7fd77ed0be37bbd068aad790f1692f0e33078ad8811fe27eb6948adc1c57446d9741f73636f38443ca5a57237ceca7a6391e6ad9ead1b312eb282919b90437dbe4deaf75408e450c4425b2c8706b2552f61c6afed1c2addde5eca28354101d8604928d79e6934d98c846ed7920d34e3c3373de14de5d37b861ef815e6f78eefb4c44ede6e6343a957118eba066d0670a25f646dce22d9aea95f19f16baa7d23cdac441510f56be6b0ad5a434061ae24b66d98af5542750a46ddb4c6de1eb9537ae0f85f0ba9410877cab4d6503d83ab3db245d0e68bbd652152fd3026055794148d0104883f513764823518e622057e4cc9ad0d87ca89a146528e748690073c5823d768663381bb9d4b0a9609f18e55cea107046875f72a1663b9025bd78b1a948b953cec35c7ba7265b69e92650d6225b60586480d79729c2803554ac8b92a96e2c3998f0d5c5942a5bd264598d58e5f74063ce4bc753c7c7444ece542f8a107de1401f8fd4949e7086c34bc4b65ccfab8397c45e22443619e7303e1e551d9573a42cf83105e9f0afc7023609abcb2efc2c7cc9ea05ef4b9128af20454e129691427aad74fac492bd6c2a6e6419f571d40afb9deacc59ad25b9008869e5b1917b47bc7a74b4be409dfccde0e7618d169642fe74bd3799d396b01968adb25dc30976b0e55c96ddee2b1007bf5a5bfc5f21d1a9e32e131d29f382b35ff829b358d43dc4649b3d657f50f0f78a4e679a0c5c5bbee721808e9414f92d3c18017b3a087a6261617ea89d28be4b489563b727bf6e05194ee4fa76ec46e0e2ace2010b89b884dab8539b57c26fad087074b60a16c5073677a4dc3177c594a46e5f39f83b271ef8dd352b7204fe94dead678b18a7e4739a8719af2c13627add078596c5eb72e27b034abaed820e0ba597d153a77ada14e053d8ed32ef925e62c2f03fca3385c1dd34fedebcbe9d62748f151bdce6c8a0df73bffa49372e46c8ce9041a947f03ba2df81c4cbcfb34909a586eb6f9e37785fe27164cfd2cc4cfbe4e13ee941d543a4e8bbea9d5cf891f986f8182367945d7ec29a12d623858e0e92d225e25517dff8701e41279d326d5a377837b363f1157a83d97f6b0077bfcdd5072f53a95caee9aa46411efcc87466cd16fdc1cdb014f59c9760777544ba822eec3a84c83174684775430d0a437ecdfb6f02ef2d6beff2e589dd12e4a40cb98036460e20e2959a80f492405ffa0c03f6701fa70014e02ae5e0bf7a9e9318a6a39b33e3b3a9cdbc56158f4afb1154b7cd3fb41f58e1b318df117082a56202598237f17ab15bbc5319a178d2f3a8ab4e0a34f971c0e8ff804d2a10d0bf95cec268e482faf2e66b756b15d961edffa3b73cef0ee1a17f659dabee5306fd2b25fbf156b062a2d203422c6f5ba51147ff74c0b9ff6178345b88c1bc9f9249cca1d5512b0e1d224706a8174183a280b9c91e9695d496c31c01f8898da3466659c83e0da2576a3ba126e2cab475177e239814d288fa06a9e408adaf2caee2e5fa09da9bc0f2286f4ebdbbef4689e55a5d1393ec08f516484d746da409cffa8747dca56445d6dd26db5f99f8b6665d0e1e454b20d93b74906fd31122f601b9a082006c72ad6a79bdeb4aca7114b13438f1cc5aeb8d97c2d756172b1233811b04e91ed98cb6ce54f88b4bd6c108bda0836ee300802b922a71f8cfaa0814ec339e398a39ade2ec3c303d270f479ef119f966120248826b8734532fb409a77dfc243373008b103b8bc311237624e8bdd16cf6bbe05fa769d85d25eeef47636b1cc6b6fa2579b86e5988e84a2e438d5377b0a6f2142fd56a577d870cda76e91ea6a2b8c6814a4dee9cba3e3ce25056650cdf82b5ff4ba28918636489b3db78132f01ad1fffe2232a222287d86cb696cf2ea62dda12e34fdd53f41eaf543f85d3b0963329ce971446818b5ee029d4ae3a3de08d7ea896ef9c3d72887a67b4f4aef19fbf70b4e9643863234b2213d17c714b7b1459e8cb4f28848b17e2fe732386c8629a5e18b9a64bae65557a1f272c42e8a4365011b9b9f85fe5192611b037fd4e9286986e5c3b54c0ce0f26ab87c765ba598e8c39bf52f36b214363c17b5260b52c4f6886c5d3c6c07b103175370cdbe79bf53696405ece7179687bfe28cfcea9cf7279ad8b6a64b5e6b1c68bf2aedf1bfac060d43400d147a9810266c5d2bd586a26ecdf974383885db9b65939eca6db1a70d4281b31ed731c874b6eb969bed34836114c883acb03ffeba45c88f8847a754dadeae0816ddef9d69ec1f1cce3747d4730f7d58235484291d008e9f6ba92583f4304a155f253128c5f28956918f531ec72def5ae9c72e1e3fdecacec8ea4be95b644f52e84307824d89e0879db15fae36696aa77f0d3cd715da3afc2e1578ca46cf7618a07f987a0055403ae18f29cd9bbd49ee0e9dc8419d1e4b12b3ec6a3ffeb33ddfcb7b59bc201adf433aa8558995ffbe3c9f48433ef434ed4ad39ff3d830ea780df9d2880b0c970954163c414834bcac601d0ee7ae2a89ca3a8c905202561e841f3ce72da7c619e99720c6c01c80c9c80862b930d6d63e91dda6be409d8003bb7f8e49c29a8dbd887ca6b1a45c4aa3d24eb038ebdfa69e959a6654e145094eb2b68175baa4d3d29ab0c633a6df5cfbbdd98b9113351be7c43b324af17cbe611e6dadcc629eaba554c1dfe82dda67e34a103e22c39e988a10bfa933151efb11f2b5832cbbeda1191b803450609b51e4819a355842c28ca2cbc08d1b08827037fc0d1483f2fe7020daad9f228a6bb121117aa179bcad4402393dc06a341c20a337f8e0c370503e38196b815958f4f07f18cfe5609dca188acc9a1b20d00255cce18a1c086ad72413dd0ccfb1ff62f4bbca023f7145b57f4d9c602302c700817054ff84dfc4f9d31f5c543d1bb50fa7db3b50d5fd8552851c8f63bb60856b427fafcb81e64280051821103406d3eb0cc327056be11fb916874a8966efbe40510ff1d83f023b47238924bdfd90e3fb37c87c01a617f1528590838ce00440580dc95e240a0b013c9c464fb8f7dc4aa40cb1062d04a40190787fed36f7edb19b138581b0100188aaa77b3c2c8ef83391f2d1061b683337c2c94f728c472a79fd29d1f4e91843e6bc3b77e953f0e4b23ed2b26159d265b61635b7b20b0b53806eb29c2c71f05312e2082e947198337be03e6b74f517c41818ec78a3916644325b64c203e0de27f727582b786afc09d6c7b52470b790805cb7ee5fb7a7814c62a550c142c2cf2515e48398becc56424877b6b9a75844718fa815f33ddfb0fb8c2fa3981d7d9ce046540aee0719d3d4f26d3aeb2be0339ebac2978d9ececc67606f84b6f2aa1607e40520ba95194bda2b4644f29bf6d04359ea7d13d1cb6996a237701ac5e26170b5a512f7d4b668678c86e2850d475fd99a66381351f61dfa053ccbbf33d19e83c1745fc2f882f94ac33a14980a74c0db4b3631c54d40fe17c22e55b0fad37a103fac789c854fd4a5bd0062b9f609042ef454dce84d18c1f275ff23d374be4a3cc7047a7155b48c3d5f7d1bf9b4969a91b80d22c49fee63842d91ec1220e54dd2ed22851ba9bcd87d54f13eee3dfed2f4c002034908d2ea59817cff510547ecab84aacce25f2b8146fdb73b85b72db4960af70ba3e9f08f50533e1f55d0adba0c49cb18d80735015c777f76c6b32cb496089ed832f1ede8a0cdc027389bc0c0aea22df1d8a78b15911cbeed14d5e0611ef2d8cdf9a54a59139382b2c1eee7728963d46d3f9b93ca806a72a90f1eee02eb1f30fca26ce9ed73c9b446853f4d19a7cecaea031a60a2919f5e95e2b5c6955f9875c27812d18115e4050f623b26485181de0648e1e437d198e333680796b9f99e869ce2e908b56734a5992ac216b8414ca83fab521c1001c4786f975969558541f825b97cf85da5ec38c74ae9be32ae22c887186d81a314c9d09388f91a031c8257a91bc6e07d900dd9d9c16abc97c9e75a3f12d237d261c8fa26494b86d09e95cef693941b43a729058f289ec807707d6eb60890d5ce90c7e5d0622a48aacfc58d579b7969c10049bd99a402fcd78bc2f549d57a211c843d383007d0a4f0c80a52626c1ebe88dc5accbe2f0af8a493621b1c8eac653179ed57ebf3cca2c8b052775095f446e01c860486e9db89f49c16b18d53e228de02c3906a5ace7bbc2bac74fe0c3e426d4ad97c7cc071996d1f99c7312a211ee0d10cb8111836d0ee17a6cb29822428c92551206dc594ac48ae41c62c74806088acb5491bd920b390c9589981da3353011e71a0c0509815f734b88aa91661ce77f4d3bca0282e0219472fd456a0736cfb09f618098ec0a7432d0fba87ead24889b19823ae4baaacf00d52e62a1a88f207899aed890e039b47eec3508cfaabd628689d7b71294a2999af980ef79e972960750d8eb8282632d9aefb9cc1db0d51c0e3b85316685e6afb1b46bd8c52eeba4bee09c64e292bfdb1b13180ae5d4bf67211fd19375730afb09eb9d76f93ea0bef9aebbc3853cb659f9174456adbef26b217a50e72001a4d41a9b65e0094497d30bb3b57cca9a9d3e950ea5ed409a3d8ced0a974d2d8447d089755e2f15b366a393df4a41a481ceb32597abf1090a575176258220bc806994ad401a60bd288d6bbbde566d0041c4a401e024e89bf3359a8f682de6415dbf2d95eb31fe2797e7a884fc89325abc3224933329d906bbe79958658084edf74d146831d47ef7ff03a5a50ee3dc32a04402a706290fb1385f15e89941b9a958047800a805929c8657369bcf811c3b7ad89d83439be1e2f71f3996b8b89d22c48ed55776901fc04647795024befeaeec8236f7f4e75a8fb89afc104a8a5ecf55e8137162be1b82000d260602e2e72a15be8d3a8b88826901bb3e4177d856a0c4acb2447e9d14e711baa8b365148daea04feef11058711063a4f433ed786e7709f25f33d2c0cc741a110713776161f0769782989f6251d83be1bab54037821052b19b99c4508583ee011986611bdd7b0dac0935155a14577973f1e275f99dd499d66fd476cd461537657939097f389c5dc15c2a7c8248ad299997ccc3edf7b3f6defafb82abbb4bd840beb534e9258aaaa4bdd60ddcdb0db5fbc4d0d67d8f616e7e64b4bb52b489a399709fae0cdbc0153b64e50e25268d8062e62117b711135d8825b696d5b369d265b49a9ef0f71dcee82ad70c42c20b290d8533fa0b112cc17d86012a77ba1d4223990abbaa6345108f30a04eafa06fcd39311fe9a5d113bebeb493075c09663a5667adc5ac7a07fb6a04960595da44e2ca0acb0686d7ce15c73ce1e05708643de904ab52e3ebf673ba08cc46826e22cd7fd95302f5ccc8c9a1c89305d4656662af151aee2e3d4f33e1036acd3fa44643be9e2ad29a29a9a43acaaeddcf2e9f78c5b559ad1867abc267e9efdac44af2f9b0166aaa2725ab218b7ae3fbbce8476c1e335f449749d912cb609900c90f5f076565c005e1e11c2f4a108618dd51dd5815c00e4fbe16c6b8ae9a566ce7608ede8f2dcdac7bb9c9e853f0ee32341e546a2b7c7138e3271693f37bef6d156fb90bd4777bea552beb15e594810fd18768d95f603d4a57be00609ee9e1c1cdceec5d17f96796c569f9c540f035fe15fd112616f517204500f8436c7c65986540116ec3e037cd9d8913f6e7add39c980f7f4471f0527014292548265d2931b4421da674173f400ea5e8462d2a5a74b5bf2f2e28ac694b4bbbd82f120a32ee9e76b74a38ca05642c31912f607eb4e2f8154d0821d9a26a44bb848322a47ff8d5aaa54992e81271d156c81c9070408029b5a2b895c8cd3e9c38de8ab23ddd3340aa77a2b6e4f40f940c41cec536a2c28d2ce6a565b6b67f70866a19690923bd28d9a779bf6707365ac8fb8141e4570c3fd58df3ea8a89ae2b9178960b01491a68497ce5dfe03aebde6a78cdd63acdf6d623ede30f6afd5beae1d3a2137fa2482f4880318e08989d15f1491bf23c052a3e96939995a7b4a71f2db24f6bdfe33782c234d098c0dad395955133d8209246a56355a0eea5c0632c169d49a1dbd82adc0013a885d9f3415adadebebe1665cdab26502c18975e6ed6f51320bde7056fb6062027e87a88a8eafe0e57a544a649771d3db7d7b4d6cc2815398a8ec52de220e92d9234c13e63623db0631f428977bcd52b997327dfe8f96dcbb945feb4b5538d0e8a0f4d0e7f9bf783e655fc7203cdd3626033dcf88e5612ee4478d5dbb967d8c28091fad3f87aa0daf2fd4faaa10fd3e0f3931ee206485e7a64203bea16f5b4cc1b116b0455ec437cb53cc96662b9667559be8abb6787fbef409c367321ad80e31be01f92ba02dd5435198281f136f47ee2ecac3463ad58578608685a3f40607e5c79ee2e035bfb0b11144a9aa197cb701821bc6212415351fa8d73b06ab579835e108828fdf6ad7b91baf0579808f8560bcc13d0954a6fbd4a6caafd3825fda686f4c590ca7282ec485ec97d8554f0bced9966a3a8b9d1c591cb859875db1ef64a10e50db31f7c5a7addebd7a65c412396f9f91b793efa8e6a41058730bf242ec648f9acbdc582693d84e20ab73761e91f6c9ab305f90644aa74083f56a6341a68f5ebd91720bada0dea721adf92ce5ae5e3789284aae1ce16c71b9c78e11ef339a2620b4db2e6938ac28fd26995a17f5edcf021f02f03fe9b0b1085d8dee921a5d0da043698c1396842ea05daa5e7ae2a4f4b1361620069cea744a394e80dbd7d76108b09a09f3be731829c673f95145cd4158b13189ef35b48175ea811dc41a753a0510a4a66feac45e2761c6492e30d96e14f649d6e45150126d103034807c0f389c8b741e4937a4c8df3dbf7ff5fd561cb47ad9b593bf3740c20c9ad87da762b9a46ddd084a8ca49dcd4e9141d353a058820785dbc3c0da68ffd307057dd8bb9f0ec2f8a19099d238f3503cf0a4e94b398c832b6679887d430ced3b7da936569a760ca6ecb276ecdbe9d586fa9d0f4db9eb3f7d1312a2e23bf09ba4ab61aeab8b178a28573dd303fd7b97546d39ede74a820f5317b2c0ba9bff968f9c1a0c9b4796748e8ccfbef9aebb7f3039e9f9e75dc71e306c354a35bb618693debf24a9cebe4cf36f7b0bf35a758cd9e30205622efc1618a2a53d86bc203449ce9c7a700ed61dae9830acf144d4ed91dff7eac248508089acd9c1fdf28fac44451703080a33a34ba261b1fd4c0a292f811f6776ebf1020ba9f6b46dd436cc4bd9f6c5accf193f085341c019b19d9f7019f14a43577706ecdbec97db5e606d459cba473013987531dcb443f5702188f752c18e6c5aaa235d6bbc3973286158e5192bfb64d40810d3bae51bf56b499f8d11df1258101c1449ef0dad0698b6bb37eb42c0484da981fe2e38528463e4adba1e9bd8ce901d867454122ccd22521f5c681f3e11c5f1d9e4d6a5fe24875b3c8b883c7653101299b51b83959be46ef702ffc0a0a88cd321b3ddc12536106283163b22a3c4ec027ca9920a75431376459370643c3d97d47d83658c39e1171e08236b0b4c5c58287345714cd559d0768b6f31fe3cc3c194ca7652688d1a441a2d063fe9202e63b9336be69a1aa07e7ff6358871bd890daf5d6b524e5e724ee69245d21c4c85e36c4ee5f26f045d7a18e24c522e7bd7f0c473b7a725f859a806ca9e5ab79ccecb210e489d138690495c7f9de31ef8c21ee5067a80215f6eb3dcee73b5392d4045cd7260ccad4ea5617fadcbc9f4964f68a7b8cc453bc2c471437e04e0efdc8290845f480725363e20e30bd5f7010f11f8e93d49da2a4370236d900c52263ee53ef3367dc428e7b15b8029b765ca4b67f4c092483373d2422e0b7275d896b4d9524d6bbe04b3713ec2eec2b0392a5943dd2fa2f4f20114830b1c462bdad712036685f0e1155a16cc6fead4174c906e6da51db220d3e5b9fe00f472ec8f2a725f89ecbace9d932bb962d89085ddb06bc9298a70c90d0da1876aa72cbaf600fbb835c8a8827e5cdc35b673c7a2fb0300da99853fc985e9831a38e987e43164fc904564c0420ee31c29bf894a357b4608e0dbe97c8e059612ffbc3894ff688b4eda0fec58a91311486df7041670a9ad14e2b823f48eb138460683667609d01c99ee971a6285ba57269e124e57e11c89ebd6b1c7d0df495639f70e72adb6460094e0d7f04d4189031bfe4ec80e5d78a07e145e39168edbb3bdec06ae02ef17b74973ceb32d72320e5859d1754d7e551c18ca361e830e43ca8198fa92f3b5e426e32a854918b801a93837b8e73adfc41efc2a32bd6aa8a4cc21da590a966c5f9de3901771393a770d32d9924a560e1037e34edf694c8dd1cb1de7a9dbcb1c4f3ace17665e0ce40f65929039fe0e549a5fb167700b76639f60edddfdeb248ccf9ad046a37d3a1bf1238c397cd4eb32967c787f031b00905914cd21490961e6c7ed07ed96cbaf7380fdd8a4c15a70b41e5786179d88fe5b0d2843940636a36c24a6e0802ca335f2851ac275e89c9d3d89e46ea79b12deb8710e76a53e9f9c66e488d0649e44c13ca119b8e153ed1a1a0e4c34f8d02027dbc93c9be8a3d7e4ba951ab95b696a46931a183c17126e85787811928cddbf02fd6e4e311baad46e32eab0a35e519c685caf810b9bdf175231948104e0074cb6585b91e879ea22361a841d98033dad279c80b9e283553b7ffc9362998a5ef2e0abbfb1c3526d6d202a9a34d737ad5a24384249aad873012322734bb977083f45574bdbcf28e8328583129281ffd9b0ae4e2f4a32833b247320c0abaf469f2ccca03c08135c55255d434db273a1dc1d6be55ef348c2aa8e883f89c7bc0e3f2a3305dd2a05ea04e0355652407765109085193c6530cb4e9fef656c20f62b21406e2c48e467b45e6304c6ba12f800a6a29b38cb2a2c2a1c1373fd4350fd327c29bf7cb003723a7244c75106c0c4685a1107a33c36123b4d2b666c42e2903f98f16ce9cae5392812ce4f30b3dbc294eec0a208c40bb310b6d37920510899d50add62ef1bc30740f0589aa301d8f486619a2bad156005a48025134c7031ba2097f11ab7146fe07e847fb648897a11b2b3bcadaf048fc8c68f8729bb32ee9eba41947e9f381ca81d1e797112aed05263182b0174e918ba75211ab40a846262961dc343b91bfad2a5ba4bb71549c9d0c61b1f4985dce35ac4798d683fc7cead6b5e61730fbbbfca614b4600279d0f2cf4357445002b048ca8deee516517306837ce8bdd4f3cacd2c326e00e68ee7ab5ab855615d79281db7b95ec155e0c3aeb43cbeac23d91367c324e7f910dbfea234abd306b65f6828fbbeb03fc49a802cc3a51202e240da258876a6c503cc7759afac48bf0f96b408041ea84c17920914905b6d46fcd517d6e710c9562e0e5a46baae88b9062f414fd477b2b93cc606c0223dbb0654a7dd62673fa614f607c2a2ccdb182b6b931c2e410e7684db90a26c02c4d7895d96f4e8c89971bd9a3d31d259640f2c253f1dc8b837b8bd7096e70a89fadd5db15af85a9ca8c928616ee1d92c255cd4e32f0f51365af87b7224e488293276c0044309e46f20b2471092355c8d1adc28295965a3d4f46eef913a079b405846f8b804119d145ae7668b28425010025de7eef32d484a650ae9f6ad4ff4b7e52efe8971a9ba19691f3ad9bc7fc065490eccf131c8acc07cde97560736a53e66f58fa88ad27c3bc6fdb3a7980499f6c1a61460c018ebac0836368f9b2430c6e540c8576860a333889830d513cb574c4cc31790c4702afc9659360822739f2105cb67a983dca0e82af97dabc56e7c195c176830bc1e3ec55bceb24720185c3e54615306307c5473f5bc0091de28e1978618f346d5e92e025292f6575a0f20d0304c846bac02b85b1b7a1f353bfac68e57044d0731d0d8d9222c22289a4754fbfa4b9b7ac03f4524473481c905f566b3765cf03a8dded0b3652aa614028e3fd01f866263d8e3b1bf329e3f72c04abfbce90817991a19951ac0065b13b428df9d1d80b617a849e7aea2f51fdd99a92aa1671b2687d699e6d87ebd805866baac401d2d2fb3a8d1e5b7d6c56d6159ee9ea52cda1b6ac608783021bd136fddc7600a8f377fc40b026ef7ba0281e085e436dd63dd76d8d31ac9ab3358d7cc929688f9d9b15951dc80f5d42a4bb9282b54581450bac73471a6d168a74ab4deed825223a9b2851d78e37e9a991ed44493a0a64566d6506bb22a231a892ea008a66cc7057c56c174da6aaa3ca2cd5587ae070fab48a6b345b3a49768dd879cfa1852a140ad657d0acd6c4664eac513f6e3a22a65aa94a28515ab75c076775e028672b8c994e90c898f02de2311df717f5b1cbc976e75b95e71b2efc3bcde8aa575178016e65e1d5deb3d1959e7e4087d5e1cbbd003a3318dada3052a4afed9345e2d366e960961f7ed09f392e9aa3e67224985f8cdff41e6dd0e1d82f35a833e18d1c3ffeaa484958903f82467056ea2617f2050ccb7e23210253550815e56b27589e07cd75968665809fcd2cefe35cf462f277f01779810d5bc274af7dbe6bc07b320013a4728581f191c72e105a431eb22d337be47cdf619442289bcd9c56dea659c78afc4cdfe22a154abeb1fa9299a8273a6d7dd8e3c544247b9232878b128c132ed80759f157e5e7b3e97e719b9e27cc345026a2a3a004898a60149460f4dc88eb7b83f3b02c72f4277048fc47ea7711f2e92c7ae866878afb4dba5163746a586727c70e5b4a1623ce8913443243c1fc2585ce24c9e7704b733a90030235b4bea898a640f4b6f7cd065b375af032126b16812de6725fa20ab8a6d1064699ca152393208c521d80da57625401ce57c0817e640464b4038ad14a8d552098b24907baff14aa6d42caaf220cee696172a7b0bf8036993b3edf8cdf047fb6d157784da84fea6c0e72cae9f51d5ef4da519ec5732ed06876a349cb75b964a8897d0ca79e3c5adb26c99652ee2da59452a624036d083909ed08a5ab5f85ab7d7b30597d9bab7dcdd5feb6affc67ad486dc71a554bdddaacf2c9a54ad2aaca66bc3433b216fd79f23ed529ca29d3ea5e3feea959dd5bbd56ef28b386d476484d083f48dda4144f8a1a79663db33cab9c3a5fa591b52ac9948f6a2fcb82db86b4c0f259b7e06393c25746f88aa7c332663a2fca29e59329c5b21cbe9a2e915053f6941fed0034da77d01e3d7a605cc48387f770ea6c4f8fa7011e5702322e725cbe9da504f1463cf7b63d363396f3e8e1cf6f8f8b078f1d3c5ee5c1c37becf01e3c78f0f0d20e1eaf477dbec3791af2bf40e487775351b8edb5bdbdb5fb4de754b76ee58cee8cb7c7d039343935eeed32381d52120ff43049e274747040daa7067678f770feb63e3dbe0796e5c0c3791c8fcb8636edc06ec03440ba9888bf5ceca54ded341777b95888cb68cbd55e5d0c0507d1a6293ab8662947dc76d740bb93b6c340df6f4c1e5d89719412be28811a52a2e8071429caf420488e2b8ad290821b3f8cd1050ee26081182f6a406a1be8c3753e2d0d381ce8b997c1e77109c4ae1b1d853ee86298ccabce397fd0b9057a875538788c66085b83adb5eee69a192fddd59f070454c43bb13e3d3e62590e2f9f3bc7c3f56b573937657c8ea22a8a32e361853dfdbca1bbe055a2da4bb3bd244bb1217c0f3eea1ca4aad8d13c5c9bc2bf87b978636539fcc3241422f3ebd99d3919a1eb39a9394723e7cdb573d0db941136f7dc9176e78ff6e5dc79bbd7de6bcd00569603c5500ce6e8eef17b9557d494ef39e75af3ee76559e93baf1ab64c3e832368c31bb4a1535f9c9861edde51236ad431dbe6bd3959bd5f7ce890b0177ba3edcf62d3e1b488641d660ca8759a0ebbe0d1d71e59b05e2362f2d41258cd5ca2cf0f34d37e1e4cbcaa0c8e0e56bcd9f409b033577ccef2ab57b4f28a7a68ceebd7eeeb9e990c0699f37ebdc6531824e2184108a376786fce4e19bec25c95e8aeca5c7b03936c2ee987da8677f489c736b7fec6c69a09e9bb3320934c6e6641726ba59ad94dbaac69ac432f6e78422df4608f0ad9df7eb2be3926b1d9fbcfb96c112d5bc344bb27909b6fe79f2dd3fee764ef3187be2bb9a0fe5a245e2fc7ddb76687dfa7ace9686e9288b04e71b6b4d88c31ec5b10bb53bbcd983b3469a1a1fbd45027c6c4ba2438fd87c6d6a5b68233920d40728403bc0a27a9f9aa5403b590c05d5dbe9542ba51240720370b74d3f5c2a2b5b234f52509d2a8c80921a7b90d56d91a646913654840033c953f5ca92fc745ad51723334f4787e4e7b53d325ed3055d764aa91eeadde1b66f275b9bd3712729a164f249faef559e51d32be9254a7aa9a597a68c3f4ffef1c7079f4bbef89ff581b55e59dae9556a77d29d2dd2869e002ffdd923958c2e9f358203ddecea09d4f6709f33ede893fa29b1874d135019325a1a810ccfa33fa03df518b125d4dfc8aee0424f02a7d32ba39c49f5d429e56c8db435a650e2cb0c6d8d2994f8e2e9b348aaa72a67914c77b1aa3cc64863f5e465cf33e8d9f4ea2a41ac48f5a58915a94a32569564e99192cefacccabdf4ca5d9288551492e99dd399047e4a2820750928b52f51bd7a7bd565d263493eee272fb359a2cf4bd5f312f5bc341f4bee187d1e663300658c121573c27a7d107a6906b75e4f58afcef60150fe0d206b5e6230a5b7f49627a01ce18b1c3eb8e1c58a03aab77d00140cb4e680da39f811448c042d60e1bcddc0276f54afb7732caf36d1a1d7cbba4ab15a4f3e56875766ddba4ab67a89562f55d54b54b57e9e7cb4a2ffb838b251ee92ea6fc9f4ecb96c36ab58c65f9ff4c0654e59a0a7a03a591f1801256af0f1658d2994f8b2c614544ecef66079b8d59d1adfc4df2ea9cd72cbf2677bac8cbdc414b4ae1f379fbce554bd32ea59e55974789528e5a58af252a4bcc414b4ae9f276fa1b56eb1d291da9f558fd579dac27e38c95becb3ea9567fc4b66167d62cf797a4e2815c728d08a7a55512f38a0f292aab172677b2a9bcfac53fbf5c95b77d79565cf33cb1b2b527da9951e56a47a6e429cbb7f1e67a7ffb89f745287d6473ac5b291bfd684586f4d88e5f41a61d69551871e33eacf5b4f468b506faf57741eb76462251fe9cf324c43012f706001cddb06cef8e6ad0368e8e0d989d0831c40b8000e2b824e74d4f1841b619ce005114df0c24940a9019632a400430935a6a0828b189ebdb1cf212287c5f3408b144d1421471b5f9c501085873a84acd042032e809edb5017579e31275c009cf75cb71d3eb86de8082a9f918e90f2d924fdf09b5292e9ed9534d089f22b659e7e20729a2e659e288afabcaa7689809a5e02ca0f40c57e6fc0d0cddc8db949bf93fea0a9a459ca3c4d6f6d27687ae65cca465d990e32465ee2a4ff61d36ba69226749a6f09da5ace7bae61e8d684df49bfd7ad357fcd1e6120a026f40d732af8e2b0527882f004f09b2861e83452dcb018671e5e250858af5e83ad94caf85e51a0bc8bde4ead1540fa647ff56a27ea2ecaa1f53980b31685519e31c6e94e6633bdb244ac418161d076532dac943651c2d269bd9a8fccafb2d6cb6258085e0d1666bd067741cafd69645a9887728272ea28d5af8b62dd0522ee4f2373a2d4c953cd487f805aaf2caeccab579619640609726302125b76f7b4b4d62b4bd5f206b4d940af2c52fa91f79553d95c614ba0bb875d1fe793c3437654b6a72805afcae915854a6fad00b7732a1b327ea6549ea8192b4b832b53c6bd27e995853ee91945757705ad89cdd63cb911a108da9c4e969725fabb9ad0781d81df4a981b10d84e7dd72025cb0f915fe2c4fd74d34339514e7fb8cc535714ca7fc8f243e49db80244efcbf1672970d6a7e6656b0dad89e1d02f190848be275f16f91c46050723e7143e2c83f2ed197c471cfa92b6d3be093982b61b18238c2ea343189dca0a9fa4a1f290f667eb1bb7e1f48c9a0e2f7e4a5538dbb3a2bbd755d05681db7c1085cc43ef9cee0b6b8be44983ef7acad68670f6e41114fcf3e9f3def9204a98b646a0044022d08c95748a925489b1a0ea708e36399c8b48bb24f684c29ab8900c1cd3c66d7f0ec7b4e93d306e06c7bc7326148ee99cd211e67ec75890143f4de9b35ba74f2d6b5e8ad0ffe1327186d691508626d3769ebb07aff67c85e768e59b0b2988505ecf3ac6fc8c8f4ba5edec78603e2cbb8d719b7a5a175754f1ad8b2b843e9b4f7dfcac7e73c1cd98a8094139512f311151187a3118eb599454a64aa85b5a8928652d6d1abae2e50df06de88a114f5dad84c4b436bde7a45c6993b33e4ca0c3b7247ae5f209662b28be48a8aec8437848ceece9ef4b9bba78e1e72b5dbc705013d2fe9861c8f8e1129f97923625893c846f1c9783be3d63def24dc3e321ec108b3c849d8915cc2cc4425644cfd80ae6e23ccd448d61e03132279fb1c322ecd3795cc58183a8b3154e8762dca5b98b1556389d776a67a1188fe8f28d03136c0821087528e1061aa74642c40f8a28820fa488e284533b13b5b3962d5cf40dc46de7a0b6238588a8759a13d2e0319d43471a523aca9426c27c569fc3f01c0de44e594b61295cc5142b4d80e12a3da4309831ce5a989b3da7f3da18aa6bb030cb25ec502261874e1d4666ac8a794f407ffea2cf29a57c0f5b02b1f9dc734920e20c1b22a13259282e86aca0d156baf89a6f4356b648411bdbe0b6212684e85d029db1eafcf9982083efda6b421e96b15bc22cb8f7a13cc4da8f29e7e4c9524a296105e59450fac4247ce9ef9748aced34ccb5881d291d29f93c20a07f24b81fd049e79c73ce39e79c73123ae72084f0b5e7d19fc3779e9de0dd7b29e3053f0ca5a4ce291dc1b2e88d958eb80d94ef1e62c2ca4b7ff0ef92e88ddd5abf394b67eb63827f2ef95f13025b834b1e46f202864207e1334da902861518b4003e77311185df8b3a446e706280416d445aa47c56877af0440f311144d37484af0dc5a0e8bb877a00f45ddf7bcf5df6c803dae19d67586b3eec2c0d2e0efadef5196f3e73cd06e4b6b33f1d7e1e993f9f75f58f2e6ea6eaf00447e053a7b1b5739685f134b597d54ccf694010df4ddb84bc8a6556938fcdb555515866ff8de07b36d3f3ea643a9b5ec3ac7e5544e718639c3f3008fdc5185f8c4ec6379d1959700163bd58e39561bd780187480c3660c0c0872d42785edc0b23238482a408e20836720083262c218c319cf083239a8892c48d12747d4104a48648c25130ca0a282fc8504b2011d12eda171dd4c145cc1757741192c201845023066cf82045962a6ef0a6088017517c784580ef0dfa9e60bd1e924069d1031a0ba01c20c30c33096f016c7c939c6403c6bf2f4844140c6d4bda3d865ba4db9f3b81320d768ed3f807a5999940df7bd399a0bad28494211f0c01610744627085ca0e415e60c0860f860049c1084b08434a1a5d382f027803880719f840892f4ea02202265c300516357020e607cf8b2028d1822644c95287eba28159a28bda083c4df841095158e1a28332929459830c2ab008117406172088e3092bd882065b4c210a433f20c21b5f68a9c11969c0408946d4c5882ce8f8e18a28488c110605a4b0c11238b0011852b874a1a38b153f0c81043692d0628b1b2b8a30f40327ae18821a0d8c3096d8024b901a58b610c013a860820cca88028d2f5a94c0091ea610850f3f8001930511a8400298a02f430811c71245a0f8e20a31ca08e3092d0dcc162220810e20c06029c30915b5210331c6d47106143d786d14a145085a5c91a28d257698810b9ad00229ace0e14484105db060826807301c0f0ca0441551c0c11276400508b7031faa0114a82c4185139ea0841bb17551250baea2857f1baad2c457df86aa2401a938e7b0f66e1be75c7715ee9c13f87a0b9b96f3da39e798b9fd4187b0391e44f0af6b769f79360dde7bd573ce357c0f3ec7cdc5dd06e50a6e3b5ba1d252fecd00e57d14e132af1123344d9c78d538b116e37365406ef5c783a427a5431b292bfc9cfa3af223020c9586017bd8ad3c846d1ac2ee76f172024997793829fa2239200e5bc264dcec7d93c1ee4113847e65251ffec9c263dfda0adfda1037abd0ab1910b6e610420899d838e7dc18cffb31fbe3c78f1f3f7e0fbe36021b8d1b5f9705d7a393978509c6fc9bf2cda3164ce094387c7871b3f9368f54db741923b536f19db575780778838dff831062d5dd36c5cb09fc57df73cebd87351bb435185e3fda1dfb317737773712865e10c4b7a125b07cd6888694a0e3819e1f0c33b32988ab2189122554996b43e7b027e91c1d063a31e3bcd033744e4b23bbc96268ee4a5b202ebb75caa4c66cad8a9273f2688e66467384958ebc3b294d0bbe428db39063e3cd2f6f3e43e7cc8c8ad88b62aaaa86a06d479b62c414d3c88330ebd705e7e9a09b2000389d5e5dd25bb882309f57900b5eaf2000b85f4137be820b7e01c059b8692b4bc1cbb74b90df8ed08444b77200e00a13bf591b7bd9c071b38e7273d5600cc62a025a6b6d122544103e8dd2118921da1e2bc30c5e1af23840888c1e22e468341adda00130a31747a3d1c814c404e768341ad560031914458d463e1ae1bc80834597b687067381ddc1227032263a4afa4182d6034cc25094e5371e2d83a175070345b17cf657573fa564cf4829d4e1492323254561590e6f4d5aedbb36774a49e9652d660d21abbdac1bb70dbd80ccb7212eb63c3f9db26374ebd6a1edb1f36229313ab5e6a4d4b4284ab9f5677bec9c1435298aa2e674cb29cba2cfc1b62c66b5e05b4adba9a295cc14c5d78f631e59abe21f37ed45513c4d5114d543955cc83921caad10f7496d27637b556f81c6a97ecc9b6dd2737d045c53eb7594ce49a94f29e7acaa49c917b9d0566165a55b232da80da386d2191aa736b585169ca7a99edb53e3d4adabc7a6c9cb8aa156c52e2643c4c3230ff73aaf20cc29c644904a314ef826460cb562eea5a1719eb6df86b808e3291fced3232d48626efc36c405971efc74852a2feb36d6487fc9da313e58a05328b9bcec1c2a5cfc2bfcf0abe09447bd2e0e6353ad122c5bfd45b1f14b3a0b3545dc4b2ea1465e23afecc5788ed1c56088685c9cd1c2257d85abc6f6d0600cc60535f2b26fdcf96da8ca166f5dfc148dbc6654b03d3e2efe196bca95de420f5b84df8753158678177cd81f7e92d5822b9d6facc46c10f7ddfe70fbb0c20e78050b2d5579b59436c5284d48f40ae87218cf3a4a917e0673711a6d8a5eba7277780b33d10a146d0a45b0a74eab8bbada4be9d3f648165670ca57606185d211aab2d8dd0fe7773fa8e51656e594f4622a5f0aa2f2c36f3995d4a90bb5ba28ca9f6bce514c5a57fbd4d238d2828da29fcefac93357ce8bba774429ad75524a6beabcfa27753aa7539b49fb672e6729a555ad5a41586153d2d12531aeab758e99ceb9f6dc058aad8d9cb6e7ea68e43c2d2f3b44bd4c6d627b317fc1986f3fad6a6b45599665c93abaa453554a697ba4d3aada911c5dd2efd57e749db4aa55af5358efd5469715732f552f93edb998dfb429ba15c4957654ab48f9667b6eb5d777d069556bafcb2dc47079ead20523ae7c8a99da148bf45bce9eb965afd359d558d5aa344e394d0d4dadd5da5a2b465367ec7549a7a5b959fd51f5aa8e4623ab5a75e4948f6a6a463e1ab1936ccfa81a71f96c08b76ed2aa56e546e1a820447b5609f7ede8f71a427795e28f7b29a17beee7c9977ca8c7e87456e9dcbb7edc978ec0e81456ecfc95f5e9f18c6539504a7d76ce6b42daf6bc26846bbbe99c944e4a29a353e728d316e8004c7bbb69d2bb9a5d7f81a4032eeffc8723dd76298d0891183ac755b9ffc4f8acbe0d637a3a00faf79e3f334c5c05165ebedd6603ada4c4cd5e5fcef6b804dce6ed6aef98cfa0ec364cbb307e088b2bed887a08092d28684ce0149742830db6f7bcb5065b83104208636bad41302d4629a38cafb586b5385a6bade9b015cfcf3fe4e5a1436c3aac87ae50eed6167bb9828ebf9d037dcb43aff01e69df615a01c68a31bff354887db6e7a77f6299bdb214bccd469002ca1f569dba5a1352b1ccba735b2d610c077ef648ff9c0ef419758864e72956fd03a2b42bdbaac86c4d0857143674c5947f3e87aeb0f2d6ab8bbabd8eec7ce593ce678b4c7f259f379d6259f3d38c7a36dd517a496f6d6709939daf3010ec7ce515d6a4722773ce2684f2495d2ca14c8650b85c80bebd5d5b7c797609d0f6eddde0649a9d0c6551c54b0fbac818a48ca1755ab06243e7bc7f55ccf16a1b238df6868c90e4ef55293a3dfff1185a646eb34a5e95a22a45a76695b410728004d0a99d3b1a7419b7c7b7a124902893c40e7d834bfa3684849866e2da7c1b4242085cdc1ddf869010c2a9c2cb2bf3b6a0f035d71a6750fe5da1b3765f704aaaaf2763d5977bd8f4a5854622bb2d40a0624c182aba402a862882ca0ca61831440595218a08d343c594a1249030940335c498463910e3b9e639088e9b440823e7b39b299c78e7cfb929e678b7e58b7739a862ca9161fe7dc13c7be2fc6b6d87141cc7fc2283232cae8670d0c43ba79a1c68781912c38b2bd610a399046105708c79410f3c18e3d424309ae012c5cd4c26a71385b07262c7e9e685101a53804eec35389dc87e43e74c1210d0296b445214399f5e7cb03af216f881209820c4841bf4400575d88891041c5d30418b26f88004041a8c616332914cefc4afe2e17f480a1fdef9eb9c21ef261843e892e50a11b294b141106e10c50dca68d9e21b0708d714a4a8089ffdf8ec26080d80bebd7d5e1a6cf1ed24266a00856f3761e14196242e114efb8a003cbdeed6ddba47426daab43820140f3783542a2d532015a70301787a588b55dcfeacaab668693b34abb4bc90d361c2441760c6c851841c6d9cd82b2f4e670044b8824b1d5cb841e58a137ba5a5b282a888c679dd1d43dc4c3e476fd3390a5e8bf141263548fa743a12b3c121e226d976d8e1b840b8140cd3d1845cfff8e2cc3f54b8521ac22bc33ca93d25042b4a3ac8886f1f9572f5a6bd04fdb9ff9d49e2f2a87081b859b55f2e7ff33be7accdab1b695e1dca534f2edacdba0b4a851980877ce983ac5fa763b19b06d2de378975e884eb0ec5063c6ce184942ee0286207a7056021a5082184d18324e238b5f3c8602f1ed78ed34ea4dd4db4aba269f37cc618e85c4ed6884a3ed0a12072d239ee070f9d56d59c8f346f92e73c1d544a02695c00e2b653667a38f28cc8df8bc669a859517352675899152583294c51143543735d5ac971a7f70749f1538d53a7afaab3aab5fa024c9d551442b0aa625567556b85e5073eaeccc127e87556592b7ae8be3c742aabaa7223fc95a5a1f25291f796d7a7164a815e5da524345e39cec72ad76237b4894809cdc5522eee0285eb4e2748d11458141104279400c609ba0e4e47062e74acd1c411b62411c409fa0dd03d00bdb56695d0f8c59e947670a2f166b9b00111d06926a8c66d00034c1464288aa2b8564262d87aa04d306a79ca69d8b895499ba006a85b79cd75cbd0f1f7e2201a086c60a4e450b2483f8531148249bc289980f3196f76024fc9c867b0273bb0f042e874bda13146a8ef35e3a38bc6a92b8215321ec54533b8d2d60897f99e19ca4b93b9507352add3cc98c2538c80565a073a5fe91c2c9006f609faaca81ba06b000ec960cc4367d2394c546133b409d25c74c609185c96d2394e8619aa093cbfce76024ec98c5fec49e5729a71b64a687c843d5140165d844e3434d7c867aeebafb947394fcb0065e81c2aa772ea7aed74af769252a0917626aa9a8528b648e2cbbbf06d0b248abefb878393c70e7709fbf325943376f3b02514cfb7bcb585654c9c3ce51c1fc5b239fd5d4bd8a3c7c83c2443c1b3371e929da0099467be32eaa74b2cab4fb5cf1ec523ca1fc3509df2c8305ca77cb61deb94536d670710f7790f4131e507f06de889342c0d344efdcaa8dbb4e91ee1b257a738f0b3df4a436968ac26c23437887c7c3b93278abe5d044e682c4afba91be9a717080808a74dcf3353c972eaedeb55b22acdad3434b50d229a5b9fa0f2ed2fd45add087f75cef6307d2260c34abb0ef481f9f61798996f6e9e57af3e6be7d078adfea35e3759dcead98f77ec868691d3b87515b1905caf334e5bcfd438a9719ed6696b6869575243ebf0f0f61b3440f3ed4c74681d776adf6153630a8263c4b7bfd0869cd0f24d54535353532fcbc278da4483d1e05c41accb4443d99e19a7f19aab6439bfe53357c9f2f6752648c99ac178da4403657fb8cc1504a74dcc33c7ad472ca78df120e1b23f8cfa8f2b53c688f49b363d765610f7619969362194d78b6a4228e7ebf110cae91579c8741e5775654caadb21e6b6f63c2df8e13725e8efe17bd77b0cc04a1033e1b4a9dfbbab25a98147069be63114adbc7bad83d353cb4f1dd9886c8f18b6b0a84daeb58660fa8264b4698cd73a4d884658f4ce6d48633410e7cd92c2b8191c630c4846e7c039baa8752019370608378369c0343a27ccacfc79a39c3a94937c64b49d1dff1c5e794fcb5f708c0b5a04b1c51a57b2a0833a07215b16dc6cc89796b86d280e23de0555a7b0c9ea2ecbc6cd86546f273d2b88fa754066943a282ac297222e9f3534dc9343fcf8d13926933b8974eff387d9fc00c386d4a66e92a94d7daa7caaf60937aba7f6d4112e2c9fb5f0ed9736e72c235c7e6e24e9a4748f995f74eff18bfe73b6289d94324a292147ec8bd7b321f62264cf8aaec3dab379ae813c7ffd6c5e84ede6d5c10439a63be754ecd9a6e98ea29c369b9ab043efcb097f3bf439a1cf253312e91c88e47a8891dca7945246be74ce393d9b48964c3821f4d9a608638c31c410e1ec1be3102e4551d86d539c737e83bd0335e7743aa49a18d454b91e3dfa8fce991e2b2c52734aac62238efa03da6c78de747c7b954510ef1f7dee54b3f2ca29d3763571c22f297549e85c5ce2de78e811c9f5d179dc9cf78e604e36f2ac857723cf7abc1b79cb89eeae67fdeeba73d91c9651147cc19ddfda84401f8d79e1b3faf0059eb6e31cba073ed0769e431ab73c7a8906f3313d8dd36041da647dc6a1c760679bac5b666ea185e76cf27413fe7b35e1cf6a36dfbab2f716ab8ebd91bc25fdfcbdf7ea1c3727abf57a6d7acd590d87702b871526dd37d83b70733a3c0d04d6c4e0b2d754b959ab0c033f8f03a6c481bf8db13c78e33d212c6fcdb84342507cf61ea7a947a12f0fa3b59c853ec399f13e6394aa413ae7b911ffcadb84c3cfe8d9655f19ce3b9c1864507203131da24ca972658bd017323a270d6a5d51b2d0a6d2fa54de58867d745bd9d0a7ecbd4d8c58acb5215974f6691f147cf4209d432ba7984f15b9d09eed187a7b3edc1ed9d4a61fcf92dab8d9cdbb0f8299b00c872854f41a0da37f14f6c3410ad084b8e7f17a2143c13f6f382fb8d90db731540dd87b5a6061851f25157c907af0d861534333734796adb4a2a68cf0b96e410e6328dd7dc66beefc02ee98b1d08680fbbcb18d6ef2738b1c23738ceecae28dcf46ff6c111f1f63c4b21cbee3a0ed86ab65eb25720f06cba97c23cb56cc5ccd3927555d2cedc8a9ab677a751969499c8e0e73cecb0a41751d59d6c15955ca29ac125a24336534364213129de6e2222af1fabd7e3dbb360a977dca8ba6352a641a1532546835536bb34728cfd4db39149d5f532b29e79c92fa9c4ed5e9a5d1f49235bd642795544a1e3392ce28e954a15e472795cf00966bd6870fead20adb228dc494377d1b2262cb531e334ea9cf29294a5da56a598aa2241dcdcb3d5b234d0a2f25d64f47d4475e73f1573bdcc66d3a67079641f91d3b8c406185354e5f1d5dd4a9acd2353779cec97ce346cee3aa8bf21d3647e8089b3d3d3c5d73b10ddb1ec96e25665570b9a293721a6bcdd5bef23a6d8aeefce11ff91219b15c697b244fdb237b540a1f6438fb5d5606450632bec89163640680f5935a745e39e36c8d3480c84b33b567328aaa3f1b4853bd8e2c3be394cfd0cc8c463695a23b662a12ca2baf6c4f656bb5239f979176519ec4e9b0150e48f47849564a674b5df2a4d4c5456dfa69a638baf845d039d62315e7a4ed501e49d6c545e021d1ed159d9a3f44c773194d0895237cf4c850c848623ebac4a830194d8885c2cd1a191d9eb41dfe91b5ec4ca5459f711907749b0051d0761329cf9a16dfba7cd6b2f8968002489303d23b1c3de0807821e221268a6544702a2cc33199dc490ecb48dd85bbf010969784965dc68be70ce380300c0d050f692782836332b993485d6274c91ca6dd4d261c1c37c545d1749a94c5bd428a6f7753da49f73e37c5b9a00d699f972ba299da1b0a86a1bff0904ee2dbbf7c3b14ef6e406226b0a0ef31539a103adc941deeda5cd74f29096785d26f9ca230ca369626846d4f636942dacda8b773a04fdb03493f6484585f21723a8e0806d2be04194e80794783300c8ff8f6d6a2447f61181c113ca45d0a2f517cbb26bedb1901047859379c0bdc94be32e5b15811cb670e8c191a7644581d9dd3e0e45879b602f3a8d6b3f8cdb9ed5097d97bac470f58c1393956b001a128eac7539e3140520e2fd7865058463957d0b9aa20e50c678eab6685319c932586f39121c3c738ad6a99039c5b9b9028e004dd19dfa19ef5c3303d7330a35ebe679b701370339392229c315c107430e66db000c3c003294f794fa7636af75ca4851e5c191806e83d83c98ddef935f972cdd48650deda908cfdd1c04f61494a665cc69af83b97dfac1102fc4f2b53c7c30c7be7b3090ef12977d2cf80a730befa3d0948ef84f4f048137aee309c20455a17a01e5e094d148a6c906186249dd313315390295ce79969060eea5cfaab6816a9c9d1410bc75d47720ec87bef5128a594ecf0ea794eef9cd746b7435cc74fdad496adc1e1e040fe203b813e594c071bc7cd1a910918483b0fdf2cf8268389f8f647861b2568425a8726a4dd92b959234aa2a487d476a473f7822aef1ab674fe96ccb477983174c51bdf86ae28fa8cc8d0155ab87079e77d958cb8cdf6d030ee7353109cf6dab86d88cb97cf883c0e1c03911774f8d4596bcd1f66d3267e87dd98719bc7761809bb6ed3a4093d0efd4d70980fdd49fcfee89c3ffa30e021f6d3ca94f9871d39630a0f69df3b0da04c92ad49795bcbae52a5d494b259692d563a12a7f479498f33e339259c82cdf47a3ba79a2e298acaee55bab6d2585196fbac46d32565dbb8ed9b1662d0f1366d82b74dd025b4467cf8f8b0dc72cb9a981de2368fd44ef5c615236d51e51b4579ac3cc619e9bb4ab6522ace26e7aca6d3d9aa0a9356148fed1c8edb4efbaf8a9ebb9ef7981f33f37bd02fa95eee803421555ce98e9f8d11c68a9a12c6c7b246cfa4f44bb1a561e27c662387705b62de3a7c9ad6a3ef5153c25755b4aa2074861073d4940e4208bd3d5fd0e17b0f005696034ed55614fe9609d74dffa15b3e3a44b48498b2babaab25d3291aa653dea294755acae545399d9352ab5a95a297bc2ca7b3c76f848816280b194d095f5d25ebed8d48a71ea7f3c7d99050acc7be80cbcf221da19da8442d77744d2b15aa1109000000d3144000180c0c878422b1502c1ccbc2680f14800e87a2466c449a480325886114859031c81043000100200032333313074082aacb7a8120dd7fdc6eaa563fdcc6ce6b6845930912be5b163161b2112e8c72f8fb09f48055282d4479201e807cafc8f80dfdfa8ce691debda618239477f686da7a7147401a52f21697104e330b3d21c3627d2d384c0bd2f901c100bf7fe3cd84dff705f71d4cb218a845093143631e44460aadfac57fafde631761d93841c749766099f38ac4c224dec7ff61721d133eab7363bf5d5f9718db2c98a6c64ff52b78d5c8fd4749c7b9227d08062d9fe84937a8073dfc0b8dc76eac378b8b8eedac579cc61e94de86b59c3ce4646d60978ba4f1560df665af05499a12a5d27a75c5102fa83dfff31fca7b9b5fdee6cc036fcd3f15dfb258c787cf0331cbe42426cc29e684db8f3b646c5eda6096a39c0f3ed9bed3d40b9b7fde2343db117e6e1e294031743b0347ee0a45a13647253ed5030da83f33b812449a6b3aac94738810d400f4b0ffa579b02e7e7d11e6e1a43fc36fb74d67f8e3aae42390302a5caa57e173fbd5a7b7281e0770becc9dd1fdb0684038bbb114887c81bb31eaaa0de42f95b539373b273d04986d90b00aa378716d39949f41b51906dd9c565380850d3427b3587c7010e35b6898e4fcba760dab170089939d0cf5ad1e64a55fd690c45cbac00ba1fca74ad2aaeb95c2bafe3e9ad7af9a7d42d4cad059d8945a5d27c9829a419af880173e63c150ba6e102466a1be506a962e33da37226d7ea8cc4b8446f7c80ea02ff716040cb2ef2555f29abd42c182130cb69f0673f4bbc131aef3656bf3d63adb3552e9ee31b3a7586d521cc9eca1528004780520e1f4c71904a427a32af6c3a762d3858945ce07bbead1bc0dc4001328bce82f9306504a799735295cc7ff5f2efd2e1eedd0de6cb4070e8c9975fb5521063be8532b79f1a24016fb871b2e9a04067c93a2ea52e8db66feb99aaceef77766bef6cf5a03301e16cb6bd12eaff7093f188183dc6be372f092ce44123d187e7c28e7fbf5087f50d22d69dee14627d7d68bfa54ad522ee40bd7292afef63fd2ad6c278209e0dc43697bcfc5c8c4bfc5d1b00514c77290bd2d8c08d1f2a0779f898acc61e21d0f434feb6a6f884f3497df01ee3ce5f2ab09dfab0117057b49905045098bf9a66a780445c70b800de498c551b9f5f0255a36612780a562797f89cba05a185197741d2f0894d59bc01b0e20b8dd76c8c86e3b7205f37487bae80c921bf1fbd475f88835ff7b4910c068279ce80c02ed402bd6fcd1bd85c746df3c0f3a8f4c9943a0d57676010fc58b7ee04b6fc94c002393352314904368767b1c2f735bf1c32cd56176050ea2d9ad4ae860ec8ddc46656f874f98e9042726ef50dc0e997e08bbf94fb26b091209cc48fe52ded19a39995c8bd5ca0a1a20d585aa648975ba0aea32a9c8f118e1a60e5f6d8d9e1e308d3a6637bb2a92f0267fb715d9e9dc77f3aa68bb4cb2515343d1b701fce5ec13cd1e159fb4b13791f66e96fb1bd4e664e408e85b0c3b3f87ff001e4b7d795e83397a3a2b1eaef7a2291e0c7628e6c96d68fcf3199f2e954dbcf66a4b85b76c2e51b5876ae39b84f2f771310dfabcbfca13c8f7630bbb5294960e41598b3105d04c8bddf9beeb12cb5da0d0931ab2e95d7d5202c5701327e5ab6ace53cf02d2cf246f9a8c8a6edb3569028a778579b9fecb5abcd21931884f30c3e4c528ca3f3c29c2b4b4075cc8cd79c5684a8f95ee810c5e6cbf9b763832b121a5914ba034fd9a5e8c94fcdd404bc4075f110c7e505e420e286ec43f3049e0c30255b88d3160a6de220832a4aed034f4e87c8a6abcf3a540a7c837af1ea0f3caf42fee7445529332b41069ee9610de8c8c8328b560e165e64aa4159177bab41249240f70d7bf288a8f0304cfe364fca90134118b66e4959214365e7141042e192098f1f3c7f03b38f55fc04ddd8c27edbcda9ec69cabea71f6249d0e974fb5fa5e51ead00de30dc2b9200424f531ec23fd5990ea33469fda5dc5af3ff860bea3e1e19d5154513cdde7ae1abb675f1257e892cfdd21c4a1127bbcc97c12745bf6f4ed375499970cb884e932cca3c5b9a4cb322da6cf422b8d3f458950f6092b72a0fd79f51b5f4d6f71829a50b41011b5cd88b39d8281b7c1a8ead271ef7cb57650bca3cc48c6c703a032dbb240e39b8b8ead9de0f72efcee8f3096bae49468ef3436d95e38c613dc918b97c412da91826b9bd7d2e6474c1479f192803b41cb0c050565c087b691d2705847a48b83d5a82ac5890839f75d55fd41481279983729a49bc7213392e19d1f7029059e658380f25294d63d1b83a2d749cd6897f588910dca2ec242734387a0a964c18992e373a7cb9e3fd560427bb7b436181d357f701102da40dd7e9d4015dcfcf8df4dd72778fb0f0f338d57b492e9df5df0c1b3dad3090e70981aa949468add80b4da59e1dbdd2255bd8f12e73e2844329160c7d593e8f8c1e345083e5ce0893b89a4a3b98e524aa33d65c1ed38dee78256418c2ee877831923754c6e93a2a4734d2637a5c50db5ca8978c5ff68234bb891d4928ee1a4cad0ae3f7d0be599ddd70ba6d8b03b1a89787875a3eef7b7e6a665d04b32539e9f03f60939c9f7b2a0499393bd254d3624298f8734db03bcbcff74a8201b09cef153d041b95543daa6ebdd3fba6436c6cf92449e3646d25a09987c928ba51fa334fa09119a4428b152623e39c69706e1e1d686b470bb9599f0a18a81341b6a0d5e3760e3a0bac5163f2f4cd271b8db7a29912b16381aafadf456af3612c0188f368e12618c46b80330f42c360c0d4bd8d7aa736c6dc00b3b0a072074a2571f22324393fbabb93709b3a75b5c1b8990bb4c1bd2794dd03834fcdc44714ffd45713848c6f5568755bc7bcba928b1e749af320cd8542e2494ad65d84a7f1cde95b35f8796756fc2d10afccb58f94acf358f1904b5246f0e8233000741ccb31c908d8e48083ef890074d02fbf9d02b78a6304c33248e7375b955b780b9c4ab41b545ccf35486a345c9c98dc91e17ced23d081b1e756e34f29f0e917ab7d8633aaa6e841a0169f6d41a400f8e8fb8709c10b3bebfeccfe28c443732ac4800d10ecd8bc8bad2a0a109323c2fef5cc0d3881388f5c5d9b5d0aa771592974daf68f776126a6f39da9140fa86ea22261c0358c6461a860bc35becd4aa3bf21c556381e84c8d12ddaec92e9eb59c5ce7cc42db570fb7c3e5de74d1a0512ab26a2a3e81bc5e8ad4f905923c586ef633a1a2ba3ddc8fd0a84c5145c9c1b932beb5b486ba097e18ac923252f331c9444de7bf0965b955465ad7e984f70754d2b279d34a22718a01dcb7b45c6b95d567138fafcb26259d10d57217c69dc8586accef89dde209db011dc7eb635fc11283b682b897da03a04e89fb201b3d974c879d223a8562d7956cfc8aef9f179c7c45a672f3d42ff06d670f98be3efc5e7263fe563a78e36c2df79eae299d9ef4665e6f547a679db5cfcf1a9f2363142037eab413aa22d6ac597a7c504223a652922e6e53f5cc8b503fb71341cd7f6ff37a2d1df10ca5df9b9b03a531df6254154fae276f9989266ea175a6e77adb3b5ba9cac07b70e01396d43dbfec83845f1de43715b91e122949201e53929da0d63d8acd0c59d1d225977b9bc9e38e6617f41b3b818a2984b1ada1780bb8026daf30d31580df70aedb03fac8d8dc79957e6c2d0e65945792bac4608ca109553c70b85985e426feee50dc42484a235c4931b0795041e1c7ada3b22c0e6800f413524307093461cdc6c93389e1d50cc8023000a613a17fd04f455b6af7f9abaf7d47079c223e81698ced8ef39b1f8439c07e4c55269dbd337c3ce5faecc9090f20be89ab8936ef5a207d8910cdbfbf03510aea283de90e95f0c16301b3558384f01cdbb907654271758e0265cc7ec83fa043f2bb91787a7978e11deadde6aa29b76bd3c368e40ffb1ff579af9a1ed8f77b2ff00d14e3578c1bc81d52b699d281833b5035683ab0d2bd1b0a8d7f966f8bdde052d2b00d6e405fe80a4cb99c5d89a973441239c7cd4b4313c4630d7fb37d207b171b5093389f2d1ca95aebe4a93e4647d9d7442c2b99befcf172804a5bb8ead74d33a8e201881eac953022928514d8b5f7d73b312770f5249044fb75a79556c4df725d21e0504bf38ae248b48dc0f44949459bd88e0fe2a8284478a51653219756430ade7d515a2d12689018944e3156d952eba61f5e7d58936244cb16c9c774cb1b36908909836cd006d913371cf7640c68507686997d33664b311ae300adb98e4d86fb20e8f25c998cd66ac62ec907dab25508703a6d247138bd3cfad85eb96a9ae2525f9efe693b12d517ca28710c246a563fea66728d9de3de6f555a9a3cc01a406b43742267a7f17320cdbaaa0cc451060d7e62d6d2827b911abfafe5a3eabec77f6e804cf578ea7f3432dad214c92e22fb8c7329452e4a27ddf38937fe6f3154008f95970baaae1e5d40fc76bf781c7f258c83e36dc4e1c3185ae0a1353218b91795b4225d2989453469a9e509f5bb01a45cd530080179e3cc4a492a05b3657581f3b212baa24a0a1a07a32e2e378ba07823f5c3fadb20d263f653103920185163b1735a06956432e2f10861bd74b8fa1e3728c4f92bbef3e0ac7c2f106eb543ac14f5258d73629cf792eb093236de4ac63291a448e69ba28acf380069ea9805669976bee5cf57765310b4796b0ef2a8809c2680375b92f95778aa59b1bc5b6487a0da09fe2fe438bab59abd12d543b786a9f735c082d2c52364959a4023115ebb9b703becbae5897a23ee634499a2cccb6a8fe3e8c404cc480770b6ea8f992357876572ef24757408c0e3eb8aa0d4a552da5ed275933a414213b78871b258e89172f2aa34828854ddda0f2d353132a1105426d791cda75aad8bffc234fa66a9012430a842d2408da6f0dd0c0d05ae4536336508f8938d408914e7b428e8888a439ecf7aef9e2bef11a38cd6e711a95000240dce969cf1c69db09146788744022376b6ac0964a45f5c53e29c0c515babf4b5ec6f3110096da48d473d2b98cf515e1fc3646e5e6b959bb596d8ac62534ed980236c06cbc4be6dfd1aa1e96798a7fbe3db2a792c626d15196920a6bbee452adb62fe0e34b7ed7e18c19393e0c59fa1912833aa9daeea5bd8d4283e5058ba5d31a8e45cb9fd4f009f339d6f7f87f47c20b89b50e388436d623a4a599a7d408b3e05fcf5ed0d61a8955614cd37014b9e0ec2949e5b0a798688e443e6ae165864e7eea20bb46113672482b40b3c3a32d0650ec349d2088e66f33e8cdaa1c3ba5449e25d5247c69454dcd6dd511a51b94253862ce6b5a2714b03cb0d535a5d642a20a49524e41c52b0d760f9bd338318d6c3f27426ead41c6a8922d483d7e33f88d759e324fbf66b603cf8b6489a2a600135bd5ec4010c43df13a9f03f95888c4dae31706e580d436c0640eea5b2a0e6ef9406d11d44f27374b1c69b75766e3b9cc277cfe5a9181f77a1352efa3a7c0b8350ecb74ba22128180daf16f67e8c4781a88521199320a82a57cc57d1424ad05834adc4328460dc872a9905ad63117e8889a5009c1ba9ab9a156e235f5491de701c4262621b3f2f5d0ef4f75362d6d6001323b32e3b17a9ef38404f270b4bf28502e6b79445e23fc5ae9502e660c15b91087827b3aa9679c068c8824bf88e5058c31fa36f27b8206d34a4f3de4e4db751944a16a8e8ecfd5c5ea4c8307602c900ead44d60cf66481785296018c3db08ef7d529b16edd705df06a95e50cc037cc8ff7ebb58bf3231185978e52435306d693dcfeda84ea1d57a6f6245586ebd5ba97100bb412653db7a23c63e40068e42a695a6ce4cb9b371bae598325d373cf3b8cbcad66bf5afefb1ae5cac6c5991dbe2c91db6e6b45e402404fc21274067cb63976b81d0ab319e84ede2662f6e85c541924c3de255b7b323a61d0067465139135f844aea52624c3789e188d25dd5bd8cd14111073e80081e213e10c0025f8a8e448374dc660195fe9d23b250d3d8bf398aeccbb0910796f3d1e1c45c51b79bf395b5056c8279ef997469b11bf370b762b0be381df1a6d323e7370f99286337ee4c882a399fe02522cfa27463d58b975656986135dc6a80fe75e6e00e9c2724969cba1ec77bf41e7997f2f1b131e7d24b9e0bfa7e5b131946d4328539b73c19630609322ac17759401f680e8482c4119a4d8348b70641e9a10b48fab732a7c7fc211137ecba6d7c8bb62c9aceb610c5534494a5c0453082b6d9c805f35238249c663bd3201c0a2eef1734afb1a1acf18dc4ba1c7c34e5357f14c0e4d31b27adc6c64872f148cc3c0e31221f8fa0e14690d14818bc351b9163305f741392db7e3f90010e6d3ad68a6a5b39b76e8cd9802d19526b046b8cc9fc3633632c98b2688bae8cff80332f79c9b2fe21b08e3581f6ddfc47be9cd9eef05c9e011100d3341980f3b7cd981e62b49c6c8e01991f010dc1ffebc603a4c14edd42bdac06b834e56097b45707f6bc181f431f3356924d8aa2a89e4baf0f9e0deb367b0c762ed800025fc94652d0589ba2e589039f7ef87e09f9af14f723c296947a071fbea4619d5dc7b4e4de9c499580aa91f5480a38be975e0b8287e14abd662270f13ee5bac6e57ebc90198ab27cb82815739cb9d274f1da6fc3511a324cddb8ad3fe1bb693f82673c912bafd3ae6e15606065737b820e761516fbaf64f567634a2ac0401c2eec527c921b9d5e742e93028b1f8e13dc00f601955e6473d0fcca767041ae3ea73b1ea8a814ba9e36c871ee767ea93772eeda883fd6f7402bd51a2dea05118f09505b1c3c3fbabcbe6842f5bde811465a0e51e05c474d28f6a5ab8c0de8accfea766a1cbf0213a3926d2c33e0a03a9deaca9bd10426f1b449da402a3dbd0a3251fa031fc8d26c3e66ba5c2726a07c10a93707e238c60e1c5401dfc249248d5704c5c8c27762a2c97358a32e8ccca985bda6119d0cc1b8234844efd0163e729b5cc713f40fe31a262cdcd3fd9c64a9b65c8a5984edebabe30404d01b18ae5543a5777668fd8b83fa30747b6ecf4d808e65dac0beb821a0cc0b01e10ad9b1cdc119961e84f2eec87d73ec3c9d29088606311104673a90716b7335d99b625b892dad4353704665d5314e9f7c3876df32f6c00c7716a44d1988b66f8f53f9f1be620249e18f32134024d37b407b3c1f4c821fa5010650c54f942a82cfe812812d714107a9aaad46099b9f48b106a892ed6a0ce8c5288bd0b007919d233b6a26fb680048c133146c63c15cc678bd2c7f5146ffe899797169e465ac22e01417c2639ff7efe7b5e348151b3ec820e258cbaadece9d9b7d8f6cef340c7fef3605457762fe949d6a66c80c3b628a30d11281eac796878574599022e09bbed2f1cfb1d1abad6288ec60f48fbcde96484136347959847771b42555c88258e0125e01b9a5f0e7212e6953fe3a35bff51388064adfa8bbd755271eb307fa1bbe0155017098d62c7fc7c827225380fa516c52913cf123bd9cd3121ae0aaaff49be8883548864a3f0b6b9338b37b1ef83c022434ff70da935eb7b6aa51beb8d264ca39a63b92b5f9fa493d0104d3c60af350a11e8c8750488f7af29f3b5df760276cba435d3841d35e0a45ad656882d1e7584ca73bfe7f636db71961a1272c21d6987ab3487187da4074977114e550b002a9c747ad28acb97af4cf1d2db8695ee1c1ff0a1331173cc54a4e9e9f4e4aac9e86f29dfd25aabcbd2948e5f6c0ae4aaf4592c888eaadd3124b074acf554ebd2d0368293f3999034c5ef88e7cb45fd3c9a9e6981bd5207f21ad853fe4df20fcd0c884e3c0cb695d1f3cde1231a460492da630d72d679c34b8173fc34378b6f99f47f7d36ea8d361d39d80e28097c1a66d8e11e3cfeccaad87edf846cb9118a3b714f6460d2cccb5b8602c64e0860c7455d36faf18d91fb45d626a141a443b478d616f091e041448f022553f1dd43510edacc5264411179f2b9a01e861476017a238545361bf2a8ae38c00bed58a0fd42f057b36a3de53ec01605ef8e3a20839545b972617ec21910f9bd516d81f51ea347548e6af5d5f24a2b7002a2f3f56ce09afd72b300294bc7b00728901d86f2c836408b07cc829f62713887cac5bee063794e917a6e408acc7fb5b1f912024670d3af481ba04ada7b4f9231d7b6ec2805c510d7ad86ea3703059a7e5232268eb9c85aa166ebaf56af95dbd253cbd056040910d820cd84d262b38994d59eecca1e8dbc3784e7c114f0180cd3c76bb16416d892c73843118e41e5cf0113c93bdec1fbdfc35c5c8b88ae30c41a7fc7b774529a7af7fc1b6c893fc07b5162928055504a083668dcf8ca7975fc6ab4f6235f4e6a16ecb34ab92f4ac59bc16d491bdd95600091a81bacad6a7659912638515deedd683d001f5c0710dfd6070e48b82f08daacd3ed2763c9a0c6f38c99cfc975938e4e240d3f5b6e1e1a8c726475eeadb9b9f2a08820961dade9277fac627bf1da80c359c04e2b1c92367c8597b6f07d2ae9d974f13d71d130da2468c78a6978cabeb1dfa11697e941ea98e3a5b61ea9c715bfbd4d88db5edc211582db9e7df3f1f5d057dcdcc1b0ca3d893a6bc649fc587803d3525c168ab6664dbdae5ef9e069e65b0fa7d07e5ffba7ce880e733041bb3f7f77b8ae4086c7751883295ec5ce9c13ff71d330b1c152596fcb16cd1862a005680a109050084bd0b58efde83b4f5edeedf25a04b323e820a9228c316554649c13cf282e35076325543e0df19a5ce126e1a5546a1f626c2ebf01c71fece05a560d748b673ae77b310c6e62bd8466108863fab0c40176c4c5dbfa9673baa8028529691ddd131bca26cbdb03b420888a59cf75c23948ea4673b3184149a968121a26a186a544684d517190eb3ea37d06379250deff5d403003a6a243eeecae97f1557ccf81aa6934c18e27befe40bfcdd9ad9534ac5ea054c01a53fe63fb3b37cca90d063a35e942c03546ab93c0d2d2ce3937536a342b533614488ae688fe4ae963be7037251f4a435fa5a3525affb08dd8d3f9b09fe403df2ba8a8bb769bbfba9e0232d1db585d2c520c401af146d2e9767869751719708ed5bbfe2141fb5c0ba555310f38ad42e2e1b95b28972cc93dab0600d51d8f4d25e19b1b3b03313706bd7f4dbf1875f58b85d3aa09c6693e8abcd3cd4be3c0ac622fa5d41ce4064e42d6e292b4cae087ea1f4d4bf76ab468ecc8ac7b2b43df3c322caa736fcbefe39aeea1e07eed970b800026a1745593b517a63a2c9b5becdf5c2837bb8e4d62d9c3e58299fa50c86ea7f70d5dffc5ba9c339c3192e5fbe2eb8a2eb2fb100d9584f3a1512feae9dfbbb77df6d859ae13ae4778389797382807309a5a800de933462a5f9ae8185461c95c1588043acef270cb407beb10097e3219ec09b907c3b4c8af906f0022e532b9d4392bdb7f0d87cce18a93ff05aec8f38ed7847323c2ca62733ca41336f98fc0ac00348f311c622f72df0a906452458ddc87104ebd80436ba08f6cbeb1fda267e9c8d53fe4baedd3a4fe5c27379a535f86766e81b5e16137d4d848dec1bf8d89fc38051bf7b50006940833a3dfb36f685df250e224d5c19860f9b04e285b59d2ddf3dbc48354d27cd9b26fca5bc02065a1c40f5a1fe0c64a3fa46474b8070d945334d18391fb5cde525003489258a2512efcaf953dbf8989d2d78b9a145c2a4571aca12711bd7fc9b0aa665be00c19c7350f73fcf777399b063e56efdeaf33680e253bb86e4f90ee31909ceee96fcfb7ae85b91d462f54e5ff1c0256b15f11808ac2e18f94964c9495d48171da85e54fb59c1c3f8a9b7f22bb1adfbf16b4aa3cf438cd7eb83b8a99f1ea0167322b42517282fd1f8d1cde22d82395004e3c180af57497bc61adefe3b0683e195ca90aab51540d5c51ddf37404d03afc7023a76107408ae5ae9b763f87b6b879750141ee84cf0d6531988ac1d4cf7738ad5f818b135afd62d10bab5f28dcc617554507cd415c8a9e8a345e94daf63a73fc8901e31dfbc10758408de356e0965c93fcd50496672d28d43c27fae0d8a313ec65c954b27905c884b696a376725a58809a947cc71eb25516e00a587ce28103b1d933eb6cff10fdb8ba8abe2fd353bbfdcee5f314b310e08c4532a809631052dfd4999cc504ebc39e1939ddc7e3f1b81c4605f8ed3b0b4f30d2b9aedb94917b6cd1e9b53e753a054cc13bea366a14b340133fad98420c95c80b9cc0e43aa8251fe7cb2b296f00dbf81971da5a24f475e17fae3a2ed430d08d604ce0ccd76c0fea86f6712fd8e0fedb5f87e5cc893c7d80d50e861f345e3c29b1fa07310f5e06b427e147352235ae64de31850c549ca32bcd9b6f278905947f1bf676ecce3a908f848eec175ca4c2138e52a5098f456cdf94e8d51952a791726e0ea12a01b0777fc144715f1d73ef53051b370447bc434ead8e14f3203a441de389a0d8809a8f6050730607bf7492ea032af19a69d3cff88a17697a1a264c123112f119c9d0ec3e1c2015e184fccc2c81d44d16f8c8f930726a51f2af2c28900011f094ff4a940e99a5f479d55e064d52809c8b89107e567568669f73574835335b631a4aebc9f02c58192f4d849787c56e8150f162d4e9ea093766e32887ce38cb1cbb861b742c05825cfde581a77fac1759438e13c94002972933ab3d17ad81fde05289301a8a4311ca267f5e2029231a68075fd7a728c67181fedbc8a726fc170c323a3e3dcb38ba7978d35d044e3da9456066f3a3bdd9adbd6c961d2b24494dd2921720aa582699522a7ceb574a27461779b11dce1cce0bef1dad20c7089829da4faab779dd3f340b820e60232427aefe44e232c3739a9f4c409258386bf1b2b5db654bc60b11e0722b75f56da1b035cacf6cf57624aec4ba9516b51476a57d3f036072e0d0eef1b289be99d571f407f8c9ee7a3c738d30e64c5004e790dda4fae8c44c20ddcb92b847565394ac1c8a35afcb74cef909cc535fec91d998d87b48aec4409166460ce26ab4f5aabf11d53ecc57d29afc11150490a987f56a9e4cdd446af0dd8cd696f148036d06c706e2d6dcdc0ef6d8d7b1e457f21a5ccf4476dc6afbabefe5bc0e75b8ad903a4f455e99135e11a9a866e4b577d552829ab82157d10b8ac3aac9d54b514b8c64cbf3c133eb6c95c0dae37d1908514967e91e41cd635628f3d3c92a57a4e7a35e4d43e0b4737aa902960edbc78499007d565cadb6d21e9c7874fa7c8a618209d05d9132cfa1bce8e9b8e11f007438b5be0608446e60ad408c8e0c042c35d3fb54e217f4a6badbaaa90e2ae045eb7590bb71dbf6c45b378ae304180e6449fce8b7e2f2d0321afdc0b39b4098a8a8089fd7d8971a24e776d701261d7d09369980c05ca89db7589c3841aad36586fcef4c45d8e12c5c60b7613b9ff1c7dd8c675d0efff43f288f25c06542c28cc422410d7bb73ebf08e8d8437190d93c4c7ed7f3337ef0f0677fae209f9238b39938f508478904a0be7cee074b5a2d97cfbc2cdc3ba4da028ec7d39e04811559cc20f0f0813aa656ba204aab1e3d0c49aeec0b404bb961aa9cdb53d69fb836e8ce698d14e375b8166689ba53efce422116d7bdc2e31c81a679640ab4bcc9732a5494d53bc446e94ba7c138112db7a9850622e6360c481ca700378a632f552c046057464588a17d8e20ab03ce4a34b7e0bc27f48bdba146fc59e4783d9706d8a6c803a3b708bcc5ab43a0028c502a6df41e2ab25d152bd7662ce4698eecfa55833e93afeb92fdaaa943a18b8d1dc1ceee0dd11d773392170885386f6cc5c0448c40ae681fa9ec435c3dc3566bba50ee24e16153f21d085e37631510787833f9a8e2144d9bf12e439b7d1fcd5668e3b879f2f00ffde9819c86d644300d1c85ece0ece5ebcefc95e9bc8937b079a15d0090145fb0012ee77a2e565f42407de3c3a369e0e31199d588c8d84988eb2bef2387fe98a6c0ebc855398ab97f7d5c0828a88c3ceb346e8d2027dca923e0902e840ab48f9096d4d319e2a83b65f933328f13cc37fe8426f0c3db067a3f9ab71d7b868a6ddddf538aa719aa11a08762336e1eacc4c33ed0f4307a69102cf7a98a8941f115b7cee4e3d0bc1d73441de15304061c11fb762e8da3ac88a403b7f99bcfb930331b3bf0c399e5698cae09675ddd985ae8cc5f94fc0962384681ba26f5edf805fc10586925b1ed74603d39a80b14cc51a3658a16d685ccd0d575dd2e8b7a748715c5c46497307a7fdb72c01078a4719a05e35e72b813b4b6736f8612f058edb652ec8f263df759855f79729c36ddd221d659900e039523701e4263c701eda3f84612e374bda63e8c61b4c090b88fedfc4145ddb357662207660f12ce273dc706ad6f8021fcac3d8bee59c325a1f66f322defce2815e1bf587f1eb745733da2ccbae43b653dc4163512a37bc9ef8c57eadc83a93fbdaded76ae9e38077445de4a55257ddd4746d5086a541ae7d9940990568d735dddc63b4eaf4f71f148f1b378ee98059178222e1d6e87278f0e1b9e59466ca3b20d61b304adf866efc4ad7ba6bd41963df5aa4fd8ae724dba3d7a8f12ef9c8f8edf1c6b158f0a73845a93bccda230026eafb759acdd124f6cf45a209daf91b4ef25a5b824bbd56b986742f9781b084ac20b39238d09ab3d03f605c5460efc9f0ec7a8e6f05f1a70c3f51711b7143e3bfb9690e7db040ead90cdb9840827c47ce8194247732d287a10d6bf1bb487e6f3aa5ffa1ab7bca112c94f707ae7c410788c93d9d67fd5b0e88d10c40d7377336b0b04b15b0d469b1c943129b241074e160d32d11f591f08a0936afd7473769c6b23896002b96a3bf67c057d359a18b28cd8b5f69c5fd8b4f0650701a6dc1022fa7a055902661c8e93ca75b433e0e7a95e6f28e899d5543f6d845d128fdc9a4fc230819295eeb27a77613aa5d7784d31d06d1f3382a794324011593e37e74c84493d52b308863742d6bf78a8409b0b56456af7cda1f66b938b9b17feb541e8842f59b51df8a4a06e9af1453252dd34d08497c3d6129366671f170a46225040bd6ff2af34c0ad2f6b6cce9ff031c45872ba48e75a1d834879492663f2aff6b9118904e32b95e83feeced6fc6e5dc43feccebfdb1afec60b6c6d32b3570a2e3b8137bc5a30ac8ea50593233d43e5a6fd5b06419fe0234b8513f7c8c900e79f12a1d3aeeeca702076622ab54feb0b4afb88a63ca804c6509d65efef222f72df4a551612071673b8b54666b61c8653ce9639e8ac888fa87e21358cad05355dec360961f5287c3598601a97f15a431fcf00a6ae2bb06be53d5a457995050e881a86c678bd09c51dcba9b248fc049fa38020b529f04a1aac2cacac66624ef60f789f02279aba226d4821458adc412468da05bfdd861e707df9d548dab07b24a6ef1b1294d3dc496636fd33c1f23645493df42f5247f44752b1e5280d9833b9410bd0831ec09034972741894e5be5b88af22cc3a49d40a4509f1facd5b8a5af5fc4b8e13b1cd6fd3703c4f03bc2058e45fe20c24a62383e9b6e7ddabfccdd369cff07ecbfdf3e9022d71b792c1f4a4adbaeeeea5102741a2a240b11d6e06b675d3bfc2a1191314dba9778e7111c6cb20232cd60ebbac4707643d71713820c89bf2dba3f69ab518f947d27e7c0d544534f798c52d55d8ed061e42fe0afb71b4142edbd04921f400114b89eda11d950f23c420dd2e70991d8c310214e80871f6ae471ccd4bc7ee6b5321ec548b6c9203d038824fcc94f9417c7ceacc705c05e245f002864e32d1b1daa658b8e1604994cdf1144fae8939c84d4881733e6988f268bcb108b97b3ca1a3b4638c968f2f25fde325605e1f190559fa2e6c55eb3d10519e370ec0a220cb0fb48c856e2971f5c40031aedb606783065a40015fea6b121b1c19dc3a239ef5120a9ed0d9f2cd785345aa5ed9c5915305df38754499190dba97b32824489fa9f86049a780cad454313937bf2d70e504ed33b9ec036d0f39f9365084597c39122150e249276f51113b027132e51be6f50ec37192e994002fca78447e46bd4ef1ffe212668b56d16b7508f5b6909c45e0961c8ef99144ab97a7ad802a422058295b8d996aa71b696eea74de797bbd9bacf7aab446e4742f4767a9875b1ddb1293d5ee017b1b2654c026622ced449968f3f94e3929a7024ee2ce9bef073810c62f455c30ec0d009518f00d4c6f81412c4f98f6c9b419fcfc11d4eb1a0785010a0c641e941e7142d261c9e84c07d4144f5ad79145b22aa33354d2344c440618a86badabf1064d8a8a78f616ae6b5ef27de0666feaec23030e03e0d888998ab44f4d0890cecce96200f951c05438c9f35ab3105c09f28c7eb43c53dcb38c6ddc3dd1371831381ea7cbc3ff696dcc54d00329e9a9ed2c815c48cfeb97716a48ad7c4dc166902eb667fd82ce90ae39c6a44060ae29142ff3fc0bc29cac277d8032ac9e7f057a481712d8e6a68f5088e7a8301333f4e3e4b1d7cdf09627f973ed4b66521e7c27e25d09c359e29030eae04817d2205ceeb63b190c03d5914fc6d258cf30134b9ba68c91360230b667c79bf61f534a8379cd3ec7f758c02010c387e296e96d2b3c9a397a5333045c06f7e05c90f72c0b14be7819546ac008ffad707ed3e98f963d711ebc6f84febe5ab034fa9c4ab1d955d37959af9faace28f099fdf694390f902f37684819967e46dd431df27b57ebc3923dff9ca87d9e53fd91c8606dc3692aa067f34573c14af4150b3b607a8ce71728de900b7fff0752980fdef25a6d5abca9e56cfe27ef316ea92f4249dfe58e46d1830529cfe30133276b7e7e187c62ac02dc4bd263154b7538b1987c0b45a2210ecc17c5e75b31f4dd347dba0551a231d45494aa820afa7e18ccd2a65fda1c1396606888543c3cae0c333e5d215c6e457211ced96338b8351bea6debc85cd6368cdf50c73d3a3dee187139470bb42a9c88bdfdea4aba1b6a364c6b68c2968d816fbea3dcc901930d3ad7447b523a91fb78fccbe7cddb11346c370c56870e30b980f88bf4547a81acf105589d375c96dd6775bca610cfc291864098c98a26493b7296bca0fed1c191c93b93dc1c2cedf581f86c711d30890de0b418d45756266b8799d22115b0c2675c331e32ca1f4f0efb3a3c80ef8cd37d11f5c51aec9f44e4a4e2a769205391c04eddb73580e237cccf298dddd5445ff3b46143b32e115b89c5d2659bd68203fff2b24261d0ffcfa5dc981b97c38351ecba0ac343e661fac5719010ef63223a40c1666995af931053a92813124ae110e47044278d692824559987a5c9d09f3555a51ebef99350a6f0705b3838947eb0a58f7e46b000c3ab13811a0c21ee65df20b03932b1277644c781c4e99fce1af6eb6a6541af49a87c238664c299b55b2a48223678ae6cb488edae2d6729535dd5e35b8bd4517c6d3850bac380038436b89f3ee6d21169354d98eaa0aefd3de48d1d1b2b62fcc0aef852aa3cb6e6b58ae8bd113450f301c3ec6de14c2e9c45fc7bc8b20351d6cb88554f97a3c093cfbf46411f3d3089341e7fabbdc5453b4cae3228d590a2d628da222a40034cc5c79c2e24962fa6e9e66d3ec3095cd1c802a61126ec762f40b5439fb291e7da2839e866a7e898d4a5f803ef6b9ad983d2deb95cfa138fb6f18431187187a5064816e06a43ec60f2a37cbb23401a714efcc29d282e34607a0cf4d23f229d2d981373f65796cea106db3954b1471237a3671fb41e9fba1808c3d0f3ad0a8d41d22c5e36c441e35680ae5369d91d000e5429effdb2e8bbfbb479b3b87b4a7ee3030fd0cde3f8e058606a811d473f8469c92318e9acbbfea9a9e9ac6197847ef132290514a3d1512cc9d4cbfc683cb3c2532375d888878e92ba2a784ee325f641cec4746552faa619c44de9ad996bf2253ed42e890e9dadddf91ab2ab6635530b5f36eaa11b4028f480b8640295ca3b0841c1370b19174c16e927f13fcd16b1888882801df37f241bde00e5d8987661c6eca6224b154d76a48aac30e0824c7a22af06ae21685b664b17e8ae60bb3f989791016c17f63a62d9a5fe09ec2f2a509ea9c81b4e0d31db84710e5d5509c35351c212b0da32efc3cd71b6a739c3725fa94b7008ac592a53828968f3bd13accef0028b96958f7fd978f05b9687322e2116309eb071f09ce2eded77e3c0182319cf56200b18c1c9b7771dc8875c53dc55e73efe1c485f1106af5a124d0dde4277e1bb5849e42a43925f8220590b3ecee9c10623f6f64759b98f8170180be9d52a8e0e0acb5f35309552c358790d8a8f820192f824b3be1f49faac00cab83a1949d30e52a773fff3ffb32f0e14d527682c28dee9cc113b9f1fbc9d5e48a0c7437873a970e58487c04170f9dfae7069240854a11c6b2f3310fac0395da22597340ea6c68b5344a8c356bd16f6b84428611997003fe712c76ec193c84839e86efd712f68408a343d1984ae6aaae3a189255a473b734f0a792f76e877aa343968dd6fbb028bb735343f12eb1eac0ef7405753d00155a5419657dc6124663727f044233c7a56eb4cfcc0c6436662a485dcb8f4335a4647f98d6697858de9239e822e8fa107283bb24d560c9e8bdc0ee85a9a47c57f2056e63150fd8d32f72806968b83e0d257ed9d596734538bdad94138d18d1e130d9197b138ad2da273f9fd60cd7139ac6e8876773283ee56f578d3ca967c16f51f3be785e007b0b6d9c85c2729633c25d8ecf27d1998c0dcc5c27911de87d4ad89850e78d339c4caa14dad6f77af21a278b013f165af7ba5b17135ccb58ed88bb4e4b3d47464671aef78e9f0e84faf1a9aba99ecee2e5ff18d25af1a14e7b11ac224be681795452afeb308962e0246e376c12803bc6e74d5317eb0d4df43277573bb7cd2b58d01e07fa96ddce6f4e87b33c53807999d50126d92416f7f5b1d8d91f0db8036e0ec5837ae839112f26779473750a8743f5ed5556c40284fabc626d7ff983754b030041e14ae2fae5022e4b1b36d5e3e10c7bd60926ddbcf929f55496be3bc5e0fabfd8fb15e85e44d27ce370320f2e8bf963bd33e3c88fc268af4899b4fb23b743ac5860420e0420d4837e1964ea618b71ec232e08c8026b7fd2e0b576d01c13a2710fade819dcef2775e02230d3a5e60f2c20a3af383bcefebad80b71fc8b408033b9a53220646f864e2d7e6e73b1bba508aaa8284721ffa45892dd0dcf76c76a5bf686bcbf190f0e0f28ac98da78ae9b2f315c279b0f52ffcad7e2d5eedd63198c34a31a80e38085bdf22f3da5f11e6460479c1c5f3933b513ff0d8725a923f733aee56885825a5b275a929ccf620e1194fafd75b400c9f7a4ebf86eced99c6b6c2439bc4627388fe62dcd866a3f38438219cc225d6110f98b0a197da2e4ee2235234249a79024ed925cac0c05c8ea70d0758549aff11ba541545a37c603927cf586743c37eca557d6e9b11f2b33d518eee83dc96c7b84bf81c5b14cbd0dd60c9ab1a7e5ea86a8e7d51c9f45e7d8026a8ec818e8d8e6a577c71904577c579b74fefe4cded656fa4fab8a83dfc931c8bf903cea5809c3b6127192a84ea6d50ef4703171dffee1c3c05cdac2c58a3f39b7640427d83dec3838f312f92811f70b161883a299ea8936f635340f31326fac531ac656ee84d0059ef3f5d3d409deae049cf141dd2d3c5aba509748aed5c58f27e0bf86c6d4e9c38fd07eadfb845ea6cf72421fb8782caea8f21ef288b8c3fe5da7cd3fe2fdcaf27bdcb737c69f0dcff858b9dffbf7e267b81294ef9458349335c71f73ad29c485dd1cd5d87bacba4c20fe47a8a0da27c76cb37ea6e847547e9b114e3953a4cc94b9889614d545ef20a2d4f1844f00d02c412b8c391656d331b7032dfa38902c6761b52abf10dcfd4af18410e901eae365bb987c2911191378165dd0c8c9797c85060e9b8516821d410937084081fb79d1acbdee3ecf2275c96aa3755b2915a4c74610158d6dd6de01de990a81046c602463c89b88f0ff2edf3437d01d38d600e4cc64e4396050c5b390b72996f65aad1deef10ac982960b4fb8ad386f7d42ae65a99e50d5e0e3cdffe72efc35922a5b639b1db2d4d563499cecddf954ba50b284edbe6134bcdf2acd407e29e62fcbe5b72fd3d254610e35ff7e6a61d5361174d17b734ccc5b140caa444cc4d523cb5d1ad1030df4e83431b7d2320f3a42e3220dfe47536654302daa596414a7c5d0e72bf4d99015cfb0ca40a7a188baeefef72541e7a1ea605a609cd5a79fd8605ae2b337b5d3edce0466c0247937600cee814ce56e80bff8c1617b7130ceba814df31afaf1aa74680d761cc83e00fc1da2b25014caf745148371696b9a31435d09340a693baa2285352c32573ac7ef6c9f2913b103ed2cfbab8520d7da9f81fbbddbafd6f1864499eacec44b89c772c7f6d6272771c7eb4f6911900bac8be2a2a537e10542a09a19f50e7f76d9fee662007b8c0368072714c0bb70950c3eae7152ea4e4dc28a728398a9eb811d2b6e14dcc2bf420ee83ccd6f00900f5800024afd2a3e2aa3d4237752b774194496838c128a70b21d50b64dd45d97a46b276f592db6ecc9fcb6be83756d5604f78efb84b6d44e84f754315580e14ee2e128376849aad11e1f872b75bbab4a3784085a089377b2581703ae95ed7e13450d773bab554872dacf7a553ede608fe5c1e37f7bdec7a2db8ee063da7a0e32f3e80dac48801f520501c5cafcf72f3bd65c448eda420b567196f07f35dba1e47fb977adcc0fe4645e997a6ef68fe259ebc61a7bc579f0cf190bb77ba656dc84d37da81713ab586627d07f9867b2bad0377684f9b66264f496ea7a68a4039af5d9e7cf7969f3dc5b06e27d0e2effa061aa4dc24c3600a209588e0cc816756184bd27b9729880a4a41f79340991d54161b04ad6d00aead1ae2d3ba9702834f782114c85ef8d563ce43da8e93d4f1d612030fa5290e3c7f88e808b3eb2f3531c8472f7b11dd4a90f563b5d680f551f2a213a44b7e1b02ecf8852565285430917aa25a690f958e5c542c5ecd6cd4aa09907aa3d310182e067294000f99654b0261f308afa097d329f84d20d62511e17343ae4d192385f266388c8d589ddbf9c4b246c096e033f20d685f0f98fb3f054a452c8709994a1d4b23458756eb60195f7c47cc7188435cb9ddcbd39f32f31489c15d22de03254eee27d6506b589f04af2abb5c9bcada973e6b278230f9fa5f57128f96a0abfb6cf3099b8fe42ca53859ebf6096fda502863d48221c3a6cd92bf99357e3901bccd4439a5414072127cbc930df5082832fe82074d5ac8cd83a9fe417142a37a23b05f58a5f82b1797868806c62de6c18c1c0e4960994ceedef2c86c4fcff1d1622c5aa50862403f4711678d64de3fd07a9354b2197b9acac6326a3ee8829cf1c1580d907db537e3e9a38e0783274fb4dea7f99a280999c07a80c9a9f53fcee0e28229edc534dec17040c78cd75ade79e345b9efc483bdde7175abf38f1bc04cf5887d89ff726f70851513c290701232e0c960444a61a560d3b200fb04b854b8970d8786c8971a29975889a92410e72d135fde74c0a769e0e4dc7a66c56f3bd6f4a4bc8564d66447ef95134efd46df5b3453a142c793e36ec6024c8dcdbadaef3c1eff459a09c825d4e10048b3b8bfdb65a06ceb0f6006642e130d42a3c9f6e769430034af8f4e3f9470fff29932d8a411fdc8ae4d48d0ee667d53325032b8868fb56d99c543f49c2a27f2008dbd781f35acf863f27b97cb70ebe092d923ea714a502ea25257bbec83fb946044c21300924fda5d7dffc7e9e411a8cef48a63c152f183f42080e2013f191c204a413ea642c2f1e7c22a02480bb9ce9d08c4750f19e98dd2214d18cb7e0d0d2e441eab3b98c56991dfe9f67d7e8b5dbf94d06b22011bebfca0c107b90006ae5ce55df8275208885f2e396b31488573fde59f78d9a2748b6d86a4148d3e24dc36e8619ff040a86ff06ffa8e4b35c1ea5a917eceffa668af251c1a7377caa0a8686fdaaeebdbf0a3cd0a0268f4b66f6c7a5cc4b7ab3d40743b3b360db1a3108127185ae1d7bde126f30074fd13209642d9373148f5f6f6ac449f25456af6f954161d5767c8a99fcf78350e2cedf883889ccd6db115e2f7d9e388a5656ffb38eb5a7c39103b08486033e9dd4fb06fe7f398e56c9e007a98139819c57dfc8a90f1da499bc1021afa52ddf1706e3e45b00e6632a05ea494bc486cbaa794dc4bae11d0dce80d767d76c474895b19dc914eb8a90e9a8b722b092bfbaf8786a66a5041352a7100b8b33c804cc9bae6cad467384592b8615d23c2f4b6ee1a9910cc1957f90def95be435ee5881039d1454a08b1980aac95c948aa3a83b2d4b19f8543c114db04ebc30c6d8c24f0cdd3532edf453de89ddca710b716469d57610bc3e5fd992b0c2d61a0a323887fd60546b3a6eb43f33d190805720d9e3d652833a4738d4c64bf046ebf778ebb9389de397d92945d2114669b465a70f4dcb31ec9bfc0259e1ee245b8677c8b6b6a2b7ddc924f4ff09470da7946942a42b9406c7af5b569a2d57a5ac6028d883537a1df960c8079896921524e4f9ecc8acc602131c0778445454222debd46ac87d0641acdc0cbd08aa0c7dcc88faf48a54ebcfc364a71629a69272914e9cfed4b5d1559c1622954416cff19d52e0fecd20005a9572985446173b9659a6c2502cc7e8031654064b0a567a66a967dc6ca57bb5d806b1d4793a6143fcfee3d3bf9d02977263a0112a36e04a5a56fce86752f019e6029c99a4936ec43f06eb6902e12993c672d4a49d0450e1dfb586e975a944a048bf1556600f765a1ef43bf66d3a42cfd8b25d0648cd2fdb7ea5254038a40c220d89e11409996fc347dccec551a2188ff5e1649931ff688c23d224af487a057ba7d20fd5ccfe16f6b375924056c44a00100f81dac1266cd61447ac0e665487a7373a20421183c293fbef8b08f4b7d05b142bc2e7147f9cd8278f8f341f05f28b2913a599f959700d7fb8012b6c0529f49e6839fea714a24c1922961096ba5ae09a8f21282c5a45694b3bcf97c92b65e081870667de070d0a206be473c63f12209945294627732c0fcd744374fb642dd2adcd3968c32b895bff33f297602a55a743623fd09a987e7ddabc1b70199dcb379942a7bdf7f189622c3ef54a1051b19a1a5df092c87c6d6ac93efb8aae63be171c162dae02efbdc3d28bb02c0cb6749aa30e0b4fbe114c66a3519ee2c934fb91f444ef36380c39bd0c66fa58925858ec7d7bc5de76b5fad5cccdb2d3fd0d522ff1b5fa528fd258e15682f02bdf3406a3da885f0d3c131880616796f7187ae209c098821bb018088b6c8198a64c1599782a46fd0d6f668288ccd0dae9759b787a08773882fc9a27c723026a7fa148e6671185424fb067964db8471d3e31f31c823ca80556eadf22f57199051442af8ea99dca578b98bc0a1166d241e1585ec2b8231846ef9a8157d2e08da78496c685f025312238016e6067306edff0c843310b4a297b569e3304e525430ecbc1903cb10fc889bcc9b06ec2290628cb35395092f9dc00cbfdfe620320c0d9bca2cb0b76faff43d49186620f4c0c63d2a396348a807dee93d09e52b0864e6a00120e0852f5a0564bc3337523791cd8a2fbec49ac0bc531e8cb69dbe08e50a4efb19db700b28391a6b22e5061efed4c66b859a2ed6fafd70ff9add0fd92ab9cdfbf089b0c94b52fb396106f9d8cf9a7b58240292363e58b1257e8f5c1e445c60e0d82b4b56ba038385b00513b6cc23974997cd1f26cce9ab8217b612a06c40d8a4d761e2c85028f06183ab4594d77c43f6a22337e8f6915a8f9e6f7912a5ffd7d50f390aed487a6f3978bb110d5258aa705c9ece5f7903b291239d36e2e23e63dc6954d6232e14607aed6862033a879f4a246b89f68bf83a498dc4c23b140ecdc48c6d0539f8009e792315ba009120cf9ef3f40f191f52e8456853ddc8f58c9374639d6b5efea84b1d2648a085962ab7543443e28ce11c14f3b01c7c29240de6af95841a84da2965c60e02f2875461b488e439b89c1cdceab565b42887d742ea8962add70b3b91c967c1a207db47665922aac1eb8fd576d47407160dd17c508fdacfdae871c40bb70963c4c457eec9827dfd70bb8388ef297ddba5bbd7f4de4a8ea68cedc0d2c727ad57681467b6ff7974b372b4d058e7344e64820283b9425489a6972018ba46a5a2d6900cf1c6fff768504068820f47f29f183394c14cc2818a25e37698ca7fe00495dc6723262282d28cfa80785254d9c388c08ef2951e0b043ba8e05a1b8827774d2b7a488a54625572e0cafe07ba5a382c19dda3e3c4743bf91c945709ad7332e6e1ff8ba799fd7603b666ef6bbaa466f875247e187e4bdcf41d1f6627f7e061874b2f8b411bd78a2464e9848d8328df0859fb5a5db68065ccb52db66673713ff78e7945bc1175b297eedbce3d5ffd57f434d179a3d10c5849034b718e29eefe7f94967c238a81fc914dd39cb240afe1b91f90aa45b98c45f6c1d29d8b23fd4f94e008bca7c8b8e82e61055915440eff8ec6b73e1c07184dfc438664683511452897726924377d1c5957f6ccba1f72062d4b43809680c71e3eb20ce6b16d566b1d3a1a0ac2f0fd03eac76202ef5c6cf3ef39e12d25bb14559f804054fa16db6b5cc2294e40d8f811bc3ddfbf76bad5c5721cc8ebe2e6187da5635ddd0981ebe65e17114082f2fec295c4f524f31b42b938295ff7b98d7cb5dcda2e122e883cd0899a16ea6ac510d5e0c3af690ea5a93a135f87fcc19f54d9293a88a33f857953fb94b6c5b8092d4b5191d331c3ee3aa3b793cdecff1ef2b3bf4838920c0d44a58b44c03467f10b83c76d485cb18110a96741ead70d263be80a4dcad6e5c43bda9d0c7d8c78107c8887fe87bd5eb568fc53748ac29fcdae582536b661e5a8e4c0f19c2e65d1be991d7218da723ef342e5491b30f082654ffb041a1751ac37b847a2e9f092fa09f52233e9beff7372998b77485ed5aa1da41ca4118a64e3bba6cd763f4894582ee8024efd4954d33ab480b4654050edfa70e8471b42a343e3191aa9441edb320bce24daa5e6549f1529aeeb900d36f0b1d113b4ad8d8c0cbef61526d5c9a12ade9a82c727be09766710dfee8a6b52ae8908605c4931305fd3b2544a91acf4196a23d8d420fafb9aa4cd01c9db791faa13fe5f26927c1f6b35adc58fd6f0de199625bc472b8db3c955dbc825292035015f4913af21fc66b8defbf3bfa1b4cac50bdc820763a4cb7306d99aa82bb9ffb377fc882f38ea9d850fa651c3e0af9af625cca7a34448095b7ae50c62d1e5ce6608d062da204ba7d1e8bc22b58a3fdfc5745a9c2f14401809c0d135d84ec7a8f0ae35641d28cae9665867a0ba06c784a75d3bd29274cc11ca327a5430833de0cdf99927b988290fc019e0ac5a3bf889a92240ac87474f27ace9a6377ef24504f3b842700d656f898c3abe26afa851fc8be9d1393f7af9196bbde8181b570a4f9106c60cb2556f3eab2b9112f441415255bbb318409613639ad39ea51e2f9b62b9a9f6c4e4bf68d898a3c3d6a758e7463bd4a11007d53ee2c4a26364ad5872f9704d9ee35684dd0d7e965aedd8343344214ef2ca026cd2ed6e484d5328cb3f405f0d6120a8f8876776b89da6ea42448dfa1fc54a4fd288ae3a39fb5d81979da35d855640e874a66cef8789715cca870e3fda99c99876b57548f7142d1eb4ce44303d2ff4ee3c12a800672c9ea0a86091c0ea06006c795cd977827bd491ccd092201657ff590995b51a50e85024fc2ae61851f4a613c71b19041074bd37976bcf8d7cd075625d55ee46303e4181c82937e6c3aaf048dd8db98cea02442b4f7d2c04228bdae441508ea64f8afe8c5c237c98ace909c1771fa79a28adbeac77ec247819274d37e401abd7794ae07b44f163ecfdc54a42a039d9d60395b1e947af2472c172c864944978acbc262bcab9759ced286c61f601e5e17096c5c2ac4f8e5298d50f82383a8f22549ac79f15ce1a55585d477dc69faac48e6452ef34578e35417063d8cdb4f7e6b7bdedb5f7b4e3e82efb2be7710e4773356b7e262271c054a1ae8ede84c7af2a5e2878a0bc6e529a148e646e51e196e3c9328f18be13733e9b5e9164535c65f3a94509ace26421b513c7cb5220c5094f1f417d9f3d3cfefca087b358aa5f765b54f2ebea0f19f6a6865d769982f46d154c330ab05ab5d85f9c1c4cc1b2b8dc0540a5d8e3772e93d09678388b702be051c70848c13beb173cc230e95161f1f4c7a25578e1e25446503dbee8b83b78ad51ee558e0bea9082bed16abc12d3fc619eeda5a2802fac1be0b03edd668f28d5b6e127c2a0fa6d7782e000c1247e2bba06851dce35d21651041ae15f6d8d2ea55c4398d29e98424cd54e3c2c4dd0083a7cd8e5b36f7bbaaf04f5e4ba9d7866d098d8b6677eb36a74ab1338022d86b98ac7d08b7418a9a26a9bd3c970b2a3ca087822de92b11c00eb13426639d4a30cf586172ae41106a13f71c04498fee4c06dcd959b54005c8ead383b82c143dc30a6f6a4e4d071702d784f148edc42700ae92ae2ea71f851d9721a75e0b5db61ddd911abb23222ac974306a410113ef17e5089bef09ab288a11f681ad852eee9c21477b0ed7187e76257818a6ff8630cec3fc80531751aecdf92845afccc10cb966b6a655d82682c32315718cd8d72df3631ddf86042d79e7cbfb7b13cb96fa196edf5efb0703e45ee7945ca0d6a4064f8f7c3b50a1209373910c8b28be949548cb88404ed91b314531d92535aa53500a80d8d880a902707b7d04e6bdc1550018fbd80b064a087878b6947495b5a5d9c0c0cbb90924f4bd2d3bca65a3843a6ed492134e4ddffd5001907abb7fc48d3d3450fa4b3f1c980cb02392b9f394ff0cbb175cbf190dadb4501c6ccc5fd2877ea8b5f5be91fcac0ecfe38c147b367e3669c9afc2dd3ecb6d57219e07213b844c13d736735d456f2dc1f644f60d2acf63b7a802c0b73b4a515c86b0845dfd94d68e7be8b33c49b444ccab9aae5c2286c2a1e2371be4ef8255da2fe2447e352bcaddf183ab5dc103c6fa798492ea5035a305ee2c3147dfddc462e65b8300388e93dc70e277a0391979a7296a908b7d898c877f4f50cf2bb8e876307a66934a44bf7b17d116622bd7c448f57bacf63e6f06c3eed4cf2d771e42eca7c1c605d3fa080721063251a5034adba671407b0fc77b6aedd59ccc569db1e455d62487d6acb1a3198cf350d008447ac415a21decaa6e8d6c4dc7794fe7563bc579865c81d00a885007045b002b3e6b0dc56a9be61c5c1f20bf24e4944cbffdb5ea58261f889a9c6bc7bc267baea055390b2e8488a3376349034a60e45af6ce6694d43ecd114c029bece4c6748a8d727b284e508ee86409e01bb0837ae62f0392dd7d8059d742dfc973bda7ceff2c125129be2c01422511bd28aae91cf23c6c2393a622c04f537839668527a185cdb7640ee87333098588f82278f8181de8c71150c6ad85e430e5ce8e346798fb965d7096fd41a04c22c7bec0dfb324e569048ee078fb30ddcff384a25e14a878e89010747ecbcf6b90714ef9678a08c4f8a748f4443d950796ee6e712376c0b6429b62068828de3e1bb62cf43d23cc2d27d9c3c08a42da3f68e448bb6c2013059be108bd348bda44f4f694b60c8c1a31abbd147569e44913f4b18a16ecb49904be049997b71353d114477a2e62248cb57e471040d5b9d188d7d4beb2caad9b685945facc9ef26b283ff267308a3d62549fcf352c94b75cb539548a40407f7a7fa2f00cc6ef70c4560be15d468660b2401ea16fd8acebbea90473931d3fbaabab06d9935ffa5f5e6246f5b0e42686b37547dc79902da2b4268eedf220b7d38ca6eb67d6888eee3d94442a315109df04a89a1392811f04d197331d8048ae5c3a9e46461785445ccc92a61364cc0e10757541e19405c384dbd9612d9385aeb6f088f4943f92ab0700ef4e6d25b1f29e0ce98902a729fd22ecc50c6b39f7b0deb60b2fd8348dcc182856bdee8dd12e6c0e37d53e516925491f0086daa657d7ddc18e11a42c9184fa9ad79ecd38a0bc0a273f943360758402a74eddaaca7160118fb1054112b1c3104c399b8f7ffc34bde92081a2176fde0b4f835b3805634307b93993dd9110ad69ec12e4b0d5df48e0f246ba47658c300d61b0e38b456dab062e72b117ac3f09e8ab4be2137505943a6205df3c444a9ff0b603eeeb4da306456fba03b024ed64dba21344c964ebcd0f45ebd61732206a5d7adcdcba7a8a816975bbe04358eacae481464707d198082018298a1779b2747b70912ac0d0043e09cb37e2b1e08388e034b569e0f023a8b5d9c2516d36eac798d7f021305710eb302c5b092ff6c0c721bde443f452db9665c715765993f7ce580300172bc619eb7f14ae7c66bb4134d37c754ac4c126bb55a067080b70bb9a9691982e5f53dfa332c1df732b379400a98ad0500349b090ae73eebe4924419d3c7783c31a149b933029990a69c4238712633e189168fd5e6fad8f7729b9a42a7aca99842a7480c438c540052463e823a492489a0d0f1233e64ccae95b271fc5a602020b7c5925a2bdae14c7948745015d3cb057b0a26b19071fbbab76016dc12e22a1192f3da4c08cda8fde0e0b27d4f33cc2b5bb0a7018ae815285ce978495218bf582ff8b04cdf58e1b2102b35e55d474fb586646f4ac64a862deab4d6a60eedc2ccb5acc867f7d23aee2df15f52cad11108719527898460d144c404286e3f03a6808abe46b5096af2be151330ac98bfc11f94ee102170271f3f2f89e01828393e50095b67586ec358124eb808205134d7dce624c4a185f9e8f0cb70e5c4a78b7841eeee6c5126cc76074d9c945b5426b206754a9c03f1ba00211f63b5b5bf4f685d70d50e34c7852b221a7af50fdbb6c4f6e00e6bca846f133128cdbf311f91b2538c653e5f16e6c8573b7ce6813c1a21387dbf18e89fdb4d20c973ff701dfa256a341b944a7354e7837392c9ed7f108df53d7544415efae08cb1036df9483edd47cd9e9c0ad489d3295960c8307c04850f22e67a232c12bc6a45d04d31c24b081d4e204140bcabb441e741bcf1415e2b3c8ed587d978fa05feb6e183ee105fb547d8b0ed0fa9647fd894e8a81f7fb05ca3fcba086eecea8b5341fc58654881ca56a30f1bac57211471e94a1a2e9c8fe4554f0a63f27e1897de03971126b092ceb75e1ab6362c5aa742b3e54ea8f27b520a284d232256587aee749b974443db73dd1d9b73725f02868279b206f824e8de8458ed43a7a4b14204b29e1e717817c44293887cfc7e4d05344f205aa2c7e38362fc53669ca2c7eb1e45fe449c2bf406b6e5b7d18d72a25c856935dc48a19cd34fc6c800f7018a519e9f57ecc2430042d107d5bbb0940ae10dc99aa6a708e5b2709764cb8e2ef485a258a68a5fe1ff013f83cadd1b630be6ab3338eb00edac16432673b991bc0a57b8ec37b5434322a4a9424bb900e92fce4efde8194a5e9eca6ce977989048253e3f6001b469b3aaea856710bcdab1c56ae2a0eed5f3aed3b13c36a00db1a08edfeda0a2ee6c2932e4cac952fd93bbd5b0ee82f0e28b656d3e370aef1ba2beb10c5d0fd28416479441bfb5e1e2133e62d2249f74480b0f41666a78b7f947fb4e3b4665a3084ec65fe3ff7d23afbfc7e2bb19c6e04c08890754265a855eaeccf70433e0956aab1c8e0d716087279388902973587573998c7e030c48c6c2380da4249daf455c61dfd7cded3139981776a75d467aad9bebfe35d289969ce1ead3be385eed4b52c167a27a7985463c2788d57870c1adcc2a2b4eedceb63f292854b20d2a1a19dfd455d109242997f4558841c3116a362bdf88520dfcea8d37c23f7dde09c99b57adf435f35d447223de6ffac146b5926442341b6f92e31f75b2058d0a2534c10b6afa25e452a8658ada959c48fdf392a71f31076c9763d2c11251a91c6fa43c306949e9be6f6f6cfc58b2a6ba8c606c0251cb41eacd307107c1d4dd76a412e39ae2adf87134d2a00c818ad567f72af996f81b19a6ee5c3de69ef94bd090f2d48adced882191a718a1254912e7db68a01e77159e286e482017761aa62cddac51e65071de56611c4544667c0747ee4b48a5eca4866fa5df09253fa9c045e30665c41aa17b14b0478a21a141b78f02cb17307813220b622f2809271fdca679c208b85d8c9ff28cea55244703246eab5dd2545a8fd6603565d4c0196966ba8d15ba440b37c070cd61e19554bf4183c5ead33d306de0ca21f6adc65e5a3aea4a8d31febaabccaf41c36d057638cf11d485db1216ce9475eaf0513aaa22049f42893dd9870c4d0b47cba1b214692132f2f8f69d14e94289323f9f71d493e84f11ebdc8006d6b12b422a291b9d36b35b8e00bc4b2f73cbf63145e1f7694072c0ece0c8af62aa5d45bba688c394c7f02bc42507b6b7f84152ce7901734b00c72194dd845ffb72bd60dfdc7f5c7263a4e072e8235612ba9948b932989c4eae833e49c6ca9b8a061ce758093e99e147578bad94c4ad79aac35d7bdcd0cd1997097a01781fc60337bd5de66950b037d8a699503a573005b6849f8f04fc387c2ebe6677b227bd46010012a9ed54c1a031c77445b677521a4979714423c7f13cfa262d8885e35c0a61aa682ab970d60c970fc231acb93a1fa25d8ba5b15142f5117425f850127af6ea262b98ec51b12f2cc8274a93e8d611c4a78190fc57138dec50695c2847cf6a111e349b093c93743195947c5235bd30508fa16ebc3b968bc13a6ef87a52d31837147c4e7df3e26c023b0ca76dc53ee30b03b1f3fddefe6e823cbba5372f128b7a28a46a7188268d767069458a1a30e38a74ae958905eb8a4636928c92179aa6b2fec4a8c056c2e0340a80cd16312fbd1481ccd225490c37b22691bd534897c9b2b2eaead21bed3c669f4bd390ce617b4f8c9d931f068f0085639b0997a316fab1d95f607ee9da6ba623131bf7b8f556b76ae7ebf79b0362ae2ad7c00689e3f9a2e637932df54aa5fb97de232aebf179f3b794af4d96ba1830ff5b565a9c154fbe034865e9ae4841cc256f95cc7e29c6e71659112b97d9574d860582bf579da63382c725822dc020f9b760c516a5994679414ea2c48ddcbe2e55db5d5fe994c1d26c522d0a54b399b90ad39e8a395d70867feac47dc214c147e5b97136ea7788d7835208f7d897c6f9e4fc9ca97e2aa48c9d6e670ebef6b6d9ce81dc3213008c66ebd59fea3f3c114d3dbb7598d6cd4b2a6641641a500624a07cbb0ec172e7c20424d4fe4b295872baba5569e5ec2df2baf3e948dcd66b0522adc1c9dba9a05242eb7578fdf0198021e0b90e2996b3bebfeba0b04bd3e4d012cf04c463b332daf1c1e25e80ad003e85fcc96cc32ba82135a00d38458100d7d979be664123cd45ebac20ff0145f41a993a9ba7c95f6518a5075502d620c53149c33665a1a3641352a14e4b85071040eb0e346499744679226c9e1bfe0a6430ac155a247284294eabadb95c1071ee366f267460d8473ab01ae36ed6afe28f74ddf73d480940d2389e769a4431de7d8cdb996b7d10b6542a2c93b15e09b6745912b96c7c6f751fe742b518fc692f17ba484700b8cf9a4c3f3f4d15346fa9caf7dfe946fe1d090a028fb7eca3286ea82cfd88b08109147836240640f0680ecd14fe1352ca7c33753191a315b5420b97098f4cb4789aeeb734e07dc98ee178fcfbb493bd284f8312f6c1431dcab8585be18d5466973d65aa92e560763796dfe12a4ff65834c1df5413db3c2fda6482b5a24d26c025a6f891169863c2bc0b9ab0d75ac62ca1708c31e51ae600e684fa24ccd669ba7e91008d14c0e662e8ecf07fcd0f783a5ad270bf89930f35a428617fd975b6450ae1329db248a42e9a2c9a68f70aa2d0f88c0705c435f2bbcb171f0d9315aec71b75b5f98b1add4d8b6856df4c80ac08626d5d1a707a0a8478032aacee895b3054aa710e1a3e90fdaf4ae14759d6be28fd78fdd7d768e0f4b7d2e66ce3ac34a51848c97081ba3cd033b540d0fc39409b1f87ef0e0018000ac7fad938666c560f4a574643a87747d1be073460836fdd28b67b656f912bb74c52065e08a5087108d66ee20c88091c683685ca8845e64b1340330bdb40302f51f1d2cdaa7c24cf7889fed5685418db9435e2a3d0085badaaf256356dfb8ca4e9a2795078da0bd61452c1a33296fcd0976a02c554a026501228a97e34ed4365ec14fa12ab26d0ac9292404da034ea67fb73768a8cfb8f23d274c9a02bb468c7ddf4b9fded720422a14157e8bccb918575a919e3c52c592cbc83cd98cd06618efcf5ab1b0216042a1b0b2f755e7c37848559d874e168b1fd75a0e5c83937d3c5ffcbd0b0e992c2a664979a2e9ab55a1d7d670e014673e433c3a0334d593549fe99dbb56afa6565337f0bb331fffa7535d0a585554ddbea3dd1b10c6db48e9905a3321b99a3982ffe4edee08bbc7a3765959fe8587e56812cd056665eda68368ef7f4c31943f7f4e7544009eabe64d9dbd36f4161cad4a75f63627cb249baa763896398f953f7f35b70cc83dedbcbb2121fb99fec98c47befe9388a7e742f41980235e615ab923cb7b2ab929cdbb04e175ad3bc52afa04886bae9d34dc9f2864dbfd3be1d04d894ccaa2db466ad56bb51a59984758b51194b5a2c62a019288d9cb2b6d67babc582ca84e8cbac9af4ab82d2a0269d85c562baf8d791345d46d3c53f446510305f60f60028c9b3cb918581bef64b0bcbaa6a9aa78a39ae62abddaf5f1660cf2f5fd8f341332a63c9107dd1c8395d66db5fe49e595012b76bd70aa36edbb63202e9f9a8824868edb7cd6e6f371b5d8a27d82ea332a0187df11f65414d2ef8ae4d966c7f8fcca058c6810b94c91e65186c7fcf39d8fe1a28b6b38a06babed6c93a33bc6461dbdfc2d2d837658dd4b1e332580e1153a757b6e1fc01d0c9d92e94c3471ab66489b7fbd65a6b2d102135eed37d6ff0f1ddf8c347da832ad0f5c9203bf8487b1f7e830706da0c92c7dc9c9744dc6b44e88c111a7ac44b397c344f4ab696c347346ccfa3074943a901e16cfc35bc54c3da2cb4e541ab1bb6638df9f251010e78e9c70d14b8809726f7dae7807d44030df7b7b734e478a2e7cee126ed94a997a3070ddaa8ede0db5a7d6bdc1de867e7e63ca15fd36d63d4020c5e9a1b6fa487395de812d34e8a4c01fada66b6f5fbc7037ccf53abb3b543327746fd211a1a47355de0f3da97930ae8cb1c3ebbf3f32ff0214b7c5fbff6c9007a4d969d07fdfc7480c2f20c5dce96e7bdaf8fc3bdce48778efb398fbfbbf1b7eeccce7f8f416489b5264bbdbf902c43261c93742f94994d9f43b33fefb10d3ec7e66683cff9ce38f7b7759d0e59d20d7ace58723edcc137e8af26cb1cb6ee3cfd7800a15736e8b70f021f52f351e7fd71d4b0ece0d02173f86cce7f9cb9ed37037dce83c6cee3a89d716eceb8037cff6fcce173ef1d39ef1971f0e7bc3796fe1ee73d211abaf3a00a34e7e9cfd3edcc003ee76d5c1bf4006081be8f833fe84bffcfd7effcfdcf387d04fa1d86370c5ffb74849d9146fffd20b07dc73e1e3b3f3b23005aa03b5f3d6f9c9bf3f5d3b8e78c221938afb31e3ddf194bba3b1f8ea50ed0ebb104913be674e9fc9c2ee16bef3fa3e77d149222193a0f7e2724cb1c3efb7bcd19c1c98d1bf8ec32879dc3e7b327fdcba1df1219bf634d7b20f6cb0fe0701f6f1ac7711cc79140b6b7288028d07302a1fb92980462bfbcf435fb638931a69704b291493472d617e40fa050a81ef6b491ed7b9ff1c6c1fffbdedaaa3f53af03da2b5b7fd636ae7babeedecf19c33d4996f8c1afcf8df8bf21ab3dbf1df4cac665e6f203d138928796cdcde9b201d1be0338e0af59cbda6f9ff1e3cf9804c2691f34fd30db0f47fb7373507b4e174d9696ac9f6b7e4eb6f6f39778e72fede7b7f5856c5cf1de88cc2b39e8620c349cf08434ae9c3c3f027a9ab9271f869c3ce4244b9cc6de362094c7dc40eeb63f6b1d7768df79dd9743564356bb3e10eecb0fec4af2d0b2c12f2b09571208f7e5f63cd49d04049ec7ef83fbedf1d7dff0f6907392ca8d040292498a78de07213e0c397d3c1e8fc7e3f1fc0f374e9e17e2217525d1274284c8cc8dd3e76746a7cf1399099d3e3f834f9f27c299a150a1d308ae15223f8c4e23a869a04e9fffe1c6e9436a1ff46be3d0fddc5f125b48995912c410579c3c417c0105b6022745b039212162059125a25801e3855520c515427c118516454ef467f75e3964b5bdcfdb8883bf48066ed7cfe16e1eea9015529a7b7a6597f8bb0d02f7ca952b4cd8db46961c99c4f3fe2599f9938714325fa725156f6deb408bd5a68fa36caa831b1b1e30500ed91bb87b9301dc1bb943dddb57140a8512cdb07dfd8d74000f74df1ceede481e2aed309129f5fca9120800a11501845604184d76e40083354723ed491031841e8bcf32a90b0182ff8d3972e0c85fce1668c31edd79f39defad53b316678cbdee7e3a12305d36dff467fbcce53167f2868fb6bf93563049cbb790389c65a4c149db87c6e907f8c8d0e58d9dc32948824512706b94ecb9f17873cef971b8fd74e4fc58cc789ca0077afe41c0bb1ced25b1849d6f189fc723e7c591c8120dfaedd3117ec661cc0fe4c21c60f8b9f3c4919e3e6312f143e3cc9f42cf3212f9e14f2172e64f22d9a39272e8c0e1a38d031a7bf8086b1c3eda72f8687bb048170a61cf4f0707846160e87877fcc4b002dbf9ef0a46eee74f12b1ad7d3ce84e22ae60c4a9bb4f0b961dd899ece1a3eddbe1bbf3dca88591983f1f101471f7e9b8de678e25cf1d72c6b93da338ce53e77addbdf7e67c83d37d5344d9e5ec62c2b4935f94003f29017e626386951a729841c624cd3d270957c1f933f54f07108fe338eefb6ee24e08efd3719fbbe46b5efd2c8fb9afe7799e0ee07fff79dfe3d1fb3b7e2608a716c637d20ddaf0d13771063df0f372e6e606b187a9e7795ea846f7d1eebb6f87f5bc245edb7e1ee945a16d843c5a76fe1c7adf48b7f6d27dcff3c091f3fbcdd0b2738731c69352dc919e078e737bf82fb6913dda7df8f1d2dc9c8f47cb0c2d1b9335ec3a5e3737c771ba13c5167ca425890fa3a3443fc4ffbc48d29908ffe7c5078da21f2c0f7a16d241a408bf487a8daa923059839f400f223d453a0d767d3755855ffafdb1ab9a40ef8fb1e03e1d61081afd5455d58431ae2a5c55a3c7cd97fa5855435a67acd2da695ca2471ef0ee3e7f593920d067c2dcbfa7343306bf23a09c308e1bef836399bbf7bc0d7ef2fc4769f42eb1eb7a9df78cf3343f9bc37ddff6fdd475221f9dec9dc743061172f23c0e9f8fc9ba799e513b793a7eaad8855db5caee10ed2c46a000fb7293ccd22acd5264163de5d17b6d4c925906c876abdacdac2cc52543b4ebaca0242de45b17a3f9872e466560e80bea076aca52c0804e68cdc66c18762685955119cb042b06758275716654d1ac1933afb5d65e4ab7ed05b77375567456d0fc4317cba8d9c5eeedba2374b1ce8ace95599ded9f9ba0809a31389826eb7a41d93608517c4c17af2108dbdd612ac9c1cd99a1392468985b31ae18d3cca2f41ea9c12ec04dbe719eb691db2874e138e4df384f4e68add6a7a76e2442e4873f7dff03cca97bf0c76cc43c80ff36e61a25a68bbf506624b617a0cc49ecacaa79093a0ac06e627bf77da39fbc51f423480c429c01cbded8c5441fd9c5becfa3e807f8f941b293559293b392684494ecc88cca33309c12b4c615419799b55906781100be5f76367d9829334d9dcb334b9ccc7d2e26699a761051846980ce554dd6e572752e2033025d97599f59d59431ea2260fb67d40d0a95676ef8e8c403def8879c849c50997523011b93ddd39d24db96976cbcb46516ebdeba69acccca2c981b58d574038605a3330b46d3b44ba5adcb4b656645718fb5d117fa28d821d807b09a3e0077cd9aa6216092fca793ed3738378ad0a5a50961d735b469da966badf78642d60779dab01a69a3da70c18698001b35e780fad8d3c55f4c0095a961bef8d32b7018d1a59dd6da59dd346dab1aa59ab5333bbb57abdaf8332a53c971852684f4d560137ae525676d7b439696864993cc1d214f1b254b2b5b6143059db5c0108bf095672116d355e6d9ad9bd57e1bc1869adb08a0d8fe1eaee6c873abb2b4aa29cf6aaeff2ed0934a014c2a4c0135854db07c1645353545a46a6a6aaa295cd514b17a16b295996667160fe851270dd90a0d5f95149211ca94108611ce2c42d98c710c7e700a21193117b4cd6e282ab391e16a43e5594ea31ac0a332b9455f666950d30328c93fb71cf6007ab3a94ce845f883108c3cc5f6a7e12b8a9ef4858ebe6bed38177dc11cc7699aa30390c3e17cf53511c4830f0804aa21ba50340a2291682ca520457adb985f4eb29429f215740779369bfd388e95c5aa69a95ce574598d85f0150bc998a6cc841e98b0dd9ba942e7d6cc060b2cb0306b54d8949d9067e036b313bc147acd4bf148fd2ce519315dee9c4750927b43a43c94a7f296f066521e8d47d303cd63bad46c5186c5d9f6150b6a55e3d949ae224bc95a6894b29a78a99c3ae00173e3c62b7c659b1972abf6b0b535c32c8545a43cdbb8c2d8872b5948464d1155422550928761cc9193e1cdeda0c22684b05016fa40b77a4c5a2ba594525a354b69aef93a310242f56556f8100a4e7419a6364c4d19b1a95502498cd5c29ab0098d7cfa123651c322c25413352cdecc746102456d2ae315992ffeb9091e10dbbf24b7cf4229d34547f89a42c3f8a8870c53cad4627ab1fda7ad1aa55ad5b4aa69365cd5a858db723b012fc08c3b05616a92fc613e1ead2d34fd3253b2cb812ec5d86cb557b319437766c2f47af08a4c6f88edef427e79796179c95f0993263633bfb01d00066f1b6568c048838f7cb87a58a1277d31c00b2fbce07f23a68e7423c0d3c6ec64bae429f20f76e0ca2d2974f8aaa63967f8aa5b11d3c7834e6bf30daf56edc6576fcda971436d33d3257c511a43c8445833732b646252a1c3147df127ada84cfdcbaa268caf3d62014f7458934a1d09b58aa3ce95f7434e23cfea5cadb295560f0d64a0ac1698237f1f73e6fd3095906719e8a1810aac726b75935b3daa4903d3144a09b5986484b0f065a3c31a1f79f80a5fb5661a2f9561cdf652fd05d054d1655e80977178da28c37469c0dcc29b993ff050dbdfd363baf87738d065b80a57219390e531dcaf39e2231a1f79f81263a26cfbe7933737d48c125ed1c36ae12b9422a40125f93c556edf2aba1461375cf915b3f4c20c5f616a52999049149630554d21bd76ccb05535e52fe80b396b915d5926451663955fb915da199659b217f92615a66e6e6d0f6b7ee7d6cd8cf1629a6818db67d7d265ce355895675e6a7bc7d265de50ac5d4e57f8421253222bedccc392a24750211b83939a3130b8fccb71bb879b2cb9161e74578d526dba7ac86c68f64ae947e90a4368ba7d3a344a37ada4ffc518638ebbdb915a572dd8d83620756bdb1d81544ddb8ee04c97eda7325c155cb836cca674a4557202a1955e4dbb9aa65d4dbbdacf8fe2b7c14f98e2e942e323acad9539f719340993e46f8432f149855a4ab4869e605c34475f4946fcd47dcac974694d17d674a15350520c3b58d55baab0e9a3304bb47a192606186895ed3f9aa61285a9150471ce377fcd631d93e49097e88c8b668902f114081ac51cf99ffc531a6a35c38ad5f1f78c991bfc401026661f388284a2384bc42e112fc164a046df40011f79d6429eaef63520e30d54899b1b724829a5b40758a32fca4b3d6818d3858a419bb05d09aa9a4a19a9dcce750cedd68cf1edf3c46a3999261ac624f93b19556c9fad4097740a9d0203372569ec0c7ddf7e98e3380ec762dbcd9ed8a44cbcb0fd1d668efcb55dd25878842e69cd8cd1b63ffd6e4f283cf001c575e4b6a67dbc7afdd3a1038ff9d93f4a2ba595eac063ee24dddbe0a78e0c22e4446b680da578baa47c04435d95c6fc358e7524adc9577489b1a5b92de4c03f39d8fe79d639c9f973c8ee6abce481cd98016c3f62441341efd2d2509a4d638ff888d2d0d0d0d4daaac20531b5fd7356a9668c7d27a071050998e822c583f98325bea882082d584448e0d5a5713c154276735dcc7d3a34cd086eca946aa750196fab9ea75fd5b26c132f618ec359956b37daba592ca84c253ff4450391d0f59201dbf6d74fd0e5effb1c87eabc5a3dcf8e560accbeec8db53fb060f8f0d281c7d4344dd3b4fb94fa88138a40d702e080992efe01a0a649bb2a5466cf177f0350d293246c7fed04ed9933ae07fd7ac9548079c9a1e9e24fcfd0d347a15ae9bd75ab75ab78a3a15a616cb0e16923011c3eba156649664e72744325b904666985f919103dfa02d6ba9de0c60a3244b69780d21ee6c8bf23476237e9cc7429f285ae61ba7468e8bf5f9f729cd534f2f3d1c53240a9f5baaeda0c50194b5a608231c598373e3a1f20143a561f875b9a2ddb64ad56add619ea9222a45c49727f7e13b8246a497d214b5ee41da1ebd3af956e1bbdb7d61de469a3d41aa6737a9ba554084a652c99c37c81711998c550716433a6b461e80abb66742e4208c0d7e173de89a04baaaaa6f043a01ffc10703e7ca7ff037cfd3f4211256b005fbf0da0266d0849bae2907446db8d96c1014a3d24b4aef8031259ae4ad57935baa4332ace4f910ff0e7fef1a00c8c369fe0ebdb6ab57218638c5b3c954aa5a98aaaa88aaa549a84a9a4b7f184ae233a72156fb5aba07d2d735ce632c7654de334dac4764dab1849cbd5e9e0d70ffaeb51b373637207ba5de71c8621c7c2e22c20511431c65743d2728df84b72dbf018f4972d50ba6d2387c373d63eb098db384ecb81be78e9a9a2e2b4cd729af6c2344d198a84bef82c6190d08b5f071e73f33ceff3bceffbf965527f0e54268754c6fbe64b383ad9f4c9a65fb292c8b943a2715bc338056fd34fc72433a39326b51d79d01bffc5240d82cef440cf92aaa0a02afa82198359aaffa95437d84e9616894d5578a4309be8ce0de3adc6866b7c586b328890937e1c8e552a8cf598d238aeab5f9ec700b1a126ab8a2a663385d58af2ba815191adaea89430594d18589e8d893fa11fb5007383d5c4b2582c0d6b7343b1f2b451da4caf88b353bce4228edce19bf32856e5260a845d3511f784b2839873f8da318e58247eefbd3b986dfc28a4be1d2a6c8d85c3908f280ef73d4c7eb0c8aaf6b61171580b31132d52632282ab48034a15b0eddbad56e525edab11ea562b99a4f3aac9aa9ce46f555675d3a9b69bbaa7af3d27f9fd4ae23aea811955383e6cb041235fe68b015e78d06366e1635e714d9b3be81b946c7f2852904c0141d1f34911b60f2fcd2745a8d9fe3f6e30cd1af05f528475dd4ed0d1a09a30899a43809deed3fb415c909df06352147a2b03fd21fbb9bf8f1b74e0e19a86e7cb07a5d8d2a0b6c8d346d9b9da4885d14794811c9899f87acd8cf18d0138b473e159c85c5bf181faea4c93325875937101f383da4065f4820f9274065e4aa26819545685a8339f56eb4c1582caa84c2571d0972a0435b9404938a88c5be1000fb3f5e174f1e78186369519e74b87927c85ac678cbb83605acf988f476b1f323738f003fb70335c66961c0d3da70c0d33b4bffca51d0b4cb92f414cba1341495e648efcbd66fb7314e5476cff4ba240306d77496bb6adde0bd374979a03c1be4fc7f6ee4a7c3463c05aa5cabc9467cc6cb126c93f08db7f86a5c4644d568de2261f9d10153d653b169ba226c91f33d14ddc66fbd31b3c9994075b97a1cbf9f290d0a1dd3d95e56daa36644c532d326d606048a4716c6909c33a833f1d95acad2368140b63ff984069f8eb6b5523eb0c147aab1098545e2f1edebddeedba7befbd97dbaa8f6a9a73ce099b5de66cf55e0ea91f1c59d9feb81699268a9a78086d44a82a81a392fc5bdb13f192a59452bd55aebbb7bbf7de7b2fb7b936fd1a65d3b72f160a6569306cab9ac7d3469f992e291fe2abc14fdfd39089065f7f596764ac3ac3da74d4bd3f65b9739bba9633a574eb2c8dcda6a036ce0b3aa1ebdf6d6a34873c104c6b2878b466c650533552837092cbd42213082694e05ebf737e359de0dc4c17709cfa7b1c4eb5a05500e07da3b3183047387c543f4d764789aebafe762b0c9825bf3247fea32528e9ca2ccde9256ac41c71e4eae5829b047cbcbff7919eb47e4d06e1fc4706d9645298e024a422e1b4e4fe97447f246555d2485b95e4cfe1ca90f9cb5f546685aeff31a1cb3a4305115c54235486d620ca5a67a60b14bae4ca2aa36658084c2adbb2741cd785384ab9d0c77d1f44085767ea0cc77de38869365b03c515db659df152d951b25d35dbbf06e1255a8d6c7f910cdaae6469b1d8f43babec3140815d2010896f6060405f62187e819cad73a6b50c6dcb591c459d67f92127d028ea32dd6159551c0e0763ee87f82c64109617bf1b7f803e945946d18f9667f91692ce44dcb37ccbb770a10fb170dfe357a8130a75422ceff13aa1100bc83d02b68bf739d805aecafa02d0384f2276ec72799c05164a854ef0f297bffefd554d7ef21fa24806b94740e38993104742a506a725f6879ccaf7171e895f7a6cbbdf541c8badb87cefb73d1d719f8eedadb5e5909a8d032d87d46c2d042c1f44f4437cd08ba40f434ea1077de8fd61bef7c7e334f913b3bcb19d8607a5cf32060981105650c589e5716c05fa16d00f39b5fc10452ffe90530e8d8e1a7da69242a14781749488fbd0a3f0a2515483f4191129e21e05d2552b8eacc14f2ddf12229d33e39b711ecb700c9bc1f9ab9ab00b74f90bbbb00bbbfc55862e71cc69fc75c1d017e625eefdc6f3fefeaaa696f7f7295eeafce74396b465f4138e55d38d610e8e753ce18d79de8d7937e6dd584ba725f41eef4b1cebb4b484f2e49ce8e0c8395d3059d2327b600c2434273acead39b16ff446f16df093f8d93dfca3ed20d1be36ce2b8a7c8044510451512483083989af8922481445502c164a7db6e0f4c0e9014402448245c63206c65a8742ff23ecb2d633c54bf4b18bf5da1507c12548cde014c4f342fcc80f499c96d8ef384869f8025d776c60c2360e5c8d809f40ef19c58ff811c56721e98ce53fa3e847e83f1ffab0886568936257c558eb50e87f342ab1ebdecfa029bafcfdaea3f385ae3f6aa18c3d8ecc6260d78cd1db9f25356316e0897e781ee4f921a7ce28fad101e5cf48670122cdcc4d9df7bc5d8a4474097a75c679e3b9bb1f12a14bb155f16fbaecb476cb498e3f32e491e57f4796a3d12541af1bbb145b37c496f8852e4148402d0035414d220806201a80a400515182acd848f684828403ec0925092ed8db8ee146dffee9b82fa6aa0984b106bd522031b5412f6a47d14684f2aa26910a4af21793302b828c8b5815b300c1442b6eb68b2d161ae812840489aa23bab6bf8b36628ba506faf7d48110ac5d7a68c294d6de3ef7e9b04f474bf72da946dff71d7d8fe26b0c26e49e50923003125b44d0a58726cb6852493a9fc5a00e43e7e9db3d6da860eddc1941587428097aa1f4bfb236412fd0cbc3020f8d18ba145b2ccccc98036cac3d7d0f0afd1be6efc5fcbd9777233a99a66d7b8955eced4694b25da2169e157868362b36d724f99b40dbd7f053a1271424cc404cd8aa555075b3c55635815e4e92b1f68482041600f68482049aeda1a926d1468c52b3fda19041048acc0a154110d904d813ca6c8a24ac5d8a2d976cfbd44113b1ed2fda885140ef258a31ef554da24b6c792f11e6bd40526c812c5d7ae20bf4d07858e06101e5e2456534b2d39a2fd574c324d54eebe56d1863bc69358a4d7f7329f172e266c336d766c56605cd62d350198d04bde68bab9abcd72455d08b7e3ce8e6388e031f87831b3e69536c790987cf1ca2cd0e4af267618c0e934e4de78887c653e3a1e9a8c2988f3cacc241a24b4fc9f6a7d93b68af3fde91ed6f247b373ef25e62abf5f2521d5551a620d96ee3f21216e28dd7c0bc8f077ded3dd06bc63c47a54b100c54e5dbe11bf43203f40231316334122465ba7c3cbe0d7a51d1e111ba04bdbc648f7082a4871fec1284c5f60fbdd0a5086a89302fd9a75a87e3e891d0e2cb4323bac4964b13d9a5d8125b5ee812f4dafea2ee2795cd7d29b680a0f1d72f41af97976e3c34d5d47979686060f0917b43e8526c394074230162cb8e9d996aea30f1ceac9a3a479ce4dfc43383647ba7a3eab4aa299485338d0acd745abb93da9dd8eed04c1bcac0c5ebc5977823b6fc4597d7bad50d7c1bfc04ba2ac937ef25b6c416a5b25dce9bed374d3c864466b36f94c8a8b0b69df936e35bca379a1da54663c1f318bab03299b6327f9c3fd3a5053366d68a97b8b796fee59ee6fbe9b8f437eecbcf76f20343dbd636031a439796073c6a0146fbf2c552cf8e76cf4f06d0aee467c6741d15ad235b5648b3b24adac18e9c5585ae5fda9565425a594796982365563663b8edff616d9a5a6c63b68aa5e2a31195fd8dbe9a40925a4db6b6eb404154b4dde5878e49f26b63128f9cf95326edead348bcb2ac193e9e8f1c6fed86ca64b25a41a9cf0479da285348dd16a5ab556ac6381154b5f7bea8783521220575d693968f56af26f42573fe93d9119402bea68b833fa0247f104605b8050b6c812bf005727eddd6bbfad2f8cee0bc4cff1294a4c9551a2e90e9d476475512cd74a9992edf8bca6ce4b7a22ff65bc9be337a38839a26a5323ec47c7111142103ad55772156fe830c0f71ab0913414997bcb34aaa11621fe10157e0caafd771522ba8a0f466ba709e437aab9262ad59493733c62b6d5121d01b0aa3361b6db5ee0d15c22c5d21cc91ff855592ff255d0b21ccd29c375e7229d3b7a024b7b7f5c5f6af17e644a2305223aa3ff1f8a95cfe60ece32e0705ce4a50b6fd413de8129cd9e10fe4a691201468d946e6f7de820ffa4d35814c9c6413039b60474dfa84b6be5525390b0f315dee9339baad7b5756c8206263b1582c90891fc03f73bc24e1b7f2236ec4a4272da4407283531021b74aeaa45f08b58206270e19a400273805117280932697883e20848513875c32238282690a46013a01abd833b4eb3841294f66e983627ae95bf9e8258322ca5e7909ac628efc5f3e64b1047512c2ade0e6b444647f6ed10c7383353e998f2e187374613ef2bfad4afaccf026fb82314bf4c91cf9d3968f5ad544efec09c645e6884306a14fa050b09310af04b2d39292ee6bfdc32f7d23c229ce6f348d8ae676e9377e3363b6f7772dbcd825cceec0d5113d2b89b4919fac9a40164896a37f8f2c43218d94698e2c474838248c127095862e412420122f95df4a89caeb476f27e23563bed57491324d5f281486dff70251d1e02efde6872667fd11aa24ff9004ba0c6dcb7d2b4beea0af11d944977494cff8c851dfaa62acf5b7eab62d7ff43f9597b677ad5aaa2b33c295c998706733c64e3cc42c3231ee41d3a8ac9a38b61ad1343ae2d474f17689b1112f814c7c44534d20cb492e033e315f4028a64b115a48845583263fd286ef55534994c6592c67811b87f36daf8dbe399c4dd35ed5c4d196d3f978382a83a8f700ae50a827a6e328b6834eb683558c4057b2fc669cbe88ce04b16b4ad3acd5448e0539ca695c0977c257e0aa074dc9f29bd9e06abaf8b5f1d175dd968f4a674561c437335ddc5f4e54b15d09271c1e2aec2de6ac99ef894d6b9cf86894d8f4cb2fb55d1ba7a6659107a2a27d97e02b057025659abc072f026ae12910e6a81b68bacb2babc005600ed076067210693fb7fd215bc33407645776653552482185d10351d1749738a58ddcaee3c4a91933c434814f80516023c016ae01f5155d7e2fd4eabb218147842e9d35631c355d3c8a697247b11ce52c4739cb0351d1db2e716a834ce8933be85b6d04594534bda4e88621e872de388a5c618515381c0e27b330f73ccdd33c952cdb240425ad13d53667357eb22f4ca2cbfbc9b6eb0f7f02fa4332fc09705e4471f89579a992a2d148cfaa495713e7c3116c69d6cabe5935699233ab8903320157b78c2be3d45aaba37c4424852e50d5e42c4a2aa3fc6457e6a54f364720e82c14b89a317536636e6cff2bbb32b005bac0953fc86a3182f69fbb3ad9138a184db66f9005aebc34a18891dafe2093265e0daae5251b2fd914b80257db6605c0e160d48aca5412f7804700cae0ceae8c7365200d7409ae64dbdfe3f212b862e1cba500fbdc023ac8d346d9f90b1b5983be58c720484d01d0b60f005983966a5099ae4a57657b0d5b35fbb2594cfaf2aa26984aca829a4a94443a95c1f4a5847bd82cec2b7b7906e03fb01b239ecda8042d1547418f323524000000b314000020100c0604c3c1903c102541eb0314800a7e8e48625236170864418ea32886310619c308010610420c80a1999ada20002011d5a1c51008ecf03fc0819b077580e46b3271092025552cc64358a3ca2ae2b8d61b924988a8fac707846a0e73cdcbb04936fdf3928dafaf775d6fbfbb215386b63049f91d849af4db3c993dc67e7dd63e101437e128cc5055b5bbf655cbaae67250266b92400eb0b4875aec5e9fba3083046e115c2cc20923ced21f5640f03ebe61e9bcb4b48922a62cd0d1c186139e8579696fe8e96abd79449d34a8a50c1b42a8f7dd43611cae50c73761cc19d5b98d187e3434d243f5e601304a2f87c48e227631a3d3b631001a677457c3fdbe8e8348917e08490867d19d6213ad34edbb556cc08c4cf271b78b9374b915bdedf51cc17ac4db42daf4c5ff775ffb35935aee26f13a52dbadc65770edb54d721f6cfa1531bdec551a67de9bc7b423dfb68d23893a7132cfa62558984d3bbc1b9f6170c0ebc0cecb063fb02345d6bbe2b008037397355b0618b8021c167ea07b47edfc208d61b81479405b953fd3baf6568d8feffaa9baa61daf8f406e9d5fbfc1afe82ce1cd3823fd1beaeb4020640ae389a9d0eef26504932d3d85d6ecf8152d257a9625f5e88977a1dd849dca9c670f7067391a06c0c3140ee92999f56d7208773d8bc29b083099fad22030e993e21cb639b87a9e1dbfa6620a8b7566292cf6a4b2732c5c830ee7ad797280a7f3ccaf072cdb21bad9318829641ffcc53b16568ba65c7bb80c7d2106451a72473566e670e2b36ee0fe1a422e1a2efd9730706d65698e2956c3f0e132ec216a064d486a9440cd580a2e7b34919b7a8409cb4c4fa3a7fda750d1d5ba90b615ee1a729deb89bcc2cf46050c7c408a25e18926d8748f6fb98c1aec19143cb5e38e229c2610247a632cb6dc5f0eb1692a866d72dd0ffba4bb42a34fbc21856b689e8d46dc7c1d1e124ea820a2f85df8a2c3dd2b33fac9af3d32377df7c5ac2d03b1a75738770f4c0c81323284e5868d1b23a2a8433e4a757e42ecf4f23e45c0952365895f1d9486d443213891befcd1861bd2f0e899089b97391e655046c9b3173a86da67e99e15715db9dfc5722ae0e1eabb4db07a0cf91a43ef6cba731dbacd1a9e55d975256d09fd721cd16208078edd9546a5c3c0252ed39bc6b9baf52f1e9737f45cd6e9c4dd8ddfafb50aa83506654989c682eb97a7776f0c7797a431465008540df60136a8a473f4316d8ffb269f3457c20e384432289e899b47984bc87bef68790824d8db6acf68d9498bc66f87a309b3a88faca7c7710733dda983e3ec4f7c8305efc34e2beaa72c6470d3e3a5e2c72b3a69bc2eca3c088da8674588b6a83f7b9d224741fa5774c8c20d3c6fe88b8bda7c35556028092b5fdc8b084fe3deabc57c57126d14da5645658a13d29c0a4f151d431c02596a8434a22eec48dcb9bfda0c8568b36a3a038d3b258465e9c7504a8fb5937f3aa3244eabe4a2d8c532247d1b2b203b5d8ce2c12a76a5789238c82b146284837c7a2aa43069be85ae0dda2a16a2f95e3bb4e2af5aeab3d514079ef9661c8c44ccf544a671fd842f83198fda4312751575080b1c768572b08c41a0424490d5f2a3f0d048b6f7a0c7405c1c7e63a2adab82722025ac0c1d7da1ee05adfa4a1fa78f4318e5400224a2f9d82d700c8b2cac6e5054c09a73626439b9704f6f98d88e47b3be11763d3283950285d74a61999b31aa8cb4adebc4c4375c15e433742ac8cf39a00432322b0b81534d4734e8fd76ad509db68ccab07864170188897ad4eeb4a79db3bd62cc8ae4a03cf742a676f48871016df8d035be63ec44d88af07c5f1e424c1b6e20002fed5ee6a498766d52bc1337b7ca392eaa0cc2a9e94c5483b77c28359c0c37ea65cdda2b8ca4872c340921c3166db99e45a4311315484c3afe2c6183e4bc89a2fd99c2e3f9e1de090e17926beeb259ab0c9be77ec77b7e4ea75d4ca921bc323d3253929a8457b09ea9348546d152ff7c75743522cb7cf4cb9347a9250af8745fbec403807a2a928981a58e237aaf23f96485c0b9eb01ccdcb5f77e05a4a9e78dd233e236e148d16d933dc46608544a7fe0f9776b34434dfb4fc527f4f08a1d1d9025951b6ff811c9b84e19a3bb6000e4890c9b8d358ca349193001d7ad78593621614915533adae0ce1d9ce90bfb45c161e8f25546200590c0497c4cb5b22bf1673048634f36bfe9906e50382f31cbf54528fef303156eefaebafc336419ff25bfffc7c447a3783319548049459c3818aa85e4f9c547215391e9ff1723e186fbdaf75b92f09742cc1b0069051422e0ff8c7191f34fd65b6850435b129972cba7183b0b8fda1707af19e2faccc1e52403db3ab2212eb7ad71e86be7891874ca2aab0d9380d6d6ea8396c1711e32e540b9b62fa4d1d115ea526516f03745c3e03808eb44432a9d0900854ccb72c830dabf16502f57c1667ffaccc4eb5699b6404e94e6e373aa8bad97e01f281e7e98e853fdbfe708e995050fa3b8f58c162b9ff77a78d47e1406e22c7d8e3a14f22eedc47ac76eda146a2436b35edfe2cd7d091a09140b4d0b935c6a066eec491abd101b666d90f43976e50c92dd6e9103abfe097aa5a06fd38f7aa88dcd4050284f098c38ec5614cf849345b941ba15de9edc179c25990f516c47b7670704c23433f4db350c909095fb19614603a3c7b01c9bdfd76d6a846d997a887d460f7fa9cf68da09c94f1e526de4f7cfb3c00642ad1785bb580aa1e0d50be5b163cfb3f29ef080d1b6fed43ff637e024daa83dcbe7521387d5a5695775435b1ca4ec9a3f22fc809b9a1b9ea1252a84b1843402f17b811778796004dd40856d141302652d302b27da234ec44035e18e90f2e5ff9d533b23023a08302cdccdd3cf78868a2f40548a96550448cb4c20102565a212330c56487a2bbb1c0f6e5b4d42e1e6898087193eba7d01157c333b5cbd90b3e22c4126a5686607f0e11666d462d0672991baaf67bf405d4f3b850efe02ce4b30adfb2e2258fa1b2615001c0f8648f3dc1a6870fd9e81dcc05794927e72669f3f6dc8120c797e0273d3e5038ba8cea2edacfffb0ca2f10732e42509150d32151ea1b0a3ab0a4bc3a8b451b50016ff8dc435cb3b690085ebc1ac8e5fd912294ab4eeaf3179362f57187b1f7f5c7b5b14edfccada2429062e30c7355c0aa82d1b97d7883fcc5a90338a4613952c242f9851c0b9216ceba7737d8196f5f8f5f5c96e027c67adcf735d238e06552502bb887b4e12356557248c4d1cfc7e83973596d28aacdd0c41c93a648948ace4a73df23188817ac60b7e25fe30d277898899f0533864ae7a81d7da653cc9b665e37bbc6e953d4530fa7fdaa096d0a09cf7d6d37bf41cd39c7a034601f7a762f151d71b84991502b5d304d4f87e6932af61dfbeee2335c28286761e782f68c673ce4429a063972408c5fd735e11a46cb03dcfb25ee97005c94b6d6f0a326d2bcbf8c4f3cf9a65c7689007e89d33cd9f9cf4c9624a628ac1950ef0715e1ccdad4bc2131dc55eb2dc3209649b99a5a01d6a6aadd913425553852c74170565513299661c527832f07ffa5876c84441b7964d307fb569f78ea722bb22283e078a288bff65431afd358cd7226de39aebfa3630a9f6ed6d2386215db820c2e37544b65a30994f8e508175bf380d24f6a390f9a0f915a97f4cd5e1aa6224473c36ef60296f0e3d28fc0eb70adb135eeec7e5390153c609373d9450117fff6a56b1f968bb7a125fee7192fcf2b986d06145cc8ac771202364b2bb5655c38b688c40ea2de25d8b7d1995bbc8fdb28867ab17187ead7ff2101a81872587914f18ffc93a4f13dbd149b1739a7172eb4ea1fdefbdb905182aa218f8350e1329b149e94d696b83dee9767cce7fb2301ef994209652e031a8dcd93ac5fbff06461762f77a923f630b40c2ef9bb1cd0383869800593499f9c5bfac4b242a3e50566db50f8a4abb6fda86fc6c1972ee393eedd0b917b4cc96636b8151e5cbddc19d4bd834fc2375a10556291ee4f31cec05a998a95aa50c24ab7008417aa2b98b0a2f27dea693dc9df8a04e0408e1b4d1fb867ebced49c13c111a98c8a882b7818320a283bd385e9d2d85735cbf354e3890067a62f3fc82880832880f36a3bf99d6635aa4d215f00943fb6a1de5c30964806876bb130d45d342b4e6731d216460eadf588ed6f12277c7f03f16b1c6d514c9dd90b4772fe2623fe254d80b627dbee6245bdc0276416f9504ca9bf890b5a1845e47b7774e4cd7440eebc50a83a625a2f756f64e31d96f0bc1c5c6ab4ae1628f85565d54ceba3f75d61d5ac05f0f8af3546814931042f012cfe02a6b4717160eb21a90efda91c35ea47876ff1e6d989bd7d5e49f4449a4b2120147ef48c1d8484b4ef342a8e7ab96d4913ce42534a874602c14c09a03ba7b43c093249bae5e2548592b7261a226a6d40ad58adc6b02cbbd9e8104c179dc3525aca3e10b94d8e7e796d0ea5612cb4eb17439dcd1126c0ce5f1665bdb0f44909b6ea48094ee9e4ec65a2b6e90759ee4c8a92ae3c34c02fcbbbc5756d2b7dabe63222061e536e1da4a490e951d8197448ca59ff9c230778038323e00f49d4a6da16239dbb4297ddedd12abbca5e110f13ebfe5045a4bc23bc7e6b82a70debada5e51baff825b16852971829b8ee124cafc20676e5ae77b1987d3b882f966b7dba0b660270abf6fbc73c3af5324d255313d04b1d8dd17080688d507a4982b8952afdd8e20f3bfda5019c16f6cda80577663de17550c66e6cd6d65a542ceb0db01f270b45f370bc00b778522844f44794d15611fdfcf82155f90c98492ca5ee7c021474bec4b65a237911111e220ab2ecfb00404b96d326e519ac19139e408cfb1447902d077d6915a22f16a93c9698a51c925260b25c6a30361e3e9fea593ae1bb99af28da2c2cffe49c5ec467c9b1a5842684e5b42a7708c93e0a54eb273bd760de539aa798f2821ac22af744d025c07755a8f6f11c970141f125020ce6a7a8840c179062270dbd572d9fe857ab7044b247c377976f7616a263551ef28f94dc2a02f6a454b6526bf4944c4b76ed62f48c93b92ad60e8b437b6efdfa4732201084824f292df24a8f6b1bd0dd4dd0296d9369aa9759d7c25b6c1cf97cc7b8de729393567fc209d570433e4123b062612056c40ec2a7266f1843ac04b35a22e8434c45b67d36b12dcca1b0bd5717ce1ba850eff763630dda7c3da6c66902a44debc9db306cc6d8d99c9f8c81bb0b83786441f01a8ed4ccbb1d1f5cf0e1e5672e588118a9b5a9e004ca90574a9836899e75a2035c36010d12fa8fcb0164ad7f574bd8740f34a549c623d028ded048c180813a154d93d484a3383dceace7f04d2833efdbd93c98e1b7e451003342edcb75d3b0c963508f3f37637100870ba67aee949bd3b872b6ce192f74c9c92f8652c3b00b8729b9233231ceb4059b46ef0193a878487f6c74799c44cacb1ec7bf3124589d0497e4120a8a0edfadfa803898a834bb53014f1fd48c75485cd86cc36bb336a2574a95cf7058526248da79aa9857fbd9f02a7f4a79e9b7a480f272e85cf48cc4e73cd81294be55bb601ba734500507d369e5714edd3c636f1fbe371ee7d0270afe55b74f9c6d58fa48adc7a33cb7080de3a187101057bbf036bc3e8d3c9f31812fc57b884180adb09429964bcd992ad0ea334958d7458cc5430d05bd9b6b1d160db66ee2dabced69167589ece8f7fcd75e9a3589d4d0f9bd3b692f402cd4987d82da0c8450cd0d40bda5b4d0f5ac9de0bf5507e93dbe6182cfccaa46995622e8d00938d5ba0a3f225a1549ca75f63863bdba40745312bb3379ea8e4b290f7f6b66e490a9acfa24b3140b53e13aaa95d9ffea4fd63bc0c73bced1f91850646b7eb0453c0ae712960874a925f2e883b03b8712ba8244f04a8ae045adeabe35e2fff934f00face72507b76ae0fa26c0a89206c47555bb680bcf3887218a20c29c6e02eb4ea9272a583dce85e5a316935eee5eadc0d0fb03287534dff88d272d17565b25c36f8c797c70c8a9c19b8cccb0b1e006fecd1df8b971c04d27519e890bd05e75bc67b0fc2fdfef3f174ea4b0868f53c091321915e80fcff6e3f7862b6e466734f4a6962864ffdd26100b8fed1613a4efdff588c9e6f75089031dd8d1b44f7ae62f374beb8006debe62d53aba9104df087cb9c2098fe5dbda61eed09e2c4b2f325a191922ad007dbec7b321199774d75483c0e09f8ee134a64309f9259a4b59af4b23ee991dcc62eb1d1f712c13173001c6dcfd5e3ecce9565d1c92ae2cfcf93297adacb421b3dd038082ee0b1e4ef057038eab9b83bdc68ca8a0c634a192149888d175087f242b45f9483554f921a26bdea2f416f881cc12818d8e8af5d07f17739018638ee4419ee1b0b5f5b167b2dc7d776708d30dc073de7c7a9de62c52e210f0f360d406a3e5205af3d6c0d324f2b50be5382c2491d9c1a60aba04ead4f6025bac6cb796cca5081b870862e186d20faffc383772f3b8cbb31010c5b207b27b092c11c2184c007c01ace45c757d8f091dd5e74fa3780f27103072f37a52c65e280594b20cd55021acca85cace806fa9d86465bcc7bc190a6441c78f0331f7707835c00f9d2b42d57ef7fd2c933518b7d441deaebe584f0630a292b7047c01be9125b43ea2e762ce1f376705554e523b51005df0cf30d86adf795e6ff10876fd7d6691537d60dfeb71dd7f09ae2362d8d2befc018831d8633328c25092985c80dae860db003deadb59705645943d9566238071f5fc6cc869a219e072a8eb6f022104c2180e3b357624bc846d6aae3186e2cc9b3967f3afa87687e4db1eb80b10bf6cf2f0e5b93740edfe32d8058846d0d98c9bc831daeb1fa9a81bf78def0edaa3c97d52591d00ed062ec9d810362975c5267a8ffac576a9d3be471975fd4400838ac762f779740e09d5221264efddc6bc06b137cf994ef4af5fefc37844c11c03e31cfaef4ec318011472f3ed60ad40139a5e7ebbe47ecdc6355a198258c89545a574c34f88d24b88df1c64f35afca3e5a38fbec75e90cef48cb2b5162291cf3fc10e6561c5edbbec5e022c859932e918b5736ab7f74fe45a86b161c430703e4efe9d16ab981ef93ff545656bd10dd3b9173d3b1a7f47f2daae551142c3e1e9d24b110127c9fec6988e8383298d47bdd509e087b3712c22a50e13ee6455a68868e1ae32930041fdb71dae9169af18d525332cb42255835a66516075425b38cdb51591b6396398ff70dfbb211e37fa69b6030588b273dd17a6f1c0145295e6164d7bb8a8d815ca1464c9fa7434fafac88e97370b9402dcb667d639548777f7e0bde14a93cc3c93a75e09959f9fe2dd802e05821d30d64b3bc69370ee530a802c90d6de3544c29c00838c755530a504829a1f119608a03a26871b0c97f04b274c95876f017f98aef9c0a6634a9d60ea4f597f4b241927fed9adc02d6f05d168cc28f31b44da21db9ed1776db4279287ff4fba185cdde9172574902e2f48750eb860d855b7ddf08a796a9de21e4f7791a55bc06ee1a50f1052504d85d450dc5bf712a2773322f72d40c32bb67cd6a5edfa31e531264ceb9c72a955e3c4d51dde77e3fd66c372323d26b472c4403d49988d0a5afefad594ef6323bc15199ab8d006ab4c91bfa193dadbd9240467d2ce423a9acc027d7453f0b0382828d1675f43ff820d09143678776e091bc806e36842cfab274bbd6afc3568fd782a2acccbc0ab6416cdae03aa815ed6ea366b6f299fbace8236ade0f20d34d600023cb8d69658de2993499fdac2e66f8da4b0b81f8341376ff0c7a4c41bb6495213ca6bc63289482bd116e94494d9970bf562b60a7a1eeb96a6617b9d46c8638eff4baa30d8088bdc17bbd95f1cb840868794c1344000060c07dbcb34c8e0351d2b4083565f17ad91558d3b2b6c8d6913d0404b296533667d3702cd55a68a3f80ae56e81704f23aacba083ddd010353dc07b139702de3bd58288e848f353a6a7eb8c027e06df83d92274ce3b4080c056b1a4d28ea67b1afc210370139bc14698967d4aac8ff76a0ce376a0220afe6fc35ef8c77ba1223d6c99165580a9e849016c01b70400b8aed6876f197989447342b9f5106d8b86eb2aab5e8a688364b2bb25618c7d246f40bf079682fb9bcd36ea2dd4dec51ec47e4b51fd34889e8e1fc464183768b44fb3a36b14567d03dda0312fe5be04bdbbcaa947431bd23f947e573f6213681655fef0c3566fa0bb82dc773281f8c35b0b40cb54a4b3ea7e6a4443224a5034f6268071b4defe7c29f4b8d1a48d6ce212d9a8f21db1ee6c610e6aaba6d4463879da3801a9d1fe8a581bb3090f5504e2b5e378a7a154933cd84fac394fcac741e4da49f0f261345ddf97302dd2b781b8602d2caa0a91267452fb44b03dc86625ab6079b79053e93d36c62c212a55114626a91c12e3aeda46ef720f917a7612c096177b2191a72644dec2c8004206b4625a82decf10d8603181ee9457db8f1af318fdb2550fb085d6dd58f0c3fe15ac9da8a6067b1210c37882aef824200442d8054ca05e3e331daa6edef384ab83841f64a75aa53478b73b8be62f7b2bcbf635f763ec5d83201714266cf84269beafffdabb613d3c18429bc0ee08344ffcba48b9494d098eaf3a9800f58bd72c8b0a06c71cdb2173dc9a985a5f041b3478f2d3a1496c9b58f1258c7c9815352411eeaa3d412874849db0d772ad948171a9d0b5b53b7fd757f87d3567698f72c59a6ed30a2ca9a6b2992c116ba926299ba381811f16af28e3dfc30a307f1f51d4d8e8689b5d83396274b7b35b2aacaf17b0e390feaa41a378222d8fcf91846890b20f21fef92ba663a67e43e6efcc7ede963e72865043c93266efafc6046064068881657943418dc39f11cb02945d4c25da0d4fce441dd4f0857fe3626445ce26f1b9021e8eca4bbe2997c2cbcdc1019837594a5f0042a7d9d9b6c40bedcedb88cb7af89fc0fe1dadc0db5daa07bf01d4509818acf0030993c876431030a5979403c29f0331e4d5a3b9d543940c4cae7a0e7a23627ff2a9e23479b86d11a2e500e4deb3463c09137824840b435d4ae203298b6879a93fb27741834ce8e0d99ec8ac39a42853c1f322b2a3f54b183e08683571f03e1148e88586829c0d1fca925d735c15c4c66e1eef2ec2fa04e9b2c8094a5195703c619f4430a47d2c89e6280f3aa0b845d9dbf3c236f06adad99d68e453b02686144f2a05bb20e01eb271432325a650d543ebbe76d9294d583009418e0aa91541af1b10f55b8649a4aaa657a7dc6b7675975e1b1d0ada7e038a8a1805bde04264d4e54e64127b0bb760ff29a0996b9c93fa962ab883c5657928f4166b517bfc49330f897402aac07c7f20a8c48f70c21b7862a90eb8c9e58c4c10de07a8fe27636043bcb68181f1e9ced5e051f6374d05683e8a4aae413645a429d148e63f7a8cea9944d19d18b83a0b6a9c921387598db49f63c6a301f1cf892b013713cf7db446f93a4812d618c8895f47605d56ada68ef5e69bd39655b802a2a9cd363f8ab0dbb28b906f690de186feedde7b97a2526769092ef8b45132aa2e0c4bfda281b366e7053d9279c20e7af5ecbc0732bf76121128acec470c43c0a337b5458b66c2aa9918bba570fda6732c6af2b6771ce05bd0c35cf1af9fe75f607576995e71c13765b689fee5730f8c2fe10023f3ff4a561d00b6ecc955ac9361c6d7b3e2c82676298d4634acbd2ca0c78e6ad297b2e14b67955d8d4af97e562fde4abd654666896e4caa2db15067bc8e1b1a70cd7976d1dfa3988adcfe8a7027d0bf1fd5f961e743985fe6004a551021ff2af40b496c2271185cebc19e227da680423fdcc3798e15fb5e24d7132c3b08a0353ce43a13471070f87d03209e87153fa2408e1d2cc082ba437550fd95ffb744ffc1d079ee0a77f2b26eb91df4989bc2cddc520129db2cab8d8d4ff4cc6b5bb6b2ac0e1d74520861114c2166ec8fd29b091686775f720032049e9106fd0f5e042b10621281450908d8ccbf599995d3396cc2f9cdeafac803962070d2fde02e4b179120a9d303b276ea620ceb7cc9537bc47468c886af415579d2b0bc8a51e4e7bdd1f11247154b000929ddfad0c2331a58d07e5562f4fac87ef604ce8e58af89c9e45cf7f78ae5e79b6433ce5355dbc9e0c08403dad9584982af5f4000426e920844382f591fbae187e3b84d873998fdc7723e1bb0067162899e72efb4af44bd1ad6ca51608153e90118cdf43934d81cffa6b9d89883d872a5e9d76222936af241b4182101fc3e426b27761b1de5605506efd1eee43032cb2a2033d9731b6439cc8c204640c9dd171c0262a02b7e3daadef40f3df52e89eb6c7780d0b82e56d4fa6fb68143f6e423141a7650b1bee2402907e0dbc079d33bd25a374bc57ea994a97d0c58c79a9582f349f235b0b011293f0d188c8df9457295a16d0f1b61cf1501c98f7bf6ed118074a6d15076981b1b3975cf966e9db4e5472b69740c1224fe92155c80a3c96b0638a0a240c222b1ce4cbecc59676f4e09a30125dc35286016d0781282d562f0ce5abc288416045fc0baaa899484cd6f4eff383c86036eed0d5879cebad39010343b266aa626292da11fba92b6ec25f1c48e7e6343e8d2f1873ef4fd3c6cb981401192fe55956e9ba6deec0cd4685dea54ffe138e075acea5745a7ad9a1af65242b82646dcc5a4adcf144c614fbcb06df3cd1f655152ecff7efa09ec8a8c29465584f613926b9df612e22cddcdab23cd7cb82791858921794869064da0bdacdd5e5cbc060d0104595d655af5db9b9b3b8d19cbc811cd80f051aac3d2a7026c171d918eae440e78680958bac2caea93435699f3f40a368eabee91b17404b21a9df60d0c7e8cd11e89e58804f1d5e5b510c14a89a2af87d04f4ba3a39f0844782a50446025101a104637d0f9b2e13f1a9ea26a3a570d605f58fe32ffebb9de3a4830c436843888e6318a2508a82f61ea838e50528e12c4b64d85819110f655f93003383634aadaf92557825feb83f93038772181ba4d6146a6fc385e04a71ff4f53bb4b4565358d5a86537c01f52d34f2df495c324b3206f4942a41ec49135ddff20910edd5ed0567af17f3973977722e61883838e4afbcaac76ec42a80b015c4fc5f547296d186ed81536897e730ded1724e603a8ed875c485dd9e105d731dc6ceb4cc7ad81e1d460709b969b9ffc43e111712737518ec2440647f2e04d6f18d983f0120897e402471ff4ebf67343f5668d6840876b70290dce12289708cf189e72740666bd38f1aea884007a09ece8b78b5f03c03871d363de650d914c42d794f285fac4130b07b000d6a739c08978726052b98adfa89d29ee09558a57ef074f1f2c1c171ab58d473c2599714ca91b30855dac9e0a0d78b1485dd1721fb92be80b2f0707d80959a761727cabcb47995af8db58d14ae32b68d60d4ab486570af0bdee626f703772b385dcea58fc948d42416459c2f12f286ade8580cc3c6bc751e31fc12a9b481c3afaf6dfb7e740504c0b2e5412ee79bc064c8437ad015a2571bf60219ef924f2d40313374c1a3688879b4388cc993560992e1958b6357ddc0aafe2455a6995eb2bd403c0cc1242c328f221bcdc5f3a8236984373a45f20e31478ab4b588538afa3ae12fe6265c2fd6afb509a6e0fcc545de12b3bdcb6889c3f1f34edf839d1cc83edd395c3157e91e6e01a3520baf184fe4a57092665d4ffb1c9e920bee40ca71cf29b596707a7b451a0bc9cd30ec9745cf9722a1012f79232d5fc0889a50245cd581213f9530e42b59b72170d7c195e3756c635c320f51f0584a47a79c100e6a36a23654bff2a3a3d772a407fc4f59064c2e81c4213371496b7b8bd2306751d0c25c3230364850d1036635582637d1954d3a11781f327e00ad371e4509628a37569d0603d0e5d9d29fef818e5dd6d057f9c0a262953b8a27cadec9348165af441a4c2ad0cd3042f1e6f9305ab4e054b3ab38c3688886368af0a890963ac15fdb34101989007b8864c4954b65983dd3c235d6b8f322c33481586c040d931c45f0044e731593a16c141e524422d0e61de73c4d48962f12c0e8c1ee79ef198e95b7a63d55d287e98c5a50da1476f00930b94db456327e7254e176b3f6558fa7131f0a365cd8f5b042c9f241f6aecb75602c0584f90ad5757316c76ff9fde88d3977bea38db22a0d86c5ea5c74089745b7df6655cbe4c8246c9119c983015a249b648916f5786a2ee1ed0b134c975d6beddc17063a5a84c267f8414afcbeae702f8f0a8c9be4a21c4cb67c5947504a9c7aa3010d523c5ea12177283e4b1114dad56e5b013f1dac20cd540e1827e7bcf37621a5700e15a85916ef018bda5fb8b5a0c2865bdfa3f2da24bbdfe35fd2f1830e23e4fc37eac40cf85d9576147f46a9687ef25178e5418b8f7fdade3a9b51a0a5b5d0de3fae41800574eb964cd0d5f44a2d96816106d4e76202ec6fd56e2dc8fb2bb4517385f4254c724b9d08a325111a22b4d7423b153aa5e8158ba6a9c152d0f9b3f7c5386aa5b551a44241c9225c115a1a849a004d85f1ffbc25fd0add587e38ba148ae48936ba325b2fb3f9915572b0206869a82108858a2b6de7cd5bcb3daa74215697643a0b3d83feeed95ccdd605174e0fadafa95c2a4d34c4d94c99e09a2520748cb438bd703c9800188ba044a1a9fd5dc52035a62cc6b5d1a3b0ab6c453214c859e2e68e516530f6047542bc8df6185ac34b4e69a9932a19304c67d0d25d2e455a4b03aec6212a93e19a0a68efdd1a13354a23d8f230e25f5a9fdd37483bd0c31bcbf649884346ad6a6b5a9d5c754a3f2aebe2be3eccc52286f917f00d7b1ae8a5262c308dd6b22d7bd0afb05184c92814caccfd4124649a92c10dad871d083d87eb79e0206332f6120c03868b0d26a620ad24a1f8029e386306a51c0a4b465c643ee62df8550baea9ec3f07bc1e634fe52a4e2625c00fa857190675a7b3eedf75878c54578e8d98330d23e374221192cb987f46b106bd57e620260b56101aa07c4a0aa3893df0e252078a0749a393ec875208647cc6bc083d41ca54905933fd2f66d01bc97576b18a57821280394ead1e547d74f8a741825292b45230e54a3c93dc820a2e6d911e40d5aeea8c4babca8e9b54016d5e0a7b38f10d4283a67e4e09f82e7fd191283752a0bc53618c34509fe288989709d6ac0d4f93afced45b14758ef670ded51d05043fdc0451a1142d2c8daa112a3045b028081b22bf3b1d031f986869944d4afe25a0435d95ab36b7a4bd64ca1c93eded62202149a4b8ac98bd879a2dd345530a98c968ca305f5644711909871f33db7c69d175980b2a205e7de1e580e4a04e1a2e8293936cc2034224b1dda6fcd77f65e7ecd74b1667d54a0c95b66a07ed291d95aac62b118899e34badb54c2ee4a3502b26bdca62e9227ddb3b416e9136c469c9bfab4507075ff06a69249a136546ba081cfbfc0f983d648529f58485efd49eca9359e4207c750b9c86773d0c5a0f47992665c5041dc319a264ec93ce8c606aab4992fa4b83cb2a8246e7a7ae5cdb19700a93c3676be603249fa7098c7054168cbaf7a507981c31dc7fec407dc9faa57cf602ec01748d88c1c2d1e41e01959b4bead80c90a5f85db166090ce2135dcd34567c532d670f14e1015e6a9d95fab4b905c3e54677ef4d6506e9c1035cf07e90d78cd2b1f3518d05227ab9517a87f30c420ae825ab9c66febce55bcf74c8b1159a8380f7548cfb5457530c924903b3168aae66b83036a9247cdecb1152c74376787f0f9317f0a399cbb50185806aab6381a5a0e95a9df3e485b84b79da02c69dcda702cb8df4f7d3919a746b3029a655e1111131bdc42801179b381dd5b1da0aea9477b73aa9520b9865f8539826f16013d02af8f3a93f10324141c6b47f64aa1f6bd68133d14d8d8de751c95b0d5ecd4d8afe1c2e67feb66c9e79f7a9daaa801b45f561733e82fa88261bf37c9cb6eac2cbdf9a57d211bb4f754d2f807b33424f0719b893f9ef59ba4dca2073e190da5177ec1b44b252383eb4073e02186f135a17cf488981c486acb7cf323743e887f671a3ef3f271674d6a3ef1e473158857e396124b1ffad7625e10ce17b18365e49acc80827cded063879ece88548c10afa88cb4b343433a11e052d658ecc6085ff52504c2fbb85d9cc7d209e3313bf39ad6fc710444efe81317eea1142811609dbb290699f3c94ac7aa31d170817833d74a1557f60bd9e5c29d0038a7fcf540aa921521aa1761ed932abc6c69cf0c9316957a62bc91364c7da99cba0c0191224367b7919a15a58025d0f99db884a4043319e552322589b6e9f9589276d49f2471763c6569e77aff870ca5cbeea5539bc7e1006f1a078d2b4582e6d56b470635c85de6937d64f9a74d83ff5e75f6a11716f8876ab05382ccb3ad0e42536ace05b56ed67a7b9a220c8cbdc9da742edab8d52910cea621bed61acbe79127a8a53f70973da62ff7e204ef13688e96a19924ae1c8f243072ef13a418ab396c5b47d5d900a08f9667bd93d3c078703d2ac8fb5633aa0a85bd1b8ff09206b2d643d28bebfc10140f9c6b4cf44c1f80f5c1f0bae119fde351a5d254980d56805fff9ef2fc0e3287f28dcf6f3b334b8f0cb156399f806db6c9e107d40a1c9915e1b27bce9874ee03703061b66cc1025e80e0082c68eb44b43a6a8c4a85a864491d4e47308c78502589725969988a6a94438142b4ea9795fc9074657b21919e6660c85e8cfe3f69682642e5c337dcd0935e7c21441716bc05f50b1589432a3ed5b0a30cd2bc3fb703bd52957ca85e1e817a67ba158e790029726bca6516ef278b4d526c946c97f61350550cc5e3aa311cde78dfd6b073f95043b7ff622a4d2c56a0682c70d176a77dc1c8cfb8cc3f47705c3aab9699fa8582b94eecbacb5fc26ff9c14e82c96814fa466958078b249042cc5cb5a26d9c7fa93d648c630c31a81c2d9e25761eb0d765b601e33880c9c90e252899b8770a5b69c879b1e3f1c8964d8b93f112365fbefedb5a5fe7c86635fb68b4e51b8b41b6318ff538cde4a246ee66f2f3ed500290b36ec8f350534c27f31dc9a0bfbaf9fbc1f1ef6c88b629c8347bb923c13d8e26e1d8003600fb62610825b6430f58c2428c0ed42da963af2f155436b39e529053ba0ed73d38f51f351f440fa55870ab5be2178801649bdc2dabbc03744252c36938b6482dc4a25e35fadac458fbfa46bf6e45fc4c79c6d0fb66f772f75985504b9c62faf71b7ea827414c1c90f57d9c94d2adbbaed1b4c2914f512654557563f723eeb427dd7a091c0c9fe8adb724977652f11c2f24cd6d1802a6620d4e5c32e43113d43fe2387c00940b11f546b0f506f9f29a3d96daaa99cec40bc5c0f1571880e9b7b409ec2361d2860d547eacf2ff4ae51f6864d8319e34d3c75060c08bd267749bbb759884f777a6441c19a4c8b09f84535f4159b33ddc59e10ad344e8ab14983080c5d72db9e138c392595cde5341aca4075388271a32c1d0f8ed0d3fb5f9b02fac54c1defa6e633e119643fd34f20062cf3d5b45c347b8e79e68631a5d977080ee6fa32d3c303eceefdc50cceb64fbb411096048b154f740d173afaf75ffad438e2ebb14d4338823b4a17cf858d533eff7a0fc850b7a754b324e234f6719d1ea3db6371f7d3835fbae36ffd11e9cad42c584b3a3b77d4019c7119a0ed542af34812f816ed7436ef97413072fdd77869a868c76d3f4fbe03166a6921b7b9dc1a6ed83f03ff7526007e7bc3795961cbc46e2441393fbcb8d932e7019caefee984c5fe323f6384cdce714a8630829dcac07735f543e1c7405aa7901dde9292720704fc0d73df6ee5f8f73011e8e97675273229b4edbf459181b5edd0df3bab60be1bd138ea09291a5b872d73609aa16baf8fdaa2e744616840231503a160ae84643661371dcce5800f43ae3bd70ee39538bc3934043e955122b2ba0e80a74a1d98b8aee71f49856fdfc0e2c73bd5ed0996cfb20517b72446412c833265eb4797b4dd8c3492e9dd19e4195cae8cae04b09336d56b27002d48d9ac59b834d42bb0ce7b363074d09113fb3fbed81f14e00b8bd7080b26aa525c3a9a8bf4eb3909640b5a9fc9d057a461ce0df41bdfc778c01f094806a8067c190c6a8a6433628f644ac41ac22721d1e4642e4d15a3ae61f1fa16c4ab0de62edf6a4e2b9432ebae14ec98daa407fd64e0994337b3294864358bd6b73f8eeefc17db234ed86446228944ce8f8dc62a88e644609062db2af1d54ea95a4d7d78b6f806bffd4003648a637de8397daf1bc4bc6b9506ff703ca7bf8c4c1b13376a7bc9c358f8687f54d111614ee4d2e97e466ba47bdb52dbde7b42d7c0bd24888e888a448b5d53d9a12a62b7a7d2e9f6ff5f0c636a567ffe5cfbf346d95d3c2f7a4d030626f7c9c5b3563d948c9862eb34aae84ac24ff4ab69955d2bffc383859fbb0f9fbdd491f7874d9a521e6b0dd9f8bf61bc0600e27847090c14246304dd1b8b146ac91a20320f785edbf3bf24a07944ca2bd5f8770a6fc6a2b7549925518ccd32885648e646c65a51c34c3b85fb5a0d18d0d703d43d6c73374b4ff7dafa9e7394b4d891ffcf4f33977b577b6a75bcc5a1779b4c450cfe090edb8b05683b52cca232d2800bd4de9f3ec97b2d6ae502cb0121f0fae1fc04c33969015058fd5cb49f2c6310f67cdeaf4dda52e3a56cd27be99602e8a034164c79a9e933a981799db4a1599d2ac9cd4ff3cac28e6a2fc019b27fc68ea578d62f7cc7c2f0899155746f32c22f89c340edd0c5c9df886c4ecb3b00239a979ed84be2f3e2d3b1cf371860dad50902209ef31e736c015886893331f8c1ed7d2ee42560e0ffea71499534927a2b156ea5b3403a4bddcb84be6df8641616cc444738437ec8bd7ba70901d5aca4f94b270d882e83775234a1d498b32e0300af1cd598bb8d8bc925b8185ba61a33d852977ac0746ccdd576034040954a2cf5e723d44747a8ad5db40abbe7df2c02ab56ad74150e0221799dd01690888cd1ed202f312dc311e726396ac8c2944ecc5229171161f24a7d4255612db2c77ced384cabec1a7da14ef02b52e36432392dd6611b362787ae80ba0249215314d05f2b04007ba52cde23371bce2af875ff161eeb179f871130bcde2d20f9d8e27297bdc7be9b0f169edb9c049014433d366bbcbae648495f774212c1f22da2df003f6f7d10730ba418b4e6d679a0f82fc280499fd537022644bb0ee042fd00fbe3c3314800aebebd9ec82b46315a54a746350e7e5038de1886e536aad20ee6e6f551f68f39042987380f5d0f255c1e59580bb433eba7c70d019f84fc59aeb1cf4581399644523cf5e63a811096a08308b545b8ebe623ccb828c759a685962e299875ca435c953265938df503306197f9a1a40b3d63bb4a0b6ded86db8c5cc3d3caec9c06a727be363ca48c8cf956702c46b8ad7b5a24b256777b5cd9198ac64d6a986b422ff17084d68a020a02ede9910638918132a84b0a91522d915da8c559f1da45b2324d6f88bf3b5e5ad20fc7cff44c8538bcb0122ca467c0889176a19500c480f9205844022a3c6703aaf99a87931c0c9a11659f1a59a407f366108dd9a208a512240586a14d3bb4e2875e01949e345ce6225ae4c0b3c7a4b98a1355227c8a6ab91dad5ae63f6ac47f003231b82a1803fea5d0c8c3a738715731051335ee6e0f8cc79c3662fa9b0e086efb5aa46846455e87500f22d4d3e18116c4ecc1e99278825b126c35304f08bb3d8237ddd409677c59df7ba98f8113800b4450841afbaaa7414885ea5560d91fcf5163d83bf319575950f9da09a137f8a0aff38b381d37145214f5d2c235c22839c87654448fc9d280be2401fce9827cb8edb920fdb7b070ee90202607cecea3eb9938000c2fde48f1a0a042c0c26f81f6d0bfb295b00f8b7bb3f4fd39b0590190196ac7713df1f07383e01e89de927c09df2c2b0567e41a3c1a3088a443442dfb1bbbc4efb6b97509bec496d947782a016a3978282824acf5764cd5199d544f3754899848aed7901753b0c340a330f4cba3ddcf498ece354a25ce7cd6223e61fada0609b7ce8f45c134e42d917ecc77ac4a29d5eb56458716a5a49c33ceca3f2740844730a7b7300a1dad2dd3901d493a15e2ce2fe25c1a66c408164ce08855cc84ccbfd4c68479079b6854c31d0bcbef2d41ff80f6e3168b517224b03590b5779d7984c77fe3d34b54a410383142cc5e644cdfc42b29c71ab7e3dbc04765b1c25e1f87fca4fcb89d5815cea918e85d0e8857e70581fbd898cc6234f06d1f47ac1d1ecaf5374f2b0e6db8ffc00b49a66a15910cd83888931619f2beac4d1dc0613ac6be38bd0292bedf6f64dc467bd515f7b77a5a1fa993f0947cd9881cbcad329aabca5bf76284bc738a0e62a7147294d7b22da409239b32c24b2ec0a6e9f95e9858b13e5c85f7c805b76a3cd5fb3b057ada016af51f38a1925de4411702a7ad6c7a3f036da0dcc7249de82fb6eff81e84a5dd8aa20cd5f02ea36ff062d2ecf872d57cc06bb4da6dcbf02137c2aa2162fe420abef8eacc0d0a072e81704bf0d408a0313745a24524d230589d98518da20a344ac0fb7a81c972e817ece4b10e3c46c10093b217de755c85441968fb9e35a261d6261892d8ed3165c155b7fd32b317934c91404ae8cdde30953f7c5b1ac1a3b4180354a95cc20280d9980f91d9f389d85f142a4351dea9c1b9822763a311fcaa55667acf2c445d1cc703093b611a78c992670b21883a66b9d41587de4361a9ef1e4ec93c99e532c264d4cec72b223e99bfbf22df61ec1af2063c47873f066afb5a6e8fddb3539d01efbf33b213b02a7198bae81fee739e635e77192f60afcf1b0798ee7ee9eaa73826a94f5b6beb5c2efca88390ab549cf6b139b3256a4f0e385396c6b9f49bd6340ee60398658c65cd23cf202ebd2d9f93aa918b8828d64ab0454642b3c3cf9076324904da0931ec81eef835b55a00c5419334bb22d21905d22ef25696c8a304ca4bdd4f90ef14cc5cafda2c5959a72b31e9a8a1b7f6a6f26dda14cd09492e04a58389912c9355831a7c43ab4db146fa52e0a7f1b314bf5d58126482c69c35f45323472246fbb9f05bfed049523060e1e9bc67405c8a406fe0d3d26f4d07a1e43656e7ae03d7a1965fc1039f435b2834202e57a4ae264176961f5f0d5e22f75e840d606c31df131447f43022b95e0333f09651d73d21fb78954053cac405d59726585d46c1bdcf1c65c1f78b129aa881b08c40bf961a53ce65f59516c1f5f88b66d8f5047ab7dd9c51f0e57449e689a139f8eb83f6a2f0cceca9c759d3841fc7e1392f6e03d4358fbd5732902fcf8bbfa5bdc10271a5482fce5ba3a4575431472e09b3b14937d807f084546881704723a1ace4c2031573cded232488579206891ac2940340aea92e0643c26d362021b1e354961c84e8942251ce0f3190dc8596e9a78efdced7e88b9d37948ee810098249c6b43f43cabe52ded088cab0b2b29597c28614cec7c36945bc859d4e7adc88963e9432a979a45989e4374878a9f2b40cbf23fc886f30e8b53ee85574418fd7a98421f187b21fb1206a21f820686b597b03b3c032dd2f0b891f966be17438759cb9a34f21d0771b0f717949961476bb88fa8605a4251af841962efec65d9a6cb4474340c2ca9d75266e66357840f3729ee8dbbddd259c3ce20c2252b6037b2519fd6422c32f03bf6186c4d951b6ccaf08483718720700c393896de944a1b3fcd2127b2d43862b43b51efca066a50028c6c548860160dfc31952c3ccc89c6bd67682abecc5684b8c99a95993a32c6de91e6a0a485c035520fc3060b3ea6cd237e0d437cdcf727f3d0dd2375e85b736a2c84e81c13e0305e3c920e36454528d7f428a5745c81d76d003905bd074d9550a991e5aada82de2b9d7f3336de5536d0251330764a8a11e94c88ec9e36485d74299cfbe9e4fe98be9d3bd78e59dbebc95cc564f25b7ce13a04675b1b22109a7103db6bae7e7d86e3cfc67b88ab3d49de6737c0cea22ae046cdd86428d36c47333f6fb15165b9d75e219780909a368e201e8ea4ba1c0762d59881c2da19bb493f528e15c2413a97a7d7a6a5beff6bd9f6ac0d32a0b6e209be3fb0dedc6001b0b1b00774d68b94fc8b1422427c28f41f0b49390db48f0854206037fd741bc736513cf173c7355ccfa8d9f993633a7128071aa1561e23226a140ea34dce2347a8d700ae0a207bbf4ba1af90c6139a9c2daa6bd99d21a5958b39e46cc1ce4684c8ba8bcf2cf40109c0f15b48a023df1c02a3e704919a50fa58464b6a598c60f8b2b6c4eda4e0daa5718b73016d710d6e18c7de337e090321c9087fc70f90a2061a1876749e896849a21f8e8a1d5a80e4ae8b89d1cf4f7f3b067373e8f110e4440eafff17aad8254475071ef62c315d681a57ff5fd04c3030640cfcb738de6e463e27b1166f14e39f873f754a2992b7b6562f9db9644ad74b6789c4e0290935c526a7dc2e40752b165924c7742b80278cca9c921d07e93b4d8801095743011646d666f9327814e0beb252bd07524cba2f25aef03e6abaada91fe6fc3a55dfc84312040f4290b07797ddcc0f060cc8bcc88048aef7fd3eeed89b98b57d2361c57dcf40fd914ef02eff6c06edc51299ff47a88552e3fcff58b507c6f2898414acdeb211cb02c284f302c30111974473042895b042acb2215ed9ddc4bd284f0e6fdf7f4d294671cf6995c223f6f8d670a6f5d61c002719b4c114e9571c5282f36382a11ecd8638993bef6b117dcb5ae06daa80ef6a5b4104af00feeaced34e1a43a073d2904e3db128564b61c2d442affa47cccdf018d0860ec91182e0566b6ed4215cad61fbb89a1410951a2ef6def6304db2ef0c64d9b562c31ff9438ddfef93cc54391dc9f0402bd89cfa44edd0f3c98772fb5a13eb8fdb3220dba5faaa44bc93d30438eeb32cd1e268d65457defb690586666294a86b6b66457202e8bf55ae100bf9a425e472fbd9fd7973d9d880484023ff170f17d5ce504806482a3457a01509220f25745bc0a5167514dd4fc826fdc6b75ad270c4357d10e622226b7615fd60d8a7bb5af26135f998733866a955d1be786c9f0f2e526f510cdc53a5f482aa6666e4e90679438d728c233a1f9c784440900e5c6b1cc4f8c243adb0dfee3d68561b0d9eb573ec4eb03070f5c261349e9f74c78d5bc6f4b3569cd668b6f1eded56b63938bb6882fbf93e1f37431c7172ea3c6274ff37ef3ad37e47e42ed9806e449ba9c64915786b4a702d357940fcc89ae5a45898ed708f2d10f3de7d3001f7989fe70e65b72f0c85a18c190b05526e74e3ba36a9d919a244a4c7a44efe5055499316ceb1100b92debea0cc3a405444c6a7f21125b71e2ed7497cc82bd63e8aff86cfdcf023976c4f82e13a12d3400543a3d54ea92a4de68635bed3901426a421b479b52d7d049be1224e0949668555228d8d30f9167d983ffb57cf7498c23555efc2ef3e95a67ff592f158c1d0bd760d2a8e3f1eeeba20c2a7fda8d4baa37d977ac00b2fd12dfd3d5d8592012aa03a9df03158f7e865fc210e15a1d458d4618e22a3d31ab73779cf2107bd3845807a3b86b373cc235e8055fa260cb0dea0bcb619d2c64b268b7f803b8aa4973f443444462acf708218e223ce31b4026b9af2fb152add6f1f4574db496f95bf9ad8d509e0cff6539c7cc8f472f92a863a97ef4ad552ae62a56d73b079a54aed1ef5e2267ef4026be1d436f41ab883c3e3a6507503677a3ec676c33112e2f1c502c485e62ef82b6ef146cb5eb98dcda9e68a76c3acea61d92890dbd5028af2dbf7010ce95cde1a837e42a5b6c558f1aa4716ec231a0d5decd1145aa3b1a4212f772d9f297260e11b9d93214cd0f0f080cb7808290f1a2c5c85fdb1a2ce7a811372f076116034340870e9fdec5f93d0dbd2d0ea5031de26398497353f09cb9ca624a8836d5810c0303514d9fc6fbd17165c09959f9e589e2356cca2aab5f7610d1911bb7d267f7ba3f0fab8222b13515794946b288653cb49d71a01c38990cf816f43f1981bbf0e9abb585522d06853f10d4646dfc8b3b8981b265897c080bcf8c73bede91817a5c8cbb1256b936386d8bc50314e1e9b5a4142c82ceab88a6847649814070123febadb4f214fe4f520981fb15574c5f9f7cb929c92b5bfc0a61dfffefaccaf23fd36502982035af9766777a18e5e378cc6edff2d7455b0516745a02da7a6431605fd4dad44045a8dc658844b49160bfd00cf80b12226ea1f3168b79412d784b2b732c244818bbbdab4ee59191056bb627148797a1d2f31b028f30b80225f830ee37b7706918ed61820ed4ba3886cb737311e5a66e62926e0827927121a076630f9d51ebf7568aae3684a5694c108f351ae6b743db73a613ba791f824a5b565439bfce2f29895e65eaf19502e5f74447509649111e04196006821973e52ef78363e9d7995e86f69a7224f1fa987ef1af01aad41b3c8ecfce2defbb59ae282057150609b4ebd3591a6e24e8d6e4f5da17992d679a24671c2288ce00b188a341c94be8d390d164755ab093ed651dd34c68b9206bcecb8e5c35f5c99015a50f3bcb3946405b599c31105fb169e0d5ea7211308c626a1707c2921c10445eb52c250b10ff12dbf140949d9c1b6e999d1d21028c00ffe4f37c30b9130665f723c1f3e995ad4dccc5ddc27778d85fa6c19274bcad741f99de48445c3d7b604cfa6c6d811259c72ca30ebf5d4e40e598417267fc3f1109c4acd23eb5fe019c28ffb6034874b2fd0b9e2c4a30f7b466f5863b74dd2acad4b3317d6c4a807d9ebf1472d730717c703d753437c77e94347689da52f384eaffbecf92e66c18b902b44ead935ecb0214fe0f46cfb4cf8e68518c1dde4ef4c7f814fff2f69e523a20b6cf431b53fbcc21b47cfc40f39d50cac8e532cf4d5625fd96cfe95d68648cd1a8c2e1b36843265f94a36d54ba937b254820c29bcb4f5ab2703da62e70c078b43f66cf760c5d9cf92c8d046c78dd7b710e57691d072ce5e92fc974fd774c7f8ad4334c386708f3216a9e514f5a288ec5c76dc32ba5f939b98494d0ee5dbe9c570b8c821d4d6919169790c1b679fc7edd182ab2cac1e5b0ebab5c8914c55819e7b99e022579742a100861a411673170bb3988d350b7872020bee3f82619978bb673498184451a46f684f2348741841e64b0f2deed5d2405d1ccb5a8f79190fe434a0c1c0243e291339c4dce8c745aa29e20ce30d140ba14d1d235a6285f97db1c0d01457914abb03eef7835ec542a3665bcbeca95568d03f3e5bf6dba2602402e67643bfa4f8293142cbbd7f748b4737dfb9225a096ae87f6abc331e6e758a899c7620b480cf4e81b18352d930425673f736124dc40653919cfabb75d3b04e63c140b2ef567890c53114df62a47f9469f47fa54843903382e9c9e0162f740d03c4c88695bf94725c94690a173ebbc7381b3ea1556fa3d8cd7f1ac5d19427c3ad79d621025d1d35fc3a90c0c3ee28628c9c33253c157a109e299435119b990a4160a7de360e2a61049c3930f6c371c708dfb5ebc278eccb22c80edaf828889fe477cc7d63e1cf662cbf2d80f2b5996ab479c28060d827321baec0309bb5f9f9681cdfe5d88683ffdc180c16fd7c63f5ec6fd92337c7a46ef1775dfb4a8be659e623089e35087540fea07c0504831b3284427731f4e4b3dcb8203d57954b300fd5b76d1c444f16147c171e0ad8c406b0b0c8a04ba6ca1877cc83310a504e49b4e2ff352ae80f67dbf6551a512ccac8b8239cda5b53a62c5d0def05dbc1a489f1049d79796a901322a08cd44160a4bea0ee23292b0d943b293ed8d0caa9dd206a447c0e6d7f345f673bdab70f7c83fd97f5ecb87e363b9fc837504403c562bab2bcbeb74bca54264796345a432867e73e458b41923145b1012f086c77bf3c9bc70041c8d3ce559bf712bb5b08a28b655618f936df232b22fdfe362caea9700c7a9419cc3b80629cd510bd8cbddf55dc79f38a8ef6523012d767f6b8364ff3d332a640d5c97e21c16e2cc91fc46b143b74151d9f13d378951b0ee1bcf32cb397e06e6b7d2f13f0e68183628a0d6dcdb99867ecaa42b26fa3094de7cb654cc7e20a830e6d28eb0e258627bd7b0a1e38b85b70d4953699707099f4c69ef1843c27a30c22f0a3c6d58e376428e02f68e8f5f16a3989a0f2f3ada39b92097a51ef781377247d09b86a8761dabfe26cf00cbc7903779ab9675eff7b5aae1e69ce29acf38ade8b63d75dde74694fbede40bdcb6db5cfb011ae8897811b4e44e6c90df3f5b700bf095df8dce33285ca2f917503d3184d70e0c6e4ae6f4ba244518f145c656afbbd69b4154627211227a08195eadde689da7a8067e80c8867591ae1af5ce435502d29f57796728465a8f82be9eb452ee1c68e7cc6cd2f1218d2f5eb6c53f7dc35ce8e1d06561c75a4810c3c58b7e6aee3ee513856a44258d8f500319e856a9c0e51d547e440efe434b091803e07e655b39ebc42383f56a581d6318c51979eacfe8744c5fd4da80cd049f28271f17c6524341784a4d2c65f273ce5bcc829a02173e570b666ba7081875468baf9bf8001a8e389abebf2c664932e847305f5e7442bc01a930a6c1d8fd02d4667cb44a281f28be40cbe5a46800c25490f526013d9d19ea6956c2431924f4856d3bf97764e848af61e7f93401dc2286205abfd22bcdbfaec7ec24b4cc5ea291af8e2284d8458ba198a7ef6d8779080d24c51ef044c8128d4a8a0b5558cd99b8b492a2424a0db6a56ab55dc4c709e263dffc21a8340c409617e7edd465445b34e431baf827db37d32d8229b3264372ef8986ffcbd043be9f85341c5028ce3e25400a0507000d45ccd58848255b3322e0c1a1e5ca78df9d4891e4343d52a5832ccafb904a7606785e24d3f8aef5ea3870ce2edfcd86b63780b3bfc5e903638203a6e4afa463bc1ba5e570575f514109e5da485c1d136059d56414c79ab0524a3385f43bdb82a323647beba970a1ad0ccca158dd4e4077daebd287c64166610845d3996561da58747c4e40ac04c28787fe3800e875e85cbdcefeaf472c9dab5152916c6a16780caa9ce6b369d3370305458778d715f803453b6cd825098701a7c1eb4e84f5f9ebe88c75d3a5d2f43779995b888678475129cf0d39a84210906db3777f16730dafc1976f72f9c938fe67183090e8cf632f0d11ea45ced8594009c1fe53a362472e4db9d54cc75db96671137868b31ef4c7ecdafcaefc99f9fa8a0c217b5041b383664666553ccf678e42db2ce236e7d4813ffe1f3b7072ac73dd3a05b6cb16736f250d5972963c1c807c0fa03a108f13e9f459784584ea0333026c36e148d29cf4c413930c6803a3dc12138081059b52353c312c2ac48443fded3a6559610482de5bcb6292daa65e6c24bc22974762a3263cf21b03f33b6980b1a208f4ce7bf34b30414cd6fd32f9d67d0fcb2818275b1500b240b45c68e2fe2546a38683a4b9b21b8d26fd48c24ebb0e5f2e187dba986cb5e345de5e16c393f9595dd597b08545ef03365b570e8239aaa8fe9b625b0bf12bed1438dd8de54b544090cd01f4f97dcd79046aa2c762f8cbe41b289e3f81af6752362996b0a8680e45478489b2d869b2e2ebb32163f31f845524d5dabf5fb0822e7d4cdc7d524e0807b89b8c0a2988211ffc778552b8c0f7fd499cbebe16631f9792261307eb367c3057882759023024ff345eca56b82573a66e2ca62ea2d3b575290a02f45fc8a73a7e46ff474379c2386e08fa8a641cff003d7b9da6cfd0ffd17aee59928c4b1db48dfad2a31c095017320b29b302687b29e8db543d127720f9ab85009e4e477087a00849bb5f911f2ebbf85f74bad18bb75c5b4be3d5e2861d5b46ed27c44eb0327a7b5212b9504d042032228b4ab274052960f4cdce0adb3e2fdfa019fa2b6e39fa7f19680c98dd30fe662e02a6f0c2ff9da4d1c867cb976897bd3c3804c1ccf4c711439fe5e2fba8324080d84ea050bd77c500d13ea03b773501b51fd7d17f2d0df360c8c6ef53f99eb3c779530ec8a7f273596fd576bf836684448f220e3c699b6175b169b8abec35193b714250c8d5894bf4680197773055bab167146f09a8496283fddbbb31d772fcdb2c6a1a138423727a3d30ec8f89264b9707824e3b1e6dc9a6362bfc9607d88f196abcd3c3b234327d1a178f8b30fa773c833569a61441f131ec2e14adb2c2291e041bd88bd248c95e377c539ea504f76280300eac4fb05685c85dd70fdcc70867669625d030b827a09fe9073dad116c40d282425ef84a01d269407109777cc5d2d9048b4f95c2f210ef62f762e649e541fd1a7248f3fddbfd875fffc71568e79618afd4e11c80fa16bd1607d6941444dff1bd7b4fb1397809bd8e0369e0ee42010058a4f5c6f0b58894e444aec6d2c27abf61a6116baccf4c59f2c0facccd14df5e1a9c88eaf3750cbdabcbdbbe9ebed928120d0ca9dad18b671ad95acf19b32da64015cd2bd48d41dfb43135060017464e2ecd541d362af326ce74ce6d0c8e4ef4638d9d689b8b37ba4720f7c9e116dc2d2c23b21b914a0314dadd6f521b79484035c014d1f45360c49b45a69c3a8096ff9162609816cff6097048939ab35e57bf53896416821ddf22f23fa39d6f22bacce99d52d254b1e07d1e087b175d04b1afc1d4f7d7529ef701a5487d0ce7884dbda302a80c82a8ae35afecd0b3d1c3335916a013ed187d83782d66a68f3395aec65b1c891bda7292b15cb98d4adc11f6878fea197e05452434c87f9150fa9e705f57df1f02465ed4793477d7ea98be04014832e70f5ec92b34d6c0c37ba70fc7abd780349001d48550bed5dca1462027de042dd68335061be980b992cf730866b6974d61d2338a0d15028c5c912ca1de718e0cc9288b5d4fba45eeafd00ac0d0a28f39359abc36eff2a4a596aebeecb55321f4694ae43f1e52099faedbe143a9e27d5ffd4596b210db481b0835cbdd5ba7084ea492620a477b5ab94833b55d88bfd3637cbfb9f9472ae066f791088e9dea517e5cdedce31116b3059839573af4a027ddae1c4ceb84033d1b94eaaf8d877b1b04f687d54f364a3e2b4961cef8e12d6f154447973afd8a5c2c51c0f68003095b37a4c77808d91b60a777ef6fb4a6e309c4a4cc9439f8d932987171fc4fc18a8052a9ce617378cafbcac26bff8278822f0f6b0f4402b78a50d2e6952902fd4b18a5c2591325065f9bd1172e91dc1d358506d6fc7e47bee0883cfb9bed6a6ef91c5f0a5c3d0d9138fbcb5aa2d046877c350e0efbc0c15788559a826d981ddf5f735ebaaa148c2c8f6fee98cc73f57eed5991070c6c8afbe68113cc687a4891d545ae98c125c5fcad66e3a7122ad7e55021d26fad5e00ce084a26763af244653a92b3151234e35295a050191377742b6c421c730f05705a6313a8a8ea23ccde173dd009d95b01955a1b880221fc2fd0a929ba3bccf02b565fe0c9a78bbb4ab9b5e9d539893e3dbac1891abc92e2c4599f04248861a8d627c3f7cd76fde12252c2723e041f8e82eb41fa51ae04ca9999e818b5c67043a320b9e59405a59a5038d9095ce4d2f67307a6aa0f063d750003c7197aa289b691735439c01b5fc212aebf5a052330bb86ebc81db37168c624715e8b5c7abfb0feaf9065265a68405d0da2b0d81629089899584ecbdf7965b4a29534a01f509a609a50941d9749ca2ca158924787ad5454d80a894e785dae32340d4cbab506d23bb82bdfa6824cf6e394f2321ea243fda6312139599ac0be830dbc29ef92ecc8b1b8181ee00d849201fbd8308f9d875517becd663dde584e7d9ad5ef9a07eda33bbc0554167695584ecf3dbd31e67104229999d7cbd72b2328a908993561db50a3a6c204b0c59f42437321938ccc9c30e4684900c09f9294224c6de81871d3a92dc20c1d45271a66237433e8ff6600761642925cbddadc9932450abd19e8df6da37a699c49c5a9674cba16561324b59d70d9903f5188ddf907215bb45766e49dfa38f0f79b4574150bf5dc91b104646b7b40bad2cc9cead93a3bdf61d6e18a93232cd6317bb057ab7f0106f00d58fae28cad3ea4985b3a008c9e24f922810794ee2378868f5d96ef40542282510f6e9d15edfb00edc81871d3a1a071a3ad88021231f762c84e645a77ecca8674f41779882dd0c199b9b3c794292df27bf4149187dc6e2b5e742945ca67d933c95f2f05f4a3af41ca8b75ca649dc8e7eee248973a0fea2b9b497d82dcc9e62874eea52dccd90b24b5935043087f62c1d3c5d9745725294360fb98fddb27821b37639bcdcba8428b92c79cdd24243bb989722d4f6efe5bbbb18a5a7a04f776b720a76da9f7e1b80437beba919f2a1435fd7f807050a429880f3489cfc0621f9f11f8b678ff90d4252e4b3dd6822a9a8ee7f8d4344a5f1d41dbb4662a2ee9321db16355b7d944e2a450bf0d710d4cd499e437b6bcb4a4e51ed492f717c848d04a9de4be95711200e22bb4fc596ba8f739e46e9d44bdc534ad9e772e9f584622139e619895bc738cb829a934aa592c7d82f75a9ea384a6e79c92daf7e6ddcb7e3372771b544da6c7ed3302cb6876197e5d329b5d8a2d6d0444277b7cd431a6cdbbbbe87e6d3a2ad80cb65b41cc2e9395029cb726bce283908210ee8f5b3fad07d8390e8bccd5bdca7fd8ebf7c72df3ea16ef31797437bdab93523f30fd1aee8e8e407e807a8f4734e6e5f56ef3ed473a5b08515403dee7f29ea24dff648dd6793f39be7403d2945bb19f2e966a3f39b97b25537e638308fdb865930538259949c725ffc926fdcc7385fc24a9d4c5b1bbc9854721c24875e22397452bbcd53eed35e5b3de61bb7b4bd4d7b2db3807c363e6f591df7d41904485a52bf5384124209e34eb62ca42ad4cb3187de5e7fa8eb593da154b44af3e843ab2835b9d1d0cda38ad7b6ead13321f5b379d2469375a9148ae3b09ca278e6363f67e53efeea28de2c55cee62577d580595020bfb90c6c4f6adeaa6d338e424a3bb678b18bd314009dc4a4aecbec8c31ced97d3b28b5ba1733b6f838d755ccf5e827d4f4b94e6a2b888cb4a442af2425ea773a552e76ec110c1dd181d5ef111c40f2bf4770c0c84352156a33a9b2472ac6fc0b84e9c1330b5bd6b7732b725b8bf6a06ff7cdd9bdd8ed5a04a1b6787fd975b82b65e963b747782004bf5b4de991c8484ad4f66c0cb07ba876f318bae7e808764bf746e33b24ea887a4201605754a0ff53f1103a5501c333545b17ccaeed88a0becc219e3a30efee076c66a643ee03363396f3e6009b190f4cb75ea4d7706939ed7a40b77a449fd36d66266a39140cb49d8d064e845d852deb3ad02ad037bf8e7946c38652a75d6a7b50bf3a9bcb3df7d74450a95f6e394651280bcbba8f62388fed6a5cff6e852d188643bbab4b2df51a975378b9e53eccacabe1c3d5a5b64b39603af51ad22d976e3323d316e69e6196438f807539ed7ca07e51bfba54e6c3e55697ca76c692812d98675c4c7bd817f3986b3bf55b231a962f6c869ad7807ef9e6fc34731f2e87eec3105b57233a751f606abb94d639e072e8352e875d6a7d26eb6a508fee43ec52dbe9680f731eb005d358505359d6a51c70b9e511b8dcea7c18a20674ea3e44b898af85753878470bd9b2d09df9ea36fdea286c814e399e4921a2f205805e3a36816a606e753d3cefadc6e5b3ebe1b0053e6067504f98b9726040d12d1cd2630d9d1c852d95b91785f469e07757bcc06e22441091849d1d9f9f9d9f9d9d9e9d9d9e9d9d231f19c8200943432b218684181a221a1a221a1a12fa590d0dad5e30f482a121a2a121a2a121a19fd58e1021f366e6cc9b797354b4742709ab95d18fd58fd5aa68b52a5aad8884961a2581073c18320408480e0d0134041090101090101010119f2123a38fbe1190faa14e464647464647464645adfa4e431f7d5a91d4769bac46c951b65ca3048edc6a941ce9a07ef548a504ce57a3e40957a3044e1135fa1ea1e4c9ef16a346899baf2a9b772570b8ab5172f47d8dc55ea3c4a855acc448c91325986b943c696fbf460939a4c44dc36c1f358c1c52e28495385162a4c448491339a4c4497b42ccd528592561892c1ce108471c633f665aab8ab8db86a666c07dd86db3a335e6d86d23e5c2e55ede5e9642884b68c20846d826b2ede628e5a4b15634526a5ad5eb0a826159a669a8ba2bb68de6474622f5c4286d3459953243a1a68d26c50415769f1c42e4a4a2c22a2929a7d346a3320349a8ee114b70fe2a41c580da832ebd28052a458a1428565452a438a5a44891c29402a5a64891e2a2dc00ece3673339ef25f716017ec98e94adaa59b2d3defe929cbee125394b7296f02c9172094f7bfb354b7eb4b7df354b7ae8929d86d9253a4b7496e42cc95982d3ded62c5992d3de3e100a18b0a18771ce18543ffa981045b517ab507b1de94d94f461ac141bb26e62179a28a20819022210a10a5818c2109a14fd06612189df202c04f158e7fc06353942e237e80a485e4ec8bef1b38911ee4b0b6769550711d22d907dba85e4b02375a96dde681cd56847ac9fb82877f2a9bccde09b9bb7ba480f698fc81686cc9beafc039d8940671f9527d48f7da414ea87e27918bfe39cf3b434c68e373132c7185972e4200f997dba05323333e4d835db6c4d3a411272b220442984e91fd1e75b93a86d7d90e4218c3f60e42911a17ebd13795ab5bd9392d1bfded9f6a64c7b30b6d73b10554495326ebc8110c638e7c6eded96de5d94ede873c92063788a4cd4e8ec352b278f44d167037ba66a7657d87ccdca49cdca091247cbdbb7e36757b37252b36af2370dfd6b564f6ca665d5ac8e6a9644ad66f5c449c3d4af59193de456464d5a65f3fbbdd5ac9aa0d4acbe5ab332825dcdaa497bfb960a9020ca4acbf2d964481069cdb250364e0089361a09082894f4da1eaa086ba554d9fcc73bbf4147843e7afd0d3ad283bfe1ad01d6134fc4d39c2f2d0ba5049fdf2024843e3aea37e8880b7e3f7e1aab6ce2ceb09e78e28932c45944e66df7761f7da0162232240819b4075a4de1dbb37d89710f8632c7025baca015c5b743674175760c0695dd218c32d8028fca6f9016a6f02a433c80ba626405289248242f5512974367505c06c2683fe016ed070ba4fd007a759b191390c9880fea97d29362c8d5287955495203c5495eb91ed54b2a48dadb548d52f592dbcc90b81eb44bd520a138c96d66b21754d3911c15547541fd4c47df283e2a105a510ee4db578e6c3d4a5e9dc4f520398aa712445df159099205be949485da4eb5ca7df14d1d0e4d2ac94b7e51d7b68bdbcb51fce439b437f98d5655a7be030fad4a71eaa72e757533e45f7e755ca43dcc590040d414bfbc7ac6c5d8cf6aca4ca929355ac565ae790ed4578f1b4ded525937437ee659c7a33dcd637b9ac6516faf7a4a47dbbb368d3bb547811ef3ca7d2c4fbdf600875631114d73ca3fed6114c5a960523197c1b0ebcafce2a13dead78df6a8f7d4bd18a79e61de0246aba8bbecff7561580b80a742e874638a856c4b4cd4d85e2adbd6505a25d1a09b63f47a8ab107ca47c8b693f4eeaec5db38db3731c9aa49113402e11681ebecd31edced5aa77922748b639e95ad73c4737ae8437f8546b042f901f61b348404292081bf423b396bc4cc37420c3bbacb9612aac4267eac843da77c69d1de7e1a0aa02e2a024073f67b85df6ed48a995062f4df0e99a00ab8414a8a7e89f8f5531190dfcf2d0821dc68a2cf9902c84692182674fedb210024592d84104ecd274f67d952faa4ce107a2714e4ee81bf5d1bc22998a8ebfbdc84df2026847cd45a34f1eb2e4ce0fcfacbc6fc4208a1842b5dda5b97dda916d52f6aeb427671077ca7d0a561566e5ac8e060a30a4c7e23904687ace0f3fbe43f965d26bf3e25646181477e4fd589eaffb9fcfa8b85b17c14a1e0c8880f7e3064661dc6c2b811a640e4811f442148929975b93845864cb694511bfa2af4c8d8dddddc2c2f2f64305969431ec7861042c8db8ae5e5850c263fda908a163c65d4946831c6183b21d67b3bef162f51a1eeaeac90d1b4b3678bedf0124f56a8f9d41eeff6b0818f5644d5fa70a7b5732e66c44d7a867d5a0b77b2cc9901c960a751a36130bfc1be43ab02408521ffec3b1a06ceb05f74aa68c1d0679b13ebc2baf5c4187e7d7296151d46c97d3be2b7c3988af145c35c4630683c3b0f457e9670e13fed770914f012241c0086cc7059983b547b2ccfbb2732d4259560653505219f879ecd2063b051084654844919728969957cb824e7e1cb43a802e132d43e6da5cf07b265612d46a7b208c2a4d8f21a56d76308b6ba1453ef31e7bc96c87b1f3526665d48200a1fdd89a12b7cdc255ab467cd25924432e785c846c3a08c9e07e34cc1490ceb2cd11aed9398b313f322c6bcb49046dd720c3e1f59db4ffbad541249a26e89ced1b1a375d11e2350b6d3847df271080bc3c7ece6630ce2a3633eeb427a8c2e8da41379249fb46fdd6373adeb6a9034275d44ad4ad23075992503bdc543b80833cbf6556cf2d125101c6a9524924d589594c27ad163648e2ed9c77bd1b84c4ac18888fd9347da10db306a2d9b4b7137b5266269dded855dd197d6a7670edbb8db34e6e4938fa42591a4935d11bdb9bbdd15dc797bd13f6e1b894422f956628ec240dba99f349247b0253aa9bd5854f9fb35dffc6bf99675219dd81505e817c1c7e8e2a3183efa97808f462ced45df38ca1cbd319fc8eced45ef1986e411cedc893e7ffcf8f84d201f63e45189d36706f9e8b239c6e8990fedd250f6f3d282301b77bda52dad246ee6c01659c3ced34ff142d89d97f7b46af24f11f5867d264ece0fea2a7ee2748bf44f5361aa4b05bb7943ea42950e7de2703759f79d6e485ca8cced1144763e9b9a258b38d9a43d23e9a43de91b278fba457a364367a47ef3c6c94bcf6416e4e5106cf1a1c2eabc5c65227829b31effb01cbc6c97d2c2913e7520ccf4ad41f26d7352c71dc94bddce0953a7cf4f2ef9f64faeac215ca4869c1a7e601bf8670d3b7f43007e7d1f6667e493972e8756ad92452da9b02a8985f5a44bf9849fdd17a1f0d3bf8582cf63dd17f3e3b950898555fd4d51ab78bde93267721589cfa836b9d3fbe0b34b13f219a64d2e45059f651a7329f6154a82d1af90125ef0934b71d7032cc3cd4367f1aacf34300821b269f30b4982c080f3b3eba1c75f60e57790b4c9999a1082cf4adae4b4317c56b5c9999af80c4563212624f1969f9e7a66d2268721e12d9f5a865da72591dab7676e85982084b772745ec698cf9dd64d9cf6a4dc9ce4fba5a8c185cb1a6a78e97be2c0ae902e7d8685d9edc04b97293e458aefee9b2640d9e9e3658a9737bb42fae5815adb934ee2e88c41ddecc60af2d331d9033f31a58a99c3337de62ac93787bcf49d374a08f1dfec79e9ebf3df0cf272febc9c445e3ab5e6a711e126686fe43f3632393eb52afb49d94236a95f9c655db4eb516968d09dce43d9b2cc8f44bf9b9a7152da7ec508501fa0d3aece700c6c917eb90c6438830daabcba548d8e422e6559310d03801f191c6cec2037c94b6baa248b8b94d22b0ac2409737b355a75f17428c325a3da28cf6a6978a90813774b48afde276e0e1ba5eda9bd5e2e4ec0abddb6187aa813974d8d545ed742cc6e952769ff69a4b7bb323a27e2e3f5d0684d916bab12e267495ff249199f3b38333d820a3302ae69cd3592789cf4f179e294c7aa38419a40424339b70c2e9d492a8e9b308d16723e152b344fa74148469873e7dee585fc8b0ba82e2265f6ff2d8aa3d26d60d6a6bdef457b08808c9d04a6a30eb841dafc5f7e2e42e2f310bd4462697d52ad4d81e86619ee22426951df317babd789eb7c7ddd05bd3ba3ed21ed646dac34a41a0280ff3ac6bb4c7188daac23b1cda6322d90f0ac2f440e1a8e68d06056dd9ed2de5467df3d3e9141d07f42b764be914aa5095cd379c13c74336c5338b7fdae12219bab9b9e1c00ce62c84081b69557ccc79a8091685234c0a24f88f8b7c50149c3c1f798c913cc6491e730daa3e0a8b1ed31c8781b487b589339196d436f298b791166a9815c71a487b984f7b18156ab37fedf398679b66e22caf5cbb0973b9d134e6d946c338ed615eba41fd28c95988964cd70b3de6dd8275a139e6ed0212f7c5c7fce27a05cc02f3c27f0c44eb5a05bb02f3d2116afbc7401e73c69c3167ccd9876dd8c7fce31d1e8c7f3ce699e6996f9ba66d5a4779fae4041f448ff26b840f23928613d4e93b9ab6b7b3e7ec78b4b7b0553e5d9b994e29b70e379a598d54fe4d59be9eb2fc5bcbe54fa773f6ecd9bebbddcd903c64bc3992316bf3061f21e29716cb9ec73ca0d62d10c53e9dd99b07441dbd89843e7a1b31fae82c30b007b644a79475589818d8129d3259220f0a01c5fc2e6c99dd87024ac141fd7828e5a7a6045133cb270d40d49e396df0c043871b3bec803df007f469552fed21a0c6e1e6ca08094cc2a4a849ab66f7cc59e408f4e19f2113c8c8ece08ff67a9afbb42d0581b417a190ff79f2cc3e3906c2740f6c41a16a8d31c698c4ea15f01b94840d3e63d6e996e840504b549987525a2b0ae5014578a45ba23341257988e4a3d3e9703610e6ec1fec11001075892e873d10a6570dbb25fad08b90f735901fa15e2aa5dd4781bafbea077b3ed8f3d14b4d5418a347ef9e56c92096e50364c88ffed13e427ed8090e0f50efb44a76f1894eab28ff20f9d9494ea63d86944d01d0a7b7e41e300bc9511eb37db7391bb24723d9f68bf61877555baa41fd4ed063acb70f3527955fbc18820dd6611df6c13936d807eb6841a7072d6df8601b74bc900283210009c2d98c71bb076e5f588a54da5e4475772f30045d81e0f2d262476cee01dbb0446213f5433d03be3dcea0a28a64ec5cafb2cc231956dc7d3c9eb71aeb25e4e10d7ce4985bcf76cb019a8059ac338b5e4113300b1e9007f26c478f5c6c2f1a35554184fc72b07cd4c2508568235f3812af1fa01f1a6a4637edbaae8b5e57365bc6cb2513435ffa0d7a32e40b42e2178a30a1c91be0b708422b78275f8ecdb5cfe62f8725ea1b780d6ebe9bd665be713087ab06cc827ad62db3c81c72579087ae519ff6e0550366012177098919d5e41623928aeabe7499ce817ee690bb84c8c01eaccf32c86941613812378c3ae4f8079d387c23c3d0852641bf415d00f24fbef0a37ff80d72a2d3446dcf4abdd33d43489e2c117e839a40e49b10e437880945fe631efe1a0944e140635dec0a4844fd50194b8be59efdf5ed3e7e72c3b32828dbf10f9ef6983d56e12c964f5fad6e5eb5f6e2a954b9fd6c1745f3f658050be76d9ccb0bd7828b79212383c3814687ba42e58fec83c298930839c618494d90ac50b1b853c6d8f5ce370fa7cddd75384fedf16e572b5cf8d528039753d11e8a88fab9b8bcc061d7bb1718ade29e8f37873659bc1d49e58f9e4a4d972fdd9add0cf95ce4d9c8b733101bf9eea60b200b11027300696f8518a176276d98b908d996b050ba428d9984d9cf25c7cb60b46ab9e3af955287c11de75020eab7463cc30cdd10275fdf93ab389f4e2737dd68d55e14c5f9d2ae8d06855f1b4d444141718a8282a34514160a2ac54693a24ba1505c1cebecb4b7710e121565fa76f9ca8aa3fcda68505d6aa59b217fc5573a1eed652e5397e34071cb2f14b71c253a9334149eedc63958e5523212b7b9892b3973b5d37114b52ba328282b59868292a1b84caf642819675f8e7d8292a178adce1c8a5794ad2ed3d01483e4d5798b61f20c853bf9cae5321005c72283a3514387f660b4275dfa8d934bd7ea499248180a0a4ad783f5a40d3cca67f328cc5a2591485e397652ed5aab934e45ad7581678d98830163c84c477b260ec53907baac15ca6f8d2a60f2baddc012b71826af4ee250ed49534a8a7ff5b3948e1d86774346c3e8e816e972895e7aa6a3c73e0d1ea82667e71ce83c2612c9651a43716c739936994c2693676ef2cc535cabd549a414cec4281585b3f95ac29c3127615ac6dc53a9a62151a3431f95560981f5fc34e458bf414900a1c107cbcb75962a1d256504b2deaa68921062bdfd0ffe37101947272cb823ed0a2454e8a418d129eb60d695e29777712c16a9898a9f3cc5331515151a356cb40a73cb55ba19f2555ca5d3dacbfc443a9d4818e64c553818a7935f9e03f52a0e371a952e75ea66c83ff9a9e3d1dee511a670fbf5330bf5d64ee12da7ed65d9e9d451ff3254ab486eb90a676955c9ad46a9685575cb9fe52defad7a72cb77a3690cc330cc33c73c731527edf814ec3a7126df2de5c4d97c8aa9fa555168abb676dc439d94f9e5189665b53dcbf28b5b26d5a2945e17e65796759f8df62c1aed59288fa5850a7779f9eba2d4ea70ec0a4b22db1655c5f9af35798c675c8bf6aeeba27e516d05c5955dbeb989fb3437f98a8a67590a0abfb1030fad52f10b45f5537bd539010051553cf315d7b818fbda8a0a545951a9d1aad57cc5e146b3d2a5b46ec6b665dda56528b41557c94c1b776aeff214eeab5f7de5caae0b8756d5d85eddaebd9ca572f587da9e79adaadbe697b7d8dcbd14ff5efe6af1977f317f9956fc72d3ca67f329de281cc78682fbb4cf5c85fb76bc0a8a2cf3ac5556389b5739993c33c5b4cad4710f0ab779a66d9443b577398953716559c643d6dd68eff2626468305a95b9bca832bf3ce32cbb32220cad3aa77f762d5256b24a19098b813074ebbeda39393939b4733a07c2505a73380993cee12d467f47ae99e8c5d321f28a8988622c7a26222292a9428d2426757aac9b6f739fb479e5faa615109d393e6a2ffab6f99cddecbd6d31a7737a989fa7370f90d669d5feb67f04613aa75ba26f471f4bbe59a4acd4d1ef9cae5605f8bf986da3e99c86e199a53423f554eef939db180893e2d4e4266e6fea76749dce61428d1c4e7510f84ced86609fc1b4d1340e36947feb6ef2114d0ddb129d08ab8fd18a395291f0f4fce820423a738bcbac4bc875d560bad553db9b4e29695b769b9ccf38cbaeb8d160fcc433335ba5ee8cfbf6c967256ebb33eceaf8c77b692fd2c082dafe79b47f524970018994914629ad962dbb37a2d4ac7a5aba94527ae7b22ba4979050a34bee58daf368836c4b4535b27c94e41667f2222325cfb28d86c41717864c81a46d64e85996f14663a5a474292b831adc684cde34b6cb25f5def630cf817a1eed611edbc35c6e327a7acfcb49ce1b0dc9b30bd223d628b659d470b443b7e12e0e470fd65fbe0f7bb0deea70b4ef6f3410520c52eacc41a70c31ef1aad02ec99672934de62a0b8e68c719b43aee4570fd47219e869321aa6e4d161b44a0040d49257e75297485aa43eeae5df1ae1c93cdadb3c568fd16b3d31c9b907ebe106be99314edbb08fd9b16e9905e6904bf2d03b638db94c0966011dcbe4465381cca1c7189943c7b8e8d1e5ba3c7389a1c103f55b2398c3908103ff7c272e1e51f2c0131a4250db6376bb19723bf96e1530f90cf9344be1f64d4d6ae69a9b4e1ccec941e033a76e084afdda68a4fc34a9b5475329bebe4054a4a8f3533f7129dabd98d96e89698f09557e31291cbfc9944ab93a9329e6a1c9533c87f697c7b40a739375596e79ed25f1b6234456e5f2d07f5ab52aba053af5e5202c6d2c9ecb8bc96166e2485ee2a474b8d1c892c94b5eb9cfa64ba5380eead2a94b4ff1cd6d7e3785a36be2507cb7cbe62f94e5be582d12e6bbda47dfdac844626e59968a1815d7d57d2c2a626264506a398c1a2f6470a0b1962523af507a0342467d59208490a7f430c63ea55da914547a1949beb085c61849306a3950af699625a5cf39354dd3bad4e638346fdf346fd718c332da1ec5b04b3ae52cc93f2fd189acbb9f83ed134ad85cb98043c3cb96ae19a1c6de68b86b7bedc9e83c990e8bced6d11e8c9085a08e86611d35d33167a0de37d057c8a8c222218f0684d1d12dd0a1840bbb0f856aa2b65fce1c8c1f2e2f2f64264babaca8024a1df008f20d8c3e54054e7e839c60f2f21be4c4901fa09f55c2c752c3b8744b74926770d3b6adfb481d75d9a55f455dd15d5a6473bba1ffea5c7645f45250855e5cb12dd115501710947dfc9fcb47bf4abeb0e5926ed156c0e673dbf6a4942ebd8dba4c6f94fab4b66ddb36879b43d2e51947b96f9f90b6cce6332e87f6589729417788fe9042a4a3691a17d31ebdba16ed51dfa6019e599cf41825a7a6cb48e3ee8a1bda398b9cf5ddd09e83d5591ea97b1f7f9d7633bcb73aafbd8db17b42c511c4491729c21186bcff16e10822df98b6add2ba0596340e256773ba24ef3e7e3a037bead9d2893a712aea9cb0142fe95416f9ec4aa2629d6fab3e7693dbe8b455d695fdd5b10fea57b73ffb601672a3913a160732c86cc40872de7f8df051f4596bada56adadda2bc496b9b61b9b5594fbe8df031e4d7081f400cf06b84088e9e92e1737cc6f2bd6ae64bcf2c2dd2342704d66d409b1982badc6ea035f3a9cf902f29f5dd6afadb314081cf665fa63b87761cb34b4d9771886c27f5a959b17bfa7ae65a564a827a6f34a7ef8cd37268ff628be02fff27940a16bf7aa3e1b9dd504aa2c6c83a4d8553a6b34ec73c07ada39ec1e7be48ddea9c6d32a640b2da5e183cc67a2e2f0db333fc1ba3fb3ab442b6ccddcc1ac89685b6077d5f3efe049c30610292b7e856d3f231d2a7d4ebbab89c3add68e80bcdb42eae071d726b40744b7adc6aa25b2ada833df053dac1a0db0dfd960bb9b00bbb7a58ebc450bf06f2c906b22e2c87de32a057cc817aa41ea35f1cf5e838d0c000bfec6ab4d73aedb1d691f4d9bc8cf6a00bc003357a7418ad727114a5b5a250a89213ea97c29cba95c2ba19def418696845416d671bcad710ab979e59d66e2b08338168adbecd6e85a2718a632abea2b27263c48dce9f5cc533d44ea048f4495dbb790d079a63470ce9fcc9b194143f79b63a506729ec3c7bc98df0c091df25fc1ad181a3cf388dbb2fd4d293bcd3785d78da662c1dc77d27a721000148b1a8a838c95350a05652380ae52bdc970295da72484949594959515151515949b1e5a0e22b598b165b85f900768614294c2856563cda3a29edf9f4ee0b35c553ba1406e29fbc87d29f1cc3fcd438ed598eb2e57072950e03fc296eda6e48e94e5d013aa3faf50e01b4090451a85aadccbfb87acb53fa8b48deb25cc9bae8818d9edff21424ad824431c9bad8b7dcb4cd883edd84017e53f7993cc5e391567d581cd2dcf2687956b7191c05a3a7aeb9e6b3669b9a0781962ff42096e55a27864af206d22a1c989fd6c58a5b2854dcf20ce3508e82eba1f4285c85fb501d8aae77dab3b62d8793637e84129efc4943c1edaf70fb2adc8779efcc38a9601c067adab31cfb52b215d901305fb1dd90b568bc2e38c577f0ab7429dd77f21827d226358bebb6107770740f4f7b96a774dd16ead73b383ddf89a755384e9ee2966f29ae6d35a7140468bc2e6ec0d13aed59be83bb2dc0ce0b96e50dc42af9e596b74fab7094b46d0675f66cab29754d79a1245dd32946dd2745f16f003f3f0054ff547efab630bc822d16d5d685e6130975ce19aca58e39addc474bdc173ff09693b84f7b96e9c66915742bbae5ad133fb02d969300056fc516bc15717685d565dd8ff6694f5e5dff90fec36baf57527e6abae55ed7e2ebb36559947694ae54d88b8c3e3ebc9943df53c805e855680b3361cecc7a0b1885be8d3e0884e1a26e699f413e5a6f72be27affea3421c781dee5ac77453f9d708443ffe8b457a629108d4aae845be3df6c49ed803bdf638f6fc8d13563ad8a8515a42dd186b766fefb4a7e10cc10e029fd956c0c7432f9d85a46750b2506f6c64a81a5142dd1e76de69efbbc7093dade2ee8bdede4e674f926af3cbdf43e3b74c5ece163f5d58a6f4e971a399f2c893972f9eb31154952dd9487bd29350bf65b24676e021878e1d4c9ee0a4daf7bbabd11e921a3070a02ec3dd39088924242b79c9468c907260c40fa35f2358c0a4fe1ac1022434d08790aca35ed416bf4eaf2722009ee59bf676971942082124421111b560258322231ecb89fd1ba2790339cee118a73dc928d816e954062f8778e9dcf1ec0ae999e50417eab7443a93899c522210c6869492773eca37366c03ca29a72492442ebf45fce0fc879adc372621fc0ce1204309adc266e1a5175e42605b648d5d2119889056e1e4ec300e0b789e47c370233026fcc0b648974c82978c82972d609c5d21bdbf24547f88f879488adb3b2ef022a6e428d4b7443238250781cf94ba2148dd2412a9b32ccbb22ccb370e00bb8256acfb2a6a89bc1b7e72c4f59026d245da09db78f13cf766d81b03b5d7224b56a8d26791565d4d24e50415077b8e39a461a83584ba2fbb39b98bcc19ad59dcb7831f8787234a126d4fb25f4f7bc80eee22edf590f6203ff1edc4ae80cc9376912e0259fa1400269dfdc2ba1ae9ecd2729b76d29e122ae70c6922451aa68f625e5e3ccf1d851af2b08d9250e94fabd837e8c9901477317c755ac503b33350881025e7230853eada08a2f8a855cc3eb9c8d94913a39692d25aa111ec36ba800edbc2feb9130813f379539838936307dbc0bfdbf476625ba0c30ec353c8818750040fb98d7605f492508d460f6b7bed2c500551b62c1ff4618d99598358766d241499c6f94f9b5c07b12bd84b1cfb301066224ed21e932236e21fd34d6ef9374d26eef9e8271ede69ef06394073761993e0a32fdbd0fef10fdf4192d4b43ce3c439a7c9d4993aa135121b04cc2246e7ae3f7084da3d403ae7eb1c311cfd0689a1e73fde11c3075e9e3c655d601e9d49b02e7e601b4c5e8241e1116665734d95798c5ed7496f93fe5e3e9afcf33e9afc735749f961e2502a730b894bf2ec4c76c50583a7d1307126e2b00edb10f3f23136fb3c7710cf3fa00f490bd9f24fdda031acbedd3308e10a614108fdbdf6a04308e14f1832286188b13f1dba0d1d74f05858040b6eb2c9a55e200df802595c585e7241f2684fee68efa53df9d22dd2ad2ed40d7ad2b333f53aa4cba571d1d9b994846a3b0e4a462c4b863a69ccccccf237c6057c7400a84039aa3b2d1eacff344d4a293576232017ca6f8a5f6708773f8fbecdd1a333f4872c6d841a7ea821a7861c1d1d1f393a384c982cb1b2b1840d263b3bfd43ebfcd03b3836a4c0861d1b7640d045fa074da47fc03f45ba08f78087e0684cb425b455e7684b748ec6446302824c892cc92f4eb6ad92d1b2aecbb22ecb2ac30d940ebdb92bc877273d4218e1aefbf068d80d21a4b199f204c10b11223d18d2032612448e5d5d41a8cf25844639e1b4ac0c0c21e8053b004288074360804f083e10c4134cc842116620189859e805c8882322041d11f907a201e76cb78c31881cf2c7861e1b786cd8b12105db6d438fcf8e96d29233010968d162045f7c6f292d2965cf2c6316d239b6431ebdd33bedc94029f9b3f9ddd683c856467c39644eac61a7069d1a726af8a1869d1a76b29211dcdd10ca0bec0af9b2db1deba2a9b6635df0468f425c70078f1eade980307cd3ddbd0980a7b65b31badbd15ed43154bf058a2e23e849cf47a7718328a3dfcb4b11558623478e52fa063dc1798fdd02633e680c461fdd73d9c8bb6357b0f38eb5c426d1d1f19163c3874e1186a8dfe98950d95fc40c11139359dce591fb7044d9fed197ce7293fc0eb8bbd8f5ed6879f112cc62dd921faf5e46b904b3906eb94c472b32694f46cbe26d2e9540302ac3cecb33cf4937f01272a807a8142e3585450b191a19000000000314002028140c08c462c16038229663617d14800b9fa64c74461789410ec31442c400638c2102023030020019482a007a48212baebd1d298a040688076d766c6a9a37967d9a29083cc044f0fddcb070a7318c634c75ef87bcb1fd2afa0c04899b662b27973311caa7ff67e0b0a7127904252460819c37e1edd10d2f59e13cc3bd06cf73e2e04cea4d491f8167387311fb69d8c10fb3fdf16ad3b86f1be059cdffac8e245b909a47468025f53fea95860052389d1f2f2d9dda55003cdd65aa2dc582a79d173770b37e23d68449a73b8c1fe58d2e0590ec372e041c5f5dabb720619ea889fae988f66ea418ebe45afeba63dd865cf1e4f0fcbde6e4158371050ce787d19569ae58693e879f1cc5e0ca012c5c2b32fd8ef2c8d45c760397fcc7d69a21c6acfcae4dc6deb1c0ab5bb9dc48ef99248387d6f339662276042f0089411bd1fa7b4ea80494fcd8a84e911e4d16045cb03bc6f4eb20cbcfce915fed8fd65de393f5a609b817221b2f48698595a1a666284949e5ba2cccc73aaa39d37f16353fa61c3cc59e5cc381a37667773734fd1d795c30ac685e7822137d36bea984f0f4b81b5a00364a011e428f5db2f88d583659d9d70132715e59b0b858bcb5cf4f6442b6a652a61642e8d2ee5007997b7a8035d601d7d72ff503ae59f194f76f8fa9ffb23dfded11c29d395ed5fec8657d8212ffbca8f78904d03b4f5910d996c1aac451c6b5bb029aac8bb17177da48dea6f22f3f5ef917925af313341e1257fb636b9686165ea29e8d9dfc475e751505589244e57e53ab0d8ca77eec31e2fcf4c92285dfb6226c5d0106f90dcbe315f6c3c9d80317f53c051c375562733ce3d7cbe01162692b9c83a5d40b882da70f4a6d5330f155fd3418fc8fef5dedad77254c997f8687f90277b36c01ffe8113b0b2ceaea71e0a7833a81eef201aec2bf51d66530257e04fb7366840954697dc1b646c7f2668708fb15bf60e35e13f42dd6d6a42fa040fc9d014598e7cb4f245356fd8450b6bfe81af88c79e478a621beec3ac05811a33cda761f1327a267c826257540fced063d687c1404e1e550899cc47f8628f725f8145a89cdafdcbd9ad33c865d13f340eb1c7c9f61e10ed91160b3629210a63f2c2490f5b0acd6a0ef52def4ff609fb45677696f01bafdd17e554cf145cb4212fda6151cd2ae48ffe53c334c8eba7d663c33d698b84754de62d623de7aebb3ec6a47cc290f6db9ae5bc0889b8d5719ee40668c4389a854127e8d5bd2e8c11e123c41f451ac457e2b1531bd517e72383a88cb533c536ad12e8d37db23614578d0330d9fba500972a97e089ab94542675eda4a2978cfeb9bf8a88b0f91164e18d1319f51bcdc252e1178c3dc260970717b1418d902ed3d24cda5c41020465c0c153f54e8321361dab42e9bdbc42b000d5fdc2a172d9fb4cebe5bd7b543a1b10a4c550ba88f11d7aabaf18c7896460cb51a1f1888696452a760b493080a6bd69d2b001faa6ca43caba7011c907af6edabb570bf017850f834771ede786602a481e4a53a701f58388be2aa535eda0872629db291b4f6cb5f8b41650e06dfa962bc92086f1eabc76d8fbec0d194056c748482dcb0c719f7b15b3f300b2148768629f1067a0d7477388496856cd150d9ac0808e4d516f0833d42dde52a7143f720790302265de509649b41e24b95bc93b8a1acf94abf24d1f8a46d480128977102a371111cbbd6488e931099f8157fdd52e761b7bbe8b67573d726a2afe886419b59db99886ad7541d910976504b2bd563047fd10ee5c554ee9483aae7ef328ee2da13d75d598a267c6a5f88941eccd79bec65103923ed18610bc04e15b7955143f9c8908cdd1b243e09a8ff60ae12dad3595a6f7efe96bd0ead3ced2fa6e73adde701f875c1c1ab338c959a9b8e9457a4c95fe5496acabe69d03b1242b00b08231056cddf31c7f4af1e64ebbb746acc6ffa0ba851c02ccf36c2611cc9735254ff9714c47aa1ed5fbee5cfc9c714997d938c60d248912da3482a070801692e7fed0b9fa7d7fd3051897c9145594a66c518f05d90d1099ee4ec5d4b976743a5e29ff7ed7a9cd004600979e193ad9a68f10d4af4444c074d4984b6201db7826a1e827156cf6b9518dfe3a3b000ca51bbffb11ef06b1b90cf86cbd0331f5db19ccad6ebb9f13913f70422774e40b9ef2ea8e1a3f10cddea9218ae547b31309162562b246f0d1d57674523de98b6b63781ab9307bcc326d3d068ba712d62f2a239316dfa8dae9e00231d7d54256cb69611025132c804191883d56bae819a2a82e2a192019a1e897899e60835e370b9050e4ff47f8eac18538da83330910590ba25c68caa8d22a53dfe6deafc838f9632c6169aa31cbae678cb5c07d5a101dbd8f5c79610b8d02ac315d80f7ea8707a85a4578c06e5a682aca7536ce724b607a13bcf45891502223083aed0b1d3a64583707d0cd886325906c9043528c2d9d832ad4d6a91ac5e62cc74b3b08d7bf8218883c092cf401ec9ac3ac65b87eb53f2fe754415865ba064d95fe3afb4771d79fe9abd9017d09c8b84a9325ea6235c2d9f5c80b7f660f8ae660d64badfc7a61e0b726d52ede1391ae99b3acd21e99f38cc05a815f6c2315b4ba1ab6a8ddd27c5beb9d849e123f854a2dc1c9915f991c36a65ec4ed28f85fefe7b33b33c483b43650242415f1403e909aab9c55ee8d2f16ead7a197ee2236a98dfab1c7660f72711cba2f35e3d74527540c10e0cb0b5498873ec37b5a4726179a639b4d0f40fb77588284c34e0a9bd0bc517832083517618caee7e5f2f5bc60588fe40b2458af1dd2877e7ff978ffc073ce520b07e8902ef5143f1b44a59353ea8e0dfcf1a8509c5b9988a8cbab19cb3fea52528b63dacc5a4336718fb860c229b905bd41c63de3768402020f5577a9fd1e667a6bdbc58692c1d55ae7bcfeb6eb84563fd035e185b9e3e2bb9fa3c1347f589bd15f14be97446f5dc82b8cea60c9fbe4012a08166da58a319c2d8ff68ba667abcff015ad4b3a2079ad2aa78ee5c380cdc4a0b3b8f9055a0789553a664b6ca7e4d229dabb6bc06963f2c8a17c6074306638430cb163371b40390ea93800145a284075884d946760efed22a10e1f471ca74121da02e56fc39b2a33fda946b4152254451b500000722908cbdd062f4044d5ebb79adf1b24e08266b31ade37d1e8a0aa15bc8f91143022ab407887e479a38638d8657a114937fd25b17941c6d0aa8ed0aaa3dc5ebab33d1d773a8aca00d799bc9cdaa8b6aa2fbf2bd18cd9a299492bbc5839fbdb295690888e217b42623854eb72f20e5ee723984ad87fe07add8962923af42117b48f77df3d2780010e450aa742ec432747922204e1f1d2801e45e13dde41f8439995201ae3da082cd172c5b6896a4c060f68ea346a835d09941266204c9f4ddad1556e66b3263102d6abf308ac260009656c4dc056920458eae1847687d91b767618a40fd24e0ca9ba3331525e5efc3df9c9ad764dc1ee5b34fcdcbd3296753acc1d5b6a656e0cec3a46f9049f91fc0e58e54ff41954a38574b75a95240b44895cd1109c5d56acc15123fddf3dc05492cde3e3a0b5794561b5c2de2bc09c7caa320e7f5182d8a138f20f2950954e0419b921ae634729cb5c6c6661d96fe8161e8b669d54f72db733984bcd6dbbe3052fc81c899d69cd47a0a7e281fdeb6816b1bae5134f3e6116a217759c2b14759e680b0af533e60d2f770903d30ee1fe053b92215b1bed1adcf1119aa380470982a8025242a07a4658f45dfa1ed02755f9ea3a799e7278ccab5ab1e08611bc49a9d2a8cc5fc11664fc5c1aa171e1fe57af93792bfe5afec6a2649c3cdf2f4c43e0943d34b59b47ece2af27684aa50a3f4a065047413caf444c3e9cf2c43999f0c55abc98b16288482b2156c1095ea98a002c068c11f020de9de33529a55c4a95a71d65150983c28baaec9a4f43fa534e7c12c754950539335507d88155377024030e90caef2c16e484017c45cf7ffe60c0970902c93b27cab3742dc989b821ada105d94f6b4589168a547886ed1b3b0183c968314c786982e27d8d40c560218f4e69017dd3b3b53eeff3b8c0ddf5601ee19d29397d59db690d70cb1fd12a4147ea09c0e762d9a6f1a247ec34832d8d0d57dc2a624404f54140b868934f06262a479df60448db196b94297576755b31e69dad56800503cadf9f2384ed8bb5638693385fdac627d6f518ce31f04a9ab0dd24f170b8c02455558644c22262c86017d1326ec8bfd93e4a4780f151d2456152782615d6047abbf388a26071308dfe3ae355e6bf83057bae6a9bfe3cdf36baf44643c5b1c64ca91355718ee481c4abe7c40c32601430b13681c62cfe206358ee890969428b2297377e53a7b7394b29d730a23339a19a2d3a0102a3587d255bb19b927c883a8c72abe44c7cf2a638cfdc4d8872533a7ebd12746e44f2bb1208785d988f50e5c31925dd20ee1437b260d46b2775375758dcf1f88c15ea1fabdb11f7cce166a0e512edbb9b193bcba347d8849ec21bb1017ba858d179acd903416f2f6183b5c64f08c0db5dc5ca4eb7a60e5e6ec97efad562f52ce0e938ac0aeea5de36b00fa800d4be5a715571d2c2999237e886917ce8f7df814c643cb6ac237c7c52379cbfcffdfa0c03f9b4d23f601415b2ef1c269ae44e06d73b30680c761bc42da076779e5828905bd4d16e453e5eca8f05b58d73e1c645f5ebf323299c98a3d71c82752ee44542b78afff4a9413bf1ac4d0ba03e5899c52554e742b02fed3baa486792103705abde5e2c54a025fd5f4eb79f940c8553b9d0651fd35e1924226a8403451c8577447ada0e19441e82167e2ea14533c8131b34b267bef5745273dae9730d70d41fbcc6a2a801994fedb2ae72a746f334f49645b58e6a6647169aa5f422c8150321f8ba0df850c775ac9bc0f98d548793d6141a1a92ea3af8711f74a32c2032d6ae67e31c4f028ecfd084e93b43da0f2024e54f031699a686b83843a968195d212149acb867c5d15fe0f97e577336c0bdc34ec75b3f340a27034b763fa8cfc79f1cdec58dc6a8cb446dd6b1809a62dbeca3a9de243042ef7f415f66d6e491731091508213836cd0ebe5b3ba56015b17cdd129e8c8a96975bff8fabf8a72c8ddbfecf9421c324cb87c9db441afc2918b962e8282aefa03f6e0f1cb02efe34c4adf17a259e47a603edbe01c369081a3cb500fc730ac7ba455a0bd595bb190760a49cb6210185ed9212c2c847efd1d15d333a2ef9203318c9afb4a3fb8464e8e099b75785b38513ad6b88fc57c74cdf16d8f0d73f004a5de7855ba5105aac101dc7a00e9322c6198648d7b6b1ed0859a31c8d21ca2b1296d91ed557695e0dc0e5e95c2aafca8c3bb9eb228bc96743c79348a8c0c696934d7ad07c04f5986fc486422d16919fd778165639886cf8e273ee1d1cea3702cc6f6cf3f25c8a32bcf65934158c5cdd096d3a09ee3025055114bcc48fea6b9baf1e8a665c8c7a778f01bacbde08da5b7d97cf45d35fb87aeb7d20b28948ae3fcd0d00a0fa4ef55210e61a70904086417e1b6ea04f719f0dc47ad93e0749ad7c71e1714641b877795f50c1e43244a290bee8d782d6d008e6f48caa945953b42e14b246a70aa38a5d45df90e695e58f684c72733a8f3424c6a12c9d6c60b7975d9141c6c72401403993ccf6b386ed747a02e193efc2f8e7ea7afe7b1517518aad5c004b64e6d3609910c31058802ee9c8cff97648313de49a4dbe0cee2c278845f648862b50bd47a173cff776a6f4b99f2b39041b3215b036c04d3bc140dec0badaa26aa9d1cff812008f8aa119406bc77d9ba49abc44a8d52d39be89154efea6ac939858e6c87507c7c048d307f1063d0382e8432bf48bbdeca436cbc9865ee00041d7c74acfbb308ff9819040553218d913731f75cf1a0ac2353f39b2985a5b9188b8006b068c118c35ef935fe9c92aaee7b10365d625955c854620cbb5b5ecbd84a75cc25c073fe6cc7916d7a19c583884304eaee09790b5134612992d00c4aeb02d2e4b657d02158db82919c80b926dbeddd0e1b92188a9d0aba87c0975e7711ef80ff10c1047e90b01585b05831f7c302be295662a273ba7098d790677c9d23aec762f79c37e1ae035b13011d81cbb7bbe2b2f692e753b0b07ac67e8f8f85afd398f1d65f4b644c42b884619530e2afd9e26473ca690e54ec3cd105e98128f5bd6e0a20481563e03df0268e1e1245f50493a2140e54357c94c5cf6f2fdc4fe67f21ad53825582ab3a5b0f3a5048d72afb95fb2c466b3c5fd42baae2c3e1862d36df1fd484b7c5b7e9573039f21d6b8dac1e8cdfc480205bf8e01871eb49a26d5412476903b23d432600bfd5c07cfdc3d54df998763c0d2a89d83974f8c70f42393ac102e031b0749c9e9cf56f3a03ea7d166d3c446b636a0988156ee1f75959033742de7ce54fae2476f6e08a3aa3599b9bb80fac0711c41b35fce01ff5081a6c23669ea911cc838508710aa65267564a03245a66991e18431836d85e25551c01f43eb6321363df217ee7460bf017a6e3fbfa7e4f2d85e4a7767137b04c3b0d569aaf0a3179048879393d470d99854e38f365216208e23f0746d9ab2d9b169b6aba5a13913bfb433f3d92039343722b752641a059acda0b436fc55f4f728563d55caf0ed550d8b7a48664cdb172045867bcf142bd93f31adf714910f727f2f484a3468656509fdaff090d108bf0c0b6c7c489bd3b974e3b18ee9e79c3c21d7cab0e4ca4150628c95783b6de9565fa0a59b87b72fecd93b8af87063953e388ab442afa70dab381a4143e648a0f6c9b8d56dd0fc2ab44204a21683d7eb820b6b650bccfbf05f3bcbacb5f35823b56ff5b3081bcab36989237ce92cbd9722db7ab7d3bbb0b2f8197a9969f7ed39e952e83bc5d87ec747cb62d25e7bc0db645de40f58a99300108a387734ced8b7049b9d429bb661db2401db06285555bf06ba54f0852b395b974d120c24c1ae8dfffb962a0bd01361e446dcbb6e47c83f293e6ec8bbd9fcd1279e21601f161cc1819159d996dccd561fe94b4266bcb0e70aa2cd8e1055981c56e8be8cb75cbd94d79ec35b66da8fb680f8c082d58b0d4605b07af0aa7715dd9e88a504bfe0df08c05905b3aa70220a935429f4628462110103dc088cea2af98e1a5e67228405ae93c025940a04a4e06ea3ac8cc7af5e9fd543f4c5f18098a725b5b945e307488b951cc6956ca1079e400572a3c2aee1e14049145f3303d70fcd64bf570260eb15600851e4aadad63eb39433429d94ae9d744f00f06e065b55e890c73c2176b5545c6ee2375106fa017122031d615f310a5a18c678c8bf6dc3a23716df1dad507cce04f71f1acd331ec316666eb6d3434c9d137c29ad4c1884742c992501f887b6b8003d0bd9b0881cc860c5d245ef20ba1457c89641c245a1efd9e153f96c2f74ad34792db0e7a16bf14851f69623e7eb7f52e5b81d8e656ca84592a484c9363bf10a347d012874be87ee365d8fdd2c8ea565e070e25c16b5215c6c540dd1c603da88f7391b5e9f4110896bcf2e04a45ec3af189fc1cfb5e5b1a1cf61b675ff3e2035e57ea01dcba5f23a86017b173a582c55b00bc971c4f8c4325aacbcfc785e3bec3550991e14d4c6e6aa3b539539c40fb11170754ef39c9e77036011cd9e91fc515240d07d3305b4911c608b0dc752ad50a5df12e2c81ce8aea115b99c0a95bde090e52d0636e2a773d5a360e58e97baecda6eb190cd43025e2eb85c653a262b97b7783dcfabf257320e9beae1b7b417799738fe2b5c3522c3ca5696c45101e2ca57964b832a8fa4f2231aec5501b042b8b3db1857614f0092bbb50fa413fd5efdbfa86ec741dbe512d11ae688f7eecadece5d4514d8b68eec12cbe59a94d1b1e3387f2e080718797cf3e64cc08e8b04a2638eecf8ed8e113ca03c57ca9fea81e0432aacca51b3b16e49bdc1f335c66d02ed1781a4c67c7fe9933df160e9aacff16d2874668ef297c03dab960b8c0d01271ee32461cfb1dad289d884d72d237b2b222b91dbcc3d46df8881156eac561a19db16993b08212ef1aed8743fb7a48bfc8eb07051722cb37f156a444c4fb1720c32bf31b57214db786171f24c38c54af7dc46a92742a5a02be941f007dce851e8fd58a81dc05108abb7d88437b7a593573f04aaa01b26f48a8195b71145c8cac1b12ed63f4a785a9358749f6ea48cd8b3a06b1ef757a50ae88b956442e4933f843adc340120760138464c9f5f586012d55c5a8b4578e5de9184f766111af175f715d0572bcbbcd3477fc79504c59ef8069fa10fbf8b482cc2efaed13d8e69fdfe46294c37b25ab94fe07b4ccb0dc61eb8a30031121bc54ef7ec4e8af0de8a6015765ab857405fae2cf3421ffd1d5712147b3ab35096a9cb40ec8457ee8e14da1b96963ef4a394881eb5a2cc217f082c03b1fca063a184e0b47b6091f13e5b39c54ef7e63e5258cf4567255a2fe0fe120b271281d7e2d8b45a3baf2ac5c829aa838d08c412361d9d54175a881851159f987cd0523dbb8b9a92a3ad424580ac8e8cb07a7aaddf4264f973e68d27e1bdc4a8a5446bd944fb50f80b07d69bead9d7de45cbb8574a99333631f839926c65475286c0c96b2f1746c3efde6afbb88e46a758952b0231541d1baa020c011088ab8018550c141889324b99c83a0e8dd4051c7040e0a8ba56580b2599ee0858aa99c8130159fd0464fec66aa5122b9361a55ff98a810aad27021f480f3d624fdf9049ba4ff9c1280cbd13ec4731eeb1307001cb92652ddec4bf7131355047f9015c45275e201fbd3458ff91d2cd81c38de7f91c10c9e0166b6dd57f06421c8aca9c91a45a307968c4327a05dabeb324c9ccdcd2e359a5b94d34ba7ae730e7404d9e11a25911365b7578be1e8370e5e5c388a7978645e97285fb159ace702039e5df2870dc326ef48eb8dee54bcce93a621466768d7f190a2a0c70c47ff70deee02e5fb20218c65feb89784c4f394323ed63ba4af49d5bd60844e0325469028741a4a6db4d2258163470c14ba0bf1e004539a5d32aeccadc3032f8611fb058e0029633af08aa2bb38080066769459ec1ad06e390676444998e8052156ef42706c258684fef1b3932a4566cf1712f57780d83b3a1cb3b38e31c187f753043dfffae0455a262e26e081fd82f8133e7c3bc4e377177be6d2fcf8ca7e67f05017c0962a84915d4dc11e31ba769542e99a517b1a2587900357751a2fecf5caa201647e65be763f10bc131c812333feb7446265e7e9cef39431304df381fe74f440937c8f564c91fee3a5b9b995bc2680699f5d0d27ab67d7ff73a4d76ffb581f7065e35e06d4dd814401efe6d5d54b78fbcf5d8780fe1af6fbf03d414bd9f73a5491677859e8725ccf6a534cb49e96955971b713f88297b1acbded5bf0cc00225bafdb872d12fb9d3d585e7e2407b407365deeb2d5ef4cf4699c47ecc0ac0052f475c9185ae2c011d8bcea422625ff90f4da0d413c19f15745c4da91d22dc4585fc12a8be85cf7bcea66a394cb1b393ffbf1ca1b49ecd1a2080b68f841f96d83ad197108d6abde00112ec2b7da4e7a345367ec9cd00a5b7571dfbc8f85aa28e632b91c8a46278d8734e12fcd358909c6fa880990555c324b956413333441044c49e16a90ea822ab4be08fed51934fea4f5a2e037d70b3c6e6cbff56402cad7f48ac10aa0a7950a36442e8d692be06802a9f4b8fbb89d0366b3df6eb69a1670547cf1e5871206d3f3d1f221ec06f62a60d95dde142674f491680a27873409f3db3cc5d375c1d05147bbbaa0df3eb1dabad224ea5dc31bda2ce77e76ac541c5a77d13392d33a1bf49cc0e84c222df3bb6a3b9a1215607aae33b98240cda24eeb2ea584317f6fd5529c5ebe3986593c1562a741cb982ed78d8bd7f21c589f5fa8cc3e7a3651d0c9327c4c10419a5d77337fa9c876b9ea86989ffee3f22c8ca1a152b414cccc8216a007a5f707f37d6845e965ef150f2f4ebe7b9d5909f3f14f72bac60479e668124c6036b5ec8cce6f80daf2712a8b0435a94344f1ab10023921214301a405c80b1103b89e011c7a9029d35130d78b210214343ad108bc58825d6c93dea9b7253f15bef1d6b2ed093a6d0c4748d8a01b42b6ec923710612880957b3ea8f6859eac7b2dc51c88b0670c99a122debb2c12b41ac033689772a898959fa1dee9cc575b0e938e266ebc585cbb3486fcf12fef9bc5beaa1cdd2c8c91be6f2aad0689df150ea464aab916e7001d4f18e885de30caf045146e56a7a6895c130201b8ca066d16e44f8bf1ce0af8f205399577032eb13e9907659f27cf66a8d538a451978cdaadba97ed61d1389ce7dbfab5790e46066035812aceb5bf100283b071f38506e9a3ba815a55da57fd3057b1389fc8c1667549193f461a56b417ed37fdefcf858cccc44f8bf8fcd94d1acf34887bd27c5b7061a524d67b05a7a79660998beaa99cc8291396add313c11fef3397e1c9cb9cf443868175c01d0328bba395d6be6481d7381b0a004ec9f8e53c984a2775562a93899f9f73fda2c1d6e802934f02e9de82d1ec5eb011145fae819cf185ae78bcacf8a4524536c8db9bc8c08f3ce3a672de8941f9ef40589ac4fb0bb10fe437ca951cf528e03e5fd637d3e71fa7c29b9db0890921c450878bde2d2389d269de2daf5acb330284044622b30a1c89864e6b5f962a03b101f9713ff7d0b85ddb8e67b94a75ff9a253a308dad223bf1f54fa845e136b41f0313377a0ffb889a65f4b69241fb0600ce24cccc0ac9fbbff9694c3c0e1233dab4e99d4834b92dd85f284d77bf87e3a529d8b8bd16390ed2568f41aa83d291b9412c4acea82992cabf926bb7cc06c0f409bb6fe6abd666cd8366dd1df60bec54604d9c568ef2ce3a30629f94821b6497afe9e2b484a55ac433d2c9ad3e9be5416b98793f47ee8fd6472152f7a26304776c2c1405163311e6b4d2afc058e6d7134fbd892a811b7b91dbd7d585217254a6b0561606acd2a9a2c5ce4c8f093c8e2f8dbae2775b9df25fad201b5fa17eaf21d39bb6c683c81dd8317443c8f78755bd3ea93082b08c25af758607975bba8cbc161a8f9c51085192c99c75c1198447bc64635967cf60bbcd991e2d7efb729fa74a2d3acec7c2e67cd2ec6e4c317836d8737be177f5eb56a32dbed47591895fed56a36e686b36ea1e3464f32e9f343c7ac8a1e1939aa981f0c078aed48b0a7b566d2bf270eb774fe9d18b013f2c1c1673bb42fb05f93f05aba81746f53be78277ef0fe57a388d481e467baa56396fbb9f6132aa3cd86b32a0caabbfcb37401507f7ad41a6bd80263309fb85dc52120d5ac4de2fa2fd9d3d49a3f60b67487487c919a475bb338361953d0fc2680be7cbfec9b6a480868374d1c4bf1b6291002423d395214636748db582da68d725386542e4d4488e67d9c3418413662a77dd110854679da1708c7fe94395a95621bec3698349ba53c1738c07b88e5c0e35077a9dd626e471a3a586bbf35734ae33edfa68e4a34a8ca6fdc4b33d5f94ddbb4a5d8b85ed8fccd72da54c76f4b8601c5eced925024d0d240cf47cb07b138f5509c7b60d4394d742ea04396a78e2f3d622dbe6a1f997a9bb2bb2441157aec32e8dedc03f604ba6c80618309cf12651965399b4f4dbaa765ee1db2cd5b21fa61319d9b85c1e2c91e11287cfc907df8787be707287c0617adc81f85fcd05f4c0ac7b6b0e3f5cf8aec6fe31d60bcef0a951707a6643833c565754c4b6a083f5fedb78c427836b56f2b07d31090ca1b84f8b0e326c85dd26243bedd2f275448d2f6e01a800b97047d2851a34901ac08c6611fe8f08f738af7c2bbe1af585bdc70848ed3233f64465c91a15ffe07a3a3b4444f45c793d534f5fa4132056952bfe0a55f5a23eff803697e582850455bd5777cf2eb9d8f03a0ed4fccd8ce54fac85ff33a93ddffc80bf50339a17661327ddb401a60c3aa5968705cfd5859ddcbd4ce78b5f1cf452187542eb47029738473a4ce7b3dab0b37365231707ce18864a19838a193986c04214e3341a7bbe8a7bb33995117d69449c42a710872f7d83d0f32921ffbdf0d46a825c002338e0ed517b008392be32544534c2102370e736a125ac40c5efa33eefe9ed119e1288d04e52d68cd87df9408c8af828dfc48e5cb95ce4511868ee171b4f431480ccd0ea71b3d24e8e8d2f51008aa8a3ce5d2c6d27f7962d3d7c7b5e10bb0478e5c78fdc2b7ef5a973955b546aaf8b4f46112b5cf752a31f15e5ed18ee29078649203ae0a41781ea035ae5f99eeb34f8bac4b5cc00107c63cd87567e9e60f4955d8da4ff60d27cbacc8a39d4ed635ca691927791f3e7cf6ba143b9bdf9b664b78d3185915405cd3adb446482f19756267815d033a0ed24a284e69f0ba2acd65d3d7c9e756125ad8cb3215bfd77c88dacc8630548f96ed76161f95a8a516233195d1916b64ae03e4a21b440c087aaf15403ad6a6a7ae7d591352dcc8ff3fe8784a86ec18985f4970e5e91c06b6c9674c45167a8615352a3b246067cf7a2131a51b022cfa57ff78c0eedd32244d5fc2391d4d34c019ca92281602b61245e320f371981cb04a445508ae3b98e10e3dc3e414ca84cd3f8ccf75e89fc9d64ae4f8cf7ec12a8eaaaa661b37a257a6c3f53e4b9175990bec091902e0c900f0f084fec3eb22cf6166c79d70de1484615508f744f38f9cf1d0cc4910b3513bede5b2af429938a5d2e611ca53566db5ebdd32d426ee0be6fbd744a687cc746576e742e109dd876fe6fe16610071b41e93d7d789f592f47ccb07f851b929c0efb385130f0e9b88f95d0c8434119c04311022a0b77d2aabe59673c10ce5ea772c85b6e71e88ff42c82ad689c550c883e5bf4fc5a79a8cfc03e4b129e3fe39de1478e1a8e74b4ca00b8b91f7e62670408315f2980089cbf813a1e26b3a3fc1eac66fb581473b642f4c50e422e82219db6d65e141a93a93be47f81746bba360726beb943f678fa3a3727825272497c5245cc1a296cc99605cb8ac5a2271e3baddd2abff2640dd9686bd3322b55653d49faf5b553cfb1d630c101a7207cf17066a2a6eeca99fee944027869c81babdb98ab22415c9281b4e76c01ce1f0f10c8e2912f168a5093b16b82c09a715a3da17caba2f71ac9cac9c1825dc760e2a44295dbf8869132c8545888871633051c74c2206bee3be02ac913f647205316f8c553d8e692cb96131cb77f4781ab2935e5718ed942b08cbdc422eab8aaa3c5be8ea8b74ea72490bc56dd59d04d1334a410bc87e0030984c37fe0eb5df73a2dc8a8d7346868ce4e35dadc58992ae28304f2b08a2776e253dd6ab53e75c1b8d797f24839e460de64aa23c3dc866f87f720d3b7eebd3072ddfaefc9ef79253137365e7ba6b34b3adf58027d415cb244786f7e2203dbca4399832b71cc922c829bc9e108418c8f5612632ad4c7b3178988747662697dfbd550407b50f80f0725abc89a9c82ea37310e502589a39c1776742444088ec1603f8af2016720ec71b3be109f43cfbcb47c24c56cc0d2ffe12d9890360309612d1aede1f14e3f3ffd1bc7bbdb59975db04d8ae903970c04dfe54e729bc834339446d1fa971c838210705629023d53e6ba39b5e9b10f2043db60ab13634372933683b2d624ef50a6c9cd5a461e6ba2f491af944498a8377bd4d8d68de45fdc6c440d86045bb13c1731156b88bd5e19050e18acd819a85941f9bfe36ace3fa9938f624e46f3467a79c58dbbb426f96a7903f4c038aec1a2736f1ece995d6dd22ef6bb342fb50a20b426483f8899dd7bc4515b66f16160cd0fbc15e4a4c2920140ecdc56bd5bdfad7162976ca6498e4e0b58314fb89727350a9eb58df16504af153c50f69e4d8792d0c46ed1054c641acd3f4aeee9846c22be71858944c35607573bd0ca4553ddb929c2a215a446a3a2af8d14b7417f31b702d4d559af70ab2fb4681d7d9b4031ed4bb54b117ee00e02318034a4b15fcc362eb7c23e4f164d5f0701591ddf9ea1492d7ec10ece6724898a4dbdf3d3a5247f8c86a0544256adf004b23d6b185490ca17adf74258d9a6c2ba7cedfae1477681597a4ff56eed1cad3239e7f42ec885ffe787602b50910abd37e058dad679a609eba19aad7cffeac3540bd6d43aa14f22246484845ae2194433f32f77fd95074e4e8bed7ab4133930ed583278678cd067c7e4ea82800e563f10ab4a3f6c2284f5bfd2b87a23706689c45154ee69e6bc03e76a6565a3d2a5e43c59ebb8ea159db2b45ad4809b1d49e9788e6d4d73308063822172439941d28e9750fe396bdb73c2a3212d8a0ed64a024d4b4aaee7b37f563de973b726db934f7515785f077f6e9b5b6c38bc5cda516062ceca5b519353a00b03183e5854f67a5579598cb9ce4919045fced31b83b511cf5be30df4a7f737efe90db6ef3c9b2473628754961e3f47caedb509cc5ba2e8d523d5277324d774a5d614fc09716d251d8cdd65263382ada1a7709b3c883ab4cc0886eae0c3cb576c413edd61ca49d24432a9c961108e5e20c350517f6cbaeeec68db8300be26b245aa4ccb1a0e77161f330d84906c65160601917adbdd9708e69f09c562ab0807694b6181883c16a8df315e75ca1f0ce0f45693f2ba7d7eb6c425f362c0beca1539638852c87275a6e008237ca406737be43408ebb219248bda98271b17c3a367a08c9d4b3094100bcc2d42c630e2b1fdf0e827ad3da6ab2c6fbb022310447c5033886d8607f6f0587818d537c85a2554dbd9f9755787372f8992b2d5ea3c2dd609379b2200c199e9e31a415196a7d53782d02ce8ff95ee3bd8c0cfdb7ea53131b8815d1fb68ef80168f1719922ba21daf0e483ae3ca66fa3e45e5a04d2cca8cd930ec9286002baa0a2843a9f34adbcd55e1210aebb04bab555d54261209ca4e59c79521ae6eae2aa135dd0897188e1974bcfaca908d850d78826cb15aefd232f464320d27be05ec615ee7197ff03d78b44f2bb8db6267fd41e0316187067edc80c003c1eb8450eeb3d74119b851ae748cce148da1f99469b6797e7b3a695b34af1b16534c7269d1ce313b12e9fe0aab466dea365272306b6989959018618d2630e328d140ec4409395709096a35395026e5061f97b2c4c0ad82419b0a14ed9a136fc9b6f1010bc3433e760f6fdb41ed68b9de52efddc1780b6c514d6eea79d78afb96b63243d17467a454a1515fa70765d695178fcad8782a77fd191c990fa1bf0b181192eae6d3b44c16b3850999695e8399c5b4ca052a479d4275d0c8443f1963b7f15e5c90467a8cb0c1a65e006c3782f842ef6539de9dd87837a7d2660ea1dd985f5979512ae9b03ccef0ff16105039d1dbb1b7f6cf1b885daa818410852438375a8caf96abe328af8be6464dd95d24485526d0d244588f0ba0d783d3576a037ea395e06dc2ee3d842f96c77860a29122f91cebcaa17234c046d8c6841c5cc62e745b8a1750b5979cd959e29f922f201e651dcd6e0d8ffab061baaf7f2e3d4c366f37c39992bd6c2a9b8e2fd477db583edd74a6c01fbe888fd03420a73f5e9d51806191a43841c446929ac8936826567b79edc3362a656b5ccc7a2b51a8b89277809d351290da8c77d9eca2801e873b1d3b9c23bc9b2b60ebccc79c1ff7a8a9a9ba31c115e4c95fd828051fcd87ae40c59924c126cf5c3b21e0fd0ac53989ae0c8cac2d582952c5ba607d6f5904cdc6fd66c17d701ae67e9b150443a862a3a039a1acf73cae2a920970a6952e9e9241925c84de21db39eaecad49505d921a56ca9e9c3ec9497776579fb2539514ad769006dca739e2fdaa337a45c974b9725b31a7b3386ab76b22cb8261b416e7a506bef0a2aa27896e72526761295cacfbf0dfff9b0a448f6ac238938bd9a17946caad8b2ee4d31a0316e7faa11000f2592b5e37cc988ca51137d5800d69a2d11afed13399d6664954342af19a8490de7ebcdd7949a76c53b47acf8c40ca1769340f33f321eff66ab653b21732f4628468432b4989b7a1dac284cc9b2106d2c572c05bc1b89c641acb234598ae5265f74c5f39b339ff9328f13fa7be88f06d5d1bea31a71e6ca6a669a78c530db0f20a3e368c2e9c43fbc20e3c658ea7ac9dd061e892b35a094ad30d0ad51c0ae22019ec458c1f9981b8459bfacf1cf6f2afbbcb82fcfa52b24089b0a7d602f4e5d195631d9192ee885f36929b64eb1021c28394867e7b434fe5cd2c79b54973f4dbe02a01f1188146deefd0c62b0de54dc9a84513fec994066fcde72fa02e204163d8c3f9c462468113c1223bd7dc2e2368d0bfa1459ffd320b245a9285e5b06e3bcb7dd0deaab1cc509929c72d0594a67a604fd9f7df7980ae1bf25872675adf905286187e734be3fe825ac09fbabfd8a3ee6af9117b75011b5337c7285c58e1ba63c853fc42a4c942cd3af30b9100c92b5cccea9d1c1e15ab22bdf7e69e0940fa3ed1dcd7654e379451c9305eea21d049c720251bd2769211b10a09704082b43c479b82799786bbf6a315f704e8d03dc17433e48a72d15649e220206f99d3b50b6622c1112f56d880230b33e94fb174baf9c3628e302577aa1d392ea684616ba176519b163e6ddc982de9e5851130105d395e948b280541d2bb1f268649c23c3af48e41fe075d4a98c9e184794eaf7d7a92c0e638e39fc61679e566d6953572210310b021a30aa3cb9baf5349476787acda776002d41d01a17b9c02378ac8a530400040228ffe295054ae3bdb702f444f4a5122ce88a34606fbd60df9d111bf737ab27fd85e69f7844afd061b98e22429d740a015d0cc16fa7d332997f1b021f61244341493f6a78a6f3ae0a0f4224374afa127197384ccbe2e0169f719105b703edd542c2052f661e6775fee32fd71f2d1c413f8d9ad0d3524f27e1269ba75480ca3f81fbc95e5420668ff27491e3643165e0acdc8cb01cb6e954a4815370a7a86b9a8bfb6cb279b652e4565c71dc7f4477a3efe2fb5ab95b13281df8eb794d52763d5d8283a62c04967b4c3ccc2de1de9b1192c5869f77a2906d9cbf1c24dc836c73cce79202cd345922f4ecf4e9bbff928e785b02f0950809f573f68759527586c14aa5d43a838a1fa2b32c1e2f3de58ada0619c08df65460bbbbc10bdb58da1cfdc706606b8da8fb025c2ec4a2cc024a099f5e60462d5150ba34f5756ac2a1072c295b85030298caa60436692820e0622eea86bcc0edf7e9873e225008210f541161b8478c82eeba600dc21b74f33e195423c6454876d9a48a8cddf5a926b448c6a564ca8df883b121363e844a69117405d24acda3f1dbb728d2e5636ad8f657211bf22d32a7856e22d382326dd4243fe893c70c0c7bf85c118e9db6e20caa30a5d411b3acce7ef0fcc2b675526ce1b303d73514cdf692b3514f7b02be86ca1104c18215526dd1d120c92726a67fed4d4f079b25cef6e75f25445d176230273f3c19f50db15e56558ac7a10051a9762f32f21bc78b17b054b272b9715c93a0405d77e323154c05df72ec5b2c864373cfab83770311e18a411938a888d31a4b0e40b2a42c6c043010ca95f02e3d3f5ef14fd70986deec37eaae7ad196385598190ad11072ef55b598112ee0437b9a5ecb014c3044f13a8a8f289d0de8b010ed707738c7ed38d8d5f1a69a3bb6160ca54af3f6a4d61b49dee4270eba4386d62109e260737ff15cb250e1fa05741f6829a7429f5b9d67fa5f206db9d48c1c6fa6ab872306a30a2629a9f86f19c03ab62e666d7cf422c5052100a621c79521d50cee698fc68a3791750d488a329c85e8e33d48ee5a6cda3fd13c8becd78d00195c9ed2a1e0c27c57e0e32e0495502aedd3f561a06960b55860af6ddc0bdc0f9c648f0fb4cab98885ad9929f8501121046b71c98f69da61bff590ebc304c78fb91be79f65a1afad0f8379f8e67856d7956d0c9e27651ed01370238bb0945b0e044af3de24b8e110216c7a588357130407057f5b4ba6c19f1da44c174196182a5c9b2bd281e5235084cd2b076746d407d1b48ed021f2b5695b7e1dc34dd2a2f89b16bc1b89c1559106629fa50f602648930814a96fb9ba6821f48583bef8be8565731ee858331b676957a0baedd9151b92169fa180bea6f37068673c60a84fc63f8e706257a61a0d8ece78cf62c0e42860053969b89e1d5e70c3b601a37e1002ddad59c84c8ea418d1abc211a50761a0053d52483f0b2262ccf8e912f9cee30e2423ca460120b45741ed1d0a2c5318d3cd47dd02e66176b02722b813f480587da3ed9cae0873094a0ef196f3d96536054e20bb82cac47d08cce1d7fe4a852754f10d90e3d49ac778617a4eaff6e97bd56f7bc65a010a7a196a7ebc99e43065ef502f6f55c0beee094558f81e7f0489a5eb27cd5c8c089c3c0d1a21c17c821b30346dba1790c32ec6cc77f3afd29a1170dd1c6a81d62afbaa05a3934ed4833c77ba8168fed82c78f71a6addb409065d1a2491ed61973b34ad5979782359ecb7a1b9a8bf4a6075a5db3afbe301832da19e649a5a746f0c79bc0b1a7bf2c332ffab10b4684d5e79e46e8ea931f3e1bca1e2cc0e99766c91ce92477d058276418183d72f9fda731d5128325eae538b3eb577744e1b000b0ada227864aa42f1bdccb48b24e8374a828a52b3f8782470f8394cee86e020f68aca8063d0b4a4e2548c10dd34d3dc6158a9d90052fbb7adcf9e24c3b32f887a2b0c89853c8f3dd0a4113546bd3368f4dde21a36b282ee828a7b21d80d50aecb2a8cd025d1c600cceaeda74e64e1d6a81d8314012b985eec2f5514b83667ccb7b9eef01eda048d34ebeab0f18b70530ba857cc5e36b88720d645326aca9b74a380caab2e17445b445a53cdd737cde6aa0637337f16dfce2aa13f4283b08c71bccc06f7f74895b7ebc331676fb69ef273c5fb013fed1202a2014b25ad859d01500fbe569c5e792ef7ca809c242a18002f510ea85ed13e923065914235a738fa9c8cc5ffd892c528371a1c2285409f330b86a01532d17add8944ae22e9c0eae4e2f0b25b8681fc02634a3dcf0558db59f4d7168c23b6cc30baeed8676ea80284c3bbf060cbc7d1628df0f78a3fdb57c93d4be8927422156801755a039ca014154c6b5b562faad571c6f66f6f4674b545d78c5f048481a4068123b79f4b8522b752d528c3f3f1195a2128ee209c1e7f3c095cc40eb0678ac38b9f6d563ea7d6bbb78ee664814a9d008678a2f5dab7afec336767d93b20414842dc72b01457d8633201027a4447e518e7ded8679cdffa8a838ed874f6e29be815d15642e516977667196088a1aafb07fb3bc18f8440e3c7fa3762b284f4e380215240e3b295b57344ee88372438390f57b5841c5af464e4907d88bb95e45ee7c569425f33b4d6fd05ecc99c7b273d6ab12302170c64bb23fac02e163f808f3ca9611bfb6f148767852a7bdb3ada580d5a0e2d01f4157ad6a5c72780488b886be9fe2523e9e252ed3255a34d7ace96fe58f6f008f3bb1ce44e1e9aef51bc34538dbcd09109c1e31f49a133ebac5aac5f84679915078fd1cbbf32b819162f65c92dbc4fc8d08a3b2093513436d85932aa7d5f1001b3856ac5feead3c4b4b1c491ca03e8cbe2f1633b001cb1249e5bc086a49e0dca0cf31e6c406740461fc3298bb416562dfd99ae2f88902dc4279c84501d8391ddf8c5b5c3d1c35a1afca36977518948068fa5013a9c6c5c01404f1cc2813119e94f7d72bede6c2af1db9ca5a95885a1230e693d15082211a1b5e3724c50ed47a18a186586bc6b0c4c2f446df4bb5d89222753f58af4529d632a1312e063f4c581dff3e2d9e80469a8790a68831cb7a9fdb5feb6f4e92c7425648a5bd5d9e5763cfeb8a70188f069091e08ae06148e2f87736e5314be6753d1ceea123bd774f0d104caffef26c78e62bbd4898f17d1b17a67a3731be34f28dc91be0525e0abcc28ada7b69207a0010c72d7e4d0d8309237eb8075aca7bfc1934eaf0c038c7093489d58aff8e54c0ff4613d0efcc6ed840ba5d28bd99197a117bbe13228ccd4da619d7bf1b04665830da98a51a8f9388934918027965d725b8f9d8e0daa826eef5b59ddcd8d8a6cfcaeb76368a4ad149a2abcaf8cf82c5966421e2dc93bf381f45aa61666bb0c1a33bf563358fbd05e49f9c58bca3ca9a33599eb54d5177ad4b31030a76f8a056527dbafb4ffb7cf92b6db6beb3e432bb9e5d27aa465a53d7d01ac1afef58abee25a012c426e3731f7f30d9e8a4cf3b58cf0e59bcfe6281285aeffdf121b5a76d076bdda18d3168e8f918f9801835edf4d7d66412f197fbf44b541670bc23851a470de1282fa8dc69047a75c4d11d035fbc28860c26eca14daec9a5daf911ad122d58f59dcdebd39480469241b31fe9c6988829a731cdc9cd0b46439a5f21c26bb67168bf904958d276a544f4d97d7fe61d246acf2adc1350fa7ed595ec4bd82ed4dd03b7e091a9e70d20d9f79386c595401ca6c7500b8621c9a1601802a088932c1dc7d5a409438dc8a040df294aa908935becd243c2e77ecbb3c13855672250c1b985019d2221a1b1238398e9e3e6a45943c8708557b51a55a4fd6c9c02ec78ae113886073cb4242ce41b5f7d9a2ed5df3efd408c6a30861b20f77fdc542334a5f3a1ab97143ff65a07ce41c506d4e3bdc51554a764539175b6cc48212f8392723cb8c50a7d5393d60d407f577f50c8fbda43333f5c5199b154a81fffd12c18103620fa899fc9430d0bb714d6afad86d4227d924b58543ff6d23d1756222f642c9249ef9ae635f75f4934f54348fedf43bfd2814d1ca009efb6fc56c7cb0a24ba516701445ce8cf602615e5dce2e8230884c8628e14e2683e1e94d1396dc8a3d6acd5c61078f5cc68eb90ab743d4b7dec6871a3f83eee25e8477c5bd1b2a54b65487ec06ec15a8b92f1ff1e0069d240187b83c52d68adfb8012c5a36c21436fa57a1ecfef873c106cc5cee692f1e724619a743869861761849a4cbe262f9b7bcba633871ea1dbf502e6bc6abe470a3d923ca80d3920b611e7a2ca8262609b799533a656a96197dc6214f72d0913c3c9b3bab724a8d8b55d62d4e42c97c294c1c828d6c6509b1d6818ff601521eb64c6d15e82543d64d3481000b2d4e648d266dd987dd18094662903f9d0b31eba19789b166d8865d719a01a3d56c1f081152a8b451a120159dad72a8993195a06f512d407d30a6120b42ae319bbc2889c579cb8bcb15a87eba324291dde9f8a342d263b1e55efb11cc01fda38c10c84da45412e755be3426a318252d94633e347d6184ebf67b4d64d3043219b0bbd4cf5ec06ba0512ba12ec633589536936244f8693fd26b4a2274a1490a65205e16122b3241b6a63761f7c5e4eb1102cfb0d965910afbae07f8e75f808447d7b3c6c82edabe9890c850006d5ca9a53b271ad9b1a0ad579a4a2f2c206d29bc71b0469cfe7053a2a8eee5de045e20b67da0bb13b19331fe085af77aaaf554a1d6de0be575d8bdc3c2d8f1880e07fcf71bc110487d31d9390f60eb80ca65dcb9d254a61c5571ee6bbc8066f0a02b10aaaa4a1a28505cced2c519cfdfdbf81c6630fd107f118f55bd6902f0b5fad79ceb63e6ee3fd795db85cd3cf31b4d64bc7b32bad23c6b2855987503fe133cf373846ef85719738d3d1786516d51002d1b5e222ef1a44e7055499c8a0b6374477b474228b4215fb552d61fe60e0ffe8f01953d4e32d3beccd5f136e61e8a0a510c8fe831521f9d35562c13dd515b07898e27fcebb73cf5ac00a7054469d6d977a4e2aa24e1f64db28e21d63c8c6724733e4292e3ce35727c3d244782f4683ba3dabb51a25f9cf711b4f9f7c6372c1e1ac7bf4375057502c2d5b7b2cd80b02739bddb3dc8de6be0cc30611a2eb96dad4fea4ae86e1136e732215a9a1f7317667c17026976eec7d45e2b9ce3a9db9b2b1d2e951b5ca6217e584c8bc0fb97dfdada4276c48982c77a5d9d31f5c86ae5ce76e3ce19b84564e57d13d8acd6dbb82ccf2f8bba15c4371b6d0db93b6132172f6222cbefceacf7fbf1cdca3e161ae7c09bb76cd12dfe046ac5ad8960ae4d2584349ff36258f35f7929afb38b4cd193b17bee422021b7a2912cb97419a6368133bb34584db639906b65c025a853beded00050ff66df425755b813c8064977738f447e4fa247b094d853a81ce8ea6c9f7d3f10fbaec014fb1bfdbef2695578ddbdf7e6b5905e52f2b5363a0bddd55b8821968776fe65b3f33ce0bc1be0cb4cd5d39ba7f041550845c8ca1b2140d6fc741aa9283bc964ce9fa0126b85d05f294bf29a5769414fbad99554ae52f8d7b76f110851407996821f32acd977a175c5e66399a0a00e8c3fd8ff2b9e4e41e3d89190ff98dd7001513616446afd38591d1548baac85f6bb9462f4c3230448beab5d4099f879851940d55f3fe3376a5e3e0758e1f69939c20f5f15ac78d3f0bb2d3d21ec8665a774df06879842c033e47003f96442514115aa8003d6b1c492a42795d4a327fef01272ffa9c2fb4463f2742c27da3739d871047f15eb946fdf44800c97e4db550f94e69242a39ea504e90c60b5f18d10ecc47764a2d9480988c108c15d6c112ed531d77717ff5e3bf2b42029bd29ed349f134328c51a3a9f85f86b1734e069c06256c9c2961fd397a23f4ceb08f71dd411b6d889071b5ee2378a7ce58667040267d0ad0ad680f4b84f64d91dcc3ea4668d77d1285e8a5874b39428de9fc8aefa479b38d47c4d140c8d2243a28588c466d84360b4cde75aa0290500d18623cd4b63db19a5181a903e0f75153f80e0a100e9588b4564ab7e641a29548b803a1014ed81d94172ad32f4b7e070b88431361c846ecf37ad95b49789a08b9374ec133c703b91b7040efb45ff8b083f1720a001a3af74986123967f920efac567591b40b00abe0082e254f2975849825c54b839deb3ea92a548191ee2b1fa2183e8d9e139a961ff1abd1e7a5fd75cc6bdf74adcec2ef0ee0348da33c29cb303814f1bf8bb1cadd398152327aec2311f200789f922b814e7f89e3808f0a9ae0977f766a2cb3e507adde136ecae179439cb0f2fa6553e81bac4bd4620e75a7516d156855d72f16f25b7234342d5bf7c70ec1298c08dc867404f4f0b9014d7e0e2abc8128ad0333a616fc327d9a2e0df589fe2bd0d41d7bec11a0351588a627294c048bdf8f5aa64164d02e74cc3ddc21065b94be86275e5a84a59b34117092fe6b51c8a2b1e694b77f58604e4f0aaefd7e8a0256f42b58b80a68899f56ea0ccf037bef01a8047490a8778e1332ff008c28b5773bdd18196356478bff7e0d0a0e7a969d271c279a8142d812a234025bb9e0fd672808b71ad599358c0186a0474510794c57372d69dbccd2f14b4ca63540fffba5f04864d3299816e38e49dd9b106573f143e71a8c110ae31e4bf471bc660dad16c98f8e8fb115d79e179a36c843c0a773098a90f55c618a2f6b89610f5a7bb562810bc632618ea25c96756745b1c388c789871ad936a84b08a9790a476c14aa7a2a62ac2515089c65514a7c0e797ce2e17a533d0426d37f35d32488e0aab5525109fdb4af9a65f65a9a1b058deb54d8d97aa9133ef6266b89b49b47cb3a4b519913577c8d758ad2a2112686e8e063de8162928f23ce2f429d97bc2f9c4305aa48241a98d10d62c6f4ec33a25066c98fa1debab11528fdc4bd59d7e2c0fc571c57561cdc876bf4cb0b85fc29348f34ad1547ea853e5fe6ff294a42999cccdd294058e8fcc5b4626f049ed984b339daeacdb7fa2929e64b92341be61f84abc970a35630b660d2b0ec7431fc3399fafb93ce8e1338bcb47986e4959c00cbdfe094c0a3b24c867fdd98ae225141ff13a3c2029b3fe852b96d5661ef62acb8ddfb30a3f7c02e89e301aeba0876971d6f412d9cbeb07719f1b131ea26bea9b13eb1148bf8e11796977b6d9615f04e2057a67d50aed1d2d0cda511758b3acd6631ce3db71a8e1c11877ee3fbc6a16de5a470f7259cc265e7a632d826f0c32d5dbd719d01e65b30a92ed1443387549b68431eb5afe1dedde9a4820d50d445bb533e46fa4f1af8e7a78a851503a5de3939ab35417b294caf4cb8a290f8451a023a930bd5f3a0bc8bfcdeb77a5a32ce2b00068fee204f837055306b7059e09e7b17ebb2c1d6561dcd2c65e234b9ef0a9ffab511587cab35833dabc134c306bbf3b676e25b03fec55498c12bcf3f8c08809e8a2b7a9afb3bf1e420dc729852343ef5b428a96255e28ad32e612292f8920de19a3b80ebd23c24136eff084d013d280f3cca90488844bc48c1256a62a7850a9376c3b33ad49e7c1a74bcd7086fa45701e9c88558843f6552a4c24c474098586a5e824002e8c7d515b704a04c9f069fc29b2bfd9124a0de0f96c11c010a9b27d371b0a861caf4f59209a2e765157c87a7a16982e5b60a1ec1622435d62aa3d9c0c39308b8c619c49c60cd4d9618f2a7c19c5a91a4bca9824f10fe8a44b6a6e539c5c74a08756d8c9594d10227bbb56fe4d642fa15f0081b44be923d2fbaa1f10950a2d7946b2bc59d7d0b457e9c50d154c3479eda2997428681892883e1fb45cb73786a6f0de0028ab8f3e91d83ff1f0b6418754df4283a73f64c791974ae682239af236fc1f0a58900d38ef4428bc9f69da33fe91fe52433cadf7fe7b59b927e12296c623125968a06b7b0fcb313c8e72e142ab4e583692bdeacaf997b1259823c05ace671bfb0b12d9401d90b9656353b1d692910723a026e5cb71e104ef2a9058f61b2a92f38e3f7024092632bd21245532b2aabc57f3d54dcb4db90a5d051d74ddf4e6cbcd6622ce203c66b29606baa42f5b93279d58fb0bfcd83443857181df8692f04b1616512935d96a3bc1e87c6d19d1681d8f5fa2144b9851b340d262484be2cd20ed802493d466e94de2b8daec9887acb5dc79dd496b5a73a38e4191d6f2172ba4b81c0331ed6dffdbd07d3977f772473bd9378cf243837ac57048cf9096ec945df4c121a6587fd3ea906f3f0a8126dd236ea25a47bc79d313c2a159cf65d08cc0142317e689ac0b0c3a3aab6c6d3791253a0fe3ec3de62807b0c3b9533551d0f62da04ffa2c1a83b5e1b7614688af210f488df65aa5f40f28167994bd80e74d26364d58f982fa564f744f0ce0431b24c48602c710063c426066e6ff08ddd2f4b85cfa1e2666a9eac73a28fbe53b098735e66bfaa03f65c09db40ae0e07685b4cf97b778ce99a281596f8e6dba3622d351b111ea5f4ce27dca212aede81e64a927ed14bccb14b72f4921721794830854c31edb74c479f292e4d07d9246a3a4853ab353dc26f21a6fb26e1f7740cf735a3229b5258b29949ca855ce69fa2747cacd87c0bc1df7d3f5db19e942a5562d31e03ba9704f4fa22c37f28195f5c2a9f1886c49bf89adef3d77afbd39e42752ddac9eea3670ae309d4b9d69f72a4d121bc4ed56725a55c382c3254a7428211cc32c79b0bdb6ff207c2074ef741edd053c972c0c9cb1f390ec9113338273480944314bd41285a0ca8b25c1c8c96b8e7e5c422f74742902e074bca802000ebb46b73e755e1bfe5c88ae5f919a525594305ba611e1986dfcff83209beea4b0c99f0d9a813b190a10cf134f0c94fe5cf6294aa37c54932862211b457a22af6a0c28f4cd8f7e66a24138132c91523ec6a01c742de76722ad1273a06c50082fbe5bee1a69faf37106eade008ebd8f967e82c98ddcbb2b4354589a1693c6340c296227ee89ff419bba5677bd8992e658299023896262796d57a38fe7cb301ba34a7cd6c294bbd92161974e6034292265546a221419d4d7214259c03228ba51b5cadeeb580c4a9da12445b478d229964072c5cc118dc93ce0b96e22978a87697448245d5ca693fc8e76c42848f03a68457cb83f1b2634e3fd1594a4fa13b9ebb5a0db64543af9604117d6b11629488200c56a953b5ded2a1f70c463792de4ef240fa8504c1e945181aec15c6e4a37b9939408df5d5aad614bd7a9a330a8cf6802e56f04a1cda1e07674fa08a3d80e5a93f1b5a0b055943fb1b45cb61b00f94cb0d92b951375171cad6f44116fd4e9e1bc79373a693a107c5568f225351d3ae2c6c8fcce76203d430d58787c55adfd9cdbbdd2016ead83d8059c60ee24f3fc48d13ad04120408c75c2e8c62911f33696e95d6147cc11e9ccb7c262a149dd6f6cb829e7b9e54b9ae72b32233f9da4b79c23a8fb9e00c502a84caaaa44a1e1fe73fed2ee3ba3205ccef88d6807af3a968505ad157565915aa86b33c98817a316bdcb7c4ba3bf1bf31f8ea5f65c3834071b20939946b9ed9cf0de40b01a03b9cf38796e0e39c01d4d031db0dff29f147ad5cf5eb9972d84c74993af115a4439ed328a21957dfc1270f9cff81e934e1c4b42a21ea22e240f9b4819df9ffa75793e887025c3338698051815ddb5dba4de4a6168ef7bfc18bcc4073da38469527a2f6e563b6546d596351279197bc6c9d60073a8f19256f3fffe22c99387ffb22c6310c8e2c496e02707dc6e6389d437901a6499a46430e0c852fe384ca4c1fe9d3a974b79cd1242c62803a4de29098cac142c7517645e8f1db31c325e5c7054db63473313e90c1419ca6b5c29a7523c69133196129cf687093c08a11f12d8ae3b86129ea793ab98b4f72dcc770180e8f5738fcb15dd3919d10869a3c817f0d1be97e8bce8a15711bf041d46c8c41c64a164faa18e09ffe239e0e6db236e24ed21b6dd6ec23ecc5ae15ec11780c88eb97af5423e61e82a9f334dd21be0518898aba4c149a44f02a5601feaec687e503e9f6e5926692c6d95fbcacd314818b4c7fd4f29236f6c2a8ccabf1925696678c263ec31a0d0046b9cb6986c9a2be7af0c9d792c9622b833e7b06144bed494e206f997de8d4b6f2c9b278c8496b59bec472e4ee1d8fe05d76554d7921fc60df510f3c19eccd5ea60c7725e81c6be6b437638ae10f8e5e508a3f1757c5385d4b4b399476343c6262d8af6a67f111331395900e5404473a6b1e839c8b02c3082830d4864db4cf720707927b294b467007a700b16c158e90c034a5cfeec80c1ca62ce8b2d8468cec8f498d1d45a04bdc76d1f6c056f863fcaa96a94188bdc62cf4dacf78e7afcb5ba463c1351360d3d447ff79f7fdb53deb772df5d39087b9f02086833e6f9b161789d83a09b2f58f6dd6c896b478004c2ac4616027c836ad9237bb8ebc27f087d7f60139ee22e0049a5bd0e0850cd396384a5095a78c8c4468e066d2d2f2aba46065f5c0fe57dd6c2df2fe7d8bf18d9f413d16be8891303ed5d6bf21f53398c690c4cca43be61b941121291276b0571553e6897cf6c367d344ec9b6d114be83318f6af717172e6a19d918076a6977b7e52cbbc36e42d6d6150375f7803e8748864fe5797295dd2baf80ddd683608a9008b62e3c0f005d8df474b6c7e9b38fd6dbed73270ee05484b0700d063150567da1d2e65d6d500d66330ba97e4708de4746ce26ec1629053cf60143bb6629b2dc5d6fa6d1d59f2e8d196b97897502db6c92fef7c356cc348cc3f7635a2225bb2844d0eb335363bdf4b8e43c3ba6ca33c764fd8baa97ce780063be0d912edd66ef66d5ad584aaf2f330723895a6b5bbb8274f6c9032b4a2bb6e92af168284f654c67af4663e4a4f8f037fe1d231c9af3adf5c7ccc38161a4391eb34461e6492cb401135258d96793386fd0b4f9cfc8b038b9044b687f5ec29069353bf03cbfe3e965339481be28666b2bc0f1f6a794d4b7efed205c6eba61988028e2630be8c1b47a9997b99f52c867b8bbd471f7ed685dfed9ccda4d743c1c7f276cab694820035483356ad10a3d30d7e5c5d05d0f097887466141e679726cd51b3d1363a7e4b7627ae9db390582204d9854a020f60ea9f92e1b3d3203f4115760b8bfddf9c9a3d1b8c3dbb398a862f7f191c89013661173ba28fa805e3c5282a4ad508c1027b283025336a456a6582ca27fead4d63ed78efb809b972f8c3929b0d8d928170e037cf96f7a28f5d0d0d50d0a03008af6e7138164bb01e03eebef0e88a24ac7088eafc81cd8d529021d85bb3c40a119061c06776f7a3072ff36085a4d227ed4a09a4034c8ec9040d9ef9869364a1a54391b83feb0d2ae89cc36ea85f27b5612b4dac231e40dffbed2ccacbaa182636e0acab38563a1a1ae9b73d95a77d3a86e5c6a853aa92398c0f9c58c4934f2470428de57af931c0d4f25c89118f92e65ccdc7fe203df8acd96d0126260ea9324aeb2a81623ee1de05757446f49afce116a84768729025549e407f4491867c900c058cce43b034f288cefc5ec2c078b586d82cfc1316b5cebca8b8d51096ab4f80fc224d8220031d2c30777e824a8e4c831cc6794556ec2afe70d42212151a602853b4b62d0d8d370074859f8041a318583f1d4488422dd9184b13e6d07bf41683de539ed1ac7e446c998114421a495d031ce72d55bc68ab8e3e0557ec82b9c8d70285df473053bd63dff9a405181bc74f2b4e7f4739d486e3465842fa1f4666db8ce2600845dc9fbd4251e6c3c2087d262f73c99a8435dd306d56b1d504ea493881d215cca8158122712876193be9da5ec9e3ec5919c436100bae9be1f27b5888e3a30c300e090f2c446dbfd62728de800bd0aeff6522ebef5445f83ff016dcb738d7bf38a1f976708a33af9f1e601abbba8a5e197ef1c2d5c29030ef811ed004c5eb4f5aa9c9091db9a231feb3d27fc03e72c6dc824426012df16898da00191a339f59d6f42e296070b42981126dc8dda9ca01f532815be5680f336f5f23e24bffddd56c5c1d52877aad718fd4a15ebf16a48a1ca3fb2364c50ce871c99a081155ecd7218476db59d8437231e7af6b38809b9eb971beeee256755019a67d7bec1a8f842d3fa92baad68a2aa39c52c95284c9e771bed39a31d6e2821182224d3291dfd8a1c8811ebaeb5d86c00a5f648d48dc9a4f90f045b321a274cfa75a56b44d83802a9a8d49ca83c045eb3e6f139ecf481ce3d7edc1b88f44cb22ec4ef8506611f72e619c1ea6a10f85e5c611283b42c67e2774905e02ee9016d37182efba99263feb29107f9147f654124da69ad62d5dbd874999aabc0b885948d6f93b71ac7340a19603028752b1f8d60616a1dc798359cb61047806951449ceccc869e495ec3fa23aefe8d9412c9fb00af67d5458b604e25449f9f697a31e8ece65befbfe0a048f158f72feac8b1bdfd45d74f3ae110694519bae286d49362470618a13de2402dac19750d0fa9d50a5d84655afa78d3f19645350c3a46e494f6fc132d2ab48aa1effa4a69097a7b93a523c1a2d31ed76c9ff15f4842d09bd829d082e3d14128469de2a641fe353e82656210a8a50c846d2adcf2afb58e09be11199ad89a5f87c990f1b78e5aa72fc01fe7106c005c40a37c55a089d71fdca0af99ae0845e95c50c090e7177ff9748ba29f2dd0901d453934cb8fc632c98763499b5f54dc1318f44f8c58fb4e0ccb6f8b759ef0db6dbd8848be138e4e4935ea5d356e8148db95b9c3c2dbefbc62153d8dca68cbabaded9abfbd07d7a4518eeb1766fafc527eb56f74f5bb054d339b43cb369875eb1d7201194729abbad291e390a24a26208c9fcf1971060db280f477cb7ac11f1085494e16b7d21ab72a75a52e431a38e994c9aa6e8ee05d572f58f3cc4b430d0951c08dcefa019660029c82df543fd6a217e523450c8cc87de72568f97c2fc5b20cab3a65273b1338eebd14c4ceaf7ca24554d04f235eb1b7053ce4a665089df57e753dbb5ec5110095b246aa0b351d5c14bd11d9e2306abed048c19d84459f4264cbcfad7c464348b32841f827e668a9d5622877a4ac43aa2e853b150873af478e9c8a183203a9e63a03908053685ccc5b03477b7262c887097d453afe8b086c5a78976b438a0b36d3e50d9e8892af16827826034e5113a413bfaafa8929602db5ba4178a01fa140a484fd7bad6b308baae319081b94079bed3a3a4290b89ba6df8510281440ece450001ed6e276b514e22ca95d24c5289aac7dfd6a4de4a4ad88e661d4b77437ccc056c07d1128884fcb1287d246632929b0bfbe0c99d1087c610b6d03057213d397e8532b3c054ddf23d921a311c706feda94109228aea7fcfce3fe458a905081080e412b206ab2663a8b604ce4331d6459813a23adb91b4e9ca1c0caea681bd2526fa7fe00e575b4a9d42a35f5ea02070db5a08389d7d69d8d4ea67b25b36cd4b5ad5404eadd242257c226dd37e66a2d9c1a4bdd672a81fcb15ab247abfd55e465ef2ca5de91a45ebf2c8460397dd34af443f5b2051b80f50ab2facf308e763de7c8b1af0527133b8746419712c79440c2b38fffe6c95a311b7a401fd9593e21aa32eb9eecce25c3bb4dc62148193f9f134f982a797ff30b0b10032ec5975c20eb6cb4be968a30a12e4b69a997504e34636f7b079e5b7663ed0419afb7a74ddfb667bead49b5ec2253bab8a0d1720fd10aee69efbf3bf73aebb0549d3fa5173a4632161d4f51afc61908a5ba8b79f5ad71109b32dbbba030caf9bc539f30e618216c744b0765243ba0e1f11d701b1316f3dcbf9672e29a1d339d5e7411d36e7e82a7a8b7a480adcdd719b4ea2a0e936d2c83f557aa0cc8dcc972e60cf9048dc103ec104830af3428908e7a3ead2e5a2108754952f9376a9f44de8e31a318013758d1d01fcd5dde5912eb69aedd2448f87c2162189951341f0862ae43a11158309c7b0fa391ba04e0045cfcd2bc457d21891dc494ea62798ca7d16293149129d9c47de5995c51f465ab1cec0b692688e91ec19211996eb49562dc43c958a1e3a0fcbfd2c3242b9aa6d3f9851c694ad3b842da7eefe150637b7e740001e4078d933dde0184d99ad0a5e6231d36c18e70adfda373108dc9bb44d8d65e51562f03434728f941dcb138ad718e50b022236181e327f6230a8c8b9e346bf2531e01a1bf0591406ca91d9e280cd792f0a782600996318fcb4dd29db0500a3ddc4a224bd52881fcc77bf63539d45a2c499ead0d7f609d6e214b1313ece49ccc64ec5f060244cd40f0e4dd8795b6cd559878e514272a52cfd150f64445b63150f73f63039e4b0cfe62f489fa788b1747c3ae66ae9ad9c80e5264b36a42d4eafc353b9d297d5d47a31921ff37ba43b17ad46808f235901c0f439278c413bd5728f2922260530aaefc572d5066c61ec038fa883509829def1b93fac663f97ff6cbde7e7952e8cf1abaad3ddd61a74e054d45c53c626f86313a19283181661696425ebab594bc6da6b2c1e3c45b194544f40836b2b1589077ed0b8e8598513d55eacc978c4fead821af1878df9071f6333cc31b433496980efbfe43de881d08a040156566fc5edde73e9f21db7577914e9ce4dbacfd77b4d25b2531f3a98436fcfd2b7e737e6d229d1e2bb81776181b8cb0a71fbd8494793b45274296a8b69de715579e174c70104fd453c60fdd2aadf8d6d67a2038a1978d9425bd4bcc51d663d5b42a7a955e0c382e179e87d99cfa1d9d423cc7d44b1de69de2ef53ec2892e096041bbb41c557517d3f8c330f0177d0d06a1b04da72d4ef6903b2730d496072417330b7b7a4bbc067221d82d0cb41ffe21c4e40034ca5c376215509a4c4c93a8aef2873e4161a78f886a2a7cc3d560d390110e9eff757c2a9144531f2c14858f0bdae9170b2cbf48f43c78937c7bc8d55d279b417a917edd55ae11bcab0257862107ce95026f03526a7432a628de82f0d2971b414a4f6a69f95b6100088ef19a300abcce4403f49204d056a25283742dc39a1a0a5df3c6395c574261c4faf39644a29e7a895b062f84b1852d3052d9e0f519ab52fac53e87016fb85bae97a50d4a36d99f50caff29f171671bc595d0c32a6b6dc06f19c265cf77bde75498f8a1749419ba2cf688009f6f7f06bb7f235d1d12055bd6e389997c9dc46c230f85dd63386e3de37550804106757962d1e4e02e10d3df4e4bf1c90c71f1677e49739d08aa6b7e70e014bd0423dfdf4280691e1c08b804239cda0365628c3e10b01d88994d79f0efacdd973a94a931ac1c6262a41c8ec85a6e041e73b2ea9c5b0c6eff8531e8e98f3febe920dfe4f3b84bb41eb3a05ea61ecb1943909c2a7d5ed382cf9dff28f0e2945655c0779ecf5d8d5a702949f741dc460b18e98d0adf8f5e8865857fd63489e520bc36ee974895a81bd897397063140317ad62b40ffa94995ee724353249eee0552fa792f4589ac87fa9f3be612ea565102a929f4aae5aba15bf0de62a56ad112670e8261c79c9a279942fd7ed1beb1c7d5c29163a2568dbd864f44657d3ab3b6319ec21701ac73743af377a51ea949027d13b353b9c95305cb8412fb889db121d59eae5eae9169cbf2cf715a813b89f51efb7373cc0169423d9bb953bdc95c84fdc578cfb708f0239b17b19f5787b83076c593992bd5871c75db9fcc44dc59cc582293c7a3e5432089c4651275791b1679dd96d12a05aae4b7dcf7065d48df10df0302bc30fc2a6f77de9266aec77ed25f01ae52353cf777a53ca95c921d56b553bbc95e327b095e1e3d147a209007d19d63b56e1ae3f9a5e96de92557f7b6d164d6c7f26bdef6ee88057268754ef2aedf8568a9f708742ea0dc207ef5d3addbb66772d0bb953506665ba7dd4ab2c764abb6272a47aa96ae7b7720d7ed6d99d65380983f74ddb0fdbdd97a733e4700d59cc58d0488969baa4471ea62152797ddc5124c87f92b359d3463589d000eaf337301e4a54abcb9a1ef245eee16b3de16abbe5612fcd7bb1d103610d0a6e00c09191b3f7f081f4b3503b4a10c18411baf2f43e9c3a435a15a04a50a07f2a518b9a5c7478ac783f64f0b140813e4049d560e9a3f66fd7421823421c738801a06d8e87c34c42a36685b810d9b4ebd462b8750255db893b8e780bf8a721028b503021fa94df4cd9a6022fc8132643bc3c8580cfe293e6013e94de66a7d355944deeaac44d4255475529ed00451682d8644df58bb60e77b24c3ea1b41ee4ed920b08ce308dd6ed33343e2506ec55652def5f707bf2484bf9f4fa7437badb0b93d15c7c71b9430b47a92660132227b85861687c0951e8b54fdf52c71d935222c2a908ac78c9491d094547274536e387eb6d956274030655b37e1df4922c4827a93b2f767eaefcf80942ed9bf0e370b8b4a8d4812e974ed4aafd25c4f93c24aa89ffd6f9b2ef2db327a0b8e20afc2608cd45f65e27978d30bfc3bb02beed2762670a9c57c0a4e482bc78355fa1d39af5cb5ba0afa16200d7ceb3d7e082ecab7a55ead3eaa7b9d1955e99f8a8cadd10cace33bc853879ce5975440cb4da14ff8d7763c9502525031b34dcb43c2db6680dcda68e13c2c87254bf651f6ae17d5bad701701c3b50e0fea6c51b70f6e671939b102c37a5be786c9acb65380de3bd5788ba532588857fe20343d892d0d50128908cae5f8bf7b4f182cb0ec12b5665307d87c4a41b72131ab32cd499184f25826e8606425c05f2dbc071d4daddcd605f151adb3bbab5492a2bfb49ba89f01923bfa91cd4a33c8220255b462fddcef5a26889ab096ffb47082d98a9916a794c42fb4eb27e20ccf60a9c2f11d5b683c4638373b85e9d49080f56ee33b19ae9863871deb3af279b406d5720ca58d43f4776a2b6a9f5d6d49d2a08b9317975461a3ebe5737b54d202357c0a3ec28a26a45d508a02af9f625582b41c4e777793294991cfc0db8c7f0e37a55541df55ccdc0a25023f98085153f510450bba413c755d5cff490aca70eb2247a824d20d93957a5440298069ed0e04ea773ad2464110298ebaee282e9e6c62ecd43f4d0bda8115b7e2b4c478a7f10f52915d88752542778e17df3388a7bb2335afa28d6528eb0be1efa17a2b7e02ab41d13a0e304b4756379c9c187b4aa6093a0a9cd520f9c44b6d1d81a4607b788f46a499ade470950271ded6794cf05bbcf9b5acbae2c0e04f14d568d0eb1c2d3e9895bdd414b4c358ff249b04e43bb416d04bca3bc4c0f106177bf8ec482a3091c94e7577dec4f6e0ad9e7b02ed428d8f084eb2ca6107b9212d4c3d0c96b5ebdc7157637f0318b10a32351b05a94333484f23984ea01ed7805d6dbaae79b902b4d898e3fc187e0fbb8903559a424880ecd691627420c95a8f6ef2700109b44b1e6c4195b97607bfedba2ce5692f0349e51aab944fab5f73a3ab57f1a9feced5a38b1b988c5b7da594a7d75775d3b95e32f99429186f17be9e12cee4a245b156d7df0e03974caeea40a2e24bcff550aaf3f630a8df97b3e7dbdd73b60883157b15dcda713e3513c1643c2dd8d4db252d116a073f31629642d365d3d1b96c2fc1251c7ebe29f4cc178613b8af54f6ed46af60988776c1a079ca93b5c0d6ab45426dcd2d5c079ae57139528981f2e93a8ad49dffdd42f70a4d9191a837047c4331200d5a94168f0fc2cc48deb767e7eb142d02d59b9eaeb9284606e44711876ea6445297c6a7b1f7b7f5991f07ceb00d8466d8fe9209705028dd188366068cd626fa262fb4225a48ef0c29b36003a90103dc79870b70db0e1da1dfb18dd28f1260b1c5d26a5ef74a5e38170bba57caba97d04a56d43bd3ed09226b0fc4b94e180c00b9d0d0ac5c24ba8189724d2d16268c12834b9151270c23bceff764f08a892a43ff8aa1ea2291a19e7b4f5d71e7b70f16c0724c2b41f20386c10a861ca1e51186f3331ab65070097be77129850e58013ece2796a16675642e0782e36a49ca47cc38b63ecd28eb591e22562ae0aa8923934957b60a864ac1af9284834c81e7998b67a94613f4080c98c324503a0f524f7bbf4ab1523d738550ddbbfb3879fb09e99737b12da66aac634b7649a12d625e3444b54cbd8189effae305177a70b66dc7954d4e01c487589efda9d1afc62427cc9093239ae5a2f3671733ca0b58c62ace70a61556d7052e5e3601fcb8140039ccf73cdf384d807f76aeac6c975a02af0a1c41cac149e87955dc8fc1b119c798d14ed2a9a967bbc7b399a1f3d81c210f7625c51f32fd08963c852985e2bee66cc86e1769901fff51a9120f7a4a133795533ae3b49ce6cfec06355f3e304f31335bc785eb45972a143108e93e3e7c97902208559a6b696123def48ac9c2ad7b9f90152dd8dbd0c10acc147e0867b6102f5e0a42a01210eaa66483cdb9118be064affe51fed08576bfda1dec7d3b59352b4faf04dec798b1619f6622d64ba37fa669c13046274dfd110066e0f8fc8e1198c83dec00f5e0431670aa3017ee7437a8e156dd8b6fe0a0e7700334b8d122744a80649bf73f74b5fd2f0023c55b1152600b9712a49801098a383bee07df31892bc7bdc86a628f3472befc76438f04cb6ec2f9733caef02798e408af270bd58fd7bfb5a254d6dae2b97250fa5cf457d28449c6a3a9356a4638e2bb31e1079a9f39120ae398cdf3c4e0f2c4fe42ca645a313940008de1e734a93320d3615d53948dc24c1040153b075ff4e5622147364ca1518fc0354c120b5244c7806b2daa9068a3f017ae1484a76f72dbf8fd44eb67b93ceec64220ae9ac18c2863321557d7a37cf5dc869c0a3751e0efdeebcb104508d0e1b9a7a8b50f21d559664632e7e27655d28a785dd64373ea6f8a4fea6dab261a002f4f1105a754f32bed5d2a80447822e122d3aa7c7280c5e3beda1301dec3cdcfb784c9e2ea61db4bfbe2bf2599590b123c2378f603c4d3553212326a77dc094432595d432669e0ca3d36a3cbb8a9904ea1da1a760b8c4fc009404c0214ae957f3705ee078975b43f705e2ab81cc54eecce1174fab67a43669aff6b84b38049e77a0327bb27d01fd0f586240ea6a78a08f5cbe48398aaac20d8dfee45be9d5a24427bf229c29c8386bdc1af2062f1f90e8c7aa1077dbb275b0b00fc3216f2e660ab97058daeeba42ebc047df7d605a1cfdc0ecafb8f89aa366f61a7e115a25d42ccbc1177b25f6cc62e7d87b2b6c8ad0805ea508e9c931e1b6037c64da89b7c63d8877939e76aff452f58d59a9234ec641a657a65bc8d8c16fca7cf790640d7cf60797c6db026778f86b8e5c7c29f0e18fa27ac8b93a3e97129e28fff14a08aaef945d99e1cf05315203a71150355ff1d6358b5c0420a1d4e398132b594c7ace54f122e8eb02c972298cd0c57990cac3195362c7ebb6de99f98350d5915003affb73f3e947f9585dacecb6bac27d4707d6e195794cd6b94b9d5b472c61088a93ef94ec77ebacf2a8970c16be1480dfe2c735c1510c9779eaffc03d3ea31237075a7d2a753edcbc56883b2e5083baf7cad93d8f3d427035ef10036c06fa37e82af268b749a573c12e96786d9cdd26f1d729c9ad6c74d111993e6d9cf9119d79fc551e2d6aedd36cf12a9eed2cebb2862049050cfba16f06729fe64e904e55b91c78525e25a402680c581bed6c8fb7475122a4c2b71dae7af6856f5e6324463edc3096e64821d4ceb69fdb3b4a2879358c31998c3a7396799ad8e98fe98346f8b9a2b20219552c82b29507a621a0c9cc6682331fe34971377001a93c89767f3521a1a776b6cd6c542caa27547b18d208d27e6b008c25935bfa594fd5de4626edbbd02cf07da4a8e94e470202682b29a8859f67087ab141a961a1805f74cd181feb06caae13d6f1f22beada373f71103d92ec6235b99ccb1959dac38d2f72c4c21034a7f127e55302015a70359c548ce020a26868f21b33c2ae8e2f37073f0f28053fa7b916662cef57d936fa2f75cefe698a38eee61b64036fac37d1d1c123e2cf9b0e736ddbebede8ba887b26426ad957befbdf796724b999294019d07ab07f207446ccb2ddc767a346dace1269c7ba6659ac8cafd2d11eefd334abf7bdadd691938df8235a4d251530649643088a31453e8c1db27f38d4f8929c5cddfa83e86f598bffd8ef95ba8049659be0cd2d88604902b34ecf6828b8cfb1e7c1fffc88fcb833be79c330be1996560c61dc1d9db9a2e4d8bca7e205de4912fd1bf3f753469ea1802081df4adb5b57ef7f5bdc73230db1a4c7f5239a90b70f0e49e0bed13375b9c45940b33c74d6e72dc05b8e7384e62eebd0b828bd386bae99b8df78a4423bc71a006661360ed2d986960eb71d807719c85530ab982bd05c2ab0d1c6528a1497ac3c6d401178aef6d09e05d1016b4b387fcec77c8cf4259df294600ef7643cda9370737df3943b8eb94b812e9a297bc6f0fd4d1a4d65eba24e2db6fdbf63b22de4214ee816cffdccfe736c902b9e25fc13c678f669372a61464f0dc42510f6e16459d510aee928dd2454a996eac943d27bb171217c2e1842b9fbb3b73b5ddcddd3d461f72a4028e3fb05a6b8dd187302381b5cfc08a61188661189601e148e09c09a194d25a6badb5d6f93192b209dcddfb632465da0a58e418e2eeeeeededd2d848643fae99c73cef7f843f69e448c05c8de95c0397b2d8cd1874c7bda43e21e166bd97f12d80f1152830966f081146db8820e5a39a810257ac08514d40108457eb0041672b8bb8743b0100a6d84b3774a29a5943e133872d01f9284fd15b0c8314408566badb5d66702478efa4392d07260a40836980113a680ca918415125ba93b0cd1e1d1021ea0c8719d24adb5d65a6beb1c72310cc3300c7b2670e4c042214394c841c321b149eeeeeefe4ce0c8e1e19057c285d40e41b1c524ac540d8c69470912d569e6c72727c991540c0ccfce0a09cde9f5a393836dd0d87a7a4467e4cb9c2447523386676785c469fcf4fad1c9b139e2e2c1594994a459f28a17e6caf0c2f89c358a4b65387dba674362d1bb522f0973ce18e78c535a1c6badcd329a373cea910a8fa681e9cb3007f118b5084e9caa553b712c9d52500ca37335a5a0383d9234629b596e82d37b2216b1884def9998a701c3dce569c0bcc77b30fa14ec3935a99de1c2dc179a179a971bbc9c5e6ef042f342033365646c4ae7a947b162f344270d289d335366d280d2799a270a36c5c12645b06d31b26c7793c1b6c96ed92e7bc61ad1c627756a14232adb9b358a1bc1ac2271a882c9f6e40be1587ebc8163ffc49d93c0b2a57be195c2feffd8a5fc6447a74bcbe6c116b9387dce3944a592ad8f74c52660709402c7299858e1edbbc295dd0e8b65285d47b8b285f3c4999b54860a3217d325bbe3a4492b8c74e50a83fbed8efb0eee1ee99aa174f5a84d57c62c5dd6470e5000010a206cefdbfb1655b6205cf95eb92dfbc1a5efdf6384bdb95ab75a7fd46d9ffe7c95aad5a752a268dba847600924d6421a3fdc433b5cec57f306dc4bee25f7720bc28d2da349f8baf4ef0f6e7e8ca178285ed863847ffbefc26c2da6853fb226293dcafeb17f95d126bfb1a75d11f239dc20ca269f1be1ed7bdb421a3f3a9cb3433bdc7015c5167fb8f3ad754277bf9493d62cac6fc129bfd69fa0fc3a7b8747dde69c2f259513a4730795dedd966b3a279d2efb892dfe703f0f2986d322edb3f7df621682b1302b41b3cc86f63390fe665d06d3491f63d167306bff6b9de0f44f6916da94aae0194631432030bc70f3dd42cd323991ec504ee99b6f0d2b9b49ebcbd3b7a36b4384e357a389a934c956471b2c3e8f429fdfd4364ea26f23e6b0087364c51548a542a17e7c7a44df5922d03b06f5b028167a98ada35c24b23d2a57c54ae9c0c274891cd71a3c89b3505e922a0c95a11c05eac2eee99ff691f1e16361b6e06761be2f2374344412fdd00d160ce9f0e112983ecbb506362891b4dbdf51ee2854cf286957f7b44fc5695606bef488ba2b087f1018d2d12c3a7a54b3a4a2910e9c5b3fbf0011ea6059f1313e469430af08638f627cdbf488a2842fc2186d5ae5a876d4136e8e318a5c1743f88acf36503e8f547c7e2cf392b36cac08b30d94308f5e4598dfe441365d0c9bb669128511b25c29619de91175222c168b556badb566ef38a3ef2e47f9c4b42186484cb35807652a50422702ba0ad0653cef41ee3de6de67ee72944f1b3c86baaba7c5d3f71f7ff91253b3889efe846916164f7fc634cb8aa7ef2c2fb5cb49f4513e5b159fafb39ca65972db9cdc5d4609acb91c25cc5645982f287461fa5b067eee8a35e87faceb22cc51a76dfaa691344eb34493cfe86f2dc0ec4560c6029c2b405f314c857ba602cc4270160223f6d0d7cf422050adb53ee86b05fd76c41d04657f725239d0ce48ff829fbb307dcf51d93930fc1ef9c4167cd17145b3e2399540691fb28092c11f8e269bfccd76f7edebee750ad7dd52ec2769ba1013b7bbc72cd698ff5961096fe77ce9419852caef97352b149f4f9f624f89a5e8042968e164041d2ca9c21b72f4df88252574b005229c0107397560031672740aa6c3959f399987ad65e21c638c51babb77cb76d313e8a044f2e420c1f102848ed034429281c70e56e0ae3542af66dbe8ad12270b54c4e166ceae607fd73ed464c6e19b44e808fb7504310f79c8031e720a96b665780487b1b004b3c709b4f0032da0300d81c8ef1df2fb6db8600bf5c8bf3fce25cc60cb9a3033296ef4b66c75b2459539bf875ccf96f02f68af246ca7b592c48088bbbf368ac41e1b618ab343e2192d32defb69ea524da5664c6acaa4e66949b33c1da24b65b1ecf08a2da1922ed598189e9e9f56b3805a882eb5a6860b3ab12586aa4b98cbb572b15c3937cd923284e852618860135b60bcf73ed3258cc5721a560deb08f65ebcf7de82e882f1f0f80bb0f74e24b6a0f874094ba55e2937a57a9a458486e882e1e0a8017bdfaed8e2e23d2c464789d7e209d105aba981024e6c6191ea1275b96c5caad07bdf46a20b06d33bc0de372ab6ac78ef1ba64b94c56a22ac9ef154dc21ba501e9e3c2c892da09d2ed154ca95f249bd9434cb4917a20bc5c1f9422bb69820e9128d89c18949a283bdefbd9745882eb446aed09a2360efe54d6cb95d9a2e9744b9529e062303ecbd844174a13041ba34594ea2cf5ac2d306ec7d08a2cbe491ef3d12cdb2bdf747c4164fb9bcffd1a59972127d9c2960ef794497892357e8479c9718ef697469c61031446ca9effda859ec7bb907ec7d6ceb4d18ec7d073a9e115d668d4a6c99efbd6dcf7b195d268c5ca1efbdf72cba20bc151ed556fde921ac2d0084b53523ac2d95f007d397714ff7fb5a59a95a2b0bd307851e586bfd5aeb498c2e05ab2e0cab2630b8171886a560187651361186a57030fdcf85d6028bc16ab018111683c5603598bec7220bb95c2157e7c26030fd6e8555c1e2f15821168b3e07aa27299c542a457f33c13e1a436b4434c60b694c0da6af5daa4d1785f9c2e99aaee9a230987e76ba13e79a64b278582c160fa6bf65927a30987a30299c542a85832967bd7bcd989a1933636a30de2638df66a63ac3dcf5f4c0f5d0f120e1cd763c94d3400c37d8b9b8dbd3dd18e2ca3cf56949f7d39521d6e8c26e27d6a8c1cdaec464edbd31dd4ec7d3a3ced524fa9e09dfdbed5c57d22cd6799aa5bddbd1b8eb79d999fab2332dec37f39dba1480ae87c7c5819246bbcb4bf6e5242a5db625a225f427d86fc1ae87837979898b59225db825e20a7d8ac2f45ff6655f987e8c2d9c0a620dfa79c303a6af71b706777efe56d7adfd565eea76be15a6499a25773b55a759328769e39ad32c60b7d3f17489f4f4bb9ecea7fb6996d6408a5de5a56ec7493ad2e5ca15fa9cc949f4efdd5161ea3ad83993e9e4917eeb3cd638c2b64bbb35609f3b17a6da631718c771bf71e07497db2f316d01801e4c93e86fa0673279a9db69127d6b2f6782b9b907242fa6596c4b8f967afe1367a0d4e911fd0080b2d524fa34e8934011f82aa31e511b3edd8e97426fbb1d97a102ce04d3253f3967e23813a6ef27f750973a9e6e070bbb6e07d3e7be1c9526811076b814b870a4028e532c41042fa1045f8c75cf75cf79cf758f615fbbe7ea63dd632e44d99c2f56133dc634159d1013cfe985dbe4c25711be6e96387c5d20412406b2c140692162c1424528347b645f7c520ee11c2e7de7ba1e1fc6f0f6b1b1ecba8e761ce528108e29685f701c98e5d310a9a47073cee97a3931e9b44eb374ad56125bbcf7df3c50e20683ff495704f75d17a2785ec7837b2fecbe0b6ff4487ed7853892344bae9dd32c40be59cdc2753d645744f7d8733cea635ce51ee37ebb3e5f857d81e7cfd8627cde7758addc7fef799d8feeb9eeb98a799cd77ddcf61c07dad92cdc37eee1f1f8646c2fa300dbd938a3a0b1e7d8034339dc78efddbeeb703f1db1c5e4fd0f105b4ede7f3b0147f0ddff4cea63f53f10fb13f0b188bf0a02a98ffd05b7ae47f7d86b1d0feeb1904b410b4735e038c5123d780300179b05858b35e4479c3b2c517838ce42b09558e2f91bb76919c751af6dd6de176614e01a62e0c4e8742f0bd9bc65f4e979dc775c16e11717ce2ff9081bf8ca9437aca6302dc1d83fc6344da3b4eb8ef448ce1912f5911ed9f42895879bfba687f092b52cd68ec7d8f74db3683f5d646f7febba202c27bbc85263dc64ad75d3aa8652b510a5d6af32d411c626718f71cf7540b0a73745a88f655a86d53e354d93b0bec9f5b59bd8228b105bb68a64d3be763e28fd397fa33f8930a247fe138440773b1adbf0e4babc52d85232151a986cc956ab0bd81656edadcd52c5321ff4279f6dc92422e03e105996ddecb3a8657aa60e37cb9a9a1418adcd9c37a91e51dabf3d10de92e22c5b4128be01e2e8118db45b40b427db7288887bd606e9b4130c42b1164e1ac8156bedb6cd39ed9c73ced93394eb99fad5e16e8fad4b77faee4878c96d787db0e833a238c61ab30698965a26b60cb2a88b60fa99bf344b16799fefd7324ea274f412858b237ce911fdc250ba42b9f358d29d1e5116787eec78b0c092272a69b5eeccd66a1916383e210f3238c7556e99ed056f37f046036f2a1bd7b6592a2732800f383ec9863005432dbbad4f4da24f9f65c3c66854c3fcbf83e90a04400c41577858826fbc4c93cf23049cbc833dd32390a5a18c4ccbf4c8040f57723922982de28e23196bc8186b7c41c898b9b347db941d3de7b6e05a2ec62cc33ed3424a372588689ad530ac33c982ccdacce3671f23a516a434528c0644e4caef9f617c15bab36dddf1a898ebbaad13826bb55c87e9d3c73e82148bdff1311c638c94d6ec25d831d4625d8ccfad28c562c46a7d396717f199207412a16307970433e3c0619ba7776220c16945ee3187b5b1456e6efd3bb024f2c7283770afc73fe2399942f1e09a4c6eea063dc6184494419a45be778c72740412b1e5c7471af6ef0b0a679584a5d3fab2703d7eb62ef296740e369894528294e39134d6e046d1f44c8fbc0932fe4ee4244d3877daacc0bf0b5e17ea7c785df7bdf79f17765dce0b50e22e47870a3d3c4aace079a16c0c0335535115555133291cc7711cc7755df7dde7893beea38f8ee3bcefdeebc22c39ee484adbb40f9ad5ab563510ba97ccebf59241d9b66ddbb68de3b8e7b8eda4f3c16d5bf7dc775bb86d78039b480fe99aa6e9996e82e34299924324272787880b4dd3344dd3b66dd34c3a1f9ba66d9af69aa6f1b80025d6785c63c0f24df2257d6419b64dee60a998542a15d322cbb22ccb324dd3b4ec763eb42cd3b2ecb32c5b499cad70a250a29384099a16b6001bbb30c160261891b5d65a6bb32cfb2cb35fe723b3565a2bb1953412256da0b249c922b1a5995aad966662516badb5566bed5b5bbdce87add586b5be24aeaf257190339208cc1c58808d45364b6c6c6c9660ff6d058661188661b5d6af15eb3a1f15c3ea5b89612be215b07c9f1c176b270bb586aaec255d36945c7191c855504a29a514c3b0c730ca753e304a2b166649a90d89a98d1b9ec4b5d58a10b2f10ac7de39114b361ef0793ee180cf138a067c9e45f8f127dfef748825237c7c9e4b30e0f35c41119f270c8868901662499a7a7c76302ce0b39b81c7675fc3109ffd07f71d422cc9d48ecf8e04213e7b1382f8ec51d0d126dfef2d882599a380cf3e831c9fdd09fcd99f00a23d34c4927c25e073bb01019f9b0e07f8ec4bbcfcf784586a94cbe7a642cbe7d682013e37187034f7fd6d24969a55fadc3e60f9dc43f8e17323e146777788a5f629c0e71e4280cfdd021f3ef70c6c7c6e9ad8a27dbfec422cad7c966318c06789861a347a1b7d963aa4cf920a01f82c9f2080cf320adc2f8b104bbe7292ab481f48233d7c9636c0fd1206f126b6d8ef4cc6674924fc2c87809fe31dfe738c03ee0f412c4d1927794ae7d885189fe315a6ea88d8827da37c8e38f9002d3eff80bb06ee908acf2d709bcc88a5b9e3a4d842bb0ba2ed03c26c1d10e6db80f047986318e13ec26c1910e65b44984544c45626d323cc760161be3cc22cca64b0ff10a69497ac6b4798ad1061be41a45cd85f47986360bb5240986d8e305f9cb3c2fe40843906b6a70484d92220ccf700f2e5ff225f282f551f9730db96305f038459e483fd71a0585eaaac52982d4b98ef0f2cff1b3e5eaaa80284d91220ccd787b0a2b0bf8d30c7c0d8cb49fe2b61b60308f3ad717a617f1a618e9183a59ce42f8030db0084f992c22ccac1fea395ed21ccf60220cc7746e8afe22e192f61a6a9f2129511e618a230cc225006bbffcbc49830e68be99f3277bc446d5c537989c638c91f25cc31442ec22cba2dc27c6db0bf68ee581661b6774598af8ad03f14e618386b271b6a63c2a6da6cb654121c63886e2814e69902818d4fc0c6dbcd648490ca50d969c2985857d64466b22feb73721266dfc1f2ef4a0cad1c1692cf9eec11ac8d4d59d4f513968d3d1ffb021b634daf1fcc3ac34e2bc7f3c2dc398d37ada298a0b2491dd95eb50655a6c65413d736a70dae9d164f9682c24a65a3c95586370c336139c04e988ca4a9ad39f8b876ac0d737c61d998da5881b552619a2ad6700d09ad1e5c01158593d604ec7f736023d6684cc1c61b0a97b2e9c0467b74d950b2bbcb20717f773e6868bb7b475302f6bf38b8fd1b4a53a132c5f259d8ab0e620d194ddc3c4ae144a38bc2bea19c14abc5715722d6e7448a65495335c95d6202e248fe86f2920222897edea0c053c0f2e9e7189c9493de90d1c4d554988732310db310ae03521699a2c80d9c70c209279c70c209279c70c28922458a14a1a1a1a1a1a1a1a1a1a1a1a12952a4489122457a54a0045fdc7fadbdff5cace1b147f65d2492dddfbf92305c52e4caec5e410e9636b42fb970e58e2943939461c0f36974914ae4cafcd8425ffef7ba2842582cc31ca4e2969d0f19da1ea1f0b02e5251327fca904a2ca6e15f1a5c7f6a9a2253f78dddd4638d2913c3b09601836e3a298d72a782618b2af9cbc1b27d52acda4cdbb8cefbe6ea041452b18285a8850b9494173062e00de45c4a39ea3ebe0d1a230e02467449002f4a727a51a9742a8ef16fb8ca6974716fc915aa6a49976f656f0bdb2bb91491184d66485cf95628ae094cff5bd556a55f957489c60cee050072351caa47a626d1efcba5ec91d6bcf900f0df37e3bfadd56ab53e95ffb6d7eb93f1dfa652a9545ff8dfa6a3f381ff6da7d3e9fbfebfede6e68bf19ff68afd7a7d30fedb66be17ff69ad56abf5a5fca7fdfc7c28ff692a954af5b9f84fd3d1f95afca79dbeeffb44ff6937371f8bffb2d7ebf5fa56fca7cd7c9f8affb256abd5fa42ff653f3f1fe8bf4ca552a9be93ff321db942753e93ffb2d3f79dbeefe5f765379f6db55aad9fcffe7cf7bf47a259b2fffe88d8b2a954aaef7f74c9aa9c44753eabf39dbe8f7dfaece9ebfef3ff6ebed7f7fa5edfccf79abdf9befafa3e3bf37d33ba203e00fc64ced49a6183fba9b45ead56eb85e98332bc7053e96caa4da583e93fd8fd76da6eb6d376da4e316270305edbccebf5da66307d182fb694d64fabd5fac1f45fa0682e3495a6f3a9542a1d4c3fa54526d24edacda79d34ede469a71b4c1f85855d91bdb4992f7b69d9eba5cd60fa2e54d450d6ca7eb29696b55a3f987e0b107692a9329d4c95a93255a683e98b4c6c7029ce354976ca6eb25376ca4ed90da6bf5df07b29fabe2fcc9e8c4ceba7d56afd60fa17dc3e63b16d9bcaea5895555995d5c1f437d0bf5be1f6646fecc99eecc9de60faee6f5578bd5e5b7285febd9ee26a7a14c3c170a6588323525b3498ce542f60fadf1c6eb62ffbb24bba1480e76076d474a9cef83c8f00e0f3bce9e1f34482bd9fa86619bdf7d389e8527f543ecf1c60ef274d0cee83eb47f7c1f5b71fb8cd418a35700412db1779098b69527d6bef15351633c23260eea87ed6f5a8ef6109aafd89ad633e38ca20810f78a082279ef079c27bf7defdb3977207fbf777777faf9b6df469136902816d9968826f0f6eee15ee699f66d17e4a9793e6d7ee453c57899b4ca1e98823a6fc0e9b488fb29b56acd8429d76148af0f728fde6e1ef51a7d3c652af226b35a50b193217887c3965d83331fb114fe23571b3ff00e90f2279fc95e70ad37eb98c2bfbc9f5f8c416cf0db1e5bbff7dcf81f97aab4753eb7c642fb3975c2bebde71256e826952cbb4c4cd6e8a3fdf61ba64f2f3b7087a0af4234d8aa9ee76782b0bb39d6669e73ec68b5ac898acb3dfe1d8e49b879a84bdf25270810491d85fce13bae166ff89b4c72872ac24ddc3a34487c3e91109a63cd223154fd2a3e9a958637ecc05e2730291dfa698ece77b0b620be7bd1772e1ed7cf44b8efef4684af7d097d4dcf9f3fda7595072af46af66419172266916ae8b44d2fc1d5820e0f94d043c3fa5043c1fa77bf0ec562267124ca45924ce7ee2cc5f22c133cf5e329f03a54d9fbc245710491fa385282666abedea55b39c349f6a60f7f42867bffd7c4fb90f620bf71348f6f6b3dbe0117cdb6756cae76496851125fb1ea1fc3cc2aa9e283cb08c8935e6f7348b16d2e8d1ca4b9eb21e7aea6df6edef9f3d65c33c9adfb34e1b63b19d45f43b11440041e1e14010a1230537c7154d22a7e971b0a948d9616422be4c9044b3340ec6feb157a1618a02fbcdff630b1831ecb3013086612c24825070c65008faf3354d888944901f18f611d4b470f6e8069e375c368d54fb89b570ce39e78cd6647e9ca289199ce3ab8a3096048661d8a7685aa6fda68159c8e5ce97788888a7b4c3118e4892fc2d823b403d718c428022c08181983c08c710b83fd6c79ec6dffef3b8eebe83d14acebf41937cb3283fdefe82b907bcc51c5018121d8103fb0f414da0026913f2a7dea1108aeda5cdbd1ba8bdbc607c8e048d4720c48437b07f034920c1ac82dda482fb3521261cc4e6feef1dcc1d1ea182e37baf81283d2e8e7fbb07a2a5aa5972cc4142ff02d8ebb20deb2f041f69961c22a247f4a5b5f78efcf3881b42a5479446a10b29a9c249307d89240a2d1d4c25112d25c53523bfc82a6e74b1f443e352b270230d537a44a5cd4d8fe84f21e2fb7b388598618c1b4abf1ce1fe56f9e125162f6211c6488abfc25a1561288c9bb4cd4d0e671cd87e7ec1f6e38d1ed96ef6c836d60581552a63edcad9d04d11e5514a69e6e88a18616badb5962601cef8710a264e38c71f110cf52822d1a3f82b10ca67ce39e79c65983ee79c734e77b731e79c73fa9c3ee77cc39d73ce39e72c831be8901b23861cc1f42fd06096d35a2662701ee12998a03fa2bd69f124bac052be8c9d8c35a48cb44584c3a57984e94f1acd3222a25976dc0c28140a8542a15028140a8542a1502823468c183162c4881123468c183162c48811d47cd9cd19a58c2499e330d82267c2aef2a1d083407f72f226267fef7fdf7bde77dd73dc6fdb6bda67d95bfb15fb68d3e0da8e4bae7c8cd6255d3219b9e2a22b635ddb078a24f928584e16316631d850994c4b948c74897245e68ba038922c549e10637644288131c94d01f3d256cd8204fb6f359aaa59e214303ed85f43e21aceec66cfac89251b1ff83c8f78e0f3bce94087be3315073ecf1ca87cff34c592111bf83c6334f079ca64a041df19120cb4925892a60b7c761e0b7cf69e0af4c977b6a2c067e742a88a259932e2b3af26f0d959126893ef0c27029f9d08602cc91c08788d03fa7e67ac067cf617bc4f2cc9d70f3731a0274b52c4e756438c24b1d428225ac9023acbe1f1b9a10023154bcd1aa2554274f79de904f1b977f0e2fb1b2696da47c7e726827b264773df590b7f967948d989253f01217d10d0dbb792037c965f4041124bbe7a91495aa46a47aeb8015c7cbf3cc592bb70c814cbcb1f9a27c80d1f3ec736b8642eb9e22dde8a6cc49dfe1f353ec729b8643d72c53f009f23ce0b0d1a95c537e9730f78f4f94577c66777c97ce4ca0a4d25fa80073aa0922eda0d07541bd040986f06620b8974d16c3080e402260b982a605a4917ed080556464c4002291ce9a2a52280038107382087255db49a06b07ef8604012e9a2a18a484204aa076a01a81ce9a2d1f0c8b1f6b24438d3912edae9a44301395ad2459bc12d201280804c8974d164e48aff0194ec48178d885ce1912e5a8c5cf17f59b9ac5a5606d8c15162f981277349170d46ae643dd24533c915ff1b0520808c0f2ed18a6a00357a321fe9922d912b3fd2257bc9157f1a3601d821f9e097ffb6a16ea4cbdcd950fe9b4a28140a8542a10ea1743e5442a119aff2335442a10f854249544089434972e64e145c3bad294c32cc98114a1b1b1920100804028142a1d0874220179d8f100824e3432f2304023d08044ac9002506a58e3c8183e4a607a15028036cac92c91cc96432994ce648787272727272720202811e043a69d1f9009d9c841ef4215098e5c949084a7c02ce98b9c444cdd394992a00814257cae572a540131313131313939393933f393111753e4e4c4c407ff22093d0c4c46407042536d9e101c3929f1e319c9c8420d8385cd5ac56ab9abff7de7baf898989c965d1f930b9f7e44dfec4e4de8be441892f9215125a392c2598988427d40915e3fbbeeffbbe7befdffbade87cdcef33f9fb2637fcbe2f86d3f80cfcc68f788dd72006d8f87d687c7c7c6860789ee7799ef77ddf7f9fa7a2f3f179defdefef177a9ef7030394d8fb79b9c1653cc64d70f8be907562b158a7175dd7755dd7799ef75e9dc1a8f46b98cb92a643330300000000e3150000281010864302915096c7c21ae30314800e799e4c60549dcb84510c2419028851cc0063080200000002200032b401556a54009f20ea0602fc420e2c5247d5404e792f095d0cc555248b39b12b8a39671f9995ba869ac0f66a03a4318c21962ba9fd2d0040289ad4031f335c4d3392c2d7a4ef1bf7b90016045ffbdc50a7071dbf617014d874526f5c3a1d0f252f1955529c5d55f00d7a7b03e9c6375f3efa10c15e4d1b81520e2977822a0ca38c03a90ac7b4ba8669eaf7fb5891ea03487e7c342a971936ae701a68ed41406e5ec5df852ded724d06420da5e94756b1d094da86c0d91e279355ff371826bec603e168b61319ea6e25bdeee827a7417c96c5472f0ec817c56be053b76117563576e5b6ff2531a149840c49c0c1221d316aba1e722b7b91b8da1c6186035e424324616685bd4242d1e18a6d7b2c8f8e8d2f6575d5c89e983086b0ee6c0bc9c2190b19b742208d3a25a3f467c8e0f4adcd1b6e547a1712495349318376420c9ac0f2151a8099b7a2421f21e00d73fcdedc32ef820de26caae9efcfc6d7326fb140eab065defc49e5e6398483e3c7261650b193f9b2783dee0d36ab9be12ced7d56a5ca0ecf5afb4cb53145216751bc05922a550ca56847cbcbcfa3d28a8fe3057762878e4f035f50b2fa71d51696a903075cb4281ad5391f2bd9b6015d847288212db588555cd10a479ba0024d5c071a70f4b8b3f0fd984beb30cf81c8d5c83e0bbf7e02e95693c1762162b10e41b6064f3044c6514c52b52b406bbd990f36a9ab0065c0d87fd7e76041393da5076885f40e7073fe3bc1344e2836971b9705de41c7b588115e551d46d96f81b00703d5b0f361d63bbbbbb9df8481944736139a8500f9e471b8f259147ae5fcf97f6f8b0eb0b6d2d9cd31b1048d4542461e134087a4db4196792bbaa871710e8feee0d83f1d203e04f9730e52456ef51a083a1729b5a29190ff20189ec48caa0e456414f41ed2784c34cb6c961458b28925b8405f45ed8883d290108c040eea5faa23401cdd61a756552a3cd8c0d4b83fd77a6a21a46811f38ed0c61f89bb98ee77e4da05bba83add5bb40da5070387bf2a6bca23dcc3511d653a983da56365234c0c8063122ca40538cd3f6254dcc08b524a311f11e68907187b5f65e2ef3d48aeaecb9c7c848347a54a82bfa2a4a1259151766a1914e3a351f5af1c6b0430fea4eaeca2bca28b724cf05946945683d9b510811415744bc421258998b86d0e5c68593f83d54062da89b3a0e2d6e0a3559bf208bfb2adb12ac842039b20e859c504bd7657d0f692ecfc2d20ebc6a2867d30a3e8a5eec2d01343ca82f6f82a5143cef5d2bbb9d2e9f6610f30145bc5a03f5b3157e3dd79302c240dde4cbbc939cb1b304378993197b70f0005367274ff0cb120f74f37ce0447f1da995c3369362ab75b4f749c725e187187873e120e8835ab79063fddf111b6901c5dbe438726079eeba02ce8ca92cc33e7a87bd6b4ad15784a72512997c797dc93793961447d4768020b4decdf79d576f32b417753225c388e81b3e41cc8789b6451ae74ca713a718a2c17ea21e2f3c8a125bcd2b8bb38f17c10da09623d4a360f4e293dba9b07a5c91b2ac4dba02b008f4a1ab1f9981b97ba93e3007ffc770f62cea53d0f88afe8cf52974ecaf638bc88d155d254312550b324b68cadbb4e1f17be8b0e735076e558f53f7b66636421673f45484ad801ea139a27363966767ec4cf421b221835fb4aca70ce92829d399e849be94e1e108e9fbab95804cd9f3329955de1db48736a26bab76b5116805ee06975047deeb987b2849c8bd337e3b101b62907612b792c9ca80febc4bc3438b53ab96bba4af2fa3d5b04854febf8ff9386a132f6992107212f90561352278b74e5d16256e2e183b070c0a6e701de6dd62abf3ca7d584ea37384e9ca34848e5deb9105df38354da04c4d599a23a08e26155181a219d35ea07605453b571b84a8a1a061bdab08276dd50a96aa441bba25d2a72781505d119295d2a18249a31622802b5a68edb804e1313f65c6856a9930653c3cee04537e488a08e62a66a016e160587a2ba4cb7e728156797d2bb812442c0849e1e206d20eb9c064daa07e65bd94e31aecf5482bf95b5ac6e0e0194179032c65dc5370965ca630a20326043a14d6e5f7ae55ab005dd4f1a15b945205b6f97ec22abb9f2bc607710e71e498cc7c0d456022f1f7cd9d3552e4a168d335a30e1d69bce62e88e8407835d328a1d44bb85f957c4c83b9722b9b052000c2afff97e49cfe2e56682a1e6cbb52ec9d07890f8baa75ce04ebb073278bd4f5d23f0ee2544406cd3b22af6a114a3241267fc337bd0c0593ba648df235c10fd98fb9f57e4d0e460d29baeaac939f46135ffc9bf8d4ad5c4398d09c94f20768c6d594291bf5f14adbb524a6cee50a5cf0ddb0885dd3c9fc9ded0ab8bd57c23506afcbe346e6a125517233134c51c0f11523e4fdaed526b58d96a27251993d3bdc681340b53aed71e20b696c6386dd34f2eb3299b9d816d2c5616036dacbdfea17d3f40948d43a9c5f4463c682001b9127c9cfa582c2174105db4134a5e496bdb02925922104149f06824c81e4f8957c3373b75f896f11fbe711ec8e062d0770626266fc5e397bc497c158021d980e4cdcb18b750ecba600ed7e339414d58ca0c736d184d29270b7f23d4ee20bcadc4e2a17612012074474d1fea9322d3ac872ebba2513b11c2fae80a42b758828de23d92acdfd6f1894e30933629c0c65592089c59597b18b7b4932548036499760b762fe1a81e315f88ff4ceded92ffde4cb43741346a83ab523fcd0afddc965f39037d5606422e134330022e0605202919318b670fa0b48a014298d014d6a114fd585c9a34e51863d2a9ee379da2e80a42efd62b489644a6ed8f40d1fd1d2c49dc1052fb49686b107c38fbfd7ec5bdc6a05857020b2f6202f5aa7a828ac8457497a628037c298e8ef56680347167ab0ddda3a8e60aca1a594ce55cd09e29b18bd7992b14d665a1859a04d032f13418644bf7c8e6e1cfa37fd1db467eeaed139dd8c4dfd82d7cc28503fe0104d41cda2bdf31f846410781a9ada7618ba627e134a72ab34a5e673f7baa171156f148e075f0e8ff9e98e7a0c6a5408c2fb245106ea8f0d2e756c694a8136598ebb6a2a39e751671c99c4cd35910eaf4268c722db57c585e8af459782e6b6916fe43ea644f0446f1e55c9c4ed7558784b5006095474916824f4d2c13d1148b4a12fb154e706d9a5234c178213bf1b3e12d720f2cd034b3e84f93f5d1b6e9140c92da432a9e427fcaf459d8cb612e3979d4c2c3096b9494614667287a7ae193fa925ca72d5fefcc451ed84a63b37b95a60ab35c9adb21025db82d8574e2605afacaabc55eecff7f33cf293e978eb4c15e56197849847b9904319029b56718fa55d00feeab40a7356f562638ddd14c99e36003a8562fd6bf5d8ad44bfb3dc1fc97538a79a87d8758d8b7c825abde2e9663670d493de738bbc8ac12b70a68314f2d94b2e6fcf78528cdbf469cc5bac801dbcc78b5399abc25ed6c5e03f05c57420e474e63b70c7b4d13e7f59ecb943ac8e818e4fdb4a2b15648f62e82ae566c0ef9954992cd0880a041f903c84d41bbb0ffe871e1e78e7112b0bc3981ede11b431ed5ce7c1846f312f939b4f40f493894c6bce5921c70febc154350bc356e8e73f7fa9b463d458fcb40f332b92f5e49acd85e414464b347c5eed96d21e8cee0272671f799f30ab0f733630b01022cc5545b06d0d8fc88410d5c0292ad277807821ff42e10ff4e4c8c4adaf26ea6119be02c11e8ede54810fa1253c7d67f38e5d18060c546437e5e0b28786a9787d2f2b5dd6ad4fe4ebffb143d14e824f57ed1571bdadcc9f24f99d09e84420d67a477c289d07c19ff199f3e193fb35099f91f3f953b688adc1d1a3f5cbc9be63fc7b5f850daf6e7be2522bf349078e367024f423d4fa0f7033d27d2f303bd27d6e3033d27d6fba15e27eaf980de13f4fe909e13f4feb0defd146f8e3ea01bbc048058187a406e60a58063c5d001768397048c8d410fe026ae7401e8add4d7c37adc00cc6c38855d1358ae49d08c9cff18977a26c58c342ecc1fe4febfe531931a5ad2b70fc7855c3617dac7c5898c6327498873c9a51247a36109d382a5b0527cdf24bd14fd3dc4b7085ab0fdc08c022de5b65f20b7eb5f02dab09ea717f1e477dbd2c54c0549371e34a46aa26d62772e514d7c946233f248ff61cde1bc49cb4654ac8494ad4a1222408d6a7eb6a60d2fe886023a8e9f1218e15b390901a4b4b842ef1cd09f47d9e1cfefc448dd4a15dc1dec25e292f0d3014b03c99d17b9ceea406c9e30c754eda9ddc529204460d894df38e5bd9a4e54718b3ec255d1df1828eaa6526b125e8222d7c77d8d3c862f145fee6e55d8f7020d29efc39c0d8b4171a2a921916f7b12117601a627ae183a2a24515f2cc8f002ccb83f8a9440b10900f76e0c179f1df00f700dcd88c9af61a5f7cc0146ca82d025306e1d92706604382d94cba4197992c88f233df733cc9f01fa8a356e8e517d3f84a70122cf1cf02c5304e3bd6c6a4c0d16fb8ec5da528af7c25f3900804890caa0d83324b536439ed51050e2b54bb4ab88cf8a28c44570bafd006af41f8b9315fa1e355fb3a25a2fc51de9a829607cadc4a8c7a73ba0359d6ef79731f1cf5caec4f0c71713a04bcc2b9889919f5db190ccceb5b1726639af889d460ceadf229a3596ea2be0e2d6393ebe3200dd7f791879c0827246df84bf1e9e34ee232ccedfa82b39faf8fd958dd984a63e2c50edf8f4e667653d46bed6cad23d3a67c79e187ec722a63c629ae4be5bf52392ecb9fb8efe7305e18abe1da55cfa24398ef12fb368ba3327ecb8131bcf592ea063e5c8d74d4a47b1408bc19c723d8e1e4a4f11dbf1bf5f8f96d65dace1958d3df83955bb775a34f48f13f8dac6238341432f6f921c93b558ab6997fa7441b92ad732081a2701b67c04f0567a45edf43666af4a361e6a39a7e8d67cc5235fa877ea8327aeb571cbc05e4fa426f7e3a2b78630261a7214a237dfb10cae94afa09e00809278fcb516b9f3cd6e5f30a638e30a84e130cb0ce0cbda9947d1d2d6e0f6a11f9edd0ec540b2022b96a0eff811744722e4753ed780fcc76b378bcc44f13467cba51af6fcea9ab9d5209d21312036c1fbb4a9b8b607176b4edc93c9a679b009451a890104b18a5d76c177ed240551d719b4c1e82614dd74d89dd12d3e4396f63eb8c956d9853a3cb8c375bcd61c6875d092da49cd67228cc6187dd0f2e2c2e12b25e48e3c6619e00fb28bf596493372fda79718bd992fbf5320b504c8deccb6c58ddd9b825a39064a33f95b48106612381cc878dd03ef8664ea93c1545bc5fe725a34db82753f81d596f92620a94364b33ac6742b89ac15fac816c7df8b0d17bf0a1d5cab9ad1f0b09580296b5b3db1e68caed86144edb539ae184657951ba083abd85d1f1d5db65965bb6a2b5b7bcecdfc581f49e76e4c9cd24c047246bc716dcbe6183fe85c55680ec11e49c86ca6ea84e1ba29c77615edf8e6e6b1f6bfdcad6f87e08f7545c80bce1d90906e7a2f0f554253460f6c439f72ecd256200c23c65f8e1ddb0e43de08accf1c3e861092c548830ee5169c251c652261f3049449b3a17b028cbde7415eab9a26ed6e5beb08ad8681349e03f15dbd585a57547891ee650698ae00eed2af20597812e400d66bff6fc2dfb3946c880fd2af0bd3b06da4ad714700b67eb28d22c0f8a21f6a035e2d52a4747b173e767f19a4a6e641681f74414fa4b20378903f5ec80061658d8f37aa805f14d3ee984ab1690870010dd22940ef8fc099cb8d9a04b35604ad8951afdfa728b48563f2f8acb2355cb6001ebbf3de2508a87b5d45e0de2e00ef89711a4ac2c89854feeaf75a202b0a15a9c3e6c297e15e9e0a59fdd272f2b158e68ab9ae0198edf2beeac67515f4f8fa6162b54f137eeafc2a610a3888059cb3caa116a0d5454597606f62a398ef250ca210d29199fdeb53ddbd356d32d280a6cce3564d6f759685ff9203ecb7d026a57717537c1204d6411ef63311f7d2f954b8928647807f4b11829573e6d544b013df47289e8bb1082458de7b14a248cf3b2b4c36657ddeee48af625ed82e6c6c7c740a5963c7843b6b5e41b39c8ff8712e8b673d8070281cd879ad36b1a759ef315d166190493ae37835aea60eccf7791ce588c9db454d74d82ed615f499f82ae12e08383788bb3a80578a172ddfd2450cd33920c40f91d56a049b3c033a833290b3e92c180be48f8ba7002c748e1179ad2a4cf6e04d5444617f8296e80f5bb181d004e2e904098ffe30e4ff5ded0ce22765f6d5a0c2a264eb2854e36d8c82a04a138d631153cd65cef0b295b753e8807fda2a049aed22e036228fae8e68216932713b110568ab77aa8c04de2a41fdc4fb5060fb082851ccd9be555092ed2939a555d34d376f6e55ae2e302f3c1b1fb00dc352d4b60622d12eb0911d078134e220e58cda45d1a1585cd536916dbc9577f089b6113297664c4c9d8b3d83c356deae1cc844cf84dc5fea445c0781902e41d072bfd16d10d1bbe13e362063a98565acbbf01aafe168412abd73035a0b3c346b839c2d6b30396f2fbd51b12d6c172d6e3f1b85ee06d321a22612739548a9b66c4b4032d146a4230ac054211094cdbc64e18e4da0f7c530921b43bb721a4a14499961c2f858a9dd73bbf36dcdb29055beb0fadf751a9bbfe4b67611ad88cf1de8844ee185b2f597d7cfbe0e33607e07759d554317eec7cfeb1262becc00d425d4589fd1ed842eacca938ddb2cd244c690ab87e68d3cdf5223ecb1d0a6ee14fbfc9d622fcf54637debb81f50ee143fb49a2e51289f7a1fc99cbf148f9cf43c5c20457ecfb67eca1b0e21de21a266c77ce420e26b97819b63355ae7866bf3e78bdbd73d478e80014a02df10dc0865c6736af50f29c22ab57f29fdc3af91461a00c3d9f1c5340816d7687ed0edaa072526b412cc7118b40bc183fac50f1346129a1a153ddaaea1fd1e34bd9d0e3215b43791d2043041e542a3a8849af049089148a43cb67b4da6f33f44d56db9f83bfce72a4d154ddfe8d7da4bfe48c0e92699faabc56b2193fbc4e72759df5ee5eee560d2a708ad037df375b783bd4f2c0f07600f9cb20b6683a878a4db07d371f9316b278a4dc2da369647166c378a12f7411ffb5b598f34e46e9abbdf30f7f07ad82a9f9778a44aa87eddbf3194f5c8cb184c1deb7ce07779060f5aa8a94583fef0f7e2879d99a8bab8ffc95ddc072e26ce4dbee0fa0c6cda9ef5d1e80fd910a0655246a5b88867c04714d8b730ae960a056682470c11c6e6bfa0afa33fafb0ad25fb86756501901c3faa912cafb7b16dc582746a75f1fe6b0e1110637e1e2702b441b22febe4c7b76bfc71ea414d6ff23764d33f791043e00c033630a3ad437526ae452ba35544a10c9027e4e5a6c018e318a229947867c495417dd3f6b7a0da25c05cd474ccc2e416b6109f58eaae396c3ba4c7333769d73654694b9aebe98fc1d3b469a97b4f15c4187149e27a37e07ed8e38799369823e7ae8c70410ec1ed02d26d00576985513b56030b1bb9eea1d2708270d4c6a0db9327539d953fe608d0ef883781b41261766db960d4e483faa1835d5823fb6edcd408ed6dfed0dd7b4f33694a27e411a8197c56b81a6cb3e6825fc7e2b63e9004e29cdef5bb81e8aa6723788e50d52c6320f5afdd7a4d3cc1ba6fca76bb314a84779e53d90452a6b40e57a63e3c72f372c92ead55b46f51e4841cc092c898db4abc57ddc841eae2bf9bac2589d6e140a3fae0c71a5e373726023700d36b6b4eb1f7929971bdb98380fe0de60976268585940fcd98fd745c49ffb69a8f4de83d399ecdb0cbead3b13e85825e41a861a0d209ed69616e09e808ed98c981aa8a32c20e0f9ede2f83e2aef49d588b68e88407baf1c48b8a29057864fb172f8665ffeebc915377d26de7af1f107ac6df1cf7821d1f28f90cf6461b6ad89083ff25be3acd65b2050b15ad87f170374593a7eabcfe833088fc097f815239d9add0511b480ed8065ffd0dd9ea598055d5ae4d328505b6809f5503ed8bb20b83f090d8f2de8e7535035f5481538c0c9fa9a437ab82ac514b81ff6d803a2f7cc811f09d651fe495aef4d68bb6e45d5b44c1f45fc505d1a628a0a064b0ad39b3e0b310925c202b6acb02d64a40593a8273dc41e747ffc2be464c42e9e9609457592379a7d34ac41a7e5ad6ccc4e64b504a08e0dc49e252a425c4ca93df3fe125a70686231a84105301b8288d6ed189b43ad00fa9614c8d1a4c447dd464a94cc4cc6a571d0a7589fbe90e535328ac2603995e46bd21837428c98f1b55f99e218f47cf4669bc852e175f5ae87168eb604e20c883fa1a2f34b20a1de35c8a1f6837b251bdf6a8500505171d1bfb1a396d5ed16247616380c432d1cf4d3777043c181efb3b46d0068eafadd712e7404e5b1b0074d4b55a021890ef90126108116e70c0fa48f851b64e30727e83282c9803c32609fb41c0718a3abff3215d5c4f76011caca56403791e704ca100c562cea3c67c562604c328819f29d545581e1c9f05dbdfa64fc91c5401b31c8c6f307aaa7331ba4fadc205460a0b4b252c9ff938c357de52e473885eb1886daba02060dfc868c29e4c812d2aab8f1c0f33a965fd61fd793354ca7ff5672b72b4a17c3048566928ebf71fb46187a1d360ea82157dd2ef46af9300be486e052b47762b5819d94de18a48b7022b45b84f5a11017dc76f3aba29f21b8f33fe42f7082b0adc445a51e02ef2ca02f7c82b15ba47ae9ce036829b8edd80e866da3712e85dc1ee85a6cb5f78cedc14855804f630add858a11ec9339fd90a155c7f66b72d16ba1740d13f8a8066c6ea1cbe3f4e20385af6398a5d0912b8a536fca93b9b98c1d672d94157a86902e83a4e3eedd6414d53e2cc1da6a4a80515536a574fd086ca912cfee57249c324c012cb754a4394d008e7f2e27e2b4da9a8c5709d099178ebb21e4aaf6b912bf00d2cd1afe6c84159b24f91e0138737c254e5af7822b17051e632596c2e153afa2d225495266378587d3006d2463f672507dd6e8d341e07525f1a83560eb7c8dcea67bc25e7fc7a2c5a6e8fb895cd36872f6033f7204b65d46148d97b4b8ce7d3e828d7d4f48b362639d7ed8af32e58141cc60a2751230954d5be54fb172c4ad5a6ce2499a3ae47455566065fb6649e255f76813743f9b892126b92ef1938a4afc1d3bd60412b5d55c12451ffe9ff601e2145b2ea804b91e82d7b76cc582057ce520972ae071efc6b73422d3e04a97c901d3f843f170418e40a692363df15a8d79c42c8e87d3a40d76ad2065e614cabd838130f6db58b484455ccec38401eaa6addeca7d250356cb66afe691d41137dc68c038bc9a99c3afd112c45cdef53c4215df1a6a4651192e0944425edb5b9140b05b118996e582cfc2184fb729269997afd3764df53ff5b19f7a87b93acbd636d30bf07a5bdd91f77828674d8f56f64b7a7e637b2ef51ff6d997b582deb31a547098db0f0f7cd9e62985da46f01bfb6ea4f3b8ecdc0f0399d8316ec05663084e9094d51e61401e31265e4957aefc8173bf724a5b1cc5f1e5b0b79ec808d30fc6db90a6435a96aa0d6c412d70bd95eee354f0978e550ee4698047992ab564dae1115a8442dbefb67e67399acd0ced013b065f3292aa361a966e44bcb6ce439d7214ef6e9a80a4b17002c5b3be069a5b546a3c2209b3ea824db1aa5202d5bca4fd99416aa09cb51bad83e15a5857fad8d0bc8edeb2e553edce08d617a71b4e2eeaa3c8e8c2ba16bd5464dbe13cef8e9e682abebe78605c74e0cf4e6827d454879674a4b81f228116c3e2f26584c2adb0ad91046ddfa0b420fae261b3fddf94335d0ba2824990aca6308ce8c1942e12e4fe53ce1aadcd459c7974ed0cc9e219852013fd2e1ff08223f68687598b24f3ff17a3998b253bf7d0ebf64917f007a38989aa77f526840989af1af562438314cd95913c392e031961dfe21b8b5c3148ffd566cd0c1d45c012595be6385eefe8bc9ff2cd260989a37cf596b6acab62a4cf1eb2f15e9ff079edf7cb7064cd9b85f4dbd09a6ec999fcef46fb0db1f431a3b4ccdd29f65ff3ae04fa278cff9e690f803254277025c3035b77f9e387e989ae7bf87887f09323fb325fb17be7303abbb56986aef3f0dd2df3f9edf69070c9882b8df420d124cc1995fb1e9bf40b73f8b14f730d54a73932efc0bb6df235830a5842a879a54749d205860aaaf2d5b254d6498ef5ecb04052b12c41c873ac19905faa031d6fc8300a632bdfd8d67db2038fb3e00a6f811806e8fbfed5461609852753f667dab3f4c654461d64c52ab070b3f6b920aa60edab96f98822e89bff19dc1e9de4023e52d47c0b507590910632e8e81a93ca9ebec9e7a94eac1a94efef98457d827221ab0d48963cbad29e849f3711b7053de1f42c336c1c7fdef471c78fb13c24de9d5eede5bf56ed89193d77406a46576efebe1d87bc1bc78852487ba9dfc18b138f6a1709b0c3e86fc558fc816e3c0196a3f6136935f5e0326b507a3a5892261044414e43a6976842daacd6537080303a97a0e2b233ba07327865888191f27fc868167689e1c003326d30c8e93da5d1aeb2ee96a8f6007e0fa5c8b71652ca10ba87ed0da91416f23613e972ce70a87d3ac991e4db632352dc15fd2560a3c50e177179a0e9371ae15b480d600dd6c10709b89bbf52d1a60b69c32bbea40422aab1de8013da053c62c21de35252b580f42e1151af61691f2a10acc7b14ddb556dc8f952aa8129c42ee9d781629e5356626b100327451c949fad080dacebe81aac121bce45e02e576e48a8225c79b2d291472fbc0ee22eed674335f95d2c0715012f9fb20e495ff8e0051cd844d689f741fdcfe124884ae0ebaba437d523a668e194e9d0dec4f5580de469b5f424793b0e370f87eafd6901b61e1b7164c087c4a002f981c3c43fd719e1921936cd5cc497a47deb8d607a6ff1afb31bf1781637fce57aa3f1bffec7486042c8c86419ef6ef2f03ef67acd41976741e2066a2f71cec791bf8972f0a55ca0234357e505f4b2e541d578312c06b8ff781606131e91c45c146bf3694e4426f6e14a196917a3ed579c331b9d1859d39ac5c8a5b24f1efeb2382beb1018d2001836eaec0c9f29b39f7071420163ddb7727c294f3669dda19018e07fb81244354f6b6db2d9ab5c7b19d6311bf61034e812e185dc9fa7e496210c5d7f341c75ff0563e80ea37e8daaa5ebf1eab56992bc5d0534e6340d178cc280b228bda30d765f475ab76e92ed939a55bb968616f62e9145697086c6578c0bd40d3b9a6c9ae9ba1601748db4e7880fa9f218796d676e356f207eb0f7796c1ddb7bcb746d05248f4a7898b273ad2c9645793a123a0fd924aa2c8860fa37f5dcbe4bb05abc3b66a499d4c28acacf8be889986bae1e7c3d8adf8fe080ba98a9b9d71531905349b068413121c0dc59cfc7e28f0c339d610ce09ea19570235acb604d362fa1f6ead1120d89782d5a1f88e3eb67f76b8efe29722bc1c0c94cea53ba68764d981dd8b228034d3f83e1c8e6b4e5716430d86e90a5e265baba096a137efe31534ac933c711adb13838b0f219ff4eacc8974b9063c54456e2dcccc1763664353a6a6e81a35ba919b94a06586765529dc3c2060d6e3d53e82b430a0ba695198354c846947be154dd0d2a6c40a8a4ab8b05c31ea6b9ec43993717a3a168f0030e78fb9dc238006fd3088475e5019a530f65b2297b1663624469e812e4049d0a97ad60e18e0f46ef8d806625a4e6354a1785b6cd369f76322c48c9c2baba1f313c93c6c2c7cb2553f0bd8d24fe9d6819b797ea2c4123bda34a21c83ed6152851a2bd3bbab67402ebf63ac08e260fab04780616c7584618be9e446dbf9eeeb187f5a9604027b4b427a06988d1a28c801ed716d1baba9a686d56136b50d28ceeed8dc69ac2870dbcb3a479c3f08f366819dcddee096d3bc6146b20ed0ae30a8fb29b99794b1493b747f79cc0e657e97959640a7327a0eee4623e03bfe20b64880150221b928a088c329759e022446dc6292c7034892de49c70c00b7695434f5ab199a1b3745c4dc3fd14889203a6d9036e5fc8fad5fcf92d3e73ed6ff6d0d45e73b6e776be9ac65259750a042a8d85a102fadb5322658cfcc8c975e8082f61f211396f6e79858db11dbc8246c58d8064efdd5431d9a7acd2090d91548faccc5e6c03fecb81f9fc9b705de9f2acbaa9c7d54144f21ed1a0ae2e9d99d169bd3f92b3480636b3b612c0b577c31d08ccc920ef64f7b1db1b165d4ecd9bd4034e229b05b07e3989c486fd9cdac5a1740852aeeb4dbec105ab33cf57ce951cf7512cd13d3d8c87300f0223af8c02de697b5b8845ec34c9ce0dafcb91917424d1c2899719ac8170ec471574ce5ab8b5ff2582e1a07122946a0f3845be2234d3cf751c854ff242b08ee0b1c2bc86c1b9b8746ce3c3cfe7098958d201cd9dec181c581b26fa6e5a676f3cadc2e5b7e2c3224b8654940e8547e85a17292fdef0c5252d70ae854de5c0b1a531d6c0b3f0f1895e017179ee3d3feb78572063fb11210c6e3c8195cdc7e8ea1357361365d29dc6ca87002a9102c86aeab95af7e8eecd2694726ce8141c878c8c77fb84e3ced354c6fdc75c2a6033c27514c1d7f30f63705efd3cf4613331b3b122e50dfab8cb27ede096151bc43cd3d9b434d478ef5ac761e1e6857eae266b480a6aea6eb976c2bceba98c94348ab4ba983576e539bcacd49d12238d2ce82b0c03acc8448bab65985653dfee4de707b675845f717f5c0eca1ccb0e9f79409dcee7640c3665d99915b8702274462774070590129f60e6e936811105e258529a6afca0840981c427d775d8890a6c0405a98b6fcc2b23a9fb10a3749b317287d2306fd940e92803abae75b11d684f639b25fcbe23a547aa0463b50acf2718772910b31328a912767347d95dbc9ca386292ecdfcd30266ab1c4ba761f0fb27a08cd29aed7fc5f68bc5829f737049e2966560666624be395c0c3a1133e73155414c3c741531ee65c4e61c566063e681b60cd0ffc486465e726baa1ae994a9d6a5ed86d5a9c3aa25f65cf6e265229536484a01e492fb00daa08fee7a4e9bbbbe2351c640cfad5c9fceefe0eccab5a3cc3afbc26327aca755c7a9f4a027ddb0aaf9ff151267b723197b55786b07cf351ee897129ba0d39112a8b6cc5c70e5e01b7effe8efac4d827aacba6a2d89423ef598f98ccf7c25235cc45fe148a4b12da09b064efc5d3796f7a8b503356031ed980f73b2387b8c6c38c45df500581a3e33703b22190fa699b6b77ef0f9855908c953c900b616255f24d79e42cc13f40ab8c46ec57def26f16fc2362293e3e6c65662b17f9dc0c2ee58d424905b9fc4f241f41ce8b1e1bc78f1e0ace5bdca5f6225ea2c6a723b826dbb2f0ac0c9b3bd682bc5e25540281e1af85701dcf285a5cdba68af6419fb9ca13b590c1357149463a0bbde5c4779bc3514f860637fe54b18590f30e4400c00f4238d3b8668ef328ca23eb46f5b33b937e4b3819fd250bbb13aebaa61f1975a704aa5af725e259693cb98c1e6b5d212e020070f23ce0a03aff65eef39410a60aae141151794f6af4ef8faa1168aedcf131c6c6ea678db841ca4896ebba0232b7643d2fb152b57a60e0c7afa8e31ea2462d6a8c335acbe0a1a369ee3e5f41065d7f77672ad94c281318b17bd83cd002f203eb985b9a3d5baccc60b0f09091b98d6dc7bb91b2d36bc05ecaf1c55348eed3602dc91f9e3cd897df12ba9c99370abc41c588c5360e758677a8d007a007884a7512cff1bf94613dcd2b71a7e6b05a7a067df2195f135180509cd59b2574685e9f49738d8b3bd69a1c8d78fbf303d98dd8ab1ec806a437b66371bf17147266c15fa6a9a504f110c7fabd3c1664c64e640a12cd1b33a8e6ddb484c4e690f3a90c213e56d50200a4043fba51c633655e5c863d15ece75254b8bbf91a5c945887a989ce7cd9f9224472c41a79e19287fd6dbde28ca652eb8dbccc8b3d6c2a455e966c77c5c4cd0057036c41ada510b480205a5b9a4a55e75f678a88047c8ae0053e90ae3102b98bfef5f95eed621e9e625048a703439dcf3146f963fa607ad0b9f5b2e1f2f188c43c41f451b2409806ea21a84a87504e5cd765c595161972cd4b451d01b2f0a88c153e82ee2836d23dc4d2404502b1ac4c40674a136adc7346e6d730f001f147bee21a574688e16d5d4ab5b17b1f6ce0f0b7eb1940be809bd42e039d2b25a4100442b7c2899730e64692ac4bd0904c5b85aebbd966e18c082f2b546b9c01bfca0a9095618341a584e982a96d608cab8de9840420660ba1dbe0c4570e651179b3344a6e010032651608e6ab2613eec96df33f03fed7da4530c29b1d170f20bf9f4101235d60179e8a41507c11401a1f28d402a6066c7c440bbce77e6856a261d528c7e66d6747a365e40353251700ac8b185acda1c6426219327b668ecdb2de8b10d3cf2117a5b04c59b702305f4f2854d3b34af25bf2d6e7c181e934fb912360a71e63ed8c068562e089935df2e7a9f96305a084bf3aced67c4691bf5ad1ce6821afff8c6584fc2f9253c665999b59edc5c16a84398b118b1bc45f00380d40303c91c22ac950c189a071e38cab52529fad25e10c2255b95a17310f1b2759a187d27a03c030b74d71067f9575787faa3e9b3007ff0d13905733c11b37e3ac3fd369bc003e8641004b112c8d58ae0e39f7eb37438d608537fb766d68a2964826bf61e42e7365803865dea2ed1e422979058c19fb816c03984c31e6b424f0575b8017ed0a2bd3fdb6b00814199711abf395d4878c28182df86d3698aa1e89a11d4647c991517bddbd4607d47364733d44f18938e594c94cc7eba9826231bea2ffea875d8b715572caa029693b415a8ebf434b4fc7a10ba686a8fdf6f04f11d5d070dc373680bf0bf00497ba657aca0276056a53977d2f4d3ac77eac1c839bdbacb5a6f7fad97bc51327e89f1b47ef026c9be78211ce25c6817e961e051c70c33403e07883f76c8a020b3e5ec4f8e719ba1da23d1db9881402508f8797b04a75ab1a8c1d035c1302a024ee8d2e0c3528a9d8bf6c5155630bab76b0ccfa09bb94e8b134c281962e88870486068e0f36cf6f45dd1aea042e2a742ccd238c3fd449e2daea57c08e719431d3286cd59474179522ba803a97275153c3e04f9b50c09b8ba4813cd232d01648bbef49cd18e19ac0d1058feb8f40f4b201b84694b039c8b57da990cbd2da9c0336fd5b7605f813c76cf760d288f0c04280385052a8b93be1020b3fee119fa2913ddd69a251f2a1368af5835ea0bef5b63430bdb952aeb5158b5968183f30cd3d94caae452c907a544145e70a77fb52d6ac2696439b7d6a07e9cac7334a611faba10dc795714b7f42fb12057e300cb78c2a602193dcac5c9d6f827f72df9c72cc587ee56b3ce9aab4e2e0c41ca4558dfc476dfc64e6f38d3729eb459bc06ca36c4ccf581ae1a85a760bfb65636dc70cac56824adb46b1a7bfee03e2eea8b304f033debaa99001134b626bc121a226f90b89bd23b66052b1aa90b7ab3e23bcbd1ebdbb3050675ed20826bd7fb2736d32f3c381ebaa1d9846847d9125c603dfd49d32c94e61550ffcb4e30b96121aa3f99f421300f20c96458468823c671710056b22925cd74fd4b4464303a33a33c8f5faed63c88e68e89f00fd5b0e6c62c5180d867ce0af08c07ad264429b1cd20e846e92c8673105de966147b892e8b2d30b3fb4d5284437e8e644166497096985c039c89048b427059d9256f013e3aab82c9ff9e5c2c14046d08f9615065d040864c9cc80c4d2441520308e07312716335cc707ecd6919351f69d8c43f04c681c7e811f380c2c20b9246221e7f2e350c1cd31ff6ead9039999c8924e85acc76a077a757fdc0a2a914fea3c8aaddd60f4166e63c7fc239af1f45cb3279993867700ce2038990777d7cc4410a0e1b690afab4aadb13587558dc967a26293850e278154ba76deefe5cb16d7caf95ca2ef6dc6a56cfb93342c1a58289eaf3cac0bbe0395b9b48056ce3ee4ef89530b78caac0a284d51087b5eafe148953aaa2c0ce766f53789b83941aef04e60462cb04629a56b4cc8388d531bbcdb31debf2c61cc2105489018b6d6b8dec28437fac5bf70715f30a8cc359cc5a008025236683be3acfad684545426854b89c024e2609c89f571899f10566d9e91183aadb205fc5e3a5b887b8518f0abc6f7027c118c0f2bf8b58b7655de1ac4be400804634bcd8731a3380f439b1aaf9976e12c589e68aadfec728a41013a9e508d37ae4592a2ecfc0c3a5e252bbd7b69216f39a2f06637255fcc5aa1183aff57453fa5383b86a63f5a78d486063f10868309756b81768368a9786d17225851c3085db9d032fff199e92c208a6db084d0725517fe7720f43036a97ff6a11d3c2c0150d901c1b108e92e0df2e1651d4a0fa9f60e48b4244abef96b5559c8ca68894568fcebc8ae61829a0e20bcb2f13cddca71d1190287b67a0f86f35e44e3f92df70385c5045594e1f4d5c74a23945612e4495ac8fb9be51a3201206a3ed1638cf7f5ad4f66131da8bb98a2eadc2e470e7bd15d680a9a29334fc0434c32b1e9da8f470ecbd95d75432177a379ce5fd58a15037338971d18ee764b74db26ce723f11c8ce270261050ec113026bd1334251d304f7107899d300f49802935ca5becc1ca2abdba7a40fc83683265616ba730be0a7bce033f7e15ee5adc2dde9001eb8f7dabb56c0b77631600ce8315cc8117cc69f23ce1e60d75adc4d570c8ecddfe413f9d125206dc6cf50f93a0d61444b9ada18e9243016f08078b46c787ebc16f0560ef9e28ab45e2b65f1747a36c2e888916c97311e57f50e6bc7a960aae650498fb9039f264c0ac9a3f90950a26e7ff9a27bbbc1edc11c698e5932408ccd59930b742b589baaf22fd016f6679b021a037347cdfcaadf094d7ae7200082d6e0642f959316ca704d20cb77f52d2f48ac31718ca6239846a0c910cac17298c3f2e250d2393ef51d37087b22cdd7e1c6aa200d2aa9725d1ad38dd010510cbe4aa03c4b968eb6898f46292759566bf8ac8eae9cb4af94c9569ee4e975e31de3d24287d314ceb289b75c454c521f78a14b8a9512aeb926fda7a70b0aacae1715c642bf365a3c724ddda0b4407dc751b949acdb1de3f1c232c8c64e5462efb8e390084e0f78b070bf673184b41442d5731534241050c6270dc99213de877852d24d6c10daa26ef1e63d0d3a46ce0f5b08409643939440098a2ec67a844461f6bdb26c35de3219a1704151e71948162cf41744d1822c0885f4332d855e660e393469ab6c11e869c45832631febab8c029a576ee4b009d603116b0f15de3caee84eebc206c4d4bdefcb0c2ff8a1097d158be13f5a653273d6d9056710ad7c755db2e67d5317dac713f1d38286534c9d0c9122ec522b4e93274d76af25c1b995c685573e70f64c7e772d9aea521a1cc215bb2c030e31174a13e86572ed6c63373f6276d151a915a02472f0b2473b44a9302b68a802b165db5bfa155b4056ec3a32f6d5dfeee98eed7c814e1af9f94680b068e64b1087858687962716fc426b03087648512934b9457fbf0c50e2750f8c122cb5c697843dd30daa7e92555692c1c9135691859461983091f7c20d9285b74832a1831fa4192c8a4806daf0e0406245dc5d754c9dfb8a6ce4817b8e9f0604292a4b912d1241c7b8cccab27a30e7601b5d49db306bf4828290da325d013661a14c97860ba5d356fa9530867a7dad44219da9674c9e9ae7d4b1d7d33dd210a936acce273c7a02b93296b1025d39b5254337a61e2ca7d68d430af3fb82daa6fb663edde1eb3e5da23007bd8157fb8644192985c1e784aa5fc2dd76784a654f49dab85d0236e17ea7b7d3dd53c50fad2be16813b30a6fbfee6e0eb3ed4c0d28e43130fa21c700a1c284133eeea4d8efaff7b0d96f98cb0f06503f04f7999c2401e54daba86892bdf9b7324f30cf60372862ed7116c22274fcc1e42a512c121df41ede782493cda3b98c474b7e89668e9af976e6d300912290884307d25984895e1477eea2660ea84d9e0f862fdd5d17f74dc6116c427d17c2dcf24c3836f7a1161d8f0c74dc5af4d2d9d05d937d6cb0990f8d565e5119898c56da22356b9ad98ef7bd478e7d3a1617f8d78c706a7cd9eb3a80ec0d1a1eb5c7fae275c0541f9577386b2c96003a6e615b0c36fc16e98fe46c98129d6459bcf139e9bf8a6770aad68a3c8d5cfef025b59c3e71a1fc9c8f0fc3ca5769ce2595237792baf13b0deb4cf81259c0bc1242699001024168a0490849dc324f7ecd4a436ab805cce07d7bd0d5ada0ad68aa20ef9e01f4c4ea8569d554096b12c7060ba54d6078cb27e950831ec854923f761db64716ab61776e629cc942b1a0da84c8eff16f30f9c25b78449042976e2f53ba82f24fbee6bcbc3fe95bbee6f670ac0d541d40508030379e7845ad04d4ab046383c428d622cca8fb833c8a4695f37b6c628b9e28b3f2271af9433b15342c55267b48a43d02c666a5d31efced2b32a596def0e875ba469b52c2311fc13413fbeec9c5676c5516d62a50e84eb21bffab877f15edcdd74ea72ed73185558808dfdc050faba0c022bfe27a6423a209dbcd035a58156506251c367fa5d807f7bc51fa3a407a40199587182ee0afaed85ab1099a1abe8c84406eab816ff7645453bf3af5fbb214c12af5d5614b88238a82b70677c57876b4429582654b80f05bf5d2a2fecc8dd81288bc0510d72577472d8040be760594c398ee2adcf7d92afe3cc8ad36dae724b814098779308a4d7aec0c8f6c8af84344192c6f1ae3d4df8d25db93c9b8afc9d7945b4c710443034ab3fba95bef0b716820234190c4aa970a84de59c849ef0a06ad9a47e0ed430c86a0c8d3c3b0a5419469f3a16f86d3c10defbb620e523e86a0b9baf357af5e1557a5c427c6e41d60f6d5999114c4595c4da4f0f31c6b9e5c71882c2b184ea0facddb9d3ce245993f63f2b4f53650d8f6165b537d6bd6fe93d56deb2e66d0bdeb6f6a6156f59f2c672efac7bdbda3b2cbc776b873ad7a1e34070826155d8f8a68cc146d9924c694df05f5634f53a490b2cb63211358d600632c59a6065917782fffaf61b99ad78d3baf70ffd3b2d78cb9a372c7b6bfa85c1c85fc977e8933797519a0ded9d2d586f19e9abd25b457710ef3766d52d8698b68598e58afd8aa4ea4f1acff77b018ec5b83186510ba5a4c1b9f29ecf5ceaab4c739fb93de18a3157a5afefb3878623358e5e4339fc743dbc50c78ec2c85d9e2d20feb1fcdde01c3ab9648033f08bac0a6d647ac6871abc2fcd399125b8e2031af391c3879278404e0988df8675f94e3bf4b4a5942f3882139465a173f9ef9e08ad8ae5c25d35bc97334bf2eb6b03fd2de672be4e279a9bdc98ba6825291de680d6a2ac45d31731e7a8fbcf571a30d51c936d823e970175d191ae33114cbdeaa4e6ae79e34751f1a86cf16585bf7935ebfae06c0199df83d666e03615b88e7eaefaf17f20f2b0ae254f3e2e89ccce311198d56f7d374ffb8db4d0b9ab882e7e619938b60c9fe6748221bdffb71838cf6426ce3150ea4c2e7ec35cc4ec418f77ffb7ffc5073f3edaecdeb427276c26f64adbfb43e6227ac132ee9e2f8477e252f7c682e06cfaabc26fab1d7f939dd350ad7e09ce85d1c0a0cf08a89ca86587dec151c03d81acf6ad6d06eb2974c836b77ccbd136f70686c0d04c3718087a0ae755aaee2769c3c2b2af2d85552f59bed1b9ff45db8cfa616d9edaf2dc0d8427c72b220e5011d5e7819150be232c801a1853cf299b6189ec73746d3c17b47b1f3b0fe1c70c47e4d69cfcb481ca2d444509ad37edb19d5736b9596ac103a39a03fe080d2b415ccc80734349b064dfb0d0edb0c794f78a3edcc7092b210ed11466f4af8ceee560d0c48e91fb0117f40a841a7801dc5ae1230403b72acc38b3c676c090d0c887257db1ca4ba97d9978923564be26bc4f663e19cd0ab7cdc86efb1bda991c49ff68881b11839948181e2d0f63e91cc25fa2536a08aab588cc99dc080b258d6645ad8bc4e4846e8bb6c3cbe3bcb323412a60c63f5e11aab922f152e969b02f490333bbef10b8d96e90d3b32fc6d8912542aff653b04c0444223201912b79020cac994a766c3f3571300ea0b8f14c88d9327fad3028ddb06081486ef023f05492dda0825d99e96eda18ce8b5727b9ff0a0a5e8a69f2d9720139202b25890051acb54bfa35dd6178241897780b0946cbbfaaddc15b855fed0931408cfd516c9947287b4fceb8e8c93301f692d3c261b0c670f6d1d519c83075a504889f3266bdc979c8d7ae705cc5844c3aa04f5142342d4aee05cac6abb21d47b3cd17ba951bc9484dd2b8849106bd56d1b632b332b0ee161a2fd496cbf033e84b18cab6db4e1f2926b3b0717df150899bdd1f244636b1d6d27c9881ef433edff2f416145bea05ba98e4e7c31aff0b8da390efa326dca2de023e2275a0a0d7a17e74659bed5b8d3caa2a48ac2b03a53a253248262f68b3629779a8849a811cf7527abb47cbb7769e8da1d98671dfcb03af7982ef7d7440c2708071dffefbda1cc6b8ada46dd186318d48ac6fc871de24c0a0cc386c68f72151676cdc7e04d7507408ebbca58f851b2bebc5f49464552fe0dd1a9b9c58d78010082e3af08dc4cb148382ea35d6a3ec5fe88aef34007ed4fb2a1e725115718fe25f4077cf7773ca8d833df3b72cf14ea1dc951d1440ef52a2f935734d46210645ca16d15a7bbe47690fef386b6d7cc2991ff6645084c3efc839e68298eb71281536e96d8716d48fc8dd1ee496ca6e2d561e202fe8b303f1a67c714b45c3bb730c76cc0655234af67969bfd33bf784a9168737b48fe99fdd034136180d2ea929e82bb0dfe4a969aeb2a7beb130833286046fc9586b2c769ff193a4be7d05f73a64887308d6a48a1b8ac42731131d077d9d9ddcbc54070affb31d0ecb805b9e50af2e6d8ede004821b53010cd73e4f07e707161e2f08ccef05853223d70bbda6c59b96b80676d3489b0fb0aae943f49ae83cbc1bb8aa87c16e6096d34ff722089bf762d26eba3783140a61dc9d59642f7363e7da1fa9318e8a4f5f287dcba52fe5505d427512847e2e599e8b996039f3d842148a256593b04fdf4c5fa6de9733f6e3f9ab09cd90591510dfc522da5d6b253a50b63805719e16f4a05ca6436d435f320b462e83ae6138e0a68418063d6f0d64a2b4c8b76907851bc510fc3946c9982681e24db41ade8fd5c90530f67731410bd1f05c2836240fe13832e448d22585b32aed6011ebc0a36a0d0564424aa11ab7b4487c055bf070f22e6785b1c5a761b7567b5c60a9c9ea98366419eb9a93e12b2c7646322d1484efc961615f683e920dbd6b155d64447cc010422653dbf6484a0c522fe81aa025e779a8931d8db720dd4aeb3f8a6bb081578f99d548070ff0be8d2fb1728098c63a0c405ce0583a123fed4108e2a8392441a010a9dc40626c4d461e42570ef4dec1faf3b3d96689403d900c82846a2112e371e256c983af284c4b6b892c41c5f73af21eec5e2de86abe7047e74ae2989b16db5e157ee94057aac3360535c9197bd4049d28c2643bc6d62ab508b7b1f36dd6a6948252df69d659444cff0c1f06e4c3c0448ccf531f0141f6a5ea312130e95c92eb573dd2f0c74f2122f93f87240b0a081a226d25eeeb53c9cbfd2c1bfa759208b50c87049c540498ff31754de9f475e903462d0f0e4f8398756d235cc5a23e47a182d1bd7ec3ec48c4dc0b1ab83e419d350f75c6e5b23f18ebbbd5cc0468ef97c2fcf4079f2a4c952848ac411efa077b7c65947da5ce098cf379162f423c6104d1c4a4e964633bc33c4f1e86444e0fe47142365520f946b599cc94b63f2dd5e150e12bd19d9a8f3489bf94427f7845754a7929c178804c30dd311bf9b70d0eb513d7b60eb9a7224175b42177713e99b6a70e497d9047da58d74f09f023dcce20dcbe00d873d7662e9540701db6e01b0c73ebcb1c69a6792772ffc660670e736cdd070d3054d74597088cc00766a53b30f66c53306a4e97af04c61d6c7aa25e2c9c2eedb67ce5ee492554c0ebf7642ddcd12e2b1be37b159e6949a80dcb19c7e1070f509e60bbd7fe02e9d08d677e8126737a5bd717504f2b3c4d33fd1223f4109e23ee5738cfe643cc87323c35670a3244601c3e8879641d50e5dad520aed26bd49545909f30122c657e1f50081c75ed5afc1689994638f603a104a0a75bd5e5da0c7f9c77152b9986e632d70b781211f0c7b2bb5c2ce11ac81567010abeaf6be8bda683f0d469401de7d5209727b8b82df8821309323c6f6f820ba386b292bba0324d4746465a74976245a1a11c6683874377c16d5ec89513a4f0aafa23bc80b541522645320ff0256b2d3b58f820f236708357f0e372ee890cd19045000b6fe9ca1470dca86156336e2e8c26231021a9daf782bfdebcc22d5e6be37560bdc1afaeab4eb123deea80d6dadfab7d7049f66da29d977d2b05940bc1a867ddb91acf62b74f79d688433f6967b3b42cee83b88cf3d538fff29993b9fd59ef2314c0d43b782ead49acf5c120ebc654f056c88864f2c9fcf531b8ebb3fc08d06f26059e81de44b2244b007956b105b1c4c1590195063977817e3686657d61f50a404c17d0d59047df14f4df895cb47f2782691574378cd7a2299af9568b85d0f754bec03f00a353c17949558f7d0f42afd6c87316c06d43e32f6481d63749d4f41e195547e284007eea73c98e517a6a55021154cd00fa00a630874043441246ac11e41e67669e6fe1fcd3d35632c8c89a36e2c2e291d6a44bfda896aa4c82291bb11468e2c249ab9463c3797140333228a3346e9499d6d6e6f5664f5800283af76d3d65d42b1c9945714c6726b4774a384a7080d08e584b2fa0577b69564ddd28d42c6567c19830130de7fcdf8a484a302e9fd3c153098b1e2825b4ca10cb6ee2e4a36a4c13b0df929b4db1a6747407d325759222c2d04caf69902c2325099302f4303f9f658c14ba3ec5a5db9b93c06c9c5ca8a3a23d001c23f429fc4c8a47ed647525985796ba696b15ac5390e259ee720c5a21fb2c237617c796bf95527d0042a69dc759297b6742d03b253529e92bfbc8b6ef52aaf522ce6d36972eec3cb9d8594aa56128955d23e560669f788392c98c0f2a1050f53eeebf881aae18be569c570f9bfd5f2b1d455e0729845664ca106162824f502eae24e5fe44fb819e848e726c5754be1a9af8ad3d80059d69bf909c1b564187d413f394b405695697d611aeb1d4587723869b666b3cff06744f6b81986ae69ceaf293cd6de83a88477987ef5fde5b4263688100328b59def322a2b1c0184be883ed8da931a47bbadd765720d63689468f5135826312f812cba829e42b15b722b34b68aea09cf24376bad18a5bd24815b18ae0abe0e1905af5206b3036075833d02a838b3c1cd6266e458b6a8de069d506b72bad6bc460d3b7a105aa2e0d4b4416e9d42590dc69df8a2be52edd6a4ee45261ae1347eca09198326519d55d50ac8379fd0d54b6719c188c263cb2b459982c0ae51475bd2e7506fd67a31168e213833bbdc91442f39e44779a2e69f286c3473fe9423f39a2f9b9611416513e8ab9795a91dfe6d6794d17d55306e2067b089ad03668fe546778ba1ddcfafb438b86d51ad90a75358471b5eb4225a76e2b65dc0b342612acc9803a0cd51cacc0e579ca11e1d9c7bd8435d181b5527b7bacf73bea226c33cd6a16ce659b34867e45bdb16ed5d56642798f9d417861ef6259f0bd7c00bf0f6a4852aa661b6e1a1610fe667d0b2a54eee3c7a7c7d631b3c112d55af9b7bb000d0cd785715ec1cf5782152327f1681d623951113c09202014d80eea3d0017ed8c8ef8ff8791b694ced3f768a21fe9e3a11f8cb9067b87e1a5cddd903df9c5162a2b45e95129d425b6c28262895177bf303b0899f3936302ba57057997a4f0453d7b215d50d41dc8534f2861098156f40b90bd8f1141eff58c73a4fcced6cca96d70e6bef2d53ea64663c49f924ab8bc63bf72383762408de270b068a4b7cc5fae10d6e544929faa9b66bf9eab2918e50988430b432b641c844580880d4fe422c34ccd015ea70811e632c1dd530bbcc9eca743b4e52aeb28bc29d8985da1f55040a26a5d1ddf468b36325169e7c6d16fcb46062be13ecbf095cb13c38741b6c3d47bdf7771b5343d493a8f2937075e137e9bf7768d6adaa2e05c0b85155dd88be702cdc1e1a052c35a4a9ea8a930f097d836b0bc02a1cc3491949b52ef7302d4ce5971bf47ed0d25e127ec53ac828c85c6b0b332dd24547de15621b02f1eac9ab89d4110ed2f6d7fa15d4fd0ca2fc5d8a67f419dab18fa4d5d3956e6649858b7c79c6d648a29622da9e8bea3febe7a370a53a48c4fac84972de7e91c0b5ae1b8449d0f87efee169a78dd709bf01f632db2eb563ce71b752bd940719573a0534db75618799c61663605b2bb08952b0d490ee974f1d2d857ae5ecc083f5ca6aa29d37d8d80816b7db3475d95f1061c55478754d65ba5238c51a6cc046e977fc454fb9b576cdd097d40326f37d025e1ad078f7771253a1d3d091bd1c5ba4da2bae502ebf81ef961f0154f9028a6d3a7a5a309c55a50339600f98a56466517776f28f6442a2c347d9a0e665c83922b0a55f7160679b72522f008500309a8fcfe98ba51bd802c3be43548ae136960f8dce02075f86c35cd9ba95303533332332b2f7de7b932de596322599024307910784071ed675d9679c23b14af32bdc8927c91ca92365139cc671dcf723d32cbd59e71b57613655f6fe18ab6cc06c9c76556de3344dd3348e55d9e7015671d79196944d701c52b6cd1b649bc66d5cc66d9e75da0db68ed3b46ecbb22cdbb26ddbb2acc3b20dcb7eeb302cd3348efb4cb3d7e5b638b3389be03ee332ed058ca7df6d305e685cc76d56be66e7e5f177be1049c8b8a556cf8bfe9947d9ee9e79483c7fd065eacb6780cbd42fda34aa4a9fcf3eabb5e479d8e9f4d9f090cd953fe50dfb46c9b1b98e2d8905fa59f6ecce7277777777777777f79fa1b98143478f1e5a01ed95068896899146fa91e55762bcca09c68b4f4171f12d4cef7529eeb78fafa353a56ba6a4ccf75adc7c441d335ec6cff8705c199f8e06e3bb0791f11e793caabd6beff37b7e47283cfa95c66b167b6967fc6fb6f49cddbeb3dc7b2dac09867df1270be355ec49860542041120318b5bab473fc334164be3572ccbc7b02baf62637c66e3fdac4d0d663c07bee67b0f89178f9a62df44bca40fbbf514a851f4b3f6bcd3a98132fb2178b32f6c9b0cbc322c5f4dc5c6fb168805b2c7361fdabb6b9a8a2643060ddb42434433ac1be16914fd0804a358259b360d126f26c3564d46bd2cb6856c0cdb44b68b1aa47fb26dd447f4536c23755283fdc48958b7b17ee3380db2725cc7771a2cf25937d228fa9af5233bc4eba5378a4f7f6c5cfa6134ba543edb1f1aeceffe9e52ca066a30c8092f8c464dacb8f3db281ec526f3ebea9eaf340a13665ae6e428fad5a7612ee59690e546ed19a56574388a62acc256dbb3e452963d8795341d2e23851a459fc8a8725cb776640967b912f7e914a5943ad0a5cfa12fb9f49de5f4c17f16cb59fdc37d52fb4a5f56d284361ed9973edbb4a1e84f5ae6c299363d712ebd8ce45cdab2738d5c5aeb9655afd699ac66b5d65aabdfd4aea27615b5aba85d45fdc9325d05c7546df3c1651997655a6d2310e7d2faa1dbd076d2c4cb5ed33c4cfb5a08db786475f3917d3d54fa266a9076777777777737dd72f4974eb59eeaa5bd57b9e349eec4911aa41e135e78dd5cac232efd0b675e37cd2a2e7d953f1c94755dd6c29db4d86950ba3ff7fe58a9f4dea5efd277e9bb1fbbbe6e5fb7afd9f7fc2831ad03429786cb4c3ac073b7af3837beb41cdbebfdc658b7cd4f54fa0d5237fd13cb44a4158799dbcd477f34ee3d1ac43acc396cb3dfdf8c8d87775fd8fdf632361ffe5886030edb0ed4954e9e780dd4410dd2f8fd25abc365ba87a769c02ef4dbb60cf885feb4cdd9de6cdb20bed0c76cd7a08f484963e311bf78532a95745837441ca9644ba5922339922339526946e97acece2fe1348a3e9219989cfa61c12b7de9b7cf7b7b1722af3f90eefa5fdb5baa04af3f7b9e29faa196892c7b5be5b6e976e5fe371ffdd1dc087667d1c751f47f92084ac1502c8a47d7755dd7755dd7755dd72563cb71451bffe24d58fa88d3206d1ef0ff74f23c6f1e9f1b599115595964f595c5958d47fff585dda77d4635cecef716ba8208e1952c668558211e1126b4b2f9287d0b750a6b56318fd2f7873f4c2f44bc2ddeffba7199e6a99ed771be0576a1efc2fa15fc42bf858d3736e2b8f785b5761f3df5973ec4be146d606c3cfa31476a9ee66117278ee4499d9ab2659ac751f45b5a0f0aa541309f15b26dda88b66155a96ddaa66d4aa52cac2c9b8fedd3c2d27bdb8eec75f8e17d3fb42fe2f4176fa28d4da756fa834809e4e4d267f9c3d53b3d68e3a7663768d19de45cfacdfcc9a6f7b28ee457b816dc09cdd1e132fe0487da5cfad5dd5ff3a2a3a121affe33ee2b4ec9187f77b1f9f0eaf5b3e81e6fb65def9b76e1a0518f094f06b12a5e2011e9fa4fa7fc33c91fef54f5361edb273d243c47ba6e2e9c4eb13a25a3d154e979091b5fe324c34b992c73dd308a3eff050296712447a59a781a9c5ee0a520bc9288ecd16d8b8b1ec032917f60557d151593296e3ab41079fb8174b7bff4b541fadce623fbfe84c45b3f0fc965a48602735d2c9c9b9c46d1473273e4d20f61c09d4b5f4a29258d8c524af961c1abff938755d7a53f8f340512aff640a7259e924b2792700ad5981b4e1ecfe8349b5cca40743ed9b2abb57df6098957fbc218b492bd945c3d17127b5df662b10b7dcc5e47b00bfdcd5e485c390db61552af7f3e8da2d74ea3e8ffd4206fa8e8a8e53272a90e7d976015bdf465920462955fbfd78da3e84f7ca1df725784c8bb3d90ee6e5f3fe36868621a8c340d466e90caa3a0d30f0cfd963e2d27195e4a0b2efd70bbfd9365640b18454bacba300d8bd8737cb11eb164db863137be34c2f4975c5aa2255aa22f7ffe47c3bae6d978688f7d59d4e44f5c9d6ebc2fd44a5f387f745fb7b4161d41b0900cc5274596f4114e4bc893fa56db3c3eb6af9f904d87ecb5cf6a686eaf9bd91cfdd55e37170eab51f4ff4f9ef77eb52efd8ba7c1f9f59118c385c32eb455faf8b541dfe147f6dad79610f16e5f1fa996a7c47344ee5cfa4aa43cfd6ef5005e3c7dce4a76e9c75e7c200c1179c30a9241abb1e9d0df8fed6ba2eceba19290d4be20d29d0c756aa53a52f3b856513c9653cbd3772497816954ff8c8ff7730aac72f1f36515bca249f165264581552854f08a3e5902af2a1124f0aada148157f566885542ac52f9f93288552bffe4099748136c947073843b5f4ec1ab8a2305af2a2bbefca007bcaa2c3f97b02ac6cf973eac7af138446009210708774a1fdcf972be6c020a56c22ad32aeac497d983035e51567c99485855575327becc973cb8f209560eeefc2c86a5e15fd8186fb22fdeb3a6afd6fb19b67e66514fc3660000800d1b2e2e0108c0cb0b0c4c0d35d860c30d37c4c4e080432a2523333393430eaa1a2d317c1f0dcf6265a8d8953f599587614f8f626170b6c5a7a4bc66bbbfac56b2d8cfb0f269d8d2c71e9701823e0d0200002e16900d1b40412e2e4142010880d0d0cbcb10110c0c51510d351419d96083d1d10d371c358989698284030e484e52292749322ff361d327333f432487cfc146755303a78515c3f72a9b1a372d383706d6f755c73e0d1dabf34f4367c6b3e40c1bce4b9f867d1b6e97beb59f0d532efd186c8b0d655cfa35acca86352efd1cec8c0d5d2e7d191bd670e9a76c88c3a58f830d73b8f4636c28804bff061b720f2e7d1b6cc83fb8f46bb0214b71e9c3d890a7b8f45f6cc845b8f4036043171bf2122e7d1b36642a2e7d00d890abb8f429bbd0f76c6517fa26abb10bfd17d66317fa312c0abbd0a7c19ed885be0ccbc22ef459ecb30bfd15dbc22ef4552cc82ef44fd606bbd08761616266d8857e0b4bc32ef4397b835de8a7581c3a7ab00bfdcbf6a00076a15fb20cf0815de8a3ec0fec4259d3b4d2b6c3af1fc964ab412492057e4a869f1f7d5835c3cf8f3d60d566024e8253595c39114b2e712395608113d1cfa89414b42b72062b835d914f5734bba21ddde94617eb8997f5c4a28be5d5f3344c7ef2b1c71ec3361ee46bdb0ef95a2c52129168acf27ebe648255dd4fd9698f7936deabf3a4f3acacc8efeb8227445e2011e962b2155748625186511f325eec334d2bdd2c01df56ecf473735f2e33b9c9b999a76554d218656701be1d52a1438e9a574e944400df9e549c876d380d58a69bc0a8f931c4b0b2e2c245673ce3f9fc04b52ed68a7f1079e5f8c703bc97923bff0b83475997559a24ea54f7f3a592961942b6e449c8039ad3f34e271d0ff85cf032130fe8dc8c9b394a2e1ca2e33217cb5194e5a8f92b34de3e7b0c355e7c38430b241eabb00fe5933bc170e7cb2097f1960f4159745fb6dcc7e7c973d9aaf185b5e50b6b0c5fe87d5fe8d92f3cfd179e7cea7c75ea807e5384271eb15c262661d47cd6cd9d1fe30b9f3533c312be082729583d60296197a9d3e40e4171e74f1f9c6f9bd313cf894e34ca828a47c269e807777e58e7177bd8a5c7939ffd4dd26db9cce446e8c6e6f2d53e3369a66d07ea76ef460dcea2062f56831307dec47ebe4cc22a1eb04cd4798253d9cfbad352421361ce1d2965187b78c85e66eeeed1af7685be2c3a8037712730a44d0b940f5dbc6c49240dce593f6fe5a22dc05bdfc555a9ca09c68b16f4bdcaf78b3a40c90efaf225e581f20f8e0778bbef3ee5a3ce4e5c451d9d4b77ee7cde76285d8f6118866517a7d9ee46cd729add34ab6936d36c49b39866ab66a9662fcd4ecd4acdfb82d06c6b259898ae0ed12fc402babde2e5c0e3c97262d59c93851808ab11ba8438dcd97214cf9ff4fa92a761358b975ef33b6c5eac6772cd7639e5b28ccb352ecfc0dc6d3a642db4ec69485f1a5df9852d378896ebddcb7637eeb04be9bb7b592e89bb97dd84b67b59ada5ddcb668e93ddcb968e4af7b2d812ec5eb676917a2f4b9f5c4313c9bc9795917559bf41b04be96fb40ebf97eddbc22ea5a7f166295ae845462d93008983800fa54d0f1ffa131f1fba930324e0932df921e0fb1ebe938fefab3788f6402c70b90f531efb0cb3b22591685b0e0c5bc15e8903bcb42bd8772fb107aff729de83570691b2e53207f8624fa3e6d7eab9f842afc5275ba62ffc8fbfd69ddf25c1935f7a2c84a15521e4d5f8d6af5f9fd6a7545b0922fd88f3bc665778938fd92a87e89f2716cf0977823d2738616a6cfaf2d2fe5ae4720c44cc213b3a2211450956d0c9eed9176bf311bb7ddad8a4dbc993b6b9f2ebf555ab97dac8e2550c01bf48551c01bb481deaf52fe2b08b7c0f055e1873a394f2a8ee74c4e9238d24ac9516f1e4e51f43d08a24b832aae0ca08832bff1ae284b71c92b5d8ddcda403463d82de7248564e83f18b38280df6f71071b6f9f1349d1ab44083f19b85fd7025f0f8e327806b66a87d1b07624df75d0fde5784f7d7a6837fe6d7af70bfc271cfb97f40e687db0bf1abc405bc2f2203446451e3bd11436abccf8816df6d1f90f9fe3ec5950d72eb62f57f65fe2861fa16968822388b9a1b951ad3e701efbbaeebbaaeeb3acff33ccff39e033335de13e17d9ea3baebbaaeebbae7c04c4df779ddbd35b5c20d6e8003df382deb386df3ac2b71df6d734e6cde6a2592ac5d9c37d0b86cebba2de3322ee334ee061ca76d1b97711cc7655cc771d8778f715c86719f7dd87db66d9f71df611ab769b17effac5de42637e72ccd1297c9b6520a56719350064daed6c7ea7752d3ba5a2bf72db9dfb4f8cef96bf5aa5cc675da57aed6ceeb2ad675f531ef0bb1fadd2537f7d865da949393a5d20ccc567aaec465567657fdb4ba5dd7bbd6711997751a97691ae7eeeeeeeeeeeeee9a5f1bc76d767eb4f3332b3fe551b2aeebba162e4c1e9682e2a245670af23317dd130f0525eb56cbf4de47281f7615eefc36eaa24ea1689b0f94efbaa8cb361e282835b21aac9ee41139ddb464b5e6699acda17d276b3d11214ec12f404111a941d39b3e7ba1c94e99a22926c97477b7c7c4a7052fec224528b5fe9852acdf4c4525ebbce085f127feb04b8ae6751769d2a91613c9c1ffd3e9c7a77a444e37cf72502725fe701111a6106ad4fc262723a2141b7fd8a5e5799e77bd28046f2da98b782189559e664ad1ba8829c994644a327d88457631ad0891d7f440ba6bfa9e3f89f2b541d3a354c9db0ea60f05e5bb0f05e5e727fea07cff2098a3599ef9f9719f96ffccd0a5b8a68f1fdb7c98bef36115f3307df285c46b6ad5da7df7857cf4020549171515b10fabe89def48bea402b577e83ea1fbb8d0349bc3f4addb7df7194a37c12ef39b097ee939b55cb331c5d25b77f02b0176315dde5c48c4357d2e655eb0caf4debfb091519de6bd8a8ac9d47d88dd68ea5cbaee8174b7fbf84b9b0fda2d9f9fc9eaa198537ab1ed40dd2682a1d93642d244190cadb342ea35bde732eede3539cb71fce6a8c1268d8aabaec2e6cee9a4a3c050b833e5eb227699dfeec3aa8b55ec15c9f3a413913bbb5b27a23bbf8196485fe23e3ae898647a94e74e99be2417b65b487ae28f8d40d7ed84c02ef3a314fc12831c35bf95b4d7ad6efdf09f06e7922f5ef7e9d44af741e40d3bb5d27d5f13759dea96041a353fe2b0d1cf44418a3f39ad562b4bf181baee31e1c519c6225c1f282f7f3aa50105a1bc4c49f9c21f292f44bc51e87e7e57c1abeea78b1632dd725411ab4c3fbf8d3ae575ebf4844845b1f2859662e7f55264ba95e2a57ccaa77cf8291f823743b1eed3e0fcb2e0cdef074a10213ccdc61b9f74aa7e2bf5b59f2bf54bf125289ffbb8005bd8305909b00b5fa10add9a31a78924b5768c78474e3e51c99d30bc23c3981cf7f272db0704bbccb7f1c625ac2a7d3a609f10f1b2d1adb2088e9eccfdf4f2e40025edb77f6437abbbbbbbbbbbbbbbbbbbbbbbbb3f19dd378e9ab38bdce9742586ca09c68b1414172d4c5ec76d5a56c22e5b63cb88dd2c3f83c56d107f96ef1b97e9eaf1c890d4ddfd72bf323fc953ad33becac86ce9359bfd663522885cfa2cd53d1e6dc5ce3859156b9da72ef194dc89e444e343e7c29d4b1a35bf7adee9d44bfe0bfd87e5c35ef25f08deec64e3a5c1f2dbe6e3743abde4df78866da0202119d6778a346abe6415e53959e9b1dd397f165bafb4f152db3f2bb681e6abd83ed91eb24dd4e0fc17b68bda08c5f65193466a279dd44f9c88dbf88d3b6bceb7d677dc482f79c2f3c6e994fb0da30c78e8cf6ffb03108deaefee0fdb78e8250dfe384f2f694d4ae9b7f3300f4ae9773367f7757de1755d2c7dda4112279c48c243ffe9d427cd87742d72fbb3d825792d769992553ddcc32ff35b3c160ad333ed3354a45116bfc822144579ce7f00af6814318a28dcece93b805794890faca2f1f41bc02b2a85144db8f419c0aad2d35f002be1d25700abb0a78f00fa3db0ea7afa3cf08a0a09f56095f6f477f08a0ed1d7c1aaeee9e760205cfa385895f2f42ffd1b2f00025cfa34ac6af1f473585dfa33ac72f1f47190b9f4635885f2f46bb8e1d28761150c272f97be0bafa89324005cfa285ed124fa3578459fd0b7bcaa446cb0eaf4f44156a93cfd1656adb0d8d0b8f465f0aadad057e155bde1978903e3d24fe155c5a16fe25565b1b04ac6d33fb12ac6d347f15865cae92efd8d5735873ec6abaa437ff2aaee445e451d7e994f5f6395f7f42bab5835e3ed5389fade7c5049e5bb8cb57a1eaf64cb4d06199e7986199e99061a9e79b57a661a9a671680009e79000378660210e0996fdc78e67b9fb9a6e6990b508067c68123c733e7d0e19975d8e1997778661d3a761880470ff0c3be3c3cf38e6736c033f378e61efc023e0f8fb259c9d2b82cf69abdbeeb9eb329dfc272302c8acab3d8959721c3da19cf830da3ce8e4e0e0be7c6a6127992e404a9c9915111d190501090144c74681451dcb9d339f0e2f5e7ebc7514591e8ce135663cfd4697045fb207247fb7880577b6d2ea958bd589da761d7acd7c5f2b06b5e75ce79cd9ff90382ce83a93375ead461d49c296099cb07f4c19d4f9c9af068707d5e10e9dce9d4ca755d7f61acea9d4e60ec99e1c3b6d93e6c233a22cd26722145a0303ec1aaf93109af280eeae7538f6a94522ac3830ffe85e4323de4387135734e8e747328ce75b14a9fcfe573f9d4ea79992c728d07dbc3f2b006b06165ddf93bac0ebb830dabcd9daf83cd6171d802d81a7bed0d4b003b002b001b52a23b9fc6ae2c0d76062b830da91494098de2ce6fd00601800d250eee7c1b369449ee7c171b4a28eefc00d850f6e0ce7fb1a1fcc19d0f634329c59d5f830de51477be0d369445b8f36fb0a144c29d1f6343b9843b1f071b4a2aeefc940d651577be8c0da514eefc191bca2adcf939d8505a71e7ab6c28afb8f36bd8507221945ef8e6bf0da711d3037786e0ce70c8bfbc3fe3c31eeaf19e7a674e5c5dac9c3b7f8680571408680438acca3cc02b1a1404821b56d13082575448a80377fe9c3f35c02b3a8bb8130303af281151164f5875798157b4a8e80b49acd2b8c02b6a64848513567557f08a1e1d6de14e2b78459b34c9c29d2f9bb0aa0abca248f165225de1ce9747ac6af1f3a5142615ee7c6914f3c3f83438e28734f19b0687fc1f8da353cdfd386ed0441a1c1d230d8e3863a3052608343038886ec0e820f28186a6d584669ae02311181a1cddcd4b74f4b870f490b247a7a49415870e5ed2df4376e3e8d137626cb4045482e0858c648125420c11bfe31704100dfac7d0f142a912041bb747a77a30e2010207a3fc7909132388442e18481b0c68d0631a15637e28257dfa3fe4cfd0c48f699026e6c697f173af1f63661a74a671a5d378acfcf900d3a04fab80066362a6e01f81b8eaf757098217e343a7523264c55c8f6194c7c85311663203a12bbfd0c32efbe00858b88c34bd90714b0e76d0df46fc79e3a7f9f7bfb7340b14bc16427c900aa6626803317072032a4ca001199e385a02055c68e20338a889efc507e37bf14f4419b758e1853337c61db73f0d33ed70c2d19d5eccc707e37bf14f4f48b242a80ad9f439e50b56e3c8201e1bdc10e45a4c64f0022632d8a1b21fc508b76fbbbbdb6f54ff8d669658e42088d509ef081fa4a2209c20272a932382b00083243280c211474e180c47556052041eec10c1a13b60c26a8980650794c5bb310225d88142169000021f2041871e6ca0084b7660e0035624329fa0b17d52edd2ae2d878be74e458c5e35fbf0c4a53c1b31edb199c1eece784bc09014b434b0851230a901129e50c38d2a7ddbed0bb5d066ae993cccc0f5dead5502e55b58256ebe06e5031b75e796c323f2b45a19dc9eb78f426856ca6d086e7bd736ed0b33704b9f8c528252ca16af2f18d8b8cc048922ae77998908b0888206ee041b6072c410124bdc1697998cc047eb14054ef747ac3d2d9e2231b2faa6c1388405de6d8c1892840970a8b8d900163920a8999f110c348229b06200051f2b9ca0467e3fdc246e08227143f639e2863cc4ba21238de086f146045786e086b14786277052d0c4113a1cb8424df8577c410749fc180102079aa8e120126861062258c211aed0428d7f2107c5e009461f38c2e6092e78a1a6bf9a9d154891852c1c018b1c4419ec408a1c259490c4889a30ea0841eae9a10209269298414d185b37e20c1141178c38c112596c60051ee8610a249020410b8a88a0055f70c291245918c12249a8263e8ccb0cd919820c9c38d281a12cb4a0050556d0a1c212273028aa89546091051646c8c14d914d4dfc215c86a11045912f50d1039608aca889439cc082091ba19ea29e286aa28d23551401029f0f0425d5449f7ba3af2ca69452ca39a594524a29a594524a29a594524aeff4c48e37dda59c3edd5d4a97d2a57429dddda5113773b2e68c485adeacd8ac2576c03136c0b00d311d4304056877bedb7e7bb574ff0cebeedab5db62b2bb65cb96ddb56bcbeedab565dfe8d89d43ca8fc8cd955f1804f71017f3525684552c47edcf3c23bafd9d39c1fd72e9b29b8bb42e49498a1c422dfd44e3f8f77b3f61c3cccc92671fc529a3e43e62d93d8596b2dba8a7d0477d84a4032f4a969e26999b9b9bd9d9b9999d9d1be47effc2205a076d05b39c4e57a3781ebda897b05a72a1c72ab57ddd85aa80752093524a29b152a66dcc723a6919d7289e97953a79f910aee0d336bbc8af241f9332f386700553564a22b64f66399dae46f13caac91b63838d6acd8ae8f64a99558d59e5609227e5c6567871b2f466e688710c4385213a554f27fa4374eafa533cd5215ca084676666389e50939b04c1a8189f48729a2bdf691a945078d2079e3ec32eb289b8120042075e387365942f445ba002344c8057607c912fe5a936f12bdf064c4ca77856504a1aae9c4534d112af8669f08ad7cb4e5d50bbeea5b5c72a1fd885012d2fd4ee875c146de2f511e721c0423233403c80570a882fd75fd7cfc49957c00573fab93809f7dabc89615c4425cf6795df398518d8bce00557bc205ea19f5b9f6245b78d34181b68a8c128e3f6ba4abceedf59ce6ed653c2ab4f3f94add655fa53e9c3be1656bf26fa5aa841df6168a751bcc3909106dd993a913f611f62170e78582873a4ccf6f15d49a71c09a5a1f3dc185feae474aaf4f1e54e11565d1f5fb6805599f69905d295a2bc71be37184be2780b49a36efc65361f72a246b5a4bca91fc6aa8cebd3f8934a68721626857c7b29d4a93ab47d3f781aecb6e0f9f38dd208c58e74aaf6740a53523f4aa20683c848341487d825fea02d47d2a91ffe2defe9941256c98fef50b0aa04a4bbbe30722ea59106238f3ce2022fd4da880fe5841209c873c49f4822432ed3516054fc2bd42d785fb8f1878a882f91747cd92292ade851a85343db96c3bfd22fb9316c237ec4a741250df63418bf8b5c261ec1a8f8583579ae12695ca0ee548c5f28dde587f21312afff0dc7b08f17fb7ef8d30fa91c6a1996d4625f7b6eec14df5a6ba569d0a57ff51f98f98819897df3e1b57ae94b3d380b61cc752c6ecce2c60e548051f1e9c78006fd9b5ca9645776c8ec8b2c76892e6ec46416378cd7b19806b1a7ee58fdeaee37da81e8d4ca8e7a6718effbf083043a1523069617b3b8cd2d0d6af1b397ad4ead949ec539110ad99365afc50f79d546e20b8b55a58fcf1e63c4be5a3d2fb2b42fec1bb611a0cb611f673330a466935f2a62fb0c0ca9d95eda901557535cec23112ef6d9177609e8625f38a475b7e7eb3d6cdff698a51820729d3e6f09e09aada1b851fb7c5074f9dbfad020cb221fa2758d234992245192248992244aa080c289c911a73d3627ff46fb95dc929b9300bb649f4939d3329ea326d819caf3c3b8b8e1a8c92ad37b3fa4acbae768b2dd6217244243f466ae55ed42f199995dd7994cdf99be33d1ef505ea2bc44f99b19a854ac180a8b9829442303000004058315000030140a858382e16810c691b6d70314000e7c9e5264501e4ac430c9611432c8106308010000004000400446880300022e0327beee649b364cc30ac27550b78f6988d48537cfed3a9cf0e022304c6bc351d288346e6c29071d52190e9c7e2782b3f71602bc8b01cabad8b6df584a71537c98bb2aa863bc4295aec2a6e89b3d540299fc6a868a39bca219081d9c3de1b493dd84cecd65164a91c9a1b7226fe3dd9d58e5b383abb0a87448f6895713b0870b240448f258640598b64276e1d84e143199509e17ed292a0a59087aba5be6c8771c5b18ea2a1f011a86f38a4171caa970b2db391d34eaa0c1562158548201d8ea720a387bfab3916222ab3afe9e796b140a650a26209e528e0450ee44bb21fda011624a330794163e09a194af224626ddb5c04bac759d4c413289de27e19342454da831b98fa0c1396988a0b93f1935bc7c6a0147c8ee87beca9335cc778f832f857da994b1b507ec553dfe6aa8eb35e55b165f34f1adf059f2989c987c3661838fbf43c1c12800e1568c7170262da8a561aa36764319696c28cc1fc49a3ea6a174b8b50c5684c2a42567267ee80dfcfa3135ca690b2c16ccd149ab0e1f0bb1c0d4a645148ea58f03eaf0a234cf9502a06be3e152600a5d3a32f3dc249508cabf77541ade41527d8fea8ada010eecde0af6aa22953125e55321f488c3a1872606c06ca1d9067857f00b41114576742eac55cdf297eaeefd8effbf47e32fe60595ef976d94dcdd6d32160cc43647268678b49335ed4d47e412bd2a19df356b7c1b27dc93f893d143471acd8bd88836c4e2432db18af3c127b31d0856d5829cec93ca8c0725e46e84635f58ca5bdacfd14e30391486e1a72a4632cdfb1cda8921a36be97c6d52dc1f440b67836ed41377a301ffd856fed724cc07d13b6050898824ddfad12f608bead836365e7062dcc81576ce034aafc690aa017cd8bff817f10c7da514554552e4c34fdcc3ac9a402b8be46955f19db5c37d27892ed6ef7f6fc7158ba4594e028ea151239e3f7f46f340898788eb9ec517dfa6a4b03a03eabd71792a0957a107a65fb9dd09be53451496c6d8c7f7f219942cda8f5c9c6a6cfaaf91c49f03d43e82ccd1ec0ecd214f51ba94ecc473d7551feb002e1c3ba3533bdedaf012882893a9eb55bfb1c06d15ddbfceaf6263e948dc0f247a495c446e467e844ab8756425730c62c9d2db466f7bd58d21d79365ac363b91abbe37c2dcf3c4f8ea738031d1244fa2e80469606ac29fb0aead925436f1403ef58cea1eedc93358d00a1dec0359f23f09b9803477b3039333ac6618f1ee1e9c0612e16e4915b31e79dbb2fb83fee0284ccfed75f3c87d29bfe224b544ddaabcb03c5a443b43190f4aa9f1e02047e78bd68748f991857648d88fee5a1a6c5a002bcdd7eb33e66d957e8c5e18a97d73d74c4d07e27d6d4e4c20189fed7014617b8cc42e8c28750546d7a4baa32cac9ea68b1776ef020a68d5eac3b55df72e059abb007d46f38de722502c408afb6d5ed6231cebd033296f991de0226b1bf4db55e834a93ffbc064eab93261b007e68501e1e707b167b6a8313cc22d2de8ae7d12b81e410ac4b2b4bd6a2a6b86cde8b4c508f63c04a625c88d6199e35c82c374f8b9bb95691fd6519706cd15f3465b3e24ced41f2991e3632cac844822917beee8da9e6417f5f2823cfac24890aad7668a67dcb2f156cd982c8b9c0c5a628af59587507d58858d967528cc49bc04075fe000f25fecdcdf0252e647d590d695d965f1d68d61d793450f123a3fdd634e0a6aca1373a6bb927ef8b83e33819be0cb74458dd9125ba5db9fa095a36e40f54616c17d8a6cea50af7a7fb37b66756a10f05e45a5f59384787655330c1d6ed2e4f2364577a56c239ffdd4f89238b45e333694f8402b20bdc4927080ca8532b3a5d5a055a08428b01d45264bbaf4a4a597c84f7a607101ce109e3801bdba35e0948a5d6cd14d774b44c17159fb6b12e82fabb2f169c5e96de9696160141345652f498ff6d094e66a89109fd490499a95002d493a1898c769fb090d1c8a99c25c7f1c4cd4e7b607f5985ada5d0f44897025eaff1204e707ceeaf4d4066ff2ee0d42ee259a72c4ca819ea8d796e8c17a191dfc1a584ff74c626cfdca712450cee6d0cbe3015c62cc347a167a678a8fd137fc9b15fce0cee0dfb8bfac067ff66da037fbe9b42a850431387878c40e292df2f0e47835128bd9b69df5adfb7a4e411b69efc99b075ea789e5f8e8d410b3794c32d4e6a906553d3291e74e04efff2d862b971f09e8e76788cc9126c982098a2c8a703805dc49548c840db5329ee16475761cec4a99e247fc76f045acf6f20a8cb65ef271aba4975dbf0ee9d1beb8ea0f151783493409e434f8c0236918801ef984a7c7862b7ccf0fd4d9d876c1d108bba7670eeba58b1d30059299f82ff428158efa8f35be5732150b52f03fe2d8f9a3d0a2f3c9bb14513f48badd40530e84b427760ce7ac0f815e1073a3cc02ff20432f563d5a642aedb7ead15610a1e2119a8a84046209d5fa7bc50b2c6397007121c90304417fb625141ae96636ab2958bf0e56aecf82e9ee3de958aa4c6703c7cf0129babe9b2e85355ce8961b331bf86c714e2caac3ce4dab0c5c7f2416f3792f8613eaf77f0fd2fc8f7c0015be57e7743d8392dfd1cd615098f48fbb5a2cb76250ad613bfda22055d825acc2b817079eb1e0640371996f80e3dca43a8caf2e7cc470b5d385e64815f5b4368d8026f9401e91418219020a9116e4eb06fdd11e04c278cdcd2bacc61dc54da7a5507c814f645f6f8e5bf85a5f6115c448900272bbe49267891d692c118847ee77f68af99b8a59884e5840555eaafdf46d6f300ffdae85d0caae359161fe2e5c610d2ae208fc7a2ffac1d13898b60875b0219a3a63218005e19beb237db9018df615d618b101e34f08e8e2c642d1886e7cbbb074529f5a394b4b086a49c87bb349426cc726a9a09c430412e865e31deb28844cb44c70189a3dee928c14d7b13ea5f638f97538f2f4264015f50630bc074ee426599157c0899c0174108e40822c3a807268b6a506bf2083fa40c2f01f8ab740effceeb5029af22a24593bc5f0db65c711d5c6446a7ea244cf2d84a0b1077daa8633d732816c2b517ae243c0d1b8fe9ababfd925dfc17d1df7b0d80b80a3bc4214a20c955b09f1fa82ea09ce353b9a2a479e048ba616a6fef8ff6ed0496619e81656691ca6ef4004ff2153073ccfd891a24a08d3e0d7376333cfe8f229657b7fc4e287442c6da37456f840a9a8bf4a8bff107e441fbee6f1c9cf70e8c87ffe14475a9b01111744c6c65dfcb1fd134306c9a5638bc19ffb0c033cc3f9723ccd97734c76e9f1a3085881789f1ea0a15f9308809083f44c63dd1609fe0cd518b0e5b3b49cc6dbee9e1ace438d9b0718ce1c14eac7074ece4c875a753d07d65cd1dd4f04687c3343a18efbfdaee17cfbb8619c4eaf8b5c95da04a99913ee2f4e5bec880eb9938de6908ad7ba53dfcc4a69633bc72402520e73fb95300c5717ab5d4a436070a6b858bf14e97578a55665571f6872b1a1bc8e46c43e7073e142f1aed3dc45f0349fa6880d6651cc99d1017dc1192d3217b4e2b0cc97a35c9f505ca450f0f0af8c0086bad8f18291a4234d07809ed82f02bb7e3150c089baf806ec28ea37a6eb95d90160eac30186030f65f8f181932bd7a13662758a91f73c69e0c23d41a32bd01225bc5eeeaaf9c4f085050295fda51ed51522a92100f4d0745f5f5209f3ee0b8ffe327f40e6af81064946af24c5ae0a887aa1713083636b35dcbc207daac393424f18f17458608ca77db99a719a81b54982c7a379fc895ce15c74dfde7bd9a3730bdbbef91d59bf6fccf4cfdbf775e833763aee3b63277ecee3781bbae0d3dcf7fa80554f1f8453ef1061475241e5314a21c95c8be306465751f2e7c8c24252319f3c8643401d788b8ebb8accf17d54eee6503abd39f0d2e68cfb409d161a98941ce8a2f6e6b2041d4146c7dec8a3440aac9e436cc09fb0b143c88b4c1df8c84f20a066de8933de9db13c47c2eca51b6caa4e77487d69abaec818bfe464b8dcb5320eabe9becab4c063566682ad1277fb947b8a17cac1643d9f22b3a2ec694cd7fc7fce42dacd48a4d93b0e7e991d62854a040b5547115c22ec0c674cfb280d2e00aa7595d6573ed19d1a0043730d99237b094be58e669328f61eafb00a396a28340e7d21235d499336342b47edb0df208a918a145b24328e5b318c9507d34bbd8e1bdf3a557a8923b37f6356276b29578053e33429b0691b3f7532b882eaa59f8c73290de6df5ce685ccb731146000c0d4857f59e3e596e81c6bd1462501c90967c469123307ff3513caaf214e9ae3ce93379fc774dbe9b8d50e33a9a37972708afaa9ad75bf2de01b1c0f19cfbb3ea7ea0ae1de0a27f527b0748d5bf0f3deac05d687a289d2a723cb160d683a80d5f5d19160698f0fdbf4f7647d615691cd17e9a55659fbdd243384479f129d5ad2e26c4e3cf3800db51565e1299c36b5d7ddf33981e3f222150b667a002077ca33eb00a213c11889887b47a2e0ce30e8eeafc1b8775ca2af7d667daa024d3f79fae991eb3f9974fa2221d31ebfdc00bd17c85ed1a5e9f55a91ce27a258b1314c18a39e55690cba35e417a765230907e5cf187c3dab0c26be785af85210b79dfefa61be25886e4117a619cca4532b66ba51cbf0d57dfbfcbd7a9205dfb643a3c02ef92f31b26978b5bbde081a4f29dbd5bfb400172b9de358f1e832b9fc13576434764aaeb4106fd6b97c9b82f762d85060fda3509806232cba0f51d00ae5efc265462b932c0eabd25eed460aec876aa49a1c2c6baa53a7a3c68a4af9a89aead70735fc882aa0d210a738b797e99f51bd13d1d84d0444ff1e5c410e21355a87048f4010e33b62990582490fa2cfbe1d376983da7bd9dfec59402d05a8ed46528d08ef4cd5a223649c6af450aef5f3e3a90ce90934e3cc0ff99c4c08ba3f2a57a7cf44c7d872753840d4c92b422a5aa56864ca816f07a2be5f9e1eb8e7fccd6122372f80ebc98b0740b41278b1b397d863ec3f54c694873eb3bc1f30918bfd3491e02e5ada0d9dedf29a210727ab8b030db03613ad55bff5aec3715b7860325c275a5955e75c67a5f727d1522f264a198a9f547c1b1645cae1446b6783715339fa2d89b72c60aa871f265d813802e3e46a4dbaa3720ce3be43ebd5a446f870c31537fc8028916604bc058618e2229e2cc2487159eea739a77b5cfce3ce37a2155f603855b797a67bc2a95ef3f1820f4ee90d52627aab059f47b44a07ef9ff829002bfe9cbb78e81f073fea2f95cd9eca812c548047ffbe5c8c2e4f22690d4205b629a81d0a4053fd165ba7ad00fa525025fe4f29020a732ba7ee4b1a90798939ec0ac02aed742f5ce2cc5bf691dbb27863d7781e1203c48afc1ad77de62b332036770dffdd6efc52446709007b47a3b67feb607d561f64b352afd32b7cc0d988986034fc17c9f2fa44a767c4af1f942c87828a90c1b3b1c26f3204446c4e35e032e5183b1963387037fc28e2f1d07a1fa341f03d55fbe587639dab3c151f17916b828c68fd4a2d1f61930ab979da3f0a2f8016713fa1c3f09412de8547235bfd751ecea23dac48a571c5aa35928131e5ec70b37efb29fda49771fc530a5e9205e959c9c24473db6c72909e6165ae0c003e6e49e5746b3d7df48bd534ea26f7a35b587bc0bd6f59f16a27e8bbf949bfbceeddadd23cd037b496286ef47b0920c621218f96ee152213c15fd3e23539ab8ac395503edda52c275ce7b2ddce59c2b16c38dbedcbf63c549c27277c80668b4c6ca3028a1770aa0ccd78f4b3f7a1a69c6f72c99ac47f275e8ea156fb72542b06e6b8d9f918071ae5886ceb6ba3ebdfad7776a209f2d71ebe524e76f616427bfa63ebdd025919d4604aa60fc582294a4cc451716d3fc3d735434a4b32add8d9959f354e6f5d15f664f8476bb895d67cc6c4cdf228c872da1e995017407e42546c196630f666c852a68caf6f566dc3d6ab8859212493bebc06e4c9ae178b0cf0892dea9cf08dfa3e33ec4cd024eab4b2f55f407abc08059aa997c5a27b6e40b00e6a69905e597bce40b9fbad2dd2a086f67c06492c79ee34fbbfc6d4298ea51f87b26cdbaf2bc0d8949c015d8d0e90a398f1f96a8b302ab0610212b67bbc8fe80fbe73dc19e524e1113febd877ee434a563cf7ce1795126a7fe329b1593e2a0aeea76425e6adc2b6dd43136bffa77522268a6b1b4ae2d8bea29876cf50b6a7646064d5306edeba87d5a4e4e62cb5af923b17dab9aaa374604cb0b5f35e753377da370d6ec53067fdac6003696c7af57466b355dcf12c974f3ee23583de2bddaf80e95dc5533e7972e0054a7f3ae8709fc5d42cfb07294c80634a95a420328f111ac73e0fc7380237f62406f2e353897b258ea56d0210f3115f0134f19f81b683f3b8812d01b237408bce7d684f105b3e12a573a010cfa5e904c14b8a5922db39e94a2e3d165303e104e8d0e4d4ed9008526af99cd5bbc887401de1cbacf65c1ce37f2724cbd64d3f48e0eea05a54e563fbf9e299afa3f37b7d7e49ceaf5caf71ce0faa57721b3fa5de31ad17659f0ba533eac0878271d1cbc2a972100e9050a63ed4ad8f2e9cec37e60d02ed4280c8fe2d82747e7cc3914769200a2d6f22bb951e1787ce78bf5fdb85020acb4dcaab562ffbbb1a3f44253ecbcfad48666d81271b65200ba8b1301fb3307cbaacfbf10272cd8a6ee2d19b286596894b66958eb71c7f01d424295edbcb7e6c7fd63c5d7cd4826c55c116f6dd222312a2c1d7906703b38a56697ea4e7d4b54e0a99848e8684f00d698a3c14fbcdf2dd48fdcd813cd4f9bfaa7190ebaac10fbc2fc895e439a587dc782c027ab73e328a615dba5a634eb6b71d5e361e7f34bd2984b951edfe06141272042fc33b507af69869c40bdc3dedb73a2ec5d8866c1058abadf9edf7930364420e6442f5c92fc0d22b454915b90dc9d06a0139d988adb17a35596dd7759127b0f67a224740f68a3b90c5ab3caaca268207ce790fcdb0bc22d20adc9003dabc726e6ba272ee887b2b29047ca61bb62f7090f3638cc592ece1267b9364315bc69e579cc72d41b266f7afbe91b1694f1cf31924d6c473b3319dc9275f5d49f895ced0373b9009ac9dfd3fe3ce4b333f4f43f2fe77cb508ad92a7614b8f83efc0d8d0120b074a09d09f93ffa264c52275ae7a8ac5cd1d8c2a74dd74a3b92d85cb947aec043bd801ced870d239551fbef41f80ed3b38c70885e1f01e09b2d6e20a3f8445089f01db2e850dede439aef54a6d60e1f323f514530eb59c5aab112ab24d0294b68415ceba1aa9a959d5a89c8188c0b72e28aff0c8e35c65545e37f5cac64d6ece8789251dc5b99b7cf97f683deca8c1bcfd717f049a8fb736cd6c893d97013feffaeba38b1dd8288453f0c31c76aa37fcd6b891381b22da49f3d561c0a7a4c8b5ac1dc06d3f23aa5a62ea20836a83febd0303f481f651aefb6d3c1458227711cfae1ab3c83e19e4191bc2ecdc33f889acf0789151111fe368c91049e2de25e0b597dfc814380f653159299a7c7d06e198f54659a233a3bc52ac6af708aeb4444afd46138bf61325e4f59cf234d0e83a90670ec9d9fde48154971e17334efc10bc882e9f52b0a24a3f45a412090c8044d1f8d2cfae952333b9ff6c8af113b8452bb50b5a29b12d83565b074f1b16e6f4a948e48f8062a1ba244d00f22fdeb0c31071b9122af978c47dceaa8c091414ff2c9dfa8a00d7af618b96df1379f5a60743a559c9f47c37cfc774d2dbe1d192a512bafb41ec950346cd9a8959ad69c22d4b929cac824ecdee625c683b2934b5c420fc77bc17fb07ef556654634063de6c1aef97a3b1179ab584c9adae537f33a8998bd8997790a634e9ee00beb4e55941749342626dbde527448219767eb0ff2e790ea801e3c85ec5d7a11b3584cb703fb7767060d7d958923aec0e827a48037596a7c18faa10093b0fa1c0f2ce9f6bc026bea82dade16810bd81d99e1dde7fa555c2e4e9ab9794ced35f6d4f642fefbe0c6702f0be289c687f870f64a9cc4c79847e9eda3ed81b1bf0e596c8e54e67d5289a269ce7918e9100a9c5696adb2afd7a2631cf90851c0d8010eaac52ac05da0e152b2cba84ddd034fd7ad60096d8d6f2f60072c731889be64b4b8b652944dbd10bf18dc1013450f02992cf5e990a177d7a0c924c3201168a51a1005c992f2d6ac66c2e9965dad027be6b2294dc9669a39868155b2270c62a9f7ab9732ee7b8f6857cd6ab1fc3fcf6c16b9f2d5aaf488edd0a522fe8dc283847fc15e113588c8333ffc3821e4a68e5683223721b616e4b3f0764873f7cf8f9001f43efd93b2f5eeb7e3579dd0ff85aec6cc4d2d4db797167e8c8b41ae3453292e5cd219d8ff088edc0cc7d8f5f39d00476bbb5d0e9d347e7b64dbc6ba17399d87e317b9da391fb5bd8b48544f76075a88b48779035e03fbb0ced9cf111c657194f38c13574b235a88c03059aac79dae394971a2ad909ab336082403580054a851649b93955f75bec005dde6cbd17cd326e888cc8c69484cc6caf0d68a15c0f22ac380b20bfb0066c2e0057c1a2620a278657e4fe7ebda99728ea16975b13e7f51a7933bb067d21ec7e30b19263459487a84704298555613eb1432ae08cd8be605db580d2f14ce9670cc9ab10409c597c91e6630d25cfcf9116ad979351558c41f7fe8b06321780b5bbe7521b6d86f079a7e3dcb23c77445614288b5aba1cd2951f542cf08c0cdc4e56a0b4d0e228342d2e25ce1b1ec326a403621f50b42c15b9ce69900f40585e7ddd7d91c05674b032e0b93010e7fcafcdbb377d72cf2d452b704457c2c3fc5e525ab5d853ed8f68f59fe91eebfcaa1071f2aa13abf6005d607238c43f416cb155e0654f9d1f84f9df7cde101bfaa823e8413298156c00d0165e55fb29e753bf2ac5791961a4a2d2bb2a9bda9e8c741632d60a92e113c36e4821dd9fbd7dd54efb95c097c845394460626f3fb342b303e4e82ed83a4701a8b8fe92b24bb0bc4c6729ffa218a98bba5da54dca0bacf7a9a0e7a586ebc866447aafbe34a5d4552983a5cd37249d1eff7fe7af31f4464ad040d8f393027d5a24e2b600acae04cdfe2423aa89e2690088d107ad0f080d1919cbe9a117bfe01db3a0b73fe27a11d334548226679893be01036c47e38980d1027ec89143f5fe58df9b9a4ace29ab20e1c8495438c936c97802a16e73bfebbb93b1f354571343f223f8dc85e1f256ebb308eeae8c225c36022c25884e93e4f5bb66d96f437d1e5a3b3fd2b3f6b212e05dc948e83537e431e535e6d238e686a3916b123a9e9071a9de7d6a214b144cf52029301c474dd90c416b7888f5f17eddade927ac280bbd2f1bcafa4a6f1a6dca25da962382835a64f863b9860c7e51388f735a38d2d4df7c66a234f7b484598f2e68b3cba557364c7ff3cd5957091c3711a0d90b84c847fd3ba1854e9074d9d8ef4ef6ce14a9b2bd2e86d61cbcb3d69ca79fe04cd6324dab402ec6a9c1fa754791c52a757ed18a923df1bb1e1107813eb7a8f3047f0579bf81afd233c9bff1b0df0031708b992f3f9a790cbd8eb7d8d993ea87946776a61f51bb287e628eede1887743aef9de1f68c8c60eac6326fe89eca737dfd64b0b396ac2efc72edc0300f8d9d79a0b2f1a668f9f4a05cacf29fa37bccacbc365ae7dc0d4bc7b51928fc1155274dafb0784e68f31098304eb7df479a69a5f3cc4b6603fa9f76d9ac5cf4d900ac0c6a2b90e416175c255ba79f8acfa04af8a4978dc5011a936cf14cd73b86663d72380297c9569d55d791a2fb398b9b73e4c1305c7f4fd1a9a0a1cb0ef222c4676b6261b00b8a484eaa4804f32c41dd000f5e8ba2cc60979958380a983066195b3f9275d730b92515c5be8a6d53aff81ab9e06cd85328d4a13012411c8f29f98dc9d6c9dc3b3c15c2eced0733f070ea786d0352743e4e9dd218ca395c5c2dfe624b476c1b2af8b7bca28e4845fd21df3569a5aa19ced9dfaaca636c99121be95f2b6c94fca64133fa72feafc6226d0acd1229c967bcba01df25e3c1be0dc09addaf65da4e3a172900aac12e217109687e990a54797bc781116ab669a0422277885ba3f83e2ed4b019a56ba0302a519e76eb798fc407e2ac90449f27f2e7b396b17d85ec3c32122fa9b763619517160d8d8fbda4b99c774ed91547f1fab0c52a57ef8318d0b92a87eda59a8599e32c4c98d454398c99b9ed1971ec123401b77f91190b1a07368a1c45aaafc391ec3b8e0dc646be938b137f98047f4a08bfb84dfe28c427617c95bb769d5cf2164019d6e393decc785e48246c383cd684aacda51ab206aa32ca42e902ba334ea90b100a13742aebc638d3c9860619744fff4f57b86107088a70c14ce9c8d9759ebcf85e37b19549518a8ccd4d327310d26ef05ea6c6a8977ac8c833926cfffac8ebc36fb7993ca9a0a4e2e3e842afb4855e3324b7cc1912978b4ef21a04587ce29ba20f171043a51e6502bd01a94c6c863ee800262726f605275fa2e288321185f878500004921cc2de2c00cc6124d3c01dc07450fa4514d6a1c8bab2ff566ea16d812240110b03fa4520b884953ab053d7ad58b4eb89bf29f8588626d0ff19600b6c91e02a0f180b4294b66399a9164b50068542979198251a8a723ce5f28728a1b26053e01779085da8c6a8407a50b7c16ba3e22fa2347ea3198b2b5c2104356949ead84df56016c41ffe58420a44d5a73d75244d4675f71dd938b6290bc172620120a63320f2a8f8c57486131f15bf98ce70faa3e217b9349c8234cab4d9d64dee891ea093b941202148073e6f12ac3912b8ccbcf61dfe00d825479006579a69d046266f3489ce36eaf4a5418bfaacf8afd3cddb1c03261154d6a556a31ca25cf4df220c2e5107a8886b8150993369b7adb905ae810142d1d6dbc7e8fa4807eebf0c4115dcecf920f5d34a307b82cc0ceada426ca14ba7a19c7569113269a8efaec7cecc0504afe52ec2ecd7353085604908361ddc4ab6820dd0ba213073bc668f7339c39f3f67b21e3e98620c56877cbaa6e98886779275c428de7157ad3f714c905420c16c86381a550b96ff3cfa7b261c44b4d90016c8c9374b4f754c99e324549b21d42070c74c998b1163c3974ef796cf2eb5c22d8692db57d26d28322db8426d95a50ab188c81d90ded78e39b1817b7b702993d665630c4e66b68d5ae92e1837dd5c22fae850269edf0b5142292b78c012c5e2edcb5eaf4cf9391afad1d9191fddd0ed35fcd7db3fbe15dc3e5f06fe0c158b52748a06db428940a7f1a26a10bffbe7f71ad571d80c53566c0deec21b582f80012cdc9a5464e89ef301c21e5714a1835cea5e32de1c1c521188d6a1cb6a68b1b7cb8cd107ec6d886a88a686f215b960a450959099a1f90421505e80916047e206954b523b1e9adc7db549eaa14b6fdcb3dd19d419454ca09f6399a0d866d84b7b7f88d4019b2bdaead55e96d2bd66194c9653ee498564cba272c1e110173d44df94c01caae1e77b61e3f52b49a956fea11d8c33bd2ead8ec051b08756b7321d330c359765d8d3f164d00c53a0eeb5bef10a79bd76d93112807ddece63598b6abca032d98ee5f838fbb295833f06b8f6d72622aae1edb1da71e48e9da7046dedd8daa41040fd18ca14cd2db06bebc0aabd37fe056cf6c725a696f2252841b2bdec4110ae2820c0ad0f4ee097eb358218a545de2165153524da3ed9dde51a94407eaaea33dd22bac7f8427e8123f2f462ddfb682e614ee9d33f411a85102055bba0086307cc59c5a634c13ab99d49cb41809aa54c2271de1bad215a08b4e7c3a917e6783dff99771593c600065b7fefcd31907f8951f3c77cbb98addb914f7a6f4b10bd49774509a4b29ae028be8ce5d951b229421c63f90ce06ad364ccd99e74c2f6e3fd7e139d2ec330cca4455187ccb0329fef834176892ca94029c16fabbd68794b144d35e035eb75419bf292bbf7903d743616d59630697365054d8612258a0108b494a548d02133ae33a65e1f5dd5de2cb1625a5985b4d5026f1addc63e85f1d05bed9d8a8528a43aefb1cfc87e241b25582a3a0d21fbb5db05e28a92f727641ccf0481492878f60841e82b73759bb91f5404915311424e5e11118240aa20920513948a16f90aca73ed405b2e4b8680cc0c119b0a32a254c6004813ed66ffaa4894a5c7a263030d41f7f5b7488ce4732320fc733150d32741269af8748d6c8d2a589401c76f1b33ca0ce4454fb441a8d3725b6c202d94ae48fe9823759e26c956ffb96ab9aa5fb8ca10659729c65529ad7f65536245dfa79e08db0702985101790f780cf8778a8e3f16673ac8fa06a3fdaf6e33e456f0a7d204a090daa6ceccb4e05ecd1770eec1e422ab52a6d5fb1e3ce40cc477bc45188915434ec432850ff15328ac486a4a4f5c52c9d87d4b09f5e91fd037b3b599e53220228669235d9f976cb16b78e1573edf7443540b83cfc546bbfa759228fed66f49c1d3fea79f584a3fb303a31b32becd9acc00a9fd4c85047b0d3ec65fe6584a856e09231ea754dc9538ea51ba0a1d09c71ea7aad82d61e4d1b48ad50ebd7da3864b78bc699a38b6cdd68a375a3b0e45b96bec42dbff2a8573cd2cfa917a5b566100d4f60afed0c7ffa92df4279030cc36653350c19cf6f401547079e6841c54205604400d0fee4ed07bb614f11a93a47b2095cfb128bf43a97c8e45f91d4ae5732ccaef502a9f63517e8752795ce21e89fb1b3f7be0895a18896e91feef3108166e872404461d68b7fb5dedfcc9104c3240598b15d7757976ca471cb3f07adad8af20f2ccbee571416bffe82e94d90a05d4cd240c811626eeaad2e9ebae406a39868259ca13000925b4b9600b81e5091f6b173af87a6ef19d56c817993b7ddc742b1daadf679f043a8d88aa36c7c8e55f34db8cd08e6ae64a38420d39ef0866f0718a3dbd0a3f7c3d16af466a4a970446333f7f9931e60a4e5f7f50084c3ddd1c036102789c817f3022d706b579ea0e13b9b02f1b9810c92f6d8be22400c1ad5400513c60578e9af67137d5f31a6dae64e9722542338989423ba409d5c003822a10824f21b4793a259e061706ef5f7fa72d443a0a3593e052c14a5cd4d1ea028ce7142041c6297e6c0b709cb9846938491db9fc85aa69342ac9888da2b053113326beb238398f5d9ccab7068605155f820aa29198bfb4b56eae154271cc8ed6cd934b77f64d872fa0f530708a9841257063da2cb9203e1367dcb7632c035fe2dc7192b01c466704b0be9e792f6603d00a2a5860c1e10f8a1563ee5bf6636813abdae60067a103999d82f11c09c350cdc9c63660c1c352cd7d33a25978a680d4b38fe699e6d7b976cdde759a86bb2a8e58dc107dd1a84c4d2d777b79da645666481bc53eb53cdbb162789eb8198be25a0ed0d9401b282097a119af9b87e6cf4b99232ad6ecac88e138d0a1db06cada720258a66bbeea09e63c2617ea0cb6e80b8be489c25ab9d3dd31698ffb0e52fe1684b620ab27a45531248491acd2e8c48c721050c9d689a406f51ba0c209ea4068afbf2b80131260a3dfd727535510e5330e863f7ba36c0cbd36bf484366c9181e1ebb69d23e9390112cb363b7b1b36403bbf3af58fac13116c413afc1b4b8908648bf4ab1b58a88544e2350ee5618d0ba3fe2a00aba486220421a8cb5e4d0487664a2c31eb8ddbe1420987ce62c8b27e82264476f5645e045912afe146886dc75d02e944c47bda24078a369e69a88e6b635a41662a9ef33ed256b6e48a625a048e54364e6dbc2c46065ce52808d31524c1477b98150f7b3094297a72d479c609d53c33116a85485988c81094af2a97ada88ccbbde876cf82a945f01b5ae064b20a6d5da1f0057da00e6d134bb719a8035677b17e7022659695ada6da8765b42d05e9839f6a030bb0261f8404baf481262b3134bcd5085576a164fa40f72526e622338dbe94399a2c9e436a3d6b446381ebf9bcf8a549d84fc04f086f2785d0223991b8abb622b991395ef7a0cf018baedc0bdae81c019dd065cbcdcab4e1326d14ff04de27cd3f9d20d257184b8b1d7041905939120979a71d85b2c8b3ec2b72052760e4ba7db05131630dfcedddcece58b1865ce655cf037f73c956f5c9074a3582e068d92969631b18ed2007de9716d0066a7ca19c5a21d98a00ba4aaa375a4afac3eb2235d74ad752aa10db823b1a1d962236a74bc84e946faed0b31be1b6ad80fe973a51e8a22cc2969e7e9975745f36ed4c60b50df9b050ebaa20acddb13f7147715251559e11248d11a2e8d2a16e282edb20b062fd8a99ebb6c3cab77e392eae5778b9ca4785c82952c92d9535adbe17a80db03f121fd03b8ea62ada9c3dfdea8c59361b962f48d196242326d069587f1d44ce36f75b3f60cb778f54fd422a6e662985f8ca1d551611738b43c5fdca530a5a6a2f7a71846b94056b131ad7d073c8bd78d6311c920979d533e9ad88d1a8811425b3cb26ca9e57264a909602f8852ce0ff960c6953cfeda498d065d961a5dc974ca89305cff4618b66ee4b272adbdeb937869df75f569d4b36be23fc88875c1ce08aca76f08f44578226646d1a615a988659ca8a35009c3783206909adaaf4666df39c74df297399f620b1f24544a82075986e200b202c2a8fa0d771ede8b02e009f997299c6572451cc7c76dc8e61ffd7eddb9cfbdee18b35e2cd8fc75da5dc769c2e38bb29b404dd90a912d02bfbba8199b2bd86a5ab02c12f0ab509dca178d1271de5aa1ff8aea62b5917e36a94209742094aa446be3f6c437e928d612791592b3f0dc9006215c6343b792e87da90a11bb5a188a7f5f6a866a8a0a253797ff66d9f7d21eab85779458a9f910bb65df9c10f904658fe4a4363de02ea5486ffff3a29fe0dd68c375285d1a9fb5e42ba436bc5ba1acaad549863d863efe09d5fc538bfaeb8f5ba6517dc25cc2983247dffc98fe5ff855e8f9927cc1fb622e6382d338848c3be8380fb698e84817b7b0c448e27b51e4f26c231270a31b927924840cf933822c9c71400a078a1f3d27361f87675d8f901b82c7a27d5402db51dec5b974c881fea10c07389827784d615dd4d1a652ab72b3fea614ad73fb386bdac87f3af530e49f8598988e82d13de1818c44426f406e145738fddf7b6795f5575fe3a46b8af82bc604e858d893fa8f7bb67e1da98ce1829d97fd6e47a1b20fe44298b176d6378d8d603e5613a9d8a97545aa8c0ea20a846c1dd7bec311646bef04999039bd684efba2e6a62c52cbe6db807494f250521647898f5898b43abe9582c2980c5c8995b296a277d5bbd65371ef76d0a4e2932fdfa0248a59be1fd044c9064effe250dab644a721fbfb4e145c1d0a6e277d57f56e254de677625415d3ec1b88e4cbc92a6819f8c6936dcc60b3b5a54e4feff28d27f5a58b6c30c603446e8d997ceb6914ebf99f0aebb679d142c3ac3705d1d7a1daa625f5b075cd41dc0b2b5a07a99b3c769d29a67a6d5e244778ee364115ca126f6c8d81271a6ee8648c9a2b7e46ff42309b06211619b05e7baf0f23119d320aebd014df537684bc72b22d8ce256106e8814dd8b82ac1162e72673e64f5b5fd8eb64e4c91d395e0f145341725d9043862791fdc6342fa87334190b92e0e768ca9461302f2a59774bb98efa0d46d3c2a089ac192187904ead9b51b5f2f9e6485ba74f7259de2185b8f086fad310f1d00761f4e0b5e97030db612946419f767841eb81743ee9be1a5b64309acecb9ec72a140262f349c1486da2ad6f35c80426cbf8e5a550615a6415dddd2fb6c69209629f2fd67867b0a842d96fd6d011c5ba67ea6fa15ee6a8c89f780a6531ca2d7d2b7923ceef185b111a88b895af15b683c5cc3a311275c5dca15c93c48fcff3bb432709bef113167f3ba387c7c7b83db3b315ada2d8d30a47633de06eac8732cde03be3aae83e17b1912b1ce257ca47759a933338aaadfa1bab256aed6c5cbf5db4722bb6f56c0754e82a01c738fecd320d41aca982ba5197a55d9e7fe2d6d5edd3a1fe7a2daf5e6f5f62c36ea67455bb749731408c4b362a395a1c7ce10834dcbf3d2c41e8be1fa01443a5008e2e487b2cc7b0d391cb316664f976c09ab42821a073a19be78b48365e2194f59372a7a6c04df3bd3e14429f91657c953411b371571b0be3e722969872fe2c451d366d12aa0373a406205d7a8e698dda7cd08da129237962c4d043ea4d7a45735f7af49e37bf216a3d9e6525e76def03b814bb68115c287ab5facc66b27897e635169f72d014e5174c640f29a2a78388a6495b20065dfa2cec3f44c238ab3dcd70c1c092614dd6a229badd565ba130daa25a88122329119a98ec0a882c34ef5424835ad8e206468c944a38103a083866dbb15fbb76181ea48d52b8178aa12f256a5f401cb32fb11599da60de5c31ddfb9c7b93f4279a2f03dd71566c448f85a8dc82933417dab4ccac6d7bc0a12274b52a6ebc7fe1ba276e5fb3fefe86c58a47c0986bdcd2f62747f9f84246d9d89bfc25e31f67908d2bab4f9d096cae9846bb07ad8467ac72aa952fb3fc7a052f7473756c84e3b7b79840806e75cc3e5c2049bc7714b7b3aeeddeed4f50149108493fd2f30cbdf3c16f0a73e090f3f1ea9144ff156d88aaa54254ac098106df6baab15526ef6f2c58d5e662cf000592fbf6ee9da9992f52d8690c09d9a5141a843aef0ff0245163733df11a92374837e5320afb33ab34ee4f02e7b0521a21bce1fa4ede5a9c16e7d910140833d7fbd19f96417b008c9cb9fc765d4544a9e4cba557233d88ebd4d44e90e52989da51e850937172bc9d2f5bd4a273007015957bda51fc8293a310bc003cbee5ddf8e68b23094a39ea2e38f0561a8d185b8722be4078a19579dd73f4dc8a82892acf3673ef1adb68a3b98b391e2458f1a63ee24acbb2e65ff458fb46d7d7f3636b6ffc3877c1c052595b17b9acb2c573cc9c9e263929c67aab426718f6df687ddea31755da529aabd654aedefbe2f8ff71d05959bef3afc55cf229a99642859490b1e046f8cc630c77f1509e092824820d79ca3eab7f979be0c6b98511618741cc010d9641ae281767a3d08349787fef1b8f461a3581227a2c18e137b10fb8f1c9a68768d98eb9f0ea172dda218670b80dfca6083e023ea98bed4b7d94177d68c57236c87d2e0c94fde982bd8c6502df6bf601ac4b9bb459c1443512b412e7fd188716773c8d711cadd7143f1c84aa548a57a53d593e2660839e3fe9caf0de2ff5054ff954931d99aa4a88d197175c8aa736b013f69a6816c234d328e07a2c0d50f558c0dd2b82e0ab674a190d8274164a636f94d276018797ade28934f6df23bb53ab16b67b6dcbc66b7768849891e674a577df45c8a13c7aeb4329c1579b0f96a239b3eba5ca363f69db9fbe7ed371df43eaba004ff251fefa6fbcf91f1a4fcc2b82b5c997d97c9cad5ef4e3fe1f933df0b548dc277f8188be6eaed2dc5fe21f083fd89cb6c5a031a09b0487c05d7001380462f7363f053dad66ff3281bee4d307b7612853b76306540be0ad5221de26f288750e71329cfec8484514f66febb1eeb4cd39467a61332045f9b2b8fa490fe54194e27cc854793138cb602259f58bed25bd9b23570ca2d27bef074b78360c8c33fb6fcc3a47cf8d2e33170c2f1aa08394f704b9b9cb44710c6fec9c377ae643b74efccc8b644bfcd5d07fc8f964fabff6a642babe6e22d8fa3c1e9abfbdc3bf433050d5fbb49955fefc82338dd16b68b2d48ac73cbb97747bde9d2234bd7d5948a4487a0233353f1d97c794bc85324aa247085163a0ad8e2018df7bdb0f8bff05ceada072fa856996d7b03b2861c023adbdd9b39e93add9e4b9b9fa066a2fbeaee6ce13c7ef89b5737b83c8b8d9c3ab49e6d40461c435aa4670ca79a3b908c02e6004d3e72d1a29abc7033b3fd7649643b7910175f8cea2022174dc8fef5457a2a77abbd5718d8c506233e9f08da77ab897331d2fe4d924743adcacbc133093204dc6243474f5702b4b12661658480746aa45b1091bf1a447612a8306c6a6eba84d7e15819850ddfc0d738e6a4938b74c2a29119453e6d8f16137b4f355854e907fb40e9447f68d0b103ad065a7b6a2e967d65bac08889f94e3f4c6b168c7066484d03b9e3a4bdb616d5316e2d46c905da8d8db48b4342568c904f955d0b798e811f77a1b7bdb5252905497c9a33bba6ed62180b01e54e189238b2da4d8f5a6dc757487ead67da6ab8d5c9b5bbbc3b7d92ed34795f1f7979962c8fd510afef2d5e7f1021ba89c0a46e0888b337e0b478beeb955cb182f0518072a47c33c5e166a167cbea422899655ae76dc3871d064fc71a3e5babea81aee04a8c1abe3b701442175e30b35e9416c71d52d97c92736d46c17c7356375de6ce510c305833fae6a846a4a599ec828d7ef4ce4af0e3f96ff53ef1bd166d5607a905ece6b36a175afcdd82cb46dcd2c1de0593defd272a8ae5b3f68afd160b24f8616d02b5b21322a66c4a9633e73d702a019c3f1c6eadf72e166127769cc10d6e99a547a5db23cc45f1a1956089b4f78bf32c8e69cafd2861e61451bdd8dadf978bfc174c14001d725aebbdcef26d562b8569f8a6d5b3be68b557ec66cbde88a2222ef5dc7177da4a1cdd70ba6c1212111829cdf66bc35562fa30b8c3db964cbe42490ef4d01e4be288c573b0c98b7583c980bfc4a35bbe3bd169501b44e0633640c20e79a2f75cc9763bd6eb1c1a544ab41968e7752662370aa3f83846c92dd6540c848f9169bd0b635e7598e520ad78fc28b5311c974b2cf109631834f588b9c488b009d731cfda056594e20d9803ef7bd4a828359c11c6ba64d121d6ca2f88f5bacde207eb03385dbb3872752382f5c8b2f8fa50cd8f7f59e6d10fd34dbca4e491d43de82fa8ee3a6252eb04fff8720eb41c5cacab7db5830857e8c4f209ecf51a5fbf3eb4bf3d7f9ece46f74e1945100c9c61078ef2c2346469596616182c90ce19d3b7ea3e10bd0fc2bc281a451194e162eccccf4bf04337c98c09043c32c85e2e014731515b49214ee0b254a40f1d73b87c59237c47e906b4097b10df6d5f2cda75ca3fbd1d32e798a13fc148293305739f633c32dc453c0395e7bb416ed08cfbfde0dfa04295439a0a0086a51e2dfc2e2e3010029b357a25c604df4283015fefe02524b1d46cf7028b351ed407997919b9c164d229599901f41e8b360488bbd377fe6de4ab3e18afa182809c3ea552f3e552598a46fb08a3bd3f4747b9273e2ada3440a60cacb1cd02618ad058213478144ac5e0e2d4182a47ba38aca4eb0fa05db595a3c75a9e6163057adc6c391a73997d68d3a14398d0581a42594fe70dfcc7134928c377d339086a20e0a3a626315466fc6a1db39182dd4ba567dc54af73a7083d07d4243a13dc12b10fa6e319f39951e6b2a0ac8783e0289053c1772c6983c13b1d7ce0d5bd4cbfdf36a63118724ec601ba455b929d4374b12adffef00297997164e5a952e384f1dcfa83d797a750b8184f713c98410b1252916f93398224d45fda1cebee9566f7552c2114a0200e855482759818e7fee34360fcd4a2abfb349ae483863a5021071dedf0ca6419cc8957e019f84d611907809c46b176e2b479743418f34f16f4d80c9654891192e6525cc0334fe9d4f2c68c210f1e252e6d946e9bb75672ac34c04ff7faacbd188ca92ede9d6cbe7594dbe7579cc109fe35248df394a6a619e395483888ba5acbd055a746bcf1ddc463cc82c8816b5713a9b63ccc6843b739fe3181f9e347c4d330aeebbe8cf3b99560210ee38be96adf3d72cb27b2dcd6e645c606549b0971eb21a22c7e15cc383f0a801732a9f53e1f54210cb42d6453f69c16dff48ac63f532585050228d4b1087efb650021166684fa3a747c3f320d89738b6e98dfd60dc7f51cc2c10f44d8f7e43e4a0a3c06b0bb761d7812ba988174807074970089475478ca32d3675fb8701e23cddd4f1416d3a73f5330c1ea2fc6f02dad57f13dc35acde97fbe66d10f998f95bbf90cca0cf153564b19d96d0a6a68c66699ca9664be032bc0ca3bfcc6628b46bf433590d3e98ab811702791352898af934b0c732068a88eced5161f5d4c5708623842217613678f180f1a1bab93c26255f60575f4c4e456c50f8462ff8341e24f5c17d3bbcf25ab2a330e2c0d4e6f15207b9f3126267637058092224d28ec89b7af889f9ded19ef65b426d9c50b868407ebb828b71ae730d8b61e621b07c647c504d5bdd1f2a3ee06ccfc515a7bd122ec404191826bc9b3cb68b169ee1a751109f62c6857a423017162d7d7294b92bd265a8026f9246ec59342e75b26f1165850c433ce5333cd06ba78ec971166cf86c826dc35b541d1710b4fbacc037eed4d59ac32bdf323f6a869c505bc78a5b46215b4a86c9b42f3e646982dc01acab9c515e110ecfcb417d5dec7ad5938600155bc704947a897cff2b5b7729e641d44fdda1c9e2de4a0e4b921604789fede0daa44c49dd230f9296af1ebad445f61009699a95a80057a1ecda6df20baf756172bee380ee55ead2cec5c5a2c7172b526e838e3b2f2abf46e2f62276bc91ec09fef1fa27974aa2b5a4f3c8a05aace61c3fead7ccd22413dbdcad265fb58bf7e97cae4b68f4d536ef9967c9092c4170d76c5fd231332294182c74c27858e47aeb2bfd7094709277c733e888394b247c6541d5e8459584174431f17a10221a5a11972ae6a603d298edde2a03058b9a2bb64f5cb8d141d194cf39388238a57346df47e333ecb8d9fce9732ea93ec8ee0030c1ed988f85917ca3e814b43ca9152761c94426387ae635563b9185808ac1a30921555d08b24c3a4d192de438648dd18d926fc55b923d4c5fd59792656f24daa360657a9b04d14f75bfc5aab2941653d8a6c7cea52ed89c9b61812762be36431776f614daf0c2d3330b054225991d0df9eb5a13703be36a8d2a6b05a533d3308d0bce3044e9ea3c1cede75c844ea83042f107feac3c6a91071a836eb921286be0beeafee640531015fe7b62a879a1a709df6a1fb4b57beeecc68a4801f30c28c322766b61db1cf4911df3866c88dd0cc964f08ee2b8cdeb1a01906dfd235070de9dd2e7c2eea06cdcc10bc52cfa59ea3d56ad2fc498317a4c9776292b4c4794e3b8d8b9e1b41af039e1357b1dbe4c8bea86df862f8c6a0576a18c01a4c4f1e204166f57780029d7c0f8a7e894e3ee8689fcd32c4b5832a559f5982db895a89040272f0b60306d800d37860f2edf3a51e43955cd09b2f8df0f22877b71f950f5ed34d6e62994f6f01d4c8a505d455528dfa4be626ac3203a6e4614fe1d6c8ac96dc4412d111346198481d8c0a60dc89c1a68aa1a02f2d7da0d69c0f1013768707f6d82f5e811514163705c3f0ae3ca116dc722feb089b380af2147ebb660223b3508702b2dd386acf725f541483e503985557c4a69f3914fc1b0a25d5d6202cf55d38d9526bc04cdab06c37196c205f2dc2c53852d10664e1a6c0f7d37178aa573fcbc403d6f73796bce43e33868ffd7bd444b831df53a3de078103838358891d8a087ed73c3d3a6983550a2098aa0d511157cf3e86f478375ec81a547b32b6928de44e91e8d2f3417a68cb20c5bf4c0891cc512ca2e8959ac6d76e94fd4b52319fcc862bd390e137838eaf299927841cd315197bb0119fe4b6062e360ff4e221555f66a40449c49a6f0abca002c7aa0f31b4d015580d0be824673a108721802d6df9b156f1cbb1f4ee705b2ac160d41dc97189acbba70b168dcf759f7b291ee72fa55042b1ed9cdb9a3af5e3e00611aecc237d8029b30fd6092b43f08c7e4e1ff432f11674a115220ebabe9174aa9124d8c805d842b66538980c400e285eb7e371ae811344a0dd12494012146594d3c38f06609882d0985c488ab18555e06991d9a6f77d220dd1cd8bc421817905859cee5c3b9fb617d38d42f04852d2837d42f8c34a9831181c6a951f6bd1e0311899e7e73f9e5ca44339df8970bc6052f74145f5c616a1813510f72e2a517289d1eeae17f47c969a02b114ff3206bace9ed6d55cf07207c4668ba3da18bf5702c63d003c494065f5da6e2224a4633eed4e448d838bdea68c87144e2519926466bb448f4ccd6cbd85ec2cdaf919dca4dc925613b4f4ce55e64ac45523293b533f59528bebf6ed792810445dffbe8d6fa7595ca4509257bb3621d74eb2f4dc2b7a26f7e61cd414a2eeffd1df9d6652e2e26ad574db600739569f4c2a99f4dc7d01755cd9d4089c288bd9e91f38863960b13fbf995a1b7891121f771254ecf6a984460b0b6d0bfa72af7c8b37603541ad988f6bfa0f81972d115cda037da8abc7cc517e30db3697dd5d08318ecf7ddc55fd553e8c20847077442f7ed9b38593f6188283557142748b3f349d10f3fbbbc579f36460b06e73624dd92813ecf889f4d9cf256e30f0827a57310be7cf01e7018ef1cd14dcf0994288c7d29f400fb83e6c1955f7d54e52c837d47cd1808cd4184bb43e3526d6afb8cda5f768845c0a2885b3b823140c7b3adbf7d98229a4a3d8a8eb074628ff81407b152c0d208475b2ac750cc2814f4d05e1be906437709643909145a25a82003b8b9266eb4e8022d91ae538a3feafee18989b63ca8da1120765b7a61ce21cfc76c2bbe8901603708ccfb18a94f603afdd7cc995388281ff50993f8105b60b213653d44182347b6e421221f74062c35d4aab6130b86168ad47bbf29905a6f21584e604015b6e4088072ef786ea464552b4a74ea5e2c91fa9c12690e739c53739f6f10ddf0e35f0bf2fb6d219ba7b12c84cd165762fb9158d749527c672da150f40268423078eed02f818402b689f30d18642a9d6ed4d4be77f09b5237124c1029fb3065ae15a5ce44aaf3d300511a49a7603d76f283ffd5cde8697ebb1f42e6b3086eaa176a6b5a31859f89f1e43ac27f84fe01af895c129ffafd496581140a49b3c9a7cd37f829d7b03bfe4e84d88692a6b7187c88f6cdd81656963c1a4378f94951297d168dc81a1d74b6a54c8c29ae6c8c20dd380cd76af7657da2626824bcbeaad9a55c8aa2cbf864e18d7e69fb455f9b1f482a3828b0620f87eb9dff42979208bb93916a2e09b3e9e50d0498e40f37d522a1842ad9b0b2476c5aae64b929e0bd2f0403e9d944eb9cb1b50cc17ab643c1430d30aa94c8d96e481b03ec0a51d27079102c089992a02696df7a6e4f39a38eb5fe71a01c966ca9fd319ac103ecff038ad4ee905a3090ba4a07aa71dc3a36d3de05587ba84af8c474b9f4df8215fe3ca7f64eed95bce2059eb767e5f2a7e319bdacbae1012a74ae4128c0daaa7ef37840816b452ff581b9ba019819e1bd3adc25e2fbff9290bdf7de724b29539229d108c7083f09ffa34798c84464a249ebd13e593542a4887cc90ab0d86bcf4404998bbdf6da6584e3be47fb70efde23f5370f6056ea6604ff1ffe937a1a2f1a793d90e8a0a8a0814a1a444499792a3e2ccdfb483dcd77844aa7c0d4077e0398c1a6befe865c87ea0054802a64b8028815c020424bd1d10d58bc94012649142599c77df5b68f21f743b69b9d20db0b57370cc3484290dbbfb517ee5c2ecaf6b2d7e44baf8414ae9679f229878393f21b425b48945c67d96c0110d9534f7bec69ba303aba3cecb52f2c22bfbdedc6ef464787dc60e4fe467ed1955a58e40ed92ef6d10bbb9b693afae3f84687fc7ef97d357f252f1a1d69d06ffae5edc7fa690f16887f10ff1e3f3c1f3d7e80e14fc488fff438c7b79e3142e31cbe78b095fecd9c3c45939191910a2cbe373e095492badc18a7a4aaf838f19fc98d4c4234eddc4829a5d6c6c83c21373333ab5a277e8c31aa1a8cf189e2af809a7e9901989ac2314626ddeeb24a183bb91c1ddc257e7a5db672386cddb69927d65fc3b22b1c0e262e4b09c65ec996b24c6699771633f9b13b7729a937f51f6a6ff931f384a8a63b899053ce5495cbfd190bd6bfef86bdd06ace5df5b48f048a1d857a629fd12925dbd33a316bd9b0e7c69b10fa82c03cfc7de36daee8aa6a8854c407e3dbf8aab88d805fd352c4c657c5e74ac6fddb6166ee89537ea1bbfba5b2acd3d33edefe61ff4e833dab06e3f7f44e833dfdf185f8d7b30a776eefac7ae2f3d0c11de3dca1b9590bad73cc6839beaa04da7cef6eef6e4e87f82a28ba91b048b840a1a1872a963082052f9ed8c24403521551beb493efeeee18638c6162c7cb1c142ff7f7fda21e5cb0a2060e5f24ada1820c9a9b2f262002ae8e8daf8a01f7650e629ff8cc7ca78a6b6c793b8d1736ccb9eeed5fb5f1551d680ae2488715b48044464c038caf8acf3503523298f353be8a7de66b52cae9d9f994e77c21b2ce489568dc63776e8ccd3bdfcc086cffecb0e2ce1d6acb158ab85915d7d884555d87a99277d0b908b32a8b5de7ddb3ae1391b49bf839cdfcfce0ea0429a3472e9ec5cececebc41fb47d30fdab49b8891272246e6d0bfb6b392d32736ebcffeebe7bcbe3f5eff393fd4ee3bcce3afd97cb1d90d771840e4e949f53d2ebd8100f6da0781faec3af3676eb873773868be3f0fff94f0b41389308ffff6c4a240c547f6f551d01e7b14321c2c0a541a85fad9cbbf51f1c5f9a23b93ecabfc8918f962fd47a89fddcccf01d86bef037bedfbf3513fbbbcbf874f9f3e7772f4b8fd853d6ed31e77c86a7a526a8f079f8ce211112348b3b91dae07bd4d76ff177bdd70bbed6997e7d90098d8a75f78d139db05ecafc54eafa460fffe836db5566b57f4e55f177dfaf2fd4aea9b6f76631efae176e7a5dc8e9a2bbb9bdb2184e6886bcc9b1c7ce7f785f44f884557be7b52b0ad75b8bd6e0d761943fd44fd2ba0a6eb8b28a3ec52afd02ec7c1c1e978110ddd581aba801a742998759c46a9b29f20eb78335c5930366a72c3e1a07eff0ef8670298eddeb91dac45767bd5bf421ddd1075742f20d50bc24b744b2262044810777720cce34f2cf6598b8b7f5df487acb0b7fe837d43f55affa92c690448904c06ad531bbb7be49ac4cd8b4c1aec8814b7f819697029668955e21529344fc47f68b6d50dedede13afdb6e929beffd8bceb08e17efbf8e14ac886c0ede07e1bb2ba1c181bef9600cb4c4364b9fe33af4994cd972a5e2e33554172c3588569882e3756f11f0ebe3f36d99a88c4b469336d2e04f99c7783faed6f76a4f80b91a71b07d07ccd8f40f335df08dddb0c59dd90034577e6fd69bcce7bd789dfc3db675e9bf9eb7b5c9979a819ef86fbed67fef26eb8ec539ead799a8740cdc7ae833dcd078194b7fd009858aa7d52687ec88ae68b55387bbbbffbadca36aa08ad5f26f9fe87c8eaffabb6171b2d2c07a1ae7c7fd0316fa9497aab9b79d2c8888579cda21e852189c51c8e1e2a335a7f89180112447ad1da5a1f0dae68c0b02173f1f1e33341de21ab4be9ceb4d6da7cb1f286d67210ea165dfa4d828f5a577ef5b842fac3d5cd3ef310fa8b2f7fc8877a75a9aa935eb536d8bffe44fe2b7f207faab4a5e0c61761d3c276047ab08625206c36f19fa46f004bec3c6210b4ae33771aaccf49d9c0b021081ab9f2a7d31528c0d0254adcf99ea47faea52b1c149dacb4a674695a72264f406140f1045db2c4394de99265e9e9295cdda555cf92ff704cb82759b8284ddc942e565a4c382d3d7148e1ea2ead7abcdd818678fca80063e126f6329d588c4bb07d96aa1a34744a9a419924a6c9458319a60d33db7fea7bcc3aaabcc241fdd7cf9f324825661622b8f3db4bff5c473de79cb3c7dc7989b913e95a423d21c39ddc922c3824e6994fbd2b65949aa09698677e35e3a23d5f4c9331495b19252455eee492dc399b6e98212ddd49bfad15859d619e4873e34f0ddcfef91d9d1d1516851bb8f6ca1b29ed13d8a3d455ba3b9b7e4b9529b46091b1bb3b85748571266c713888dd639494be7f3d423df49d4e4a29fdc2e909793ddd406efc1e20a11e21a12e43cdc547777bf7dc25b6f0efd9f4fdb5cfe9df208acfdf71c823e2e72f6c6ee62fbc3ca2a11b0db6ff8da166bfdc3f21b03bc810a418a37b777bb3b3b3bb777b777b37d9c8008d73e25ca272f9b380211e4088b912c791986eb85d4f53b0b856a46cd9f2630731e6ca7fa629536e9354b9671bbc64b7831bfcbefd59ffd9b1fe1359f255d82567156df3e77ab0bd85bd0108c87f72564240434042434043404343404240424043cc4043dc03fe0ed0ce90d0ce8d1d0602020202a396d8f1d9022c637d1eaa2f3f66666666668e6c79604173368bf0197d90c0e507093e48e042824aa55291e0e307971f3e48f041428f1b424446b2708948da47c624478a70e9ae0b452312c6fc884640c68c29e2838b4ac5854b479b8eb182e58228da30b69fb91cb5d6ea54e88690c418935262f59a4008010dd55c66aa5266aef13b40437288e85aba6e10d1212222a2a11b4b378688a61c22126a051982b4d4dde0e5d633cba1a5252620b45cc94bd711b2ae2ea11bf39a938847bdc183078d92e8060fe93778cc6f0808cb0d1e5f887a7cf9520120207923fbc80639ca792713104c8ce5898eb13cc416d823140328ebc175fd25a763b4661a97ebd3b0d8f81abde10d1561638a63a36813713bb810e8671beca25e18a7a3af90c7e19e9c4e25d30da219022b2f4f5e14b5a4b5b7d3ab66da86da52290e87dd543bcc926eb607fc71a7c42a96d56c126d391bf7ef77667b9028daf01f9a432bb0339a697fb5d7382fde0bbb15d3b48d63a3b8ecd3be2dc370540df6bbcf0461e9d36ca8e7df8936fcf9f2db8ef973c09487f286b4286c7c0d9b0c562cf440e64506eb57105cfa91be86716c14f67125923728f5a9d16cf485da87d63cdd967ce88647345bb05bcd26d43ef4f26b12c5cc23256fcd11a1b22b25e6425b217109e8721499548ef1061cae8d2f545231bfceb7364c71e7b3185325a5f51c67cb0d73eedf70a7dee0af2ac1f51ad0b8de648aeb8fe5faea87596d956ed115a91429e6cb5f3f0bd0c0840f388879e2c14a95168cd1c39195336050b484530bba18634913564851f4448c2790c0800b1334a145259b5c5903105a54f0850d41202d5c6f261aa010e0c9b1c8c8c484891b3f3e18dfaa74d0e64b6ec714d2718ddb947e0ebef41b00135b64defefa63ffe42bff068d73c2cee8d6c9dccc87bf3199bbc586a49615170d92485d1d58050613863483956022f807950dbc84ab08fca74a32de443af90f45f2a3277706091b26b54fbcf5270e6c8327943b5533bb9e8392b44e95485aa7b2c03cf5c301d8902af007f56794362d1b6ff8cf6074aacce2da9ed8eb3b42857e47da891e9678615d9fe527604862f56bda26376d2608ee865fbd34c82c1befc6077d9bb7f98e80e08445bf9f1f7aeb56faf4c63ff4a65b7f7ea177b9f5afef481401194eacd4a062a1021615ec8b581a175947580a1c56b003eb480a9a161695d4a740bd18b1a86020386185aa896566699f1ad6a90fe54369c6ad328c6bebcf28f632616522a9498098cc272c70f7a11cc1ad9204b786d2c9ad6fbfb049f2879a53c286d228ec2e46dd67bfa86256e470f460d7b9c93ef42c5a183bbf7e8d1207cd26ed53f395e6ebcb2cf8471a4925637a32d13f3f7c3e691517bbe5569e58a6953aa354596622b9f5b96712cf9d98a7be34f21f07e36494dc5a3ffb1cd02cfa7916d7a93fd4d3435dac0636942d4c8c0d3d0b15fc03c43af56b7d0b835bb3b8f503e0545f8c11ae974eae838961c3766acdcda665fb86dfafcd046143d91241fb507edbcfbcf64ac8515f87f6c99f39c2c6975f7db07ec6e5a0f9649276356d9bf1b2cb1cb797fe895dba4b27f94f740afb4badd6aadea993a2539d41d2a0379b3458e713d9ea52abb52ad53f08aeead315ec8ce5c286dcc5c88458df0807655fff47fd5a2dbb53bd298f6f3b614fb7d616f3d46f27ff9146b5daaaa53e79f449a306eb67180aac3c6a1fbef5a59144a2611c0ead6ad816e678b0a104aa2fbfb40ff7f5a59868a3bfd6cf9ef32412a31ca8ab7d72c608ebf5652b7eb5b625027fb9587ffd847402a0a2c5185dfadbb46c7c7eecb506c45b9bd60fe3cf9f2fa568d5d6a0d970b1915be6405d39bbbbbbdb9953365c6c7cf6cadddd265c19a6664b61913a0737be6bc9c96162522549b7dd2c5a5b774c94aeabb3dbd6e13031ba687c39e00f52dc7095236589a681d52e332519a25560b1cb4c497c7062b9cb4c496c58c1cecb4c4998844002324b1b5c668a21862b2f339120881baa2ecb17685ae82f99f3c14b2cf935b6c5767c6c8bad0df24dfca21b6f4288b7324f941faf1479a3833f3e7fd8162b3d13e41dc2adfb647694ad828defd23b265dc65060e3fb106e5dfe6d0c4fea83bb5f159b948231c19059b06cce2fbcc85c932e6516c961534c6df3628b59a894fedc9cf20b2f50110b01b7a2949bfc492ff74aafeb0bfa4591cb5ab189a3aad909ac7ba681e1b4500e87fb07ee1ba55305305cc6c38c183362d830368cd6736ed1c67c6ddb6682b0f239dae0ea9632d04a4ec9451bf3f23f7581da521b5f13e2bd13c8e4302aac7c39916eca2f7f672d173f204c367ec6ada758d566368e36e2dda25ed777a37de2871ce6867cb21b96aad150ac6233e840962531a2c90dbacc548497aba538e787caa29492ad603f586b88b06087438056fe175fa04bbf6d6e659eb09b5fbbeeb79d0add4209c6dc947cce6195f53afb5d3386192152047b2d664f91c9d0f6a89ff9c9f5e32f54a17869c6d69ab29653a9501b7f61f60d5909917f69be3dea21b04180fbc94356f752f5b5d4e3c710d196f5758228a4c51e691f23eec7e6e313f1e851a47d32ed4775f9dca1fd8eec518ffa8464cf1785faaab769b2416ed0768ffa42d41776b7db81fad4d37842509f7a0d554393f26a68be9b1d343ff339688608dd9a2f44fd09f1d27cfd99ed69bced516e514237a2521f5f4311b50fca07f5a1f8a222d743f38c14e141e40db54e14ba317e218b59ddc85f680ff66f28143f36891f8de251d757193e8e14f93852c431a564a5582529a9d689dfcef37b621981971b4625294aedc3b7882d979fb8cc54c4d1d55893fca594ec95bda67d94c24159900f1ca47d387106e619c2a21efb5000d56e57eb3f1bd6e1678c879dfbb22fb402b8d5e3316efccb0b2b654ffef4e498f844e21b890f2488642232d160a411c2f233c7d9d2975dd9c26657fc078bf3a87de2cdbabbf0b51dcca37b5171c3970b5ea6e28617ae2667528e0e2ed6c43cf13325e718c05a5c5769927b2ca6d1bd70bc971cde8479e21bcde7c0fcfa55e92ccc139f874ca4ebcf52b0c7beec8a6757ea0d4065c5b7d99506e3d760ff863329feac127f5e893f93a6526ae90a428bdedc7d9da04a775fcccc1cd6b0c815c23f64bbf5eb73fce0fa1b4abf7f980a24b0678847e5f24058b234f555378be5c65709717463c5b991bfc8efcf43b63b25d0831798264f9844a37844c408d0508f2051f0975f1d61a2207f7eccfa8eafb10502eaeeee06a238d8b7aaee7ee9b9679927b62c43e31cf9ddc42f6235f19ff9ddc4af0712f9f48b58f38178445ca7fb8f503972848a8ffaf37d5c8f7d4740d591ef486d3db3aeebcb22bf1bff7ae3df0d04e65fef437efd8e50f1318fcc2f62318b7e37f1236ab07bb84e531d2c917e23fd40fa83b440e31c259b61a1e2b104083b086d6e7fc741317accecdcfbf35b7e153f5767793b52157ec50fc4fffca06b0149338832c5183418fdc00af3041513985145114b4cb28728f76fb4cfbcf28b123fa8b0c48a1862c022001a564c414392962356604929a5ecc4642d5cf7de42c62867addf5369a59c720594667f5d9256cdf28f75fa7107086e96fd7cab527de1f5d887f5661f431a3911b21d12c879a91281db01824b85d0cf7eb58a2ea40e9acb0b03bfb3ae3dbbfe7cac7eb2c1298f5c9eeaebec6a8ac62083f3aa58a66d1c2af4713d07fc71fd7348b88ef340364f855381ebdd3422e5f77151c2a06925b0d16eee2d9d3bb60aba60bce5325f92660b10100b556090a185841759c4d0001a60681dd9c0a40c2554f2805d28ace103134344d9010d18b0422b77605262c114443091418415359ab610e0329392104a49fd953f6eb0ce2bbfc168bf984131470ff3c44bfa5429e727e53564bb91b7a7971382524a29717aceae1fce3985ccf7404b777dfaedc96795f5408bad0dda505e69e345f7d150c9f8fd6d9f54dd505e747eee461c6623e3c79850445e2946372344d6fcc89adfd1a6c37fe31fef8d8ed4f54f5dffc2a22be503d3bd4caaf9e94769a7acdfbc312497962e7d2d76b1222ab51a080e8a9fcf4022d19748520925892491686aa5a916c72ebe955cc98dfc87df3ed3be504abf9338e87a9a7afaad03fb481130489fa63e6fbd8d64505fb8b343abf68536fba8a5d847e511f3d0cfa4c426ffb9190105fba9cfe23fdca5e5f4c44129efc8cca3b0426a048bc2ccdb67d691d4cfa43e2a37b48a2f7916afe25728a594524a29a594524a29a594524a29a5e0aa33bafc5dc4a29ff28a58f288835afec32cfafe449fa9b7e412d65b1a18f66118866118a6699a8604182a182e0d4b122e6831509b45a6e48afec902149204bbd896545762034a86d6dcf3ee5b902986324870fb57b5ff81fc8be14a7b8dfd271c0274b36ffb64ab7e57dc8b7ef33b8096283368a1444c0e4858d2bf1054e202cd6da05b59356434ed0a8b699f83d32047eb4fe46bad2b5beee44f4e461ac923377223ff993e0e0306e5cbf97915d7913f3ffc50b5b3734337aab55ed652959c3330b0dd25dae8cfabb4151ce49f17c13cd2bb685958ff7e3264daa88f1aa99b7452962c4d5d5a4e4fb1495254aa7265899d821031c24b471109086888a8c70ff7e00b5badea1d5c55f19f2296fc6e6af97dc57f244b2e718e8c7deda0714e641bf19d021ce45f7f11097fd0df4c850b584c99733adffafa1c88ff6c9fbdb26643d8d8ffb56c4720fe1391b04e7f1227264f80f80fb39c98cc65214ee90f230bb7bfa34194abe713cd84bf44e61bb93efb11ea631f0ad8d7cf6af628d4bfbe1b66797305f460e47a5c0f068b78f9ab17c1346bd2a79f86c51d6a237964e3847aaff72d7e5f7e1b6dc46f287e409f3e0d07f5c7621ebaad362d035a4a79465c870eb90e7daed6cd5a4da5cafe3f06eb47c475b8d0693b5f7e590f76be5435e8006655d78949b607fd1ff487e813d1d722b786edaf45dd92068fd598a587185cbffe35880eb458f1c58c2296ac9084758802c5853244085cb0b4c49415b4066b96589c9ddbbf03e2bccaa969680a143562d06282020a27f1e082140d581c41450d4994b2d0c09d87dff85f49afa7c5b0394d441826a0814b196994f1a207283c34d19608c02811c49213325441e305b852a2078b179ca891c61258b48852f0d004f560055f01284a5f9c743922045b72d8c10c1a1b5a3061c1941f9e383981fd24564a78d892d4021cba9002a9e2b04315a6628c0f2f84d1039924b8b055d8509593a3c5863939e03f51e4c405165820468c16944088273bd8c071174c568c9a3c9961c508b65815cee70c11dde0619b0100564023f6b542991a2551011d0d30451724322e70210410426051e6871850a1820316481a142c38a9d2c9ea71543527ae80c0028414b7bfaa1e082a40d070435513b6f4d8045608a38a0a56acc14402313ae4f0b5627e496c62d817d60e6cfa85557efe5dff4496ff50851730a0c1861ba674b9e28631334e48c1618b0b2c488115329490b7862f809146961dcae022065668af7313491b84e88a966c41bae28b3233c8e088e572eb6dbe60c3edfe48560f35961c985c9ecb4c3840b93978b9e1e7c0e5f6e7ec304171bae1676126282db07fa7b5319e96ec03e44f22ff91df0dfd964114505c1013c60fac59e5019e58cc92b187eb349215d08349479799a090b9e133e160749f833c88e36dce01cca23f59882c2afe3a3ea2d1c7b14bb76ca2c9d7640b3df1fa39f8f2d80b815c7e72ab777d7c3aeffc846e881fa090c53d194da0b9c45267672f04fb7eecfbb38fd5c8ce75cc931b7bf28bf8a59f84227e20df3ffeea2daa317e691d3b1174c93c22b0e16a004b6cb326fd57b55a2be50db5cb1e98d39799c75b65849e6848777edc3e5a2d7a1a121d6c4606c99d19991e499fdc707ae92f77b377dbb6b79ed72da11b849edce9a57d3626d7cb9dafcd1b0dceed1b6a705ad4f314b23b770ad1feba849e5c1cc771dcf77fe0cbd5382ceb2bd8277443f56483943524ea448b318ab9f236450e87e665af7d772473b06187251ab9d67acfbeb0bfdc4c9565afba59f6298fb9bff4cf8d6ebd878936e2cdc4dce091fda0de7f52efffaed39ff298756c4bc97521d84f1793f9a685da7f4541e956afc8bcd7e761e207455405580d2c3603db2070b13397999c4411c930828be541c949132748376c512d0d32c0c09d7194a28105255b93ebf01309d0709a410c696479c108cc484a0119a4298ecec86285046a344199a1cc13d30c30c8604697326a1875b1048d242f4aca246d413ae3a9da5aad8a8356c59a8312b8096cea32130c5b5c066b2f33c1c0840c81ad979960b0e2636c77990986240e5a5a534a2995524aa12b7d4ea02929ed9194522965271b8b73b7136d7797b7dd638c919f70ef7ead2a557709b73f1a67b66861bc373a4c40dd035cfe62945276f7b709f416e0c6cf849b2e32afecee19bda2eb234aafaf8ef88e43af0945e6bdf98bdd8e5b6d34a494d23f6acef6fa90fe74fadce320d77ac5c6bf24d0aa417ea1cb44bd8d81736527a2c0f26459299decef57a8417eee0c8eb1bd9d5e35d338d4c6e1982929a59c9b76b9bc30f9492398a65d2f7fbbe4d472b8ff8cb31c26e955336d73416340fe669986551c95ea4a493923e955336d1bd2a4b0f16e18f652c3fed2b09720b853c7cc30ac7e7c4d3072c6e5b544b3d56c35cd5ddfd0355466098c9cc2514e7a65dcf555b351e104c003a75995393b437ce3fa00a0c251712ad506361ce008405e1af7d3315a33a2ad725f58ed379d589b0d6866ba9aceda5426b0746ab28c23dd766973a5f4ad4aa3e6d23fedc5cb972f62c494b9a1fde6d7ad28ec9c5b37b5cf0697db91c6a83e407ef9fb6c1f963d0dc69752b68fbf531fcbb44cfb84642fbf155644debe7cfc9313c8e7c584cd715adf93f4af12f8e57782bcf513427fd29fdcf585567eab9c06e3d722842cc04d52ae84c08932b44063063192a8610b1041acf102193819051952d2431233aeb4c6a081041a2e78a28a154028517182b1d8228c245da0408c195a70c48dd2d2184cb0d083152c600086234ee025063057d0c0082b5c850a9ee0420722c620f32488130ab040c70003171434b460028a1aa06849236490428a921155ac11821660c0a568229ec0861a8451822c4f489c7ec040960b042173b4c4cb0b4384a182225ed80286056a9031c395313010ab0862060b5dc85082c5862f558860400e553051e38b2b2e604a800c56544006172f38638a2a591669843103259ec8218c0b3c51c59513242911c30d3cbc308410122f41f8608608bcec80010eb3c59332559648638b2c428080050946a004531369f880018f825b4182a868218a0c8a3063853154526812c58c155471e58a162ed00414247620820a15d280c19422293f388199b2441624a80471a18b2621ae4899618b3032880888c1d4841148c860890c622ed0557f0df812fc8c811a5f3585146e74e373fcca145f1545bc1c04272c3fc25ba610c10aac14ae189460d506217ec502c61141b052a05270615d5abc70410a560a570a94b0ae8f1b842296d65badec37235c8fd59b11eaf5d857a54b6c8b9d1f4e83118450e59757bf230c45134f2860a5e05e34d820f46328b01e658cd816ebfe6d3020f59532d30aadda997a31316cf5662d010f67dcb0c50939e5125f28d5eb8af22589796d9877e3a33ef658fd8a589818fed1c3415fb361904b27f6fe452c2d7a9827bd8a79d8877d11ab8835e4553eb75c0c3bfda32755d7232b7a7ca5576ff52f3e6daea57d5a8c57b7bb9493d2ebaab57561582bcb324dbbb6ede238140acc954ac54fcd0461e35b0e87eac6994803c6468de39c734e7a451a238d31ce18638c31721087da3d0d644b57487f75bb22f782c639e16cbad4b52400501ad9fdf9f2e6d5e2b5925e651e27fed95887fef6844326e752ded95a3c6dfff893a45794660a2e9d9b3f3d61de66d43fcc2adae4d2f7329776f792c38e5a226172e9674ea675687fad8d27773df9d5df7783bdfcf63ea2dbe74f0dd2975ec85dfa28235bdf3ff4272a9f4a025c6a74e9871d5cfa8536971e451dfa2a95b5f5d2cd67fc57d4fba3686304dc4ab8531cd43fbaf453dec53af533cf19ac1fd44779f539affee535e71e0ebfe655bdab5ed7e5d7359baee6a268176639a8aff4aed49942573e563bbed2a4e370d8cdfecc91be25c51cc7d5c8d875d9c79aefbaaeeb6a6abe8b59ace9baafa9f9aee63b9aafa1f91a9a0dba8ec6bb54c7755d57d3d5d474355dd7755dd7d1745ff317a7a3a6a6e66b6aba9aaee6b3afc998439bd97c57f334345f53f334344f4363e3cda713e2a5f9783428bfc6e3db755d97755d9775351dd775af655dd7755df7d6d6d4785bd73ff343bdc14b6fe699ebb61a9a1a8da3d9c07628145793d5d43ccd06d486d6bf50a80d3e6984d9d47c42baaf799a2fec9e4684ee6b685e8bccd57ce1763d85e2362dc3ea45e727b98b1d93249c92c072ad5cbe7ce94f8fb1051b9b502af84fc422a42b17c275a3dc5047b66efda37d83777ed14b83d16d3ff584d0ecaff7c7a1ef391c44000ec266a53fa98c27c4dbb1e98c3c5148a45197d1f89d5e7c31957f51ead4bf332c07d5efe7596fcbaf97cb8f0c1b9d7a4e9414a46883c95cbe4e1ee6272eb9748a1ff4fbf387a3b68d596eb7ca29da88ad499fe2b6bbbb2fb14e47c13f326ab9fdfc31f360b1615cc2e26e3d2e87a5f29bd24627891ff895a37be9b8dee90b6bea4345a78825892701e3ba13ebf8d7d90587b106d75ffbe212f3f8a7b04c6e54587433cf84882df9172f3b52577e4b32b23b2a4c0109c341e39cf0626db6ae7f124caefdae7bdbbd7d9befbe68742bd379ceb51e3d2ad3a003e0da996ba3056ff7d38b08f69b5fbee9d4a00b91491af4a306fd3f32d6fe57860dbff36412795486f5f6890a615efbf9873961a9d137c934e80cb0dffdc5e9e8befbcef248c3da0fa5d124c3419d57bff3e265fee9c13afe35ac331f5a9a77c26ef0f63906746ff394d361f3dd479bb7f9721af4f9c4a3c1f6f1b75ebc636ef75d833827b05d8e993296afb5df14d3a0dbb71e6d817990cca061572b6b64add16bdad61c0ebbaaf1c2be353fc5cca7f6f1ef3ce61a8f8367cefe504fa7fe6156f6d2c8e6fd3525cba404925ba46ff721454291709972fd6d3c0e8c9c599bf68560f71955efbe1edddb7c4891502432cba5dffab9360e5ad7065f58fd5146b6fb84d8efdee60beddb7ce7e55afb8543e2985b5f8b4ed7be4d21c9b529205d5b4b48e1766fbdd09baef6dd0f752d21deee359c069f0130736d885d6b3ff20fb3ec470e87654a22cae56b3f7222d8ef5eb35e08f132f3d8741ef7361eaaf36a83a92fdc6eeaed338783431c8c925ef5c248a5d1f59f5ed85124d79fc81fa77df87ab2895dd31312464db48e684a751da6c476a36bf93d42daab54f2b53a37ef1bcc3c99e3715d83f1a36cb0c98de09d5771e5000861fff677fcea162bad992f2cc7cb4c56906e6839e77ad94cb74dda30a148bd2ce5f309f57a45a209f16fb84119250e36b400e0a01b1dfdd89bf094fbf8f47138887bfa5dfb08c9be9f3e7d55071c84fa1252407925c4db9ebd9a2700d4ed47a1fe6ade023cb8fd1e7870b55e5ac3b7cd8b4657f3a2130ab8fd0ab8fd98a780abf1f54d24346e1cee3969959ebf96699bbbe538a7ee2e3d2638acf454339bf4682875eaee359cc672ba7497ee2ebfaf74775719205b9a3153b231b6ecba5d3113848d717ea1bcee3ae89d5f659ed933dde8fa4a4e4aaf39a9a4556e495d6755adabebacaa55eba68483a37a27d5b561acc6bdd5c8dee5fad74c65c3d86ddb9eae8fe12cd7d17061adea519b0d636b2a2705e6583b3343b3855ee5ce795d4a77ee14c2da5cd0a50300150ea155be83294c462891e139b371a7f1c71a6c686ff7955b16a3273ef1fa807373e2132dd2605397a730238a1b9f519ed3606d70d5603f5083fdfc3b5fce7cbaf24b0261ce7521d3935284b90304d7db3fbb5a0d55b1515ed1d87f986daf640ca4a3a8e42d97743dc914d908001000d314000020100c8704228150301e910375fa14800c8098486a58970ba45114e4288490310418000000003002303234c30000811011fc4640313a6889f5cecabe4b06acc7b4509cce547c962cea6be96ba6bd172cdbf9f25cb77174c1695501404ac44eef835b2a2b9aa379b3672ebb6eba828254de6348efe5ab27622b83720bed98be3634ccb965f7a46ee53ae3bdf75c6a51c4fbc9a4247456b6f1f2b3e0e9e9859e089eb3f8584b55dd05a76d1b087fc1cb4efeaa896e80b9b13fe2fcb23bd0dabf6b2f1eadfd00c1f5d03ea1d2d0e75a1bae8921f60dadeff8b0d70113512568c54ac0d0aa132600dc2b8787952c409138e0d685507f7ed484c6bd4d70c7c418bc5fab3db8b8bd47d06ae03a6ba0d6b9e455b584d366206160001449d8552b7c85ed365c875bd9255fe2c05ba604bb3d963e2b57ba6b8ca017fa011b8fac0681c68e58e079098c6ad8062597c2878c8f4c2f599d8b17c32421809baa4bbfac0a0ff4f2cb015855ca8c880b40965c0429e25e1ef4b503c6e63a7bd146db0deb3ba14f6cb24fb5d91943fbeabc33e3945cba5ce06c227c44484eb062a1a2cde33c8512c1f1366e540fff8f4ad4e733457d13a8a93968fb14c7e73633d0745859853f832e0ee8102f6a96e55b3741f26cffa2bc64d1ab26d576ef09b5aabdd052a5ccb47c143ede1e69bdb072c2091320290fb687454fa776accbe9ede9ede52729ca552562b93d73e469836713e5a7684e072f1ae3f71bc72387ffbd69a3089edcd3ea78fe438d552c38afdf74c5a0d53742802ca146804b9a39563b8a09add5841e288b90bad5b5da1084190a0b56e8a0b6727259f9e18cd3986e236d5d5635178eb4586dddaabb6dd13a73cf5d5353a5cd05e49c6755da3588ad74b5512ac00475b52ce165062da2c2931a2f5582419aec0cdadcb850f0b9a341cb245bd354eb309f4b01a6cf7d879dc246447a52b368152626714e4086c3bfe9b0e35ca438f8bd6964357730c9f3b4b97ac163b9424fab4b492ee937b26a4235ae3ceb727ebac350f23b455b5abaa456aedbd20e4748d50209b4698fa451cc2c81f6a29364abeb5cfcdbca2099cb0c27ff817586e408aa8e67866a4b278db7226e9a8cddf0f56d3714d3a4dd45e8f66d9cb03870d625808244ace29f8db8b1407ae4d0e6d6ce3035cef4be7f296ecf9f17304e033a9871e49c77cf5b39583ecfac084e4126de4303a087420d7d688b2253d064423eb4aa5099f35a8950dce3248d016f2ad3a2ebff105a1d8b2042ef4092ebd9d0f276a988bc5ecf96d1f24ee8584f4b2af59ee55af8f48a6121f07d48b2df46d00ae19e4585a0fb291289b576e1e97cc90b7492e5f30b2d583786345eb118c9625514c1bcaa6bc199cc33100350625595e1eba8d70b1feb65b18acc761752c6fb7dd05d25f5fa13ffca2b13aca3267a44e89097cb0160c2da02ca1d7d9d47cf7a02a46b2b2b27e9fbaea4776d67dde159f7efb1dbdba3c45869b7f50ac155c34d2b4b1dcc6e48a28633233622f1c33a527c2ccea1fd2f46c4d08f2e66c71d71b11c2dd4e041ba8233797df73ec362394a17568f0e34f42b53ccae70ee0cf19f231f3d098cc2ca689158c849c6d04b569f4230be64968c2a3fe77a2eead5c769f4695345c2393ef514ac833b57735fe52776ad7f849707d47550d5db32b9992fec3e615182c386ee0885e96b89216a47ce2106c50b82578bca298f5904019179ea88632b182ccade249d0277dd88f6bc8ea8168a5f4bda1bd4602458882919b850d52c6e6a4e3add7e280c7089822cf94cfd027fb77f4634ceb55e804de97e32b844601fd4859cc812138b892a6e3acb2fd3857c453b290bee7e6b617d3d27f7b01117231681d90bce29d85acc8b4868d6b3464cf109d680b15a8c09294efb053a4bfd4541b774aeb6a0654f6370257a31057fd8953fcdf5f1e7922b01411ce3caa936b8bbbed7715bdfb442594ee93f928429ed6aee7a3d5c278c8959f18583e7db653e104e1d4f2cbe1cc3f214e9c90c6673f5a3c2d661d4540c19e4019a3c8f9857b12827204c113fc797acc9997666bf3bc9147b1a8fd76da3776d768ed7b95eb3c29309d836ba5a3d86cb8f720db692e8cb308bbdb4ec66b46a1b9db70b979e911fcf97fcea203ef9d1bf92253ed06609e77b9754259101db9f6da33b7360f0e466d3d1036b83594ed928acf05ce637e58f385c47d84814bcf3ea81f834adc4e6cb9b683efeb71113de083107c6dd4cb0913b1bc5b8fd502aadd277b1f2c3c790c50ea354b7a05ba517b08cd3169cd320d219f2d65182a2f7b5ee01c48463fa19367035b71981a66fbfb1bd76ae3254f20476cac7c2ae98bb47fe88aaed232a2131297e46551f7d30e3c241963f9471eb72509f43c00dbd40813124ed03fe6a5240d6c6421177034d7b01bf3dbb4e83db66df010802fc7a725e9758cb077f1ff9cbce67f89e8fd3d3cfa2cb1220a023b95326bd056ffb01351ed11af8a21fecd0e358902d758d1445ff9e39ccc105dfaab73bd2f8a6e45d3ea346cef46ed7bbc791cc495059e325c265541d50e1a1fd89e650e99d684df0d8319459b8ca3639c5b059f541fb48cc3f2cd38b8afe1dbc8f7c6e4eb8466e1f0ea2326d56eb1812912f0164d805bbb2dc7fe3741a2b09479decfa1c95697b87cdfd69ac43ca8746ebafcb73217ea973dac7beaaeb4266e5770b840270e13e17d9ef500f6e5e9855925ebead5cd66e79e81fc820c7f9ee80baa57d6d69ad81d4160b48bade23dbcbb7703a55c8475124f2efbb38ef1858024fd175df2a2c17672197975f3e0fdac53404b17d453438241405894e6a838a3e90381f3cc36cc72ee7e3724139dea3a20339b485fdccaeae4f76f7fb611b2afe9569a065b821b9fe1d6bcd3deeb27a56d2dcbfb14904f3c0b548ab919f1d759b00cf029ab6e95769142595b943372f19af361c68771be16fc9ef924ad3010e93e18372d0202ef9e93c3ccaffefe7889a8a4ab5cbf4a5bce7fd68d3de8f736111155b2fafac5f4601b659c0faf7376b9cd8fd7ebeed445858b00e27d7b4a14dce1c92b30408264ef785aab6ea52b5ec870e631b842fe92bf4266860f0adc0c3f992b8f42048338569891e9e70244504a34cc590699168a604eec0e5f2ff994290336017d1ff7d203fe5beb72784f741031b7cca5aa0ae125a3741031049e407dd3780813b16954f4713e4f491fcb9ea7632a5b5fda080093e5dcee39250be58159d481f3a13aa276483e455eff2371dd3b00de19ced4866594d4d046efd05ca7a04adf5f4bcc75f522a3351dc2697b6fc4a850bd337d10abc4365d0738d670c68a74274cbd4ed51fdb5037d325560c9173ab711e75130042e9174588f826f690e661b8764eed130e6cd8ce61baf001c9465332c83d843331c039e9fa0d2a8152b7d978cef2834e9cdcccffb7f8eeac94ac9503ae8da9281a0275af460547968f6587e28dd2f750e73d35042345312ecaa434992d9c4d0a1484f348bc17ec96c28796de630007450ca78c386f604527f903c48e6049434e9588aa2a144ffb5ef79364f3e4feac9746907a037fac40c2159ea6b02240ee823db4afa7f665428049570b33449b3fae7ff2b144d771f8d881c59c0838963590caa7e5c00b40976089c6ae34856b6b6673f4c59d8ccd4a08196c1b30d5a6483c288a253e3ae8a2e234051186a42a1dbe1eec13c8db3eeb489888b9ccaa3bbe68e4b8a542cddbe88a3b7cb41a217dda6f2b32f672346ac203880b9a0140691622719c2508c94d62a5517b41a7e06b441d3c961ef182f47937202af79c65a4f616f530bbd63019d0a50a96712740086c305c7f01073f5e20e1c4cf66338e05084c837be788730cc091a971960b8831b788381a545a0d8eee4a967f0778335d316e86cc270c0e9e4af15e643b9ebee2ce290f08f1769d988d8ff639e3c2a3fbb95eeba373567a1272880a06e776fe60e8d40a11366b9369ebb0dee14cf2bdf4c125c33645519debca3184288e16ebc528343599793fd2a11162e8d24230d1f9bf45c897cf32d5c9fcc4c71094089312b90b41874ced09b48e1d0e60b6865b7b726c910dce43fcc3c93dd5f702398f40971918256846f00ced03f91419bc2d09fc078acd19780f0f745008fb6a21723f5f0181b0f514fd6621832a6e06c4cc1f7620672380f76bb5710a8f08a824bbd5ae8264832722e059304d2e040049e4f726af0a8d48aa394b4c4a3bc2ddc69aaf5e7e4d20a14cd1d0c3aca03d916b04201400a9b6dc2e48593cc74e0d7520c370a4d47d751d7ed708991837c4a244df84d6379575f19f5354f463b396910ece8359a94550e70ad3d5279ab0e6bf81b93347750d4acaaf55d521d5dbe79a6603f0223b396b6d15db2803c5130cf1c0e63c9fdbd9e7a582aea1dbad886a73df3ff6307bc7059dbe5f3ef19f0c3e27522cedd319293774867808b102dfbf3c1bfca980c14d2ec20a96206bacf56787985b42bc48e0a1ed022db4f1c967961b58d948a7926cc83287823660ec7251c98e46bd61d05a01334c50807c0e511fd8cd178981492a1770e4537e682eefe8c6801cc7f70a1fba19d9ee1c9594249237f2706871a98ebc052508295f6b06e0fd089c9de2a05d08562f99d8a13690c75c23d8e47dc11253452c8a0d1f3a71f0ce6e1f861dc9f9a8cfc04e1464629c365f3b81c0ed1564dd6477b585501febda684414babdf7375d80c9de88862076447c0183d719da20b3fe8274069c0a58a6512ff957cb0255479e18bc6e3951e9beff68bf8697d50586043ff4d19cf8e684405711be1ec67baf1780a8b1581bce4395a1f03dee1c74b1b0f0968b98f083f5dc474cc1a6ade5c4c2e867e26999ac9afecaac522086a492d353ed5026f63b7b94f3193b7b0528f5b96c83359563ca6b10a713ec984f88e0f871f672ee97678a04ac15b465780ccf2929ea1df18eebc584040240d05b6746ca9dfc63016bebaa20d60b75f77f10068c042971d127900741d9c7228a504f78d35030d1a677a83a842acfa7e6c87742824251806e1a663cb000135114eb52e6db9069a10141d26bb1749d0dd27499c6c0297e6fd8d222e84f6ed0e90e3c54528ac687ef1db381e825c3e467c65855a9f9c2c55a3e33e6a6ae14dae0dad543892011301cb54465301714de03edeb9e6f36e8261830e8e7c717caf2d419a8657991666d4a4bbdfda4dd0446ae491b1e8a4122110d7c98092e8e39f679da026fb50e8732767ac45438dc153562d001f4ddb8aff94f89a466fd8b7b78e7cbad9fdf9ea867046dc9f70458f7c619f44f0a3e893e2d18f13db13837b6d46fd0c0926793a857214103eab141789f0155987c76bfdfab196d9d537842914e4889823b1fca361088bf06895ab9b6585b45543fc74b7a320c7545b4781b0be5107ac33822a056b0f3fab1004cf1ddd791045dc9a37d6ef5d53f9525d67c333174efb0b8d3ece809efb18cd85177435646c5936051068c459ac0e3462d55f0043dc58c66a9e498a892769c2ca17866528ce7aea03d7c57223501f517b4847470a24d87896d401db5037cee96d2d123555b9420aae0c33d1b9e9d001fa7e8f52e4add2eb2bdf5dcac3224df99c3a36f024b6b91c0a51b1d526a32074ae3097ae371c334b97067ccbf1a2b3baacae4298da87904fab2fdf1cf008895bb8fe2f1698ca4e1e5129b464d360a93c54af929fa89256ab1793a3bd94a2a4efa4e7bd5984c1a91838f4f0f15c1ffdec1e102fbc03001901eced7f6a27dd6272e5e116e061a6703730595a9ab1369b1e00ca794efd708105afa65157d93131ae8cf3368649d500361d0deae3f1ab39599daf2801dfe9df8ec4fe7cfc1a33e99a2543becb72f9cd704c99ae919bfde179c5d87d8a2cb20e3e9888a039e56f482096901b48b80f4143733651b61b85ada66cb7ad1f2994e9f86b801a96cf0bac5abe826dd32536978ac92d311bd9adbab7c427de75dcaebcb1dea7ba3f6d4e3a78cf3371a5542a2f30dd06c0d825f8933e79ef3e60d54249cd5b7ea4b7a934276ae529d7cd60dd509e4cdde8748340aacdeace461b6dc11310cf54b0355416ff8d8998e7e4c1804664334b031108c333eb7124714c236ca648f0743d66aca38e6f92a41ce1242004a6c7788f4ffa557a6d8a3bc16917cd1b421290401c2307c56978dc5c6245312c6ee27ae15585fea993bedfbba14d96030802a0f461e952f793d807ea0401a9479c7880b67755d6182f26b91f86185dc074cfc22b5a9c9c900c45619068a597e6d71537cfea2ab95465799de42d42cee5f08e1885e99fde38bdc7e60a9e7587c05a739353182e3932090cb5a5d00368002381ca26948def2a6a04e24194cc5222bc1e42d0efa93b62d8ecd51d41d5832e90278b92f201dda86598ee3fd691e4486364b261248f2c80d79174f0c716e8b79e7d88f1f8c8dc667e89751b2058a850c2d2d89be63815e9a6646747f1d7807a7c5dbfcf54d697c801ca9f04c9c352b9aafce0b440122f0dbee02a1db8089845be2fa0e6673395e7ca72d8ffe234f4356a9b49878405c65e551e2832e1a4263e0c4e61ab0df4fce4664dc896b9208b6923ad5eabff96862849e1d7291b676906061c0fcfd5eee3bc98a0062a5d67cdedbf73d4b715af1d826918c0d68c92661f374230b56477a44747e873b1ec8395a81790ded18806efb3a5280a1880973e381ba6dab575cddbb3b7cd327549fc5610cc7bc57e121e37ee721d0168966d67aaddeeeb5a4e8378b1d71a0658a582cd6d08fac829c3eeeb126b70bcbe6dc3310d0cdfa97ca864b997ce0aa242c1f1ab508a7884192688f653b036112e3456196e861f3620f7f3c421448c24c0cd5db4e8477198a2ff12d062bb4404b31579061b99df3650032d4b94ca8e46b90344fb45131edd3f745b27f47bd4c1b62112f8b39fe18c207f7deaa2bfdfb74588e7576bfd9dc9b6e44cf71f9a0ba57760ebb023f3adde5666317e23688b2515fd95078557e075ab9e6ed013c613dc73f4a5d55503b51ba4172fc51fa8098185ff53d825d30045c15a8af44f49194d5d55be441a0badc39bd0c306e01a25f68c16a7928e7eb696a8ad212c293dfaec50d5ad9ec6dd43c3f59686a974a01bd035bd07080553cce1e378b0c0db2eb2d0bbcf696ca0872c77f186992985456685fe54b77167af4afe77574b8a124133acdb941c7d01c6d7006d4a32087b0e41fef4832dcd569472563ce0012c2132ff151a7db99f759ea6d7d80390d3981498d995211fdb866d1bb468b8a5d331f2268b46aa9a1f32b998d72a34ac06288d07b64c2a1c7eaf5000875f2cf91b465f0939d466e36d3063e2cf755cc1a033ba01f5020e22202f8c617f5c29b10c0552e1a91f0f5fc888ea67d47774987d301f88a67eb6fd2d93874fd93f6c40131a6751d1256a7ac6c46a901ab8fb37c57a19fddf683e7fe2e31ab64efaf222fb054f14d458029f0be18f7285a8848b447588136e03737f0f3eb134465a2fc1c8a8800ce9b7ac132a6ec2549ab14a1e5497f4eac26bfbcef7432cfe42ef5ce757385e426464b47bc925cea59b259aacccf48a000ffc8219c791f5fd13d84a8111359a5cf14885cb408f86bb32217cba99e0f7eacb1a48f3f496fc1cbd14f15fa9812b26c0e6c90cbabe342e473d1977651533e2fc2001f81bcdc8260580360b4b5230d583718b029d59b1fd8f8d64eac0c415a7d4bfd9c964c6644a712ee9eb512dc22e46e729100947fb3a848f704dfdd1ac87014090b0b474d710c58644a0cd287b09a3c6c1682672576bdfde34e6b6b57d76c289065532537c78b0386515ef5e9051c6668278f0bde95d54f07f836466005079ab2b96c9b2f028474df66981e482b68f905f28a51c8f8d59555cdb3d7c08f86025a6013fd7d14d86422bc737d84fd97b0edae5ff5c7f49d0984d9f8be668391d8bdd07fd165b990f4ca2f7f5a99a979860d72a137d1cd77dba0d68f76ee0a719215825c12f6cdbc4b7980e25aeb30c0675f8047775811e051f46a9e84beaa78068e1985b77fbb802b437548b7dda386239e7541649046101c47e62f4138b2845ea7e68cd6ca58ba912a249ee7f02813a5c59b8251cf4a94cad80722681e3f228fb2291931338e0a9038c5c28a91faf4d7e7c7505e8d909a5c22cf72381c05433f1904837fe14b7934de0dd8fbe62904af3b72f46e5f2031c0b9b21bc9d5f8b2becd9085912bcb4e2a6f348520ca7c55a97b1a1cf19870175c4f156ed8e335756dacdb8436c462635d45e87c029e0783a2b57c6480d6eced7ed4b8709c10da0c3bc14381245789994e0e9cd87e52d2a7be1de363c57aefeb0f53c6b1a70ed5c42f7d59976e1fcde02aabd8c886503868bb684022375aa18c2d57c3c6356565cee53fab2a103cd0dfa4506f892a4171b8bc48d80243c9e2e870b032dcdea16bd7fb889a80c6c156ba8c59825a30a32db30c8018ca893eb795619080bf05b021c775ec433f46a4cb739bfbe151c2a57f5416d8e5b3d2e7471c20d5c266a71e82b857c0ed9a187cae97b76149838fe86013f81ab6ccfc3b9bd224ce287334930542c3e33d3523aa39beaf41551e267d62da77798df0bea30ee352635cc3e3313f423ef895fca69b97d3e0d9cdc9530d83080b8d0d29b5d6f459bdf72672f1fd98e9c220f5e03000cd4af297a430e3c6865d83de61ad9d10d0a06b033cc8a5712ba4086eaa9248c205139cde043d93109bd8be38b4f2ce6e0d20dde82df7288aedf05691ae58f827e28e4877df689c97c431022ea11a8b3bbd00ad64fbb699d86209d8a24abe5fa2f376e6d91fb3d282dc18fed9c263ad46954f9875e0a448d3d460f16912828abb9cf52a59bac84dc9a957c68a14988843c162f3dbad2f670b59b8e5971280206cd44a7208cb44e8e2e9111ded0aa80988582f1ae6281e407c0306ba396d11dddfa39a435affee0295ff89b82f99cf5a5e604145f1e10215d66d486015c2a5e487a8337c129d2ef83d2bbabcb547b81a8f17b6f3a888b6cc102f354715e9fe4b244d9919d01dfbd3b20fdbc7b9383a3af62d3f48d0a74b498a50f22f5f619cc9b7be3859e5c34a2ab867fefd3608721bc9ae737eda78b3fe33422a43f245b91afb4b2a7bfb5ae1dc7486b295d63e8c02ada28772b5be7d6bc0f6cb3b31266cb7ffa3435f206124f3aebc5c2a500ee80415d21e9efa9eb3ef4514ffe55016f00abfb51a9b1f71245175e62bc8bc49010ba97e968069715694805dd56d37cad0abc4db4227f6d8e9930f2cd20d098ab4695fde0c35c5bcf36de4c7057f96761246835b33b98af8880a52cb8428beb21d8ec8e55f7086a5b69a5d5e42248746c5c21472c86c3e4585ee2bc1a041e6263dc20e2665fc5a598a2661e6be28776e63a45224d45595c329345a648855dd4b242e4b6c55420df5ae3e953bc996fdb04be7073bf84496444103da9fe8f77b73e2c72b0b7a9b1af82754c5d4bc86ff478909d59f66952e4f1c03baf3fd44e69895a9f89e4cd59d44fa6950304404f02a6c913fd682b96313423cf607fac69b26d1dcd0400c6ba939d7f9291935f644b4fc453a68440adcd9b80bf66a1334e76fea92ff9e3da73f2baa2a0c34bc9e12020098edbfa214835a7fea7a9cfa719c92c389934f02f9eb07efbc690727c312f58695c5a7a1ad0661fa80b20739f2f1a1032a093994a35e90f953224477f7fd12dce0cf2385c46a4d2396e252f5a1839428239d555494494421bcf7f920f4c4887b1fd29ba70963b058ea5c82d45222d5d5f6f6015c6777215baa3873aa4dac26d57fd7af22aadfc24fcae54920e62c7b57e207fd2906f5112d1433643c30e7d540bf9a7cf375134c24234d8f9528bbe764307c9d018a9f2eb3bde74065f1ebf0d63018dd815662c958743f009840a2089611e04148cbecb3e38901202ace039ee545f00fb31bb2c0d6a04d4a464dd5d85aa0cad4d9f27821cf16342512d2cbdd5bd90931381ade3960dd15d3b0612f4053a3534e800c3209822058b3f7727a816c5ec2a8bfc4505de047c38e8897c20e743bf8ac296e08c53f4e4f0279379005848b2b43a7c1867aaafb3f3651f4d19523327da939f23e7021f6b0358a198e137bf6f09483459bcfceefa652f49e1dbb046387927bd60b69d13d0d4fc696a48ad019df1bb16e5434932fb8390119fafcbd618d97b64f3bda78e61b652170940940ddf6998a9a003d805b995b176da885d1eda38e9acbde12ded0d8c666f44b2b7c42372e89fa32190891de1e7260465d80c0913e706543e7d6a1f3b6f2f4f94a7673801bc5da23d7c69b1cfa7aea8cc2f1bdeebbdea90a6412ad63fd5fc81f9c47ac4f0ca9705e5f1a4bb9f512e0c4aba48399aff98ec00f73a58d7dda118d1bbcb82023793a9caf3e1242fde66425b1ac1b0967c53d211734f9761617550fb9ea43f26d459606b0f7878146e3ea21a6552af70f0c7192c63b8c89765bc07bf0b37da1e691c3d9020cbb26bf29081f75330f330aa31067450806d651f1567a0ae5d0fa06ac07a41c3712c1316e87b61d59cee18634ca7fbe7148a579d472001a405380066ca1bc1de087c2733eed2c0f596b142575e02bdcb7059a0ae3c72d740d382cc189c8e7c7e51cc677794d0f32bc61c1dd33757e714d7068224dc919af9733fdb2c9d12b5cc247f1760caf6d5e339aa4938869e9623d5ba58cc24a0d64938278013889ad40ebbc9276cd642b77740c384e1cd6fe9e1fa7d4055d53344324c57d0fb40a17199f978df5473baf31f4a01b1e599c2c057e701c39858a8709bdfd9e78915a4cb614e0f09a55e699dacce67ff1eab92992828ff021b3466ddb26bf60f7385521a4b64bd71bc5a6547d04f623112ec549f3207dcf4fbe84d9e489ab05b415f344a2ceef8d3d72a85b9b3f3a86de27e635aafcf16d833cab97ea9c9ab413de83446b0f78bc34d2611eb04043020a29bbb68f5b110122580e913e8a14ccf444ce43946f4b9659556f1a044b4908601ab93f6e4844df9bdc46cb247b0270a22361f0219a3fc8552c32fa7f9eb49e942b36f342ade04b0272876cd20faa61249e59427501a5491a6161b19313c0ddc9a46a08c771b7ac38df53f5238d75c4debea4f9ac5e095de5a3e61fdb3e7af98c03b3702c7d40db01f584ccc9c92fd0621956dfa1ba035fa09233545cd37bde4cb9cdee1179e9c9a50dd975690ee270b8343a761d21def82e866b954f3288d3547bd960db2ef8b3aaf4f2cd5f4ee0b529484e54d3087503be45a15cb418434778fa0c33e2d53ebecf4808a0e6a698ce6e3ad9db6f67123ca292419e903da4ca233a6eb26ada444468a4266e1ad9cc81983da779870dba6bf33e6d8933f9e8e029ff764e4103a5cb8663ea08cf87918d2ea2a3621a313755978e7b3628a8d501577374a1da323d6d12aeed64d4846aa1921da17ecf9db282050aa9a86c19fcf7a8a6e4777795bece3524ce35f04f03b0e49388ce8a41366181bd30c228d01873c5b3371747da4a6d0793e45648c0067471bf5842f3c9cae5d69f15e39a8e1f064f93d3398e22b1015a413623996819e97e7af40dd246f8141838d19d2a7ddb91a1bb8b77ad4f4f7fda646079915b0f2e544884ba4d7fee830572cc72ca1a5af1d254ded1c1e1ec37cfbab9afa4d73f44b4f09ae735c3751cb800be3c090b6619db80b013892aa1fdd5edd21b1496b7245b3303fcb6728190e6e94cfb4cd679ffdef8bd4248238002b84b682f6243e112bc2d8dca0296d8b28f1e9be1f2d2493d7528aec212e4c46094f4b9c06c37d592c7a07ac506a0ade2ed67ccb9ebacce8726d485224a550e3b02b7749e4eeffc7f02c6141a56be5c519d39fd72d815934d78d165d7059da549260cb6d12c482aa46ff56f7c35a32e95115963726e925d3cfb5386936e8a0e1438abc2cda82dd8969013a85ef08dca339c87a97b29e731d03e481dd8e478ff294f8183c38c7da14d41683adf4e2127ac50651ec70e58f6bf6b4c917feabb6f8b6635d07db05d04cb52ac7b8eb31edd1235f644b7ba46529f2d47ee7ef8de39f76b575738881b729891a1d1276ffbcc47faa24573053730ba8146bd8b44e75feec0149952d05e5342290e17c516c55ecf8e0bc9268528d0efcf1c3575b8e8a81b5553986841f4289169eab6ac3f8079bec83f02d727c5600b6dc68dc71cb83ac41828d49de140a657a8e5d0a7d39610a584f3fdd288c3576037a98797213be4a468222046153e4dc7c1bc2698d13b07b8ea21b467cd0f1d48a4551b4a6dc04ada47299fa0f2296efdb08d3594bd7a023ee96235e760a467691b2a67774333348c33611b47aab87d5486e6dc097a2acb6f490f23d9c9b5586bcd61106e7137c11b19a9228371f6726947e22783aa11e8b0f06762c625e83b2303e603b0b46a00e128b2289eda9e974940499316e08cae81a1105ebdebaaca495aea03ab59086a1e1c1483b2b5dd555c546cdbb7eceb1577503972a628aae7a82e34209b388c957a214362095772570729298700998a4dfb4b3d9ba0d60436a464cfcb9d2bbb5be861df84801f0409228894300688e0412e9601a3e9dbdcccb65a629cb4cb2ae52a70e6fb6fe09d1d6a39627c5d0519d6582aac3d9c1e4996821a35b63e4c53a3a3f4234d533825156dd6cfa48527a1870e200d0296309dc07ee59f5f7267c9a9764f762de9b68f76698a04f8b91bbeaa1d1ee747323797b929b91f488db6e60729956f2c555d4e59887fe33cd326970a1a6d053bb2b5af601b46a9c19cc6c6bd285feaac68a184a897c39655585803d7ff0811c87da1fed689985d1f1473f672d9b5d05948075a40d174ff8f4b2d387150b8604a2d8021f98ea21acd9090bcb0e907ca2556f50a0d3e9035f7ad5a7a1c77c249a922041af91cc69a298340c0fc1382a1de7e39048f04935be9d3e5b01bd13aaf9ee2f0aa2002121f829a6e4b606a875e444d0df41c37a9adb1b508a9cc9ae48c6ed635027a43f7f82f2a5f4bb9f5cef51d9ca19b0d7dd1e89615403f1484cdc1a8586ea1e006bf2307dec1e0640de8719b84d5c75ac77bca60f73e9d9f034e3f0820dad6d9b0c611c68566d9288ae1bed7ecab35b203519fd1fd349e4248b5661900ca89d823a85bfc6617a14baea4035627035b76fddd4f5cc7530c631729fa566991cb7c28cc1e349d019ac7774c9acfa5c5e5df0561e1687eb088e4751d6ec5d3e21778b1ea1b18fea540329161b860488d0b58a32aecc6b0a2d7d02c5cd462949fc3645a6cc7c1c29b62106c403a9789ff0e9cb837a7b4311dcb8e06bc4eeb6284ebe7ade906bde5e735a68c1b48986bfca1c6c308c32a210713f4a18eacbde5311e8fc0a6c285b32193ad5a219138378531505829d2fa99840339880193b479881337a5da5c298766d6afa3188fa2de6ddad4174ea464a7ec9fb3d362f164723ef0c9cbc1e2a1ca97c398b54ca36f779d0a322e9732d7b49edc070b72d639c3a42e3ba8f115e52aef2da49ae20fed3fd04479e29491005d5e950367f4f06bd3d240df656935583a42df06e99fede218bdc714dae66c8853eb01156faa478fe14839cc7bcb3085a34abfa733baa464c22cbbaf091e8d72aebf018f2e32ce40abee428dd6e80627dff3bb48822606e7d053137c8ed5f8bc93f5e34fd84b70146c9c47a99177a29d317d187aea287a0028530168da1012fda81fe97c79f597d378a8e7abd0ee8abeb1ffcaaa9a35269dcf3e6a6bc3e93752ecefdeb697820bdb042ddede4fc61cf3949421958ae63cd98b5a0edc10cb3f9928a48d31968f3f63f739b0e89a87c216616068c4ff5d02e057b3cfdd6612665e8b6cafe405a19a2567aac2ea061c6d95cbf5bcc18f116803f9fe09b410159153d587a309beca04cc95b73290c0d6f86543acf9afae8bbd57c4f44c22e07256967b1937e80193fa09a2dc0b8f8d01f12c49f53bf2334fa48ef0d0b412d49ddba5358ac3b811a534226e6b6bb300d46270344b280e123af63d634eb09c425d6e4a080862b71cb4c79c193eaa0b2a94080add8bf6cc5b3702623d3129341ee1808925ee16931d1a402e56963fa924ce2e7ad7a12cea5017926e0ec5c62308e62b1571a03b4760f15a5e7203f9c1467d02b5329df250c72b3d3d35b5f881ab415770082eef33b16c07ffbcfc8bcce52e42957932bc63b699641a00ee53d8826e03bee15cedf16ada808431a95e31de7076aec6993d8006150eb9e12ea314ca2069c2f6d7242d772c4a3c5f126e47c90827813d32f887771b014e7ae9abdec163d7940dd7e760f5318b0105742e9001ade1858bdfaf7fd07e96ae5f4f6d28a60e5c403e144de28f5acc256d4f2dc5702e1cea11cf2a95750ec1ef82508dec10a997e8b7ef586f61ca05f370b01041500f5156195166fc9f7ab4355cb94c57a2b04e72d6ff9fe422bc51b32ebe5a68a453a4af4a2ef028b1beeebe5a68a457a1a3d6d95e970a4179c845ba2f5f5a5ea251d2d3c656fa1841be73f5cc4e5ad0b8a4528b7dd62f92baf77c36d5391ffe4be50d1a6d9d584f62c40cfd314a0e3cf3e3c6e59064ee903e904ab2d3e6469369adea68716ae4bd1cb5fd6ac182eeab302420b62d2b169613db8cbe5001355fc78f1dc2cedc1f825e660c7c53d169aa4e933bf22367952a51f90c8c4c161cb0c42b78044366e87e84886f58c7a2b695a936635fc26db85f4b45fdadc62958f5d86ae4ae6e7ec879c3a8d0b54b0f3a3f02901f40edb5ecf235fb147c183b20025e96e442e68d0011a0f62a05466b55e0a514c0c8c5db34c6b96599f055366dc9fbbb280c8929b8cf79ba4457db09077d72783f8d36555342a9c3470a1877953c3dcc86fc5ffcc2d686176c4e47c1816d200f71ebf38ca02bc98225c5107f6e3fe8165b1f4c41ad47856a0260858296b7ca46afc640f7b72701834dfc3d7afe82d8d5487f01ced67e4f6a63d44b632b852d9395b9e3846c8df2e15e7c3cc67d0ef16b6bfeb3d6141931b8088c16e335bf9ba804fce0d2fb8cf9688e71a348b33f4a46d458c012f142f5045416a05480e5e89df2975eee25b726cb11fb160c9294bfe3323bff08b612a03e06cc806f1f177e8509dad0ba1c8daaaf486846d165b5c8899a3ff134b1ddb57e6d73b690d4e406f53a5240e8f76c7785eaef7d9f2fedee0c5f6dbfbeeca598197cb6b49af340ee0610409f071632bda1f1845e9539448894e4588c6150dd0708d38e9d4c62b6be3a91e5562e2c946af842227eaada5a4500968c3adc588ce7c865c8273fc799c06b295f1701dbdb5926798d19ef48d8eecba32057aa12d28f1061ae5f3a0342bc749b99e4870186f2bf65e8ce6c88186d246a3a8d57bf431b66aec48c034d70ee760f39af4bc68add2a4a9344d19fb29b38e143ad727297ca3ad2ad0fa82f1ed38be50f559d1706832143419ab3ce584ef5d66ecff132e703697c6e61f59500588e2fbdde81ed6b5a591c6194a54cc46949fda7520dd6ee557e223e8bef62cd93eaffbb2c4f0e12aec96493eb3b0cfc5384a8168aac639d71bde01804ee36d40d32d511e0d9e65c0a4695b047d5965f2fb9262d4af453cb79976c372ce8d61a88973cdf8fb144e09136a8359e8e94360848cabca7e8a4bb22c4e0790ae973d5c5cb4bb73cab1b435193be48b2d8f1e5141a3206b31be662843d65fbb71c4a5947910c6e99b046a741c8dbdb6c7c109f06852ef86ac47010c74f39020a8529ff62fc33cd792b1136024053ce445434af1979fbcb05139044a43161109db5e9439f2314935c53549857710b4388667ad19496fd4302ef171a975c5dd3ba2169551eb0509384e2807a99c295442055d15dccb89758f1d0cf9b6f9d55361f65955cb39d6eea85f4812176076f8afe83d964aaf7cb2e8f26d9ec4c42f6dace87a45e304aa76179796eff22bb9e4418b9bfa04c4001512be471a0d1f56103e5dce164d3ce35dd1e8f19c2d08fcde79440e0582a497a8f63b8a81dcd7139b069110daa6dc812da4edb203c85634893f68f34909c7fb24826f87e6b16cef17333bc80c8a5c5453486b88bd0134a9286a800fdc4c27303a780fc71fb7c815345c2c4d4f9e3ab611a0f93edafa1abd263b97b6a3f0534e2d8ab02d6d536153c714cd267ae6d38add4fd38e9dfeef75782776e21b4b89256080e60047a7ddf07af4ac6c43a1b9d1942d6d5b67e163e95650b0c0e5c75aeada98d6a9d77de67fa5e7ed845ff60afd2caa9131580708b1146bb24bf88925b866e92877c68970320611b60f6373f30c6a609c5b0ffff0b0f71187d73405139da5affb85841ea2d97ab6898cc5891589dcd31d20db26be4df840b9534991579bb9d38599035efb4153b510196836f822d1a074bf7fd8d6293c0fe71e11a03cb669528bbaf732ce63f311e83e24d2d70baecddb71a72657527c69c58efa1fbc8f12e1d9be04efb2d7b41c9ca101ebc3cf129f46574adc53a0f9f70bed49485867c3d841163265f9ad8d3d4c87bcdf50dba7b590a1d5679bc50063b557dfc172b11db77447aaf3a93cbfcc507c6fb4679eabdf1d00525194012e871b8e03974a9ccfa99afec773df29102930c5d2d32430a7e99a944624d9b7de02246c04377078cbcd85b7a2c81a137e0c4945904a6726e410a58f366abb1d4b32cfb49bd3982a6acfb599911b5bbbfabbc029d2962c0b02f095658e85aee1e9b01f8b77fc6e0962b2eaf878585e64c6f552d18a84c401433b293c1d61ed6754176eec20a55a1ecbfa9d9f91dc6f4ebb183287cae8ece08f442af9549c8aec3058bc24c1e82eb44156ee2018db3a97a6cd022f3f9ba94faad816a59176e0b126e0a9cf05af74ec0cc4077af6611c617479ee33bdcb86cb2300ad566a4c861723398d3f96c12bbcd90a213bab25a8676b514387fe9ede58ed52867613d413232285bef01f5326e168f8004f6ba2b28628a01b98d11a0070eb9473b236b6ba349ba6a69f5a735cf7173bda836d51ed4f3d6b1f3a88e211040b019ed3dc37bd619ed694f2e0be37d365ef7d59858b670b247925963826069c0a1fec1da847d7620f33e92190c72f3132b77d2257e752ed6048a7916fadfa41e2a663d3a31e5574e451c3ead0b70196a7829aed37346899ec538339be7a6c2d97473ab4426be175d7d9e34a1fca48e87cfbfab7c2cb6364ffc17e63c1d597b33f5e6e54d5187ce060fd78844af584806911ef9219dbdae7ac09bf7f11653c8601c5995cb8836cc95c99ccc0255e45b2d6761a84d697503088c6dd02587c63028fbcf5866da2943f9e3f326bd2bef29d7d0dde5304648e63f6387715bf8666b58013a4b37f36104618bd05923b1c69906757e881eae2368d8731dd744b70036f06ae832fe9894769dccc0d4e38041e2c75791e2f194d0e49f998b53488e2cdb20804170513b39d0707eedb262df71810248bede0698cd023b9fa1682b953ba402b077e983be6e1cb71ce7f8031d7d2846ef23dd020e50ccb6bc6478bcda54aa8c05d1de516d11fd69991a60f06205e3f07e76f118c713124f96dadfc8ec103cd2a6a532bc7753ddaba90824900e1bcfc8c82a7f17d60f9d1eebc1cd9a16b70f316b993d70d4610f20ddf81d1bd205b398abb59c0f3d1c05460ba85da111597311fe9b9cc667c1724eee85236856649c81950ff30d3bb19fa195a59b829896e78d4b98b9d3f602ac0be9358f10cc8f586fc07462e1570f00588120dc770d26d467e0037a98e49aec23fb755850014785d4966cd79959fa472c5d446128541448cc105c441f4d83b8b547e0e64698b9919c11755cca3de1553e08597d3c13c0d262a22f814599d85290fe7e96cca6d629a48e638e1416bb1c8d5dda1ff85398e79366523e23b6b13b53e7e69db56be7bc825d578a1685eb4e6cb26ba4775c8b808525c9959aedd13c8246414f960d7ee15286bbee4c415cba9468bb0c202b1c55c908e9a5b2c3a3264fd1597c78c119a54d61ef6ce610dd144f9c8fcfadd5fbad065a254fa949eb317e943617bb5d4f1e7764cd1337b3bbb1f326fcddd5c2f320bf6f2c45058b43f0a634812d90cace8560e5864c91a701cb6668802c4ba0cbc500cac64c0b2ca78d2950c7fdf4ef06968dfd5fb16d8ea42a7727670d1f3090a83db5dbd321939444b9e06ad26a4231dd3fa84070b476f0c5c78dba0d2eab0f9351a188308ed6108e64dbc804c0d1b259fa72c60ce941cbab45186eda346b0cf4ea0b13be6cc43c2cd87b4e361362742ce6a3cf1b24db9b0283d67680bb07a2f8ff61c3303ab0b796402b578f244229834a8fd43542fb8408dbaf8f9bb605eac40c6b094c885cc0fe0746907475093967e256693e54f8cbd5c0e7a226058b4fe8fea2eccea7d0b960d91caa6a946ba5da23718524dc7748b68c9c60dc83fa89fb393edfffe85a01a2f775c24bc883888d5fc36482becab9b03886f5a4d9e2e45884a4d5736c70a05ada8a95eed1f37e1792c018d066472d50736ade9d58fe7f0c54f02112d3ffa112288841142ad33291d291b6a7a8c5108c7e1c19e5f3d1c321220d331b1cb4db2d3baea11e3488c07507cc5c8a7a13d76c6f5e1f11cf63f7ec7d9e33d9a57817a647b0f72ba4f5ed27c693bdefcc204468c9bb01a21438f184a6ae20c45c5e425062c32f5fcb85e3a29df4626a64b365413800a0a0722d1064979a6246988a1ce23e1266fa5907e5b0ba15591bcc90bff2e3402e94e154b71cf34a66f226fb315e4bd054bb80fd80ab36b532cfe69a09d73ccfc255a67e9228b448618e7068440d898204e1890a024bf18a323c4e686b8d6b9a611f2ec81bba58e6031c2c4c25bb5c2c8e30ddc1f87fb079b9c1ec3f0522c507d4abbe5310e41f579c606402818b95c759844716c82482da8055ae9f0c102cb77919a99258910ab70966920f258c55260357f25b5405c07d3b7b7ab49f64006ec0d10af02a3b5e003e40f4d931c9309162ddec6c8a45c8a640a9da5bf02c4f85a10d77af14e348620d85a71aa1903996e1a995b9b210471931936e957f9437345a6d9e2df2d815920f3614ebabffe2cfe409d3c9a0f07ec1692ae3b79afcbc08fd92165e8fec1b0b8337cad718ea3c22b99e7ec24721c7d974ab5a054a9be2ac557c5fb3dbfc87c5e71a0e7886b6d9337e26f817aee942a9d8ec2da15ee0c54681f449d9f065f1798feb0df0bcb7963b4e397fe7286f6604bbd4235d41d9e150c359371640d7b9594789549b927ba53f822fae5c2709353a695dcf0c44a8d6030762557c7f1b9c8d32c7e6397781c72a10267a64a3cd80b2679feb159ee546760904145a94dfc22e3ae130f0d2d3545aac979e8bc0070206d4831cd6384d157b43853b04c6007cb55c6acf63282f6df3d90b88fcc57b59128901dd72d1b8ae8f3fab9192db9a9d5411cc556b4c6faee2f3722e61cfa43acb97db7adabb7e58bdf35778cb4869e32a7c30dac5d1a8f915a788c8861f445d9dc54a3e7b6c97ae42e2ed65e7d8613fe4b20b7a0229aa11709a89f85f77d27e269443da637c1e87daac395e27499d1f5b857e6d5bd1d74367e9736fefe8be9e2cf6f6e3c9dd353abc0052d1918af358446e230dd60b388df1717f8afd4ba1631032ea14bb59ee2629a4f7478da2a095bd633ef5d501fa91c5c05ba1643ede37fd1da5d95f5c0d6f2a66f69c842358e3f2a7ebe321ea4c176f2d1fee67ed39b874274c6e3a1389319cc423d59b63c446e49820e0bd9d4a2d10dd61a29c8602796f75cda8b23cca2c1744e8ad1a42502468802173660a57568cda550f2ea2791824011d221cddcb6b12ab924ce475ea43d2f8a59b4ba8bc454c2b1839bb33ca9914a2061281c0adaeb988ab84a4572bb690a82205990c733e668ea3b99052dcc6e7db6a417ebb5a2068c7e3fc78bf291ec9b2036e9acdc8d96c1d6c4111837513391e85b07c169597613d6576e9213a7da074f7d9364ff45dca4e1b0cf0755c2dcbcb3a442bdc2ff58bfd32bb4a81477bf158ea2abde71a48804acb533656604f1ae217a8c601ad1248af18d91fedfbfbd9f4e457f54202deb7c06792eb66c0b07d8535f6908b625383eefc0cf10cb9697a84e9df60727109fa1432d196f049df6e0ca41a4eed361814d7f80e0b4d6541861d8a5006f84b608fad94317ef57e4d93d91d5993b44ec02963484a18d4f3bfdd1b5f592c86ff82bce301234e734f1ae16882c005c0d02961069b9b2b35d64709dd5125db609d726445c95d0098ba673b7689802e1d188aade5e956c6ba94a4fd3230650e2884603282c88bf91fc28fd0995e1eac09717a459682027e7d1e56802e98697620668acb2cb2eb97261f70a2f82207f50a5fc9f441bb551c7011d12c2b7ee330fd449d00a77a26371556b147ba68d28be185151a287921d0c5079112703ceaf276f8e59b4edbeb1dcec0972757fe79c2a63fbb243c5f55298297b36afaac620256ead91582e4df2030ed57381fefe4aa164260e727eec1db8cad234e6da470dfdf21abbdbbe7463a7a60733682aac3191a04d9b47576311e4df4e030b37605f0275aec20a130adaa47934359684039d6f9160af5ce9a0c6635dbbc2d402e63d6ee587b46475dfdb78e4e1595314d4fb5344d3060db41616cb6afb12effcfd75c27b273b12fa075306849ff4d94dec24f691158e444c13c5ed107ce068d9a29c93d81d2c6076ae77e42a6bd445630e257e7f86c4852bf44a74a03b14aa5e0ce811bb4258a9f6f715534f2c16bee00180d4b502b6e511a61db591610bd4f74a5689c7dd47746ef61042897b724761f461a1527c2ec26007cd811da2fdd803c4796963dd7319ba2ef6b267691183c5f509681849f5d7d76b3a0c0e498302c5a0ad1cbbaf188804b08b810ef608ef60bbbcee697da7cdab8b18a5558b8276009d61d84729838d376d38c234989aeba633f8a17447d995c1e1f56595eaeff81423c26a42c067082083fd3adb64957b612792211c034858db25b316a30c67e79bae0f2345c1b636a54f19b294de50be54006d2b0647921d038a71cc5648e564fb968430519cdccc1b1be7adfe2aa2a398112a3e8e36f34573615000a231b5ab395848202a81804fe64d76567986734862500249028bafe8801ff088689141db8c08d78db1dd2344b9235540eba80d339a241c043d1f1eb3d21427941ffacbb0473db47bd71adbb25724f866b6e029bb631d88cdc43e359914f8c9ba40391269029f4e730a9118305d02c507167260d25f560740465c05655e78e73271adf21000e3da2aa183061d7419840ed5de566bc5ae259cf0fff884d035ac5eac5d73a968f0c00e51939e1d9829f30e67862987018c26c239ca9034b8fd7a789e111c828b58c50c411e128171298d26b567d62ec0a69d52719d41e6cca5161e4f94b635e56c4bde9844d8700ea3c88555ecc344ab1d3f1df79372a4b1d60a9cff3caf6984947c62ce2f793e061beba10aa6127067530384b31fd8d8d569c1def1188632d881f97963bbc65e4a97926208c9bc2f69b8be5c03f8482dfc743e1093a6a55d3abb761bf20a4d6d05516f86d66330de3e4a12b9cb165eaa69442f210513f33dd6f235a4208ee9636fb1c426f0184564ad25c95a6daa37c35cd6543856b40a4071e916b603d6db346d2fc7fcdafd05e2a3e33f70e184d94900993edfb60fda1794e9e4a4fed0554d987f6e92b0bb574ecd5694ecaba2f76c4cc725b6bd2d315d8681d00383b0a35d5f318062c44bf5e10f4a6815aee8a73433c49d115fc7594d19a9de8de09bbab1094a48db3a44878c128456b3bd6379637196651ceba6d4f7c528a709a060a82bb619a86bab20f470ecc5b9160faf25fe9237e210e7f22b9597366c22dc304a073627c25d527c75d3d1f40f3cd7f86215a2284d99eba35022352a1a35ae8ab194f82a7f7d223ad672ca8db4d00db6f8225cdf45aac3d42db45c91e1b04dace13c85ef3c76d59f357132af4aaf279bc8f57a5a54edf2079bcd64b74fa357617b36811f407067b8c4b4c84701d5ca189260d2ed8818a6e0813f086c1bde7b60d71873cabc951a2605438c4e6b5c741c61221861a3626273ae8c0534ce59f3aa983172be74a98f1bfc6f6d3a444331c9cec390bbe24960586082e219942972ca16d9ccf15173b81cc9a240a332dc6cbb4211d2c9189f02848316611f5e481192c66211ab6c2aaf5ae3cddb45741cf7e668d10aaa384164f246080d09a8531d01cd05a1c2e982c83301224d8c5c29fe560243eaca73580d5140eae18e6d5437285669a842c8a6624167ef021c937f857da22dd99365b251ea3f4d39eab3dbcd9436e23e313699ec31859b936e66263c7436c036fe6588374ef48699bfb024d67a711d793584240695a8607136fa69dde0c0a54f71b423ab1ccc4c48f4397e6c31c0cfa0ef2feb2fccc5f686c816ac780f1d13eb34f207831cb3d76d3d3d1171345d33973b7c1f485f0669347ad1cbaeb8a1fcd54a59f92bb2b9841d052311d3d9a56fdf2ad88f22366cac8fec129580e9382536e766bb06f0f6a713d58b19775f90384621b6f9d6c01c9a89c3347fbe0f3d4ff2e7a131e269339678e3e13d90bc2b1c8aa8d409bb742b92e8c654f693c9a37f509082a72e81a0931672996c383316c555507ca64de274c4d16a9df217f2fb15c24ac32b886419c8da814ef0138f9a2d53dc47f8ae8eceba8b641af797963776706e178e817529bd624f6ec827800044a0c018404d02469d5230c03d5a9454180db1caf96e7a7dbff226fe1165e58e983b422f64cc6163b312bc1506047e94b9d0d0c9004ed652abeede1e1ae30c209a5c80757110fc10d79c1e2b18ea10b4fbb96a4d672e3be8c0c59505213e389dca4928e980a41f2cad4f5c5f1c1591326f86cd66e5cbe39c4c8ed9e08070c7b7a25078f7a96d20f3479c96943ea520a48ddcf58f0f9872372c8dedcca04510632aeb5f6638cce8ae7a7121510fe1caae240e64005c53331b647ddee2b9af36d9b386baeb15fb66b8dd06c6197d13a30a72f1ced31bdd8ed0777a8748956e5e20635cdfe9bb9cde9440193273fa1667fa7d9ed4d6ff60d3307113ccce99bb1432251f1b93e6ad501c70c0a99bd83bbb8f839114b280e79ddfa007a6cc0edc3a56a6c0ab639acab4a2aa01f8e2c4c7d98b9592a5406cdfa153f854318df6bfd22d2661d3d6891bb40d2678e179c784d359e4e528b417c21c446533fdfbefc1bd09c1ffde071e1aab214375c4246893cf0a638131d912fe6228ec42d68b1c9a6f9de7fd66657eb9b2d176690951231f53cf9f484a0d91d6dcdbc951521ebc04945cccc0e7a6180f9b1ac7a2700b9eaf01001d26cfa2880ac1fa6140585f43fdd63cfe16dee9642bd4e06f37737028a29570df1074a8c5a95862acea5b7b234ff9430d03d79fa980136a19466d4166665a903953d370ab8a2bc6be163e411e815784967a3537f5bc249eca9bd6ddb0abad75307afc170700a1d1eaa8290e1fc0b592c792ae356e443ab29fc3ed17a6c6882ad147579a81a3a07f1a625c9b39b4a9a8dd69abc6a7762466aca20eba4c4caa4a7fff795c6c85a8f1ceba1fb76b8d0381566bc2d7d39b7f10bb5a5eb95b668045948d18295b968762705ca894f968234da879dd855b599a100b7cd8695f84a5437f7865036c845215d70f938aa2a30b152af328e0eb29b34b9df826524024213dfa2056e55659d48555e030e36e15924c8df81e0cc6191680c7c8820a38263ebe0eb934c37d03782e5ccc0b9b0ae757abe4b32e093277b6ee366c37b54e6ec7f56c559bc000246b4330cdce533e6f546033471a8f3ecbbfa7b9f066a9ab88157066e8587ece1264cce8007866997440b7234bc6082b22d88943535268c53e64a54d54574ab7de6cdf94c77ad45aaa1552b76bbe4d247f7db649ee4f5704fe83f1a1180bb27ed6a22841ad9fd5dbfa59b1e6663adb6742e04304d42ce5266e0ef9e6df4a2c279c9aeafae2c6464aea4b7476091ed46fb32dc5a1cd7a1f08f7a4488b51706a6eaabb769679f0fbab034c3c4875ddda649c8c4c681070678c36aa084c13232a9a12e01ec69605a0811fc1135c1a349db9367ecfa5e5fb647397a12759ed88e1019f0eae9d74e5c3a1b5a2471a7d58369871e9b907503dc0323654d822a89750abad55f298cc68159a93058b714b256cc8a2a4542db924b9d6442e974bd5b8f4c92bd436339a9b1fb554ebd0aa001b73ddca5e680dae7a880808cb6e7ce895b47e79df3b44aae040541a6c5443674d6a8c78b9774b5a766e28c72d9585cd9a323f035a1647abdbd8f89210a2c03570201209ea2789f7c39db5361f99198f321b0b99e69a7139076396d7fde6573504df38b2ad3d4bda7af36169011c5f1f9d0dab59b652a901d9bf1f4773671627b6c6b66d895ca7b04f33e659714942e9469122436308fc7986ef582fdb5a13fe247903105a3f7e215fddbcc11c78ded33403b3e837782a2800f0f3fb9c88af85a93a721125e18e37f6860e46157ba64ddd3a15a5a66b9fd920427b32da039bd7da01bfda8a41330a98f8b5c43cb0d67b408ab28c4745a1c5d73ec31b994010c109639bc5f691b862352c012559cb33383925b4333c3adc8f68f7a2459b2c9bb5140f1ae2ac64e225f91c29572a804a6a6fa88d9feb1300cf846895a1cdaa92dafa2c06b30912768c5ba1c0fa341a660013435d424701f9864a73a3c9c6174639c0c5e703ad61f035e69dc65e65b02193e1addaa18ae2b7e1548cc8699a28b336080dc9e16083e3189a6459c53d8db56309372dc3fcc54a6e5134d746f6c4398b2568c6e4163a2b33b98b815bc048bebf59184356cbdb2cb9d0454122942cd57d505ead1a946cc5d77df3dc1c602e54d973e7039065cd8e9340b51fd844a49c10d3376024941d398bd4c1409ed16766559d41b77f21a6bbaaaba0f0fc4b52432a10f35b8821c32204c9ebd144ff2dc4d4ba0af85173d0d851252ef3a806dad1d37ee8fe39b45826f7946dbe12620e5124ef412f7ced4a2d60b3aea8c718df7ebecc644b4d762143013c1e2a57c8822067ae52c901941c1d0dc08ea60ee37c2bb5101b4839949f33665cea8511f6cc81ac19f01204c86fdd545d7b328a1814767434a8d6e7088863e8e2d7f82076f385123436c6e5cc7bdbaa432efafad46f881540415abe192f83561ff8da7cc80f648e9f57e28108048b6ad693438a085c74943690efc173c8ade00a385052124f2ada7d29336025fc98435eb14912782564650501c8c1161cf2e3c9575a0409d11ed2954ab4370fc72826c11d03b1839e053ac7a40c138b7fc840fa1f5b09c508894a61a465a10e9103599330999a889cc1e09a0052851da305f3cdf5b4ba0cf7fd4a2504ca52698f9ede89bfdd60fc134c712173e2d51cb5c45bf09efe26c5bbb01b0ceb1ff35b07eee835cba55eee2edd102a2d9b1a4f029f0480212d5fee0cd58bf7b99938928673c09066607b7b7925a6abb9f1ad45ab03e2f580d3375591237cbfaa87d5fda557c9476a47178edbde62263c8a533d9853ec66db68c15b0d924ecc0acb9f44ca8cec055d710f85122193cd6e7ad40a24da55fa4bb0ae9753003ea2d5089185a0faf0da35a4ce87a473f34ba54af7852a5552932c47c0735f1158ef9b20aa8674f483f404447d3ad68aa1c74c3eab6fe1aaec613a9826721a90169b64ae0b1481de7e3ec0e008dc0ac40c5c43f1f816719b3cb8b847583ae6a91acce0703bef94c6b8548101cef7a9ca5190ac26724dc555838f4f6ff13be2e7f8366dbe85e15cc6fcd75bdd27759a72a938f8a52f8bb1dc25bae2c46dbae212eeefa0d6e44bc5fcc7621e4c3c051cb3bcaa5036e6d343ae457ac70b78901047e21fecd6d400193ba2d7558f511d4eec51197e1135996372a405f26d294f825d286e684295a315b25b36af0d1a41843ebd3eef8a72a5deaa74d35bc0f316f207ab63e4652484ba37782177810a97ed60f7875fd5a85747626c905963d7b0e0eba69761bf2e17bf3cb075f1d012edad0152e869dcb0b886bfe11f0f594f67715899c2ccbf27f31965ffa360b881320bc1cc9bd192d9298bebfad9d19bac8e03268a473cc6c88d0f1d3fa3ab3151fc31e1cdc99bcbee3a0bb802167b0472798573012594818c1182872e2e2b772621841f0f0472f10edb1dad159bfe71c5aa0fd0a872ef0f07082ec149ed6c06c524a8a9c4d363d55864e4cafa00ee7762485cc7a5019c50a2c1b6488006706ef4815e9ff1621360f58e676eca158830bd5625e1e872c71708b163bb30210c02433b540ea737a81d664875285ffbd4a931291d3d856ee9df762474d93e35b58d73e09e501fdb84654a00abc46ba11deab872d8484c294004ecc50e966b6c0bc2f89109d616b1d49cf427194f9ae67504b5e3e0f7a5b6e148d93f71a4e0bad7778fb876ba2e18e630d3217e629dab25e426640d4e16bbd6fd195eea0a3b407338454fd738cc089e6dcaf32bfed12e5e9d3e27a41a476eb8bb9d1bae99e9868bb5bd6df9ca6d0a57587c14dec7b0915dc3df3919bf6328aff59aa45743f211a4d39de0a184a3889de7e299768721b035f4dc8e447d8af6e83720f4a5622334be0e392d0ae1c2eef7b93f7aca01cd77022be59ceb384e099e3e576551c42be6d998573d5819d6e7b8b5958858376a31aece76ba07097072a7d87bd01fdacf709e65f50e7c063e31b44714c5ec181405b14834be03573cba468e281bab601ba1ac748817115a6cfe736979fd5d1a7944867b1b723608e6f64c8925d71f9a16ca57e457e52952becbcde8572bd09179200e006678844368c309a60dc95fe225537078b648d0d867621bcb869bfd29699390b86f2582c31a0558543142304d29cf5312bb5a1ba59ab34c2e00dbc7b776d2753d809774ad51f244cf8d3419d5bf874631b19535f8fac1853454927e7a208f41cfa72a7353ec8fabcd03e59be7c42d36b2227085781685d5964711c0f379b201c08883614a80060036d0335b32f600a36776d88a93de5280d331fa4077cb0ee8a187f1c833cf3d585ca0b66942afe86282b86d343a680dcda016f7bfd5edc60823ac1a91a7fed1a77de8c70a8abb0b34a9a186455c439b87b1550aa4060d5f48bc35c2646c90ea94f808d4dc0125ff69d0a169e16fe94d8374535aa422d113779fc8030e0fb9856201b45916a4a9c1cad6a002445f624157441a78f82ad9d11085ba07020b70cd565da1a67ce9d9842b807c1789378ce4b72e8b5961e01a1504425d84be840e9a5ec7b2d461d9095d85e120a9c477905d24467dd80bdf5bbe369bd73686b555946df7fee2c558bbfeb0d7044bd39191f9f16d1982a5c3e09892796e7d8602154ef989edacc235949941c0769aa831cbdc9bb6aca2cf10466954c56295cf9e32061312037657173e286067e955b23acd3ff564e248f629aac4afe055f5d884595aa035cbba5bac105195006def2e14cfcabdb9aac021b1172b78abfa3b0a12e728ce4d615c0618ec5639a4b943c11ac34244319bdf3e984a3e45df32598e231b10ceabcf11d513a493a50f99f54ce9bc9e628cf47c60a6dcd6e7541a4fd1b9ae737648e0edbc5d2f85d6f165109795d4067caded387e56a4babb6d864b658a6ee2125c40a2d6b4efd26b60ad049bc780bdf2e87f05a147f22ad4c854914a5f2c841b357564f8db467692991c7b89d171f345078b14452945165139b7d76afccc9986c7faa1db5ef0c5a9580773094f72d311cc36b5c499ba3be8280f9bdd4389e6ca4fab1c2c8d98fc3a5fd0aed6dfc02e08e9ef88d526551ce2f7aea815796a633c41cc19478e2deca3c51a6fa20db968c69206a99acb476aba7ab51e673a8ae784803768c512118631a561c5181d31f83bd2bd1f428c39829af669c729ed0502a48fcb865d9f0d75d379b090c80c1d6a3ce8e3e4f424788a96dff3e445299b54f7d5146b90a7553b7bd21586ccbcb42a747421472225d08e3c7fda5eb093895681381769708f6b72fe13bdeac4d92fa12ca501f3c682eaa1421d6b725da04cabc7eb2da9b3981d2f47b7fefd848d3f224d229657256d71e00bbaa39ce031178a2d099c88144360a8ae7f92408a1bba64a15354525dd6064cd501b6007555ceb9db6ea27d2bb190642f932a530f1b4774944b260f352bc53b02e2b4890081c2a7e5484089884daad3da77dcc95b4d465a86923d6f35700d65012cc5f31c11266b2b7cb7d3e8908c816717c49d098205ffc73fcc68be40e527d3cb94504c4c17304607f62aad5790d8261ccef28081d06ec379ab137bf355175978eef3c8b76ac4864ba4fe508c9adc5737c8c715a9fef88a0022a6da4df267d0f35d1c7d2ddc8b74fcc50c4d444a6aa81e637113815129cceecdbf81bdc1fc2214422364394a424fac6a4c7b35998b86307a027580cc3f9c011db9f95068a20125142708f37127df5cab6c6475476e5b2f8538216b8c45d90e38af5c470a76e731bc3e6168b0335fa9899c22b0f2907938283f314769081c2932c8c57d7f67e94300c40ce3c4e4a26a75e902406e9e075006edda4c45475915f7c04ab10ac7fb7757a8bb17e5c953540e6c3bfac2e8a622d68160f1ad1c44f4122c25abe97cf944b6a74e226db9a1ef84efe046bc05d4b9371fafc85f2736c3611c7dd510fee91aaefbdc1df0f9d42f7714d1dbc4961a528058abb3f4dfe8827d66ab588bd881ee6968004e3c0909aa916656458c204d540b66d18041fe7a1f5b156c8a9012c5ead384a41b1a98aad92eb77956219c73d507a5a497b2797d3f83e9c23a243506cd1913920083f6d564bfb4ffd323a8eabb14937baea597967741bea3ad5fff06c31120b7dc6813ddd1801ab56120973c363237157fe3ee87c9b6399643518e02d1b87145c2c30fbe399c9337f1a68af055797b266445674a5abdc8b427f9244d44972048982c684a76709911beb8f8ab103bf7e1a154819552810f5181a1a780eea00906e93b1ce68d74a65ed12f1731133de06b9908f661ca49da577e44308bf0a20ed839ee0db909cc02a5d97ae317df2bab3c2d45d8bee81f59512d24fe7f871e292931e7ffbdf912d9debcb00928bafe692afa697049d00792a794ad2ccf433f07cfe026b0101d3090de47ca17b1fa560da14656f62a0b151b49889d4f474df2b2d79239646738db2154c2b5b1a86408e262ca7b4b772052e620abd84f096a45d00a5b0fcabc7b9bd7272add61ee36410be9de8397db0403f38f08ae4dc585573483ebd05b3f0ddf764ea2c2be2d61b1f17edaa4121a7b4c58e4ceecbd8ea536f2e5efb585b652ca288c236e98e61e20c99a0067378842e43aa0bb52b9a651ef538c12057ef315159a7e91d0bdfd4bf6793cbb1c4dff2e11a2ad827bf62e90673143c5c8e8e8c6d7d49c73df052b3b493bf98252c8bbb871e17c8d6ed804063cd23bf6e01e4549af93507facab0091ec7efe9937e44447228a25c7952fdaa7f0e409c633caf103a307d4a168e5c777536ad48ed718491f18603c4f583ad5cbe89895c38d989b81adc1302dcb5935b39c725eb649870463af2548486d3b1d70f034c05c7d5a6819877ecf49fddba6c92efb629969705425fcd9a4477e7cc0d9a30c52c9b868758aacfc82382eb9084170c3baba36c676d0ed4219204497ca2e29aa3e96915f26495429468f5b0918fe3ef843801358c57781cf4e888d73ff120374b10a111201eeb35e38c6c338a6c6be369c6d80dbf07351e4f324bb0aea3cc33c6baf5768d184c387220038771d46bf2db3c77890c388f1d950849369eb5c8c48775e444210e6e966a832a1353a54a296b7b0b5182bfc2db08f1e2e69d3dee47e03e217200c3ac785d9cddc7107de1f6593ed00227a6540d0b08df4f05981529e4605e8294d39a78fae0a3f484e8d878940969e9632cdc4531685cfbadd87abf301a9f3e8667054a73d9a369f7b03db5089b0b3bab53c474683b9faf91248011e4ad89bdf8158b738b6db722b7e356fe6ad324540af95ba4d69c79cb52ebce7246844b2c0d2a87bf6d2891f6c6f411784b5dc8876d9073bdfddc7f89f830ddc989e78c6239a2d0e540acfc0a22c8107f1a0e4388189b6f42ca0381f3f97a6a617cd64357ef831125dd81f481c8b3585dd66d358a8f48d5a1cc365b9a009a62d13e07e766dcda0641c20c8fec8d79dde8523a28d659c6d7a58cc21106ae41ed436346abc5caab3da0446fd8892a21741d3a78b3e5bf21c4e1b5f799c1a39a75a0b0eada2ac71ab28bee52a0a26bb8ac2c4aa4550d54de880bb8b174fcf5614f414312397ace89ee014aebe1fae4a7d4f0b8140207763e9997f2af83fa995cb83ece68f79c2723ac1ebe16bb9c65cf65b4a4047372ccbac6beca25510ac286875a31066ea02c7b0d7d93bb05cae55bc0dec238a1b31e1754298ca2a5a4b89094e7c04c0fb8d0d227d26a691c60b4dd9ed9982e89a08b45a628bcdb8705f313baee62bf203d1e4ed3ab6ac9ea19be555c4fa22db35821927bdd0a217fdab0244acce9fc2ca558275895f157b9df1a5abb25857471417123973395cfdfd2909214472acc9ebb7fdc1f50ebc3f18e50c83b9372926c9f2e6d7050f8f83a9b7df4f824264cfa50aa239c6a9745f9590bba3ce67abc223e70f9eec1af4a54298d8bd3b6aab9a9d16e7b9fbada051ebd5cc19edad61f42cffd74be2abd09d0ba316dde9158282d7978a30b6fd1c3141f8ed31e68df8aa9ba0d4c0bb92f6db963da8b5eb33b6337cbe1cacc6951894d25df906a4bffdad81cbebc5e9e6b9a877de9c000ec5b3b750e708eefab1d7686a5f22139669456e4563f2cc2f5b2a688d1026dfc8a2ba5b9185cdec3d9740392c7336a4382811e0a0b629a6c82c916ac6655915e002db266ba07146186172f0d48ad3a1a6aa31a001dcaea99fe70b46f6ec3a59e113d66a685d067014799c669de8197f8bf08fd4221cc1894fb1dad7f1dd8ec1d29596afa87173d30d185756d7074b2832858899c243309a2c887a90600ce54c8aed576e9a816bfb6e5f1a6d37c8685230c6bd77ed19c5d268584d76965ee48962c57e506d1ae92103db06dddebdaa3381b3d427c8a20c0a4d01a2cb050d51db2bdc25ca8a9e7f809eb0c74bc1c82aaeb47fa3e9cd0a9aa1d8ae72ff81ecaf8b43d97b01f4872454ec1eea66f85590c5903dfe7d01822507cd1943d0e03aa29ab940f8e40c6d9f1a8298237613a4f6c909735df124cbe03ec049ab38d01d0b0a1b427e520aefc4a8f649607f6a718f524a25796358167b04617f06ee51e6b203de0afecb4dd8667bddfef0d01b1079e384c476e4c7c0ae45267e05850b465ae95abb985aa6ee867ffb55521f1b077e3a8d4b99d43c664fee2868c26a1d324cda008d3783e7e57baead162243e188849fbdb0bd57942d4029b92c607e69adfef4258be39346bcbbd5152db35b89aab2d2fa410eef7c9cd71b5ea126a95d94f5bca9f3691c9632fdfd0e1e57d2c40240fc24d7287127eb8d1f4577762158cd8b8a8534285b496c2de221a16ecefb3014b1de06174ac3f700abd9063c6233e67cfd719e29ac710eb1a10f926d3ad8fd04243229dd239032e56abdb9fd255ac800b51a95eb640a880d3aea6742b8678c2a09b0ae867b32e849d40525ef0fa7ebb535c0932001ca8b95d8541046cc51f7c93f1100b417dbbcbbfaba4a0d747473bee7a2c6ee3bc7d250d0886e70d49aa62561a4b75a3b87eca5c7fd5ee675aff8eb0fcc15b274c13ce4c34652f8603fbdbab0a41af8a899f709ef9f03d841eb946f27631c9e105b05f253f86e8cc52e1dab0df0d8cc08888478499c3c68b8560f18e3ab37d9529c197ee2373fe487a08b01304922be15904adbfd9adeb3c7d37dfbe267b4d43216ef567e4d14c94a8d9b2d08e825eb1420fc1c0881e93b7ee786227bb6b846d12f1a7e61269bcca01ae4e3fb303f3984c6bbae58e30604aeea705f6fef3e30d4b552f7779d1beb515f4e2ec45b6922971912a868190aa8706147a7456c262447cd05c9ac5adfb10b58ecad704105335cd56d66393ad866d5602ad3f389a8307cc1aaba382cd9843058552d4c4baa8085699620ed6428e1420dbb861665740fa4c71ad5e61416ca52a63aa0ea6c719ed5a71377c2890612cf9c545b1f6fecface28abfdb7ca493115e9b0b00d1c70e15f1310b443129c45c0a9e2baaf04b07b70973255b1141ae9ac6d10115b7c7edeac0844bb65b42095f247fdc688aa219feb98782bb51ba7039271d83127ded62455ef571324ea803f6f43a71cc4990b4f22bab82d6ed8c04e87cd10be25bd4330b6f3dde54986274065d8bdeda899dc6ab21c2779b41b97c61b5fa3c94fdc472776f15685b02e87fd7f86811a8df65952a37e9c224dc58ca5716701f7a9d1efc93bf30124e6f456bb20426452569cb4b37da7c56ab781fa6f52c8ae7d33706ca1e95e2dc65721c7a4c9b6cf4326a8ca4f9a0a82a058165eb0c98da816bd1b1fd2bd66e2dc2550c26963b586205044570c2acb771b568e42ea3819044e1d1c2f551c2574f46493b8e8f7fcd0d183d509a1a555b3e00726fe5c6b91495ee0e8967adf129a56c4dfd547011c4124f8926286c34ac923d68ca7ce4c8a902990868ee97998d465fc553109ca69b30633c69c7a25a76c0b0b1df712a26228872df7a8f8374a0cfbaaadee3736caf7311bedbaedb03770020bf1e40b51418f6c7e711d485ceecb70cb36ca8aa700becb7065c37b1ace5a1b14b80d02e85b04b8ec79bb76b97082b63b1814054e8cf615e5fa09885c6c26a1ccb2374f5c71b96201aaccfaf21dc92e57770490b1063c6b7f7c21570e1115628cacfbfd90bc29ef5625b4b9d684c8fcc39909ba8512c0b9eeee9e87b640665176c617008278ffeb97488e453092ee72eb474bdb7bd99ef7defe0a1ee535543616d1fdb35a588acb0321ef7a5558f98a63610fb5fd7483acc883d7761ac47c4c22f44d1ef2640a7e0502885a4521a941c59809552709bb263753eae8073f0fb8f8a54ac9a2f87119d6a903d9270ba814c1324146eecc4214da4287949591e9c22412540e181ab4f035d21986fa76b0d14b15cfb34a20b54ac9c363b569fabcf839e0fb074aec2e046b645cf5374b13b5c6511ee493263b196f945bda90a014056810ff0e8703d72a319484039a3e9e6f58305816a503c58e06cb4ddb312f09db52950f07315fa16af6488193252cebedb860b08d7b14628ade1e26d7e67c862c40394e8ef3c26142d20a451f295c27eef315287d6cdc4bd3eb41d867eddf846c29f79652ca94529201e106ac06ad06d656d7b60a5c2ce079d09bd4a072f80857e2dfe89e7a866df8a4642f288078fde23b6b08ab767584b3a9f079c5cd9c60ceeb76d8cf65845e7dca9be253de149ff2a6340d35536a5a1be20867d31a122e4d71a5e7d2ddddd7d168b59db45320ad77afe6302e3142329211fa2bcd7c46ca81add474c0ddf0e9c765694b03287c4be096c06484fefa87a74fcea7b4b2bbb553dfec0fe9e73464d6fda9025b910bf3b8b460bab8b8f8836d59daf27c4f7a8542179d560ac6e72d237cefaa0442e2c3ca4c871c580a4b49c00d527c80e048c1712543c8da9f0167d39a105c02424a50f4e82e2b77555b25ebb1ea2e28be67a420fab1b47d706a66b21cd508c9a892113e7a3db7daca48988cf0f9156aaf29f9563242ab535b855caac845f2cb1bd33df692ea4e472eeec7a8ba9ad2cc67a41cd80a2b714b2aad826205754b507997a8fcce75a072a96e0bb43c2c4f9667081cd5b9e7e26af07735663cec0005027bf5d0356609b8c147871c24101c1c1b826c85190d69bc66a949c00747c3af2403cec635215e2e20801688c4ebd80abd518b0b0e16924b8e1c2b1b33f7e3bdbb8ca216bf8bc4ef6789d563758d164475dd0ff72e75c2c45099aa99592a38958ed165e4c868d4c212a383aed41c59753338b2aa324c4a8de76998af583574897474a07246cab1025403d4ad006c79a4dc05e2010282a16e0bc305dc0cbf114e92485511ac8f09748c30c4aa5153f2c4516151c8b930ab4bdde1123987101eb45efbdbe7a0830e3ae8a07bce5b56d65c3a93390d563a17a1bfe7b0d93989ed76771b21ca6a7783ac49af90c839ac64814a622e74c5958b7a1a562563954da1f05c57a5ef1999a3ad3a279d967327281bff9a0d7777df753424d27befbdf7de730c3c2b9e16733ab669e68fddd9c6a3f21bd8fe5fc130451606d657bbf2aff3f60b783cca27dba47d94667034fcf04ab2b5a60646490047c35792ad38281c97f9b7c2704fa257215e84a1a3429dbe993b6e865f4a0cd37928c08ee0c58e4e6b222855c0f673381a12e575d343aebd6ad228767476749ee09b19c5ce3b61bee369509e0a0b975574f76aca126e875cab292ebbdbfb1d4ee80e1d3ae4d1808f54b8ebd300746d7777dd98527900ebccada8ce5fc7e0c0f0416e7f311b61b3b3b5a8c0812b84bb17ac2f061615704208a1c88a18e4402757c0d6ad8b1e6aedbdd86e07dbe069e69c98f0cd5462e634019b394646558ac350d58f63e10b2687ea5dd5814f268b5fb6d42351664c90c031555a7c09e55799953141429ae4e7e098aa9feeaf6147ad6271b3bae08cb0df255562aa621292ef8543ac1410d5f72e4b126b6b475e847f81f818cc46573b7b03db77ce3106cbedef257c7789056cbfddddfded74550318dda2f4adf874526b5251ce57550e56a59494523a85a82d4b2dfeb45ed41c4208330764b5dd0a922b2fe6834bec699e4ef3c47bda9c8e33ba8cae14a5b05625050749a4efe12b74e3b1bb8771da81f2acf023540773ac94e5c4f2e112bff50357b29cf48df5e3c33616d00f9c8d6506cd81c9fcca7a24a469bef5d337561420b6b1a898e16c2c375c897fb59fba1d7033fc56b64bb819f8ad287d53d3337bb2dc70367b448d15659958120c609efa6696c0b92596a873050f053b737a869f094e4eec896de6894b27c0760977339f7f3b30e11ab135f9a2d0b42af99790a76debbcc11c1d754f8fd9578aa898a78d9a8847b671aa24fbc9fae2b7cd91b3bbdbdf7bcfddddffb9bbff4bf5f71ebbfb3bc7515be31f2e3d312ad83f46e98c1a3570d8c0515b7b415c62e389d21baff31375b8c44f489d20d7561c0d630fb54365063b6e39f452bd8744a9430e3b3f3b51f04d3fa15305a34ce28152e4eceeeeaeb7e664b08ee6a5f242b8bb6f035348efa154cb3f9de37ec06f6c0cd219af06f7101cf5690fe80cc8048e12359049e98d67e3a951b951282e3113dea8077415e1dd5d1985258a26eea52ee926e2a86e860b6c834d2a37814ef04d338152a351a44a270af07fc7c3fa77eb6ed9eb4aae69156048ba3bad02b6f53d57e2520b173b752b5567fd387d0fc228ab28839046d560547e28e0f679d73301bc9e139de212bf13606b5432aed13c83e8838eb28a520c2955950dead4eebebf6f10a4e24054afa4921977aeaaaa4a0aad6dac958c5288c28ac843856d5e28102eb14c816d38953b87a9548f843459f0c70626c195d8c70642e1123f6cc3cdf05719ace266e0873e50d80606712909ce064ec135900f6cc3750f2a77aab57037918965267e509989c844e56f2648d4989c9b618b480c801f02f54d1bc1cd7015279230881f0255e6f71452698ba5be1f3037f37e5b5618c436ec4aef1962e027a4d6c32aeea60d775382821443ae6d2cc263ad34794141a7806de7d4ad532f15b2c8a023cf17bdfd5073edfdef3d290f6e77773750cb130cb643b1a4569843199d4cc39afe013d022ca4b6756989b026331326e16fbb496de3bafbde5b74328fa5d0898991990c6f90d536f9cf0931f55391b6b6bda5716beea3760624e6df881453dfbf9b203ad5872818bbb63eb093282c73b05116959f9953110a51409111051419329b0f9e5495559b53b3befac9046cabe51bdd567e59a5ea8a112b53c07e803c5209ecc7fd88a99087c80c758d7890a7a6ae06931a95816d2f9c52f585986afd381ab67e60523e78aaccf73a45ab6d23ba21a9f2a9923a3722ea7cb73584fefa79a1816d5b7f1855f94fce19daddddddddadd61b55996d3bc4bfdee5d660cda921a195c6a04e0dc648d7f95da7f6c3a81e596d1b6d49ba4a50b53424efa76e1258c1448ee6852e3a2d094847f35e02d5caf01c13e91a5f9f2a13395511cbea576a706015fdfcd9046cab4814d433fc382dda8653c3a26d352b2cb5adb2344c5b8ad115cac2a3d1b7b47c0bcb8ab6494cbb98a9f01bccc606f16f90a5559ad47e7e7e76dbbab19418c9b99f13a7ce13aa67f8a524912a6d51fb95d29f9ae3d2d4980a37c36f45e527ecc58851a4c7f19b7c61d4a3481a0e291f07f5a985e915a6a301cb91aa52c73e9c1aa5f32d2b0ab695887cf87d115907df254be5b77e2f21568e54e5df5856d8c04ceea19522a2a32e0d6af51b7cf25e4c5d0d078fa3f900b6d1a0202b8bbaed5e436aea6aced13c1c34a8f2478d6a3a805e1993bfb91b0123de649558950edd8f24f2b7fa16eb47f35d9edf723f92d07ff991e47a1ca127893e07f62d54df422673903288237b2f99bb8c326e592cc34219cdacaccaa4aceed1e136f2a91bacfcd0fd48525dba1f49aa57b3fa5fcf6fd1e79ff3f969a8fa5bcf7f89aa7ff5fc21acbac8fd48e21c4d84a26c1d0d847f65ed68e0d3ccb397414703bfcaa2a3812fb398558ec6e5d8d7c6915165b80e67a5adc8b2220a5d5483306a1b1224f53d5c4cf3c7b423579c6a0e4dac7022c6366a22dcee7ac89d2340f519aacf545f59c609695b4da944e5052a7ca8a43a5e5909248229d22e54fb6db861ddd6b0b5dfb435c0efb7e106af39cc17e5b81fee49eddfa1dfca64329ab98d37c020901cee26c8f53d4080bba135cefda076d436599d46175e68603768a32660ef49706570ad9fb2cdd6b0a42e31f9bbbbe8615153dbc59f0e3a2737c6df81e4063e54c72a7437f29db6c18f3083f0dff74cbb8f9a7c323e24a4ea5cdbc818637c323af750739b10ed560a2be51cb10dd311750d6b86ab21a1d59d0c73e1ce9d736de49c73cedd9d732eca6c9f4e9d36ea517fdce0bb6e52f4b8f13968b273f7f760949665cdeb9231d8d5ddcccccc5d843945ddddddfca3c69c226ca973cc8e1dd73c87d2a90ee6dc3a29a9c458a23812bdf6e914ceadc3569c5b9763850ad331af4c004b1918899999d94a49d9853c4e589d3945b30968601b7da16d496566cc394706760686b19881b14c012f214f604e087f6c04c41d8ddcb76fd9578e301d4f919312339d107f300249a0cabd35e925c439ec72ed9c0bb90f8958cac0f6451bc9b96e8c4b8eb4d2d29cb570e69c6b19895c2e21f3c5e5e5e565d4c2f2f2b282bdbcbc885e42d7cbcb0b7d62fa73e7ce9d3b7777ce9db34c8139afa1ef4187d23f469628d8864949e54e4559a6c058a2b04ce12c53384b199873ee17768d204f75cfe2040c233dcb1498fb736c6585c539e79cf3e7ee588e98dccdb284d53ae045133fb33a2f9ad862778268a28aaece8b2678aaf3a2099d5a9d174da4a05ad579d1c40818a0839c275420dbac9493ba512456ca2d99991a18f579c284cf13545d1c202f4830861724f882045a54d6b440238a4a80eab440235527bf029e06057c205c6adf8014fef03983a1c18def2ff563fd248c8c9d9508bfbb20dd2998ceb9dd023c5f33e07b2b376612c6dd8dbb0d332939988e872ac6e7efbd2dbe7f7519815fbdbc8ac4afb4ad5d46f7f032721511021d1e49a3c1780ec2eaac775de97bf73ef47ed9fd98ef439ac301f59ebf7765349b19bba3795fd55761bdb65be0dbee52c6f85a73ecfeedeeeeaed1290cf184784918e2e1e0004989b323e81f64ea917ecaa5452223ab580616df57e71b37c921b6aee6da0f32156a47fc9f46b9f481c90f7fffe11b52694ea2413a4251411e4cdcbc84a2aa34e7192741eefe99cd044cfbc14ac9dd004b8fbbbb3b7753c9c6ab56726ce8ef391bcc6f096cdfebb640036ce58fd819747fefeea3510b4e532ab8bb3b8e7b4d753ddeef3dca86fb4a0a463f98e3828911f8d44d92625e06faefc2c8d230c2f8413a66526631c6766bba532ef97b8f5ed46dfe9e83f5c5ba69a03e0d7334d64e6d5a549a2a9884441dcabf0094527e8432340a758b442291086651c20fc1985597bc74d878e1b068c1a205b6ef926c15ef2cbf6d1555549ebfb3352cc0c9f09e87505fdd76678bbad1276414df552675703bb8d2fb1c1c8d6b8bc556614515ac433780a24a462f99079e61ba04ec693045e2bfa8d9b0cbc37c20e8db584a88601bb94c80500d0807a1cf577c906a416ce0928c4ab8c49b1303882cfaa5c43012e9bf54aaa92ac7ee0e53448329b2f5c87b251e08323020241ada72e9e3654fca02dbdf48a8a9c4966d9466245e29428693b9234bc3b49119d8266576847fe32ec318612bdc0d00ab198db2187853c46a5bbf354283c4259662ab8f0f2b082574acce11c9b26c8e581fbfb2aa7d9790aa8a9a7b254c9704735b60f14695a96e0b2ca0d4cdb677a5524ded76a46fe70f7034fd4a68cb844bdd2ec5a4f6ecf7dc907985582343bcea624c27b3c9914371368f8ce5018604844badc99f0b298dbbebc63a26b420e1ee46b661b7e06ebf6602141b18577aeb6c48ee3d97d5b983e95fe2eed79d0c97b65bdb96876a9b10431a9e1ecacdf8cfac49f5a743f2a74475772aaaffe698c0e3681c15b597f378aa3b0fb0fe0d9ea44c5d18a4a106f472aa6b30079eb4c0961a613a1a300c73a7fd52092ea3f30aa3e659a07424ad49295b313c333552129873c9b2acf767775c65a42a8fb8d37f2f2603014665a8c941d550ebe9d4366b6bfb840e77d4eabb54a9cb18e9725116ad62c5438d6e47953b80558c9514e91ea594525652a4c8e8342781f46dac86ae50e80c0c26f44b6ae8f789b809b1b6bec62c08af9b8322b796da2fe52f8c11be57a8c1c05f527758791a3672373cf04cb3e143e68c2771bb95a7814bbde21ae51293540d8988bf921a8968d2c664259e592a638c91542d524cbc992faf808d5c74256224a2ca9f726b7c57a2ae4268397418477566471c4af92ea52b5573e98fbd8c74954a6a45448dbf915e0a70cd9d9c2affc484b0c954ec47bbbbd8c79f31a365e05474df5f3d887645db375ca68a32a0d1a83efe8d44229148a438c2481a102048648cc43859c38cfa3418238e09015b2069605b33d9960d06f280a0de68e7b43ed7f60dc756f2c0654f88ba4a6a44027683c75f24a42a61a266e429f198ba95984b5cdaafaaaaaaaae75e6f1c6afe48483c0f08d6c3af2cf7835eee87e8e187dc0fece18bdc8f95878fb91f2c0f7fc5fd6879f82c5b831c55b7046c2b84dc8ee6fde58ee67de8c1e868deafb0b4682b8ee63d3f4bb692891c4d3f9685b2cbd1f48732ea68faaf6c3a9a7e9a595925595686eea52cdb6bcc195fbe1861c6382411d5f7d4fd9071d70af4b7f9710c0ce6fa25eea1e3baa2f9e895c114b93ef45728946d17115769c649b6ca10aed5bbcaf01202bf0b1e44517354d7050f5275524ab37e2be3cad7902bdb88b87a0409fff5ef2fed07fea797107865cefaeb22e29a84d97c2b08215ca77681035475d5852cf8ab1db1349822fcde7a1a2d2b9b5c6955a51a51e5af7ccbfde0ba2ea7c6d6bb4c3a1a8a5dd7422a4c5e72aaef976451fd830872e46930450c50fd0d50fd9db75da8fc417c75da013c54f983c0aad37654e732aeaf4ae56c2bc20821ecfa3dc956f12330460c50f983a852a7d38d53260cfcd772026c5fb6b583c88e2ab5243bf61a82d5241b34e46b9205aaf26365c4949b842ff45ca480f7d67756bd95b9b5d785c33b40759791f7db01aad4921ca0ca9f18edb5b83d4401ae4340cd083c02132a153e8c11f8efe1a600f8d5b66d95ba55e08b6ad45a545d4b22aabb564491e2547839695441ca0f30caa5294176f0458d0f5d6a1b7c49c0fc8f40f831c6b8c5f8b2aab22dbe8c10461c6015e716505a66e66ef7f758a680314a8a61efbdf7dea3ee1066d6a474a965cd397dcee6b973a53ee968dc7bafbe6902e71c330ae63277333373dc01c6fd6e0c0d6688acee9da3dc871eac12ee0ada4389800520d1841a14d6d74c0358ef3e48df4ccd079ed9df651fb8c0360765877650eafe34edcf59495969a493c3a88ff82e8bcf393e58816dd4693e706ab69a8df249fb552561dc5c8a9f3047ee9ccb5833a2994b753d46a6ba6b1bfcfe2b8687082c4b4a392d522329556eefccdb9b29f7934d225faacab6c773915cf074ac5f54df84b4b7d333fcefa12a3f272e70364f07ce09efd3016b9be49ff01f4fcbd7fdf2f91141b0bed2b6f73cb3f0dfc8d7f9ba21eb146d562af5be0f7f3ff6af95f2b7d77b2d37094f0404487d33b0fc36d392a3ee5e74fe868deabaf62d1a8bb6f2a277ec4299ab9784fd6fcb51e1c70c0990de5e5f0115f59baec45ce25d6d7b19fdca46f4fbbc72972babe2e97e583374611616baa625faea077ff5a1a73fe52584ce2bab9bed5b6faf21ef63cc908ca0866464440026f8a209b55fb4100d2030282e84cf043acae3b1800e9a08414453b1dc7362e0a7eebb02e317d9d6ce6e70cd86246c01af95eeeeaa21faa4bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbdb8539e7b464da7bbcab1e6fd9e3dde3dde3dde3dde3ddb36365656565a5478fb7ecf1eef1eef1eef1eef1eef9979797971eed3ddeb1c7bbc7bba707080808c8811aa80706062646870e175cd8b1e333cfb2e6cdfa851eef1eef1eef1eef9e1d3b3ecb348d070f991edea347f3f6e8177a9d78f778f7683c64647af478018692974acd5bea177abc7bbc7bba5f68eff1eee9f1420fb67f55504c22d9aec01d86fab1ea2f080781422720481a93a5aaae6fe6bc2c2b93d55956acecaa73349291147b69b98c1c198d58565ca8cb1584107f49ea9bf9ee49bf4148b7ec4543d79097972b0821d6471c4f42085f045fdcda980d3708911812b07da10d5d8e6dfc2251c73617843f570ba693d9f607fbc128a1acac499dd2e6a54116bd4222cc31ac79b1a010b6c2d292f2d9e20b9f94183fa9202a6cbc4125e83179a720da727261a244e57fc9c14142e5f01c399a37c7c949155838e1d922c5d351fa8c56a3a3341b1dd440a8264c38d104f584ce16fc45e5ef207cf31f2eb1a75a52d8e62c433be85fd775d113ebf08e139fa094cf0f14a0e639f1cfe9743a9d180a5094202a938787878787e7743a9d4ea7aca5a5a5058651905c2ad8899453e226299f1f2840a9542a954aa15028140ad5403cacc3c3c3c3c3c33b3cec8453ec63792a954aa55028140ac5c3c3c3c3c3d392c2606849adcffe40014aa552a9140a8542a1500d140444854f9cc3a82a954aa55229140a8542a11aa881801a88870e1d3a5cd8b1e33fcb341ece8347f3f26059946cb23abbb33c3da452a9542a854aa15028146a7d7e160a5094542a954aa55028140a8592c9341e3c64647af4780106870186e6856145278a0bf2a0d4a252a9542ad564757687679da452a994a77ac8f478e105186028956662f0186268de18b01a89a393d2f1d1713f3a1ed443a924a36041a43fe5903c287a10f4a0e741ed41ee412fbcb059e9895214957f666786c6701189816eb6bd2a2a3f002e225b1f8f0ff7e1a3797d38ed892a0f11604fa7674abf6113677329e97e7edecfd3793a4fe7fd4c1842d539e79cbb5ab2285dfcc3362e0d4f110883e7746fef36facd5d2973346af1edeeeed66477773bb7bbdbed42a82ac6232e23ab659c54cadd20a4412f57c9188a0d85ee119251bfd72d869432e67a752e475cb8fbf953c9f1dc01197c5e031c1b8cb0b303ac5a819b006b273a0b5994a00ac6d57591451375c3301f3cb324df20953727b3956a4e5517592451192361a4eabae041944aabeb82076360efc9947dc3fd8e062f489996983a5b629a8c4413530b6e90639abe7345ca341f169a982654638d1c8ea28920d394558c00c849453b5b1b3801324d4b8a20d39cb4b395c11341a64977061bf8b98ca062c7d4590094c022c83445b4b335038a11d0c034311238e959c215291367306698260bed6c5fc0819369a138c3c7b43058029069bad0ce36d5c68e69bed0ce568a279c4c13c70d82a0c489d4c2c93461781dcc175f5c7132cd1c36704308a91c3030609860c03899660caf8bf1620c25d408da42c7345ba8e209377c60c068e13901b31f938429268993a933989369eae0753a3ce42e6d303175b65a3c59c2144ea609b357d0b902d0139dc1e8d03fa58029e2cea8fbee8cba1a8c08eafec9e4217f9c107cd18394696e0fa48c11f49c70adb3ad011486f063e20c060cd3d4413bdb228440c7345da09ded13537c4c7307edec4d799232cde7541646ec641b0233bc7052534567d815ae10c5c4194c0c4c9307edac881d0309275311ae0b2a3f3ba67ece8a8849c2d4548687963d0f1e3c78f0e8e16a429c39d3922d827986e0a786d26a13a2764bedc1c0e2d74a4af954fe64323cc36f65a49ee10783849a3132beea9d8e4623248c82fc40aa47aabf814b6b031187990d7b830d6cc3123e18a8c5d46f29318c44aabcda6e9822befd40aa47fa97547e2ead93793273f449299d9c01a54c44853ec32dc487cc017c60ee3c53c3251f491ca0f21fc1cc39e8f01e902034ecdbb710e001b3e98ed137181a80dc50b7d5a147153ae6eea30ab56dd1681819189c21bc1e5920cfbd33ffa80de1d56947fcbd6b6484e0cebca1e3645b0d892506221f4829dfca16b3a65f3d847289a558fafedee7ec19b12ab39839a7dd352ae837e0dc9f17119ced079c7a64716a7cfa547bd790d5e4c34b48a4d90f3875bba1fa76691b4ebddedfa2a994864a7f1b55ea52a98e4a7b548ab9506dbb7ebe4b36caf65bb27d966cf745fb216db5ed7ab71e86ca3fdf8543ac52a5ca1af5c19f99574bfe80539f7604e397842f5018d80e574021756f1037a33bc8efc003f7e03b5c01e5793f929362f4e8de6190b290b3c36f3dec90c6936298758030473cdd0c8b0b283f8e8b30a2e0028a12cc84f57e0909b28285f6f5bed741e8bb0bc6c8db940f979889fb219fb9061e5606feeaa9e8350fbb3fb56dc65ed9c7f6572ed5168bf941da22d5986d529471a0f256614515d7bbe1ebba4831104106440002b6395c62d9c2836d5b05e74c6bba2f7ec4601b981984f26322c0fcfdda14979803ae86dd5919f81906a36ca8242e1994d8a91901000000025315000020100a078442a1583c0f5445ce1d14000c7c8c3e6c5a3a9747a328486114858c41cc18048090010181999101090510517000c63bf1835ea19db37bbf953e049dc07965895c641345debe40c9cd11e770c9a0b6a8e9fe05fd6d169f540a012c3d3ad560efe6d6586f334ddc2c7723bdcd64ea36b9ccb13273e30dc135899d4c666ecb3d8ba599ab6e92db1c2b33cf6e05f72456329fb929772d96669eba4d6e73accc3cbb115c93585166169fb9da3a0c41515b91abe469a67e03c5bf388246330af05e774d3d33c63ece837b85bb501ab11af7e0b6f28e14c618c77b047c1aac79805a341aff8a46fa4997e902344a2df4686a6c7205ad122b7a5a35325d804621951efd5d5407d53f437c2c42ec348c006f2bef4661c6729c1d14061dd74940b64148000164e140388748b4d9443f8b3adbf14bada4b651ab9e7bd010a4420f971561c5e5ca6156b8c46f414f9b46a65b502abdd1a4ad81c10da00c1a1a57b39da061a32fe39665d30c35090322e63afb4befddeaef84419b0f0b9d14a5452e4b043ed96d9dbb284cb17e8cf4000ed919e491d638b2d607953d758f8ace115f37933c9a450e24d1b1428efc0b3d5a359a5c4157a4df525fb25d51fc59cb1a9dee6f04076f54cba787c6a049b6685276bf6b2f565807824d9b671d6c22f48626fd1c0cd5932e5da6f66bcd82c5570ac431680f47f5c91e909bad0d38a123265bc478eef80d9c101dcc52d737d32c3fd8c748004dbec97eb28ac8a2ae9f611d10366230cfd8d9ee53d6378fb77abe557405b7a15f8ebc01c19cedb01675cfa9ce3fbba4aa25ae74ea28f96e0649cebd604aa651b1fe196d225116b27ee870bfda58149bc0dea0bbd13a88c37ce011344806af88826f3caadb1ea37a3b87aa42020ed2cfe6fc8cacfead6b69d81c0cf5ee43e2c563d1355d3e830b86f0f7a933c8d4c8ad614c1b2ff4a6df5b27b59a654300996fcde3e588d2b0981e3e88533632c801f254bf66744e31394d54ce33481577181b7bd2ec60a186691faa809907b9da190b9181a2fb3dc8a732f6c1e77ab8eaa4b44878c0ce49738eb263341bfa42986674a252d9ec77d9bffd2ce030783d7de1361a5541d887e2ed67f525a7f781d36ae615971c114af0369dd07528a5365477ac0010296b5d1ef8fe80155bbcaf1df5ca7b4207a96ac00b10b082b05960b795b1d0ed373ae1b53a5c5f88036b9cc58049737aaecfbf453529ebc39c5eb967db7e6091b2e5f3c7a2350bfe64567fdcbd15da652b63a3647f8ad6540e519b7f7a995f24762ad81daf00b666fe585453c9556d3a6f2abf902fe5ad32e42e65cb9fc5d42ccc27acbdb913acfef93a9f5d2be204a1a49678f19cd6d25e826e5108106b9a248f2386ab285c751667ee795b05fb4d73f8f34e26571623f685b4e85ba9c4b0779f493c2aa0c8e61045f68ac9265ae066cb8b42f16059957ad538a215be3e5be3b01c97b40cdb92eb059b7589a644f060d273ababcaef6556336a850dedade3944b944963ca4664f5c70f40667d6320501097ee14915eff80b89aa42df3c86fcb93a5ef73a2d372d34b9ff5de570a26e5c49e6e8f7463a7d41404a5a7eebd639ab3c832eda8bcba5737737418be5a39013288a7923271aeaac92c67ce90ebbfd24356cb21200073aa658f65ff01a194f70d000fccffcf50f8dcc7c12036e8001c577b4fc6efda53f8e658f12d5bd1420bd44a77d3c78339bd30bcbb0d81b2e39dff3e3b1a30f9ae717d840853e9751f28fe2e78dbd50bc3facdbb7162993d1dbd1add7bf02b90d7ce448ecc5577a733d5f064cb3537e440ab8c0d52ce3aebec199d3cb09f5dfb6c2e2831091318c1b76c6300c3ca178d433b321e82c0f0c353f82d855b94bde096a61eeaad6a059f54f4e3b7df9b0e34eb93d4bdf11aed3c40923be3f23151e6d3ecb62d14b246c07cc9acafee94c85c286b48618bae22fa803813d2a9931c076542aa0c11c92efbd75268ecc28059ce5c53d62458acb09b95ec98e9e4ba5e3720f664a6d51190823d5a7dd34c0d1eb56fcff87e5fd87429f432c98a5be5872faff0d8d934d1cc2be49a6e07dea35fdeea8ec8f0d24e71b16cfc2b4e91861df39139d828a6c0e9cdb172b36f899b4ab72b287dea7030911bc64d66ba5dac2b8e0ae3d5bce3a79066690857b1b34dad381ce7e27cf559d3e9a5cd6cfeb2224466ba33bcace0023e1506998b000c3831a896e511180c08a8ffffd10597bd3fc4b67ff4647bedda51d98c997e73eac9539e4e4a5db855a9375b67e140c5f9f7a1f3c109ee8dcbc7c49a9abe6340dbe1cfa7dd969af7819904d0f982cbdbe2738b15e497c06a8edc16d50f7197b35b270f5439b8f9c087e66abed2eb3a4be677892f046230171d54cc4046c83cbbbf9f1bd9b1f1f3a953e7f47e59130bc852a376ac68ec4da668bd84803bcd7f52b4dc48b90d914d272125a20d4186c8ec47a7f8fdadea43444d427a54eb91897cacc147f0bc16376e8f8de66d62260175bfecf29677c2686c849337bab55ccfd587b989a735e3b29a96c1d938c52d8ba31804299c7be3799909cbf48b2fb77c0460dbfac48664e9c72f01a66ea683680c0f464904e21ac9859fa2ccea66b685a29ed492b8eac978d81559d6ee04d2f2fbaf10de0afc85488ea06668a5026dc33a0404ab43ce7b7111c8bb36704192e09b5c8d3d10f20ab6ca75a92d7ad4f7bb2ef9395def43171069d33a4c6653f3bb15223889a0de9b172f5a46b6a2312f90d47501b7ff030591c7e0eab172ad312800bc45a795088bb8ef850e051f3e02078409ddff06a7e60c10b5fa44e86f5edbef1c93c7267b42978d453811eb2f2a3b15fb91e95b4142edf443680e6a6776651fb7b12712424f9da0c9b0c18ca50aa3fc13251f23496f3f1f870b5467536b20c13ce39965f40112daf3dc2cd48efdd4089c4117fb0cc31e47abd7b498c58291eccaaafa6b6e4b780e1fe9dd216a5ed05eab2d3d8c198831d2128ffd402b5ac979e4f1ac27c5699e33b223938c5b80310e28d44ed3c659d0196a4ded201345cc0d314e40a1b7e1dbc6b92927f290f069ce9e7001db6e246d2b065695d924cdc194be4c21f74ea584e851b090407571480f87cf3cb08a70dd72b5d251cdbf82195511718690d0c35950542c3337641c6ff0048e572d487d6412334bb0e1ecaec244124d74b64cb6e914c4bea2719bebfa551fefb936cf4802b514520fee78c13bdad3694b43de8ce28bff7dd9e4e77bfe8b9b0d228119bdca9e6161fe2d9be582f6762a7bf5819d0daf04f4aaf948b4f758ab4d5aa9f40b21133ed899cf7ae6071dd29b1d9e3e160e585526ba093bf06a81ff685412cb21d19104abfd90af43f5c104b43b839713300837409084a8966ec2a5391a08bdd8a3579006e2136a11e3b94aa0b63d51fe714d00b6b080e698b0892433da0c21444ca1ca28ae80e91ca21332d8345588f49d6732de3cda784def8f63a47f890f908822bfe3860693ba9f9f20c2d68245ca186f2b9d9008b3a2d31f77979fabfe96a184a1bfe6ad8d96f7cc9bf4075c1ca8cd07220491a922505709ea32a0d90e48b1d0483a74c2a880ed0d2b571834d75b5a212aabe07a96f0a39ccc10423917430e763d9eaae30bf64c8ccf18959cc81495c07c0cecf1a96e47e004ae78e6193389f7d8061961594322b249832183a9e8f157228c5178e7fb3ed9c39830407d0a2e23c426b688b6e0052d19c3a99321128c46fe74b040758761c72a91c4b739ca507abe7059dc163e98082b7febe720a63bf7d45d01a6f9017c210ac7bd31608d7a20feafa957057b7eedd307a88e91798be67c1c404f6725699839a0bde3c04b60e53719e1ba8c9997354defc1bb5bf52b05a59646bd2537a2abab4bc18617b300c19fd235b029d55245227f799d77a967057ca5a08f5fb91fee90d3f1f3fc4c865aef683a2410c38ee1aeae36f730fe599b95be1f38712b9ace6ba43481a75373623e37368e622903eb998ff5d21062380a9e3e0add2a4738821d2f492058a55e4b54c836ae47c9672dc585d7dd05663e0241dbadf9411fe2773abe3aa8610d10c4fad5547f291d3db58ff2872922fbbd346bdc06f3c2a350acfc1805e421fa9bde039bb7a81ece255dc1defab8c4c77cb4a767e722e6249e7cc6fa61d5a609b5673f9e08fb3a6ba25a344f1a717ef416fb31a6eeec1c178c8bd2f773d8b25334bc17a356aeb8839ee0e9049b7730ba96e2836c901f05811bb4504417ad2e219fd54527808adc5e0dd616fb0c37dc789c35797b4594cd3f24427a07c8362d4b8d108b6a0b3bdf980334591d3ba0ad8155cff0f6fc947c26ea671c19a795596747fbc8dfe2f6a325f79c3f7e6758c9dee8ef9000865bd1f2b11d90756ecf9e113d3b5406a0128c0449e825f1d4990edb80902226116cb164e5d78e16a670192630078f81b2ff224948759814c0c0bd12081e1906b7ff3f7615b170b466c335e3c4a83d1811393ded0479101eb1bafad3196345d52caa2cfa1a2f4071c041d484fb0b10b02908e71b82ac511c24a91992e06a7e14a27c3de8160eefa070755355ca8676d0fadedfa3a22c04ffbc059981c72e052e7a40ab1457fc18069ca881bbbe2e0b3dfc54ae26cf1d464711e4fe5915227e9163dc3e41fa1a3b8bfc458acbf951526741812c6b1ad046b814b0601aafa0b2b2a0fd2a88152b01394f7b0b31ea693966e4df095b445631ea7eb7d5b18046934e214e4a42c811abf0428638fa0077b7ad7d20b94469c5657074e193c3a0a9148088cca9fafcb834f8057abf5eb36e2ff7efd07b10784ce8c25280ca1ecd82ef5b2ca0d2d0dae09627858efac2509b5e55426f79388786e38687c6724950442153287c8cdd349bbcf2d60cd632f08e4011f8f63e1a9786f6c85d3629b9e394f5dd76e303f1c17bb146956a28fd932b167189e8d10a31d56701801318df0e00bd46c48a6f809d0709bf88967a517724fc6e626e64572f9ea2a0260b356243411ce5c88ec21b75c8656949eb3d608a22c26dec7d549f916dfdb9138b133d60f570bc3034b1909306e9e24b8a1ca1a2476dbdd3fc5f960d6c3fab62abed28fa029044acbc2c7b6edf0c1b2efbf55130c1592f00c7e5b199c0cb94b97bee4e71b923ac27507cb11c5ce28d339a014ba4c97e7ba8774a03f5fd61511a07dd21c7537b857a47a120620cb66c1352608b073477fda3bb57e1d495b8f93d7dc1311fd96e0f0927149e8c800d1d0ad13387a2f85b0dcdcb8cf2794be0f326e88e8e6bbdc8cf0d1634d3d824e2d899a5671aa53a0c856ce469f32eb8ea3320395e40c53003a9d661a42b34eee53a804a5558b62fc074722047a136a2f016102125baff3b562920b51a94ad13a7917a6c005aa7fe4da19fb58ebce05c235ee936a5b5419a94d43468a8be5ae0804b2cb6b918dc94de06c94a714d5866f7236a2844003e8bdb20480419724674c45a4271d7977a72e6860d8e0bc5ed02e67b7b4abdc81cb95813f2dd76d13647d85013427c82bd435f20eb1578149e117334f4885be53c442595b2c40cdc2e46f0d8a635b56d00a1dca15fcfddd355e9f3a3e84a8fd3522acf6a2e0a15b181253ec3ce0ee58ae2607d9655d447612aeb31b257b385f890e9ad331badd8d95e1ea0b9403a8899b4dfdf72b5770f1c9e2c651daa9e246b0057b5c139e10f3c9b6401a2332de517a72c855277113d0757dae01e1fd9a922227c619d0b27117742b67ed2bb2a1856c182610addd684a704abe40fc10a8e32c244fe352bb1ff6bad9706e20614961e2cadfbb9a12dabd633c9d442f53f35f97299e4cb596724eede98fd2db984ee7735dcf9925e3852ba36d9e4362b485490eaeed75bd6e216be2250641dd6060560d56d38b26e38ce6424a8ba974c2232f984cf60c9a6ef546e3821bb29a491f4b5b3721b22e42147032ed484e4ba906da7b8de2c5490d507158612757a45ff638e3c24d8b73964f109952115c681355c90678839e584faa5932c40495d55a5757eb105de958fc64c8db9300495abcb120a28e7150511b340c49a09740ac151e663986911063af1e47abcdb1b8455425ca372866a10b430594a32c0a5bda99a282d113f52b8a866f5848019e2a2a3dc0412db37471b6759c66a1d249aab968982526dfc5a960252b270498929fc3adddccff88097223644d7a846974cf998eca9ef29aea70cd01e33e717b63a87d8b08ce94466abe06331fe94b8138c60fa120bea2b9e3686576bb16f9e75814d6a91503f5d407091c294854cd1561823027f69ac23f72ee184b12f70e1cab529d3bc08241f6ecaa1c7c4a6b4c4ab2e279d71b280acee80c53dcf405c78df239fa807f54e9257dc261a0a4014765e70e4fa6723da613780ca4d0ee69b14fdf2142c09bef521b22a9e9c45af4d002dbe914e3a6ba1c565ea856980f11428306185b5d2cb5310936356fa2bdc8b5cb4ede7c8b732688790d8aa3de788e9cac210309c52912280b4e26f992afe7a258e7b2712c66a0026ca31b2a3afdc19efcf867b09049196a4ee76eba8eae2da6f54f5af3a8ef4eea40bb09996ddbda71790f7cdf25d8c8aa13ebf5ab1ef19251f90144675243f0319dc3419037f06e38c178a7256aa4c58323376d50423ad779c1e75331cf10dee938a89430b66ca62441091ddf06c79e45f4c30af3dd75ee00abca15a660d4b89f7264a0bee63df09cdc9c149ea53fae74ef4d76d3299b5d2f90355a40f1754084d4845a9c5dc1159c4606e5278cf0c1241234ca46cfdcac70efd3e95adca4060569fae0b2fb9cbc99c04733b1bcc6ee3491bab5ef0a7712048ba024464802abaf0d0e39a41a6b04769ad97b01d3c5410ea33487fdb9dfe06ff78b7f1a39850b4bdc8702e70d645e37520e288d1857f8ee1e5684b4e9fdc45847867d0a09b8f53cd74fc5fd1d80481f2820bf30828b474e4cef00ebc7a56d0c875f3c73b08abb0e0d2aeb83c7ade5b4794406d32c272834105b9e1666e80bb580947f2edf83b039fb8fae688d1dddefd8017f43f6009d02665f9914aed48bbec961eb1b9de0af5f7775a60c55492a211ec341a1af26071bf6342e6fad5b182ea8f9b839ddc3d80f56cb54b90a0c720b08b167147e87f4423911458976342882c2f1897e4ad2dafd75cc668581eb20a240e06001c9366902411c356adc42c27488d5a9c5d569923e9d4eebebaa7640f561412c835a9827578aba770a5ea994b4e7044c0528b5c87737ff9c65e8cf77daf2f2515c4f681a77aac3bbd90c0f857ca426f6033ddb2a388617ccbf640640cd1a29d44ccab5adf3e1e98e2fccbae8b6e09f47982e5b2312c054c6f96b4ac4a8c1e26176aac342d23bd4e760d899c40cc23f512bb7c2c3226a4d286648dced8b71b12309ba59fe220e7d0eacb8cc94fabd4c99de39c0a53331a6537e91980965ad4c5a8bacdb33abbe5cd5dc63ab063bd6aa71bd48f1f40b8b04256fb18a01525c2f515aa86fcfe9a3bf0732d8bb5728c25c214912d3276279def0c23a6f613efa8807e8114de11422332026dea5c95bc8c10cb791eb660b8e71ca55a490832169130534c202aecc4882866e917250f2757ab1b15178771e70cbe1fe1544f9e9c02cac0bc2252b8e7f9b18272a88e3cecb305d2c31e834dc07735390d5eef5a4dc28ba1bb2171616b4e2bbbfa91c110a2d18dff459e5c0216736519ddb60334e272aca2da47bfe9446300383f9b43083a05caf9d0e2fadcaef393e5a7d217838cc771deb0f25a54c3ecd995c8dabad825b52869c3f45710fc22481e4b5ccfc265aac4b0d74d96c66c4de57fd87bb97f5ea3adb3cf955a1205bb78bd5612368ea2efa11c9d4c3631e831379ea6a50ff9e010ccde18566328ddd510ff8344ab9411d15c067f20d5cd8f9ef7c66e34afde0f82d3dedfb675b307dffd50c6934e0bb42a5320c07384171beda427d837625c935cf053e713938dc7e2921dd6b8a3705409143cb8a13ce645800e63300d82eb020f07993d5e1b69459f7699d3532aaddd98035fc788f1136e1e48e392d3e6b9455894bfa68a5d7669cfa6e3e80849d58399bc3522fe30c6c00343cffcc3cff25c675d7d5ce3850bdb010a8c0b5b25b91da280aaa8dac3da76a22a6d0cc53026566771fd0f6ba8a7c5006423ce7ae2a222136331b2193b0c5cbacea0b7a84856efc8289e05f2e4e4de892fa54302b016e7f429f7c1aef236916731acdc813657a842b5d0e792b1888b4190ddbbd61cf357b789a5a45a00593e1e738833e84b3de2f84234332feb1d8876d441ec6bb1221f1f6c7092f3ab39bb8552eb9efcced2afe06811e08905f4c01279b7f7569b206b7ce97c7bb6ac07fc742b615e24671c522f892ec9aa312e9072a8e9e002034d9754533cbcb9541c1b22baaa7cf4dc8576b2b039f881eec890c08067fcce3b3a8a64643605290d1f5c09a918136d239d5aa8fd986157779ee09978bbcd4ec3b9eed5fe6b8681181333af27ce194d65e597f2b9323fa1028ece4f1339f474587e88da6dd6412bc70a2880619e0575c4829bd330fd9eb05aa76e5402ebf599065e9cf06eadd9adc803686ee0e13d6e0bef194b9f36425c68c8877e817736a1385116183172d0bbebf18c54d76754db4e3811684db0d74c6108b0a3e606390e7d2aa0a65cf39cdb00d454b28656475e70dacd90f8dd5b99082eb680423664ca50b32f7e0b60ca4b6294daf88b2a7b31455b692c024910dd2306da6dae5fc388239185a49093d1bc98c968551fabd53915b92639276bd7303447c2d012ba8533ee00b8c554560931310178ca43aa380b33e7090756a2ae330994ad4236fca1f5f35385b52118a2f7166d19aaa85420bce4a0473a6a5e104ae7b624b585f87b1fa6c617083d08d7f1e6294464525d057bf399a308040bca74b807cedf3138e18a95d9ef2c2b1aa433826853b086e9a7d67254a35975ce1e0c4ea5d752536bc9554d5269de3964963667afb88f90f3c2d64d780d01df4ab61e41e5df4c2314c8f020b511db729be39d803a66ce5fac332dcfaad193b0e3cb472a894c26c9514a264a2c093a49696e56ac79ae9e3abeb72f58b27595895bb8bcf6c8349a5b8fed6ed3ea7653866615c8dea7372bb4c315e32c2686cc11c66c0c8dd2bb4378efdb7cb89e4b8238b812990dc790cab608eb2180996be8b330dac97a99122b7186c8ab046e5592424241bc0c14313a50d7835879b5cb08cd13282bae355e6760a79ad17ee4303ad74039071fa6a393ad0fb40960e64fad5d83294f3a8ed46640d4f2a2555c4bdfdbda400f24d5fad7a54e75c13402fa15c5311d3c9d01f6a38b1103a41bb47e1ce9bc20bdc5c6070aa674b606d1bb2bc3038d55bb4ee093395530836ed075f8d20897ff704f10cc096aad54761f3c73646a1c95320eb797772a9e2a5a6169ee6139e6eb592cb1a81238f839eb519aa0c34fa07ae70e2880691a536ff7d833defe39aae995686adb3c60741cf75095f61e9423211ae2060afe27fbb58192baa7afaed50781a59c0b604268784cc99ab161e4408762e977f1970fbd425407df5cb00c8994ef88d9f1ecef1e85365047e9a12aba1b6bec841d9e7463112e9133fcc70f370d50d9b0ca425fdf06d2f9d06fba8099613d77352ce200cdc3d044407a930a6c4b384a6173e055928f2b77943546e131cf0f288f086599a4e41e31f663b88715d1e74f0d0f8cd85806a4fee224e8e1cffc88f8dcd4e1e131e3357a59e1cb67607164a0c547db94c00e7de9705bfb64102819664c49cc0f5ce2e5f898e6e35168e48aee03cd21a036a37817ad1b4d16a3607c39221985878f8225a6a1d7f59a12000e224bbf926d5d12115cf8cedfb3168a4b79b0643450aa9c88bd105cf12fa8d3bb2337af171f149dda47cf942b6e28a84309386ea60b6788a85655cc212728eb287869e4d71ba3f4bd85bd02527ec62e81e0d618598dad7f57d380d51854217914de4b794c0d15ba7ceb2fec55d9132379588c23a232978a1552b6d4b085d0879d6f67072368f86525e339598bbe227112e3e1d798a0c1131fd4d3d6344cf196e24474fcd67800083021a00343e0c00cc3842a2dad6109615bda3d1849b8a8d8daa0967367a1c53973667112fff29aceb751a0d29e50408d767d8562e6b5c9725e1f1bf130f368eee8e24c84eb9e2222f7c02fc44ea7a780f00d83f825b8f7918ad1640c29f5479ec1f9e5daabf1d83842cc461e70128a44021ddfa65f1bea6faece2afdaca88e1cb8ba289401e389b4123a5b140a09bf5891d711c215b901e2e5e2216003377fab31b14dc8fcbca4e1abee17a78b59778ca05c054c8048ba8c2086b1a2d1d6dd59a6a2588384c582d4860841c284c11622214d1f9c325c70c34883df02c42ace5c83412c1f5fd9e1e46280aa9a934fcaa0fc812c0c0b5d85edc44231a5e541f93e864c0b6ab61f9cc250964c51a17a8789229b03597db6b094887ffd4c74c89213fa1a09779f29f3bb4ef64482336941b4f0b9447cbd5b2c7438115fcfa319a52181e8418284615fdfdcba111ee2264d5a74edbf8d9b668cd2882990efb4c889390f3783f7d2a5ee17e8e597b89a7541f1dd8b871f983ca58f5c678b6144abc295b40ecb760a1c28f59ee2f8f666cb67630b35e144a025a812f545910c7d9553a4b70249fd9f42d5351c79c493b35f94791356d454f37d51d42239cd53ed47c845593d1e8748ce0c9c5029e359ffc65adf8448fedf799140e7aa45f8446d5d35e1165c5165f8e0c39b3061e7290abcf02a2abb10ca7cf893e3a1b1c444a7972c02c6cadf2ad1bfd7f473e8e72ac735f79a9b891934f1edb275b076451a4f0d851efb28a1c2f8bcde5010e976d60366cbb7dd06d7627bde105a9417afb558a7c9553f89640c163f5abac5e74c4280b1d0405f4d07c8128f493c926d64888e7858c8633c2a3c38650cda8ce09172f5773cce77f41bf94a9877e46bbd372cda1ddfe78e4e43be6d18928d26097d6386dcf3ff215e640f19a38d1d07ec83599fd500a324bb181b2434b0c5c64dad915a612224f2ef3a039757e61ead0e7a21de891033039c4a0619644c4d7711b17ae7c49306e21f7e4541e6097316b17020248043bfedec2b353c8424b6ea9ebcc952a91c0ddf4f9b90d0179cf589e3d53f11d330571d4e8edeaebf7776f21edb3fe9f555f67102e7dd775138b17d8b785255488e83da5ef10ba059506fe875fdda6f5be11f9926c79cb1102a7460ddc6793d51f5fab130f6df9d14d04b2b0497672d05077426ebaa4ddac0675cb6460f02b9abdb9b7ac45c0dc7ae9b6cdc25a06b0e39cf76175e7e4ebbafeb5cee20f751d48777c8d088e6d4f3874af1809898d70c19b54ecc09b71575500ba3fc34b83101e7894bfe79615bc1484a6a43f892fc4bccc3cfa0f1651aad6fb0a7debff56d501e8564030d6b5f50c77be7bb898971af371c5057dbc4fe268546f6b847483a0e2ec3c7a88b3f7399da8ff9b7ed32d08f4dd2a1a95e906c48eabf786ca43fc0ba14a1e011c518afaffd9f299019bcf77eb49e6984805f43c5fbcc7ce3d4f5941e741d929c8a3b7cb5f329e88663da68856257872c0b2b6b91113bd5e5c537aade6d9039a5d8d850436665046eb0a1b87ad0cfa2e2c86a1d767285670f4049a7c312a93e6cc88ddd2e1759d71dae47594de32a0712efc22d07397fa6d64dcf3bf061c1f1c6c31862063d94614705c8f2d57d278f9e1539b034ad018fabe53fc0fdc185340962e8ba38f5ecb46affbf245a85e9afa34d59d39566d88ab0bcbe0497407d559c3a261905fb518f5f82e2369bd051939c13fb3371fe47ab8aab2cc2faadbe3f3cafb111f041f1249556d728b6ba59310dd6fa180d62579a3aeb37347d6812cdabc4ad6fa44e51b8088411aeb9f12248aa1d21a7f76f2aecfa3887768390dedff79eb760168d4be074d88d10ef1ff29e36dafe79b491d6bf7bb98a69436b05bda991d7272269e90dfb1f647550f672bd087df114d449160dd01b7a6770ecaf8b7b4440b52002d9a3d6690675c2a960a05bfbd32fdd757d3646e9dcf2408632fa1b85bd644e7833528b24b580562523bb82f5040e0b048b7a715ac239df1b7a8f7ac6224dac3851406838f27b8ba5bc14212da955513dede6aac162eda611858bc2167c862a4475556239c240a4cebb0a53af32be3ecbb22cf4a7a55f96fb6b44c4cb9f291a675088a97184a17a2f265507ee08b427cbdce07e3728acaf5d2e54a256840bbdc00674564b65a5214cb02c2fbcbded07d9644220e27eb215ad972b56d6949773db29b8f559a9de035fa6eb7973fe8b36ad7f81f23487caa659595263aa3249dd624dd6df492874b7c5c8c9535a8fda8cad69b6183d095a7d2a9df9842d8da8678488c4781b1c8d6e7a6242d29913e9990bf278b34f6639027197581abb1f0001cc294530b6c3cfeec3f0322fdff0cc5c7b9e40b1c867657ffb108ca9339d009bb26a12dd54cda853e2be2ef910910e4e75b4d5581f8b08f7f78236391cee2faed375c66304fd28b79ff0bd988f483af2df42b8b72c56ae60c810e93ebb624ab7a4fc2b9a485e71c594eae5c43b53514d664313789f8fd54fea30a520f692e3caa23dd871653d902e219affa05d92872fd8bf0432583f3ed393863dc3c2fec45919f933064149abca35ff858d796dc0602d0ee399b6a5951727dc34e1a571c0e62b0ab0b81b736c2992b3382a460e8263785f2ba82024be07af45c883fc36e1f2a7ed55e1325343c5fb4e35f52b81e126bf4cf076faaccb644c3642640bee039e7019414155dd841bbbc46cb070c4c51c01f771e0b9a98d7a5a220b7a34f3009e555f2fbbe9886ecacb379a4876e7912f72d41ecf3eca8cc336164da001b3a29a5b034faffa3d92e8b21b3f447b335b99b8ee81a5de1fb475d354dc160e9a65f1880f0433d36e792606aa2018de1d14e421b56671437416e22007b2f14507352af451c664ff92609e55595341d4ee195fda2f63d3e4be05ef577873dddde54ab5f34ac517d45711af26ed975066fd3b6b4a1ee4fd6a391778df0c1672f3e2310a26ff13c23a68bf3300c2ebba9865747914e95e6c8c97a5b70b3508d164cf729710b085ddbc900e2940e2ddb3ccef1ea92f10900310c90b054d3a0d5445c7347d3c30888d0f0160c3660cd5142ee498fc0b12034a4d1b1107ce9639802e032db506a04edd0b16b5ebaaf2b1de2046fef991eb01c160f731d64e9f69d27881a1f027155785e32003f73d5b408c0ebcf02b8458b4da0e69c58bcc5653c0439b3aca776b77b2c815930334c527f0623d8a967076ac5236a8805f536b27d781de3f0283717b04d96d068c980217fd26d822ea6ebb077b888f5d3ea6422a180d51517debf23266c4f0cc3c9c91c6cbbc4469e9c7877b473f8f6c2699a2109bd37a22c2fad9454e6825c6481cf97a9dcb55b503e2d3d10b0e21511c76868a522f9a010cad8a6d170a78cf3447d9843814bc30ac074ee739bce6ff1db323c2a5e3de82566643200f7bffafb14ba973557754df07c85a717d5246ab447fd7f9fa26d7279a0f1e82eb71c7fd102e47e572b4e2eaf075391797ec46a4e707103b2bdf35dabffdf23f0dfe8dc46d1a182b87027809c595e544eef45e34b5a6cdc1c3b81bbf6a579cccf87065d7c867883e53db9150ac665c668c4dc0f5db7c26238e3973d8855fde21abe615af3e672447b03b046423d289f84afc101a5b7f0fe02c6173d034785a56cd837e16683f7465f2872d8481b2d0e822226f139cbfa1365fe907bc3102e703bf60d00543679183cbc21b6503acdb6d7925a49b5d22fc6671b6a30933241fc62398be9dc6395a66708dbebfb2ecd8cc7db52a5ddd185da01b01bb7ea766a80ddb0573b6f18288c1c765b7646625a084cd5234914fc2097480c73854a37d26a9d170e1394844471014d5d88430af87f0c12e8479c131577648351aa659024d4b8cca128cb5403df6e8b6354963c16835d30d4728933d8e599d079f076a48f75b7dd83277dc80fc83ed225fc8a8272fe8cf685d8ab4f29a028095f6b564a867c90817b3ed00e19692ef7cf4dc821219ca49d5d68439098862c868e6c2aa7c9e950e99fad1baa83d97d465e607d5a1272daa9d15cc65954c33a417c294c2cca0702a6ccda973aa0248ba77a4f65d151e2be5dcca33e0adbef344555d3613d7b0ed11c85fdb81058b4786da1a736fe6a8feca6e15f12e9c09d154df4b5f37f59aa09e26fe4f1094aeab46aefb28362c7aa0679ffff56bb726cd10cc7379a861a603176a879e62bbb1abdc39987568d6e06f428452d1a6bdd2246329482ea130ca6f4c2c051733528837e3cf2e75ed5cea984eb6cdf21af1f57e4baf7fcf44fece33da849449cc5f55a3ed52f2d01de04e2b697bd47646085683ce3004172d5471e6d706997a9f2b219cd4840aafc781db43defaeda8447741fbc8449a90b442b5a964d854d814fd1a79c7d85f259cdff7dab7b4c8db3d7202b7894986082b824fbe73cb783f7e222c2f8d260d073688d721a714169d412b39f7fe32e201c6a5e6a565b84e1bf527f24432743f56e184179e83fdc402d295d30e8bce1a1c8c9395d92f1fba123c661c56de39c631cc9d0ce96762b5d79a0c712dd4d4c850a9362442d6cb148ce20e9d68d8d3b496f384bac4ae11da98ad13ac8b72f10f5bcc2cb0be76c182025cd75b1a882d731fc11aff9fd5a55766e13761b61d4f535795b8a9ea0b31105a65c3ef2df83f756f025b0adea851ae16427068141ea4a9fb4e11eaec99204c1d069ce343ac2e564700d7b57d1b6280d0e0eb6b2641b09806d775669282d8d6a8e340127d584d71ef1134e99e2111338e85af37f8de5548995e97c2a011ae27603ecd58c43c20845d922eac24afd6bc02687bfebd99d6e784cccf240da54f896b52f1c155b49e838935befd5d71e468f65272222c7ddd97a9138890a8dcf2213dd294b359c3207c2206cc6a2f0a940432119825fe32441ea116f305b7f85db60eda39d4ea17f3bf0c5abe26d386b19c661fabb8fbec3cca9366d02a5eb01077d5d51e699b10e269df556410314648831ce9d3e20d035a2927c34563562851b60134e7096e75ac89a8c53f1aac21bce15522810156e79281df0156e5784d1120871b910db68c0c3be97d8dc4baf31407d34846c23b655f9cb79c39d4e98be00813d923d1799bde5f935fc805ec5a819879c296d28485b1604b79f4946a9220bec828788bcfd8a87c27536e2031d21ae73a8632d3bba04785f52362360aa32b487b2a488c3df89c8b8dbad75f94fff154390b2fd00cd957375f70883ffbf75bdd3534b2c8f2862db11debd69526fc69757a354b4bbdd822b6cce8db075aafadc01af816a14b4296699f3cc00511ac5a95410c51949deeee8d4c4fdfe1e8c88060d32b88477f19bf2ef0366f02c281e3dbbd4ddee102c87d1f5dc2ef3e6a95cdc5e26562b689c92896587956b6e4306848469dd0494c3a096c97a1da53fef18df953114bcbfc7de90e49a8dfc1cbab8c46ea7ab8dd069f022c1bb20cb07214fe710c637f93399ba194947383e71180f304daac4fa581155a2ea47e3a3b24f33c91898c8463c32adc11a8b59a6ebd2e03a1cbf5c3439a10ddeb384a793dbe495a61a90375aa9fbf24795e27d3da2b691e6de41d1871cd6ad275589fb11fe695330724a69de7eac538581bc17f0ae10b24761378e90ac1e410f3c93b8c8335a457e6ac312ce4d9f932de886b1e0d67ebb561724c9d54dd891926ba984fefb9ecc1bbb6fd74feeb05893cf7aa9c8cd5d224544403e02703933986a7db5ff6221246d9f234e91c550a464cb19a96bae436ac9ee66ba06a9f8e54165c4edf4379711af99f7699335a6c99e34196abf9c42f1290deef49408a46749d5af793a0c62cbb645756fe1d1d7dd8e96c1794e44fb484637d2acde83666d04679029bf2873a6ff47f66027814158249f3e238d207bae8c8f2b5f92b370a2236fd813952ce9d0c226151e7835187e2a99eb44b4bdfc57c76410a4d5b89c86592255e619a187c74bd71b54c5af0296de54a22c3edc903dd37292594cddf99148d9383d70fa7a91b19b2ded9db80c8039720baddcbbe73663d251dba1e871fe5dbb2e9d9743b367e7d1fd7b32f39923571961e0ee2e43d74ebdf225c5ce047ed4d75231170b31b127eb5853909616eff65c1663b9d1e808c4e9c33f7aecd3420613a9aacfaaf6f188c7f244a736b8c87dd9601be139a5c55801fd3f477a13d786a94c91b27403b1dc6b28ae94a8e8dd2a59e9490314b1eae520dc7ddd61150b216b67d0083d58f6e0f15d2053b86ae9ae25000eafb00cf5dc252d44605345431e91974f3b5044706704959cc71b4800919ad78351feee6c8df14150d969d0ce061ab0d69673d7186f5fc08a6a0179745c97b6d404748cf43b4cc867e22fcce225304780b0382db33609ba4af4cc01d9b814edccfb5259276b0e3617ed464e15f44f66cec8fa687e1bb28c581b819e35e7440e7f9029d793ab989adc368a5fc5e824412a702537cb81c11278a1e363f04ee37563e480cebcc623a433eb00566bc973934be49c569735884590944f6d347cb5ee44a6892af78e7c22e1b4f75dbbc21f3bb5c18ea854569c8283ca5bc75695275c2e61b76231f2b44f09eab1023f017e7c0a5e4e441c4bcb0ded2e205d324d90dafbfb450fc158a97a4130e015645230ee1b64eb09b604a7d605c7eb6ef66b664d80b7c029f4c2283ddfd2f342e23c2f64d228aa8648bcc9cd89241b3a18c57a0a39a185f1abb7441d5d2f56408f5cdea305753a250118461c334da1fae45a6add027add9cfa4b57f7fe08ae77ba9ccfefb5a7cb427082538baab1496af1a8847bb5d572139dd8582cb9ab23ffea553e37326f16813dfe72dfa91ffad56e211c78e7869d107347131e8501806dcb7b1e5f79c896f2c509d0c69f7007fcf6f4fdb88cf4c7af34c66fd2927d9cc8657863bcf8edf25f9d0b283590f97d8dc8b24f7062dd8ec473013bcb8d33c446f481349b290ec8ab4ebeb900607a84c86f41ad435aaa5098c4e137c67df631219f490c1d6e5b127332f1964130531892e23e0d9cf7c7512b4e72033f034306c8b37b0a997a295ba59b140535f4ed92dd544b2d7127d04ca1a472d602f31282fa1b7d41c5e0bdb4b415605d599046505b541929e19e52e0f60e287666a85468d3b924dc4e44f51e97eaa09b4fbbb89631cd81ad7707594b2dd2adbf2b6155c723bf2842d1b88bd46d4f9e4af9fe146d4afd52c2b911f9e4f844f78cbb3720a188e40043001416f1d1d2e78040187044f8b2bcee5f0d9d52652b4506511821694052f6876089ed077d86717991d75c7d70a2dfae8ab1e6b24a07b8624d30e4a60e5b10c6f8e94cbe7c313f35dd8a57d79a33c1551ef6b033a1617054123b1122c2a37206f26a6470814b1269560544f9f84f206702160cda8c3f4e2e317763969043e057b1fb29c20e1ddd2d8628fe1f6fbc6ced3fa8c1e4d92d1e050a6c47d2b00ffb8a92a4f22949a804ec4e89172bdd061a7a8475ee07bab2641ad5caabbd3eabe0da0be2cb29e886bb6d695f627e17e165bcb07a4873ce74443963406f570437e42b47412a856c7068d557fe2483350a35f57f962a2b78880d1fc35ddffd84358102d6998d94142ae666e285c2d10552a53401553b18bf0443814315abd16a7fd66c54c471c08f6eb2da1fa1ccf2e6df56e86dc15ec2a3eae73c29d22761cbd8c2a75fc2ed23c0242446762097aff6e048e875446640095662a0d511cbcc53454e72b5ab27613fc1ca1e2ddbf038e433eca238e4c733d0205521de50e96b68e86f3e37e591beda3e6f4c1247a60bc848ae80061634b15096650444e4a446fdc83db5f755f2760166a51f26ae01a4f50f4aa6fa3ef7a3a64f95b0757fe524bb25b3984c3bc14da116915f1489cc7919958661d4b8cb6c0fb4ad7a2889c918dd1edfd8a41abd32865d13fe776a3fc36a921a4886ea3b05f6ea579b265c166415e417a474b2b9244366c2282d5febc9479291a16acb177cfd152122735dc7362ab359f2318a1511010030473e3e11b8c10ad759f6dc51c4ceda775d877d6e97fe4eac25ec5250b5ab3eac4b1f91df21009c9b5994300831fff397a75a36aa1243c68a8957cc5a200949f7072fb993e85e5d3798d02e2bf05779ebfa4fdcb472b01abfa9bc6576c04d4f7ce537fda3ba9c16e9a9768b0c887e5bb9d6b97979233409b02f238ce30a0a95373bb8e40ba856609433387be629e4e8f98f9aa54653cb39f8731c517f2d7458b8e33feec7a36d3fa5c527a70d86293676ed471033b6cfad944e1ee385242e8bc0066c685892734d8bc163311d6552a93e1f04f3de1a95b4bb4eecef0e536dce43f6a400124428aa4f8a3d20dd3d0679d410a14ee949a66e9ff0744b264d981a320a3ae59d0ccfbc6a78bb2786c88d3268537aa874e8dbbb050826e9db9dd4cc89b6f89b68db3ff47ca48bf789dcfc952dfec95fa92a1f552315e56b35b5ef0c563b0452e0281e0bac3f2edbada96634280cd6e675c05a05d57ec7481ebd92fb7461559cd098cb613cf3d13bb60fd2349ed8ca7419521b41f879cd0183d90d67f66e794f8f354accfb59702543364a081074081564cf9494d764969426f979fa59b6df72104d36acf32c6cad7f5f5cc73e864867f3333b03fb648443b178037267f01dbb31e5fcb2f1f8a97627cafea0737a13aef4827ac69256ea975edc24205381edfa5f85a19e4ace2d80dc1a03465d6f3a12ce0dcab9e1eee254c02d62a79016413ef131229c39a89dab2eae9053a59da070800214d4491079b6ac3e78fe94f25ac567eef781903a3844783d26fd035a6ddce3853ac99a8d3e866d8cf20484d01675ca84c9f6d88bf4dca21a140998a9c7df2b7f7279dc10232da0af6674b9e8f95d2f944caae19957b5407421075b7888d68e28712e9038227d260d0f792fca1ee73c275d04d31e31aac19728e03a5b0904c387e68e5b79c00469b852b44c1ba6fc1a37891b40b2dd55e875f5f739f8b89e541434726855e110e80afc5e64ead9f019e67d3f1007f32cf734da53b4b4ccf9a154c1c441af6d4e3bfb8a954ee8ac2f83fe3163e8b851a1a4748e4d6c8ec6c8b2445e6e8b9e4f21e4bc4fc9e2b1075457ce2d635d2cda4431510c443603cd442d7dc9d0a0959538674615dc8c8311a5ccf9f7a50776a2b9b8f33ce49843e464f0cc1b8a32eb5e6b7e4bc4a81282ab35d1d25b434ac17565a14313015b486611c8b6ae35eebe47d752cca7970f813b26201d21f513854eaf33e0df10a3efff16906f1f755b9be3649d7f977d4691fabba6c167548a563b0791e0b8a455ac083cd599218c946f5481ed90ae0c2474dca667b265468631d262d19721ebb4472ce5db6a06aa990122117bc4c261a55dd2e9f91a2d9686bc08ec9df4760fd3a71e0839f0e8f93eebc0be05befcadf4dcf5661fd0e2ed24556abe90f3450fc745caec5de721cb7a499930ce5c7465d56a6261d608e4da086ee1ab70ca5bba2d61b485d3baa6c5cce1fa8ad55ad714b4280208a3afd01815c3a263dc010cb2db752bd6ee902dec585f46649312211551f25c6741d5ddb571bec0c2f880ced9219a735bf231ba3e7a7e409540a68dd8b9934697a886920346073438fdaaf788c3f6cb284056e04ba136e16485572dbba7425ba01a7133b3dbb4a49f625422177043289d485f58bbc04d17532c9fa07a0ac6435c3e160b39c0111af24c5eece98bd0a228cd0fd080b2bca18830ea402ced30747e542503f253387b0991829dcefe2aff08a724303d66b269e48b099386e5549ae9e5275634889504c6eabd8e9c4a200695926bbaef2169d134ca96863146a7b318858e8b6eacdb46c900910bb861f061038948f1e7d4987a5c337cac6ada7c653545aa68d19939f09a8230fe1734bcb970f06c7c66460d50a40423d45fb210ab1f3314f3426a3bb40797cb4cb5ee47ade41e7ae28913a4703f0a803a3cb0e6941dcf360ea827bc21bc92baaf87557aeb871fc04937d664665d141063daf5d796164bbf8814f82a186694e009ba17bb1190150792dead32a0410082f06e25c5e6acdb737b954ce7c434ea184003ba043164c340be0a1d4a2e420b450fe88d56cfce3e711eb9257004bc905e165434c45346b7395ce02431ee2d70c3560e90e12da55d901a8316a015a317fbfb9d7c94479c8a392ff51bab5a988020eef50f69d741619eb0a58a82b42f78cf7e8fa60b695f0ff414fbf0d1b416eb49da20985c487d4bc19fcb96bcc269d25b877010530fb5c89f083646d82fcf792dd2c2c99057349015b2529399014c4da55563c38bb5a361585deb5ca8057494c5ce0b4c04ca97239a877abb7ab55e3dea7633dfb60952bb6578fb95a5dcb09711000eacf47b42b495caee5545cf1ff7e563cd9107352a6d1ee625a23325abfb35400c8c949baa0161d7b2f236bf87f9cf02ae18fbce944cb0a081e2b859037d5b56915a1693c0ef4806baf5d38bb58e2b3ec51965c56b81b6c3abfc5090df68cf692c5b201f3e34c68da0507e8b3d15ea583998bfc3ff038dfc6ad4542ded4930e11c12ccec264909c253257e96d5439e059a8402a8d12b6609e8c4a5ddf3304caaa18381a2154d11b94bf1a4a58cb1ce7475e48fe51d9a71a858b253ed1697970b993dfd0e5144330c5f26e0b8862aa358a8e10102f53477ae7b61c4143624ed3ad113f7100fb2cf40bc22bd0dc5a2a0467dc51192e62c0554cf0dd67a81f60d8adfd6b1867c920ae9af541a1ac457f7f623d5df55cc1d22e5c1c682e06f735bfd992b414baa0b3856690122dec9f701fec72d21061da9f1847d80b876315b20081556b5293719f7a1b50dd60baff3fead1280b8cabdffec999c0b686aee05b6c9d3b56d67d991b74f960287e2e772bf1946c190375c37a39c07ead67a9d1fad92a50378ee0cb660d45e26b819a219265039e02319bda40fd97ec5eb7cc5211fa6d08f45239d12defb3d071b3332495303a2d78033e221b3fb55c4b60823b9bd4a7a746f5afebeaa3012ee2c27786d9d34195897a88da63b9cd64f41904b3c8b4279b74894ae03c9fefb1c1b3304c53c1395a13117935712837689beca48d63f6d2a61b2ca7fbb1c8efd8da2c32b5f3e95d85e1f5b864192b253aff44ac87da5c614bc79b13fa84cf4036bb2c080ed75cd600f020ac86aa909e9b620f62f9f78cbf424d5f64786802956daeb19c378cd5ecb4ff341f8680be7d5b169b41430294e1c104d715195435c7614f80ab1d793d039d885e926a0cf760abde86d48fb97f015567916fdc086383e83a9316dd1d2274282ea0003154715f8dc54769f4e69564a86a1f92cada18ecd6e06a9d926ab48e97642929fb806c2ac260decb2510ce916b2367d281170a2460879f8f803371b588ce76844c3a71d740ebf520a2088a8df1fc14b181c07442e502456f1849f9986e8545d49f8ff4fd0a8a21c0b0f917882dcd1ae20a34aaf36b5c2b8d77456aa6d9935d4632695d510da1481e57b8edfd62ef9b508e3a1890b3f3e592b8d7ec079f4167d9fcafccc999558d6c2ff1e7602644d990db72a52aacdf159c876f52c83d140f20122f7b276a50856efcca411d24338cf7376b2cbe2270b459191fee8e961cbaba9f2f329aabebcf50951759f60f66eea1a0b44fe5ed713d0f33336699390e6e29e103f5e368ea9a70806640c46f5aa2e78778278bee874f729d4e69662d946527cb9fdfa4665633cc467cfdb19fa808402a68a45b6a949fd44ac90b115e1a880bb3ec3d691c49785a4c0eabe4e25e804a422bf046aa6d2ea8fdc59bf29c3678dea95eaa898473042d3faa7df62112798e4711726625d82833528dfbbf7fcbf64134dbfaeba4260fa95d687abc2aea152d19da796acc500d644dc22cf975a441ce67c33509ecc8deae954c8ed9bc0e7aa6e198059a67b64f81a1fbd5d62946cd5e1fedebd7063a9083a776a0906f2c8a02b9c20b5448b8447dbc3da55eb229896938d7a0676ac2c89fdc3cf02780b4ac3705f07511329a0ac20feb69b2e93a283f6a70f03311262d4097cb1b993ee1ed4cebebeb9e7c82e5010a040973afc22ccb91b912ee0a7bf596d739610c1205d4594cc6c6ca48a97442dfb705d3f05423bd8f0314f3130014d5eb6930e00e2dd695d16d4aae85635084a61fe9c30d68576f84142fc96d6bf78b1c1c8e006a15024110680b746f6fa78141e6ad5c94235e8911e302e56ff246553eb2489ae15daca842b738a2f3ac206ffaa4d22c82ef165baa41ada13f78eadbf6beaf549f17c23fa588234eebdda38bb7775b1f91a617ade0013d56d52a11d742e5e3f51e463a167101a1bc674440299ab5ef3dbb5c941b66f97c25df47fccfc14f6626eaa97b25dbeff33ce5521702c854d6a38e8dc7e46362ecf01e490e12123f1890158716bdff6355a5131749ec0839895fb1d8958fb6390960ff922364d474e32950090c3c5d25302e3b4edc8bd41b93dcaa372df1730f57c6b44001f35a4b3088bfc93e44ac517c1810c3d58e6974568989a1d8ed60753563ffffaba43f3023a5b81b5392db599079ed7c0f855e187ab3664ed73d438c87c0adeac57e2f3038bd492d76474f17a3a3ce39da58f8eeff0642b26e1e3c9ac0b73a140c928dba64f532cafa41aa3d9e7b5198407d7a456addbe21b5d211a6718d00bc1a52ab0506d668bc8811dc5b998e640477215801f3abe0bfafd1c52b43ab6e0e8a10888dedeaf52f741bb805398b297cf36eaed235eacd73a9244cd04b3457a2f752b089fdbe0519d27f702aa687a4e024533bb5506680dd72dd20d42ab67b58ae9f2a3cf759b5e3c8bb73dc73e5e85fec65a1432f52d40dd89ae069d17fe060829e8970cffde9f3bd24b73ba436c3a0f2e6ef7503d0d31f19783598f3ca00e21e391145dc2bbce23d42f789d790bf4a20984c93e833d6db731e0d4605d0067000b5f824f7b05d5d20d05ad206343506725d0ba4dd8a3a9c8e4f436fd1ddfe1e5ceb51e43683955aded2dd4d2fbb0a39db30a911ae6d11a8b18a719446cd8d73219a2e39cf5213cd6b655c6fa0959f4dd4c4cf08c526042f4da3b41e200bcb1937a47276ba5fcddfa91679c07d5b0ab6c4023f661bed1d40181c1c5082cdc137a4f39714b0bd300a50d9d3a55267a8942c49dd03c0c66e714f2923dff6ccf1641d2088b4a92256ad8c573727b5cf767d4bb8dbebc2224cf690750788c7aa89aa3eb02c1dde55d3c0430e92117dfc98006979ff4c470cfb122ef5445a8946d281f4e940d3930d690f7a827bf57d260bb6eb0ab10361f88b6c210f8c9ab6f8577787eb8334ae594e93f88ea62af34a6f0f4d5619a5da35bab6400bb144d8cc21077810d09bd2dd28724cb7a58c80404d4571b62cfc00bea492e810cac226d426054f2c9049b83bd216e71ae84d2d68f5dfc156a4fa1174297853aecac17a80e2ea0c836f6a9a43d8a1aafc8ed6a1b45bcf88e7a891cfe9f3e4932728272afae6620b66d8057e0115e7884d51d517c984695d108b0b9947d5c13260e805606966dbc7e665560981a64761ec8254ce0393711a81f8602add6ea0dd68fdd7dcc0c5b41f4663a60482eaf1c2185f84440073244d6a9c4ac84b087e826ef163583e30c4982ef15e1ea9920121d61c59b36d44aa7d1b02a356ad7ea78a5c85f9dd773aa9d6f3b889d20628a0d5aabe36e08a2ca122aa82d913c6eb0a5f8545b986f0932007ae498b59eb673899130e775e2129767db3a5112c6665661a0854ff6449190ecc7e9caf5c4ece1153dc48a8a5dbba78d88cccabb2f2227a2fca1534b50e5d7e730393b584e1c19485cff1c04cf8c6979b0a84508924cad725c0275a1d208e35336981d2be677cb65c5173bc7110c387d5d637b9953a108e6bce348011fea73013692354840e67f73704af7cdc7b0787245613cba064141bdd7e83d4c29370f191bd08ed1c953f6019ba16d4314d0e7404f430d9244f68bc49b9a519df025e522bdae6116fa3d48ce7c6d7c60ddbc3c81ecd53ab3b5c9a72cd641b3ce2a2c88bb74aceab77a9ec274756b52fd2453a5376611d13d9f2224867604e86e35a917a5f5f7a789f98a3d932b96e0c4c9567a070f7bdc305222b6dbe7409959009161fdb1e85b022c428117a0ca5bbec0c49877c9d124e7c263710f440b79c6b29d21d4aaf11fed5526ed13236d1242335191fc724b7ff3136bd24a33785915c0c16c9521b6db091dfbddb4e211655327e5eae7d2078baaaa5cf507afa243f1fa2d07c68845a4fa937c31fcafb2635a069089ec686e24c7748cc7faf5928761b887f855f886504b6df71ac862b68c082a781127ea32cd64d0b570812b35a3250e12f99284ef0609602df3ff0d2ff489f75dcb516ec9d8b967014164e1fd0367e164c48a34018d6d266b73db5d9bf55c2dfdaed10c3c10ead6ac880ccb869b6aec57ff93677cac4f3f38f289132d60108c83cd57e262b78f479d9f203009a03c77691732e985733a20ea876fdcbad978d1c6d64c2e5ee25ccc31424b3a5fdc72172e19df05ea630c42db9611cb19d89b2d31b2528de40c96f4c4d25483bb0f0838a55871a65609429505f9b97ff42be54202c29e8b7d3da5b0906177063eec863b96578f382e80fe3d4d8615d1618394dfc9305845fa2a956ab5c554c3a8932e0805b278e08b76b1469cd448b65864c7fe4248eaa4154ff60afe0de409360439c5f18d54663c749131962fa99c431334ad2f59e0b7edcf2608776905b6955ad20c8992dd47f4392e6c64abd188888e429504f58755d84907d4d0705e06ad7324ad52e746616c28c206359719376258ed826dee1b1fc694c6f7c2556ecee3fea2269345dd95f26a16af5fa38b1d8b14b244892bb57866f6cfcf9cb56237759733dac3ffd4e9a7bfbf667bb810b3d57558d13afc1e2af762013c7795038e487ce946d5f27465b085d54b25420ed527d6e3be2f5a051c342fd39a0ab54231cb45506e4ed4a5b35350b5cee9e9c543325ff123a3eeb737fcf407f691cbf20b72e0beb7159aa98e94a6868cbdff8086978328d871016ed220d49049307566dceb05762f0afcaebb0703c9c05d7f4e056f3ba867951712efa30806f4ec8edc943dd3e0fb40346b523e8a5dd78d46a7fdb36e8f342c11157925988ca9b0c4756029eadad2be0ecf8da5bff6da75f5be62270f88b6a95630e6a748b86c3ce3a00bcb63d2844ead0408fc768e67e094b0e1b732048476137327e931012a38f24b5b20b64319e0be43a630ea8e8652c1cb5cce3b5c7cdc74059057a777dec22277efbb2c188d7aba02acaed7588ce736d5ce9d2100624edce8374ce8d47c28d5a2db3041afd413936ac3a45eec91af648741983d708b01a054c8f672787a730b95eb125c7b15c1aec778b9a757558fa33a8011c8b5f575c892a0496e0a280c76c614355056ef45d2de6d9d9fa4ca6945b2822b5619dfdde46a3cb9015d9b93adf7b8c806519a84619381cad76e1fbc7e677d0b0198e93ff3ee3ec8b142f4ed137835690d3998bf6fcb13da623077f6ffa126b454619fc4b9946e1b1abd8c31c765322486dc31acf3853cd6361dfce24f096112ae9b263ad0d7a826d3cb897680426996036d347a8951da26df10c9af17f053208b9759e006a00977271e385680da3e98ecd11b1fc2ce4d1e91f81993d3c9048a0a57e2cfe816c64981918fdcbca5c493c52c3e822db7662340ae60de131f922399e9de607561d0b48f0565497eac30b7ed575031644472fa3cf0bcd9fb7f1521f9044047aa2ce88b4a28e2553f1f80a16e7bd25e79cbd86e9f6cf62f909f5cea71a7bdf6015d75fc1a7fac0111c36071bcd3fc8d146b499d2d44c538566af9a27aa73a0dc206a667dfef5d43bb3985e24a638802581db6de7911141af4006292105c809f1d8f8faecb06026f5cd09ea17e775a3995586745296ab633854cfc726e659c0d2b96992c8ce1c874d2617cbb6d301f2150a332cea3ab7f7e6121271ee213a6b12026faf34dcffe1434c0dbb05f5b50b0689deb07a9bed21404e18ed3e992c3b0e5f90b5e44f1b92ea4dd1942b43f8c1d6e0ea079881710d634326da44f11230e670b2616513035c50ef81e4c3420c8f20177bca0c8f9efad02f1f95f21e1a87acb7474708254804e6f8fa152860e130ed17c2d9e8ce429cbd8f6ddb403261ae210a8a6fa07f65ccf2bb44c9199a307aee80c0cdfe508a2885c8fd146119ea37a6eee3201f45564f7f0b2ba47d56ec6346ac3de846a479b15c15a807f5c63a9b7bd26583a3381c6332e0d5103e588ff1ce319d42d539314bdc6ce3103548cd4b79a89167c25f25dcdb7eec478afea322bf7a842dc5d6eddd0b49f7086d4124d49ff5ef46e1bb8abf166eee8faf91c622bb9719fb089365def964025095ef5c958da405a8a0c769a2e5bdb58c339bb82e5b822f09dcd40d12accbba202838fa70e14b010f7000341d8af76222202ccdb6875a2da5f68babd41a4b334b22bc774ab3eec2c2c79310e7dd081c41359fc3b4b03f5e214c372ad7964535572a238410499a2d1ad38ffaeb0c6b4cc206606fe6093cf3610b28a3bbc930a5c26d8b6bd4e5d57e4841c1211cf8a2b47352bfa1612a1e689d7919d1b484f28bb944410937cd07a251df8f8ed37a2eefcc4f035287d21dae91140fead78c95983530b30bf2508e1f22032080d93cb6e4aec464c5c64d1d009b40ef08ed95967e9111495909c5abef6eeb6fb16c9aaebfa7b451263afac99a9c2dc4695f8924bd0e71123bf2407a88dc95511a6178d28936500397dba42f1002920172221637c2a4822093f2eb60f5796a4431c64fc411721731ba3e17f7b15d525b05e7635b9088dd0e9a64bd7fddba8d6400fda84fd3b84b21815a66e89bae8186590ef4870f1040e36f82433c94815362394f5b75d31b3fa56c0cbb52d68f0ef4370addafe5312ca069e1c900dfdf1cf7eac3ed60ebdde9eae05e7959217760e5ebf4ec5b745423b5d786dc64f7b36b59477ed7c81dab042ae3012b7abde8ea4707240ab157201a1211d148c9bfcb1f901a3043eb3119a7957de565712d5938608656d13347f863421ddeca93ea3b2d8a6c883c0542879acdee59096c7ef6b0c78b5dedae795406d25dfa2046c80a277a11df3c74dec5ce4960f10597638bef5da8dcaa113211026bb758ac2cc18f503dc7029018c0ec4a4b8efa5f0592ad1de19083540412d273415629c4380fbe415b302612b826eabe44b8497a3b026dc67bf701414b345d203e4582e15868b9a8c316a75ad8d3ad86f6ae549d29fc58b34b371e3009ddf76401e555e678d8419fb21f8a3cbc2eb9119c0dc9bb0f61c8066f40f63bd1c190c4d4344e653f7181bec569f456f6c7069500d2ef48b8bd0ae6b1dcf496681e63a454e0b16f8de8eed59b8860f7e872a91cb75fcc5a994322e550273926c92dbcc86a82064ad27cb2e9bc305aeac910f52be8d06f50ba13942015d9a2ec1709a536420bd2888d565301fa2d525d84638afa7957127c8e5cf05959525ffd35632c0861afa4af10d498c12c9ba43656f33e12f9037df2cd2239a965b1818c723786f25bc9ac051e3d0fdbc37ac35e709b140dd7f670201a95a4547f8c0d4b4bf7196e6292f4c31dc12da9c455b4d6c25f65eb723a0f8d68361843834aef9f0f91439836bbf439d87a4c53c9fd9e76793d5f78542ecbdccad3bf0388cabd268ac4686188161c07c0d12719576f5a62eb26b3f9ba811faeb77f36ac151822f4d7adc527d57279683ca8e4105aa9a9799f6869c60e5576fda8fb3ef90161f74e5aaf915ddb1a81aa8c9b4bffd6a51d31c7dfec8d3edd9e51d822f9407ae1e363257245b8b5b2cc013a7ece7aff005e0eed60a5308f54251c240de2f814aac87c7080ab333590d3f99cc645c363102e0292b120b898fd37db1142fe1a38890b26eb3169a2c04265bbe06f5c081812c4f00a68ff0994503ed75e75d422b4f4a06dd4f62327d1ee535691130824a677f474bd76fd2b0b8920adbb8ac9735cbd190447d212d5553d58e2d29e73795877ecb4928b44d65757a15b055ee11330f2e6526d4ffbf799fc8229b76d47ad36e9e0a045ca69145a6b584f499701087901baac43e022a6da75ec4a4db999fccee2d8a86572dc620ca555ec6bdcdc552a6cf535b14855a31c6c4c1c6500e1c2fefe459804f4b2e9757a9c331e3acd6a622f3139e0d47eeb976ebb0da558c9ab7f357fd6836a3cf0c19082910b387a523af655e0db9ad96eaec58d37e748526ecb122a4d07ac0e74f6b6eb80927a34bb34724117aa59bea11152ea4aefd6116e5aed35a255accc77ec311e8e118e571c250bbebe176288d1e19cde8f8b600386a3fc212c5720731deaedae646cd551b586bce7848fcc93233552f3b28b2c276372183dd7aa7ab20e881b62706e1dc793edcb76fc1afaa26cadfb1d05499104d79b149afc2e6b99430cb86f0e9a431f5ffed66773ccfee2d9d9832da8310ee679873a1c763ce52a064c49b1ca2c041b7ef39ee7cf0d0ea4fbea97c1883b185fa7770bab754d9fccca7bec0fd1b164091f5b4fc4e37a72d05bc88d723cf3660853ce7a719a772da7d8fde495b0e5f40f35b7e70f833c4c9d8448558ef74c80239e571b564e55c3e8957331e5dd2212402d46101728f1de183a8612ddfd8a74d84d239e1744b6f6ddfe1b6a286717e2e2f29dbeb2a2aaf57fb62d01c0d25d2fa0c4b1bad17800a25c35b619b196d2f4324efe99f1e74298137b27d06fca639766ef6e39c28f2167529ef63d0c4a6fe434c482a52d43a74102a8f94f2dbb185bfe008c918482b7ee31d2d6e071068c39a65cb7826612ef69030a628221ae30a088ba75d3179c756ce1143c9cabd0ec54ab40e7ad1eb251f534a6c23386d29e210a43b22c41d95b020bef51b28701f5d8fbebb832532974276a7241162fb36604c1e4388288a9e78db596f3322992948c4812c15b92abfbea8a11cb60795f390fa0767d1cdf49d94e3d6237f588ed97a211fc56447169cafef4875815be8dd30adc39ec24b01c2dad85219a55eb5c15cc2e47ccb4ff61c5d770fdcc1d8a89c48e5f5cb579a0473c360d3a8f28012b876f77ee10092d6a3acbb5093fa2b33cba002fa8b78fbf36628cc19f8e4059703e50131bd84495118b2fc3cea49e3773bfcd0dc413ab3eb40d29acc6101860e8fcc9f66f60afadca36ca7206e2b5904346dab9f7d32ef8c8d7d76eac652811cef337a3a97123d108244bb48963a81f97218a68ab3875242b28609226337f332646cb88746d3f629143f6b7e26ef422c8c9d3d99dbdae6eadf2314a762b0c7c592d7766b4e9b8281e34222151a9e8a093f835afc139e090ca3ef2bf072aa44292852b8d5b48a14715ef8eaa953986130b55096a791f1c7de81b3ef7b7df8bbc6e1c810a723f22d203a22b86289b554c375c8304eaae22c193da5ef3c224037265ade30c40eed5b54f3b6f2d4ccd1551267bb10f38b4d6537992f8a7e4059a884f987bac4e1f723d81f4bced4cde6779fb550f9e0e84c4e9ca51ba9c9d5b3ba9a84a9dd7f110575c9d74362aa40f9e53b174c2f224adab5dd28728bd31435f9046d0c0d09bb549d06a77dfb755616a1cf509e2f61bcb3589f0304bdad740de56db6202016ae22c01a675b28264e2043ef80bb2004fd95616134980bfe9b8a6d8461d44a1d2c982cb776c26c3b8981be9ed14db647e5185a5db658aba255f5d11e5e01bd68e1c2211b0810be7ff0922dbe4bd7daffea7ad566e10f410f5fc68becbd84a8ad95587c227932dd336b2804e57625e1fcecc290edd5e6f889a9e38a207cfb5c7edc9d8448890c03a4c55d36912f38cd8e80377fc27b345d2f4b07d27a85f10ff42774742778d5e32366a19a5b8d2660f837913d4e3790d7b5d1c70c6c6f167c972b8e5a0fba1635c27e85d8c9d2ba29b2bd5e02365c18bb71ee34381aba8e5d4610cafc3d53f48aac4ada178392d7ba7892b5ab05732c65c87a47100db8593e19ca8973c5b207d0e083e6eff989b23b6c89a0f7ce712309a36e302b55b683432d4cd7c62cca775ebfb6b5d0f6bb738804be5c012cec6c4e717890ba4c42337a8f144cee9184622377487a4009d2c7c06b97e2ae4698e12653505fb9d2166357eaafc68206f983337d21ce5620fcdf8cfd5469bfaee08ff8abe6a824aca64f27123921d2d705895770bc64e47b1e9f7a1c90e9ef87b68d2cfc944362d5b821d9effa2302ce562cef4445ae4ead8346d06908d23dcd4a08cda63100082ac99dca8c277335417c5de2e2362b71ccff6717d05ff7d46048f61230007e7721672a7084af4551886ad322a12972fda8ea710237f7165d0eaaf4c1058e8dc19663063b64d8ca0d7370dddd7edee02f4b0435475e2c539ec03c124213bd8acc1f9e53d6833251d6e14d61ce2e13ad0258dfd978b85c7e8e31dead98f9c31e11b08dc671f3c113ae8f659c9ce2a943052104ea1b21e88fce9fbac507a3f38fea93098fe142a2b61a3f46e2c4b1a9a2f550a944002da9d05586140905d710e09d83aaf7e1545b2bf307945b4ce8a4f6e031b0a4ef18c381c865b6504cc76e27bc019d9b2a53ebfe21cd867045977c03d03ec3b608bf7d47f30ba976cc3186c13c8e26c25dae84c578b3d5195d2dbc77eaba09f969636913249290339054b0590055f987b6828228e4806fd9fc30fcae74273905fd20d1191ae8123298638ad9e751616031e5ff156350460a1051035e5a5358ddf88886804fb726bcad897c354986e39e660ce17d539fb86a519c3148109c3a49935eccbcd1098203069303f60ce60ca60e29831eccb4d1854a60748f0cc17e60bfb72b303a60be66c084238c28828a820eccb8b487b2788a0008188274e7e806a424289e2a950ff559000f2a03d4d28f2f1444c2ec5119edccf91128da756a2fd67fd9faf4d3eb3f828da0e2414f74934425eae9174421e89776f275e296a7d5184141d91d771985374425eae89bcec93d71ac6dcca645f988feb4bb72b5ae769d27fcdb8b0a98c99155860a1c4c396f1d1c868c4aeab9ea5dcc5a698af5636b569689fe6d580fedcbeb2d83306fa3f0fed2b7317169e66733d81f34373354813ddae3c1408dab30cb8881ccdab956be2748be1ca27d3bb46690d1791a70dc28a564d53b189d5b52bf2744ddfb44dd74aa8a9a9fd0caeb9bdfa34f13f9496eea2e1ff8291497b46531e9ef6214ebc56ffc0513cd120f1ee4987c463e916cff04ec0b2a2864ff3995b9bff8e609552e9d69a17f37f7465b55202b26525ac74162cec0a7bf17dc1f6791addd3652f9b4fbfcdfff37499ce758c75eee493db35fc8193d53ce30f49e3477e485aed5d30ed0f0c651ad5330b4dc38dc161a8432d03a7638db1c66803d36819f88535ede3df0d3a47cbd0345c161a868ea143a06934b0f65a4b9362e3bff106c8c7deae71838e26810ddd723dc3b2d0326e0c4ec15ce7a4d8e858e7a4f048e1816764293b52768840c61b3a67ec89b71c5d43dfa0655c167a86b6419340e7a4d46aa06637fbd81517c7aef87abaec924a6bce117bc4e8966b18985b52131d245eedd32fba4c0ce2d3c59b68c329167f80c41e1d3f2ad678eccb65620d35fb1978ca6e79fe213cfcacb679e479b5933d862e13bb1d699a368a350b0b8bd029aa9191916ab4b28ae17eb9e279d6af8b6369ae8c2bc3ee90ffebcc28e1d5ae0065f0df8f88a311d79b120f4072ba2e13813a50c9052caea599881385702ada3a166de20dd38842e22aae251dd815eae79ace437e56adb1e9e25c07f3d0397f5a6b7db59a55b54ce136348f96010f5de35a2745c796e7d5ae18f98c3cc233a262ae0898882f4b1739b0c19b72ae34cfa979e89ab6e91b298518b3063c1df39289e6c088f508f05de153ede4255dd40c5726094815756404cb30dff77d5aeda41ea15fbbe25eb5935f892ada97a388f6e5281feccb51bb7d394ab72f47ad70a194eccb87d8b74425d9975b14927d39aa07fb72d4917d39cac8be9c85e2c15691e8e1d3ac98ec1da85043fb7294102b281deccb5141eccb51b87d39aac8be1c95837d390a08971225b42f4711d997a370f0821a928665a876d4ba2f47dd6084122504a644d90056a282a028513fc494a81aa8250ac84ea1aa31286030239c78a52ac883579ca2807ec6db9787451bb4f6fb7f6d79b6b06c9a289bffbf24a2c9ffffaac9befcfe974facb5d6863c205141a10cafdd72cbc1afd62dd7f9312a685f8e31c6d85a960030c873f13f983513adb5d65a9346e5902e65fddd3bf4ddeb040c7348ba01c79c73586eb30266aa248ae0a8bf71c8565e0bd37803e348ba01cb9c737e307ffc861f9a498fa230647bfc9954ca60adb5d65a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6bb3d96c369bcd66b3d96c369bcd66b3d96c369bcd66b3d96c369bcd667bf96ccb6f33f1627b11410517bfd61f983f080a28189124788a3d04350966d24e04bf1209a2607e3014b9155114de56838210b6f05f147fb0ef386a1d96dbac804992a5586ef38864819be79aa4b5d65f7e1d86f70b625972b1442f49f291fcbe076f6ff1ffe57d25a4cdc0cefc8380d4e8986b6e5d9ae37b57f26ab07f59d7f01d924b1d6ca45df353947df9d568ceb90c7920cb1e61c9a63ccfa61d86e536c5d467308764c9d22a5b50d94cad2c9ec139e7179c92af329f240c850a64917d492ca0c031572dcf1425264185cc8df172e644b91140349af2e48309132f2f2f2f2f26d013afd0af39f9bae73ff1f77a9d3871e2c489177aca6499ff976042c94f287530819442daf1092d5af47e492041850a152a549020c28bccbf8dd9988dd9988d59196bc2e5b26f4a155458c1bcc10a0228c9220220b1a07dfec58309269c70c209279c60020640e9a245ef25016c02b0730250a240bab128dc9c7aec9b425900155678d97d0d70ea7107905d6417d94576915de401e4132f100c8d088d404079b5d60ab0d62ee0fbf87fb7db0394190165862109a0084e40d900d28d024abb8012c65b20fdff6b0694640b257882284e0d563fcd1c3cc5c759d9809c7400788622c85b0079087214309083f9010f8000042290738ec07f8e80c625cc4088903bebc1d75a6b7f65f57f0ba650da2dbff8ffc91e6df95f149039c89c4bfb57ccffbf0d5158ce5b6046d027be17a88396863a64ffff3f721b1ef1e3e5743341baac2df74a27e42effe593efc96bd9ffffafb88d9dfef98f3bc9e74464db7ef93fd9b36f4b97fdff3f99a3853ab198a815935522454295572b95b52548a458255458268923b259b40ed9ffff9f7c9c5a5a26deb279792d2cef14f42cf3ffbfce29a1f94f3e5cf6f785e57f7884891711d24dc4b5b06f84d292ac35839c20dd586eb3e67a84323cc25a58ce39679892cc61da60df9288ff7f4ba280e11814aa8e18d28de56fd51531b8f89ff624daffe360179361b486c1ffbf921d918bffaab8868b1fcafe377addb3fefee3353caafedee803f50a423c83a2af1e5f75f534aa0a638be148c26c2ee2c2d63a11e61f4cb762585a50fd5709365ea3e21c533a21a3ae2e8d8caa8678e6d5433c135324a5f2e35f7f423b0cf96a85829b0f413d7ae8fc8142567ba79ccbc00664fe004371246be7b521476ca383fcffbf3638f14af1f7c8088a52a381cb0b763ba19dd06e375e0c8a63f8e9f1483c0a8f78faea1b4ef1a7857628205febdfe9ffdff1ffd7af1f4d6180d3ec83ff074330ca06344bff34aa82ddeee8e868955209da35ac3fd0063cfa642b6cd343db717474048369df7b7378ea1c9cde0b8257c96e8793a01d376a20ffbe1d351c1d1d45794194dd6eb7dbedf427748faeb57886acf3f7598338e88b22e27456b23382b3063f4aaab392dd0f699b524a25495e32cab5b0915b30e4e078b274cb01d3d13e4a29fd403a22b13681929d929d929d59337dc0700af0ffdb6fb7a49bbfd7ec61f660f23077983c983a4c1fb3c7cc61cec09481b9831903530793e7ff8fcc1c4c1898384c1ccc17982e306f9836cc1db305260bcc1ae60afe7f67aac0a461ea98293051609ec0bcc1b4215f0bf67850e1c145237353aef64e39f78039c3cc314bf0813aa78fe61173bfda3bf7e4c7b777e295e6ac73fe1c3db6585a9af166dec29cf1f6342bdc6e2bf4d8b271681c124288db2df7568ff163fc183f5ead60613fb75c76c1e642442484480811d1e7702445fd91bc9127f2aec8abe9db164274cbba7ff933335146773efd6934cd81a7fd311e418a4e0d5d7673429c9c8ec59a85b53a19837d3540c4e3f1562995dace1f188617bcd646e7fc3978f89cc1f0fb1e42cc0331efc3bce731ed71fcff8f1479a8735c847ce4f9a620a21b0d897a7820e40ffc720ff1968341f0eb81c887cbffcf2014f0fb78c831886e34ec61470a187e9f431ec8fbec43f99c3f639c032844444444444459e70f1462c1e7ab154f01dff2a703b44f6fe92d25bda53730bde5f4f6cae9b8f436f6bf4ab8cfc6e9f4a6fe232f5d6e2e3fb8acae1a5c38ae1c970d2b554a45245d3a2e3fb8dc5c56570d2e1c970dae9c95cbaa7259532eab8acb2abaaca4cbead22151a6f963f9285449f231d54b4551cd543e543eaa9bea079b5e4e82cb6252195f6dd56a41331525d553cd543e543eaa1f543712aad94a3553a966aa996a76433553ad26c85b605085746382e50a5505722ccd53e72673146d5f95152da6f412278eccc973a7559e16d0fc0261b7c005764fe1612a951a4b381613962ec54b398949f9aac54b825f58cde19405fbea92e42cecb2881d49110da57478261604928ef998a4631d5a09c762927292e29525dc9770a4126e9770255c0987c4c28ed818cc33aae62c8ce3b0653baba8a44837204f3173be3b2727cf1d948fe70eeb7c81c3e43084362f804318c2106c7058e002bb97fc4f13cfe4c4d43bf59c784eb513904d6f4ccaefe9d62f4771e8591ac22f5d02714e86ba898767624194ce984e0cc7d47b9a188d534fce89e76962304e40311a4e353c13930195c57499a9a762ea8926d264ea997afb74eb989fbad387ebb214391deb4e15897a848633538d507bbc2235094e4d54cd711c2188ce6cb4782c5dc75cc5e22a920ab97fa44e9e3b272fcf1df444718a77636e4f07f4cc99834e50a70967612c5d09b776590a9d263606737ea6c849d13a53e0a47891a2e5547bfb549fa83c0b53756a12271df314efb2508fa84852bc0f557338b6ac8433e97258ba905495680cf72f9c8b8e724fd76a3a74b84163565a69e9b364b578e98cd9b0b01c0b6bc56e589d1e9b616330ac8c8e713b437480fcf4565da6e6742ba6f066a775b3d3e225c873a7c5c7164f593971b84d0931c98de1e1195187d3ecc4ce88442297e12ecb451df3dc7b1a91d76369c61cec0b8fa30f4e35909d1977c4a4b937d64a94688bd74378c67031a118ea8cdd925c16b1213646248a0511757826062446a4632e627e3a63b353a66761380623079c8e9f26e6827ded9031c207cfc81411abf5181d1debc06f744ca363be51d99ed1b19a1b6b253446e34eb6acc5cb9d3c0b2be15a67eb097e614e9ab9bd62b1f46f3955d2a9169d2acba9f6fe857989d324a510d34354d5e114f37368cb56ac73e56c59395b5c501288b678ac4e9a58f9b34427cf1d162f59688973bf90405958563e9daa3ac9c2b2f2ad906e5a4f74abd7e2b14ebd6f04b39330222c649dd6e64fb0836189d315d6696dca33cf667d67858f56d7652d9e919d6bb93d4d8adaebba4c6d59795db673d7c22e5f21532915fd697d43aec14f45c524ddb0742c5dd6f963e970f2a751a8d3e96432b578ad2737252e842d5373bc8eb9cac333b212aee35c129d5a84676415e836a6c2d7ae9458a7b529715a9b19da0ab7d093b366a299e47c4df081d8da90f95a5cfaee0f36b4c13637058f5dc048b226bb6c638c83b0538e9031fa814d07c3d9610ed7d824101788db3bd9a56e836c3c10d9723881ad053bb0cdc044d866008212c3f5639b48b0905d16c13d08f23fd8a6cf3582e306403496009160070402308a08583708445db6837e2cb950f6d86dd08f1db4982132830de625c6aa148c61a3b0820f3f6e7f64a7741bf443c70f1c4060a6e0870e911f31b08ebdbb0dfaf1c291ad2a7a26469404fd04e9b2fd38827e6a1b28e867065db65b10f46363ef1df47382bddae62ae8e7033e1bd5cb6d12467e063b2c728fd826900d9b942307b51bb8033bd56d502dc65611c22562939a7c3a3f0a2b1060af38a964af5bb7dbed847642bb9d919151cfa8676484afddc1e136244e45a27087e425d1f7a9fd43475e12ad6af04b4625229a41da27f9cb2778071118f1d163021e3d4243a4dc40c7901c2f784c60d478d0a0a8c96e090d40a0d8154a8e1c3d2110c110517e6631a4b28f1ee4201fb59ed26d900f22fdbb0df2b176d27e2972d9c86524977d5c1696b7bc280739492a9538a9746f0f3399630e013c43cb5ca6ca4afdf22fe7acaa2add06dd6c5055a33555d51ab5c6d6a832aa2a53f3afd6906cd8aa7a8ba2821de83275fd22cfd59a5bd322b7384bc0e9675ed3a2a685aec195806bf17d38cb02f3dc6b6a827c08ea1995ed9a9e9788427ab82e987f189cca0cede7df2713869f9581b9a70af3321706d35c1bcc652e9a92a80197c14000cfc8b00c86c3d817e621cc26024606b3829bcb301fa9db201f8a7cdd0209e51e66452efc4c414f2d932a951691b34d142d1d456e712274cb370bb7dc846521e26e0c2671975d516ab55aadd6da6ab58a5aa8219698a76ed515ad3a9dce853c775cb83e633a0b8b1911ebc578ff2ac2291ec2adb9df79d142633b1b835d562c1c0d426888101da36eb858505c0b55579d93ebac247abe404578e12670e0d941f449a1a4bcd90be49fee0b0776435e45385520ac0acc5f4eb5884d81b989531d6263389cf250545d752b0ee90e294f8a43ea93424979af17f08ccc8e27f5497d78ea634a7dc0d4e78503bb0185dde032bdc849979a0b90cbcd15836be6a2b962b04a9058a9905c39a98dd10508e57273c5e09ab962b868b5181da90efcc68a06c9e5e6ca496da436ba48aeab2a6722491617cf49aad7c353035ae1b2181697a532bedaaa1b6b88b4822a27bc544fd5a3e25101a96a2ba91e2bd52b91ea9148f556a9dd533dd5ad63ee620d9158431df39c4a6522479144d57555e55a482c278eccc773e7244fdc94c2a5865246c6d2ca5ac2caa592a49688644b972abaa1d0aa4aa5702923312044701dd350a595b524b52495442cad64692dad29a5b5b49656221636c4c608e1b4282ceaeb6a52995439f2dc71f1f1dc31c1c5173854cf595c3a225e0e367c769058a990ee3dd552423a13674908bc99682813ef94c3c9c669c7c987046fc5e3d1e0cd30f156275c2e89d065a10e6163d42529a16ea2b1d9baaeb915a7639c4a64c84cedf18a74b921d3a90aa95075d5ad672fa7cba95ae3b9e3e2e4b9634274711613ba247b66c2953a4d6b6ea5812e670a9cde139cf2707aca59988a5385907475089124ebbae6722b89e6a2229926453b9bf2dca0310346cbd9da381676cea0c9605f2ed8f445bfede8701a0eef3275c5fd6b6dd11559986a646354263ae82834365bcf73144d2d2c4339242aba1d1d9e1d48ab7d1a7d4a416e8c09d72ac2af96ee86ad3376539d315bed8cf958188efd88487888393c13d301d4315791e1c9e844ddd3c45c1877647aa3ced3c8341977281a79f08ccc4ed48da28e86a87b5107a3639e22ea64e8989f441dadafab2a14e4b2508128622a05d9686ca65b75ad22dd8a659f2cfdd1535dff35c4394b0b6eed98b75a56ce16b46c7592d4529e2e24106de970da7a295ba7b56919cf9d16275b2c2d2294adf1dc69e1620b1ab64837ad22566ed5e572ab106e28b7b65a2d165d6e5d8570436bd18ea72bad50b64c5d75b97515c20dad30650b26b65aa3ae28b7ea72b9550837945b7545b95597cbad42b8a1dcaa2b5a575d6e5d857043abae685d75b97515c20dad5bd72a4a21dd94d655975b5721dcd00a7efac432636109cc30732a36159b99337333b47c948b9cd8146b19ec4ce6e11473169fa769912cd735f0cc7e91c24d14b75cd3d02bd03b3a45f026b45dcfce7a10432c4deed1e81efbb23cff58201eddf2acc3ce94f8c994c347fe0247c961e03625b85de19693f65e8c7366e950e54b853b2c9eb35e81fcfcb9ea3adc387d2c71c4a50e77c951bd3c7738d767ac67613334cce0cccc6246e01417e972bcdf79c1e23084362d513ae6b1226c0ce62b9b172f60506d4af0965d922344340bc36789167eaa3ad0865563cb603ceff3afcb599ea7c3783a3eb24fa7f36c395fb4b8380caa8d0b47531e692d052ad3db2b86d7ec457bc5787ec1578eaecbd2531dc2aac0dce55497d81498a3a77ac4c674389dfd0bb7a06acea6c08196f24881d25a99f2486faf185eb3578c579743a8544b5cae69c94606000200731700001810088543825916855920797714800e5480485c583c9a4863d1481083288aa220046210866180010a21a214424add110097c407368c02c65efce8928e8983c1b7e59924b2a21c902fa82ec00be1afe8858f31bca848c8c38adc0c73e504c42015c2d2aaa187cbf341286e0c183cebb3873315ae39265ca145c486508e9df5537cf43ab4f492ceda37c7da75b8b34b0526e4d0e2d0e87d274a7116d8d4e33cde805a05b1be17d3f0df15c2e44ca23cb6ac0276d484aa55b92a11d974ca8bcfe64797cfe24a7ff363aa8990b996eb63e198f6b5d005d59f28394a658be3e9471513a6895015e94fde3a70a67d4714d0e3ff66653be28739d4bede2306a3217316e73157ddf75a14044067523a5f5fa8aa5aa71689e9653bad13c12a126c55ebf47c4d8fd397012d02ffd09cd5f3414c6b83065b4d21c41980e5f4f69f505bc1dcc07dc13843e81e402a00f3b528faa0c8f4eb969e92f83f6444bf5c5b7aeefdd49bb23ce6082569080a8118de026b62f566056e53f2966c8f1f1fabb72c0f05e4c21d5310eb59b7144a24070da7857b8b0c4e3fb3f9d221090773162516d477cdaf782790c2fe296a8989e64018522b9ae3b3e17a65bd596cdd42f77d2de9eab0d5e485f6e346135cbd90aad89f6ee1e7e4cdb0f705375dc500d34e52192546eaa0eca634e05576e30a7957e5c99690b680415ca55b238282eca8c0900470b518b0c7aba69c5e89a770abbf96605532b59011fa8a1bd184c39911253b2818258d2991b3c6b4bbc7a32323a4146c151124a4ead6eb2799d0303e420f0ad93a8c5c4a0d512f3b5211124f42493de6a20def7d516c21e5bef70b1e8b92bab009a64c9145959ae7ae499eed877d6437a14db740128950ec9c0dea11528497168d08f951b39e12a97a7222260d2ba80e9ddd19d0064a75a3dfd8cf9748f8224fa2264b2c5483991da00cb04da65331bff8c9ff46c0302bbcf303cff86665ded05615651f57de1b5fab887419a3d917bc0f36839e707ec6990d922569d1b238383e8a7237adcd753510e2a32507453045b910820222b54aa137a8631c4e875c874064f1d1385f617aa14e81b7da73f00800edee589d06e9461d017fc030be278bc4a1b463d2a85ecf659d3aeae3ba14115c7d22aa4b23e98c30427a6ab9d844462a327d3012293782e3e0985a682b0e85d7977ad920eff6b1c8d557803dd3bc964a11f3d555597d85298cdcd7d0ef5c97b3eaaee9f290a19147a513968f421af08c7aaa471123222323b7a1431d30c187499f11294850a1c91a71ced12974aac69914acfb99ec353a99900ac033d9585dcf56115ef93d2c51c4ced110a76e41c9161fa17a49df4f2af4074390acef7df6a1f48b0c18d019fde568e1b7d510750806332a5aae20f6056d9efd621a189746a882347b60f918b14a1301d92ddbc539c5b83630eb66c6078bd140cb2ce23aeff5bf344329aa1cfdeb088a31fedc108b0763208e683d61ea1756db53fa626c1ed1da8b7c8d41862350de02a25bc218b0af394d05058080a0150ca8040213088006008de0af07be37845df4c17fd6b14c02a241ae4087bdc8a480c8c1f3595bf07a806d3b2a8f14a97c67acf00716b615d0f95c46cc9c66115cbd391c3164cc70e14a191087c821b099d0d8ce0d0d65bc8b4b29f173c292c8a1ed9d5d3bf3f420fc558020e3d802f54b57f93fd16c77bfb704c9efe16026c913428b6337cfb263a425eaf905a26bbad029f48bd7a78b8596f507ca5e35a544d69c657436e36bcb675424a362a1b08f8906e4055cdf3fe81d1220a90a806000a724591c273775b32c2574e8de51388e8a6b6743e9331a5817c5aa9ef5d4ea0116a74cad789e377241474a08772643a184a0071479c43340235be094504994aaec32ded4f2191fc22e3c57008815e7e18cbd119f07d2851186415199c32a12e65e8086416040d7db78eec5fa5b2ffe5daa90b3df4ea5547c0a830c9a30ad2a6476c53028d034bc80e8ca42ec520ecf104b439484176a830d008b2469dc510f063234b2e22736a1888f97320eeda25e56883800c9a76ffd023b4f0d93cd0f6b8c3090f62410fd123c62ea1f0e40c1c340b1bdb62360843a0d549372c6a9d88781b2a620d809ac0a4fb6ce1bc56634252b6c69e04e0b34bac76694686313abffad5ac22c3460447cb7b1a6a7c34423c6550a9b30c63634c53cbf24e53f11a965a1c3cd02a0d0e194fa81d15c2cc5e7f94f48b7a4794adcce62d84852ae991458454662620a4a733aa22771b2f265f1368fc4c63ffbe9016dd50ed3f80665205f212d470e8a382d3f72f1e0b63c8c63761b3b61bd9993084dd9e54747ebcf585edda7aca5d91a972c680e5d7085d40abfe50c14e70e2ebb8c425ec3821023802ebc4e43b696ff19666c2ffba48ba0e155185b28f919feb983e50144bbebab10e1933b703c023a8fbc98a5ac785394b6d4f67837ef457b3e2e279b6ed784b84106d49ccbb7cdb1fbf0797c8037d5de8ad3731af747b922824736a10699012e1ce8e220bce0d09850a8b5b7f3f79e188e539899405675ef09d1b39be4e2319a03c7849b7f57f2e0f2e9a3a0fc8222fa5bccf01c09b6f784b6855f9dd615a9e05a71d14cea442f5c59d270aeb31555b49d01d1acbe43b81ceb6629fec052749e0710a67f916a1d0dcfd35bfe5b8350279af234d8c83108b328ece00e236b9b4f203e9b0d88c2f3ac2a0158c53b8f5db467c2cea4d43ae8087a1782e7b9476b6367ed8f4e26aa5bcf56e5791eb061b9ee727ae462b91e50689e478f3790aa198bd820b7680d54bb249a9614930a2cd132d376c92a44adbe35b2f0054ac3cfd14c75ffda08d1968b0482cffc44aefab9d5a0225845be21e021cb7e69024604461ffe7d18e203e6e7705ecab9de8ed0af38e5d2f40b517a055ca4ca0479d97720966ea0150a4b6daa474e2b48d26a9be201341f8b102b328824c8b7f2d7bf0984b466a2a898c4d0c02103fa774524ceb0df1374a2a1843966247de6c25283fdfd415b995cf28aa07bf981f3e7bec7c833bd6a4eb9519c2ab39832e754a42f3a08ddb185dab77ba4b329ddaa4af9648b528c5a9f8c19f324a89cc92298b0f8b24357b98465b2375e5112505a4a89da1c616dd8310ce442d03ee50af7dc571388124249114a83d1982260a379ba1d9554a286760b15310bfbf267a4567917de453246ab80fb1132d877375e6a838081293ddf2e03999dc12ce79b4207b47a2da3d6a0972b212c26bdc9da8c0b1b8520516aef2cb44250a0d65598cf351c1c020a398f94f4441b46facf17c8cb180144c1dc3da9c215401745124b2a8e361926b53ea93576f051b7c4c60565b6cf7fb80399c7285e0690b1bd10250232189a137c15d79d67cc974c28be805379f4e2ff3aa2959e0e42c408dfb192044bc08e481da34204628a5eaa1a9c69db2058a7241a5fbb17726b4e358154ceab4bef3be12043ef93b2ed3ba4e76b2456fe71e3729bf2030b899be6eb1c1a806209fbf8486f5477529ab9601670a8529e5feb028a06a36afc1bd65c2328a65e3b037ee12df9e08edbb1528c9fbef3cdb30d84b14f497ae2e1a593c906bae15a38cc3606edfeb2d1d9c708897c8461c28b7220d4ae2bc6a7344356fae0935f836ed1911df93b00472a257ad6c7f83ab27c4247fb5407a45ad17210437763cf2edc80c559cc1689ad51a924fe57f2571a977cc89347f1921b3566074303b31acc921259b4be0e69ccc01414de930280506a48c278a81e5c7f110379363ce52ac12be84c154e1ffbda20acf6a005971617167af5572ac6a95984d9abe7e9560ee22b699f645fd65708111926887dee859be0c10c01c2060fa3103f4b1ce9b7e4f52a52f88582908c7f6bd5cba559103070f97cf86d0fbbe911912ad75a8aa35a11db9f54ed8b9cc018bfeae06b2122373560fbb54299ead42f9af31ae81c8b0a2f01821f7c3f6127cd46d028aac17d5522fa6a73d2145ceecca7cd10d3e5eec6265798cd1ee1266ed368c61b71af7817ece8813e1d72bb00be046eff600b057565400b14e33d495fb7649811fd7bb06589db710946a94c80c8cd015e6416b112869348c8e18f276b3712cb88a473a28da1b9b88f5a8966402607f52eb62da5b9e84971ad88ca688e16b41759c1009f783b99f6d5c39c9a998e33465bd4bbc1c4a969367b1be3929f40b5c11d7092878e72e35a0bb11b4d6500e387013a4fdecfc4361a62f3032a6a80f7e0d36d1cf0cc64acaa4e7aacaee55a7c0e282783a129d8f3d7199aa870c92934a854f0507a44eea67f79b6c75ad50e2e9ea8adcf016ec08f0989006a59a2f3fed47f2e041f9c1da72467a76224dac01c01a9436f665189eed4ffef0a0357b94f7a7cc4f24967fa080e4f01fb2d18ef339af8e5e75398304380ec530636d2ede229ede9ef7224c0e5ff2e42160cc6837479510d3f1eb7632b6cd0ab589fa42c989458e319e8f2c83176c59844fe8fc447b5d32f05517b3947cc64e0f3b2053a6f6a92d894419be55875736b0996c210242fc622f5465b132e71cd501be7d0a25017cdbaa0a143a2f35149a8e3dbbc4aaba29f01a17213cabe7f96382d7d4abe3b04382bdc4ae6415f99a1b0d6a40e60f622771270698f92651dbdacb194509394d4889cba26f26c0def5b7be74242ba0e00caf868303f9bb022ef9e288c92e1d698c2740c7f5549d7da228c7842f5e2813c16c0dc4bc4e202e424939bdff69835ffed97fb67de9c10db9b434d3fa63b273f506c3016be7ddb2acba8e6e8891b69bb523016f78b703f4baa2234883bb189d534eafabceb3f060700fb5d028707bbf17cc737cb100c8e20555a67fddd2d2b667bb3ba40452e760bf11d8fcf22171b11f937e337c3f3b673ba28a3fa0c1a5e3a93de4568a8f22d333e2039e90ee3b4b9863b79e0d3da1605498986a216367a4718bc8c7c74548e8b161c21a50037577727414338c884f079df20678f595b565b0c95255493a5ebb295eb7029d6047ad02ac2bbfca8ac8908ca5a4a29c7ced4b538995e00525c7be73996f02dd1a95e728cf5efeac53c98d792481a9e31023009df15c81abbc13d24729d795368d456e4515e0d9ff1217699930091db4c19d49ca17ec19fc11403cfb6c6bb71016e25ba77f3d5f0f454f2396979e09d58fa2b33a55fff0ab4acae488136389411cf49ff987f4d6d38689b6f2f5b9eef63fdbc54a914c254f539f809a0aec37ed5da0f1263642b4e40c5fc6708a906c671ba49bcc7fc045be2af0b0fb6c8ad4c14276116539316cd8d756f2a99a5094450e6a1f950c05d81ed4e64c585aa2b5dbc1623451fc9c148014d3a85ca9ac3b4abc3064ba1d08d4168e5a6c2acaa5574d0b2b0bbb260c745e64666ba44aa20e8dea5c5288d3494bfb038794c9608af43c2be01210aaf1d2453444b3d995b51bdf2a1acc9497049b9949d18d9ad3750b4acf6ff9cce69d08cd6e242fa8a031cd2817ef5785385590e6788500cd2eb622cc9244d42feaa0065e4a40c8bed0ac81fd6d4831e212ad7a583784a967986a64cf70bb88407c8488548f8201a51019cb73ec01ef0101a2ac10319b1d614047c08bd27c52e8a97ec8f9981b4780c783355e248efea31a85b39efd5fdac84a08b2e2586ae9cac6d2fc63060a17c15a14241fda7d659dbac026dcf72f9fadc3ef6a15baddb2135ad26ee4a385e4f10acb930a40e17166d3494585512638494c76d238291160ab1cd79a173663223c90647823de3c385c2a6a620d2bda110ce563e663e9402610321581c711b86db775d834cbc58a74ebc1a6aac849856f03a2f911df04a153127e286239a8aa31a99fa18aa64d603cff7945b7bada77d6c0f923ca80d9ded061fc83c4116310b7a5dc03ab40b0ac4c22073e8e779a0daeee2d3d665647ac69dfbd95f0824cb6d43e256c06c35332f4c0db40c29b1a3925182d0610ffa5ad8f2e13344cd7462dff28a73b0a678cb51431559e2fc4bec0b909aa3e14e9a8835074928df2d4b0cbaf02403b86377174a823247395bcc4b5a3c854cc78310c9dbfbe5dd1e0dc34b0b7f809810e870824ff2a7f96118fd22db306e2e8353590c7ebe5b4a5630d3325025fd684890776ec08d23000d8cd8a9a1c958d668b1ab11134ed094945a7547ba4cb61ee5009d8fdb4421b67c3fc2e833883c14e64bd44f0ce742019e698aa0d3db6a9429dd83a968ea15835180a46edeeb9ea4fa4e9bfe3dab5b21aa6ea30ca2a140437575b31964edf403f911e142e0520bda3e2bc19b46cc7353a41e5c07e0b764b00f7435793cbf1c384f01676af26d5f7f2b09f951b08dc17ab269e33ffe2262ad84410de564a1b7c8a2ae12dbe116edd1c6577f8b540bd820cdc85554344a12b328c3604bf52388d2358ba5436048c22f9e10b5f41d214b420546232a1e327b667fbbdd34d1479c683eb6ac030c74b56c9124efbcd6329a014c844c85216d2814a0a9a59efa50777d20ec49a53b70f9d59dd587c69aac9baa8bd7016447e88d114818285e571ee53d73671be35d1512fae679c3ec2ce3bdadeaf0e451c4cda477510495abc339033399c57aeac17abb57f67875218af2375d61f5ad168975812c880a1f97ed49d63523591f2554c9599d8becb10682e29f688d1c43b3bf4b33d93ccafeb3d25284585da715bd3b218dc29267f2d8457b4c183931cb8384f7303a361e0a2c29e2284fe432e300dfa06750e9175a9e04e19a769fa81ea787610d4e2c9d483176c01d779d077fd06da5ad44e76aa75536ed08e64a54ba3db6774baa9d0c0497d64b9341ba11574cb3d860afbdacc1377f563362b5062fdddc884230886a94a6516f596efbc80b3061c19c86839475dd4dc012ad864043f044398b7aa28c70af8928d207e620df8e9e6220533a97c6b5a4fce45636b7057d7aa72f655851fc1ea705e9eb036395321387652098c35d27f499bfe489c6576bcee36783424237ec63bc879c0955903210f2ad2643707d126c1146589fa4254ac78dfea9229b4dd9274690c75c4cd0baa9bd14231d509e0e3d91473144a246d02a58359eb4cfa9728e57162cdcc731925f2e3138d418320d4191a32f68ed82d0c43eda0491e2b5f28f74705aed4015bd400e5e270a4eae6689f1af40b4cde25785901e5f49ac168ce21ac182cb57b2480ab4fb874c495ccfe2c0607f7cce684a9f5d8bb078e044ceda82df99350da89fb767917a2a0c190aee05dd960e70d6e06a0f5ce4354f9c254f1518ce1163ba087441d0797d38c032225b0762c1e16c1b4833262d3aa4eea0937f62b730b14a1e65b7f4a6ecd755c0ce406fc63447bdd837fc22bc8c4a33217a55cc2d736b026b3a76fe7b5b1ac23c26b3a9a81ce6721462a510094a51f7de65d797b646a66cc56940cffc74aa0d81a608642c11a72c45e26444d49bc3c4a50d327a775cd6e77ab2e8ea153036bca5223bcfd8c5b6143eabfae3e3c372ea9665e2fa93a28042ed421aa6820d6957648d67776af9bf8479074378882b24759fdd5b1bf2abe47c213017cd48f9079353e48102530fa12ded24a0e8b004d1b76efb5a202e8af7971fea46fb26d0d9e0a99b6b5cb186194b759bbd6122ca58e51b4486e8b2eec1c70e1798769d5f0a9f26b8ed93b8957c1a191be5663967716c17dc301c119355481bca9ae191e946a83693a2738ee9f22bec930b0d6e7fb4a6e14a91aee0f09e60e27a6c17f63bd0ba6747361339598811abeaa68ce6f52894f0ef4344609c7828c20aaebf2a7de51d3e0d7b9b9948c6ca371084b81bece3e628953ca9e101f28ffd74d4d0985729d5b59946ea49e44a9c81012422b116a03a0a11741bba11332d62d068cd64514f0d96f73b57c48c695c1277218680560d1ddb956dba02b3b8981beabd69d9b3855d08cc44192f2f0cb05d854644e17fb82a939d6e2fc2f6e8eb0c88345cdba3ba85795a056da5fff84c72c976c521804c14051bac54016444b5affb0fca8dc185272d5f6ecd6d05f50cd5ae8ffc81a8416b9ebc15412dc004cf646042b64066c933f449ff8b741866b89a7a5c6ea934ecd08d540d05e444f62725a07ab4184513a1e6ba29ad81003bc40de4a6a6aae9a22947812039b672a6cece40015d6829dd875311d8cd147ce414889c8853da32ff9c53742a227b8a3126f233847dd2fd20a9ec1739e09faeef42e1fe923481c9aa2b01d320bd3c166df34a695de04281aed474cadd2aefe4a5eb39762b116dc8675cdb5dad7c9fb46985a2220b950bac3ef42e665449901e1ece4b913e360d0e65506e6c6a6685598d995f5e1e2a8f97650c33b5de131310606e81b4c589b2f56afba2121ad349049f0559d5f5a7a573736f2953be8eb1554ad3bfe588a884c6eee9d1e86497297d803f24bcbd60f9b7c308c143ccd641aa84db28605930e907c60f455b32cad3622661ea32ba904776fff3bee94b9dc193e9e06cef31b01472c215f202ecca3d307a2ad1aec27323085b36b3292fe4d057d0778337846d801e9c5790654b0dd1deb95ab33f341ad1da15a3cbfac812a9399b96636162e6369701c4bb40fad6be8b9612fc9d28472511a51ae7dd8e6905873a4727c39d41c2a08124d33eb3041cbcb491c86fdceb9b7b326bddbbfbd5736b32b0c9fc2a60dca019832ec151544509d47c0bac4f25a6c8cc0d065c356cc0a179db698aad9ea427a420bb0591ddf30ef3e01f4bcf108242d54a6c150b0b25709b1eeeac93ea3b822ac8738bd0d24506932c5dae5ad43540106521f1d1ebbb5be4bd57f035ef087f6fbc33e0406a1117af18cd02a6855f5129e0940c16df38e57d7306c98ddc66d5b14f1c86d2c8bc6715e86fdae03435dab7b737805ebcc80a8e33fc62031591aa60f7a4135a88996b5d8a1629e7274ff648cef949c4ed6c54f7ad935e2ad16596b648b8bae94e63a275b611ec1c9c9d3c46e604ceebbfea7884be3908f6f9149f449b185037c4356463e74379b4e8744de75b5bb52721f0133b11c04e2ed19b4b4af4a3b68a6e0ff57bd901606df481cb544b27607ecceab2314383959608b08ede41e3d81fb483c66b3f0f4ec4d17e9d0407a47a18cc65d931a410b601287140a3b97bcad3c65239a06e4a9923e4c4fa21bc1d4ff58d069d8052ade87016adcb7896b6390d5cbe4e0b9831d75ccbe797a9f0ee54497822f311f9446ecf3aefe8036a7802f57134c2f67c35427760586f30f1d65008528e009329540bf0e1a1f7f059b4e823244fd2d0bd522a0d6d49f4c262267d2824a2ef77755b1c982dc0cbc18b35cf59606ebeffab53012679fa015fb8421f7bbfd8af4cb78e5edfb39ec28317217bf43ec9930dfed3519d203af8148746040c38cd54fc3e4ce69404ead1d29ddd3f2f51a69284ff4585440d778f18b1d521dd36efe85bdbf4dbd94b7d4bd6b167a172d79e1386afd44776b4032e98e75e488878b8a106b00ab8128fe0333df904fc33314e8e0f684954a330ef993d71713cea7e15c5c9ea72bbabd09b6cf7c61635509091ce16063f01fab94115c0b7b0c40a7e820d4489e3947794db8b26f4b1c599bd0deddc2611905a545b5ae7bd37771987f8eeac677a792210e4dce2205ff95ae1fc9f90a1c925d3e2d9ed4c8d04ae179f67d32d529c60340899444499cb7a5dd0dee41430a6a79c37d1d04e25c12c8b99201d290f2889d8a916f6ba34fd2ce2f855c4de8982ef3d62d8fe099a2235295f68c2c03d2ca54d879b21405bad919e698fc20920ffed0a74aba316c14418202df27971627d87a523431b1350ebde345457b87d2a115000f7bca1ac31a6064735a9ba2a12bee3f44ce79e8c458a4022e2926a363af11696b3d4808a326a30f9cf95870f87e9d0b87cd8d16b94cd9fee56cbea682e188b88ce01af251755abccbb6ec25c2cbcd293e96205920a55790019471f7e28f34a8d3c6981d13312284e6d492605a2a2d9db39a1b3e4c6ee23594df506866d811dfc9b8c329807467a953ed5dcc4707c2b45a3c49a2140f3158d5659ddb1e43fd0ce71c7566eaafad39d4999cc2a3da1f12558516dec73d69dea4f52e37e4a40fa262d877516658009d4aed55f2daeaf7260aa3b58ddbb0990f8648249849e48b5aa071b766074fa132b170d49a943436850e2b8c2a2f23355da113f20849b37826231518d4d32da7aaef4e1b24a3703b94bc966980366b3e7a1e90b3ddd99c64330fa0e12c56d98744fcaa3437355ea0f67510d2b32809cfb34b06d51fdf86c119fe5b5d617fa0ed162aaab5a5e3e27ea1d5c811f860ee6c0836ac94694af8018e6abe9e5a814b42f05e7bfe8bff773417041ca34522918f58244068b6b688224e031cdb4ea3f9512105a33288d69185869da4daed2306534121f30ee13e8509ae43fee87529e9b388d97e102e967a2577cfdc58c371fb16e0062a1a206f2be2440d008e3a2abec9622ba27bae27d0511accaf6b893e0a0247e8742348e548aba3894555ce81ee251e29a0b6f623d39829ee6a05eb7aa2905c3afec26f17da33d8d34617475e8747e5d8c0e017f4c701a9d3b4a97dc38844500cfa3a82446ad401b8635ca5a7958572fa15782d003cd900e73df0ba3c6b624fbf02c5d98eafdd65c17559e4899588538d8430814e81659d7ba691e1d1a85cfc41689ef63a6fb13370cd28223ad71b45626155dfe8ad8fa1deab66871007dc582a9bc6a07f4ce58560168e4aa51751db56a88a478158c2e881de80a004e9745d4f8f566485aa7d0b5c7f4a688b861a4ba7c5b8852bb3787c7b87cbfef90ca08fe43f47f2fb21d72e1497e1585657f2701b525f6e5bc74a4caccc313a35b8a5d60427d6b1cd529f4a85dbbf966ece7618796c78915cfcf4a4e59af0a461e75c096ff4cf10b475d32261aaf26a41b3ecf1ebfb53e076c9fa1b8be2b6f5dc0d7310de754cfcd78c0aec85cd5413079de43e7fd3bc851f840afa08b1235782fb6cd35aac4dd143d3d990e1fb451dbecd7a153d79b63443feb712a705c54133d37a3bd14d57b8b9424bb78b37d307984dc026dca823bf40ecebfa1843b7dffecc99ca47f1da90873801d4c8e0f3b5948cdc36e0bd773af9102800f8d7f9a7041797b21ae8fa4ea517c5abe2ee11ced97a28d528f2fb3a7812e963d0500ab071e7193ece48756607933ebb433767d422349ed606c1d27a0a1f53c351493a903e0af24948b4f6a68b806a5c4d351ae52107eaff75a3608da886a859b0d11cf3efc3861100565149bfab732a95ecdf590de287cc74d8f2785bbbc1c08c7bd16bcfa0a79164714fb430dd8e9794f16b1a73765e4a7562b8e23e9202055d1e4cf589cdc26a8725e2c463cc5db22efa4c8b70b8ea17960025f059524b7f03593fac16982e179ba182f8a29c150885c89b02ad2e423f1e93c1d169f9b0a0de81e80079ddea4b99c6e0b596b229a6e103a4fa32bdd7e1beadcf5696354a5dd143f68fe881feef97c96ff044c3c0d2a7cd2c97ea938c30b817d99288e21ece9f462e3f6b9a1c2f5881a84dbf5cc0c7419b9037498d194d457fd50559d5be998cecf71de6a6ad3bfe98bf83ee379f28e9df1ac49d430cd54057a9143a449b6a69795296255f089f3e85a3d3c8ac9be58c45a854d13627236d35bfb66c97ad7ab5929c9f567224091d5a83a870ac56648b330aa03ed44cc62242b4e9445b5a5f925ba3093cc6ffa3b359ccfa009a86c11443db6e00506ca3f7ed073c54350626d93e809a621c70e5c432077fee4966e380ec7dec6e64d619f97011e39579897392781b77824108440696f69e9c1c0d60338eb89d5bd656371bcfb2a10856e58156930c2a26dc58a40c89ff38acebd2ca1b050243ef85369490ac56193c39332c8431df2ece549f57c87a41bc8f7fbf2af8cdeb2f598a2209202dc624b2ed0e5c86be21fdb43606bf8cfd4e9443ece1227d8eb380b3007c42afce8b30285b6dfcd95c38d5c24642266c6c5d25e85dc1ccd795d8d94b0ece4108ca766c3e5f38ed617ff5f088cd5ad1a9f3b8a489f3bac5124043d5d70ba3c79b9ec76482665b13765f602770c89dbac41a843d1f6f304e1bf982d6a48bb423c1cafbab3037d990635cd90be743ba1f7605a73a41507d9b2b284cdf00c11fa4dd7e0c509ec051340e6605baf127f17bc2a61c5901fc3ab6f9c318043d150281222c3b8292d484313b760969ba8c5f6659f22872305ee4bfe49517cc4903ba7d07b6411bcf2c97c943d36f94fe6e0423a9ffc5d26e3b135594c0de699786c1ec66c51949ea4e094b8572487e3153148ca1953b480556347daf4590dd53718bb1e336259f13531ded729b008cf86f7bf5c57ec9afc99f5700988ffe7b30a56e4b5b7dcac3c9eb0025c02d2dfcf516af4b40c0f582b32ab1e86409a88f0fc347105522a4bc9ff713ae46e92ed18f6d51b08e4b45400a01553e35a730860afb89f70e6af6b70871694adc2a155c5e27500b6a854aefb17ca2033c5b50ef4336966878c2779600f30eeabb1409d4fc9767fe049ebb8b0b1d4b33f618fae8f4a6de4c3c5f55068ecb8ad3b40ff0b76b481201fbd7cbb8610ba52a0e3b81d4c4b97013153019fd4fe2254fc490967a7dad9cd40e428a882dbaf60f626bb1d712c0d6ec16c075b5b38ab4dbd44009f0c30350e3e804bde8ddb5497c3094adc9d02eac555268ff2e43fb5ca18fc006d83abdac87feb7b52012fce02a172d6a57f03a8a0e4cc9e035ca8e1852d9147a69498203a5a44d3a9268b207eb6170402556c2efe04e68ad58f142737d602093f4e59e2a5e4d4c0b1a0b065daf32cfd5f5e4292ab18ba5b52c5a334b0f9d002baab0f118aabea719a386bec511d72cb41e35431e42e407919715559b7bfd3abe5ac2a1ff4cc5f42ac698b926242b11c2f4d860ea56f0b32c636e1e6e9db320ba2f9a7284804bacc60f2c1456ce43a4624616b5287f6f3f70caceb7148a37209b1a02123147858c37f5617fb4b0705d444bd69146db50b2d9bac278ad7f94a0392b8be01a28622ada4ff824948b02180e1807b998c49de4c52de7c0bdac238706c439cd36ca7509c38de99c7cea577e7d0c01dc6ffda8b4e44ca8f579b39491b9198a31d2745d141339fdba74d1d39a9290238c58c41b4cbdcf00c22d3a2ebb67b29f86632e5d74d3ecf28e99688e44eb8a7282e738189920663c277e2ba8ca7e0bf5a6861890ad3252748faf19a497fd2b1e11ee01367033221f883295abc0112023fb10c0542fa54266204222ca551e4150a54bb165f0850175acc479edd5141d13340369473f933f92224cb998b4468b40867701d6340ca9b1375c6a5d0a045cf05dc852a1ea2b14454902eab35fe7d185867fc02e213d7960789c581e8006732d0f420cdb56603c39d75df152b1e5b784746b0de57d3425c054a051e922450007def6d19be66b4d575a48e370a0b134ee22796ab6138f391911f76b0639d807d04e119e139c9b516aa4e0e72b5836f2a07c83eedd7ab8c57dfa0b7815e9ed2a5b8b510edc86e8ae1051604e0ce852dfa63c627b857d69e677e41b110f660599fec28493c30d66b30dce38a928d26e003b2ba348e6b1bcf16fab1ad0756ccb7b75fd8da8e03d413c91f4907e431c4310b334585a19c611f5054b8fdbc47ba1ea4047c584019cc8360fa777416546277ddedd9d2489b78365452000c9e696030caf6fa40f87a87d542ed560c7e15e11d1e5d1c7f04897b06ca7daa7feabb052678c355ad5fe6c62c3ce9ae0696c4abef480fe289440eda1589985637a4c9f5a98df3707daba49ec9b2b2580178dd83083723f3078ca5a08bbd7c90b1b5889c7ea378e6c98e74d4df0dd3fc33236e044e8efcbbcdef6e8a90a28e960e5729880b434235dbf24c03bce9244e2b3e32ce9ea3ba00bc93c9c5d71dd338c7d6a9fd80989480f92edd2d09240fd3b669398e15317d5e22d6f24bf8bbd08449d3b1611a7a5f7fa0ee70416ae3c8b1a3d1707e5e05a066472572a178ee632dc3e70514681ca6304afcb850f5de1779e0370e78b6a15e4f17c60e7e47dc5ee6e41c7109a36315dda3ec0ce3af98f2f5728f90ea5bc840baf13599a06fc61a684501e08ac99473eab8f9f591e7bcd91c08e2ea930e2f7741acdec8c1088f277282abad291ebfaa6ba624cb1bfb43dd963b79dc5fc0c405093428d043ab2b99d833a13456335833613123d8dd9ef4ee8bf0898213e1f4885cdea16c25affbc8e1ad29b8d60cdaecd100a4f8b44c4033afdbdbb9ecc9dcad82fc9df4996d146f2ce8a233a5623bf4cd9692e519a2ff73bcd4c398641e5c67f61ffce69c86d138ea7091107ad3a394a231d0e4361ddda3dd616a25a008da454127860fea540fed063b510d26a22c49ab4e7e6c0051216b86472df661cab28aaec3f681a53d6df1a488faa63d8a64b311e2d2bcd534b077d0aadb67a5e2311731df6e5870f2193403a9195e4a9181a4c5189c0d3836aa4dde5ccaa505925fa64ed2e3b9e33685090ddb0d1cd3b1a6bd3529eaedefbc4a13053a7ab3a1db4880a81275cf661707d43b185ec486f1589df930ebe494b462b8d1ea4e662e7ce10f27c430715ecf6837136b174b41953c266f8d11f67178c3f2f2178170ba5dff6b8ab0497bdd460fd8d4202aa9c1166b98b507c8bdcb269ca6b3a271bbd21ab218208b69ff4eaea83bba2c51d40623302060d60113184cb9122941c48c796e10267388042dd2073e8d5d20726b6618fa6711002ac0e1257ca573d4b7d1a174b6c4e8889ed669654aa20799a904c32c82994dee159edc97073ea995b9c5b687fdae4377d94ce003e2e44c6f1e34fa3b482560d454bf5499e1539c6ad60ec4dbc7afb5bc6668c60b34a8b3f9d358bec79fe894a2c842ecf80a5e64f71e244ea16735225ee1eb2b0afee1e6c797b2e99d72b937d72c3f6bee8994b587820442af9dbed632b86f2c7dbc5349e5abae726499dd274e8bbd2aa143010e454798b5a27357227e5639a2bd365d38ca5d2d0bdd57aaf1602328308c0e5e796d62d2cddd12344d426c4034e9a877b5a9ad2a568ee20699ceb057b7d1afaf971e0c689419c19c7dd71f4aa81aa3f6e15739dfaed464faf20417c83973a2059596593af57430e998c3f749cc7558d79329ae57d0f488a2ad19ee7879339e73187f76005779318cdd826289e51faf0ca202959235a07ac92a79953814a5a41365529647236d46def5f3048bb99f3e9a850ed643d07bf7b999a335d862b9074d9c67a89c413319ee5e65d3316ff27729bd8fede47b1fc669cf896bcaadac0ff542b5e5543c48c11cf11cd044c4056dc581ac928498c08de544630890ab461029db1684cd1d9dcbcd36f5edc9feafd4857563f6968a78c88285cff730d97a760b89fcc9239561765743bf31bcfb60231dff8758b537c62bc77d13395f5f27fe091fd5d683f1fa1f7f090c32664ac388637347a4e96b540aa98af83b5bd5ddbca4605628a6eb9bb972c441c37b2c2b44491b033ff8d34c3d76d26e5e3fd8638f5b5b69f999c10d80a6081d8473c72af586f82ea1af9e1b047b04c0a2fa0f3c184678b5f9fa789c522fc42cc8e8314f357ad69446a517e905e2bc113061399542d4cfd06d20f85591fda0c52aea83e3c048fb9fc43a61996ba8814583b1db4881e5955cceef6ded3f5aa7b30636a122959f1fc0f3fcf41484a12fd85bfd6a51a90ac02e4a7bbc989fd7d2b39811c2b327c161bb9d281a4e79bafa0070bdf2a52314434d720f07c0e6ec907d90a464f35664100c5f6948c5608c86d592b3f7545bf57f8205d44a06fbc26e3250e8a88249f2cf92b1c4353529e53fb7c9c02c2251fd372438a35960a1ad4203d23dfa1601fc193f17817982eaa9c8a198c21b12de36af3365d8705bc61644f0a82e8d42db2ab7bf59679050cd01e2b69012cdbdd963250092ff5b5baec38a66f0abab003b3f10970b32983ed7f62b09fe96c1fde522e3e1e2fe7c9877b98d638a37e1593b05a81eaeb13bd95159cd348a299202d3d6ea2011231c4f6eabb2e814d3fc7314ba38010cd9b9612121a32e04556332a4f18946e133a34b82de52e0e5b2c43b63ea9ed9baa1ee1d49d1899a7d453b7694bc650ad591050698ef9b903ad3c21562b31ec78d80c7b72aff6c8ca475bad3f662ec8bb49e238f546b09620657cb0b83a90c25516f755200a22cf630f09eaf51118b6bed3a9b39e7de314a0a42ccc3846d9fa58924bf616af33f3010179db4db0a0850c0fade203cbf487504708120f3bc19f588f49a0873b9038556d6c40d17e0249637267d4bdea58297e82dfca43c95d705a33d05a03f6c069a19ad0b7488fff41150774e09f162894b1e35d11459cb65ef105f5a6cfd54b629c606eaa3557986955646f42edb95950c871c38f99075ada022c3826e636d8402b14a1ff5d5710c64b2eb90bdea30216489ec13850faa79360f470ca4a9e9e9e55d0ebfdc5344feb569ff0f8d161a4241b78dc17946661440fc0b39de73885ec573b8e88afc3585d0e6b21caddf233313947776ee24460d2e38c3766d6604d663441c7b84ade8bb16d97ea7c093aa21708124eb0e713a83f0003c1493da2b704f10b55930715c834ac7e5523ee2b0221161502e4c2fe5d411ffad4fcc7239b2de8bf0895b7f0bb6208c692fc0307fedbf50a700f385978cdc34192b784f75990f07d87a87ecc56641d3d7d6c1d43438222b246bd33de6938014e116ed3c37352eeb68ddfe5fb35726cece783b7dcdf208420973011ec45d48de6c7cbcbe6b2468376bbb57e38f0306ff05560d7224e929e53313e2b4220f709c03f7b56495d215b2c8284df57d7556279eaba4e6bcdabe36638b88e52f6752d31a5b0683a69a9443924d3dc4881f19280297760422306d336b427105bf6b7600fe71fc965f8e41a454cb1bd7a66c8af181f49b288b2dc807bd4f67abd498537dbed406d12ff2827b160c340b709572ea79b90058b90cd62b205a8ad9e3a645572cf6900f8b23aa1ac748a6fede3a55c3dc3a7885006c14dc172465338789a5b6201de08527f21d49f945ab02f5d6770cbc4123ab8659d03d1aa2f5557adb5063fd48b7a784a655dbe9654983e3b6e5903292235253e87b4adad586da45a666f3446633160e8bc1223207efa9d796749e5f5078ed47235e18dbd5bfd6a3f3112914c88df3421e4f855bffc861cbe28eb84b64a72c6e8c987d032c868f97cfa757c53b5a1863a1e77923f6a5725e15813e1c26b883c33ffe69bb5c0413aac69970aaeb046d9c33d9c2cc953ff1736c71b985f0ec4e51bab18819900bd383168e4e016aed78dcba33d7dadc3803f49da5fe5f9dc43be71ff4fffc0d3bdc2acf676d9e0dac2d841af47cbaad93d39826775b24903360f4869271fac00179f00a5e78b62f1e987a8288e783ef192981b3e9ab72ca8b4d694781c90cacf5f6cf6dd4399391e0e91be527e454deeab46a6720372e504a5438405293a6a38d812c8db04dea4c3ed7c9feb3b043d738359af0c476e66aa0b49dc6151dcf9901695892ee7932a329b3a00da5ed9c27329a660464b61673c5ddee34d9d19c31a053eb9866ae74aa891d4f19059dad633ee54e679ecc380fe0572d9fc444ddf5a488bb3a21e206cefb27abc84afd11a1af33454bb1a65f65b9121775ad26445cfb0266db05efe8ab5a4456d45f113a941fd37a91778f25b66a115951de8f549135d2afbfa2742ad53a755cdd3b288512934144710da19f2d6195eebcec5fe2d643cc0dd052ec778577dc12647602905d0f42fcb86a2e99596b01c9ff84fe68ed2a32a267e7d0e336b3c5547c6e8bae34a080aedcb87b48481970277522710cc6cf067565e015e6281f8ab03a000b1d7d765453569e7ec4b3decc2cf440f0d8143c0ac8746b427ec569225e2efa47ba4c4d70f08f86b0eb689a018f50c0cb002b19976d673a6105f29e6a871f4ed68719a0b06d17cd003323aeb3e258070bbb2c2631165f32a55d485680ef628f487bf9775c3515d28741959f2326fdbc142bcd63e01c2bea93c95d826a4fd3b86dc2a2854de90b82d7d911138fd268961990f8620a3cc0b91def2063adf71a57effbc0628e3f1a02b4fc031a15439d5720da55491b79926f2389b533c1fd20fcc1ef1f6f6a3bc18bc2b7e2a88ea7ddab8d179a4e0bc528c7ed3f49e223d01c720a06f4e0601743ef22f00a9b8b9e9bf5fdaf71cf3621e2fda98d8db42692109184480aadec4d3b0d0a030a3d09db85c705053f40ab552d5add5e58b5e8638c727b656fb32cb31886613ec86654c11d3a7238c15707ed821755510b5b58222019a44910213148d5b16303b6526aa12e4c071e62a22a08eac2ae6b59d675b921780737a2071ec48db846401cee37a30a7e3b74e40803be4dac0e4b0ade1ea449901f1ac452d7216776a854ffa81889850b0759bccee33c3c3600448e4e0f1f0f88332a39e9d5321e6668685010e53c51db417bfad7828f3d7a1f660f336e08deceb343067e8079367cb87dfc0c401ce08d2a6bb5ab05f6f00e2fe0ed3cee3c1a659f46ceeca8bf038574331292d5a1a97d5881d8c08ebfae60e5978396df6981dd566badb4b666a7f56bad96a472661415e251d2e4001fcebc74fbd0678d5d60db0554d1574dd731f584f4777c0a9c8ba22b642004294688e0c066a3e094220730581db8800942a210c2164bc881cd7cd56b32c0980294221c218307704918f49578420ba818fae981176e80a74f010bdd7c3c5f257164626d3094c408647c81083398b28019851115b21d237864c093021d3041892f2c1224219448620b45b800e4082d34a1896a330425a420230b2f4c91c40f22806b9ad8088d225250cc0ea630020308585c21841dc8a9c4e8093d100105222c514410a23ca1252fa695427c67065d7841050da288a24919300a125690042a18e1083c50016c82919e7a2e91832a822c29c20a80aaa0f1006f2c75fc8fa1440880a20740389882470a44409924464dec08e109527480b485d091932c4809a1f01a55c020090a238e906408db1344fc8881118c785c5004859110a78412538c300328a6e0059b099483304419c28824e02d502fdcc5a80830c6a8a2e80b19c84c244637389180083710429213455f24513a12a409523431042c1c3901b180484646e0a049a3c44058c51447301ada021584f800ce27c0c02b2c8001137a008627907084166cdc095f80938e47661e79cc2e00464932c5e3f9aa39e79c79621886e57dd98a69b6995e9c7129671139889ca0042046acc0670a2e53d044d5009110275770c109901d401803a3f429a20c2024a608e10924a429a713437a6ab884086490f102214da430d192c0d6a170d16b9044c8ce39a7f4f8843fa4331029c2c8085114394892c391244198508c5ad082a41f4f924c6133e79c93feb0534619546bb5e65b537b2b775ae07dad5a75b5764e0e9abe655d697951c6d25e6a9aa67da5b91ad69aa6e57ddf7e763fefe20ab50561e05b6fabad37969553377b6aeb6a2be7e4a0e9dcd15616fe03e314785f2d639452e660444f2d2faadc934bb0f474fc3969740e46a4a7cc53fe487c19e13db51474a65e3babb5ae5bd46646cab9d64346555053e9f9535e49857466c9481d5a96f5515b795b20d33910aa9775426f58f442c31f3a0f39e33d12e6b25c70fff19140b4a9d97fae80dd01523b00d63841a1e845f54a10924a3c6a3bcc8ff325102f40c899fbf079f490bef21e39c3fd4683d7171dad7fe1a25d40fb2ca340cb7e086be3b000d7dfcf6da28663da687988157036d9471bcb6657f623fa7a2798e0da0d74c26fe0117841a31da33734fa23dabed584ae37f0c8c4b28a4654bdc01af14d4978b962bd22b3518605b5a2f2dbd693672a7598dbb49b6197ad169d32ba862ca8960d4a988802df9151fb9172daf9cd39bf156dab9530b406d83fce39e79c73cef96173cea972e79c53f3e1eb377d90d3082d51864a69a34c8b86cfa2517a45459f74fd288499337e35e992ce30ac399d6db77ed066bb3ad359774db75a9d79d969255bb9a8cb92b9a45a3669021ddf55d1af286ac210bdafff4d065f36853830f6359122913d863df63b3614c7f6d967bf6343e31713b58fdacca9ed707df62eb7d48dcca1b52fdac4cfb52d03436a24e9d1d326d40a8a94047188af520371c874751dbf93a64428ad0258c2501cdb73d947f65bb638b0bff9da8752c2d4cf3e1c6fa80fb508a0244cfd9a18e347ed95549f071cba7e8e14a2020b5dabd7fad6a35194d9340a5d12659c48d78f46b9b94295336e13b5f8d8c7a3c495b9b823619708531f6ad408d6a83f0553a31a1dea3fc07efd586bad50e08d424519ff4a932e26493e40d8850fd1a3dbfb850f59ce06688c138fc0853d2a066583a523078e08488d923334312ff5ab6268f66e4c92e4317fc7a6befc1e72c6caa999776c2a8d84916feb5bd8d7ebb3eb6df6e1032561e4dbeca3623969db4a1ffbadd2b25ea0fef538acc7b20f2572b53935330f11a091d5925f6450e301135db18f353af0f080289361157d80adc17226c64a6d7d506b2f04fe16563cec082405df358c2a29fe9ec47efd1e6acd38f26df62d1c7af621d1fd798880bfc51885fa9fee953e0f71c67940a403081d289068874cb43b8ca2dde114ed16859452ba77349cfed877f9bbbbbbbbdbcc0fea0b2567a08dbbbb13f1e02e644d01221a25a1888ebf8128e3d473ec8880b59faa00fdf840c8199b7948189e1daf040eebe9536a71d0afd987caa271c638334d8d4a661d38a22a7a5098c828b9e80127c906d416f7848bc23921e29ce8f835181361224c8489b0f778902950b0e67a200e36e8a844c729583908f8947e98084322f8a15e1543532361a20dd14ca25b582d039f079853b0eacf8b2aab084c731818feb6f0b72082d108f6035c7f7b111410f7d15a74be73b9e62659a555d7e77024ecd19becac6c72c8196883a493a6f80ada64a820540e09131f368137f85f1f8d15e9116045023ac10e8016dd53e64061a6fef4219d94520a9d420a27842eddddbd06f8fe11ca4077a7451821ca1690c2a710c24ab394104a082194902271083fbe0e19edcdd3f3e2862361dfd4475f44aa8be78bcb8bb6830b8c96e516ed6eb008faa8f23929a594bab8b8b4a490fede175389db5a043bc968d0b07e40c3f24c83062d82068d30dc6294cdcecaa606c6c8196803dfbef778b6d862248bb403db6bedc516bb0f8f0bd911dfd626ac3d82fc9263332ee43072d3ce840b4d8138d86091808f68f9ae24de5a6b0c0294e4a746b969ffbc4854c921178a2af93fc011cb1dfe4407617dfd0c4b61d8f52e14671cc86ab55aa5004994398a32ae6151511327aa82de6e44cb2a044516f476232896c826db91986085c42e77776fb1b97e3a7638c43d98ce24ecf82863200cbff405de2e5a7e7c69030cb7c0fe4cd0d04adf82c18cf22bcdd80aac13bee0524e1fe2262dabb49351f9135ec9db7b72deeea371debed292cb199555194e9100b4e141bad07cc1a6dd89641ff2f2b11fe06de3f32067dcc6628c423dca7b7c7c8583581af5a8574d9900b4e1c1eac1337a49424519152ccb9252cad8c5a66191110b2e2f4e3748aab5d6fab45ab5d65a43532bb5284d0db56107101bc82167fce35719d0d0cc22085515bc8e39ddfd63626a135ac62fd0b7e69c73ce39e79c735a3448524a39259d4645344834280150c68d84b210434353435363adada1c9818626871a8bd6c838a38cb14687a026f2639431c6ce89964f307181de34d488da84eb6ebebf5dad562b221bf8f3936f4d97ff8f6958a4e4887f229e0e0b9717518842053c0146388e524a979694284b7a0c8ca1a11155f12546c779a76e94be7ba879ec54966f4adc77f8a1e6517aab7baaf1e0bae5f1b7f16b7906108cb3ced4dd73dff25dc669f92ce3a01eeb4c8d9ffbf69675a66ec930aa56fea21e3ecbb7a73ebdd47cf0c71fb51b549e51b5929f3e3efd8caa13f703f783f7d76f14e88bfb1ba9afff61e3bf3bf47663eaeb87cd3df6f23e81be9ede90fafa817bcc436f79d3d791fae2328c2a53de3bfacaa6a7afddc4eb33fdfd1965b2bf3f0308d691fab14fc7afced4d75f7f8282533eb8c6ef1a3f9771b2cfa91be7f2c674e6e4478b283a8b97fb70b2b79fe1ec6d86bfcddf166541a4337ab96ff3d0317ce9619c7179ee61de5673df7d0cdf7d97af46de4f7beedb3a73fb84708d7f6a3751e377cd07bfc16ff3ce1ee36f73ed068c1ae7ed1afff6dcd7fdfd36bee1becb35125f0744bd3dbee1328e2aeda3de324ef6be6fd6993acbf621d6fb7968b8d220a86594514692d691dafd59e2152383b1c8c9942b1c8df10386298e34050c45c4386121458c26623891018b21620c89f193ed9ed342ed736fc1153c5f089a9204638522538ca600614ba22c41d250c992230d5fd350c9122734a6a1922543daff5e71a4e3d7acbe8949138804938c20893699152dcb85a2300625928210b09514aa20052126cbe39020212209509b1a446dec0cf0ae3f7588c524aa5c47cb89152dcb6b104de1c7f2e8e4e88991133f621265e21339438d66060484a34209236bc8d693a8aa515ca6acb642341059e163f4e4c85a46d623909c99d39a12046feb48d7faf547ce54210953bfd6215d2d0df0b69ee86aa3244519d7f52d295146fa1075e6f1faf69494de502d9f5a4ba2cae8aa41570d8a3316a90a5523d5a832e1a95654a2baa41ed5261549d7bfacb4a6205919f5f844996d39d1d59af223c8f535517e6f21b92ca378643571620db182a28c47216b8828ca58d9837cde2361ead3cf5712a6befc7a4495670bc84754d520fb83b705f403a4eb5b53ac31563c40fea3d3c3475459d1b2fc74748590e5114af1954e0f1fbef21e0f92044e39c03ed4d65154d5abfe542151258095154c4eb0bdf636fbfb36d755b61a8eecaff5648a84c12c865d14080a3cd865ada3fa634db19ed8cffaeca36f1dd59f2aa4aee4cc131c3974ec00824794b126406db2ec3f12a6d6006f6b8aae5f83a24cac45ac2951e6437d0fe10cfdb495fd66d19665c1d8f9d9a79fa5a121ac613defaf346026e3872d9723072242752daa02125d6bd01279c484deb742618a0a85217abb11bd9da84e9bed47babee5b10645997d85a2ccc6435166a388a2cca65189441947a2ebe4a206e9ea84ded588ae4ff4ae4874a51165ac9733d88b32b226bd5c410522afbb5aeedca6a155615711158e22adf32d5823d6449f336f99b1c7e8494c41ca941f5e98a2d2e489177ac2f83140149684b102e309bc02921396fc0b4d4111fd695854858f2eaa62a5676858f4041dc46fe778454c889c9ae0a8b7d4b04828ca0c45990da77816f49646741548da0944b0a88a226e44bb0504bc235074a4a8827ac7dc23aaa2cf0ff07d158b4495c7217f5a05bced8f280333122a50624695fb4f18e1d476c8d1399e85ce0208e35fc4d10c9ae00089e78912494598a2fda1ff8e2be7297101ef281485a28cbff3643d7ac819771e2ef0bb7f248a4630628441052886a46461c4c63f0eb924aa3ec8ac3ca2e16f298f68f98e23e59c7332c0e55641998970e6c7497390d1af96e6c30e139cd0f3ad76038f58f4c2681050000da15f3eec34a1e9cff9180e9dd68dd43bd427181984386817c20c83f08a31c61863b52884f3c6183f461c638c114208e1c583a3210d8b9c1044ef28342c3a32d29e0b0ae2603f566b82c1a3e54b01d232eb442d0294de3d56ab95d641694e6fd9d674106fe9d7f7086bc8f9d4da76574df39e195bedbf2402389c4c2115461d91f9670e218410ee441741065f32c8c575b7aca5d58a2eaf3d8c114acf7e1767509b4632ea6cd28756a31f35fb52578c888bcbb2be94056cd58f0a7d36ca9ff7699138636de45b4bf0a63ff40fea13656aa6446890387333158a30f2239d026f2a44cb97f2a9100a0413a9eb9510c4610ed1546794a8920131222e3c0b2e5e54fd8c4513638611c6ca515e2d09de5747a9b3222d8fa0b3e812c6b97553cf0f2641c2125a7e97766d075c049c29c86e0cc0546537bb164c76b36b05905debd9c5b0ecd69b5deb5ed9bdd9e5bc7b4fd9f556502c2d2997186498e1554aa7d27732e5192f340020002a1801a80ce0d4021a356e8669f75e0dcb08d0d580ef25edbd64ccbdf716600bfa394208d0bcf792f65ed200f7de7b001b6e9099a14100ca6506f012064b8a139043a6dd0ddb34ed33ed33edde7b334c010bc05606201a32b2b8e7af1b033055168c7d202a14a5ccacbbb43af36aa03ff7a98f84f1bf19b795bad3d53e20d4a33e94e5bed01e9788e1db6cfbec2abe401986e2a41b5d41d5be34948190f638c0d236cb6fc74002c850e3bab368778738c08ffac8a1a1164088030d335e66d0607d4d693bd496cbb67c18fe545916999233aa5c80b755c500e32200ec198d1aa81e02d400dfc402bca765b9bde467cdd076b09606eb69b00a6080d25050124484ae9b0491212122490c0959446810f7d9037434a854d3064c030ccc0def107adda32e693d2c73edfd4d8fa042802600e6000670a5ce3e4cc811414072624266b44d81d09f9e20f603bade06b932f5a1b916fa45c08556e390801cee8c32530177c6997917601ff718434b1a7e0077b7da67254441294f53e02ddffaebaaa1ed50ab0d393650ab6b20c55a0a70c5a3447d8d0e51228a446752f0ff0f674870af7d2be0c17dc67d7448fbf6d115ed7101de7488001a6a56ae41040d5d3f1a145552b3a1d2f333ebca4f00dafae82aaa78224ca445aa35b306a36d6203ee8c3374d563eac17bea550d00a0e16506016ad018808b00605431345b64ee369442ef6610426a512b83d942092184d9cbb7b2ec294d54cdc73e9c659845b139a7b4209c561733fa08a44871e284091324488a14f1b0884c102961624843254c04e94d7b34644288864a98f8019530c1020d06ed1cf01d2811e2c22f0d95082169ff0c31907d59f0f02ce9f1c94e4de400432542474a849068a844a888de584321221a2a1112a2370a2a1102a23b0d9508ad34b083e3673f17291a914f2615473ea9389241815a4ad08c2c6a842d09d5124222044b4510153db890a8f8c154f450b1caa648b2f7092f68560bed7248170ad6650a27d025fe780a235308e9798325780aa0e90d7553f828513279484e25309c6e142631b4b0b2228514cc0a2c58152d33359d40828b13445ca47022459321298c2612ff24ed08568619845e0a20297e1c4910297cf0112cbeb904ff642bc5cac73fa908342c41b20070a02338d0d7920b05ff6b89ff25ba4b84ec12a0253ffe544459a282954a141b8515d9915b2908e0b6a0c0c85cf2de1303305214c5129686455104691a378a9faa6151143e51ac8a9a20a5094eacd09106b5a000c3a22630d1f606584b820035c45c24d15d6690c1bf50c912562cb1446ba86409249a06b86aa8648925682ff24174da0dee4da6c718e3c79f79ae33f73e53c9f479bff26dd3c33f7d4df4bc3c0308f6bcdf56de7a93e9bdcf4c5f777ad3c7e510b83e3dd4dc7738a70c821b18550ed0dd6732e5d336692bdd4f2fe3687fca38db7b6ffa725a1e6f2aded6e2e5cda2a2d2751876b1ee7a8f39eff1eddee33a8c42a150ddcdb0ca0aa77cd0a6ef32cefdebb7a7dacdeddebfbbdd87734da7bc77f4e9b96f7b9ad3de875d565654defb524983ef7dd6ab985efbd327846bd347a9dd98feca51bbf111d6c4fab0269aaecf4c1f67e21e7fde9732a9dd94fef450b381dffb9a78faa27683df33696fb9376937a5879a8deeb11755db47ed06e7ed61c6b95bcb399ebef9fab0c63ea82f154d8e378339b5e543cf79a3cab77a78146128dd47bda945c5e36e74afbdf65dd63254b9570577af6dcf759a0f1f9abbf77ab7c5e4954ca652a9542a85e1c68d66e4559b833d2b6329c6d1e6e4783972bca431566ef6a83769dfd23df75da70931833e75dff6f4b66ddeab647fea3e8ff3b82ec7f3768ec6bf7376c9cb4e9ef61e67ef659cec4f19477bcefb1693c6725126d3bdf7de9595959531bc1cdde1d307a36adb1e7fea831106a74e9fcaf1ac673d4efbed793acb16432fc77b0d8accd69a6515e3fa3ab2a714f3505747ce8b8e9c97242f064bf69786fa96bfdea7b62fa93cf7759ebddeca772adf6d2ffac6e94d2f9ac31ce63087734a25df9cb289c3bff2ed1246bd09a3be266e9853791d3f70df618cd218a74ebfe59dba61fad2f65ddea953be3175af75e8ee4b18a5827a9c7150de8bc6df7d7bcb392f1a951f7eea7a5ad6726f966559d7651c0b0b0b8b18a65cfaf68b0ebdfde97bcd752b5c5475dbd35cd7a1f2c69a8b2a957cfa3a1595bcbddffe74ca1bfef659ef7d3be74597baaef4ddb75f7457eaba979c1768a4e3e5b914f8f444991ff9b3167a63539fab650690bc4b90a4e98fa8a27fc34704487ac3cfa13e35f09952527915963fbdb7f2a8fbdcdffbb5acc8b7705e386fcb638dfb7b7fbbdfe5adfb966f670f9fe5b5fb752c5f13b96ebb29ed46f61da7e59b0cea122469fc3b6369c9338060ae63f92ee3b0bc9671569ecbc12c5b5e79f8286f45c574f23c8c4d2693e93ec7992e572a954a18638cf114ee76df0c2098fae8fb92fae8ebbaa80ff6437db8a01224511f2d84531f0d67eca0fc4261c6d6aa63c1e8d0e849615c1786a5321694cb8bf65c96734da69ccab4d49b52998e49c7a4a3a393ca726e2af5a68cc3927353378cebbaaeebbaaecb54baae7b2f8851378c7bdfaa55e7bab5668f83bdfd0cd30122e7621e8f48b92e0c1362869c5bd2c9b9d6eae8e4dc9c8b619e94ebbaaeebbaaeabbbaeebf6b83dee05312a6e4b98d3663a1fd6ec23fa88bee4bfb8ae95c74c8f951ef55ef6db67dfe9f1c76d9bbdde7d2e6f104c2d440c5a65fbecf4d929f7b0a355baef5ee354ddc32ffd29fbb492963dde3efbac1e76b416b710ece82e8b6006ad651fdb679df6eded4f5bd6895a2bbd96714a7fca382dafb3b3ac1375297adb53cfc34c8f993013866d19866d260cc3328cdb56b0bc827d2bd8866116e330ec8b2ddf6b7bff6dbbb278356d07045173d7f559d4da7bbf7ddbee1e1a9f5ea5fb934ed43b0452fbd29bb6df6054e1fbdad6f13e10d4d2975ec3d189ba94b74ea4d7953f4dd37efbbac79f94f8abf6dc1735bc5abe20b63e745cf3e2ad6a7758f49dfedb8b5994da5cef07210ca53554fae0933254ea532b7f9fc5d465dc77faedc3f67ad85e4fe5b5102dfad43dc7fdf6edd7dbb66da5dcc38e3ea97cdbb356be6471bffd3c7db7637bec71de6fac39ef374a73dee3bc756817821d5dca2298417b7987c6df3db73d6ee5bb6f777fe2569ecb382b5fca382ddea743bbac43f54a865195a2269614eab2b0a0507f3d6afb6c436d1df71b8aebb62dcbb26cdbb66ddb92b877cd71ded77d7b87eeb62def19f436830c32c410838b4b2ad5d2c2c28242adaca8a89c4e9e6732954a5d8731c76d9ba6dd9b6518765d2b2bf9f42a1f84354e1587964ffda62b8f4ae56de9ed59bee583b0064bde96c6af821fa2f29e1abfcaaf7c10d650c97beaed4fdb432873facdf4dde33f7d10aa70def7bdaf91de07bffbac37717fbfc471dcc6715cf712e3a8314777ccf79ac0f52d6bbef53e55f2b109337bd8d1a9eb71ecd7bff28c20f86ba67307145e7827d4a31eaebc0acbb794fe66a5cff4dd874ba567313dce1b04580b91d2dbe3b7b41bf74bdc97beeb3a2ef7b0a3b71955a5d2730f5f2b7d25ed6b62e9bb9fa6bf5ffa360f5db2ba94533dec68ee31fe1b821d9d6511cca0b9ecb9ecb9e732f730aab2cc43dfbf5fda5c497b539e0104dfac7d29e3689f651c962f7d4de43e9da94b8fb50ca30af51dcbc36f5129b1a04e4fbf94f78a8acae9f4d79f4ea5ef6ee9bb53e9769de7795ed7755dd779517ad7a552097f9b87c6a9c75df7a9ee6b64a7336fa9542a955ceb61a7542a99ba4f728f83ff3e87ff726feabe4696bea8bb120f50a74a8fd33dfe52f7f8bb1754dc8a9051ec6fdeaeb5d7d1967edc7eded0cf7efb6cd06c7d76e50d84b6f2b60fbd46da4fcb9b8a3dfdb60eac98d740a17dcbde5c6fbdfd6c5837960deb6bcd57ca2fe74e1b4439a9fcc5e23dea575a3ec5fd771fc6374acf85c0f5dd57775deae65410a6bfdc5baf01ffed3ebbdfcdb6e57b737fbbbf71dc67dfbe0fbf07efb7af891cf7dd4f8efb9692e6ded27ee81e5b7d736afbd2f6f731ce965341645ffa1be8356c1f1a3ff41a4a0f75097f2997be9bcfc6f6a6cfdca44b1fde972b95f2cf9f19c7fb2de3b43cf7f7cb29e59cab3d96eff2ceb9bae5e1a756b8161695a7cfe58d5a59c158454585fb8c53e99e2b75cfa9e0ef4adc63ee743a9d388ee3382e4af7aebbc7f8fd31eeba52de3bba84bfada3b737e18751c66afc97c3cf71dae36fe7dc52d775dd77df7623bb2e6fd7f7b94f6aa9204c8fffc6e31ebff7953ec3df8df7f84d9f0dcf87e66ef0df377d36f0dffbdcd7c8ee8b9abb917afb2e1544f7dcdf58af41fb52865ec3f6b4f6dc77537aeebbcf46294fed86b3c17dced5c9b95a08972c1127a189268086454e82aeae155ef9eb471f6a3778e819319b61a48f7d33dee0a1e9ffe6a1377c9d19774cc288df1314fcaefde0da8968614591164b8ab458d12c33b5cc3002eb48bd43b0a3bd5ff9959657f9d3c328837a96edf1f6697f3fce1f2769fc28a42c8ef43b6148cb97ccba50bb493da73df7967603ffb6a5b47c53fafb3572fbba4f7dbbf4f07b68f96cfbba871a045cb7ecedbb7c7ffea03dfeeddb3cf4f696f6c37daefb6d752a7b1c0fbf658611784f7d3dfced5927c2eeb7f571676f6bd5fe62bf719f66651da92d69bf1940b0456dec1d1c99e39575a29611c7df7a7f2b3b114e84d710b34789c0f934fad1f3ca2e86fd9e3f742561a88c3147d7341b2d8ffd8c32116af973b51d629677c89329d3be9647a99c32eda53fe68fc92098fc1a29b50f877b1468872eee31ba6871ebc870837b19f28eba7e4dc4b8edd9b18c539f7b8f31efa9ad1d1ff1a55bdb7a9d88e38f021d65c534f9da14a2b785b98bf6567d0ccb3a5147cc8461926292629262d284ed8824a9a492def847abf21ba328175fd6540c6f3df6317266c70ccff2bff2fde6fd70e31f6ff8cc209e80f8528bdbc2be45e33e669cf82dd8ef90333132c0d4f65fdea8cf1bcf90b78df267c0a426f3f68b3dfd1819b11c7f0619f2f650aee85096cc487ff1db11c3b781084454d1a7c1d1bd86aad96889eff2ddf72ffb96fdf4694665bce58d3ae58dcaa6acc2b85a0dbbbbd78c631f7b4c034fc0d6e2131db3f5d99cf723d55cc6d1be3e761dc3b0fa37e3d7f2761d9abadefafa3172263ffd1d7226d3f0fb376ac66ffcf23464f779b1764696d85b53fb6fbf2392ae9952ad65cea74e1a60cffdc57ecb3b2269aa412d5b3f7d260de60fa534b8e64903afc1028a21ba78e1b3021e9e231da361121e20ad02297a001a26598d51445f2ddffe18fa060d930c814427192288566998840551f4104374a6fd2dd3c3aff4598e28e37f2feedee6ed5b27db341f306d35cdc696f98f2893bdb64306b7cff4b619eb1d1f36fb1cf6678dcc70b04781b6305aeb2bef513a119e80f99e6dcbdd9099cb3bfa0fedd6e619dfddce8c131f7bfb7b636deb8e0f9bed1348bbebcf0fc73e0ab47f5bea4cdfcc3f47f6d27df4ae20907afb8dec37f673e6ed3f7ee66ccbbeb1ac13f59d3fb91bfb59276aee072cafe4e939b5f2d9cd7b8e1e4f807f9637eaeb6fffc1e1f863bf4dfffad3ce8dcadbe69a66c33ecebcda8dab6dde21c88c609fafc48f067bcff6d9d7cf5fa57b4fdb608ea82a619f3dd45ca9e45c16afcdee6f1db975647673767fb0ef335f99f843e9b7bcfd2ae514f6f5a5d49bce6f6885be8f3ff84dedb3341bfe389bf654bb71b57bdedadfcf01f5bd3fe6b45165fd45a36d7622bc869a4d5e4a02194c228d2849565668f8fe148891165a95569f6444618161e9f7322715be0a3a1225592541631a265909dd180906920ed058a96f4a43941841a382c48bcb10179ce817edfef3f3dc2f85995d7bc04e1c223ba258d2e840bf3f72815546121b057224a445189098d283841d1c8001451631c002a80c2d9471048b0800e8e945193e47cc2a56a4dcc9419422325c10831f3d46d0b0c20632c84110b4e0c207504e49562d9036a0e49c11f533cba9e939a7f5734e9fbf21910e93baa0f0d4f3ed0af4d4735af95128949c73ce395153cacfc2145047f727bb8e9ca88c239491442cc34796b1d227287aa50aed6fa3ccb61389f67721181685a188de330c3e08c38ff69f561860a0fde31864488999232109489a204a6243e64b70260881fd6d80dd8fc0fe35f1004564382123c9d46e81223288148d31e48117bd5f74ce8bb61e42683469626c882a4fa2e54f89836bf93134d2860d16b62f5f25636812f65a998c27b4941adac8bc735e5482a6cdfc5ebc0bbd511b0003132434d10594257ed86c4c86133b4308030a9194231b78a10c9b18f7179161e412d128a4f86858e4e489068086455d78a233cefac79e8eecc421842fe7cb2f0251e54db4bbb720015722d83d7b4f54455507056fef89ef59929e5f10aec7d0442d48d2f283442e08f22bb2e91255546841f0ccfcf8a82e20e98d62c0b421c2c4581476c11e51106e1788e88d8a712ca74603bcaf17b22c3ef63c8b18a5e3e3484a26047f61e43a22a39148c7a7eeee4816e98b95467262a70502c9fa4a070909297efc1e7012390f3dd2f10638c59bc4ef21672a0f9ffddc47ca734a02f6e9e3f08c83fe957da022b4d102cb1c8da2929a23511c8236d717b809c441628191e88ddd8acb0a8c610ec27510ae21846f05ce71a88937b9a2c03b0e0d4523f7c832c2c5062ef8e8eda23703682c9c9158081e41a2263ac4958533b325083885233e91292b629a836ac3231a1c3439c8277a5649407ac79e950e7826d045c248e0285115e31379a4059e3eb046fc0904d688b36725616cec99ab5554f548604e2025643c34fe38016fabad2cb08f8d3e3d4ff48e3e7bc620fef02331f02452d9215dc6840289fcdd8118c35afb1a69d6f8d8c3f6555de06dad9cd16102d9e87064ca49f3b613665b0159467ddf028fdeafed8482840b0ffb512f2817f804e5c512bd510c701b506f04a689892a322812d425c27846d91d83a7ac42c80b9f28146485de5128caec4905912833a1cc3a69401869608d1885a26a8809ded86202ef19142467a20b204c7c204247c41d044de98135bc8984b1c080b7b5771e3531647601a4b70fd911c8ca28c41dc144e0101797fb2faa181b682c9c37c4af41f81a03ef08a4fdc765883506de9e878a4213891c62a2e81828b0940576270e91600e3a4c9183765554c51d9c3b82770e3a7e0e51c65f87eb1a1d7880da65b641aef08e89345fb58037caa5674a895264fe106f631fbe44afb5d65aa5aceed6d5f1116f88d35a62b5ca788678f872834fbc21bef504bcb145045b72c671ecd18291deb167f25024f0c69007ac112d4b7a93267a634742dafe64634fdad848da58591e05e13d7926cfecb9d3674a995a0832c4dbd09fdf8d37dc109fca00474f5aad563088443894a009c5f1750c0ade9785076f5f3db9281726b0bf2a8c152a496f5fe17843fcd412ccc2838780b7af2e30f0f6955c451b646e035f7a38841042772825cd3a5115df471030f49f500ae6e24774271aba43cbb22c8b52f7d5d7c387ce1578bb13294e9ec499bf9e4483cc6d2c20e0ed3dd77b5cefc8c3446fe7891fa15c32f05ee97d75ca1f3e0c2c44f204486f2b7f88b7991f43c38b3adc10bf43c2db2279c24f848140380825f443110636e009441186264639e4250b46ac8f7e437c8d08a6b1b122c4dc608b25a72618ba86455878a2f7e4f1957c2b20d9f8074519acbbc18228aab21a99f98d3d473fa20c34eac290fc21512625dfb5cc3a8b4c276af9d033cee60cfd07997170e2fbfc01a73e813dbb0c62c6811f1ffbba6df6e2ae9ca3a361cec6c18c131f4eec3deb443dbfe258ef635e7b5f9b7ad2cffef4b73ea8376d738e8e8e3820c03e1048bde5940f9e2375b4b24c67c6813f29b5f12fab6184b15f23af9ba85d52faedf83fb1a53dc4524a9c6196adae91395f23e917dfbff8d8b7737434ccb9f6e55b1cf870c2169a73e0dfc8746ae69b88d20ea4454c8acc55afcb068665ecedced1393456afab65aeddc8dee68d73723c398357592db9f5423d86b57c0bcbab6ca6e7def4f833d3b7f2f8ebe2e9bb8f01a49fa8342c990a7b542aa2110000007315000020100c068442c1602cc9f2505b3b14000f83a4446c4e17cad3248751146690210610630001068088080d098d13eac871f150e686a9fea7693e33334e5009271787088b97944e100407fdb28fdf80ded04e6f11e16140c112b8e099433fc3eb6842c0bc53ff8686da4752ffd0bc09cdaf00d96636ef14d0897f738e1d671235ac48a2acf415f9062e281e49008719e296097e40c97ff7e8e473078e139af76a0d744a95496b734e960fe1f86266ad960bb2fc48495ae1cfc4441a598fd1833a76029cf7af93cce7b75edb97456392b16d7a7faa390bc8f414e544e43b1c1782ccb2e37d5d5ba876362f2de9b80d249cc583d0235bbf02d37a1fa71b4803000d47a34973fca5dbc074cea515d75ac7889912e04d924e0efd2a478066db2851bb664951a1dd62f8af85a266110b4a2775ec7db5e0b3de9e5cb159bbe7b128584fe856637b6121739547128809bf027260958a13c63d3a7910eb3d257c9abc8550c669e3e62d09f78356b425675e57280c743cf4b86105c0f8f9c76520dcd728a8f630eee663eaae10f7e68f1fa6303fd1142184885d177b0d5651cb5cb4d228f7f8585d976f31b437ec302c5a5b0664768197e6e2941767b2a28a8cd4556d849d6181ccbbc5ee387660f1e048a6838a50f3839a8c27a8215b02a420e6b4d6b97215540c830d0a26edfd7e2b83442bcf75f9089cb94852d1e3dd89f9661941cee4810a269449d84251a51458ce494dc84aa706c23ce2b2a4e19bce7df1cb9904ad466a37fc3675c157d22d680af063596946b20682b5ee9a4a5a7e71248443392c7f49b0017c7b0c77816b3461522094d5293d22ea0e948f03eae45ef268a8acdb3572f46e8acf019aa3088564c2bc8247c495f4c83b9303eb7452c1cb8eaf914f4a9f3597755ecc9395981899f224c3852b63ede1b1f76add895f3454ac7e25e6dce7c982857088d206ed886217b3e82ba105d660f749cc643fea5e40385b2c3484d407fd21e724d028682bc8b92764824cb518240dbc08f980cc718c8c40f6caec409b31e2afd6fdbca53b8779092ef3b67099435384ec9932de4222c0dbdae4e34c8280b189b30291fe310fadcb31205d3061e46bbdb098699a7169754a76dbfacdee7b330f9dc8e04cc286b302c941372794742f083bf3fdc29e7634dcc014fb731e5a93212e8ee5e9e79f278da5c01bad00ff960b5860b36cf888835631b4d184e506eeff6bfe9e8e49280e1f438a4aee2d9b6de6a9c2034e0fe98e086ee1b3fc7708bb82aa6c0e188d89ac004bdaf52a56807848e500e6775b3ed50a2ce1a1789bc0be27ad28b9c28b922a04d4a4ea1bffc4f6ce3c8f10b77342ac3f6c410040b77f26b133a91a2d46b3b4853e06b1ead4186d224f50fe874faf7c6c1e70f81a80d09c365d00aafae091a2174486a5b86cc19dde6a577820c7f67d5da1682528640e6defbb90d8bb64eb6dea8970e236bb9c9531156a050a735b0dd10c9971de648f4b78e8c2ea4a495e415cee0f1c63260d6efcb94fc2ea18cfa6f3f32553b4f3289894564220bf30fe6c5d74108e81d8d9f41040287ba558b0df339d3ddd635b219f3438621010c5ff700b8068abd7a01cafe2efbbd89c626c95daeba9c419c75380e24b512b89d124386fc6b412409e8dd7b45e178df2f47b5504b29c59ad76feedb9a0d27a8a8366acd2854185d4c75d2637c22d8988f2f05124044e8b8376692a97dd3501027211b173bb521dade650423a419063c6bb50925c280a15b9ac55ec1d5e6acc325ad2e32d3cc4d74e5f5e6a8f60ed905ffbd8d6d610eeb24b5ceea74c12d1a0414b07f28c7176f83661d34f7f8a1279324942bb93fab5509be1c472e06074ed0b41dc2c82fb74d9a04d36da14cd88791343e42e372077a64895019b9aa03d826fc328adb12a61abc255a1fef3d7f847de5b91f85d5f93402379fcf107c3da18e086f0452992e41b265e5d9784e4acbb33b13baec0d200a59ca2d550fbb93092c25c1263a2136681482c61bc60c8df6d9adb89da733147d08ede91a6c6a1df259c0c73678520938cdd68928eae6761dfec50ff7a0016b978df53b7e6bda82e8bc66deb88db89d06efd535e2146ab09861d2f9a0cfc554071630bda1430333f4fbb6f75d2c7c585a60641851510278d3fe57f279f6018043f5050b3134ec7d1e828f5357b34dfb1e6fa0384fee67e869ba53df9fee7a209c7888a60953e46ffa2bc70af91bdda3efa7b5a202e8788304f699b73518a9278a54e62bf6e414d7ac005528a26535b2c3bd78a29083377d2f62e9b27f92f25f4a8c445d66900e43ccb99164524a6eaef81d60aa6f7d8a946abb3e6f6fc0f69c681601690e754e09d611f1833fbfa67503e3cc34e548323c242f0de5fbb4a7aead10c7af006f01088dd8b268ba81f53f14e8a4f3f3d1ff89eed00c8a4c0ce7449854c121fdab15c898c6540819c8eea64778c7955ebc99774958509d9f80177a9c304da6deb34cd72afc789e9d421265f5864466815c540a1f510c5c21d040ab87f89329dc6fc0666457a51c4191252a23996a1467adb4d78d0e5f8cba24da38b9d73e1bbd2157433a4bef5d9a8cfa822c41154b4d24e6c9bbdd9dc940006ddbf993e4e2323b3b392189a957478c8bef475266e78fa2e7686607b9b7ba73350a9a43e757af47cd0137a4ff98cf716a577a55c5444f0d425a3a429eda4b8c4a43ded8d52366afd86b372fd1456c70b298353d23277cbc31ec3894f74dc26d568e96cd9ceb0d1b799a805fbccd79b73f91105625c0b5145e40f6711883c23e6f009cf3a55430a57fcda4a74bd91d1e1be6f9f727f103f4d70d552c18d271fcfcf5eaf54014812332776a75bedaf51a65fc3c923394c19c25b85fdbb8d00d01c36d873dc27d49ec7c14d38fea4739ac07c8e5bc645838391600c0f306ecd823b1f9a1a0b06d61a9e391843f45e225dc2c3138ff5e84f151ffef40b45cf1f0e9dfd24fd9897f614213083a1f8b13c89d233a982ca976ea9078a3c9888c4d7ea1a8a23f0e9c1cf0010cc33eb014868059972e6b9e9c9f39df470ff4366654e32a20aa41a230ab232a3e040584c52c0725eb79a4a7a203733c2588441e49c078061ee15086d8e6ae58f9e8271e10dd92b34203a8f23f7ec3b68718fe90ca4c287bed855460a37d6b4db049ada51774f898a571935313d991bc24c6ba0649e96ef97ecea9c6e815167467dccbde4556863645fb7cc5f9d95fdef42f611ae0de69081304d6128ada6ca4fd59fc40d666522e71fdfce9374a56e29b666567d4a8565c30920d64b2f22adf962bae2b900f9833bd61d0f9c486dde3d888907c0ac17c41b81eff42046975a96ab750578f222c605e9b4d8a462109ecedef3fa9ae0ff2638eea8885737fdf51c6ded8defd2b9a834e9f994759cb48568a6bf631701440969896074d2bad26f07bdb89c551f340b77dce27d814ebd3fa31bd8c856144ff062f55dd3bdfa42673860a6d9870d5f156efa533761e88261d9e467ac92e222c623dea5abfeea60b69d26343ff114185b568259d5c4e7078d21df9b583b0cb4ad42a838000ccf814a2094465703346972e2b3088c020b04436927e65608efe664781ae636e5ec9881c4f0c999894b78199f7c9ee13fc85a1bee016afaa662f2f77012c7153d714b5fd02a969100ba4a9bc84435dd955011c7823b1aa6621944f75407f8259c9c4c735e586810ef4b8b6cdef53df6718cbf28267c04825ea3bf6a354ba5046d6ee720ac96247a5a48655b28beeb9ef5b939730deffbfdae016c5eb2c2527b4b49e2886c8905aaec2678f829e63de41d63d559a651dd0c335d76c3d241497c5084d90b22dce744ce7764357b8b8cfbbc4f18aa4d2742c5127a1acdce772c812eb8edaa437c6e1d32148a2184746098981761bdfc7b121432e11bd9bbd1488c683c5ce7ffe95ff9ea14f417f197cc87fbfbe3c6444b613b08d5dfee99b7041483ee9d27c298771554ac37e04ccfe750b51145dab07e2dba538fba47e50a974813d834bac0943cf4b54b6304a38ee8af3485c533fa26d463857e82204772a21a75b2ae3d4257880693033166ff7035dc69fe920cf3dfd217acbc3569d15f6259f588202c9a07b637711510abf0a83e9258410f849693fee97c494f7af736ca3811aa1175055be366b7184cae314108765be8e67f98d99390e43ff1d0a2074f7bf1db0123d754b2a57344a5fe4d61385e937b2949d018fe6befd533fe67cbab45e2b85d5a78b30a014a8ffbaf3cc83c4f1658074642c4d54b1600560a6598a1dafb6e11512b206ceb5375c6f2efd06181372fb1b81ded872d1156b722141169e4eeab22ecd990492d7d8a0324429d8979936a55f84f3c46f998234b336cfe8e3580f1932bba6721538b0e97becdbb4aafd596f69c576dde53d278649698c82ad8f68fd3531a4d6c18a8d3e532a0dc6d971d32ef9936d3a3b0c92dfbc9b86dee51cc53fcd89078e945595dcca3909d67db549b8f06b584fea1f68c0e4d2ac71879f2bc46311cb53c72e985993e5c75e7097cd588e3b8afb65c4b3298f9a1d550c47d199181a16638494a6857338cd92e3671acbbe6e972947dd16f2488d8ae1546eaf935baafea5d620e68d6342ad08803d7b1f3dd166157bad184872e49371e54078a6f46883b8be7641113103c5a440056acd8746f8905c5a0493ab8d70305f7d825590738c9abb537b5784d25f2ce380fd8354ce5f3c54651e748da55c6d4e206d12a987ebe9f5f6f1acb1c585ee70cc0313fa6b1a3bb76857a52d3da7350b159850dd51838bcaa4adcc4307074bec4acb214079a1b5bad9713c78a057891cb554aea2b9f2809d0aa6462d7a74bbdf2283e8781422e7fb8825b24243e803afbd23301ad2132d05bf2f25bf2e95bb0adc3938e0706e47aea6faab575c3dd733a1fda900638e81f2fb002c6a2814bab7a70ec1053050f85c8b352081b5a895e61a91e0abe2e5f40b79eca18c5620ce8cc4ea7ef9644e35ddbd86b4de1b3b8b2f6f74990664eafaa0a59ff484cbd8feae871fc732e0e4a58fe98a2f2b399b6330ac7d66c80b03e042329d30f7c14e6eb33d4a0eb19f734291ef3519190bdbb2bb79d0b44c3c8390efcec7f3cab057877450787da341a537dd363e53ea6d753560a5e8052ac1c260a653ac140f0b8a120fffd007b6ea19da7205402790e29e254f972747d373e0f175570e457a17e7b66225f99e660aeb2a057ca787718727c8d8d33929a78169a52944e31d4612d1281f1152658d9333ab1b3146e814d0489ac35b5ef92030e5e0c8095770f0a1f4ce62664d178516bb06ad18e123f2e9a3dbc823568963f205bd1a7cef475083d05cc309bcd605b559858646ee5505736d5295369f2c64338b161dde9aa6f0185fd09a00cd64141508422d0f20358008c0d4f1c84d86a62d47d1d22e0d150e1b43180655151bfd71b8360f10d38bac4b8914f8ed5cf80c3f1ae0631377a0a43b0d9d245c03d41e891e092d5cc97a971125f0c276ed436b688607b1e05cc1bfb7e497b622b13edd03ff159f4045e16f7dc46bf3e2e82ae49dd7ebbcb35736666c681814081314ac5bf55434e4c2b92d6cab31be728f7013fa24fa0aa429e35f53426453661a7cf6229b10d6bfc27b2d1fd0a4c01215d6f561a1e196859637f301d98c0d1252a469fbbfbae36c2700c031eabded0f800e78968530151eb32f4802b00c8182ba5f75b20d3813b4d32ea18dbec466af45f293d6792783dbb180a87b843acf22885acf1b68d3ab5c1c0717a8e8903ef68cd74a6b80e9788c71b1c4477a4ac2100050992854955d2babeeadac95cdc7a13d58a7a2429293f3bf3d03909e234430ceb2463dbb2f7712bd851835bd30de7768ee483949bdd2ed370dae3872abc8b643ad9746d63d263bf51492ed763d9a713f6ee2425d86494834f50361387a0c47e7d77a36212b2a6238164045ac64ec66e64ca0cd0129561a25ca4980da08cb2586f0c190c35a79972145b4a308dd25b09502229e3ac5d725774f45d42e4e497f4c97cf36984273e9965bf8af261723d7003cd753a698e8161483c8623d936c6332a93178036343857a67ed3d8bd373e0e9d1d159a7a9a14cfcd8a0936030d497fb9a07ab719e74096582199c2467637b724fce86506eb7a17bae6dcf1d1f255dd59b7ce69f93ff561ac2f1df524a62a61d5d93a0290350a357580f7ab2366d015fb3554c853885c3143406d8ac6f408152ec212214967a6063434066a5ed089574f4c7505f28513265f99a030459941c11e7a5508c1aae1080879dc1c9e09b78357d40e55ef81dae60ca26a868801bc4bd36744d48f18b5900f1033fc57ce8263942d9f33fd33e1a3eb1f5e4b0a6a985ce6ac372bd7b63b22a0854cdab186f0906e1241214d58169be9bf9f542097b3c0bc4d1e2439fadc219c8bd40bc7e9bea157d23546b90fd81eec185dea04ab04e1d8c83a935c28b2f327076ecb14d9b9732760579e4d8d57db454511f56a6be08ad322a4f3213a4fcc11120709077874186639265a79b57fb84af588132b004d97fa1b0eb5680fcf1db41321e37e3bd3e9110e28b6d1ad295f79e06a267a24ee44a34087695398f57f0ce934ecd5906d3363c0b714b8e0e3870391693eff15da02cc63852ff97d89837524c01b461baf0c711c84965b301405c1941cf7815fc6d90ef2cb349856c6a0ad429ff58ad03fb0d35dc79842b1fcf064cce0cf3d0355e70a313cc18746625eea02b41bcae7132356b9755efd5a30e3bc6600c7850e46b589d992bfb76e7fc5b0069c1597150bed3812aac153bc2f32faf4bbbd9e070a944978260c0aa49cac016151ced08530aceebd27221fb3bb3ec2aef3a0de6c5bfc6ac6f71bcc34e674508f7b10540467582572952fdf2c0d356d9835fec6cb6bcd88b0940045592aa5946a924ba84e51d226d3ec763821dec1546d1c57152cd6c294d942d14e8f3c0beaa32d63764f443e8bf14ac7894c29f07f1ee86c06da2fdc294af56c4be2ef9ce441a99705e3a9c8bba6c970d340a671b519a2a9f3d21af8f9ed88651f938629761816fb5655d305ad99281b7106831feba88509acb84ce1974f54c615c76664ff7651f9605c92e0ab108b3aa4018c0f26c151a48a2aa5b594585cc071202dc20514590440a9bd29ba46bf5043c4b93d10e910f4812261bc92c7ed93d6cec43009226e96711052c54683f4f4aa556c10b5ea212f4bf8c9cd7612ca0f2a0c130ea048c6f32bbdf1ee5be829bad2c232bec1ba5b30bdcb48c1c604c7833fb968eecd6e9117611b223295665c7bbb38b80e363dc373a39a9613e8f634e2ae00e504b752faca4a06f71ec8a6cae2f2376c7788dbda9136986b47a6647067e742d7170f04d5cdfc3bed3953ede741e7971d11352f274ca4486567394dbd0baa152cce9cf587e4632c2dd34ce459e240a3ecff05b31184316a716664f8fe535e1c2be3b97e892bc87c5f2139fd81249666a2af1185b0be87b317a8298a545cd2a86dd7a4d6902b0c5805ebcae481d6a4b78615fff9939e96e2962562f605ba29692013badff842caded01054cc7f1143193c40d58784cee9b10cf31d94bf45a3289d67f7fe8b85cd1c129e892b8656040fe0d191c19a97ef4ede1f8d5655ba0408632bef3314a98a3ce4a114dca4a2a421e0ece7aed72b0b8d4e1b76ec1e3d1451d802e54b5d1e61018bbc75505dc4e162d21df1f60462aa42b9857b507aa168187e3ae27611ef652e9dc2a64c7d7e744c006c4165f9c9029dd54cba0d9a4e0b8f0ed9539873b89338fac5c3f1a3b3539287d9995f22ac7a65daed8cb75db5229afe6a76284b6462ebf3a0fdae851ffebdb38aa60b02b2e4b914272e672beb57320b9cfb66333e9ae5a608f0e4262507ae1fe8e16c8fba39cf2e4f3c100f7207b5fa170e140acb542928f11d2192805d71464d68b1b71529d9e4d3ae859e75f2e9fdd208285d211d8ff4fada898daf41bfb2a954580fa0530dd4620fa3ae16fb210f29ec07bdd69794b2811f35196d08b9294bc011e524c83659096bdc04ad15e2b7314cbb6ed40acaa648e997eff01c439d72c36c0a60834c2ccecc9414fd1c183f57a4f4e4584253061d145221c402d29416bc8021ee029c0da354cca5fd31c682fd188c8b52e0aab10bcebad8435a2c32ef2529f2ff6e2c4b2a37538f2fe88ccafdfee105445e960dee0f8c542a6c66b385cb0d758df734766ace3269fcf72190a26cc699b2d2ad8bf4ff0133ed40097209177e068995f017200477dbe60a35c5c65935df92a3b50a2f9411c59029399976fb325f24493786cdd711947a9a14a4732bf434d6fb25be55af2a6a2b0f460d2a9f13740cc86f8125c0a064ca38b70cb16f1be7e8ad1d08cb7c8758099c923e12dc5ba83402d51587c3ee313c1c5e3d73c05db1907177416bce5cead83020938ca564ec00935cf90f96ce1b8ff2a953cbdb5b40b31936590358a24c4a59d67d8aa42d487a8923631168026624dc5453271afce45a32342182915adbc2be5504bbc8a8bb07c923f9e0749cdbc792b885388c0497bc7004ed5c41b511f3049ddf89bcc10a3e5c5d27e0247f03b3b6324bca6726d5c2975c0249025860632955fccb2612908f642e02ee313b636f0fbe6ddb275cf04cd6fd5a33b3e23b33297faf344ae1d5c0f8b11f236e55c2ac2c3d2b691c564c149b2f4b11a6b3111706871b32a48550383091c3106ab5ae6305857933e4cf09174e719de7e90de62d7f58928d04d4f1808ce1dce0ef84682568f943d113f923298da2102279f5a8ac883806e3e0d7bd9360bc1eea2d883ee8628847118d9569170ad641a1102c87ec5b9de10c5ac72ab313fff50c202819f8a078ef7e3072847fb9ffa028f1416ab991bd8291acae55b58aed103812219fbac9c09fac22501127abf0fa59ea0ab00a8587252af484ad09855631ec2c4a3b2215df789446f0b1f3dfb8da08574f50c212db26fcd48e93232c0a9ddbeb79c3026399930a3e0aa414f0002c9ab622b5c5cb00475ee17768c8fa0abdd2fc441e32eee417c6e9f8260dfb0f5ec875a6cfb3731cafc4465325c3d9f50ff0f72a2bab903e27b66ac3df0c09987e12abd131572dccceb0eacfcf781221aa32f78fc0650bfab2d998feafd779d710c92d4c94085efc9c76a8d737c82405f97cea1c46da3c420b4a61e4dac00a4fd22374aa6eee27b852bb7328c214443bbe2667e2b7756efc0ce790127d038c5987e7c77b28aa8cbdf21bc7f1344371aaabe51e54da576b547e0f355f3e6f40658f836f01d9e10875edf4797e4286450df093d0266fa5287a1f59dcc3db24a41b91b1ff59aefca73e680059488ec73a83402a2a10a87cdb454bff893dd107a45303bd8af6942f6ab88ab50ae4be8466b552fa445a05d4681a724a5001a0d8086515f3d94049ee637955ef1a0e198773654857f5d16fbc9faf6fcb48221945dd4623df425709ead17fba2b52b82ee7751ed918d334abf9bad590c227d4fa6b94d908fd0a924a669c62908946c49fdeca11c2b765d65d5112915e8187d8454932f43ccb84dfffa2128d043ac0fe575c13139a009cc5e240a6d7a1f8de9b21fb731405d2b130e3aabd55bb5f85a7988c635d390daef37fe0b9369f5e96c1768681df28622c4d79190bca33a3839a6003fd88c57a39799d3b463b6f278f339b83a4bf97acceebd7efc9ee09ca2b83d70e719de72dccbefdc684f89dca0b1dfdd3269c5d77a449f89660ccc769aa8b19656e9fbca53a390c20c18db917a6182336e84ebade50118417f3941408a093f0a7e240dd06445fd2de290ed1903710d55fdd68a30467a40d219e78cf2a02a09f8a8e06ca6601886151ebf59cadd16883b9ac5618d2c68ccf992f8bcb8b968fe0fff6eeb15a79c10c7d7850bfe3ac733421ecfffe0ae035553ab469dcee1438aa798ea70011d16fac1721a14c71dca4000e95611030107ff014a8b744e61343af8429b13bcc3a3050e9dfb97e52fb5a851aa88627ee51c05cfc9e713fb9ad92d5d8657585f5afa6e3e684451dd687f8549f535aee829b62a4ed5d303e46a0aab7523271b1607d706f8a3f33bfadfaadf7b4a8f71e64cffd9ef32d51a346650449f6e7b354e7cef3d3fc83c119b3147b000467d66fadae49d6047d90186e8ed8a287c65953576d7167bbfea6c671cb0c2fd0e220fadd95b504121caaad60767135f0ea083eea4a45798bb66458006cde9d4c9af94d2bd494976bab816dae19e2ffd72655471c6b29ec4595ee214b8978e47d436b90a27ab7628a6a1eee0aaeca1323e5ff904765df666cf47f60383ef54499fd9e33c1a75edf9b90294b6e78f7cba0a7610d4fb93dc37b807c6da7f9cfe5ff0cd8cdae2e7a5b510ffe5e03d7ac565a673928ff6d1be45a847e33eebe039f8364464cc807ec7bdfa4c8fcf2f84eb057f826a74991f3e7b542a3024fb6347e6696cf1943c9e5511fc3b6c97b07a4b62f51a391cbef5eece325b5458d5536a1b872a94d2718803c9eccc397d3fc4aa9f99fc3ded2cd1dedf81f8cec6dc831102be29ed35e9d03a5b6dfb85169c18459547782e069d7077c57d383bd3fee9c10464d35524b614b9e5215379e48a83e25b585c207fd001ccc670aeecedc476aabeddd119f37122cd0073cd04ff15b61ef4f6d5ca7de0af7e2e5defc2e4c3655eac3505707a32c3c07126a146c82f73b6c533025d244c3647a872aacb03247d0182f13fa02fd452f00c522a0c9786241e0bf6d453ecd1c268d2d3fc82f236471404128bff07fdc9cb4db5e338a471d454f825c804c11ba03041758922f576a47e9ba24338b49cd5f8b56d92abf434b0d91d607b9aca51cd8e839fce34c9d4795022cf7e3b699d0742af69f0c38713a2d9e5dd6ac98a97d87d867ca0f2a85f3fa562369c2043f991fbe9b927c24ab4dfc99e85128758e59fedbe26bf42cef2d66314082093aa9410355be33f408fc6ca17173ca41fb26f64e1afb615ed840e838da28a5e55010cb5a963af231017d42a7d4725ddfec736ae7a3a62a9aa80ce6f14013a1e6cf36f1fa79fa1492d98473585c2b06b1fda747b224932e950ac450cf9c6a89b23f641c72096030e67b64447d8981c612581f17e32f3a71f281f7ff89e4773455ca9cd0c0e73936738fdfc9690f26266f4a6386ff02f6e2700d5d4e0731dec8c500050d7a6a74508e6cfe1f6ebf36b0dfa6687d0aa57ac65093371c83e2da51a44e289ce570dbc8a55ce598f13a31942a8877b9657cb4c3481552fa00fe19dbc11b2522c6cbf224840c58ae828d5a0fd9a7ea49cc200a0c59305b2867ef4592172a9189a4c263916ba8cb15823d762d77578fe137207de7859d92999a88c9afbceffeeddd75dcf5030367b072bd11b497f50ae2d367493280e1dd3666860c4cee9f6a7b0838b0faa9d28f64546df8b93f8c8ecf86f322fc494d5697a2d395706dc984336480983d4f23523d3c369189aa85928ecc08100f0963b0e44a47e2cb7af47cafe517717d7de672b0af7cfc2aca1ef17782189850a7a5eff171931280bf226f085a0f940682e8a3d6eb75134fd39e3c4cb4229b154473bdd09a4e19e000632e3a1a54e839a7048dc2073cf45382af95dddc630ce821bdf2a3d61489009611e26b0e04c0d83d1326ca5251f3331c9e6dfbea15985596a4062445deea46ca616aa42d8d92013e07eab7d2ea5375496fe2d22778ffc7d537946528b781b27cf9a90e93b2fdaac56d66e23f6fd8bd38482a6d9071c7f8a275fa79805da091b816d2037fea2fbc441074a816d3a0cadc5f6b33e4741c51334c6ddbaef90c54f6d6f5a0162ae74d882fbd44f29a974746e63a9dc93b8147455d66de0183531e95866721e6648e4b386a5de4a2f8ed53fe41653eaeaf27649d25e2fd05a9f91c0e836771e3f376d8744aaa1b0474b18aa8961191d3677b2a2f12d5ce34bb89ed27d9386dcf94ed29b6a66c9eb435adfd043bd3ed26b29b6c739abdd336a6d89eb269c2f6747b13ed4eb163a32c0f572c6b46426048882eee966da72c753cf1139f73160a2690633c0c75ba409d71e31342e04b25659eb621d37d62ca8308f496cc60646c87db9bc3817db4d01450bff85fc02412f0ce2d372df261cdead4b7a0e9b319661a9c2fd33e7ef7d3e0b255732d5f4b985262c4910b816013dae5224e2801f4132b9985540c2228700f0e6766ccc9089f5c12ae3d8bd22321965326d6e0f391b661e1e2164f8d94fa6ed3aa216c8c7c3061a645b75ea84a63c54fff03f43fa33714f950eb6bbe88422b93192bd503f19d3d566b892bb14a6705a1a9c85756d9a9175cbc303170b35e21e5da3f6149935e51c5c9301113d32c4dc35097e576578a3e522b067319128fe394860c046a9a1de3409330f699fefb9795ca82bc9e5dd5b45329afda12115d7185283f15f035ff8435a9e4183113ebb61f371bccceb9480d8b63c809f33d751d4b93e8cc0daced8215800a2836834fbea2d5a65a097a9c3b959cb8dc5b92b156c8e5375adb395e0c4fe3b69f4581903cb3115c447b2a3ac0976ed8b779c0251d8d999c82fb46c32f71c27b4ae666231cb95d526b7c7d1c9a24b7f6ccb3edfb4efc111a6d68aefaf2b3a0c29fe15004369c45cbffda60a21d0dbcf6b3bea146f5e1ce20201cbb25732a269928e69105f2bd696ad260600a5a14eb40463f152b9df84d00f45669542d997e00932af8b02883c914b3806244d5759953001a5cc242e5872be4bce1d1a76d0efb8a7096e9704f042e002784e306a4766fe8bfd65f6b1d00a1b46d0ff7b51e61acaf6a0539124fd705d14559ceae91cc88749f6d1b60aa0bbd9ed4613fdeb522d47802388f370af0d11dabb32b7e1ddf8be2c6b61c70f2f6fb215e3a9b2b153ff56ef16654812f3c3af21d420b7e66fade03ec5e726573993b7ebd0adff91500a4ed339eccabbe564bc2ef3e1706b5e5504b32a9dab276ac10fc5629a5d571acca7745ab2b89613ae746000005c63253348a32d42b2f86a5f67b43d8b95b84d77e071eef27ebb9c36ab6357cfb99ad6bda8a409fdc233a4409676a25e88acbba16e403811d8130b18d88f32456897084c59cf2578f557f13afa6fc0bcc21264de2a4befe6d3826472f8a37f222c22cfa021a62d193b3421615a62a1d34340e68d8fbc48591225e1438d4fef27e09840e59e9d4370d1a5aa0222706becddf34421e795b05dd444470336345f19777cca4b677712317230d18b891a38f90c3e06270119fffd6327be4b171f20261bc9d1d3938109b30e03ee762e19ddb4af9e21046dd6dff33d641343312c610d7b9c6c455a22c9e0feb447425832b37f005268bd3e910f051cc91ae302bc5e9a5d365d7fd15ef1a2716ee7cf024a800591a6bf68af87f5ae09d39f067ced5d96bdb33f81a4b2cf2ece1e244c6bb8441faa94d37a14c39ed4e3015a8aef39cdd75067fa66b4ed3b54eaa1792e477f867f888d157899111b6ecd29496501b18aeff5162ddfd2be9b0ec1d08202340efa2c5a80b581668f1d1af92881e56bf7bd7dab10bfaa846421da83015c6c4a3c0e016c9c1f9d4aeeab9e4dc1d37d6a9302ce0efb86ac51a03adf2615bebdaed0338ccafd01d6f27db2436a40954e7c17ebb803315900b38b674fafaf57a5f4a69e03b040c32a8b0ea6c18c1e47404784c4908c42694b502cb85a1f74d03ba3c34f7b1eee6eae65c1000f551b28597da46b20e5ff80468b8b06eaf72dfac905940dcc79486df72b5efd30b3210de6d380e7793cf7ac1e120bebc314fe98f2990e0a441ca0ec2d0d0f6818a8a4ab0ee6efb1b869b451792a029d0738807a5032a03e4dd8fbf00a5b0fece46b1fa5c2cc2d6eabbb802f2dab7001ce7bf10fe20f90900b5da9b8c829d63f394c92c2861c7632ebe1fe5a90f00846b707e4ee9b74c59f320f98449a827e724f040a61fd2dc683bbf7075e92271e37c96ecb2a89a65fe221619ee05b3f9bb909ca8655d265fd34919f0938a96beaf0e281a4bbb35dbaec3cacef77a0cecfdb836b4094eb257b994da77357242dd26e26c77298ff7ee4432d0e8058e3c2904a96b00778417d4ab1f52a4e3f0d749f9eb9f99c34c1f82061ad5cd5e09fc9c35cf16eb362b32fc217462d8a70e5a9af2fe2700d72f7d351658c8a3bff4fe4745feabdb4b3394a49fb134ff6e98866edbcaa2870aca7fe0b5f93929cbfde53f31fd41df780ca035c316862703c0ccae4bcb4c7b43dc4a8183aaa4af8f4f218e597fba4a98b8ddfda6a3d652ee75022c96b820c7ef28dc516d43d5cb362370df254a5f0cc0bf29adb58c2b3f87aa7292d05f7cd61ba2f22ba014f42eb9577eed50e4a17f619f7e8b925b7f941de82d469b9bf73c89d6d14e0449141262dee2c98fdeaffdcf040de8c09ab35edf75b22de2e22afb36de8a6910bd396eefd75fe0a3534e415789def25780a202fd45ffb1272275a4c5b7a33ede3c8859a48e44181982bbb4322fc61302d7bf77630832f7e1d7e20fcb45438972760be23d8384b381d8e2ac82a63410e37205204520614023018867e2535e7fd44dfbe6958a42a0fb0ed3b6f11ca5e16abfa531366363dbaf934a0017ab8cffa8efabfb36d608095c924140be761adb8dd2580113ee9a71d0b61c361fb4a5964a3c0fae8fe7bd179b5d10b1f71d58fbc42f6561cfc61a5abc7962aabfb5c4c7d3a74631e3e4c1a34115a38464efb5389d03ea3535e2148b80255d6011f1d373e1bedea1fd7453eb234c372ba9d0f7afd6686a696cf39fed97dbf3cd46ef3ec807330b8ab5ff2eff7ced9702a43d691a399400ba49310e88c8063ee1766dd00f1ceee3a337015d537014c38d2d17602945080437736602266718a947f599d00097bd8946a9fefb65c9d4d898e99241b7fba619859f2e256e1c4886c96302b22726f31c5c77ac79127436c38ffb6e7f506d677445b18b46084b4acf33f10237b95e30a6765bc1add388e6e3bddfef40776b68ecab289bfbd49f31a4ce24a39b66d20118c18b49b64b4e2a4f9b5027009921e8a9ee38d790e0157c11a62e1627291ea68d97481e53d52173236846953f3e03b5c804823ca07391b18e351b4bb9b41e0b87701b95a304c895fc7af1cc7e2a0900a17c7959892ce51d283aeb43f65e8179bf97ff6ff7c4635b532e4a0369dbadcfbbe6045b14a6db7823f683d61847d4a8f1ddbf8a29f4b14ec3212b7835ae6b2ed991a8e9c0bb4fbfee34c7fab5e458b839915b400d888e88969b68b5290c15a11d6c93e8b088ad6b6d44896ab5789b0879f1c2d11f50ecbd62f6b7ddfa5eb62074ad3c91967ea660165797ce2dc6d330912ff20142386af153bbc107521e48773a7666e6ea7a79aebe392dd89ea02db53f62bc46770305c27209ad057d6f494297cac1a53749d069bd2722e2756612a3e2e69b4b13bb6f53b75f3a0415c795d6d056ae0232630169f8c802016513be6630f8d102bba2b17ed45a8b0392c0573184e9dfe394620bf4bf6aef842bf64b7d4cab580bf4f9e7390b64581b6c6a55c2171a4e5838395c6ce13f57bb7f9620d6d5d42de04d305e3575edc7674b2fd56ca46ed8971d59aa349d45a3ced7be344720536b5d873bbb1bd3593e7a58f353d85034fd7cda77ac3e50431af4691810af7406c9f52a0dbdbb3deca7aca455da82cfb367ed3e66911ac0454a1e9eb4dc353d800747a467f843528d98438fbd605cea49299e6f3ceda52a7f1d353a54b45cd54495493ceff2f0d451a41532ecff50154a3c5ed90797760ac70bab95eedc51fe95bffceba8bcbbd7949f94836b88103f4b8e9f5b3b1481ce25f7865f178a79e82fa2ebade8bcd5a1e843efc2f6ab51068f36fe1bc60b7306fd3c887d6779413c32c784451de856449b7d4d20dbeac1ac4f990b41d26f1be956bd685ea8e689d16e230aeba45223f66f00affb4b4e35f422a9a988e5ff1f8e6ab2501a27f099bb8bf82b3d03024ba9addb3e75df9ebdfd5ebe9a73bb039d79827a22c9692d89125f73c3b40d9c5a9c38297f6bfac59f4ad7b3f3b79c6cd88f45f968dca7829f7ac144783d4254432844592cc175462c165fe9824a75431540796a1a71d1ee5196444f12175aa4ed73457121648d1fec0edd1f6ba9a3ef519f71532eba655a549b8a7972bfec6fdb332af8184d3e806a70a32d3bee727f5f29cae48925c035562f8b188e53615461914068b5501a33903bdab3ffb0b6a482fcbb41ec9c0a3478effd6fb0434bc96ec7fc912cf0b1664ea0b5dc75d11da938a248c566b39dd9c4e27deeb918a434a3de5e77b5797f2505d1ee25bd88b245b69d3980df0a56a0b35d73439f1574c68635ac008ae2c2475f960e54b05ff16ac52506f300f4c57b3ef38dd7fca684d08fc86195b21ab266d465534fecfe2bfdcf0cdbf35f472c6d7b6a448067236242be5ecbec6e23bc526f4b307f41b613219b8a6dbe5e4e20b2dea4c0feb4404228149f9a77cae56915df49a1b31ca5333db6e76c4c7ef0676965d0939d481a1b156683a317272072dace4352e5fbd2684f7b4681140e4878ef2ecb5bc55eb35e1d7cb31ccb58e902eb04546553058d7d1589c8b08dc8e7a0648f170c5581362e1f460fcb24ca8691433fa33d49f95b09473ea1bfa0e99542616db819e80c9818162a4c50df7f6d8844ce7b00eaf137d639eb49d729ffd6e1ae445d96a31b3b708ffbe51e9d5e4de64d0c0fe3271c3f7a78e15d109b46e347a635aecd655563dd28023fe7e37d863b9b27df496cbbf96d0e2c541a94d6fcd43f210c8e957023c24e4fa9fe85d5cda9fae84111ebcd4a646f83d58cc8eb5ab51711b43910a6cdbef4bf7bb63094a2cd722f51909daae86914812a20c5c62d1510cea4100d1aa044ba51c8c890098dcef9a6d85437209694ca4553761564b94e5d15ba118f4bbf13bb9636b1c05e3779fa4ec51032642e2c61b4a6874ef5d2d838f1d5407c4f21e5d3fc01ad36bdeac3442a2db7fca6408ceaad16eafb2a6612a662efe7c1636f06a06be36d4019d29e224109708c39a7238200868e055a99cfb597ced64aecac57c1700f369c02e01a235c0a5a0543af0e1d016ba8c50ad69f7e31be140e58cf07209e46a75375f345945666d9f1a049363da5a845bf7e67dbe4c67f349998ab0c08ec3e8f7ca97b8f6ada2247f12091f672914b4334c175e681226d7f6f46b64f433067a699805a33cd1eb5e8ec3efdb0142005f4c6dd71a24cec772fc9c973b3364cb6d0342a7dc2c5d1cb6d5089b313ef7ae3e3773c9725435928521b649eabfb41473f37ce0cede789c64118fef880d7db5c2bc53b3c3316295fcf824c32032eef411b032b7ad6737ac7a0f944952c4c790afab7b37bcd4effd31d29f8df060a392c3b7a8bee73e5da4f8829c01e222e24a01b48d65087a2a387794b3e10647414584a2850bdc26ea718450c394a7907a87057f16b4879aa129adcd26603f4f1bf3a294db8626a389538135ea7127b040abc6ce7b39b096a1f2f26d7dd86a377dba1d20f0aa9bc6041209315fb7b0d1781ce5a402c0eb61bc8e75ab766b4a4261984273db29c6e5094103315a448660a81c816e01730dfe2d62126b6004ab2a48182ea44bed1162d92b093a472bbbad315f6202d66dacd383ba54f24fa0f85ac8f226e1bced54845d903e1753dcc66b904ec7a824d3b82f990f8743d8f76f7da5951731d85b60fb1f111d06ba3d2f958a79abe9f35ec89d8f6b77a4afedc72c298ace74cb7777a2df05596496b9b672182c117f09be8edacdb59b0ca72212c28814297340bc288989786907c8212987002d13579823bfb4907349ecd15226c45c22687dfc458d4a4f35bac8e638b32cb783cce900d63ed0c27444cb303027df35fb4822e554f2a645d445f8afeee41b79862e066336577e769ff88fab29f438739f7a7824f404171dfa062d96b9b1bd230fa2919eaf6f0735a3cc264c52b63f2d3925a528d7d0e42e1cc45bf71b9f0c31383350cbeff3ad56bc006f12364258dee83ee223e625f23f76a62a1154e3848e919e1b22debf6d6bdb758be8f925c7c3a93b51e881d37c6959562756242a06f4a7518c1aaefa7c8a4dbb4defd3e54a6ad9ba400ac2bf80704b731b0325ba02fa33584a36cb0d4b012e2723503387deb03607f5c7ad6fe473cc524ffe7cdbe051301409f30d177dc51490f06a500378c7f398b3f790f3f7f45ce4f3d4f9c299c336661891399d1b3ea16f4c187bc8d3a8174f212213f7ba90e5ab0ec17d82b9be52da4b7786a8e49264e83277bc9f677e1dce09e24b16dc70f0203e2fd69012887c279890a973e805286ab96fd6042aca3303ea6b7bd92dcd11a8613202526cb087175eb1b17464b0ed705d975fc2128f8774f30c4642723e78fffd56a30843c27ac07be7b728d8f0e4fc45f1c574e91acbf2796c733967776fe4586dc412a7ab63a95cbf685cc97d922ec4a34fef3b6647e23e2f1e1da21be9cae1b00718282e29811a9a9c343bbb6b56eae13a854e1f2feac62ca5a1764b47a804a842c6e8cd4bb43250c430410065844ee88964f35c2d03b0338ded5124358798771650e85b7125d60c7b43d3a20dc9e69167cdc0af4afb9f93e1d0e01bb0a3461f3ed1a51cb17d72735a4a99c949ef82c7aad50c93d1c9b635ebf2f7bd83991fe6cd51deebb81b7fd85182cdea44d05e57c3a6d730aa8bf50f8ee5571c20c9692302046787298a794d977e944738863e011ccb125e773edd23314c13f411a09ab1a55769c8d5a780c26980e4080f25a780fc745611e18502349a791c96c87e996eb9196f56540ca3ed18f715d5fbf5be1e5e427349f359e220c35bec8369cb548ee38ca408493ec6bd4be7e9142611664785f01990c332289f5d85889c00c9c8d6bccede8c00cc2f131d5a3da444138a417581691e32fa93cc4011bf62d145e08009c1adc7812e78c7fe573807611ef07e2c7652458701745932f6bdd27e46e8b77969d65e70bc3dd0123e209fd1076375429482f8408c4eab7fca83e8b866195e22a09c07667348614f21f7a886c0ce31000cce8368615ab0a2df8b0c6c696bac438d39683c0393e6e832949328ab5f859bf669b2d3022c69974786b6d03a625027c4a1e2a4f86feb49ef30081fafde564080a8ab185a662505675b5691a2605c280d1caa3b967c7e1236a32ee0a67f0c8501277217f3515c92825a8462d34fcc1377140f97012269e6c30ac9877a57996a88cf643bb1934e72402c114da43b97c931b305d3d28bed54174d65fb55f79ec02e907dc1208d0071010041f7c846bebd6d983bf1c5316d4d4043b0b7a849e09606f3f2fb045f1487c9067e8b702063f754ed81b463c753bc68078cc24c3cd17af0bf16a36d3b57dd9bdc03c594260d685c762347ffff95e01c05239da945856f1542a3c2a1e6a58ce489f89bd35a47c59f6a88289f82be6f689f3825c66eafd13f377c2b1516f56d03f3f0ed01fb910dec053d30fd31536f5da2d15e03645699ce9392288ca16da229e080680a5a83f51b0563c5027e0eb41cd6e12fdbeab1dcfcaa8f51a5918c539de3610ca2f985bc372764ff8c29c3aa60fa74ab01c95347d63d03e4090b4f6a93144988bf790dcce2d8d92e974201510e49a8148bc36bba68f834363d1099c0e719274f17dafc9929d9310ca9d28ac83504edbf5eb0621e42b299aace4841dbcaf4a46f37b40cfc0428018c7ca58d05efb4b2d071e6d79d5e54bfc8e4ef327d188467144dcef6db9f6683b1a0056afdf151d5648c9bbb6a3aabdbed2b89c415c20df10649ed763bdb32bddb5f3a376b4dbc2d6f94decad789175b69a8884e4593bb3583fabca589d7b5282018cc5e4ebfd2300c61236ba9ff2dbe062a1bab1a0ce3994d441901f39dace918441731e2f6760f5f3aaf8b4b6eceabef5faa11b63e001d28ff5d314753d38f77cbf00e64e61cdee5a682acce087bc4f580c79f6a688381450d3f723a000566a867cc044feb7cac1d666ab1bf6b56166823310a7791f70f6cbf32b6ef7dd72bd42dc677b97cfed4dd655d622b9f6bf1bc2bff5269a4a5500eabddd6b9b7e3f3832bc39e173714ce818b833103f01b7e4d5ccaa79456dac807847844b51c6cb65f1c678d0e2494b1332654f3c2b45f5fd3072e77bd77136e361870ab3e362cd610531ec3af7b903ffb61c514505296b8e1840eeb083f644d1b900ca2414ddca3627704977e32e6de2cd6a4350b3285ca74ca9248ec701018060ce94ea28bf8e39ba06b4797d2bcc8e52d70a69036872ededd60cc52597ff71a6c47e8066319fa5816705290d0165317e9256e26ad0798f9d80b6528773353461af0b433b1e9ad3db6ec266955a734ddf1670f5eb5df532eb19eeb0aa250bd2f24e67cdbfb98423f9128def42a1559e645e148015ac5105f4a0bf4e189cc1471d0cd8051f7de5bca86bcd8827551093e38ad79263bfd0cf2aead4ff3101870f23141472edad81af14f12f9321464ce2599ba120e9fb23f170d362de750cdffbfbe0572ad2811979019720f936d81d3f2ed2b114483580dfea12d465baeca69a095bacbc53e3c64a4f1d2d6325ecba0d84f4c69e280fcaec4f0e0f4a30e8d898e23783591d7ecc12744c2f67f8c41013f6f2b822860cde424e01274aed426482da71a2489d48e367e08093c9760934c58e92c89fc39ed5e88a85b1919154271256829852be41102d2e808d3018a83b1c5de448dbcc5dffecf6f61c4ee3f38a8fd3b22ff898ee1df16e26aeb623bb8788cfbb2f3e5798fbe12eb3de2e66c9ec5e39b6df2d8e7732a39974b7050dee0e83b4aba579e2662a22c81cad6bd21b88d8d5a49cdfa04f22223f288666fdd45cf75606176df4dd7e938b526a28f45e0eff27fe64bdd465a01aeadfc90ca72ed1b045115ad94ce9ca21809c5a48ae01268a2e3556dd0a4930e4ccfc6cb55b0c2080260c418daf9a87acdbfe164fd50190757618da596afbf0a877a60a0454c499adfdd43ec5ec18fe80592c47b155f9c9233f68aac1cc142aec6f60fc3de14d54aa4d5be3ba356750b453e44aca5fd05e2149d4d813d54ae3e6cc4f6f60e9a09961e429698e19414ffb23e853367e40830c50336bf51de92382026449d0499f814f073df99583eaac87bc79832500adde2f85ff70ce0074c80572022e2481088b42c7dcf2757c1fcfad032a8d355d395562010970fcfe39a117164dc267429156f61e0e8c5738256f9420011170401344a675884459786b6534956dd346551d39f20ee8cbc02f08927294469e5b394f7591644fc2bb77749a43830b2b5a3402091363891f8fc3c3a5d16a05b7924a8002528ba660e189d406eee77f7896eabbeaf2c67c80cef2a7df1e69faf719d2809e0dc3f68d261825356c89f7947e6c160e26a9985ff56a0d72b7cfcffa60921bfbf22624e00907f5f91f9a387659012a9e8363cf50362555bb4c45cc7ca26db80a514087453f4e708d183ca7c8fa8aceced4744ded7cb2620925ca3e237d2b2d1f772f86fc5b71961dc494e56601afc311a3cb8cf6ef49a366f1867e94715d326d63948ffb8eb3d50a5f5ecc0c66be7f239da655bc2edcca793ea4c842b43d4634782a836fcbfcad2bf4e449de737c27e98d86448444c7459c86189890191e1410774b2bdbe10155a92a41c344fff7aa370b86e3d9d56bad8ea7784ae63613025cfdf02667b3ddc955fb1d64c343ef6b08063d634a5dd23ddc24d98ffe1a464b9cb9d15ee0e27ede5909edfb6d0fc748a5c9c8034efea8ab4e95dff81020b1ac02edd56de2f5f629630d821681ea56450f21ab11e754265061dac9e004dafc5f9829b8161935f68b7f913a22feb7484d217a03f50606421db51b0915b78bd028968d5a37d96173c1470226ab08976e63ace0af05ac13383bfede45d69cc515272545f88be840ede3832f50290e5703ba8b3ca603813695fa3f4c30e705a1a992184a8a1cc1d517f6cc0c7c896eb9071a33786943a474214b9ff19642a9f70cb389b2cc428ba2a7e4a3394503f37c3b818900145be6c1f1888bfe2947f49bde33b96d40f41fc5bb85eca2378d2f1215e73979f891093b9ce74a413d93adb3832fccb13957ef3dba9843dca714ca41315b021b4aab86a95182b089c3549de70be18434c9460b6f610b286d958c5055483524c9690d8ae0f0304ddd7936e52155cebebe4d93128c267cd7d0ae034bf0909ddd756e17246fe66c42f4faa9a9a711f0aa47cbc5929f2be44134ef7b1628153817f0e018f483bf1359c74316f0ea649f24ea3aab38d0681d9db984fb1a123a625b89a2e39b80bf0cbb406e0786632104def597bbe6be9c1f4292b9d1e3aaeb6f67bb6b10642dac59b17235306a299d73b44aab285629545680a4a504985ed327ce09c769aec597f684c031985504bae1aea435265029c68d14fe2c02815bc6b1664e2d53f53f4d03df2f8f172ab849870048602c3d9e58b848be1052a48f0973d1d95bc9b8d56e1b63d0195040677e768753630b3a66d3b745175af6b7187a81d275ab869afe0c44282ae33f43a57e7e1749f7dfa10b3a76b6e1ea9ff16919986ba4f7eb3423b55b4a8caa0409b18779ec2d978700365750c7f1974d7e9051d38048f9aa2f36941b47b22d22e644851a11a925030955f845bf9a1b220809b55c85453afbaec8055fe06d27806f7d36e1a9f507309c02d8e4f5a5ac2458719e8b9ff2b1b33e087e293cee457fa4538af5b818cf6786006102b5d21ecea72b727994e81ea4de620c58da93fea4ab66efa10ee5262ae3d8c2767295eb3f231524964cca8ef25045b4c16c2c0dda3161221d27ea0fb2a1638f40726c7139a5be5fd16dbe12c2cf4d5251fdfb4f01b2b95324ed338849568022417c8589cd0323e10ecf2a4e0406182f0c061d37a6b2e7653463b35829d126a54d37308833f8565b3b91ac63acbd33b0a57ebd0a9bea21650d87e70c78873d272c5958e185d40604a8b5fe2c97f245de8edf9f8b3a7d64e8ac9a848d1b94fa485c039b6b27d4a5a2aae0e1b942c13671e8d73cda398ca7ca1870b81ee528f2a8391c5b69a208016974cb2ba9c72cf9b7f71443444f8b0f1e6eb952fe07d687230b7dc4a70143ca71b020b2322e23701d549d6010a4204cd2a2194ced2c538766ca350dbe720a43f9b77be1d549976472ce2022023f9e6d48b83144153f43f47e25c2ae5bdd506dcf5195121032827a27d894054afba7c44312022da3c00328c9df04baf97390ec8ffcbe8946f9fc1d2420421c7a9e570d08f5a305f6f4a4208eea8043efbf047f6b9c2fad5c624a01138bbf27a8fc9f617aff83ba1f134128dcff762f978e871ec67ad46c0e15733fcb783e8de7da43eb3ad11fe935f3ba8b55e6d04788601eb2069e61571b3ef3714463b4e53cbab433a7c49a3fd7b54b67ed807ebc77cccf98551ace6e4f24f0bf93777ae622de1551f77a6c5b99236ce99e09e7fe3f16f6927be330b2cd77f3432f273c22fe5080a4beccbf5055dfb771570f010259382847fe9b2076b5ca1d6d5ba068107612fcdda6ca82868ab674529eedbb9a482a7db2b2ecc3d47e49468f1288a6584d02213e546ea830323ace3145cfe671b9e63799354734eb02f53fe7996ac3c71e394269e180a7d8a8b5f9c7e9574f51ffcffa17ac863586004243a792f3e2eab470992d4f54d6819c8af35b93d7ea6118e13d456766a791cd7556f25afa666ec9d95a082f01e5db90d476f1889b5dc5aedbf73c38dcd0b0016a987d12219fd9a9e99c78cabe17666f55a84a1e174059b62c3ed2adb556a2b8c723ad93cff6dc4796ebcc16b12cb26fa8c52b4ffd8bafbc50e7eba3dc1ae9c80b3fb4e85d7044bc5bf0e9b267f956c2f0d36f211c9a818092b8869f08ed66a23b03239d564a2a79b856160ca4d162e6cfc149a7a2de5fa621e44ed75c37490637d07b1d4d54124f3a6390cf2fac76280599af7e2649b2ad3fac758ca4af59fee5c45ccec1ba775d501d908611f28f9242f8c5e59d15121fc891808bba46c8a7c8200ee733c45b44371dc1a55ea4dd427d8976ed59db29819cba187ca84c89ab68f5f8a05db7a1cc795854d262fb5854a4d777d5f2895ea88df291c6169c0df20972203e5484059c73950f72058f3e1899e408628d611d3716e671dadcd890ff82ace36215cc404c36a0510f1492ba54031583f33859c714f73ac7a99fbcb7ef1f01fc73757dec8b58c8ad19117842fff82c4964f9dd633d40e8b3e55a85c782e687027e296f19470b204464c0a464d00251b9bf086c0be101128d2b75532ab3329878dbd99aea684d5cc6ab2d5ac1dfcedc54f4ec557991f66adadc94825aa980f9aebaa18dc064d896e049d6be3eeced1c271b0418940baa37d80b2f54b098bdc422e7c1109638f3a9d6586d7ab26796b3aae003098f2a048ffd89f04cc6ec99dd72436e3c1acd1dee26632adfd4a982d2b7846d9368b0d2fba742ab27220fcf2e6fd204a628404a24e0d362724d68ee202cef6cb636b21a9cdf55f3d3ee8ae2f48fd1ae92e3e59d5e01f38ebe9e0729d9f0278979873380766bd7fa9c9aaccb95b7b5a02d9b725813077ba6d4bba84c092c1d4cca989c6632eed69ef99679edc00fff5a9373dbfc7cb2a537e7256e33c98fe305db740ea7e39730423319f97797a3cce2c5a032a6f21d0b5d20059823b3ec3e2ea3158dbdf1ccdc91dbcce71960a43233504c6201fdc8863189c10bb227bf1fd6f805110157032107f4e05681c158645466f56b65f25ee2714ce3b10e6d1355bd8a25866a55021b1ff596eb850e414cdfc13185794e46c299604f70a7ccd41534b3af739a57d48b20426c7925bc6aac99d936d6c5947addef6ccebb01ea2696098716afab1440e36a8b53a91e52c70241001b9432aac869d80f237c16aadfc03edaacea525a769d049c8d2e38c889d08aa1f14f8531cd3d2799510d711af89a87c308a0711e044f42c0fa07f5440190f9b98354df122f644ffe01d598efb30a2e8c1e83890b21accb88e9ac4f4482f2ac77caf484f56ea2b3e06e4370eadd0786d717ea6bfe7914f41f87bc3396ca7f774247a290ffd16bd9d32db67a16bf609682df059090e46b033dd92b6d25849291b24ac2d2ad7e3bb2afc15f0067b6299f0ab394046615371d440387aa2d6f8d174c646177b6c01a984421828bb27f32c4ebde2616179faa345060c7d30788108c3cc74fb54c8fa68465a0bb9a2cd462874e2ccd49d5a5690229db74788cb8fea0a5e4cfb2be801412fefe6ac585078de84aa8d1083fb293560b09174263e6b89f994e81acff7cbe1ea6710d490fc975311e232b2e183e5dea021db8addb7aef49bd90895f0d0d1adc6ac706b9d9583d46c84c1a2bae2e56e0c7fba4babf4b02ffefd512d982a0d01fb774d61272a588c64101839d8f2aee0b7e19e6219bd24a240a3ae1ea001c4296f5f1dca31feac4be073a2e87535bab39e3d79e4044566b027f6908f3182793aace07e7981ba8a101519d1d58e1ea58117a73c521bf21f5da35ab363cc6e70939664f40ae70adc20543fefcd174462ced0519851e31842f20d0d8eb112322adc965d1763cf47d0427ad98a2b20bea11571fe88e14ad3a325690b246b19dc90ceea5904fbd509872070b90f3d129cf29c820b11ac30a1a9c7cd64dbe4faa5eef29e12d668f6721a9838259076fd6b06ec6b3b3c420f27017effffdd3b9534e4888728ed4121f3f2c3f68ad8e9661e8189b106a24104302a4cb0c79e18cfa4ec42071add93c1885b13040654760b7642aa42da12b5308950cde9f5029654b79c204a76fbcfd9e03897b3778d149c7ac1c1c6bdcee73ebd9a9e093550a6e4da1f8b618c5d73887ca93145ff297bc8a743de884a0ae2cf5cada3b252656f115a2efd199cd46c0b854ad38be3a207b33ed2f333423fa00bf5c997a016ee86da74205742353191b2efeb55d816d346875735b280b484de680eaa14369055528168df4b95ed0c76ca50671e4d10c66aa0aab32515bcb04ca4a26682b3a4159cb89d54a4c28567a82585313c55a4facd6ca4e94fd51119565f18e25dcf09813085b5ffc4382cb99f580bf3ae2dc7b9f93d4240792eace78d58c2c52bd683e3b4ef242f9fa86bc56df10bde00defb20b86bfee28c5417cdeece3a291c511ff501fbf521f41930a209b807269977f84afe00a2954aab143ae3755e5555bde4fff41e61f9300e667c2c93499fd810a05c4afba9a1b9efdbb754b7fd6bcdb9372b51586d344932cf73dc3b5a4dc949a55d561170e3792e537413daa953c856dd9a52f8d3c443dbbaf251e56a2e5612270931860be5f6d3bff6a9e31274e339e3215b336d241ce11c3b353f78e302c37db1ae07a96a9c76bcfd59a845dcd0c409ec3bb5a74115e6d62e4ffc919acc2af86bd01d632ebd0df7eff83a80cd632bde7f098fba05f0a09d2f9e6dc9f10ce8426d71e14b0a39c599cb4ff6dd301b9df644d8e094831ee0f409a04f0ed00272599e4955bc35615409641358c2e08e7b37936b7d7d92f42df4fd7875768f342c8e707ff2cdda85bae53eb08400a1ac447219d9fdb84a9e15752622e226c5701cd36761a95fbf9081d553052476dab034e4f8b270d487ac58bcf5af481d4cef37e05e32a695b32b57f7476a0f84754963bab27708baa8f9e56a3d634b04d839d3acb3b87e3766b28f765a61d0ee2103528a0645701b190de2734b104a2a5cd3f41640834cffa6d93e0bd2c996c64792202ce6476a798badd8eda2b66106370dfbe1c41c166f207755256306598a27b4aff0afc9801efbe7d05797245efd7ea4bdefe61392884bb2e2e6c97bf4c33acae06b2466c2066a988615d303e571427c8ae6854021253ca437dfbd8f8cafe488c9c7939046a615c0cedede2cf0f67eb8d0f6dc34cecca442872b61906d638970beb906437330eb52e8935b4354da7ba684e858de3255aa3007eed23d1e74dc138ff54ca13bb581eba38deb74c9e2c850c36378c99a44f180ea8f068084ffa80c09ec4e897ac08e05c96a37fdf16cc3f61aa11a1f3e31860c08d242b0da89d65a9af6c8efa6b1b37fed5d00cc09c5736d85104aada9aba7353995d6c228154628121303a0348f560cb2879c2821db62ccb07f2b26854f6a301cede91aede16aa6a97b8828508ceb3250d8edb8015af816df5f4813dfbedf0f03b7f3cbbe2c788e6b79c7d674b3c96336d809422793b720d81f48724c30c0015d123629ea9d0b2946af8a7db1d1374b1d8378673149d98a76141cff9c77c32e5f1303ef281c03ff7721ed3d1231e83f8b615049a611e34a3692843297456d20726638b30e544a988a147cba277e224b89e599518d6e5dcde00191bb252acbdfe71f2098c965382ec23dc25db3054e03218f3f380c8dbef861a32b2634646adeea60659f0a7940eca8fb7859875f1422806c87292bdc6b7d90dc0b6796a75c8dbc41c6273b657aebdc03d78105b56062ee4101bd880ef06f76a73f514ea12d4b3ff5ed006903cfd6e5bc0e06d7228cf25e9c73cd4116fb83546a3ec41d5179c927be22806ef3d1ca98a4d6bfca3c6b08d3ef6228ab669546028b56397a0436c5f2d3ad76db35ca594535d2b652c7df7cc5d79a78bde592e71e8810a1b4ada2479295e084458ba22a89ddd943bb0403a751f5ea7aa2de04c31900ecaa0cdd889f37c759e84712121c54a8794319d08384709766233bc358e9feacf85136974c2c63c0e79442555bae3020034d02ad9ba8c4ceb60023a409fc43d359237d991e6682df5b1e5904ce6ea12f77264dd03082691cd92728224248383634cd090539416c931a5ab711975f2f8c49145fed05ca2b52d144b7f6d4d291ba33ebedadbb62f8c0658891265e2827a8ce6c6d6897ea27b99f9a08eba8188df8f70a00ecea0d0c25e10d98e72b72393d9140d5374b8290f334afa2296d700cbd05935210c896570e69c427f3d1134a2a2720079ea3ada0a432d659e388c11f37783d76fb212a68aba31c63aeae0922e4d2e123175eb279cdbe080136d6a2e23b289fe1af6065c9a8a11cd4ea6f5ac7afa453d64a212eedcb0c80b037028e22da12ac2df294b03bcb197e550551acc4ed345686844367d2651c9466802cdc18c0c3a66e90bdf19086d85788d94f589ac3284132bb8ff2a9098e523386ceddf7939e56e18cb372656fc4627223437db4083d7d53cfb0f024629fad3e5be030fbca6b4d6cfa61180ec1086da4bc5b120f5df5549ee8c050c434b738252ce80d312320f1fffda8ad3568aadc96e85b07e3f3193669087c5ba2880bbda1ab4650714689d1962b1b7caadcdb24f5eee04e05afae32fe358072281aaeab11756ab50ddd3e9341b574996e44e439e5addcaadc13f0ef39d56922b512a18d2e4a34755faa988cf264ee0144c7f59e90a700c166753724890f0421b8a2ca23418d45bbef42b07b205e9b77b8a049d5cbcccb8e69ed94b6b9557ddcb399d426ebb06ff55e7c2d87b22a6bb7771d64e61d364a700db59fa27213a8ca863bebfbaa7b131452c6382deac7ac8c63f76210292ea4c9e73148473a2810ef53b2a8c741b7e24c18727db9ac34aa66b96d95fb3ae24297360f6f304b3a4c78c3c1bc01fbdfa2eceaaa092173d3ce618a34a3cf9f5a39c00f7480701ad9ea96c564c2f0e5bbc1cf249ddcc6a590c8e3b9ddf340a92404397d3bfe18363dc74b532d137be7f81ae4d3014eff572395d84442f143e015c7727f9f268b330b68c35a03f3c2a522857fadb753371bb1687c258f4770d817401fa24bdc01b855a5d7ea6d5a214b062669cde99585eaae5188fbbc70ea4a8471136f8701ccf68e783bf4bdc5eddffa8f0f4a6208f2e0b8f142b65b97aedb391c21dd0b9133b62f9ce3b9642ff8ef5b1dc1e864b513bf7f5654151148357303fd39d1487aca3020824e5fe2f4eaba3022691e8d3fa9f559cb582c368c1d337ab154971159de95a23ea83c6730778f86047f28d561f99fba54829fcf990f4ec813d95baa4ce5ff09d27c1b978440777563ca38df5d56d67d1a813fcdb98a20ed8c6691539747f48c60d5933c33aba98c6ef391d9b566e0add4bb6ab1e38033b87591ad512071c0bdb78cfa2799e41ef71471a756de3e245d58ef45008621d9585a0ad65bb898ecdc26a5701c90beeb9ddfbd058989301035cbd9fd88e3c7f15e387b9e99135c85fc56ff5121b08167a5493c84dc933a19ec81dc73066d4bf60aaa031eacf38f8e56f61aad2a9b94510863c37f1bdaaa1d39df13c7de5e4cfbac15f3661f225acf2a1ab5ad93edeaebe49e0b461d150e4e400e63350ca589442075f805366c7e01d99e8cce281ac5a7ce42791928bf60afdd8f716024f6d0f1fcf23b776f3ebdfa9055f9c89cc199b299c803846c5bc53034fa178c90ee7359472b95deef1638df825bc3532965105a84cbede7d1930aa76102a9a621fe65aa2e2a642bbf3aaf78c789a3c7ff002eac2a0ddb2ea19b09adf24eac90866040f20034a80d3ed1f200646e2142692dcd6e518990013de86200d0de0a5c5e860608db959cc85a704ba4814f60de236f871e0bdca9ae7d84a49ad2c7638dfc3fe86a99195fac68b67d2c10107d39663c13c2bf2720ad59231783d9e0a4eb4eddaa6b3b0e993e0e3cc74f12882ecd77c42800f92eb6ae34c4b671c0b7b7740dbc823da94b3edf15fa448a4a9a095b5e107fb5ebf0e26354a8323c50fefb5944c4836319d676f2d6ce43d9239f562c9a25958a771fda5b0d6b79d2efa9092d5655de06a25eb7b5ce1706a6e7c4e95f052c6d36616f26936effa03819881cbde9b35fb131f871c5b87ac6896b67a58b36e78ae9d0673f85fb55576592f2479050597e112c3a52e0a69a19e60dcebbf306f192ede843ceedb8ab71a576186065e5111f2eebd192e263d95ba0e84bc6782a688da58aa5812de2ec61bae1eea6ddb76410d27132df09907132165a91a4b397e82aa53b9ba4f0ad91772275a06df6f62904b67fdbf8e9231bbe29accf3a3005129cccb13d54b7581f05367630a42e08db58aec6da257cc0cdee89b2cdd0e44bea6fee485656f3fcec9613f99d86745f510191aaa76cbc23a5fe78e69114c728454ec33dbd96f3b469e2c5e8cbca82ce2a8e27ce9d767b14c92a31c8bf5c5e35a43a06bc5786b3f9588fb8bc0d86c31e4a21008cf54f9396ee4e60d18bc37269aa6294e403ac3dcb6fd3584c088b2a2cd608b3db23efb0db8ed87b6c6e1dfeffda5d50c2163261f393efab0dd310a4277cf7fdb5921773f2a2171784483b71dee3e227f6274be8dbf5650e9acfc38ba0eb526d1067eb121bd0d12a7c4758fa949531c44c3508dd9fc96172a3ef6786ff4e610479c7f99f3f8f32779e644804bb89ec556ff6921d125c5cf43263ae0a2c676b9fdbb100360076ccd5dac451e5459530bcc994a12e0271d6763848bf1d8b12c37767694030676bdd1503bfa6715a918b68ceacdda907a8d52fd8e9326e2d0d2672258a68dc2d7feff9a64fd8b214c3d9683f1cf568991306ad2c76ec22704d92815aec3408a053f0841411a95b9afb657cd76f04c76fb022d84bd395f2144451846c26356900e846c61b65eb258e97cba10759503b2c4d564209842f07c3a1623f1eef658dbbfd8b3be6fb17bd9337a609f0ad46af47c7537bd6624a2909718082f29945d28e0b55be04564088076426205736ecba45d1af9f98b588433888e1a0035fc8755d108f4a0b5445e39969090a00891951473511d65571e751e671947258308d12357939170a18288dc25ab08245d97f08d143c7d16d7ce5800d392e0e61f348f6321341848d7681858e835b699891f3497ebd6aa7bedd204d4763b4780723c50857f9aa8413c613016f44c95371f9ba1c36573b5e0ff84498dbe19d1017d04359f34edf0919a8619b38115923c8afddfc394297a06e3c2faaf0d9dec32516c85b8a9b9ae3a0164387af576d0f6c22c3c8bc286618236b00b17a24c047be01f9734597e0f5cee7e8b83125d9de6a0828137a099e478d1a1ee50182dd61570c17bb5d86db76720994b58ae02c47dfb804d6b7bbc2390743ed76220e725003c4b652028e4ce6eafa8244f2b3960a306602c2ca645611b88e581eb9584312a905074ab771971eb93e203858188bb56431dcbeefb230416985bf78cba52cce0bec39879293ccc5963119dd53931269e4fe111df62779db97dc46db003af680cbb54e695c4364cb083eea7607d047d8524733eac892e9b15ba65cc2c50229118903baee7462f591237a6da15bef136cc76a5a99363a489cfca40480b9c5d438d89af3f8c19278dc2cd0c7d1a7f3a75df8f7c555c050afe80453a78c424ca93031e5629bf19edee9de3949715f60138f1da5734b2bea038d676d545d2074431f705bfd39de65a1ef10e492fb28e9729b6fa3c8fe8d7b22023141972239086f855d416708e02196c0e128e3c01c1a6bc8d265f12ba051d03fea91ab1d2ab6a8376810ea9e060b9e69b421f3283733efd18c62e6f1571ea7ee678f7b50d4341a9a6faa29eeb0e69a4d36313c469e63dc6c6ba60cc1ed04e1728f3f9997c6b8d3552f6616defd99453d8b23403eedba0bc672f30ef5e986ff6a1f0989eea68c449a7abcbe81d52329eabc083ae80054b0d999f24ca227085a5a97307ac9cce23b7093b446fdd97f45a92632c791463fb6b18b5b27ea93d76a8e19256575181b7b42d2fb8b03581484ce44c3cff597c1c71535bfd99e3eb4f39da1ef4ab9c586224c69b2828840375f57afc5922523141321e202fb6041001a0b56ccc036eb205923fc225c0da5b940b7cd312c46b09bfe3a781cd3cd44c87ae8f68be000adc86dccd7ca39aef52a1ef2aabcd73a07ead8735d183ee4b13b1f075c8f7a4b9696f2ab8087d1c4083c43f70164402dc9e020aadc5555c40d45da5034b3b236b48bb92766518dbb179281286d019ee73b6b5045178795d5c33a1eb5f34a0dfb53ab053db4bec1310df806c66fe099d65efa9f5d40611714b8394c1418e000590b117b4197e8f80ebf5edde9b6c29a54c322519d2045e05490547ac4c23c0e771500ff64cccb62154923be280c12e6a0d99d252d204359062a5a49ce0880e468c90e2871778122880a50844f881a244871b30e987fd3afdf26390cdbac6a358f99f579cfe4173a8f476a0363d19fa3ac7a601065bfad5dc9c93636c25ac91cf24314ee93ea98c2beebd9a71c6e9d33d46193dc6e87189a5925229a54f97ee2e9d0a9592763be0adcebdc4dcfad39f52cf9c274b9f4764e7440bf4eaaadccfc7aa963369b4a9d66377c7b9650a7686f1bdcb005fe7a5ee76f6f66e29d14a1ae3eef3679c3e2184104209a1c378c49c7535e79cee51468f317ab432c5ef74e93ee70e789b9d230c30ecfa2c73afb1bb63d322ee32a61f523aa5f4e9d2dda5c7a06394524a8fe9f13d638894dd7c6b47a59cd3dda3841042082184d309066bd8ecfafdeb9252daf5cf2e06beb429bcb4b28468b9306bcff6cadf61d62b8f892fa5a4925229dd474a29a1c62379b2a332974f5b103dfa7cc85363aa3bb3471ff77c4e9eeb2c397ae4c8ccccec1caff8c7e8b516e396ee76ef6e668628f78fdcccdc168391eeee156231527e9d754d949e4f4b253e0004b303def9b3d499269f27a65f522d2793ae6952f6ca21ed628c18849a7c9c9ed33fe8c2d68fbdb0e581a5ebe3b10502a20b5b1fe8b99f8c96078e2084106a7e82feca45c418638cfc3d3d3d3bf2b6078347bbb793a5bbbb3beef45111a9226efc3dc6672dc79d99739a99f965a0397dc6957f28a533dc965dd37984dcc3634fd52b7feab94caf3c5564eb7fd90f0cdcf03858081b80df3ffbe15dd9f4e349155908bd52e99e0e4d096c40badd852d1b8a80bc3c7bd09d30763d7bb5572d48adc0ead097f7fb8b7dd75c27184cf2779d78f8a538517a2f1d87a13899ae99d0a513972916d8f97cbf8f994c6a0596eff74c4fa0a961e37e7c3f16c234240cb18a2a5a3610ddefa30d4337beea0416c234bc1779a57be6a70cf0dcf91fd3af9e578d90eccd9fde173f674efe79e23de40fe63d608cf32376274ccc63197d0c667a80ca757161cb034b2e163339e44231a889005d1f3e3dbf7ce97dfca383afd78f12e6b5e79797d5db89577bfa9d3c7e1adfafe6e9548ffe977954dea9535fab9e4e7c7935afbd8f1a03e48d1e0b39e9c0ea7cac8bf98913b198cdccda8fbbb58337a65b316b37df7698b6a2dad73aecb1dad9ce7ba6d2eff892651df4ae3d83e27e7830be8c91476b8d0accdd75bef9f167f0e9ee8f75a42fb25ed9537ad18b5ef4a28f13e9f559a773a21a863da519fdec82216aa7d353ab7df61fcc6b57efc46f276a339af7edfc8b0f6aaf79d6fb32ecba3cea7d17a667160f085d015cd812b27485245d1e72610b07262e0603a3ffa7f7c2f363fee9f4ec338374beebe5cf7067f75d3ee94fff9dbef2a295f2cd5808d398307f7a7939cd7f79c189a7eee3201dede1c93e869d4ea787991fef37c3d5e1d776b0df8ab7f35fa0e4fb3761cfbce87bd5b731cee2c5fb32c0f3adf076fa9ebc8f218c57e7e9fdb58e8564d83d79df553d54af78fe44492fb34d83f0614daf5b76e7c3e46384c3935b800b5b38f874f3fcd0e46bfd5a6bb2a30e9e0f7a9fcfa9c1d7a6a64d0dbe3635f85a7fec743cde091b2846ec3f4fd33a8979dabf90ffed4c9de97d8c354482f939e78ba75d0fd3793c27cfaba84c6b4a14c449909f8bc1b0f7eff4e52ec8961b800b5b417c9a5c035cd80ad2743f7b797ef4a030de481f5ed8b99401ce58c7d7833cc8857c6847df93f742c61ef71f646a8d01963fe6711af50c847d7e7c789089bd0f63a16beccbc72e1d0ff33c21d8cf7bbcce7d68e740ae2ca867e4a7a2b0f5637c0927ffa0ae29e1657df11f0b5de9c91dbef675dc0708cb2bff877cecfb49afe4abba66f58cfc17a9fffa8881d8a7277a5e94d17d7c65f8e895bcfe1f83f13e7efc5fdbb63d84dbe374d7b950af867a25df35f6516d8447ef798cff205309ff79100dd7fbe89a171a035cfcf5f3c5cbffd1e3e22f19f89ee095d1c15b426751bd922fd3c1e85eb8e0ba24aadfbad97d9eea3e2672e5b760fa38165d0cf47ef02883f1befa2235e9498bcd6659dd484603a0082d111ca582d00a811622d9d30a01526b07a3d60eac960e575a3ab0361a9abdfade11075d2f6619594691b5ac228bb744d6dda0d8cf2f23dd8f9338696362b3ff9826a92fcf9bcf4aed51dceb3dc9bddaabb8440496fa81bd5a3a34e1d21a22c425680df9b95d3aa51437277c863cb5e6944257a4a0be18b9bcc829e6c216d04f2b87a6560e44e02cbbb095030f2e3f06354f82c9b8ccc119b6c1a9d70c4ec5c9bcccab7054c8d12b2440c0e0a840e9124754e0d384891302a84269e80728764004238e609104f1b8704fe96451240a2192183282105364e8c92189a2185cc9c1092601b872e98c4b9b705428015076e957a14b632e9d50ea949c4a05ee57a90b5b391855218c05dbd87664a35a477a6ecc852d233f37f5c4a4e9958d1abd2a410d2f9432a50fa5b8941ee9e1524a294d41c95059aa0696c6860d64c9e4f0c39d71610b044c4a489fef4c7740d845a9cb5217a62a7a92226b3e3d9c66f62e54ba187539ea92144980455bf37c21bce199cb4002f4d32e063c407347d66f70e6cbdc702ddce460c105ff1d4d4970062ac1196e09ee68628233f07af7346150555bcbb1a798e5b0a0a901637b6822f69f4c21c67ff35696f27a025188ffc9cbb980299c1e3e0c78c3c6cdf34fdbdc74006e8cefd1c480b1c6b0487d8e1c37396e707244a6161b334d1a0303c3434c3b7d57dcb40dccb1e223cc8bf7b90d19ffd968cc850be8dcfb4b78a384f79f9c428c77ff77f7be176e56368eb0fe1f4d0d1b4fb8c70526c3fb64dc12627409601af1653a1660749d0b9a8ebe2f3c084014e2739d0a49967b7f7e26026f34b3f8a8e826d5c2e34d0d377ba28deaa30b0feb8779ae83bdda54dd0e2e54e00cbc33ba1d5c8ce00cbc5eb783cb119c8117ebba6e07972438036f771f77b7eeeb9e0b6d70e3a7ba16dd572faadbe94b69daa6da483db1f05216ac186fce1b1f380381e00cbc5d82ba0c5956510a076fe3382227f151af6e68689496e00cbc4c5d7a4eb88dbd7bb6571d0c1efef4a9a7f3f2ee3152af22f6d2395c5118e6f388777a497c9e93f8a8e8a68509dcdcdc70e9e1e2c305884b50a534931293b4e37bb5ce210c3f6e43b8a237f66c43d813ae0fc11948549bd81d5c56b086be9f70e3dba2a2a25befc74dc00ba30d8c918fbeadb51eb18aaf75bb1ff77cdb4df28fd398a451c219fa51868716973efd0778cf7bb0672603e915f7f42a47afe2bb77d3abf81cff4513f119a9474bd76ce11b63fc62dcd18508cec0267006dee915c11978a3cd8e2e2c3803efc741377ef7c4680f0698a79060dd47d77081377a3c26bfb0a5848acb4bb1c8dfbdfa7fdcffaa31d654600fc2e2f3dcacd33a1abb1d794ff4afee6b2447f58abba926bb05b11f177111175d8f028582289870618c2b43bca816b35e29348428f8cfceb3ce421afe2e83b33150988c4fc69549b4afd77f95797285b5106b8dded7e246d91e0aa210e12a7eed32b88a1f637ce1bacd74d4db30fcb8ae79b0675c900f8de0d23401065530e2d307d201ae020713fef930e243d85afc24b476d90d1547cc952cae7c0d1e407e8a06d67b2573e0164fba666aef1a0fcfe31358ffbd8b2c268eb42cc5261f22434b8aa6182129f9145dd33732d1dc351ef3ddfbbc8b7d554046b55abdaf6b392f1e8434344cfbc86302cddaf1758c6a3c1cfb8a558d472cea15cacb3a78ab664b60bfe8e449d7603cdc8b45bd92812f256aa20098fb4c4fdac98381e3932805a2101f7386fe3fbb38c5bdc882284423f68b4e6efc2f3a894550f6645d93601c440cc6441431c5044cad13f85cd832814f0b09536a084a4a47472d24545a488ab6a1243a734f51b11ffd50d723c31b74d2495356ecf79752d409aa156ace39256d1a52483cd1523a74c27e198a9371f7eeb7ac85312cd6a5944acc3973522eb01f7767d7a8569945c16ec6104a99294f1a545a939c9eced7a1dfff510fc60afdf4db93eea16aadb5d65aeb75d148a912c584fdfe4a57adbaa67bf6a40142d31580511343ac2122b76560a1123720920236c5968039848191ad191781e81ebc22eb0f0caa3cb584fde26d78835b5e2a06961fd260354bbde0cb7a60504b2961fdfd6bb6006c0457aeeac25611a38b71969304c60afe3af2fb3fe9c158a1bd2471a6aa40256e40e44e5b931851398185ad2120b109831b91852d1210b9f5e7bab74840e4faa3a0f799fcdaab58c4720f573418562331eeb49d04c0cb4042b0ecc3186d609e8da88d659652db30736ae3e7ba39a3e570cce334b33026ba865bc47c57226dc3d9b8f8d47f75fbeb5d74acb4795e1713f32bba961f079a5ced3f4ebaf2593cea5f64c7f3828a7916311fbbaf91623829da4ce084657fd272b2f82f3f8388c55e7a1e9ff9b2c6d887ba1fb7935411ec77c34284213dd82baf458aae7b10d519102924ec80973fc6ad06cb0fb71a64366b4b09315af905df0a3da8c69fc065e619918e7480611fb6c3f3d6c1a3232855050603bf993bd5c576aacb4603736f34d87e9fe185080caafcb1541596524a293d7d77a7ff9e464fc1024c831f4b75b1b608d1b5cd1d5f2044a15a805350310dce3c955207f335daac549c420ea651551cfbe59be1c2782f40141803bde25fe5b86ad6ded7bc1d61fb1b76cdc9fbe0962d997c7ba55775442017402925ffcc39a5ec7cf8010876508e4048a887aec02fdffc153daeefeb337ff7e475ba2eb51dfed8d472ba1fa26e64e1d2877961a46cf6e8c1334545ad97c5378b0ef60c76dbe377a41e7307eee6d410d2a574664e11419bf3e632eac2e041bf7ef574e06dff0bdc5c9a38a4a688b01f0da7efb667d8e9bdf8a7579e7375df0c77d21860af6a8dd43b3d4ef48ca689293f46ffd4139436408a9110406045891eb440024e9870c2830d94384982a36590dbdd50a6f458c3c60dcb1b78844041931a18d1a464a4030e9e233b7092c41129504801018e8fc607202d1f6c68f5d0f4c47f7e8c0cb57e68d2f2e10677c196560f4f8c5252b0965a4149ad2022ad202053b478d0d2e201484b044d29295a3d2c69f5d0d3e2e10ae646362ad8a91edb68b0aa8e09f63e3862d89f3abe8620e0483e0fba41f27d5c89e36320ce3e4e2e943dcfa8c17efe73e5c97f7a05e47eb147ffe99a6b03d0c65e8f752ee4433d23df8b5c06c136d2d1cf8fdfc386e18c7d78017171ed7f4cc4c70fef3700e5fb803784baa6d26071b832f51f0fb91f23814c7de43d4e9f30cbdd093bfd2965adedf1f163c9663fffeb239b7d7cda90e38bf4def392a8be27d6da7d74d447998bbf5cfcf5e4bae0930c1f736a39dd637c72cc83e24c9013456e65832ab631b1fe17cdb7baac74a165669cbe6aca080bddb11355b13081050b164f311354dda9bbfc849dec5f8f4d5a67987075de557a3a9d4e9e0c978eeb75b0ab977493165ee758e733baa6d22bf92674cd04ad4017919f1f0f721bd5cbf7265ee42c47e24efc89135db9e4ca0f9c109c91ed061c0b38232ce058c01989b2fb38643e112f19192e888c4a8584ead6ca598f344a173343c89021ffb7326265e2cffd645ca27e4e996233a649046fc8a6b6b99090b468d9b2658ac99aac78014dd692b69953260b75c9200ef59c62cbfd1e026982ff62e989595f858a4343d80d1996997dba1ed6445b4b48827ded30ac5321cef4cf1e10d0f1e24aaf0517cc172e736957a39b1e0da462837323d3ab1b8e6b86ee30f8ad7c922cda5adc10678523c106053702ae0827c4fdc0f9c0f5c005713c7022e042c055e188703b703a704338202e070e04dc079c89c382050b5785abc205c165d9b27051b8281c144e069c118785c3c2cd8023dab2704bb820b8197033e0a27059b62c1c144e0a27858bc249e1a27051382c1c160e0b870317858bc261e182b0cccdc0f2671891e5ff645167b1f2321096df2fa7c0faddb2d8c82dd9b2d8bedc125b16cb77cb62e1e58fdc0c38281c969b22dc105c0cb826e0d2732e2efcaeebf26f8fc626fe27e37e978c0ba18d7f9cacd5bde8c1486334736d28b1dc397056b821b82338168b63714f3624b82adc109e747bc3411623479c861c314e12451b2a47ac4ba1984d4edc935adfaff753f57fe9eae59c152dbb620f083494494abd4a4ad20c3dbe486f0037091b9fa377026babd5e5f1ea6492d422b72cc51926d9d4ab991b3da9a424eb641237914dbac649db482d3d93e42a8dab2267ae77367292d0c4192b15091b15ce870bc2ddc0d9c001e13ac0d5c0d1c0f56c556c5d362e5bd396840d091b151b1367653bc26684ad08db149b141b11b6216c4b9b10b6206c40d8b66c3fe0aa6c3ed8a2d894b61e6c3cd876b069d974b04dc1e198cde95c155eda6cb03db1216d4f6c48441b92fdeaf6c45683df9ed8ac6c58dc2fa0daaea8b625623cb12014480439b19a90b353e06487d8248b6ae582091e38596d4b1cd50861e5ee7a5afaa474424a7a04944d4e4b43752eb97bb7b76f4fd8f6b8e4fa47245188c8f59feb40ae4d643593f7bd109b3411599995d78a4543d34cf1db8b3e42c49fd82970a2439c4b93e8c4b2c1c9892a272768b61c9c582d805cba4f1b7126ae98b051e5df16f2a156bef2a6f9355beade6a9075d635be19599fff4d29374acffe588e2193737a2fcc26d7878c88aec358e102b3c9f55e55e9d81551656763c99620982ed48cd849a38add325141dca4d0b49808d9103796c7950ab696b498d470e785ad254d5b9456104ad27bec560417bb1d21814e432e6ec0a04a0849a822c529d3a38c91b58a3e058aedaaa532b19cdb78298c70151f3e437677210c3677331781619b11167a2ed4c47474c5499308147fb628519982a4879a908e8a9c30d0d20b2aa8b0cd08cbd20807d4016c45702bb2cccc7cdd37202c4a46d52af2e47e367cd88106373c51d2411244c0a51b6c20e2870a1cb0c0c06fb5fdb0bf76bd506b1ae6014b1d2efc168eae0b2b52400185890b80280247008a60c52789072444b1048e540d2cac7c83ccabb86701081d70297a72041d7c400128c8220320b4200a24584790d08e18cd90439cc024d1b40b5b4ab6cc2160f7cb8e086140971222941031d15212a4dd1cc1e244ae6b3e28f37136462ccb300cbb3a188c615d3685d5e1bf5e890f1047f7b32cfb1df4b3e7b931d6ac3b61270f0927563a9b9b731baa1368a28e3bec15160caab05412acfc2fa393a6b35412ec1257f97f283f59fbd884b102eafbdbfb563cea792e4e0341e5d6b8b045c4ba18cda8025ab0f816cf73af53d75c2ba5945e3eeea9c3beb640752cba15d84b2731ce566d63555d63e95bebc28f6e4705f68357eea5700aed5dbb31c783c183fefc1dd4765fbdf65f3ad8fcb2d337a6637c9c5859b32ef4a840d7bcfc75a59e6c6a0a6b6b5aa8f91a369ac7f4fce773afda999fbd0f3e4f8a0a5b5f66aaae81d72f9c9dabb8e75445cacb5a8b68e8f66b8f7936a303b69f9f93e99a18fcb1f8d5b0b93abf5a9704e62f987f111fabdec75f16994da884ef1346b574341300d00033150000281008070443a14828cd1431583e14800b7b9e406e449908448118c7611405311c07114308310000438821c618860c29006111f9dc8780a656e5ff21ae22de225ac9f0fe0528dd3f2275a6c53f0f1600b50406bf8ccc3db722b2cfdf8128ba0fae9984e94ac7cfd7f2d8ece38236a35f49813e3cf60626564995efadd186602dcb2464c52fc740bf01bc44839c4d39966b96df844e46594b33c556ff565d9d46b2e26abd0ef34f44a1711e22ba8d1321cc802cfa656099c08946ace38ae29ae08fd10f455f4f9808c1c066bb99d9d4e4c1acbbb0ac11b2da26717252db1ba5b2586af585bec1ec61044a1409a0b526256069e0c01f6db6dcfd4d483b525869274e4ea8795360b4cb91b6e76f2ca065e14140a2b4dd95474ecb98bd83e7faa1df59bb2a4a891ea2c65c70e31e83a0412636a1743f9200b16e8ee8e69ec8c23e243d1feebeeaee6bec442649bbac217ff29c0a241afe5b90a97fa0e93a00b1ec9c1330dcf2aac01c4e463028da73cd00063362bdbfa30b24972ccf1f2c6d0c35c1ffe30ede59664696baf26e0b4006c187c9e938301c7133af33362d225fd5313562d8435966f393309786f5a6275b24f22275af9bfb02515bc1b7597707935f96e7dd4ac45d8fcbd11c8f239b48cb81c9fdbda984811174bfc8e5f4b2c964b58f2e9e4c4859fa74a3ec6df64352fe45cf98bc6002a5e901bdce8123ca32f2ee7dfa0813ef9147ce8f8515b57a50b149e55d7cba0446c50266668f7224d6b467f0b811d7dc521a980af4081d58a3ee33a266d93ebb69d92c5b20392b75626aa11046f87de66a3f16235ed830120efdeca07e731ae1ea3255daa280d0e5615ed6e5391c4cfd3ec4c1dd3ba0aedb519f600115142f23e8fe2dc187284a4be9f31e2096ac831e038b540c22f3b4ce345c136e2275d270195577b24e5b0e5cae9b08b4a4375c33111f0c0daa432413528613e812b41b5270e34b48ae76b0ca217d1b92f1d8b2cbc0d2f4dd981a3722d466e54d15731a58784a8809d7a5f17500b4555401f6ed493a99dfe2a9498acd390c1ef500e407f7113d12f4c5a295095df5ca484ceae26a7114bccdb4aa81ad71fce7f5d3bea3d1dc4f4c749af97b9acbf23052f7cb531bbdda7f866462b4b75939cc206b48ff35765c9eacfa8934c370f4ba3c5174b6fad38d0a31a232c2bc501b77f8879ac7d4620a5d51cdfa226385b499fd5cdd93cd9b463bd4c660e5c83efe50d309261b367bebe9918730903c461548380f09816ef6a74f7ae9a7154b5cb008e8700206b38c4611ac8e6bc05f5d8f8df53e9fd2a835f812873b472b369601a20f3a70505b8f8889432bea4cf0613140da1bc87cd206eb29dbb96afd4258e758999d1712ff89f07c0b03c75869cfe80e209fb81659a70b5386cb9dd4da70998175a210a3d05088cc61ac06c1efc3e39abeeb99ff67960338b1f949da98a6241298d9d4254ff02a36a72c256efdbeb08f8aa7240401fc6c0d62dce2c6f6f536079ff0185d1be04c13a88b7d6797ac8c4c9c57ea9bdd3c6be84ecc3313a14cd8a70867888910c477e168ec9bc70d57b3a248600b3a76a447c78f422fa4afc2333228508ce155319c33058caf884915bb8aec939281ccaaa561ee128334d980d4db48119803ead0510ca788428c51e0bb235903e560fe2ad003577c47f6bb4130adbec10f1ed461ae84d6eb8c4fba426dd5d2ac603413b4a12b768da496c13eac3d98ce802161712cce27dac4bd02cd1197c1fd4a0b7394903dec2dd5c38da76650f0496e2b5097273aa8c95c41852adb56b2d9c5f3c4a9bd23a740ef0438e2eb96421fa0900ab938c7fc3d032944b22f7841414f48bf3c9dbede6885e4506aa5a847b7214b12afdae6ce1f017627c2204d753feb2ba4d931560f32a3c46d800454c8943ea9837e49ee0961d441c505989ee2155733a5697dafbb39024eb1b7d8548b5ffe5064aa97c3a74f52c50501a6ba818f90c753707dd6d08b3d4d556008411444482d8f9ff8f1ce3cbbd282761f517d4545bf6f00c6ff0905614148fc01d373fae3c3d813c7bee9c23445b50a95091c10627992c5925274e38db3ea00c76f163755dd479c8c56a01bd36825768474735375d3b59819090277f8dbf5cde48f31275c972e3f65e1275a7fa361f40d6300f61d61ff64697cd10cd87c04a0bb122ba9ec321071af45b4530c45ab2543570194ee8418b82517a5467d447ada22652dd7426ab9f9b71cf57934d2345351f5e055a6d4a0b90f24d4a8077a79ea522d53af8a557072bc76156071c9c36bc6528ed47043c4ec82941d6f429919c1d386c946c081a98fda31772c788a5cbd25c1dec8834cc9d21313ade1073bdfd5013f07c03d412e2f25e35430ad4117f489427c6428b1238834d13f1e89883e8db9b664ed1d89dead1033a3334abf8b2f14a89208266c666e8444fc1e4bfeec630c2bd97b97919ea456c5907e220c885030c9c7b4376ab8f0b13a8bc855617c106760777cb67e5818391064101da6eca0fc79b2027a1fa4e447a93dc120aa23e118c820810240772631cccb61158f7b9f07a649db417e289126fce17ac4bab9916cfb4caf164f488c127f00bd5bd620e715f66867d67d12af534b7101cc1349febb4c9dca601bec4b7a1b04310c4f5c2b239307980cef9d0f00d3313ab235f861f6e86854c6ae82a7406049064594e85e5a28f8e304c2bdda75c4c328de4da0ea4e6a77b21fcd04a79ae1ec5b302a567dd79e83c2d0df88a29c7589740a51d933f1e8ea6d4ccec54dab96a8428f1a2e205f5c5edc4ad93611995d6f4b47f395676b86b2124ec2cfe195f9949d222ad37eb38dc7f17afa3a2da2f52f72f8001adddfbeccf29985399ce9037b953dad8377dd2c05eb54f68afc151772021ca43cc78aed4075e34069cd1e1025384e50afd14baf9fa7782a2d2f662de22a40f0be01d1c08489656f0ce82f916b86fffcb11c532cb54212f241839f65dc7c7505fabec92f7f5fd9aa2f1abd528910d3a34e432c7d9f38c4adf7818920219f95aa468865bf2502a5ad33b6e0825217351ac93d9dcf670745e35c7490136fe63d89166e56c07de0a4dedcacee514dd9376c99e0f41e2c47eda3429dc121895f2e6e05b1ec0f804554a872bb0aedccfb881d9203a21f1bac1dca91cbaa1dd7249b308fed8c61fb2db7a5e5abfb1005880af5baa1e2e45447df2a52559626b1de092bbfeb5463e5e368d5c84f853bbd7425d0b1b618076d97b60f8669096fb158fb7b35656475caad3301f82abaf0a5b578c48140dae281d70ac37714c1a3f8a2398417a07f7fc6802544946e5ec039c6c669aa6be256e25a2bfc40090fff81ab9b92c6bb4ef3e40281b990250651b7b2e03351cfa01f4d4c9e4a333eac8ac06f28f27fef88bdf2865b96d961fda88813402513f1450dfd8a5baf2e7e9ed4723b7068763a8a2984b3f89f1023d5accf7eb63fc6b975455040aadf0679099c1195610a399568ebf32e16c9466c7286219c8a451e33b513f59bbdfbe530b10494855400bcc8b6594c9491ec9e740e3ba7093001d140b84ee424dcbec0096faf44f605e33c0a3e330a352699eb53e58dbaa6ceceaeb95104c153515cb44219a1d3f934aa1db40cb860917001737ae2a438bbf5e6904c06821b9ec15ea0d0dd12cef14252f11cc236bb130a9c908452dca84a3f834154343e4dfb16a68ac040533c49f8b69f294afc6a9bc057d00366a29ab256659034735395374c9440a82acbe2091725d9cb70df83c0e70c1202cfa9380606133ff132a31c0f0f8b5cf007b7d649e31715c1d1f055e90c3001d919a18b6c5b9ea8b630e0fb68b8a1eb1c1ee079e42a801932d2ff7abc0f71550fc75e59cc692e6becae9f0621299f8d478e9f0fbce8b148613b2b0fefc5f55de6e660b6a7c8e08e308a5da7b80a1469b44d96216ca444d8800bca2ba6114609e0e1f6311e992d8137df0f5e359f4b35953d2899ab2512e3114b8e198337070df0c11c80676f45f1ae56bf569a57ee1440b08128f484b51c9d04a284c9fb270929dbacc277271abcaf9ecc8dabc5a1549ac46104f911ad24c4962ba169be254c1c7c280af46a4ff5bd8242bb1930c4387b1f602ea0a370744b8ed5696bced71b2fe1aedaccf57a88eaa03ab5d02360e9b890ce6e23bac6ac8dae8966a56ca4e7d69883023448a7ca3a3c01abc04580db54a65d1f9ffd0ba6b9930990526a101dca2ec533c53ade55f2a91ed0ba1d434fade32a0c27b6457661f75d259faa557c33e79367caeca7e5cbd62415b6c2d37d3218cc22a6362e57076d228782dc2483f159985d357645fc2cdb053918d1b55c81a2f66724fed5047c49b993736a8ee67612d55e76e1927e1b84e55f9b7c73436aefaebd74be1d70a6bfe9d525bec7cf6c2f4f2d2dc7fed6429e060e662fb6454145731c0ebbe5e27c009a5c3cdd440c4ac7b6fd26f619cb502efe9e89dd6e73e61e04bffb5f177fd3454cd3e9e59d94b2d113f30f59350fa677c3090c9a5f953217c3ef5899c213c2e5175a126c8e6f3739d59bfaecdd94aa44bebc738b13cd71f3724ee3cb93778a90b8cb7abd1d5c59a18cbcde0d616aae73efa6a6012eaf131f801dd6f1e4d00a31ad2cbf9a36cfc025d41420eafd484cdff6dea8a0bdb7f765f6578680d95d384ee3ce892982f84de3a84405b0216190932d2a64e48f38fe241d99d1bd205e1dea54e2d8456b27e18057a6ed33d51099bafe50dc8f43f9a87f3575170b2f62e990a9fa89b44b2f39fd06eb3f5025803574d4ea6d0722f50900a026857833c749977e04784456da2bc6212aa93c485ac22ba610abab788844a2d70c2155a97d9c644864de1d04418a725db21aa753429b4f300a5155fd2372125e321da29ada83a4a5bc630ab5b2ca432412bd46a634d4dbf0de3430eec5910cd4687ef9239820ba45d1a076b85cbbf87667613bd00cf90cfbc97a541459754bc70c3acb9011b89a5b06ba67cc2d5325204c8e3eef20a3ee7ec20ccde10f042848f88d4e61aaab9477760f7b5aad9b29376585dad68bc2abe7462dfce14326d4a5eb8541e8fae4626e96b453e80d136e7f665ef48703f5aa688093330e12d16ee04d14b44a832428a48060659b365a48de43f1ad6c28736bd35aac6bb1774c5e6c02d182962668050f0e2599b3e7cd5140df513816b1b2a103149f5bbb5220c36f9d2a7043f3b9f9a9b3c27241d3ea55dfca6028f43d442b930da2e7d24d8dc9ae810413e6e5816d1a204d914518440b1c795116d562257bbf9686668ea67b9244d05349dea790a49229864914a5c59ed50465ad5f1909c025edf5c6d15987e52a2bcbf00bb2cd9e84a3ebd552aeecc590f3f75957692c81ed0e8c410b638873937491af42f5581b2b40ff64d724a02e885e6b31546ac9cc7748ec6b7a10a739e53c241cbc2edb9d22f9a6a526da719297f990d48c0545912d36ab8abd562987645b30df8e287969e2a67418460d4ae3840f951b8a074fb7b80bff00e46b6dc0f9dca78533d680a7b2c822d09d8cd74118d107909212a69a5b321d4ec99fc2347a5277e567df3bd6d857a3e0f3caa21c43c3b2f62d9641d3b2c3ab3502ecca437904be978b83dee2bb1ca6a14ae67b9df88c99e438e44a8f49d6b8dc18e32f97fd7705f5eb00c74a8fad345c533807b9b2123562ffae016e1b69e004c943359dd06e81afaabf35a858091ab605de163bb720d2a0cf39a82f4a6495262ddfd04f66be64349e415450f3afa2397df4921f9e30bf768b5c49cf90ce7ba8869fa1f24c28ecc5b245f44b33581799b01080f5e0177e523e56233d6dd35d4cc09544329d5e9cf2bda8c36ae41d250cbd4948c5880098528395a1b8dac301c5ab6a87000e914c7a284a2c90e511a9e9a32e9cbf76b74419fa3d8e15f532a122e594b24e061880dd488022fa67a0b3d66002e52a44ea9387055158f745c8da14bffe41f5b1981234a10a3dc3ac130e4f23a066e5bd043d557dbb1cc5685c8b61c4cd9921898a96d338d7524cc36ba2f4324cc3dba64268be97145cd2b4325e1748e5ee1668f4ca8f0bf9d8e8591128fcec2c8c420df4e8d0daf71e5d2dcc57772c9fd59880a863ba663696ccd54c8dedd577caf951da3a41206fa7c280ef324d9ff0d71a70726c8f8c759d7f38e83c0e4c30dadd36d85d0378a8915be290f39b18e89f9a16af482ac33d23ce1519fe8b389dbbecea3cb84347bcd45f19c805a244e99958fcf497873de32a490182caf9a70368014c98ef58d1a77bb1b1a5e56983022918302d374e39be844a6e5a440002fb1c644d3f3c405f8a9d39748daa112ab6e7c8752596257716ba2401660e44dfc081267eb867a1f51d5f56810e458b7e3f838aa591e9f1c95f4a1ccc734b21d82307116ec1f575b104904c7f419b3e7a82880641f4c1e76bd1154378516dfa3413ec6b097a433f39b8378f23a493da5073b4d01e87234255542df5482e5f00a4fdec100f2d43465fd19a4cd66dc90d1e52d16d23c0a0e09ccf771a80b9467d38b4d4a35bd306128f5eec977c28a627e6d79000a0b3470eb11d3027a3134f628633f3acfc03162e2d4e4f51dab9cddc6ad14ba317ea4b923a5f5fc3500aaf01e0e0ce29c7f90de881004552d3fb9b6c0d46d46e6636780234944273f53cb17f61744b0d0a936004f0e753291f02fb6ead9d81c5e77836a8f0ad68e1a48c495c62c3ea1e7b5bd3568cc02db9ca05ae3c958989a11494384214a9f22c53419fff616cc8500da5e861a9d9ef617cf28b801b46d4a9961c2cd5a86504d6d6b1070570172f53784fc6a63c258f9ad220e09198d7d00c772c92147755a529d3f201dc3ad92023cfd3c8df3f9722672d48e5cc397f3e4b04b204dabcd5f149a5d0d971207847a9e65cfd2ed702d9dc3b11b59fb9bf7e9509a3dba0540afdfae65de8c645714aec070aeca6da36d38fe35bf68e319266b599035595277e4e0b0b52967a596feed2e39521b2225953bd1e47a74726c7cce6043948e8480b6b5d1ec01a81b97a625cf9a55b5075c32c3b75d13967cf7dd34c10feeabe736d24bbbc2ce5a741cb59d8e54f499119555a298399181e316d871b41230530dc98a7f2470425f5570696b5127981f87f39bdc4fa716e8b2c9d3e38f9950be5e265ca4d7df1f706a8f17dfe121891d679727275a5daaa9944410b8ac0939bfa14e20d47c5057af2669e4bcdf00284628214c6f5d8895b41609df9ae79b95fa41fcc31a07d65b84f77324e9b69d015d35a423fceabf5bf1207d5080e94d70b42a283917d2b18bc42741296ab14c8f2fcb40172f3959ae8c928279a7897b42e75e21b0b98cdc5aff3883e6e62dfa924d2634ee7b457c5449bf4793e2ce30fa544f6199344ef77757187855ba6ac6edb19d95791ea765cdad2465f56bd6e6b46103d3cad661584b673c9a4ce47d314133d89c2e5fd75c6fdda32ded7d22089cad6461e8baf9f05e3ccf22c9973a0353101d520b9bc65aeb8ab4fd3552ce35d3916165c3069f0e94de54b94e189ddc58400b265e48ae06862573c37d5c14a79680b99ad5dc7b1b0f576383bb5b0f16f089f93511ce92133104b0062ec2541fb76be49a5c86d48967f8b61e72631b3dd36dd6ebcbe468255d42185bb7c98e2f70a62b5de5c77fbc691823688f05bed8a63e0a77e609f25d5d3ba56b6db80c5b0a802ea4de95c297a11545397914892aaf09145d0a32977bcd21b9ab70cca5c007a868dfd28bf93ef1a9c9ae2cbdc56d03964af1e5d38e1e29606ba8f437cdbe1f61f92e9b5331a985f05862199922046da088a22df0698d5e4e0c14874a590b2e2e6fb4438bca7187b3a1967f51a80f2d714f110703e34b6908d7a5256dc68fb8fb01e7e478ab731ac44e6d23e02564773668c396b0733756fddae0826781bae28ca32460ec81143c44e2873e912a89c341d3373deb33efe44654058d8905decfe74a692ac2454c4cb3abced055d2607f07c72cecdbca54cbe5562b31a4c8fb002f428de02f7c428495b85b3da05445277998271faa46f416aef5f57fe6e74a961fa3c2358396f819feb442f4e1dc1b1ab3dc6f4f5b26c7dbcd63080db5390ee9e357fd6c37f63ab837b29ce78f7e2f350e5fbf4004e44b1f5871a2d9433b0544bd575898334b5d1f222b150426b406e0061e6ea73c8eabe2d89eccd404a62183a240613c10d114ab26eab842d3b7fa32211c7e9218543e99f332faf9bd0f16bdf45a5e5a83ad6501474ee8a8c140b155850e9ed6c35984c7d5fe05dce9ca4c02116a9c75bf651657b5ba0900d5c042b04d8c0fd1fe0928a4e8b52466b0e9e0518b8ba23c4b039c80c8ee57791b8c0a10f433f14fbdbf475ad68c484fd2642f2888a7581104f5ac2f6293beb5165c19c03fee3481b9b854d0d8be20ae06d0aca00e6228328563f4b1f4ca673e2a0e2763bde508c4617d72983be4144ddadbe8b77b1140c1f2af740bcead25e5dc3acad60a7961b116aef819f20f4e6be2fc6123ec1561d250620fa3b0ccb50488c51861343bf09f082acbf7a85e895fa4aab7a4a2a2232f4eeee4ef37247c48e33a61ffe60b8065af17bfb05e02625db8b09d62f443ddd54c31896791a32b27a461b1c4fde3666bae10ecaed9bd0c030f69d37e656ac3374fa9f288185f9005b45d8493bb854f97f96f6f259d1c70ec472d42521c42c89f79a640be0614788080d623a8428c3f2a4b0e86c043c850dd1e6427c544bf0b95eed21a3ee9bc064ddf317ef047b7bf8029dcd1280b971fa3e0860711e297aaa30e4aecac2cb3177c09acde18646136fe3a86cc6fa60aa999deedb2d10239e10c9963a00dc38ad8e2d4ddf99fe9919f0ace8d4bc8c7ddb9ba698731af56f2abcf0b022c222bcd0c9b37f5c81da3ab56a6982349c3ab3618aa17d74ca722f0103303f6ceb8e6bb94d9ee3a07c5ab7d6b838b01be308ed44eb83fa051615ce6fc0914b197feb8f2ba0a14104e28cf89e7b8bb5f921895ade155ff39245a8b2f2c059161bc302085a8d8067bc3cfb0f2760f4e7715515e6c71c9665e7d24455991c4bb6f8bd2c427486f0cd069f577759e534736f019d6553ed8b030e73f8d1239c7f520837b7387063a443cff786895cdae591b1465822da996ce1712f51b0bc6148d98b1763d321358e371480a655b47a7095abf9ca0f1ff4cb09d7445f5ca320e413dfc2f3a40e9d1eb84971188b97beb88790e2d7a854d63e9d84a1e9f2cecb2a9e08bbd60b59bccce97fc35d2a266e96209bf6a25eee510ae70fd37e00735d1edce55c795c5fa3e48abe728c1d4dd0259f72f3bf32e8a1530c90d5b4a6b6d416d22218ecd225f9a823211b2733095d55f531f2525e31845859e52132a9de338554a1e6c364d2bc64862ce4832848b19aabea3e7cbfd6a28007c94b79c51062659587c8a47acf105a958a0f9349f3c230f42a758f485689e44d2e2b4893e1ad90649032f2689690278e8624094d07c2d2da743dadcdb48c86648e8bc719ea4376484bf4a9a8e613fc78b7ce8f0a8c849685fdd3d96ff3420b1042f6e5013ddea4479bdd32aed8ca040c2a9d42ca0fcfa515e63558d78de5e1fd49abf7e6464a0d0fb37b10ee4dc4dde502542facd127d05924f0c5bd86f83f3d0d327898cf9a870cbd5335ad66072f2ff43347d40057cfe12500ada30f166e4a7472d672bf38b3c8dc755c705485474f99242757b98fc818914110fb46a745fe9c29f441a390db1f917037e3d38b43c04d6beb9fec453fa13b01fe2ab4f7abb4fc013b652db5b111c6024e80d804a3559c4f1c9c6a4a922fd9bced37f9fba137f7d1807764db8bd126103817b39996b203d7cdbdaa3cdf6d975c4bb966f2d11b41ff584cd54f0cc9bc76cf82ef2769c428db0abdca2970564bb9519a873e3421793e28e7c6c1be23f3444ea34f01ba34ba79687aa7d9a900f92d8d2bd9f0e0985678a81fd2af7bdd885c8040f886059cd519e110c64e4fb469fa4b6abb8072127a1c2067ffc60fe2e74f154d3414acbf9eccec2a4d5cbd6de90a6fcee4bc5b48220e5a216162d61e072bf772f303227f23b56bd368a5da9717ca9859b198f9d64ad77329d6138a7ee11173fb8d69a194db41ff6ca6ea539ce5e7ad598f6d59eb45a1a32f349c1f7999191f6f918374df61abe2c65faf95ac1e44d151ee8cbe7c1352f48d4b66305830956952a36d3e64b30e14fb1f6b53c3eea6ee3b7dadd1bac605cd5ed9bb84bda0883032c8a59273c829b9993945aa938ddf6fec764d41344ffd628d704d842825c0f79504c3314f87d7dbed00674ddf262c4eaecf7f8183fae68bc10795be22d5b7deb07afb533713cd39bfef2ca9fbf23147f3b38da901d173aa5d5ec1c0b25bb6b4db9818cde5c901b35adec961b83aa6eb6590c888e4a8db98d5104d227447c1d3603418a84a8b1ecc25f3d27b9986ec2bc75ffc9bb4428cb2014708fe78e471e98461924d9c3993ff105a06893173209f4ad72c2341a7d1685b6f83e134564a71aab7707ae2079949c0d095cc2f1a6add0023e0106b69fdafc994c65ae90928e5b180a2b6d2068a30cdb94f05c3803ec0a7c0bb9e9790d022005e031a19bedf4befadfbc8b9cf425c5f8f092c78457d75bdc9b1c758485999500c0bc321e26b242e4b6757cc26d701331fb39cac81b9b1e664b34c23386c8df278cda8f642de3527bb87b06116ad3d8ca489bd4120052548844d5b2890e2ebc74528eda51755ed435fe0f78c0028e35d42f455bac446b28dbe0579266eba5c9c87faa0a18786da1ebc41d456e5c77205a6160a5ed0153b65b183967d7182b71c5db4d03830aa897ca7840a6a2d1701f2c727f29586eb3ff901df62e2499226d46c22950e9717118e89ab00a60b87e703b692e2d6f03120dd89b0128283cf7ffcfcb4ca9131a94788a8a832ffbaea0a2be513012b0cb6dac9797b94fc6362bf4bbdac3ab89aa09f72f194f6dd000e887a013d9255d78be861c5eba1ac81b144dbd622078fe43eccc4fa989dae87de614fefa09d49d670bc947be606447d0233d6f00610e499df0450fbee6016814dbe561bb80537eb7d26c7fe2ef037da754200f4f462122c0e2cad5d8363059446d98f8b028e15af0104520e9ad50b1a10906800acb8a278259d70d46391c870a7781e694df0358d5e7939e66f5581d7fdf2b79035ea158880049d3277bb34899c7bcebd9ee07aa58159b2d5e087771e936dac69203182840664beea069ec6ce58ce1e6dc15f82e51e7af6624fb9254732aec93257317b1bdcc791472c53f7fe3bddc9260185687f57e98ae66f7582b4b08e6197406e0061cf4cb2b614ca0ef1ce00445f41cf870d1c1ffa32b6c0a242aaa8326479503e05b788b4125b8f450c04863c750646e2054084a8497f9ffe8fc0968778b9a7a9522004e82832b26dfd6d96454454f50c4878a4be9a73f16621ce50d825b2eb6861ca1df89b6b46b95eb6e15e2cea2b1830275e18099f84cba27780e79de4c33fc781a4b067fa8954f0918058abd25de5a80acb36eab3500c43c278780ea3404c579160d6e393bad5dd58a8778a5e0d7c9efe4134069beed3b67324c8366b677a32df29f65d3837d9cd8e9145e0468790fa4bf74eb4378aa219a19f502abbda9da1002c3daf03774d5d5434770a45ce74d97d2a4053a60902d5564516b39da33a9b2bbc84ad4a4ab282e36eb74c1123dc72ac5f9a79302f9cc23f53d02ee128a2657c67ce396ca7eb9cdcce3af80db2f75f3356f20747cb0b8d53e505dd3ba4fa1cafa3d2b276205b405a83e3193422aac5765eb3bd33c4a0a4a4be8f69b208c1eadd9212e6decc39111b2268a8020b98b5b33587c0989e830c638c3d2aec20204c7fc9eba8176c5c57bf9edd695d5492821a2792d084e6a85c03ea28394586496e7b63e769e377c704e4df8004971f59a648db169be3f093b8c5c65ba7105deeecd28135d64a05c1015c112ebde2422a85bdb17d34379ea7c92fa496c6d60277266e66d78217e2106360851222e05499a2d1d721b04dd308f009f3a183f5b64e701bbd13d36249090c9502852b4be18d83fcc014764a5bbb3c99c6aa93e120bc49f7be929050ba8fe067c1ae055c52abb0db03bc9e1c5b5082d51b4aa526b51db5bee66f4042377304233d37a61587caf0d3a536cde6d1129edfa08f07cd9fe02519f5a9496061eda3edf912c5a19c1236d97310fb28b5cd0f5a27545f59ed4247aec4ca14a32613ba01dbdac7acf5e9edf24b0585c2628e0916e623c574a8b4f52c6fd4d358502500baf3ee93ad57f263df47fcdc35b8dd334ab0ca344b2931fa73b758966c76744e7f369f1c97b0525369fdf422613c6c6daff8a0f461c3758fda5a8ec0d002ae2759f45ed791456137a070f610c97979e3d00f698e07322c903b91b12c100de4e522e756cea4de6f4a8fc287ee2ed075030049b65b77807be02a64a0a80c37207b0b03393061b83d0e9f788662f7436876434cd943c7d4ea6302fa8d62ac3b5d862f2bae34ec98bf0d89e1dc465e5a418c9600a769c1f95f2ef5d1554477ab3414608fdf0dc8bfdd94f02a2deef70d0579708cc9aa46a63f4f594534dd29c51ac15c0dab057407399d67cc16b07220372dcc3384a8c61774a06c4bfd865bfa74611e9ded1e762cb31225843d22dac01166fe47508c44f81fb24468bd6559f0a8681df082e428f43bdb9d825bcf0c5fa04d4eb2118b76b5276406faa08d10c295d5d8d5861a60132df572aafb79ceb3f9a6788673b60d961bda40c86e995620181be9e5bda50f5046708955a2df50d54dd8215a8b01ed48413277961d9bbafda3b8a380011e6689a9b0f600cba226442038c0df4674d3a1b3a9b3345f7264322a43caab89b669b985e8435fad67150d76616f6a54e325d84b3ac2ce8defbd3e07bd165e481ab54c90e8151b78a5326b7734537adf37c5beb2f2a41cf52933179baedccc524b1584c2d619e6923eeb69b6a0203e157a515fa056e5e8b38ebb8e4e990975726601160c2d396f2646b467cb16f00741e24771a8b56682286ad84b7fe45437cd24d1bd0b8c5a5531c927920e44f846a7d9632d29728708fa09fb62735d398377c56c0d2a9d4c0ff86d8d2bccde9e447b45651d09673de0718274de7fbca93567bd72ac0e7468feb975db750539be45ecc15cb55e3075988671455278d6a4b39930688551d8cd152681191e09ad9040cf34dc9f05d5495fdf0e056e2b4c9c770045b19cdf18cd088630eb77eded92cdbc08ecf6ad46bffbd4b0f9ce4db12ec7c0adeac14d855d8e77da012954f39f2acf37d2f044d0021f0dbf3743df21ced488044054de804f39555d5a47dd705f8ea6d975beebb7bb4c572ec8532e7cea219db50efcdee1e1a8214870311ef6d030a82f4114a8139060292666da5f1e8ae0f97324bf1f1163f511f2c63b63d02e9c6c562ecdc50bebb4400c7c882cc97c58e8ef125689c88532ca79ea703fd5b3c091cbbd0c01597116ac160b0f52dc79893c77fac4adf3a60320040d9dd77679dee639405227229a1609eb1d8ec5f1a05a919df02242958be63c9da65a09686865eddca4899d034af38edfcfcab61bd748f5dbcfd0e46ecda27d1b158d62105bae9501ab4b394d812234b90e20740a91918c6559750e1747018028843905c5846d46655bda711c9dae3f9bafec467fd572f64276907196714314ac19ed544b55afdd55b25816deae1506d73bbbec16a9f2acaa825daa52c50f8858db0235e3a34b10cd4cb4bfc89b042d33800b4bcaef0dbabb8223ac6616bce494757f9f6172340e0e67feee9015e1e4ddde82f2fa20dad1dcd6ff11af46d49507fc18aaa7b4951250954b3cfe37bb058f164fa374cb923c2106cb927fc6fd91ceba7d5c098d8ef9a218e11068391f5ad4db2239c46160da1e6bdc227bbe0035df566257ff2ff4bb76c7ea94ef7fd9807d46d8c7fc90a97759af6a74550039acc3c63987e002e4e04345f2c01255f903d13f85bb1e42ec50959cf42d34cbcc96e60103480b14295a3c7f6e7fa28dfd2d1f941b080c4db89e74f1463fc74610c5ef11e09a133e01221e3c6ad791fb8237e926c572e14bb19a10ef010396eb52d2fed7f68835fb7b1a0b19600590541ab6803604e7de990c74358fed36f908c5cad5a2d34c49b4e9c0d171554326d12452855bd457de32751109e85305ed5d5b925cdcce2f0279b844761a817845805af62c11759be12ff59252f9e8db6421e332b9edddb05f890fc585f925c7bbbd4b1518944f545a96e51a79a29eca7cc52ec926e7d139f83d082b39f98c11b25bf798effb1e846c674285ddd826019a8f0b4a9840134326cc528c31d9d99b4e8238724643c12603a332cf42382aea423fe24d5f1d298a88d82cdcdb6e31f4ddcbe06218bd466f78aecfd46918b9de4a41ed0142ed0afc63633e57b60e0a32ce976cb3d7e0a4682a80fad9342bd221e6f714c32472dcd254a052af044c02b95f424f28914cfb10abf2c7ccaeb01499a5b1c8233edc118e1fc703f3c23e28889ed0e861a4765868ee3dd88533c021df4d4ad8e32e1d85944a3489928fdcb8f8818d22b48d4b33140812de12c2f1bc87bccf9dcd81d9df0e558aaafb5320deafc6ef4821cdb2611b2b02c89adeb9ca60b1a99e3f3842fa1eecb6d1f3f342ec883c8f700cab7981d8d7ba2d67c7dc07cec9ecce4828ece409693a3c94bedab17fb91cc258e03f40edb3a8c39140966a0c8ea868caf04dfac8e78473db34c24316ae58d43c634246c71315a77aa4c6ccf3c25c01cef6e80c078826a002081dd1ccb2180ad3be599127216a5c6772125c3ccf5b8eb74cf10f80a48894039707dd2275f689ea44757e55b4f2cb88fc2ef99d442fd1414c866b4f580d8a013572315012baa517218ea6e43a13121daa0f73d5a3db607f08e3e85d86eabac083e138b102927faa189c0b05a18c5a1c7223f9c4befc57a3f1a70b6bc53460ddc27bc223f18f72b45da98bea940b9a0abfbe2531d45e8e42939d773422decec5af39d988c1392213eeea3542086f5f5c988740ff55e220e688bd2775d4d69bcb3057e992456912d71b47b042390bac828469b11b12632ec7dae861b0f887f652ec46273d36c990aec6348962bc9c8524a765a41dc7d51530edf61e71da635c303ead93bb2f00c0f31d946457d2b98cc56fc723ab5bfb22ec348f396722786600a74b27c70aa136b95a3b1016c9dc544749f2e24b37b6d2839b79b8023cfe8b2975c2a8ef1c32332aeb466804bec3190aef218e8f594025a9d6472ed569e18e6b4e9971fb814c41a25f0842c7098309446172e250248df3adb0cd7fd930d241c528311ebcd26e3fb10f43ea5e424d707278ce32939a945185e9557f2d513df651bf314580bc0c7191e365a5a7ed40672cba229e341939cbde52ad4e6693175626a3bc4a5a74d0bebfc9e0ffc02b6c0a690f21ff835b1847c9cea0a5eed0844459d631b532db034e8737f770b9a74088310448ff8c20099ccd5386a7daa16afdc9c27fb50a4617ccdeb295b7b45c74803fd4819589fc5dd7cf9658c8895273dce3d20af045f475ec87b112574649e03d68f2fd48c1cf278b4371d6b38f566c6d6f40d10f9c82fa4e2ab26a8e63e440867ae9222cb782a0793677b91ae5b1410b6764da85d645903d1e8ff9d81e89b990ffa743dc500c49b17004c2b8e27b49989bda6888f647f5739f924121b7b92d1b0de7fd574459b0013d89a251841383342a89f5acd27faf6ad5f9362ab7c7d8652813d080666425988bad9ab6de200b56747e65677b1816a5a311cd6f877871a31d2fe95b337834e2a15fab7e4acaab612b0e750d51be858209066d8b5309ed312ecb1e4401dbc506bceeb82081193857e3178ae955e4c3d7e16110866a971b87f01044d6343dc3df2fe7ec44e33a883aa84574e6589476fe0b68c62bcd276c93af6ec35a6dcd7a8993646f8ce064057a5caeeeb58a6208d307496a7beff7068ea899df3f5f41c2a11ca111682bf813199c21f45e1641291b10a1a79b2f6c7d578bc9dd6851a779fd89a471c0f592130d3440fc15452610db759142a9fc53a9414c79f13c4e8dc3887b63d4ec712212495c8124964e262b25be6853aab489c89953a0e422ca533c530d73e4b6bf5818e9d6881ace8a3121fdcaf106137b692ef7cacd7baf065f98c9e420ddd58e7a6c83b5ef34e4ad7f33915e56e96a0ca5ae0c602e3ad97471090a84f8aecfd7e470c1b04bd0825d97877a5677c2325eb1df8f63025b3500ddfea2a347783a388b28201f5b22f62daf461d35f64708d37a953ed9d723ae0abacb1c829d48ed7fcbc55464e66de132939a017f29522ea160208de9cc316de881c6a1c61be448cb00dc434df1ca8aa0da9e6cf4f79ed83f6044ecd6df6135921ac5a2b4cd7212f6319308cc5ea02e7399050c2afff6926bfbde4b5886e73c3a4dff94fe6bccd4d19bcf5ee5513a7f9e13643a3ea231b809c49e2d44a300839eab886d890aa0433fa2007f48d5fb7d34a407075f7cc19eb3323ef8a30bb8ad513b4f5d033aa0fc4d990b58b1589a70a2456e0b38c85174c1abe77a3ef07008a9147a16e4622fc02db013ac7a965814459dc5bfe0973f421d2938d6d76c4a07242387ceab31ab3ef29dbe18eeb8a58e4ef37715daaab8c23c20a555d391bbab687f36a489ac51c64f31011bd4a03055fa776d953ef021759d6af732692e09a1fa4b71b7e766944a9c33060d1f3545b633c5357cb4c8890912c1a3f4cfb86a65149ecb32872fd4e25b19181edb24b15a39e44ac7f906d44ce70a8df4d80d3698818f02e8a2ca4931d98e883c008e9508e50c31e8a7bb492fb18b8c199817920fe3cbb71c98eeeda1489e450acedd302c4892b8680b08e103d855c1007664452758e1aef2547c67da987162dffba8e328ea6e9aac543db357ab21a2b34fa6d2d0d90b563f00a2b8c8533f1a89826003b8c26edf4b6621b368b494e17bc053442d43ffae0471597dea35ff509d402f9f4bca8eff1f2a73a19655f878aad9fc6025e2dcfb227bf977c941457e0e0f4836588c4e70b21df0597a2643c4d4f35830754d40b02140edfcd90ff625f846ccf668c29b0ca03f48527f75abda8aaec6d9fb61d70a4e37ee34f67bb7f5cb2c54f23dea54fe51266f36a4b1b62587438d17656567c3b389f1eeec52b009a91ab048353a533162ee5eabf2f8e246155f7cf9b38067073cc4c27c093686c720ce5ffe9346b0a8240e5a0228d79ed572784a490cbeb9c1ec1476e801218927cdecf7378303c995955ec3b37f7bb5655e0c9a89077dd4acdb6e4192f3154b6e0c4b2802d383ed8dca7abb5080de4e71c8fbeb3b003b8a40385d611f4fd6f48a45c12d438622a377a0395790b6d96c98d00f11cf8aa942502184b3f3a9171c468d8aef12ab4a3e5144399d11a7ea66254fc1f930960d85e6b27b97ab82015c21da9057a6729fc2cc45975dde466517df52321b1ccde6e524f10805722271978f1dca28735c8d7de1697e70cb7c367744044e54b47f22a2cf5eccfcbd29fa36f24adf07b41eb3e2256de2abb6bf9190afa0d397534604836033289a4268e71606cd69aa7f24ac49c821ea6cab090355bcd44eaa9019258606b43ff3c76fdaac8244653ec7b12353f250111aceec87092417ada0eb5735613719d1f703cb18ec2f61e4f23099c4e38f2fd3c86b041d9276dde2cec2f7b851ff2a81b09c66a04121d76814a5bfb99f6110610ab92d35468b2e0d0f75d31a153c7faedb5b5f317cb221c62e591764328b672f813543262e4d005fec3a66490562e244e707d9e956ed255e2742467562c7d8a409dba31dca77ef020ab96d2670c22d4b1c4d560e67772b7d619be63757942fe4ca8ecc3714d91e021c53a41a2c583307b6390634d50336f1dc499540f8b31836085d46994026c6e8c4c0936fcf24dd8f0704e3709334c9fb44dced4c7d7e99c1022368846e88c48d596057f777b903ccb4394e99d78778a6aab195a1703a106c90380fa8b125aed8c5d540644a749bf7d8e5204dd4722b1337cb4c9a4f5c70b7eee7054491af9e1bc32d2e99fb29498692c00a9794ec4dab0c28f04f97fc7e2b79bb118fc66fe070052de4b029e8b4e720921b6e01d2af3271932b7fff90a32e6f2b6dd5395d9f70efc3bf0523703383d951d8a107ac9b809467bf1e1b1868aea5701ca44f26c4d4c71d8efcbae5df4d186266cb70e3447eea176cc00df729361f4e1a20e36b0c07758a948c75fcc14ff40d1dcb937397d3bbe3fbd123a33ed85b385047b8daf11462219fb940f82a3b6214efcd5173832e28c2264a3951a5f7dd7c6a870bdf79217a406c042345cfe107ef78b67e3cc4ec9c9db0734ee8028fe3cb44e5bb33d447b327f87ec00e18b96d002c6ae7edea8cb6173296246c98fde397103c55c41db92332f8a799abb39246586c1087d04a678e717c1fe24bfc6918c17650d7afae5db920cccf764e8572d2a523e4d51dac5debc88c70ddc5522896663c9787be399cffb9a0b39d172624bc5fcf8faafd1c5213bd2f3220504f1ccd9fe3fd3dd6e99b4b9036f1337d14e76fa300f34822522f9be38d5adc7e7e1516ffcc001a2b4881d5ddeea82fe4d00a02df73513aa0ad9dc1c4a439d4f1b8af3fdbde40f06c901f49101521f97fec32a6374b87d2777ead3d750035935dcb1724b15ca3f7aa15230c6c9e25c83c72aad3031259c181ea7998047fe0077dc15c5cebfa67454b4455707d48d88aff9220b9b0464e0d4ee2ebdd1f7d155de45c8b42b307c25d44325092cf5a1a0eaf3d6112445910713f8007842537c70497273e25c6e09d92d0a121b49fdd448990f635cde765b6180182a427c47b81a384978905e7eb95060de3a2b077cca1aed6ef44a814f1da7913e0e0cfa9f20e73083a2fa707ae6712add729e1d96f9ea030fbf48586839b7935da46564066dd0405f905732f76d7cb0a51e7a4aa669ffe06afa1cf94d7c1ca47a3ab4fc32e5aaad099b43c6b8c39cf5ba23390802a9ea9f1f2a2ea3a34232f98eaa36395483426019e82b8d5cd9387beb93fb5a8c215a41a748b1aeee4872783051d8e33fa2a221a2bfa22c5c70d799392bc181a39e4a582081804d3ffddc4a5aa30c902147a4311c27d134a4bd4a2c87ca0c54ccdd947f8adc1e5f799aee09ecfb1475ff206a19d1de3e73b9a9d34c83f21bfce0132099ce66e0bedb728c767481a1c889e1d7723110c1b2dea261e57e7248ae31f853f1296ae348aae6068a095d4829e0481f73f043466bc17c9683fd9d40d35c88578d4bc9da4501a0ba945764985092176ed11c4edc9e6325bdc892e65e556f3423c1d101c5cb8b0448b58f0db9e51cb816cc3fab05ac2aa680e8f138fb0db5f31b4a68b44855be699ccf4335f932e796d30f9b9b224bfafe4df77171878e055a3747f22282871f5efbb15c80aa5a790a6bb8b93ed3d0812bd170da842f7a53e6e0ca7cf7b8d0432b045bc6b4168a704ebcff99870651619ec59df5dd00ebcffb987df91224547f852ec70c2f5e920133e69cd9d1cd17e1bad9a7564ccc02ecfc1e54b92a88aa2e0337aef5a16429171bfce939bf24dbd7d82d0c48f8de9aabbfcb66c0c16a2e24dddd460d7b09428080f0011f0e938227cb164a81517e8c5e290fadfe7022d595452b7f6723d1178cc8fec42b83adf4bec0369d71033eb53d90300657033fe52d9565595297e2dc349fc08d5801a82d913c155a8b69e9c3f10589dba7e0d97c6d6a63fdcc821e1966aacbeb9de8cd8a694b3d54302816c9e089a976d655b618712d7a14580881e932d1f6d056a0cc6dbd58202a41260dbd1e6e7d075a479a37c7d42676ee5fe53b86d7ca1a938a1d817307b581e6aee81e81f56b7701530370ba0d5d6c8ec97fd93a888e58098d22bdfcc4872919f6668c8c208a4b2bb335d03aad23a77f31a3e995cf50892df72b9e1addcd4521a48cd97df185787ae6ed8a08d3db2527e72a3984ac8846fc4354b6e7acba06c27cab98da11a331a66f1a4a5a26a1080f56c1e421468d9eb1fc9b0eade4d6f9c8a81cc7c03dfae7e8458320229a54e0af8a5d5e8d392b1aebd810342a00ac6bd428a51949769ee3c43b7dae501ef8f2074ca6ec1f3eab77b27932c8e479b9080d533235fcab06bfb681c1fdae69bed53904ab4160c33a97b2763241951587393d884ae81f606b91f7006c7eb08cea6d594f6605cd0219ccf838959870926c9944e93dbb14eb720c51dcf9d3f1a16fc5bb4aac49edcd1e2253c788a26f96570a99c98dd5f3a721eb933b45a1d81e8bc39495cda34b4c5afb301e2e4a6c50a68b90016ba8c1f2c06f024b65ee423d5e437e47ced685034adb61d7fa9ba6cd26f4984e83f11669074e1f5d4a1c4cf69471ad9687ae65c8311e55e0e4c7eeba1654b994848d8be4c048510ec9de3a16b0bbc0eafe94c4b1676a41aef1d8036c76180eff7193bca4d7e099d9235ed0d5e3a3d46862b340a1d9f5a38b735448f1b61dbbe4d08caeeaa6fbeda66747d0ccd81b6bb83cef66aab78ea3d2be6465c46ef16fc49ceaaba3dd7dd4d24ad8d7aae36530bbf23ba646923e5abab59f7287ca132afe80ea7913b3f5993c125c98cf2e2e4c1755b2d3216da2a2f0d756309c412f70496e2ac66bd9ec5b1e611ddf755e64aff4a1d0bc5cf9298c82038e8b6dce38fb31220b39c04a706851aec03a59ffd5539437ebebd02d6a3bd0079e8ecf8db3d78825108009952016e31131f4a97009745c7e10eb160122ddc759bc4c45469c94c18f5b319c39c23deb10c81de4168004fef320701d7ae784113076204e38d1fc76ee11f8b45212ab9960bd3bcacc5b2d857227d9501a384b41b6c144416a8de5811e32ea18037203b47c773123d60aeac19fbdabd13dae62bf4f6b880834084d8a5080b0a2ec43cdadd39c2abf5a5028fe9fd0106ad1cb32de2e30db494c950460f37d7f3834859ece06ce141ab2f81304eebb95cf65f8a792436a41cc37638b66e84ce1fb62d3a382a8142ea653c1a5586d7ac58db8c92d768781337240f2a908494eb23690eb711250ddb2cc61701320cae9bdc185a9e2054ffbe3fb7727d4263f0850f908bc31c7f3b21cc057ef7511fda23348bf243d03b0d360aa38b1323c594b4e056b11ebb58d76109ab506f55f7e95ca11b846f5de4f725dcb44bb09ff465f746a36893232371c5b77bdc61ba2abd57ae871266a8f2a50f388fc6f8d2d0a49f3c4c727b002e89d0da537aa45664579f9cb47ba54f39ab98a631b3669a1be6a553e3d94c586e483b0aec566499557e8ede55c5210004de3be16602f767c23993d8bb192247be6f894653fd8a38afad478adfcf4e1158f261307ce93a5a31e11fadd8f547ed9821d4b726491e0f98f878bcab8d9438ecfa94e7e08513bc4461d56d27679f55a0c5106c8fd0adec8f7d593aaa0d329cb38ab3b893ab03a96d77f96fcaf0ba1b861fedf77f8b834ba6e8153ec2336e8a92cb86216cd9b1f63488c230b7b684bd86713fa01730e48a5fcee3aed959978f575d7068b6f22dd0f9c3b4627c37915fc20ccc39ac559a7bb5fd2535bf127838158f9b48cfaf7856d37260773dfd0ef32e2ea395aeb6326cebe564988b696c1d229cd0fba43ff9c617f90199a3c4dc97d3b306f73c7a81b6b761f12e3c5c52b23e871aa3b6303089e33d4fe217cd20a786b3a186c46de616c588c89782a70703a311abd76bceb9201403cec33cf7f384fc00fb0da74338e82526fa8e74d45e62322d2a832f7a4adce7b83f800c2cbbd637e986531819ce939094372916b743449dc3aa5cf752ff1c013aa990eff33d6b38da99c3f2e3ada567147c369781b2609c0c83267ebed3d28aa80f670992a01f45efb1e206abde844867ed011799bce2cd13de7d7baae551f8fe96de45b99b2113b44c8cc46d0225cc86d3535c13470f6351d702c6111877bfbe55b19d5b5b88358502995cd879bbfa8f55138ff84e8b424b0150fe9bb83784cf66aa93048b88fe2c00a58b0a20e40410e7704b5405f687e24786aabf501a2b81746bedb77c29511ccd7f24b63e669efa5e626e606a602a2a4645f54a706be27d99d12ca18fac7f51295a25752246aff5f65bba02e2f8f3d0086728197e22cd3f8836e6f114e55c90be0d51dddd918071eb67e9cdd889cb19c1fc47855957e06aaf85c8ac7a64c7d9802b8adbdce3c641e8e841d5c3af9ab17cc907392d200e639903d7a71823a478e5db3655c52a0bc6ad64356e65d905bfbc286ca7e118c1c2343769abe1c0421dcbf895b9737446e8382e2d6aa5b53011dc57711ae7b44d59560be77b910e371db319c341395942cb9ef2a566a6422f4f355b19c32357f8b8a02859e85078a222cd3153ae726f60245621cbc9673c719df4a05f4f11a418037bfb86fe31c7043aa6ff494960db26f7ef2fa438c190173c015ce14718894903a580fb8cb6803459db55cc62a4a4e86881d33ac674fad47ed5e2fe45161c301caf039b8b15573f5dc5e70c4ab3cfce87c5790e116ae0f284297c7c020a9801555e400cca9a0efa8b2e5e8fa68471a7e75311936573905df76e73e733c6bfbe361c7a63cfa8a82b0644ea4ac26b33da6f1f19d5e8e898338e8abf31f7d7aeed7db7f4757fc087dc160647886f6c2fb6ed58d5d226166b6d77db5b4a29a594322a055a05f804f7ade75491e85335ccc30f967e5a26add7d6964ba9db5bf60ffb071a3305f75e4983c4f6612f6d1f76962d448ac8ae61d3b0b9ec2dbbc82eb2b5eca1ed652f6d2f3b4b066e941b8122a2222129355b0f537cd88a84a4b5d65e5bb5586badf5f6be73566badbdb6ee2829d010594aaf5f6be7c7d1acb5d60ad16e4ef474798568b1d41199a2a5683289b76f94524af4d2a567e958fab555fabeed9bf4ec6473c93963afd6eb6ce2b8739662e2210a203c46f579a9500481c6a4ba2caad8d345a0a74ea71007a4e2f53dfd8d5329e0e63b222088705eca1540e89b1b1f7b731cbdb32aaae080b696c85a3b33622f91d4554507261da09ec2e890b48f74a01501ed23d7954b34e6a52d87a31c8a3cd193ad68f6d2a6c3912d8720d686b5875c21ddab36e49cac5f9cdf4bae0bdfd4db6149cf715aefed5eab18a4448f35a803fa78ce79c3d01816ba5094c5751a19a27be668470dc8e324217f23c21414de3c66aab18e4675a87798e93b9a508d7967a80ef51d342044428e9ee2da378493be23f8e64511d1d1aa9495ae6ac54e5487a9a361a6a7ded1ba233456890405d58f885bda5c3697ed54ebcd9b4c2f9d2ebd945e99e81298a7db187b7b326739aed2c9e1cc755c97f264cafb54d2e527559286e793e16a6875e4a5d3d086f492975e43c4b22c56a5934585284c7a1499335164e80e3a1b938484250969e9569b41422691193485cca1977e857e025130615e7a85024366cc0793f67c8f44e29973ce496bb5f65e6c2fc639735c97b2a954a53395b9ae4ba53cef535995aad2a94a79dfa752ad563473d268fdcd9a9a6fb26cac8d4da5d3e693ad1b89e3da76ef4ae79eac6fdacc70fc3898372a0ee6c4a1a2ccf8869b1ec24f8f612bd1b47e71aa4dc85a6b4e9445fd2259d49a4fc83a640c83c1639ee2fce33118d71398a7d300a3dd61795c905b88e1a9d75af36c966779566badb9d6a559e9929e4e2b105a7bd4238941f524213722b43e1da9504baa2cbcf93aa6c6f28cce6a35d62d511dea4e49606e61989e76649e7a77062ad731b75c69ea520f072a28f0951c6ef015914a086a50c14a10172605f061248532654c803ac3244833a1e12b4c7a68332b2311d4183541f3d2862405a922bc711c318659eb5547de4b3b4b43aaab4ece39cf70c6cdcb19ae5e560d50d716a7d4762effe03555f9a5e26c04456564c54a2c5fccb4e065e84717236ed03aa0608626224ef43002a319ae1191ea330b46468c887cce2e1f9020d1d5e83402b2c3101797d7ab898f9c5fd9479e9e9c73ce2fd70fd6c524fb5a29c09736243724547e7c39e16d2a9a52143f7fb89af4000460c1cfa6d7cf26ad427435e9f0a7ab49fb4f5793aee0a7ab4907e0a7ab4903e0a7ab49a7f8e96ad2393f5d4d1ac5cf260dfe6cd2fb679376e1a0d04173373f9b74eb6793b6f9e96ad2ac9f4dbac6d5a4f5cf264df3d3d5a4573f9bb4ea6793fe5c4dda4bfd6cd2ddcf26cdfd6cd2f96793c6dfebb3e01bc00060ab2a39dcc3db52f4bcb349a9951dd975d0702e8f5efaaeb1ae86037801bc473ffd00e9c331712ac40fdf2b08000052bcf77daaaf8628c0ed7aafe6b3a97ea3ea80fb69d3bac1716df043919302005f0d53ef05e0abc04351c5cb02d857c349000158f052a1035b55b15e606fa52bdc82b77fc80954998129659494b3564a612678764a29a5a4524aa9654a29e5b5b39d656ba19c945288275f39526ed9b2b76ca7bda52ef9f6968b31cb4bd57cde6785845eab6ed425f593db68a5d25cadb55e4cabb415567d4ef5e3dea98665d3bad97acfb09db69387a4899e5e29b02f8a1b754905736ed42515458aba444faf1b489732858a2f349d02240d3b2abd5598b3383b4e15b6a80eed3890145637e86c15a518a6b24eca6928edf8bdf6f52e871307cde1512b8602ddc00d64d0420317bb070df221d193d3a1ddcd04d5842c0b568805ba4036c806f1b85efdba9c21af74b902f4a1ebbddade7b6dedc1628cb1bc564af00848038f48253c1e1848cb13536bafadb5d60ad2f4a4b4dafad1ecc10b05ebd84eeefbc07d80345b25086fc1136cd8b75ecd39671bd57a3978204dce39edf7a2140522db949bad072136aaa540680f1a840ac80304027980b4223c1326adf6621a3088ae79f6decbd929c112f404675a8a79358ef0e00d7ade2642e3fe3b6b8b6ae3ebcf5710f6193d69061446b138ce9ddfd46abdb73bc7c5b64b8ee32a4521468f5063345156465571f47fb17ae25450fa133d314a1c3367235018f511c01f5aa863caa06707893661addf00c1c67ea7306befc5588ef08d2d59e3aa0bb01d7b2fe77d1e4761581c53a92efb1d65cd5fd7330d1c575a6aed9477e5a3bc49b2b5d6daf002b25156656fbd0b3d97530606e9cfa9d351537a77deaa686698f25538c278fe8a35ece822e57d2f06dc382a8111b45468ab6c352d9327c2fd195fcbf3c416f486e7f13c47615df7f9f5578522dc9f71dd4ef72e9742fb4e81ee7c87a74746e35c4a5398e7f92afc28cc731d6eaae3b92ab414e6791c1e45f1b31609068b68ea1e278e326a9c3d401634e7a34e91e9b277610dfb1ef72391706ce08429517fa7e7545e404671e2376f94cb46c107d234e530c618a4ddd146952819276daefb7bf8f1b87bacb1385ef147f62db1d6cc58c9e1c21345806851497c58a216c5a61684cebd41626121e84c97212bc8f0a44c171d96280aa3c4932146b2882940506ef8e1644b919a0a35351a726c2823254c8d14276eac50991c43491c0531a24d39f3454a15295a5cb43216bcb44991e16f5edaa400a1b2c5c41ab02592c4d2f3527278fab5575318f5fb25a1c3fc503a3f2233d5091a1c30513e1045c948992844e4261e57b91da58917658667bdb44501aaf19861ba34c0134b8c6e6044e0648222398a9228419414a6cc50e4870ac89ae624d6a0858bda87a5320146d9c0f65a6f05c206045ffd6be1a2d65aa118f1b54221c1d721b2323cdcab8993a7af1d20343c01d2c2b621d7b9ddf9e95ccf4fc7f74559749d67f7badc752ed22f8b56625d6b75ce0ac10123a124284c48e878e1d62099988a80818c0ea722229a6667929a3811458926ee10134c474b04f9a1c41412f84897326c50886c4f9ed48ced5729ed4a91094644c930935d9a8021534212430c71e6d2f0b5d65d26df197e9489b112e40459506064e6230681020f4ed8d04211147c469e27283cf9f1c484a9e3b58f907159fbfea2ed4b9b93277ee47162c65e224eca385902eac27065b059e2aa443782bf57832f2b2112706f13a4bf397f9ddcfede108ac090420941864c40d4e342142840949172a68922242a84b67bc0a6033b06287d9b6ce0ef75a2e32febeff5c0df7bedeee1e19a30b1b91478b7dbc4847c69bdb7898f16958787333cec477988da8104e77a69e3a188c77969e3e1caad8bede8666342c428fb1fd95f4e666c53b01c685d18fcfaad3cd4f0b53a57e9d70dc5556edc3cfc78ea96db2f6d474bbccd4bdbd1130a93b31cc6188b23121a734a2b38e9426476029822f88891a21c96a6d444a0011f8cf125f21863282ddfc610460712695b42fbb147c919a23b64eef036968d6563d958887697dd6577d95df6957dc5c8de72802dc456d2d2a644c8a604682769695332b32521b22589b229994db19e8039eede20aa9dcdb29d72059dee5d9a6da53388c99544cc296b4dd588909b897efdaca002898194527e3019ee882f24ad5572e2f86fcec41d0a9b0ea3b0e9c362e0f674cfa0e50f261a5fbf63fd059b019de8a57c860a219a13a58cbfbe5f6ca12a631ccca1ca930de8399fd9aa2cb971e138e8fb6b4d6755197a967f426c55760c7d80c857ff5a2254d07216aba6c6131790e3572c1c9cb1d56ac9d0da1b7fb68c168eb7c2b1d5127f360ecef7b35be2cf7e1cd5cffe6f7f2a17b8b7cbe572b55cad9b9b9b1b30079b0d8bcd26349dfb0099e7dc5badb68c6fd9e81ced395adbe4dc78cb6d6cbe9b70fcd9cff2cf571c77a3b55b2dd7debaa1722daa7cf7c8d83432d8d98437ce108441cfea551c6b54b761733a9035ec4f297952df65fc349ce1b869b5178b013d40f3812fe8f15b5155fdac7753b8cb5f8bb2a8624bcf1665c1d91fbf095811c4414fa72922b6137afca2aabc12b85163fe5e2a42fe19b48a276f3fe79c2f28ec32613ce79c73e6eb2d28bed465542d72bb01c26799eca53dd6ca80c2a84dc80a53af1a6a69c872e5b552783e65558935eccfe794054fbe40239a5e51de5cd019689e794edea491ce5b504b67099698923e63d920e70b48a89f919df35142ad54ac1b9b1a8f461bb9f11a1b2d83f1d4188eb7bcc6c69d15da14b2104675b2e384597e0ac65363ad1abf71df2d562104bed0830fe48aec3721477532d5c9f947c6a2d7c9b3591c659fc351dbff5e7adeb95ee5995d95fd9b7b84f1fc146b588ee3c4ac271573efbd424a9052567c6fcf4e0364322e8806f4f41b159248b057cf4ba25b0c379b97d3c168a3fec8f9284ed1cbe960da9f628ef7c49c0e3ef7dc1347fb9e7f9fe7788f53a99c5389dde7612c6ba38fadec82c2ac0614262fa6d55aaff6be72a8a635e3e225a882eca5942de40ad9baf76a0f5e1cf879c13ece0389e8e977dc79e93b7b0890b663a6faae15f644220d91486fad0bb0879e5e2da71b2031b821574c9ada0e8d794075a62c2acc1832328e78f2d5a2b19d8c428c0687f4f8eadca6a02cae57f794387229b72f555d4afcf92c4f0d9eecd12ab73f21d0c52610aad30171415960aff1ae9b2f7ce763eca5cbcec70b5eb09eaebb5dd7390a28a952715d3767d775b70381cc2793a330aeb35dc7e55c83428ccefb093d44895051fa0d67c871dfb990c1aba19e772a15d40d3fd0328986677fea67563bef3a0769e83aefdc830f26adebbaee7ae71389b25079e79dd87d53de54f6bdd0fe0d65d77548df79d7752e5f9d38637633e5e56b21310041ae984e697a523ccfd7c47455ad76389f72324e94d5a06535a17cafd294531a98571d55387fe53c5e632c7756c8559da90a65ae31190567d01ab8e076288bf1474255e7f1bc7adf27fec83ee555c500d690920a9f97122717aab0e841a5a1f987dbf768309e33aa83fdb5318a32fa73cf030a8bd2a304f3d85140e971668a7d0e512cff8811eb316aec85f1278e1b851820d8411930f6181e7c30694142130808f753b42fb982c2280a319a3a68838e713ed8776434267db073afc7dbce2a524a09aea0a72f7d2f7f7c90b5d65a2f96f75ee9145f6aadb5f68ade2357c899bdf75e29a5e4340eb256cece27bc8a438b84056908890a521492d37bf5bb4356a812a1419ff36351c88b1488c2329ea20d1ab3c1e2b8f2ec358e31e66accc6abcab5dbb042497534a63a36b24a9c31677ce23889ee77e20cea998a33a6dfbfa278a728a664f5be2be3edcf5b2c2363f102fbad3863bab5549cde5fdaa63cbd8cc2aadbe978bacd2a95036a40b4167b9127d1cfb9e4a79db40705128402f5a041806a19d320b300b4c78b1af3442cb6a8600a9aab33bb0dc54b83d0a87fef8a6a1a0b1e5679345d48531b500f92c2a8b4b9ee77d26211008ec0e98aedce6aa9a77012d2452849c72b8c13d28e5718a71e74bcc258271c3ebfb4390dfdc8b3c4932febe3f79893c91657d35447fa28933aea5dc865db05e8a59697b62626799b47bcb49ea45ebc78f122317ee2c2f418db309fbec09062fb4ce80445466a63805488c14448192b28e88081861cb830098db8d4d0711992fa5eb837e4743041263d4a2690494bcff1397e8ab556216b6dd0bdf752204a690f250fcbab410b171436b9acc07141a1b356cc99b7feedf0d65a6b6d972d48bcb5d65a0e6bf98199bc51fa58a9cf8b712d75ab4c6ef08267ac7e1d96baf5c5ae3a321cedbdfaa6ae9d7352eaa2eac8db9293f47c31be14a8e224052838428bcd880323284f88e9c08f15be6ca152b754b959925b2f6d4b4dbcf7d2b6148676a10e2e1dd5189e1833d11e4f781e551deade0735967d94637e16f500e9f341d5a1d7a78f0d5f541d12b0db1086258173ebcd2f3b85d1171cf61b38aebd7e9d0b6f20813149b08395990f093838b77e0307f6ec9c88037bb62e5463b41ab34e2fa84c2f664869d36730aee7c0b08ebdea502a447bea9488524c028f9318cca7a1d1cf5931700d092ceca96a58aa49548367ad06dfb87c0323382c957b9eb79ab7b01339a6314f5035aaabbcec2c678924d47876e9a3f2183930586ee3362209d8592e7dbc96dba86260b7f11839d65b9ec3c7ab610dea306e7cee398dc3b8a15de529af4123068d731e23e52bdfc0488c9a18d859fe6207cbf3e7d95962ce7557cd7c8123caaa7323ce5a36618e155f00551a646984309f068d07481f96d388910323e5344e2392e079caa54ff6183930681c3b164950398d4b1f9673206b1cbb57e3521543e5d8c3f9b926ccf1b1e148857ebab783c6535ec3a982e179caa92a86ca69bcc6f8626891f6a83ad369c49cea2bffbc549853c5179db84558a6e20b597572f8e060e5b0943bf2242d020492c7158415796445941cb183124a4a62a410494d4f62a27861e288998e4907289990596b6584008947d39920526a5607d1348486a2db10537c2c972e6f2d9723dedabc55f2d65af9c15e42ec58f26af44a55165dada7a8a2de4c04a17aeb560fad3d5992f80ac4a7f65058f5b1479601117af5d296c509c665b9fd7d69cb72e54758cd526b03ad4be241c13749121982264844e1f14393264cd288231c9c3ad04425045f8676e661331844bdb5ca2ead4be26d8182b714815f5e3b5996bc7e69cb3264664b90962237979c5cce4f308bfe797d06628fcc294b0c3d39cb10fda4e58f3a66f50e2c45961752bcb208f91b11ae1ea671e325e721ccfb183f16c7e9d6b138ce1bd77310345b961d3fee5bd253dfb5a794d61fa787908346b5d748772e1dd07570af4f9f519df3acdac07e34638c710733aacfa87e6f38c37e34362bc733027007990c5cc2713250c9d7e19c7356b2923f177dceb9fbdce916f4dc4bdbad869a1d7203ea7103b20308248070f23e8fd66e369bcd4a903dfdfc01ea0988147e7cfd0065c18f3d19f830c6565ae953e7803ea5f3c9abdbbb39f7c66a6d369b95e03301a7a7b0b7b31db20ec8e6c3d08ff266c342e647e90465595ca2a7f308366939a4680457a627c2932ef7952557867efa77411324274f3e60bb22c40213b405b1296db99282066c0675d0a997b62b3a3eea47094e80f2e1623bac8297362b4a6ff3d266c5e8479e16289864ab218621a28a8c39a34290213422509c74211285ab622f0eb2a21a2f64f1228406259204b114831125844e80841216a5234a4593495694853e67b0e87b69b372c309e6eb25830f6a85851f2f2b403c5ed6c57698151d3ff2dc2794809288804a4a4b262805a1e365415b0aa5306f5fda94a05e840a3e841c585e20111790a88249b45291c7182c32624b0262b339791c27e3b5de9fa4019837a8146f9535b1636668000014010013160000200c0a09c30171401485613c9a0f14000c708e3e644c2e14c842b1480e85200882180662188618420842c830a31033771b00989e5b914918a02ccb6d0416835a848193c8158a2e7ec027f7be103623e33ebbf834e0f38def885faec17607f8f4aefb8437c97fe2e356d89781b8121d651c3ccce06dab39f7f19da82702d3f1c6802c784e13024b422a51aae2e1b50515c296748cc6db0d5291a248304bfb69ae87c0eb192c0dc20895dc036ac1e93e8432b71a89434e19ee4f57530456283977590cb07c90d2a9f646458c1bc282c5f0ae0418a4456c338a24f93a947c18867e0cc59314f41437665f19d8965855b15c16f28d9f19284c3b2ed4eb5a868f78c327667a5c5899c9cf6cc67b04f455562a5204e91b16eee4b9cef904266efd19dc931821bfc6f2f90c2e18521a18387c200085d898bef23d793f22fb09eecaa5ef8d890787020ee0143b91c1fa8fa54bac50c8bbab31ab7d53dc97f07636559f015b5304b13b1b2a57a1621d4047e8f0c1d7421b3984e9b46291cca1fe1bba0d63ac26905c2c02aed201e833b778e19548d8d010512e37db12fed7286cf60478e699bea61b47355e6bf00502a9f1527b490d122a34e33ba27672c97a91606ec95e6393af7ca51cbdf248e90675ec29f850262a51951230ad6e5bd29f3ad6645bc61245bb9c0400085e2c40e89571460cb3fa1604425394aaf83712cc0d4ce872a4930e68e9073329d76ae66e2b91b77a92932e01ad141e0673362f46564fb53b04d7aa9c358f8bcc9b42fec0d23aecda2039bb1f014349b9bbb6eb766c23497a0532883e238aa46fb3a5f2ba3afb2b85cfd8986a3047ad9d2670f5c60d9393e321f452a194d656d064211f21a44665479fa94fc2cb4cf7eeaa100af89fd77edc8e15658e235f355c6cc5c378c77230ece3ef818d58c17289fa2598d2ef586d41d5faccd2aed7c0095fa29e3a8280d6c5385700532e1653c9449dba25f126760aabad2a6be02483d063bd875031c61475359e0e1d4afeb7c7bb670e346dd1d4fc43dcf0a45e575a08e897373020bd21b69a087fe8931ff773d7c99285f53b6737f3974ba323d5a415089102330435452e9803d74b378df1cb39fe2b87400ebd4020395b4b68652b773ebeef05b9b491894433dc0ae7ce39929aacaecd3e0c48649c3ce14d1d7152301a083da03c2619b9b7c83bf0547a6e9b510b72a0e2e382ad7329210fab1f30bc7ccf55dc28b8f3c59499878af43356fda9ebe8f44423fda22a7951cc2e50b70a618c4649db4a0623276b86eb59280c3bf5342d8033678ab32882083b5f0ec2cba64b65e186fc5ea5d0fc0fc17132c68fbd2ce8b1ad9d4025b8c854dcd86f2b992110f73984a7274344b15618c42c251e991a390a02a4c23bf309d6e703191813c68b7693db014aa4246105e70cf6c16f6faf38fd6f34a89f217585ffc819c2624edcf9005443b19a2357dcb595fd403b57af08c3bb192680deb2a1567981ce40f46dfe515bfd4dbfcff6f0d28c31ae519bc24dcbe60e4b6bf329a1a8cf552dcb106f44a427daada6161b8a5ee902f160edaf5643de349878afb583fe58b7b06f1152e62451129fd3590fa992d16f4dcec95d84cd70d47cdeda2c591a4a6ed39bb92edf0c425ede26bb8d2edde4f68f86433ebdd53273dd32788171ffd3243c2286f6cf308ad06cf6b006afe4c3404cd10ab62bea468b39895559a9d0b38e3d9d101f3af69ac31f7079c5762221711be29aeaed2038d7d8de1faa94833f4169f108bdaa843a5f6d02d3921d6e9492c0eeeb74c40de7dad9ddd2eb877bfff0284b34596470e9113a07291e009484e500edfd1682eb56272a550f558bc726d95d43897af8094442b596f1bffd58d54746ddbf89ab910d47fca733764d5972166179d08514df1a237eefee1b60dc344f20a60bc54080bdf67e8f48275c68619e63235c5f357e8282404557770d43d2aaa88975faa91f95cb7c3511cca450ccb072223b67de9c7584c055bc19938ebbcf748a84109434f0f7448e8a394bfcfd1adde39e286bd7fa4c95d99b3381f86c91a65ac2202360170df0e451a63c346e79513625e17bba1d3c56b0e724e9dcab162b01748db176ab40781e25d804be1d309fbf18e9c595da9e6e90ef7bc411bb9e2e95ef9f858be2485cc65e2db166dafbdfe285d186f73c82e5b2874200c0ac648a1e6031007f5d24352e049e67cf442c6fd0a06995e8dc71ec083911330697e2d1c7a51b529cebadef5cac4bfc8ee9a21454fb29e3fa449aef128da0cc360dc1339ed35955815068a22526c742287a1926a9905ee78aa38ec0fe17038791039dc3f14194011af1b465203aedbf976c0d581046356c82c52c12308c5cade897c54c111e9d9131dbf6ec436fb20fbfe7d3b04dbaca223534d72f6ae2f43d628e57ec637da691ef18e7f60240c4dba4152f829f9b8b2578a1b6470b775bc7452c4d03844685acbc33e1edb1d67dabfac8408a32c9b64728a4ca8e7a42c16e7b84a6cab0339859cf47efdb1871103aa318d517b5f69b4a2ecf8469f6313e8e49a3cb108ed74b9f8e9e8f80b1215a8ee1d0304de3a0bb15ef1294ea0930e1cd3e97945cf2b92f318441bae1384d850d33943dc40cb805e344765f739872926b5fe3136b6fdd2d61dc038e97f7cf9303c1369b2d58637a6c5f07cde96a100d5ec6cda2da0aaac972f1c05cb797d4ee1272b6ca43ce8d3de36877b084eed6ca013082c42967476815541d63e754bd315f95c91d3be7d46c3f26af7024e64c827d9eb45249e353a042d402c4edeb7faca78f123645c9cdc84ac435d293e5f6811f318b0e2dfd7fdfcee2945392a9e6ea26aeaee385813fce1b286cf891cf5032d585063a745df640df76951a12259b1217168e69e076263ccd0f5cfee0b3fd7f32eff89ee6a52fa96316fab9d3b17461f276502f39c0fdb9aa29462d61a3d409a46140a38a29d74fe3672929288b93bf136fc2bd987cb4fea2ebe44d59e68ae3bdadba3696cb12984692f2a4930e471b1ab988c74bd1838a75ea0f23ed56f9854521f9d02d37ff693fc8195e07fc31a32176fcd1e20c27763fe34894b636006e0b09ee0e837eee5b9e9eaa0275d894bc184d5c447a82b217a6684bddaa4eae7ab873ce8eeb230413f672b36e41ecb824c259d54025785b952f8d03825b5d5de0cfd3bc8e99ae9d6904b46bd69f20c2e1aee9ed84d0ab9d45c082a15749180a9211eceeb420e3df13452cdce4dec06e4c2177c80f66187fd2da9973691eb71d3c689031f7b6f691aafb82fd4be08d763d738c4d338e57a715bd4024380718e1e2979ed5ff44737e4c196f6a08c7bde0c2ec00df9f718646009c9e9844492b5642803482ecf8c6e4e9ebc29099a5a99dcf6feec9172ec34c8b945fa0e5057cece2a2607c3af641393d88600916ec31ca9faf1923ac850099888cfab3d4016cc2ae32980d8ad42c2e0e66a72d1ca45b29d38765ee2fc1d9fe9322a77080b54b06b682d8630653a12bc83d1264da7aed4cb3b43a9db290cae5b4943ed4eb9ee4481452b99ab278243404a4ff96304fac13a1169a3e5c6b65ade5094119efd164c68aa88ea46ca35e0b2279aeb8e9714af43c0c34babe732b1fc98921f9bfc398572d24d970126027dcc98d58a9f24d873ec465b1d9bf4777d98755a05293aacbfba963f2f9c65e725588ded043779d880a067c2a65e96e5d530dcb7ca5dcf7b05691faf5a56288f57018dc60c06a0bb3655ea5eeb788fc4b5b81fee55dfe2567041769ea457a596f940eac4fad1d5ee5339c47f87ee914c3be06ad2885866c16250744f830bd38d21dcdcb45d16d3b1724022329532a6ff7481f12ee63600f42eace6b8fea91ba49fd2085c69fd8bb7167ef6798e617c5a24e843f4c85391d53f990fac15c3d98e08018d16d05ae4908244e85fca03d767ce45849c6595477fd68e8bdda9dd746d78463c2db9df5c4795a72f830b0bfb2ca5d7f25791efcc5f58d6fd1fb13787e5f51f0bca311d059d7dd972a1c4415b590c4433d05ada780fc753c350bb8c8aba87b2f79202e4094a892354d901cd410462a672cd75afb3647362ca52bb43974a4be27a15e6a214a685b2c5ce585aae6b88c278d0835222b968167798cb242f2573588386a02110d9a377b1a31bd5b3d98598c3f428732f5c69ecc6768cc016632888872d32ce94caef3fa6cd33ceb3611af7c34a2e52492ba8a8f30168426485bacd9504b26b2d6d1304960321b34bb06ecaaa622418e853ac70b59f001e3ccb186d9520aeb2bd076bddfc9b1b0a2f582e6027e1269b1acd8070cb600ccd8a2f85b0d5eb35983c18eb73b182f774b2860042d5785f4c5663051c0004dc1c400a33ceadba733edff8e26e991fafb93be53731578a7f5a2e97e7d85419d39a7dfed74b59a53d983e6f4843e04540c820146d86d133645e1dc719e752d0693982620fdd8f3389c1c37dcace79805215823342a99e0c7133813602c2cbc7986e7aae3c10ca6400659cdb0711d229a898668d61034caa1c02ae4596d43feba41290d46d045215febe4dff193c384fd58952cd04dce819c8dbf4f4095690d24c1f8158726c99d7ec4eb01fe810c43dd326067d402ba721c04ede7babd2c67e910d79a4fff0b6d2d21e02078f7cd0f1460de589e7af2c909d7a390bdc96c85da8caa7cdef99e2764fc18d1d142343bebd81b4b8b3f343ab621dbff133017049f19795e1401768e5cef15191406166d205cb780964b8ce7711afac745d7be8ba6f92e9afedd28fa7cf230186367ceca57f6753916aa8cde5be30c6b1b1065a26f8229621bf59322661a3c8850d69de867da9c27d2bd9d880a031300e613b7e335a8e989e812e2b5aac98e0239469209b00d34b0321035d602aa04f2a711a85aa0f2aefb8be72b3ad5dd595287aa92c3191a01be4efb5747c2f71c573e63e981edc5d114838e8c861302737b7916c324f6d8eb7c298a1b4a9eab4cfc4ab5c3f2512af886c985be2e5541d365f81b1c6e0eb7f544039a233d02cc5a8c183d07a91fc9f7c33234cebfe34be61f571b1190e4a67acf0c0a78a37a85fbbfce0e548116c26d1396d6c0ccc708cd1b63e2778b87187183a6237853ecf31fa6b97099686a15c011d16133e849e189a53688977b38dd8c13c43ccb4a0326179d5717c3ec05b7c0b54bb576c4f2df007a2495fa6e0fd0fc9adfeb89b8252a953e74ef28e831476e11a82ccc9a6a991dc0c709d71ef90f5d7d803766936745cdbedbd1fe4fc9ae4812ab85d2adbb8cf59e6e326d979755ad7a36011a2572215bba538e1ea84b54d55cbca088a77640d451722848251c511986f92f11a6f8097b97715d89922a9f7b49977d58668188a8cea179c7555318881aef46b0823a5be75c6266f95501f2f34efb64b710187e3c4b29f47056fcb69c8dc2d779f22d59aa062312601bc01570aa70eda5c221169f28f3added6675906e36bdaa88628970700c17812281244195e3e9e7283795ead410dcc50245352aa1dd851040fa1b7275b6d15b1c0c96d41759b253ae1acdc01999c99d63a429746f005ff12a556edd0f80770948b44d066cd34570587b2c99beaa4cdf9cb1bae45575bce653a9b239ccc9b25deb010487fb2bd17c7615fb824e615bd93528da357fa7a5156ff16c500c9aaa9158d6e63c80636f2d3bf9af538c9a78ac0c15577094fca81f09e56e0db0e9da2e3eb96a29d311677d47210123cb1f5c280b9dda5b40e4300203008c89777715ab7f1e6163b93c1c72bbdf90f822f9aded38bd2ad68687281cb3c43646c6eb96f8a9acd584fd7d31571325dc24d1de874c87880cc8102c4bd9b5bb2513e744a311a7053fe5e9afa8a4d3f0d0f3bb80101cd0126c40fc1627572b5683f3e5a8ec5f245d197855824a38f270a32d87eea8f8f62c1be8a5ab489f1088ec1d332458daddaef6f29d81e378161af43bf911c63be9b84582a6455193e3838ad4e32e9070c4eeda73d1624e99c169f8bf8d010eb11e47528c40212e2c55019ba43bd867c0bb562bfaab3c5de8103ddbe764f44601e2a9f1931b52602ea4469daebd1f51cf29b31136b34f292c278bbc1ed0f10328d2e3093fe0c699f7a2b9664432ad4d38bb5c759a5fcad2d651e822abad4cfb638cd0460e3c1c592b58201ecf467b12337be038553761d5c39db6cffe76b1843ff87645618c183e5319c429e8378480ee12176d5800098c994a3e701dfb8084500e9495db7fbfcd21a52854f96abfb7ac4beec6081ccd818b01f89126b485eca1400c64f29eddde56568a8dec23128d3872bb62bcb98d88b339afef8178953607c60c0c41550f79021d9e421e32349517676f0fc2f0793b680d764cfa4ea9b8593502e6a04c4a9599872951bbf4e0c17d10c344d91f43be25c7c599cd36307298414db393f72278d449e8c6e06edb014c2f86a358fe7bb3ef82698583ebbed308cc6a74912ddb008ce60ded223441826b86618a48fea40b2dfbdff7cdd7dca15c09040831506ec6714bf9a55993b6a1b5b3f79f5eb77dbb53637929bb3ed543fbb6a3cd8f434c710a6264a352ec3631c973ad833468cad12ba0629eb3b0f145ca0f0d4e7ce7b211dd20ef45a1df4af4ece9f944c6363ce483ccccf5b3a2338ece139b89dd0a63f41c926910273c32d29b43ce89ad5c5f0272fdd5ea5e382a0db2d8e18379592d2a9a9af8bea3d4892b3e93d8bd7d391b828f131bb91a2e2bf0a4fc7d41bdb47ea4b28846ace474764432644b7ef7f4a8db50bf10c1d627eaca148ae0e3a94cb841aecbd07088f09f39db94318a6cf0eee722c62d8acb28d322b8a866c9408a4f663ba13cbdc87d8c62e388311b8800250c8a3699ae98ec3612037463b73af619c579494025a94410c08e0300634f31e0bd09020b2c470ad81c500b84327e6731a65068997c88375b3fffb265d0b0c8c94fa31eb680e8fa4835ae03397f3cfa37c7587109311041c521f91e48f1be5eebfafecc8ef0f69dedcb54714c855d5e48c05b98c609423aec5ba6d29e1b1720a5fa69f7363923ee55bd81506e784013c87138ea6f7f45a12a0bad8d0df6e1eba13e449e2526018a000185722362d10a790b052a490e810516f96b5efde7d29530f09db88ae2f3494ea667e0bfbfac394c6fceda82b35570205bd471adb24299b28df9186b35eca6c69352e5e3aa566557a6b40a5f66bba500811996e59fce88f6fd636849ba5757be88d86493cb4bc9b2e28f4ad5093e0303fb79732eddaa3a966247aae5746eaea670d3684035205caef2dc3daad48b98f288f211502dee4541bd64644e1ab8a2f0b98bdd78c0e041ade0a0371542644385b0115d79c7746050bc39456c511b9cc7b460a21aaadf00480d83f2babe0e245891bf4aa1363b04b111a929a7bb841a9337c4dad568cc172744ae9db165f673b090b40b5e378d81352d9ac507872c3dac047f74974f574117a419214323984f12cd69d60c35cd3690e0403ab2c91fc8ca32acdaecd5ee65dbda7fdb14297c358fd04872d467e7989b79f2fb527bf0e1a428de0307381c91a6df7c3ba4b736c4822590bf0804a0e8a742e2de1739e825cf09e47362f7816aaa43f1bbda55d2658791a55f53a1aeaeeec5a471107611ddeec8146439ddacc43c967855390a11a7821147d1bf82b605a77564d89f206d2b200d1a2435377c2cca092347caa74ed3c5dd0704506fb367b8d12c06e50f8d680b01ce01017553dc9d5ffd66f1d56e35e8ba0f6eb90869923bb92016708f126b0bec78d003c2433cb61d03adca888fdf929327e7116c13d1da8c6564c2f2363d5007e48e941a848390f15b5a25c74ca0239613b3a5df610f2e49c79c92f743c8060b5014c8905deb2efb254979b01ca89e9ec70df822eb13420ec6797c2b3af0a50e8393410aa8c1ab6507a745761f854e37478f5ce54db6529afa1bb5048e9f834da64ce15203e31b7db6653992e51648a5a031f3ed1e5550de6552788530f1d63d2e27cd021e74f37d000327638d7a08e5b8ae12f030a537efb13821624406a7c36705c6b9b3e4027f12acc6b778f6a5a040ecd3bcee0a9d378bad94b97a9485aadebe2ab6500edd0279e1d085c118b2ecfeaa87c8630b5794aa51df3d4b2022ff58dcb989729a6e3f341d3e5e1adb25bb6924f7fe9a72efba75f221a78289b13fec963ae515d8538f5d8054d4aa5fbdbf7ea9c128ee97d24792aef99736df33feee7761ad491ad5352d5c4678e0314e84208bbd17068745e7b9415b2c933b958479831f0c328edfade14ce9f85ee501794ac75d19444782796bae7b5871858810cb0c5d41e0212a7aa92ec751a43b09d8f22bf5615e3c7fee33a5393a0255f74670d97dbd2021ff2bcf97f11be9fe641ade23b06386871a8cb6e71c82eb23fdbe746c556a108a4dc7800eb7d4674132e0f5adfff8754ec6fcfdcaed98667a4eb1fbdb677e06a8ab297a9df14a8cfc21efbe87ed8e480aa1d01309e09712bb01f7dbb33e40be4fb23d3ad57f4b366b720bdada3ca76a015450f2c53f7a92a83b72f51b62baf7e4ae5bd6627d48b04705697de4c190f68e22e7f179ff5607c0dd58bd89a30ad2261288540cc561e97df78174cb3820b65636029a43a14a3109e2a4374a3fef6c246fccad81418b6071dce7d10136c1b44ba84098bf7d58b6b375c28d074a666be0a5f6cf2b2de83d5f3ccbb927657c8da5aafe15b75da191ba5c005fac88593c7b8dc0d4d990956877462b51ee5bd9e3f90a382856d3a352bb911be0644b85d762daeddc6be7abda790b4dc95f02a594394f9083e133e4ccb062f0fc65535b2a8f4f08955181238de92ddc74e039c3f846da46d400f61773383cfb8da64c2be1c36a250452e92628715cee3d9fb94d871a11d0a6ef2979287d668d68936821ffaea0aac1f274f4e396343c548b83c84609b0e1150c5843d70f82fc0d0d7a790772cb121672942b007f88ee9bbd79269cf4e91b6ea77051c09507f383965d4b82a3900526e949c12ded965d35b96b497d15252ba1210c95df063d29ae342015a53f470345228501473d6e9a74fa613c8c2a3dd63c1c5fd072c161c432edbf025cec5b5af29f17a9fead5e50974898f4986482279be1f17349c99cb9aa57d1e71ed3e0d127d01937d4f63018f5c67fdc6a67622e1e42168576e5d039f188a2a527f1b1dd1f988ca81ac8c3e0f83d81002ab3aee53bcac33279dd5374d1ba16979ffdab7413a2430bb9551f472ea203b638ddff41c05dcd30cadd116a6400fe68843ddefd5d5580a681ec61c4cafcd848375912513038c2cca55ad2fdadc7e93d5c506e23aebce8a2927adff6965cdcc621949a941afa77449caea66e6e1810f8623f00694d85b41f81c1e4db43a8b39e2fd5a5b21699af41625c32177861d92c34d0844ec18319c440736d198e17803991d32e998147ff04b7e5f6eef5fd0705112c3db9b9e04ec7fe46daab09e53c22c0b600604cb65b8c19cb58587cae1289e9f01160ee7d82a289c7021bd75b5a47722ecc3c26ae6864005e4be6e028b8dcc95db416b950f50f7f6fb57170826489268f4bc87526cef05970c4480989cf099ed8bda3ade779067f2d8c0093b27f0dc003ec048cb60945a206c05646cd5a4eb3c500660b4560b4af0120a86a404bcd9e659edbb7f9278009bfb7789735fdcca68b9e6d5a2cb19413aae73e87dc16c39e48509ca94f72de81cbb718aa03e5051d062541650e8436d298e78fb38bd26b02dfbf76ce9105b83e6263bfde4e28526282a7a8c2f1cb15c736de9b13f2dc81803a077ad320891df05d0e8d446a487f4a71c445e9b11996ce27fefe63e4383fce7f7ebdde2a94b9708bf11bc88ca8724a1cf7e8c4f8a795ca8e3353eff372450cd6327caaaead97cd858c3ae19a085bef96a5f47d2e3d89817149d93f835e68dfe7f8b4fe5e5113e02037df3c9ca94845a23fe07ef2e3c7fe58594535113a55b652e4935629aefa55ca3825df96b8b56527dd701653eb8475378a4a785c1ed3aca9ac6d3644264221618a6b037575f4448abd86649e7742e6f912b13a547434fc205cf115126f7ab7888458fe8a2e9a5563ea715ee34a2292c91aa81292238d642aa2940c670e1740e0749025b4cca8da944a2891cf922762c6014023c2ad8865cf709d6ef1a1fbbde239c299633b9c9b3142acc5d28aada54eca349fe00a443ec7076d67091ad02c17ad7690a7ef3f7f38c3617e6380cf6f867417bd0538333f3435a090005035f0da842d32f4b135c3f511c40781574c8d361bc36b14f286e0566d931f76b419d7a29b47d20a786fa940e6cd6995c8db55948e16cec2a1830ddf0590e7eead4b6a33d1e21daf910defb2bd191f8e57ba228afc19b1346e70252fe2c2986bd104e8280b8e5efe1d9f4f215d7598b2cbbdf3e210e500031bdc08894c8377f8cfe3c32603d211ba7a4b849b82c1fc526d7f1b1729281e95dd3c8500b9b33e5b9002c74474bc8d910e240d7e741a3cc17f9931153642614e0328baf1ef35051d82f47428ca9839c6ab0ab7a805295d8c0748b18261016dd0d5dbcc7e12d031986b067ce84c89638119e81776b7ad322bb511ca04afd103fb17f37ce67a5ced8e2b190d7f7d521cd75e1df768830b5832642c82d99e7eedb976bb8496a4091321a9bc8de97025536044c416166523b7df181f7dbab106974ea4c6732931df3909ad32a056f3397181acd64f70dcf68b1826e46ec47d44ece7198b756bdd67e805aafc7684b12cf49e3a8768965efc4b964cad40f16e5a979bcda32448fdbaf9929301a2d3cb145011c36ecf2ee0e81cf649459abf00e003e0ab0b9fab99e24e6666903adeaf6f8dfd9ac7491afad69c1f5fafd031e0249b9edf7b20829def75bacdf5d8c49006ccac5e5cac51cd1af40670d5b653bba6418c9fb1336feb9467eaa902e0438ce862cb5eef2c9f7059453c00857756c37c425e153d3c944e4afccc99e0094080c12ac35db4a6e52a0ad50ae344345bd97695ac400a1d0c8f463062e98a34bd25677222374e829f26b9924ab9e703b01daeb1083ded6567c8f6bdb4027a62402355a4da9923dfb4ca000ff4eaac21d134c38bd05c5b1588189d88f2196a09687cf2a2a780e992afd03336a5a390b94662c1e5fa8d1129bd943960583c0b65097d0440ec8fc8c689f29f40620c38719a36cde0939c0e53c2d6a95bd1ad755b49e1f339fda32230935b21c22e1c9816788c05cf67156ccadfd1cc6d691f77f2ddcbc51876420ed62d09ca8343b184e8d760948b53c7ccfa4eb036f06e64537cf07e73ff373e83c0245509e0c832f08702686009c309ba3d77aaeccc416025e75bffdec0698ac90a85965021e4a2c42d6999900c6c8f4fa56aeeb399313c1033798a31bbc30a0c0febd5c1fe906261b8b31073d4bf1352e72b6489b453c4b07509ca072fe8853964af4561c8c2037d77705622b73c321716b68ecb9c5af3f4b11cb09cd4d1034086774a33b0d472ceb84110621988dbee5edb972a3f3158aa29a1acbf19e2a27d72f22bab16f1884aa700871286bba4bb8ebd4c71fe5b04ee2acba62113fa1e4ecd613785870e25efd81138970d621315db34fbea3fae56868c5dc290e08d10f85c95a4f545b9b248dc6074d2a3f4e2f08a4bb7d7cf51c6a6ceda59ddf8b3db3f8194dfd57e10fa10c845d9cddd4edb5e0752cc8e656052ad06d032864ac243a41ac47e987e1407a0129d67bc554c918249c5600181026128a62bee9d726be0a0a6da73030893503f5988a7efe822824f68a57c54408496a3903f4902a7d395df98192d62f75b2a2d5182f2f248e6a1daf0f1cddf12a06c26c7d27bd27ea4b335a8c544d8228aef7fe4556b94d3af6289a5d7e8b45f95b6cc8ae96cd6b4030d92e2f1e090fc9cc54b005994d07e32f93f03be491c338be22422cde8911ee503548eb9eb48d0a0e6f130df0a347dafef88e4c8c04f45dbb453b3585bc565989b3a95009d4eaa2c91ee9fc04d6e699146bb786b7f3829cdfb446812ce25239efcfbe60b851f13e3bbfd419c7aaadd21ef552c585fbaf8204c9854c5fc49f07daec8b2f0b8cf517b273e933473841f8b8ce4b96d8e9ed177cf5c77f84ee2ebd709c7b30d5d90f6d9d47b00e071c90db1733bda5a0d62ab1c74c3fa1777569c6a1ba4056a60020c835f6bc5eb9a13e668667b0a123f794a7e20639d7f258a7932240c56eb802616ba1fc2b8d229476cdcc57db331849d8e7844e905d752266b2b04a65debaf453c4363809b859dd165b7a33b1143b401a3194e29d9635dbb52da1ed8610a3d5e9b51026dc960b27da8d0a3f5cc496f25362d26b697593cd27af45975df25a314192f111b36f0daf876b4cf9f3b7d1bc18dc66f21e352ac4209e5438ccee0c870d319bedf80f595551c92cf8e851f31fd912b11fc887d405ee0f50b3bf1735c159200cec2b95bf7537a474d16fca82c3983681be4bf28a0cc386f2805467540f4389bbccd8f939f7ca4e9f4f2501f3d555e0b1481ea260741a571aeaadc026676de7293bab0fee0fc083022ecff31efa53baa6d6ea943d28af89c7489085cea2123dea6224d5e7b30be4118f91ab836298354e3e63643bbae88b8acf8983ddf4f864fe16d33682895b0f724e3b644553e2e725f62a87dd6e21059ea84a4a7a4e6d3ba6748627875df80ecfe2720df104f9bd2c4e02e2531ee5ea60656b6a592a42435ae4e5b5c56a20c4dec0e32b35f3d3d3910a8416a26d271d2a37743e7b7ec35df88cbfdc4aba41c0618bd0e57a87dd55190aa3f505db4b9a14c2efe16feb6ef67297f0610a097317a76876fa5a4913df44c20bc035f40e8bdf27b11455e8014523d3b0d9b914550436927068fbec3f5d221eff2db982a2f24b7f077eab8f6a101d483c2712ac74f203ae5e50b2099ee5de0ca44d39cfeb552393a854dbd4c19358b406bbab3c699ddc12e6ca58e1b6ea04211c46ca4ef877bc207af2d20719748b166e0fad6a024135f03d5d2beba20ccd89534f9b09ca4dd56300e35ff8729ca329a1a5c4ede60a96a1d29b4e27a87940d269d09506b254e2cd69ea6d029ea00ef0d9760a2ede76fed5ef807e7fba9f9bd2eb4d75329cc9060aed016fa9e490fb8c2cc7e81f56070c2862205e9dcd1c7916dd3c153aada1c3e7d3c35d6bacdd24069d9abd810266dd821183b0afb215247120729cab3894bfaa2f9dd0aa6888abe7cc3d67eb3725f154a4f4ae92e6aab3b017388271fb49e930b9383bde460c3d3cdd291d99cb9e3a26649a2a5dc1535e9a76dc85998458d3c89e2a646e82354afe9da2e65e5f90b4b984829db9f9aa23023a48631112b101058b1abd63eaa4f08b1706e74d3d835ba48f2424297c4dbb9746d7358c0c963f19ac678d15e6de3851102f71e4144c82770f32705f484dd306de2833e55edd7827b2c6e6d5e6e33855d8f913548358714ffa018f6fc35495c50963c147b51637280ff2452b58d1446e7b262d3336c19aa885bd053fa826128e299e55f4bafa309c44dcc79fc262f2562076af3d2a271918e43fc2532e89e3117934ac24e63b648fa44d892a7a134d1e79b4e9804aa692ef7b7376bb64d8cf9758a4d10bccda29f62c0a684330f33e01857939a961336dbafc69a2ccd298bf5cf286f4e2f62e6b403e7616005d1ee4605c394f62954dbf11c5f2ed6ce6ec4321be122a9510da044c404f86abd0ba2bf79e3dd63d771826361c50580ceb727574ae7b78662fe4d6cd5d91d7077b86edfc1d5582e9d6ad654f1938d73cb253122baed0e42698eeeb33d7eca46400fea01ad96ceaed26fb680001629ed44d3b916b10623afa3e49ffbec01c185649cee3e1c4f410639d94eae10363e6733b6328637b412357301d66957c39a302bbafe346f4aa2131dc22d18aafb7ff5dbb5da507c97c974c7cf23c6c812b3af8283ddc0aa2d8a283526a0a92243a4483bc83e7a3266c500bc97d921ac499dabd7ef82c20d4b41977d89c8140e6e34b73e94244ccb8b731d9dbc3b52d30539f0879b84c441c22d67057ec66dff583ed8bf0e0f4d99d93ecb3e828bc7c3a428120d4d1aadf56c5cb4b27975983b21e77a5240a7bbd900fef2dd92e953ca066da7cf0a9dd1cb9c6122440fd6ba6aed433f29a149df1fecb5b98717aec49d53d2206576c1363e4806fcfaf0941b2d0625b2d923aa8d0d83bd497ad5ab49e6ef6d0c54088effb038cc7e78a8690b4fbb2d0c0e009b10934ce02c856fe524f8ac154b9df090b3cb112457259953e4c1cc5ff96940ab17f1ae828e0df741978b46faef0f9c1b40f6d05d717c8db81998bfcb72ec962e2bcbd8afa246712e1599288d6a21ba2c02b864e3844dc33b4058a086d7971096623c282c4f72539aba661b56b5d2694e4c2431905617b082c510acab07a176c99599a5f8be0b5b99952339d3651bda34e21499927f8da839944f377e08571c2f2d2956453d26b2c44805ca0f6eb00309092758465c337f621ba5535789104766d24ebc12401eb45d4a0d8ab621dd9c064cb781c29298f65ed41248e025dc9200005511adf59d1a5603bbd07d8ef56b27998c3def23b11fba59b376bed320662ffa3d15a5d738f2a4ecc8263131e4f38c45e8c04fa7374be031260839b70261be32b0fc68c386549c02289c58a02f7bff68622691ce6fe65b1f61df95fb3149b3738f85e2d1ccd5c2aefba17d519ad611c2a5607d8e50f58941f5bfb01ed3cd5cf1c78ab6552a2882d6e54f9d07bd86b16bb26bb5f9355b8698ff3dd275e74b909fafafb2252ac78014221294791d8cd4b24882b4516e945a3e30f0e18a5fa20eea3c2bfa93132baf988a47052641150c4c7110e49751cd1ee6e09d14c2cf23d15764b5d25f24bf18fc46e5e02419c1479a41795199f46b0cfdf11ce4d258f68221e9e5068ca712476b34180caee9ddd6fae356f902048ca71a477cb485003d8e7ef09e7a69245b4481bf8aaea355b5bd2ade886e05ca202e7ece079c4b5bb0e2ffc3c4e4e405639c5cb609bac678159f1155ea867ceadafcf77a25860479f1880b8b95c895d55bacae1d3cdbc7e1db430bdeed1b332d6b2f4166db12ff4f7425bd8fc8010b4f2207ea74911d25a7255eaebaf472ad1e2ec45b4ce9c6ff362f2b317db711dc7c941ead659765139df6850f8eb0627ac9241276c0cf992ffbeab1c34f594fc431a855b4f4c5ded52ef21342581bc618a8be87050efa7b297ee5497697be9f27b8dd90ac4de0ca2189fc649f1d6043901cb9030a0209487296e14aa48f18e3942ff9734190c9ac1e79477be06be0354973b160f13ab9600f80500c0c9e289a9b0a091837273e372dbe931a235bac364c324ca98d5c630aa90172ecf4efde6cef80ab0a73de01f670c25ee55d2d07e9e5cf730f9a46de300b0a25658fe2d91648a49701d4a1c26bcc814a42d4f6e7fc875be9fa32e116b096926d240adb5df0f8df12bdb057638f2a5830863753564977c77be4c5159fd30fac61d7f9019b336e532a8e3ddc9cd1fabbd14a67ceb04cf4c6afb8488b8ffa1740cc9b0ce4a2a5d7005b2bfb8a4aa9a4480f363450502bfa5870b8c34ecb25ab2253fe36ce0510797178114d08ba1b16c5fb50336fcb26e6ae784dc27cfc498cf6ba6c816998c0cd3611d04a15cc866f1830a3a0137a0f203619977e0fc3a66ff4fb49c394c79aa228da0ae7234abbf74e8290791fa8c3c004c70af813204e11584d341e1f411252d2cf29de6787960647b6a2cdf38f8dcaa4e6992627e1107e2cbe0e8805898a1d1602541c264890f363884839a328ddc88cbf44e82b2038bc7d87f2523ea82a2e9e0063ecf478cd55ff0cd9f1ee57cc33b7d60a4fa7cbe7ef8758ed9a84bef51ba6fe91c5d8c51c94522c4ee085931c1fecf67f6d2176cd97202061d9eaaea83f58ae223ec22086e91ab78405d7cc3c794fe9e9d7061724cb6a513d62ef7f2f604dc5abc7f644470a48d406e34cb3404bfe426b4983715fb8589ec296a445432e2689eaba4533d3af6b4fa442626a3c4035a70a1eef8a65b182372a4278b6f0552aebfee3ef412b8721bb1b2a5e0cb3e396dccc9026d1b16b03ffdd25f1bfc5b97ee7b8fc338b56a9769d66ae2e9fe04c8b2604e790a12af3665f0e5f8c0fda92c50ba13bea615276458d40cd25719869594053628a86404c366f55645a484604c000fe6c8494cdff65f7be3c983af618f68f32b77d7806c7516f058659819d22a02cec012f44cbe3070953879b359e3630a930c81a152386e31268bc65980ac4f3fe001fb1898641976bee1be8c58833c9bf5fb0d5651f3610d447ac4021db39bcb78759a46640540e2c11bb86eb01a7f94ca03a0bc2c57640c12fbf7ed8573019f8b4a3795602a9518500f0b6fa28229f27de991f25920078886cd233cf9760b0e531789f79e0374238bb9031ba824f33280bbbb54cc481a51b38ab9830d3c88fbd1de85d1a7db0b10051a704df5b185e7bf866eaf11c10335dc822da8aa8fe9e14384acd96e5e6308841fc09ae10887ea8f0ce1ffe8f0a0d86a8090f97af0cfa887d6cbde2396b3b334b1e98af4d43e7f544602db793a5b6deb281040e410382d446c4b4376e07a24dcd80f6b45bde0f24b48a4a74057ce1203ee59aa86c59e049e835b614884e3d09108e76f81f32a46843271d186cf14460815ebf44ab97587c4cddc1007c1577d207208f991c066eef0fcbff30fb0660d180117c9703c0cb2c2198f71f036748136f84dcad68710d29c9ca8096c2c5fcabb1ccccc6935d0c1209e5b903cbd2d6a6db3682bf6cd28eda60d5187effeff440d88b33bb4d8e5b4f9ecfe93ad4ff73edd7cd6de189f3540cc3904ba391360ffd9ce67db4fdd7f4eed8c4f1af8e4ec00ee0624f8dad9cfb73fb1459f8e36f76ebee17eb6860854cdfa8be2995345ab0df8e161c3e448918a645d6e947f711204aa7d04e3b7a191c13d74e409a81b6bedba82756a7c2dfa14f53bf8e365fd372ad95f13c6d14fe822739188704789b5ab56b5f19fd709b95100714c17ce51facd0082b329e702959f1976f15e55a9ce52e3eaeab6aad778d68334ebc7cb9f189ec84f2829efd039d32557eca8ab91f4f1bc1bf021c530a5bfe9c9d78c0b748b06029d9c8a4707a3daac1d71ac6f854fdf908bbf65a8cb9f4a1fb67843b3f85de5d8b5df1918565ff20727f1d72a7166cbb96bc0b17ac89d453254f3116cbda815a9831b1d70866afd43ee884e2068eaffdb736f1f11f33aeeb180046c5d99e553495d695bb48ea7ab245bbcdaa78a5ef853502a74ac721850ba8840f1a411d4014a91dbcfee1b75409eeb45c87376e3559e4b7b213e096ec8759cfbceffa4099bdad484e823d52817df05c2381794d2827218fc3fa6a12cee8e20e039a4e903ba7491895a00b8349bb4f596f11c0938c835e2817efe69d1eccda905197b1116800e96a0ca1ae5a06a8f69a5a38d0b81f1417edbef72a501b74864505ed528cee60c7088646608f4452cda0531409e6231f8aee27785f5bfabc1fc4fbcdbea8bc4df61a890c4d37cc400cfb81acf003f10526b8a8ebf7c28e9cd99b981b8272e141b646e207c0b72f157a24d493e209d03a8cb83415ee09f886b0429f9f80089b94193b077d2b747eaea045a29e612f9260614f13fd9a1c0d43de6e768e7f899ff61a30f1fcb41bcb780ce589478994a05067398c3b72f3c66c537e48a6d11c680a688a8e97d637249fb0a5267b3c3690611be43138a32e870b52fb3f21159437cb3ec664268e21c7062b880a277106017495af0a0a8159430d780dc7d82ba5e475b2ee154f90b6aec093db5c15da29bb806f6b7ed7e558bde232dc75f60034402ad2bcb37582f880355ff9d4f3df4bb763f9a8899034380cc315c831699d1ae655d843e4a6ea27f29d6a32597cbf3c9032119f724dc5c4ccdc602d18f7365e690b00e7df4125339ec5c44e92b5f790ab75e89bded6f3de909f2bb18a1a5e94ac654cd0eab3e22d257d85a3853d706441dd209fcf480a75db76a961b1c25109d06b7055f5b88598312d3a84a537ffcec37a82b65d2d666859a22511ae03382eced532cc1974c5eeec09242584a1aca28be03282f243f947e643348a16b41002ac4516a078140ac8c73b9d94229395f6664d563ea26109b68491d070019627809a4b756ee2fd95229c6e9d7859b28d5e2cb9e46f12628d9b3d6f4ac3ec91cd02aa8f2ef8efbfc5addb33f2c3d1b89687130bdbefb5c642ce92935bc0265a986d2b57358c9eeabc65498d500dad5a003d0132051f40a5708003ca111a00a00701ff298af84bd16e602e52630ab4a6dd8cc7b9b7533adcb3a152321e902c3fc8f4b6688cc33370f14da751e68d291c81eb0e22c1ceb7feb30e20998779bda58a4c7db86eed347bc880272bab651b18cc1b132d59a7a520f4cec3c6c4497ec6deaa824d46f7f20ad1c3562bafbb96454c551f9751e2e091e6d087873e118415d85f52cbe23a1d98256785376e719d4e737e0b881616f6a6c96a8489ec410fa152a74042fe6a1181c7decaa2ca411ebe2d9fc6aeca92ca411ebe2d96c6a7643052e010af504c309f0b42f41bb16db2e4dd4463f0f669a7c7914972321d382dcf1392e330707960cd21ee1a578b7ce0bc1cba10377ffe220e93c38db3cb5f744e414bb6354eb576053d16e59025474619db36d9eb764e16387bfbed1870d5f072244c9f13d54e18e249ffb6e6d6afdc9a4e24fa6368e03bde95f02c3726af40aee01ee0ba09d73a24fd312f001b55660271805afeb3ec7df2de941706ce48d44f41e60df90106108a4509cf621b7cf686a0f62c6b55247074ae0e7fd389e0c0144364ab42d6e5880a07b753d655fdcd565dde3005e89e0e1f5bc9480ad8c3512f7aa08dae06fc5d22da27dd19b95909e421a527849e6f6e5018213a7b86b1335d043d0dcb8cb03e0597b74a30c63d41c724fcdcd772ce7f68fd21b9336460714a4fe057a2343a806e4728b72f524a5ff3f3a2481d0da240a54d565f903557548e1949e516a616b5c836823f86f43a0b3501d187efb2836e3cdb7da4829ab7a8e500b849c0c4810b16afde7b822237b9909bf88d09096f5df11fbfb1c810268638216a5a74c645a6ea32baddf47aceeb9695ebb57ec2c70d7ad428d756925482bde1de323973ebb52d713c1ddb72fd24b7dd177716f7ca95c9166a391b40a521b02b7a303ef1ec97dd6cef809ea4a256f9c6087cf11249f145d32094a7fb4ed5d050583d7830ebb4164da953ed051661833e084221232e0f24ed9aa9c649d0ea3423681616e35ea0451a3c27a3fd63b6ea25008a3025870c0a433f5d540ff3c066c075b43f8c911f44f15d8771e93f2875abeed9110241823290e86745c73f723aeda1e656af63343d12e2dcb0a93d5f8ea4eea63b7a8940b059b7a53fe3a1dab3a535ae3ce6756e5b23f598e0dab8253a324e053b567699dcf47a752842dc87adf949ec1535205ffd99fcf361b8a239de9b9794877adbce03bbefb099958432ec1ef77c8a24f19bc7bd6424b2c852e116b36315288908658a7b238131136da0fe3c19984612d69885c6121b83b4c3d1c63bb5548f7249646b3c0c876ea863d204b1092b568d852e7e00c1d7a52531bdd9090504f8cf6a96fa83d315c2f300b05b4d02eb5775fb748bb2a0188a4d5c89e2579b5b9fc1cac830ebadd64c7a03e7dfb3cf754471a9d3ee89d3b1399cfc5bf418c584106e1e223c28372ad7de1a09b6ebb5ab79261bd9d3dd7c6c9605167be20355cb963b35aae53ff33e2e0b838eb005b17d292358115b5de6912c744005b0990879690f1ee6470089cc66f8c3befb8e1e0b9ad36f9273db00fe397a0a70fcfbd0b9ea95c35db3c4e810aae382caed2f4c2ae27af5d6df9a5e16dbcf0b74e04e82bb0b9b5edaaf849430db8a716c874a130c32ab04a01724c2d5a8e8a326ccc726c43fb2e3ef4af61f30b8d8dd3cf84f002230935d5c3c5d753367bb36c5cd4ad5f8213d75044687b32d791eea09e621cd21b5ee8a39647889e064a5d2b4a8713af7440ad457ab5f44da3fb0a129a55b6f44fdda5b827574b88a182490a2de18e10a1541a6db1b23d3d922eaa731d2d493745fffd30c9304fd2c18795ab144d5af9ddcd047240863f84ac4d7c7f83c28e2459b71e636da72d487d98125e8c5ecc157264232add7b2cceac3a53f4e4040a801538cd18ef546f69ba6a8bf9c423880401522ade23acf285e090a874c2991523154866c077f18e1cc3ee7711d97bb56c17b0ee9f20a3f421bf3dd4c94abf6ae86d2c90d8f18b402e7f8398fda9f2b1cac3cf0f880408a43cb699e52ded9b5d0016b282e8da9657b914bfa7bda68980990040a959859d7822ce6b9b69820739b1fabc95fd62251fa7bf7461152e6909454fcb6fafeeb4aa12436620a6e04f1dbca7d3ccd3d41ff95cbc1ec2457052f1949f7ca30c53d6635ccb162ae221ef680dc4320369e7ec9a793e033da29df53c8947f5064965f3edb18e6a8ae122bdff99fe171952feca3fe8a17194795c3a37037905804280b53d120da0c23d36548b143a6c9613d772a3fcf12a599d3ea6262dbc69ec3bd4b9cf0532f2408f3b3701463cab0321321102ec3aa3982e47ee59c8783a856cd6fb0e009ccf7af5f5852addc9256ae7d528114de7051b73b5cefad501498dde1987cf70de596e5f5a5368fb15a7e9bce3c8b85b76f96da7d7e22fc7b7b7f11d6e7a6b4fcd07afc856e25fc88c2e3d8581046f1a08b10d4061b99f509953bc788c229a819771868801594595951222768ab64579b6a1a2467c804ce2c92a8b74e071c2e6e4a675c6d3eb7ecb8850627dc0a32733d4008a019401b8557a07ef6cffa0626524980954515920cf4018b282be390456ad41e3dc013a723b94196a6a9295270f75da2241b31909c88ad2db46d4e9d9506709ee7179da5121d000eaa70dff69ebf55c459ca6b3cf227c59e7ba6854b4f4761de18313876b3ccfb741e83d5b785a3babece90f10c1ee198f24c774f9025891a38034342b77e31b9f78299a56d2bf1d2783ad7f31b7014cb403dab5f28b5b304e4a4e07b5bebef2555b5e049161afbebf8c241c4168f0601d65f7d361bf2376674f57c7e04d679c9f6519f23a9eed158002a8c2b00282d1119abbbd30e79835c8269e517072c993d7f26b00f7847d696defbdb7dc524a29930c080946086b08edf1c8c634a39836e79c136c49af1ea408096cc99c2306b1d5edf43a317842bbf4d61058ce39a99f406754923dc858d76fd8ac863c75fce6c95357b5daad0729420a21c6a45b8f396210e931d64debb27dfa50b7a00ff5d61078baf4188b4843d54fa879031a7c7bf7389a2e65932e4a1ab5c65ab5dbddeee66e6a130cab479b87e4952fd5949bd4366d4aa772725ded6ae79b73d53730bc74da3c349d6b0b4384c18250c1989ee8c0986ea55306e023939b20dc44a95c34ae85add366719157cacb5272e364c94b29a5c49c662b9d67dce8d0d84d125c71603181c3a0cfebb49fcdb28ec0f786aaa1cf3d7733c4f3fbe9f0fc6eeeb9077e7e411d439a73774873ce3b79358f5ffb053def4f730f1c6aefc0f8f4d3fc0335f740cee3e71f38dd03371be31752bce0e2c592adb56a5e35bf165bf772383457f2abde69a0f50aead0ac5bd7c0a1ea1a18ffb31ebf5a87a6abec163323602e171294bab4b0b468d1e2e2e2050f2f8c4008b5954ee9850dcdc5e5c50b2e0af3543d6d5ef0a14b697aa1b5a9e1b6d1c19bb531c2b5d9d86c81d950816203c66b8385e402c99a26ac247aa4a042268a24aec8408402498c699ab919e28619d8f8a07a8d0dd36b39af31b1c161d5ad69b139d235914fe0ea22094f172dece42c604091c385125c5081b1982e4b893652da3091c282b5e50c8b69cd12f991694d088ce8ba069c5a13c35553658ba53543debeddc24a819ad9fb7c645213859a2790400ae9cf0df424027090ea5598450587de74ebc997aae62b5f160c4950491a9e4ad52a0f5b4f157adfded3b72fbd7eb54c734b07f596cdaeb07ef55eba915a2bab4acbf6ee1f60f523d31658ba8f4c5b4c99327600a4df5a0b447e8d9186f469e7df393f1d2d93e9a073e680eb0e19398834ca90445a20e565f8f3e3d2a9d24baf6af9d003c281e990cf7c6bae5407ad9f0e2a935114e403facdd3dcd333a4db8f85022c7bba83f83772d0dbb34cb0002449a3637f64f5949ea6557dba046c8e2c1ef0f4992c1eb027797a7a92b2cea1594262d2fb4854e2482cc6a214b21e9694796a851063473da4d54302d3a1cc971ed41df4cb7eb586c0314600294550a1148bb10e7088c10921489e843d44cb21cae3e71248a1721014f6180bf2a59cf3afe3c00e4c39ca7da450eee522cf539da7dc47c7f9978b52ce79118e77df4e9471bdd5ee1ed8ea0cc487e7f8ae702e2a8ad82886031621f9c009a1a43c95f254562188d0f499ee014d9fe99edf8c339608b821100da81c678fe9b341111c639f7b1f6814f340a3d88e09b6acc884e9337d84e93353983ed38184106319983ed37f841063280f21c63ecfc39679f1297633e9234c92309128f7c094771d053ba3f043b6d2f4992e3f203e528eca45452847e54eea183b42b5126abad04cc558cc033b16bfceaa28e3e69084d56c51ef9a5b34efa02374b9469abc2460edb0036c079764c9d09435036e8bc153d702b77bc1ed33d3a428a38d6035b9f4360b0431ce0952954a07365938e026f83aab094b09984b351b638c91523ae7c4b62dad946a20e794546a4bd09e4a584a245512638c9146ca4282b76f24f822c1da37126c5948706521c1948504cf6f96122458d280db5948584870fcf6ab4dcb0a016ea794524a29a59452aa52e9a828be944e4a5938e0f61963ac32de15a51aa5b49b2de79cb46bad2c2594522ffa997790be03448102c294245b929c208629c66861e43b40942f67cea49901cd39e79c73ce39e79c53071cae5673ce19e39cb7351f8a2ea68023539a294f4f6efe6f166cfe038f1e5a6bad8dd1436badb5d15a6b6d64e5809598d0cc6abd1eadadb6d65ae9b49212790a93c689c5248b34ac25787e64cae24c165eb2a8a2e924016e9f79684ad60cb876679aa34a75463e9d916ae4933c23ddb071baa2746549e90a9759954969add66ad4abd66adabddb9cdabddbc671736e1cd7759ef7759ef77d28542a8787bab2f4d2534a575e3ac65c5eca2af2255d1e9146249223d288cc21891c12a6294c99a630679cbe74524be9299dd452fa4a4771d332377dd432376da487a420b9cc2e61e49223b69473525a5bce4969ad96566b35edde4dbbdbc6715de7719de77d1f0a95fa50a914c6383839393a2ad5ce0e0c183c52f5e190abf0e725cd2bf9923f9de44bba7421c97a82c3159d450e765e7a4d12398805d0a16b2c4a4c44144184a524c61815c072e244b29c68b6d2e9c4495da26389e04a9608345be9942c11605994a16d79820503ec5eaed25ba516af02c1808260678ed8d8f485d3165e38d1a40d9a58b8fa3349ec191d7c80628c113327315f2a1140404e5638ca801c4f5503bd7b3396af36c10726164ca8d0ac21893cc2801c5da6d0ac712793d3101856473c5c03c71549a60f90193694c62d031d01b2a28a154a0c10eab282a7ee619aa35e2b66d58a2426a5b7c68d01c1cc3cb9cb0c1066a67c4c9da093a87f0946a62c72f8aebd323fe79c9252a633528c6877c00c922a4480ed56271582796082d9302198072af94aa2c2660d06c89e66a4fce4187004476eced913435c02faf198c4873026b228e2430d5bd00491442c7cbd00053b7c31534273a44d2c0432c3431c63a604fe32f3e45b2362a92853468b2a96b070bd76a62a6a20f29a2c2238aa7c581f99a87043859a0f557e64888b2584cc93146e9e6e5e6efd71c9d74b4e31fb5a7175d5aa66d70b38ce7094e972359096f9f295a1c2cb97e5028edfeefa9134228e2994a64ffcd536859029641fae7678f3e6cd1b1a9f5468419a249a847182072e463d680145922f42b489c2451464ae9216529491228c106b2d0f27786bb1586b59b21da458a2515cf101969a3a4288d28d41403020ac13667eb8728407d2a0e04817315428a18225a83481408a1c34299cc0a8430ce129d1225df0ed59b91430a09c8b5515580b4e9313b8c90a37a6070d4d0c02823551a130996de229d117b468eb54addce0fb91698c920f8362b8006b1f99c680e0e735a6850f5f3074f4c6dab3f218ee16fa02dac4024c16c5d3d3354fdd93a591a274e385010589b942886b0531511471ad406f960f5d4a405c2ac4802fc460111263450c9523d60a626a78d447263143aca04c5184a9428871616611f3c24b0f53c5732c16582d285d1b6b50145cc68069b2816b12016a5ad16982728515309cf1e186cd88316d56a0810898a4a622b429861bb7b064364c18314888e942890857c2155704324d6773a881b0f80384376f5ef09d47d88746477e6e79e621cf87b4104669e8e510f69e6b8ee3dda107040323e7405bf4cd2f2a877786f73def6e60f843a578c10bb5fec386f5ed8705c009de3c8db03ceb8d967c8cc2e6b0fa09465fbd2e3df5d68e4c9fbc1db2bee33960683de785294f7dd3a437411da7608c323cdfc0d0e8370f04c3ca834eaf461fbfa9ba3eb7b9751b783dce3730c7afdfaf478f945f0831d6d303b6d072173ab6c56fe5f56ede75e1f4558ccdb5fa7d3cac7f77bdebc791e33ca88773f32db776f8159a2c6ff9e769de722179abafc0a11d8fef8140560ea30363802b9007f52d87d6b1d7fcb9d0e4017ff4ebb0aee3305ae01dfa747268f4e1070353e0102a7fad1b7149d6d55abdae7ade01e9bcea5d3de16e5ec1fe6e5ca75e41ce7d82d68b32aedf4ce52ba8072c3fce5e986151eb46f41792fdfd48e1888515641fe32b42207e8c3fd486d3eb037ae61f454a4d5049a3a9bff09db6febc565bd10a529043617e98c2134d1256f5b3c1c9bf1c487fbb9e9d4fe5079e4f974f250d569a0c883082075e295cdd607c169979012a020546c880a4f1a4b1005349cfeb3a5444c5ae5deff927bfaf537217f7b9c6f577b7ff0075c65dac46983ed289f584a3377e8ef39ee3bcbf4e925f5ec95777d439fa3e8ea4111c7cd5e0cbc5dc3c08fb176b7cfd6c2003e61cc7b739a7a48f03beba2e056a29d0fe571f83cde2fcdb7cfb6c7cdb07d2e732f7ed68fa1c9802670a94ff695e0aec323885022978a7c061885fbae639e0953e9b7f9e4b304ab951ea71be81f42947e94b8c92160ba2d9b2c9022b585650c9b2828812d12fedad99dddd1e0289c0c2a287eb75c373d87bbd06484a29a5ec8a57ab9b43f7179008d2477aad15264294219d8506f7f49aae6bd3644581af4b77d1eea15212d1d78f77af6b1a052ba63ebd8244b4e9bc5ad32561c77eaac2cf7973d8deb9259a1c38f438c2fe0dfcd15f6d77bd417d4a30f4e5fd09a996c3e9ca02b75ad6ea977fdf82aa10a8d6c054d258b1a25881b9f463a350b8c723072bef0d64c05ec1d0b565b74473477c43694f3bd8617c2f8f0e8c9d9c18aef215f62f06485dfb6caceef57b633c0f8c1d70a503624779fd6c7c299a42b9457d207d0fa4fddd906ec190045747c2aa6b1afa965eefb1eabbbb810c3845a9d7cf06ca46a6df8ef8e6cd9bcf06f6542ba22a65aae70cac16e0d0557f5cd2ae41debc7933a33e58cabae82ac1153d6edc4a487a608eef562136bda7fde8ef38e7724882eb86bcdfac2db0275f783a392335cda70b69ee9dc0d231c24f8f19943d2418ce2119b5ba8ec8012a72d03fe5356fed68d7bc73385de5b968cf936ee60292df9ca2bcd3d14d90f39b43a3bf9ee3f53acab9d6f1186570ae02511e3f1d280e54390f1b281e170c8dbef3ee7a32b7d1a37ab4d031a3e7746c4e1d1c42f9e62a304439e73a60880a8d1e80f2cdbb94a751cda7bb70b04f30fcbe1bd7edfd78687e739843231ed43b94779c7b1f0fcd557e55b9b50335b79973dcd5a3858e4dd7f11d179a4252fb78689b4f774119126301c2ebd6773ce53a60989343a3276a1c7008e5fd181cfa7c4be51df04e1f0cfb78685e8f1739e8e601c7990b3e4fe8ff1a608405c7eb0f07fe6cd04e035b3aa8ece7c74f07feeb4b32d95fc7f9ba0b02f9119f64b227caf9ce2791f71d0f13fe02f901c2cb28637322fb403827b23c46f8abc10f10bea38ccde3d780f8b3e5f9d9b8f2cb21f431fe84d4ed0dba63668dfba603b564f40df9f35568231df92dd959993c453d3d8d1ccd73cdd2f739e79c4a33c8aa6cb4f6c9fb6cd8cf46671a03c46e55b05923ae5a2c0cac67e0f2bb71abcf1cbedee670c657efbacef3da3d0f1c92aec25b1eefba39a777eeedf1e4a12e46e752031e3172285fba063994df85f4e93b831cce68c220872f303d39f42558395c19d1ca44acb2b5411ee8796881be6d177a136554d428eae6439413c9a1493b4df3da3daae64314fd788428cf51de79c8b9a6e5903e3dcaa503f98031705eeb580336a3e6dacdd6b91ccd343581f9b28456b504bc5680d772484290e6b545ad1e203345938964c872946b2670f7f338533bee30a6db1cea986e79586fcf85e67b618fa33ca44fafb9cab32a4759cfe10c0d72f84a79061983dcca324fe9adb0275b0c7e1f8ee9433263f7a6f53a7378829106c3fa4eeab37e6d6ee510e851ce7d363426af025b4a27d989722179e6ad6b1f0e957b8e02a70b4d1ce7011f06b803a6c0afa37015366b440c83c1fe7a38e34398d5b160ce8f7ef3264c9fea393787335ebeaa787a1ebf51391e8736efbcd1c0ba8b077541df6deeb57b39047aeb759a7b9da779b6cb140db5ae45993e75c68cd7cb7db5c2b5766e49087a94872404fdf5140ed81983f7c38172ede3e13dca3bcaac404ff87401675fbbcece2109411795bf4cd1f40ceb144d77f0d4523aa9a37c758ac6a8a75d8816bcbc7f9cb1f005c9037d9cb550e65998fd003ece56b872e6bde75c26f93b13326576e46676c46576f4647614c6e96f4e52534fe171ea77d658391932b8a993c8387512e69a8c8a9a3aa96976439fabf037dedb3b1c1915ca3f1dee731d94d3b7ef64a79d87d7c3dbf7d23cd44d46454d9dd4a40695c479377167502a0fdb89f334ff74680ebf4c24dfcb1aa528ea9a8e873d856a7dbfdc645a3b9dd4c471309c9e3ae63e8e0c191819d3cbf18044343585a364c8c8241fd8647650649ab00af45c074cb904797c822bbfa0e638389ef3354efb874346e33a0fbbce69e771d6a0f9ce1ab3060e0ef626d31d5cd73e9c29e501e3f4a1a92964c8741219273239594001060c10ce0a83434fe5a9662b3c99c9923e7e938a37683ca0c4174a627882ce5698528f60b1e0e54a7d9cc93cf0f4e34c26458a2efa773187fd92355c48d6f0d87de90e78b9aa112fdd8b36e0100836e4e54cf6e4a50779f01207d9c7742f1775c6b9c884e9c365998b5a968f1421f96897b9a873d1e7328f307d34f71c201d8fb1d8b4e331a6a93cc676c022a41eaa5cd431ec38ae03e68041907c7499f3201bd080ad57c7c938f7064570ae6e3dc6b81ca47a8c859df41af51418fb3ce92d841121987c1765942828ad1ed6438831eb12e8587521198b2e2d6534a5f683d2fcc0cad11522af7d9c5d99724357e6ca132b4f6f63888438c1e8f36b1b42570ff6b09bc0bdcd2544affd5c09dccf0936ccca9197728884e99e9523da255032483229ad14b4a8b4aab47c9860602d1f5cb115040ca669b321ae5005c05a3f5c15ebe32c882bbf7d9c05c1c686208c04f105568170faea415daa1d470831d6ee1d7311528f5cd45f8f23cd6f2b02334ba01581e99afb98b908c9c7e6d287746ce6a2163a267dcb472e80109b3ea463d22f951425342308e4531dc9472e426a45a03dba8ff6988b90ac17b5fb68bfb9a8b3e7f6d0bf1ecd262ac46c082933218068595982e1ca109736abe20311576b0a6d01f17d9c5599a28a172a653ef4e28c4a98bf1f6754bce08f332a4b135081d34f975deba4b1521a29a534c61969949da49e94f5c7bc3da33d4e39371a656cd59794522a3f4e8ece09b62a8d94464a298db1c65a639d37b2cc593acdb1d321ec7926c618638c31c618e5129d37259ba72ebb83d841d84e443fb41e12ddd79c883e77a3df7ccf094a7be7b5dc6dbbe5d60e2aa9a451a737d89a9552cd6d4b6b6dd55bb6d24965ed1f96724b6d871ea2fc73ee71d66a9ad5344db31a8eead4a5d756d334afbfd3913b8c9c312ff52a67bf90f3212ab7ed09de5cfa50276fa8a2944a09d257f17c284f0357a90ea742a32b32d99f30936432d96b19c84cf6d489b82ef2d331d9c83e2ac99e66183d637a7faa9e31bd4502dc71cdd39d28634619b35502ce69bf2a72c0f974cd3510cbd754d91d5c8b079e9f6e6394a1b2e0fc1d158c8e53713e7d07cb2ae7aa5673b68882e1f5d66d759cb736ce5b95b3cd511dda0f537e18f2fdf130ba7244f62718614992dd9855644f93644ff38fc946f65c46793d637a8b04b869951c8f82f175a66aa3d3e3367bcfa963abe18b31de308731eef0873d8cf2810a2bf0e1953152f452ca7194e39e729b5bedb3d128c09c47f99ad25a6bbf1d9edb7c673d7cf99517250d6a290539ef5c761e3bf08e0073435ddee139a5a07c8aad73976a92730ab6bad6d6aad75b7d29edb7e08fa2a7d4abee7137f28d18e63befbc8b9f0e2e87ad6921e774e6c390eff2c68116149a1944d2cd39bbce2d1d791add96437a48f2d365f509b6aad08c9f0d4a370f43eb726b69ed2ddb15fc51f472f2a0ff63ca2c6768396939c1a194721ee1604b09962ea7d704d0e914bc73003116b5514f231d6439a8f988a36a0050992e4adc1e673984f9d093d1457fc5b9c40c87244f7ce825c1e1fd399f50a3faa9d1236888f2d5a6a8b76ccb4ef71c7eface95dff18fcbeb388f4f97461e0c3b6c952a07293f5d878624489c6a7755e521cedf0f07b6a1a3e1fcd5008f069efb76e8388f735fa700530f3f97383eff3e17924252fb76ecf8e79cd5c0211c9fde21c681bdead8d0c9e1e6d527e7a857e168e03730c409c1a9e0600227a610620b9398f6e9b8afb9edb494a7c070fbb03ace0e186ea1959f03b60fa977e1868303ef79b83dc781e77248bd52c72e34bf1c6e5f9d0ecda1ea1cf80e0cab8d8aa4ca6bdeca61caab6b51de733c7bcf2d922faf69fe79b70352a7200cffc0211851c686e316d4e80dead8b79473e0055b3b52cee329e7f1ae7ed4c6cae990f5a1947fd7b92863f3cea9cb19d621ead1736c6eadf20da347794bc78ea77cc7539e722159bdcb721e70c77940eb1ef5185e419b873caf3abe5557b9d0eca4c7037a2c1c468ff21662b80b3116a063314018e06ac873cf3b9c0c6bedf03ce5ca43de971b60844585a72ebf0618d5cf01465870d0a20fb2390555f8cde8e7e692729d13d9dfbcdb3c27b2ff43fb1865a4bc203f34f8cd63a7c25f2e6f60f5442ba3bf39ac6eaf578166f780b78fb31bce7cee95c42f9881e04bf71810cc3ece663853e3e36c86291fb49af2d289972d1ab00c38ce66c8414886ba8297ee3325b1d0eb160db83df98a1987ee062f3d1f673754b9610437d8e0dae28729e8e32c0908546f3e2082054507890d2ea0d87867c6a0ba08a1c383a7c3ac06212c2c5a1f673474e91af0eae38c862aac9608e28a07c68e4a2727068a4a173d7aaaa8a2d1c5b7d1c58fae0ee76c8d00b7cfa9f428d82fc627787a9cf49ffe87f628e47ca96e7e28d86f20ddf42878df405af63f40f87699ac3f1d58871473ab47d7c720e5511f6730287d27a9172f537aa1b17a79493b7644a6fa54b48918aec418d47ccf899a99ced0750d180748beaa4826138621f4a986b15db4a53b65cb81fbc090ce9bd4784c9ce9afc78b7ca196a892803b0790aa5d708b319224826d03beb8aae0a59b9731677ba1eb12641824c0991599159915a1d2b32251be9d02b3221389599121b2e7ac20965db3377d3abd47beac7a344d53b1cce055cf08da0532d01df46b6e82a4d1af39510adaaa6552ba5884e3cc03b38f33225ede001f67449a7cad9652961678864493b6c7a202f7f0214277d05f5f7a25c2e4b11c8281f2b86b8554a0abaca65a2b8b0b4c9f281afa24eba41ef2d44e928cec24324e4e4f5d745daf935cadd1c3d6c3d5c79eb71eba97c3d7c79fb739b4915a6b81647b740c0ee9d359c3933ed4fd69f51c87748f06bde52c0941bf658aa66754afb602bda2bd7773d7fd31e5d4bc355bdd25a5a4b4c768eb7a249b1199bd5045d0133d13291afa449f96b88ee372bc0273d92506872e1feaafb9c2f8a7243d373f901f48a72e49a373eba469ad084c4fb904a4a3847c2e443a2a1b3d078698861d726eaf77d273449493d44c175d5d177639747de77feb4579ad7e6bcaabcebd5e0efd596470f8f3d537ff01aa395edd034903f47440cf5328b03f1b5fbe60d8f9f4ebe5b073eb1d5f530a3ab4134b8c844081c4e9ca13332ea47860650a256e7ee022e68858124bb0751225a544c4952763aeb8d0c502d4103173258a93a72f623324d2bcb54d7850b36486364b36d0c14c2b895df412b108201dfa2936f1192c2d65b065498c31c61863c718638c31c68e1e9b59bae80a7a29251baa6977ce39e7d47258a98d41038ef2d543a64fe8c10819288a1c50972e820975f32e7ef7f66743d35a36412ddb4ab938f3f1f4edd369f49034666e27f9aa3674d115cae8316cc05d721c0307808771e6018ecb7b7c6ee033fb8c4a2d87f5f080c31fe73807573ebda7e498357c5e3e3d855943001e80cd3bca0bc68e14f7d0c34ed29d6ff851d0ac0f782569c4f0e95d0c306c5957c3eed29384afe770408fd99a5b8d8258152387351369af65ebad784021114c48a148a69383037652cfe4ab3d0576939a66d36ec0d5f4697f81020003008e000017d84ca64ffb066057993eed19ec2ed3a71d041dd420030c7a5a5f9e7e9c5c4d3f73c80b481ab6c8124764f1f1a377d676b7962d0d787396f778d85d5a3e3d9fde6a30f069bd9dfacc4fcf61330930eb3d24c0e1cf0f5010ac9ffc03fb8c2c85a23e8a32da37b093c8573b1b37f2d58e01d803f6908e524a29255108f41a510af2d583846587405e4a6cc4235348c4324514c8c00aba3b6b1c216961c2bc0f59c387cc316b7ca9558fc3844678751405bea64fa7c00b05e516953f7025344294d12e4115a65127a5134d31ae803eba099183e8e5591ee2181ebe1e46811e9286e73d2d8fde7de0d534d890e6a82f7f3dccf128179238393ad7793cce1a19f8caa3b49e01880118a50f4f0eef5f1508347bfebafeca97a7d10f0c51d9cb3d2dd03b201618c37ba468d1e9d96499011e699fa034768931c618a98d31c618638cd50ac94a3523dbb349675db3b3d65aab47a7aef35a35ef3901e63c8c6c5e7aefe558fdba06aa9aa60c43b5eb4a80fd10f539bdd36061500d1cb7d6facaadbf38a7d8edbdfe79e00a74c9d7bd3ec2775efdce5ff2753dbb7c5d4f5dd8dfac552ddf39c6738eab9e76b5cd7b4a804320a020980758bebacea54afa742ebd73afba24d572a5667ba6e0f0b64cf6b4ae7a4cb0dadcdc0d087d159b14969ac820fb7a71f8a0a0c9234b74ed463cf9389b2d7d98fae8411f67b3183e7e3aecff08001692d11541e800808d3e7a043bd706b47a987aad194b6fd9ace5e8ad2db04b2940c74748b47aa652d2ac019ebe806bebb5aa55bcde75d5bd4e2dad1960cd8f90aa758f01835a6badf255dde5abe505eef9a956ce1e0c54a4bbd1df6a69da55c997e65773aa697305a4fffacd50b6497366e123a4eadb56ebddaaf55a6fbd5a1ef2e9421703c911474078493dfecc8829d265b39270f853bd55f38ffee940faa76728edd23db64b26a4ecaed34ae9b302f9a7acd4259e30ac5c3c3146183ee28d3e32ef6002a8eecd3af808a9662a5f9e44c0f4e9ad2eb0bcd2dd8b3117fa871c177db82863fec8d7f41e1b70f8c3fdf41fa0209807393f7437fa71f0f49d0ee348bb143e4292d33f90dd32a3707702ba0f47da59abb21eaec0561b1c7a6fe50a483f7597544e0f573f429ab6a514d2f524c11cd6e96ef46ff8e2486b572bbf1bf2ad7b2b16305df5741604d26fdd7a43d15c48b6868f90a66bdedf2572106950ebf5dd4d67f111524b0448a7a181ad797dc0748d5a3a35ed7694a88ef1e2e888c29b0df9fe1e59fb8fa4618bb8aa7b4ee84e006e8f33d9775be9e8c4d1a3ed6647c83ece8c7822c0c799114adfe3f2d5f202873df4f5d32fbd6b4f6628d6291867464c91f808a957e81a1f21450a1875ab05d86ba9c1144b1a3b68d85f33ee978d43be91ed6eea36d0611a524aa9aaadcac395d6ef7c5dae69ad69adb11647c59e0455f2357178df79d65ab9e81617764a9fd28a2e5240a670b863baf5f9e9a0b54a3cb73cb59c1a882096eed42af6542b78418911284b20f5d0c5e8861b96bea8418812279058a3c5d3039da969b2983195a1423aaa5d3be5183bdbc28527a7e860882d52d005095e70c6cd6ad544572b125f9954f0d53d2e57537d9c315159e1b0e5889625351cb1210c0b2358e30505b11086b74e9966780b80b75a08408722c6304184082ab868c1c4c2162e98c065bebdeb26b32d5e3e3aeae36ccbd2e72d533ee7e36c0b938f468eb0662b9db2051c674c4f4fbfc0c07d4af3edb1fd26e04a962225284325298a8ac6e88618968c3cf1800a982c510205539295a52c5e10822474a0e2041556903ce9a25da1a5861cec0666056ab4bcf06e96ce7ccf96a4f8bcccefe36c8969a9ca52940fbdd9d207e4d2d117df3da3894b61dfdd65c6afbbcc1a940997431810cab51cbe6a77b1395c751995e3cb670d792494476040afd75ce5cce4a7514cce2f43ed2dfbf861bb94cd22a4ce5dba4bcf22072c59cbbaa865b149a4bdb5d25b96876cc8fc0305ed650e8d5ef8c731166335d768596cb6f9d65e3aabcd4bcf91454d7c451a39b274115ff17bb6c1111cdb7cfc30aae0e715476db8bca1a18b196631232b3e60d1e5cb0e3c286125e601952b684ea0a689a712c48c4600c5055046c0464d165ac4e2122f2051811769940859226684030b2c90a108306dbe2cd180082e7ec0c20217bcc02236a178f2c1890c38b029a24d6cce8b822eca2f5fbec469670f5e514a29a594aef0cfebcb972c4e78eac0020c6857d36eb804125a685962a20a2a26e046091130d143134e589005062bb228a164055e8a9839815981cac31f675986c85285367d499f7665e9e143579559961acc6429c12c4b088aa8428416231a9e90a2c9104c54966698159146832a8c9a28d1821400a1054c0ade8029e24b11557031c28817238c286144886ff740a0dea42d2764ed300c111af01268095149031e10d8ce2a899029c530232205415e4b0ba637e7e38c88274f3fce8838f2124a17e5527777b79c44fd59b0283145aa4d2c5386c84200274f242961e1e48627b170f53325d95b3bc505b840a22407304a0ca1a6a524808f332c60de7e9c6169024b2bbdf4b8fa6e7241384f79070641f2c1e5387d344f79100936e7d47d704ea573be651f9ecf5c84ea104b1ec7c1cee35e84e403864bd73af7d1de753e569eca45295fe51ed347eb5c04347d34c7719e8c938b84a68fe65d54e4d347731813f41c057ed439f741372fc24e7d0ba120a8d4ed55753d0b19aa91000000f314000020100a07042291482c18a9723cfc14800b89a4406a541749b3208761140441c418638c2106100010318484c6441d0a216325327ee9f33406513c96560c0694fe45f8176ff7088460721d9fe9e0fbca741c622deb6a516734f2c802967f4866a508a5346ecb58a9a3ac7ab447878c8c4e3bd6a2341cf532c7bdc0a1a796bbc958c14124bdb4e92303bd4682d84084112f69a7bca9d7c23c7ba27bd49c8883a36a1de2d21f47907c88e2c26de3082af49e9eb442c32800736d3b80318363aaf1bb92a0f036db287950a86ea7b66352d078f24192a06038f0930de742ecc62cf7fa0830fde3e08c126d3827ff38bb42c70264defc1018613eb8cc76aa6d91ca4cf105309504cb171275a6436ec1c82dbf82d21888ac988f0733b944e96923f34a335625b7695f884e7f3b04e65ce9850c6a4de137c9ab0945f0c28e92b22c5aad1990b614a317e58dea99b4803a5e951ff2c3275a5ab996e751c9fa34764a1ff1f505afc0311a9ae842cd8d0872d9185b7667c7caab5e397da022ca0da2e77d4fa9a4086b2e11a6485ba3b544f88f2b843f1048e37e52d61e5fae127cd3d76eb785ecc027a437338cb3ffb78402956d4044a79377d0f2e34331ae9347c9eba3266d94c828d066574e5047d08687504caf2b51be852795030a9cc16f98f334e695500c3bdac3eaaba782a7e3aa3f64201a7719febe83204afc561e87c9823c62a8a9772f09b3f9e6625e4d8191eebc93f2e35f1ea3adace2fad187681f1789bf83b84a4136fef7cd5670394ffbb202e3f77638b8b0fe60567ad69518e3d167d91daab70708b63330d37406768c4de89282b4558704bdabac3e24318467ed83c52860d94ac1c5b7ac72c0b15bc9472361613d58627d0a80a6dd02baf4355c55acbd1fed3286f58e6f6afa47e045d60d52a0088e90cfb3b0f82ac84d85ec22dd3e603dc8103123f5087cb82686e09f42479a3216056b804f52b01a5b98f31ec82cc07f8f019bb8c09b710f6057ec0a9b2d80e5c17f4f9a1e157e885b4878f14c251975e11d40690fedf32c1e7552c0c1929f73ca3ad12c622095fc1751942448b70d7857db2dd327795daa166fb24c6a3ca36cf5e4edc6a535e31e6acbc45e2bc7d50388ea5d2d0c97548dade1e7f21edbc4dbd9f3ace1a6424f35b03439110c327cc9a4a790aa466ef1c71846a30f70850ed42b0b3469435d671b623811b6b2361ba30a4dff9d107fe0294392ed66df0901debff147213bdf7d01becfa538786d45287c91683ec5f2c5283a8c8f00ff38adc835908472e1b3dba7973e295d1ed9644bf859a95625508987106ff00f955a78d0d440fc340bd594d2752033a4cbd20a78ceac60db278e0c3da0a2cdc79d6a918b963cd42e3dd8135f9a81b659ff3fc55a4f7f2ab34bf6ca32b14333199f0577bd1103e2d117c8a5219aaf8adaf8a2e69e18e1849816a02273dd2e28f291434b3bbbb4d44a0b37c78696c64b8891557b291540ac7cc2c7fe5d3f3ead3850b1bd3fbc8fda64ae9f2e614dab0e40a2d2b4b46139370ff61a3f141a0b9be084da5be535ad4dc1f84bcd8c479023d816f0ff4779ab4e36545fbacb8f848490d807fc4671b0669018b8237d1f90425c7a362471064806d756bc685f68f4676837c5c2a38818ab591c960054193b2235501ba31a21e421cf0831ef025c6acaac5a2e4cc9bf1925f5582706020dedcf0869a803451618593f6d626a34bac85e44308f3c0f74089f03f0eb80fb993d8db91cab94a5b4e188a886a04001f44d5525dc5319d7309a704f13851787632e55183fdc2fe8dbc8f3ad4af80e2a7bb7f6ae37ba81cd160e0669692fb28d04e27d6d242c937d1de10bb01ab7114ccbab252b3bc0246dc8acb637a7296c987280a94b77ec004cedade1cdd5bd990583a6cde3d64d7073690dcacd4ecbe340d726967e99e987347a3b6e06ec29cf38e13fe7987e88ab35214efe0416c2cbcc3e1dec71bf0ada07cbdeee8c44a5d8a91328b76c51527ac5dd23685a0bb66532907339ede2bfb4cb1ecca09a7886213870f645f0be8a44bd83a4b4c1703e87cd64f0b0e427661bb1248647cf1adab72b45abb7c58c73c760ac9928e76ce7a3f6749f1dcf64eb82ef3fd40c8c0fdbc5996ef069a64c1e7bc3b0e29b0cc6b3954888332f25d1b18579a787fbe06688635e4c5ac16590daa484cee0f1d995b58cbb277ca2d6190184c2a963f995b1f5addd046a483543771363d0d46d005097363164bc0802f2ed7ad4b4409077aa14474f531dd66202be6955e13e3920b886f16cd769964b36a5aa6032bef948be391c9b3bc8357947115955c57891ee9700ec1775e4fe13efcc12ba2f9bc7e04b8a497ffe64635d532c5766925e75dad9e194d01733b66032fad94aa3b3b8bc14511e4dd0ea5488009073529b3dae281b979ca6538e6b14c7e0940ba09d307b00f3b573802395dd3785d8aabfc64dae5135a20c70011015bad31699171aeeb0298d31ee2b0ae88e75b4b953200151582da524496853c676e5f9a125ae6fa14dd08d0d45988391832cc0c2c9ecf7d95b5d5b5faa386593a30337e2eab50046813a872949d9046763931bf576335db84993cd26589eb39f3bf75cf6d68d4873291743289bb00ca6810674ea08944dfffdf782fb54f50d137b9f3ee83fd7e792d0d5a90e45b85e3ed924401cf133186df0d73844196cd2357a1613c29673e360c851f25beb8352368dc5303472f8ac6346af0265d3e7974ddcd00c38b675cd2fc0d34db5bf747c85151811266e2c0e5fd9a3c9575b08784734d509f7496794ed2b13de3d9e4cf605dd630fa071f6a0419f1c39ea95d8c806064dce4de1d13a9e456450ead79217de672513ea18c09260de9c4cc26a60579d48cefca3b9bd49af2736ca7628e2af3b2506d28082e25302241b920625f63f24cdc6eaef92b8826024ebc4b7099933b9e565360f6eb310f5b58d5044010c3bc5338eb69d8b154a5f998511578876b312b64ed1ec34607de3e43dd43871d1befa5633b11998153763edb56623b6864dcd9ade4954abc41e7639b46c04350ecc877d78c5398c65cb7a78401872744a277f4e30891d846dd49b0586ea49eee218fb488081d7e6a15481b98bf105926d6d204b7cd550e647f323b2afac1af5273fdc96b35f1341b9c73ebcadab441904533e68627d8fd9538ff9df9d39601d139bde3015e905618ebc44b2bdfe598f2db835d7f22b72ec0a49f0aa00de9da947eae32deb5c294389423c51c9e610fdd951dbb7b0e99385ab476df0dc1baa94d581661bc2637544d18207338225214d3e6508d3a275a5dcfc323f19ee8ff49304908dc6d16c10d0feb404ac0278f35a9b77be70d72f4a4ef8bd1e327cd277e5af522f30195c8c39e249653fdb699a34f07232845656150ec14c218c37d46c776d3bfa968c0f9f17d0530ec208759c33fbf67cc8fccf203d991b7993f20d0e160e1b9533c3023c5cf219e341bf0b70aa7e9a05148f1a8a11232aeb591c3f8b0cec00b24868a42843cb80a97a8ff82bbdc592bed88bf53efe135dbcf36b278980f5ec5b2f50f8f098d73f7cc996500f9da954f5e8f3caf2e8bb30398de96bfec0a09581c889cfa51c9148ed786768b388edd8af76e451ed99f1bd56c2ab3a7402bebf03899a810b12b74578e8c803659c94944920c3d776e815f17268325e24cc629883874a3128dbf308158556c8a57286731af08df310e68b8492d74c8d5130945d8723cb92daecc629b5431716d0544179cd50242b0e4c2b5e74494c7dad6603a7b78f3158ff2d81396302b540269f5c50368e7e00425352951f2059c70ae3d1c8dceecaed78ab0bb9f50da0b53501683ead824b5dc9075d032878377e5e1dd4939c3ae0052736a52ecb97ffe9444fdbd783d3bd2b1625f93111cb23cc41ae31734560b56672a8333ab209fc51464ed3b823238ef71024269444419081a58c48601af35a356d7cc86782112b7b81ce616dfdc3df055d35e505804be49b744e0d758382e0141bae0a82328846606e5a3c6376ba88e3604cc0cadd5d6b7ebc39fd6598429fc36bae7300ccb6f3b8a0ce216e981ee48bb10fd2bc068b4c985d3a7e8412751b66e2725f0273867c7404f5e10ec55260122c5bb61d58755e2890d5b9cd2cda814c638f5d461281640b33d9e34de8727cfa01237bfd93456b1b9b0cd481adfb7c70d90fa6cd50cc37997f02768310d79322eeb9f622f5404f7010060857350bb31d9ba22ead984b74210cea4d9eb3ee55d32654ccc60e981c1b4a89997fd808c1a7a56a55b32889cde09d3b77ec6d98f33bb5757a843dc2e16e387e2e38e40767b2397e3ba2f52ef4a59c54f1004bdd079dd0e0e55e284568a089553369e4975633d06500f167809384c013bae1a0d0d83fd54e261ebec1e7d7f9c3770e4c314daaebf87aa8cfc892f29da24be0de7bb280096080d85359c0917f8f0e70aafac9297dc9f037b19e1a144763c0567a299ce7c5a6033c7f9a1473663a881b7c33953191d4612a281af65b2f17dd2f562c8554e7d756cc7bacd262d52e4e71a3b654e517b8348bc4722d80dd2f0721870e15dd58a32941c026b054cf4ee1b1bea65a73f5033ecae457f43d4647a551cdcc76a5c7d6099bfb9972348bcfbb10953b7f4c665fea52468c224711a02bcbc95b4f0746dcb51cc9643641aac77a759fe649375126f0d3e1cd8a1e367de46ba13b22c89e35d89aa3e7302053ecc787ea3e0620c9903912874cc6d37abfc1ab91c3a803936b1749609d210380083c8274075229f25784a2d31f8d19b06391f1bca71547aafbb7d4f092816cba37983851dbc53951ead86b3f37ebbc9d714193c1b42137b83779f5c4e333b489bdd6fbfc7a12b661a49c19d64f8e67981a8c3f0db15db68dec83c250a96060fe3c92871485dc9b1d487139f0465dabf687c73e601860e998092a4a85d1980d6eb8fbd07ca006e4208240bb2b0fc1de47f765bb7643152319d8e7fc4636f2d853c419cad80a8845d5597e07877f3a0175c5517926d16732148645d2da01a9ac3f541212513d98d5fc43aad86d760c15c2ee9efa43458b9e00602c40ccc869da85181ed873af9f3665a6c8675bd77d49304e055c66af6a5038216a1749724f6467736e8948140700fbde7c10736fa45bf069036a3a5f57f4ba4810c672bc37733b9aacd272333e3662fbc8659e183fc6aa7b16a77e1960c58034312ccbe1b61df9764f4ec378e49db7710c77b35b3a94a1265d0738f98fb7100e3b3617b3a231780266f6885cf2013f38260f0bab88ca4902f2ac91c907d5baccea71247f5720e4e5f06a7298703d106f637af1137e2e62b84910c017f12663263c020fbcc8abda883419c6cd394a7b65459492587238f19e0243cc53b3945153a782b330756beeda44d720a0776c7157b558126eedb044520705bf58ee81046527ffa603ee70b98f3bbef507c4088d8a49c939b09de613cc4a8f04bb01e2a4be23e70b671e464da510d1fa16440b40b78dea8b1f2b56b4a22e5a9152d15b6506df07e04f0c96310560d85675a282c27aa9619ded6c557f8010911fd687833bb0362d68773a9ade6c3e8098061d3edb84b583826ad307263e8253fd72679d66ebe52a57482a16941abc096841849c8428ba696d83592415379512db20861931a0078258513b89d2bf3d08bb7761f1d2961cd48c4c41a3a1a457a00f165b2349ce44d1c9e3ad49082f89d251dbf26cef7ab9caf9f7a120ec67a38de93c4cdc5e6c1105312ccf2b17092cefeee220cc2f44fb808b821e829b7c293472b7568c082f8373be16e09e3aabffb2eec3e03736679b129cc05ee64bcc894b9916644807917c799195db2fc93b35921630dcf278b1aca015e4763dd372e0c3b34434a84a9f4ccab5743f4df5905d10c31c11c265f7d301644dfcbd176686c9a941596bda5ccf06f4a68b157eb69dcf05d112325d4f9fe6acbf818b9b178ffd5a5f04179bc42bceb2f60a2e2e6381832a3c25661b44730eeab9becd3613c2f98a85a4ef1f0e0d5d0a73d3cdab8f762aeec927c8fd75d76c1cf144ea3921b9f2b909299a5f44b60af36caf5cf538e6b894129039aa390ec9ea3ce134c162598102d5c719d114aa7450c8d3e8537522c74791097d51057796d5e88be4f337f2df56e3f76075e0e2805560fa236f703a3ec4a29bb39bc1f7995fd3fc69043d4a2c5c96b2d34a46ca45118739fca7223bca879c5781978a48b5d804fdccc4b4ada8a0ff80ec30baf95fe3f0e89554717aae7f207a007365f4aaa2a8ebc19c10e9453195d06b69ebb5c04ee1788d9376e2bbadf9842bd02fae4b2e09331399776315dcd0e9c134f75661985ab19be0d45b630e223537a257b2d0faa9db9b520f9f6bc00fe415a7b51b3327b6c7bc267d785ac3712bac6188125505b25daf9c7c9b8e606d1222404711faa262781c506f4337518792a30d9edf6dc16fae88771f66a536157db50f634018c25007421799ef466d5cc1f4104418edca14494b05f28ce9d28b0dfb7e73bd0b324e8d26439c519a7f718c99dd1a32c843803e52acc3dfab89f9d129271a4aaa9e9bd62136f44aa4e50b4265944e79f988d22a55cd53e1fc6278be27a0a75f0157d388629e24843c6bc669845aaaa76cf3dce79d158a32ba61a0429e3e548e98bbe3aa1808dc67c467f87b039567d972f107d7ca7f0e962ad41836dcbf99f91a5fb93cab219c16bbb5ff8a66461c5ad5128aa443954aef1abe61a439f9f0a574772c3d76f90652ea63bdcb7fb252cb1daf8b555654fc89884c6d8520d47aa68d334a6eefc3807bd9f61694759d50bf6f8b63ca28f211aa15fd7cf5535893ff6001e58fae8f6201f05e4156c41e39e37282fb9d18cdc881246c05d4cc78fc1ae2320ee9e018664e51dda7d599f9454aa7f5be75c500e7d42fa003dcc0d797212b1f68e59649e68207e4986bb1fda7838a1ab06a7573e48f7f485952b6ab551826ec0ebe6b3e3a20d3f20cc289b2f308779ecd6133134a22768c1cb93e39660a843f3917b40557439bb02c827dd7e603a04e74ee2582917a44fd334cbcaaad4a0f4a18e292aef43fb23f3ebb5844b674ca022fdd69d0985111663ed85bb0dfdc5c098ec38d249c959552c778a6d3ffcaf37f3cc9dfb3916694097afddf7c856a1b6b6df7c43b985ef5f6fa0419f42a56c334a5395ae4b3123b322fe714180d692a371d0a7ade5d1351b517ab2bf798fb0daf0c16ecaf3ec1f2dd9bad68d8a0a741030e0dff792918dd6344dfcd47acd6bc238d65deb019625188942526a6fc5111d52cd2f765be3c0617766ad8a07fc5d4523223758172de104d97b34aaaf1e4cdb8c745b8b4aeb08299884754bc0b540711bec7d5addbc411eec0f5c4a2413987eda85e59934447da81041f153b2260e70935877f88b71ff0749d3d11413b33031cbea14b2394fa22f666e31692cb1fcd2426889575e2f109e3f947623cd069e654cf657792787ee0c9271357d937f77eb88a6a82d7e4987fc36f5c745b7e211308c4c9861c7ea4a19597aff269902ab87d5e625ad8403ede21dffe5462cb9ac046a35ae375e3e1920dfe76c1c33debeab653c29475b907ab99e1bb014a148668ed1d242554927271b8706b82c12b2b46c9ae23b2c1fe12316c11c1f5289919b1df0bf07f3900983c11500b04f042a3fcb188377cdc8a30e59f1caed50b0523fd187b57bf3b4c7a9751ef450626b0e4cb9ac6fe3c9621a1d87184c7820182bdaf4bd3b747124e4c27badd05d88902a192344bb73a0fd0745cb8a92af323e17db3f866f409c6f3d11a80101a8458ab6e153eaa21fc4838e2d210fcd341ff767d76f54aefaaf8f7855e4092d05358b76458b8c5e0abf4da2ddd1b9673e82d6feede4a82d0f7be4809f1e5c76961a1b372d2bd0e1b7ed9c89119465268744d13bc9509add710742512e4e9f9c3cee82350ecc1d1b1c948ce69623e39f473f55f3f7b29d744867a1039244da2767fb76eb90bd146d60a3e23a8561241386e4ea6d5ef72368b27e244e896fe5a556a7545c9fd840f4974b1a2d374f9e39dac067de219a3fe50a100c6692fc0554606c86d068dcf271fbbfffff8d1b6e35db7a4d49cc7a9475f7050204e903208f976127a5b4c443778d4741dd4946e80a4cd7d73261b1fd17964b48073d5684299a08ae720b80b28ff897a49f47bfebcefcefbd6b316f077fe1a56bc91b4bcefefb5c98084968cb57fc4c2478984537c417f191ede3353d9967730d16b43a8d4ae61f30cceda6817c7f19374bcc7d42e414b2f9b68a500123ae64ddb1335e58ceb6724ab27a8a8d74ad50d2299726dff31141c44da89d030ba06bc42072de2aa6ef59a4e6884acca4e2985c555c906000ea23b2924aac57b6de667485739520585aaa770fbcfeb43c298ac21ccc3e9bb28b54d7e25be879e0759e400c81a7ad171a2a851538d73937fee2fb5fde1391a2080c7cf7f4ca2b9281a7242a620a81296bc7301b46965ef23867537250da638bfdb282d1e837cefe76fd45d892dd37a1059f352baf4ce1de1049555a64e46e9917455219abd0e4c3b2ce1dd2b58cf9f88a0129ff0c40fae33d1eba61df6d1680f2cd461851ba829142064ed8e43afbc99e9a149024c3b590adc6aabeb2f2510addf3879cd864907fe8a6a99e19ce83653d0d9dbbe955160d58c8d2152939cdbfc7f088fd1c53724188b2699523b15373ce4d4716314ea7ec3e7495fb1d1af0e2f205519e43251e337350068f40663c35f5d2dda7b703cdab0cc5377f6b1bd79f2c0273b2b239baab3a55d3c180d7e014f5d755a8146df1b74046690d4b596990308b934743f3fa0e86438b11566b5c69f0ad02f3b2fab1196518be30a4e2243f228fbc09bfb03308d5c63615f1db8c51e97c496df9913da1608eaba62323c61aef4db34e8451c4df81a022cf5f78999c0359d2e33e4744991c58b44b5c7f440321ebe67ca6efa6ed091eed2cbed2a616f0d16801ee2eec21f49d871705da2d8404bad8b9605f19ea295aa53ac8ec025a48386d593ec8646136f7bd2836907e96d228fa06012f001607448307a692e554bb4b1fb09f332ae8d07836b959fe1ea37c880790b2a9861a62a2a3f23cc0f00892f9ce9f6bfe093083d8a13c1afdb6173c658de3ea8fc9e21bfe9b1df68f989a3cee633ddcfc03f5eb2f43dee8c0abf36015229cbb54c3c84178fada7a2774ec2dbcad06161389957ec34b6956cd6f244bbacd39de52756b218014c55a03ad235f06cf31913e89552dd47dba2fd1fca6ea9cec0881fe9243126d4375e286f662ac5b4f4b2ea7a19ba4ed6ba9291eecb2474839ffda6ef5c039351cc78cded883239e97a554444377a1d78b804ee628c53b920a459bbee52cbc69ab6810840287be5a777f158770c7930b0e1dd23caa8cfadaa0e51fc22f564a3aff26e835931725581c914ae5426e2cb75af3a632b7e07d4fd774639a441087f34266885c41b2bf9ff732cbdd35aa824acb31c612ed881397a50e342b8e5da90f7923222771e78f560b50d63a669da3577fa53e965d6dd13147d39b8600bb3d3fa7cefbb0e404975eab2c38c78a70ed388e3653015296392d34b2ce9fcad7f1e014cb64c44288368a746f3143c2483a108e26ce83f84d4d14510f5027baad743f7c466702d069d00abbdc521de94b48630b47643b072294c837c2e69e6ae9c8c4353344a2c74c24ae69d4eef2812e70075a7d4e0c2a6ad18cbfc694d396a4c2b42cb8904925835c586e3770a2491cb7402c7ae31fc3818710e80be9f4d5a5e9846c778a876c766938b254d3127d4c658793ffece073296875e1ef5c98e06cf105444e4f0fa752f239db32b60a47fa0455183a016ccd591e383f8a626ba1685478cf939ef9034a8fb84387984bfaddcff167c9d7ef53a983e42c536b1ce1485acc2e9e7e7fdb1ae0cc9e64123b41290bc22c9198c233c050944fa070da93b541e58d7a3bea4d1b32634298a73d585edcdd45b86db6d0a56fdfd1dc33639820a906a37d2fb2fa1e1815ab8494c6383ca2edcbfbc60b45624260e79a2b8454ce07794551a394c9bcce6c6df3b3859a727d8e04690936229f994c1fbc66f4341c9c9694e0ec0dd0ee6d6223594cf678c4359801a0d28185d75f759248c415f58e6fe612a9b99002f5fa5d775f64b92784230c0de6851448fa0b7ca7caf0dc268edf15886e1b461ab7e8519a58db5e0844e027c47c91216f6bcb77541d523e21f277260c00d0f276f000ea11d9840b570c9e717a699e6d8cf0a28a8acbcc877904a49d8fccad391d2bf495548b2002bfcf1615d54b831eff1bd411c78bf240ad72958ffd063485d67840592af1b5443dbfa6d2a733b5afae6394b6cbcc00d778aff4cb9e51d88174fd7afe6bcc607689bda363ac2380bb745670620adc2076eec5dd835242f515c6a64ad61ac7096a925c3f45489f08b3ba0bf5ee152dfedf8f6163dd844e0f63f9542730ceb6d7e04c877700582d45ccf0c864d822ca740e99cd2abf1a13cf849a6d0cb8dca3c94c11eaed27e911136eba4e9610b9969d91270cbe8f90662f0c770380834f54c04b9ee0bc1bd18015ee5990d631df1879c6f47973f20fe6697effe7adb09630878e551b3a360623dd21307ccacf4ff70c379b6c1be1306aef5cd5ccbae82577dc4715972c05c213f463147938c88d9f3f117238ae9806aeebbcd7c67a271cea01b35541f198a510da262b7363dbdc9a414b8af4e2c4d61949a184a858d2116b8fa3237c11bcdade4bb61a18990b8f20b862546cfcaad372fd27bb5ce53baaff9c75e9a0be632e77eb9c07426602ad38efd6ae9524a6306076bcf1f29676138902864952eda396a3ad7c1063baee6572b2b56597b2bbacae4d360db2405f0a3577d1562e476ecc4052b6f00997a1dd3e86408ef219d40a6154d68c514359e2aa59790a22c2a968b893b1653cdc5904880550e64573a73ac1521d9288fcd6d18cb333c08e769bdd0f4c6ffa2b4719dd6f1973d239fe430fad560113b0283cb2cba80bebb6735837ebf1a511622bebba935bdafc72870f2ea088c1a83241ad6a6a8642b9bb84b1d7dc9d1cdc774fafadeb62187671834c9dc029905139f951d9fd393a49bcd7a031b1f5498798ee520206e1ea56e20fa53c8a17689f84c7bf38750aca2acc358903f8c4dfb321ba6277d21357940c41ef8d4516bba19f5d31d2c1f70082a57cf0fcdc5819886594be4318be7050a1e4a44d21be7c26862bfee4a3b140725e3878922649026945a51168835c83a9bc8550cc5c31485bb8eea3890429a1486147217ab078c0b22552a22cbc8ef035e648d2712762f2ef0f56a73c2e9cf5cea538b96741473a6caf4e08b3e4eb069b62484ddedd873e06bbc91ec1238b9c18acce59f5c3e166c47c98c296f21aacbd601a930cb0a0374c8b26b3b73b5019bdbbb96d403c8662939297c3a9fc958489f980151f275ee7709583f89409aaa8e58c36188d7e520037ea4a49741bfb470458e21c6f8ff9d8674439377df1864f5c44f73d6045a82f3864692ce946f5ef28674b8761af240f42db71362fd8e2ed646ef04b47259c64070cb90ee9ed0694d466ede9dbaa7f98b8ca7765bf4e8fda7df6a74d5fb2d3ea5a3fe35d7bed55ca8d59b3f1a5f98ac55d60647ec47d1ad36d97eb73cd7884bb2c3e7eff8698e961a33ffe919b80991872d08ffa34c7a1b81c45ada63ae9e8e5b7d35dd786684d61a796136589b1e5db45c68b8c72430cd3dc0625cbf896498d3da8e5c701be4b53bbcc775ad4b3efd8086f37d4eb2c2f0189a575033a1b7c7e78624f7d60e37858aa0e7353c0070c68a0d610b65d698843b5041b7811e659397c64577702db3aa2c038d971b55d80c6ce54d42c2143e1edabecc60dfcb045e7ce08b200553a41bfa8417285a636f3d828d4a19420be580662f961471d76589570358fb8fac6186f81b17e58ce6d22d907c09646634ab13364ab9ecdd1a9b8cfc6ad55d14a4bdc9b5caf1b15c19e5e2b801eeffdecbb5e47459a84a32d3f92b89566ce5c1f8ecc6a7a81ffc0baa4048cb585a6451d86990dfdbc270be4658b11ba41e4bd7b9722bc1e5117aa4c92a2c678391bb1271512576a8cc67017fbc923c9acfbba8dd365509e50b777db5ee009598e2cdd0541668c8461e32678c222b0b29f7a9e5b9ddbccb14d8246c8e0d00eda51300cded7282e4d299f7bb9786bbeb2810e545db005e2397c71467df9c5c6d8ff54dadb3454321690f4c61b31c2af606dcf4ab8d8ee24393d189c75409a784796b65be9a999c07bd80beed87ccad37fbed1740671e693c86e02d671461b8b940549c1601d52ea97c0021207347965c44351704c1181535878e3f0ace41e778a64e37bc6925d6863454247661dfd9a105f8d80861cdc007cb49c8155ba2a0afcf3e70f7a90db2990d4f6cda8edac96293726f715478d5935eac048da965f0b9b6c55e6b8b53f434afdba2d7dae2eb6db1d7b6d0ebb6e0355bc241e9dab3b121af55230ed02bf554877c06dc151821d8b657a5fca5c1c04b8c061e820989934dc0fa76ac13a7830bac420abb0e093dd718cf01aadfbf8a322ed7b672626a6c7fc9ee53cb21d459f5220d143813477f81404e1f8c693192bdd76fa6e9151a34b038b60cdf09dd62bafd7128e0a9134a6305f104094218a53a62f1384b5d26b58c52f57856b254f968f0d80c2fd712548e3d16d388bb8eddfbc6187566c59c75dbc327a37b08b037549604de415e9af24f6be62e13c39e7ebc405af0c32522cd58e485a2164e0c408893d43e7c93e7993d3975a898c0f3e618a88f6ae83b98e76e40e42330631f1ba8390de1f4c53a689905778b2ec0398fe9f90cd96070d1362d0d86e0bdc1cd6393d59200fc87c25cc6f4e1e1d6270d600a36cb8362b0d22798858d406a2ba3339e06df3b38a2652bc6dcc16cfc303cf771fd29aaafafa23524e6cf27ef12eb79fe31ed30bf782eb402f445d14636d524c40d76245548accf2cccac2cc9d2ad64b81fb5ec29d23edcfac1dfb2dec12a508a20918332ef71baa6603a630e5185c3355bf5bc3af10ac514105a25699e07204ac04d64f8d9774dbcfd773e8bd8bb5897d81b88c51505f10ac522498c9e0c62e4569c13f123c37ba70decf3b726dcf73c7131d7f8ca15b2a13895fe82215ce3c8187bef031e44014ae4fe5bc42871b14af3ad9b4c32ed87e85c3da199e8f4f5cdf85f8808d11f5b1ad57cb5e6fd97f5833483b945a3cc692fdbaff05a650de2ee176072e24c70f4e2ac9a9952aea19d0a957e0d8dff1a2d39a97aa241bcb7f1fc8f3ec00f410530e2a4c7380d0f5bc890f774085474b41c0626c49313d383c87529cd207e5c178b4f36043de1db62a2788e92c4cecb97b1b663597044695ed152e7a2290ab5954f3884a7f7057d6e20bad818da8e84cc5123d3028d4283199052cd08c3c2651e1a1e6e3f6c8f5858378625481d755a3564a535daa4c207439dce5e6d3e08538d5c170ea8d41bce0fa2d1d0fb60ba7de850a0d894734da3e92699339f03b271010870c6e142c311991b74a03fbe20e45ed101a00391baa65d67208dda0cf74217e298cd2ec1a2bd0f98b2b00106c2f0530d5147f630fa248954f7324b4203c0e21ff1544138d2348eddc117af5ba43bb0b9e420c00de285a6a3dfe72d67c9e5c5b545450a7d9e300bbe3ee46e709ac05013dfe3591cec89663abc6a4f7a55a8a32d15e1f3101a56e2845a465c2a2dbc8615c9549c86ef42a254f2345713c7e0cedd4b2c30c303c3fe30011230778c5b84a126d152985fa9366279da7dd6088234dc563f6c8c0fe777678f9ed0440cadc488ff2927c5359fd07f09028dd003f2c46837f02eac695f418f39ce97b7ef4a9e95a4203432f365ad3e901d6ccd9d3076d20463fa30e8d6b0afd940e37e7bda4d260baf4cd50616fd4de7c3ae8e7b71831aa9c29deb84a05fb8a8977a13dde4ae15a849b7dbe8525d1fccc5e99778379ec1fa4174a0df57005ae0794c569a83d8a8455c813bdb81598993b6d49e5019945ade79789a6ba601116f92bf54c1da17d5a1d0f98e75c0372a136213a43ccd4d3e2276f03651c0b9b894d41440c35488057db491b4014a04dee653de6ec5730285f90a571a428d4e809bbbeb253e1654420ee33082979256f68cff991971ea3e91111ff77c62d107c72b81f8cc273491174f739e0a89ab82bf09b20d07db7c753ef81b947ee2c184fc7465b47288cb135d4038a3507e830ee453ac9a560183ed00a68fb3b1cb99081d5165de1e57a6eff10c73c74a75cb8eff819161200d7ebc557525083d127e0fc0c819c21d779297e855692e3d5e57862474b7e7b7dc628e5249a99abd73968f337e3dc5498d129b7d5f50743cc9911aea572d2ed0cdeb91b24110aae87f373002de91c4156a16d78871c41f7b26a4dac30fe3de46a306352b44dcda1e2d9dbc2239004021ca36532c08ba597ad2da7b26bb5bd21f13a98e9ccb1281006290e8904fc3ed8037f2f99c12b6a1ba5ff109f7daa19a9c6dc21f46e98581c01ecc8e55e29137fefd76c18efeb33c4bf955197cfbf971c81fea30f5450b9094b99aec4c44dc01d72a3c23b38f78f56ea429678c5d46f99dec93df626e90ee3cb9899c1e944a186bebccd721cdb9dd689a6c554ff9c0570e807e7154a3b930ebc4342daffb0516c2f63294a62d8b5f02cda399a1993f8960cf93b93d501c5cda59a3f33c777836b6e72c6cf716892c0006bc67cac9afd914cd53d5ad3b8a55c6a1bbfc4113bd446096fb3d35677f09a70b1994fc42d3f6ecfa94c7495a0007a2e7b6bcf4cfb78945a78accd202e18d0c6de20e53bf45a54205803ec986cc82b40e26f83ac62b411200a92ed323e5fbfa70c148dfb53002c15cb87791fd48031b9af269e837a6867e33a3471b22c831dd61f5f056fb9885ef45a8601f6ffcade969650f07871a1a7102ca9bd4037d6e590d74c06e5081b04a45df78bc2eb43fb894fe82878596e880316435cc61e2c283edb2312f7846eb16cda3e862dd86cda0d20863f5174951acb4f181e61c27b5831cf538a7b6f526622dedd5927b59e1292dafa3dd6fe2bd3323a0c01fb2bbab330cf2ccf5b4ef7159d21af8698b3aa10dd8be460331a51f592831cc06cb0034d42f4f997723d9c0deb98ff8b3b5bcd891985732da9b61f79513a11f3be5bd37cb9873978ea9ce00b7b50b7fe0d2ce91403acc129e508b7f3e5d9b31cbcee1b5645df16abb0d1e7ece55848c3c679cf888dbc55cf282047984f09f775af76f509be30da57173569484baf85a777c4b12998fe2068728a32557d54b7c860a5773d6dc6248d50fd49354342ec7a1591e9b1333c5944a6b0123eeb7008139adea412633fcf7075648c4103d897f96387eab1e3636c25ca6c2e5d4a3b37ee88e6283afa03b83dac13b5c315889627acfa4829ec0f3c83851fddd0b152304d7d265f0d6383946e4cc1875997cdc6876cfdb5a7b1ca9acd6e93f968bcba2b3939c79bbd8d9042796f53582c9c336b27620edeb55214c8eb4c56e98390cd6786460582d8ca80c013fe518f84d243403fc9bd9ec00a2451a4fb66eb5d298f98e2f3ae45b1a9e945ddc763b2390d47eedc003648a452b1dee1294fbf2e0d9fb9b6660a7f97b01176450dc5f72e8d5558ae0d2c47c19f820b76a8af2513f0127a62b4dc662f94845316fb70e665fb78d6a3aa38ebbed6884c1bd71385c9c7fa09908b6928491633957ac6be9384f20112db71ec1e2d846cf7567942899db21be67968b0b896c784b3172e7d98f20255438e434044fc76634d2ecae59a02bbf11417d0c08e9ce46eb14679e639444b7819d65f594606e895976b91a4bb0ff79e5b503c6b39359c617a731c598945787e45be2a4b72cce7192ec497acb30c868f48e427b6a233b0eb9087450ca4656ff068664515d94f52ad619605314d05f232848cdfc4d6483d9287adab09b06cb82ca27b56253ad8f04f3cfb7a66403f387da878a59044ee4f144197cab0cff956c8e732294287a10d6c081297655b29b2a022a4eb7420dca6d07c4b835040e229a1a042af752dbbe923f2dcb4a4c20c05546b4a823e3ec45e333d5ca35c9820e74cde2c90fd6c92e3cc70ff26896051c7bd0c6b0472580f4c9044fc686716e917cbbb942a3bc04ae041544587350157d79b295d49b5f2c2d05adddb7d9acc90f5c4a8f09b408a1abcd401dafce97b29b64ba1bbb446656836955a59c912f99f8e180afa84ee9e3abf6e02c0411fc94204b9caf5a840ef083fcc61c07b1998a4065621901c959ced8d4ece4a13e015abaff3e3b802cdc795468edbbc90678485f89798b8b703626af11e938edd1fdf18c6e96875a3fd0deda8e571410b6aa13a5f693dcd2c71cee514a49223ab95dd5b0d40555c3f9cbfecd777543ad497ce0b5468406c082d54457fd17b02392027a406acaceb8831ff8b6ab509809f99d2c4d6db76e7eb8a225261cb51d80de6417c0624159113f64e2b5de57b6ac9174ceecb279f0450e76a5a24a8ea29f12d2506436c89a14e96e9502d8e99b730e0183d4d5334503b90ee56360d83ccda07f786fea347d9676a000581334da699afe7266910ffa651e2f3d9f02116f26a8b813c8f321773679cf6a538d96038991a23d3cad237a4b6ad4fcd0e8a0ed2435e1c9aa679dc53b138ef70513fd0a75db03c4d26b0d137ed8a13e91a08673ab01293afcc6c80ee946965b83cc53b07d6cd12374d31a15c8505c5bf5cb27cfc9306d6613fe388d0c48833fe0b075d8cc3987f2ce9d05cebf58ea885e73bd40342439f01ecd4052320a40765090c46573c7e6699670d3bd180336f61e153df22a2a4b132b33e8f270066814db8d18fbf599cbe6bbf8e6f9cc092738b8a671dac9b29ae2e6c5588bd39afdf02ba11067721f6b70bf53d4d86ea944ef63c4cdbb3ba040e78cb6e7db01dd366a90441f7e22c6aac3401b3fa3f35ff9f57a70d02f41ec8f11890c5fe80de80017e298074da6a80e638c62edb399d7b39b28decfeca1da4e4ab581bb5a9bd38b032378eb70a548869feae1f7a2abeba9eb53ca4743a8de277457a86854542a094754219cf53530213d886c9894e446c0b8e58fb2c8ea4455739898411201e0c2dc76c666fdb62cfd835021bace20f41f4d17d8f6b6a9a150e7442e5f890ef7492224919ffe1f248baa1d7e1522572d21f613767f667c9a3d8e11f07d3640c98309ef77e9e92fc3b4284d42d7fbdfcfed401a95d8159ed8bb22c59a0532440dfc79f90b1a48bf2c361e5b11092e4ed815625044730de717cde6ad1c16c47de0564bffa473eac5d1be077a78ed9b78e82b600c86f5c1bf2ce73b56c49b6ab2a7d9714d5fe819d18330e8e82d7702654c4fa3cca1dddd5b7ab38670a5cc40938dfe8b39c71e1486e5be944253a2dc2443df743ab6eb1343554b22f184c51c0150e6bf8a6c64396562cde78fd4f7d395302439da877985507294b9e29db02b2f85a230aea1802535c4eaaac5da697bd6777a682658523d08a9303d4fd1d50a547af00ac9c9408d55ba4098bf010141518aa91b09cfee250563768d3edbb9fa973ecf57431a6dc6f6cc2953914aae63c923dd184c6a9da5e9b20082b066d08ccf001cd313ff97ca17ed945fa1f7cbbd933db5573f9a5edcb53c7cb467fba93218f169e7fdb007c14d113cbd37c747b08392cc0a57ccec44835bb2be213f004f621a818beab1e30063936a421cc5132243a040dad106db7bc358482d175395cd6dadf3cdd964487d22893f1a0c120eedd614000c37aaedd5cc61c8243fac40055dfc478ccdc1e0a0d395cbfe4be8ee57fedbd49da6514b62e72d8471e10c03d54e43e92d6fb8c42e3caa3b750c9190388b26bad52a57a28950561e9b2e5e0a5124c679c863baf9c5ce6ec492cc2cb22f26ffadf8135d2c88d873d0cb4bc711e6aa655160a8499372482eb75e84453b0d54ca9e066b4c06d71df2314c655bd770e7d56d63927eb659e1e21a84b88621de16b6455b791894b9359b2ee17dc3276254d603c6a41e1a55990740660c1c25b167ffba7482b77e156f33fb1b46c65b2c975e3492a8b593acd6a997585e64ade1f117a670f038f9450783e20b1747b792482c8b8a3b2c5f2ec80c664104d70024b6f4265eb01750b596e7f7c2092460b24def4a1595073f217cdb607541781c486a96c1d6a586d8a1a4e868b312bbcbab1bf5fcc4d9ded0c0fa7d2f130f37a59254c7fd8f23a9b1bd1f03f581c27896c1b3c0dd5bd3c77bd0cfbeb5e2071a639e0d6c3dbbe506dc176178e52b2ee0068d8e9dbb4170901fc35ac9b91db95120636cd26ace1b0895a5eea8e99dfd15580604015548e38fd6b876ccb88353956a451bc547d00a4c15c05ac63a772eb500ee855bad61b8f7aadbc24a9a005c3cac459fb88de7f03766a02f051a71f8b659b5a44823c4990702fdc227097f458bda2a588b4d3d2c630298e9045c13b6f5ad69b760da983b56d4d9f0dd609191ff670c4eeac98b41e5702684cf4a1b95a3887b5001218656aa3f0121755cbad47189605262b1019ada54bd926d942a9bca502d95775ba145e6e3aa3f7856c4cdb8a04a9497d0715bb338a40a2e2aef509a923154da121576c28e741a16a3bc59fdc53c06ba61725d00a6db691770dc61c378566c8d5feb4f4ef30bf0a51aa23dcb2e9fbea2eeb16673ad266d0fefb68f48d4963943056ae17df4ad71537348d2438f87098a8b7f68ca2bebd4784362794bae1a0807ab30a2d863c11f53c3b3b51ef219740fc54aee56453bce1958fca1fa15c8373282cd88ab08b3f9787ed572a4ecb0c780a87add98d95eb57fbe1906fc4a01f4c1c13571ae53e6f2df7e86d5841dc087dffad1d4466a98ed264ad4ff8366560e1fb729ef909a94db290d53c572dd2d5b4327472e8b5302a426e7eac2afd940fb0aa8d64bcc2f73a25c1391d8091a77caf71dde7dadf4ac80159b24e32f69e626057fd9680c7afaa9c6307f332616f22271744be9f48458b62bb9fa23f37aba0a9b6962e6f7124d91b98654748527bee08da6afa9052feb232ffd144178f524e99782b48a72eaec771e47122c37d80b6230011758aeb636a610b030de7dd05c8b105ce30c70076e6705d55eaa2c5d01e2a80a7320da5d6ed096eca64c7e282c4fc7cc417acbcc608ac7ba829140ab6e7e79545700de4e0c75341f68684545ec9f93e96188ed9195af4981bbeec83196981f7fd420a05054b123fb31d505a50f38b6dc3a22524458ef3be92abd0573fa14f7832a971a109c70e7717ee05e7f8a28920a7c36384fb86372b9390872c72101d273ac4c621819e2792b71ca06828e864bf3b5c450d72078b46edea5160417af276766bb984ddc30976b0023aae342473fafcfc1e2c3d97590d0a1c7986e07c622556146e02f35012afc8bd4c6627bd84c9178ac151c19163019481d94f9d83c561610377b28931ce133913487f151f8b3fc93a6c72969b6c2720b06a02ccd955b2e065952a7f4d9c68dd759ac2acb4de9d6e4a34da4000b89e3a6ce95a66c84ad36460d1d2c79c90436aed9c0e1052d52cb41d5750bd4948d7cd11542e3a4ec6fc04ae185961a977955a1b239e25eba48219f119d8455a521194e7535e2f2c544695abfe5e810cdfaa8660b98c019f8c9f256938e2985c2f5d510ad88ce75718dbb113cf19cb57d6490b9c4cbbc32712e02132a2be40057ae29f4e00cd5eaa9e4aa2ea568966535ed25dd58cafc1c0ec67110f4485f747aaed69f56792114c45a1636ff59ca5e3636fa2aa364be6af0031c6da15bd3dcf5a43f9b10e671aecae0fc5f7959471c166c4f752c383bc046b9fc239c6178252ceb5cf3a3f36378e2da9901b4d3cea13b1f1a33e19f03de72cef7a6383752e730db545527a0219eda03f6ca784b2c31941d216249e3dc70602e3a129acab4c6ca17a842cb230035b072d451c633b2899a0ed2dfe02b97075dd4a2a0f34b014e82e7d55e9c507cf9ac1912d0f14bc2cf3ccd674130942fc8c29820f80c09c9786128c287aab1f83ad3f79263a24562ce3399390e14f6333b00307c60400415e8fd39538d5d6752af734bbf1586ccd09600ad3fd0081e8053b99ca97203fd7eb7163abb169616e730c565d9c1a56c88149e8215e6e4b726f2526891e480831f06645f3ad71288f9d3666cfbdbcecaed1218c362a9d8085a99ce3bc2150c528687e1b47050db0017e75aa19c86023893f712f8450f8ec23a4c7d9b40b0d1e9e018cd747dfbad81324923ecedb2da1efc462fab0712d053b301eb9f6b914744dab71a6dbfd1c49ce6ed09f2d4a593ec5581c3a49f700b349f52a3e7104f24f29b4f0bdbdfee82c4b5380f66fa81130202e6c14628a2b4bfc21cbd7d4c860022dbd54c7210012e3ee9743ad92f4cae7b611ff2deec9a442b3c96a2a0869fd2215343a99bd1af9a413eb150f34f10daf7513a92b16c8b0785e76d492a243478283c414930cc8bc2c3584d9c2306246441147d2d706ab9611bfd89900706999e6b25c2700c469096cabe5c181b0be65e02e71717452b10352333ff3cf2ce79037fdc8c641200027ec0af11389ba0e3a35e761c89ad4259205e7e7ec30c0b2dad090492b531869eed73c14481bfaa91af840757712aa26b39e1b504aee31ed01c0a6d285f121ea8108a601314feca1cf0652342b8d42e462b1a8ad0fb5146f190c9cb909878b87f68776ce95a5fce7c4e8d07d13b8c9d4c57966495397a9c9f96622a73144e1d0ad83387f02173585cc9c137ce59a804f85d8aca9c58caffde53e68c83dc0204106b83943910c38d2873e0cdee042873c09b11770d4e7332a7dbaec99c70e7e284af02bb99fe56535ad7f9ddadc0644eee6aefc7b21de3f1d6dbc45ebd141eab2773e2e33bf308a29ee486e8e5cca12ca067246773191313dd96c6e87045e6203af1fcd5905990f2d5e5d816217302cedcfea30699f33dc717aaea254deb21530fd83d8b12c89c59a94a822ba499431f5c053f3d93894eceb1347d2e41bd2d4735892d220036fe74584ea0ed4edb98d3a03fa3da73d956a6c29249ee82ead66e9da5bc31678e4efc1b692dc5e70f957ecce1925e391289487aebbd7db1e3f6318749a5cc613dabf26d6871ea14c10f4b47026532451969cbad7accc9a755c63f0e1dc3b85c8909f1336d71063ce63cd82f18e7123b46278e0a5366c174cf71dc08640e177307469e59943b18b39535ed19014b9d3107f0bdc097a5a45aec8593fb0c003e39d27ee3145c5e20ba5afc31d4c4b062ceb1c03a06feaf5f127354841d71ee368ed39fc4a95378f8717b07c51c49bc7b825a23e62c8b47e42bc59c32d2630ee9633628a4a53027ab4115ae5583efff823f701b42441080620e1f3139dc27e6f0e800e07ca5a27693c41cd0c7fe10134272eeed0d7236c0fdf9045128c966e1cba49939714025e47e1235af8b39a85e44ae0046c76708f11314146eb79b806917c67b5ba6edd8ccbd799c501daead661b12e60dd289d8de99072686ef53b76a2e8df959ade8e2e4b5b3b6b981b99aecc0e426489fe681f04e4d521d6cea7df27048b45f56b7da9f83020983f27ce0c5c4802bb8a2fb5f3a0bda04701767a9903d9ddfa20abd6f89d917530fcc3e761f03179aee0d15517f3b36882b684cd107c318554123bc2c1853c9e32667c287908472f5d46bef9d7429fee202a98aa05e6f126274e42ef920869a9fd492d6dab199b72279eb7777f2c2b8dc0e34b0bf8fdbb8997defa13a3aff66e2020a0f67e307794e0028e13a1bff1b8ded28777d2468c8f8623bc246579074ff598974ba53e205a4f3dd745d3d414139eb5fdacf37879ba084d5044b50586d548113d9aaef095242cb621b49a61323ff0f057ed19681fc78edbe906d654942fb1a71e97f0d785c6240f46638c6c51bffe9c18fb12acf930d4a7f0eff079eb80e2126b9b013ef38e8d87552eba0116e981eef355e456aece611347ef167a7f097ce5a607dcbd938e19ae63e5815bdb73e396b5294534720ef4a244559097945d35348d9b4c35eb13380728c2619eea407b0cf7284e160ecb26359cf47a763d0a762f034548bbef3cbcd4afc59d8aa5d8631d6656a5172871943c1b69e6ac6f21856dfc485438dc64aab396cd675d29fbc4e875b6aac34c4ef5404b365ba1562213e4879cce46a82e25afd441eb860c215ab967b3d5558141bc92d2b17b061c0320fa39e7b36b63ea6ac4d8fca37a36d8f05cb9c33f09251c069c89625a446e584e4f1fe0660011e74fd41e0451be723f0a4d62f6db5c3c0823c53f0f4e2226411cce7ed21d70246d3431f71027e500765a213fa3a0635d09e90616013d78987a710aa6d90186421f0707488182cb8e381d5481b2a606a1726e25ea9e5d35e9f59bdfe3a371547426d9282391930f5199dde0711fcd0959247caa7e99cc1b4f14d6188c0e8948b487f9f35079241c6d6675de31504c2a0ce46ee632a1585b3ed298c5b683aeb96db1cc0dca68645158e168641284e3e560a3ee215d8c083db4bf24afcc10054adf680a0f226373053074c0e270df43b0eea2908d6f9a0496f0697aebb586bbe10e5a32c836b84bb846776ca9ff5744fe25bb387b62f1d263bacb155e9cb45ab4811cf54617b1f31028fc04c6d56e63d5720073e63c0ff252740c064e1e438dcdd25fbf13daaa751403b4812a7cb7c566a328ad55620fe024fb02d7ddcee7af6335794f9d638866927f689d6d74f824126b4c80969c422b2cb4732e1e88a0f646203ecc78718662edf80e3e16d9d0d9e4c61fae5f4d04fe9bada343e766bc1096278cc76bde57b6a984f0db8230fed89fdd14d70a46cf584825b818ab7c6267829c4c4d18d71d98ee9956ba607d94831d0ed12513778fb299889e932d3b8a5ce1caa066bd76995b396da479eaa3b462f892a7e7846d727f2d050b3b8fd737ad1d48bdbd6737189433393da36b4c4556dae8a7e44e45d68e7eb6d5053ef7be5e10a8123ec37ec650f650f13705031c36f79de7261ebc0d2ba2b00598cf2ded0d4f646d119e37be9ff53579ca9df59be3d1413a0d9613f5908c217b7b427e23a35670d8d150f5250a06776ef6d0b112b07fe4b9d7489b6cf47b812497858f25468a050e3ce5867cccc24e3182abd59c436953ce4345ef4e766376491a558e1bcc981b77e20d3e01da7f763f2ca26861f2ab999ec06ac0951bca586c25e154464bdb1d80ef02cd0192b7004cdf4208c9043f31dbddef45930e4b25c672fda5b6b722120cf8187f9db40daec2be89a18930fa509a22541a3ab34263031e6a46aac620b759a8888e793848ef2c6ed4fb893c92e23f2cb68310bc7f8b04c734f7d1f2a14e64766df7b3b5f95e7442470c03614268a31e6ccae94694bc2ce3c475707f3ffe1a4268bede15fe9321c585557fd7d693553249256b05575664d1fa1664bec6015b2e7f55151537163f1b8274345c00edae499ad4c26fe951683a4d503d6ae7bbee6c0b6b0a0c649dfac51764b68b970dcd01723424ac21b1db4ecb22009a704e89a03f462869bb2947e27d8791e14e9cf35ad2a8191d7068dddf0987a204c0c907035d224cb2e875df5bc121c2882c8570a1957d96ffcc5a1b55dc636a14761956b9c20f9cd2bbb9b7bec93432e699ca030849ab806e4651bd85200826d587d04024f98e12806d40363ee5904741c18fadae0ac53df9ae2ada49a8228de52c265146d35eb5be0102a75266d65374109c893a77bf8f087bf6b534ac0992a5a9c41414c51cf912abb1618ca37f3563cb8ab6f71f3616a16bd51491f9e268414ccccf3428ec8660c061bdffaa33d7b8d02c413a45d0de806f33d3ef48db58a8d1dd2d8860a0e427a8872a96f62f2a1697cd4f36f98be8803d5cd5d1a74130b664a588d0d0f399d1671575fdc10f08e77bb64ba440b3fb1cc60a4f36af713329c4d36820036f5ddb23687e4427d693e1bd6b7bcaa47c79b17dad4d4492a0425645261ee62c35cdcbb17e5ef4618e214ab376d0e4443b8f075dc03907bd26716f0133a5228136c804a46eacec7df468f9e964f557b6b324d0552ae0304b2a79e2c0632f273a3f4c36f23877b2036f110d53924d032b21430e840705c3828e58cacfbb995d5c87cfcf2de1124a08ac77308dfaf844ddb5b9a8f8880e13a9ec4d9380d8005d0026e3bc0309e44815d4ffde22a368780fad74b2829916354318a5df2b403d8aacb9316eada0100fadf86a60244134e6584a2e92b6a8c0c6a90ea2ce6bd2e35e07612e1ebfb6fd6abfb39ab45fe4889280a41a99b68dabecdc73c2e9f0a959d918efb3744faf23a196624e147ac318df76e330608f99669c9303ca7a6ea32d82ac8464909debd69319b0ba39281c9701f153105d40aedc42a0178955394316feebbf03e315d5f063402cdd4af845ec1356a2c30835a7d83f3e96d9d847322f331d5fd3f00023b0110ef16970585225bf9920ddcdda2875c74de5159f9ff1964289b057910acc4301f260571c6e36de7c55624fda7a6fb751cf3e9ffc88ecd8e7119d6acc80caba373450cabc2c292b330dba7aa3853cd83c6f1527f1860f76f0c060d7633bb02829a6dde012fa469a2095619f887bb4a8bfdbaa9ec013bb18393b2af178cc6aa5deb236fb35d2d7efbf8144eeba7a1ad7ae2b10a318304ad91a6b7eb98e619975faf9973f09a8640748524ef2292dccb0b962c8a8749a7fe2c5cfe17c87cf185392b120850cec81078071c885c40d8e309aad1ff5efa99d8b813842e7a77174ce50f9b081bccacfe69739c132cd054ecb4a89a00b1a2e307c5cd826d0e8064e089bee9ad4a5d1a64197992d0c48519cb6002a70dae8bebe7275c3345e54f39e124dac108d5d0a593e5e45ecdffefe499a67f4b8c30e9e90ad2cb05213f476664f6c79bc5a8d403f5d227732698bab5e16814bd0cf45041cb297af9ffa7269bfe0893f255d8f82e112df62fedb8aa3e39442394efd0bacb68fb2819770a0950a69db33fff82db1ed404457c6820b40195a15f018321c75f0734cde670f94cb03e4d95d338c9230b08e966b46f1aeba360c4051da5b132b3d0cc193af8827a7a628b45a3b2a3832058d3c5c570ada1dbfc70d13d1471abe1d9852ac7ef3ef01a21d2294a5603fbe905e644ad885a1bd0da3068aa48258eb3a98f7dda3af6a9baff429467bb4e5debc330f94d02ae29e78e59006782f316615d354ccc39f41c12f2db6c500b5185298ed763fbde706bf907d1e8fa3896276fae92951ff6148a8e48124944636627922aaa77d9ba7f4e0b51757c2effd68c3e3757d51adc2e1a3a954b15544f7745c45db4deee660c0becf4529f0bf4234420fa227c1417a5b931843f449f6abe290cccf1de486161a38f19fe8c4d036633d260d7691aaa78618b21d43fbdb204503675149a1adf0f042ca3014c385c7cfeb2bb9d07fcd2039cc88e18a6be3358624ca7fb4ee64fc95dd5d2824639cd6e68cb40aea34ef7b556ff181587a83b73e5c2b77a85d14c1006086d7de5cbc5aaa2b049c833b187d81483b2e19e019dba93de195078e9521d3a656ef4ee4641e519829796ad777f3f05a535d4c204fd58e5560ca6dfa7056f955257c887a1d13696c1c494d721ae75ce01f6f3eb25c77fe8c11bb74cbeafcf24410a4a79f86af2706d3aa40a436c218c312900602e2d0584bc3a523ce548a53cc11d38b2b6c4c85e77697f732c938f1cba79ecd41ce463450c1af6d61a1b99d47448d9e9b8480b9171e3dd3488b1b7facc00b05e0f002b9a68c05e12447740a4962e1b06966a616811383567d64218edf59f33da8d8af018dd5aa361063362c5c2d319b47f646666dd5aea4ac9a7b7be190619af5309f3a8cd8760eaef73cbcfb056db834a8245f860c0faaf502919a5bee0af271801b48f0328f41c5fbfe0badb4f1eee453c75f62778f61a09cb2a230d9d15e713c78cb3cc3a970bcf4701c7b95e16f58835a03867c51f4c92f38842a737742336bf39cd02b7c95e84f9893d7ecbf6e8bf392f29b3c837b1171193bb24601c68d9a3dbdf48030793250d3b060ec44af7583807e3b0496ab23585c633cf272c219ec4955982dabfd9bac33405c15581459706e10776b7ff3230be5225071406ca01f31560eb7ccecf34f2ef160adacdfc2122aca4a95e1a9ddf041495860df618e5677f4263e9a5de5ea942c0f7d81be4f81c46bf23c5ee6983efae0d56ca1aa297d9d4a96d77ac7102c58785dd5b2380a040c53a6741db51f1b5aa17472feff43b0057e14958b6961dd773f337833bd5ae013b7ca9f057506082207acedeef99e420cdab5ebe8b0db6da488f30284b0c357e73097ac5aec1fc0b29d4975b9b28c502542493e4e5d11d17bb34d5e8afc2d2e4b7d2c3ab30179ab5c5aae9e2716adbff2db2e98a9b8af7e827b4b62dc4f5ffc0cd53c4b7701a29c5fd2731be8578d732a776c643148c046d33d0bf5b52a4b224935be6cc42561add060c910915800cf19d64f6f8219f589ac80f915a929d90b990b8a364f77b366e55eb01d0bb674a2df8a0abb3ea3835557633fd94071a6dd9fe4f4513e8f614920f36ea9347d8b04f9181a27852926e922c6e3a8a25fb2b8a1386cbf190416444eb7bcf683fc64d9211d5a018f5a40a12cd128813d20d95ead5fade2499a342de3741d51f4f14c60ee921873538a985d286fa1abe7e107972f109a75286480d595fe3e414ba30a11e7d3035f6e6fb72113770a1bc383a3fe89581b4cd976d3627179d5ff56c5459751b298338a4f833f4562af435c1c49eb07c7f37b05b84b385593bf11b1f3ca1f34f09737fa1c22043f651270f2fadbc6dc26660b68f92bf8f686d8c58f7a7e295b9a20e7b8b2f6a105baeb5efa1b0bb26300cca4672ba9e894104b3085b0fe0fc96cdb39786f8d5c9bad716007f4ed5806b0c62ec0f0583ac949bee33b860785e0559889388058b64e08db9500aae8b9d6481de490b210a6454094b1500f99496296dfc240d0561bd78a4293e0bb54981dc1559d09f00249566e75945a81d425ecaa5e7fca4197fbb829d0009fb525c049bd2f321b04dd400fc35c71555cee58c4051350473cae6587dd3083c75e93f884cd1529eee2d81e24377b2ec6d08c0ae725899bd0314fb3d5cd0485c8f7213639c8587e86a4c413f67cb95570b705209f38fd3008b4450b943cd7dbbe11a496965c2ec370b64fbae0ca8fdd8b2a4b966ad8b87465fe15e8f5a2702dda00685cb8d0376c36064c9bcb964611c3681a7ac6620023d0046ed8bc5a07a4deaf9e60ba03e2027129e76c6aafd867d6b8cb64355dca0208466c1962bfd9babff904b2d060009f23324c27572f3198bd83cbe73fb184ee3b5d2935caaa80440e7ce2f948ce84a4f51bcd1677be7e0674a07eba5cd531ca20c00cf89af2805a8cd9ce4c9c839a3c0d304000cc3c5c46cde020400cece4fb1cd5e528ed7d5ec8514dfcd0ee140b6e9b208b56d4f3507b3d72e5b1d8251cba47c4e30dc00809d1f79341386ae48d16fbdbff29fd83905370cc9952664bcf279e721c1c26db3031307020d05376636a0bb8eb2820e139f12bba12f57d22513323771d067687d7b292ee6a7d9d91014a700061c60960a54c7449df62fb34897736eeedd3b68c87d5594eb81d54ac2d63de9de90cb27a140fd83f0041d8b7f05d706588b16417973da6491a0f379806e81bd6bd37d957124c9a04708bbcfb61c3eccc9e7c4cdf169403684c1299c403810a2167eec24eb1cbbefd110fb7a3bc783aa9564ad07cfb991575d4021e53981b8fb97eaaf9ee3c635599422bd9ba00b7040a452c069f89036dae791057cb0dc361aa0ecc64b7bfd73da9ebe9f098804af26b01dccd6a4ed4dceb10debbc2af72603270ad49842b4162782c0de0ab1bcf45c90e5e465a0956f50fefffdf559ebc6ef8df3bc161727686d451571365567427d86d221067b14c71b11fbd7b07c8962743adebe17af2414f9c8aaad6c298dd8ff5c7f10ed54c444991d389e652f08fa704816d3fda574cee9cbd2cfd3c4d0d3e2de8371d305e556c2d0ffe9a1f9b2786950e53acf90839ecabc633228a7674663c542c4f69f89cb9a87dd53469be62fae4e11c9428db8b4a53e3545ff2b6462fbdf666eddcaa03c8988674b2f42d986482d1247c1ac0334daa22eba1b905edaeb71aef2050fa481f8dd58636e605618800d69c0a8074645a1a283525833c3a21531b09ab398155922046ca8dcac0ff198a816042c04c563c5c60f1b0dbe4db9dfbc99a9964d2dcaeb737c5878f42b5e97aaee4cb82319d8da35a28dbe0a232fc30fc17a8dde728471e921c5b8d98cffe2c3d6ce49134da6ff2f23d763cfab8b5d293c8f1a2db4df2fda6f1ac154894d8f5e6a8144e83963be83fc6e0065759ce919409e734df8f075b549a188ed8414b3840211a9398271d78c399fa761011ccd0dc44959029799aa342ca2ab1901024271956eb36a8df25a4ed28ad53375cc0f4adb3053128057cf185623eb2d31da7fd3886b70dfb95e838c612178d6121fc1445490d7bcb05a21a1459e6a266639636b83c514618ac88a3c8bd6c8f5837f543a79592025d3b476301bbc927c941985d720f6bfca59e078a682e7e794bdadd77408cd0ddc01930a0b4b2d8722dbdb8f5b3643f608f29aed55e54982a9739450c138cdbea7cdf7dcc53a94c73b506ab31ae34d32d198a1855aa3a28ab55623886147921ce22fffec6d68269a8abc1f87eed4c639a2ecf1b40a98426cb5f906b94cd7c69a89f94fc51d305a8833fe98942e020ae1b5158a33e8863d53ebf13eda649928ab765531e5dd43ae847af95ee5f669eabb11b9a9adf3a20cc5b81b34c0fa57b7c251caa0a9668c81f2d3fa65f908735a801ac272b08d34caee62cf8bc0846b942d2b5aae0bef9dba1ba9b3875afe3e030902b498c6a2da257eba344a0d72c36965b3e27ac92b087dea011e020c0cdab5ecae1e119dfb0a4d908145dd5d3742b1bcb7826482150da995ffac846a9cc586bd81be4dd245de7a44225512f9d8f611a4f0a7ce08118e4d1dc925d4e83212d5995861b5f1d1d3b49ccb75dccc1a9b1121a6da628d6c4ca877b1f3cee155bce0545598f11fa4f90db53b447d2329b0d2382cb45c6e12e0557e7772317a008a4e355250bdfe46fbe4bdc913624b5771eb03aab63ce00e4b57fd9d52e92c7a86e1294dea45a65e17d70963e9c2d458695da8952ec9a98d62fdab412b92cb209a09cda92c9b9f58ab837b9a82153d56cb84b478291bd83925a20ca977b5fc4e8f0f118bf8196b90814ca94d1d0ac20d322ab4e441db6eea1d5983627130c7bbe56057c3e1037d106e2cb5408760919c3ace447f43fd29cc293732a6ee80ccf2cbe1e29bc412f38d3b4b7ffac4756bf0f923d6a44428b8ba7aef910831b0ce25080101cf152036e2ac98cf1227cbce52e9a970a82ac8c3088ca813f904e516c397e3717dc2c6e898436c277bfc037e8f406c8cbf6c88a75c5fa82f071fc17e0cb1ce474830149f37023c8c9bb416e034caedc9337e2514dcac3d14c9750ba321835df097f2c5518390f0b21e17b8e9a18ae25f47c06a5841aff814f76ba4076c4ff83f2c45d2fc03810fca06c10d99900e7c79a988b30fc66323cfcd6e51570151847957801023e4ec07ed6824fabb2193540e880235604f65ceeb04f4bc1adb3e7c5cc3c57b432f3e752ca30635d1fcc8b28aec45b62259bf70eac0e044b9cc76519cf9347738625a80e6a0cbbedc5d2d2e89138f4cebf86a7cd0ed407de5b62e1ececfa59cff01b68162b57b071556b03cb0e3132cc1573383142de245f384b058f59c9d91ae8bdcf6f5c5d21ddf2e9032ee889a252d446ee83f90e6df7c9c55e9b31af9aff352ccc81533e423641d70bf99c7b152fb0964b6be5bd2e4221f41c5d930b4ee59399f3d6006bf603b4d493e025108219ebfb0be343b2133ff24830c7218f908fea6c1581fdb1fc6496e576971de38d69898fc6aee76e47cd78141e6eddf9ec98fbdc94742214c2bebc2c736af05dd6bcdab7b843cfa05c4804f65c256f4a341ec527439ffa3067329dd071734f08505d5892110f04d6876ca77c3421d67d01cd730748708cc140344a1570479231728ecfa0c2ace67e08de94715dea44c87d40c9dd55b47449f01da2f05445940cca4d50669151130e745848045711245e220a63c410500c00dbe81447932114c6778168de8bbcc9d9a01a905593b77cfdc50fb023bf95e9cf57f070ec4a11226aabffe0827566593247154914ff2caa095bdb425b74c29a547046804bf035d733f5e6f5f088395b6e99797361ff58c27f5f92eb01d7477e99ced8bb55d5b85bed66825e7d87e7a4fc243629d183dd0cab99274b8887a62ae12371ef87c508bec0b61b054235d6d5d67605d584deacf7157128cb82ba8cb668e8b0d4db26bc13a9bb8828c2857d2e722fadaa32a57d0e62ac187b6a2e0c45b693d2f4fe3969c8c4c194556e99071cb2165498e7c9b32698fb5c25afbce6565d79e2fcb344db6c8faf35d5887955bcb9fe3ad1a1f06415f6f655f3c70d38ad35afbc220565b06a84eb1ba649ffef2bbe4782bede7782bcad73e0b20f69a8bbf88e2ad2faca62f3481fc1c6f157df2e7780bc6477f8eb7843ae06299708b7392a88cd9d82101254859356a72bae290c65f26fdb24c72a3acd6648c3d5fcfc7f67c6c4f6b9ff4aebbc7754fc8f2dfdb1678cf9b93653aee1de9d5193e9ee44e9de928aa9a3b889669de2d1d8a4076305b75fdac76a073507b9d83ea0c3af25709cd2f6ed83aa6a6dee9b6c0df0b1760f206f9c2cb0719bef6eed52a8481911981da4fd948a1f0b9592f321a622b1258982cdc4a02095a471e6c97d5d17763ace7cfb1558c7f614c5d465891f8e7cf71d5dc17fa389c994773937ce4a9debb477aa1d6a37ecd91ef1209ae68dd280ad098b88a2d2dae4203c0e85eb94457ca3542c3074ac81859599d52c74100a21a1526a06c8d90f580ecb307dc2363325cbf807d4833d70daea30fa9eb24d3db800515939eebf4e21bc610c1c2864e8e361197e1e46022d882618ea2002a69bca10f7808ec65053e9a724283a12e520376c0502b9b0181b3913ea57550bdc55a48428248e52b24a69e2b34a11a29253a9211da542ed3018fc1e490a5f90de36032336932012555a763e8468e31205b3b2caea05832f57b3f32528389bc0c81600c86564f75703af469cb5d3a4818eca40d8601570080e139d45839acc40a7898e57c0ff800432b52841c4132c0500a1e83f57000c3fc667e60a2ab08511714dd89055584a4b68342a8f87bbf512367b1d1d06b4ab293a025395e8cb00306d3511ba8b802b70c6558c143706fa84928c2172c0cb788e82c06056652021f81f7575c42b9c305d8c0194c0311fe51b594e0b00a1c333463b20657b5672c437d35832e5f156098806199bf80e4aed07cb1fd60e36349527ec8ad15b999ea3abb5191d315780a3caec39b241e5843d169173f9e6ee668602d85bd6839bbe2c93a1ad6f05175a41715056098eb748abcf504eb1a1eb039c4304c83359a188c80219222b808ef1830cc6098a5729436a291642fb61b6e3b709e3382290cb9f45bcf10152f2748c0a0d48ac021c170211426d76d202d8175cc4199066205c5e24590af20a013f4a0d2428b080a1e2aa844f41a454f9ae0de7b37c7de7bef47170ce7f25985fce4070e8c0e7b9670c09a049550cf5f7a04194c80219c04868373d584a18c6e227b3549922449a6258d924670ede3e849722ae8936427fa2449f67a7ff4bd9ee7516a70866159b49f7e91260e4b504aa29b7039c1583095cbb001b909d043aaca53cfd44c6bc0e24b163548afd8499f3cf3dcd7beecf9eaab7d5a9e1ff25ccfef66ea9b9aedee774e6aa633640e29da4e32813b35e3c50a4fc6ed85ab90fd5ba8e16bd09de96fcf6e61303fa1fae711eee7b7226735e5b1e89f660c5beb1132968c4cdb8e8a4c54d62eac2713459cb0241355e6f031a12f455101510d4d889189327d3eff3665e7f4f2f2d696f3a676f36686e3f3f9e05bd69437a918226f4e9d1cf9bbae3eeffb397e3b2243b3cbcaae3d5f5996ec11feb602687deb2147bed7d5e7ddac7c619044727bd339ddca80766e477a4c566bed3fc76e546e4c27dc6e9c709391e3f6e2c64d0509b71f1cb71e9b11039fcf07d7e69eb03d09bb414dbff3e66bbe260f660c20cce43f937f3067a07d6633b0f3a637df1498d9bfbc94eccb0bcbfeacd39f7ed2afbe78ed9e14618720373781c6c1d9c0f83b8642f53708dfdfda87d03a04283950828a19eb030ce40b10e018f02c86f5810634c87c90010d6c801d7f8cefe778cdecf39fe335245fe8fb3c5dbf85ab5a1b4fec1b930b6484568a115b020c2115aed29a8f7bb476d32ecdb14d70646b6d5592b92fd6c7152b25cacd21c1b5e19176c452c96897b07051a8fdb823a8e1b042e8cca428614371d6ee08f391c556c5ed91212d091f2c151c6c12a216432750b837693a2d591a4d1b45c5cdd1c63a2961af8c5d69b934a462226c10202d9d0e1d35dc122f5aa5207609131e1706939af6491536cb8dadc204a76c8c0b0655bbc2a92d5a728b769c2802835d1d29d8ab2525b496d8b47072ad1414564dcd25519ce1c53ab17293a05a2a425228b1563790c468cb56c85062c21d524222c915362dca5b1317c96c04185b87d5fa18714b28c1460f2648ee8f196d8e16ad17da0997085a8e5b53c72299e2c44911ad1d8ab55c475826a23ba449ee471b96a3050d56898bf60cc8c4d90e3be44cc48db856c813976989ab4336b7c5ae4db5318ab42282b82424b9426cb06c439689503bc3aca7c96c046b66a57d739bd25c154886ba7054813db5344c5546c061d40281e12ea9609792f8b43592dcb451e6dc1e706e90b5a9246d93afb6e68a6d8b724790d0a2f1b0398292c18305cb55fc69818a383de8582b525ae2ba631baebb33373197488b2d9b6a4b38b526985c174aecd751db0caaa1f60ad010243cec199211ed8d9c8b0337d584c519db43ac85a2a536c5129d5a24a6b64b891d3b62e319ee8b211da09684321ea8b211ae0cb93607ae756ae2f69cb1526240b45aaba9284e6e0d26364e29eaa88419ecd6501b04c443c6c386918dc892c38223d2a4fd712626e6f2d06a6f4cb13f9c5c23a6f64769e7c8f599d14e19720362a18cf1b441c6461cc9b145b896ad89fb73468218eba5c53e4dc539b92998da224aed0847ee8a19ac91a1d605904b23c653446cc41339d7071c5d9376eb8c15137345687d4db5444e494c3b945aa623776706db643587ea5613a827aca7150abb699fe858342a2e0b371a6a2c96d9177a2362bfb502b6f585de7b6fc660549ffb9173ce7d3183d86b0d67c7c94a98553f65119e2e8404e995d4337a11f570af153d5e3d01bbd7e7d15455dfdb164eafaa2a0755f5ba28ddf1d40b2c1e26466607495f02356c80c00e929af46edd3af280a757530d4218d497e5091343fa73e7fbdeed5eb3882af9edaca52fbd307d0962b07bdf6dcf550ee638ee763b9d5fcabdc4bdde7b7f207ddd67ae2f0483fcc2867dc1d66fee1eec20e9756e0a4e60e49cf3fcf636bf10b363627e36ab3015c6fcd257ea37af9ca758dd269efb8ae780c473363fc7725162b9786f1d5b19fbdbeb5f8af5a7b30ac795fbdd0442e8a435c757d23e2f77bef457be4a9d2104fd3fbad78c61dcebb610c2de01c9bfb6640ba6e75add79529d71d9bd1db4d9d50eb9c90265598ea54679aa4bb07f1942a973b0ff92f79fceaa033db54f617a9aeea0e937f05dcfeace1bf805e36eacca165ae41b5e82db6fb5c3f9a63bc8fbe87f352b7f531813b8fe44acc217be2bfdd83d063f021ee874737502f9bb9cfe343de937aff428a9c7cd2babfc7c61fac738aee88f7e1540d06a7a7586dc7af3b847b5da81fea5cf2f595aa19bf351e540922449fa92f4a5d7c06e9642d203f99ea13efb3db2f099fcf5ab7dd7beef7c0962377e48fff8a265c0a9ed83f64d2f4cff787a8df23c0a3c81421ecf6a05c6d1f35e9e1f3def2579bef37cf7bcd7dc411fe2a37ee755e0e937f0effb26700c81ea3dd6db4d23eff46aef9df4400fbba3bd939d54d14c969e54d557b87f3ee941ecaf55157d3d78555537da3dba7ff666d19ea7ceb078d58f796bad76208b3727a8eaee51b78beda1e745d87b97db973b485ddf72fb685df674a7f00acd9657b89a6fda4b7dafbf2efb95a960c2eee965a97a1616a156bd0514f4f6a83ab3cfddab60a772409b58802d400d1b7670dc7af7b0f8ee49a0f62b10f51b48b2a42459be5a2d35bf307ade8b7a307df73ccfe3bd2ebbf4ddb0fdb8aa40d5a7be9451d557f8c1578ec0a328eabbca0195d1b083a3cc1f7bc69ac04623c5e64f699af2f3a344814b5bf1d3bffaad06c5548a3195a2784a5c3c052ba69293a2f122cbce498bfa15eabddf749ff99f3b274dd1b685f31cb94755e0ea0380a22152b07d59dcbe04b155a0070a5e84bff384bdf584d36fd8a999ce507a2ddc16f84dc15bf00af7e7a17d5d010f2db7de7b97af079ea7e0b7de3d752b794e5ad4194eafa669fc547929daefbe7ccb9297bce4bd1ece0a4ab543a9cfbd29687ff2fceef9ee4bbef7f6ba78aa2ada89f64bbfaa2b05cf5bcb161eaf5cef0ae5f6db7b385fa14e7705ee79bc4b0bb86f7d791005a006ee24e0e6b16556edf79b9ae9b4f8f7aafd0460ea7705dc7716d56b16adb5ca62a633f4aeb93f539edfaaefa7af87d3975ef5c20fbecfd36a279c045066a3f7decd71c7d04ecd9893bab117bcab12d6c6621e562f6864a7a20d487e94b86a0225a9cad652891f2745863892d0a8644547bdf76e8ebddbfcbe83a3f0d1b2410d0ca448530a935a5a12e3c0188cacb5b41a675f26a6786336aadc30c9d41c92f81a8a42132a6e71d191b1287a21b55821355a895dc086939b1b595838aa9480d12111c10aa2da3e4f3dcc73b09ddf80e8886c734a3fd69c98558122036eed8ad4cf891e98114992244992a949fa985e524535b61ab3351b1ef92b6612446314c79555e2adfc59fbf23cac87e45c24e9f38fce27fdc8b9b689badfb59011e933e277afa2ec4544edebcccb85943614e43cc9798231f5f4d4b5813ac4126dbc7301793af03aba103640604682b99fbfb0044c7befadb5d67bebbdb70278c21045bba79f3bc854573f7bad7690a3dc7e563bc850d4f212213f7b247099dc12a63c8694c1cab255905c75f533185999151d6b5502bda532062061c00e49963c6107a818b9ca4a03ab1f84f2b37fcd7e35826f01b8b16a51f1a3c101844c8446c407b1bdfe5b9540efef571882ad11862714c190961416ca3ecaf673d7cf274f4802acf2ac0b7175866cf1f3cf3eab11e84126d7cf339c681cf9388e7ce47c1c39e7e338f2515bf1849ffff8d9b334fd8ce1e7376b0db22f5d300981aad33ea54053cfce990e40ee0bcdac4c040dae273538a0888d1d3db13d80a7ceec569f73ce83f429fc4ce459fbfd67220f9a8df9b24118d26424933c2e768c809032303231bf1e303c883d389f73ce397f851f6482bf1ebcdc3bc49d16733f1e439a8cf4180fac65df7947c427fd48dcf1f92499e3b609197448e4087322578716f4c488d9d70ed28cabb391499557ea9b4af98f96f8932499439d328ebe7124499f571075627c92d4f1f9bc9f893a34e812079d0a2a5b116a4234175b9dd1f42924394e641ca9399da9fd9088396e441cba751cc71f8e2e15c2860f165d705c318288385742a8f0b9ba8a7a71c4841cff998863a508ffc5707fb451f59892f6e4e6022e261fbaa835222edc4ee28d9516e24f86053f1371d07efa3311e72b06d18fe847f42b2292182392702b126fb07e367e46464abfcbbdb3879d9245ebdea38b357be1f89b81c1a5c3f6dd87309e6bc670fab1f4208830b6640ca81f813967e0bf0974c02f81eecf4ddf04e6ba5f025d3a70f0b7e780839f5592a320dae41047a4e866d9e3cf39e7afb0ff6a98dd08d106c626daace04c7b1c2b7cd2ef38b32e5f90bf90a5438d5bffb5582b7ce0eb34ade0e3c742c54fe88782eb4db37f28be56a2081e441a232597ee4743f2e2d884e68dd6455959689f5fcc9ff3379186e6bfec993ab49fe77e8eafc4fda2b9a0af8b3b103bed771ac43677bbf3dce5ecd3d1dc69afdffc23b1eabff3a44bf63b9f5db22fbd4bf6e4d7de74c939ee8f1fd5a9799e9943d65efb519be0f7b3fa0fe93761c8bc9a60879e2ee7e9cf9d1fd35b575618219ff4a67e2a79492f698af234078f89a8544b5a724a88666c00400193170020200c088844921cc4510c5027f514000965ae3c523c24918fe490280a6218866118068100000010006018866110062219d6fb84e64d001cc21864293de77790067585e041db12304b4b49b550ed9ae33aa0953b8a275a1cf20ed77cba7ebc70e19798327ad062287a65060ad98e3b64b245c87d97b2f84f6625c48865731b06a97fc1a47ad5fff37429220ad743c46aa038d26913b7475d2c31fea44d5ff38e49081d8378ef25b43938964dee366a7a68356735f16c6708459514e65b4ddc7934643585f21d827014d105bda599ed15ef65dfd8dfa0082996236fb5ce1a94f1e9a811c1bdcee39c0b7c1bd9014ecdd97027e3da5ba7dce35d1cb9a5396e02b6d599ec8394e269dca170c6bb9bba356731a0246bdcebc7214f6868e381e7c93688711749ffabdc420c968089622487ea938a50a7f939989ca71637d575f3c9122150d2af83717f5826f7268c2f0bb7548166c66743426e2b9a88c5413581d9f1ccc4aa1afbe9b0cd6895a47ea49c1665ea21e9228a220a96a3a2d99829c21bccd83ab98a70607c9ea1e26cbf1a1f2467ff8da5bd4ad42abdcc51467b05d1f3fa1ea0fa8503fd5bf4a1740dd5f7951c6cec9b29eb03f5726f1a971aa6d74219ec75385224a331707cfa4d242659e83fafc53e77129213e83c82f369e2bbd668f4ef5dda3dc08c8a4a6384c000a620a14bf633ee43c7ed31654da7a0b2151cf5ce3d6e46c62c67188bba327b2c7e6939ea68c13e1e9320a68950dfa55321c452e29f286fe1a3d612a5523e624fadd0d7096870b1791613787a594d8cd30bd9c6c57bb2bec6fdfcab55440cb5aa713f3d34f9f03a8aa7a511165b8cd81d89bca12c7546829f807c157d2832d32abb7911035978a972a5965c8c13e831d96b000ba8c2d54f44097ae551ff87af33fddcf295e1d512e92194251651581eaa390868b4aafbf014670b1d706dddd87db06925a42eda1d1df6c4e91699d68d5d3a6140bc3e149d5a63579fd5bfa70f3885f3beeef6bca67c8dc29597eca11ce4b954b463ea54c11072b68ec34e638d7c061c52bc793b3f52164096567ea3c9091ed92891ecddc847442f1139501149bfb2cbc19e2b9b5e8fee8f2870e53fcb313b9bb81f163a1e80673dd6c34dd6b109165c29c46ec38f06274b302e88c46d3c58fe882ab61c827e2c8b658bd1902becd1afe4969b699c2a4ce10efc875f3c005b635f036cb8049a4753d19466320ddfe096b24fc3bb0523bde708a49012199ea7788679180f275f6e46c577182135cb761a523bbb40e12164e29109529492005c3426224b4087f9ad782fb99cfe29ee85d1fddc5dede3f2e5d08bbdf153548e3b1e8f821fbfcc1e11be03cbf5d13588692f719b17f85f6d8ecbb384750c848e1d433fa7af92deea9aeb18f914a56475f6de2c75131f1960fe2b5010af64fcf9a5d43d01f35768e5e4dcfc43326316dfa53c0662c1ca0c84c4d616a145fe315f3b65653092f38252cb480df2b7c0be60ac8c22921a6f25be10ec81bad717c2dfb2197cd7f0421a328ee5a3c9b660a4c6a1df2274add4cdf90415333125f2ce883b2012867c09ec66817437f6a9e1dd94a6a664306aff0bdefe81281b3d7a41b94a882fb0907c4890988b580d0ad71b84c8ba9252676225afe83b0f2772f8176c875354e24b3c09fdd2fc054e5bd25cabcad264759f73c02f4aca48d6b3e78a2eb69b720b9468bf0107fae1ca87de49c102f081bc8f0518db6f03dc4643145c316837be4dfed2b08b4fdb68d999f10796b25a3bde1dce2aad9efec3f0885d87bbfc6b750f093497031726b43a4d6aa5a73a8b8bed9a078ecf4a422491ae974d0548385b610419c40b685c7faa2d6d5b8048880730d9c89408507c14a0c79b32acc79d2a61913920748051d88d92e4ba6a852a5adc34a0cf957422f8f54da3200adc3dc906fa0dd3bb8a29dc4d454815c25738aab32a93ae195c829b9f2af4e54f7931f4f3290544e3b71077337c41f75f91ba128575bfa539fd6e0e2ae4faa318b6713168c2a62de468e8fe36a12df8e2c0d9922db1a3af007b8c2b46faa18aa03096338dae1db224dc6d4b175356207ce3cb28b36e7cc77058ddbac218fe15de1d568fceca1062449b1ce7900938457db22bec94b12ea3ded3c11ab367340caf271cca54259924fe05c12d97c3da5e0b51cbff0d2624fc5f13a2e04025f42bdc662857c6dfc75428f9e208ec5afe27659e3e9183473ca13fe7872cf9df654af155a5d183b7de9b8eb998ef60d105d3259e2a4a3e73f16b540c899000e37d9615836fd80977ec1cec161f43b412c062720c2151fd2188051d6ce61e87d34078b702564c7665830b73c81f4ac4dddf82fe393fcb11c4e2ee9425be7e0624f2dfc297a88112be480c15f9a05a73fd8816bc856ca8782bad514123cfe0a730a6edc53ecb14a369a1e2e02ce652713df34e87c8caa2ce2e84cbe1d096538bf2718939a4aabcdf1c15e1cca838f6571b346ace22ed5289ea9a570a53d2ecdc33c30dbe7941e602fd2a3bd9bce8a4671d6a25929f74ed558277e4162c9574d8ac9f6469de91fc1435003585fde6f2e0001eda7580e36892ee0a065ea1bec48f6b3a4cc781a032354ad1314efad0731024c5dd4259dd3b25b5ceffea0881dcdbc2b1bc908dbb292b55903228e920a00bc2b6668575ee616eb6f521a6248de1cd34d2898b24f13840962713f8d63746f5e80ab3526654ac0c9f84e84e49bf33fdf0d105f005b13d725396ef7191913af0a929d407824f62ad6fa4c496c6a14d68edacd00c4a18f80be76c1160a164bec3a74c3110e6f9661e012e3e4a4f7da08ed4c51308f316536a83ff5cc661db34f1ba2d37815fef89fe3efad8ee718f844aacfab5fa40935d0d261c477a103ce8224e30b10b1e873cc1a6bc0c1eef6c553c136adff4ae398d93d6b22d085e9c7e87b69978fcc1db5945e98027376a6aec81e04c866946773c8f4cb3c5e17b092499ba385cae589b00871048f91981107aa3771d5a62c8eb8bfe4bcfd4880bcae24a36659ad8406c5282941e25c923d0bde5c4eb3d1c1450bf64dca8d3795219293b9ce83251cc6c7312aab828e1743d84093be90cd310492077ea8ecfb42235e933f791a4184bc4dd5103c2faae917630b4bcc110a5dbc77dd9eec2a2e1df61fcb56e8e2b1f7db70dd685da2ef9563b5c818950087294fe44f9102041f5bb31d254965f5436e26d2ccea64775a0300071308cfc6d7b31a3b7ed119a76cdccca27c0ed1192d2d5b305d94aa8b0440485eb96285d07c0041b8ae35d18c26b60e7c877565f9bfa3191fc98551c3841bc0507911bc0a7cf420506a90c0e6e4a73e1d1430096565920148d79a4d1a69841101db1ebd84aad3740b3de29c5de0de867eb0ca66f73c37c6e9690904bc7bdb64ab28b8fad96365b110c0c466c84b7f17ac21f3c71ba304bb3d07e1af5d4012edf163334df1f2fd8a1cd1f15877f6368d2b082159308de5092147ea2a16bd2b5dac8397fbb0f61cff72086402f77e77a100cfadf68925dee6e36398cb7e0dec6fa93bcd17d1a97ee95eab7b07236ee35a44277fecfb55082fde77cd59527fcad4c579a4fdcbe3417cf6920e583f9b0ae16a45193fa269b127647660d4eac8259d5a4ee8884eb82033c2fed664d645d9738db092b4323b0d343edf36226dd8bf4b2c11ef6164ba47c11ce161736d8bd9fabc96bcb6946ea52df152b4bb3ed47996612e05ea77dd79203fb7616a234e7254b2ada2a386df42f03bac8d4c30af4e0d27e05c696dee83101fe7bd1de7fb5355dfc8eb9da1933567963e0fa87ae2e0b5da15404aa9d8fa87fa8d86b8ceb2f481dc2c1f8f5793948301a09c762000f73a0b20270cab1b1ee24504c26b860415845c87e4d16c622e78f173873130e60f503edf46f94d34c81ef01d80aa0e345db8a129e6f32b25beaf70681c2e2321199b542dc2fa8320494635855fc9209bcf21c59158b3c0eef42c1fd493745425bd6fb68d03fae8cbab9e94babc08a06e4cebf94a413a5bd4429f29345182d11be96dab7a9a5427c0853e6d55d6386e35ad75e63b61ec4caa4df0633211d274e95b982f754cd3fb31bc18e169c6370731409baf9fba6fc0d7c9d4ac6053ffad5d9c9a47ee97dd1165527152336cb3569f7ad292e105ba72b495f894646431516b6839520ea05d9b400866879252a0aca56d4505677c3c0352a7300aba1eacf9ece17f41a5a91cf269b80d77f0648aa6854507fefaac9b8be7d4d095142d025009f6724c0ed91527cf540f2148570094bb16f030e532a207aab52baeb230ee639bf9f03c9e039e38664369c470ae3e475eed7af06e79021a260ae7b70f416f53c22216e5ca4f44bf3efb896b5719c44e2d5254778de26d0c02fd35b24fdda655c2a50c599afdc4a57863cb665ed2e75fdd7a5ecf768b16271457bd2dfbdd2ae0f055c627024047dc8cced7bee071849f319c5346e88835a2c99fb814e744d0310656797189fbe23ba25bec9b744fded36499bc2aa3b4dcf38496bc92ade902a54f2bbe66ace73a2ebafb93ed36402c721d8b97dcf2833021ef9d03ff2ef33a383dd468a9c90222ce34b29b7d14362672d0ba588b61901f822fbb334873fedba9ed261fff25e14ab97c27ab6d0117ef136c2d486daf32ebfa0f6c30d0023d7b47ea0454c254ce7bf750fdcbca3b476658e9e46f77a988e44c2c203f99c853076740ea917fe83de97e8cd6264b25e858f7464189b9f68a1329628663bd65d096b68e1419d1bfb761addc63ba142ee6864d3392f397db20a82566bfbaaa571c40c7329fbe658aaeccfab9e04196138a1daf26a239f136eb4547ac0d9eb7cad6445d6712b066e2c345557f337d12c8da0e7d2a37bcbc0e69c33c00405271f8bcaa27741c55dfc31860213a3bb34ff9ec34a7852174b66e5d595ee861c369939a8862bd672ffba3ad6cb1b03b5733e66dd05f0f031d92ad7f52ba12122ecc030e75afb7f725c9c132d8c6be2df7aa7a0d4345f8e68bda323a6deb24250d9e6afc76ff27270b30428755f6859600f9188e5a180cfc7843cf42d918245b53a04c045827b0800efc7e857c4b90d49c3bbc00f1a87dab56d9769ef19dbc5c398e5e877a793b09a235e806b9434d814e4af50518e81c67620541b1f32d60b9e280de10176b07e6b5b2b2aa25f7c18b5ddc0d1d41c14ca0d9ff1cd80e905adf91333c2573ced56dbc2145759100746a2e844875ce513560bd8f0ec77077d1b95a00a4d78b4340cb0a24e53eef16697d48e0564ac57ec9574bcfa87953169160adb2597d3a74427fa7467c9f63660cc5802bc905d079ac532be8976731339466d2573b0b1b18a075912cdba4e6a7c12cb938702c99c57953b4942787295539c698131eb0a7710a4888c0816adeacf98a80ab37604cd0335c8643447772f9cff7e43ac08b4004c1e18826dd1bb3d1d5d49d99566fe73e720627609cfe71aca370ce7ac84068af7879774994f1e2ecef17fe891eb28637fac185a0626d29f1d3c3e5c95d40253c16b8c0da78d14b238376f8d8e08057a9b63ed1bbe5c5690d355a1d682c78605ed68f4cd457bb13f83dde4b8f2a93d587b2ffd54d01368688c4d8d56b6581b12526d1d2a9b7b0dab8445bb293a049eb375fe0aa1637681fd59dfd6470799a392eb38c2bcb0c3a5bdb209cad59d8e7a1a32266b8a531012dbda616cd9f276f8f0d971794304b151ccfb9af86857d328cb17effe36671754f6888131a23594aa2cb189537e91d16a6cfecc82b192acf1f0df7d0409d302434777eed85baa4e83b2b500193dba96993310d8b5012a68edb49a78fe40f97d4c777c3dd9c801eb65d2a0e16b3700e052b25dec57b91ebb704f0839c0e75a81fcc0d0df4bcbdb60d38623a1634ab2625de2cc9267b5725ee3a3df802dab0b3d96ca6a26655c488a9d68020bb8a299d79dbd638acf57d049e3d45c7cf70cb92ba154ba1aaccdf4ab08592bc2c94a6326ab7631005bb6e7348bdd9b0f5850da7c1ca4bd6147a3cf48a1e9e2731878eae9a73df3f30665241a060f54a3b634f61b48cff46eee5ce0956415177bb7d2a408bd705ccce4208e154cc6750d75d0f25dd060fb68ddfb19d966e5dab402fd99d929f7fd339ccfa2dfe326c2b30da765b74d1a2002108f034fded2bdc899b3670947182f10852ee31587bcbcba2a2d2b0e397995393547812dc9438e3c40344c0ce8fc0024cc4306163a4f1fad71c5bf15d99aee2584a81767b4b2aaa6c61a57f1af783dbf6d4543dcb82969c5c801e2863e752b04d543a18a2ac6d396483c8ed8a0885a9df24f5cc48e14f1c1110643321cab3fecda3c4938321c77d3b830a1394b0e4d5990f3956a4d2fb91e38ad32fdcdb8173960660c832b62b7300ddb610ffdee45de0ee1fb9b02bea2fa97d9600f0dc10d2ca9cadb7f8e42584c7f2d0b2fc10297912c2d62c318a2d91f669f75f57177788b02ab8ff30097fa542e15e01de1d3f5a9e8dd112ec6395cf8a0afde6a2fb877072247808cbc6b485cea264a850ea8b223ab1f50a599b3fb9258824dae9249029d4fb1649f129afb53890beec50df0a88a513f20ed565f75a2167a924f3ba8a0f0d9e32f54a3f2f21646057c5d4a2064929c64857187815e20fa7e35104e6b6a8efc55d642f23f0ae21a3869a0f81c0a0484d72747ebabcc22788912b605571635a03512d4a7ad3c276f80c2c0e76cdaa7e3aef21cac5a54cfa52952de981601961fab6ab2656e32933dee346b66c4a4cff843ed8afabd0d8c13f5b6aba1ae255cdceb316b8c1a0e63900610c9d37a72127e88638bfe5173a840a14105b77855597c7a7a407d7119ba6cd451bd20d68ca946e9232aa19d46fccda6b6486e7a26029866ffea1f3f2d698d2322ee41d5cae327f4400c290fd8c8c2564572d00c8ea8832f293d83f09af5dfb7f316aa68d34c016701d9bebf8f9a78af5979c8fadd720e8d055e8d621b108f1160350acdba4ace443499b32ca6b7aba00e4d5f7f57c1e3cfab692ad17b9d9596db4e25524a0e265e1bdd5914797211e38543b8eb532055ab54205920ae26e684b29295501b90ed6051b3c1ad9e671be522ca380505af2ff67654c07128f38461977caae77909a90752e04fa0c216a012e849641354d4a0fc8cc221119312d090ef9d2c267f82e306c7ac02089a14d0e4cf1e2c7feb37e0a0459e9ef3a32c6e3682ba4d5e5dd23951610f018c332f93975773bc56eabab41243fa03b5c0051a1ba783cf5a7338414b46319033311228580ad2efa1c88114ad7ae54a0434ae39984bd8e1e1e5cd42abc35dfadd37ba513b399f5c0a69e3820844d4f52109365e43cc9d443029b6f1e5791ee2d218c2de6144ecdab2f5a734d2aa3b26772cf4afe7866c0038415faf7c86a180ce6ef895b5b871c99fa852c19e45644a2070cb06c1523b7614b6d993b44888e4b6a6150f78ff970086410230490c5233c098243151613b3085c6dc9986ed25bbff254b8fbb84e3f0146edefa25d9a8dd0b93b39b086f70986821479425920753107908df3d70d883f52ec4acc8bc855d62aeee10bfa41ed21e0d2ffe29c41505cd011a7aef4a86230b2106d0b6e18bb94dbf407a87afda3b020909998a04fe651bc1cec9dc287e536a8b78855a71548538175f2c140d49debd784bed76d37bd0bed42a81a739109a628e03d8d78bbc9ad000cc1e2b53ba8f196ab68d0d32bbc40e44959efacb92e912ebff9bed37fa039505b9b72b0bf950b05c2833f5173b83e9534d857e6fb6750eef1a0432bdcf6056051e1cff08bf20eaec17737d6c5bf06cc2abebe02569be20fc87ee64c414dee581089f9afda23364446212acf4a506a46869e9dd4e9b1459b425361091d0cc2f9f0709ee21f12349922e42b152dd871a1f95e8f467eba829eb99f328f5af31add25001858ca25ec4ad78f1c5ddf44620ff388906db083a510abe5c4b5067f3c420414e101242ad0402337e67c85abf649ee406aaaa62033708dac6527b58fd4c3ea2aa5eb68677c6b054227faacb252948fb80d95115a50f2f22c04bb43d29e29833e646325f6086d5bf168f44bfc530df1c49d8abf058c4111f9b3f0138bb4ddc72707dc8a456081660114a1aff44a1f37c47afd7d8f270ff0bb50a67b1d13c6a6ce6a4ca67fe04e16927e3d957d59ab6bbbced3b88284ac9ac366c116c6e15dbe814131006b62494d17eeb0a50bea0aa0062ec944a730c2f31109153049b8ccc50226a9c521e89af9a959e40e484eff2c1c38033b3e80a3fa6da85b36116789c960a283e9e486786091b252463cd530d7905610a38e18aae5dcb55458d867348f9c4789714b4f8aba6bf1016080b2dfc193d0e80a8cdf177dc225e3444030c9da46e60d78e06e4e6125675bd1a42313f6e32f64339eac8bcaad637e3ef944717a1c006b31931315840609d4c98dbf7ef64a5edb0269c3a24e7dded1cadc989d114c7d7c44a1b99bcd6971845850be6ebdc7885f5f10116866a9c8ee8a8bb9ebe3e0c73f2e879b5c24266af16b1b0c0cfef4fda44d49fb4b42a4cb82afb9640cceed52136cc543275ea8fcb769bc854066567c54d3bdfadf531b8480377c7cb67c61a6e56a6053bdab70ea5ec5ad9c2cbcc25a18965e3bc4ced916f5c806734dab359e991ffbc94884cb83ddf4a892d386d5d1a5279cc3dac77ed7cd61d6482a875f1f229b70aa3dac0b4ec304afbf2be74e53bf9706e989aaf4c27f6d83f553a10a153e9f62f2bc7eb33718c47cab6c9524d0e9544e7f80101d2cc7cefd6a6b515fab0146d8277c63adc8b46eb6883599adb7745c669cf91828658bdb47e5e7fffb4177b67c62daeb721175d9352ebe0222dbc16fb57508a5e7bd05a34a4172ebbb97c4f9fcd3570f4c03f2edb6d22571b949911bb3c5a1a2b1b7bb549653bdade5969e3d7d35771030834b6178ebbd4fa0f1b3fcec591fb720f8bfcd30a6212ed8167f61abe43178eb1a0f1d868a1b37e2cefc0c849da650bae56f048b58ed1b74b31f52603abe7a03824e8f81cc306159d8f13ee77f809fa75caf1253f628805e9c114deb85c0643410325a40ffcde2aac71ff9ff938a19f73719e5a0456a0a864d8f5a571157c11801404a9caa3009262827ef4f372e4b1ba2ac9d808c61f54fe071c4c62ca518705710a244767e9916a70bf8428b32844b10656ee321e58b7b0ac0cfb05ca8a81d49c01fc40705e725e430a617df15f0bcea1e9db5921076dee6db8963fd0b68ad02ff117b516ae68c483322b4d43e5b77eabb30a99588867958d8b8591fac88067898d4fc3c5f4892041fd94a33ed1e4ceacf2e847200af7096f104ce2c9d90a3e3bbb522470679efc06cd8e390736a3ed5f3f1bd97c024bc7d801af939fa212a28afe0cf0f2c3d64372f7797ef22d6ae658fb8948ca980574f5f970d69f7b112606b750c3feff601340be37810338913e60c701338526d8d6a2f4746c11902c522054b7683fa615d1fbd1579f95378da5b4adad2fc0a91e465191206f448777294ecb26e493b8a278d02065cf4980a9c0e955868ad6ce0873a9f4efd08c0b05b5933e43d0d9b7c898cbb4854277aa69ff4046cb4950123986c07ccc40abcce8fb132b97b0c7ae74922c3888e2222c0d79b58f12fd906487f46cc15a40206d95b28a8b942dd64d14b4e0346c0c52b2f6c29931c908d4e81543c159190c20ac25250b26d0c43c1494d97e6306dddd5243db735a9694ef8b7985db7bdada6ba428289cf5e3cc6453d9eafed9ebb96fef664f3b61eeff1c98cbd59040df436afceda6910c89d6119c28e6cca3d28497af33133bf8320b120d5f5e343baac274f52672571a294b9e835b7f06e5f74aa1981ec662003caad9bfe28c12c6334cd796b900be50c616899b2c15d4ea331dd17baab92d5b4c62249c864480396a883472155b4844254662c6ba099e35b9fe9fbd93be6e8b6ed5877d015833672ce2007f643e764ca48c0a069023765830c5f703cec3d83af58ceca382d1be7ef63072858846332fde938a794ee0a64f31885454410555c0d4c359c0c2a00156592ddd5fc765e5457057b0c9f4443fffc45d010b95989e0515cb191dd0ca81c9bed0e0c7852207bbfe34131870236b159495b0a9bb4ad3a868ee083a739413c51fa7ab1380ce35302fd2e01a8ac7ff69c9c78f568889804d755e6b6fd956bf4ee92aeafb60eb009a6855d680a856766f591cb290dac8484f14194665b6188bd4c081aec08c7b48072141e7d25038348642fd27959ec6e19fe0f3fc8893fd233c1a56c9e62f9a4218fb0d583ccca391776ab490bf25b37385ce069f6f41f5cfdd4e8d9611ac7edcbe27daa7a8d38f1729c80c27188c8512b0b8e5909c1ee07e39aad42cc7202ded1615389284b4eefddd5a6899e2396d70a60ec0d5ac34df8cafd7b8e0df4c3d4e2eb9f61dbb4aaba9278c2dbaf34b2d3c2cd7f7f10b3645476e64d31dc08496b6f4b5548b987c0ed17e1d4473e8e44d917138603b0155304319afdd1661232fe8f4ac61f8f8e72ef2ff6f8df5d02f1d2d2ae8b18c98a30dd35b6ebbcbeae22692dabb6f892f11a2000277fed755fc742434648be510a296ddae1bad793203e7a1986058703cf7101bae05be44649a6c8305bdf093bab09ef478c4c3d9557fb9cde91c70b916676c628bcadba7f918a9fa061f4f2447823a6be343a0d62e70a09032dc5ecb733b94eb8b7200a60bd4e8b67ad118ed4577076f9da92007b3f562eee736c2bc4b5119f984701c70f565a0ed82178bbafe8efd9e78226247f1562d2699c4dcb307bf53c541b8ac2bd6a0b7cbbcb39ae082c1918f09eebd28a4f3e1abf78eefbb3a048a9b160057f71a98d46f8bac214b1e150d3c047c08386bf6eb7036d8ac8275fd6705f8457aee65eda4fa5525206015e6d7382acb97823e9818f81ff79f97fddb1c20e7cd875b3325e125288de7ee22e0392264b748d72f269a3db3188c5b25c64193f0522c48a714e3abfd59693d9227a800d903b70f650c131f9745946c85da2d1459d53c21ea39a4901134ed5e141db20e6487bba3dea197e3eba8c8f1ca0e123fda6ce5fccfb46209d9515a3c62e1703be81db8cb51d647a3bd903ca14d5bd217d3e0455876a8c84553cb8b1a57c01db8c751d647d327e9ec30244f23723292a31d4b2cd68ac8488aef70c94a03442e1cf8eef27aadd8391e8e0506fddba46083e536c1b70ebd741dac72905607c993b67b29cd198d5b32644c8b11ab0e78d588cc4218a05727dda827c9cb0537b485282e5d3e570e65e8b915116688facd15377548ee683d72f418ad2d65b934bda48383083e8d48c5103c8d0fc9c892962db90eb2ee384d43e33b1959a4650bdf6199430307bc1d66afb48082d70e63df345e14425e681c8910c7c81e6deaa46c9276802c73c83b20b183c4459bb590f582d64dc01cbaef48888fd63b32e24463cb48c7a2562f898ee18e417318c24ae34c29d2a1cd56caf267c7b9584e49f23a472345b42fa4c861bb17d96e8952193caec4ec5aa96c39d209d201de81c681d1218203dfe174d077e83bfc0ea8741459a0d50a1a479803d5f1ad8eb2623462c8c8082d56e2a543696e1a2d0a1117da72a410709a37c9a20ed3ba34238925c7c82cad2da20e650e8f0ea87414b1a0d58aa23a920642ebbe1c0408cd43081d5d471847ba235b0e63c7d01af2a38e6315343a24c1f1e00ed3d0348962e778e7800b07111b5ad914439434ce90912e6d5b1c1d92eb48c80b4d292f0e74073638888cd136127187b2c38f83924396ee5a760e634813481a43445931d263adf4a336ec4ead60afe3d80b6d01858e173412918c63049ab653401daaeb20f9a7ed8953071e0ee378e40c7a121a72d30c3655a4665eee3906499f9a2645ee72bc7298a5834483768384da51882c8d1b323246db1831c44ae392822c8e6688c8d251d60cad586464448b17b1e838ff4d5bb510e242e3900c718ce8695c4b904dd08c92458e798e841caf1c6b3a761d7f47563b8a2cd2ea11433aca86d28627230aeac4c676e80b97232f4340c21a1ac6b6def2c736128697b82fc1069098cc16b081a0b11211c7b2e3cb1195ace2edb4c25a88a4dce71ec652ed708c633f9e4f7f954dee46cbeef77aaf9106335930e819cac808245a53447328383c38281dafdc61889fc63a1971a635caa803971d24ffb40de9d081eb70396870e8e690bfc3904adac2c8c895465a3eef28124d1bbe14124ef34ea2c841b64b3b9050a895cd46a6536be9b63c39146f63c0f25923ff4698d64bfcc877b8fd18b1230506f297261a56edbfad743dfa2c4aa2e61730d35dbbbaacb9bd91224d0b66c1efa1e1cff58484b15aa4831ec4a31c83f6e5cc18fd3c091fe5d22dd40dd0836b61288f8ed38c291da315cb809eab4f925082e56c0c59f8c9772ca6fd49c86a2f01dac967c842f7c562871e700c97c297c72c70163f026f4684f63421d434f9b35f6266d8d27915276e2722c4064aec89a6723e8fef9e92eca9a53fb7747e09d3bc4b6247df118223d511ec0e1231da34a590312da6fc8583ec8bb626ee1c8fc641a4bd62b53a2d649902cae615645f40103a6e0e3210788f405fa919bf20fa87af4c184b290211bc67dee760b6aabc8f924af94b76117decbe1b8d4fbe1439a4b13e6243ea03748bc7c57e09832a19f822516a6684519511aa708c112ab608d8a3b5b591f5d2922da594522629039406ec0505061bd3d9c2ef0f03ea4983ff05c4608e4f8c71c5f6afd4cbb9566fead99f76c6283918d8efa2d2192499389568ce607ebef899465311138f09e62ddf7eccad0545a6cdc6c26c39cc6db697b77e6c3eb61e13e77bff8dc7b663d3b1b5b0f14c9c16987858b0e5d876260e0bdb0a361cdb6be25cd1c4e3236e42b6ff363a035ede9ffb60de04f32714ccaff0ab4015be8d3f05aac0da38b40126bc52260d12b3e55266cb5fee95ed578aed7f8b1c04fffbda74055ea2bbc4acf14f81978959739bb853668dff075e2ab3c6df04de2ab3c609eb8137ca4d02bc4a8057caacb9e09d5d23ee11b3068959e3cfe15cca78c38057caa4f17f01af1393c6b313fe9788cefb9a5910c6beb37ab36d77bbdbdd72b6ee37874c5edb6b16967ecbb7bdb657faa698cab91f387fce34eb3b8be59a56dfebbb0df5ac9935f339d3bfe013edf6a7fbc6fec0e7a3a24e0dbff09b35d395727fb761431074cf75d29f3fc7364382fefc26e8bc855a0b75f55c9f8bdaa0210ddda4da628d1ab7548236418735c21a95067b2efaf373f65cdcdcd9d3516d779f3143f3c23ff26daeed1a52bd4ddf6c886f3853823d6997ad027be37a8e82fbfa737e5ba4d46577fd39f59cb65a7bab8def4d9fa3f4de536f8684ef4d6fc2179a50f25c2ebcebcf2eae29c2dc38fcc067a3f92fa594d209ac2c8fe5d9f3ddddddabe7cab502d55a6bb59e0b5b6bad75ddeb3087edf9f75eecb92cc6d855b338919050d0e0d3a0792ebab9e7368cf573e18c8d8d3167eaaa67a34bb25f6ced560a3a30b67ecf0503c3a8c9a16889f67c4ec7b10aec0dcebb9d1765b2edd30b638f506fee7d7dfddf738bf5c53b43cd64bb6cd66cf9e88bf7f59a3594fe0eb26bee05bc990d9834febab210c0d9af16c4db06def51b3071bcf767c002268ee9fd153071bed3fbe34c1cd4fb2760e2a4debfc6c451bdff8d0d0834264ef7fe0838800126ce8c89a37fd205f07c082b05f0cc0861f5e2148201abdf26d0069e1921bcd408e1e53bbdbc0a54416f146a17afad7d0a54e1dbdaa34015585b0b6d780975a5394d10e873f4debdda1406841154a96dd347d13f7d25d3a6ef7d75d3e736fd8dbea6b3fbb6f8e652fdfd02ae52aeabe04ac8df47bd124cc0a10e2d48bb6ceab9e83685ee71bae429b8b65ddfb56de74cb4cb9e9e6bdbeea00afc467537e2519e501f7213ff31527b78f4ec6c1bc48a1b248a4df117d19b1bf2c141886ccf2121b12dd23d85f808d941dad3688b56df3d875c8062d3b72e146dfab38666e17e48093ee4904f934d831cf9e0b0e96b11d8700306224188d84189122058cce4a085cb114054663eb678c678b4b2b11618f8bdf7de1a503c562db6ca0e3558c1c1919f2c9cc4c47220ab5c11440f477c5cd1388b204a9892606ec71dab96252a152c6812ac6445e3de7b3b7defbdf7de7bef571b085122830b376822880c5bd4b821060409932e32e8c06592204398aec58259d052fc7e588b86f197b9d47ba5608cb1b6503801c30f21a680c244162b40628b19d0d0c44812319ae3c82c7340e4881051929c3499a288223030ca52840e5c2c942b6245519c20c1c50a768680400cbabc7c2802062e49b015bafe06c3dd71c7aaa5a70a9962890c1b6cbc8048e982072976d0c1e7c447ca0e3e7a089144de50c71a18800486860d318b4589120c0487bd2317ec2306aaa4e65c93c8393331e1a29c738fecc4db2a7c64c95992e018c67247782dc94207452c3082cb0d263dd07044febcf0a448101e25ba441bf9d8e22da14e6a80040964c809213c4c2b4db204a1c1131de008e2e7abf0a144a622e79c73cedfa5124032a285a31f19b000640eb1c5080d5870c3153698e207c94d2346a24d4b199f74235105a185247a66c042100ea2b8400f43c460c813566ce1838ddedea0267143c511c2c5121d46253f5222f06385141d418678818b8f1e21536856886c083890c2071521598078d0c28923a02b74b820cb0a804801002992dc7befbdb7d34758f0d044081e8874eca0002439a040828b2e445a4c51ac62e019b1084202c84845173400e930ea790d5d59c24b4aa0d02284831e2ef8b971430e4a2d4ab22052b20045122d4503486480011519cca8055aaca8e1091d43560471c93d90342b39e79c73ce2a6fd9fab13ed5ac37e7a9ed9773ce39e7fc7df7b51fae42152f046142c78c0b271d1842a2c8107267063f7e60a1a98e1ad02a5890b860c7280b1610792008911e37c460f623c30d4af88924d4045b86605d3c0105f6d3ed80c4022237b092a5861f3ef50713535113386cd1c10f2c40e1f243c906443899018f155818fde8919df84a8481202560d0e2e7881e35b85c88bc40423922032c02424246464040d42b596bad965a6b2f1005ba17531e1e9cc54944447e76528cf56b620a1bfff6da86575bbfce6ab5575b871674a49cb3e6ddcf4dfa297a94fa9a387500ab8dbf86628e7d4bbdda8bb3d636aef34aa6ef844aa9562f30ac181931e78633b3e6be983514860731660dfd1be434fe4f74947b657b160f1207b04ba4fb48946556c288cf4eb9e213e1637ddf9e4342ca4d8be223bfd9e742110b4276b04c606d8b07f0f8e0e40a2b8c7e902dc032e5ca0a86e0019ac184b5a8d1a95e8070f516356af4ec14c142882e8e28e9f143128e24aee4a801ca100e1fd5d8516387aed1a95e183193f4515145de73c8051e432eecf854b169079aec18f2c121e76c6b74aa173e4d60ad888f8b01c537db628b89d9e778a807d195df418c20bee7f1e5269fe38b51e513bf18557c5fd6ba8510b4d63a3f12eb877a8ef6cc9e433e40b6b7e790cfce165bb7059c3f37a3eab848a851c3d69bc35d2fe773f844ed3ad872261d3ac24e0e17386bb4d6e974d673cdd9124fade95279f65cdf478266cad9bc12366b9febbcebbaaea35397b4e7b2dbbc38eb0d87f3524c85b33f27a526d7dadd65c3da39fd8704ce9453023869b6d65aeb5497eacf1b4ee9f882699ed9fbd36e71853abb852784616c0d9e3ca17a734279f654daff2d9e4aadd48ebc6529a699d2d7555bed6e98bb1be672a7bddc694f2b6d26adb499b8af3b915bc77dddc9439552333a14fd147dd5a4bfb21ef3167d4a692914f4442828ca8c74fa958e7ea51acd2b47e509346aa593da907ab5f756a7d7abbdb7b317e70e67ad694dab4eb52e6b4ddb388eeb36aeebbc92a9643255a726cfd32999becee4e97c27d40985aa4e51309e2bc58af15c2b9999979999ea74e6e4e9d06d41cfa5433bfabdac5e5eaad3177dc3185d9a4961db9f1a635a4be20740cf13f29690b7bc2742270f752a8f4ea77aafb5b5d64ffa6af5726036a795def2231be0b6a186e4ad976e8b9327742a2b4d0e5f625a5976930cf21b8fe234f477ea4e52d2d151962c57ae4cd9a25696a04fc086da863ef3561d5f4a1052e5c4b9f82787434b42a46d71716c4217c6de84ea4d09a9d2f83bcf4dc9a06d91648b25a45289c354a9ac9567d6dc97bd3d711adf84bc25e42d7fe2ad52b9dddff4721bf1ceb6974748a5a4893375aa8cc11fc927da5d5fb6f59e5e956d07b8c8cd9f1bccf189a62316630e2ce2a32572d6d4079f7ce2e5d92898edf91ad0c4d1beeacfe3e5d1c212f9557cf4453dee5a2d930c8a9609f8f866ea23376363fe7dd7accf995cf5efdfd894bad7ae73d9bf36accf50c7da997b59b56ada7dee3a9dbae45adb705d1562ecfbd5dd4eea25f1c6be9fe7d2d673d91b82b3e67a2e3c43427efc39b45063cf756fececb9ec9c5adbb68dd3b4ad9690c31a352a8db65d8ec5e24cc8f8769a76efa340bb541bfe97bbd6daebf6865a7bae39b9cdf3af209769f77d9d57427edc7926e450579a4a633d4f84b96fb5cf599fba642df574b6145cdbbee1b6ed57cfb5ed2edbc5694f47dbded4de0d6d6c74df502cc1b6feede038137765d5d3c1fed573d12e3fc39743eeb376d12e7b7bd112cd39e79c1a10a5945237dafeeeee9e410d33aab5da2c64adbdf4621127c11e0aafe4d3af75d98340dedd73ba945fef9c1fec5eefced53df71bd176ff7af3168a1bcff64bb43d14f19d44db8a27986d105c99e6a82604579fab391ff87c56b629a594d208e45db46b8ebb7b1deb586b7592cca939d69665cebd34466339d8cb79d937b77ed9477fbac40f6cfb1ebaeeebe5552bd381b17d3e8e516ecfb5eb563c36a62db3e5a692526a2ab7380d4d5866cb4d46de72b0fe0bc87a1830e602e9305b3219b1b555a08ecfdadf66466e73933896697397e460fdcbe78879983779dd9bbc12647a9834342e991e66cb7fd5c244a17ece99fb02cedc708684978779135e1ee6efc3842bb8e08626c03c2b5c21e6617e05d6bffc8d106472de866ffbd553d4732f032443d69b18d48b75773f27eb0320dfe559f18cf506e6bdf4b3de9496cc96bf586daee93395a950646dff18504f1afa2c70ceab034a464fa02823b45dfcb6682a474059e28a47a6872d3393299a81e0cab678651bc3f65d326d0255aaa040bbe4a042858a575bafb5f8de8b31c678894f745fa22c497289cf8b8036f56dc2cd662a8fc55228923cd171fc665191694669cf7f2231856da33071ef8dee547ea3728bbd1ceb1fab662fc7daaece4e5f7c2fbeac8fa36e6d0e2d08b2f0892a8cb9e936dbbe5e4ed5aa66278e9d35d4ea50dd652ed5cdd747b84cd9e28783091d443c4a5089c2c411ff63f6c4e77b0e11814284881d6dcf2122558298205c2124471053aa50b1048a16b040c961684bd14f9136d2e88ebcc4ce6f8918d91eec39440487ed752982e366d4635e56d2d2f1cea2191bb8a32048e503a98054be49439fdd2cdc8bbaadf6da7bddabb5f75a7ca9689390c4bb632fcef627a6895628e889509459ceda6adbb5dc731c15ad110be338aeb35ee95a93d1952c4647e5d77d5e8eb5a7cac3455db5b2ab5575baea9a78cbc5ea03d066b77780d7a2f1884fb46eb1c6792694ea2566c6035086ea8f68f9952c3f7e33c37198e14d7c98e1413362f4c86f4e48f21de7e1339f9634c86fe838d227238d32d229e3159a65cfa7e4a42435427f70209b903eecf91bf01b5a561a7f9da54c9a4fc713dc06ff948fc27af2cda001bc0c1a7eb3f98cebbaaeebbad38bdf66fdd36a65dc9f3e53c9ab9cb6228348922455a3cf388e63aa08b5c96432d9ebb5f37abd5e03f0e084a2a259448e5dd7755d3763a6da3366cce06a91662a7955a5552e45069195e44812e5554ed3a74e26ab4daaaccaaaaccaaaaca69371e9388ee348721cc771dc092fea8fa5d5519b4a5e574f5afbc820922435921b7dc6711cc77aa516d5a25a548b6a1101044083da94244992d4344dd3b4718abef28de3a89dcc5e573953d61a19449224498e3ee3388e63016a68a9b5d65a5b6badb594aca2ae244792b9c4ef7595d34a58db8d0c22499224677405e8fe882f168b85d65a6b2d2d6949cb2391d212d398fffdb9b11bbbb1f7ac2ded11674bcd96da96d996d89606e80c70800320804687008e06083620d8d854a7363e6bfdb358338f692f6af18bfdd644d7a9542f5ec890b1c51b9b89d7019e7d566fee14222f9390bc7dc33b6b62a6791bbf32500ec1b068814101bb4209d88c06ac08581232580f6c07cc4905aefcd849e2c2852e32108ab8c18910586260c396dc428d4ef542871aa88061062e5692e0814300701831c50636a002a527f3e42b3025b32eb01e28603bb8187e674852d19023d8ce95214986c8f00d796188cf101f435a18f21ae2c39025863cd962cbc149b5cb1a29bd76787c4663bad6ee488ed472a48a43bd89f29ac27365cce21d7949dcce86b4257942ef848ab7ac303b835bd206eaf089b7dc92ca235b7a3de16644a87fdf556b75a9543eab87dfa5b3623b6b72adf97e9fd65aad341ad7ab6bfdbefbaeb9ebdfaf6fafcbdf3ee7d9f077cd9a3d1deddd70c686b6c2d6b625dc948171ce1c97b93cbd25b6f05fee81f8f2cba6c1c78562eef47361e6e69c73ce8be44294524a851c66e4eef5c276fe5a6bb5463be7b7d65ea09df3df8b45cbc3852fc40b51f2c2191b7a7bafb7178a296caff47a73ef9ecbf4a59068e72f8599f342d19176fe50c44976ce446fc515661b045546abad75e4464d411d3ef1b321c0e44ce2e1a3ab9159634e185e826138493d52874c1a7fbc64dad49ed9f2afa3b78ed4182a0cd5482d525f9838442a6ce20cc1b07a8365554875a1fad49e1aa402a9e3c441c930acfe5424dbbfc650a7cfb452a5b0a6f3c695bcee05cbb06ca34e9fc9ee952a85359d37aee475a8d3675aa952187572df9f89ee92b7693abfe092dd1bc666f96ed2ef601ea2de63788bdec927b61c93db14dfe75d574d24b058ae504f95ea039fcf7eeeb2d6e6ae7b21cdb32e954f8d6aa5fba1f581ab3f6588f8878f7e80c75b9687b7fe874fac3cdb5e226fe1177d56524a6904b2e8b1d2887477b7ef4664add588b4d68a74dcf7d68ac51939417c5a9bb1a1f7fd14767e2dbc15ccf9c0e7a34f3d170dbdd3a9b1ef483aab7d79785ef60d7de62d1bd2f7518b71f839d30f7da2ddf8c69ec1b8d6cfd5d53a5ddbf7abc57adfa7f47a22dc6bed65618cf1c5f729e5b257df1361ee5bb10b670cd22ef739d304eeae5aa35ac9feb612c0a113cdcc30bc41bddacb519ca3f33a2ee79cf3d58f5fb7bc359fa494524add9b801727985dd910d0ebca6e8023c803f4819b1081c508398390253847bc86e8d184069e2996b032a4ca1456ece0c30717661437c6204d604fa83cc14411aa19886072859116301ce51e5ca680c190c3123178c28a0c3166b6fd3b5aedad1767725a9cb5767179b3d6369c1ab3b529727ada676de33a99d63a4a29a5d3528ab1a6a178b63f87da41f1d8fe1d8ac767fb97466fb97d79aed5be32a0263e00c98248996be5e5e7bc4319a1aea0b2a08c5045a82354892aa223ccc7086cfc898ddae768a450d01321d2a6a2a466def214e9ad1452ea289594424a953baf5469a97badd662cd520ad379db6b7d624f6ec9dce80e1c883ddfc989a3f910167beaa732ec99278b098c15989e97a095162b242a292f7adb3f574b431693ed8f5f84b1b2fdef5656989eed5a235f7cd9565ad41592edef5a25856eaab5b5a1e833994c2693c95eafd7ebf5fa4e28544ab5caf88536b1a59bc9f6cfcad7630a2a69514272398f9d987c56be9eed8f4d415ed2a284c4639e44e6404eba10499224498e3220940c2543c95032940c254b7573b5eae6cb0447606138986e62bab9b9ed96e2f1743d70557045e892ed6fb7d293b2fdabc7b3fdbdeb81eecb55c1152991fce53c238c149a1115198da8225411aa0855842ae264342eb41cb4137407db5fa3e4f664fb7f1a17dbdfa4e5b0fda97682149a11151991244992e4388ee338c2e862f49881c059f890a6a3d51988ed1f93711674d391c2688c2691019124499230ba1819d3b03d0acdb308d3806f94132a0d7da352154352c554b156aa4c9562aa4c95b354992ab7ab542a954aa552d1a79b86aa98b7fc61768e29b03863dbf0e650c5eacd8c1a236542402a72fb2412dafe5c8cee6504748b312fcb4318f39a353bf8e88b31afed31330b20d9f22131d30194185b3cc982081fdf115fcf5724862257b6cc9e4345b828726465b4c8eb589db4e5a5b1f0f5897316bec2970ecab2dc9c78a3a88e4e963466e26074137ce14140056346c64ba2093c908961d5927882182c9897952d8928f85b12570071494c41984ba20a36f741a84bf4ed0f2fe88ccbd418cbbae107403e3bc32915068cd9cd68eff4479838f8a9ccd3a7e5c48979fa4ec23cfd5a34715e9e6a7f5f03579bebbc92e9e36228ed8f7af1189c41b2bb173f2d767dfaf269f1c27bf114b4eb3bcc2968a6f422aa67d7afac1e19d38b282bbbbe8d415989f97ee665c0fb2f4031c584757a918be9ac4b305e6f187f71bcec17a0c8c56036fdd4369b3555b5bd66cd6bd97e058e403f06a4e5aca1cf029d9c35f461c03ace1afa2f2bd59d899b11bb3e0a3c5119448a85e840881508e7d537abe11b6a201733cd268ea671316c55337423e2be685165e2f7255a2617477d62d3176bd1aca12f66641c8c89e1ce41567d98dd39f87239ede17d6d4a5e13c7fb1acef7402ba31cedc25aefe328c9664dadd5f4c2f2892ad56ce2787f354a7b51a69489cd9aba8a3d159f28b38aedfa316213e73efeed2f2823ca94bbaa5eabdd817373a64da6949161d7d7aad9f6122d93d58dc151cbc34d19a27d61654e678a5cc66b8c936e59a55f8a5f64e85ced49ad0c07f1fa884d5f04b799414fac8ce6d9a6ef801a320640430133a808c987a16caaf267bd9041a3c8cf586b78e2a4fd21a2bc3408d1189e61a808d09e4d369db35ce4678bdff622336cfa5f911836fd5c03eea5f81d5dbcf8547b0e15d1b1c5d60dfe49ddcbe1be8b8a3377a534f5411d64d8c000fcf55993abee7eaf5fbf0ea80e5a9f618120628a18505ee011e1633d12112a5e38524d1beeee6cfa17c7b4d1f8b4eb8ed9aa5f714c1be7f1567da05d2b6c573a0b61ec5be4c2aed135ba46d7e81a69b7b9a3b7aacd85d5f71dd326f7e4d15b63bdc9b04a535febef63b1eae79610099a6e8f69741b5369c88b79b0cec808d8ae222ac93542c5664d7d074f65ee41fdecfa1525c36cc132e99381b22cc760ec1ba666b3a6fe6fc1372c0979b4332ae219d930b7f188cc2e8bcfe8f1e8928ceacde9c869ea9f92ca9d8bc46357940fcfae2823bbbe88c75d3d3c95deaaff487c1634c1664dfd29346b36d8ae523efad7035a55b12e88137dfb6d79fdeae9b43005360ded2e6df77250b8af170a32afd76bcf9004f457788fc05a0f676cd8edefdb4391039bce4ae347be4a955aab755a96d65ef77b2fc6550299e5a8c4cd5606b164686e0400084000e316000028180e8a43a2240ac22c498bee14800b608246605e349408c3b1589422418863188e3104180200200000030c84e84c10001b6331d82306f0345464a64777f966149541cc400920b8de684a298dd1f714409a76a29e5301657c9aa9d97a2eb582c6e78b4513c92977cc822edaa0d7322628a08782bfe28791dda817033b35806794f3457370e964050d49ca122fa3644a0523dd0a2f0940bae79d0b4de3a80017629ac33ed3c51784929271cf35a737c5380962ebd64cc3b88fa1379360e9765ef340e86e22b57ef5e243d4f6743d1483c6c4eba85029fc4f13ce1b94f889306f948d75f6216f8aa2341db3fc9bfe63a9ecc6c3abbcc2a5bb6514b29daa64ffdae5f7d014d41de1a550ed2c2d296a1a48219c142526550b0fea55b7ee6ce5e4ab3ca87bb7652c7c02aaf2f549867dfb83f11225af93a90aba2e435b48d0dd69abcb497793f60f75a1948ce32c5f0d7468455f43331ead9bb8a1b00d4b1c45ef771ec2a91051c0c6e222a870c83d80037fd40e8ec20f838ff255716c5cb32b439e0efbb9f70854bc44aaef4f8f6a8264e07fdbd116f3ff17c5207c04fc3efbac75269b77ae19553b634a723304dbb387eaec306b1bccc92326025f46e82c820f14e4035b70a15150428db6af93e3d40f1ba5e0a818fa00aa16c51e37ae77f477d88205e6001105b5bfb81762a169561967ef6ce1550bb48315cffa905d9c8358e9e210059a46d8c165803b6584313c0c5d1460551e93212bb8a84f654a17accf0cb38d359b968809198d50c7aaaa5fea682a33a8e516c445bb93aac2e459c27b99bb5d19b704907774400bb4d486a7f221f670d17b6886ac4194d4459ce59886eb18df25f02448d8a39492a64390af1b1b3c72c397e229ef953c5b809e869e66d4cfb6bf10bb8bd326e908704ed215fa4ba743833622c3f7465ca9a50da15fcec8fc21a393dac1f922bbdc292dd36e012c1e50655e0344b692dd5ccbb751f2cd0c59faea1dc5efc005d38d835f06e5b8a160c13340e03abd3131c726df71fc3281f7c6d1ce4112c61dd4d11d0ddca11da33afa1cd765866420d2d6aedf055a3112d751b5a3a0084b6a5f88b8563370e48eaa33af7d3ebd50d7b8664d04e58f07d291acaca1a0f4f3c43a85853514a8f2339027de192e8c99a8da5f19d78616d11307d0c90b5e17b406a2315dc52828326e57f9848ff04a95dd70797927e81d11419957850f815364790e9009f3c604d7275d296d97fbb8c4db144c94eb89e5ba096935a06fee21ca57c3d27bf827547ace57a283165e663ac093d6780b8a3ac36df869e6eb40b2643f49f15b5aa31b7662971742cb7090ab7c4c81709a00f8a283021a16305814c0659a914a6b06056c8bf29be552892a1bba72a50bcf14822911bf275bd272d6dadc38321e49ca500a8c93c3c9c73a84e42d212dec04d60ca6595b361c09e94e3a82c9c944e61f7afbe502437c74399a332db1c7bc40fbc94cc3eb03eca73c0ae001cb602be290cec3c229647c5a44ff5750e261cfd1b646d61ab8677a5a3c75d3a757c9280e9b0aea7ec8f0d286a53b6bd80bf4024140e5ec1fb8e2a18016aed00f8208350683198417dce202fc34a32ac497df02e20df445e3619accdbb7a674b29658972ca65f86aff8408df77cae4b680570c7367cde6850b57e04bfa0deb94be9a06d6c13c5c0451ef0a10c7f28f6470192ee0675ef7b5dd0c8e11c6fdc595a3b83ac8acedc2bc38bea8d03e4e20da72b3a399443a9e7ad399726c7544831fa065a6669ca6b7873d625350c492366172e51f3c0f21a417d828e3c9dc1e090fa64d22b18fa35c8b1e394cb80c6be32bce11e0c670b44a2f5d262a4d560fc062a51264336f6da173fcbe6ab267143acb63b714ebc37fffb07e473cf71043b2e0bc6f00d187508f3f24a0afdb81f3114f202be59ec277b4060f3000b4e58014817a010f84ee67b96d4f7c10b7bf6260fa61be5066ced8a48a91cfbea28ef0a8ebe5fdc2fdee923c4f8dd207a8bc4bd98d982d67661190ac14d5ce44b4dc07b7b554055a4a05aabf786f6788cf71ddeddb3d2b51bd8954e18786fc2d2c43a67e4c2ca8fbd8c00ae78cec1e18ea29cff82be0f25f1c06ea50b4bb0abe86ec7880136e38180d5f5c0bd7de32c3f85387200017e055ea3ad447919feafd2a76875e6d3b8c72cac9da609fb71d969dab7679aad663500d1d4384a06b0867dbd6238c84d159a23f2e02af8cea6c19497a68988d3b117092780af93dce355478c09a157f8ebbdbdd8f5091abd0f65914d8477efe45304c0b6b2b7c1a3504e0d5c5bb0620bb1321dfee7b162ba684686cfb4a5bb6a8f7cf8a6768946c5993f5a93d7bbef0315b9e0e52581b16f8eb061f108a2525fef819af9658bba25003ef63a8635e6263fff959cc34c59a490defcd8192fe4216cf4cc883692916237804a39b2187735377b7fd403cc08f19bcd501cf9669fda69288d324a25de52dff2334602d5bb4843b7f0c82a5b2f2d007e13686002144b911c374eeeded28e75602bc4d8b97ade1ba68e2c35e1ba2a0c1e81778f7949ebfa8b53f9801b8e63e953b77be05ce9e24ae4df3cbc187c413d8d2e251d0a0158bb9ef3bdcec0a37ac4db07b141a42a11261165d2045c864a5f3365d3856364b7b8003b2833aeca404a95e1ce4061fac534379a1b855ddbd2a6e1823635ed976cc3e7e97dea27fa77ff2c8f90e8283047d8d01a1608b6019971208be72e6fcabaeea8014ba9c7b540c17598201fddfb0fe755e62fd94329981436dcc572462e29a2b343d096c531de37baed0b28b680671e329476acba7010e57082c2b7327fefa12d03c8890bbee83fa40b8727b1de82a1927dec832e19a19bc9a32a0dc442a8c1982eb9b3fd9cf03eabbba57703030091a1e8775f866cdc7cb9f25411010ca334b38d18a1dbe831dc28d551921d5e8004b7f0708e0ccec7d5a299659c41a0340af4d613c8a9136a54e89b9be879591c1a73e5fa0a5b874da2f7d57a41505bcddde0522e25ea726ab96b217236a61537363cbb247643ba3d6a799d143463155cc038c75e6ac4340a5727ad1feaa1aafb9ed5196c3c8a24483702b14a84208824258bd26094c4222b1bfab15cec41dec342c8713de18cbb93f05909065b8fecdaacd8c15295885747db7ba26c33df5a01ca379f3beac476b2b0bbb5c70d4ce0cacbfe10d68ce8c6e869fe9d6f6a6f7398f2cc59b2c74b8256a744bb43c27e0510741c9a39f11d087c090e3d362917491af0d19347cca497b20c2184d182a1739be370a37002df359e354a75e7c4a836e55e310a58c93db3221128e510290c5aa8c806b602813f802b30cfdb575782b4722105638d097b9f5d119952857d9517b6175e079b3201b2de56181826f614a4a48e98f0c3597a18f477a51029c7f29e36d9e58888763a2bed6ab2b7be09714309e44afbab038cd3a172c6c848e50e20a90cf8861ac38bb8c483d4c07616f1576a05aafee8585bbd67e9496670e2c364b343c637d2c7b7c0714d56614025acd6e22aa7040e3e242f42df5ef9ba5cd7f5e22cfd57713a7d8a0c3ab27f0d36804fa5e253a42a51e85fc5b8062862be46637ecfc4b06106d901ce76707047c92344309e17bc074c0043d00c998a1b4cb6a06bf4dc7fbb1af16604a44348a4613a676f6e5dff2527a91e16a1147920e8b88754a5b0930d919b8c4a3057824c7306a516816c98cd724bdf98aee62997c2a568faa02107defee690e0cc5c91d3bf5dbf143fa74560140272cf6807053bb4617c429b875302725902345e75ce0f09572163b7bf7d7625c584166644304eba295e1fc0c85362bbd955ae4c09e5d50dd623bf397646907ebc5aa29050c45f5dba6ee43856bc6fa72b7b6c81ce69ccd9664ff400374aef617e9f310f38f6667b560263a40dd055948dfbee97d3815f86ac39520a9dc3349dd192104813b59d8d0718cb9a8d28853d89eae65237ddd313c433fc538c576938cd79a6fffb6d687ca2b2545282b1780aa676899e3401b3d79513a08e435622d43f275e930a77d32107cabab1772b5d42216e9a15ec8818c879669d89902d342b46549bc8248bd144f95c87a254076b82f958b43e3b831a981ee96150bb831a576cd70801f2ef7842e847c037bf44e18663389042e04bb7133e9a663c262ccce365730eb0addafbf39c9a94cee7a84a3fdf26547560303440ad4d12a1c8a58784501d8cedee368f784beeef0db6e42101b03f27d987cb6c9725293c8629ab5db6ffdbdd6b959eec1e53d0d221f2e6c8c280520e09b9ac8242661e3f325dd63f6f8738e6074d89e0fe6a8a519a40ff3b960c935b6ac66500b76a36b85ea09a3355707d00809524f1896b77ddadc132e59d62a9694623cb412d92db92498078ad317bc6d11681b73e774b5f3dfb0ff7d420e2f73337d3b729ed0fc28acbdb66fb41efd3525942084c4ed9ea7fde9321a3b74fa20b9b58bafa2e075175858852696cd698f70dd2097c37f968de744f2fd9b08cdd1fc50b47f3f09621be71f305f8696a946e07d09d14c8fd2bc08395adac6e7bd61737dd5adb2e0218d9b2d04cfe26a82a74f82f1f70ebb3efa7f1d4a461f66a1325391b5c3738da4534d8325e4ee64b86a921192230b521ef9b24db18c2e0fef33bb0ab065748ee95ce29e78b4fde3195565467761fd8c8faad816a36476bfa3a29e7c8635b39647b6d1b371d462ab6b92ce9c56712066864803001c73ea64294779a8b16a17b5fbb1d19ac1d11a03e9b92fae87ee9565ca11d999c54d762766dc57593df07f5abbf68f3c303520ac76443419d1f598cd5d65faa742dc25ae9a906404a2e5e37bacf2dab996d9b6bcdb3cd5c481b74b1001cfcd3a4cdf51ccea8ac9d8a82c22b32db9eaaa85f1b16dba6f1333c5661a9325f7b4b3ddba943f2dc07321bb55bff6a53d5319051b64fbb207599a75a39c233bd1c749ea5d3fdca5e09b96eed28e050ac796cf621d06585a3c29dbf1616035db60c6fd9b80a1a564730cf1c073dc903418d8b822a57be63752817aad7d91a3363d3f5be2e58c064299a002da317020d59eb9befb5ff168a97cba341492443453cf828bcbd0d6aeeb7221106e598cf75f89801d5562674179792d4af7f308a9ea1c82ce783b82a06097c4cd256615ea6ffc36641858298afe8527ab5cb775d7e6023a9a10dce05d6741591e90e223df12dbba283c7311a3d707c67eaa2a8ed98a6c0f5b70ead59f909a4f2f9867986ec01aaa5e712bdfcb60b420e969fc8915911df3d188d42eb8235fce4e6367d545d5bc0037080a6e0e1442962fde2fd56007cb7d53841d9708f16d848b00eba70cac10b8da7eee65127229f181dfaa23696b14e050902547d511cf9a4f518c7bf91eee5fda3533e0ae4da49395f2e41ae52ea49c34715351d8a9237b8cd0c2a79060de708807c3d48c07e0c7e681600430795f3d085b224484ccbe1a5bd28b0f2181b1b474abbcca4633b96a84958e10c4f10e3a84189fb9f90314ae9e9c3ac13f8f7e61338430d103820750145d5a8761dee27ab94ce6c4389a1ff2f48858f6d4453dcb4063d4c83be5cf3938080b2d99ef34c80c29c5b5eef4343fb08a2446b71e6520a89288a06239dad0b0203e31889e92f4303a726ade9436292eac5d464e7a459241d65cb1ad15487303215b7e91eacdf4b3904704215c1a8cc13148ba98c62cabad71ed50625330ff2d958562238c034ad27110c8234bbee19be4a513228b612b1adf7219036b40e6ac49f1bc158797aeed8286b9ca015877c9911906d25ecb59e1c9652a2b26b9d9a1990f2bd8d354b5641106c0f94d42b8004d918ff532404613fd43efead12f0de68870a3c4a252d13bb730c5a8269d6274bc472984b6449d14a2f181a0d0ed709c4b49c8e447a0f8354f325fb8cdeee9347cf3e81747b63a7f3042195500332bbfe79806c74ae78d37d4e52405a31ddfdff0c931f260f21dceea1ae6168fd99ff87267d0195b4793e26b39caad62d2bee6b81ebb7e774cbc6f2d369cb3651635e051b55778325041b3d547d806ae96774868718729336b4f84e0edbb79e8de9cf0e2de4a604915217293418b84d93c6624d43cc8d8778ad3f7fca05523fb0cfbca16377672049fd346dca44a7f41e3fe7f8e75509344d916e02382ac93d7af510630fe07dc2fdd58b329b02f64e92450010d645679c423c34bd50c6d6bb1f9ed60783fc1795e092d4472e90d3ec7eb9e4a2ddfe2cb4dac3ebb3ce3d96998944c059c041073865824965e8d032c83fc681321104d90873fe96ef754cf423c18112b40540b3fe398deb0452c1d18df05c4a7b3c2d7425303cc4cd9d3164e2b6701fb54e4f7c7782ca55b3f8384e30a9841175b8fe98f26c619842427f09f6ef7164c5249384f4cf2476d44e11f387fde448bcdb7f74d3a3aeaf4478b0dc28b53dfdaabe506c021ea0769eee28c5adb80a72db20815ac8c313d94ac4cd788e180971c7c9eb73d071ab7dee21a80eeb0195d4ea3046f6170f67471ab6f75e19e936db8d12d01391d660c585c7ee58ca3b94869fe338f90bb410470ed4136951e196d29b5107116f842350c4eb644fb2a6fa45dfaa7b4fdaf97b6349cb063414850ae5b91f688b1b9192acd1664eac19dd63a89753327c3a4a307e1bd36f43c5e6811a6bd2be3b152bbcabe214bb2c2df51c559179eb912170846e14208c61467da4869ed304793c1e886cb8be20879d8e5d142ec3bbe7bb36bc61eaeadf95b85f81d2a7c9be7d62a02e59ba0773d8ef05d9ebf5e034bfd37c32a02ea0db1b03cb8f2ca4ab59c04de9cdf723804802228e74f54c4bcb284450bae1a5c83640e646a858eb96a2fa8e52118954d78dbbffee90cb3b5fa7d4629a02a80815ffd6cd8c42a4f34f1a0c057154e0b3c69c29596b88e396b6281b9e76e5caf87763ee8a7012f9a56feb1791980fe4382cc7399f8c0119413e65c0cf485cbe82ca35e4befd1536cb8acc64502a3478b27cfa223c7301e234484ebca090b2c50646f7dd47d54c36e8149f67549dd8605c1f84cb383fba3cf902b970e442ee6bc540c32e3908116838da188498ee5d4b2d31ebc2ccda45a53850bd8a51eb76a113634377b6cc0858c10fe7d54968fc33827cefd5e68d4fb5f37cb9351c12ed089f5d13f579b1959efef8e66e73b677b4e04a1f2e6a6087befa0c16f007b03a50bf5c55a63623b5a6a53a097c75b403cec435c2436068840377c1fc8809d5584e4673d8cc74bff0e57c6d99fd26fa54a5b4784373e40e68ab98841f737039b6e689116d427885e3a057f69a4b229f732e6741533923e734140e8daa24be64a9922c6b8375256534064a2dcc564b23d497757e159d463e0d8c5d1bc6be22c6fba988746253bef230c604b1cebf1a172bb69efc8724a3214d4f72dfa808ceb8ea99bbd28bf827a99e89b599d80a3ccbb4845c8740c3d25c1b42d7fc73b5d0d91ab5883ffcc84058774491eb1087b0ed98965dc64b6d19db6edf639e89114dcd5029d7cee99cc6a98b53916ce2fca0761cee7093eabb2188c770b6cec91d381efa903e07aa323c844e73cafa12294a2445ad694ed4c824a07c99668c8c9ee5257042daca4f021a83bf005261f02ea7f16da79f92d612892e0c39b5cf5b5023ca6d2839ec181153fdb101073e497074af6e37036ba5af1fbe79850201d7b321b8c0af868d1aef02220967b14fa9285ff3533dbda774aa989329708ef05e6de5ced9dc84b880a49051eb40c98abf8a1015dbe21b09179f751f842c70166112188e64e52a56f28803d418605816bbd7857120d3b54759d3f6ec4ec84d86943e46a5c21e20ad8d82035296d7a2c6cc8b4a3fbc72b4d7d9f803291602667b42344c9c85591af17a4f03a90b1ba48ab2e1c0e989168d1f1a72d56edccbf3ef7f8fe21458de0550afb6287e6e2eb8c282c477f165110669915db7e218388974b61587e23858575a1eef5092d3b8cc9fd3360e91d85a62867eb58097adf9cf2d1bc15dc7de039e28494cdcbb9936565a675aae7fdeb9daec2cb71dbcaf45fd52c7ba9d9ba84c681324b94dd4b695d0867649c1a56b6c9ddb98f21aefdd54736fe86c10050d5a2051a69e03b02cc742280014ece191b5e5f387e6810d44d2e768a03e613e94ea2a0b84b1bd60111c20479385da201493a91db0d94c8c095e7ab351adbda25f840d2fd3c9389243ecd2192da35a9c48309e6baa57d44acada98025e1679e713adca1c025070e9369b82d203b036d1f11673f70f5ba7766e8b8ae36187951e9120149f7ee3ce9b20971d707882371036c9cd706cdfdd592edd146e468ed2d1633b1f80a6b303d4dd144759c4aee5ddc3881eb2ba533657ae0e83d8a256077411265687cc6cd6aa03deaaaf87309f5ce8973a1d54632b4c41c110a231ab14b6a7aa774977e65ec31c0263f1b8adf6398c5d6110db076fa627b731987b23ad5667243a528532b0500274246a441c1cd4bb6dc1a8ad91a0665f29292c25126969ddf7c4c9987e3a1b570891225c6afc5433c1b2747c0a74c74b52baa0fd33ab976ec077dfc7ed4bcbb8d3449c5a351782b383a21b1ef54a6d6c048b3665e00ef237b5347f498b6881bc798abb56486c37270577557ebec46bf7575a393ac4fa8bc513f637c294bc59a4151f21932b84f78e62f02a1663b974c43d7d23c74e168fb1a42e27408513e441787405251335af0b71c51912053887229b90dbbe1349f2e5c77e82f74d41211d7e8a90a9191caf4e9e2e7a3f0eff30dbc4779854ef4e3ed27e509f91b7e313753ac83752fa3774c10987a6ae759a00fc800cce431f02fb6ecc4554e8241315f89a32a92f288941ad7870fc58d0c8bc3ddde21c86480ebe2a5ead128ce5997200cebd8daed78f53c002fc9561b0ac6ccf64fd3e3e02eb71b042d4e9eafbe213aedb81066f9b0409058262d75d8c114ef0eb56f776ea1a073a5c10235b366ff44963362c40af6760370a46ecbc7837bc5b1213a13f2abeb073779d0b75887a5296ed0aee5c258357fe158b77cbf4c78db85ad63198cb91d16a7e74a2d68b903c78deb7372bde800d8ab9e44241a341fbab917ec15e2e8ff3edb4889571bc346799205687759368c6bb429b390145bbda42ecf2bc46e4185d322568e817e97d734084272f0fc965017c3976b151a36a86a2d9ad07cc185474f50a35a1b4a35633567fdb29601f917b9232fccdbb7496c187b58ec36c08a0abd58492dd051d946cd01edd2522af6ea08a66a3ded44564183c83152330caf3c37c8d792f14e814e31ffe82dc9ee95fe9e21513db201775a3e7bbbc5a168905b9ac4f5564010001fa7102f2b24162d50e64d7f9fc05a9112400cc186f511d75c5b9a2c9d733c86121b98d6d5e41d85b0b932d90c346eded94cf339f53ec65c9e4ea6ae85aecc52cc6bea9b1d5c0c8a95def63bba2dfd8b38f8dde2746ab1a09d9faa576e9b9aa9f77eb669f7e29e4b8f1807cf33de9317988ec63d581f0ca1277c2f2badbd69a4e221631cf2c5e1c84366c0d0f8b9315365031c5ac23c29ee3c4ac75cfa4c05dbacd56555cbc08b2014ad9a76e515ea20fb891df01461778ae9d123d57a3ab1b974e51b4d53c74081366cee647db3ee29ee93b3b7321ae49b4b3cfc1be6a2513976b7fefea081f7c9a41ebc4831cf351f552767cc303d1f5755747acfb0b056386e8a92cc2e3b64fe8ae9e07af9bf081ac976e054eac93bb7a3ba8224449b03d48841872efeaa7c7a0fde5ea2deb4054171f801b0ab87057f3d47dafc65bff860cc9d30c2403a6bc969ac3d4958d8dcca8cb968975405d43cff2ab9daf56fc9a4287710af10602ac6952620c7f91c4fab83043b0ceb6d046bbf4a2dd5e718e1d38166d5bf3f5efde847090d021b3995e386ae9b68c765e7eb7ffb257ae8478cb7fc6b6bca7039a2f38b4669fe325d78c5cb34e5ffb1ac308a6cfc69ce4fcbbc6bf8a66f300cff594b4d1b907492b068a620e67836daf5d7daccca949d36de936b49dbb23aebb5913c3976fe4ef26164c911fdc43becd713943a8ffd2e263086b7ca705fa2111eab3461c04220df4fdd99d95a615f9d1078e3a5dccf0af4e9c7636fab54c787f6598c231599664912af2f5cbb251923523a5c6b78a533145b215b437fd23fb8df90743352f7b0739963a3c57f68a0f4396181615e4b202446d6ee590983b8a41d184cbdaf9c78b3ca19d7a7e0ce1808e86851d47b6c4c07bf898fc46dd6da68d3fb1aa9de1317a8eae815f8d26c85ffe41c0576ea662473f74c7bbc0c5e591dfe06b97fe36004383027023aad94dab25e59be00c8cbc1b50b1b8efbebd4628aa80b9c6aa35ca99ca5c388bc5ff8335e5c6f0e3ce381db23f2647ca461245ce9d0070ac58757d46f66778687100c40cf6970b506e7a5b0fe9bc2a04969ea93c5a9eb4ae8d3d94d87ff7d793765e94b495a3ebbf1a8183bb3a0022da2725f6903bfac6791c1943e7ab2a3eff1a2bc1fa425fc92c289d41610575d5446a96ba37d23d61e5f45ec64f1f7e32598e4d5f75b586ede1597f78c9fec7a764e4a4a8c3f444f6d5552d64e4f4df0b2155e64868ff42d306eda8f34d7b814bf91b53430ab3784a5e97665129aa1b62bd79219696cc10ebff43031c3e9e5bbbf8719459a1bff441c2d302724b774bfa4f5503662a06eea62cd8267d5398ce493da8a3cc2598c4bfb05bf9306a99b55aeb5e733edac7a59d75f8198e8230cab54a2daa2aa3c948fccc8e2e38669491cb2a1e87bb3a572cd2be80d85613a2612473b8d080e75ed4d3fd94f8e39d5712a255c09a6ca2b05251fe09d9823b4ebb2cc9021974e8a3523be69c6b8bc61ddb32fb1847183d41f63e67a7af7f81c1f3906c6e3f660633a19acf843d79f7af4bdeee3a8d0c16c5de67691553eda0e71604768d076a31315d163b5a034aa36748462a898ab0671e6238000f0666402eb498d248bd9827e360346d72794d5bb5f3e7da0eaaa827a042355470289673f9e0ee731bc307bbd64888e9f52e53304693ee503a782017db53af6628a8e3dcad43672298534f61075675d6fe1c7307696aa56872f222c9c82ec1f2516b6c901c8d583efe15cd884ab7776166405e3a380d88ad1a1f70c609f91fc01a72be623ac39bdef06339289158a35f5648563980fa6d54fcce9a6d313c423a09a8bf110e3ea3e0f395b35cf1e2ea4580f8e77c4506ae3155f6ce258db611dc7ce351b971514fc4986e7724796a7cea43976c05282e3bcdb30c5878df8df4ab2d4ed35d70e940908b9b0578e21d779bf26585ef57a1d4984eed28a6689dbf81afb2ac1ce7f70ece29acf0ecb11eec8ff2d967b3c5e53f8cf0b5109c76ef172d13fa2616a105e775b8f4252c87510840e6963bd51032ec1c1c3bd88c025cc12c3027b2cb93f76ccf6a812532a858f2a7d9ee31921adfe0c01a5da35ce4efdc36720293253718803f73f5436e8588bf4f03de6fadd2dfbe11b6e499096321348372c66603b5fe7e97688c5584d51b510dfab5fb6cec7944571261350eb667be4fe5b1f5d1960fb83d50773f2b2bdd2a45b07961697155585ee130dced372f3039f820e3b79fbe755e24e5bdadd835334ffb36fdc79b1bb1a9f00c84df462379f9b6befc887e1f416635ccf9f2fbfde3f7cced6f87b78f720b9a4f38b43b2ed43f9fedfad1d3bdc243cd9f412afcfc5d6ae8defb4ab637b52a78b7ba045642c68fbe6f1ff082508123e3de333ab36c5ebb5c7c2a31a9f44f01d51e163103179af9992bdabfccef20df3e083ace33df22ab9c4d5a28ac1440367964e911da8c4351b2fbce8e410e42a4f8cd3978b71599f630350451f2ec9ecf860e70704077b5bbc5cb159eb0a7035ecfe350030b10f90006a83f4e44749005e9eed29e470fa63622c50f78bb308833fa839d6035545d451f7500a94375257a6407281df5ab51061d4095e6a20322c0a7cbc9ebe91d11b0d43e0715f70c6c4c9ac0fc3444389a6ba8fe18172836259982b20bc569a3ecd40cd998111eda2bb86ca3c5052622d2aa9d31afe75729a2939b9ad6f2150d5f9b58f72e2addb4f7e4f019674bc309fef7f862788b9c1890831451c507bfe230d5ddf568d24a35e14cfc634ba6bf9813b5ec47c89450d0502b04f479d48647c77b0df2e3a65bd20625ba2fa318697b30132319ef2a6013308db68abb179447e3030e7ec0d6095bd739f53a74bbf1cd59bc3d32fdc6f0bf294ee50ae2474afc64de7fa98f0d52a751231ad00cd7bc5c25063bd4a0f42da1eb3a57e0223ef6e04acda9c1b11e1a25a33a9c07352a71f6730e90de7065713cf0d7c3be3b9b62434f139ae8b8e94b198af3b472d615647e41eb84921cf4bc759a3ceab7b84e414d5f2f6ad403a838c2d08f60e25c89e5b2b5c5d35d76e75b76c3fe01494ecec470cee2be19c91e9796de73620816fb7b3e4c504e742ddbeeb7d3d8e417f78e10d527726ad9dafc1041364179e0b05a0f62e926615f8c6086ba878dd7b1caef3e98e4861c5eb327365562486635fb109025c237f03d6a587adca169cb85b51557018ffb81e6517f0638fa23a11e6bdf2e3f5d9c1dda5d6c30daa2c31bb0259f2b1d036c018897aee220b997158cec15d772f0cd5923185fcab8153f886857021db37e234a20a9f47b85f32946c5e0beaa04f264bc8450a8bfcabf0f6d0922a695e10f92c8854c8e350ae1a99889ede36d2541fd77f6619a2fbd0e1805bd33850cce8c973c3aad24508f69dc83ae58ee397e90ee86d89bb9e193477c0eae38f57cbf938e1a10fda64806ba8fcf2fd08406c2708a71861ac998bc25146ba49ca08de00a75a8a7d12249b8b8ffdca6195196c7be5169b4b299f2fb9eb18b996d6c5454731de9727931026b6a7bdf331726b35c2d05f638da1d67251518500bd8bc96f72200ed4b28987a7edf1ed879f09a83189396b7a65ba5c1bb516d077f68984aeedd2e7caa501ea6110b1433b3baf983837e91bbf3618b8e31d58bf8794d91d6d6cfa8efe7facfbca965e433d9407c36634760a0e2a231b31bb313778f88f2bf78f127b129da2944c6dc75cf5c94010afb8c1eb070f9848c52818039e74c98f9000fc50d5da49576c65701c2092a37843ee4cf98a89b7d381264ac8641c0746bbcd5992403725dd0b00cf593ea185a54999ff7741b70738e5fb1b50dc2db7a297280bfd811648d13e97c346d46a3802b3f31e7ccd63556c31ba06e119ef9c701f6b3bfd76e1109bf53d0e93b0bfdf6ad9dd6c2c1a2185914ba35c47b9f91b1aade322fc2cc8387643f94a7fda4349ddd4c55ba953d48b739213a7d41b7feea7265e77b274c4829f613a751b08c6556d0d0e6a5e420e351af42221b9365a3e63559f8f4662e4b0ba2fac96846198ec13c8dae69340a0a174d3071404b0a1fc16162edadbf401458caf3e7f7ae2ac9da13fdd9eb34c89fe3a6da4ed25e68eaffebda18a0a85269a7bc0545d04be690a216268b016ce0ec0649439dde87be3b6b0860b4af47354c05b3d193df214a2b40150b02e9901f11b81a684700982e768481aeb319665b1743761002062b4aad193ac621dd76dbda07ad8ee6c18c80d01f4007e009aa3f558d5550edd526c74707fcdbd87584ad8d0052cd7247a8af0ca8ed6443d174cb76bacb2431aaf621d77cbf718d1b164d77f970c6ebdc9155b0e9a126f3934fd18621b1afbbc455d71168b773f8e26472747b1d848128b0f1ead479440d7680a273d543217a1fe630f10db2da51783104a2b8e60c4543321fc2d2a7e9f6d1ee572a6b12745754a52cc19079b0e070f9333725f2fee4258bce924f28af75284e3451f3e725e6936b206bae090dd072abdee0b26045a70357b35d0247076dada2ef87422640f4c19a0e98f1948130b6bc19e3b6adac36634379e864bd43aef9e36312b5358ba43d5cbba4c12b4ae35555f7aee7fc051d5de6d4f5d5d3e55085252f36805deb278e2a5c7d4d9639aeea2ed493103654e3b5bbd2ff7d6f7a88dfe7597559fc4dbbc6401cdea5abd25f7cc135e06eeba497fc386b8ae1e8aecd0b2d3111d880d8c07ca59f7c939478ac7a50b97de06a582cc9417b5473b63560df056823a79cea9b03d52c6c969cea1315ccc7c6fd65691cee944322a3907cecef99206fe690f0f652e36af72c3d85c60b11e1092e4279549f79eb7031b3d6879aa627997744aa6165ae14dbd2bf621f440938fa56b3a6aa6dc856ea7aeb824309c59e7a10d01aa130005faa2fe5a062b446484bc3422d518ddee0307c3a45f28f20b729e8552dfc2218fd762db0d497d9f434023e12f76c60e3dc74964c6b60f4cf8191979a34425bc79fd1a17c6847445a70fcc1c762ccf8b8e670863b4189ef08a7eccc03d35f4b0b11ba32c6b19878b1310a3595c7b54db00bafc30a788946c90e13741d310ee4309b1ce1e8109be89ec9b9eb2222eb23708c121bec1da790d3bc2e635e55dde2d19681ebc354083c214e05e063156aadd0174e1e36636c73053b4480d37277e849317f65a5d829c6a113d970bcee0d9fe021de90ed8f667752e591af8080a50a719c9010f50cbfafc1f7f4a9b94e475996124566345d7423eb0f6ae57d72c6eb554be93c533193d3f1862c70f2c8f45f9186c9540f646765833759c99813fbf25b87839c9f053e0afac98cb7c422b508efc8d0ca93df70e745b52445b29240d0f2c43ccf59829df649f022080a4be8a29de7d96cba1de34a21d585671b91853b8f27a74fcef7a00b4479ae3112f6a8da9997046083b01e8e821edff10814c5ccf54f1993f73ed2b6faaa0af431fca737f9d2c820c7b362e804d9926a15b6fb53f599a013f1d73ff1fda686a6cceda6af6152c7c49aa09c68b44271d51ba5e336375283a008b66c7b2ddaa928bc6569867bed59eedef8e92e7aac16771c06a1e498409d2e9664c95cd52a6e7959d45d1e70887d0844677472ffedeef5997e96a9be7607a5cb656bf384f4a61873681b9134e03cd6e34962a17176149d58c9cfc6732afbfed2ce38643411c605d814f7474c1ba5f8a81b4d6350a8899d7b6123e85e8eb9123807742794e1a2bcb2030e9352c03f49f526820d6d53a4e9f0916985e2dd632dad3508bc5f89119a83e9246f0d3f4f9dd3e075d084de126001cd794bfcfcba014f5d857db80b82a454c4a6e285a44b2a7edbe570a50846c8b579deb0bc0d7d951a9cf385f75dd2697198acdb225f579b06fc58d1912a7f013124d366eb165567c9cabced4bce75bb12036b78ee667aeb9e2859a1e757d558a72c984fa91c775a3ccb51f2efe9ef1c339acec1a0bdbf9b082b84d0c88df1009b81e93da27c05fa64d1956609981186a56797768f3d53d7034ffa4910c535870b16934a54d8d90dfcf37a699553997ac9a2fa408d7fb2d4c2c2253f51281752add92410388ab1a81be9497a8e980e90dfe300f95498ae6693c573983f8dbb701521cd06cfe46ca47db5076c8ef48f6d1227bb0f4fe0e93be182f7c0a82bd01bc27ae9ab16c461c92021a27ffc5d46f7c9b5a4f9edfa1030ced7448c0d10e75116aa4a8fd101a601071431b76d98b4378a6aa68c08cfdb0fdca2d70766d1a4a8bc52ca37fb1966403aa8434eacaa487b811180af4612ea5de25438b1757eac2b484276610f1356c42e0c8eba4ebee18fdcbb9f3d8f5a390c8bd259c2c6495e6ce2f2f5e689fdadab2ac86b73d1c487abb07084d9b43d5b6356c984844e6f6cbc43819ce444267ddcb2f96b818188d40a647f69dfa2d70e2c6cdd07e4a65aafbe5350faf0f6f4278dc37e79666803eff8bde416541574e4848ef74c1647a3bdc257987023b63ba09b53d16e9243db82cd336de95aa6ed12e35f4839b77ce8b439a2d145f4537430d539bfe6002e39f2fec50315f9e8537c89fc3d60fbc9a21274743910fb3072e08692d6fbe03f8991c554559df7210f65c6faa12e2e8c37a1f4d9d62549251929f869b708aa590b4e2ecf81055e1f5755a911f06e4b6ef6279bc279c52db5da76fb917fd72220e9c79bb9f2ec5cc9687a79d68b43bcf0ea52c36ef6a1f582d42b59cb60ad6f571bc0af4e81d4324f2dd733581214d9a8624b1b2f22161b32ea1b9fa1dfd7160ffdc6010d9200f7dcc601597bab8433fe9da3f71f433bad9e76ee5660fc1425f89a4f49df88b25c495de25017d8a6111a29bddbb38a1ccbedcde910d9ed3b89cb73086b7d4e098482544315190dca4533d88a353e9598535e4a15b26cce7eb0fcfb70d6440b0058fa556e8d5fee711339982232ea3ad80db461bef84a51e2b5bf600788d0bea52841402f5eab0ce076eea476a1716c7a4eca5539167df15191a80ec88be8d3d36045aae80300a4624d2babd65502c3cc579df73ca88949ba0862d71f144b518952a9e0330b59f6f223f70245f01fc0176f53cb0830d2d5acdb698e378e2a43477c239aeb9e60b6ac8975846589396075d20be2e582ed545bcb5577cf37769881b9ae3188b82281c754cebcaf01333e4eed8c42dc1f19583cc2c2ecea405a1d77e2d2110d764db601d30ecd43c1221b1ba9d841cdfb747166a8aaebf210c4e66af3202351f2a2a6466d19f8d621a6f86d6cf4f8cdb9cf1e4e9439b3fe8eca0458f4163b9799b51a0cdff7f8ee9a545ae4764f300675b737adba8c358a0ef20b7e027f4db6fc780655d1eb4051a33d4dc320cbb4b69fef13daf2d69fc359101015723d0358d890e9a18cb81c79882bb69e7c1675aea82da56618947b67cd09ce6baa55e3e06ee1ebdc9ccc60bdcfaccb740fa9510975f5ab2793404d1fd0ca45b06b041d9b2d352622510d23f0f504aac0710278d3402a4e30acc322fdb5feebdb5b6643d2f0c7575fa6f9413feabc84607b4082ee0755a49a4eb7053b489b4fd7c9a4d00ffc17da2a7b4d52ecf463c6e506ac2016bd0ae65745b5a8c2bba7e23da522985b69ddc716bf32b8a9824bac850e05fb2b143560d30a1d2b48ab2258158aa80d50f855cddd188845bb9f2027cd0a664c14740a9d407d1251e0f02913525b4ec0f20422d5e27a9369c62311a93b15cfe45f624d1641eb042ef1e509c9d8ca7474b9941ade1cee0b1b06e3a26815be72242fb5b2546e8e96a4c0c6960bfe2a6c063c5b672c8c7b0f195d038f1d32beb05d8484b7e77876d3c573b68ebd09d2fc5a9e2f9e3e6099bf066e9171297be176de92cd4d2fd7640bdf12971c43cb5bde8697e19538f3dbd4e8f96bcd51076b30a28e9dcd69f4aa89135e645de0fdee23e148302d2b8a5bb4e680900ef72b807be87452715cca9b7aeb33fb824922a19dcf9b7f5377570f4ad932446786014fd81ff0b3f04ea9215b65518a909a7e8f249f2277790307ad8da7958aacf97a270bcbcc796aadf0d8f72780c94c56457d3748d365f1b4bd7da84d50e3a07a5916f4759907c1189542c0ea89ee088593d38ce6984ff902f9a7b60f33b8e600160a2c01d69de50c610829b7ced242df5c367fc78d8850e9b1855fc02f93801ec8c7574d9169ce78b563a48e2531f28389c73c4e3e574e7050ff5a7a26389c1c6f02b73748d9652e66af3cd7080e95910f8711403d0c4373d0a86932374d797e048a292a85a491b6c16965386c2df9a626bb62bf850fed1130fdce025ec36b8ce3815f56db8889ecf8aabdcb4f331353c94401fffbd49ae7102fb2cc93f350c977dcba0eb11b0f02371633c35f4db7fb4a5d8908f23ebf55fba06818866c062f0b2125b3966b45bfd8c01f24191c4a09e5fd93e543bf5ed750776e241934720f554298eec35eea1290f6815c5272610cf719d4437dc3456be6f6fceb1207d2c5820960dd314f537e052b7283fb883a401d3feb2015ce46cde494857a2995ccd92c92781069817e171abeecbf030141cf9849c5099f16487ba3b6cac5ffa410aba1258791220b0ac7fbd663361ea446c5b61ceb3c3fe16189646f37e3df20976565fe78501aebb63ce944a5641fa7ba737093aedac6dda2246ac421c2814159b392717b8418be1920478794befdb5dac98ab9387cd16f9b768496ec8409318f37b78d02a4d4c549034add31b6cee317221610a16383f98637115be572c2c7fde4bd951388bd076c8b468c120076e91c17cfd01abf851beff79c1eac978c11ec3d5aa7bd4037d911c99db3e3d2354234a3dbaf43c250e461d0e294c5680c53e0286046ab66f797f0a391e1a7f2a9525e38d51704edba511ad7a1794839211f08b8e3d5bc936792889dd2a89fe9be452c7035d188e3c7f85649f4b3f15fcd24a214847bdffd9be3df0e0a5dd866f7c944c3a034b7543787501ce053d3959fddc97d16d59010bb2d40b6a491892906094742480697713ccefad837dca610ee143b2e142f234c65c82caee64d3fbee6298c50fde568eefe9efac6eef31de078aefa17fa1c5f1a3badf2dd73e00d1475d82ae14b23c0b38176edc1141e4438b9619df619da31efd3bfdee9d1b5ee194a9681bbe750211ad9d9a6b17ea886a84593929105bb7fcca869f492f8838042a1bb3ae093ee3a4337aa69947951170f103b80a95bea74ce161987fb2866f88972bd53d345918f5b480e3afc5738b451cfe0d287c88856f67d6f1c0ea89993343004df42a4ce710c2d918e06e07685c751be4a500daa81704c77d1141e07ae25c06602721124da039c8c59ddbfd48b7c7b32faec534ffc1351c90ab60233c2b889fade0dd13cc1347a5e4bb668ebaa9c7d49d9de1994c6f8b690e74cbca6f825d64e3dda8d263d9d992960db2b949ea9178e0b461723d4814d37f754dec77413020258fb140ee54c2248be5128120a9102963df3cdc16da36db7aa95b3d238846f4b02c698a1f2e3f2b7b46e0a3ce5ed19feb9b7572cab8a69c7e320d40ce81622d81e18f91d15f1da91b298166dfb6ff09dbc076dc243a59c70dbc948be7ae3221145522fc4962e222cd46df61b7f410d8479bdef9365a9891463943ed9c9fbaf5d2d5fcf08315a4d68172ec151c98a80eff96a7198acd5a2b5d5a997d05b8ffad7476f3d6d8c41729b13a8a1c9990958cdf0ee46ba8dc7126144a6ff4d3e73b90fe5a9cb2f8d4c362d912d945c91882b5dcecf3b4b9a0e6d41721bc7030539d966d3eb4968bba272972da4f8fa9486476622911f72bf47986ff84d2f3883cec41f6af66c3c43adfba6bd5e165de08f000f44910860c0fd2e232a2e44c0c047a44f67176eda20d13b506eb24dff9854f596711269290a2050bed0761193a180464e196144ae406d3f8307ab3fc5c2e131496c2048cccd988c7b4969028d5b317df71fee5f41fb105447df988f8cc0524f6c547629beef80264a6fd31a81ca4b6e84d166522c4a9f8e2f159b0079a596e7333e8371606004885cec24fecc7b23597a897d9906b6d89e29e83dd70323d95b08f50253f9da64a8229829a1c906824e9279c6a48fa8f8b16460807bbc08e909f4948240d7f0a9b75eb002995ee30d2a630cc848f5c58d82c3c8d9a207fc156d92590ac7dc5891a10e1a58de12c62bad3fcd298fb82f1f92834d69d3b23ab0a488d4ba249daaa825143165bcd58b8f50a44b738240344223a914d9e1e4a612350bb125a2e9ad6df8b85b2f5903cb74645d59d3973280b5ef3905bdf13b66046b29a1a37b8a8fa60275ac13fda8e5241d3d4933774494a0316ce8bad6ccbee5bcfb3816bc24cbded0695692bb44a3330e6439318e7f061b33c56fd452ae0af410be8cb5926f2a08619b332502714d65b21357be290e8f013a801d3eafdf086fea475f6001cfe80835f5862fc80016db634af6c6726024d662c276cc9366340a456a29dce6b447aad8e79539ce532bb9732c2279e8926067f627e03a6a1bd49733a870fb92cafdd6e8267a2475fd2ee303b8ceb1c108f9a50155d0d5ed4aed40c689f8cfbf13f4558477bc9288256c803eb5b89d0b9ed4599c49a45d31bf3f6224b86e121d49efb6440e1982973dd28b5e1922831187084255e4ec80465ca98bb4cc8d8f05465678e410cf524dd8ebb9b7ee5f56256aed3ef43ae77d3e6c421cca83ea7adf5ce7c551678aeb443d5b3428743f14e1d7d61ec5ec1c7f75e703017fca62396e73421b8f49e7de02411f779c56c95d6b49bb915201ef5c8d638283d3306b0891e999c7a1060e22e2d1ffb3477802de2d243934c544a2f92aa2c71065e5f041430f691e9abbf1496ff6754c32fdf0674399fc0662b88996f0773812d66d7acb91332b16f11159f319651f49e666e381661ecde1da46d7d0496347a4726bf636374cae3b819c16d71116d4316639648efc5e048ba9aec123dbd74982bf2c1797cfd8c7a238f1b75ca2e7f031ccc6f11023da9f2b34060023b6b2ef41566399ec089fe44f8427f767d744335336727f0e1e9d1522ec9ed19da6d131f11a895fc35cf9aaa7b27a5a88ca9f9c97daaafbd52c65c54e1815fd6e24d9119fe9d2087da1a99cfca6223d6f78052e728908c885bc2a96ad6c493c8df24d0e243fc15abdd54ce4dc86585f34bea67899aaf14d2ce710c088dad246717019ab97c05fe78bf546d0cdf203e4421eac887f4d587d0b7926d33e8ff93f8fe1b3520380e7ee5f651724b11681447400db1aef792919f1de84ed82d9171d69ffb1554fea45c41ac5f1036141aa95387ca473449ebd2c33d886c562361afcb193978f08ce468492cb2c0cc89f0d4d3ab5559799340d174742ccd95fd502623ce8e33119c2cee87ccb4bf3ee23d11c8b629ca550f9fabce316f36a79d01cd695160333f3e27e432b602d49d5d0e3be40706834d118fbe4de668903e877334f98b500fa90ca709335b986fa83ae02e849b44e0ef3ce92da8b62b85c7ff4bee1f381d330d245dae0d2a21b18eb7de3d5c21164df2f1bf612977ce3417973265e56558e491ba1495865e2c4c3ccde708b11194e7c7dcb14b2be2413fff1264e66bd5cd6b809e16ec590179d96dbf5e623820b96c7d245c72205cf0302b887379b34c476c07a14408766e563a46dd52386b3a43ab481242bd42dd3b432ac7a036a9442855c3012b29a3655d310b9bee3404c0031b2d635525b0235533b957e818cedb7d9fd0cd68e268f65ac788560778ea869542545a4e4ee67ee9bfbbe8ff7c78912adb7aae3687693191ed4f11a8f54147e91902ffede6689482291dddddd3b8c085908de0758c2176f299b3e3fee746cdcb431c7c14e474b7eadd331b76bb7ad74fa96d3ee1de0793fd35f6e2aed1f42eed169adc94d79b613dc98c06f467fb121bf59122efe6629900980bf590a7a78462a82edc3d722431cb6a277c36e38501ce8a5b50897bf6db4cfb93bc581c79862407cfb763f9e5f0f47c222fcca48af77636a3fa323b5dc05eff5530cb0bc6b7fb99662c07dedb5ddc36ecab3e70b52ed01fe21e429b7c8f529ec72d43a842c1fce1d8f42b80443a8e232d4e109150c0dc19a0b8d8427cb9284942486f89b2511c42d7fb3249624f18a804e029c25810fa39002884e8a22abe2d9182ebbc4185f0c824c6125094bb002a868c78715bca22c5183254950d8214c9e9dff5c44208e345be92c808d03249925c1018f7f9fbf5912152489c9966008e19c70c2e9f24c50024378c3137e836c4e21fe78f8fc18f483cf974259e65399b5d65a6ba9b5364e5aedec99d55e0d5b6e5e6dc3f70a37b789b96ec3989bb39bdc8f39bff4a33405b6a4ccf9a6c4d79b12812291a8e419cd409a814575250b9f0f7dc80fc02750ca0658e09105217cbe6c01f6cca730e84021d1cace4f957765e7d5775c3c3e8c52ce496194724e4aeba4b55a7baf66afa66d1bc6dc56398eab5d2d99ba6a32713567ae9e4e2dd4e565ea9e028a9b30b6ea175678d52e4755f714f8fc9717ae6ad40d483cd687bcde60f4b65c418af937bb7c52922460122251a27c98140910515c5c605e0d16e4508d9c3a360e30457e9e2359600dd1112cbcbbc05821858b8407de53883a49ee973f176292fc3eee1dfe10c6a84d095f846f7719e20c307c1cb5196584523e9450e338c6181fe42d40a2f524903401fc22157ea36a06c3028fbc24ccca34b2045a9a525b603928576342db92d82a9fc14cc0cd603d9d0b7f33244933243f4072454662c509091447c05e705ab840232e9819890263648998999124323323af19147f33233ea4808ed0e28318f0310dd010efdc0c88490d7cfc33a012000179e16f86e4888c1992133c3d43828aa767482cb1818f6920f163498035d0114710fea300d1ec08a13b3b4248035f022344516ba004fd57c2ac73d69a23cc8eb0471831e7bc73be1ec3e31145cc8ef87112844c0f31311f03e3b50802892d4e80840e821cc9810c17d6a749099cc0c0e503a0d60c7ad001072b8420850a88b4b8b1ca8853ce8985cf39e7a4c1e79c73ce2348e69c367cce398fbcf89c73ce13f89c73ce211cf131b28420644cf1d92dd0507a9e09203549f840638487183013f8c080f5fc904a1232f3832064745a78b22b6224122b7c609040e142c5fcfc1cf2e46f662409528b1e971cbc7081ab258acf69899e9cc4079391179092111f8674471082f34109f014126c4c84d08a0071814a40020b040448457244088ae4043d938a2124124b7e5e40c43943e287cf39e79c4788380c7fb3243b1ca1c2fb0a45348aa010f06380c8f60705a802045f69e24ab62e28000db209caf7902b7fb3224245827e4cc9c1506ee16f56e404bc6724e4137fb32240949071a8b1225bfe662f25bc8eb0c3e56f5644c92402c44fbec8277cb27301f2f0442edf9e90c3fd8604a1a55de17365d083952d68d557941fe8ab89199700913a2d3c190b2dc860bcc7bc807eb410f3aad716bcaf808b44b8020c17c36597ec12b3828d02bc84e06106901710adc8b964979a1dbc5a7cbf76d0814e196d702e305e28e07d86cc072b7490028813d7cc08253c68203131af32a28a1148e01b7f3323aef0be82e59915499a1dd1e26ffb88f0df09977b58727872534ea939eede17350d6ab44451c801a30ae6a0013661095d701ff32197372f5a97c3bed6e940a166dbe4364bf4b74e070a52d370abdf8d39333b54577639aa7c5d9f9c25ba537c8994524a2961c481eec10671ea1e661841840780bf59115722b633f46dacd28fbd625cf0d098e68108a4225e5c7bd78c8821ac4d419c7b18202284100922a284cb9f9ca9b40376c14b6fc2af234b3a7fa7fbe9df9774e6f04fee4ba5af9d03f09b52a7e7764fed805df0fc8f9b764f9db60ed805cfbb87a0889bbe87a08873ff78088a4e32cfe53765ee75e289a3311ce36050dcee2fa5e74a1cd7d2d2d2c2691eb88e7bf8dcac882ab322625c09ce88f8c1b5c779f71d9e4fcf95fe54ca9a06bb1da692ce2fb9cf1ca7a3fb4e63311a2b8ac140ee0a6badb52f65758981a14d3ae9a453db2e775fae951f971bde295eaecbee3bdce5a9ee3276fa2e95f84892821143f6d47c973fe0f714387c2e63015307a57f055943c696424471012f475a716fa6d93dc7d83d86c3d8fd53bbabb496afa514924431471659f172e40c9e4a48572e67f072501f5fdae0e5e0e0a1e0a33e95b2290da38af22209254a4f2e8b2494282db92c42e9c865514469c8a50dde0ede01de1340cf4631010768795c4ba947a1b4e55a3f7993da6f46bfbc8c7ee133320f03f3f202f3b231e45a78445a91962f5a5291d1f5954346fdf6da85eb1cf0bf882fa35b8e64f449484667ae73c8a697d126ae73c8fd5191d125ae73c82f0ff397c3ecce010ef31d8fd130fb45bb68f9547609041e9350d467ac4fdda98b4719128faf22a019648c4b796b114d341941069513462a2edfc7cc09a46b5f64fc723c39ed246740c6787d7cef53ada3fefd52e9b99843fb0ea7228071fa5d044838dd780322436e7a2251b5bde0c3bdfd3c9c4b65f7e62ceb35bc53d989cb5dfe78e18b143680df873614f1fb79b760da80f04e735103e441a8469c7642ecebc4ab6bcb157cfb49e5dd80bffdc3e2fe8b8ceb441bf04e650f8b972b7844c582d0cdde4dfc18c8e4151d0f78fcee68073cdedd11bd72df7efa898b972b50311a0ef729a948ee2d45b26f3f2d453c7e9725ded0ff717bb2901822500271aa84d3ef9d10fa7dbb3b2645158d71faba1d3346d849273315b56c2fb66ddbb66d2341863c9f4a2f765771182993355edcdbce1a722881208459628d2c63d27e329e6fce3132cb24a28fc170eda54ccaa44ccaa44cca6212efdc2b89dbd7b6e9e7a7c8bd2221bd1b1a6d425f4756241311ae0829066fedaf5af7573d9065ffdaee23f6958bc7dced28756fea5ee060dc2e6af72fddddddefa621eeb5dbc67539b895acd3f6c5a44d49166e76d5c3edd74dc3fc12e65f68d3af5a958a11ec76d0701a8608c2eb76c4eba974eafe044bdd97563e10ee1eda5f0c4d38ae7c3acdd44d43f08a74744d6f9fa32d0edff4a5ef30c6b987d1283dafc99aea67538bdf2fd995cfca67d55af9ac5c26246dc252ef5ef94015accb2b4798a317d94905454f0c41e1e22bf0375381117f2248280916ce71faf05944b3153ce106e06fb6821ffcc914aee26ff64409c7af02f9cd9e58e19873ac1f7e392e71f4b76da3104221084b0f19b0753b52cf72b186b07eb62e0785f76974e9a9beafe9d4c7d0f1694cd6d05e06e6e5c5898bb5d6fb34772e48ce3daeb5be7623fdee85edaf8fd8af162f0c60447c462a1b82c71823471f6afb05f81472faeaee99cf4977afa1bb3fd43df31d1be86b5a1f01a7af6d1610a77be0bf81d318da862cee59423a8b881603d3b0864096f6f55fcc89817d445ef3f45ff702cdee91e3afd93d72ee593fbcbef84e612fdf691198a7405e0d1a9337b3f56ed060ee31deac2135cf7df7a6cf0f83eeee02cbc5120259f45ff3117965fdf0f829ae47fdd4e338138382f12ef723c47fe96f38bb287d18f4337d13fd8e5e18ef25e2295da3f3932ca3972584d3d7fe6af83a9246973e86e63ea51f87a1b3ce2eddef63b98c6476bf7cc36c1a43ed974d632efb058d512a5c0b6b48855b9f36235923bbe4cdfc1c63c4e7e3169fdf55b145a7ee6b147606c0d34edda7cf6597ac41a9c89bf9d7b4fbcdd845a5d7f09e5d1db7ea77254d5bdd0eee058e734fa9c81a14c8bb8125a108d2109306a1c2e7b386401687592ed610d68f9685a2ea4954cdb759280bb1864015e87e91c96c815f44c07b1e12b0038651465a6b4dca58b2133cb5d67a9491321172cf546427a8180177c8e34665bcb90f47eb2664f83b9447ad79a50f82fa273e279d957214076a78ad1595008e356dcbe1f4bef03ee7b4216f22c710735839ec784028390a1ccb18a1dc4af0377f9d8e8dc37d1fcebc1c00f8b5e17706bf3238d6b8a837c71b17f56b01c758caf8f056922f05b79d8e4df37b63d5e8bc7167c6aa84202b4c0805d5208828288aa027829804190922d2638290970042900e6a00838862501432e8892026468288fcb84b6059220b6d09207048825aeb8c2550f083b684eb87fbae7cb7c08287ea035aa58719f335e041eab45063adb5d65a71906ba4e49898572d11b4840b9618e27d85a2d7b37e37eee38711b2b47fddff5852430d3e32a7c1470c975f838fcbb5e7b08638ee6bda521a7148971f3c3c8e9747007de256bf7e2ac4af5ac6a3f16ee2732ad4783751013c7efffbdfffe552aba77d81a1351cb872585f1c1607be1cd61507d638ac290ebc71584f1c1873584b1c98b3dc56c2c1cda8eaf4953739737cb94e4b1c78e33a1d71600c5fc4b3344b2ef12676393a195f374b9dde707031b2ebae842fe6a9b3bc9137f14a8df9bba6cd6a2dfcc67b84a9d47178d3ae9cc18c52431303466a46260606f5e2f2a2e5944da58ec39b766da55307fca2ac0a150cb51c814c08118960c2c5df8c099e2026041de14a22414841580459e1f08fc07a8b0c9f7382c80921e804cc0920fe664e08e13df30784c3e79ce069220b7fb326aef0aef96b02087cab02a714d96d22d6c4ab09571340348183a559fa2d0d8163e20a7f3326aaf0c7c41426662b04f53021b334c02ef83482f51514c0255c7cb6048f9324f02d64c562fac04915273570f202229c0cf1377312c439fe664e8e387971f8d7898bf7e9244a8175164e7670c2c309fccd943052a2c8023540886111338a213521830d1b2e296cfc20ad6b89eb82c20aa1042720808d1f6e4cccab623c3145469072ca7aefed41ee4f6683cc825c2533496a92e4c351894a13a2265044253f6c90049a3511329bfc609285432649fce61024c380c9d0bdf7de6b6dce319fc5d0e3c2860d283a2d58699f88f920419206367e48827f9057e05044152c569aa0031d2192e84113396822075782ec308300791de8b4b06dfc709930b142effc1865a4b5d62a9468a1a407bcd65a6b7d1df2468509528040a1a2c4090f4a8c98a244c81549284115e30263c98f25449608c941ca053924cb0977e67df21e743e08e89fe6a48f5f79f3027797e132cb9d39e7d401f9d53ce542a772f713f8eb905b6b2f9f48608d1fd6d6c7f3c5882ac98778c2cda5c09f8acb6ec78cc44dc837e6dcf087811590d49031f7dabfc732def0f0386c4403c08ab50dbd444a4a2fa7b7b7533ab6c8e5a7227f5c2752ac9f4c73fcea1f1b86d1004be4e359830762b8fd1a7c5cfe9e0a3e62f87b38b09b123e294b52eebc695a42b8532e3c9fff31fae1408d6b974b1a6ee0e192e229e3b5156a256e31ff1a6b116014591546e4ba640a13200e737c4e08ef0f83c90fde67f0ce29f9c1bb0d19fce4f1e1dd1d5400940509604230b2450e985851d282142429e2888764e3877b69aa3c00bfa738bcdf60a0157185609fd41fe80d6612f9a5cee8e1c4ef5c0f273e278b4f307e3d9c966d26d978b0c85ad2bb11c3e51f7e9797d760efc686fa4be5ddd060feb6de8d1bf356e8ddb0f1098f2ff3f5e8dda8335f7fde0d9a4ac2e3c3f899f46ec88f3cef468c7f2fb75207f8a6fd7d5be9cfc7f76a259abf9c667b1943539e1a607f3128d2211162748f51c0e82e83a074973c789949148717ba06f862008b10214651eafa1677c4e1c1401ac92045f0f8370a217019119e20c1223ff0f834063780e1e1c02431a0c685eb6a17e4f850139ab1dde2f3a7d0c399f1371712f8cdd82f845cfad8bd28e734dd497544d5355153a7e34595ca64ca0f673e97834e187eecb0830ef870b4c797ab2e1bc69ab6c56043deccc75b377ffbd7991e630e7631981e73cf7510c89cc9747ad36f9d8e8d9f36c627d349df87333bdccd1c437edc71dc77f3037b28f7adc56fcc256bb85c3f3fb16f2df9b0242425ff8b23210e4d42420f07fe6791e5f7adc5216d691799d4026f2a66ea471a63f01754b69852d1bb315fbeb88471f97d7bbda0f270e47f162f136cce57dc8fb6e44d7caab98c5181e4c89123db082d6246ba12e634fe8c4bcf7100e66d44e6def4dc9b3ebf8ee434f798d35c89cb98e3be64da7d6f23720f4111d7e112b77b748fbb9cb3911cdb886dc43642a220970216f45051e5f563edd1cf4fac3ffbe8a7e80707180c0683c16030180c0683c16030180c0683c16030180c0683c16030180c06437a6d24868ca87071ed79664341a7171899c7b3a12120ce3d4ac86ce807d06c0a22326fea7eb68cee9d4c8ccc51aa3beaf6d1d151172393df24b37ba09e9b81fef452ccdea87f0ff302f5d2e2f2e2454b4b4b4bcbe9743a6d24a89042c56b0a2c1cf7a5d2f7cb7ff6cffed93f3f3f473f2f2b2ec42e3e5fe9811a4e81ec88a6276f783c79f393721a60172f6edaa2adf8f2e18ed7c27cbd5eaf9795524a29e79c734e4a29a5b5d66aadbdf715f72b4ad9e9d0b1e9b089d844e8fc9c5aedbdb53e8f94e2777261077aaf5a70bf3885691701218410bef062641465b218a39552ca3ae7a4484894c2d7ab4abb8bd84564f84f7321caa7d485ba298fc471c628b44928954ca6687a6cdacfe94ee3f812ca3ce3bc77c7e3a6a75d0b8f9b2890eaf2a7dfe1c5b77ced5231b8fce979b86c1e2fb6bdf577e4bcdfc3e9b465da7b88dcedce3ddcfe75af2339a783ea903a206d3d1cf92da71f2e8170f937cc9d2e4a25fccc389f4eea6aad5c2b97fd39e76b73ae7a563e4232fa24d6221262e523c4563463cd01bf191dd3d88c73bf0ff069593f5165699cb3ff7c1c39a8427caaebee107ed410be408b36152e5f27d2295cbac4b0864002c097ef62c3a6f0e7a47d076a21594e7db16b49d10f6dc91aa5a72e0e63ae0f100bc92e24c89dc6722bf7b84fb1d5849ec88688b4550b68d314a6040816733625404ceac3a42b2140c48094c49cdb8ac582849ec8b6954f4c484a2ce8c9ca675bb5b695cf97baa96dfbf7ee0e5b312b9f228d287621dcda943f406ce1de3eb9d3a2b781e41eda53fcdaeb44bb718f8dac70bbef58964bdb3a926e3a4489a894a8928fe950cc9944540a8e6f52c8ed1f1e9f944564f7e4fa900e49d940322cb2dacbfb4731e76a33288e3815f9f2cda030e2f2e9145a85cb871d6b085401cedf2c57e7c0de974e8a7495304ba59285d65e5bbb4aab5db5563dab1ebbf2a989b54c492b9f1f3c3da6a496cb9465e533644a8a624a7af16e26498aa7d3f6898005a744b2991fcef68d083232a2179eedfb4c1217d8c3a14929a34cbf9b92389d79f59716a7bfe9ee92e4c5251305a74735312e621c207129b99843a5fc1c231f4208219d911184464a298410429db8116d2cb2945476ab4429e59c0f2d2ca6481ec2561e7943dfe2b7dbda21ac1fc872d5670da995f533ed63fdb08648c97249d69047e21448ee519fe62b31271f652c31c74223a498931473ac585ba5cb4650f29cf41f4ec96c85327594bff2c81a3866fa5e432b8cd3bc533fb16bc2311ceb70ec3e87639c622a9c3ed62f473249b797bbd76c5b4ac669ea88d3df3dc8f47b36e2f475e4a6fb0b169cbed6b3516a084e2b0feb873504a99404436eeacd4dee5f4739ee57adefba4eee0ef90bab5af78415f2c45a2bba6aad7a7c562ebadae11c842b6ef75fd15fd1d58aae285c71dc8ace3709c91bfb25fde40deebed324dcda7731e2f6f16ee51ef4a9142d2ec3df2c8a2b1c474ef7ca27e6fc0ea77de57af9e7caca8fddce22531a3e65ef867cfba619d541a0df4d336e5f520ab9979a86bf6e07f7b464f46ed4b7df691941e417042effda7fa9b56dc662dcfea53f1c3e57c365ef460db7af23a7ece1d887fa725165df24b35170fb37b65aad56abd56ab55ab918e1c845d1ad7a3a4abfabdac6755df76ee9deadeb3aeeb98de3ba9b396ef719ee951dbead95cfca67e5b3f2e9a225828b9452f9ba47b73fa9a531ca79add4b62e46968b252476ba077ea57bbfdb4a18ff8dddedb619aae476fa7dee6e1f37edeeceab1293cb1863bc61fc10527b1fc3956be59333fe552bdbc718639b33ce261f939a4cbbd317f2c6b437ed67ae421cefde7178e5b3f2a1d4558a768b2ab32862b3285e33598f69765dd7d1be7dfd1bb6aea3f7b7fb3332826c1ae5becb6fe7b4b37b1fb147e93467f7d97eeee67c9d787aa1f4b6fb994e4dbfd3a9a9fbf9ac21a54edb2e963504aa50a7d5418bd1b27ea2b5d55a1650b431da68adb59605146364b9228b88b5ffa2b516cbb8e13d83650d71e1b288c22325963a8a501457942c7c00fccda2104929bf93dfc9ef6457ef4bfd78473b1d3bfc3e9e3b36d8ee573df2a7ee4125b7f0e9556bca79eb775d1744bdddcfd4dfd1c3ee0e35fb774e6bed9f7669771c87adddb60b777378f3e7bd67dfd3f7543e7d9610caedb3ac1f8df563adb52f63fcebb6a3d46690ac21ac21ac215183738b1560598114d7bcb24251c269f037830205891380bf1994273cf31d1b6e78f2ce2bef9e91b172bd29bf5aaede96bf7f658dd3cb7f2dfffdd33dfdfd16ddd1163799fa29cbddebf6786b3db6db7d681a7dd9037ea5bbc39fefa9dc29c5da2aad642b577dcc710fe18e33db76dd8ed27dfcfe5bb5563eabb7bd8bce6ff5f65897a03cb5408c4d7645a447f7377078efca64b2d8f49d8b75d93df2ee5ffacac5eddc185b0821de104b6b37fb77b37f574478dfaed5717b7c1faf84f078573ea6bbfbcac5b7ff1be7cb8f31da0e3b34ed0e632e77778d77eae5b78f6f6db246f7ef3d5eb283667b8cb149d352840fc716654bc6a9845b2baae884056d304e7ffba15b0f7d3820bc9467dbb66d6b6d3d2e4da3943ee58939dcd3a73f628e8d39f8e9d31e88e3c91af337f9db86b96de3b4be5ca779781c4bf0630c71bdd3d4c4fdd856c443ee46409bd136653382fa05b72445db948d8aaca17dfc0d461413c5f6c4a684ea45e76f1d95d3405b6ff586a5f29ac4b72c1bd23ec186c4630d8f49bce7372f17ab414c3b489eff849ec88688a4144da152c5c8cad115242c495958435c3f3c41e41971c4aa2416049f0cc51c222931472b9a42655ba147f44acc49d57f5c7e7c4d83f5be8735b60d0544b8e66f0645d2aab557aea8a2f4e1c8df993141ee9606d96adf8d4763396eebdbdb1968eb75e49eb2f803ba5db9c3f814e84f0d5ff9ec2214063cfe8b3b085f0216ebc5c362b1582c168b25451211d20fcd5cb39869d5b3923ace89f1ca55c5942aa698551194a2e18599a2d16cfd4d453e09a968d068364208356d763968acb5b6ce994a697ff5d47d035c9b39b4ae054aaab0c2b1b6d9ba7539e2de4f32dcd408a9f2c49cf9925ec9428f28169a14ef771e54e4a767e4a8fba1c8fd240485c790bc0d882a498da24a9e8474648cf2146fbc9b8578926da22c4f42f2b4677946d57b2721222afc343425e6d427b2939493ac71d6e84fa68337ee753bb6d7368db7f94e8d5cef46cd772f835e81b746bf8c2d6b502f031f65236a84823468bc8dcddb6c1b6cbe66a2643d6453471db97cea077584ba82424261c9add2cb960e0b343e7e8ca16b7ea364a8a19853a5c49c13709097a37723c6cba39350cca979f9a72731e75ffe491673f4cb3f0dc59cfdb28583a08e8eeedbdc9d8a81c6db3c0f1a6fb36d5872df069ba771370fd5d3781adb061aafaaf9ab750ca316972721d4d1ce0956d2d0b0405f3e8a48d6a011f3fd7214ea65be4b0e23f330ff640d9b3f09551a9ac7969ba1efbf8ee642686b8c1d1e67a02d1e8385aa63a35391864ec59d8ac1e6693c0f9ba7f1364fe3b5afd1b4d75e86f67a6b1a0d6da36becead6892a293f86de5c0f47765bd32b9a1e512b5125bf4653b81d3d1cf934f486246fe4db68ad3b09fde44e8d665eeb72cca47ae6a97fb2462a7512d2ae3c69dac793108d7e5145f33174dfe1311e773962cc39a7cdbcd6c01a1a9aafba6f80d3bcf818bae5adee2aaefdd6e578a13d0cdde94f4a77da9ad19cee14480c0cea0575843a6a39e99ea712a693106a282b9167b87bca725e0a494694f1e4cdefb837fd0edd9746b024fe08b837bdedbe948a817bd3f3e0deb479745fda3a910391e32fea5d45a63019a342f4defbda16ebf2ca8804fc66749b223e1fcfef5c0d18e2cdfcd7f2ddee18e753f88e92b95c30059c8f31461a7988ecca43642478a3fa9be7a1fa1b9c57a9527855d532fe6aeda2212d74f9fe72147b81d103a305e3070c9ea89a36fa7530fcc0f9141e6f1664585f06d503e065b8791446b084470a8fc28f0067a7e403e0550f801f410a3b2577aaee1800f0aae70100d5a3f0f72fc6f1abee9cde43e4fa1d472965dce111c736608a9c0dac873cf3aabff98e92c1fc0c52cca364a82114114acacb91cc4f9997231878a83ec6538c32a2feb87fc6471b988d9298736d8262ce09ffe2e2f353a787f1fa1573f4cfdf2f63c6cf9723576da97e0747bc79d5f3b87995ea6ff6e681c2dffccdb6e1e651d83b38a2feaa659cf2cb119f28994d4cd6b8f91831bae43434fa753596dc09bafeebf0eb442961fc6b8a55eff068e211551335ffa4fff570a6fd193a9525aae6cbd0a9249dd23a85f4490f67de68cd236f66ad22bff84f7a3778648d9b577d7595e63f92bc995ffaf7722a4ff71dbbaebce9dec3e9beea80c4d3fdec3e6fffba4b5eb35348487cbe6874a74062e84e5f3074cf7c467719dd6d94f4ac044af7a9c48beecf5d747f25f8fc17ba731b940b283182154821e9570a49bf62b298539fc652adb1abc1e214d1bbc19dfebdf8e28b1d4ac667ace1dd67dd6378f7260d756ac6e7cb56a9b66aabfe5458eda9ae2aa412a9af0ac46d2af29337dd26c6e7dbc0e48d0dae83869f5014458e1a763c7edfe2ef29a41aaabff99e6f34176fa04abf780385be0daca62626a656fd8adcae1d14ae56cee5759b8a7cf32a17eef70b7cf72714bd1bdccf9b57edee634a0d8baad9e9d78e927b0a89cf4f21f1b8620ea76b0a4b2a299505c60f182d183d31276eeed5e080fbbdee6be1c3893244d5d440302551076921fd24e6d4cd23aa26571f0c51351f6da25f3a2c8f5bbf1ecefccd44d72f3ebf76f2373d238c32ce52bd7abe07e12c55c8ebe6380c3258b1a93b33228d229bd10dcb5b5cb8ef2aeda2b94d48dec8975da25cf4362a5c4a1d1dde66c4db8c75ea13ec5ece6fd27d2787a9dbd1fdb52ff2933c5ae44dd41deb3d448e2148e2703bfdeb203ce518cfbfe9be019e354e77158fbdd7e598789b11e26d46186d088a7847f74f86316bad8c20248d4919d34167a0b1abb5b29129724350aee0f8e3b83d5988325f47e65f61cb0e206501a24b0c8c19aa14a6ad744e1e1ceb21771ce3b1632ab985a9e02ad8085b8939491d07f1389320b4817dc120f804c6624e50cc118a394f624ef7d1061b950a8bd520d8bde97770c06e776f83e9f3e571fafc79db90ff8403eeee63e24ecfbfba3eb4710fe5d8158298a888c73bbb1d43e4d71eeaee3bbdc3e1d5ee15f6c52b8cc714b2291b29c150e6ec545132a510061e7b8a3cb71419bedc851279befced7770a4aab69fbca1bf8383c6f27cf930a26aaf20f72725aae2ef15e4ae6a4005669021e6c8878187052ef05454dfa89af3003aff906a0ba776c497f1dfa73607e2de3a62c426262323da0409a9364142b24d9a34b94dacd6646b82638450097bc95eb297ec257bc9139bc966b299b8c8389c09a0f6a8144dd666390b15918800000000c315002030140c88c342a14092e48924990f14000d7f984c644c1ccbc34912a3280832cc10831401040000202333333423006fcb0bdbe4cde89be0308a19a927e739b97bcf6275488256787ef44d4e2525e69e96f68dc458cee5e42b89e99877aba153d56ae726fbd4e67a1e9b8e7f22f3ca3ee3826e0ab822c74e2145899beb81776e7f9e281adc9202c3fff47672991d24263139cad8a4a12ff10021356e3f9845b91f6593cba9568ebe3c47add3609559b40da6a5b9614258e5b516d6ac2c3f423fd7e3c2179c9ee35dead6cd975a2f0282f12658094625446eab8c71b850d72b122695fa1dddd2b4261c76d2021bd41dee1244140b1f0633f3015b4f19bd09e5e641e0d6c5f66a2f2e6a64fc2f3c684af451bc3068eae1dd78bef220fcbfee2b953d184485c62a583cb1edbc0e2986a37f537b46b1283eabc2a350082c59b0d8431751330c08094d2812e8a1ed73df209a8f2a290a8d78e09bbd6abc527c79b39fab01364e3e51ecdafda8867c58b137dc931fca9fb5b32fa5967dd521f38521ee6ec8e86445105006a11e2ebdac1f68980e05a4ad5530945260037c53d03f62ea1657b51d7e0b422351070549ad8917a606bb08886a2f9e069dda69f45e7a5811e928aa1d7f988e0362ffc1add00dd1f3ca74d93f0d22e6930f3c733ff0332b80ba00c16dae9252c7d855770663f7b1d8eca0f7d23892a081cc18a2bfc303f70c657405259fb9f7ed9849b815373b1a2201527d6a77c943854a225b0d93904dd63f0cbf2afb403fecd8e61d9a2e80fb600e7da027a31ea0c270949f171034607bc7c4afda6663b08f21674b4cb5d1427388e89735e6dc77324026df5dd7db10c7865bac6c48b551e0a32cc851ae8bfadac74136d07621a2fa9adfa6c435be2198bb02466d341f9d189399b6e4bacdb6ddcca5957965a920a55f17229b8aacfa2d400c107896c625c9eca4d01a5b0076b05446cc89b0cd2e36068e1893d40f99c2b663bc420638b711c6a4bfb505f3b8a50a58f8cf6a829c14c2fa9035579122279bdb76771a5d23f6cad672feb1e70169a14c93f6bfb4528fb6c741e68a1c915562d09a542fdb1783c0fbb03669fcf41c3d94dbe35cd5020d546e1313e6ab581a3d7646f6e9ce586bef1355820e04f16378e71dd0aa8950d384b0c810e08cd8ef75048e75c3c4cc2f30834a8aa58dbcccdc5f1e9c86135b6047f14552c260145487fe5e0aa4a5f6bb97d3e065175513ed3e3c1cd108d0c4a45fd26bec876c404a28965d682909aff45818bda256fad8f75d9199ae8b018a0cad40aaa9bda596d87807aa23e929390737c0bdef48e325643fbcafe1ff2d3cd6986fa083cfc769f5a35a5a8814bb3c823015242a93b2fe534b74fe0170eb86903af43f54ad82bc0dd8ff713fcb605492131eb2fef8da51c147087bda4d01ff17d473bf2c6909d155f6253c23d09e582c347adb66eeaec744525020169b597b780f8c5204a6e1f88dfdb2f522ace82c8000ec15a2f441a63f34e686ca0fdfa4c32c5b24e9b038d2129163275a539e006f0877754d75ba645856c775afb38fa06029a75a7c7661940ab39b5b6346298081a855feb045939cd263d627828b77d95cb25e7a12fa414ca77c9f6d4d92b97c3cec612047c1ff6ca8214f04a6bdc34e7eac33af710cc68b5ecda5f4bfc152f3fc726b5340bc05a52754705a757d9fcf0b2fcf103d55dab83fe2933fde7d225ab7e448ff909a00229ffdaf8c0222d39a04720bc0ad7296cbd6cd6f4d075e1458e896997d570d851b6093423e69f1127130af18442d2aea1667e6006cb409c532e4b7338fae634ddcbda9f277027396d02de9ea137f1d1e1da22c0811c4204ecc882cd90659bb47afb0ed375415f68c71f0422b5d89126451178115ff46a30bf9f30552da7c925222b48892af65fd819825cc61bef889534a61a4a40866d6d93238a2ad665264c633d0f2106ce52e2c6fe4a73df8c945d74f8e599ad8ea86f92796660f7cb48033ce0b8169892993c141efd6ac3e8d9f6710a221dc5708eeb623fb0c3770cd46a91884c87faac85f2cd881b86eaf2aa92590def4d13b98766ad2851f5c9228966b65a384aebc1496fc7f9c0217c9e833e979b39a27b80554affd0b65c1d4f51471f428ebad739013664bed4a190030c46371903df35a9dec8573e34870f24be2ab8c2e1b6a2f37b32a2ef751faa27c08a78c55cbab1d7a8476719064b13125dcf39d592f22d8c909eedb12d69b1480eeb96751ec44670f0966affac3318eb5bbc5cec40cdc8f2cf6cc433943692dc12a080a4b06fafbfe3c4f4cc0642d5593c199efe534936d9e2c1b8216e85d74600f35540868f474586ab29518116caa5d096973dbcc9f7a6f7e29354d84ed1638cab582e6b3e515937f843a42c07443281c74843e6164fdb8b3b738480458d5ac95fe8567fe74d109ec81932464de96203a8e362e04f43869013c0ca0e9fb325908d9a39d0f1faf2c7edc785878e1468d1993fc823824ac557646ef3c751ddf3153a7f2734ef591e6f0ee16a380874eb22eeb58449ef636cfc0096454dd98df24de76280770ca96438600c7db40860ae0e486d594ea9c4391dc2e5c91011a54ded0a74d04ec95472bb2cb4677ec6f0153eb25f669e821d6cbfd0208c74992db9ceb4aeb4543c22bbbdc53c4c1395fa9928bb86f7c13dde6133b4724b36ba26381ea124ec566f15c36f25e572678a95944bffb8d189cd6adef77d2e0402537d0336ec2adb608cba9c5265da7d777a8390a3120221991ebe565cb27a06bd6f1de494148c49b521c2440e6736b57c471e1bc40dc230368b00a650d5ad6ceaf13913a8a052f46c9ba2eb56ed2f9552a5b322473bfa73bd556fcd03fa660eddc586fcb7ad0653076cf1a5fc5c1696868bf2a1c85685906f8a44240fda5c86a518fbd442836ca8350bff220d17fe856a5cfb175aac7f0dc5840efc89e545b57bd90680ba6fc8a7d6c946702397b5980c43e1f112bd553eac2614448907011be6c2fa5c3e7d116f63827db9641fd4aaeb07ffb5de268bd88d0e72185a6203b587d39a55ecbd05c7d3350ca9ad5cd218474fc181deaa5762062068f7f20d64f9b2e2ddbe32ccb2b47946a4522e1db96dfb2219965c077b19250330269c975148f359425d75174196cfa29297242e5aa62d30eb2c2a8f23c81b22f5f21b526d652c05977048e17576f8e7796f8e1729651049ef8c670c3523db5c3814bec7df2372d9013eea55dd9e5801556c140e47ac15879e3a931879602f101c263716b8887a9be920bf84345add2ffd88356a042567ec89cb6e4e0a455a7c1aaa73cb7dee320f76e917718bdb7adc7a2a6898a540f8ba218c702ae821293988f0d85ad8dcac856ce29284931818a8d82f4e75ed7b8ef88862a1cd83174fb37bd30b0cb14b2f3fa324d7a8632130fc06252650bf69871d9ad7819850bfaa2a3f172f95d8da280da49c317e14b68b64cdfd226200a4fac6b902c0eb101330319a3d2db0ef26fbf5825aa20251ae0a6debbd1d7767f04662e42cc0f251f3b3219c956f7b10204524cd654b47d0c3808527d082060a483f0bfd5968e6a06c911365cd755839451162f253c8c0554bc6a2b8cdcb690eb8620da054726e3750866f9922062a8ce7a6b4def6334bd866307b88c7a0b2c67e10afe6190a3899d93af1ab1d1914e984fb51ce1025a416e53d17751a570fcef4d813bc7de52e4cd77f12471d2a15d41292c0685fbe68a4af32f9450ff9a308b7c04993b4a1d8405e904346cfbacbfceab7a869c4a0f05086726f73954dcb202adffca0457b0bfccf367eda246c5afa91e710b1e2b13d7a4e8cccab66545778e972df4e18bd02254a190b0632af8649a7597e8a15a292b4c92b1f82113e8254a6e1bbc46507fcafd43910dc73327cdd460d9fc329eb30a8b3f3919a31a8049b84208ae58af7d045788fb17d41a0c62a88a76b0d90b2deefc91976a22a546b11c8f374dd1c02f82c8d9a5ab3c4c9cc9d294bc4064d965e983362d2885ad6b1679a0034c98554326f1c1dc9d3a4ded46d894c584b82a9af1f9cd37a6331023168d7932337a8f8599fa32fb710dcb319147bbd660dcbccc4dce1b77563c75d254c310871ab2135581e697c9f96deed90f342086bf488f4c21f08e9c4478c2633cde5fc791f9d42f8f727dc57686434664f87941d2f6165ba2ce65d2fb2cdb26d4dc240093f091ca386e9b99efbac27a73c791d646ea455a99df6a5d04348061262f70bf058f0a9432b656d358e01a02e17e90a9e642ee0e8b2fa061f470e8975212d94d46763346a359c6b0582b6d0c64994e4dc6316e2727a00e1a56eb7ac4e80dfa466ef63f09cd0321e22219a7321037871818e1b9b47fa20578c82712ff6345e8b8859b24e33c9a217d17d9e2182f4e7f54e891a007ee1713181bb876e26ae64c184845704cc3bd036227da0fe50f000c9360c85f38a7f048f06a5f5dbf42d8c32ff5896401e6a9ca01c37856e121880e3f774ace0d36402a244c70939f59cefdf3a4b35953036812590f97cbe3d5649de7523a918e81ab3a9557ded5be2a067a1a6bbfb0fd5756025f87e84efbdb363b06220a8b79e15216ca32f56c8671aad9f34c2fcf82de7f418fa1d025c110d13404ae309773232d40e7f24969056a844fa04304b93d721386936bafb35580e4ba86ace5b40a5cc8091d4c6b1d959a5a38b7ccb8573e695d266370a19222680606120eb94feaf9358597abe9404cb26e2842edf8fd111b1005481fd1049cd404496e3a2f58a5cb2c96dbe26c360680366fac80537bb5a8a4a87eff750c604c344f0b50ca673a6deb4a3273dc11fef3372af80e2d756d3d5f50a30805128b7990e6be148c9696733a99bd0596d7fb6e7c4d24f1d282888ba4851d426203e21e4f72f07c3a20b5c1c8ff734c5298c88f7c91b3f0a852b3eefbf1a731435e5af0cb745a8d7283412f04b9f42604c1f81cff95f10d296ea4ed097ac2b663917bfa61109b7fbe72af95ccd4aa78e8b3906380390e52ec598dd22044215bc8375a65803991c6a20444bef3fb6a8a05a993d62aeb79084ce2a15e6757bc9375b5b31d7b2604ae8cd49392bffacb7c3e8c187fe1fde755b603bc0da87c0e2aed3651dd4e88ae0ef07d36e7cadaeafcd4a8843302de7aa012d695cf790d4c7350f5efb9ab749df194d0782f7842597320078013f0d4dd28ddfacd8706b78daabcf4ed6d885759e5b78957d2bca97ef2719668bfef3a9c90a7297bd0aa6aec0242898a615ed68d25b4e46cbfca33bf501f20628d7206b3ea994f04a8b199f4e7f7dfff7bb26b2f2c920f413f17cfd313de6ee9a0ef11c8877e3c3afdc896961e6e66d6490d68f6daf72bf003069cab5615a27a6698325c34ce5bb27c0589c88973065776baf264063095a20d079f0ca2e6b960cb0bf1bd9c30ea0bc06721d17df6e6824d1079ea263180c1084e02098b3b04a65d4822f9da7b9ec0e3067ed06fbe77522773d475a279c3cacbbbc6490a8d79f54ab335dace2c4e22115a0c8bf200b8705ec1ee85a92e572853886602de554cca32a8af521177fce278810d44c475c988b0a69c15138e1dfd82ebdfa62208d6993ae5fd842cf8702d5b87ade7b28ca027409d48e544f7e7337780f2fdfafa715de81554b1dca2c8ab26e2b14ef3509ed9c2c4d4811083202d407ffef085661e0ea5bcb6d03f973a101255240bb28c28853079ea00d20046aa250a0b5a3494de78b4e693e76dd1c9604bb784156d2b35eee9f93f84b4ec4ceebb67f4439c865f6b83ae5f845e81c5e742653f9d38b55937d614a761c1fd65a01a0cb4a2f2f8b0d2b08fb6011818f451adec2cc93d0a0b0f7ca6413bc6a1647befd90342e5904f61434a63872285cfd4a9644ef4969fa4d21515a020c75167123b277423b463632570b004d8bfa0ce5776292b2f2df262428e640969fd957688ed2df415419564923a366a25f925df0cfef1a4b7589cec4ea4d30f579861a10ef1832ad0c56b101b522967fd8228066917ec675c19179b374c71188ec29ae459f8ff5ddfedb3e3de91592cb2ddc398b62e16c32bb3889e6105a44067f3ce76a8f6cd497f5d742450d46ccd1f6199a6a34b8a7dfe060f3328476ae3ea74668643d83547a15ee47e58d8ef8a6ecc3bfd6c23a11026b84d5e908486bed26b0ba47407a750307bc83495ac57dda3156a2a143b37263d9594f68deb60a19b9c61b6144262a8f45c16c4e19864541c83f17e2af477a162a4f0287f5b2a7203e8b193b68cbbf222a9cd81710db8614c7d983084530da84547c0d06c7884938da3cc5c39f9e0903bf456c111153a698d5a5a47f986cde16abaa69a6e315f1879ca0c6099edbd614ae3da82ae3918e964a539838e78cb6c1499500aa431b2511cf8564c96226c135764e27ea4465272d7a3137e434b2916889a32b321c341f09888d2dca6a6d2530292d17875d8e3ba4c5de0b4cdd49f77ce96ccd7ee4ce20ff61b4c7941c05f49577a2b0cc17e0cd06beebcca3c7bef0f71dfd9adbda256609b4d58d814a0caa25aa51ce0022a4889ce4f0a9b00800150523084a6d9c84fb80222001856539ac6ba3e3179d0d7bfe033a541ef736acf0e8c20ccc40bb42e66d918005bd45769ed766414721deda63b7854050fbf226f752d7a6476d5646429ebf8ead50c066b6feeb24ae330600fbe8a2dbfa5199d84588e7cb3cc29d8e19c6077d17b97532016832ac960c15dbbd0b39dc942d1cf19932283782be7906e0b0e3aa3d40a66b001aadaca63c222e40f06db83b8e90f8110f7e49149fd44f5c679146dfee1267c9e9a07a8d1941e7cdee2a5b7661dc128a0aaba2d271cb2892db31dc84919fa587b4b5433a45baf09c4a1028af991fd876ef737456347f4d1acece8574120062e5d98d4d1f6d06c27c5f929bf72082f1041963adb0049aade806067d6cfc5e035c18abda049027fb4ec6ce05189434bce6d592ec4e01291aa0990bf45ef2f7fe11c99b4af990529c033ab71ef33ba263bd5c80477e6c1b46486c17e030d35e7ff355d6850be790ecdd730322aa625c801acaa41325302023d51ca728f8c8c47fef501710bb0187a45bdb504b512d838b68015aed9ace1db2a09f50d10c4fd911ed896d4efc38bed0ac04a6768d95a856ca7a101a0f2764926d78f8bf6f2dfc6ccb896b08b1f185b7ebff4793150f030aeb3c8f4df1ed8ceb4b29797f8e19ed0d891dd3686bbd7dc6d8404aeecbedbc745ed7bbda5d794f335ee01a4f7badde2788ecd3587fc5ab51a02f5f2ab2bd5578702e74239cfaf4a7490f58b95e10668bd2f83e64cabb0f9f6295666bd59f7be5e2e73ea54ccf84b0e8133cfaf7e429a05c6e83ee1f3ab62ea571d13f654ec44a426d04efddaa68a6dd6bf168fc2109353bf86f2bfeb6bf8042f02c0aaca9016f70522c2df507a853978df55188a708050f2feedd81541187b0bfac22d9a7489a4b59e77d87ec5cdd2fb251fa0f84b7cbacd5f424f0b400292091853cb5485861cb8b1efb0c6cecc7b14a7714a8765b8cb13d7b8c7618db956574d96f40403b6959be2b2fc22fc7887372cc26d7c55ca4c3e2cfdbadcf1288b21b0d421fae8162066a9e3d1402b4070298711812b80f8b29de98a5214d1bd4591dc5334d7c5e060bbef246fd8f990cf1bb2433baa60d1f7cd00c265a71fc44f4ce419b780251aaa71a41d15a121fc2456aa2e7830ce83c5c27fd9d71d685fbbeeb81ab780331ae633e1a80c9c46dc8b1896a80ffb024aa3334616c83aaa1f81897cf95d46131c15d06a36ab1603ae0d69dbc0914d39c7aa358da5e19bfc4bd09ffe549e570a13a246505a80537e583ac52aa4f66d191993131c55cc3e3a115d2682660ee7ca123d7af2a296a70ed06bcfb57ce1ac6764fe7ac9f2efc757ba8d66b64605d559c03935c15394ed54c33d70dba65b6a58919490a17f639d240a177f7b17820680d04d5da8ec22e40a690d879526c733bf704b7df339ba51676a56746855ec16287cafc2d100ea9cca7d7c96338897ed90b22da680584d5137b97e5b0500c4f9f541a0a847b3bf9181095f26b59d680b20b82c9dc00bf3c6cf8287b07a119a8188e594d641bc5ca718b4a1621e25b830ad005b18d1d53c50a1b0e5a03f783a3b095bef2933c2d69d6505c83a49a78d0b88f5728aebb99b962ed8566383697ad2a79908e7311d931fd6783eaa5755d8d70788614cbb35452cea01ab6d6c11e9fd883aaa33bce07a68c5495badc08b5d00e169e9c5d824a25a9d1202c50075fb54410e7a1d491a05f97174bb831c18726e0fe9b04eeedd40d2f8f65bc5666004fa585a9ca35eda38afcf1674f4183c628b6fd05d53e513a6752a5050ffd4b280f6369850959224b2493742adb61d7e4fdd70fb406273a4b3bdf425a21fa464662cdbb9f69afb30dff4068e7b7dfc6a2e38d150e156948413dbda1018ad7d5abecb581d6ff133a1e1f10a82963995086472edf8215cb49f162e197c01d59fe0a07988abe5b92d8b46c41e311db0ac61313492dcb518510bed22740cef767f2d0b5e6884a1a3e3d03d0dda78b1394a0b4d2d802b3d0b2f456802a27a079cfc273328b4f114136e6a096859e6633e74e7f24c826277a91efeed529c98d74349554a62498a3f788ebc226c72bce8b7386c3b8a8928243621d25ba54ef6e645e0bc115c816b93eb00f80ca3416f23bebcb90e48807780e624230bf8f704b763949e5cecb8101e2c5a62ec9d891a06bfe8175cba764e41383351e6e4056d02e21c248caf65a66188e2e2ed103c149eebbcb599ddfdc9474b43ddef4b880864319e3a1b10c2c85fa31f2210fd5e3e0790b62221a666c997e5913db6dee2c48cc43f339ae17b199a764184eb806a846227379f2937be6f09908481143cac85447c5b7d32e347e21d24519a37b669d78f62d2865c57aecef9376e6fed4a7057b075507be88cb5091aea5315292027f7a8bffbb861e2b5a727527af436fbd1e8233abc8aecef389f755791f27e8c5b6427767fc6ba4ef52714142eca1bce926856763f16f0fce9b46d27674ad02c22806610a59abef07882f14d1a987c9c8ce61eb74f77e2273ec6f008492b9293952926c21eea0849759e676ca1bf77ca16cd10ba1cde095d97f28bd39be379505d56455373d9bec98abbb42e003a1d5bb1b80c99b78d9441a5afe8528dd9c1b496b1892f557267cae02da012b32905ef69894e24553b98bff01280841899f17dd4a6a610792f760111e16b945ca90929c190c6e5eca0bebacab4022a1a59c8239abb1ef509b86d35d082a5305d7e244cb7acdd3e003252e6cfd665a6d3804e2a6702f0b7f735a156803901097435c49e3367c1b5ed08d959cc57b68cf2a9c4fb9e5053d2923278e51e6e0a9a8e99a4a5662a8fbc335accea24e8fcc5a9b82e3118c8a265447d02efa8614745a694c1029f386b8f36f650b7bc0b2e68af76515e52498810035872e385b9109a83bc736ec4442bc0c28b702d2810123840bf13faff50bd3dadc238afdf52ff827a46ba809d55b1c2b7ec811a49d3b7cc9790194ab5a5cbf4e46c35ba56f01d58ea0d51bb1f722c811649a740991a02203aa88bac5586ba8ba15a55d4c1e1febd59c7d89398684a34b11f92fc8f9fcb5f87308cf399408ae105f27dba749960055b6a86550c250ff2f4e63f98af1064c530da4c0240c5c8065a264e087dc4e736c9d0e6ea10e3fb2458802eac443573bc7b9b7ced16a971f57279eb5a4950614fbd265634ce7948e1a7100406d73c551e13b7c26020b70abb6f904e1d4793a6a4100c3434525b826dd56760a07173045bd3179ce6d8f6e5f9b10d7b90da5a246f615ab361125d31e8e2163e7f970434d4956c41055ae4aaa8b4f3539f3d1e6200ea5fdfddde9cb9c51ab1f78dc9719a0d24bb8c20e2f2fb8de9a20405fc93400b2e355118e425657a1268832e9e26bbffcf931cc5a4f2ed26ccd14ad7e1c5c9204fe1db25489932b3911a8c40abb2d8c774d4570e3d83244176ed03b080d471ca028b84c8a068e50a9bfb02b4b58e39f97708a2c0016674941a5b7402242d4a0863a0e1843d40647c449f92d25900052d56a332a5057720abc760edcf602e9012580911ba487765381cd350cc5dd2c97b393cc24b4c355a09aed8bbf8f8a2ed93e2c615ff0a52636921aafcd58ba381e433e0f9723419cb6a3fa455ab6efc07d0b798325115594f17133a4b0ec64088c10a93d224f81ab0eb72f4e6041941494ce3f501dd2f4ec234dce322c5e0a364cf148ac2556bf6bbbde64941a3e4fcf94764122e3b2bac890fc508a6456b587cfe71bc83919ad568893b4e7997ef3d87984a32729565a0f8f79af00fff7281d979da2bd651293acb2134e38d5fc2816b7d24bfb878e4ec8b299f02bf80bf68ea151041024f60e9124ceb51d06b01eed1bdbfb72003833b8a796116297e5dc47139bbaffeff12214c380113f17c92936084fb7ce610c34fa2b65b1093a6019ce9370d10247419e70cf4911e0e30248bb3f2f89633b8bfe282503f6245bddd0e5a046bad427b6013885df8bdc542cc647de37152d2808d363a2fa6d937f3ecbe717604cc52b6c4e3e99407c2fb9d5949600c048a87e30864a189d46a8ce51f99451be63ba1d69f78478b05bc004c7cf2f5f0386a7720a82ce452ee8ca7f6bf8b6e62462da95e965ac32bacf88acfcb23bea1a7d29c5ff6d1850df3e38ada9dce725ad10ade4a8b6a08f8ed569f30acd65e9d9bea29a17a6367820f3f101786101f3f03e8e76eb995d30f75474bd30f43dc8e56597db9e9733b02bf08a104a5c721c9cd78930b4d31df24ad0d477d42833153528bc3115c996aa4b7f28f0874e613e76856276a79782e7c09026d6f02993da1bbabdc0f3a4973ba6ee4a2106573cc36b5f21106d65a91a95e1ad0c639daa6378f905e354976289ab204334c050968f64fcdb268356d4cf0b2d307f90fb4e51b837a8e4f7e2f26803123e88ad3f40685186fb0217519cdbd770649a46c3d56d011e532b81047e221156c5d81fb7e85e96a5644aa81d6582ab69c9ff9c3164157b3e23a33b29037f0b68257fbd94dfbe197c68f197ec1accbe3e818267a9f935e905593b009a9588b4067c5a0b3ecc6a4c6ec0cfda57119d4b2b2c792f3d3072e635d0e9df715d8ab2fc9deabc15fa5ef2130283cfc179cee84d3dca207c98b0bbce45b3c6d453c4adfabc6e0b041349aa155686f2995be27324cbe9ad8e8689320205ad263eabf7ea7d2f761149786d19923f8576df465890e01ad7b6ec711e487b7830fd3b7d0c6eca8f9ab76a37829610f551eee49dd5f0c6c2d45d16764a5ccc3ae6ba5db421da9f623360decd26981a7ced755e3a53695f6b7bb5a816f9da29608c2b2281c1cdd3c2f12412d2257dd1dabc0e5347adf76832192c81348bf4c077518e82482c85f014964ea2adbb55e7993cb97a5c391a9280d3b5b774c4a349eb73f0972d92d836e248016884ceb3b92520fc0b8e99d067a3dfd79c4a707def4b55598dda391029dbf7aec8d028451d99863e7e2c73878185d5bda69413a32f13036047abbd659774db1fba83dd562e4bd9d9c5247724a6d1cb7710c3f586194bc93b57a635901da020b24c14f746d5fec9cb8ee5b0abfa1196e458b65fb4dc53cfc1bc781e6387d151f89793c6178bf6fede1f05fd1201a2a0d661144e9a57668af76b6f2a139a3374ca2795dfd26a2d6793a25478944146642d0f3a65b3f53dcaf0cf644b430506a0a2a3610c745eaa08257a492c3cd9f0cfd3e4af9989377e7aa7e415a88e9360327fa23c55c8f4fae1ae7376024228b44298c91c718ccc0439876154ecb7a9c1ca346c25a09966f9eef4a560dfca620665b816bf7d1fb91c8b23cd3b04a4152088cc658167e80c0674fa96849abb33e6d983e0358fb6e40ee800f7c011b9013bfc21f333033f23b8067a2bfa586e9eb2c3291301db278710a13f8d4d389b4e70ed3baf7c5b8ec13390f9da72b64bd265cf60b05d9d85b909eced1abfafde2b83f32b05b124a0ab2fda7eb29f29b3623f4d48273f7f71dd93aa70f66b974dc1ccb23b29e14d51113fafb90e3903a160ee122316f2ac7fdb395af1b1c99f51162e8cfca32b22c41fa472a9806233d8df36191e461d0da78961584de44c226216844f457011cdf064a35c72c5112b2c34864cc34ccf14f681ba0094c84fa6d50a27a2febb0ca0e12927177405f8dab41639298bf4fe9f591a4abbdf443635b0ec38a809ce2ea5f790d9c7460452dcdebe8b1381c07d2d4fd09665a38eda8e82bcae294abd1bc1e372ba408469e0617be81257bd6ac9c489da5e6fbdfd0b3448f2477684d00a5b7bbc636a67e58a00345ba1448ac23b4dc9edcf6288e770221917685a112f8eae2028e7691233e4519e2ef1e4d3e63874f94091e4ef67411882d9334e85ebb7f4648a007b3f1fd40750f8d38807d1bcb264e31df61e338fd0d0c35c11b588b891733ea9e369fdc8728cd957c12367384a77a0b8a92a1a182bb7f5ff91266c938813c80e801a2691ceae399edcf0b0a4643e4786645d9751c09eaa55da64f60532c204a86cef6ab9a3a833ac81a6e4994c983ded95570d18c6c4b3965666812cc00f5a2dca2d0e577c10ac4975bdafb961c836fa165227a643e3a322150535c508bdc13d08740286cc7185b9e4896da35cabcb17e404b10a5a7c9b426d12dc70134fc5bb9f7b55e3f2bde0dd42f1df5830755d770eaecb9ebcf43420378016b507bb6883de233f82a1960271e563ea014788547496ef596ad1cceaf3b2837802d51a1535e2696fceb1e73ef5799966d9905a68dd939a99115d393f48c8d87d3f496f0e1d8c210fad8ee5693ab38c1b72889ee7a33dbba339865f9631a56437259b100888a294bc22cfb38aa24a72c1ee50ebb56267763a2056c5f138a169649e75a9e51fe24f37c7e11b406381e3c57758d8c1f48eb45b30a9ca2098dbd488169b6626fa4c3af3c2373f013980098ad110cdbc55392847846bfae6eb806fb1852aacaa6d6773a86c6615f966508b14e6eaa64d1588f387ea44a96486019f02eaacb8c57f7b6e6c71f7c0121236f36c4919b5a280ef391bb07d54af52d1955b2108b9fa63d32399c4aa65e1293edc5101d93c3473443cd20444825d1957b031c0a139b61e6640249cebb3f5c56ac52478cae0f7f4a4d60d40b3a88ad240358b6e25448222d3bbb7623d60f59ef57b59e2089113e7e552efc45cc1c02c7c070124df887164824dc301bbae0ac35a33d61c9a7ccb1fa0de31397e4b8284abf12e426952ea3b31512e2bc222ed9fddcb19b04d0273fccc8b1cb14203af2a681c88c1d22ef425d37b7743c5b724839c3b280c8f84e96a07cb4f2fc2443bf3261a2055e4d1c90920c7440ecda44f85940c36bb79238f7a582b8077f047c57b486b82f13a2f069a855def2a8e1db0c6bb476647d0ab30b172a304577a0253ffa84e8db9496fb80c8b751d74ba35e006e1704ded8923d8a6ccf8660cb3d77461a2a2f3d88a9491b6be6a6f18a55d1ea69ce35e651183660edc617458618e01da55276ad4875b8c788ec20a240642c496b6637a1791719516441316fae9be3664be4af517c59112205f5045c663a20e5e7fb006bb411590a95e929d1bf0d4154bc4854186d5ad129e157cb443e371421fc6a07d93145394c56c776660a163eec01154e4bb2bd866b1a86f7042d0772c2de74546d887f579a444662f013ad63e51d23259c0f62f9f368292c52bbcd979434dd912f86b39923007ecd96cc4af136892c13d324b26ce7d1f9681c50f832d36259763da59ffb18085b68bdfecaf2f84fb9104c9c19467f7c3266ca43bee94a57d84ec909907612cd19c4be89c951b8f4240b0ea75a46b1dd48ef931d762ec84ba5d8ea3203acd2336b09b5a80556128a58b7caad426ec5231c960a39b04147a0842d897948eb9e0b9aae548c48f0ed9ecbca5a14730866f97cd66d43460bed96eb876f36f0f46811181388a79ca5c3f353145b328f90c01168ccd6a69b735833d8ad3415440efe3f46899ad892f9c1b7c7bf3c6e1b715997130e989dbf20321e51a65f41acdc6e4ec4998a452e0c6da1d3702ad8d7e0b87c9e95ddbf9dc8d23d7853fc70c1c921df9d3636c9470f6b93ab713e21aef53deaddbe5ae9bb42eeb623a90e88d0a88873422d4838a22ed99470ff2297aee7d0cb893b5a7c8c417db987cfd542bdf4b88baca97c8e148963354c89b4214bed814d8de1d4113de6cda6334d8f5c1e45d7a27145b39c5c2957943f591e9df169285f555c905410027de53994357c0fa1143726b588bd79f3a30c0377dc98e136a784b1e5da4dd2b9ee18b88bcfff012d944835bd4d820aae0893b2a69acda5e3f116c4706014b62c1cfb8ed8f5688423db8a01ba4ccf405d7789e154e08581d6631fb8b8855e96073d90e8dcc96c4c7af2a4b515f9f67c344ff5760d4976e6a9015f99a4e4812c762f627f4016a38c17250c741bb56dd2044aefd47a45a5bd25c97e4967f57797d1331bbaa06c06c64fdd65a8e4b53f90b8504142dd5d162ac010bfa8e2f52605455488b1d5a7528528f003874947c854305a61dac6e0f83dcb4fadba7bec3ee160ff2ec90749566d3b694af3cb084916b2c8242c4212b5879490acc406e260783a32f4d7b9cc226ef10457b4c9985fcfaa07c26390f210f84c4a48b6d40b68528047f2882424af084fba85bf7c87cb08c9fcd831881f24ab5b125feb2428505257744a670ac833c0bb80c95a92c1f258e4c63a65ad9c49a421790e75918fac813137b9ac150c1d1373b051e58ca9b415030324d6debf5c4fde501c75b7b37b3f92a51a0059a4d48ae06822709aa804a9301a9c757803b1784e160332dc8c3fb6f5c567a0dcfd2a96aa17c57ec02a284e71c3e76f8832da23ce49d47edb2877cbf15c936d3d9a67728e78053ebae9353306f2ebf2b7f04e0573e4a266cb411bd4b8928c8aa906dba5a02a8b1067fdcda055d78742d12277f3dea62d8227823c74dd048c4cd02ebefcc35ab5de169c00290ce45ee18f0de37c46bafd55aa9ca25491c03ecb1ab034c274f40d6a6ae4e1c52c2b83ecaf6a6a1ca5ab920edd9119b06775096ad81c17492db0f8111ae694710c5eecda24405d50e6b1dc30c6cae8e7459e433af2313adcdde6aeb88bebea3c0bab25f3b2cfdaa267ae0258bf8c48e97c8f8ed6be848f678ac332c7d57962afa5bb0248c5dc9185548d565f2d8a30afb8d6f0f844e22e5be3b296c113c00756a2c40ce91886012a002d083cd6ac7c3985e062fc06c56d7a370fb103f890d8708b225918677d182511810365c045386bf4bd63cdd6073b2457d91c32f6d5b20c23c69125993e18d1384c44bbfd24105dd1439bb0f4ea83cdaf72b085a0445e983a37d91c1b3abc70e8e22997f5ea562b3adaa83770bb5940b808f646bd2a5a3c0ffaa5155eea3642af3c5cd545cace9629c836fc106b2f5a0e3e305813b85f99ebc091612f399620fc29a8ad4caf8753475dee69b1793d44c54c17b32ad6bd563cdb51513905d9622b850b13abeff32058bc3d0c7e2113b8f932297b13fd0512a4c0a35b5420b37c5e8e8676a444ff473cb7a61f75595f2c4d71eb8beb236b74a8abcf71ee03ea91139aeae2e0ea8c3d404cbe6c64a3ba93ca8e46e8ae87c393a51fc7c608c0410f60f1ea46c9889d47f43e6fb67d5eec80bff7c245e813e2f3cacb1a9c154a408b5bbc6b88d63c0ef11572c39f5ab8fcf0fc168c65589ba5c89e4cd8d866033c94d44a116eb61a8dbee688a3c93588707e4b3ebe6dba1fc8d334a41cf4b125a40b3244de139dada1b7b84215c3eaee96084e0f09e5d5de105a3bc4792df1b8aba187da4f62a0f33ec125c7918613fa2e79c188f648d58e34043be467fd92975797f80f65aeefc3569e1e62b94a065b0818d332deca660c29abe45bda5ac53779dc96c54ecd11b37395773b8b391bcbea5eb9b8735b36acab6e62d3932a6b709d29f4eafa14a140532c574059595567b5e6306721bbcc8757513898618c770ae1bdbad69d34343b2efdd5f38a2b8d5b781cf6deef0c8e8513a2529d3fbafe1b6ad189784b721ba7d1fb1e45a7dee90f97f3fa1124e25d356eb3e5e2234c3c88788987877849c90974fc66c1a0286118e32823c121f3bac783fd63f68b0e8457ac49e6740af26598f9e86c5ace17624306bceef11fc1dcf7908b2f5991524ab4fbb74bdab334db9b93814065d6f6d843c651570e692abfe6c43571942f4a3942475c8f5434097d61639a0c2b6d4ce7aae6e0417834b413f148af17719098eed88d38ba5b9a2571014fa213f625be53a6bf714298c23ca1fb6d29900f49e37b4c372a40aa92652b0b2a7397811d78336a496eeed57dba1d1054aa06bf2565f003cf2394348faeb9ef60871b285d2c904fcd21669f1b8add9173adfb0ae2c8b96e417670df5306917f2af8f4ea321dd44d9a4086171ae824c2351d38a8aeea36cef649789e4ff33a98b59b2b6baf73ae3a654e882e9935dd84835823e0dd9a6bac04889a04e2ba807835cdd18f865148b10d6099d5e130b1cf66f8e1ca863f7af6c7b40f13bd79984022911bb3bc76f2c821081d6ab3434b159bcf036d98cc66fb76ea10ccce5083d3fa3de59dfe17f1f7f2fafeb2c86b7df228fcc85c150d9ee15674d05d053e93ae87cf3179030bbe3bb1fbc42ef0260ffa05eaf1c958fa27834bf58f6c4306d6e71af09151acc3ccb6f7fc93158a7690c90ecda2cc6d27e1bac7abf3cb57f074ce451453264c34f5e5f08a78b375f12b4197fd215b8c2251dff15a7ad807ec99960a93a3488cfdbcefd9cfc2f11468def2caed9ca1c7caeb82ff95d8a0cf239fba544f5eefb6c0738244237b7e8db6bd9bacd002b57fc2371e38c56a5aaa2a948022c84610b6e53c01563716abe81a9d714956066d2d28b55941274386fc2d7f657759addaa16eb9739e8eec06183cc4c7fdaf1498a389cd6791a3596ec0b1cedc4c7d50ac6d738acff0271c80344d07ca4b516135d001b32567d7bcf87b6b00da0bd2a336c830ae3e93e0256b854b6258f0cb122bdf405be8ca8f17aeae7cbf7312d7d85f6d9a4ea250670755b3cefe441ed12a019515317b9873e09df63322b655a3e391acaa02daf662f5e648e5fe5dc41e774aeebbf9dc02a42450ca12fabe29d028f582c6ccbaa865cb728e4e927550b10bee3b3383ffa4c1d02b99f0d0ab2ff3b9289f7766884af4f4f4c8c71ad07f8fb308ca949b1367024eb595d8f3a026c6860b504550906d22c890e8a3d3b0f09c43115504a3c540dd806f36a01ddfe9335c70fba71bdafad342828e99212ab95966a29edf8fd4840e95ec253e83c929b8994f3380b72bc2aff8383b94653bd32a861c25d89541c174f3c76c2d873f81a6f3cbfe76770d5c4b28732e2583041cd01274ea1f30dab389ee90114902828360c4f8f750faa186e7e406c5acedbbed88b9d5a318b37b860fb5404ddf2d5a1474b862d5c9d21e77a9a495b0c5030ed38c93a629c6a7252d5c4a9dd637806976d95b67b3c544ae2e43208e382d4246b03d8dd5a7a9e9b1a561e258693471bc34983eeeb44d3526ad268d9b5653c649abe9395103878b09980d1b041a79f5a588e9c4eadaaf7909bb7ab56b64d9a1b2d1f043eb0e91460092a9889cac8e692051817a2146ba7dc6e5eff81e013f6a7e804a840f279a9942141eccf834399feee805cf1e6ddf4a4050f2412b7784633330ba01b2a42c1fbe60cad4711d551924be5c17c5324df61da6f9df124c901dde3568e8345f1251b121c57d999851937e95fd86217384a5a76f01a0a94092d913d48824193f80076050fa1c66255014b32463f72641f9f606b131a1857f1a244432d7761c23aea3ac4093209f3e5cf3a0d2d5a035f40895edeca966c43f4580c04da2288c9cb1b9d0c61624b106f7be97ca8b1065523cc3ae3a5cbfa8f61987a66a1f5d32f0c0012f4654e6269220d154672f4728659b39180066c674c694fd45ac0acc3587a07e48cb23d490201e591bce03f864d785386bee5728f27e9d9b38df3475f3412bb47548fe943a45ded043f02304ed120e418e4ea30e47d0c1fd4a4166fa95713e17913ca7d00bae7f37c7123c6952fd49f6c421f05de90fca2b368e3149cdc46f0a688086688dd5e33b14b7ec2ea421f519e4d24a30d7703bb00ad7a2fe219caf4ac9978cebe56722400a6654812e94e9a6f83629498b5d43678651008cbb13ae4cd404c18e34fba9ba00dcc24eacfd960ba7c5f33542186b898ca30673bd3aa0a18e002bfafbdf703a6ffe363eb8d78d2ce0f122b469397504e8f740931146131e0c7123d314da56aec9f6ae088d55c68e9eac04c52e9aa17011cd95e3ae42ed5a6b8368d4e9fbd942329731a269725f0f98667059e6597ca09a9f907f499f1000df6d03b8bf653a8699f00929aa4d270c801f56a0ea23c2316c8b6a95f73099f48856a4e3b412ae3b7f5e65c90aa8ffdc348bc309c316be1250b48bcdc6067ffef2462fe320db2bb3a8a74c1191cf185ada828871d390a7369abb6fabc539ea2909c329b16545a25d8666e57f6e5851c1846f874468e2583d76a79927866fc69558093e6ec133bb5c2e3e5668cfb578529595c99a82fe03dbc44c3bd9cb19e1e4a394e8039eb347cc3c05ddfcb9b12b88a1b89b50e811d8f59d24d7cdbae72c885473ac73efc1b379389df6d44aea5d6d517f02e4c269f14379651a9c0122b5adcda45c3d7c15b3dca8e28bd6ee8d721e043d65de63240dac4624e96ca3e421a9a0e05a5e084984de7a5aa4480ad3ea292f21a9fce7a9f110bd0c8a22100b7e870add6f28cbd743d5a205dacdc36db6e3890fbecc8f90b601d08ebddb01e1a9ab5f832ddc509b6aaaaede1af33d95201d5470454d484d2ea4d6d13d37d2bb4596e76cae16ee1cfe0727995a8e9f4c0ce8b94bd0626ee3ea5e6731b713945680c9837e6c105f66c1e91c3f55bc474bd36ee9a6f72921851452e5e61d935138b4bd16d66a4a1171114687e13398ece656f92332f109c00157b16ff110a6c1ec19bf9df557a00b6fea3f42ea78b004d7a3cf3ccb451c211ac0b81fceb986fbf1a3c42d45a869ae3805cbefc0d1a4442d6ef831dcd0072bc5f44c0130d710d52e60aef102be5ac884cdf0d689b04526f130244d2b73c7136dfb7e4497a2ab13ea7d40a6909f898db31be2025a5b8c3c9402081b114e173d3e95bc0739bc6a991628af4647b29b1fa21e720b998f40acb2076901b7aa6501f136962c1a02770419a015e0d8fbb4c17117ba8f955efaa4fc291650348253f21857eb986e2b219256a89cb62f948341a718419db1a6086d57b12734955ad47c967f9083ab621be4637748deafe90ae32ee3c49645b17d79b189f9fc77d11060a39829d0c5310e1e4f6f53982fffe9e0db5d0fd854e1f0ce028e065d09899f1abd35d9c6a0ca3e96667fe64f1173b1a98ccfa31e0194e75add5bd0ff74d7edf99fcfcebd752971d956f67f07b757199aca7c6abe7f0ba8f902626d9713133fb9e2698fa3b8110230c123f44f95b3e31127eb9cb78ce9a884604ab343bc5287c7faa60708e7c240e5085e608d8124188319d123a64af3720dbd25801a2228a1570ee8eb067139f104298eeabeb54aa07c7d8b7f23342ebe71d807b99e42536dc80b6d6996cc81774d49ae27f49dbb75c67ea49b6ae75475623b863e8838aa1db61e7f207c57b94b390a1b14402044075823a1e8a96c3f411487266f15eccc7fd889f7b1b9c75b7928f37c5b9c13d80d84530df7acf24b2e6b44cd934b8062407283ab52ca03782ddcd51c02c301eb4cb781092a5fa1d15b81634a80872c40cf1d87251b32e10c7c600c2d3f07160c100e4825315e446c6b67c10fb8888e9571291a174191752c16b7c01f6229ba590f8fa8780dd3c8cc847c535191aade872cbd1479b3093687f8ee5c21af05dba68de28e84c0d7462d3316edd32d00164fcd851a60bd2b2aa0b5579540dcea49bf32500ed0eb1fd0ad099c4c420772095c6722573d1508324c168c0b2cb54aecea400c24f62302602e03af43a60e6a296d5e492e4053df8001aed5be0fe2c8a5f42068d81d44e3e2ebbbbe65859930c6bc22527eb0af9721bf24e0482e33897e7d82820a37a5c13946dfa3af1ef5804cff0b1e69570218caf194abbfb211abae617bf19cac69c25ab38835763b34bb285a8c34e26a0e21905aa317c97a6a14f2087f9f70eb2dc8fccccf323d45b05e4ea3431cceaf1acaf33ff867dd9947ddd27f5829fc44a2ebf2644adf6f8da1b3238da95f250299fb356320e2432502ea344d540c1118800024b181c2e8fa600d40560b699c524d44df7d9502729c986e7de30ef10ac0e1826ac1e5c0d9ef5f4adaaf270ba9ef2c394e417e5a0f9059d84aeadf0680adad973cdec0297c34f4d323c9a6b4a212ce93d75612d12b7108d8cc7eb51ccb2e4bab81d549a04e2a6d678a1042772e9ba8a609885b0283e8aa0f1bf4c250e849d0f84860aced59800ec27101d035b48a02ee5d5eb9fbe21167d2b67ad0a4f50bfcae9715ed08715c78522c6cc89c184a151984ce313668bd19ffa8d00ab008079f03eeff6f5a0726919e8f52a09d2224cee688316cce1b90b632fa75a21db7d3b7173ed20d5a5d3d319d049d74cccb68ebbe6aa87fd7c3791a05e14ea42a81cc9f12cfd56d1fcd1a3d05ae224e6ff2a008511ee64f3d3492f0b1f56c3325847397b28a5e0747f988fbe31c2e49c6eec66dad0a0136bf6928424477291156425e045f95a1f8a5166a491db2a3c2d8ab8f4b169746828192860469d98d2bc420d7f45ba55ec46dbc2e3cec6c6e65924c5c1417a5a4c31870850c1c1b69a38fb59d795929fc4b044ec6d3be580648f5b8679618f19d3842fcbab5264dd196b1ebad791ff7b9b0bc13c8906f498236db0c14c9c2712c3181851f5fcf961dd56e5746feacf55a068e6b90d2b7af8249344a44b7528daf02c7376d9ff188210c0897683b81479570f25f44636d370dc1fdc56e5cec0deea1827f45787afe62f344f4505ab5cf142a4cfa3994c20d044560a5e77f1509821016c07aa0da4a5cc3156d3f946616337a4a304f5d20e8723d3363d22ba776519825f58b4e22ba68af01dd1afbd058292dc12f00d0f5ea6908043cceedab87ac3201aa8f091ed51ca72aa0203723910dd7761ea6fc635900183ef2c661e86ba2ffca053ac0053cb7f307031580ea2b0e0847edc046782400747690a2e847ba28e02ff1209afe4d41760810883145313a30720845fd019b292414a6f839c1974eca2b83c203f9284774ac133cc51e7fc528fafa71c5ff5354bc718dbd00027971bdba031a799053ecd51dd400a95a9a425608d22b06d4ed69a0e86d37c9dfd4f0c2adfa70eb2df62acac1c3a1f33f0c816fc89a1b3de23994b852d2567f20b2f865d15372f24501e60e0e20d2ba1d876586ed23ab4f1f0f9041c70f51682aa00126baa54d9279ce77058298de16407d20c86cc0c2e18e0f452433900ec098c680445743563aa4321373d588984236532c257b0487799ceffee7725ff039804c5299615de956d5322f31ca22d0cb6768b9c0359cb2973b0598210f1502393c2f9bd88a7468923e55c02ddf06e1c3ed8e3632cd02bd9049fa5a2fdf9550818ccf6a71c03bef585acb09945e6995c3dd5336b9fe607cd1dc31821554e572a025d26a1b6d14075343c5f3efaa300a81fcc757e8bfb3962ec5af748a6d0c33d87542cf708644771b31c8933722f7fb38d183c220dab484a5f95a1396213a5937e6d2f4c2ac9da40e4272298eae481ae3c4ed9fbc5436c81bf202e6880d421c787eec8af99f946ea77690d05989a0a390e46d70b2f18d05f1dd5c90583beb72876db80e2e1c8b4aa2e39b4026802fd6ed49bd32ba2f47c00bcf494442f10dbb3ad1d217ba9a8fd9d8bdf4c0cecc32f01a5a4c3c224d6be9a9c967771104bc60b60580eabf854524ede020f336aa530754c67f00e46ba9feff02495b9556877144846e0316d0226ebe46f1613a7478428db98680421aa5aa89d6f3e7fa1a753e6d5ef82a04ca1f285fc051bcbe1788d604f582d33d64edf125101a7105a20f3c124713f4185fecc508f8ba7386d36dd00b3e540794c251f7a5d505f59a6bf443ca35bebd699ad6016a7a50920d2bcdc493abd9edc429358e55868a5eb0aaa23713d1b1113a6a2262ab038b11eae3e1c132b362aae903ed0287ca0e1188b50af0c04e47ee11f0c9066e94ffe7635838f87b0a6148b60bd71e178386504ded44791f7187b36eebc7b58c78e4ccd098e9484339160c5d2607a8def8d5d4cffb96fda94d584aae5abeb8b7674fa183b4c0d6f0a666418043670bb0ede564109d5742a565837b1ea20ba036901d527cecec9239d4daf6c1d785283d6a23be4688016aa1e208691804675bd695289a6c2f0d56a1813b0ba471493db0f8cb80deedc4973c9135549ac8d90c9f26bdd7b40586571e90dd71adc85e66d8e91d7ad14ee5e5059563cd9b1ba696f9fbe045767e81516d8c75534f94ad9dd81cdaaa762b1ad1615c319240363befe02c7e5b9122a05f953a596063599c9de1174cd2be84ccaccf45f893aed07b9c6a13bdb64e2f108c1b15dad50c8b81132704e56f1f15b2b34f33158e7d74a2840e00e78624165c1a466192aaf9e5099b013b93fe6f099479962cb51cafed45bd297023a2d5ec88fc82ffee4e5bc6a805b498c89483500016c377570c420f1bc8c00b14008b250b3b7221164864288a5c31a978987557d96ab5f2780ff4ba8279a5f2022bf73009a8e4b24b94de6f15089b53355b48b3e391b7bae599e75a5fd74dbc6fb2a805ba7f1c58e923388052049daea8bc7be671214c1cf1b9d3fad54f0ba96d4159ed1ed93fe06b58d053d5e07aab9f6cdc0e2d832d72adb7dfe4b195b2e723d642b0ed11aee56f39ef9a6316b2a8408b12baee6f8d64cbcacf6509b194804e8b206e89a0938cf338e43edfc23919e11328fb9fcaaa232b6ebad58f67a097e136a3f49213e94ab34da93daae69bd67060496b778117ff411d4db1f36654eec512214e57664d55c6a8ae450904c682693608aee52b4e49c50ad570b48c6bc4cac5d16e11b975b06a15c548080c6fb8cff08ee415b22218b70f9fecda07624580db84925b9a16d3214add8a2eb692a8393b48718feb410d76d5a4bb00c8f1a343c9f77622f93e312d191e481b18252ab709abdbcb620f7ec650b5856720c884466ae70794fb725b12fcc8255fd8c91709bdb92a2c4ec725d9886f598e3e61f8b8bcfb00006841577be830a782beede0f094deff6cabf53e50a99b50f26cb4051493775054980556bcfca13372ca2bb829d90e192ddfa48e5d5da26a1fedf89952953fb83aa969fa1fc9ff820da1f9af1edaa356717a6b514d519e8f477e5ce1abcdd0c3fe18102d04bc650e07f893e7b9db968ba2b61362866de25773ae0d2ccab0dac1cd362797e0a18af17b66543956316b5c449fe5da6a424e08b066498260f806f83d481128a92b82a70dcadf44c8422b4e987938366103e37e7b7c1c9bc72e32c4aecf62c33e5d355f8ed3c5e9be0e528b4a9d5a139d80890d296e5119bba0cd99fa9e6a16b8cb00955b66125050014ccda5676d10e2c9e656429b6076a34591a5d904d22112252650cd4d6a16226d03364629ce2191c22658badbdab62fe99ba69a0f5fef2eed4fbab0e95728e8df3f89b996cfa12ccced4a7090f2ba99db52570947ad07efd167e4099014d04cbbd8ecd4ba6dd43e240520dbabe30410c68bf957b4ebb525f21cb0113a57221c166eaccb7f68ac7183a212bdaba7441d60cd98a0c780542f5ea04289dbc5923ca3340e447441d6e468132d17642acc5832007757ea9c8a9b43bf5b5893268d596bb1be9a0cb145e4c4b41228eaeeca352ee9487e4822deddf03977f4f5aa395bc704e5ab012a13d5decd89ecb86d3d9b9b08ba2762b23b5862bd1b8355f1cf9406fc1f377b6b68f401dcb493eac0d9e08a5b14643ec6b317bd5bdf0a9df2a9e999b33376f5bc8005d19561dcff220ae41752fb7f9156a087db2d0f81077b79a5b1be88bde21117da2d0763cdbe71cb5b90ff77b5ba3a9e431fe27aeea85faffb25252b4bf9e23d5077182a532a94a8aef49c08a12e0bc6cc5ae6f0f83e2b97b08ee4e1f1fd78b964758d5c1ebdcb05254d5de9f71c6d2b298044ae5513e88fc7f38e84641cb1aa854c24a09c3b41781da0c87367f594ecc4de3961788ee9919343e232c681b84e0afce214991c036420a54b5cf5f1f23e2e96b0aee6e0fd2e562a615d920bcff7bb8b92aba3fc3cbd8b4b25aaa338797e0717495647fbf1fa9eb324893a6467deefb90a24d775e6f2f29d06ba1c7ddfd3c94a1f34dcce8f23c324d9012b242bdd85008d9df50afb71b445d9dbc639d24594a073ad6f13e4a37ebfa323070aee4ee40fdabdc1ed436b1d3f5fd61fc75c3c4ba603b0652689f46205ea0e1e9a0e1e6a648a2139c7331ab84817124a5dd1c711b66cb90e12a316a1434681ab06a60ddb4947bb5517c7848bd11f70b1923e2e187d6d5ae5bd1d88f28a62fc55dc3f836a3dca16dc4e1b7eefa8942f08b8547ba37732778eea3f6d70e3e0b1ed8bfbdccbb51594d58c7178e373e20833a83dd1a9405e3454e71ea8b8eff8506e87bca1b9e995481895bf6a4b4abf8e92cae44a6ac0082fe89ce4e16555f618b57a03c4c1df464cd1ec63af0f8cc94a9ec681e8f2340b8e6cd064d24fe3835ed837c0a852235d558dbb445a30b2065a09740c9e9055614d83791e330b4b0ca486ee6b45ef534c63b857e64223d0546afccf365c51136ff6857468a5b51303233570a4c9a728865ffc2c1c722a3e44db7797f3242481150a143888778bc9561d2374025399d451f0b7cc7122ec48c7ccb7b734141238b33d45a088626d4a1ba08a371c85f7e62962ab415df9664d4e9dc298ed326bef98399fd19f280b2bc8ae397f7e5b10c3b18c591e6669edb2790fade260f8bf9c8ac2a82d6f65acd361a81351f4a71063b7e6fbc7be2e9fc24d091aeef2a7d1b767a9b5b6a91477f974dd939d3be87728ca7d51b8cd48fe9b56203388e3c3e69e756d0ddcd78b7e3769bb9f9a58dab0798e777017ed43c76d7a27412067338e7646d461909c606afd260a85e74040e1f97f2c25c3a94fe191f54cf8f4b6d07c777410308e310577c31f6ec3edf55aa625088261130795fdb238b03746d360fcc48bd830c3a31ca4040babb5adad46f1fe5c582e467f7998754b33b72bbc9b7dbd6210e041438d629c361248224f24f850205b65093220cbcf01432523997af81006c53878fbd27143918882bcef05e0d3f44168121017525c82d2345cf06e203f7627a168e725142d85a5aaae00960a54719dc265b53603e618965b5797de1985cee634993a066f070fcadd096e5675ebbfea2f91e8564597a12452c22adfaf6da23ac88eaad89d1ea63553d0070c30e4bc1414e927b5b508ba6b7752aaf1126008bb98a41fe6b732162194f2d498e8d9b92a97d0f325444b077e542f8875457268a9fc06ed1d95b78b85da41644a510cff662fa431ff91d65e28e951d00ae58077f387003deb7af12899a04a670f653556a86a673a6e7549386ffcc55a6afa1caa62bade0bd26619887b86348f598aca6602283497badd48e23e19219e2b3e10824ae15ecae86a9fd9d973a33f77d10b9f35a18a8309394f1246150f74d952f15cb539b2557a253f052acbf7c22c37a136c327d7d62c27879f7601d3fa92763a678913208309169fde6519e56a001673dab6b21c92528f994081bd93aa36b081e2f3f35c49f9c45841fa6377f9a5e72ea34717dd5f18e805ae06e7f7624ec1b152ec308aa10aa335c7d915cf954581750ea260f5746de2b992df822fd76eda4228581a47feb7cba301f17180bbe62800b2ee470d6261a0980dccd1438b495bf45bcdb6d973e4f80cf92042f188d81f1bdc7a73800ea657c03b9b229ce8bc54602dad1d43352347625fb756e9d4247bf1dadf6b8f6fc268756e30e48588d234cd32f4635db7a8dfd044876e4f79f4ef4678e78aacd40222b280b58b0bfe474f71624fb801ac5931b8ccac0712ebb93f6725a1d53eeecf8c57ca84e5bbc6cebc7fdcc332ec223479ac0632039d73d527f3b1ef8cfe1f0e441a079092b92965714cfff5a2750d0e40f79e93f486a52499905848fbe0a202d9dc801d0d559c9415391c5f2d8d8c1a51766628004001d54fff94ecd7a0d448136adb6c0e8d0f79166651fe2bee0f173a954ebcada566c14359a6bae8e88720ba1a6132583a046f4497d6865551f38a3a7d3bfc5f0839e93a8cae8992862525ce38320ee4493ce18a9106028873c88dddc3688dde6221558c8350c045e10868a02ab81ced8169bb3fe5bd45ae0424c6ba64574f5ffe65b8075f8b3040ec8ae8b595595a7d819094a894aaaa5107e1b2d04fc00042da4388906cb34fb545e6e9fba1ce71ad4289b39a9aa3c907ec26a470480547248d60b3d35525f8c25d8b8c6910447666bd090d6f011582b44a2445640ad1ea7dd4219ec1da9f68a4b48b0634d1257408a07ba45688a2a0cf227ea0b5579ae0abdc4fda5e5c6597660005d70a27b928f73472a827730dd48b5489ddae22c0fc6da63397ff67206cc29180a4ceeea4cb2368f88b86c0e3e93fd8e74fb47359caf98eda049cb08f8f08000c74a239b9e1781916e35c06ca595f4c1863465b655e52002be7bf8c3e169d89d172ea119f2ec5c94d971d033934181e941e2a11cae7ee279fb0614e4f3d616b78205226737e4ad680c1a99f32ab04d43debde448d1b06b554d2438e1abdb966a8ec4f1081f39d05b286339b403c14ae9d3b8ecb188f7c4694c6250b278e0a76aa10e7c9c35a29e2815211062f9070b828ae6a681b80ba03bcaad0f861fe7ecfa4392bea222d151619a864a2f197784d733be0e3a4a1737109f0c7014099ba86473bdcb12e1cbab0baa3222979d817c76a4f0adc17f85e1c4c905f988c4e194bd62f632644a36ba33596cee8ff470766025b39f29af3852a909d1920c53c69300e483d14cc4440bda1e4e8bbb5032489c6e04e6fa7d06ca862ae302e6370ed82598d9bd4c23e0361e0af84174900b07cf2a528ca5b5b54b99979a42be5293163c1363c6bc0a12a57d492c165122c57ee8c668357144b1606ea5cffe5fc9bb3c88e70545d722e538f67ba89aa9d928648292df97fe93d29062f01a652a26673a463722aba721262c5492459bd2cb0d781aacf392504c56c09551a3da9c92b65ad35e978ad75d1688023d68a1e94c226cc841b3a7979b9f297a67c9b2673b8a05d9dd0e39b640e48342700f6061aa29497b68070140f7402ca119b9e2157176a083fd4eb6490e6bfa20d0ce4d39ea8b2b386c7140e464d35717df87e513e7c05dd2415485e158b530045272355e9cc28063517128c10bd963b75fa6bf37b2f25090f4e3ab9326a87cbd00e72bbf610af3b13e756fa63823225444d4f7bdaee62b3bb8b3be694a7194c748632e4b1c48ace82dd8f8d8a7ed76b9923bd3a4c3faf36e71a5375b946ae061ffb62729f32bf351b27b988190747b7b470314895d07fcd2a0ba30a8046033d96b605aab2aa314b92c7679e242841b7a0a340623a771e930668dd9e0b0a2a9cd1e7973add595945e5dfb713c88a06099d1642004a914d0f5a5e06d8c2c2dfc54afed42544ed16a3e77d66106f501b5af43ccf12699efafdab0335d2896638553b1d97c73581595230453a4a7bb79e482d7ead79dc23672e1f39d2b6f7ab39d015adfb0f1704be72380a3078f2d886400089122941470ce01689efd19055849d92f642dafe2b96350318ccf04d7c963ea3a27189cd84719b276b53683f2a4ae605909a33876e2909df31866d923ac9ea0e9e609aa907b8ef7492906655741b55a59632143d060cc7c49d46f9c23aee061d759eebf19a0ff27dbd09f398e34469e629e23d15905d085c900266afc326cd3a0deaf7982f2cd0b5e7ace24c952be3c57698aef1cd4b17791750d21e350521c84db81fc4843921b170f2b40d39bc2287dc37e241d7306c2329e4e800774090b470415692fded2fb10914e105ae9cc5e712571058e9381dcaa3ce103ef3abd0f70fba700ca833f6ece953dccf48397cac90e5815633467a82b6941c5b64f7a3502372778b607889fcec07c91cfa8953a9df7ce2d13ef67a41536cd72d9f371eb332e0bf9b90bdb74c0171141e13b211ef7a1afeffdfdd5b707716dc7de7c70866fef5c412eeff5a8d20c40834ac4658f27fd5fc6bd3eaf85f23dbb69acdff9b564799aeb670d35b129d2449dcbdf56304d76a841bf7d77697b37f6dab6dbbfb0a2ab8d7bc7ed317eb52682f25b1b8f2da65948c731ec2e19c71908d06b83b08da205736aaac6c1ca19cec7438dc3a36d19b0fedda225ad4024f132170f71f587c7e6099bd92cfe2738556ce44e0ee3d7c95b385e89d2909fa8055c0e0de85d1d9408b194c1a746347a40b72240128f053106ae00e86082e5e23e8059f3c8471ffb172f7be707771eeb4729bbcd598b620ad9ce9d48b8b647fb1dda411052a8044124a58e0023b3f441e0992ff693d92ff16fe051c9ceb96cfcdbe8a96c98a8ff76ff256f7a6b3c60677077d552347a96dae41f96aec808811dc0f6c8183c1122f080c304106422c61831d1440e2c5208b20252cc0081f988009f19cf8a166440f00969c01c2e54560043a5ebce02531031e1f5e0f5c963c01c096095cb1030f8f4ca2f530981d1163e7863705072b0590e100236e1670e31d51c0ea88323908e267677ede639142182b0954e9e22ac343f580c40f6170e005237488d1ed00044c50a04ce088252b303a2cc850400d303862024b9078d171400c0c548084c5061a20428b4e015d84d9801645a4e0f3caa2cb010c8e198040830ed2165574b42ade0a05b0004b53049ee8a07829030825fc8005eba289eea7035a8c0029290722b062890e8710a2484086009806604962961101059440880c8cf8a0c211b3063460d2801020204ccc0646cc131c808525b014a188301a18622621c5102428a420224b121fa6103c5ce141882b0a80a2045d266e89242f1c909b410e5c0d13cb0f689a6858c286a51df60c7ac00d02084840183818c6f92306b307a20eb2003a10278e1051ac4b023b7060c5fd074f64398108415a4e4840929309c009543fe840a2cac03d04636850817c904209314bfc013c081ff093c51364fc40e25e1a60f463851212c01a12e2b716ac00e8082472c0c5e67224206e0062050d3ac042ba0339518415344c91224103ee28e4e08291a63186a0e9e2ee29d1b403289298dd9cf9e28b2c22b03a6385112f947146032ae8400956ba30a1bac43883001f9aa882061f79a9028c3337345146250a91a363075e9c09cd10c0067e100047010d2dce1055c0870f04582d040bb238037a8165f5040b2d1c415571e606025ce8220a2c68c0218927ce20420ac6a830a5fefc70a08933b62080cacc1823a841c2d212673ce18125a4018010a3802b923883026350207685976dc310479c018404b60841039828c30410469cb1b72002ce07b973430886386306228a76f021880fac30c587335c98a28933322124f041ea72860a0298c54e630d30f450c319351bd88012622a70860b13db8c3080d0c51806a081097cb0c268460b208004cd0a4e2c064210cdf8800c92187dd8308b40172c668431c05203ac00810a53109164c60e50cc60c90f1d2c48c107a098b1d4458a2cb65841142e1c5962c65106806a64b03024033f2031634818426ac094c04212658498b1230c0f57a4a08811142186cb0c7fc1de810a1574789dc0471937f842840e30901330463ccaa0a204ab21884421834a911b6560400724367259386045959b3288b040154441bcd084743bf39541830e8c60e17af4a0072aca28832e404b124028218129362046194c58100396d6cf940404008c325c05c0220525bee05006122fcac811019520c2802db9e0460b3284700687813244d08416465990a10512e419259c200151a0e08c2ac820c10d745ce125d131b485bb7b8dcd0dcea4319fcc1a802aeed387fbd452325d8bf37925afcb916c1a49506c8922cdedb4ea0deb98b6e08e2eafbd81626b56ea985897c26a0bc17de90d147d0b52125113a225b1264448312bb0289f44c9efb46e1d415a3923e23ea7178104eedee3ab5412ae3378718d66b12757ab9be6ad7bc22a02d923ed8434849816615821c6e581165cb438c110a634d1fa41254218255431453b119e49a281248805339c4002111f4a44411bb34206b4dc161c804c8d2b60b8e4120d8ea2b041428f00c8c0a00159042c10c01530600dd3bba21ca4b0822781203898d0440ac6c4e0894f0b150bae0802183db6173d35480032c3db020134e001944ccf61e4e5c005228811830914c1830bc40371044a294cff7ac073835dd921893072e8c1c30f3009dc714386709b1d94c0e70f8f3b0a5db8b887f3827bd1bba7b07077293a283e9f44c9d33d56b1fe4bd32277d7f115cac9a678a4c57256ecb99557bbbb155f9d66e0333bee8c67b40a77c7b23a914cb83725e1ee13c67d0fe19eb17871bf584e35b83b6b7522dd59337713dc89dcbf9ccf7327c17d04f79c69c40765f52df131f12f2dde12cf9e867f97f8f18e2541f2eebe72f71aee4e4308f8c3a3ebce7966dc8b818f23bd21619c942b8d56064d727671f7197ce51d55118755f40187803e3c4043f4ac87f6e3e333e487ce66408088457e684478b00575dd3487602e6f6d6b35f7e05aa621d833d28bc51e9dab9ed2f3b9dbb80f01d1f6941bce4cdcbd4615a4cbc2b71d49fdb24d65387cd5bdbbdbf05527c67da44cf856f3294c5764d51171f7127cd5d5dcfd86af3a24f7244d55bc36571d56a69dd7b6f5b78e8fe4ebecc5b1c436fd3bee0ec47d5e7737c157530c77d7190c6f4ed3d472a44c2fcb7948f697fec52fdb699134e36ef97aedb1d4558aecc53a8e3474f777ef66ee9ec357f38bcee0bed154ee3e3de519e75cffd217ebcde5ae79df7aab2379b3bf2dcdfb6bd7ee4d6f19d39efaf083bbebf09573b19a35dc9d045f7911c43a5a4a7b5d776ef64fc37fb1ddf47319dfea4d67b0c3e1ee3c7ce560dc3dc757be84bbe3f048cb95097f6edb909234d4190c2b530c477388c791ba3b8efb1ce2ee4f7ce52d77bff1956bd7b54c5fb42365ba566750c4b79e7da3f58459f7d48cc39e5ca67966c79e2041683421f4c787c84f0844459f2245421f1f22408ccc68919f2243861801222244a4448884614fb875997bdc1de5ee27ef73f78e660660d8b8135cb8c0dca3a9811436362aaf480d35dcd0bdf737ccff6abe862e5e3ee87403cdab6a5835f0f04127560d37d0b04e8f62dd807a15cbcb07799f62dd80629d5801f0bf0135af4d0f200a3079983c7c5dbccce7e163f5f0a1c70fabee6d6c964eff75cee3de7c62e3df695475d1210758f7dd373760e3734e1d4f4729a5c5fbbe2f45f37ddeab543f3d256f7a5ea74474faaf06a6ee55acedbdea559eaa86948ab551a925140d6b09f5fde93f96a7ea7e09e5b053f7be345f354f636cdceb6c6c68de4f797f4cdda372c09650efb01a96961ab4e480a158db7332612a0f46c352fa7eb2b4d400b371961687f9d780755f0295f718c0eafb1caaf91e6473a3d3fdcd8df7d1d074f9fe86e6d3f1209b9a1b146b0793d4a39652ac09e4ba47b12690f3de059807751daa86c5e5fbbaa86cb0f9f9dd04753a363a3cb810e47d8d4e172f33c87b1e5c08fade6f6e6650d77d2a1617efe7dfe878108d4e179af7f24135affaa09a9f362c2e5e171b6ef0be86c5c5ebe2e5836ebec399e146c7861bbca76171f1be7befbbf77092bcef6a74bccca09aa7d1f1328368de46a70b0f2e04d5bc971964f3369dcecd7f38433b62f8fee667f07eb26cb0e9a2aa8243d00dcb0625926c7ebe0d35dfbdce0af533a887102b2d7e0686622d4d20d7fd0472df1f753f7176c4f07df7494708b0517945baefbc28a1c5052f3a5dbc7c2c25b4b8c083125a5c80697127aaf884f9d0a1b939a95434a9d4eb2ca5fefb94527f4344a3faa9e383a6e655a8997a1a4c1f0d1d231aef513636362926a9473dcd4947e96607ea69fc37513a386fa39462d540a1584aa93fc16e5e6907eae7c7a2f134de6bf980b57058362ca51d291694aed529f950f2311da6e4c37523e406922754a716ac85458d1036de4da10519984f210330a69081135a4c3183267aece089b1711f4a2a958de73dd1114949a17a1b95a75239ccc3219a27d5cd89f5a1503f513f535fb07062ce474da25933e7ac614d550a85fa13172e5852aff2fe24832fb0d3a3726ce4e4bc0f1e23e030994ec0522ca51b9b7796928d4e172578f820259656384fe6ac81e3383434a99f1dec05ef26870f1f244e92646353972f4688994b74443ad8474287737343a33a7da7fad42be550427df734384f661898178548f5a9bf2142b14eaceef3a61338446062e35d8742d580790f03294e5fd73ab2ea7e3af108908139ccc98881f94f3030ff2f60fe645e3006ec7ba51a9ffb8b69c7c7d2d149bdeb3c99b0e9ef1f0d4e1496120e3b3e7f9fb06fced3f45ab028a8f7779df6974abdf7299c28f3957080a55c3e61a76f7e1fcb0553c15c65a433df7bd781eba8fed3f1dcfd74aa79af86a5721eef3f970ae651bcff5ce005cc7b940bb2e8ba16ea779c5ee983c13e2596772d1f9d07011bef6c2612abf99fe7d498af248495f7be74621561a5a2f9ef554ba8af791a94ca28f5a8d4a394509f7ad4fcd52c42164fc052af5a02e630d5cf208919f800db13e6fdcd2ba5523433353f1a9bbff954ea26b523a5d2d9917a54ea26a5b2a9497d9ff2683ca60ff6e14499acf94bf353af7a25ef77a876a858deb54ea954ca7b7fd74c7d8ad512c24a4b0dd8749ecf7b9419ef8f1802e63087b1a0cbf7dde85add64ad56fe3be6dbcc6f3e0e8d1a30a60fa6fafdc14e3c543972d8c03e9c3fe130999ff2ec3c38373a5a264c29c5da5143f334ae5483faafe6fb767c9ffa1ddfb36858ad6fc7f773a8d5fa5c9f1262054fc0dcc6f5bd520be6deef98ffbdc7da315933954aa596523f5fc5f296e6eb1d4f5ab0f993a565c24e3a1dcbe5116009180be653ace00bcca6461387317d302d35604ff37328955252ed409d7476a0fe44837275444e3bbe9f9f62b194767cac272d580bf6795d17362ed70ab8c05e309f42055a94a1c517b0ecbdd20eafd5b55c09853a9d7aecb09a307f25d58ed3bb77fa16ec7bd489f5a405fb58adaee5df827d2ee7f1ef2e707aef54df2435bbf94d9c85aaf9c9f28c4eef5d8d8eab5844a925d492d74d326898a05038384c76e0d0f8e3e8689951683c1ca3ef532ca6e9b19ea0de594a13365d9d0a6c3c152c01b379d5f7ce644fd87c98d7b526931d34359f72f7bfd132a3a8584cd3591e8bc97c94efa079d5a7be4667070deb490ba662b55c5d6bee095b755074ef75ef75ef6999666046ddf4973fe998e6981a5f4764e9c65f5d97011bef882c79dde97beffbd3e96767f4bd37719e7cefbd0ed3c4e134e705b480f9b40018b0ee6dae6802f5a92ca4a8e12da59e6805d3dddbd878caa686d2e93f9bb7612dd97ce73a4a3644dfdb7cf73636272d3560da9d47c9e64f46dddb9c74749826d3547d87d3c486e6776899307fa60f365f4b0d188e11ea532ca609b361297946a79f2c26ef3bef53aca5eff784b196badf1376627d4cb44c989609eb589f04b07c9f4a02cbf7aa2b8c80a91ef59e7beeb9e72d7fd282b9602a1dac332b2dde07f3be21140e940f8563f4bdea4f3844a8577d3727f7a6ce93ef3b16d3849dbe57e10c7d93680736594b4aa8573d0a8708f5aaf770b44ca68e69c24e4b9f77faa2c60dacbb7183070f1f30f7efd165a574faf92e16d384792c15095860b0c06081a1278cb5831dcc39a7cf1d745d97ea7660c68ce7a1bc1d7ca7ef74fa709a7c27d60e3c146b07abf94d3ad60e521e93a1219510de6aedb0c329cc176fe766c87bd590f7279c187c00be73e39d68d0781c96967986a583558dbfd1e19ee7795f43e746a7c6cd0d0e0d1d142ca55383460dd67cd4d3d041c11ca7c9c98bbf4e7f43f34a29a85837377f1ae3d57c37a9ee3480d4dba4be66a65e751a83fa14ece604c65f29d83ce58039cf87001817a820ec70e2e606c7179b1ba7316e26ece6956e60abd318a7314e639cc60893440ab039553663c88cf1549e0d991b2992388121851452482145f737ab530daa2655a3aac951e3440e8f75ca01eb9cc0f185842f2ab052c2f1650718ef4fded3b87b5e0d8e146027168e2f2b2e707c11018e2f6476386193031730154cc71858e7382480619d60f0ac1145c56ac26c5ee90483c9ba31a6460c9c1a22c0baa749fdac0111bc49c289c68604302712c43855011373127312731273129303eb52ff8d61a16e70810358f73ab8344101e6b16e8ca1c04a89043036588441992085bf68bef3583837342a168b84303ac4c0ba3f91c005460298aed5b148c042c718551833371d919b1b188c018299f9b1aa50fa927c928474ad9b396950363573ce316680e0d97c2a6fd6bcd2698c5547c4a72372c2c141d530e115a1c1aa21a38095528d14355274ac1b2a18cef7e13c0e0e8f8933dfc6fba9e319f1d2b1c0e7e4e37d1eab868bae45664566c26ce61821a7315652c01c06b0ee953e324ea44606deeac8a452a7d3186360e07923584d26dde98bef7c4f43c7fd3b9dc2f8ced711390dc05b32984cc0e063a1b89cc6e860d35bb146b03253838c1736b0810d3cf5a72054f3a3f9f9a72f5ed0d7d1f07e7eabeea43a35c171e2305587f337bf83cd8e1870fee69370584936352c15918aa5659e9941ac1aac944e0360d530e13cdde7c5182fbc183386a686092d6ac040797162c20b1a9a1a33a923ca942953a64c993265ca942953a64c993265ca942953a64c993265ca942953a64c993265ca942953c60958e7a8f91f13a957fa3cf0392a285583158d14ced39d6ac27cdfeba869e2fb58df98309eea6bc2743aa478c20b0ac5aa69e2bbae668953982554aa200fd87867c5172b7cb0c24b0a289cc063870e1372948083841b23d8c859d5a08173635343a34aa14edf14291883003653cce986102ba51bfe4ac1bac93a62a574da42f5c52a478e1c397270d18991822f29e852451948a6a8028959c503ba2ac054e1858a32603e051560c09c8a32b02d7ca8c8828a274a80f9145428414502a8e0810a2eb08982792c25265804a64081992950d0050ab0e850f08487822660d30b6153089b6eb26e9c057f0319b05000068a0c00014c18b7d1a9b1ba49a956aad409a749eac60945e39b7fa3b2d15175448c7831e2c30f4654353a9f4fb1a23162e407560a6543274747d5cd31467e40bd0005463841e31d214289e66f3e1adf7d0d0e0d1c1cd609a7c9912f4788c0e972f0f06ce67ff36b4e343aabaee57947be742a295629d61130aa0ff5f37b1d5abc336760dd9f266c4c87c5e98c262898962360dc53709eee3d9d9318e7e99e45c44a298514fce55e91d5173728182b01abf92756e7850d8db78ce1eadd98c992b1512492225aa2254d939634dd4a9290d08cc48cc32a658c5c86309071308b0c0631312e758cedaaad841406208c491856b724faa28c1139b1edce9424020366916d2bd61cc6889ac02c322227442d22cf65bcb5b53921e3648ca6b63097a4971889b3e844e6ee23d5b19de97602e4b12a96638e8e554a0d6b78299348c95b398b8d14576fcd4a62e36867b91e61126732b6349633f1d6d8c5b65673ec5a91d6511cb18e8db48a36b64b3c8e35b675b6b4a5108f41b13a525d331612714cd78c43d15252bc550979ab5be7f4b6414b9a46a9190be98bed2e6736ef8bc358dd94c966b2d61c25ebcd26e972d38d2474b1ade1a5230daaa1cde44873196f2a5e7a4b1ae92de38b69976889f87a25d93475f27a250d8de17e2b4952dbf35cfcd768880c496b1e624224cb976c088c0f89e16b8a83ad86fe2f6c091755d39ac32ae2f0382ef152cb25f9b56bebec6f383fce750bcfc537c8574b5a38e22b2133ee0e66fcb28c85645f0bed5048f36eaa8ff7337177177c2524c6c1baadc6e40d87cf73f115ab68435b220975117a01c4d52b5e9acbb056dcaeb3b092fa46ef575bd22ac80cafb65c7da2737569566a25b51c29955bdd5649ae3ec9d5a52ae230084c93a5d54c06d962414e1ccc225bcaf45673d03b9845a66b8d923192565b6c570d33036691e9d82e71157118db55c3aa884358985df509be82e13c368e766968dfca5495249178574d6d4755531ba9f7ad36b4345aa975deb7c442b42a856eba846e2ad6f0e24bf3500d2f2e7abd9232be3676ed2d63257a8b8d54c9cebb8004295bb98a44454b19e376bd30ec4b71b92e8578dcb596e9c6d12cdab6c5c5b655aa377a6398766d6c09d32e51bdd11bab6329e2db2db452452c5467391a656b7c8b6d1aab4cb63654c75989978c230d775d0aed8e35d1dbbed59236ac59bcf64925733b96ab78abae5bac8e35d1db2d6cd24df4268448d9446f19db5cf72562a2a4cc5b5f222461a5028409c92db4f27a0561bab56eba7551aeb35b79976c5d6b56dc18e7d82e499ba6b17d6ba6a4935c455a6d4a869084958a0eadbe36efa69a054890a62ade2c3e40fe0850794509508924ac544422987b06dc5de6ab241e7071b4a5cf0f088407d3aee5a9230db5586fcd6a4d6d9b1ec59ae84dd74a1b69b943aa2466d3d4c92db422da189121409cd834b529d96921b985566ea1958c73aee34843a032461abd5e5bd74dc7d7eb1636d51b0e7789b7c6a14824da58edda1c2591e0581d91c21dbc3dfd8c43bbe90def925efab65a89b36d8b477c7017a9942328bca4f04d5f06782931f28583bbc42f66fcae4d433b92a5f8d46efbae5c99eabdd13afb1cbd3d488d6cc0888c1a51edc86ea115f156245dd64dc3ad5c71af6b6532c557404dee0e94e47eab86010d290286835a93781749a20895221e110d20f98a888cc84dadb7ce1ee3dae7c6199de14cbeb6b732e5ba2fbdb932e1da8fb4bc34ca83e36871b97166b5c6e457dbd625ceb576a9b8b34b5c6f76e3fd19db4c8ab4e6daa57fedd3d62d5fdbd7d69604e6465d62cb5433596b34e3ad7f8816b6edee4d7c354487212ebded4ddb6b61e0b62fd68c2fb6e134b5092143c8110e8e230d1f5f59ac2ed12dab5dbb44732215a224e406981bc792a6750d43f1524d6d6fc457419c08a21424c758eafcda8a75d79a58deca9b6da2376adb9feba635d75edb0762032040000172072f264b5a6778bbde95eba6e3d35c5f5f4b6fb6ad2b1673b5b9965aea0e2bd93404c4c57ab3740c7f34c50dfd7c7107c94b3fa42379c348ee6ee4ab1f2007b52e9f8a75eb5a6aa9b956f12982cf112b9f2307653b554b799748f42edc92d55c6e7a6b563ffddab54cd416de92568a5f67b7d7d6b6ff886c1ca990ece9e37ded8bb7b4859b92da3e2856266db5bcc8646b58b3fe5cae650c3e36dc9d8aaf7a9a701057efe74d73cdde300ebf58491267f135c5d117a90dc8573db6c7ae7a5e2cc7702737fb7a339eb57e5b9d046a6ab3b6f0c24029bcde32ded46e7bad2db436dc8b9692a5969ac130eea0add96c04dac08b5f2f8578dcafa96d05fab83bf8fa070f163c5feaae2379c3e1b54fc35184acfc48430c85070a28d69d2bd3b562152d13cee4cb64492b1e958b09f7590d29a99f867f29a4e3d3d724b5e57a04eeaaffdadf012b685b5f4bad6dbd61fd9ae292562ed2fdda5baebb8a2e29be72ad7c29c4a3cef556ea8bc31f47bbf5d74cc55ac3b0d4b78ce2ab1698a0653a86557cbc33b68597f2d4dcc2979ac38b439e8befaa8517cabfe14ca3afa9ed7322ad79a4bfedd7f05afd497cc5c218ee7453f16bd78a1793bae68cc3afb6bd14e211e6ee31f88a055d2bed37cd8a6fdb16f77ae35bcdbf3326c95263f15dbb6a4db462e185dca59f31ad666bae4c585b9addb78af6efbe250e43ba6261e560ae7bb434fd5f6d493b641c146f89692fd6f0d65c69357fb525ed8011ebdf5a675f99a8ed75eed2db639cb443825f33fd7dab4eda713206b81345c84ab5edbfba66b2a97e9dfdc6f7d2f0b7056b606dcdc2ff5b996cedab2d69d50a035e9c2b896ddae23e476dfb77c691b6fee270ae1787bfda92562d27eed7525b8837e6f98daf90bb3bf1d50f31c4ba6b2673ddd77e9d3dde5fc7995875f9321afeafb6a41f5aac7eece00e6efb78d7aedd25ce4fc39fa3b8c7f7e96bfb3557dbfeaa4b1ad6d9e7c691e67a6bed5d759c515b486bbee56b8a136bb6ba8a5f6d493b2d254ac6910ad59bddb794f27a29a959dac542afe9272141720badd41ad5badeb6bd5928315c956dabd98a8b35d11b9020e5ad6e1bab95a604c92c476fb94c6d6869f5d6d92db432623c13aba804a6048add631945ac549034e1a0adabb8c20be2ad7a05d54a05293c47b31bdf589dd91cea59a96f0946059bdf4aea52af54f0c995a62fcd3b569972d535abe031b16e7bb3a30f32601699de556b1adb199375acdb8798950f12cc22bbd8ea5c9962b7b029b6c792d2aa18ab61c63477cfe12b1f460e6691d55d86b5a9be5ebb8e233d925df95a916a76a4758bd5bbc4390ac5cd709179ea96f2cfbf24d35361a678ca9929af314f38268da902f215716f880f8554a7529d3e6f4e2fa103bdf319c3e7c2f4d49193d7404d9f739e4e423a9bcee79c5ee764ced4ece6f4505bbad9cd548743ca9ca899f26ee2805e8742b56a7e7e5df77d99df9c5dcd0c423769fc34bfceab732a757376aa29dd8e6e76a8af9b3be8e64475338659c29c5ea732c1c94bd198388c7424a8bcb980d94d543767e7c566f7d5d008e96ea612d53cf9f092cc54d77d3f5e4dd7cd9d1a44260ddf8f0d13efa8f3cfbb08cccf6b7da76e7a7e3ac0ec627ae7abd5caa7cf6f76b30753d5b1306777ea3a6fce20b367aae64dd7751d4a68fee8baaf9b3e1e6863826a858963434757c43c7526cc6f7ad3bba3ee6be6e79d45f9cb66013cd731c1f417a2e8bc899a5f6ae24c0f4cd7a95ede04f266d77ddfddd0b4e669ce94cff79382cfec6a50aa2e35e76b769d0c3cd4a4e93e8f69b2ba724e8f67d2d87453959add0b1d0a1d0add099e7b3e6b4c54d74d9c6fe57d9d095dd74dd4fc6893c6c7b43975f3346914d9d111a56c68ba3953dda4ba19c354cde975f39b4ee6099d918e4767d3a5bad3f46637bbf99a2774365dea9bdec99bb3c8f4666bd2cc9b39e791894257e3a5a6ea9bdd9caf395138ba1bf3ebe6e99b463a9be975284ccfebbaaffba691ae9b3aba9a4933555f37e77ccd13ba9a94373fd537e72cf233070b2a245e0ba7e94d9af9e59834342f9b2b3b50983dbed975a82e55e78a041f1b277376b39b73f278ca499f01876946861ef8cbe0802fb09041c70b30aad02e2c30a5065c78924e0c1cc9012aa848f40a97e28026162045071bc5e00025334754c80b501c8002109c501e3e461c90a3c708a58144911ae0f828a2533389d4609a414476860144fe0c076564a0c02313d3b9b8900076bd0f0b2d8471859182ec6f52f8126c789811b2b8ec1484ff170077cfddfd2786778c2c63eeeee33dea0d23d58b8b7c5ec9e76adb58c82379bd6dcd8a337c7d26e1ee28f82a852f6a76d6732baffb2c0526dc9d86128bce602569a82bad8ae18c1a012a4264889020407e7cb0b81fad5290e90cd24dc5184e0d6f8727022e5f01b87c50502cfc4c0521879504b89c4e37a9156290c3e7809faf849b2390401180cb078506470d8f1c01e04223c337838782cd46dda898a8805035de911c35272ab8a898e072034b0e3445bc05fce0660b2ea7335c4e373a5cc0e566b344c08526078d2e75e4d4731ac20b09362614a1c3e703971a3a35743c9e9c1e558e9c333a9c5a5001a59078353c24aa23b878517e7a5035a824b87836281d9fcbe6c79bdfcde7aa61726a2125034a07aa06a57473e3e6064d0e1a1c29193c337440e9f0c6e87092828b0a4adfed632a9cf0bd6e6aa072bee9f17842dfd14d09a82e5525b52355742281c644d978a7efc6f3bcce4b792a8fa686c7e7a5a6a46cd438aac949a152d34b7d42be9e6faa4cf076e44093c209092e3492c82107f5ed502dd1e1db420756ecfdcc19388001191560318514650d29882f43412e2429826f183de8f9b1aaa14a5d99c1a8e88c1559ac2005207cc014f14202b678c115271841072e30811e700522ca0d84ce41f081192d5a9005141bc0e106006099c18a5151132629a050028e264080c3052c70830db11378e09b028d2d68a0e5c6e5cc19431002962b25e0c879c109a220c1083ac0010c00f1c300620090a18a5111d115564491821080712283185c710228462002091cd1c30e01f0819917b46004226822035db85491682807c74c192fb698020a107c60090a0451802ac60080e54a15a2a123af9d1c9c2bac9862010a08a24b150100031193a1235ec68b2bac40411420f8c01218a080103f74c90203519223af22427e766ce47c7ea68c173440c114514001820f6080024204f14301ba7411cb82c5851eb00c32a03ca94163063cbef8d083952a3e0f28400fb9262568ce786774669cc8e88aa042e2ab4047816e021348f7e3f94cd086c76bc17b1c29743ce68e940ecf8499e32b61e2a019c1860d6ff5d5b8a1b1c2d17163820d8f9a1c9a940a95ea50a8d3c99b8eea52a302155c5234299a8f868a488ac63be12629872296aa85aa51017d3735e677838a7d380fc7cbf9c80420015c5034ba14cde7c23901c8025c6aa8dc889f8b460e9d901da729df4421290197245096e404a0fb6a3e283b43e072031d58c02287797ae5a4f0420edda7c3e321a78e92530b2de08242a570d485841a413b784d721000171368aadcdcb8b9b1850909a44ad708810b924dd34426c42a45e3e19c96be01f89083eaa3813a61d60892030e1e40c3820bbaa8c628824667737a212765e47b52af8cd1618453ab8649cd0a282c1f0b29233a78c0014d74a8001038563e5d7042280478828b4d495340007080d49854787847522610c9a126650455a3a2e115216ae29d50c344085c6a524438482a273b8698d4d038b941129178804b099f8b480dea35020eaac6668805000970a951394161d6039793b73a4d540ca89ad311140b4a826c4a9a1f2a27a89a9409384b687c7c453425dce0b1820e1c2ca85a782265851c6a54602a084e90224447a99b2fa5e3f4f288d0dc7c3ffe85144daae6eb393df9805e98a71d9ece09870f8d2af48c0c1dc9a1aac141532407a1221b21aad6e7e3f381aa001716687c4b4e2d9c50a0f1f1f1a8f1e39da00317b0677a348fe7f34e34b000600011e07b010b60e1c4980b54e00802e06043935ea2d55006002c3358a13205e9080a0c4e5e40415a2ba8d0e3bf28a038130618387041890a2c1d26a4c2a4a08a0948208621175e27907063837aa2890f282166024740c001611630a5f5a3075440029290ce9421c66c86307a308218ce1102084b5372a4262526882f456860408602625e46889470c3a64695e2b1a3031cc05245a3221888980cbd84fcecd8c8a181f331e0870108c00617434270010b5400872a548a10c971e353011640a0a22409119a140a033c7c20030f20c2003dd0d00006300008a32225477edc4c32bc2274637c66be07dd171f0eba1a9cb89831e85ed0b980a6053759742ae8aee89ae830e05da05bfa94a68f9982ea84130f1c13ba123a12e68d9c114e36ba9cb9fa687436a79a8e46a5ea52a953f74d6f4e94d7b88e950946f838a3fbda4cf6541187f696d3338174135ed0f64da06142cd2a4719eeb2af5d5b6db8dff92448be9504c95f5babb31c58b83bca573950b0ca5182550e23563982707799ec69f877bef55f45abaf7d6d7fdb3f92cb34535bf8d4fececdb2802078450c51435aa7a0550e1eb9ee4dc99ebcb57f5ee773850306389eb876eb2afe6f7c5f572cfe4eab86b9c41a8704707c71f1d64d5fe320c55b573894e070bd6dd76e1d9f86bf8676d49f312dd3adbfd62ecd34376876d432efaa474a4b459182ca53703f91f1b1d1c5dd7bdc797460e4e7957cce65c882112340468a182162648811214682180162e4c7888f1123404040458088000d01120214040808d00f900f90912240458a142152644811214582140152e4a7884f112344808814214284c81022428804210284c80f111f224686000d293284c8902143840c093204c8909f213e438c08011252440811214384081112440810213f427c8418090214a4481022418604111224481020417e82f8043102040848112044800c0122044810204080fc00f10162e407e8a7c80f919f213f427e82fc00f9f9f9f1f931e203e453c48788cf101f213e417c80f8fcf8f8f8b85b77dfe1ab1b4d6ee56df2c9e2eeae1a574dab65c3db50e3aaa1e10375a9ea71a4385797beeacf62adda06b7614485db302a81db30ca80db304a82c69d68f5822feee36c66ef0cee53062a1d162f00723781af5c307aee522ad67a5db98c6ff546f1a86d6ef69786b9bda968c357f67a89f5e28caa48c32aeed38afbac426542c051700780af5a806514400cbe58a940e53b2d5d2bcd075974910516593cf1afa7b798b6ff2f5acdb17fd54aab591ce1ff92622445cad0ebe8e86411cb0200592cf957cc1673f5fc4bacb947c75c3696c57f9224495860060bbef067c1122ca0000bba786ca4ffda4dd5f5af6b5f4b0abc60811077d7b9f49358e0e35f2b2063053ce862054eecfc4b57bb732571265b0ffe4be7625b83b615eb0a5a2b38610524e80ce66a73a6331588eefeaf331010d0876726f2549bf7bc5830d11384a927cc7a8abbab669258b5fc11a42223a224a1a22930c4acc0a2e0fb19db29641309db1529d751bcd44945d2e548e61249bc25ad4ac99541b56bc5113ba9bb6948caada1ae4b32ada350ed5a8d4721b16eb286218cbc6527b7924663bd97da8470b588bc6527b9d2ea922a40985eaf5b68c58a06583184fb2d6c728f801bc00a1fcf5567f0a6292ea4349e1e5d99ecb6379b49a1891aa9fb0c7277d584b94f17a612f799c408f789c47d1e719f2ff769c47d02b9cf22ee9388fb1ca29a42dc6710f709c47dfeb84f1ff7d9e33e410354f1c4e471f76fba8edc8daa4839ce0f15388c55b4b721c85ebc96365b709f2cb8cf1df7d9729f3fdce70aee5305f7e9c37df6709f2cf7a9e33edf7da6e03e51709f27b84f1eee7387fbd4e13e4d709f39dc6709ee1387fb24c17dde709f23b84f1bee33c77daedc678d89336d268dfb54b9cfd444c9dc4326dc7d9e6c2878b769ca34c518d719eca99bf2f44c21007790b6434aabedf7ad48bbead8eb1513ab58e9a64b6023457232627c74b1159202ab17176d8ca5e0a894a45c8fbc4fe5850dbaa801175128208a1adc1fc93ff819d38aa2482a71ee8fd4512472e288288464ac7319fe6eaa4551bc4771e34486820b87a20928beb8bb8f133ea020dda1b0e25f6b140a249b6e7b89384063033d80e273d7b7b08987c7064fc8e0892a3c892b892bc9ab8ea28d5d6cf4c402dc5d8b99e296423a7bd1d2a35a99801a6fd26ef26647f2466562d574f6e4ad9cfdae3517467a10eb91bed6e5575cddb8e86532d91fd969e18fe428b5327916be85af95166b7d9227ed8eed3a1ed921ed6e85230d6349fe771d3366f23d3defdabacc3299ecc1dcec5d3ba4dd8f6febb758cd931b331deded9699675f1aca467acbb848a62fadb7df440fea8bedc5a4dd4fe99ec9446d5f96db56f6d96a8c59a4ddd932b1beee92bc69d9488d64b9da91acb4877d154cbb44ba92b93d5abaeb925a99d41b4612ab90d01078fb8ba73ca8c54ab3a5a4d083b2bae5758ee2462af868a455d36cae4c8fb738625b71bfcb19b638fd15278b5d7cebde36d7fcd7be2da4e16bfaba32e58af43a833d354b0b9b5eaf8b6f371cc6f4eb750b9b42004508401082302ed7bf4230524b2504408e14820f4810a4265cc064372dd230b1d25bc64cb4d5f5d626af33983108b6707f6d9d419e5bd8946bec62ab63204802821ee2b54beffa57aebacc952c9134ac488d0f7c0135b5d1a3123eb0c4dde9fbe081315c8b437880094f80079a40b16e3a96e148c3df14c9032df7ca64992803ac36ef4fa279370d21695db328c262a558ef149dc11e9ba6b65bbe5e4ce86002e532d9ae42dee53680810e88717741a623fb6bbf7671c6fdbb74b59b4a29611df061d581121c7cbc3f081520546ea19598f87ab9bbe72b0e9080031cb8854db7b02956bbb646b7e6e9e1216fe26eaa3c34977437d518cd25f5b901d4124270ff17ad8ad58637d1838fab451f812f0d30d3a37b6c9a3a79bd429bebad3552e73cb4643444d28cd38017fe2f9266dce3ad811478a5512da4e991ae95c99d22052986d15226519290842a49d29ca46f5da24955e72ae6c45a9413e9947d2b122c03fb56260c88712b6f7d59c6d59654c55bf59811ec5cc9df97da4c999ebe164a1a472a44a4a74c11dab8a8ea299748bc2566b271d15288a1ec1a65e3225d2b13a48d8bf45288a1e03094a45d1a2d85d5262422c19070914883441a94bb340ac649554a6e93b7a13ace2cd1c6454bc619bd53c4ca44bc1569ca2d6cba008e0bacdcfd5fae7f6d5d45122a99dbb7b029265e1a4ba20689338680040e5eef7a5dc9dc7e570c8b2b24bc208103125a949008ddbf49b43cb5d2dee5fa77bdeb6375e38bc4f7af5bd8c4d3730b9b7a489e0ae4e08e7730a20b9dc150db5b4f4fbdd9bd6d2dd4f6f67ae9d7cbdd9b7c45812fba6756ea1e5b58776edb4cc99e1b0ec15969dbb6d6d3f3d2e4deb6dff433f947c49a6bad66f32e2b93d5b7d2aaf87445811a285083fbbfba1f778ff98a02379bd62c139db50857ef4901365c2c2e571225497ea749b4ad4dab505e52b2d1a65528ffff170b0ddf24da58ad8935b614d2bc6f28158a0665648a2448be85130a9228f95bc7d8a6d531268ef844046f069f16fe1991e2b1b5f849928459cf94e488c010ee5e457cff75ebbfae113fcf431babfe24491eac35b18601c2ddaff8ea08325786242221d8114ce8917c9368c923863c97f7ad3d24bdf5d49af7ac478f380cf7ad4ce2be9529b66f659a9531f21636691dd3a2c5545eaf58ac26a6cbb1bc95614cc9eb15ab379a69b92ee11c94db76b47bca925b68a596b58c81bc8556b4ae4875ac48429abcd1ade45d48483266328e5468a442af57cdeb556f311cc6741563b78aa2b5c52c4963a47ebd6863d5af9792d08eb3f28824615270d2ebe5e3357d9a4b18129a4baae5262ab169eae45a6a13ba953716430019bc1f014d14012f7c8e8eff1786000737183260be80e2a5590463e53398162e2a420abdedccda70268b2035b615e1a32d2e22820b076f992d115fc8dab5302292be8a385c1111e4005de4c716a76d2dd3f167789cfd686baeb64b34c58b98298e2c63e2ad3a86c5f20047626c87f4d603fcc536b6ab1e220c2f63758bcdd8b64bba94e92dd74d7131f2966d4a445a6d30dc64caeb35d218aec544254e445a6d319a291924563dc5b6458b132f9dc5c4aacb216e0cc0010765d886937d6ee6aa95f632d26e190dbf4b562b2d267b98d67414d29a8e61adb4d8486ba5c574a924d25a69b1aae9ac8ea4dd4a6a6542542b2d76b1d5e5185edb446f315cbde2c53303a8dc5d14a9106484182304178fed2ac4916b1a1322b6ab0ec24c2c0829f6b5b1ca44eb1844111b8f3a1613471c132f9e8936a66d10404541ac2e0efaf2c5972f5e5c7f1902c28c83bbea1cbd19bdced525d18a1a0831977e6e068417100684cd41b15e8b9580f8c18c8fb4d4525f5bf10727fc072ffe83951f5ab600633858803005b0e12aad4229c00b3e7cb1e938e23047966188bf8ed6867b1c1e8598f0c18bbb0f567cf07190f6f08578f1ec73e1b5385c2deae18b6f2a5af1d270e351bffeb1446d0fa17bae772c992ed15f18aede1e5a041803cc22938200606204106fa5b6696a23c08334537266f5d3a328529c0cc0cc00c2b8def6e2df03c8b752d7fc7a8595e9f512b78e913aa6737529d75aa3474603f0924518eaa5c98b90971ca058f7b6b7fa7526002e2e158018770170710705f04229801c97d631ccb32af2d045ce38496bb1ea3276e3e10b0f3eba6cbd2ce323999869a8adf85178f0df418bda0e63769861071fafb9dcb7328d55dfaa6dbbc45af7a59996b5dff8ba6c6189744b6dbb5cd1650877b0766d2e6f9e9a3f37ab4c23d6358b976efa34dc56bc949265972d5d5aee0e8a23be4fd29a0360c64b5a594b2daf6d0098f000d8dc416d9972d55f6fcd8d36d38cc95bddaf6d001ebc96d67408827b8d1ed52d16e9f54aaa354ad61a2575f8e2b932e1980e4a99a966b26eb15a491424453a977866abd97a633991d65ca3475bd3b16eb1484a94d42d16e95d758b452269758204489029785fa277019524ad36264cc69ae88d6eba44a4d589486b9193588e8e352b4942b22b52ad392928071e2e65b867c1f22efc5caa00a30859e1a2012e5d3c0b9617ed5fc1024611b222668abb38bc64df7ac3515eaf241cbe5c64a8ba76ad4d5327e348856ad7e23086833830e15e6f58e3e00586831577c7d58b83ca7df6fbc7b57fe46fc0c271957643933bec86d6915cc58cad0d666c10e38e2fcc8626077fa7667c6b7deed2fde38e2315b2e1c8c18c1fc8d759115fd9b07270e31ba5062ec01ac48c35d760c5c11cc5e52aded2ba1e17d590038f381a4ce056ffa6b6f11ae96a338ed934b52951b26978df62e627268ed8a66bb6edd81627bc6e11c2eeb1bcc5348dd990d49b4dca5809ac89467957156f8983f448997026497ac3998677ad99a663b92f1ce3fcb9d9ef9a93021473a4fbac8a39973bb88377930d9abe90b95dd6327d50bc38acbae985a61a3827341e7f97d8b564e87178acb3dfe50ce70577e40ec2702a702763cb446d75a6ed8de90b90498c3bb843574c5e9cc909b85333adf522c531e598955f3848afbdbda6e517974c566a6d93c8f273dd74dcbaa4b6bdc9d41bdee2889d8823b6ed267750c6644bad99b65f700765ba8946917dbdd15bb457e368977a34164c0fd35f9c6e2bda528b1d7fa56d411a884797b7a06ca68a3f52bb6fc5fb7178cc4d94b7ea9ab57d8d8a122461a5526ba6c570f5be5e4964b9843194ec24bf16339b5631a6c509f791c6c85a97625ac0389845a6c5368bedaab5bc3c56459a6b6459a58844996829c450442b455fac69cdb76ec199566ba68955d7e8c884e6dd34a46b74a49125f871a421919f52897ebd929034e1204d9b7010e9c364ab18d39454f938d218179409dbb6380c0693b670d3193e0269186712e31cb8e87ee1e01222b1285797a4dc315797be6e6a43ac35bdd9d73fb67dacdf5599ecf8bbeacfd5273a579fbc5e49348c2f90fbaefaae3c579762b72f6e4edc484d7149e2886f396c61a6558f66dcc13c3ae1e068ab5dab2daef53fb696c65812e3eee012175f12e24a44501283efb5bfc7528f15e9c1dcf8ae71acfa52dc579c521677a5d690af2c196d2d182bab21cedabe6db9bbdfb08d0b91dede26c6bd2ed16db3921b71f5beb6361e973e0d8ff4da1bae895193404de60eeee44692c4d58e99d6afb6cd431bab1e478bd3b6a672f790e605ed095a1388f41b8b7469c44795067377508a388a23a65527c0d49b38e20ae460558958b8bb6b2b7aa933d189bb8b2b7710872fcc57a109dcdd43a6f0857035c457332ca8ee993dc0c17adb76e75d2d2dda18aede19154ca341106b6e1c3126a906e88caec0d9486fbddd705833ee656464611cd4d6e6ee2ef37177d734c6037707452bf68ca3c58d193389fd107b61071cf1d674bc4660dd74c4ba66aaf7c74ee0d143010016eea005c07607b52dafdd1787bba9dea67a014082833bac345afdba44f76b3bfb24777ff92a4b081c94d58c43d9b53599ec66b334558db31cb97b961c2e5e3ad28df7575b121633221626b070d9148b15108b0a94dd6ac3c972ad5d3cbec657b8b812e6ca2d6321253b3e3e448a0ca119e99de9d1bb603563a1d6adb72b3b1ccc35b7b10d370317eefe9786335cc0414d713370c1d53b83135b105fcda0a2a20c4e78ed5a199aaebdddec6b4b7196e1054dc32f830a57ad6001663a96a1a55648e7e959d2747fcdf8f6197fbdf8f18659015a1acba0a7e12a66782ebeab2a4c3815291eab7001c53a8e35bc34845579f76d331d4bad6d21adaf6bd792241d7365c28f711b8754c8b82852189531302a3edcfa78a6c457548e4cf9a2decfd15b93afb65d9bc2843b78cb5aedda904e91b9fb1495942426c02432c9c71d142d2577aefddc78f1b792544863f6adb71c25471a5aa4a6fca4b5e95c2fce68850424858cfbae3bb4796b2961745315afc545524877077363ed5a292e7c51439c495ddaf6ceaeb9d66f7cb5ad23458ac189189aec489294c690c3c1aa7fd8b6c5d17df1d117b97d34668bddf81e35ed23215f1db978eb571afd8c8dc6b8d71cb6b9925f47aae9ef9a7b232f172f656c848d7250bd9beafd7ac361ab888cbbfb8515e5a2a39d3acea8bee5d78c6935b75eb498e9b5fddab54b9ade8a543a0a17ee3e5aca44fff1fd9ae90bbe8a0206ac5d7bfff7b598fc8d992c135f4571e20e5e1cbe4bb7c4f8e86bc642af4b5c2fdd976e7d89fec55a6d49511edcda36d55bddf6bfda92a08ce1ee61537d6dff57509cd09a9256d32428a2bb8365ce387cfd838e2494264fc47030b4353cd2d7f447fad596b4330ef72df18dd6b114ab2d4412291e9732c6dd6ac331c96d3bd26b69a3dd014d494838d71996c26a13e241063f311e8e686c1c690c0522ec0086a4370628799286315cbd434e25078777ef6cbadb51541056503e96667fbca816b86fc57dbd61a407f5acd4b6f0d21c849a800d0f854f8cdab53a5d8d7b47a34a1de144bc7509837ba772ef521dcabd3b8d91840e4fe06a510374f072ed782d950fe4e8b0c43d278732c05a62817911a3a5791f19a9c53fbb95397cfa3a86f7b5b1a9c30774b5ed4cbf32e159c64455c445414baacd492f5efa7acd6e65169a478c96ca76798b6d4d475965fa51715c78e80c669c83c304fcf57ab9779f7be7b9fbd7753f3fe00f4f58991e7082123a19a80d4bb4a61b84dcf175efe63ce33ecf30c37d96e13ec970f7318ad0448e0d5e74066b78abd6353681726cb87529a4b358b5794f22b88fe116a8e146e50949a3d4dc9d7a0e0d4fb897b799586dde3678f4701b3c6edcc60e31bc041b3b27b88dd60fdc46ab09b7d13a80db68d1e0365a57dc462bc86db46cdcc60f1db88d1f2d68e1c7bb8e8f116d3705ac1a8fe137ed5ad65ebc387c12e3b10a4d0da899d0d480fa5692bce1905eda8fd45219b2e019fda491870e7720f874f9149a644c94fb0cdc51702b80fb1402de431eb6204793135fd2011d7531dc13fe2e1a2eda5bba1bdcad5418f8e35a068220869fc027107ee04e450e93ca0766dca1c0928a8c66209262e4645f2c8b32a52836d4048684341425b6440aaccad1949815581459f552e670f78d85bbbe653ea2957c13bded23dcebc5b5dde42fb1e6b650289b68bb76847ee3dbfa1c5dc6eb654b22473f51b3b397fe5c860feecea3abfbbf6288f278bfce60e6228bac6bfaf6ae4cbe9057f9bba2e5055aaa68526404e58d8c92fed5e3b368918016217c70ff1e9fe58a96981619dc8590e765483a8a32f4af1e5f6baf1769013124180741f0758f28e476f71c12897c42baf07ed7bf6e38d328f9b93b06230793f17f611bee5d7803eefebbc4399807acc5fd5f9bda70effad8dd2415692c17e65c32e702f98d4b732be3ef2a67af979e12a4a9c6eaa6d5e67d73e2ffaadbfaac99664c73d1d0d0d0d45c1a94dbd98a74db8c7bd80839230f5093d8d2bc84011800010720b034bace204dcdc52f5efa17d6bd64b11814549099c10c4307358ba3b585330c7797c1732c14d7b526d6dc8da70764dd7a89c4295b1393466ccab14d71ad04496e56c3a740be6eb1e57efa7addc2a6da18f77f61da25d2e9e139689e53cb519762230d71290147c27f709f3c10228766e507fce11929ce96e9563076e02ed65dde485a6daf6f4a8e78460d6bd0ef9d5ae6ea524be480ffa6df54af1962cbdd43324e74c3fb52db512c86322165c50d9c3805a106a1cab591191915dc01ee80996ce68ef87c418867f11cfac50fe8c3b331ce38b8c137cb4c1b7061032ebae0628b1a70b1050d66e0f39b362d58806f712d5ae4c472c470008645ff8a65f1a4253a836115f1b579fb04b7e49a704ce5d6590b89ef6d49c9da6a33c860a50a952949485262382a8a02e5090c4e9a30195a2214043bd3020b3bad1f2ba8e0a3074be75340e1041e3b749890a3041c6748b831828d9c33ab1a34706e6c6a6854a9335572b210016f3297c32c55b8bbec93f02c5f64596a56dc5d97599a00c9645976e464b97177fdab962365ca81014992a945093c50850a7c629183e5bb1206165702b06f450aad5c2112a5883468061db87b138d02669191b7d08aeccacce650579146c33c553c92a34bd8c7c7e7a7f5d826f4e02e718ede464b69b9712c6f56cfa20859b1ed8c437ba33727626d296ecfbef2d023f5e22141860c2182c3b9f6fa56567950267bd99291ecd28b711bbb68f8a65d952757269ce9cd16de3aa378cc5192d6baf5b536490a771f47faf58f247571f79a364ab2d203d7257924b7c9db8f4b4324324847b883b9a4fd912348b81c24d991712c69483efe52c6d052a4f03b25470a18f196333c06e548b1e2e091bfd19ab796f2eeee8539503c8f210ca65d9b1383cd9de7ed16fcaf2645444552605572620072f75aa3242d061eee630cd3dd6b8d923a4762a20859f9cfcdea5268938e6a70bf854d2bb46a37760b9bdc45a21879cb4e4aa39c2394bb0e2212eda9653ec92902c2dd48742769b5fdabc88b2215c090c3ffb5847150dd62916af4082929ac4cb9baa4ab759f3288411414b87bfd1ff70983494627270a1272acb6d80b40b16a797029631c141a783950a4e440097aa284fb6c4116fe01e11f02dc1d009e034306f4486b99c7b124400e0c2d5dcb7402c0ddade7106121c2c21de7ba651cf3d3ac4d8742402260109eb08a38e4f9d19112c3cfec26ca9dd8729c2071cf71f2b957b1add864887fd1729a58c969c2e35f596730870914f7e90177ef628e61a203ee73031c5862031af0b984fbd480e72cf1e2b56b8fd42e51ce12558e1010724e48c2dd1f073942399cf4c3bd3b93238472d7f2474422da255a4292225e1c245e1c2484ab454b70b54814ab28c270b508b462bdddece764af6fc6626db24c1ecc52b3b4250fe63485f2a058c39a7333cbd4547779fb3a93692d7b50efb872bb952bf92e1b6a22f1621c868271d20d672652b485829388362ed2759cd99a1d87709509c6494a8a604a845c1c94a34447248a02ea8bb77dd738b3fa56fd5497fadeaab12dfc5c62191ed455b44ce5a69992247d91051670f46bd012c6b6cfcde8acd47f3159beac9679cb1eef2a0fe61ca940ce911cbcc76ffa8fabf756b5a649b76ec199c914b156f1da50572944a214a420b1ee6ba388d5a6e98824d64d6dde94ac52a688485b63285b974bc48ac3e21d7a8dc979ed4094f3d2e2ee7aa4e5b56078bfdcb8e8419d7af1b62566a2b4a74f1babc64bfe55af1dff86f7c6410f62fbb9dcb596a3375de21c125ef24f9f2cff5612bf96b4cdb9c439fd58cc95a9e2b09307c51aabb90cabbe5656695f6dd58573dd629f85cc028de8758ca40ccdf0453027492f6528093624a5c90f057d12d294280fde4a62eaa140e76ba8e1c5fa49947c0d35fc4e0be7ba25a62d586ba63da8f1173db85433cd3543ca5dd883b694c99ebeaeba94e532b55a267bedd2341aae22cdf516f432990c36fcd34d97bc4b3c7abd0bc9cdda90481a25c9ff3f0dfff8ca64b2a1eff12379a34d95c9ee9056916ebd4bfc340cea6d6ff9402ee0ee4f3c07c88f1fff126dcca569357fc6b7d2baa476ed8c8ab7924d4352a0e4fc30a17375e9c70777077375a98597894495cc25e5ea935c5da25476b1ecb5b5e170fa3759972ad3d77146b5159f86895effc8b88a584b6babb3af5d8b5f571bda1bbe38ac63aee2d5b848e7ea135c94ab4fc42522110c17d130ce47392002dc6b57ac4b99deaa9471b44f8aaa889403aa90c363460ecf11d01024a4ba44afad361cbe4bf4c11c0b6888d6ac071a8254fb1fb325605dc24c21dd54a4619ba64eb6ceb6ace2885b4fd6ba747bad5f7a857fd046ca6ab6edd77ba7f5558f94c9833220414a99ec3715cb9cf4b27aa337aca496693cdaf6e3fb38dc22cdca769aaa78895c4a929064cca425ab365d73dd9546c3da5e6a0b75adddca54473b863caf43bbb50d2d09435269b8323d4d6afdd3282f53928444761369cdba54a2619e261cf420cfb54fa9e023dab55fb5c5d19a77f91a4a322a7a70dfca34f499922e2732a4dfd13f6e2dfda08ee2cad5b66b0defdf2539d29d6bf51222b1e25c67b8b84868c9c5214e22c2495aac35ac2452bdd1a2b092487eb2418e095b6c54bf888b2890d3c3003c74e9a125a78798d3234b4e8fa41e2ee4f448b243e624fe1d155adff33b2afcbb54f81789dfa5c2b7dea53f4b1571d8c3841cd6997fedb4e8e7b092004591be58c711e6ee29780eab4b0ecb8abb8335bc942757162b8795c3ddff7358a71c9d2f5ec9ff6b888c1c9d24ba99010c78393a5c7077239ea363c45d0b4dd483d9f4d2f146095f7cccdd41ed9e93c2122980f17fe90cf6e4a040840777d5b9bae492e55aa39746f159031d9dab4bf64625041c18a3af68c2c705393954c83981749d6bff07d3aecde1f1450e0f9dc3237c29112b49dabcf5eba6290e49ad656a13da5832968b85866586050b1616962baed2711588b2c9d1718506f2f9017dc01f9e8bb552ac8ab9ea9ac4338eb4e698e0e3eecec4057eb492b84f0b4c2594e4945081dce843d2ad6f76ef712ca702dc6702dc270254138c3f510411f30042789183e3c6b66da63d9ac4df09765a4bf86bd889bd4bb756a8e15dad5c5d8ae566b1582ed36b67a0d6bae6dab5a824493e97e187c4899543820ff719726e64e1eef89e7c726ef4e01bdf7d2b92ae4b60484c40baa918db557fad480fca644fc337bc75193eecb55df2d5b66dce95090b59c125d170784b7c2fee28ca94d9d74ab36315bf6a3adb21a5d5eedd5583a00e5f5f5b99a87ef15291e211a455531ccd7f1b6bb669925e3dd316ac81f55dae244a3e0def913eb8ad6d5b5b6873bd551b59bbd6dec252c45908578b6457ea0d23c95edb515f9875a1ca83d5e62dde708958b7b63ad723d9158defd3ecd33a86fbd6524bd51787a1bde5ed86c32a8238c4d5bbb30c2d31127abd74ae2ec562e35871a4be92e5ca8fa3753d0fae95af2b93ad5d8cf56bd88321d534d4fb5a1a5652d78cab178ff4ffab266b5d7a308b6c096327bad4b7ea8b8564577866186f2d668cbb440f5e0ae5c53b4584891b17096d8d9dc0362ea29b2ea152b3411827e582c47aa4a718e99cd30e5e97429a93909cc4c41a5e58ce9785bbebb85037dd48b56bf7a54c75ac525e160b63bbd6a612ee73889558f7adb75ad57fcb1c3ad7fed759103de47c9f3b92945aa34747606e94e9fa7ae94d7363ddf466b7add5f156cb8c693bb94b9f665b8fd444a380b97a2b537d9778c36bf4e0a56119eee85aa35b83596434a35ba134d128b22b9f9b699a1bb7ad66c791de5c1a93557c8c6b0ffb9bad354a6eb1bad25bc5edf05c7c5be23d9a7289c4235c546bf4081749d9b8e80c187750e80c69ef52ed5a29677cdc5d26d2ea044976461939918e365d339333a670f7d71950dc41bccda8c28c0e00a105be587322ad52f4928b6d4d48b4f4e85637d12d6b3548ac434255a451c411e323b11289f548ac39575a1d674764f0808c1090318e231502b56ea251a23c58f4221128e2a3faa058bfe6fff1f358bb566bfab85d6b34fc58fc9a71f815b773cbd683dbbaea48f5acd4e358436d6f4fc3af7321add57147d3305dd274b75e674b360d8d14572f2e1a47bb9174d5b46abc0427d5aeb56d5c74a76c5c546f36a97671aeb24b2371c448778a58439bc95c998c70d1a523b9947115d1622a4d43b931d3a1ba29148c933666b2471b175d6c6bde05e103b5d4626ff97ae5489cf7ad319af7b5af214cbbb7d74befa6fa7a8931c6eb0cec428c1b3aa27b310d2084bbc39a6894d72be9afae63d52310be80b576f1ad11d15c5220cc000420f7f09679bf6b86f90111641b8f48b25cb7606d99acf896de6ad66190c0e3800f9650baf64633258b0409f263754efb008c0f7af860849d7194241e9a4b4a7349c3a061c498c4d55bebd2482ed1ccd3be9549b4984aaee3488578706b5f38e1818c07463c68c283170f5a707794af78a082bbdf422b541cb11330b870d92e49d9143076f07a310e5d4cc05802c60e71bb3e7c699a4b7a0b9b30ed12c1682e61bb6988e612760bad08d5e03e69d8e23e73eeb309c7e43ecbed3e7576f7bee8e2c305ee3ebf28a70bc268f2020fe0a020c3ddbb994d827d600303e8c0dd3d19482948b4e0c61920b8fb27e60114381a0104521471f7e98210578cbe0c60014db8fbec610729ece4131224dcbd8332e442991e7ef4300477f74800028b1e1401a68915b83b2a0107186366f13ae30577efbc084210359451840d8ab8fba700590a01362a94b670f799c50c0814580aa065063c38c421ce319a4b0a46016532bc37c5fbb3c83492ecca573de54197956d4a7705913e972b93ac662c045610b4246c1ca910147097e4b5b25a99e0245949eeb2561aa65d0bd24a73bd256147b65dbb75ac9516c33b16ab9516c3b45bc7dd545a1256c30b565b1228a3e1af4d5e08ef97128be1f668cb59b5c9a8d083b96edac556acb51a4d026bce8ee42d635aaea458b596c9b4aeb7d437f16fa675c498fc25cc74ad6d572adfb473dd21c51bdf776971ac96fe3dfa5c8ab7e2d1a51fff0e6bce986897e358d2aa98bbf42fd64aa0ae99ac59267bba8974cd55bf78ad058b8c9060786ab34c26f49684d15cc2409a4bfab66d71196b5dc37a9fe808f6606ce3518362d5a5b67ad3d2951b692e619f310daca225e9cb82643aa6c16bf7e7326502edb54c1edcdadad7f52f2549982561558c404bd2cf7529635c8c46c3e0a6d1f0eb5c7d025a92227dae2e7d0b8fa3d98e7549dd14245ffc21283021a45b370d2f0ea53c58bb366ffd3220da2e652fda91ce1c6caa4f2dd38b55e702abc4a884508a06aa9e059942ce08880000100000631100303824180e484442c180380c95f514800376bc6886509e8ab324c82185943184180402000000800001000068db01d200ad186d63e854cb8a0619ef88cac2f1aca8e5fcd9628ec015c4672204c9769e9153bfb7dae666ccee06c0a004d0e0b4c42f10e02860ee07d52d44429cb622fcc6954874a3bc095a1034ed0f2c203b43202b56bd2b148d2ace3f9d30a506fac261a2b17b5a964b72c37c7ccbbcb67689c1ddb5afbe80389646517dbdd7f85374610176fce4e3bd840272f19b181c9b8f3b6190fe0617836036bb2e8ec02bcb7048afe403b76727c8ee190340a86fadcd807ffeace31fd08c1ef3daaefb50e66d47cb0ff6d1bfcc13c9ac5c9cf00ea19f40114b9a9eb8b752229c3fe1104a8a280bd5fd25d9dce3a30155d01abae39041fd660a797c2ef2448ed21e5fe1be82e27e4677493ee41a2fddca13a19dc65d85b2e35c36930cba0e967f07be858afda57feda7b4efbd3c1fb0726b5cb0d48c63d91ac3a01fb3b61da2e4cd72991b928373b3930f294d41f02849ecabb7e04beb34b9aa64dc89f6f94ff3b6a677a1eb79a0b4516bb15717e3454d07e5d99429b9541321da8ab8ae9f34ec3607d3ef776cff369eaed24ad059f22b883cec9c15b8ec59ba8ffb54666ca83bd0ba24b63f4ee0c7f5cc1b9d078407997599035dee4f2790c5b56a2883beae5d99fa62f511d5ab5de60264f017822fee1ba84c68a0288a793cd0151c345350d07bb049d435ff2330f8747a16a347485fad07ceee48656016bdf641df3e3d9e7dd678a1ac406281442071921e92c707259e013cf6d1bf40dbdc829b4fa0d0eaa60e97f331788339d88fc180759b9bd9a3befa907bfc6e548dfba16a9af5df39c863c4f3ea9d36648aaaf003485bfa70f8ea75eeea3fb3fe38d3b734d8e45cc1e2869299ea459842bccacf758695e886c4d05d9051bfaa06a6578afefaad979da72afebca40c765b0d23ff342cfc7988fa0e2c4d88a2d0eba3253f1dcd3fa4bd910dc8c7f44c838e4241d2e11c9c2af2ea8ca7478c5221f74d1fa8b8e33502dc2f080b89190c718e12206da557cb463b1070de531a094dcd7b2569488dd1978c63df63adf5208aebc71bf5d306b5329be4a5a0a523152295b4674a2fa2910ff25ac05ee70fc99664e277170e9c8431d85920b180e9cb2bfd1bd2221397dae90052e316f5fb9282e23759d74cc5f036fbe3fab98d4e1b5c775225f7e72507f6bba9ffd58e9d6aa81a640249148e79fd2f138e4000f4ed11f3fc1cc0ed19caff55fd53fe5183bc440b52fefc9a3245f3ebe842ca98347f3fb0689e03daee50175b2fdd3c5443658014bb51e38a449dc3f4cbe39a0f4baee06bd20a06e98574c68de0cfb4b6eaf2dbdc14458aa565e07a027b47c552ee81c69781bfabc58021c2acb136b72e5850ffd9a6f8ed81a7edb9fc4964006103c68b94759452b4c742d008dc111e0c1c4c63074e6559bfc54a712e1b5306c66a0f34ea97e3e9891284c4884c0a732536ed0a964c168851855974bd67298614e4c17d43d4c97c89294d1ad7f705ddd42a3ed89878b2d9b49ee7e8714f2e0901e5fb2fb21ff980c6ef173801deea332f975ac36f76bf66a6117ed2e5050c762e2ad60b80566d2600a12caf71126e62b5a31a25af73931952704b2b173bf6fdff59f07d61e415e3b0cc659b399eafd1e0105c2637162b29c13ae477fd84f5574a34ac2df54d85d820a7a2eec075f3ba8ec3f706441eaab6bf019f06dc1b2823c0138d44e784b02865209d1fb34ce09cfdba6e266187ff63d8bc0b6ab21bd2ad20fe5dc0ffd2019b81b8588ed77e6c7b6b1d325de6a035ef0805753909b7452287ba6640c0acfd19a2b5337f06f19870e4960b9e7843d64d1ff944c953f635ac5e21c71ae3dfb8124b763298d500303abd12a1eadc4b019b37e96cc37eef5f82b8788fdc00765a2210f661b5aba2d9041698178c7699744fe7ed5e6f6652365d3b44bf229495a4075cc0cbdbfbc00c73b567c37728adc71e4d12397bdeb72eb72cb07b084385179668f1e5790c23bc21e93a4101763b4e25ae87f9fe85a5e907349580c99e7921761d2726dcc72cac11c976fc4c3a6f6dc8e9dd0771f76d929b46fed2d220c093bedf04d00a6b699907cce98c260a11dec3d3e172887c80823bc805fefbf85c3c6f510fb2a6953593ec3df69c66bd3900d7c9734314a6642cb4c36ac13a90e5dfbfb5c8bc59aff56187c0619596c11d21c28643a4e23c12a4043dc0065fe6e7b993eda4bb855ffcac6b87fef183f3b8b4a4e9af5d18698c02f1522db822d5ceaf9c2876c3744f0a90fe9e481ef4b871e4ad3d42215ab5c18c28fdd250d5ca75420a2ab6012cc50526007dae0a8b93ff9ccac248ec916a29ef0d8e9ade0225328552c1fa384fd069b5c61f12625a46484af7c353e213d391b2dd9157650b362bbc875da8809d2e95c3b23d531d437fe50c7c5ba3ae66015c35765bf65bb25cd26da54c6bba6de413ec49c65ec45cacaf1a27cbb26697d540919350cc7b66deb1570c1f90cbf8a67c20cca171fc577177c8c0eee5adcb80956072a9fccf77eee4b51a50a5880f9490fdc5c26d8aa5af2e8eb4aa5d49e9a730a1f82ce731ce223dd53791ac8fc7e2758abd14513c8d05c799ada12ff2d022b497b124bc154746cdb4cd12768fe20ec6233bd94df63385e37a2671220721dc1f45676ee16219ca4a9ae9fb42a3ba1ec330ff84f89fe0cbeb29b42968e2c1d6c180537c2e71ac7694247d1ea4bc163482b2ec20399f251c67dfd80223158174b9e88f53a8106a3606574bc9b4336237d3b279456ab9404d2690f8b19971b1f1f7165cbc717487af3de0cee3eecced9fe9c9dc4d35f2807629bef111c24030d61d4338119a4995e2511603abcdb082a2ac59cc05a3993ed1692b96bfd67e04bacb82252173ef96ec4ee4a2211d4e05baff800993990afd2d7dbede841f47567ff57638a969eb09091bf81b76bc865dc9c91f3fc15bf1a80ef4ab1f19043ae1a1e61e757b2eeae29bf592140979f13ef16dcb4bc6a46295896c1ab15a97614a879c0f5d464e70859472c83e0e01ed741ef5a74d519ef605048e9e5d1e8fc1cc45ced26215894e88c1598a38352cb2c0846f7282453645e7c4903bfd617b02c139590dc8f7d6461e1ac5e0a9c5c2168ea5e1c0a8c9712043f8605ff6c2020aaaebb14aaf836350b5b5b7afd26a8bfd9633a1c19648204c039b01e71a92ad3a4ea5e08848eee2da85ced6fcd3a57f7c7e489bfc8414a6307efc2b3e3fc68bedd8d5a6e49c9ccb673cfd019072a3877f3c2276b94bdd72a1eab64bc46678f87860135acffd44bc1ce132caa5a31fbf4644e7e6c50f476ef331a7b8dda90d697cf0f6726a03363d8be96976f4b1cb7bf0cc9ee6e03d328118fd16c0ea5cb8ea775c6af9f6fc7c71e658e30aa4e0593f563dcbebaeb134a2ae0ee808961d7167ed94cbcfc6d06336df62cd4155c5f7f0eab28df97cf8df5525f7b7a1b6ddae959b77bbe866d3da04b6d1939400ced0c9e3929a855aa5b1b33762ef5c14191be6abb69a866c54095200329a552e8421cc62b83de2346c88b5c9518721ef82cfabe55bc5adda391ef9fb5a113f4a02b36d76138963a5f8a5063d5104834ce4ae173a41c196135111890f617bf81848249b63caffb6ad30837a8d8c8065c4db8ff7a36b3a9fda3d92c26e52708c351b802fa53ec46027fbcb79ba66d18a80e4fd81f0aa76c16fcecbd04741a677402da0337eaf7876be781b23c387ab11a8d40f97888891022fbfed11a67616d98461046ed44db342d6dd519717bee8d6b6ca4fa7b21a0f06a006d0d6e7962f085703dc3b5c60f612ee2e291b16c45887ae846698e543f1a0c05e466d81731c249782185eb1e412d64d8b4783fee42a052b76faa6ed8216770cd92dfeae78b3198d1a85560107ee502529b6dce85a4bbd3d2edeaaaca2658eda5a3b05749634320aa3cb127a2d93166d0ee315bfb584b49d3534f01cfd9ab6b75aa9cf48faca20f9d4ee209eeb12e09b5d0b1838702946e7806afef9172f00c592d3c675c3bf1f02dffb5d86409acf942f3fdfe5f1a5878b1e7583d6f75191df9a442b5551cedd300024f21cbe6e90acc9fe4633da5731fd1602fd75b74598743347f4c091b2acbaebb775f7d52a23b5cd2a1e8c3d72fea186cfed63a27430d0d3fc40425d73caab084894b0de4d6f8cbf31653493ed1793c9ee6d277678d2de83936a96f2d00b4015517f21d055fcbd0d9f1cc05776c914ed87e402fda946922b671e105c92e84d7163948b5bbd87f2adfc68291ae49fca9b63c5bd8ea5ab0ca452065edc2043fa81738225dcefdd80e64cdd9d19ce2a0824ff2bf5c2e46e49b0bac1ace8d8367e8152b1f9e2b03c41f2b3f32bebc03a2d5595f067492c7124618919f139c99b640a3a2370890f4998ddc12abfc8f95fe38effe0d0ae1f464d2b0eca99e616f1ab80ffb3edd1d0cc10fe994933ae414577460e13ce27f4ee60f0828c7d0e88fb7923ad2e49fb2487fe47e72fcc46a367c04c8c4b3306a3674be0827c405a2ba142af3739a6ad869e793cbec29377a342521f7a08ca57aabfa5c7f99ef3e0cddb4893cf40090296c3c52d12d9655753b5d55eb79a55fe686caa513c5f20e73c7230041efbb9ae83b01b9d80195970f2ac8e819cf4e0b11ca205b0cfd5c183bf03f6add664f1b8f9472149af265c7c0c786f2da63d5b97a4b2253fd5315576bc4f5c544ffc9c27d07bc6cfaea77374cdbc74a0553bba40d4a807769bb4c08fb2f29912fe41d89b9291c1032301c183492a782fe261912e30a20f61dbfa83cede6bb4487071da8a2849bc49ae9c8dd4fa873c721b2092ef9a0349c49e2ee992d2bc7d8376549857ba88f394abe24ff5f22b3dd2056b034072673d98eae908a448ff49df08282df624b0c4780393990dd04acd8199b4018d66004c63424edf01f63a887d57ff9a1f86347f2acfefcfef6720e67d1f4e0bb33f19a92e2509f033edfc5b9094bdc288c1168e3acd056231a39c81cc118b080ca0d2387b799b7e370079c247ebc24efbf13507d221dce6c4e685683f80c9f162867dcd8c2a43f40f06c1833fa7e9ab9d547853b9c2e878db994990a7a3f76376b2ec882f0e65434f3c2c739071d0a80dee6b22707553d9f9e3ef2c4ccbdec484ff5d2d6920cbc29b992262a704bb65e887ac9e9122793143b71a9e9701a5de8c18b0e178224c4fdf0d46a616f2803d79a606f6bce33ac48f8604d0ec97b9c3968a95347a9f400d6d18e1e7b81239f46cb036156ffd7d3bfaff7c87dded0990f05c658c9f54b66e94ec71bd7d67a9fcfa33fdc7b8fc1f05b083879620582543b2f56245065e1c6d049ee5f49e06e0f01653a4f49f360dbbf80c5005fb3a285f55e4b78f1a3b23fc0443fc32b5d3da764cc22c31701d8512626243696d3278eec1bfa44a15554f2ca3ce4673d23c050101173b122584a5f69cb21d424e317e630541f48f57a097ee312393a36898246ae144f624808f8e60498df32c088b8fb48a805f89dea37a8aaaeed2a4e62ce7590c340ed872b5e29d9cdc1b57c7f63892d3026519d4590424e0a487c2518de17d476036b68d758232d7a8d5b9395be3ab572b8f594986e34037088ed410031706645a8f0269226fd5a6e0608432b1207426f855ed0bfed1138fef1993a9defc850e37226943f8708c4dad4560e3b0feed3919f892322f668bea0faf03780e114ed96aae52eb12844f63d119914f17782d2e5960ffec2999bd267274a4c690dbaa0d6527fff1b8028fc94f0719457219027b3c76f609ed8dcadbc4e0a2605b45328a6ea06802104b20707cc54beb0b76309a2ae3e375a9327f7001cc25b604b587b91c323382661f77280317698df7facf762415de9653c209c72f72bbf9a8dfc3b3e6ccac7aac56f681fcbf95150123f4ba0d680e864ee8e02b3ee79077e62caf89ee06f8aee2ae1732ab51b928bc31d90cfb56fa5273f64bacf582cac99723d4158b6fad660d9d84419e26f45b12073bfeb6e28917ff8e00d64befa7e9727d8691d0151171c0280d1211ac98de46995a5055b1c15c8fcef36f53a860709c4eb9c43a08e02a09783f9653c1019d7eae0ce492a0db50513be89af7768f810fd4a23f24d9465758ff0cc2f4922448c8122926695abbfdd73acfa0f8036dbc0549369b80dc2f0117744da9c829e88e4a50d2a458e3db8c283e34b26094127b1dc0378ecdc1fa9130d6fc288ac1a0d5b496a654e5c960e670934eb07990e14372fda52f88173a22fa98a7a2e65122887f78145705f8f65fd3f8c52f67d2dbe036fbb6b152a938fda386ca47f6946222285a0df30656508f9d7ac4886f34f5bb675c745a2c9167c35ae971aff79da29f387a7bc6677c8814c4690a8c3bec478448219ed2a286704fe83012941a5e0a7af1e6e1ad1d4f6fd0b5067efc35bc6b734664f30a8e8cfbf23e0c8fffc59c3990e49e01aafc7e59b35945a72db0f66b4def3396cdfd8e9588a27bec6194b75f62173a341c3d41ded78ca2c40d14cf7270b5c4e234f94469691e49336ffa41507493e291d64f6a43659292d5e8408eba773dee8e6c321cdc3fbdbdb45fc7842723b2ee9f59b4d8fb25d30d685cb8ad603d4cd2265eb42e7aac082746bd433ac0f627af622afb3e0ac032f432b9c83003c87cae19a0306aca97b353f5e141005113ae75279109c3872ee504394c9226840c99b5120af8f3629b7ac0bee56fc720d5447cadf6ff3c1c71f02366a5f378e3d698d56729e3f9caf57fadf64b3bcec50c95602991c1f2d077f802090f3df76e06a7451685e6ba1896785a39f5b27a965a25cb64840a80aed2c505169edf5e8287abe83588a51f971e393c81f9df26c206b2c4448e0311bf0c751d86bf7ebec40416d3d019a4157fd36b4ec4016195653c5aecb0d154ccf532464b82e262282c53bf15785e20834f3f24a6166b4e0aef28075e49b7ba999abfc94438f48fde7daa97d0d893e7abd126e85ccb56ca7ff9f0d62731c67b3d79660f79a021f1e3edb38f84d215bcdcebcfd191bd639f0d446863aea51661af9e81fec22e271eda08d0695b49dc63ef787c95f5f8629887fbc2afd4a636aeabc78ef9f768cb3c45f27b98c11a1441f8c1f750878228ac3753225327505ecf4e6ef31c660f6bcbde30e8e671659235e19a52d778f7056b0a1064d70a1c1d9b815da5a4a276aeee37ab931b47864f25bda145e5e265f9151112fc05ce5584dca68d5a74657d5667f077401140144dcdc954c88e828aa0505b4a86e0b349254ad86810c3bd7cd74a04425ca4cfc63384bf4bc049423a5b650a3fd595aa9c208723fd8422a812b9b7052e1ba47dad6190df384b9a3d9046b7ba1c90df6b4568a44cf35782b61c37cc851226ba8d0efa47dfb4b73d1c088aef46550883b1873a462d79dd3380dba1891d783274048627abb64761b1a5f37678b196c8b2071f426fa2c3d1069afa214692fe0f497b2457c7eb47a28abd5a79a198450ef09832c0a740363134c85e6a6f713a8b360eedf05a59a7d4de9cf41e49b16c003a98925c382d309bb109f85445d11e056b0cc4361d9608da979b98511578a7750c4fe6cb293839c11d5d8c685f4987e823f0888e67de819000d62e63ab5e178695d1706ae3f2a3f1a75ca3863edf236f9cf026673510462a81dd0e8f61e1ff32dc32e8767e12e47ecd10b74d4f10c0cb3ddce0c0ff963e1e27db53dbc927e1c10203afd8093cf2823ef05021c3866f4dcd76457dfb57c846b59ee558c7f5807097b292731f670d2278e294999a1b10818dc10a05d481e4371ecda1ca00d9c706674da5e5b34530f00ec3c246e465c05374bcb83bd6cbe5047b36c0d5618e39f2f639d6e86b57ab11da058cfcb5ebba8fe2c2cfa451415e3d20c54cbc510d7ce1bc0029664fa096a9ea19f8440603673366753d03c2e1b5cf9a040def19c9cf1b98daf4bacfef98a2278aad14c2030c9349917741595eacb7d721bf30358ea0ffc0436ce6140d3d2c5837e3aff35ec88734af8dd2e2f2073a218624c7d4f1eee0677c97099fa94d8eb935c1419c28ba8147c2aa4594b8b966ff7fb1b843ca5aa93504aa91713ef44ad261377c65a19ee74e22fadee11a5a6c41e55380f35f229b8cc3246891b884683ddd88878c00702bdb7c0f0a53d0d60bdc3269d8acc2138dcb6c4631a70b42b48a9a1ec1e042441869733d01d2f1191fc7a38b94e44c90345b35d0df365a00005b7c947984815502eb754746e8c4f6b2ddd9cab47b5f0c9a48c24adcf7aa2a8ea76596f7997e1f87992170a0800f91010f5d2ee5c9f10c51f1b58a81a4a8114de6e5688f510cdc5cdfbb9d4269858ed754bec559013e4582ebd0c1ef94421854d634d1dcaf527fc880eaae99ad0ff794a5cb0a161a6abb9e01003f1f2a26880f0c9dcb485596dbe4040e4337e65c0643c961887bcc7936e1c6551b055d66066e5c63b872466be8950566d35fa70cb283be1c8ae38357943ac77e9689735962bab7a89d786f51a69d33107d0f60c3ea77aef777d2f7452fd9acbd7221ca5858aaef301fa1ca10749f155c6ce534aca7000460db145cace30fcb27108080d600a7ae13aef67bc020880bf32e7a43c40491404c09380b4395ac32fff800850ce604874803b63bf7907fed997d3de893eb0ba423b43c23ba59cbd237cfd8bfd6b135f21cb8e26eaf019c7ade6603f23998dbf3a82af42b1394d45727eb7834bb6c7fbac86c75ad3fe0e1fafeb6927830d33ae61fc192da8aa801e54bb7e778d26f931373e81ae55119a9b7756a3a8b1dd1055f58f829aa75b9b91c7af0dbcd8239e8dd0ed3cf846edce77195af83096867d651899f0fdd43f940ed4f0c3fc28e212515893e8c0ed51384a074b617fdc754747674883b0a1372b36b12fcb8a71c602a35b223d14db4abd7e2cb85909e2e0ecb5719a20ad3467ba5d049452e77189230684f0d37a2a23c5d62d00fc1155d3ce8f2cb0e73974faa0e23a6f90519d82b229c69a7153b333a7281f869100e25318fd6d377f63f5c0e5fdab618947f202f4318e35f3fa453fb01d45bdad30eb2f896eb2c8bb0b782c95760460301cf652ac2b93411970d532bdfb92a741413f6e22991c343c2c62145dca609d3322434f409a8eb9ad8674f02e450d9b9fb04ded2025d29cd5a35e3833e159c525245a84f907210acbbe2678711501ec73201335f012b7822a161f726abc0a246c53e96eaff2cbca868ea16c10b80029227b95e0df2d74b33a6e5b17651c9ca4671ad564b89a873b659e994a364f883fafff449cbad085737ae9da7bb3efd9e7ec34fa70c1f813e3ce0779c75f39f65dd0b8cbecef2c8e0242769a35fb32ad514917f121ef831b89e006121cb943f1f774daca36886d4340471671c4a4e2acd43e5fe5f94578935012a67559c0eaa9f9c8cdec48e9604d0f9a5cea4fa0b9bbd4e4d12c04a91b98adcb22aa526efaa86e5a3ba0c45d10e666d2a5e3682ab19a8de4ee3e23d8265f6851dfc881a5c3e55f86832aeec4caed410f3201002432a5ea7dcda392aa1f8350c312dab496444a51339fc06f65c449f9312c0f48381b997258f2cea29ff238197cdd07b8c0c734b67797fa4d2e0201b3895ed27028b3e4a3a52493d40572d8030e0b3f1c2071a80b5bedea58d093df0699635dd40c923c58ba5ef5e7f5e254cf7d20d1a3b39f5b9df15f5bb0391ebd46f0845a6a15047895baaea597e7efb967a5cdccbdb2d461af78bd4ef56d2af1e4eb172bd2d200f8b16c338ba7905cd1fe4f5d7176b4e7c06b5a75dca371031a04fb18c74663430ad6474181f041155d4e200e25ac9e256a180005f64e5c6236a92a9e614f80c8e2df12ab719022322de6a89448984965dedf23e22a06751c7dd04b3f139fa21ff9883744cbbc4aa7aa0ef15930ff94bdf8c69c17a19767db097d36214b39448a86e26f79db42ad0dcbaee4980205176b0ee9a170fa0daeb03f346fb6b3c3a0eb2a11f33921b33a372e55f0cf1b694b28306b023ab3bb26e91e7112f1cd6e4440fd40d1691746b12289fb00f3192428cbca0cdbb98b360172a69c6403692fe21b6774323544ce7ed82ca75b1e23c8dd3e2866825b4e5ca203a8c58d92ebba66fe4b8e428fafba336e0b2bcaf781315de796edaa6f28fa60af4ac1284586df2d841ca38f92c26ee515dbbdac428108226b4e4efda985610b052bcda8058a23fc584a965bea5db0850f9a08e6a893e82d953f7ec63feeaee5683ad359e1e25cec9a5d38731d28422dc3471744231097034450a88ef0ae41b37ed9e6f90e18443e50797cc21c1c9eb90c555d22b319ff3434147e99242fa10a86431857c43b406b4358ba548d1f7cf7b7d47154cac4f00b41a20e4d9f7b50a645dee975700ba9f635be7f5fdf006ec5d2e09c74e094e439e92c14e6ddb7ce7b78cefcd56fcf2d9ea3f97035211f31365c288c3972b2475be25727e4a929b14ef61ca67221b68d3513973be520948b3ddfabeb3c672230734c088636f38ee9660da6d24494a50d2ef317a66f233eb70086ba153711cc47d5b86b1ab99786ae1b47317b5794d4be6e7b141634b99e482abf3a46b697b6402a358e11073e5fc6da7ecee63149f7710fee352c658ab262d5aff7d20c9cf28496c59925f95fe0c265f6198e7dac64a6df7a3920972e1c1f5bf49e849e83fc33bb7c925d97b4cf4f877fc8b7d170eb560463c1cdd5563f9fe0e896a6b6ed4c5c611b21b2ad6774340b321705646cb94c94b9e0498fa68382230a4294296835c078fb8c708edbb87d1d758c4f8f58d2392a2d581c100c73101894dc2bdb9bd9a693b3c5337d0c404d858519fbc794281616149a0b8a7e920a5191ef471cd8ebc2f1a5eb7e9c3d0987a72841a2aa7d51a000bdedc0730707ca75fc60574f51c7071cc5d661bce4c2edfbfc1ec95817f6caf1a64f28a809098182dcee1d07214d176e112bb6b41b5d05e67b10d060b4152774de713d96bb78136f04fc9a5ac74502bef5aaad9011b39e40c7950f4dcdd7b249797c5002e7ca483f28d1a39c0ea7d08a7c571ba7d29469d6c003e58ea127900151ba8709f06e4e09fb8756d5382aa4bde25fe88bf544404eee0713ea21edd670da6be5fc7bace8b29cfbeacaf9ab5fe200b5b908ce53b5bf43cc237158257b8c193155604a2ebf94ff7c78f7c8741aefe41876e1976fd548e8bb3de8ea0c175d50aa7e4cc209a77601129e67a209cb81a4fdeb3ef3a7e7956fef26e8e8d0822bd0bbfcd8a394d7d2ddcb0659a28f15853a276c5e358319a69a4dcaf301b2c8f27fe188ba68793b7acbbf541b230ef0c1cba735fae9b33ce8736ea4f5a81e4101835dc0c359e9bde2a090b159e9708c5f5d931c80e7e3b9ff6eb6b4c13881141e82cd35c83eb8555bf5d16abeb77fc910ff01489d262c5e5f68bb80ef6900daa1ca817103cbbff4055cb8464884da7101b3f571700f550809ca5122b98c437a8afe972af8c0a837592d43074297b89554f68d2981aca87a1f9641c57aa82dde7719bb749d6c927bbff39220a42f41b7b02dad4f54fc681e444320a3021b35f7a7e4153d127786aaa1450262b2010a4662d2fae3dd0fe3a9bca314383e2f972b387bcba0f888921b5b272b081fd6a104cd55d418287871d2c96001a77f1c9dda0f50c50fe88ac5616eb136ff677b6095b069aaec372e2b9d7740c210452a18e00479e56c5cba69cdd91bdfec12215fbbeb897edffbf2aabe3f584748b4d15c7e6b3c2e756862913474d1475a6e303936aa42a3cef04f0aa08220770c22c161f7b86a8e6cad07b5ae73719d196baa3741ec6e887121365ea5b841a7347b22ef7e9dbdd24c8fea180ef0bcfe06afb13417dd742810848a4b65e38e96518a866cb0e915801e887c11b1a95738979eb0635c4dffb0d6bd13a798dd575b530710c2a269950464f04bce87e18486efc38df89eacd991928b11da6b7246895d1c397405ddba891b031bff11fa3212a40b634509c0c213c2bb94f68f96ca56bf6eefdfae5e4f5654eca5a5552cb04ac7265a6aa6f780b338c43a1e4b0400b5303c3ab634ec43798d51b5d4b512222b5340af754d3f023b3807e26a4a06f860a72d6a775aa0e46c2bf965e2d4ba82863f47f83463f9f309db562e1362dd3997706bb61efa095e538465725d0009311765259f5f7470ba3dcd84d0a1ddfb25e28811a0bfd9299101c26a46cd098352536c69df3c491d8073c9b73e7e019b717098b261a392cbc83dd8ebb471961626d0e89f4205d5f6569f752ce08fad34c4ea725b428edc596470203daa00ddb010a49a71354dbb8f8ea080a0a921db85b71de0bd29ea1a09de38ccb92869de455c51b3f7b6f7fe50a922ac74d138db1a4c8934e50d662de69e1b3193ef91fa83aad131b5524ddbdc2b0bfe05065c808d1438b9b767467d2dc44335d8f06154060f3d622c3dbd5adda5cdd6f26200de7cd4e83c8c239ac6ab63bc281d59e2d039b2102582ab54a34415dc17f9f51c57292324abf0e06e935aff01bf95fbf848dfb170b17d95bbc48b805fe3739a77d0b3c9e64eab5f3fdb15f085f43a57da77865004ad29c3bcd0c65057984a86c4d3c7aa0de9818e393e06531c4d009ebf65c4426c61fd8f9e8e3b77a85215d8555ab902c65a45f0b625d0ff50bc623a71eb75c1cfd1970feff37f630fd825b0e7595c58d570f6366beeee0d3242ae814eff268ccaf86a5646d1ed73d5a48a4e984d2524279aec52d4b0e410723372361de00e09c8698d77482ecdce165ce11c4b0af43fd776f28a7156be98e72836b963916adc6ffa7ba0a3b3d4bd449ce0e5d9b1a4bb1941e7e4ce0f99c4e2aa4cbd2cc9e0136d7929783e939587e9cb7ded8a685030148fd231d595c960e6970a3359af32d11f00dc17180fabf2f54326588f009ddf9413ffe201c34b2cb679e0e695b95e35744ecad9826b0f24a069d96326617f6dc1a6d7570bd5b2ad3189f3af8520577bb7132b32ee21a70c53590c642d27da585105389ad72e9d33e517cfd0465d89282d733d962640a8af692b1a2a6b0327f08b48049e9c332d04dedf84785a4f030d83d0fb09233e12691b823eb5b8b6e4bb95a2c35e9c13a1598ba87315d88680263bfc0f0ef17b70a922773e466f27be49b4627bd7151b85540be0fe68b1cefb5c79aeafcef45fa217939c52d26db09c1c3d45afec874974e03c517df4f3e38579611912724720247c204feaf835a7bc5e583217c093e291c2ede7d68af67c01335ed93261d9ae91f68ee0a4d64031a3ba26a279d0c6d723fddfef51ab8ab94eb208b065970cc9d87fd82f2b9f51427f3eca4e91ac68ab0732944e206cfe59895a779c071c44801c7c90e579aac711056033da25007b4fdb44f0c9fd9c8b8c4d01c1a42d092c0b6cf6ecd51950a3408210510013b6aaa8fb4b4d9d384e89831c7f1ab8f50dd6565b5069850ec406d5ff2bd2fff3682971a08a4748d37da83c6bf461c71a6f2ed2022111990ca43def168265fe7400bb4b57cd34c8670f5a20fc06a4816d9e32d06dcc5970bb9a4046c09f25c39bf29c56e17404c2274fef3e445f5e68fadfc0f8b94f897fddbb4506ebdba43b4d53c9ab86a361fa8eb4d234a238fa091fe3e9d13fe77466b4a5605f72e7e5f7f5f1e4903cc74d7eea8852a3cfb40278c686bbe1dacb368ebc9dcfff89a3cb41b72bedbb11e9ed680ea19e919b93d2bfd42e68bbce6848f01739aa0362219d0add5019dff7f8d36f53368fb02d34e6e4515e46eecef041803a2a171c9936a96976b11cdfa8b71a0c2ee7f80bdc5205f3b19e103054fe0acb46f1218ff26a152bbc16846cae9ba26068e9d5e0164fc0eb54474d4f94442662ae301e25545102ae3212e5e0ef89c2fc70c043e5cdb19dfb48179890baaccc3134999c4188e9709d2360cace41fdfb705b605318dfca9524d03530c9a99e2b0e911802fb475f313ad7ea8289137ef55c846374852cc22766e7429f0c54978724c2faa2ec6871aac0eb2a1fc7a7aec7d8263914aa5f8923bc270b02605b36ed6d57e5051407872c62ef357756a70feb956958d29973f68060c48ee44b93b0306ffd3e1625e9c8b264ab5f1b82068696bbfed997dc7e3d3c50b8e6f3e9d7d41375b1157b71d6902b697c649485bc7cedbd8bba0aa09b1b3a23d6fe60d074d315d9c120e923bc27a64ca355b25cb1c6c3a18b59c623f8a5e0a4159ae25844887409c2de8464fdb1dc0cb32132d27781715a17467206517d59c6fad5da3c63bfc6ab6bea24f045957c68fb5092685f82ec8ea899987487ee311e28b8dcc8779c982d401ee7b086bc75ba35e2505b74a0186f146e1e0c2f62a5eb40c218d925077e1fe444aa14aac974b67bed220b7021168809167ddd8afc99918dd69a851d4f6c60089bcefe81f94123985b20c1019dc45519a5686af23b48c1512ac86e7204b5d339d1529daf83b5af41aa34f04bb93af4ce777639b0abc621c85255daf88703d415a4853a15db35d1a620c1d97a26f0f918b60cfb951bb4be13175031909761819559217572504187ea8d7a4649f0a2bf8ba179e5c557078943f1c8fda99917ec7b5d4444cc0d5db9c124af4ed6d7f880fb7536e31e541a3a46019d2fb51ee9b38abce3a5a5c3f18a2d144ebe2d3cf2e98cd6e0bcb24dc268c9f0fc10a9c1dd3d142b121578641901f150aea629922193207da4982644242f02f78fb68a85b33bbd42357cee403e4532ae45e23cfe603847c91210a81494cf11879367d053dafd1a4ca99d7b82b68af0baa872d431aff31366880ffa0972064b1613cd9b4ea9680adde842a4dfa4d6dd18af8e58c205ae4eae5310698d32b0a8f94c5123f82e95a599bb8703cdb816929797e78b4607acff1ef1c0a30ef9dc0b9da93a90084ad057080c4ef220427bf45c55d3d5de41db9957d6899967b440a6f30a55418c358550c7fb4440b45979aac71f494756ecc861c54ded51141c2528234c0a058da89f0716470eb35e59d4df31c3db344abb918ba2ea1b4235873bb44e55472c16e6535e9eaa6fb27469c70083ee33101db3c4115cf39cd1cfdf75112000e5d30c81e777542138b524cb08a7516bd9ff84f46971203103a160dafbae584eab462747c199286000dc9445a32870700050e49273acc1137abf16e94cb8187620961335fc68fcfe140d8022b96e4f607810404465eeed42780fa35a5e697d8861e1d6fe0d43985d26add7839b16dba65557586c004aa5710b4629ec66e6b2680c7dd88cf5fe512d38f790bdb05010e40bfe99371ee73b42f32f978efdcdd05a6c40a4f2de23eb2ffe65d97d45dc65d535849102e63c7b6a0c9ffb6caf608a5d0af161cd676327cdf4fd999eb70bd1fd675c62d111590919f5954bfbbf164489916c6c6713838908716ce2066c71cef8cb0a7ae30b964263317eec96ad69e7ee6c4c99ac16226a6c2e2bdacfac6b36e82f2a37c66c26d9ecd8603e191897c4a2dfec3016fe7f6b0fcfc22364fb07fc37b6853fd3105c97c3ff8914c5d10cb6798db722bb7a802e9d89b6d88fad789e79d74bedf594b6a084101cb11f4ee52749a138e2eed2439ef8a1c153d821e260a22ebfe11bad783fe3518a19420d2c11d1c65ebec745abef2ee1ca83239c91487b36dd3467148773ec516409957de972db464395c915ed7613d259e3e924895871f16268d9f5d39bbcd7ae3402dd8f41fd4c9227c2b2ffe19dd4104f2e8aa979ad89fec8d4b430c5385617c29dfbc9b5868e783863ae4dc2f5a64842a7edfee48ead2ad955d4034aebc0b338920275a13155e15563dfcd3a461d211dadf96ed1737d3f156111d772741547ed517195670cd3ccb0b619cfeaa92c9558644dff9aacc8caa75d1c9c003b1264742967f82c1592fb69ca53798eaa5fd5bbb8a4e49ab1a42471a75756b68de2bc82dc250749bdb0efa47ea934ffbe388757b19b37524011a90f74c575f05110257f35ba6b41f3bce93da11c4c3d44de880b0372fb4dd3227d436392ae97e6466f07d53a6db0110f01e72c21318092267b7c6ff72d237758faccc5012919f627d4f24f6db52ccc4a48870854498c7c112f147d43aa0f5ac03078bfe51fd2009ed392c1bf001359ffaa891c57fa32bc55bd59e666f5eb9115bd171972c397511dcef51cd9e561a78edb870b375d2ada5b0fe2bec2f48232f3e019fc8f2875d994846edb15f9abc06583b8165a79c0e60a34dbb02d1b6c75ff0610d2fc05ee922ef1c70eb4012c34080e56637f2cf11eeefdce229f4dbb3ac18c26a65c90fe2a8be655d4e40f0027f52ace629282651e43fd72f8a175f4ed13481d29f4e991c1e7207bc7050946e622afc85d1c8c92c97f7199a746392e4b139be78eb4b6617d3b89698e9af9baa8fd4d4f5fc2f2b9aa23df04ba6a1f7c5afb229d6df1340b2837a30f3613546647f7a6e05a2fc22c42a2f6b75404950723f7e40bf0b02e832e99515bdf8d7c4147d8ba5a3af5ffdb4d619a40eafc435365d37ccccb4eec2dbd6441d5b58b44d001312e35ffb4bf226b50a96c7c5b489e6cb884e2b34065bfc91e1fb7d88d922df99fcc30586d42dd55367fc370f4326604715b5c55713cc81abb59b668f45314737d042f4f7efe5b192e7563ccff43dcb7a0eb1b295d1fa39856a0b6a9f3571ed0aba943d323f8d93b17faceaff2f9780246bfa7e5ef6e4517879c0d674e26296c661ffb2e3cfd89e3ecdd6dbe3be8638eabe717735c8d3341cb27857635966177693d742655a38ee5b72a91063354d0f122bf8f31aaff201d17562931e13587ff22687d845314751c1e0d0d05f5cafc12422807e7cef1d3aad85a93617f319e6bcfa2176a34629a6044a9348aaf39041fb3b52197924972a9a623cbfabe0de33ba13e95a8ec07bef8a4bd56f694d837e6738a8ccf24dcf672a518570ed303adc85f169caab64ee4c64f2be647877e74b174e9cfabd87a23ebd54ee092c0b3986020a069c9abae86e44606e5cc2ac96524c87bd209ee3fbab0ab6207d739b81020bf49127c5ea8ace217beab674141a17cf5ae554fe17090cdaf13671573cfd00c9fbe2c923e1a63b5951b9e53bef615fe3352137a52b837ca52af2feb7e1cf8b1a0537ab7091a6679eedaa7310ed8ee0855ba30635734ec4fb0c32a50c75f136d6349b0b256895047d486f9110dbdd1b4ac5654debf5d7087aa34b2185be4f938fa94127fbece38724f04e2a2ce89fad5a31f7d9c6d29736e9772a3f4a8e4ea6e2ac863ca4062ee86a3663d2f6f121856e28ff53562a43d5cf80d70ccd1ee7b2f15ad6e6d72bda07ea325f0ba7836d725c41fbae202308458b7ad477458eb91114fad31930eacdbdd8f5489b61ce8a70981d53d83724a57c642314b10a4265a82eb9c37beb57cc2a7cdb43eb3e758dbbfe45bd7ebbd81deefb25e8c5e609642cc21a114050fd71760f7d05c751ac10ab281d3d9e221c374e03b1a1393313ea178f7e1db063923c484d2598c5862ab7ca07a2e646340d852acf59e6782b74aabe10484724e904268b65e5513e42707d06c6fae6b8990621eebe40c2a92167fa7f47d5e09766338cd5c30983e3eb5b2db9769f0c2e40451708f98bc65f6068c241846cc3834aceee1fc5600651eedbef333c2e075803af636cbc41f908bd933dea902e1ede3ddfb53874db22e05ec97942219e95afc936ef1c8f466aaa00b17a9a1f9e6e9e1d5c58d60676b59ed8bbf91a2e70dcf91c882f76e5244cce8787f9a61ece62dc8026f018dd34a0cfd6b9bb499bf82a21ab09c50051bdffa9a839ef106bc91e974f8229cc948aadaf5cf51d137925deaa13bcac6e0fea4f6be1f502746633fd65f46b2dc5028c7044c2e6322301ded15363cb1ef7b841ff705d62d7b4e3297bc895eb4f709e98cefa9b2608b23544cba6248d1c8582e3ef398326d90b1603a5000a38784640f786066fa9e496db8ddd176e48609bdf6dfd682352679fdd4906f563effb9cc1d180301034aa500586d249857c1197ed4a45da53ae3ae9f278e283d3d89728b13d14419a900c40d3f1fca03e659a8271ddad97f3761197e6b610d1e06278846b08267378fe7a38569f0a8fdfc4cdcf460e6640252ef57f38b12335369fb0a1fdb53920151c2cd37f1d2afc9f66f80ee97c1eba0bef2f21e355640fca911090ae0e245fa59c1d4c9b7686d009e4d3e21d675b8ceb8414e61fbc9898c44b191ba7070c671c82af43b4b121188b3dc7f4fc9532e325ce86098f8e1dfc080840255ac8a50822461e55c621b5760468ec460f2f670dcb82a6f72153635592e99dff657bf68e0ad93296ee84d6001953f91a24ada9a6a03c8dbfbc444605d4ad240c19da6204a6d3bd9e8df1fbdef26f91c83e22a09e8cea8cb740dbfc5d146bd17ed70c447d1904eebe0236b78d5590c1b1f75811ada6839fe7f0bf082c7c2450a36b060e2a254b7da7037e5dd32495e2fea16250dec065c00ff7b0bfb1d123d2df918bcd53b1ae4b785bf132da336eddc28f4204d03840bf53b4542c547c4d1628b2f3f700c308ed824a08fa6bf53d3dcb05b48a4d9934f52081a58a359fb092c70fc451b446670c0c0387da6df18c99626872b779d9b298f5e997a5d115fcce29f8e427d1b705a48819e7e04eee84fd7295f04880dd79fecb6ba56baca01064513cf9097160e85c894dc6df3d936c6c319098c580efc8d5760179724899d38b2d9ce3c703e2204b1803dd3dd1f6e3c0ced874dc056c807adf8607c052226a18273464179cb83e48934ae39862a87c0881938e08ff8d8548d85aa42749cd0f0256713f4f172777292d8e32563f2b81ca88c8c76c565b0ed9e36d54a9efcff93d9042b6ddf4589cbe5ea03522da11105a83426d82dc4d1d2c224c2429f30f765c44bfbfa050fe277fb683bb2c375814f57717f11291ec6fbf5b80bc6286137162f53c509b13e1613fb2dc2180d4540a8c6f344a913abcd7e79400e18fca70503b66867dfcdfa690c2170a21bcc79a0247c41c11798371fce431f11b7b34c2dd9c1fde89d4e2e9d4c175c0dff58b57cb03966c5d549e60e807b1834e52bcc1147622e62136b6391f023aa458e83ccbdedddd2778c62fdb14fb0089bb51e27ba9eac4ddf074c84271f02bb82e27d4af870aa0e70f0d2791128eb872cb2ccf43d8bfa24c620c395c95c2c2f8bf72827d34c58b8d20e97e1e0d7c74d4170bc45e474fe02e7c813e71bf36ae4337ef64da4e2a818f87bac14a5f1eca219a7e9721bd2e00e7c01b51cb3b3e8c65a3cf6185a1acd57d09bc988b56363b1926045557671c300bc1e9484c288a5fb1c042aa501ef0f44e75e8657f4c9ced3dfc2916838ac1c411d443767225d615aa1129287e4e5ed88c4b9dcb058cec6a826c937850fe32878762dd95685f613eef123cc03cc27a1e661e1898c14d4f5fd550ae3a1342acc8c0b3a2c9e03b34428fa89e1238c30731137fdcc04fa2cbf055791f7c221f587c71d2fc8c150107f846ea51510e9e542c05742bdcec7a1a5d1ffce578477ac58ba9a557da93e6f1f3ac2dc99bb80cae89fb2945be85fa194d3474996c449d427430fd4895cd625d5b513045608310199365b833f46b831ca20cea2584378e576f34421b30839cd51e8948ea6549530980c85d4b08f9c09fdbc74214b04043472256f27f20641ad65d81dd490e19b83ffc13fe491a01ecf10d32b04af5ee1c6bb34f15d562689e91896adfd5289d7687f35f28d03000cccc02103b8b19a914c82927f7a4440dd5cfe02e374c669d28b42c073fd92cc3353fc74afbc3d4aa5ef17edac3c34455506eb46f7cdde3ab6659c16100b632d6d2843ca06c8e1c8352196c6522f2b5c5d1ec4088c801b1b65cc7eb07e0db584581000e5a0e4c082989224044325786fa06eaa44ca65abc6c53806fbcf7cc1d03e8b98c56d95d18a9d949b670ecaf459e22b4b5d308ab9155e0196009d8aaa45d055b9fd89b022001f92e49c902909a22b01d9aa15f2942c59dbd3dda91d89d60847b68b16655d2650ca4958ca8b8da92022dd2df9a6c46ae9bce1925671ebb4b7154e3b984e8bbb766a9c42bdd3a6aa8c69155741260319e23dd59b68984d09e097342db1a486f6228812bdb2bf16dcb13e6c9d9d10ce66d7dfd636fa26025786855749c98345a2aba36f0a5323ad6fe4a76d51abf18601f89999990f5bad1394b0c07c1566ae8aa4e27aff28a85b02f54c363ec748e378295446cd4acf7edee9070e9631573f0aeb815860b909c02b6bd2f1d67b6ad50bec70f40a3b5d51f48bc9e2e75fb47b666900f5d310715694d1b76393542c67a1fdfb87776f2b35403c2e06cfe4027b6630ba0c9dda63283d5645d114dff874bb007c66c7feef60a7e20ef160d85d4e69e29469d60a362f10bc9c5f3d1326233f041191406c945705535a3075cef507bd1ebb51a614cf2a2f6e970b97db81aff1f6f0bc56e80e06d619e86cbc66fc9d82437315b8cfac14fee8a35382fb0905a2248dfa447ec8aba7e739d3fbbc6c5f8c4e40dfa037637d15ec943d393ca80b711d8352560f3d7e071fc5e9b313195efb83e493a1959d2f934454ec097130c183d0a38a70caf41d8eb4b356f297736c1c79b68eeb9a3debec3b8f223300165f36952dd61774c0cd98ee7d5acf149c46f7aefcad769b7fcb26b89e244c400297277af88ab66468be068ba13495f28ea0c70a9c158b6adbd004393ea242ace658ccc5d3ad64fc6cb657dc11c274268531b48b57971d19fa4bd7fb6f99071549350848e826b64c994feb1e82042630c394a0bb203b3c0d3320f23c857d2daff06644611ae7ced5fe1a5a32ef2635961fa532a4ac1b077da198b71909cb4f80a9d2c3a8348d51f1d06f0219619d5771ab62e24aa2120a970d748009e9309c587fee0a93d624fd8a8ce4fb402a27222d5ed9dfbd40d2b00743a8a0af69fbefac691a64f0472d7fe9f92c23e7c304c242c6dd8606a369efb80eda60c60195c61273f89e5d5088dc63f49e0c0afd25b6183ec31f36cd6892d6dbfe3045d5fac725f346721dddc58aa35e1b5107abc646d1c30fc38960c1b679f3d94b0873b247cb8394078d2da506bdfcdf0ff62db7ecb58fcc08a3b05f71e427f80033784a4264853503cb7fef989d363e7fdbc4d20870074c69ab2e5e607554e815fcdcb49dd5612ea5da2518810bb0b6e502e6df42610d2366e5a80cbe6c9d5676a73df8950d3a10485234abf51d90c05b5a1464f46d4c40c533c8989e29a8081030a0a5b95fac6c96cbd249c19c1465f06cf9e31c4f4423b121b55cf5248a8a7a5709645cbd79a541398a123ccbfcb5cf682ca10f47d4b74d4d0d71cb7ba67c38701a083f2a45eaad17b9cbca57837acbe5f636813133441363c7279a4986ce496309e5461b51d489864365564655e03f17bb2d2bc4900bc88fce2af02dd7b0f79834b087a7615d76d8ddf1c71e6c329c11181360ddb13f318c36e90e3e69a815780f36e9569f7ae0072fe7a15074985a0dd4ef252d20524b30f04e160f9c1356c4d6d2a306050b3819f41ff9856b25be302b56f9dc01a153c1a74d1d37de4d7ee89f58f26959aeac6939312f0c2beef8e447997c0ffc57a90ad4ca322c160c24d22eaecfe3c55e0334022bbfa1cdd4f34adf5bfddf30593c31be59f7f0f7e2753242e5529fdef98a876fa731270c5a4c01b0dc080b4b300551bb65fb121e1fb98f678644886eb5376de450dac5fd52b2ae734f0c8243db78252ef6bbe18baa0333c74a12be8a37f23c777211596b0380860aaa50d7009f76e1712a15c3226ac083d6c3a6fee8d86c98a5a2e2ae327a4e1fbf34b34110a5f79829cb81ed608700267ac5c2c4bc6e8f3f7f18c7cba5bc96e90657381a10d3c5ca1cb4970d0ec2bcaecf6aaf106d0acfc8c62843741138b687367c7bfacb18c7ec0fc7fcf57673d512cbee1a7fad5ea481597668ef615c6dc65c470325c31e3e23187b0b3f88175c2b9e216a77f4a221da110c4aa4d8304a9a13c2ec565a7c1d2d7a21f67c1c551c4dd0f6da977f966985b1297050be7e2900d5596426dec61ac57fd2147992708ffddfd62723288d0296ca01f4aee0f27691e690595978f29737f37898e289b111c5658d711ab82d04d391aa5019abd179154e1bc0232c751105906cebaad4432dc805494178dd775db2638344140f246f1c87ccdbedca43a3b37448de6da521c4786cf085818f567f1b265abc4e627f5e6e1a4025ee4404e297419c49c6d987d9c2ead2ab2bf6cd9b36fd9dbf1b89b449ee438698aad271aae759e2b1c4fde682057a4e6a2f6ae5e0c6c58662ed07620b28e5792f192a7eb609f58714572a0fa426aa65e6c41531a84dffac6e09c0e8b08dff4b49b2637dd5c13216aaac692810b2b6767f048223d1758b026dfcce1f513ac479d39dee9e6f6957ca010c1e9bac8bdc975c4ca69f03cc71099b20721e82eb6444551726aa1b671c8d544cbaeb98f821627565a40111c478a30ad7fb14af574d0233001e2882a396158bbf65976b46ac0f00b7da9a4fc663ca9a928cfee7dce5f81ceef61bf735ee0170d1d3acd52e6a0507cbdd496274546e83a469989ca190583b255c198ed0d3c96f8a42ecf25d2e4192daa1ae6f9b2ed13b4decb2fbd11afb7275cfea35a61d51f1abaa84d26e6074f067e8d4f1593d01383bd91c46c59ac609d596fd691b96aa2f32d658cd7da343a10a620b6ecd21adacb72259d341ae6c60ed730905b044d6c8c887ab7a10f73e8b43abcf278f0dc01a809d72460720d6fbe43b0ce8b99ad3617de8b3dd922adf8f7c680e15fee65187d0c8046c78943da06481d19aaced6a28432d1dac5341b7e152ea8b3d4b404876987ce038637bf1b592461aefb20dc68b14554a7bd464376339f8aa2ce8c87c0def3a97ecab1802e3af18fc1c966869b7794a462320a882b035d88ecc3a8848c076cd8045976a2cca351681c16641194c9d360dd67b5dd26a4bd7c4f09260981792fe088ea9efcc3dc31801b6c4b0ab54deff4fea692b02c3d3abf6162c3182037dba96f4e5eeabdfc27e014b19123dc2e0b22af787de309b6c7b0005c703a259b72143e6ca2da266c10aa0c3275f14842d9789e3969eace81919ed0664c23cff53065ea72e6ae82a6bbf758dd649dd4e608ca7acdef7af5b9df424d2fb862ba5d43790b9263db873e2f8e7a70ae43677f6e3175bef45f579e0b838daf17ae8ea9d9c412be0cdc90dda19dd63031e63f068a8ea4d792d13f85888229c15a32e8681560f71c2cf5b8672228d2968355bf793467225c2cb989a3066282b69628146d9776c617313c10fb8058fca80c5910a50289f241f76ec4725b614d9284560500866ffe7096168bf95c87ae280a968d16bb554c66df37684509554af8f177ebc026d222fa1f85e5a4f0d8b0cca47b648b3b95befc01f2064a000610d3b211cc213ceba2702b343cbf7a39228bb676468b8a704d3700a542da885881d6304a6f63e420620ad79341a32b4761ce3af11a62556d55c69cf3cddd5778cf030eb2058dcdc51f2188c1e1cb3acf078f40aa3eedfd2f4462b00a204f65e21fb14e533f896f1cdfced093f838c5f22a32b94f302d4d9c8d1bc71d3373c75292fa4f0b8efeebb8490fa5c629a9b3a30a6a380c19c528ebcf983827d234953210bca3d4bea362986e8df8ed1008be891792ee9979a687309d19655121231ebc55b7a33a19145fcc55db5604974fdde3f506cf13d8fedd93a4ab2dc7abdbf80c6c4a8cc7c2cbb30581ca521cb5a90237e38521144d2aac6d3127104b7cdc5326199700214e4e221645c76e1f1fef5411e6262d3f30421eb93f167b1bb328eba1c982e74836c618c259e8dc769af2901d57f82291bdf8ab74993a4f2c78a42450de9c870dc06541729b3ec5d4b35e0cf912698c240a4fd7d9c9befcd40ee1977ea7bcd12b3906d715c047ba5b510b5e89a51aa20a1acde8c1f86ffb9f58efd3011cbf58f54941fa2ee6021275379a8c25d7421565c03ab20b25172269ebd8d9945284d5d786826b5908fa03b22086c0f57f12a20dc832d51011839f7f2bcb1c17d0a530975b7255c8bcd2ebacdc2af126c26e10cc3dee794e0bb3bdb18d9843295ccdd7a873d8d9b5a462236073fd12626c5568c008df38e1efe361f10888deafa0c208816010a8d140d2de0aa0ee44785ea073d162d05ef77bf0b692be389c950e95afc4cbeccab48ae4010194e7759c3bb385bc1b9424f6186c1552c058b8d9a7627ee62da2d889150c278ace47a98c552c1f07fcf59243003fcc2c8ee10e53189b6e162296f270dddbcbf9a4c5a804eceb817a18dd99028f64b8ab95e9253b2ac20006e72185ee0c309ca4f6a04f9026f21e2938a1563927ec923dc5b710ae56fc5fcb52f722b1173b3f7e60bad148ae592a0493afa7634d572711a7246dfa9ba092acd5b748ec4352386885025e5059784f6f84965ee5ee9ea2b89705f11d900d8417f9a1461b7af678a3af8274283d78356c57c49f42ac7aa956bfdc7c7da65185e25d1e52b3a7a4eaf311862b04f9600449389e1e1de6c1b573743ad3647b6c70d87dbe37fe39aaed8398437c142ae6537f07bdf1a3e18a38dc1b58d8570f9349226de7617d743e84c6c371ec716a434d31bc2c5569b6bbfebeb2bc2e2d0321e302207454852b1c8a34a01f49dc35e4669fbb2e2aeb3df8fc866dd1824108f073f64e9ef122670c5400e5eed8329b51f8ad667aaf6e8d5d65385624787c32174929a2c8d71885bece066ecc35ef6d51f94581469b90ac79d64f4baee9e8bf787dc6029ff105c40bfecc51d8e79e990f6c932b3179dca806ce1812efdc7b389ed85443adbb5388a30d59832d91b3f718e63d5716e50d98dd42366618b5091c180d9f8c0209cf67aeda7fb12a5f93da6ab073a1ad58bc4637352fcafd4021ede6f0a7ce7c001e9124b039f7d8997214d30bec63dd498d7a381377260bf6afe94ebd2021d6609fe75d52063b5e79c6f436dd34b40d225f086f70bbef8d74a39587f1dc352e580de08378ac5ba646f10331c50389f7009856a0c04ea1280c637955112183bb88b328472586f20b06a3b4c6a266fcdbddafd224156e778556750dee8e0eeaee82c5169d7d4c755ca59155962b69cd2c82223a9a062a21fcb748cc6dd61a531290cfde01e7a08dbbe9599d42d99ae15bd28312f05cf714512aaeea1d64c8902c85d020b64de27f53e73b6136092586f659987e4bd11aa6ca69fae8a466e51a8fd7dd6e3591819686ca4cd40d0820618522db8c0b410e121f01631c41f9e81d1542eddf6c615ad197822724632c2d5253bee792a53ab6a94d573e423da70cd81f5e2fa4c113378dbb9a973bb644a0acab79cd89a3e17ff60b278fa2917d216859a60b264da5b7c902974ed740956085a8de63f239a4b7562b5cf98b4493cca3abecd52bed8dd62c3f9cc89d13243b947f1f51edd338b63a39aa10b3f0b0b70b2d852617151140d34b00416368c137df612b5fc4d3834e81cfe4ce30231ed4a7ef3630c13201573a1ac463b7363ea2ec46ef15be915b9103970db07c4ef00c33aa08dbaa2ec832042b928fc3a3a9e1bb5cd788bd4019301fca103dd9177af917aaeea6cf62ae77a4b324933af821f4942b6d9beebaaad26ad26d43ef7ae99612960194c2b3e1e6939fdcec41b54ec24f6cf06ce185c179420fb544fe8b673993cdbf7d95bbb53ea39fa7edf0080a6d55dee166903c1fcec5f8cd2130242c229cb51626ce740598caae74dd35abe3f939f11df2c56d3bb2c161a8161067aff0d722a5089702a1042366f3f9c3330aece723e6259b10385eca83869015a11ed3d320de57990726cf4442806edff3444cf3bb4531f32e8c2a21e75194bd6c99db6684f0cad652b00d48fa98608b31cccf42d7f01a3190d218087f106c1fb836e75e67cfca400152e57312a10dd89f062aa15a0780cff8684e4e20dcaced90a99935d7db5b4f9af302063a20e18e0fe3528b396fe40aaa1106c6a47bf3600e1f07c9c7c5549c5f1e3d5f3a7a7c8512c36c197a78aaba6d16f4520a1964f09b544885fc7c9c6eefd887d32b6844b212a30cbd9bd416f7caf60d102f0709c7847c077d2d4e0a95c1c65ff667b3cf6931502bfb6a26805e7e3a7b27fd6660f5da380d013a7b0d5603544cd17032995b91ef2e956d7f510b895b10354e9712752bcd3951c072a646033ce1429e3784d94a2ba3416f38c6ef9da9ff2a362f94c462e15624aa4c017f6c4252c96a65fd752d27cef152dc4d922f7c11d1775a9060b4493463f972289d581c340abf57f1945342e891ca6d44df10d4626a3e18cf32bf49932b1560704c29ae7f585710663e712e036cdb380b61ca1331f36a7e9148142ea15432a38a419a984935ef91b090782ee9c4679b039542196c216f6240aff8f39f3dee33e1cbf0115ee32ad79e123cb8184d2201a7da1df04c6357320e781c09b4e6e59364998da943fc16b5b24eaa103fc0fe78f4567fafe9ec51faa5f34fcbd4a5250d542755367e18fbd814b079a85c17354c6ed75a372b85773449dcb80138aad0e15e4a34f1692a1413e5da37a19670191dc7a6a1b611bea7df229bbf6e22d01ab310b0f682396c2500d2f37c4e4bcabdf64531a7833a08f070ddf5d8f41e72cc09d90831c10b5a2cfdae4a1e6943ca8128e0de618206402d9855ba2a892a702f29a916f36a01a77b48c26650389ce7405b54b10dc2848b99c1e2fb9989ddc35c2f69341b3f050d7f60d19e2a80e3ef3f33950b8687a89de964f41aad76adfc942300e2f497bec7c796e8047f948254aade24f3fec40a4a281b3e48142ac6b7b717117ae42d7eb7f0ce83aec8c38a6fa074be565c8ea78fa7412ce679ebacd34d34ce6a96b8afb05720afaac839769b309c465efc29f5921ee5eb07542cdfb1e2b0ae0c4d91d397b578cbac39fc1b3bd430fc61e3166ef7de72665f802bdad98c652c30dd0e2a0dfa33bb0f070733746424ede961dfd75fe68a299eaa0a2a312b46825b4e603fb7afd60f3f7d14508a00617c345c25d53508e9f60ccb2e0b562806e9222e1ee44c09c8551de1d86d8c02c45e1c4a2b62c8aedc2b32e9666f6dec3d9aadd9480282e1e6c9ca4d219b6ff8b181cec76936699b1fcadecf33ac2993152fa4bfb73f7dacafb3393a30667069996eae84d0b6605585923acb0a2c43fbde7b7ea49d4848ddff2e70d02fc184ddb750b5ab8eb6d28e88e945489fe0fc4290901be8a2c8985f9006cbbfd487d00a67b272c30cf0e7924d92ed7f6927cc747c470a23624c17a0543c7b8478fde8514b073982ed35e1976e105e1213e84c90e5330ee2d72d10d7b0e19259669369b9427e673f4928c52f42604ea085c499e32bdc5d78fc3a989ec2a9f5d3223afcd0ed3d6a9d073302fb8493bf7894b76af9f0930f47e9cfc42e57adfedff7e7b3541d54067789b4158738aa3556c113d887a7b4a35498231973a5f6b2cf53c14b389916e1840b1792d8560089d37c7640d273c4f4207ae37fe14176b1d0dec5c3969ccfabde0e761cc16527fc08ae7444bddeae4ad2c251bf9001ba9729a3858dadb9a00ec82940f65aa2e8848469f973e7ce2efff19a485b665d4c2a9aee7049208f64663409c92789dab785bb788ac8153cab712573edcabd27f416fd720464761b5a686bc7e17b6685ba92e8075b77e5cd03e2568e227619b88d18513c280b261325db42f617224cc2a0e63929c3352f0dae821f8ec46913261256f805af65ab73d9d25e80fbb61ecb04f66a0952be6f43c38a4ad21e1fd8701287c991096fb4fd4c34a983db0894e2975f7614d34289f2c02a53596c97b7fa7458c88fa7dd0d33290dbf8152aff0c30a9c261c7fff013426b470bc5b20a7ea3a646a408483febe7b92b8f07dd65bd03b765a944a8fe15c65750c85cf1ca1a9dc9c1141892fff9dbd557d448c9dbb349c168fdf2b2922254d1b7f9dd46e57fda6cd618359aba7ada6c53b8b5ed132273f20c532b559c2a8b04427ab7822d720d1014017544f1a3e62ece67f78a35e97b3f53e4ce50ab148c46dfaef49219f407580df8d0346e122c0fb14567242392aadce95e17e4860e98c2f7fca7fb3725d62519823b2e37fe91d69d250f82da801cce8fc15663512d4c83906a311b5beaa4c88c9e415fcea7c2a58b6c3d854ad43321ffbbafbbc02eda090ee109a3011cd0deb116a77235028d268916ed985e24d512449fc70c3792e86bedf3ffb73333e6c4c2bd55c9f69b6ea384e8b7270cf898e8b9ec7f0708fa0ce1fc0968097e7869124581cdfc88dbdd1ec9896693d88da2ce7f6eba8afa54601e15481dffb803033b2aaf78b15c18b028028cc142bdc842e83762a3c145e118ff9443a4c368850fd2e2b5df879d476bd7e6d77d986c2765b87dfc859bca0583a8f13b7a304ee5763c2e4e786a9586ccc8e4178cec0965404d12ebd84bb604314834b4815568d0da382797ea1d2cc64fa3b7f2b29530709a95d0b48b10eea22b585ef20dee00f668b7b0045a376c09e61c517ef7ab9b84943114a574e77a287af317ece81890efc3e0898478c69173297991e81d230e88e0bd677b55eaae14575ec4063797f7b5b7df864c82c7c02d7275bcc8f12e4333ddf9ec6968564ec13015275b6927502ff76efb49b789c453c0d7a07905319f32f8dd1f641b7f8e1cd1415d8cde606f02fb128daf7d9683cb52ee13ae7923fbe568aadf4b5dcd9046382a7f8c7aeca189b43b82a81a106d0b9ee27f2a458715cd3ed736a746e7ac8017d9133ab1953e016e12a06a4d7841810defb5187d8080b0632c43c14907c44f8c5fbcb3814c55e610f8c7208e10616030f4208b81b0497d6e482c6b3abe3c42a9c6cb78bcbd3a384bd70e6db610648fd9efe5b473e58fd6791cae960f3369917fcc84fc5c6c5f803bdde5ce4d6032c6cb778d2e8bb3912f007e33e69a8e1ceb2f58dc3240b598a115a56675407446948079d3f8787d9689921d671360c16acaf872873efe552dcc03fe6a018ad5123e33de1d338c6da512daa89bb20750dbc61acacb99ebb2a3829e16588c2ea01269b7f825a711ff84a73316f2faa1b107cb41ace7088522cbe6082b465cb92c465379b8abfc2ffda951871d0ecea8efd49e9567ac8c236581e2d732ecb5043a2185eb6f5ac35363fd328dd53c4c94b08c9edf61cd2790d5d72ac53497332eaadce5b5b8085dda8b0a196acb1a76edc1b2741310545e6437f8832371259e65d49c5fa4bca1f56e4fd5adbfa098fff1b78faf3fa5fa9edc38057bff3ef1f304afb69d2403d38f7ece697cdce780e5ae779dd5cdd941ae3c34eddcb710eec420df61abf95926faa7ca72bdeb38513e3727ebaadf6b2453aaa351f180f7f8237b33e47e88ff88ff3ad7f575e9dcbbd1b929643e6cf8278340c567c06b7a2d5dcd9fdaee54ae63ced5595036aa2362445202477107ad6cb1449d31f1932454496a458e0b869074fdd6ed5b259f2bf14727bf3916858211e50666279125fa4b73e187aaf4610570c610c4e09bba44f321f15a5c27f269d3fcee32b8adf97698324c545d9629db88305ee8ac6af6fb314cd8f6701a2f5edb6b5a1ca5061b43cb72da48ad821f06ba34d97c3d4b5720df71ea73c415fa106c6a361a4836767dbf9ebd88920a5e4779f12e605ef8b7fdecc618d97eb0e35ec4063486ad5fe73c53f8a55d9b82c563a27e71898db6a97118f7fe83bf04c6c77ccfa51e3231c3b370b9a3bef6c774bdc007ae346d5aa6680de2340edc968620376dc9285ae51b93acfff2c7f23189c206f7cfa82331217af23b228aed3e18b50de44692ead27d3259c1904b35ef22147c295429c43af10ba9052e06be52ca64aa10b1dfe3bc9b593d1f676688fae097cb9cb6a8629fad6310e3bdef3df119ddab7e8270c46126ce5d5d177e93539515c9df9cdf5ac9d3eb2580e7db4361d0202386210908e272dfed623fe4c0a457cde8e9d76b789fc2a45e27607b07feed4fec46dafa41b388a8eb7b9c979c79398fb42498be12795be187c1c2ecd348d86aeb4723e54b2e2eca34a24163eb74462e64b25598c3ea9f4c4800fe3ded2ee359afd1627d13ce2f4ab969af5ae0a96e1ebc4faa8bf25b87116629e9ffda19214639f503a62fcf16514131f2c65b1e783252b8e1f5922b1fc792514f3be545262f089a527061f57c6626a3e202da11d17ae982f2d69100bae7c7b1480d838c7e3ee3171c35eb6faaa6a51726322adc7ffab91643f894271ef89436918b9fcd70ef3cf9ea1bc9c5ed60477b55e9dbc4df2cd83beec939391aeda6af0a7783ac9b3a5f4e5431b7effd1e7c7d83e3f6e7e61c86d31e2e74cf35cb4b2e081e14dbcbbf36d5cba626249c4039ef2499ec22b4faf79647186cfc5dafaf93cfebaa5b61fde7d77cb217133c72994ae8aa1a656e907157b88bc41e31f914e76b894b55c39ec2f0ef6e71b170f20d505ff92f9f6fd8ecb4fb9f6ea1d6aafbf706e1cea7dc381fabb780e2f7ae928435c13f6b01b6e70b717a245fb0e00b76bdf2da63da5904366fe33ba85fe2f29cb60c90f18bba8add403da00d5418d3f90e5d0b20f98dd189cfb78cf965204fffe94a10a3c7ec0c9aa34176ebeb854cbb3fc64c0d28613aa22f4509dbb486102d767ffe793511cdb334937364b22875874f40ec78ae9197085000c3f63e167fc12104536077634c4ac03f90c8936865c752343404014952f18deca90c0ee144977b097625614fef3088e7d83b3875258b5c0430062efccddc2a738def73dbbac799bb895be3ccefabac748b241fd256fd5971f26d1f07a998a66146e9bf2cb45950f8825d2a8c7d11294751fb420ec8689509f2c17650adcff44ed7366c040c04d9a5443fdbb1187994eeac9e5c0d90b4362218b394170a0c406ac103485d07b2713c1189c771218a28919301c047506996cc069c8b529f4399cc0d380e25e71fbb1cab01f0c506e9c4bbcdba29c4071ebd6911caf7cf0bcd5309e1c1730a575ea064737659f768d3e8a3665e5a0fa5b33f2626c0e14093b2aa73d0d19099bc5f1deeae91628c2f772313f844648590ad643bf5225c89d22bcda8e8ddc517b5514abf8dfe8f19afb92b4c1594bd15d6726974326a2ca097c7ff56794258afcdd79d04ad12676fca33a50579106efab61bc0304fe66b37bfaef6d2714f57e9be04bdec63945fcc179c9442b4df06ff440b6aa9a95a65a7035ce0f3b84a7589da1e6da36ce900e8bd5365bba3332ae56d416b422ee2b92ab8603c89753ad81dd376e96e5988fd974b3752dbe426f7b0029b2296fd196be928e433016f453e4457f0c390189c74532762ca68c71580dd40a8cab054ea4ff22c8e46a6a75a5453093d9bc76aa8683b89a39ac895130a0625328b4bfb65b8e8f8d648673b0a260ec61bf5d81216fb55433b9bdd2617097d94b14b511cd025c4f78d13a0204f38c329a2eed8fde4ebf0206bc201bfb44b8acbd40579465c1f2760b726854362421c5e49689e0681544442cc8866ffd22b13c7ecf2d0d53fcf2e6cf9c5b602d4c23e839a3d5e057b47b2c9619162daadc9f7e834f2bda17ec2a6fcd1ce404ffa4be24c740a50f047f48783eb3ac2a46b8a8e726dbdf6b45f1cf9f21cd6e6ecf089115ff94f07ba832e637235587d1661562cd0cad4333c0b8632771fe7e3b1374e6ac9d0bb767bc44d09199e29c0796e3b45b48fac7f4304324deca62399c4e774e61b0ac5bd92b2d14e3bc036287cfe9a4bc70fff4e8701aee337d4b3621fab0df98d6859bf1011eb19b7ca265db5ff62657f807bfef38ba2c4450785e7fe881ae3d6772807205a8c48cfb217150001839ecc02c641f137166bae76c532f9d512876a162f9ffbd44dd6e3ae78adcb1e25b680a45687a0e7b690eeb3b51bd096029028ce18e470fa3158622a999e22c9c039739522e668e13a13d76993485c257c7592c3b68bfa24f6c2678463144abb5fb36dd26ec8bc2d0ee4d272616ed6d0467b39372b9e8b979f8868cb7ceb981e07e76eabae1e8fddddadf2f1ccfbd7aaac58e4b7082d1d23206aecd635f37749fe173d56027540af2ba0cb23237a340c14c9c2081138b21443b480c5a4f673e461f9283a291941a7e035e921659999b23e7b35ea84908c8f9e6f248ef8060ca9655f77fb4f2158b869d851695b99167878efbc4f32091c800fc8a39c3f6f2d0dc6e46b62a199508689fa6683e788b39c3ee1359099de272ec0a34b8ca8eb07dba99e4d6e350f06964603e42addd705b1f3b4b7206d391793477cf2927bb9a44dfc0d07d6a2fefa389fbe730540ac9f28b155899150c4d1da6c49fee7447c825747181f6acf2f81977ac62cbcc7319453b4f7531b8115c8bf32cb2027355cc66b68acdc23bd51fd616242d0657d28e6028f76f57d5b78317771c5b8bc57e37c7d468ab69e30daacaa0e7128bdcb627eaf8fc6c9d923c22975e5e42645732fc61f20e8fcbbe236633a306ce217d3810259c5321244f3d0077ddf2a8d859527e8b0e8bf8815d9830c5f85ea190e5c02d743c2efd9db43078ae1eb1b6905bcdf9ae9490051c43ffe20f5e6841ece8756f8dd0634b03e656ad5b3358949144b9c0c493112497735a44c17227e0c22213c373a6c87b078b93a9fee76bc8d04898675d5c58c98aea0b7095679d9a8b1c34a25c31f9b9952b0706b54858eb08824a5a9f22c996cea19ef909e6e4e57441a5a05a5de9fe43ef38dcdd4a5963657fedbddac32803391b052871bea1965934b87b9d4c356462a28e38226fde285d6f803c5fc4119884663ddc343139b57395c7929ab4332e13a48e03b2306a56149d768f9a22426387b1e1e2e0a9af225a202beb31df1cbc3363fb8de05f386e9265316bdaa5708984a28158ae2a88674ac2fd0b232d890842c6332d04f5e2ae48756fdd424be5584d59ea65803cde0bb146d48d872c192494919cb21f991d20380b13f2eccda16c221470dd966972638a8b5ee5d89afde86c950827e8164ae8e6fb23c6f2724a91e771563820deafea72e38e11544cb67c8311362cc0d8b996b12c7a4a54223c4c51414f2f031239a4932ed46d745be9b2182bf19db6dc1d16fa42fe652d02259ae8b22de8d5b0e183d75dc727404a3d1e00246d5ee69006d3792a7144012c2140f6258e4cfb768007351ccf4c5ef63c60cc1385afa10efd21eefe77f5fa34cc309009144702f1e3f32539fa78f17485f4c0f9e4556c2889d62c1c3e2a1d650d7e712212147611d779de9812ab4c379b4843eaf68101b4de1da1f4a160ec4fdb34799f66a2067d8abcfbec2e5dde04fbcda46f1178f88b1849520ebb1b96a7061d657a484c87f25aa86a9d78743b162fa2cfcf29c26b382da6c2dd8abf841341189541ee84a5f19065dfde3201ea126e14c42d08b35cd1ddd39992141aa702f60f72641156cabaf5be88458cf4f0f1ed93c288c26c95f4bd24ac735bbea2d564a6263402604672b6914b987fe09d3ca038d177d34cb37d89619f442c5e0bcf85d9f1a6ad04814fb0a0f04ec3f564c7e27aec4d112dcd6f87d7592088e70aed75998e880d91393826cd64d0a4bf332dc98cac2ad86f9ad8031a4bc6b7aade3490a2203b141509234de1ec51a4c5bfd5a11c7f32cd1cd675196e3f6c4ffb93eb3ad7800bb4ea29f7d30ca4a9ac919693a130e098080972d39a2815c4ac5a26105f3330cd0991e366e62143e39f3657cbc261e469513fd188199b0c7b367a7244f757614c3bfad1a5d2959de2cf1ac1534a283f90b1421a95a01d521ca79c60c4c9e30789af9261ad64073cd37ffa3127d7016b5b06beb8558497fb476e8afbfe7c00fce266cad19ed665e80b70cf07988c170ced62afae0520be408ba37934c17cc6dc1f8601bde01343f424cc2b8e67d1c8c64ab34644a0942785234a70cb231c5c889cfd9b4fd93e74d3fa7c6f2c5a4c948f8faba708b7c345d6f604f9eb6b9b7c6a31d44562f715659e1c5f262f4151d1d2f578018a9aba504e7cca287ae74a5b42f74be7d1c5cf62418b4866e682a6bd4ff35662eac8743cc1633c4b37684561d73cf9233105419c8242287a1a18585d2779b359c73cb0fcdc99f6ba61c52a9661d8a8043c52f8c01c7212216fa87f3c4ef444ee501469cf4d27b9db353160a473a38108b35b8355dc79346e958ad7812415d8fb6b9f7903e6f456b9e03821518ee35278b42c05a339d4739c08e7d2145a1ebdbf8d30a1536bb59fce852dd0c2f18d45bbc3d47bda5c8645dcd2664019eff72ab82ba5994181b3cb288123f64d2eeca00526d24d383d49a935317cccb2f1841df293af607cbc938c91aac24f9625d3c31ebb45704cda002e2fda08617ef917d480d78d57a90995788aa9aee9506a4df6a0c040970e28fb0c783998516db3495acdcb58c4003b1b634a163f7a580ab3d9b680c4bfe57e7da90a333e12b7b233a20c4922619602e1fd505fa347865e76d0345e3cc5c1a48ab15a5d2baa0c3250246e7f78f6b3c00f5e3cf07079fab89f38e566986ebeed05bbbcf5eea6cc169b288d44baa754b9aef2f12ee6b07dbe90a968d0f08ffa82fd1ea7ebc3affdf972b6e7c0163a1c9d6601733a1ab46ff07b18582f20baa5110aa472b74dea475c5e4a0b528d9952f8d2b95ac421633c10688e820e0b2008c47e334900452c6c61b0b6bdda82c6a1ea900082f2993ab999e4c5d3798e3204c19de8dd2a1a53f9d721df43f8bc8d736d48086a1a34e7ebf16dec63ba52ecabbbcd2025a3b8945b8a59a9584412607e206b034ffb4f5e337d3565e9ac14f1520963ae6ff504684165b29dae5993bafc24c3dadf40d951fa2d2d6d09b7b47d0756e91067c43b96049b682d493f2f8d4392fb2cde853afdd86226b0d0c9a32a89f50152415c9c024213f0f7453172716a4bf74f217eb960ab6ed0a25a4a534ebbad99699445eb7712212b5c282178780280ea4d1b0bc05973cfd6f3f1dc76636f432a3a8b9e779b0ea8239e2614ee04b7e47914945a72b12ea0c7caa7938d4d28ce88ac860330993d50d27e44e25a514f36783ff0509de6c036b3cc09b8469a87d536e19c608a01c801e16756ab05efeba432db1d8916c6b878a66e7e37d8c67977e4f7752ae7828054ce456da99c7bcc1c146d1da1a2e77dc7918fcf263e46dc65147f98cc2925e8bf519e4a4ccfa1ba8dd52f6e81bd027cc84c41d840b50b6b07a13728753f73161808890c7a10844e4f18481a1ac719c0ce232b492c8dfaffbf08cac17c42b3459435281d1b74a16826a6e89dc4b084da520fe29040640a0ea8339c54cef5c4d6fb42647b9918cfcafad0975bb79615ddf833986b1900e527f28844c748c128f10c125b8e5d3d38ec64c885623eb1370e8b1d0bceaf08998df02b518b2cce0a62d02d6d07d39cf488ca6a9b66ce6ea7828eb1ab7b01c50ea5a0aaa3459987f8e8a55ce3f70b4209c875d72b03780987f9212ee3163f045a247577b617c3d7992c31ba0907daa2992d4e4b06412adaa09cef8435b37a4da9b8ff8d6d4fcdcf1cab5245210592af7075c36bb1fc9c1d06df0d36388c9e6c8a92cdbc0786b9ce666bab298e6b0085943e39ad5d13fac9fe4546b898ba2bc454c7d28665ec0271b509d1b85145e6714b473df19b093c04cc6b64b12188280109627564206db1302583f04e22b87a9615069b17972f341b55fac9eac1d508e181501cf3d91c0e51bebe83d37f13785554d9b192414a26d288f73c2a1329d9dc392773a5c44778047c2edb90d38de3c2bcc96b17e4319ea443ad857c5767dd760c98c9ae8a6db65c7286402472998e1391c58f57600c2b947cfab0b16b0fb94055ab941eb7156ef74f884cd0f0e25ee20663d22026e1f46d4d889ac990bcedcc7d768112d2b1a5b625ec0d4b277c3be3d9bccb2d4bad8f3dafcd417e7b117aa44b97d173397ebc1b6d6007d3577c0a8d1b8fd61a7c3dbe0b1b8c344d3eb495a213e2249c254f641aca6a2ffecd1f85047f21cf03e19d7c24e9ac7a12fcb7d0d33c52e8e6bd06f24f527c7a240708aa478186c2ee9039dce3a479aca4e03464a82b177a803e8256d6ced724caf5cad266e2505c13a5644798db2e83ac8cd0035a4ed897261085499e0dc91ac74c9ccd37cd86e714dd426159d74b5f1cd295e58248d6c861e2fc22af92c65915557f112236b132ef6ecc19266f230826f0a99c39f39dee0914348c903464aa8ba53cda3510f7cfccf90a7400371b16073361af5d6ac652c924c312f41bf4f75823c696f7ea1179a9db3e8b85d9994486cecff6d3eb71ee5cd8ce87b50862696f66424ee16748ebcc84f2ea4b88aebdcf90bc5f14e45aaf8a08f0010862f88cdcff26846d0af9ddbe0e99e50b3fe64bb785a5cb36acea7561e60d3df596702a76431beb54115936a739e8f664a709269fe30f3a6484cbf99ed281a4abd4af65e0aa9dd7dcbbec3c1bd5dc9fd56cc90218c4fa64498a922de9d1023ad66ca34d660316ff9fe1890ceaa0e56bce95da156d3942c816713fe253406ee6ec95d64c907aff21b536c5a5bd4041b18017d8cf422bce7221857448f3adb8e7624d39109a82ba3b50173d2060eab1d3b7399058604739c5f87cc74fb22c2ae2ece96f951d7cc1f02649b2b97dbdcd741358cc66ed13f8b503a4b9744636d5a0245fbc0ebdc29eb35d28b64b414b1f26aa353463d52d09b35b39782569c24dcc84ee2a06bff08986afd4addccbfa897dadd5511c24fd10f959d4da2b3ed7cab7a17b0e3d21876a87868fc3b0101541d6d6c4ba0a1cfc546cf2ccdccc979b7019c334b69fd33c625658f8d61a69eeb5a759c371b43aaf26935313e534799780ee9c78a18f6280c5015da8637eb0fad51cb60363cd563f314a1ac391a9275418529efff52e9d51528d046cce4c5aca4349814a2cbf9c62bad44f1ed1953a82bf38420e7d339cd91682be55fcf9a8dd9beea17b62bfdbe0bd3290d8a56b18de3956c607420405dc426952b4be28f05ba49840910c8730ff7118931f39e7dd015270538fa2ded29790294e2da7304a18b1218e0255b7c9feb20745760cf81dc33c81a114f2bd455d800cdd4f2a1e23e83fcfeb88e213d5ad0fce48ea4e0be8e4d6ad33646679dcdf8628583fce0c6f6002f6b207edbabbb3b2d2ec21df7939074928eeb3b4ad18c0afc27b8a0dee17b6fa73f4649c3ee04b6d521fc4c6479c14ea2a195b2a7339432532040347084182852ce08a6ce20cffd88d2edcaaf245f49747e50ed577fbbab18909990f921b9e648153a7c8bdca3822a0e6c47d612d9b7fb368aabfd929a44c709456a108c2cf29e8636735ffb43cc112140f01d303666a4fbe08f6a9ff9d086e17046f966441cc0d4d0e438c1b97adf4ff0c1ef636acfe03ebaa5dd42b7a13fe786de981f4f41194c181ae21b74fbb7cfcedc3dac6ff3ad78c4386c9015628c434a97b0f3a09747589dab7dc9c2b779b67b4251ea4ed09abebad837d8fdce5e404eeff66eced7f67380bd7e3ef4ecd2aaec7b0c19930d7ae620037a162d6fb463c9af1ec638a94a2cad86ac09a38b441e5b0f841ed3629ce1c5fc11cb700503d9bf886753f8472c75da62d0a26e89ade612a228cf16bcf9e30a229efcd7c00e858340600ea50755598b3a09c8d272c0d883337dc3bf9fc66368572ba4a904383ee868385681c648bba3dbd437319e63441c370cd630da77b6062115c3087d008accf1d36921d33c6f921587b0a51738ac0a0402960c4630dadcacee36a51cb609c6c8e6e2eaaa39eead8baf398a29315066e7830fb0f72ec021d27c0f420983720183aba0e7e21464b78bc70afd1318cca840121bdaea61d4636d6d01781497c08769cd7b0c22ec77cc41708a4a83453e52365f924ff77c7a0c550207e64112b29ecd919abe0cec09145a5c4536709aa3bc046210f96b847b73f8b8bdcc183e46c48a60124c1e54173d6200d928cbf1e7ee1c6cdbb93cabdeb59d7144a08433b31d59efdd22eb6f8f9cfe6219cec6d0fde94f266ed616d3487e80a55865f2cade806dacfeb55f6a1e355edb5ebe1519d6b6f1129c56243209238a1c70eb591b90e21fbaa53f7c5873390395deb13088788f7f69196a03f16756d154f7581b1c1a52a5895d35c0bda229b640b323799991767cb4a1b1d65eda0ad3939fa45adf05f38d0e4203ed16a5594bf7ae56960f602f3830d8a0f3ce87031db113becbfdb49c4f5386d552965230e1a55c4b135ea6f012f041d2a603f931abacb422ec804a34d3e67a395403de013104da42eb3eb997080e9f99cd9c8f62d225cf42b05eb308f927cf881320d06eddc90333a37576bb76fb98e4c376bdf506ad0796d697cd444f44c3c56228542842695c5089e561a2d35e8c8961aeed104b17ef0cd9210121ad5a770a9e15170a6ae3512cbf69de615ac7028a80bd6b0d39eb6958edacefb53c23d2bf30bf8bd75eb0ceb57683a6b9eaca934c2b4798ec50db43d3a2d7516d08f0a3833d792934d211485cd2df30537ecee5d033e0bcef495722b42d4bafc26b8485c4ee6fd0e8ffc826f776197e0f5db510f5fe02e00987baaa58302b8880266ab211b0811200a4adcd59811ecdbca6199e726e564b3e4c890e939dbcb10029e2cccb7091a42eeb23571c2bed09faaac575ba6aac1c87bd750ddbb8850c3508ed7e710c0d176ce0fe3680abd3c8b57d80dd93949d80b75ad5e6873645a7b40c3298c63afdd888ac872c822ec154a6050da01636832e52f7ac78d39046ac888cd8913e49081914932498350e17b0012d894e56053405dbea0c4c72b4248ed4b1ec5b39d09a26c72a9b487b209b752fe66d957a30b00fe30b7f2317d081f920ffd43f8ca45e563f4517c201ff00ff0818b980fe8c3f8887cec1f5054fe381fa20fe1538ae41fc547fc2d45a50ff0418af00f28421c16c955265bf706f0ff0d2c31f70cf8ed29c94f63b19ba561aa582289fe261058ee010c70f6a7343919a1005bdaf82421830d154c617c16b9e1832efc30e31d797787ca7737660248e6bcfa889cac6659cf316e79eb639f85586921e1bb66bc8c0206ccf2284c2ee7c76dd75c10b36d846f50984b3ce5302d7a9c9436c10d7326adb0f3c470159597180aa4e553e0430f54ab9a76a9b752438302c5f01e1b26f814889e2eda800d2db3e3fc20a4b6c26694e168088aa616f01a2798ea21d8a55f2f8a2e8743d67684a0732f92a7971e03dd713fce566f060ddbc551b85810b20698fe400d94a45421a9857df735792902c1ee860ec5026e840e8f25dc30dd890db9071d125b770fba3856714b7421b6e2cee9436cd94de8a058e086d0e9319c591a35c9f0f019a9b4b03762774af9df50b2d098ec37dc9beef8d10c8d6f853bd5b27ee64acb4d67215bf37c8e0907de56f374f392ee2dafbd2e0e39652139b6239ae1edcc1b08a3c76bbf8fd989bd639580da10158d7c1cfaee847d882ef3316e12ec2e3deb2ddff0892ccca5fb0afb13f92b06205430fdb6f8c882851a0a1e744fe3e469ced565514ebcd6188d2ae384b7cd9e4d4da317449826f6391239c32c21549c3b7e9d7a41cd5cc3036068c9c51e04713bee0d3813b06c3cd67099233684a3ef6ec885500db6042575f9a5727d42d56320b27e611eeef04b58adaa28a6a081486e34f48e1a9639ac1ad71980e8ddb285575258f801e16ec7b8cdc75c2a0fdf594e4eb3a5dceb9f15e1a09597febee5b7aae504212bb7ea4c2e7c0a180a30884a67c2b17c033af72cc8a33b69ca7991a60b0b3dc49b5b8b7d02f04d5d079450bfda52fc3c2be446a532db7c6ba428491c764857f094cf95a4553e96f945926fd0eb723dae6c8b0ef3173055bb61a500c748f0c93b316617aefcf702b8809bacfec86b79f09bb997bebcbb28fab4299ea94e02193dae915575f87c5a3302d6896656e3548da5c4f6d8098ff4e76d57dd14421e11ec384d7e36f8fdcbec1354f72c084659830c2c50d15c14f473620c99b9b8865cd20f1550521e04d62b2c29d022b719df4d2fd133b7641fc8d725304fcd172a14afacd3f3ea71f82aa70d30c7e8bbcfcb52913136149903e64c3d369a46b44b0cf9c23d57a88885124951157c70c686c02ac50b485210deab2affb3d884681f8a340b712cfb27b52f2bb5f43fc06ff9417a0baf0d3f6fe67d99dc255535407cf087ccc97b81bc17fce03d689c2079aed43a06e2b2f21136b0a978308e9dbebbef8ebd79a96d0aca68ed6aba5142a70fd65b0c49e6420469bce5957ea6e5e1a753eddfaa67b7eeac4694875570926661187bb5fec4c2894eaac96a0d00d29be73d0f179258583461d3e2d51005ccd2e83a68a8e715af34d13230b8a4cd77ab05892a0773520395c9e3e5524a365a79c8ee4d7ebcab434a330b15d70131957dc9b94d5ca026042f07a9e670ddda3c92354d66f11214375d31fa2de9bc3ccd02870c88dc37598270d15f90137b2afac1c8441151ea8fb435cc47a0b979708c9c1525d50fad956a5e180cb1c00ac6887b89e12356159c345b94e977eecfc45f277135a36eebe58596304187bbb181362c02590b60ce02a0075ddec491795dc6e789529fd4ff50b7b64cacc8f1c4f2d7b78e418f65a024e5e504fdbb36fd26b4d6fad585689d0f421e30b630a0b2f83f1b27d444096c2204aeea05a112481020b3366d90da7cb777a7fe511378c23f88451bfcf26aabf4b6dc1ccab6b5747747ed46922b5b053b2c1304c14321340a5f911871657777f7d2e09b355701bb08cc2c9d8fffbf0327183a12a50faf932b1b22b364054cea0a6be815dbbba56348055a53bd5e78b754aa212e9f0060a78ad6aae87490c347cbb9638e9c3772a09820ff6b860ad041490e8ebc6133c3160b30c0942d607186336f1091e300427c308315a104b06c00c48c192000c1023850821042063f8e0eb9008fd7046488220b2e299cc0822132ac0451218b46c48e0c15ce941d5a6c8d0c3b17747295b8c44d0c7614f1a6cc073e688921093451dc6840a58118760392d4a80089126220a1cb165d08493081211308c290915502070c6e34a0c51b6d80606110420a0f49771c6902c30a5658c132810e716008cac10e27d244392d20922407bcd8c46a5980195708b921841fb02c20879d447478a092c702badce1c8144282020ba82011acc1252b28200d223940b14004146648e345a5301c40f56916d0831a33968b561a2c0028818611c4f890c6870d275dcd16aea540241c0da049b365a90a219e28a1016fa82cbd20d042c2156cded21443229801166d5862c0022b74948993a394070cd395820290949a2062872fb2705428216121f4c111256428410bbcd1a0878d4cd07852748254c4893268de0829d1c62332b841438496604d1ab00334a79da31136b9c185c6833bcef440c21a326728012484287c8861006720b006212ea4c9679ce10109910bbc3122e1ccd1970cc6b0a9e2c319202b3270a1c5933e628dec7462880472481203e30e4f8cd0485123464315ef40035648b114a4d883902e6d1c880d808b203364109802abc0035e40363ed9302d50a8a1110924e1042c96871d60606926800dc55e1024ce1b09600e4072c11162aa6040d6c79843b458f2022583a210313680038647a65a220d28afa31a326a88c383853375643a463f64309c1c78d591c2021cd1e469f1428215070f4554c2c34b4380012888e2ecf11ac19317134f48f2e5854b3c61830014fc10c80b6d4039481a3f0e79010831cce8648815925e18d30012de9004615e38c0151cacd104f1714192b598904530e22ae3830e06d04616472e1c801cb9b266072257970ac0e011c3bdc345411b68d0f0a6cc0c2d386b8ea86345003a5a6e62c02f04fd5069a5d152c2887243112d6c811008496bceb47a0c29e20268c420028b0250348841934c088b8a358a20b1490d33b05e48c10b219c2029c12a218b0ce208af20585134f0820d356c3cb092001840cc12ec70add61c11e08c061c92c8aa63a1451c56b838b2821a841162223b80aa139d030881091955058764e48437327943d50021cc58c2c22101550b60b4d006100fd8a042401b325007a8cc244a74e650408b8390f4001706e96486285924ed0066860793ce48fa8226894a3c08e3920cc0c11a0ca822122d2e2ce2488ecde187065cf8021239429d428a0b33200294658528990b453850a0479aa4205c9020d5859537611e481572d4038acd953e5259001102411d4292a4608a4ce0871f9a4cea04320ad9620ba336a906d6404ac3450a5ea0f840ca619334f8208382c2004e684fae644125bd1cb513210850d3112922c851841fa89c1df41023054d04487404200349ac087204e988171c40e6110c7840ca9500d1e60029ec812482193120c27385013dce264834e24213b6b3a109b9c0196e32e93fb8f0099c530d4174313bd0218603ec78a06fa0471f9804e10095bf80011e404606a5fc6450f00378992cf237a080434f25703cf2467fe861749449f0137011fb832808227e481a9714421fa0bccd112b74340a09c397b0045edc174afc4a258251c2c61bbc478479c907a827362085841963e5044ff6145f28616102096e57104424b5c9618d2d3483178c4814776c1e78456d64112a341e967c39410284836662830c3e41a4eda11f0c4494c0a161a15f0b38a4c1a3e9903779a3c7255fc807f21b4244220451a68f3cc49b9986093128e532190fa63936a92477c0c61e1cb43869c3cc24f30c0e2b20a163268d0dc40879204913667430dac2a40302bc30e3858a303d3ce1a5123318f02106cf3186054e8a08424812004e929cbe28002290087d8180930c3e4831410b8ebc4e595c362cc141838553043f4c539723da2880902c6008a0889819148045942c94caf8a14301301e302398a1401f0a3801ca95a02d3068a10000b059453124ffb4b0070d626c1815c45a60d3b718a1852edc68c1052a85643102ceaa05e9c99628837411d3429bc395870ad952193908a9a0911f2f2c943162862c670c5100863219b231c28e225726041ce406875cb18585383b65161103880a0b6bac49e18b1b8920c1820f2310955142033eb01046cd9a224828410a1636901203d1184e6c20f3c804340f0b233841668c015850610892818c0d68b264e2308064b6f460852514bce142a600513ce286046c4c58c19045d2486541011d2b7431448200ce04c1c50a4a92032a307949b2025199461c19c183355608c0263e4a5986e6983fde4ce00d3612843152e86188a5e18333c6b4ca4855d2ac4460cccd1a08d166d218285bc0c8620b9088c1a3ca0796b0e1850f6294e844009034b1482162b81c590705b0000d621c1496901141500fa3c91a34562043884a9808a4e05078a3084fc20c21a58327f2e899230c0b2750a1e306a39f301cd0e10995f94700c048e29a838710810960ce50440b3d943290030c03bc4012889909a20093000a5042802fb02c02e60222325043c60bd95122814cc0caa49232470e28e2828322da88e128062b5d44a1c313a62314503d8471b57070f46306005a80c395c11741e2c4f41f5fec2f5660d2c2225c94e1f2251ba100161013c3035faa74e1431793642ebe48e9410a08786014e4458f2818f932fec0c0cb13490200c0072bc0e125b5c16b654617d78bb4008807982481c34b238003738c5943958038d020448b35669a04148104056124086f126046a9023e6d80592500041672c4e001b3802e960c60094ca05cd15dd418640044d0262ce8a28613481210c926a72e6090e08002082061862e1ae0310cc901024a7071240a08e0c1c7272c7011c3023aacf05182005c6a68d3c7230190c0878b162d3d44505446185c08204514b13d8a18c2c8900b6ab84410222b8cb6d024e58311f70123342633fa10040e2a46567a78a3059c27b811045bc0b00825f1c4163fd2f840026fd250b0258a4ece08c0dd04852d2cedc6214160f2da62b9ec30624226966cd979a574e879082d776010a3c2b5c6022d49c051000694b8198096cd081c386c5072450b098140c18242c64a854c62d822491366c4a8e006af4206ce96085410a2cb33a40b152c54204301232e50c0c9900a4115d0610709e2b0238548c050a904615549c10c335090c088185c0a39e43cce08d2891a2924c08200444006be440a1628400629720805518408228f0d146fb2222f7040c01760b029530443142a1e398a6f1461491a2312a2324e14f940f2c60a77c4a0254b200ee823ce046f96b2546189921b85b0c9595e2d68522ba040912c54f60792b451868a2c0cd8a043256b52c000853cecd003040240e1050a4e14800c2231290b5040fd6472c712d02128442bf905c7161bb0788207138dfc01c30e9637551cb2019638d66021828c30c2e0611500cbe907487690e22608cb075556b86c7c680457f20ad124113f34c06a204011120cf05303e6019017e07882830e3ee2a29231e0cec4403d802082073a435c69448968099026c0b812c6083a7054208538576888e48e285bf868c015152a80d387219074b9328036182885e1c30944151803c7cc10541a91166bac908cde34a233524c0e7fb06944436d2cd5426868440f2459d2816ccd4a1f68b8918110ad5989c2ad41e484d6acac2a28228a9ae5cc22ad352b3a6c4e4075d4f148f881c3fec163c884030d98b8d0c60e419cb0423b21a89910c9cf4f00d6b4ec656aa5740a694d8790d67406112427ce248c189233c80f0457b41f08d440000306ed0782a3d69a4a15630109bd6b09068183a00308328000484804113c78c092071e69ad3520d62aa66a6d20a067a562fb5f595ead5a4a8f426abd5eb1ec592dd5079d951a818410805e2d20a36c04046b217900f4b0142bd581b287b5963ee9032ccfb95899119c732e56c60320550b89955f663688a10511cc089901daef826e01b1f22bbbb070c13d4019e40396074baf7c7a65d456bd27511a00c01f0058d35a53a1fd00008696bd4c5202694baaa5ac7265a92b14684d6702ade900f2472b137bf5180ba66330c618e0a43520111878a4fd3040470bc84c9372c80f03468ddbe7afcf9e010f5afb61a0a7b59f289834383f51fe58c558ff13858ee6caab9f2868fc4499a23534cffa89224414185a83a558b11f9e457ea2f006f413250b6ce75746ed9f281e9889f2c0eb911ec64afdf06cf2c33389193340acfcaa564b2fe5d72b23b1726b3a766c11e2870705854d7b91f9810227bb485882d5a14347e645a360d905a4520d0909fd40f139c06be7084ab542039e2f7e74dc60f393a3a4486b01c69f364427ccf2d3a4fc9c945cebe1932db297e9c45f29d5770af62b9f4f7668adb9c0079446602472b0100277e96039630193e831002a66e6e84390344c5051c49213d428c20944a600b1c5ab814520d04404b290e20624336c796002903c80922a5e322102a1f24ac2874b36901a22b8e2b8014fa245e01d2b5808926459e10a0311c8d4e07941042fdc584241c5804a8e1d4b44a08a35624c60a9b1e1132d66c480414f2204cfbec2a211811254946103810b42550c705ae2069ac91a7b18c08f0c478c04342182031102e092a0c731009140eed89901c89236ce5c1904112a5c3e01e28f0fe620818329161401459aa10ee810c4cb8e16a6349c032fd42124d4091a9d68e9e4b5067bb5f450177a4648a8b52aa82c77b1b2594bd950b64262a5366b29cb4b59f59c85a6c555add63e9d5631d6ab4e4b2fd809c6180ae67aaec91731c68b848432e1e3798b880b9f4ca6340e30c10313333051a235202a53808084cc98018265d905a4e3864e1b6c5c9249537349964bda6a8fd9d1d9614087812896603264c915968c692615501eb2248be94a4c1cc6582555f8549200934af568b20c24c22f01659f0df1ff0c054b89416d58b642c91d4730552ca304c23030d6a7366be885792f93d8f065122049f2682658f64848b14c84cf32ca4812265a9304829694e5d5e9934f92b20c3b9d1e852629cbab7fb5760bee41e2c2ea6145ad2255abd5258b1575593dac284bcaf291aad5eaf22a5ef43bf7556bcdc217cb90b20a4bde596acb3f160b78e163811152ae7c822669722320b554663256ec742629f51a61e9935ad341a3359d335ad331a30c328fa0c92f688acfe44660a169bd342acba8473c0002426539cb23177c211212823156e5f47a57d26ea994f2aaca14a5bcaa02636c8a525ea9f2512363b42cab323018d9a2b55409664eaf96192bd98b0c9d315a6b75569103152c4246098b64f9d7c352a755ebd549d87f6691115afb7f61617d520bd6b29749955559919d6632998060ad57652a551652fd99579d845a6b89ac90889844885a33032484f24924a7c15e2d5406d46ac1843e7bfd997f652f132acba82e74b8d8a235aefad40ad94aabb38ab6644bb94b6b2da3ec5768c1664bb9cb7f3f654bd905670443a6306407363e15a0a11008b456a54a1521a14fbd6027577642ca56f904637d9605d66abd06d9d2c2a80063ac4a9529fbc39c4ecf5b1bcdb34e192ffad7676919a954312c199639052e7052caaba5bc9f9f608cd11753b55afa94a926b005201300440c357fa801885d42478924fcc0c48f2c3a48b49661f94a1297d60700f8f0c1880689196e0608014aec01cb5ea6936bf542e9f1a6b5e6831e2e3db23c9210422708207e684dc7871ebeca07483cf5d2431e4cd91fe6b45f589d5e585501128117c162ad936b7572ad6227186348d90a8f26b8e4a4604ada59b75e2da39c3b0ad1b9638ad6a2dcc19b97e67ceca8c404fb0cb7a6a3a6351d1e5a6b509a8e8f1d535a75a851c79b038739507254e223871b9f38e0e8e4d09a0e0e12e8dcd09a8e0d35f8bcc1c3e74d9be6f3068be6f3668a2843f9b3e457eed25a0e1dad61d7ea9585a8c8b57a6581b5545f5499e7f7d29ace0c4b2f180bf3fc5eb6c05a2d2f5f88bc58808a0802e1c384281841248e2b0099c2c200a2cc20258c067cc2b86308a033d2e8b02811e3821c0e21830301e4a045090d8480001ad10418608c30c904474c60071f585c91218f2335540689f2069bd6722cf0464ff632e9541a1f36ccf8ac31c51a1230b0841a56349d25a5d674d09cb152a54a1509dd9b02231858c66a110189606353248dc15cb18cb7a6f3e29fc54e2d239d17745cadd65a159f0714359f28abe613a54cf389d2a5f94489cd270a05cd274a04cd87e793e6c3f3c803517c4c58a2f998a0a6f99870a6f998d09b8f095b9a8f0927341f130ed07c4c90d27caa4c52e590e653058fe653058de653c54df3a9c2a6f954e1a1f95451ea69ad07020b0a20418f9b0d9a8f9b9fe6e3064af3691d349f1680d6f30927ade79338ade793445acf2782b49e4ffc683d9fd0d15a73e0a7c7811e7e9a4f0f3bcd474d24cd478d21cd478d1fcd47cd1dcd470d1ccd470d18cd47cd13cd47cd0fcd470d0ccd474d52f35153a6f9a8d12200293f0280619a0f4ca1f9c0129a0f74cd0752d07ce003cde769d27c9e22cde7e5d17c9e1b0228c0cf004890d27c48d0693e264b9a8f6990e663ca234a012e6940ebb90487d673c999d673096f3d97b0d07a2e4940ebb9844aebb90484d673c905ade71201b49e389cb49e3892b49e388cb49e3881b49e3879b49e3871b49e386cb49e3863b49e385cb49e3855b49e3848b49e386a5a4f9c1a5a4f1c58eb8983d47ae2b0d07ae27c693d71b0fc34108008a434c04003ad09000010480922a3f90461d17c828e683e414bcd27e8d47c82bab4d61e88a055e0268ad6e38688d6e326d67adcb0d07adc5c693d6e4c683d6e62eb71f341eb714380d6e3a681d6e3a6b59e368db49e3680b49e3673b49e366ab49e3662b49e3658b49e366b5a4f1b205a4f1b1e5a4f9b175a4f9b53eb6923a6f5b4d1d27ada0cb5d62a683c11b4067c1c80200013487160e70793199f32c040359f32ae9421a501099141470312222309202133404264780024344624ad01098da14603121ac387d68084c63802121a6382d680e00009f9887185183020a14c8c29404261e0d15a0b630d90106f3e61383030011202a30830cab4d68084c0f0a03520a12fdc685f94693a3f0e88c4013a34d312ccb5ca5e0ffb558b25c4b3153274544c74d0019003a2a20110ecb3de5b3c1d74d00110952a409cf53cb54139a341e1028a0e5088a05881320445ba89e4d5caaed86310373bb4d64070e304d0068c01b43183471676b4918008054b896969b891a34317b0d65a172e63a169b154e0024e6bb0d44ea95c4a988b295a6bbc281b4ae5d7111765baa8fecc6b71b58e3295aaade1028a8e065b90b185520312c292e534b14508ad69510628cbb24b878b163dcd94f964f15980f1c9624a6b2d4bca476db268008b488084bec0c28dd6da15ad692005165634c8409c95ea57a871c514adb51c4592d2a4b297c40a4ebaceebf0d674f6fe5566e954694d4767586b3a665a6b7a64fffda4ca2b5646f3675248ade928a085322dd8a74965cd90d7ebb0a052e5ad43c68d0cb6c2eb533944ade98c694d474c181d306d34358ebe78494097a6c3c5a865aefc3aca965e855651d6c2926562f8674baf024ce98d32d69ff191c2cca3b8141b9010850fadc5389a96aa030969e1a9ec6281c929d5d04eb95a3be56a1dc1fecbf3d696ec1f0becbf7cd26ec15e2d55ce5e7f26c502f3caaf225a7abd5aaf1786ed7729e157cc8a97e8f3041a4f78d1565bc94118d1642fbc48e9392bb7d678ecf0712290064b0d39e14af271020a0371b4d6b4349f26aed0a94245674ad343a7841c2d8474aed0e964c4a5e88b171ce6845118f2c2e5e8cbe924d49658a3c69a243255feacb5d693b3c6b6d64e2730e8c8f9311bfccbb5a4a3304427004cb8d6b6341426a1a402852ce182004bf359628216a6f92841466b9f7ac1584241d04025bfb28ba70805244246f3497c912d65af4ff5146cc7812424683a20b4d6a47cd060ac5ff5b09a0f126390b8c094c40508d66221d1d35a52cbe7083a5a3b828cd69a8f119cb4c64af16cc508188c40edf0476b4042d923e52e4659e81921a1ec65323d931b618422948a38027a576b6740acd497fd674e49f9d124e51703537aa3d4952b5911ebb5642ad5d01555d642f4fa2ed90ff1fc59f60b5b5e585d8165590b9787114c4bf525cb3ecba82e7f2605db995504cb48ff42421aea822613e35abdb2bcca957a1db58e8ab2182cc3b2a55781c3b29496ec1fcb95229e3f4b86e52ba82c67e902cbb216d87fe1a92bdcb57a656935c7121d0f701073b455965a05a1ca905e198520825a6bb0962a0b014147f63ac15aaa8654e6e4f343252d7b99741080e68d7e486a5846809103bdde95652b2618973ec9cc071f88e0416f8500245599672056563d4aa5ca8fa6a5a5a594b7a45aae9611abe8f5fcc5a57381c5b87c316a19f1cf542a353c3cb469adb5d3c994a95459c7b225978ab75619abc53a5282b59c1db2f8ec20828f0e63f8e860852b417ac6822efc1c379846dab3b3773faab38c0f9e90d30673f8a4bb344ee8e0eeb5d32b395de018dde66fdaa76dbff2512e707edebff3b9a794d55997515be069377ff5657fbeef479da305e6d2bdbd67bcd07dfc97e97bc1b22cb08c6f470727b7f5e99e292cc3025fbedff55c2dec99d20b5b2d7d058ed6d5def7fea8532af7acc030e6a96577d6521b6994591538d3a86ba4b5571829bc3fa9c0f3e5fdb6cc94ca9975a5720afc30671a25cd595239fb8c52e077ad7552736975aed5451805bebcd7bee5a4ba57cdab9c100adc799cd1d27ba18b8fc68aaaefbd9ac306c3defb9632dbc7fb8e1c664f60ae2b87cee91e6dcd7ddae8048e7b4a0d9fdc5bcf5c5f874d606bf39c1ccea927a46ed2d389c235785e4b238455f64eaf9d19551f6402473db7e3ce4d385f5af72e576c092c63ee90c6eddecdd14189aa4fe951a7d35302d307798eee59d9bfd6b851f53d4c9593c0365ee8ece694cbc7f9e54860feefbebff255fbb48654e61c81659e3a5e9a39bf3243fee0508e115842ed369dd67d8cb7c7ec2a02479ee78db0f2c7ab949008acb9d3aff97d3fb996bca3eacb5a5cbef9826534a70178d62e697753febd1f5fa2ea43f3ac68ca1902cb5bad9eefc1cca17e3785c07dca0939ccb6421b618d627282c0f45dcdf6c51bef73ae5b303940e058efc7c86d8eafd2396dce0f38f2ab6ba5b4da37bbbd4f4c8e0f18ce9ce386dfbb9cdba9f20bf660bbac5bffacf7ce7c2daa3e0b5fec045b759ba306eb38f9dd5ce6e7ea9e5d5bf8e2298707cd298c5056d7fb965bd2d8e9b35776c9b78ab1e2969c1db0d57ad20a339c3adbfa14c62c393ae0bf8fcbda2f9cb53a0d37aabe137fd88967d77daf875d13721880ffc20729a43643dd3974acd66ab54a5d38714e0e58e72aefbd373b0b39bc1996a5b4dc1c1cf03fea669f7ad2d8eb9c17f6d6e6dcf05d53f8dceef8eafc47d5375fcf62151de5d880759693536963a5bdc66d5d4e0db8f22ca9bb3ddffe7894f255aed891cba101bf5be19d91f79839775da3eaa35466c050dbc7f7d37d76feb15a547df3cb7b16b6ea5106cc279f4fabb37a4f0abb1be2b98bc994bdde52233227a418b0ae53bffadeeb4ef3a86d7c14c280ede5f5f6bfee5f86cec13b8dc89cc62ce05508fb737de3adee4533695ed3dc79af6ecf096146d5178d96f09e4f47fe4ebe9bb3ed7f9f127679bf964fcf17dfcdb673560a0d2bd662a1c151d60e63875a660a67afae552aea33f8ebef4eb9e4bac3dcb96c7556d14eb1721793a9d559a953352273ea31fc974e6ba1753c72fe3e3ad8cb9e469d2dad9bcf48b37d298dc89cf40bdbfb92f23ce3eb1bc2fcf151f8027ed3e6bd779fdccdbb3944d5539682efbab09633dec7b783fcddcf8aaacf154b6ab554949ff20b693ef86a0bbbc9adec1556ea789559a2ea8329fde944330a66f595515b7e61e14ceb9df03eb4967e9e329659e1173fe6de2fddcfe527abc9a452fd5e4185f9752fc6976eef7bdd8ca8fa78eaf4ae25580d3a422168893564322db172342273c24978567bb5def74d98737f1555df84ad7a072e6c9b75a63bc37bbfbf84d1c552b8c39867d437c2db697d5b891721b1b21793c964ca5cadd3ab46644e1c85f93b7ebbcdbcf23ca583fbf9a9053bd55702127e1c526ba97575f27e9d46d5c759b1d6ebb42457e8584e0bf5c3ee667d9c3ea58f27bd56e75ee78b35576d27c7113eed667696cfa78eba5aa7fb6259ea8534b56c5c27ff6b6bddee659bf9ce4a8f45e3ca79bc993ba8a7dbae3b547d53848cf57ed76abde97bfd6d7fa8faa0bd66707496c20aa39b1bdac837aa3e58f6f3159d70e6955719b7ed97f37e52c556ee39a9042352ca8aa5531480ab7b73ef096d967c4a7851f565f621b15249b7051cad8efbced8efd4b95b8baa8ff52acefa93847396c19ceecbed76d73de5b64a547deea169b94eaad8ea525b5731961516f09e55d61ceb769ddf581d0a646295d6c64729add639eb20b59fbbebf36a999f955cc7d7c38a884c26fe29576b9b4c99098b9720e8de0be6ca8962053cfbedb13beb6ab5b2fe66b5ee6f161716166a33574b680cd65c4f2ee9d4fcd5d2f9006270d5d9c9b73377ce3974b2bf974a9162faf984ad7a7485894f77b86f7f5be793f21581898ebadfd2de7e2dec10555f54e1c8d518e1ccf146ba6ded1bbe14bee01aa174d055da7bcc9f23e7adfbac179c6d9d564f3afbbd7be78daa8fb7841280ddd5f176fba08cb33b4a396fb9db05e70e679473d2fab0eeefee72c11ce668738f7b3ff9e0d6a8fa54ae55eac4ff955199ad46f8d528a17393e7d9fb3b0d61095bb09c705bdeedccda49fd322aab540b7eb723cd8e77bdf57ed2b2fecc9f5aabd6cbf5a0900a38f6ca9fed3647d71dcd16559fabf5e2cfa580f5cf1ce1bd503e8f7c3a546dc1e28345b843fbf8ae96c63939bdf3b453b00ccbe07b5930ed17cafa7ede2a399410559fb582028ed66679f9b34ebee552a2aac914e70be6128325057cdd8537ca19639450c2ebaa95d942e8ee9e56731e7b908331956b959aab182ba2b982f7c7c9bf5aa837a5f34293c9ce4cd36944e6048608736a2fa77b72ae2b8d5ca2ea7b8fda99696944e6e4ace007798d1aced7b393dafeab45f4ca61b415f9a81199531dc2536b09f7f30937cd7abe13f084f17539dfac74dfe9e4a446644e0a3001c7e7b6a3943e5ea7953cf6de3a5d2d55708cfd59cbaf8c95e70925154ce9bbbaf78ddad19fa7f8287dfbcfc4a22978c6ece08dd4d5fee2db8caaefb45f19c6cd5acae49512b09bb3df08a79db75bad2daabec96aa9884ca667b554db643299a81199130b42f84e9d61d65bdbcf52de8daaef041f85ad7aa417431e39fc87d7d249e5b6a8fadc7bde62c9f9de905db55a27157f9d4e00a898774df3e350cafa6add12551fec654fa038d67db5745dd3d74fe745d577aa7662396577b9d6c721d4d9be2ab1edfcf6c99f963cbe6d1daa3e34ad17d2e9c1f8e2cd4f5fce9c66b97fa3ea7bc132c8e36f097b7c913e2bffb61e969073bafb9b993e8d37a2ea3b71567eb0aee07086d5c17861dd90fed30f551f2a8bb94eaf56a7434144414768b297fbea342273d24282aefce6ca25efdbdda827aa3ef71e967a8911038baddc3422737ac184bf3a69fb73386d8ecfeea0231482ecfe3026d3fe332613955d46807957789f7b7aafb4b5a2eaab318bd0fbcd91eafab8a37a5a8aaa2fe80885a04f93ca6241475a824eac14852f982b4c08eed6f9eabd9746eadc8b76d2675a9d51a94cb8fe83dc7649657f3e2747d5f7687661ab1effd5da2a808065ef94bafa747f9659df0fb07557f6ce79b5d6ce7e27aa3ed8aac7a02314829062faaf984cb0553799fed5da590e723016741484c54b50d09196a0139446644e287870ca62afd3a9020428e595013a78a7960aa9a5a28003a0a00d0e70a21382b0413c390d1000e481013cc840040c1070010816b80a4e1f50f024c56002a5161a580605a013021100be13fca4acd22724560a956514d000e0eb00127010015cb5f6e9f5675afb5fa7d34ba213baf667f567e9743a800f027a320a04005bad57050148da59ab542d1020e0f95f153c908103eff4481434f032007820056ec0c02bbf6a5b10e5029e550650deab05cb17ec6ca0f34eb6c36218e4bcd3a34ea79da5562798d25fd00e7004d0256be4fc2ab3a0005d72c9030eb4382ac06668278e283400324006185c604105144c50000922f8f1e91140002078a001004861200a0f941d9df689279d70b2898e263a996062019f47d4683e8ffcd166070c075a1c823c32d4a220b2e244021798d25a8e052690460e1a3f2b0958c0a38109444180aa8ccafea8ecebf74b07146498618724588f942b3f2e44c200162e1401803b7e52709e70a2b5353a6469396481bd526d8b95d7b35829a01220100740ac57b15e357f505ace5089530917adcd6b4d09218208d3a559e042fb4102b2838e3ae8686d678e9ca2d69a941d374eabadd4da8e1c6f5adb81a3f1d48e1bad4bd263696de78d9d08b8017bb5da60a3b556aa1faec60f1740db59438dd65a8e10db0c04dcb4b6f38086c482e52c29c34eaa9ca7c83bfce4097e5a60c326883270ca1c11a521466b3b689cb143842aeb96ca0cd82bbb5adb29434a8665deda0e19632cbd0a685adb11238ca54f4ab5b60386e3aded7cb16ab16ed8516aedf54929566b0b2cc502b382172b54b1da4aa82cffab45c44ab5362c25445bc5b098d66eed9617ce7a58f6625adb718017ad25bd5a5896acb4b6b300374b56be1cb5d6da4e9bd6da4e17adb59cb6c3456b3c75daa211adf698d6768cd8d1228b06812c5adbc1e28a1d2b1850453c232444c514aded4861471c6e9411268c9f3023b45f65569819c2c05e315517ae4aa18896542c2e4baf82834b2fa9d273168c503436af566ae709277ec07469a2b5d6dace1a265adb594289d67692d84122fbc732149376867d31e2553ab78cf8b3c0746919a9f25f69197155ac2526bb56adfdabac52c5b0b886602da32ff88bd06a2bb956605cd9a5845bada3ec1f0b122b65f4ab5456b55e2c30b057cb9526f525e3aa569657e9dc326a6da708952a86e50563816181696d87881816d080216e683b4204c19f3f0b8c4a153362e52d5d60597e2db0a11796ecf57af55b7ea75a61965eb12cffeb0896a558a9151f7a554eed148fa5a0ca5248af4595778a85da7f8461291698bcca594c8525d610e4ac940a5c00e162c76a2bfd18c91fa3023417b610b2658fb6e3436b704c6b3b3da879600b6c304c258cb4d5568a61323ba68ea163e61839268e8163de987f7d162d4868f121832a8ca1c216baa5b202237d5607ae4a89696d87017fa5b59d1c70e0cf45a5ba81bf4a6543e7a2520dedd4b043032bd65bdb99a1b526654786c6534531b4b603c3ab5a46af8a6784847e8a20f92982b3b30018d3d0b764959a5cca2f34671a7f56aa3f6781c9603c232404cf5469755651d6eaaca229acd7f26a5561bd965f6523a5bce5579995619957e1453cf57acd8b84845eef8a65ab16ebf9aac57ab55e2f9c651957a5c45499b23f4c0a8915c3c28a75be59f459097be52e4bbc6505f6ca2e5eb4c45b56aa5481d1c217b3b1a54f9234c65330c67eb0c4768ebe3c2cf542c3f3bf5adbf19280d676baec70913406cf9cf01c388d1fbcc5074042bdd5ffe501166a992bb3b1fd61b2946b284bb932124be55aa55cd915011ca169119db29c417e8878f82172a04dc99eb7583f567640a1ca8f150d86aca0a18605c070029cd65a8665584e3862bd8b4bcbe8c7844aaefc9800b3b12aa81f2aaa1d9cc3cf94474e4a3f53d8b46f4d712490f0534224ad297196d01442115c3c5adbb9d2da0e516b3b56865adb3961c784d676aab4b64365cad04f3da3fdd434eda75e2c06e8a015e0fed40dda0f0da4fd5028da0fb5a1fdd031ed87c2f64323683f9393f633f9683f734dfb9930b49f0baeb49f0ba6b49f0ba294a2dfaf58eb0b5e82a5c0b48c5e3c5be1d94a96a160af94152bafcab02fff8ac1625854aa4cb4044bb1621929956525a44c405906d259b551b0574a03652096fec084647a0f80b2ffbe945d402d1810ab28bf3ebff09c73ce39a594524a29a58c31c618638c114208218410c2f7de7befbdf71c74d041071d74d041071d74f0de7befbdf75e6badb5d65a6b6badb5d65a6ba594524a29a574ce39e79c734e29a594524a29638c31c61863841042082184f0bdf7de7bcf39e79c73ceb977efbdf7de7bafb5d65a6badb5b5d65a6badb5524a29a594523ae79c73ce39a794524a29a59431c618638c31420821841042f8de7befbdf7dcbbb6d229237c5b56452bfc88a0a5b5965f4f42088db49f1004693f21d4d17e4260a3fd848046fb09c14dfb09618af6134212ed27041fda4f0830b4d618e87980ffab5a465cd5ca02fb2c1b42d352bd9525158b0b18dcdace6d6dc7eed496b58c28cf567648684b594bcb484b6b3b53b69d08a5b51db8f35a6b39e31b7fc1b056cbcbc3b2584629fd7bc98c88b215572ca995b15279d58ae9ecf9bf46d3b394528a63e1cf42935dd9eb97b20a4895b92aff975717be7a58d10e093ba62b5c888cf0c90b172f5ef0096b017385cb96d398a12d42420fcb48d9d57ab9b49ca982948fba7c52eb4815e3ad2db6caea6145482dd5b352482cccc101da071eb4d6c8684baad7154147fa9465d9b543809659a955eab5b314cf565946f30a6aade95c12a7b5302a64aa0ccb3da99555a962631996b92be3afca30322a690dcb95d6742899a435bc811b18390a969552fd57b14ce711475a6bb0bc7ab5b00cd9997de1d98a9d9f652b3c5bc15e5ae3ff6a8da75a61fef5b117b28b4b0b92b680c9147d395dc1648ab40c1579c15f4ed80b98a32123148abee48cef6f2dc83e5abb026ba9be481a6b4d071138b096ea0b10d0c9e5ca4242f7cd095fd9c96580230b5f2c0339b86450022ca52d7ca78c012a1824d1da211c642f53767abdeb07031f5a6b260c7000c346ca0f3f17b85a1312c24082f6734124ede702345a3bad5a013be03761ee75d6c9abe47beb80f757f8dacd48a1ae773300cfabddb39be61e61b73407acedd3b9d73e1de5ee511cf067d75fae5453ce659d506ec03aff9d7ccebcb5ce6e42b101dfd7b7be9977dedf7309a506aca1b46fbb9ddf7ca923141ab0eb9dda3b399cfa258cff09eef7d6dee1fcdcefbeee3dc1f4ce29bf77d8dd8cd57d27b8579e7fe7de7ba4ddb9e704ebf933f728efd6b3d6be09960eeabae584f65a2bbb265877adb3947ff5a5f2f24cb0d61dd23961ae74c2c931c10e72ddf5ac9cbbec1ebf04575da9fdad65fc49e58e83edcb47bbaeb9763aa3b604cb1cfb53e9aecdd0ed5b097ed3393e69bf75c67796121c2d9cb9724aed96efea24783e5da77d7edde651524970854fca781fe58f4afd22c1f6f9bd6f3fcc7a5afa3824d83948efaed53d7e013c65dcb96b09a58cf01db7007e90f2cc25e58f3e7e1d7f045bdae394da4e5effd6be1dc17ace9cebfefe8de038ffee6c6d7f0d61e68c6078df6f59e7bc8e7ed58be05e77eef365ef51f3a815c1115a289dcdf3bacc694e04bb38619df5de9c5d8c1911cc23b5916b97bbe6745f38583b0a23e73a3ed76ed24330fd4adf39b83bbddd4e4330e5dc4ea9b9ecfd4e1a2b8035e5f6cac7abdd51bbb80bc1f4edbeb1d3fdece4156e42f073c9bb7614e679bb837b10ec2ead92cbf936a453be2d08ae16ce98a58639bfe76e0782e5bc73f3dab9b3db51b7298079ce59d76a67ac72fe4f005b073b8c9be7b751f307044f7dabbeefda48a986ff078e1552ae357f5bda7bb91ff8efccf372289f9bdbee3e308d7aea9b6dcd525bbbf9c0f179bfb9bf47e5cc57ef8177ec77db5b397ca79fd503cb7c777436ebb7337c360fdc297ff1fbb65ade2ba79600ce36e7eea28d3a565da5c6035fc9f773bef5a3777ed477e02777d4f263d47bcf1db51df8c50d739d7b5257dd83ba0edce17692523eff257ca7e9c09c6f6aef86f9395a779f034b0ef5fee8ecf3cc6f97035309f58e15fed77cfbc78127cc31badbede6f9c17f83efe7d93fd2aba3bd9dc381afe3d6be4dffdafc9bbf819fbeb3b7ce98a5858f4700bb4cb5cd515a1adf3aee06be1bbedabb945acafcbb0dece6751576a9a58cfc6a3670863dcbf8fbdefb32ea35b094b53fbfda6e582dbd6ae03c29e5ddf1aa5fb5dd4200c3fe9e95afe3e3d6499b1f80337dfce9f97adebfadcc69e0f8a08b155a7ee58b1566347095d1ead8bb7576f2fdf219783afaa2b6b1f37ba57bd90c1c298cb9bbdfd34efb2e9781ef3bfe647f3cce7fba9381af8bd3f6ce257ffbd13e0676ae5af8b8b6935ecb5f0cfce4ee793a582de5f37e18b85fde79ce5b777d9f7d30b07e1f25ff9bbba5eefd17585e27a57dfcea4defdd0ec07a73a7a5ce34c37ddff602e7f81af2cca3db575eed064f3a67afaec35bbbabba0dceb5da6ce995f3c1ab7317f8f2dc21df956e69e5cd5ce00ae9de5dbf2ee3ccf26e816d754ef6fa78d49373ab05de99c2eafaeb75d2c86716383f9de5effefe72772716784737e3a6d2bab77ace7b05eeaef75edf7efbb8a3f25a81a5836ff5730d6bcd1ade2a30ecda3eebb2ecaeeffe2e1598df6c79ef4e4bbe697e770a6cefd4fad9b7f5752eba2b05ee0fa99333ee97af7e1418f60921bd77f66ddf4381758d9fa17c336f1a776783b984cfd21d5fbd5f737f024f2a25bdb4baed9cccdd09dc61ff78b3d3325b6a7b13f8e9ce0ed2b7db464dfb1a5c399416c67a337df77526308df5755da37d6ba3fd2530d7d3f1cf7cbb5a9d7c25f085b24afef2e4ef74df49606af5e3533e9777be3d2381b97d99f3e76aced6f67c04becff5e7b253be6bcfd9089c35742fdef85a3eaa6d1198d6686da4df6dbd725722f0a673471d6f872f464e1b80ed8cb66ea75ddf31673a04ce3047099fce0fbe4ba910d8dde9f85369f7d359cf20f0cf8fb73e0b2710d8cd28dd8571ce7b65fd014b6a23b50ff9e4ff66f4016bb9bb7bbab374b57e0fb8bbecf84be7787dd5aac194d21a2bd7b3db0b1fe4014f09a5cb7dc2677776c0996f4e75b6f3dffcf7ec8e0ed846ce69844efe8b4f9ddd610086f95e2b73efae3ece7bddc90167ae7396f63be75dcf5e7770c0575e0a5fe76c29a5faebce0d18ce679fd30b75b696f3ba6303d60eca1861e68e6bad77dda9013fbf71f32e75ef7dea5d7768c0f6a9a3eebefabbdfa9eb27783a3b1d755abf7c67cdd5130ca9ecefe0677e6197b976829de536da08f3d3faf3564eb07e53beb66ebaac67bc7513eca2fe0bab7dce61beb66a82678436722de9bfcdbdd64cb0cc36737933ddd0ca592b2698c2bf8ecefb57dbb769bd04dfebf88df9f747fa90d638d8c55aa58e333e9d12d26a09863dee0c6bed77720869ad045fab2fecf1f29adfa4b3528221ac0ed647dfe57753d649b07cb36aca2d871a6ee9aa24d86e0ae9847bdadaa9ee3412ac7785db5a2a35bf7c760a09a6d9c1b87b76daba4839bd00ae6e72e9669596f32a37b500963d47ed2277b1cbb8357d04effc64bc12f6f84eeb4c1dc1b4d3ca7be45bf30c75a68d601a1f8f9de7f79cde365346b084db3afaaaceb64e9ae922d8eef7f5d5fd6c8ddb65aa08de7be6f9627d534aca2f4d04e73ebfcedbe3d70ee5a588e0fb19cace2bacfacd4e291c6c7b8f363e97293d04cbfab74f7b79a78f5b4a0dc195c67755762be3f73e6905f07d8f3ffeb89e5bf697b4107c5f5eaeef3baaf59492128233e4b93abd6fa7b27fa483e06e9fb630c3d8b5e3365241f0dbda7f521b23e53c3f1a08eed1697d3bb4df6def3f2980fbdc56caecb4d5b3f69f13c054ffe4faf7953946f713105c6b75eeeef95ac25cf9fc03eb992db7b6c23cf9ad7cfa81f5bc1a4a7d25bff4279f7de0df0ed6ed22bcfd59c9271f98c2cd5d7cd4493d23e4730fbcb7851bde7ee7e4f1f1a907de79e61935bf7a67aef7cc03ebfd6feafca87d79ca3d2580659d3372fdf6ef7bb8271e38c3a8dfbdada7dc6eeb7907be564af968978ebeb57ada8165bcb73a9bff5ad7ab9e75e0596deeefe4e5d6baa8271db84318f9cc97de39b075eef9ed4ecffb369703c3095d9457d7fef65f1b078e916e7bedb4faf13be91bbc73ffabed7cc9e79e130e2ceb9dbc736d7f5ffd06b65abb47ad8dbc67b86304b0bef55d9db9d6b66f08ddc04f39fd0d5decbcefde06e6146e78b9b5ba67cbd9c0d34997abce79ebcff1ad81e3f77d9dbc36df5da19b6a60fe748c17de9fbcd28700fef8b6d595665e9f73fd01b8efeef26bcb21d74f3f0d4cabd63076979d7dbe391af8693d357fbd67b6739f811dbf8fc3e83687355733308cbd7fbdfd5d2b7fee32707e2e5207b3b67cefa7c9c0d6ea2cf57b5affcf1f03cbeb6ceed4c29a1dac590ccc9fe6fdf6cbf6d5586d183857472dcfbbbafcd982817b7edafb9cb247d9eb17586a5839dc9d5bfbd401d849f8609efd4228a7ab5e60c8e9b6fd55386fbcef06e7a7dda3953ad76b9db30dd62fef6fe7debecb6d17b8c327b98ef137dd717281b9db76eaf75cae37c6b805763c4aeeaeb514f237a116f8651be3d53cbbbeed7d320b7cf58d50d6cd9f8d933e1638f647dd8dd2bd0de7bd02cfd75dcd3b4ff91e526e05eefab78ed451ad7fda2a70940fbeca1da72fefb9a9c0f1a5de72eb77b9cd534f8177acbadf6bb37b4af39502ff7635bbdc75a44eef2870a79f6b847666f8788502f32c63fc2afbb35f291b6ceb8d37eaff3bb99ef609ec1e7c5bf3f32a61e64ee0f7e47dfa6aac30725a9bc0144eda617e71e67c235d83ef7e75d3e8f28697c3c904a6b73eba2fac5dcfbae5129873a7ef9c37f6cd9d5602d72977eef671fb5ea631091c9fe48ff21b679eb32381e7a3b53f1bffbefa283c02cbcf194248a9d3535b23707ef2f6aea38c9376f98ac07fbbae9d4f4bafd499086ca19c34bbef0fb5732e3600cb07f7e559c79bffd621f0a5b6bb6c73ec9dc6d885c0ba4aeddc67993fbeff20f0d3b6cedd758db7db0e04be3443db67ef91d75c7fc0376e1ae74f6bf38693fb8033bc75eb5a6dcffdbf073cabd3d4de3ea77697abc153c3772bd53d7799350ff8c9daabaeb3667be5db3be0f8f653297bb597d7ae03762ebf7da7d6badf373503307dd9d91df38577467a73c0704afb7346a8f59e1d073cb5fc19e7e370fefc1b30dc516a3e77e67c3e6d039e9c3f3ba9ccddea286bc0f7bd7cb4f258a10e0d98562deb9cf027b4f152f80976f3cd6ca3953a6a7d23f404cf7f90beaba5b32fdf083bc19a47b861bd93d6fc1d424ef096dbbeeef4ee072f7d70134ce38c317ecef0da271fd404730b7bad99bf9bd0550733c1f5ffc63bf353db5dec9860f9303e7df949bea5e397e07ca3e3bcbf1cf9e656c7c1d1d599e5ab5f7bbe505b827b740fdaab757477f25b097e4fef8e114e29b57b9712dce98befb91cbbbb37da49b0bd5c5a17e7bdef715e25c1fa9f8b9b42579fbdb9be48b0ab5d4eede4ebdcee4d1f24985b4a2dd73ad277012ce7d5b6c2c9df8b34c667013c21a4d5c90adf3b49e17b0467f832ad5f37bdf0f2f71cc1b7f70d797591d3b7efbd4630851666e8b8ac56ff758f115cf79c51d7f91e87b9f745b0cb7046aeede749a17e45f074afbebdd07d2278db27e3ccbafeeb1c119ca5bc0ee6b7b986f3391cfcf74d0bbbcbf0f1fcf621586f38e7966fceebea1b82a5be70d30beb7e9d7905f0bc2fdf93bad2fabcea42b0767253e8decfaba5bb8460c737ddd5e929efad7d10ace1db39cf3a6977390b829d9b50de48a37650d34030a53bc25ca1edefea682980df5a6d2f8d33d2fa760298ffc77ddfde9929941510bc6bde8fdeedb8e4bbfe81ebeffd76d7f7e3e48efa81a9b6f573cece65597ff6816d8750e619dd577b2fe4033fecd0dd5d77d5d6d93d70ad93f3fbf9cd281fd5033b0739b5f6ddf752bb9707eebd4359e147f8744ae750f561093ad2129485a96f9edc9300be7adbf97bdb69a19e9de38127d4b5eff876e6fbca3defc09de777b3b4947eaccf5a9349522332a71672ecc0f2d658e5d6efe5e64ecf3a2e94bbba7c3b7d4773a483d757e9963577feb04a97330796d5e97f07dd6b7d1d9403eb7c698d1b42aa237de7e2c0daf6a8af937adb9f50df6944e6e425e70da6fb559a9de3f65948df8ec181e3fe4aafd452f328ffe63770df5bdb3a6de4b7bb4c73228033b4fd9f9d99f39773dc909943f7f767dfb5cf47d5276975ad52b128a70dfc7aac3bd3af133e67756403476b9d7c534b58f9d65bae812bccfde63d61d55dee38d5c01d72fb2cbdd756b9f37310c015561de9eb9bcb689fac0fc03df2d9e9bb33462da77d6960d8edd695d27fda5afb321a78d3ea6ccdbc3bee36ec93be33f07593caf7e4a3f72b87cfe5026306aef57ebc9cce47e7bbfe29a5cff27a342d2d0ac82903e7791f75cfbb7d5adbaa25ed6672c8c06ffeed7c3afdf4cb91c687ca1903f34ee96b6da9cb97ff9cf6cbaaf5c26232994c2f5846573116528e1878cfbfdde9dc2fe5db4509c6646abd3e0dabc53299563116352273d23961e0a7f98b11caaea1bb16f20906a6d6c9fab4c35ce97fa4a7fb66ce173877d7f9a3b352c9a3bbfbcb0bf6e5bdfa826537c7017857cbf3dd79be8fb6da0e8bdd0cb6ed0b96c598e3059e2f9febcf53ef6e238527d6abea5b72b5f6e433167414ee9d1e14511c80237d92cbece69d96eb7a51f5398845142f30bc5cf6d735ddb4ca9d2faa3e377846d99d9daf5277b37c5ba5f31c51da604df5eb71c797946bfaae94224a1710d20d33df2f4ee8eca3ea4b6ab5502a9e82300251b8c0d7caf7a285eeb9fb714e11650b9cffdedd6fbe9dc358dd44d597a25444d102ffedd5425ba9bdf1edc8e2428482a5c4642ad5501051501051501051501051d097a0232d41d2bdf9a264311db4af531a65ec8f473fa2608165941df2abe98b953ffd2bb086514707bfeaf9a4733c8d2856e09fb346abe17c3673ea3aaabe4fca3039254a15d8d5bfff37c2fc56bedba9c0b172c867bc9246b8a9ec53e0a867a57d3ee4d3d2eaba14b84bc8258779ba1761ec51601eb98df7a1e40f05e699feb45fa3754edafd6cf0e65966dedf6518addcff04aed55e57f58d5b7f94fa9dc073de9ffa4ab8e9fc99bf099c7b76d375687774b0db5f83a1def9f548e3db4ce0a9e9b5bc772ee9d33cef25707dc91f4208af8b7dcbad04b69a669939ecdcfdac7127812d75b4f2eeeaa3116ab791c0915feaeedcf9599ea1db47e097737e73e7ce69dcb56b2330b5d2cd6875ac6fd6c8751118ceff5d7be7b9e799ab260277a85f42f894c6da69d50dc0555be8e69674ea21f0ed59f26de5ed3b3aeeb410f83af824871aceedb4bc3908dcafa56ff60cdfde7dda0c04ce5d525aa79e945ffa2fff80ef75d9d5281fd7f0e15f1f70d4b2e76c259d594a9d6f0f98c60e2bb4ef72e6eeeb5583f59d55e6bab7db59da7a79c03556cbf7beee6e2d27bd3b60cde1e499e6799f7d0dad0ef8d54eade337eae8747c9601783efe6afcfdacccd9dd1a25071cebc779e9a379c6cb698d8203ae9cbb4dddbb2f7378658d7203ce375fa9e9d3b2bff7648d6203de97cfa97f7edcbbf258a3d480eb9ccfd1a77452e722a75168c072eb5a759c1c465a21a79fe01e757fa9eda354739ea72758cac72f94b0be7e79b6b3135cb5dc39d70ea1e5b46ec909e6db5e3af9a33cbfcc596e822785f63dfbec73b7d32a35c154f75e9fcc9af2aaab9499e03ce78bcedda831c10f76ea7a84f7c6bee9bc0473fede513ba9d61ad219e3606b21bcf05ef7f8b653464b70ce3d5afddb715bff7725587ee470d3682377b36b4a70b7bc4efea8d693604da9aecfba9753667925c13d4f38abe4d1c248309535e697b2d67e39bd0f125ce77ef96cfddd37956f5f80c639ebfdacb97c19757aefcb7c16c0163e6a1dedd3fdcb355a5b06cf23984e4721d4f0e6b9b58c998ec1e30876194ebbb7a4553ab7ed9eb0117cede5355f47f3be7a7e670457aa9f7defed28259f9aa2828e50e0aa544cc24530e40fee0b69e652114cf7967b7ebcb9677ef3bb46f0248275ec536efdcff5a48f57227810c1dd72a9dfc7b963aeee4d3858c37ee73f4b7574f7bdbba721780ec17ce74c6dcc35f34c637e547dfcf44919061f8486e0a95fbef66d086ba58f3e93c96472eff4e4ab00ce96d60ba3a4fd664b5727952a9f6ea6520d994c5952ab857a58f01482b9ae9abab92bb4efbeb662f01092f54348397f30cffa8fe2c13308de16dededf3daae1e52ee620a220a2a0a1a0232d604ca62f7804c15ac3986fed915b27e7f720a2a0232d41a6f74e2f69b7547a068225cf357359a3bbd43d1d2920a7834fe7bb2d8fd465d33b3d0703e19900ae13ca77f1e9dc9c77f880602af5ec52e7df6eeef8fc0f5c5fbef372699f73af5df6033fce6dedb0c2dc63beb9f681dd864f732d6fcd5a67cd07fe092bbc1c566d2f9559ee811fe757726adf9b8fcbaead0411050d0575d122f5c0f63e79ab734f5e4edfad79e0ba9d9bd3cacb77ac7c5348331e0960ee72b7f44d5a69a7175a5496b304110519051d690932994ca69d32b9777aafe7f95174a72a1eb85239f9745d6b6e39a53b53b956a915cf1d783fae5fb6fb56be6ba714559f2bbfc4d881afb4735ee932acdb6949ebc019d67afffff6cd277d6e97e0a1033f97f3efba73b7d74d2951a74f93cae6c0d3e69bdf3ebdeb83973a547d2d180b2bc12307ced63d3e257f5ccb7e678d03cf98f5df18777e3cbaeade60aeff52a76fff1efb8e100ebc67de7a432af9bf81abb6314fc9fbcdefa3cc11c0afeaa7b3f2b89fbe9da71bb86afab346a761de96cbdc06be9bda7ce5ac32f2f9b1b281f3d3cde3b49adbbdefff1a78ce28b57e10461b25bcddbdd37b6b78d4c0dbde087fefcae7ccf26acc03015cb78bf4dd2a2dd5f3d6598fe07900e657da67b79daebefdde4e034b6adfbfc82f77b0f77add0d82070decaebef55e5ae7e6fb3df767cec051ebed7addffb6750fea57ebf5c2f3071e33f0d3f9aebcf152a9f37519555fabb34c267b7ad4079e32b0b5f161af3fe9ed50de8eaacf6e1e3270e437dad8f7a6dc3e4739aabe68634441415dbcacf618a2205e6432994c415db40411994c5db44c097592e01903ebfc2895b55a0eed8b5ac32e5e8282ba68b12f984b89478c982bc31306e6d6ea78bfe6ed7ad4d9d2333c60e0fc3a3e1bb5b351dafd3026613c5f601af9ac97df27e385155a07e0ddaffc2779e48ed6cb21f40253b875a7cef558f5a6b6a2ea9b71061e3738cfda6f7dd85fc32b6f46d5f7f1fd2b96b1307c967ee16983a973f146e7a0a6934efda8fa5adcb278bac092de2ea77bd1ba9f30fbefa7fdde44e2e10267aea57371ba6a61d69d675836bbe0d9023b1b279deedf7dfaeabfb04c9a22173c5ae0bddfe9ae2d77fdf78d0e55df2a95551b662693835bf064819d9433f2faeabe79667a915829eb050f16d8c5b865bddc6aae39dcef484b107dc15c3c573cb767a49cf23dbbae5ca5ca26d37cc15c3c56e079a975996fa86fde9d529e2ab095595bcaed7b935a4b69a4e2e78b595b5eb59cd7dd6d3241fa82b9d2f04c41a37cf04a09df8c93ce0aaf9c91d2c8dd7eb2cb8eaaef858741472804bd804d26d76a6726536632c53326931199530e0e3c52e048e353f815721e05ee70d72c6f87315b2e9f45d5c7e262329d582d2870aebbf75ca37575efba1f29da1a9f119953093c6c70cc975ac9eb8dbfbfee8eaaef3d93c9641a72b55e574ca67c7a2f0b9e27f096fbc618a3fe3e67ad50061da11064f212441454c48aa1beec1475024b3d63d45b734debd691a3eae3d764da596a8583884ca61c1e789ac09a576aad9cef757d7dfb1abce5fecadfe5abff69f94c60faf72b9cd371f9f8ed77096c6594934bbdffe6c7a733d291562332a7178f12f8becb10de3cf3eb37a3b3647892c05ac2d9ddfd9eabb4f3724991c05972f9f4bcbdc35a39a5301e81e7b53cfef7eaecacf4c52a8f11983b6b23b70fb9e4db3a6932994c63a61199d389a7082c67b7fadda79008fc4fdf86eef1af974b6a024f0370ccf576b7e9940fabeb15555f64618a02cf10d8eeef4fe3cb56c67f752ee90b8bb95845738847084c21ed37c309238d2f7f10d8c24a79cc35ce7d39d516089cdd8eb1bee96087bc4afa03762fbb9de3b48edf4eb70f38e6ca2dd570df1b659d8fa7076c39af9fb775fbf2ea6a8b755283f37e31432bf9bb4f75ed3c60c7edf3b86fe5f965dd3be077fde17fccb05aebb20ef8a18e7566f8a474705e06e0b85d9d4fe57efbfeb639601d7b9433e66a379df63d0eb8cfcbef74ae3ff8f6d61b30e459c74de3cdfdea2eb90d3873d96f775d6a4de5e335e09babfd0ba5b63c34e0c89dcb6f3e855b6a4e3fc1eeffcaeffb1d85f6d1ed09ae544af7f2d655f2fbe0ee044bc9f5b57b3a68f3ac6f7382ad8bff2f5de77a130c75763cbfbdf2c218b9d604ffe355ebbbbfbe86b9ea4c30cf1dde6aa1ab1a13ec2acff5e9b7effd7df92558bf95565bde39949ac7c15172fd53ee4b2d7fd312bc67cd7a3e0be3bd2f692578fe769c727b67b73dbf4c09de8fcabe617e47f9db3c0976afee3c7586324bfaa824b8ba1a61eebbdeeb3a9d37126cdff7b73b7deeee730b09a6b3e64df3e53af75aa5bd00e6ddee4bbf4ef96f766d014cbbbe16d6d7335668f32398733ee3ad7757be6fad8ee02773b7755be7faa56f36826f841dcaa7bbe6f3ab6404bb3de386d5f24c5fa57011ec2c7dbf75eeb267d95d55046b07e9db52de979fa74e04d7bf5ae6e86074f09d45044779f3bdf2499df5db48e1602af77e9cda0a1de4761f8227d5eff668bbed3a666d089ecf76cef3dbaf3eddb702b8f7196775d2e52db78eb310ac7b8c944afab285af6742f0bbb0d3ed1e9d7cde6907c1b0d22767ccf39f5b4905c177c35a9dd3ee5acaf394816099af752fbe7efa75fa14c0bfb9a4b7c64b797c29e304f0fbfdf8e557579b7f3f20583fa7a3953b6bfdf6f23f70a795d2c9797793ebbcfdc019da1c6bbc795269791f58769e7b957dd228b3ce900fccb37436c29adf3f8dbf07bef36a0a37977253f9b41e98baf9aeeebae79dcfc23c30d4d0fea4b14fd969774f0278579e1dffcbf9834e6e3cf0cd39be83b2c7677bbd034f5ae1957567faae8eda0eac1f97f3c21caf93f0d53af094aed7fcd159ed7ed38167a45257f7bceecba39c03c7cbe3d47cf29fb65e2807b6164aeba0ec50fecccfa1ea63bd6aff99fbe6e9649f119913162871e00be17df93debb8754fdb37585b98ffe5fcbc65e43fe1c0d47668b57514c2abb97c6f609bffea0c3fbb4d9de50e551f12eb794562a596ae506875fa8012014c6977eed9db5fd29a5d7703eb9a259c0f2de514be7ba8fafe5fb0d37bef5a3a922fcbe1034a1b98471ef77c164e0a23fccc06def6fe9bb0d7db6994baae81e9bfeddbf1d7e3aef327aabe33499652008a1af8f12927a47cef0c29bd0f010c63cdf0527925afba5ef9000c2f9f51e7fe3ea2ea3b9374eaf95527f9c2a830a14e1d50d2c03473a735efd63a371f4703cb38e3dc73ba4b3b7cbb9f81f9c7fc2097743f0769e766603a33b54fafcd764a1bcbc07ac72b3bec5b6edd1fb464602d77bc3ceb2d779471ce31f0731166cde1b415ca77a5183852fbb29d4f7baf2eea785599f5e2c29f85868bad8fe6c4811206ce513f6ee59e4ecebcb906035f173bad363aee9eb4367f8179d639764b378da8fa4e2d6e5b80e200dc2995aff2edf2735cc7f70273cae1ecf74e779db33cbbc1f04ad725d7f12bfc7791f8bf7e35610b4a1bcce9ebdff5d354da7ffe5de0fbef64b5735bba61e5910b7c6fafbb5f9e6b7c2dffa1eaa31dca1678e718697e5ccad99fdd5a60f84ee6aab7cb97ea5a7716f8bb7d345bdee785f9aaf2c3b253922aa68fb404c1941ec6b2721f0a16d8e5fa5ecd1febee5cc7bf02437b9fe3b2f2df56e0b8ef75fbda77db6ed7771598426eebe50ff97c32fea6027397297c74c3e9a6fdb9a7c04e775de57cfdc11c2dcd5260db73bffae53e5f8d13e628f0bfae4fbbbd2d1458df7d337d29e5a533b3c19343f7df617e0f4aa9e91398d7c9e57655bae7b95f27b08c32ee48f5cd3d3b5a1daa3e24d6e93d12c7f9b510058509220a522188280816db6232bdfa7b79de3232994c26937b50670d9426b07315c647abdd6e5afe6bb09c5ac6e82a9ff2bd7e26f0f319a97e95ef79e5f325f0ed306b47217d7cc69b95c0f95a6a257c10e62ded4d02d3d8b9ee34ef7e637417093c2db4f2719aa9dd13da2370cdf349175faf904e5a8dc052be6721e435736b672d02c3b9e57d336e7af5cb9308fcd2bebefbdcb076f9b20158eb6af3d4b33ab9e78e436019f9a4cf6939fb960f85c0ef41c9dded3443c82dec41e00b6984357279e194d4752070ef953fbd7977b972e9fa0f78caec5c8c10d668b973dd07ac398d79c76c1dd71c7e0f98bafbf2767f9d9319be1a2cabbdba572df9bbbb721ef073d6eefa3a971d52be039709a8c44eeaa5a13448510c832000c09071470440033314003040241a8cc662b18822ebe307140003457e66b0382a1708c4b1401406410c84300804210800000cc020084232b444631d8beaac2e00bab958841852b068ffa970b87d558eed33d92601753b5cd03b79b7b1512fbd9848ece40f8655de801789036833d1196c35da1ee7dee52bdd3c1b10346c973db80f339070ec1f289d79b4c54269465fd597c037b481544772f5ac1ac84be229a3933e229fc2d80072cbe34c2df3fad89cbb2d03e08e3e22c41d4db2be3605caea93c68909b379e831d0f416d97d3e5893695fa8ded7fea2e31543dd37e7e4b1d4589efe5844893db573245f0ee26de1d5f15fc22207bbf4b92c69a834c09ec1e79d1c6205cb50b70b80243012001ac0446f08bfecf0ac262212a8129709c964740244623269a9645fca45ec0d605dc52ee29631c958757c45ec1a938a47c540c626e3d6f18638c4d863dc39a6106bc657c5ae6292f1c818e8d88471a3ee2684953970c74c6256b19e71d5c492ffe708c1472b8ac7e0e97996c5e11488d8f411e38d4ca7c040a2f7398b03c4dd9f59a0c5980446e289acc29c020071baf2169dbd37a0d6370acef810b02fdc29ddde6e46290f3364610a8497d9c4a88ce22f12f5db0d70aeeb832ba06e7af2ac0d3ad6c0d5ae46471921ed43b61c9423c4fb3df77882a3dac2360a4df057ce6839839f328d566bf05f72dcd9724541d42b2c8e9473d7cc18cd6c40f1a305c0208531560f4cb9e8c78c96722db34403f3a62adf7de0c9f99a5436465fa32879863d6bae274a65a6030bf9f0d7ac8ed0d532b0ea40edbf9829d64bcae3fc08ee07dda14ac4e220941cf57b4c1a8ecf08f771df72b9d65459c5304a78ed7aefb4b8eed80404f91124455359aa31e8699bbe6e3db43181fd8e3ee44df11ab5f1926c043922521eb9065621702921003b4f927eebaa57debd01319850d33f853562a5abeef486f9327be56a26eb974bd7f6e564644a80ca0e5dd10f2e1ff97c99ba5138e12e3108f06797e92266cf029dac6d8d7feca456994ff70aa01b8283bf548bad435e0445f287a7deb530d4857572f2d85a01370b4a6182d03b492c2b54a7e05d85311ac0905c51f6b63339ec2e512bb31c1eaf9adb6876f49e3372c56cec57c487b7f84ee0c5142f4af63709eee639b188f52cf5b83402ec99ccb9d0f4fca3227e3cac7440fac2bb431d42b92fe0f1ae89681fd35f678502111df3596f14f5d2819ee412930787ce2a6c7bed3df16ae056a95c7f20e13713bce62873c2abea38c1f9518dd343bdf8ccb107485bb3892a10588289850ae6a05567bc34605f88ba8cecd16ca14a6c85eaf16b2b5a85e64f178b0a12d05a56b729924233a7b1f5eb30aca15261981ca19f5cdc00c616349014932708bce87a8c55e418600eb0b21f8c4c045d853556baa328de82cecc70375b710ac3f10a7cc57dc83b20968369edec9e99570e25ad092b56c0c86c3a01f72d358de02e5ea0244d25ec2812da446c48f8571d21149355ce01c98639f04c9ecf94f4b19486a93ee9a2a95e365ab046a8133d6298d121005169503b3a90de4c1fcc72100dcedabf6df27fda17433f5676c4ce3e84021cfee321f9656a8b07d79cfd97fe8ef3e606cc6148f7b9322c5c90331b04699714df12dcb476314422e9255fea0f23f322489615eee94897d904bd4081979116c3d12580ec398516275e60714d97dbcf63e3e91e7b64abd9eff89d2a50a39f13ea816db9380e7385b67e5f07b95c362f1e0a2275a2d6515636864a2cb1c13801340965400a7ff222d5738c5cc3539f0db54946caeb4a599a5c76e1ab9ba66d319c67711613f349425bd0c5b2f7090f686d1030f9d206249b74692dc4d99d7cda48db9e81e8ba4c5d3ba495933e1ac9c676325d0bb7bf600c96154c3f7188c2fadfd13d5b365e642c1eba1f4c2e702d636aff087574c0381b50178e924a49a0761305de09bba7140d28fc46a33e45fe64fafe0acfedc7de14ae875aec0f6ccd731c75113ae009400975328d73b4ad9e9ae7ba4ff5d3c078b4f15622e4ee483af7852dc15d6266975c98b887d8683e5b715786b194fd91a8eb88bd6502f9ef3de8a0788776a2aa9af51b4a0f6f6213489d4aa6e71ce752a1a1527638ed14f78d2703fc00880ad678037a7d3dcd703ead3f946ce8947b0e5712d89828b11408a68c385366e33b5cc71436d17b863b9b5ef6d4a8d84f080c399d8b21afab437fe7670169789fe7e544f92823c686eff85e4f3d40b6a6fa1138dc3c3ecf6765b2aa00560a700900385dfdc60fbb2728134abcd1231484b2fa1a150c1dc977088a8a76ed2fc321440e24585d7da468e509b05894d1102fe4bdd387be16a89d5253d2a2c879e5b26dcf6a23663507bb4dc420bce8d3e071e47954f8a39391212068b11b4a3b5d748b58a5a717a2fb23a14d28bed2e132cdffd8a66b6e1429dfafdcc2f0b24c895176a7a3e4fea01984af9cf1d25a23ad5c7a2b09d4fcb275b38c4b68ab46dcd69f1055f4bdd28bb78466959069e412a9d6437627c02799d29d98ac3ea2396659eba4ea9c2729b3a9ff9abc0f5e5c3bd336a5b9d2c4eb946e4ef2ad43ab534f98cc6cc32d591b4efdd4f47c66f15993d541de2fc9dd833693969bce57cd7de2654a756ab376464a9995f59d852fa52fb21e42805e6b2062b863a7885e52647a278bbad253d3040817a5aedba1d419a204d500f2c1c7a10fb7e73c6379052236a7975b962472f1ca1944bfdf679f74c0397e6584aa786738eafc127414928d2869af5549acf5d2dcd83b009887a77bdcfb48769c1e18511e0fead5f1508dd694316445f82b0968fed8a6467f7a73f41058f78746db9365666243b9db5b96beccc68ef237a08ce9a6dc4f14f6ac4798f3bc8ffdbf236479e9442a7232ef1f64be3fbe93619686c894b825b2df6addf1c7b9913a6ffd2ae8d0a5955bef5a2e261ed913747777c0a508d5e8a3aac488b9a389e59f26979d591ab4a1c6dd66f5d227716e3bd3e80cab2f0160dacb1f8d86c6750358041bf83f2c0cbbbac9355a0beb8905f5a005f5dcc27a6401eb4d0b838c46cd6ac7b1905e68a0872f343d7e8611286df1f2ea08a9b601baa38f0bdc6ae5c03c8b27919ab346ce381ea0d62e7c9f90ecd8fcb21119819086f4c3246a172410cf9fca11e6e2390bcfe09bd3d13a434e3677e7087899ad32154a32206b75e8c1feec9c016fe6a3e9465d2c570d194e32d19d2200c946b6e9d882eded5e812ea6b3f98cbe598ffa33e66478978f482bcee8e322ace03ba41255a5f9ab0e9322b4406dcf8a0bea1cb96b0e9873e059be211d53b645c15093c81e094d0f15fd27f039f86e1d90eed455b9c09c33669786408c936d12881e55b42ea46beaaa9c60ce99bbf0003e279dad1be418733b162c3581ac93d0f4105155429d93eed60172c75c9d0be0397c36dd50c7c85973c2dc038ff285b4265375129a1ca2ab045c72062dcc818f49b775815c63cece09f01e3e9a4ea873e4ae3960eec0ab7c413aa7ce54bad6204754e56a0d27c6360b9b94d575ca1db0bcb14a26d2d960489bd49377ca30928fee398920257dc9749a88f0d0041419e52673490ab49dc82689482b9d9720a7262a872240dac86c9a967020d3496ada449c8a567d36d7066ea973429a92a8534a2e49278f681982803c23a5692e71818a536cea88142579e9734288e4900768c4089a487cfe63d20493cd9c8537308dd1b5e704b60723ad0c694da64a29e473faae1ae0d199b4f0063626e5d605628d413b4841f7394639056c4ee14d09d41db11a2b287352dab241923167e704680f234d182a1bb16a529873e05d3e20995369c50693ccd8c20cd89a449b49a07cf2d13641d1f179c7008887b1a60cca1c496b6e1863205a4621e14ca96cbb016fa239899c210cc834729af61219ead0e57c659fa3a7fd9d730c3ccd6632cda876508b537c8e1423a9492f9d8120af9e6b793aeb808e08f8e13cdde49c64fb30229599ae2b4b04a5416f72810639bd644ae594e3cc95b108b1e3f49238e59c188a39c55ea85748d17fe4a8c3aa111423222d62d61dc0b61814326a0dfee91419f5a2bc50959b937f6a433a33545c0d5220b423e5dc098978d3a8e93efd210441b4cecd3983794e5f96ec5ab3c9adb6cb7d30e3ef7bc004bdec108a9e82bac9ec8a0b49cdb9d14c71d8e2ab77445b59028b58606dd8c02bca02bc8696f78252f059f3624bc049c75ff678d7d0d5be5c440b8e687905d42fd127e5371838964d431ada9117484a0d8d2d1bcb38eadf1cba0832d0bf0e1ae02f9267b8538bc03890a131303e1295cad4c024ffa16bbd56a41b4d8e05c7a6c55e09a790458edf575e4843f9a3e8df2264b248fa601588097e37937c430bcb9a7f485f5e08fc29bcb2ff2d00a0ac18e83d5a9bb6363da917b8a708b1f260fa9653a8c7cfe964c7176d69648029de0866b761bd194b03aee5b000a309523fb0a128be8d08c32dde9aaf8d0f310f0b05b1e8ba6257dbba4bbcbfc16af0503348e1ccb2ca2ba247ca799443692f5a648235a11cbc003f3492944a2c3a646222238bd2989eb1b710fbf0862f793f0ce5a53f5db694978173d1c1089ea533f2cfe480300d5957623150411d5d9d008c5f0218106bb0685ab0acba5a0f4e0f8d8a3dd48b08c765e19d33a59f8b9260a010f3374dbe127a49e91b48bdc3c600e42527950b9270360a538054c0097aba18b250527d670aa2684c46233d3353457bfafca8e21844f738d683a7bd5fdde93ddfc3f78c0d6228edd6c1850c5fae41444b334a6334d498098518addc683bd4d3e6b0ed3bad0a3c57da30ad4925da70c64ddb25b9c9588daeda9d8bc38462cb132456b38c724ed075247f1f0e4e1a45de60718f35b804653d2457d56eec4ecfc3ad2b55d0b5d9908d1323129101d4c15f79c40372304d1ccc1ed3c0f5b6d83b9ecb82852195c3bc5c390dc1cb92bc918192736b1cb3ca6c284c2ef828523cbd2112d673d91abe964915e473f1d9b7120b34730fe19d3c776101c606437d49ff2a6a003e1a071e9ccec8242b9315d05fa82b548e09ecb55bb1786c1db9c06041beb4dc43cb7fafb9309c86b3054815a534dfd2f515d0a2d225298d0ed55d808b98d8cffdbb55b2240834183e843fd9ecd3fb419e214ada002aaac606bc1f5c9e7fe8be066eeab189525a1b2fd882707c1bec69e8e19c17d63a1c86866185dcc9b174e76d45444e66bfe178b887c2acf0b8a630832b279065a3446f8c212aca642b78c9813047832a015dc3a2c0ad7fb08a4b9a75b962d6c478afb0710e3efc07b4d4d298b82c96f8a1fd42d7dc15fb7bd806bb59af2617fb395dbea6f1ec35b3876ac02f12c40bb3a7bd73adc7d1aa17b905100e03fb90dd3905ebfd7e22b1ae9799d5942ba3f7eddb050a1b8f24057c6d1e3a93fe5923402f02fec18afc71c0e0ab8d02762fccd0e11239f8b990b5e0805f7072b08d52bf15583f89cf112c3b228c7f3779f4788e1804ac9bf44318b6d0d466cd0fb74e39f7382d1228c0f1403ea33704c9c25ec7805581c40aaf1a65c1bbef0f8448502f73511c66baae1ce5e4b3d01ddb53646c6478a3e1aefd63871026f0bd3d7879fdf1d76f8b3e4cbf1eeb947d6e36c36dbf5472cf134b612f2a1db37f1e8396e32bad437276ee34eb6b1563b1b285f12255435cb810a0d45d64e6824bad5431a0778c0169a6beb758b5f8034d8799921aef0dd3805f754fc72addbb05afcd13a9db600e2a309865953079265d1e9a186774199d1c89a0ccfd11d11a059551ad4bba74c66eec069da4db33335056675bd5ed37fa9b05e99807aef7736f4b557cd7172faccd445909d731641e585adddbc757398ef9085913d5bd0fd348c34ed6ae1dbdf6d43d69e39537686199994237c5bcdca2e170acecd7e7c721bb84bfedef11916142e0d2ff3b7440abf8900de9fbcb8db5a509bd9003fce915af497e0e34148b88a082976217433cff16595a5196f4063c13e69705fa53b6241aa6445a43c196aaa7a53a49a6f116ea5b5323e12284199ab01b42514d17d5a465bac4ff000a44890347400fd22bee2c897ed3ed09b063e6c8a02453e468bce8280d320706801db55c61c025b6ea7a970aaf63eec767bb5f543c12b87051259575368bbf9675d8191455f5ff106b839efcddfb4a1b03e5726592c5d66ad34bcee5f670f6dbb15c510412ef046346673b51c074dc8b90ae38b20a192a641ad24be9ba7858c65e7b646df1c346814d2803d98c2ec8b7d17224a8d5314394498d9939fce0d1125bc8a691b3292e62dba411bea1b86f10f57003de1fef1bc58f9aecf69dc34fe9d56cbaa11394e44305fc852c20b0613c512900f31b1766033a153f93f9f209ebfb6c59c908df47c90c215a82d7883b2036b47a3c25ddafee22e821bf8b2578aaf9b9da34dcce8f1ad6b98fa09c41018db3fb6c126294a535758a6e85e155e244c3cf31f05880ad33bd6899a8ee276dfc33d098b889d6d08cb84a24abf68751151bbee4a2644e54b5f2ba35e042e7382cb218aad62e4adf66a46f534c49878f644f348b019adc9c024396edbbf8d9878c90a545e3298399b0e3d7a495d4b75d3ed1b50525d75d25d349348a3c4a0bcd878c589181b8415f5f1a8eef4084fabba488341feb019d38462621830ffcac77e81f880d0b113e1342efb464687909134a0cc2f74a8e5c0eda93777004f610be2decff51065951182c55a8dfc3a6a4100e2b325b3658319920d53fa29a45eec3c8dc37533274ab5004fe25f506ed967e7e3256c995b163ee93dbf9ba1a27bd65c9e864c7e06485ec58436a6d7d746f796c467760a1392da1366fbc3aee797ca27e685d3f9ed5a1c9fa25f2d71c9aea1d96cd7b264c9b7d5ca52346bf426cae5cf1aed1af64c3d3fdf80a16ff496809ff7015ecbfc7b46f610fa06c17bd9b5125fa7407fe3cee0ec26a8b177f5e9e507ad68195e6887c3f1c264435695e8616ff9cf543f956cfe9041c88962e6adf908d84f0e8a79e098d5d411e7bcf8cfe3cffc9b52d9c3c56e195821bf26be92ed17a79a324f2a0e320b7d4d174f669341dbe8ed7c0183b64367d7127d9fb4e8cf7a3ee9002b01d6f527e49991e3b779247e24f84e79ded4a0ba4e125fc2046cc10a91c5e210d5c67cefec3f5e35b3c5d1234d138bcf940d3fd382608e59bd06415ab8482582d6b22838a364e6b08ca5b7899a378efa1bc10a751149ba155fbaa0cfe6fb681f6d73967e2efc3136d7e788aa8eecc49e39f9c307786ed088c975e8643b25fca218f92ed0b47368b94b9b48b6addf001802780c55b1a9a3e4079bd6b4890f415eb5699e42459f007c1c1ce72f921c73942d4d867d813e2983899d953243c8a09e506e5d0896d75341f8e3433d9606dcc5895cab099f2335f8f4e2c7328b6648128356657d6c295d0d88c6cb2216d59a2001d0e5decc9fe8c2a63e595532ac492458e11a7df7123cf9f1e9457be71e7242a5bdca0feb2b141e02777de123e53c9e9f943dfb120f9ffb4c5dd3f837988440c38cc0f9f7c67c23951207702982e6b8e7813ff84bbde1ffec31ef458dc289c3fad8a68cbaa8ea17c8de195131e89d826c60f4fcbfd3fba96ad87a1ff7f3568b3a459c307d1d1cc0d73d30d06d82fbcafbaae7d5cac4e33cdd08f7d04764fbc7cc6661d4145107a065bb2c15fc85430501bbd707f9afb4b4656b7850a7fc045bf6702df3d3cd37f1bfd319a0c50ce8009d9e1f0b6e92d81ab173ec0031d60ccb8a0c5f4dfce51dac1c0eb5b47bdee370eb6a4e74dc0fd40874fad848694f6bb0dd55dd4ccc5972bf754f30752397cf2df559aa02969eab617c5fabc3a99e673d10a7092d9220f32ee43b9f10720dfa7ed07dcaef299b9456b759b8cc59275bb737d7a6150b3b066dc5878939fec7159e23c860c338e18612c81bffaa2589228e0f81d5091811450ddc0316fd6e540a362707f542afb48a9be86a09b1133ff4b541efb087d725364fecd79f0b126148772b84cd6bc4fcbba7444ceb62d23b4bf9ea6ef00f6ec85333184fd1f43f586af7c43ef1d2b7cad01c8eb86149651fdb2c57fa48e6f2b8fad5c985383fc42fe7df11796abc5990f5474708eb2544fcac6690c83ee7d837e03befa3913de6ac6e5062064ec1ca0ff4c984e51782ad5448f825a3cf5b2e0900f2dcbb29c3d3adff827dae32fec7e832a00eec9962d79eb4ce75d6b2264603ab9c135ce767026049de793f7175019c3983aaad8a5945f9708dab586863709395b089ab77238498b63d58a49485e3b5ae955cb37bcf0005e990f594581f7cef5752b04cf334201129ea453f15b1fbf05e7ca52b32185e5ea4829205d4eaf30240dd243ae5274d29be51b679423757e082aaefdc26e437257b7929228b404b37a1e9342ed0c1981adc393c775db1c69ea85b82ab56f2b6fc54f2bc3cd39d7908eb9b7911c5db1a2115cb415338f01babfa25c4a1cd4e6934a2a000c13e57c7e999b638ccdc75dc377300a978c5bad2b910d6923b436c98c6354a938a1dc0802032c9edfd3bc863617917bc8008c2b42c06d39a1ac2dde5f0c06cd8e2ae53a7b0d8a92e969cf648c65623bd01fd77cc9e8507c74d98050ad114ac4af4a20463c972c39f3689ef5e17b1ca0cf338f776642a7382aa0811bcab7f7be93b4beb4fab8f460e44a58607dbd1a334ee3701d8182834422fb5d122f379c3c0a1f0eff2a9b6ce16d899e295c505b9f16289d2a3383e4e51fe4296d52dc3e481a81259a9482f98df64992d80792207c70faff1b43e4ce9d1b84c63753ec36f49ead553d95c9d53f25570976e57b3a189c195c4d6ffed6ddddcb677199e80be12d315719d2ae27712c208823ab3b795adc24901d0eb3a8787a95621329d32bb82b9ff0010e3778ea4248d4b402eef06d55847187908a0b7c25e5aa1135dc6d35e73e4d1d2dd0e8efe213afe16a8fa4b1ce9afe4dbf7c35e5c999a05a584c1bb88e87c060939a7cd55ffed0f8cb7bf74c692b7b2f7bde3e082f58dc0204e0a4ff4e8dc414889b5137286d78e6e7ce456b2b420f6e2e5ddf11e1586f1ed543cd7a39816b5b33a3ed5a154f3da19f4f628d7283297ecef98855490692f6901e20f9a9bd351f6771e5add560455673c33e39e7e0e1c83b083df551187bf44e87e202849bcdcd5e18d26c1e8e409745dfcc58928b78f5beebbd3e890af5718564a87ca1ebcf0333c91e91301a8ecfc4d5c1e81b191f1b8b6c23de4cd015d716448b00041a8fb8a87f2614b191e9cd011d9f783418d09446b91ce86f76d73f48bb2fd0fc503f2d02dcf0ca82238fb1426abe772d971120f34a4add49945d4ea5ec499747a9a195c6017a7830b3117423b875e7eafa96f3f917037d0f57baa89ef9e718e71cbdc7a0cf1f1652f97fc9b63c26d6a543030f50e0ddbecb766be80949fc8327821dec4c9b24dfb4a1c249b598f1c06d80423d17c29a181cf84cf493ba81e4f8dab9ddc3f9b4cc71c0aacc63ba9cb086225c5069485389a10cc5e6cadc4d6f0b803a253dbe351b8bdb5fc2ea235dd5e365c3478e5fa42a60fc12f0773d4332b70c69dfa3cca8bafa5ffd6f293f9ca150e010c3a73c68cfa190ad8acc6837f3eb6ef5e32d576d2eb79901d576054a3e2e15f79dc878a5ef90455921c178b0e303703c452215bf36cc98ea936aeaba23ba185d29dcbc72a49b64be6bbdf27eac466a2572534473c43f84a2cb08e2047dc4ea902623031d5d3205e49c582cdf01a2079a1a82406a7feadc78cbd35cc18abb40cdf12cf113b86b93e04f9dfb611f7296b1dba111fcc6314fe38ac77fdc93ef127c00dd5c5485a5242e5593dc926487fe7c76a8ac1b32fe5100ec796edb2f84ec5aba117edacb8a5183ced9b81b8046ce69d61a905bed823433738d6ae2a4b71277b764965bb6917bb026859a4cf54bc4f693151ee894e312b2f87294d650cdb8a27bb81c07c96a347ce8f8256360e02deff34f74679b8794e962f6978987a9cb30d36ef2fc6dcf6a240efe25bed5b8d45409d9dbd62297745331f74965fdce93957bc7446bc0cbe58c941061d86b1e70278fc2dee29c94764526fd7c849ed60b910961a13ec4beddf18d297933e12f2a41d7680a777a054f0c5a5104e208dff59d748a475a0b60e1552331e51e36d0fac0910c546fc89680411df1cf8469404c3e3b392f87c3884b0922d373778b02a8a8dcb00c7f2f42dce1ac8d093baab79dac6c92e8b0b0af26e364f8189dd37e16f5c7bb1270d4ca451463b6548eb2c0aa81c722d5843311be8164059cef94bde348c0b4ef0ccb429341c9a65c6512ced83f9183862ff20866c0249a3237cef8a286b79ba70cd85eacca1c744129b4f274a9a2a0bac4c6f3363d396c2eaae1be044a14251f8a7bfeddf23840464b556d050291bfa97a12dd2ffb00b4ad59ac326e695b78472bf8011d3c4b82255bf0512f3056830b76e8492d3457028bf6c0532b3256830b9659f78328b242643a287c4322b9ee60d14ccdabf3a19a58bb942f5ba3d99e50ba961f7693d59a58bb149ff606db9654ba961fd646bb2559b9159ff606b335b970975ed646bb25b1742fbcb626b335b9702dbe2d4dab2db1745f3b3c5dbab5655cdcd66d73585bfcb22d6273c3b538adadaee612d4cad2667089505969811b062196173c4d8b1e8b811d88009d07804d4b878ecb078d81c60c40a325c0c2cd07c38de78248131144e33084e2c267c3e25329a0231980e31070c3f2c869f1b039c09011d8e06562408a45e41b489ce70c676d9a3f0c174b4c061baafa725d43dee231943ce04d857a37b80e94637a4c258019b0429916a785d73e3a711dd9bf5c055a84d1b7c120be2b04c8dfc32507f61094c0205d5ce707ce2a47bc79252538a5970a4527b6015a4815322bccf0037182f206e2d1488313af9c235878f99d306e83de0d0ffb2ccd9729d59a81f1d987bdb6f3478dcbabd5fe929ee56968d0539b0697dfdfce7aff4758ddb30e90982f6b67369428f6869ddfa2faae0d757d654f1d4bf0111026032cb28965406495e2abd5d3ca947458cc9ff0263cc7fc44aca5cd3387616c2ddfe9d39e82e2728ffa5ba4a11feef69e464ad5cb1a8c03e712464081629d75e6de9d2c4e32c2c6a6734f0f2b10a51d49e28362cd077c0e9556156dec7cbc97b0ba78ee490a99ef9317817eaf10955e8644ce38171cca3363970ae1bf5ce59c4a7f2c477cc38355f8c5dbe74f75dd78b09e3c3ab77e29e801615eff7946960d4ef90d81a77df1d6d6422d641790409468a28c53b5ea00ee3b32f5e0c81dfa803d184dc98daa2b9e8d7d927956ddb1b43c8afa3c6571fc805fdb9d66b0ce9d34097687a18ad97faf53aad20c396496d40e7db759b932d360833e6a13f08f20e5b0d93ceffe7b91c151134319695c827a65bd1352c0fe64b793121322c8c3798fc018ccb7e0417a74a26d62520468a98239ed9b21ae651c5ddafec1a091f77d0c30becfade1f44db9eb4ead0ffbf427f95959d4b1b973570f0fc8fa0e2a8db3a3f68424813f51f07a4b7f5482eab4d99a533e79ae69acf601c4d7bb4776373455949e299ab3a22f73380ff8434318e3ceaeaaf413879193b0d3524712e391e1eee8de46d4f6a71cf293a27207aff687db5c1ebc218b366c04deecc1410dc1d0bb20b22da28191e31e317d96720c745087e1dd7dfbbdf57402f0891ed92c74fa00393e219de3808b27f5b8eb8e5025ae12231e4a19d15e307d74052e41379b0a61cb1c28de9c92aae175095f51f3327745051a70e7796ac58e7817dda9da2b729f06b9d67af6e68545cfa560f6cc72481b71e2d303a22feca1b9e40d86e2967609645a3bdc72b9591bf330912139e1764284590cf9e70fbbacb659bd7b8f17b8d3c060c90da9d353481682d1242cf2f6222979b745f712c8e85e895cd863c41eefc1f9bcd384f0a60fedad74868fe83b0bad83fd43e6c76155ac0f141ecffa22ebcba2d54cb05706f3e9a45209ce57dcf77fd6adbcbf7fab206a98de7b4d4cbd2b91b537dcb63a3da17e8879b6f686486bed3ccdcbf4a24fa77698f2d694fd51b375d316cc6336af918d0a737a7c742af68e8c2ce921e2e3c18299c125b93517f9e4b632d0b0519ba23ef3b8273aa5a3be567948b782706db1216bc458ef99f39086aa7de77d3706ecef21a52e7abcf245f7e8fa94e4529cda4f9aa6d44c38a1be1f54df5377c228ae6013f0de26856d074a8207cf68db208035ed049406b2c9311e8bf2eed01d17f0094d0cf4ae075f0345d94a09f033bc3bc8d759fb0e4113b0a074e719afce85c4e4cd66ed6dd9869eb7488a3a33effe91c5f911571ca849e81b59771ec8fedb8587717b5bc73e8f983746be557626b75c784593a6138cb9efc7e2f2ee7e49a672ecd7ae44302ccdd35fb1e34d7aabd55bfd67add0815149b9a6b84f1a18f32650b445981d92f62020b6f61f7339cc01b438d04e72bd810628047591cba22bbc060a1db5a88c1409289cdb48448898fad56516657676032b9a32cd5fa52e37a897eeb00ec2fff681140c5ff8afe30c80b0f1a355d1e18bca1c7fe6b0db49e4ae71d35d08266b5995d8d05defbd2bae7b7443309d94d7e0cecab1a57bf804e0182037bb9a0d488c37f36a6629b429a3b0621b22aed3cad92926052e4390a756ec0e33b7610a127dbe9873043526267033a8beb2c7b1dbdee88bc12516b19c5d9b00a3b80743bfe9feca0d4ea573ea5396234937afcf6b3c96573bf0fd9322c85f4726f68fe288e76d25459251293ee07bd358cca4f8dd337a8c6fc77fc07ecee6d809763effb392924dc48ec73e367afe0a4fb169925a59c81eead0ac287fb161e4b4945d7beee34db99a63556f179388559315a8752a9b1158c97912da33a11547c684b4e15f5dc9f4569f637826616aa9fc22220e806981edbf6004002581eb5f9647442789ab2a0de455fe87a8bfa3dc4145768d3b699936bac088f2aa84ba82d8337ad15716dbcb0236f78184ceff78ce294e147686fb9fa920fc2d6e6f5d992cbda4b4fb15057b961e84bdff294409de6da42ec75bb589a46e67c9eaec1f4ebba368a5ebd7582d15bee38022f3418786b79c1d5c363502550d3c0b6f79a9a6dd841b93f1a63b29bfeeb2de0c19e647a8bde2efc59a96b7d54b18ba20faa0317921b683c2ceaf379be0a6a73b00d99c30c884935cfc3ffc800764ebc0f5f7e334c4fa2b78fc2100ab1ac0710e36bec98ecf40980b9a8f83f89ea8c9c72471d8bd055384fa149486d498960c3911385ce1b556cb0c9cc946db2d607dabfdf9260c55c13f70cfe4ca11714824c1236fc1fe8f5b2e1d0755ee01619d3db54af974db0e4dddd21455e7931f6cc1844a2658cd03f809fffcf4e550b63a6811054b8efd5f2d0cbb95ed360a4cebd8c81bc4c161252cb6b6ad0bf708d0d92f73d3a84b364b8d14facb70da50a258ad30ee9c859513cc0d102456595a900ae9ea5bd52749a6416ba3950cca5cd342a0bebf3c2a2ff241bb1878f5a77e5d99fe162730ad1bb72bbaed8a6e8084b313cd2e4b3942a0679e6884ba5574ef9dfbc6a9fffe9e6b357ecf29071ee15a1ddfc8ac62af1f4cd20c97f7faffb47b3ea60d2c5c3da417845f8cf4e12836b28fead1de8d752b6c5b4844b5d881cf4ce6064634b745b3da6b57a132ed2e4eb0837ee0b345eeb8e8e5fa1eb2024d2f774218135b82c8a60d40345663c0c0dcce5dd28487af9fc75e5bf9d66a3af3dff3e848069e6be029713f93e05e24c122c6f330445b084ee890e83516c33dc8d0edceb2e925471d13eb3186e4001cdc1efc12fa4987499e3430bd286f97ed18409918847847d00fc72506e93cf74023e7848390ee70910d48069b4441c40d4dde34b45933d6a7c2ff9f5c9632669cd85e0ffe377442308a2fc8efbb17eee45ed823ce0cd1da1fb488e9f3c890f474b8520b88b0c7c47b3cc1a4d56a3a4947a695f0a47a89a7f6001b8cbf0d44ee1ddc66c4e8371636edff2621e40282f7b11fe0515b3d387b646051d919113506752658cb3b02e8f0622d69073b87d311d3c7eef4b1600bf06312545f011a49c6bf83f98e19d15ad16b4bb93982228fdf1a882669af2af7c6667f772cc919b22ec9fb7139e8eb64bc194f4ec1b0425352a200957ae9b73394af9f5aa5eea6543db5707828e16bff44a565cedd1ed2013474d4b2835e81a9760af3f0c426644d34712caca212efcc881366f6497a98a46522838ac29fce9b0c13874aaa68630314d1d2b9854b0679cfc5d6bece90e39198ea3ff54ffef50a76f6b3ac6fab633e4315a479ce598c1c55f1490bff691d7f77c850d23f7b2ea3f8341e6cc99f7c9784677795ae89c4e796df8b83fd27b5aea9122297bf7cd7d2f207f27a63f13027b88cea3bfe06242bcccb54ce0a2d78e264625db507ba7e6cdde54c3c1352ada5b3b2c55b4242725d78b4986b93dae9c4aac5d27f5368eecf4a7861b0780a3d695dd15585817a584f4413b0b23b696edfcb5d0e3321a18141f06446071a9c8a9a6223baf047a7b55d311020afa26355094383b8baffa1fd81179d5c7c962265fbae2916165565f8c75b31dae0579d7f252ac94dbadbeca355f085b4469d7f0eb0ab6c69dacbab8dbcf547aff85c2a80953eb94d6cdd7bb43e3ff53b1a259bf1859e51c35cf7d035743cef19dc7340646bb11a781a2fb9b9d53f04f3ad473e4d908d30f7fad28c59a6aec90addfe8969e8f0a33ffb8a70ac1b8becc38360484078c43560bc09a10bc9687b6caf9c58dac503b239b30fa3d3b7d1a207a97ae85d60b6e5f675d5677c9b6bde8a5d5193cc38b1b67c25510b52ba92ee11332a228250985512e159207411920255153371466b504ac0187a05ee44805d34d58d3aef296ec520c54e8e8b32b840b5f2b91265a1b29a37151d728f6c471a31a9926d008b0291bf0db9a85b975333998e4f3d05e99f7520402e0d06747caa79db5614c093b166bd320c87828f3f19d091fe47c273d0608fd11fcd2dabb188827be6d75e163a4661719761028c52022d065ae6dac024cd38af298adaaba7b12988649a48dd4407526283970696f400309e22f8d76c7da65cbb10d52867af268e2e8e775e0662757e4cc60966db234afd585ca5fdb7a1de6330f63172c1c853d35f4e9cf2b6d3cb4e7cd57346e28abb9b3cef78f94362c749cf2a4fa0ddbd50f40f89f79239dcd0e414579122f80d80a63e75d2bc78e9f32b6ae43354efd0c2b8765eb2de0b5125788e14ed6324edd2ec34d83f40e7ca311d8c531efc622e7290b61cb615cce31d748e86b2a4161a707d1b264d3829bf1d2a6d4a52fce5c4dc3842d5aebbba7426595ef6d240b4e8d1f4759132abaeee6a72e67f3590ae496f8c883931bd32e723ee6a49599db7a89572a19afba26fa8589fd26ea32491199ed652cfeab1b90c869e1f224d72b845822c146c56276ce62ab94b3273b03b69a2dcd15ec9e4fe4761ec076d0f1a28d4fbe510255a01e1310161ad9cf172a0645b2fd022da668ae3170678c7d8202f9198f18ca3d90bd10385176c6ae8ce3e47004aa63d4f5a99010f167e5078141a8a06640a9a432c2c5c3889aa85a1b22cf13e39380667241c404a2cf0a67eea4c2c37e0c5184facd9735aec88c57af419d8805dc8569245b76940406305edca8a3b22a1f3683419b68256068cb5075bf9ec41cccbcd626e5cf064d1fb875879d6369d9b29642bfee1ce5eb6081b6fca47171c152e3130ccc34224a39df0a7df0b7944134f04c09cf09e4cf03532fe4b1687e49c33cd7b3dbea569759e78c905a23442bc41650ab68cec87c3318d24dab089686ee25be84f0048d2a7ae5ff5cb9c3ed9760f76f271a3fb4890205661a4d05a567eb90f7573621caf2bcfb0e00b94af9a2cd226714a5b8bc758ee1e1ca70f4cfd6b57b0ef4e8df4dbcc6ca1c188f2424a7fc46a3370281f5d37073ac96022c04e65fdd2ab4195ae67a76669d96336c35823105ff37b6f6559af8b196f608ef00f81833271271ed2dda59bc0ac58c5709e1f0834a0d74e0bc2c7f5e9ade0910d68aa16b032a415ecf09c5eb5fa22739276d5d148f01aa7b4afb11552e849aa80a2b22105c413b0f852b5c8f0f10071700e4c184be91374d8e8c69f269d4bb858a19f2851021e879a7b80ffbe06f28a44b666da367984957f61ba5562829a03740b76ec54ccacc42b711ff0cfe7f771c502e76eba2770b96fb75b67cd658b15e4e3d798a9bd52c5b729c88b4e5504d8fbd7bb0befd04f93ffed9c1fdd2507bc9f9e2be768f3b38bbf82ec2eb8a86d10bc7f16a5c41d15c485532f9e377fe4f23f91bbc7f49058eceb19cc62d53928ea97b1d5c155363a6dfd2d9fb538385b67a9fc7988b18268f1c8d164a3ce88f19a6ad6a1c706916368721b043df8ca20d536b30ea1f585c939367eb35a05e852ff744e61cbd4b1e891a7452ea8a5279fd08b7e45b97492fdcbe298547bf3d00bd68f231523c3099ed63a9bebca39c23cf16eae6463ee9a66b4943b977fd95cb8438f69d1a9d7de0e4ee74c0b9cbc4e0d9cc925e117112fb2c55306dd5a1525690feca6d662cbcaab6d5ec87e0920bb56d7d218545f1678fa9f1c41d2c23d25c7ada4adc364bdae26ac6e1205dd4e2c25b0b233443f63bbc6bfb026505a73b39a1cfa13b9f8b1839d7c363bddcd4f40061c0d0cd1173fddbaef75d4e8dad60fbcb2cd51a97bbf2f33e1433c5becfd7b713ac924b33ff491932db1e00ff9fd183a31e855ecc8746e39a361507df482fd49ee2fd9ac6e3b1356e521dff5996e121878e630625921690ebe4c7092ae62073f27a1763856c691cdff1a49600ca9739866fcb7a2f19dd3e5b3e590b9114d3cb00c264e7fecd1823c3b2a8c18df6923695a48ce6def01bbef8681f9f364be29e53705617b6e78cd906cb93e797b1107bab1b6aa65d90fb617e90e395d9e4e6e390d26c6ffe4703f9cdf9a26bee58d3c8fe379baca0c531afbcd309f4f0cc449c05d20d9e4ed8d48d0da2429bfc37ffc2f9e6dca5dd0d0ac52ec276daf7d6e1c073a197995d247fa3ddf86ac27d646cedaa16bf13b8a7dd20cba1d370df2272c2349bee63758df54959b8c643d1ee40cc8f00d2c46e7cb088cfe45ee21326a697233d07fadccd9fac07863eb6418b85a5e7c38b176b92d97b037f6e3e4cc2505f7ebebe361202fe55893d67df6d4c76877594fe8db7f4cfd9e71e75fd6c30fc1ed14f83c3d201fc6ee131363047d2c336238f5a93c2145158268c4a652e3c142aed97e0599767ffd2a44cc568f007ff9a357a3fc381087008fef698d0dea968213ffe7d36b7ede5a6ba1be0b71fde7408d5c373db90f7c6f9fa6c21f187f26cfe369ff8ecefeab9e5e2eb091afd55dd19e056af8c53370bd3319005c18f708e6f3eab979c4d476ab71ca45febdfc0ff8bfb41d27f879182c308ec2076cc563a623f322ca55fc335043dd504e5e62eff4cf8593bf6bd56379f32beaf1d58c516e12f96124269b0cdf49159366bba9d045a6d8da0de34ee929720ab8574170a7ddf3381280a3059c87192e3e011d6b38f1c1d6853cbd786c05972b4562aced772cef6f889027ab3c6ad8cae4b0d062309ad4ad2dc81656754d6690c4ada49756e7b2aa7a5f8589d4e054f59c2a8c8f9926b97f474d775e5287880dfc4f820554f2623e8f4af7a9445fedf754a5c3ebb147cea3ed6660f5f858d06e0aff30ebd37af98d87a0ea5e643e3ac914ea2d09e5f82b5b76dcb8b080b990fa71d4dfe8caf2bb34dd7ee7d8bf18dec3d367d8a7a71bc2fe786e59fcc0feff97ea6f947ba7aa1c4aecbc2b47588964752658cf12f6a20c09780a5871ab227b3a3a7d4e934320bdd12f0c7e3b6c04ee0a034bfcea90bdbdc015eaa42a1ae21d7a521edd22c324e7c20bf440cee11afc89ac1c278f72ca370278226c2629500306efddbc2fdefc205bbfb2daf4164d83286ad592f85a4ebe5cde68a8da6587ce66b65d1fe93ed5355e18d98fceeffea22e4b8af0ac4ede6023f0c11b16fe2bde6b23b37c8a252c41351fe972ed094f8f76831e5dbe638e70039101cf91372518913d40809ae6bf5a5e8fc53d272eb2a0c137e1749abc136e99560a3e97250e16f8af2dce84055f0be0acb6f58fff622ca6d5427e03733990edfb25c0de46f11ca6a53ff812afbab58721b51f13629d92b4ee21b534d433797d72b63c884e9625a7042e62b53a477537e7caad69a00ddee603135339078f817f970ced52064b3a83d46cd0449b0ffe1ba4552f64829a8bb6c9cba58d347226d54c04ae06e46d5fe59c1d6fd9d947611122d1f889f36975847f479aa743b832f6d59fec8b99f3230db76ee406a54cbf47cedf04ab6ffa2376e9de5ebfcd172065d8d7dbfd68d8a4cd59cb44abd9ca0f1acad666ee68f72f16320fcf0158cef035f3ce05283033418d719a3744b9e5df4dddcdda62c63657f1807b962a4fd6d57e973debfff32bb84355e9152332d61d99cda9ad4a35118624fc5852033ec47d216a16981acd2a160510fe33aa2b831f382afc62c1bf6c064da2052bf2da11965c19cfaffd905790f3d10b3d200aa9b3e0535fefa0f32b67b89b271b6b76b4022fe75632dd50ca8ab122276a8de486bfd73843ba13a755fae540a9f08a6be9c25a85b9cd2814503faa7b6a573bb3db2df63511503831939cb155651eae2d140c7f4d03bba941970e32d12a066e3e80fdf216aeb446576c53548a7da25dd0a204dfb28ec30264211e50b4488b6c46471f70c625b7aef2e019d087140af9cea44b2328507184dd813a75880be3ecd46342bc51676931cd5892f548896455dd93828ac01e93c3e9dfd4bad54821a6fd10737b3c566c0e3a3cba2f1e1027d44bd9325cbaa0a6cf7a33ed9cc349fb44784c06278aa664e059bc3e7be7d4add898115de9a301cf2e1851f7f423da9d3c377d9485ca964963f0392a8368c665ec569af750c412bb5aa1cf0c5ece90942741106c6d807ca27944a307d854d2f4d6b3e10b52d33701cf978cda45725f02b79a9d0d081386af7387997493da04eae49f07420d4db1ba087e2f1e36d56fdba3be4e7c7d33c4265eb86c49acfbb6f22140d79dbe1259713bc1bbb8c65180e898e9372074ef62c82764a5114bb710c447247dd0ba8ec10fc6487dad9c358068c1d498541e3f9671d557097c7ae02dcc4ec41b89fc8c98532c67e1c3d4b2f7c8e232c5e1beeb1c0eff181bfee966f83ebdac6a7e873753d1de733ffb08981d5fbde199959b3652099b6d4f41e33769b31fd51154f6c0668ebd3bddcbe2e4e780d8bfe78baddf620415fa1db7dbe188ff48156aaffccd3541fe231952c94c012c5be7b424e89f73c69b1bdd3d973f68c2329736fbf2fce7d1c6400ac57014fb37f5b7ab6a45a6258f40f627a3affda946ed5577e076485e285771a92ca2ebcbf20b2919ee4cbbca758fa7d180cf2fd867868d3483f4283d1b5c9b4d3f487fa4b16ab2c39c47f6b9b0b53f53c5360481760c80d8c7d6ebe06b2e3d1170dd8f8fcc5c0de574061a1fc15e1bcacf849ecee266fef1c641b5110349cff0e9b868200188e8ac40cbc03c0c9ce3fd40cf0d41043dfebd203acbb79100de7e6defa6b160d2eca5110ea8840910b8b96de87543f90a2da4511fceaab0bd18feca8fe45deeb7b871e404d67b7102155448fc30c6bc734e1e1b6f1043645889d02eaf3e773d1b04391e057d85941d464da085b056d85a2623156aa20b5efb2c84412ce8242626e6f3c83da3f49fafcd142357176924be2a70738c71c341757c0ca014f48dfd2f52243562781de8ea6858ba93e9dfefe2c11d84a13ccce7919a7a8bcf04c4ab49e98549669382112aaf11c0fa8b65eb609e2b0437d2006e683286ec96fb7c2c62b525f1052cd7c0dd5943219c53add9ff0dbdd9dd7766047fcb50d79652d5f5dd4a62fb907ff26dae12de3614aa2e0e6e09e9beeda7cb469acec1ea221e85f1ba36c80970d96b54f8a9d19f3aade328a3f98165292b700831b180e7d502dedb7694f8007f9f7853a653c70f07fe154ffd53dab175f2ba0fdf0310fba7e4f92cbedc55bfbc3efe35a629f8c624b83a34e86b704620ad70c8c930bce00d1a780ee57c7db65399c2e26e620171cbc01543b0bdf84477a71abe2a41a164c6be77632f1eb6c8a2ef97903e46707a726afe9ef2e3839f784dc23065f50be41f7e548486231cb34bdf82fc7ee9878860b67d081c97083371600286828e93d90f3ae8f15275947468350ae991e5ef969dff41c7f1ce346f971ddfcd1e7d5dbf3945bd8a6636a52bfd9d425e309ed947fc9bdd45ec9462edd8ae8fb4a6e230e503dabc1fc9fc0cf463a048240d6c6722168d0f451efc41d19f9bd1470a1c4913cd1d77890c82a85b3ac5157440dd58f691ef2a874c7f47ef376f3aeed52cac0f5ba9680c0a5c82d53a939043af91d755bd9e79f8818c5093a46004c60aa077dc0c0d2c9f8b61e2d56be617b651b675d0aa7ffe22ae9c20c672f67a00acca3576e9798a11097de9cfea5bd52c9f5c24623428bbba4ef5261dd43e3be87acf4a1794bb1f18883805cd56f808fae2ee0ef22a63e08a795221c2a7486c276ab60b5e78109abf1f626e59ade3d90c3749f87ede422ba455483f3cf7fe6618975a43428b25d63e07650ae127e18f324f6a612140ea4852946da02a0237ea6aa163bf4cf2887e2d0a08830284d89427d6a061973a58a833c0f6ee122458061f2bc802974cf6e24e6a6dba8b28457a964d71c443b46e456676b778a12991065a90418e17c5fadf7bdc9e416037e5abf777dc548cd4d393e29a733c8d4ce85523251b819979853c0af5c3fd49cd070cc0029e7184a80b3c50b2a4d001c33f3f3f3f3f3f3f3f6fb26d5bb0ad89421264da495ac1cb5b7952e450644a292599924a000000501400000000000000c012d2886d512ede0b610b8a0b28a9bbb55a9224d70e0809a1d1c516b836c0c206a555940bf5740d5ad5b1266725b9ffaa102dff8d13e010c1b123ed131c5ca064b9f042a40358d4e078a13356538cb5929b480a72ec601a9cf33b2fef495abea6dab0d1ce09b8c180909090101d39c06206a73053292f9f0c33391b381203c06809848480d15f8484d4000b199ce485aa6fd115c38926236b3a540658c4e02047bfb995ec3b3ea291351d8b82131202801960018393a8ae8e93bdb1d215c61722088018c878c5299a5c32a653731b7532b226a2a3cb742480990b2f445a20c3158737ef3b1d96ae4dc6561c84d8d3e021eb6e639215a73442db5a08a1247145236b5ffc9e40c62aceb6f35e663fa62cd69135551cf5f4c8b9c57713ed32b2660219a938eba520e7fa54c5966e47181240c5e1326f7ce3fba57ce27c8ac3f22821de6eca6219a640bf687dbf936fc40319a538492a899633b89cec1a1da080111d3de2001a5ad050c002980b2f4474c820c53108a921c4d6bfb8a3389e656c0b33715ddc17c57163dc5acb7c7979f7501c2c599ef0ee256f4a4071902dcdfa7c13f5cdb553199f38a5a0623f7e32a8cf124f1c7783f055df7d642d6db9f042a46474e2202beda49fcf6cbb513070e4482c1012e23942429813e7925f926b8826f14345c6264ee9274735548abd698fac8deca87102eb02c9d0c4f1627e3f259caca07429132749c7a6aa2e71729624983868c65b0f95ef2d69bdc479645c93314dce329c96389bddedd8c85989e3b8fa6b341565254c4a9cab4dc95a558617112791ccc8f8796212499c94bc75a94a29938dc4497526b3ab144c2c1b12c714256e5350b944d1dc234e52c6eedfbf77b476c429a4c87c82c6d5f49a469ca40dfd9a5515b766469c6a549041d6e2966817711e0bca4d9c2064d2cc38204311c7ab12b39a6dccbdf9449c5d34f3d9857ba97442c4f9d49450a1c45a1e3f39c4d1f2ff43fec5c92c19e254ea57f2882e298bde0b711ead905fa56a421c4d548a077130b9b76346ed9998840571b498ba4af3b7c810e2409cd4fcfd462fdb967301714a516247d4583aabf50fa78a6133fcd52549c9d40fa7502548bff8653aa4d887a39820ef6932b3b8a8f0e160a943afb65bf670f212d4668b7a36232c7a38c5942ff36dda78417c79387798d8a0fb4b12e73a3c9ca2a6a44c87b69325bec329efdf9e24ddfae4343b9c43c9d4bdbd318410ad0ea7cc57aaa2c9191d4e2b7e522b25cb6f750ec70b1a5c939ba49b52e4702cdb20ee44c47ea92a0e0725e447efcbc43ec9040ea714f775c48a699e3c47d66ed410f91d6d6f307cc912eeb3b36e4b1190e186737b25b199e69555e2369cfb3d9492ffb55495101bce275928e933ce6c8ad9359c920c99e792694cb3500d87d90bdb363126a9eb8daca54005bd45ae1064a4e1e8f5a55e92c76c27f2450e1c29c7835147a38b06a4fe2db2ec908186f3dcd5952825e80c2761d48ddea6659b9acd70b42044f528e1a7445a86530c26c64c9294d1aa9c0c322caafca499945bc65460c818c329069549b8d433311c12121252d9850c31202f93704ad8f0fdf188411b32c2806f0a5a6b941253e499bc37181748c1472024045321030c5cca265e5ef271a6e5829c24b642f923de5a8484848484d0d022051f81111ded002d14b08014e4c0f1c54b202404252234bad882c651c0d7c8d14508971c3bc0280258838c2f1c458e9832492f88cd0970d8d061722440cd0032bc703a1d13fcbf52be986d644df3709ca08b90909090624490d18593b49979938f880ba259e1c20b9111195c38a9cb3dbdd94ab068d1c2828c2d9c4a85d8a45b7317080911b1355307195a38b90519835c58bab564164e2a8bfa56b2fcdb8c61e1743f16b3c9a5d377935ce19c6f62a8caf4e2256c6458e19ca75fd74f3e9976375538c6edcda3aa6209b9a2909014830c2a1cf304154becb16a2f311953386f989469db1a195238669e6ccd1a2d178553ecd9af144fc9567b41e12458658d5f5f49529a7cc2e1b4e9fc321116271c54ccdba349f5cb864902c7b145138ebb576ab4fd494b73d2915290c18453c56df90c72ac628604194b38da86b8a9cc745bdd240f50c2712ea59cb3bef1cd655304194938b8bf8ab0cdd258263f07194838aa5da6f435ea114e77a3a225494c0d73d1080711d93ea7cc62d452e020a308c7aeae334d8d7d278b6c904184e328a1e9e566a9273b930619433856894db292891563a6e5cc204308e7efcbd69384cbd231da914146108e96224c926230a9b9495ae8176400e1e87ec137a478c925b32dc8f8c1e904cb574ae53825ad9d05193e388d12f4c6202a6731770f4e7b25947b261354ee932bc8e0c1d9e4c6dbd1cb2b652a1906193b3808cfb459e75cc4a8d20b32747050629e94f7ca92cae88241460ecede1b33e24fa660b1ef820c1c9c34933625c91bd456753738dfe593e5af2b8913ff5141860d4e7af3a14f3615534e54460d4e92da921bd43a2f992c0d4ef26b16213fbee425a529c898c1c964acb064f9e45d7265c8e0fc9b6e55c24879175964c78b60c7372024040d175e88004007326270f8cb1d37edde6c26282464970b2f446ac880c1c15f2cc7428f8953999118af38aee51a0bb1b0a9b554cb8517221ec315076919325a4c9bef136fc5e174fba2fc9828e2625871ca936d6489b9a02449ba8a83124f0a4a4d84aa7739b2b6ca8517222888a18a63da6f6e926e3193924dc5c9f44893c2e46f9f6c7741430b1a18a041812d261003152749368b33315eeac5f8294e829a3ad93296c4556a8a83a535492d297d259a60298e7942ec92bfe553ab90e2d81637a524c8ac3b4d8dac89a420c70e33cef13b6a608c511c47758945df64525a518043012121c9a30007e21d3144714ae2654a2da66fdaba9135065880061b2046280e1add3e4ffa87dc3882e27cb14ac55693c2e8d0c5f8c44996cba6a04a104afa313c71b65b139a3aa6c42c3324e493189d389c3c41d6bf9ce6157f64cdd0e8a2013a4242caccc5e0c43137693dd1f2a49da0e44c1f626ce2f09d419b98498af52a97e310431347d7307a8366ca26966864ad9881438c4c1cef6db47a895f0bd947d69207dc98c0186260e2142addafd428a9c4d19b895ce22488ad98949ada79cd58e2a42994eca3ad41d94975ecb8d1976254e2642ea2c415b19872967c2006259cadf8367d61abe391b513740e11cf499c2bad5e4c827755786f64ad6c10431227e9e4cd621f27a3f686861679881189f3590a27a9bd98478d4a49430c489cfbe5e24585f635dd1f719e313f7d9642a659ef88934937332a2d8485188d387ebde689615d113c430c461cf76294cdc6918b3187c78517221d88b1889324732bcc04993249592d7e0831147132b1cf4e5f87cce8bda317a060889188d32929a9ad7ad10b3110710ab1e9546598d8e396901033113bc4d9b3d3546b12374a44d4d28b1886389f5eb7b2b137f19a8eac318d2e1ab0e375e8e81c359a025ffc8ecfe12121c785172201c8418c421c94d86c49ca275e051927c4f92dda059954d413641c1212122262a976883188f309616a54ed6532c916c43194204a56d05b79610cc4794b6f94893dd167298038e87237b15df3c9b1de1f4edb27ce4cd29a6f2be687d35e6906d5175a93d8f4e16031c86eedce922a347c38e67a0bf2b173529c7b38686d9ad81ad46b8aa91e8ee12c5cb63f49a5b45a8c3c9c4da5cc7625dc25919303c4c0c361b46d5d3231a2521cdde1f062afd9f756291fdbe1b417a237e90cd66fc7a8c361545410beeba72e753a9c940695e4680559eae21cce1e562a4a2b996c4a7238093f99042d2553b55b4e881187e36fbe182ca53ca6ef86c3796344299d3df7255b16a0a1058daa000d0a6c41636d80f1450d5d428c379c46b4c94fbf902927e986738913dcd364d813f9f11362b4e17062b29a20f4e54cb6a60931d8708aab232f59abc8a02c6c5b88b186831ed98b16da5452a2aae13063e7be65f1f22bc63611230da724c824f48f7c15eb120d2d6874b1058d903a2ebc1001802862a0e1245d3e41086da9ee3536b28636011a5d6c412324c413cb991634ead0a0c01634942911e30c67cf68ba925535b296dc781d35d20d1c5ad8b081e3c65f202424c78e1b383c2424d70f31cc7090295b22b2436878885186534c5277ded2e4aadf8d88a5116290e170422d4f685af18a97861634686841e36968111222821a3aaeac21c6188e2364a524c6a06b2d6834bad8824648488d9c38ea9a021332ea75c83b6daa2162b6221ea5386905f53afda1694a6a642d0548e4ee0606a4e0418ac38e14ad9e117296d691a5d1450356e0318aa3eee8bffc728d288e25d6fa629a04cb1fd5113c4271389345cdd2c93f77affdc00314a753255d7bb7d88ed6641d273c3ea198f64c6a77b6bf24118487274e62f2ae24b59c7c71d2e7d189734972969ea8919d2a3c3871d4de53fd21834916c581c7264e2afa94cc4d99db60a30d3c3471de9354dbc24b9938280d266ec8fe5c36194c9cb6bb2435a2f4366ca420c78e4b1c4e1a7513722527168eace5781b3652081e96d86f940c6262c3e64a7892921a7bce4d7958070f4a9ca477a939e1924ce26cb65d66e1c2ffc837b256e62189b35eb0501725ca9b8047248eb92e6c10b515a192d20344be0106061e903877b72995a406e121465b048f479c6493ea68beea199366237838e21a118607234eab9b45d97fc92763b9083309a53f5f29ba49236b366cb48848927448488dced18515527828c25cde26e46c4ec6fc02478e1412c2fb098f44d82173d6e90cfb2a4144ea74585e6e5232163e44d9b67c73a98628866890164b9051edf02844d286b960c29d1cb12e21b274b2529d97d89644c0631007613a75567eb468cb0571cab81822c34fb734e81188c2c26290934b71b1dc3be3ae5c6fe4648c5f1cf000c44153eae589bb38a34efe70d2b7936218d11b43c87e38fda553c9849365739bf4e1ec16f3f533f4d2c332050f3e1ce3089f8b2dda943c6f0f65b111a53296ebe1a04c74292dd9d138417938a5ecd393c2b88a50413c1ce3e62f6d821455792b1e7738c638cb7f692dbaa132112b07050f3b1c5c5c63452b29539171e8b881c3cdf40c175e8840c0a30e87eb11ee3fa3b94ae8860e67bfccdb272c4fbe354181c71c8ea3eb528c63b296d695c3d9a46cac932e5647ad27f088c3717b4d4c55ca649e89f180c3b964948d7793faed3f8f379cb2ce26db12965d52dd85871b8e712aba727c2561d5c2a30da7eb2c75ea3773a46b980de78fd327c967d667e2ba86f38996a9d3ea4acb6847d6540d477d379584fa52f1ea3e4bc3c1d45ddf8592a46c7d828693cda5c95c9f6a5a97912df6090e2e903dce704cb26a9a37d9352769f20b0f33580897e1b07fe9e4123dd9af4f996307186438a50b9e969ab54c56d0c85ad2386c8484ec7811885806b60809d12d4bf018c3295c6350bf3b794bd4aa54c1430ce74cf59139af92a0cc1486f3062586d25cf2c8dfcd46dfc8f123de2e0246182224c081c3c65e058c093cc0706c79bd0d69276992c62f6a8ce8083141a1171e5f389f091a5bbbf55f474cf5c2f1be44788979be4cd48cacd9b0d18e371870e6d18593fe188d969b432893840ba73c9515b3666bf11df1011e5b38c530b5d164d0efb05f0be73f133329134db270d42416644cef5a11212c9c56de94ae51275a9a5ce138dad4465968cb59da0a47134354e46cb08a53154ef27b27b987f2d60d15ce2fe2c4da1cbab4b83c8583ded5b4992c4f96b4144e27c6fd908d7af6e246e194de33d32babf55f85c239dd4cebd5c87855c9279c4e8a3108939d130e7b9b7a1b47453db535e16829467d3f4c90b6b991b51c389248311d393ee9b8f1856f600d9307134e324952999896349794e70a782ce1a0ccd2df5cc53cfa948cac95f9c04309472d95a69b7f4cd794ef14d88246484848888e3070ecb8f18090101c401c3c927094ab3413bd37f15ef6408285781ce124f6284b8dea61979b043c8c70ba16f565ea4ab473e4781130fa8b3508f028c2314b5ab756d0984b8a236b227a8907110e9f6eeda6faddafcc91b51c4b018f219ca4b3e0276fc63d84602123f0088207100e1a677faa62fccecd073c7e70bc9333fcca787ac9fc7f11860e14860edc80870f4e317e2a09776ff344529063c765c0a307c79ca535d388d390a98fac954004c70e1e1ce6a445d514622563e628cbebc263072721dfc3bf84b73a31d1c1e9842e3b25f31b8492f5c8818594070e3ae0718353dcd83826cb86397114090f1b1cb35b38c94dc818ef441dc08008d0d08286038c470d2c84041e3438093f2a2549bef5baa8a1c70c0e1f4a9227ff09e25e2f29c8b1a372fc8e30b658409a4088221a3c6470aa92462d498278c5296370364df5dba2e1effff380c1a932eb8e122709abfb445023ddc0e15ff8068c1158bce274f9a6b792924fc9edbef00d946905b070c579636cad643a5e4db7ad386ebbc87171b75362c5f174e4f2fc974ca94bab38bfdc954ca6a575f1abe2b0e7164b36b735a9245351a95cdaf29794041527394f645eae99df12d461ca290efad2a4d097aa66bcfe0216a63895702aee72b88ac85a8a63b84d6af43fe66d4c529c3e35674cd047711a73b51394aca01d8be224458d3571e54efe3df90116a138652ba162a7c5503b1f1487b32b7d952cfca83af9c4e9f73b4b907742be483d719c4d2ac6cae93227e63a7150f5e69969acd336c9032c3871d079db69f9dc4d1cd74f58127b4bacd4af268e27ee6535c75ed00dfa008b4c9cd48e87759b92bf49ab02169838e9fd10da7343a9b7984b1c56d3ff87d2722242678953896cfccdaa34e6974a9cc42cb12e64e68a49959438463fa5ccac32e5c47f12a7ac27dd98dccf122f451227b94b52b3d4a799a0148983c820d694588b504a84c4314b292dee7fd94b921f714a52c5ce4b2735dc061d719284abcc917933a6d41b712ec9f29d2435bc7255461cf632988755ccdaad2ee2fc61c97f2b646d4657c4392b26135b968269d589385998b54a9967e28d8b8863d85897ed7dafc1728738955cbb7157742841a60d71fcad144f1a7d2bf171210e6a5d34a8ccfdb72327c4b14fb832efcaad16e7419cffd2066dfee5994f50102729562af69dce6d2b05020b409c35c9156e9b2e7e6712ef008b3f9cfd378454ebfd703a25fc049d933f94d4f5e170296ae94aeb5f8d277c386b924249cacf4a4c16dcc3d9f45af8eee78993d2c3c1e7379489367e1b5b1e0eca533679c95782d2141e0e325f46454b2ea5c4ee0ec7dc95df4d4c2556c8bc1d8e49143b6194fc0f37b13a9c774f9a95a4221d4e2adbd24f9afb127299c3d9c41436096697d972391c84f8cbdbd3b41f31e3705e7fcd946f576583090e272184ada6fc5026e5cc1b8e736d41df66798bb56e386b69bfa424614d3849d786a39a504910f2c54eb08a0dc72b319eac226377957c0d276bb378d2b26a9574a9e118d53ac7e4ca52d89a86936a89dea755f56b8368382971a62594924749a53e03b2dd52ea461199e1dc6d2d32653c29e8f5ca701ad5b94a3b631b2d27c331cab56b45bb30177d0c07a1ccfb5490cb8ae189e194da71963c4be81671188e715f4f5566b2929703c34989a5a49167d29edeea0b07a144c456d5a9a462e985b37a9d90a315f5a26b5d38092fd968696a4b92e5c2e1e42c336d56e25a0eb770d07995b405573dcf590b47efb1f495aebf4aa7593829199ad28fb61394ba5838556c8e14f9b47cdabac271c3e4b68a0be6a64aac707a3733ad66a228bd60158e29a5ba0b25bc44cf940aa773fbd09535c12f8753389cc866db8f2add51a5708a3da7d36249148ea14acc5fbdb493520685636fca196f4baee026fc8483266d773dcb7bcb09a72a6152f4942ac9b41c59a3916c18343e47183a70d8701a68c3a021c207072c9a7094d55bcd6f3a139c14b060c2e132abe4e93271848cc512ce6d4a4c462fc7dfb88181911d3534101212042c94a0fd9e9798e269dcceac58b16282b38145124ea3e51bc45c7e6c4f4838f8dfc8d1b9b9a9ab3fc2b924d5250679328ee5d1c89a885d13b030c229491795c4d314c564b50807997367eb65e3a9da8d1af9856f8046175bd09040081f010b221c4d8edef74c92faafa4211c5334b6a858cfbe6422849329415d8dd91e846c53ed695c160d9b64e4cc0c5800e1517ab6a299d6f192fee0601636e57809f9e0bc622a6a49d352d9ec1e9472b27a68b856ccf58a4902163cd0f592f63f95276ec80258ece070b14413111376d4963a38ad9eca7fbf29b30c737092dab6bfdb3b1c703f26af65885f9027bbc1061f873889a89eb2b425dee9df10e752194a5572edd1275a8853f8ab7c6e25f79a344d15e18310c7933f4189d04bf9bdbd8f419c3a9334bf745d7a2c2e860f419c5594e4a7328a92aae4095b8ed75108f01188738a8a49a952aa5d52e60310a79dcb9c9b4c18a12da7848f3f9c4d63bf3389bceac9ddc0c166840f3f9cbc2ff4b2bd245946cdbfa377842101ddc48a818f3e1c3786f0b09ccdc81a8e1b66581f7c388889977db4a5f7907e8686b494a23bf8d0c34934ed050f4b5fe27741f8c8c3b1b2c4f678336931fb236b08840f3c9c434e448eca88f13b6d0f3eee70faaa92266f1093a406d9e1b44908edf378917a771d4e324fca9e94f167daa6c3513bc77463377338f7a6f1afd7d196c42b8763ae6d8b41c76457cbc5e120365799c59244dfe904680f460abac8a101331f70386a3429881293a95db747d64ef037446ee0c004e80b3ede7034f1648b1ffe999499b8e168f2757456bfa46f501b8e496d6d16212766fc101b8ed699dc64ab681e9759c349e5e59e70d5701c956694d0539a4e491a8e9f9e49ac39f1b73744c3c9046f533dd14e432f6738582cdb5f3d7157f4668693f5c6cce8b631c147194ebd554a3c69f15da74486b3d958d40db9b160a7319c825f5e1216aef72d12c3d9f2a554f1328815290ac34934f50da267e7c45283e1642a54af89ce5f384952926795827a967cbd70ec0d3bfad6444d49a25d386612a6b13f363fe4e3c241699b582f962fee2b1d1f5b382551419652c9c7fa762d1c935d10cbdab449ad958573f5ff8cd0eb8c395446d6ccdb385fe0c8c1007f302e1012f2c5db782ebc10e90f2c9c2eb3ef54921d69a97d5ce12dd75c418d2831d9c8dac88e1b65031f56d0d2ff96ec53b249012ae38f2a6cc104b5a0662abd287203070d2d68d0d0220909e182a3f8a0c279bf57b429b1af848b7f4ce168fae1a2f7a2d6c2fd2185b32893e43b7131de09db35e0230a274ff3136eaf99b6e70f281c4efb66ea90c16694f0c89a4866e1e3092753491691d7721614a951ca153e9c70729172c2ff9924be660a1f4d388593b3a441c3a6fc98f0c184d3e8516a7e2b9994d71f59b35bc2c7128e974a36415f8492c25dac0e1f4a38fb9f54317ae6f4d99a0e1f4938880c4b52be36ae493e120ee2746c6c2d7175137384534a51b2e24aa6187b618bc387114e19ce77eee5c229a152849330538b73a7f64eda140d1f4438990c96de425aca44cef03184a3ba867b4daae40cb9a30f211c84cd5beabdd37515253e8270b23671fb2c06a19695233e8070103e7b4a3251d2f296ab888f1f1c36f89ade688aa5f408f1e183539ea033334666398d25e1a307a70fa9255d0975644d07f7e18307a7ec23539d387f91de1e3e7670125654bd5918a54a6baa101f3a38b9ec5a8f92ac446a81f8c8c161c48959fa456a4aa91b3d7ce0e058d952123fdb9a956cbdc3c70d4e424d499acf7664f09f0330870f1b9cbef208f126877a312b0e1f353855cecd1742c375bfb564f8a0c129996c49c2a9124a8cee0c8e49a92eb914946ca7a68cc2870c4e2a2529aae569dba3040a1f31389c98d1f4c9ca542549f1173e607096d754ab9a2d4b4286bf30e315c714a4d949b549cca0415e98e18a836c7f11c2db6dc5e92e88ac9cf97b3f9515a73cc94e66cb77b159dc2dcc58c5712caea9fa14d1b4550866a8e23c7b1fa6e2df9d6a5003335271da983309e1997f6222e506335071ac31b972faa73859fa9bef9850f216c1919c290e5e92ec1d21d3236b3a7411334ac12893ff52a5577422381266c20c529c4bd82c6b1b4c92f29010be002862c6284ef2b5e49382d68bfe25519c4bae6bc8f6b1cce287e21464cafe27ce5fcca3041427dbcb2469ad9f38f8ce5c3ad1b16282ee8953c538a6948fa749a64e1c3fb4096acdb4cd6738718cd7aab6a4bea2897b1367bd114a7c1f8d260e62aaaf3b53a4298f33714eebaecdcca3b4e7644c9c6c4dcadc93d94dc3bdc459eb438bee6a2d718afdaf49922d84285156e27449c89bf81b2a4f474a1ca39a920f1b25bae6cb2452f2262a4c8a41a8b1300031982189e3689c4b7dedfa793912275375c9f3843d1b7d8584141331b648cc80c4b17534b456f6ce55f811e7f1d5fb122c88305974c4d143c993b1620d98d188836d940d42c7283fd9352ebc10e96206230e234245796870135e2ee2a8a32e4693a4132766a388f36a123559f1b35e3a0b6146224eba96334ac333c95741c449c61199fc926a87384913b55f4e8658d2dc10c77a15ffde6df32cb310a7cbce0ccddee5aa13e2e4bfaea14a0a254aa63461c620cede6f6234e12717f4e83830431027e135c9d49b32891d6a204e76e15aad227d4bbe50600620ce7db3567ac25de6c98cac89e0488c0b66fce158b25254f59f9afcca2d98e18793d61255192c6e92847464cd060e1c6088e048960533fa709cdf529ab42519a1a19135dbc10c3e9c2ec5bc259cdf26d5e960c61e8e274cc5f7feecd37f1a59631cccd0c371af62ebc6ae3899f59135111c89da60461e4ee1b6746375aff4b691351b39f070129723bb637143c532b29677388bc66c8a552b25e99391353b9c664bca272ca8d0a2088e046930a30ee7dfdc2a2a637355b047d6c2a0c3418ad85eb514ecf4c58caccde178f3f61532a3c935d3c89a1c0e1a7bf2e4ff950e251c598bc3f1dc4d6dfb95ca8d9991b517c1915c81c3b1c2afe6d26f388b9062c9a2c6cc5a29236b6088e0482c0633dc70789591af5296d7b334b2f63650c360461b4e318979f94a52bb64ab604f30830d0729224456ed06919a60c61a0e7732fd4fca9691b52a2b98a186d4259d59649d5ade46ebc091c38c46170d102181d7d8513684196938a812b59cd92e8c9a9b0387885d0766a0e1f42126cdb633637b7486539235b254f6b8c5c598e1b0794ec652cea02fca33ca70b67c3dda72656acd35830c07b16076a19592b03a97e28619633859cd28f1e57cbbcf82838bb2841962784705b3fed126499543a38b2d6890614618ceef31a3f93797e4a21ec30c309c3cf3df745577c5124576c6174e5af28a30f9bd6412126678e1b86f16949413362ac8b898d185a3c818cf6fa399504ac980610617ce99f635b7baafc9322464a130630ba7fe2f7f3b8b75694e723c0970e4d08251653563da330c33b290283931ff95e592225c988185d388c9ae6d257c56aa0833ae703c0f3737dfb826ae3fc30ac7afd718459e2ef9a2e824a884195538a6902347e93e13458ca6851954e0ca55638c5b0cb72c5bf115639942b69a2ecd664ce1945e4f4ca6415aa59547d67686140e7a2a73fe468d10ff8eac7d0e30ce140233a27018214d9c58137acec60287195038089d1f9747365e69dfd430e30927696682b2dad02e1a3713b1b2b3c30c271cd7926b9954def9966fc241c83f916f4aec143361c249fe53dda66a73e4972ce11c2a35883d519ab4e64a3888d6cffb7ea991229484c3c9b0194a0acffc1021e114d4a5500debed12ea239cc478ab13947c5193d8463808e19ef6693145389670ef3527225c6386080779e6ed35fb962fbc4338a9f18b6e32eeb2092a4238b5885da8259954062f08e74aba2b2a5c0e080795de4c8592f9459c7e70d215548c15d4af98693e3876c9a4736e72ab05abb806337a70f8cb384955185bdf130f0ed72647c8ff3093b5dfc17194bc92a41ad52625131d9cc6620c1577e14e359e8353d4934949aad5549e0607e7cd24e58bbdd8921abdc1c12bc32565ea3acc441b1c93d4a925d7d99a57656530a306070f196a3497954c23448393b013329f70af331b9dc14154092fa29270394c23cc90c1e9472fa82498ec118d5261460c4e5529b5d7f7da52a73b6ae8a8610243a38b06e0d85143478d0c2436be0603444442424242161012221212528919303889899624947cf206599a2778bce2f47a2769a9a879335dc615474b497d28297635c06843058f561c93343129cd14c3adefef3770dc48c18e1a213bb4080909d1a185162908094935727c062470250ccd800dff44040c1d5c8c0b2f443e92e0c18ab3896565c2a570a3171129b7048f559c55439688ba94c4ca2253c5c1a2080d9d1fb1c14ba9389898a9cd848df4fd0c2a4e5b416a4ecb250e82c729ce962376f3a50189dc37e14cc5e80c0ba990051bceaf49c6744d29838f46a38b2d684c218b359c0475714a3c33534a9dd0d082c6aba0c60544d0140809c9420de7d875cdb167764ad2ca81208b341c3c546ecd9434dda8e390051acea3393efb19676498ce70ec7b518216e96b41970e3b1926dd82ca97e1f82247c5d36322c3e9db4b8a1b948ccfd08ee1706ba5f169d9ee476238863f299609539238c90cc341d4eb9e9a68576212188e399bb23627e2825abe70b450a6b7349fd0289abf098c0c5978e17071d625e9ae2468fe5d38877e96d465722e1cfce4fa67186d976eb485b3494a6d873a91168e1a9e553d367a7de92c9cca43b7ed49a54ec9120b474b177662b246bdb0ae70d4a826c86c95a1bd7d2ba45a26af3126f5d42016d3d444933d6a3689ca812caa700a97b229df2b5aaf4e85b36e6d09b7109766ef299c32aba9fab3a449f87b802ca4704ecf5c5194264da53151389fde2d75993b39640c85933c13dae6a56e37d2271cfd94fe2b25b75dead20927416dcfc6935e13ce9a74f48e98c9b45661c2c1755d633ef1259c4f2c95b6e354d7d49785124ee2b67f32572d986c3b218b249ca4fa522a852a29bce6d49005128ea5ed349d993431e69ced0c591ce16c23e3a425db58d72e0b239ca41263be98b25c899661a3d14503b228c2a9dff49b10da44bf926464edec8e08c77e33719420ba4343164338b549bb6ba979296512219c72aebabf247532321a84b36aaafe50b94e881d08a733d1e4504ab8e88ae5058090c50f4e526f938eae66afa4d2e183b36c963237c1e82f44921bbf278b1e1cabde4b54fa8bef391a01c2c183538cd135e97f9d944b7e64ed068e1a2228a891ce32078e1c393e0b90c50e4e52e7afffa8a42a323052b043448404ff602c05b2d0c1296ecaa2a4249734336eb90c649183d3fc9f343397e4220b1c9cf662fcbaeb1f992b6f700a1d933445ed6e1f51043770d8e00a6461836334298955d98ddba7acc149d2a752144d359ac9bac34016343879866d5262b9174735b286829fc1a9647b1f59a99e410651134a200b191cb5ee7425d94797d8a22f6af827658b2c6270b09a91f95756f4c9cc02769f1c04b280c131eff3a4aca056329f5e711263661284fc52d72477c5d163c45bea6f5a71929fd113f5c4149dd980b0e27041e9de689298087915c7989113839204fd7221551c7446c6f5cc7373259c8a93ca9b2433d94ed75e0441c5f1cfc243cc89d1442f39c5414f98dcd86aa9674f10531c67449fd032a9529c2aa6bb345933878f8e3c0021c56993a64c57270833bd19c5c15d7f6318dd26762da2389989b65431b9eebbdd0024148775ad203ada82e21467abf39468322629fdc44997f026bd78a75dde3c7196ebb62b419bf58bba1307a5a2661bb5931126fd399046170da01106185703104e1cd64b5d123226e9ecc29b385c7a1393cba99a386693cdf72fa9c9d030c406209938057da17b25697e51e2c85a9e18403071749372a5946399790a528d1d9738c9a0414993d637464605104b1cd39d5ad41aeddcd0ae005289c3a950999256ecf976b4884839308050e21494b4dfd014adf6173fe08b1a3b42b60032899385d6d5ccd4162c566aa01c4f81909090100691c449976ddcd320e719cf1c2724a4737c0189c4c1477a6f9d88f711a1c88d24f2858e3e8188088e1d45012090389fa4dc344d101acd2479c4318ac6ac714fda104adc11251719730525a86912a411c7f3b824e66b67c431955e4af2c60ff71a2de2a4a96b7d53fc5267b2220ea241754b875af1cc26e264ea7dba82cac52a2522ce6b6619c39de4218efa6bb9c1dbf4ef8586387cc65ed2d1ddd07b21924ffb86fb5d226960b4042e704988836b4cf25dd8e4dddd0e0244109d6d4ad1e8a201852081b01010409c379d9aee8c56429709c81f4e62bb29316e32932c2941fc708aa3d75373a5148307d287a3ca5f12b6d4a268b680f0e1bc49e651199e178489a501640fa7a04dc435d9bb8951731940f470f633c14d5d969a09291d40f2702e2d75e048376aa48ed75105103c1ce7c249c154984d728746d68acdcccccc0caf6ee1c20b11014001e40e27f55b99439cfa9e7cb301c40e5645d1be3fe9f4e607903a9cd38476493341868f8b1640e87012949e609be2893d1ded003287836acc255feeb7c4174b1a40e4709213839f9c7ae24cd4d10012878326e1b4a587fe8b25091c0e3b6b61e4dbaa2bb66f385d9dc97bfd993280b8e15831c9171bc62b956a6d388d369347ffae44fd0fc286a3669156b2a46b5c908eac5d0840d6704cdd55256e3c0b77266a38db49f94bcde68af53a8e74a34601a01420693889b1f4f9254d7f270b090909d9000d2d684880861617f862878e30469024e09f01c98702040d279d3d3237430472066cc346e3dd8840cc708a49e570711b1fb5ee034242ce44ac98e04c1e48198eb1b22deec42ef91622c359364fdb88cad028b2319c644b3fca6d7428f12e10319cf5d5847da67c4bfae20490309cfb45968618ad703bc17092b2d2499224cbad6f10e40ba70a27985213648ce597170ef2c5d409f515bf1407e9c249935872590c53599bf1000817cebb76f5994cce51e2650be7f6907329e8510b07378db1b2a45f0248164e7349cca1f5269da4435838c62faba4feb5fdbebbc2298d12ca425c87bc18df2c8058e1b8f2fa22c4b45538fc67ca5ca1c92449c30208154e992ed3880dab6f9b640ae716959be56545e5aaa57070cbe79dc95d2bef5b0590281c6be3092daa4b669e7484918888e0460d912ff81008140ed76f4a383529fe4c44409e70eedf8bc1ff74e4853203204e38c83115e464281f1317a30490261c4cc9a16288b053a94946d6de06ea430208134e2a9a142dba614e2c08204b3809d71354920d277692663000a284835cfce67aad7a8c6a8a009284e349bb24ff5210114090703099a6369b54ff9724a5007284638c139336d31b54f46f042bf354b6684caa004811ce5ff23b648c92cf7a1194128010e12c276dc491180e90219cdf5292d4f4369b8a72642d87888e1ac56874d1801c3842ec15204238f5596e2b11275bed07e1b449eeecae418070aad45d4abf648b9639b237267061981180fce0cd7899528a4936312f1fa07dde6209a5843271295d00e9c1c162a67c45b55ad36ca01a1e46f239d676f883111212802280f02015ad64e2da4853fac89a8e564b6e60a08c0520f5e912fa57331e80e8e078f9747be92af9729588a8f10640727036f17abf944cfb7d494d00c1c1d1f6634e8b3cdde02066626fccd12b93661b9cadda4e562de982a6ca2801a40667bdb43797bdbf6a411a9c667f4d5a926e5bd36483003283b375f6ccdaa59294ac321040647034492a61829762709633217b553716ae7902080c8e77a1796a5b3b4a8d46d672e8023e5e71becd0c5b27dc986dd21547ab0da5d17e94986434818f569cb3727a49ebb1d2a97db0e2ac1b97a6ed9a65117cace2a4921855e1ef4f896944c1872a8e192cc3fb43a81fd147d6ee52712a2558bed732c70e303e5071d45bb7ae2d19359ee438c5494c2b62954906b3e0fb8df6b3f1618af349f15405692717a21d592b1bc14729bc78cbeda357d223c5b924559a75f3a237d5519cd289b7934d12a14d9217c5f95f638494b1b6f03c14c78aaf624952b3c9d2088a5356bbb859a3892663b6a3c6278ef2721e4a8c1d397fee87274edb632932335548eff4a313c71493d0277989fa2776e3c4419f3aa5924c9366f9b4894e08d34b79e2a877dc7813bc5d6ae220dd2c37dde67459dc091f993897fe4cfdb16226631c59631a5d3420051e1262ac580066f08189b36d29c13ca3c5fed0ef254ed7f1215b49d01ab5a4860e1c14b0c4415fb66c3661443bf4800788e0b9f8a2464888880d30bea81112a29538f688dcb3b0c1237c50c22eb17dc4fe654dda91b53b1b7c4c82eb52b9f2e92c830f499c344c12940c3ab784ba46d6443e121f9038663f13aead94d8b50e1c60146bc2c723d2f199d7365ee788c37a09328fda8933b53105c447238c6d561dda1adfa6deea19373458e6d10bd1c81a1a8d2e1a90c888f3bb6ab2b31323564d43f858c43946d7a67463bee1641471ceb024859e9ab510f1c147220e76729249633285d420441c637f3fb36788d3de20218ea9a8f4b145b3601c0a85c23010c320100ace3b03e31200000010181507a3f1984017b6f5011480044d3a32502e2c222a201a180d05c28130140e0442e15018100a04c3601404623051e21cd909578674c7a185446496372aa357a01a88a1f8e038510bac962de644064a15be548c3f420c7d432949d1098293614b1320b187bc87cc32345099413f9fdaf7f900cb1d87ebe4a31ad0da56be81d663995fc62d5ae9bb48ad9174460c46ec4758d5917734c5cae8c3cd46bbf248612416fb8833524c33dad52619abe088120e512164e8c8df13df594e621a528559ec1c6507f7a98f049d651b95f47f2282a3aa6c0b82a9f844fa037e9d674cc3081864d5320eafaca96da0a74628bc6d546eb4d755b7a51778b1a58c15c7509b2646ea132c6e7829d330d7d2e5dc8f0e335c3ec64949821e5f3773279b53e57ded03e3387061bc131702fee8b09ab42f71ca7a528088cce1e4558e2d298b9a3a0d658080eb885c973402f8d539634a39bcf177594a017e0ab1cbecb9f48a32103109193bc059d68e83a68efb4301c90b50e1ba5b8ac9094d3f2590bf603cf88f481c6b3fa94d0a10e0cbe45ff702b733664b96f369fc5f7e800b98a073c9d29b24195343a8f5976e1ce5ca1ea51c61dbdb00b410db5cc63627188216ff89660c4138835247b8ae997c0c1be91900e4abde7ee21bf0b3edbf7200ef2407ed41561dc40b346b7d3f3c2381a1b6820a7caa3d893577b2b66a4174f77442905df9c8b54a496416ba6cdb790525d3aae67dc925b8d7b209425d000065efb18b53bbfb3698307ab737959cfe8fedf2eaabd086ea0851c3ca6f686dfc1d7aa6086a27bc0261e09c29426890c0810d0c52d123708ea80bf5ec22bc3715156dd9f6d1643910611f10b611b8e150c8130c926eecb959dc8c6021f4dc6d66a7ecb63d561d2cc2f1798fd8b1cfab087ee0bc6081610719ca067d2ccd485325a6023248c4036718802bc68fb058fde93e419d0a69631415f13a2125c500c68112e558a8ce3ada01204903549d9c754b3af16b48a1c249c75853ff2142aa5ea9e12086145830c506d3a65a4cea96071b0410c2ec286cde2e086ffc33b563305694da2093df5f26a80d728fd2b21c0a61834897de652d6801398802d7322c350cf4bf05e65f3f757bb024cfe05254acaf25972b28b08840de367f88ff88c635c269c3bbf48b88bd8d5f4ef3842f6db4c02d8662cb973f64030bc403800232a49b6f14b0b195dd3a1d248eb7254a6e9e82e340d28a5987c5426d45e0e73a74951b99058ba7fcb35b89bffa33ece5b05fcef614e1d4231f13e86318286cde08be066fc734df77f5545da6e6b89a5f7fecd243554ff2c87834b0c9a90713a9da862b2842cee48bbd41320c249c9c7c2b3d70b032fe0b64b8d0a41e3285af1c6b34184944e210320530fbba14226ba5df1b2b9c484d1de371ccb696b86cb53252b41b2d041cdd19c6faf5479d2f9ead14be511c961129462a9d767f5ba4efdae0fd3d4687c6672357aee62e0d4d9f8dd42b9799b4797cb6febe7b42edc76303ff33b3b1b995a9d33b3dd15c05565f588f77095a4698df372c49a789b648eb954caedc9b73b5fcdeb2091e9178f25978e085cf7c17b3b1ba206268cdcafb7e80e682c93a33791968e910554b14fcbdfa077b8cf314b2e85df77d983cb4faaca7a414ac8eaf4a5a5355f63a58aa4f964c70247970774f07eb3269a32990063b1aa64c30bd56c894826d28205b8f6a35368c0c467ce5668217b72db21d023c54509ea2d0b01a0271018faf23bdca56d1e28e7aa36429f6b87bd44263a253f2bf7378cb53e041bc1b8629d8b989e6e664595202e44492bed038a860dbeacd9e33fea847ca69209e80e67e416f1d6f0ca26a4236c751e41e0a4590c0ca49bc8612298441a172dd059e856b41f33725c86f7f1081494408a1cfdad701b52384d2839cd5e8be13f8bf83641c63a190e7a1d88754d949585c1ddfec3591bf2c80a6318860be09c574789938abc323233adaad25009cd1d921ccb656ca67afdfac111b614eab041434a9a6755ab1977b74487a9c16c9a3a547ca6bcbe50fd70677cc65ef0222681917ff1c2fa27830c8e497560aea2d097a6ad60254806c78bff12b8f35733275b6ebd8429ec6db722bbd15757539da94d2b7ee0778e16a3c705db7863d3ea829457a6d8c5626f246b9e4180cf4561b44854204dd132907ecaa72339fab6c7af99a611a5840eff153fb7f79ae3de5248334ddc6c08ccd8d5879102f0c9de54f43c0824100666de8a3bf09613a23d112a4edef6f1ad5ed56c00a9987da6539989c32710f451460fd29f2bc284ab541975ce3a77dd37551ed2a120c58735c0e5e555382f78dac38fa028719809064dba65fbcc24a1417a8ff4ef8b03b0f85dd51589495b6ff3ac016acb21d54921e4a5bcfc0a4f3a0389b4613636a04ca40e4cab7415fc1ba7cafdc4f6b7640571a70e2bc2608937fa866aee1f129567e0aaffee3f045d44ed9a39d214b7d914f21319146682292a44dbd2c469ec71ede61a399d7c1149598fc328cfa98462f89e1cb87441f480b9a7e732b5d22a02c7bc8d6aadcf62f0d922e68ad07d2fabd9caf384f0347f5c96ba928ed2c0b70428e62a39e153dd6f4348c6acf8d97c4522957c60326745509631d53a1374cd943c82891e4b051930af08a0a698563b6070d52ac8e7e5000e88c20a953f99a16c7c42910e0e63c36e1e2977413571a5f955c2b87936b7f6bb6f9f74b1ce1376358f0bd72ce1e1166876218ffc069e87974625e8b7b7987acc35530e23ecbdf31aed7a060393a252f5defd705bd90bc746c75667b9d9db50176b6759125e812d2cb6cfa6a290d8f0f80ce2371068ea293184974c288ef02922c079233ab28b79999475693848dde1637a9fbffa8fb59b61a89cdc1fcb426ebe993e7611c332f400edef669f06843874f8803cde06cb2f528581233946118b2f18fc9d5a89795d67777ec84d8a9a25b8c1cddc0dad9c28f343b6b26f0b424bc3f65e4b36b3d7d9fea93faeb1f42a2ec7d60f04069f56890230dbe945ca84acc19a80838e85cce0f53c550dd2da1021221bc9f7d5567e430d874f5cf902ee52cef1c55d971a4263024d3c937b88ccc2e82f47006c9c1700752a4a8517ca239cba60480d52b9281332b02d328d5d819ce55b69e04c01c59f3f1630a0ae857adae103f6284372d4f48dc5622ff97498c8308591d27f13c77e488ea463352a71db923535e7c7e4d4016ecb1751dc4326623f2a9292dce5e95801a1ccea0dd0a39ba8b40dea21a3ec9b167a322032fae66cd6409ba38699851e673651602ddd2750ad03c569e2d071f41274f27718485ca1bffc9669eeb0cecf466c169c22ab9c41275a9e7c55f51390e672aa3c843ceaddaa08b69a1b15d4481c7f171e2e8cfb3baa45c0b9b2c1862319262641122936986bb1af39d3ae5558f6b96f8f529f5728e49ff4a9ef8cd9675233a0b1b71202f610f65a659e3611f24f8875c751ddfe9de791933e4aa4770a9d9c39a3bc3ce353478067391d1064e9643b4c1e02f9503e9b724ad5da251f11ba207596f219c2b8d47630596e66a5f8052407d70808c1b8a0e14a539548a86b472d4abe1f588744e5f8ea0dde662e0bf27521d7934ea0e601b448026f439b507eb9e5757f6635eb28239cd967777909ba848d2916ffc30045e9aec0974137a8d753f2a73cc7f7cbdd4473e455b2cd75d1583e52af6ae524de1ec7523f5227fd13b3f533e0e22b1f3803928da4fee26aabc399737100992b26ed49d4b8ece939f2a4924a2f80a9af507859a76e0109160329488d108360b05ee20a32ae781ed028eee0111efd7910304ba524bb3b7b53af78fac7f6cbdb3386e58aaec871eb539ca2c04a9b6535d91285212d6e676296b1448fa0dd5dc7343490c327910be14e2459a8bcd416eef1746cd1de69819e8be109c35c41d154c114a170197f987a490e2b7ce433f0e06616f49dc42951d58b81c3016f65248633407104d452bb83d5b36704b2652b83e82776c4f8e0ea521d62860a0fab30b7a33a7c0ca63d4b2286d7295093fe849efe228f5aed5eed0bc69e4d91ba455b73f68a550e3f0b1d820f78c07fc5315b9849075081cf18910b3d434645e209c25846946ff3bd06037084863232b891b3d0788a9685c3d79bb4209aef83ef33300de447f3b7926d8ae7e7208082325344ffd1bcc264e2b046d3188943ad882c924fd9436df563eea10b19f6edbec4c170cd30ab1a87f7514705f1cb31192be494ee00605e52aaf27ffd62743446a45aa10fc82eb551db98cfa01aa0f79d0e096d1a43e1b99369280e8c1b2b91c2dbed1f590fd6ab9a52d62ff41e1d8e12de2b44065a05f1d001e7a61baf5aaeecac5b812da03442eab885c0b2d61ef458a3a722ce9aeb18e8049bf5070b03b9562331f59842127a191d9ae0b0d72e729ec97956065b8bbde18e1b10762efd0ebb999c84040110104f5126767b936ba2f931e5f538f7f4c40d1a1a997e91d999bf8a7c29bd498ee99ce8073b1ce61b83541f60199be4cf270b7fe4968618af6534da7fd9af4c769491c9bd852d181167a770cce385fa5946d5aa9ff836f88e6089d11ba4c02a681cc96106d127b28f8915e461430111ef956633fa8c923e2ff75176a5f147a10c02c2c514839c3f64c9cf1ca3e09f90ab8847521e4022997bbff9696fd295d0e43a330729102cec0b2901b8f72d09f26c94abf81eecf7130a6f8cad9810df368965728f2aa4252109f71c4b3d7438317380e66c380038ec96073ecc001f12f0db51e6f51e9fd8c6a011a95e340985d0831b2b712fd442513fe260031852e021dee139bbc96ff09e6470c13144d856db04051c6f4e3b43e45fde178f36942e654b0ff61b08067d76c7052b2e0fda7f7eaf33995bf78f49efb2156aebef0d39bef399534bbd1e8dc50478dbbe41538450c1a17096ea27c4e30a51b36d03f151279182481463225ef9e09e5e592b5f64fab1b800c07fd18c3227b869554ba6408e2b30446cabbe68adae04c6ab24143a7f4464f85e379c5904911151959ad77e70efc7d2a6fa271140add135304c70c06d064593cc75c3d59e68061c444a2a98e08a0f399b8535e4625eec860ec0243ca0b16aa0f61c8034fe9f0137e2237167927f1eb015318f072e43b0ab9053da8d883aa89323295113744b8eec1ce10424979113db101834ea445602ad6b13a943572b6aabc70fe5dd226c32ba17cc3e38965420aa63f352139ac4a322d52209fadd613bcb446ff034b6c35aa16b0ff626a963d26433e6930eee7bd70e4022cb438429a769245513f364fecd145f024261848524ec5fccb79c6238eecb6a9fb4552d32b54c470bfa8ae4aeb55dfd52bae1555fa57858a3332da6d137827111261b3763cb034e8b7f69a8e95f3d6122cc8953ca81e80b79c45e3c09415973ffeec90cb9ad1861e907403aa64a3074d3c3acce9128dc240363a2361dc3cdb78459d603ccdad3bdda5960e42aa125b560b53a9a2059b67a38c2b61df4ef4d9d47f7410ce10975132da7b7de4f5e742e1822105333c4d189c5291a894a91b0d54909d6438b067639f34802cc1da490737ce0feda02762b3e6341b91451301a1a9bb0d44f2d2a487337e53f3bcc24a6ea1a48432c861c053c247466930472343cbc4bc5691c03e6cb31d29ed8b72938297b20275dde46ac1404f88d20f6dfa2858abc727c294e918cb51a726e39c83b7ca222d6107a4fd4ec6c96b84887d85d2bfe1d64984c8850aa141c823ccf25ca210e1d2a644432a802c9a8cd52071633293369a2640ff07c0725622113d43b518bcf0b4851fcac1b0b4c28a68e005e0dd71dd080cdc81d15faf2a118b76b4f2e67489a16d33b9558d90fcd4542bdb106dd63e16d18646618d461917358c1306989a0c16dfbd408e6dbe4e5d3e2bbad24eff7547911a8f0831350176ebb37f115f1952ebfc31e5a0c23c3f43b7b50a24908f1869821d477bcf7629dcc9853913ef1430367bb3e435c43d5ab0fa56b0a5e2dfec33b4c9ca6ad74eaf7438ae14fc6edeec4b980eb51c32195cf9fe5bc98d938e9e12becfe21660abed53bdd783b001f5fdb576d61f600119952fda664bf4d4a5a2cdafb846d88d4e4b63a52b7bb630d0cc33cf62a98368b8d7ac263d1907b580fca861c090450aa96df48c0344591bd2013bfafbe007b929320414199b2d112813ed31d6f07454014951eedad8d35a39c6136ec50c38242ba3f08c0fd120b1e3bf32fc4568bb1cd561f22cfff5574fb61cbf8e0d90cf622ba6b9f1460c2157b195008b786ac75ffb04a6f2aaac20a10757702582f601f0ae5b9096fffec03f3a7924ebc716ffc8efdf8c8d9bc7d14c6b58b6159fbbfec04f1f79a07f6552e2378222066d439f1f9e3169bc6e9a54310c4067154d9a58178d7d5b23b6f7c7f1b05bb158f8cb1fe370297f42bfed796bfd25e141591c802d097de5c4cbfc9230b5220e9aa024344b7dd6a23872c2840b9ef07e1298c62acc6f5aef5fda66419c7cdada8076ff41c5ddcbf1fff5fed1451f5c00548f0e4288ed91cf45f70b2a1a4c7d1b0c9c550840a7486e22af8946c3cd797206810ccb90177b5853e2d0f8a90df9d1f3e23726a0a0d878fa2218d650bf6b1c250278f392a8419f505e95e1d53d3d041cd85c64f6184c42bc9311363aedc8a884c05c624894330808de0d8a2d08c1ca6c792338c311f24042ec129436cbe21b57ec440a4ba20d57a876f6e15a22f9064195d7ee98b532c35dc2caa1d062a01ab2cbda2e5fd52f191cc960d589c6cdbf4b0f41327e894a1631234a12c0e5d1bd7b578b14a0d49f38b387180aa23276fb6daad1575cd3ca1020c636d453882f49c735f69ed33d1515dcf514006540d9d04c54a01683a217c0564ab6db81729c2c70cc52524bb75182cba3cc9e051722daabc30264c35ef4e3a6ac7716106ee444da9b223ad0aad89ba3a155816bcfa1cd999ec57568fd07a89916eb55ccaf2088daba87705f6896de956ce269ca08b25c4b4831d777a6519e8c8e5849f2d26ad2fef81e4004be123e0829f0d8411ab285e64566635f08c24682e7e9ff9723cbc86a4b054c93b5de31756fe31d3f73685049706ffefa0284dff4b857949dae7cebbe6e7cf6fdfba13e8083c85b3225e2ff8e18188214fef8a08406bac347d49c08a16efc963b8c93230fc0d81ba73aaa1f62d3e08c01b831153fac8b135cfdbf71704e7340fb680ab06b780f83b1b722572df74c1901080a258ba663b28ca4914d27b3388bb19e4ef219b1695b7bbb529aca8917bad9da0c143486d6236d99f5feeedfa99b1ab423517cd0b9a3dda202424d402d1d854d40610d73d244235a2fca155a0054939f7a5a313f943f2cad4a651f94418e36d8f5fa4e2d4c18bc286a28d2277223065e5caa985262c23b701cae8a027447dd12a4c1e04a699703ebd3f63a7058b53d514c6489cea82d6a6dfdf7e86475c4080195ada901664998fc140e37c9d3179699747ccf4e3d17e8e3a9f0708756805167c779efbb067b59b5e8fd791fa2d59f87af7d47c45ee2592c7554069c1aa966b9959856667b280f3ddb1ea2a81ecacb4e4107755bcec89fedf97c9fab414ef81ebea4c9e29b21eb0e4e69e15b2a632f8b0802239daf72d65672e8b44a13d015cdc00c60d525e0b636388056c03b30bd0726072e40311d0980d3229b19a400e9c2efdabf81820dbdc7f03ba3283845ffe1e4c40ff0951f118da7646728e49746bd90c300c7e995a67cf771f750440516ee4757b5547114c2477694be7ef75db038b5ce43c485e21c781caca502fde24ed917ca5051d32345b25cf8feb3ca338a86132d63e8740089df1a0650ae39962f4d3dedec1e30c344ef879be899464bea0e01e81f7c4a91ce04e86a7c43ed02a69e36b04d82de88288a4ea53deeec207762376eb2e66cba05cf1696c28848dc511b100354ba018f8bc6d8dd388c0d99bea2718e240c9069afa75821d8984e9a90b5bd845321f9b058a132f388beef94ebadfa58d4586204e37e12a158176563d7522ad8648690c4c85dc2984df09c66ba068d40cc41b28e3036c53c3416f19df65eaf0fc05b1963ae352db3c2a1f5e6c127c22b52d48aa5b369d02c3c267599d08ed1739455c6f36c4916062811b85828c5a8003a2f51b1354c5616d15c52ad31813f0504cae0ad0d6410b6368955dfa018463e21423723b3a4bb352da4ba042be327747c839889e13956fbd7e2a78fd4954755a29df9dadedc80313312a18fa7d171f631422c95f8a8a273695521cd622c155b26143611c288f1cc6d465fbd7042b63bdbe2a05dc6c16758ad2a82b710f96026eeebc82b9cd11a43fa1a3ccc0e0c87f467438832f84f1f632b774c7fb8fa346e181d975782380fa993dfcdf5543facb75d1dcc5b0d27933cbc8ad68bf80c1a885b00fb0964fc15f2feaa188c22b1b969eecb5482fd7a45c4b1ca3646a78c05e5f80e6998d793f2447e16a7627a29f90cd6359353a46f31cbc5d5c71ad462564da26ea4c315d3ca0aabe1b6b4f50fa988d0c70856c859bdec86ff5b559634cac36485662816e29f7ed965c65b6f75121d1c71ecc484e40480a98e245f8768bf3434cd30e48b3b84b4f7d3a71b19b88346c8ef61f9e44fb22c1033e3a0afb806bc003c7466e8e8af355b1a0417a401464c0f9abbec312b21f7e816351a54305c0be79d80892ea0cb67ebbdb6f7d592e7fc7056c6b83dc12c70feb66e1550b5bbca9701248793f7293c8056b95131a25f4329f38ba29b80db8cb58cfc19e90dea46991ba54b18b276ec9eedc295362be61c42ecfcc0355615a757e7b48cee2bbe13d41d9cce575bd20cb98a2db0f412544bfa311e78647a3e3ea68c05d1f24d0c40c9bf2083b36f4bbcac44e60f1a27d54e0e156d86b6367329e6e7db1854ed16100e4f85a1e103f094e63d6e30336b562576832bf30b1eef17d2add3353e32f8136bee0dbbbf1e381cbbc4146843400650da942cff4e93b8884cf361c9ebdc79c1d4c9dc0c0aaad61ec0dacf97069402c85f56c1369e5bb35bda74f0880d8f450c6d9fca2f811228afc5173e26b2d9aef84362253b0f15cebbbdf3ba2fc821f313e396564df9aac349773e72c7238ea3df9368033fd8bae9bb0d444505f8bbabf8d82d7eddc75f2f8a33aac073ad251783609072b7e2fb1545d76fd92bf31abe24317939c256795b10baf0dbf03fdf44aa0012f4c30c9a0746f598d846989901e2a4be1e405794a555bbb979f2ce4265e3a5be6e98aa95d75ff133ca98c8f84dfc6ea73ec0203ae19bd5113a80c9a0ce3d34fe940b5568f1ed9bed53832d8541772a454faaa0c27c172f6af976f73918be10c36c2bfd41cbaee0b6fbdb486e52f2ecc564c64e6179cea6939cf86e5a666abfc42ed8bf13ad543ba552dd0a21b77352de45c878be8001a06aa88d516c01f4f23db260a16e7bfe099bde9f36a098cf6abd012caa310726dde05a2b824587ab8555834d1d460b9b064f5fd3ac52b336536e8cf107d58651790d4fe8e63b7280e9bc2a38725cdb8e2bf57d23f9224350d8feaa3ed371921b3790eda626f45f4ef4aacf84c9726091097fecf172ffc385223c0199fe591083304438b4f8714baaaff33e8edb26ec5244f7352498510f351a22c7be0bfe2cf7560791f0c769789fb36589bb3511a4af37b399acd98488e1ec93983fa594b9ebd20c81d47e12302cf42864058e2546b48a83cfd1f013b5e6041ca88db363d488ee9904645c7315f6e5bd2c9cbdd7a51d565bcc1201b6695d715e8a266585008c0c78bc6ec903daba632f76b718eb11f16f56e328bee020a1412922b05a8429d362d05e7e014c76c5206b19d9e4b283cdd021d600ab832b9c44e3edc3e4214d88f4494a1cfe68f18c5f532d2e6d9606c57c2aaa410082f13403678b21657a9c7bcc80fd5eb436e58b2801f3b6df878fef3ead6a374ef48b16a234dc3dbdee3a1a7a38c0a68f57aefab6078057ad5fe09b718a8f442e009b2761f1593e3695d9848f0f1351910d20e3112d4d17e0992f1551db6659167f27f32988d1b151861dbf601885b7ccb49a226e106a6c6e6f11336fc19dad41670751daee2586d51e63a7b3fcb1d67b546f4929ce3e0aa0e52d512d55ecb4623fc3a8bf89acd80375dd15cf69b5e4d2ecaf6ee98c282038cfd1b9696103d11a741cd9d4fe1ddc7f994c6457d6b24978f5364983bce1f9a78357c8fcac5e18581de3f3c9ade1b284cef16d82ed736332f355caa3b002ca74347b12e178bc95b323b062449ee0f1c6112e649ab02a6178b8f612580d0dda771dc320c1167ba21a280534882af21370177885765285acf06bf6ed1f49c242182683c7b962cc8445c438c5ce250f7d631466430e821850fa2f7fcbd3548043f2787927695923e7ae69187b076b912c6ad9afd79ab33461ec4a0375d2d17ae9fe6588c2eb1282007b3431d1125582dbe953894cd675f2b2d52fc399c09048eb348e0af6c3441ea3b7cfaaa0e68160806043f1f154c17b992bab909573940c18cb775f698f655914e7d19ad71f56075a3c2d11407a1d92e6458117d75e9bf3cae4a5002fbb79f9e8c5a4574d5e06f062a7171dbdbe7ace8b06af427ba9cfcb939727bcc0cceb201818d9943e396d817ecd30ffa1d021a3b6213c13a8f0f0470a2b87790280f5b1d096a5460a48c4b98ab4ddddabaf22f9ef54be328135c4cb1e2f9e7931e715265e236ec40b4141f2eab52f0481b5d4cb8b1767bc30f78a50af39bacb6b072fa67bd5e865a017eb1be9433fdc4a5ee2459117075e9bf4cae825c344f27f8757afbd9af3c2c4af0581d5e3a58b97d3bc6cf322c8ab1d5e9e7971d20ba35708eaaf89e94b54017bc5e7554ebca4c3d851cb08d406c7558c54cc009f4b991f148df54c4a16f177b347463e371a59153093c0305cbb607a05c10752754f24e0318db6e97cc8dbbc109756d5aaaa549bc419b2ac2c314b0393fc13f1e871d096e98bfe60f959e88d76cafe8713023f1e648a4f657c0263fe8d48e2a549297b5a3e217bc7784219a4cf2f47588ec3402f327896100076bd4dbee5da8f4e340e5892559fd120120ce881756556baf7a5263c61822530413f8648200f805f700d4655bf0bf68574c80c8f89b651c687241425e8b41918679c4429872f9a469774c2c8e7c5c2d68b1fe41a94a7acbe39985baaa8ee8ce1bf08512d3e0acc992243887dd6a3c8497800046a24830ad0556d58691043444aa28e8ff07f75891b140bb1be840500f41170d99cdfba9165f145b084ca77e993b10c658bf2b8edcf1e134528f66a39c05c9f09f623cf78d5d094f4cc52bb971fc7d8ef3b1ad033867dedb8828c819b4884f98aaaa7841311566fdf861d388336e9989db874df2a700347375b40a1815f8f9f7509749cbceea3e20ac29ec428fc93741bc18c50a94dc03f58e50cc92a729d11a0ac301bb56b8d1fa5ad3f0b588826236c60e0bb4c4c7d39a000cc260eacebe74f64098cee8b1a27db99cb63e3eb95b763aa8557cb9bb3b14dc7770df649fce81413465479eed7609ee7aefb5a62e4c9ce9927e2cbf3d3361ffa608e807e85004528c3b01782ed2959760af9e403f03e334e94b11fb4aa490437ff4d858df6b91e4a18d7cd9b3c80104b80879a888e526fb2d62ead77206a3599f30036b691a2379dcaa526a47fb628431467fff24dfe8a0ec39f695d38b90a5f1bb89c76488f22b37aacf5c6c591abd03bb92d7c9e2052973b48f6eccc3594c1cf6cc1170f0869538c43f6a15d6983c613512c5f75e8bb3e300cf48a9cd8e3075a3b6830e017e43645b35c59e620ee0a74cb26df8529314833e0dc7125df8dbb093d4ea2e6b1ba2abbe1327fd95d1471a2e18ade06fc4616f84c615e8ec6509a2457c94c0243d2ae5c278a9ba43d96fb810ed1f43c2dc188189026954a4402423e206fb0c5e2ddbe08b89d7e40348aec69b127a32f459f12bc9dc31c37a77ab463c64ce27e0428b8c76ff3abd96e74f84b90b2baa044c484ea5d10578a8c88608e808c1b81091740e9810c2e8362f461352e76e111ce12c4865a2d4e4ba4f8876427473db86e3022dbc9b8621cf54a252297ff5bcac4852f0b702e94b83a580ca3bb85132d3c6f56c54bee603fc8c97282716644b76a58b0f0602799a2538041926f95fa8cf82fd2ef923446402802684deecefbf9d8546d7fad544bfeabaeefe3ee000cf5fcdba7a3c3c0d2fe4f3406317da10b30a3580fe9c1e0097b12a588e536ed590380051ccd31fa8aa8b42507914d78ee5812d0ae8cea77c19694d790bddb445cd10af1567ef714ec85a2446047a3d0af4b94726c734ddd011a6370149bccfe6f17a4805052f579e8838ca19f14064ad092666916f73100158d308c268a24c3284a301286dc4f993431c2d124a3ed9fc74e0abe386a08a2643236ab1798cd9b39bb8c629d11d9a1ec31224e85cb7c6ce2367e142bf81837d03b68414d73ed9c6b2772eaa81122bc61f9517a24776921d00017280a861d39664e066c34f78aa2a8a9d387ba888e4c553a10a24557b7711ec574b3937307fd662afd9dcc45105dcc3c6c607bdd113f663a50482a0a3e8ab484c147cb93ae50a5180ea8fbef1cd9a2981b437b11226c4bab4944583167536ce7fe125034914dcf26ab7c36350c8d9ea4d5f7207bfb0127a935638e60ab20159847c68349a5693b6d08110e0bbe90c03a5a9b9b94760958c134c576abf5efd48b8ecf86fdd730bd8f43880158ce711a9c7a38c9a9d1a52268fea38986e52c66cc6a77e56aa645a4c46a210baf3cf4ebb8d3613676e45100c739ac0ca51721515e69278025858c099319d7cb9466734b6a268f931aedd6ede318f38b75c3cf804c6b8b35bbd98cae3f56e606b9d299ab4b5fc9a5c9ba89afc4bc184e6dffa2e52bf0b4d36e9650dd5069694c875444218413baf2e5af762ea94ae0935f23e454cc579c28b1c549c4bc5a30179a26ad8f948ac01fd7f026399945e4ae8547132e554b7e4dca75cd2b67935836780a3ea8ec2697deee84be8201e3f3c860a0ab9a6f6bde2421ee4ad32c8acdb80dedf15a2b6e187ea64f68d8135a98c36a8c286aacf53faaa825020f068bf4497a0427f4399df573b7e179c7fc973b7517b650de06e33c73d675ec191687db3129727054a29c8cbb9dd9affde15055753656adc41d17db2381b153fc3f250ecee1d75ee417c8aba62eaea089c60bbd3f8c3926048daa9e0e3edfaa5a1cb76121de075d931aabb2194ad97f910e58d6bc4abab66d26e8af7a51b9aa46db17edc22f7aae9a5c40446b645932fb0d1a681d24a2e78cee9804d9f8d6346a47a9c8498f5658110d0d005745d5946c3691dda9a553859413226982076d365a95c5553219e991d386988a41028bca0629c185557f9914e2bd4599144de9dda7a40bc1a2d59c4d17068a0b04b3e62f40aaa57b8e07c7979a5c49195e845d970d5cc06cda048f8130e6e0d23c8c20a6cf1675f6b8731daed96384a187f04eeb3adb2f0c334b1091a9ca2f972fd7ef5fe02493a80df9d534cb4880f17cee3b2b9a89d97384eaeed990f8a61d7865461975375b5ca3df4efa38f006228f9ad1bba5f63340d593d1399ee8f2146f8809a44e9e53e182bcd260e4b0866d077a25636bf3bacdb2ad80af6121b074192276101f72e81a42a9adc7f5d436b29e7f822ac103a15e8626eb42544863377c12ea9fd048482b8986f23d6b782a8ddf44285a1ba41532de81d81e052abaa766c9b53ce6e99d1f42755c07f1662231104f649a932f7898f3e298f7bd37536a8d3102c29b924da149244ab2d0b0f249a131dad721ee26951cc0d80b361e183905641012b696a847bb735a4980ca9370216baebcfaae9aa1707c81ea261a28c48ac1945ff5faf58d1e01d7a8831b0105789b8c71d51aff021dc085ffe86160655005afacfe26429d7cefac4c735b2f5eea460c05220c1bf54d0c090192a1e7298f4f9b040309c3037941d88f02faecb3663c11539388d7c69de4ba6cbee07f9ce0e1213233b830e9e6246ee7369cd9f29e33c4b95e2e1a8cdb9ba6d02cfa6d34e28016d7074077c1d906972d32ba54f34ecd8adc078c7fb165c5258bb186c5a442e374cc0104764b4281b26fdb050a2fca2fa6b6295835f0dff8beb190a7633c821e0a6b98f298b1bcc7d51cf6312578ecb25837111d99cd893f45c3871f0d938427cdce612f7722d6dad1760d8ffeb4cc91a01b590886f0702b2b179dce6ce1a741c94456a127e8cdafce282c0622a59b64c5becf3a7baf210c6ee86c0c6e4637ccbb557587817f0993100a44314498242eb6652bf98b8483376261a174ca44a6d0da8556473fef5aec89af44fb2af26d3ddcd3a6e246f0c48ea28da364f9c4881c2d30b92889c6ca2d6f99ebf3c55cd3689936ecc651b279bcc77cf67b085bbc1522b290380bc72f115805e2fe1a1f32a68ad44c1c3df96d828a3473a99d20939f92b61251e0dadaecee6fc56f48256355768048a2890ee982ce3e0934e011b2146da83be42e0e0beb7830589e3b5ee6c3e3d4fedc00e2040651d9650aed8d40ee509c6802ca764e061ae0e19780318f35b7eda76d21f835e8363e38634c203c13b42c697c5e012406ad34c7093a997b37f1dbdffa199bd35156764a99917dc9c2f4a51884035f17f209341a6d294136492ded658cc7f4d7548fac13d7fb32415479db79930b65283b7f0ab67cad5a44c127855ad402adab10a005030cecea958d54839c6e71ee6fae119eb1051994c6503070b1a1b641c02969f6ae3003d2ff9c4c5ba9e4efdaba0e0098f5de0268ae24c5832e6029c5a2857f5730b51940f652660977f62c9ae9ca337f1ddf7f4b8cd72b0914dae603e5eaee6df23be5ec8b6259cfdfec699d82bf21968e22036c6102ae1e44850a3860b26639ff0000000000000000805ae02082cd3654094e494ad923bd50c6b9ba292529534a49c24c7cf47466e2d3e566dd6829f1e9cc042eb20a8e0a930a687c3af8208261ceed6f2e975a4dd7790cc16497b535b4dd88dc721d0e3e84608cfc96ba93681995936ff0110493082a9fec8fb8fe2de2500382c943b47a8594d792c83f309b88729d21c446dbe7037344fd208230b97f175c1b7cf4c0a046bfc2542ed78e0726093a7e7597eeb85d3874141a7cecc03c974fa4502aab3a3004512a654bd7109d4c3c52061f3930a5ec594f33110f1c986542d03495e4c41879e4d8c27be4c071821b3d3c043730c7b7b009219a52f13f061f363057949ce23a296b601853aae2bc93dedb9406869cf5b3de3d2266d583c1c70ccc96a347cef94f6ea2c6a1562ef89081f9462d2c967a9994e5f11103b35ef8a417350ec1070cf0e305a64f5591a023ddaa7c1cfa850f176c52653d9e12aba0c4a12681b31d3dbc40438c5698f368869d0aedc95338062bcc1b167ea93fdee4f9ab30e508a16b3e7755185363d65452553141a930463ee5e12abb6684890af36b688848928a710a830879ff74245f7937be48416f512e03314c613cf7902164ff5ed2932d85f125aa04b5b85a0d597b71c3cf7801314861f290347e252b56b7ef8249116314e6edd3f6d7364972e5a388210ae3a7b210792686a988110a93d25f3aef641f879ea077a41a59d4b861aa88010ac3ea29b917721ec5521c6a68f909d35338213eade60973fc293d5e92d3b25bd888189d30ddb6a57748f7e16f84436dc7c5e084d93a89104b5df8ac902bd603058e1b88b10983b6386e313b07c5d0846994bb589eb7ec023b7ae8309809835a93623ac48a50611d397a47b2c38479d3b2b45e2921324438d4eab8887109c3f54ac891b37b56d72d613eddeaeef9d47974b10552eb11a312c6f4a0431c6f47108312a67efb52e52526c94e78600fe7c11e63122639edbb5421ee73822386244cf2ce54e7244f2c1f231286536d9bf59f5e74f801312061360f4b5194d9d64809393511c47884294369f99474f7ab0d88e108d32891394982987feb9880188d30e749f954c65975ce0d3446986f2cbf88b4efa93543333116614839c47daeec77426715611a2d9353873c0f6eca44982598680471a13a7588fc023cb6f0828b1c8830e820f4a56ea43d21f11a59d4c8a24616356cd84033c43884f93b5a8a33926dd255928ebed103f90e1d11b04004b47000c9430c4358d925c48a5d965ae9465954af94c61c5ce4d862470f1e3a72e003b2a881811a5a38a00662e11bc4288449055b49fab9dbb3840861f8103297f679c743671026e9611e2dadaba3bb823076aaff4c0a3510667317df4ef7a6a20f08838564af272f42dca7fcc160ea46c8cd0899b1a51f4caacfe257ad57d6df07537a532d2fa9f2a97c30a754bb5036b24646700fa693d16eea4d9bc829a607738a9c27989ee45a57e1501d396ee828c18eb41e28f06279305d923a394524fde4113c182c44f54f37524736bf8371928cdc113116a9467630e76ce7937abefe3c5607b396f60ea7547508daa183c9bc928cf5e59ca434d511630e2665e3917e44ce2172580ea68bf0733a099d389857cd84ac5aa46cb9858331ed227624fd7ffaaf37988358cef515522de5e20683654b5a4907b70d86f49f93fc1096376b6183414711b1922f7a2925b20693585db4a02ca60693b0330be2ef7764490831d2600edb8ba73735dbb295e304b945a32e1ca0f6858fe0c6168dbad8821510030da69c72de855c366c300c629cc13412948f8c24fb3fab19cc2a49241fd1a7e35b57088818653056cc521b13b92c888a0ce66c4252f20cf11c533406b3658997d868fd8fb31e6288c170953e794e108d530983d9e46d7a909e3cf8e4701d6280c1742d3adbeda96453d3178caa9f23e8d28b15abd2218617cc419e2599a442b0b9bb0ba6eae0d9dac9d511811a59c4e082792b9eaa109e924bae481c626cc1b81e5346f35399fa241c6268c1282a82ce927f9205636d95850de929a7bbb0601e887105930c31511752cc9411b182517fcbdf3d4292daa22a9862274af41531150ce165f4f7ce68b9e731a66008c23727880a1ec4ef86185230f76a8b4a518da0d646c12c427cc56d7c28a02cdae824475f9e606c1165af1226dee9d7090625525b3835aa4788d586184d3045d8ea4bfa2f86e7b0d8168d1188c104b351622cc11cbb6997ca3656a288d710430906dd75e5254d64e813e1e891e3044930a8cd4fe6957ab3f9b9e1c9300a31aaf2c617e7c60d2f7818a0070a8c0d1b3d50e046887104d385cba48aed938b6104738454e7bbbd679e3d38d43cc78e1ec510d8c00d00c4288239b753ca6f11644751952c6210c1a8b5f392dd6d84529fefb891a6c5099a027627e81dc810d8c00d07c41882b12fe66fe979c918950a6208c1a45fad93e4b21822df41308c25f50f31cc3d7d0c04531af555dd624ac4ed1f98f4d67ed657acea087d605eb90bda95d2ed7cac07a61c4eeeba477537552d0e62f0c02c6e26ddef93e8f7241c6a8725d881797b4448fca8ebc0a0278c641fb15c4abf1c185f3db7a2df7d77663830b58bc8282d7ff966528318373069d38be8dfc9dcc36716c4b0812167c5cbed0f493bec3530ff7eae1b1de27dcfa58131d2bf099d3e16969e81f1e5ef57d67cd2478a0c4c09d1bec13688110373ca576a259652e2843a631003066679f5dad5f5a062b4f302e308b1eed1540ff1f4165ea42eb2e0182e3089a016d4bb2605bda621c06885b9524572486bd94cc71b5614062b4ca276f3c3be69f190afc2a42b65767c30550951855947d89a5241f9dd4752610cd90b2ee24c67890515e61fd9515697a27ed04e61ea11b376dd39b7d14d61d0b0fd9cb632e7712395c29043caf6af5721857144ae32bd728b998b07608cc26cc1df54d64f558b4914069dbb5f4789142f212914a65a53d232239f8b66ee15d0624161ca215b8bef8853bbcf270c163f54129ee7a672da132639e969bd94a513c64ad6b9e47cee941e278c736395ff92ccb5693d50e03ace0a4002af002f8c4d18f4277d3c75a344148626cc714489aa1445e45c3b0b8c4c184ebda3e5685a445a480930610e3e1ef5c2da7d2e2ee1e8ec7172be99978b2e7af028012a5620b0811b278061095347bb68da2f6b57a6e8e9088c4a98e4863e914447d5e9144a1867829f65f718d1e4641246f7e8dfa73ac7bb182561505dda2dd56f47d16044c268ba39a275c2bc258543ad402279e163473c490e188f40c44cb86a9c8c984b82e10893fe9e742f29fc071114008c461874df97c593534a2bcb1180c108188b38188a30448bb91573ca430afa121ea76024c22826effd26a7ebb98f08a3f7047dda836629593a844989f230e2226b08838d9e10754902a310868f09b22cc439cf21088310a64bfea21d23b470803108e39c5c90954279b6480ac214b5d6d2ba5f0261f6ce254b45573000619c3427c793c83c1df63f183beaa9581b162dc0f083c975bbf6527caf2474187d30a7d2779e9b5b7ad4a70330f860d6b14a6169326de5e35182f6e2068f1c6cc3869102c61e0c39aec85a104238d4accc00861e0c3af3aa245efba49371a8251d5d144b3a2260c346e92760e4c1a8117cd28d6ae9ec0a0e35af3b040c3c984b8fe84a21d77690671757438b04d801c61d1e0f55f77e1f0eb5ed020c3b985aae75d7b7e3028c3a18bb4c281969e27b369b0e86fcc18425358b969152038c39987343e73e4d8aceed09430e86d159b77b2e77b87b5edce8d137925fc38883417e3d5682ca6ae7e6173b7a2c1ccc4929291f84083597ed3200e30de690f1102487939f6ff322c70878b8c158afb5a2ee715eedc7a156a6d7066367e4a4747a5b4b1a296c30be9ba8646245d2b9670b30d66002df88ad9158122f5318542b8772db89e5dd970215b133a3fd375a52f039bbd342de68e65b1c26838c5118d5234571f5f07d551285617e6f76eec5acb60e8579cf3d9a10734161b6a44fdc842047e99f30854b1ee3965208f1d29e3005a1967bfa8308a3974e98f5f3947a39fdab0e274c422525dcfe52470e132bc8d88439f6c37f67aba47e2c5490a10953e83f91245f52a1722901d7801a59d4309e828c4c7c2103139befbdabb5bf27ff12897c4a9c102dafbd2550774d113b1dcb93ba12892459f4f88520b2cf94402f8697eedbae3a89f3670f8f7a9bf24949782ace3272f01d55aa48ac91524508c9c22511725cf53b5752b9bd682eca7674d1a31912869d51cae48de48a91f3a21f501c20e31186bda04628fd9caa2ac911468ff3492aeea811c69f381a722d6b4fb78c30f676f976a893f9a933198b307cfee433f1721daf5784f1f2fe8ad26a4a84a9322be79567366c1c4106220cfa2bfde4892617641cc274f13b964a712a88a56d0b320c61caea9595edaaa07684a3478e4b7b808c4298f42871d94f6adebdb77c90410883eafa2cbab478e49c17b3838c41984a9f5e93d82976849021086388ee9895678212e325a04616351050238b03ec4046208c9df6f3274f7a42ea1d10660bf5345f41f207d3785ea80c71f5a9f27e30e8d2fd20b7ab94907d1fcc611bfa733bca07b3798e73b5bfb3773a7b309f485eaa5a173d1847a8e84b9244c895cd83e944d2ea50f1b73e8778304b5a713b693a12fcbb8339e5a810c394acb7dcec60109f62664b87aecb791d4cde5bf1bb3fc9a8b8d2c1dc267c5c4f821089dab0c1021973308a70f11393dd891502c89083497d5e9a0b21a5d9ec71306593b27ff25386a7281c8ca62eebdadaa5abe46f308b28ef6f112927c8d573ecd0227bc8708341bf77e89ce29a04bb0da6b3911ff27a49c99183c0066ee890c106934e237752e4dcc9fcb206c34910428c3e4ff9cf83434d0da6542a5975eacefde55c461a8ca2bf629a89d160ae7caa3dd29f0925476730f7a5a869a9f3e568130eb52fbad8d1838727ed0202756630e590152d490a9243a528c8f15c06a35b955825f91ff92d19cc2df6b9a4a4a8a6f3c2a146648cc12c41e4158ffd1143d259e0e0d10ad8f3a2b960800c3130c1f3445c53c12ae5c360be1c3949bf46d2ed3d184c36da1bd6dd6ed1c50d3509c8f8c2712e22575d48da35834086174c3fa216ee91b43ba97ae4b8512220a30b4b8a1564b249b71017ca1a9193255dd56dc15849df2715c29e5c4870c8d042714f8574114d4d9f05c3c6ab4e554a414e0c0b066115e3c39d8ed86b5fc1d82157be9d88658a670553599d4650593c6ec9ab60aed73e8f7a4aa65eaea860ceebfb140c7b6a56645ce44b139182b12d8c0a3251ddd28551308950124d65bf3ef7950990010553b5bc9e2ec9b177949e601a93a97195a2552aee045310d2a2eba8785d13cc393fd4f928755a62aae3045d9005c860822984a8f8593ce87709598279448589dd72418b694a3048d2a17256ca26c124b4847fdb6df6788b04536849f1b255b8b0321ec16025b5548ea22e5cc74986118ca26de4c5a75abfd8777471c375e4d842478e94510473cde5e7beb020026410c1285927ce4891233d8f56011943305d8f1a253caa38d4b8f01e39180232846052b247cc67d605b9054046108c975ecdd7cf73c9bb38200432806090af2351aef23f30fa8dca362ff314268a64f8c01494e5302a8817f5e8f5c01872cfacef523bbac83b7264f0c03c72aa1d4f7ba4337f072693643a85ec900eccd6973fa99f545e2bc98121a7389e7c847060c8e6759542957c49eb0d0cee71c2c8f8549ee26203934e21f58a6a76f69cd4c09c3a24b1e05e6769cc0bc8a0c137427bbe6bc9bd2f0eb5828347e3c818c898c10c64c840460c8ca03baac8564717396cc880813969d719f5db0bf1de1718c35d941a093a2f90e1828f5618748f1c95a53bacc4cc0aa48ceccc4921c5a1050f1fab3009efb3104e0921bf6fe1431588dd16fdf954362acfb1430b367ca4c268a9dc2cf72f8a52692b45f84085d15f43b8dfec79afa7ec071fa7302571b19c2a3385d94e99e7b471f928c5d5f263134ecda4308a34f5a9b9fd1a261d853177e4dba8f56edbf8218a748efa47352d59be8642ab90747ad15a13165070b9fbf127278bcba94f989dcdbac683e50a9fadb127cce65154259f347a6ee2502b03f8e88459cee6aa73d529d3951326754979d9295cdec9d9001f9b307f8a154fb84c3e3461ae50418f962fcf0f392d3e32619058e5e915422f4926f081098350a245ec558a26455b8257077c5cc23c6bd1543be8f68f6cf9b08429efc58c794e5397a7ea47250c62d34ca29c05edef97067c50c2e821a895560a49117e347c4cc29ccd74a77afacf0912fb9084a94bb79b74e468408d2c6ad4c8a2c617de805d37277c44c210cb7e3f88644992c8cef00109a3640b2a74ca5e86e1e3116651a9f2ed22e8d241a95df87084415dc8fa13162e65d31b61aeebb6eb12a7792d62844972450f19ef2c67d922cc3ba7af737a8f0e512bc2741a6662325b612a7c858f4418fd634c69a66dc71e1161bc4e767929f8cb08ed10e60bd5d9cba6a64f04b7e81dc6064143f45a6af4a4cb1b22a8818f42182c5f6951192aa6224a88dc3434a29ed2296e8a43ad043c6e2057e1631046f5135a7218cf49545b086ce006013e0461502a9869959055c72f5c788f05142021bfc0165b341715b06103a9f0110873b2ad24feb95d844500c1798714dff172169e638716850f1f7f30f9289d75d783fc521387da7ef8c11cc7fe4dee33a2c71087da08dc79e4471f8ce77e2ff1438e5f0e3ba0dc2ae0830f8628d122ad890b1f7b309d47bafff1ac1e0c39db5b576f3fa8892d163ef2e0e7483dd16329f3f504bd63f160daf43ea5de65657e5ae1e30e085167397729c5ad8c60d25454a9bd0ee2143eea604a07a3f79ed82c9917324e366cd89883e9c3a4bc973ad5234ebed8a145042890b6c881230b1b49f8900371748a8f35ab3f53c5814df13737e1c08d5b4ed9be376c5a5dd4858d99187a3720da4776d9882db30d054db50ba3573ff5c60674d9566dbde70ae61aba6c9752b4bae814ae1a76bfb87c233b8c270da6bfbb7d67bfce514343a2bee3f14c8814c22f5291f3a2b9c08f331857544afaefde7192f002663025d38bd1fddbbfeb2983e9f53c4fcaf6116dc43bbcc70278f04106f38a4a3217b4a8205e31e1630ce652e9b3e74b73e9622406c3c9ff7995f0c1530585c16cda492f720e18cc219f7fb43026348485c717de802f98d3a45b12d2e64db7f782f1cd3736275e085b62171052ff62086d8f767be13bbcc8a246161538415320af2e051f5c30e42b4f4996daf9d4df1c7c6cc1a0d56a7b94bdebfb480b06114f4d08bb390b5ac8616ed9dadaab622f488b20ff72c84ae1030b461d5bdb499eec7412af6058f3caf27ce2d4bc680583faaca24d5f84921bab60b693f03bd7312a98ef2428a16d4176f23d059336ff5cd92477c55a523058dfa9b78d3099de47c11c72ccb6d3895ef001058359ca6231774f442e0938a0c6c7138c958469f5c88d4357f0e104439af861225654f0d10473d00ce13941f6e434ca7182fce283094617f94fb6af11def213b80e371cc2c712cc1e2b690b61db02e14309a69044c9f893f10a55151f7c24c1dc5539f6372498b294b4ac967b418888024f3a721cc1e429c52ad1afb311b23abc878e0e01b91e7c18c1b0bf66e9b4b6894aa122986386ddc7c72a3d7dc74bcee1c14a021a92305cdcf7655355c95da41b091a90b874ca5e95c338d4104081b332d078442a82a58f1d361a8186230c32f12dcbd2f7b33c1a8d306d7f9ece0f9dbb9fc6a16644a0c1088348a22e3d75e8afb82fc230223a7b494c4f12941461f653231bee12c4542811e6ea8f2222a7542dde4184e13da89ccea25edaca8730bedbea9aca22f2d586308739bf5163ba92aa5288ed54e5180d4298530cf1c99428ebc9168d4118562eb69ef75dea938e1caf05175dec40808e1c08604dd01084f97fe4460c179556d25f1cee51022f7a94200206a011084310d7a6cf3c87a5a0a501085330d7fbbc3dbacefb3f1894a8147207d99576763f18ff2ca5ce6df7f95ba6d107e3bfbd4f98df4965691268f0c1f0d7a5f3bd0753f8d3c184c795ecf2ebc1642336eed1dab4a487438db740230f06c92539c71011c243bd800a785182e407f0a204c9135a81061ecca274444ba71942362dd21dcc3976d8d31d7fb2f376308f10e69d26416d45f7041a753058fa8f24750f1dcc6f2e6afb6d3e45b4ccc19462b9e4fe739940430ea610ed3e2dfc648b368a83f9c542c8fe37b32f0d0e66916469c3dd9208617a83d14d6d4eca66eb041a6e3025c996724d34112425b5c17c97e3563eb282bd87c80626e7b64e1d847e0d051123c7ce5e570da6b8173fd48d38dbde10d360caeee7a29208a1c1dce92e8b9acb229ec1bc3161c6d4753398bf4ca5fda0efa3e7530683ce1372ce31b4c73515443298a4de4b88da93839824d3188321697d0921a9490c265133553988250c77b23e99fb49642dd00083290769e3499c75051a5f30e56e958e96949ad3712f9824a4d331c23f9467b50b9cbb8b98985ca9e40a090d2e18c4c8251d4dfd446f8254a0b105b3f558a85b6f51af90160c3b792fd69e3a0be61492b24f9fc28dca5a7651a08105e3a551e15373b5408fde0201366ce8f01e3d7a8bb71fd0b8826177525291fffbebf45630f7870719b7a3bb925f05937e55dc8b4e6922f854b0dc838e97a5fd14ccd9fd21eaf5d2b72849c114576e5225ffca7b52144c29e46c0f1392ce7813148ca63627f566f2644b7a823174baec6891134c4185e491d72c057d76134cb975a7cfd4d47f88996010223afebb88d331ee12cc5f7deb49b3a20453c7af9c578224097dd061a6ac4a890483d8c91b3124e8b4a03c82d146be46e89817ec934630fb4e32719d54048390587542a9b67b0e11ccaf97a7a3840aa51f82495f562b2569cb8488423025d5a267ea07c15c29c9ec9b1a08a63cb9e3454b4a4fb7fb8141697d7c93a126669d0f8cf62aaaad720f0c172baf98ca7255d7786032a1f9f162a990fc543b30efa5daca9d5babd2a203433691f04977d4eaef7260faac1d714f6fd775690b68e0c01462f29561a14b8c7f0353c7959830c1533d4575010d1b1827e86bc9c165b42ea9062691e3738cca9b9011d3c09c52d372483a7c9093cec028a7e276b608399e90d0908149dd87f3b577c949e53da0110343f449ba6e2107e195631a3030956b884a4a2ba5b0660f1a2f30e88a8550232e28112637767471e304bd8301345c601e6d5b224e54eaaf120ed4c3df8c5839c08c5698730a5e73e954e4d2392b4c3129538448f0307fd262c62a0cc922959f9d7c56f8bae87103078f1278911898a10af388b58aebdfa7aa27db8e0ecc4885f1b25c72edcc0c5418fc2c567b9ae914064b1ee6b4c75ac8222e6698c26c596cd4b4d95e0a4308a72b2d377c846ee8c811023f6735b4484005b868dfd1838742600337483083146663c62850db79940cf78ea1a328ea30ded5fe21c9271199118a9c018a6aee7ed39cf109b3a950f23f69f72c08333cb167fbf4b192ea74b1c328cce8c40c4e98d3e585052d972f219db109739e66292b1dd78421074f2622ab3dd984333261bc14bc52d49b8bded112d0d1458e14e4e022470f2f2290766306264c123bc6e914ae27cba765987109d3d85ecc7a5a67c878675ff8f1608625cc2ffac4fe544a1a6654c2a4c7839af0cb79c20751c2a4ee35ffcf2e6911ed9961c624cc497685c76f8db0fd6f6186248cfa9d7208ad22845d50cd888429bbdb8f5ee913f9d70287199030681366ebd1bb4798437ea5fab10c6086230ceadd92b05c923c4539a31126abdaae95772d99274698e48b4839574b499f2c6a94046a6451a32250238b1a05811a59d4a807d4c8a24639a04616356a0d3316614a3951fb238c48e64138d41461c8a9aedb5bb2e5ad236624c2d46579c4af65e77769c7891988404c0ac29b710843bcec13ee6dd9b96308739f48fa3cb7606246214c9ffcc4e5edbc6b6d94984108737b8a306676394e904b8002939831089355752c91cae57e6d4118e737840e11dd21eb06c22cb77ec9e60584a9e3e5c892b2272556fd8341fb49b9a423cdc22f7e3004c915fdecba5348227d309fa8f1b872963ee97c2874998a593ab9076dd74a4fbe93512910b83accd083412439ea274bdab9370fc6ef4b9aa223860783e594950f56ea8c3b184c8f09112f3746d045170af8a2470ed4c5167e013b98439c0ed7f73eda2b6287197530fc9c48e1dd92ba41cca083494df474a5252819676141cc9883295c332ec58d4932f4251033e460969f181fb225bbec901b27dde0d16547991107e39f144f5622b9c5169d050270f4c8810139cc8083e98307a12aa5bbc8a5df60502a29292337a47e8fa40833dc60c8a1dec6236f08214466b4c1a02bab794a4a5d499c3885196c30a5dbd2f9cd2eca85bb06b3597aa474aaf56d5229cc5083495aae9dda3b6172ef341892ece8c599e5c448a2c1e87f91dad44e253dda8c3398929e0a41e8331de1c00c33982c7f876c8de9182a550653aa107cc24c0a2a9d14871aeb98410653cea6c4732d33c660b6f65a33af60de956e31430ce694e485af533944ddc77bece882475e0d2d12405a30230c260fc9ac3a0495a3b60706e3a4fc74671b79667433be604a496f569be105d3e4b83d595444c9f9ef82e9524e3a56ab1f6d3e5098c105837b65bdd788284a9f5b309c1239c7e649be3a9d166664c1902ecc7f5ec8f5974d988105738a47d11f36df199611f0e807d8b031021ecd052f61c6158c67724be9d3ec17a5b782b1f3a2c6c9b9a81afa2a987290ef1d4d7b2a1864bee6e753d949159a8229798ef1c9f4c78858a5609e20424e697e89822994983591ac837a8440c16c722aa2bc3bbe444f304b8aa13f5a7dc98ee904a379129eae3e96420e9b60cebb16f14b528b3e1d130ca34cbb87eb2472922de128304309660f5274fd74242d7a49826146c7f08e914482c17c52ae798e388430e308661f9d9d33547453cb19c190c292951ef917c1a8a973127bab3a8812118caff2ba9f3b4330fe8576dccd34fbd8118249a49fb56c2525a376100ca646e28b4e1b08e6b475d7cbbad06de11f182e7fd42e11533ae7d60726c9324947bcbea473a507e636a12dd607cfcf1ee181b16c8264c9ade629077760ce33ed60b2caafd781a6fb6437452e1b368a096cd8b01b564c703cbc302307a624aee31e724ef9b24ae0050ecc6aeab48c1851a3f20d4cda53c8f57d22bd6e6e03634fb6f0092aae81e1ac93e87913f9c10c1a987ff497756929a5443f039389ecbca09db166be0c4c566de5f1241e0353d8a710f48c9dc81d06a660a1a6f37e3c5961f402534b0e9e43bd544567860b4c2959f794148ba2d4a715e670f94d820a8f172cca0a831af3bd907672e98cab3025a1a1c3e72861cf355598dd74decefc94694152a197cafe753f316e54183e07afaff414273d8730ba0895b591d35acad010a68a66213eb95f08534a512d95768aafb4096112b2267d4821de01168330a891fd173e47e599920fb01084f16767524ea14ec47c02611c8ba371fea132cd826b032c0061f008f223bc5c89182b167f30a67fe98caf10f6e7112cfc60ca1571d9d53c27cf9e3e982d986e4515990f79c5dcce032cf66012b5ed793f276cb585851e8cae7b395bf2f3602ead152a5808cd49723c9823841525b2ac94652b0758dcc1ac1d2de8041bd3fe931d0c3b227d9467b99160d7c1a422ebd245e8d0c1f0b15a74f73772d93d07730e4a9f72f17055d7c9c1209250f25db3dcb4567130a73f5d9ed3727af01a0e86b72c29fec9c7f818bfc16451e5a299ff7f8e123798cab2ca3d459b4ed5da601242abfb535cb444cc0643cead0fa372b664466b30c5501dad547ec892536a30e4c8312b9a472aa54b8371b32ce413f2794fa768307fb56ca8a4268a5cfe0c46fbf7df4b1f9bc1a03bbd79548b2062c432183cfd468e2792272d8f0ce6770b612a29e9919434998bf4bea5d42506537b88df78d705fb2a0ce6d7bef7a4a2aaefc36030a88a0e3d93922f98e3fd82e71f75895b7bc1a444570a2134cbc4e72e985dcde4c24f485adae482a95f434417b5b1d882f92de57aac4ef657c3420be69f0b9539592e26cd5864c11817417fead39f76d45860c164d7a237679fa5c682c5154cb9295b5726e2d39d5858c138b1b46bf6bdbac9874515cc9595e2febaaac4aa60410573f03ebd6c1d9f4472584cc1a85eb2c2cb7748154f5848c15cd1e34bb21d89f2611105c3f958bfb667fea88b05144ca73b257dd7a39722098b2718ad725c6bcf2d5e1dc7c20906a574c8717d3672870b164d485d55aa4c305d99beb6a41eba935f8231be52bb4af4541f562598e4d554dc9266120ca2ecaf4ccc0409a6b6b80df73862fae4473056a834298fedef85d408a6fe703a4c12a55210b708c64ae2e39ece93114c02164430a79061232badcdc7c8100c1fb952daff10bbfb138221470b313dece5917e10cc1d3a2be5a0d4a47015104c16fb913f665d1e15fc81219a04a54cf5eb03e3a87ed5f88f8bf9aa07a6d8222b847e4bd77de18141b448b4381def7e523b3085124af4b9593a30bf781e51ad1e59ec9203634dd09268c9535b7638309cbc9c32e24e4e4a826e60b8ec4827aa2a1b98ef63b29a09df0db506e6706791437a9006860ba274f4bf494bbacec020353f8524b4e30993c9c01c6cc28575516360ec24944e21a7199d9783814985ec94a2443ba5727e8149f372a5521d2c5c6090629156ab47c897aa15c648e165e3629b6a7fac308409229dd5a79f49afc2e0e6417e9bf0202da80a9375886822fcaac5445361feac0e17e6faddad830ab3cae9e4e1713bc4750a8387f0ed3ba23ff523a630a56c8c654b103ae574298ceb215a369192d69049617e55b3bd54965118279852a3153526465c14c65e4bed5e173fe542611e1b532289cf75f52f280c96aaf2f1ffd35f073f61f4a47de425c67ae9d113a69393d5d1f1634ade3a615eb1ca8a16448de8c909437af132b16ad984c1945a123a7bac0953467e2d4bda4c1865d4c67dd8c5fd14c584a9f5b4a414e34c55c34b98fc55b66267dd1286fca9b78448f982b2b212066d15cd632799ee28258c295faaab65a65e934998e424a5a6f4d8888c93244c32b2e4ca919c7ba49150d2689177970b12e6247164bea89091527c84395e921bcd9e31713ac2a0ee933b96d88f192a8d307e7ef6ff20bf5fc2cc08b3ffce859092f74f8e2dc2a4729478caa4c6fe0929c2f8167223b95f29ad27c29cdef7f3be2d88309c97b8cbe79ff0963c84b924a890bf8488214c16f4d7d2633bc87985b864856aa57d8d10e6a06c2cd8e83c0883c81fd673e54589941384f9654bfce532997b6120cca2ee64a4ebc997bd020873f409f227cf4b9414ff60ce395aa24790ffb12e3f988246ce59e446eb787d305712f94992103167e283713f840a3fbf1cdb720f263d2a7a7a39f5609e9cb5c24b4e69246b7930a74a19a9375a4ba7f0602a3d324705fb0e66919426a684538b90ba6149b8c20e064ff33c8976aa9de48757d4216fadcc180b5791b72031e2e9a415a6345c4107536b69be869ac4d2990b57ccc1a03ce9c6c53e3d1f593998d524e91421dd489e3f0ec6387b3fe1ad1793363898928831611e532ec5fa0693ee96ec5851bd2e88ef0a3798ce423e937095bb2bda608edf3e21fb74a5cf7759b8820d86a0a37fd3654bf9488870c51acc919410cfdab7fc271dae5083313c3b849c538e79bad3605ecb39fff3ac58e7091a4cdbc9824ee92fdce9601cae3883c9bb45478e52a3c0938eb3335c6106e39587f8d7f59e4e71f104dc0dae2883717ffd3e92b8a4333e19cc574a8753dfb193aad3184c5fa16bb74243851289e19e1199d3b59f309873c4cf27b98388a574c060bcb95041da5ecacbf517cc7dc22ad6342f98725d868ef3394b56dc05a3c5af2525aad4dfb65c30861227644794f290b76052cab2ccadc644b7aa055388da932f2e59305e1a75374957b0600c753174c34c6c85af602a319ee6c92bd46c690593bc9f875c0f17f72a18f48c2425a236e29c900a26d511cf45b897a8f4144c2fc99229ad9723c39382c9c2abff68cdac5c8a82e94b2746fcbc581a81823977c5092b0d95b3674f30283deab2a550b74eaa9dc1154e30a70c113454756f89dd04e3de96d223d764925c99604ef5d9e2b9fa9bfe540dae5882b183ceb594c2cb0757bfb84209a6b9f03be99764860a5f910443481f7f61ac37f2ec3c6e78ea4287f115483088525a394d57f2c9e708a6e0d13f3c558e118cda692e849df0fb945204731c35c2258860f3272382b1255ef5a970a777ab1d82e1728891a74250094ec7154230aa59a40a2a5fea0e3a4130d8ed9c8fd0394030a597481344dda378fb0393aedb3e30c991dd3ea5a3cddb035312219dca394bbabcc203732c49e245b5c8b32cd981e96f720efa3d44b15ceac0745abc4e56169145e88a1c18f42ca795cd884e3ae1c094a294fa132998ce9374035312d5309d14bcda3d3630e994fb9c4a486b604837ca73cce8ce17131a983e8e879ceba3b66539034314b55ab3fa64608cd733d5d2978b25c3a17a450c4c3d22e63030d6c491e9964a6c86fa028350513ff8f8978be40a17982e57cd639412513dd20a73ba77e96826bc432959619eb12cb7a2c2df4dfb008d55183d4a50ebb29e127d5685412425ea73e90f56c1d32215a699099a7e37d34085218b4af3f9917476ff294ce6f75ae17259861a99c2682afbe64c3e55de4e298cf2efe92227b344704961c81d6e44c2afa33087eca89654165e4ebc210ab37dd2164a4eee3eeb7028026884c2381e6e2adb7ec869d4a0307fca0f7257d4bcee2a1b008d4fa04fa993305a797de9c8d13d7c07f184697ef227d91d2b849277c294c6fa4f6f44909137270c41e46ddf9a4e631366d51bf9616b4ef77f0cd0d084b9e5c4dc4fe8d0c88479434bbc3e5507252e0d4ce0258c9282d895e861a31ae3502b858625b87e1f2d71f129fdb7021a9530875862ab663da56cc2da1d342841684cc2e4a7420d8bcda864afa60269200e8783e150301086c201e61373130000000c1894c54281604c24ace31e14000358362c46382a1a201e1216140983e35038100805c36130180c080642a13020200c8f8361381f7cf932fef52b4c2644e352c12e1631cd4aa40e9a692cfcbd9f534ebfc3a78b3afb9dba9c1b905c46da4512b39f3b17a5c55bea8821e7f73bd2d2a5884cf3741f5f125c487e4a45f6aa8c1b2fae4230aa9d6d11a9ef1050d82319f5d01c220996de28e1b9a669bf8d1b8cacbcc457821ab0621a1f49c51d1e0e0d354cacbd46435046f3434ff95f4c71bb6bca36295a92a2405482949724e2a267a7b69c08f80915284275483c0e2c2150f04f918d0a2a1dd44aa81052c03207ca6ba87ea80ba85144514a51014545a1ee31411f0124854204c507c546cd52de3407284f28581aea1e40a18930d44fa89550520e05ccfc90faf69eac9e103cf1796af5f4fb747b02f9c4e20985135514b2a7cf276d9f7c9faed01df7fa680a0ce50795dda1800688141061a1b28133c4341d5364eb0d55010514839a026d0fa443412d14a2a338a458428d77d4bdb78f027c857a071506ea2ba87b2b7f03de10d471280ca8a117545ffda72ab61a95bca474548e91dc1ad402a8770aa56399db76a8424941e11728a0eda2a94bc0274c288e46f1700a5a0a08d49451924ae940dd8e28a0bb906a6e86fb132843b905c59f8a0c14202828282051c032dd8f02c674c2ad521410c76c4aab15a5236da3db870dd43d144c382a8ef729be6541a521ca98d405148345f12fb59ea90b3f79838277d4b8d43c1400281250888a0217527d311358d3a1cc7e545f9156d5c477283151400d60af0aea8942d5cb6c4256a19ea0fe42cda0004291481422a630a4c052281d7062a5e72eb55dd42c4a01758a1378f81e6f3f4b116d42c0381e9d690d87579c41d3bacb152018d7b3916e7f2e0f388edc6b7c15d2e360d0f53cbb37705aaaa03ed46657e66d85e59d721a127ea6bb3ec49b94f3b23582d3500dd560344d2ce2abeb5cbe9c9a7a7a212efc3fb29a92d0d73dba09b6879a26b588eb17ab35452fbe3eb362ad3122c11c41a512f033f6ae0dea4b4b990e3f5e3b6df032a3d41cda5b4ce9a98f6cd86ac48fd54b7a228b884ca9e3c235271b040d702681f2938628ad3a53aabd82386d0e4a6d982b93543854aaf94c9e75135469d6f01512c56748bacc3dcb9db40586ac23c036cf14c84280bc8c0a49e810ad46dd6e569c369e81743f475ebc42ec8f135158e8d051cf421ea3e9058d82eaf55258d345c8ef57fd088546ba58558c9431030ff206f9d0aeac2ce88d2065ac2e23ea293be514994a04d38c5867a8af441907778ced4a092566425d9ca980ead442cea91cce2c84ace386fce2a07ae625404ce99ecb515f4269513d923c45f8caa93c44fca685f158083e5b4f222fc9bc226df89e5a38db2d3fe29852ba0654790e600ec47a419c703beeab93b86cd5d4f517aae064c54a82e9c8744bb871f303d50ab1591449037022137f38c6b1c83609a170c4cdca03dc38f31205e27f7fba92e1b81860aec1c11f2e70d634f222b2109211ca52513571911db2008900c8369039630be5ef80c460655f408728c0d2ed00758287f3259f243f7cf98a3fb6aa6ef555cbf149e7b1cc80c0308049e085928f3b406431d38e63043c51e1abeefe67a5405b827594479d7618e4c8bc38358400f8f75dbd9058dd0bb2163c5c035f48ac67f367c36e432f373359fb32079d6c66bb53141e1bf44f166bc103933e34731aa338f23557e3a89f780a2cfa4f1f872812f3c61ba7c62b28b26ff86c04b70aa805ad4f8a830c742f1936e438484b311e486e8766c0f2c23f90806da710ec476295cc23130a66ed32fe69caf67581102d9f5d2c4555f0f19b2f2dd7fb44d21627d92caddbf13be6ac85360843f4542701836c89c9a4fa719d5b9ad3e0170a9626b04d2613fee01e7b6676fb8ae9362ab45376fffe90dad36f7c5aecf270e1363430ad23163c4bba2af5b46cf17d5f03d3b2c6198e658d31e0313444cc54a4a3fbf4400cbcea55e6ac4cdf1a31cae2634ee740b9c978dacbfabd6d9e027e5141d45761d9cc08ffd390b2d576826e2187e4c695e1cacc074dfe3bea58722cc88c621908bbc6a0a95b94598a9a92f78ec0cab2cd2090a860d733f665b2d49f185a913393c1edc979c67fa4bef2e6e266dbf4f2dcd94dce9c4e94268c76b37579fde0d7cea985ba34d294568d21fa4c74930b6d2128f0674980a5cd21f5931642e834189122e166d8bdada4709742b464020e74a526d3b6fe99342f16fccabda2393f83d449410e4d85278a672c942fb711be489106935ea5ceed27b6a717bff88311a16501fd1cb029614d0a0400775d465261fdc8ab07f04ac85b37aadc42d610caebaa9994d7fbcd23b69c984b0e93889b4ce45fdea34ec9c638e49bf3423e68a9c307265ae6a1d701f9344604d5f49ad162b24d99ea3ba2e9cd543f1a13c4464905064773d24327ad9438d4c52214d6719f14c98d8c44751a60889610c9806ce199aa39d1c7496ab8001d1931f39e7a228f79695eb8d59f645ec2f544e5b17933ac843a8587b397180bbedeccb05e0d537c6d3343b1008ec7d2f99270c67be813033bcc72d07ad63a71064771995929c6a9ca269596d0e62a54c575301963f59a80e881e97c56fff29889b8484d77a13ee7cd2c3646cf9fddcc7e5574878c0b41bb3e88096ca2a8d5e937b9b0788c3149998f8ca8598f555a1b5625e5b8893d5df1be3efa672a63424e6448a2b26caac91589ea15879e18a5d71641665d2a821994f45c7fd66d9868a456447bba556fb596227a286b24c2ac44a86d75924cdb2689b61d5dbb39fc01115f9e7adb79aa7b97e63b7a40653c138f638f742f04781318d1b3280250d103daa3babf830e60ef4233df414c22f3c3ff7bacb5fbaf50f182785fde9bb03fd09c1a17420b5c223e76ef70b3f210ea03e123c00ff081010978fc096fa121e44156c1f4f20e93e70942891510235809f87185c6cb766f0d0fca4bc564bc97fe904860d1070af2262003fe46c34ac9d35fe39d0174c6ee6bf1eeb44a2d801f137611ecadb942fcb46655ddd8eef688b637c97943fdc551d12b6618011ecc76e44dfac0c5a1a99b09235d619f85efcb4781c215c2caaff03a0d2c3fe5f822d1f07db71cf67c6c4dfd0851fc665bd21c8fb04b8ed15cba41b81d8af289e8f9ad7b1b7592f8e3c4a18cda644581fffd6054e8e70ab69f8538765063c8bfdebf9499784abe08e0822b4b265b21ee6b732b344ff3263ac09dffa0b6a5404e436fc511e6098778c1dee79f79d88485e6ac68cd90255d55af85de73e45de10cc9a095097b9a68f6fcb3e379eb7357a717398f8ecc09470c09e5947e8295c53040ca13b526f9a51af86f8b28185c1c4b0130b1529452a65f9b9e17ca15efd33404004aa13a65195d694257843781208721da2ce68f38bbe6c130dfc12f4c1b8c1013cf990b4eab318c443dc8069561a161e2c1918ba00adfe66f75439563b2af5fb9c2dda33562753da62f42818a0a06558884d7471b42a6ca6f3177daf4689ca850bb68bb1394c16d2e1d9375842d20f84915c42d9b5d44aee038287f10672ab90170755eb9ca21cea98ade775cc789db9e99294df3ddd3f35a99b5625141477ebf7920bd3265b7e7fd0c92f03332659f51a5161aa2ced07163a5d17b11ad56ddc2e92c25224c14dbfbae4edc3d13ee14ef6ccbd5768afda9d9f68b74aac4ff64b5d1763cc2520e9622cf13301a56fa9e62b0b44f3463f964158d5033b6d11a5455d8600b71cc2223d5e817bd33021695b7306d416ebd94bb6d8c04afc63a546505a6bb4af5a658304f54f8cbe0c1afb288ef5daba958633351700f0b3f57f52aa23268381abc596299eb87789608a9fb47844a9cd7730904604b2ea32965c617ecc2df5e0cd274028c38662485107acfb283f5641a1b0a84693c46697652169bd5022d7a912121a5ab5e8c0b682d8c0eb1ffdcb31689913dc5962264f3708abe8d42503c095626f052d6d0fbc48831e3d29a51895e1dbb4d477f8c51c6d1687ce6e83d00f807d0ac31159346f91889459c4c4352f8a840ec6dc2026ada80f8a30182b2688863ab81e02ac8d16bb5e4ec6499d16b6d9866cb02f00e76ff0d88d56d75ccdbdb9e1cb726a17f53a3ad19d89ec3c592bfa366c052d30bf1b8b5631a9bd75b608ddc026f26cd10b1792f89677e0ccdb18b8a18940d51c91fdb96e013eff6dd6e9c6a882e28287fa63f81646c941b3ea84405180f44ab7639866ea0bbc020fb09f80d55cb01992882be52b4aacff44a93bb32a8aa8c321bea96642d084e7346e19f83ea85465941a5fdada0c272cf852c61177af5a8bfd6f3a0c04dcdf516465e761a17ef93d4b92a09444042130e5b3cd7a1fe9140242b0abe9b1b1190626e1a5b99ded87759b3be84cd79593098498e533f8e9308ef4bcdf383b589089bb850ba1e721008b62b5794c9bb55ca74f51b4710c5967b38da8b1180dfe4ea451e59511cfd09dfeaadfdc9b49e411ec9f404ad17b1c350bb1db87eb4d516994a2074ddb7031d2b06f1104fa8e468fd45ed1798fc2a1f18b94799c0a527ef7a83eab07a1defb959ee7df6a5fb07391704e5a3f42776b7e7729c1dfa400ad08de9461be601cc8aa74a9837e9851c26b462e24926181a62d227a6cb26b0c92955fac29e2268976f2430d03e7a15d7dc41872b2e23a7f70acf51b49236679a4db62b4d60985b790d3f12d2d25f35d2250adad98fe6074757ce42f38ef2d2882ffde7590594803f38f19728cb4b403b380165b28a6fbd32afb5316e03aad2a57efbff9da1b7cbecafa1255015824da5722aa4f65602d3d3c50a693d580e1c2617747488e3b2491504103f3f53854d121973d05cc3c93e25ebbeab8db86c38d8c6ebb403b207721111786a82ebd784cd611ba6e60b13ebbe0b838e792d0879376659185b89de57ab630ce2b9c1f216fb6d3a1bb4199cf70793538d0a7c31b8e260240285011506a93ad82819811499863f513328669b03b571838da2efa5c083838de4f30b7852bf5aa65c4bfc5b65fb46b718bfe85e3f00790d40b8dbe81930024400bc60018157c81de929c0150032803f00ad00ba0180c99da9b7b51d24a5f188a7cd55676fc6a1fb211847bcb45dbf20834c3e75d4661e50ecc31e1dc2fa32858ca859130841008c02d916f30a802168ebb9f446c296dc6688ac0ee20ee4e203dc27624362c223f023602078415c41a8b608d0720b3b614f9d334d88e3473a1312905c912f78d2676374c1924643a8e0643708048cf44fea7b5478180181c3ee5e4d07801504199426966328ae9e0c4c9cb0361ab08ee7fa636da7f895924860a61f797441c9d75056ced52db1815d06f7cb8bb2cfa497d573403866ed2062779c5569e338e432ef97a8615eca6bb01243eb0ab066ce7065bd69b045eab645220384e41bcefa668722756c222dd09642a936341657e45e696e874aae926854c39c6a1b9a681c571e6c0d8f2a079b711950f1107be37a29f4791c2de4c100041a57dc170e0a542072a0511fcdbc3a19cf1ce5a9965495f603ad946e7bac0282743adf6adc871301befd99324902209531dea933e072caeb32f8e164c71fdf44a69979f73c1e752873a3876725edb681a64080389def191b2340985b16dab654c145f629bee846283f3b5b3e65ae9bc67ae24a1a5b235165e4eb4756fe24efc4d2712e5e16ceb5e850d197d16b64b9dcca035c8ecafb9bf2b4a35f40315662ec5271142f55576896451eafd451c52cea40a156defa8600f567b1f6273f2a74c8585d8368857c2667e6a6f7eea92f75577a195ebcda4fcb7f3260e609132d26251d0b695df4e3e053ce64f94fb674fd8161a57cefb9ce20440bf05835581a95f7325c47359b3dccd32a79f70a1804c1f74ade78d898a8cd055e3326b0963c9969d59e6c08f689566b80d309c9e703b33d2f0096dc745be1047142904810a10ce085cab64a9f6b60204d2a0d5823fa2a8883a5f7a08b930f68abab51e412c4efa2651166c4fc8a643f65a21fb08ccb0b3567971922f48b55c18e690681b8100481f504687a65c53c32e476f7c10ec09888d2ed4e8dd3d5dff45700f7f8d8f86bbca857905ca82e5907fb4b40f300e479315d849b384b35eb163c3cdd6ca5fbd57890c78c51c731740f0c9398d11771b7990fe50018068e0efc17d15556f83142e4f518f09f18c230fc2acac32ec01a7936d4e3115a160392e8b68d19fa3e391a2d27250ba7684bf02e62aaafc73c3f73d1386870f4e864cdcbe36ed476b6a9d5c458244186b66e3af6d66921bd809782d00018cde022ed650b13eddc8439aecc4b94907c540b3830496cc581d862f9533230b2f94bf878b7bbd427902f9d8723c47aa2400a39fd156d10bc9e1e4205b0a61bf873da8ca96b0799436154cc28310c5bcaa40ddd9531e9788c20a0095e144dd4f8bcf8bbc8811756ce1958265488ba1061d287f34562555e8293a9507488b1c6a45555348f49f60aa712555cbb385012ef339fd6a1c4314c5d05e377dca8c178017ff828b302bb2289ade20730422a7af11b1dff353c2e29581b6262d74ae6090713685ee325c37c78b04f6f952127d2e16c8444d0112d5f7b7ae5826d262bab6802da6f56141feb1a74a2adb5e83996a7982f063d5bf90bef85b82838fd082b236e3358760ede59abcbb5941a3986f612d126e2f409e3c3feccbb34c8c424810a3130338094366b2cb9d5f60605ff454abd26419a7c4ce6d3478a9eb7b0172543f050e4819a0da86936d7b3d8574af05528ffd793324c9d6dcf491039cc2a75062defc4cb2de00544085d30ab1fc54153d71634ee323d55e4129fa18313c465bc98dac976c8d742b4d158c87eddb411c53df8b2060f1f2af7456308e2d531f3af77d857c143b693f2ae5accc3d740ad4da299c692ff672c1c2846ec840c4bf0012340386fb9905b959eb464a88e1cf3ccc60f5810c6832f9c71894e176f7aa1a4f26c059f40cf786569c1be65be5b1ca0408fc8e7f33f0d18f72002fb565924bbf8c0e305daccdb64f455ae39eba50b81d8048296fe5698f70bfe01206c7a85071d95fe05969c634317714495d90e98cee1aa1470e1c48c3888ed7f5fff3b23c6c3a683a5915e881f637c1840a7ca4f0b9ccba19271fa2a26807278ade4c13b47d1949d2754e9e6dab42f75a7ea0644488e90e59287f509f5e68d7cf581832e16face54aad97f9bf5442015140d35a03c5b6d399e313cb22355af5f25590b8fb48bc095ab70ebe1c0eb748eb08aba80c31462b89ced23eaec0b866121fc2cac5a58242cd6a72b388214a28a61291c42407101c308112ec36de0a245ed0719ef6545a9d03d92a8ea48c6cb194ee722ad8517089e4d95a57633e98d4ef1576964200e1b57ae32a86018cd7c3512b3428f52ec138d5329375ea8c668912ab494e1a30c4335c1e2ae10852d164132810b9d1f5702f616fbc2b7923c43405731e8607f48d8cc613323848d8413b5700bc680202d5388bca85b0459bc8eadd80ac2f172aa82741a58c19274acf6960220d65b83a0b6f0acdaff4255bf2f2fc6f34426f90e92691791862e8aaef07245432b9b14813d50809544ce6dfb7165ee501fecf2d5995da6e61dcfe50a8b979911f695ac5c1a70569c7df6c73285fdca915cd1231741842c246b7126ec9702f2060ba71cf0c2d08412772dc76ccdbd34aa1770507c51b71ce93d9fcaa51fbc6f6b0bc32ca90ec1ba28512b09125020866a60c31cd6296cc2658058f42c69c3e730eb3b3b37b2070bda97b3659fb3b597b3de62af66a07e246d935e3f0c108db16529d2c9b409c962b8d650c3c6f0612320f664bb490271159b24162d31d46fdc00d9de70dbc1bcd879bac74379f450f759f0043f2326398d124004e5128ed08d69ba62307e6c6cb9513d72e59937fba46b90e36fe7beb5c8980331ae3f92f9cf19c84aeada588c05c22ff3c62685432ba4579153eed743c8ff4622cfb2082c23687eff1c45b8fcf4a0d1de4f8ea8b17a7327e2d564485393dfd1c0f506d229c45f0f95a17d05cd869fa5318a4cb5b558e136de23ca4c73c109749d9bd13c3cc5b16af993fae8f918d17030334ba390466a964da2273f5b6a1cc9f1d1c8f3e317a0019cbd1cfce42f80ee53b3e1afe4e12f1ed501e0d4ecc03fa9dbe322fd08578df48c73a3bc30b9939d0ac3d2d607476270daa668080a5f2772225efd8e5dcba048bd721ee296c0119d50a56978032ab9e3e1f6690b28b0cd29dcf5fc559e99eef43805d9a3e7ca21ddffc3de06895e775b8c60f2cc105ab253fae14e35c40f6fdf7d1bdaf4bacc32df9d0a22c042b0e67b11b4f5460493a31d39704d34bc457eed2cf6ee7d0e48acad1789f34747f83c7f8b4c7eaf3c1568dd420b28e6bd017a6549b336a39538e43fc56355317789c6eac0e68cce66c61c1682dfd9a05bd83001a7cb1b9c22d2a79a8ad3d98eb27b857f9943cf8b9807a628d8ea30e1eb9d0161c0121c9b3bae289d4a84f60fba79a9569104df21e090b8375991f3fa691c0596cb77a0f23fa536e0e0120e504aff489937e026bd8114d0d377a6109f3dca3346ff80a277b3cbd8e4f4973cb5c759b415df427438b600a5e45e0382154759b836bbb5c3956d43587ac5de18643bd6f4239ccf49c08fe78a56348909def6584c8773cc25f771f5c12b1e160a0e345d2084aa227319393fc42900216beb4a90e13f02cfdadfea450af1d83d9b8011227d8d47baa97116f8704ee91399fa8dcf7c23ae0478d25d1306c5633a01f9160d539fc3f1e9f66e757de978c418b82014d638b35c29b190a5306d78e38e43ea2b1acceabaf2c32a14db366d7e9d50188c680c973fc127141d66b4e696432532e5b2a2a9bc5e44825b832a2e85885abb1f6e2cbc5b74e5cb2e43a0b22d46dd2787de1157ef46f65b4ec551f21eb38709a30938167844d24d89592e9a8df5cf0b8d8afdc10bbd806784e24bdb781db3024776a1fa21328f0acd701b513357a766638581a55619c402070cca3f3ac0b4d2587e97ec548b16d5bf34aa8b37edf0508e0265c9c2592830a72a2d3be9bd155c9f530aa1f073326df5495a415fb8e37e54baa5a5a311f7a6e854ac0551a6ffc96b5db154269fd4930a81cfada77dc4992a7f15254a2aaa22221892a4503cbf3c61e5a7c71158068c965d5601e3b431233d0157695fa1b0eb00f515e4823a89742449c633a6bfcf3cccfd213156fcfed6ef25fa861499e63c51b8d85e6ba72d63f992506e054872c75e77182d09c673e773ec7a7ec85264db99489dbc72a32751bdce18efa169b416c111cc412a0cc1a42a885b7fa233c856b8d3834be3d8443f2d33fa3b98f0cc411372b02564cedd8de155dd8daba938ca75ea5993f0e105f7cd6e72f9913a1570e867507b1609bfd891cbca822054fd75e1e81f1d736148eb5945af592723d3698722f5094d31131f6399864f82b54a47428f6a8455454ba582a8b4b8928158707cd95e27a9c55cbb90fdea9e91ea3e6b71bf74454ad442971d18bc85caec8079b2ed1e8daf3298c954911dd040ce4e8fffe3ab82680e4d035c154d38331e658c32c24cd8dd138c79c725b2ee7a1ae27c59f85a61e818779102335183f4037b1d8052a1611409b7cbcef491b1928370fbebe8298a8f101bacb575334969b745f0068e06fdc618f5e5e750790471585520b9cd4262c9469a48e911b6428ad394cda2c3ecfe6d82d17113a86c27f0e3c5e4c7c4679f820302be446134e09ef93897c6162cc83223906e2a3aa95ec9a8bb43c45425f847054999ca1aa2b1144402c3422a851c32a4b7e51e5e22d22a24ada47a4a123982a6af0edb02bcfafff7cda1cc9dd9a7e014d4ade900bf67a41d9db262e00619abc794519649ae1852298f7ea51b649f0ed441d1ca38fd44d892e38bbaac15725a9a6e98d0c4b37f1123968d6229b17cee0de12143c8c12aa63819d047b6c665daab53930544e40fbb2af6b715288da3520a5b944e0cdc69462ca312ca29f2ca9db714bf868223d78b7d78fec34d5bce79805886d3ec00b7c674732994574366fa0addaba541cc2db83d64796783422362b1f1cf471e60cf617fecc85aee84fb4e96b217d3b481c98c0303b34dac63e20101946603bef6b8b76d87e69d5f35a5cdaf6d184880f47956f303b83bbe452096bcc462760603372f452e865b5080d5224091855bdcbfb3766fe460b9f2581bbcd5ab596cd1e0c4466b6891967fd0fb49c9146a935964c63474d48148b320f27d880b8d3f1ea2ef396ee3daa56a54e23c45be013ad8359d8b0b41291bc649ae51d911bfa6f8efb5a60bb7e32aa5acde878bfa684c993e7eade7241fd6050a23ec6112ff645c4f86368dc0e190d025bffdce7990e78fab27897927a44f41710e7d5c093b551aebc6fe6d758a35d6c0b104a4bec978ff054a147828a87925fbedb96a443b9d2218880cbef15e105d5ac50bee69e8fde00426788289d352314121a779051a128d6183de757a4e4d5a262f5a63bbf820fb1afe643056635ddb20c683d3aa951f3a0e1dd256aeff495cf55a692715e334bf0b094cb810611b7c497723dc7a60e851e2a0ae4b22b6a211282621f8785f2490d5d30315db591a6cda79a2b4388e795ecec2df12499c63dc48f846b31c4b8076274a401452b08da9da4b271338641f3c2f15dc741da5ff5fcf3585959536aa377d2fcea6d04508d171c4d6aba75c7e2f6bbc032681eaf869e61f5c9c0d0b9ec9f53de26cf1f882b8e259dfb1ef0c1603e6f102b99a009416c79eca9359014e236caee2862dc06810377eb455a8bb1580dedbb76baff0df8f3c58a6489e20ab468ecc51d689bb633404f520e94cb50e84b012d9d3de3a7ce56fd3ec5cc1d0d14b9da4a119f13bb0af486e1b5fb4f0dcdc07a37e3f399b09ec0ae323d430d25c2b0761e6ea0a8d9b12011e7e802caea49a3a09cde57038761a89968c31202e2ba7c564e3abef885b0fa14b04ea3b5db6f51b93a162f435e79e1c11e68218fc3d940ba5bc0bbd0006363433d3aac88fe0157e136ec0bfdd14fd3a29ffbfaf004e3e23b04df7d4364a5c090030864e4ac6b5f42e61ad6b1a39454f33b086fe4cb27a433a0f4ced43ec1f60d142667a07986c5c2201f6542bc53533bddab8df42a044c87761c6b0b0f234b959c2e154ae9b4260cbfc1b2d11b2ba6264890732c97233931642208a753d8c882d37f35703d5d352a020dd662671900dc4e214934ef4bf12b0563256bca535cd905634a5d76dc786b02fa83c38ee6474f483c7794b541ad4559498ced9fc6e956dc71818e42a45291c50233e489886ddc60d533b63f43fb2684a795cf3016b83fa86e15194d95f405e79cbfea52df80bbe49c07ab83a86b14b7df3f4cd0a1b1449510d0add5892356113be2e6432f885911f02f00a7c89514587379dbaf5a9518f6384c14cc79476540c85c54023beedc864f1a66b71ed4540a652828822093e9a08eaec3175226f9893c33c35e8d6d8ed9861e2a05e2378d204c59ee2111ea44096ed1c3afa9d13a866a1b531447f98c9a36d4ecbffbf4b8e8429a8a2a3a9803a6784f07c58420678bfb0a35d20e1c47ad1f3826b8cd7e974812cfb752c5def55507c2849166d6a39e19d09576ace1a995d37d7cdfb78dde036af699e32ab247267a4ffdf1de9d38cf5d9bda4563ec2f52ecf81f4410bd833cda1ca2b7c8126b8e4ec2662817e3e3668fcc0986197d5f18a5c24e20f1dc942e7ae3512be686a7b4d090003302cc8cbb6f363067afb8b79ccc81119ab9c4712f85a9f9dd0da7442ac2bad122abc27a10ad1250cb250464e843214812847f1779b50458f0c37211e7c72e5c505db811a778b84834537033dca3a1b868d84aff58c0b94739abc382cc708147568149212346e1e0ae92b7170fb3f8259522c65548495f65505713543340f6156dc9abd845eb36467471684827c7ed77fad36d652fdb670d68e8a96e1bf8f4296e639f1574254b86d001fff5ad584cc761e8d2b7c3928a846d6b46392d5d094a17218de13f7781a2f55ceb990388b86f5c2cf63f10249138c7e87f0bc7c84bc6a2972e0467aa601be4f814b9f50f0dbf1736d7f23be33752bf8b4d3fe819be731c741ef5bce647aa7638464207acb185ca23f513998e1a30d9dc99e9ba029275a949c983c28055fcd1e5d52a97e1c38085a08bf545c82ba01cd768492f880c2225c7f8a85984ae803463ebdef896ccc02ce0305c60c3650b2a4d001c33f3f3f3f3f3f3f3f9f73db826d1684b6206592e5273ce82a8ceb524a29a59452190070a0c0344208213fd60100000082e00c7a0cda0c99ac9244edc612b6e008c5d0d5b249ba6c5de06184c2f848f93c9a6bfc4a1a6c386cd0607b8147114affa969294245f75834d84c0ef333ee860711ca315396d039dac8345a0c6020d9b071030468a8c68d1caaf0188271367eaef4927193347864840214c0337808a1982b32fdd283d225a73d8280e838d1f7536bed3ec2030876ec66a9edcd8d76d7cc8f125d925cc286a9088f1f144c506dd2d745cf3ae8060f1f146eb3a44ddf49e7786a8f1e94f39938fbd983ca2fd38307c5505b2732779e069bd5e8d845617fc67428552a66372f3a745198bd2bf93d6f79d297848e5c147daf3cc8ce2d3acf0617054df2b3e85862cf56efb845416384997909eda2ab1e74d88291b74f71af6bb1ac16cb3ee124c1dd7fc51d43472d0ada46fe6a8e7799e6170d1db428987a480d6d9bac4549cac051a16316e57e3913b6f4ab850e5994c4ad5aba8d198b929fd4920e5814636ea87c6dea31a57e4549462cbfcbce0e5794dc3b3393c9d090b13b5a51902bd1fceefdfba10e5614c4c4f1fc9b444922933a5651ce0d5f3b5451126e92dc89cc0e32753a52511011da3747733de9845051de13d4c6f3d6718ab2891726db7ee3285987294a3a7e924950213bbdc47494a2f4e1545cc969de7c263ae8204551454b8ed7e5675a991996898e5114d45f44b8b69fd09b7688a2b45e1a56e4870d4351f4d3aad07b3d0db6f64107280a1ff37b6652718fc9a6c18639e8f844d9d47a1a3f951d46d534d8fc7ed0e189725e8fa737efbcd9de75343a3a514c9fce34fafe7f9c9a13257127a3c9e6eff966ae14746ca224b59a7f278bfb74bf431325b964a813c356e61a7926cab231d293927d63eb888992206c3c7bae6910e9250a3268a70cfdbac312e5e441aac6535725ca5f92a8a612ba74d2794a14c64dbaea2959c7243c93bd977b4dddf1bc4fb2d434d8323b2491e83a42948c668a44496b8c923d3ae98c79048952c92f31353ae811651369ed1fccff557b47945e369fcadedc56ee6944f9c3fac7dfcb3ad1734694f4fece8692f14e1af522caff1a3abaf3ac88624c137fe3946968934414df45f6893f113247444997ecf176ff93f8f61ea298a36bc7d78e99e3470d51b6bcb80c1a4c6dce17a2b031dc36ac6ace4409517413f6c4f3978328c91be4d9692b0551fed8b13393246a92740c447e179f9ee41110a5cc31662741a9524f5dc71fcadb9bc428425ad8d8d6e187e2893e9f3bc63032e7601f4aa6ff7bcb94d89c6d75f0a128f2246125e84fc71e4a67976dd669932c7277e8a1e8b71be4a7f38bd375471e4a2647ff26cf39c949eec043a9c3c7f0d9a2d2e3ec8e3b982fe79956b3f26d59e5f9ffaac2b78499da3bec50baadcfb31bc3b5c3bb97e8a843398c69b5ca9814f6b90e3a1477dea3c81c32364959c71c0aa246f57930bd77deaba0430e653f194aea11ab8d8e3894bd4e922d949ce452556dea804331c62cd64128d17430d18e3794f6746a6b296977f2ed7043b1acf5f7bac5db3dec6843f9838c41093b772f1ad3c18692109ff3a224e96a2a77aca11cc793f49dcdf3be7b40871a2c0d651ba1ef1eb29329b94243414963423fb56730551b1c3ace502e1b19a99a3e62eced3043d9b475108f7992f09ea40cc5bcb595f9326c7b6a64f0d63cefe26a43ee2d5dd33c9b6a0b15a6ed443bc6503495ad6b42c80feae60e31944fd05622776f93a4550e934304da1e48c18c1b1d61289df00e6aefe174e83b32d20106bde492b7933a6c81102c803bbea065c66a86c7bd5d66ea6d0c99fa945226167478a1a8b51f9ac4ccc7934aba50b60d42894936efecff7670a1d8b2499efac9883d5dc716caff9a4a304f9a1994dea10501746441a4030b3316d071051b098c1a3328d0800e2b544715bcf0c250800a53e89002033aa230630409e880c2013a9e80800e2728a0a3090ae860c28c190de858821212d09104910e24cc90d17184900e23c8e828c2003a8810a3630804e81042003a8250800e20cca8118604cc8d18482046c70fec739393248a010c50050e2a811d8a010cd0cf384806ee820e1f944b65b744ea5a6512d3e01937728451b6dad18372aad74cf53e32c824dec183928572cf156d4ad00deda2605fb297585295924ba68b6288e724b928684c3ac918a1dacc7d5c94cc93f264ab26b728f6ca9afc9a71cde4df16a58f416dd2ee259c287b2d8a99326734061f21eaa2454189e9a15f76b298e6b328b5673931c8f4d3bab32c0a721e6abe15961bec5894357b5cd16d3513198545f193ebd8c9ae7962ac5f514c932f4ee6126aae93ae2887f7ed37cd0d5da5b6a2a0c442cdfa4cfaa849562c2734557ac87315e5f658616182f02ea1524559368939bb5364be87a92876e9b30e7d16abe5a3a2b0c94be44bf493aebb539484877f39b984bc989123d5a081630618366ae8c530454932615486d88c065b598e1b367064296290c2f09c51cbf82a37c6280ab2539da4466fe8e5288a82f4ec320dddf11ffa6e448c5094c40edabf9ed384690c8a921846cc64e658c25b0f448c4f1484d57b7ad173224b92ef10c313c58b6dcf3ecac6d23d313a51d21d9333b6ca0923fb36c4e044496d0adda064f5e82ec721c626cabeb13adc44c8ba8e6ba2dc4974b46fc9b6269c68b0e57b11031b34443032328111ed438c4c94937c3e33557252ba9498284831511e4dc9720d312e5192ff2f949897cf9e8769886189628cd624fa3b4dd817fd0c312a6131285150a297fb79d64e269fcc9804a2cf04259a1a95248aed9e2956278949189f08312251784f6966a77e23c48044497adf247a868bd1a68e21c6238aa6db4b6f0e9bfc2b3f420c4714732c2d3f374a4604237b88d188729974c2e3bdcd095d69b0350e623082d39b842f3fa98ab188b26514d51acca388923826997c233ff64d1e2311c524f532c6f253efab921888289ca989a634cd3d4417e31005a1f493d68f218a4907eb14a23c37b235d8dd8dfc10218afed965437a83289d9c5ff48925c5a8eb08a2a454be68ff7135cbb0c608c4c60044597e53eed7ff3c9a6d81102cc09c10e30fc5ceb9bfae1de487829cbedda419a3da49d28792249ea0c4c96b6d4ae97c28e832bd61de312e88b187727ec9bf25e75b0f65bd2a51ad24c1d48c9c074bcbe3e7d4e9e2a1f4396550f2b747b38cdea1f87e429b4e723e49ead20e85eb581d346d8b5187c28915da2b64fced8be85052f26fbe8fdc584adee7503a41e3f576ffa62da1399b618c8288218772bb464d92eab4e5399b22461c8a496e38fd0db98d49d26658dd2862c0a17892d85964b7bcff4a6f287a6b58e69da004db911b4abe9ace6637d8a8926f4351ee648e8d73f9a57c36143d46cd60da534d89ce1a4ae2ce99d23174d4500cb2c3a7124a8cd61d93868292aea4b292e36828d6faea090fa29ec33e43b14506fd6c614adf673394bbd327e13eafe4937319cabab7333a9b4b86a2b759092657279d9c8ea1f822734c529d88a124fcde35bce4d12a66188af7555f72b762ee82a1ec6a15ba4a29a149c52f94334b4ec99d747ebbadc7f0424912b31ba46948bd1575a1704ac996b80a71a1f45b82567f367164e8b750be8f2798557a920411c6d04241d867f5ac29c7fb4359289df41a7ed407045c888185527799e89ee4e9e818b510e30aa59cfbd25cf5e3b135562869909feb25ba68783146158a3183e8afb9b43ef98e4185b259e79274686a0b18c1057050600114f8e29ce0d06064c4171231a650ceeefd245d75e5692f8562f2f7582236d22c3c51286fb8abd57037140a2e42a8756dc7916d3ea1f8ff72d29a50329390134abe1fabfb24e1fbe44d28ed6ce6adccf7dd969850ecb3f7cf4bbbff13b48472763cf9e1e45c090531e5c1afc449289858a7d2c44e3eaa2f128a71363b469774fa3e7a845296dc5127ab7dfc123542d962e38ef23816a13c16e2438e92f9940e11ca31f333636949e5263584628a66506b5bd2b69b8450ced82509a6f32808e5d49b3f9694a173e9402865f0ba0f1bc2d39ae607454b4d29da2475235efba02c326dcc264dd3ef447b50f2591f3161654f47110a3178609e3669522fde455173c9a7eb74122a6219401705d711eb273e7582017251da50633aa60c808b92a4cdf428930f73c100b7280972eeffbb367b8d8e2d8aa3debee4c9bdca19b160805a14b46713e4867b0e9ff306a045316490a1946e27117a8661be4003cce2dc28779e245da2e3481699da9cf427a144b1406eaaaaaf8c115b7a58246b63c9cdbe41d3785e91dc9cca735de39ab802533d22e3a2c4b25bd18928adebd9df99157efced1fcf679a5d5e45c2e374da8d314eab8a245b2b0d7a95399b8a748d898da202dda0c453692d79844ec168bbcc5adac38edc147dd6334f8d2e7796c292e172ff7766424e8a53a95ae81073df8de2bc8dd63167505714d679cc6526a2a583168af5dbff730769428d0a147ff6a90bffeccac2305f600d0cf0897290b973f8c58fe724f2848d2403744235c94507ff24fa95697560004e9c013651f8204cf2a4ba49e7fca3180ca08952cbecaa863ac9c4ce9b60804c147fd7a451ba7f1727c644317efd65b6b5901ad54b944dbefda46ab2099b939628e596493b2567c1086128e9bc4c2d329998b949c050fa9c459e18ec53d7c9bf500e4bd377eb186f52e98572e78eced72367f2490640ba50903eea36ab7f3b1f3b350308178a49bef0b65ccd516453dd4249cb5e28af3d69a17482c6c64d7f3b2fb1aa66a118d54fc7dcf9c4a614a9a501040bc55dd1b06ad27acedcc92b14d7dc449e68d2d3fbdb05102b943f4e88c6ae49ab50ccdba293c926219a9404102a94fcf4d465dfa7e7cfaa4ea1285729df7a1868396ed800818d1c60646064a40637dc072052286f6abcaf13275c3f4c2b415b5200240a05316baa544f2cd118ed408d3024a0ad6c008142c9e49ff86e56234f89419e50f29c7382b666e98492d8f9b426938cda13648302693218194993018234a118ed54fdf6b9da668f16409850f490f7a362d7ffe44c16204b288b6cde247ab2cc98f500440925c924393d96a73b4e4e06902494af84077dfbbdfcb4100d204848446d5ffe3fbed318801ca198c13f3e9cf4a05fd59111318018a15ca32439491d965a82686404c77b816aa4f5024811ca7e3e9aba64dc04102294de33e7a4e924086a90a30639ee0a2043c06e6dd5b4e2f35a773c94680aa5e3685272b4c2002284a266859f0ceacc8499970012848256bd0d35c9fe53ee5906102094cec3bcb985c877c981fca03caae22263ac689bc707a5cd928450db670f4a6e4ab490a2b7264a0c840745bd39a57487981c47df45514bb333fc7d3e17b52eca1f63bcce41cbb928ff8cf65ad7a751e37fe0620d17b79b717b51597dad8f5b1d936b6c4ee22dca2e27cf8f8e48d3db7dd8c2758fb6a557f4b5b0c3eade2e74363ed566b3454c12cfd6a3810f5a149318a9ba419da7aa8e0e1fb3284932c95952e58b870f5994cb3daba4a90de213c6173768988151c3d0a000afe023164593dd52e2662eb1d4d672f88045e165e44d92f1c354c97fbca2702156d4683f6bb1eac315b57d5c7e6a68cea759efaa83ea5c2b4a26a5c754b2e6bf795694e368491abc3eab28c9af79d3f5acffc85b15259d46af9e9467b757a6a25462278fd1b5e22a26a828e5ebb8aee8fbe314c5d40c5f92f0df14655beb4dbddda2ed2495a218aae56bfea725c8ff83149977bd5a7d9a5b9b95b7e7ddd7e8311937f0318a52075d9224bfc6eb142f081fa22897d4fb352376e329f9501474ab79892f49405152edd2de4e329360821f9f282739cb8f984c9fe59dc287278ab9c6b24b4cc7da0e7d74a2185f43e93edd2f27287d70a23ca2b6712659818f4d94e49363db8e90d9594c1f9a28ae96be90d679cf44494ef80aeda1249339480d1f9828e9a05a4b499a36e74c3e2e5114f16157d3a93e2c51f8f0adf9a5349ca0592a7c54a29c840e7a3d9495acada3f04189e25a095e3247a926516a93f458b9067d48a2ac214e337ff73d29f547244ae727ae09bfb924d9ec0f4814dd4566f8a04e8c1af1e3110525c6e947939ab4edc987234ab29408a5b1747ab7bb11a653a5ad296345644449363133abf4091751340d6772091d234bc828a2a44af6e57a86921d950b1f892889b69693626eb265e7ae0b1f8828a999f631b945ed3e797788920efd937dfe99f5b2218a31869511e9d7e939548892ec1c0dfb4968ce8cf9204449183b31ac3b9e6c62a3c1f631883485b42db1fd66063e0451f0cc9ca46749a289a913885258e92e9d4f534eab1f802877921d6ba46f3efe507c37517b62d4e8edf4c30f65135625f3c7b7739041ec4349266165bab2a2794a443e94c3275945e434756bbc87a275fa7a0b179dce45443d944528a993101e5682f020e6a1249d28a921b42841c62c1e4a961b7583ea5323ab535ff8b843b184899585ff6bddc9871dfc3aaf6fd9584b1937efec312af64be6a30ec553a5b972446e4cf67ed0a1a0694db4125c338592ff9843494cf24d541322264982ea430ec57b2df94df8ff118792898e613d69d6527afd8043b9c34d0ea57dbca1a471367630bdabf6398ae1c30d25d795ad597fcdd4b12c7cb4613b614b4c51a7d9337cb0a168b96372121d36efdb6b28461d3149e9f1aff0a186b28c162d61ef5d21f7471a8a3907a5ceba35d442fe4043a95db4a4699f9e7ff0e30c25af2d91fd24dbefcf1f6628ea95e609994d6dda4f19ca9741fb9eb8b6bbccf5e1830c2549a3277153ab499265632828b1ef6b5b3fc450ccf93ae347b1cfb531f7118672c8d090d3533fc05052f72d2a23f7dd5b64247c7ca12c9ec23b8a0cca6ad60f2f94f3dd2f64caa04acafda30b6579fdec3fd9e45c79c285c28d2cb9c4dbef606d6fa1e81d3d6e92ea27a70769a1a896962974f688979585929273ccaf5546d5dcb15050656299395e098d5da1d8164a4d8e5aa28ad25ba1184d30ef244f58859269f392e79324688e692a948377fdbd875cc73c4da16471f2cb968532f904a5507ed30cc2476993949751284815d52784ae3cc98642d9bed77bbbf22714b64d662d7154271454658e9ff5f7d18472301931219448abea3f9850f2f79125e6333542e76309e58b373186db1c259453777cc60e1f3e92504adfccd2b10a9739cf0b1f48289b249f10ea3678e68e99f07184242bff12320671123e8c5036e184ccb14fdb44f3a308c531ed71b3af12a1d4719fe48bb7b40fe5104a32b8c91eb3be4228ac9b8fb9462f0805bfd2dc9899f97d03847289d161ea6d4a52a2ffa07492d866e2f15be2331f14cc64cb24e7c867177d0f4a823c694bfaa052dd341f3c28a5c6ff0ec2be5d94434b7bb3c61826dfd245b96fb4493e97f1f6cc45f1328c7dba09429c24c34561bfa4c64dfae41685510dfd119b312baf2d4a1e9625696a0a994f6b514cddd39245a89f3b695a94aac246c7f3139308cd2c121e4ec9c8a22ce7b1932449db51cb63511e252766d11ed4fffbb028e6b5aaff2b25af280751279be4171bd3e38ad25e8a7a9243d38a72fe4799edd292193a2b0aa61973bd426615254bf9f938aa5673d854510ab1b6ce272641ea665351aafd31c94d07a1734b505152a6f49e5c6a6c93fe294ab2c895d892d372359ba2184d082549151d44be588ad2a7d53771214dee2891a2e8f226726b93ad0977140513449c98ef7470f59828caaab1d4acdc1a8a927589d9afe53b47e680a2bc41fede73754cfa361e9f2827d1243d5d5f0f4f145ca4568b0a591d1dd389a2c7191d8d797b70a2fcbe2597ee125aa33b9b28ffde2835e983c9a4e39a68af349758265c86d731132511bfa754f746b61e98487a4c3f2927737c09bac41e6ab615e3d9266b9b6e59a28c70ef4c9e943c2c5110756a9fea5387f57c021e95e83cf7799b32a144d144647f5d6f96d8781205e9d93e7fca9887244aab25c939f5c730b1241225abbb925d52b989152151d25faad7cd45a7ed0b051e8f28079939aa67b25b4ec911850d7dcbd125a711e54e97490a1d3f8c28a59f68f2e47399d8f422caf2d1440ff76f31112ba258f2eaf74ffa1251dc1017a7428f88d295a0e12a47fe29751e6273b3b8d0d2d42fd3d2b59817ddcfd3c31005d3678214116a37e85588828c31fba7d599102525e93e73cfc14194bd4f65aac77c1dab1544c9e3e57fd50b44a94ae7b3f7d879641c102525879149beab3cfe80b00e9e4b92e18e82871f8a1b4d73d8b0ab7fdbf7a17ca6935c4d157bf0a12428f927c61cbdc71e4aa594cad239316d5ca73df450da981521225a645d24018f3ce0e1c1676db6324fd0030f360286c71d8aad576d237ea64abe3dec50f64dd1ed6ae26d4a4e1dd2fb50dbb91457cb2acd071e742807b9dfa6c487daea4b0b1e7328c89226c764072529ed3ce450d68d9353a13ce3ce1f87a26ccf1e7028be9b9cfcb4e9fb8672965ce2c4555b9fcd33c2c30d2519d2e6ea53af63e990f06883f15ab736c79ca11ce6c320c1044646cc3cd850da8d39bfe9794cbfc71aca66b57eddd1efce75f4504369cb3ff7cb68e5ff891ff4364ed9033cd250d2bb95a7eb3de9781e68288c79a6981cb467289595b45d995366289aac87da29cda30c252f317baf3e175b2632947495c97bdc39efa03386d29d70a1af74530f31b4b1f6b2d7fa359a226fb2ef1b732e3166f48e3dc25050b296f67a8e3cc0806768d3fa7ca62f94ac94a851ff8c2657c7c30b05cd9334af64aed39ff5e8424149a1574f9aee9b6f3cb850d42c2dc1ca4afe5482b650cec9fcbf4489e9fc1b3c187868a19c937d1293dc588fb67a64a1f0257d8a27319b492c14ad4f569595acd649ec0a05a57793a07f73d767de0a25d59aa41159f6d9522f6abc007be051859210b1bfa7d337e7493a1b7850a1789d2f335e6e63a90dc7144af2efc44bb81b31d39142299459cbdcec77d22b0a05bdffaa29a39ce7d06ae00185d26a8c7ffae6c6898d37f0784241c355e7548f16cf0a69e0e184a226b147eba7521373d6ce8647130a9f317fb0511e130a671db44dcfa5cc49f570782ca198324ad09b5542f932dd379c204f2c692f3c92504c733244f409193deafe8507124ad20a226228e7db304a8ef6973e27226128773a491ead131130203aa6fa6955636d9b1e9ffd4a9293cbe9d251912f14c3f3e572fbd38925c671c380e00cfd79a19c7243dce24c2d742a8c2f6a8c8cd8a83132b202912ea03fe4bbcfb30917cabb694a2e4b75bef2b7505072768b3cd14413db988004225a288f8fbcca32ed99bfa4b250b0b4d22be9ae2ef7ea8d1c619c40040be5f120dee43c29912b94af933c795bdba294dcbd88154a25727443a3ef09a5845e60be282b13a902ef35b6b2a19dd72d779e3ebbbb093731fc7d225428c858c8d12d6b1f5d4d81c8144a1d646798cee615bb119142e964114a66d36db7441460814814ca9fe6b7f3e96f101fa7c166a3c69d08144a1e4294183ecae6516aab40e409c58ed57432eddf86d733449c6092357f4c9f322dd284528951f328f1ca3a3c4c28c67a79c71c14594231cfd6c914adf90002e30323105142614b890f5a7b73ec549c1e48c10c0e8824a198b4999cf49b93400409e5dee022ab1e34ec4f4728092594dc5eb57e9bdecc8088110ac23bc724b674e7f05b110a3257874927f7bb9b9208118a1f2eef93529e366c5e6408c512eaa4ee54be41a6ce8808a1d499d4af56f331f002dd08835b240865b1f6182dd4a5c1366306088cb5098800a198ebb3fde99e69e43020481a394c1859831c97223fc04bc3b5ddbc63dcb473f3c8244f723149c784061b8d1c060423233472e88d1c61d810f14149f4bbabb9ebe05ebf8721d28372688e6c8c3d1e23f51af902111e94db24f3d86c7f33f9b48b82a9ce47fdd8da25477551107d4a0751cd344a45b92869b4ab9244966873276b317841082e0ada6a639bca36f9ddd00521b728bf8c982872d5e536a95e84d8a2dc493ceb2ad9e74394d4a2bcb1a498ba8649fa9a105a944e923cb39aeabe517221b32837354e43576c5d543ed3eaa6330fbdd70d1b161819f9e2868d3432628410599436534f4c7ab2897a712c4a42a82c71ae6449b2ca1b3666807103b1dd401e088145d14e890b8fe9f973fabda2f026492599eab02b4afe2163e4c751a30d87173572c4000221ad28e9ffdc3a237b3a644da8023208614541292194d44c5a67bb81701545352594f62659939785a8a2e0e9d9c14409278a9b8a92dac84ee56e314aa82896d2e6379bf2294a3227d82615b9e94fd0147ccba589b58e76ad77f8e63a19299795a2fca52707d36127f62691a2bcaaa3c495afa3f8440df77da297b8284aa3c3753ee7d3efd786a2243a46dd248ed82675028ae295b0fd9b2eba3187433e51d2243bb88fa73d51d0d1e8b9a7d5904e9436efe793994c385155d8a9905fd29b28e9fdb065923cda36754234517451aaa3c924ae724d423251104dcfc1d44b091a3b4c9434cf5c29f524278de6258a6b1f63c6ecdb73426909ac46bd4e432cd7aeea33b5f43eb737b69c2a51cc23f35d9bf426bec4aa81104a94848f49108f6ef71de42193289c669a13939adadc9667d80c354968a19b7215b6d5b1a57aeab954cf6f12a334e98114cc382191288ad44ad77029240ab6f39b74f2244566465e0e306ad800c19ad98c90471433eff7f396b21591234a25b69f20c3b5fcca3b328276086944499ac9f0df19fff2278c28e6cf66eab39e421651da934ac9b43ef9449b1451125a2b3faf9549d678224a6266ec6eee300411c50bdd2aefedecffce218a31d56a73f36d08f4fcc5cce95121ca2774d2a4e45958ad4688822ae17e73e209b2de19443974671d354166def409c2bcce38b9d793bbafafd7b8ab12b3a1a7be3187d60f4a32b541342460e3023585104014b37d4db03315931bf72b84fca124674b939b99a44da3635808f143b1644e46d3ddd98dddcae0bc0f0525f483de58a6fc248d0fe5b85b92d819738ef69c07217b28e7d218df6546f4899d103d14649650dd1e739824ec6c08c94369735052c7a45d0fa460868d103c1484de6ca610327b89e5dba040e721e40ee5eb9c6a946ca5f3ed04c01c42ec502c253285d26c9f25f6b31a6198195fe03033e80e84d4a1d8255e3fe4e77428853a31b7ff666ce5670ee518f43f071963c6d235440eacb58baecb7d8dda995dee9b97da8558e9a490381433667dabcce839b41f0287b2a732ed38e187bc211943491b43ff8406dbdec88123c40d2513bdd67d2136cb04b5219935c814ef1acb5183840fc78d18500007ca5183093421840d2539e953ef5d22df3f9323061f0859c3fa194b7efc53c611a286ca5275f7c6ec43c5abda3b7a2e2d0d178286b2762e49c4c46555561a6c680b18c105104a23233b083943d94b99d628e26162fe65806a7c61038c1a786103040859a0cf0c66f253823a19fe329493863449a7b4d1ba3a198af184ccbef50e56aa8dc18f77d92fcdf43c1f2bddd4394c878d188adac9947ea8fee7100a0943b14fe76c36b73e7c4908180a7a920eae695b4cc809f10b458d3313a573741a4fbf10e28572c9612f6b8314e5e58574a11cf3499650621017ca41a55be7d175c816ca29ed24cda4d3102d9404af8f9bf673507aa42159d05356eeadc96d271f08c1c2b916d7329b369af7e156a384dd509f734c1231845ca1e0419be878b642ac50923fa88da7e46d74d5cc084248154adaad4789d1ac377e1b4285a2f589e94ffa193285624e7288bdc925d4fb0b9142b936e4e9f01bf64a761711128582d021b4272d4a6a986008144af2cc933ec93d7a5271c8134ab339291394b4595a73442794a432ddb24cfac3d8ed869026944a66f493924cf74b0e13ca49ca184ecd374b282629f5f375f4cec728a1a0934c1f26c7950c52938482f8bc0badf7dc316a154290508cdb35a19ddd7cc50b3942b1647c11dd7ffd9d232a8418a1fc3532c75a99d87f9a2294373e093fc9631c25888950fe0e4ad093b4a7d11c870ca120e2ba61571e64fa324408c5901a326a92857e1a8504a1b8a6b4470ffab6a413464208104ad71ff244089da74451c80fcaf7efaf1fe7723656213e28c74e9a9b5b46875142213d28bcec9bb9ba9db85512c2836ccbea4be76aeb4c9d762b51824c21ef5d94574c85d0de1d22b3d445497dfc3c7a32a9a4997251ded0f4a6f1735c143ea9ec78cf096db2bb4569ab4baabbaf9c248937882d4a7b1bd7d6c554c6e46b5116259a28a7dd26ebc7d0a2bc62f719845ab3282791c9b53255c87de64f009145b154c935427706132a8f4529bb57439c929ac45e7604105814c604ddb9e35e578be81505134a952ed94e7bfc0f07105714a3c9dfdefa4b172f6945314cc3e3b5358f922b2bcad6ff41876f341d34d5559446937a7daede52a307514551ffcc3349d2998a92bc1993b0569236258320a8287bf81d9dedc6e3d807728a728e57b641ee764c7a10531463da5162fcf5b414e54f8248ebeaa83176dba428b9fd7e3e69e334b8461866c60cf4400a668c808ca2a4fd496acedba5734e7a91540320a228cde97cfa2493447369c30b0c457376eae521b6c1810405b369f5951f96a59edda2e4e81ff4c488500b5a60830361d8f0c0c8480b6c78a178234718209f286988900ff2999ac1f74441cea649d29b5827ca2a4ac6a7daa04b300f270a3a7b10b3b1bd4d981a6319dea55d16b6e923aaa7f15b92288368a298e477e8db9a2d259932512ca594f0195da14f483151dcf0bf41fdbc65494d2f51ce937a26bdcb65d0906301c412658db9939c37bc4e00a944513493e8a24eee7462cc05104a14b309f550e9a964d3220d904914f4c2bc7743064412a58bad0b3f51aedd3a34fc22513c31d78e061bad9a36386c783181b33d48b4671afb3972bb769b995bd25c4c385593c601868d1a2323ae208f286ef6b65bcfbe238a794bf04f57a1be46de88a28ee890ad9d64041046d8398986380c0d10ccb01a802ca294fd7943d45544e1cdbd3af7eb7e4c992f8024a22ce6d6413f44d89f06828872850c27c5fe9f74133a44492ef9fa3e89927f3cc610259d6e9e3b7c4f92c493422c9bd6f44977194294e40d9d84f48c752739889224fd97e099394f4438c30451309d6a939ea851fb830e8e1a5f2406a274d249bd9a9e3b4926c9df3031b8c00d5403c3012f0c0f400051fad04126f1a6fda1ac9ed566db19cb01094ce0031cb8c05a00c40fa5ddb9f08c251880f4a1245cbb5a4e4394924b0e02207c288e321dfce4d42675d21e8a21a674de2911881eca9adf430975b27d893e481e0a3a99709289eed4551d103c944d9897704a3407f1afdfa15462907a23646b8736d5e66f6e96741440ea50d46ad13871fd0413561cc60b0ab81440e8508e41ee2699f192fa371c35302098612073280693a4b6fff6bd0f53a6e3eee363198a43414b35a3d89e246a74e050ba11eae2a93b90379493eb2641ce8c7d9534881bcae93fb5cd96e61cc56e83f3f6e1e159f261666aa6d9bc3d986019640e80b0a124ba3a7dd0de63c276206b285a299dabba25659c41d450f03621931cf479ee29014943e13668aad325e7eb7041d050b812a7eb69f95f27090a206728ae9a7d4982297947c94600c40c65534a90bb51cdb214678461be60ab41370640ca50fc9374db260f4a0e6a024286c2a8ceb8166bdd6d2563286f524a2621427d99b8e6001143c1e7245122eb71b207057f286db4cc25323af2f14341e89c537f4a2cb9b93e946b4ddc865fcd9b1d1f4a72d3b5dac4f6501c213ec7296953c99a1eca9ff1b964b83a0fe58ff1a93d8ea777d5782809427e7e3a4977289ed650bdde7d9f931dca9fa38971213c9f09aa4341cf27213347e950d2633da636fcac99cca19897e139961fd75e39943b633a2dee4187b9712829b3121d6bf6bb5a3894e62459c546e69884f20d253178bdc59f782783ec8682b6f5c70ca76a2f721b4af2a9141bed3dea346643a974aa6693b38692b0ec4db29b9cbc24a9a1f8b2f79b41bc6fd2901225e5a7d4203414f47e92bc67748682c7cdba33a16fff3743c94ad23f36f722fe2f43e1bf56fd640e194aee2528990493d1849331940419c367d31231148389139485d8b6d084a1f87a629a9bcddc130c858fa3b32859e3e6d85f28fce968ae75a66e5b2f944ade6d9c91d7dd6617ca9945c885728faa4e9fe4b680d47ca2872cd14231859c93493688df2f0ba53599fd5b33ac74b050aa923d7fa2b507b84239ac249de4fe70134d7a002b146ede32f637b504911ea00ac5a063ec9918a64249d908b936fd148a2e1ebca493c6c4ce91424198f698c39a44a178d96a72473f49630e85629097ad39f6a9623fa1184469a74fb3138a9ba22c4ee79d1173130a9ea2be64d11a4dbe4c2897e86b6e4aba8482dcbcaeaf99983b5542418d303947359350169d047ff5bcf9848984528715259860215aa31ea11ce38b09b111ca72d29450f7eaa3c322947457858ebe61ef1d11ca67b1ff7672728b368472c70ca3fb59e3c885501c9d623e328d0eb53408a592f934d35556e88150d69031ea1ff483929cb2fff1faa0249ea9d36963cc9ea8078593ca73b4d8a8c173001e143666e7089322e3eea2a41d457e9ed293a45e17e513d67d2753f3e92717651ba124f5a3041785ef939fc4a8b945e1f73d739df43ea1b145319774223e63f0ca4c2dcab949dd077957b5715a148455968afb0eea79cea22474ea6c1fe65e67a72ccad9c48da2ff4a878e3316450d192fb6ec653b4e589433635dd3ebc92bcaa1b1941aa144332597ae28559da079630927792c5b51381d4a4d5fb5fd24212b8a65e6213767f568827015e513deed8314f1f9715445f13ccbba2971b2841a53513825b704bb1b15e5d5ee9824594acc8c4f5152ea24af312ddbbc29ca31e8cd49e64f827db61445b9f564aa7d727f9414050f256af44bd935d9284a423ec7d1a5cbe22a1445494d9c56c9589ed6148ac27aa5ed9dc922c5038a52bd897b92967ffc924f944fbb5eaae8e667d613e524a81b8ff161270a3e32a88f79e544e9d4d7a7888e4e4f6ea2eca984b63b0d1ddf34512a49d97666ea51b72e1305cd78a7366e36314a98287b7c8df9f7106dba44f9d2cae3a42fb1794b943dea482b135489e2963625f38712459735914985f7a77e122591dd3993acb7f62792287cc7c689db27651889728c31e91a3226cf194894bc35c72093d0cdd51f518acd9ee411724441852c372b69443174d09913c388828939959cebec12ed459404994cb39eb022cab7319fca642811c52458783ccd7ca5ae21a2a04e924c4e663335ab1da2747daa79543e27a19a210aab277f4ecc9b4a525a214aa2b64c9c933334c919218a41fc466df3065192378ef630b2a6732688823ca95594249f92a2b24014c4e49ce4291e62024429d44f73b4633ee70fa513dce418254cf864f243a9f563959e6899b9ef434992e263ba9a24d7880f45138359c79833cf4df650ce994f75e87ed5a4d143419f87f63413b5a73c9483cb6fd4de0c6e311e4a6a5d173e9a9e367b8772ffc98895a4e122b543e14edca01a74307dd7a128aa1b633c9652a24351c47b6e6a9376a33887728ecdbb317925430e8557538fa90429576225230ee50c56a29bfa094d3228030e255193944abd36196ca6c136030c1b35500b6ed8488776fe86a2fbdcbadd68f87c90065b9a0cba64b8a1d855e29a28a24465b4a1741974f858d296187e556543b9dc37e959c69f99cd1f64aca114c2cc3e0833ddfd4d066ed49811068e34196a28a7faa4343edd32d250529d54ac8e906d3209a3a19c9370929049c624e9279da1a831b989e9acd7a493198a419824991a53c92843e9426357dd668da181f9c23720830cc556bbcc6f3969410b6c78318692787210a6d746e669530c7a9247a8951c4d0b43b13dbe563c5409e2c468b0e1d5b89123c150d6b06f62c4a6f0f90b45f552d1f1619b7412c6e1857289f01377fea9f46eba50cade387f352587901e2e14d3e8b88d9947663b2d0a646ca1bc1bf3bcc79216caa5192d946ea837e166a1b8c1938c3135454c4d2b90818572e6948fcff34f9f357625907105f4aa54e55a8b99ac9f0c2b68efdad6f932235eedb527272fd5cf79e2886454a198defde4a047092693dac2f822033598000e1c0604231819a9413232a2051954289f8ea3bdb12537c86c0632a650126b845d2611d536973320430a05dffadeb232fdaa220db68e423196e01e5f763695560f0ac5645f9ff7e327edc51d90f184a2e949a74b181d27146367cc7193a4d1605b0b818c2694e783547153e2cb6042317586dda8eee8657234d8d240206309055963423e9e12f254641b810c2514d47b58dc864e7256114712caad9ba42f1d7b31ed414261948dbb9c38d1396326907184c2291d6a5b9d6401194628853a134a78d0292a7e1945284737ff7ca55a5f79171944285bf6c946bf90490e6f08c5136446113a46dbfd1c096408a1a4226454c7d1ca0842295d3ebe58e9fa0725bd800c201476ae439724934ea9511a327e5050dd13a75e5908bcf0a2c606464664f8e0c1a83103306230038c1a2d40c90064f4a0d475393df198f9a899d1b3d66b973478023278503af1ed3ba693f8d817bb8b92cf956617fd992ea694ae8b727f2acdd1b0d160fd80482e4a7a9bde64cb694c823c0718b8287c8dee28594536bc9b038c1a37c2f0193372e0b04163c69e8d1a33c2c0a11e48c10c0c88dca2983bad98a4bc33dd98d8a278e925a84caf355fad482d0ab75b7265ed4b8bc2c61271f26a3e1dd39c45b1fd0465f2268ba2575b6ade189158942cb48b38d5ddf6b9128145b99478a2b7ac91525a062c6081919113794549ccbb99aab269ec52115794f37efb97c96b2b2ccf15af8d8b17bfee0f1de6af4d93242bb6f5b96ad9b94a7115c56c7af389eb39aaa8453e35ae724b7490714f9a32194f91549457cdc45d880b9dd3455051b2aa76bd923d6bdc1811444e51ae73dd6032274b99ff4c51ea68a2ded52e62c22d4571e343f4f967485138c1744919fdd751944bc96b223e7dbfafdb1608c1025a441405bd27c59e505993f3271465399dca549e76a6394151cef8334966ede6faa4c8276a173775b5dcb76c35750de59deb94443c513a61948cefb71ea3e78fd02c20d289e2e73822f7408413c53aef35214b1265c2641325396ace1ec394b449e934518c2ba2a5add3673069c581a31d209289b26765b2ea1c732d8d8ccc98d18a031913453121b73e5927d35c5fa2f4278812c73d5f46554b14a38a0c6d7db513daae8472152b2f776dd7161ea764cf4c6f7293d250a29893acb3f95d9346d13e9a44f957f43298127672e5229228963cea57b389b14a12138992ed7c085992f698152151ac2a21a7e6497a49a1c8238a2a5fc2e6123bf346a97f20e288e64b4f9077b2876ed8383c10694471c39e5a9ad8ae90d6b05182fd428411e52e7df31954b38852a68e7ae53fdf88410e3332826ef00c3338fe20dd8188228aea63e19e2459220a27cecce7dca52eb71301114414dcba843dede33626e910c5923b84cb8c6d08b46cf55bed2adb53836a1379224e8d440a51ccb143e7786247ed982342889252e9a324f1298434c90a20416410c5b4b226099dd9464942396c7821829191198623870d2f70b48908a26872a6c7fc7154e9c98904a2983369516e3297f0944500614ccd697bbf3fb876d5f65562719af5a6995b9e53dc7e28c84ce5d1bdbadc37333232323232627603079b1b3130227d28f88a7eb7c949880e1e3e946d62dfb6617b9b5b739e6ba7d23d94838c2173c9ccbd6550e3b102de679e1e10d143b94b50df41764c72f7a6a2209287720e726dbb168be0a118b4ccbb64521354f477287ed0a74e1a99fae49ced509025c8911dfe4594552275286b2615a7316ce850d8a4576723749fc9c93914a3e59c58279514b2537228e579322f1db13657c6a130a337082593b857920e0ee86ea79588a9aa76cd79d49c656b9137143e7ecab57effe7ac4646aa20e286b27b9b5e0f9fc54e4d1e8c18d8e0cb2541b7a19c5bb4af49db9217ba919119226c289cda24d6733c712f746b289ff413423f65a83e25226a2856789c704ad4a4a170a2e7e425a9af5e2082864f64d2ccb9936ca019376c989da1983e9e996df27c2f1d1a3c22628652671ce5af62d260a301a2c17643a40c05edacd99b4d523672af21428683c89ad8f399f40284c2400343640c4531c9ed3fbbd70b18c1050c0a013a35bc10c1c8c81b7483468cfca8844e8522d250281087c4e170301408156f570073130800203c200ac542a1603412367a148003542e1e3e30241c20261218181889c4c27030100a04446120200c0a85c361404820584b85a007f0e66eef9317615963c4ca3fc56d9183de214699be4961a9c246d2d433f7266d13d403830a4747c9917a34be714fb3f9a225c22785e50f0b86c269fe5bc355fac97ebb52c3eebfd72af2e2731bc222f8a968f2e0b9796b2d659c1ad43561bb9dec1f2e0722a7c8abc018082aac653be53d4935ac1bd60e48fc4fa46ced2353e159cd12e7619cbbc833bfd91d7991c5e4c5c3e6c8c8615d3938079e80eea9862d607ae594ba1bde8a5ce4b826d82a9ef31f16bf4ac09fd7d22865d1aba1bf4156cb56efc787d6f8c6a6e85ba0c20ea4ff0e3c6c267d9cf6506ad8d01edd66ca7b9e5398e3435f56ba1d309df083f4c5d019bda7c68938511e7ad2448f56fb05c96d0a4d0ff483d088be2c88dd770986e223c518949cde6b278729a97d1ef1c78a8b6ca75081af3b7cd143053634cb4ee5d133c65683ec53fcb554a287fabb2558abb6ebfa1ec9b6b7b78632f979306f8a2a50d606d1a9d8e20d139f19d951287586a5529e5216a6926e3bacf5fea8df22035da553a24f1471e97257eae38e9f93ad9d884528139837bd0923d5beff1b9364932be726b18194309722698a8502c9af678481a7b3e708e22add3336c74620fdc444eea2995931a7bae95318f80b89ccbf41c0feed5ef0ade6b0fb893b53526783f054b6e00dd01412e6d5e814bf044d5c91ee0cc5ee5bbfb28d0f40384ec959b25c8c78f612552e3cdadf55a8194f6cecb46692d7c300ba77859942af449e351ab79e90eed5a44f5f931918813dd8360a7fb30ce6cc6edbfb0e061a5507856a58bddf4eee726217ad6ce7265be14384f28886b78a2262309c56d13d528753d3354085f90b752443d7dca533a6a34d5cdeaa22b524831ceec2d36a6316f01f710fb9e211b02cd02caac8bd866e09730f113692a52059373f0b4bb4ea7166ad6a9fd1d0e903e645f0f51d20edcb9d6d833f0cb8b8a036fda388f282a04bb3446251af8277edcb9df37f37ba344906635d971d6a2a01dea030039a40d600f21b9cd595651212242654dc716f76ceaed566f1aca6e86ff2b0d363fb4c0526f9bb231993e7125c91d2c9dd7baab0a9248a187fe6f11b03310a155ee9edf28c0859ba9fffe6d9b4a913a0df1513eb785bfa31bbfb7eb7227c2b3068985ec38751274c02385eac69fcb845f33449e39eda260eed2cba00355c61bb2d993a6b4317ec3671b13682d988662236137e26cd12068525c24b3297094c1318e5e91acc91a97c565032a3ec2329624a8bf0cc9481eef9f4f94b68692274e092b78060257449335d49743f3dbb99a31d812c2b6cccf397b911aa00a9a3048ef2552bb1113bdf3c0c0f3c3159d52208a11cad9ed7b472289a0bcdeca2ec95859ff61506b2691b424ecadbb81b8d87e37ca50de1aea25153ac63a02d9aeae846649cbc367f87a66a1bbd794d7993779d83b679427b8c0abaf888d5b7752676b101f97cb1559f9894203bc012011075ccb38a88247b0d7db28acfc2cc54208084260bf9f50e30c3663f2d25e3dcb060842a625225790585453666bf5339635755aa37b763b0c9a8836a035773cb0bdecd03a922252481dd7e051b438afa91599ce01ad9802c1efae356af4d7aae3d9181a17e43d9df295e57e9086112ef037981e5327d424db1872320f9712235edf4a5ec11a33bb35093bf4b09b5cfd70b7534fa59d6fc328f6f7a703544d610ae890d9639b1bc7e9581056b42385358805ce047c0483d0f6e2030b4c92e3d15dddb5d96ad0a2c7f8d19f6770dbb51ec672a3ebce7ecf37f52a55a63939c6d07f8c8e5103980c295fa374083130b8978999fd9107fd747e9b7da436e0655d98b9f7ec9c6dab30107c672662f2a3251b22d4f356eb2b9b17efda7f8831af274300a3ff8885b426f569dc2a2e2e889d311591c75cad84d7b2def5fc938aee1aa55315010a53ba7684f3467e87725766a157359a7150e947c7ac416cff1c3cd5467dea857a19cbf4722b39d968958a5bc282702d9491bbfe0dc0da66d185c7c402d279889dbf6393110a2bda297dba243040a97f31c1dc90f511af58a9c276249cc168118f3e0e106c08ea86f238fe1ec1507819cdc797ea931fec78efb6147723a86b4428479e07c0f68709425094ee8920eeeb8574d42308f477b1c3735f495327e6a2f5463a9af62664243af614e3f9c3f3633f565ce6847d934507f80bb2c7322d2f4d000321e42ba29b56325edce6e759a5f0c33e3bf2b30b118e1f5b3f7721c03714c9ba3456fc52752eb0d0f2ecead2fc69f7bf494355cb8ee5197efae02e0374a98f2d52567b149c8d90b88ee90a2654e98af51cca8eb4f8ad696b3354fe484cd79f3706316296126cdf07b0a6edc85e7c9def21d6f678db3aec125654059c6fc8af6b09b55b55da3b965f5730d621cd7891862fdbbf67ad95b273ad7c41b304a1688f928759d24adfcd03cb2e5ab0cf6517568943164ba60cbd5be3f7e8156ea882216ab888daa9fc966c076d4182619b07f130bc5d024fdcb8fbef4eda4b1d9d36cff38ad81439b3637e08506d4634538efb8ef813b327d364989aa2ac4d50de0496081a9a769da43ca9d07aa2e7a2f4d24d40778ddee024508cd3d0c2ee69dbb668ecc28e89606db326e5f4006104f393fdfd5078495bf1d0fdc4070bce8c6ee98fe0594a68b6cf7adbedd60a79d5373d467af9222a9958d4f5ecc6a17557830b968f4ad285f0d3e4e28e4825027c2e7aee309ab8271d31c197e0dc853a35f1231f42761a455a0091b7f1e404f5c33017fc86d381093a1096169afa8c4727c576313c4c1b8d701a459f2ec822022d766a186ae5de0c2bcb9aa9d8e223a14d23d57d20351fd26bc906eb54c7a05b46458531291667e08e27d23b3114bcbd1d4c0b06419871f30989e39436c9106232eeaab1c738b357354d7178ef625944deb96789c51c8c0eec9c5201727dff7a1aaca090c3ffcd2605f93ac1bd71a72f8b904edde8a278f4ec2ed1ced5a75b433603be0d4d8e3960a0ec5f0fac9a17968099a5ac85478a357003494b5c9d0585b050f9630a27558043cde17dca8daabcdbc9fae14bd9e99ad00f40bb770f42c6216abf81a6d29c6389ee7b5c540754da004a48c4a0ef64b86050d48ace841d847eb619d86af690e82b5a9ef9ba2f6fd5e2a0c0a4416602443b90d1395005a6fe2c1f5d0e5f3bc61b2e081e4c6542ddfb17dae94720bf07ee5c3a77015e74a85ab7679991dcaeb6e254f5072f679b64acfd5d8ffbac8cf60672385fa2d6955fdd1a22b0249f71d606d4426d53382cafbe3d4a1e151c05e78ecba99c25073b4df41323a2d4758f77d8cf3f06d9b006d745fcd68112d3f0d075976ed47a758c4c0929a7d524e808a4bc24b29c6cc34045c5c42932c696ec5f380443c9d9c48478c4367b2038dada914f9bdee74ef59dd369884e832a822262fa62a1db589122d8941b37f51019246a67a2bddd1a3e311da0a90d44e3760d46c14446cdd67e81aa533394e65f9c64ae2088c952100d1ea5814713625d749e721cb4da9d91f4cb87c7066097084ec31bb478c5d70778e8e7c104001bba1e9291064b899bab8cec009f5701958d117c02b268332f1ed63e527cc30c05c81c0318f0225225dd22e1dc420561093fd503c3036bc8eb56ffa9854a63ca9e17f0949e1e60046ccff8eb1f8bbc81879533d5475302cfb4ece028fb2d5a162132f215f96e4e0953186d7737e7edaf2f802bbbcc88872a5c7b242d915f50aa149191384a3903ead589066f07586c582224ecb3ab37c09e7b528658eb250de01282bfea8066985fca3f66e665c2e9c06a4d728b3f669295f587366c50e143ee6d8f7d0ed22bd9a4085fc47057e8dfde1409733bfb54acabb504ad3ddf8dd5152fe905564c81a2f2a1de0ed32377eadbf971e2482b9b0844145c236d9d2288f8067ef621caf6a2f9014e13d82f2abc2ec65970514477bc7503e6ba0485dca0b7aa2f5aab90f020da876f393babf00e0063721799afde578969228053321ac8150e7263368246964a1735c39db23060cf0b68bd622188d5da7ab00e344f8b428829979c12cfbeb32c8176f1c3b5771068b7b7e576a229ce6e0a938651887162b931434fc8d254241f79d6c942006b82f5e9211bc0af831c641b91a2469a8ec838675da7d5b52a01b9650b4a29dd3d4c72564dea2bda1a3cd6576da15bd90eaefee4917605bda69c1c3a8340cf32ba515d3a8642085c3b9436d5509afc206d0bd9af78bd0d780dde929e69da0c1c271ad78902fad6279fd10f270e407e763162ad49ac064e084307566a39fb4810413a0fb6c6ea04f9ba5afda386fe5dadc0bef8bac99605c4d12459a4cee918599ad2120c4e85e3eb9735757dc3e07df07c346967c20c07b651c825c048010320a291d0f2d6bc6e53edd078c52c985d44b0074f07c086c0efa4eea7a3e901e61cfb0f4386fbb9bc687a04e56dab9547db21e9872101f441d13cb6891aef2f3c10619f56556bbcd6aa2853e830f3b9c2cf4572d7aecdad55c85bc409264b19cd33b21b37089844f5c510c32bdf855f4a04db8a7e0550e7305c866f35aef17579eb3770817e97d0634a1490d191f07ab911154ea820bd08e882a9b702bbf34c95630757c1d95e9816945a256dd3c93f8e543047a24dd56b022d44d0540fa1d43c76cea437889e461baa2023a0022431c04484ce9aa30168269afeedc304b4f70b616d62c04f7cc03c676f2023df3c11a23929184d36903292d42a0ae45ea463fc9574ac447f2d83c54acbc9ead3811b927a9d64873f614d7f805e9eafac3386ceb3f10d2063c31408949116aed7644b9544b0e7e76e1776956a1edb8d0cd156b15176b2600b151bb1eb10ec13cb055dc6e9dacdf474e18a853267e5886d63932593303075cdcd80421680f7d1af82ef69d95aec84b2e30f03514b6fc9819c3a7f16f06d0940f9cf79ecf44534d698cf4c4b03809cc940c35ed2de8f977ea132103ac6b33665563fd1116906403d9d3b362ed4e146522f60b82c8ed7a2218ec3ef92d96c4d9af26b1604f372798585c2952887935fe6155e3401c33d83fa44b1f832c2469af09ec2eccfbba4f7a10c5ff3085155f8abe9e69d9e1b5bbc9ef7f6837f612619bd44e0253dc8fd5e0e1d3649d8633575c9843a78565a5f745b215e1263b032790c37070b368c11daecb43d915f02a7fc967c5d84dacc4bb842cce7adb05e2558a9a772c6f89bb2ce156268e14c2dc239000a4a48398fb820c11e7ec4621f55eb78583ecc8c1d80507c102a34d63522f4796cbfda929d1da166df5589510ea6508a429091afeea6e88d0671225088f0631664445e9100294d8dba8e87ef266580b3eeba1bbb34ae961c9944d83858f58652a115562276c4035d0cfda427eb6a956907776e7d719e866d90b683b787a3619ce3d1c1cad4c3c3330adfc3211ed480591bfe56b14bd0f106627035c08685c2737f23fdf4de4b4b0f7ba37752d8c4d39a353398045c3303575410ccd4d1c52f970fc1e6e31462644ee20b05f6713f4a7a10188610d71533d205a3f43eaf4f9d382f8a35e18638d20527341e6662bc3ed58ba844e8a65fa38077659aeaeae648db576f77673e393fe0a27c82d38aa108bd83eb6ca9f4feaa1da5c664d080568e5f861fdb06bec083bb4b5e9847f9f93df523b986ba8b0554941e52605604dd205caa197510d63f91749718ab6cb3c6db66bc95cecfb0389eca1e4d0e9a34183c74a06b899c5a16f101aae57393395900a718f91d0369dfe3728823587db4607449f1a0e40dd2970c87276805f7dbf9491bb3857cb49d430939d2db474c124b59d003c170e6e3a72ba893cc1aef329d737f1da23ad3954521bfd80598267f8a7a3d4f7dfefeb9c43cc7c9878aa80f74d240eb7a2b52c7a7b9387cc25a0ea70053539690b1854cccc9e1c30938f7c5c8443cb86716ef946f9e1029e21fe82bd55378099b8da4ac9298d580d4f108b3732d8b4fd8ec2b5ef1b6b60d14a2dba79fb67b207ca4ffa0a6ca27aa08988f650a51afea47c4efb4a18b90885fdd0106db24b93ad09aa836a9fbed5f0aec906c153d82e4eea02c1df914c19d523cfc7a12587d389ee98434be80f5de34eb2285c7765357e2e2f2a2b8d2671d2a9712d361225428c0f475bf609fe89eba672761cde87928e2fdbd9063f88ef9b5ddd2cbee02c4150d1f53eb41558705b9cf312a89238f19ee00b27532342984e42e38fd9384fed31dd341a5bbd075f5a0a2ce5df3b5051a0842107f8ae5540367f76d8a02939ab608bc8731c85e8cd5d5bded67cd759c8cf3ce6390cfb642a71783bb01e5958101f68a6fd86fac6ba07902e764733d5a891f9d3636be7c6b5e633ffe79249e571bba60254a48535c23b0250264a71fb071b47061bb959416e60f1e14bd017789053a04e87910b4c6827d7b7a5fa44ac5f94a13b2ba82dc6f87302061fa184365203b4d3b19b7f0b6d5988a0f04b0901d17c038833e8fe41099882671190a2c5613addd0194d9574a642f79914f0c5e9db533bc148043ce2ae4eeaccac6a936b3b70ba2471a1b750aa3ba1b009b7aef510df2d51a8c97c2ad6300ba80cc98cc5624733bbd4d4da84695c89398aa3103028e3e24955b12c5eb53ead3b1452875af3a9c127f4bec735b3bf57287aeb9e163efc98981cb888687de82a51a29532cc6981d9d60c349fd5310c228de6fd3b24e246418d13a55e9f5a25f78a5b80340048cc44036249a2da6c6b6d2bfe24080e0175ad3401a91f443ea03919504358403286414f10f0a3e52d96904db6228dc09f068aa8301bd49ecf28a4003f903abe253630eea3fb9622319619e1724eb0baa1dd5e7c2e84f659474646bc3f01eee49322f26562e1c53e7936efdf2b97161917141faf6735ee815fd1334c691e788ce75e49eb810e52029b4a75f97c95bb972db83a8f52ec61340b258db676d0874608cbd9030e62d53d5709cdf424d19fdf6da6060dc8e0275409da110bf8c453a175e422690317d185aa160d421984b1424fdf40622e2b91589d1a2c838c3190342fad45a333d1c4c6a316edf8f026f2e9128db02d0dfc77adcbd897b2eef52e2f4cea698ceb25f6c883a6905222bdf4067461862e7f4c455b99782e3aceba5e8efbe97f55892abfb8ece9e967baadcc1fd663d22117ad4adeb10d16e18f5bcb6f720cd7b05091b0f27e9115e149f9474fc1525a1cdc7dca2e30eb5a10b21630773ee4371c8792ab48b57ed24bf919bc7f68061b8137ae203d933d38c11f45448118a8f10c4e44de019d901efc292c535c86cc32bebb327f693d33fac6cece45d19074fba35222c95905dfa27f0aa5a2f3aa533a0fcd28aa834f8443e58cac4b039ad53e601555b1b22c56212b2b6ef44be9ca134579399b172d7a890a87bf2f6696a89b7fec8b40b101cf3633ab6aba323861823a015aea9da2f22a69ccb1ac7b76c89d8d737bd18d734fe90f79a56343d42b44f4b59745f8c76e92180a45318bf0ab39862b8ba45332f88dd78c4deecf5a9205295e9787bbc98ee273122fafbb52fa0163823448a9425640c1f845cdf5a99e0f9295f50343fafe8d2b000d0390533534012288a1de3e51eaa2eccff7dce2c450ccd2c2cb570cb273f5059189868641bec80890a4b15c9c7e1ccd113a2cc2ce08cd68f08dab463c006cc9f4d686967497c81fae80e039a61dce54480c6c4a39ae4e9fe81eea78878fd97329d805d55d5906f6a1807c46200e43d977da9d53b24712370dd53acdf0039d2fb450e86e4b9ff5500d3bb9231a1214a60fb76972efb6489d7d8743a282703edea11c3847539b5bcbec822be90d711e98a471cadd8ad700ad79b8d044f40c9af5da83781ca270d31d0775f8e9ceb082bac32c0decbd1b262c9d575e9599944f3530e6b903cf8ecaa21061366e5c1a5680d794972918a608065f2bd06be59c73d53bb8f87bb2f08cffa6d36632e2842243df75104432a14ef344f00f8074c780f039b3d6b405f50d19a3334acc7526294b2a1b11559d1b4892e6a65ebe7ecaea1b32fc275a80dc767f3f3d17dd253a1455931948510c0c6d3454c410d25bea4a298e6f05da2027932852a5b1380dc2d435895326b84ee93ca2822870df86c9064a520daae611c7dcff426f8761a15f8a72ca92223dd269918e1a2251c2fe1651774158ec6eb381342a156172f8825321a3300ae5d31a614e9b840b4157bfa35ef134a36d1ad70403153b5385f84f101bfbc640449c4d7008689bb5083303c8e902a2df0014f12c819ca5cf3a04393131d6174a63978ec234e70d87bfb0a732836b3fc5a03ad9d86d62b2a6b3d850f9c6b1fd6bda8fc45b69faf6d0a700df9576cbc723869faf7187edcfd2ca603ba7b07e1761baf2e3b1c21a0e8a5ccf9a72f0f25c8ad3c449da32412b7ba67e84d1706d604182a267ac31bb096cbc4daa79c35aa5a6394e218fe4dc68056dfede9ed8329ab87518cea53fce49d31a10c6313e7815a7d10c2efc2b1b7cb903ebcf6661ffd099b1c5885b92985097c079831dafb130b980958829e70201fe390938186ff610460127a120268244d7ef97ee941bd7872a87b4c7590307bd380e86e4719a1a30cb393057b4ab7b4e44eaacf9b98da6d1f65e053c4886d6faa954f4564e283e200ed02b7c8caa2a57ae6ffd7b0cc763c9209f8b034572f264204e72e675c30c0fd3076a8c27d534dc840af81e8489f8471031f1d2e8d592176faff6fdfa0ef669be361100f9316ebcb87b41f10ac68b95be224bd8d15ad09b541c5ec7f6da6b51f5752c55cf91d83535d7cef22231730f2ea2d7b1343f0202bdb603ec21f50559830c5b5eba4f97814da9cbacf2165fa48d5eaabc27b32a0bd36971d697d2b4780214bf2b2c99a32dd597fc541bddefa601965d792fa215543084021aae3d0d45202a8edd5506b4a951f9526f43718122052a6070027a6bfec15a2849a380941af545d16eaee189e243050b7501ea0c28e88bd2615a8fbf42a4eac882ba03f5e240f521e2c30d49a27ee3541f0d2a4ef5821284a1ca9e0ee6b56a0f3503052214fb50c440d18142136a1394d6507a57545f0c25922481b26528609ce0c4fbd3c25522964d3c8e6515993eb4620d0cec06de742ea20adac54feb0c462d6522408d4970683e35eb590a9f168692e4646ed17f1eb8d50b0ecc5dec5952ca8103dd0a2ee2cf63b7cc3b55174855f31d638f9a41387294803393e3d0fc5a8498d860659db04fee8304f179f33d2198f3ba554a8abde8c7db0bc11bbb5a14516977b4624652975ab3dda5a404168f07229964ae46381784acdc88cd64c37e6a57f2e8bdcb7c1ca713408395af3a4d8ef8b259214f602b9193ccbfcca2f2af5d7795f445eec675680ca64c80dada54586e2561c7edd8ff44d322e9e069c7733c3207bba4c02375e45021a9585b7067a397441c5523eb6173d60822044c17d10bcd901c6b0b4f2ead8646c5e960f71578335572b12882f5e36d05c22e7ee1e4c45964a61725fe03da7c660c1219dea4d14de5e0f96bec699307f02c36d7a1459cc27d3c0eacd08f04be256388576194df787453df0bbe78e5ecd3efdaf6e24a711ee300e524e4531cb5c3a02ab02bf44d803ee8b09c20d67e2a7a3ca0c92b41ff620443ad6c41565ee7a8c126c83154146183eae6fec482d36ed72981aad055378c691688e502aec975204db62b031e4aa6fc9ceb95f833095388a2b7a60ffbeb77679154c42c6843fe281789e08d8d9c24abd59716697a64e3e6a1c3c277374d10e3c7a59c95cdfa04ba3fe7f4d910b48258a44a3ab7a9f30b9fb68307dbb4b3186a638319717a957466bfa67490b53e3acc8a6b8f5ba6d3db318b37976463fe01c392e086c2eb9102f26360bcd4dbdf308200d6c2bf1e115dd00a06487cda0a87d059e3b605bf2c306bc3a478e76e708254de8f13651c734bf6c83aa11f7b401f22f7ceca972ed5ab1e1344a6a0a6ae55bc02359fc0fd46924080774d98c184149f95b313a2789e449dad28c19b05388f9994ef9904e482f922c65b06c63857605ac43451e3056878274363ba5111b1966782543838f924e0af9cc0556d923cc2611338395d2da08f8aa696427b895b5212e2b1b490f80704ae4ff417d6467b5042e3f72430123d1904c29ebd56e88c979f5030e9766295d8479ce7390290019b702ce4c6703658b0598ecdcb79fc5be307436dda436a9036e24b8c8ec71bbfe52f816182aa4f6a44d7b163b5434f14489c96116077f2ec60bc23abf0d12f84d0ac0bd4056394f6ea480ecc6440e4cb73ae1616d98b5e8f1c16061b6cfa2e3dff873e0ce8fb11b99d257c00e49adf4e327778710a1f19839aff7fc39e38461b3c15fcca57f0814350baee37e34c94139316fe630c2b7cd33392010ca1e140ca87121c7a409e2b91a1947231dc0085eaa5310211327d18945bf8640586db1bc0f8bd903194a49542103705606ff5eeb9c88f03cb8bd093ff8275f9c49ba1feee60a5e96925ce24fc72a2b275e329e8520a2fdd0fd1214dabdcda864fcece8335b09a73322063a326d6e85af2bda09ff6591b389f2148582c29a1a3fc9c512d8564308822384d3a4086603e0989496d44eae6d33e88e08ea75041759758145203f15641b5395ba9269776f6ffa58912acf513cc12f144134a47c47a9735dff9be7befb9ba770d69addfa35b5bfa58ca36ad44832675fe58d904c0810a82cf15375645ae8efe4966a09ee9e020cfeee7a73c4645d219cde66468a975bfe2e5f77b4e12de2218a4bfeb382901d0d3e68988271e85c82011203d05bb0f3cf51f53c517e536326103d30c537e85cbf8b6857959bcfb9804cef94b2d1ad0117bf7f232e307f95fda93029d305d8bb9d57b395dd82190a74408b653be3517abc193c4ff3c983627a5c1edce2343097f7098d0dda53af54a52aae2c67cdfb4090a006d28deada351588756ee8628541b360d1d0b0694a7def200031994ba3eeff070677cefd67529030c93dbb4ef6855dea11fc3115f7209132f2e30852ed7afc9101b40ac77cf30e95a6cce2b7019bfee0c213805b0c8375f9c09c8c584e9c8fff1bc436d4e86dde24cfa3da774850ddf8e4eeec9c9933b1f569d6553a119f7b1534cf0818475e389c614d33d59b57312cc10d4b01b7c1fd99fe9e748e3906beee423d9511a7724daf48b5ca38fba21d26e08db80728dd4dec6cd93c9e82c14980afcbf0aaadcf8e7fec30d54399f4caf085d9d00be04883c6c51032fba0c64efca66820f4778805428bb360f7f439250da9901a22d796c28b420d0fd1008201d9bd1ee71e4118b6b15ea4f0d59ed7ffb28c5c532a7a34e31d4c31c13f97e60ab291bbe8a406b068eb0d0b7bcb925bf51712d70996b34fb9608379067d03c6abd552b52757db3e2686350ea94864e3e4e10a39212e5d50d543fe0dce6a41ae3c69b95f419822b364c58bdc7c9ef58f20d649c68df56d3d5b0f764e1560c0cb282ba5f67d17fdd40f24411ae1838e40ee36e8d22dfbfdd831894acfd011d807f79e7317be1ae9f3d3a853808fd6bc8dadcbfc85f91ee5cd7dff4c83aaf0a57f42d941b2eafb76f84ad5387ef7fa5082b52a2a01f0e6473e217c0d4656cfd51a35c96c440b001bb73412664718018425cd137debc30cbb85fa3223ba37b25d09fb388fecab905db541bc24d3a22e49644188b4b46ff3607635cf16dcd3aafa6ea33e8df3a6f9a09ee94cd3d9e89b67b006b94afd7acfd29e72911979f88bc803e2a7b762cd4ff4cab317dd556cf96ce1b7c57eca8f083d003673a9d512e38a12940820600a7d443485c032314151059f400728106e88c806d6ae9dc0313710f0031f4cf675cf0ca91d80ac7bd506055eecdc8edb62a30816f983f321f980bc5b04da4ea722e84f7adc3a70e8040e0b01373032e80553ad4083e0eab93d755a71c6ed3288427a7568ac1aaa9e458ec3e1e7509b3d2c3d3bea61dde9ef122362ce97eb29715cbe48a25790d13d0f50442808254c9f2270f340a3971728d89ab4ba1726264820273ab63afad3a497468dea84570c076519239c73732feca4db2070e63ce04251e5f3ebb254c21f3ce44f786d1a47d8ea7b7147fa4656fc35cf798b20c152e52dd2267140345d208c984d916f793a0aeda075a5fb73c136b3aa448a915c5ce9ac9764162c8df0dff3b9ddc2974b2ddf71b4dcbd4365d672d3b995983ab5f1d2ead2e5b5a037cded8809d06df59f11da4e60ee2f01cddc7463906419d9f75c2ff6a824c4d36e48ea567a2c1ca892d2e936b651208d8fddaa2c0742f1107aa7e905e6a31ea1291dbb6fa3a8d5b4aaeb9ecc20e19d12b84c1f419747b4821d41dda7dc0eccc50c785acb962a4d4cc57b4b4f923bc789020fd548866a50bb73ba2f3de9628a6656c87517327f793aba919a1210897ba91055b000d50f8feb7d74e3788ca8262eebe10dd25dc058743354497f4754145965f3714fec9b5a5094d604976f32e1cf7b8e2eac6f101f306dff495318f2a5ac6fcb34220dbb09f8332cce2e02c91d64bcfa9ae0518dd8a74d437872984a64bcff0880989cf7960e13850655d0e967bf9a0eff441706850c83d87315b468288874c7638a3f62f998e1e5da68fdfd399c871e4564ac50fae0f8c47b883e21a9a589886f1dccc2c111bd6c6da9e03cae59f3bfcb876ee0608adcdf4c93d87b7342195422d86bba05c8b916cdb5329bbded574bd77943e1c55a8e6b8467a50d0787a61d0de4e09688379aaa76fb77fab764f2637a5568cdfe1c639d353616c580f03a224501985e8db7c15555b5dd2368bb95a2ea835ffbe1b0bca786d67a1bb9978c497d41ca3ffd0e9ee359aa0c76567a16ae7fbb583205495714c94289a0af7e904600b548095fcc655131b2af36984a28036f659fcdc1c39ad1793599747977c5d9075610bbae798701c7d751119bbcba51f0c4c8bee5c5d10746943ddf38d0b89c6a3ebd1d55d8e26fc37f6bc61b32b02efb574eb8dbd7e602509b9cf29327987143502c1290e0472816ddc380ef561681f7bde6b30e7bdcc2c00425ef5a88daebc40006f7c9cfe11e9bec26cc2f21b0418dc781e639330093e38e56ec927384a2a513ca550d01422f74fc4135708befde17a86c47ef4a48cfa3c40885228efd1ed5d9554130f5536166d12f307d85144d137903f23927524b8b4ea8b7a28ff815c03dc56146477b23f2119cc31987e0d36100c1f916ff3b8f43e717c906a5eab6bc21e08720d0e8dc1a68557c8cb8b06638027e85c1206b20d4231e09d0c66284c40d11f0f14dd340d7ae6af72d0ea68187030799677c420fbe003c2b60cba194c180ccd71d096fb8b8246d85c14f971747131829482639c46632a363f877c174317029a48bc2e482a848270e392109eeb595447b1f09a261ab0a579318a3f56990b3b439a8e1f7b85fd1d403b9d3eba646c2813a212ed00245eeb98c12b06e493c159dc61391b34f5faf14a1c81e9f733835b4f4a6a6bdb6787b08f6e7a63c0b1fb1010f6826769ad249adb7cf3308feb6ec5802549f4ac8de18e345c05497898b25a6b428c73fcc4931c672209800aa8442bd16fc6ddfc060411e3d0f7ccc3ef23abc94bb0b39ac4e39cfe5fd27b4b62f19c887fc9bffbdd10e6c29ba7c5d38d38eeafc50f56b90731a71ba4a2c5175211fe50c0d8c1393aa680c7783108961fa6ab263953beee1782667d64e291034e5cc33e91813ba335e3c1f59e18db9a042e8604234af33f4fd7af5fafb4ea1b20ffeb1b54575bf34493f0abe3ff9576228b1b5581434925bf015a19f77e3540b0a6d0013c0c3c0c3c0c3c0c50633cdffaba7be39afd5b2629ecb3df444b04924c29a5949227e800f1092124e340f6bbffee73fe9c07b207d7076a000182398dbe9babdc8c9518e407e6fd6c4f6b0b27f1d10b93eef2506ac7e48317a6dc62951f2b09b30afad88531b6624dd2ed8bf1a10b739812f4da9d0a272529e92317868f25ef44ee8a3e7061bc94f4792e51564b9f617cdcc270512ce9fcecf0266a0bb357f268e962fca885491895839c12421fb4d05464285d37266a1b1fb3303c5ed6927a6d5aca6d560a2abad4bed9ce1fb2308d997e6ad7db62610e934fe73374c7860f5898acea2a5ebb5de55c7b0e1faf30aa5f8798f9b330ba7585713feacc2879c3ee746df86885f1628bd262b9a72a09470d6785d9b58274b3247f5ecf9ed5e9e1631546b9b35ca3bae7274baa30e7ed0ba5a77da4c25cef6a41b493deeb13eae00315e67c33710bb10a4afc14c6fb933f29d929f3fce4d6140625c99fd7a7e39fb4998d33c647290c16cbbf93cc30cf69e50e3e486138295812dc774e92621d85c91085412749f435c92e3b7ae8f80885793dfca4784ee984c107284cba53be3b4b9e4c89a14f98534939cc7cd6bb2a714f709ec26bd4763a61146126d60926795d9f78a4306a3c153e3861f2d1bd64a2e9b47eae18354876c4a881a94d98342e8778dfe85c367e68c254bab65dc1f47f2c158f8f4c9883e51ca7b43e3db4a3c1b628684c18744f12b191efc7250c9e44774a92c9f86e751f9630fa08bf687230a5c7a424083e2a614edf2ad7caca7be2a68449597a59768e7f4cc2a05a646ccc7f6fe8d887244c1ee72b2977531f5d7d44c2acaaf29d5292f67a64594af88084497c3749278f264abaa44718abead3b5726ece424798cd4c12f343670d1f8d30ae5f899f37f24b4e3f234cbae4d9ff24d729d9838b305ff63816aaab0f459884eaf6f43b49da51f747224cbb9556296a08112641a85767cfc14d5b3e8451ef74a553eaeebe9d214cb23f8fea5aa8f7a8b9e0a31006515238b94a9ef25a4e088349ea4acaf22427ffcb200c7263feccfc3a48f3431056acb016532d2ebaca5b651b55a256129e5a421f8130e5fc0893d493c94909204c2aa4e50a5d52fcffff60ceefb8e4d72927f7fd60dcd1aa51a972e90aea83d9ca441153f3694bc407e36d8cc82dbb8fddd983399da0d5f721e753470f66f3184a75f0bc33ea3c9804596e9f26cbddd378306ea751d254ce76baef60d271bf3f5c76ceb9dac1609724499227eac94eeb604c2bf15574797b9774307a0ead50729ed32dcec16841ccc5f0510e2659ff3d6798ceb7c6c15c52a8ae4f82850e0773fa19694af0de603cd9cc72f88ddc60ca253f4429b1b46d256d305c9c24da351b4c522ed1b3480f13ccb406d3872f35495091d6bf1acc49d42acb6e889e3d0d7d0c5db1653e68307bfcd4a94cfa0c06bfd8493a49cc60142dbbfe347d94c1289f22d779d40996a60f3218ebc37c56ae7ad165fa1843ca3f2d5d4e4e0cc6151da2bdc5cca31606f38921ea83ec3e1d3098b74d99a72476dc55e90be67db12e71ee52c78917929ee48512faf41f5d30a520272e983ccbe3ad097372a52d98929244b73e5d0be61f55db6de6dbf57f164cd5a62c282db9f38c1e0be676538f63f9158c9e2f4ab6cb3197a458c1546a73f35e42bbc35530a6c94149e14eb27b970aa6cbcf22dc4a0ed9760a06fdae32d15f5216510a06257cdd599d0916541f05b3e7a5aed6095ea27a2898cdc3e725259e50b1f404f369569e146e9ef3778239989a3e537e13cc7a69727f599fc9ce0493f0a827d67f9660325953847aff24a2a304b3a7cf719affafe349824992d2c7d11ae1626924183bd5dc74ef231884c576ebef146e172398d74c25ad69714ebb4530e830d204192b114c36f2e34b50f937150dc1206f317b74524a47454230f8f7c997ae24d9f6d047100c7abcf5dd0465ab1afa18c3dcb7dede26a9b82cf90082c944e5dc2711a54afff88149f6a4eca209aae7792f8c1d2b26a964e72a3abc30a738af16e7b30b938ee96e42ce3d4f5a1726dd784bf7613abe9d0bb3ade93ca6a39e580a2e0c97964fd413dfc26cc1730e257fd0d7515b983ce7795275d6c2b8651b6fd2c26cd208f5246c5e1c7316e6b024a5794911fae464613c7df36c9ef358186f4bbe9426a8f992392c1e69a5bec2ecb57b729c5cb254922bcc2643e8a4a6d30a73521b258dfe529b21569844d33a5d77afaafb2a0cca2aa8301532ac735518dd5b46092add27b55361302997c8ae98a8b4a0c26c39e59e49de1e4df614a63c41b3abf4c549595398e478ec13438538497a4a61125df5c7548af57d871406f9b1b6a45fb18eef8cc2285a595289ea88c2b83b5ac7c482dc3485c278e25ef06b0ff6c107857943e8b47b498c58d1274cea71c4e8de13a67191a14d9f3022f44e68e5774af2ce3961f214a71aaac47c75366194df72397915fe543461788f267992b24faa4a264cf2cee54b21b792cb9830f97b52c1ff7409b3976c97ad0b95626b09e3e51069a6cc4a184c4e51d3f7d2e81ca4842a3652abffeb4914b5fde43c89b5248ca23edc739da5d15647c264a293e8a8d8d5510209738ede67ea4c74f7e9112651f394883a315f7c47987212d524392f2fd537c214164ffd65c9d0d733c2202c9ba5143e6f7a5f84c975fc8292f357ff4711e66865fa7e4b1a0b9d4498dcfbd5a2bb07536a4418cc5b45e837efddfb10a6102643259376fd2e86307ffcbeb25249fcb314c2d8394d12fc654298dfdef4e4b09d3cb783309d9caf2a7c9c10a20ac21467ee925aa998495a336c1c331e21673049513522474f34d86c943319849801f116d4f64cba8494c19c4aacd075413c855369b0a5ce21840ce652cf17ead636c504c760946b933543b613438818cca74b8eca3b56e2ec9030182cc8df106acb3042c0609239e9e7f9b2c808910b215f309ca586b8242272c2e742bc603e13ddab9313843b4c2043868e1b2806215d30288f3aa6ecac3f5f5008179236162cc791bba2902dd4f9f6ec1e215a309624dfc4c2975c532ab4119205837f284199c917b3541c0bc6aad5b992d47d0553a8b0a62dce09e2e96205e36cc9dfdfa7d48d5df04648158aa3764a9dc9679a4c05834a992fefda15d3d190292c6b9b957129eb82dcc89f27651ff231bc0c9182b14bdaffa9925733275130079d6326fba8772b41c12c679de6ee7d15fa2798abbff37379a7a4162798841efda34f68966853134c92905f925c55aac43531c1943f4cc80e2ae34abe0493126d642518bfcd0433d1e37b3f9f04638925364f10124ca2a9f2b1207ae49e8e60aeaab26d8b53428c8c6010bd26778ea51cdb2982712b98094a9c6c280b114c71be6d4525e1f5726808e65c73f247b949934c42305ff8974ba20fc27ed5ef18e678d9aaa49660e517209865ec2e971cf5901f98b7ed64a8a69b18cf7b619a4f6263c2a4de3d1d5e982f2feeeebccd69d32e8ca53b435c90e271a1d685a9043373612ab184ccad6df9898d0ba3e5f0cf8aeabd26d7b730edd6f9099f7350cb6d61ce12eaaf2e2db5307b49e3abf99626ce420bf3b88b6afd549985e9f3c7ea4ace9e3e2f0bc377d61d9d262d7e251646354b92a68baa515158984f2c4b72ea14e472925f6174cbe964937e27fbc7ae30c98abe8ddb5b611e953b44a6b55589b2c27cca540edad35d85f92c5a78758779275715267d922c234e1ca173705361f2fc514e2b840a9349c136439f0ca5fb29cc39284fcf353f723ea630d9977c39e7e82679ba14e62074f59ae778feb192c2d425eec7c498144fa5a33089bed65261e67a7d519873386d35ea87c2a4d3275733b7947e0785b99309515ff98441f4cd858a3af1d2f684f1cc721495844952899d30969c24355aff52893961f40b212b9b2cbb9d6dc22449267d88565d53566ac21442b5985c33132631ba544eb61113c6ce2596aa54973774f012e69ca4a857769afa1db484414feae0fef9456d8c953066bc078ba54ed3b44809f399ac12d77bddd3c44918ce4576e9f86fa6622809735cfa9bfbf97533b94898744e82343f59fedc3f4898c29ebaffdd1c55fd1e611297dc6beee5aeb47384e15e4fbe70b95439bb4698fdee4f4a2a49a3d3758c30d5ac5a4a49f49a4bdd224c1f4c5a6df895c9c71461369d47ac9bf892265b224c6284d2224f10613cb976f6cfa25d8e8730dcecee996d9870728630c7adfe59492a99a0b24298f40515d479f5799810a6bcbc26e9094a8b361984d954cafe7a4f82f492204c1d3ea246a938761208b3ec7538d10f9aa7030883a5d68a5c93dc24e13f18c48fd65e121dcfda02f183e94bd492cde2ec433583478d5e1e80f461b77c27679384061b1f4aa79af6769666e92a6f82aeed536f41f660bef8b2a773a5207a3099f6ac6996d79204903c98b543373ee5f4745bcf063340f0704aaa72ce1aa783675e5a00720733437df41bfdda65ca4b01881d7a91abf332af34662bef9dfffe04611ba2930b5207d3e54979a2fa25a1b4e4338c870f40e860da3f35977288b3d8d13994b5ce3d55e6bd65e633ab332e2c4c6799e460b238a7d2446c89cb1e240ec64e52cd840e11a29b83c0c174425ff00aa144c71bcc9a9d153f3ea72f79206e30bc8b8cd4b9d829c90ad20693b2abf413c478a935d9604a2525dd66e11a6ef758cbb12997cd63cb241517af4afe206a307c28b18e7f397eecd40d726c40868c1be4d8b1230d66113222d6e4fb302b8902081a4c494a3141589e77f4cf600e3a7a126257c6fa93cc607efbfbe8a32148194caa73c36a2fd6e64b40c86032515d845675de13da3118ea6e615d46de3dd6bb64f5b4247d2bb7ab1483d98336bbf4cac1e2c35d04903018548ea32ceb645cfc0f0206830cddc1f65f3e445b902f983c76be9df3b0234d07f1822945b992445ff81cccd20593eed1294e3b8f55ea34d892936c980e102e5ca62956f7a2dda59aa925698ef4f82e59399203c816ccf924b1a4dcf149fe2404d182f93ef8b56569133baccb91e000c1dba84163035d5958d7e484ab66c9ff0d0bb59ca9d99d5c6ab90b17da15974cfe922be46ddae48ed36a238815346db5b513ab9fdd8478d1cfb60a26394b6a85561a9373ee0008158cf6b142dbff5357a84cc174ba174568e88048c118d2e44a56e2c675fa51d8ccbec2a6bd9968767ffd2929092596205030892f4278a98fa2c54c409e60ca91e2a14f496ade94803841b11013aff9aa51b730add40d91a1bee49207698249daf0d0222dd776508230c1f02987e7980b332a27c101821cfc493b6c642008204b30967a7cfc93c465c890214308204a3028e9f38917e3f554de20493058ae0f4ac51242eb7d204830a9b01c9fd33e204730d7f99c09723f2fa89a57408c60d2fd99ed7ab245438fd603070937005204530e2649fb17fda49604214295ab62d3523697abdd18dd41866016b3136ddae98e1c330a5a094084608a7d2ac9f0ecddfe211c67c78c3070d4c081e3e8e03183470ae3d38ce4a442548004c158265f3e495f84e7141bc330e3eaa7bf74b6919674831c36663c8e1ac99d8e1ca8c0011b08c8bc8b20f20993f09d92794a829e3069d8299524edbad127aa4827cc6349141f5dba2dda450a229c483e4b337fe522b209c38dcafebe5c5ad4cc434d9847bfca462b9992c27999782d29152a267af7c31d3d748860a2133fadd66891b1fee725ea24e5b72489ae191c442c61523e4267fa78b0249688215209a5c4c91099445be132c63aacb25b66ec645ccc932459129184794c465ba7f1bd249e9130ee785b6a881efd71ee410412e652a273c7295144914798e39d64dfe7a94fce2ee208935e350b27755af3d35620d20863097b794a2593126184e9ab83ba54a3a36eab34d86af02825105984f952186f1d3bd152caa61d3a4e11e63c3dd20425965b76c6e338ca02914498e2b67e4739570411e698a74d7a7f51b3beb186c821ac78ed416baa69131143980c9142184ea5a092bba550828ad260cb1d3d749c408410e9d4254a8e35498a2832081411c4d565a65ad153eead522281308ad0134098b3f36399b0fe0f9f4ae6e549a7b81f0c3a899d4cffc8ba9374fa701247e50aa926850f06534af6f9d7ca1e4c52b23cb1c45d2913b31e4cc28ca55a93e7d3a79b07a359988f56b952b1947830781a31272b99cf58f00ea8a96d1b71b283497bd62557d349e6bd3a18ec4a90f31d647430f5487395df2e7d199a83b1d2a5bb770a16dd7444e4603e79ebfc49de2c1207cdb6cc656b2beb5decb3d604f17226a2938ae1600a932dc73f95edc384de60d2cf279750cddd60f8f8eac1764ff6748e481b0c2a498208b310a5665444d8605ef91023ce654b98157b20b206c3982cf5b417ffa2c3c7915220a206938dcea1e470eaf4c5d704913498528eac5297eea3e512418379cfbef366897e0c11b1207206f3e7bf6c71298d98cdcd604a7b2a45d1fead0ab24819cc17774d66af2b47692f204206e6841f3b59a1640cc6f7a0deb44eca7e2a8988c1704ae5891c655541e784c1243e072b77d33d26cd6030afb87ed8ff225f306cc99b9b7d362d35f182f1bb6449113549e9b6bb604aa193feaec5225c30f88bcacc0b9ba59275b7053543678bef96b560eafcf639ace434a3a451240bc6d835f9ae6963155f112c98f392aca54ad21626b21682c8150caa25fac5d3a7a45eb782298c8f95f5779f566d8120520583be2862ff5fb9649a8850c154a7ff763b8be9039129186daf2ae85e7d638848c1143a985032c37341108982f1f43e27398957c9d4250205e3764af9a2673d61647e46107982e135f4575c4eb6ce122798540a3a7b09d7324ae8459a6018d1f956714449755b8409e65b2bb9ba8392946a576409e63449dc9c8a67ee51748188124c8290f58e964e56253d09a67855a162a8e79e2446822996a444bf13ac23a096c473fef7b007448c80ac96aa757ac5daba9415f25ec9d3b27e9b448a600cf78e353bb1f472132182417cd2ad761de49e884586601e31e1b6b7de2f762f0473d68bd5a95507c1641c0d44c6305c96d6594e0408e6b8ac3357f18bfcc060293fc686e9129eef905e984f34d11c2da35bfe0be185395f4fe894e19bf55bc82e0a225a166a59e912a20b93b45f628d34a1f5e6e6c27c5e29c8fa2b39744e12820b93c9497b5aacd7f4a413720b53c8491d5f4ab6e75d43882dcc26850c95b49fe81926b530975e963bc153e4654f0b93e41d357f64c7f1cf67715c279d67a993fa8310599824af3a49ac105a498ac5c29c4b5eaebb3d4b1542606194cf2c599f0b7945ba22a415a6dbb7eea02e7417086185f9e295ac8b65073bd53e10b20a8388ffe8d94c8ead89790e1b61cc50c596c2855cb05896ab635d3872ec4866702a0c22b663ff27d9717accc01084a0c2e0f5224557e5716ccce851c3860e1e653cfa14c6f0f578c2a7da8e275d1b620ad305e13d26c48da530c568ffb5f898fab691c278a2872795d3a88d6914e624a769e36fe29615c541586fa69c264648284c214f5adb37d5b5350a018539efb484ac132df9d6397ae000c10d423e61369ddb2e79901e42db219e1823a413288313b809f64a548b16008810a289c458b1dd3125a67d25241326031326e32e61ecec597212b1a4252cfbae345e5fc136cbca4d54088b9f06dbe120a412c6d84fd245359157d9434a187c84d64e32da9b84492cf1e36f76940d21923009937b15d3947c72cb3c2261d412456de4bbeb585e5f10020963f688dceeb62c69cfbb47982e2b9999d49fa4934cee1c61ec1ff19ec3f392dfe8ae1186bff9144f9ddac17e4698bc6664573f5c3059bd5b8429e74e29e331ba538451b663c96eb14f89267d9708b3579293b88e669d2d7c87087379057daad41c720893b7d8b7852a65d1ab358449aa2466a6cbc95936c72b84b9bdc365ece42384416a0839424815d35db941183b4d6664b572da52c11384d19386a8e974425db4f00261dc322f698400c294e3e77592e0fee70c1c3970cce05143adee04217ff04bb55bec9464cf0fa6930dd929587cbc93e4fa501c6972bf5fd2f0f86012da5bce52f6d932d587ecc124eccbe46ac3fd42881e0c62f2fa43dd7657cab20b217930e77026e2cc3cb5e2c283c14cc9a33c897ac81dcc4965fb8aea775b855908b183396647f44c539494fdd6c124cb86e87237a5b4c65608a183d9fa7a66a45bfcec979039986a94a7676c89a7dc24440ec6f33cfaf2d746aaf53842e2805b3459fdf2352d84c0c1a42e09faaf90375c881bcc579f9498afa54efcd8869341831036184d3cd194a89f4a3c863670ca87903598479a94a355124f4f9942d4608a4f4af6d139c19034984f7dcef324a5fbf84d03e13869470141081a8c16a7774e6afd1cac0a3d70902680238c1a3c0e10011e1310e386022210001e2999a100097c0101ac09944d00af2ee401212503598635800000c8814f20015ff4e021060a06008014c611230c1cc7c60102c063070248c0a3868e9300006ce10b007cf1c51702a8800234f0050f1e2e630001383dcecb2000004e8ff33976c830c0170260000272e8984103747af0983143015f00600106c0190700630a3a6e48c1006044016bf4b04183c799310301604021073ad0137a241e37d28d0280e104a35c52ea3f4a6b82614f3e417fed789924648249c776cd94fd8df7c98d7483178c25982cab9d9c092a1a6c39d0816ea41b7b23dd50309480357ad8a0c627016bf4f81c37c4983103016020c198ae16bce33ffe6f8506973331ce6ea41d336c50e3677cd2418db61e386a200f1c357ad8a82186cfd8916cd4d071230762308e80357aeca0c1c3c68c190800c308e6ff525ef921eb4a892a7988e180138cc0010609308ac0d77b5d148b75e15c2c9b784a308860d6bdf4b12c95e55402c610cc9e45dbef09e59554900c6008c17895258e129f6e92a4c7716c9c207d8e1294f4397024821104e35e66c9f4bb4e5bd605c01823bbfbb4e06131e56b43030308e60bd2e4bc1565b101c60fcc324aea4c2b2949f1a47b243568f0681e3a72cca80a8cf4c2a05aab3af8bd75a88959ef082fb8ca6e3223ee61b14accfe950ce1710d467661fe524b2a86c5142bd5882e0cdaf1eff63f589f58a2c1f6388e8ec31f8ce4c2a07bbf2f9432e1de8c341c23b830757d5ef59443442dbc8579648525d1ddf0be9fc7b1610bc329b12a494c30cbaeeac05a1835df3fcb2f577c2d62e848946cd068841626f95561d3e7e34489bfc30423b330e8a0da3d6a7b9a945368b0d5201d4a2c40c3882c4c9a9e1e2d2979c4c294c72a49eac4d584117304162649bc8af2203edd72a85e61708b6196e604d51546d35df9bbfbf5452eb863a415a620fea2e2694ffa63498d15c63c93224ca466fca939500d1b2928810c1966bb8a5585a642b7d7b20a56b12bb53b2d79c89bead022351a6c09c7b58e1ba80323a8305a4e35224c85a6a8dcc829cc7dd19328d3474c61b8125f43c52941c9b58f94c2242f0555965be9933c8730420a1c058ae242610ef9de19429a2a955d5074f1159fd915ea274ca5e4d4de1bb1a2e48883844355308230762412e0ed483d6ac060c4132671f92e09364a4e42460b8c74c2247a674f68b919f9493861ca71dd3454da74dbcb260c2bea63a9f956ed3d35610a192d3a9e3a13a6bddbcaf6922b99b83061ca723a4d1aed13c47a5a18b984f93c69b1f51454be545260c412a638c264239530afcea9a8373d1a5691214307239430a52df19716574a1d9021e3c68c94929149183deae849654189fe9ee888248c7957f23c9e2044a509859148543a67eb24b11b2390d02451b2b7e4ae998291478c38028fb770b7b57011bb4a2a4a97543b9ac148234cbd7a7a3127ffa8ab30c250e22df6a2c946166132a9aa5484a94a3bbe97141a49c415d36bd5eab5dcc2dd783e41c9f2b6252388404976ed667be24d872844542b996cc410e60be741c9af2f9f04b91026d3a32f99a02c9558b28430c68995c43ce7537b920661ba52aa640fffa4e2298230c5da4e4156300361fe7dd329ddaa114018534b6811267a7f30e59c53a7b5cfd1bad6113f68396a5efa805aa5e4aa226217eb2b4d3c1d4c900ba547747a8cf0c15482e83b39862a314e6c640f86d1e1498f5caf07933261f6c34feed5fc913c18fb4bae0dd17761fe64040f46b19cb36c27f9c81dcc722e7b3a6233dd53e3066260c40e8dd2a2c43f7d60a40edb8a923cdd59e5ce081d8c69c9f793786a27db19c1c81c8cabdb299b2585032372d064ea9c8bc91b188983712fb793b0b2bfa3d23c56042370f02cfe672f8dbc0100401871c3b54147d890236b30952e31ae53b53b7ae81851432998a6867cd855ab59ca3293ed7392449a687054309206a365cb1851428c92453d82067352ea4ad049f070aa62236738335c194cc60819cceef184d6b0f4188c26892849b7c5236230969c6222ea3afbd61e09c30818cc41b9083dbb7ee40b26438c112f98bfabb3fbe9f8e06232d20593c1059331b20593be1484b01cee112d9894a8a7aa732a25479547b2605c1344092a75d20b5ac40272afdd5e5a61c166e672dc7a8ba7e4d5e593072357307dd80ba6c4782356309f965568ffff90591aa98241d9896e56e8bd09f96662840a067962b157d2e3494a1e9982c957fcdea3e59a4bd1458c48c160d2ba5434efbd523d0ae638954f5e754a3aad0d05b3ebc6a965879f60126ecb94e67c4e7a197182f1bd2e7a585652a32e4d30fd5af59b5c71f2941c831126984a57d07f69eb74707509c716f532c788124c95bd2dcfc59732fd26c1202b98b87fffaf2cc24d469060104f6e712fea82c9d1114c314359aadf258d18c120bcd2747d68496a74468a604af357399560619fda112294cbd52a45d5ab2cb57bc62d181982f174d0b1f7a0d527eb4230a5eae7fdbcd95b4a07c114cd2a9e28ff1926a4236318cd2dc88ab858927852882340307a76bbd6ab10477e60b02a534ab8fbd58d13b117a68c4fa3e5b922f2c2249ed826c9efe3c1c46a1786ffe07f314b184574611af5b515bde74e9c3f05915c98ee73e89ff5cbd5a9435c1844b96a98681ec5a46f614e4a522949f1a3091e7d5b98e3983c3a9a7db5306fc7f1baf3ea86082dee18d555aa4df65325320b59a0402416b0c057f4107185417fd0aa95fbd20a4cde82688553970df14ecb922cbd5c7dcab3c25c7b77722a3badc23c63d9f3c9792b7ebd24a20a835cd549ff1f74a714a6c2a0a4cb2b39bed99612174185e1322c7b124dfd7f7da73096ec736df21626c913408898c214badfebfd52097272a5308d099d53714452184d4ac274aef551985297f8b8919e53df2343062212444461d222526b67f3b4c41b3114e6137f39cefc642f538a80c26c826f45d323c38851a8546e66326924108902028148140cc3a7970900c3130800103c208cc582b1581ceba2f801140002562a20342e2222281e14101c1c1a1044c270280c088302a12020100686838150482c95785a0f8586c3a807e85baabb031791c3d33dd556759415c0a112f08bc4ee86139a0ead8e45e228629037dd3b9c8bcbf8cd2ce2dc6697badbc7840730a46989778ee93ffa5913aa1601eea58a88bf8dbbaec85a7483d00e43efeb2ca3c790fe4bf209ec308647a676e55b134bfc9fb4f0330e38c4e4f27fd88c5249d23529965c61bce594509f253d84be6a3b39929a56334f1ff59f61a84671cd5abe64c6883a3818f0ad36fa348bfdf3cfa93d90f312b9ab3a5a2911a0ae58bc1b1e3253a0d3d9fa1ef0afeb7aec75d05bde4a35e9a23e283808b3a0ec11660649a4e386a1582d438f2223e563c6125c7fdc829cb1f13009a65e109996490e40e86123c5db683023d928abbca3f839374b66c2761f87ca63f4047eb8e2951d525649c4d7956bf95609d0215db13ae1972010b012bcf7e456040cb22c1a5802c116133318a1b1fa282eaa37e14828bfc112e4b5aea956c54369f48b20caece51aa95489291ca3d5c0674d10b05a8e681531a95732bb0c3370e06d13b1cc4bdafdc3c727bb16b7088380877f3727eb8f23bdb07e575e21c10673b2b0e63194e04739d46573c6e903cf8a1c85d0434a760138a8cece18ce111e9affc868908f44763861ba757681a115df8e246dc6d1e22be3e4c137dc42d5ebabcce0f4a4f5078daacd97962fe7fbca9bb40b07d1cda5d1e049c45ede48f404777ea0b6420ccd712c71d3addfe0af4df588468c11494a8b5f29b4825a9362e27ea5fdb14f00a117b1d82276ff0be8961c4d5778fe73508e1113831efe7a08415d91f8a80cab6ee1d7c0219354fc17b002c27b8ae077f3d8fc0a9e18b9e3f3e56e07a02f1888a59dcf282cc4b45ed14f9b7a18a760226e6aa73a0d3b4dfcd586c560b3f1577112234f489dfa2afe2f4211b73d04f9c1d683e17817178d92e4fe9d2f5499d86205061b3871ed8a1201c8f21560a0dcd16091eff99e74b4fa6a4fd06e4e8f165ecb6a362c690ce12e4d414017ffaf03e3b62b57c543eac2acd22a2c2afa82ac981ce9786b43bb599ac8efc85e358f7d6db553f2d4eb84ebcc63a9dd9593c83209126c63b6302b07498c4cacdf335627fb5a0eeac5fe9108c97a082c8fa2dacfb1447938654b16b10dd1e8e8305fd9230ffd73c156b76eddb98f4af443908c86bd39f3491ff3914d3cc682626f0c4b3605067be8aee7b69628aa661334281f11d4275c3bb19abbbeb9eeb098431c7933028a5be3003309f7f629714cd3ce25492bc75929fa9e65c8532df2346a211e18cee714a0594335251d715ea4993a8fd2f5563c0b7628a5f8662d75841840d36d1e55e4ec2b3bf734a469dc999cf3da1f65dd12ea3733d9c5210521772854c5cdececdda59ebed2aabbd1d48dbab51ffde45c59baa7b822c494624f949ca291bda8c17f41572aee45a70e619e74d0af7fa402d7f032f7f8a284acad046f4999dc11a5fbb7e7fc8bc2aa905d4a35f0963fd049c0427251ba1b4d910548e274c8da88460aaabb3a8a7bc4e12e65299d51293368298c1014ef42b55a9eb9d54bf90269a9c74b1cc50de8bc028884dc03c4d1a0013b6af68e82bac1b3bccdeed452b4d5f7641d0d7e7e0503f2bd84feedba7680c06ce3d5ac33dcb6220d818f60bddb148ce512fe600e326c19111afc2aea374d1a7fb73e46e846066f928a770ca173db7fc5232508c35b5834daa6dbe686a1f6c5659b0d725c8069f8687699a8aef64f4b0dd55d8a750634b9f34c86db3bc2145dac51fea1ab890b97c14a5aa848261e71d61d101382888dab7677857b6be6899d00d9cf455aafa7e615ff6d6ac5623bbb362bee2dced200b0a8b7b85180d7b1fb5c16f45ef937c99c595719db54223da88f1e11b90cb262754c533067821320235560cf3dd85a508ec46bd95a68625196accfece1c2ec954c929eb3aaf73a5f135219dd5e73ab6f08989f1d0fad8bc7d1c350bce3de1db856e7de1005a355ce7b2bf76bb1c1585abadc8ffbcb3ecae760c7eddf8056912ebc5dcbe3579b55a97101906d80e85e9b1f6241260084c1d2b09fc4b37e1ddcbdbb87b8868c9f10eb5d017abb14ac4edeb7844946ac8f22169495a2ebfa20887b040e9476a0b6802614ceff7e05108592ca4ff88c74f6540032fd379ae4e88e859bdd9ca40aa8551e2cc08aa2f3afd9ddd5d604231d6e6088c2206e3c57897960c145fe005e16c26d533898c19eeafda32a35251d6f19c867edcb6769c1e25d0142127011d5a164ec89cb4f787667677c24d57c433bcb9bee73f7580af93da639c64b25fd50a7bb5827e4acd8bd054d8b192b9110b8814a738ae75655009cb8a1fb26c6ca29089b961c82e2e46aad7e90d8e6fb32b50946d01d31ec42f86fc703b85351331efd157c7a55586dd894afc3c985cf00e771f526c335596ec353b5cfbad3460850c580d9aca1d1526677e7c61b8a8e94d7306d4b33e637dba6fbb9f2f0ba511ae822bb76060b13239fe3a677978581e5a79a285c1dcabfeb5c7682e270d81e84b6140a8729361be7cb969f38c0e51031adf527f72e25a505cd6859e4841707504003022804732bdc8ed0a4eb4dead56a38c8390d5688aaf1196872c03a0cb8597fb5599cf5531645851dcc3e1f53abeb61d88feb9e6ed641e7751b5ffcaed4a5490b240144ee2197640428a46ecee57f0ecc2790c342e49fe31136eef55d6fa86b467dff152b0017a2a181850deeb6947210ec04252cb68596d1c5a0f052ec02ce1054517c936f9da72b8ff288094f5afa7644dce8625b346e1ad009d20cd00f61283340112aa0e6411d7d16eaf6ebbbbc9160dc6697a3ddbfa968cb5e46f19b3e10d88059bb48ae2268d7e9a6e38eef967a8413158b937a0c7970648b7e7055764337b3bbcc2e34606077ac271f802f1ab7d3dcfde5db4ecc2c630a03dfef539106606a44fc6a3d9669912c051d0735d27a153d5f5bb896508b063b3dbb519f4c490a4f3b7a455d8db91ce3770c32acfae212ab00fec432c871bdd018a514b397df3a25f1c569103971d0321173e58b1533aa909e4afa4e4d9917e45245d6cb15e373573392e764f9c4080193825595abaae235679b48c4c43620a30c009bc08f6eff52c29a00c996f05d8398fe68a026d1b0303d98e443601e5ee2bbe246b7003ab6ece6a46faac363818dab69002b2e2945dab3d8687dd2f5dabda10a0e5448f3932c98e232371278e8c38d575509b2e65e28e6a2aa1565ac4d99b3f179bbd681eed7f14169354f39f5a15e7e3d6152179eb236de8911e63afa038ace68f75857e40ee72397e96ddf644a28e9927a6eec6373dd02d62a9ba5a756b9820bc1735ca1143b4d1921283a6e20064698f83aabcbadc2112796365ccc954add869cc8fa5283375678370283b07ce84d3a0d09717250e0310d225857583acd9cd6a476ee998ab1c34cab614f3e16a692be27600970c5b8e21768d3e5c52f213e00090b3e636cad431bc775772bc5f6a3fac0c38474a63934d65245d4a6aaec702bdbf521c3a8349732acdd745db8d39175b169ae2e3b8630ee0a89d50d8620d615900950039eae17a02b2082f102127e11c75805c917ff13973e384b949d0f6f6c0d1d293884bd3987c693a6d791639df770afc81a26317f99c15758db7c4e6c66b928916f0460eefd1f969806531c8582c621d8d0505c1e1c3db56f5b108e2085ab5c2a7bd8620c599f526bd0cef6326016f6b459ed857725766819b63b416170671716a568de5ed9c55361107fedea58e38fbaa6fb706938b4dd9b393c961857b548c72792b42edf5d5320d5c6e294bcdf9f973bdfb23509f98d7bce6e8cc8a78a74f7f03002ba31ea732b05567cb10fd64649682680e9ab8950de8a83aa9acd433c408feb921ca8065237977ce348887c4586520fbec6bf0669d42c36c133e9d779771d4b757a507e8934471694da9e6079ae5122b49b62b4f99b85b187a9565ed61e4efe0efe269dceb3d7548168ba333cedc502edf6700454efdd4d2ef013ef61f5d8820ed31df5aed57b08f815c8ca8713b12747867e0b35e367647d09a8abf897ff1c39003a63138ca332e719d8653bfa19ae460ba035bd74628a1e32c362f85b4bcd2e7b1294aa0f55a3b86c469269b9766007e6537af0589cc4299e985c14ed45e8aa81884b9843063d0ea0e369adfaba7bf10cb0792add8ca09a4c0f80fa774ba3df68489970dc437471d68022c14a64ca4f5f1b9b7d0c8a3e82d360936b3f754b4b3dcd3f46754615b956f5e510e31067ae0ac17ea6cf87e6c1a02e83259acd7945dad46dd66234ee3e51958876ed747e5ae0b65aa3212ac83debac0b0180fb754bc4693db84e8149b8170e09104822b6d4cd676ebc4190185ab66f95feb41e86c810b0f45aa9db58cc978041e9d6cd54e86a0d43ffbf3f227642f9ee53e7b23402b158e74dd97a94c62960e084975c3a3e1059f4c4c15f5b82b19b9daeb2e3d58ab74c0949cac69b2a525453e7141c288669a3e34dcb84d0245c5595b79e7a9970c128495f34a709dbe312b0989890c79243106d0b68c0fd3ee55fb26f4319cda16db83b79da1c324e96249c6f0813279fa0967167ff08e3434cff3a90299440b9d4b68e88498864af5246ede3c1c7894081618bc609ebada9d1f374e20f2d0d418526d1cf6a974257f72b79717ca98c520367b068fa42d99698e1a3e128764dd848b19e396d9f5c3c4da8dc17c7416905b4f3e1746a07624e644eb48bd18cbbd9233e5397714ded57afb19ea9f351e9a7a6651a9329d49f2c109ed0c479412db83758e0d0ce1f3196cf09b4ff4c2ba23c28fdc2a4c532f49d160bc01348d23aa812986f441a94e4be16c7ffb23af809f55e4ceaf466ba0695387a720cfe09fe365e219f0926d3216ef749a45c089aa67e15054aed69ae4a271069b93c24ddeb58836c37c5fbdb3c560632baf2f7d4c11d3246c1c002c2070531640d48b82a38401ee48ad6db5547d9990ef28d70458a57857e5c0713640ff8af85697da9560c001b019d3985239a1ab3491094dadf55892fd95392f42415eb03f5c1ab217529af9adf032d1cf4c830ead491411d48c6f9dc13433d02385a7d019660392721822d5462c28e080d6a3c43e11971462dd42172fdd1ad05e311dffd56d2e268f41e01ce3673fdd481700c9b5d878cfac0b6a810c12bcc63f8112b421a0d712b4fc2a2a709ca865f72049212ce3cd0d8aba5b51ff277bc2fe071486e949f9af0d8ad78dcc47a5593c760b726fbcad2dc48e6a895cfa9acf65e5354417851425c6cc9fb39b677a084338490356c813358b084d656fdcd13bc60c55eecdbc10d28947df0e1b4b21edb38f43da42a1c75ee7b919686e770174cc1630e56f51e77f394a0e79103452e79196a0a72fa5106a46a394e2294d62f6fab207951754b161f2dbbba354137a6c3ece3699c9151c5def5519fe9b500bb5ff367d8162e48245b864f2a8f994e4ca4586e8436f673c0b4f14d13236ea7879d28ff291b2441ee319bd20dcc315931c66b5d205a03875a037f17bd132c09cca4cc8f5291c7feab2d7bb0d7cd55de46551cc305da5696720f5a8861f31049d557f87bedc6e2157e2022955e40dd6ac094c28956be2e96dfdbd887a3dc134cbe442eae0d64bef8f3c51b2533cd909f2a72c330e99bfdaa05fc61bac4ad93257ac63be82317499f1f92106a80353226f0a8e235e1d6894b132dd64132e04bbdcc42aa8bf2c16883d3218dd7b452c5ca217da4d9212a74a16293f357c731c67ea9d209be9fe4a6a1bb1d26022e19dd20865978e84cddf06dd5f899341af6ce3f9f1dee6bf62d5103eeb63080593b53beda629a62a65145428688b4c5d021dadc9bd6983f6da4a620b0aa6c1ffd5fe395183b4cff2f2f62c20a2e70de3b74a985152698d29a53719b0597c9888da9b5d7f4a0ec4692cb0b2e422ce4d3d43ac8c8da107d5e0194bee7826b77e69db2b517ae4e2983739b14b9c83ce090b3628a5fa7a04e2931f678383bd4a384cdc1eac32e5144c4523708c34d86ca415de48203259fa996566b8c8cb17f2b9667e0d4cd3b09b722d8256f53bd09392ca027eda7251672c4446f5dd4455c6fd13d7672662549e58d16193ba8f3963e1eb8565a51850932ef7d35afa96216510aaa9b323b8ce660764b953f022435f2484694462c342109b2276de449dea44a86e4a42859ede24295e4ef1b64dec96b2a3d916632159cdb4d692e67f9fa7d5a44b3ac9a948b1467752dbf96a452149ada5709e5a91b8c9780b2c687231098d5775608a482704a81dc9d3ab33c3ba7d4f2ac8c272f9b061e039e2397067586553f2bd5a4aada73867571752e197303615e7ed9d1ceb84c7e020890d5ea608d9c77b27513a3af150cf8fbece7de497a91ed57eb945e171e0cb3851bcd48c46d391a8de44dd32099a01ef30481d7823b89aae4f71654e0e521a9c6b544bc5e7778fc04bde8957c594e9da279208f7121183be842dab376e3870e4a599b433936bcc6484058cd75074541e78937983af9b5685f6e4f1ae01916188bdd1beed6eace4a3f6320a7c2b6eb7f9f3562113098ad469cd3a8ae5f878831f6b15a80f245aecb83110f7159eb722285c298fb84563980061b8e83131737a8613112ec5032c0a6a32e5adfae4a3343f2de4073b3d2552337ff7785720f80dfe0eee64b3ba8f3a1f25918b947054ea687f56a257b38247c3d74f0d7d9a912e8d214361776ee9e5e8e5528b14566cc311ca210b263bf56848c888fbbf0a0faae0e678a3c141e29c16f2adaf39b9c2fce5dfc431e58fa01200043062fb75c7d01b9226d335ca340954789b15aeaa820dabf980a6471b71eecf5461395eaf721fa26eae08d7efc328b05af10492a7795a399ac6166d32290e792537c711e0dbb0e7eef70f6c6d4a382ed927c671bb9df750848a09e7a0938c5898c9ba0a9c5086cf5484c28b1159683d4478324dd38febe3ce663d5d27ec2d5adc0643812887a5a352f4af0dc326edc90ea6da116ce1613893bfd39a9beee256b7f8d1f768642917c88e64c876cb8b3da52397c7598fe5879be8f1b1d854b937dd57b53cd50784abb307203679a1fb8e9122b6811035a8355849165fc5a99b6ba836d2566ce64d251a63ae37ec3afbd775fa5fe0f4569e4445092b17e7ec5652ea56367547b2afa8c0c394cbf97d94c7698f9524a2ff1c3face632d3318d5e57c964f8815cfef69cf435731a0b4af432e80429afd8d74022aac4b3f1076efb2a1f166f68a0addcb2840f550bec34e8de083acf292ee58314ca5b583997899d3ccc9eb56305df1999dd365aa0a07b617a547ce8fc78b12eadcb54815ef9acde66b44e3baf51ae47f055ef03eddd79f1ad849781f7603aa41ed08392fe28ca729e847886b299b539327eb0c537f08ec2e4a4be6d43b8d5dd51ffb3d0c6bf121ec8537e650408db5ec0b083ba9838591705dea8808cf714f88c4378b512c0046227005a93a1ae2912b120ce73fb6ed3f4434791ede482b4bd2a2510c70fae0966d9191bf30a165b613e0f9cc3dfd0b6c371a5321afec605709c57fe078c646969a9b3ff1b7f2e4bbaabbdcbf0fa9513e8347a6dd121b6113e3fdd1a269939798e7ac6ee202b1cad94c309cdbca202444e4ab90023948d9c74182db3d787d1899780a09f66cac6bdf502698f87dbd9d9f0c0836d61bef5d9a7c891b326607eb4003aae38630c06c453698cced27ef43bc010269ae7d8856d23b21f730fe5a5b5b5e595d35864c3bb46d4f920b64f4acbcfeb8d17d4bef32b5a662e31cd94fc83989e2bcbfeaf399399137fd7f9b3dabd6a1ec6a1e5185297676482bf946a793d5699ea552728d75fa86763ab4768a9d72e98bfc9c225f2ff4bca5ecd4476850a17fd3eadc4eed2113c0e30e7d20270c39e60b1bc61fe3329448ab095312e507d48b3283cfad8d4e2674651cecc2a33cf55df901908932763d6ab2b5fa62e3008da67630f1842d8e3bdeee362c772b7cd2cbaf4bbdb9307d38a3d1c39d96289140d26321ce76711cbd7068f3feb8f9c652d86c205f7b0fd17778cde980a2bd3baaad6120e04be9e45bb2fbcb3d88fb08ca68975a8b5242784b4ac5059f57cd9551aa7393e934dec7137fc2ced32976ce9cd26b79306fc1f99dcf199628ec0045d883e5c7abb292d18723f922bdb55bc6148bfae8dca08ec6f47b5fcfae29290072f44d53d6f0fdb8076d8aa18d16bbf75436cf389946276c120fd259c0fb7f1579daeaa32c7a8a5d01d90a1af5ce547a59f2d8d1ba61836d155e4d94ee192583bcb2a1741779318fc2ed3b6ff326e565d899c62231334015b22b07f77114e8de0aba74e7fc8cc2b0d02c2db378e4cee1da8789741591e9d007898f37f12465127536f23edc8bc420f2e37920ef0e2ed2125c3e447f4c38a5f4e0cada336c6a10db5871e8cee62c0289e40204915d91f83618b459627e7ad36e10c52b569cfaa49ed2f33c9727e1ec9d6d33a6604295f54160d1a58eabe2e93fbbb9485cc3481e9f90669601f03cf09ca0e7f7949e475b4454b77772d27391f2d6f80b7a2b9b524f422686517932d42f5337292de72775964fcff37342cfc8f379098edc2d3f5b61f4ca0f2ba1763ccfc3797e376bfa01", + "0x3a636f6465": "0x52bc537646db8e0528b52ffd0058ac2904ce92052c125010284d291ddb022e54a28fd8ab325e0784a949212054d1b6242e0b79a46806227604ec7b0c1dbfb6676f0000003034f982f90160a1b3b957ebe220516b69f8bf7c0b5ff1ff2664efbdf7de5b4a99640a0513b610d510fe4970cacb75ac651477d3087e0f019b892f1035970f137986a5ccf30c8bec471edf3e80e7d99539df6111a36f3702bb89f376b19b346f1feab008a769fe4950fe2743cd3fcd4ac9a822b45dd49188afb90c39e0d79cc322dcae117c59ef18fbca71ee34393bd21fa94bcddf9cc322d59dfafb389c7784fd74ce8efe9c6b76e47691f09c8fdcae5184e77cd49cdb3586f09c3bcd69b71b05fbe99ae5e7ec98f4d43f096e965fb3fc1c2aa13fab8d9a3f9d5a6e97bcb45dd2373969f8ba4eab7d5bf9d28e2078e91fcbeed528829f563a8748ea4bfa6df9632d977c2cd5e60322cfae9c9940943fbafe0a987775533b906e926798c041f89d1aec262172cbc73f44762925f2cc4a9d1fb96717a99e6756e43c3bd84d7208bfc6a167671f7ca17c838f9b3eee26c9f2d93f1677133f3b7753fbc8fd2791909c41c541f83fc9e1a43e5dfa0c8bc8cb3208491faa76f1b74fcbed9af23b6ce7905e6e9753735884b66bca7001b16fa796687cfcdd2ebb2fc7a444f2b1b30fb6a3281d149f7bc4a41432a74b29654f776a39a7f79c734a9fb2dbb9efdb4ad24ebda5f71ddbe7857209c5c73e46fff68f31103fbe40e4764d191a2141269359f9d94dd3d9693749ae5ded4e3d2dd8aef60188e3d0b74ba73e72dffe197d121cea266e177bbb5137c96f4feaa65964524b85c74f89712f9d7b795b49a453974eaf94fc79a9bca3746af6d117ca9f7bc4a6944e7cfcec6314bffde3ba6944ea9182287d04bf8588d29548879a974adbb3b0416622d2c7e9dcae51fe74f66fda0ac4e9ec1c1ea1ed629f976b17bb537f0d4a4b1f642252a49f8fda9e8a10eb9ba0b4f3432a1aa8e7a9802b262245ca3e6a8397decea1122a93bd74a796211251f6d2c16ee26fe71089943d5b6e173bfbe80b253ef788b56c2ebe8f3908491f59bbf8b95dec1c16a1ed62776a4efab83fee8fa5449e59a1fa91fbea6237f1cc0ad557e7ba896756645f1dec26f9d5b987f06b1cfaea1f8b7d8cfed5b99ba88fe0b373dd349d9dbb493a3beda67676b19bf8d93944d23ecaa7ce2112eaed4ecd3eea85f2e71e3129a5958fa50f22cfcad87929fbe91f4b1f449e95b1f352f6d33f163bfb18a5ecdb3fb61205118a9d7f94b21fd9dbfb79566688972fbdc32452f6f38e52f6ec1f874ac4a73e2d15faf446c9aa9fce768c3d3b3391917a0b89f7f446b17efa9017f22357fdc8deee34d9f24fcb1c84fd93205b898208c5ce3f4ad98fecedfd3c2b33c4cb97de611229fb7947297bf68f4325e2539f960a7d7aa364d54f673bc69e9d99c848bd85c47b7aa3583f9defbc901fb9ea47f676a7c9967f5ae620ec5f836ca512a274f9cc16b0cb30ca7f3a8751e2cf9bd42ee94eedd44eedd44ecd96dbc5ce3efa4249d9738fd8947de7937444e9dc2e76063f1e224a67e7ee9621e1906184d7e3ca9de3c271b3b8575c2dae1377ceb573b1b8772e14368c4be7e2b951dc276e99bbe692b152380bd78a15c3feb17d2c1a96089b841d63cdb067583f360d5b8355c35e6173b054582b6c1d6b84b5c10e6199b055d829ac16d68e7761ddd8375609076497b0331bc7e5b0705c0d5b8645c28261c35831b68dc5c1c260f3f817760cdfe37e5c8ebbe05dfc079fc116e130f81bde8203e1315821dc8b656383b06bec11568dcbe069b80f0e8537e14458392c1c360647637b70262c0f76060bc6d7b068ac17cb82cfb9324b83ed6281b0676c1abbc7565933360b1bc8d37810f6051e45f03082c70f3c86e021040f353c7ce04186c7191e3df030c343061e34f000c303051e5696de587263a98da53496a6585a63498d253696fc2c55b1f4c4529e253e4b5a2c8d60898a253d4b562c6db1c4c5929ca53a4b7696eeb4e8b4ceb49e6855b1d467298ca53296be587262498a252f9254484a21894b120a492d24b190d42569852417925e48c221e986161cad3fad37926c480a9354431298241a9266489221298624185a6c248d49caa125472b8e2431492724999044955442d296242d495992b0245d49b292246b55b5c86895d1daa2f5456b8c96172d3ead2e5a7a5a5cb446d072a285a7c5446b89569c9614ad265a49b4dcb4a268f1d032d39aa125438b86560c2d145a30b45468add0e2d202d34aa1c5426b4bab849616c9463221cbb4b0b4ae20056a6541aa02c90ed21ca428908e402a83f405c90b920b485447641ca18104e8a88ca32f8ebc38eae248cf919da33a47501cc9397ae2c889a32b8e8a386a73e4e6e88823238e90385263c4c7a80c23338cc83042c3280d233f4667188d613402a32f8cbc30eac2480f1211466f8c66466e8ce0180d61d40352123b8a285a63c70f3bceecc861479a1d588ab0d8e1c30e1c765cd9616547961d6c76ac29e2532446519fa2318ac8d801445116455a145d51f4c50e238aaa283253d443119aa23345648a6a28025314a68887221b8ac414d15054a6d503d11f222688d8206a82a80da225c029402a88a2200282c807a21f88d21041c159d9aa88a420a282a88a6f097008d1cd5013437586e4686d0c4d211ae189199ac3b101a6117a415b63280a0f076f8c97032884a686d82674432c424462c88a23363630a2095b0d9b0d150ad105d617b1cb16e6c80d9105d6131d9fce0d211a846610da414806a11a84c220fd70abb8530c491164e588cda5424866bf0097b03768720c6dd1a1d17d71ff884d7871ba1cc01fba31ac325a1aa21022104e6214086899203e21aa1183687911a1108710e988735a59b44e68510d5561e4c327a7c5a6ea20aed091d1a5d1e9e9c0e8d4e8d8e8f6b45a38f2c3e2212c033c23fe009ad1b060dde02dc1f281d5030b4d0b0cd6195b86a546d746d7c551153c8238c273144537c6f6856826e388447054ab22be38435aacb6ac8208ff848090a6a83e7c4d885fba11f0d8611b4254a12ba333434c6107111d17ac26587eba3a4760d43047618432301008081c0198a70651d554215640acd2805a804408b920b211d7806ac035960c900d8f35229c221c8a6e402aa12887cf09ab82111b1f134b590c3de1437c3ad8399e13b78e0ba101b25d884a8041886f86a010679e0d4374bc323afa84471cf50991086ac3e80c7843e8a682d15146874577876543d826c80d9613476f8466745bb0e4b4f274b38e4ca743b74357a6eba123a2e3a15bd399e9ce0889e9a0e89c00b358eae27bc2888b4ecec6665b53d354331f144b677c517c4a747e5a62b4c2f8ec541c3a2d78a0f9e07c55b494e8d66821c1e3842230b8383c263838bc2638377850f130e18907b837908c00dd20b1914d8871bc1bee10434ef02861288f2787c80d0f365b12dc154e468486e8ccd686d3c26de1b270257058b81338138872201a438403910e4437109921e2a15b8193a3b3d2c93a153a2ddd0b9d0bdd97ae4bd742e7a563a1c3d295c005ea4ee0b0e8a838409d095d0a5d960e85ee0a37022e0b4e0b0e0f57d56de1e6e860e8b8702c702d705d362436373b6ad80166070d3b66d821c38e1876c0b0e3851d2eecf8b2c3cb8e1676b0b0a3cb8e1576a8b023851d5c76a0b0e3841d26eca0da51c2d1107587151aa4226a0fad222a99a335b43fda1b35898ac410152c3320101f0f1a1b3b86108fd0dc60e1d0f261e80f1212457bea0f758c1627a4a2f280b4e648895ac326e6a80d110596174b7bba3e4773ba2742235a70442e62124869587b8e9258120369c68a41bb62d54607e84383248306c6f6c2ca07b0cc119c1d6ebe3a466bacbc58e9e9e6a867343c5f0fe20b5a18ac12ac0c5d18ab2eac0beec4121847696c2d687742362c1982d808e96c441cc9b1e170444418454563e7f8a61079f8025531424c3815ac2c9d18a0184b66098d0a84fda29db123b05e68683e3c7605961824375d1ead076dcf77e69be35b74407472b0d2409a63e94fb5a1cba27b63c58668262462c90c242b2c2cad395d1c1d1c7e867da396b17aea0d968b8f4ee74538c7680bd0062437ba335c0f1215fec4d19a9a83ab3952a3058578820e306c14ce8675850711dd1f1d61209df0498124474b8b0e8f8806e90da43882d6f0293c0aa43f4870f81a394742219f905de40a520519854c4172a9229da8009405e4104ee4991044100229149068641111f00002461ee0800e9430208902907090800d82b8641d29070893050110000554b63a9f7c962c2b5dcfa7294d36b04484264f212c59f2c9090294a7254bbc204184e2ac849400e189931136d01282c31d70c20128519ea49a3c49f9608a93294f509e8ef8107af3c192281c8082e4c993280890fae0e9c9932808a040682644c8cd93274d3e78f2a40902920841aa03509e9e20c14f4f1c5812456a8954081d70f2f40126a1363ce5899326524f202c797ae2c00fa123380a07a038590202294f23442d7122c24b4179f200089a74e04246f0d30750a24059d264891311fee90328511a20056584281f7cf04a42458010e58327107808b1e1292078825a32650a089e924089e264ca942708582122f8034e4478294f5052a24c4089155ac34f524d4070f2a40995254f233c8de0000f4078ea40079a784081d0103c05ea83a7103e50c353a4a03c49790a018a131712028a130eb48482e00f9c4c81e2448a14094f4b40f04404119a2c91f204c2132723bca03e88f2e4952404044f41124ac34d962409fdc01e58d244aa09084da49e181024e443089c3c69e244ca09142744426818ea83284f36b0e4496a840f9e487812123ac352a2200014ea81a73c39917222254a08522334d1216486a1447122d544ca08202c918af264ca1227227c1329233c11cba7271b68220565040e2c91fae0498a1310a03859b2e4c8391f36314e9cf1e539f6f14c267b199b47da36c5368514416ef468db96b6a3a3a3a5664a2733adcdd5eb6eae75de6e5a2ba5b4d23a679d3da6e4ca5d6badb567d35a99a5949565ad953295b579ab5dbb2b4bae952bd7c94c274fcabd6acadc64eedaf4e36653ae9b411ce7ad26d7f64129a51ea59e365beb28ad1ad7b4b925d3deba5266ee898403ae5c65d7a61bd74dca5aebb7d5cabce29899b943ae2bad93723b982b0dbbd5b467ad746b4a67fd41bb27c7f1ec9e3ce76466e68ebbf29c2c5956ee669647688fa6dd7552592733cfeed9dc93d6d9dc5c79dcec82384dd328e5ba2b9ddd6caedba4ccb229777750a593e3b856dea8dc6a9d935639eb9474d24a299dcd7595b956e6eec9b5ced975cc1cc7711ce5e65cade66a3567775d37c7cdc971944e8e52ae5599bb523a6badccdcad565dadddcc757b759bdc362953ae398ea393724ca79c95d6ca711cc74c6b15eadadd46ba296d1fddd407379b99290752ae6be7ba6b0daa5514694f66e69a7694d6e6b848029899b7399967d3de36e6dedaebb992b5765dc7ea58dd751cc771b36577d7aceeba6e5e95952957bbe3bbd19eb4ebae5c392911408d8c8c8c36664ec9f33cefe571c89495b829ed2999c390b93b147984f3a5d6ac51cadc892c593b9c983b496765d5a6cc95d9636eeec1dd715d37e8664abb690d3bde7836ab6b3a35a0dc52abb35988990fc01fe56eca5c73cdd11fcd6d949bdcec66ad73564ae9b6d50e3b6c663600ede6dbdd5c6beda6dd5d6b9d9329f3ec666ed9b2d6da7532d755b7ed152d00f5922a91b9d1961cdd5a72d3ca4d996be5ada5ec5abbf6649e5232d7cc71de5cd9c9f5a45b37476750d3aae99094cec9511e3b86b89eb256c97537e7a494aeba694f4a69cf9e3d9b524929ed1d6148b749b9b96d73fad0d0d0505010d3c9dd94674be6e6e6ba6ba59456e6280d990019d049677773d3666696dcec51af9b07a5bdd44de7ec2dec195229b9b92b53ca943677774d59dc5472adb5caeea694ce6edadd73cee626c7751c37396e72b30ea994d6228ea394d25a376eabcd6a02000645ac597401008aa694b26edbc6aab4d6add60108a05a204195406e546e92b571b5d255d7da5ca552d25a7bab752584a393a3756e9456e6aa553ae7ec269d9332576b17d6dab46977776b3db74abb3233576bdf32ae1953073708a444f1c09307b48f2d78a2f2f46409094d3cc043892de84094274b3a00c549073a10e5c991e842243c8100c5c912284e9a84f001073810e55600c293942710a44459d28481009e9c48919a60004f9e38811212801f415c405c4440887e5030c1044244109e3809e18325524f4668c2812710982e68522221ca07a4969a301080eb1080054b04f004d5e4c9069674008a9310a63409c105d08349aa899427284f1d902201c802789a32e5498a081e88f2c112294f54a27cf02465499329207cf0b4c402a8260c0420c2074f53862471c009012cc000030180f0b4248a94082090f2410f294da4a6fc10a71cb5580051a2484182faa0c9069e3c8922650257932729482078825a2245c213942524a9a70e1ce9982235c509094f9ad4074da6406922456a8994130f78208a8b8805e084034f5244b842529a3c3df9a0258200e54904119a2c79ea40132951a4a648b6c0034bfcf42485034ba444916af24194274f9a20b1054f1e70220565042937030e488da04405cad314620b964089e2648a94272a4b48780a6189141427524458f2c114271e582245c2531215284fd30582d13c55a75a8b6d5392a7a6625353b1183735b5cd903535456733e129ca2426a7a67a6a3289c9a958339992b1a9a9c984a762302d56bb6f2a462793988c4dc526932919934ca6a6a6a6a6a6a662318d494c4ec9a9a966c2318f494c4e49263c2539263c3555631b139e9a8ac5289329c94c62528b552631c94c623216ebc98463b1588c32e158ac99c4644c32e19864a200ba4732b3f4c094261c4a3c1fe54349f738af5d8e9eb7cf1a16891a4325d3e5ad6191cf3f4d72afa264950cbdf3d0bb4e955ded5a6bf5d9790634f0b3f23f0e8f787ee461cb8b989feeb5422f5d7e3a07820e721d9291305c81522ab158ad254722b696944299260c95c2d02aad6aa8e49dd28aa5a3d5526a3bad96106d7991b7582228e5108ff98747ab65c3a0d90a7d8787fe85b675a69b5a5efd13754021b9e7425e476804c93daf6192e99e7f426037a89414865290804b0e8a8e84e59c834ba083e21da358a155ba5153df72694710b4f2935a2d776a25cb0f1669f94cb2fce0d7afe5b515ba9187d26ad68874ce9de6911de523858e648f8e2cbfd10e5b636857f5223bd96857f5ce86d68eb00fb223ec85ec085bd91136ffcc3f5fbdc6d04d6de7ab4f36baa9f3ea9f067a96fffbbcdb42321dcaa96fce2107da996e0abdfa1786a177e8d2aebca4f132f352c78b1e2f7ef8f3a8fce5a0bbe717e61ef835f4ef03c3d09dfa03b7ce57def9cab536ddb4f2eadf6ab55a791e4b044129483cef73ce3dcf73ee8e1f68596305e3597ef159ab55e8d2c32bcfb4abbabbf548a832e57efd5e99bbb5d6f24b725eeb793673f35f8356a2d1fcaba094eed45ea884c3223c4ba1cc33bdbc5a9b7655ef9001dd7b77fc406be0568645409f22e1a5bb95bec55f30f729580e5ffac85ed665334f195f642fbf59b6f8cb9dbb23fd5c8b92ef9c7328a7b49d7b76fa674712be730e19e0face9ddaf3ec1c2b98afaeb5e93aedaa5e47f0ab4cf3b57ad79169aa54f375e8ab8beefcd5e519af0eb606ee95861e58779fa107eeb0eb7ead6bb3e71e5333d6ea1f658c463fd9b9c4f9e9143c12fb4d8afabc23921126850ae7da95a2aef9487f9cfa3a9210c5e339e750496dce4083755e2adcdd6c75669762a2785431ede2190e3fbd6768c405e6470c00f82241171f5c7a50dd9f2eb3d89f2e65fed3613c7e3a094b3f5d4ae9a78b90f4d39fb47e7a08483f1d84a39fcec4e8a76360c74fa740d14ff780e8a77730f4d317a0e3a77320f4d31310f4d39dc49f6e00d64fcf60f5d32f087fba10f0a703f97ebacbfbe93eba9feedc4f4fda7eba91f6d387ea4f17e94f07e74fe78cf4cfdb4a22bf5d7e3be5d94be71922f197fe55d72c57d7c6a98dedd32bbb9d61121795fad2394cd2557d6c939c982648cfb319d52731c0593ef97453525252d24c5a4af26f824949eed4a2b8b4b4e49f0445bbb4e41d165962d915cbaefe78629e3a92b373b2009bc42357aee4df0a7c7e3a921dfb5bce4c44c8b31ca90717b1e5427e942d776a6622167cfbe781483db8889a0bf9b19f732f4cd2f2b13f94dffe71688400cf1c848bb56b7634127bcdc65eda96b3ec88e4ed9f172ae9d79cf323dae56eeca5e5ec285d7ae8acd987d32a17d9802e6c40750d04c3222b67597ed1f27f1ca0aae44a4a4a4a558987f3507225251e4a4a49bef2a4d5ea936390ec28bfe573c957beb412f2493eb6bc5d0b8d4c6fc94ff295d191d26af6515aad562babd4abdb4ab2c3957c872b8dad7484a4e35b7d4ab5cb4a49e95352b21fa8e44ab795c4c83f37f2cfbf242b857e9223b58634352ce79001f235ef3b72961f39cb3f96fd3cc972ff79442b579a12fbd58647bed2caf28745be24f23577ea24cb2fbd6b5924779a4896ffc86e76da45ddc86a69da457d87ad5cec087bcf8eb01f3535302e7296175dee4fbba8b3ae14d32e4a649988f3c70dcf86e7a9737f862c13b17fd4d4686a9efa66a79b2a171d9689287fac5d9eba96a69b584efd9b7cba2928c8f33c4cf2e33d3edde439fdba5b8ee71d16f1bce3749374511445e7d0a945ff3803dd9ce028c7bce8332c22bab4fc41965f864a985ebc1da75dd4bfae939dd3ced9fa177b4d5aa7fefc630c7461f3419e675da8643fe479d6450e0b72bee979c6421716d86001cf98577a9eb590e55ba8f349cfb316d4fc27046efef1f7811c7277843de7d28ee24bb796ca5f1694f6c2ac4f792f6e0c38cebf0fb4965fd252d738d9f907825dc741fd34db92ce1ffb5612ce353fc2cd3e4f5dba26ef087be9b197611169a5faa56fa112a6cf59fe39eb562eedfa9cfab785497efc17fad7a00c9148e75c86483497a14bed72bbe495ea077de400854556fe71c8bae3d4b35cb323f79a4b1b5a294842e71c899087ceddc4dd510a12ce831c89e89c8777d45ce872bb42e76e0aba6394fcd0b93b72bb34175916bc51539a0d2dffca46c9ff3e0f2d3ff87d1e2671fd775b493cefdcbb934fbba8778e3472809eba07a69bba2bc5205d40d4fc0217b880281f6a737eea1b1213118a73fe71f66939484c44e994bb72b323882f25be76c950f90bd66ac4447183ec3545f9bc9901ceab0a0860b1970f2f41c86b8b90171ae9954b37cd3edd241fccf38fd3cfb79ca7de737a4c3e3d5a4e6bd06394639eba2c733bce95635a83ebd4917a7011650ccf3f724f9d76534b733254feb2ce2ded7a205aef974f9d5b03ebd4a535921548af16898148af2192a09f4e430fae5b9fa1076ebdc30e7a5c713249976107f77293493a871dd8cb9349ba47634a1d803f524c37753e6f8f144429e6a93327bd73793b9796f3a4d39cfcde2741cf5670da9527db41e7b08877c988ad69ce71ee795c874a5cef49f72ce89add34cd3d5bafe6f9073a17bae7d3720edacf9d26f739edd83fcb1f56675fd9514af577f58f3f06a50dbdb3ad24d33b9f5d06ec26a9f31dab7f2e2f19d1a7adfe7108de11f6a0275a2a7f89cead817861532ce7c6c073183706d34525ae776acfb24bfb3968db45cb2f964503fa276d7847fad241cb79b6864634973eade79fe5dc697a9c53779a1d7f5ba97ef9d53b2c525db3a3545777eada838b28c53cff7429e6b9c754c7c0d64ed8218dab9b3030e58c9fc9626fb56915b23ccbb6e7590a7c9e7946f1389206c47e9ea550e7d9c5af376f3bd2cd52f96b03b7edc2369faae00e1cd96bdbf8a3b80cb8fe93a014334af5cf243f7e3a19ce9dba2d8745aa9b3feffa097bea6d394be52f0ee4a8fca5b97647aa0177619c4f6dce8d4153404ffd6bb02d3b67f9c5a192f9edf446cdaaaaaaaa1f633f7db3dc188c3cbb81eaa5fac574134f254c3faf14d3376a9bea586ded8c8ffbe3fe3e066313e9e32622cfb8a8f9fa3c4301cf73d0379d7d8c5ce7dbbf6965f48eb1a73eed28679d162266d04dec4932ce0c8b8846dd34babe7d1422a49bfadb33e8212e93c964af76a71ee2af760eba69014c643e2b496cf3ed43dd24bfc55c8c4c9e43239ce7d9bf09d23414ac632aa8854562d840cd003d845f2870d164addc3d56ec2c26c29739c8f4e62214067114e2d419f8f976216c7cfb05dd24e51be0b94edd6347d2cbddf981af0162bb589f9c80c8a102624fe995320145f044c0921987b9bd41f60e17107b28be5153cf3eb64bbe328913ec3ccf4e50434fa0fa493f192e20f6dcae917eecb5fbcdb0486d50ab6ee911f91ad74d2d23f235d72ebff46ae5b30f7aa1c4315f03a0a4edb182946ce4e309804fff63f59d4eabd63ebd65a47dfad45c56879a9a73ddd4af81efd44e1d9352caf97802e2c73a610f5d404c5eae5dd4a97fac05444d3d65f9f46ee0e39e734e6fa7744e3a9f3e0eb41ffb1885fcf4ef8edc4b295d3abb097a8a88fd63d24f13ea24f9e8a61108906ea23eddbb290c7f74fd1cc2cd4429e5ba09aa9d6b9774e9dc4368334d67a777e49e6710b78b7da4cfddc43313ca3c3b65e77a08bfd8396c23ed944e17d24750b529c14f097ca4954f22219310251551ce204a298308e4932f88abe75909735e3aafce3c756d08c791c95eecb2ff9cfd63d16ed29c1dcbb37fcc4456fe7d31d05796390878c72faaffc877c7fecfa583769c7a50fe6a9c32f59f53f79c9948e72b0eb2bae3e7d343ef2c7390f08ea04f7e69a3b6aaaaaa404f1db463cc887cea4efd597ecf42d14b45bee648fa359f6112ea7dc7d8b7f37f2eed0c8d68bef2cfb690bc0c8f80ce1c44bad3746ad046c9aae77c655be191cdbb3bcaefdcb3a37ccf3fcd8ef2350f9d864aa883eed41f6340e459096d9ebae61f7f0d727824f4ef8ef4bfd954b85ff9eaca10097dcdbf8fc3d51d63bf72d052e11ef4cf8ef23f672602de11f427449e39c8e79f3bcdcf4eff24f8d9e91cae6ed47ccd8b681eda514b425d8b23bbf29fe7ec323c22ab1ebccc41c6ef46c9aaffbc3a871cf07f971948e7d3b3fc9d952ee320d5373bb6b73b75ac93da95cfe7102d2c77e7cdb514b9e641dab51cf9ca03305d8b09d28dbc02e73944cbd18509f944722d3cfc73766e0ed12244cb0e3f7276a339444bd18515398be54741ceb25ee4b0a20b0bf2e1470e2b72d059ae655e18c7b97861a26fd361f3c2b86b827418e74b1ee4a1b38b738816efc23ceff6efe8c2ae6f3dfc87f7e6470e6b3fbab05a5dbc30cf45871df9e75aa8235dd8d0900b5dd8f4eec23ab79fc3ac7f1736a7c33e6fb90e5174f0c26a75efc2e68529b9e7e274d161a08b17567538ac3a934be030d125b8b0a12127ba3022df365fbab0a12527da885c02876d2ec1852d7573c9619d8f6b824bc785e97022226fe92022badec3f37c49c9f33eafb34447454153dcbaf38a26f7115596ad60734741ace6ec264ed1db88be0a161d1571961554bdae9b9fb81105816251071e056dcdb5c7b2956856a2a3c9fd9840fc9a653fa7204802efc70f1d47dfec98981cd6cec4d415155d77899cbbc009267098e7134c60b78de5d79940cf99aacbe530ebae1f2e8e4524faf5098e827c02a7c061454e011393c33e679280c9297058577ffcf8ac5f77552277f58f1f3f2670d8e6135cd88f1f41d329904002258781aed4f975a62557ea5144813339ecc8995c2e00b80417e6f21e123893c33cefe130f1fa701d3afac8afff5052f21e4b4bde72a51eaee4b02057e2fc87037118cb814821494e81c3584e81f4e13d2870200e2bf21e0ee39cc99594743d89c9931c663d493aecf32497a0d5f21e4b17a674614adec35b4bde7218e82de9b0ea12b8cb61a2bb24007e386cf31f1706801f7e2f0c00beb4e42e874dbf0eeb1cc8854d3081fbb8b0d685b55c870e4fba3024246f5d5892ebd0e12d871179ebc2905a8ee430f03a3193741f4e410f50c8952e0ce9c2905cc941d0afc33cbf1726d4c3afc3be2b02334917720a1ce65d1298493a051736c13541327d2ec185799e0f5dd8907f12f8e7b0ee52e0bb30eff3a40bf31cec1c7498bd1d3093f42487115d0e9849baebc27e1039002eec5ed87509acfbb8b01eeef7c2988c2c70cca9aa618d16a85e768a12be4811071a336899e2a5c5bad3d1e59849babd30bf5e749999a4f3b83c99d897948e3ce9c25a468e7461b1238428a30e9e1dccd039e27514a3e14a162cc0c1020e3c36bc8e1c16748d9849fad185195d9e4c15dcd1f5ec30d6159949fa8ecb4d26f62287cd1b0233492fba30a26b827c6909f2a10b63b98e6b82909796e9421716b472d685c574203307191dfeb061461aafc95af81122071668f803078e9796e92c878937036692cebab0d5e5c914803b66f0ecb0ed0a6126e9e1359a4cecb0be4c98493a7861df35c1f5d2a2b977610620a2cd193fb051859f1e5edd35c15f5a78bc71630837596c89a38c9796f6cd61dc753193f4edc2b4cb9329c81d853c3bac5e6726e9f48a93899d3d36a7983a48d52767f8a17649a376c93234fc5014fd240e222fb74b5a79843f4a563d3b872107690b7290f669c5fc48bf65f82991675b66cf5e9f675bbefcd84dd3dbc3193ecfb6a4e1333eea94cba8f9a176f1a5ed6ae7304a567db51c07698fc9679757449ec962a0cf3191eaed1d13e16faf96b720b05ddcaed1e8a5cbe7990e6f7ea85dd2a995cf964a39db92a54f77f76c33a7cfe973cee9d4c7c48096187ee4fae7f34c8becbd9bdaa98f1188f7922c5d9e6758f6fcc8fae9143ccfb0b0f98fc53e6837c57e6c97cece49a0e46d25a12f9dbe7412643299ec9b52e710c948c253a7370a4a3affb8bd749945b2b8b6ed734a19475f75ed8e20b7376564e4ded6cf45f0febb50bc71eaa9f7d8fe44baf1f542f1dae91d3de7bcf77a987d7dcf3f0ab6f6dee5768df4b53a436f825eadb765055a77deb665059a7f53d27669ddceb31e3a09cfbeefe804f216549d67cfb31e64cf6fbe2f6d97a675dcf6d3373b3e01bfd65a8476b2aef021d99c526a37ea5be79d775844e3a8c8dfa8ddfceb760ec2500ce05cf3ee528e523b52979d7f9c94923a27a594ced1764e4ae95c77cd35d72e5bb394655bb46d8b3ab51c386d2ebf0625ed285925450a14010993e738f6cd8e9c7fd46777a544b11f99eca5849ef339a5c0e79488e05929511b7c7310ea52da7b9d95e2b9949664c977ce236a83971c84d2ee3203a11e1aa9ae5d6a39ce4ab05d4aa197e3e4c6c6acfe4dff6458ad8cf3faa67f5fec3939b673d3cede7cf68d82b1cfa651536e1e95b4f9c7b58b730e8d6cdb76b95ddc9d769c4e45fc275466e547cea3364056aa9e0ad741516fff7cbb9c05478ebb9b8f9c477159ae58792954b4974e65fb29b1dfdc696e5673cef2b31d35ef4649404fa5faa9b790c8599176cdcacd356f4ba539efafce458d536ed6377669a1e4ddec6cee8ed2d93747327f9c127b23fcf442cd0bc5deecd2d7f88692c46ef29fcfce4ded1232c75745ecd00c9ef7209f74f6318a554426d26e7c2c249c73ce1d3b77ce9d7bce6c3d2b761c15f91c27af7f12d41cf4e47f9e0bf9cea5e4fcf3404d4bc2f977599dcb507a11a7dfee7e9c1d39efdcbb63ec3de99d3bcdfe3eafe3b897ded94d6320ed95329036425f76763603691f151073f39281b42b20e6e69981b4771e7756b6204e24625bfecd0679cd26b58b393b5697bed996bc51f2b59b1447267b0a5e73f3d52e288850d57ffc58f9f99f988814214f863dc661b874e6abdd2c5b82bc34a7d2f1e2d24d434ffdc95717f2e3d08f0c8603f895457349258e920b184f1dc62e4ea636c01061031169f4c8642fcde5a7c9680f2ae4700507245e59b6047949a7d2f162cfb2a55f9b5369f092ae592a0d5e30341e4887753099a8cb3a30341e6cae5d98d364a2be5d181a0f349717e69389ba7685f0649acda48f5c87dd28c10932666461a60b2a7ab020f22be6c21c24c28479832788355efc621f8578e032d94b72e9a61f4fbb74d31b3e798238998a3e2223128f3aa5533f5d7ef174d4a86f178a7647cd9f4c20fc7cbd9a8ff36a3e2d9d155eab3e4efd287d567f1203f31b14a6d3e5ab8f21786dbb5078cf570dca01b2ccbede3a6592a8e00e9c3b9260468e99334f06c63ec5aaaaaa02f3eac8c89452d0e18b18291288f9418e4c4a04def3646415dc8123a372802c3312644ca7cb8b7d0cc1d72bbce7d55d19ef79b18fb0af77943eb982916765f6bc947c32b2a22d80c032864cf6e20b639f8212e6062cac0092c95edc956519a9cb5104766aa77728810aeebca9924050175bec10084b55d56be8d17c95eb74e00105ba69e33c4ffd933e5c40843c75d76647771f9b65ea14901550f7a05dd43be8600e71aeb384ebf80762d0c87a9efae83f7baec618b78580490822902065758daf56b19b38677726b221a15efdabf6abcee191ead4ab7441f34f367f14e4b008d720b15dd23bd7ee18fb3a64ab1da5a5227fa4229f52ff9a25375d550f4afaf4f9493dfd34db42c27bfefb5a1f8748363eff5d96158cfd55e334d93c572c2ba83ea97d023e75a77641946ed42ef6a176b1e6da85d27c3a3fbfd84d429ebdb342debd21cd3dce398ce23e898388ed62dfac7310be7c29bd2328d2405f75f631727eb68823379b75d3e6d4b938cec9e926cea98fdc9ca7fe8d49f3123ccfc698f0df1c53abed8048a773cec599b58bfac82da03a7739393200dc6c0ee1ba341375cacd362056e7665c9776517f12eb6d216999eca74fc9640f7547a2a742eb7449c273b8f97a9f546f71c05f39af2ff5606401f829171699deff4d500b05373b725d9e725d6401faa9735fae3c752e866e9a4ffd93b3e55cb56db593a1dae0d5b9fc6ae56fb6d5deaace332e715af542805f9df36c8c95e7d918d923995f7d7ebd53643091ead4b93a73c8e7d4393c73887c51e7f4cc212ba7cef19105e09cfaa779abfa07e6fc07a0f8956d5597af7e7db655af0338df225f9fbb7c55db01e89c1d3f10c56b4eff9b2d79d2d518fb56079eb736a73fbfe580d05bdbed20bc58b8ea4fe7f4fbe53bf57cd06291afefb6b41bc5aa7a325417bc3ac7c20af4da225f9d67e164329977b16c555555fd1c36912e3b8b8474cecf738f292d567be3e293fec99894187cecf2caa4d4569772ab55f3e95badf5d36c92bc81b697eab44894ac7aeada4da2d4caa7dd557cd2392622ef98267ea85dd33926329dc5480ed297dbc54d298198ec5f9d72fae47c6a3e359f9e01a74d9f9acf39bd26b54beb30b45aae419a4bcd5bd4e5f7b7680d9ad7ed26b54bbb94e3202c9fdaa6e26ba74ca459d2291391374a5675e5201c6b29b17c5c9d3211cdd92b139117b4abc6f042e6085601c1a41ee27975033011e7209c5707d24d62bbb8ce9b89731f3d846b266e6c813d64a89938af33326cfc78c1576f3111f9d53b9bd42ecea70b4eed9c4fd7f39cb74b9721e7adadb56dceb3325d9e6765bcfc50bb38d7acfcee26b58bdb6ce520ec1c520ec2f259c66a4f349ffcef9361116fb3a157ff3e6b24f623e8dee6bc393b68c7cd67192e4f394868c4b68776f3ceca6fe7380f2577478eb3fdb9fc26f74d90b30ddecfbf09b2059dc3231ee8de4741ceb67378e40bc1ce65184542962b56641f357e408e39aa7e0ad729f3e584679f12fbee8ee0078e24fcc780f08e24fce7205fd06b68c47bf7dc697211f04279463ce71b05fb71bef7df85e2bc7de4b8ce9da653c73e4995f8584aa43e45ec1f857c25b3e747a3af197453f50bba69e9ab01bebae8b556e719946f1499757c5c877ad0f33d6383d29973d081dbf9cdbdfac655ff4df329e2fc3183dfc870f991f1fc66e4d44d23c7c1e69b1ba09b96e2fce6dc4d3c7ee439dcaeea4e9df4b5ddec482a7eeb37ea269eed50a725cf95d84dd3371fea26eadbe66037b56fce3eb60bc57e3a10f36a46dbd541162d55b6d052a78b9626b6d8f3e2c9a4e5a708c2cb1c3e70bcf1e6c593a99d3b086c17bd2e97749e43b89946f1bd9f673af0790a8e6275da2e44c6f909fee832c090f91ac19796e32d48bb60bbea059f673ae4797a87da2579f6dc235665fff9b835873894c444e4b7833af4f97623337ec6f4f922d276b1740e9a224a36935bfae9493ea946ec1f9e676d6ef8b6e17966c495773dcf8a08028914163f3fc6da683f8ec00213cfce926ac409e77936849f97719e676ace3c90e79910766478c48b42cf473179f6239e9f301f35b5fa51ca8b2d8c6cf851aa8c0d9f173f4aa1e045fd710a16435060449d1fa7b0a9f3ec9c4c4665b2e7aa6797ffb1fcb95d7043f5f5ce4bff5851f2a97fd4567a4729c324d3fb8e70da3c35425d7eb563ac95a4de79eaf5ce8f53624fbd7a14575555d931f65ddb24f1e7eddbaf77be2d8f97e111ff766aa910c92bd549fcdbe7d751b2aacedb42227dfa11e9f34a7dff86cd4bf5d73bb653913f3df6f6a7b5df52dfb3c7aaec373e2252f61e1321e23d3b73015856409dc544788e219a949a939b381c847a489f0be0e4060e57c04fefd8779c7a2afd1d90225f7a37e4891f08f2cc4d0c1fc57a2a9c260bc03fc7fe51134194fec9308ad892e9741c191689a23219eba16c6a1e6d0fcb02483e799ebda5270b4065cffe6de00c8d709e8de3384e6b8e9b92e3b8ea5a49d7ecacc87ccf331dc0fc50d2c7730801a8d66cc112a88939febc40c8b204161ec0a431470f2f76da2e49db9d5abba3bfe61cd720daae3b4acd97def950377ddbb779de1db7cda78bdde4f9f46fb3f23f191e517adaaece37a9f99e7fb259ce95e4ff2cbfab9b808c492f7d7a5237c93b6a5e7dfa37a5d42c7f67b90da4eacba16f12ecc83d735c8368e8a35dd337f7766db79dda517e9464d7acd4946111bef58aed6a70c83fa99bfca7036122f3a78ff764cd8179c89c7c4729fb499d2d15faecd422119f7d4e76bed318d07127a2f4918ea2d8cee9f0e5dbc121274e3d3bcac7dd54ddd2e76ea23ebabeba8f337f9f67399c90430e6d72f033416a47cddb69c880e97de9bc50a253aaaf4c416aa1daa9d790013d5f1c1a93be5ea8e9eda3cfae3994f063d257ffea46df064adbcf2175a7e6e9a3f8d5ab83b200fcd5e795b2008d8422b1e09983489f3e7c933ac7f966801a1cec7cfb7426e279e7345c4075ea3454d23e9d5a21ef4df7a4373d707a3e4107a7cbd088e7f3b3d2bd71ba740d9c6192be5538d7b42df2c579952df2a5695e45f3cd29c079158e029c6f4ee584e19379afca5fe7a74bef7398e65b364713de30637140aceeb9e6d4591ee4f206b966b170ae79b553deab3a3391cdb53be5bd34677107549dd76ae5abb368a236f831f637a4b150bcff1cb448bcff563e4323d285401f2dd493cf410fbd410be5f3d09da6901d631f249dc572d182cee102e465dd11c41fa94c267de54efdb16478839eb7cf333162e0f0e57d3ccf6ef083c398d62a0cb790033fdbfa56b6f585350cc324a1df90e5b53089d78176b17017167b7977cbe6f255c9506de0fddce9eb8569d5b74ebb53f56261690e9be25cbb54fed29cca5fdd9de22e95bfeadd42b5c14b4bec55bdfaa6f577a12210abdefae894c8c14412ea6d7d5eab4b795b5fbd31313fab73d841bd3c99b829adb92d3e2641e419173edfb31d66cfcf8105e8a6eea69e2c9fa2c04b9440e8534346a11b191d79a8856e145ad0bf06a9ec9cfda315e4af430ac0aabc5a1ef44bb440152407bd8ae8482e430f901cbcb0958bd57e9f0c2db0722267d92a2b67799085ad3cc8450b5bb9e81c5a40871fb953135918cb793868612b0763ffb9e75f83d5ca176d90870e631d5d98e8210f5b05060b5df4ebfd12b2556030905f2c0b83b92f7990ad62bd8a7b9525874d5549722127729891c38a1c36e4e285ad3c587990734801d1755c58ecc572a746b230f962dd6a2db0aa1e74ab881e14a6ce1f3dcfc2e8f98fc3229b570bc5fbea9b45e27db581cb4f9761006d20871638f220076de82b5be5c857be8516d01174612b27726622168081cec3612b17720e3dd0e1e1851d39b8b2fc12b25540d7e13c6c151d7ee444b60a0cf423dfec18fb1a5200741db74ae83abc861e1cf9ca8d2c2c741d77aaca0ee7e1a16bd60247beba554067f9c72105c08b458783ceba53de2bc8433be5bd446622f58e429e0cd5cac13be5bd406f0fb22c176d285fd28e47a4734e43098817067a78b7ac1c8d76a19e54df5cf3206726f2dd51c86feedd517afb74a786525d93587478d085c957eb56b91786e4b020e7e19de51cb45874380fdf616146bec36d98630398ffa4968298673a5db414c4bce6f5e987993d4ff112047134a229c4c0e58f0d796ce8630320315cc48011730604ab6d713749f79acbf77ee3f3bc67e3f39acfefe71009ef39409619f5028dec35df5efb6f0556dbaaced956bd485ef3eeb9e710490577e0c83e4472802cb3d7e87459398f0b932f98bd3c4487398f25f14e2579e84a772a09cde6a2139df0d2832c95bf82bc65a9fc053acb4eb19cc891ee14e84441778ae52c0f5d8785c55e4777cbeaa289dae0a14696158c3cfb42f5d2abf3cb9791a5f2178c836161c1a8fc35057ae83a7c878515dd29107422874d0939d1a5f2d7ca872e95bf74dc29a14be52ff06e09ba5836780539e8e1c5c21a79f645f6f24ad197de854a788a97d703229d1f2b9934ff84ebbcc7c43c0782be72ea3c8738f52d94c0ca592ece215858beba5441178de6b11775edd60bb5dd08c45e62bf564ea7440e26653291049ec964b7557de55bfcb572cd47115ebbadba72e923939f4358b74ae8a053e76401e4f52f94008faad72a74d067e801e8ab0b5b39b80ac1a91d31ae4522bcc87ebaa7cdbe7a2df8f9e95e0b7a3ec680a4a0e6a0d350c974cf69c8c108e24b69a5c4dffcf33a342285bc05cfa1e7758cbde4bc8601ddb45d7101159a163c06d8846890e3ba0b3824ba08a083354e28f1a58b394630860446b8d902861a75aef8a28dd7945e8343bea04768dbe6dc36b1298b91fca10cbd81e341ceeccf9aaa4347670c9d33221d309a51053580824d87419c5911afa58ca619606adc18e01528e680620e405fc891faa2092b981063081c5af0ded0689627d0600107ce982a3738e081d3061159e4796d54e6868e3f6c7e2bfa4d5342843602751923041064c881a68a2ab870d3a74e106ba888e23707df706a06d19c13d67001a44318458c208a3d3aec50c4ac8d355fb099c20d37cce8a15345c73ccc2865ae9b33052f95cd2c0e9f6fd3a556230e4cadb56aa19a4cccd5da69a12364a7be76e832371dbf6ddbb691319b4ccc7d03b8e2ab2164828d3172b0a3842c0e9f09fa4c71449e367488b8d386f762c10f1c68681a154141d40135b0424c1565ea160ed9b66ddbb67ef5c0860732aa8354d4ba49e13485c9a6d65a6bad5d261373a0c785d32a521aaa5a97c4706307308810d3c21715c8c3c6171a7c68b3c6163c7c3c3c6af460433412878cb098558e5e2187e88e180ca6e81205519738e8002a0c2113b509fa0da0abc8808c00a8ec9c79610ad91577aa10c20a1a9ab0336be28a166ee494b1462c073b668080b3c4107120515740c18d0e388cc17367cd95d7d85083c703f2087142992eeaf481c10068e46c41a14f163367e028b103521af4636200ac32661a80b112e2062a346b8c4073c51c72d499228a2ebec873841f4dd3344d9bc3cd6b4db0c4d823469f8d93e384223466e0cf93268f18f5490e2366484386134058d942091db4a000c5171a8078d53779f46c676cdbb679e1a73a79f1471c12cd7870a8d9b63f706cdb155f0d211368344dd38490c351383c74d1b591e29e61cd0dac1cf1c96cf8b6cd4a99df3603d40d875a6b7572220dc80192e38f192e2e0071c61b7abe768087404fac81a7ea8e112f336aad1a06424b543d5f9d066551d55039c1a999a2ded194a8dab66ddbab29a24131139b10b5ea62b546d54771a85ea3396ab49fa369e29d32412934215e808776175c41e55a164ccc6f23cd1b2974338e1b56b2480385999f05b429e10c1c4fc461a2cf1b2f746fd890f45b9f6ddb9c6e5b6f6f64e9ba703331103536dd1a6286fca4994ccc4d2e528d34af061b71a3a1d65acf00d4a191a5eb006d74b05c1032314465083f71093cf505d98cad89e307300089315b030514635cf862853e61b29421f60dcc451a39847bd5a754073d94ca3613052e3c6cb5725f6badf595c31f2b73b40370f50d1b7368d0c40e42883184194e3881065721070b3d6824b1851b67c8e8179732705248139eb1cd38dbb609d901a3ea8c13e8c831c30a77920801270c3062e013030d6fbc30a10195e1c6706d88a1347292b0c35db0441749841fa31a488b21b57e74344dd3ea741d184038387146862c7ed0f346d5030887364ad480c4132b8ce1b36ddbb66d3db0b9204e171898a0303ca15d309434649454849fa4409a13146954d034add65a9de4e001394f89989b1afacc70264f0c33ac11438d34b2c07065c6039e57dde8ec10448c15021032a1bd17530c049081e50a1b18aacce499b283172f5efc9903e84b114d84516689ff84d9c1071f9af8a18b4061824853c64a185ebef0f262a20b1318538c1c3a0354c426b5276a70c5da2c41e68a382f6031441615e0ec5075c58a2f46e880041a7df6986131d6b03943873865b821470c0d9e3779dcfcc0474c095ff4bf4005c82b1ac1194ea880668a1fb468416323d00b5ed059f3020a709690e3352fca80df421d20bed65a6bad27783dc8483147871fa6d0432626c31556b84431840b2ec000070e0c3cba989aa6695aa5e2ba6c777c6211741488cebc3301fd51a38a169028210831e19811cc09020a1e6048f3d266805e7350d3c3c38af6d3e9cec8a4f08898d58af4b5d65a41ae0632438712b5d6baddc962dbb66d9b43359998a32ce7b7d56fdb76c144436be3888b4fe90c33587e40e18d2d584ca086191876cec881059e3975e81c3bad2dd4748170e8dad0aaba7400d89ae081c60526e07841030e25c450618a3f51c87cb03283e38aafaa06a211906047052e5af2d020860a584ad8218e9816bc70e1062b696c56fe709e1e65b6405d804188556d687df8063d7072684113e3eb623323064dd3b457101c2de20a1eaa963023c60b3b70bee8794d8d112c0d0c33f09441460e39b678695a84b1fa318e986283a3155fb47083a68623d81023091a68a81233c6183f481194c5a4bcd980c78c23ea84316189d80a68a020c6883f6f8a98c30a98edcf1e222c66142f78ad1f5e58630c246640230e2b5c30010740459879e18538b8991c57f0bcf0b491828a2b3321ded0a9624e15471811850b38bcb66dbbe3da167e37a8e038a1c50a81b8f0e123070cdeb385102ab4a0c2963d76deb8310b024386a02b98a040f3021161ae40210c3001a86a810a3c737e70838524b4b082875a6badaf14ca6c57acc0c9a2c2d75a1bd0c5962e5460018b9c246229bc00854c0d2a339418038e963c4276500842830f17a9840d1970dd56dd8f4c262be1a575af699aa68551a699380dc7469c19c9f130eab8c2c0d34c5c3378a7aeb556026cdbb66d5ac884d330ac923a35cc00478a126498610b318002fd11c28d982d6d58a882070a5eea0614d26471c30a59621002501c6baca0896344a097d6e5358d4e9ed7a80842d4344dd3344dd3b0fce1680b56e0f182658526d690424b1baa65c64cf0e0450c3ca40106182b2f6d0a31e4cb0c1e3a36bca6c1e9c18ad70c50f447ce64626e83389210228c163228b1e5351abd16c76c88891c60d4d0c162031673bceac00148e336d85831410d13e6b0d24664e1083f6d6430e20915e8502a7e73508a1ac65f33ea21fc4a6107275ec8220732da98117313870d465c11461a31644c47ec33d5852e30d479cd29c828cca47ca8d3e6893b799c30824b97904b0d60d00f545a9411c315553b44c1642587ea4268a8e690e899696166420b69c250c15a8c31461760e29421c61726d8d0374cb4993364d48498de36ed052e98a3dc9a2ee2b66d1b78806bd42e2a059b5a5dab435f2ec4f0029fd79c6a9ab6c748884c26c352c7c033869e31f88846701ca143091c7e0b7fdb1c9c1b01c4ad8d2fe9c7d75a6bad55a6c4d75a99f840162e43c410c88d1c149070d105864026bc99e38a97cc4c0de4031443f38e48e4831cc9d17689f026cc135690b9c1073a6b88d0f3c49535270cf1da9c5fe8f29b53197edb9ea020e5402ac4cc331c78d9c10a1faa5478e30e1727f8f066cd162b2d6c7927c2c867e1cf111239a4c1b3670e9a386ee05ee081737d3163431774bcac40c34b93233560801254239053051554ccfa004a630d0a3674a1068dad092657b8e06605395e4ac052b4c78b1ce0a471a288385bc844520b5bbe08220d99335208d3c30f62e8e0c5135cb82ce1118de0053e4290e186051738b08206082d37b831858c883d66c4a97a6257faacd0050a81c27039a10b1ac47c75b08a2f67c841c5668a265e4ab01d1ff464f913450c52c45085e8b0e085971ccca802f3aab3aa3b5fab1e3c5f797c85a342d103a820235010745420438c9136a648a38a18bc50d5792333a37b43c615c3c2268a38776230c30d181174f182cd1a21e2b8d0c44b83d3c41ba2d766b552aed65a6badb5ca40aed65aab062037870cd5fae6083e5fe7d75a6bad43d487862897300a24be70486c0c176bce94e162c51929b09d1cd858a30d3f49a001c6145e1457cc0dca10bf0f1e96438e3a395891049e12c6c042dbe3c71301183a2d98a1b342185e6800c6f612c327e6c58927661033051a71800107073e1e973420156bb861218933806082880384d1b9a669af699aa6bd0b6926137fa7699a864183219b4851069a18b8ac6181cd125ac098b1060b62d28861801a9658ce103fb0c0439b1c8c9059d0041778f41891c6105ce01821c46b6714a08c78e545c734130f7152e34c33f18befd41d17079547a44281868539575230230c8ec287302cc0b182853b5ac0d1056846138985e9c3c41c26acc085ca0b903c33b410a6872fc6d0010e2a0e8e2e1b01ea996fdbc4dfb66ddb86c4764de95913478f1727ba34c15b7031c61266b08471428d1e661c6b6c198846e20ff1ac756028430526d818b1049720a480a18920daa491d509946583a386700873d49d9ae71051bb5068ccacc061430c19f8c48048a24c0e37a4c0821e375edb1c347efb2d100abf89bf35fdb65d5164a764f00522f7f47ddbb68d73df5cdc7cc8a8f5dbb66d1b1936dd15d9d2c21478fcd87161074e4326a78434e63853c40b7e548801034ee440910a3f929b43869a893ad55e471b1fbe98d5a1cac2e7351afde6e21ca281163048f16605289cb8f3dadec060e637a7dd447f7b93820edffde6de4d17fce6ae6eaabe39901e22ca64322baf4df3a17625693e0ebd51bba86b37a95d43de0d9fc9c45f2bf74349ec836a92567d9c6b4e37d73417bb69f4a14e722692e4e33567cd6e30889a4bcef21c92b4068c3c615071a1a58bd768f49a8b73087781058b2da8b0618a31b27869ceb33f73bce660377dafb977d3005e73d71c425f9a0bb9e3930cbe5eb05dd4371744fe910ee15e546c3272d4c8192367a4cf7264d09e6772bcbc2953c36ccfb37fcfb3372d74cfb3372650e639e7642cb2ea8586e7b4cc4164b703f97623b640ba2904761fdfce72bebf7b18f54b880b3de79c939bd24a99c8b33263b6f8a15916dc3de673227e7332477994f87c93dad550bcc922958840ecd55e65ba96794bd8e0d5de77aaa5cb01b0f38a2da0f4c78fd27b1412ab9c8ff48e1d7fe16c39af96da11f6d4eb04c2cf8bbb32a6d385fad8fdfcf1cea1057ebcac62c8101558d429b52dcd390b15f7e2a8b8d7e66cc7290f5af6e2bcb35b32786d2d2452ccd7abdd0e36e7f7407c719a76a3585f2f19cef9ce0b71a7f99cdd2c4fa691fbdadd6548186aa9e88bfab41e882f3abd85c4fb79a3584f863adfe1c9d42d6da0614e0680a96156c90ac20c01f3314f679ece77640d9f2c41642da26c97e449017bdb28f9301993bd81fcaf790ed97c14b5edf2649ace93896eaef9f4e68ab42cd0b9e61e70be715eaf079d6b1786a67a777d324d291e68ce5d983899a6537f00bf8c2653d5a6f7e2d7e6a3f8935f9ae517b5a3ebed0b993d71f8e4d3f189f7d3a9f7b37ff38ed4eb25a3390d8ff093a1f2179ae9334cd23dbd63073f67f72dff8eb13102cf4c8489f0f7ecfe42c11735457e77a1a4772e849a1f5b8ae420d5a5b88fe22ad03dcfbf2a7bd4bc7a67d93fc600755088380f7e5d05bba7832ec324a077fe5150864736ff3a0b3a0d93702e5d5ee62072ecdbf967c7eea8701f3503c99e7db3a3948c69b2c9f8b88948c5b4f90a441cf7e16212c2b57d7eac524aa949969ab37429ed59be8f6eaa52d8a5b4244bbe5d6b67d9971988bce39450d325a55d3890024ce49eaf41007acda70bf9ca72be0621e747215f5d1d50a09b46a3052cd51f39cf57774d2a4305c4dccc23d3a5f4b0c8f44f04af39ac4a95296eaa33d23eb9bb633b1477c7e9eca3a669b7cab7f37b37754f97da4d22bdbd7a9238344b03e8355b5fec26d6bcce1128d07358c540d8352bab9e43190361776acdb6ccca4befe987e3f3b13c74f621a36efadc87ab9b34ff341b7bcf86ced9d87fdfe7f974d0b638ef3cecf3d4bd3c4fbdf334f207916769dabce65f9a334f3df48f03354bfdfb6252b363f5e95d67eb27c1faf9831feb73a85692cdab6fdb6a4bc26ddb6afb38ff3acff93bef1ae1bcf30eaa7a7741e73ab0f3b4500975ef42551fa94f89bde6355442bd031d4a53427dbba3e6e0ed9cbf0ed42ccbcedec26c817c6561f916660b34972fa7095aef46c1a6b358965f9ee51f6351334977a142a7457a7411431f3f9f1d26a1feb976c7d0bfdbfa7cf3f0b6becb79be715b126ee3ba3b6afef907e5f97747f9a3e6a0a799f3d43f3b82deea9c5bdd3552fdf3ef829f77fe5de620374a5675eedf1d3d07ede7afc9e7e4d30b46033cbfd8392bcfbe1292c1948c790d9af07137f17764f6902c9e674133fdeb2ccfbabf0627d859d6132e80864a26bffaabdc3f15105be1392542d84f039c9ef3192669d66ffec9ba1aa7ba34074ecf798747a07cd41412f079fcd6a10262363c672426e6a398c85eadc62931af31031939970a88b9d15cfac6811e7747c9afaf033dcbafcef2ab4324eddaf5c6a9f781cb6bdea2f59e77e47e4e6e9776c7192aa13e1f6a7ae5dfee08462f65f4da650e32a1a44ba7b6956404c1b7b7d69a0c0d1b68c6d4a941ecf28bc8967e08aea8083d3333333333b37311291c77991f4f9b3988b6b9c6ee3191ed729b4bdfae74ef65756e9796b6ab3525deb37b4abeeb7190de362b65dfce1ca4dbcad72bfe10fbcd27bf88d2bf8fa51022157b00f4d2d9c747edfd2a3fd9e102406f2b1db4507da45dbafc589a11797686cb7bde2eddc879ef41ffbe09caf008e79d437dee79de0a39f4b6fde10652e6202cafde76e52c3bb68fa291f6959176d19da6685b49da57debebab695c4fb76effb227190d99bf71cc2afe96d59beda4225de838ec444a6d750498b834c072f92943d8747a48c4c903bb5388704ddc9ba23f79a43b57b3eb6f302626e3ccfa93fdade2192760f6ac541a6b338c8943de520138a4865563eecbef0b29c394817b27cd5d971fee7abcfa5b45f8556ca8a05ba53b3405f85a0777694ff01f96ee79eb7e567ae41db15dba5ddfbf50ead7aa3e1935f7a68e3bf88f579d6831fe6201274cf39595e59f98e243cb79532795708c33004fdf3300cc3d0d947d859beeffbbeeffb3e671fdf1c5dd7759c6fde755dd739fbe8dcd8b66ddbb66d43c376d8567e3b871ca472edaa2eabb39532917ead1e329122cd44f87c1d13293299c8051f8340dc36ff58d3e79c73cec9736a1cdb2991673dd4f9ea54d3ec116df3d681c562ad3c74d03f67b1582c569eeffb3cef9cf3cdbfeffb3e2a3e66666696dc1bc8413697764ad4bc8edc6f9b834ca47df39089f06fded6c736b95dc847a57e94d38f12a9f48fa2741d1c9bfca8b4e955ca33999a4461d0213443234d0248f31540303024140b87e381a8ab3a14000d84b04a5044934643a12c87510cc3300cc4200c0300000018400c62ca59a405d951812c43610a283dcb69e66e709eb4a73d6709260865697b0a187161d004a502dc2f94ef94c1f22d3973112a6e2bddbc5bfbdc3471c67928682a4c201a4df0428286cc840b311eed779f3baaf13694172b02c4b529cd5bce2783e6dc29416902018a19c45c515732f1efd5b716166b4d735d31360bfad71eb277aaab0f261ca714f2ad84babd6a920d2ab0450b28533806c87cbeb4bbfbd41c2870343f35e113fe315bed8ab5708f7ee4c9789bc856baa2a42aed3cf2e7327c254752193006112f7f61f5e8fc9377778b7843d31e24015a023f463c90477e71447ae0cc679472f9d0b4a381a43c131fd21a6b88b92305fba530ea9943f6efc0853457e2308896e4047394e25773243f91905103c9c5bb35ebeaaf3a2eb6412e039180a56e80fb2996d7f6ea09746f04c316c246d325ed69b8ce58d16c03f16db52d17648f0c01b4d7f795953aa3f3fbb919e4fa011a0637e9fa9c73fd48bd242e599e846b516fe31ca0f721e2a30f9674663fa9e8b42f2fa33ad32b70d2755b2c87984771a96fec84e862041d325e2306e269cdeeefc334aa705a3801ced171299d2bcd123a68f8b15d6bd143c02314f26a0033938e1dc30a4a20906d49b3d663aab50b98f568c5f298a6d5618c5bf9a32f3d8ae191ffb0474c5f229766523405c397805d80ba8e693224a9f61a76a5d0e50c028adac3dc4d72e12ad3810c1bcba36f968a622f04369a38f35226024b324b7012634445cc345aa55142676b3918aaada9c7278196422591ea7550d22e05c4e8417545378fe8805d177d5fecd20f9b12a538e166e83b10c2ae519adf64d00b9c29d19d5329a0dc2019769f72c1765aa2a5e0dc36a64d905499aa32b0a22d99c7e56cdb21feb919851634aa73c5d595cfa569469c7b577e5ee38f592bfbc238c122ac2d5a474c6799a03a68a318fd4d5f8a02676015d658cf5ef9aec16757d9639b346b221a48123ae1d65c3ed3fe78f005fdb8bcb89dd965ec464e364a3570f9682c9ef62707d122c31cf8a6f1a743a7ca0247c0a76ad065a4fbf0cb7399068f84114a67286717e475203451312f36ec6aca4785fe42a93676639ae38e54013e5f161189f6efa2cb3034bd0edd0677067d1840b8fdf98d78c33527140e12c66d51b69c3a4bc407b49d184989a11a42b946f3cb9c1eb8685d59b8e791fcd03b8d735bed825de321178c3d49c7fd2d779fdfc8a4cba6ca866931626e9a31e6efb6f8863986044817e94ffe38738e53a5e8089a1e6a9094074b4425b777467f17226b67d876e227c00d97613e5b3d34464bd99cc1e94abe2b2f853f3b4c9608be38a917264c3da07eb82c1139109081997e3d0190b07ddd89c9404c440f9583dac87bbb2c24ec3049d940fef1b789897ab9836fec477c8feca83d8db683345d631fa0961bc151fc034525ed45ff6aecf4a1bba2befad8be44ef67992d2763b149b694b8560516f3f84aca1e47693151cc1cd5b89054b4401e88dbe271af7ddf0096e5549b3494dcfcd9e12a75a7d00a8d48b143fce2e320466f354a1df23169fdb0430df730d342ad6c527d21460010fd916b339288e68af077f9da0709c4a178a1c2323f22060a5476875d485918340936492dfda28e8f43143ce723cd768bd01bd5d2f3b35e0f1e9ab0323087cd88b164c56e60d3cfe6c3f49ba016f03612fd050ee7bdea3cec95ab8bdc371e35facdd46bca94e9d255758a54e75c93f1f2eb434b7c7472e004155c3f8dd645c152f8a1953edad359464803c5af92a18673e31888cca4bc21d13821ed6b0ced21fe4943fa0c7db806170da54b69e040f0a9fb19820a0a8e4ad2b9e890a095d679be30e093d01796f091f9caed1279b10b8a623d96ad4169baa163b819f19f58fab0954f858bf239cd2570b3351d07f00cc03485a2e942467e7514f1187f235f019611393b79d3fbf5b82c8fd835c68059e8fedf3543784144a9762d9f71202b0153210bc57bcd0f22a7c6c71c648cf9ff51a11d0b2dac6eb69d9a7d2dd63071757ee5f3042365b2cb0d9134854dee36c85bbc0f33719ee7a40a937471a1c82902738c1892b0974d3c2008d617201ffda82eeb66011c2089f610fbc6451db9f0794fd8283c4cd809d7218663850ce0a10298f7c4a091f2c00fb67cc6b50e9abe75c3aed6972b392bb633c988a6865a6019741659e1756183a4f3172956a191d63b5415e4b01ddf67beb8d2e0227abf036285bf740c4a2f3d02076badd96003626214c7c53ef9bedb9866106ee49ad5ff40c07552cc02763dc491d50f2a37350298e303b8b479ade56670d810a2713effa557afe22cb9d0f33ec10d3fae09884fa080b7f479f57faecbaded480b72747324b3e225c693a4d352dcc820e81454b9b84ab17ab30d7b0a68103c5ac8757e8f568775d96ebba17d44dfd75d146a8dd4751fe6960e3f5d63273b73a7d61fe31c30c2c3a83f108fe95cae54765a4ab1cee572e959fbbd7138432fc5b8ea8acbd7b3cfd99fc7769e0e4164dca16636ed7efcb9512a9504b51f284f2edc669c01d8905af9ec968205e6e834563ed00ba19b2c9d8fdc6ba9b297fcbef5e32941cd16bfe90adc0ef614e502c6b7daeac8c318ffbd59aa0ea96644b1d874b452a1529cfe3c888c25362c234a3e7372f889666242ba72a0571c0f5a8b65849db19fc10e377a2c0662887040b6d04524d1436654c304f31cc9aeb1130ece33430eeced1d09886be496179b8511e8f6686c2189b5d01f0c1c38fed189d49afc22984a4e0c736053b1aadd9b17afe3c8fa1bdb6a93d9630e5a25c441353d1021aa2f0ccceb422c4ac09776842fdb688fbe95ba36f33fbab026c5b9c62b6f0452a826b8be58dca2fb617e0c8d593804a40a29f617d7fb29cbbacdb183ead4a3aafb944a7e3bc9e412e8519ade5b1a455a958b10fa35beb62265ba0fe548617e7ba1d8db7c05e8d21eaf8c7da4be4055ff7f1ba451343a16c463e365ee0c1461832ea8c5eaeb2520c57d1e07c1f4702189210269d4d6d6109b31749f06b45fedf950733058631a4d756787b4f6136fb4a00adc89c1106ff8051fc8621d131f98dd659a6b8641b39f20944d0be40ab1384ef9e714cf34880d9ff833d0801409bbc8654076c031bb1cc7e4afa2b19136635404a2ba359a8d72a2fd880e8f022f5d7edcf72dfd167f5c42f4dfd7c6710cdac92571770c13c4ea601a7b59b9400e4bc9ed90c4fd481c1be40f499876107fa5d1711324f41ee402417e896f6c5cd4abce01631aea94066524264d717b560dd090081f0e7e586d813dfbffe3a0d6177da388fdda0b33996d050e880f65ec703a17249aea028d1ff3815e45b5dff9c411847553142ca6773630682abe182b9e3581b14bf17896f830f47b64562ea0986f24fa07d252e7830169a5b4dc0a27c6e827f5e91d19e3029c99d6f925e80fbd2caa23593b4c932be0791c628d6bff1182ba93c22431910592351ad8ce212d7eb82ce6bf3c7c519f53ccd98aeaa85b5f5904c12242b9ac2a0b0784fb5c037e684b22920d04af715e31abd5eb1bb8f64174146f8cf04dc04d8adddca851f200e24e244b62f6099f435028ceef8d86d70a2221f46e6c93228ea877412fb0072df50bcd259ef834832efc4662b7c79c9cf6f146c3d90eba95ec8ab88299bd35a5fb4d55dd5a596481fc04ac829576cd95e8196e8e188bd84a28fd9aae719c4ab2a23370539d2b00f0ebadc506b375bfb4b0593b4777e90cdb3ad0a6e1e7cdec88d06341a21b7dc40766154929a870fa5dc9cfe3e6c430e2005d2a5670f545bf1451f19f14d1709cddc2118897006eb9caee42589905b65b5e833ffe3aa3ae0f5e783134becb8a6dd9f814d58b396f9648bb3bd356f092d64f9ccce730249337c7fdf9c50f3fcc8322168b50f4f4bc3c6301b177e55804aa206c456cd06b44f1cee8c8e8811291cd8a44f192198254fd2fd8d80b932e4498f8ac6d708682397d02856c30f059a46100cadd7691a388067140c9f4e064e882412db74b1b51bc67d2e56ac216f667547add099f123d93491454763b770cae2aeaaf48afdf424b1418153b31d30022582cce5f289388793930581e0d5fe59706de6188d3425a4781afa72f7eddc8700c347b48333a6df00c9b360d6acda7d26cd18904d032f3e3a6967597e3ab1947d1a73dea13144bf09ab1752dfecd3d8ef2323b7bd191d1851e699be6102e93ebc56192e38ea1cbcfce2993d0a15f98d48e967456524c0193b99245c825f3e04b7c9c2265f7a4bc0921cbfa2176efd15eb4b14bb2e199e682fabc7c1a387c85ce11044f1c70aa57289eab7235675284c8b3d62ed80b7acfc692ee4b93ae3bb304fbfe5f0633d54f63726eb524a66a257e556d11d5c40924ae5a6bb57e82ae1a0620875d91d4365d64ccd35330d6237fae341a773d2864028c0d9d581680d9084663e417ffe88e6d154270e8c754439751d269882e0168bda8bc20d48b6484132aa3913a8174013bd2caf1ac9c6a65b881081a7846b329a62fc4ff2c874df5464370ef0058ea4bf20ed143fc279a83512cdc767ebea8786008665a95ca87fc9e7c0263994818c88bc08df903cbdf7c20a0ea2bf2c18f967d7086fec7cbbd1b54339435f6412691da8da834eb98452736ddfafc204d99f040fee4a7d7c0c0a2084ffba198c1a1a4d304cb6748a4f6e43c4eb8b9318ce1c195341a64cab9c17b92455934d40542b13c330fc624925c6d501ae754ba91070421695e16a157deb06992f9e2c9f3f206d5718c286b4d03485b65ade871d8bc158faa47c7d411e53c7ad957e75a6e922fc13c05957e087a51aca56545afcf0fad3557522d6a8a9c46900b975154799f2bdb30084a596c18d5744ebe1baeef30abeb0c2e756b346554d661b919101548c05d6a495ff2de01f060adff5bc415bcd59ba5057cb3f6201cc0ab03eaba01d495e623a0677c4d9857bf126906e14591cf1394a25e5309d0cca5d9fda7f32ff94e668ca2dbea60b09724af01e599f569f2fb124feb571bc25fddb9579f4485acf9f12a715f27a844243e82078625ce9c606d2d8009394c41bcf17d2a917cd31fafbf649d4095a7aee86468e3ae84cf323a1991da052a2a6885f8d5e8338934c44b203aee652052b0c056f5ef10568a9ffcfd40f03bb1eb2c965b71b99017f4a8393e3c921e2d14a5551bde5c9549cbb433e806e2a695c94d978a959c4206b280259756ab276bc90b3225b5d2d813e31fea17f613fdb8bdefd8b1e7189971d31f4daa28046012130510c9500976a055c892f6d765ffc592f5cd0b344b5a324c11b60ac9c25c4f96072d6f078e68cccc7e6d99dd99ceb3e374a528b5e0e74bfd6adf0924b7fe273873418f02b1d67efa0bab8c156d8d75d3a3fa45a1ec3eaee72d45d1030fd68cfd585773d1a6a4c0c189e26af0dc7341db51264a2be47acff826508fc2ceea6ea9a38fb4f0f526bd029dcb84c1966b1893070d68da1ffa9c92b818736e7d2c36a5ac265fb9eb58155ea986ca078288fe12e7794dd48d93245f4b86519b8c4351349905d18d4259e2ee63779c4ddc15fceb66e013996f085fcc36aa1ae3b350af63873633ce4506842bbfc96e27c8ff3c6721b22a785a4c49af3a22830d3cc63c8a8cd08240659963748ec16fa953601d8c90262520def04e0c127b09bcb933ff76be74e85f6cd4625dbcd222722011016e60c4b66d5bab154b822d687d48820e8897f41ba9014ff21c225750f628116581276189e2610c4fa979941fef3dbfce5d11e728e7981e84e657335fa5ab8f3237d1b248170db730d1acb5556e94b95a1cb0647fd8f80f87b723708ba200e9f56b60b3476987bc0ffcaead17a175fdc95e1b252c2742cc29e914a9f2a96eed888a41026642e62663f681106b5a02d74426dd2672587dbe721c7914414d47f14cfd13c90c6ea5231c7124b7c6d2446d196985ae97078c18f9159968015821b3fca7220e4e78995e9ef9de6667383c985edb8c77db47a3cdba06616e59561daea9a322447a1ae2e8c6448ababeeb227c1e87d355fbf8dbd9717057e0a7c5feed0ae3bed6b9864e8fdcdab6737c594b0ac0daf8227c3fcb6a9385d5062dc59d196b2a500e97542060a2ba949150b22c1d8d08c0a6dd4db7522ae92e11ad289e07d91561a57033857440df16ab1633c70085683f5dc1cba9396b03843f812cc595851fb0a79a76269a38968b93d5c47c491a9b9035e6e8658604bd37212351cd44da9449990a1717f282a4ee2274646213ee6b8c20659eec3c1877ddad661a297475db7747800137c89965aed3ae8e8c9422081dd1d0d5a2f1093b06d3df216c7868c2b1e46dffa45b4f7a9126936b13c594d608a2bb211efb9a31466737497d20a6e1bb91592346772ca9e60d49374c228e4de0ab3512ade43c087a7a4657865318aee9803ccb19fcdf8d7019b956b208fc48b5f86c710a8c668c7c216a85a97a70f39a0438f0646a4c4ba48423adc69812bebe105cef05cbf0708fe3ba27ecc194a3c0850ad907afaf8e477b9998e783c2047c7c2760333c4c2e8681b2e11747879e80d43c721fe793c7b462eea4fd5c883b579b226df5407648e8c5df437fab765f3ac501daf0dd33da0790fef7848182809c703b7462426e42f15852c1e3880f433aee38c584155d666a42978a368714930a7f477469ceaec0147ddb7db1e3b5793e98d0f06091eec304d0e4191b1fd02837129b749b829edd8dacb875dd08e5a98817f4bb5c192055e5010293a35b0a29f8c63b2121f04b37585e63d0e34ab8cca257f9aa9901fd4e05d2419b392f50e8878ad01bb71fc7585a4f3927a28d512ae55afd695a0fc4276a25f17fe491515c05716640fd5b63aa90a1520a89205f9c75e7c03bda5ff56582015d2768d3f050346ddc53275cfd864fa4cdf6d1b2e9bdf04acb10b6e7963288562ecd294b1fabdef9bdd50834109b38d6a210f150cbe467c24258b1d13f32d1180ad6adac88bbd9a4a64a96d49fbc807fa8677017a8887842a07bb1c28deac2b8af640de7b75824a32918a7f7432ea9700b3296716a23abb323f20aac9ec3581fc9b002a6b8228da1be641ea3f49806d93819a7c161c0da0653aeb4a30f2f2ba43105949c9902f5f8600fd7d87b104fb825b1df6ee5dd2ab3272ef38738065777392025fe77ea47ecd7902a65536349cc8acd954150b1dd97c45e5767cc2f638449f427fcd4df8cb2ed86510aa0a0f8377ca5839fdd60e2cc5f33c5173c413c5ac72d9c767fc3f36b242ee7248e07a4322ca51784c34b2d10da4faa6ae4762a9ebad30dce9414a6859858b0a5407f836accd0e198365747bfac32426406399b683bdd91880f69522b93ecdf724508160fe885a38e7af10dea24a912a3053e293f236190f170072d40904513a29c4c7d700faf48220e972cd1b140e08c844b5d983c6874c90a0763ea967e498ac76eb4dc38ef5bf42c1b0fd3b5f0d2ec96565060701d6f12001276f60eb7294500fa3681ad083a6e2e2ac16f4e78e1b5ea2aa27004928d6eaa6ca91884f5b49f310999804e5ccfba60d6303a7c796db86cf6f7b369f8ae495c5a24f21f77af652d20da78019a8c1fe29ad727f30951a0e30e47b0ca29c86d48ecb7834d01414505649618b70c44cd74f24ef90f8c918876a87c7749184fe43046d1ab41c6d25139572bc59bbbf8025948976d1dd6c4ef29138002b126f60ff94ea08aacfa013ee23138f94a189ac0f8077f3eb4e0544e0299d3247f53b453ce14e546d1f14c5539731bf6cfaaf544d580047b9434fd024a629bc4900fe1504e76c4a4069f67f57b0d1476323aab7789c3aab73b03ca0f78841ac8a95a4069141272bf6d8c991968a60905696213ba81a916c6ead8fd912ac9498763bc78b424781d4f9686fd5508ae14af64092c83d865c4c254d7e76746e65445ee584965be2e18fb20a933090ec92f52d02014a4a454e9b187fe6da6f4c2851f26a3c6f1c485c684f49a5a7f69c262ba24b3a9694f6e419e81eec4732bca8d9056ab0978607a14b72a5ee7e0e27962e5cc45bd67cf2d2458379941da289ce672ef3bfc4f19b709c47bbaea365a7f8b71ce154c18c3b1b1b387c420a325075e439054f548934bbf0a679b1ba12ed857a859e9951163f3f775ef4dd0dfe0e00417cf8cd3d476580d5253dd2b347580f669903af00c34165e1a29f6532e5e6bf18259fb12404b870599998f767cbe3e4cd2fc9aa7ccd79c69b7870d7e75c068931652125b103011c4468d17c4be5da9162ff43d998e9cf6c94f8d21522095e8532563ae4d9065e7a9b1e0d25312911197deab3a6d458e6304137fde820823392aad310e28866ca2a8033e14061d0f3ab0b80d4e9098c88968f0bc055d0354e8a65a6bce3f3e5c6d841f9c2d44c72b6eaf414663f732d044739830ebff5f37c2025d89c2413c49f8a19fb7d6bce9308308bf906f987ec61fde9f648b9b0e9bbbe834b0b8e50f6f2ec01a29bfc0b5e820ff8a53b07da6b5d96883ef33714bf607f8e51e815e2a2ab0c87b09e4a2b60070cf8712e12c93cb2f02c63ad9f2583d13b448b9d7423932f52f751d9224735bb97d160c1c7f497ac9bc488e241cecc4e1588072202d54ac3751a617c3019a319c2f278a45d94d3afbb19799c2ac10f03b8bc9a6c224e484d5f5a8da3954993709c3e8db71a0bd2f7af813883e14ad138e45133b21b7a31f7ea3cb06ae7b5204c96d3d9cbefd2e04d790eb23d0e1cf9095b0cd0a525d64f20233877c14db514882c1dcd0c1358d94f825ee5ab4ee41a6f7c3fc53308b926d896b5f936ac1771135b4ddeadaaea73f90f241c2e21853e43840e4bbb5d11dea7ec279051d13cf7ca9dcc72e9d1d4cf3611613fa44ca796e07d03419b7a98e8e848dc236b969e75377240a8511830053058d30862543075c1c596358c1ec55a21e9741d89dec813aaecb7b1cf5a86f1afce1154c708e6ed831903aed78d173bc72279143f409400706332a06fdb24551b597aaf98429b6b846734ab9a20c2d7d42ff46068159a1ce16f110b725d6d6ac1b26826fb99b08736f66043b97ace0bb18ae3593946febd92dc9505bb3702c623a16564ea769f1c807f7af56573fc57a8057d595a0b7f471bc472023de1c1ebc325c289966bc37fee44b433688d1e3410879712f9c3413c97dbbd110b701d6de0f39de150412360a449f724d75f46581369015dc4ffaccf752797805f5719a4803660a16a0ed6590f85482a5fa770572ed14085dc30c3acff2bf20d8d8766592467b9fa9e72d6dbe3d255fb90c3394d27663a8d6594a4f7d500de12300bc0bc6c785b867fbdd7e7e3b69d95e724b8e21e3a59d236add5617c56d5531c82e1ee28d3ad8ebb27c0867a91dc7c6da5bd0517c4f6a06416c25cbcaf530d53148d31f287b956e0655c11ddc6005ab1e250f9c1e89cba694b3c4d68f9f13bcce6f1f74dffdbb13cb5e3013545f0b634c75dc1c6d548ae4b58cae0c4efae5cea0366dbe36f17f8602120f7d92b90b8174ce918cba12a0e1c2f69d1c907d230621db95efad214ec70b04eb3862daac333e13944536c6a07078700484f095aff5bbb0ea5f7557e2d506b5261d863a4579bbcb74cc34075093d04c5f69cc1bfedcbee808956f82a9a408d71c7e64944c2604e9cef3777138c49354627d48c60ecfc51af40c64cb7b581bc542dc57d73685e406e8461a2da49d055f11b1d2df7fc961a2889f97318928db09d003ca282ca42007316bd643fa67d3ba5d8294d6917d2f7dc3513dc3feec0c7e30517ef46af5f42a47d74bcf1c4b228d7d8db2022bf108d4fac2b3250d2772a9dfafe0a21f1710793419a90b292bbcc4316c1081756f68af9cf854e45a911db6aaec6077be596a39cafce97be164d0c6106b43e1c9b1469e593f242c15560a699adde2b1fb6d63883677e19465b2bd6fe35c9a273469c121627fbbd0bc8217a0553ebb9028c3c83965bdea60a183444dc9ec56b4c87a245ea73cd2a76bcf931d14d463e174e4a80eb1a5c23cd91167e5899688b62c7e7ff50932531737ed9d3af907cd2100b624f80580510be8921d4bbb30936ea5ed45e4dfcc0550097d6a290a59cfb549f472c1854a85c557ae4a1d26255285a5edfff24da551226de228ee417c0997fff81eea7022e12782464a33d9caec8db61709712f9376569a629b530c402455415d500d438bdb45c40e49b3332244d7b82cbd3d079502b695c8a329d491eab0abcb2cb075023d0b8fc0e292457667dc52049eca8561004797d6b6ff31f43095bb17d027ce3bb38a54a1adac8814b22c009383d285286e76d94fb4ec7da85856d19fddc8ea314a360e84d9cb5ca126129df3a92d101c7bf4cf47f388f5ec2142cf2898a4ea4965a6223d0daa3d850731fc187e170b10570b01ee24c0a316094fbd3d0162810269e84997250d330ceaba146b95564068fe4fe0e23f29bb7fdc3dd2106840209238be8ed23496fd1d8a4d28b4474cc682365ac08627a46a66691ea07644b93bfc8d3c68d52e2d1e864cdb7c76216698b05c7b3a482b233b74139a99cfe42c5f2e1cdf95875f2dc6418107b4529aa84a118f4e6044d9e9237015f608a93ae735683f568cf691271feec90d2fedd57c3efa6c269c8d12a12f2fcba2c00d99d86844980b7512cab6a76790bec442764c4221af44a148974284ff8078b1ccdeb9b57c88dfcda1e99af4eb9bc7697813a64cd37402acb9ea97d037394d281400da6b45e90e41c391cb4ce924a094ee78da39c5b7700793da487e18d5b8cbff33581842190120e3afeba96fb04a7ad113508ff4c36a68f19185e3c318b4dd22698c3b10637f1ca3c759765cdee1be182dadba3da393013578ae0bc713bf562a93dd1915f414c509345a4e52400f7b7cec7b21f238ddf5ecd834a6d33c4b91f40b5d7e6a31fae0fd816db8667649b467320903b56b83ac7851c946d1735c8911c516aca54615681e7657d32c65a3ea49307f5ef2676365e9265ba60336ec56dbfa03d79402a206489209854442082d5f609575b209ec2876cb9b9eed39128b6d37a62050a99eae0895b4bd0d9bbbc1ce2915ea4e2e5e7b90847d9a363c8aecbc8b79698f4d0adf475abf3cedd243b4c2d3bc22865ce6ec4697af097a5948e47fe6da2b03fde8124b2c31fbbd7c79a94310101d54cd45a8afbb0f51cb243c8bce93a437a0c3b7e5c9fa8be579d22ad244b8a92da8eb04a8559a2b14bf8b24b96e1c21effa0f145ae1462139c82597cc4836f9660db12eba8b9e105233ad350520905ea68cb3189cb46368aaf5e40f2cf531216eceaeb16e54000ddd8dbdf258c42c24780ab34c04d5dbc3837584f1deeda1d6dae77f162f5e62f1a81746b497b90213f0786129de2d0092ad4a6d016f6b305b52267515b76dea12099d997f8ab4b7ce18e7e0ea5b120a52ac1464712d9c2384b8d42889156463e1600a4f4fbb1206da921a09e5ddf5668fc895ea432fed296969f74510a02c1075ccb3a574523503b31d260f314363428c7abe2773805345493e827956cc7cbf439539ac78472d1aeb8298a8efe091c7e2540aba044122f2a27e66df7e14c4313f964fbe81802165010af3322bd079264943de1da4389ad7c21b47d8e671fe8165f97e5e264133d97a61305808293ce83567463f300d4bbff8e8d198dba295efa7602f9c4e199ba7cb9b441f049c66c0c45b32384a5c77017e13b1a8bf4e983d372b03542dba1390848750e77f0c628575a44e0561e1de1a37354c2535478a546b94e548f986a84c3f93d4a2bb84597891ddce59135eed01fe6799509b36dc76b3f966d67e4ac9c15265b1ecea6990d00efc9248290ee8abb60281023505fffd8859d17889b8118af84f0e45465ca32fdce9d02a1d86223eb3db0d173b656b665dbd4cb09d2fab84af72fbccf699c5a191142bbe19a3fd652cad719ad2f026675caf0c5729f5d40865abc4e9c31a80b38c164867e2ff0b48e9c936e0aa94b1c66df8897bbb7784206af09d88d19bbf0988cce03fdfcc55ebf965997ebfacbe9e829a67ec67918a163f8960acf758893d35cf6629363f4fed6dca831d183d8f8077fd9f6266030c7fa19b330691afd6ab81581c2e36eb0d76c19701fca8c2cd1030e303b1360a72e1b8b27e2052d08ee87a949d70371770fcffa31efe2e1912dae403e2c5dd403662dd75702acb871854ef0ba01af762a3c505aa6cde3428ab90bd7c15babb2e104ca5e97fcf35fb2b6b613f1e5cb209abab601f8599b8a97a9ae4d1c09ec3f4579951207dfff2045b306e7054bf1e1b77d0f0c1e6dff068f18a2ea6001aa228c0aba08000a3ef46b932594b5ea1009ced844f58d81fd05ca6a6b1710eb3595d00f7d7f487678022219e01a882ff56fdda2112b67d6100de6ff6fb9889baf44fc86b2968365284470bb5c90a11d16875e161a1eb6d6a10b5786ad0a143e0c73296e698afd822efac9d3b49a7eef781b4beb4431cafdf1bab97c405272ee3c88630e45810d30d64a03bca19edb5d7b438d43ec82920fd13eb780280c36ee1073f8d4c5b53eaf1a2b0d03d0b587bdf3ce052af4802ba787f6d2ce3dc637ad77422c4139fbae261ad7d55e715e6f8944d551bc674d0880e9c969fbca10e9966cc858743bf1f7690ba2fed56b6ac7e56ef54cf71f0a46d6090d6dcea9855a1e59d5ca57c6e81d6aefa2f10cab6ee4b271e4a193335296bdeb555f8fb494af02a790861ed0ae23467002772ce5d5c9167f153a51815f3cca6f8c6a4e64e50f8963db303124b9aa520b8dbb8b40b106397774bf81438cbbc87afe503aff1550bd2826b6ffb58ad33330e447e082cdd432030ca57741a7548fc77ba12ec48a986b35e22c4ec05a8ccbcff0210f0aad4fa48495d2e528e60a28305310d2ee8ee81c75aea29afced3c04d7b29f7a3bd566a9f589c438740548a4696eacfca06cba532430971e21daacf4a01d8a80103bdeb90797fe64a944421db161338a22c0160ef61df2d46645e194a573813b7296bdd4acc9b4a4d706cc51372517d43d1bae1b730f3fbe3469cbd81b2190c1d4a99880ef0e00613af1b422b4ea8b1e9a72970ebd551162deee52828301dab38b4e39d230e4f247d92c109c183e0a1ac367bd4aef422b0d2f15b628edfbe9f1a20415ef3518a8b6cd8a7075f952067e572a91864daa7cda691685b4247b0a80c28ad2deaca0e075453bc88d7987d3aa878a69fb247b490c6e0e315d466c5523e8cc39c3fbb37d4d78fa5287d5c16ee639d6d3c2c13532e0d6256dca3a863ffc3622576b69cbe4a0d37045a72fa5f95e9cb6b102bb8851bf61d74aeaf91b46b972f0638f549045c4a48d3361378f5089761d609b0848593562f21bd8c64978cdef65232933364feb85da609147b12470e95ccba6c53a897a8968c1a3b832bceda3eb561c14c7b024c9d0b71e9a5ff656edaf670baed02bc67a029da963ad0037225daf81d22a152dcfcb05722bc3fba6b1829b13e0bdbecb67d8bc0b365b193eb78c8b400144f41cffed3106c66c6294c16489aff12344d9bb46bb7d5fd8996d86f0fec2fdaa6a575b8593d5f9acb6e20198c6af8c139c3bbce56ad53c293ad6e4a5eb46e42718c33c863f006de987421b9480da1588a48bd470403acab0d50c61df114776982dc2da89964bb84c8289e0494097764b3408165b3cb31c4dbb42f67ed3f47883b0a0dd60615272d405170d8e6f980358a85a66cb4cddb80369fd4149eade6eafbc587b2fe9ffcc11ac4aa0338501ec04fbe7452f14fba35f7606df3a7bd30536f8e2e0670e5ef610e15c48bd704869bd3cc12538eb4a90b00291de29bed88c45fe45884903a9ff4cdcce379a39bffc787e1c25d32cb1586352e83690e0a825229e334018a4587634d01618b7a60eb1d2584d8a53ab38964ec6f9adc446836204d36b6d509346d571f14f56eb8840b8c848ef1b00e8c5362688d03b049f06a2f32b9b8c6823227333b56185a691d72a4942eb25c0bae9c9fea9f35a9bec4533a87eeda61e2c82428a44f810c3f85c8cdd0cb7b6e79f15d8d87bbc3854e1b4dc5fbfff4aa59d52144a6b8849d86dd59d28e3f75a1b109eefff5335f92cff6677bc275e792212c8c577cdbf1bc80186a2340195d051c362ffe0d0df7cf58f926a10ed73e2cf540b2ea838180306a3862aba5ef1a93eb8974037d1e4191b9dbf65834da8a928b4bc43c104029d0e41fa3df2c12d0d76b7e19221a9e5a6bef54690c3476056bcd39e0bc319a54fa90361944b41422df17dfc033e2752ed29f8f77c3249aef3f76f9af656ad3dbff62422bf32e2e6f797ebda16ff585bc417f978dc78eb7c924b456fc65b7ff13e05d808610bb709640c279bf323e714114207245c10a67186ddc5a5cd4c02e1b3845ea43e42f4a1659334fd3e0b0e2aaac070e30c4a001e85e782660c46c0b48fd960337ce1f26ad842707058d540ed545c18ae775c108e08c006a58e8f8eeee234f2af89999625f4400ff118aace77be98a0641d71760c12c1159af23f77bfd785e7b38dded3a3e1d2180842d9506cea44a2be0d5d112917f8b60c13856fef3d206a6c8b80dfaf75c84f4f8eca6eacd292f6dcd9f30df574cd77d638dde9e547cb886d7594c0a6e3c0f3d812330de35ab490fb475b03a484a05a5c054ff9abbf4560fd8a1c59d099704d6e3e426b615253dd5a4b11a2a442526191f1f28f1374343503e47552ca95be25b9184126e4ac4f725bd50c5a6aa61fc8dfd7132a710573de5ae22804948e345864d6f7e0bceffc78ea7bbf31c24360488d4dfe968aaad4e5e77fae22908f1490d891f4e1f6e9b7f80bea714cd6901d0eca490093e47481e0071a59fc3641688cbfe00dda0ebb3f7715085d9f0713f4dbf1d04f26212da1c4978ab925cae01481047408903a4a46977948c19060a856d8bc0cf9a5f4906fb4c33ca15b48cdf37b94470ae689b1c3578f01e712f6e7eb762bed40487a73c1c6ef8cda269c3be6f0c34346e2218b97ef0e59128db21f5a6e3b7bc500325c29030046497d020886831c28893098066839009c8cd7fcbd0cc00ff36d31b9c87b775962ed467366a5ff5ccc2522183cc3ee5f82245e907e2693f32d45c114ff43f044e42141e7a90a4824455d0931bdffe51f8717be41e6af98cf049a09febb30289844d7b3ae01139f5749ba923c37956e9407eab9ae63973530ad71cdcaf31501ff21369ead542006c74d018c2db10f08cb9ba0b9daeb358bd88779b3d058264c94dbc5e6e0721792bea9177f6821ef769d71eaee5c99e11483d22ec7ecec99c6637515a2a1e5ed6359209c8aab8efaa6be57c06078ccd646bba1f92276e744a893491a29645cf4e4ec87913cb9fb402b442631c20b162986a0e04365db35c055c49d2aee21ae2a94ab718b3cc9738d31b09f5a14868081431675d6ec190f7abc602dfa8985583c2fc564e80bf4e554dc3959e7bed132fb97e0661a3b9e1b0c0462d09528ac5aff45d8d01f9d3f62387caf750b2030f9d94bcf452b23acd467231c6716ebfdb973987183e6a13e6236903995e010c46d94422865653bf923e24360814f7c5b0a189bdb4397fc090a3e2cd64b28b8027126931f67c2ddb994fbdb53cda9f3f55a2902a0676775681b3c4bbc36caf4d4376ea05bc465b01c5cb7fe81715af3d3ac800e71bf69603dbb09626ed090619db8fa3105aa6323602f1f41f333ca44b6d91e02c1661d61d279041776d6cdf569dc8476905c157af85f750c79318bcb432200e8784716d9c93bd22eb62872625de5357d99c110171b7608a56d5a9dc2cb2daec7df65121151945df59a88402938a84418f3611c5ccb7b07d5bcf96a495c3ad7537bc52dba82395bf79526021e5723254829fb93161aadd0a46a27922a1c89a1428f03f2c2b50a8148538800adcde6a204c4ce29eb85ef395a4512d5d6b016c7951ea5a4a420dd004baa5c3ee3de908482415ba60f2256b46f7ec1221a8b34d0b93d92da8a675b3c730139a56fcb9b2880107e779d38415e6f7d6a6799a4e00a7074ab19da11719153a114627ffeadfbf0be3d449a26d2209068e74de998c5b501ca1e9bdc0527f92f6fb252f6197f84ef6a1e2df2937ab5ad5ab30ac26f85e759ae42ee8b5b5a1edbf12c5428da929726eb3319932f6833e000513b9e55bf3960481a72db154e56819da01ca8fbf56ea552909b30b672d744fc3b10906c85526d37a920125bfdd6b0ad7212928ea2197611f61acf4deac7b1f3be57760ef071c15b99451ffe2aca4c54cfb1b77f5ef63bc07d8b98a043bcb6a91df3df1528445fe7b69c368495f33d8d63701651a3d431deb8586fbdf58398d0da8eb9ba7eaa1a8fd481d3d639b6f43b9de50885daf74464e80c43d8a7d134df41dc6a35af194b2392d7b38721a86d4650b3c5a07bd2b4bfa5c6febea466c31883dbafd2a6aaa2b7a3f5736b6472f880eeb10a71889c5061ba716dff5a7bf5535ae10cec74227d3a09e290ad83df377c3fc4ebee5b571e2e15f9ef30ac3a04d2002f365a64171b993892e15c88423dff1bb4f83ee8d4ceddff76155b25a6a0b3a60011dffbd656f9e0665f9e99c1c06af76f7ec5e169927858ae8ea832211313c2cc21d8904b1620904449a3c0207fdda5ca437c78ebb3407ab6e829ed5b9588c6dc9d79bb614bc4c3ae5bb4f535ebc79f774988b684af84bc1692abf9a8d4770ab1f34bde66274a6339f9f236d17ee8c0021731eac295c91e9f1cb718831986c1c851c7914735df5581cc67580587ed0947a6307ab2eed2b9063fbeafcf9c781abbd6ba907c038cf1d0ef9b7440768e5389059695c2f2db1bd179375163cd49192f02c1a28f58f917472900bc7d94f2c9b04550adb43cb9a196fcce6153a5b97cd666165b07439eee54e67330842a3d677a6cb6be09b339b965621f73a455f0b7a659d30ec84416f64a80c7a66bc254b5ae638cff640c02c4b8d9d5752712024b4120e060cb016047923f1c9a71c2797bb77791df1f3723a4dd5f21581b62a144f329382cdd4bc1e6172314060d2136618386d1af91ca67b5dd866e5b3a9e64ef04897736fb6f4210d00d77643e1556b523f4ba3c38c6f7edecb060b000e117a84cd84517ddecdf0fd4cf6bbc1ab517b375278bc3d2198bdb49826a95cb4dfbb3f8d9bfa170c01484571495b1731d3d37fe5052e923a288230c69b8c57ee16635aad63be63ef94c321ea00006db9496d3395fa47bc06d15d8e4769f6512af26d00ab83f48d1db1c17ae7a9aebb2991b58291af0b617a826d9302deb2958f287a8ae83ae8716a0f822d16cac70c47af5dfa2f406fd2f21a96d42493e369742fe74c40ea7447e6a9586bb182ed39c21c7f8c4881922e7414006efa048e9af6c7a8fdc32e53a73822c6ffc82cfe5a4d5379f26819480f47bfd66238fd978be4fdda6e07b1a94380c1d215c41f32ad6acf307bf84af97949d235af03d0ab9b78c9f88440d55d053ef8d5188059689edce975040d84d8d96cd168a58e4c42492752788208a26485a7bb3615dd05fe24b0382c6c4673521814e0ef408225015b66582cc180da1a15d86da802d37ab19f94301884f9c30458559148b89db027fb09b393103548d3bbeb0396a5d65091bdf860852dced16cb0358b153808d3587160216fa60a4685458f6d430696b31c7c17bcfb86cdc595ef91fa1e48e4f421b259c61cb5f07366d8f317cfe0f90644a417c129f599cb793b18c900740a736c6f965ae0c82e8007d136bb137458167ff4c03585e7ee98f38bdb841cda0b396ea79fbf09565873448457f27819b9862a7bb8d62e97060b6a930c0d343884a8f35b6917008e0531ab747203706efdb9e796a44c194188a6ea28bb16384300375855a41a9865c2dddec9eab00ca0656c8ba4048a149c6d7143dd70e4ddd39688cb08e12b6c9c6587a6966a1c4d0c0454ab83795a4a719b5e8e8ac984728e139bfae30135627566cc986f8b1a10be2ff5a08652fca0b522c49e762002692ec1c84ff489773a0c5247dec16fc91236d6717e10d8df82c70a415a358d179cc3a2502943ac78d7964ae23809be2b84ebc30ecf3248ca34fa51909d84fb253185a360df3e453fa926568e1265e57288e54d6786af914f4aa07bc0477812c819a41f2b5add075d914f35942dc59114ee50f1ff09a38da273a90453a0665c3771db4ce4c4151a6cb5f60d064628818223734e7deb20f743e296bfa0f91e606d9cf41d5722219eef7e83b20abd12825ae3a363bd2fcbc35cf91e50ba431c4344aeb77440b24b2445a99524829f7daeb3cd64d38799a229ac792981f014c8987101ba2e44734609190817de801a446ba2c80ff7774d52de628162c90e21e01276a0159c8978964e8dca8754a11c9548d2ae98d452b4cf0a32d7adc2a157a12cc62dc309ed44379d00b58e98d823146e014560e10100ed64e0d19d5ef2979e9269eee04782336530eb2852a85e10fb048c93fceccbf279220d2e3d1b8f7c912ff9ba7d23d4bb75fb7676a7123bae6a03e95f90120fe6b8266f5ee70a98070772cafb507a1337f6d91f920b77cfbc25d3d11572f76174a08198012868ef6596b6c1e78a1d69e979d3c9e6946104d6b6dfe9d7c440076e729f1f1b2895d261b3e8d18a7852b84890f895e06e2b2c96acc43edc3f8ced10374f60355ed9e5f74d13346bca540d854782ae207363653f05bd2cdf1be7b1667ed1cfebe4012dc845f7171f4c0678b4653c9e399a662aadc681ae03aa3e91ae979b091d1f7dd8cc56ac97fc0a81ddfea4c3a46f4c5acbc0c6526c62717167f06a2e2d50e79621967539f39cc3a0ff052d2fd5306181a8bcfc5cf4e1099079602c371957ed0805547d4de6eb89c5013575539e0c56d8d5a05fe30a4403edef8a01b2370cdee658ad7e40117ba6dcd053485081c1a2ee9a5e7d5e461e7fdb068fb253b40e3e410b014b9d6b7af9f5091a82c1e0fd1abae87c650da1c372875a2dd87d53232130a9bf86974f9f41231818de5dab0bce47d6303c2ceea8a9a5d93735100a967ad778f93732c638fd363ce2ae227af0044fac60cd21cde5fed55cc569b2aeafe397da4f812b55c73d9c0bd1f9d10c4cff54f0b84bfe1cde348f9abd18807ac3dd4fb6102eb638ded3a3194e8c5c6be5a9902492f6be9ff564bef6349a772c5c9443da2439f76bfbb922e5a9eda5567c0ad62d58652523963825ceb569fc98177617c6bcbf70b39e11256914e16ff3eda85bfbe973a627b7601740b003b7a7d3596d0acef5bd4f55f04d639a1df3d3067f6c0d96ac981b63345b7ca7f8160d11d0b49df4b85cdf840a34e33ad1b2ddfd047650af550cd54dc8d456e9c3bf43f16420a3f032bb9e8d52abf1604d26e15e2c4d37f57af08bb4f02528472a9907c77b8e9be5bd3fb00b6b314a6964ca47eeba3e64b7a83fa87ee07cdc98036cffe4f6fd608623155eefd2c840cf3dee971a92f6facf4672806d78ed58fb7fb8fd4f026e1bf5508d8a6bc244d1307f0b7bd290bebdb2b656bace8beb75296ddf609f2bb80080f504a0823b3ecde05aeee5244d00349008b723930700c086b5db9bac176d1059c0d5638c8ab662e751e1b072c87883980cacd4b3b9a2faac9fd73c6224a4d55f2f2d2cdbd5c4084072e32ee86043ae99dd61553fbb2b428d0bc67d1ef30af1fe43a63ded16a156ecae98697a0107a0a2b24f4e0790b58892da1c9e6a573d8b7dbf52ee87d097afef1ae9f573b91e28b63e7d5a31f0a051b0ff27d89fd79a063d757a5443bc5ee3e1a9aeb93496ea943c00c8851eb96aa085ec48b941c64e8dc66c75d7457304ab3df75b5e106f318eca6fb8691bc7361a1736675e25e42780e48b4eb360a0d1640d7c1305d4fed1f2742c0f8510fcd5138a6e00b3ff5de598b4e1e00a82074e4c0a6508646bc7471ed60122222d6cd3dbd0b4efb0aa73503510b3e91499983c68b4d88b09aa01140bb553d3f2c50a501f72aa66c4d6054b4a2fa7f4e5527bf6874521696412692043ddec81595b4448040a6db4a8e3f849af0f22b81b28c63821f32495de08627329385972c34640f3eb913958fd9f9c7fbe1133b95350a669bbb5d21efee8053308a054d414f05e902bad0d1783f5897e6c9b2df389031b70bca6d03d9f830d42ab98d5a8b2b04b081dd0d285de9fdb7938ee8e876f9dae8b1996333b71b455b450336c096c52c38ea9389e7b52350e6a7dbbada4c950cc16eee21f24bc808a3e0d76e00ce0151ab88395784d641598bd439c584e1631bf17944a3afa30d75bd9f0eda8b8bef442b36387388e266c3cd61494c72052f87fb279a1e85aef347ca0a5daa20d83d43685e8ff53ad8d636d6b9114c14d555cdc8b85fe928af8a647c60a7b2dd7cd478b9b2e52d878f0a244490028440133210ca05ca846a511886e4a111808598037370f8a5b3a5ddb5442ea4314899bf8d1f1f54799933c4858a56ccbe05dc6fcc11d80227c82d535a6a9d00483a24efd3cd176429ae3193dc1eed44f1b01263ed090881464c713061670b78313e65625e632e09840f4cae4539bd630b5e175436773c8c21b88e8142f850714770bf4737181bf477bfe527d23ff06a11827e0e703ba6d320115a588371055d3735e40d92475f04d448c0932dfa4d81184f6c7e97e247b76c76c7a08e81fbbba53e4f922b763b68dfefe0c163897008c24c9ad4a6d0e80937b82aaa3663253d56a7e8bd248f2a73b408557a407f75bd373f5ef03678baae75ed6bd3bcc6b59b22ed0856a8746592c6acd4c8bcac2e8f691776e9e64ac8ef4006ffa81f7bb62f358716e129e82c0e9c1ebe09f3f784ffd5a01bb841b46d387974f7116cc984fb2f6dcec74da9dfc75d001a865882ab2d2fe92f4f4d2440348825e2644ff1fd5ae53ecfb9925dcb9fb9ad4414982a9937984068f79a27ca5013497e8558743f5c907247417fc4171c50bab408a06039759529bd47be49b269122dda0eccf6f80a7c1f6f866efc6c00d42e4256c8497aed102a1a7ae8a05aeb2efa0b9b5ab2abeb602379e5a126e74897e1c498d4581c9fbb6c791c78767069d5196dfbdf2fa8bf9d6675089f3cf8c07e6952103f91c3d36ddd542a3b11e01614d1adfaa3d10a8ca0c689c56d4f27045f12df2e6e38ae9889d10023ce2ff7ef002536a0cb60ca5471144ada1203f1654d374b741f213e0cc93402a2afb5e34ddacfa13d62661572b5cef8d467bacce6d7f707470fc8145527e987c171f1eed58954d57d7a82525883612bc9d30b9122dfd6fa50f1b950e0e80cf26c3a4046a78ece880e9077bb53f1debe2219181e129036f463aed9746c80440f4897a6ba191e275abdecf39253fa0d10692efb4d8baaa2671de19e752784e508ca4b17b50b507b3d730fba8ba68b39b76469f4fd853fcc83f55cf3f90f008330fda6d277345f599b6fdd1fdf7810b0a3eb7b54b9620d115b281819c85246461a7c608d376773bfd3d0c074bff481feefcdd8fce6fe6056ce869fae8420682e049d01387a876807467c84d8564fd1025daf5ce6ab05ec5005f8975048c447232a0306d318f2d399e14322818adb4439ddbe6dc3e402cf1cbe50e3990d56c377a90475745fdf06c25d3e7088c14ec3f83a7dda5dc4f81dbd21cbfaec7c2e218a674f9cc06cd23817488e2e0d2958520e9000306516f136d7aadf6a8aadd1b662cdb7e9b2b19b0024910f5817717900fdeefd398364133eedabae4d27d1c42edcab3c0f53d7931fb4cfe381a8088516f05ee5768fc2f6c257208548c7f10b21b711968043c5f86615d82f4f50a445d028a039a6b5a40ca59261dedab0798c2150cf529856726b86e126fd9996549793e85fc2e9ac0f6d696134080d7addeb0ced535f25a7d338cd1ef80ea16d47b9aa2ceb5edcaf32b4d56617e0940d8cbc3310e7c808f36d972efbda594724b9976fb07860607064a9adc44e51802e54949958f129419a834513844d5d074a413d2c5c50b4e9ba81b3531543bb28880420c54b058516108113019641033044ad666d5c30616b84220d30547ca8f142413ee065a17a594564da2ed7a94de1c3c6e649bb1e4c58c286a78b839d4748872a7784128716e188ee1caea18d359209bb9b0c4052315c3a822d541c4db2e77cd6899c192441b8c2aee9801762aaca6b82d355083aba839af683d7da0065a5d20c03b5a341d4a3c1a76549459da66a11c7fb163e9bb5c68258ad0b1d283983a604e556b8e74d941a60c1c1b4e6445c6500d3932a4c80e3e7851400b061f7072ccc8a2b145080a2522409be1438ad3901848504a6285aa8d16ae2b1a0e2e10012322bbd036a91752a20a6126285505d4607a2e7ea0d56a2950a38728466458f2050c129d1f4194a029b3c523cabd5298814cd69b311068ea210e1a1d4e40b880a5cc89138ef874130e0dce13a594524aed055857b38bf3ea9a72e88609646aa4b9d2c149033e64a141070d1925512cfc30c45efd30d3596bad0f5b945a6badb54f328c89f31bb62cd89189e20aca45356f4d9235a754c9dba9d8aab14035c342e109051f78e61790189a2d43656df725ce85f29485ca5a6ba726d166adb596d381878da85a6bad24d0bab7d6dada24daaeb5560c3f8e8690cd12362290215d5ef8c10911119eb0a161466c5438528384263ef4786185587bc1b554562a54811a704f6adca0934754134a29a555c50d0930614dd19a12f6c446c60e636280f24215902c879a4b535e03dec8a162a3c60731236c5d749ee28899f2c2940b5657b074ad416c0dacfa31a9aa22658b3e5de05f3c4892e608992c136e68a9606263052866d4a819c181ec908585053a478670c911536b63858e1c3522bce0b909be013442a64ca1a1a38a8892147af00213668c0c4fb384ac39b9acb596d64569016e9001072e24fcb8b1e3c59e6918ee16382e300141c79429535f2ffc47130a6620aded429fd4625326e440068c1b302bec9065c710333474a090a52bbc92e5071f5aa6ba6461199628958998d1b3e46acac40a6a40f524bf1f2bf4643085290626910958c8e5ca52bd22f5233ae5ed07ab1180d812a1498e1f6460fda8ea5ac23564a92a022f61ebb1a56628089114e0fcf0444b102e3ed4c9814a182c565a585c24bc0712d14d959b2b37596eb6dcd4dc74b901932064794f9624786bb8a22aacb6e494d7010333e0be90db384f82f03542b6e66b4d98d4814507960ead998d2a6e8c0a1ab38738387471d3472985207608c32aa18e923452d8c0a0830f2d526a4a0843c4a3d65a6b9368bb9793a3a5ab1c33b53a199144db92ee8553941975aa5241f015a2a2d07c52f0f9e9a41334759870a9b3438809127881053a5eb4847ce192b95347ab72920174221a02a7235350763029c262cd142eac223e9abc20a604091760a14c9d178e00a1c2030d50605041cacb54952fa775545ea2209941b5c391365978a06136a29c80c089073466c4bca03bfc04dac603aceb28f014c31c356f9eb8f0f08387ae3f4cd8512242264a13166e00e385c37590a864c2385b0e2603389961e98a9a30da119a030b06599cb4d15204051a435ed81c57cd094415ccc8e14390375ada3051923a13020a55c280f968c242a3048e2b9b80599998a5562f0c52b4aa686189f3c175165cc599f30a0c609d055555346b6b66209b5d512ace3009f484298f078c465d7489a38424c895b018b8d818f36506323b5e3c74a276b8f2f5840cd80c3e82044a56b054c8e104adae3663605892f5e582901a6136cc50739b2e9bab8d8bf605861a727061d2fa72e2924307c044030427375260e18cdf00d7f44c3b8644c88429871f33c26c40b3e540a506b5428d2e2d3374889824112a6f462b3e52abf547932b5e50b482c50a96952a75b665eb29d42bcdf8c2c34d901a3b4c29f3012f265d62f042abf2a48586ec22dc1e4f3c500e031f7494ac4043628403233d8c6972da020488a8eb210c612d4928a77360d22189e754a785206a9430a3c80e4474b218b121448c8e175e50ae3a9a521b5bb5d60ad6754b71745d0262cc096a830f994f8e17b66426688eb1f2e0d8363824d1d6a30d9438b31750176c70b2e50c08bc4001c143831d2bf018d3431d1374f01a52d65afb62298ad22a83b60f822d5191ba22beac96acc00cc6d45a6bbd5c172b567670996383141c9cc042d02684119ab45027cb0d0701c94e5547c1b826ae46d4034010a2c5454acd0c0f1b66a88d1aaee0cc0c513cbc40434a98d398d5cfa987284c4e4b6ca06d3a8889c12a0c952c6ec2bc19f21914d4ab46d258ea5ed060121d80264acc131e39d054b1a29155820b6bac3859b3c3070a2f7ce952fa9b1aa65a6b7592aab5670d551a2d285521b811c309659a6c8c80c4c796901f7588586b2dd524daae0715640a9928a71aacccd952d384c8569c245f7e0013fba1164110d38232530a4733d8a29a734a9c2e032a51f4de4ec519a62bc4e1504da2edaa99d66e99535b9832d19b0d3841090e67a4c8411264031f4c765812f5440a173ad2da31336badb5374049a28dbab86166d5c8a1e1a910f309c15a681877ca506a1422c91398a750360353a3974b160635e812e552c5955aec461819ea98c0a500c05310535d5a689876284989f3254c0d210409628915162223e6f8d45a6bad95009787301ee67cd570b243c65a7bc19c5a457e0398ca4009f68a9aef82843a418ef88025e50d18305349b8a401424a0e12422028a5b4098cb3f5ab3e36f8d459d2b572ba4797053f42c094524ac1cbe609141ada15161515be34417684a9c16107352a803340f9e4c8e19a7832504a29d324daee94a6cf05f6e91b01c1d908c89e512abb2995a62f6b4640aa11947825628957e29511103f517d6a3f3e024c266595a471a1876badf4472459bf5a69a59ba4f629ce5bd234fd24a9fdcb48fef2f163fcd5ffbefa5bd2a4e71dc308f0b4f40ff151ecf1737285f4af9bae2fdd5ffa630cc3f1c8c9a13ac6fef6bcc458be649238b0b423924cbef89f946f650fbd2b163312f8322b75780bfc5594f2c7cafe0794b49cb7a8b778b36b19f83204c86a16da79faf865762159cca2e7e9d940be2f8049aec05f5fe2f016d6440e714b1afd2d691a7f6cc4f848f69e917cdc8effc7c79f3e96f6f1917c249b65ef49e92febc95be4e9308c4f56c5c69dd1480e710f8e2ee410f72c447f8937f8b4f41187967ff151cc5f1cbf97a3f77120b518e3ec5f7fd3c75682b12c996611de3794ef39c64c23ddaff74310016116eac0ec42fe2c623189b81745fc9a1b4de41063ccb4ff8e31d37fc1b72cf07352c698e92a7580ffbd64923abcc5a6bfaf18c62769230b23cb42732c3457b3d4e127e896a537134a3ddef35545bfdeacb84c7599a351e8cdaa0b96e612a505a037ab2ba79a0675ecafac6690d216e8cd0a0b4c5b6155e921bd59613d692bac2cfd69e79ea8f85bf7df6f7afbfb81de83bfc915e06feec999345d923597793b4680a71de3a3a0f79e932be4a6a74bf9dc138861486ffc308c993d983dbf7fe7f7d087c7a09ffdf87ccfeffcf779c63ffd3d7f6fcaf7fcbdf92ee68cfd07da3711ee528ac0722f00e72d75ec49e42d7ddcdc9396fe9ee5c7b6678fbd4baab7ccbb2ac9f8c0e7fe80d6fe9c11bdeb2721f97fa0e5b8e70653dbfa783ece9b1ce2a0f4ae3903536fd7362371780122a4b6bf93e4be7a7b79734fba7e92d4d2ebf1bc49279d54becf1eafe7b7acd57bbddfb622cfc3ae67bfefcf6fd16712d198fc69edcb2c34e2eb7b8f62167950e243fc038d1f0abd6c8887830dde391ad7c35bc89f589ac82126492d9fb4f741630c1fc55e6624f9411fc6c6edde7b308948fcbe5ae8375924f463fecf5f22ef2be797f0269eb107bda78f624a4f7e89bc652d049af2eb87f8ae824639c28e169043f45988d2fdc4e67a1c05c9173182ef63fd3e68dcb4d0b83f2873343954bf08c524a21f22ef3bcbfb02e52dfee42d8679cf7cf29ec9f2fe9ebc5ff3e43db493f79028da8b4577779b91ee7b2ffaf016536ed9a565de49dc176462474c3ef832c8c40e3189ea5846c26fdf03ddf33c0eece37caf286e45db4624dfdf31079ef8386f4fa2fabe9885baaf6f1fc52cca4fdf03faf4b7bd6d49f0fbf3ef9989df62042f4176da24a2bf3f827b4d8862cedb24da33bdb79af6be7e10c769fce16f59d3369bc821ee24aaf1d707bfe2237f249cb73fc50b00b5bfd3ece3a79eb70694b4f7b1076dde499cf66a4e9bcd448d37a27d35ce3b896aefeb7334b9c287b7d834f81c8601724ffa1bbdd18309c821fa7764215e39e49fb699f3e1276a76113db8172a58d8a49973c2539a8d4d0835e870a262e58b959413766a7370a881030e6e8b93252323c749b4d65e30a7562d1f4a297d53d5bdb9eade6475dd054836b0383a66383223c7902a62b4f8f0150228348ec0c0029147f148d8b2d6daaae276792a2433e132c606292a3f56b812f5248217212cd02027085d1f5cc18d48a920c3fc511a4104a722468840e100460125549dc93242102c2456379080d24555455d895e06a27c336b523baac7931b458224b9e181385ec63c2181014c083810e992f89312617e10534b22c5640689197488a040a6080f325aa64c611e94f66850228b91223310d19105c56683106aa0e1050e159013aab2789c8c10e705fb5d35950a37a4ab488d5a35d0a1324d6e049a5804870971c2dab0e14284e386a6385fbeb4e4b8d2d584a784aeb320005aea9a1a6b70c8239f9b2c20294d756a584342121b2dd4b092e2550385adaa15463089d1205e28e556704a9eb0b6fccd96b5b684d5cf108f3389b6dbc254214a280f630290b01f5670b374e4ca8f5a9432527208f3254ea38ac6552c0a93f765e9821a644d2ddd99d41c24354431555c2713219b8970a126134175dc9a9d4576cc13a4912d2f1a4cd9072607314dd0c8b932c649059ae8c015029034522564910a80ae4aa43610a48c1c6c4355e776e5dca60238a98a4e452856166a0f58528b520d9000822a3d5a786363e9c59ee930203c614b68dc5026cc11af31584a78e149383003b16ed9c0c27080769b928957ea765fe686386272d8788106101b2364a103040e0c6aa4a4d11509a594365d8197524ae90c3184609c08890d58d83c45e9f00448085ed2acb13143095a5552b5d6ca3489b6bbb509efc1ac134cf03f9bd57adf524081ee5e94cda9bbb73c2377dffeceb86d15385217c6de69b3c83722fffadbb662db86f6500be35408a99d285d3bed79c7a0606f67b4fdee392b6f11bb1f3efe0ef07356f82b8681392ce0c8396df41e72a8be37fa93ae4ed3f566ceca4fd89a91bc4a8493a0f335e597acb28181f2c12dabec4d4bd3044822fa337b15ed492af3c7e514952a2086e1deccdb2cda767ecf3e3bfe3c9ed9cef7e67bde4baaf99e9d5b8839dd437838857e5aa1396e5945fbcf99dd3352f8b1f73c29abdcf547a409fa145595cf10928ab7b0a094557c3603a9e73fff7370f6fbcedef3a617c5e7f79d3e472f6f8fa23d0b057d7def7f16b99844f4453c96f1cce9537285f7f22595ac226515edfd8ffd99debb00fa4d0209bd88f7a61481f1d17ca4f92fa76311797b1410945f3fa38f2ee410fda0b10072887e381e606649c54f50e9f9161ffdbcfd3afa8718c19f63fdfe67dcf40c68dce0cfb8f9147d9caf28a9b80d251579bdf06b46f2dec64030f41cf462797b1449c586797b14ff9f451eac785d7513b069699b39cea368f0eb46df0349455249e2a2d4241559c54501aaaa249599cfb2c8ee4cb76466dda84eaaba87ef6eef922a6bcce58dea92744bac9459a137c61e1ced6360166dd6001b569231ebeca83c70ce1b85a7f00465207ecffb9fbca55777f7f0d7ea8edf9b54ca4e76547a775f397ce77752dd94c519a9e297f3bbfa6eed27c96e89ee7edb8a38b011d1066c4518980cd83090bdcd3d537e67fdadf5f949d0972411ed92f8887f5a5925b76c44f469ad5fab7df99d949c7327c9dd2d89e123199396674efdd86e3e9004e796592565aedf4d499bbf0cd4fd4f9e535f77a64b22b37c46a925b7e4109559dd775247b1f7be1b3d7c70c43de306f5f6a52d4a0e616016c92a0e6c4552b6a4a99455b36856c92d5bd1dc72460445d11dec926c353d7fc7d86addfdfabb4adc65a4fb31c08bf3cdfb1a9136774962f7ccf6aa59e44b73cb56e4226c44747b0d9459b3080393887e97046f35ed1ffbfa1ff8fb1ad1df872303b60af0df580e5d846ddbf2a559d4808d086f595b6d7b4dd3c74097c45bb8fd307749fc44c5d608fd1b255724f9be6e8967479925b56496ccea92cc1057a057711c28625fadf40bbf8f7ea1e3f0a6f0fbf2761cdc177e1ffee7e0f68da133398ecd811af426f1a57b93e3b09bf85bf872dca2920cbb3993f5a7704402776cde4adabedcc277a6d069a1ddc948e1833cdee42decd71d29653cb2bca50e1f87aef96e367c309460f6a6b066219e9f4562cfe3facee4381c87fe5e04c507c11e973dbf390dbef79cf49e8cbd8a387ad3f38c1184e3d07b9333893ba2377dd9bf2f1c37a7a9b86fec8261ecc35816eac459f4d37a5390891c8e7f73da7ef85c581fe7cd696ff2266f721c1fc1bf37a1d8711e1a14d4fc92b5d935bfbeb8ee15c5d96c7a49599b5ef30b4ad666979c60d36b7e69d9e35f3140ef37579d7166d7049b5fd36b7ec500b9bec0e935bbe6d7fc9231402ea8e935bd6697bd5cd38beb2b0618038c01c600b9a6d7f48a01c600b9a6d7f48a01724daff935bd78a4119611940ff8464f31f97536bb9e8d80e0239e2a811841c9151846f53c0cc3bfee6563ecebd8fd37f27ccfe87dadf46912d5af5fadb2fe37c5a34b9fbefc24bf6f7e9fac7d6ff4f425c93922e1ade7fbde5dd666dee450d4d723ab5bfac8b2cf3682d2f5a5cc154b59a594723e7e59b3d7d5f7aebe1b49e9dd7d924492ff81aea3fcfceb368ad2bbf3aaecf9be9b6e04a5bbe73ccff3bc9991eacb1532cff3bcf77bb7222f6b12590e6a16f2f9ee3d512afc097aa05abfd69735b9c27b7fa3276f51dfeb4e92db084a7bcf23e2231efc311ecf5afb3628ef59086beb773c9eec1efcd0b3f7587a6caccfd36d6f04c45b482f834079cfdceb771fe67d2d88618046587514afe4907d9f51c49243f6e72866c921fb2cc46a65578d9e8e78fefb6e94ef62cac6d8f78cf8797864cdfea654dabe97358b44a649647fdf2d7a5e96b6ff8e8fae8ebd1d3d3091691689529388fecccb7b268a3233ed8ca1e50aad1110283dbffbf23797fbddb946402cde1e98a62f4acd224a3589e8cf66a29494a66f04240685d2fe964b637b2d7e4b9ff4e6b48dc5a0505cba3ea50abff3df376e51d626cd7e7b4649dfaefb0cfa696f28a793b7b03f437ce1ec5dce660f3d7d7a76f2ef396538a7928cf95ffd6694def59b1cfebeefe57c9af3abbfc3d943d7bfd65afc09e524a971469a1fe624a93f5b64ed6cce8c67eff3bf203bb350900b21112366de73daff7ed2bcc5fc6fce4da287b60f24bf9f19697ef8591ed9cf4f27fb91c8d6e22f6f07bfa7df8fc822f297771215ca184f2ce1389de61d0f307f6f5573d2b4cf0f31e29f8db1f7b1820f0434b3acfddcee45f9fd74badbb6c5ef33d2f7f643ff6e0e3fb1f35c8c17dfd085dda8fea6d3f7619e4e7ea2369dbc058681670f1705984eb52007ca41d68d4bc5f6a1d7755d47bbdafd76bb4e4aefd64a9f7afffd065568fadfcd495223f906f3fdadfb72924c21ddc63a14dea2f354600478fe317c04faa6bb2d858a10c3703972184647bf4f5492f1010ab955dd11e9abb5767f1f85b7a87f59e8ddf39dbcff895fe577954754a13b79eb9753dcceabb5be778fa2937254a177cfd3df2ab4f7e0f7d8fb14413d5982f8a83e12f8e10580ba7e0a0d781886b771a5e0ee1dc1d9e123f0bba7a35747ea29629b9629fc44f89f0db3d07dfade83e3a653e0b18239c59753f809fa9ef7293c15dc732944d1633d7af8943d2c1790d7fdf61f681fb43d53367d66eca7fcf93d79765efc9977d20cf20e3c8d73f5b0331c837e9b5d2519b603b9a2661dec4ea139fd76b915ba26ae1097f6399b79c700edf439e79c734e3b7d8e5b5492511d6c72d8dadaf52e8b4dfc76aeeb5cd65a69adb514636bad4d9a775b11bfab1ef19b9228f172c3e07fbe6f188c18e49f3ec79d348522f897a003afc97b9deb3a97b6a1bb95e0434c00d809ce69012081ece169fc448d608c60e83d8dd7f40c4d8ce0e791e7c771e77f14bfc4f8f324c6d88f187d5ec4287ba1b1e767387e1f14d4010d9181dc33d0ed1cc86f46ea5e02791ab97181dfbddb5634019891e45bec17e7ed13c8ec69fc04d0dbec235016f2442abf7a369143fcf1a1da5f56b57fcfb86d15f0ec8cbe55e02f8e72abc03f36725b052edf3ed2c5f69fd6bfef69bc85c5d9d374e06940d0b9e4f87288be374670a9a79960dc22a059ce68a104695f6d4e6ddf196bbf1af5a4f4c7d3fbd07c35b9c29b1f86e181ffe1393d2f8cc9335e2cfcd078b1d0c7e7ab698fe79bbfddf3d05d498657ffbef4ae3f2249ef39ec7967bc85f771a1f116f32bf6be9aae6f6db6d6e2cf419edfce64f1bda1e765a11eefbf33de9cfbab69fbe018c347e17b460a43bb33a3642e7fb097b783f2674679d23d1f59d487615890f6a1914f3da38492511f9aef8c96e0cfd8685f8ef57b10d43b2378c5f0be8bd2c30f8dcf0a862f3106318831fed0604e3b93d340f9348bee24a2ffa1c11ffbed4cda82bf71f8749ba3778c6d8ef69874fdfba1f9d0f889fa168379731f1a0cc37e35f924a1e4937cfad04cf1f8cf5598e5c26258aa74f5c13bcf711c97b7bd7ff3b6d902fd7d4eaeb0d63e8745ae701876e4300cff3ef942e3cedb513e3802dd0f113442847d122fb10162798bba7ade332eefd736ef0974e538251931cb7d8ccbb2e07fa039d97f4a3a3676c0555dd9980c14b2320ee4844a70e3e6b0684b228bc8fbe98cc87bf6260805f7dbc6715cb61fdb1c67392e9691a6b57973dcb845cd4925191f7440735273597acb4f9248dc7fa02d37efedc03fb6b9abcbbdbfbc9f378745cb1f1a43eca0d0f7fdfefcfb7766a4df49731be335b2e85cbdd9aa74fdbdadd19785d6a108c524aabf371bf4fd6dc34068c7a0e0eea419e34204710072f36d1612f1f2ef3b6dc47fbfcd2e14c79f6dc0bd7dfb1dc815f7fdb92a6f613f16e3b06c0e8bbe0f045aa00fefecc7bc2710ff7389da3d8911991b7139c9337249f6313ee21e29c6d9e76ee6aceccfec8bf643fb9dcd23e47f5f18d0e8a38b18bdc7e84f72a83e0bd172d25669fb161f013df872e4dec5141a773e68ecf91023cfcb46d9034d208efbc371cfba718b2310973b904328eadfd8ef99fc3d81de28f4f6db5f3bfabce3a3b93389ead7f7d913fcccfb67b1bc67d5e77f46a1efc1dfb4ff761ff7ce7ffb58798b33974bfc9a85fd1ced439afbed35b4674b81c6bf6350e01f9b1a6724efef7b2ce63f2397af5c317d7c64019739a864ec975639a814924a0000800033170000300c088784a3619e2a52f70114800e61a64e5650300e462381380a8310860118064010000010046118848148886422d706354100b56fda9cad943b9dd2ba51aaffe238b396023bf1e972595241ea5c5a2d85d9498d17d8c03928179b97993496fae4717d50515ea91341d518bd63a552773a0fa2ef1e9c3754a54d509bcb124cd3b0ab4042ed6cd26d9675cc00baac2258b728f894a315d3a656cfe6f80d87f047512dbf47675d59047472d96d3425e329c580b6e118c0de88b08ac2f46d9f00fdac2387fbddfd7abca11a21eb204a3c42098d19091bd151972ec243652cbe94901d447245ce83b04b016152bc0017ce5730af119770804e37d9c33e200c2f11da2e86b91e0b903d099296c7c05af7bae158f57cd0b432476690bdc16485948651b7ff44e539adbcbd852314627d7f9e5ac15600b890ee757e9c507d9eeabee3d8a8bc982be08440bd26a91382cec8b20bf3ed2220872cc738623ddb2e89e335349dfbb11782e4adfe269a3af3b816b40d0286dbc1cddccdd96b332f971de8ffd01962ef4585470f8663a390957ea3b0023715c8ec6c841cb5668a703c1831c72de64d04ea6372001d992ec10dd8d08c54237718da33b75009557f05ff901acbbc47fdd0ad53796318fcf79962983cd480625be6510743f8f060282692a0960c2134768d06da3e139ec172d1b7907fab9dd6cea0e86630d66380b6e9df5bf96b3b6b67f065fabc4ee31c163a73b960471f42b72fba9195e7fb7c1b5c6a92f457603c406738a61373301e1ffe131400153162be9b5a926ea4e68d1d29f52562b78b53a859062cb1e32afc95258e5b4b388552b4a07b0fc901b69aad366bdd1fecdee242e062515d6321a5396ee24b8d510c6c4d13d645caef8c63592be35cd2698e7d07942e729e2715b87480f8f4ddd58d0a43d3ac9b8e46306f747e636cf6a8b5207d4982f222e82894379bcd7c34d1f33c8e79c73eb99c26d7838b28fd76761f54e379c08bc7bf0bf417d900701e0fdc448ee0916d0a22e40e64ec6ae535bb21b8dff1bbfe462bc72ba6c29c7cb60f9840522236987bdb3c8b79065a3c08fc19a6e49bd847e070c6c388113a71cf05809ee1556a00d97859f790783b95a1a14b0f04352fde3c54ec6c919c205eef409467219cedf40a21405c587e12b8cb17d6e4484a464a58e4275442f04a21ce4d1eb286b0ea336c9658813827a8405abbc7bb31dcfccd15a4b91c7c868f305080246d6249822011de5c6fa11e6ef06f2a50380cff27a4be94d463ce35691fe9b8dc949515ceba20f634a8bc778a4d89454a12fde5be5cfe311f74021fb5da9003c4523f640ff803998a231e25e62e1ecf8a014820805ace81c21731dbdb5d69b9b8336c32f60e54a50cf17606e0b5c6021a4887946ca3e1ff27740a2476428cb7e58027d60a642c3afd2b62b8ad4469e0ee390f0a03a851c5fabd56266f35a0fbf847c44a1d6a1be17aabbc2b63575b30b2e9070a23f98523fa77a04a0214827dca641059d525f0e46538d4babf717d3089fce0a5f50d68ae0376070ba921906ae00a759d1d7f0f17096a54b3941f49c704ab850524f0b324de4639a331a6d166fcfb7f7c111929b84650d69e6d97ac05313feba0c747497001e118528c88bb00c144b18a36a9c2a586a89ecca3d345972f354d3a6c1ea61d5924605c33b674c5fa9b6bba54e52e471f614b08d6502d9c50fdc281fb91122265bc753b9cd1c3fa867c0607e3643f9ca9677cfe915dce5f2a3f42ab26bfaf7e21453781e9f2ef8638b924f5abb5379386b2c499d5c037bb5d1a132026e763dfb44092cc2517bf19de9a82574da705d87bd37c86472d113111702c81dbd0f3b3ba5fd9db90c4975e759c6f4359724c042a13535f73955c4a6649fe2be31206370739e01b4e3bbc3870d3f4e78fd04c4c7462b568871f4a7944dbb11d137a993d07712521a0fda10a178d5e98e9c805c35e518187e58a29f2e75298efe1391568582e82a2a2daa81268924f928a3bf3483f0101de2ca9f535f4720d73296daac2da957447935d36c3c7d290f47223b46505f09fee630a15347924266fe160a514d034329822b0e1926eea5ed9d69085e4f770ad4dd2a86c3aa6279f95308ed19efe092be22eb30c08bd4149da3169e227d3cedb3847b234bb304839975147bfc962a00cb0b2db7a669c7b266fac0422ee11d69631ec0d7b2bc5fe10224b47c901c65cb40be4feb766d663bc4f14e8675cab8d27a3cd64f3ac31865fb262d197194735fe2b8e16e83b0ab999ced9c4fea1717b0ed4d14a82ac9a204d44100c6b13fdf818847597ab525889545fe3630166f088f67ea1dc8785bd0d0b780e642692ae3c712b6007f6f265b15cc234c1ac3e6e17881bad9b60c3c024801c5b37add7ced956234ef5cbe2e66498e51606a5d4e4a52e6e568c40f0b3c6f4bcc56c8bc91519bf0edaaf542357e3b069e4d44a4d233e78d273a1530c1ba77f2b5f97de0817f68459379d46901ac80dd3c7acbf4a62dc322c3c6f117d3a7d07f5e39f216b927d16b57e76cf02ecf30fba5b3d1cbead55ad982864149fe6c2264d25cfad5a91cef55a41cbdddbef4a90cb859535658378e7cc554bf49a7ca1c62fc5ec2bc95eb33fbc6c36ac60c474062695e2719079c413a83ab80e4e0890820796ef9693af21a41b8192158813cf23057d4cf0800b59dba19e59f203745461d814a80c45fef338357b5b09912296d61b173e1dad6df14a64d68184a6fd2b3f9d93e1c5c90c10e81c7b287520970b8c9237d29309806d52a42456b3e31e3d9bf511730fad6d658f053d4a256df264af575d803c1e68033db8749731f9e9245de263c2ca9ca19a85b0fae669c33b37a41f3fb4729bd0e2507c10550bf377e57ed926616c682d95615b8afb7b9e14f808820f1930810b3e87c97622d7fff319fc6a40b6633f419f51f03e41b61b1a5648ce87dca6dde8d453c0b64b4395fa015165ebf134e2ff55f2a7b5ae08a8d5a09c596ef5acd9bf41b4e0e750275f3dcb448b7893da0aab9f0fe8787aea03cbf05990a15a7f6b6d72752d6a95705a7ab3e9163736b3a8f5b7ff624bf933d7d822cba129c665a28527fe8a66bab1242af05b26e38eaefe321eb9d4e907de3a11b55cf985fdead7ce8c4d9822b433a5b85fa772908f25fd13f45c969bd7d243c27afe2970a94eb71d843625825072cba64114642ce8e486d736c99ee1ef9ea93496ff08e2bb77c19f2d1ca90db4feeaf87fbcbc7897629863ffa2a7db9790cdd18ea838390cc92422c188bacaafe3335c9117d388c86d648c988565c0ea18038f69ca5bba28ea3f24af677d12c19064cb3d0d51f38f5ef7f598088c5178af626c34da7313820cb743ae829d8fbe708497ec76b7b4597946b81d406199bc6ae5846f6d0d38be2ecded772dd0f978bb5e3260e961fc3f6f8bc624c2eae82172a8dfe617a234592d330079941299a77ced3a48c225e03086749e44791ef0fb024b8bf0f0e20bf504c6feebb4a496fa9775a468824300ab8af286640dc76ff93980ecf74428cb6b4fb579fc68c9401d480d08df70f56f93251060a459e27a5dd456081415184c987873d641403d2a544107b7296d0800d7f3b6496dbe3356c5e89364b621805d56597dc674246cd56c48a51dfbc998ba009ce4a56391a5d6246291d621637b2582765ce37b33fcd6f9f082bce2b0691cc4e0bfd106e40fba6d4b3d2d1a67f42bc7b14b811795e6f2af76c02638e369dedcefc47a04428adbaa6722f2f84089a3967446070ee6337d810eac6289fcdf034023e2acff9beb04e719c046d77482edfadf064fdc25e584bd676f8c9578d3d1dd15f5e558349a3e60132d00fd8c5ac77936a92859c8a0be2d6abfa11618e54d25ebf4858da31302f6ecee8c85f4d6e93318e5a39a37e61814649cd3fca50cb77c6c94650c570d742803e01e2bb272b7063f810e6364a9ce262cf7569a769972d4fbf0c1bd11ce6efaf0b519cf90c04590f37c49607a55295ce3edf950ce0ac5332127fb97e90a38fa5577907c482d6ce67719fb3559c48be439ccc447a40b8c7245d29dbc39674da8c2f8dbbd95009dc68045aa3bcb60cddc5345b40f30342e40e47c53445818a1068e0c79867a8e3423d946a6d856168659e474f13046734eb6a98dfc29256156614bce8b88e315fb882f0a2417fb2612cc8bec4e00a1a0ab46fd194bd4712c77a535bf60ba43ad6003ed93ce2f3ab2333ccb3f0c6c7d2f7f899a867239a8c13860d552870d084bbb28dfdeb899ba3720fe894351a56f0181ceb2ff91f50360236cf8fbce44bba8428db2379cbf07e02fbf71780d72d4789139dfade2a4a099f4bfaa92840b9359b1cc0a9ff1349a6829c8573e48201dc335ae5f0380bab7c298e31990b25f2d07577037b4484cc088425648175511c32081e67293ee92c7ad5c6fcab1baf3bcb6803759a9b32847ecbf006664de751d32f578f4342c3c676197d943581e5bcb28c4b6ca6ee6a5593d753f2579fe1f1ab5b0aea76b828202505a4d7c48ed31f2b2661c08b41c4fa80d08ecbf7857b32f42041e27d69a601652075fbfd88817cd8f5ff57c21fe25c2055b6c40df2ed94a1129811756449d1062f436484d15ed346420b3b87fc8265558771133b8b0db2d165bf47c0d37dc911098beda47a87369cefe514118bc08886419be11b748b213966e2fcc1d5abc68182ed576e801822e9e6b3d88d3d35dfe932c507e98dc27485e21b813d68d1a9fae01e79a7dc6b115b859ee1f24923974b85611b4169b133000e4918d47e1981f66991f4234276bc3bb2804ff2a77cacb24a256c856daa8c4cd891c6f48d986d4c11ef803a593e05b5d4d98e52762c0f14c971217d03ee59368c6afa3b3c20b72b477385336cf1dfbfe7a01e9219b42c71d5ee9b0bc1994d2f76cd14181924ff0da7b89391e1f96ae852e730af924064427c45f519de3b0e252e881130ac19186052bd032946bde2791dc77220f9ab19a027ad136f0513f9a4280550fb30fe3c348d0eb80d1b53a5ef2670a53362c5ea2ce05311619c0c38a6160c9c30560d5ff99b9cc1cc86729108624053135e081fb0374068a65e530a2373acb575ae0612ef9b18d1413097e457226afa55f88b745893527d74bfb29a0f0eeef979c0a73c0996c5a4ae57e19d877fd92fd6c9f0e9a6ea3294c76516e47d879349eced8a8c809dcdab0a3b2998f6f17a910f68551810cefbd923c7ac09b381f62d4926f2340bf5b51868b3d42ac20588f63d13159e503caf8964e3f6de95b01c82ef5be0e1f812b5f16e726e7aeb437f8aef09f7eb5925bcc8444593b5cc636147d90ca46d4262bcc5f3be9b0017c0e59d58f79b36d6c9bdcaa504ed8551f4ce00ba9f306ff2c463b06c9f9ad4b8f630040d4823e7569a7bdbf07dd38d5d935f5a1e46201e94f99715b433039976f99b2e4818136b7384cac7d8bb4f3f2fc8d88a682d00fef5e8f7900fd334b886a42010367ce762e1e30294419116d41bd7593d1a0ac02effba543f17082329ad9949931e5093507b48d83ac2e2f294bfb54806e0d5f22ec9ea5fed980dc6761efb52278e6ec3bfa4496d25da072a7e5a58a7403919163a457531a15c45ed34f163f9daea50bedc0e0628f80787794a3c8d107fb6b84695d0433943cbac94e179047fec99b4475f7149c98bf0a54fa843a6c5abba5458d99d27149365eb574c22abb94fb538d1b3a7962278977893e5cd7fdce3ba3f1b14ffa98d8251aff8ebdd6adea143b576c281462fcb8f6e6caa6a8edb4d81a72d86256fd3a0b3d5c049c8ce361116644267012e6445c48c647dc7a5c9b2d007cb54476373851fdb31fa767702275315ebbf522377e2700415549603980640dd342ab65bb8e1383c14c494c73e57ffcc18e26c5114b93dc5622f6319c8933ee315fa4253b7229ed7b00fa71b2e1454f3165b67a3e5c821cd490f62fd4297a24020cfd6ced15f9a9a0558f300aa38df93ed25c80c3da730f228df2da3a55c591631e8739342253c79267504a51bbd8fa7d563a9befdb109d20b36741903b2b7c92bb79feddaac105869f8a9c58cf4373bea26eafb05585630b40a87e51dd0d7522e5c20761efeb505dd1619e4da77900d19d7a9e67e859b6b82bc025b6e0dbcca5aaf4d3135e07c79d1c8b8b5250c64bc48ea573a2ad71538e4996d194ef300b952cac69375abfbb140b497ba2cfa3d216ecd62d8d150681cc49b5866d6a17b49465409ee13d37f7b32ce79a9f99b007062fa9d5e7a9595e3bcb6760bc91dda72c5189343087144cf826a97cf4d453df901f817b76a25ba15e2182b161367080c1c94099362de8ba0e07a8cd53300d1e1ec873a20516d5b6e8c5cd56329319953bb4de4508eae3d729b7b0a308bf400cb2d27c8b14d81838b773ac5958a359aeba154aa5bc52ef8036bac05f266139f4f030737a3a3744b6f7aa4343b81c31d4ab5ecfbbf700f3e7896487fa1c7951ac8c7ea377878fb269a7b8860cae7267b2560691f1b875b3d388eca5e2c2b3a0c733fa465e66d8dc79e0cc4c0a29351a9251ece83081cc51e29b3b0dce67d2aca37c4907c4691c258dfbf34355a9772b83be7d06e022bc33696152d260e2ce86e94b5516335246aa41a55993fa3bc4760ed884eca75283dd5740bc75c376b48db1bda8262d5c131803d58f90d6a95f92e79a53b4a9cb120317710a38aeae5171d7107d58385e8acd1e114b10265ca5d935690ed9682972c0752fd25db2d1abf08b97465c4b263704c82f65331a513e98db13a01ec7dd7c6a1a026ae3a329a3cdfb20c3d1ef868652dcd0e213cc71e97f7eeb00c6df4847bc7b1730153585322e370e471f55d6f77b86353739334605c6c07b21322b92a1d11cb0dca7c6e0656ff252a7e1ea4dcae84fce5506908503a640a2c7c616724d09eab3aeb63c17bdec50d9da0e0eddab0ce53eabdbc5911d4d093c74cd2b399aab8b03e78538c8c2330d0da080c462643a9a96101901a4e5bab82d32d10fa639c643ef3c60e455d89c85c8de39a2db181462f074afdf5ce67c3888c9d9d7293a6dc1bc114bb88d43a7cbcc611144b8da818f3a5eab92a184c3ef4e98c3010a913aeb7e0af177939bc597e0a74e851e84a26cea28b3bb9dfd2e168673c713a7e6925fa230c48b98e61672cc3632001996d5abccd64df363abf474903874461898e03cd8175d40166a89395347efb2f85eea3436465347df4ed9af770306ed25e21a1ee4ce0cd9dd2e08a19c8c1f063ae643144273709fb83f4102c0d4896592b88d14776e39855051919e36f61891fe11e72ff64f94d69618c9052dd008670bc5c85963a947a5b2c38e8c506b49857b46409b4ce7557f38b1df8a250f8a37746c6818fcb3f2e727c7b9ee3da7cea18eb578c41fd464f640dfdd5c0305582d47f12889297213ea89192729d2bff1de6f46b855ea4c9deaaad7ba6934007be338d6cb6e45b53479a2e8145ad1c2faa3ead1d2c8d2d1e40091969089e556e0b38b6459ecc0b014683d0e94e3186f3461f1324c501089aca537e6a56c1b5f010a112455d9d379dc40c8776230e3f9b27f1b318169a1283f2d3b301e204cefe1270cdb8dbee0bd5cc19b12323dd01ba4439718ec95a9184d9b0e27f69a41488a7d34eec68a475bf7fff457f82af0c0bdcd0fce0c63ad83c5a39a3d0094c2057a0740b713b0f61e359b8d46da019476cdebab26e2f5591320e9fc38861a7882827e5a51c47fcaa20e4f5ba1672ea76ac3f840a209a332ef9a6f01c7314899f6b4ec8423b973d4e0332d911ab175573c27d5c2096b4e4d34bd3f33528def03e3063f90d3f8ec588f6969a6aebe84f43aad8af4b857a9be528bc445004c51b9a3b0918709dd4f47c5328c789fc28cdf9e20dcf885cd0b3443b268bdd63b68f62211474450160d3dba38b12bd186b3997529e8dc474382dad9a7dc1c110eabad4663a32b20d9f2c90111ee05252ce7beac3ef265471ade8c2d755b1dbec5881968120f81497bb3db2e85c7278d9444c9dfbb9c2ef2ffe789d8d658069fee09a23fbe1ac17b6b9eb6ca112f076e4c52088a517bde30a137edfd4e69e64843e68bba83cbcde6fda8734a536bc5d2a6d2e66314448c71cd014f9635a0e44c931618b3baff4e6389b515e5011456c45fd4603c2339d307ff4a67cbcc32bd633a345cc64330710d3b7c0d579a1ddef99339875a0b56efd002d6b38fb4f099ec2f8a59b99450dc4803b9bbf0c56b276217f7869c1655242e6df66198b242784f09a723092a24a59e1252160ab81397f1056d6a002d709d6c8af4b34e96462df1d7e28c1d6cb949dc6a4abf95e6dd27201171a69b7a634aafa52064fc22eaeec4378403e72896199fff8a6d69ea06341dce4896e6d8c1b84f311d803f88da5a79ebf8fc140787a5ee67a653f036d91627a5a25f3c3ef50c27c119cf0646e1c217bcd8efbdf4adaad4da04628d99044185c01bfe3035ac426d84b50dbf970bb6a8a5715ac5d22522eee596e309a35de7c5edd8d32cf7e9803e47fc6199d250205b2dbc0c4779645927c36838f586c6903733ed0bc74032dbad9b4f03780dcff317bda47c5dc6e7de312de2e4d7ed8ca43b740fa78b1064368127683a93f45595f8cafafa053a3c388959bef0317b742fd8f6f1cd9d72e6b9ae96b4c3ba83e6998e88265c412396f57670f64b19ce07d163d3609a35e9ca1c899a89ba0ab6f82622cd0a41f876d0e168692c10c014ee40c43a80353242b21855f37fed4b398a6aebd1e4e38adf817ecb6d4c690bed2797d1783ca50cafe20af35090de4960ad9eb9176ad5f75b44d69e8a2bf515e747bd054368c4a6c174b3f4b82ed91892c3aafc2258c8ec160c7fa598312aff756b48cfdf425a3e5145f417feb375c8a85aa721cc4e635c9183bc55deb531ee818c5baf20f5ea2f88db45418d317c2d78299c845d1deed9c88cb05b9084c1ebaeb809f5f5bde8fb724ee02c93c7e4355ab98597e14984f552f7a223717f3a7aa73597c3c0ee065605e7eccc5de1a92a5fbece4f2c3e57fd8a2a35c7f4c0c98adcd75b05eb17735e6d2d5a254cd8a193bd897cbeeaa327e01594452efc62b4527a8688908415f4ee65a86a5460332d400a7d2f7a866eec174a3ca28f754c8c774508ee90e94977984136f522264d180d53b31c0608f987283dea4b8ed14dd2a126786eed657a20978d4cd3915d211b961dab6acac3b3bfe6fc71f00a8bf40060c176b934dc081ef41298800c8951364a9a174cce074e7c3a5798d741fba5680eddfc48de7677ba422e0c2022bb087d6559a2225ca4259b0e6793c3adc812406168516c54e587fcda708c3c0ac8931827db352a2d7a33be803d448b39f808fe864bc79066c6ac779c4428e09b27857532e621b018bd1b40e62a8e4bd2d999c9ebac97925b6d77f9ea4d5ed6377edfe71fcb4540ae1c68332ee845b60bdddb6964ab9153c757b182fd8e6e712f5766683a36d6187d55b16ef4ccaf8a78dde9b76668f6d1d13b7eeaaeb38b07e8a17c2c2e2c8fea63277e5966364501d45bf984eccddb36a43b0d0554cbc69145bdc28ebb8fd724722aa2de85b452884be84febfbf7e2d8da71de54274002dcc69fe39a09d31f6a3c24c4d200a02b5e6a9374f588b376343982aca1fc986d001fac35ee60745682c1a9c2fb06ecfe6e6e5dfc98b6d2a6c547df883837f5df2ecdffbf30ba5dd9c02b2c247a3db41e2f779ca646d3e3f22a9c71b4423b96dd30a82d4305b9589ee04c7f845d1b689e1f4f0b49cc397110da875b6f49d36b1c3058ac9d6a641f844b6ca162ca15d172de40a65347b95aefde55f436668724612078aae11007c5d2b8b2e6f6bca731d130684c343a5a78652509488ca5b481045be0114a34816480888c9ae1f38b09336a474a09c2b72044c84a8668a1540ac8ffc5fa0380d2f19fd4614a891e3b1dad4990b1a1ed8651eb952a0b9aa5e77db491ccd19bc2be7f190782e2194b0c2dc7a43ebcc9f89149039216622bd2acf6b1458ebc624123ca5e2ba8ba3817886c3170dd35c8548438e72c78817a9bd0f84fa4acc376df3f962aa61ea66855ab8f500f063b6dde8d6a71979c34c5d6118dcde9fd9d6334885cf7f93e2e18f7ef72ef403647735c168ec605553b3774c708d7bbae182d7d12ae8002748c8d8c76cd06d55afae16344665907cd6f8347c9984b08696bbf61fb0ebc393e4d52c88ce9548afa4c099f02d73be3646ce85480925a150d98841e2a85ff6628dd80f3599da71ccaa2741ab7d6e076d0152d825ce15501a1ef068a43fb5f20151bbfa1d1d4ab9b5afcc09a7c30788d5f9f317469fea996e9a2a71c80595931ada0081267e48b90054352cc09e7d1ba0ccfb08dfff9b40afc23461f674e94533fe0b960876bc60dffd18838d81a1757a285684862bb31f5c0699c7a282a8ee9069b2cbcc322183f000237ed5145f1983e2e14a073524c5e8cf428d8a559e5ac1ab2908431fec5f9010a45aca63153faf87630a4c9f1c7ed8cc823160dd5142e9ffb228d0077b2c2c46225750102a030037492a9a4713c5582f1ca4fffbbccab0e70571f56a0a18a74cb8e1d74ad11aa0efc4d612dadd3824469595ec3a257083c1073a4fdbbcfdf1220c5dc2a338a39be301c80c671ccc74955ba366b56de5e83fbcb38147e3f1b939ae2084edd75af91e782a4fa10fed66943e4d102951c21ae42de283236bbbe06272d4a1a935bcce0dbbdc41c84ea53c5a2fe1f22705f7caeda5139459327cb349e48983072ac8014b46893688111e67598fbc61497b537e7b6acc0e9e56d4a44c7de7b2c720a546f5c71d95ac0270a654254956a655506701c8fcb67d7c2709d9252fa56727805c12981d517c28234e72e84c8a021156adcd758865b7aa93012444d21c6ccc9050391faf8f8ab8b052bd9d1cb6cdd998cb41841728a79f7992dcdd0c1cad8efc0ae4dbe3e3066c76252deb14ea52b273ff3684c041aefac9150deb83e5cc742310d03841cca4bb83497bc0206a3cf0e0184993dff0f20c4b2f298194d29520fb30bd2093d934b5497dd452ae14fd52fe4342488e61bfea48d0dff84ef27c2a33a1051bf82aead0e097d200dcf81a3847ab152a9e592c648909f695427f19fa89d2320ab650a535dfb38fbbdd04d0691f3b41c1759919947c4bb82fe5d4cd38564b27ae11a5438ae2f87b9fabf5b41aac8a5a63589d9cf85dca93915db92948285431a1925addd09968a34ee22169b1d2194d5c928f15c098ff5e296b470ee1493894a045dc5cd0ed9ae61f306de87ef7b96a0ce704954407ea0b0d6d745ac7fea05d9cfe9a011de7fe586580a2ee4f4f7dd680090cb0f39fdc98c228e666962d2603fb5947df2a9b17a8dca0ae1cc1f99947490521acb86e479e366db1ea8214a18c2e6da26bca549ed0c6f2ff30ac9f704a0208167b2444cb0cb4dcf219b243f374d2008a4736911be5ed361ccb1e50d4c724374a8e160fae1d9da2831cc4ed01012dcb79b33131ec4b28832c2dc508c88b4eb9e67daa91a0fac643708cd83280d8b2dc158a115b6db235e0510bbc1f3beddf5e1f95ddbeef29531be1bbddca63e2d8c3ae95256e90a70269c977b504e258526826e66d65a9b4d6e02d6de092018d1aca58f986fa1247aa036def8ae4e82560ad189899f1d3f11b966277dc44a3770d20b60b3d893f387940aec51dff81c586e3158b4616684db36bc1b20cecfda879ba30957c9432b80b0a708a3c621c3da00e1376fc3d528712e81ab86041f50a20a6da58c8fa91d8160f3f1273f5b0c2adb10b113e5f11d80cb4ed8979e7afb25955e67a9b1f6b963649c9fe6f89c20ca4a5dcf243bc024cb66bb1a4d3efae8629c3b8e0ee870789ced2a4e0ee16682b30012d5b9c557f164fd9ce8eb187ea64bf0549a7cd02e0633d94f2fc27d971c41068667a5761439397a4c0288e968df260cfe64ecc00cc442cce07e054916b35fae39ab3e1409258b24aea4c801eb8fd21277307f192396e735e4e3e40ee5a5f556b3a5ceb20ccb27262de722e9684cd388b2d3dec0618e92ed860b1e533886999f1d73f8bc74ebf54559e3a0b9581d8c9c2142d06ab4dd60841ff10b58d254ef3aaabefbc01902c062acd3602bb2909a6361e08d7b6d23de5f5afeb6fdb9a421be63397c1542ec5d2efe19365dad3e010a41924acede8f6f0a886ddb1b075017b3208a9a4d399a5d1a006105ece41d50dce9792258956c48aad8824cdc458a7815f2c9aec70c767d865aa7554ffd1ba12be1a1bccc4dbe9b10a5d96d8770396c6664e4da368771e8234b12125d7dedfa91e1c3c20e1215cd6bd120b16875fe3acf2061c6c6b0e9f5bc3d427120a122036546fc96a577d24cccb23e716b6adbafa23e4cc409ea5ada3c1fc62dd88a84eb10ba12b57a1a3624c3c61355c231421b81716a718e55826b1c9a0d02a74059b74688e241685439e29b6e10950ca9c48fc79754cd85de64d261f86f570fe884d110df57aa717ce7835f43236bcfdad47f0ed6fc4b6069e8998b895f8260700ed10f930c14da403bcfc92eccd08045ae6f92f29f1731ef4b167a3f468db06ff72bf16ec68585591d7a1397b96e25d7eea2d1c38a0ef22a2c69c0d8bf13c95aabda4e1183bd96098fb86cadbedc1872101020f71befbeca85b539ed494324a0a721df1cb3b24f60065e28c8d40679f48fd9e19ae7d800c93115361f182bcfd8dff9affeeafe7c412acd9e86be60c36adca14ddd589b3ab9ded52f552332cd62798ea6e584ed077dbcdee614ef3f9e52d3a62503bb7bdc1628e30c64658e6cf69155f2db9a9a2a2b71050e2b7e98bfd5ef21c11609702991ff012615054fd244817b29a56c1158fe14a3e575ef47d535407fe37e9b3fd5702eb64c98d1b6af199577fcd386d93f5655972dd5f63ded8ff8ce0501973ff8f81366386fb60cfb30f8ea371f8da0e623b5fb5ed5c86a1eb1719568dccd20578542d6920135ecb7e5c429a5de875fe9e0874d224874aec50c14c3bc293b015bb69f70118bff5817a1e7fdda9c384cc368344f2be6498ed03300703e97e469c472827af89836575b0e9051919d9816d2914f262d28eba5e203102b0dafd56f218e9e625ece6ce41c07cbc30842520725e337076e8c95f1b17d27cc3bf344be861556579065ba64da233c490efae84010c45dcc24678c667d22940deb9a6e960559da471050a304a528035aaa94d4d28ebf1192e67129f623f632a637ce90ac9b40819bb7cb14098fd540acec06ac22938713e1245c97b6cd7e6aa060e8aae769e0b7fc4d69ee8327337265a42d13792c8a81b18cd36e8ee76a72b68a08c6ca3f201af03b4faffbc72d96a36794929527251e77dc1c8b5dbeb373414563a22b324a6b6151161138f8835e91763dcee378784ed75df4a8fce595d745c91c64776f6b0bf40ccde1cd3809c5a4650d8f267a14552f032c3a3f37b39c1cfabd1310b1a5bc7805d6c23427442a29016531ddb2bdf269fdefd7ed9c2b1a10b9e74655b320a825e80eb4c9e143f973a76dfa3e349abb26a991fff5a587817a5d1cae33af10e714930e6eae0a673e7eff533c910af8f96b2658bded13d189a07990c5b98993743e31b5d6eff8170d62754ce0c9f16b3ab852253b30861fcc50da9b4bc4e321c93ab963efa3e4bc3fb7d2c29f78a7abcf7b346501e0379491684773ff163a8629438fe95db732a2816dbec7f46459dbd72d23a82aca8d94106ef78c7853a00e2d671bb78a42793416941550ac083af366895ac60216123c67a1819bc0fdc8c338642cf48ceb1574e2fca85a669374e183726d19d8149e6180dca89a5835ebf4160832ca96f647851b4a616566fd4cc5504dd7d960fb7f8d90ea4e1b97479f44c30b72aa63ae93083af0c416307afcf6100a4d4fff7d4c0e83b3b0f3e89dbc26764a6f22e5cffd5f2246981543c70a7ea8cf11a9238b0986e52cdd68850cda26a97818d17882125bcf493f0bc82c31c7336a715ae3dac73515c2a57da9dcdf3ea32351202d1e8e9194a0c9aa88778f25d22d534c2e493a98310863fbd2b3a38530b7dce3510d96fc714a41aa7c7d29a8939fa2f118cb6b1dd198debf84e4b21242cabd9f338a285f3bc92b263a7b64b3843c319f6e5298202f46a31515fb7463ab71a2261d9163036861e90fabd159aa9dfeb2eb997c8dee2c4a91683d74d486277a72e7784e9849b3e34b93c662e00b743c10b42a02d4bb59eca5190a14129ce6e9469d363ddcbaf30262df3c865d17cfe1066e060147751b9eb26d4adea49e8082d177d13aa76c71c809ba6595debc7cf6cf8122edf65c2e0d2370bdc72f76cbc129661a12b7a3c64584ba1100de4c90f227e2672b33d14be037843108cf8d1ad8c532189db96b4d182e79b5d05f610a7e7796c2c7e031b29d9af515d02e5a6749e49f483488cc4187c526492d2c64c0211e5d49062c7dab7a091e6462883756fd4277af470ba64d19225d6d4005772d63f6597ec2e39190e6164fe66b0a8edbab24e1f8b9af809432a9c7c94b99fe918dfe237169c0008c8c1f6b1759f719681f2a1d01a07603e85fd8500b2fe7d745527cb26d302dbf6ee3e54219adaf155b54a3f00fbfe921dcb6790452292c3955f147851859dc606d5671abfff4efebb455c9015da1ce469e6e336468299c64f308db13fc1bec094bcf9ee97f03248c4c76ee240fc54c24cf33178e14ff80b143c4a92a6c02468b7cb20c79032fc63eefea818566abd58ae25fe2a4b87da5f089d0bb516d7d2f02dd8bac6d4e180214073ff01e0f912a98cd9fa29b767d6218ab486c5294c7c44e1621801b2df08942241178491ccee72e675ab28d101300312ecdf7a0c9d23e90fb726f2efe1e18110245a7b227d0ab28a9e0723b44b1a6c87eda9ab9c51791b5b1ae0ea562eac6e2c70464c3d1fb7842169bbfdfb4202fad6b96d78c809451f170686cc4450f08b00a9c755bd24cd4de2424119677adb0d9b587dfe3a98545666017abe33872d64036ade9369bc81588940cd8d48eaf62f183747edf5c3b23960bb166885c9ba9feccf017ed26949ef4be145fa25604fa511690da8016f244c834841e720c94fb7dde54b2192b77f951dbe3e0e3a79e389cd21a5b047ccd2eef0ff5b4c4fe8b3888eba466f5582f20680358989b80a1ffa4a1b2c3e0bc2f533da1a4b146b9722a6253273a9f67d50fd594177d02377431284fedb91d05b2cfba03b88dd245b38b9ad10f7075500592ff7c5ac1c80257076ef45f73c1aee8943866ee6a88d67050daa736defce925e281c47f73c02c2f2ef7ed565238f8db2b1079d1983c02db541497b187b628da0da5d669daa5aedd491ed51d2c268c5a38728974227331336d96d0ec8430e53a2b6502ad86443cbe14a6cb36b2657a08e573e517ca13bbab7bdb2c840cc2771886b3df47fcafeb8c7f9656585c37690f2384e2875786f9cce4186e12611159bf0c2256ca2eb69287cd547e93673f54b355d62499850b64e9e1d1a5ee70836f9087d80a4ad4ffc254cc007562ab1b808871ba63fb200289f41865a013a435fad34836015b9ccd81f0d134f8350b6b291ac58d136b912b7f3d4a8b17bd50fe63590282c95736255df9f69dd32c5a46c7bed98a116adcf5837644c8a147662e59f0c5c90fceaf2863994371554dc165d0dd013a0cc1ec44bbac5bec9c60b9c7beadc4dea3aa6725b698e2bad998ca28081dba8fc6878822e02bb009b6253c799e6176d29ccf2733e172923b53c518f434092f153b31523b0d187348e5625cc687101398246faa74c2f04deb79ec930b41bf59251467b685946fd4f41ccaf2b79251d58ddb58c308c21042d91c8f0a121229ce8c6e302c6f8d2ae2efaabf08ea88b58f2bb34f95cc12038953ae620ab3f49365556b2a0fe9c896c2e77a663d5f61834e3a58ab9f0a21baa71712a0712fa93d58b2859c9751c4470f9888e921f4fc162d3765ac294ff5319598788a6c7a3187249322d6e77d8ac768e5d8cae8a2899bbef1caff25dc1c811efea99af63899237e54ac92a6302176bdbac98696d6dce367909a0fd743d8d84d934689d1626946bd9c67dd18fac5da4bb2f632484288f4c86ee5b402abd8ffa203101ada02a5341270297609a6d9804bb5f15fcd72ceee468628b838a53a5fe182365972c1659acf21273bfa2dba7cb48733bb1218f5d197cbd3d8067c1ca725762018dca854d8ca862cd2831df59e0934da35f5bbea35aead5d5bc8b24f15405b85e8e131d0c670b68af87f140a5d8e24bef24eae9646316022db8ea99e27ab5cf6f879e6b1b6327203b5e0139fbf195bc856005e5da72df0eef74bb0f75d881679e0cc571b511bb3c0437ce69be900eb7ee14e0993143b33d96772840a2103bb5bd537ecbc1758bc6429721b82355a002feaa3fe5fe22ea031d843306d58da6b3563dc491403440447da3cbac244f8be8d205a8c8b6d11d71348b87d14e002617f09772af86a5e441536e860c22b9b01c0c734731d899d8145561f56074f5bd2b75eb7a37be7f56900475feb00ec7002fd744df07d31ca45fa24fde9eb5427f64c924f39c14feef20dd11d94a485b5eacb9924a125dc4ef8f2bb5db3146ee03c14113db95f3532418468b406c10f22a6d5df9b505e8ad3c6f5c6a2dd2cdf496dbaed8e3af3ffee9342491587a141692a910685804bc6bbf31a97fea096949d5a630083c771a4f050a06911cc04feb26610a98744f9cd78eb1280926b91e2ba242af67c527873cea8ebc7144c5363d6aa49f095242a177f49abe3dd8d4070920a9d2238a325cf70c29e4238bb8bddb3a7f228a5a834a7a80848d884edac8a15315d14662856696730bd4621a14efb4a2b2ce50209ff7de8d76dfc70dd0bd8c6dd7dc4771ca3d6dd4309d5f9f8b73ff159ebb373aebb35e7d0b861ac5ff8c2b034904317c09a749853d27cae22cd10b2d140f5421ab67818ac214526e50fae92bea36424157bf176ea24c4b93d1688597a915baeb0d92827af63de9a9d20da326eacf82a8dbf6b2ea5f521b5091653460de219421ba48eb48c28ed4649a8030be442a22e069f10c9d9666c3d1b69e96fa6e4e63e535b76c1a0957e6e01056b830a792c3a2515f9aba9629046b62b12abdae4c1178a5e2279b4f4e001e13451048ad8403901d5a1386351be72f8a078efe130dca2116825ca1e07fb4bebbd27947042d33e4e3108a593403cac83b1b58d0253a438a02f03eb8b6b02f25f1e477d748a0d50db4d42fc3e04ae4b8524c904d0fdbde9fde664184819744b9d0a8aa0bc0a47ac4c8306c770f2aaefc00d06b3731aef384acdfb503f2c127b2904d7b35a1f72260e3c40259e9453b92cea4f62d60efff87c661e115fbb08b78e7796e436ee4c92ad96dca947b9ccbf46a05d3ae2111e25c2ac31482a22fc73329c946c5b9c303441ca2a1d928768b1457ca1f3012afc7a603513685cb1980504ff52dcbdcd40d8cc5d0120dedfcfd474f27f74a87e375e21fcfb0e04939a51348172e1621d4c4b006762be885c74b76c24e398f53d015ab09b394ae152186663dd3cb0b60476df23d984f62658e991f7013c3d032aa932845930561aa5036dad1f6ea00bb64f5951dc1f73a466c34ad02b7ea1f203641154392d586f8078667acf05171b158f16c8a3637cbc4ea39665ae0084ba7702d6d347a434802d7783f28abd8a27d82c918410b9f7965bca24934c01b1071b0842080f9f5ff9eff9e19b4a3f7a9af36cf6ee921efe7b766461a5f76e471547d6d1471947ef64c5790fedc891ea838e08883d8f7a5c6fd33eb218a966fa68f3b237e37c26cde5a5667d7caab93c8f7c6475f4363d35675d34efd494f4475a36bd53f23369bd9c6fd333a39aec143d3923d5dfbb3a363aac459ef5e1e98c7a1405d58ce750e598c9a1ca319323c767ee84f674a320d0d2a699b134fed65b9efd88f497263fcbac7afdc724bdcdbb7ccc7adda6b34b23696ee443b2eb471afd6497939e7a733339a6bb9e64efa366412dbec66b42676935ac7791fcdb45d1d5e80fa1cbc9c60af3e5e39fe4e9e5db90bf82c69c92f5a2e2dbd04e5aea7a178d39152b0c45d05973a0f577a31f38ee318b3ea4ef4168c5710fad5ff5729617c508bd8b7abaa8e74a0c656b5eea7da3d1448d4617f5c046a38b6013351a5dd4d368408886c3e1df03562fa535f67d465907db874251dae37a5eeafd853d651dce07f617850cd9fa1e1e09061efaf67a0b55aab05eda83fcc7bc86e46c0dfb627d514aeca3f5ccd725afeba55529cbbca899ecbbae474a4a51f6fe66dddfcd3e95757f555dd46838a8536a97220b2e7125afa793386b551eebd521819f5d58731a8e7cb8d15bfcd2facbba3e85d5ebd6355f32cb77cb1527ab1c5fca7a1d5e15073e7f7f8f82c08a131f5aee6ecb7acb31ededbd6ad5dbaef93b17dbe2c0b45e719c0f571dc63e77487a15d3a9e788b0a157d7df69ad1a4384e5887048d811e18eb023c221714440c8d05fda1b63d35388be874239248e08fec19a8482ec79136c0b9681bca862b337611367f296b4126b5936be1e5b5f92deac3b7af8717eaca867e1af5ce12fb5f1f2addb7f99482e43509539159f5318895371c8dbd09853a667fad1f427d3bf98480fdf45d61c68257cef3a2ac1bfdeadac38a62adf4defb35e1311b4a48a637a69aa38d6432b61a56f6403b4966994b9c96d32994ca6e83edef7a71717e7937965f352efad6839cbaad789e0a887ab9ac563bd244d137f8acdf3510f57af8e35456f1a93730b25b121b326ed3a6b7a37eae1b585d8ae6cfcfb7f2b1b75c84bbdb7f1a67a512b7c7cf554af5ca1f24bc5ca2f657df6a5f7e2f297e9b187f5c6589bc743acf883e42c634fd286bc7fa957ca4b5fbda8180bbd53f0a73c59086361f6f04b4f35d2bb9d77e5a5aff4258db4c5a0a966de4a76cafdf3734f1aa9f01de170b80eb4622df22c842e7daae2923073776f8fffde876859ed9ff5b348b0e5f5978e112b7b15ffe060d6c8b2e6abae8cbe4d8f30ecadd25ff5e6dca6f57ae09fa4716fa37a67cde9ace6703b72381c97b4ea756f754a0e52614a08a7908b8de918911869d4d8937e0a8d4852ce47923f1ac908ff8de49424947d3d6ad41c9a4373680eed60c4514208e1c3b9d6fbfb601d7c8610be6c2bbe0b9b524a29a594d8e7344ef64c92727e660593b5c82365d9b79c3d312bc2ef513f399ff4236dd611699246ef522b7ff45c5b623fff7da65db25eeb7ae42c274de398254973cee9240de75e0fdf876b4e12c959ef705e96e9ef8c953972381cf367894422916649c3193d5312a9549aa497b7693afa2ffd75795aef8c9da64ae1d3977a3da0735de846eb2dd59c9eef3fd272381c33c362bd57cde170480be6803587c3e17552177f50d231026716388b26d1249a4373c8a463a48f4ca199c5e4a69f42a65964caee246a24a54662fafb8e94b4ecfa0ba9cd4c59f6143587e6d01c9a437348f650b104b00ce48512eb0512eb506019a88b356c56a2f3f9fd8d7eb6f2afcfb24cc788052d35702ef691317768c9b7b49b113976dd5ed08eaccfb2d27b96b155d27048cfd6b9c9bde45fb26cdaa45d1f786403a9f4d8e5d41db91d842d994ad5a9c9043da07329ad59bd44a6e5d9c3276995dd8886cc66f562573d59d91587e3d49b8b3a246769c9de7bab758c58d1b2dad231c29635b37477f72cb22c6b12b56559127bab447a7dbd0b2f7bea33cb3ea3d928fb996573ceccf4d973bdf4a5fbf4a5ece54b7f2a75e9fb5f5c4af5922a1194bd3ea6ba565959c32e2473680e95fafa792f7bef3d1d2357bcde15df9fc6d692f2521d2356debb86032dcbdd7a7ffee42c8d7e5a987fa9f42452894422d12fbd7c5ba4694dcfedf22f2e265aaaac8d6a56eb699a5a6af9811add0ebb0b263fd0d24591cd6119a80b28d775c5773ddba8719167af0a473e5e737373b3fb18dfeb22cfba977fafe7e7abafebaa57f6d7ffc08912ab5747c6d38c36b07c125dcfdaa53a46fac814ba669649844da2d1937a5ecabad2caf9d9bfef1eebe5ec1e6b7dfb58df7d89f4dff6b156e92dd35ff552fad79ba8bd9edfca65c7f4f2badea4c9a71aaaa471a7ae5a65e57ed2a891c05004cd2a1194b5b08fffb0ab91a0e6d01c9a433ea3b676007d863f63e61a758c38abf8fdd9a8e11431e2b4cb3fb15e07af19db31c608431134d69cb651e2bc7ad59cbefefd39dc0e0b46af391c8ece9c53e142880b294b6cfbcb9cf6831e3b00cb405cfcc08a358065a01f34b192e56756243feb1a4e1123563e5bd66ea60674e166427cdde6f47595dfc7510fd9433e8fd805eb311e49fa2baf6f9eb772475eaa4995e7ce396b6989ed7747decae5fb653d625b3e9d963ef7caf42e1a77ca44aa5393f54e094311d4aa44588bcd9e0443117454b39f3fae0e4ee61e7b975bf84f561cf75610f716fbab6f096deb48e6de94974488ced17d49e0eb571d0b8f8f7849e6a8c773996b8d85671b2f015c2ad9bb411beb8965de4b139c7670564edafe7df22164a753b7434d0ae33b18b5138cbb7b18d4dde5434b56fe0cce1a74ac8f82789d3e92191072d4e3848281442687e1240c27734a0578508523f6fe35c4c66c8eae6b34eb858f7d46ad110d4ec3052cc434bfa475bd202f697dbf55798036561c5869956f8bd0065f8aa0f320aa5c42d8564308617cd78af860e1b430be83f1ace90297b39dc381c2fa981139055108e97338b08f6d2d2de30d7ea9c81b0581f6facc41c7fd4859c55806deccc2f70fd8d8e3fa7f2b66b78319076661e57a79b0f13d08666988d092270328b1051a7eb2ec56f83bf48f0efd23f47718c4ebab6fcb1607c505b11014979540c466d8f897957031c14258184ec2602117b44497388a7eee87b09f7b78f773ae47c62ccfc7ba7b94f1b7690782dab0efc963f294bc240f89f51784f56f2dbd7a3fbd467d6b3c9f32decf5bf57c3fd9fbb9decfb6d9fb7e542abb86bd748d156cacef0816c443f27c5a0a28473c9f98253679d1e231915d5255ba74f4772351ada4f123a212a272a459a8ac5e8a511dacf58e5aebafeb05eb4454369c84e144724065bd62ed4dd8e0c17e7c2ee605f66305cb01e685ca250ad80f63d1c110d88f0d1e1be0d05e03f59b8a14ad9441a0529e7ea3f56e2a7b394845aab76634dfdef056a7fa8242b9d43a842fbef8b2de87c04bbb6f2f07bd95b114ad3b1e52c32840546fb0de77ce39e7e2b756c4071fae157127e6d30906c6573e5c0f4f306050f8f7848215e6d2a280cff21d7c59e1730f87b08e4840dd5fc91b740b2b1be9ea30de394e8302dc7a6ca884d03669c7c058c76a36316ae485aa81b7e6250deecd6d2d6c81060d361de95c8b257fba0ba260cd2cef825a364db37a51181c62fd23b4a265d51c48c30b1042d5037af8fe6085900c0a1ff26645ebd298b7f82e35d9dbb3fe56841a5b0bc29af368e02d5bdcf228d61b41fae1f7c3cac3b35efd19e1f034ad6f2ff5503fd81e5de2842240184ec270d4a34286c9807636457c39b3d8f799f70603ca9ecdf7376261fdbd5e22d1c7ce21ea7ffd87d728858d7f2316f67d8f7cc05868aa01753bb81e4d83eccddd6125127dac2f096a62fda5e591d71b4138107dacf7c633cb6ba2bbbbbb65e0918147061e1990c8704406237480c42161470450c6909e9ae6ede8b176f4481f6cefe8b1ee0fb3ccffbd1d49ac733b785cdb91c473cbb50e9aa78d28c92735ec9fc6fd99f4a15dd47c5a46d27eb025fd7c1e39c0fd4995f4fe8e546f00614bfa1f6c49f506f638a48f8f551878e88d20a48f4faab2371d6bd36ea4616ff3dc673af6d288a01c6b3a996b2b195b3dccccc4e8d1bfad6a03e770385c8d89e1790e683f2ac7e9cde480ca495539084ad2a324c9249a44efb3a0a0695d589452a69b434fa0f864f5a282a4309562c51c9a4356045d1dc9c8dc91a671efdede4326d49b9509f566c1eecbbda2de0afb177d5eeabdbb161f6a0e473fd462bdce7d6b37b362fd5d7ca7f91587c3ab5bd2db6362dfcf5ba15056bef72b68d35e19d161676767e76688bfc9ae38033823957b73df23fa60e3d57157d07e97de9b634df6e69ed5110aecf9f2276e42a1f79d509ceba1bd6fe7378d958d267457874733bb6a8e130ae68482e1270e6b6640e3df138c3ba1ce7ecc16836aa6691cfb1c0e4756b3e7f13131e4c854392eac96749b3999c49223ceb923aeb247e132cbc129e8753d0e0aeb9a1984d65b0eda3cb8844993254c9ab04f140e614604a5a0f15d2f61d2e4894f13287a7a943069f2c427bb920941d8b344498f1226d995cc8ac5aea7c792f23d753db2bee99664579660c938e6be1ffbde25b9aec75a4aac555987939f59955d065606dfaace69407dbe11db18501cf93083d7cc9ce5267cf83ccaaccb41cbadac73e839abf68fd6539a4afff4142acd6ec980ad5b5691755fe46dd9e23e34beb3d735f9c9de6c2a4de331a0ce3d7c0b4ad348290e074df3e3ec9d430e87ac44f6ea006901c67d38704d9a8681b4d8c2be774f1c94c92359d9e1b853c8fa5fe736c024980b3f96bf232e5c56fddb3f28eb5d93b77adf04e54de690c3e1efe77a42f620159ff26caccda3c6be197e77e7c77a67b2b7e277ccb8ba73e613daf73966c5f11cd7676cfc1c0e478c905533f1790e9e890e2154718e99172147adb3795d4a6d76f653cb620f96939e7430970181688868886888688868488810115192cb562e0bdd9c37244448c810919021222142428688920c09c94cdacb8fb2921631ed9e1caee14d78595a0d5764ad17e2841cd1088e62c5a2e92fe9adf897c64436be7c4c65f5e6bcec9f95aeaf677f3774c191054bd00dc17a1d918d119b276b3de688581d18c6627f89b893f58a93c1793d497bc2c5e5b37a4fd68adae8238580e95ffe8d7a5896f5362f8bb3a4c5b79e70799bceac39d2e2630f30fdcba49acb97b4d1679866bd1bc54ad29ea0d8ec14f6d6f53cfa713df698764f16fb176da4c9deb077d166a7aec73e73f34533bd8b1644145148eb9fa06f693d4c9a77cafd489b28988fa19576ca110d110d110d110d110dbda90a21285b40a102650a941f28388022a537bf4e8abda587d6dfd15bfeef255e9fd1c73ed6582bfe4bbd2a6bd56bbd7c2b977f2f59bec59c6944a6cd4c95692dc58a6515e7aa5caf6a84d5ebd0f655b3eaa2381cb05e51a44471948479e7165efdf4747d111fac43586f0e0f6e71b2779712454a142951a444911205cadf1a3bafcace2845528a6e8db551652e0a9428528aa2488112454a51141745533decaa66b050f9aefcb7574a8922258a942852a2488922546ad390bb8b2f7e8cff1ed4624412854008bdb210478443f2227c427a7b4f989ea43d71e46f4c9f4debb352841042f85e883b02ab43d2db9bd8bb877706da0c4c63f3fd32e826c8da34d5227393ccb2e87f2346f835bd7a3fef6d6a1092819fcb6af8ce108aec9d9910d1113b842af6b215fb5e917d11fad634eff216570515f64e77ff1fce3a8a6e5f63fbafca723f0e4d33796bcaa9feedad549ceab7e1d45bb91b7e2035dcd034923767e6ad7fecd5c13aebae3e01d39bacdca9f7b3035390ede03e47daf851bb4103bff56d5fdb88e4ba6e40af2ac991dea00e4d033fa707234d833d7c1554cddf01733dbd596b58d662b1208aec4b317c2a51f45190379d9d1d495137778300dfa85e0adec02aa853525d92dee09f9050f7d725b1f039064229b2087f071753f4c3b81dfdee87bc150ca7dc4bf99c0dcb53848004fbeaa54bec85716913eded060e6cbf571f6dfd99074460acb01df7312a1e4df318880c22cb42b67daa80b1415c423b3b3b3b37513050185cd83b635d184c5670cfdd5c06230812906841d2c8a20549a309bdb11dd234f79443d35c17ebde4d09e28ab5ee33d0344e8ab5010bf9d079f6fd8f675f0d82041e1d97cc09597e6ee0e85d838187521bd39bfbde9c9b8218818a7b762fdd8e37c401d01522cb4057c090c132d0951e3396d84b6d0309e10890193dfd53f058441323ff9ebdbd9a057d7b7d020106416a341104922b37fddb5b016088213298204a43cb0f3744f0c11313385105266419a3e688118c80093f306146096e5a5546c63197579702ecfb6bb23cc0c1a98cfa5069af531f6ab18e7e6632ecfb3bb2fc420fe0d4fb0bbbdec032ef4960d07ef7ef46b7c46e0a72849edeb8c43a542cf3fe3de5550138f5be85165c5c307b317b49f679c5c1320f0681fec5217180c494206cd9c11752dcbccfe1ad1ad0c514400475a1250a146e3222bc884217543481288b9bf742deeac50b202ea2d8e088101537ef39cbab81b3fd1c73555adbcc7776767696dcf4b30d090016801dbd510feed19365dcc328f436773b275d1dcb2ce3aa4081275258820c279e00858a0b7a70461658a4e08111cf76949465202c2ab02428d6e5d02d5989d4d853f7f30f43d8fed9fdaa536f6e5e56848e12806520212d2ce664fec8f622fcbccc12af541c2d1626aa87ce532a664e7ba76aa686076a9e6eec50b60c2484234259ec64c1fc7961bc80d5783950b2842b713560420a77f1a8805ac1d3e29ef8a0967062f0704c601d30f1b6144189c392802554c0a3e491e1965071421fe18325dc107aa024e322947fb4f05893e59f292c792b1d0bd6bde315e5175ed9dcf098b1bf3c6e58f7580eb427149604a527149118cb63a63757f384ba65a02a2bb0332be72e9784edf7206efa6777bd44622c654b7be5374ec6d029f796b645184c05f4daccd034ceba075243d3dcbf28dbd4761524ec5b9bb66954af6e8c8046cb40554e6039082e71fa6775482b99c6b8220e30e48fff862a96bfe6adfc86f931154cb9712f7be5767676768edcb8e7a699793b63fb59f6a35a65a5e551abac4d3b2c52768052794408dc69d84a49e94559ae17f897b41f337c41a4c559f18d7b1d773c3877839fed0d1fce72d3a671cfecdeb957a9745a5b9de778782bf89c02817dfff8066aee864736488bf3fab52bc11602f70ab8bb1d6e8763c671df77bf08ec7bd76e3b67435b9cd72478ceb4b7c7efcccc3d04840ea13fc481efbdc7e22e38a1fdfe38fe1ecceb7fffa03bf47e569c373f53102314f5c6f6ba871f2bfcd99b9f7a73da9bdf691da66950939e3cc2eb52e87e1d9b95d8bd1e3ebc52abe3ee03d4fa8b37c6181dcc29e3faf89257f22d4b635ab29726b5ecadeae2bb58dd097add3ed86e8b652234d65fa84986f0e5b7bd96e6d5396859ccd43a8859f80ddf7b6ba9113959e8ca70fff8752f20f30bddc36f58656f9d19319fab4c03ffbae7de5c704271dc3be7b875451815c0faa7ac6bd6e5d502af5028d661bd0d8f2b28212fd88b9a288b425d3f5cc5be26c232ef2310757fb98abbf31178988e4c7182873fc1a117105a980920b6a40888a5f1c4cb927e2f88e6eeae7a152722ccbf33d665ac0bc03a00ac531bbcbae1c43a620f3542b8a187b77ae10549638d8165de8f64e8a9c685490f8ef01aeb4b7842f5c22476ec28a3702b5a113609e6bb11a0b85610d483f6c3ed84823146b7b047ac93b20ef8a85310eaad62e2a9b7182550ef2dc6f6f62cacce321e020b2147e7600cdc9c4898f454c4a4aebbc9177309d95700cabf74f50c2b8c4a8e7c3c1bab44958aa072af103e1cd1103f70b1e91aaab767238cd14f258892755c0fff621d18911906e3c862c6382ccb87b631ead8cb8ad08230462b3a3d813be74e38bc22832d9e78e9c28227947b899ad4c98745fc7482f1c2f797231aac8f6f8d82c0879f59a31e32cac68195ca20a8833e5b2004137c542e5ff43812984f860141fd79f40300ee039b9881f5779fb80379ce804df8d8b813000babffcc115c9f010f0f8800048f75ccc7079042c93a721e196dadca2c633dbf34e2f13d2162b4ac1a1f1239e94906be3329846e0d26b2ce45d62d0b3da06fa8ccd39c2797c5ba2bb2eeae8af577416fd53c2f45e5adb0f77ae76908939e7ae379d793cd13ebfdf754ec454979c0bbc1aa137aa9f7d91150ae68d2935bc379808e48b78675df8155bc8ff4fabb8f6818057108218e57ba03a783f5e164639f60e0e90403239d2802162e4614ed22c6783d7ce896f4f8b1f200adf7b6042ccb85d00b082d0c09bc028b2b2096e507e8f008d14706cdc4173fa876c75620274b79eba176bdf788d5b12cc618e7cc30ad6d562a62fd9dc4b0ec03d67b481e6c5ef47737c184dcdd90b5224e5229a135c3389d41fd83ac5767e7bc1d09cbaa17968d262dbdf5cd3a48dfdbb46284916acc32f04b9a6319f824ad5906fe487396813f3566990c3e06ff82b0070b466845cb82ef60841c987e4409207af6367b7b3a27ebad5dd9ceb1939865fc123955495d4a4a295facc3b1a44172520eefb9bbbbe61872aa47b66d58c796eb262010d69cd664c24e9e24588b91a6096247cbb66ddbf6ee6655db4bd9b8825e6e424e0f908c183609e36592ce9bcbe239e79c7beebba1fb1b107a7777777777773f74d7dffddded9c73a31e8e65d859579f88dcfd1d5b3e2288c1857c2ba6458c5827df12dab97b1d045ae8f83d52d7677dc77f684ef50ae3545f1fac6beb5a4bcf793a5da6d2db28093c6adcdda5aca919290102d1cedbb9eeee768cc3df717743774fc084b64dc503080ed8166c65fbd922a80a0b41c7b6681a309ae66266d8206c0b777715d81d9cbd9be567bd6e99137ab129f63d36a5695c85c1a83cc7848ce0e204dd218410d2d49ccea0b7c6be139c88280e5755c30dee04ac83b1b8e24131316cde2b2ee28a5c0a8d42fd6f9b4a555363551750970274871042a86a37ea018928a4015af859bbe7463a04166ad0bee783855a5b7ffd1c1793ff8482012206bd7e67c75e7c551ae5ed44c4f6ec7f4e7a8eed7f8e61528023e051c38fa9bc8d8a7c405eaa67f210417708218440b60cd1eeeef2b77a05206582985c936258866f2a60fb1ab1ddae6ff89d0addfddeb3dc14fad97a7d96f9f79d26965459bd1f224dc3414c7148aa64d1e28ef0cca002c253208490556f65d51950402f4fb1132069412f579972790c214326c03ad82ae261c3c386874df3b0e161b3840c20d4340d5b9665455f657fe96f42405e4ae351c305f59aac5d861d96c70cb6ff3dff1c696560191d3e7a48042cc072afd9493532fcb0fd0f88ca01b14d4572ca7d0e5e690f125e574dd3706c4983f88c5dcf3aecfb1a8743470d9d7aeeee32fd627b03d659eeeec238fa64db866d1ceb7c05dbd73a7713cbb4cb0c07acfb136ffd9816c410f486b900d705db8f6203f4d7c07fafba6d6f4d10cc71936255993aa0eaf7edea13525a55964024afebd2a446bd9f16b7a31d42e751e38f612ef632157e762b76292a0c70a9f70cc4e1782fa06e474f9e2bce70b0e1730bdfe479023bd7ed1af2643e5973edeefeba488f27e2e3f06890c11febdc9ffb63cd3d00de686caf2be8852d804bdcc316b00e7fe763dd73bdb0894d82bd29eb34b6593b9b24cbf0b34e853cbd3110f1792481be89d5880f37fc520c7fde1419650d10a5b1440a86d47032c406be9832052ea0a8421645e06705649457fc434611904c018b10654c71c38fe2d504ccb0a245183a30c3890b6ef899f925f3b38ded2e599e220494167c8690c4b30831c99690a1a5858052ca814977ff8f67dbbd840208099440e184ca962af424512209104157cad0b243463423fe9c9186bbe2c7951d4041cacf4f0d5810022c4d7ec0c412140031832e201830074e3ba38a0dbe40628a2494dc4d85650957d8fe970248081d3c918226600c41044903fe7901c5377865e3e405032a0605f350d67d0ceac7f694cc8a1a64d613d4a3606c9e8502db2b98d980ccd09b7bf7aee50f4ed87e02cea0a455673aa57a18946c54db1b63db0a7b6ba8c5c015266388d10414aa18bad1b1828a2629f89942111167dc5c1596316cf7a3b058e91fd463d1c2669681b0fca082b0260cb1f05fbdd7f3e5702e76f6582fca422d075a767fa5bc251fcbdfef5aa98918d4bd8ea679ffcea573e21ef5c17cc12ae8fd5401c2b288b1c40ba6115878a850220a46905204256c60650c244d3cc10c2ba89c81c4b660990a51967e3bb01d5ba3a56c9b38d5cf23ca320d4479ccf4f677e614c408527aebf74a7fa0af3e710387d2962d5bb6dcc037125f043fc08ff586042c11c4b76a1437a49d3711f6b8815f0a6241bf8ba0289810032386f0c10f373a4fb0f8820a28bec8a20a106eba0709213051021a60c0e006044448e288a033a8e0d172f3f3faa591bdecba67a7042a7bebf96a490aca9f590612e2b157da39057ba512a8b3fe3f5c1612251db374cf58a83cb9410ca80021095a3012b0283a410b9c3439c38a1b1c2ce18b0752839c02b0f7f4b65f1ac10c2decc929a1041f239e44010537b8b954270752a2a084114553188219370f87a6e9151d02e4ad502f656f60dfdb340d4f51630afb7e86a6c9b8c8be9f4f3b55a131bd6d54087a63acfb985eb91bf731340d9be163db76ab600a328ef91b837d4f05c80d15c821a7460b53115223cb1a6ec7618d3b018f1a08215cd500a4b7f73e06857f5554ecfbacc8dba22548efd8ba037c997e34c4229638ac8e37f7aafed7ffdedfeb0ef077c891d6310ef73928eb66fa5de3a19db3938a3c0b2bb38ccaa99ae6513979a209e4b3a5f18dd4f8c621747777772335e654cb9bc6a4e0418f670c277ec6b88114b00560f1c4084e800115500883aff0600b2850610b1242595c964d96dd1bc1eddeddddad316fd03da2293c414041606279079681cab8627d6c97467f49241da5476da1ba29cb9a65fa37b38c59fed3f3f3681a1b343750cfc2f30b99a157a867e297e7bf5887cb73ccf11bdf7d7b0b2e38e75c0b2ee0c8f797ae8375ee2dd83c1b3bf472d00d439ac6bf5f87a65901072115c8400e4d83fa7e224dc3c2b7bdf1a73ffdf5a7eb7af8f4749d1ecacb597943c39141a4069f4aedba3f490df2d5c9f11b371a6241bf7fc85bcda8b102295021c4105170e2a63f87b7d2b1e20941acd1840a4510618b9bee7e37b8f0375a78b69e59cab742ddf0565b75a15ee9f5d27a51d70b4e43694e496ffd2c686e496ffd2b688e0992defa6df49f3417446ffd2f1a0e2cd3efa2458065fa4d62d87e3a86ed2f494b22c3f68fcab0fd3308b63fd3ac58c7d3a97e0b70b3161e38e1e70835b6cfb05d6fe8ad7fc4047aa56df85c76d51b40d85eff83edf53a3ddc796930f050a032c4b0f179e4de5b9a8e755aceb3f13dd46c9ef33b1f5215224fe409126309d8ce174de0892c7821843490f0810e92e0e203413138d2c41742f03ce10619370d0fd1e2706f8eeeec300c590d8ceac4fcd3377e8c755687f5fc1b9c3a37fc30fc9bb359f6cf3457c7c2518f2bc6473db2e9b6b1cf7e76767698d0607f5dd775c5f4b0ea0d8b55d69e753964556c7cccca0df2a522ac8212a919e82dfe0909ede72c3d08b2aedd4757d0eb3500e98dc67dba2d62c4cadeda039eada8242c184ba314aaa211040020006315002030100c0643c2f1a85c17a4dc0314800d8eb24a5a469448c320477118640c22c81862082184100284cc14cd4c19d614cee1afaaf993e301327ad97115c2f4c8e3cae1a580f86e59b3ebc7bb384b08631a07bfa558fa4c8cbca373f83d7ab53435d539597b40f6a7abbf02fad716546bea67cc32bf955a3790f1d4c721d2663f01d0f335ff07d0442617015dbb4105dd7938a28ce582c6951a1a51158d833d1acf401af7116ab5191f8c05e9fe355996b9850c01f85a016e21e0efa99918b7df4f6d4f0f51e90ecc87648ec3b24dff4e305e7357e1878b29d79d244ef74489349fee1c3425d0ddada0a8bf660b7a71af147896febd455fdb0ab17fdd7602f9a96fe4ee173eb6fb0ae5b303b1bb4ff0d9ce7d0bf502902822a7ec9d7152c8f037a9c8265b081d3d394deefde22c1bff8398a44e511ecf4b4870d96ef42ff52fc86e3a100eb1903ae400c74dc05909253247257cbe20c626d57bc30427a0a9847f4b3b8fc8de143284db78dd61c8a21edd48105df13ba4170d290b85ab44de6f0054d811a670ec441f71301c6d9bcb5f357471ff080cdf2aaec88c913ae7d371d42a1c0c549d78ac55a068f78527d659f0878a8bc0192fbb460ebc89c2269ca970951288a6ee62008d83d6b1b82db1631a982199c4499ffd418cb2792277e37d2c52f3ece50a715af4867c16c713bb2eb151c7b20294e979315f7d10bf21921da5cd8324f7e289097af4d0e1f1f2a2524df0a65538e11f74f3eebc9e84843a50d756dc45f16a7e971093a288eb877e0e49ab22a026779dcca98fd50cd7221b5718281d22e999d7855a9809c3a56219651eb1ca059c1716d9c979a24eecd483100af8177b0530cfccfdde8d6731d16848f17f0ca6cab8e8678f5e1b71cae55a1d94c6c3a7ce8d27035347265df5f09591fc9a9dbf65826a24cf645009bf3181cce448cf05abcceed1274022539f861191d95d3d1fd468bd9ab6937113c1490a95676de07a569e2a588ceb2f5b51900de0d3ab3bfe53b1b4479f1ea33b5c682ff3d07b4804f66f50026944c81c6f79ad0df2fa2c5408da95702a7e3b37415b2fa84f6ace75a21f139dbddde77123f52dccfe77e403a506f908bdfc480449ef3baccf420fb3df3dcf8e8b813f0549549ca9a149e04f8240a60f67038a949681dbd2d90b7b41972d4a932abe63337e9cc85d27695901cba74b61079025068cc9a2ac595cead4e24812585fc99e7ece883a57925a39d697036f7f9c94cd6acea62fb44ab2f513307d69604d8ffe8ba196375a9a8d463d62ea595876914487fd07b7b28c2a916227d0b6eb7b026159f4ab151f038574c332d46de55de86945dfe74187bf692e57a49051e92487e44dcf615cf4eac2b6274ae922725f8341965a55a58f4877b704dc8386824e168909c8a1d158bd735d120a691ee710db70f55fb658319ae70a5f3cfa208b89da4357396ac289c237b23fce0908f2f49170108254c21481c006d510ed5b1f5d820bd3bf5cd90dc96ee36f02f7e67c5d4592f50faf6e5deb9c0f1a67cecb80b68ce8fe115c2ebc4920963af9221065962dfbf1bd5c9f9d6ccbb28ed58ff35af03667b334edd0a351abe55494d141c2720ab0725f57169cf492b810400dfc7b58cf37f772839c158c398a4ca41e35cd2c2685a0c8442816f9e477e3fa3b88e3210241405b278d4cb733be05b12f5fbaf4fc1f98379d2b665a0c43a8337f6e1612b6309f57de9a8820b2726c952764fa9ec8a4cb509ef5bd09e226d5962462cc987b1f5d7d0f3258279f54c8b31bf17ab387f1dadaa92cd6940bad2e1a791a35a117902c6c6e8d480c2f87e4f2e8c53af72722aa0219b7754e3dca84576678aa33afed64396e2970043b0f8d1e49344eb9eea6a65ef9df862909ae40429087488139b57f831b4185d10d82502078dd0a7848acb6c7ba40cf9efb5d3cc7bc3602d3b7650df132840bca19670f7c166ca96c40428ac828b503f97498e616ec4f06257eff8966299ad52643a2af86c36a14b6c9d6f5885e7964670db9cd80e5d6dc1e67b94b735ab78c0756d36fd4a2704d41a88fa9a9e65b023c7d045a6c4a59b35d7d3bf13f82203c720d0190928b39f0f52b5909e51dad388e4fb7a6289475b984bc6002db14e797447db3b3ed0fcafb5af7f988a96ae9b8e7e6d35a7e1eac54c108da1afb27d747e574badf60268f61bdd27a25001a554827c6d8d657b90e0ddd3aadac136fc70f33f82500e902891ff019060fe8797a593197fa2dfb189f27bd16cc38116f2cb6da16b84dfadae2e18d74d23147c2027ac02822488df6b14cc5935afa82d7398f1793bccfb5ba9c17e9615229d4caa841870f004767c08f9a4aa23f769874f98f2bd1b886104e211872a805e743db54f4b04aa3a374e283b73721b45bcea2338bf0cbb55ddb8fc5a67b592cf858ab2b0b7ca27c606162bb74fc824a45298932a1a4184b456440ba1339828060805e3a58b3a8c39a2a3b208d574e870e41dbaa4e3495c7bb471e82e21c048b51d2e1019f2516fafb0e5e3e0f48f75bf43bf93c6acae22d5be42011def7560bee3107ba800a4674f7bc7938974abd7478c96ba4ca32e6208f76fb0b9771a8911fa45a9775661a9a455fc3c85279684e9b4454ee975a76e21b84239a53f245c6fedb5136f381a0663511100e0a178e265f520b65e9741b6f442d0e73f48573bbb415143ec9bff3678724da65b1951544d12f5568a5acf9c453a80c8461ceb2cde69b019883231d5d649e7d3b1c70daaedb2c47166a15b40e4750a11edf1c1963bf9f9bf1ede36dc20cbbea19194c5fdc17a5af46b00c7197517a505fa2454fb21dfb924b614d54d8a99700c05a0f11bf39e7117fa2511c1b2651f50a046a36c3fac1dda813ea84c370d17ecd858b1c9d9c8bd568ca98bd4eafbf02f6bc6f4d022d496b68bd6927b0b6c6330e7678ed0d33bc1681cd4c476a76e0c15a09af53e425e53a43087090cc54ecc50e9ffc7e98a4f76bd97789edcc0103982975bb4325d5e34b47f661ecde23bc41d3bd436be8c33a3e5d647b955182b25b48732475bb0f461ce52b33d22399e62ea1fd5c5e209039f3a97c24670636a92a649e8eafd8fd539cefd5678eefe8f0725e0dd3ce889ea5617c3399126590577f7b143967f628edd3d506284cd6d2da278eccf67d27cfccaa929c987549d96bb72b48c81bc8f1cec77a4349fec79590344104d94def57a458c75528cf59acc02381957c75ce538e48cb9d7839cdecf05dd746f67c11afce498bf682ecb62942103d10a43b0c22c83aa000f23597714b62b5761274bbb444a504ce17ae5f085eb7267f761ff567a0ab6ea53305d77fbbbbef9be121bb8fbe23d4c94e089023c0c4aa3ef5517d19b625f56c696c1924f976f66bb9b624e95d5be3d23b23d4f8176cce19ed7512813922008c4c8960a0f62817e961b72a2a96abfced3855e6863059c5d8363f94f513df7fe66654cf8ea071e820466aff140dab5b150b0eaccc1a04aa25d069df84e9443284f74f411ce3951f777b01dcc3d5fcbf563fc25a73849689062ea9cccfa0ef248c9307ff3974eacaab7d9ecbc6baae161551aee4dab587fbef488906ef8ba9ff78505a15b74fc2b0d6d6ab96123cb81e200b374f8ff832ce07e7a4eb638a9042f98fdf9e44e8220f15f3b12f9109026d23f4c7bb4ea4d9162b63c952c88ef2a692ced20460549c60b67e409764573be168e07d682d2aa4fd6c1d2d113b7dd387e1b6add311e434766298c74fe58d51d1da120cb32783ec83da94345932e04dae4f1bc783167b2c45311b74dbf94d650f09c05c016f9afb57b98631de0f7edc8fc3e12b2aec1fac85b97742e5bb99462a98ba705bc41b9554778579f104b0a866b2bfd8155fb47fdf5fba46dd939e1e3b7da32fe3d9dd7518a9311301f8e548d5ac5269880e7ae903fa17f86171dba976029310dc0a3e163c20a4f80a98c6a260d8d468f32f4de311a3f4b7d33129f00437da99a628487a0049c8fa89ca251a1e29f1fbd539606ad4f3995f03cde6b52975bad4e4435beea6200022eed03f40c4283f267d1469434ec6c1124f08c062831fd1e6e2fe9e39c653e85758cb0f929b0fad1c25b9150e59f69edc62e16e40d81680c02095b5e11e5608f5d4b35236182a7543a876ac524e26c0332b04fa03cb1de4a839edab8051f49da2177384e918952e0ab376e3eabe98c2683b9d933048c244b214038053a53d65231d715bed19178b1c8c79ab91a19e5676a651daed398873f13cc0c2c02896db2b6a79f0d760fd69b6e61bf179787a4e28ecf86ab8b6e2f08913eed251d5a150ff8f4e16f347bb2e45992b9d2bfe2bf73f066fd0049862c479c2e54b33e8a0e733a14364ba9492af9129b6c69ca4d5aa51cebda0b059fd1109961ea5f2cfd973c38104df217e272ac16d3281a445fe22252a454d3e514e0a81518ec83e688479c2cc2cfdcefbc94742ab90a4c0e31f4517379f23a2adcfd06aa76251713d13e5a395785d74425720c35dd76955d6ecb70eb2789b95f5bef51cccea47c5a35169859cb0cc0072626e7695a507f4ed1fdb96484b168f97b7c62dec71493a087bde7464d83885fe18a545bc070471ebc6c4283887e7ad37b75f201f15ecd185f356225d7d0515e55995a5325b7c162e134a88bd717a0b5364da018ba42a5d32d52911a6bf53125947616e36162fc3a256257109add6f2de0462cd229f1d1ef603628ac8eb25ad597a13bdb7f2c9eb433e8568084b2321fb00a5cf7b64650e827c28ee00715d8e39033f7c2a9474da7143b98f6f32a359d295daff197ad15ca5d5ccfce612e108bd23fdcb84a78418f0bb7a04b03b85b81c925ee8f0c328d0668f7f2651ce68ecc29ffb0b912aa1a88e46038915c5002456873b083efa77e6db8765f804db181fd9b9678a9050c334591d929a4201fce6b743b66cd1812f94e5a9d1c8f8086720ab4b6ad1c4281e2f7866e566e8cd62031544d10fb0789fbe2b14c14ca39dc8343a980193a2d45214140712fb1aca2437d1257439e3fb40276a95be6de646f527729d1c9c73e9242fc572cddbbbe047241c8e3b7d8928bb74507079b6cb12fb2411e727b16147c0c9fcba603955df76a91ee453c7a65451aebaeed19dc4e327834bb7ab39ae81cd2139da228c82dd559f128009e3818abe0156f1795546f5b6353326086f3baf6df6cc6bf712bd9880097ebcb1fbb1d4358b0ae2565c57c132dc1d6d5a12550bc46386b29a2ce5afdd3fe2a9d3e1351df8311edf11d66139a12409813ae428faf3b9ea8bd9f489c1f1ad75351a5f79ed03ca45aac056af924dc20b07cf5ee29b8ca0cb84f991a8056e57b211841ea25396c5f452861007cadec7ed5249b9e178c7a1c99f9db9f65f65c66c2a0674b0c86c2726a1b493893b196faab55a0f9879d2a2917531e9682e744627ff38632c0521148567125aa0c254c1e13a1ad4ba1bd090fd3526f22d61cade0cfb9cb754a233f9b690128495a259690cfef2c5a0cf1c8f9fea6e1b12099f5f87615d55ab0db425fe0f80300e63208925baec7990009a60ddc276f52c44945d85a5394ce80c710da12d14eef0ae74217a6557e31ab5cecba0b453bc743f1383ee58943f857a7dfcba3a3dc4a1a2865cd71cb92b68f8e590cbf629790cee2ec0c9eb4fa4291e2b55a871639d41d7ee79ed782b01a0b3b76ce438d13ed3fb27b2130a1471f0050ba72345143d79b1cfa971cc7aee315429b998f21146e30447fba39d4b0adc0d4fc877fbeaa148b517e562ef91ab3d0a69760f2f7059c6c972cd044cc96b394cff97d890d73ac39e9466bec84b7cf5213689299e821ea895ff71163106d75894a1573ec771679cc99b7b872c645fc38a97c4696b5518d3120c4e73de36bf24d1c25b667ddf6f8d7803031539085144190f6c185b0e62d1686af0eb6868800923dba5a020c750394d8ade249fcd5c415f6ec18d5da1e49a2e4c3ec12aaa69a557a0ac82cddf71e4649b4502f4787634c682ed60465610497010392803c190a3b492e3d5d0791123b12c5adb797fa63b12e2a7234e910bc040d356b1a09f2cf84a064df23977bb78eace1386aed511ea72544fc40ecea1f3e48a44165592b2dc9f309208a977b29f2bfc27a71bf7bb10193d60348b04dce0b2a0ef1cc6be40f85bc6db6ea24445fcf45411e0f91233526d6ad3986e61eb304636a7e2648be821510d9000423191bedb267248664413742d892792909a1f57d597ed0f778185dbcc6736862879a605b1ae5d0d3547ea118635094858f1da90421af9d4964a42fb734a7151b35ae3eeb2447beeeb5518eb9ccc0537b2091cf519f484e0867e27b02fcad4f941a5b8be460612c85a60770df4971a96d59f199f8cfd967210e42647e3102c013eacf9a14897873f655c902acf7289e0ae796352c43e6767e523ba79b6ef05469c1fc22a54d8a5245428a30b0cd54aeddcfd33b5e97d588dbd73020589f41ebe721c0877a7c941d64c958549f5da053b7f7ce4680e46e50cd7e725f90396cb4e6be39c1d8f35d1b1a642310e0f43358372713d53a7f4f5d595853595d0e3dfaa8e478d23ea819b4f5fb31ffc1c910687eec49884f20d69e4c6fe1ce0e587ef1cd02699a03c5eae189bca943b4e087ad0eac4c8873cfe612f17939e429e3a346bc02b5345170d97dd95e1da11e99d41a79f90d0e9cdb159351fbccfd6ad185cf78db80c9ed899222e9604bf00ae318a9317a4e2e23b4d25cf0df6d0839959b4cabdfe081b3835962c262fa08b8862e5ac1d45a31ac5a5e5e01bd370f58a7f4e7baf71bfe8f3f8aecd58d2eda77819ab92889cf17b1c9a076537f40076c316908438282dae52b1807d43038ed8851bd115162330f6cadfe8185691a2a3191ca8b068a24890b12aa22a5528275aa7ede705e35a7fbcfb46628727706f14d975951755f09a41e3bcdd18ea671a8dc9fb0882678a9bced60f406e6b9e9096589ff803c86eaab020f210685826a6c3ca89a05024322973c4ac1766d6376d76212f733941af82447c347edf72e6fd6989a86323047b9cf6b8e92007c315aead8c64c6db2650344221006d3e8a3d332f61b77fe182028d108258cdd26d4efa473ad729213bc514be7839a105d17230fc7be6344a1e23f8a5c436cc78cac90e2812f28a3c3936842dc753c19536f78c5b012262d8ca997abf3cb14f2cbae99941b8163e31f87e264b687891370f4871eada1f13ff121b5764eb5ad15bee0c9e7f65da45233d1035b1bbb9e5d8890b5cfbbfe1f80cbf392f0d9f8e0fd4b2f597f534efc221a00c19e4e698f5232759bac7c518526ff290dbffd0a93cd6155ff13c4bbadb0fe985927bf44bf93293aa0cda3daa59a04b26e86f815865b8246962722ddac69c157ded5f9f12ed489e59f25dfafa61ca459a15d995a4f2ed67bdb59b75b121d3eca1ec50ad74e54567bbc4db717e352cab8c324841e1a9c62a66a411688db171c1d8e38c32abee8e314d5801ca1293e4433a7685014e0cb2b6c75ef8d562b41ecdf0185fb8ca28f5d07bd07fdc59979d21f4eae2b9abe9116682ca1df590f23b94f19787ccf37d84de9d039e0e76a9ab0251fa53a556c8ffa1defd83fd9ecab0cd5153f0297f2e47f2ecaaf5047a4adfa55e20e25fc280d7e33addd50eb07c220864e7b900045c620d1d0115a5707fcdac37c13a5bf0f988fe6e0f7e420f7583d5cd8c4754fb69b5279cab371d98eb7e073447571cbf91a30bf91fa6ab3b429458bbe78d74b717c9ebf3f0b94237ab07a01a0dd55008fbf66550ca47529be7ff58ef86f0e4c0218be38582ff0559087d1fa2efde014bc3e38df1c7ef77631eac7a11443e7991c25ef855a4e7efea2d829be3a86b8e1f14fcc5a7e1f5b8427f1501a4d734ff663f14f095f9f1052a0faae184bcab8133f39234baa5c13f5662392d89f41c109d58b66dcd6111091bce528c27e253042aebc58c44984c517800b4b1cd3de30ab37ff816ef426aec14c97b3a051e2267ef2db3219d9f418f81481cceb32918015bd92d43dc11a2066558a6235189185af9b391baec45825684f47c31db482d79335b41c1b182933d10bc55a9dfd68cd1517e3b0a491785c72bb26890a45fec573f75e8f8ae599f128153450e77e947e5049921bf93e5c01ced9fdcd9df01f915ae1a33110e0da14e2aab865c3742d92ead4eda7076a46c089056a72f4b2f4e859263d6e3a037272c5e3cb7a5442eb6f3d4c682673a1622cad4f3dfcd7b185cf1be9507d64e8b0581fb21844baf39d1daf955ee9a591ecc72ae75181eb9bccc44e810fbe0ae287b0526b2d7f7aacf421a3da32cfa46177e9584dbec58de026dcc4e5cea68f8432cb64fcf79a5c306a98f982cc11deec244ced30adce37279e29c424e4f6960f4c6560aa1adb4cb0611ce65f7293847c26864047c30f833b60c274e8b3e8caa17dd550703309a35876c6811a585a3e89306f7e8e8caefcf2de807792e2237ee0d3426cca7cca25e8ee7e8dc6dce5a6108bc0443d7edc2e58e8c471c6139cf686928cd0fe3a4228cb949c40589a3073479c67078ef834809bf707d275a42f056db7f1c9d70d8be00ccd74345fcd726ed8081ce60e08b6d46a124560f9457cab01da2265247290f338df04d20739ebc800be8a5e02a874f3d8cb9772086d00c29300b0155ddcdbeb9b47ac85b5206b53f1d6b2ae001e0705bea189e2bfdb0f882e449dda2924d6149a6b91419ec277152ff7a22700a35bd6c4acacc18408d72a7f8b9375392103304d2abc06c3abfa82f20b4a25b00ee3f97a42a0f9b4fcf813b71c4a18477398201cfa68a388afa9f1fcf3a41793ab27bbed3a147c17d5f38894a0a3a2e74bc93687b9d820b0a4fb2370caff0a57a18f2e352ffc725a865701b8658e7261b57305001b686bd4f20226af209d3d9ecfbbec4bc2aa9f02efacdf1c5535df5527deefb88b36d8c580a0cd0750687e7ab70fee42719b1860e73bb930d0dbefd0d01a5e010699852939d5d15b80ba5f79cdf5db0d0baa57b0938754552db03a2956496871c2c41b0c02990dee8fed9ef30ed12005b1dd7688c0e38706a226a8363267af0f461dc57160d4d28252e6827517ae5b23c99df37b113d4152d78dca75c42cc2c8ac591e39532624a2003ef221a404fa62e55569419f24425affbd9a16641fe26e7619315373450f11d5813b571e263915eb6fd41a854e8979aa2c12d94e3b6fb8a14696b0ad3bde5c8e22d8eacc78b3eaacffb3ff172b8820cb28aba8919d2a4092881c9e9ff9f157169447ab5aa3a25c0198d258ba4ec0b953ee72776328f3133ffb8af05f206b6a66a36f84dd1156c339e9edfbfc53f199777fd620931d7b8e98b954380a8241087a28695736fc8208d1f7aa570386a9d85efabf669653d6d5fef8f55deec26dc31bd626221d5520b94436349685c13c1160d6e163d9c2bd3c2f7bf3b0a5ab158709b25270e72661769e1f08ed0fd2d360bd737e5a072973be60a3608a72d34173f331a6ee2a78f98f71e8d69a2bd0391469beab9563fd851004cdca425691c527eae545ebe976a13a64dbe1870dd1734bb2d4c99e9cf9f0d48cea4e55ffe05b02ad52cd34ba90e635793ba3468ddd2647e3dcbfe911616b765f4febfbd2e77e4a9ca2c50de51e5649b3509b18e5c5cd71082771746b31bc9bf461d117b7d2030d3cd1815b1ce3af782ec26d8b6ff0b3aa57ac3211372f751a4263d016f67dd7c0ded478b18731778ae01375dc15b54175b66df531d8ed7e50bf9dc3751bf14c1f20e37df288b8443bd3a888864f0f103d80fca2a13130a83cdcd4583b3f63418a3f7b60a98be886a819a69ced481a9f93a8b9c40b484c63ccb77b21bb8228076a5a7177c2eeec91d81bda339de4a1f68ef699d4069672868f7684c1343b87b3573814f9889563cf492186d017f2aa880dd9c51b952c035ecf350a4eded946d987506dcf30189c006b0644044681f92882aecb30bb37b83202c70c7a916dc741a102950060fc7b790ac358a8e5c659d19227e708e31356deef1521d07cc45108e0ebaa1527b5c3606fae4beb69622c525bcd43b7c83b4747e18cb896a39b95da3c91384844f46f79fce4550f6262da0c4bef90e33d1d3a713a0164735ffe1212f128fdc53c201ddc41168ae09ad28076d1db2bd94e0c7f92170458ed12dd0fde77bf86590c8e7187726f7cff80b7b6b73762352a8c94a3dbe0820231422cce5103e768bd22c6041e90ddf222b766a6dad7e2b141445fdcbac8e058434a8f6a1b5e8617755df15b065cbb538368f08d53f6a43e04e6f76230dca1d8fad0be92773728e9b4021625fdd00cbdc94bc75d6d648c6b0802dd035831a89bba243f084ade64d1eb17c5a053f8e948e4cd9f4575a11c80d59248fa35175e5ee44dbe34d3b9bef524d6877fdb87a91e7b989f026508fdacdfdf56b107c020bbb2a8122367e6612ebd1113984d642b7836ac80a59b88fda8eb40ddbdf3b08e479f7b328df7b778d8e6310c8e90b7264df704d8faf8d14636e15f8b50d0fe4821380fe8c71440dfbc7896c3de6ab3a768f62b82e0a1157329676f81ed496f34815c3897270f493ab48b16b773545810737ed3c9cf1e5d402e4abe2d25ecc55bd49c7d7660504893aa93593df26ad74e94c2be5055d0b0d99c03fc5e94984b3f592127dbc815098c8b0f414457d39ce2ea02cbe3d002b80c45f50419e3dae73fbe2e8451549f5455bf7c49900434a61335e8b7b8eacefe1266138cdd26c96212b0640e72191b4d86a155e173e8ab84400b269dba6d9eaf2f37f215c2677fb97a82b17fb49e207ad5b9ae9b18cfdfb6763a13c7e1a61cc9561db04db1b8a64a0b1691a8716c87440b5c203b2d80a1726faf6c2b4fe3f363810353b1b7c8eda1e4ec19cd7fcc87a5e5d55c2dd529434b9db0a6f4a584636873e0aec21cc8f3495b0a5951b81d78a2b554a65c5a018c292300e111454f22eeb5180f241f1c535dc4714adaf546ba8597590bf9a12fe61f1b444a6d22777aec39e89b3e4f9991030912a187a12b7ab062a3c62038adc49d3bcb8d914f8a535700e33e17196feb96a0749a995e759b820d9ecdd95fd8fa959d8e78c771fdb4c285ed67954b2a0abb93c907ccbf0988f9970d266b41450f80bbf75b2ff31448c7cd2658b032731a9c5ddfe62003756256a8f7e56a67ae5235252374793578b11be8124bf0ac8d490b1d4afb8d6490f33880cdc1b07311cf51f1408b8fe787ef403e7b2e8819ddfc0d040bb721057a04d101779e8760e4729cb08eab080f9338b9fb4777d00e1f7575c1f92da4fb7d2752dfc11a93c9df58162c0cf0b173c36399ef3df4a627e223010f7bd668920c1fcc5bff1a8842a4595f2710260aadcfb044f4094e689458c1cfca87d7104867eabd17635bff81f686e54e5a59e438c9c2ac0fdfcb0ab400aa53521fcf89296976b3daa866bebe8a8f4cffe0418b3e34d482f646822b170eb2205a259caa627cd3cc61111547c683cc775c6484dfebe2672113bf308e38a920ef8d2175d1c195792d7aa7ed986f578284ad1ce72b62fd2591265ac16ad5dbbf8acf90228ef8b8cc6320f560bfd6804249e96bba39bae901f539d79250e2efae1c43c926e2c3f37b526804e5d127463520af56ff9afb01e6eb726eb5ed5f6d20641341096e6347d337b1bb874a309de06871768e82ce2a12ba3ad5c22a0f8a1f70501629b8f107218266b332fdd7c4895fdc5a0038ed01b981ac09f22c8afc7ead2e26474e176f4ac4c6a5ed228a4ed87f092b04a00a08e0ecb875638e3c843c6ff9fe62d40d9190d3fad83cb64744f0e7f0a353e3addf5824536c616c254625de99a877cf26351516223d3f2469100d08f956f1ac8eeabeebf02fa7c1ad93fb4398899f4201ca6844ec7133a84e833e63cf33447104be837d1e2f33f804e4aa01263ce59d74b14690f6c7e0cd252192c6d6515096a5e4c55d0e378c707a97d90281f095ab30cfe9c9d6557ac8856ce4b3886a4ccf8743a91da0e11acb56cbba62ad99debf62b7048fcc62a2a606366884ec9732eec8c4bf60ce9dd64eeb84e50b9086979ca58ee2375d0afb6f3488e8df9c6af4c8a2bec12744d3b321cc5f667707d7bf724e3deeb47b1510e651b29c4043dfc859f539309c73c70adaa09dcbb8128b90d3145c2769acf258c446a01424d93ee2f82a4aabfc20063321b3d4ec00c9b54f49919d4cbb64b59e0ccc7b9b990456d8da0b57a3dfee40cfea8309d6c2a001e2d8f453b93544f87097bfcfbef11457b5c7892a089365b6a7b5ca6928fed0e14955203bb63bbd83458f170b1d8cf0a298affdccc357baeb5b47fb1d29495b61a612df0da83c12990314cf20594a3b2304e8fc4d525401098959eaac9b8ecf129040d4f33001f7f0b75cb1600f607074cf5da61c257a61fd2aa55ee01b2c417930e64e9a92b7596647ba86b1900ae4110845fa2153c8437a50950a22922a1f3ec54a20bd465a731441a08ceecefbe8a61f04286d281299a6cf5c77ed7b84cbe12f5c14bb940b9c90f5a88bf2ed264d266d8dfd11a966dadc2e845bd1253086f0af3bf983fbac95081b385ea63b0a6df0b56bc6713bcce694514f71d47b64b09616f5bd876dd1ebe01b6190881dd5c5f035890226edb59ed173a804aaa1229667b27416621a9a97140c452433b1507154ab721aaf1a230a595b182101af8275e00b5a116551cfa68fa7f37a7e943d0dd1821980fdd394460a7d8cd708b43d477260c22a60c118e6bc0f77697211bf30f254dfdac0939cde5071b107d5b7c97346c4e5acffd921c8241ae4730ae2b8445c42659ba9f9357535fe1456c8dcc59dfe012ac06d387d66dfc4de07c0f3119d675a8610d36f480b041d5165a8f2839dcad2e5005b18c3a838ded54f3e2d0924c89173617fb5304dd89e31606dd8b66d79f17d5c6ec0d0e17d70397305ae9686e52ef808c875f0c718218ccd97d0f4609404a75efe46fe134b521c4209632b4501f51d0445b84393a61962bd5a3a823baa1d0861d2d72b6c3e8ce05909d6130e45d0e3739d6617248b63ec0a8d83d56b40653a4c51895a15da274651ab518d2bfaee42eab8dd28420296b9e0f22ed7fe18d1b6b7aa0c1427566c714fe8b03ea62a401ea04a9f8e7f34abd57c547d00b0f047f0d33d15144f243b879008f4c32944f2bd53d40f1cfe4623d552a9bde37952d13cdc31a4bc18c665fd0faa56bf0716f706f37d8b2226a4e183c23c54e507c66f7093193bd903ae77e0641f50c32745318eebd510e0d143c3dd271f9fa9eb3d73b4e834cb4c2aa8348a54c2b6dc399f4d2fb20b0e921c6cb404b32082c924fb6c9cd4a1dbcdecea337683b71595b0f8b7736fd35e90c2a9d5f2fd830c4c1108990ca8f39988e50ab738a83598a05356acb3397c701fc9b368fee0cb7e3f22369d6c723ecd56915af4a8fae3d77a3660960ab2ef861490acc7b992be5bdf3bc4ee69f46a01f221ad80c217b70caf75d76c148e900bf56348844c26171380687c8c7b2ec62652855c3c92ed4c61edac56eec27691f159d65b77b4b794f3d9cca8c53aed4f8264938de3434644fc295539119333f3631fc933931be165523d7987bcd2fdaff6470d3320baea52e0fb8b84336e7740e10ef75797f37d54277cbbc20d8eafe0c04ec660020b089a637e8eae284ebffdb32395165ad0e8e3e58ba40f1f4944f0ef7a7d5151be6800de2c3b94fffd9458b4b541ff116aa56a13c8292a46e2ab14f936ad55a848fa4019ac074050845142b20be91a6f465191c6255efd49bf5c17705d98a49d20e9ebbafcf862542911982f6a25a0a21d2feccb30947d7e7a5104456183b3c99a3ec3d55c2a2942f49fc4b4b304e97d0193579b87999c3200237d70742071d3a76c25fc2a83f64e089e0027859ea7e235aa0fd9a412bb069ff9d5ea3b2884959fa4bd47429ded9802ea65a993aab684b7d8dc12a6a1816f14056b724f613ef51760ffa160304554649dcde281d793d9c22092cc49f184453dd36a61dc409a28b81c4f84dedc67adee49f9d3432cd45ab8c249378194198f5d2f547c42111a2e72c3015f8c7623b381cb74e83a83840a7a595d6b117c6cdd1b1ed783f70bcabd0fade2dffc34bf4b8b10c9d60ca00d17308c8627d6dc7d12eff08e368ae4dbb0e541fe00764e80d7c9d3ccc501be6c224e0eb5369868841e581c1f39ffb006f78d0084cf8dc880424d7165fbd5dfaf683c0ed37be6b2f5a8cb5f7dae42b9d0856a22391082325c9816f866799c648630bd2376284bfac22628e285e69c02a0db32c22f9773037c32d0293ee6e2998543a1bb19cefd4c5486736bd3393ae5e28aaf5339c7cc9b7462d35594434b081beca33711d5d12c56f6aeb874504f88b05591f1d5d2b1fa20baf46ab8eee122519d08c36c281b5ea7e9e78cfa0d1b77fd70356be70276d22fab0c61b27aa5333eee4d2625c22664d28f7a0122e0c7c794b60a822156caf404bcf214a24600f0ab6ad4a3dfdcc550c351c30f0523eaa8c814432998eeab30a9644c4adeaa51dbd34404e2024a8805e6e13b3276632f60548678c751e641328c37298fa02a20b5adb90c4ad371bcd5ea5234c664f22d72ca24611e4f2dc3a3de7157d5ecc8f89ac028adde69d5c00d0eb0d87b8a1eaad2949e568a2e116db31efaeb7fafee512ee690f37110247929ee379e419ddbe874ceac735105bbdb3ee0c1bbb394572b7d477d0faa05bc28fe025f5a77ed8aa3bef781f77ee60cb7362ee547466263b834aa9e17cf9096b301e2abc2e5158bd4d5ebed1fe4186e0ca262883cef928b6a4e8f7f4435d0678012ef94fa165ca818d608286c13c652ca8d97a42106dd5ddbc3cae7c5f80395c03491058aaf786bc9a6b41cbde07d4831ccfe1e841eca6afc14ff215287cd4e70adbf7f314330ffa25817722bf2ee8ce7396beb10367f5f8f99f2011465d1c95551a274013a745670afa4fdf09530480b64268bf1ec0afd404e7248adb21f9368478717cbc589c0bfb413682bbdf63502cc410b5e4c637477deba641e1f7375efa6073101df2b82bc822feb95721ff11f1e9b6471d044740dca3871b0fdb92ababa8c60e3565d66a85e5db45a39bfb2e40617f781a1836da74937da51fce45373acd264d9561005ea708a94826c0ebd9f7849a90e1c3f8ad7ec8f4b9a64b6a223ec62c17e5bf3c0a41128fb7b89a42c52cb1e5a125f82f0a760494f5918f99d03d7d0cf4d72d4a95c6ff63550ddc6c021ff794cbe17900694df242581f098a5608d0d605f635de32c4471ddb97ce240f7a756fcce028a5688589843ce15322af7d321bd096586572450060bcfe74fe132b222d44f9fb2d06ee185bee47e8d79c9ed46c58b27344364d7007ed9f0987b8d6d3d26bc57897717fca4afe0fe81131299f9e1640120fddbb71eb8e2762cd06c5b2d48f840013e5af7a4c64d03b8cfc173a79c4192267cbd71863df8bc523e112a131752bc85dcf494415d69c780ec261150a8b3413c23b377c39a44d8f4651d4a484b86b02207e845b44eba60dd56fbaa8398e6ab8ebfcc15b6b73cb9c44e1510d6972b80455e9782a3e8a2c5795659a465d40f5907a3f446d883264844f01fa449503d911d3f537b10d99e1e408794ac2cba6f9ec01f74291a804dd0cf8d8abbb1bc03093050922945639809389b44114bb35994be1dfd70ee34c813e9032d4a37adb14dc0edc802a08e2660b9a83d6a7a70fa6b69b9093eed8b2ce3d75c36dc4c2d304f1244f44a4ab119b284556d82cda87c3adedf151f22f260a25823a753da5e7e0dc3380cc0d8ae76e484c7fb802daabe09eebac4cfad30380cc15f276ed42fe7822f08fd9d4429db7613ac170557a2a0f53f858a660bf471bd8aa3492b242ce23853c6985b950977a0f38924b622f170e61afb631088406a8b0aa390250202fb5ec728226854574ea4b5dfaa2dd69370063bc5fdef92b836bc3f7c98842419015277beb35b7cf44dc875e826993168432fa4e8400afdeeb63376a3429d94394d7cc46f58b0d481e4b12d61cb20aaf74c3378d60ba059acdc917a348818d068f88f4541d60ecd1538952ec277ffcce0a66452c684b6ac40d273e72c43d89b1ba995cc8390ccc5dc23c0cec5eb799bb69f6991cfc2f6066e07b1802c820e35172e7bdb7931aa294d1c93df624d84fe4793ac98b6ad34f6aa5a6d9fe25634fc34658f12b02f0d1808bb9a157d65355e88610f3db7209a201c16ee4459d874a8a3cd2e24606fefd348a936e396d4947281acb9ccb28300c4ec2d07c818d127236d13f6326ccd6212a4b6303fac2e774c1509c12faaedf5925a7b58abacb17ac547c9b95ef4a24132d2120b6d77fa6450a42404e43f44884bc082c2304abe5b22471d35c7a361e002e0525d7fc57ffa27439ac90258e78cbc53a374304238dcba8c57cc0e2f8a43e4b9b8d712f195c76037820a9faef09ed03f7cb3604497350488339c50eb87774371e62af10f0aff4baf650a4914749a92fb2fd7347f8b5a92bf807cf014a9573470baa348248c1f1ae1783cafc065d43a8ae473494dac49c7649206993d7ee9874de4c4613fe49fe5d54ff1273e2d580c636a0e60c85d80ea0d6e8506b5c9ae90537608ee84c1c1b2571f09aa3934c68370032cec18655495459b83ca94749b2d191d21bf76454c2211b9d493606bf68b9a1808932a0934cf387bb50c9445fac6ce01789d089c80fd628f8dd382a02e3a4485e5993757e73c1755c21257454329d2fca6820fd86704b3aa3c2d42566ecbe2882571279ad99742f7f384e3a63db5a2a138383a5233e84d33b9d21c294c4d03cf7884fd3a76f947d726a860b4593ef0a395c7d5b90716f94770cec4a18115c56830d49c231edfa7ce10a9367f949c50a606bc6b0afd8eb82eabdf2a72a3b241ce79c4f81fbe39b2b94900036dfe18ad0244ed325526288a01ac64104455cd24707e085128ceb24292efd02b7767a97ba71935bd4ae1b2205fb0b7b28a4177c492496e9c1e318a955abb9cba3502a5c8759a52c84b79362b8ed0605c37741cd4eb680e50a8f9a5470d6fe11620541f054e06289b839426f5d07d74017bfeb8587f0361be931608d0a2ab8b9e8d9f858726d4d15f8dfedba1c44b67007fd67213e3647dd1935aa0866e074d1732ff5eb7f0d2381327dba359548acb57c047f5c0a13599b2190e22f0d224f1029e96973f084b14e89b6f6703f09e1ac212540840a0d8a4b3c042648266b81693927fbde60a73265bc59b491e2e3d188ae1c80f77ec38d9b2690ee2138d49b78bb19ef8534e817ffc9766e917feb8a488ba670d37a73164d88e58ddf364b9d39e64a1363a879675e3ee6fcedb0628e532d5aa0f0ae3bece0a22df6506ae90f802a5946716ec29361305c21554b92b4fd6b1f68c02a7fa59a29e4cd10edf547c0d2238b435bb426ec10c5b2adc552c15813088284b47ed23db9c7d05e6214aff20cdf8a336dd7cece1a6ccb631d1c82ab84276ea230698f4dcb70e9de7a418989cbef667c4d7175c6759d67dff23dd667ae1dd7a00c1cea6392aa0906603d97c8cbe923115e8e15b02022b6e5b7575d5bf61cd521a80838baa66ce2ddcd37c9285c5622f2790743e045e2081998f343483e86af26761476a3dd99bc4d0192481993009818c3a9c3d244a326a562ec3971c41111777ec9fe12704622bbd27505cda4c6894cd70947bca168760df9f32c6fe32aed9fdedb1f406fc62eaf6dc1ffbaf78f5e470161588332113178415f42fb8db716904292d01f9c4d2fd8ddf0ff769c80894a886cae471998d2768cf3bf474bb6e3513aa062a7a87d21ea9e8d5870200db3710119cc9e6d11b32bad7a2b562b8e73e269c352e4bf4332aadf3cbacdf18e726ff56ea494dc64c7db1b7935ca43ccd73b76307a1a47225e865f9e13ad83de158e6ff2768c592b653795cfec5808a776a85b691129b2f5d509b5ab9a05e16de9d8cd476f59fd14da2744dbcb6cd50ef779585012207dada80574504719ae8df55940929c4a76d3e870abbb5cd456c76fa95831722ec5452527102ccd45f043c748da2f371e270e48abdf4ed8e299482d63b83837c5d787b1ddffac1091f846f36503c60cdb72b8150d87c45bc623d09e6d05ff37788970fd89505ce2994bd206b2073063ef02678fc6c61c8be7edd90edbfdb377a9edc76efa1c43d2b8dbbf681c54ac0841bef6a686812b57d4b96486be4b06f716965a221e483c5c2933b8fd970d6e7696731eb311e3fa2fe9eed85ee00096ce69d345c9802efb3e8d24395606684f8b1cacbb499a23ea65d541456726e0e0e1e2e370e5e5895fbf01e1d24b22ec37f6748fcdf32aacad056e88dc9f8f6e31915b63fa927b28039fd32317ea2665135f2cbec3b21ae84abe72f9139d7b73981b26f0fbb5b40fa4a2641d65d799a551eceb4c8bab99ae7ef55c6ad772520cb7cb31f71c3deb50b9f4c9e3ec06455709ee636c698d789db4bcf609fcb2c9f891bad113c82ed7ea33d96253176e7b9746292afbcbeda1f2801c70dfd9c2a9f9d2a5e9002935805e9b65418d1f77c67ac8c66d14888ab494ad016620d323066be59947391fe92a636a693644cbd167afd68ebac0d147536299c23a288a9d239cfa210620ee97e32929f62b4846d48d6ef77d4b26eeeb820c1e8d4f95491a19541eab45d34cf1a8e86723655d4edf471f730078638f2d472813695f857af85558d0e3b3f644ca82ca0a29ac7d347cd65dd1aacb2ce278d298e5206ff2c4e97a79ddbcc3d99e2683370419f03eea19856a552d128f01b1db59aad6b636a97935a00a87aa12893f19dca878447a26a0a1db9881a3f5a39689a630ccfc40d6db187701f1f620c766b6c5808efca03415015ca9fbb1e84f4c7c337fde850948920a3d317570a4fb8e8e5bd9932ef4255e49ac701f09d9f23800cdf6589138ea4f7a5035b87bcd44d0e4e4427fb44960adab7d03025a77a6f91b851874dddf4003e3426770bfcbaebb8e472fa9b600c69612e8679f927fbfd3fea24eda59ce51e43a849ed30c9690c4c96cd449cebb574a9758546312b6cb2e8112b576f531b996715d184deca978fcf10a174e1de0c49983042d3c186eb2ad642eae8a5ff693e2ce9c218252102b5d5cc9305432ccd7fc64d2c6a514ffc66406941ab4f85fbab00acc27cf902ac94896e09a9896479c287d04720482d4eb8d53b89f4e2422755f82930015ed04e629112630f998e35210393507593336ed3cbf84c7c212c36256f7091e8faddd022ddb648dae87026165b2c6a18b3ef6c38b9157c1b345ef303cdf2e9b91c51de1b5e535ddbef6f59d8dc5d46ac6bfa57592f813ae5019bbc8ff35881c9ab93344fa71ff5c2862ad3cb040c05e998ae8a248f46a2f8b4ed684bb6f9b1a54cc5307963da868b79e1e26cb4cfbfce7b3e0c2b69ecf1579309ade3dcf16e242838238d2d21718b184753bc26c9f1c6b5b04922cc777bb6081af3e1ebf7c8632a031842e7b2a72783f44c3f76844bf2a170b48c34ba214a934feb7ee94c9c4066621a4cd512326807d8a858c710c298f56f110ee71e20f7655f95dd3aae33558fb33af9985c357b86f03ad81e26e7c4eeb1ed06c588688dbfb6dfb115d56bee664e7d5dba5e2b9d7c536745c57d214b980b5f0d90d2064bc3851ab81bc32f3312e2d433ca9fda99664c0b274ce2e4ef57013d4b543eee3f51e0b460e87dfb8c156971d0be8fc4a3cfbd162e2de1f71e0a9c4a9fa7dfa7af2918d5bf637c90576ad95bde41a17daaa483a5ada71a893fa4040f60b2eb08d2cfdc281f2e328016695684868a524ae5480601291920161b62631c18c9fc5a770c173129e58fbccf8d42726ac033813376b2a9da0d43c6d000237563cee6cdd0e3c39e070fcc6dccfd04385c4625234355e6ad059c9308764cfa9778e4b91d404925f1cb10d25ba7f5c64661167c337f75c8083a887e96d55a324f0f74489461ddc162ea98009e1f98e126ea110f5d22016bd13e7dc4bb0692d32f0079ab7af058b462bb6cbd8ace8551eb40d828d00619c1aa6e0a7d5ad42b9242447d2b3bf7edb731b64977276e30102372b6f57eb15de4db9d0e14e8343d615d6bb9f4ef0f74061ebf715b89a057addfe5c6b1508efa4755ccb76699828ca98a4cc3fcefdcf103899af3694d78c47604a38349cdb69b72f84b6ed35679dd9ed75ec00c10dba62d8660c26e10a7245e51c66e37d5839c672773615f7c953ad9210e0b1f4da90293a65686c9219b482e5ec83ba492b436ff3bad3c2ccd1793fe17c2a432f8c1c5643e33bf5c4ad82a3587ca134376bdb3fae9c1cad303efdac1ddf024cb3d3207f521b584ca3f582bb9f41cead08db9be7e805f48b0aad0333e1488f2fbd456b6aa5d9117103b108a1bec7e4b73f247a17201a85cdff77cc36fe1e0be1bc4711dc75127dc313e2d8d038ea0f4c9099a28bd4839ff2ecb803e2c3a65ac8c0771f9d54228b4131203e389066b18a3a9b89c5f2854955b4222750de4a50268283b91df8910162ea22cb697ff2ab484106c0a18d177a89baff60b423796b9419438b9d736fa4eab4df0e9469aed9ce154b72cf33f678926c337ff125dbe04be6cadb4a93743f019c5956e4145bece4a9f10208071eaa90730ed43c669ab00f6d05cf433defea51d78461ee480ba1bd862ed258146a992d3add18c001729036c8f810f26354232515fe71d31adfd74309701a10152680bba4997eec0130f4a7537b8dae4e7c7c42fdb97d6374936a96436ccb9ffa47d575c9b14f531cae154407876459c4918b05bb594097f811a8089314310b9fa599bada78142c50b9115544dec43ac6358d45252641048b0eef25039b519a1163183b474287fe194c7555a8e73f63dd7bd0fe35d182991d53e9df9a649479d814c7497694b87f9241b1cf5636223c4a1f93b1316769a9ace4688734fae464ff4f2f7bbc1f442ecf869cf1ea1d25c3568095733cbfac0e437ac6367dd25c3508110f9b6b01031f4ca003fc11a1b452f555dd4f2fed0fda58f1522620fd7e8e79266135267a6b2c2db4ac557e58195f4153e805eb634b62e1378c8dd079bff0372b89e72377edbd7028790dc383cf9e06feaff50233b698be946c4f2c35df5d86485db1b6855a36f143800241dcb6d14923846cc51b82f10e892efbd0b701d7a6a0a59bca02d57dd572b5ee755092b7adbb93870e5bb7bff29530f2fe007686702b0674ccd740640697e0ba9f22b6cc0909ba51fe5c1643845d3950b99064d3f029f65385c9bed057b9e8689f93000f96757be7e7e9009ba3044b1052241044ad7c5a9c95dc21d602f1aeb4eda8325245e99338b03617102df052c502c7ad934dfca03e26f7a7a356c8063c90adc94918ad935001472154db2a9a45cfc6d3370b36479655791acb3d70834e1cd33f392d3dcffa9b1093735c0e581a30543d2e9085bd0fcc193aedbc0f0be8893db391623147ee0e2fa8b6295be0438e4c082a68b46c68a516a5bbd19c78dcc497cca87ac28d3ee973323a5f99289029e52c3e55e6e30876abaf76c5b5867de2b07c8e02a5f94c4df4ac10fa19c430a9fa699e72851931cd52b4eb79b84ee4cced63bfd2558ed001a01c22f31e4fe54bd90c0ea0ce49e34d90341e5bc8906a96f7732bb834f2beb0e6de77f6c1fa6c56c91fb08514b5818d3fe24541509a81bd1e5e5886ae600bfa341abe53b08b7c224a561337026acb0328fc5d197ee3aaf5f19307119445f5677674a600a383175255415bcfc82d816d077065efc0c6987cb59e14c37fca6e05864b5dfdd37ebe5b22d07b0ba224512a2a5d5c3889109b0bef0edb8e5031dcca8a716ab449e139bceaaf3c5355a1b1ab365b0c10196496495c156cd12fca41ca604b7ff4b5f290451ab8cdaf420cd111e327008cdc23cef7f0969f4c6eae55b5c6b256e7df318bf70cbdf6198b6fe394451d8a8c500a1340df36aa0ed792f248261ac693d127c768cca18741cc177d016b2615090e29af1d5d99b4a6b8490f5fa57552d6f55af4542f7cab90ea1d787729383fc7eb8ca40e26734d75884c15a8da18a70933015de844201cd5ece3b3f5e4b1413f954ebce49ea29848fcb7292abc91ba2cdd8e8b7545442b7c787c336b4fcce3a9925faf8a0033b755690eed8e28ea579fada946aef7416ca5fbdaf4efe885614c6f65b63d4be2bb3cc730ed183398f47423095e8a85e64aec2cd825c78704c5f4d92b29042be82a40eebb768ca78ace2fdc0630e94d22a0d663627f12cf72174972c57a57c247483dde45bdf9d47e57789785a4557664bf17a2b5e52ef80333f0aeaf2b89af59691dfc72c687d7bb2a888f77909e0d29dd542f44ef0aa8785bd9bc3a08bb732cd8451f7ed7d0cfc03483b5801ca4345f6741c612ab0c2bf9e86b329f1c177cd4f8c8326382571edda4aa83a8ea996727d107eeea679d815a54daf2a9fae13c9c6a3038e9f5d2e972a0e0fcbeae1833fc69ced80a5a4e4ed275f16c33790916632c199055e170d9e002e5dd1256856fc9db14a441bb44f1bfd04c0f2c94d2b83863d056da3d172c1ab43f250926a4bf88ac8ff63b20264fce2d50f7553aa1b13e849082466bd53de8b40dc49868593aa6023268e8e19fbabfd09d1c2eb6cdf314b8775b904b5bf8d84e624fb06e90b6d0db8ed5d65c77e61e9b16e418a411499763547e1d1ab516c17aa4dfe1b37e320cc56cfbf802373da66eac6123eead872035d8fb515ad455b801f8e40e72f28f94b3de46aae145563cc2a4968736a333abbd3c4a664769d96e452f8ab8421e8de9cc68103f31e2e15d1370d4832ee67cafbbfae5019684ed446ab81f26cef6f1c8e8edaa4e4d04e5f75978d5cd7d8a888be65205e4771f5196059e1d882107c80ff703760ac6ac3b04acda794a62f2e7ce1819d881ab9d5770f03e2ad3dc8334a0f76ca9ce0ae70c389dc6574ba624283f04420c1ef8741839a629ce5b3bbe07fb528e4155a00cfd5bb2852c28883e4549b3a6c183e792e575066f8b52de530e9e955fdcd304b101b9397a8b09cef1046a98d21fed5219c29409284d0b7fc52214e6beb333c145dc0148933891ed8fb57e044320c05aebf63dde993940a0b5b202dde4a307202632e2d8f1b99b6caddf8a66c6bcae687de123274e4cf6bfeaf6688a1de2fa792f093a61c323689383649f3b0266b97f396db4ff975fc08a8461c21cda0cfeaa671ca6ad2e3ac144deb22cc7e74679b014331c9c73a859ec4882ec90ae838cea83c567d0516a0d858ea4b16b1b2dbb2e84fcd377927b02140b5d889e22fa5c6e38ac8256198a51991ca109790c8d1d127c9a75c0202ab32fdeafc104287fb3091ca51560a2b6d5b38c79f45dbd1f862082e2ab893ec66a309440dab55154d57abcc8a58207ab5283d5c4bcda8eaabd7c038202e46009ccb16ab7424771a937ba31c14eb073a04003f0c5cad563aecd21d58069ecb4520b6361bda681720c554bdeda3e72102a09c918a5ffb27829a8ddce0da5a5d18aff9ea372042462a5c457043f8766cc8e563e8a39633e1e1af4c7cf242040b7397c94bd5a9c1880751e7858027a2dd55bd4837115d90ac691261f5b3d1940c09472a9ea1851de173f89ea2dbb2c05e0c80dba174c10b0d3c00b74094aee025fc3934751ce46c4b2562776b9b77167059b6624a9779937c0850e2b29a5524c4435f80e84b1648b0dff0c4abc18d745370e19e9322e92128f3501cbc44d6651c739c1a7031f9fb16cace2fb17bd312bf287ee07d721df461cd9d2a802c6b0316a9ba0c784d18342904f8cdab37620634a24edec3ab131592f71f370629c35ec766c9671d18fb9f57dd432506dc848858bf008eec140b6b921b66af343fd60cc5c89d419306d8322bc5d77ec87c0c05c46dc5a14b2ad1668484a8aedfbcdd16a4825d13ee885b93a792dc68b0873c09b037b5e8a778c57c2fcf046c8c4d5f95dec2bfbf8e1772b0a20ff696e134cebf0bcb1e10630d7f8a8dbb07cea8624320ef1d036e054a7195343c85032d726e6ee7a31d157a0f17cc7af7b2668785be3b219d0e62ae4622c79f902df5be3482a22d0823c9ba61fb33b8bf7051d7d9ee158c4cd6c2e555d1f3b56e8a8b83dcfee9a59d8a88eb67660a3ce6ba861c7e0793ed39817cf63636d19abff376f86784f029f3232f75fa337f358aff2c702a7a1cbb4fa089fe5d80ce83c249960cf0ab06f42d2a3fd3c9d393ddc309de7efd7b281467c6a8629a593b3c4eb2f5a366b812158d49a6b4029c3db65046f94fe013156b2f6b02c9c3a801c00763cd4888590916c8be5a77ca317e09a7a3350bf82d249a72ae8901b12005c07afbc07ae23c5cac7066e34cd1e46f6fb891731533f74bc2ee50b943527491c58190c9ba8dd727da40fb0c1f1de201699cdf2c8604cc9900a6436d401b56270a0d404548004ee624e3f2fac0670d82741ce82db02db2c9c53b6adf09342802f7677595138724ea2cbc87dc59faf1744f8c83ab95f40947cd825f1fe008b215c0e5a61a031f5068b9db3db34fb01e75946a779e431d2ad7240bdc9b02d0e5f13e38c5d0932f08fa04585997995e99c9a9598061a13531deb085df9d6d36df38eb951c3d00d3ae3a53afe4bdea3140c60261816f00b9c00680a5de5a4a11ba48ccd8901c3dd7fb874c7ad02b4a99043eb4590eec60da967ac602256df7715932dbc4e14101871d8044e5c901af36ef53e13a3d7141e28d9ae558c726e1f18ba72ff88fac2f3b7862341640e48b2aadfe1e589836645b2c863d4aa4b6663618bdc5943180bd40cbe6d92aad9748655d5b31d25c8b0bae7624bffa20d62522118388304bc3d0b59e1fb7b5a9d92ba68376068caa1fff3b930665205d8d006569964b34c624d3965545f52c49413407a20e9578b44fe32436d08001bb432d42f81e774b3d2c2a970f70fef000d11f28fbb2d1301e0397fef5b4068e031b36fad0adcceb20d1031d6ed60da236e70e73c5af0da87691dcfc186729b4549b12be091473d46da2409657e34420fd25b95395a142f2125901774cc7a7fb547ea363b8e7a52c39a1b3a63bf476334aeb7d4a83c569c09ea4d1f6c092516765bfca17a2561b453646258a0942185cf2accc85911f663d51aca12b0f117bd04f20d27f6832f01b1af1c49caff604424e7679696c01a989bd50caafa957a5b234acfccb4e3981f7b1bbe5ff7af492b73c6d7010163ba555a091106f2093ee916e1e5bf739d4a85b4a98a6d8a82e51934230d87185f70e8306a6f6adcd9e84a6e8ffb089c0b14f55f2b65ab39e8b06c0d345784f0ee3aa9b8fb4c92fd8808f289092d4b0dab0b2a0ba9cbd2d2e837fba6ac487aee396ad526aa267c5fb03feb56840f21d081fe1f777cd878292cb8fb52e89c161888d21d1abd19b1b29552ca8f7308703b0aa8e82ab05edda0699f681e6c61a0eb2c512ce809a8ab391cc63e2fdaf909089d4b6ad6d11b0dac95048e09c4f90c572090ba9a0ea511e2f52640ca68e863035349d087037b824737efde465e74e7040c7e09d2d80eb583e2fe4fbfaa1d03c1e49f6b292773d157f08eb2f41fe7ae8ebc224019e73e04efdd079a68d2dade6d4deebd654a2905760cdb0cb00c440d931f031d692b093afaa848d0d1070c841d48384dfd5e55ea54a9a3ca71859ced9139e8163099cc1fe6a1ec89f26898dca2fafb90e12b083fff56117a96c331b9a34a29b7ca771166408944a186c9d60c74fc6f9f15290f07b5b887f46e63f2e5ce76ebc6e43b8d13da1ef91c0e14aa63a2bf7f39680679614d41f9594b0cc061567b0e8953c51e5507a8fddd72ae0cd4c51790edfd37b17f33aa72e8b7560c94a340d58ddbed3d6cc167db0a71d04ddd9e85b43d91cffa5d491469dbe6b3b450ff7e7f9fa55e2c61e376e3849a0545a626a9ba8d6424249ffd34159fb57e927e94bc3212d2c8bdcd0bb5e4a87e8eea19ec89cf1c755243699fe5b2034349712631eaf8795c9ef0a08e8d54fdf7a98efdc4c67feca5a6d2edb35c9e78a9bca5ba963a7e524a9942c79c695c2826224ad0ad38dffaf1a75d2e46e3523e7ffefd35bf3dedc816ea2de49a300a292a6ac11aaf15beb6d7f146349cf0b589afedbb4f7935585c4f6fde2504e75bbf8512c0f9d67b2d21e8c8afed5fbf34679a6fe24b0239aff327e4f897e882eb73bc8ee8821521aecff12edc7cce2fcd4cc3fcf90c47358ca382cc97046e3ee787b83ec70b75a8c44a4a14d2fad62bb9799ce7a522f337cf15ba3c068019e8d2ac6cff4abdeb8d68af949844c8cdbb26b034d8e8caf123cccafca5e57037e1d25c5b8e90933ce69f132e5874f32247452145217194c7fc536898ab40e4060ded1f174a8aaf20f2b7dfb63a87132ead35aeb0fdb842f7e30af3533faea0fa7105efc715be1f57007f5c81f52bacde6b1c9c70690c02b111c79a56b8b41517ca66dae70c47711096a7e2482b2b5cf5702995d76d3f1de0d98dc84c1ef377b9e80fcf6e442606d330269fb1998ef9339aea4c47dda4baf7138ee201dd440e83bf8c1c55fd5b32d091a1be40d59a94116d9b33582c9d57f517398867f36d83fd0d94fdddddbd4b3f578f5d9dc35972eb1cb559dfde0a0dba7ad54acc02f9d47658efd34a5c5508732a1e21fdd056cf64d28e8e983ccd7b2632daf7e0b3c4a318380dcd8a7c2693b6fafeef54f3e8d9ce3a7d546e0c27374863b664b4000c32483891828d289aff060ef90498a67aa15e9ac3b6a77f15c636d60f86bb091843a81dc23843c09880daefa9c4f7d80e281aca10e82898873b0debe51efda5339acd71a14f55b29cb0a0587036507f5690333f699f171059c3a47ccd8f88d2d682cff82711f79c6802ae2f201c27beba5fa3ba557e09edf3a22690b3a5c9a7ae1dd7f6e202d100b033076c4cbecb7573e3d5d11385b62ff4b7e989f3c262cee13cb2f6c39e835ab55bd6b07e17bf610de43dd6dff4264dcbfa7ffa1fd6c40613effbaeeba3ebdb4639c8ab2b300bb45a64edaf7d46121871ef72ee37f163a14175d49530ea62f22b9ad0a0f2f73908ac2c064ca22c27a5c1fc3691ded4d79a80ab7cbdece761eede92fd38abc9b958e2b87d4a22efad56e320e905069e898063f22591c7e492d161c91cd91d96b25055b825d35c5b2f4aff73128dadc9338e63fce3de80569afccd0421ff16b7d66a484935241a6ab3366bb3366bb336b9e631f9251411d5963838be25755fb564c992d592055a153c267f67ab45f08c9b305fe9d907dc441d553a3feed491975e3f3297baf3236351e5330efc52a582cf3e108976c46d7148c7a44e8b71bd7c143848c7cbd7c0029120e773fce260fb15f7ac1f3707ddd31f55f36b7edc31526ff3e3a7fa9b1f970cef5b6048f03dce8f6bc6ac527e0478b65b0207e9102551fbb8c46dd8aa8eebc5870090445575ab18d354a32c109222b637628190b0a4c8e7231608490d12a9b779f93c658190dc2c10925612dfe3bc7c5e5a20242430aa39446e7bf873c4dd1e7ff938616a7bfc5be1dc1eff9bb0db1e7f9b900bb7edf1a7a10c3dec90f9bb909fdb265361265ed279f9b466ce39a70e27f1939c561de1b1d0a03b75bfb342bf369729ae58e145063bc8c284d6ffe3b39e3798e890032a5eb0822468fd0febee667ec2e377efdf5fb1c8fe541f8254c4415efd59e3920341dde5e30cd7639b38caaa7721acf273e17a8cc5f1bb16393b3b3b73efeeeeeeeeeece8945d2dd57be419b8e784c2ef9bc826ccfcf1cb4553e7b6189593deb7ffec8601ef4be0b891cf1d94ae45ac7e44b97df02821e7110139e193118a6b2622c202f7de2382b3755eaa5a6c4d1f59442c3e473219186c90781a0a32c95a294a36c4caa9cca6ff3b8140b0dca92fdf88cf5e050d1ea1704a2c20bf516be808cdc6f2f020e1a99034958d54ee4a5ed91cfdd407b035f12f0ef3fc1bfc55777423f4b7c75463466f298ac7997c7e45b11c27afa5454624508fd1a5109654996e8028bc863f2595df7f33b1105f115a4fbf9532c32bffbad1284c01487882f58e5a10526df411346ee219f1345c03de43708814d34c23de46f2ff3d9eae5ff2c105351c0ce38095e92f1d228e3a551c64ba38c9746192f8db295c84b1e93bf91415f1a2921e1822e5890e972258926cf6841041a54b4bc4089286a481b17193331165e622ab449d5aa383ad6d3abbeae53795dd7755dd785aaff42242fd44e15a65868509bbacfe54755fb7daccef4834ea8cc67d3a70cdc1a7c18ed8282247c47e033791a285ae16ad78563ab769f0ac7564d7dbf1cf4fd76e298f268edba50be2ae43ed53583ddefce9d3e6bb58b740b43bf0af513f5cbfa7f584f5e7359a2aa7c4f474a9904fb79990b465f4abae24285b4cf2b08f7fc2c16e9e786f86cbb88835a553e4b2e543b03b1aad35a4050690227fe24d191abfc927b3004b66f2130f92d1635cc73572dea972dbbdf670b34647be4cb4fedcc021b93fff3134208b15818ead031d654f97c035a82080dbb49134589f86cd3648152234d174a4f9cd02411654445392d45c1033568f28be40f89f2e6ce78cb33b296aa7c6fe6bf1eaeafeafe0a0ddaefbfe242e5bb7cb6bff2b2403e55fef499bf9c55ca16450fa7c7a45c9941b76eb396a0bce579f11bd1b67ff1bbcc63ddd3ed3921dc77a292ddc46d135dd85c1ee38d6645e421be828845600dabfbd4cd6b4455ff2221b5a315173af2537da9de88f6c4415c70d0c7415e07d53ee0fb7318aab440aba5faf31995587454f3ad37a2ddfcf83f76adfae384a9100c8f34ccbf15da840c15de84aee99a5374e1e63b28bca052a32d8da978cc0af84bb3f202027eea4191b3806211c6d2300781a05e38e813c729377f0293698115359a0b2fdcfc8df88215ef6fde9fade0204f7c01115f41be22de7f22124f5341f1f5bd5105b5e0a0ad5df79d38769f7aa3eab4230de3d23e2c34ccb1e0208ff319118fad8a9352c03dfcb9f0ebc93df8c1b0b907ff4dd8ea04f08342d0916b45c0ffdedffbc26e7e11702cc2fdc7fd73e11c524141b9d630e7bea7a82f7080699f71cdd430fcbd066ea5f92fc8491c0cebc60e6aa0019a29dca04118012073c41b5bbc00072fac684559a9e46fdd58dc8243298ee3388ef3be07c19a1245f0554e2cf2fdf494b4aaacf3bdefbdf0fb54f8f29e7bf0490a38a8135f403c4d9a9a7a4f93060c49d042ade6852400dffb2d010844a9e7bc90682bb8b5ee55237b60588384d3d41558b91f3faf723faa56a8dc8f2becf68cacca3db8decdf3ec46941df3defb2f1cbfeab13ec5fdc74f389195dec12196c849613869e6060eb43cd10229675c5931ae90c282268e8468412d051cb42b71543d3dd23eaabff99af7f76ac29bb0267c716f44bb095f9c587414f3371253fd5f51d0a5d9bc1521375ff335a2122b426ade46545273233ed53c009cd0a5ddfcd26cfe26e47e69563c25b49715ea35f54b8bc1d3a4a15929c24100898b2f20a99fe17accf3b6c1a2f5d84f1495e8a361fbad21e8b8617828b40f070249bd278ecc3df81d7f699813710f8a740bca60447e6a987f8b091d55ef7df72327b58fcfe77e708f9408c43df6a7c800eeb1b286eda3c03d1bd59156ce88c6715cab8625f013943f8bf1e7277f0643a3568d43c3ac06081a4b9c6c29597277774b310d8edb3629398edb36c9719b945cb76ddc264e9974d2a714884da544a26d93736edb26e7b6b99cbb3ddb6f929b17b6b53bc77d5dd7d3dddf4dca6ddbb6adc1205e39147854e12e6caa54e2a8a472539435cc8b1ae6ee79db75599f1b63963b3b3c3c3c78d47d49449568d7c932ba9999db6bc024b4588851e18892f65906c350c4708d9bb0122f0d21d23e23338102986ece904e8ff9bf4f717935d0719f8a44102293c1783075152cb268e6eeee6696eb2b16a7742fd4bc846763fc3cdae717c672e3ba2efc16c6cf857361fc9b4ca1b6ab45ab4c714ac6212527a5e4388ee3b6d06b091de3a42f8cbf4381ac9c097ce352b07140ba96847b1666f5ede1b87617e47aaf787bf86b77f5b14938e4b66dddd649b92d8c3f554f50fb3713baad9b2d741b9702ee3df7e6952ba982da73fa2c87c44eeb931b9bae223628a89e411354bffd0606d9004fe568ca95fa4013ba5741732215a7247324a3c8eeb99d51ae553d7bebf9db4eeeb76ed1231a03ad224494c3d79485170e431b3a70e0dd2286206eb6c4b0840f3351be9019228a1d6c38810c9c44d9c1931334e0418c34d80bcf4fc36a9b9161b730c3844ccd51774b992feae87a4a75c1f2ddfd6dbf77e6aadbc6beb5c4e5a873dc37e56e59bcd60235d7a980be1f3fa834003d751f677d650282789fd8c2f1c4856d2d239ff4e91f0b7261db6ecc4a8abc97f9edfba8942e7dbae39ce3c66d7bdab09e52befc167bdb24d7bdc775dd772747aebf9dc12a93e447759185adfed02bbbb2bd1c68fba7a40c9b3d2c6202af5350c0bdaa2e2844d66a42b856a37142b689c689d363453d06f5c155ad44bd46e8bab33d2ebe80c8973fd76d94463e3240365e405c7c01f9aa8b467ed469e4476b885eb142a21af9521ed3a92ac681fceffbe8d6da5c4cb25516648d814a29a7775178dbb6cda5f8f2dfa923d7179071ab12a74ad148ab6699737ea3cea42e1661b1bd5bdce2e73abf77ae6e2ec5213fc29bbb527e4f397777859ac968ae0574943500b5ff039c2a1facf2379f1f29be8ab6f7a902a8fd83e4ff28b7e4774bc9bf6dcf7d5f6bab122cc168dc2a8bb38d6ef61ff9e7964a899f2847d9b1d4e17a39a3f2bb2e3842f3bb14deaecfca85f1fcb66d3b7293524ad726f6d3edb99f5bc33896d2b91c7c939b38bf75edfbf6e3fedc906e911569c3bcb5a30ab904858dad71b6c217d76a5d3b0dfe1af61e7eedb3f29b4bd051d6fe915f7efcfc73abc9e7e4d619d3bae7875b1b2cc1e8d3a09b946f543f0dcabb74016b44c1e928a384fcfa0ae682e2d4dd5286873acab494a1c10ceaf5e08d28f7425775b7b021465b61e389c3d09bba5bd890420836989a60238a182754b0b1c459406ba2e0a05f9806827a349081723310838b47415b75b7acc1a4c41a5164a0b4ee96359c54416dd2f417947bc3afa0730d7782aacc9030502f8c315132c821ca8a1968692ca2b04431eda451487574d960d24927654daf63d5cd6cf91037471e194ffdf1d1b0266e784941fa400a0e3a51a8ecc8a6193de0a043f623f3f13304989719473ab8a434e9c8661971e490fdc87cfcd45cc75ca3861c239a5c367882130496209a72d032acd8a18504528e6c969105871bd98fccc70f9426285e7068194cdc6053049856195076a88912755386131be80f3665d080c45a6aaa41b33a43d9a80134a2c69a32327440c337e9fc28119388a88e6d5d513166f0847802bfb0415584d297450da923b07854cc3097a2544fe4d0099152824342cc8c42c3360495ee89546ae2c898e106ffa1699bb2389af4a4f3a34724c9590689796abfeca77f94551fe2cf93cc67334c1937b8b6a6660542c9635ba7b85cd33faba47154adeb5421cfd36f4eeadaea6e5103cc6c2a801adfd4f9ce6445bca5bc8f5fd5039d1f0f1aa80d1b3c6ed0af8c2ef4ab4147d19a18b80ed483814ca22c26fa060a167185ca21a40f9453ea218718be30f1a71ef017747b83d1a0738d1a50af0c6fa2291b740e5f685777cb0cb2a8a3cc9fd054dd2d33e0b293a6c693a7c29dd015eea43855d6dda206521d5d9c166f64ae7aacfa78aae75fa5d5e3ba8fc37daadefc387c8550574bf552aa8f439bea791f87b37adfc7a18fea817435591ffd386c55afe6e3d0553d9b8f4359f56e3e0ef74bf55adbe4c2f9387c0111479dcaa29156dd8619552fe7e370b9540ffcbc8edba411b3f3f05a7164a1ee7bc86a83f28646bebacfaed33adc5d32c7b63912a76b4dff91f2865543d0fd699236aa1a8f7ece027905067533f70892d2473a6d184ce6ae9f5f0d75cfa6466573e3ee2db93b3b1cffb81cb9e5f8ba2a945fba7677ddddfd47cae93a3a5cf4933e33a8997b08c96ddba9f2a5437da4e49753964b4a296155eece4b47872b470e4e6b67b5dc637f6686b736dc41cd3d6a6a5396fce46a93524ae9aa929b5ff7556e9b379fb747ba542db3a852a5be946a4eeffbdd6e05ddc755e6b9057573738f9d712f45cae242c99a523afd467767d930177b3d9b6f4129f97d571cf797d748abeed78043fba3cdd751a1eeeebe37abd1a8ba66b8a92edd9fbda66e3345d9e3b046ee2e0557ac1f65df2f65852bf00b79635b8fa0a6fa7bde07cad4569d675108078840f5674ea88b523395da5490e214c78c84d3549cedf1670ea7486aaabc54eaf58194cc49d5f8f39429cff3a60adce101bfd00bc184eacfa9e754e1b63db60e05d579615b77b539c8b9b95a436bb6c74d08aa3f7bbcb16dfbadf16d61fe2c398e377fe6c8a0db3603337b9ef781e0e7c98e70a5fa55839752791fb8624937aade073b6e767c00c27fd2874cd6e3831d30880bde5fb3f30a4511002327cdef2722c441fc0000cfecf2b01f2f9d1d1008ad45780200f280c1740220800f0a8a08c7faeb00cfb8b6e3b5d6729277c962ec824aedd7a162b8a6430003f8963889756066b14b82328f0ef089881900ecdb055a7addd47dcf892a95c259012cf68d34c963bde3e224a51801be25a2362771d2eeb033221eebef206affd8c9a2f68f3c5df058c0c6fa8718a18ef5b7145de00f25a84780aed3e10283b8e05d00ae8aae1c609011d4501e3d5fdb708ffe05e913ca9f0ac31c39609011d4d01e037c9379c8c13140d78ddb73bf38601030880ab6225bd7434aa11f71d0edc7268f641f183f7efcf8b10dd8d99c2291f9e37e51778bad4235678ad2242248d01046f95c0e08647b7f1c7068d3f186b73c1eb7cbeda6f60bcdd9d4fd7ea1bb9a144da9823c35b9dfdec31e92fbe5aa4cc1949ce49855deeaf7fb11f6a3ac7e9e7cea7d605de60ffc7681beeed616b95c944af945a9540a5c7d40fefe1a81abb3f32e4c4a29572c55ddffa84eddb749fd7eaaaa4ca062d12fa7eeafbaca9ec7791eadf9543c9bbe33ef9727b64ca4f29cdff3a5e8de83fb5dae7229a8f25d89ace9aaf30b6dc355feb947e8cdd75c99b7a647680be79bedc3fc2e7fd9c3f12afdd737a7abd780cadfad5e0c34c7b70bd473ee2c9512651deb1100aa1f5fde8f37de9c2a2ae31e5328ff28f35a37363594b5023f4f959a1db7496fbe59edf64871a3badea124e584aab37aac4da38ccab37215d59f5ff60344e53afe188242981553f98f58b1aae39a414a6a1fee49f72343e1672a672a57a9fcec85b1e8d93631ff8e0ca632e00d1d8e00838d2774c084b6699a20c30b0e71b4204a17da489bd6cb9e199989b190015353a99fe0506a76649218ea361e6990f1e92a6502d26041f5ef095553ccc5c1cfed7db49d37d143d61974fc6af7bb6cf18f5f6591323824bffe8f328be35637716e976159b94aae9c24bf16145e502c63706039a16105972a7f050ec9d69532557e51e5831d48ca411843689142250b4d56651362aca0011294195c41930f5bf9725251bd505146199c1174dcd9a97cc694da2ffbbd9696336410ab7c1538245b5d7420e6832a3f6544438d0a94285c8006aae9051b08b10217d8c0822837a07559036acea5420745d4fe4e8b305b44d58218838725489adce0890b0c78f0f2022e5538ae0162c6a8fd1b38d434a0e30e8bd952c32a5f8243727e5f0a4f825862891b78e04108da48ab110baab4c04a1925386a5e68923de6446607df8e87031d772a4b1d34ad724a1caa440356299fc8026d953cb7fa10c08c29aafc2819def6b28649c9d58de5c5d54faa7c8ff97dc67a259fd53c2fa9e031ee9142c3e4f6c86ff5407f54f94438b0b39a0a6c4cfe1912b67aa5c0ce64fe034695b5c867236c4c5a51c7a5a2caa3655f39090b946441205aa024dceff60059a0245df880054a327f740559a024290094b04049543c1058a0245e0022b040493e0198b04049c01fc0080b9464f53bb667c9f6c010720cdb23bf0bf9687be4cf9065d81ef9a990996c8f7c55c8336c8f7cefa3a1ca07b986092ced4886f5187d193869156e0db7ba8b5cdb1e595daa40a461ad1ba8ff8ff6e17771877b6ccfe2ba85af205cc4d530b985ece7a7612d6b98fc6998946de20fd77cb64300f2554fd0916be30e99cf88b4eca77df68891b8d630988b0707ed700fb9fd64b9bcb092c7246b67bbbc84257292c76a5c3bd23049847b4856ad41252979fd19e1add84bb1583975dfeb180928b5c6c6fc6b0eda7e9f0d0eda9e1f4dcfc0f71e0cf9491208046df940474e6a2941fbbbe7259f79e24bbec74e76c6511b4b5a20165f527c49e07bf08578bffa4f546245c8f79ea8c4ca38c5f3bcf7c41758ef02fdef955811429f8a4abe073f897730cbec8c8f3ae61c47f55f81e13ad7848237d0719bdc8afcd583ef0f0027ab7ffabdd752a2231f75ff0298240e6a1d38e809076de22b0877eecf4f2a2de8c8475ca5af7096554d09357703fdde7b465aa0d4fb330debc362188d85f9abc4232fec9ac79cd1584653c5b40fbfb130ffae53e4a8edf1b97d415949e4a4fe4e3cd23013c41740086ca212eee1ef33effd891688cf00d919bfb131ff9f9f104288c5c250878e5a2381a6792247914179c99fa924297952940c994ac39c93b887bf5077cdbf91a2ceccfebee0f197432b2e548883ba2a5f84f6592422c9fe2ea73e9d43a161c4d4880ce5cf3a43c77d62e2bc1a8ea9a666c9520dc77405cb992cdd5f0dc75453b33658aae198ae60d901962c0ef640b9890449680749f0afa911b73585a6be4585822370cf4d4012ba3a5109b5f6c9f9f6bc57e5e48417e08caa8b23d723fda47d46f6ae2d43d3183e7364d34a3d6b5aff26fd89bfec1637b8d47e0ee3080b0d0ef593165a68586f0efad3f005843e7da3ea6dfd395844161c4f601a96d4ec31949751ddc491997db56dee79b83d05826eef6d2157155cb092e37544155e27e8fceb5fa212239a8ed8aef7d0abe7cbed39ef35c7257259d09dffe073885fceb3946f3dce77dd8672c4f9031d394968c88f505f00042ee2c042d311855ca889c2121a06a561cd4c1deb9f37e238a94d8d18a661fda941b9876266190414435068581735ac9b0137b0c10b271e6121dcfa1135ac9faf14f98ca1e6a420d443c18a8eb4d03ebb02a11ad68c8549e77582508327fc7c8342763cd1768832678db382e2b75e92c83aeed32853614dc8eb754425ecc6529a26da4b8479acf399225fe942666a986f7517687db8972ebe82d4ad8e2e54210cc5621a3686091dc24c4c740d86e2a87e3ed3cf50afdf7182d02f78c26b87a8e415054d479409592bde88d244d379a1f674c2a57d102a510275054c8da6f33ba19214f4400adaeb3ddea03686ea193301c562b69bf4d393da676af751edee4d7a51bf90fe216d78a9fdf441b8341d7777064fd8966ca1bd7e41214ec415546a349dd7f97ed84eb8b457a813ba3cd6aeda4cae7e286f9504edf7983b8e739ff3bd39e79ca3919690fb9cb1da2188a1944f05158734ac5ff2659562d10b6958ff53b8b19efd0aa8fdbf3d5be8d7fe22ef1fe2933934bce5196b9e6abfd31215cf13a289d5445960175168d8d7b0f9b27aaa075fe14bc88b6b68cc3cd15e6f44d3095f4274fe83ff4054c213039ace1bd13c1df0fbbb9f3212126b0bf5dfda3838dfdfd7f9cfefc2c93de4b770dec1a1d99aad972123b5707e71de93dfc4f172909093d43e499d8a835a9f84d4848346ee27f7c0799cf7182461be6c184e87b371d2e41efead50c53dfc1b1cc16b97e373c21cae90cf9841f2f6d9da683adf151174acd9a2369af671340d83a1e982fa8f6ce60ca329e24fab5546d3b0de52ab2e321baa26ca66d8e8262ca6d647edc3611ad62f32141beeb5fe7e0179aa2e32187e5289a1fdccd43e235351fb7b34d2aa35ffd43eabefe72fed43bf594b36dffd4cc50255c15e16a8fb7e8ec10271dfcf562cd0150bd4fa7ec6628170be9fb358a09cef672d1628c7f7f3160be4fad6218e4655c77b28c3247226d97eb7a70b9374cf7949e6eff6b4c224ad4f82f3bb3d3961929cf7cf1126c9f1bb3dae3089eb777b845c47c87a0f572fb7e6a838e1d656275937e1cb5fbebc26945d1f3552d76640bb1b1e50d0296b25c546aa31a1e0a75ec859e09a42b24d2be0c10bed75044d272755a505858e5d6b257ff1450222eefd895c1c3b514851fb48f14502a24982164a0042953ea534ac5b4a7b9b19b413b965034dfd2b54c2059106982a684a5ed8d06cbf5b9ca0e93c6703dd4422dca37f5c3144b88709fdd4b0960019f4fb5ba9863484b797e28bb60c8d0c6998931168dca855afbf57a884c534e9418df67a9d5089a8034de73dd7ceb70e10bebfb1ecf891b684a0cee1f74b91e08effe08780f03b61f8921ffed23efce0ff4fd8f950740184dff9175db0220484df791776fc07bf346f85060dff7f45bbd654fa7ba93bfcb0a9f4d28e07e1bbe6b3afb9beabf4267696be521b8410e6b11d61cb07e18d682f292611b2e3411095ec1027b0b41f8ff51bd146d82f6d67876845fed23ed8e41b554f869c85b134ac77ec107ba9977a494ac3fa9b4a2f352c8794f6692a1b32169f2dad77024deba3867523895deb25ffb16b45471f3496dabf233653ed7f05114dc0b5a9340c2cea2596a713fe6082b6e2425fa192461a82861c682fc8fc7b898352b5bf8be020314438c8c507708f7e22eed12c27aa0207f9f78f3ce3a5fe657641ed2f427a622f37c801189a4ef85c681e8324a4a92e768d7bb40a0deb259f350c1ceb6f23ad54fb4776810eb46b58a266b62f5d6ba6c6d24b4da5661ab91a0064bce5f196b79f945db76ddbb66d1cb775eeb4a4561550774b184bd55b16e83ad5a2602fa6368fdaef711f83432454e164448df68d41c11d68ea17bc40eac11ca82a5c9aabbed08e13536d430ccec841ad1d832370bf75e2c8bdbf916aa4e5e194f9d4675314a163fd2d6b4b8430aa3803cb1869ccd8e20724aa80c187333ec06186d6ff30d98349b90daaaaeb54b362086a53d7a98645e2e05463c29d505ad7a94684ecf2e3549d71c3868e062f343cd16848b9cedca04e25da9cdf6a9ffef9ae39e79cb486311d5b331ddb1ad0746ceb51c7b6ff0c163ad06c0043c5d31917243d9db142036d06a4335398d098289d8162c3151a52968e6d1d27edd9c412e3515f245df1c50c3b75b780d9d2248df0c6ada66ae5d1b0fd58ed19f9c7fe5710aefe6215404ab6eca7bb613cf68f9e92cd523e4b71024e93796c5f41b8f2346c3fac01a81c72751b9c61ee3ca4bbac7fba4afec4a0fcfdc023d7bb03e3e5f0ad94eeee2ee6ddef87751fbae95b1cdc6cc139ef96ddec3ac35ed8f65c0ab8ea9d772263f196677c293b556aaac2a2e9b137a6949b6f4a64cb4d6e5fe5980bbbbae49c1377fbaea519ef553254859d7adfbad981452d38dc3f95fad4a7c0202a1867955deb93dbabbc3991a6befe3630880a4629ce4fa9b95d365ba671c124953a17d6bf8da6cbe4e121ebd93ed56a351968fd3f4fd49e75fc3104856ea79a0eb5c18ec1ec6e21524c81e68989328ac8d24b4a7411868997a52e683c7ab6c3b555bb9dda11a08e3cb5ebc114b57b4a9343ed9e76ef4aa276ff69c4d4ae837153d011f630df941374fc1a50c7169a2c260fa4548e0767aa6b6eb28e3bf254b9857cfaa5ca3894a812cd922ae19001266bb5ea2e9b4af7c41ff12d78c618624f57ab21a6f68b405482906eeef1c69599858ef38d25150193bef7c053a942efe626491e8343e6ab4ee85ee6b1d433113e4212a139b05268ea53a927ead9d4414da5526f5030a9d4ee6eab29e0cbbae242474602bf077f69a9d7099d0bde77bfb4d4135920aea9e7c002719f7a56e24f3d8bca0231a0a6be033c9b1b4b3d3d63d9a8a95f8643b63da9efc00527b0d14011e6b1d41794db3ef55fe885d3635c4a2c426bdb139d50c3ba677048045e20ef87f8e7ea399188c7846ccf892a78ac7b23da4837d50ffbf90e194bc3ba8e3d916b4d2b5f09394bc3baf756212ba5f144eda77f1ad6fdd6ee3f38e81033987286b685320828685f19da0975acfbd95d5702cc052bfd9c087b9fbd4ee09418d138f169dd532168eac3aeb65cf17b6595c865418d6846b4fe71eb9eab477cb67df744b84e8cacdf37a87a2f7c7d6212138634acfbd493e0efbdac5b5d3088bf27ca7677bda6eee0d07bdf61917e20a97f01e9adf61b4910488b9fdc1e7e098e206b7b15720ee7ab42f9334524c202f1d1f674dffdd0ce58868d75dfedece0e08060f79f1ad41fa447d06e763727a52ed77723ac7aedfe69ddff749d0a0debbe45220deb7ed6aeebb8c99be20d41bb7b08ca43493a2111884a60212d1003aafb0cd630973f29118884a60c7dfc68d8eb84efc1074517acccff44ea3177f9ec7502f8df7fa20b9fbf148148a86110e87f0591af20b3a67ed6942882b1859afa6d621048aaaa5e2516790551c957893c29115642c35c84a24e803f17266181d62aaaffd0f670a19fad5f8a2f7f7c4e4ab709e64f692ef4c3c73641a59aeb0154ef0b35ac7dfc7dc6bd5c2e7cedcb3c7cad4b884e171703da3f42e8fbaf6d12b5ab67bc43d2ce8e3cea8c2b553e0f59cfb897fff363c9a6cb1960aafca29e354dfed6bb5dd080aaf23fd9658c52955880781a34d5bb8c69a22e540fdef22c7551eebe25658f4695c557f746b5133708dacfa1a71295e8bec7dcdbdd9911f5a5bb15320485334ff6cbeeeeaab65a81cfb59eed19493e5b19a9ba8caf74d3963658e9a98e2c85a930d30adc2d6d24557f1f3b18bf3acae4f68f28db0d85a0d0b0edf35439de737e4ae1fa8805071d69eddf6f9042a1b28ef9cf49a9ac61db1894913e3568f77de1918619512185866d2d78435010856c2c281963865573d37aa7922235590da1ac9a9b16f519276dada112055148c37c8c1cc272b1ce50212834cc9df5b4e6fd19c9e66d4269a47de4832d9b158bd6c87cc6484ab4b695156e95a1d755b8f5c7a50b14e9b861c097df5c837ecd210c188430e387278e58838a1a68904617259aa0f9736d7ef72f21396fa53fe78d6839c25711cee3884a9886f34634cf433e62246e8233435e0a594ac8541a56a56139e1d270c2a579dd44ae31a13fb21add1f65f5c9a671c078cb438da023dd9e39d816befc9fd6e1cbc51164fda91c135a42ab46b91850fefdf971b3163b99f3cedd3b6e63fb5232171ea7527dd77d9293de8faa4f3dacfa065141553d178eb022aa9ffc5e7f012dd45b47e1adcf3649a371216fcc7f0bdd6b6a3fad71f09683e4d6750b797bb8b7d756e2adcfb82e506a759ffaac93a18eeaaa3980ccba853915a77621b7315f8d4940205386adea719f0c6faa4df5e627c39aeaa53e19d2eaa93e19b2aaf7adaaf77d3204ab077e32fcaab7fa64e8558ff5c95055bd1a19a6aa57f3c97056cfe69361c755aff5c970ab1ece274359bd9c4f865ebd1c9f0cbb7aaeefe5ca9183a3a3b392a23f376f02369dd93e2f7796b5daefb17cfeadb640dcf3370b2a8fbea43215344b6694c62485a9dc486154fefed2b3ae79acb6404f6233d52dea98624165a28e73890c6a6d7bfab7b0a332460969840faa14534cdbd33fad701fd4aef9acfbd2b1fe3090c2248da9fd9d99dadfa1a152fba9e2d44dec9e80a0fce356abfdee2eb02ff38e665a2010bc5b55e366e866759df46ef14112ba1a71cc50585499407b1c65fde8a2212b5c51a3bae09cef1a69ea476ffe9e7bd5077b25bcc44a9cc44867d0448959a805b34ffbe5c7f5f23f951b65ccc3c589a34bae4ff7330c9128a9d353306e48b63076532b4579e1a533fb34c22af7485aa8dd8f2f20e96a27676f1cf72bfbe797dd365f5f77b93e53ebee9edab9bbff4971dcdf9e5b7172bbfd8abbe26c9814ab4b36bcd9f6e30e37ebe6ef6fccbf0bb95bbebfec662ebcadac77a3669ab79d055667c35875bd1c1901850903de7ec851e83a4969c2ff710f3d54de9e152fe0710f659ca0d4fd52d7a9082f15a7f5fb44465a753e38c5b1bbaeebba23b59b485ea8e08784ebf753d62283e244c155aa381581a5c6ea3a15d184849a6771fc51d943e6495d9519cbc6fa9a2833c7719c8d0dc72ce435e16804276c85b408faea7e3dc612475af7a956a3bd3ab188b1786c7b6ef2d8f62e832f5c70a9d1567f04850bbe485982075ac061c482197c3033650b246c20c6aa13755c6cd0af89723ff2d2abe659cf5586af9a974fdf93b5cffcf77ee32a75e3691fcfe6b7e7e1f1e7f913ef6d6c6c54403a4c5575aa70ecdebb71a3ca42d71bd175e01ede0b3933f15479185769d8f64980507188053eeb1b8db4b8ca2ef98cb3746cfb8d0b95ba2d3196ed0cfa5b1763c0d0c30d6cd8f0440adaf63f3ee32183143b8082c5942d86a06dffdbc3b65fedf03dc83800bfb08432dbf645448eb08082112143525001ecbe13e936dfebc2f65424a83c71ecde045c5546fdaab0bfeb5c0ddbbea5067d9990d7f1f8d13e9d2879603e364eb4010d6bf7e7feb689e39c734e576d9fda5c156e9d45fc73523ac4b7ea3d03b2a0f99c9f9a2a71160d1122e2aca0fe2a9518bad8a0e3fcedc79f9cc88208420b246b024225ac061159c0d05ef8907e6842b322df7bff18c064b03478177a3098e80203218030d302272858810ea094a8418c120f68fe0f9353a25c8952c5b91892ba68a2814bd0233e2bea27f1257f0a1d5949a6e4ace44b61eac84a4b6178db0243d729ca983ab252d456a72861aacf96f6f4f474242a2a6a464515f98ceed22799ff9c94ca7cc63f6ccc3f4a12ce2cf04fe6b3a5fdd058697bfc3d044b3411c60922b290a1069a97b0851b579ce9a10da417d0fc8fb4c0e07f330c1d67f529dc764c4c32244586d2307f12b6b2520e14e51f59a92935c6f833d6efafacf3f765ea65dd9e7b6d630bfcd58fb0fafafe7db40f4b94c97cc6d33c5c50fe51c6b30a611deb07cd107de1f4c24fcb54a5a618445dc803c6a3032122d90f6d69112292fd285126ea5b1295fd3c6cdbe18747ed975ba5ae9d5c653e33c1890aa41c9caa3022e900482081841251e4e006135affc3b636e8cbc697fdc0b61bfc833076658ee9aecce5eeee2d777787dc65ef2eefee6eb76a950f1c6ecfbe38e79cebebebeb3fdb67746f91a1fb5b0d947feafe0a09ae0ab992fba2bdebbc98c165286aa0faf3b66d3b86556e20acde75ccd28b1998b9ccf685db6370e994522ab76d738f617377339c7cb95050f06da6e4d72958c82c3e373b198e6295dbd65c900d4c10c86fdfec6cfa6c8a473ad6efc31e18eca537cacb11b00d2a3bae97b81a74ebac4a7ddeb37960712cfdb0c4524d0b75d57522428c13b4e60b22b204d1dd4d42501d759d8830a23a116183d2b2006967d7a9b84d7a7744cc49e75193ae968ac30957e5cc54a3c9b64453c7851092c6e485c30284476d4d3069eac3fc68152e55b0e8d8d671d2219e30b1e414830d3b58f1e2b19d507a87282e60e080c95057dd2d6054a10330ae489994a5eb5f06fb71c964b8c2fa56fcc1e4cad2128207d57d882aaabfe89a620831406cd1f4c40f43d86471220d323ebc81c45ca4e1a5a60921b63040f50fcbbc40079437bc7870c8295d2735a2d0e1a630401dbf20cc4c2857547f10c021a764a208778043527e33082cd581c041f5ff001c72ca9d21650634406411e66979e0648a2382c832c606279a0cc6f090a3e7ee5005008144f57fad5106a706d5fd755606689c59a99c98499affc0440174b8bee0ef1f98d48ed5ee7e972b8a0c30074ce906d53f071c72d7983170820e50dd958ca8febb46f56f8143eea249d1220733382903c68ad10a9c606a628b217cc892037e2af385b6c8a03852b8fb4044f597eeee7f030ef977f1b576785863013d2c51fb5d3ecc50fb6d7e8ba738b8c4404b0d604e0823449aa62635bc88630b3249d46c0d3824d98ada3fa9eb61cbc394da4f3f30c6cc920e41800943060d60238c1f70d06446183168be43b42043430eacf2ef348c5d2fb069edf0f0f0f1240b0d78e0a1f653d7c36443fd03c6378302d491870e4d8450db49873176803d7152fb57e050cb88b811c3115d303df9a1062322c8d0c20d186c71828c2534ff2ca2665881e090fc5a3b3cb3da3fa9eb9dc45161389cf1650d2829533805411ba99f81c31a4a4d7469c285e658542f6344755775f9eeeeee0ee431981718ae3afab0410e50d47e9ae4a4f6bb3ea94aed873941aafd322763e01046ed1f1f5158e8e8ee767f8a4314d57fcb54ff492b175f5afcb53edaea7e6e7881cfa3324590c122cc13504e5455d4104287a61fe0c08206e68a2818acb42cd88489eaa3c918372c515d4b839a2c3e3bc69dda3578f1850d569c6cb8a28994da2f61ee437e544fe38cea38d5dddd87f8ccd51e0e63eab8622a6fa5b1a77a67e4a9230f2f90a06aeb80062c353c7142aaa1f6b74c0c308a68a28a1750c0b03690a2069823c448e1c408da13f96c88c7f8d98a315e6abf08dddd62cb0c3ac25c52d0d1c553b5547fe93304517d86325c32a0e3375ba85aadc684c6756cedd880c79152ed97ed747446eda75b6abf4b862eaa139326ead792ac00ca24e499d47e1698054a406d211beb9f40d0226afff217256a77b3fb54ddab42242fd41412aea90799a02327adbe5f9c587444a5362f4551f374f52b5189959704565ff34256dc2b11b27a2a2a59892c9ab4b4d5af441e8389339000228623b51a4df66094152fa2784152ad465b9a1513a8aa771f3814047cef3fef8d7c55e5c9fac9c671f450a8dcab503916601c1225238fdabd97fa86fc39074b30aadc176ef52412afa94f814329919b305227f29118f43934941ab6fd9b13eacf13a6881b443191024c0d464c615029c3c5091430cce04200dc40bd090e71bf4b9cc44a4c5f7f4314d9eafe929248fbf48c9930110931e204c3985e30b561185365d7d59f84ae0e01274ada6cf096675c97e2735c102fe2122481d3d4c92f9f047e29fea8531ce5736f54e5d73fa45f88086a0d6f7994bc109445134d342bfedbbf8ff7bbfa774aae46bf8e32a17ea27ed98f142e57a86c81841631f8c2c80a171aac54514394141bfa5d2a7c21c5082859b890f2450267c430c1e28d359a24b5c083279a6080832c74e04506ae40428a3350bc80520354827a5b38bd8441a646eb276ae8411c2c886a028a1aa05c00832ed090410b1452c840bff60f3254a9d168bf6b76f12d33a80a14bbd47c77f7d5cfd9adbe2674fe2ac78829502431e68b9a1663d800890c176390be8c012e51224f0f839241753658b2348cdf466c100a1d3ba9af3453e74c269035e5b4e4a96e535da72549d55b25749d607852d7098623b1aed312a84a2485f69936cf6fa47dfcd9a32a7f832370b51353f898090bc6e2b3d6b34dcb0c6a23b6c214cce4708202996f23f2958631772f205c27da6cb5bf391907461c65817242038608543831d1450c197ad881c32c900c0b04a667bcf43d3f7f691fefa9742109fd1aa16b273216dbc3cfc4d4957fd94be5ef70a6d011c9919a128bacde7ff5ab1f79a9738d2cd09f73ce396d42246bf3d3463481ac541c8fd422ddcf17ead408dd8f47eaac796ab336e1362c258e42dd8d54644156d6af7ec12196a8c24a2412a61085befc5ff357a40d6b69a165acac310330513e448991848b20d014a1c30a84c8a10b854024e8f8c36b9941fdc123e853c7f8e77ca22e7e52833e2d172aa0f841882fb4182306254b9c2083a58718cee0a02ba16737cf9fd3061d8dfca82cb86844c482953a96c2918675e24606043378238b34b4e0a0046c09286208e206a71bca48a163fc63988f2a3f3bb8fd82446a5f17a4a8255a9a74e9e2148318242f58c61c79c14f478c740a4da461cc2151fe14c84c41c614358eba7ca1b11964b2787206065c8e4882c6cf4f0cc691709aeae2e6066da627a2d4b0418736c4181d31c3951e08416629cd92023401a526a50569ec808d33ced02284113e383d01e388cf3cb0822a5448518383082934b6a2ca1831c800220a89071a3f1115bac9a673c0e12dcfd84c3aaf135ee047d0f11b2becea20095d59df8d209ff51e7f3ac2f9acb0abacf79af333dcbe0be5b342af0ce533222a78acdfa7858671d4afd404a7f1a8044c37954d8e32c5664600000000e314002028100c890583d16834d0b5dd0714800c8bac4a6a4e160ab42c47510a196388210400000688c008cc148d0940018c502d1ab0c03b07469491c088082821f754075229153f1d788b9330a34836822967100374734d4bd9c233491a63a85c69466c83cd793da60ed45c53067b130ea75b4378557882d9d85c3763b08703b36f1534542c8b73daf749058123d2c5925d780987bd171e8cfd354d2f9b869be6874aef8f29237affe8bce912a3845ed3305876b85c387dfac485ab1e92f5d822ec2cac5363965645f4567112dc95a0e428345ac9cfcb64d5854aa001fce56e7b495373333942fcce161343f401a3a620b6bc867aaabdd6fdcd4e8990ee68aeac5e53adc00a971cbc10a0ebc0073b6b89c98bb7197b25dfe09013b83ad3637ebf32e6309c33632c2e4eefba7f60ed98afd194ea2f379ae52e3249c3c0fbbab3eb795f13a0c04a6d0be73953a3c14ede17a7ab9c313d59075fd6b2c4fc78c1c97e5901b3510726d079eea8679e2a8c8e9e98808a6d7038d7b9f18836b9eea126ecda3e8034fac88d6c2901ac0812d3a2c7d43a215d732e3ea9495267e0f48f3a12396368bc7be1deb761ea5d92e5c6c6463a686e31c525191b10c1ae7c52a899e3f2374c665990e8d5bf6c1d771b597df19079ea699e20bf9c793a42cb56afa1955b47850e42be5610b2d2830b10600d17ee9502f193699329967377bf8bcaa66bc9d3e3eeefb0f476055a3b4e4d2e386cb3d21789a71c1cdc30ed5dd142cc13a3c1d1681a2b75412cc34966218a415728669136e907a517aa49e2c812033f5074f7c299d4cd8d32696b369d238c55fc92d1f911672ed64d27dd3e7dcd0e8789f2ef8333d529e92b8fb8976374b2b805b38a86ccf397f4bc09b7f9945311dec6f75b8750e559699cefaf59b7e8ff4009df843ed3fa6423b0ca2837c3703db27d6ba78195824ef3f25865c67d4b0cbc6c2b6fbb42e485808bdd9e31d65aade16fa879bc97ee368eae83d53a9e98ebaad46964fc045b1be3fef3ccecebb5e503c6de66042a80790a78cc3d92b92d28f0d99a815398669f950bae54217c72688847687379e56b45bce66cd4f3eae7ba6b4fccc1067a07f5ecca0b8b52e929f7d6ff926ebe04bf48f27f8e2b6e049edb54f7068961b0cd845b36a220ef2957cf7af75f0c0c3d23c99d84c47191fdc6af79b0ae53e054afc322d71edce34a58b002615cb55bbbc9724f457b53e6e61bafdcc6fa01b16eccb262ce21115445191fc6a11a3bbf1b2c5b4b75a78be180dbf1a6bd77cc44e3b1e7f960f7d14b9fb04bf065167d4219c2d3167108a1268053e50824a5c9034afbb4451048bcef85c039c7602fb40165e37ba6c0f4580a52bbd90d95a116e5ca68c1f7fa2ddbdfe3d4e4b3983631c2cc9367638b7809d28ad7813e35208a728dda71b5b45ee7cfef9c246b1d51e2f7b3c5f405f3bdadd950fe591fb0eb8a67a4a400055c1183d0ef6cd8c4833be1a8e75ffed294d1843def7f5c876e1eae5bb4048be9000959707e73f5e36d5b464f40c518b8741596fa6e426779b70ce5dd412df022489aa1e315b09a78e5c9426c6a5133086bf3f449a8bc10760a0762ae84840d5da360da91b8c6d84fae69d55870db168a9a3a282fdafceafd134bf26e64c133805a8857e1f7a61bab1ac0fe32e59e106208547a725c1c065d0e45454b3a2721c8c4b2186a8f4f04b0d885766c40c90061690a0450abf2608d243945db57d52b9f9e527394cf7d47f3790ffcf44e57a4f6ec94b8548edee42336f7407254cb40808b398a6cef5f309b886aa193e0f25f2c1688b32ded201326889f4b604d7b2a9d394eb4a10354e24ab20b48588e16c2d015674045852299b23b9ee5def2a28e1c39d760f3d1e31204324283599ee14da28bd0adb4c5d6e0665e1123a36b522a47817415b938cd6c7a1c23c474fac3d1dbf093b096af09edda70f853a3c33fc4925e6eb8296e4fb2547339b0be1892bb04c76a9b1443351466b5eea62dde440ac42faf9506fbcf2acd170106aa8b0634d130e96c681262ac884b09c171cf4a65829d64b1232eae60139fc8a2a0808daf8979cab41587b67312a2fb27fe05d4e93a7dcf6318e0ce6f2042270902a6f9525146c554d1baec361ce0ab31746233af9d2bc4f1d9629aaf8a3b0e0b5f6dc32a19f589752e934ba3d6074cdb1dda5b9379680e9eb01ec21db24d5d7b66b2a1754c776589517ba0be0eedbb724b4f560f5c1301156043bfa9249a5430b6e416e512b632dffcdae12d8de402945def49dcdc92e83aed0bfd5ae36ace1f9ef6ceec81d4a572595736028552eb4babe3242a7906241cfa8d131831747abda9dff3a981873fde2a33be29307018cf667fbf4692c2cd99ce55b3e00da5951a5429bccc6c00d66c70fcb24858db33a253cb16b22d4c5563b568f4776dc07441cb7a305a8c9baeb084e643ca543c7eb4e93488ceedfda3ba97b2112b04215ff42aca964aa158c7d84401247a1e15b653bb710185b0d1deecf74577feb3d86c5d13e0764a02ac2b10b8ce675e8f53311c1ffbbb05bf8ddc296b37e87e01a965c2f3d097c565dc47453214dcd6d76d72cd04472950eb18136b2f5f28678c4b9418031748e3681bfc368e0d1b102aff2070f9be06321fd9969e914ecb52aa65457f54193321bb2ee0a6b8aad643c195740e96daed1da41dca104b52ecdab83664e354a5b22d897a95bbd7554080f85093582539867b3a1cf734b8d3c967fc6841f845611682d79f61500038eedcd71a7763590a207621c6baff6f7ed2b56a659ce076732476e80465cc5cea1b2e1544e2fa21adac29d8cc27519b2d614ca3ac6fbe98241cc12d88afea4606e614b1f187f31c9a41120214d5906a4dc21abad40288f77bdb3e99e1087532a873aa0adc28582b3f42c3685d0d9c5cf3eee6849fe73e449829336a27dad6dc9ab6e6a21a7d0df15d0bda8bee4df8f2a61f4bf2c2e14d4d6958027c57c3c4b52d38184f5a35de6f557303a531d2e11fcf66bde23d38fda3b7f37331ea10017f15151e7fef1c6ee56d7ae580d749605252d7bb243d3e4b2524291c3e6b553ae2937c8660985f2e6a64695c07d34af88505fa392e31f6bc6e18a36a54c0508ef0f944d3119a04a23f6209769ac4de1b14ef3f4c69941913befe8485703b50aa5d6667065da82cb92abf34f2c0d97dd8f0cac03e9042a3bbb5da0d4935c5a3b5a35da5df8f259bc3312b8cf252e615778ccfc01eb1c1e6c6337c433efdd3f3036558e09957de6fa49f9575510a2fb2d2455b684b6677cfb6297e712fa5c00296c8370ea194a37df4d48364420929da24f6219ea5aa81f23112e4ee5b9bef410a1f07b6e30d8ada54a6d81447197f5108214b9b3fdf4b262add2e2e0391cc0509cdffad0e2d7a69bad702ee3bda44ba295ae0cd5eee0303d962280f1245e92aa4106cc78a0dd6fad5bcd028a466ac13e211048c723210d43c50e05f5d831111cf60c19701584c75d39ac1126c0608d5c874edd3b5d692fc7fcc52702500f804003517772f56e6f800ad5a4539f46728dc6e2982812eaa2177f143ebe33b12eb56b2fb8e50693e408f5f0ae43f20658eee34452b72900b3ebb6c5a4486827bd85256c46ace6e684f5b572d0a249babc843ef31f46559d0d74dbf0b282e608d2e99159443646ea3dc9fc143b7b935df09176440269e0d743b8a04a7008c613121b836b1c6a7e67f1904e5d1c6c5653acd3040c299fc83daac80ffd90f3fb8397b00770e82acf819a8f4c472fcbf036f5522bc81f0e087193cd9566653e415656fdc4b4f3bd5d0cb4aebb8154670f2fee45249eee03b2a85d2ee9086be7666b7de55d07d0452cda2555706b283425c84b3225ef2114674f442955f8b5b1c5d59053c35f59611a78fe9211a302119a573493066c8460a8f0c55e7aa7d1e40fc8960ffe13e384304253638d4151c2da2c4d7e9fa8c558cf67f6b60563e018b854c2a46662408f81d5461cd12243207e6e4b02eb1c0cfe68dfdc9c74b15eb1f21be1ac9a8c57aa5b60dd17162e02f1d3188a299f39876ae62e28f2c130811ed37f24dad29bf3f39c1384bc1d21ea55f1e60c4557651aced6210d7d04f7254b60b9963101a0ad78aef0fd5070425977023e89f4c7c7c0f418833f1b95b70c15ef710b91a9ab009028f715f1aaf9210c0206b5dba14e910b8c031503b150d0ea8afd84e9bfd9690d7c375b30a2a93608ed79accaac8cc7b40ccf3c62799f668312b1f9679e07074f3520cbd556167d555d59e43d55daa5cf7867ab254c5643919b0aada6686257ec5cd036e51a11303ddf858cda4a266361b78aa1c692b562324c6e2bb9516ab5cf5ad7ec84c45f9c01f06976253d480b36746945e811e71f5524723bd3e57cda6a6f4082f6416ba638a8b0b1d119a14dc186f55a67a44d6f621fb2047849a32ca61e9c9bca4c45e328bf20b84c825cf675929d2e5bd4e91b16626ee1f539f0b252510e831328b4c33b6ebbd538dabfb04b81adcf9342d366dae109be19b0391abbdbd717d8f8739ec7de4cad59f89c615204fc7b52a89003565c739eccdd14031d7a73e7c6b6b7f676ff11e70e56c9c223ecc1bf3ba58c6af08366a1ba2cbe5b0376eb98992bffe7affcdf239f4ee75e30003e333e6875c9223fb9e384d0c0deb94a12d6fdbe3013ec1a1b17b841b0069a1ed3945d54a256d9cca7a211997ae48fa1a7afebe670cbd221a19e423eada99559b6fc5c98ba1f60ba9e2abee26acf3c27dae2626784ba785f1557e9392bd35fbbc676a63fc6ae1cb5eeb7b12ad6da6a18082b9d4229073b17a5c3699532e470681d7cb00229241d151774f584dba469df43471bddd9f798c355cc8a073d0a7f7d178a69e83cacf8eaf8f4daf89361e00f193710e7ebff0f4aa05e5fd0f2ac70e1d8172b3c8e3fec7e932dc402d64e6267a22cd71f6f0e6284e21047ff30096da279c00a32e591e7399c01f4397ccc51c42243e23218350a66925a2a99865ebe6ad84bcbc8de4383fbf03fc7fe0d7cd450d74ac90782135fd9b1e26e714ec8d3f816208a3c86ac03067ccb894808a050015b19aab37b0c69eccc188f728f97dfd0503a1865c30eabc52bbe37005ee0ce91f2e77067223a54cd350e42ef7d06ec1f87f52a3fd2009606d8dc0d1b143f6832fe372b9d00d5511be0b2c5a0dca1e082ec17cefa2eb08b506e77175ee004b108829c4d77f0dc93ccc948e39f8af30662fe89c21b05532d03702e4258613e805a18e80d7c3feb737b54c036aa00ae04cd3103e73bac0d9cfc1270705678468f012ea96ce0dcea7b2122fa5959f6994d2a9d7a08b6f98d92ff6146b517aa04f12ed6be473c3166c5bfaa8e94cf4db8afcc378124ce6e3c4f76d6eaafb34f14dc84a470aa3a6ea4d6ff29ba0727671af8776db3b3f2da0b225360896f2eb0fdb4a8b723f4effefe6af02ae6399547de4a3eba7ee325cf8bc1b9837c47d2b1f158b72031364baa550dcb5514b169470e457275ea079b8d4800754916a8d0c030edaf547953cfbedb5942c71e74660d00f41fb9736dbcb04c49cfa10ae4236f4fe9adbcb65c4ccf32f8e788f22903fe6d517786959ebcb684cd62f37eb4814007b992a4617d5fe0a5f580cf015b8f2836f67e19faf6e7f678fb60a9c004ea35cfd309d8ffa4094ae1ef5b9827149da861efc98331f7c799094b5d0efc5b2b93e06ea830c0bae47cb018eb0d78bbb88484231f1ae1639be00c63f0d310f37e845e71194cb73469b51008a822312cf277c13fc6d341a5ee66a89e5075c14925c7efc63d00630b50e0d7c7cb11b9f8071ca8136650c80131ab13a37d1bb85e27bafbc0d33c3437b0f67e56436ef32c5cb9b7bec83bec0ff63d87c9090520de5487700557e78059ebe937a2879237204454906289b242c0baf1d6d752db6768b2dd2c1879b86486fda1432042c59836f25823d444548bf8bf90e828f9a655620aaea5c633fd58f81396ce74a17b5073f205010cbad74c0a774a033c9814702bdce9711f4223bd78943c2adbe8497a4ece8d97be088350d9f8a311fd00d3d9a00e1333b914263b24243ad8745c9cac781137e82f41832533c6cb415a198d0313c342c98888670c3d2bbf6fb98125260a9588eb69830ad27f0570ecdf7b3566e3394023188df41703fbb55a536e49b5fa80d8fa70b2682581c7bc104d1370c39b81b610523c8f67ef4d40101151e7c9a70309766300600f05d8bae09fa48bce25a408464ae8b0a357f23cb8bcc300247c4cb0ba3e28fa6adc89d27a19286e0b81f09e9a9d54a2db94d89c5cfae5cb38b464cf1e22d93a63a1dacb171528500bd1c0f98653b2d312a07313743808490e46c26ef7b0ac5b9bfd12edc2081c59cb6a3b1ec6098099cc1cae2770d4a84e611594fb94efc15680939a209eb6aa278807299de2bc79002b5418a5a336ddd32ca40863d932233652dc36314680c6bc396211402f819b2bc3f3b78af2b53c962b019215c104510f04055b1be15e69f9ced6b2d302e06712c2191299bc773f8aa427656ab3cb3636b343a6d705366cc1302cc206ece87beb7634d2104cec74c3c837244ac1e07d77c073346aaff07e6ff8442d73267c8c5168299162c7747bae8cf8223623994cbbe42000e98f3cf216eeeb0a173e521ef99ff9e13f616038e90d5a7e83f1536f260909d0857ffc2ed3e1442daa715acce833588fa26caed64a8d4d1b860560ef45bc10f6fc324f167ff1abf0c2c32c925a7f0dc07fd5a5eba9613f3591bfb903b1e84051f50d7383be7cb460d7a32922dfa74aee121adb71e869aecf413ed3b758c1840bfcda88e99b48ef2d8236c92b1e000bc30c2620adfb24d7fece33b032d0aa91290a78e45c0d7808a413d0b93baf6dfd89e5b793e92ed8a40c94bdf51d1c0f110c1647fc0d10ecc24c44e71d60c16ea9b5f8c63f92a7f3581e5d3072aed007c9ce7626b9a899234482f0554bd11ca2898ca5b6ea6d2900484deadfc1590702c314ccc583983e15f0f0ce8c8f916884cdcd77a25401d035a6f31ddd284b15580e93a358fe1f31657711958e7f23d34fcc2a0eb040bd5dd99272bc7f73f415f1e5c246e80c3f95fc81356137d72c91716bd19467f8fa26118ab4f58f30c57cbcdaa6513485a3e11a2479d23bb04a040c3c375c24b53fb43b4eb05f7da6defa701955dd2299c75b527fb53b48adce61a306712962fb641671843f582b19b6d3f871d98cda86f32e3da61b4034f612e0e5ffb0f5859d7c06e8ed40c8a3a05ca5d869e0481b6c6345509e353c8e494714b409ad548cdc5e10f40051c76a0a93452a8f89211f6a87c5839a3e85f422e25652b57e9aff49e2ad7d22a3f00ddb1aaee88ac9e2d38f13e5dbf8fa2a6d3c2ae2819870e7e53c90c79e74d5953692798dedd68f222a0a44e0831cd139199d9444a330c3cd489cf32b1164f7698f24ee590e6cf863b765ad868f6d68d246f8aa5525fb78302b5b5cf9c896b9adbf8603611aa78d728b502975a80addac876b28c7cec01f9d9ff5019f730914c283c128cf2a1948b2de0ff234af5c19a6eab55c396a5d652c8d56fd73b3a0e876515ae1c6a5f86b5ac1dd732dd25eb14f663d6522a44b15232b499153699261ca3849170b668e743568d2860fcf4816a17374a2df7234563e853b277148dc068a77a189dcfc232e579dd6153b6113da43434e92f3d726bdc0667c8998e27240206485d551f337cfb8d5d8af32537805e1fd393eab15ee8e06b67f298e9ac0e3eb497af0c247599d8011a62f97a367746546c3e056d396fe1e43facef0397514781bacaa81b9fb9b22838a496b730997891ec064717015d200f46754f66d490e45c3f1095522af68c89e40e7c85b782c0252c172c5b10607442b55e3ccbd45c157e4871a50f6ed993614490f92dc77c492576f083b0238ff5e5d2435494e10f14031f0681e52ceb9bd61b7ad23cdad43704d37678c1a14254837889871f3931660827a422b05c4c97b337381ede63e893d7ba755bc344b6b492b7bc044ed828d7e4df4fabf7924fab9065f90ca70d01fef42ead039ee6039bda69c3ef5694e05b9df14a0d3fd72fc447771b45ae524633c79c0348968d88386183a66672a2e9b040d200f8ff00fa68f43c0930c289dd0ff7436bd092af9548baa5b3524d45e040da315855dc369ccbd23735244b984b0b017f884ff5a022d67a046509fa50deaafddef83281e8bbc1ac2719c4048bcc523335f41c5887e800e22a71602a805aa8a68f04078420bbf6520a1ca77cdc6637643e88971749475d05e3a568b26da3cf2b6f45651efbd399020d86e6261c70f2955a8abee7f9640f4bd9f3b1ecf4ddf1ed7b0329203c459eeefb972ae8338ce64105af4d857b65802cf5e4150b4dfa49825413c0e463ca110a2f3d2e294b056351d061bde72e988bc6f4e1907631cc1bdecea019d70876f3f516960b912a9d481c0d53fdb608a8632b6669f512e92d44d24e94bd37d6452acac90bca869c6aa74c245eed9748efd20abdff773ba8a8ffc33e32f2d7bb019386e0471dfffcc01bf2028fb6509c62afd9e18b07dc36c2ba5835a18ab8cb59543189060a368a6e90efac2c8f76130a19876bd001226051f460164839f9b1e3ed597dc91894f8f320a944994b36e3d2575d9636874c669e9b429229cf1049b603942575969681634689d9a93d9c29c013001652b9c31ce3142fcda5b46fb23273cc4473ed6f7680bec6004976a57e69af5379154be8656347d476933a0406a9c62f9cba4c19a37844a38d644d8258318eb4343f11e4a27182127c35dc328d338a38ecebbb3e51353e58d50176cbd1553dfc9deae2cfc85a006ab21645945178d2101c8d18d13e3b6aba4cafada25c73a528ab9f4dc5c2e0ce92f3d78ea59fbc329103290e5466fd89d9695078ef4a346ed50f948b100c0bd6a6d2334090a05f048b63236a41e53ef3818aa9de3ed5e486289497d9e0168a3e6a8c2635114f957a4fce641a497d421ca126e6a0945fd34a5102b19a5600b616bb9ea237b4db95c150e73bff82354a13c550acbe3fe10d5da35d2927381c43679620f885e8217180584c4464ae266b6ab398eb008a841e120085c2e293186937109c34c380083f88dfc91fe7fecc8ecebfd2c78eba88f0b4daaa31bfc110b0336d73072c6dc116d80aec9df7128fe8bdda2585d50d7990e52c4ea1c43581e781f06e96bc04ff9f70680eb1442d2034438ee61ee18a0e0469c891b2fab18d39f96bff199bcd53fa496dca3b20dda4ba9189011242c3d48c8825ddc1f4aa13c1388b15fa95735ef1ea2476ac5b6adec1eb18205196b892df77f2f04fde71e3c3a6c2caeaac27cb53d26f46b3e8a10c9c8c1c69c28f2b4ae44275dc94cf89954ad6325e841051e5bd5d13910939d83d12dc8f6312185d0a3b424580f0cbcb2c55ba1bcb69e589b0a4b4a8a5338177b12b02eb2ca17c332657c3750c9b07149ab88344fc9a46435fd06ca4205592de866a3e54a69b03a4e6a2fec6695f6eda020296180009afac6f6c0341a4f7510c35d1672111e2dbf53552a06eb461ba39b7336f762a5be840c8f180eac886c66835434756baef299fe9a301b2bc71dee1d466ddf23cb84dd217fe7a37cec96de216825cfa8642570def4d8d331d352488267bbd4e027f01ae8a8e5283a2a5ab5e0805aa9cfc6214401caa3aecfc7112debe45b4c1299170f175a4ac761298705c89112f328de76aa80e68ac42efac35c7dbd8b1b6144c7a0896c56eb09e16093c1e2b2966efc1b985605d1fccfd17ae8b6012b67f3814dc705a2dba81eab5c4f98468b236618a2e535076c2f9558209e0947a422dd7245ca80370dc25fabba3cbd04ea907de7482fe2d506b5520485e8a81f369dac08a6d194b68857d1126b0cf078d37c0735d125996fd6fbf772d765c798f684bf36ab6254f7f717a361b7af63d207bc215dfe2451a00f1706cf64d26a150873f6320e9e91a7cd31dbeaf7a294850b129993cc140b87904cce79d32e9186236d587f2a59d58f37bd92ee48db14d05b92d382a9c44a408530b6e56d157a523af9001dba99b5820db839c6dc7a742958dbbde582688431baffa7888e8cade3a10ddfb46dd53af803d7ba49c04f97bf51fda33a01d8076f6f1db2e3eea549b36f4d12a59c76fe20c7afc924072ef8286fd00830c44b84bf21523700b40e79a26dff43c1339c2a7c8bab6d892841e4a054864c573d982f64a24b2b8f6de25f5cbb81ece602ce3e175991410bebaa52247d287a5aceb003dfcafebeadaead7c2115416bc005780cdbe943c26ae809d488ad6a0fdefb45ce52a8725f486d0c49fa65d1b5f9c36639a0579f71c300148e65461d34fdb5160653501392e64a89f63776132bc82ea46ef3be257fe8f7f05d0a51c3b0e6b508df2f0dccd56962e82f3ec4c3e1e09fb881aa4a8b14fc93b5700cc86ddf725b166935436c038ee725e104f2679565b2d43b478515972830f080df135438ee383a4d85bd1ff84c41a48365766a8333b5649a9f2c4ccb81aab35b6a08d20f3af6eeae8d3f6838ccce487f652877330efd3671b67edc8c22d213fcbb45f2635822dd788b5747fe9e0ad2dafdccf0eddd4c33b02dd1ebad3769ee53ffffdc812fb96a8c4ebca892eead392745d30fa1b381514cb00e8a21672781f134324ec24eacb890a0aef68bb023cb314f74a5d9097d6017aff81a38f6916c039d53225f607f070977c501eb0b459b3df2ab6eaee4bfbe729f129e84f8ea1bdbdcaa4e439387164d3a151e89e353340a9868f105af126975d14e8b59a43be020fc47c41a1349d5bd6a704b0ea7a0665938e8e2aabf83fa10f2690e66812111f4575a04ea3edcd11c71c8c8bbb7fb96a9e7fc96c3fc5f189f98016d33203460e1e72986775e02e79ebc59e4b00d28b06a5f5806f6ffdbab0b31615e5a838ca7d79e5095c100a5aca5620ba0bf34c464105846014871b20487795608348685963170412db0a0496a908668205307a59a81c9671a9678497a0729684271e50ff3b0afca558adfa7bfa250ab2804b26ca7cb312b4c641d18a42bc185218b96ebabcb9ff1de7c176d339ab48b501520046e47c3f81462848edab132b6a6b2d0263b0a596e886fe63b05381bd1914843b04cc0ca335c649d80ef8e55cc8bada418ff20d30745ed180d2f228bcd0f7441a2e883267f946fe1f620efa07cc3444dba26c5dd9894db3d7eae57f6eb9fce26d2b825ecabb599a4da65c6bc62ca65e8c13e8b604c8db8e481e7aa0d03a6c170c2270db0fcec1df0fb4e2bde2b4dc4e243103b844b8a0438021d051b8731c7ff7013090f262e8475e3d073012c7a597f3dea9202af50b4fe917ca198bc9f10b8d93e526f4ed0cf0f38101c259dc8ab725004f7abfcb6981b93248c61a991b8e22fc4c262ca08921a40086b99e5b6708c502eb5fb75a5a7f0de102e3a0516674f5045a5bbef094cec90fd725bcfd3fd06efa499b5b2ee6e60073879eda35efae42d13f752723d30624ad7722079fd78021c607f1fb44ceb623dc43318e711e3635a6a5c2990c6c0ef4c60dc468284ee71172ea9eb6dd206457001a3e310b44024191c386c7c5f4adae18166a187bae23804e5fa09c7f6833d20a613dd38d730b3d5d1e88a337fb21c85048216cda2f0a255b28a4716d2413e8a7e8d8d835f80f5f902f3dbe16ccc6c68250a4c6045d0781118068d1858878fc5669a36307e342bd8ab3018335b1b6405f155a9dea41eee9e13282f02158b4cde81f0c385bcd1b76ade29738e7dc6326cff74d84d676623a0c744d4420dc32306daf065f557c888cb6546106302180557187c3a120880ffc1b96ab57854dc1b13ebeb38d9408ad8030cdd99f9730da0690de88e061a66968e464d71d948b51b7260a1b2a9e59cc5b43f616063d1e5045b4cd190d91a98f448c899016166958af97f8e582b197f2a15e620fcf19b4f6e037329180f2035a6023428d263ba8a8940ca2d65a5bf1ea74843070e290aa2ca50c4117b7c222a00e614c6fc53e7fb3727541e59cf3a1674362d5d5a45b43cb390a9a6f18875d1a2634a6cac5b865f05a01335697771bb14a53c3c962336dd75d263ba9b09f530998054e8341eeb7beb3bcf46802fd028a5fde032811b20346705bc2e362b544313ca3aa07f3d64b343223ce003a2d16f656fff59e1ff433cf0e3e387ff0d3adf0cc5efd14d90b14a212481cf15d4f9a64635345d78ab9c977940b418bf07d6a70a8d39d4436aa2bc12e35e6cc9add015b8c507db3c74e57bc3d89eb08c9d44c2bbd15380127b965f7c60548fda8df99ff32c08ff8a177a2530e9c678a465e2cf497bc9034f340c03f3ae66209f051ac3517426f4b75b0ae65f3cfdcd0f39ec775953fd764735a49821dd7c18594437a1f1ddb45b953ce630a87aced501ab857e8f95e5fe39f82097866e73f38eaee38613eb8ea2061e56b0d77bbd734e0f1ccd668352c1902a48866c007dd24dbae2dc9f86b27988640974f4c0f7b850e0570f6d48df7a0648b5324fdf2d1e01f25c1c90e0fb82800c64c00dd837503b930b93670839196f1cfad32b15b13267b955cdb96b5a927e13e2c771fe5bc4b3c2962c7f5310242249029bfa540b8f3b5c32229a29800f03064901a1dd7dd35be9bf5d5056ea4b52a7909de94dd54e8112a52e6482530d0d9a81e4e1639a7cb1a03ac1caa970fa9a93035ac1cf9745b0de582c2ed100e399b374dfd06c3097586a4551de41449e883c01cf524dbe6137266d5331f85ad4f9f445dc6dec97588b74d29bed2aa801625de4ebaab726819780ae76a3e81a06b08d04b6020e1d6ad81ff552afd4a10f3e441f20c72591e5cc89e4959b86396ce8491995c33c440b82b3749254a3dc8ee5cf6423b50e4e4e58f132285580ae0085133297712a2356a0552c0ccbca0c96638bdaffd13ab8095f99a8302e4f1bf73c4629e886357b15aeb9e8a5cce794d754091d81c6776e4a0619269e4cb43df74ba42ae0dfd8d154a745da65edb17b8238481c6b223a3c3fa0159b552d009a99a6e63d4ed3b77f68964bc7bf28568f54860fa0686ad9080dea23032c77b86e6e459528e48cd3d404bb49f4e09704014764824cf82e297d4a24a688e8d89e18885a10d363f537317766964e771cbfe89437711f35da397e9c4402394a576e8ee79c30a6365b45da01c43cbb66c93ed7be1d4c8ebad3e89a831c31bd4b546e203b2a0665ad034928d582dd04ed8ea6337532864c81c873db262d935343e70b108a7237505b752a582424ca4f92b3555a5c2e60bc2ec621e1f0f4e00bb17ab409bda42c08de1e07484f181b057161a18aae444af0d88040b628f54191a81f1155de13218a96ac2c1022fc00abbf56950d9690f14c75bfda83e7d6c3b393025b347e562c7063bd278207f27cba7fc921333635622e864ede3fbcd7db1ef3d2333eb4d184edc83875e3d67e679eed4934ad1478b476e97b474eca970c9319f2887b0c13ce3539e257d5feaae090f5089a0e1e7ff7449f6960b41d65e3a0a20f9aa6d67ddd920c0855a238783ab4938d8bd5b8a333ebf74da1c63b80cc2808679471e3e73f17e6bfaa7dca78eaa7fc6411ea3dc6464841dafb60a4590af1e69b2626fdfbaa19e138a06f4f22244de97026ecd38a846843c12d8119c5b153c627a1903b902582bf27c433c88b803f448b012ddcf20ef87275c8ba989a3cd6f14a8593279c8ed39c966e3086acc1132872e2825c798857f808d284ab4fd8a016d702615fdb734833938bac7fc9389dce2ce6366d9eb2a3a5d57bd136be75dd911f17b9b2eb6c7909d6a5f4c22dc12fa70d7da35384fc0ce1a5797b6120a4312b72ac8fa9478c6889f32cc62ca6c9f512aa0070df3e8f99a930c57cd576237288d01bab082ae0107b0c9de73d36745aa79cff7e0115ec8d5b17a9818b2f7c4d5b8bdaf08a2ebeaf0f2ec47ab778f4c10661de880c67bf86eaa93c2b85be111a5301d8abe70884d9c1c69cb73d2c5341387793c334e1141f5f00b94af6a5f8ffa7c8036bfb208d25d77cc12fa6aac940c23a81e5329ceb45781e61641f7b2ddb267751c1bc56e1756de2c1b866b36eb6cfcff082385339437d9697a00c64c71dbd7bf7031bf0840fb973ecd0c0731477146ecd02ce78730ae54cb46caabf27e99a371df06839f114e7fe9513387ca363edf6a4c468f0af3992cda08ea5c7b5513c2d790f1a6f205e64390e9830e16a3a705dcdfb72b3961d95196bd303e91ad962801a2f68a0531f2b167c4923c659bcf8db3d566c25ea311033a4378e9385e3c9468583e97ae05fb85d8333a8da3a8e9fba69762636cd40e6244e0c1d89bc54cdf91c6acbfcc963419091f9d3e4e6469903838033925dd053988ad900814375a12ff097970f9cdd26c59d2f8ab33fe0e25af74101de79a96c7e20dee3d56664079c461083b6541ab5558b13baf5fdfca1a4923d89dd189dacba1ca418eefeca0d4b926fcd11a8a3615dd1be0d10c92b71da6fff8d52fad7088e7e2b97442ca71ff9a26053a0c7a9e88cc3e7b06cca76c85bdc24562e2717243aff91e386163b3f1c4e3c88862374fef5a15ad17262f6b98890ef9cea9f7b09d232cf4c8418589c95cbcb08189f4492ce22e50a7dbacddf0740fa3465ce3e916ffa010a3fb9f548c20161bdf2c2d38bf4bfddec78a1ca2005f29f157445aca1c949821e2042e24e724aa4ce59e26b3c5c09e41bcef2b9d73b17a04eadd9ab6d66986cdb3dc1efe7356bfed49113c9105e2a1366fb6aafcb199b8c8bbb9f78450b4e7f7dd4e6255120adaba9e7a41e622e254b7aa8335594a87b1b1e6d12df314afa23a88355d53e0698dae01b5ab8efba4e92859187473b023e1554b08e13e1edb3a57d69d87218f7f18340230d7fa5166b4b2725e30c183cb2bea2cfe3b53f6bedf37cab2793230b4c35889e1224aca297ea6d782e46c4945f15b91f633bdfbc84d799e977a755dffbaedffbf6df8e2181706640840f91249c156ab181472a254cd066e6e455ded2d2278331fcf1eb171e75c9647732a30eaceddcdbda8f519cc1eed7737233953bcff14e5915f7c0d535d6bbfe22317aa5c47806606e8ba34232b9b681327d251941a79f52c3035c8fc298681e20a4f14f138a8e75feaf2f06ebdc5a609c5e28f987a0690db17b98e95729d66ad016ff53cfcc2cfc47a8665ef50e054aa9877431d272c86818f5261580684d61b0f2113a60e0c18c5095b2ad74993d6894366124b6569d8e3a3d7a4f9307b198a4c2e12d65dfaa7c2fcb1d00c6bc19b320641e7c9bb3201944ad6dc9962b53167ee56df69482508101a56e59dd0fe1acf44a54b9739af33638955731b5851d299b4aabdda07bf8bdea73c2bc8987d69585021e23c331976bda0f515c0351a2ab6ad95d9638401c03aa85c704241e983d39f8cc4c4b09000fb920858d42639acbf0492739065f6d1071f144537a95e8a459aaa6e1f765a08b336ee31b99eb1e6d1d94abff341d68bd1329a80620f72e9963a730b3f20d4b866177459097fe31a7071eacc07f93317db05a5160f4eb3eeb93e513095ced43ec82182084231216b6094606ba4b82d35155ccd10d241e7da794c9d3c3d8ceb10006b26dad94ebb0defca2e9c4d53e2957d9669d1e0a2bbd817a9bdb5731a1a1382bebf3a650cc1ea72acbf7eaa67932d9661669a95d8a6b9b2c196eeceb690cfb7459c05ad634ffafc3ef174b206a0a76d9e72594cb7666d11e4914109dd40098055f4cb7db5a74cc78886107a7f0b3eb23c2bd854359ceeaecec5bdb869027f7836093dc063062200a1cdb98847141c21ebfc71726f3ad9201dd831f788c009e6182beafb05dc14d21af81c1acc3a39e7c1f2b463bd3f339de05ed5034b01d9f72ab54523938e23718bfd3cb155f444e0ff8328435a001b3fd34c634e7f4a7a1ee5cdfcffcbdfb1ad047f66b3624bab261919b6f2566bfd340e247bfd4d4aaef216eda7d06746407cafe04ae45428ae3d44f6e6780255595eb6217703928ab1f86fead99f01a84a133aefc8decaef6539f054d3c7cad9502c8041a455b4f3a1416fd07d3bdb3995cc427605fa9425c754619aef06a7bd7f559ccf408ac1ef4d68845953aaad9dd97ab74bf48e3d0d61482d1c4590bc90a61b2d888be8cdccaee6cc3aeaa4202b744578872bb6a7b997555295d3eb8b35234f0619c93400a8460c37a8edc0e737c0f5b8013e35c63750783580d5aa9a48489a5b17eea580b15f8ef260f6060c024d47b018d31d4bb848c076bb8658476629b53e8345f35063769eeff2efad90add4e7b0babeaac9e3aafee706df2f00f959d1e768249447da5129aee0846102869eddbfc95be71cb846efca0047b8750065433d0946c5e99a6e7a06e7a59e5d9594cfb3fdc2e3eaf5940845044e57fbf914b33769a033e12859240c887b3cf9552c5f9ad829253a2b3601a5cf893cdd0b684d3caa5307eaa9b940785658de34f8e80664668ab4ea376a24bf03f5642f5c2b12bed195b9a277b7660e04f91fff4c6913686f9303000ca7d0e822d36f5600020e20aeeedf0f4830c674cfe835bee020f2d6bd8085b290a5c5acfc877416eed32ef19b73d086cb495087c3a28187449991e82016cc39c2e624282ad54ea0745ac645cba4f1d7d73eafc77c4ad6ad994ebbdb040ff80c9c67b5da895806643f5f9700760363d60c25ce6e3ddd4b880f1f42f17dc1805fbce2c08627ec841cb16f1aa8677f6f886d9aa8b99ff4d0bd87177c10c2a8e2b56ed68912dde4a324cff638b09c13bb912c725d0a9c5f4496e5d10361699f9cbf02c7f90b969baf43c69d2e964be4a6c48948d1a7873009a778c94fed28d99b72ca0629f936348eaa64a4e80fe3b78ab33d4044642dbc8b0e59858cb7ca00f7e6148f4db4a88424dfebb124752d02b45bb720ff91bdebc79d895e92b1bd64b0a11c90f2183e130c2b3acf5ea9967faf7162db0440be0d2bd4a3bc7e7c8d1365f6352612c9af31cb7382345f889c28779c77a245ced74a2f697afdaf91fe77d28ea48d35aada26e51e610ae8910eb011b6ec1b9cc620ef5ed2a01bfc1e589480cee7f2af322aa3d99fc6f7d22d3e81253ca0d62b16ce49095d95f4feeb05b4899a1fe1c41512ce59bec21748d8e8fbc11610e8878305302a69441ea9e4525b686a9a1817ba26439d5934d9bd4df35527747f63158281f18af9977ce9daacd446696af3466084aedddf892c66c981c0cf72b6c00d76c9be32198b3718b5ae21913c888be662a7bf77a5de930c420ce8a2c06f90844a6799b72b9ea228a16235436b8ef1aed0bd8605aaca516f391c38cd33c6e852c1d2fb127d05095b35121309ab2be7d3ae134f86b6ad9861452b9ac18e1b4a68fe9b574490e4846e1ca51e38fa20688bfbf97d53504817c6376b7277580f953b6d6d5e3d098aecd4ab73d4f3b3be85900a605382f8a790404a3f1c4bf0f56c017e9077032aa39668c04804d33c5e8671c80c42b5c7a578da62af750e2b441bb5eba2d1abe46d852c6ff20bfce1ed5cd4c766d8c868a3f79177b2fb104c9f1d3038eb5c5053a29bce6b9fb5044fb2e29cf1a101187c2f1637846d9294a3d7a780c1c3a3e055009c26e3ee193a20d525c817ac76db3f0422a67765d6c4b235d0067f33acea23942e7a566312f6811f4f8740548a100c59fe238f75b3354efa1ffc60c9ad1b07a4274f04476f94ba94d3109ec704524bad2693b70c72f6077652583d41a759054efca8fdc1aa8a694a617a6ad85ec95871756a853aa91632631dbca701f225c5819a05f6f17d0247cf1a2615d16849c0d165a041958f9411a3324a3af195c2e614b9d5b09e0fc1eaf0009c754b980b8a8c9afebaa89745849306446229da483a73ed8896b508ea19d5e63643cc48a053cac055a59d3ae9f6c4fd36d5ab3b68cb62c84b301ada94195f8fa43767c369882b530190d563a8a6074d4c111bbc69096d70d0ea771ee75fd6e0658a752a623b1e846661f6591dc574e3b9551b6257be0cacdb17de0b9decee1e1c20372244c8042fbcff724489e0fc78e6b28378e94a3c0f95f45e84594918657d09c908daf041fb82e78d5384d53b66c52a04def0e8f1071bc56eb949196c4cae3edd36fbf14b9e262666def69f78dff8c0baf49bc0b048565e91d159360dd57aecaa9b8ef2e7ce76d176a6820d148b343d43d1e32a4d21930308e0232ed66f44db0ce20cf20b4fb6e1e892392d2ce786acb359a48950e19f75aef9a00bbd88a45edc8b67be99ce93f5e47b815072adda37b720f76ee6812226cb1bf43ee0cca65a8eb4a4ccccc1b097516507bec96ebc27e064a87ea27b64081efd9a4eaedadbb5b00019468ef97009136ce3ae358bd1f8d92922f032d23bbc87baf7cf24bbe8d62f3a19390d42ebc8ec206ddb29909501909d02f26575097f2741cf44f66372606b2f65e7a787c9209f08ca495ef23541b1cf6ce739aa4868e2f16be7da4c947099195e3ce2c68dc964ce66f7aeb832b2a4a9598598efd5f3db0097f76b95c8a2f3914ef7662d7a5e03533b6912c4f8dd2d84f2dd8f4dfae13042e86a4ddfd10d1256c4fdbd4ae711107755c7de4ad5fb45347fa6f137856f559c2c294539c645b3a87dec2f9509e64bb4ce4795a6a25942d163bf99199a84e7e9934ec7a6c6856260049398078950e489d427116a891a749aaa6c56405ec76b5a264efe95f2b2af13d10734dddf76b69dd4fab25081a97282fccc4b2d7067b272d4600c1367a46383453540da0084761d576f02bfef74754ce9f878fd67574b13d89511ec8936c2e9d2c74f21fcb2bfc999720b9c8978aaf7c9dbae227edea3d53c008387c57abb44b72435d458df1656a5fe2b767783a677c8a11f48b270ddb5831ce96253db071400d80aeec173a55b15948f084d9a2e46b1190ae049c0d463d5510db1d2890c8932a32dc850cc458249b7d8f3d8f9b6a349d41325325e1bb7e2e770797c184a089059eb39cda8dd3105e57140a2508b72f7eff6f9ef42ea5c4049def5e01cfe33e0394e92564c03d8e0891b6ca5eb56a11d31084273ef4069c2c40cff35819214418accf7efa9ef19583894b1afa10af6708ee179cd584c49d7611bacc82e2533da253dfcea9a2caedef154494e3201fbdf8bec2b3d0786c71e09a7ab90cacb02a439ce395eb69579354d44d196842b2035e28a3819cec00f24201cc23189e26940e102fbc9e7841a939554a1658aa02a205eec8971831a79b1eea0f0705b007d3715622a6cc312b2b43d977bfa833a6d2e4823e32ecb94c65bfa91a7efe35498e75c2c377d1056014c4d4c9915d198f3d9132f28d5868eaaf6e35b8ad3305ec0f5e0ec47108e353ab20643518e4439cf51a9642d1567f563c67e7532cfb6b3af6a9fe468561a41ee82cae5dbe152dc381222b79957dacc9c8a2ea7a0fb654ed90e1274e5d434ddf3d27bbd6f1598632fecdad345313c897fce4f6777e854b4afc8cdc3459c8887852031ae050d12bf59dce2929cdb039a0d597fbb105908f8d5b745811043c8144106f9582d411e2db0270e8f48c6653af3bf308dc5683ecc780d7b414a8d24fc02810bd1b40a6737a962dbd6d7a0b9452c3594f3c9f8423ee0822a19fa5a3d8d442712d94232703b34756d47c435972c294a61ae606db6d77976e87df7da8c85ad228fcf347e2f41624e3339982dc2a70f66de857b96e6698dd866ccb969ce6b151a1fc535e15d2eec2bfd6cf2adfe251cb1d68243464d69dfb51d64e31676d84fe3c4272cff93d6b28b0fcf574a3d955eeb642cfc72e9de60cffe658bef9d2cc457fa3a8dda2615247676ee4d37e3cf61fe491866ac552b8f04785fe86331a66298e81676ef43767c75470bf94c1f932aee05f791776fbbab057caf8f09c60d276d16a52fa796ef72cf2465f11f6d294bebf78e70d40184d2d0ebed466c351bd90ba066d54213c8e4ffc777f24cf62e0bf1adee26ad7b817da7c624efb200dfe86ed2ba2ed8577dbdbd5b3009c151fcc2d47da127d3625f908b4f759b44755fb8cfd5c4645bfa8f64aadbecfeddab320d9e84ea217299bc68e2e7677652ebd42ed09b2b1909de4d9c3e5ef454268bbefb8da217ceba4a4fd08ed23c76f5cc22152b3ba625c6b4b2bbd082551f9e587b4e413790dd606b68f6122b2d8c5dc767ad49678a2e948700fcbcc7c7e1c210872e16a0bc213cb501f66ec533095fc8e1dfa881a1e8b5cb54ce9ba326557d9f23a3c11d8fec26e6d9a4376a1ecb86fcc221511b8af9d0557fdeb4c44af01f63fec4384a020832ea208f3abc1cb68f453fc6cb78d4b062ee14efb09409ed299a9c87b7e05e701338c0b825c1a81ba3d9af4ab04d98b68997c2c7de84c1bf644469e9cb02616faad8a7362f1c8c4115fb058d6c24771914f8e5938ba1fcb0be30aa8bdd08508129a2aa0358dfbfb1b4da4e401c970958f7243c0a65bad430218ebebb0390f5ae5884bc632c7a4bbcd5d6724a9998b70e00cacff92791a584e582f942890eb4f33975fa9e095c2fd5431b4bee56eff1ca057c84d973baf0016a99b3d4ae7c6fc8d90a99b4e54847837fbe2cdc3b5108492f9ce6c017fdce221c9445706def5af3f6db7ccd1185ec3bd001d4cb2635b4d211100809b62f058bb2d527c858cc5c15901bcf5e26d3c88f825797394f6782af75bf8e97ada084897f6e8c4c68698f5de76290da045abb552c6eac02b0057d2b8a0a241148c4833c8f7ee5103d7ebd9a42574333e46b0f084c46973484e12b0e32b5e994a970af32615bc54a273e2c155ad386736e63f9801233aa51c230e79bf3d4768068d3f7e2b4e24e2dd5e8445be57d6e4aabbdf0ea1c029a6bcc37f48b54a2f6ac3c88924f7a086843a37fa9fe2b0d99d9d992a404e4aaff23036df88fcdb73adcf238a316c55a4d7aac30d7ab9624cfe85ab51aa6b2c39897ec2661e29fa252535bdb5c258a608d3b00570f97d71f74297a1c125d9dd49f288f1eae8032827388c321e18b141f817168f3afa8a4d715a406e060ecc52719ad37c03b1b88989d630c3568dd363be015701383f60edaa709cef16fa694a0447b105a70bb5e7796698c7502e3e083d5edda703be2ef8264353cd0fd63953db4139c86f288acefe9519622d8b0c4a35b3bbf4323f90d8587b45a780ba446135fd65018df96311eb09116f651fd1a77697fdd10508f75f0a72a1cc4a7500d31099a3bc8552ab21778083121f476bd18b95e3c057c3082c118772ec3b130df12ad8441ff225815b03a206edce84415c130081ff60feb639d422ca45707d9a7bab0011b59d13fb3b4270a2e50b1e013e80dee68f4976a0c5403da009d020174887d5c72827e7bac682634a5e20bb651c4930fa62c16a839d03dc54e0157fc5d1faf15495c0094170d26ef9c5c010dd27f160f9d21ede2710cf6a5694f91b8422b334a0278ada8c4d7b1d9dc931ff7dfd5b062060cce59b3b7017895c904e409e57f3c5a0c6bd6add2064043ef6ac754bfe495a432dd0d6ea5598b54a5cc9ef1f5d4a799098d5fc9c004f62f30e2ecad82d1293189fb0fedc26aacda103993f12fa054e0cf50b62394983e787cd223077fb952ed2b97cee21217b88d9e2b65be5f3e612da69ff3d7533cecdb26864c4ff1f04038302a7ab31772adc00f9b5069bec3d554c46d5da22ecc4acbe837a8c4971031d1b441b363e8ae09f5c6ca7b6d52028378d183606096b9a762c013d6f8f6e413ee4759af8d72416d7962ef78f4d7b9648c8bb7162eaaf44f39f74f66b59898e285bd0f06dc36470e369f199e1e19cfd3a26e8cb01d1f35430120a9eb8d8b9d60d980854b4bbcccdd593455bd31b4c0702c5916988f6391bbb5c4868519861fc64ee79c8244aee72bac44b96c2ef108096e5808109c4b85ac0bb399fd1e2f4b02e58cc8058a3add3fce833ef56e6b9c8a96994a94cc7cbedc20f98f6ccebf2470ca8929f68cb00b76489b58ad5a25e20dd7a561d744c0cb4ebd16b556ce9de2b29745a6d552b77adee351009148f37363fe6b699c030e40b2bab5f07651c575b50704f407e4260689a646430a2e1b5e9c4e0f7e675dfcb9bc58e883c8d43ee41b0b3d99a3ba3f5c71cc6cfa1a7b6f44d92996ecd7f2d414a15dacb9d84e23bb2250ecf99fd2e6c4026954a5453b360141da25849599a3baaf74f70b8f35832657b314f5a277f62f910dc68aba88c88072ba03610991d28ff054e24889db07482d6133eb773694f01fbd46bacb45b6498a86fc90ed10d0d2adb468b5e2b48a90787e1bcb2cdb9791cac3bb45ece8161c663bf5f44d0590c2b306ad2639e388b01229930ff45eb255dbbf592ef1551ab2d0cc8b24cb81fb88a9d8b23d47c973875ef84540819717784f5079696bdaa37f13ff531bd2319946fd2f9df1212c3fa67e7f005fefb00b23dddd9cc0e2860147f80895cb06f1bb2a7d49ec8958f308a0150a810f9a6325b657b04470de0173c9db3412ea318ae1476b568ebc6493c3b259e1c03994b6adaebebab57bcd87779b319ea3bc2788f37df9df7c6d87bacc323e1bf066a89b42b8d9a7df99d108ce588a4f1dbc8eb1088e81ed27e1b935c990b70a0ed3eea539480488045f862d12b7c9ec4b7687a6092c0cebc6195f9c313109063340984190e62a6e21f3267d4bfd6edb7d11095ae0f4d88ca96d954f5badc8003f61c4f188ce02ad46c8cb72f8ced0abd56fd8795db37796eeeaea4131b853a0d53d2bd6028c6b037ab5d30c211c93cef0c192269c10b26d3c55360a314b2047e01d89347b94e8a46166a36273423064273ca032d19b9e29da263cf5a8b36cf1e5261958d7876f5ba0eac9c22f2e9c648ed8186cab1031a1253c67406e3a35202784a48b98b7f03bd2717029a557bd4d8251495b2ab411a4141d1f4c867c638e2b5e44b26c5d542752cfd3c6a11a7a2920c49b49057f08845d2ba2968cf48a5ed1add48859f009af75c6a9953f1f3088032e42f10702e3623950c5d54472eaef69b94434b3789ecc750d58ddb735234c97cdb590c7702f102a41ca4c0654848c2a1384254aa39f0aa58a01c2a575cbf8a1dcae859931069d1fcf0c508303a0f6a6a742ebc19c6736850b2d7f4e47540a39ed930f211c3e51c2fc9d4ca71b2272d3d2f50de583faccbca03ccd632e71a491e194abb8821bf2d0bfbf51a96095edcbe18a8d3572d284437835699dcbe97ccd238ac029e77527e5a9fb086060e9803e10a650b651b7684bcf5cc51a7143c3fbd5354e6f6599237117e23a7ed1ce75cb4a10656717677486f0c486c37302c40a5b9b0b05aabda54442058f68d8eee40504cefe631536fc84172fd15a980aa6fcdc1e52a10b0b45ec61c39e2bd11e49b912192d14e488bddab528a6f4b1b1eeb283c33b6357f3db025ce83315ea7feca438c7e127f6e70a9be655dc9153d819b67a52575d4003e6d56fd08df9bd45c24e0fe4073beab74e84c25732a4b4fe446c687a5ec8ffd19dfe2f4b9decf18fb5e4d7375c7a32d2794d90b5e7b7564460c4d342a2c76da84c47424139a46a9f7ccc26d85aab373a76ba7d0696bd584c3c853f41bb4ea8f7861e368c8efc7f0bb018bd4838fee7a17b79047f0250c14db6cda6f38571377d6596e31eab151fbeb305a505dba5666e48926b78d10c2ad0f62ed9796061b27e71e2514848c53b0c455433d6f702b5e6c805c48d65b0e1c0296d207a7c8ecc0e1068ad53f4afa3d6751e2ba4f657b736e5afdbfa26abf7a074b2708990889aabf79832006a1c2ecd186c91a4f1da64218255f3514dc66f21a93278db43bd5afd4a334cc8be0190cd60fc2cb53c7bfe2add051a3e1f849472362c50ba4af023664a86c86ff3641ec4d61547d2e9a79e9533e5d0a459838077c7fd20e9faa0d2c9555172084e478338df58fa56ecc1bd1930c340f30cb44d53de1b168b3201e2a3ab97d3536ab4c5b24f8c8a8985a021a4ad40a4961a3018d1ce786d126ea40232276abb1441536a500e77f81f7680793a16a5c9787c214bc78d1bccd51e57b011c18e9274a8c308ba1047455c290b244f513cb74cc691b9191a78aa6ece767ebeb07b282c5532fd486a9b3c2f8070b5485c5768c872b7918c1f2f1b6b3b147efad4ca1907d996cf48463718697c23b5da0dce2b839ab162d8ea282f12f6036f1e58064c335a8b971b8a2b7ad822c29001abec6f245193efe20e4c11738a5ca105abe579d4488b8334b42953721c35c7326810971cdd99046dd3fa302e28b15a0236da0c38280fdc81f6605429efdc4b3b72d9e71a9f1af49de49ff5f2be7703a91cfc3684a9c16ef0faffba262f5988bb31ad9dda17af314f81a1b7686f4280e0c1401d53461a534a77d399c421b3e1d1fbba6e1f002d715dbdcdb2dad43321b542b5e028ba78c16e58915ab5d6c72a407d7070289c95b4e6c00550ce39b897ad74982d2acd53307c6a8ed8e1bc81226c92b8ac39cef349b4b719c1fc679663275b2a0c13e802dd89c1cf5412f856241b18a1dfa0fd7ce2836bedfcb8874d9ca87654c68822150000552b91d481b72bfdc284f7ffa6088de8b3ad252ccd47bdeca2c48206bb842972f078713d83a313499258877739ca4eb29e24d6da62d91c13812d7ec12c39b70598b413169a8659c5c333109a866214b10943406e80ba040486e4a4840b511653a05fafe8e623221721a88707e63b9a6a645c0a431998fe02050c55adba59299877d6a6416a6e2ab73df49e7f7d5338881bb62abaa1df22eca12a5abae7e75d4f8351623248923fe299229c08fafde0d0410db2dfeb23a0873c75c7931821198de92f47189623896e8b02f42c60d14800028acc4d57d5b492b20f889fbd100371f6763290eb48c324391eb230f7465eb8b76028e0bad7deb454bb3273ccc7e2754ee019957ac1e85132f03426bb10a88584461cdb739cf615fdf46221cd90a0bcf039cc67a620bc1693c96cac2732cc208b1191d2ed72023481c6789032b0c2732b49dc0874036bcd6f9181a6a120112360aba3b8e6339fbe7584d0bc310769dc155808b5540516951cdb750fac4d55daba4419e816b2102df3938870f1b7f9b5675e958a0cb048123e9c61a8861244ae32b81d9aa9de82f8afd17e9f51ebc964d733008d578ea26a65aee385cf1379dc41ad278c9fa1ed26e307197d670451a0379c2e7cc4ee7602625fe85256a04a7f82e3e4b250aff33980209b81c6c63a58e75dc27179ff39113e0e64ae9994fbb3b10cfc8bbdd28fefad4022afe640736e7717d7eba72b264ebc53fba4ed532088cd0e2df39a8aa86fe557f3f3301befe58ff0579ddc489df0674b032fc7ae7a0cc092efeea3fc2a4f6c8415c222da07425c5657e015db720b40d910840a4a0c60c131bf2fb8d50adac5b4b168820a2deda4fd9070bd73ff93b18ebc8fa3bcc431484b38383388ef8f24e377f0ca264df5b766be0516f7ece3eb73b0fd241fff717fbbb6ea26ec338f986fa503088922fa27a0b8352460868f40f31a790939c1b1aad971608fd68ae25b2529a904da22c45f3184c3859f61aba8a888244aa6c079a44b242d19613c8172aa9477d509c771665d0dd7991a1d400102d6c8db286673c13676ff27e9c92f4767c53572a4177bb0b6d82b6c17b2e7d41b10b4976c2f871829505fa5b244fb489599e7c798e7d2a0d1cf12e329e5812ee9fd1c83bd370389d7a1c70ef2e1ede9daf7ba910bc5c25304369076493ecd673d1e4d8afa499030b7bb73963a650ce19dbc8c8cb14c6b022fa02c2bf1cc63ac49e6eeb3402f5655e81d692d60460717a3285283f5238b1972c11ec3289256648fb156a15331bbbc2ef32ccfc75dff139b3003ffd4ab2701c7e255eefa4c0d32e1323c7257c6a26732286c997268124dac0397d327ace3565fef576d7d9d98ae5398143cc8aab0036c18392739b58f500c1b30b939567f391f4b5402e40fa034c286921040293d608b8ba132f5730c771c13d32e20ca2c53ef225e438f091763b43e0e9d76d12f48839afb88329d58e8533b5c768a012eaeb4a7c4cc1b5779920c90be9ab95c21282b0de951a806b5c211ea8d661e26f5389b492a52e7c4682499105f22e27dd62219b3438cda145a6ce2485a54eba0249718102250b52186e649c0d6dc20af0d2c4adebe7d407e2c4bfce815bcbb04ae875a5da734bad453644eaef67d0705a0a5444c539e7d712eda8edabf1f9576544d3a3a943406738bbb0946e93229ef0a667e82ea4a322c0838f77e788bb40bc889423d303ed1e10624e3e220393ee3273314a61d0232f51acbd00c39331a7a3b20c649d3dcb5d4dbe8602a070b5718561ea07e6a949b451a7c7300b1f760c9707e5c0d97c8cb2c5aebff9a6e33131f84363a0a74a1e6f18fc14391f9e7345ccc618c53e2c80cdcf4dbcd1914c6b9e17ae3b2cc63459207baa8c1788a444c092d91cb35a107cf6a408f696dd4e9f3f41b0610a270ebbe18803d850169ead01bc0481b192c66e4c912ceef7f5c87d4474a3d43a7bce8cad32a951715d48ab3586ddaca5b7eabc3e9d90d9dd744cc6fb2feedfef6071a62a916eab699ac808abb7b9f13e5c482d0cb62c6febb5098f95e2ed8a5c6827dfb08c68fc62b1d04b569deb1a5862ef05afee0c8ac69e50275bb560bcf9085cb14828a06db2e6761b870dea176c016ef2590cf4885ab489477d37325a3a1afd6b1d8b9bd28cc172240aaaa81dde68ccca91c7986f74641602140b9afc0a79ecccef036fe1410927a038234ba1731cea3608ff4b281caced2ae9ce313fa500a6434a2aed138122a6b2393ef62bb496d468fce4eae26537a97d9949a0bbafba4b567d48d4ac6e64bfdfabebf95767b91a65fbf45df8f6343ec4a28ac1f22eaf84b26686cb34de3f47a4a549eeae95713467358181dd203a026ca45bd41d06407dfd6abcd39e7d535560c11af41663cd81b6c3ad662ecfb79764b126ef58b060a93a5418ef837c228a12dcdd074e8c0756724d462f7c0fb6753caaab5722570d9c442cdb9b2093c4548d2e57c7ce9a953481e972dab0e02da467e193e77da1cd576f42e644ffabaaa1756bc0809ffa052998b76d78efb65f322015da85847051cbab823b4f3f70183350f010a498f212587352aa6eb507c397ee9d5db09ad1669c3ccd1a47b29d5b9f725a209fc2f6bf1b384ccff6ea67eb2a22aa951ba2b6cdea6f21927d80d7f936b1b886196b52ad2b66aa3407248676274e3412e69076ed66026101f4c2991249e9347ed12a069a79c026d00ad8d84e10c3090ae09df02ece89765cc9c071b0ed4888903a7730560eb6c4e33290f80db83932b084a85812a7e6352b30f2c098b9a145f52e6f41bb72c292d50e15e4c57a046012832be14d098faec69300dcf76017c50e09ebad4f81086f35f71d8eba19422921f42524b14cff53d6b5f7146b421f9c78c329c03bfd238ee7f554171efafd17e244085ced80adf1a3cd6d4569d1eb65244031dd41b0a6274b98ae5cfa59628f09cddea7da0fdd44f0bdd7dd8c0e9d48a2587e97cde2e88b50ffbfc82952f877b1af699f55218aa8b00b38ffaf0da69696ae7e6717794b597d05465d912decb73148f2e6a23ef67cec7f737205f72398c69c18ded88dc8732ef1dfbdb09e1687ed5f640ef242b0903546341959be87587a87a28b21c44b1c54628fed445eb166347d45e0aaf274270dac85881fceda8d47bad00a53116b8e8a47839c8853e9f06628b997f9ba92065007cab5c636006fc450106e01830bfe9745ee7e8d8d01117a1683b30453d41954b0a6e8fe38e2c2a201f3293f6da274ce20edf589dd88d949ff193cbe8515af5a62e2940b18870be3251908f35f4585c005fc78e7106c6a1f9bdfe9e346252528252179259665655b862e5934e6c7a62039f11dba6adb8e465665dc0424b67b182bd60c0cb1fc6923c9d522035d9c5b26b2853bbbcdcd687abf2b81e94edc0edef75e2db916a5153b404be19e57082e082286cc29821392db75bfb35f1b8dfcd595b71393062c21cefd9fec94e36119a5a059bfdcf6a132d3f9d455b86d7054089de211fd173f7741f66ac71e26b666ffa3c4e129b4e8eaafce49521538a4a5988fd64085d6f56595513f7524d498bf4ea79357a23967de86a3c58218ca93886f1a70eadb8bbc53b664ae8390371eaff88549e12fb253775dc466d9cb70de64175f89e8866e48c47bb7d136679ada02ace70149053776ef1604aced59e082cdbcf810cb0598bbf176627b604ffe1a02a1b10e42e85b21e87022093254ccc56f32cfcd9466ed64e97791935ad9287db946e3db6662e7a002036a6a8b88b299bc93bd07ed7ee0c7e23cd4d2299764c7076f1948244b2181f754f7f00f25307d33dea37eba23f6edccd5582195ff0705eb5549aa59649905e3154eaf43852f5da9ae5f3f49939abb9b7a8d263ee491982dcc26c7947cdf9badd557a4dff25e48a58a04a94d67a1c609d06812c364de5ea112194b60801f7e568378743af16779d6c35e547091e1c29f4f5befd4f402ddd5326a8854a44d02e2dea67fd75c2b377e38c9d11907c6cba24dddd77c92d5a101555a6bada4d97aa62c35dbd3c3aef108694c8404b1a51c95fa96d221e69e3b4008929dada9f9323555ad239d31d1e456829a983c4d6eabf56f350cf069234f482bfa6c469c39402a4c8f482b01cd5a9bb499b18812c176812e5d324977e27c8c7a54d9b5709eb89fbfb2068e27afff84b391b39ea5f851847de5ede9c3b8e227bad40481943526c1ffe4b25a074883a50298d907de107e34d73dac17101bf062118500e0b6df81b4d56e04681c068b49e3a3696f6a5b29a6551c1e35a612aaf55d1173d3deabc674c03318609549b1b3458b91bda2dd15e6acb247e3166440ac630662d6aa6838b3da0c4e003583aaadd66c82e9706a92277e5053b215b4a9342f4bd8b94a76e809b32869f0207a509985c130b0f0f2b0bbe036da3a7ace084889e22900c6098d8c0fd3781253ab8dfbaf41fe1c9cbbf44dbf9a098940a1e0dab97b172b02be251b644f16ff3d45ce9c94fd70dcd8d26fc8116a498bd1f4c7d55dd223b6532013d6d7589749a5e8fee25fc4cf73faa2c9d1ab0bb11c8ceecb7ffe642f89d153315e7b337e3ffe3fb0c080479e20ef8ca8c5e29b4843ed3f6a9bfa86ce479e15c074275ac1bd5b8c8cb1c9156c966043fd121a796eecc56e821b5a5197ffe4e44c4b3c27701a4ea4971e49926e49d236cbfe81b95514169e56abb91a2ba48d2ae50298d9c2292d0b39b72bbf698de18b4b884482118fc93933e37833994a9519b4eb076c2a0f947364f6c4b4fc6793d71893d213412e23213177ae4917af851bb9d2d23565e7c6e1a72596e43b5fc150d3212e036e29513fc17ceaee1cc8ce80018d0e16f1d19c593170115079277443c7387bbf5425d97d72de03ed7717f85d9568e6d33e50fed06c95c101d6e814f08221e933523e5c8de92411232d0bed0a27ee9fccd092e5944d4ee8c5390783b56945e05052c481dcad1694a921565856932499b10c6607ecaac60e9bc76f2053a761a23be6cc78717714f7810669791dab2370c32484f3075eb4669b4c839a4602356d1db296b363dd2efe0672a6139b9cdf192fa6752d049b09428cd71b4935d123550cadb0b68e5774588022bd5cce10e98788544b8304d50110d6ba397fd71024f0468bb024603c12cd85a371bc0631124605ae09780584c2ad574490127aafcbd673de15085e537596412d27b23e85532c1545230795af9ef7c25eefe452b89788c2fc38f13649c8ed5f7b8a60b1a5c95870a734734a8ffab6d28b9479ca00924cc9a059f9789ec9b60af4ac380f967238710e6963640384a5f556d1e8f11a0148514f39d701c6b883c17e0742b964bd1995be37c70014e51c324012460d643ecd9b919ff85085702603c7cc49971c608211b290b3a8d3621ceddc762eb17b95c660f0b8d10dcd59950dba060458d26fb8b42467804c5340ff0379dc861ba6aaafcfa56b6540f17edc2a8beefab7eadbe7433ccc878bc2ae892d3bfc6e0291ed56f5aa6216dd2566d42b74071418d949013f028a92af80e1f9638d6f3e5b2b505dd19e0c2de0c2d36757e957904a141b7d9e347a0a162a56fb5469e45a64d3dcd02ac4740184c0f6939f474a70b29d9f1664135556897fd7efc2714086d60379e150025b8c8acb958915ee0d14d83548fdd557325fbe9c19750301711136cea6e963b4f72fa8cd2f9ddb5a183656f38db0b021dc368d39079d3e0366daa9767db7f1f2235a6154999dd2b2b1eeff88cd64ea992bfe4d73b0c627170b41c7747bbab30067f5d60be24b1629f582b5144481a3c20243621d3db11acd92f93e3a4bd2a0d9db39c6e1e6bb7e7498c269df1ef0edf081853233538c4fea364f9b21038ac22b144b8cfbb365b02420d47ef1a8dc363c8b2fc00f933a4f056fa18a68499f159c657ccdac91ca41178b1fa8b2ed54e831eae1ff63089eb0412088086895907cabfb7b5a89528129b0b10ed13b61c6d2c374c9e6b5bc0afa8c51c03512d8a9339cbf67b031b75d4a19c9959bd70d727ff75532f5b21112ef2c5c1fe74c8957ec142b5dbdabb86abf34309c0bd0d6e4a64f63d2384d9fdf9dfd751ab58200e21ca0dcce576ee3c3564c58cc9cdf37657b33059a8685eb5e15039e0285f8a055b95cc7f26d668e03a48637e296845ff6aa53ea762f58631d5cea680054b6d2bd8343651ac88915c92e83c20d0a4c8c45383419f8f7388e4124ce887e4b97fc3fc2f14fe7ce9a0f822db9f46eda85e65c5415e2c11f56e26d8c56e6a762c5d959cb985585de02563088871983b27d954dcd6912c333007d4aea691ed3dc2c60dc1ae5ff7698eaf28f4bd2e095e81b1761d3532942caeced053b87a027bfa24959c3a7aa6dfb013bff57591126ea037689fbbe7e4d599077981ed0d14cfa3b0652e974c5410db5477874a9b699c15e4f944d43ed7e92625343c3e24c623ed0f230120aac44f65f7e70f1e588b835e5ab14ccd8ddbb74ae8d97854f6aa381ce7c6f402dd135328085695cab532a1c63e1bdbd5164fba8341a41bda61ead9d7f2a3783861e798b05655e7a1b5d62aab9623a38475e5b1953565b27cddf2f8719683d57c480033f4c1d7c4b8ea79b4e594f98c6219e35c0c00b5a3170f8c452c97a95e612892bfa7ec7e0e38df9568a0f8a4e88ebc25c9a952696b5685d2a63af42e61c136c33bdcb40e0a456721afd5da9705fc1e11f5ead20a06a72d34b5d241d68cbfa81587f9e0c3916b04241d36fc36ff65cabb4e59b6e3c31990a92786c789637a93c011cc5efccf1842d7db1170968ffb7ba64044434ad4272030c1475c58d87eee11249689af6649f62c439a77e36a056766001047c6657bd9cf747fa14e416bd149c6d80b812b9baa6cba540c7e8e2184a099cccc6694771198ba9aa9604dd73920cddc396aba59178c8c919c409677cc96b600be314acee6b25c2ba6decb21986b031fb1d61fa45b96bab0f56bab4859f2b1272a2097303d971b78914412f2d4d85e51ca4616714ea98920a47e18fe69962e7b2cfe29653c671f26ed40ff9fe4135b3295f5bb8fbb6de60911c78709bff83374f6cffcb76302049b914f872bcfbbf7e395451ea6eee3d3f2312066fb7e5e7fc67d64b0e2e40f834ee2aa8be50756803446b22a027eab5331917fdb72be8270ce8d8a057bdefadab6ca71854d85279b7e53fc389c22458987b0c2cd6c822f2c72e3958daa17fbe8c5ce27e6acb420106b6aeadbcb190e24a3505f85cc18fc098a5350ae6e9e4f7a25e76dc3d51da12f23bb2165ae253914d36350b5a8fef7af5ca03b03f3cf2fdec10c073d5110b59b4ee50f330b864ac2ae99d563bb3537ad1a175071dea5a2082419e05d8b8395a242ee54e7311c851c5a333b7fd0128058b7c243542c633b3b51c6190e2f143aa75e859c502fa69df5aba50da5b9dd2b814abf348a0e6b7045c177fadfe54d5995be11df58cc4576ce96ce7e8fdc3aca2b84cb8fcc8205b671c8cc115e21494db251d56add8c153936fe66f04caa8fdffde2eb95c00857c3dd7ca0a4f201ebe35fb4762717ffb4140065a59ba8230e6bde617a354672554d052e950f1629c911bab00573ff6a49d9d5aa0e96b43d7b235f6897152273d53e0b9bb4af9e6675a53fa8686575522b1e7229ea1054f14ff5d913f05b1342bac13bf6da83289461cc7755b9e8e3c46cc47de7d8e14e85c19de63b0fcec6061d59a644e9a5939aef56167d897e87a3eca58e2444d148ce4f614f5b88ea28d903e124942831011db7a993307d9f3cfc0d662927c36402a10e69cc9cac4cabee96bd86bce9584e452a950b9d30d993cfedbf07dd9324a5e0cf5adeda87f492aacc40de14063d477a3efd91a472776dcab14ceca1f064ef9029f055e2658142ac2487160839145b29fcceb03a232e30419de5ce56007e50f9e8ebfbec2aa3f51f7d7dd124ce4de2cc2532acdff380013722deece813a862d99192355311b38ed31e5a42a0b2d6781f2bf0acf5351516c9e5a7a8d25266608236e51bf6c86af5695004169932f25f94662f801ee4b73842850a9e56de4c54de91419be503477627743e94cfabab630b920145b722bf2d89896c05d5d251a3a0b088719e05e330a975a5ee144bd1043b2d1a45f8f211fc4288c5b78d22197cd619dd019b8fb37032aa083c76ea4edfcc5f0151ebb8a595bdb7be41a61fc45e8e582375628b5d66cf66de4f540d254d1d3d95697adc32b36493fe269e7f900b27fc137a2b8154b5b45324190e4f6bc89ade026ebc5aa976fb5a5a1607db292bf089b2924f4e56ee9bac82329d367a0db1afa0ebc36140adf325d2275acb7c31d1ef1c7fa89af826700216d3a8a0ddd8920b455a160e1c0b9b867b44cba60371d3c4415dbf4d9e57099be7d8a00ecee43211980614cb33bd3b0ece65ab8e4f22edd3a324d770132a417afe38313497872fdb53ac97db9bccb7dd16f1fc6e926313827c4355ee0c4db6b18b07572fb1e72e81de59bd3c923bb8a2f87798a5f0edbed710d855e122a6db63c687098c420edab16805d487b3341d0405b243c8473c2ab2864e7eaa89f9d44a58f97afaf998d8c51ad608aba2908abc2b4614981c42a520626b7c54c95858c040b24a5bf94d8175afa94373dc0d7947c4c77a19f1eecf016f65be995c7473c11eee7d7aa738238ad6b31fb292131a95268d4175cf72c42f7b551b82ce0f288301f46acca6c59c28a579d90a92cd4d61e7edc7453922029ea6b840307ff5632f797cf06827969ab5aa7689216c5249b50db2c3812d2e8ea571b2d0499eb0726405541a4e6961f3c6ca814f02f7d396516606dc4d2fc6439aea3fa212aa3a43c60dff5d6ff7e3e6ede77c74ff68e6529a2ca8ab3a5e8707925a1d12c5a8055ff8ff663e48e4248c436d5fae965d1d716adffa1a66280c32d21363a250726ee7e40468b12a9e827d9726653a6a83dbb99a93a7f1989b5a5113a5b8179f11f951ebb4edf7f8044987ba343248d12bd94170bac3b6e4521b2de29490d55ddb71d89596fe94b1b2c7db0b14644f0c90aa0278779cec39ecdd6a001631bbf5543d99256b105f0204066a3726967c798192b12ca3fef1921c6038be4b7a5f42755f836e41ef4a652abdbf656d19ef2e6e885c58fc8290a6e4a39f4d693ca42782c97945d155b7a99eea0d7b972584fc3068fb4ef0b42b698df67c2d4a3908728ed0373d8a1aac55cab76b69ed57621860b3bc200b736562540151728d8cfb937df77ad5b355a7cb5c6808f59f9881d265245f28179052fafc44080a229df1aed663af829f46f379ba86848485e35d994e4f51905aeb8770d3e442fc595c3727ab4e3eab4c53ad10790e1a650b251aadcbecb70a2697d20345d2514f6eb3ad20ddb01d224b8e679940942b990aa08e9a16c0a559344a860beaf4932f7e4bc744e973bd001a30351851fc4d1415a9a5eec4d356117f27c8eda8f993a4c1cd95b8cd136b14198b0b8559a25cb0f5db716c520f73b8c8fd5bd9ad0805dd2eec20030e33668d90d75e4b08c3469ba00ec9f352607eb47671a283e60d21b1f5ce686368377b4308f370a36a6d42bf8943789ea5d719cd186f48936990cb111758fa2c4951af9e9d5af83720e7343d64a3975639c1a56136f867b7538c54f00fb3d39b95a5f4ac3fbd01f8c6fccd87d859a25f0c9675d19502edfbd85e92ca03e469033aaff6895920181aa7036e8383c15833f3092949dd7d644928c4618e4c2a3ecee29d46276d1f1200303bdf29601292847bbfbed40f0a008f0fc1a05f8efdf70a26d47f0a60222bc2ebce07e17dd080d646e0dbcab7b6e5de726f29654a29c40856088d08d77e3740302850805eae6a2a5cbe2cdf0dd00b880910131e57f5142e5fd177538567c9121f57f518976fe8bba9e233654a90ab3ae8f2f5be9b2a4156acc05cd5625cbedc77530506058a8eab5a0a97aff6dd54d1316264c7551dc6e52bbf9b2a3b4a94fcb8aa812e5ffadd54f9a142c5e5aaae72f96edf4d15d791232f5775142edfeebba9f262c2a4c7550dc6e53bbf9b2a3d4e9cc85cd5b2cb377e3755644040375562aeea2f2edffe6eaac4fcc4f7a64a14aee95b258a472b920c2337d45aabc6c9d1743497abb82f4b31c6921b6a57aebf7644dbb9be844f15eed29e5c7f6d8afb6b48f0ca5f11e56f7ac20ae1c504a56281ba0f352bd7bfd2f8d48bb167dc70b8bbe24a63d15c94faeb75a9acad9569ad008401b8541657ae85488321d73f64b92195f9149ef197de0446658157da0d8cf2af4218d77f822d7fc2f51782c30f3c5cd78400e27a12516ea8e1b88a9b1c317315374902caf5d782b8aa3d9f172a6ce8ddd07db4abbd70613bb08777dfc7fdc757cc02bafe0c93830d35f9f5b5565cb1cff9f10b7fe0dc38a3a17de8e062e8023d7a76afb4153fc9dc0ee2537e7cfc54adb021c9673583e29c5def20242ca8cc511e7a32ed8a9ffcb720adeb3f83e24a0b7294ff6c0605dd96fbf8c9dfa7f8c9bd216ce83ed73fd45a2f739fb8b23e5cd0650100f98661874d455413e85021840a65f010a1a2e47a1226425018c20a3d3dd440085538c20b4db3119e7cae3f75b9dc64278a243113a5497a7041b2852d490e14c70e09ec08c114dbb688326a1ce5221048a2e860c789ce1228acd084040b245d00e0091c4616479a3ca9220942a0820d6897b271e3bbdc6447e776979becf4f0e2ad0b3d39e54639ba8021747c8a50c1c51447cc408b4ac505498430a588273c5380028b821d894d356cdcb0410413405b2cd9d1a1092dbcd821020408264034c10421403ad88000979b24f9e2b25c6e92c4671ea9d455cccf9ba6bdb471e5bf81137420f287bb07410aea186f28433cd3ef79326a37ece1dd2eba4177ef8e3a9e673a87e4e4276944cd77e1657efc5cbe96fb437c8eccf1398225e017b2b0b6925c253d533bc95534a4314511649ee1255336a90713b607e9b694b207e9ca1e63769b73280c434929edc0f07439eeb9af2f9dd374354db311d531d288aaf5650539a29820b51fc449c3e4a708c6f0d07ec6e580e2940c7a7e8a241ba927639c120037001787b34c944c54e6d20bdd9c7ea5f4265ddb755ca85d7ed1658d51fc5ac7b977d33418dc81a8badcc508b0e06eb6bbd93e6a577af705b2b53bd12d1a1b8eed6719ad9f3c19631595935d6b12643ec9eee5d70e9438309f242769dc7cdad7739cd4b81965279916a1c506b1ed5c04c97da51cf7f20b2df771ce1aaa00f7f169280231b8db73be7da4313e178a400ce8262d0d57493e795a0864cfc7e5baa6f1d74237f272a0a44de3bfb56c4fa952e4861b41cb2792f43a8651996de23bf30c4dc3affdc0f6f38d1ab7f1b6d13435fc94f2d37c7fca2bf90e4ef9c1e0203df9891f0aed514e6da333d4d0f39f6048d5b0d136ddf3d7dc689bf826161118b280b342208d28ffed0619a62100076e0437990e74df33cd7c0df4c08d34667c1a778a80326a7efd4c23b09c4b2a4081c42dc1fb0116b6e083117eb6e881091117d7a80b204118a9e2ca158c00818b221120f20327807104900e86f08189171fa4682e1270456c071d28f10208295384423e60c1d69c1d4439b646676b0d98c744d4447c29a594b1597ec7691f9ff26ada88e29f1f4754f4e8048eeba1dbf1801e7a420c9ba2b312b23d700b28a2f3e1068f8bdb0c1cf745a8f2a0ebe107b5abb26d86244c5c7f2a32c206f5a083a4b4071ee2115cb7cd109e52fedf637a9377b949921b986274072ed7cb0912579058e109225a7844bc60e99f2c48d1c416bed0c20e557e688244e9145e8e601f806387044c6f2a5d6e92e406536c93a2040388d08ee06ad880762d6204a18b326a9c090346c2c8a942116050686208191d0ed77d0b1c3818228827aa109941b13d07a6fc64c34f359c88cef5edba0d1bd0ee866cf3481e29ca255d6e82a4c7ebd180502b738d33c7183f00ccfea4f22a1cf107be9b8fb76abe354791834d837ff1fe30cf656f5d7e9f6d448278c775f93db539c3c4606954f267b2f6f46f2395da816303a1243c228a5577b03fed3d93917e6f68bcc6a022e3e2b1747331c6207e0b65903009e2a0f57cac76b9091220dc54f4c1c95b4907b529630d57b5ca9f014878248fbbdc04890b0724d890e4dec3c68defd786786f5a8e3c01a2878ddb5a7c4765dc091cf714acdcf7dc7352a8a7a67488ec89215f5cb75b676a82840898cb4d90e05c7bb9c911b31b9a625c8c7886a5e5197e4a81c0486024785139aea2f3f51199d80112583970142578d0e356704d6945591092c4a660559985173dcca6173fb662882e7058fed110c2aa9a173f1f1e8421e88007d60f2f08302f7ca496b07eb8f8b022287d01fdb913380cc187e51f028058957af16b171258bc58fec93c61552ee80b9dae0a302b603588123e2cff629cc0aa9e173f47c2074a7458fec92c8155435efc7a07071f1e967f9606ac2af2fc63289a60c5cf87b6c513980feb476479c7d05f59a02842082d967fd50aac6aa370f2446ce4c58fa5a8415010cbbf1a18abb6b888422037014628a1c5f28f593fbc23129565aaf69166382187ca9dad699af63afc6a21236c98ba534bb96a03020b286eb8938b1bd6b8f3494dd8f0effc6963371a11978d51fa696e1cc3200d7e796580988d07f0e840f334e10937bc71e714ec737dee64b5f6ae9a445c777677cbd0043422ae8fbe872a20433434f857d3de3fd49ea5379bbeebd0404ac1938c9f26f851e098bf637e2aceefc4b0dce4c894abfd0c6dd05ed3bac531a18a8ee0eeeeec2766b622c618634fa55ec371babb0f912a0743e9eeeea0d63ea546d7669432ce769d4a5df5de5354aa84ff6cf18cbbbb3b333337126ac82fa5942c65bcc2349d4e1f55367cf20fa589729f0d25a13bd87e93e90d90812bfd59738ffb3846696fc3aabbfdc8c6a67de89abc0163f44e3441efb4ee7ae316686410bd0b90fb86d9e21a1ec904830d4a25b65f9334f8fc0880175ed066db166794b63135cd2cae6ceca58c5ed92c66149ef18f1f8a674c6d2303d3a4ae011ae572c35325c2fe8c94e372669123b75fdbb9fd5b6df1389a3e75e78709b81cc3e57f99b5cd044d4d33b331f066d128fff074b9dbf5f0b0774a588f8b58f99ad6ad694fd8b0e4834fdbbcc89a2666b3e815023af4c8a40734886e835589ac6b1110d04bae5725aebf57235cfff04576eb0ecff8d7998d2f3fac3bd7bf0beaacb86ae6dcfe706aa39b2a417ee23b7faefffc715519770367f45897cb47f0815d1c9e338b4c23d3554521903b7578a6bf94439d15ab23f90668ae6761ecb9fef2e557cd8bdc145604a4b6f1169541624319d8c9634a76c04f8eea2edaa67378ca44c3654ebe4abd749438020e7e60851511c850e92182171c2b53234e507424f28c6c7651e802c90ea2c04fde367de3d3a0b9456519937777fcbee89e8446d411ae8ace8a33b83182137cd0e485e5e66206d73924337bacfff7f4300d93497392b571f626b54d879e57ca2c74e0be90927a5c57bd10d33099bc2a7292b5b56391b3372d6e415e8bf3739ee938596d3728136454bb0d8814d33099342759bb85f2c3786b38faa15ffecea392fbd8e5ea243327cbe8ccdc9c0eaf03cb4d967072b9cb4d9620c2e5264b345982e77293255c975fbbdc64099df6c0a6836fca3f7f3fc566eda967b5944bb11e15364a6db6179b179b5c704fb9ce9be244bf7ba3df81da77f439eef976dd5370f3f984947cae40fc240f8a0da9f41367a94cf915916e5f5f1d9c833fbecd914a2db6d77efb6d1b593fb1dc3e3a3ffb8982f2a9f6dbf6dd5793c2cf508ebeee4920db20fd299e0071e5d2df9e5a8e7a7e7af9d46b1bde9e03b7a7f4f94a0048b881b281eab37495c94ff599aa9278cf8572b80680b0bccd03eb8738d0e4a7fa4790b9f543d2ad54c6553a180657715fff54bf86ab74d4fafef1bd716b5d2248adefb14c054bc0b106d2ee558408e1a1871d761842640b4284f0d083e7dcee6bd77536a2188757299d8572cf71ef1cd83e7eea7c09d7f8771cd854be461cec8fa4b4387c64ad7df94d30a4579bf6fb6d0ff153d7397eea50e0a7ce063f7522f05337023f75de9776b061ea763524e5d754fcd47d6d1e62ab6b539bdad4a6dfc8f23ad83f3cd37d8988e5de3f4cfd705ffdf8a9a059be505e1f1bbe56e27d2153b9dd8b84b40ff26b9ede29c376df3f9d35759f72950eb671a34677476ec79dceed42d938aeea1e07d7f4edbe87742f025f4956f7c4ed9ef9437e72bb4ecaed18e876566ed7c1baefbeebdec61018526a6d94e9c012784ea8093bec406408cb84fd73e9572e41921f1c63f5401b7d388cbee579dcf882d885c1e8b9e5f3018435e23102471fbf18b4aeec1fc94ffbd1870390568f2b0727c80c6e68b168a075c04f14047ea28fe30135fc44bdc3c2765f1262e983db13bbf5b5bf7d220bb27c879e59c0dee1d82e0ac23538ae62a14fbf760ff6dbefd47ede0d6c1e9ea15fe2c17acff2dbd30729cb27fdc4fd0c12ca1b769090d2dfb9f4bd8ff3538d4b5f2484873efdf875eb7b819fe87753b0f49b27526b4da60f4f3a28a58f0257696fe5873e95820739977e0d5f49167dfa1ba0dfa5a84b9fc31b973ab9942ae1a232142c417b55a8ddecdd60b70d9565bc4ac04ff10138d689fc287382a1868d1b727e48bddbd24f2ee3a728bff0bf08f6a31313c7229218638cfd31b63b13623b1362db30638c31f6c7d8ce846e2831c61863fb125231c618637b1636628c31ca538c31c6d8be04528c31c6d89e852976b7c71863ec8fb1ddfd65949273842f82e448f9f99132933950089949d178da154342e391f2d33df8a7c322892cb2a031f59204163c48dd18e13831e286742dba1ee6a2890e5d8f1234cdb65aad2891c797580244e4916243b421fab08c034ae2039649b161a3ad56cb86ed34030a1496f43869e1619104163ce8e1d170950d927b645b9142dc8087b6121d0993a79d78c20893470a290621a07c41b261f6fc56ab15c564002c92c8c264837babd56ad9e03e32be942d79680fe5f0774100436c3f5fe7507f0b6ab377ede750f41c6a58af33839269e8219e63a363a3f382db14880c392190dbef5d51394789264aacdc1a71eef6821bdf9dd638a3cba679f98575ca8dfe517e7b3109ee78459d6d6cd3c4e796db9743dc72717837099ee459e618764ca3fc12c81e24097a96a485140cb5e75178823bc31e8daefdc83c271813c31c2319534a8d35e679431f57cacbacb2a17da1e94a8dc7f60bb803b848c6a8eca6cb949999556b832cbb1aa80e86de4bae7c5d09c220f3a203478172f973e038e227b6c16f8ef81e1341706adbfb17c328087b5cf72f24dd29b53ee2276e25971f87bf3481bf54031b7a90cb5f0ac2baa772fe065be7c509366c2697bfa4635352ecdcd07d54dc040925d7dfa73c0f82d0b8dc64c7094958b9dc24092a37e4c4b8fe58b84aa8dc99cb4d942cb951eca013c50c8644b1434ea80de182ae7b8cdd1524f9c969f8c961a81b74fd2513d9533722d89ef432894e96f0dc9deb2f8fdc38bb4206cfbc5461430fbafe2f31ebe3a72b7ef2d8ba54d830e20419e2248a9219cfd7f47c619e6f6909952353a0002d996285f47c5d9e6fcbf31dc1ee0dd0eb8a7caef7508c28a172848913a02897d3b9f2e76e7ca7ecde54895d2818e8faff36045b04fb240a572e95b92aa43f40aeaa4182ae3ffda1e22a6ec28322a1fb384edbf08d2b66a9f8c615b376e28a795eb1c75547a8cfa613c455fc81e1e67a30a44302008634f60218d2280000c34d090d30dc5e3160b85db9ee0218d2d6f5bf09a3e5aad6c2e53be3bb09a31524481838aeea2b97afe9bb0903278c21610ce9715567e1f285f96e807a9c3889b9aab170f996be1ba05894283bae6a322edf97ef06684789121e57f5ecf2257d37403c4b96fcb8aaaf70f9ba7c37403f54a8b85cd556b87c5bbe1b20d791233eaeea2a5cbea3ef06c867ca1498abdacae5ed73db66c4c5c88a9117158aebdfa3980e2c374d8c1d3744d3508ee3a4651142c422254b28be2cbde480f4f2f2422366bb8175212626e6530591037ada57634fd42aa0a857b4913a9bfdf77df1f572f5ecc06e870c238037e5004631d9680c5e55326e20e3ba8783039bf2d34c6600031800bb76e8aa66a1ce441ad72cb8caf4d2cbd191f3b31c4f089ef1ff18afc8f586f821c76b793bde0e3c9c1c4fc7d321c2eae019d72dc922ca3f889666d79f07a6654a45548fd727ea935a4595d2b2fbc5c4553a52366cc446b1ea2402b527ee983d1160d508881caf4e7846b21ff134e81ac57c4663b880001a4da1513e02834f0e8e7c22cabfa535c2c2e8e7fa28681474fdbb08dbb3a372c7d8dddd1de5ecae2e57bd47a63298e2db08e04d2e0061c351ce4da572a610b76711476aa61cb9464824f84dc32324bdd27e04c42807890bc6c3e11932ba75dbc613c234fe1e0fd73f04afcf4655f04c8e51ac884df9a9a7f6ecb8e12a580a7371fd7946d92d7b4a393b24bf3fbf72a6463cae9dd79ddcbd11432a88510ea3fc53b58767fc59aad8fe06b51f6c5892cd78463c75c6357d2b19de0dec0961ef87eb8f804a4343a3b522ca5faef257b28489138e415b400d4ffb6e78c076b82c378d02628821067f1b35f1eb2b8327bffa04cf3814d58aeb30245cffda936347b1c8a3180b59cd18a70d2fca1825682314b70df4f183b5c59af3692d0d876746b1ee1946468c5c6c04ebd8514ed3f8a378da26fef68a2b4a5d738806d8c08e5c3939d7488eab64c41199c7cba1965167917978ea959e1d2418411843c0277f1e3ccb610ad467043b4800029edae3537b76c415938057a32a183592c2638c7e78368a0561472e3f8d62a3d8281663d5715538725d97abe237c08b1f5775ae60c3da000f8727bf1b9e81002fc1c3612bbcd6f577d9e1830d473c239ed192d1cb67d8de65c44f3a7ef251ac242bb13cadc5504657ec9872141b393102424b56e4ee76051b967eaebf8f78fc0a56c5308ab92a35ca192d699a0b386b8319e5c4d5c8b5cdaffef0c455eda2635055291556839ca851e0a9b1b0f6986efd81a95c549f9c916bcbb91e513dd747aebfb5c7876bb8e00ac6f520d1ad810deb6c16575527a2fc5d74a7cebc9ceb56d8b0ce6e9d5d7fadd57add9061a318c38ec894045d9f4b662e3039434821064b0ed7d4b8fe5dff778f9b942f250f1ce87368074b5057efe66eeea69f4376d3d14d951dea27ed23e8bf514a29c769dfd4f1939118796090d1342d4a39040bfbdc6f1beef2f3932a3c97e3ca6b83610a0699b087e9c6971c37293729372937f91c6afa197016057dfc60d10fa434c62b9565c28dadd05260947f91368294e327ae51b5cb4fac94c7f0e923aa48ff133cd3c3332f9e69281a35031278e2e6852fdc7e1758d5d1ab293fcd50a381aeff8957aa46b58ba644376c97e8d6bad58fb2f525a9d7e4aac6f11856350fcf03ab98fdbd85c00a6907ca5644499ceb1f723eb07f452ff031c4ec05468e748b65043dfce4420471556a042ebb810ef8c9b5184d9e8ddd1b681d9f0dd4919b3cbb83dec06e2dff1d517257d338afc1e019ff2834167a0a3b3127a788ebc864c58fafa6996e7f7cbb87c57b714d4f3fc1ab06638c27d767311a34201bf69449650be910dd065b16c56e3f5f0594e3388eca64da565d5ad646c470fd3dc5279721236cd82eae91d7ff729325466ee442393a7edc959234e3091b6e3e5c7f15782847d4b456810ebe49bacf80b33ad0c70f56d7ae7675f7d7174f269381a98645942cae7a47d623bb80b33a6f4233f553ff0603a9e73ac908d7bf46e6c8e0ccf113d7b95cc52e3f5c6380eb751a29727f167195fce98a820d69385b67ea18f153ebe8e8e8c448ea894f6a955ffb5c7e8fe2532e7ff4f128547e6241726a1b9594466faa6d94a35c575d9ef4bce8ed7157bd90488a44d15bc41e87442c29ef131d1129b9fc2c3b472ebfb54b2eff88a745b6b444ef169f59b932b3e241bc1504730205e6244aaca775ba481b699d2ed2473ac7a9005dfe28a3622508046de3f27b8dcbe18dcb35d849aab67b8c524e4d6a5af4d6da6394724e6d93db16bd3739356ddb28e53ad975d1bbdb28c7755dad5e488642d13bd455cf0b854422162bad8dde36e4350b8bd776d42d2ed2c5257abbf017527ee152c96318933499a2b7a9b6782e211d7d4994e4f5f712d2f1e27529a4a3af6518090313bd61a828e6860379d35ea828e686defe155c8ff9891f01a51dae999f852b5ca183115be42481add841174f6a20e5154487f6c82359bc174c53db688c5c28879453086eca94296de369d1f3b6539cafc9c45594e368dd91b19b519b51da2682a4a6d140e61959c4c66d9bb384f34206f7329bd23625214c83056dfebfccaeffcbcf0b15576d75a71a7155e8e1b86a88ab726a111d57693b946ea6d36bcab853b528a526a3f6a178467a4678a9185e68d404494de32fb2177af52285087a5292da664e691a595cbdcc224a0abd7a29237ee8979b536ca65cffef84e299ca22858da161bbfddc0df9a5452c8b14b6def0744f5c23baa7ba83f9d3e5704dbf7fc705ab66143ffd68c1277f1beb7ef8ba1f2d3a2a338aab3a2eb8fb61fecc1f9e619112bb4b5c15f40deb8eb3f8f08cff8b61e90fcf78835d0ecfe0dc28e794b1b21c40e6c4276fe155dd61947fe56e8c9e8dd998abb607e2c412222fd8112f296671f5801f7e3004224a624888b0fce74f5c0121421435705521a70b22bc60f94f595c6d404a1640689161058a292cff0ecd2a6c387fa2945adc445ef7ccea2f346931d4d74fdb68601502374884eb1fce2eae579eeb1f9e5675c7597587dac05e99b94ad3f1d7583c8e2baf667eff8867e81810bedcc049b1ba0f616ebf69860b6cc3aaedbb9f56ef63d64cd29d7c069c677595b6c05ead2aa19fb3e697c47b1ccaf2626af0d13d10168f9ff8765fe5794594d79e88f2f7be0a8b28e7ae4cd221b1f2a5f4d81e453137b1c17003b7bd8f593244c3016e83d5c381edbe7ed4e49cb3c8c711d5cd1d7b6414b509ce28b297d94b199d8ffd39630c21bdfd6137e14ec215d7df9bd99063a22b580643d3bd1cd25183fcf4d5eb3bae8a5c137178c657d1c918bc8a42d8492a85427ddf8c19a3b083224ed8a11c118c3d63d856bf28b5d6cea025e9c79754867aac16b558e4423abc6df3b6aedbb66ddb364e8b3ce28a999959d655162d6e1b0b685f74f2a71ff62b0a61ae61fa8315c2148bc07125b6621057cdee6eab456edbba6debb66ddbb66de3b408e5f6cf58b75aada9437fb4285d3c9ec9f11f3e28a2fc434f58d1db0f234ed00b053e5fb737ed15a5cb5abb5b3bd96fea3811b9e0c98fb7f895655793c762c54a17bc76714daf629138c4516e1385300f3ce31fb611ad135745f08a7bfb2cefcf8cc404597c7846f4b1cdc123f4385c4a0305c00b7dfea202ab1cc0271c7e2231695162e38a4744f9db68fd8a3b8055be053ef99f76d0a82d18f12bae6a211805cf813cb124ae6f4944df32f4d65be76b96b56f411f2c1f027d68414e1061fd8861b07ab03d10566d2f94c486c07e4554f744943fcbd7b088e2a208ea97c73cc635cde9c0c6b733b061c471b2454f2cd2367d87f829469c508feda0ebdbcf2ac054ee84e938aee34c923385b85008f4f183157a1c1e71220ec745948e36796637e6b82a6c5112798c5cff382416017946b9fd2d3cd5676882c25ebef425d047e95f40ea934a85f487c658dad6da310aa9d55afa625a1ee681b05ebe98ee4d0f8455fb8eaeb3b0c41d16164a69cb5743e961401f305ffaeeabe1e54d15e6ebd9e7ad981a663ccccf007b16c33dcccff8199ce94d305ce869ccd46232b59860dec56b31996044dc738fc343192ecf94b6a730114f1879d0953e6651a730988bc3fc98724c3ec4621ef35844b9c7e28a52d3bfc74a25d0c756e50a4cb07ef8112a4160f5603e1056e83fd753a953e8b2eba1fb445026e3e9e6c0b06edb0c69df272e9443fb394320ae5b822f04e2ba520630efa304d20008cbf42f6f2afdc72b6782434fa9d7211dedc4c27c3e64c0041c3c61c13c95f1bcfc8c9707c29af138bcf4c5d4508aa9a6cf5b9fe34494e95d00bde5c2c77c3135d0f898a7013a4e0c18c3bd0ba0eff070337e06e83a26d05d95932234f3180da2326a85f3585c519808e6310aa3300af3d88c19262e0a1b5299c7b62536f41f5771ef3e2eef33bee5492037e3731695c5d526a32c2d2ea34de6799bccdb64de269bd132c3f42ede8754d6326386a93ab1615bee27cf6c8f238e603e1688714487d51f5feb127da1f50f7da1f7943e03ce2afde9fa4be9635687e6cb8fb7520c8f9752a9f4d2a512e8e307ab244ba59752a9f4229399281017272da156961b95466529453137f2863fae7f479609a443c2faa4331b7a9767d3f0bb5b662f897748ec9c5ec8c7fab349763d3ccddf2961597ab48875b0d24d9bb5939ab66d94f27327ee3a967a25cfb4a679a11c24306c7d4b2ad9c056a6cc79933cca7677f79f9e8266966e09d6c1d0ebaa1712f5260a815cca42fd529ed9384ee3a68c9cb7177313ba29e82df8ec1729c004c18841a9b526d3ff094679e67499e2aa7ee7895da73be4fc80e5c3e57fb8911c8860f5607e685b44dd211fd86802feb925881770d6cb97482552a9f430a5d2c33ce98ba9c1f4a43791604a51480a8b2b4aad3599fe4f27d8b67d6509c3863fffdd6b246c94d4e3400a83718dbdfe30395cd300af0617d2bb3c1056cb175343cbbfb43c1056257d3dfbbe981a4a4ffa12d8b318faa42ffdcb175303ccbf3c0ce82f600cfd12e8ae884251d002ce7af917d07340d7a1b0908fab68cb7b1a73950a6ca0d7be3f85c5d5cbfbd3285c28c7080cfbf2cbe7acb8135794d2b84377e2ce277a8e69e2d39d68daa974e7ba952cd2dbaf05f476bf435f5e4861eb843dbb2e43eb700dfd5086907f38978f592ddb8bbe900a74f0eddee533e02c970f7d2a80792ddbbb7ccce2508fedce7756d7c5f068e9de5d5c1e8733485d3ed9830b30abc559d1e5fb2671017dfc60b5801c5111a4300a8b316803621d4608177e4295497dc9e85527eaab59f5f35e7e49ea8b6b5805dca945b9d5577562034ddd7554344a9a5ceb645d73989dac6d524de35f5f39f4aa3a91aafdf9944d30e6cc899e416d33c998330b13c649e1847d710d6f3ea7cfb9756bda0eb60ed651d151d13587cb1d2cae6a8b3bd9b6755d954ed651d1c118e55f5f2dd7bf3271a1c5350db8feb508bc9ab0198be24e2da0f080c595057eb4b81ebb9e8a28d1e5a4e08c60b50f535ba434525a5fdd9b11172d8232097dccd23eee5297959ae6c216260f7dcc7259199bd57da1cf21c5ea5e5485e005f86b5f7515c1331e43587370fdbb4ac4ad3bb1eea04f04b848ba50e87396f7c5d4e063861eacf0c3f21e08ab7a5f27eb8222ea8b09819d2ca6eb175383e8eb8bc02e088ce90f811c513a3c621aecc0da022b0e1785adad17e7c4ca0f3bd9f5e75e36acaffa5200cded02dc0ec06d81bddb872db73fc536f3fb6178d5c15c58c5d96cdfc328be0fd802c60ab8b0b89ab00976b009eb606107a3cf5d575fb006eb2bae2a6d6d3634a10cd7bfb67c5a2d9ceb36fcc46a018de1511f08eb07ab555f362e8da921b2baef9ba4f64c27aed2eaabbeb62d6af2555ff595dac02bae2c4dd9fa4a4969617ef2a744d8097355585f507cc2aeff4b6b9a7e172610ea06e0a9ac84485974639552caf0c4751b2c36c4b0e1d409636453f4a96935c6b86d26534c099565a604659a460601326d73e354ba2113ab112a378fcb33fea51b6d6301a6f167f11538826c3879ce398b736a5a94dd72ced99cf5b6c9f8b3b689e027002c5cb79b9539b03cd32782e1d459c2a4f670552acb84303d950a2752748f68146514abb35114868575b6456dcad770d05a383471fd473cb527c2f4c4559dd5fa0f13b9e40491ca1905d1ab1112983795625c2e20725c2e575c8d785c40f0fc00ea95999c9c050576449640bdd2a358448dc618054d61040667310ae21abf5444a200188d214380d4a6d61af1f4049967b4569dd532a202bcb6a93d4db323a26a19bda240587bfc8702019f7ca8448d7645450c95a20119000800023315002020100c08c4c2c17840cf74d11e14000c7f9e48644a1a0ac44110c3280862208388618610020831001063a86aaa02008150ff5b95449b00ac481faa7e1bee92008019fbef9018c2131232164ad5a9f9553a87efd2c47babc8c4552939db321d0de8cbd270bc7753e41388273f491861de496c61f2960b6846a4e87f16ee55134ef9097f5a58fe32bf34a0587090754bee0f93cd698a72c4bc325b0ed4c416cdb9120caf7d9335408692493fccf966e440e1c12fea70df3c8fb53d1212ceb124acc4fad3b705d62f80e629282b0fbf512aa9ef3b84b37e0fbcbdc4cc9cfc060e8cc7646c6695b66570406b18f38eee4536cfbe8b33f241cc5167fb8356132920d499ebbfaecbea1d0897047d891a408b3e0069d9178340fe88738a584f6427270a5d461a2430cb6ceb033ab0f34ecd64fee0332e335269450996b2fdd5fdbde4d23fd7a319acb29bc72be98028db280c5b0e3b90e3c76c9f2c4473e846ffdab85f856589f6ecbf3d1fae373a63b3ce19a2ed1d5f931cd883df2abfe65b8c132b95e1c724c4ad5258a8cf16365ba800768c9402a400f0e43495cb4d4e76e5cd438d0d6233efe79d155ea0b24934364e3225cac647eadbcd8442205513cda8142d5e4e872249447ffd57623ba41d013e7aa69d5580d7e5c9e0f3c799e08ac657b3d98e9ee8eab5c910f63ab2ee2f0aa14ec513d531fe958d8e80c84cc0f16aa8782db6f2abc0dac1c43ff420f33b1d3a1e64ff0d222d3863da38de2c81ff13f874c16ab3e42d1e5a03d244deeb12733c67a82ea435ac56c41d36a4805702f4e110a80396e0d6f4402bf802f9e2f9888a260f24f9495100c50f4f2e2bcb9c0a75cb6b433086c70e7f5453cbaeca8443091ea01b71209ab0c95c9f53b87bed36ca323f3dbbe00dda7a1ae051949b5b6d9fde59d89342ba661327df09634cf6c3481985f05b0a32831ee712d1ec118794486947325feeec802824758b206138bca4c4347f2fd1303dbddb09fb492b3c2eb00e3a1a6562a4d814b419a6337ffd87a4fef20226e613cf6fa4caade1b40660f0a13fc8fa38978a03ab18fef0b01102e7edb5867b12f04a204afb79faadcc5f4da0735d7e1638dfc5234755a2df5a97f7007e22b5c2156af3eea102da83a54c5a07a5e394a9a0c1bc39ee08ea61daf6b645f9b770a772ddf3500452100396c7a1a834efd0c1df2c73297a8f410144c4b3bc086fd1403658dd73dd1892f900a53ab4ad34dce86d317ac4bf5f51f9992b1f8d7010d9a747a5fbe02ecad45d1a09fa92b217179137b8fa50738248421dad0b32f329d16241db7661aee526a1013868591cd8291911c55fda9464d803c8a3fb714bd5f049928cb230ac045a8ecc27a59971d7a01488f1f2816598376e93924fa0c372679e5ba5c7d73c605accdb6785f2259e6bfef4736242ea85f14d32db504cddc35ce49ee4e3f722e9607c9ed7af6fe94cfa909baac147f0d957d14e7d02198e52c17edc8f09ebb8508f070388686f0297252e948ee4f9184dfb0bc7192582dd8f19000ec2659f90b77c8859b60c962f0c5683b7e68dba4e6a316067d726d0558bec4afd85cf465ce4d3f0e66575c49ce4ab6065013e562e1e1853db4dd370bdd54d90622ae65e0903e074de6e98b202e9ce1aa821e23d10dbb8c7e53fbd8d3d175d88f813226f71879412d2a822107004330c67277636d1078316a5f21fa4567cbce9f1114c8f8a84ef6e5b23ba2210cc2470b9f80ef511c12f72e65765173071534d6e405a42d705db1c21b222c133541d11c21b4ba1f5764a8c6bb34f19b2488c0dc1b4a8a567546238c3bbff0a3455810e8ad6afb7d2307927d41485c799a248ea60b7cd85bf1d94708ecfb6e725c9f39965a0546138c012581a6179f4a96a6bd0ea40726ac40c9c327ee33addf8a57f341771854b11ac8600dc1c0b27d495c0ea1b4a43fe92bf50455c1a875d95ed8469d7b96bae1e283272e8a9efe05ad944985bff6ef6e7fbe0fac450d34204b6763bea939658051e19cb3546fe8b3aa9dc2cb70fffbbcf555190fb30327c0da8766f6501d4c154a69e9b2320132b98aaa661c90fb0cbda9976b3ace59f972ba000cea02c91e91f70e913940d4120aef7b72ce73ce5090136695cc9bba0a3a5bf3278a789dcea7ddebaf4e7b0486766318d62480f4ce670818a41329466e2e5b75e80ca6c046e854340b86b7907befc57c0b5fdc6439388f3c8faa4dff627ca26a70722cf3bdb722c20387de1563ed03510cb356c447b32df1c013f10a64ddc96d55b9634a82206fba14662f807e4ffc60928b516916dd19372a32ac9ce4af5b0a44831257789afa839227262742357ca3037d8420fbcfdfa0f764bd41a145438aab7c44c88fcd30a5d4d6e9f3b10fda07d0edf39e1b80d7b2ba8fe8e36626b9c9500d78c0253cd41086372e25eeb64fadda00671d7b099f2fce92384a8709a3df1b878efee5c49c13df319a27626ae0117a000279b85b61cf282d92cf03bceca81551bd1aa667d14da9ad88e7642f212d0f948b4458c96d7d1907b224e4469616f5fe70a0a276511ae2a1a5253c31cb3bd6cf8ac826124482eb784a6c3c8a5cdddfb0200951add0b35b969e54c9ce2ac6403c97da4507e606f5b042694086847c89823b43a42440ac935671de1de910e2dfabed047505a3bc90cf8f63965ed2325bbe5174ac9274473d316f57308f790de2ee82fa01a23f5516988b20a5c934c7a3f21f1d9069fbe1e92b105ce440fdb828680b343440a2c700bfc54d3713646fae89b70fae2f8ab6cf01eb80333cda05f197a4e8a6e241d211bf416c221e562f06a536b8cf61b0d7f831055099b60653672c673419a54d04b8fad5dbc3a359d7408dfb8986a94c21fa49b7bac75245621fd54465f58c230ee9b8b4df5795b916a71a1721948a8fe6ec480fbe4c4328c2f09f46d9d6192b4bdebdeaf2f0dc3f89463289bf3a6b019d4b4ab64a4b44a13659223e22839deea01403861140952640d89a44e88509ce1d8cbd69dc97049a869436f9c5c6584c06535072643cb62e8b12e0f4a296caa146cfb41f7f0ba82990669d8381227a3059a8c748248901c7953ec31ae70f38808883391d5c3b9bf5a509243bd1ac945baceba580e9d1e082dcb181d9595ce07ea04eb323c0ee6c9bcf8be5fc89e6760a9fe8cd53f1f9e01d38826076e7f4bf20ec7c0843d179cc5c4e43caef9a9df91e3a9281f6ebb3c76619d870c7701b0feb148d5ea6c56ea2e05a10d9ac3f885070bb7beb4e49e6b37449f34fc31d0d61dca461c5cb61fab542d284f83d0a0648042a2c255ab91778c5387ea708257c3536ac3317c82f7d944373186c24d72460a5478470c3ee018eb616dec95ae9a643270a852a4d27bbaa6356f4e7b091165baf87c71c464b0bb395ac417db0e39bacbffdcf865a86dd5fe09c0d05f97560fbf62eb0574a0ff9273f108d361a9a787da6f88155cacdb4eadf4700d516a49a6924154037d9c888a5bc3753df9db428e556f0de5ee84c8f7c45f0d48209dd7ca60470d2b5a0a045713b653fed00a6ad171bf35bbb660670ae34e9af7895878c49af7d7828c6fd13fdf778feba428677a57548210d8726ee92a7af6f728640c0608691d186104b67b5c996de8b26f84fd360019d521eb7ad6add2865bcdfd080a3d40de21156f72d8fb35c821f135f3b1dd1b4074d098aa82215e2cb5113f3d6cbe74b9020352f902a14ebfff0472ff5ca16f5cc95a139ce0830f9a51db78680b0d3d6140c9c560c043a50680de57dbcec3b78c170454ef236cec5470d9efa4fce8e648965abd03a19f0dda87834b80599991099281665ad9efdf0f3e321e8f254a42f8c53d333b31ffd51532e076e11eab2002e56d312d790e12194bfb9460f0043b908684a30f0518e0d3549c11a803ee5a4755ab529ce6877842c10bd2e2fcf5b5980683c684528f99c9592b3c08f19f57aff23d34209d08746d8702e959cb8023a7850ffd71dbca80ca7b67e216f1893cafe1906a00fad1cf514270642c58a20ba2212123474bf0431783e1cd10d266d9cd2f1b3b39d34f3420fd409a068030e2b419031d25ccc885afa163798810b790e5b5810c65a4fc8f221fe4a198e94bd4c4ac6bb362e545e3a521a3e6a8155c34039b0ff4b4a36a2e6c4175bc5873aeed6a77289d555e3a9fe26647d3d86bf81bfce6b54d4d0ce0c8690639bb40b2270aff6af0c107a6fc11275dea1fa3916372be63d273d64c753004e57baec774ab9c906b84f640e2cb1e622edaafde2924391bd1be7e3b9611449e26b77975b9d8631dd79bb26e68fec4d048495cb01e390fe45f2c6754472b32b6ad17abb3e1a3feaeb8246e394d9e3df3a142850410a384c5d2c4ba8047e49086f85f6f132f06e50f491ff89c98f8207d6257407375c361c95653f103f5bea540581fccf0bd42ed220e4325373efe8e9ec97b33c4b9e8e904ac383c872da55638d8ac286eff1f562896fbe0236e856e800081092c1084111d454cd011ce548ac4fd9d748dde178cdaa4fd15d5b2143015ed37c73485d8eac15712e2387cb35d227a9881c1bdd8f87e1ac64c34861f768935f422bb90fcf8f545579602a1b10b4799f0b88afb40c35e4712d9ca1a905a1fdb3b52b51471640290146380b3e9a48ddbe523f143b167d59028a86be60703dbbb2cd3ed6ffe53264a16fc674ce0b9609cfa56d149467062bfb69689bd85027965ec7a9abfeb6fa9bf9d74c628b6bf46d9be040b5c6cfd9134958df69463038d843583689950b08698b8f6ae2662efefddc97f03f838401df2e0b43e47b6712f676240275e10c7f0c8668ce57b4a9c70b90e73f55db0a80084f03ce5c8ae3ae6e75954bb064cb6b19bf5b83924cacf6e96b3b7e3fdcbccf31a4f14fb1f68d7fdd5f2d9d22286b343d2a5c8d93193dcb8b5a5e0b1a12100eba9e51fa71daacc0a9617ef83afa3f17d31137f15108a5b89af4fa210093cbc8e89babd574f7227dbb8b76c681dd18e90146f7cfac21d509502398e3523ed675237866e6278db17bbdaabe6f3deefc26440fa2a04306d89cd2c3d77db084953c774c0ad89ac3d0373876d4a95f0d8fd27fe83669e1a28369034b97548e4582f20498d103d55a75dd8fa01942511b54b8be58f5ccd9bf72ef5ffe6e214bb42e3f8928f53b002a46f44db230223a5feefe8fcd88df08cf12334644b08be99e2b0bf63caec6a483f6759a178ad2045e7f6138c9fcf47d0500cb82b071b0867fec3e62e47f3d76df1b0773522728b025c22560e0b2b30e30da165a89242e24401ed20ce331d36d32eec6d6b1b338cc2caad12c9065e819267cba5b89febb9c9da1891711917e8be1974db84f189cb68f016f96beee7d94289e35f02535987f7dc236b1d65e6feba2f7b47143d434b2c32ebd919ee41ab9ff28988fadc40047902cc08fdfdd82e5cf76b5ea6f76c661481071151a13ac9d9d9a4f36bbb28d1a1fa2b98c60b520f29ede1399121a6498be0a651f5bc4ad78bbac9d88bb49bb6f2f00b2a8d31071e3bc029c04ddbf1db8d2526e18b36cd2d291192bddb42346d0ffdc2295323ee025bda4795edb3439ffa090f58482db8fb3855a0c2b14e80b51cebe1c7ed405a52e65ed6d02eefa4cc4436c9d8a67e606c04759798a88da64eb803534348af58880b176d434ea5d05ca4f4ddec50ad494bc792e14b67c8d2a26ab533ca825e74d64e6f452bf075058e41a0193dafe002ffe54c85a2af355600f6eb68813913e47aaa4f67fdec63a1cdb98a3f498004f978114809347938e9200d0717ba88de63b45f821bc5126fb2864c04ba9ccf668478063454da59bc9300a2f14cd11acb0c1970aa8f912078466cdd11e5ef48515c0d05bf2df4ef8c8541a434776a009e62e10bf0240f6912e1efd8dacf0c527fecb98dd58a89ac3d1e3443e3b053441e979b43dfc20a67a4dcf6c83fab322bf5a6c75b43c9cda84073ac9d6013173c198286430d2206474bcd63a40a93f58955f452b1e7a3a04b4d8b0ff49170d73d2166b6ec4707831a6dc2f5959737406cddd3cc0645f7bcb697fa6dca4b86c2af6ed60f70746de36ff3db9d7976d6342c3cdc629ab0a070184559c90d5d28d953db427ccac2cd49a0fb11227d9d2223dd527b7ac6a58425472f66db8ec6910eb629a5065d8cce4be3a19c37f362a8bcd8f20b2759c858245372aea7767235d74a4eae643ca9922544ae8393933f9b977995cd08d145421f98c305f1b99c225b27569d10429a8385356ae22a82893384d6eda80320f04fc9be3b8c150393ba23265807e6667ef45fbb249e98d19a410c8f33871e5b212a87f361fcd52ca8b327bae4b38791d90c1df1e3946bea629da592c37a43fc97e75dc5dca4e966f476637a4bcc93220e1d95336a75d2b2b820d2e26bd11b98e20cb39415cf306281fdf9b07c1d23c2342b0259bd7cacf4b569289f0f2787eac48654431cab0709eb130cebe220f0b263390b633ed6f0b5dbc75809a4d04945ffd73e1f2e6a87b909944c3a76d5e8eca3fbac82e15e7103d43c190bbe588df35a9b57476d4342b9e4781f53733b82134fc515b812fd7798b3424988257c1ccecd13579883260f7b187a047e4466307a347cb60749e052cd58d393eb988199bc5c064b165d86a15b36354f4647b801e762c54525062d25f100544524c4a234ada3989f3ea632a2d0b5f11c0007f8c537806c2437970593020badb78d96264c7fcd3c3012f33eb8ee1024d8893eebe43a42e06d70d5138b5c484d2c5ec4b0819e33e3c06e6af57259a2c085cc323b70b91c7e90f504978b7213180fa0374b364d31e176c45a709ca51ed1e572f144629b599ff34717d9ab87f9d2e05d143a41056f4435b26826a572c5fa7a88cfb50c612b12610c64ce40a7014435c2932bf68a69c239504eeff104fc48c1a0205f6da5d3fd60e38f6742446c5cdc9ea35a0a9875336d6577396cb6a808338f292c03cd411f66b0bf95c96e8430b77365be209f3a414473c6f078127ecf04afcf0f277ce6d2b9bae2d7b3db8552752cbbb2854fbac1e63cd5828636c2325bc14cc4dd796cd547b46533d33100b0fa01fa4afc7b85c8d0c17ba23eb80f029d7f620d9c7168acd13259dc90b3b76f6b04484d67cc3250ffa132036769c8628a092dd34d3cef15a1d332514b2407f2723d58c62c3d0fe04e16b5b6ee26188e393981038f4733b0e273a519c57655e29f4b6602936f4a1dfb5a5144872d31a31512750a315a8980e05dfdeb5803fa281951822722d40eada580371609b1586ad2f85942dd1a21b18ccfbcde03e05de18b8927924260330718e81ba1064650f252295231f01c546e847071190dc074fe714f4d71289543bd3abd9a6b822dda04134bd684d718a5392a3cc7c5b4130bc5703fa3acbd432f12f7bab0c0ff968047420034bc469683ec33359a92da72cc8a7a84916014583000f447be8b81a1ce7ec48ab118aaeb29f35a7c567ffbe3b5a46a73674424802abb0e3882b426f747045b27363373a7b52492cae1d9d8c5afaa399e5a13f8c8975ccefb0f64e2961aee1ebbe108ab7d95dbb4027daf6ff00cb068558aab38a3933262e2e3de42174cdac09faed024fc32653e5085b59067c791f8e53d3b9c09e313f47d236b74d97108c807c5bce5707467fad5bddfbdc14e22040833257f964120404c8ce13f395bd82ec903704e80febc35530dc0c002c0a42db54d6c07b847005a46216fa6f3f5829d1d1d8b569eaa4683d7068d0634b939a4263f33092dd436b968eb107b69e8624cbba01250812ef84c252a5394a0f9eea44c9361bb2ee2a981fa33a24ce2a4d0ce4de596192eb49adce0344f0b1aaab99b2cfb7afd7142dca23dafdac4de295ad1f8d9d3ec902df346fa45fce139f5ac8dc8ddbbedbd56d50b8138d168bc470ad98c0ce472dab4c39fc97d04cd9bc368961c3475fdebfdc45ff2722ceb8590fc4fbeea21c511f4c217ab9af87b7a011bb0d0e50a5d3f4ed5db06b5dc5e327eb5fab409b5bab486dba88dd0f4a9c6413553a550e44b7c5101d158666743473383fd703e06ad105ae838446e41ecaec1a40ecf5a0ce71a3528afcd66c2f0c4f1e401edd764d44ac1dadaf5b382659efad1a9526479a896b47c289b28c6257c593d1150ba5f48a23f59e67122bb9afb679d5821b8f478f86b37c4ad045d7628b9e0792b84c42b2f74403f3ff52dde2483ffd212c1f041e1b7b67b43e432150b8ef57612b1caa622539066e6024a33bf64825ce6785c6e9e2abbb5a21cbe02f0ee9f431ccf856b278fe6cf15ba41cba13e2af6f72817a7a0a323c28ace48e1294ceb8b7626fc4975509abd2f1138413a3a869ecf0936c669b5144c2a1a46f7f6aeb93faf4884ef958b10305711edf726900846132bda7f990162922e29baecdb2d66a45d983e613dc612ec3c36acad7b32df78796406ed37aceae9d0583bd4e915c024aed33539d8a956effe6f62076ee68e61e60122163f331fdec94b83664475263ebdbe589f5d4d5c8ecb2e4c2c4f2c26f6bd29bb86e68bfd5cf19bcc18058e0e3c11a87f30fa64bb5ef79fc3ae732744dd2d9766a96524bbf9bd6a725e73a377b335a03fce15e2d3ecae2049b3cde4e41bf2e8cac672acb3992c08d2f718ee2b7406bee53694be64e5fd849ea6244e2c304beab133b175dcec3e9e642c5c1e237d56a52b55e53d02e3793b7dc392f9f511a2a12de991ef87d90385b62ae4b324d9128aee52b197586317984eba4253a409728449eee54c26f99bc009161c75b9014d8dc9e14cdab24cd0068b4a2dbb8cf3ba50754112ab29993d78abe6ff9507b507b588006882d333be4316bed0d405315c5b3e82eda6050f3bd4848bf12886f8864c62dfe260e3857e0d95c388bd2d5755861e7e3ad8a3781dc99c0066366e0fa580f8d5bf0e40c59368a9567b2d1abac4760e8acf5cf0ed0e966f0d3f0feddd383c9e3b5684d4db686645aed56660e14d7b7d50a0a5d0f2ca0dfa109f331469cccb3bd537b51f43eb2db6266d0bd666b4bb9ec74944b169ab57441626c2d2530db9675b5e9b1c3971134032851dfb49e55208f7684ce7c7d420c323b8be5f679136700a5dc4a489e2037cf41e8af93e097684822b84751cead21824c6368f0b9c7602b1304297219a5257a36091279f778f198372cea7f4e13ac79ba74fc26f01e5331a4bb8dc821cfc9c994bc12d2f406c0ca683524ae14aa606656e817f19ea9b7660742c6c30e47967a19b6984d1ade8500e049aa36d4ac982e1834432a01fe9dc335f14f2e9a292941b07a4a66f86fc25da0d4ce3a726417fc772a5060aa1aae072421b44666dc8ea8e83c8e87da7caecbd6e115c3220f95ae221b812ab88cdc2cb327b67821806ee1e0d54704a7608fc892de7d4cc00b759c12ffd440b73f2870482ccc303d07ea2653cfe3d43d85ae95054d56cb3d8c441425e15f4ab2111c38282048ed4c9f69649a8efbe9ecae3b983f39bf297ea9f97836160fdde9e83d7194b990d76fbc040fc61659746a316edd8b11323d3bc07a65b4ab79db0279d229b4fd6491c15cd4aa3ae648ebefee6160b079b2232408418b7f92d612a52b0ed5e46034c4692ba07d89c025878405be22a2c95c0361d35aa729ac1627663ba76095ec413e0440cd4bee46bcf8524d9df5a1653d09158c74084a3ca81148bf1d412b382d5ee9c106bf72f203585229fc8d6c2fd11fac982b9457eb1ea274e4588fbc574e117ea426c8652f2961b06fa37e73e83c5d2629520f52709b9bc0fa30d88b5fadad3cea680ea2d88a8d2b98fa14cdc8ec2fa0475237b88affc3e18c20848790002e10d8e242f844f9b8bdf7264ceaa63723b483a7614d9727e913343b45c1c267e7b13e134047ac4f53b288a4a943b1090c4c48efaba87ba38812bff4ea20cc152226c48b592fe8eb2040622e5c7443fdd09dc00919342de752cdbc8540f6b9dd3dc90fc92ec31b09a7e662a3a662a0a14611b4996e12d32a4867cc12cdd06ba3e14dd70590d2962daf1f407a729ff369c099c296e1197dbf061fe1c61830e3fc0273a587fd72f6442ca4086cdde70b08b130c077b4bae3d99ce3c281a6cf32ea03daec11e468df08c22c2185d3284c9f164a568de02431c330f2a5a52db0595143bfd0652d68909425e9f9e21c490c20784ea7716ec2772003d8a8ad8a6e8ba85143df6eebe6e641af7d95f5069c1603806e2a153435420e73ab13fc81452d5af0f9d8208dc5b0b16d1db70a65ef6920824a3b8ce91660f8ebe91cc9e339210297d34c065e3840a85bca1660eb040220136756d6475295fc74689d5575699c5556e50f869c0027305b4330e74be5e7c3218f8e8b350680f20ea2fd0a61dd5c1c09bbb8f0c0ab8a6d0e79ddd966c8507ac50d75c3f4a08c5f9034ba231da691daf790c2360a47f91f452b1919a42fd588e224bae5c95057ca44b76be726cd679eae47769985619fdcaa0c1eed293ce780493ed2fa5ec6d7caad4e960d500d4efeab2c4d959e184610350fd6ffeedb2dae1973f5f02161a597efbb4b190c37ec46368be0ba7bda810fe7a1b003b5a4354c6f9a44fc59fd3c755ed8eeb507b204963147e48c30c6bee207c6e41ad1f59e1757095a80a881710917a3cdd516d9b5ca0829adffa29aa1824e3c8583102acf7dcf19d9c8b329a3153db14d0de9229d985a3e1eb7663da53a8171aea5de1675b3347f69840b71d0084b9a7592441b1801ac89234d4ed8b597f71f86a1143f26d418fde8dbe22f93eaad3b3987c5454eda4ca190b55ecbeed00b32dd0fc102bb1df73fa09fb47d5a7c8fc11a9f5f07c5c1a019f4e33771581e0b2d873d5683d64780e79486947a338bef317655fb9c64469dad3d1fffddd15c4dcecaf0ee0fc1887279cb7dd3b02f68a77f0f18227307d707ce93dff3952fed00c4aadb3229e8c3b88df81b9cd3e17b19526beaf9f6c747e9d713f9108ba2e7db9d70a89c42730c4ecfb7008223a9e6a37d2254515d4549165c7e429ff487e71ccafcd79977cf3b4d78daa7272b5d54aa4c0481a6773df4ec8cb8c6fa1cc03601427b864773fe3c2c0ab93b1f9657372781ffbb5cf8f65a5c211cb2263c29af5cbcd4c7bda3e70b35206352ee6fe1679bd57a4f6446519a99b8ab9b6d125ddb58db847cb7c7c485845017037be88aa5d0b84337493fc7a284eed14dba68735b1d64632c5315715dfda663dc43a6e8bea1896c6fe191193df3199fab4c290b9a698049ada07a61d093c6c56428cb418fd70041685b6144594d36baac36ed0320b515aa0aeb7d4d95b9c5f4269d4ea4b352c28aebc209a81f2c4e7c3c7c438660db4fb391d10eedcb7d7a238db41ee1c956dfc510795a4319aaa22a238a43be08c96c30cee3a49affedeefc4bea20869ccde94bc63eaa316a215d465a9bc20f62300d545c1ea18368cf850f1af01ad3daa3429dd6b932fae9872d2522b5ca850d32a27c0ddc41f8a65416a0829871538c9a7399205a21ebb14820e65c148ee4a454988abbfc1a4ee9ac2121b11d10b0ed7a956acf0f71ca1857c44acdb713f07110d3b14c6daedf8a784b80984a27fcf406887a5d641af638dcbbc2ab4e06ae407774d00b2c54c7fe79723c86ff40e5ae4216c6df6a6e70359591513a59c9ca63e2f44159a0fe5d9c1d3a2e9b2b661cef0e5d8d09bf7d3a5e55c70f10d1744a68d8c29a90a63890cc43b418d79592d9d0d39454728e226de2099170730a80501002d76dcb89ae205b228eef1c959e7357f508d8240efe1143980569266796e1381a6339020c314c35e9fcccf2f05e8e68975898a0878f72402a0a0acea0d3868ad2da6d73a7bc5e0b6f665bd7e2ca6b88557e8fd9b506edcfefd3506189f0ac232006d71d001f9f38a28ab2017202022993aa072ba88327f74059dab44a2e24c5083495d87a002815943204c853d8099e363de0e59fbad704167c11408243ef38d261541312a1001793e1b477cd8bd7c65e5d4a78395780f631fc335af6460e12e6d14c2311f70fca9508dd571c06e316953855d4cdd155af42903e813b06f04d710856a4e8cc01699744fa8ad49d31320c98b187f7c0b0dc9e221da0c3aeecfd35e62c14299d236d1f850cb24f78312350226f9a0ca4bd7a73232aa26f1a19649ee07256a044c529e21799368cc40332b0e594200862e350c4789c9a63c4b20dec0880ba3efa33497e69021fb63dd1092a9afe9b372b9e46b6d95b54cad142c3932dbbf3a7409d57544b24c48b03dac8800a57dcf847aa0bb22c647ed17bf07b11e2753a9e1ce3aea8fb9ef1fb2083b7fbba78992d6a8944bb601051d5990186534e8dd8ea601a24dfaf7cbb8126e9dacd15604c55060060f488c87c6e461ecd5d9d4659472a4ba0edeacb2b5f7078506acaebd3fad2a376e5cb64c2eadae87d30597804b9343db594b6c284869eab33a68c890da661b1581eca42abd475a344f51a758bdd9dfab9c887912b1fe5854761912b66d44ecf1e6ed95554b1a9b4a766ebcb90e8ddec812d2c1b5d0d9dbcdde4ac85633669e5fa7aaccfcc947c577b5e35bf297be0466bd656ee0536a53fd79338f77dac1a7c74093a35c80205dc4b301eb6353e74f149a2a5202914bf07f048c24fb6d3faaf54433b81440682cd3b486e4268bc675007c4e72ca1daae2b27771db7e6ee7356ec4f7eb75023888a21447ddf914d4af860a2395f37f095d75b1989d0b20e154bd59a48a257e5ca1c69862eaae26a5108c0137a1759c4fb4434d3de4377bfa42e8b202936f9834c497382c0e013c3eed84f0954da30de7e95443dd71730126e8c3dc602aa3c5430c414d4ec26ec71b17d83cdf07ea95a113b00782e5d74929f643fcb432a94ef36d6e99f71d9739fbbf2cbedeaa3b71cdd4c6c90b249a38b0dceb3b2989f027018b0d63c1b93ecf7b83a5204094a71bcd4553d373c2e70bfd89454ec1646a5b16b5aeb51c489f9e9e8c6d4f3bb0066b6c6197f3e456a6d5833381789273116f2cffb2d054f0a9d195aaebd173c6e7444ab82b8759a558eccc48ac83a6a5b0b8b486a819003a4e1c30e6c8a71d1fcb027e6104a3358fa23080518eded7740fa8b5b22c4122b696e2c26750e1044350fa0519b9ca3906284f110f2bea99640205738030ad1002fe1574ee00daccf3c01d9fa081a548de6b2a75d640bc61973ccaa9cae11e6dc4f90cb1580de74700cef0c00f2ed57e61104eb082e74fe639234b350ab06e088bf8fa4c595ff648c129f1a89bb343d0cf5a0a37a50600aec8a380ec06503f87a737870a8c806b14e5ea5873ff3990c2fd8da534a48b05463adba12d23b93248397b660e42d91c0089e54fa3af79b1f72f92f0bb753f0b31fe16ae213719e853f4358379eadd505cb2246da185288e0c375a596485c2a879067df2e7496ff377ddd902b2ee893b4dabd5401a1e76d310d0fe2e2e5a8950d0b309249a9bd5ef33c671a45177ee630fe8919ccb815d91592fe1176b097bdffbf5633ee26832246fd47740aaa28f2a0437de3e32a46e7eaf0bdd97cee56b968e9e4b93c145f02bd253113a50b9ddcb2d36b650a6fe88cd471443f6c9a7b256fd0887d02f4aa9322448d72cb7e59fdb2ea50ffc760e9721195da74ff79811ec77185cf33b75ea313b067b273a73dba2318ab3e0e232240c78718d9ca0b3d15906b45b49a7d0a0d0c32ac783ba6597a62f5922919e2051bcc6c6d6862cf1ede648380007c0ff3b3658fca119003471c9cc0e5a85d3da1fb06589f79d544e32c7316e962902dcf1e542e6e9b983d8251a151962955b67e40acc680330d28e02b40dd9c3c9dbfcc64378d674b33b384535682e67fdbed2306b735495374614905fa1550262716a2f3ff723cf512ad91c4cbc141f17f27146a1886e98a1c535ec89dfada4a0d31ed4026124440bfcb37bd95f76b3afded3cdf7aa87a8693e762a4b1cebb2ced68d6f0ee83f71d52b9b649015eca3a950230e6c9fb99620189db6986a438073fef8c151d894660507d025364a346d7c8a793ddd730368f2e1ea36d604f6fc1c8e5893a1ab2d8ddd93ee985aa587c8e1b992af45553b1b70794cf981c00a8128aa27d4db64254614647bc09172894319d8c4c6d04aa28a6dfa0c39c7ca4bb30adcaa48eb0fb682c86dc62a8ddb4465a0761e7ce804a436aa92f36b172d3d71e7c77c8ae52b7b78a26f4bdb2d56080680e05ef5c90cb7261f4f83c9e8bddadbcc0dc6f36f83ebf30f66ccb304ddfd5f6645a10d0c0add382c65a927b4e78a1108484219835a0a4768222d9d69c08cd8ceec81e393201c836335fe127a0a26fc4c2a5994222487287fc757f832c34bde5b4524186f746b869043b245739b70cd70a9f70421063a304720e9a90d04c8a2147e06c9455cb21c2cf302c8183291080d6e2ef78ce1289e06aaed13cbd7c9ee94edcffc8e00731af5466bd6ca8f383ca7e47471fd6653f3345bcd84d77f6546584ce22dc396ecb16e9b7e2d3b66ff2a20cd459be8930b048e98894912cbc4d4b75e302e6799263f54db7e9b16876fa90718bbced7976690fd1e2034af125003ea140c1d12b7f7e03c493b688c2b7f03c74cd4e3a63579620046b10417942038ec2a19d2b51823d96f54e808cc46dbcea890ee3a4a52d67b40d238019ea2302c445fa715cb3cdf627db9712a3744796291624c254e31765f985a9fcb983aa3cde51dfc03c9a869f5b089d77ab4d60b78e6370023cf7e086bacee106e4e538f317c6b62b7b75b93b2b8c94502f34967b1f04c30f432dbb7f7402166eff0ca7287139c59816b53ff983e1dd2f7e4f61b0902a84d8a5e9b2ffd6bc5517e0e56750a0d0642d69fe3c59592f9a794bc23168e92f66626e2edfa4025223657467df910a561a49841d24df8628c8d57e6919c0e885ba280165f244be57cb43ffe135c5dedd05e33779056fd154b70372b8023ee2909d62769b674286150549c5c6402cb55714fb1d46fe93f8929bba074f2aafbc996fa63f2a48a8ea8eb94e685eef124f4bf30b45baa91d3d9d30ab45e09d7cfdc2f8d80814b567a7604afd5d3b8d833fd53c3651dd47b23568a321947eb2b266394b2b0af66cb42eae825649ce4f8aa450077543d92814b9afb11a8d2328010487c1ae9397ea3270a458f6498831814049905a520615628478d7b5aef508f2e3319431a466e2a9eec90468f1999d02c4822e97ae9b9dbe53682e62b900b796b1d458deaafba8f6d40cf3532865e01dd6a79c07808e813677d9aa0654cc79fb8f37457310712e083c44c6d0850234df67471d6584be7eb667a81506d143ddd292fcc891a070db4d162b796dee2617b025b0be0a8d4b9b8293d64a90f0dfad2074413b48b952ad470e4e6e5d069b25d4ed6b7e8fa45429707991958833adc3bb39bfb3fce4442e91e754ee691ba2c7f47ced1822f7a8040bc9753a162103939234aaa0033ec116831eacc67c0805fd858d6ef6c4033ba0ceb7c636f79639c9aef9c7476e4d3191a922541419bd24ddbde699aaf4ef2bf804abe57a15efc7a79477e37e72d301def360cdd1b52576ae54f9cde8df2bf0aaaa20a7f063e4650ed72acd0adbc9fa02c5ed482285674fcc8eefc0bd8cab71b84823405fd682d91bb114ce65da92a406dcc9574aba549c1c7422963a4716e26e9933b66cba72e6e6baf2915686228fe4af8bd863d1efcc942a93d49232a431e0a5833d0a3cbd1a4ff756a97e70e6242482fc7d532511b87c93f74551551d750f0a1686c5d89e329194c2013ec6837b2d60fb6a53d10d9aa7162405e1440ba2c27906580c9919e2b207d2fc6f72b90ec73b800b4f5fc1ece14900fdff20262ce3c1d325297523ced343a3a2a6f54aec3ad1d7fb5e0b1a32e45b2aa0d0cbe8ebf80e36c44634427dce8965b67494fc18e1b1f679637f7deda754678a97f6e66fdc3ae956014206c6714dbf50f4f28daf8b8f3d957e5293ac1065a0b4d83d4e88eb67d07a3ade4522c506c2c3ab22d7a05a9dd9f3789d2fd9183474cb07feacfd905bda7ceb53188c40c063bdcf0e664e5164eddad996603fbf0c58f23981b195e09c678460efb035327efe22dff14fea4f130074422edefcb10eaf9824fcedd536410787fca53c5cf2d3296267345a83be8b4e76ecded1b7ab1463ba0138eaa3a1a23c60904fdc7ed784c48854c0d210083281b6169d52380f6e0ac4a5469a85de0a1bf1e3a33badef0b434950d528d70fe180d4575b77bc5ab4714fd047ad1cb3fde7b44e826a2a3a1174cf9e7bdb7087d22e87d7bc4853d919cf3033079e15dc98f56ddb76efce200e5e1776201e222fb1aaf3ed8009b15f442d92a5fcda15a2c175d985313756aa11a6355aebcd7004d55c5ac5ccda3aacfab81ecbfbfc6a6782ca06a92eac73e1ab7f8ae263a23cbce201576351fdacba39a79c9771bddaa8971be0db35846e10a5e4b2b0002754bbb5829e4c92c656cce348d0a8efa3f681e27d4754882f7ae40372011d72ce2dd98b6c9c31695eb2357625a51a16515625f10bfc5cf7542374e1fe448093dfe645fa5fa61e04028b18d84fc897dcd1d6ce2715dce0c109236e845bbe844eb442b1f29b0092a36a8ddd60124b23098683e0b02d77ca6d46c5c454377b0384277255e0fafa8e64447782e1161b3751374d415dfb92ce2c9f4b3c1dc78240a2f2a8ccfe7146da8e348d435f77dd667ec1219ca676dccf4a372c398a415baed8889c6ff43e5110da0230143967f289f55e0e73999d4be1e17a69971484dbee1f8c926145729b5753d8dba09313f55005185313d248629645c7ea231aac69d6c4aaa8b6c0d8a4d2f71ecc5835e1f4a5548e8a9fcbcfbb4e8fc1ad4db9bc8daa5200f59d5fbfd2c1408a91b09dc570aaa2ca1f48eeb54e89f845661c997c00fd1219880f3327f817bc2be660d9b19460c25a308f39196e19a40aed7775ec79ec78bc4724982ae1287398154d7d24b82bf1aaadcab1ed45f0da7b8bf38e1676423fa8e5fecf8b4bcf8d9931b8695b1c87b0986a54e8fb6da70616f080ce515eab601987e4589da122617884e9779eaeb3b5d8fa3bf923e2b5d58893857ebc7048d7529d1cb510ceec24569605243af9649996b18fb23e2e4f0914725be8007930078d5d4ad93e81d21a072ea8d8acb832935997a3896df2d0b60399519f72228278873f39efa20887c3c6ee82bff0cae4c145b072fb877510ae42669b699417f2441a715602b41d3b9ca342f5bdf8b7edcc4cc0da4384f511ef82444b634d5e1fc1289f751896749b8dfe5e2e51b56b52daaa5ca73e6103d3c5569750acdcd7607638815da2219a94161a43576d4697a51f19295f28e8e45f24934bcfeb4fb9c748095667667be15889bc79490043ab99926ee10b878a5b78de7fcf1b1e2f3ed9e86e36c23aad6ddaac70c4a21ccfc484bd343dc644c1468bbc9904d178302e54a33376ac59928801f242faeac78e85c2a25b072edcebe6a12278d30a50a12398ab29c10a56a1504422a525156b2499f0667e5850f8299c842ab83b4fef856d872f59f9f34a8f3136890d7e21dd630e2b94c4ab26ea3fe1134190bc184b1eb9b16a6d199ba6e6e1e22bd446a1269722dca756ef61b1991fa654712720aab002eea0315cec0ffcdc02e12561b1b602a6aec56e02c98ce01aaf991e46959b22251d580e51e747cfa3624617739fb1885dbb61c563a5e101b089296c2cbdc1101724dcc116e14d719d95e6356fc25344cb4b407755c918735dab722e021da1578a5f5efe4a4a3b59f9804ba80e89afd1fac51518414326bb30a8cbed1371adb02059a542b436bc056dd8bae93a7d3f92af715cf494a71ee864683063690791430140474a306eb971d0753f5429974d4c8259a55b000c4db313ff680ae57127ce0a627a340fc222cff12f5db4a8dc162d733a5d89701db4e42fce44412cc32e94504bdc23a1fa5d6c002562f55fd4b7a5de6eb869757ee5504f1fc49b4c9af2b9d7e2b0790fba990fc1ff1d03d46c30f4d0bd0939bb2d43b14cb8726b7d0992cc62249f98da764b7b4214d976cbd032a19dae340a39d3307cccdcf879b7bfdd25a0de310f8f160e75e8127fdf4ba5eeb878e3ae20e6d8b5e7eda40a4d410a9c4a356bd8bc195d18f4b2a929b0f2773730071954b0d8ab834525a66436e8f9cc348487273a760046d974b0d8a95562d8557bc07d7fa5aa2b2bcdd16d381eb960cea5a637bf3f391e5e2028ded36267f2367144ee709a848d5472b861ea713a9fea10af604abe5b741e332b3ed134b1b82b699f7687bec9df096fad45ddaf29634d85a9e6ea92c5fd1c3e84a1674a7384683f6a44385c07ebf149f27bb7037484b9cd92e39d9941b6b35ea6a135b0e5dfda9250eba4522d2ffc8bc9b266cb9f0f413ca5c1d00df0f31cc7ce42ef5b4afa46fe01f1856fa0f0aba2f2282990d4fd22f16580baa9fa0cc80d7248ffc8a28887732a1aae4ade265e126affffd6afef1de71a2730a7c704f47d8a60ba1432a76b8d3a2d416a50623ecc12c6974edd250d3df192e0a702c1afc5802c5ea7574639fb25ebfa71ef30dd2bffe5906350b2acee6e5d0c69dc2356197360c5af0185aa0022ba281a7da836bccd89e6e21c92581050cfe545a9fb885d5e702fe5dbf98ea58fceb68bf1a3ba2ef76a208e0ee68fca06dbe83467c229303088a806c82cb4686d50a882441a8bebfe78c24a1dfb75e8add20ae87df39b9e4591ff09081a4757368cf93baeadda21b9d4c6b0db655b01ef687b5c24e0bc4f6dbe21b8711088495648eb7025bf91a2129d484bd1d4d1fd3338af71801ab2140b06642208ebd01347fcd9ed7af84ab4ea7033db37b9d332b5866cc4e089c0a02e469e0077842449477d1591a19422f0791cba363378b784091369180c4aa4a7795b3840a87b046134d0b16986a7d90cc5498cdf6327c148890dfba05dd8ae1c4f292798f6850de68b21803a11228955d8b8b0ed4b879f50a600d34fe6d9441ff022c92b06b223b514b3e235079931c08b5dab63e0a052aeea0e6fc9c9767f5fdc3a4daeafd4f0e6052186c6a209457815e34eeed994cd2f2115bed0ee123a4b148f01c2f213ea90d1853c25cef7b636234e8db5a5d3da84ab1d74f2bc947b1ddc19afd086109df901c4a0f592059ebd5a14a57b9364c6724585e1c4bc92c708d7c99e4c81281f78620cff0d3540e959e68ed20ce65959377c42e05aadef164f27e18b18329829577d5252c5c106e365e6915113b29c068c202e4a4c6bf12d2d16266e62acc7b1a206de9c96f1b8f4562c9dea4df7f697d512d2d2164feeccece241bb4d3a8cce57781a4129e3368f45c5f5fcc2ec29f0b337a61081f57c80b7a61559d56a5aece04c9cf97da582dc8e7e3c97de235342ce1f78df54b929d57d37a7142400113092abe2d34f4a0493f0cea1a0ef16770edc434a1ae0debe015d9d943a4023186a7c3b9272d32f92a9ff3025437627a9a4147c59eb23f93aed3a45c166671580e190f4ad84a407b9ea9be5f0aca5afc50f27e6f4ca8ca1ab81b078adf402d99205955514d1aa7d215c19cf0c5a2ac9d17ac95a951e3e98cab186ae0f2691a3b792bbc296efe0ac74d375ea72c381f5bfb7865bf6c93856f85729b47568003ed78468b28b139a34a2dcf760cd0eeb7f1f957441f5e8515a4f96ee91f8e3a1e697c66b238588395f5b4e3d4c3ca62bb641245459f1f1e4163513ded00279ef6e7b443c0e1976952665b753948f68b555814f18c82946203657998a4598c801950b8ad30808088f344911ba47f4a38559ef37ba1160d0ff8be65b0da20d8c0639243858a590954cacae64c86377b0860d8672f0603fca6d8ab88c0ee2f8634f6d2599bcd4a6684cc5058e34afee90a3325c1a6201e2bd072c193e0f9db3188ab583e490961e44a7c259eca0d90e8a284b8358b073200ce3cd833eb878a2d662335354cc616b734980908ea04541551720c11d05a71fcb97c3204a197616f249efc211f5119266e88581e13349591c98c89acb266168f40a38ab33cea7da25b7d5bda007abd4644eb3d47ba9487c81e09c4b9fdd50508267d5367435109d2d61b829e7873869f8f4a65368f1310f83c9ce597f860a7fb0dceec7447706b055e3273dabaab4f83a03fcffeb0ffd312d0dd0f94d397327bd62308637d36590ab1c3c91237d3bca7b7c555dfc0d1ed5545f008bbf5afe5b5915320d3747f422b4f66deb705ee1ea456be4d7d23bcf73dddb12f4b1fbeb25f7df579e91b83b5efcf6e7dd93d985a3c9bfacaf1ee5bba65df8d1e7ca5fff5e5f1d2571e66df9eedfa4eece02b852f5f6e2de34b55272fc5364412e27a2c2f18c0dd6cc9abbeea04eaef2e0d570bb0d91cea7ed010281d9ee629b7dda291fbb9bca40052375196dded432c40cf478f4684d9460d69190a69eace836954cab3927628f354e89a84c198e4a09564c0505a89fb3258365805e0eb25aa2e98411d62816591dfae58aa89903625e2a4826b67f89c3738f94c587ad61601308acec1c4a15337db177ac4da05acb4150a373ba1442aeeb9207e672e12e7202cec9159af404fab105d3eb670564a122528afa6b156b327e617da6132b4c525d1d2c6b7940a24cff55875804afb5cf1e50740938cd42bbd682af2a5a5da760ee4c1d1d80c7451f0db9eee05af01ea84569757f2be19e153e0906bb3f2d4e57ad842cfa9e17ff80dc17983d5be7e10497f439d365f2064b860f30564895c37afdedf2e8826229926bec06fc0a0641e053d80c1f89367934f7bdf20d1c11a4a07b9acf063f1b51c251db55df3df1fe8703a884a4598112622ea418a15d1d483be1cd38cef7825ae8c947992df0547cc189520c6c8dcdee61123e5f7ccc1a3c69d0cb11ceca6618482a6337794f19e6aba1e61ce053436cdf7191ed64241d84310b4e742d437600919eecc5cce2fb4cda84f4b8a83e6aac4ee4d2648e330c9c31aa20e076a4b70bde9488ff8c9a2bd8d383e8018c1c87b89669641a9d3325cb805700b6cbcd681671fb98f46542f2c66d00b701259ad0cfa1398c7da1dad925f6139b062ee1c1c2fb2a539a8883ed53d7a7668ab88e75030a80c802448b2829f8a27aa710c62150497100264bdd27708a6fdbc7869543ec94dface0502e08e9f538ccd26502539b6974ca27b89a919d95cd424cc0a0e8721c0e896946c8fa78236ee7ce24b8ae46c25304bd18103d8f4193e5da4699fdf6722170a0ed8bc27ae8300d01e419c0eac12161af63a15ab27025827a57fc6551e95c9146b7ddff3010b65635f673404fa674a6e829075ed3e57d6dede2d260a2c41732828f19f02faab790d0ef67d8cb70b1392a78b3233a314ab328e09a9e835c0cb071e4c65a22dd97cb1335c3f965933fe7cbcc8d4634c585d5941f1281c892e8907c733512d197e329f7960c95b0d61401655e5054367eb66efad7ec6416d5a9ac81892267a1b1507e124ff243e0da7bf7a7f6201908accd811d67d276554a9e376ce9e2cad3ee92b226c3d6323acb1ca2b3a74627cde4b30b0e82acdaee9487857bfb636d937c4c3a0a349176e11a5b3aa4672e905a6bd9e92d6c1a467b0c2e7f73654f68b25db0543d94cebefe52ac411fed9e3c675206e614790f3349bca77c14548fcbf0dfb0f090743fc68a537cd62770f026c632e10292535add075851635a3469baca83ac31512e300953d659d2782c219b87c97c1e80839fe8aea9472f4a0f83c930fd24ee579fa39dc1c2d3a361de70eb44a43e0e0624ac1fb3b1bebd4c557e7ab3d775fe6f960493040b8075bbcc7ec0e2eb239b3e6c48f1e16050ba79aa0089e85ecf67921e7ff17f95088ea3753199d0b94770b55de1fc015a1f9e2fb59c8a237c56a9d6be3f91d30901252a9479f18f14f8922a5e16207a21ea85e52aba67a9761cf7d798c2204d98aa1d77f324ce785dd464a553de88eaf8fe1e468cc7fd052724f541fa5492eeb014ef7f523659e523347d985e5dc6535b5a746545cf3545a90fcfcdf34802cc71e9d6461c78888f02e69446afa50ab2c2453afa76fba7e6e12264ca2926b1044858144b5ea29f7e75f8a625b77af99a0407474602225bf95640009913f359509c98faafa313840e0c5f51b57f61f5808f26e14cfb889cafc332c400a2dba43934ea672dff02b615abc1570bb9dd82d808f3205a4666ee784ca02794a8c506fad571c30703f04c86bba9274b78df0851cd433902c209a6a3e2457e87267a45458a55db5c5f1c2c7146568f4f3d14d590a6917aab09a15fb0d9224aa04f74ceecf82c6349b8cb30e9f2b36e0882b75df3b07307cd88c942ddf8a225de7dbbc0451b6d89e17610494f324fbc4db4b39b9b96652e3a6b951f431b2cc101e85f2072ada81047d8e212697d39f4b3d72d10989c9fe833242e2732f39b4dbdd9408148192d530a68d45bab6ecc43f866bd138c9f41866df64abb70cb52046513d1e7938812fe7482340b261baa2ad35396ecb28da1a9a9df5d60b24be90d2407b2153cf7952c4632a38f2194cae0e4b5a1bc8b98e3c6c13f5d3f0d20f2c4dc250f12fb65109cc97c49ffd3b46f55d9936021fc102c003b1818ae2eb3313a65980ebd4d59105bd4877f1890bfefadb03998c42e179a5de3c64a148693865bf0699f3363fceea2c42637478f27db933526ed38090ca5516777f35bea86f768ced3dd537f1ce4722d901c5c45d3246845a2de59bd4611509dda8ab88142dc5d82450b86e15df0d957d47174a4571f156a14a9dc2c3aa07ea84c73b1b082a5cddb67591f7c6228e2049774479b1b9876129680a4a8c39b20812222cbce7480d0e288aec086671e20897ae76cd2c8893411c28c9db39a66d86615244bf7928ba36c9c73f0ee78f3465cb7c72182d619dd436bcc60d4cfe8113db26b2e50567af1e00de67bc83311e1e6bae0ab1707d15aa84830ce82e7a25f3b198de9c1e52bdf9e4c514f993cf234567cb1e434b0402015b2978c19adcb913e8bc8a08d8123c4d1ace806e26db0b90fe2cc2eb0b4a0349b65e2185b8a08ca783e85a41af4783850006508a12d504d443cb4011ce4448e1283ec14be4ab3cd94f68fcb44524edf102d8fba06520ad9af0f3500bb76500fca49b7051f480857e0008a86bf1bc5c4a1ec4db97354f6b9f7f11851ffd0ccd4efa90fe17d34f2afd487e80f3467a2caa589058ca4c8b36d48d967b32c6e3f26804bb6149d10b5c8f128b0bac01930eb7078fa2436eb657ecc39254b0da0e96fc79139ce28aae18c558f5e04ac61527ded836abd9ca332f890edf46e4c0edd8b92bb6c9984d6607eca6f9ee0ba1b8cf005c6c72b4d32623920464f28d64c71d71ad74a63e5597338d75191aa8926419a5eb30cb4c37079480ab7b228cbd1ffc637188d31e07d4ce08c889e7d60b0bab7e702e3ba1357124d964fa4243a22de03d110deeca9b1779abc1cf88a2d9e7750265367722a1b60c82ecc0c93d531b6b54c5622787324a4cd2208eeb2aec729bda2a50f39a4307a8cee0058342109bed65f5e036d02423bb010f4f4d08a70c07471c160055fee68c4466c836ec4ebe4fca0cc979d200dbc9335f76ae74c6e374fa1265c25106ca770bd057bd68f46963043a7ebb645a9113c596a68cc48d1a770ea8067c2304e146a3536190751f315c62c58335a0caf4145cfb31e61e019e3d59ab17861270035fc0e28b612cacc43ece4156d66bfc7d0a15685db671a5a35e7793acb373cd4b50a8279468c626455ff0669f872f983852566092c25c1ee41e5289a75f8147759b729c8b8301564f5e86f3ab4a3c54b64915da80b753065953e38bb2d30634ef5ac7da417036cd12b69f7e087c333e1c7360121edf6c46a876960f07e91fe44938ba0a2e3fd2f0f48ffc0d25b0f4d5745a7520150fcc8df449966a10a946de1f8356d6338176b10ed57c52b15b7f704d503b6c0c0d01bb8ac0346dad15be3d48247af08d35dd7f33a22e02907c046e8e4f41fd5b02a73e432b76057ea2f4813ead7f95f13afac14b1097fc0ac5e27dbf31b9e75731e207774a8fd57c27850c0832e9c5781fbd9906aab4d68cccfe1168568875ef370613f4cb1dd71085599acbf87c36ee7e949b5011046a4f38b291c8725d62057f4e202c4b04326752e2f48512272a10c736393a0d91e36f42677d5fe2db7be8276cf637d52797976d419a6085f23b078ab91d7b6dd2f88f0468579687552385e38483d38c9bd5be9b1565c22556cd0fe10c53663b8e040546bb8f54309398ed000593ee69f83fe31f27fc28037d733854523c629485d439a163f01772cd6f322810f2c514dae6ceac0ac6f5da510d8dd554ca621069d381b3866b1c1a6aa9dc4e024a781be864b1700d4a27b8a3748e3b8ce1ba8aa4829b44bb2a4af3fcfa89aac630fd64d00d372f784d4a0ed1d63b4735225c82399134650ca839efc11366b2d16340296dd3f95ce5b733bece4a81632f19c03d376a0f4ddb5a2b93ace388d9e1e64bc17d2d6d524722153ccfac2819ba35b3c56efc3690a1bdc215b0e8c258b4b454315961476553e6cc1b3cc84d36b5a310fc9e32227139770a1747c82094199c483eda185c61e0f36189ced314ead29bed6f516a469987594eedf45cea873ec963a9130209e58b50ec93047c0aea614101f6f856d65cb8dec82835df26386a48f12c07dae5585c4bd75e9b3182e2fcc4d0ac7c84caec2833fbb9ae8526cd4cb102aef8628a80788bc15810cd71836f91486eadad0fa858a9b2cc037f66ddf451262fb1c6fa2a42e07cba23533dcb661adb268bebd1ce2d5cee3a96459e5992b258a260fb846838ea51212f98a2be7be1864acabaf7a9256b748521ae83ef3da0bff6a303aab5bf8544207d4123e33eb2315d5593f8834666c9418073ceda6d423887adbaefaf9429752479bd89aef4f29b4f0d2cdccc89fd41cc987cf564ed5fbf66af3c3e4ce07e11a82d790e47d54d51da78c0f2ef253982c898035be1e7a1043b2582b0d946748207be97ca917b833aa49243ebc39d0172fc905f9578d15969701ba43428f10565e83b067e41f4e5a70f20c01034ff8108786b918711751ca3fc1951223ae53113267ea713326cb2cea506ddbf531214b52cd3a62e8e1a5d20930e06091a38cb7ffc7e365d5ee3b3ef6773b4584e26fc25de7054dd38015fbfa253d1fc522bde2c4347899434da83ffdc6298da355b3e6380adef8704f4a65e1a379d301d5519348564d8a60af51d766df07f4c2b17bf8e7eb549fba1f7244932967354e9d9193ea23466377211a7843da87c367fd8022ccdbebd062e25690de70193a7c9c857d3be1cb10269309ca3a913288739494682ac97f03941a3be31f5ae13e2e056f225632f1944f21dfb26e9f471bf56bdfb45e19cedbf5f1e63caa700c008aa232856a5b8ae158cba9857412100bd68f2db0a7a151ec67300fbfdca666f1579e82ca0b84e01458d80b02c0477b7828f17bfaac85f8e450903b750892fc9fcef19909ba93b0e8b11c3fe3da1f36329df2b44310128e5cb84f9d07d6205af1e0335781e7e523ed86b8dc8552ccccfdd8602a7f289c0d72dc6f2900c4bda34920975042962e0eefbc1303bfccbf47631053802387c378b6eaf8f5f525b98fcc447ac26ab9754d93fbc259a1d63b0f96c6880584bf8ff15e8d6a560c940ca72d83e85b6fcc968ca1ca3d4c67704dbe0510e30f652dfeb5126527d5db327578bfc95a9f794127d09d0bd168f78f8ecc5a1d761c9ee7ee2ce78850fa62adf494324bf0b743852054392bcf698008682f5124b99e16fc6d0d1d014150bb5307ef8548ce4a4caffd5d42ef4fd93b80d2433c05a8322088e40f0dda8ef28fa65d06fb8919efc10ca3c3a3e76ac1ba52f57ce2c91b8b4e0e122c193c63e399eafcad53db4a3eee87a1cac15d63142fbb2967715f2efce887f043efbec31d15e864bf6ac31020c4bf770c73b1cceb25186c327dc61866e3d4f1442db45e1d6c956c7022f9e2e2f0adfb8fefa0acbab7b9a032c570b33f51dfc93049dc92efe1ffffd6663992ddde7a52512392a923797bc6a1fe863e0f7a74fd008fef4d581bd1f8bac06b46e0960291918b34a16bf00e14507a0162354f85c3a5e51daa91ab39c4c63edcca273ad6f1ed9060302a6536db3bb7eb12a455c1a4ec3061e86b77fc5f4bd97c640728999f8e95d493b85cb66868a645c282f37d46a08c3c1a40d0155cb5028589698be31f32c51e670398fec99f5b1eaca873d574fd179c9b94490e80a7698805c3e9b42058ae7e632565d473afc69f6127bda2b3d48e57e6338445440bfa7dfa49b9a89e672f60a3d4feaf79db52e34ced37a106a26c3c5d3adda822215b923418b7bd843c2fee9b70a76779d8cee3bc28aa7867f5972e18e10762fccfa90976a374e993535e0fd66a61d6676a7109eb425ea35aab90b90a60bd5e89be79eca35ac48c3582c14b61c8cf0c9fcba6f0eb6a5c9a3c102c4ee53f1b28d2e86fc30c5cfccf0b478a9cc3c42853d01edc50b11deb0975bd33bec522e42e30bb1420aa875e0c2d7a46e4a9c2ba06d5d1d207fe417f783f13a09824aae1c8db33f78050628bf5e2a712fff1c2f5d89f706f3ebcc3cd7e5f7789d261aee8958959c3fd1cd2461f81be5e8571e8335a6a906826ce276f63cd6d1c0e6dfb173614cb975c1b7a7801c01f8e88ec0684c331792f36f2693bc7a8576a82d2551361e0a3e672227bad57ef4170f7a6db0ffd379c2a30cfe21853d1873e815bae4c9d70d70a2d8f6288bb95725d6ba82b2a851eaaddd1e4bcdee8b8490a97e8fec4d3ecf461a71c33cbdb6b1894bb36d917cda5579d816aebcb69700badf0d637a7e6d5160f2a2bb2da4b890c5a8d81b37a584d666841a694ec3a9c79bbea0772c4cd1785c8c524e59934ca4c08418fd07371eab2c148611de4a6966a60d1640a37416a27205f79448795b7565f2380b52083714c68f84eb64fcb2f85e128a83ba6941bb99a39185471363e0eebbd07fe2b8546746341f04aa4f73a85b30d815a903e989ecb2f71b9cc40b176f7f6411359371af71f569d949a32a6b29caaabc674e7a2684d58f05c8db8d8453af1fa7630b603fcc95eb4af1c151bade4d401e2a929591ffd8eb0498e35a3302b164efbdb7dc524a99640aef0acb0aff09d47750f765bea81bbacb5f350af8f30685135b4c81851b4c4109dc148cb8c0092b8260f204916cde8bb148c6492965d751da7df245b19c178eebe66be16fc9b7c49784fc99abd0e7ea162f8f9febdb71d528898bafb91ae578ca6f8c92681a4a7c3af4078c8a00fed0df80c35078c36866a652b2a5c5b498160369a150ada14fd36808d790e851c19b89b410c9465f0e9a6e016284e334349426e1a325e69428c0d3a5ac91435044a48d347d34c080018352182193d378cb8ff0243c67028165388a72765cf4f757e82e17bdc0a316d3a85822fb8b72bac51f3663b285684913b27f779a524a2de67226eef2970673150f18236fe1aeeaaeaa69a21c118e2889abb42444b02344af1a64f9a3c8c5855feb3be203f155a13454e790150f23813d8f23180c23297ae54b9cc9880a878d640e83960f2d6846edf00345bf3d27e0b1674078f85a5feb6b7dad537e01061860083d8c049679fc5c94b2789fab6d2ce9d52889d1121f9391eb838d7068f0389af9860049016bb1b6e1ae6ea1a257bea453feaec5dca5c5c60d23816d1e3f57f65192f91fd220bf527034ca71d1ff1382e50d5138b8e89f3d2df0d82e77c9d034168f85e5a3a150278094d3d03cc2014733a111cd1138f42a7f81d0ab842a7f01fc28f9cd123d8c7f2d975cc3b5c0a30bfe6ee62af41214812aa012b0cc112578814f121940c18929aa107e8030d3620b2642607034339a49a552f5d6aa699a369a19d1cc558b0094b678a1afe52aa771518956795468d1df9bb92844d208aff0a8d02a5116decc5522998bfeee922999ab4633a22cc6d14c0681a4bb68463879823f6de325fbffd71ab9e64a035c6c81c5131938c18a2758fea3d75c75204a0ea680842d78824084e53fc299abe6020a45fcc0041649087101cb7f943357324186e88114289ce0f95901cbbf8bf1642ec9adc333933d8fa39c118eab5a27093cd97f9464a4a4bf1ded84191f0d307c5a5a286d39b94638db1278fc5a231c2dd6694dd0629accf3710f8aabac8605ad0b6d8beb43762d368a65ff5112239c11931e2d192da1c5426065cdd0086784436f482b4028f4e1c81b33fc92f89418f1e0bbf95aa1afd5e52851028fa3efe5aa51e68c705cd9b75046653e0f01147c564b2f285c913440721500b9b2226fd490340220570ba8917d85daaae301356c49e30172b5819637eebd96d6aea67b419d2b1c66ea0572b50199fa4ede789134fcebcfdc805cd52dbc542feacf0b6a3a1dde8d9728747c38a0d90dba3bb0f6c546f6ff5280c77e693ab62d08e749cfb360b7826e6975355be86ce48dae064dc3bf638111fe9f09f0f8dfacda4bf9aea25ac8073c6bad805c400d79c3024dc3bf01725465ffef0478ec97cc0143e895fd6b6db9d8d53481c7fad3d57c11a82c0ee09043dba83329aea2d287c64277f1843ca6b2fc31957198a9ae6605dd11d9bb1a641fbb18641ce6aa5616a55ab86559d3d58c3219e308c08b6e92462f452f555ebebbda067ef9b3a66d845efe94b58dd2834a160779be26ab90e75fdfc9f337aef3be2381fe2390f49d081c7da7028abec3a0ca7721107f570243dfd96ab5bb719d47bf0482dec115edc79e0204a2ee8f1207d603812e540104c6e07ef41d10783a420bf2fccef340208c8c459e4f02fd41a0297ff3bb5bfa9b4b4f1a813cba45be0894ad996bd64c59b7c8ffbc9622cb1ac82eb22f992b18671370ba45d691dc5e9d6c247b29a90eba11132ec5c9fdfd5abfedaffdb47f8e9880e5b7bb7b68c404dc7d7bf3bfd975d09a7801869e951e548f0b3d317a4e3d307a4c3d30c4d063ea29f5907a463da21e959e18be47a507f7847a403d5fcf833d5f8fd7d3f5703d60d8c3f56c3db72794d1737bb41e192c3d5a0f0b007a001080395d9682489fb45aed6e5ce77da01056118d4825138c530c175030c4f03c30f0bcc0b3c283e271812706cf89e7419e130f0c1e134f8987c433e201439e118f88478507f3847842193c211e10cfc7e3f1c860e1f1783a1e8e8705003c1ccfc6038000f06c3c0110008f00c439bdaea484f449abd5eec675de070a6115d1885432c138c57001b5f282ac35437156502ec438c130c110c3caac695598cc54228d44358647b9ab356b547008d4cafedf832ec81a3b73d7e7757696fd39308c51a3b966dca685324ef2fb5d086f8d0c1618b9371c190da53c6e2ca62c4308dca32460f914a76d046003d112102e34dc572dbbd3c942817b3ccd79929a36ed9c761239cde9c284f5c9a1772600c38393d1aa1b2d592f43919b40ab64f4e760f2f1240dd09c56052f326e780aa4f4a1457f2edc61a6fc45130b668aa65b80280247a05b7834c14f038c6f5bad55ca8f07e7938394d57a1c376b0ef2460d33d05934143ac683e3717380c7f681f9a8e6c3541a561bdbed74744e3a670d13490ba4f8226723daf77701ac853348e69300897cf93d0aa483e7cb47d997c9361ca5b456bacf5984ae59464cafecf66c957208a9caf2460d7d340d77e994c740a09d9bd0ac6da8e6ca45e2dc572c6350107a003d56f9d0839cc01267ae7a40d223f42adf037ed0f7107a1594fc1ea0c7df43e543df1f4a8611003dfe1bc21b544289236970b5920a3bc821240de80a18cf4b2a99606837379cdf64018f92e626f48de201face3d24144b2881c5f2bfe1425bc74582da17e3b96e74ceedde7beffdfeb6578c9b9b1b2c6fe48dbcb9b9c1a1cb4c3dcb0d1625b8cd6badb5f28bb9ff4950cecb4d507dda6d5bb775dbd66ddf1fa51bc541764ae72de27a8944f7f18330e85d50827c70e71bfe903947e3ae535151b957ab748301c361944c265311d70bbc3f86d925b3f802f08f33a48d1020c05a7083f1aec347a877b3db467d481ade646403cacd46b5fbb6734b3a411501bdea1bb288a4e1b3d1456ab7fb3af7bccff3be0fbf0f79c3fb68a8804bb2d4c9b2a1e4d0a048f6aee3ae46433ef2bb17bcb9ddfb82875f82466844160e7ba666054380f37ded8652c817236f9490375207bd8356cdffbade34913d1ceb0cb2bc99d5c5a2b42b63efb52bde8abd2bdfc538044202167e18bf3737f762b086865e1acc461076a673a0dcf8ec38c9713581c5644f66385fdc1c497283d335723c96bea4d38b335c5e7294d41c4ff9fbe7e4d04bdbcee47433edc77ab3ddaf4e6cb42da4c1f3a67d8dd5244dea8daf641035d55561ae32e5d651a2e5dbd55aae1a2b1736446a1157c925344dd390c0ada3044ef5688021d39cab7272f175d06e48ea56ba45fed5be6a6f55e6a3ec586f48be0ae2b21942b203d1e2810db29bb2ebf02048962c7fabcd7a538fb8ca9bc8fec9191ae13c17eb8da7fceb4dbd31327fac37d9b997ef79cab5d7c23b7ad2c75b674680bd248f1b6e902b798386349a86ff0168f40b0a1dddc3a3bfe8c9040d4df6d761c209a90adc426042e63193fd7b5480a623705f0b518eeb11e6ea8633cd04194b7ba97d0f200598b1eedf1075fa7a05fe1304b48859b1e46648106820d3c41660d032c20f9e5812a47e2f021ee02009222d238c68a29d806333db011382900514b0bc8b28bc60892944c0000533967f05e66a0620603b6859610b2744c103399cd2db301e525eae8aae59469146451844922906da81a65bac56db70cb0018ec56784fccf1141e33dfa45142859c696756b8f49037c898d4400f0ae50f48935490b339c4a4f9403a27cd1c62863092c61ca2258cbce153760841bb5ea55b70b7f88740de009b8648a65c86bb87a460bc421a518c79dc78d9a1c7e5e152fc46abfc0ab87b760529d861d86198e7caed47d00ddd5920530e448bfe335b2e83ecaf852129b8e651b6ac9d9ac679212958e6116f212958fb117bf6888ba0493367aeeada46bb723ae53f45f6a7c9a941e774ce6ce22b1ea2d313ecc4ef3ce22b39d329ff9b042bf19dec2f9be855365d0ba26b9631942381cae25a3936ad5e6d0ee6f14a2ee60b79a439b9595d5937875ba2b99cb651ffc449c131e9cb2dc921183541d72c17042eed2f78df8640c47b818f000f665d1f9cebb1ab7498df4fb203fa899c7ff2d5369b9999f161c6cb0c4782904796ecb09c2af2e89293248f38daf5cacea253622535cb974d2e66b37a6caf8540b4df426c7f0bef4c4dd110b004812bd7e740ed37d0f6e05efb999a970766fae05cb93e7d57e950ffdb7141c9ba3385a574f756018d23c8d33da79620481292504411382d68c18b0822289d75d239279d4f20010551446169a59456aa43af6082264d2cad94d24a75788214a1084992fc50292678e20922445e2b52fd01d3973fc11d519c601b1e578d326e513be417d9beb44eac9539b136dc11c5898b9d79da797862b2284f5cec5cabb532173bef8882a9b723ca9393135fe1588c870786774489f1b8d8190531a07487564dabb5d2ba53354d239d5cacb5d6afd64a69adb456edde9ed5d24a29ad54c7955b47094a94e004ce7b64b9757a606d84dc3a3c36b9da5077f75cf9edbb068babfce688a7e6370e67080a515f92799d72bec50662d2123c3393355782a24f5134f424d973b04852a5b4fc66becc992f5b2a58c0a36c7548c043a6484a2de854b6e48d6c4999cf412d30c2089fc6e9da670ca5b55aab69f71ad96e38aeeb3cef84bbe5a3dfa51d914ceb902c1f04aae996d017d3c929f98be15c389d8a0ad7836738d624a3d11743ca51926b122f9564a982503b6c9eef79862305f26844227d315f8cc973e132819b4914285974022c4308ccb9b2cbc51d513cc629468c18304ca5183148a31831628862a8e01831620800d4dd621dc0653aca5491d6c0652a80bc23ca4f4bafe18e283f2e76de1165967d4794d98e28b3bc430a3ba24c71b1f30e290471b1f30e29ccfcf8aaf38e28525c25a3489965ffa240d91165471497ca1538980b73afecdc0b5f59e5c5978369334924d1f281cf14ad7be7ca873811126d65f7e6aca76f862717dbbb79ce90888b435c74af1992bd5dd5ae6aafb93f7a8df51a23e03a279d4fe79cd5daa63d3de533a4aded062f7801ce1147e4c4648ecef465e7b9ea25bd86996728e3b9d8e30f6f29fda9cbee6e92d35a61a6f76ce9b2657777b7b7ac4e1429d23262e4c70739a34ce7031bf7ac0cb52f4347992aa0d0f0e4a2f42e0fb07fffe9842d783202b63f62db94c25c94a13f98e5d6e9c14d9e8f73ebf4c026ff40263f07504aa256d34e3933b9757c7093e79f72ebf4602677f3baf875d7a07df1c5175bc834a4d33ed1b574b9d8eed3e5af9c247226b716723f8ccb4ce92ed915d9bf6b97971761489065fad768b9f31bc6a3c7571f6019de7fd90d62504ab975623fc82518006624d38ec9454522d18f9e65a4f42290e6b24a0f33571e132090c7c408444d914bb4e3033c8e6c5072822527a0877109f628bde8492010d28f4a3c24b067ca496f027243510844f4253bc3a2262ee2976109e630c09309c45ce051f4f3c50017b92a3874fa8a7c30f8f195e93d130c8f2553cc7d7bee3f224c2f2ce037d5d4b8cae5297f9570bce30d8523068523fec2cf6309168e62e892b712cce47ac96309667299aec063a948e9066d83be7f09077265aa194b48c8920f72c909592242f62e4591635364c8ad132b4136b9da86cdfea625fec5686faa99abd2bdf824e6b10413f368aac9464ca61dd31060736522824cf99ba4f0a3c5cc0a1f534f49668a2296dde482d1041e4b458adc984cafecefa61d93cb455316f0e77ec2e6268f239bcf0558fe5704a64248282b995c58e07164d35131a3c2c788e9413b92bed7a0a61f829122b93381251e4fb9c986259814fc265847bb042bc146458c6c4c2e00fc0db1007f96f97b3efe1ecc8b9996f4ca5a9889898d99a4c82f131523224636360afbb258e0b163f7a9c0ad3305ac64449d7482e48cc935054e36b9e6aa04f3d45751935b678a9a1872ebf4ccf2c866ae4c3ba626adecaf5385139d2a789ef8814826406e22703185fc44124af26872bd64d9fb099c58f637ed989a7830910733997c607385af0733c93c982834b96e0ff0e8c1601334b21915312a42aeba61f2060d45aea631571568910b46a967efbdd7d225b27cfbaa01ec885896d9978dc246217bb28dbc41c312ac69d8d75c79b02ec1e49743e66ddb3691ada1216a72b90ac67b06130d00e0429444d4121119d98c5a231bd18d8a0f690b3c7a47b27fe7d9e4c7248f48f6212eba17f3602e06c1a3c9e582b96a82374d9c7845b2efbc5cc5638ab9ca93754fb2bff7e5b02fdf2bc1da86253d018f255909ca4783e712ac725132a26dc8b02445b77c39be5c8235018f231b23f05882b9aaca6049111f3212f258e2c9fedf167834955c266972995ce24b019b602e8a40d308347d303c8e6c4cae207934b94c262b308afb7e92b71f4dae22f0fdf963091653829562239bb912c1463636a08b8bfe1b58c3045be0d1e47200ea05878bfea2262e8a9278ea67ae44443ce5af84a6c88fe806e748f617b9e64a65a6f2836944ae2caac9229f2cb231c1fc4d3193cbf4f239a79d56f437384b643d98c9657249596779ecd82bc794b84f91d94e8e1dc9fe16c74996b3f92427d79f236e69dcd6b8b5c9a36d510060c7f1440d37e36633e671b3b9f27280b2d72d2f179b74de7efb396738caa7f2ebf6b2a35f0c95f22f585fe18f9ab72f3c8c04d67ef4e816561812f0e7919bcd7434dc8cfb79e520b011fa469353b63fd62364d74023f635b0e6fe7694f20c4517fd3112581345f10878fef83958c419178e779b9d76b6ec1f2387de3bb959e57c3828dc131741e3f5fec71328bc2e979bfda8ddf53012b86623de5bd04817d23ccb0b3f2bd640ca52bae8a19baeb3b6c3335c7d713397570266f7fe2fb6b6144c96b87033ae0b6ed63634207ce0b090bdabd5f386d870336e365da8d95c0507a12cf415f95a232554fd151165915b9ca15192114eb39ad5ac11465e2de1888b35c21925f16c27f517f810ae10cd0b685c6dc37dc75d9a169a15d25daed2621e15bcd9684673e23bd9bf0b3d0d58c1911423d8e8d52d2324c894ff48a66931aa22fb8f5c239c11ac6db8173f2e9279f1f31249e1257a22d222f4310d3f0ebd066b38bca156b7dc744b15c9445acce40d1aca97480bb91afde06ed32d40fc206bb2bce131681a2920a20830e8748fc2779c08128ad07f4290a9efe68345f115c1f5e1b8e035ce084773f219a1c5e6d76ab0654f1452fbe996d087424d4633bf9fb6e153be641652267d64136d56f992b9eaa3c9a2555f10fd6958084293923f1a57695db4a86541a6345009b2fffc6a3cc812435aa8f97d43a028f6dade7fe4f3d94b9ac9a39feca359f627b9008f209afc09116a34241d719a9056d06b3f73354ae2a91d9a919299eb6a09857c896433a5c5be2550785498d2050b426fb598161b2571198ca8886422d95723bdf066f2e547744bf757e32aaf417b0e644a52e1449126584048a041a961e127818cc207acd06ba13747333c08811840052c202490818543242839430200b042211294fc9ec94ec0524a291b34c1f69b916449d6a84966d2a2ff097a90ccb048b01111632141d5303f8f5e5aec33a2555f0b3e6f36539a933cc2f96a5c255f2d689584e25b3283e27bb9ea932cc992b3ec211099c4cc8c8c45022f0533169251e65bb38f2e0cc7642b9f6bd37e3a8c04def2a8fd683f1a167ca05a8c0650d6c2118e15b0168a6222d92867a61c148ee2bf178e272ec4361cc527371c5da08c7082c0e3a8482ee2aa51243b32ba71d5f62b2029ccb40d916ce443af444d18cd8864a399198c0406e551fbe981c31eff335343e0f17315c96a4883fc96c60eb12d7bc455adc3e4278f360985a5208f5eed664fec208fd626d797923cda22b996f2686f72b538b9da9c5cff6ab6d6ea2eaf4e9147b9f31dce888bae59dafd0dd47a6c313cee6d56785d94b0ae7edb4c63b96fae16647eb32cf7f36fe07e863d20e9717ffb1e3c44d1b7376c3ddc1045bfe7fe7beeb7b0593d747fbf870fbcf37a21aac7f6a3bca92e18c15d88ea71dfffbeccf19a1a6f4925b2bec4a95e93ebf3b8b57e0f7943e6aaa36ee09da9ce4171ca1b5fbd80f3923c3eb97e3bc955ba72ad12966b2c57abaa3866a838c4b9f29f5fdd4544d72ca336d3d755a4dc5f02aa51eda985b968bf14c48b8e0ab86a032b0e98195c459f470f57d12ac545bbf9d42927147d7f1956a5212a02f3fd7bccf7100812fa40fc6778ea110299cf85b8bfc55086259fbaaa82158a8b9654c3eae3a2fd50093c5a984fcff9f23073354394f6dd735fca63adc916a5857f4317723fc39ea997f9e30b07e299b2efa00b46b0bf8e9b2d0c666536481b57c9950b2760d987e9286a58cdea26ccf080064f2c2ca324d0ac20f765a6eca3503cb89740b3b8f006235ca863a6ecdbaf53e48d57f561d94731819b5580234270828bd5ac1b44a8a0e704438a8c2fd9ce94fd098a3365ffa26e4883e7fbe2ab9519181b5ca50157b5ce106eb2b5b6b39635f62cdbbf5af571d5f83fae1a6b5428aef225b2fd3a7315fd20649f6c9dc8639d926d0d57d5f79f6f5f9be19cc054d8a422fa7eee89bbe785b2e903e3af58f5bcdb5323d61871907e86cb4bbb7cc7e60ecb3075917bcf3992b91ffdbd02dfcf4514674abe7c293d2ff4262e72ef1c0aee49e47a843cf0ca7336b828738eb8aac339cd1510187f9a7e733327bf983bbfbe8f539e5fccacf5bbff3d8944a2afc36f4fdd2b78bdf4fd795ee97bff8290409904ecd177f28be9b411e8a13c8f07363333e3038b7b792467c75534732f61b3cc719cce14ae73edac208f5289ce4fa679944d32277932279d64ee3dd5781d0899f31c343b8c7b2f83147191f3fb32f976d25351791188f297c91e8e328b6ee6b8f71d7ff9caf4dc77926bb978adc0fede6f2fb9ef3e4f046a8f417f9114e229ee258d8bdc775f8c0ce222f7a42eb03fe8e5eb4eee432f023bab74dec00643dcfb0cda86f7dc7b11f2c6f6dc83c09172bf812e034983ab421e6591cc79a1c7a05bb82fb5008f32882c92b997415c459f7bc9bd14a2dabe939c2492b9efbceffefbbce97d5e7887907a82ccb24aee278238c9620c2ac09606fa6ddd863cb8d81eeb82b7ad490558e64669df0fa2b41ffb27370d28ed6bb67f515abf75ebd6bfbb3daca166fb9607171bd31998949ec541368949979462f3402745d91829df7bb08427d377d7922699beefd059a6cfb29af736067af53253f4ef13dc311186bbfbf4190a1e258c8b82477924d3e7ae803bed6d0c42605b811c78780d9419033868c0c70e3ffa356d2691d972955f87b93c08e8429c4636e389397902c555d646ca56f697475c6595347195f6b325b3c449625d3b369c445cb471913a387a1f6a167191fe918ce3aace9992a5cf64f956becc95dbcc14fdd309634a29a5f49d80651972eb384144eea414e229fa454e1dc372c8bd17e3d349b44f9b788afe9393133c797aba7dfb2ecec6fc386d6408813b96c769336de6ca65133657eef2147d98cb4b74fdcfa90b47172c5e177e8dd326d32ff5004f4a9fbedbe468ad22498838116f1dc19152b4afdf2ef93e53c31f3945c8ad3cd98663efc0cc596e1932578a86d0d9078294fe626e16586697fd8047cf89202e939e846205be43b26c6205dede64837da75be49762ce93e56b3fc4795c157327439eb48df9ab4ec9efbe7be52257bdea9eb2656317c9f4fde648a635741f2d73e1289d90e56f528664f99aec079765b932c355aaf92c3656c2b4cf396b95d2655264b339e350a63f71556729fe33a74f9796051c74d8606d0e1ad879f1c0e8111c25393694ba0672f8b183932ab08c7a4ea97d1445d1b0869a797071867352596b95757a62055cf497b7abdc5f4dabaffd7c1d34ed87e7dafdfc62b610a5dd150eb5725c88aae1e3502b483d555175fbfb1aaa86fd93699e35e48107174b4ac063cb2a0e73a5c353fea8eac3457f0dd00f07aaa3a34fdf65aebc907a6a3e0e252064f7247a98b4f22c2a473afacda2a3244b25e4d659f2c4855e97aec5595f6ab8e845648b0299112269a60672f8b183dbc0030315a033f8d73c437924860adc127ff294e5a3e653d40c6ba8d465bb664b66745c321d2764b963093d8cdf186ae698431e51f5e7fb3865ed876719a2aa0b48fa38d12f66932fdd857a4aca47c99f0f0ab56f577d214a6a5fc36f876794a67d312ed9e7db97efe2ef1e4ed2b66994d2cf017a1de8d70785326a30bd2f9327387a9a06a2534a6ffbb9bdb619097d0d89cee2aafbc5dcf0c52508769929fd90d210f59aad216a865e266507d8e0623faa86ca43e2a85041840919109ee4d6018290fc925b07084772d75fccc502f7cd02771e3dc81630a52496bf58e0ce520bf5ef13b07f887e40e6520ffe1ef43ebcacbd58c5ef6af543a06c22776e8047315725ae9550384a9a7ca9af3c4fd5bf1f02f3fd7655cbc324ee594060fff6dafc62340ef4dc77e02813d37d2743a1d0e7e81c0a51f87508bd867ffb91bf07811e87409f4cfe401f5ef6c2bf20cce4dac5b67fafd61266a1707797c95f0c97dbc5edbab8c93c5740bc6fab5d9761fb4dfb39edfb38a134ed356b6905479939e70c51ddeb301fe70ee7f9df3a4aa66499ac81dbf6d63e078eeda22693b74b5f032d95b16e712ae526e72627942d932072724fc9cd048857ee42f61b94b95d05b2b75dc40fc277a6a40cf7e9f7238fa8fba06f1741e1284393bff771ca205088ba610d35dfff6484e42fe4ced5e7ea83e8078e13e4b419fa50901ce242616bdf2873bbd0eb303ff4fe32f982a3d7b251de0781d7c5fbddf7e7c9640ff4e1e5ee82e32d22d3cadac3cc4db6c49c5b20cceb048fa44c719db34e5ad335cb7865787beee7fb7b4b707f8749a71557794f29ad5efd62ee6392abbea7a7bc92bd1f3fd30f3ffdb6237994c9a08fe9b410a5a3b3f6393a6b214ae5750865d46095ef5e26ffc8f5b18a68431894c915f4e1e5d02d923f10f85f286d5c6c69a3699ad5ba7b033d1966ff15b8617edc1b86382ca56f2d28f3ca0c5759faa4138bd8496bfb5d35e8ae138cfde5a50293a607f16232442c37132172f28899087123c357de2b7045d1975cdfc5552e2e5656f832f8f7b57638feb036c4d1efb232c355f349fd5d6b28d3b0990cf145ee6f47285f6a84ee52d175cd325659d68c7446bce79e7b1956fd3b57dd5c7d2eba769a29ed3fb0b23aebd92f66bb3d5793f512bba83928b3ca0f6e56b3ec57d75c71af75af7d85559e1aa33e6dc341d34bdbe83295a55cb5f9dd709aa97a039ea9daa37b507867aa7e7f3dbcff4220dc7b218c83f7869cf69df69d7b9a0c2f33a53d8c5f25e015070641b2fd0fcf42727f7e31244f694fbf180fb18b241735ce65e4e4a2a6b9ba2508787cc95a7565edb5df5e7bcd87c5c9b7bada46e38001e512302605225005c4603b7d219fd31081b5bf5f291804ff0fcfc221122952f96c90f93cb4f227c65fc6e62a019da2bf449629d55e5c8079e4101b222d7973c4936860a76d5b0e2c0e59d0d7a17c199adc75ddb63d07d22f86fb224b29e587dc3b70ec29b90b49f78eb31714edc70003ea3828253821522b752aadd4e4a5b57a7736b2bed7afb5ce7046b7d42f0dc1f49dc5c5ff86e9a0eb52124c5d941ae83550f4334e8484baee8b117df7c5807eca6d4a5f9129c8eba7777ed775f28bd146efa0dcbe985188d2e617237ad701da00f2f86670917eef7cf7dd45ee7d9cb2c6838bdcd74f87bf0ef3edfbfcdfc059233defe5fc76cc4e363750870e6879fbceb3035ae72f66cecb796077c39634ee4b70fe0527f7bec3fb3f7d311e90df7d17c37bf9fdc4df5f07e4d51e668a9e0e5f855e861038f4f865c84333a8ac006f2f63260fe2f75466fcf4e9634c9212f4d241534ac9713f41f99cbb94dc77f58bf140f7f2cb417374f4e98c6dc60b0c5fd097cffd0c3a6ce0e12a8e96588027a539648299198309b0ff4b775843fd481e107d35d47cbb11d85904d227e0eebd17fd8a040621fd0fcf228548eebbb07dfdae7e31b57a2e5ed4e8fb1bca8a7b9504a26e8883f5e22211235066910835e221a4f5254fd18fde8797370e46146eda6b0fb6e8a21350f2dc00bfbcf2abba2aa77f469e3fca2459eb154fcdbfdfe09c2bcfe2aafaa0d0cf7711fdec4420e843607df97d3fbdf9c5d490e8438fc151e6defb393adf10357a1deed7bf5f7ff4dfcbe46e1138026f8b4095ef6f93c99b4a8323c5a0179238597b18ff40bf1ec7694dafc0dacfafdc6b9ab6f2b2b26de1c8b2f2f2a2e35eadb56e4d93b2af89ee7eb3dce4dc4c27a13cad77c11c9def0d43dd12aa17f43d539762d0a49ee7e3943daf56cff33e47672f447daf83f7febde4b8ceebb80e94c91ce8c3cb5bf817ac12c78576d14d9fe0f4b773ba6cdc24865cbdbe53ecd560ead22576d1c5eaa20fe964bdbe435fedf53b380fafb9da617a38eb76b073a65db2e6f60cdf9c7c5ea24be631573b786abe168e5786b667a51e609fd597600dfad33e8ca59bcd99536bfa33fd4313037363207596a024b7ce128eb8e4d6a962ca4dce4d1f21d3d50c4fd1077df77de1080aef0c1769e7ee1b7a1bfdedb52f669be1353a1a3c6fe18c6ea15f12024fdad229fa32600574df8f328f3332fd2df43d53db6fa1765d86efedd72ed6dadbf7ddf771faeeb5daf77ddff713b46ddf757f2fe8e3bebf4e2677a00f2f73bf81d7e2dc21464b6aee771ef8028edf6f610d17454fdd6f9ffa3f8af95e6fa45914daf0040cfad06ff7bbff1eff066edbab3ce97d7859f438b80aff7d0de4e0aad1df2781eda24a88dac21a6ade7e0ba51217450e9421041efdf6f83b3047e7ee3bed8bc1233bc2a3efe12a70f471caf8e91783435417d65073f75dc8838bde5317bdcd03bb7751f4fdede8c251f88d4f72f1ba32f7181c59f27d4cfac20657795e2871ee69e50accc170dcb675bfe580838b57ccf7c5171dae92b9e3bec60caedab8bf3fc305074c0776deb690e35c460d9edf4c86f82294e7df4fde28745d520253d4c9c32ddce1a96befe8cb492995f31641e627eda5cc6f0fd23e439dc8a0f8cc9d174f2bc9b3bfe5e2ec0e5d880fa9a172485717f2338434bd6557d03d16d8eb9a65ec59eeefa49433491022bd7aadb3449120abd3adad2e35c2192ec27039128ebc50c72ef7f71072bbd3934c4a7143849f3c364c34575cd421c22cf7e37e924fee39e7a45efd62e85b1bc325a568bdc060796cd80b726c595bfbd2be24e51a7e27abbbcbafeefe2115c8184f707f679984dc3ab059a6b986a7f94e6e1dd82bf7bbbce49e73ce9675b64b0d49de1678a4a3579f4e1b35a4dd3223f70c5f99666ac0d85081230cc9ddedf25a4780e5231cc9234b3bc96dabea5974723709a36aa054863f8f3372e3e89596021f17fcec2cc1441256ff0cbdfa27ae889980892a6e9cb0fa5bb977824491c7193d4369a17aadd483bd2a75777799579cc505878e286a3c9828a94fbb62edea93b1b8e0d0610499075ba90143135ba9103c4a29a5a1917eeff03db532c202ee7e99165d8cbffcaeb91ad9e448bf5c4a52f70eb97fe426658d9ef097a3b6d5dadae666d208449c25df6a6d59aced5c3ae4f3e8e12bee7180a1c9939ce5fff0d564c9dfae5da9b1e4b3d6beb07c99fbb52fbcc8fd16d4b49659036905c71f14bb28bb114796387cb5cd66e081811c6238500c8123cb1a2892c863f3146126a59ccd226578729125cb2fba4943402a30c95e4f5a797ee74237048fa73c6dda067dcdd923d89c7316a1489edf13479eb427f5e6f7e835adad7982ae596ea6f4efcbb0e8571ffbdaf7b04090c8b087f63704a28528791f880d51527b1996dd3a26e699a22028f8c5025564fa5dc0a0906963d12df46bb8a8d98ed558a5a9a85afd34a33cc82035997e53aa1a5d605c35d6c0415f5c6ad4997bf5a295e98d91477c6bacc63c45eb934c9ffb691bfe94baba9a24f4944c612e524a690d327daed536ead35995527fea14971ea222e079fe40bef7c2b007e8bdf74220de83b698ab9c4829abcc9149944829abc75c25a35032fdea9a3057d5584d42abea125aa44f5d994a49bfca96285ff3c05b9770fa1a934fdfcb48da6775102543ebb96b9e7bad42b7d0cd73cef3ce73909425c87d32ec3ccf3f4f82754aa6a00681aa946ea1efd2c3ee1619be8b54b6bc6f167d79f37de86f00813e14f680a487f7a0d0f700faeffb667d17cf14fd3a0345c11e587f668a3e089ccd5ca44bb0cc9ebdff7e4ce554dba85d74cb003cd325b60499fe6823d39a854c7f3c40a6b36ea10fe32c75e649c9b5a8940fbe8bf45d80d59f1afa96484ea6b648a69426d32199526a6f32fdeab2e5aa912553fa2c5deb7a08d635cbd8e1e4fa72f56d9d7ba06f0c022dcd4cd54f404dbe3946eece7a25e8b69b25d256e2042171ec4ccd0d4263e32a22d7fb91d405f154fdd1e336558b798676e64a01d79f1b69e646c1cd64c72777d6d3aa0f58a148b0ce2c583fb0fe78aa7ee742b8a44ac9f53b9ab621bf7637b9c266aa95450bc955e662ad9dcd8f5c12b9fad7aacdaf6f85b8eafef7322cfb1d01d07fdf03f45f0804897c20df83401f9261d970fce1e32a28bec2f6ef5c7d6fc7a6a209fe54bae6bfc4914a1240938021125043030cede3aa99af9a55bfc264aeaa3e5eb368558d4277e178eb14d98623a5828a56e642fbdb0cdbd528b4caced8af5f7d5c255bb45f6972c5f98a15e4ee7a16246921779b37cb1de75970c484dc759e7c559124f7ab8a2cb2055132ecc0dcc24c9e4f23ab72e74969c28c2da2236b926dd801201904a6fc03670b8aa0c85dc8b3a01784dc61cf8222242f2b6290b527e5fb9dc8b320a782acbd05ef77ed75dc466a10c8ffcb12ec971525c896c60ac93587cd15943db4415cacf57bd08f317804f91ef409b0d1094840aedf30aee20526f9d02df5ebbbd0abee12e4fa35461eedccc98231b287a365818a4d41ae31729de996fa2a5e60ec627d5037048f76c66adfcd6837d93e87d3364a396cee161bcb16f4ae9df1d50a2ca4b9a8842cd666414d95a219110000a000b314002028100c874482d17834902469fb14000b90a24666461d8cb320c8611032c610638c5100040004044646d30a50477779970532e9898a085fe9cdc46fc0d4888fcae9010666030042290b8cf6c165b5abd044e3b859675b2e3344b9ffcb160c3569ba56ea2e3c8fa6979e0e0c673e94d7d7373c1a54bb432c083beb4b84f62c325f8e6d3744445a9ae00d506297ac701da1112e4879fe20efb4a3427acff7fdf78cb90c4816d3024838b6c5c6398c18c5bb29682bc77cb264b643593ea2b8c4b44d67da1cf9a715ed18dc1c78abeb96cf3c5e10c5eaf0e040093c4dae1c6e3a278b99bd4c6717eed2a38cce9f17536ead1863d78d67032b2b1d25c199bd9351e8fcd82e03a8f1a2e8561337f1fc7e642673c99c394c3a197492fb37848b91221c9b3c8ba909f4d204125638785a9a7c7dc5221c35370d089cb182406883b314866509b974a15ec3fd79c79be843c58c3ba857a5cd974f1e9cb8571e1b84f0519f752eaf73cbf208543683aa30e48ecce13e0fe283b3397e2a2a18124c064fd2e0d91c19fd51e49979fc3257306baf797c43a65451933ff2c52451b6b463eda6549a04d206161c4a6b76197924e81ea41756e3f92280e9cd8f3081357fd009b3e17048a4a4dcb76b9801e17c3d49e7f6cf4941c2e19595544c5d79ca8b59737fa599bb091f3c80b3e486fd939ef8b9993310c0ccd6f979512a2bd6fff145f141c413717738cabe4a6c22768bda6418727b3d01711416344047dc1e841f02d492df6f5742e87bbba28879cc5a0e82746015c61100db794bea24e1036caf46b0903138c43cfe56ad3eb686ff4d1f926bbdb27367641f103596693d2318cca6419ce2f2b71fd4661a46a4d6a707dedc34d03f4f711da9171043ff77d7cb030cf09ead62639115305dda99cdf7dbbc0c609c693faca949194c9bfb4dbb5b58c1278195990bfc1da30e6475bc75924520ed832a6582b7beab14a222523388ed990a3165f958c7ae967202553ddd3f42f086bd48948245497700be43d5a70ac59240a08f9131669c92a0e740d6292260697580fad337ec1b26727fa7de0bfa1d2ea71cd330278ed179e991c2fdb04a3c4aca6c78107cee580133f4faf26158de428e97c1ae2ba219d5b537f4b98eea2c1b6c753f8dfeba286c1174e61c739981444e731d735a727c3deca68f132570f6c317123bd4ce76af2577192d370b8ef0403eca2b017fc041e513e00a5b9bde830244118de423531803daac91f3190480a1cdfa66975d34dcb68fe4364443805b98d0eaaf8b8ef04371810d8870218d526780b659d3f5ef5fc8f5ddc7fd5a0558062393cd260a7578b486d05fec8c8d2173ace8caec3102b1acad6e11aa16158406d848c1c973a31ceb71e499e4f9e2fc3ca76aa15f459f2b908211d8f516124d1818d3bd73d61d560f67b5fd61cc33e97e697d44610b06c58bdf2e75432f2a0d40518501cc4693eac904060caf9b03f74d19903f63d6df7edf3d62d750257f043c30e0d6798517cc2ccca7e3f71a103463b3295403048b90db67a2405b2a8300955f7820907db3854e5a81a7b56625c91d7a8378da075f9767e4f865cd26a11d4a5ed7c663db09cbe02a184fe49a1ef780fe05b9efba1f943fc534b0a59ab01ef980274a5fb7d25feb4e370e137eff7acccdf10300e244a1622597a5779c0ad3906318eb3ded2795bb198037d4e4a5a0a3725c0cd623d2b408578e9c38e33dd14c21e98f0b12a76184539b63ac0c112c26af2d2d5381562ec2b3620e8b9a9cf102111be8cf060436455f8aaa3ef1687219200333d1cd991acdb75183e7fe941584c2bf7122b7622bdc281366c84180f75c4a5a0d4bee0f0ea05e11c421c433877445a071579741872018e4b7743a99ed80b959e0a5909d94e1c3b1b7de832863103f9308e3fcf07039c681e03c83d19b282b402023a7511322e554ad89c39bc41bb0cb567e2fe8b055c978488eab411b4b9cb096889593846a899daa9600206108a8ffd82ae4a81f63e1238204ca1b9924b408b325749f85908b0d41ef4d0a7b912f3ba67c380f2650a65b53f713226a6af44a73e09267738f1bb1033a1e7a1e2afb652133d5730f42a56b4dde38536467e61eaa7803d95530708e6a61bcc1b3d687d2db42073532a1fc17ca4abc610aa0df5ac3adde520015f03b22c0e992c47db4af65624786f6f6240f0205aedf31525ad0d03cd70a20ff1cc996256f7f1c46ccf90de8f90fac8626aca5bece5de0587f2de2f5047423e24492ccb3f93e939d2621a5b619d75ee642ec07eba0a05a8031dd427509788bfe9360e97c5d5daafcd5b9fd0b0bdddbc68d38d63744b97068c851f05125002cf13dd6f78bdb0dbc1b0008dd148f1bc1219552d86d0d5608071c4a9fe3bfce89dd28c80864ddbf357d4bc26b85a8f10b2c4c64b808c3332ab795d050b3a5ec219ace57a2a3ec585cfd436e63a2d8362805ba95baaaacf53eaf830a198498064ac6535cfd54295bed2f882508ea8d59b0749e747a7a77cff7095073f6a1633a180201e27a73f6130abc6a0af0518095d102cdb25aa4921321ca0f48d4bdc7b541334845ab363d4c84258db11a072ae0ef4991ca8fd9d8f20f1719ca07bd7d2933d23881bfb07313b587286170c09e3312a069cf323a28872a60ecd8d4c3b8358527aa202885ea11a7ec289a07054cdc4714ce57ca793055d70fcfdddc6881045bb61c57ff6ac0bb6ea49399576a5a9d085a4a16656133c66f8aa5fb482fb16818bb3ef880f9febee52dde4ca7c6c9a3008c79562fa51823ef9a770caf19f7b11b1ee175dcfb2cf4a17e7b10d999272af870d41f697839cbb4062b4da3dc747a1a997d01d61c2e30ec6d4eb188c50b090df540939530bf8177a90ca0c92c660a3b80947010b0035830e6796241a7c714be3a7e60b23508582b1de0a0591fd8ec775010b901dcc947c700fed5f66881fac12d3b59fe350bb24010363be94280857a18b10b32088e5a3bc2f3492368bde35ecf5b43af20eb429e79c2dc956dbd0c427722afc0ca92009eb83b04ac44d0436eb3814752c502339967b9cd6e23e8f53013b4f8b56f1006b0a4220489fd80d6f14d971c8e903b227de133c196a7ca4d36273fb3c21c8aff0e16f92e08b7c725eb60b55f5bfec79b0978c4675d452d5cfaa9a21270b907c4367176d13008bae68d4d12b8a0ddbce48d0f02a88be7d2bf66b59b295088dfeb782965112e901643bab6438833e9bfcccc72abda99b967d7fab583a932ae178dad5c3b311ad4ea895fb6f05aaa7e32155e5ea4611df1c5455f96afacee9cb77f2f87ab7c823ccf02491b25561854aa7645a2c274d7446fc42543fbd32db5cdbce35f0074eba3eb552b3079c6d975ac652cfdb37ce1d471ab9c0f0bc201711dd18cc21e289e76e364fe89ef48519d51703fa8e39d9fac6875e3391830a2ae305151c98c92d48e6be77a1ffc00beaeb057d9adad6e08df3c60478d1f11cbfd4a94c275f8999f9f5cd78b19e52dafb16bf5fba9340c2c2e624289fa96005846116a3b4d4f79fc6937165a14d156def79cfaa46b16db1166c4d270c89958158ac2ceca9e925ca9318fcbb4b806d33a75e3731d5734518efc643cae73efa4536f9389089b3e2f54c65cf14fa04e31b51f420dd9530b9c9f234af197d3ab5b0f786852c33021ff168d80cdbb8d81d4551482e689c1cfa915dc6c1b81e36adbbc5288ce046d9a5a30adca64be5c242b2603a25446b95b7d9680e9fd28d25484c34e2493e9a89e2516305d47b3a1acb1cf5bea8161164750086d31434ee482d615020f2947a7b54be838476ab1b71e5eb609d660a41a20b0c07e306fe5bda1e9fbca84a19bf130962f51047c0d81c9003fbf42eae5f969ea0cbb0904e71cdd57e9f2c0c2746cc32e22a2e0345ba135af77c6bcf8a40c9986445fe82397eeb5380d215788158fcbc3713cbe943d8e54f4419190866bf350d93dad66777749bdcc85797d11c2dd8314300d27a4f92c67ba7a5d973b0ab82af95b3ded9557e52e7c5f8f98cb82bdc834a2ee529840c81f23ebfc64b8d7cb01d9ed95c521bb6ad956c513ef88303c9cff4bdcd0b5cd5d9d1eb0957962be26a0ed562acca869eb19ec3a6e800c16036301377d55452e758abe76201031e9ede9d7d904e5d78c34bb5a4108617dc76a76cdc5495bd921669c69a6be966191db3c71cfc108f1d90394e7a485d53c08f2306c6ea4ae6739770414425989d297fe44f00bfd622a26e523f0823f82af5aeb179bb494c757f3ada6aad3d5468dfbf83457b15ced0b5a7b723dc94af2e20ebc3437f0a5190d4b71b289a7bfb473a06bd7fd708e6d53484df3184c213f7505b11cf0c490e1533ef0828fc4359115149f9dc7373b2bba227c129060f4987e0ea14a8154e15d5f4af6604e12e44566f8bdfa0ed8a305e80c6293f0a13dd8b0c1bd3d8c00198032a81089a549a01fcd493391397359c30d1a2bd4bcf52efa36a2a2865177c7eccc064f86fdc5ce2c868578e33e410ebbc8b7702211e396605d903ddc6c4a108f2902fb137334c614a419bc03738aedb1b874a5d0b11a9dbe1453ac5271101ad68286b1d84d9f436ef00736216583725cb8a25d8858ee67cc594c2b5960b24096a2fb0ffcd9872d3910a261bbe6a12f42fa276608512571189a52d0ce63a7eaa7ff50a8d5b1ec21f87400b233ec807cedecd4e650026b9145f7bcd03980f6788da23ba829050d7314715aea0d387fe6b1288431dfd0161b8b32de3d60102bac01920bb86cbca0c81a1103c7ccdd33d0b6e943f5db51a2f611df7e0a167ad910c333e0fa00874d95e13b51a70b63e863ab2d5adf543d6c9ed5ee34c59a8fb291c46182676458733f8b84dba5c4650eeb69b18fe1d3d782c58425aea6bedfbe183eb08edc6620ca9fbeed7bf015b6ec07541d449bbe07a66345529909f3ed37ce70b256ed819b9f56db1b0ab45e82acc5eb42d071981c4596db5996a21ea2af0b5b5bd1153c7d615427e32ecd33a989bcc91e414da8b8026498696dd2ae36a0ead5e4a7316818a46355d62ba512696e5f6a78c8493d4021e71d4b5095a05b05abad64eef2b645e5608cb2427ba02eb9b13bfd815ef441bf247313cdea5ad6ffe2a3e65e9ff585d3693a59b4a0222e0902f8f4468bdbf0b7900eed03c73411c62e0611f7722934580c8a729e9ef1cc261f3cc89e09bd46552748e20119a4a40652d95865fbdae6ae7412f3546645678c7112ccef02d2e2842e0409c63ed45daf27b4f2be9798359fa1fd3c9e5821585703c035da8e99bebdfb09fffc21aea7fe21e17985bd966fd7f4f44178f08f5a926720ebb544ff365583c6b92ddf1987fc9cafe5c3531192f9dcd601dd88b83456f80637618f830d979ae285df2b4f482ebb006d403ba4de1e6ed4347cb221f0cac2fc9ab1ebe0f4d3cb6d456acd021ab611bce7fe8f69285f0fa0714b174e5a07665cb1c86c4ca93977d3d85ebd730902043309d717f520e627ddcda0955d092fb25cf0129c44f7b9aa96393ae3a782be4eb2195c02d07047f9a0a5fcc40e663e610d8c95267d4b96c13bdf2f71b9dd967b58edaa584a2895ecb2fea154264732971ad5b0a2d4994955f6d2129b34433035c047fa9fb9c0878dc7ec193a006ec2fce9e5364777696cf5aaaf9c6bf392cfb2765381dc8a37ef3e7859f7208b89a472e44294874d842fe78064e27c4b56d3c68e9249826db6519417e5d12c5bc07e04f1dd6117bfa111b8c11049a190419469bd4e442cefa0249c3393f8f25d137e73cfc9d08effa1463da5b7def2db5815e0db922cf5eeabd97b942ab917cf1e0c69c4fb049ff24fcb45753ea604fe071e8aaac428e86d9ce54e2c67fab976d76c34391c316b983963c29945326bcfbc5f9599a8df93ba39047be5f123eb2af6dd1501233ee2b638e04240dbf4d035b4d5c5af4dfd2788b2099e92fff220a3eb0bd062acbd655e883d9f0c27fb5843965724c0c9890e58aed2c09e9ca8fb88c452bf858b8d1fd33a308d174a91d1590fa0d574cf6111c3c08903703120fb46d213b81e4e9240a42a926513ee436f95600b8375cb5e173b889d356e76cbebb04c8bfe7b04524363a5c24b973b8b4dbb2aaf8229e41ccf9829b75a0e155b3e6fcf01cdffe88b37485f6e8eb18cb436751d648ce3d2390c4eb341f9f2eeb8c6f67c3255c3df94979e249a6f105f11a8c1d318bfe5cd09bba00afccd13e8fff8196f4f551925d9aede8341615a4d5840ec82e46bf41c323e123a505788ba0fd7882dd19a1268552fb013c033722dee4dace68ebeb687846f5ba7a3f093e2d9259278dd0f7d465967c20bcb2c02328767a9857d77b5c42c3b2eb111ee544a8d504bbc8ef28756214684fa4077ba6c97234260d5f70c80c5364a9e9911025bf971ff4a5a6bbc23ffa12bd2773d669235088dd0d507ebe42e50082395edeea6835b47281dd2b3d92e3ffefc2a54ea71b1716dcf288dd0555532b136c5ef8e3c00c53e99766493ede8bdb652a13042f3055c706e67115a6a886a4def88b2c685aac55e4ace8a909be6f446d222e47a474b7c5aa3a29ca7a74748af80c5828d29210f79413efe70debd31cbe4ed39af6f8122b4055ad02db3fdf5c783dc552f8322813edb8b8a60294672380b470102987e12d50bc7623be5f31b3cc1e6b8d345ab81a4bd3b511a129c41bf3372f9d10821430995b9a09bf05c397896117f9ebd038223f49d45895c904167cc3fbe22071b67e11dffaf55fad73d83a220a2aae23da55415e51f26bc8c5b20e78def904a25527227f83b4a7ba7fe867844af4b64fdc2e927da272c014cfeb00f7e1afb50aee76aea6522495d9feb338a65f7ce5304dd843d291d71fc14e48195ec0e839087a37f125dbdd72a27fcddfac51b2105f1854e14f058544ec72abae697ddbf2d5cada4f1e06e2d48aca78147c8f8e3fcfae824ceef50697f58da1771957f700834a79a56957482b9d1770065bf961a0f708b63d6e56c30d63d1db5ccfbb47c32bbb3697c423bd21359291ffc0b0f1b2cfe7718e7f82a1b4b896343c9e8152eddece58db3579180c2baa8a0f3ea7ede6286ce235a08ca4fc28ad9ac9b51f4e8f25a1a4d6681980e8e817a59b81048299a5e7606b9db489a302e1daf257631cff427faebe9d55d72f3532267c2f91693e9b8c1126019421f7033c468e2ed0bea0a15b0e0d3ce6f416eff406a326f94401da66cf84f9eede67778c41d596533ed8efb0a9912c6d98d33445de449b451d9b85bbf30b24a4b62ff428b57d3dc7bdb0e0c65e6b1fd87f1106485c6da62dcbb131071e90b08952872067ed2359c3f2362b21b154b8678504443871af6bc39bf179c3b15b64f46a3572d41edd9cf8e1215dada5945b9422e6d88b61b6414520d9d2dd56ab0d7916f041fdc4b46f918032eca0047bf034baa0fcba1ea5d7ff1f132ace0d11318dd2244daec3115816f282a5053fefae59d707348e86653d1acf4f988cbe3e0b5cc8ab04d70e6049c8c3e5053d9dabc849a1a4670e90deea7ae6db0ec53db367d28b560f57763fa002e990d0a23fe3b874c9634c7ba279336d5a2a1bcb3dc45eadc28a49012acdc95147450c65d13ab899f60bcf256dff206921371d45aa07bd1cc487b8d2e08b0591466325da05589b3be2a3785b9ca81a22b7699407ec3f49ae6c47ef2cabae1d0fa9158e0678aa68da8715bd0aa3603003410da8647b281e73c70f1046e90248150a541dc7facf9cc63db87742ef2a6ac9f97787eef8f5989cbd4f9749bccc226976e59a85bd0f8a44972e6a4aea9ba6ed4f2486876c089cade89c6af9a0600368769a2c380182faebd2f4367a0eea4f6cb2d0cf04b77abc9ba3e2d1010a73ed320c8f3d1c599d6e6da06dd01b9b368cc496e7f4dd58b99849a4938d719f48979a3836cc5dd28fd29da4c11c06b6b51d8a296bfa0482a6c51f5c1b0541a4ae7ab4e9360fd270956d9eed552d49d0fb5464227489ed1faaeefe9d3c6f4a53d21389ecaa572b506bb5ce7953de159827f0f8d34a47b76899fb00be91a23611b1b7421180a6c15e252d9717430356b839eb65abd6e2587c1efa71d0b3076ee1c19ab0044598358a5b1861921b7d62761afb877e87c4e21fd0eaf2a75d907e165e2edb529b0678fbc114a6c6e711b74fc6610ea416afaaa2104d9f16b096d7c981a606158f9b402d6f3f76f26fc45b0212dcfde94ce3ad1755ee7afa2a204909a3c516645fe9e3f343c8e99f25251e930eeeb43729b0b4f5f5a3576306a5d3e849fa23eb4674bb4b3cf3c490d98dbbd6bccde6b05f8fabb7366478a20f1edbead106658b0b7ba8065a56980ed7d743c20e1bb934c8b63db941baab1eea21960a78a461197ad609d3e0bad918211a822127a217927c59ae2bd5ffc4211c2b0f485636a8622b2e63ee5bd110f8676964abbd8fc9584f5cda5fec253c9d7d3b144a54ab7aa532e98bc74bd46ef5224c07870a9a197538af798f842e6d6d449642907c2876a61c1a243f619f7c952ce37400cfa07606bbe8538b79f1e1465ce9e5c3f453007c40741d0025ac10041e9885e0907889ec48c69c591e16192a72907457427e90e59d4666f8e8d88458a05554884b01ed0866c299d9ed543f291da262ef9d060b57bf451413cb93b2587ebc1b740a4e39258ea6ec44c9c9272a8b7f401800b33f87c2dcbaee13e26be6de7a094d18e4abdb1965afd4cec1144bba08ec413490113e248291ae559eb1a38d40e25c58510826d9ea246f94c5be6d780e9bfb889964a11d825a9ebde8ec9743c98a4aa09ad2581c6c19ae167bcb3a64dcf167e734c047a54a52179730e3199ea488f10887bbbbdfea1350a5443ab3b63655e204946d97bf809bd515e43a276a019343bad1135bc43861726fb9bc5f3e88a49bd56dae792baa2370791d055505f18206a91b7b01c058444a246f9b69287d27ac3848bb00cb09b4fa304c3a05f6b5c95ab82f4f772b5110f3c6ff257dac8eeefb822da98173f928a8f9911ff2b5df1c05cd8b9b3c7ea92e95d888878c71e4383672150a3e02f4eee0b0fa92be25772c9c3d995ce1a3122c7b444757077a1c21ed6477de604ce594a333e09a1b81490107f806d034ecb80e7a574ef3d074948b3e3097a014a28b814b8aa39e0a26c3691b265061a4425811c7cd8ad8d9892d9cb72a72b9cadaa4c76509a8af5e7d988d79bf9e59a6095940fabb43b2bd9fb5585980a2ec9bfd49cad9c43c2c730358d31a556a652678285a6c786bfa6a4e850b7d37383073101fbc4862b972f7d4381b573c528c827c15bb814f44fe20a5482d6d2045520ddfa72e3e9c942b79b55ec9c4f718907368a6de26b90b39eeae22173cd4588f61b5ad3db7df955a4078f1b2e63a63be4ea556188a4bce84a770d89259a06f46b48c92f0ce06d4fd9201145b4e16b84481d4e8b05d5ea74d1a27cd22facbb1193e7260e0875b01d85793250a8297376fc7c3e4b4c6f832f0c47944838f38a2f51f213e30b58ced445991670598b2a31b42d7747625d3473b39e02dd101164e879b123dc61012283bc9c99ce30a719d36a0bab79b99b7aea6072e74feb045fbd713ecb509018263d73ce68e382e99bfdd8544abdc3b47b08664f8430aeda0b9561796f53e0d60cc3ec953f3b4c51b3f8a21cd33306807cfdeb7e91b82a49899d08a7adf76bb5995ee99b5b2c3f5ed9f726028fd845a3754b6a6637da3435eaaa37a64117bcf58df679092e420a7983e9ef1c3626bea3253e5114f0218eb0277e4cbcb31f46a7d290449003944865087fd29455af2e95bb6c2c7447cb73e3310878d7f528b504eb9997755b98d9c389f36bdf53d89e6b9475155bf4bf4ab80c756dbb9601046b21815bc46efa1835d0c107bacedf7046b98846e514cb67f255ff1d6fb7ff64dc415165048f5416532a55461f843c7a761e808a13624fa8b0350f2f40e9f5473c4089d7812269dcfdc942b73d1121cef7e13b163996697c5ebb2d88e792d008bc065c56da2918474b2566dab66acafba4cb05cc20524f84b59bed7aa0cdeb84fe03e4a3466732af067cf2f4d5b8512fd63849b015bd49c9c47e51f95da3606db3e5c339660a4af72ce7a1cb485be853b8e737adbf2f858c85ed0ae50a306a36466a161b935faef8860b915425fdb66f3b6daede50827a04618347f39f3bc37c78d366dda0313710a630af0bcb25adbd999807be1485377c88a278ee81145f6edf3ccd459775c74044dd33609d8e89eb36d4cbd0c72260e74c593f4dd4444a4304eb492a9da67c0f13fa53c250df4470005e2b80c2418f390580431bd8d8ffe8bd9eb16288bd35d3250d0592bb08dad4c06263cb5d501fc0b53b0fb7b55231c3dec32e7342c8d96e6d5c4db688b3e4b1f52505e1e2f4c055fa04d12e85a9ed4d4dd205e0302846bfbcf727f1b73903b338831f1166a0eb59b9f59c0cf1752a9d3e29254b8f6dc33685904a07b8d85c0050df280e832a270fde410d7eb5cc022c20b95b66ee1f40798a46d1e1ae9034b7a916e7166c8dc8155dc011eee49d88cd753082bf7ac9ae78e643dc3de3eb78805dfc6e010e7d2cf25f7619e7040e4d1aa5b3063ebabb3fce13d1913aa198ff441b5561e1138bfbaf1ef1df3696be173c28ba89c7761ca5841f1d416f151a99186e4bcbed7e03da890a5381cd07af894a6c26f5cac921d564e9ce055486011d295e5086ff251d1b4378d9a62966ab630c39c7cf8aea727e60ab007a0aaa4e222c4edde2841a031aa082d405f75f225d33e5e2d16cc5144aed091129eae29d487c78de76d1cd8c696dfe487e09df9e6ee020c8713f5948998086c0992af662f4e8fb019c51e6cef23810f64442c1e78f4e6eb90b32fc168ba8f8c00ab7ee68ffada8741dc0b7121b28be9d18b69b18a2e7fd67e3e2fb6bf6e92163a0fc4b09f6c52f4701ab81c4fd6fa20e86fb24379901fa45857f99c539f795aa106cdda4fe01dd0d5a198f1156ad649dd0b70d13a0be2f0dbb1e696494103cc4970950b209c766e3d3dc6e170a9fba7e7954ea5710558346d3f984c7462241c7c6f558adfdfc0adad01cc34f7956c6aa04fba103aca5df9fb18fe0b880c79928b51e04382d602676973a6579d2cfcc235eea894590f6a2da97ab8441432facf6f0f7fa7db858a1a3debec0458d157925da9df9b44ed8598f92846c41b28eb387dc1a8873265e794897ff98262c5fabfe0f74448ed4ae84ea6a9f031e1fd2651b683cfd5e9e555fbffda4d93fcc1a25feb75ea637fcd900bc99026fe32d1bbf289cf570c199144899de4f2830eda5f021e014495c03155e80dd9b1be0ca4cfd12062634a0b6f662d8509d660dabb71a477db3eb9d553830c8a2e0f3e1e2e7e03520ddeaf3610a78f30f63eecac7904a4cc37c9d498cb7b9bb6b9a23d116d74de5c0881d08d1f9c833ac85b57e9fdcce8f5222b321063b37cd59d5fa57d564a84d4b127d460c02c8d42bf3c203539b8ca6dc6d8e37ecc6ff1060c90e811e50e1ef9f76c57482fdc4cbf89e9e19cddcbe8665f949c7f7a1e4233046f5fa109e11cea3ec29a579631531d7fa3bc7149626144778b0699f45b7645188c71f5f6a1611b2e5f1a92c070609e387987000d606b2a1933f5ac4352570c43be6f28043db3e16bb9b18c427192ad31e1b0479cfc76ebfe3f1cf6a33d1a24e7190f691a705f05509c2e3ebca00a2776a68b7ac2805c2538d8064d822f0c099561ebfc617c6c1e0d679442c9b181bbff7024f20e4fbc3b865e87f7f6c3d73ba48147aeb88398a7237052823a9e63be4e9f28bc8f3a7456784ee683899dccb04328dff08d2a236075c2850b7a410c120aa210537ed51e8efda2e020515ad1ef0b7c128e4b04b1c0bd314fd57240c10da87cc6201bccfe6c23c55a548a4f73f56d6898dea2101afeb3ac15ab7040a89ef61079304f89357089f430aa347e3c2c24652be4487db87741846a54cb23e9bf4e356d14136825c36f12631708f6b2d6b452ff555b700cdc53cda66ed68a04f6931f4346a41221b8630a60d16e75bd1bc1a68a65f44531f72bb7aa2efe80a18a023ac518716337ef725dca70a2db7d12b1596cbd12498ebf83fb6734f82ea594bb3758825913c1211d5bbd487986f8c29355e11e616551f6c62a5d20e42096250188998f0ed8fa070f204190a3a8fe281ec581d401cf88dd268fd1214eaf78905d3042ae52a3fa1fba2d833bd4bb718d2588bcfa6bf20a310b424dccf773f1521f1c2570b7842b5599c0be2060a3d8002f04fe89a859f7726e176b983393c309a10af3d16c47f89c8c67df8e0832923c5fc09b4a16c26ba5acaae20d6779d02c45293d7a812844b350c3ae066c7c3d284afe05f8e871fd93e13c598bd01e7af3682bef79e496e782a703b57e9664b22930cc48bc1a8a768c88822589350729f71e0d4799547f0fce0af195d856d2964e4a1075f237d797ba2178bf5f1f86d3893215b3051d47d91c811476070ea102ed537201a40638ce482bcd1fd08d68bdf5430611f4dbf60235f5b57d2f1d56ebc21b86af6e1b6c1d0ae56cae66d0e9fe32408381e68056ea6b61c09978f498bf7e3125201037a9aaf2cde8135954d09d0f5d8e0208c3c2f75e53580c6b52d57c8d9390aa1eb93341093ff268fe239d595b92a395ec412bf5d1d80b84a61f846b63ad0d8a25acc81fb4258916a7e6b50f1f9e7957d80afe74b0b32f5106a4ec9bfc94b1cd1ca4d095ed23f79133734ded25d04f91910fdbe0f2961d7a9d1b42851a4501bb4541febbea9de7996d9b1e54fce6d387dc5ebac84d96d032a09dded12c1c71f5ffc1e30926ffd27edb91c5c67123b7b6c62a19cce82aaa96b3c1c4477f33a55ff87406a23f6b8990367d0971da87de64bdddb541b5c167cac4cc6aa2266099b5d9f0f5d2037b2c3c3475e2d36431392f945c68cbd8d365589c1da2ff19082f975cfe249a726970f4406ca53f316a1fc34ccb88f020e1da2494de03df66f7f15672af1d63cff0d36e4e8cf3becb9df14a2b260fd7cd5b0d6f368854db0eea380f81b57d2977f891fcc1f495767f95c17b23335eaab50fedc756ebe1770cf2669ebe490acdb9224eba24294dfc5a7680eb0842419846a6a8531558f2f36cb000d7d86b4f7a429cbb02b56c567fc949a8a5b49a9f4c2a0dc9294c77549f612b47880190e972a21145a1753b4cb423966cc28fa70f95fb249e41f2239d3b0dc2b90f951fbf1c0bc41d2286983bc5db6ee92d56a09ff042ee368a61890d0e5291adcdb0737ac641cb99ba88b120aa2b0d1751fdf191e4b0127b43aa5f16e09e41c9d5954511475728a230cd8e63d24f51b7127362656dbf8ff2bcaf2ae66f4b0b5d5f62613dbbd5b083f011e0abe23b2e0cb3e82ab47579faa3b7f3f37ef3d87f54f4fec4881613d37ea4710b3092070e7e078ca8f02d1da3bb692a66db3610b6d00f4caf15b7c867342ff277de2d38f4951b180e0ae6d62d5188933b4a564c4b76efe604bd91a363077ca5637e1e1971c4550b33025cedd15f10261132231507b969571d505a93ec0743b3d5bdf00b38caa1f31cbe1567bc269e6b9a8290d1d5a8260b8a43f73bba07246f1bc75d588fe1245ffadfa6e9eed11a582711cb8d739bc582522a8705d6d0a4fdd324ce6f520901c8faff339ee27b21050f324afb28a03060f8a126d80186882cb27ef74c77b910778a2f54c7a9ed2a579a84c00aded7a21255de1e5aaf4cfad2b42241b94b48184afaf0dd65d039ae05294d513c5f2ae3650af93805e01e63e6722c9b95c54f9ee86ba8fa9655374bf939a28024f904b5f73db948afc61d16b80b0136b518379617b73fe919c935e9a93604440ec3341a280bddff36e7e97c7a911b259029033df0be921750307150cda46c119b383c61e34aa8a4c19470729b87f254dd35cdd0e671076f820987ad91cad3ca0e1ac979f4549916624d4bd77fb6966f2b991a2a1b994dd15c23ff580a13025588599f117ce4e8634c8994ae1f2d5bbcd976c64685f898ed24ab71e80fb264bc234e2581bef17afab4d6d4cf981fcdbf9487610ee1f646ea6de35f48f2e94fc21ca883d3dc9e5bced7df730edf6f7bc208887ab5e89330d732ca0b6ded3e798a2728c047e05f0f38de2b7b68b21ff2d2278a4577ff81abb3cb26b1c41b0acc5622c7ed67fdb5d0efdf38c7519cdaa6e0a6b97a2025ffbe05904052401cfb9230e549e1a376231eee4cfa0f682222a9c3449eb8b1d8ac878499d5fff26f243c5bd078f362677d831d96f109b92284b663a67ecee1900fbc201dcf0323a7043448d1962709aed73c3522157ba6004dae7aee81143bb8a5e4d7ebc08aaf69be63ebceb95a5688457ac186bef3c849b3a469ad83c91feae8507564c108370844f09bb4474b52bc49ccb3ea9e1a43b21a660440062287c9d088655c30c413f4b4efe04fefea25bd907eb9d48be9fda188f9af0b144f7cf418d4bd6f500dbfd211ec9c7e5865ba1013315c5895248bb2b5dad58c1fa52b77acdfa13bcc69e1faacce883566f52ad97dfa8a45c5135553791c38c21a4eaea4a5f4de4dd2622df22e61e0f14e43616f30ebaa67b2e897c88200f5eef613f540412a4f41d71f0a826ba05c1e5079e6f2967d80b7e9aed52c3d2f0b2932623b2f21d09e59c2ca9970cb03c3d8a92457c0162f192e072712a394261808ef07ddb157fc21a70f86f632ef5407fcf570e786f76f0d73a367968fffa0a8425332d5b0e9f6ad74f2cb7e54e68b658ed1f470c61c4a57ff229f0668492d97bda1cd9a21e1b7870b91edf5a80e6726c4fa3a3390f5b430b3f75062dc7968bf717bc52e0fb5b35f649d7074b8a9128b61fe6a68bc89cce43b33024920d4e0bd3b89942554fe55c924bb574187dc17025552d8fab6b3ab07a3216fb20e827ec94a3f67c7c6dde788fb19000dde510c75bb0221bfdec519639705d54238a2e76178df25a7fd6d13379b4ca0ccc28b83e8e594339bc479475370cbec70bb8f0f5b32ead868a79e94720720f5ee2a562cd9af08146cb33efcb04a2cea1a1787511deef7662ad98d4bde76660e1e791bdfd143fb1c60bb2c1256f01b1ee6855b675750c3714dbeb3c69c82f674c79d6216d1c0411e6fd5c2890c8e6b04006b625c1ba90ae49b7b69258ebc3f080afa5925e4a8d8640515e0b08679900b34c531616a914d9314d8b116a7b9596f84f6d5987855259c8fd09e0168616937093ddac1c031643e566381cbb25539fd28cc42325b2e5f79acb3e52f7c7f0f00c6383ef4419ed7645480d8c6ba410125af392c1d9a829cb1e7baf6b01c731ac54d1816d01385959d44da2a6c6820278c290612696d2093173390ef1536440be60025ad86e8e1fb7a41c9977ac7af02780775bfddd290ff3c125f77bb53c19de964c59503397f691264e0e5218e17cf1832ebfe638b9031621227eb8c5bb534ab400f29398746723ae13fb6fa12164209203d00cc23eef2b723368206120eff9550df68f406f0f0df7fa607320540f421121a3350bc9e70ea44d683cb8f3970dd3628c17417f43c29670087e88ec286204abae21aa5d548146f8ed10dd70c24588285193ec61373c7aeafb6b0be97540c2c2f8d48b92642e9e414c811405a027182e0c24eb119e252facec215c0f45bf6ed0a6228324a05a81d34630b564c787028027a3947cc8a0fa19831a0fd219ec36f1998761e6c7d05f4316c36d9f14f70c61253a5a4359b4f40dcee4bbe11ce5fe6592ec46015756a17f1d0994d69ff5100a4a34692c2da7acd511974d80b7a6d043fb0e121983882ac0520fe5597a9f6755f13243caba0f6ae6e1841c2cc230e3c739e4bddbc9d191ecaef17d8ec317d708db0c0928e66f3b10d14b901ee9961574445689ca6159095edaaafcc4d31521f42d78a986632f18ba6b091bcba94388bd9d4f3176c0d786d3e347ca28e8d56d22b48f07baa7e32836ed4d16030e900f5225134fa57a611dcdec20887ea71649257bc9a1b0861ab781cdab9b9e8b8e08e5b2df473a4db444b613e8dd8804bcab8d8587083e8ec43a469d476a29d91ebdcc5c551a77d634268db4a426974099d4b44486ec63d56b8ff4464dca281dedfd1f436201aa940dd858ca4bec00ba50b0e10de7a8fb78b800141d144b13e16ffa966e19c28596d83a68ca65eaf4534c6e3ce5be425f976e64e20befa56274de56dc4b7efc74dc28e8753ef8747a2bb3aed56bfd96e3d32e64e200e6011c7ff420b8ac821288249f6b119ea1dc3ce55e854ec76f343a6e785327a7540591e4e32ac4332c6e9f72bf8a5e07371aadd971a74e46a90a44cac7d588cf10374fb94f41afe30683dcabeb56412fca8bdfa7dc57e8e9f80d4c58f47e2656d70d85f42a1c1488506a1b71df816293a4c2b0d9f81cebcbf7fbf3eeb02de7952633ff2d5ed1228e2718c1d52225effbda191137597cfc676a624dd9c05629179b9f576a937c990fe1782323e57c37ef8d1bbcea9e5fc25bba4aa154b10b1e4f8a38d4a8619351bc38eb53632e1544a4a17ca45618d40aff1e422c83476acb8b42db7aeb07d961a9794fa9375df1a9bb6729572f25be32eb0e1473c0067d3cf522caf6cb337bf0a7667208b01d2c0172d8926beda9b979278826800616bd56a12fb622f508e848b876526040cc1afdb4d0d26bf7e3b62b000b07bed7c32057a06651ab8f18ac108a983ba1533f422a5d930c1bf9843299b16d5f6cf5d1028aef2c7b10077f3282198ecafa584371a7db1d361c18e1fb4cd4b3049fc6c2540104f1448e0136c88fe5d252eb11a0059c60a4fdbac87a37d80ff81dc95e613e03220f10cf9a6b3eae21e14af4245ed8aea58c61fded4052a741c9c27c73831713530ab8cf4480761c5508540f39877610166d3de026924261758507734e0890b611a4c32932f577a2d3a1dc80d2b860defde55c2f197bb874c2db09cfdddbe25093e2a917a1d4f7a3ce44a9b3360b66fa9385a056054394a24ed48ace62d04fa7f00affee00d70619fd0da3beaa8d89147764b7d63dc55e7486ddc067b136a8279b6cfc07a2752abaaa61b17aa04e36b5025da6b6ce6ccfbbcae52da028cfd64f94f02efea4d41b2fc62d4c85e164a2c7163b931d4d681830df293958a7a2608a02a060f679129ce283c3762e06c9f0096a685b656ac0a77960f26d3f7502b0705cd5ad75cef8a258a7d1c8a1925a67ea00c90cc32dca382ba262293553a523d50f13418d8641c5b64d6728a5f196516c76adc11dd47619bd0a6bd7a7002d57a549e6de7a241758fd1515cdf02bcb4609fb4dcc8d3e10570ba13f0a330599577eca4595690c56bfcfa9f9ae77edaa38cb07bc51fed21c337be35c717b0ae4bfe16274dd504cafc2c7072324fef7b89d7c0cf337779901140e2dad6eede21262b025b0828e33e0b28ab2148b63f02d238a72f614f1ef5f2530d35af08f1db68f0cb806290bd902f68f9bf45498a2f82508041a774af548ea042ad14b2bbf924e86f79df9a43a4ee4cfcb15e51b886ec0e757b1323580b7810a01007ca56dec7aa440aa2d1b801b5142cbe48afd8f425030eff8e13ac2f98efa97629a571a0065e59390836f6cc28c8a7600667b68d9d0973f4ea401c2fb5a0bbe342d2b23c270d95f6fbc0ccdc05bc45c23ba3f8a5840db18e4393531f3c9fb886884787601b369a74c8cf686132ca610da0b786f19858b84dd83cb9b7c300c1b0c6b3582d10b9e9697ae8976c54605cd3086a1f03bb91f45f1f99856f06555b170e4fd68ac7ee53f369619be58a6e23ad993336351e722af9c044cdd88c6e575d1a6cd1a5c88f487010de5e5a412e9796232c06d21d58a0292cc56f912a9917a13d2514825939afcde69065644fb0853a00e26bb6312241b14945eccfff67bd630e130e8febaddc1acffeb9b370efedd86aa18afa6d1b876333a74d3734f934c22ccf84976cdaa7d965de5869d6131795be7a65d88f1f178bbb86430717a4790f72f5743824b71bd50dc4820cda44e8518034d691a756c57dcadbd3c969154b879f173a85fd66e500025fe982e22be2ef0f61bac1ba25511889598a04d4b402e4423c789f9ecf0703814618bb6c07405ba912d4ba5522109b67c3efb051c5b133ec9014eb622e2b743ef2370096b01c9aade98bd70213ba3492ab6ee1b45f64a9867c1d2641acb7dc9069053c6e93f591243606834d1aff81d6d739776c1c1c8d2fefc38db3b42fed808428a250d36b0870543bce5673f183da0829cf02110d1617711d7e3b4c242b765d882eb693ee911881c4a8c18f10d47dba52108052960b0ad00fcab21cd24f06c9e9bf1a2652e3ab2a4b6760bf744c9d2098b6c9b7bf04d6625ee65d9d71b293edb4ec77c1f74342f3cc3b515a65f84a5f9bc48e1475ea0396bd01f305d5b1723989600c54c1a42ee330472c97e171194fa98db7954a6865a32a20cbddb088a627022d677a62ff3f3c0fa7fa89ad99a4ef5945564b7181730996d08d0d402bc7469d1b7685ee49a1f34de69f608108b83a000c50824f2348656bb492158c240b5792fdb875ead41f1f092ea7a9158a3989f0ee44e59a1db9d79af69c6bc19223347d25680106eef26582b56c846d8560922eca7717b2699c6b1abfc53b79762bdf2c157e70d05f6225c95905d0c7705304434d5c8cb3e56102ef8b7b1e6f7eba6a36059886c6d7edd920fa401c21d610c1836cdef9b0440e1b86475fa6ef6d6b4c0e49c607cba44fbff4e89a98a6df6a42394c33e8ade0dab1adcc68f47f3065a70de40deec5f4f99dee3e39d51e79c98bafa25121f67845055c29c53efe491a68a686e0ee89ca839db877fde106fe8c179e82d93fc379469242a0ae29c8c329da4093354d101965b50cc79010ca723faa8a347815ef2c1a77353917a15662a3895ccfbe6679d18aea0ab8bb5d382b94780fcac3db9c5848d9adbb6ef9cfbd0a14f2b0dd15c4f62bb67ca9beef1a53a357eb89a924e7d6338634c21f08c243201072a358f90c0e393b189e48293a801286d0572ea520b719d2715b48b45140270fc4fcfd1f11a3d5836174c1df2f70ba9628d31a9265972a1d4c40fd683c6009a1601de5f806af7b6dff54e031c6f0f4ea958b154ff05d0c866ac056a0aca6aea5a13fee2fdfa978872ac050b299657dfb3002d55440d841e189d12414486081055d37c5be2e6030ddbdd211461dd35235d43900d42509af93ed642b2117af7e05ec6b288110161ac56d1cc96d9098796c1510a537ebdb391a2676eee6fd4a50223cfab72ddf3a93497e103311b10443395661f497ba9f262303f88976718c7cf21f80ae6ed51783f0660037ca834893cde84b3dc99cd20ec058b250f5a1672d381207c49204afa3c2830c83f6865379c3fc739e0e3c6f8438d26c8187fc848024f94a92b0c7105fa0a764bf59e1bb9cb80275fe18160de5f8b062d365ecd78245b0b6565a9ee8824a2f290abbb9a64caa103c33a4197fcae1b257aaf50552724e2bfb008f1ade3fb93127ba4533fd53c6328998bf31bbd60461d1199b04669731445b29744976bc90a4c270fbbc5b789a4829bda59ec04147804a0fe5fbe2cf1ae1b82d9ee798fdd468f30c52c64fea367976230d74fc0a0746b45751e1ad0f3c167e3d152098d35280a72d00228a581606ef0ca2b05998a0dd109d7c0c253e2ee2d04e80541fe0e68ad79422032a2ef187cd80cd3b748d2ffd1e11ff53f316a3e074dd1c5ccf1f3e6c0208939c2ddaec7e738a110c17fa8ffa062a1f0c6078215dab9e74a66593b8648784a4c8d1620fd5a40913122152b8370bfefa93dfb03fd008fab644835abce8a2c522d25eb5e88a5ae66ae7a64f2d3a3f3e5b7fa42a68cfc16b3172e0fc7185b2bf8d9f713b6bb46a8c15b9a1d23f456f9f02624b5b1bd17633508e93d6a5f012523053049060144838962c461f07169d5388ea900eddf91dac2b46dc822cfe3122ac1f5ba44efa76f3b5324468f7031b0e36e40eab611acf93e3f4102d662b3382cb7b69edd890c6d184dab2b290ae3656b5fb95118f34d9d31b2f29f376993b4b3c3d8924999c558ac4f9eb72301aa5e7492753be66935f7c7ea6a2978c01aa1cd15922267d00b39f1c2b6b0c86016c1472981ac082cfbc60cf23d03118ec694dd3308ef00eacae7da6bd329f01ba18017612616143e1fc6ae57320a0ec39ea3094336f249927a05ed0887258c065e4eaf2c05700b0fe37cd068c7b1c320ef98454bf30083822147d9d2a7d903019ca2b1dc51eb11185017ebe10730ed91d42c94a79a6a2f1aae00b215b36ee7d5ff154e8ab55b0ae5af2597d440e67f16f9c534e92a7025ec985802f20587d13a1a880c05ef200175f22ab2b2da96758d757ef8066b7caa91ebdde630a02ea9f7a6c14bb06700283e655b70d81e81e0b009e8e11c1bd79895c6c348b3aaa9df4320ea525324cccb1574c7a837d069c5181b86f739c35bcb506052d380f879023ce01dd1fc0ed0106739aacc2638d1e29ac74af856339f2363256966b273e4399846c791ecc24110b45b12467be58e386f2a658db8b37075be1e8578c811c6407a94cc59ccc545ba7c53a092910ad8d9086e396a48c29d87799e10763273b4c9210933531749ff02313bcc918ddc255299d097a1350a035dc83ddbc520ae6f2fa90293a32659292253305340c7b928f5c5886e52a17f505e9d4a1b9db45a015ae87b5d7ca9f7a4175660f308322527d62b0c425c883482edcd57a34e6ecf07d270b7528ea54d3a57c473e363f8908f4c22a6a10ba71d6a314f7b35b4634b85f1eb19b67994f4030968677d19a816737da876a7584b9a102be0edb375150c9a84d50c171cefb2243e00fdde37064929a6346c74244bf7217c005f728aa32acf82b2302f9e12cc2539bc20288ce735c89285e2624c348454f9280e1f4769793a4d7233af510bd905f6c16543a98e1b8486ca0a9391362795ca3f0c92c61da2de2d4c7a283be7d3dd6be271592ee4c0933fb58c73f1ac39b9c73641920659c259c6e79920d15196fdf65d5abad3d208b4d5a040df030fa9cd0dfe45b06c383f86e9e70d79119f212cc653526df9fe0966bdafe2096529c248f5eb0531afe922c5a83f65413f3e4e0a2161d0c35d3d44650d079193ac6f553dff809241b486cca2bec2b96f11c91e80803b3dbcb6809117cf4a58ed6dbb0dd4b7af30c9138fba6d957f13b19f29b27b18958ac26ffea7f9b72385104b48107212c9ac16770a2a720d34e964c9bce078c59f91c7b7b039a9b899907d2c1081ec7ac4c8aa03cb40ba563611ed49c200ef8191053da5dae34dc4daa84e8c2ccee1ffacc11bd661503973a6d432b55a00b75d9fdde58a602e9883b95dc130457fc67842992764cf8d40e9542774c0025058987ea5ba7a368a9bd5ee94de894632e6bd98c411f72708625f7fcc8b86059617ed3b94b45b95ee381f2af0bc3f6aea48300331c98502f588861b9f9276b03dbca250c5a19ae902d3886b05733c462dd6e8dc4fc583b52a8b5fa6a916b343da3c6b3f956fcd4884b14e7ef740775348db6287a25fd322bc55a5080fe3aab6027a8839be20872511b12d379efd95a83cd783659db6f0aa4e0da28aafd730b5be20633959701f0470d9e230c7bb16b94e8317cb94c47957629a15efd338e65fdc0448a4f8c258060a632460f5ffe068e6acbc41d5f4c4090b21281e03320de03dc08ed3873c6f93a64f3c69bdda093a739b94e7bef2bb3e9bb4c7c1abe81e34b39673b6291fd798096c74802c6114f87d923d99e418094a8f350f3ff900a10071c0084261585f864bd1c4e10df8c57921010a4d47a4a027a686c01e886c2aec29ae25895da6d8a65d13160118d494369327c09be46474cb3fdeeb3774eff93fd6713930fe54c5279750770ad4b5fa8a773adc0e8901bf32ed97c2f0c7872c77909170acb40e04d8ae0dc2240a70e3a4bf13a0620d21aea212aa2283496cdf0ca67af6cbdca67b5e8e5629ec3889959886a12cddf605587982dd5d00eaa9b86586c142bdbd6b2ddf20841908939b199d14fa79151d38b146136fd1808756ea312dc2d413980e7edced0272282a03f82aaaa8e30ec088cbcc5db51fcda49da6cf59e3b7189f66da268c6ce1adfeb57ad6b214a0d18e6c5f84d4509d7125958ef39a0564f0f86accd73748f5a1b9598345781b42c01200a33214a331cf8d60b3db454c8a900fb6b742d3adef486198552c1f3d6d4b37f34a5ded179513b67a253bb39a6bb56c070935607972f7507408d195c8c4411e84e9a78d3f7b2105c214ca0af5534c705181d00a131befbb68b91270e8a01e3dafa68a10d6b41cd7304bf7111956415ed1c80a396651a01eeed93e4be1b70bccbb732e12d9ec01531285247e4f2fea1a3185c504a15bafcc91f64267923223dbf667e94b40fb39a884840a0a66ac28db243d0ab10146dcb96188e09b2114b30809c149555e25e9d9b3904f62289ef716a496817f7e8e6a830c13abd6d2532aae0dcf5dddb0f2cfc047e60357041f40677f52875e5a1e941ea5a5e08968895f0d3d5be7f969e4cd2ccf45a6793a4f5ddfdb2685334fb12a18cc7b9caaa0147a1b4c1eef4e1c15552895c110b535b6fd82a303072e58670fb50044e527d4e30a043a108da4ae8158fba8166b31400e170e8238f0336bc1d187c3bb8265eb08c59a974d8306bf9c9418cb2cf3431ac42ed93f9eefdd1e73ba9a4a4ba158c47148e06f1a5c11f63787d4e1d31747ebda2b1f149c1b0bd06a06147f91abc37f9caa4ec2c1048817f1b777e9de182f2461ec9a819680d36bce83f94b0c0b43b9d053b01798a640b23d7c2f71844764c7aa1226980e431d8409f3158a50822f6ced18ba8f33fd65440f77a0f845b3f164058d07379652a29ca30aa5dc2c248116cd889634003bf83c095bc93d92a9123936932a327849523513d802a60eebec6982aaf559b06230c00687851236612e679b0def2ea75693896ca9773c2939a52b86d37ef88434997a9811e10f333dcedec4a607d4a1445c8fea18fd2d579433f7224bf4027ac6ea31ea88f01ffed6c3762c3a72069a575b383de3d13aa2d981feb2d55ab4ddb09a38d0e09a5d7ae80564e447ccfe1b55adfd7c4068f77c125b4fa4de055b196976bc431acb118450e529f9b7a4bc46d6948d56508d1613050b40263da858292b8097d343fd350e5384a67d24b445b7b1522c845adfdb72e1df7376be8a941e3259b05363b109593568d7d903957831d85c413e340e38251bf3e44532d4217e0845da772fa6d766cdf864596fe4d90f1bc1522a98e17f66b1975b11ea96dec0720fe063c0c31b543b027c3a3361b5c41ed6ecbe0996b92bca709fea84a5ada58cd62c888b6a4e5d4e38dff42f5033968633f22fe11b076544ba0d33696d4504d658dd2e66083239cdee50ea478b86fd507064015e513f6eb98420a683b86df498428f9b8a6e65d876332230272b102c175daeff6b89f0bec3f033e13ce8f48784688a8a8d1e854fa6ea619dbd3b593681144fe63c8b2d6dd760d4fa29cf1e99b2f369c73872c4e102e64e3e066703e2457308b0ae0e23dc58dbca881d0669681841e0f289a6d2671b356b35d47403c1d63efc39998a3cf56e3e83d4655a5195e08615d21b1971c0556e5be1abee73cf99618410706f227c9631e11be3d9528a4ee557ba52ea15d1ae45e4ab59c33b1a14ad02a4fa42c68ba2d7278560bf5480298986889148e9c4010f855e596710e9e1f3e6b8dec92d9fc69c59dbc4155f3b6cca51d424f98a871525bafc6e3f0b8319a0d05889f29bf4733604954c59c034ddb1ea321b5894d4b5002ce35efa8c109802833bb7a4f2d87b849a48928697d294c192b1b90d45824244b76e7a56eb3e88e793025cd85c370e8e44e3c98b65fa6d439d33a0d18e97381da147166d16ec1b7281878a1152ab041a1d934517836d97c8c18404309b7ad8e1c9409797ad1566a3df5b345c4d67afe23994aaa2ee0593c2dfc26c93ae50bf0abe25d1a54dd8238070efc53d6c5b154840b7a323e5ea054eb4c5a12339e16f77b3c3e0b1c1775d66ceb909c028b518045de9a131e9ef28c6958ff0827774b5f5ab4bc51232110be6c32dfb5d20e4917eda8cdc20198d787b26afa16bcbca7099acb10ea874dbc9ffc96218da65a25396e9a621b31bfa7fe5bab9df70d1fdacdb4fb4631410f5c5d6bc9f07f1fdc5d3a78b76e53913313483f2c979a1f8a241949625b5e335bcb9a20a794f63aa7632f3a665563ce3b59b0eefd63af9152f7470f959a9a454328a89d808155e71d85b1b530c6cccf77bd405648de8554cc62a9c476deaef99971561cc2aee943177490eabcc623c595ef22fcbb6734a8f213c893c5d23e97e0bb18e0c376d257299d2f2e8e0b74274e5cade95cf2faf6202ffb03655ed703b4f3be9fdafba4f80138d56871059b13e226769ab2324983ac2b4aec131e7390abbd9025a7d186ae7b684903159bfba60848f8914bf7ae7b2c17eb8ba04f13d85e65b9a0f4210e9df2e85426a56a0c5514500546a2bf53aba43d9614060cbea90183036ada2020fd1ae99a45e80de6fbe9ed46da40a0d99015aa7ce149d2221b51610fc5394c2176a44e5256a13df259ac13a90d0d978207e9a7eec5f044801120b9ce947673ba352ca1b2cb1c3cf535c259e7c57472b3e4338f2d468bbdb33192456e8b47dd18128e4f52791a9dbfdbd6ded23112ff6e5ce7c789706a1b87ad875f616bea0b493664bd659cdb42f21200cc40ea08808d16a2730b6292056c0cb28d40c2143b1dae01cc4a7a1e6ec1f12d4ce44dfe8b90d4c809b00fd89c7b5d3ca553f3ae1a67c2464afbdcd849608ecbff6d7b3def81e3cf64adacd71058392272015396c7054467210533834ca4d4dfe0668d666f2c67aa1f21917b5576b6dea01f0061caf123b05b45e2f8aaebc32e928748dd6f9be48ac7501b39423bba7a108a359272826d081681d90535b534b608ffb0f483606e82f3cf48fe5321f0afcb98f725cd148ce5057075dfedbc14ff2ae6edf82aa5b50ffc3a6f209cac495a50bb0e56cdea7ec0a5642156beb52b1a171dda179c87da90825f32e4cdbbd5d27d258f89e4ce49b1755953e3f259657ea55e0278b48f39806f15de503bfd71d315864f7957af801fa50aa624b818228d0fbb110df20827d09c7b8cca6d82f9a4257e2a9e05df9f679365e7ba0a8155138263bf82bdf38301677457148d285ef4077338530aec422d1c828582ad1d3415b0d957256db9447a3e1bdeaa8d40e35c89c8325c4cbadd2f19f0ff6490d584fb31e232a0f30cd0d9f3aa3c55800d73f691f2f76db15d9e52473d8b8fc4cdfe40b6d38eb95bfb4599b1d689a29b89fc505b1521339724e23e28a5f79a5a550da6ff0deaf2900018b897d2cb347098cc22c775cf8581898bff04903897b7ccb1bb664f8cb8834ddd43f24efc5173a3f36a890c38997056286f9cc878e761fd0a2a6414f8f10457bf035a21a2559fa84247ffb30dc96847074eac14115ea392384e24fb0c06664c264520497bbfcc7a939ca84cf99b638b40152eaca149fada3fe835d24b6c75de97e7c7fbee70aea5727844eecca57d5d35f4aea33f2a92a7fbbaa548874547f60991a734cbb6438f2c11050c228995eb5d0315f59082b422004fd8b1f0e747a89f9400ec9be7e061762aac0ef99e4420e132ca556a5d46660320a2fb43e4d44d02c41e8483bf5fd50e25f174d094cc58f7d0acf6379b845462f82571492c0ee75bb4462e2a0f1356246e3cb47a9e11c162b8bd85470d187ae0431d87740e793ec702c4285fe31069a0e2b1a3531a20f28e6c17d9cd2bb552871715f1f98dc89bdf1a7c45c1e013c2a1574f820c79d87f49d3b7c7b4997109fee4845da36ef82bca3bd13c9071c828d3eb5c205427fea48da0af18404a528c4c4768af81eecc234d7594a8f54705b69ff193c44fc86b58472eb06bdadcbd98d273265e7d99392e520200332874194ed63d327c03bd5b016a49caa405045301822a89a19dd453568761d71d84294088f7dbe8ac3bcb6cd36d5c4e3df3dd584b8f9ffeb89d0be6f6c3058231cb4bec94d498dabf06eb80e624f72aa5774468742570bd585e64ceb285f57b53a612c79dadcf5492c0bdb5559e9c0168732b81d4f7db72567f0413e4f92a91a9fabaa80ee3df5b8db21f1754dffae17388e1d0d479b701760d8d18401509e3c283a752a60ee71448c873a609e035501ea3df5af1a28e87a93d0ea1f158b9ff866414eda913dc6726ae9362421cf71c10bb667444e23f85f0f64674e6dca3f57b85221d64cf50815046a2ec2f46b962c00dab2ca53dadf4896becb04215a4d6ff1a99d438b6807675dec60c5ed96b8490c78a38962aa1339c94a372ac049f910414dcb5754bd785108d3a8fd9889f7cca4976a836913876cdf3a09de8fe5ed65d02c853b2f38ed90b28d6fc0b66976721e7eb9f9352d585acc28bf8f848ae0e3ac792eb6f03f687f001007c521a7a429167d6069c00a29f50ad9235696c15d792c4ae639640c1d6318f8d39f24f6c1adcb8f9a11ca12002d5a9912a6905d8be6d1b82c0335b4a10a8e9f7e63ad49ecbc75ab19ee2b3ed6d4cb4c9706d9c819b7f66d50158d17cc44b94265c547b78d694cb011bc7d3eab3dabdcfba24f6c1f42d7c9922d707a1c9619282f0334c3bf27e2f499353f08e9adbf05d587b858daf34b0aa9cccfd9e8528119b16e0f8cff3881dc331406f3a5271217288e81a949d1e6f82151c84a8cdb3280861112cf9f0d37f019bcb0a0f190434f9bc9c30a24d8238a58030f911300d51e04bcb1b7af779369c8f967d1520b4cb7386604590d56b89ab24a5e7fcf7a3a3529761199a65cb9c0ae6318649f6e58aa9f37cb500d1c862d9cbac949130b1d738c2875efe2f6bc3bd02d45e4d2cf67cb12a01102364cfb8ad482aae6e77060265ce21bc811ac20fd5cf3d7e8dfaacb32fba80ee73e9c344c82b217ec36b23976e179849f01fdb2022e7742eab2bc050a8dbbc7f4817833814141baa14b621bb70449ac29c70a39849e04a3792d52ae0bb68956e899e4469860760f46ded6984131548a4fbbea9353a43c50de02c540b07a14b474a82342da3faba7abc90aafde0037f9d6614049ee4a3acb9019926da567274d0c7573c5188031b4e4ce73f39fcc634420812fa9300440c27ecaf13b65b4bc68f346e380f2a4a53944bda2b5ac591696a92be03db45014400b15e1b3d0e189f7408d64d3bcde6a2b2a92d44243f193d0b20218eda146cb3a61392136d54c8a3e4009f85d718411655ba293b015c0965928a7aad717c27613c3dd187b42bccac1f8c519fafb84503f8abc8b86f55bb773b8e1ffa6448c2c854c5010d16c1e9a0cffe5f29bd6b3bc33344e8ec029bd1375710fc4cf4e3046a0fd901103024b668437ca1ca219e1d6e705a5d6293a3368ca84d3b89efbe131af7bdc2aeacc375f8ed36b49fac72682a8c745ea6a88d7ef271918ec4612cc97310f076c622fc2224b179cc8d55281084f45530a107a0e207a8d09541edc08bc4b077454170a63bfbd8b2608d2f1a9b8891faaf55610c605391a3b42f37321838cdda084410f0e379d9041654f281f37e452ec089231f54874832352087684e5f74206854df6998d2e54b604f270422ac122f3f9801e153b61f3b9a0d4260bba3940828491f5e9282d8525f3e95c0b27912ad70b7054994a15228fab6fbec3ca4800cdb118114070ca062231becaa828ce53312442930d2b506343d62ff143955e1542b820856053403e0f4851d8153433e9c1e10607d208ec0cc9ef822c2a7b2119263d136e76402281ad807c5d91a3b0c87c6ed147c1d690bc0e482232253e1bd043632f44be3758c56421774f481030a43e59a5a0b2c93e8567dbe44ea995a5cd519737a99d9a0d9d1c75caa8c6f36328c4a103be922941e4a33045c27aa94e11105ea51309cc4f354b828b7d7b4343b2d0f50bf0594baf20c8482cd7c90a55455d3a729c83b552266aa299c83c516c278e95b0ad09c0cf2e7dc32020b37a3d2bc29011e5b572136762e1447336f11d93522a2c807fb7be41883c173f58eeffbfc6e1b3a2138d270a766273e8811deff626b17676c8c8c6b70b1987c78a79e2499c08040d90e65dfbc8fee16ff4db72946fac8c5ec70f313d89789508367513c47ac95ff98aeaaf7608a216f6e3ca34c807007ad56affde5e37356b8188ca2153fc067ae94bcec203e63e9b8329e42b06eedf49718c308561e46391ac369e67b98ef99348a9c193e3637db665aea7c559b6ecc6f4bff10c5980183b2456b0e96b58401e76a952169c7ea528c96cad4be0b85b0e7546e3c5f23e6d0521f033679982fada9089cfad410584a2c4577aa58e18d90aff08236d3c7c25293ef43b7d6a90ad7a25d60dbeb71d8e66466fd3a84e43eb1817ec08de88812749988470abe3a27006d82fb9d00add02120a86b2816c38451729a5d95908ebe3fcfdf5f1979eb429bc0ce2e1eee020a3cda703aaae29b37a3ec2eec5252e76e33276cbd14d8b431d493a25f778ae32166594ef92ee687d7a247ef1b4d7d3b72c4b815a745ebc082ccf60047e8afef7e37fd113050ef99f9b4d2c1bfafa05089eee5209bc6f1e18aeb1ef32942d73f0a851bb2b6dccd16764ca00fb0183bbf2aec7909ccdcd798ebb85bad3d921ed66efb17bcc855e31bf6673904e7f1e4998d91f8617b86f9e4355194db4701ce7dd4fc9a01995ba740bca665803908162e8973cfeb75848c66923d2a548fba31ff53f6fbe066966a9241fd88dbd667479682724b1858e1ad50aee1f27da48bb2da353b50957c100a5e04851eafe263932c4f8dadd50c676f68e475924aa429e098cd27665e8c06dd6d14ccf76a0ea741b0837a98c36320b0d15acb2b4328bdea64466d9ad1540668e592c83881fe241f48d2663144f7ea3f51ed06c927776394c821be81aefba807681721db43eab6c11939b73b9402fcbe665c30a12eecefa2d207fa879ccdf782623b28002fc6fc1a5f43e0774a7811c8d3776c4a1dcd75781a0c918c1c2e5d016017d6b3c20c3e096cf2fa79096b1304c8275f5fecc9a4c62970c868e91789dcb75868adaa9702acd6c5dc8d6d8e80877bec9801f1b86e8da95e31d080fcd41a54d027573dbcdbbedc055d4297484d49cf3d93bd6ef2a97a0d22b842a7a6d28635d830fe16c53d5bbaaa433865b56bc2a2128fe0bea9dcb08685a41c8ce9c73f9390ac5ef16624d22bd9cd66f77ba773bff3a5623895b2ba4cf3bf5fb79cb76d33f227bc7e9921caab5c071ea23561b9d2f93cdaa55ce69c09afade4edb16642d6ef5280edc5a9cb530a9ac9a2e355a444b30820f0275e8dae3ba1d0877d63a0f552152db10d56a884cebb4b09715a72da56df09f36d8306a45996f4372b64a45b1626685789384f5989e9c010c1e6bbc5ec8be304983043d32d603003569167a9ad9ee7f09b07fda6413b6f8ebbfd182a94646196dca60ffb53a027bdf75575b330bead7a5cdc7cc45144a84f05a2d4af2d1dec7485caf0930225fdd12a1103c94217d9445c5e17a71ca5759bf34c8feadd58aa859fd8fcd6ab3bec00ee07736787811705beb3e70b9d43609be320bcff43ac07b75970252f0d02a22426ccd07a667c3bf453e07df4d6c11911552146360abd1d3cfa32100d6268c82a4efb8751be1e7f0ddcbae4afb95498d61ece5ae23711dd7cbf41d915c6adb8fd701cff22a003c49a3e6ca94a22a375476eba873d5345cb2ea75cc760d80aca5e76cb744e1628644831bca4037777f0bac8f610cd19187c207724071b8ee8b15e37d27ad487c2b9256ac3862d97352bc652b879e83c22f26d88e42e1a92b20ab4aa195728ac0308d7a31dd7ce87bd127d2585b78a58d1f9c51326348528262de6a026c1cad473e19f1cbaa1faa5179bbd025ea84f0f93702419427621777e5437f85fca06d13001a29a4d971806915ab49ced88feb7c9e24ee414a382701b2350f9da7be8deb82ed7d49de0a5bd0c991ee9f61521a0568f8228f831149426601701f24ac4a734767b0c2ac8937da4620e7961dc07a286403db98ebfd3ec7b45cf1644aca0419a0f81f83bffdd53b0ac984c4bb5373bfc942b7352224088a94014fac8e3649bddf61cf2d2e01d891fd19baa58d124c8d2f25f82778c43810a1c855b31dc2b23301c7d46619cbf5b4e78dab830b3f5252addcba1c3aa26ce0cb6e66d9c6763f82dd3548e58260c1869d1d0446c076cc60ec8b1a3846e0b0c1a2f0197427601775110b1cb3dce56448040d0e9b38b87b376dff066b561c5d73731f65cd30f15a8cb2810976f40bbaa3025bc2fd5d7ff6fbea77a5fd355cffd56e1142b22c2495569afa41a7926a70b59860b0cd03b655c64184150b07e8ea001fc58e4b970c7662e4dcad6aa948ca7008c9ba2f884b253831af0c0526693ff68103364ed670ddd909d48e3594609ec095d133e36d8d90b31cb9a43a7602d20198eeab4d7c9bbea192804dbd681ac12e1aac7d0523670113296acfbf415d1b20674c7bae80eea3c44b0ea9d4d4cb99c1c18037e9565f80da193b1385f9eb8b7861bdf338f95b0f2156695f0c37adbcab50158698b28777c09829122200fe521a6aa1a4886e882de1c01ab614984dcc1e20f661b6218af24cb6c0528cc0d7686edf5101d0c59d8481c7d1b09df40e49a428affd00186ece0f561fb351e333dfbf64b61c362624e5153c71db6c4b11e6f0ab90ebcc2a8ee130041a8fcb5a2283e320075a66428571ccf3953596edb358c02f56a0350a83007b5d04270e9c282c0d00fb4f0f7b3c14b9d7f2c208abb0e4924f218118129f541d3c4f0f9cd529951e335aeb14d6e5a377fd17733f06bedfa26ae83cbb3583fe9175450c39d45dea63cab199ce3243a11aefa20cd6affb4ca20194e69add1abafc97dead6387af83fcf0d44f8fba4cd63c9d2fd90f305345b3e89f43a9d2674b74ccf787cd3d19eb53894c4cbe93d46ca8061c466cdcbb10da4cbbf0cf904553e916ae0327bc6156e9f3e4f24739685d1c403824ba01e491609d59a8361310184d37171d40f7cddf530cec2c52360dbbad7fab394d539b0e1416bc8497841604cb90b16c4d5e5e1e7f275f1d5e96c59d3ad1734addb0259fc117166cae63a50ddc5020168303fa17270af4bde0eaa995ecc571606ac40223f0052f8ed415d70ca3996221159a7dc1e44dd9e471346a723f15947855fceb8bf9977dea5fee7a207e6435c0c61875b1eacbff2f76d49767cb025fc59a1866158a43231b6b568c9b11254207eb2fa1eaa5a60839d5d5542d339bc7703e5e681ea49563cb6cfdf576952b00f6f6c50d42c398d4f585baf3406f043cdde37f6a6b8b0129d6cacd4f640147d1868b0c939a1b463b546a0e533e280af1f157815621498d488b876b35b0a7f8c0a42bf4e5cf6cb6b0147ab1bbb34feb9228a33cc4bf89194dd105dfa864046d6c020b4a194a251d7dfba7865ec88466ff809aa9c9d295c9cbaaeeede0b8790a9fec962ae798c1b2e0de51a2c3824ed22bcb5a32e8dc7dc3d1bf1eac4539b64694ce2521e7acdda30ec010c173bf91de8328b12204b91141b204e9180dfe4dbfa29cfcc22689df942aa11e482d02e759f6dcf73f280bd6625a0f7206632aecd40e453a9466c3977e003d694d7b95fdaf2253a359248e3aa2e1482e6dfca12a4e74e2d0e93ec5681804f939ad4828623dad9fcee4fa8a2992cf29c93e704455b850c081ee1cb47163a5a14fa54e6691a5d4193092b23ec1c28f67e762a375b0cc7c2ca7738035bc136989510cd1b012a568d849b601abd07bac0107d4fac4fb39c768b1796073487360bf04eb060a320fc8256375dc2802a20c9dc4ab6027d494a4d5e81001860a788fae67052a469acf1c166ec30ce4ac5d16fd3655a94941103002b374a8463faa96eb1f06e95de2bdb1dd9da5fb0d7611aba5d9c6658436e25737366ec5d729e7e4dba06ad3fbdf5ad7476ce5947054cfc03e6a50130596e5dcbe388fe235e4b011bafc5c7ec746a0e0d8aeb6226cc437aec0eef7408e4e9651fea00e43396f6eb02824c097b935a92ddb25b0b6313c3a3d0026288223e163dd82a800c81f4fccd23a7d9194e016a004a990de6242aad172123827c2f1ce844351482a8830f9a07951a00ee6584bd9e340281cc4da332de569e9ee48425c750d747d14892ebc1f9ae21ab8ad94927ee6e847dcc0b821daaa84528f120f859a07796e080684e4a6aa9e5090cc8808037ec47d903a35fd3af6d4aa17bd779f12d45344915b1cfed6d8cb9e3e6db39960e3d62f5e7870ea321c2b6bead8df25f7b3c81519e70c5e79ca29f7182715e7d0408a8eb4ec43d3a484981030082723ec9d2c96ff6c7ff14827b2c843fb0db8c1f92f1b9b04054c0204ba328fa5572050334a070a11091a13442b31d9899694f975a5d72c8638b901c184d5754cbde40acb75f02cb012b6eb0598d69deac68afcb8d9937d060845f27f6cbd87922753a8ffedc57dd768b6e4132209d95bee2df79652269902df09a70ae00af2a34c92273a59de89f2558cc1e5b90a31869e9b9eab10638d97440c442a714ff42893786c71c39af4913b63871c5c62afe814038a8a2dac208ac55ed163945a74d9224bec1599624812a8edb842d44712a87b884802ad987a08137b456f232709d44c4c4f63baa9a99d9c22924c923cd1931880c5124aafe829acd0494492270609aa490d267d248ad1a6f9c5366f9da669459a1899c1c9113d4c41c3092c5ea87cd1858a2bd2e450c69c82093107786d8bd734ad833a964e19511ee7398b9129de3e630943e58da872d9e7731623525acb4665536253629bb24de91308915fe38fe84256318a6d66295f88af82e8d1c9b337812a02854d6f02f52b95715656bb9ea710d63397f39c45c995d573162348b172ebf677a9ebc46d881bb2fe1593c8326796b1fda574a28f852f212b455f624e4542999095d8a52ca1634fc111da253d480867b07b626ec84adb9196c52ccb3cd49cfa1015c8879253017e712e032bbd58b0390b3857cd586c3affe6594e054fe04781955eb5ba56c156fc2d883bc1d0e7794bc2665110e06de1f19a70655c54d0d2a0f6a0dd950200d41b37a91f6c5077dce89c657263ccd498112546bed4c2d8cedeb69cb48b361cb07ceeaaceb729560ec71f1d7c8fb7d7b3e286d573e286b5bb5bdb7b6f638c25c418411bc50d2b953f3fbecd7ee7b9c801549f8a9e803e0cd4a3534acfab5dfc5069eeb66d55f2b073518281617e047348981f46308784ee2348a4fb225fe4ede470c6083691ee04f389b426cd58e35adfb28d9de536af3e753bef6c479765c72d88cbd149d669354623eab6b4714c7096c95aaef36c13dc4a2205c515e3118bc58e3050f506639898c41311631077b8e1dbb9957c7b53bbcca4ae93ab42a3d2b4a1144a5bd5a05113630cc3baa99b34ac24fab6ccb24e391935e72beba17629a9208d51b9ecfd9ab5c6bec9aee9d9371d86d6d3d8f4562ce601ea91f031f74c9e73b213a5e158e33b5ff3ebc09ae6323dfaa81175428994e0a646cdd3de48ad16d56070d9434a3bd249297fd937bd3e924e523ea942069916314a5905457fb68c318b51bb4d7ea4d5ba577e1ef8e91f95320675cc59c36d4a299d63a49466cc34504edfcf1268f3a879b4f2d16752b49151f5059b832e49e982174a8839a27cb83d6d4edbcc40d4117bb8393df7b8605209dbbe7ed5ef049a679bd3e6d49a1fe513c050bff90775185acfdcb33949a08d7928dd9c422ea67aba39318d1c254a03993b4e39277f2866949326d4b159199496355e30a1f19dbd0a1e15bed5f8c3abc29e26cad10657ebd66a8930dfdbb545a6a57c98248969e468aaf5de56cbdde5b25634d44f3ab3d79a5d346bc17b2464dad76fa906d6268add9de6894db00c746f25896007c0a7dd7390cf015c3cfe3df3a8358261f7d04c3ac9c734dfc536bc5abb7b6dabc5b9cbe59f8201d7c43d76705fa5c71c6366781a1e37a99a6213a3c140db06ba8c72c436befa2c81aa7f3bea8cdb280fd55914b7a1aa86ca286aa264c704503a95b2c691d25434b72849517a4c6fb3db67abd76dbe7930cfb359d3b93945238e309f7aa6020e267e8c33b349688b305f80e7299674f83030229e4cbda0939ee7ec75a075ef9313d890883faa5b90e30febf2dba27c951b12f1878ce1abcb6f93326b473d2113a86f3bf96d52da255fd0de5af9755438a1991e17765fe5a213ae762de3ca20dd3146e70883092dcf58c090f930b28c11a67178c612469730f7a889ba99ba9061299eb15c89f2578c9eb14061f4612c8a6177912d134e6020de09dc73c7b53b1fe8b80f198df8d9198c57c2884632f714b14ac5607452d4ae185d4151c7777c7ca075dd4d797ec130feedda3559290fd2cfdccd197552df0ecaebb82f088420237c269c70c68d3fe3117766ca38e79c354c25e37293a967744eb089bea87eddd7aec80cde2b5df32f932c6fc87ad66957eb8e1bfaf0018209961de48eeef3017ffc9ced78fb0f37fef49ccca5734ee6f4a96b1958027d1aaf7cccf2ed512966f9ce808852a474bb14a6db710acb364fd83871a7a5d439f4f1d46543e81f8ee0bdb5ba0d218476d138a422ba36ce6e369010071c805358cece2cb771c962b17cb542fff056551e379cf879b00416552a2eddc4d1542d1e7ef3c5eac17880392d9ced8b4ada45bd38d4e4aabc7a0fbddfdc78cb370fd602736ec012e8dff80d1843bbacd39ccd87a85cf34de59aaba64754b77dd3eb87e396bd38c4ddafc6a23ecf5717748148e5b6aa5437d6aa5456e541fac6aa6cb45775557e418e3faec74fe5f70b2d9830be8aaf0769b91282f2ebd113b2721b577d2cb79fbcd93c88c479d4b7f38d70020a2ab42b045f8152ef2eeb3a45a138b72af005ed512f78d58d9d4479f48b42a1fc7ed151b7efbd8ef220cdea62dd8109a15dd4adf484d077a15d74e576f5a93c0ec5a118b2d309567e3d1176dae50959f975d4d76a17d56917adb1351edeb7605c61840672a17928939375410600a4b92b8f4a8a56284ee545de5bad56ab95db955b5fb9f51aefbcc8c7ef5e47a16a3e8eaaabfa8afc4d711e3947719d8dd1e87e4dee7439bb7864d33649b48f3d849eb14451f4ec36763d90843b4f7de7526ff54ff4d945ec620844d103bbf843f93bb473b0d17907cc8f88b229bad2513f5dc874578c4ab8ad86a5ed68cedab77345e376eeb98db3bcc6ad8d8d8dab7ce544babf7e020a29ac6cc012e8dbb80dd8b5cb3aab5d1e2cb91c8b85e2b86af385c0fa58be3991d6db80392cb004fa2c678131b46bf320b246f585f76d6d97d6e2315ef3da2e3bdb655960f5b0c56f5bfd8372ebd635dfe99f946beef16db774fae7bae6bff39aebb5cb72edb2fcba4aa5e238ce85f073608e8d0fe1acdb38ca8b3c0c5fe32c96db70ac1ad657e46b56d7b7ab72f50f5f301aa5aaa3ac6fce71d672b6fb5863dc1aa4d66ddbac05c314daa59dd02eade5d2763ed0711f3e5bad1a38849bb82e2c7f706d3c3ed1b6721be4f6fba05ddbb655df6a7783b3d9cd3d5f7d61e72bbfb1716b6b707c8510d8f856e3ecc170ba765d67b5ebfae7c1926be3d66fbcfb84f0773736d2e6c60685ae73cfbb71e9c16ec09caef3cef32cb8e180dcae1bb7016bbbeccafb58eddabce60bef5fbfd9ecb699d03f77b6eb7a5b90f6cdefd74971dbede63e7cfac7f3cd3fe81f956f9ebbcb47ffacbcc6439f1b0f3ff8cdc3a0df5637bef9eac6575ef38545be06c7877838365f08c3dbf8cd17c6bf719ccfde7c2c67cfe6e62bf236ac95db5550fff00a8c4646d6bbce9b5ee781ad4f67b3d6f3bacdaddd3677058dd03f9d6f5d08fd637df8fc58dfacdd52d14ab1e4a5915843d994a6b545815cf5c0da1a1a1a1aaa3dd44312a8d67be5049bc08091d243d113d2df5fbf6d0f36a797e973cee8c5cb9c337af1e2c54b90da7467189f32af63dccce7752f7b94e7d3aeccd9efd7b156c093e7edca32183cf0cea1f68e997751ff14d14afa87dfeba32709d4433d53ee69289b022b4a3b416cf73c580f35507c71d75ffc2aad8a86fb7dfc78fbae6abe39393939390e8207cbf19eef808e29be03678007eb40a552a9542a954aa572201e4ca543c6ebf8023c984e9d62567384f12b0ff2602b200fd63dd5f1739ef1d37dc74703cd17cf41c3cf0ef329f4cfcaa7abc061e670f273aa8ae668e26794e2800fa352ffe4f8f4c865c62e3fc17c078c50b264c51127aed0e18c1a58b1440deef842092aaf2247c610f34513434572207985bcc4c38d30469a74818311a357c84ab1e99ca3c4e7e4e4e4f88f07cb7195b7545e55733479952bc083a956abd56ab55aad562bffc083ad94e4073ef28ba7a7efbc764f707ce709f0601d023cd86cf2e7e0898ae7c00fe0c138e0c183070f1eeec383078f272bcfe3a9069fefdcc7837575cea7197efa0f0f36dd001e8c47502b4cd1b7bcc783b5cc187a140ae5de3f2b47f98e0f5418238f429981f214fa47e5285701d5a15028d4911737a640e3460f77a05210051d4648397ce1431594037dc832a308019861c577eec383752d95ca5bfd03c2ab5466fcf02a2f800753f914291ffc4125e3063ffd1afdf496bbcae8f2938c1c7e3a013cd80cb2838b2f4624a151038b995519bf3a5283cc115a984429038cd78a8c25bf721e0fb672970743e19c117b1c1f8007c3a92c6fb1582c96fbb0bcb2ae1bcfaac1779d0bc0837501f060d3773c182be82689bf710f3cd84d657d0d195fe3de3f9dd7f84e4d8dfb3450248ac56235bc6abc4a200d90d14492274b98f1428957cd15286c7084112970307a85f76be0e8e16ba6cecf1e1ffaf80f7e3a8720f07cc859dc40e3a7cf69c6c84f335fbc91c44f2c6fdcf1d37d827ef8e941ceb0f1d3410f36973ae730e8bbce39642f404a69b8e1031a5ccec0f20a5ddfb9cf77ce1d337dd7357de70ec6771e248cefe2f861099432669831a3c3ab73a38beffcf3601dbb07ab0902f336ce34781befe1c16cc428f1528ef1d27d47ba8f14e3e5254a8a21a5afc0615ca0c14b3e13c6877148d64889650c959712cc87516902792c169be12559d2cb4b33418c1143468915245e928b2a9a1c79638b173460f90493931a4d4f2091d286146324c7154c4d3c79e365268c932fc0b062ca97579424d43083290b2b54be3ccb27cb01e0c158130cf6f939a77b173fe7f40e3cd854b2c1d78861e36b5cc783d5d42e62712c511212038a225ee1fdd50a8c5f799540252081c50c4860814510655e2b31627ee5391e6cc5c1ab9ca3789573e0c154597cc8fa4ee7bb9cef3abf597c27c6c91932f8ce7978b0ce0c2bb6486289962f312250dba3be7894570914012388b861061874f962c40b7506128ff2960743398e07934dd739cc5fbff160f70ea3f73c6f799e8772cf4b83c67b355e7ff13c05cf55f03c77818bf7545e7bf1eacbf368343dcfbb3d397c3106124d8cf1028357c84a296c81c5091a50e1e2c989d78223c83821e2488914223c6709548030e0484a33c5cc1662bc7c9ee9f839679618113fdda615b2c2f85087e78e2d2fbd95c6863b8ebcebbace3baff1609d078fb2038e47f9ca83a1605ecaf9884ff9f560a929debef5e2ad759fa032de8290820a9eb576f8f0f6cc1ab6c8a2ac85e30c115492b4d001c992977596403c5cc80023658d2649c4e0155e250ef9e96d8ca169e3513efb87003054095dba3892c3186844a1c62bbc3fe70d7e7a95401d1431c3d01c5a580125cb6b86b1c2e33d345bde73cf83794d926aa872831762d0f19a5d147152d4c50928b6984185112f890693776880f8cead07eb2ae7c1ac01d4d0e239df3c18e7fdd6e537779fcd83a8f80d84e662f31424507d6dbe42fff036e637af1288a5d022471873dc4087239abc4034395c593a930698375ee1fd2d45c48513514459ea61069b1d4dceb07107131d9630da9cd5d0e137358218006cd62d3b2fcbd8f2328d272f5df360b2e5c136a787511973d2aee82304519048101fb52b4ecf8c3b79584d1e5608f870358d56d368358d56abd50a0969b522ca3e5cbdf1e18ae7f870c5683e5c85aba1ef55b83afa5ead946419952ca3e2f950259d54d249259d542a958a4b034d21551355a80a554a3e5485aaa16f954aa5f4e57eb9ae0f2f98e6891e5e320fe69ef9f60bc40d6f788b3ebc4bdf7e996e970be686f9760eefd0f70defd1f70d6fd2f755925352724a0afc3025915212292591522930a930df9ee2d24072a979a22fa5ba7c7bea49f7614ae8db394cc5213e4cf1f0612a4c0d7da752612ae93ba5247940491e50df8728344ea8a76f4709554109a18c7c8842a150a81035f48d0a5147df2869c493463cffd093429e14f2ce7cbb67c5130a3d24cff3bcd03bfaf6a294e11f65d27c7768be9dc8bc5377e6db3b2c9d90101f7611e9c32eecbaae6beac26ee8bb0bbba3ef2eec92be3b2dfc434b9a6fdb4bb6976c2f596b2d97066a300dc676f9762b948515b2677c68436b437bf46dad524fe17a0ad7fa9043e29038248ef382133242e2388e6b6a1ef847f390e67b33da8cb6707bfaf62dd6dbb66ddbb6d9c13fec48f35dd1448fd58ed55a86f66115f361e5323eac4b7c586bad611dfaae613dfaae614dfaae67f08f33d27c6b63b4315aa83d7dbb164be3fb434d288e0f35a3b8c3871a12131f6a9aa685dad0b7166a47df5aa8257d6b4a5864118b2ccc9832a68c29c67d986559966559d3f7136ac79334df340a8d42a3500a260c50bc426354e83b890f69488fbe691417f00f3bd27c4f34dfce4eb139c1cc30df3eb934502c8a45b3cbb7cf26b56738c9f870ce19cea4efa96402fe5126cd379a6f17a4d3b73b3d7dbb8c091921c9a56f974c52ca26203e9463241918ffb0434b03913c4efff41d369830dfde5c1a4805303d1f19d0c33fa287d10ea724bebd8580f8b08dc21efa6e17300328ff88dedcce4ddff545e583f8302299f9301ac558bb0c2c98107dbeda43d03f4c0396273f427b6defa066a521aea7650a7d742fcb0da5d3473aa8fb8e0f1f9a650ca6972e65e52e90f809a3416f0399c50d25d247ef9cdc501a7df41be586f32f941bf6d247ef7ab861237d744ac50ddb8d9b6a72c338e6a36754a277506e38a377465cd41cf7e9ba2081a651f3449f915237c63cf5104630813a0a2a50aed3883f9c461fc34ca379944272c3193d45c3cdccb828306e381ff5c5edd84f25193aa2976e6d10a51833a6b540424292502425254da6a5251a4503cdceb42c2dc51ded0926a61ba585e4492e259fa528ddd6a4a6ad5a31b2475d6ce9e969daee86e8865deca5d72b97b7a881d43f61a7e42592f44e49ff845d2cd60df50f53237a24a59c44a9241b951b7dceeed41937a3e2b67bb0e4cae820f7f08bbd0bf48b8232bce0d584c46a39081d919e83c2942102c10594a7988382f4e953822c8bbc72d0c10ea4974c755ca4b4dc707efb4087d39857338581c6d18bbdf20cbd380c0e2f29a828cc050b174db68b57ab1a20a404a48d899781f44c4571c32a8bc49665e68b99524a6bbbe69c534a2991c8962d9b126d2c29cd28cd289d734eb9fd6d4509833887b7a6b85cd9374a145f4a29bbbbdb0a38bbee18639cd9b665db468798f03c7daec23cedeeb44a8b69950130adc240b40a133191952f559fc440a6c7da6a4d276657e6ad62f2d54976dda69304a2b5de1b4e2711a2b3f7020c8a7514e4cb861bcfb412d21a3e3a25925cd210f7c426ed0933c77699399d9383bedc53f3cc3df4abe2869cd177ca08b5c4406c2ac0afcce747872450e61588af0c64c9237548cdc9ddb2c833cf599bfee95b1ed91681be4dc1a67c8e3ad88eb1014bd3a62851fff09c4037cb11a49f31a6b1bc13522aa75c20b2d18415995397617a46c1174423cc4099d32748bd044c9efa10ed90e4691a03231b6b170cee92ea2914b7558dd219ab2665ab3d49a02eb958de096f2c0a03a1ee858164be512bf3cb7336c4297149dc52bbdab92b922410c7b4d43f5cd315fcc399c12e2ea93b41c8fae6ed09f93847525fd6392609c48d69ea1feec90cfee1ea60578ff96212e669e7bec8840fd0ce8d91403e9227c6b83af8271ef1e1c6c4a2d844013d70104c6236168bc53ac6648c4920ab596dc658ff544d9b960903596f8f496c768346b3ec2db735b5920d7d1d7c8cc5e40afe55dec63a5593b8d1431b6bad392d3c0ed576cd39e79431ee9954ce39e7f429e4e6a553a794cac0f42c915cc9ec3ce71482f3126ca676d12e994b29a59452d21863dcd2dcbcd43429651747da388a3d65bd2d326782707e82b4298cd3332d3297a8236a57174da2a6693426766fbee5cc420862a464e4a4816411d1983b898ea897ad351dc8c1b8c2f8900962a5087a22e0bc04a953bbe899e669efac8825275f14a4c42713faf6d085461e69455479449d4015f7f465726377e68970f3f5c9c88d1e66513836eae6a7a41aceb36b1f0acd7342bbda5d8a1b6651fa474a03c9229a471e4d38846a8bce0d299b22a5cc98dd7bd0085e3965ad9aacfd13d9c5b22d51a42ee79c96483e05eda452b2ab5d51e5e4469f51de2525734cb3a334cbb4ba69950da1edc9064f7d68b9443d1a83cca34652a95d4d6170e3b66ddb92b8556d498c9c11cd0aa9d54dab47b638a592942c592ac5153efa8c4ed953dcbc290f6517059984f9dbb66d37c8a8fd56b51bb634b4ab1503347181d0ae23370c9243ed7aea9f9bcd91d41797317dff6460645eda95c9f16569f8005993e4f1d23f9953bb3230f8277ba3c9667254f12d9558626120ada88f582bbae2bbe803adc887630290f8bc980f106a4814d09e354920e905f3741a4ed5cc49b61ce35eea91e04f925bb5f09284fb9993046ae6a1de3273ea9fd6b28ef32c0d03c9c1505a9b869a60e41eeada0b6a2bb991873e94379f1171524943d2b864db9dbe792548cf32cdab07d3b4a9cd39840a7136c618638c340619b55946e744d3d3ce39678c31c6d84d544aa2ef294cfd63f352fa94724e604a77094ef6a6cb30cdd30e064c9830643ebcd2cf7c78bfa5a3f9f0ca1bc16e9a5f33f5cf4dc79644138ae5199449cde90e94ce63dd38cb597008e793f3a91fb494df540af2a4cf531ae29cf72b85b17e4e0aaa607e0587644e33a79e06fa007d401f52d625ec87c5d6c586d1e4626c4b168c4d15515c21268a2666482197dccc30471d77d00087912201301d610323c6d8610a335209006ac061064a6e60071c4d4640812d4d4e9081c408a618dcc0676aa882892b3978e1e2b4052f8d004b1b673069710308298c6c809264041d47461c917486852f48d0c50c5c9ec032c61b5fd490012aa6101184121bc0218604208c6004623c41c3081247c0400d3934802aa64451441464f0408649b0f3061c556e0025882a492060250a241a762883e50b111ce1818e34b4a4b1810a3348aa90912e383c152d2193640d262a49507810a3060d1b3043050d64e0441839e8a00226aedc61032536bec421f40dcdc0c5105fd488628611f01c47bcc4c1248b0f61908e4800882c8aee6023e90654904004431cf560030d5ee878320357e1e4062788c4288a828a2190781222090e5824a1853402471d57aa80b2c5881d906c4f80f1b4841296a23064ac8813669250d15206951e8820419a2f70682a43471769a66823a9490c09308a78c242034a88356d81220aa2a43277b89e9c51420b186fdc01650442a29c89411a55ac4819634711223172705187105a8cd440418a2f5b0851868820c440c3633cc161d4848e22b24041b95c76d6b81f9c948952e60b154bd411e58a3688d2ccd004174d90208e26b2a082490649eaf0828e224f90b1f285490c32547c60e1037616010940e811d8393e74fd0f23426c418614559ababc428ff305c247e7e835ba1d489e2cc1b2c4890faf18b5d8ec08045cc1e35971655d40206e74eeee6e3b6ef4eeeeae417777777783e174ea3d00f0c3149c0d844d77844dc5b86c8dee6e9418377a777773372071d96d6ca587a151acc6731a4fc65b3ae7f73318bec0410d37ebe2f2b7a4e861e867ea1fc1cf88cb5ee4a947427f6881ac8b9f55baecf4d3e22d673b0f95ba9139144b913272d973e27f524a29a59460e50c35c6658f4ed99151a87f41fb0643131eb5c43decdfbf2016e99e4f967786ee7ccea2840d3297b332995c8b45a88c0f5d4c42b68bb94592524aa9c580dbe343e917c48e4e3132107abdb8e1ccb7f7cc9ebd8d48890c448b3edb2303991e10ddc8406405f88d25bc941173439529ca7831f3c4ccf380e84606e279407465e51aab566bcfac52142a94e1db7b0656ba9cc18dcf58c850f29d95cb6ec58cc1c40c342f49aa2a9cb83558e27a4b3471d953cf596e20e2c3fa505cf6ec39cb0d3f74119b4cd573961b94f41d534e76a5767138a59c3d775a767777f7e742bb9e38cbb22cebf69008eb99c6b833e463473a5f6670ce96eccae4466fdfc1de201463b441157f9a254bd94090c0b0da298b9129bca62c4347596a20a392cd6598992b7bb304590acb3b2922ee8dde8aced16b74fea60d73d9e91397db1584891b7ef0eca82d2e4a8beb1fdd0713275564f16283135908bda2b724d003c2585263c9141da4f0f28a6896182a63093bca58f212c015295b9e70c20a35d07845ef8fbf9fb3d480c3a36470d92776065193295703422a71bb2750249945464aa60d3430e3c30da41198ab0121c5b8dd937ee3d62a52e87256660e5d84833c9270dc9550cb716b13e9c598ee8e2f4a1d6b382c4d7bceb2c4860f778cd87b6b18284854ba57e7b25a55abb56970b38f71dcdaa473b81a10b3c9ed9eb8716b1519c6b558621777cba279b8da7316a1323a8bab7ace2294461ce3d6265adc2d892b37f5128d9b7d787d348fab47b82dcfa2c48b0f5d4c144b907b902bd55650d052d3d7aae4eef4355683bed6c4bed2c00c9846fc233a4f182479fe402ccd1b64b4540182e9b5ed00854c0e52ea70e2ca2b1e3147a5e720a050028269082e6c788591e9f949151c8cb4688124885718bd90e128b8c5f01acfcedc629f377c78e206a3316a10e2e235820412400e478c64a16389088e175b31f4831c661825f1439357931666a06125e90e25432ff628c440e6730b413f2473196270a17f5a8d674fa17f3a8d670fc2ee62bf8c148bc576e033fd43a3522c1653f20ae3931a693a56cbdd78ea1eba7c3cfd20c848114f2be5f294bb7879ea2bf840c6c6433e433dc271c7d31b3aa4e4c6c35864f4d4e3910f4f63114fa38491091a972297a72d4a3d363d89791a868787710c99a7f4e9a9776ce9a90ded2125454e9e7a1fd1f0d4bb88a7b4a53c65e229f55662e3e9879d25c7c35ee2f2b4bb78a9e2298a52e7b0c93ca5fdf4d4b9e8552a1fc183a9caf0f0abd56ae5ae1ebe5ab931f4ab6e3566a5e3ab956ae5bc5af94a4951d1173200e28827a8acd80d3994ae20530310669e58b98af52a4ee3439d57a9d0f8f08332545e05c6abbcb251c3abd838f3aa36c27895ca7d9c8478950bf160aa201d1d1d9d3248bc8e8be0c174bc8773c86afa50e77bf8ecd1638d2ddf834c13df630d24dfc3611eac47081e6cf5f31dc891f41d38043c5807f5e673d0f81cf7fe51798eefe4e4e414b9f203134c5fb058ea12c62b67065e609901146b3c8941916388cf5935e043d6af747e1547d1af562bbf50fc2a8ea75ff9cb83ad5ca552a954fe1e4c15c483e5d02183efbceb3adff1d13f3adeb90f1d6d7c77d385e93a57a1eba0ebbaaecbf1ae0340d7755dd7c33b8f5c3aefbaaeebba3ab4bcbbfb033c98f7e8d1a3470f778007eb01803a68780078033c18006aae90223dbb9c9352211dbc92762fa59452da31a594669fedbad85130c440d29567bf34e979724acf9b9dd6cab6d1f20d2a2cf238aaa76008829f1ebb256b4e4ab399c9ce2273e0454fc87cc1016d3c0cd4e3b35742f714d49e82a1093f41a667eb43a54adbe6947a2d22e811e7d1fa4481941ef50f4da244f00f85228a4ca25078583bdb3c738a54a9ac54691e611040781abf6779f4e2653dca2758b352a5be89fae27bf5b0856a759ffdb6fa853c888020a994ce4a33882629599c6f3c31934e89b066e419eba034c6e9db27dff28f074b6ee729dfbada75dcaed81bb7b565209c457997ebbef81715dfb35cca37201be759ef94a3bc735b3d5867d983a5c0f8f68bce450743fad11381ba269db25e4e4aa99c3215b333eadbd454f2e9ac316ea8498f4438251a3d0a96c0646041f23282d13f52d35c73e767ab76de74ce6de6c1b85abbead372adf68c88eb7b7e9cb2c1aea5142f48294491565024326102176e1818260c5d1144ba2e30acf0f20c0cf4a5c3605b4099d8e832c61d2cefc8c0f411491019639725872b5d43fabad38748af5e39b7dc1756306cafbe351816e1b6f881f54eb1ac806b2391afde7918c35beb1c198072cfade774c3f82db07e566b5131c618638c317ac7b1be7e610ad13defbcbdd3dcf3bc460670ee79f4605e8344baefba38e22d985382b4600bac1f12c190f5824ce3f41c4884327d5802d54d710f45799de5b8877a5882ca3dd44bb08157887c8d3e91a3c88c1c456676421f484a5f9f03ad0539dfdc6e1a1c373e573d48cfa871fcba6d4aaf32a2a2e3b6902155d50e37e49818884e8624e4001fab872a233443f2f908e628714f1c3714404ce90510fbe698b8a739a61c251f485ca469e2914e7b13edb487de8a4164f80886f5d35943c73be7c0b075c1e9e3e50742bba48eb3c29da7418e805850ea9e910549e491684ce431ade2e1b2dae56124ea8e4a1a1bb18f6f532c561389493a2caf94322806fab1f0b1c6dcf8b43b0616fa278228300cf2f8c9c54f2cf40f77b93588c562446a4b725ce87acee7b92020973cdd1e9f829c7cc6b89a9ce92ec5eac51a704f3babcb0df92956836f8f413ef1133f752094547bf3805e6f57f050ea207a66c1ae3373e35b0fa790ea994b4f08c707baed2b8e87d27b75dc163825a72f4bc1905312d2c147257ef3309382529d8f200e12f70cddce898144eff854049f8f32486f3848dfde815d0736d2326ced1fe906047ea69ae2447db314f4151990b9f41046989f139d4fe89f9c085a991a4a4102752eb949a7c53dd2b96fc7a336450401041e0c14847918487ce92e09e4b9840003753e57bc744feba23bcb11c0b0455df3164f704e9e297aa56903674683fc63949ca6f94a73550ae575617d2dd332d73c11e28d6076c12d0b0e673ee425ceb2e4e91b07a36f3781dba50c9fb9a5a8b80094d7f1f8a9a2350805863e1e18babaca6115c282cfb2183ef3203dc3fab569c8547958571edeaf44883cf58c81bc503d6e5ec339cbba8db7730ce485ce6f80bce0390eca5b29e7719d838d7b326fe7e0ab3c5a5f86f3d19b6fdab0beae892b30bc5ec77ddbc73daae943a64b7e56987d7b76bd5ddb7e7a0ac80b7363202f4caef3766bbdbd43fdf452ed286f4f319017987bb42ccbdcfb24f764de7d937b32b71fe59eccb92fe39eccb74fe39ecceb57b92773eddbb88747a472d41feaa1e6b5b2a6795641ae337a06c220399a99196b99966552ba563516b23e51f3ca40d52ddf944b9e4fc60c9c4e43223e7cbb89ce5a0966b2bb1c63048974bfd35a264fe6c9cc3ce764661e43a99d1d831acbb53073a6ac392705dbc9764bd8a49956398eb39e57bb54aa753d9694b75dab952bc6c8b2b1b9b98937edfd1d3f9b1b1c1b1c1c1c56cd0a0747757170705238280f07076700dc0d523625a59c534e3925cb96a8704824636deac68eb99b9bdb87ceacceeee83247aeb5ab9753825b9d17bd3bc21cf9aa561eac39b20a8eee68027744774bd9b2653759a49a217d3b47e5763ce2a44c9132e57252bafb3233f7e426712f87c46d6f10dae597d51eacbb555f2c77caa61849275a564f9a69502a146676ce76adebb1646666ee881b63ebb294ac5a75359e6b767facae3fee8f99a3f74730c4c0237d0dcbc683ddd8dcdcdcb06a563737aa7b737393ba41793737370340c9d81561a34bf0c6c81971190ce78ba03d3358b9673a7fc033f4a1349b599dae751aa744adb5ab37cad671472ea7c40d2bd7aacf1d71d93b0f367dba47e96d39aae38e5c5b533b29d7f484e8f855a9562b0f26919e45d03e73f648c83ef3c11db99973cdaa46756b52a89a9a9a9a8c078ab96775c446289c1131822c634c5294e5c38e0817b11cfbe72d429cf9a01f2e6f1122cc871d6f11a2e9798b104c1fbab60881c573cf5b84c0f2d1bb0a6c2182680b114ab60c81e643de32c41bdf600b42d772108f5ccec2848908e546ef7802cbcc0d60666656348372e6a1967df5903efb64201c754679ec805867d48cb049a7945e67b9ad6a9947427d2fca219865ffd039a5d75835aaf5cce8a449fa8da8459f518b119cd2b5216e63f42640a53f6159856d73cd35cd27bdfdb379d4be50dbbc1232dfbc7a2468be81a174cdad9455468f04094e0dbc60d5a6675e091e09349b34a354daa085202241655a0852018581be512b071e30b9d96c61e78748efa6e64476be7edd14733567ffd940f3a582f811045bd8f90c1c3245e81bac57c7e5974438a5af705ceaed141c22c13aa4c13a83b52cbb3f2bb3674fca2ff44089c931b9d165c71c12620e09f42583f389c5e146ea1f953874644a29a574524a29954394523aa7f420dd028a0365eec132eba6cd39b724455a4eba2599554a39a5cfcc667366339b99071cd0b4a61bbde553174c30c6219ae4ca2199a412d5b8d98034b52a4534daa40fd701b8a73df35e88efe393697501dcd3de0bf183986cf5dbf17c6a21459468a4cd6f7a30ca648b1647513af8ec48d6ca36cad111f5e17ed912e54882292f655c1edcd3ea3ab29da809d2cd7651cad151ff582936ca54e3ce281469bb421467d2c754ea4ca0b3ace5a4dac7ba9d955fe4aaf467599c6fb52e7a19389f1ec155c96c9665d994292b470c654964dc18599b2809d2593bc945dc308bd9a1189055628786aef4e847fa6e4c96575ce3c6e52c464bcf598c92fe5bfdc3598c8ebe5dc7af7cfb4ece099bf3a3d0b117e7b787b8563f212441af0dd4bc7a1059bf8c87825ed5b94f08497d551f0a7a6d6ee7a4e0b6e2362fb35a26fd635b3b2df3fa691e44caef058e725df426a03d0a522f682fc12114d4326781e697b31cce3c7a390c9ea0f12b717bb676446c39a9d7ac55e79c73ce4ae5469773ce39e7b684d526d775ce69ded98eb3ddb60dad5ab85f49a85f69d7759d120dec1768d97796d3662cf679e0a5c739a76c5b5299c6cc4c6ca39aa8946cf794490d15c2110000000ad314402028140e88c542a158340d5449f90114800f7e9448684e1a8ba45912e430848c31841862080000009119208c542000164f29fc68e8ffd7ff82346aaf0fbe6a18806aee0e0b60f9fcd1be7d9064b8fd75fefe4b49a5d6940f7b8035712bf64c1027a264b90f96092f62ab290fc51811e04427ece3a86769edda9a3cd713bfef970ff622c083d68855f0a4cd14a7b0201d1405ea7272c2f0300d71edd8f88f16e98a3baae24b0be5cb9207d8019e23208f7a25ffafe63782a3086017540d10c47f493dd7a5b1b326853771af234c60224e59a3e9cee515e672407a3440c425110a9cf95f9ce3e668a20114c66a1d19446fce1cb74e9bc2b15e11d95830f27884a0890296c26f629cfa68b4d2be5ce247943166f11702e1402119f80d1a1a5ea415e728910520affd81e05bb579cf1d0311d18477f2a2dd2a8f198d30772bd25726f06f1c2a53845706842803ce031e6986204798eb7a6f469a70c6b1ccc67361cc658f92007359c8eb8367fd224bdcef56a9f1087a3068f6a1e2de42239d60abe28e349e4ef96b43ef7d2b7379eff58f3a9dab8218c89a7ba6c95a03c04242eb35c272169b67ff2e416d2404e0c13c4e62c289e2e6a9c6b6689919cab03d741490cdad5a68d185940f1c8aaefca4e10ea2298392ec23b69112d17ad9be2b54233054d85d63ac0482f49eae85825b29d4514c9e022e3e4ef4fb6bc222ee2b54f6f817aced9269fa2e1420d5d1b05472d0c705852e30af7c7404cc7948be5d1e468fb99f9c5285890384521bb9d2b843bf278a514c78a1959c8c4260ddd1ecbf41c8087fd2836d38c40e04026f83bacb210f8bf65643882a7412bfd068072d12958702061288b7d5c0748dc503a886764d960e80f2492d1e006caf7ea478b26ce7edc28ad4ca2f29cc1175e7948676f0a090b83648feb1dcf5a17531c4f3ad0f7b6ee5d731d76673e228cba9fb23c81a89c30d6b4104205ed13717e81663e869006f85f5aa4ae69e61f252689c7a24311cb18c40826de45c55ebd59e994f3f7d2ccf6033be63c8e15ba0a539dae1a4794bc97a8c5cab65d383241a739d2a4ac45e20252b4c778d7e121b2f9b1544c3bec83f3566339efb8f688dcc8007f0384671e304298cecf108a5f37f94aa7641a7b0770216bf7ae7f57c2cd3ad977853dc35bd9ca09b0e1ddeda5ab5eb0c9ebbf834794205eb019967bb3a0aa40c12c10e0e9e667bf81b4735adcf7c64f8130ae66623a837adcc8b297ebe79e152cc5c56a5819d61181f64ba2d5c963f99b8bfcc256dd0261f5fe36c97af52fb4c460e45245d473efdafb0c297dcd80a761b3da04d90af4f495a6edd2ddcc2a03c8792dc5c21f49108e605a2648099f07bc3a1705601d4c8af6be8490bfb9513188afb5f11b3b4a2f904fbcb49f8a3377b17420b845154fab5499ff810082e99a39c3cbf9d4359465a7291a5fa053a8ef43b9e70b2a403e980ae24aede5357a71634236fdc73565a4f06749fd874a24a3794059a1b46ec2dd5fbc92b1cfc4e295e482451684c6e6958f26fb58ffb362cc817c56805783d55933d065cc834999ff9a30cfaaec12d198fb24973e35663182bf2741baec44362968ca4be92ca2bfa4680739636ab80a80ff04a8ab0215b3fb37cdf2c4e6c0be7976924136c05e632648f30b826e0e49f6329f7d6d3f445f657bcffd2484425f507a629e8eb347944c02dd00c31e18b816ee933d08fac820cc899e180fc86e2e1bad11b7a6d5779a852f774aa2cf048c15f9e30ad8350d583c064acf4e02690eaaa942e8e5e7996e2bce041e3a39dad61eac4dff8a5f1ec4b0fbdb614939763a5be04902844d70cda21feca8c9be5eb22471273328515c2d5cdcef5f961e1eff976d0bec962ecb40bd94f684a04265b09452f9dfe73fe53f9c438eaddda4157e565b0bde6e6e183b4f13f09266cabcdf5766a79fa853314749b0bcb593a0338da8326270f86180a92c70f1505648038dc7e63e012333a31d9b703af2768b2107655b245fcdc0a85849b37cdce57ba4c562abad56e072d3d3501d319273bc9ee0a9fbc0bf705b61e6620788a3f5073b7af14d5eec21ced625602b67ae8035c5eafd4bad051175bcfbedd78b3d9e3e9312bf43f6cd0e30aaf8220f6694c504aa3938ba45e16b85077a143d2ab03c68ebd0141a857cb9befefd6cdbedf7e06b7ae6327efaad96bad9312ce8369b7a8b70757e13e37d06dd6c43bdac00b9230798d77b496b02ac353ace695563ded6d5e6ee012a6dbb121fcb3419075d327df6706e9ecd6465349dfb97975fb4ccea3532063ec4332c452bbc677df1a2437298d02aecc916196838d07af7798c7963e2bd8131e898e7d949e1c0728cdfddd330ee12a1d9236102a0f123c0d0e863ab9b3be2dc567fdd1d3946436be5f479b5b880b7426950745c919a8bba3488e6a88b6133d80c63e8e9c4e03acc46647d4967b2366ff612ee96987b08506ef0567f5c40dac157476d7e928503c05817f34207cb0af346ddc25ad730c683e6ace2f0e3907ef94fe7781eb233933f753fd69da65df409e60cd85b765954cdd965d6ebd37898f1168df00cc9853391cc26ef823d4068b170bf414be3d7d7bb53c2c031be68983f88a24ce5093ee828b37be5444f75d1cd92c238ab36f6be11c0c27540e36a000f0c0b33b16766c58a2d4264dc692ec58ec63dd64f80391426434a338bca43cf654447617cafe9609e03397441d0319a1100199aee12d8d2b4b7e3d163c3773b35b2de987a4b8af86ee9b3b43c6058a1f4382384aa4ded6bab0476c23d334fad901e966009ac11749fd4240ae08015b66b246e15916bb7926179b7bac224fbac99bd21633adf9cfa04282b45f5a4de0e1e09ebefb22d0c496fe4409b36a12e82c80ce01666004ba7079145d0527fa4c2c3ccd3f7a889d2ee3b0e5853ede4d67e01604827ed50babc6aa841f0033ae85422bac12dd54bb1478c43d40e9681608e27a67290745e1428da0812e276cf24c9e9b9f98e86a5ed91fd5137681bf032629f1cc5394895ea875ea9713e96937c3fe5a4ebb89ae907aefd22f3ade78ff945b6d642a783e0708fe68ddd35523b861358d9ca390f41a417bb492ec7e67cf3586b2df46d2c8fe4ed10cf14adcfc40552d2523e94e111531ffe5c0bf7841833611d733323d744f12d2adbfd02dffca55650d6245a3a50224e77d554721a38beb3d7d5731dfca86d3e7c82c712108ff2bce920a28d81149ea7ba9c0f6660f6cc43598fd4afad62e9b9b4b2fd9315226d96b0770512a2412737f01e300214f085e9bd220657587fad1e7a0b8b8d614b56646e8f1379322a77fc6de12eff519dc967e7d8ca7a943448f2de73c0a0a03e37cde148e88dca9c11664f914ff9192f40282e848cca1c2b678f5dad898412c38c1a0b15db5509cce0afb56e3e64fdf2855824ae310965b00e8a9f0c83577953591c4bff3348c8f063125b26411b29602299571fa67ef19470d2a845da096a96948afcd9868ba944a8352f9ae3821badbef3edb3cc10da88f5a0e1244eea19e6de3910320477f539f0f984c4ab87deac334ffc1e3049b1d2f258ad7e10d73a79f4d3981a7556dcf613302a701dcfeed9141b16c1df8442f2d2c8e8a93f416e31130d0bdc3c4d0fa166d5292dae6d0193c0be1499a033572b21a6e4ced22925df2c5bf41164be797d72db6985537938d5a9ab2122cd65d816b08ce2e02f6eaa29182d174eec85503716946bb70aa75b4ea9e5794ec01f10f85ca0e64208afae555d88c6b1c1dc731e11773bdc247359e37f7f84b7b63ae8bff2e3fbe7ef53fae1a257579267793129077c3fe3b97a4ead07852b76895de5a7646ccb6a502f7b31b953e3ab90d661e1e274b977ad614ca901f450da3a5904228ae8392e177c2d0615d5d0187bdb3c4726ec67768584c91ba173aef1566278dfac0a17526cf38d839a6fc5c3a4d63b40b90bf4b547da8f8f835f480caceb161a3a721f4ff4eeac783d2a966ea982fe8826d98e1a29eda991f76d5a33af70cd6153cfd24f92e524c1ac5ed5fde85038b585f4cb6933b555e7c4497dfc1ed41e36f4d2db6f321e2b6a17e5ddca39a5c270fa7e0c2f298b199679582ffd16a87292921a6d95a54b16fa4ff0614e232c5c14ecf9cb19e0e32dfad09881361d182a0d38a7d26f5dea41410ca577fc17378991b4bdd172203f587335134f47fcd640a258f20999437102c7874d507cf1de5110dcd2a0e5d97e66020ac37f888d2d6d39b8089c18563321ff9d4844603ecd3e62d952ed7d4383a8437a443f70730085c093563271e5fd0963fcb9e31b251e823376ff0098dae15664584eb065ec92612aeacd6a9a7ebd1bafd9a94c7bc80e68511040cb1a39be370f5925ba4982e2f7775468b6390752aa88065117d479ac399c77ed0833b383c4e412d30936f1924618bb7ef21a410710aaf899e55185314ba5ce4733fc6326421185d2d464176bc92ceaee60efe40dd9bb7eb657a008c1fb92fbaf5d5cbfcc7b8777577ad48f5aad67eef78b95a32a2de1837f1e2a819798b2a321f070526427bbd0c5d929d568e6aa310c83458856f4fa62e17eb1ee37bbde0a1c6e49f644599efc9fe0cf98ef35d48a1d9c09242468f8deda98b41c4e197037d844239fe36211c526bb87b5ab3399d64cd0e5421d30782f445df449c8b605021a9fa49a52260469c357fcc4f4d5abc282552782db763b494d6d5bfceadb39a48d3fee110e61fa1566d64f6338c8899ccac03b69b93c9ec8ca42355d550f5211e8cb3eceb69cc408d7ba7fbd747569c3a4602db47ac98c7543252b24fc2c0cb01f09068eca2dc1135206311777830cae0f376d7befadd935b3998ade3922275f8b5b595bee806a6401471fd11491fbbb708ec2c5ac9a05d39b6879aafab6ae8eb522f6dcf3b95abd607b5fbae75d60a639ba104f0cd6180ac9841ac0c50dcd91c0507f99251904c273ee3e3301d60ebd5d0f343623cb7bf5d45f29b648dda0207127c97d37120beb7c82aefd0ef6862fcc48bbde82e9fa1c0dcd97de5eba2bd1c3bac7e35eb89f260d510d9d0690ec005a2748f858572b24db37118f8a1f6e848ec2777c544587bea4dc299a64e1743264b76a1f1567276772fc37b29dde4a268bc1488b01c03a6d76f34012468ae2dfd4dc1a1a95603240f449ccd99acacee5696d87e28e2b8e9d0a0a03501a0469a24dd4fbf0182b4c00afcb17e11cb1b31b6e44c3110c1286570c59acd677c4c573e670e27a2910a3c5c968876484b1ddc9926c294f59574be4cdfbdb86f2352cb3cdd0b6da33a1cb9108a73db68f4541f092562573ab5461d1677fae80ca4d5d4f11a5261b50b53dc990e728bf12bf6809cda53059084f015d8bbad7b53cf93e3247d13eef8102fcb4f1c2ceeb56693fddade7e5965e75efcacc5f639f5108ab3703f224d7d56a7fd4e0df3eba8b24c2a5d827f2b581d94d7e300cfa1abd29f990ce6fe3b06f14006790fe57ff80bfaa2fdf6454675e54d8c5dfbca01d8392b95e312025f09fddb91f2f1ffad4bdb2730470715afd80f4c1bb2d64ab1f57426b178a172ae0cf691ef16aae37956d6ff8451db978e32df18310499623adc2a9e5f3b342a966b4e35cf6cac11c4422dd92806ecfd1d68075dfc895862a55dcedb466fcc695cd29ab876ac09d61df06df4058420d7a58fd4130738fa66146452e398b5da0f063ff8d45b04d2408f329d61045ee32292b5fa0d7eb5952300b7e3df23914e48f475d2402d3df8bc5d2458d8d8cd8e862e7264e14b5f08d00e08d7ffee16625333f7ac7efa903434d21cdcf782ffa38e0846113ba900092358133a932d3ec6909fc3d9429f8b35003074ba9f17f135b66a3d62b18dafd0b256a504f99a70026dfde6db6ba4b79fb57f60ba3136d5508f36779c4d755ff54105e8532af507697a24eaa544e8d3b08776fa45544b8d02284ca51929bbb02ed4981e5a59a3f3c0b3a5f04c99e9b5e46e2fcffa408f0113109fe1ea8d319774107576e14a580523eb4b911ac1fd3c419b6bf7737ce42615a371eb595fa267b00c7c76f1a112604537170ae0f81f96e513da9849f83dca62bd1f7997fa3f192ccacc944e3e694132b983016e2d52bba5e7118bde9704511f3c3ee1c1e18fceeb38aa862e07da411c94bbd1920154828e0870570eaa45d9b2311987cc7c97026086ab0d762835f72f0d6fc263a46c60006070199bf90cc006c1c48e89f598acf7cbb50698d6731ea87160f5a13b68a76ed19c4281f28bc0e99b0803606199aa71b4a0b61ddfe75dcfbaff6d4bcc872384cb814fbd7f04b4ce1e14f548d1fb2e70dee9a008a4a8e7dd46ac47456db5d09d774db220659024e0911d1cdaad7b08b629502ae6cb0c6988b0da6f3561c72b54a64a8f2ac5b4599a438181a109dd647959741392ff63439151760d926ed97a76df23b719ce31578c9a83329bb05b46f271ea3e3f07a5a5f075000051d96619ff0790de6234aa0affffd970d1d1d132fbf8ce4d3690163a9f5b2fb30b772388a45a3c72a74d6d7a77ce8b2532737e08f0df7830438c55669aae1aad3f028a20ba6944eeaa6f23607493759680a801063e4a8414ebb4c10dad5cff4916ba905261a97260d4ad4a98a36db5a6e264f6642f255fddf93a41370cfb95b3445c27432df20558f119093d15268b7ba1d5a2304020f88ce17ef04285b5694afd4de3d4797914b04d3a94e4496e508cb5f030eaf73cf99cae91b02a75c1e03102c8923be4f26447ab12d2551de59305c10da686d3207a86457d9459a56a50d58a9cf667578476b2e79fa030c3823171ebf4ec89ad3f1cf79a3fd000289e2d26a1e9228fff7c687af98ed476c8c3a90c437a7386cb37c6bdb4fd19060c10fae142ed6f7bb18e3e7b1d47207bdf7a21a0e826ba827f292ba86ca4af634d5f45c188d0eaaee18b93c7d568135053737a7aabb981052eb27d3ec40287e53c081b1c1c2fd1f2fab308fd8ed1c78ddc14194fe0309b43e70c98294577340938e057bd6a8b03aaf77f01392071f3a93bde719f4d227d2aa4480744d01843bfc3d8cc9fd734fb28f335e8da253bb590d365306f34a03353ddfe07ae87833863a59071873422a8eac6168fb07d488e38b1992fbf66145d4cc6f50291c8877f3eeda366f79c18b8bcbd699109937d4b862ee467d844ba53ea48c123d142929f76e5b89b944320e81e03ba51df827cb1e200a104e6ebc140dfcf2920222af2c7053ebeb4cf86aa1566e004796a91ed74ef27523f29548a82311a97041e39f0326b17b196ebcb92deeae2715fbce89d3357ff5759fc08edb61b681810ec93374b532b7830b59c7660132ed65a2fc9feb32bb6b16c64feea7b385dacd4108a552269d6c2278b34ab2b95d8e5356ba042249344b26cc7681c1cd8372e40d27644d7ec854a44ec4a6393eb880c69c6d7fac8b54e9e3b7479f24cdf2502a69e48af7f2a3ff106b4af3d9d824071c2e768de335a013f9b7d6a40c3deb661dac94e67b1c686e58615826397037565662b6b52fb2ce78540af594b2c38953e4f47e05043c7e3f4eca38d13a6a9472f57a3642a2fff69b1e17283f97745c518d764e5698cdb9b8c97e56c5ac8e780d8f80a8b5a0cacf9350e9ed311b8284cc5d08a2ed0f703493bc3d2aaaa17a45b21260abe37b6df56035bd5c98f06ba20559921efa8c5ea9de1c22013197eab07dc31db95459cd2dfc93a22a1eb9784c12bfaf1cc7dc97b7349f9f1f6f0b8198b81bd00643062c2ed702784ae02beca9f663916b6fe598776907d5fe126986b8000f74acc391c608b0fca68b0bc8eed6145ecb7b6c8d19ba81cf8208ac4d8d3fec6f41bbdce6405800dfdfdce039c2e9bd619d2abe38864893264e8cc387c8422af4042353a37f0cc7c5009a8f96ebff1e1b9d28e4c71d203def0f9e4f26989d0dc4895cab1b5134d97a94415060f5e5f97d48415060d2c817d7b41aa3edde850958a78d65f1dfae8ecb4d9ea2214ce6edfc440a04c8af0d380352b2c4300c212413fa90fef117c99f21ecd9e0a9badd6e5abada29cf467b21079a220b95fbb66295762d7a133b62e164db16ad1376e73242c0fde404b81a86567708b7db0f9e123c7dd5f424be0a16aa06da3ba184d5b8deb913c4970f06e864364d7f4b7297954733b0173b1148b478cc65298f50e126200ffde8c53dc7481efdfcd0c83f62576a9c48313d0c7f187b25f05a351bd1e53d27f81dd28604cb47c2c741e0059ed66860cde9c091929dab52377d5cac90c1ef8d24f6ecf05effb8606eb8ee45e06842559caec5dba4db83e5089b17280f10dcae1480994e59d28159cc4609d803e68742224899a883d4546b10c93e18638ff93df984db2ee3d788d8913298a3db606cb79ba3d026629a47d57ce05625162698d2c8213d228be4cfad471da5ba0df7ee913b84783e1c664cff5bd8f43ddd77895ef826de8a4519997a724fa70531762c2dcb337b59336b95427993adc913bea868842b114d18c3f65db446a5efa39829f1d448c7669e077247ee346aef487978b040bb299f3e69e8d9a0210a547a9db09f6e8c929d9ea87ce4dfd6376773e0d1ceaeb030a15233b7df0d4a30f4f83c29b3a4280e983cd28cdb4503a09db174ed706c6a710d95018df433b9481a61e43573288b795a0bdd504315c87906cf081755e7c9b420cdf22168411d309451bceb475368711afa460b846e9deedb10aa68175200d37c548d065d5b18d541b7af3e2cd2835abb311b7ef59e4743bca82633c32ca2b39e69a8616c92e97d1128b511e269897304d09fb5c1ee0af389b5e9e1f9ae2a04c786196820c3bb6474d08f49348338cfcda351c4cdab18c82d256c38669ab5cd529630b32dad0f8a5535fa655284814283ee2a09121e8cdc1dccdef4a2cf33d2a4d602e7786c730107a44355f27df7f829da61a5679a0deec6b4de608a92c6f3bef06315dfdb1e40759d31e54c46f77f996f9b46bdc26d20a5d69ad0d8d41620222fab206d1b55cca2e231876332e2062add4843fc770331ec73625a35673cefc520c7122df18ca286e7bc3d5c155c9b00195eafe425496906c9034fafb0b055471bbb01b0ded2124ee6acd2dd7e1d2243bcaef4ebd527f630a55d0e8353b31026729a41e3a06af2e11d17a74c69cb91c93f2da5272b4c23e71567476395227e26903976d1ba9cd0ec5c6976eea2284aa8993880ffca6938f68a4693e3996922e02e4aa2e37e95ee0eb7f44e30918d36207eb294319fbb3361d2d9c417f61ab53a058b3dad05230cbe9762d68049be099e55e2378ef5355c2727ad312dd352f475e097a5b5154f717cc95499c080192c93b17f9789c82435e4a501d9aafcfffa9b346b08b3a6f01372db1119f34a85052f1bb5f4993d9e9a490e4620f0dedaf03b9a0a93714c9e61d2ca2387ec4352579dd2cfe0911e2d9c83efa082870307a7e424c41ab153f3d68e33c1f150607ad32ba340ae0a49d5461c72dfc1dad48dfec00c098c45c291f9a8fbd97e273ec6ace478e9936c9c64ee9519af60f977dc588b46ac84144171158d2ac8e73d240aff0b71cf7e5f2e56cfc1b7ff0658702503668cb93e6405365c75b3c02fd6f76b5e6035d0fa8265a6abb8896838c63b6f07ca9ec6debb5434103a58091f4678a21f40463f90e39f912b09a90bc157abb5ef9afacf21d9b870412ef79c9084c311c57a77c52bc7cdc0fb905abbbdf101b30d76fc51344a08da839f6751b62f572220703144dc94ce6ca6b3ae4423fe1a007ff00ec964b499423e8c115a74fe8d1d29c2474c96ccd826ac0f6ccdc54a3933059c61ea97097a8def110a11384576b6883b2dc7c545c682904372314ee53b788377cc7f63e764e02c4b371de1cdf9bc0c9b2d416bf410e648fcd35b56a0920541e38baa51ebc1a0d698ed6e91978f119e1fbe2142b345cf0dd6cb65056fb28232612e81b00bfeb16898326f407921ce865043ea5d41ae88ac713b64e5e8b04b2409fe197d66bd966711dddd833fe56510fadbe183012f4f224d4a63c94abd3be787a525bd97f42d24420c3a6554e520db29f966e26b77f30f5a4ccc6bf8bb0abecff13d653a0509c5af6a3f20978bcbb0c50a342fd285e907d8dcc69dfec4e4685f527ae303314b81ff1f4f6bb86154683dc3255d88e02cc7137e56ee207d59cb3d2648ece0b6bb39ba4aea3072eb786a470f76348bc6876f1a3d7a12e096cc61cf05391de2195c5da18bf8e5151badb1ddcb77ebba8dfeae2974c7cac220fc86df3966b9ac7a780616582734e6e46f2af6ab94198af87e30821e14671e327090acb6dea1c9a6dd26f3c61a91668ad9bae9955fe8169e128a4c3f27c0763b07f66fab6cca61c7d46788c714adc61b0b06b3a5a990c100c9963cc3a8d52c882f159da7de1d25e47d27fbef8ccc8b14756af4e6aa7ed5c44044d4e6f82255f20310a9b2a2a9f606f3e92f4ce258e8922a03d5645add6a37d0e3c6cdca419c5b1ebf637c35af91fb7d8095777f0bc2007d0f594306bedfdd0c2d21fd5ac98262d17bf4f5fd11ee9fe0a9834d169674b14c5a1f6be484a1415eed7bcda53a03b2b8d29e7f88c48dd1c6cec029d19c251599f77d4c7be7559538d9a60647052e369b69b5591be3a239dd174eac14c3edfa2ffe67ecc646fe288a4b344b812f16c4b267d5b37061450e3f221a009ff8a7c33d2cd221161f6e5e98d2b68a8f2269aaca31dd3a90bd58f34b0bb97f4c24397a696954eef00c91d78dff79bd62cc72429a386f0ab5c18ab233e1ec65d29dc13090ffe937c6dab96f602de948cc23f94f4b0527225f45771d2fb7e324e82e8941952f6834854f322b6add4d4feef6f145c6e7b83b40257d5c075c195a25aa717f5057878093867a37cfa88567ccdbf5245e701273499f07087a612c162c4dc6811dc8c1c85dcd7562b0764fca8fa22eb6083dd8d1714cbb15dbf7bbd7d53152bc075b57a02b8998ccf5db793bbe6390f084c08c8fcceecd28866f7c65d3881dd14b01b2ba3578123b32537bd2b94aeb807955493ff9a2247cae47ac149f94495fc6f8386ebb975e317f985653b8470f88f3fda46b5cc10b710479e538115a0c31dc5c915e84fbe8898afb60a8eb7859d4c9e4a4cdecf78213d582d7364bdf8a96719ebf2e61d146621e2ce7c5a7d4ed09ac0fc8dc0718337aa034ec959202f8766fdf9498afc70d96d669f84a8321b99c861123de3ddd3bd8f343df58af2409d6768ea598c19157f457d61397d423397cb72b838a5a0124cf40e70ed6a5eac28fae45f14b32c036ca62a44fca040be83cd297d074c766004442443f3192545fc42807cae8017f388e05f3f4757d7d4ff9418a8398399198d9c0f156554ab148c41e1116da50a1e479993096d99a7550d32d91cbcef324e88d937b818f740b5220863156691625629c1d515d8c2e5c534802c4ed0c0184136f5486909c5827d47cb36bde965417342077471eacc8d083717bc232341912deec0c4758667aded861c6b1008b2f923f7f59a08776db599aa85943a46f404460d21b5c5310276631c14d81499638c3a52bc9f536855718eaced981018accb4d919ed09a0e67af032856990083e64c2bf033ca083c302e31417fc27054d5cc348922e1b5c5ec06b29b5640fbdc263b0739faefab3bf9e2ee74148a0b0a2649f4cbefe0558d56d558e200b385b0fea740600cee983eee60b4888a5ba70451c3c915c87b6234a2dbc7dbf27d75b99f04f0ae131266df5e3838d78b2fd2208ed9878b264d01fcf1dcf6ef08d2fe515033c044d2137e9947510076ce2729830a286c65fe68b45e9ef6b5e57b815b76bbedb63bfe58840b94dc54087cf333be0c2e6506a8bb0c1b658cdd2e5902b0dd8d33f22b8d8a27663cafa9fec5d9ea2e3593032095799115d8a126050e11ee8d9768e7b29ada6dc698a70a83dbd61640f0b15c1855b2e7b14e884dd8554ac1ace6a8b459ae82db6e3544c666bd9ba21ded26a15dc8029e4086efacea32c9f65c49cd37a04bf8c134f7bf24efc9ec35c84dfc09829ac0c416f9f0082f866abc5b9d79ff17ce56176131f4c6de12aafb6c3a2da268fc85ad0fe44b98dd16957860a83629909793d4c523f3e153eaa17ba080d464fe79783f075e00383c82ee8dde481437ffe6a2437f7c7de091c61b502c0f73de2a8a4d3aaf0ac73fc6581a41fec7fd40c601cbeff379ac2476ddd3fb40dd67fd9184a12c844fdcc8049a018b125bedb1b26f653e0c5acf44abf719f9bcd4f63f2717512a18a16f59839f7f229b7e98d23e70332b45d43e9d291b6c9e89808cf9147e995d9b3b573e9f6c23fc57e8d82512e09f9fc8df42d441b1a4ff5f15f6980fab3e7266c05b02a7bc55a00e30acc21371d6799715dfeb6682bc5589d5bc3f5a1b37508930213dd975b2a64a5ef32ca8df0abaa4aba58ddcee27e0a217ed0b41b3d4f0a35ea25b67e7ef84eba0f8b19187aea89a044f2182dc3a955058cb655c8ee2d1fe7248def4e4d9c2bc108e91592a524a549477147d6e5da050cfbb4aa9efbeb9a80a53eb55e265843cb9e49daf30112e13f23fadc5ba9ccff7145e44f76fcc977e8d9f14aeb73e1e3f33b8965caca37306a19ef54993390b223807d095f196851d01e038e47036848ff9bdb28bed176337fcadf6155da87963e82fc3bc1b0bb8757abc3edff2e71dd60558c5397fbfe22b38a5cc113b4327a355969944b150b4163ccd8e2e6749e1a5ce53d9a681e6d7a82eef2e11f1cb91b9991d9220b3a3c97b386fb5bf3c13978bcfacda42ae3740a598b578c570ebd2331dd11646635ba5f0b43ab4f85b49588c291deb523d2fdbe9411d2191b933150df56c403e4352b84f00683296f933d37d62b446664eecab1dfecebf26387c4006a8e2690285ca6090834459103a6d130b847e4660df38acdac0e88c8f6ee517f8075cfef3332382d6b3507b25c2014f9b535bfe12b01430c19a446aaf53b42c3a2fc0b01a22c3082ca0ee5223ddd1886cb0e1ccc294e4eb6a289212d91205b134cb7824775ba1160a4a410b43898ec88a7ed23dac3b76bee90166733d9cad206fc03ad37c5cc8c422fb66c2b1009afc31a883a8d3fcdb9c9739c10ad864a9d6224b416ed7558d7447a375184c17753531c3963eb12cceda0d55e52c3376f964bbae4af284c663cd7edcb0e0b6311a64a9ee02cdd33e7ca4a04c63512298dd11d77de005e77a357e573f61dcbe2f79760f74466025601d8cdd6041e41069b301ce5c906ad82fd133da63a30b76efa1cc8ec131fc6c5b6b7af01cc743423b95762da6920dab52df1da296e402c22b562b8075d5c7b900aa2bdacaec04959c409038c7a56583b62eafd533ac47b6549ceb58fc11a26c8a098549d859a65d138148ce400b333fc9c1569347ec8e28a389b1a823cff8b1a737849bf65c0bb1e57cc9e2a1babf566b9b072087acc605961aabd9a3a3acacdfba12677990a1844c856fd1bc7783368ff8d45488e2865972e98def0b71456e9f3981b56725f71117b996989fc668b7aa3ab0310179e1138b8470e6c40e5676676310f5702e688e32226deafd2f384cdb4e9c1e82d561665b1941f35a827c3712b7534857bdbc364c717aa84b483e222e40a49a5719daf60c5d8bf084eac5e7d4b709efdf18aaafd41c68a748099202523b9514335fa1b91d1deb58cda96fa9af8a0a433c6a7917b02b3296a7c7e712bf9c22d80fa43d794d48e804cdd4664759c204021df48f8d322bd3974fc6aa7fe260863269fc095ba429cd1579b61260f510b17b76c3a9f49feb2f15c8eebf6b34e381bac56ec6d165c8249f82d04544943c06f2314571a86df22d973422d95487717e6b6174e4d402b47036f83b8d435ad88b6a89c23954333a5f741406487c08cfa14e8e80bf28960b14d5007ce296434f49438df60606f248dabdd7b886e1343803a558abd4e92a406f08ac1a197fa1f7e0de6336f0dfeb37073c3814983e41cb5c39244106c46f57a1716dcef93c1f518bc6159df9303eb2aa1b72c9246b1dd3b587904ed67259e3ddf942b65ba6c28c760f16aa3e0234da674b2fac299772e568a2ccc050e104fa9bb329959a63627311a9c751d69ba311b2f1276d714eeba516d5929c28d4db2c4058572d700ec23631683883f1a5a4ab77e8696c3d2c3d5205efd5c9ed83b17c64bea155e210f3222b4634cc0b1ba55c9c1dd36252d0571532e19ad85ac6782ba9d188ea7e2e62befd8a1830345bdcbf4817feb9e09615121bcccc74468242f587f826ec8dbb9aebdf7fcc83bccb614f12f97092f89174fdc64227e1cf1cf55d190260c34465d02d3e46cbc25c355f3d2b6f9dd23bab5d7d05715fd219f21761c0bc14feef70380905e81fec4e51006c2063de1d29ba01e51ea003029ee17ada4a40b5a0268f02806805b397347f5c18441be2415248b266af51502aa782ec0e4a0a5aa1f2a5472954e89ed508aac35028f73c826c640d828607bea3d022f1553da011e2d6ec55971ce2ab91729c2dec729d05ee70eb1fdbc3ec1c2b18e1b84165a9d8cbdf60f36df37edbac438f97a3dcdf7eddc7927a665e6fa2de32567b8bb0a83e33a12cf80f7aa66f6e51db30fb1a6b280a3154de7975cdca51c4bf2d2dab8300eab22eba48cd744dd50284171c8eabe340e578e94213a91befc86ecc2fbe464ab0c270116805c78580891e62974d8a6c4a6a7db6d29ae12a0170c251aef821a0ec29a9a73ccaaea1af5d45cd04c94e32f14f708a588423fbff5ec18760293b515c8d633eb1d493b41c3b07e7e3663b301db2afaa808f781b50ba5d79698ccf61d1778883804381b7afbdb794336d9757e9be5b3f4acb7e77b6d81405e88dc99663a604333161c1ce956b421a3a10e7d1e1382e3b42e939a93d5288d40a2b010d1ab7039d733b20573f24fba95514c157e3629fe95176aa8483566e0aeb91080335c69ba8cf5f9c49fdef8ca00cd120c130258deaa4031748a73752555c11672488b72d222e46014aac8ca717b0adb6019fa929e91bb54f6e460b3574e0206a6180e73f443b1b3a392fafed0862d522104f3f0a849d084024fac78a22797b75388ee8ebaf49d43f5afc5df20a58e21facb105403a93196a283d67fc87f1fe9369d486393902df649953836439d14ea05010bc934e20e30a38d08a6c2eeb10401837e0cf467014f5d8b14a4bf36bff8bc8e8a3b8a6deaad091b7a93c416d6a359655a3573120fd25597271fbfd7440fb61d1b699bdf8c2b6f269c268936592e4c1d4a48ac2c6f0d356b1f0d401f09bc9769317dbaeb94ca4e44460a7804949d6a509c5e8474a009f39b11111ee1301bb8da67f6c731168348ed237c14a181c2f2e7eec7780f4ef62f06dcd9310899b98088ceb63cda4dfd01b73c58f1b60404bc16892216943893d860206022d48e432670e5a09bcd13a7eb6e816c54bd43728eb07fc06b5c9fef12dd584cd16a9031533b8e0506910eedbe9543967b510bdd0c83bfabf7e3658ce7982ea4805ec126d7fb6ff941ab4500ef9785de24aceb972eddcc530b40eb0c3fb6132781c72ba9cd14d1047ad2d35aab8d2d6b92561cd5a5c8f7289bd3d156f485dfffa56a930301aba2f234966ec1cadbfad15f90e0c93543fef3050105e222aec012aa13e3ee5fa9add727d4acb5c7f3cda5c7fce71c134af5110f6618ed01be10ead3e932ca2d738591960da33cb5488bc1d05e60572af358c9b24adb509c8a69c20ba8fd0985edf58663bf48a1e9efcaefda41526b5cf097279fb1a408470e6a5f51750cb1cb11eed3c2abb62ec066fb1eaa50d23ed0b0130343eea8bac7e29b967f185a4f791035175ffa813d53ac1f68f00c25261aa9620de66b839a4b14c7f38caa1893062e2d96e842cbf446633461369eef9989031afb7c1aa8f1203113d0dae85f9512039e3e59b320b7ac7c57802f9c1eb86685152efcc1040c34746c80f8f9d0645b86fe9ddc46f7ccceb074d5c23ff8a0124aec58d0f9b61dbea9ab79a06651656c466ab32cc0da887841d04e7e676ca6e9bd8d0c44f78c25e653175ada6bedc83c045634813d467ea3f309bc3b78dbdb3831bb334869d0b039c67aa815ae7223cccd8924a2c2f288e75d99e1d183cdc950e6659010cdba7e162438d29e1a11112c7075a8577a7acf318255ff31f87fdddab6998cade5286d7eb26ffd7ce8d2ab7b16dd038d342d758ea7fe3c8a62c6fe454dc10a62a05be3a4091b0f2d89e5be4af71c19bdd6e68a94a8024ade173ef9bb07a364589f243d515cae3f9a5c36c5c9a30e97dd9f0514753b57f9f90feb6cd5515507c3c68cb3450a6cec3b9de700b50fa037bdb0ae3c724a29e66de505b3232477befce706e9046f8fddfa092070f360aed66d40f46f5e1a53cc787db8576dbde0b6020daf996e15542d9e3d6689655afcc8faf2759ddf0e352d6a931af7bf3348d6a902737edc7ae599139487365db0489ab3e6e532e31837b013562746654eb96abc57712ecac917187dec697072241feb76fb3ea64a59cd749e70b565f6683e3b28b0facb311459962ea470f91fcf2348268d898388dee8b35fe72d9309060c0fe418ddc10a597444894833ad3ab7b7521596ddd62d0ff2d646dc3d34c49f65efd0d27ac4745af7927d22a9fa1bbd1c384aff598974f728919ed99826d338556c68c634d7c3136cca5c4b52e87ea7261317328369f338d28f3ddad52156d6856b44f856a4c7b6021ac9eb67ce32e8c414188965543def9147c51d09a48b936b6392e6e747209b2457d4ed647b131581d56197ba93e9f925b869db88f3219b64443b149c8006e8107137e6bf080905cbf7b69d36055873520f5c6d6e3f63d1c145c986a6b351e9c14ab16ac25d19c6aad280a045c2152da648af6e698caf516cb132f4262405bd2f14ff9cd400b409b31a4c0630c43498d00ad64a188057c352110d3a5be6edcc61a05ef48f50fb46857afd3d03a6e4188584dcfb375da9859037be96d8ba8ac47c03b945cec39219c3753042ca0055af449a485c6e809abca51c8007e317e6f32ef13be16a40494187bad17550a14dfafe82c22bb45ee5da870a297d16ea9d765afb45c945a07273705935e20f78678919a2dc7588c5d7491175af00ddb7306639aed6e80ae9601ee83a52974e3e05245b8d10b80ac01d55e89654aa4b00757ef9691413f5c4e99152cc281aa78e76662edf8875f553c52f9ecbc9d3c72fa8bd4f362a200d2b0c6f82441a834f1683abaa29bf4e7c9c539f54daa0c9c588cdcbb7f1bc3725e4f0679305c3833818b60445cc299f5ba62e460f49ddd9ecba118488cc70f8a403a917dfd100132c8033986834bd620c4d932358e3a889a5734ba6dad0e7ad36ac42ab7777aa57f46c16b656ceb775471074c658652ae3b5c078f265ae1d3d13a7ec679add0c1f184504711236c07d002f75a0c79e6926997463ba0e1014a4eab215df2037666cd4b093462b64bfe750bf035872efbfcb4098b63cb1c45c2159fbb295b4fc3cc41cecf609c27e8376d68f9d5053105eb536454a65653360ba5e9e9070f793d5648573c706141b3f7d29cc3326942f552a4912452f30d8faaa0bf46951527144fe6c65e021159d17417c46990c83089ea19254cf7940550ecb153b828a2741f49e97cb27bd64a7f6c86e24595d883410cee2c8c8f13026fd29ff7469944730fa8ec5f4326c9ac209fb4601fe7108fc0644a8349aa79367538d9f57e65aea0660fa46705ae44336a82736d830be4b5d7b7a57a8ee74dd373cf0e369336a4113964c6c8efe5816742f5d6e0b8a878e02ffc56b08ac6daa419abf4de6ace9e045e1ac18481164dff31c6c8390e2d8a26bbc18b6101ddc49bbafdac5de06f36ec47029eef35a7d1055e52d0356ed242f77ef3410b13bb2055aaad902918c86532f165d5a43874e1ed2f9fb628eeea04ee3137266b26c46be9616663324a7eb115ac08bc49ac2ca13a09437dd676e29091c6c93581338368fb9041cd9640d81875e3e8c1ebe6a6190cf6ed80fbea8cb8c955daf0d5cc351f507c0bd38890e6a685cc336d604d74ddb8cecdff93942420ec298c8966c4c4e8a2b58afae45f6cd3a95c5959fd698fa9265b297d922180696e6061ba038f2ba6a9a7c3910a0d075502ddfdc1abb262584a12f5cb89737bac941bce77e8724739b777f45d9bc3fc6b17ddd7272e855e535e5f83fb0d40f9bfe697d5ceaae329f4335a5b8f8e73f9a71b46332244ca289d27af768765a7128277a55f6b87d00f61a5fd4d688c61ea05d121ad0c2c94acb588d083f03cbba0b95e51948e2d8180095cd8bcbefee9dc2fa60bde4bb50b9f2ec64262ce7fdbc8f1f4e4ebd9124a900c0dc3901eed976e76aee5643c011f5903fb7b5d6fc7c6f9955976bb882373aa9a19daab16818bec7238f510d6b130476f75abe55fcfe2b5bfbc3434f7aff52ba4b89613f225a53213b056bfc5ce18bf5597aa26fd297412127d3025aaab88fc23274a04f9890818cfc0f6e1d565e868e6a224d3d4cdb35e5c18dd813b254c523ee417542faa9e47dd762e6e00b549aad875540c8d610969db8d25b27bc08f4a95e56a808cf3136efee542509da9ee01f8c8c40e0b1d532d729095ad820261b0bb67d380ef24491421aad56ad3bab92bd96ce3dca669815e6fdfde3853310168a4b9b98b2a9d24f17b0af9fd52f1b77aaff786b399c355c9668751c8fb6945d181a6480540533f05b00b40530348fba5046ec0e7e1469d623f7ef6e56a68510d9a8aa4999198a5a4b3df126c9f9259b58cb5de0b40138c9c054a93f97bcb41c676cc729f63ad8099aa9258cc50c092b0be1e1cadf78f1a8562e03fa4bb277c541085c2ce5a43f175552394d2ef4e8cb2cff9aca3c435045132c9f744ea0cbd91bd92d9313cbc855d78d14c66a8a9aa04643089704d4eeeec17410ae433f4f82a119407bab0afa9a0fb46fc1e4a39450e5779b1e27bc45817f01adc87e31bc94f8164f35cf90978d262875ea2a09db6e1db904ae1459f6116c4e5b70e6464b6df46bd0e32d38299dda88798de0273d35b819d41912b2ca0b590f1cfea0695ffd1ad425f50dccf21b7e26680babc7f618d3a7c1a8da298dc7a2ac109465636894f6a6d5a1ee9ac005c990bf1499b1df7a35e26ff2d9a8efe6de905af224fba50573afe7e27a1c1540cab2df551b40a8261b6843d7a2bc0df741ec3b5ef6958dbf78dde971a9cd3c2164c5857a0329ee21028736b0f01e2e13964fc884e7ed3f444ba6954a6c2ad95ab3bc4b7d5214cd5b24aaaa873b0a62283affc3ca5fb059e22edf08b4dca545bcb95dfa8c0f7a437aa32865fef6449f78ce434aeab8892a513f7c8e297b31120e6acfc2a0fd7604e2cc7e33cac890afe8a26829bead36e16df992b9a3d3c02634e6894b14d42d1ae3d7314fec14a5adf0312e0e6db7628496e3fe36e544eb8aefc259c9ff9669f1d52ebd018528190cf22712776d57a601c565bb3eb8e53f8a83cee2f4e74d409fe0f4673882f7f1671ba31e1e184165e5ad5ef25a1c84f0a1d32541132504d2365fcf4f6f20487a30dfaff37f5de0d1e16f95902f0519693499c21d70177ca59d328e5747aca2c44d112c77c68590785d11ff0d7457af70b4da2928a3a2a41e537ea20400226af0d43fd706c6adaf02fc25511c45776701501bd99209261a0ef9ea6c5fd2135207625768a6b6c1b76675cedfe35a2d1e644442bb8a591b534052f18deae8ad244e49179f25b2bb262e07dcc69e10f0416767dfd23753d14b02e95bc13e1120807aaccea211f38a3e175a1f00e7661ccdaa3a7d84ce1953aa0559f589fcc861472d8aa649ba570d3826db018c8b139744b3ad86dbbb5f8f7636aee242345d2f69cb73716688e951168a71df29a46d256677aa475f064a496bf12b5a55f59d23d20d1f6b02ec99faee3ceeb2816eef18145897ad3e5004de3cac2952c991448ee9dfd799d443b8dcaac4b2d9a3149ad02875abaf4398a9ce61cada163b4db60e5fc7ac00aea85441ea954cb510565cf9ad180bf9cc875940fd64267d38dc43439d32b7e7a7b5d559b9071989ce64eaa207fbbe7a7b9a62a81af160cc0db45ec754839323c9dba536cc3a8744c9d6545c5c9961a935000209900a69f7e9cd5aa64dc758592b95b280ca642852cf9bd066b0c638760e342501216ebf9d5572b8720f8af6823fde015d8fd670e788999360826706fce5a4075c6804419cbaa6aaecfd6aec0156ace4b14b73c016a71df1ba85100e507c591273fdaf2dff7681d87d8a105a2598df620a9a3c369fe566a698e53700415c9d6dfa1f3461ff3c49d358bab6ac1db15ce41c9c4f6ec0bb8cf8ccd417d2943d0d3217de16b69a683590f4f934142803974ea00398b8a578c71a8f10d47fc1695ffcc09c0253b168cdd86bf78e19d839dbe23f09177e29a954b36a6070e86ebcef4f98aa3b1d57a22eff3054c69120416103912217574ed8b3a342c0c202a4cd42ee39c4c4750c03043ab43ea1e79c8cba3c52b3a3ae485fa76000182725012c438e703e5b41720448b9496d6dd2f443f4a4babb8904c8c64228d3a04bef3f901839ff8fde01ebc083e35b064c541a623390beec1161c817a70fa12dde79d7f2906bc47c6bd58d35ebbf9cdb10f6d3cad16ec919147063629c1ec10a9665ff5a3689a18002f6aa2ad4f753722169f7f9004701a9de9360d752020ff6b69cebab134a89a6df01ef807352cef8f5ae710ed61d3877c56228063c116a8e18ace44e333770f1ff68b4ed2443c9423cdd9259a3cecac4b73caa0c17006c914208f98f612a42782a1ba6dc7960f54cb947679c8ab5de7e01fb2cb8b1cac1da7dc2f774f9f45b6cf9142326da9e18fcd4cbd1a9537e71d544caa68af42b7c00a1746b18213e740c77f157d4601503ad3adf47bf550147aa18a3fa7a1833570789911cdb91ead288d2a0ef8b2b712e1b764131045fea1f15e1ffda56e891981df31056e8bf4fea02705aa21d86d6cbe64e250ac38fe22d295aed46b80a9e488516f4399375c94634a018c99a9aa791bcd9d92d1220cb399389279f8ed1c43641c9aa4da06fe901ea990f89b82c96e06f1b4c0640806379e104920ceae47193c6a0e10faa12a8190178b1f91f51ac9d13afef79c311ee3b305b8e153145eed12005079e28cfddea58c7c540d5fb2be9a0f358a27017e7ce500f95d212bd8921698c0046cb89d7ddd55b3272ab60166403c4af6bdb6ef5065995ec0d3516a53ebedd66a30a09c0ec800814abdf4109483989c025fecdb4e5c60961f4847d897fd6c5e17208619ee5f4808e6a8893d94dd8f6d75435b4950e8613d9a494aed22246acfbd5f6d1ea6fccbbe55e2015c39eb9931b834c0a1005c0e22ae39448e7064666fa1e57eef51effb5f5f3d26757182fa671c080e750b73a5ce8daff689e995fefa13b2c236c92ed712743de49e3acabca27032a545d3d44e4d6e44c3e1d0b50bf826e3e1cb56e34f8c23893098542fa65d0e25c8e36ecd2543f1b3e8c7a55414f15f22da4222c1b082e092f3bf1ce8e8f4e86ea0b52e4e1b2cccaef8188a77e408c38a6b9db283c5e62d532574f2eaf04e79255931b374511335f294d6372330e40db64590448ffb4db772ae28e414e584096c5008542ca0b6b24ff4cc16e768bba2b7eb15bb403355f2b71017a826c3ae84ff74e8a4c15f4983d963aa803c6671b7773eed894dd0cb1d851e18e090e02ab9bc1e2e5978eb8610e678bfa4a79781b55100b5ae63d818675279673412b25a4dbe495e938199b1d451ca380fec37458a8818599facf27ee485cbe5d9047263fac102bc21da2ac05c17bd4ffac898f97fdbe18b269de11a4dc11f985acc2b08c2bfee0e72118b66b564dec62cab2a049e78fab0825065770f9923cf206703234615056011686289478f38eaa753249ac55245061689fefc4276e16fc52d534d07c338c071a43aec8feee2d336da68c25c7a3ab69da91c4a78db5443064a12e4e82297a4887c3c9cdc543cae9430b01a5414ad6c11d74efa64262b95727a012d8c84e2bf6982b9fcb01f05140930144d1225fe0852068c187a63891991a6112d51052a5e804e46eb75d332085ac0fe6657c0aeb8c8a03510138e2030d37c8d5460b467038a11723a23c34d6719e8d9132bd789ba5e034e5292cd2f7cfa464e662dbde2c36b48c970c6f25f9b5d279bdb7924f2ce6544fbab450d61fd85f5a7383c2046bccc02782fe0c898cc577d0dd454e78966b1e0f3c4960a23e273e79ab288e839ad23ebd6342859e9e219304a14041c7b520ba0ff872ab7df4f867dbe17518375e8870584304d1a2ab1915920c9a2253fbc4aac7ae31a6bfe3bf8289c39ab050f8d0a404de438d4008e7c92043508dfe05b13329afcc222ac58e71dcc1989ce71c3887eb372b121d8b98a8d7c7c62d3a9236f001efb0bf7486a072deb0586486b7d906ba7916b63569a47b1f23eeda1f29a27ae09cbdbb3e609068723a45836e67620c0edef78b816397ce788aa37a382bc3bff71e0ea7a8a5381713398acfca9917ce5e5fa9a055880f833b9b849cffc33c66e3261e84b83c58dd883cd82d7c25eeb67f849277cd96394875643667fd7252f3a6a1a9490b8b007a891a642dc1f17c7806725acfacf8103d6b13ff3dfcc1c535baa7c7694bbe7afa6f760f6f2e25a1741905b87f3eac92e134a11544e898abead315d6c48bb0cd0ce659d856ab4d8be4f3ad6e89bca11e564776cb872b2de4e1027b6f5bf6268c75510222e23b4ffc5466cac8b4965f7307337f1a5acb081c3ae6348453dcd911520dfe1c7f37f13efabbe5b41471059d949f7ff99705646766d0d22b03d9d0e22fc7fc1118866d0532c93346b5667f1e19bfcdedab00613c583a511cd6e290718b5b1e03dabfebefdcdb2848880f1d4677a613451549dded809b4ae1a37c97300f5b14a5c0502c4849182f7b09c70b7f97eb1d881822bf9759c214be194582705a68684773e1585d5dc9dfb5eb2438490e69d4bc8ba824f32d270630094d38ffd155030ba14deb9d6967851e9bfcd5d40855419148790b5f7dfa57a7454940631546bbffca85a1c7cb504873a08eec8fa3cab4b95e14410e8982823acea2598d0442d2b2b52ef0a945d000435a712b9ebcb83c5857609224c4f85c8b5a16cdb61cdc70cc3e2cb49bdb0f8d8b08d2629292d1c1824c4505cb0c0b2de099139a7e00c45f3a7d103d0e5b79b79b051928a9716ffc305a9f1538d7ca737a17d8172eb2f8c91346c7494f507c83addfa14ea85a4034f87cb0b55b182bd0677323ec4fd5fedca3c98437145c7774d51e9ee6e0619c5b92d0faf091aa287eba56befd9d68af153e901faa1a732b6bca317802e5de8ab76b37a31794a11b42decdbc5a7546c74f9ac2e250227dfe9e51ad3e8e0da9e9bcb715878d975d19b29ca5b553fc819446dfa5142da36f690d5d219e069ac8533c025453c27e4784447895bc3a1cee2e25245da0ebd90cb7b4d48d77290252aee1fe9b733a5d9326d7845567c45c42999a7c5eea887a0c11949fd4e383fb3304ca7096a383561e778ea86547655586fe2eb33150a076720d71688a7c74b55203a84654b0f19be8b977ace46f2bfd03562f885e974a2ccc41375a959bebf24c30d0067e642d87d4ce68a362c150144ffa6193ba7049bf7a72b2bd6c29140f415a71cb913debec9d68ddd697ef0746fba33cb15fa5d4a06d52d80bf87dfc0fa42ce13a8500f7185626c18de573f161e21069b8bbaaf86a0e48e90469b847f95e8be5450265f3ac956b806ef16c4b19010ce439b5804dfd42d0c64811eea8385d9e297c08de336db5bb84e61050b18d7306e6e7803d6771ecc5c313e08a3f427e72f907ea53207740e4606504c5b5bca2243ba5031cc9314a441944f1bde63a9824c6a848502a92a7c21d208ce1c80f0b925bdeb2d4d86571002150038a1ebfefd87af8fddaa0e27025f92676744c362b0a857979ab99f24d7fc9ecf6eedbad3ec1c289481680e52b2c5f93339b59d685da88be9923f1b1670c1fd24a0cff7fb383e3224e603bc394202be80ec5181d20b4a9c658479feda50a6780cdd3cca52651319311870be6708a0b998a33110d3ec4582331e24b89e0424d8f30f3dc051b872a39e99559673f28ac2bea6b6de103ccf31be3d82ac1488d59ca115a9328de01a255f2cc99e906247237e461e249209ca09fcd8e8b674546397395fb107bf6545c52008afb064aae7b4ffdb5dcd9aa451b05767a325198a50f4f2bf2821a7b4188c0f25143f35a158e43506e9246430ea1442670f559b052830c7b7bb2d3578677bc45117b9143e3a4ed359877c89fcf60ca4940349b39edf4b21329268f9dfc58c9168266112ebf378e8a401ca0bcc856c963560377a4e87559a3ab63b49625df19e41e23c32a0ce5d5a41f184476245654694d8dcef281b654dc44681b52bbfc59b2b0ac9246274e988621dfff030ecb2d99361783a7d0b977b113d90585a52202062a7ee496687d65753e362ceabb596c8410cfa8c5349d9c3703f4e6d388fe8c31dc3a779fe7518d4d63c5a88919fdaed18710ade41ac0e4929580b5c17670718c3d3c30b7455d811254a9fc6409af8be6877197937ddf3ab8f82f44544c94acff96c0ad2047574221ca24b0823afdd56345b0fe553c6b600dd907b41a75c74121e0e56500edcc1c2479dd7ed0f68acbbc556c0f2d2e5f79f42ea8fa9e6c581c8e5768771ef80a2e7eabe72a7a87d11d5cd33878c86a8e3bf26820d5d81deee1f25d5bbfb14293dc8b3c620bbf3eddb7044a84345f388e0996560652afb9060798cbcf200c8a7695a04d173cbbf84cbeb5abe75a37394b151ce2241f8828108e7fd2bc424ae99841058bcf1b31bb6f760df5b83eb62b80ed7fb76962b006dfcf5b8ce1fb5c11126a6f85d3d8307867aa291d2a33a909f2b43c9a51f3b13987ff735543b1cef8f4748013f1200b00ad074932cd6aed43b565b4f5b02bdf13bfde1c1448ca837fb6b4c969c000e61e3bcc8824a185066177b6f348b7655c2461c029e7b2a874bca2ebe622ea80e60eb6d3ad98a2c01d7242aa2825220004cb508e5f31e19edb8dbd0354252c716e1a7dd8486de377c0b9d83a6145ffe04744dae34c1d8f3eb2d03e0c2424c396760cc5b55ec9dcd566a458dc98b6828f06a51743238a14c27894c469b40705c3b3fd1470e25e045504bf38bd0305eec901f883378ca18a13323be6db9e7892b3fd3b4840eabffcb22f24f50cfc402cf62213bb5306c7521f94d99175113bbd7d6f7ade95769651b32706da6f2940cfef7a4bd8beedbee4a02b344709efd5841599c19d3ff6fe87cbca47481cb45d3e3e67be71ece226403222609eed5c9157fd84a9e425c95fa77de2a595d01257beef2d7fa57d00e9538391579f43c36cb96deb39215c53dae338c4688a411672d94d18ef02838103383d6e3a247efeefb3771ba7f53dbf6ffd70d13d28dfe96966f4be7fd54250c74bbdd9c1d2814cd8a0c23a3bdce2701a659e6795212403708c1d6637f651838a21e28304b406b08e7670f7c18a817811cb7dd48e3d108be0158f7e45face2b78bcef995df0319b75735d50eb05e6d99a8dccca2bbbafee50083bdddd09f1b81c01786a9db84a8fe23e8624a5f806f00511d48288c1228fa5c7a694e3303b0a42716203103dcaceb77c22997f174bce55a1c81f04d6ca5745e2ba2bfa7196ffe3c2573739c6a4f8df01bc9565bae3a077942580011c817d3f518e94f76c64a908182485947a60412338fd7f1c35c65e701cb70481606704c00d72b3e6607e6973299ec54e1de6308ec2a7d5009da392239d93f88910d63160bef737a716c622750f9da68cd27a876bf003adcfe45e6ac236262bd31d18180b8e334846c9e6c8cab020ce8da7a2a7a967bc2728b191277b44e3fdc6a1e6015bcaa2f5a4f33450698703e1338cd1745921225fca0a731b6f09040fecb119aaf74d8200c46442dd7b2a4452a3bfd9b5589fd334844309033caa03ef235722d82213e33dbdc033cd9e57003e936777368ec2c8dba4e3549de9252015f86a89657bbbe2fa1cc079357850635e2c4c1fceadc7fd84c06ff513a2c868d1239c7d28a040dca34bf5a269f9dee7c99fb3f69f6867cdd2d46a66b58a5abc17b0dfa5752a7809a35b61e57bb5429de4a83f6d9019e977c061f36beced55f46e26c304ceea211d93c966577e3e7cdc08b0fd6b28f87401e71d053fcab2018acc6070c5be8ee8b3dcf220146a325cf57369e721d99a595d290c83641d8e50f64a64752cffb26ca251a8e36dcb2e1c8dd82182e6b33446dd27f32eb92cd91deb0fdd3cc165b77064824a75e07fbc745673a41dcc11de43946fe668a84845e8a5563b176be3cd7fc6007715f3321092fd4133e768411f30b01c682ab44fb05a4030c571a40a9352358b1ddafb05be9784622d57e24e7a723cf48ae466a6b7123c932f97af0f0746511e35b4cd7b66cebe716eda668cf3a753d429601debe71ea9d09cf8fe1a67676551297f72921861b82557d15b4ff584fb6512430435cd2fc9a7fcadb9cbb220923d5d33822ffe7124bd952df247e2b90e043db97ddbeabf4c2ed97ed2bf9ed7577f7ecb3c5d3eb4f82d1668c1138c8e0009fc1a7dd8540360b7c861da176797bb0b153e42cc8b8a4946639c2b3cd4016c3305a70d6f8283301ac0bcf2c76f33a916112ad808f27cf425e43da8c95d10abaedd1c306fbaf67b396fcd12c6ec72ee38e762f6c08679e67ac9e9e652cd4e851f90692048723c5a9734c2393aed458ba81996aa9d4101bc4f544b4b8767b0074de6aef796565144e7a238844548ffc8c43b28f0503e492744960b6ff9eb3f526ee27da8acadc53b8cec92895708643f06b11084f3e5d8cd4c4bbe47153e8f565309727ebeb0933d9c0e3bd074e8192388d7b34ede60b3970d8a311a7266ca625d43b640a87c88209e43b86ba64f16449ce153ec0977df8f8a3257a57e1f33268450df686bd7b4634f342bdc784c7607f28a305c634c7e1f244805c23d04f6fe53d77c5c77b29470d0a6d598873f6d7397952db6c57e143dad09f50dc7cec9ec2d2c994b45121780dff9b19ed22e11acc4f68f153d20f264519588db2039d4f46bb1c132f8a7cf4e079dce115d98255749cb3bd4ec35c384e972e39cc9ef2fc017cd849fefea678d53025f5100fb87b31674711d4d0a0dcbfb3a0400c7c22c8c7679854aba591823bc5593ab3bd04a76d07b43bffc53c4f586a5920d5cefe3b7cca69c3e4fae0ba61d743dd1f4e638c5bb6801203210a19d0134b69849d789bbaf75e0bd7c59e4bb34436bedd7501535ceb35dcc96cdc27a947c14abbaa8d7c65c83180df93102c4f9c4b0fda879583c0b81efff521210daaef651ff954d66181a89cd7e4cd5c5862217e560ae3a204ada3e9f1676a007605d46b968f6c878c0e5d90570f87fe14c6af24544cdeeef8c9a95b38f4ae60f80ef4a68151dadc6e9e61ba53f843b3a5b90d8f0ffc945e5c44a40c0281182227730a5e2b0344d01f5fdb5b826f6a9dd6a8884f0f5751d9d857c013af632c8cb08d52145813f98943bf49bfee44968c9f5e484a3165bca28d31a36fdd69dffc7523843ed4fef56d92865b0de04b9d0e6e55778607da8ca2d8964f03fa41514f33aa8292d2cec3682c2f016674f9f6202514999eb97e15572abea8443eefddf6ed3108305804af458185288522888abae6c197e237bdc0945ce3e0f451067163ee1700c13bb5828d94fa9ea8bf54a9bb84ef5f25c69f4728bc65d2abaabc5dbce5a90d06eac3d9442bb2b4778f0ee87f200c40c47e91ced766bc2b816c1241fede5f81dec7533f31bd6a62b75a3438c86b2851c55ca18a2d7eddc43820f4c214788702d14837aac94809f5290b6ebe30ff42491dd389b7932e153832acf1b154ad95e23b3ebee9cc2d164958aa3a2820804b4a07962386cb4948d86c0e9a236409919e3b7dd00b4b297128f44ecf0476d8e2c962dfcc8694c50bc1fc5ea27cc33b9fe362dc02e24d013a7beb56a193d30741ee3e4c3b3c88d27a0e79b02eb86039f60b455658a4434a76422f4dc29529b07b0924e8d73cd485c7b456acbc0c4ab6a4b73c31786998c0bca428ff8649f89f10046b2bd98d73fd7a2c695f7ae85b6f2226dcb38d29367ec1d5afa96085c1c95426c2a7bc3b290b1f8fd87de266b5ae999744b4cf023077a428f7784c106f7dbf59c9dacde627b5e8ce24e7ee1a53fab45bbdcea83bcecde457eb3caecf3297d91c601d799aaacc2db63b5426b7514f27ac8a01703310ea831ae1971540cc9945542a770e8a5f23348fddd7a157cb50b1db3247c332a82404ffbcb62c7643ea0a1843318be49866773cba641cac6ecb622686a39087f209cc4b2ace12fe696f2555d47e06a014c97fb4dacacc547659b4d3eabf4820e574010a30aca284aa041ead6abc0b758b8889115639f41eace53d32df23a357c870632464400d0c61e3fb58b0ef2859bb352a09a5bc6c7663909101c7d5e43f768e7e8d819a5edbba0bd2947d9599e99c6857a1640b911655d020cfa2dbcf06dbb067ad232dc26dab346540c7510a72802c016f345961ed51657b3c5b9aa79282362e9b1c1ffe23f4108c3702ad69dd0f924f31a07190532c1e93c53491911a4d2c13e3a315c1f7408f8fc77d438924786eef000f73f7edefe9a9e97765f575f76b42b1d545dae6e8b55064e90852adfffa0c3c783142e2773f040c31adfcc3d082acd4fed0dcc3e4763185033996d3aedb0da34f31068f93c75e614ac4689583238bce0c262c33ecde07049f32d857e9be9b42f2747f1b727cdf89318102673e42c52701d375d877c67f177fb4ec14250622ea9fe6e1469fbd0148d666ec6f6fdd3008495a8eacda55fe06ce939f2a7b3a9eeaf19c954bee736a60fe895630bbb036c2a098b3b10641be2ebab536910784d384474c5da157088f83fb524eb2774ed56c8ee76e1be689b43d5c39aef81cfd881882b5115a9baee50bed1ffe4d6e9c605b3208c6d1eaaec79b45aebead82cf5faf7cf53cb5fb74f1ad763987d87a37af1bd15c0d4d16075c6d90bf9237218a12bef141d9b0fcdc1c37e13e5d6aa1ed28511f84c882cbd240dee27cf7fc964273ed700e1619722908ee5f567a89208517b899bef9e9be99e8897c7f61f888c635d089f131c5b15a1f276f775f6105ff39214e7aed5fd616986e6dd1662779ceb06bf978fc14c009afecc841805c354ef0187aeb12d16eabdef398ab4e9d4e2916a2a4266fbd2242e5b5bc823ef99392450a55e11d9b6914058811d6b2326a7ee04e07ce5a4b73ffbe18866f04b1b1dae03108eba86ae72a8deb1417c8b786a2c2d0c8d3abd1b404d50c0bcd48ade5dbfbac0d2c14bbbd2601a0bcae506d270ad7a7fe9df86a9eabf4d54dc13a7b226ba3827bf173b7f860a2e3db54cf8eb72fe61bbd6515447d705780d8e3e2af57c6771123c19d2c6589fcecc354a791b4796283c80b8107bfa58d8056bd67ad47a9ebb2d3eb4cfdf2ac4a9c4ca31f2aa66950aa5338c1649159de243e7a1bc0ed823bfadb3d824b3ba2b7dac8b0cdbf84931a07e58056056696b69b20a795e4582e2d349dcfc65ffa738ca155041a9c39834ce6f5aa363f97d788dd147083c205e41dac3fdbd9b43c4814e954e8a8f0a27bd0b4baf43d1a33d19ec3611dd36e8b8b757faeb5ab1b4875c50df0a1a1c4486b84c39ba1938a2fd2ab2fe6c297e4a1fa6d0bb99939ed8ed4fb2ee792d2047b43c686203e7fb62a07078a00f4c74acc38fdfd9c9dafcb199419cc9693ad0a7fa943858e96c667d5f87dbcff30b4a440f52b131caef2f031b4ad39f02eb4d3c3401f1c97bc13da54439a112db2a55cab71893d8e4679c417558dbb89afe74740e4f8b190aa6352232f0185a732e788f2968deb7e3c2b37c102d9e10187cd6285eada30611c1a8e344cd75576c7d6acc195e2556f8cc81620ba62d2c29b8af3c4cb5d13b025d566800ade34e31390b21a6276de9bfa40d6ce35c24c0f895d3a6d6a20806fde946fccd6e42385c188de54b3c9b288379a2446ccbd2d148dad5b494c485456e3bca2550d7bbf8babd0f7683cf3625678d4839d3936493089649061f9c6304fc8d0bd631812fbe144335f8b3c726418f3557d68d6efe1117d8676bd68712fc8f06f91b357c74d1d1956d97f8ae90dac30d74b7a92b54a00c7d9605e9758e71986c3ef1b9f67e8c0ac0cf7bbb9e7e67063461c65b814083f8a213bb8171ed21e22f4e5a584cecd34ccda51cbb0c6c9d4155e0da1364f87c47e74dde3cabe73c091d56c573208d4515e921fdbc1f5e71852061909f9a38c7d2c56ca61a2c3a7ccea8b077a4f47792e87740fd01078e9556a8f949d0a8f3602eb500207359fe3ca5d5b911825d6cbe451c204d1c263100901586078c665e1bd267a610a55e54afe905054514460975d0935c028ff3c0ae77a6582c5ee8b7bd46953385615999a81f805cb67c053149250439b036fa2033d5eff0a2f9e16e6c673dd2d4db8b8b1f050008db21390106396212892b12f1baf280b0885ea281ede709a0da18d47f1075ba41fab80f0c512dd8d172f5f3813e705f235b5f1085452d513d56e9869b51e8d4dddec9db3a4f66a9184b770aa31ed2aba5453e783d71ac9281f8440683997564f915588454aa4c1b56e77f1812bae92bd78599d365e202fa9ef3916ebe0e7ff3fc9ef35108cf15fa1d661395caea2a8934dfa02eac77ba373cca27ba3c9b6c7eab7268b78bd8469cb3752ea9311338a4b14709d9fb024b3f00ed3dbf2b91431d9d21f4328f26f64bf69c0312e60fc549f05b0b098e43f08396e807d0e0778c06ac6af8fce5033fb3d14c27348d012d17d22d8837941519fc96d991d1c5c230487208589577246b9e7d1ce5611ab27d570708e0d12c076eed99b6608d5fbd72c2c897459b798364a54857b092d46a3a818e72780ef0ba1a0e314f6146024d4ffd35a943c2275dfbfd5d7f0b634b5f349c90eab2f7be45161b99308d8601821357d39be2237019f6fe77c09c26f28995aee8a2bec72e2c785893a6bb9b1c28e9614394d302a2704a2783fefacf7f23310fda886e43ef5caa7cd5e83621cf7f74fc05237ec33efaf80e09aaecf99ea02b56e05f87a0f00685b2fef5ddfbe485d61cfdc491d4eaa0365e44903d3ed9425372adf678565185d1123ba8d512f16928ec6407d9b788817c85d229fcc544ba357db432a2f5581a8d0fcb84ca556d33662225e15bff42412f819e8b6bf85e4dae084027193fb44d0765c7b3340b65baf97a09379689bb9f9dbb6bb3b0c12c57cd3b089ccd7951054558b062e2b798b43cc588a45c6a84a4aecee03aae466945a30da55a503b9899b91977cd4c4ed2073e24ec29e9cbfd40f388e034ac2880774b72a64333058dab4c52f171fc40c066cacc12cd8c0933b3143cf91da689801cbab290be34cc9d88bfa9e9d1ae7d1979bec2df7967b4b29934c01c008110954094974c8f13bc8018454f348b91d429ebab59b87b38615ce0619258a9c13b35e129b65ddadd152fd2a77acf3522248b164089eefa9001ee8cbae18f785f1f8c0cf1ae82ff179f25247c84faf9c0dd5af2a8774d22d9d5f28e49f435ac3e4c1a31d08fdeefc74885178c5cf326d846514ed4dc883e1e5985f4ee965b18df6cc40db10a37cfcb638d33e39ebc3ed18037f77d614c32e973a94c7dcd9c94053daf37b46efd83d79caa0a7cb9c348e7018b2f1cd4445a87477c766a2228a728083971ae5141886cd6cce2f9418d6c3859d5e6acda80f3d60d5b18f8f183a9d7c038ff1f018f685f2e4e4f412b77a9d5e3bbd6059360476aaebc4e29a7812a12d0f252b465f9c4ccc05a3decb470f044110e459b72c931ec566e42e6aba3e98f3da24146e9c1fcfbf6aad58fd1eeb82b511b33a94cbc13c9a9e60811c0f24caa051829b438ec77cf330871c94db113f6c5a20c787343c102ec7470fb92fccf19c4fd7647e2b7988e37a68fa8de53798df00f0dbad61d9b62fe4dc3a8b97e299bc15988f21cb77d14b1ebff8859c4f2df417be9d530016254a942f9e5e6ebdf9d502399e7e40e6f7d1dca641f0d0b6615e3de99967aa7673a2c9974eb5fd4e5d689a376bd0dc032f7d7a9ff6d5cc3b7d9df2ce21ef057522e26e33343d9651f5b7566d5ff4695485c82a8a14e3369f8437ecf068a8dfa0b37d598cd74669528c12a90a5146953146ad557d695b08c99ad2a719b566b4831b6a455a9134b52aba5bcb45eee5d46047e9d193ee19a0a7c198133f1dd03428a7fcb423cd28bc4641218eeb62df18e6318855da11186c23ccabace99ea70b0f21cf3eaf9f431fd2a42029bf305eb3936852ed3ceac33f3f298b5346ada241307804223fa7cf287e06b1cc9c1ec621fad11e1af4d70e4d0ac1951ed224d408389d98bf8e68cfcf8f65041a5267147d36cdb72bfb422dbeb4d7bc66641826c1df5ebe86a6afd895a9769f3f651ff6a1c21f8ff18caf5f0d749082d6a39e759082272eea7d9a604893f956eb9c00cb488f44bec8d3a094beb2852bfd4656ed8bd47b5e1d3f7e3bc49f51a21cfdec0cd09f5ac8b98302fac52722b8e1e9ba2946d771b99833db22752e02b2730e239489face9b9b179f88e009b53a341d9f0ed78161a817a12f9a80821b75707143c913c62735dc3a58874f1309390294ce2f4211c193b9536de0b3812825fd5c78604eb16f861f9646223b6c808756d5c8a3635335d71bbdb6efe69ba1621bf042d6e2313084916abdf7747207411a9a1c3932a40c29c34096652e3ca64b9f9f0b8ff84028d8607422956508061a6cbf4bae8e76cc411b28548371c36cc8befac51e222fa7f4d3c9c71209e71746cf7aa74e49edbbb541e92b5ab8e1f4782327e6d503d21eb178b5ffe5b9d4d040a2b7f7145e6b75cd8b57b393933bb6cda76f1fbbbdb6cb4acb8c79fba5df9c759352da214c128a8f1b6868b09b521d38228d3452e0c765f2a353d70c5d70b87c186f887f79a60f2f932bb6dba9f639a7c909d205e5922303f381441d32478371deb4f4a6635f06e6f30764baa441ddf4e5f4ba1c334d8ce6a039dd69caba703b1e78e1dd61031f63e62627d30a79beb1c0e981644e4383eecd10e33543a4a1c1f66efa71f4aed7b78197ee8e99675eb32cdb61d66013254a949f9f4b0d3fbf6981d30391de5c8e6446b169d2393d87d35f5eb106a7890ab75591b4b2708797b20bd78a5cffac768d6d695ee462d2a7db361b0d360f7f6d1147a79aa6c188b2b1b1dd39a7fc688eb8a1cdb70ff56019867b59197134e8297393a512572a49e1ba945cc897f8baee8dd4fc2f0ff382cc1aaebcf45aaf2b7e5f983736fffa7048a1df3571cd8f4ec91a1c9d92fec406eae5cb4b3f9d6a0dafccc1d1299387e6ad63d8cc265619dc7688d7bc245ff332559fadb25e736a6530db2173066b905f3366cf7878cc23f6cd198f90c0a10736eac6c2ede6dc647d45a07af1343149bff062d8c4e694489cac7043366ac7a1bf08f4708fa8177e7a69d9263bb7275c97e84272f4744f7b13e1be49b9a54865a454dacd9973019b8757d57ad831fc8833ed996f54fe88d12d3339b2f6f338fa8d1e6bdcbe4885df48edf4980714b60fe166c3d337779ffa74daee739ce4a4f397c3a9861a426881109e529f4f3f1847dcd83d0d7655d23d54888a21fae9f0152d17ebfcd9c692843b7d72d1078e2102c5e6e1d5e51c84a3a8e45b285211812807e19be8c34d1a79e9fdc4cb2fccc1b7a11b180706a95f9f0f96a15f98031ffd94d1c3a88475e316023b3793c97bb99c37cd8464e2769c1af492c4cc31bfb2ab5ed3efdb19b5ea98bbe6986759867d4d6d98df7424588b79a518c7c7b06f7ad4af9e3a744f7da335668179b57968ed17d7857321cf7dd6d9f9f276f473ec2cdd38cf8507e725e7de725ec8e9f0a5d35ffa386f477f63dae54426e8f996672213b0de6edbe67d733b30ce0b75f881e4d0ce3975eeb3403bf58dcbb9381df99a739c8e752dc80ef34b4044074240797e7ecd3f209a7339d42b977349cd374cebd7bcf99b17a3fc90af1e77beba36abfd3a762904c16bae795c5966bb928b97154c2f2fcdafcb355e6d2bce2fdf7855f2cb395e757e798957d72fef7895e2975f5ea9f8e529bc5af1cb55620cd5af2fccc1f4975f5ddcf85fd5997eb9e4962c439d9b2c43bd442f96a17e3196a19ea2b2f2a5642c43bd5dc5bb5d896319e9256f6319e99c67b58c65a46b993755e28c942a517ed1437b767c06c5fac465299bf6d09d2729b0edfd1063c70c48d92e515043ede844d71dbfb39fcb1e6f5ac8fdef80b8394fe8010a104959f0cc25dcc30d11408ff955bff0f2963ab8d3815cce12c3b010c3bc669857ecba7cfa4563945351fbb44ff7ece014c485828db1bbbb63125878623b7b7d4734a7991eddcaa0397f15e854f4d8a4c9504e05acb8211be1c01fd7304ee4fa197b914828e4b12cd301fbecc44945448e371b1173f6b00a14dd70638e4ec3f362a3fa297a76b9bc3c7ebafdf62d045b011b5bca6fb24c7bc496dc762b399d892d914b2eaac1d825e93ba40d1c3c522f3f1e9e59a63f971df5d979fa58212fe7649e610e26f6fa1b6285d0d0e046215d7f011d5083dc3df1b1dbe7d9bb08d9019f3111ebb39927ad72a95bfc36c3e295e9339f01e215fdcc679078653ff302b47815e333bf7ab03b99db9ecc35a4ec72cbb4236b2e5f9b0075cdad6b485d139564ae25f1b4caa755f433b7455ac54428400a71441612493edcb413f07c687b3e4b22e84354667f3eb3accf2a4e68813ef3cd6a36453657646ed36a557be636463647364d6c906c925ab525f1a10d13147c68b305121fa27e3eb47972820f717c6853f4d9111ff210cf678c85cf4a3fa087393a1dc2aa4a77587e4e8dd560db22ae36e775511fda608392db71713a47323f8271d22dd3396927946551470bfae84f749decd380a4cb0d12a77afc23f5e30104191537d4807ca6925e82160424533d831b3dd4805e2bb28c0a41a4c73a2b2ee74283e561bc75e121eb04be729e7ce676f85715226e487d3cb3735be25e1e6a418f79c762d790c01f8da519d1807c5a8a640d8d2632a58455314d60b0250a56c51c754b508b90ac29852dadc75a861e73cc4b5d4c13b04803e9b16a9df3aed7620e34e864c4abea585684c78e801e731bb7c8e504d12146f92325dfa1fe91ce3b2bae0dfdf6bbe9ceeba93825236e7b4b39391d98af2e277396655976f145afadb3e26a9fb9c5b69217b345a7b098a398a306b12d1ac4903c0b34925a156a48349eb4ea488fe3943c73d232949ad0409aa9e91d6ba5655ac2c4321959c9a263519e0f693499d48757986b43b04afb69d087579927c120e621e5a13e4122e636f3402d09278f39e6da4fabc02e18c41ca3d184461396c1588f851a52cc11cb60347c5806739fc2c53cf302d0846530e7ec0b41241eab1ff8c33218abc98348a52d2ca34218a497de5971551ee687570478e9f3f3b2d44ae9c22db55eba96050c120c2ee7988d7b2b37cc2b659a9c58a97af7200b0d2e8dac917ef9e534dcc89af6cba1748df5cbbb1f5ecdfc55b51f975ff35ba8cb2f2f2db921b77cdc70618ef99535d2313fc99ae998cf16af601e730ad42af9988d8a3d76f94dd7cbb1cf47835787c4025bb7e9c58d2e3f9c37c40cfd8c324e5383b35fe297882e4c135e15a0541476ace934b7552912cfd815f9ae880f0f87064bf17369e78fb471f0414323697ed26031c64869a49146fad3b11af43a23b6035408ca928796f6036d2bc40dbb225d9156b577ac063ba078d31dab03a2b103ea58f1815ac51dab33d2aa9849f620f47388ded4dba932e831af637546bc0ea80b977ad8b18e689f0f1fae845b3b56c79235b73b96ce35d5b8bc5a16b73df498ce05e00e29a5c4a4d3569c1e6358c7ea989831421d13315474ac56c54c01d305e661ccd08e17925a845e84e607d304fb5a845e16b18cec0f89dffbc10d4d41a7239691ac1d9661078bc025ac3201999030283d04aff817e450674252e4815ad521c1a5252f6421e8258d98a1972e5ff029dce9713f2c23b1af54c432d23bd64beaf3d243ede7258ddfa47145839246eba35164a25104b6b02c58db59b646dcb0fed0b383db9d1295f3d220531ae9c9512f0dbe5499e2e9c33645947ce4c4368535827637a5d688183df64a6ec94c78f98d1b34dd786b69cc91b35f5e54a60797cac6738d67d7b2b8e1f6b555a9671af99a42edb68b9d6c1d39592c2975269d73ead08b524aafebba2e8cd3c15ebaedb6a21bcea0af4747cfd247faf4101252644556c8add65654391bb0d72146e1d872d20baba5f97d970f9651217b71f48d63f9c888cb59139ad761070c1237734d730b6ed7769575ce38a7f7cf2f74c05bbf690914b54ad6f8ead363aa4fefc790f7a3080a53d3acb6dd6bd61aab95f6e7deceabff68c91aead57f18c99acbabff386ad2c5f7d5edd51ee3741ee394887e2ce155e6a8960138c19d5e22eabccb8f50bfded1a3675e2ae295e6378264aafae5dd109229197668bc0c3b37821a86ead10b6f78df425ffdba31f4d56f1cd1ef06904cd5f006d0d716a32c07378c398a3992351127a649032eef5c720da07ebf1f433255bdf37e14c9546d313221b9eda8a11c94298a7ba34726e9c60eaf38af7e6308af329749baf173835579d55ffd07d18f225913ebc9593269f224b8ac0fd907ac0734e1957f751b8eb8d343f601ebab2de2eac87cc1aa1b400dd61b48649ec82cf1d56558bcb22e811b4896407403a85512c00177453486f86a3f1a3e1018b25d911137ec8a74607e258965aa5bcd990b23d4d057cd8379ba9992f8311463e821350249bc820180123e8ce1a32ccc90c157b753c6ce4d93432d465f31ce1671773aa608ac420d758c11afac576756a1aa60b07a18c3e46382f8ea313dbcd23ce6c86b69b14c755415dca2c557af8e1a6a554b16dc32e4ab5b0f638ef8e88baf1e73f4d55b33b5ac17a3a57d2d3b2c634dadaf4eb91d317ff4d537aec657cf04f054e8ab875dd1d71623002ca155c48d325686c532322c5e95bcba0c529d513c1310e96be98b804fe1d61212cb542ef5f50b69be7aa80d7d75497481f4f06ac65726455ffdc790ac69ed0b02b24c751d1b6fbf239d9f6aadfe83883ab93f8abe1f439f29883bc45e1cb520e110747ff58e40def8880002ba4474c19f170d08a046b489ebd0117f6e5f8ecf34e4863c2b0d37b752212e15e2d2b4dff40c158a1b72ac7e79370dce8f4f43abf827dd9921a41fe6e051b833f80aeeb7c5e48a7dd36f68155715e6f4f2264e74f8c9731243e96fbb6607b94c99114ef1334d051041e3e2a366ad55b7d57b2a4e9659af9ee66120abce81cc0b10b3efaf9e4ea4c7d01d6390fe1dfa8f5426007d584f605437c9ddd03b38f5cabc9e8a73a47a281d73e676b0d70dfce5d8c7d77501d9a17f7e19907f8403d557befa4dcb8f7da2c032abe6941d433f9020f177687696cceccc714b206826b74dceda209bd79171388f71b06df326f75da0270e256eab96f378381c6b2586b31560dbbc2432cadcbc24d546b581025357e5ecb6794968b4c65c7085655412ea1c371c4a3d403f88db4b3a8feca5e3d0cd7a915397d3edbb52feba40ca4bcf65019c6f8e03b7390e4e83e7eac04999739317822304a7ebf578366799d268087175e0a4df41fee58cc33c00aceed83cc6b12078594301982b659f8df5ba2e29abef503f5a2f09955248d6340b13d82cc9e5d30be2f3e341bf65f6454e651ae09165927e1ee699c7930da07708798ad35e08821a562233b7e4317776b039b124d894dffcb18c4a323d26c17c7a4130e7315f73db51def031a75c034f331ef581508c1f879e243ae47820e00bc1b1a1a7b9f578acff1017087e7afc2e6cce9f1d333e136219ea571728e6f48ba794a6c8214fbdb5e89a8eb5c3ab56570465e8899093a0a7b4037a4ab51f9b4df14510addae361454f84806626940483f98e256b30269d6adf02c849d0934e088332f43c45b447bb3ecc68d22b5e1da589a5320421231f6e42459e970811f990f212211f9e7b5e2283240658468529d637b31a748ecfdf72c4397b125cc37d2d5b48263ea84a99c52bb22c61cc4d329ad4428f64aa5b8e86b8616a27c593eae9944faa88d44faa486a274ced8040dd7274ed5c962de2db5b8eec8f96c50d2d11cd0e61151501834d029eef21340faf1d6a35cf1a1dc91a6b7f9a14d916e75956db276c90120b646d6aa7c1144f833d67aaa7c14eed34d8a99dd48e6d39ea9ab805a496262d4f5ab52383080bcab7fd29e2bb256909221fcae0912143c6cfb763f6a755213d4aeda476e851ab5a051f6e4d8700e2c396a3efe9561bb282ac61cb136c1197899268f211e6db4bb1b829d8d68682a47c6990adb06de5dc7a6ed29b1c56a3db68378ee3228d31de7b37f9223d95146e85a39452e92cd2830183cb891123c6882cdb0a8ccd146363e14e2ca7d3c9b4a2723aa5dcd3e9d49d4adce974bae80b39682e8446cd484c50162333336b51b37372391d9406b11cea9d155776491d941afaa977771ac45c6a8d6e02ea9ad884cfcecece101ccc4d4154988a303769d12a2642a2c9632d414c1e33f97c887a53eb31faa1c9e8318a139a8e1e8baab00ab52aa43e43ad6a612d4429f8b0e58ac78a7c88a237dd718165e8a938161ca2a327078ef5f0f6f098775058c7e472287f8b924ed1af25086b09c2b89c16255d9249a85561976452f244cb601d73139029a85549bc62b6da4fa9a84382551dabfb61a22b525ad23161026235cc12805a825a8224cc51340165b4038a1d922ea925287a2d402c837987e489c71c6b71229a804c402c93f4d88ff64331a09f184054c804541f0bebc98865308f099a5d5ac284f4dd94522a67f49ba6916a61d4602b887b79485b71baa4a61f5e0de0db2913daa22d1aa7a444aaa2182b15ae34214d1ecba870c6ceb7c7219669e752cc6fcfbd9d3d234f39b1d2f49beedecacd94c40d69112d8a31c4ef39b1a3e8754d4a4497a5878548c700f18ae6fbee502a3ad535699593aea1463ad5dea68e0ad11f8f16e98ebaa36e8b296b18674efa236b5c7c54af1f0f1107fb84e0ccaa84a30e49d6b4446185259ec0848a254280d3de25c91a212c3842cb082d1154c1852670dabba3f6ae09f6dd16b3497724851bdeb03bfa193b17163e9fb9e5ce8a7b3566baae2357909cf9b1777f3657486e47fc20399a4f6761b118e99a9798cf7e3eb33e97f320a63207c267998d11862ce133bf6c8a58e6e886a015d7657a7c971dd7cfcfa6a8c1ccfb559e7d224d2e07f50485844a6a30a3d7d55971e7aa74799d15b7e5f9880aaeb569d98bb345dcae63f18a85572ade4dcf0d11ef4647d7d83049718dcd124e653a74e0c061c3060af5f2f221686394691a0dd82de186e06736344d86dbe954e5f269a79df3aa37ad031e81b14e74430d09c633d7902e9fe1319eb9f59135ee99b708f10aa6468cd0679ac77833423295f9e5cdccf06682642a739f19fa6c0648a6329f1ef8336cb77556dc693f171e3fbf1087d7be1916162e8ccf70189fe1e10c4bd6a0903a9599822e3788426a708667d392a9cc617cd814c954e6d58bdb2adee267b4a96957061af94c83f2992de2b318355538c3b2915d33ac568528a4cbe321051f24d4135e4dcf1c95745f739415388617af07914e654ebfebba5a0d16f08cf5e9d530c232fd1386cf124cdfb8b7d3c564e24c3264c8f09b660b638391b57515afdf52ebf76d8ab5282c7c864255816b7af4a05641ab20e6ec4d0ff1aaf4299a871ad1a768459fe25aeb53ba9d4f71a34fe9987c8a738c94949414154f4971189ce8867c4acaa7b8e47252b44d4321699a575ea5b8e619af585c83716d866b2fae69282cbce633bc2a53d561bc174f83c1891a2c1829273e7318409f653558a82496f1814292a9cc3d1e500f5741282532ed0b96c93ce5d3905826f3cbc33ec55a05d91f198e787521a5b2195ffc600a1f3afacc7b1481634029c1334c7a18a19638c267a8150cc12b8a72d2230856a1ba6030432161afe236452ce32db9d4ad47198e6c028478655741cc831e198e68b80afacb431492cd1296d109d25fa3468d1a4f5aa57d2e97f316375caccf70b629e2d575d9cf65012f1ee30d80f119df0766388cc77c1f4872c30c87f10fc4f88b334e785bb266c6c7f3830dce8bf7441c18cf9c654dccd713715e6c8a4e36451ede8b424279eee2e305074673954701000028d476facb350fe665f2ab7852c6cf5b1945deb2f8bc756d28c6d048de3acb0eaf52deb2f0bc7566969eb7916b34244e656ef9b52a70cd0c6b86b585cfdc577041969daf6fe7545151b9b62b25252525c559341b2c3e6349a136469672527a5d18566b961dd19ec8d180acdd366ece592a4d6dce39e7b43f77fa9d739ab4a07bf98dbcb43aafebbaaecb8ba1c59831e68c31e7bcbcff32995858606c732ae16a6e52c2a5bee2767a35806ab0e60c2b6311facc396489e233d77c688609aed190a49dd4d3e1bf6ea727c3ad77593c97cb3bf252593c7e0be38a71c5b02a291b0b4b8a0a8c52c9cad83c97d3cb897331add0ade4d676475efca65554ae5f1f7222154f83d9c5e5d430d260e6476ab06a00f520725d3d7c5ad5c367ce0985f6737acd7ad8e9f5f0993a3d887c3d7ca0f8208d946299ec0359269bd99c74272c40169fcd7c91cd54e1b319230cc3139ff91236db66133d7cac672ee372d3d19d1eda1459efdc7474add7c3a7f37af458e1f65bb75ef29bd6be6009e295f6996b48bc8a9fd9f4806b543b9d62d54e0f22ad2a79e63d7c7af4b4aaf3cc6bd400027a1b2c6c8a3895f9f4a9e2d3ad8a5703c8abc16a30738cc955f1b006ebb3cb557c7ad7bda88691565ddf9117cfbc06500d964d0fb8c6873a9579661384cfbcf3ead760750d2095ebde901b320f7a3ef315dfdcda9006fd7493e6d2a6083c4012af6478d6e2272943fbc2b90afacc598c3e44217de6307ce649ab521c07103ef3b063c001049ec976f02135facc63c0e0c4671eaa607082c1cc698b77b2290a126378e18c139ff9e585335f7ce630bc7026e9336731ad7caa9e063357ed3498b996c50d553b9fb9ca8ba7782ed7d4e0d590863eabf7c59b9dc2bc2b59ae65bb3cec71dc19435f7f7276c650d7faabd3a204976b43bce2fe722a24ebd087b4e82f19fce520f6a18674ed7cf596dcf6cb2bbad717da20650e7e16592c93b97371dbc319563ea8a08f9274610b82a20847050c883ebc910806547cecb890d2c2158ca003a1274ca02286870822a6f0822872c0833365c7e8d1c1e8f784449b422229399248a064ad278e9842230093265830852d106501278ee00a455cfcb0040f789490734a1939421179280ccc0eafa427b9510a6109fa885e60f44c24c5931fc033911455bcbd482c23bd06dd506b0dd15abc8a2ebdb11872592c237d7a5d8b652ccb9d705958bc9a5e43da42ba482fa3b84b0489435eba0c593fdcf9be7046c12d161dd80a058ddddd85dddd2dbbbbbbbb042d83b6c11570209390e2063733d080002994d87bf22898f01bd06d4141238d55c40805884933c432eafa5edac6b747010880575ce32fb1e79c4df38355c2cca0b8e1fd8d575e90f828b861d4221a757b83118a0bf5667a89cf445120494182e79e89a4d819b242e4a9c2c472d22ca223a8407404134b94044ab7205ef43aea81868686865e568165d4fc3133e7539323aef12153cd34394c7c5ff8d2f0c61bd801899ff8982d5a030478a8569a4a834939e7fc5aca1a20f0d329909d8b899daf9b0e5383d14f33eee460a22e1a0a8c14039fe843fbcd09be3d023160c51d19512ef84c0483263018c2d02584c835c67692d774a2c981a3c168a4416142a99140938306c715508090847ad12971e4d0d1dd4d53d449f8c166da643c1321810289133fe4f0b4c6afce6dc61a6374e7e6e5607ada9d9da69661dc9aa75bab03a9619d18cdcfad2bcf2fac5a8d7db99cd3e5ac3090817f602070f8701980fd0721241983f8c3e32385264469d1183272cfbe2a562ba6c495cf44489ab8fd4c84c4c84567df08051af68289ef7b1a7253f021d8f2010715dfceed750b189cd0ceb509b22ef1031e205561081741d0820f706e3bb7571e9470c1174340f1044a12b8902c1b1029020cb098c1d11025705e48620a466012c58b2e620004738d3da7067d868706552cf1851437f0e2861adc200a5cd881159690000a174220957871a2fb3025b42fcca1bbb18682740d41b9c265d3ce3ddf3dc405137c639121a1020e2449df2ecf444888f0d7331192a20f4f2d4d08d65621ddb637c693645e54a853f2a34a1a9c507c948a062555d2e08b4683902a79e9343e79c574ebbeae2b887a1b61b52009c90ecc49b6f41cd25d3a289d3372437fe9b2a68168e140c0ce4baac4c6cb9e0f99e82517bd347ae934522542ad8a44b8e6f54c38b8e00685131d32818f9c41965e58d4899ec782cb1ebf93e6dddfb6e8d5b75ccd3e7e3ee1f4ce667b7d29a594fa4a897af436fab17d7b63165230a4efb140723bc04983e2d799107ffe2850e85e1397ddb2c9344d29dfda6f3e588e0da3a3b3b449aecc2096abd0eee7f9e753aecbccccb64241a594524a9daeb4831bbd629425533f25e69e06d9398d3ed120aba6046a90e5db260497c3aee5e046d75470518cce59bfb0624127fac32976cb1a976140548cfa3cfb7ced2a63f794029daa642c535966ae30b9d1b9562cf35ca6644d567b585c1e410bd280a694524a5694b2c430584c2b3162a4bcfcc2097ca98865d80ba0246c29352abd7d9c648aa794524a177621cf9fb72efb8c4ffff9f3285c211f4a9fb163fce60d7a1af4dd9e47e1b6b7b6066b83617c171e2e35e8b5a1e879146ef4d68d1ebfb9fdb816a5942b482ca594b3ca89f19c4ca59452ce0b1bc1a5d794524a39e7ca169203574a1757ec29ebb41da042509652b67e6a3fdce87393524a29e777e59c734e29e79c73ca39e79c71e5089a64de360eb45e3ab3a77871a3730e57d04bb7426c0dca0a0595524a3a3dca1b53a8020aa53ea03c00227e7c82dd6166666666668e1c99259d01a594524a299d73ce49299d73ce39b9cc722b324e326266783402205335aecbb3a1f98c9817181700c8d02905bf5c5a629c646edc9033720657c2e072e4cc1559865e3403a0745e1e83db01f3334964194a1d069773492a99254b4925950490221081a5e24601248b89ae70760673ce3971d099f2841bfd72760697d219e09052c2206970a9733994b333b83247c2605b80004216524ac99297484ee299779a80999999999999299df289ab6251ce2428765db2af6019657b629bbd3adbb1b8b4b8cc70d40b3664302c7e343ed48c86008fa3c167c0c4bc80344eb4d0e2061c7a30d0e4080351b82fdc8d11d745066de168ea0008606370670c026c3ae697a3c18b0b38b6d913061ba45fee7235d5b8b8110765664a6138d1803d27ce0adde9d163703973002a69ba316098585670482965cd36a91139f2d39670a3ab70360697d294ae66cbb131afa20c2e2d7139b4e36c0cee9c3647898bacd3097ab0647acd15ab15377cf92551687db8b9b8dc4e3de1ce706329a3939d18c4ab1d20e97208ab62929452ca5604fab0f6f08e87b5b6c02ae63a84c1f68c23e59f29a364b9d313b373dac65462bc6cd27e1422bf19e3d360b0c880f1b1b884366a7cf40d5d53bdffda72c89afab987bcc53733c972d41c2e532b53b8aecb57625668a8d0a800c03e002c01804506e9744a5d4800b617269d71065197febdb0e9d01d6ec9152e674e9e72f204b3208e5c990ae2824a5650299912009554ca0b1ba535b6d92a29690efdb42dae90d49c3e678daec6665f70e79452705c8e8c02b05a665b3046b642111be4eede02ab11bb6a46a51268ecd83d3c654de34cb9938528b4e0a7875ae0c3c43d252db93098d04a9cf8c14ce2969e899c18924f3881a463e00411b28a6bea421fb9319ed05d5c1620704107460012a202d0124c001aa2b57055a24c20ee8a93c8c51126510ba2235a08e172cf44477680c411187871240a258e001d6125613ed45aefbd2ef56ae1e7240420195e94208651528b0f5400630841a717a08085492b4691139890200483a69ec087959b2308b1303102951ba31f134d6562480a4d0e1a1c3988d0b32205135c152610e9b46892622482d2cfcdc111dc4d127cba2886d86e98f4949810c2de000188ab342bf8d1eaaddbc5e2088b2657881b23ec10ad6008099e90e006093e5c0871d31a5a820f3742682df9b921424b0644dc1421c8053d375914552331084a824045a7f8c37a9740c2c88d164fdc199a40226a62072ff860d6cd060af4c1bdcf444dc8e0a34ba22658f2e8ce78266a628816d797d048dc982a2491dbd20227dc9467221620f1c3022298dc18cf4446b6f0d1bb87db3d131971f21dc56d328391a3f8272347a83c131d41859fcf444688f8f044a7607d53896d93ba833df2449df6703ca2f633b362544433ba212da2f342bfd9a3fd007d87da8fc6ead931e335d60b7e2a085a880f690f3b15225ede4dbdfb0289af496149ee875772a6141531444488e30982f29d02b43d4969d96e3944ee14391102a23308e65358b2a6b5e8543b13a0f6f6272943df29d7fcba253f70458c23a6fde8c050cfb64aa9941ea393a8b48dd565410c15d100000020085314002020140e0a0523a1783c9e69caec0314000b8498446c541a4cc324887114c518638c31c61060000142066888661b1000abbaa045159958a999d0eba58b35efde8be29424f4e953e5742afc37b492e80fabe86c00e644fd081eedd71a8d85286efb64bc57a2691de6afe09d6c0fdbf32db1bb6d4a0861e28c2845cd0f606fcafe357239b249299dc9f8a8482baad576421a62acdca9ea1f034ec969ca6d5f5c78988aaedcf627afe833287c1e72e9099c034d6ce23adac26790751afbd1938c388e8d2a7455c306582f55b66639970ae63fe33ac571018e52f394c43ce9c25f2eeca809a099799c03c3b69b3da71c95f8fbcf72a91e9ac29f106a1da285eb0697b5bf2033413973f49a0addcf05213f853d14420ab323be3d5d342f648297f0aca978ab47da59c16105128b99d23e8fb1f03e4c04eec9a23d39fba40d94877e6343a982c33f9b2f049c7b45a76dcf239b8eca0c3354f43aae120f2ab82edc2f299b3852222294cc0f181a3f66b8443d40bb82480c9b84ca919c037540600f58488d5e0acb03f3363b9f43860d82f4d381819bfe0887dcc03c4d3f364cea9158b670a0a809abf7d491557b037002d5df3ba38ac7188dc7662b2f88b17129ea07854dc857e900c8228eb92dae4024b633d43c20bb143ced632f575324d1c2525c82ff060df2711c7167bbe9e3a3e55ec447a7b4b2576907122d754c3b2259354a15108c48de7778b2dfeb4dcd0a63c6d9c7d3ff3a8bff4b600f52f2dcefa4ac7081b45cc4b80261d9b4e5b43c692a98530bd3f52ab5b6ec3215be0cc6554a4c37e9bd6387206f303f06f0f0113a1e7fcde272cb522d8888b51c1e9ed9ef680e78429b5970e99bfbb30d811a1d216d46c1021a2c24cafed505bda19e2c1d3b6145d945a351fb6ae70faa2289e58528977950794297aaed29b67859121a160325c3c3353abb172a9e563e3d405ae7a76fb8eaf014d8a0f846325c86c2e7fa2df6fe860f8f3ac7be610f0b554d076c8272cdc50475e89be9c6c3ac745cdd3329b01edfb52b09268d2b1aafefaca2ad18372b86611c7c5927db930b9a9330ad27c3a665c8fc7487a3ac242b82a4af6a4850a498dd8bcb6cd89dc41bd775734e60172e7a29291fe2e1d50793902b894d6b6c693e730a0a0c349218583b815010cdddaba04c3f7acb46722ab5bc81e92e70bfb1d2dace9b3d53388de8713dd728f266ad61087df216a846b2a324a1c8774b7474e8fc1cbc9c9a7e73a12e1a8f829b1cc4e3e88dc27e0a278cd6d7e38a48eca9b58b8df4f07daddb38caa98e48757ad808e56d6d809fb28408fc07447bae064eb6e3ba544bd10a778d425c174828cb7f6d23ced44f9c65fe82ef707398379b6f6f7fbcfec9381e8bd68dbbd2ae077e1c7b6b834b9f2cf603e1092f8d3af935a3132a6ea3c1a1f077dbdaf666d18fa5c6e68730516aab5891248e3eb6deb56ec16831aceecfeb23d1ed8701c5a4597b4520f5d8d140f87b91528c42565dd5f45abf0ed4a419bf17395785049d199d5d64b2a15c1ba682a97812c5ed6f6456e65db07dc5ac9a5f4a2865d5c9a78d6b01d3046e60ffa57aa9758358cbc4511700ccf304f78014b5758f6832b218a598468b8eceed9521738e1dd615cbc26f98bdaa1b606b048f71ff6a41a67e30cc46dcde410b55da39bf1c065393d2f2f08f490129d49fccba362cbb5629d733cb4a490fbc91a9d17d1e592bc09db812fdedbf014be2d092c602f9ceba1e0978de81e0c82e95a1c4b54d7b9aa51cd8c92cda1ce084f0919d8f21515676fe7cf164957a229e07036f6e8fe86a09f0f6610b60638117eafb638d00dedb62fe34e274ef986cb44b352be1b29a9ba0ec1d480cb59984e5a16921165f02006776914595055e66b41f6fc191b344873d2e52ff4949a20b72d5c62936699a19db6575161a48cef54b26eadeef57e48dbb41184ac6900dd2cb1fd4134064a604a5682ade4374c5ff7a22473afc1467953822ba06f4ddce94b74604d351f5c592436e923d2c72a797bdc58f01538df2de41b5b24e8beffc57812268145c8caab1c0de30d72b222df534098ea695201208dee43c2dcf6247ba0cada5c6648a118a799e0819a380b546755560c906962c8d51990e520be2200c96f917168a484efe747dd81cde9ad1cb86e923c937a33f41ab027c96dffaf761f8892a50e1ade9d70ed10c5eaa0b96c951ec47639d3dfa298d4a4b8980d613c5c9b0024f04fd8925ba5d2aaaaf78d286c392c85d11bc327870096e6302a4caec6d3a8c9d6e79ef94d76109e0c0820b2ef81f73f41425cd41eebbaf2b100c3fd51263f568de1e634da4ce76bf6528f8e4c4e46bc4b43209f60a4496ce3decf9f9438bd4f17ffe50e1ddbfcebee90424eb7a1e2389fe298e9eef90e1854ef22010d1754ba9d3d38bc282b3d6d83f0ca26a860e0c0ad81d0e87fe6d888b0810901e93800c3fdc9ba7f03a5f19e16e8fe04d72c59813523f60a33ac48c52d67273138ddef3029c1545c3c718f0d1c89ccb71f128341f365b37b78f3440280cd90c13bae901359c9ee56890097b3355a2beacfa3ad7b239524e2a78c8901d3fc85f0e1835e5e8bc5ab263aacad681cb897dda544da2230639e84ab4afc474f1926db42d3f5159b2778eaefb93593d8800b9d534977488940acc65c4af88c8d4c4d65f8f397b5e8a64d8fab3caa85b9c7232f5b2290b118e16d5acf1b34d5d158939d0e39ae13ca6cd3c14eaf156667f4cae89a8d6e146aba9ef2851fa65254c9a95088508a0326582493b55c9732d9f19cbabf291c048342908b627f028af9f1556dd370dadfb21270fdd9a011e032b51f855385647648e6bbde098e63be87b27aa4dd6ec2341e83b15095a93f609881984f804baf2698316743ca42d2aa0d5c8bef54ead3fc9d5233f696d47a9e3592f0447d37f5ed397447fe05aaab7b20a5d5317a153a98da00b2479abdeb738b7f11a814eefe1d3deb945f0638038e1bc6b04dfdf4363946ba9a9e1ae356b61c3bdc018c984b04c88d01553dd277b50c7e930c4a31f547c6faf03b0d9c880057b03f81aee8796e9eaa8a23ff321afd93dccf051950b49fb3380b66738099acbd42e0947f8d65e85f6e4ad872dc37147326b4ee040f4474b572e12f77734d1310d00ebb350fd59c158d798bb46171fb9cf3024a2c10bff633b29a29252a7b67758173cc7703fbd3b40fa8c46706856b4faf70f2525a4faa6a8661b49ebe5848a8f5cecef5371af0be7085da0c418c1721ba3d873fa507cd47bbf5fcc98bc9c2eed03bfad20095851b709da390ba1d274947c466315ffb60557573125403bd59d3f22db62d0486602187b9f2c624e5cab65a5fb81569a0283b2d1b434bfcbc94a48129d33ec597c5916a60f84ca1938d6867bd9b1818ea366d355c31ac6c9698427b57429992e1bafaceb2afa3bad93974d154873594c04a0d4e8334bdd587ea8c58f0d9c090feaf145cbf8b984d657948f3b597ffa06f782b9461f5c77ecf851918b24565089a6d068ded2fe03335c00e88095c49d2de76530ddad172f37601a24117e7d13818c9a616aed2adf95ef9c66cd5cd7abd32ba137cb65241cef5f4ae9421b864a8a0d945e9a107932f1895e3ea92291e834fd2842badf48a216166fbc9f31fbcd79bb5522e3ab649a11c144756caff85aa04420ef6fdd176029295e43da5af93cf4e4dca415091d892d4ad4e1cdbacee950713f8503ffb2a4e051f81411f928d93759168549f22d2e0da2c317fd5756683baa2b09a11cfb6ba7886cd0aafeadfb04f8c78d59b188ca48721f0bd68bf76c551cbf127b437d585c57163fd007f449d73badfa248f08032644d08dbf57e1c5f50031b66b7e0de46ec58673627c28f26ca04243e55f83e9f62ab898a84cb32bc7ac29f2bad3c3e73e47d1bcf6299d058bb46e46433d977129d9df4c9e2c2f748f0e41a6c338450abb98fc10921d8e28122903323226c277358e83a2f025cc4f991005449f62f73b21ac2ce908d80b44f9c7389605b14ebb8b5b5bd4656b823028f7ed6e6a26832292de7771e306824d3a7c6030931d2123410014c943efdb57f7a96387c33bfc6096c31eb5a3b04cc22dac0a7b9a9db328ab88307a9ded5956eaac14e359bf62a98465f0038d153c974e9ac650d87b577736d7c211cda09b53009435d6755d4da189716ed98b7590c0d5f0bb8875d41f9d7f5ab1a6d927fbc7ad89c70608b78eb09f6a916a4ad1e9e7f4f44f834baaf0f86759b775e025a6b54f7c2311b3cfb3260f5f23de7d2ce7afb7d903d84ec24a15a2d123ed4f0e14af74effa3556ab1c8d72a4fcd9326c44c29dab6a32ba42ea38213a19b721b624f4185dbbc589566fe5810c0fd09f8f1f15b755065cb4266e1494937ece2ee8bf62d8aa092963d39e29e64144737401f81228c266a8e09f64930fe492c8488c08b47e48511a2d9a3b70afdfc0794bb881093a465f8692000bb4182c92769d223dcefcd98aa1a21b797a632381fde1d96d754a83a103bfbfbaee406968d6cfed826ca3620b85a06909b9aa826e9e0b871ceee00b9dbffbd244a60ff45328c26503d2f9410ccaa0f70dd41f1b4aa28fbef636eb5a38261e763ec2758673a31e5abc36c059987ff9c48a2bcf973a6e79107ce6a3a0fc6220678db9bcd54c93bd0c8c403efbe3951befde657294dcb5ebcde548f4766e5e499580332b875d97b9fd99830c29e99547905180dd5196e948e5fcc101ce15f95a3847fd87bc0baac1d43b1c7eb9699f70be41824a6943659659fea0a59ced95b0f1607d5af3f9a58a05cdf2a79d6e0b5f0b57077e4cafc7fb73e065ee07e2808657ef6cc22d7e90d26da6bc1b21306234860ac0f8dcae4007804c010d1de62acbc092e7375b2e5877b0b5074ac3d160c10715d723bb4d37f49feadc0b9e28ef6db8c95ebac1d40f9496e0916a96cdf1514c0dd8842a18ae5427913fc1940e1f60f980c612e1325d32c8d1781252aa6a60cc634a12c20f81d19a57df19171ce803c26ca92e0748396103b767856c88759248f1b68527383d1df4ff11d7e2956b81f98e0b17a50ca9037097b3d2f092cd1d305138261aa6ef1529e7299f28c8b731cb7bab8734641895fccaa5b7d13792e9cb2cf55af2d7bb009f58170e0d392a5f9d7e8a169313b0abe9fc2bae6ee49a0f2bcc0d8134afc284cb92eafd9c56549bf89b25ab37221009af564c59f9ddeda2f2344f615a7e09ad2e2b2279b12474556b681ebaa6c5a99cf6f129a9d0a626c47d6944d9649c5bc5c78b30b839479d092660433ee758255bef56d5c00ce6d45c773a0a7dce7eb6576ddf62a78607eb28e71aadd5ce385368c5613913bf9e5174d360b0cded465d655b534efd7dba82cc39fe215110f0fad2b03ffeac80f02ae5259007da5c17bdb6575394cc3e21b7cf4d5b5327fa1cf4d00f44b946197dca3483d03ca7849536064196100b44e54ef600c8d3550fc63332d4823a2648119b93b669cd484791a1b8c77b89d172d4636328c5d08361bd42f26eac21d19c61d2bfcd481d2578f53e35e95a36e5f6642388201284daa5868bbb16009adaa4984b1b5642840d2274987082e3dd656fbc09c04754e8c91dbf67aa9fd23314a4909134535961eca4251629045a6a136e30151b7501d451e0997b74c32161eedc1b5f14f22534b34850c5fad912f3bff16f20415ca07049a934e1e4a5cf7706af1b151995638a7aa38149059f6072f612a873ec3082873c1d842420300d9a3ae2551e35e88a29b4935a38c086e515cb099bc4446ae041401f604c5dfc8a94dfb0978b9f0274766d528784d5f264db5dfa2442929a3e2c618e5d7fb906fe1bb4fd00810120ae29aed3b8271beaf9ccfbe1486dc20e255d55f5ff849e42f8263a5e6b6f85254e320f521875be9f0f5925d91df913bfec9dd27026f449d918f1d4a21356d32c5b9a3060bc1f799895909b00a3e1ddee0cf6831513a03866ad3531732622cdcac8fa61921b03e0ba1872f0653430d4b2c9f2936cc8204c376b36e449b0439383ee2ad92de99b2a5f0fb00d73576ed8d150d2d5cd66086d503514767b61f829cf75023ec596726c6e5097dbfbf0b1f90ac58277f8a5a09ecbc49e6c7f5ad3e629420afd6f6116b07ae5f5092f450189530f85b085ba32495edbfa36ada0e3b7b75213aecc86002611019c952e215a7f403720024b3c89a1900dda925a753d25060566176d5dce8ee1c22f419a2a8380b253474407c5414620654b6cc6b4ee11204376e593a3408d532e99686dfb611968a9de74525cc77c1888f9bd1c24b24650951c17cb929b83c412648f3d1347e6522379658cf8cc835106bb00abe4a5b975a2fff8c045f68a3e294d592e4f23c280edfdf0dd803fba7fc43866636c2290136a13246c3a38f1cbf6d1a50d23b35b2dcfb5d394b7d07df53fc690fc692409485be978a1d39bfc4e6c343ee20b743a5449dd47f2dfbe4f7e5cca90442f8ce004e4e2a83988facc2e007a5e59aaa4fa290ca09273612ee01b7e68e383052efd3af6c89548e5ad881a757579c898e592884d81cf78ef1f517f2fe78cd737e1896c3d46528c0048ca3e92f4839f0c2c5e74ab1d4799c2b72209af867c24e983893fee239f6eb66c4c35a80fad274fdaa9db190dceb91699f88c5b7f41d3e117dd5d05638392c9e98745237d031e08f7fc521d036e350502702a013a4b906ed86e45f37dc4f07f7b2146e01e10fb0a725f023025ea92f351055f9d2842fc04fded784d120d8bc3c503b43a4562947adc3a6a9b95c73c3b9d959b1593e5e411da52b154ef6fed65e4f656d0a12aaa402168b96424dbe9f608f11c80c67c913f01f4df144878080f6cb8f68d4f016345b86d7cee8b7f77aaa6fe056ebeeaecfb97bf108b1657c9891627b6ade2830d0af76a01cfcf2f64cf73af2e1a3feb865831c04696113ef6b99270a3fdc596e18fc370151ce5bf16f89cc986ab86d11c4ab760780fc6e3c708b41c24b226688124bc90ea393e0b9b91c9d5d602122498a6f9c5e5ee844c6d1fc39fee17f0acf9db6046587737e24d021b03ed98153dc63ab125eebc4b696a9b84aadb1e3a6cf7f3969abeb05ff8a2c6aef9e0c7f8e265f085758249028292fed448c9bb4ba24e465a46e4ba90862eb9c18d6e3266b28616b5137b630df200bd5feb08b9c178831b86c367f0d0dc330ff2814f96ff7e4cbe35f6e9efb4056614fc4ae81298556f104d1d6eb9848d57ef63e2ba109331b4c2232fe7dbe7b7d14cb58683a0ee47ecddef035b544368e58268980402bd366b790dc0e2e6f4359ee983adf841b730627580fc999788d15d3599831c32947d2825f4af74197e9461e5626083920dffd9fb784404ae4644615a578d93832dffae25da5e071a534681ae4513c3089936ad35328e882980f05f9c51c9f410c87c5e0012758eac583dd33f7afec6e03a6eec44dce5831a5408f4f313dd48ae06a0b65e0ce072ecd4dc4ae333180930d241a9870aebdd908b9f8a26c767de004137e8700d310f5ea8548058679c8939fbe407291c68e84f436555bb4f01d04afcca87b86462001ed577b1ab8e85bf8ce3d7c3098e67242f64f0475028a097379505c7bd2a17b65a3c5453cf499c2a57eb66904349342f6dd2c16929dcc3497aac4b3830ecfa7d9d86f070846667cca19c1e6b0375bc9495756f3730679469300906e2b70b16d6954bf12e6ba5eb12e1cac85bae401776a56b88b0ff493dd8036deb334f0f8036fc196f62eb6d251e6588ae656fe557c58709a2ebfa0c5134e9e580608cbcbf80aea92c859f0b2f79fbdb3bdde0b8b092202b0b6982b6d449a60c7d065fb38129a4b105944b9e5acc525b9d980dcaeb0d8af8130a30bc6c9ae0814555811376bf46237b9fba987d8a16261dab363d9ea164fe098a64d50191a1cbcb25f030d827c81294ccc8f54a62fe86428de016ae2245412481a61704bde8b29c3e5b513b4379552b7fcd3b6fc5633358514f4b03e3e83ebc1b7a927a1ca443d781465257b426fae431fa5ab829bc418ac625d4679f90e21ee9a54bc8221f84ba24fd578c6eab8e309f5c527e132c7cbb40ea2a4191c4b4e59bf77afe7fc1297e84d161186c46c0bdcecc5695a37bfdea6ecd5b3dce87c0d1b3a4aa5bcc376a7598d5d3958ddd3a0a9f087c8f1fa20b20fa5defb024ec2c77c52559bf1f1cc044c134fac97755fdbfe47546a0d41b8d4591a141f6aa8ba5e68204f15b41be0ee40a813df25b1ed64955c92d1b306d7305e9056ab6fd7b25a63510ac7341f396c9fe551b89c51380c172e9808a3b2666c406e0c4a00c508a7c48644479b2eb681a557b7eedb0193ac74a2f3487b61ed76df139b3530c2ee0664ce72cd8448a7242306d0ff2127d01d50350b32d7742fb65725dbe1a9487acad291af72c9561cb669dc72b03bf545e16ca9cab863eee4e3a4d134bb9251154da65af2e6b1badfa579cded1b0f1114462ff076049be909572c96386330b3185836e266f114f2fd00e1e51218f1f56d19e1778dc200b5834561d46c1d5c94d02f1d0f6f5c3fce9e11e78e8289acc7128acdce117c244e0fe849b671533682c1de64d8f40cb036e4bf699047859e8de7171ccf747e7ad0e93340537255a4a4da8f9c4357aa7d8f44bfe1a777ff588591ec15439c8fae5667254c3da4f0d08124c5588f2df448a68dcc8051258be0f7c5415edf96db4f035cf21b949ebdd797ee127b1904320ddac4b3ed28501b7da02daf32dc7383c076ef8734ef6eb4c003d51b35d457b346e57bdbd01ba29c013715864f442270afa6c2136a47051e5498853230487dbe5b8e8773fbde31aa5b19fefebabf44a99f3801a9b9e01e8e4504f90ffeac15b81ff5d72f76aed71634aeb8b260138ade865dc4c77853ec77dda1cbe4a4f554449b2568fc8a4c7517fd64fdbb22ee924836ad3ba1ba217e226cc39ecee7073868a90adce4596972b9e25292db7e96a39ce6c34f257931c3bc4696937b172f18763576f824eafed426153882473d76ce8990d0b0aac6e208e6680ae3cedf53cab618d961f8b57d2d0f76950ee2892d8c45fe885807a2844df6b59b9a63cd163ba5e82a4f745a4933965e3b3ef73a98fd0695c8db4642acdf8fee73c75699ed26ec59279a2d7e0ffd727f1d21bcf9823af8b40254d66136265282c68bcee4f14b91c891d4a9c3d204595d4d17a63acbb757d61c3a60ec2a7732552ab8c69b010bfc7bf0e63727d272ead9579f969904cce2a5e9b7f190873751174d3f88dc22c0f07070967fb4ea2d5a466ea21b33c4df25714a28f9d132a32de9f2d80556579797ebeb13b477df5f3ac0277667df5ffac2277dafaf2f7590577defae2e759c5ee7cf5e5ff59c577f7c514a0d7719f98eea24d29161efb2047ed544ee634bc9db8f89205c033232ad7744f4269b52f9151ed60614e6bbaaf153a2ff4776304f3b21820caf05f0aab8c245f9f49b4439a3644130ac0e707c352070482d2048259407eacaa7b199e7ad1fe95356ecfff600d4d5ff1e66ea2d1e114c0dce676221e85b45f18b331d15fb20de21bdb68dafbea8b761dec5ddd5246c5514d03586508567af67ecdc26cb8c4c9eea4fd8d39ef96e662aa23148b112cf496f7b537e8eaa6fe81495347ff6772818de295ff48e9cbdd523df2dfb837cd441306e8c33d135df03b884d46529aa7fe621f0c442199c840f30aca8ea3f02ce426f1f9c5a9b089689a59f697c187a8a1b530bd874099dd2d2cd062c2579c47fa658832d5587a2c08467faeaff1304e44de6bac91d4578a98d082284d083d183acc114da25a1a49e62809855b2b84062369d70f652b4a056dbb7c327802c0a87f3bb4d66404b9d348b8818f1bd5dc6b72635c1b40b185865ba5948adc16bc98060762625267ad239e734769c8b6a5e793c02b0aab830c69f8600be328cc6caba677d249184dea2e7d2881d02c9023f5f4e653c62aaf2faa82b0cf0bbb652ff0a7c95206326dc65291b2e9393d5f0b9edfd9f3fb62f75c6b19247da0710568f4ecef79dc52364d16dacf73c3da983b64925a6f4b06767fa321c7e9faeeff916bb1aa1ef4c614d6fb7fd2c4f6a33c03b7359cbf17024743f537f0e11ed3296395cd81c3cc69b326f75c9d26c502ff5c215eaaa5cdda00c989ed30004bf0e5a177a29445d8bf8d10ad3358e02409acb8eacfba88cc41e2afd0bfb646bdfd090ef00579bd02e2ef21b2992d0d68cedeb8c424ea39c828e544cc6f9e8426e7eb81dca8474932f738ebadc9c228970e2f594b9a2ef605f21bcbad56899bfde19dc7557dab36da98b5dee3c8653b63d00cbd6cd48ae4a737c4c383b0960ab59a2c764843b89a2044b188b6e0f6eed1402d7fbec0f429bdfc3e3328ddddfb54c4965530ee90df9510e35f6d64606ff5b960b6346a3f4ffd7abd01e13caa4e1ee80799786e3633c11e85af9324ebf05a4d1e1d927204c08ea9054e64953562f1298d584a352ab7c841dfded0b68eedf0d54b80f2def586311ef4592ddeaa27564740b188e3684cf427e8a117501d044e4d76949b97b0e00c0f48a7aeb1755acceec4855e7e41afa30347222c765969e7a139eb88c22b44d8dc9449ae5f9d4df959b5d96ba3cc19268bd6cb3193ccfa46027ba3bdd679727a4a112922158706673769d6b5754cd27459893a7144773589835dc446b02d3db60f2ce66161eaca0c3533644ace2010b2e736f71ad96bee022351f9fc571294acf79b8f5fd09a5e99637804197617654cd9ca1f01a378732ed1ea0e2e82c7be033426da880cb3f0110c073b26920eda340fc7a7703625aae7024c4954ee1c0da71604336f5dff7553102938816af4e4dacbc68c26f8891f9e4cdde36ef9b7c8740a14903f7a3970ca52771e55269510a104b1990d1721ab4897da9090f7d05d41372fa0975494380d6ef6e4b75829bc6757b7a10e2b108ae7d54b91c2f63c5825c26f08d67fb492ac4d977da8809180673f5eb618c6b943243a3d7cb18d7092ad83cc842400ebb612408ff692544c7b2cc417f7bc691785e8b7f95b8e6130a003b47718fa87d029d2c4b4e69fffee9f58e7fe8648e9653ffb8f7ffa045811f8fb04a289bf2e7e9c2a38c34b2b66c146a68b4206803e87b1ca719da48126250141494397bfaa32820187e735e9d996db09188e0fd1e08b281b343cdd446f0974987c00aab3c06f110796bc4ae434a3a4d51aa779c31626039b2fd61604afbf4f8383a177cd5b07a4684f1a78d7c018382ca79d39bd4992f5bdf9d7c02b4b230f133bed273f140a593d45cd4aebfe47b2946bc7163ae83a89fb4a9846c17986989a4e04974c40dafae14e2edf2315e4f7ad87076cc85a5cd7179d38ca58dfac50607100f5395cb71b112cd2c0f0f4be1255e4002676905d3ad60e69a61528e0809469e7a9fd9251a0f62dc18f9002ee43cc6ef4bd58883a56a73682c0a42a293024c48a21c889afda1efb59acfb076a64b214325b859d025bf40f919e2722108a451583052d90b551fbbf8a9baba7acba4b40951e6b0c9d9571c460c201b72879e311c1ea9a8082acb102348116a440fc810202a1f6e065f99102aa9cc730a0e020295e021f2a8982bda29920844f604278f73cda400173689315a85b6c8e9d61a62f315ec80d303663dec915b9bc558fb879c523afa662821b585f6b4077a80404ff0cef065882ae98c1e258015e85411b0ca4254955313ccf951372234102a195a5135450dd71b1f61b1eec6cec34ae70f83b87c42304ca62bf8d0fada039cf7642bc2f1f8be5e0428aa5a60dedde3e40f93675759b02aa139d2bab738276410b63af45282102bb438ee9cfaea3d60667614374b69cd975f9db7a6489748ec73099304e0bd558f499e91224361e4ef84713fd6753444bedbf354b969c1b90c0c7232a27da1a1edc77c0ddbffe001496d71423a1e9d6e8d2702d9e90c901ef74667ffbe728477c481dd0b37fc2fa0005c52da4fd875bee4da1e3a568f623a77cc6b4b9ccbfed2f58406c73ab16c519f168a869c5a2c7825cf5886cfbad5708cd626059830728432477f650542228b6feda1e4080bf2921256a091835421ed56e90bcdda6c8e9b13c2bcf1674281371bdf997d1bfa3f5970f3a05da07e8b93fde16126c5bbf6095073b2602bed6d95191759664ac146e79d3e9378e272cb34041cadf38cb5f70538f78f4a293cfbeb8390573111abb2a3abf7d980b8076b4631d61b941fcb9d60081792d40db0dfb8c0cd61e34f1d1461d6f184127010c71b7ab90170170862a9ec7faae119bfb106508ca7fa7e54bd264fd0c26c0770ad93cd638b7a432e9e0d1574dc1d359d48175a4f6900d4a4db2e804b2cbc6632e50aa4c79fe6fb379a4ec8ab8ad37f4740c3eaa90a6e537beebd6ef274091fda4a966019ae14a39510c7bb1a754ff4faeb1e66d9f9ebee790c8ffa952778bc0c26f668492242b981792b00ba8beb415aaf4f2c36424c2b83530c51d693bd9252e246f662020a2b9437203272cc7d03876608cdf27705f078fb8efcdefd4556352948f47c0d4abea73e79cc258ea7c90ef3eb04cf889fd4f605ec0934802558d255083aa138efb1e70109a0f08bcf845c5a2283e621916de67f0e27ea96eac0ab05181e14601458e391b94e19d4ccf9a2b015efe08783b6c523afa13dddce301320f9c71e943f220f8ce99213669e8086b539c2fe8bd82899a2f61ab79452b23bbab8a048ce2e225c6d62cc38fbedf0afd22a745824804aaa1ca4e3aef70315c6cd72542c625bd44bcd183cab3f50e83db5b2d0b293e534a338fa5c74bd8393d4c798ea4c915b723008c8fbdc9043016870fa027c190252ca44604f741fee85d70aeb709168c4b4310b88a094fc1c98e84d862bda425793c8dff5fda090821ae88d8a30e5929230be9abb226c253cce7e64fe5d8ed669c934add9e285a56a9e034c6b2e4816b648db40cd0e75be7743341bd2d3c94a475e116190fe5b78c898ba03629ef8e85490f4886b3c672047b6f7aae5871ffece2e38307c44ce1e23de6ee8fc11d3289a9591f5e703592a17707f6db5edea65665cfe40045af20aed3e0edaf017e69b6f76df0e5dbe6832d08f2e19cbd5e85a1ceb0703b209f97ad7a8882f7e022d6b963e34be3862d88d9c4b481e7677ad26930fd325563517173659fb593abaeec005b073ee9a5cd039fad7b1e0672bf54e1bcd8864d690d0b710ea57f58aeb85ee88a1d039e742e5623659db6c536950c15d88845195dff2892f96e5ec676c7bc3ac62100baf20d501a82d22e356a374e64cdb75421fdb5d275d15f62d5bb2c6ea3ba89ced6563ed94d5a1fb99164c72f6a80d9824a510007164b809ceeec2c020d4beef4adf63a737842f86205ad1436937a77468ed1ed3ff53434b2a66bc31329ef0a5cf48da47a887d0d95236f357a57412ae6008a8ee37eea9763c04350657ee6f0b91b040e9209cf3b72193b28446221e2d1107a40379e75ba85b3acae8399daf3e5fb5d56b67436a54033f6388fef2a1794a58b6f090a20c9eb05993c2279d7d74c72bdc09b01e5fbbbc07d59b9cdebc4a8ac6c0b80e77e76139e89e98bb0d14952aae1ad03dfa69d944566218672a2a3437c4535ed93ca956fde88f4ed711f32f96ef0030def19448c82ebf1ae79be654ddf528f6323d20b37b30d3866abe73355e7d3342f4f0ff306b56e6576132b16ebdc980ced6818728cd6f3ba1984f4c3236b8bf8af73841a6e137f09ba708e8e6dcb07b409ba30d9f395e34a592b6c6b377dec490c667f8199a96ac4c83dcbaa24ed7c066192fd4136b30ce78381c55e672dafbf845b36b926cd31b33c3019d0d7e8b69b6c07d4ba2f91e828cdfcf8a411d1b8488f254a372b721caa514227b7ce3b0ec0f499cb5596920c0e9704e10b6cbb6a0f39fc89a67418f6f21b6390955665155ba8524fd3296cd97e1831abddfa3dc0a2289135541c5ef0b503d847324786a1723f36a4b4e36f33715edc5fb11f707032d8a8ad560be6d83ed9c1b7a8fc09767e472979614e7fd9f20726d14e1370e8690dfed1fe2ea498b2d7a5e4082547d0009ed3b1bd1ca68df874c6469e3534ceeb6776fcc486023792d5f430d558fb947742aa9cfb04fc32323c2e3671c0b9f39cea50abcb74dd787e07ea33f79c08a291d5bf153a739f52d363d87129d8acda460960d7bf7e808d3b300523930365bab02cc5deb8639b00842a3923390cd86dfa8b8292e5d0386601e873329ee74e13ec4dc8a204f2dee6a29755311abd81abcc18f7b8aee313113c645802b865d39fed80d835f652ff2148db3b9a87ce6b06f0992fac78c5753bc16720643422cb435c5b9a0a21e4f2fc26a71d24d236edf518efeca2f457e32ecec01e0a7c98f9283ffc9d2256879e794df7ff0fae945dd991fd98d8f03759b5a57c7b53485d64ca00f5a711401dd4c78771bc3d389d0ce8bb41070f3f9886d20f1e8e9bb75a9e48997c6e08441462eb730a5afc5b97c06aa1a1141d9f8ccfda886b16ad17223be130793423a880a4b653032007219131aefd87eb512e870876be161f5be585024cbdc7558c8c39b118352a12f9a6f98e53a9aa3cfc34a7430af3d31cbe0262a9d7a159b84b25598d6aaad4a582adae4df1e24a1055c0cd6100271232425ce9140fde51dd9bb9158f1d8a2bb50aeb924d983da7fb1de0669fa88cd158ae486a9f9e4fdb78c1033f6528a91b74a6315a7ca32047374f54c874cffa9b80d9304078dcb6b8d2570f2ab815270a3c40d8cbf28fee3d6602fa07a9027d785d203a0f8dc3ae053650d6321166534edad5bb59c2eab627dc660d373a36bfa8025ffda8e2c954997cc10cdaf9ca9b3999cb23f8a2863f8c7210927f2890d28e00a64f1ffe9024a9e24705ad182dcd59c48cd0dbd3767417413b6fd802ccacaa025134bc7bde4d1091f71fbdaad294eeebfa924bdf3e61b385fc4d78f22659b15dd245a183319907a4b51b0c6c6c47f3cc47ce43ee04d9501eae5cc34eba6a00352c30590ead639771f0846f6de95b9962fd593ce5ebec96c6414e64bef5d879764e7dbdc8dc17dc7b14c623392afc2ade411ac0ad4f1dfeb22d14a0d83e2ff1fe2057e962cab15d78fa3da5a5b1bc3c2f1601733c9cdb2ad30dd480bf48c53009f676922cfa01417ba41a6c4237ef04096fa7c0e6f3468d2eea3e743d6c8c98b42224c1565884f5475863a8215200841518363fd85442e3e9a7fc3b75fb54d4cf8d4ffad6a537e3b86ee26573546cb09019d741fcba28344311f471db45c02e52fbb4e928f77ec7200d1b687b849051667989fcf96092e9ae2528b2f12081bb56b6233381af3541a28baf37957e3b7db2af9fa7c76c0d7ea87618001135fb261d62c04a5feec1e479e0cdcecd4108590b3a21d4d1671aef145fa7975351ebf72aacda87dab6cad7e5d364cf69efd773e574bc598b9f173449911efd2902df84b49fcf7606913d8c7ef00d1370ddd9201a0849c26804cb77176cd7ffd9bb62ead61d192b7e5793971c625f7c9581fce6722d0b68dae5e83205f92bb8ddad5934135b197b230fa17900893508be2c0b4951821ea4dc062ffea96dc731af0ebb9e8a8e44800868a62bb7a4e94d803f3f8d50ed8b75c63102dd91b66de7ea8b5614491b0f7c9cf8a56a1be8f05c0d344f2f229c99b14d55431b20309c106792a1a5d2d323c801281727586c52bbe7cc4e6d1360a620a57dfd185618c636cd70530efa3dba377fd3b503e7a502a270baf7d05030283af27c0c3ae574ca2720b795cb4f68cebe83cac3f8ef982151276b13f70cb06adc98c719255285f3cdd15a1c7d6e0dc245981d04d19ee10de3b1efec96624b415366b634114588e90103e49d99ad772cbca55085b79a5378b3bf989ef04680f2c413dc4d9f16c42e6a8de42bf3fbb0c3a1ead96856a5e80f35a884668dfc4c1f9ff0d279fc8e0c8996ba4d0b1cb6f75860d8069ce10d8a90e59caddf71ed3ce0087c45e606efcbe344f7cf23353c1970664ab334035816f80520a95deacf71a77f52f7a76cffe5f5465e4b9dc87b876373fd314735d135109eec85557fe50204990a1ece74d997a033d750479f5bdc2e58295a4e03469a01d87a25f7c89037da481ae0942903cf16c7d3534cc5c989e06833d114442720e15e22fda52204df1e8f2d3f0acaa14559ef43702f1085b86700ef8060d39403b3f42195b226e8b020c7480501661418abcc64c41c5ce7f62e1144b83c74dc496efd8f06b3a086464cdd4426d29258043bad912205326a1f5cfd8b524e9081b9076c83d0570f9d0e5a6d7b84510931d44ee62402530a029b6236d6dbc826148876caa4addc3ba821a6a9b67e3f04093bd2a118889f2495009ec379fb0bfa6b506ce7ebf5b12ebb08fd98d956bcb91b35564018b8852c10f168f0598e624a891b57d8705240c4060b9c7038aadf19f5fc66c71407ea63b868fbcba53ca3381f7e83fa5dc0bba660bdf7504805aaa9f4414db3ddb95f5b31d82072335c24e890d0e110ca0ab2fc97e9ab4bedfd05f3ca080eb07c87524ad1086c9d35a59ee452deea486e54f3343ebb50914c82024ebdf69d1854304ce0d612a50b43e16a360d1ffbad04667fc7f867e73e847f19cc0ebafe02bd865c40f9c1d0ec9e1cb89f95c8c333302e50c6ac01616a5ca057ee4540f38007baab5b7841a1706c2b7ae5fca0d4f2e3df9344043f500a48076db0396119b6883caf7f20d771627b9449429b1a90b55a5329c9fcbcd973f8367e2d1658785a0383c7ea31661d25c590df067c2e862c59fabd8e313fba9bce83fbdfbea8eaa1c94a7c0cfbcd2af5942774ae988649eb48c30b5715dc32e9e74342b167c1485ae1d78fe357b496c347d5f8bf5fbdaa15c88d42a77a32bbd60d403f2d91becedb473486799cb1a6392d4fcc81338689e3ed6913b66307a6ce17a3c7094cff6a952fc0640afaf8d70702cb6a4dd4b4c2711a63780027540afe2975e90251cb5a8229581206de44e4dc50050d9e778a19275c18b6c0f0bc5511e184536a8650c4fb7a813d4c98fe0b188d08ce841de00e88c0ef5880875ec125341ea5de167134bb4572370a8bae807797319e0d8946c93b428366816230e3aaf68b18cc0cb870a69d1f7cf21d7249a55373493880de7765fc485a349338c154eea1d1e1c309745970abb0cf793eaba381475d9a130a4d2e10233815ac1560169282e8a674aba2696ebd8e28b6078777a3c004b5286c7abe5b01d4a62050347b006e9e5d2eed25d5ec7681e733c797ceb9eb7096ac1cf86be581ea16125ea18eaed1779c082557cd13d7c314d4b165c041c5562ed9e829110e6a30b95b0fc60d8009b312728322388b6a6e2e066661494db430aea8890f74f3814f0224e50a452c885576006cca8a4e941074339b0e84bb2cd9b33cc022afa223e2b79a6fd91b78c57d784c8ff6dc06d35a77951faf07fbb3a47bdccf36e4ff6da37beb84d13605eb2adda6245325b9d0902046f40e0c39f518b0fc36fa0acd01fe1d65c5f17bab8364cb85183800e96e1700e0e88f08040f5f6d0c4fa6e8e0c24ae21f71614e9c0d17a558ccf4e22a509338c057c8c1079a3023406a744cce7bc12b13b67822663cde2bc26dd74c2d700fb01fdcc7d4b7204b5fbc65393f3de1dfae4b70d58b4445e3d2379503fd3af6650e76c7f348c604edc3a3e3d4dc46f0bdc0053d4d47c4b9b187a6e656948e331b510b9d83cad97f30f2ec98a942837ba3cc0df1c1c58d224cb2a846609dd5a1203150414b8d2b8242c2b0f57b462639d52a3936ca0e9914f7baf951559bb0a5392c84747669b06528eeb29f188ec168397104d24562aca23c4331811d5ac516e8e62b98158894027db3e24a105f61fe005ad166ddfc80f3f83942e4968d3e229376e5032a7e3f33bcf1281f21908b5c4dd2cb6e00e55b0c7d33d6cc186f07f9e67db289585d40c02aa79cec48ac1f5f406ef9a3ef8ad54bf9d33ffc202fd2788054122bddfc4d19f0a463146498d4897e31090bc5ddc120b8830295857168753745ff2e8cd71d3b0d57ff0684ff9856c93e9e15e5a9b802eeffbe07c6b613d39fb7da7de5fe1178230e28fb0f3a81e6b3edfd78255e8646ad11780d90c81e1ce4b52460dbde9584fd51455345f3767985d9b89b437bcd7962504fd1ebba8db76e9f9f459520706e56fbc3f90681fe605cc8354701f673d7d3d75452eb56a0ac9619063004b2006c42cd33faf8b47662971673e69926756c91499a09a21a18fe0add86409b254f424df95ddc5194536368edde12bbe01688d10a844715496111415da04475cb3e5cd03495c8ecb0e8078979d8aa5f0add2b35b6d369c2260c044b4d581dc5a8711f1a38acbe4c914644167c21330afd3b3fc7bce216ed6652f85fe826bb49664b79665ab9d31d6052e849d4ba5245895c26875d6250d013997cf2d6be1ee33c1b07241037f941c0a0a5fe1167efc5be26389ee0ba5bbf865b81e784c8647b58dac1e8bb59ab88a96576e7b1320c81384c10ca1cc6913e7abc34b3c25c491dd300a4e8b2c120ed571f59d0132d851b96b70b3a22c04adc741e9d8c2a38c61d3458035f182c5b0fd945009b18b221d75a31b0d6476f156483a169c6d7ef8b0c760743c9a7fbb1397457f53db7ffaa8829046e1b841b7de0231ce7254798740eb93bb5944e07f4e09c10841d9e90ea85060bbd3e9cfcc7a57b4727921d8c1228cb91798f75dc55aee17e98b425ab8810f1ce062b11f4fbe100d5e89ac9416f0df8e42885bdbb789c369cdc85a65be0f95dbb28d47da5473e943a8ebd123f1e181a473ecfc4b0390e96884eda9bc161c16fcc8d8898c2f624048523b56cd865a411342f63890d60d94544521bcaf0a7c480617e2373a715e611c421364cf685e52df4a7436ba0ca403af6b6a18fbeae423a92a867bc978b91244ce2d8481983b9225f2518b44ff565e57ad25515b6fd11aecc843698d2691c2b70c80287295c1e37cc96ffd3711f353b3bd0f552cb10293a841f4abcc121593370a97143fad4d68a5d7f1f46c00b9f7bb6fa67a4f5f719cd1c192b3a8f868903241ee87fd77eb0850cf834ec214ce28780665a2860eb5a0cf1703958b895a0375b71a66b94114c5d1fed8a876cff1bc4bc31200427b6b8fdb2a294484b97d39225d5a70af3b9b1e3e3f651b57fccfda0b5c0d92de7d80b25441b5f5fff5cf3c97c316ae5a352aec3c1faaaab3291aa5dc48054bd8c28e367f6d8b6cfcc927238c05f91535c215b3305832be8dd0b01c8abcd1eebee5531f8af02e3aba488df111915d63dd5d22a2466d6b2e93d2fa94a1858656ee34d0517fd491e3a0678b8c7ae39e52faed11280a1224bb5fc2703e72f98bf6670137069099c24cc30b8d862a18d705d520a5290a051c8d312342e9ea7434311e1b4f4ce863a38df81748a79393e7b963840f48000b14f94477a4003e80087cd87face96734f2d4d67603913c849deb39103df5d2954090a9233112798edaf4f4e2ea5bc30a94726c10e8e4a79f62c88c2b2f621c98ebe385bdf730befa35afb5de05f4f7d2ab3e559d0fddeb0c808c459660e56b0fa63dbead73c416910bbcce2aeb169dbcaa48d2da06611847272befbddb8b8484570625857af28def6b38810774abde3413ca1833090b26f6018e2eeb25a654ed14ab8c3d944173c0383d60e1f99fd90d33d3d73a2640a501fd8eb04df205e40911337a941b18de1792b9bc38b9701625500eebd590486f1808eca6a827edb66e0bcaed39cba77f4098c8e72b27198c515d29d24a30adf18b399dfe18ef8cc6c5519623318c06b5ad2dc9bc3997facde4ad27206101e6562bd7bd5fe4294a83096099633ece21d11836a11f14a203ecedfb81c0375e41bf1732c81f34bbf6965040a9344c3ee40587e22c65503a8bfb18394d096909414c52fea3802a4caeaa19187e06251fff8512dcc505209df68f345df9111ac7c85af1e730e2d758977b2419e3586fbd59be3d85da60220315bd9e35cacf0de6709638d756efb6ac64404c954f9440a11aaf67151e35c7d7da3893bc781c488ff11783944227908dde1a3f991f19e351b642275cef744dbc33e0f4793a61235895156c964928848eb8cde18000a55f8d24d646d74710fa8d6b19f4897ca21f8616169394323fcf853fc12bb7696f8b8659ba9d4a2e4f4f8ee2bb23d422f4747846c732724c27a3a495f65622bbb4951e06d27498ab6dec4107c5a3573694f6ff21f25b496e519c010e228c3c0bd8c8a251f86c677907ca3fd1c54210e504a002bf4d26c312cc38947dfaed8dde324e109924196104e4f01d136fb65dfbb5a2916d2c34b5687833ba0d9fd3761a0839a4ffe8c171a16eca5006eb57055cf8a0ec01ae8c0d8f9cdefc03f15924eed1613f0ca8eab0d334c4b627dba247ef55f32265d3710bfdb49a478a11519f5cba8d77b1c356669e8e453bd8c8ab930c62a0d0f93004110e91437c79a7dd08cd6ed852de64097c5da8f9c2595d1d24d153cb22fe90b832d1b080797b857402aaa320038b7bdf8bd6e2b708e3f4a2edd94d1be85e80a63c672a4605c50c6e6471c9d57193aa3ff76d8e7eb20bba81a32b0dc0ea5f7996dfbba724c61f39aef321bb0807a4edaf6d932fdb175ddbe5b7a5ea0813ddf3ea33e0667ebc24964ea66070f14a7f8793e28bb52dd0f3e7c2c6d47a1ebb2797b39d5599a6792d6ba4a231b267d6c58b57530314903050f462161a84b8a6bc8e2ecf35f02c44b0a288ba429ae487ddf87cda58c4bcbae41391149329b12a5a6a7723772d042334b5aff9b5c683e88cf49013d43d98c3c09d64b75dd305c6a2bc6834775383efbaab8453f82eb5b4628644fce82e1267f6040d4656f68046786728dd7526b338b400535ee3d6ef8481eab45fdc6b99f04554bf3066427aa8b52569d66d5d7f1cfc0f59374c956ab0792893c4053867b76b2f4d103fa5d0262bdf89cd22a1b9871381d8aefd198d48a2b24d31356f78eb8361c6a713d2d4048db007fd6074454b4929843c009bb8d8b6b91551662c879644788d6bc61aee606e23eaa7e14f47a81058f74a577699249aa274e4d939e9b84619be5237a768a6034359a10478bdb8c438327b4709fb016c9d021c369b56a9c7b7427ba418f14211fdf73df9d082a8c3244461601433b482536add0a4fb579c4181f980df997c3232ca5678601352e34896134c93080c36412c7e26e07db85c31a9cc99baa8600cb8ea8fb63c9f02446a9b712772aaf09bcd8cedf9d1639d08dc02b7592d0f0068561b832d728ec16fb4a34929262eba676e33397656b8095ef7db44c4aa68bf3e9d3998f41caeb9cd80a99b0aa524652abe08a3d399c1187811ca64b4d4c35174b104f95cc4a1b720440bf1179f156d2e892d346a72a03a65c8f7d9cd34e2231931bfbd2bc2d0168a81f88c72784fdffc918917b746b66dff5749437bcf97f5d7eea6b30583327ac600b32bdb2f34cc2a60ab5a80bdab1ca5b1898ced0099d1732aded3c3ee66aff9cc8d53d3216ecf7ba0ea1404b7336e2176cad5437cae1154bcc4c7ed7b8674c0dc3315055abbab7bfa8eb13ba0c3a80ca168008bd5a159afd49b09c94a9d02cdd9a7092ab67b466b4b0159419bc12b02e7ebbc74eba4dd31bcc7bc7dde35f8130e80337beb526d9bfba67c33f23a8a249bcb465d669cb99d993dd161c59049ab63c61bf59899c2fc1f377bbd44e160c6825ab54594965c6c88c6955c205b9347cf6278579c3fb723fb7a94259abb4f811006b34790a47979904b5e0a1a0175ae4415b1328aea2f94d97a8dc8a5685e302b5ad52fd6623abc28fc9aedcc7d397fed4cccd75912db2d3e89243604eb2733998f32967fe822ea0e1329a3c3cc40edd4907b7af1afc540cdfd32e8c5322fd22e1f0ac867fc32204c8d530cf6840d4a1ccef2a260018dbcdc18db576cd7ad807ea72ffbd593ae9811c30503b19213e9ba54cc829995898a4c2ecf415e66b0c0018286a761e30bba5cf72c8a670cd0e8d354677c1e82977573f4faee9ab0ab864447bd5fe12170d77c91d023c35dfae63a588560b9e91feb66f0ff2a1454f7dc3944baa4310bdd7a6c77259b53085b5d86a7b0c770fbe43765a01d24b624ce70141509257bfae804cae1224e3b9fa9a60b07e3351bdea3fe5dee9c799e5fe9420a50b191d2b5d19cfe55b36b4c94829022d584dde10d2959d54828721b7eafe822feb1905ba166b52e16e1cd14282a3a0343c75c03f90aff471a73c00bdde6533a7ec940c8d250a17c924bc0145c98e98ef235218b15eba860c8f259944d726fb453607982a6c8f3922464f2fa1aaecf5c492c7c4dd213712acaafe56e7dca89541090294b069201aba0e025c43ccba04f580799ecbbdd9bd056200caeb186d45e36d13f9b2a089a9e5c533588ec76b95450e9e24370965a83630f103577b6af142188e46c10564460a8d2c19ece413cb99fec398c0086497d62d9646387a9ce8a6aac0ca1d1eedb20e0b54cc2e430c01f66f4ca6e8c7dd9c8d919d63b753e54cd71b1ba4c17c08ed27bd0bc581ff0c6476fe04af57dfbd1f76c63f1fdcad152775a12c5ecfe63363a74050935d87c97be6ff5693dec8778f6611dde14189235bfc662c341534ae5118d45b8d3121ad910c2ed39f1c477f3fca18a7d21f6cb20b863bbcd31aaa73fe49446b10cb04b27dbb0b89d378f8eabd5c4dac862ec1e038a069f0081b8682200ac9b28d6132b4ee509499c57de9238c4542db4e271bbcd057aade88a0fce729740bbe25dbd18a57c44510081528ca63e15f3f50c1604a8fa56983780546eeb28214fe70f507f4def05376b0ca9dfffe3dce2adfe182e30e6c2f4793c49f3e1ab22edc510ec89abd789b2641f21da5748a7f147a793a0615494a75ed481376f36a150629979ffecbf8a56247b7501386c081873b4d4695dfdb43d2c518f5338146c49ed2c95e82d077c666bc9d10aceccd0c766ace4556c3881b34a6793d3156f1cf535a042bf0a3db4375c8a304a6021820bbda9ec58bb5bb1e4974064ea7458e3b43027f4f87bec0e50ada710fe5352bc0954bdbb08deb90a794a1702f1afa386d39942750bfbd11d625591c4b45141c08103d06b2ab0261cebbf45da0f6c80e3c20ef16e5ed285d86117708e0bf947443c584b53312b118c0bfe186160d1518a6c9a7ef4ebc5aebe793fd901269db9f620cbfa72a2b7fb4f12586bc4d20daa2c093f2e89fc72462a67694dfa6cd884a3bdba4cfdfd3f26d1e6f09b06b03d4fa8dce8930c4df5e00510118d17c01ab9a55f3218165b593a824993a505254b61787d280e199332437435c9802f26f08d2b122f571fbed4952c3ce07b9e9f537dd205ba7d4d6032dd4735b6ef2f985aa1090e74563a4efddea05b1fd288b2fda59b7594366ce11fbb01f5d07f412ab716bab8630794b1c082b4c4f1f022351862e92e74698bc953a7add582da47baa7c441d49923ffa07ef10d899245602b3d3bd9787957e1ddd4baf059240759af3bc048f10eb5b75d76c7ff24457860d3a60865289671346c51fbc2ecd91673d9e6ab9b28f38513c3f82b29b9b3bb5c3725493bf3bc260e714960689d10f83311fd6f19fb4939ca72841ba2748e9934d5f7b95064167f6076fcff254160740acb75e3f4d549858b7f2328eb681d626a335229cce4f5ae19bf47f207e1cc4ae5f5dc7289518c39a08747c653934fac55831f4363a4defd6469991081b78d0329c8b79a320f2bf1964068a7a0ba54bfe29f5de53f7a26dff589762160a47c8a8536cb2ed172bfac36d5940e2bda3d8eea6f9c3476f0652dce8e2d05c6e1cd03b69acb73d704c7991a757cd6d7d790bf1aca6da32e057d184dde78350cf60993e5dbed13d228b3404a4380be2bf7a3dfea70cf3ee193a54e315a8080d225f50f77e314f1d30fb675d5e33a96f179cec22bc63bb38f200e4a5f6bc5d8fd80d300b1bcdd76bce354eca079ec7b285327a6808a79e4935b4b2ac6013f77c1045513076242f848859301b11d6dd2d8cc50324690b0bbd9dca7e75b519c5eba1cb85fde6ca7d0ae58dddae52bd76b61cb73b826bccd478dd8a2c3da3a8c706ebcc42464e6aaae6f21b2ad86a54ee0428a3332d58d0c0b538d302dfc027257e30115f3c735e9c8d2db105d7d9f96dbdece764cc600716e9e49084e7902897696b18d1be4a36dea6808851134fff683130b3c578b2e125f2d076f5ae314bbc23339dc035e0d7f7a70d81ee40dd7ed4cea3ec830c294aa9dfb622b3acaebdd362c0a729311f9e65634637b9eff8fec790e263b4ba0985570a9d4b274e5f5d44b2fd0f673e65595472fa1bddf47b448f4388fc476e653e84ee8035dac301681adcac5d25f436245ce89a577f56262481ccbbaca6cfa489c99a36f53d8795a57b364412b850f5149cbdb0894cc0ed5e090564df9f66b9cf3f38a1d4f69035c238958485f28586ab023242fd729ee294e4296a1358ac626b2afa7bcae8afff58026d713c18b7d53df425ebe4563091e210e037f9858780ec33ab823c4a272bb76ab0cec1c4f1bfa86902a571de260914642563878f3f8d89252f25a33e7c4e326f02b03471d2c75e0ef02b026c26aa36817b903e579a2bc2d41521f3b1462bf1f34f9d8d1f5476aa8416b3fdb78bf66979a31d73d1f3e53a1a957069609063ec44b1277e391b8f9349a0a30e60437ff9ad2f016b8e9aa7b720b2827b28f2ae593ab74c3c3037016f31ed74fa07b85a352b7c14280bba9d1077421ab4a3c719d15c1342045fbb2f2afdac7c16ff524f984415921bb2e391fbe12c7e87fbf000d84b4886cf67e00971b2b38bc1d33a71622e50a38ce7c5019a4f7bd2ef3a83510d31e1803021db3508461e84402fd5ca0dd1ab6c97422056c919eb75cda441af86895b9ff325dbac502c8e9ef8a0324356366fa4f9b5ebbc61c0fc9874f12640bfc0f2944b80a0046573405fb094113fe3460aacdcc22b6df8a78ff832bf6218a8abcfafcf3d4732cec79397f725c9010612c924ae922fadc4c542b33b9a15679f3209380e2e5dcfcffedbf4f2a4d774b104b21c3a56da9f2e7d6c3a13ad0ebafc6528716e75ccd324318887568bc684501b3851dd2901da752e3f82ead770b624a410d6d6e1498dfeabc5451e59703abebc1c192c7e410e0b29dbfa86f03099be81d743c484d14d06d8a57ee58a4caf2772ac990363a6fce503b400f5e782429124bfd26d16ca1befe5775b0971dad4401c102a2bc86b107a5dbdccfec6b1d3a6ddedc8ae0021fc5122b3b72c0faa6090d1b77f5fe63fad7ad2c6eb58370769d130028167fd95c156762383af22157c4fc648e50cbb80e8ead87e6962486a945cbf1764dd5b0b53a57a4a817c310c53f84df610d7467cdf3d34c28d8c58309eb9cd5ff1d9d2d4b75e6911854c44d0191224b42bd9318020692fb0b74c4f665985da223e3b28148a25a3321e45906ef684455b338a6259d5f4dbc8d7d954d4aa2aca6c678059003275d10abc0b32c3b8413d125774ab926e8927d255255047420c5904e7d0686c8a1d2d9b020f11ba545838cfbc2d1dc62bc6b17ab47b5c1237a0c711440b4e34d939c12523638ca968b17d661bb572be8b5d9807fb9e304128fff2026ebd9aa092f85056014f538329272f79aff015dba881c4ca0837bff2d549483a64c2cd4b4666a6bd21cfe82ae83c38850e620a1ce753fd90ea1db50984ce299f315124bb31f00d05480bfcf4a87c12ad90bb0c09b9605c0568c962b1aa8eb169b14fb26ae772b9f12acef48e9d6d7a6d1808655d8cbea83976bfe5c00cdc110f7c4ffec05cdabaa2f2c4f4c70a64fc1ca234cc1ddf3f50bc4feb40307e990731cfa1b34609af410fc380000a819223884c8cb7050c3bf6ad36d0e17bd016a1aa5163460889e79519cbdd4e3aa4296a20d289e93f4dd88ba356c786db0f7c744d76b8ec83a248398057582642c15336239e57726a2b0af68c36bad091fba2572188caf187fe917d310b4ab08c1702e8bb0a935162c4575f6c2c40ead7a63ffda8409c3d5e3100d27266f3d48337b9770f064b63d6f2ccb94f7730797e91330e852bb4fb10f580c9b4681b2ea38fcf216358810bcb6b6e96a94649024cbf540909ea7af067d8e98ab60f92a3246dd17170ad4a1f599feeb5c4179a8f1b8f914e1d005c3dad288f7f07b07808795e4f695562cc4f23b02ee5a3d318be67b693667334cc45f408185514254f606b3292657068a586eeb0758ab18e2d22e4255fbf986c7ce456f13d0a0b449b79de50a45d1bf1e8c9a5bd18f9fa18c5866d3a793065121923ec59d28acdc2dea7f096b6fcab81459b0d5ce55d419e069f5886a820cd8b8ed81a8ea08e46845b0a46581eef902824da809ba659faf30f62793c107176356889b767e90c92c00909263c8b1e18a1381ea228c58e19f9c3c1bd51ab29890eb0abacb146a818477ab2b028da020359f744c37931c293461a67466c0960e2ead19b5198cb24939318344b43087d86c8fec2654c9028ab882c3e698c8f1234d9d7df66518137c71e3062c3307bb08cf672ac933da682d4c7254265a46a23531f61b68042eb3d80102796f0e0fd217ce8614aa9c59e3242bb772abc7e70e4181cf9a12a8adede2587a57794f4d9ab2f410ba0e0320b694ea000e05607bad490cbe4292cbc6e66b70d265bedbe4ca4d6e70ecbaa93c0c8f5b283d9a8d2e9756d0ebcc9632c4af8ddbc285c3fd9007a6bd74aac2aa13ff6f3bd70dc7b2b29151bd09f65e093ca8b01b9891898b29b4eee013205d9d05380a6e4b0e8e49414b9581e4ac86d4eceb594a8bd4cf6fe33fc2dd1964896612827649f5d567deb9f7bb7c9288779a6829d9f25fc1a48cdcb81e930ee1019f8b86dbe4552cfbf925fb55f500fd417041e4c151a85d18c076132f9b9929ed58babe805542393047b26746685a0fffa2e3cf817fb8b84821fe376beb70b4bd0192c7702f8a01a56a62002d12cc0e1841982a7d53d73aa507b8137793027432738817616919f0d122f43c8d9c4020ec21c1b238913085f97e55405215a3abf53c09be642ea8a83fcaaa033da7972d153d1217c6960b9a1504f8eea9c1c20dd36ea98342df4b97e460bc984498b2a96af7ab97744df24c2a455d207b619a97046b64c9951720b2067c434bf694dbf18fbb6ba3e1afeff28026d8ba9a2b1b8e88fa8621d5d9f65d55d76b15575feb6f2cef80699c09c56a4ed8af7a1a658c7d0a2d7aa1981ea6985d309688f29a28b66ca3e376b47f8abd8f51687a4496f44beedb14e1971f3dbc07e03c8bf903931541859b325b8ffc905ca00025672326dcfb9ae3da3d9f90bebdfe8754cde911a964f66c64a6d2ff70ee1826718ccd4b00d059fc5c56ce5e008ac0e976d100f7651a9cf71ada814068384c8741dea8bba007c9490a3e00e69202098635bc8054d488fdd87cfb492444ec35505fb04775c916ece2170d84c5de7f834aea9360487154b089a59bed238f91b43bb0a1d1a940126408407ebfed24ffd872732f9aca3d86a13725c466943125007fe0f83c1ffd1f38801cc0cc18b6ed97923250b431e6c9840e07f4af9c2f248718c0d2e909a8231ff94c17f471b40d8424ad84c316ed1ba788c125b4c21ce6fcd7511cc50ed4546f6a28ab8979a828cc30b37f558bb1cebaa71b9c604b9158d13b0a71a4c3f0eed76201e15406fc728470ad3e72383c21374fcc4c80417cc63a04c6dd0a717ccd88ccba9c08a24a8264fdc047578b6c93ae1e33b2a1bc6805c2dcefb898b93c0dbcc1b6ba0f15a32fc7a227f19e2d4d180b4db447a7ab2ee421ceb067a279d881800811cc4f9db54d9114c9cefe0975323cb25e6f7d73e877d219d3e08333111427da5018fbc2288483584654ba05e30ae147e4aa4fa863582ad47f41f11b8bfba1414e919a444b80be8240ad558abca9b7e73b6bb2b5cb555adeab4074e66d5e67cded31717d9630450a0a9fdbc0c8f1b9b609845c18bf45d10a63c964c2c9c47fca8becf30172204b7d01de1d30487435b282a21ce47f2ade22b3045958c31aa41e515a5af8e91bd0ce55d3b1555850400c472c295eb312df746b82a5852bd2e9fcc21e3e971cabb7e09a913ac23add351524bd44116eaba340a1685be6b298df33084a2788a1decc3f1adbcae08602fad9714ce4de05e14cc00d147a6db573ccb280d23288b0bd32c88fa800b2fc6e7b232b821526a229b48d4e436512c4bc8444468bb23a87563e439c1dd4a7e12ca560558f9c8a95eda5402106c16b6595010cd1888792c35640ca20061d2f92f4521b75586e253ab172b01d6ae0d530971ae3538a1170581a4dde0b6ad312dde71244201748a8dd192dbe31239b0d8dcc45bc6c67f15ed037e68e72566afe69095ef4d2a7e9185f302366185b52eb1c2bd9aacf63913f0632fd63d92559c5e778c8af0c006f1c598d02c7f81435588426c197912b10eb5a01e089d6bb64b39e41a82ea6cf38d20b8b1573ef0517c4cf6ccb3a79595e4872f7c952fc766d3f7c74b1a03a028d349af65f0da5e79abce061cba4f06163609da89a8702a654eae20aea15988b9d08a72b27aa36586b1b849c39320b2e35a25f77e0d5b852211847f135f76674041ee055c4e8fcb2a6ca962480309a336e40217e530f8c4dba3a7e89a9d8afaad64eb003b4e160c390b44b36f0452bd8a8a8722d0c8e011dfe624be888b5724eb9ab22838254e0310c7a27b5de2606bf0ca309836911dea0e5fe23f1276f916dbd61979581d240365c63ec722189f75eb36f65437d4f9b499da6fe6986e7fb354b7cec79532e6c103f1b34992b3076da982d0b3ed04c34b5eb73bb2b0ae8820125ac44715392ca5dec95f124656a1ad8da3a10db98329395b62ac0da9b027c927845b45095c18ab8f3f1f911c610cd1d248b1d7017ca63e861faec65f6f912d84c92b44acf9f2e4a239b5888b39dc2a93db6a2c738e7e585e284b5ac400147ecca72473c04d8988293feb94a7660fa306cd34440e43b45e798d99e0b37362b4a00baa0df3f82495aeed8e49ffefa5322b754f943a7112eb6198d469f73b743a4e20ec1c5a5e545e280c9323a738ca88e018ef24dc6649ab486c42b2528c3de415cab3052285725903d2d4a780762d29d5c5925dcee1b09fa5e690518e7536e2f6d4909e94e41c026fd17a429d2832f0982f19a756180a97ed8ac36aa1e86876af4c5a30dfbe2d9fbd30eff52e603dc0118e7e5fdf640c41680952f73c2ba81e89b0d994eca34ecfffd25b335319d344eb35ac595e9ac4a55e860e3d510e189d730e5c337705b39321439010a7a0ad24ff23d2f6d08dc6a104cc182d299b33fac7aff647f4cc2e32a5d8546dce4a9f5a8a1edf40a145f330f41ba84050d01ac72079a53a87807f2f2e8b3b1744249a4096c74c33825ac2ac045021ec081fa71fb3f94252245350377f46476eb6d89ada0edd0077f091d89fe54912fc9fa6da7ce7dc82d406ae4847f586423dba5e419ba72c4aae2affd764403c416d2e9e1e7251d8a5c003d2a4eafaea3db48a12246cc29590755d9a264a3a9d29c17a2c84034ae201f3960894489d89914b5d75b2fbcfabef0257f7a4a1993856447fa0411a6f1204e28f24e00113a32a71a0c3551fab9643f016f9c226973266d28a7e199ec48e2d296861a3519efbcfad5cbf3b8679a468bb2679b1afed74244424ea15284d9733275eca437e370e11bcacd7b65d473e884509921a0a4eae332360289890ab0ab83e8fe979f2a32db5452f1d69b32a234431c58479a6e24cf8bad07f0798f5f1a984089dce1e59c3169fb4fb9a61717684acc1155ea32b4309c4e19d5733f0a231f3f0b286791982e458bdca2bf441bcb078e077258901b2c5e376f5d306b3a43c85942c098912d71c1534835c3d0b6e6f539e75386ffbff8071d342a40579ae86dddcf054f59242faebf54ae3c75212723b1b5cb400076d1c603b67da4e26d09a4d109c252473790095960a6c8f2254cd10e961e4974337261c68eaa40e9091f399f0bf3c813e48ae4f878c4df249a80075d3112596b4b8b4f0751cc9fc72d7898d72aeede584acaa11a5e054cd7e6b845370238388553a1197124a7e95faf2cad7bd7f6476efdd0e1aded5299c9c0410ec3278b68c28be41beb9c0a978b03887b11aeea62988f11ef6402f6c0fbb56ead8157becbf860c524f3ab5c0ffde47fa12ea8840afe166e3d34b3fc72923be1759516eefb6088ce02b7ce77641e70d0cf36908c485f556e540c6810651a4b110aeef22334d10d3655ccb1938c7f66cef1d026caaf4a76fd76836f393e49b3ed42858f7d9b30e64ffa70b5e05e1dd99868b24d31428267108bf2c8bbe875a68904a6ddb0320258243d18c166b4d52cc4e49dce25f72d2540baedeee7e76a6b730e859300b6a1f9a2000cfd90948649d0d87e90c3a251ea42c8cfe3aa2826413a8dade90f643b6e05f870a38eb8539a935904b6d98c91bf160acb765853de55c9db9e04d66447f944eea014071c5f6ec8a8064df05e5ee8398d935def8e60255b0186c4f379451ab48faf5a28d4ef8f2be6ebd62eedd8423202e147d653b2db1c96df3c7794f502b3dab309b40af739da8bd37b011be98eea7378e3ff7e1723262d3f6bc46ac91235b5fef9121d69ac20a35de0c36745f38d2c4aa6109a471e5013c2bec797384268cf783038086196e920ca6b10faf154e9025c10fa0705014e0461149c0658b51025808f0dbb6ef3fbcbc5e5e4e9d2396a3807eed02c0fff42731ae918cd9dffa75052ca468a3056e94184ceabcfab095f5c1dc39e0f1d88660c40fd7b7ab40f45e4ef00d67c5ce31f2c073ff90fda3b6c875012ebedd3217789345e8a9af861449fa75d6f2a65faa5965229f819944a3f11c239a0d6be30e1692cafd860c54aafc52491413521c0c53f7a93e85dfe995159eb2af50d547421c680786810074e808fc590b724ef6a01cea46bc335c09ad51c190f01a71b37467d6e025075772b007147654068409383979e23dc5cde9ad23f96f0e491e5733be408a1d5f98bb9d0fa8ce98fa59afbacf1d7e0d7980f4eed02e5369bec9bc3e4fe5e0f72b5ff7dbdba2deff171045f1521fe438cfcd60faf686264bb00c0cbd76b79df68fbecc43e003c27c4a8c30ddc2b2cc9953b5b5868c820100ec00ff881800760ea14eccf2ebda7bc5a4c759d07084bd24966cf44fffff92c8bad85ca00b7cffca3bc079f7b7d68e5e948144bbaff1df03fe706348d59dd12e9d5e92bfbb4aaa03a305e5f545c4c282ceed5a444d0ce0c95ad7227b9bda6d355ba70d72cfef0fa5803f12769fd4c2fa0569c20b5355a234488fced327c747355090e73f1c80280e463542c57fa2f71762346317d7347ee66b60526479974370cb9fb31b7163873c67da6d9638a6e0cc7b20a46cb4676b052d0e45399a7ea9b22b63f55737e84bd7e705d0d50922da67c165d8c64b703a07b0c0a18c90cff40cf31566c21cee6dc9cd1c695069ad387eac1ddbff958577bf37121544323d6bf02c02a131e4ccab6d8560e4794c59fc8b0887f4604e9ee46d3402d3a9cf1203de86d002479d6ae1b73e7c0dd6a2997200c7480a8d008dea94d2d6514fa0c52882256af83f739c94aa49252fc7b37ec479436717848f22fc05599242c0732a269ccf6d018115eb6b9698e55ecb13f36acaea65c8b052d850a5c8a66e6c68449b47fc78ae0d5bf4d7aaf394195912aa078d5ce8a5372195d553c0a6bd489cd7ce9803476d7feceac3ac3456cdb344000141c20470fc270992570ee7bdd333a2447412e45a549f5656ba89969ce43a0c0914e08ae70fcc42054cc913c5ea74b41bd3998a2310f1be945fd23e3158c079297590140b7ff4f0e87ea2f45178a371b96311075de9cb6a2ddf5df8e7acf723278928e9aad004ef536f19170de2705fece7fececd9e8780d9a2daab4a64f90684d9bf8808691d661f257c1c32aaf8272a607890dd32e155c6d70d1953ed6e8f6610c52337d238faaee83fccd804c24e3a3d1aef25cb7d69a63da1e71cd2c2c7a042aad9bbe561058ca381d68bdbf83140021144157058cd00da369a85742b651314ea208052c44ea648c93a8008889ff73d48d162ec9fae11a714b398503b5f061a131445c09008cfdc736fb4727564c364bd0de6d6def2d654a4906c20bfc0b9c0b6149513a602f223389a02e7d0655688ead185dae93bef44b192ef558fdcad3a3ce0ac25a4d5fc599d3971cc771e24c8f6db22593efd2af3cc355d5cd2d2bcee5fadc739be862d0fd6a05dd68b77d3d8425dde64637de689d37de5f6c3a7630bd71a811f28c2843bdd55255e3a04e9e62a843587e2f03e5a75c36173d1d5f7cce3979e6cc49a58425f53c1e8425e5cf6daee984238d46d2f98a765de7d1a7e27f7118e5f86b1c55bad89d4eb7925eef7a14bdfb93bb83434e1b081e09ba1b55f1f5bb892a15b6ef826e90f76b84dcd342ee3df6d932e506ae492cf976f7d7089f16524709b1712b084bda9569edc8ade36e19e45b6595f6ebe8570619000e993db6e97adecec9d090bec0e3c145d8df2c2e3f26a6580cc3191c559c6917da149de9b13d15ced4465da432fa83576b654148290b6a120bb8b84f9f93a7d6283ee72c4294353cfaad5e8db7479c265b3cfd1c864fc3c3d3ea1fbf9e5b78b5b2b63945da71a514085d9dc9700255b96dfa37f58d1b0b2ad6f9c39af53133337331e66f9a38c7effb3e11f6032dea6ac6edb2bb2417738735125734e624969c4c8c492c39a23062c90d7142b7cb8e9b71f9e18253aa1960ec2b1a4324c4cd64664d03733127bf304262b8a16f0c470446915d504a51aca9f8d54ecca85818cdeafe2a37b796697182457ed0461541484215628009c13b8daa381a337bc293396a6f6feff772f4e6ef9eac52a169d1d0ec31e1faa455c961fb29aed3a2da2d2712d29db48ab0ac37b8fecccc73932955704d25e037ae0c9b586133c7bfdf65e05b76431d3734d4248f1751965997a39897a122a3231a52ac596527d4ac92a312e390bc795356292d96754a0e7772b99ebaf3cbefb6d865e1dd11f01b3387ce668e3fdb1a9b39a88aa562695247ac66a9b3daa5225931a656a9b58aa51a555af552bf5430ac32ac56ea50ada274036fde943eb8a32a4a51444d7e4a28196a0bea08e5650b2cb584fa525f5b964011c5b684714bd46c8bd02d515d503454edfa53eed452b34a546a0c8aa8851a25255f1aead35012c22a8422aadd9c9296d94442d85f86628992b5904588226251491caa71c2849915546a9ca87162a2887ce56faa22f4afa139995af2957f2a1586a9a51ada75d8973a6ad7fd45199871fd99534ba2d75f6ac9c91ad95cf917bd66b09ad8ad7162e6785953e3c4f5192e664e6aa9c93ac4e3258587100f2b57c8ae1f61a1352d40482d5dff5e5448b9258f9816da2d7954b96ec22d790c5d771eb2eb5f291f35abac51e2a28b173173c4b66bb8983dfdfea8d9d33e5e38a478f3a6cca95dca9d66b2393f4b7b648e9bddf5b6af5613b358d2c9e3ce1c7796dd13fe7c19232e939c81f98846e823e6a3e664141c9fe3e9fb481a85c6a4516914d3acede98f4b39b0d96373a90dd2a536605c6ad3c51dc38c435c34ae8f29665cfaa1e591c4cca13f0373928712bca24f79943331c8714b1e443342979eee0c8c07d1cc210a4f2f1f5c260bf56a1fb3d9f33dbd618ef475b8f44bb18d4b5f549a3ddea372309b3de052b34e4f7f66cc8e978cbda2a373e9d8b613bfe9ab8c3df189b9d6efee04ab0e8efb505b84a692823a2c0f2cbda23c887a1cc2034b8f94e37810f54897668e1536b46695334b365d9a6532ea04e898d91ccd9874d8ae57fea857b366887abc81a27440e5c0fa98cd1ceac3e8d2a73eb8cc913eb599d9cc6c3cce0148df6b90660efd672324b2b399433d5154ea717ac9c84eafd7458243bc81df70e1f89fb6e1d2190618977e7394be9763c7c561a78bab1c5739ce6626038b34572b57b73771a75a4f75b35fc1223647220f598fd4c7d1a5399eb35770ccfc951cf5396edb38ce07cda68b4b7fb33912b919d18613d95ed1f1a62da18dcc491c4fdfa6c8491d4fe91435b5d9c311551e444ee678fa3c64b3a7fb1cf6061a5e2e1c44976e5fce2c5d9a439cbee270d80af395e9f2579b53033b25e4cd9bb272330ec2895c632c668f8bec03eebd51c712fbd0cca19cc8335f51d397e39dd1efba9033d1f777ebb111f67bf4277d77df448ff55865c2a0ef1e6b9272cd633ee4441e73a1581a5ef7cd596bad73d6a63e334458ce0c69f5e823e2209c5ff2dcaec5930dc21774546451c8bb570fdad1acb53c1c9d54f20e73929578c5df753ceb6cc77ce5afc4ff5329f68ec9206c210ee249fc23e664f79ec6ccf12f4fae860baebf2771905ac43ffcfd3d8dd953b5cc1cffce06b7e45c8debdfd96d68c8c96d89b922e21f556491daa8b8ce9575a6c5f57243bafe65778450588b38c826c6fca165f66c64cc1c7ff732737a1096dbe6e5fa6f435d1786a9df86b6a1ebefcf499824939981f98389308f3059f5ddb8fc4aa58e3386703da190ff2707d9b8c7e2961ca50925330786a476754a65ccf78810aabaf0f947fe308514ce1b4641edf2a3c025c2d9ece9eb24f74d55405be72be6ac0a888302e2983db6a82232b5580349e542c77df7d3a572e1f4a63789336c7ffae92ac16ebbc445950a3a6ebf8edb4efad61697b4166b205db7538b35a4dcb64d74a85cf86638fdf7d3d559950bdb0cdc8349bce7441510677a6e138b929c4ebf892aa0edbbdf3eb165be8222dc38c566847fcb9ecd2c7e98c1165d7a30c618595cfc8de46450105f9831858d1ed82062c9c5dfb33eea5a6deac69de1ebcef84f1afff861f6b0c83898398d0ac25ebd601d5cf6c15f55f69af970bb4e11f3555f1932c2d25f2f27e9125d7a1169d8ccd9fea76bcc49210ee2c5ec71c12479077375c4415c6424fe219e74740840001f3e542a1d3a6847085d76cbbf74e9f67b941edb61feea51071242e71286776a21b474cb6e26b53d1d9926b2e0ae4d64255f7511c2fed25f4b346c84fce50cad8b79134878e2e9a69452ef2a9e1c870a6a24f94fd63501074861e000c61a4bbcd1230a2988a0a28a0e5400012e11961d26ccec695205e4fd27aa803e99ff3ec885fa209a0ac803835cfc28db47bee209daee4a8823134658ea94385605048262e82b7eab020241d1fb2097cc1261198ebee2ffecfb8a1f754458fe658779941e65fef25793b38b315c2ee5723f2d32afcadfa8861cdc091641dd1ed3237731c66d2531bd34a4c3e4107698a0276c00061852b8b832841b2efe244e3e1162881f10e1c312530cb9f87ff88df0cb8811ea38f9c3e452cf8891f6dbdf7ffa9eb1e1c2a7377df7e9f4d3a6f61c27a9cb4f6d1ae3cd9beeeb42282613c775737ffa1fe74e22bf926850a381145d782e951d97d461947a9c57e6cea337882e27963add15110d150db9951932c2695424e6962e748bc2b81629b77421d850cca9348bb198465aaab895cbefb026a7dba011cae024bc7d8422cc1ffc622ebf9e4c11e6f243399dbcca7dfd4cdbd6d7c471a08f58c87d5764ced1f41e353d5864ce9cee4da24d0ec2ae9ff4c8df601131cdea9318cae4c02342f8bd0c52e84d8e03a120d2bf3d6743c04b7749fff61e0d3022a8db62660ebf3784b09c4b627e767e523a62c15da0c8479e2dbbb04c957f3bb1ec2326bce4ff591eeba4c76934c5ec0af1eb7b3245d1e587e242a69297ac0c24e06b1265383d91d3f5be7bcf94637a9358f6d7a0db5564c24b978a737a1527513057fc3584395c9e7279ba98ff890f893e6343e84217a7c7f96d84f3655f873858ba5c6998e2da083b3145c3146d661e0a1b08a82f61f3e7f022ece728ce4797495e72f5d2f51c704fc1224d65b6ae9a3899ad5c128a4be87bd7bd40c6a24ede07765dcb5c094314f87927ce543b274cf565aac851af51beee90f09a1b2cd2ed514f2854327b9c8f441f3c84b3f64cf3c9b5d6b9937bb83d3f0333084b79dae3fde93eeae1444ed47561984a15b1140ed254a4dc7e0fb432dd475438481bf18fe6beecdb3257d88512a1d0e0921169cc5742fd45b294679139961e898c388827317ff4f71262d9b76ca3db3fd344c85f3a111f39e9ae12a4ae9354bbe61b77db2c9d79cd89f14c765e6a32c2b70e31718fd3f335f16952a16ef30fba26cbb65472b9e4b69c7f67832e5b27957e7126bc702ee9e10b1710810763be5cf1021b6a1005e1082c679c317f26c00be7fcd49c3f7f724411c08b0ec9cef0684fe01025470f35d8f8218d1baa105d114629f20209f684971d74f7447dd197134a3259ec896e065ede00f3c5128090a484296ce0e215245104176ff420e4c5121c194a4dbc711a7202066470dd927c840dc0b3155b816723ac009e8bb0147896811d9f87ec049e636057cf30b0499e5f6055cf55ac049e5d6007f04c8475e179084b8067211b8167212cce731016e8b90536e7998a85c033103685e71f6c0bcf53ec8fe79865e1d907abf3dc8345f2cc832dc0b314fb80e71dac019e75b00e78cec1ee3cc36c039e5960799e57608f3ce360813c47b12b3cdf6059cf3658063cd760c9e79755e1836ceb69b0467e067b8087628bbc0a6ccfa7c0127914d820ffc40ef913589f378115f225b008782776014f029b8097c1ba7e045601dfc4de47c1febc5bd4052d017c155b11b1155604cf55d8103c6fb12078a6c23279d662973c4f61cbe722fb81671ad8189ea5b01e789e81edc07316cb81e7282c0c4f636b9ea1b01b787ec2da6799d5c0b313567c6ec266e09909ebe3198b55f2bc84bd7956c262e039090b8067227b81e72b3600cf48580b3c1f6105f06cc5bef06c841d9f8bb0157896815d3d0f590a3cc7c0aa9e616027f0fc023b80e72a36c9b30b2c019e89b012781ec2e23c0b59179e85b039cf41d8083cb7c0a6f04cc5023d03617f3cff6021f03cc5ea3cc76c0bcf3ed8023cf7605978e6c11ae0598a45f2bc83dd79d6c13ee03907cbf30cb30e78668105f2bc02db80671c2ceb398a3df27c83259f6db02b3cd7605bcf2fcb800fb207781aac0a3f83ed7928d6c8abc006f914d8228f02ebf34f2c913f8145c09bc00ef912d804bc132be4496015f032d805fc08eccf37b1ae47c1de07ed6a25a5c75ec5c415cc4798b0dca1952bd8fd21d43f5ef64714fb6367e63e6adeef63e6240adfefe3c807920f9a93345f7766b74f3e6af7c7501761d9c34af9e37545f02178103c93efdf517272c9f7ef2c39597e3fcfcbc90f7c3f0fccc918be9f27e6a407be9f47c8c90e7c3fcf90931cf87e1e222761f87e1e99931bf87e9e222735f0fd3c332733f0fd3c474e2af97e1e9a9318f87e1e24272ff0fd3c35272df0fd3c494ebef0fd3c4a4e56e0fb79969ca4c0f70379393981ef07027332c9f70389392981ef0722e4a40bdf0f64c8c9087c3f10222781be1f88cc49087c3f9022275bf87e20332759f87e20474e22f97e2034271ff0fd40909c74c0f703a939d980ef0792e4e491ef07a2e4e40adf0f64c949067c3febe5a40adfcf823969e4fb5931278b7c3f4bc84922dfcf1a7272c8f7b3889c14f2fd2c99930bf87e569193aeef67cd9cbcdfcf3a72f2e7fb59342715f0fd2c242713f0fdac9a9308f87e5692933edfcf527232c8f7b3969cecf97ef2e5e401be9f8439d9fa7e32e624f9fda49093acef27879c04f2fd2491933cdf4fca9cdcf97eb2c849037c3f3973b200df4f1e39a9f3fd24cdc91fdf4f223999c2f793352773be9f4c7212e7fb49252709f0fde4929303705205fe0a3ad77f7f0be6e4eafb5b3127c7ef6f09392980ef6f0d391980ef6f11390980ef6fc99cbcf9fe5691933ebebf357352fcfed6518bd6c34a0fa20e85779b7777b088ca5ff5412ecf6b01d009a08bc0eed07690766a3b493b4a3b4b3c2f1e184f8c47886788878847c653c433e339e2a1f120f1d478927894789680bc80c080c4800801190242044406a408c80cc811101a1024203520494094802cb15e2c182bc612620db188583256116bc63a62d15848ac1a2b89a5c45a225f248c8c9142e4104944cac82272461e91341289ac9149a412b9d482b5622da1d6508ba8256b15b566ada316ed8aeadfc23a974a6cbd7c05da9aebf52702db431602dba30804b6c78c89ed71b4c4f6a095b607d2076c8f5a0cb64792076c0fa50ed81e4b1cb0aa170c5605db8055c53460554219b0aa212556458401ab925dc0aa8a2c6055b317aceaa8025645a38055214dc0aa6a49ac2a490256a5e482552d45c0d2bc802c0d0c029626d682a51162c1d20c21b134440fb0343207589aa206589ad9114b73b482a5a131c0d220a960696a462c4d52114ba344c4d22c0db1352f21b606b6005b1373d91aa16b6b867e6c0d91026c8d2c01b6a60801b666e6636b8e82d81a5a8fad413a80ada9b56c0d696b58b60688b5e1b1363bd6c600d6a600d646c7dafcb03629589b1c6b33f3553f8eb52180b5a1f9aa7f00d666656d466b23006bb314008b02002c0a3716051f1605215ff58b1685215ff55b8b428d8da2fa1b6878b96afee78ef7bd8d19134883a24d6de6f40e8d459b0568166df680dfdf7acd9e9adbff6484e58a6887864394833473fa696c0f146c0f1bdb03e6ab7eb73d847aec15d1edd22608b7dfb3a5cd0f6effe9c70ead35e6f673b63c00ec361643dc1f4336970711126199826c2905999329c876be348b7e2a05d9ce971dda9784d06f99c20976ba183cc19e607f9081c5cbbbe694702a42a8fa12a584523a25b5907c754a6a9b1a1a954d0d8d4a09e1fc1ad6a367f365e72a9b1a1a15df283df6cc528f638ac88014e0f127882aa0135ef5aa13c4cc7ac86eb74dedcb08fd962d590ba9c7d60976ba1a043ab97afc0489d8dcd66be67447f4cfd07cd9a9669666966ac41d5aaffa69ba4e159e20cedea1ed84993d6f84f3963b21e5e932fe3d80d8d7c90524c957bd43bb36749960a7abbe11fe2d77683b3527574f146981e50c2238d1c5d5bf93e4649357134a1c6104850e8ee0eadfa1ed2061a19444d04c27a1c26188d299fedd24b710c56dd6dda394860ea2dd41d8810d9eb811ef34929de10311d3216eea32d9b4d7ebd50217b3e734d76faee34cda2d797cae77b97ebfcc3005b81ec58bb3952d8cd8c28deb1fa6b88872fd9f0ba4eb3f1eb5e0faeb1c255dffd64fd1f537d20517d71f0919d73f89922e9070fd63f0e1ba9117615cff2751ae3fbf60b0eb4635f872fdb94b14d79f6db003b79cab1161941c7752b0085ca41441c6d1982a9c035b98c8e20b11b2988571b91f21043464f873673086e0c4f51762c41fa849ea9a3dfc91edea0e91ba393b27559b6aeb9729c31c3fbffcf0a7ceedf7779a8c0dc1af4b351d3a36a5ee37988e6f61ba74882e5cd1217a6d93b221358bb7574db25084467cb5bd5b5a57f6eb765f32516855db07b9bce6abcd3b4599816bba98e0576909a74b89afba7f284c00f9cb3c142680c0f787c20410eac1ef80fac3ee1b48e65b84f223ba080514a1e8f8aa7b9438735aa9e37251b5fd7481a2ea7b4775ef634a385d2daa3e51c5823ff82ec87c4f174a546d62931ebb07959818430b15b1d7cbf5c457b50cda54f224ef5ec632cc61dd3d687b5c095540e077f75eab4b75698339182a6b1677ef485d5dbadd7391d37cd5bd4a8504f52d4c970b5750a2d77cd5755df74cc4b2ce6935c957ddcbd8aa743ba76def9a379db8848b79320f06253387bb7e0bede2a30e89affcbb8732ddebec6655fda60f72cd2355770fb4bd0885891681ba3789503a28d357652bc8350449ca57fe1d115211876bba38b1f395972997c75fd7f9ca9fda164c46217faddb8bfe3aa5db36aea0824b7fc910be66cd0ca173a4946641b1f8c10777c6c774a5f98cad52e7e92f53b77b0b19a4ee34da2287abe34e232d8ca0053772a1c51a4468e103d7c24b0fdd14d9a605154370b1a50a83d0843b8db438620a2d80701da33142d0d9d1aea6d3466bf8e044be9a9d176164c6e537c328075d78e8e1e56da1e34371e552fe9c1d6f66c2ef9ba13172428907dddd7d3275dc467ad7719daf2af5399bbbbd2e8bc73d46481bd0bd2e1d42376eab1eed9c349dc054bfebbf7ddc56c55fc19c1e5444d192134484d18610602a2eb6b8a1051969d8f08330742b2bb8fe42f89bf5d3212cdf88e8867e4af0e64d79e57405f66e7224c2a6f32978b235d6ab5a633dd62b1d951e6b95d263dde174455856a12b8568072ba7efaa74024e42437587d9336fddb60dccacddb6a111d667269bec6e5e0f61ad5fa55c29cdda6667ea3a91898aeb4dac38f0e60d7b73ce3999a7b3f53f25113233377102a559af264d3e97184caf8c10d2c9d5961082b925875902e38951a3dde9a30bf5e6397b8a37c7b9b331ea90c14da08637aec0218a1952587195e1ed2b59d4a0b1718650182e37620844dc7e21468ef42be9eee600dc72e63aebba1bd9904597ebcefda56f79c3e5890b80dbdf7119e3f66301451639f458c178fce5dfe92ed23973e66c37c96a16d664d5db5f9160b77fb6d3665a7a4646cf86ba477b7bfb4cd521daecd971fbbf7617d42ea208e7371957dc6974c5ecce6feff2b3beeb6ad7df4cc8f43bfad34ad01c35685ac123b78a2a154a7aebc75e832ab4fbe599c32e8e33873f0a6fa9af9ff6f8f59774497f37c3f432e1a5dbfd52e4e812f71399800fe8eeecd1f4dbab56e87efb0e554bc26bb1ce664ed607dac4590722a945bea2b612d171276a76b710463948baf4dd35bbc71d4102ee9c39f47305350ddcfcba93525aab4eca88b0fb72341262e448cbdbe4b469530a7eefcda4c26f135e06fc1c329fe33da73707038272fc4fa3fea73dc7f13fbd63c70e4a73d832bc39e88cd5f113ac5547f834fc1cb66c72c3ff711ca28c05adedec57ff24ba4ebf505f090c313471f2a459549cb93bf854848cfbbe0e043f7008cba05060f8753870a0c0a0cc40d52e6a0a2a96e57eb9fcf334733e1d9dbaf8897642a2b79c9c43c7a783d2d3d089a8c7ee1ae4aa42be6ace06b93a35c21245e4b5abdcabd0109622a3461175b95daddcaeb2db754bad95b24a94152c6c5510428c65e544d42cbf3dc7afc794cbff4d167d6676953ba2ec9072f999e31eb1cb3fe9644d567dfe1d5c2ef34ce24781431885998fb32a200e8a18e4f27698ba106542c7a1644ef83a8edb64c0d4c7d92097b78135c8e555ee51556e0f314d5d50306e7fb9e3965386c646273473da74f465ed844c476cfd3573180487505ed9d769e864a55743272b30cc9c9e606e0b5569567d2b1b0cb5ab42f3972054ed070ea136e4c1c39b070f1e3c284f1e1e67a70b25cbd9013b337b28d46c96894d7f3a516f293c06cc694b25777eada659ef26d2203ebe136432dc8d38f9b15aceee4cd9390b33f3a8d36413f754ad27ee4f94524abb07dff4419719b4f3e35acb664b28f774ea289bc45187d6ea94520e0761a5a5cee8d4e977eff5ea54eadd0abcae9b3a2f084b1df75793ba89e5f4f225ddedcbee6ee1ddb6ed73581c36b45d6b5249afea6f4f63cd0a820a7d25cfadaf04861898bc9004a8591f19fef334c92f9f2619e6ef642872cc57f5c350a4ef39f74e1830eff7cd20bbdd075db71cfbcba07e8245fc4d41d784fa5ec6964dbbdf73dfff38f8d5aeabf5e9f67de0fb895a1fb190f27754e6f569872d977a62ca88b0fc6ef995ad538b8a6578794bf515cd42bf6ae1207ceb16ef7f7afcc299666d4ff3379c532f3f56f75eb51fc7ccbc3dfff632d576cbd4da5d27984af5d8a3cec83d4e8ff4f9eaf4486be5be1cb9eeaee2f69ec9ea8c38e3f61b1d7174b8ae3fe7ac99b2cc39574cd2afb3d25bbf2fc2f2e6d69b11c76b7d3bc4472ca43fbfeb912fd79b0e95de4eef6de090eab563c0bc1e655b9fb9abd75bbcff2c38e4e37e893ff7a70fbadd1d67276802bd6fdbd9b2c9f5fec73fef6fddc4cae120a4decd9cdac3070fdd9b687d8a815bdff4db647df6865c0e75dbbec4b17d699af4fa73b65e8f399a34c96faeb64f8966e9cebb4d1c187fa9319866755eaacfb01be62beef962a937b85bfd4cdfef4ab3e77bf5f6746effa58fb93433334f419317aff96aeb1e51a8dced4fbed4abadc5da0d2739a7579053f2164595e9c532c589e971fb86c18ad4fb89aed4e3f6d496e0dd3e54039ca42bf96aa3bf5100dced75b72f6bee26963beef61e0d677adcde959c6c18afb64fa5c270fbe938fc75b6ed9d6b1807f1dfbe7798acd36fdf3e4c12f51b8a94f9f204146ef7250ab76cd8dd1e65b9b9eafe647d8edd8fee656cf75d83ce81439c23f2977bae038738c739f7133489f4661397541a68c59b261c3cb4a3abd6a53e2ce67199f9c5a8326fc0e09099d0769b6550c7717c3dd630fc8dbd8bd7efa158085b60b0887b74524a296dee64fc6344688faca3e3fcbdd16d04fc068a8596aff85bd42b9db965ebf2d74548e4b481454ea7dbcd1c228c240a0e3874be9a1c58c4ce1c7e3b733a138a0815718c0c160943164c6011ae053fd121f4bdafbfeffb3e9e9d0c2d729a7c3ac9d4078b6ce2e98e80df2841e5ad0c31a48c210ae3e5cb9d466184b9e19d46617cb91e8a366b268715fa33cde3e3e1a45af57bf45217b46517443d8a2e46616cb9dc81ed7ffaf97989e66445f2153f1252ad96c42585b1585218f584c2b2c5f4e84b3d7a2bcd1c77a40774941ebda4b02a569aafd608cb8e026b9894edd5ed5b98337520476996176eacd4a37f52d9b4a62935cb6b2f485f1a4c277598667def7d3a9d4ea79797ce9abaae3b79a7d3e9743a0d79f2a4c72ac2929338a959e51473c3346bded32741e9d19f9f88496a2fcc894deb2feda591fc9d3c81e2a79a376fca6ee2e449777de34ca693a95666a60d7222d7d808dd7db30cc6e9186139c3dcee29b05c7a279359fb9888878a08cbeff5722c777e67a51b3229514d582edb2f2ce718f69e239326b307c9ccc16992877ad543e50ff90c19cdba1c797167a41d55c292634331a1994ad52350994e2a3d2284289481b65a941f4cd79af50307612a97ad97f2ae4b4dd7b94ee59641def5fb8b54b6258572e773d664db64bb9fe00cbad33ae9dbb1924b6985c1d71062b9254d0f7e85d3288c2a37062f605f603b886836f0e109757cde9b66cd4b5da60bf5f00baf7de6444558a66e7b65d7332f73d16e022ede203aea6274d465c64188b1c5050ea28a2c977fca78f3f6f04167f7001697d03fdd25b3a7d4099a5faa70baf327154b1a2ebfa567d0af76851f64707903cae5254c2698cbfd564e2330bc5c27bc84c9fc22f645ecce3fdd2f62beb14bf1e60d175918f172f97f3759f4ddbfebb50d6a2d1da4dbcfe303b4b1b03d8764baead7214c315280c9a10b98d0942bab1d663df8414a125d96506d68d4f5ebb4fa69525a84df6fc4fb75bcbfe5342ba6a5559270e9a8816164c4432de448b36895245cf48d504f621a79bb2c0d0ca159d9ab739053c39e28cd908a50180b63db057f68562593746dcc550250ac59e5f41252699613d19292bc404d42e68af2e51bd2aeebb61aaddbaabd19bbcbccec6475d5bc685b2ad7638846b4d52fb4216ebbf49f38d9b5d6aa42d2df22147605b97c08a18eafe87718f3158fda98c68299d9c916475f6d949995a46a489c5f6f86854bb6329b3d1e60d88a3b8dbe38baf43e6962e5d27732c6e4a459fcb5d6dab511fa8426dc404a18abb5d630d62c166f8cc226a8a2d983804b3f0953d6212c2792516bc74bcc1cc3dce2b97d8f1b39339b556294615f10dd92a95c4a79e85226baf4b7ca2abf1b8357b972cb0f895bce302091a022f4b2a88210623d4e1d2795cca44b5f8726f1d5c68249ce304a2e68638b34a418f23249aba5071af850831640f1858b92497c451fe9d222dc4d5291103ea53410110652982b5ca461c5451f90064d0b2c0a163c88e1a2df84fe932a4900351096d0032257ca49ffca3a57bc79534e2c9458b603b584f06ff7fd336376bc9a2583fad30da17bddcb882a3b8f40c40f5ea058065dd0c73bb344a4f59a3ddfecf1bee9d7435623b3a9a540e996dd33a9b10ba2ec15135e15c40650cc645e10963bb4ee7768cd2a6f5ed704db234baffabb4eec21ab63f090d900092d356031f222034246942186174ff4d08407c6205c11350b8bac59def7afb234cb9fde304a1e46a9471f351f60f8e31bd08e32f0b4a966a8a7f21e0882a095b9a8fb59025c1ceff1a7b22910d9d57ddd1c297c620ab21e556fb393049eb61ddf3fb3b4e3abcf2ced64d9c9b25304aa1eb479b0e64110042ba54eaa1ea7bf1d2f3b483b9f1aa15fa1f9148866cff7bd93c5dd99a520cb419a3de0ff78b576b2d899cdf490e9f8a566d1664e83e2cd4b00af51b682396923aac2d05730ef90084b1f350f431fb52484dd973bb41d33b6a44fd46077684bf4891a6eb92a7748b9fd3842947fa09da0e5ebd92ba9777b45b503761bf6aed43368fba6304b41d6630a597aec073d4b6b10ceeb29188136852df3e70e6d87d62cf7d22c1452b3646cd80aae82b73015ac85a7e022a6014bc133e02c1c0543c1326e82b1b0124cc448b0152e828718065c858960210e82a9f00f1ce31e580aebf0fd4078051c856de0170d5052f0c4044e646882c20848508213a040053304710d7c03e3c02ce01c7807e6817de0290c04b78085e021d805fc028e01cb808de023f80a27c14b7c7f0bc94966e2fb5b3527d989ef6f2539c94f7c7f4ba9b5e412ba795d53ec963d7666a48f9a7bee2e73bdeab5b9cecac9586143f0362060b2a4fc400c1ee8000760788ec26ee0190aab81e7276ccdb3cc66e0d9096b9f9bb04a9e99b0e233168b81e725ac8f6725ec059e93b037cf44d602cf572c009e91b02f7c311fc4e00c177f8a99f6f0fc237f98a2f3779873ce39648c9e3dcff898bf723bcc84094b4abb9bdacfdda5c0b9e1aec7899a1214c54b0c8238e20b2d51dcb006972e5b0411fbc20a987641cf9e9c15518584fe01eeeafe74c89fd2d9813779429ccbb767cfed8926715c8c8305ffecee6666e6342a539e2ae250eff7ee7f2a6e59843cb58a3c9e2d4f8e7379e8e3f0e8f034cbf33cef4b9ceb7d6d4d31f4de13cb93e5c1e99199eb35755caa7178a39476d04d3187f47feb9db367b2f8e77c3ac3fed4ec6a5cfa7b7cdbbfaf1a264c09e7cb5ce9925e271dd4840d591401e3620d20aa7025400b0c0831c0b84288365cfc93bf5b1af9532098b5b93f1dc2c99fe29f5478f3a67caf5b451921fc903ff54678e39ca408f947272e76217f8a7ff277ac0457e7ab69f4f34327debc51f56c71ba425ff1f3b7f87fe498a7e2bf993f7ffe383f9c9f9a3f6fe64daf98e41b35c2d4ec84505706fa755d18a652ffe37422c4547a6c8e09356b3295effbc4273df28c8f58c64557727c13ff6f46e79661ea5d6cd6c13b9ec1ff9ef97b10fc0ffc8fc19f1301e1345a5abafe38dea3325706ea57067acbd0080943771ab9918500771ab901bb2c73f284ef1d2f3b41dc4022f441ab92f9ef552ba09e9f279826de752a1672bc8e7721c7eb105d98f91de2f45527964138de3f879d41c2cd2d964c742e8ef71a80e31d09ea4f5606875581ff3d8ee7ac0a7cbe9c4ca8e3733c057488d357a6cf215260faaafb5ec6f205ad8f58b83d7be2951c7fea6e27e61059e664c7b2f0fbc7fe30250385bb53662f3a5f744cef753adc92ede973f437fa5408e1b76de00a3a2e65d659615bb23d5784dfb85d155546e6ad5f64de2a7662b9d5dfaccf6e2178f3868686a67998e3ac9099118e398e135b3d2a89a1a6240693183acdccf12f696852a497baa7ff2c574a3f9ad9d3ef5f33c90cd468c2991e5798679c6eebf4ebc8c06e2903bb9c9218e6acfbb83479a2c43f86ae4b2999396e8409eadcfe6a99e8dc2b26f1c7bb1b3ad9b968adc91325319c7ef8c2b0c5ef11073838a3937a4b1204d1ef0bbf6f967f132177cb6fdb4ea753c9bd093e88abef71b71a3ffd46fa75fa5b63b49704688a467abc62c2d1a1f59b30d1b94bfa757c426e857eee75ecb311fe8d7f3838383833c7df0b9b084f0d36a0892bb992e5de43c2a08a02a6f7440a743f7d5537c6714b1c9c9c498e60aefc4da65be2843844646e159b18219c8109a0d3773f83f7a69fe1f4ddf31f219c8189fe194ceffd0cdd9ffe552a6c5fbf8aa52a75697af4ca25e5dfe44913617d174cefbd0bdd9fbe8a2c98de7b20d37b7ff221ecaf1549d735115224b7c512894e6f2592cb44e7d2efae746fb2d3dfc94e44f223921efd690c6bf2a4365804b710eecefcee2dda5f1e8452766c09cb6757ff973ab3f91489906f49678fcced671ebb53532417b5dd75ab734f96be5e2e939d5ecc7a107bb9dab5d98d872137c24fe17c89420b10611421841b18d93206083230238b10525cfd4afa63e8e7186d6a469bda24026509cbe905e84dad73b7cdff66a43ec3306c22a477b3e1ec91e917809610963a3ace3e04c95dd2cf44e608e1e9bdc56e9dbbe574aae620fc1f7f23fe3afead8dc80ba7c7b77c80c748847ecbeff2ec91b9cc24065cd49488000411d270f1b79c240019536c59c2166a084de10a7ae28d2bae10618a2f6092a0c60abc7001451b3aa0e1858b26d473a442dc0fb68411ebba2f82d59ac3adb0462af228328e881b8a359859c7e58729d58cd857ebb17eadb5d65a6badb576ad936e5d6bad445164528a62b3af169bb40b69469e99c7d169f9708c4b838a5036bbf55b232c5bb7b6e9eb9038c7d05715a7c7aefb2b295fd5f77408cb71e51d8e0add4d9a3d4558a071b72953dcfa2ea5496e56347bf8eb3bac591b9794a586a572b42adccca9786d60712b976d0a38b34958908e5a94519a39f53b26b89acbcd9c04a9f4aa7e95232b342c48b782596ab7825b926e2d39a55bbfc1180e22d8eaf0d710dcfeba89e086d75b4e864a3f476008d3b231c454da18626e39bfdc5abb75722186984a7b05d46d9f754bf09a6bb94e337ba60f1eeac569f5b8bd8b3c9bf5d9bee4d97eabdbb6753e9be56929b9fc3c3e3c3e3e5e5aed05a8bbbd792e1bdd80edbd25647b2afef468647bff25fe427a6c179b7f7a343267f3a7d83d7b8aa511fbe32fe4a7a773de9be83376c7c024e6eeeede2dc49bc8bbbdbbbd691e8d85a6ef3ed5a39de9b1fb0986ac626e05504aa918d8a594c68a404fb32224811681ce2fdcb14bffa951118e2e2da229a6fc333dd215668ffced62183ac53189df9714f6b3d32af318e50637ffe440eb46c7a7f5d3f2f969fdb47e7e5a3e2d9fd64feb87677c1c9c16ce8f0f8e109c56ab256bb5a60fed7efe36d61e5d9c73ce39e79c73f20cc308c39b37cd9466a6c74721818d27825e3989d3575e7bf073a4474fd2a35311e8052f495e007ac1cb0ba9542af50250122f49805e007a0189101f234f5e5ea24881e2c4cb8c980b242609bf94881103e42595f2e2657a410abf1e5d296c2338ad1ffa63849b71428c6c3f468c18f9113213f263a4d21f233eb539bb1e0393d8acbb79f6531362844e9e4ce9cf6c4684a559c7cda0e3ea534aeb53da0939b26dcfef6d4c8d083942af0b3952c51f9c969190234690b490d4cb9345ebd73b8dc4d460b489e1388eeb6e9f6e6f6fefaebb3b8e86b29a10fcad118e3c3edd73f511d2fd2f61167df311e223a4595474a74ea7c96485fcf8f0ff08a16c621f212c8a2d9c1b9d1c6eee17235fbebce0e3d3c7e7562566ce681d1f21dd2fa4c723fde534ea37d2a3f726e408e55f42bf5994522aa4ad9169d44768b79023fdc3220f4ef526464e9e4069168b4c60e8b18750585223214a478c28218141c85cb91112c2b8542cc3ed0830606040c2ec8d0dc7797ac53da5dcd35f42bfd5a353d1f9797af4e9d1d9a759ec9d776e7d785a3dfa736df0b47898f2f870e20ba2ce08d4238f77ac926802e1fa778083f4fbf3e0222ca797eb3c2f342b492b695619f3e7992bffc93373a71111c05c2af25437da1b327d54d5cbe2e7df3449610d8ce0c30d8a94903283279870b10e6850c6196a5c5186155ef4807fe40ff95365cc32906c40420c14650851832b00542439414411a2d061062efe70c8ec9105217f8b552adc16bf69c2316fbdcc5fe89ceeeeddcecdda3c14fd1367ebb73d3df77926e74cfd15f117a9d8f5aa9fc532e4deb3df7ba6afe2e9c31953fdd32632f9895df568425efdabf9b9b3f439dbcfb5a55d775c77c5d420f79fba62fa2ad25ea53e22dd47dd69aff7e120ece3936a9fcbdfe1eb0b2da5e486d1183313bc59651806d15d7e9aafa584fcf8f8dc328470c41449f8604a9218172b21098d2dc0b8a2ca4bca0b8958101b4031eb3fc241faf947278fcc15bff31ccbd9c5daf00f7e264d403b985de657ed87d925864474cb09e6321963a698cb4cbdf9758ca2c080bbfc38cc34186d80901ce94010557cc086183b642106112e36806154e5882c62ae58b502e74ea33280b8214c8c01c828e15c77cf705ba55dc60fdf0ccd8f3b8dcab842074238987521487d918c688863ceb01efb49931e9144c121080821a49401b3e1085476706d220eb38b0f408821e183591a43b8aaa8c457778a5b8e45b79c331adc72224971cba934835b322c8b47714b2e42c2195b5439f241105d5ce5df2e8306604cc1410b35a6b8cad61668fca00404128ec0bcc0454504489164444d8d24c478e1723186284518e38d1da208c2085750162aacd882ca161a0c418cab64a1fb011e8040421469204d4172952c83e2b611c8e0c2c690162e63885c4155f8a00b0f6d6899410fac7031e9e20b26c4f802073c1ce16a2e6455983125094af870c674038d25b4d8900317589a70f52b71320826060f534c7184971de8c0d5ffc4c9a02b40b092c60ecae072050c57a7600c26a00082962178a0840bc9d0123020a018828c255737cfb81878f4eb771df54caff2bc13c91aea42ce3e1e145dff92e49d4c6c3289aa15fa9abe485fd304b7e740caddd7588343542a50daed7e038bf0eddee39a636e721c47439932e89ffb2827251ea071bbb3aa1568a5bd3c5b9e6697abbffde96e56b5427daf34703391d74bb7fb8d977cdfd71f8db00c6f552304dffb34c2ef3d6ea77533c980df5d90fef867e7ad606a6cf6ccd4afb5faa6598d0d79fd1391d73fc5ea9f84bc3e9dcd1e13689dcc6ce6d4f77a1096b59635e6ddef2748040001a5d5a8d4ccb486512c19a2191000000008023314000028100c078442c150281c976ba30e14800d8da850684e97cac31c87610a1963002104808000c00880c8cca44100e101d5713de0ebdd9a8dcd29e39705977e166979941b3b00d9b8f3a18e521f2a57c9a316108086b9df3e1dd1296f347ae291cb9971853a21cd95c024ac7c13c9bf834b78af184f8adf596bdfb1e9fcdcbc95f833919b825711ba0d66d59e0b9d3b80694c6cffcfbb7abe7176f247e00b448c1bfb92f728e15aa61503b001d1df117d47902b39bb405b3eefd7a3de485a08ae4307815f650260a1053d647d610002a34eac5f20acd400973fcfeb5a79267381ec20741a77f518b8c48c5efdc2b14c3920b5de7726bee301726672bc6f03d06c6afbcc6b1d26f38a6924a2820cbf000b760c1fac1770928e2769becb9b1352c6c29b576c83fdec59cdb9f0055dfa6f81076aa2c74cbb214cee06e9ec48ec596bd383ed528284002533b70bcd7ac4c8df808493e900204afa8c386a09ce47d8d651a6b61c3a4cf42ba7ee8670bce1e8866a223748566ae9c94a45459e0eb2daea3f482e08b0dd18dde270811bb19481beac3f25f7c22290508b353ba67683817b2f7572962313fc7b91406c24e353d72dd4a8e4d291a8c460cf5210ecbcce9840632f98b2f79fd185b2de2857b57e61fca8718f0c4f264a4077d4bc51da955cf7bcd6b7bdb34289905e918e28cb03f2c0df8a143a79fcfcc2611434b1356b653b462ad6e161ebaf9329b5855fa864c35e4a46402a2c4ca9f2075f84004d463d3e20948b338d4ef45f83d08db9229cb72a35e1b532414a249b38c538efc31d8278df45a094670f81a685fa27ca01742adc3fbd751f9a408690986ab570b0fe38a3adf981dc3d943db48421eaea09d5a7aef14d6f908071c7f4a61338809a620ea6870e1a115fb85c2e215cd037ab68fab57aab6a93d6316cb35666469320006780616ccb5a0b83b9beaf0ad145d242f1350e07210624294a4a558efd945c48067477f3c7dc21f5ffbacb7dd83a214c76acd0379124fa26bdc3b4d0f38cf4abcd7022830b40349c1d96d749d0acafc3afad15155029fdb319c8176bd7cd28f761a0ade09225035ae6becd277ab408d8f19f741bf94f36519a13eb4480117043b7e2f662610157e26817f0c7c2ab9918170ae4da60ae8f61b1111f63cb1d1aa71a5ed4d545659e76ef6a426c9b2919546985a7beecf1f9193e0490beec7e939600bf90b34276b4052818bfa6e34e47ac62bbd303208e061a1665cfced488bf136ed8320bb9106e84303eda577dca58494d5fbccdd221c32a0834b2796ae98c50606cb2b0ae82f13e618a11e6516ddbfa3d7003ffc43ac5ff7ce9262f023ab7b1fe61056a568cd08e048ac8b7090c9cb0474b01aeea9a6fd4047981050d988d07ca3ae16c1b1e6f881604a034273cdbf6f219773c9b0295f912306404d46329b656886e84bf7338c036f61eca941a8378d94f100ae66b5e0a1bc62e44b6616b7ca9623c98a27f368f0f76c14dbadf1ff0457dc59716687436e323c56b033817140cce8f960a98910ee9922f8a455e46a73e6407c481321ea0b510d394fa8f6580af16f421b21b39383e70794c540ee83f8e62dba38f6203ce0b312d25db650a9d71c1f2b47b715c81f60cbe8df8de298e97cd41718ff1018633ea800bbed74ea8d963faaecbfebf089c3bd89fcd6e1e6d3abc3b1f2e09fd9c27b332704892a1f859b96187fc3f93765d523bfe67e4da111ca847f69ccbfc50e7833d492dd123c6191fe0dbf2af6a7f0f76aaf5fc6fad2ebcbe6d5754e50130b9e7f28789344076bc6f8aa20bef4902a3707963c1b8c31d586c4fff6c591d8c733e710ef5f5af9677fd5075b1d8f7f4e03ce60306e0363b695548dba9b05919c839a7046a780d27dd80808b6420d71462661b0b713b42e27e01e7a59ec0d9186eca6056b892fc29f9f48324352eab60740c1610b83654ed66b7f146fb7c24857b08c4c6bd4173ee2e3fed4b262ae1c41917d5a09703fa7b25c138dbf85cb686577739e3df9ed640c307b8d6868415580a1581b448589047359bb1081e0c2cbf73da81daa16604da7db544bbda11882bbf33105b1d75af8d07c02cddc7d60207a9896aba0c7a87a6cccdb6ab02bdb4bc8b44afc50967c6f0343835168f88106d429fdbff225f6b58273f1ee058d24026a009ee6f310ad952ee8ff3864728c7b25afcd977540475f303c0e03e01fe3f614d441370412fdda3c9b408989cf60a3291379acbf9d5a5cc1c07e6728896b83d65be5bde8b7ef2bb7eed415ba9006faf9ba2ee1162ba9ceb3104cf5e5e286cff2248003b7adda7825bbb63b430cbf55d2b3e0317a0881068a0a9956892718bacd9e2cf272577ebdb9eba11979e4c26d954e2285bcf5829ad9702780f3e1fe0876cf5f1b983d8a814688d40b489f64574c3fd0eb18cc3323bd016fbfc5fc157a13dc80c531883bb15c65ac4850f2186cc4d42943e2cdbc19d047ffa21a9940edd1e9af3879bf43540173effadafb35721e29e674c3ba1b364fd3f136cde9981fa36f36b0e44790105e1aeef3d445fd885c381e746d01f2bb1f0536cdcc5f6c69005f9f69857ff3341fb4b112db4a5d29cf2f93de58c5fbd79679f289019e80267a0ba67d6b68a9148c2b3d30b7cabfb998f2963cc9c998963e4621b3f2db5a94bd2f9038121c24ec0e42208ffdcf364349540eac80240c118e80db478a8fc940539c1c6f71e051105702dcbaecb007e553d0244c46adc4af18d2688652f8f3e9aa181b871f61b70d38e5a683b18281fa660e34cef642bc079a9460218de9c7f2a2f717c12c02482bf2327a30c0365b581a056ce0fae1d16481fe5871c9bc6569d85ca6c3fd164df5233584627a5474f665830c5997372cb71867fe654f14bea9c9f99739067f126efb1dd938c8745d24a3562daf2ce5ef3fbe59b98a131bed6d7b366288fd908b9deda4b492bfbd26797387b6674d19a2e8d0106764d0ac678bac5182c6c86fcb6372b3d671d70eb6943854629cf8fb6800e5d89574e5a2d4f07a5db3dc31312446ac0096989b1b5e164352fa89f3d8ea0e6afa65c7f9513a532a5961af7ee676d1d1bdf11557b97302af757cb8c59ad04ce313cedc0bc151328b8961bcb8818ed6418b20c26575775b12a1cfcc6f0d46f1dcf054971b06900c9b1a9850057ebec7a98fbbd8b907b4f571cd3d36b1f450006c42fdfb41f59a196166fa91d880be3196518a595da4a7e965a4b5b81c3410ac58fb91cad60a423e7f8dff1bd01b655b784509a74776cd60dc846e26b4aa9f5b70bc577acd516f1f40e72b92066bd78193032709a7c05eea216f11572b15a66b29c98fe5a04638c09b74107bfd61ec287aa1b7af726c2d69ae8072626932404960f0c4faa922c7e31d0f3516f9ac13f4804754b4c87b83189c9617cf56fc6b17317b176d2bf342c9d127864e79d1a131405f792d2845d3c5ecfe8e3c100bb6e7d3beab8a6ff4ffefb8252a5f696059f04190a313c1a5fbc590fbd6e594c7a712a9050c58822325dbc66c7b55d80ebff89c24484615f14c10f370e986dd104f53659b1389a96a1a335982a766687eb16246d04c5dfcce9a19545c32dd1ead27834b72b6c7db3904a97b3e9a87926fd54218af22b6eefd70823919af0c40d9034303d9bc9aa06ce56492f9dd194cec02d0ba251c151a87e9271986bc0031a98d3e35c21a5989608c2369e712307cb16631ee9cdc6674157bdd11c063486ea88e1331d28004a0af7c7008fdab260f83476bee2cde22a74a8196f592b1f5e2eeb49d031253e31f70a5b3a621b8cf5b693c616a13c6a52adccfc1863194d76729698c8ca812791f1f7cd081e19f7a57b94a6b945f2583faa82e87f9bb4a2b3451a8b947d5d3e7ba12b4cf3bdb78891613875c5e177bfa51348e3bffe0e4f9301e7aae5d85c9d5ff27d1868a297887952aa859cee36a8cc21f91cd3931496d25214394493de0bdb93ca3c331a295cc3b7f3fbebe2d968b8b8f60cf5a4e2026b2f8932ef5a02d8218a1966b43aad699164bade73f1adcde3d4934f87bc4c81c3bef290eb895c08ed3bb38421a80847361387d4feb8bff534fb233d0eee13a226b042a62f7643a5406b085bde5a72c70c3a9d9a1395060fe1f631632654cd956b0692b06628fcde0824a14146bc791806f280bc4e98ceebc1bd5791e59990571a4dcc28674857b4f7698a256234697e3a86117d384c82df3aae0bbe996497fe1a18880f48d11957ec2851bb794e43bfefd265e7d2a61e007bb23ac9f0c9153f6d564e3a4695a63da3f90d10d469d42549159d0583113921b61040c174efaddd49dbb87ae753bfd8762715e9ace4508d93c6290dafd24c82fc6306ec3f07efbd62ce5cf9bc22deadd22616105ed41faccc99590d13b71e83b741afe3fa1420d95dc01846379cd432eaf5645b5c84a97ec12b25edc40680d3060b8ffe69bc72df31145646b6eb0c8ffbbcbeb919fe8472f127918a0336dcc7049cdcd0eb514637873b0407fd384b75ae721c57a29c467209c1eabe29349a39d433ea559e3e84e7e73357b75232ee8dd00d8db644ce1c7c715b30f888c309eb9946151f947c6f5eb8400f8a4db259d4ee36b35dc869a2c04826aa2163e16c00a66edcd85d5a73d41a298a81d10a872fa4453f3e2d7a2b177256ff67a17a7a92ff2e40681a0dc9d7e04971834d849b37000731c423c4977eb298c6024d64468c3d647b9fcb725dd1b4e914b8919b9726e8bb14a2e3455d7026ba84e4be0c1e0699cff6f2080c1f288df72ccd352a68166d38b2fc837bc01f4ed832d32fbe95e75a2cde452b8d657a4a6cdb02135cd15875ee616fcd9031f569e1c4c19c4b35aad8a98395bf32d597624f565835bcd870bbd94f23dec86f2d5972f43037403ad863310e3bd6288ba90c0a85925be96411518af4fc37e58df74f44fe38d30dfb5194ecab3b024fed7d43d6fa3652cf732376c865531d65d2a11970b14e6dea46e1c4f0244c625551c4be2aaadbabc87fe041f90770afaecacabb7c7c5194d4604b2e77a9b0a5167565e60fcb15dfb2e72ebff53276c3dc8f864693eb952fe65ab65473abf4d0c8f30ba67a9eb99feb5828a2b5b1add6ef8221d5cd079e1c84282e6cd55b054e6cfe2f8da6d6e96caba30d9b96fc63153bf8d8dc4b59b7c593a122e0a5ff3cb823c14a84ec483d9f62680aca8e46cc29756cace5e187397c083ce8b9539ae96b1744504431d8156d5b9c4923125298bed4528ac21ea06c43e0e6245f3a22d0d568d279be5b5b73103bcf4fca4e54800f2e1800d049fc138b040dfcb0f9e2cc207e491555141fdce1c62c564da653e05099928a1db15b18abf73da03cd8a07b17524d4ea972802e091b7f3e4b1a735a187d0048441363b3ed307d8b5c2399a5b446a9bfcb8dd1fc09b5e51461944b239bb7419ec1311a3f557899cd718b4f686687ed18b574d01ebd42e45925e29dca1294a6b2795182f8ccd60c5954b88a681c4a58514b93f8e9de23fad223c6532139ab508f903ec6afac076b7201933bcc1110219d1919623148403a8579422a4e94cab2321c5909658213d0fa607cf4fa21413daab4bc746427b6091fa5848491d280a2cb159c4eadc9f0a5f38bbdbfb19987816f61b62e9bb1f17730e40f1ecd751c3151017be3587336c4950aecc9c9635d69143f4184629ad8bd4ab673b65fef3415e341a66008fed14e6a4d19680e02731a3c7be10a80c597683981841532f7ef6ba385c6d87dd8b140ec377cfb8cbaa87b04644a95272001ee52057ba344478a15f9c507727440b7c1612dbf06ed4a323c5d3fedf2e37c88647c580746ca8bb0281f354ad54cc47d393eac67cf335f531044af954dcd2d5d35017c590878295e228cd638a0e69908ad01f2099d0764648ec6194e9538aded703ee665e5fe3661294d9850372c3f9dcf4e949c17da0f96dd265cd294b2cecab08580018fcf2bd3b5d95be330557e5da851ed909c00a48e4f664cb0c1f15e74988fc3fb3dbe04c8c07732e7a79fc7aa1e369887ef04754dac22cf4fad82c1d8733142cbd9b061b7c99d4b894309325540ff3b8f632f2c4ad1b35635e104001f8012a2ca5a071580dd936cf48861bcd63f24f5c26808c920e4d5fd60c3cea77fd0f30584cb206f82afb6db74ac68b733d0cafb19cbdbdd3c664911839235db91ca91e894335ab08f8b2620204f79d27b348c2dfde0cfa87fc0bbeed87a1f9cdea4c6bc0beadcffae862685d2dd7d51d906c9ef4dc9c2fadea44ba9aabbe71b7e70d89935b1dfac279f2dcb213c6bc0482c70622de51537e3d21e3c4397121603e45aa86d62b37985fce31a33aa5bf0094d4be971464840897628b9c8bb86af8081958bad735cee075a1c29abc0d5c58c7f56480feed5cd8b5565c1e3b5cd8d66c11eafe414e92df8d7e1265636c6b1a90617f23aef0a6eb78ae8e85fabd54382e892f1f883429eea0886c6b9db29aef9bcc5fba5660f9c676b9ad41771a112447919409cb2f2b1d188d6dd8df48dd7aa1c6ea182eeaf439143bf1f4c1e075b80810cb35ef6e9fe0539d90edc4f7b648df656c54fe6b5f85c5549a9bd4bd794734875db7ff35d9fae6eeb67bbbaf2dadd781502b2548dded16ee5be4143e6e5964aeff6b81d23fdd48fddfd695e4b21d6deb479200041f72ef56c5dcc97060ecfc9222d7c749320794251685eee104a688e8cda5fdf5c89c4692284e584b8312c9ec0b3fa5bdf9af84e45c9fbe67aab38ae412e3583c93dc7518c14c7ab089a17ca4802b5288a69539cae747b303447710605203e97f5147842b6546919509c3a3e5e5e517948e900141e2799f56fe7bc0ef60bb71998d919aa9b28d33610c3948fef0a9ebf0676fc84e6a619bab47d189f63089939b7767192eb0363ada54fd3a1bc058f5c70a8a160ea30c36e45b0975175d478f8e0a26a5b1fe3b3f5315deb445d2f16b338de219134926d4bf6a578279658cb25f31cc889ce6a61a30c5546481821bb83650a837296a3cce0bb78b267af3b6151ec130e4c66b5650f4ac244b599f13d6b6eaea6c3dad0791a17343e95a2ccff3df82141a8e5683c68e8325c4a58a8a05973cacc5e83e9d87b551c30490d6e3d669591b6c622596d2cf253f807c0c410c4f7984170b8619217103e400ccd835aa34f69f29e2fafba0561e7416e581c2eef95c62c56ef5c9a54b216e84de0d93591cf83eaf43ee222f26409915492234d042563ebe84c1b09a1b057bdb8b8f7aae25a7e90d5b10cd76ba46d6d83bdfb782804067d981762143db46d98b0c3a4c0166b669362b7c090799cf50da6f2dfa62966955357f296da2eec6022f7b9653bf578c4ea6abd023d54d1f145be48c93f082b4760e0f232d51cdb96e9ed7740ccebb212b816402de790c6ebd902fee74e05872191c9c94e128aaf45fea24d036794a7e49adfe3b485274e35ba0c316f7c48cfc3f4ef8e1381d7727f1fa2d792ef3cddcb5c621b93835fa35f0b8e2a683f45cac7f518c3e38c3784c598aa15379beed9bfd661ea3a9ae287585f2743d42126a88ed7eb0b7d1c2f5aa9420d1f6ebf6f2ffa50de657af1c0979e3a8317d8ecac3bb4b02fdd784249eaea3adfa9a91dd66e2f821e75c7b57d7a746e6b3fc7f0fef23f970be6660b0533a55f6a45dc92c773ce79f6b92df1627ba099e448442ec97eca851d60fcd41f136da8bf0855769454a399afc1402e1105b37adb9e4e730d3c3b75d81fee11b284cca5bdae1449b210efad87ed96a3f2675b65654e0d77c47f9a0375fb7e2b92b3b6c4f38aa16515c30762895ad3ed1444525e4fe251013b1bbfd824ab84f3c1fd1d68627a8ae17b216a294389306aa97635295682a24f7761e470536658161efb8d99c6bedaa04811c59967e7fdbf738df47b68f582b33748a147180ab0487f5803051d095d3defc15960fbd69176f6b8da9a0909c04405f06c9dce9438ab03d9f7b982596a31ec47c27b34c1a068d036d350ebf0df6534f3e78c8f45663e87ada74ad4fbf4b08d7de21c1cc55b1312d4cc115e44c08babcfab10ba323b5ec59f7dd6f78d8dc6a8e43ef067f69281116f7d48f7d75a47c2fb7504f41faa885f29310932114ecbffbaaa504f7f2d7419954f505ba51c69a9dad589b35ceb520412bc2826ad91da97492964bec284e9d7d59233ce38a0611086d53b08b473f2b2924fc4b572054b0acc3f69c2aa6465274d48fd39fc7581ba8a800729cc246b32f9571e08dd00c218d1d2ba182b6a61e6baea523746a8ff4c1e31ace34b9ac42e66db9e2e0a32f173619bb7f6506eb994aef90cf02c7fbf8a8605d1afa044b46fc29725e4f93f13c9091dd7a779d69fb4f14399b3d06483db6369d9d07cc3317c844c1d67ba886990c0dfdb298d6fe1dab12b95969fd49e8f96840ca8ab5c36d6a911889c07e7d406adcf25b6bf4b51b204d638e622fbd36543f4ed57da941ec206445687354a21bc1734bdd63f5d88c6d85a6ccb090217a0c0122e3342458d44d1106bf7f71f3119467a208ff5c3f81144acbd8c9415088e94258bcbcfe5f0adea7127070049b8d3eb25f66958caba8b6525a11e4ee666f134294d4deab0a60f460e8fc17b46d80d301d0f784270d2bc8618e642109971a3dc3db2cc92dede4386f3858c3522392569f8952a2581b35586f08b08d617a58efbbefa26d202082cce328b420fdf9598168519996c0b700cfeb8b16e7d2699f9c4867e43fdd70a5273b66ee436545f9171ba4c06472e814a9028df95f59c628b11d36bf9a4db346fa0bd2a26c510015c87b8d63d7b9ac112c921f9a5859001adac4a7eea03b4271eaed9213d8bbbb3ee1f759c130f71d07530329242fff914c1b1bcd275c67223e166b40be28b2082b78d1c912cb3a84c7f13019000c120b7332bfd48bab1126f44dc532975042160632c96e6eeaae70dd0e1894f6f71df64aa86239c88be0dc5c82f13b8b4521784ddc5ae6baa1afc2e71404b293918c5b2362d88bb48fbe9fc6912206c4ec41db10d103457fd2e4547ec3c920d4183b895eb0582902d8960cb4a2db3f2380bcff0970170e08e6865e7ce7e85a56ba11d2b1ed498e123f06e99c8cda8f9878d044b854a9494cdcb1321cfaae5389881ada6c3c95a9cbb6cbea0b89b38db1648bbd4453911f4e51a144a6a2c67a7f83b845cd78343bfa38c33c9b11dff139ace37a50ba92246803de1971382e11c79eafd3e0fca1474836e8d661e794a68a1e810508e0c01fea6c58421b5f265dc55baaa878435d125ac1eb5c98a5ad11950ea5873bd0c76651b819e73022e5f7515ea2c725daf72512b0ddc9ba527ff4ed31d2fadea8b905b0c1f3e2056c4a57f891963279da75cc5963493bfd3bc0006233e6869983e2555913e2c51b5df96eb09f7eda98616cd295d0c697b4f6c3869a0ea8d231af20dc314a050818a91c13b861b2c8ac9558fc2de78d79bdac576a7a89c749236ada5981014597174831167c150819d250e38f68135d48048466e9d52c5619fe48ed612c7d6510a43ec0c5bd82d7972a4ae46537b2619e234e68f6464bcc2741a41bef7c054333583ab3128c42a761387d1ee21aa2b7fe6ff059bc3e1358896c664eedb700d15bc1cc5a0dc4fa371a5772e0fbd9401383cc01cced80b76aebcd178bb5a42d4ce692cdf6ebc5dc6c490a6d548263f5caec7b6a6c13e3125babe20b1853850f59a1b68ee50fd352b5dfc1d775cfcecf3fce374f965f3178d317eebb8de0ae746557a91708593227bc9f2e15ee37e9e8692961896d394aaa55338b929529a8039466009ef4bbab930ed5fdcb2635119380c1262223e4af5e3fef913b49fcc32bff04f5169e261fe147744dd577bbfd4d3451e57a33d9e4364bd754b144fe86dc3c9c2cc1b90c696ff208e3124db7971d1b1c1542793d087028797879f60835e30da08054156df767eff73cbfd780e8cdfa3d9fb6d1b513760b7ff83a3e8df022f7f6c8c8fb2febfdf5fbb780457bf4563c9954cbd1f54d1e304c6dc308f6cebaba735b639e762ad58638e7a1e464ff8a8f3042b7c91d0a2af06d550127d71f1f4cd377e5eea85b7e88a2e7bb17b0bf397c59c4a3fa1ed9c2de154b41357cd31579db5da975ea02bf58328b161a1450a662de9c38a29e0bb2e9735c2ae6d387388894f30d594402405e6142df2725d84229ba5119fc7f7ebd6422b49e165ed62976035ed51c80ac6f68a3291f3c4063a8558153a86290a58f11fe3c6d089aeabdb41db070104661139f0d4a93501bc72ca84b1266bb2d55447d9281f8ff0a5eabef18787aba00aece081c4c8b0f54c2951dd9f144828591e1a1ee80286e74d7e6dd41cc4ef192f272d6d9258cf90b3743c020b2d89b0e2ec61bb5930bb891ae4322f9c0fb853a2da5efc3e04929ec0e3d5c5c27139479e85d2850b686642e04ca5e7ef269d0428423398379f00310d782373d9731e538ba2e883571d287a25db0f07d6c503ddda52601f5fbad8ba002ac2bf5675d73fce3b6ef4298f3b598992784a4a80963078ee712772bf5fa325284a82f4895247fa52c5deb54449b02e6a20047e36505ed48275d08232d88a0eeb69d78dbfbd358e20f33abda8ecb7b770fc4d10fd75cd4ccf6528ce9a6f3ba9397c526dbc2591d10ac228891c4ac5e6dff2e0ed9ba7d71fc76b18d54eca05a03fd8cb450828c06afca5c0acdccbe50548cf1ec583b10d45adc3841e9755f79b076f9482e732043e3299baaa6fbb75d3a650e7e5ba2ad3a8e747882344317e7fe8282614f1053b80b266a4829f0262726c96b0420f90a1f4e7063d4fdc28cee59d9b8449f9724909694f460f0fca33df9ac2675e6cee9ca2b328d70cd270177a95a17b5d4e810fce14dbbddb023937a1b2da4181e4f91a953cdc607d5fdd1cbc8f9389e60c3e346f94849b57ebdb54276f5b21aa3d8489c5d36039076227a54b8d0a49e6807f07f00157dffe361bfe27885718c675c2f5f2f4b82ebf29ed456880926266fc7f79033247537af3d580289742349108a1b1a1299aa934e0b1bf3ad28d0c5ebacdf4f3d5f36c35baac93ca4f1d47a02f068267489ad5ff5077fe16560d8973fad9bf6bd119824496d9872a35113478af9a446e864aa979fb369197acc2d069aec054a0f97bcc638b409850d498ed699808f6dcc9e1eba4ad1f41e9eb996e8be61f5405973d30167638bd56b4ae53439935a33426d1749d965219cbee4ccdb178717ce90433c28510d8ff40612c6a3b553974f6a86bba6c9770dc5e14a835ecf3c8b390cd841458918066a6945f7bea0a557358dd97aa24a41425a81fa52f00db245cbc9d42a3d109765c3af1f9d41a8ade721862d55bc0f1f0683c68082c9a1c68de1631275a11c4208457fbc5145597a3d7242867a44600c9f941fa37def53f9b2151a1cd49299f1357e5c98d3d75a6af66274b666d60c2205609e961b62a1dc54bd301be6303ae03aa49710ba83486a7faa252979e83687f9959d80356e287e9a00d01a4d322ff6d1650a99d089d90008e17621c7e24957e2c085406d0098310615f73e1104bd73988ea3b60a77033812f3b92405f9984fd15ee82a4247b39ef8927a75b4ccf541c7c8a1b31f505939d3098870cd1c15d36ca2cea934b0e270f0d6a2f5a0ef9fc5b0a111bcc0b0b016d3d59f1ab26d88344c8776ae7829f10a47c1a146f44482c74d51cecf164d06a6552486782dc132b9103ee0cf6c89a6723ac73a1cfee678d473a7aa0b05a977614e1e679cbc02a54822be0d2c452abc0e9664c246f12aa3641dc666a30a9e878369f965130e184914e25a0a264d79bd6c27124176d10c959e546da90a3a7c9bea7973cda18a9d55b23436d8564dd9dc6e82c930516bdeb9c9b605f94f677ec488b4cb46f94f6f92d672b0c99647f94b71fa1ab3f631e00ec1a2d72cc438c9adb29f4a98073079a2281ea20bf83c1c6b8848e6cd9ddd594a121b6e43f96f1fa0dab25e46dfcf6345e67a889108b8ea9531912fca55b7688a771e1bc7356c9288a02982d1b547ace174009c08e59dedcf1a81c5b415702ce84409db3c7064f9c5919a8357e78475807ff12909f4ed348132c37fafed3ebe022da1a7a9b5d19b6f1039a5bebb00cdcf3bb72ceddfcad7c309be3d3e74c2c4248182ea1829f7051b7d14d7e9e1616f9461de01b1631ee283350d5fcbbb63f4aa1e66e51b85979f836bac5eda55c981b97ad16e7f6858a638404bdbbbe8f20ec702af66e90a11691f452c48efa68d7d8136e569eb657348b24fc95a207a7f6ae14b056089539917b38c2c52252b4465550dfe2ecd90773a0cf26e22ea598eb9f05605b19e85e3329050baba2889843395620f3c45f1e4c6e1749f898573bbf0db009d099affaf9b452e786f1822fb9fe318f3ee24ff0d3413ff328697306fb8869d0cdff23e15034fb4aa409c8d8187904aaf3db1eb0ff03794b05831c0b741c0ff3eb1d519208814aafc45a99fd4a33436ed7bcb357d5f615889f0ce929b423c9f8282a061ea81a0c943cb0034354e5300e27e088bedee396f2c41bf98941483ef4343770a184224ae0914c3ca69a06a907944cc78783c3f36521fd876e5468d17a2b1d149d430ca3aa8ad73da25b890dc02ab71acdfe12ab71ca389528b11b3672c77c4eb89a839551cb148c06dbeb197414b0364f86e6d01c9eeaadc68ba74a0790c5fb6a0fe5e76da8c9554fe0313423cdbf1ef26ae2d1a7926f5f685783b8345723e600903ce47c0390eb3ea39c112eb5a9e6a23114d5d5a8adc6d28f5140b9d468b917cc9ec718f5f36298c696a65ca14eb1912d3bec4c59835cafaf2611db0554eaa56f47267fe358525f8b2a44942fb9a1ed2cccd3db306ed7a7dcde3107020c39aa260b1414222b7f6b8744ec9273153ec390ccee0724737eebc2dc4c72105a4a1e60423c1add0ed7d9edb59394c74fa0809ccda4bbb3c23ee58e43da5e15f582e6df872dc19d6cbb20e80657991b99b06b0e1bda4dfcae5801f550b1f07cbad14572d6fa5cfed8e6520473fad5b2e5b119d7e422ff3c04a29bd3c150c962d713e7c08475bdc7ddfec47e30314de10b69f98762de6270060f530dd92cc0b832a3709e057859ed94990649dda76a0cb3bc7130235e7a44ed782b8f3fe79cdd224cdc0e10929446dcf441b20f35fb094c949d67bd67b03c29c64d863c361017bfad1c3498573a8872e076420245717a5a5a50bae61d44bbe7203676021057d82fd4a44a1fbe83bf1adec9f018922d212fb97af051bff04719cb5d1057fd0fecc34425673570dbe5d37eebf85f769a376c77aa41370c5bc1ba01d016125d70f097657232d80fb1a169cf1c32fbb128d6e7036081f318e6fefd428eca6cc641558640fc9eeea3fc59fc3a0268ba5f4f83e22c0061cf576e0a003500f30c2f4ee6393e9b8df3b8eeda046ee42d29a0945410dca5ec7d479ec22415f2f10f0d4fd241db381dcfdb1f34f22de45dd937afc204dec2127432fdcd9e929af179c0eccbc569e1219176da519a943ffbacc52745c931ec570e4b11a20b98ffb20484d65ecdc46c132548fb449aafbec524d6ddba03d1f113200b67293672b86d829d53147710ccb96b745ad30dfa5d498c61629e63f5157703d0a2b74d21395e7540d1c1a79ce0bdfdcdfeb48ce7d0011528227b25ca88a77b138d9a51a84249a0d26a57c7c9641411807a4592590992223eed37860b0e143d73d12ee4241a4be69aa2877ee59cb35a00f08ea310bce73fb469f31a5555a8f117b0a91d31667b6b89a6389410c9248fe5d4eec9a6f21d4c04d11e42fae5bc956d6570d51396fdcb30789b76fbb3610ba1247893ccaedf3c7c1e29f683d329286d884f62be6daa367228bb8a006434b2be25e3a9b4c1da28683554125bf4184ce0eae040a4d9e43434dc330875b599d17447115f85c5fca3e900f80c0bd93f63858a837026948fca03467382d3405d8406242068a1d23691bc1cb44f275f7f851a9c970d96a0a165da4576dcaad9f2385217365c1744d1341dad4526a2b7603f1ad09d6dacff904186656bfbc0cb3fb0e07e6010e32e9ac830eee5d18570626f8cc96baf4048323cf16c407b3249fab638d82faba8445ea9aed391bba17926eafc81500c56b9be5fb2f44a17a5378494983e14251a85782031c1c88f1e9241c884bd2e415cacf414b96721a5d2479a25aca48f4442777dedf1c1df24200323bb8930d360047c33190c611104df6f3078f5eaf72e81e82d890bf3b3b9e5f38b64e102a4fca104b716024e37fed531041533de7da1e6c9c1bdcba123d30749295bd55712fcd8e9e51b8d8db40ab26656c9299deb0b09baef24bdd427f68c5d123972a9629a494dde32488581ae8f0ec50b678c62ff6e55b6786c041b7a2f3f71575a3169163ca5e73d2fdb48b48b1ef760e0c494694ed2a34e148a878fcb99ac40e1f58f128b911dd6d88e8dc8e139302eba703ac8f3c68075bde57967c0c8a1886d63119922a93941e9bf87d8c98c755cbe9c9a38296e83d7ac720c447fd6b305be79a487c166aa6a8dbaf3a60409fedbb1bccab1c9449c819333452218b74397ca47e8b55f7b8b8e321ea5405cb7b90ab2284c3a0fbde6470209eaedc344d887426318375396854eb7a6d75d6d4213bd8ae0926d8c905068c242198673b8e1cd1698754b677c819e17a903bb09c86fafdf1182620707b805d43e2dfa61d8118c4319730a8b216d7f47fb9b1d07e7a8f88fd9933dae65ec590458f5528682f783388d952bbd54c961b7793080dddebf9cb6a7c883ba65e1f7bc4b8b09257e1b228d58889f8f15911e0ce517aa2a1a3f860ac8725f86d4e5eb4b7c0e13bdbb8aec862765d46ce5c9b771c21c0c1b5484580d91c8bcf4210a0cd0ccfb0fee0681fbf959f2b589760e0a4ee63111f03f84ee564163a040ec97a21c9218d714a3e7a0283d778dc56a9209fe64e25e31cbe6608679a995875a4a6fc345e02695ccb4a69897ae946f8be97644955d1d2af2b20e6e23eb496e544eec1dd5647962719c3079930acf79761197bc23981c20f6d0978b37e12cf6e9800de5c814c18ce38fd8090de24c3b3bbcb46a89263855ff9adc5e83c86fa8f49e552d02dfbed7eb57d2a0050d0465632c28b5d724a66519982283f9c8b1d84c1afccea3ba81e8b434aec89fa5ea65ea6e5ae33a068f232bd164b2f1cc3ace7495e50cd9ceea1849e9e8198f3a57e88228169235fab74fa9827d0ac0363ff32a474d2115f462fafc13f9711fb556c2b752ac9e4307d92350f163bdcfe2f1bf170a04df55d6c400224516fc86a35d9686f87d26682539d31f407888ab3e98c5b147c53dd8bd6fc615699ddd5b5bf468dabf094ebea4f04130a1b94c6bded75121d7a99ca596fc82fd4e4c8434e5bcf65130ef0ef77419215cf116458a9f2b1c7e6f9cdcfe2aca6b63c12f4a8b15eea0a049d208b083b44d25b006fd53d820b7a4137ea38cd4df8c0d31b70a52f695a28ea04de174c90427d9b58a874d1376328a55a89b80956bf5e2fae73cad04137b2153634ccb61912936373d7612199037851e473dc5a8dadcb448e9fb84005a63f30329dddf7a901624d40d9d103467c98a9f6b5d845c84bd7924191a93843b42db0d921d8b2f0e79d6b39f2b6b4ffd4245330ad8462d6c3631ed01a2270e204e2ba011891f99242bb6c951f7fd0ac7484f035685dc3a81316736603f7d290361461247600a5c65813e09737bd44ca018efc5a945b8bc11e8a9a8233c2d571503d41facdf778e83cb8c43b9ae40bf332cd29424a0271b2e8544551f4cc84154b989848b01c0b457209151f4815c4bf03d1cdfbd1aca027b201c8017573d68dc8bafd75447ec4e07b42351a1918d904cd93b0ad78fa7c9e856aa163c630b5f93faf2265b8431e4dee19bdb2b7cbf4d53862956e7d7d4fccc3cde693c3253296252efa138c7aa103288ef365f2f887129657c1d8d11b712d06889ac7eb7fa4579a34b02568ce597ca183724964293036a4aab2a9b9c9b060fd6ef204f3631ec0eed7bf730bae44ad7f15f9a1bf7a64fd8c54aa0124acba0d5c514800a47421b5f0c24f389bffdcc06603654f1bbc70f9309ec5eb1216e2daf25d251a5bd5f849d67c7a1d46983a1388e8a3cfbb9a7c9c45f42b44f5788873b81767697502cbfd31a50502e0cc55508b20a47d41b534e6afa20a09dcdfc2aa263c916d1fcb94b7e10cb1793e0b8eafd60af6454471025c8082fa93e64d569ac27efba282891b7de2393ea2971e8cf8598cc6e09d52d5116dc2e022f83579c2c1dccaa219921232a646c56a1a8a0b56f93409b8a08c9f9efec12bde5b97309042d43bcacee053bd9e148c52c4c5aeba208dd898fdb0fa6e3d4615658eb60593255331b818fc0163beae0adc33ff20be415262cf8e2ad6e9c239c15bd4ffabfb1767723f2c1499cf084d2e89b9fc99f8b691b86a9c5f63498f28b692aabcceaa3e849738b1e98bfd2ef32bc4ffb7609b3ae0220d51a7d302a279b4003f3f4b144219083603c7abfa201860816e379c81d31208942766ed779c45f1e207c456a9a63c4eb504075e4be8ef33a81c1aaadbb2f9d5d2765d27031858048c71d9341befe21ad7c6bc913425d68096bd82398c5ff300df9670c00ecd4dcdd62e8d45f18251340606c208c22cb3ca3f6127c698f07db8974c3f5ec7f573e1a3f484f2103376d474ee47346580b7ee5cf691fabb4e7180cf42a1ebe7c186be0cace99bde0407e5f1535e57e213514237e9fbba100930f553aebeafedaca065d5b56b44a2dcb54cc2ccd91e6cded00d33c895aa606c7efacf7b5bbceb4bb5476a9394d28b4bde039bf02f1e8dade23e402bf5230dd352124f0b3565f8787068f353da68519a014c4dac64384f266a0834e27b68a0257ed858a67404338e7066362572b16e2672154530c1b153c796465bf07815d79ba119f2868dbf6fcedc1f4214230008bbac5ca3b8f9b89a7f66d7ba47a390810f7ea195f9c37c53ee44786bc0b5ab7528fea27d588b0b4c1cb073c9008d8a0f02a42947199414292d76b281a76324f09527e151c7bf0ddd4446fb9fcbfbdcdb67672df65e3d4400b3d815111f94761c0f1a2aca592ab41ffc82ef9b3edfc611676a3f308d1a08a8a07e8f1b02c6cefcdd8ad21cd7504727a360a4a821b5a47f4ac2762d47acd5e04d968c2d4dc5c2a5c5f8e96f26e86a39854692bb3b26c5001fb2e5d9c1ff3cfc9ae24e8a6301cd7fd055124f9df013c42e7c44e975ae1619585cc09b89b892dd2036e7811801f73a2d71fe9fbb81241bccf113ce6481fc18e029ceb566e220b2e4ddc87dc1020063a55a9d504ee7840aa229c7d584d5b763e1c398884c4ca9860b0d74e5c66d72bf35593313b586473d54642f0f2ad0dbdbb4bc13f542cece62f28b20a46fd8f373d0d0c1835a943899107dd8cf875cada8674444b7d3e119cf89412b36ca548d5c0d48ed7f7351c6f7017c58b2c09c0f6a97096bac790d548d776f112ba17f540620b50ecf3d43be5d15fe410d87370fee7ecb92a3e4c8837c22c4e866116c99cab7815d3b27533afdbee453191ce4adae08655e5eb970d27765d3e5d7d5e4d669a6d1e86eb031cba0ce7d3aeb5c460362f32054d4bd17fa279e5bfb7af73ae4c3712bcd13a462b4702149bf6b7216ffdc179c7ae9767ae159bbb19977823ea638ddbc0993dc003d8ef8986b7fc8f4402aca3bc24a6f27c72943124376a816bd8605ff6cb6bbf7ae73f128a5e436b4d1f4131fb3a522b7f27d4b9a490c072740908505039afd1ece55dc1cd314772c7c818b7469aa1e30a948d415eedbc195a68dd12a243fce55405b81af4371c077b0a1e4a806c772174d9f5adc8f7a4c26c8b79821125a99d0c402cda89974619cb1297cd0c2e9f562ec366634f92f307a245f99f3b8cf37f0800a7299548d6679c3f8f74d2c2575819e8ea4fa9e5a2c61903fd2d3c03ad3b096fb7ea41d50dae45875b9822d1033faf430f3dd0129f58766e0b48690a9977a7a524256611032c5710c4c33d740f52fd32a958dbb2b434f44775cc3e3136213e8b0ada8e758a01ee08c92c91b6811a9b040364ef3976295117f1c4cf706ac0f97fce21344a8d58e9e81d4572d275bb1bea95a40c72b03fd31707de4580c8a65ffc3ce7e687bb5640cba4f3b53071b570c095f3968f11d9d02c2aaf435d311001d3e6ac8c139f8a95641ac23c140ac5a606ee7df854caa1ad248531ebc4f8d8acd1bfaa2ea40e25e428347dae8701304096009f954dfd69a9582640f932991d22d82a5b63996058d3b5bef8f3f1f13127da5a85c159a0594c0cc01a6a3af324c1cd3092d08c4552bf615a3d5ac5e97098131c6960273e240fee272540200c023bb2a97d592b0a046262dc2e7e508f0601b968a379849572ae2d3a13fa052f95376e4ffa2c2ccf43a5940f355df9f7959783df84b372c0bdff347c259d725753b22874d69dddcdc7275557e4138d9df9d2305f562a05a7f35f69d941626173f622c5607302d021f0bb866716ad994738744dd7995bdcb26b5e7f4071abe5b32d33e90e554393b868f3c865d9a851faf4157d241bb8312b5e761a47165b9e986c52d1aaa257e9414e137907933eb80930590d9a4c5b4dde8aa4f81e56a44635a5cd4631e454d3a8528199147242025220fa7e56a646a544a312388fe6682097285e1a4a4bfa627ddaa111af548da3922832a2922cce8b1b666603887a45eff5492afcedabfbe9ab336f8c7f1785b0fee69cbfcf155a437e82397c33dc70f5f94f234d93f561baec5edb3ead4cd5729d59d07d02f044886375470a3e4e32d76d86ca056207447258e588a3de8605cb821d81db28a534aa0088912f8c98c0084d5e4b6acbb1b01c3e94dca425091991605579fca864724120bd53fdce487c40007fc4bb3b9d033e4052ab5ca05816b9c8a62a1bd3d88c2ab3dfd48936315b4eff0e4df0b345b06a55e531cf7244e0d29dc85e9a20e55688770c4192d030be9fccd4354e18821e669c9f30fd1f0cede965684d34b5d770e23b7d6930c5e6d34d1fc1f1dec811915c122049fa137f57108de7b03d077bdb2562ea61bbd2f2fd79d890e73ad0b8adf521a2f4143ee688aead55dc922838b239a33b519dfa5aea5d638198a3a5f12f2fbc4d76fb64570ccfa02cc6b80603f52e61fe104504feea9ffac4cab5c6a6fd0907210081524b4e0dcdff858c5eb556427ea8182ca65181d9f8bee3dc5126167c7066aa3925a74ba691bfb95a10c35674047ae34eeeab05e87f1dc4c614d0221b620865439bc32f6328184836aa9497763129f77a18162215b163866779ab1a474e39a055cbe39690640e89551de0f780d88bd6777b84c15638e0474b19815ec593a732b5731dbeaa7b173c9f5c2abbec91d006565240e6a1673d9a71a77cae70b0a03f7da3d726e2744ffd6f104f44cf62362f8db35e9a517cf5d7b28159b1b8aa0fbedf02ee5cfb7da959d8251f6b1ee5099606e5c03d7fa0c73a2c51954deeea44e579cac279dd8c2848da2694b954e2622ef310245b87097335a195630985ac0c81f8ab7461997439b38f210e32a07c187741510ba48146e6c1a3b7aa1b906add1f149c6bef2835f7375b194ad8681e82951624f9cc7bd3d9d84d90b0f77fd52f6eea0c40d080c1c5edb48fd36231444d692015c2c9a0e5cb434ac20011442c2a388238e346e1340a26c26ca4f67862a3008472cf2ecd1256c2baf740180a11f260ac32aae61484320ec6b6c7f4c4c86a2f7581b4964d113797c3d15c8f62547fb43068c0ca7ff14b6f587c1143df0b234e5b68f41f04f2b364d6ed50cdbda0d3b167b2e062e301c85f4985baf4043ad93cee4c62622faa4e069dbd1630037a4b37b5e1994a69c1af4b033e1fa3e94ba3c30cf82b6447d775b201ea93f425d89422de4bf1f8717b7939051a6d8097d5f42fd8b8f5582cd33c5d8ba83ff7d443b34e4a06b73c6c8d7551dce14a3eeb5bb9a145adec76468cd793fdfac19d89021d32696a76cf2087d45c4868736e4cdab89e95b181da16e0761720dc75978e1be7d7a2547efcb0db07f3905df0e576e8bbb2b01afbd8fc9626c9724ae394dde3fa62b28cd9d08b08d9e7063d72dc3beaf92ed7d7b2ab73290c32cbfb59fd330efb6f724600672b59361fabd3fb9203f8a6b2551d5543076b52cd6de9b99e90896cb6b3f59e71efa890b813101fe6be1b6daaed9be20f82665eb25ea017d801c832a4ca743e5c6523b0b45f39e28bfcca946e18f98ce6c95e1259a14473ca01e6ff7789af53589e45d86c5c9611d748700ac1e8bb21d1534f797d1529b0e84899ca05dd10c5bd9bddf43bd1a1853eeb754a3a107940bb31741fa89c02287d112f4b7de6db9f46ed27337c945695779979ae1c9ed35e8a442f40e76536e1e5e4eea272bbfc5e5df448979f998bce72f94f71d11c5c3eff16ed73cb4fb645256cf9f55af4482d3f9716ddd1f2ffcea249b37ca62cda26cb4f1a8bcac4f2fbb0e81d587ef22bba78e5bfbba2495cf9dcb7a2955653b9b3c2035881f15566c92a63af09bf1eeda94af6c42ef93f3aebadcaaa004195e998ca09968aaea2f219a8e8d753bece294a34e53f98a2ca4bf99452d463951f5515dd51e51353d18754be72549482caff3c45b59cf2b9404d515bb7590aa42312ed954ba4201a2ee614c7c9288b0310cdb62fae103f6503ebe80f03950e3252690c7059e7b586bcbde1df207fd90b9e3db484a9c01329c678b7813e8bca76d468ace19cca0d939b92ee0693559736385700cd1a66ed21b30c7218553ee7093edcca7130e447de84295060be4ce4999dac4b0e879d43cfb24dda6aef3a57539036c5f40ffe6b5011917b9b623118cf6adf6b9feb80969251642424a93082d835a190235191ca26dd0511c26991b76ee95aded7742635af706b27746ff22c91da5a8841261a606c16a39ed1a3b62fe09a4ff469dc066430df30fbdfb2a9aba32a2e517438f85d6043900fffffadd70f70bfd4da61cdd85e86b8bbbf51f48d8a1cd66714fa4a5788f1be82bda01587bbd905fd28a8e05d77412fe4f460be4bb41b725d80db69ec295505dd6d16e3485e8ee374437b2093c73a9d85fc11eb503de7874fcdcba522aeff3bbc16974edc3e447eae4afd50e8d4dd03e295c5553e467cde15fc5e5854d523c2959b0bfe476a5615fe5cb8a9d03fa2948a8bbe47f60cd5ff4aa8a8d83b622b81fb7e45d48c95ffb610a8df17a134a54cc965ea56cd4e00f30127a6ebb1f8669a241ccec993d447c9511904fa8480188e4965d92f6b3efae98cd5ba76c6c402808d7d286da3bcd0214b95d4cc5b7b9736826a6f26a656cfc71f06f602e1cd32299e25aaadc22e023fe3ff041ca81ff9943dde1696f99c584922da909f38d52be02fd41549f2a75fc4fad5782363b5d542a44c849637f869d4d2c79482e939864197610ba0193f8a0d18d82f9410a0dd56c37ce57992c9d5230ec78e2cea037869f2eb551c61a6d21b6ef5ea7180968a44e1c442d9d05330b9294a7c4385923deb3b49d5f0b18aee20274d279cf8bb4828e95aa330f056c694a04519139385d2118506ca4b098259b31581b83e54d15b8a8f3d64c7b36e3088cf7b14cc096b51d03f225afa8a273fa653a264a14213c969211e312b62d244fb16bb78ced174aa8de15f251ceddb31a01b60be7d03b3c7a66d6886b262acae4aebafba5ca634ca14486c7c2e43a51cd72f749b11ab3c11d308fd8b2be0a6ff655cedd50f570676d693e1f4daa28122e591f7d082e4c3842e5412723fce6d17ff96baf73a1879bacf1360e631c2749c780cec81936704fcfe20100df025df4e925e283e5b130310eb63565c920ba969dc28ff2812e37a095f0adaec4e9fcdc3c3696865d66ad590122e55c40150c2bcfd5aefe6f0065d5bfeacf861e2bbe01a541c04016f2a610a46120e6a564894d84dcce19c9c660a6e18dfb72258742df0bc2c25b70efa8aad88e8c40a7bfa0924e5d00273821eb02bbd9792de053878f57ea7d4921675eab9a5f24859d2a273362231a19b721dc5689c78f44f64777c2af6191ade0b8fc6b5adb97208fe735020d1234e7fbe837bac4087448deb2a7a054a9636d348d95f6f1419b8d978a5a8ac43e099cd83d057675fca08918f4fe9a87d38ece1290d8fc385bb89745843a2ede3d3148d1484f1905ea678efb96e3af584ab878a6d4cf5c8f8501de231fbe55bd289fa63464bd8bf7b9d848bf115975690c61af5b1af05c6277eda75489b70f8d6fdf9d4705d20e1800cab05ae49142dcf8e1e533bd444d7a0aaa2627c9729635d108f533c5d8a7083b204116ebfb93356b715c596bec9e06a54b81b2f8c875e7f8089d8bdcf847e9228bae3a55371e0ab071d9c5ad910290e8832b32c0ebe7ae43091f96533b0548ff72a08df8a17f5da6d29b30b709591e5bfe44cb514b1f1f4d5b3166eebe2f8647dceb6bd8211da664e8eb36e5505e6b8e0eece5413f5f66e370c4f2b0018ca1dd8397d7c10101fee78d4de3ed68a3728877e86062153b8064d436ce07e9a305cc92c018efd655d5f3225a1d7409869c50d67de699229fe6c36fe837b8e716ba653463428b6b395201db6749250762b8688293b1947c082b0096be919770bc1cb94a4f626e74694ac8b40b1b58248d6b81106c6ded3c523973e15362691933b97c2a9dae30af0bc58ba4434027cd047c1d545ef56f843db3e4109da6b3e5e149219540f619cb7ec3e2897e9ca0b31a17850eb499c0b8d054795ae4ca9104433a9060be4dadbd652302f1346f287f7a1146b031a1f73e437c3001fd2da41d3ff21b8416348ac2e83a677ab845ed07423b92ae587fbb4e34d965588f253021365ac5563635db5c005fa940886842c81571d72501fac2845015c3396b26512c4aede92c394ffc04dfe236e75683ee7d09dd710c56b6964a4a38f271c2b4596807fa0bd69ebd631fe03fd133108c530a14e16e0d977b5122a597545d69f3d999f1db9c3c059681c15c066fa317939d1dbf6a2545fbd4255bd81275dd802f58c5d46e18d35979b5cbbd8021ea48fee2a006f6053124eafe2950b04793d6889ca35d86e4e9b5422019ec8521da364648dab8f443a962a6efebc4aed77f48856714bae17fb107b80f3073c932b95b2b25c7034d12c01dcbc43af02ed4b1301717a7aba463c0448d9a079157a280e609a73aff341577f79aef991eba5861d304418ba3e06642b49d7cc82fa8c815be4c5d36c18bab67f7a9e6c1c902cc2dcd0ad7ff956e98a27e12ac51ef4139f339253aaad1c52432919bef0edf1a0084c4a4d1df7515db9df6ceadb5ecc606efb55ac969f4a8a043231cce65a77ea3b2a4fcabf556701122a79bf449731068f0b77b27c474b7d8f58d92823a46e9b876c67d01325629b5c4a7d05976f0270a66cba3d9e7df6e5b0b3bb361b319534c595099bfbbc15a4ae2e3502828b97031caadb9a2571daf56a0c6aec53691d8290237765f435f8e65d176b731d6a88b3d10404faf6f48146f052682a51650ad351c9227800be8ea541570ae229378b4f0167205672aaeb7a65c5524e7890e9de4aa36e4ccbe13c3fd979849e56aee0f07bb2dc46027595d64b49c857d23c54ebc984310585917c299254302b993b9f0a1ff6200d2e9c57a14ed94eaf53b412e12ee4cb3c8ef1037fc6e3e361d0e8ab3f22aa6e222f96cec581c1c4ba53286bc0bb96eac6c6ea6e6de46604cf67e37f4d83d401e88db49c36a2c109986d384a1d7ef15b87a2548a683af713eb1ae30c0fa93a8b490f86efa00e2efe11cc316ba43f3aa514f1a13f861a431fa5ad0319fc6267a144e7c3dfe41c14cf0a3f6c25d0df25aeeb9c5e6e190804bde1b5dea88cab6ce61bc1bd9e1dc5b1d4a6ffb89c431c234b3f1405445aebf8d10be2c21d873526810445502311014eef53cc7b448274da179e123ee070069898c9bcd3e2afba6b485e28eb046ccfbfc65213e64e124c29235ba25056de0f0e0fd4b9c26ee79a2e71cc9321959d01809e7f68880513bb7887fc3b0ff7739641175c27813d4206d89dc408ce203e66f9402ac68d4997042a5f3e3ad054591cc1ae3897e03132c7f74033f8c0d417c144b8cdb0082df3171fa6bddb2e1531c200f268a8903cb6431cd16412322da13d26d6bfcec65b2899d81c24659a761a20513b560eb8fb358fff093535cf8190002a5ebd21de26489c0c8dd91f93ca45dd249a5b853546f51d0627a0cdc8cd0385c3563a022458e2103da0f3ec15f1be54e08eddc6e2284daf940f903789e26ca933e849fc664eb78db71ebc4cec61f6b1cc542b96cb63dbde8a0926f34e274e340d8efa588bb257dc3fe6170fd671212db8cbf4f5309423c7379b2cf27fdc608696b9b78918d1e4d4f14818232b8b2779f3cf2fb086539b9383a29ced8c5953a15132c4a3c03933b8425c8e0e9de7068213dba739a84a72f8b2d35c8de051ec27686c7b3ec6a9aa1106018dc30de2596f18c9cb5b396c93f6afe0bf3071ea060252479cfcb153ae9c3aa35782ebfd27e764859f656ffe8438cb782f19d338c1a3e24cd9a38ba7f174c05c529b570211921c4acea5200853a2581dc777b3f5c51b9897a26b8fdbed73c969b883aebb423e85d39de9682232afb4d6f8080496d47cbf5a9c51379c66977942af7de518fe5749ceed9142fcc757213d70e592588e9831831aef713cb5e3d8e38f5931a723393c0d2c5b23a740931ca8c4e7aa8815414152450878a4386a47f086e48465541109704c24c53fb16c0b636a8d7cca02dca4067a5d8dd45963fd674faaf8eb427ae0590cd6ca8b6bee01b02229eded87d6594c02c41246129c0826d7e1e40941add5fda622a82578686e2b60e5a5b51b0a8d489fca3ba41593e26db486cb968324f2bbe50cae801d43537b51d5af1166ff0cb194ffbd5a260dc78c0b371ee9b8430302a179a60def4bc335d89345b93d9a846a31056a18df8d17232067186bfbebe7b11c54ed5e88f7ca1510ccd7469857ed2d988514cc82dd86996470238c3b5b2c8249680c3b517c7563e912cf8616e68b81ae4c80e81db0849d10b99d21968c03904acbcdffbb6e816fcda547f03f7c09bb3104be83925295b9c63e912b4122c10ef98504cdc3af305f5696a998417dd08cf791c7c2ba5ac652b60caf3b9d6c34366a0ea46cf066cbd01bf9bbd5226d338c62c92debc4087de6215bfedd0c3b535a58c88861b2c558573f6f39a91685ddaf49641439972a34417c8d8469433cac1b90281066884932741047756203e3fc90478480f7f98a2412d7c4e9ee7ba0d909454688bbba8e23ad9bae28beb470fbd3d73e6454f1a5ad96b7c8e75c49cda02f5a49cfccc726c93eaf96e026535b9d165f3422517ab0275941e00b63272585111664a9ef694aa06304518baf3ea2fd7f5758b13aa35a520b16d3db1c51e8f577814a0073af33e98d64667c795a08020c556852e57afd11222accd7b2f5e74eac0789e9cd44faee0220d9871007050478f791365270d2be3468d97341b3ad76f05cdc9d8469c072403a44c7054147aed88f0c9989f7aca3178908b3cbe842e8c8cd5849cbfff04d7ba4d091d9e8c60b3705d861e1a59251226881587cf0ad8c8decdb1248e65a8389b0a057f2afc1881287755ac409b3c2bc022ad5928c909c458ab7b2898a8097e5e1e62c5fbfa8cc3f226ebb9c43de0dac84b7cb917ea8babd1104fdfffb32008cec89bb5048eeee58a607bc816944fc0c39d8456aa036db79517a09c402a698fdc796f658ece7864ac8052b99b64d0007b43b7ec7af32d57a50b9f7f751546a4e7684620383cec158b044991dce77a69c5dc312dd83c83bc1e6ab37a23a4dd18c2533c9b8fa76a90ba899c8ad9a4474d4a9218b4d714e04f2c0203f96df6b3159970b19d0f29ada67c9886bb3e949e7b194a29235ee76603ae61fda0a7525497582c988e9becacf371ca531ba745862796fe34dda6f5c3b898216977612f25b80c9b4288c38a24cf1c9d5b4816bf3fa59c82b2e76a52a48403867a755782906c8ac5d8b03ce267bc2c7357b19243bd460506639a43fc3b2e1f0ed050943628a1e08283daecefa4a0a0039bcc40ec258d1f7a6aae0ab0f7970706029ae582bc692f6ac78050a0d726d24c94e8aa17a3b3d9573d026004a3f529353e3a386f84856ed12442a9ae90fb6cdb9a63cd75e1de87054267da9daf934ddd549fa1b31549005ef72b83d1038d17e87b9bd3ac1ff3819fc0d71c62051b9e4b2d9acc94f396ed647e6b2287c6d05b4382d670f4e7667f713092dafd7bd4419741509985f40e29468752a02b1994506f14dde38e1201edd267ac4763422aa405c35ca1359dbf7846a3d2e496c9d149b107187acf4d6c09c3ad635d0620a49bbd9b14a47f08ebb17a8b60095fe93572bd07d4d7933fd84c85ba236ef9a78d660bce0dde2a0627e7c928c092b905b86e169a07932df6748b4ebfc3aeb108e61807ea1fab0465927708273a0c28895982f414be556744ffa0455e8636ade41f39b491d4fa5b641dced3a6e4501d8437227bbf944741471d16567ba0a8bdee20e9ff1a088e5b7c00f48a43c4dcd64e1d66106aa31c084b38676a6377a4303fa71541b3b30a0d56c5420124575f0b0cf5932c82e2c83564c680fc63fc08aa62c13273be731ec60584e54674148bbe28d8a614516dd29281074ac2aa1c89e4f747b397af768b06117e96dcf1cf9b9069bcd20f104b6e48ad8d3229b3f313b2321011ffc2ab64076ee37ea51259f9b45e175719b79d9f33768a63bd7e8bc06eaa8f2ac63193f6aaa1b28f57910acbe73f8006ee5eecafe7d5506044fe9bb255f6a903b718090489ae8b1309c4e239c40044ca2b7870c10a84ac978abd8e2049a20a2656b4bffd4e4a824d2874f0da81a18255ae0c0eaa023b160b06c34156250c99af71ec5e625f209187522511914c2cc40c81ca77c37492299c4128065a1ffa8b884b4939784ced6c60f174b79111aaf6aa538033a5ad5600637896609402569d7725486e03d13f97f85e4dbc8814223a63c240b0166f7008410c97bc2742946ef032152db1fe2f7505d6aaa0b50cb6b7946904163ff3e9b2da6bc549cd46f08d701517805b3a401a25f909c58010ce0ca8aa459a4eeb475cce4c205ad96c064b3a72f9e02051703b80c254f9ed8f7042345eaf705eff996de63e41f940cbfe06a3c51e1413aa30ea302a4ee895ec7e24ce01c744261952a42405c62a25ea018619264aedd1ae670b7ea1fc2d109abe1b9aeaab4c76247e1a4f4caecd56634285088e0ea3f414d84984560f48ca35b65ce48a3eba393b0e7dfd644b19ce42a4fc752e122330fd9bdd348c975ac091dd701ef94f799ebd3f2a048e96543003a44739e9771266a5c3c5b5fc84029859e57ac2e680faf6a8af31047cc7f823bae73a01cfb6269c974728c2b8e8e352e62f44e073ea508377dd14a19b9650e5e2cc625c61a84827e715dbab6d8d42c101f679499996aec0cac0c61e163309db3aa8e33fc2ad627767878df8a1d0a05ffc133e9eb7e2ffb5972f0a5ab81a508b3bd1a3a5f2e2e05ef47d6c8bc4ff556c7fba1fa20154e6e5baf1f23f8a23c8481ef0aa5229be012406e78e0d0270ae18481f09f02de1d524da048c3cf2df60edab0d784304baf9a09fad10677e7fd8cf341383a549af9d3411ef97686c67b3e164e058373599aa7c38670d2b162001f49b4283d259b6f26f40e8981daa215c5a64804fd550e2f4d966d682f1a33e0955266049db9682dd7d4ab2b2b654a94558b46f2abf9507a0d6b87d02cdb18d975144593b79335788402bdf5a123497363e01fd2a0995ddfd048d8dc4c58f3d86cdca0186936ec9c8a34fd121d5b6128a1161efc8344a50e1910fc74ece2e768dd1c0c2cf8df6ba05b20650d032b8090d1c487a515f5ab28cd5357668e6c4789c7f40add5974852eaf50e82fd466205f330ef48cc01241900b28233e519cbe0cccd8110e8fe9f929dfd902ede802a6d82327978e6774bacac1a095ab0d9bf622621ec6bfdd1158109c11534e7e5781be45db92c213ccc811e1b1eda9e551e0a878b99ea15cb9162c6bbba8df6acb13df687ce8cde4b47032180f0d63ae3bfdb299154dd3867b7c32eea3f931d29d95032af5fffa8039e1057e6776897795dece352e41dca96fbf5d205e69b0e4545f34d1574fab1618b527ff5b1ac82b27a367ea12a369c2916f26bba010633eb1e4bcbdbecc3e8ca9db6fec0f67df7bd9e5d05abb7f84039f2419cebc27b425720b8678acbd0a1b45e1b38708cb25de9cbeb036c4eaaf1178379a6fcfc4c58f3734fed297d8431ab482d9f4e6e84c57923e15307525b1a8475cf781b4623d4ae5639a804d14ceb6efd718f95382b332c12d9bfdfc957237337bc041f67ec6edec35ca0f1f3f56c34cad669e3e01da0c914123238627292a8568070294c00846cbe190018279015339fd2f156470a89a8f3fa081c5796a662013bb28dbaf2a2e94343ee18e25dd0fb66d4c995daf37ac6683f2f962438ca235426ca6cd2c49f1a7ed90fe40aec5227ade0bf63a6a39e8fa77528d013f81d1c986be68fee7ab892b39ce0eca6ba2f20f095668fe4031373a375f2133a9985ebffd375842bc06d0b120ad044d0b6a5d4a89cfd2bd04fecea77bbbc14b4402a30dae1e823759618a910b28e063d17469f74cdc34a7b2b0e5effc8594400b16038d00280f858c44791c54a4b04721742103f39d602a948b4ec7b16c6ad3a23c3c39af09a760f2bc6391c62ac973139f7de229082dd06b0038a178e7a1b0a9402aaab3a8913c9091b03ba7f09cc9445fd80ecc51bdc559d1844287b5c0e5d27fde2148a9318cc3490e688e63211f749a7c9b6ea1ebc09f0bec624b6c088b48f7c7ecb6b62ec3d2d3da6c234f97c02beac0a879af284b7c56dd5053b463c004f17226c824b86d21db85478a69222eac65b1e9444c3975a82f853dbb0c09dd047964dd79e5395176fb2bc5c0deb67c498cb029210636f87f02b8f5feba3b4a0c60558452d0339d96bf3e21f22dd7635a8031fd83a1421ac390c9aa14fb91ca8c9d7443147200e2e364021ba671eff512bb02013b246e516637552fa38a9ecb2cde08accf049ae99ad0717ae61717188b228cf3e6617f74cf59788d2b50554078894eae29a15122ba1442d039152cdd0123dc88e0e1469ba637ba45c92456a70bcd44c244e9162ed3d6a8b33a2de37224f43b64eded08e0b647e78092755e3e5265c4010dab9357011eb08d5c93b2e7976e8071e080ebe30b7f46923f67a5b0df32254d07e02ab9866e201767283db54c1c9f5a2df34576dce2dea5242df9e7a1b864ef7a38d8b677c00400c68d801b8ca5745c2d0fc846e45d2f2255c8bfbc26737327dd6c5e0949d622831e86c0beb86cad06829dde9dbb5954a6cbdade44f3527568f99240d57e8140bc5056b906e7ca41c717aead67b01057a072b9aeaf489ac77eff81bae6209e1c2996291297ea5ee1744e6263a5903adec3cf83cda9cfa1bc374377c7e6b6f1a4a07c68d5aeabd973c1458b8c519da3b9e9e957ac9002f00bd5e285c20d3ff5fe143e8f5473adec4ff1e827d7f3f879c4cf341fce340dea4cb36ef4d55b9f0cab7e815e64982c2d2317ccad76af6a4b3fecef8bff3f44ec3d55f1c15e430efed14768e2430bbbb1ec0f2636390cfdddb299be89962f58c05a93ee3274d19f9658d4cdd0c1e32a0161859651ac5c1005159c3774d2fa9eb9e1ede0d9c891ac03408943a9857ea32f2832d89d3f9b34b16980439d255db6ede727a9bbe837edbc8f2166a31a913f389613417e2692bc9cc78cb78694cdd0198b16f0a4602c9abbf1754e8516028bcc822182fc3c6a3091ac55f5f6cec6cac41a9f509997606f5f1669362881cc99791eac742e6b14c8830903f71a5e34e526b63b875b8927a202a27e7db7f89eda580871f447281e5cd2a30814a9e4d6bc45f247b17543597f14c89b8471135653b495b155ebadcbf79f830003a846c5c358abc341a8fc6ec4ab98b2e5d9de963541809704648e7b9580691823a03804aa9f6399254fa7e73c766e6bb919e63fee1212ebae9d7eb37a46650d82b31a24634f9485d541b84d8184f5e7826c764d781d842daafb90e1356f060d2e7f1932b4b9a290956c56bc974fab4b7e1f049d7dde48a6c980c1c252d012aac0184633a0bb8d7872853435373d3bc473bea98aafdaa6d888c57679432b2e8a502cbad0eb1a0e978305cf254164bc1a5eb57809cb1de489488901d5a097cd3ef6f16fba9dca45603724df33ff2db1b40f297a6afe0dba8c61517c6fbcba4e360195b2b8c59916f4c2d2c4eaa5e9af2992d219544d61fa082a6024552583ec9affb9f673338059abf793aaf211918e20aba4cd47f1516a0f99183da194f3a12f061e8fdf1a14c387109dcd558a18657f268af482adb71a70a17fe5013c39500501040dd6a8e65eea2cddccf2fb9d2c5f3de8fa2dbcd222b502c80bb1dba4d8dad0a57b5f7469e6bb53ea4c1e4cbf7250a5f249ae3d9a388cd8d6cf74726aa88c013f925129b1c7aa0c437bc9f2e145e599846b06deca99efaae6edad5c5c779954e7b3ffcc6372cd9bd424cafb89575690f1a3b5ca711aca2c01303f05b8609ba7dc0e86b631ca0b55b7d8ab2695b1ac4801b2e02e72d1b6adf3598130cba9e26126516afa84a6327146dd04c49aa553192d0d7d2f7a4b01ada1d81d55d9665b5ffb97f39381d0e4949f1d79dd02ef9216bc93dc0c624d9f46ea4cb0decfa55733c3adead9ef26788df189351c0896592eb071545ac8c03d0e97b086e418f42b6c7707cdac2cfb638555ac8603a14a150921d663c28cfa874d7c0927391a5a52bbac2d8c28c98cfc0828d1fcf30073aa7e039a35908e5f5075a09525a99f3637c1db4ac4a264085d87f4fbeebeca9b74f60c75904e4d4f75bb04b82869c772ed4c18813ddca2035fa8e23de46ed2fdeab6268dd9a7434330557e7dde35238291119276ab54455de5d094433e4557c1be57a1c2488bb672d21a2dfe2025ada057cd67fd6bfac47e61c76f6432fef1b2aedab73d0276b4e4c1072d54361353f949fc6c8d58b3494eea58a4ddae9771f3e36bbd18819bc6250630ea8b80f66c2252b94efc9b24dad63db8a2b3854678115827084238dd3ed1bc15a5342727f4e197ab32011dbbbea0283fd1193ed89bc40889a505932f3edd64bbeb609a6bcf57a90fd2748700022fb7edef36d5695a7d26c0448ad26f9e98390c3c872464a2c62833f3744f46085ddee6b58d1506d429711157e4446ca2d09d12aa7e42072791abb20cade0f05557d65ece274b0ca3113d40242609c78835cc04daab5d5fe4fb981bcb416e73d9b356c671e0448a72ad9fc83e67748633e9032edd01c1d26f3c5a0e14568935a614c3abe886dac9dfd09157f0f6df98e4c31f9c0fa446afb289f11f815abb76d69d4a5f1f07e1b51c5d40ee6196a4c08daa39a6a32cdd807f20fcc8daa3fd1114b95c7db146a9413d271d0946487c14a64a3dd302deeb1b612baf72431ca378e1cc721246209a133592c145fb19958305f838b0920ac37e31bba64919277568be5000d1a438093c1d42961c3fc31d93db03b1beb0ea522632f74ee3029b922dac2a66d6ebc0064120f7610980d22532232da0fa6298ab74e7c487c3ed261d029c50141de52b14d7723a14c8a081dd4aa347127e68950e96f67cdefae6ee5a0bb5f8ab65294d58412a04cae30080b75eb0e8714fae496a92b9131bbafc3a8c11331d98317a86522f4f9d7135600eb8cd3f63c0690602faee9dcde7c5c24ad344e1cad2dd68822bc5008ba022fec17883b716fb7619f4a14dc44ae8c24256861324571c3d2f27284d07b815a9db0a4cd894b52280b3022899e707fd3e92607adf71b66538786b722aa76280f67cd3393115d6ae307cf8660f4fc20c3e102c933d042e0dc78e0a77a27a18e4a6a8a941ec2c19216ce931e4e66502aea0ab608dba130f50488161907c3b797746d8ffc00fb5b6aa8e28f8a6160b10c626b6377a173cb028fad98965282c47f8414c928016fb6b58d4c9aa99bb07eab180150ae0e0fd47f00bf0f16260f7213ff78e65d00c6e583874214e6a1fdedc9c042cc9e60a4ae47b726498da165b19460011e2aa9ae251350367b9b3f0eb79c710d0254dd7cbda134f3aa71714160e65d3555b721940e14bec41023b330168f8dc6c13be41156db3eb9f6873e4147f89945b36662bc473c610cb9635024b7153e86581b036b6495a99a084a26e4a91b41819e938c6e2b9b9f1e9743b2b14486312a072064eb0599d7f36143026723d6854efc5c0e0402240d9384df4559fb0dff821c112ec37b00752ca979bed8f7de411fd2f0edd50ba4162d0a0fe17dd1809c704cf123ea9107f2d44bbe31eb924c1004115c31118aa5ce3621c2884cac39f111399431af3ba849647358c4400cad45aa1e6836a6931d9f6ef70549a459d5b2e100d13b9d7de880350e08ecefa39272ba67dc1a3e2023c608773d5dc167e3309d1f251288ebbe8441870712b78e503837d664c2d0f79b4aeaa0b18f2f6cf64b793ca809395426baefa0488979acd8d055ace42ade2f2289c875e93b70ab647b6296f22f18deff6e641326b5bb0516f1a2d4f225609aca760d5362a5271c03cc70a38b017072d11d0183e4443d40faeff6aae330ee1ca44476b04235cc73b131d1b8e09ce3d119ecd56433a61d26fcbc16226f614790c22f19bab3add03ef3b257503ba04bfdffc365b212151ac5901412c48c66d0232754a6296c7607b8e9dc58099694babc7cb13446998ad58841814b52d8bc1178ef63ea4ceecd5e53aedae0a4b14382bcb10c487c00550cb976401a9f19d339b212dd58f5985ff1ef74cb1da1d865cab74e443822c2634324232028fbd5610db30b13f05ad0d40cd17d61c9432dd6be2420630cbb18bacb636be9375a738b12bbdfb1954163f520a9beaa2910dc5503817b4a6a8600865d12282e12f845266c2b2dc5e23dcadcf16d54a94342ce40affce7dd8bd3ef7e661221af2c81705dfd92d6d23e7d8b1a689c89252a1f709eb432b4921f6e6ead1cce4885f4500a6200e537206002c79ccf8a657205c4f064528327127c68490bdadbbb886d4e40c23bd762f7eb22efaa1403ddb0727db2f0e2d48f7cb08f52b1fb7bb64e9c57425472f5c515a7e969a60e8de3a769877b5bf26b18a37f453d8870211244bf2c2e0d7897a407f370d05d536e84aaf09d0a2a2694860f89ca641c6dd10070c3d527d3a34d70c20e48c06da40285800cef0bed88841609ddffedee49d0d5c0c3afdd1573123f2f82b8960191082b1c22e25c792e68d293964d1d2304e3923345f7e5b7234e53cc92639d973085b6627a0b3020684a3c35b8b3af3ef16610c685362f1881dae0393ec570e355727f13311bef4924b78e1ea72a8fb4df28c6f90e352d3696fc63939a2c8b3f73876d14c2a44f917b34d8eec5d1060bad9dfb1f4a2933f1a812cc99209e18e69eb1e5d7a91eaad70f83277663bf252882e89ae02dab754bcc2b3cd732b3d2c3410c09be8b016c04eba4470e0dd3850aa0fd3054185b193b40630667940d990eadd3b055c721170e48b086d2afc07fa1bc8c00f2c4de6d3ee781422ed470438365ec304c919980761ff02290143d3ff1e6c1c7f0389fc5ddc8e263cafd742ece46999040cdfc6adb20b715cd47f3c2679e5151a38d839cac020de43b6d4582f8bdd214eadaae30bf63d0b59f900e5012e2323c9dc665bbcc086e749dba264274fafb16b9c1707c76cd120568f410d545fa3432467da9b9e2a831c5931a5740515ffd8d3d5ec0c01c19f7200430b0e1f6b5d604cffa68f4851cab9be152991d60175a9c12ab46321d142b5faa1ea88b9cfc6ab3b72d2027d928e56e83c45cf9bd654250ec5114775afc8bd2d60481cd830638f1960ae45ec76b13e7bfbf2d586838e2ca82e6e6b837e62a5b2ba5e89055307f74ab795665cdc8ac30f206d6f8c12ef74e8ab025d836f2d76ae64b3463e258ce00bb5b75e4bd93a2aff6466ce7c25047dabfd0494055462ac3b3e759867e25b3b530b1d1c48f299c4e8646757e44609658abc538b7a72cbba3261e06fc3eeabcaa1488870d1df1f17ffda744782c7044f1057304fbb4c438f0a61bf73e4bee37c3948a7260978e34ecfc78dd329c39b04f5f54a4dcc915a04902cf2224ca1772c5f94989eed3c4a5f6e8a541452db0590219146d5e4efd3b4a5826bd0a040e806b6f5b8521d0ffdaf1c199d70d944d0817b2293cb110ac4d475b7ebd8164330b10fc963e3d0a58a7230a1faf894236f736845e43895836da2d0adc0dc4b87b14b828485bc079ecfa2883e8b5d3cf0837d16c89a2cf8c24291169796212bb1b2224f4ef1718e0a7c6451e85aa1aedaa20eb6b2ebd09696bb7cc75256fc74d4a3e6b70f2c105bab45a719f883f9a6444e8903561a17ddc2c0f04e59da2f2d8fd634c791ac733d98ce9dc2d831243423043a6b13ad5b305656a531aa3272a0b3d23d5271016ab6ea1edcf6dc2d497bfe72c619756d856a114b6dcf398744ba00d8ced047f6e57d1ec7781e05c41bd8fa9830140b0af4845fa7a06cfe5c5ecb65031b229b902df7de72932db7dc524a2903020b3e0b6a0a5d14b12f556462044374d35133b8c39828658732dfa18d1e6cfa5c05cba65c20b1a9107e367ddc220d1a9b8c491b05a8043be6ea630b22740184a4334490032b22a8220d2a39d800458a5648b32b155474a08219f450839f292dcdc3500a68c892060898b46cb2101ed446559bd895899a6cd70b6740882dca212bd2b0e9164957a81391fe026335a262847d53a06d2c5c3bf3715bed88db6a0008e59e6bcf0ace7a13fcec4bafc76dc6cd790f5f371d3866d9527c1852ca02e36206dd4e410441f462d632220de20be2102a1f2209e2b581da5c5ab3d0254bd4c60ad1a08bc9de9cc843278839e2be40ec4b7599b0471cedf13249e6ccad4073e6228937ee4300e4a8208838ee2f593b2c59eef0726b26fc18cedc4a25cedcc763db0adc9e9a2323cf58ed3397600109a6b4309de9cc558a4c8c60a875af69186f3ae69423b61dfe4e992c2cf554ea29ed83c20f2dab7f3da44afbfa443ab3a2970e69928fb4818c1f9028c205c20e5a4eb21f69699b4f8c72021ea8a0e5238396839693ee32d8293f2d2728fcd00a5546d7d1ac41c5997b20c25ac6be7508fbde5f4df25602890b68ce9b24374a2e2648e2f7b0deb06fdd61dfb0feb0ef3119f9a82ad56b87cf997987ecfdd3e1cd99aa624bae4c0fe9116794afdfa388224e5c326b50bfbf94cc9ad3ef2b9568537fe8cccdb0cc4b896903845e4ca68a8a2cc528bc9008af26158d7d81f67d9c57924d97e28dfbfa436da8175972d87708fb5e4360b6aca6477406e47616258755891e6d7a1471a288363771e6feea4b8ff67dc662df1b2afbcea53c89e8cc50192e60af4b74a62acda5b98425cf1d7e5edb8ec86155eaa13dacf9e00920911d71d34cd6bd8eb63591e5a7d2bed71ed26c94be4db61d275d87406d6b1af640d39e53a68d4ca233690e511bb94467664d52957b7356a9fe393487b40a3459e02593a8cdc5a42a25dd9bb34af5b35834f75752f6f0951cc6a40c1691db48c431fd2ed199fb7b739229eeb9446d649cb97e7fb3ec7b5f442ac51bf77389dad49f39737f6fceaa3d97f6bd66d23548d79fc9ba376543b906d59f5903346b4cbfda95191039cf10decc9a680484a27d5fabcc9aedf7350c9963fed624fbdef40dac403fdcd674fd8937eeb7a21c56a5b0feecfbaa247f6f55ea11abececfb31c1898c32c452ca8bd68a25cbc715a40e2f985d03b107c87df5b4a6df50f608a13d521bedd21e86f0aa78f4061a16745a6bada5d3ea5abda045518b1a902002083e70010a7ea0456404a1821e8218438b162411246704c35e954e4c0154ae9845f8c37747232a5384004915a578a249114638a172c6126a44c9c2688b207850e403168421ba84e5e20651f41045163640e1840484b0a4c90f5ed083234c61c30cc20ddc0d8cc650c55c2687870a1da0a2082446905283d01040c0c20a10579461831484000b9532f6a43698414062c3b83167eacc0495a59a51b181aa888a105498a890b21db42e8b1ce7bce69c734e3a638c318b2c5f2bfd266bce5964c778e30b4cd212c8c81851114a1265f637599b8a529d5482308ce22f4649a908072d62b0431a21648d88aa43d680f8c18a12501d5861c30af2b5a39115405bbeb69492accdae4ae78c37b7ecbaa391d208bad03220725de90091ef64c5d595fb6e70d71a750644ae45eae6894a9b4eca241bbaa6ac33eb4196a7954e4aa566f1d08ed95096a73c178db741d45aaf6bb8d60dbb4158d0a6e3da380c4b02e2ea55afebdab21f727ded32862501e51398b2eb61584d023ad54d270b82ac155bec5a0cb3c1da70efcd5419134cc8a421d12e2d846a1c5386b9b1b5d70f92cdb482ad8cad0c6c055b99d735b12873b01efe864647a53287cc71edf8189509cb1c755f1821f146dd321f32bd149239e88eff32c636a9852cc956461c54e610c2bd3eef83da5c5a85296be4c3f8c59e3a542842c65a0d57e68831dea895ce2c045a94a1292833ce89e1e0c99c138b31c6d8b377e27970943842bbefa3c411566bad4d8c428875428e036e8c8e90ecc4ae6c820c2c5b5e7504285bde180cc3b09c19357dc4fbaa37675dc1bca855afe48fb4b0cf4bafa4f601d4ba2e041c426762963db3dfc7c98f7a7b1f273e4e7edc5fff813dd33eacaa7d22bde6af8e74262a3db6b0ebb185e9953caa7a457f2fbda27a3581ebd87f54fa7aaa7f5c3ed78fb462cbea950f3aa33464dec89c73d62aba90464c967c12b524ba109dfcbd334e5003377b27fe324a63c91662cb8732882d1fb7244a238c1d99d8d1280da2ad45ade2a8bf2eb2dd56102246061171341da3250ff10612398c4a3d1187bbbc90eca109376f2da6e24cbccce2ef63fca6c3bce3b10eef1168c20e6f040b3e823c374384e0420cd1851862fed932a6a0e40a66a9d90805d20e42864cdaf2aa56d5c4118cb63c2bcb0f14fa5aabf0d95a5c210a81699514020c407451450fd4f0010c20f4d0418a1db288e2054064b4e4696eaa441764f923838618f951abbe3f2e9ffa4b1f693dcc7bcacf1c7a336f6e56b56ea8e4e779d59cf315a4f1c6909cf5085a94f9bac8537523078084f8451c09c699f8997b8098801d2f55a7bf9ac8dff1395e151f2fad7b8232c688e48288d547192a0f7e59c62ca3d9351a4d32d152891a5949e48e90f1b97b970e6f3775a8c2b1c8d3f9de2ee74da5e23496a149f3d0ecd463c77e5da35b9e822b08e0739f00fe04b6473a13370fcdc6b46ab2bec99a453e80e4f0d830b8874c13c3018f9b1dbf2de510ef7ab325cf0d152d12c9d1480d281b6747a334d0d85a6733fd4dab6f36a29be52f1a99c573b3b1ef60363206c66d6798daf734fcaadc3c3754882ca367d0145d34685402f1f1827c25a412b3268c483e668de91e4509e3c809a57d1405caa6ef890ac831488e466750b1b36bd73023db761f3f80ac7c745f4520b6baaf5c3875ff018366281745099ca4f182263f3fadd3bd3bf991dfbdd33e4e5610e87efa8fee27ede364deee9ef6e9348bced067dd3dbc9d8eadd5d43974e6fa41fe16800e74d0828819c678410e8e0499c068ca11bc48d22407cd627cb99d076f13066190fbc2346118ca207bbeb0e75992884f68636fb247dd1911ba33b9e9b8cf402b6fc252beaa703669da614cdfae4db0d66a6ddcd19e7d03eb7edd729b1b68ba49de5ff7a65b306eed3a47fc040d31f2c3c7e5c642f69efa09e28d61c7e476b9e970726330ecd93c7867a6eb4cbd71f3353b3d91fc017d268bcad57c5dcd473184d0bf40ef0388057ff800423fc4c8f460604fcf9996875661b228adf8970e53d8d7ad13567b68adb5da3cde3e3769c496f29268d66c97e791c323165d051e185fbb0557d94d8f5bc3f8612cc2dca5f7f0e68779638c75c85d7b04573b0359c878e4a8703d1dde7cd9fc2670073ffb0559b88f7ac7f42b391d9abddd4e3fb27952186244c80ba60c7e1aa7f34b87dc59b87636bcedc09a2785bde9f03a0c72e3d36b3fb2693d06eb4de07559c96154126299c825e090c99216e4d1cfc00b3d467a78323067861811f282102373469e2585822e31b20f20393c9e28210f4589c99242d154a4236a13941da8ae2113146a93e93b6b427905cd1a19c473096d7ab9c894c64dc21574811ca3108268b3768c228824b656afa11d24ec0c29de903711cd1ab925dd5a885b6caad2c24be83ec0743c29d39f6be3c0f5abe751bc211f792e21b267da04e5c696094a6882b2e5af27f21714f96be822eab022e8554bb0228734da09b3a6e21b394f30234a29e5c4562e6b317cefa6c3949467c49b0a32bd966526533599e83449539438688c37e89c535f170e72bcb4ac3dd7ae5564aaf52a7201032654c0c5953386f8914095294d041511021b9468c9c77badccf9137e335992c6f813262b851b143011d413b69c3f61b252982c7902119f7d5337dd34d28942bc11a75ee96c7b6a1ebcb36a0d23046b64d44f0f2d90059a352da7f7d30653a233f45c8bae3f4ad9e94c614a9b3e8391517ae73bea271d7e3f7d0d2576dcdfe3d6e33bea84d271b2bc8884145e5336bdc90285f5d69f4d8f81e1175aa04d794c9bd8aa2d8a5d49355129b5b4524a29ad94524a29b5945a5a29a5d4524a29b594524a29a5d4524a69a594565ac113b594524aafeba295d24a29a594d201fc92262229e7c45a6c474c9d69a517bde8452f4ae975d1eba234f5b216bb2e5bed1dfabeac52c2be2fabe8bd98282646f5255546a3958c5d9b13e7a44d6fc256b286f17644be8e2f4d2396cdd4829c55e730b6926f27d3b16cec6d47ccced9f328add55a6b2dad94926084160fd6cc5df1d10d4ab69c624fc9e4c22c662f4cdecc84d9eb37ab2e6fa6fd6a9a764d26936949d3804cd9f50110a6440ea59224254bbec99a404fdca221aa24490993a9e485d8336b2e765d56959954e011b2268ba5c4aa325386adb519febcc83ae40e60e43026c91df00e1107ac9315850029230949902a40266be21a64f9fb8a240799ac396782582cd64c9a364a963f419549a4d41268c8ccc00b3c3dd86d5894d60b6fdab5b9914018db881f6dfcbcc8a104b2c01719288c40c8c00b168838114f560de00b19d042b6c89f52ce8012be410e259004923193258154aafb9bed1ac52e846e585fd337c8be2e31ec850c08b122cbfc429bcca84ceb04bd915630e44961dfd38bddfb78efc5ae9617c37e59355e4cb0dfa4c07abc5a857ad990f19461017910f95fc84110136f44f97ca9e9261d33e7b45a5efbba64a68d0a3146d1880148419cf0f10308036a7442a3f84321e2d0df080340424c451b6a23909b9474203326456a0110ab978db9f96ef61121e43026d5083912716e0db746d655af7ad56b08b7022640c10f47f0a0c4082ed0451241549070f244184c88c87470cfa8a2423a42952e90992c8d66b2e66f266b3e3e854823637f6d2cd463af1b0b16086536ddb95e7b5c9386e6304664f90a65d208a9292642e020881aaa308195cb8c232230e183192851a590721588588283156881822594243084141858d1030f3900d1aab5d6fadd20cf98c344c3a6b30a0e791ed79afdf5932565e61443bb75ca084ef92f8c4ae394f389ea4e7935d655b523662f4d2f8d5435bf103a0e37c61c5316e9a95b889f950bb2755db62e1d845bd7339d895fd1cbbdd2e9367db785f0c0a5afa494a2612fb5bf8ed969a9b5b656d575a9305956e7d4227b6d12c9a42c2491d22422e2484d8350c21739ac4295064455a80a55a12a54854ef77a393fca273e892811fda143d01ffa437f8e6f9a9c0dacb59f431107bbbdcc426d52106baa0d91656f3b4d959eb350cbe9d086ccb2eda349db6cafc6740d8a37ec2f25562ec490df3d1e25292d5d893812f4f11ec30cdd3dbd7221c7e03d3fb67cba7b3a6f3e3a0d3a59c57d31f18416d123fa8442b1d65a6b5f186244fec8202974f3e42687870f2042eecdaadbb368648eef67c7cf8813e912edc023ad1a147194ece9154bb36c4b952a4e436699ceb22ccbb24cd334cd052a18605a9425506848d84c842906605c487032a82c14e03daf8a535022382853638534d9350a82f441aa799afb794ca35d3369acab952cf7d5980e69acbe74d5e1a9ce62c9097586c6cd2067da69adbf2a11b9e764a24599b00aed7a4d49892ed12b344bfda941f48712451cfa7afa436d868835148bc8aaaf97a64fe84c0d9faf0d1b3ba43ff75e2c67ab525d4954f29c4932c7d4f4c9cc821e4193e28dfa24327d9225cbfc994153682e9943474748494a4b57e492d83af2044a515c7a618811f923856e6e7278f80022a4842ff2247a9255af67d13ca136475af5136912d10985c650555f85e4c454a04599503ed9188838548712c99639a4964011c78cc28a56188d5288366ecc8e17d33758ab62b5f728cb871289103a331faaac0ef3d55208b5914071663ec992122642a84d6c2d218937a634a209923dffcd90e30e6593fd049b1713adc8f1106ab3aacf1e5bd78d509b55d52b086037dd85fb4cc790fddea46370f223fb353d86fbd8bae075349446196aace00aa12b5ad76fa8cd919f2058e0c51148d8204a95d645430e5dd0008a2747523481a30546b4e0091eb8a08a25adeb72f381bd89f8f03ba0c87d03ca2666eb82e16e22d81a6afc6ccb41d93913d373561fb428a3c51c30dc8d9d621a6a332f758ec4616f7f8a3853b7e20d7b1a6a83355351071aa133f699da703a87ced86ff7e29c3595ca74cb626d3d84ced8e74cae284f6e06f9da71d1205f8f2debc31e887d8e3d0f7b4de630cd56f622cfdb7b64ceca45cd0e4bcc20c6143176a022074538c196441050b4408a1db060813679906362e66db0624eab6a09a9851f2ed68881100bcea021461c0ca1ab52a54807587091c3131ae8540128d39a6a43cf13e6375971d39193a02fa009628a21f8100231989481e54641841f441ea8a08c1da4800a226a70410b093227040d13340a0842184342209d218327e8d110b2b01ba0420a1294c088293df881cc9c999f32ac4a33835a2305e20a1136ddf4b7041dcca04817204863062a27c8610728c628c2470223f46085510d588ca8a8dba8f3410625108114308e5af0c418484e694059c10a6c50c416559e40a12910c307dcb31ba75863d34d338ad5eccab24c87577f5687f7d261aeba456d642b9e081290d184072e7430831a6544b162c316a5e0608b3082c812c6173d105151119501002960c00dc1c4f7bce108132c45437852449531965801018a19f4c0083f4c7e68113dc11151418d681ea3ba32720a34809008d8d1e88c30d01812e348124353cc30c28618a401849088132975028c2944f4d0440f4a4338c10a865af1565c5b734e1a7c0165dfd8d1c88b22b611183f3bbcd117598cc0306287df6034d9ac791b9a11ae144916e6aebf78509baa571188ad7afbf9032780a8218c210cd1ba01aeb462ab4a1f3e78d0998b0834376781216547233094306147232f92ec471c8a13bfe70681d8b217e242225b4e629c913fe48f8eb335657e54976451f2922c0679a2406fb07446163088967c40ad646d47a325a4a5a32520dee52d723082ed497769b65002df7c71fea13371881dca78f2030e692009dda006529019415bfc04a191c5ca0e684049e221cbd2133a9811832c4b9a90408d1f1e723863c9280834081de16697325c7450c415483ba4b172455105c115508e7045139732343a67ddd35a6b6dad71caae29d45a2bbdb9aab527546b6dadf5abd34866d2db49a9ae19982c7aaf4a4529a594462628b87faf4a35a727a508b70db0a39eaf97b5d6394f67748a58016ca98bac66cfb5eb5d551d791a6377919e6baf9eed09e26bdf1426eb0c29a5a4f13557b53a9e40eba437c1862c8fdd3ca4610a3bf29837c6061b321bcad15613264bd618e9a94e61b2e23733a2a4d7ea6531d3766f4a150353028eb3e6a2d6746b8ccc0e6d802faa1895aa25e5126342c5b4ed17cdec35e1ff970f39d572f23ed49773c7e51230ec58bd6866afc98c8c69131759ee0baa007663e42ecac9597decf2306d3aaedeb615acce93852f96e16f3a2878515b5473ac0ad70f72c56c1136e9a416bb266de3b84dc7d5d55aabbdb086d5ac66af9aa661afc758bd3499dfb4e52dab16bb260d97715db4ea7f9b4c5a7663542aacabd5ab16bb260d9791b12db2c459f69a1dd3b2d70fec1be5e4321e181817129db93d5a6b116a6e98ce79cd01a30849e58c9874528b5d93c6e1aedb74d867acb211ca8431d16a275c3bb280ecab46d6bd46f6f5287d2c96c1dbaf71d8c3a736dde3593c228d3487d29c7093420e0dcb744d17596d12b2b5cb6bdb95ed9b691a8e72729b8ef1c635615316a352dd8cb72332b5e9381b3207dd9feab3267bbc0cab0379d099e923e73b23df2064792dbb22eb5e2b23ebfeee7ba9c30f5c2ed3f15a7b69277cda74d8e3e05d447374d04b8aedde14668dddf15add5e50b7eca21086b694516c0a305a220126e56fecc28a9d636355b6add763f8edebfabd02970e85ec9e2be7a22c78124db5facae5f82f304775f7b40e4c9debbac35cfce58bbf966f186076ca7bd79d03c36f8ee3b8936ec0919dea9edfbd050cbfc7bbfcd4819dcb7366e79d4bdd7b0786427677bbb5c03d7fdfc3bcbbefa16a77dfb30e7b2e8f0347f64977c084fde950c8cef7de855fe7720f0cbda73a97777ac7e527bd03f3ee39f30333187abae7da2e9ad361cfb5611e8f7ae96056aa5fef74885f5e542a15778d5375e7bcee9caaf3384ed3348de3388ee3927497bbebba0ff4c050c8f65226a4b20e4d28a1041248888959ad60605e5e542a1797969654eafb50a8d3c9f372ee3a8edb368c35cd64ca3217179dcad8e6be7a78edfc18715cae5ae9d06eee2f8779d1a1ddf92dd8ce2add721730c61b2d3aac9b7b0ae4cea1ee3db2b20ef107c67ba0bd4e5dd7755cd7e950eeeedc33e89de67b3afcce73e76e7bf87d5d484fa52ff25b620443db003b464972656b5d9e35f743643df648a36dc0917defb15ffd21bb3e14b2c3f89eba67ce9c51920075127322c872cb16e496376049d264df2bd905d831ca0d475bd3be1e9a525db5dde52d303ba763ed04a2ee8159fe04659ffe4274c3927d7a15d0a68fd1413deb9048de30ac36f77cbbf5c03fe9f0740f0cb3a7579d6ec091cd9ddee93a59f9dde31bb05d3b81a76fcf99a77baf766b01757cbadd5af09edfe955038eecee391f73e0c8d674074cd89df64e7bd76996a6599d0e876c7cfc53d8dd9e7e6d3ce4de8ec1101fa50130828c758fed27bdb35dd33b2f3ff5d47d7ade749c2c55dd2f8f8701c3ba5b4e3716e44f9f9bce8bae93a5d2bf7ed2a18b8e93d5f23a592db985ac43b9532da40e8632ec2cdfbbe6813a74676f213cdd13b2316d21cc3fddd374a77418c3ce7ef5a03bcb3f0dd95887d77be8ce1ed6c9f232fdfd9a19f8799e0e7be8cebc7b200046907ba87713d823bd9ebab3efd03811e4150b729f2ef7e9596f9f7aa523b30e4d5b8b924469dbd8314a1224f68ea663daa7a8fd0691bf516e08daf75a06c3213b7ff5fc3875f718f06e2fdffb0a8c73c6dbeae9726341fef4ab43eda713c8c9ad01474ee0dc271dca7d3af70e443d83f81e48bbefe4e377c7cff7de1de53d879ec0b93d30c4c7cefdc423eed5e93bdef34fdef33d5d276b7bd69dce93b5e9cccde91d2dc4baa76e4ddfc7bc3330ee21d7cf2682adb1c61a57760f4d6d79d5e4621045044449a2ccb024eb4810f890e7e5d012a12d3f67d09e2f576429858045d296b2631458281105162dc0a2c9963902516c38c28ea2222645a5784509a30b9c2ded3e01ba7215d1b0028c44c3143408a19a103d29d2114388e86ae12a72882db1912dec58134bc5644d5bc54e6be58da2105061e5ac82b47454452251316be612b5b98e86867e604be80cb6e4c2b1c3982c0cb5e3dd3700454144474b48d71e5d396bb559acc8a145da18766c09b5c19ed019ec1806656338298776696361cc9a2bb3466eec16cbaca12ccc7de5a43803c34aaf7b59299385fd82f628c388b2ec1e239a3657097b8229811d615430c1a6604598140c094bc29436f6ec529bc5e8e7284868d684b6cac66c962458f60bca5b231d31848ea4cc9a896493aad826b3e6d608f9f9c442299a35564b251594417406fb054a0a1ad191da0e699fc9c2aec8a11dc26eb358347e80ec905cd263c467b2ecb456a6906c20b272462c318b54d26364d6c81f1924959820af90e2be4893853dc3966420c664b208f01314c67c064aeedb2ffed5d80f9dc1bee9b8fdd07e41bb64b3d019d33599b26b08c91353762d12b6c466b14b17b4d7c0eb16095b326b98fcd8a559638f61071244c80b43668d8dc0d5d2b45c4267301639b45936768c68d64c0c099b65d6508dfd0255e0e90c762d9cb12fdb7adbca3873af81f717786dd8982cecb32b6be5926913832487a411128a349a35314a0d53364624e50772c9c64c519098812141dad80ee5d1c69036762b31a25913e227b326cc50664da82a9a35a10dcc885923afa06287788718d1c668b0434c898df5608798d1c66ccc1a7b6a731dfba4d8953a65b4a8971845e18716f58952a0b06186960c180e3468dd8982fc351a230645b464b051a8686139b0524394960cd81439b4301d270ae1cd9ef8de98dd950bfa62cff4cd95569d01912f1d8342a8a2d8d53eb1091b5c91a22503b5325913052aab941910991a65aaf1154a7678776823ca0f963daf7979118f1355f14605af5b8315986102294bd4ab262106d1c5b02655667065e0eac7d53733ca955e823a2c96c317b6bd7c467fa4a549300375c8a3dad72b0d78f5eac7bd19b8fa91dd7493f6c9a1b79e880cb145446e7a9919e52b8bbb82775f2a6fe7a6a46951cb2773d25bb17b252633212426a5d43489492925969894524a29a5941293524a29e5764496527a12c32426a59418663169a5b4524a29a594326e0d988af6ced4176372138116bf9cff7dcfdf73ea39f59c7a76794ea9724e652f6b39e72f7f5ffe72ce39e79cfa722a95ff7d7a954aadbeeffbf7e52f7f19bcffeecda7dbf22f955d5cf25329bd727159a5f25df42a957a2ad5025e574018e44e69074c5606e5ce5fce5bd672bef9cba99caf6d786e3a324d45a13efa0f8c51f5b865d397fa322da54265aca5befb7d4fb9d4966a7f61eca2b1964fefe47f4fe9303fd57539dfa7b47bff3de79c737edcdff79cfab4efa92fe79c334dbedc7ae47fd7728afb076e4f815c7e0a8c93d5fd03ef6475c7b326eb10efee79e7a33c1d11d7ab99b28bd9abb6c8941a3f3f5b6647a335a66c2914c82273117278f7ad44ca56a88d3492b2e5b3187967c61b728ab692c38b25cf1a19f2b036cdd4823bf53d72db63df31dd3ee2dcd30720e264a7d732904887ddb44d5b0ffbcbfeba9ed90bc220779d7bda4bc68b03aa32140d2d0bb558c4a2adc7aca5966a3232ad1107fbfc1571ee77e889747bcf28eaae600561909b6a4d842c97e6757142cc1fa19f252abfd8f321b591457549e298a75ac79d73ca259943c61bf3e19c50ec4929a5b4c889685367926c371d34835bde95b594f1434a93481cf4676863c7be44b39ef79c5e924649648e1871988e938cb1e9b51463c4b9970423d25b844d352d8be20dfa54926c1fca2b4e2e3c5244ee5016c922595465cac642b7ab964b459b8655464ab950862d949d80068ba7edb49d3e3a657f9f367d5bdadfab0c49f62783d0fe4c4464d8a87f60489156306d1a8fc99a325997d2a65fc388fd1d85420529a28012d23efd8b020845bbe5dfb58b6f1256aa71f1f18136c802c51bf4684c16459dbeeccfdb5fe6237e3ae4616dd4af295b8f4f5f5550fa5ad258f24e8fdc1a4bde41bd47eeef28b026a94193a58b90c3cb3827bdb8fa335974ae70ed38599f8e993554c74c91ed8fbeb24c16459d4e2d7c47a1f4ea14370a5ca13214ea28148afbc9df29eaa6a36c7cc4197a93094f9153471d53c2aacc9aeff4d852c46901e5c6bc883844e4951de38db085efa7935eb59cc0d5e9d7f9dea25727cd026b9f7ed23293454f29f0ba02c220f7496b1daedb8eebf53158782496fd7d3dc8dfa763266b8dbc3f94bec2982cfafd032d0df106901a79d67c8fbf3faab3f6f738e9bf6b18bf78fb7b8cfbfb5adfe5a6e37b06c3b9f3af30ae2bb306a5e7bd0cbabc82deafa569135b18757a3abd352347f94163f7cc8d7a686f8122cea4626f0fa7112e602877fef7c39dbe0a519b4d87f7a443164aff98f4cfb5515a07f626d0fe6cfbcc0710aa055c61ff1e5b2ee00ad32b08b83c75175afee918beb73ca56370f2e37bcb6348dde5b175427da91617b0f581b1850263eb647ff50ffaed18886d0bded0197b0eb4ef406bef8191dad8ca5c6cd1d0199b449689992c6b635610a8c7ff518ff50a7b6c453af3837e55458e3d0f7b1afb1bfbb84120b680ea69878fd8b9ed2022459c3981a220e2284a2965d6ace62338c4c86449a42bf26788111f1289883c77906c5d070ac1025ad783640b7bbeb4cf91968f931f98f6910189278a58f9b039a04115adeb39f387113a23b58f217426890c44fb98ac2f493e8d4a87f9027da64d4c12b720811656221731486a41941f76a005522b464c6346b22598110aa535925a9acc9ccca0d492213a41831bc6c0b468c9f015d1a23a4e1462941c4e40d48a56083959d2d22aa660dc01942b9eb4240f326812d49a200d122dcd62f10a2e7410d49a608c0d2d19a69443c423e4f0aa589f0cce31c7e1d2c4fa919127d675d3486fd0a6c7efb084e866f72ed1562ef8c82f9eb44ccfde23f70456f206b8d2f231c09596f6ec7247192d9f95552630c6191d96366bc7283a2cb1b5e89363941d82768ca243967d63c7283ae8b0e7bd88ed7befbd3fb263bcf1318a0e2288489132d1e69d35e1f578451b58156f9451d638a568b127c7283884c105e5b8431bdb5eee180507ab6132468c670d78b13b7314e9a9750786bbe5d50316919f262ff25f22ce4a673e7b11d37f79fb986fd6ec98b28a8488c39d880c962322f73481dbdf1ab88012f67c09256c6d16ad413106e5cfd640b9c436812b1d05ec790528606b11d375d74d23036dea9df869bae918c7ddaccbb409e4e1bad8633eea9df95b4d971adbb18f3bc31bdf0dbc97b760dcdcd53c3d7bee10e1f48a05c943f77cdc6a0e55d36196bf8e995ef54e7c7d7dcebcaedff94ccf603403e5be369d9937ec02c399bdfe7aa4a7b7dfeab314a2cfa12609ce9bc090a767471a66dcc27c7cfcd643dbabaa75a66a8743262c5abcae9b640efceb9a263718f6ec3bb9d7aa735d3b07eeb8b4bdf6c2b63abc8f72d70b6e4b57b8c7ae83f544cc2471d47b7b250e9d6c476675ec0e7bccf6ec3a8f653501cd50aae5bbea2e2b0fcc19f738bde380dcf81db7c27a5504757c9d2b711c833a1ca7b1d6c1e7f0b938591a18e2f99d9bddbdd7d3bb0eeb15f793c6cf3b9c5e15d17eba4e9438429f9d1f258ed3a3763a9d4ea00e77d43570077714777ac627303c9df4f74eef7ce7f40e0f3e691ebc3f179816179796969696eed4b578a7ae4ba552a9aeebbaae1bf22eb7e7755d0cc65d0eedec4f9e77bd5fcf93db0eb975a8e769ae03e9b62a827abeced73dff034fd732a8f33d1f05ee78d6d9918ff1dc9d0edddcbd5511efdd75aec4b1fda4a3c4117e3aa777f7c01d275d379d6e47f77cadcb1a4fd676737c4ee2120a9a3516fba5ef155e42990e3d700503af249365af0e28ed309ee712ea0105a796b73cf50fbf3bc6208c0bfd8d15d3df5831ccb30e313e87ef69ce3b0c186a8f7ff98641ef05dfc330ef8ef16aeba1ddeb36ade3758fdb0357767ea8bd1cc67bb9a7775ebee91d97833cf985d32e8f57b9b4a4724665fc8eeb5026930977dde9743ae59c73ce28c8b22ccbb22ccb3aec096d7c9a65d92514b44d4bf625d41179e0ca257409e12a6e2f6bbf7b6796b305c2f3fd0a937bb34c75d47618efdd3d6f83c10430fc36c779cfcff7ce7d6fd19ef2c0efebbc9067e777f77ed252da3fbda33da577b6773c1fcfb7356e7b3c0c6a7bc12a140a638cb18b8b8b0b936f7fa9bcb9e7bc4a7dc5f3ddef7edcdddbc36f7f1fcfb74509ebc3da03a3b7462e2973608213beea289896afebe17dfb764f6fb905e396ec7de3de797af3f1d91dc6f8c330a8ef84429d4ea7d3c9043d7454723bc2b8a66767186369d7eeed0b26399958926526130c26743f9d7a78f0bd3d3d3c98072fc9b22ccbb22ccb3c149765d8083672d5e46c806d2e86f5c0ea9ce9e1c13d3cf89af24a09b2cc645a692fdb3b8d07a356dab63a6aa5f5a07a503d3d3d2b8d07af5647e99d171ecc83f70aeb9007b7bca8522e2d2da9542a95fabeef2b41966559966559867b7687426519c61b7b1863aceac134988c9a853c1bcbb2ec73db61fad5a6df9007c836e9107bd4b6532cc3dfc03a677a68bf261de69df17c94872b5182b14c759309e6302f6f59a1de1df57c0d05ba3c83de4cddfbdc7a7447a19ec1f0db397fcfd73ed07b0a945b931f885ae18402bfbb8021eaf129f0fb9e5fbfef9ccbbd0f057aa9a3c04e7340eed4e3eeeeeda434119d3859a8775f617b200aa5439eed3da543d4d7dd45036004f9ab5b8fed9fded99ed23bdcbfa3409eafd33cdfde6078becdb57c1c0cfef54f872f2d2d9ea74dd8c3df73e7fd7bc6debf2edfcb2a954a95f173cef91ad823b349495ec98dbaa7b95f9b0ef62eefe11d8cca1eb7940e8fecd43b30fc76b7bf53de60ce312e2e3a6cf9f7d3697b17ff81f62da86f4f7dd24d07f54ccfadc7679cd863ce4481f31a0aec50dd33f8fd04a6be4de7f4fcef393305ce8cda7ebba3c0b935bae9c4c9dae17d93c57d6e3a596673eff40e0e37cdf36dacb3bc4d60dc19eb86e7e321df2cbb43327a4d43f65587d43c87a0d1e15ed4b3ef99cb5d60def2d40b8731d8a9543132ab775b3ec71d63bc699d93f634f7eed8fb0ae61a077a30cf99d9c3dbf339301cb2b9dbad05fcced32bed5987ab1ea77b8f7b48b8d2b44eb7876cce837906c3fc2deb9ebabd7730f7f40ecc35bda3eaa93bbf03434ef7d40da3b1eaf12f2995cbd7924a7ddf87afe10fe30f63140a85c218638c75e03a301c6243c24f5d784900e39cc1c7787bc779186330cc1b7b18ff6562336476bd76310c6f0c8b188865ecea116463b7f51a766134665fbf3a545d33d7e3d623088f4c101e19282ef4a23ddb548739febee27e7a77ed04b6bc03bd9cffb9dc6bb977ea913aeaa7776028b3bbdce52e77f9e177a7572d5a27a5515dbe0b189eb2eaa8ac7aceccdcbb9607d9f9766ba1bbf71be6d349af52e774b8ea81fae97107095729ad83f27690edfd94552daa67bda37ae6910939cd23b355faf12b9cbf4dfbf5ac43188cbb4ed3b44ef3384fe3bc97979797ee9ee7799e27942f777ed75dbeeb7246e9f048281364734f81df9de7d24d96177ebb53792a1de6dd4d568b4e815e4b8b0ebfc78071ce743a8ce740fb0f0c7964763e3e2ae7ccf5c839e7938c4e97b38e0c8f4c3c0ac223b361902fb30341b5e0bdbdbc2aa67da6cf945270c832979bc2bb5ffef2a8fab7d2f2350d4c3d831dc75dfce1773a2452370c24ec9677b75b0fee5aea5a4a37e0c86ed1debd6fcff7bcc79f9ed21ec0e9cc5d03edd6425e35e0c8dedee9f01c078e6c4f77c084bde9eedcb96ba1b77160c871ba3b7dd33ba7a7f40eccb9e74c0fec0935dd33f769ae3e0ee605f5eb9c0e55dfd775da84ba0965ea502613a79932ca643275cf9aa97331691713e862e2de75a6ae33fd7af76bea4c261c34fed42b9d735c36f176847be6b6e3cf4d0791b9bb6cd3e1dcdbbf73600643233ba7dee23d05ce1d72809e8e3ac77120fe66ff9d7efab613f6cc2bcbc06ddbce81de3348b97b3a876610db629c2c7c4ed7c9c2daa5ce62be3e68ec1eb989113321fbbaf7bff3c6a8e9eca2d74ca529a8244c98499b54325534102000007315000020140a0744429158304f4455d40114800e81a0446c52170a845190c328ca20440c31c000020880998191a1d14800ae141543ad76a77509b981a8027fa09710933732079c786e4930c011557e32d0c9ff2dd189e770efcdd88f9796a379ba9ee97e591168ffbf6460b6b42539c70be70462e9dd18016f8cb64a406dba851c1261a9377d41f508535f379626462e85a5ae39c55f907179b1c3700969b8ff73beed2b637508c5096493074d648d66a4fa77879b898b8d7a558d8fd0d5e74850d19efbdabdab5dbac0efa3c1de56003b0c45f7cd70881114d5079b25885888fd91f39d72e31048b506110c40441bef621c42c539a4952e95d04cd24eed8662c877eea98088c741dd15b53c9efa2ccceeaf30daeb301083adf522b62d802c38ff222331faec4c3a6f679740821508d9c4f5a044593d9d7120fbe2dc277a1e96b24f6d1e5667ba2120d969fd2022c62d55d49136278c984263c6f3ccbee076accf0e944af87c6356c0c0f5335ff0b8dbd94b59c6b7f24fa0e7c1e8bc048edba081657967ceddc2f0855b5421f8956972e3a904751cb47cc1d4f049d234a1c625c096e0ae7c4be202005c8c0d2f95ac41ccfef06d07dad5fddee8cb67b67a7e35852dea7922851e93f9dafd8a91d9fb99f0d8bdeefec431f4f46972311d6a5af5001707282750662a4ca880eb783c5199a37dbc3b5f8d5220e306bc48f1a49b1e7b142604f92b701814a2992a655f27c920ea4c507c94d49a818d64eb163ce428b91ed74afc37da51512a6dfe16f0f997844830b6c69521edd4d037bbbb20b0afe5cf15fa9f1f334098804aaff9135dbcebbf7af86f7c859d7cd3cafd4c1fca48342bbde344858c460ce909ced6e44ed771378213b3a3525b4ea655f3f4dfafa4a8cdab30f6bd5cb55b7a696aa6eed843132d83b1f4d8da3c8b0773da00ead096bf29ed848ab000797ed1961946a5bac1f0f6414f8a1d285e2efc6867f8577569b1ac8f6d8c03c835dc17bdbdb9d96b89a80379bfff32215a9b4006f4e67769fe3b884b7063b0ae378784bb3474d2871dd0354a46a5ed72b778a3f910153370b4a971d6cda436c37038ebe30c9fffcdc7910f76c0afb0c8bfd7df230db8c306367032069dcff30a5e001a7fc8c69fe7fe0db109934107c0f8d2ac5f6ddaeb2b096c9c319b1ecd066bb9a985da54c85997a3c525846ed37459e652613c2a478b431e2dd010a47182d3daa58a74a197870158b2d283e924f80bdfcd949f722dd3433f1c0df71b596246312bbfc29670482f6f843ded5c5ed31426e6e682e4f97d960401f67e824579dae4434bd8268acc365d6df709ca6b5fcae5d395ad88272e94f5b9026dcce0b404dc886be992a2f4ae95da66359a721b4f09600120293865f4a47b056b50d77379013417b1758e3a1a7670c096256289f510b624e52e004ec8c9c1bee309f3ec27bd07ab0b7ede29fc241fd86773df5fef0b5cc9f8445e1ffb9b99dd910c0c0a57a6ee9f0624125e990bea6ec25e594eaf60cb37f3da467ac51b4614b9dace89f7c6c897d4c8a5013864974d0d83b1afab531679e9d9de756dce11dbb123a60263c82bbbd261d5e7602162bd64b3453e56c37c24963647c8fdaca18349b5bdbad06d2f1801d14e9730d601e131fef9cf83ff3544a0acaa9e0021ea3ff94d198b7e8d7b5f48cb23e12b0ea145f72146b3153bbb0cee5478ab395371ac117865c3862cacb18321f67603a48d33aa52735126cc84749ef0dfe80fb19f66d84f9d077f1e00837aea65594098fb89adcc31b6cdac7103f06ef5f3372836e77400c6925cfe544a455cd113cf54dddc4b720711692b1f17750915dea400d9f96707c9729623f8a524c8fe1c49d0a5cbe97c32010836dd886ef0108902334c84fbbc1bfc37f30fd57e1605cebdac8b402cecefcae4769bb33c9bb8bef5b2ea2a6d8b4028de936c92520bbd4a1e1e29501afb1266ee241b4f08bf769970fc0f12bdbbf4d1ab13f22623d38d0f26877462eb5072175ac4c95d333ebad50ec8c3a1bfbd9149bb0372fad4a66d82bd3770d86dfa16240fb3f700b33c474c2545a4ccb2014a4c91d3be5f478d45f22485a32259d49379105fc6aacf4699ca13e5f4780bdef435b5002ff1267a3223cc9a3a1dfcc02926486b5e82ed29acd9d1f5eb85b93e1fb6bc425cbeca46b482c82f7356e2ebfe1844e546b191008d80d52549e0976d2f1df430bd4d680ff4c5ea50c53eab219871b999bbdc26f9838b18f94a4fe7431c1c435d35dde986c18262387ee844014cb4f51171240cfe8783ee5f2b6685c4df2d63bc34446a349a383a3c62c5a0584984c6594dc944af43c107e511c191256a55917df8413891dba855c1fa3a272e84c90014418e5ed0379fade4ab704d732df65ee82d6a6a9b9fd0f422078712adc5e710a4fa37b6b18d51977769a609441854507d34c55ff5c27c1887d774a31f7949182b25341b0398bc20096907f682a479f89942b3e55167729029d25092b4fb90538e84352fb808c4a95080fc8b09b7b10dd47a26ddf7112230011ec100c3c31b8752c01ee365260c968d118944491d4203761e7771e565f5b0a80fe5a47acfe4e167832a4551b66b8f0ca5a7f3c1d9ba621858085dd600661acdeae55f45f4791684e1a9a21e22573a0a52eb6a659441be76f18eb8a86bd8ba8ab14e129a193d7265d4e3be55292a7d026f4503065993fbb97020da5d9af61135e0202bb6d0560464fd634004869a8cf27023f282e28be88cb2ef58094eeeb38becaecf99fecbf96e87e4690e0c1a9783ac7b8f4a0706ab5cfd20a6085d96c705f977ca1fc2ec336a849919dcf52827ffdcc57cdbad837ddbd69dcb6420551c38dc1c5a01cbd19333b4b0f4ac9df296c998bfcea4c06e26fa6a19140b6d80492a0574eb6c7ddff64a2708068ec519fe6abb10e96de8e2b699f80364ec62524d20db3119659f39186c31fd651642d4797f0a6f3038f344c7be81e0789cddac344f8ed7fa823a565e88f4b5c5e51cfda58e53fc2614a62c291f642a5f2df6c13226b31ebf9a13eedcef2d1da76c73813c00d9031ce5ae19855ad5a5fe50454d87818c84387cb279e9bc41c0c85a6cc85970290868cddd20186a06e3987f3e32acde4486e204de7cac95ec8ca70c0d9f05aa2f92e725e214e7572bf586e71b4267fd0038eb68c209fa7d6503932e0ca67ef39f753dcbf047e54ec80b1a00075e7effc14d38ea94c4ca67619799f0c33a0b7e650458fb2504cf35b154e8e3d3f72a45f5f79bf6df077fb7a1abd194b3125a568392243284003f052c7344b948d28f1b1cba594625e61c58d506354f7190e60a636958b06cdb3ad016d685067e7165a04d1d4e6c40f9f5fbb37f1594c6209c2982e5c95ca584cc933d0100047e79dcbe28f2a8554624d9e7fd40e19a0edaaf0c19f1834e5f90469749da91848d07c98cb1b710a2b12f51a929434c0c9ac4e51c7c3cd8e825b910beace3012655a53ba8a50ccce63b60471c50d5f9a0628e852d08d88552df2889dc37c0dc6e3e60290471e3f9a03921a35c784e85dfb34f948a9d417ae4f160a584990ed9a21c7b9ff9e03fb3a151460e0cac82024236a960bd71a2646e0dcbc4e6dbd98ba00abca871e580b88468724b85fc983da1d8e06920304b609962578769ccbcf0c43e930314527d1aed60bb388f1e503f139250b1d9fed3eccf2c788e67c80e4a9185c65f41108bf6fffb6fe6584b96f72aadecc8448d0b77f7a33d74a3e8c56aac1535c6b28d24625ce0238125fee3ea10bf36626eb7822d7b278424d1ed9d56fd8de47aef3436d83a664e22802b1cef046a29e8013384b2dda44960a5136fbc9a1b73fe008e859ee318191830cdec1c897511475fd4b6bbeefdc0f8e333b207d6f50313b21220f0fce4886e7bc1748a0b61673dc1729af90b53b61067bf9d71849b66cced169cd5f71abdc51a411fa39b77bd32e0347333996632bb925293b1e0b24fa1addb05529db744e9186512d3eda651455247163714e8c07e7fe74350bc68e369deeb5f9945d1acef3cab5836550df47f486681bb8e1f1c84f8d4162f902e533c7e8cc7418494ce5f51ca0ecfd376b683e0ab73724fa91d45dbf1dad27d7c6896cb5849a0f39973e8a2ed392511b6d83eb97d14c8c6ad6d07b76caab5839a86050b8ea6a200d40fc31e022375cea7c68e5d0d74ab2f0c85d67aa3560bc8b4e8c161b6e9969a7952fedf4c51927c02bcf489d53f5a6cb89d514313a9e53835c03cb6f357dda94988e9c656c62a0dc24f9f178f5de5239df6dbc07dc6015c91f3a9216dead4b5efd1ce7979195bf8f9fbea59fa03be092cc212e13cb4cd9a26308c1232c3d777eb315105b13cee11a738bb9ad4b7f3670835046b04ad4ae7e7c90c815db7c1d5ffcea722093c5343df9a5e3afe3fa20717f0f035d9a117933b8849696e1f6ed570e3acf9c1dfbf1ae26fd4b30836afc705eb1066e8300f027a058c10b84c1c34f22f9901c32c07097dca9874cae7e2258b10c1631051a7cc1a36873b1d04165c1222d545057615abccd2140a4f54e2bcbd49c8eee76172fb7a1a3519baab36fc7b6d059942a1b8b152cc8a07a5641fc57813e6472e1a927c3bbc8ff60ede410591117b2e57aa1dc3abf122712520a9a87ff22d1ac0527cc9f7f2d9dd88f45327bc12ae552c04683ec4ad169c448d11500d40524243552e966185a4656c36dca708b799309004f8c66de97aad4ac6222a461756d230740fc8f93bc6b955390735588095cb45e793dcf886802be8059e2fac11c48ee4f068e35129fea3f0b7dd3afad999f3f612a3763e4ea613c32c0068aab00cf44c31aec1d8f2fe3ce41ace9cf2597263c363ed13f91e672d204eea9d3fbceec43e95e0ef080a009c770e7ae21e6bf414f23e67430fb4482541e844ad9ded44ba4eecb91ae1332a39d36f0c9f5514f4734904dadedce0a89f18fcbbda1ea1f2a9c143f6277f879e3e2762b69288d2c62a351b1a740cd1e62503552d897d1474e05611e6f27b2935ad78a2b52693badfd40f9edb1ee2de786450869d44c8f7d0d4e2d5522ad2a26dc028f5cdcd003acdb1a4bad6e01ae7ad4e262e0833a2e3210e5cac9c0607d25c09699460d57f63bae3f97012dc509415bd01f4c49236600863e371603031cf069a8f71eb788ba57b6198787b08ba3a529d0ea2ecad2b2a256ccf88170e59e019a6d32f385912c892aa2f09cc853995fa865f4878775ed469231073983cd716d86528e9fe3656d93a36a74d26ac428c9891904c5118a77989bc5e4702b30eb8c4ed1c8e0a481847ca8e1388800ef76667764cc1256208a2d58384fa399dfc41514dd7effe1fc403b353334b454824d9efd5f3ea399461fe47b5ee27ab5611009b85f5accedc40855cd1e71de837f2d77c0ceb156de3d9ed1d88fbb8f3caa8bc38dd855b738f4fd47a5e385c410573fe38c46dd9648791dea6dc053e887c393253b4e0219f28e017502464a0bcc10f7af123ad6e10316cefdba4c7281588dd3e54982b450fd910aa49a408b01e751ddaef0e0d9f4468137195caeef162fb5c9795f448014395cd230c8e270f0cfdc6712b55c3647d07e2fefdf859577474ff814c4129784d5a1cfa5434f23d8a3679c4f4299eca5c413dd1caa643aee3133a755078e2b23d15be98fd5684419688b5a0dbc57a28acb45485c15458074a70c0fdfb573ac79ac989c943cd8bb4396e2c4257f98c0a0c2c65ae905e0657324a87ff92926c8d4e4eed00969831a18c64af0d395ab52b19138036f87242e5448c03129b98c9a3cd59b3e7b67658f2fa1642e5a2bbbcf8002cb219167c8acbf3b07e7dafab5ec74f499e66795e305a00c6c11debbdd075ac69e177428f2188946fd9a124eda5c32d8313002fa33a65c5f66209fc8c783fc1b6cb7bacd7cfbc8f8691baeb1c9fcf4efa5f04c0279ace67c786b30825d62626419117902160472c6dd2ba90f60e5c42c1a019da4469f29d035f89650884fc5965130c8d65968bfed35e084b7b0000e9837e9adf008eb7aeb0a36eeb527b68ffaa1b50c5dae37723af9e3a864ce33abaa72f7cb44b9225bc0a06dde8e92a2970b76e85d06d05104cf69ed3d5bd7dff92566dfe5b637799090ffc93843b3539c2e70e49343a05e6ce3fe1baea015aa21959eac0f976d45290bd74900030e56f134b5dea411d145da38e245b58828e769d45c4a53bb5dfcd0274492508a11e2380c964522555f94813a6c90f86e91d0f466862f8a137979e6d8a2642166d4c338bd0e14ebd38856e425fe86cc8029e0501426e7374262b2a05d3218bdf12d1b5eeb4ab643fc8ef1056ac85b805e37769d946a760632b5c367b8453e0e53f946b9ec00711c239c47e909a8f8fe0b61d8f665aefb6e3910ffb97903c5fc35b3b1e105815691149c06990ce5288854a45bc443bc27bf7766894dee4b68374be596bb0193ce6b32ad9139483c8f598df70ff814f90f59a646dc0ef7c86dfadbdbced00875d20a8abb9b40d5cd40f95706e4712d0a7d20d19484e4084001a22c260e388426a4967852e723b048c4cc18534433d5d892a0c015cd751a486e345563749a933512efa173ecad945f160b6d573aeac9ec256f11e0e21ef7dd3ff4713e2897b51334de7ae27c9754498bdad5b250682f60f271c26e06bff21c951d5732e384ea4474dbd1c7f2f267b49e212fafe0b71edb9b1af1161a3b660d1a4e1499751cfa59b9772d9a3598777dcee5f3243545b4ddc585f4aa8d6887c4024f4b2a4fdb28a3e7300b0bce9294e44c5faa0e21f797292406d7b8bc8e7e2cd7ef6e15157ac0a1e1f2ad3901e7548c805ae988430e4a0c7ae7426c89e0d627978926e9df1c04d7e0df81cc0ed442887aff3d1bed1fc14fae1a095e94ab0f111ed63142d2517e3704ac4ec3887f549018d32a743db2cdb12d65ad7e11a982691ad44cae54a90073c51904c446d9f6d457d4d4d59b438e32c615091e81fd9edf6bf94e73658b581c85ebe61716f31f161dc349a984ea5b2a04974e5a998dc49fb99671b97eaa50ea1ba362e51e24aeb812f25107b83aed6de20792c36bcb6f59acf886bd7b9fd5e593e137cabd1958b5e54ad640ec80f62cc0d55faa3aa6ad0fa78e8e9fdc28bf64573ea7da06be8c6a54dc4c3a30a9296f63accd3090cabd4f35600f2640ec2793ce17e2dc7fdc2cb229aeedd0d22891f0af1f4276c87e26384ed2a7c54a85dcb4710d875e938013b971e2774c7826384ef2a7444e8dd654714dc45e978013b95e42ffe33f97f0b99e730207d558056e19a2433d842729b84daedffe96e30449024988648e8ee7ba049417d9445ef65e4187316b6b32e42b8acde9b4776fb53d3a860049e8287a0039c5a760e307c0b1da3ffdae095dfadb2b705e304bd050ef831f0671d892fd6b76dd47bfc83810fa04d8f092227f39ef035c17aae5994e24190bf70930593d005264d50f8ae63d096d82405243bbfc3ef3c8170def85db6aff4c1d6ae412b6bef2dae56981fcfd7c00e529117d2c27dd095792f9cc2b04770d6cc8418ced5768cc4e7cc41cf0dadd5f2d0f22a9f29a996680721608ed46efa7473f5851616064b0d2e112d5c4303e2d3153158e9c0f65e733534c362871514a622f46ba05b3d051562929b645918ab985129b1b4519fe082e648a7c4a29893c117c45267e045168a49cd58ba26311468ed62129d5443044bbac11a17afa924d904b96b0075fe20871547f20c48d4e479282716f8ce2be996ee2b0b751f46056acd770ed6007eac1de88d0ab3e876f622f58c5effe3e1daa36a52da21bab543f7ab0ce75298a77bac7ea3ce5ba3ed01fe233b37c85a3f6dad87454a41752bb4a97c1e624f8aea84df674ba2b7baedbd3ac4f86fde95039a4243cef1319a1c2b039b433715a8afc8e3649809ef8244c3a59cb7315a00b53762ba0342cb3c79cb24ea58abafd4c62005794c3d3f3ad50b1f6561be5809c1cd9473093865c5c7f35ea486e8a431bc372656066f12478fdf10a309eac0cba6c53863d1c45ccd952180c54b5d57efd20ac590af32fc7a19dd93205ed173803e571d60046ab3f7d8b056a455659a4bce0aacd5d300437fad15d4f3190aa8cb3a45a353426d3e803b155b588752383eaafe259a1c64f4b60d92787ee516e4aa25f99ad8667fd98540e1b79efc8509a98025091eb1b71e08d91aa2e18f53591072ca657600a712eb3cba2c4399bb7b5bdca0f520fcdf938ab3dc61b43cd9ddd5bf411c77122d3cf07cbe6b5e2260a63364d69afee70ec64f6b1a50100d6dd9aab77b4d861c31b2ddf44b0d34dc3be45b27f0d5f4bb21345bd3856d28701c54d9c11f550c727df124fc1524fd2c25d9210dd6db5c77522c10121a1d55a150cd1d6e18fe294b6aa3671f1d8816861c3876d8445b0d51d67de1075bd6a9212859a6eeabe9253acd8ec43058b00bc330725c475028553d55c4861e73af6b0827231a19a007904bae6f452f7c579ed2eefad8501b881b944b7893e2a174bd8d8e16ff57cb0bcec09f7ad546d1bf2f87261f9c2942ba1b901417996887b7a38d84d8c4d84a533351eaa74471acf1894804cadc85a29db7e11b7b2c27073478c845b92f7d6db825e453491e65807c9c06da31f930433c994d9e2d2246af84d52353f91107398d7524c4defccdd21d9e2c61557e42286d668980c070cba2c3935351944a841b96e0bba1c42ac31aefba82f5b73aba03f538480f7e20ff8e3732ebbc086dbc2199c8b4ac071fa8d245215dab486a35f37dedee2e788b55fb3064a7380b0a59d27e444b93820548d25f1a26289106e9efe9e902a04086f82cf85e02a0cabc3ac83731674741e2f26edfc935e7f6a099d266835545b943f9994079c00325ad03a9cbf79f5f998fea73d6df67d10725103165175957b53487229e2773ab9be5d114d9ed74cd232c890d1d192fd02ad276285d3867799c86c2cd11a3fb1ee83482c62b9545300cf80c6a7492b04718a64cc4654caf00e582bf8a44ffce05e43470359f2f8ce84b910a23d6f0a5e7d215c458285b4ae76e2ed515343a793b0a425985a3a3d546854e908dfea84bddbdb40b62945fab2cdc38aa3972906be3a697524f3c6d80e7f225e289442efeddc5142a0e7893373b99178f9ed45aa075206d175a5bae4768a24edcb6eb76cda97eb8ae9b8f33ecd3858a4932dcc74cc3f1c1070c15006382443cf442af5c970fb7dc371193030d3d6fe485bee4c06740f959710d82cdcafc99775758826b6f7aab357d26f6f09eb4702be7b095256a65375a39c30f66e573d2afca25d930fc2a9198bf6f22d1397ab1117740521c02a393d7cde4b981a8506c5dc26682f6ba3dfd713cdde311a8044b183bff958972427997e5c3f5730569a21b89b10c34656f40714c1daf268f1e13749cb20de9ef164e5b0b98dc17c4d2c86eb0ae1b8a9d8910539c1fa88ba8f653e4c304400f3f57387b2460fb79fe75ebf29a0830eb59565238728bc32ff6df41a74b3ab9422b330ca58512ea794c6fc151b3f072e681dd23e0ade9118fac3071f7d7d1eb35ca0b0da9d725d63abc1bbb57da17b97d77dc453b3b6865c729a984a7c34b95d2f9f4a1ed9e5c002fa331303c346025d66b8c9ab8a64c2c1bf7dbed3ed03dca0311db485a28bdf10fb47b7572c3a738d78b91bfcae9bce1855e387c209865b46d4abe04fbe94d847a179658f5b9b2b4abeb9d39af776a63d5295975debd277e9331ec2e2f6f7414dbcbe7f08af0dc39cd91224b22837303cc27e29297ad4e64ce371307ed44b21417b0de6d4e98b20c7e7d9520fe934f62ff5ade2fc09cbe33aefda0f62d31b725db7636a4727b8ea9674fd59677e5808c954b1cf1e07f88a9ba85dc82363fe21ae6d09016c9fac395c969ad8675ebb9f7e14e8affdee7dc8e0e960fe8e18165d11dc0f11b6a607594f84afcd45c6ebfc408ca28bc9048c9f4a94c11709e0f2b6d50f96b9d0be60410dd7e3451f94ab41e818986c81c4412a305a289723e8ce02f2b1308ff09f7feb978f4b509e1898990c7e62c650145baa1293c8749b842544ce272dab3706b3731cd4a28df382e8fd72b5ab470a4eb39e38bf56f643aa5e63cbad6b2625aa44ec9edf031ba1191c9d0e44b0914300e98863159bc19ea0e53aaf7cd98c285650df953ffc02113c58f1133bb26c2c23e3ca58e89abd054512a8026319870be843f4857da3ca800d764642d638aae16efcac2cc71c68d9c1fd6d6a3ac5abd231d57bafaf372fa264a6ae251f0825a150a7c600e1c6386050d571277017125dde7641a7af2ca9bac601b4774bfedf4b2221f6401b44218b749f997dccc31bc66829568dd22db0e42c74cf0bc4f00caaeba13d0f6eff068830c5aa17949264a7279fb100f2b2889b61bc35590833e69272b5db09cbc8e9f09a698189bf52e117bbd74ba1a005744f48036e943ad194e10eb51b65911de10161bfaad4ca33218786f94be426cc9eb7819a673e9fd3326171ed459c6cfc34399db84af1b6b7552694855a66243e1e2ff84952fd1b2a961a15b8a9685492c7970e20a628951d1a08f3b0611ccab425e47faac5d82ffa41b5eaddf57b5498d4771524729aff9b6a63acc67694259658e7161f3c9b08a851b5349b3ed4b82be454aecdefcf6f9354cbd76bf4298b56b4aa8b9c5b256f468aace89a5b86030ecccce04a93f44b22458b319626e1191ba39c27b47314e0cbc32d84b14e370437e0ab15bf20483a24b0a5601bb55f2d6521c88077be08c43b17e0d471770a254249443a841e57f50acc975cb3f713dc0026db32f06d4fcd5a437a888c12b46613cf13ea7bf577d6b3b2765a9eb388f6cc40294eea6f363c3d3d17d44868c18c4515b131561f3d5cd1ed78fa0b4d7271aab7b1d7c2666d5fd417fc04ccf04f59622cfe59af0be1d168875e7033227c45b9d1905486c23cf045e85a77fe0bb709b9175f1d925b85687e1e7f34670b9ed7df890f7459eb54f94c7b4ecafcf137de2ddbbf4b3b42c1dc7234b12b909766f529f924037b0e68ae1ccacea52ea0b924731407a73fbc8d0a80ffa18b697177e6d793f50c0ed926f38f85593a495230add0f240f1024d04d84709420685c9cdb9bc40ac9eda8f66c2464bcd49d0cd52a860c9a8a110072237a90c1db2258c64b4cf3066fcea15e190d7b2d7596a28c9846472e51b881cdc9b838927abec86c488432167f6c86bc671a48104f95e7b90832b6fa97a45d133112e93dbad3a7d8eed0210377073e8a0ff21cabed5e8094233652a817b0637254bb461fa49efb92500163e2962415f491ca9716f851bd063a9d3e3ad4a8560b34cd772ce9e15526d68afcf47a40d7d9ea1ff3baf26ed4bc995996ae2f035a23c3eadda40df2f544ead4c1d310bab3657228d3b4d1a6334fa72f3bf478cc1ee56d5f549ba82c7446149a29a2ed3b8dda4f00e25060cc4709d870dc1551420541ead7395e8e478ef515dc46f6565f9c2884a0e133e79a8d3e3e369a33d98ee59c384ce508d7515c57f02f7087fe18a14ddd2e542e43e9980adac1cd82bed10859280eadd1467d06f639d966d094c2018259d6563335f4cb98cc31903b841b99fc33ffe4ef82105bc965a6ee1321d4c96aa220f2e1a9b3f4f5d44ae734e90a60eedd26e4144e8789d3877686f5f5dbebd031195b2dd00e8307ef037ba6040c9770c7805122c80ab8ab1ab286214e766dc930ea5200cff964e0d9b4d985467e3a26f5079490842b2c4721739fd01d9dd055ef43f2cece79b60038fa5ab4b721eb00b36064441e2602acfb00b5e442f55d61ae509ac2fb0cd9e3992d7f2b17c4000928a68c4531257231e85014d206356458bf128a225a268d7be5330187f0e5f32c7bd53a8972a2587fdf8b5e6d4191d90e14bfa1105b7946cc5811f89329e02fa6c4129ae47372566768018c7f525d6a4a7b177553de8cdf648c17b0173212c9c9740df91b72b4ba86ee7ef200b13403ab8adfdad3cbc79e9105a442a4d69f80734089544b9a3c02264313e74beb45fcb6a09aaa2419b5d555cbd2f0c9da7cc3d09b85c9b8c420bba1fa4d10f1d9285389846806a9b3928ae088bcd32b739c80ae11e5198456177909fe7331f74eb4c9fb54dc84578a0f6025d02b317ff59f0283f94b1dff8d6d1c48e42d8596934b75ca5a2058aea9cddde41eff27434deb25a70e19cbdaf7aa3198b810bd5af793bb0785d1a07d1efc9730783b9d43ed99e419cd62ed4001b702ac11d7b9ff24eee20fa225ae22d121cc5bb543047cdd83c041849ab285ce2dc962f59ba48375fdf86efc66bdce3c0c16b614faff1875d3507449641ce73282a8a86aeef2f8c2a8d74c1844e4cb25f0b9c7023425c087788e74908cdbb2a86f5d710ef290a46e39283c46b211596dc5a43943226596aca6e24fc8d5bdafd97f9abe9e8c55b3b6cbb66d42418622e29acc28629d65aabc006ea47249b0fd49dcb597dff671531175e157761546022d060c676730edc5411de645612cb38b9f231cf2154afd87a427e78b8b9b94623494ff0dc735eda0a110249404a00a5a42eda254025b8a8aafc6cc18f801c7d4c96d76c1873beae222608987c520bc7328b68c60f43f0682cbe6ccf0496df9324a73015d55218198716509d611c25768c45de25a6b39857a40cbf63ca483c290e0f4d8f5d6b0a268806afb3ad3ec23ea6eeab8e012fe9ec644067fd38eabacf3754be6766c75acdee70534b07fc5c85179448cd782336870941dddcd8b9980cbb1600220338109d4bf1641f5fa912295a61635dc909018615efd07f04b9fc49e70132d76f0b692569a08fc04117904995680f19a83bbe15ee4a1033810052ef0dd630cc054d6c74f40d36f92358d750594c9caf7a3bdfcd76955cbf77a05853538b44d858ca3028700e68e903dc589dc8603c885cb78c82f27c41f80dca52e99bef779b477da2b59c91269414758e69d53c582606059b0df2966d0c700dd16d27904739c3fb40501dd38475a8f8c5e56b47c621e2bc0ead40116c6b008fd488b4a18ae39a802195b37ca92378c02d1fce4e5170fb84d6d98ab5cf98d8e3b66438f12464fc054cd46c1180553e9308c4fb05fb568e33162df444cb019694b28448c14c27ea70719b6f2d372a19f9135fa81d31c74ca1231ef597f5ea80aaa6b0027216be9b71b6a453d1ebb96c902e4fa74a99a7e8dc3a398023ca7c5d2b4cc8731b5c0a437b329b4bfc212a534ea19777e9e41ec6398d54f5247a6b1eac600fb3ec0fb7287439565d7cf974a7c3a4d01b685c2712b51f4cd412769efe51b231e42da35ab1ff643f48a23fe5f41a5b3f1a5243b409c6ec28a71f74be9d2bdd72d365cb86918d368d5741306768e70820ec54186c7843050de2c119899cb20d67abbc72f150d67f3195ebb7413067eb7ad08aa352186aa6bedc05dff066efbad4e1c3dd07f61930909fbfae13f73d38d23704307b30677ea064b3260751b351bfc151c90fa28e38621ea4c0e140ccf917b82232807a049d67aa54004f2b66aade8ed57f08a926f61e3862956a63a306d6a23101fff1129dfcd7687daa2c1a27e58560855afd03ff1654e0da14df3cb9edbfb066a700511d11050823796a9f98685a25d64b117402530832b41bbcc31adcaf65ac325014776b09b2d891caa0aa67177cffd7d811aba401c39ca6e21901ab400198648b37f8b164e7b305a2ee19e5eea8e197d1cc97a078f15d33cd4288c8677a658670b6b7748e35b5433de12184c1ef2711cabf68103c34317f221fd95b4bcd5579530828a3db1e6c2413981dee79345b66730fa5a0558b325f4572ece5d5507250c3dd74e20041ca34c12a065b0029cbda44b48e9d38ebc8bdc97d21e5d24952f8d89109946d8c13f8de12dbe2cf0cfc612bdaeb3568588ea7a5d507ad09f6d3c81dca5b80f3bcd3d1b82595cf48fd128969a77208f62e9fbfb871104fd34cae3d33e70a447c12ebbf2072658083d1e13d643f4818c93ad41fc351481f20a1b7d0e0fa663099ca9e5863f15dcd13e1f44400efc9f75ddaab994a75cb8c5d80d19b84b417544c0ab220bfa1757cfd8ff3941663c6e0a117720926c8047dd1eb88546304b9901782191f6d92ec529ffa6ffe8c28a1644a10699070ea0c3fa3fb330b9341431dcb9cd221b5c88767c90c664226cd47817bd38da3a5541d46bd8413b1afd86994042735c51a43cf8d6b24a2d014d2ebc1a868e053035fe0b783464ab5444722c5e8a1d26550e94ece2d6c39bcc5e49cb242c0bcabf95d0c2ddc42307846eb567ee2926f3504aa3c3c8f14b9ede89bc04fa1307be869a6db9b2aa0a12dd504e88de4c9f90c61ff93a71b81ddc736eb26463c15711288e754b987ea019dac90addec6be228b5f37b3680f04a7a1c12da086b922958e9a54405202db06ea036f98ba7ea935aa5d8ae44c976094b01900ccd050337a7cd809af6804754118e3002633597db15f6a768a4091fe802c50f432123f0dfb53c731ae4453ce8495d6db0bdf71d6a79c914b4de7217311b30b4a5e72bf79898bae702e2f60073af58138c74e7af2a9341035f7f319971084e840ad86c1461d1fcfee8301c4f6c3ce81ee01d311bb3ad3bb47c0d2e92399fcd6d5218e0699eb9e08203f517f0bb534d099cf3908bd9f9ff46decbf0c448f7893ac6ab8c9d889783b535f20b18230d13d990068dc7c88de4f838b7c9fab40fdd10a35f7986de609d577560d65a9dda701c46d9542e39c0fa60ce091ea324d7bda4f012f2f50aa30d49cc19cfec7cc4733a90ea42907b43a3bd75bddc26eadd1f5fbfd22115118a416bba454c4e778c646ea77505bdd90cead25963f021452a398f7aa2a454ae3222bcca60a389c966a4e403d9ce08d69c7b7e4bae5bab623c9bfda5f12c33ca109ef027d35ce49633f81321daf7df10fcc92cccf6b850368f573d58da8a676fc2cd3a70c7a5a1d36dbf9bde55cfc75b656d0653611fd0ce13ad4940405093fc51c7951081651b54d8b08b564cee2c1284f4313fc4ccf1fbe2d0ee043c8230b0920439f33b65347f70880d2f9d3523f95a8c0f1ec5b42bc08abeb3c694720812a2e6199ccd1e18ca5393967a93e7dc56d0d022760fb69a65adecc1609686406692646abd9314a839a51eca3cfaf14df3c61c29d9aa34c482b059a9104f4b1585e0d7adac09d970302f808ac48524e2abdc5a46a91b5ffb731485e0d4b5620489f99b1dad823a65024520213977d0d44a4f05a75ace67dcf222ee4ddb09b03e1b57b3735be0581abf7d6087fe5baf6cb6947c1298d3c4bf82c914e13d97ab729d62bd454b21a4fc6d1f82e1cc64506dd381d6125cd1d7706eb6b3eddb5b55e0bae8b7b4e4803a52f8f62eb29b4961bbee37521c5e9a1e0c537d57f18f3b69bb668f908864801c8a879f93f6e804c98c4c8b47d2b0415702bae061f5e3928503eadb4104dcf4af6165c41134fd91ead5a06e4a0651ca082ba126726d4a00c72a13ca666cf9e3931778c1d1e3311cda4d25cc005988a92460b8ff70eff7b52cfd705178972c146631a7887203e2896696a1d580c356c260d0784a7c89a32e91dd3c26ae6be0c2d25eb9a6b83793d7decfde68541d2f6b91773d4ecee3e375d14d61ac07afd5886db28aa4f81a95052e1940f8d5c34253a6baae30985d0ca7ccea41b017ffb0133cf2939cfdb0c399ab552b4f9f2e93accfff47911957536419e66d0d211f8dd93222a9226f5a617af35a4ba5cc480c1cd144d658699cafa500108436e38f17a55202499faf3b528454d9dc6c2837c48411d67da228e1ea052f57c746ac042d93ecad7e51fb1f8e57dc1a9b9860546072bd98b1a5d79b3dd9d989b9f60d55117f5629baa0848ae93453e3c374db66ffa5967529f62ec7f747438f1d85fe53923538c572c4950c93b4a1033a5a5512840ece93e80e128d361f325eb5111e7a6b8bab0ad98ad4c73b877bc3f8b07d69637bd1259e2c5f6c57e4dc9b69f4ec525edf54a2b4c2ebc420fa665050583ff24839bdd92dce64b27da6b4fd22bf437be47ff3ab2a98cc17a7f581bbe45803bf365b846d3a6ffd191914554829e1d1d6454d396c5e603aa814d90884d4b15859bfc416f08af9a36646247372721ee5e6b6c8385e1309e683960d972b99367764eaa519db02d14bd0e62ac130568884aa99b8a3d858240de1d72af72c22b5f0715d20b2dc8a500c4c6f5e758e156a58b67aa5c8f32ed20347bd103561bbbfc47795bfa5f622d084c843fac9bd7824245ba92ae1cfdc6c71419ee02e0e003dbf9abd667cc3bcc292276071a6d7f5961568d6b98fb942937bba8977f324bc39f198549fee2e86115cb705b34c6fafbdd2f3a7b22e5dd6b21f6137362f20b3ebc3cc624c0f139501be942fccbcea485da109921514a9a9be08e8b225dd99645d6b2d12295f2de9d69982d3df581398ad52f9695d6a1a8107b92ddca0ea88e2bb52eb4092b93d7f29d6d5db41f0244f36d158080520e5ec49ec42ad39f613d6c69371fd2ec1c3e241e24b558cb44411f27e8154435a46728c917ce207845cba4782f8fb4f5de858dd28f83498d4ef69f50dd40e76059e31a6a3248dd55de486c8297ea7fd2e16ab61e960b5383d8d7a9a148517134574fb57d894d2306c62d1f4ca4a639bf9f50ab346d65acb5a4778ced3e4552f4d9b7fc00f5165859cc941d74cf095f707fd8e2481f03005d476d4ecbb1df2c39f867c01d9475a2ae429902429a52b2d3cb96fb4d039138d721b48b136691830259c0dd267449af19aba4fa574c8ae1fe97564ac2432b490ea2a7d89cb4ab70d6732f9ec8070c329f52e947f1814e54738556f05846ac7e1731f4bc39ba45f07514baa0995eee7247c82e9bab8e8c84fec2945b4b5cc32fe7437ba543ded50c8f920a0fd129201d48f4c00ed1d5723e292004c5be54de8305a834ecc120ec6ba3d258dba107fc14e4b7543f6b56d440fce65a9d45264c92b6e95da24f09d8ea9a03f14af11b225d0931a43fb2be050334b74124d30367c5a2dd6f66ea813728e25f0e37be0475bcba33482f94d63967a8b643986c6d31d70a757c609dca77eaf8e56b5085148eabf9693c78b86e05a74a7c6cd84aeb5a4e3838655313d007fe12d06f6226029ccb6374e15c683a1d60d560b1bfe54f55f43d276e923227925793f70532dca4739a1518ca032716e47c35b2ee167d0f246a4d9fc6bc34e02b94c6786064b42d00062c2da59908a6a182d8952bb9661aa45210639f681f0df12a3e648cf2d43b00c4b34df702f210980d03131a05a1426efcaa03758168fb6444f863960555911e3bf52e58910f8e799933b9b8a5fac55316e80697e12e509c17be2e649715ade5014bb82ebc02d66c24643551db059a1931a1080dfdd597ea50986ffdf99ccd2e28bb7ab97d698a54620ffe9fa6a15f49c63e90d3c2a97c99c13a9cd61c9871942bed5fdf82a6d7c000f3841961024012191e52e5eec6798f45b6eb178b0b410c4d040c0372b209b6c742a380de3dbd3ed0db8dccb0865519929992059c072b73a9a7725e4c5357635bc4bd99865cb1554603deb49678e994e94200104bae709c5e17c8eb85f8647219ae73ef7c0babd5353e87847915f294ce73353c570a23b4613aa15e9794e8c2f5a94c1b1247fc47da5846c0e9a128f8c5f302643742dbd7e3171c04d8a6c731865ea6a1d89cb1fb419e0e72b0f319265289209bc08a3cce992906a63a7ffc59587041d66b46fcc05ea4820cc7c105e5c392f573665c3d03a26b62ed22fd21cfbaa0629194a46dc0a8e410c451122c6333ac729564e6042da45aaf46150aedb8290be70a3429ff4a11ccd258bac94caf4fd6933f18986733c6aebc8b236c6cf4894c0472b013430c98cf7a3bdfa2baa4e7ddd54068018b721897575378d87083e2453f03f44caa30d871b6192f2ab0968b07a0881ecac03357eee31fbf9c1b069831a54a07c2e01faf4a5d66e64b027c4264030218cf86b5102e10f67ed21b012a3149c86f58a77140187912267afe86618cda2f1a93c2cff976f62041cde0f918bc76475f5fedbf18e609c1e31daca3684d9a1b6bb8479beee76fc1bcd1c3c7182e10a0496aa73a2db15d9ed40a904403e156bbc9846448d9fb8f1b9cb511252d850bea33a2537fa40ce84d501b7d237a1c4b1958a14f3bf9aed12ed6ac0e8a17edd36589e9515151288cac440d46f6567f0e65929adae4ba3a3075d33481c182c4d3f79a1edf840d8326b88cc4ffced4a0edc94f190b9c0f89b99dac965a63549ca30f8249ace07890945cc597536dc68bdc9abaeab4f31974d672e9b9bd3f994b2d743c61870e3938b49e101b038ee9601220366008bf0e78cfe170ab09a6276c8385be9607625af32cabaecf1457c1d038b4b2236295967c82b60e01571de90e2835bb6360de888ff0d2f84823a94a19a1f9f56968ceb4aeec0c482e248a208509339f16c4461336d928bab211415a647f951b8dab66b6e828c11cf246a17ae11fcc149217f4a1409b664c54d0a9092a8943c718357a4aeb91fcf0cc2b4bcce39e8b290667ee771b761d752bc10d81d9d3b29566380fd50e594c96a2920f369dcffb2932de67e0eb91c215abe4af31c9b9782b6fb8a8a548342c07e866d505d5526ec0b40554624add25ccd859f07550e94eb1f704c359c150ff2f12d7ffb17aee594d1e57fdccb9da85d291a8e01ebba138ce364e592da6e363602e9a3f1cad61c391498a20fd1a469192a0952993dd064e7125c4fec07ffe87725e27444f6d8fea7d20e488401995e2d2fb44356dbc4f535f792154d77174cf90e8a1df44fe4b5d8780f0e7a0590c50189cd64810e0b56df12f69762ccde3c87453c1f248aea60f51b0482acbce9348a0394aef6cd501bc3de7fb054b86b6c3873c59007e2007b03c0fb27c30b38b8a0efe11a4b6e240781fbbe08ae526f7eb5576b14589971b4b959b4794e1df80ca43af7e47989dd3e78d92b6622efe150b85a53ee00bd84b4d0754df41b9371c37bc53d93d1a3d213951f56509537d724b09d0db0ab300553098b49e5b2620d4a36c52aae348a5adcd2822d9cc00b5bc55d65e4e9f7aa8267eab3a3e613f3f695ccbb127fab3aaaa0ae4e61cf15e8e3677929fdfdfa10bdece681b394f05b34998b97f581358814908a236526d918b25ae82e33a7281fdbea589fcfe7ededda49975a6d74359e0392445a311250c513fe0af91c2ab6fd970c2c19a73e724120a03adfec17ad992d143aa31da88dd5538e77e33b79a7ff131d5e5f3a67727312024f6cd6748b40145b9814baa75e1d7528c8fbab06ef59e87ea8defc116baf6dfacb64373bcf97a6c2ac0255d54fee9033d638e66a47a46162b25d3409a4698b9fad31de5703d84ad8ca6c08a4dbee186cab90a5b6f5cc4e1ebbc65dd6b7a2cedf56cbcef885acad12f78dc4ffe56b9e5904810940afc3eab08e31439af91675996392179e8185d35392316f1c8668ac162aef4c9ce2e55791c9c1221415a93335c5db826c0c0737bbed352dc94703e1c430740abf3dd179838e69d21f731b30330e470fc699c202c6d83d46a367bba3ade452ba0ad9fb877f2c41eff0f730b86b01c29e335c3058e116f2dbc6207f7cddfbceea2b22ff0e29d2dd6c6f1bbb58699bfec705806785330e0ab365cf9f950217fc49a4922bf72c07d756938ac6551f609ef83a4912843c16f701a666e94e25a94a5882cddd393157dccb007422f918310b2c1c22fa815c2a7abdc43b685b0da4977ac273c8125d0e683a41b922e09b3d4e27192477f95f3228b841027ad4564c9eccc85f6d2023676f2ae78fdb54bb3b0c96f519b52404af37ef315ddd3164b6625437b8bd147ddc2715184a2504a5362ab8840f71e00b52fc0829d10cf95f620a6f3d7f46d484109489c588574786895716d71a86cd8d68d281f8459dda952b8ae727ada2532fb15b73a363dc1d8aed349b8a729f1e87bed361a1ecb5d5414279e38beefc8a4fa15ae18260022a7f28e99eb088507c226ade123e16375e33b3d92aac545ab84f8a75255524ab7293918a361d95ee2cfaccb5d569d441bc820625ad1a658eb2b32398924160b34304472cca3aef0797c5ae2fc9b2ee4555b32d6ff4b6b3c072b3858e687cdccd8332fc2c9e5e066a21c9faf8d256ede890cd8ab6738230c4c961fa97fe9c7fa0526d5be393712e8d1c42d5049df868a6e5cc9cfa60b790fd099a89c95cc20f06ba3546b7f2a2e69dbf9ada3cb88ec64d3d4c7ee2be92b25f2012be5a5c284f3a38f442ffec0c5a08a2ee3311a6eead7e4de635bce0b572e3346c04847988762ec1477bd3b1e27dbd81de1b57c30fe238de335de679fbeeaf4373343cba0ddfa780a678bd41a65fafc1c1b47efc905767cb4788d7bb5857198706816f0efd6cb6300f62eb2f19609174672e5f42489b7479bbb72a0b79c99deac1725872a32fbf16c17ac98da27e09203dd29db97e09202dd2e52ddeaa2c64c9adcae0725e72a7afaf61a44172a7a829614883744f2b08ed45a6480444d398ff25b467efd3733fc67f73d60bca83629d4c7929bfd61c896b4ba746abdb3e274db1afa95ee670e56ded3a97fd769657bbfcff2c07266cb816fbef3e58de2983d324fa2df9ea26d261a347de9c1344addb67921f04ee620c00f86fa84236d36ee3093e0d57f16a0e11613743d9767e2dc1fd0235609fe300348c3adb025a100178927e285e5d10e362ef9d0b0569ef1bac7607322734cfb8dbe93a37c0d6d0136774611c2b15256002712ca89583dd63b215bf08f7419ac1e34533317a928a2d2d911edd6478b6b69ece4f0192c4f6b5a1baef6fcaf5f0adf02a8f8e402a03337bd9344b5338e8e092fe28a9276c2eb42217dc7239e8c76faf3570584201f61e32b42453962f523396d927e3ace4c82f863a242e6946a5f6971d9c7af9f034005de61c1ac7c1797a934a76e0a8db4834df4d99e69d5b47cc0b725119a6716a301850144059dbe18c01f64ecd8cfdaeb0cf167820b83b55ba7c476d62c8dea371e49f84defd376c996c444d67a11cb667a554b8a59ee8297ecb37031a34358c9b0358a5d409627fac88d70d45f0cbcda0f3854eebe31f07c6fa87a37b7775eef1fb6e46c42ae9a526fd0ee8df904b2b8afc8cff29ad873338934a5773a3774adc8396f5e708f5044d22c714c6099a109f062f420fb3b6472610cea680973b5e957bdb4068e68658452e8ba0f68ae06acd85701f07044f0cb043fe437ff1942ab05a044d1a88b454aa633ca3d55f8fbf489621ad2f7ba73e713b976db8bab6d4cb00ddc8e82684e94b2d5a30be3947652b1ad14c4ad1a43d6440b25d825499aa5ea3f0cdfe4d21e7a61165131ffbe651d160e890cfadc7622f57cb1c0333a01e5d93fd061fcf024cfd01a7fb9ef1ac1d36f981225667c14a35e9200c41c4ac3693e302e5e16edcf7ffa07579137c04d0d2045b69e918d3f31d6318c763a1160e6d28f0d6a84f4f2db2583469aac34c6e95052c40030282845b5f413a1e5b13c80d41973e8a9e66faeca402970d584680a1f58f0c7d3277619dcb6f86d561aaa7981936a9de339b8ca56a4a5864156fa1fc82ead298d624ae49eb2845b2ececcaa04651661e40a90912319f83019b6fa8ace50c2af8c7daa3c4a74219d88e797a03e764cb302bb1dde472b95d9833b276e91b37e81020ec55d23dbc22fec161d724de3aaea1f5825b464c0c15bad9f64d2f37879aee3ba71f8eda2d08c1308cbde756315a8ef4b40b3b410bf4da5d46e1dc0fcac2942c78e54e2c17535b2281ce2d20aac0501f41e22e1ff93be2256896afc3225ae2626391ba355d69474845c391e5dbeee2075922bdc14e6a65ad810d689c0cbeb40811942da49385ed789ce8f01de89487bee2834b62f94660baa12d0b4d80c98733bef364602014eaa0c31ba3330e0e8a692ddc3e08d6dba6a081a60a8af8cecb22cb4ae3eacd6256b786cda1762230d663ad41b293f6c3e452c9ce6bcb2aecfd93531bc0a47ba51dd896889dd7038eefb8480f515ba8586436c75f0ca5b48890d81ea0b6cc8e0d6d0efc1b370a582098db121a0a9da06ff786b2b71dbf062287d649e19bab6d2fe4c28063429f84b2f88fdbc6795569f33ab0cc5106a1e51078e6b52a3a957fb1b883019fa1c1a99ffce368851ec0c17ac0b838811c2966fe38ce66babcb192dd01236e478d00a472146a4ba0e1a45dfa07966d21607120d6f6ad0564ba3464a0834c86bca429f5e3bb822db1849652cda10e4bcd2d1f3efcaa637f09e776b994628151f98f0b634fc67258818f2ee5752c906876131b7ae75ad751380a6e22908e4e603bc812486130940c76f4aad1ecf9f64390b61e6e4970ccc212c9850edaeab9a03bd7e47c7086f658751988efcba8e62fa60f507db9f9ebeb7e28e4de592f33f045bb1e6df3394618c3877d696cb7df5118201db0d5979c74ea207e0898f2897f4bae3bab94ec00aa2aa60f9151a975750f8e30b9a8561383f6f8fac2d43c5fefd182dafb06e9b8809980f62d38a0fcb8f2db3d06b004c20defa6a4ee1475ad53cf751055b6a2aa3f7c35ba83d3620a9a4f14bccb764889c1458892747865c94ad8dec85f03ccb32ddd4a5a04f98a7b8b3b9f721911a16bf644e494eba0dc369f2514adbf56513724df687ee8028bde786f57fc72ba42fa9764bf7dc502f144116b6a4ba414b550c999ae299b9c3183a4e73ef3c802a1e7bbaf123f06e6e5d2e47a3692bc841132aeaa8686016bbe3988719f42f2ebd1f7400d54761782c69e3d80c1397b673b2b19fc7189656dfe03d5e381174ef04aa4a33b2e832c5944f933768eb9358144a80933336a3654c6f9748cfce890f814eab5071bdf8b899cf4634dc75f55099bd29d2fab28cfb949941651a7f48f8851ea3c86b213d143d2d36bdd74b76610c98b9b9f144ac9e5c1a60dc7fee21fc89ab4951772d4d22951817be738daa68038a9fa0bea927d884024deceb1cc68e997bbd1cf11a8887fae9219e1cd521385070cd9b43355db9a7502022a3d0288f05b7f0eb84e70347837772dc29b8260556d86b0cc63ef80e5c3d82b9c092a15ed444ae6497c9b6e48c92d7e44863114072b1f30d27b8e50a5db31bdbc01868d44b721255bd0b32019c8042a6dcd94225b1d5406916959be8523b4d1279b828dc467eec9b996a8f3669a7dbadb819dec3659eb64a1b7147385cb62801ee1ed5491191eaba716dfe280374e7bddbda00e4ec5360cdf8290f61e975ee403df74d327ca745a53105663a41449679ac0c60fd018b3ba54a53d287ac7ef5836da2f32af7b80feeba474977f30721d75535926697b53608d71984267cebea3a7c4074831978ab6364ba075dfdf8743fd4ad28df58747dce8054c7b042252a7f3e7cc1f6fd4e9cfc95137353de510b34bba1f106972e2adbd367293e77802615e6b438e9940b696774ad61245f604d8cd670601d314048cb0611ede49dab1337808f3d13eb68fd82426cc96af09a878e3228bb06ec0c2a26e6ce9e00998a72b710f8522ab6ce5d8e21811a00cac08f388013b05b2d5d63331d8a732c6064ad37b6cb374d5926c9d768006226dad09624496ee56a24da2aeb03f3c4e2bc820da4ba4bf72cd24dc335c969e3be80a58fe42479f23ca68ee4c068dc6005c628735601903b96e9b9c9fe5c6ac43c798e736aad29a4e1430d1c9f0591c55978352aceb8d4b0ae745b462e84940b90c8d25b6f39b8c826741885e5e8ac27fac2c5f107f1e3dbc98e330c67a074bfb81e4500a267f04f494b7e62916ca70630560350e14684d7e634d2b96d06dabc602a23e2b3bae840a6b97819259da16d36e2a3d9e6c53cb2d45f62574667812c1ba879e315e09ac240176c1b361c62964dddbe0415d4c6d9477d1159d4c5fb802f1190d6d2aa82074b0e8d5696284322113fa1bb9b837781805b4c38c6a734e1709b5675479c228c4084cb31553454063eead5a575cbb472c815d34e709df57b3cad266aca0ffe1ee5761a7b9253c1927f5a722939683285c59d26eb232668e75ea928cc32dae6dc7955cb11973bc8c2b3018f1dea21fe379b2c991b29410301dfa6247110e1fcf90eaaba514ef3ad2fccd004aaa00cade4ee32e32d920a377c87a8d6cf9f3bf4e67184a1b54a47476b4256b305a62015ea6f22d702266b01a6a5838cffe2d97c3965f80bfcdbb37df263f527dde831cc60a84422a45a0e63e9c0d6edd037f139fdaaea18c01461aec46c0f5a02e49575db1fdcb3ef1cbb2beecce26f61dc6aebcf81520bfe212cfe367ac7d63316363279566dd008d7c99f34a0c36a09594e2da249f81e8a6694c4d4734d44670098236920e6778bd3f634f2a4d89fcb0644a8a1314ab333008e489478a4ad0284fe08e618056bc56decdd7d15738426ccecad56552b6832a0fdb8d9e3276859eef9c141244ddfaf44e8dee2e064edf06cfada1833479cf48755bbbbf83244f05ebe14325874f3c85a895e7530ed5c9762bfb52adeb249e9fb8e491798b2c2c2518b65008376ecab93e90d45db71e7b5c8bec850f14df9e60ea06e7f8bec12341738afa4ea9cfedbe512775ad5c23d4cb562c90ebf9578a91ae3dd5edf604a66d047ad2934ad408a907dfdd334daee253f833f395be4dc446f2a14ba15a016ff6d852c538c98270dd897a492ad3bab3f21fd19ffcfd172db8e9a16b83df0e7099671e39d54d54dcbcd7061a42829f9da9484c6cedf10af2432744a7b87ff549227a119d88fcf4222266c0c98474096fe0353c4feab1a67e02270bde635bd3096cb63742305d689aa460b8e5a0aae53bea07450e3d5627b1f54020624f472a52cf8fb95b579fec0c80c08996932366545314d11e1185343e57277c0c2693968bc166d10de620548b81a1edae145b99bc2f6d854adf4f3ec40780aeba57a6c9df0ab1ec2e12c7662c2c533821c1c34669b0fa2f26ea3d20ea0e47e6e38caf3b44253ab01d8070f94b36c407a38d98f7868f4c8c6beb79739b97fd6e1c93b350be22ca623547c5ab237a14e422aae0695410d6566d2463afda222e66eaef26a2c53d8d35c34dda56276dabfcb20e165ca832dfa0623dc86f34991c51802e1499a921f5375c42e93ffc0b001d522fb24cb461a6152adf962e2dc6696fb040888ca2dded642aac9925d8365225171f38ac62a729c52197807ceb809a7266a18d15f6e0eac82e20748a280399ea50a7022d47441015443dcc4e8f5687e1f1101b2414cb8f310bb0cfbd2a45b5fc47bae7f9e37f83e50f3eda5bba34b8a53f3e42d7087997b108103d401570c59fd8eb758008d6435e31ffe141de006a721efc6bfcefabcc68a5176137a72c192732d28378df2d16fdfff622a0f71790fe5490fdc8bd487d049f8a2f045964490520b4c26986046f5150cd69e64d5f81f2783eef578dbfe2d63ac887960eea927df94e083af3e2a614bc381d1d04304e45129bbf0431bd43d00fb29c25e22d0afb0e186252a09f25a19f504d5b5d7c50a7c7e0ab462f898326a74446d015fe70b394c9b424d165c89a03d148bdd2be4fcb8789eff3ec10700c280599cd365ba106d123edc26fef165f57b50f4644c56fdf30581fd48e25085d161885e3c25138af0a92840865bb089d3bed24ea90bbbf4d103c31f1553bb1b2ead388ca3c748266182e97dccb0d9d6a8fcb1f7e348178937ee04128df00ef9c0917e3e5201eb01f1997b553fe83fdcd8324c163dd240dba53b00598aa6c3b444af1fedb009ac37f08912de70f3f8140e59068fa7c5778b7d746dd3feee4cf4b09cefe73f232d2803470a0ce4d79bb95c06ca978ed4a31cdc983c8ba5c48ca8ecc8148db5b740387bcd1d75c2e94bf5e681af8c82c2fb9d32fa3b29d744e3e60bfa2a923a29fafc777a23110730e728ad6827510e1b125d26b58db1cd3d6fb0480dfd18f632360fbc5520e42001903e11816c2f20fe28d8fa90341cf06aefa24f7a0c1007a9a29789eff7ed3d97ce5ec5d63fea28f4c7b00d2a56a73d0b38b543d715b6cd2a57891cea334f3538bbb92375bc0f8f3976d1c47d45f8d6cfd264b1ba0c3ee77fe9a889178eb232b4e2d57d1ca5f5af1f2d59698c47ea9f6c2d7e3230064585fc5cdada12822d78e31fc6d6e7591f1c065e1e886197e5145175d17555fb6dbd1134149bd1e5684f58ab81799d70b5fb632f7f0a55be58fae2d66cfd6accf5d4f830d5ebe16d693a92a1a3e4493bee039b90dea0404af88fc4f402ab84155388a7399229afb352c52b3af738998717448f31054b8bcf6fbed49628ae31024d97e9a8e5be31e710d0d4aad2c7369d3c7c1262c10f8d834c6691b62fa9820c968264681c9f0d564091ace294eb9c27168429d94a7266b3700e7f7eed449c6a21580e3834434db849d91a299bcbd0bb5224a1f13bb699e63dcbcc6b9dfabe8460e431dd19b33d4fbedd5f5f4bfb8ff2f96a5ea8d2cc0c511371081d5d7f53fc20fbdac40cecb10d3dc62da9cef580dacf0842b6f71b7a083a1eab57dd8cc0dde33c2c24f779671047d1fac1e9af87ea8f96c60790a2db540ea77fbdc4ccd7ee4bf10d46065d04c3302da3f3fdad5a15cec9cd8b4762a13756665f049a63ddcec8988013a79b4ed0ffd6d284bf171b00228a23e3d04302c3f8bf62542c92f7c198eca0201da5679333ecd2947b1346da58428de848d0819954a50a40d19bf673e97efbdc06bf09f22ed4a3b42d520ef2110081b5ae40f4e0d541b0109a4200a0b4d9466a4e826ef76023adc9154d2e91bcdaaa679503051d650abb39a8330d9f2f565f6fdfa1c3c103ff8d41816595172b315b505048a0c7978f7bbd17fdf0498e1a5753ecfe58c46782c9a3e5f5f7d3ad7105baf825b32fff926061cdc6ba04053edb1d889a24a15a01c827248173f2d77568ae6b1e48dbe408974a2f7d20d0ee80a90ec581088c6c6aa98c0ff9717616844a52494f96a26a659c0a046d32b40d80ee8d320f9065add323e1caf05c7425035da23df0facb79fc00c37860e54f10742dde27b0ecda5060cf4cd9f050646a6c1961761e79322076f6f734ea73fa8693264077c36894795cf55872a8be54183b1a7b2ff858d28212a3281343071218f8562c935c77673581cde11af71e321aa696522775e54704474197c68c8b6127e2a9a74b8369bc528ca4a3f9ac8300639620e6801b540f74d38ac8a86a812581c48b08b76720690107297b4dc020003cccead1e2980e4f431f83161a21aba418169aa600a7f960d908814d8d3d3384d0e9ba49367983b5f4a1b7663127bee4621ed39dd5b8b281eda684b08b155a97d5f03ec8725053139257273087300b41b68a098b9c9120d37ea690a24ae4edf9cd35b9416218de365cc647550ca42695e1538fe1f13f1ed058952f82b22cb332ba629fb50b62ad894abfff081865a25d0878851b3ac3595298a03fc783b3e09e06e8a3f205abf2dad4cfc4cc30b81d6f92368cd77d3a009d5b1aa03d0a32fd4fe2392e3ae048e7e647a5439bd3d11ba3ace06b2a8d68303d7fba9126177aecb2f0bc9b2d2ec04201ce7def3d87a98cb360a9001b91dc3e523c7ad48b77247a0b1cbc8b1a50f8c87a6a8f29ab78663192b198d0d355207d438e6e58ede773e9864a184b4fdb2a343c857f1207a2380faaa8e792646a4526258f70a3402ac0fd52d1b53bcf90fa0f6ab7dea1a739e4c29946789436b358c68c3d92ba4ba6bf545d117035baba7673f46aa5cc6007e423fa398ac3c9b27cbc751160dee8903a511c838948aabb5be64fa48427a9820b5949f9a89e063edb9eabf258347fa204448c63bee17d26b582e34c6f8380362df86133ece7e21279b5a26f2f49a67753ff3d4dc901a00926daa55163f39176c4451b901fabd5f01381338d27dbfd0522d684980a266d509a820ef2eaea21552fbb8690a0edd9e34b8275b50af10b12431a8951786478e75a0bfb2b7e76025d49b3d66995f6ebc43a8976bcfb887dd45e12182eaeaa6407c53c5090026a1d8456fef00261dfc98ec8bb6c0122d8f18f721a6a17de81e788a6fa662771bb0179f333abd55126bd125910819bfaa372436fd4e0acd66d18bf800011728127e8b2aa2740f28945ef9018aa819409cda184d110f9eb72b74f865a070a0a272a019b9b46bb41fa5dbc5ca8df80e0e1fef2c69f10ab00d560a21b299cee144dbd1fba8bc6ae8295515719aca74db0a1820969f3606c06fdc215ddb49f0fbac3b18e4953e7daf525409b4af8a1cc50671f828764096cfd5f69a7ed1f9fe6f68277b760903a6848e4acd1c33f3116f7bfe007f41caf335e0a16497eaa6f82041d03c499aad22968042e8c43667f1e23bdc7ac822ca306e1db754fc75eef8d329c267332dd16f871e2c463217c50410e988c00473505e10f1e69a6dbf3dfcb0d361532bc82807c7b0dbf6e4bba32c4a8b13a55804f1ec6927d4d2a91e84fbef8373a1bceb828da13b4f732716ed4160326e2e79846ae8e3cda2ded60d3b441466ecb625fb65ffbf2b64ca6e37f82bec8397ee4c64484722c4b9ca7894c3eb08dbb8ea178ad2fbf77cdf687d2900108e90a88cbe01883e0bca8012fabe8db3ee51a1985be3ff74620326da30d700669c5d29bb73cfa9f357e7c8c3fe1bbfe9d6e1c512deb318b1034e655bd80943ada855f99a083466dd4964ad0f3abfc00c7b40fe3264e2edcba0aac7e8bdccb586885a8ecb66951d7c8888e985fc821ed44f2626ba898262c9cfe113187466a3a07bff248f4bf6f6e2aa12559a038f7b3b22da66b1b711a1ed794611f47ea350b47aaeb5d9c043d71d7c897cf60c1d4ace4f1e369bbd950679fc4f73e4ff0f25aec5f86da636bd8cd1b55ebb21e63980acfa64f20533c07832a083ba0680b52311ae5004650db62cddbbc48b41b8b9883ed141956997998a56b788d90332b0018673aa7acd9a3ea7533edd978b2742074dc8d084d6be9517c7dc03d2094406d6ef9a954b5d955c2ca577d9717c914a4cf92205954bd32d32f1667b0a899aa30cd402cdae5215b0bc793d75d1636185664f8bf44c743f0ed79411a5e1328948efba3c8722e2c22deb74e302d72fadc5103f1e0b0875822481586661d7080609efe1117cd806f76dbe9a2d4e94ff3f9c434765af79a9b40ec708c00d7bd078a9a3c68f4770cec790764473e98619c397018e3996e7a572c51635bd7341ae80f556a20135b8c41d0548bfe7bf017e199e26c27088050dc0ba14cccfdea2ca44b6cdcfe0adc313f6aacd9eb42811a1018754cbdcfe57003f2e228f4e8cc38dffda768f1d05c33ca77323df09e2dd6508845683557a8dbd2598244830e23104107dc2a66ac7b14c024a87a9e12d6730dbd45b26c39c444f18c97ee99f343ba01340ff29537d25e341dba7b0639efe3ef846c3ee4d178051132a25fa45cf880cb7e099dac563d7a0c77a828f15774fd9ad5ba465aa65922685a332eca83fd665627d1127b043c3581cf947849a65e0a8b557a253d6c87265dde8947079d3e89435d2ce5f20011509c6a4fc3baaa0315b266a6d270145b592338bba492f1ae6d820e81629a9aba964ba88e2119bdbfaa59423544662c476be5bd852f427642259a91c0d8f22551794d22d1e1386bff1c0184719be151bfe0a277c46106d9bfd69c18642d3955af73304316d1daaa7a76c6dc66c4ced336c5766c55efcab010f1770044ee400f8157f86cd750bc21e652d2f9ff2d15ca7eb891469978fc513124c08ead89af5dbfc689b61f98bfdfcd56e185087d476dccf503f211964e8e8406585124b5d716ef0c535e5517bcc3c0927af8fbe469522e3a636d600f74f2b795e0b30cef8cd5b13c16b415ef49e301766b1d9d71c6de4bdb8c2aa0e73950d0ad392d8de719ab8ade946176007af2cb43c0682a25bc5d77281ea0635a759a32c45088fef8bf75322e74f6f52a19fa50fb5adce60e8ef1b96f481ee79a0f246015856aceb27c92302dc9a4df4dd8ce70224c81e97d58523b6a6b0d8e41f6e54a0907fa70bdc8a7bb2d611813b377c5a685a9776ee0ad3fd4ac9c7215bd5ba3e65100783f509950d2f5039cc74120d7078c7f824e4f5bd74c443f637996c6b16e1d62c15838b3a463b700d13301e4ad03e732e800541b68192af3322f98e07f568114b6148491034732681c56bf6a518d42ce618a90c5a0a196e4e41b1b73b5bd924798849d9201121e738faf294b7e315d6ccc6d11c49ebd7989afae29b39998286bbec1cb7279c540fd3c37abd99dbf8acd8185b834651ff852b1b0a031c1f01cc0fb5ff2e7ac0dca99e2bee6f2f40ea226f7b3db090f12b88027b6b28e60be67e09b0386cb519b0f66cfc643994f4426b03597aacb143af09740f0a7dd51636290a222a077945f8316fbb4aff5ae08dd9fa686382b462679f4088ceb0966910f508e8714d055c03a68c4bfaa837b61ff03563bcefe7942b686b744f96ee9ab2ec1a0a4ac8429d36b8d6ce2031d30546ea443a14053fe4236b942aaf85d359a8f230f1e46fe0745262cfa3d96b120fd504c07f59e26d37fdb548c4e07ce2df5726777df20d37bf550e806e674f32a3f6a9ff1af97fc74fcd2ca9b635d89f50848b7935b14b489ea11c197af9df159227663f1c7e2ae19630d2065b805638d04f61addc631ca0fc5eaedfa6bad211912588fde8e9ec6f9b1ce97b4760f36de7b63d184df978a20abcc1a960dff12c7725bd76f52401534bf9862a9baa043994601a9aacf2a34a3fcec35611d760ad6287572066803a50e0576d5b8d2f9063b7311c4cc6a939f9a8d82e5bcfce0fbe3279d9fe8da4ea32e988b2dc76a224ddd5ebc4fa4ae4086b105b3915e596990209e8a6edcd62e04503138a5463a8349fa54f579c0ba976e06a1ae51b125e5d8c3527fa463048ba289396901421c763706db5876f51b0053278bf0549cd3805b7501e15139a4b51b6b494e4529035ef9cf941264f00ff4cda569b6bfa5cdb597d85fb0c33654c7eefc6c10492c052166215f84817d7bdcf88484d289cf5f852333b409c61e87eefe0503e552700832dbd589f2ad2c05cef0038a96c0105f3b5a4ea61fed672db3cc775a5bfd2a68e2d866e0b011f15a444037d6590e65ce9c27f15d8e35504d21d651232445fe60a92f93e761b6d8ecd8814873e6b5fc585ac0e284c89b29284ae9281fbb464985f0e438e20b85c79bcc98812b186e2009290351752156187ff65880b77445c323f411a62c55adc0c51f566a7e46c5354465c3f5e2d989001422faa2d8c6f6602745acd9a45acaffafa003e077d9e3c6b278d863085e54b102f35b7433f63c3a40f19e547efc3b1bd7144dd143c23ee437b2b6746d5bd1ddaadd7021ae0867e19944546b62a08c2b2916344d366ca8a2286b50a3bc4f97b8f7de36ca4dcf07644713815a086de8e142d683a0f640bc7f40410dce8282598f0987033df74353ebb42a50e996a2af2ea2707bbdb49204c659a4550f1ec30f440a99ce1d0f1d2b303af65a930de8020e49540b4c8f6656f578220c0b42e54e6c72671e337fc6aee88d9228e3d10b9ab2a42773941650d3583c5ef7688a72b066bec07313a5a0bf0e75db955de1a1376c74258966c0e248de315d8c0f99c8f0cd49ad717181942ea750b3565a3652e38484f0342cb75cff46e1b094e877b1043d1d26e1f7ca1f0122da753ef4ab6a1082f91972e1d4fbc846c26b1dd2a1dc95bb516b42ae2af169f0c930cab5e6d7acb710e9015201fec6dbcc90afb5dba9c68a413f75dc0d8a4e8b220c0007205b3beb86d10e3d3d04cd40a7808144c49116a3cc3f2ad4bbe43f2a18c3f845b841d605c7e737298e39cdc31278bb0036613693753931579ec00ff03b9c788b103d0170f78167c14f06a624e52206e621d5d4416038ae9161b8184644f8b55d03d2e878e890ca43bf86bad11da3db774291b8d7c3602f00fa34b763c5bc7a2852f2e527341088ef832b106c5e79afa210c4d9325781ed7ad2fcd5f3981b8bb9679027e70761aa8c1104dd2e28491779e274d2b1692381e8e28f5f4d510624319ca40a47dd2eb65587c52e9dd42cca0c44188fbe6a30dafb745d974aceaf802ba3af5f7e6f23855fa8e923f91c2f28e9c9299047f069b2841a852a445e4c5a48a56b1b27ca1628bd199cc059c4f950da0f54c7221a6076e323e5f16223849c58ef7d4ea19eec13202f412040a44afa85b2056b24a07c673b9ab5c4c7389c5a496ae86acc803beb991c724772aa78460568d420f97cb7ec3c073403f70cb01c787230026ae069853e2f8f0732f25ccc8eaefc352e614fcfaecd345ac9d47e7474412b2b7dc5bee2d654a5206810a6f0a5a0ae2ea3118d3236aef428fa8c57c0a9e3ce124e66756ab1819508ae26797efc17f7a17fed3cb3f9dde25dc81f993cbef9c1e879fec1145213048173c5fd347080c57c5644aa6979e0b5294c9800be6f4be89ff0a9139eaab8e8c7fbbbba831b09687d055ccbbf7cd50477b1ff84f52b010b943cbf5514572874dae0f83dfc0fc8f03e9c8843098ea5b1ee6f229ed57efd27e15ee0ccddf398552d47e862efc31e10e4cf8c9d3fbe0fe14f20cf1dce7de47f7a73f853cde77777a3aa87f51bd4bcba7601a0c2da00ba8025feaa3b49e578f66559591999313f7b9ffe17df7a2a6a33d8f9e1e7841a04ffee97bc4a0fbdebbee7b2fdff3fe14eec0e0adfa3b9e106fd515641eb29239e67deffdbd9581dd053f97955f37fcd2d3dd324436a7024e2f71dce8d629c47196d7b4cd3cbd0a7d9384d336a730ebd1acecf3fcfee137df0cbf164e1df2f4bbabdf795cccde03b1b7b25a059e3f13e8fa6db1014bf1f4d2d371cd2cf3f736080bcd3c0f36defb6cf519cc673f8bfce6e54faf1ac2934ace7e43b9504839fbedd248510a25596a91654c074ce4f65c388133ef81df4fefabd3d381cde07ffa19fabdb7014ef14e995fbdf4bebaed00c18eecb396963ce2e48ccb239765c0a7bc851f70c1f65f658271e48efbd92340decc18e66bc4c1b9e17cc91cd9ab8ee011683f44fb1be670b37a973364fbaf863a33df9fa4602de6651e06f3ab9f40a8a3ce7ebee40e3b8526d1d53ad418d2762eb9a37ef61690372090adec3329042db20fc81cd9a3c6c0ddc2ccd3fc8fef6bfcf4746c60211bd9d7a0a94a60ec24c44c30132fe7d39999f95e7af5e4f1f47b3f03f20c69cfe37ff23fbd16bafabd9701f1af40d4c7802d0f03a65e0576ff02ba3c07ba204518ace5f1c3528ffa0dfc744eef82144f9e1457a014f30b28451d186c86ee5d1e066b7918fed3c3520f43bdf72fd13583b26f71e9a691d7f39aaff99a393981a77f13b9f464dd7244672dc6f6272772e006da66697f6a02cbacb997a303dbc2affe0ef735746d3cbca5f1e8af7260fdfbb9b67067a886aeedafa6fd8e26b5173b20309639eab7ea7b163d3274f57bb8e3bfd3df43f4797cf9fe52865f0bf4ebfbe8f7908767e8933c2fe7ac55ccc799fff359f3bb882ccb28a534ab43e6df9679be0e209ee4d9462dbb8fda664a994df493bef55167119639e466041e6d23b913dd2bcb9fdf9c178766196392257be749d9276d9aec4d656733c43247e7e1c702fd64eec9feb5091efe3dfc6bfc7158afd72b06a6d74b6ca3d78b6671593207fdb153d8e400e8b3648f38a928c31314dc2f7350fffed112d1390c0abae17b8eab55db7c99dea840ea07a9aff3a3de801c10b2a394ebcb5aa5955c2baaf67c9ab6712b72ad8f592bfc62d5e0541d6fd5af5f531fa7fed767d5eb0de1c9b9605f7b1eeefd86c73e67bda5bde4c02d945a9086e50ef94c491012901bc934c182480c7280240b21b1c990f2430e48a061240848c47e37f223f9e1090a96cfa383f80ded5f1ae552ae4c5a38e2a8e1782377168e34585599ba5107d5315f8280589a524a29637ebc1f46128747df9fde087e486f35fda849deeafff95cdc77df853b191756266fb5e7437aeba7e74387fb0db4deb2bfd9505a5bb3a05a83fac6c5e889918c0551947bcc9ce4ee8c785892c7ac08064b79cca46419953a65b5e18efd6e0b77b631fb79d1af4c1976432e5c796b32d5a2dab936a5bce4469fcb521f6fb59d404c7ee347deea37c22b377a6762f21b29be7c32203772a2ac280bca843623a434ab9b9039fa27e851e600daa8066e943165dd42c5f486c03b29983c583162491c9a9f82c944153abcc4a10f02d303f667f8659f5b36e014815127fb9cd31ff573d4c9a777f0031dd8800884df7d99713eee65de747cf76dbe614d100f85728c57ab71fefd0e056a2fd4accd6e4e0dc76b4047c0bb61cd06764d4820fd415245701e3f5093e937dfe6f93aae1f353ef9c3f8474db3babf5e012488ce8f55e705a63772084a1cf02c634940b96b3ab9d44310dde4b30647caf7f946eba8d2df1fa45fe787e7f92b789e38e669764c58ec8653283980ec3f8259a264cb5f4efa936667649d8135adf2a9a19ffd6938ca1c5ec20f7e57720f470264af9139fc39100448b35ce5e3d24af6a738744461314589948925a6e43597da46c67668caf3e715f1a2acac44c85eca28662861c58b244eeca0b4fd50a4684a118cc802090a0dcce43728349183103780c11934f011a73f6952828c2f966a3086386f00c6174e5e4b3cd0a00371f6041d010422d2984108578e20ce7925093c976a56bf4adc84c717aa959a96c9a7ce3d075e2a679e9e7c7f3baf284929c70f482dbbfecaf595d484c474b4d4464a4a464b474c484daff7618d3519a7d62a41fada4ef69fee5e8ecb1f64195ba294a5374f486019344a25d50f78944b4b9464195b62240f20cb98122bf9cac492e76751b5008f724949e69847e029e437d6623c339fec83ccb776ca25a5a4151296529b4a53e9b5a994e768b3a382405f4a1bcaca810e4c46383183339a20a0082a90e1054130c1628ac904161b9e188144069f2a380b2b5bdc00840d84e043959b06c8d0d42dd90015bc9a257ffe7cd67cbc7295c5311f76204425064858101329c579664c6240609c90650c0644c837cb18101449594a0d07a79b48c2c55c8196553a571d53f2ca3359c69690e45596312022b0e0c094048c7cefb46dd392d6a740e42cd7189a08c34a964fabdc715f8659ae357725a0b9fb0bea70843c0254eefef650be3e44be54887c6b937cb3ae876cbd15c24a37dfb6adb76d6edb966ddbb66ddacc69ec6192efc7807ec81c38cae77ef22663402fff9e3cca99d357f91e68e98dda7b7feac163fbedbd3d0a9cc251fef6db95473b1c79696badd7bffacb1f6ba5e0b879607b67224b8963dcbe9f7a12d8de1db0dd7094cf3d07f63b097ab27f666519b4e7ce8c8bb9044ba79e69231422c82006153479a28c02e4000d2b4444a028a28ad85e452cc992fd2f066cb38c25516aea1acaa042a9612ce842499c4b961c3982d8e00d29442e7e608411c406a5920cd30819465052a2c82848bc59e7e0d53a077770a4345124a680da1024ca3ec0d869566e373658d22436288b58af29b2fc64b81b59b024568a1559583a60a0dd182545a161aab203104c3f4558160d389613d7c88c2333bc302a42113390603ad8585668552801db82e650f2411e592e68d285d611d19f1e8240820506468a221959510358113816ac450609688aa02a92d8669292840a0b065ecbcb5f498e887e64186223524299a228318952059327a8ee6eda94bacc8f526714b3210dee15bbe105311b96a6776d93e51985520064b97e33411d99dff8cb9aec7bf88dac913b3a677f6a923b6cb2ff6abe7013d2290cdc5f6099eb4fb9637b39c264f9e38966b632189797e20d5dddefb47c177e9c06da22f97a67c1ce1ba8e9c0b4bc7bf777e8777f4317ccb7843bfe30bf8136db894af25c3eee71c40efcb810650545a57f4451c9202ed2365c914cdba67db26c9b4c3b75917c39504b7df718487d177e1603f83f1b7e2d740ff3aeee61c29d21fb3ba89670e7048199edbb20c596f7745a9e03b3ccb56896d3e9de05297621cf907d1efaddfb9851d0808a0813f2f87bcfa33950cb30efa20f137e9ccbffe3c2af059787791f2e0f13f20cb960bee5796254af0a7960bee5a558f38501bf110c61a1b3f63aaa1fc10a32ab1ee63f9d9898cf07cc6f35de0a3c88f8597e6373a4881c80a0a2881211a2cf20772c855b79c20b25eeeeeee2e5788b0992ca0e1020ab4823a22cb96f90fb6d114be47ebc2aa28bdcff462091fb59332892fb6b70666094fb79247902464eefc04d1b4c899ec8eed60a14512c208f3a6490032b2683266244c4888a348e9734a4850ab9dff372daa332d4044deeefc840924d9b4ba3383942f6e730abb68d0e159ef842c8ebe137ab7a5b60655271d2b75e0e9d4e88341b3861c109b93fb33f488227d2104a647f2a83214c59f283124d35280181449316338ca103b16d0fbfe9d19e456e317e909b08bc9ad36808a01c6657e92863caf790944e01640fc3aa988801d18edc9dea9910c24996311b8af27899c8f371641913e295afd1518dbce192dcf64aaa6c1256c2216faa91b7e65b22d99a2f93fc66e492c24e5252d2c011329521d317831302feb497634ba30c6ca5b6d24956f0277d7eab91dfd822646b3e0d8e9ac873de20498a471929c912c91c5128d7d43773064af76504e832691b191302caf3fee479238f5c539e3728cfd989e325caf3a9b711a11fa21b8a7230d2e168072425496d33b6154ab0ca0453db8c5a963c7f8e96884c8457099a4fa0dc98a2238f33c8ca152c58e4715e91c78946c68f7f6be25e962829cfd7b2b48dd6645f5a93d6a435694df6657dec8fd6648366d0249a4533680a55266a78d418dde7c68c286745d5e8285758db8c15a8fad49feae3337ff2ac4079fa54222b9a74df853ade9a5f42112cc5ee5bf3af8852e47e944a3ebae7c24f87fbfb5df83553b3662771a092b609f21b5be4adf9b385f2c42b4bf433c86fa42844546494fb284f4be4ad596b35aa473b0879814907b9a33f046d147e30ecc8a61ce48e107c405ec994e9f5ca34fce60b76253728afe4d70d3e467cfae7e78669a46dbe09d42c25cd9a6f89f29c6f8dec91252aba46ffe4ca1b72cef9f273375fc610032f8af4600622c4b084d82274841528fda005484a88f2f14a06f595fbe77c1b29a41f06206d23c34fa284e40e1db97d03f206876c202aa60f8e18724b31039781030c060c808a2872dfe4bef26622bd82bc624d7c72e398464d80f2d865d93461ed12477b95242521300009d21930804c21f74be944ee973bb2d75eebe1add93fe32ccaad9469da5b2da3f5e5bde970ad58b992e553a5b6321b4b27354bbe579a552db31bdd36efb9552db3da66396db3dc76b96ebb5c77bdee84a22894f7445daf3b79a813ee504e3011ca49969fc250b2fc96a2dc2f341ad62f34da48fb34214da18234c54ad2d10c523299cca0a9643a994213a8b16461c28246935c52c18d5c852c9fca29177728ec93e5a78ca45a5a72aa50be35d3346bb78d9bd76e1c776fd779b7f3bcd30985c2299a4a79cfd40985712ad5d2e2a2a22a95f754a55a5c5c54aa971718d50b0c4c4ccc6a253367646668be1a34366a90d0f3bbaec1cf5b61e6fb750dd2782bd0740dd6f05698d906b561c37bdab0a78f852d1c77f2ac614f2309e47b2bd4c8f7a56b503e4c4c0763258df1aae00e3bdce0ccccf7cdaf6b70e488b27c19eec99c1c51b366d1cccc0c9d99f19e9933f3bb6b6f70c49997a3516f4d9b7266a4d26778801dec9c78e61ad992355e239ff042499ee1886bb2fc1e3ce4f79032ca45f900fb9c281fe0fe59adc8dd77093f18953f54d6ba7e06ce7cb993770ac79d7c3a514f029dbd504acf859e1d88620842922786aae0423c81381c3b0f1c5fc8f13efbb8e7421ee015f7de8154b2381872f64ed33637e4ec965514e4e6b66dcbb2ec7d08b7fd8ac696a033c76d9bf5d74056f855f09c9d82dc5eb8a239f3ace9b833a7af3096ae66dbc279f8f7e8ee9632e0b1e7290d89ac7f0fc7d136cfc3bf874b96b12092b2f7051e6b6a6a280fff1ed91557eaa0f987a51f9490e65f1c430dc5dddfef2eae39d1d04fafe41ae299ef64228515630225cfc9c427cbd80f4df926cb980f63e429012b6d1d6bfdacff85eae5d04a6bedf672ba3e8f9e1d143c76d97cd5a435e0514a91e73ffd17da72b65fd4c84aa5ee8583544ab9fe48633fa39d6d1d8196b570045e4ed62e654baeb7a61eb2f480653e0c0ed8072b1927e603953ce7fc74a4b72a37ea64d67b4beb78c053763f6d8dac3a706a9a5503ab35de9acd9aafd1d4c9c333bf59752bc491047ea1ced781c343eee8f662a620652f9d68c0e33c92e7fb6f52caa6424d414c404bf34749c968e908a9e9594635524af974db64d3550d777f3e8f1e35383552d6e44aa5fc0b4a6d67c875b7dfb92fbd9502a69e202d1c75b2fc8c28b7e8ee6551419522de303f2ac4b4c8925b0b1cfa14b4050dbd05acb5eea6ae8222773f6601cc4d7c5eccc2ef160d1d83463a0d4c2b8a8394d466c12b1d2a9a22fc427701669783b51d36021effdf228159b94e16cc14a4910c521cf0b88069c5c0e32af73713cfa4ac3d903736cc4078458cec7f6737a70dff06eb2673d22dff27164acea4fc90393c53cab2f44d164433246f79108dd20bd62c9fd36f3225974e0482fce63325bfe98e8c708ab2d710d164419e2965a721cdcb935e190d2728f0ec798fb8bbb774cf1e8e3fba8fee0e144ec8a394524a13fc461edddd9d9650c30cd4de92b0d9e06a5c9aeef3664e32a8158e49c1b4bcb8bba8542e2f2d30a918bc42c99c66bcafa3b935381b1b09f635300b6b09f4869bd0274c143a144e30e1460921f824d8a841f3cdc8ac62582715176038c93259c6c030ca4639eb57fe743a9a15a5947ef459f777bc7f6f65eff57c8f48c3212eedb1b7b2f0f4234ea55ffd1fdeca6a38c4d5fd7d17a4a813eef408bf4bca59e8859f0efecf65df7bf186432168a27d93fb52fc6aa803dbbed3e9c29d296ecf7d8f38ca231ded6f7fdd3682b22ccb32277282c919d90f1049f23881848094c7c924673dab17b5cde842446d23a308e12767ef4fb2a25a6b0d61d885da46c69688c8d9bb93b621e1abd782afee6d4ff7dffcfba9bf1ef8c28ff16ba103693f45ed86b12c41f905cff453e150fd0efc5cd6837c4cd1fe149dc889ba97f753ef03f30cb9bac73cf8ef0dd2acec53a0107029cbb2cc67be9a95658d0abf5391b7b2bf3de2bd60077e8fb8f3cdfbaeeeef7be1ce0da78fb7b2dfe9e8a7640efa5c185a6fd1f972a3db33bb8b62da97f3b5f721df863cdbcbd7429e21178fc4e1818323f6e7e1d7c27cf9aef9f2fd65b833e4a14bbe16ee6c2fc3cf77e4cfb0477cd69f3eff1766feeabbb4cf9f3fcf107d9ef9daf30c65a1cbbe7c1eedf3f0ab610bf3b577cdd7c2d025df3e8f0d75fc8405889d46da81c8fffca5387f767777cf97dfb5b719aebc3192f05305cb1e70511e574879926024cf27c148db34ca0825a54a87cd6a42267561061551106108442c90484a86681a820a8a9041120ef036f29b29a28e4aa801a38262b0282494126a0985844a22e127e85aa047ac7f9222f3ab9392dc61d30a250178f8f93c7436d887ab66adb078f79d482d9d84341f45a56d6694d9040a0955e437b49daa5a80e7fd7c703fa3fa014bd03ff7154e0394dc98b1279cccd4ec395b16a1a0b48ddb9067b7d73d8ff615e8da67dbdb0a48149466cd9b81da7c5a410aca89324215ade48fa8a2adc7bb9be1a25a862c058f92e926d717e27dfd1924ffaf3dc5f0275ddc77cf71cf63bffbee67e8e2d1ec77efb2df859fdc9eeb3aeda4f588570361342dfc66cc5cc5e8c8cce0afa9af2e5f5fbeb6a07e42b1c193df1df268169311a3d5c7fc0c2803b1288e328d4d79010dc20be31ee4fe56005353a6945a2cadbc91a2e3139e58c2e2ef7e50ddeffd3c35de6b0d9aa7b84ecf46e7655f8bcc0abbccc4681a1a1b4a6bda6c78dffd074ad1fb13d861dc3d7e0f77ff81536c017968fe7b17906788a7c6a3381b9aa655adb6ecb6ad8624e8c9da102efceafbf047bd8ffeef6f077edb93f03da2077e5bf72efcdd6fdf85a72721dca1f9d3dbf81ef1deed5e6e86c80920988ee6bcdc76d436320a6a4adbcc2873dbb6ed6b01bff72efc5eb833c4bd8d70a746f86def5ce83a7d17eed084dfe68f7a57fff7fddf9fdee53fb0e567c0979701552b10e6e55d5e033f1d8c57a9877918ece5612e8fff14835b5c542f302911a758b0d3778f5127afab526cdb2d4897488de8bd0f16fbe5cf2fc12acfb0098c8815e713c16283d86f603e35a23f112c7a4f7f45fb7d9b407aa07e74fc46668969e6e8a8870e10217ef3f25495249b22d02cfa3a3d9a4595d4e7d1587a68a8ff56332f33f31d2823f3decfc8c47cdb8c0c2845b026f40400804c8f6c0f9d0c0479e1484962914cb2c96aa8a525bfd1a16349c7920e1ddcffc6c28f07c82932fdd9e388fbca7d0d73ecf4867c5ba83323f31accc73cece53f141832077d0d4435a1c2f0504b282064fa12b52473d4995ffd0f99a7f9aa53e365409efeee67409e9997f98a5303ece12dfa342b507a4b051d47f467c0a1ed65401e7fef6fada0cdab8f79d7ea63565f4357cc7fe14e7fccf3e8d57f60cccf80decb809dbff75be8eaef3cdfd3cb7d15d8d2a9b0e89c504cb2e9e5d38369a9594b5ab73cb156635ac1164b6110d182498b1ab6007a02072d806ca084112d8a72a400714b7d8417bc8e7041134c96b11b7cf0c39537463ca794e0289ffa1cbb4aa9873fb8b653d1340e4d871ce856bf55e5117b0b6779c572a0bb628d42086820ebd995325129964527ee4243c20923b2fbdf2530cd3b41030ad99ff372bcbb3bc9a8bb9be218592c9aa7c99ea93f8ef243f6284068e249f6b7acaebb00151ece70820a1f56508409d80007415c51041ca804390f7e1004c5c96367342445e7ee41f8f1d9e5d681110c89ee3a77f7328cb277d9dda90d2680725bbcc50c5af0821610b9424574eaee5e650c1edcdda9dbc00c124e46c08269962f7ca059fd2a1fdc001efdf2fb4179c3231c5bb99d0019047e1302d9ea39831569c821dca6611020cdeafed9ed33b8f2c69d0f0079b3851fb8b1a1ec5601c61dd9b1e09ae5116f04337740e6f09f5e1099c3ff74041ee5510f7729a53cc239a3da57439d20def2af4a609d1ecd72b7f266cad694a93c5a57e2ca075de6988fc3e50c2c7fbc5183a57c29e5cb7c677e0694a237034af1bfe79bbf23b333f39dd8512521f461a00f847e102ae37936597e991210bfb1f1f483c0e037aaa7304f25d34b90c68120409a45959e6c40bc4537a7f9ef6dd07c077edf7b4ff3bdbc8ac6554cf0ec4e53d23420415e3082e70d9952ad4eecd336e3e3178651fc9a73ce08f4141a81291b4e05c28539f6c7c0340fa179c857431d1aedb79787d18036fe036bfc0ce82f03c20044eed0327d945010eabd8d77796fc3dffb1ababaaf11eef477de7f60f72b508affd605bcbf025b3e064c3d0c88ff0544bd0a3ca51ea5752fbdace56130fcb0d3777f03451fa728d00c02c25219a154d5a3758a886e7e8b0d583e0ff7f379b66fb901f30cf9f3cce79e47fe369f7bd774c9f9dccf207ffbac6dbd812c6f9dc2c056cbeaa6c3bb167c09c994aba669d66a60d79af69bbf7d1ffd5bc8b3f10cf1d8f7fb1c177aab9ec098f6fd67d8be753cfc68f8d190d2d0b57d6beda3d12259bedbf7770d69bfe3aeedd32cf86959900dc43ad65bb556c9447db874287b2256f4603e3862afc466893d6f6044704498f7b1228d84f9d1cb12e6c75496304ffd6615f3326c423375629e47b3582726b9c326f753bad5383d7d1e7ed33d7d1d207e23f39e3c7a1ccda221ab592c345295e5ad1a530394e29fc0f63cf7fa6ba05e9bb8b94cbf63d5caea9b126a54e8e1a2724aa64999663623ea282bd1475da14a73ce79e4aa4c51472a557d295d80bb2573d09f200e00668b7e83a73cb20e3016205396cc415f75246704f587d4bf61cea7853aeefd24e8c9d9f3681a10a67e8f7ad8cc777f1df4bec1d373204eb3e8a3c6c09e475666c91da74c619ee67dc03c4df8551f31ded3bc0fef694ecfe3344f13f2348f6ef90e4cfd07aa7e0674f915885f067c790bba20c54fc77b17a4e8bd8f53467da014674029ca6c2f0f83a91ed6f2dec35c1e96fad3c7805ff630e0973dea6da6fd3d815e0b7d014f3d2fb1823ec016bc479d9e07f59ebd5df63a5d7d1744508a1a0bcc402d0735a559f4cbbe46f4c02f0b75908e58a8a3961edb2d4a57dee0acf6f77d64cf853cdc677fc3ec87b0d0797e4fafc3a63f7bda9ff33af716fcfcef6fef837b1bf2d8e77ee32ad540ca81f4031cb822998ad09c66a6a0d979fd7adf7961f7ded256cdd2fe0406f69067a83e8f3f777f72eff22ffbeebdffcbc2af85ce15da3b616896f66dff22077e5ba8b3f296f6dace0bcdd2b2642fc2dddd6da4a494da664977774a29ad3508b764f5d229f5eaee9e69d65beeee01e9f2749b1471eab4488d218a22456a9d9b09b65cb72a45387b46a6a98003c3d1bc1c7f6a5fd2086c9904b2d77ed3b21e3a6aec36848de3017761b783759a76390f8c013bd9cb49eb02157028a51198aea386d68c728171b05835abd40b7ce3db06265f85afed9c6d9ed2d9cd5aed06d7620933280dd8cb32b604961e3097656c895ec20a1a5a5a6a8df858176389a31906c659c696285a8248d3b8ac5297162fe193c75526c30a63cbc44865d26c0d9223d462db6116086556061b9c48b5353e58d216db0efb60f1c9e283065ed928749845ac14b98263424039b282a3bc02a46ec93c5a9cb3c4cbe255cd3206c57658d42076a48c242f2619b8cb3276040b21c48e48d153e0982c63478a7c086cb38c1d214a039fb28c1df1c1b3e02ccbd8112539505a5aacca34cb18949f3cae56f01bed5583a38c6529ca2fc879c16c827476b74b71a5945282ef4f29a5a17b7ba5dddddddd2da594282cbabb5bb3a1bbbb352be4ec0e65fd69d6fc9bfa2dca3481659662410c2bc55fb1308f90a93793fa94521d32474db3e6bffd31a3ef01fa1ed6f0a3b99bc61f7c1bda515a336bb3af6f7ff5d606145ddbd4b620685fe691da70d536a0c0b659b8595e16caaee94865b37af26b67b0f2b48d247fa2d10deb97633794fec95dd436f70f90c726ca632bc9fd0dd436320685486e9c275c894e233588dcdddd536808b96d7391c77934a7fc38a9e47e399578e897e36cb2fdb305174a74410611727006176988a334f2000da0fc000d2798ae281a6553ee16238b21744882880f9610c739258c335e42481246ccc864cafd029f2298d1e4c88c1d8821361936506982059329ac204d092277df758f9540caddaf6090bbff1a8491bbe7bc9c8e9542374d4fa1411a990333f7d6cbe1ac60294586a63cb6141a3cc9dbdf0cc08a282fd1be94165751b483ac7dfd57466b91925cab6c294958d191dd16c1e34a0a52be81a538339b4c94f182939c09935022fbcb58a6205673d5c592108a21b183ec1f83c900e26507cca4e28834b2ff4b092a50eae10a1c8c84c84115636451d40326a8787285163e2d7d639521718410d9fd554848481cb18409135004df446dc03359c6bed8228f35379abec841d21251be10a2055fec406bf882061c605596312f8840c48b2b48bca0220d2f9c18c2baf0a00b0c04d4c283297e5041295b63831b4e16db0ee7b0846bac0c7e8090e400e4538308a424c61223a41d76502289b80407a3218e88303002b241cce127a604bbe1a8c988a803d3d28f88c3cf0e70109524c5b8307281b8431006b38cf510c4c78422da52f22405a74e497207ce0ead254119ecc980229a47b8060646cabd8c19b2671849003e08820f62b9bfaa544c48529daac32aaab27165e90a0e72af54465784c86ea9c063778335b560758144762c7af0d303265762c8fe93a594c5c78a1c1061c20c1f178ce810050d6750514517a2bb7b0f80e083e7c30320e496d2a9b628416d238f9c50d294684cb2bf7deee5dbed7d68bf69dfb3bdebfef69486ae7e2edcd9e981e1e84790a61e4b474b32c9b53d97faed6988fae8067eb4fbc37e9e8f3a8e87faedbb30e55db8c37214cb3ef777256edb73ef637b2ee41972a19e7b9ed46fef8307f5dc63c0fbee3f9a023f1a72e0fc0dc4dff23de26916b9f8a8c29d29045424e4e302a40151cee7452884891967d1fcd4ef0ced0cb9e66fef730915eecc246e0b7766b81d6d49dc9c4d9a90b7befa56fb7e1fff2965e124cb10825e2ff1f42df7effdd3bbee9f7c845cf75bc29dbe610b01dd1fdbe7369090fb2c35f92c356931a026f4b22d7513f7eea3fa4ef296ffe3df1972b9fcfd9da2ecefb300b1e5f438dc1972e13f853baab08f9276da252432c59650034a8d5d940abffa3da24674f45244855f05f2fb53bc9f7afc43ae53ea5da84f01b9508fc31d07f22221216ff96fa0d0f6a3036d9b100f177ede77de77a1f496bf8fac2989184b961cbd5ea21fa5c0a745eebbf0a3ef45d9bf0422588a49494750683842073ab8c2853c29085f9705ea437dbce5ff7d3a4b3837b9a12f79cb474fcafe3348380130a32ca3c82315da7e8adb03796b7b0a94fdf33145eea7c8bd8fbee456c4b8e1254ab1a3a18e06e42d7f2d68f4a6ec9f3165f7d75e9a4fc69435717f94fda32155ca96b2ff4899b2d3235ae42da74552602972e2cc232d42a21de3047e020a920ac830030632d802870c8e1019418c1b40312276133270d185112da0e436219fb28c69b1022705c8f2b496063ca28480c749eda4ae69d4474d0355aa0e6b59e78f854fc5650f7bbaf956ded89fe1e88e513c5aa569da6761a7a2aab6a161afa81105686a43bd89649dc2fc6effa9ea4e8571901d534e05dbf6fd53d2b0e3de6be5c2ee5768544debb477d7a80a3838b68ef8dda96a7543baab90bdcbd48b56a8ffd6357f9ab9a665b44a89650ef964a07ecab8b66d64563130b6fe9c347c51b9b4a430eae47597dbac9655ea3d673a05b3c7db03ba2a23e059bd3969966c6ba77585337b86cd34bb71b7f34e289c6a715155d9aa9504dadf17989895cccc4753c306090f8625dc30e104145a28b04e34a432477d595190d11dfa591177769acd7c93e2f546215f3f215f6ac28dbc8138b366e012f2d5c27c2d98eff6f97224e47b6de4dbd5c8d7a3c9f7f4e58b9ac917a76c8cca8652b6fcc563c166bf2f30312b9999afb334356c90f09d05c312b27c6f9870020a2d1458ac938734f3f70c09e5d6ab055799d7046bd65bb229a594524a29b5a01429a514a6a394d2cd522d43e2dab699a93e93e5cbe4eb9d83ab1c03935f5af4bd9104b959b00eaaf2b59d832ef96e9d832d3995efed1cc41995efe994efa973d0cb17d539d8e58b3b076fbea9ce412e5f1707b77c5d3a076dbeaaeea57330abf9c6740e3ae8f9ca7434313032dfccc9432a73d0a728c8fd2c4abddbb7c07e03b3bfbd7c29bf2757db362ced847cad09f946e6a8e782145545e04ac8f786f97660bedee77b22215f948d7c718a26df962f5f97997c5532f9beacf28589c9370626bf640baa40c816bad42432335f4bbe34a97c6be07c6da0f225e194ef7bf9825dbee1cdb7042edf1b5bbe2674db3d01852c5f568be60b00cf370038ba0d94222b07ab6a4fe9d768443a0dec59c66ee86295652cc9514da6d3ca928780e933e7533145124d1e7160e1a4042ca4c8c2872cb258995273230026d1f6cf21b6177aa081088b1e8ec080ca08daa68ac6e60a2257649184d475082843089f3e94522a2d2b8976d50542e0ac0737c8d0c26ba86266c19914f38a279a0646b308d81671812d1110f09665cc8a2633f48006ce76e818dcc0022b8ca061c50c4e066e09c21460cc2c78d043152ba49042a80a1463602dcb5815a32a455a0c9d0d5ab07981748d3062bf78713f1cd1be50da624034645e04d9580c3854308e3429596a58fa79c1529214296cf842488a12487cc024c5490bc0f0a9f2f32d2eb0463dc0a92c6348b2b89104e32c6348a29882048abf7097650c091115d825cb1892254f2039b202acca3276c31959b655ea8df35862b28c014d61c38d6561ba2a976ef15463549fbcee36b7b5d57a849d55ea38de3ebbbbdbb6b5ab95ecee17954b4b0abf9c0060c6c5b4ea78ab5b47b3640ef93bd2483c81ff09e8a7fc93a10e0da5b732cb5bf225df59c17c653dd1d93dddf6c8fd61594aa594554ab0d699b96314cb5bf233b052ea12a97f5a70209134db4eb5cdcbb1bf39e79abd5c56e9e58c582dab54f323ee725c0e8adc7bbb6ab5acd223cdfa74cdceb79ae77939f63d3fb9662f97557a392356cb2af5a39aa15cb397ab34bb9c115a2bb5d991d52ad5fc0885f272eca31cbb662f97557a392356cb2ad5fc084391d2b35a3d2fc7dfa3275a9ddbac96715b0d5ead965d0ac509b56d5ac0b24a2bcdeaf67605842dcc807dfb280f0222e81f49a1c08f5333abda77d7cbb1ee5a974aa55a9c070e0e0e7592f272b24f59175a9ddbb4cc725b0d99a6659c85c2ab966d140a97ee5da88a56e736ab65dc568357ab651b8542e5ce7910f0afbfa9aeb8f2066da799b66d1ba701f991e4b79b41eee944b6889037dc73a1904e22b7101793cebdb7abad6ddb58c079f3ee3b6f85cef4a7dce14f837e5ef769e7511090a59ee79d9c070e0e8ef572ea7b1aaa7574a8300640cb594ba6308dcc01682f64fab0fe3323f3c76a42c21a8ed38869faa0bc1cfa286f85ce2e77b8bd35bfaa3f6a79fe78ab53103207c0d1f0a45944cdea59d442660a73480ea0df6802e54944954c357b389ddc00cfb79ab5739b482e41f0ed65d72d870dd9ef2782c5ed7d7b2258e47e6edb74f74de679f47597d9b9b74b986953f9ea3df57e7af798f7eb28776f777fdab4873fbdb793d99ebbe0f62990fb1538b9c7bf7143b2ff6a08d684ee5afd6a6d77776f77777777d7e4cb1c3e843e0966eedefc39b7618f23b74a11e65ffe04caac02a5a70343fdc905bc1f03b6a8726df0d3f128f8e96cef837301538f51edfe1ea834e294df1eee9eeac91af5c4526a041493d2450b151606970c3b65ce2aa4c8939baf86b5913ce77c1115cd25262a44c8f7e97dcecbb91b1521f2f6d6cbd964b6966a546491b5cfbc1ccddee4b1cb09a042c9145ce0025449ba8143870a590a34b2ff0a698aecff3b8841f667bdb27f8d8c4df14376299c649f51d0a00aa07ce76686114e62ad95b2c42aa10319be4c5f4be28accd6607653bac8f4690e7ef01178b4b953d1dcc03189e451870a994a99924749e58acc22d1a891c709cb7432c9228fd3090ee84b20327dfa16af9e7514834c1f87470f9d1b2491e9ff00f245a61f444819993e0c50a4f142c38728d3d80d6690e94fa0a01c70f0834c03a4f6a884cc7755492b95a21900000010009315003020100e874422913898278a30d90314800c789a4274549a8ba35992e3208a41c8206208010010020c21337044dc00fd808e5cb7f2275fec86e53432d03daacc0564eac720d5c773649e6afbe91999645b47d60eb2687508f8b566704cd4a2c1c222660a85297411d39a701a60e2c0312346a1bbd400977cfd00f20774fbb0edd2c986b6b7c7efcea154a107a0e5c61a0f03525b1dfd6cf0eabfb590aac7d3d7b4ce7204e85afa3b6fbfafac8bc8fa617ba0eab55f023ef116000492176609d9b48de5908029b2be0709dcc998d79e4738ddb638e4e15e3b1e11ab5ff8f7e6ad3e030edc760e569b17030de2eb27a6f985bd84c38af4ff757938e2ca1dcb6d702fafdb72bcd7f5308a2ba9ded7f5f0882ba8bed4f5708a2ba3fe066fb6e47167f8330dca057be5f44bd41075ab569ee389b5a1f62e8a2e5ed5eeb5b6432676c2422a863f188eea4deb5b99994826417b8587281a5168809e815e72706f01dc69da0edd2548e437e00e773a025e4f0744112868f326074e967fae0c40edc594c10fc29b388c8686f26d9e02d9067e50e28a9a4d49c234fd661357dfd28f6e87877b4ebc404597eb5b08ba945871672e4af15896d7301404fb67947e57f5e868f99c626e91d35a7aa56aee6ae339432728a5a1ab7405922c03f477079a288559225428725ca01956b317bb08fb00bbaaaabcc3123be877c93b91686ec034974791660e6b3dd29752dfda1e655d809c15321a1d509fbaaf16caccea69a43a11a97d3d287533ac5dbd82ecf80ba6edc7718d82a99481a31512cae2daa82e484a58f64c08ec5ac8dd313bbf243f7005831f2b3b1ff2c91540b07dda904fa4d765d93704f8e402dcc4a20e490dda5d33a2d1c6731a819f4c80cc3625c41c53f8b09d2531aecdff959b24aa5ddb78bc4c3ba998368e462429c7269e11516346ccad6d2d863a3529a77901e4634cb9e59f68ae15a599168a66684c916234bf457a5ea4eb33471105675fd2ec2d70b2fd9e3df9d760bc0986f3852205b7182e1d59d5e30d45b02a981b10879b4ce4b7b445deb735725e5458c1ea2b560a5599bee9277a225be78e957d1168718b4b9d32c8a3036e2a51a011ef50efa7946bbda2b0c7cc14b236c74726966fa7cd66158a889e289ae51fb582af81b2d47bc05192b83b84deef47bfa5d8438fcf6fe8c293737edbc7f11f17511262079741c972c215e9f62facf8b308e2c0376675d398ebdc5cae4ae87268d4f2ed43bd7b71394e7be7d9a085e422b898fac4d13f5cd9bf83722fbc5a3e52aa57b11c80effa6cf9caca8fc0fb30c1957d23d99254016f95331dac1ca9177eb349d38ac9330885fb4fe5ab102cb1a51e7d10df16d82ee0549ff0090c7f99cff99b723656b46fae594e4a2c67fe9658449c2d13126a1eddbef1f36f0f052f55bd186f5ecfd99a6c3c2ed8feca1f3aaae1fec020d1696aad8922e89e48ac57a8a9b4b83e18a9a480d3adda3d9f4cb7c2c4203b2751b9bf4b69018844781700d79137d4aed71b7503ca38d1399ee0dc3f9bb5f003ddb1ec7a3ab7958bf18c7710eeab9333adc006aa0967f8437df9e3646080620c5bfc7127fc9c52badc7c66bd1f273081ca9dd98a92ca96860d7c1ad4515e1f176617dd2bca70f423c12d4f93c611aa4970fb88e4681c232d3ce22f45551eabc10a54fb8f615366cda31f7d1187b54249b1bb1e880a384ead6eac73c358177d70494cb761da9850f0844d27ac1fa8b2a2d87df812d22fc3dc9c217ef0d929cd54ae2993692c8506205e909880d0c49ba1c50de27d2c0b00ab3ecfea0414e300c84fda8c85f33abddfd52ed56191b50e1980550c8862850155ec3b43c5a306d5a0babb677ddfd189c4587a0bae546b4ac26ac9e6232b642403b542132bb68c5be858d84fffa940ad886ecbfa2d7f39e1ae72051b3855b4e43af5071892e2b911dfde9981318160ae3d42ee8213b4ca8dcb2607a6e3baa5b80b02b728ba93eda67cdae64f99e3b9994be146f38665e896da4d232bb6753134cf15ff24a871a71a61440b10ed4b035bf14eff6a7ccfb49c88d15931245174fa9bd2a5c5cea31b5f3e4b5d2a116322555943e645da4ad4f74fadac81287e9bce121b9a6cc8918451e5e574144f2e87c8961cca6d60f9c7c785f28514e37b9ebd885f6792bafb97d158b026ecbe62c7ef9c53aadc2b1f3a6faa531f0edfb6f5bef5135aebf3d4ef6c14e2e496ff71d05016280e8f0a28964c7a34b1f0e42807ed46d9a672685cb440c11d5a89890349530f4026378a1985d5ff35404d591f7199fb9409f536c34637c7f3b7d89bb857769455e37363e744ddb5b81e58f7a1dea69f8a1ce58462a337bb626dd4fb63e027212d496a57f10549dc0364a3a34aa3a079da0f154d87863381ef0f880725476be83b7d93c5e34123ca01f2fb7626cd1f11b944b72d9ce4660b12a98c01f23550cb163bdb69154f79b6f2d73a6f63be926f92dabc54f908be2968abe7c157b16802126881b327866979c22edd283a38aae8fc030ddec39f7fa96b2ff95db458d1b675f947f39a1fa858040146e98a2816e0bda4ef147d88b2650036216bc37768c0b96315af0362a9abf42cc39fce918b071687b245b4d035006f37205f9e613797b1a677768f372cb4425ffd4da1c2f0eb6953e4e276915889873f495d93bbb5052d88d65c36144beb9cdf48e6bb39d81ceeeda199a4152a5a99fda293a46c037e4c39e356157e77ce5a84d678b571273d04d7fc04e1420784ba20c077868ccb3b6d75e264e33fd13980fe659405fd53e217d64627dc3183749dc5e49e03e4c02d940278cb15d759682d50c112e216f4606aa12890a4d295c34a4c96c905bbc5878b297b1532fe8d0d6c3bdabe644e3758c9aef5c9211633f18e5d7845ca8a80fab208439f2a9d0b8664e6658ad7c735b89136d8ccb1c23ac9aaa59ad043dd50e5faa84dad540fba5195f4b136b5b21eea862ad5076dd6ad74d6bd24e296964820e6be7a591f7d6a01d7cfc64c3c8888b44692c2cab4641a242b0c3b51b44c5cf682547f6b4bdd01f3de47c1fe1a7d75e7acf2b0876d4105641927fad8c76d7d848118766f619396da6c4b494ba48ca04da494c48217d0f2013d888ae08211f390490c1c1993f1cd92418f52818fea44501dcf870e3277f2b50aaf99c13f71d6cc9fb67337112b034fcaedb31857a1c57c183645d1412d9efe480a82ad3b830a86ae76468eaa05b92ef1d2b95eb2671ced041af3bcff8c6db0115c0c2e2fe1218f1a5416f3243a57741c396b11b9c46249f39e4616cbfa73b0880d7af8231c7314a3ca8ba7002c9dfeb63bdea44e36b3a3bd244bd54208012c3669fc4513aa3ba44251e73b0962991ce24ac4e3487a4c5b8d005889549242e4a9407205bb7db038792cc13ab4d4b56db4dbd248a791cb182721380cbd755c73ba29b4f31bd9b1fd7d40301f66c51edc6f4e492cc0fcb485d94ecdf580969f4a1f4ccfc19ef38e5dc352c509a90813e6efdc2c123a6bd5839b816cf258ff56b6c90e6e416b529dddf1c0783ee05c0f9bc48d748a98f4a64cfa4a0dc99382488e908324245bab0722490a20004f2dfbb7c9aedf4cbf65cceeaf15d3449c554b83e40a2bd190ff2db17c4f9e94c1bd354e4825b1be29532b9348543c89f81ad3b00ccc6dd202906b03dc72509bc6eb539c0a756baa2db80894aefeee6febfdb1ad5b65c227244696732106eb7c6dd59514b91fcbc00221411cf2b5162a97775179cc83f4b8873c57a45fcd90ea5eaa7e11221bc3dd890a44ee1cbaabeb4b20c505bc4b02cbbe0faa8085e882a64cdb51c84297a53fbf4969b32e69aeb23a46c5d376c2238aa12313df13eb714062a56f711e9fe387fa5758b32a6adba9903b4c6e96d94e9fff4a8061a21dc9f26665780af8ac701ad9abc7d92941dfbcae9fb769fd1f4298450195b8e014a90d79031dd33e2448b6d49dde6ce6ed867089b05787d2c65c2f2139ae2b9412b89569061f37e426d29fd0662d8029399262aec3389ac6cfe82121c0d109958412d504afbc64aaf17166b3eb82db884da246c5fb09a0d2a2305f82cfc0d09b82101b1d435c73236da36fd9b41822ff18b2b19fc239ad36a6cb7fd593b0d69116a46e732c63e09a710da16dc6cd805b1e4bcc72b30b617aa4c248ba346e1b125a293ca37645398485914f1ba2537925b3492f9d9d81e599c0aa6a89486fda3250f01afbb7155004cd9c256ebe9d1d680cfcfed51ad4c1bb6135ac1b63775e110401c061130ca0be7da76f2d46df0da0cbd16fa1605dfb25cf301de19d1a65cfa054adc471a765cfba4bdb38a32212a5dbb8c06f08d8ae4beff15d6df88bada368ed8ad577b2bf2646eb43b952f2bc0d72d1a912da47929b7f71532461e9d2f8d5fa166de9f050e810a61b0a0ee7ade2966e561777109d24715e45d0c7ec0c7d82040b506cd6eeb0e366ab5bbe1dcb5e5343e20c763086723eab079a61f41c2aea9714f5ec6770fb16559dfd1aa4efd25cdd5b0c94e8423f62a8a71e0cd25f2153e724b531095d24775e964f862551580152dc5ee1162904a0186bf63508528a4489c6a3a0f461c5dd38344b99c0e4308d6b68d83ea97703836cd844019e59d79fdc76a9d46773594a598a47bb72ad067f9d50c9c5520a975054c435acc4885923176c36a20cadfeb886cc73541e15787c9d6d324182df163ab5b83cbb90630974d55baa22bd977fe88d133066754bbfed01d7aeaa0247d0ce328a95400fde69f0582b4695ff7bfdeffdbf7ae104af591d7a7fd02b1e8a3d4b47ff8f7bdb338051631d0a21aeb102b025aa59ce43ab8ac5736fe4aa0c0376578e14606b14eb47454719d59b43fcebf15fef4f4fbf37d87bb44e7bbdd136a07655a5799d104c9029f74205c8cd560843abea66425405922b8239807246e30d478b00026fa4dc7ce092f1eea0d7d17ca1a4fa5f34299a9f39f66bc3828e62f57cedab76d0d90516f96219d55df8c039bae667518c61861f0a1b39017c921928f80702595d0defe7db66c0dd1a29f614d2b4144a954027aae9a04705c654b4eea057b2fd96cd216f898ed62de19b89c6959a2d099be33f569ee78e403f4409b3c0a780eb57029316c524c60f84331c2cbfba7356ccc78bfb6d4cac283d9e2aa8ef466716cd010d7a94f6c8cbbb92d34a9d71ad5e9530facd1cd5844af5a2d66ab25a69d6ad12f8f1d40310d12639cc2d6fc4602dc1c9bbdc11e50d2913aad444d91ae63be001690a32abfb461e9c8731929844f55c40913dc9c04e4104b2673d97452b08fb165133ddc9211b641dab05b59c691a9bbe4ca0fb78f265ea067abe3872af95377baff6ad80406e859a9730e80e9f21112e28bdc1cfbd704163943948a0ca545085e4b0cc091363e2de3701b569b17ae157482b5cc152a6fa26e8c414ac16462ec63aadf2d88f7e3511be89191620f43150a0ea7cf46f815238a8ac8dcf7e089c8a12a4910d6728662f848ecc0c9f141b7991a0995bdbba55a19b03e45afd76bed14864bc2c58ddd5457a259d2106cc512034109c628183d3291d5f829908e21cab3486aa72ae26236a5d10b23d967ba9d75502758166db722d3d2ad31669a47cdc5cd7e6038a2c0d611983cf4ace3f0670183a25e24b90190bb6719d91fc73b81f84b88701d919a34e11ec5e9a8de63f2a2ed692a2be66379251699c94d96e7ad3d39484bf18317399973551d7e7cc349cca5e452ac5cd743c2991357bdb6bfe42bec21dd667daf702a7d9f8ba6ec4f12cd6fa26896a6672dc22ee08697181169b4d3f36cec22c8381e1dea092b3e480e0f5d47f9205de0a1507c5f68de8e25c7e8a24cac0c0b2532c92433b57229cb51853f5f6859e52842a9570d6381e5d589d97e2491ba49f2538357b8742246eb90dab396d9dad8bf8bc7917cc8ba2d0274aaa63857825ff6e9553e06d141b80c06af4a273ebf54015608d6dc6147e28b627091748c12e6eafd10b20555fbd828147626d8212a7f870ff6bb4ae2d94cea47d6838644da25ea058b6ac496f65b4e582f6c3aa269d91139bdadab0f23a73bf9454daafceeb7c9bba26b26f38b7ed4af6bde03933bc967a0b329f54c48f3fb543ef8f063f953c1f64d877aaa9eebeeafe5f6b1b4586afd124d7150fc983a16236da386d137bd96b2cb399287851a530b07be77a4edc267152c059bd5d33a66a36809c4002a473f3d2ba08758d392d42b0958f2442f5155f978d965242f0143a5b6237686ee55a3d17124fa1e9f9ba0cdd06c7475816e0a79b02cab411bd239a5bab419e9c80030021e1075f247ea9cc44393461b36c63768dfc4e98c3209e9889d10c87beba0c3bfc4f0151749ab583a4f46174a6dd421e95c279a1aea5d172f0a6e7f4cb687858a7a25022ff49295bb7ce373274c2b107a5418de8298726a11c9a24396f9563c7a1b073e2fd3ef901b7e1c2e6841329d8225fd8787d6bdc31196904f53b834ba8c0e1127a0305239c82480330cbdc3838bafce17ecdd6472348f4f2050bc0e73b9fa290129af2e979a0c1416a72e5f3d5bb4a67a96790115dd679d13ad8ba5961cb971ca2ac721aecd1495198c412022f3ebee34eab2aad0a427c9cac7342205b2ee0b48d41a169d3528340d384749f8eb92c35539fe74dc3e3cc47d0f34179a96ced3df0823c6d0bc00e4332b5929584f0ed30222484517aef63036b1096e20124e9ef40bc5c7cfe6c92d881c44d1139eb686ab57899a6164815fd97d9d576dce0758964817cda50f1e169a735e2a6c61e5ead96cc2b72285b325dd79f1bb97e8b50cb37f70f6d2613d34f7a72db09ca3d1883ef80b50deccf8a5f0add2f22185c786c399769d33297f6703430d9e782d5715a5b27ef280b25d5e476077b163217922174853d50977b37e3e9df2ec4bfa4d88eb4efa0fdf09c3704efd8d614286c0278a2800317324242cc18324f466aac1ab477debb2ce53eff6f7e16ee8d55dd8020c3cb2dedf83d264186671c12299115fffb513ea274187e8ff27df39e449059d1595b0c9c7dec5e2dff68d1002e445071985a0a60e3e4b2fb0fc8d29ebd9570a8f567916fcf35836f214fddd5cff6457fdd75c120084c093258115c6cce4044e08173af6fd8ae84e10d1fd9e650f1aac1acc2d32a8b0c87100974c61960d6aa5c5c4d75cca3b422f594db1811a2e4bab8400e8be23015af665c46006d88e5f35e45583d726db6167cd0101425106f0d22797eafa70b3f19c4cfd42109541d26e1503401149bddac56b1524b6ff61171ef3bc18e6b6ad08a10822dd4a42f3c7c8e3b4ac54f3a44859ce9170f4da660660fcf0d46a646f776c2e27207acbbf8ff4097cf4b8d3c640a2d02159082016a74fe42c608f20ea67c1ce1d24eabe76bc09754ccdbf08d14427888d9843f51c7f7c891867cb1bfed4e221daaef41bb379aa7cf6a662f2d6babda520b5996ae456fd1900ef4c229d7041872d93458badb6cb05683522777f693ca81e89ad34465739644a5b33aaf2286ac2a10cc6ee0105d672527cb0343b6410252865b53210438591a7aaf7cab16223d335469aab8a2e91ed15ffc76e4ced0eab01c696cd52531c186616ed2f8a3568459d9d4a2cc55491e44b9f0cd684b8bcff6f2b758882ec67e6a5bc99d17dcce29cdee4bed9745ce539644be85764fe28308a4bf71eada6840b3ab397739e4012e7e4778bd56f4da78a4de0148418d8581a676b879e834160b3235a7632b4a6f8e1f34c305103c7e60535a6a67761956f8c3818c79a911dc059846ccebd4976606e05302226afe1044e0ac6dd6f0f1f49d223e1ae542f30010c8cee6d40b38ad713b61a0448b5fd3c950bb13d3a9c27bf11688c054ef70303d63b338cf0496aa54aa210a7f99780cadc703443ea124e21821c1446355f301cbaf0c7da8775cfc18662d2e17931c5e33064287853739460e14e053c0b99b05da61509fc7bd9f5393f09990027ca7a961d58ff4c28be2626b0005cb6280e10c02e374b6af542bed7ea1fc148725f2ef3c8781181ada0dd04cd3da670138330d5669979bfbb14e41f6f2361ab0961dbf2c01d04cf0d9fbc47e73df87d2a5d32cffbe7e9b119e650ba52d9b15a26f26a1574b6122ded28423fa27b4712d07b202be13dc89c06a01ed3893e9bee55113c40385442a0e083920d9db0f752952c97ec062815341a987e3a975a56a8cc2f94e3baa543de56e52b43a1929a10d4710f7157cf208c3e5428339b59a2eeb0a3db46015c5d17ed51cc1108eb541fa24a528f768add65ea35c5894f3f76f17e1e6f11bfefed224a63d19126fc5e7025b06de1a442d4c2d8ca82496fc03cd5029f5d45a4b23286f6fd48dfe22eef0dfc33e88af51eb271c551267f34217412c62c52b42d607f527a1780755df0050a9d327dad9ba0b9f8da1f9b3f8f80fdd5d2137f65def80de147ab3f65c3071600c665ce77d7ae7570b3badc32a0f6bfb5cce8d091243c393f293012d46d33546ca75887c3c7e30968e7cbf0d23fabdc0ed3202caffab8afc53aa86ab1411b42a1f547f5562c7aa78e0bb09fdaaa56097ba5e55e79abb09b4c4632b511648afd211ec43c6c1db04436757bfa257c5d7f1a6aede005389da3fcaf4bfe80b7de53fbaa529bf80ababa420ee0ba4fa7aaaa75561c0b7aca731895f8b6316c5290058153a369fa161d4f901b9f6dc075ee0ad7076e3181756dc1083758bdb9e7baf6d2473db712b54250db6a8f085d4d002eb66d16e46680caba9c57bb8aa0f72db97627dccd5b1fca6c67f38cd988e6968d3209ea6a1c13b73442c6081e418752c60dbf17d7a981cd32c108b0cf023a90d36b1b7b300f74c818d17575b9ae12413fd129b1fb7c4ad9c339c0fe87ca14978f910c2f9d57c37a4e4cd4422940771316f8ebe72f0e0aead008c6c316861cab278726d63b55855d7caa3da11fadaa754ca8490737f245e1b13389d9e3b27a7899fd290c6b18590061962851edbb3318f50bf2cc8010d9789fa5d2fbfdbbae0d909e0229900ea707ee3d32b3dfc5dd618bd29b8201180081624680c31aaa4f4d92a48f96d9a74f85561e89df98b847f259a58cfe4ddd974115f12e93f39a42fc789e59c1064a4eef240790914a653c103c751462ce2127f2c221a41d8dd68f932f3db87d2c5ada17c1a5f9caba13285da0f76bab4f7bdddd3be444ff2f5fd0deb8f2724d99e1d468b707e30d073c6dde58ffdd1fafc49c7a7eb83324f955b5132ee88f7d63810ffbdaac23f40d69361a11617e1b70a2f2d085aedab4caf287fd0bf3740f8dfb70e5e620e349bf96b63a061b3cc12f8dffdf5fd9585c657e32e180f6ffa2fd4036c074cfa355b257205d5ffba1e3eb982ea7b5d0e9b5c49f55357872d5740cf0a8561c740c43c75283a8a460a0f7e5c393ea58ef6ad781aa9bff36d8599343cee6d0536f6f76d6a59fa74d17b4b500390c9a451d1294e1129a383b7ae041bd22fc150c9d0a95727a13966a7b29fdc7a0d265a00f96871fe0a5efbd2f995bf2b7f5678b44536cf69f681b88c35d4fc47355953a455754a4c7b78335bc3ff4a6a097748f9ccb7b3406821a4aff77e58555c6a3589cc5c162aa2a03456171c95a479aba202f6a63efc52b221ed50776475227537979eb5245df898d33e72dadde2ca73da55e7fed771ba17ac5c061cb03e7c886e32adaa9ed4a4203ba84fab54282218b9d5baa363b08253ee146939a2214dd7515105c2c18bdc7e4c7e2232e54eca02f529235cc362b6c730f5926593421eb278483c6600e3b38a232c618a43748d76d3983578c09f8b2eb83dd3202836084c2427267e957d0b99858ca3ac0519b2859070237e0c5cac84c7f8a7a1bbb005a7dab00baa5b44b5cec14d39f67545531d4f037039f7db9a62a895ca8d00b78a739d5cb022b393c63b492636c5e19a0a41c728786247f48ed31ca6640552609b7aac48d52171be1e077fce7330d5a5728107051748da417470007cee97486d618950dee4996d129d0683d7d51c50c70e85b4e66a4843d1a8662e0b84bd8b602016fed561dca70e39ec3f8c397f5a0eb8e99f5f774aad9682fa454852409bcb8be00e4b9f4d548c09c68d038d037c3f920597cd200d3a30977ea3e444157fb56a7e19445eedcc8169de659e6bebb8167fce7025a81dcd507ad8f7f61429e217727ee112bb76501a87a5ae7c9d85398f9703d69f11b59639d374ecc18981461e82609777f56c40fefa237fe908352b237444be98c915e9ab7b48428022b3c6691ad8ca357f6234bd96eab595b6c90d018b377a01388637cab38164257580bf6bc8578d2aa5b625daba1c174c1b4e6944b6ea1fd24d244c1f8afbc24f3bc3f05a85dbf3d5bdca0d8213fdb33558e40fd5992b8785b090adf038ceb0861de5a97b4d450ab3aef1e9e6565231dc29f489d779050f30f14bbdbcc2b62d020163cac9f76492dcf3b0d6a5fa6f66d1789ccda9ddd93cfb66962adc5ba1b71b255d6c1722ddb64cb1030500f1e26a48f383b6576b7c2e3a0656fdebf0a964dacf5d73aac97b9f72bd4ec525646d0efd08141d10195e0d0e3086798700ff96025b419131a627595e2d4a6b551832b56128e1e83d67cc3351eea256ed9201926c7501596c5dd7e45c4a4406bd50091c132579842c651206e0fa91d4c12105417cc7090fb082219e3bc2342ce67b7349f4dcd5eeaaafb8e8533e246713ae35311b88a936774d44f9d6ef11cb16ac615c52f2f163d66c19666647d81c4df356826ce123960410a92515a519c9a06e9850633d3db1f226530d103aa6c4de4a095a6a14f2c03b5cb95ac2b9fb31cf853b4b9184412137a48761839b9cb7bf049d15e9af5f82354277a6778906df3c4469e919c6bbfa2dc3fd06fc348a1ea07bd081747de2a4268d36ee7904f630f473557912dc5d1f255deeff53a39f1902012d8f25ff41884d8d9720254c4477ac5c450f1c74b64920cf12412af135b536c4f76e85318763d041e2cb2fe0da371940fff5e0d1ae04bb0398781fb1beba0659184f4b5e6958215169bb001a2cfd358c8deb03983183a47eef27914cc097e015038862d011c0d12e974abd99b4ff2c6e5c9d8bf8bf4531d1d718bea2e9215da0277163fdb6cbe3de6fc40e1ec31215a9cb2e7a3e7cdcd027db9227099fe6528a4345286d928a166be0bddb56457048575b1ecfdf1a51d1f3541f623bd1ec45d3f8985961aa3e1a30c5e652c3bcf0aa88641151427682dae16c80cc75049d3a4134af18cec30b2cf724cdadbec03aadb0e20d6375c29248930905bdf3ff2ad37384953d29cede57f3c9132c70701d07449a26cf9bb02b1f0423e8c64b062982fbfce66b2df60de9a7c5ecf7b33d3037de8fe4eea2e552d0f3096c01cb6548d3283c3cd239f2f46b361a2051070067bcbca5bb647983bd7adfb7438f61a812225265509c00f708235305b6664b69c1e31e6f10a0e4f162d1d3e67cf4104dd61723ff550ec995bcfa5eaaa6b20d63826c967b7b3aed6da76cbd7766b343039e16916328ad201e62fa6b6de0f3b4fe06c8bb3d80ed9aa14b3427a53bc361a3ec632ca4c35bda1c02ff71f00ed69cdeedd1205d2eda236f5099b07de1592e7a48c455609d1d487d2bb6ffd8b39c9f1170a2886b7c46fe9f6cf1de0ff01ee85c8f248bd8909c4f2a4f39b1f3721555043af0311e9748fb9c3fcd11acc84a89c5f1c8b7556ee606ff7c5267a4ac759c3e68d48fbd4a48456fd94126ddd7569b2d9f2aa14826f9953ab4c7a78f362a85856952695712bd1be82c999d90a9f0098549085feaeb1a95e835149535a3447a1a6af44f260a89f3223461d8f74b8c147a0ae1dd8e2634f4948ce56836e10723fde30731223ff8da72e83a50fa6f74bfdb980dc7cd4aee2d1a2314116fa8ada041a2e07881a41c0d2c6636a56edc6db21481ad64fd6c3a19c1a425b442095f128cc168c392dd6ff734a206e3b40b4f6796db39f9ec74ffb0b6453bced906d059fcce8ea8d31a4248db39be063b185988cee4c4700cf9ef4bd758357e1d71c34bc4eb88f3d971cc6eb3e8d549a2714e90dea86e918312a78fedcafbd94548302befb55ac41cdb566e92024c7bb5b3647bb113c3df994084a6bdf2b5e112cd87be0791bd7296af4258cfaf3c5537ea95d51600b32e18e83e48793b4a3db3afcd824aae54a0e4c30bdb13bc38f58c3ef3e4bbd3b33de9d956bb07e1aa448d383dfb99ea9c848c4485456214b2708e93490aa8f4ecff9a0f606af7624bcf0c6d6688e5089e64b4684a66e5d2c8dea40a43b39e21157e23758825b8724c39994b288065e13da040890ed35622720a033a544ce93c3fd96c97ab20d1b6747f892704a6ea3fc04bff9d4c8b92fbbbc42d94ea46d0103ab7c7955e9dae7a3241eb211630b481b9ea91382f7201b8f875532d3fa6023b5ef9476f7cebea381b5ef59176c5a69a17f525778e1ab77b486bd12bfa2217cd1d0fe4431d61f5f3bb2536699a67472219f0438f1cc4185e8eae832f6e70362cc46670822fae3d6f10aad828b65a55917bfbf631c5aef1b00cc1ba4ebd8bfe1d33fe540cecc41235b56fbcdbb5cdc202036a087698941d0d0ebc4e5b445daa972e84ff88d3df9bab5cbbd64221f3bd997c87ddee31fb151b744bfd68dac9f28eaee9fe2d961ecad9fa1800b89545020ee473efd56c41164e913a4f91da3fca4c2e446d5cc4da47c6e0a270a7b48b2c85174be1af2fa1c00c602d87469f7bd738947fc5abbe9096bc89747e7245cea06dba9b3f12bebddd166777e8145adc7544aa2f6d133724545203fd5fef33815586eafb1bf5ef152c2c1b3952847da893f7af231c1ba9e54c0c1f010bf0c7c554130a915c07aa43a9b391c795ba244d3e89fe84ea5052a617dbdd2110edf640e70413cb1e284eb279af8246247181e470292e249ae89023470c202069412d17a44a6c0d82c764b8294e9bb324027839fd006a900214088feba4395f19971dd468cf75571bead57f67ddf039a7b8cb392162b844fc854b3921fb39371326b197e69a54d79337e46866e8b0ea38f40b3cc0ffb87f1373f83a2ee78e253e1cc0cc9f0a2eec2a856d60105c2c02f5385e95bf191348e5c4aa040c3523b4d208ff2802ead3fa5f7a24afcd9c1401f24d3ffc4284aa875c69a2d23571db711e1cde63604c0ee11f7f86512d9c8be1fd09ff85dd68c810c885c6201f7f6e776de36ec93e77e6bd07992de5ac8ec35b3d6ebab303f68732e883414768a447d1e6f3ec30acfa0ae3ea57e028e4066ba4ad5907642109cb205752ddb20f11a6787851a7054c077baa5e4502abc67325bb0ed40a5ca77af7e49bfa7514923ef5c5ea17ce70647086384534349000307bc531c33054f0ca3c1f87ba3b3396e5b24711624c3b93edcfec4d59c7b9bfbf921582c53e9a4ca49557604691746b10cdd059bea2d991625b401f88655254305c05e43bb36415a5939f64f7fba89846cc3800280f658628f2619453191249fa1aefe28a92c64419eb8fa0cdc27cc693a7153c44d110299fdbc4f0edfc23c976d16040e9ad5cfb4cc22c009373e4e83eb5609871776f9e147dc136a446f62f12bdd22e662dff7702786dccc674e8c728befa8f3172cb821fd01df418b12d59e9349bb153a727f96ba66432506f5ec15dfd8125096f2037d7d031a05dae977a59677bf68e31010eb4eeb5849ee6e86a123c9bd15b4177e29686cebdccc9ba46555bc1d593aa0832f0ea78469397fe8247b49c45c8955dd48c1a37df7b41d3b32ea8b2e0ba68b9d78aa803847b98d733f6b5bfaee0df9be8a4d861e4a76206c2f0b7d3ee11fe43c4a57cc0784ff56ba54f95b5432e85636915e80a17215dbabc418348b897236d685b00d91145c5b804d0b7b1a9e8d71cbe5b3b58718c7e2cd6f278b283d5e0ea1aea983786d8baedb72afcc76c9053dcda13d889b82650a37a9f7099e90ca851f1fbb18aa55cd96ef0ca54a868277b4fc18c6d1de669c407cf387a610de86d39e0350801efb6ecd8c318de9109c18f311c0fe0fb7e531220a24352e67e69b3eef7e3de973e70cc919f96639b08e9ed69d89b6b3cd36b40353dc806c861e5a6691e84328bf402040d7c6681e766c7455836bb07b380da18d0809b6140b789f524f71814e0740b023caa5d90438ce3b4307247dcb0040001189c8d1d0c31957299a3b41f212e0da55fb6a7db8fe5ff20d37b4d0f70fd61cfaae2be2d4bfd2d26eb2c63806c269f73f953e64bd6e1304ff971d5b81c53a3eafbc51431ac7c304d3f1f03b64f1527bb6babf59bbc69ade66e7665beb00021fe6da6ebc8a8d9083e1f4e7da780f380a480a2f020a52a74b2b3b7c748084da5e1f01e3622a414e71c3e890c2a4dc4966a275754ebb27df5f144c208dbdf85f46794adfafa4fba6c03a125cabcb77cba4860997b59bdd8653c8d70e1939722967a0e1f4d432bbf02601d2485b500f18f17e5f4c5d64403fe095e5a4fa493594ce8da56f44c1cac22ac1977ec0046fe3d92715d2cad715f9d4e43ae1a087b6a0e8f0491bb8a20e7e9adb9c2b1529ac895dd09f3384f3b3f319c4cc23eb287eaa3cde75522907afb8fcbee88d1fc2c29d0c3515246e5a01902904f84cf88a7a2bd8adb7d03a743818f03a791386a09445721ef36d0a01d108965fb360622c501b16e3773f602acdb35e4e28068d6d57b5e66fef9212c25047429cf2ba54888a55b53247bf180bb2ee4fe9584d0700597e21b37a309cca180337c9b4fe47305feed9a83b8042ce59bb5a26e81c5a70100930591ee8e990979e0c3e5ff6d68e09670edbdf5b5422c17f95458b47fe54838c19a835116fbd8cc128e57bcc9bf4478e15290643b2925099cf32a7b0a15557a7a03083da3651639454344a733c1aff98280708ac4af818ec082388864ac14fcc80b0d3defda759c72472a0136b225f30b5e5a8836d13a46c5b7da6eaa260d086abc90dcb13b7933c40c5865d2df5d16a76e6020dad726040a1483b851e21b9f13eb096b9be76bc539e84e83612a017a7f51fca27dc2dea9e6994819f683640bb57150750b0d3145c0a14067df60205cd0d8fd5c3dd03cf457ec208de4c8c72735306734313b610f21798190e75014e260707ffbe204eb02fced33d64278f1903fd338b8922345f409357dad76c1261cc95856b11f6663ba2cfc91af60c64cc93970afca069c7f528a1e0be23b2b1035318257c27abdae814c9c552c6f1c64f1a10edc88e7f881beaf37701852e58c4cee41ff01f55adce87c214394d28c7a4e886831792c4f99cc341366a659572180de9e45722c0211fe17283d7d2e6abe182a4c0fdc81a6fe3d8e88c280b11d124e2c0956c925cb7ccf879793b51988e6e69d918c78706897d57febed03d76117104d48c2a2c586225acb817d0570b76bfa42f53ab5f4d4eb352882362a487a5b616d049bfc038bafd446307641a527ed054d212a1df50e60097d5d4b3021ddec5a03ea171dbd3621d90482aaeb61752183411e08e8544a2661400045ef24e66d9c73ded190aed588ab0a6ef80618f17d04fe6295091199114b5ea7ab01a90b99fcbf3adc89931730de0a03781d9b7a2c5218e0f9a040ed5ef7c0cb818ef84d802efd0ab0f44d605b8cddef87075c05a718b3555a06653cf82ad02a23a4f7db59b3783882baad4e5be5e644a943a55ca497848c0e7a2819a46cde9b769d470cc9320e93473a75c905345b61cae4451b073cf0e34d47de024578fa220d135f23208e06bfd318a1560edee1fe033ab8c93b6e6450d261948063d203e84483d66e6948860a7a8334b3243b7d744605b171b1f15b5d40535299fa2219501a0d21b8c65b6c55b710fbd0396e5665f4a71343d5009d70aeb270a4e00fe5f64b95e7dfbb16f2d7eb0c43fc505b1be0b90d5db421aa3da3535890e8cb4eb547bbdd65b4abeecbd623eec23b80733dbe668df89b5110508c8511a7993a75005350596d0d46b58ebe486c151b0c035391f87d39c308a88b5c1c713bc82a71148beab830626007c74e1155a05de60904d78388eaa510f502513896b77dbf63ce942033621e39f63e3b3d7268914b460c0e8da8dfb010316e467290fc45de79f06a384149be830aaad14ce70a9b1ed5a69958d41e295a417c1a2816b3f0822d1c06499f5598e434d5c42fe5d161f64f35183a7589214eaede3aa4d0cb9e5da25f117e25eca3fae13ff76f3a1f4f431ec92ff43a4fb123179bca4e282b37d68e20cc11c3b3fe8a0bc1d43425a012a73aeb1b4143f75dd2b4474d5852ebd1e9f4b8842374590c4b1c9e59f90da3cba63cead7288d89c42971915a0ffd71ba50a74f55853ccc206fefd167def4f6a1cf617c641c56a3876d1132a5b5cf6f2a4a3a55f81042762a72530280d43edadb4a10d7144905f360a427e436afad7b43389c3e6df481e95d3c49ff9d6ffb5051ae7502608b012650cf5ed06efb1fa82e5ffac2eea48fca0769bee205beb28aa16c95e84279d2afc8dfc2bee8c0cfc4f67753a2ed12c64adc72316869c8451eb059eb9533e4d558970a5726a24c013b919c1e1988f8ab1438817aee0c962c1001686c925be9cffc3f279085580b8afa9ac18c0d73b75e0370e248d94ac9452a435765b2dca598f95606f8825a202d04067f395530dd5339c5a6648ec1c989d83ad60b032428dd0b25a267fbda445aec62c1d147ce2db09eb44e3d008880af2369fb784505c2ec2e9b9ac324def0039b3d695e6f57d5e70560f58a46762276338d5df3827c039411fce387858cfd9f45e754d8ffcdb7ed7d54bfd813719d1eb761ed1627881dddfb2442d40ba5fde47842602baf325a071357ac4701f6d667442baec2ddf794ddf101e70fb7476f63c6783f992b9b92cbe418090d0cf5c611db38fa3b044b1ab90fa730c5019dcda33567e005a347178c10cb5e91d50e89f73ca399e0494e6a049fb6f1fbd604b002ced212f44f7a881618e480df6556f7b52b853a0b50dd5b4de26fe8fdaa710304d12d0370ed84ce1c72f815980f532bf86ca20f935f9aacb5c9a3ecbc7f6a86d6119c08665695a28157d29c703a6a9ff3b48b2152cdd475eb07b4a0d40778527b1e050b774601f570f2d9f7082c8eb70d09d92ce50dbc6bd6dee09c3f2c28d753e7021fc62c5b57cbd5829b7d24ceb6c27437d155175813654e845c03bc11383ef3358cfd5491b0c1c0a79661856bceb1fe58262a1da9b45906dd5dfd326b2d0bccca857a1aa2b33abcf5445d976459b11f571784f2dd638fecd1b78fa9dd9f6fc732d9ce29b424dd0bb3ab542fec993a6b6ee37118476b890604a1dcd05c0a924e7903a19bd5d19f86d399f98c33c71d0f6e10b51c089dbdc48404238eff6cefd05d2be4f4d4ac5b8cce401b0f46f4e89db4ab71a3738ecfed3543e3ac01eaa7f0052927a52523d6248eb2721ca7c850360ef91be7a1ed9aa6219ee01ac028a36376af35fb6b34a85a925c61682386101c585eb4115e38d74f5704ca221b244faaeae2e7b6821617c489119b56ca1f5814cdd8315cd173c8820174f3ca7e3406b136ce6b208fb9112d2a2370dd1a08788e6e68722d4464ae58d08e6f444bf004462c254119cbf414848e15ddf280161dc5c7d4a8be705bd71b1780c4e5b7256445a4f254596eeaf4b70935a659499602d630b19e6691484494841235b6eb58f40dad4dfc12da49b3d3532a19918cd2ac50a5396ac32ea7b6c81cf472cff2958b8e357b862a51f332dd2db491bbd5e8900143b998b9d481227e8252827c6987d1294819e15d67a9e5a1aa7be5c19bfb54e53f082a092212c51010d2785ea6d83ac17cfc20296cdd8061a08565112ac057fbe6ee95d9d90da5f04924e43b51d545c042a8e60e601840d88c23ec897a31e7bee8b161b53e5990d6cb8506f9dcbc45fd76192525000ff52576256d1391443836f3138d72dbd1c08669ba1f22399feb5dfe96cd5bf89346e1b2a53ac0fc821505cc61a929a7770a8455b3c0cbf1c92965211c7824b9489d847a74a547d49f1b53b3338ec8080a12e3c031a249914bbaf66c0c014cb27905d3dafc7f4c11fbb1b115d12f9151a681432a11f6ab5aa3e82cd77743d01a94be4d245434f63324e33dfe8801b6d3c19ff27c1e6d64ebc80a43c1e743ec839b74d17879eaea7e166daa2eb8530beb0ed8a05e78b443d74148fd29966ffdd0b908320ff5535111fd3f882f66003cced544a975855ddf811bad68f628e636d5a688c38f130964f89f67415538450f3c9e373522ed08c53b4e864f7320eee659a71777233d87790526263fbfd9a2c04a8f5575fb70e89b376d4a1ccc0bb30cfb6003963190a6a986b9db2dc347d968fad53f90c7fac1c6de4c98ea34599e487d547bc86400b5e825939d5e44403b9d78aec2637bfb39cfede37d0a3f99a048861ef79c301aca4e9a7a3efc641ca2be91b12ae9247c58a16abadf52dbd39749093b684223cc4b46b136977b6048c55a431e33d8c122c3e2260af58b88ec7a4cf36990980ea0ccb17c98f72c52624906ff2cd294c0d72e55832ffde3e784ca22b7d286f19f3fd6811808e9e1cb526a9b3bee2d8329b20ba9665784af95734de544c475160a3fdcc9c9ad3a015d68d993efcf5d67c96f15ec4873020d07c16988975940b898dd94c33eece36aebc921850bd39b3cf0e258bc3d7a5329a10675cd96061d6afd8654d4343a66aa0eea171cf0c74fc7f4fae96f8d62cfce113de86483f26f7ae7c4ffdb69bafebbdb6ea1b9b2b047b28bbc5ea14513544957d35b7765bf657066e2697aadf7185f995ae0f0915caf753f4c219427bf72f2708e6fbfe23218358f6cf679c90c2c5fa6e7eac0c82f861f605a3a00aadb677aa1bbe226e3ae740167a07f2b1ab0d40002baea92cbd16c1d0a619ccad4dc5b5bb1e698a904f2e67d4764185046b44445f0c8ec0f305c6770a6118b6aa1548fcd93f89f85014cc8e4a76ea3cc7649140b13165c926a172cf0fbaa0c7fb51d72d8a8fffa84ca73b8fd55883787c556e0250cff8080c7b76e959439647abba3fdcc62fc27c3a1673041634b6027f5b27509ae6a6a8aa93e6f03eed4f80b1cb548236c0cf329760dec09fc8f94ff1c824ff0a9715c0d05bcabf182a84951283da4c07de9fcd7f442520568b436a58cb3e584a20ac8686e4a9967eb09a514d08853278d5b0b78afed81548982889c010d5e96d7e040a00448043f00f66af7367ca7ef206a0e09736f271041aa744fc7682cc6af435a5a03ea5b542168cdd98f2da6a377a86653e8948de0f2a4e87c65e17ef50b446cbaa85c3c585dea00d19c83058a97a3bc4340945dd53fc91d9cf0006ab46c25f17a38f5932afe247a9fbc57e59b2b69f0ae1be713ecfff7cf9887899de58e36c586d5502acc3c0a590da535be3e53b8065e7eae54ba705ff5e980202ec04b6e35959792621026f23404a9415f8cba569d88dffb812a7b066a35f13f9a23bd92d7dcc7ca619fb4da7d3b74a43c87d24ab263de918950393592c03cc5df6ffba34186885a9cc898e77f5e52dca15035e8f28272ffe4e98f3c61cd8ff7f471eae4040f9daabbbd6de1aec16f7db74633861b112689dec187ec9f58265ad2a4a0a93cad3b786b678af93a9c2e214ce722cc2ecaa209d8f1a652cea08645670d172145262516188f19ce6608a1583574accde37fde83667aa4656390cd8134da569baf02dcd36a8bdc2d0b9e7a69bcdd9f8d87b31b6011bbbed25c0457f52039be0cac7b0da2f14eeb60ee09ed789b7c40c3ffd7a67a2004b3299feb2d3d1e10159436965770c77b825a4e3c90015dae1d817324cece8250aa4287f77e3e2c870569ec404851aa31a80b346877183ca8f3586b1a83eae5c7f50087132bb455dfc6ad37911638815c6a19016f9de9def74083a73c2be5520b3c0a34c6769ba09c07b9a3afc430cc78817731403310fb0cc5ed803c5118e8376b4fb12768cc009df00f967e833102b98ac739300156f3276aba276ac860ea35efe95f04ba2b07bc5b19d5d60bf4f213bbe5550c946ecd1481ae428ceb469bddaf20f3337076356111e332cb703f5d793f8f67b067514f1a90ad67005f2470fbd3ceea21910dc8828490cf065f1c80f4a1c53964b66de7d246ae9715dfe94f64d6fd6fbae2efc430901de9a6a3ee110a190b06dcf8e6b1b7ff223db6ff33e8b5c21d5341b066e47dd0e5ed077c09689659023eed5ceed84eaa569cd6800fe7671f398a8e91e2bf160c0c66a3304ca67a9fa9fedc447971c50d469833d27fd7b57857ded4068a96467c6daa81a4fa8245bb5a449ecc6ee586e1b3af73e8a9cc797440b5d383f63024bb575d19be4dcc5de284a79288bec908d74e4b292759729abae7f8c4301651354e35879ce71de916532729fbf38bb730927bbbce4d5192a7bedc04101714297dccc0a9ca32f154f5209c0193567d1f6423836c9b012ba56c2a10bcac7807e38d07392692c45aafe75dbc15330c8ee5f2a560d35bc42a2f2ab21d0b7c88d5529ead63a868013247e72bd1e6d7550903944e80d32e76ba7b31ceda80620f1cdf19e7e738a6720b5b1c9e5356c3bf98230dc330b4cfe61163e998ff66604398c8b095c3aa0b649f53eac71e8c08bae9514c9b7cd15e76478da1211660aaadcbce36f5612032ff1154dba7994f15f7e992d81a19285e679759c48cb49676b9ddc7aa0f2e73cb2f77b4df8dc0e59b329a9448fb3f0683ae2e961e738a54680276103bc36e101d5dabcd740f5d961891d0b5abf70fe296899acf328c7eeadc10798fefab6ffad195883b191be9e58fc94cc93992a82760c852096240a499741645ca3f210691d112ae82f9fe8159fe1fa37aa6d2483935e803f2554e7785857bafb8a03aa9e59e4531cb46a25258e036cd57db40a85b54b5aa8b4223a742be9e527297853b5516ba327fc48534db57796d5b8276bb797a6e110a5ec2169c33f91c552a9d12966c3b6ef8b23c123ddeaa0b5106e52e40baf97ee050a0d25172e2e32787b9d3da9489ba13c1d0ad53c87e6b5f85353d79cdc820adaa11881b6aac0525f2bb3af3ea43be3fa3c497624a74cc3e01183fe8ecf65938c46537c77999b4066850c9b7a84fd162e22c5fffe33cf6dadd96435de5734e4f94d523e0f75c2f912f6e4a54fd02250490ad520702c1628f4321b3c4daaec49ef52d5da4a9d6c4ff11a8f3d7a53d7e9c6c80fe32dceaa56abf353c7005a322679b6596fc8705893021fcc624d9d0407a597784de62dcdf39fcdbd5bc0f17031ed9ec1f94e073b4756201e3eb66945bca37300d7cd12b594dd7035c73de8a2c3fe96aa3b4cffd1dda35ee74a7f45ced87a88d53f8fc98460b1e82ae454e6098f861161760e82825d6a6f4927f25415f99bad5764957766bdbce516f801ca45df54139ba97e5260610b767c497635aff69a42d5bbd9e10fa774a305c8c91256c86d8d821a97df1f3eb50d8f0f18e3f39730b35a2a96b9cb6d99a875018da4d14a90fe93f9110010b9b58c4dbce26bbda24b365ac710546cc892d0e83ea292eae5f7706b941f728aaea327a82bd83579a143d320c1557a64f72eff04756d91051515802119a064751548958afa9f43aa965bc53df69b55847e3dad49a7456a622ad4bbde9d87007542928f04f1d8ddfea776b80ecaec8b7fc29521c67c65f718941296c446abf0541dee3eed81b695320b2e14554c2c31cc0890115d6f93f2eb6752fb934dfdad6166538b07e2d5c574b029141fbba50c6ed704fb43fc435b2eba21cab31002d59381330cb876cf23df66cbb9d4a9166bf7e7a52273d702b6832c2261ab82238efa24eb1584a37155b019b9743358a32cad69a58c9e842eae81fea1876d6aff13cc495ec1732f70196bf40bc8c92178ca5c3fbf3dc8832e5cc364cd0857ed9edd8015b5bd50cdd74a561b3d74c385421fec113f65cd8fec73a8933d60fa875aaeb22571e93e58c6d8c1b7e3497c0431a89494e4ed0187cc38f6132cae03abd332f246e334d2ccd6c500c9bccc3dd7b3aa3dc863fb2774797649984a90b6a097d1602357839dc243b56055cd828aabd18fdd6434ee43990ca1366ae2423ae8a2ab813e7d2aba7e99bd3ac2ae5c9ed0c4198b14037a7faf976ae98d2e57401a13b4ad96749ccf113d11e5c552262a178666c98da46a9cdaaad022a863c790ac6e3ca68b317f18175a955a7de6fb46f2b55f4b43d454fb4799a3f38b64a7ea787bd641f8ad1500e81c102cce8455cdba71ed7e660d4bec8f6816c99bc0b69e2de6694b55745cb2d987ece58d5242ac472a7a8a4688d0e6873a8127572232b0fa38edc0742cde6c285560a5d0e03934b5303e01909531283918bc183feaf304c70cb0878697424fbcaed93495f3fb9f3d9555a5189b8a6846e16c51b1038cc4d11e7160a775a41f6d976834b1b50f0b9ecbc5b3074c69551288ed48d403cb147d6131c11b3e6afb82f22606b6c0e703546550a62c527d65642a7489867a286d27c496a267c1a0ce6e53555b0d9189a07ef5480cf6ef8bcbca70a6676c3f3e69d6af0d9f0e1bdb4ff67fd14da6862135a6e7044bad5458b6c2338b7902e2986a9f24cfb56c3ee76e83ebdb71abedb43fbecd9eaf0dd0fdda7e756c2ef7e789f3d5b19b6fbc3fbf6dc4ad8dd0edfb7772b1718f675fa19019be02736fbf10daef2efe5b5bc368d5892848375eea5b61762032eb497487981056c54781d1c992a260ca908f79ad6731ce14eba98f78e709d13cd5ae86266748c715d1881e95fe5ed49ef620821a07a3cb5a686f4872bbac325955839d7ba49b950f504057f19cc03d42cdfd85552f7d56d5544356c857fa84dd34a7409556f21ddb862ca267270fb1fff026ec1d1707571183f9db0b5fd069b9ccbcb57b78ad0fff3968076fe7cc273ad4eb5cc055926679586676e596addef5c0fe2713153ddb4aa98d5c1824a88994a2a0458acf01d3670aab6f34fc51301fb2c6501f5ace8139e1555c20cf875aeea62010d91a9aabbd748a78cb507affc3373810decaa0d1438b9598b09dcc6b04c54c229fdbca75691b1f14e6fde173924ac1c4f04f45cbc73e78039fb47a5f1c73b0684cc6489e9589e3754cf0a8be15ad8799c07b15e3f2a9dcaa36edb0b7e241e2d663ec43d18aeb41209885e664abcc53a19e2010ac116cdcdb33293fd2ce3480a1f7fc0101dc534ffee7554bc678b48aae7214845fb76a17fde1af46e86fb941a0156b3e96257ec800cd5017f2c8d47e42b2e16e05a7b1bcfbe51d7950423a5721829e66df86395bcd1658d295c7941b3221503704ad36e202fdcb252f2f8a0d913e2f93514da086924180528626f6822432d2afac56e974563bea0ad94fd96e6da2aabce8899f22206508b0096d5e2582d50199a8e377e1516b5ee6b12233d18abc0f4f8ed01c07141361820855e8ea53b28979e3e68c17ad7fad5602e80742f675a89a9b7d499040e8af045c518e25653cae0cb5f52e5f55ddc0a2b86e99a340c35b0079cfa5b4824109cbaf01aa3ac9bc0abf21bef8f51124f5623dab4968709a1d6a37248476bd0e333595e274489362ef8ed6d4306ba432973aa2622e298941e81e6950f4588e64f457ca28b5855a80fbb73f5216a9e59f268e57dc83042028b0a302c03f74e4bd568c53c7b41be1cb0258d6a2f2dfa4991980a8f9b30379aca64263896a15c2c62f747470f0eb6ee2c240f2c4a6c649fcdb319d2193704a56dbfd5a9cf241e4a54a1ffef506227a72c8b0e9c1ea62d291012565db244385bc2ead076e84807a194cbcafb8864e51e7665863925975a0baf81a0fc370b244d20304e382df509a7143f1df8140b5bd4db05532c4e4077bdb4d4a7787b04cadc95df1a65081d17c4531ace41ebf4d1ee727159295b8350a309f54faa3777ea7f69227f05d384cccd935ebfc403fcb43b9c71f5c64b6cd17ab0d1e304d76347c5652a3ac9712e29365c4a9ed1bb1205e62e728710cff1c1d2880245410110acde68f365ab244695ac5a1aa2c0b8b3f16d49518411ffceafcf2dcb388ad024e3229f1351f4d39c5aabfc2e5da87d80396a0611584beb560f07aeca7de60036ce2c4478e5350fa7e7118c73a382acc771b5e118c037409914cc79deaf5d68e79d66f486902220fa5e88a1612b478f131686c4cba261bf5a448a7fcba892e15936142d755c67d297b23c94f71cd58a9558e0d750b983473af53a0ea60d52ef9539d4d278c6fb91f6239c18d15ae483a18c9495178a7fca61fe9ab355ea8203639ee343d052a705b44c62ad39f5b0e8664aca77c2a270e4681212bdd5ab699ae96c750fef5cf2a7d80aced4978850e75f886a343f5fe2c2ddcd512d29dda0007724efeb58a1b6027c098046b25d3d8a4686c00bae1483d1f03a46945bc87aee0254dff4f73f82aec6623f5f51cc195876be1b91f83898ad3dbcfde73bb8afdfddeb7c2a90f88e12d2b661f7a8f624b26e43105f5cdc1b58348a9031af3a5993c2ed0a164f9c438cb612a03cc25e10ffd67ab40961c9c49a91fe9c22ff10ffaf3a0edfe38ad269107d6038f074a868269d46a61c921c8232e86d53a0b25058492253306de9817e4b79b1dc780a96f2fd4c317df98d6612b1bc90dc7e07acc2494706cd4fe87884878404f6d12fa45df59f86b1e85f5a90236d2ee45badb83848d0d6abd0d833a6bef394b4e32a5c4e294a2e4ff8925022a0e38459d657d471edf3837275b3836f844190f4f25d61c230e013a8f62527d10f26e5df16198cdf4b04e9f40be70f1b234291924c035d0eae32850c2bb9e75445e11a2656cf931bea829a2211147b7ea2872f275d676181137e01912796e89b9e2cebed81404b6d29eb88a2a5e2df3f28f9f78b25ee1bd7e74625abeabdad85c89c9099b1095404cbc8292eabedb9017586f6687b4048d2a3d616ec24d2ccb0e31a6ad684b3021ab68af8df7b34ccf9339bc7d330c59092da03c4a59ac8ccd2b5e73cc8eac12c98aa10dabcf0e2e0ec12173b83e901abc5ed7bfdcbfa0c800477b3b6a0a1db19b5fc5e9297bbf55833a83e5efdf3793fa3dfafca4f64218b26d63831338bc7e25f0a4ea97cd1cd2191e0a293373de9f31760de95141bc489103715fc6074f497216c822aae85c27c3bfdc2842f01c22df66088c16b431fbb4b5d01fbdda95e0d515c95a1e8689fdc14dca10353db818cfd7b3588200598afa2b7d661c691e6646aa0e72db06b5ca06fe0f2b9249a6d3241591f6be07c69a20b48643eebae48118ba58f000083df3992e2487a87412363939eb35212ad891e4a2e25f518c01acf10389be921c4f95a5a7966e79f2ef5cba58108887407a5f631dda66642b7f3eda552e405490517422a5064f19b105b3dadce8505cbfe1ab16ad50310c67d208de3dcb078752562b5fd525d3db0da66cfdc6c9bf6120923b35d6af67687e4516aa790a2b394a5bf2c21d9ae40fef26d778d6d3ed76ca6d16f1bfdaea324d78024973728acfeac9ddf82b74bdc5d56cd895587a86c364daaf44f6e7886b5925672d21fe667daaf5b61cb1711d4d399ced9dcc49bba80419600cd5d94ad7175ac10844904b681ac5aa8506bc393e4bfac019be8f27d99170d594682c76961c15ee04d8a1e514645fd55aafa6bfdfdd7b09cbfc6dec6db4ceecd71dc5d9be3e571988862f09f5f70bca3e9b9ad740434817106227996d834cef8a3128388427617d0e53f286d4e768976ddf6079f4d5a82094733978872bc0a30d510da721292bb79a86577335db01836fe0d752c9f9f28d3bc9386330fef95c3edcf092f4e8675b0dde4e793560284374b7b36f77e768ef166bec1dcb4b93a10f114a28d35aa74c2978cd22ac1d6a192e6d340131503223d7f2f88721216c5262865a2bfd0d5ec62ffe5592976349a544673d3704281e0253e6dd3be6de50b987a2c119fc8ac222e8e1fc44c075564d1d32a7a5b5590ab9a6f5aec6f5796f6ef88a01ca58473fe52e9a7d6d7cacc82491a37a97a00499590749d593dd95b958da6129d14e79c1aeb353873a3cc19f3a9b3af4d8a62e340a048c5d73113fcf44ddc3640d7753c01a14c05151885cf532be4a372e878c21c9e4c30dff59d8cec9dca6cbb6182349090113af8013d11bf615324784773542951da3f20340ac24b9432f039db9d6a3b04bba1aa40334c25c9be911be451a1d621e8317c65e809ac6e4cc3eb282179eb781e4fb4fde05cc75c0be88090c132df7950610ea1b08426bba2fc4d0e860905e8daa1b64526c20035b8dff7b06d4b26d6f0852da7e8e742fb359074b08eb0c2929ee94c2e6b054728810171f0a25b9ed40892e36f36ed60c397d0a204c9167c6cd2c5c90872f7292ef0f582c37861b3d580b1d682929eb35208d6ffff031c35336923a5e850a4098bedde23f5e71017940d8e0b0a3a60f5372e787ffc0a59be1ced2a19df6d10c666c9e9935a2dcd69887198f2798d6528c0fa22b5989c7ff6f2a8fb2ef09ce4f3f3e61a4747a1c647a5c38b35c3745949e80b83599382be7cb22c8a0f9317affe5b48c55c66055c48591ccf39fb537a8044f9c1454004c89dc67fef64ce7c954cb7342b70eaf61810058d4d66a322fa3b4914d9720ff0a6c66f300bb52edbe27e40ce1157283799cb4c33362938adc814b74d8302bb09a8b3106d507a9568349fad879f1e10224d127851a0c3fe9d08fd1ff6f5b43448122e5a59b83961cf46b2a0645b89a55e4208f306b98eab886314bd7894d0879f73e3be557181de85584d2038eae7e9102b35249d75de1db66cd1004fb59a48b33320f5d76d383f7e29843e96248ca3431e5191f058aad766e0e4fe9121ffa3b23f95ded94a9923596c2768587b1e7173c3654c59b59b1c2420fa88ac54204a8a182d55ca3900a32fb527a038ec25a967f12d4b57b128161f73e3e23b6c0e116adff5234db94b1d6ab83e8551088e2c3eba684b47f9c24202f28f6141c1d957ddc3158b51f20739dd64cc58e896f8f88dfb331d017963bed3fd3b2007d7c48b41f56909d3153b848bc5d24ae41e0105600f454c686748e928e4f6d657dc348a95e6f87a7d4c13e403278801ecf3fc824aacf85b955b3cee0c8ee7ea80d61b86127a018108ac26d2e645b1f27a2d003b5873e0802edab7b095565a228e759e7081eac91ac5b890caba8282bb4e41ac666d209bd9719e3250609d4603887ce25dd835938c031a65b185fc4e4802d8154ed9312c3b17a9657de2347becd5e18e914ad9cc86c5423e4656cf3a4c14f866c4573cf1202c46b0252d420f164966a8599f2d59ad5a06f797c1b46b6057cce710316926b06633584764c8937572e966604e36dd7b0a4ddbf6e67373b4c15f089d04cb215cb09638f0374439fe50407ce640a0f8047b7ab38aef364b8dfea43b443a8cea9ef79bb3042086025c0ca4b40209e192272dcc8536ed570c0c38e93ae56ee0b3c68129369076f56f82df163610bf200179d0068b45f95a510b20410bbd68a111fb85f8ebd63dada542fbd5367fd2d959c90831e91a4a9d8620a67038669898d1eb8f416637835a6a60a60c8d173b1a7724e5ee055e610b4fb3ad85a7fb5887ce8b609ce87f93754b5907ec990238cd27934750848035209106db0c795a2049ef13b50e4bcb1b261b18bd367a3122c5433ec49ab8e72af39608fcce93513c2f7e1632ff4d7f6be1bf2265076b9a6583a2bcfb4f67681fbe9790a3cf1276e6503fcb9d4ca07197169ef9ed5072326cf1800c898789285f885ec193727cc17170361642ab801477362fa10b752d6b60831b6f3d103d389162eb295d4dfd2ef10ad89d3504468389fef75b1a6a171eca8f97721aa5233cdd380efd0214ab137f98a871a1f3bafaa8a55f368c82c138f6b920020a3b0d49f4ac9ba8f7a7e3b8d8262f1ed7e1e74f2b2e5c85250b61f0d68194e2f3babb45f0882f8a7561e3517f1b9aa7512ac00e3d56c57d240cea86500484bd0693905132773920934850964bcdaa8ddbbf679caa44665e5a5455adbf258a34cdf92c5abb56eb11158313f2403f9dd1b94006bbf102cc82518a44ffc88997efd7cb7a5ef8e1872dd0bb8dff191532463f85892026c2cf3ca41bc14c69c2afa188d0167d4d87a542e6950af5ef78bd48878a115d199bc05d9e4203308528bcb45cc6177c2ceb60edcf41bc15f4d72b452af83c49177433f42772841d7cae99ce5c046489511b8752182080e71b60ad26cad4169683f240f87238e17643d183a21208970c2f3933727d04fc4b9d2069af2946dc0a409410f9017a31b42e45cafa5caf41bce02c3ac36209a5ad3488eaa7c73399316a4f67024abeb87ec13119b6bee58623aac2f9946993b2f26ba80db88b4aaa35cce5324462715fefd91a1f035736fbad528cc2c97f91e50d84003f144dcae7fc77c330d2791b1d8fcb12e45dca184e37552f78c4f760aa255a731614cd58da012975b949c9089b0386f6cd600411070c4cf21be4b8f6724a0cf6fd22e24687998c523399c6b819e2a73a42607afc2d923d128cff3339cc89356163d0dd991bce2da52bb1726561d201a22a8d7007b1dace0d331e2c68f0e3e57efa07210b5e827aaa97993920493818cb2aadec36c175478084aedcb18b42712506b131c56ac7ccd217281f4ac6746bf2c1499e09ac4e83469a460a371ef6af229ba10aad584991a2d0bae3d023f824e1defe999e771674c70bfed6b47af944cf0eba8897772f20b29395a16d9440a223fec0ea4b2f47114d4405a78ccaec43189cdde4788adaa49e22f73f7a33c05d5fcd296de37d0ef186374e76a213cb2a19fcd1576aa85c49a5ce4402e863118c2b559179b3b8dca38d04a37603b156766598fd65a103d33f1231918d7c121651a5dcf737f2be9f31e4a9b329241f5e18cf7df824127c12e6db95c6be4915982ae9cf254fb952171183195833155ba1e968038495f1329dace22d884ed2347512482aed981cd4cba3d6c7a4ccdc9f3387f1eb2023d1ec84584bb8d23ea013059304f64c4f6d2fd440608fdc859374d592947c97ff728fa22957cb6836cb6b817e8dc891fa3672a0085a51a5259c95249488f5143f695fa62bff780c1587b412ed000e16e6eedc795b2aa87f565fac31b46bd53946ee306a10e95825caea1dbc2cf6ea205dfec670a5e7b4be2394718bd670a25589d307edb41bd866f49ff968e8650a98d7fb718bd9ef3ea27cb569a9cf0a11f34f0661390ed27b53705aadbb848dacaa87d069a59a910df64781e9798bfffd87735d3e4b5f7e074580bcd2424a2ad8c1f2f7a2a97deb8d44156d1c704798555296f2c286c3eabaa9b2e90368dcf48dc6762c824a1c3b107004cb89c46065c653b305224ca66f3cc4600af22447f59d3ba2a39043b85c525abeeeaa250e350542bd7136ed62e3bed6d813cae2214688fe431fde4241f90377f9300b2955668f8d63beb7c29d80f4cce010af0d333e3667227ed10e5ab05760a38e12f5e95f9ecf957dab1545d8a075ae4677400f78c38f25537c09fd09f46483359a454bd0c25f30a900f7e24240f4e81439836cedc3f63f3240b4003ec01bf667be9704bb3fd05236da6cd6cd6a90ae2ef11755401e82019193e504deea27c49ec3619e9337f2e1a811199444995f0ff589b704a85f32c2a2f177f276c017db6a6d60d1133b82b24382a0931b8f9a087674c628ef7ac789a78497c1461b25eb5186555587ab9c3b84418e7f2302c1b8ad55a1586e3b48b918f0cf777c5c39b9f881ff5b2edb2f2b6ba75e31e4d9a0b6bb5bc0d26475562400f424db2ffd86e61ff264602cb2e4c94562fd15f3f8da329faec49f414a3c2b2ca3d11eebd83ab763d3b25c77d9f15a8ff5ad2408ba29ea2ea4a99964d7bda449f3338fd3cf3af331f91570fa75488c9d2292beb988dcbb21545ba0bb10dc9678c024d836a5c4730a57fbc6d2c2790794f3674832a463c7e8b08567390b805b597ee10519de576e34564ec51ad63698dbe6e3e4b4baf66eb87cd8a467a63f754034a838b0612050ba7d82d65bdd4202f870cd11b359b7118fcee4c9b8db3bd22f656bac64781dddea556d24e2d39b00c462999c04c8f3834a8ec85ad01c7fa50bc536ce4a368bb8eb297daabb90aa3628871ac8099c84e755caf893b44f6f26b3b112b804d50aadef4f12677a161c8ba06e053e075384dae4b7da3fcf3c7e011efeff47f0b63a2902dfc71e1a19712850b66a7143e2d05f7977b4137a81668d0ee24bbebff8b158bb0a47af696c4cd0d56c8306b159177ce5c4a38905b303d27bfeb8a7b1c31c149c8222d9b5daedbe7e48ceb5d82b35998caa1a9cdf394c9a1a16cf2b943f0cbc2824a520459993472496ffb8428b167ac7d54acd6f38fb00c245b0c9d778a7b176631140fb4b0c9eebd7e14bcb72267db24cb31cc89ea9c3a30438f1384ad73795e900fab701c08133c1c13c355b70120f8c59f6a9f8be63eb445f71ef6593ba32dbae4ca4668b05693811288741d10264d7712523082a50cd2a15763a91767a1234446a2d80b177c0a0cc42af602210616aeb2af42ab3e92ee90341b2c56f8aa2c6ea3c2d7a8e833189a8aa1b3328fddf03c04019b8ebd932092acc5f9b2e3fcacffc6b25d216d2858e5655a7cb4b42f8920f5269152ccfbc383ed0d1cfef1c405434430ca4fc6657d15d066b51e1bc086d143fa248438e5d4527e3a40a99003d657c187c3e58a86ce4e1eb94ecc0ac9905f5ff62733532568330a5974617ed19c1232af3c3192396de34a1b3c333d9c6049c60a3025edc2ffc7b03b9697d2d005843f5773842ecac5a2d95adcb4ea9075829ed00b71e34e280aee8820182377a7ae54c0445f34504c869b401d41f401036183f59a08371e80fef03b04544c865706b7d882cd4d872d0c405416c453c1d1f9071826964bd02394b2944b2e3ef72cd1506ead37a7d8523b5f6fba416f072b296046c62dc2b77e8bd93e9d7596b575d592942fce07b4d3ba28683322b55068e478410e84d21a8fb1151e253086aa8649877dd18819e348b3ba5c43806665f448618720c7cec39065e11991d6824518da3a5907c24c8139b96428e634b41053bc84b48570667fd47134d73ab30fb40d1f801de0e3c1fb8ef52842eff7600c68b3b6054ee610f7b89d4c68e6fcd471e01f9d6036f177bfeb798607fc92fe4a259fd3fc65544b65958eda3232d32af58e466ddb03f8779c02e837cec1ad6d879e6811a1a345d34bd968ba967cdf854b96c63d9033c1f0952c4680f00e3bb0750ad071581ba29f67b52107063810d32050c1581b80926c0aef3c309d4b88c1390167213c657dd4f839ab705511e0c5c53ecfc3b8ab65c83dfe7e3a8eea630632d629a9e24062b2449c0b4b03ac0b3ff47a9c53dfcc46402270c6c7c2fb85a267d6f3ad3778a8e2f7fc9c710f77f9a9ad4656c82379e4b5033ddece398174c26f53e1d43867452c839c83dd69bbc923fd61c660a6b09d5d815b8539541b85497d36941035b7c4b8b1894304ae4a74d2a6a80d2a1b603063ba07bb35f9d55ce5ed6919d5ca1e822468add1902d56d01373609d9d11d61733fe0106fb575ac8ec8025ce1973575b687a829acf24e4d1bc40e7b5487d6ff15e3ca971335244a918df95eeac963870cbaeb47ab54ccd7440c6bf0f2121c5844cdf9553d33bd92de34829bb9216eee1b8dcfa7c19631402d42c736fd5a6e43e628a557240c3152e678a8f06bec917159a1c5f5ce6fc269b8c0ed497fc774f56c5d6beb8fe6da0cec25a1a9828e76728f4cb90d87f56e17d80892b5aee7237795af71a78b1d15a17a3d4c898325f67f8c61323272a92fe372a312699dfbc20c00bdd42593bcf618bc84cc537d289316af41e40923d812b3a134d704f4a303dabebe8b5820d23a4a0726d7dbf8db49d87be375d81f26e387852ed3b49dc364728ec70d589b4ae218432b5571624550847a3006590100045857707b932600f5ff76d65c923b108419cd5e584187b3c6da2f09d95bee2da59432a52403bf084708d5086b10a1a60821aaa0c162232a8ba02ad22c42ffb3f7410ec2df1bc641f8230facbd9db5cfa7016098800c305a38a1c414167feaf9a054708225299e70b1d285c5378831c6f67edc6329c618d144b931c618638c1c63fc18e353bdc73d8a628cb18c1b638c31468e31c61863f48eb1638cb1bbbbbb63b7dff8188b10ffbb0776a9a986bbc72975b8bba78174dddddddd25740821749f5287bb7b1a43d7dddddd25841042777787efee304287eeee9445e8eb2b7a830e111a4a394a684ce128eaf3d1e520dd4b3123fb5e89cf2053b5d416ece9a299cb5f86399a711f136aab7d6cea50945a94a57b9e971ea4c9e17615ca6593d119256e57a79c69ddae5ab1a95a2ed7a3cbb021090f0863114383a5d181749deb30a4db8f5ab2efbbdaba6c068b531e919c1be4be87479108436211e493fbbec3942e56e6be3fa9c06263eec358849c29457dd6666be2665031c392a122d1425618b1641801081e7460c1f7ad09b75832bc2416e48cf013d8600a4b86206fb0510328b4348525038f0d67ae7414389071c611ab09cf40c418960cfe84e9a3261e7cd1c119966f950a566f7cbb555f05fa74a439beb621e74435e8f6c9bee46450498059f29925b9a18c357f08b284de2b40073fb226f7a486134b7eb37efaa79bd5ef512b727a927baf009d8dfd5df420840fbec7692fbe17dff3db97d143e2ee1fbccf4b97a2fbe27bef7a417d37c6185f8cf06464fd4df7752142889b4130eafb35f2bd7e7a06958f512aa594b293b2fff5334be93cbd3b291bbb2da50d0bbabbfbc484bd1e23e2850d3fa4945232b794524a6f8ecf2f254a4a29a5ec62cd7d1fe57befbd876de9e6194ae00be02a89dcbb2d5cc19ee7766f071f244313fa14e32e4ee80910d6f543382cfa1d8562796e87ba70435d9c1963fcc85d81ff74702377e575af8de7ed7ddc2410048b2d6f744d2ebc5202195e1544acc7b55e1544acd38d5c075197ff6914785510b1986bf23ee53ba84bbf25f404088b7f0887f5849e348bfe900258fcd736a400166da2821b91e4bae8334df2944c5df320e4c263fc31fdbdc7e8eeeeddef7f62c2bea71eb9de82dee7e58a2c2e7c18df833246086912750d6de341d83ed418c511d90aac18163ee423eabbd0ffa5103925f131df628431c22e46e82eff6dfeb2c98d2dbdf0600cb7731d785c177f3cfa63378931ccb8dd3b63c25ecd7622eededb16e7d729a79431c238542fed1e2e1ed0ebff1137ca2476ff382b8685ef6f0b2772e3471d26246cff43f9e376f28c181ff62a42a7c1db61e4a5074574f3d11ea8db0f96ff6595a590f1c1528ecfc135c9f1290ec7e7f4101723564e2a95fa14d724f5284e950485fa2016b7d12db6ed37c9458f8d07846d5584e5e7b1edd83223ec86c4042d2ce7d83ce58c74d94c22fbf44d8c64871e1104dc7eb662e511b1bf8695f565438620c1d5ea73e8f88ebe7c1d5b8e94fbca8b648f63f3da76f35987b355d780243391f7e68d37deb8e1b88a8ddd388807a41f73c2769c0529882eddd3b195db4847dde359b4ef672d948378444a7817beea353652791aaf6d0c8589867ad55d5fff13c742bdeaa76942f084981a1491c60db468f148f0f0248b932934a0e0a4a63ef6acc444defa90aebbbb674ce4cd9e42f8ee635cc9bf381292bb928f7177fabe615aad4018c724defadbbbace5e23b39ce62c6fecd229d045df1410b2c761062cd0f5130400509344b3dc0410e4144466a9f574598a532a264e127b2dc8ec1dce6314f54819e8585ba47a5022395008c16618c66c8411968b07a034cb0c08c0f465bd850c3ea67a47efed28f957ac134b482ced6029917b618bcb0a7a09bd691620c2857052f63085dfe244ce6cc0f09958cfae326f078894a365661fd99fa8eef9c566055ef715cd83a86557a9c13e647a282ecc23e6e47a33e1f5d9fb9fcd47d72706c4e5abd3e72aa24717e4c7d104bc707b1767c100b840f62fd07b1b80f62f9f82056003e88b5fa20d68ee4d741dd5853f63228c707b1541fc4e2f141ac1e1fc4da3e8815c207b100f0412c01bcdfd92c0dec6a7b016c292f6c0000d085f5b1fd6c436a60b90dc9b6992086fd6d851e9b0a3ab0206c2ff80e3f8fad052cf8776cdcf21d7ed516830e6cf7d230518e8d87c2b0a98d8b706c3ce5c8569d1c9d9c37bf00a2f4c5fcc14a1a140e0a2733b2b9d9188bcdc6465c6cc758f8e8b4315235633b3e3269268d6f37959243e987284557b4145a4677f71756aa60d88ebf6017765d45dcb48ab8c6cc8d97a8b01d8fd9e2f7f3b792fb3494b7d350cce020fc0da5a1b44f8ea2eec9d2473c64516aa4b6d246ada59de82e971fba52f7742d34a67b3a36e3720f75182fc1afb31940f03904a28ed22b26eaf8cc653e93a60110047b4b238b5aad560a88a4931adcfe9b48d46ab57090429d88b9fd36b1d5c37402c6edb7b0a8d56a459942644ed2b8fd2748d46ab5a62441758801e6c3edd7ce30979ac4edcf965aad16952a2e19dcfeea58cc30b71f3bd36ab550d00524e3f65f4bad56eb06f8c57ca2c6eda7547c073642b77f3652abd5ca016bc1ed9746ad566b07a19b236e7fc4410afd72fbe10d3d6858dc7e272ae202e3f6b70fad969693097c70fb3905b9ce85941816de8c66ed93b1fa515d86a2dcfe0779f0509f24622a65f6f032219a26f1b01870e5e25715130bd8c59b5fb0cd0e7ef06e84984ad17a7857111dfb5fe43acedfff43b26198a9439773c86cad0a32b76f90830b8a13d30a19a1f7b8cfcb185ac6a892f550b40311143b3881502c0e1a5250f9a281b0d97d5ea888692e36e73e2f54b6ac41058915589dfbbc50a17206952116a059339dc78c93db093073c36ded3e2f62a4994ff8621f1253b479ba84f624218c91d9dddddd7dc6a611bb309b1c52363a659f1d638c51b6bbbb5fd4dd9d5e35064a5790e7b93c6fa7833c2066ec75b299f4523769da110fd8d89ba9653873325f607b548e8e6b9976c40336164756e3cf544f906780e743bf391411463d8a0b94508e2bab971666e6e8ecf6057bdd42f85eb070babb33aff07ee97bc142d804ba7b8cee64d470d16b2e559ed4755f0152b8fe6f07be8d7f756a13e18cbc5d20c20bbfb3d7c603368f482441cc793bfdf3db078f0f2a7c04494910dd0b07dfca239b9bf628ad84be2a6d8b1c20d4fb9292b081ea7fbaa2b8d0b1f1e5712de1abe3ab4eb69934205466bdc81ede97643406f5db7c10ac068463d3b2dbe48253e7767a4cb31ca3396dbca4e6d9dc979484123db6f93c361c0de886e3a537706a08d9dc6c1696de97e4c4876bdaf85e3773b3d1a101e5d8f8da6c5cc60d3bbf070ead08df1c5f75b47143c8a12de19bb26becfcf93eb4c99db0b0af2de176f280481e39114b96aacaa4d00322ffba816533f2555a91bebcb471995ec95759b139cf3d6c649195b7a60877eb576cbb364b35a009028fbf9e07083c5446eaf356f97aca3b9eafefa8a63799b86cd259379ec2557a2555414c59c2d7f475d6af216418f4e75eb9a9dafaeab8a977753618e0ed7849e2bc7b63e47aecf26726bea947c49459adc39eb20a9bf5da96f86d7231d8d9bccae6a499ea9226f748f6d7f5304e65047ba698b53485ebb3ec5b88e2a41e91d403822383b13aad17d3eb3a7da77d67fa0efbfabca94e9a099b7ce5c8b4ed74857d494610ddae71b8b2c86be3625b5cecb3ade3a64eff7aca75cc956ed7d7ab56ae13c1c5e8cf142e0e724db4a349f002e6401c3870704c46e7751ec757d78070b0a0b321c0763c44a663324cd43d9ec6ed67356530df28f0a1e07c6b40281b1c38361d9d1c1d98e9e0c8791c3a3a3aafcad1813832f8390f235f2143767c5f606cf7f7bffef7d13dd96b6fea39d9b7b9799cef27a17b50df6390b84f0c5e59e89e9cef9c6f1ccfb7b523382e0eae1381ceffb84e0a39dc0a2ca4365662301b7fe12e1b2339c147ac65e32c8c6d6c85a110c5e03e3cc5773a4d14c3f63ff4b1fd4c1e116e419dc676a0e68b16a225d23c1ec2cb5c6da0794b45542ec2f2db9c619e3feddcf21d7ff7f1e7dd1d0393e91d6e3111e592f48effe47eca14298089769451620ec9cd109651f4dd873bc76decbb1cb7b3b97d39f77c47f6f3f399dc4f3719dbac4423bf124a0956ea500f8a2f9ef8b091eff87be42007450ed2b846fedc8d9a8d8afce8e0bb80215d197ad67cdfb9d2a8cfc7833c1fe790743eb7f9f9fc5b5d394ea0609ad1cc2eba5412392bd44290d90461203be4d6f534ef3bf72dd79f91ae12770821644a9de7fa102488b480177ba86fcbede23d12f4041446de96938c178680fb9ea7001f44034c49f3737ed007f53d225a56dfc3debb9a76b77c2fc2f77abaee7edbdeddfcde7bef02a239c6f7e27b113a84cfe63c7f5cdcf99eb9032d81ad960a2e13ed088e2bb94e0477c277d7f186ed983b9d12fa7561d7c5c58ddd75f44d7571453015ed574dd9314218a1ca883f7c8f5fdd23d77c3191d33afed65c085dfa307522b8909b6c4866d8b4bbf329a337a517a5a7d36bffe7ed1effd129a3bfe67cf37fe8ef19c0d489802f8e37a8fcaf59c22825f6d845274b7777eff62aa9c7109b1de54fd951ca6e536117e59640530aaa7deac70b7b65c5a27a7080b3ac927df74968c3f49f26a01372a729d610baaf5eff9318fb5e25c56271caccd459e0ceafaf29a44e23e5cdd4050921e31ab5f5de196eaa76d864ebaebfe8940e6143e723ce418ac5ca1af42da7f83546e6c8fe4d28bf6af2ab20c7e7ccef4fb9fb213f6b285cccefa7df07517633f26976c2818561721d1781cf6a14b9ddae954080d70f55fefa6d1dbcaf535d2aaa9aef55f1f59226b77b89dbee792f259084dbfba79570e4ba506a29786bfdd1afe63eb2ec524f60a8a00fc6955e5cfe7b4ae447c951788322b396ea59ca77dc7dea3f273368226bd6d326f0581a5782ec1feba7abb6651b5fd41190f201b83dd9c0d699b156826c025f068c953dc70724c95e5631b3e7ebf9faa7152100e5b80ec9bdb4146287e4d2af5806a564fe69e9570a97da39257b1096bf5e5564a8c7342030f6ddc7eac7aa5a1635a0c93f279cf5c2fe8e3e63f355d77c55cf57d10921c3e78d2fd48ec42cdb8ce8af9baadfb5220f8c22cf4b11025c6c722f4be0818fad514f5558f84c5ffea5dc8fc338826a4257551f3001be7c06bc5b5fc29f3e9dc2d8f8486accb86eddf52e60b7ce125e184b500173eb3fed8417c61254a6b815835a0ad8bd30d752a0afb9c4b09752568935815d47bf9b7f3db6a9a07c555451f9aa29b13a27cf97f308c57c896604bb1589e430eeaf14e8cfef7ecdddfcb7f19d3cad54ea0850f5ef907df6cfe74bd584dcb3db545585c1575df05514324f5ee22c8f400e6a19083a4325e380d03e8331be0a0899655b10da677000ddfb3244eb32f12b5b8b9620827200260d27647c292221fbd618108481474266a45f703f203910f468a2491999e9b34c7e346d2a9999186abfa9b4ec55357b1596bdeaca4cefc6254dae34c95fe2577e763a596195640f95d0efe0cfa77519d7f1cd9ac49701636947e203a8a890034c184b500113c61253585e0515367bff7e2ef2c0b830fcd594642693e9a10664bab68eafefb0efe4c74d55b922980a5349ae08a6e22b9ab6254daef651d35446b2a73433825d1387e46adcedb2c732c6b64efe05ffa729e51b84b1fc41c5be6258455d78ebab807d5f663074e795d5fad8bb0684d5f7ad63ed664dea33355704bbaac715c11abbfc80f8ab4c9c7c7ff7c7a9a4bfc42ffdca46e0cfaf9dd58fda91f995eb4e0fdf03a2fd7b404c5fb7fa31ebeac37f5dfdeb2fad4895ffe34f09e55447e6c39f1c644ee35866d56cdcfed74ffb536680e16858608b1b3750a9010da44062f51953ec608c2e94e8411759b0fa53655609b8fd8f82a1c694fbbca881668afbbca881e5a2bac7538f08fd0e25bb08978872fddf272961749d63d21704a9dbc5d06ab52e93d4e99a6efd2ebbef3bedbe0703137a61883f1f1007f280f8c3cd2fe43abff03b7a39eb976f472fbf83a92f8931975f9212adcb1c13bfef5f011eedfeeed5ca77f8ad85dcfb0eb3a21a6b6ff7907e9e4fd01522353cb8a08aa51cd260f19bf07c829e480a3cdb8fd5cdcde36c2ad3b3caf4ef66ff4365b2e17e7a85c2a5fd6046095923a627c104eec7cc7c1f0fb29b726021d7adee03727db65d0fc8f5bc410e727ddd2407b9e8eb6cd866cac1760f09fee0101fdef8102e8053450e5edf7e8461ff2251e1c70454eb78a9cf4717a3f46a4afbf034f5994a2f62e995bf98255ae95551affc21c528455a4a0bdbc5a2a2eee1a8a557fe3ef1a877b868b4c576112922b94f1cea1d7f8f43fe366b6c1787aecc8f43dd03a5dba7598fe3853ef32571ddcadd78f05072c29eb96d735f97c34e794488b4f076fa9b526bb9caed44f770e9c17d51704973af2b2f4a08dbb1d27daa57b1929299baf192f64624c9b83297a4be5633a55a6b78a1d562f1f84e1b1102ecb251af927298720d705f1251995b3dc3908c882e8451184aaf86dab5232ec48f4bdead4ae463ccbcf111d2451f7e66c6f226390807e9a10fc1f4aa4bafbe3063e9f285af308bd0f18d4a2007e1ef1512c941f8e1c6375bc3761c74e35f098385b5dc46017292836c471a10738c04957863243ebac2caeff888951e73988ec9edf8e3c7ecca9f5ff9c87d2ac75d1a5e3e6224ee128652977e36d3cf4a5c2b2d591ebaa2828f516a9fa746193ed33dac46cb500b11d9c066180da7e9560ff150d209cedc241b8cb80a504a0bfbd31c664caffa9963a55e6529b02ab83d83936508e9e8cb11162e69a8e8f673bf34baf2f9ab55129fd91d1e194117af3f2090ebd895f0b766c40695911883b01d7452ca94e79c73c638e7d3af93ce78cda7dc9b7ee7fb5532390a1f91e73ed873ef195119511d81add685f78b08f9ee883edddddddddddd7d46778f3146f8e4bb7c38cfb0fdf1fa7724b80edf6b0d68ca2d7a0cba3fbd64a6d654f7c86f4e65c4e37b54d06dee75d210d1b54ae437678f70d97dcfef356b4746107b1e11befcf00189ef452530f5257a8c7045e4a40827646c264003a1bb8452c6216738e94917371aba5d56938808e276424ca0e6a66584492600934444eb76062184b0d5baac1981ad19ae7f4782f78ef085cf28ec48c5332ac4ecdbfc7b9b8dbe9d67db0f63b8b49afa9e367eabec23096ead5fe56b779389fbe97ab5cdf456f06f3a705b5e7713c6690f08ccb8ce04c395cfdb845d5ca77de0367d2b9835bd3006534326dc7b76a4208470065b928eb2805c686184f00c19c1490ebab000f2a021b95185238001445074a8c18a13c0a08c2d3e18f900268927ce4c11c262858e36352788d70d28f06b0b0c90a2d00d9710134e0813c6c91429a59a45007090828b3360a0258a28de1a2c44e0d045088c0d3558810301b421e404422148442864fea01e996a48baa0a8418b10f6f143820927501a40215c6e3f4d7d0a755f9293222ebc2fc9c9959452452346860fa1195c86d118c111165dbcd1040f50ec3044131eaeec40c50c70f801881f3ca956bcc801cc1063b4600d04c68c499ac18c0f5e7260c30623462052c4045640430d67c84459830559a4e810850bd62cf990664d1051186be0a08d1fbc4c19c30814c2d8c1280b1a3c4c4103326cf821ca501b2bb082085fc367681cf40d8e90411541d4e089307e6062e9a9d9011616fc00032e4b38a1c6fb62840b5272e0c2840c9e4881d2e3c6992c5b4431860cd4f0010a7290430d5c6a880249a8c90c5d209104123e206303476304f343e8dfee0e3b4218a1131542c826e8eefe1eb1b9b477d6d9fbe3ce047277c3ebdf4464cd316448bbbb3b7a84ff1e9dcb4468ce38087bb7477b3b722f420e061d6f25627cef638c31ba808aeeee6160e788c2a6baef3c524b6de6f569990fb3fa2de45a083e388233176642f67f1cbabb0b91c8f90c3a1b4a3999c4cb33c2de624a09618c714208a19c30ba18909999df0e08b90c9559142ab3d0a232e8ed6be05b81b39149bc30ebd5905ecd3967f6f27afa7c30ca655dea4e3939dbabe76ee19528971206783926f1c2a01b85a09352b11da4c2993b8ccd450a6f7cd511be205cee3e1e173e11e5cbc7bd0c0523bfe432ba5988e27f198affa7e57b165c06c576996f928ba7decc41ded7f77a249410327737f71749351c3171c4446b074208217477f7d7cfdddddd3d6521849ce589b14e5ac00970d2c3eda7192afbfb9284d65cecbe24a1348ea061868844851817e203a1db5b6e7881900c955df725d1a0c5133d618cb8f41025e90a3133065bacc092d4c410186894b864e03a7034682eca4d6e2ae9a2c60c5a9c8102a4338da60b9d3238c8ad2b01f795e9de97a7b4c43f71fb7fbcdc4ea2a18adb4fbdbc31744ff725d1602589862a1814dd143ae3800628638cb0a419aa70ffeca6e4789dd2157625cd90a5e3842faf8d6eddce2f197296b3e621925a4730a80283211d37d2bc608a162c067063ca7d5ed658b9dd535283e6b62edf2566e61f2a2049d2ab24970d6cf7c85c7ee64792a47db8c5e26e09691f66f1d3323b2eb7ba112e2f39963e89b19c7acc9a09bb4e27ed8f2cbde9e9f1ef79ba8707ce8380cab67f7f42f7d8fcfb4cfe49db2e660ccba2be9cc744518856a79b9fb621fc4f5ff18102c057fad836bfc776857bba5d09e1b3ed0a00feb72b3e9e4708bf01e041f0a184e4dda64e863bafa6c5bc2f075c66c99201c06606a501a1bab03e361c8e976c5a51d3340d4912a5186f95ae0169434618c2d18413be74fc2101298431406ae6e9743aadc0c2d209cad3e9745afd58457a3a9d4e2a5460cc755da7d39f4e3c4278b88dcbf48efca901dd706f6839fc0293335e533b52516bc10533d7657a1f6fc34b6ed42c875b42a6a77db1ad6fbd66d3acd618439339af8beb44704db4661ab42849e7ac75d334ceb631336db363ec4b120a735f521243976fa5b3a5fccc6ada6774e32128bd92f2ab89d27a5193f65003d228bd2e7a5dd7454d7f994c947a7c31b649e3ec9adb438f0826b5c97c5d4b9cf9a49930b661a6da76c94cdbae7f5af6d3d7f5d37266735331923c8db137f58874ac6d598f1bd5d697fba7c10064ff037cb1ffe9ccf43f3dff69af7bdc3becab0a9bf4aaf5e99c946218bda624c2b4f9a693949a85e9a6569b294545653d7afc4f5f401608e7eb9b3620d4d7b95931d594711ba7f11df9ace43a7f85fbca3d23c9971dbdb14e29ee137389610d55ad186b6f6efea7b5fb929210e25e39fea74f5252568c95f705d97b44f8d9f0e0bd93fdf7cfb3d3696ea72cb26dd5abd3e6c3725f02bdb24b039a5fb1ecb4cd6fedf4f3b4cdb7dbbba787a6cc94d9af31b3db3b6d568cb5979682b6d2802cf76a4ced940995b94f03b299667f9a324db30fc552955bbbde07c51251bd15339934fb34fb6aca309c9bbffe06e726cb324dab5996dd64369afd4bbba9b6cbee29bbc94e16c3c149153d1d29784e758f1728667e1c52f33d2aa77dafdb5459bde89c4f9b9aca88a45fe7039af3e936c6762c9fce8dc6b7064529bd7e5ea79f8f6d2aab65556297e99f62a7ebe95f5cc7f3b258f42acea89590e3a7a17624c7c538d39bdef426ca9db2b0efe54524fbc795eb826ec6a5966ed7e3c67fd7f51253d13729c5ea779b4acbea252763f4318c9b1c350d01990ba7196364ea7b57cd424e2130f75d6cebc694d0bf7ea240fffa274d596632994c736654bb7e6ed7d7d73d4e69ada6cc945dcf48dde666fa4a81dec70f6c95ad014d2e56d25c7ead7b665cece9a62ad25793f4f94afab4142a37394a8134d37d4942532ead3932b5233589d0525d030a81c84eca5d1b6b5329a5973565a6cc9eea5ffc9e3d5fcf68ed4b69462ba55f5154dbfada6ccfd963199c3fe73465a6ecf4d79fb01831eef4a7d30943ba5d107e1deb3465a6ec5d3caa1b40bb85850f3fa7678cbea9e412bf734687eeb3be945f6936bdfd7b63ce5c7e8d183f5f4c3b82e332572b7c405a03820f0867efdba9fb9c3ee775f9d5bd6bcb0553fa7bb357641d8f90941068aeff0ecf2caa7b1e927fed860c090369b85d76ed152b787421f4c75cac180a215ab71ff534f0542bb0ed0f01f6fdf3f2c690db2e2a5f613bfa70062b4bb7612bbb5ed268b925a855c7e33f511d21e0603b26cd29e11805e794704afa210a4a9ccb7a526199d3e1b91089bc8d27a584104209fd3dee9df1de7bcf05d485f4597fefd15e3999fafabdf79e0f2301a91267232897af51951b51881c4d42420df76bd397242b5ade883283152bf725598972bb056cef4e171cdd97e4022cb75b250561e6ae7ef008691fea80afa1c7991fbdb34ac24eee25976a6c0b1b3f047c3b4e31abc7d429582e915b6b90f670a3dad6c970b52c6b08b38ceb34c9943125cc85e05ddaba5dfd9802118debb07778746b67dc31c58ad0f78030767149417cb9f069521063aef6d8565fdb8c10b9587d0ab522f4a1ea08a4d957ae6b8debf8d6ae7e47bf6ef3df23a2c4052217e33a40e4628f713060945efccf4194231b3504f58b14682cb7ec4b3ac2e8b6b865f92350df7db0720c9ae872f303072ad300290ade0285e513086152194b14dbf72501e104116aa81cc0effbb2831a35e87d5fa484b1f982dd97544319406469024b13433c47987384f6e95174e1853f205df80f4258a68c2963ea6115322cf83b20479a867d5a1258854c1532aca725e92b5e20a5c5ea7e6e11f10394187489412b470836766031d870f2029bbacf4b1a1e0c91268b2bd274e129c202bdc0418dd0bd23c452bbbbbb69d6bd453a2f3825d65ddfad59d5a2a904c9aee5081f94bef85014ddb88115a5c80ca2221d966e60a9e04c111fa65036c248eae18ca96605bbc011f283876dd0733b1f558eb8fed0935a80c5f51eb0ac7aa6990ba760a64d792ebcb20c0a5ed3676431255101f6f060c4f5bf68501238ecc0092a64f0448d379e587ae26809a1367260a5de28630635c709dbadae4c41118b9fa7f955701fd96ab55a452ccaad16cbccf587fe94a658075f985a3252902d441ce180071d9a9862b6a1821d5a70850a29de48b9914699bb4aad208b2146c3eda41d720842c5fc08d3625a4cdfee87142d58a080055e4c79011514dc9744c58adb3c9a16b6cbee0f325a7879597423a800caed2415589114a5881538b9fdab15482125089b830e4a47668ed080e04ab7230bfaeb1352af302ac6f2c729eee380c882dcf31d35b66f87615abae755cc0843c2be6046d891121996145564bb79adbddc69f6ddf3245702f8a4843c7986fc6a3e22483cd0c9c12e31111824ef6e079767dea123078b8eff348fd2cc4dbd7b5d51844399f7cc649767cd45156dafb4285647ce16b6cbac58beef6de5acf6fbec4b789f7dd0bd36cfb6da4f73df98f4c5380370902b51f45ed1deba8fc6d9d423d13e6a6191f4abd0ff6382b6fd6cdecf33e457b531321475b98b33d159f12976bda084a47b5447e21731e91e5f73e3570ca314a6a84502ffca4dbce156be13fd87f84efc6e75e3908bc4abdd6efee6a2d845e9d54511c5ae142cf1755d97cdcd66bf56f9c5d26f9caf5f2196512ccbb02996328ae94014314c6219c5b20ccb42458e1c98153fa3181916e2d78961d897c017d350c05e55045ed3abb20fbad965c1b4f1101ba990dc3cf63c573eb12d702bf40ad54a72b3f1508cbf42fc16e2bff7b424376fb926aa19b06efe69494728b558365770be02562ce9f0e5baae8b330cc9a8855ec56beba4d1bd1e3bc2662ef42a5eb1d8e36cf60d35d16e0ca577e25b5a6116e97b552d22922f4924e06ff34f9300cc69420a24d6e9ad17676e206a9bea5a14e180055e4c260d90cdf52a8ac5f6795c10315194f85ca57b8ada276689cf46dd7373e3b396f88cd414bb5688cf424cba01e9c677a17bf808e34ee855bcd9aa6694c5f21067c2099804e0db674d029ec4e62dd724738265f3ac25b9f913d724015bba20b16e6eb6d3db6cf6a10684c1ebe39f1074b18f3d570f16ffdae063d90ec2f84018a2cc0de1be2435d0dc7e8fa61fac92eb99f3d12b4ec955ab89c9bd9e25a49737fa7053c29f5d25b84c02185ed0e5eebaf4f927571f8bf0b80ef2e97ac822647fbd64112c11edafbf2a0a080bbf93a02cdd01dc9704458b86c2cdd7dfbafa560ccb0f7f9ab7ec6b08f8f2dbcca69a7e85ee69329472dc242859d8cb1b4337a65afbd62fa16fe5cdb65a2d9e5ec1ef562ad3d77f37db54a6ecc6663737d9184a37363393655956dd3520aed089be2d46510c151add7e21cccc3e7cc0cf703ecb3eeb9e9bcf76d46cf311c6663e5038fdcd9bb622a6cc064795837a26389bed952a872bd23707e785b1020bfd2dbc0b2fc4d03eceeacf41e1ac7ef0d850e6f60b494241ebf6110e0e0e4eb6f16632713fbdbae16e02a177a8d44c3855412a159188000000005315000018100c8644229148248c6465950f14000f7c9c4a6c4a16caa35912c3300a42c618030801861000082104a199a2d9001450753ba148db40a9fec81a931fe6776a77078797f25bef41c94eaf0309362ee909b05468c7f23e80bd8ebfd69feb4c9b2fdbcc03685b5e91583a7ea3dc6cf68140138d4b904f1579468acb105de39bbee69aba21bde8f16a03ef0e8ab86d8772d19783bf80b2b6e5a70030d3cf8bb621b72bcc8923d1e8937df111e6ef4e8d04cc3a70807335f920853ae0be417b3fdf32e2552f4bbf2531a566adc8227ee6ed15aa4b59804279064c856ea26fcb83f962a8b180e117804c5728c3e2cda3a1cf528a3fc1fdbd6c8f8a2da4ac2059d19e3685a4868e7e86f9ffb80ebe855fcd402d8c38f1d60efd1821a152a2bd8e314978546db0f63e6bc4d67f0b4f91a6fabf46a22814675ad0b465ddce5c7f2ae375913dff00181f6dc08fd40093ab91004c9fed4a3fb74e7e8d29e234edc170496f8a8ca7083ad668fd9d716911a001b11ea726e1a9150b75df07b221fef7e248924a40ad197bab73603afcf5b45032e4b748b5b78cf2df841dceb634d224ccd5674122af67dd5afc13e328948f521cb377f87a518e2cca4b151a4e2b7c544908eeb98117641ea18bf2983809003fc345b6bd87003f049ce84f0b8c6dd5e11fa8d923c0645dc4bc522864d88f1fcca74027aab02569b49c8095701f84ee7e6e7e989dcfc3e2524f451c163abccb2ab83937b216292b02b2c1bc5f9c1bb642e32e964d991b2a7ac6f209dc6531206dc6ac302466e3a6b16d3052ad317120bac87fb5ca8ef80318ae3291bca35adc51fab794a0fca81c2afbf808a16ab0ebedb8be94aef383c8a643446ad777368aea17b5f6e59b4ebc1e735cdf17ace118cc8c1e81f85dd4e9612f59710131e7db57a8e64aaf2531d8ee89a360e0facf4a339510e60fc7c47cf0e0b06061194fd8631a0665e09b7b20567f3a70fe0e6b2562512071d1e83f6e447792db65a809d511f0e4d64381a9c65017b338645cd61c08694893d0f7efc7a4e42993a516294b7dd400f8a9cfc09bf19c65e6991a3f68227bede5efbf02ce22dd955bd2cde695c5f1ee5924c14ebea24cdffe27ef097cd5a257b19849b7d1b499a0ed289f6c74c45bef5d8d64b02786c8d003974b6148d77ed3cc8c440edbf54a225ed6a30ee904bc16f908c6f19ac1cd39c3d3998b1b538f5042248d449094220d8138340f340e4d9feb254d23f552508d7ae7f67e6bd2441d2e3b8235249a7b5ce94dd63148a739aa6145eb6d0debb5660d7f787a9853bb18cbe9ec86ebd79b931842b7600de3d28605b766a3bef363714eeee829fa35cb17b31de45e535e7559e90f9bab56a64000385143bdec695b20b61778efff6ec593cc1b68782d52079bff5ac016550e53d98ad95990838066b770b6b5279e4c7ce6a2ff4df6b072b5daf5234278ae0f4fbf35d80abaf8ff0b0453d6a4f0886c5cefc9db9eeab9022ddcf92d3fb0270148e46b720c93f89f1aaae3e7d2b9392f7403f1c6e5925b94a87e2ee3d9bfa373235816784d54f0073c8c4e6e83989f1d2382bd7da4c95afd59304790360c7c83f28fd6182d60c178bef7735d02f8e02da73cc68ec01a1fd4e60dd9d41c6f5c2250c0e9b8aaac0bc3cdb14a9d6534501adb0954dd7749f8f0753e593c5e87c087e60c6b9cd1a30a1cd8189fb947e3499ac4a1c39a4e792c44845dd61acff34f3b0b5326815f5e79f6ee6f3ffb3cc2817ffb50a51b8e1c79c823bf33d365466283df54e70b121f29afb797a20e4b116c161ec110c220703f01850699cc924ec1b00d590e8b81f18c81449c0ed618856708f58ebdbf5d15874e91aedc8f44bf30af3c8d6514dc438e1b77f562b8793daf966b8dbb2789d8527782965422fc6e36878c0ea91b13513f29cad5b50cdfc05aba579194808cf1501ab20195746768a1d75fabb7672c58256fa6f028dc4dd6916d7407096cd0886dc1d3866717fcd8aaefe730fd58ad04d77be4cbcfbd73d945dcee2ef62812b847483f2b890d6e1ec450b9dfc9cf88ed2877f81fb3ddad2073cbb8ee7ffca44356549d1c9e3523b7a1fbfeeb3fb6edd34187d10da59dd71b5606d34a899481e98dc4e662e0df42deda5a58b7436d72339d1cc7b23fe2589bb6ede2424688ab317d13e9c3864d88543f00350097989dda28a406f68ea893a9ade594a4367bb97ec78f4fb594cd9f8db15cf66322bfddbbe4ad7df097fda034041509f09724085fdaadd840db9e0af6a53492c1f9a5cf1ce6987ee8980f1a0aa980619e39b8548dd9b056376b28ba2c9940903369e009e66d4953e4d5d8b0eb12e64efb766a8f3db6017493f03071af0f1c1f40786681c921d32107d58081643a0f4aa43e190c5fa86c5f9ef952e86548690a1bdedc7ac029c50e386d855b8e8a7b764967b101522680377c748fa631d12c8147a69abbb03f64d673422070462ccc49ade589997462b3d671cc3a652b0699a49e846edbd71d091a9bca1392f5b332ca6a227665d63a921eb769b47ad7c988969a6fd25e8ac902602234237a81a93d53515c5c4f03519d684262819ebec984390302177cb3b7e11fcfc0c83f2813711f3ff2bac780cb5fdfbcad0252775db95dd56e3790d23825641f9ae41158d4aa756155f3c6557f7eee54dfab63320a9d8626e4c8603a8e0e1b20738eb887d6aa40760e7d30e10ee4aac2f8e07861682b52dbb8039c5d13e5c017ee294ede543ccf0f07d09a38fc11b3326a065fc13561872a61b0c5cf87018ef282857cd99f0c5fa03be4555185835daee80921e14892688982b8d6581248d23c2ac58d5417cb6140e2c1c38f02af883fa2b89feb4316e8aa9d58aa93697d4ae5e96021b215bb31dc2a79dd39cf413f52069bc298136b390910b26562126a0c9815a9d7802455c4ba5e3e16a8301b6bdba1b4b4971b64b70b7073362de0d07b343e66cb41ee2ab75d8594d2db1c3f79abe417256c08b8fee3b0a1c00e678e0771d3304a7d81a75c2da05628a561f7ae65e1aa9151330f2e74029b9fca09d6521ca066528ad7912caa2024e02b6073a67d3a2b6c97ec387b4da124a307f443e6e931823da73e64b33780ff5d33f4216f3fb25813b20a15533d76e3ee3dc2ff9f58cff0cff25f968a2e985dfdecab568dcee5ff2727bf101146d1a4df9fc8265ab6baee3bceb285ad2cb2811afa27646bcc5ea7b21151b6cb3ac1279fdde1188cd663304c8634c92dcf935ef6d9a5c0bc0440d3b9897ed93e40530ea30e0fd7af2335e06fecbe15952769c9a3a164b5980d92473e65ec02600fe5287b77ab037d3a4dca21d268810506fa1359c15cb49c5fe8600ff532a5327e668644f0b399e76654450d29e438a302f2f06549644b9f6e58e317e65b7c5b5deec03e99fb851464f12ee805402efe266cbd2baf6fd7a9911f777b14b99f95550fad22ec225a3089639d423cd66556c9458d04ac08637d45a18b565203b68a6042f3eefa5e4d8376ed3cf6ed74828bb0f61869a513a90f769808b88ad891c6bb3476bbca8b5a4d0c864216d906aec3c62dbaf5d27c1c6148cefb189a66df63669f715b397953119ff235fa27e724960d033a4003114d024d38a644f054ddf71aa427103c39b260dda3fd2472c03330d0b857f0cbcdfe716377d6bf529e77cd8370078e91009685ab5a5c41931a88a574fb52964f808abe2e4deffeeefd279971c96cbd2182661c739e9eab62133ed3df52c351a4eb901de5bab635d1e7fc6f83273decaa8314670cf002439949c6057c82e5f906abc512c79db5aecc72d9166c303f2bcd73c18ef589713be5808cd9e877edfac7530ed7088861a94d0b7059139dd81c1401162ac8b42dc721733c24a8bca3213f31de8e15a17858f215ade7ab3e762654d31c472da176d77cbb68bf689d38f43a95af35983b2c8351b0791cf37a653f3a1f8550f6f1a2af0a1b1410e0d26e005c734a39e0f4058d003fc091498b1f4084eb7405646593c14c91119bc3059a78056765b3072821431638205c4b38bb53ff629adbfe46f2d4b2816874d2dc0301a1a6953345e7ddeb0a7f28c3dd45a17bd97355689f8c59c0c7785858e54ba5b6b243cefc29e06ce994de260a967f7b9bc69d714ace20c2fd68a50706cf8953413ff045dd897e7d5e24f461aec8e545a285cd17ada564ed785f25cd8bdca31879da80ed42d13364f4f9eb940d583750f4c6c94e599d2a65d1b6264564ca811236534eb48053a39e37e3dc81fd8d56a68b4e9cdb9ae0e831f0a20a3540350cb477f5d07e30092f69be04adead1033f4b74f5c00bafee67c8d4305bae39af8ddf9b105f3e42e0a1ac4db269489a47fe8d4ae0170bbba33e50f52f14a05c1420e67f3b917bee7a9c52bb1e69683f7fd53a1852d357a76718fee2d5fbe962132874605c22b9fabb4e413ffe7cc158b17f58b6230f0540cfb5a2c44034eb075e92f44df8c8a6a5fc0f79c38df2bbb0c7cdf03c63a222442c8e27431b35392e082f957c4b2ead274be1940d3c8b26f323485a652b7e64e971b7db01f7f414cf9d5bb66c344ac1881fdf3757279b19089a9651fcfc42af7ded219133778e77d22e95d5016c99544fc0995b67eaca4d2ac1e0049272b71a4c0e09099ca85bd5da7221cbb7cb101caa56e0a56ff9d9c2190589cb6c965267421c3de107edca7f01004912c1a130fb4d1cf8baed0995ca3920f3c8872b80a9e1fadaa4816557efb6c7c1a3b2a403c36f9a76911ebe255c930402ae81b7b7dc9a9a914350a5ee4822e69536947640190345fbd525ea3f32d4553828a11f43277f88e1cddaac232337c20a725aae5a84d899ce163dd396ffd356531cbb6922db512316bcacedc5dcceae60e3151a91bdd8f15f2f26465af7c98a1e3a25ae118258c0bc889f0974117258741eb18a8d92dc108ad8db4d92672a05e513b13479a13198556e2426908d069f9c8917f9d66dd63516bdd9b3ffffe9fa0f204960d931374cc01d5b0fce3b93315a12aaa66db2715365bf1955d15d007c699690d03f9b15c1b6ceb2c388dcbb429eeb06e590b1bb66e0533b8055b899b595b3ba68fd846e28d6198d72dca699b797b030a2b5e2bd7dea1187280de9385472ab686c6e07a82745cdbb506956ef7450df9560a02a9c7a5afb7dcbb501c0a6a7ad16ea521a7a7ce0dd89b0421518c3e6701a2371041c082a0ae8ab6355cca5c262f1ea2f34d51db42aa99c6765c332f102d7f02ce8fd4b6e8ee52668dabaea8c57b20fcd4e743506a049c3d8f6a984817b3ecc5458e95a62144178db0235a62a9d29992a9d12843c6d70938e6c7fac217f6650602b39a5b29383d52ea0f063c5d53d6a28e0b7156fdb92b9b583c44b5a93d72b3569777c1c5a629e0ef9d783f3d264a0d5d8096f8db530960be81993ec9458c831f41e2f83b2135c5e6ebe1b574fbdb09b37dbfe6ecd4042c4f5924afc2455f7b00912d4fef60cb7f68cd164089550e1960167c62716bf77a7c727d345bd793fc29118c0f4e911a69b4432d49f1365106ff312df0d90d42472265d28cfb8616a98c6e8ad61ce112f34ecb1502a22683ce7c2d240611bbc5dc0f9435a180b0aef6d9eb739886532a217baa81ab93cbad85df0fdea166beae58b7c614f4fc6536f618e0990af54b52af9bb4c2f535dfafb613552742f5dd510439e97c58baf6eaf25d7cdfd989f6468ea158ebf90048084d6abc2d5e12e48c635dbfa4e9136591592a0b5b45b9d64f70a7ed0920734a50cb2e079535618eb11f0c99815fcfe0c29f22d1b8484a21d046e606a84f53f953a16fd3454b81b2ae4b4ba0aa212a87aeae6bfc173d2e32aa67f4ed5683023c41a80c4c02c8210178aad72f5cc54b93d628faa5d0fd6a77ad2c3d788eba6e5c8d5fe9db4a0dd165f77770cd6d0af6a3a7826b2b0cbe6e3fd96bab9df388e1ef9947d999de67bc513acd3e2c3876ccc4b6b8fbc39ae8c9f5f0c4b1637214c404bc2725c5042a52e17cb934038d2e45df9883b8a3f076545c104cacdf8373cd4c2492f9fbcfc7991e4ce6963845f24f6cf2a52b0d226536cb162b0b8b561fbaa8bd589d4122b91b0b9d55697802a05c914e4fa9c0ee7f5e9138bdf1780c20d690ffc13fabd76aa4df47b043b856813d02a367741ca1d9f0dc714af3e821a6b5d41180d1c665e0e577bf1808fa2a1bef7811651efb9b045859677bf2f5aa7e1fd3b6f1330c3d08c10bc47d4951f832acb6eaddcffc266317962108f151c8702917223efd4c598a3a7c99a51251480d8e845e0e6a5d3ba149f35634b3d724ac318bf1def22b46386237934290361cd147094c5e304b64801e7004b4f8dd05f9db75be785bec3f40ab29a78952c779e035603aa9c44998e18b54d3289fc2c376d1c33baf6d4cb750456a9682e26e6f59025866c8bfd543c3be847d300882e918bc56303926866f4e87044d9f4e706e8ae08f53e2211eedf7a02b4b7fb9151d2929725bac223022cdbd3fe674bf7dcb183361bdc6f29800325d8639cdd5c772d9ede920a9b57c3825c73c83f6836b08243ec2df004be45a36ab6f9d9862de4a838c785c618454603999e467994cf621765bbd3f57160cdaca45a8fd86a728d4e4b4b0768ae8120ebd41527d348cdc1c04545225cf878f3fc83f703541bbe811de0dd068b89c5f9c5bb768ce9ef08b1a50a3d1d8150efd0f5381b03d508c5d8b3eb9c864490b3c3d9309e66fa8e03507f47c32e9e875f5215d217675906a8b6a9609b857aad96614b9e29d4b9decc5badb14b861cf1278d861347d2368c3522c1c2dca59574fe182d23323804bd3c662d51211bec8a80cda55069024ec1d017c6821ac7f8cfa0425b503459233d99a775252bdc8306b10f5bb662b3c25e4cbe64e7d9907d125fb9ac9c35aa1b12ae6cda18c58aa3e4d484e741086ddaed4688321200f64ecac28bb9e2f8d9125c5a9b76285b61022359c2e137d63b4f34ad0b7442adec76df96800abe981feb7dfe4250cb14ee14154c9392db18165bcb0a21f55cac04f2bfca7320d45d909a6dd75b5f8db44b7f3039439040924384712a9e2f427f4121f1e55d496e69941451a1852465048e52b21be5e110f324c3abcf6a85b42a45974e0f7ff7310a1ad7879a994bbffd26cbbd8fbd7ea5b4d6f111a7ea9035c97f076943c07fabce2ad9366e60983dd2dc019320ec197ba33880330c5ce5af3599749896078ba568d037100da57252cd1be955911bf39704398a511aee4f96c9a7d4616dd037fd0e1f824a7ff6f0a2eeb89a4a50ca20ad6bce0c71c05f25b6087dcce8abc9b38295683af9f0fc91e32f2c6f62dd343187e43aa8237901b3ccd48f42cfba6c8a370c46b97c18c59fbe6bd48d727522ecc5830137cd9ac4d66ed7a87d21379b8b256213fedb0c27e4d4baefd9543881f7b3076ec778a4d8f986b4c7b6090d628e5cc8bb1c98e2972f005c481cc4f61c3794f3c8f9a3ac8a11fed1f5d0f6e9a84ed2e4da8ddf1f663f679dc81c0b9faa9a1d09eee9d85c7f949518d33e44b503f84ac5b305a7e86ff63681478bb9fbc900a339b26b74bafd688b9da1424cbdde2f46519b38056b807f7dd718d02360e5e06329fe5a5b0c43d619ad88307b3561e465c44d53992cb1a0694f0f76b9ecbc2934753cbfb04ea8d5c25134dbc1a1d929946b4331bc21e6007d2541290d250883ea6aada8c4ea2ba68c3eb18f73260f6c1a0a76e00b344e40156a4ece9309ed8f77d397f842c2f5606c253faa2437ecfe801d32b80a5cb80a832a7dcaf77dc003865e6420030e091bc75e6c6557d1f0406d824d66fbd964b22d1d2800ca8d588ba94f9aa293e2e88e8e8c2ece6e7e50e6e93c164f95c53060cb06dd3f15040a4cf680941a8ed178fe73f193b133cd666fa507c9c14712f5ad44fd68a2fe7da216593c81a21758a1962ec29ecf12d26998fbfdb2fea6a38d39b938b2f9f6b1f5a9a461b15801ea908f20fa298b338556b9ce3ec2990aea73efc4ad84b42ddfe74b5df2f7b1ade7c08084720eaf68ffa2165638d1c2392105fb6a67e68427f75757f0ccfd4de73a45c7cba485c032b5a134f64d5af6adfdf78d947e87fb06285407a11e52836d0f545fee28cf4d2687dea0e07039a5365982a7a8b1aee03531029eb62409ffa20dc5295ed232675c826ce2f8b38a1839d57d01bcfb7203dcc61ff71f29280ac0ac807d5837b6602e3bf0f4b32b5e1a710286c49346f776356074f1c8a8a972cd75df6c4ecfd504734672e871beaffc36e2df1c5a930256920a47178c68693df72adcdf4b280405a64eefd29a87ecabc2a7a9b398cb3ba376c3c82c8d7c45dd06c211ab32fb4fd93ab8385f6ef971ae40146810913a4ea9b2dff0887d6171630da345744b61ac9dd91ed1c85e0d0172bf92a07b15022893c9a4f81ca961b1e4d41d4428381520fbf6c1c8d85fcdc405d78ae4b87b11678c4e728d30a5b75ec16154ee58b3abf51fc445967a9009cc219fe6e049b2d9d147c6ae2e4225c0dfb8483e5bf7e88a8efc440cdf569e6e0c58c08e16e50c406f433693299ee399d282381d1e383659598e000adab95d236928760eb517d26afc2e3e8a99d65e204cd65b1f68754d3a64b04f03614631e57a16fc17c35d60338f83e60bf8bd6aab2f0b687366511672052f64472f8a0321641153920ff7f1de3892ccaaba781d5e87aa2aa56a0f2e40af499534c830ad6490015fde070a9c8e1e1fb1ac4cb077c165a6e84e55f9fdca267dd524308311ed97c7b03d9ddfd19a9d81ec05b83622efeb86e014866614d956cb595a10704032aa4fc0290cda808ca096ada162f6fb9a1dc91563624bafca924d2c9a25fe14b76532d924555f9b6698a4c072d6532fa84beb7dcf01acb0561fd53f4f15d902b2271cd20ff54ac6db00a82120722f95e56fedda4a3b2d6c07e8d0639132284a7e2928aa4eeb5e26a0dde1275adb4bb7ab4de325cb29391449d8afd95c88b717934f89350b4c1f9dfbd2fea2d16baede119e3a51d688ff1b2e2d548af33554406e098a4fa1791dea3669f82a0db799afb3cc2df8b290f23ae8804d1892767c3421c2e158ad79213442c6dfd124bbf313666a433faf707c0d5390fd663441827eafa038f988ffd9f49ecea2e4590cd210e92527c3e5f34592a547447a9cda9680c4de4de9631a2b18b294843bdd25c608c675402e4dd946e730b311f5917b09f2b8ba23b3efe2bb621978e703c8c7f890105d81cc434b99ec78cbbdf90cb5381fd1a1d68c1de32b5c4de9c039b5eefe5fe009cd0feee7a5fa30e5e30d2487dd04705397cb2743a95ec1d9f1995cbac18e4a69dc00c1a4e2519a8d2b09a9c763aecd10ceb8dfca82352ef0f11353b8319223eeb44abc04c0ebe885569c1d4d9b71e944eaad76fec4eccbb065300bf4dec3936d3efc92b6fba6ab8e986063fadde3e9c338f53169cd40ce782a4240c28c6006d0c01ce663c5c1f334847c0b1a13021132b3995243ed3ca1bd024480b3d5a195c6952101c1b2100a1b04a90fe6caca787c6d1b5072a46a104c81b3656f74b1222560db96f396ab82f5b74d0726d876652374a0cf9d8f98b3558b6901440e891dc47e72cc2052c1bad22da2e2fda64598791c5f721ddd6c7e79daa707d6adf917e326a20bc858ed8e54800e71b92ffc23d40f7164add5d45361e671bac6a71d2c16c8b9e2b45a67a479643bd9ec691c60c9c9541359bc411baf5105f2c43bac56ae8c713c8a7cb9358d3c22eb46f6045b1497022a6a7a152555b2b4607ac61c659d58f0a9816b94d4642dff04b9d549a49a638f2047d53b59d2a173148d4172a4251580f4d47ff35fb068f5c8db1f90131d5860b7d83365b2778979ba144252ba0682a94a9f919864dcc8cdbb2eaf2b59cff0556d291d69d34a8e66a29e5bc63c400477ab9cd24fae747f36378dfbc04402e87c0c86fdd194c3588646b391f535ff971fad44f273dbdf4e811c6a28ea06cc531d62012c6764d95ead83ac1f6da8a116e346f26810ceca1f518bd4289fdeb8bad278ee10b2b7009e51638e997e1ae2e5c7f9b301f541158cd8d42caa505344c940a02ce3668afdeabc090c8511dafff4f8fe327eee2177224684e8469f58e54d9271a535c24fb0b3320377da1c05e7f21484e6d123d9eaf9fb8ed9f2b8ef375e9d80e61be1483884bbe7125b0a569281b8971c718c660206040c2f78627d60d082a55ec3a73c85140a9908ada4e946ece7fa184a4a971d1eec9b2bb5cd09ef35c98ec7f22fa22f4db1dd42ab8178cbef300ac8bc2b1ca88e97426c906cecc77db9d73a2f529d2348acb7b7a15e1666cab3d0e8c05c0ae064f4b66c6fa64ec2ec2ca5f49965cb49d129d22760d7358b2c9fb91cad6fd0114b04f4adbc203af96ca2595bd646a02658376208e4a06dea0fbbc88ace489b13a79449160cf20935b1e5b54f3a78c4cb33682d5f7d17a61b5bb2a2a4c78a85a1a26feb768237895e873ffd67b280b7796e2065f4c3e6dd3b6745473850d9661cb8cd24a7cd4df9b793a511e3efeac3ea39a5afe8a9dbc8a02ae87cef9807b3dd9b3ca1eccebf35c9c3c99de0ce12792f3a32ebd607cb02798ab6319fbb85288c7d9594a74eece539ae3a46c42730c938194bf826ce9d7d210ab911332d26be9d9cd67d4e6a3280b391000f4dfcdb6e32244462a9ad0e961aa007498c5de4fdc8ef24cf567eca8edcb4231332aac1b4082e1393dba52d8f20959135b84ccb162e0e3af3e993d1d1e53731a48944a9cc932dbf1443588c1e107f193c00c69674aa80fa5f31c4e322929ff40d2f9b786b004800240bae8cf603b768fb18276d7dc7e8eaac7af55365b2ddec07c7829621e14f07518e52ab39fabca7e2a26943ad3a8ccf7048d81500acd2eb194330db078a950cbf675c0edb48dc61e81e3e8f8f8724d018053e02af5cf96130fb511e833abaf125e510d4603b889c7bacc8db93093f40afd258140912f7f40816b923a5c60a648145526be4a8c6ca4a91207146773451def10152198168a276b84bf277bbcd3a93a69c559bb0d0c4016ee618eb66c5e20735fda51d71d0c90018e0737048ec5d4071b21a6581a2ec9fa2229a2e97ae01c65a3d96ac01a6030731af11152cfe9a8235a279d49b75e84dbdf2632ec618a99b6d321fc8e8655d9b4874e8e2689118810d11acff99caaf21475de875014bdd809562417180aa8b21ec5f7e61b5b0d35d08d895d2598058b59b1780c4599aa742d81355489b0ae51d4e5625f9767a6edf23af0c8ec7cc34e008c7380a1942660b87bd0019bac236418696e28e708452730f8d1b126fd526faf9f35331fa308534d33bf1ee329b5a89851eac5bd4d6ce4ea836109e59160ad86b62bfd9a6e26eff6c61a24b02d591f513d55ac1f5a256a1142c01b9ef8fe2c1521749d6f86a25bdb6d28259c59adf4ea1dffaddf08c24acb3a03adce974484a8514ca8a24992b39e49bec56af454e4b4d803fe3b5ad0c9b7c61f0e3454c66cad6957ac88d71d910cde0b856babd2a2d90659f4205e58a50341b6c6cefda1ffa84014dd626436bea99a9c0bb09f27f28056167c7fd6af1609e8afa06cad1e454bcae7d5ed45fd8ff881330479a0dcb78dfe39d02109844ff1dcb8eced6715ba90c1b738059d04f44101ec1768952122b9810724340dc98d8ab0d7cc1541a66e187276651ffd2d4d00cff0626437d44909a991ee04c82f364f6eec73a5d6d40be3952cd3467252258136c09c698cf466c8352d1cfda0822a4c4532eeae5f6e88ed924986cdd819f1009ad26b29aaee493ed4729370611db4052437fb6d5b82d1d091162d48a48a8cd76da0bd38aa74cb38ce52dc7815f9c9e698058ec816678cb928bbc673cc773311b39a0e9355fa1ca0020241173a0f68316bd052390a1ef7bdc564a6c2ac53ae3dcef6aa38bd53c1dbf759e6084a1caffad297440235b8ee061b84a861a54f6365435b5d7eddf04874fb6b05e7058f7c19b0f8073cfbc9274ae47d9898b23d4af18813b9aed66b5ed0d27b6c5a3d8a21dea4b6c8dc1aa9c05004996eeaf429107058ee0fd5298b2062673c83ce6dda50c2119c73f0da175d21b8c6e952673c7582323d86df17d0632b62f9b3e0bb3d9308e80f089f44e868f70ec35571da7a7051346e68b417888ae3b14dda5a2fbc130039f5472b5a85412c58d3f1f6f4b373cf867c0a03869579a1b19dad0e2be59e05c0bf3e811b249e6c2a831f656fb2fbccc4ffd6198a4d51224332227153fbfc0a79a2427321c9f038c41deeaa844adecbce82955b05c169b28032ec31075621430b3ff9b856dbe97025cccd8e2288964e023dc23475eb97d7846a4f615741777a3a9a5904e7a1d842f764363088605563cbea4f8aac3bbf71b5349e35e513a4649241c29fb0fe5a06b214a93437973a948ad3506f04c0faadab2683f477cc5bff499f3bced49605ba4ce28e3e4e8ddee04660e05b592547d0eb8770a36edac94cbd2005fd6b23ab6f9bf98761631ad121e696150f964188022998c5c8056f6b20d0e85c1e47c5777e34344931bb19bb1a492ccf7a3de308b9842fc003a093e51f05057a39013c8d80c22fac2f40eba71260911e887c41ddd9f6e16b554d1a942f18e60941248ba283279c18817b44512694b73c723d6374918bb431b207aed98d3ed7e078d8ff592304f31d050feea0a3b625d7168dfbe6115bb7cac82d1d8277bdde9a3d44cdb0676b86c1d9dea63810f857061150c075481aaa7f748a6ed644fe9288f1f461b0a309402c20315ddd5d7215af1e92a4041052804144ba9e08016f32785c930eae1ac580958aa2ab5ff6e076e68a251329ea26c579cd696a5a86bf03b0ee905f3d9070e3603cdecc2239e8630ba744dafbc0b65df86eab0ee2ef0fa6b6ad097f8d15d9fdb008c3b4120786a3c91ab62c8fee26129bf4c210ec1a093cdab35b82c17a4d92ccbe7216948d6967bd06e73155b63ef101ee43273918ca627a1e8b25ae3d670e90441101f89a16852ea3fd5d3b70245f76cf90870e35fbd07ceb911f20e658e70dbe731b06f89610439f7a085c39d8c270139f7288521ba22f4db331909ed0e6c4cf3be24c6862e4fd6709d0d3bff18e6fdf9398d0e694660f7e96d028dad5cdb87626917effad537358aec3dbfc81c006a4e8d52bd84c5d212d99a4b8044947baae97c40e5f8cf43a2e4d63910e26ecfa1302ca4f5ae2201c83d530ad3d769ed146ce19683c385bbe5fd184fc5d56d1400498ec14ad91c7245fc82bd471c8cc04592e39e6504e4167da5542d2d4b64ca92cbc89d16df037f1e94eb11baf82db48bb1883ab6113e9dd4cabd0ae0f6e775a5883ade3d46faddcf1254a90c184b03b9b44a4519757180bdee3366c67a8ccf37a3efce3ba969c398692e73e00d497b910efaaf0269cf3b9bdc696af0af439c97b769fc113e5efac5ea819e91b398c75a57f18a84f75f3a70e72558cefc26a9d8701c6eab9a3b5f2ee22cbd9d2e70986179998b1cd73b55596cb80a6919336a71a86aaa81afa3868e7278a56a953c1e291f7f74226c57a0825119cb0d21f91eb80a103815b10131294212b7763eb58f886807a0844f1106ed86907a02d8772578fae49691ec006d0cc09e2ada8d91a3c9f22322fc466784ac47239fce5956a0e4946565b2287c30ae2812bc8c9f1803987a04f1471e7de2a386ef9e833a6e342df11b22866d77701e00ead7d6797d2cab9447a65bd8feaeb3c02ba338a0bde84820ab07476d2daace0a69c6b69ba7f05d625d03a845b8a22464635ac1b367cf3a9b93245e99e727bab7a3992dd10a0c4714092dd0101853426bbe7eb8e43be14170626910d5872702ff89fc3aebe382ef9dad6dbd8a5db68ea6a523b7053cdb4269e88346d56123860b82244e05d3762fdb67958ef0afb7de5436ba4a17f3fbd7ea2bd979c850583e49fd2e93b84bb7cfcef0a88837d6ad97af25fcffb1498a2a4ab60f025b18b4231b4a76d28acdf3004ef657f0da70df38a75cf4e633aacfd9ddccfe17198ffe09e670e94e79bfc5526b2f05cce1f95280f51c340695bb025942780e7cae7de063670613d53486564182a9c813c2511b301e75a30dade08aa0ea47dde316caf04bf528149609909f7b15c7b4bf7126b3602b1ede8b18869d7141a674b1d16f904101b0deb9aff3f9b1c80daaf901f70768c3619f99dd6747b484f6894b98a9ccf63e613c8eb3144a3b61c0ebeaf3199e4941fb2a952272a0b005ec51a0ad07fc844c3b910451a6100a96a88a7b9a409897c00ed56a60666a3b199628ad9934c1db5b84733fa4f72eccf23e602ed0165e7cc35fefa65f098e0bfc4eb7f7938a26e35872bcc352334ea270b2bb13b4a5b3ad87563e18b1631f10a20596042293782f98a5050ed53c9dc0b2603307ac30f8b967b06d51fe8ced5648b33de19ac048e138ad38bb2cff87866bc9161d0690aff8a3b8f1d46e55ca9b549c0921edea1af3f372a9fb6e89f0a996a00dddf894b15c41df3b485081ff79a12d3a84cac7801b9d51957fe79427b6f8adecf34bba115d3e8c02f95098391d549416b997af9ad9c74972f19e9dd4134b15aad81c521b7be00c4fce850a15591bcabffc918e201c74d06d2fe14da74f8821aa53aa3067a78396831c5286e2c6f0d70d7d70a0f30e87feb3fa1a558e6c3845e7888fef084de9eff348b1c643c6794c7f551d067bdec27263bc1721e5aef9a3910dbd7c1ba274dd3d3b008361caf4c941204e0d43f26a2b78810c6bd45842e2a5d04eb2d298cd0b306ee11978974918381e99e2373e0a0363a0ae3ef01802737b72666610a3ce67a7553fabee6e4f892c1765b89300d8ffe5849d90b711a45fb16895ffebcba799680a59dc7adc4e5705ea8409c52ccfc064ef40538cfdd2c7dd0625afa8fc9f548ec94b4cf6e99e35887cfa1d0a51e13174f25a03f895c7ccf63bb872ac902ea5485eec65e531700f2e6a650bfe4588f687feed08fec32bb812d67b8402d2f73805a3a0460e42f584fd0c97f835979159cf282562e769a64724adc90169f5eb1ee31040da6bf9162e8fe6c6b458288b9c2b5792674e40c8f8edc0a161a971de85635552286888af4e899d95090c97825d2c873c8c9b199988e610a9117c6c0ee9a260725c4223c752e01a6f0bfd52018169838cc7da8dff300d669825f6a1f1c1209fd749c597d3785687b46b3f2634603c42182f7b73f09d88e9344a7c6442022b4d78be56b9a5406e2366f64a818a4bd0f521de819c937c7e584bb6b27a9d986bb9c6eb50f5d4b0562bb504900b0b40a212e365a281c02ad099864b2eea5069553c81db5d26a0a694948bcad88faa0b01489ee2f0d8b7cf198b7bb03f4a83cbc1b84dedc4e5d23727ed888e631cf8f8667a2bb3a5150474931872afa6020a08037fece07d533e53a590d033d61cae0418ffe8511840238507e0ac095747a87c33c0f50b27808fe4028ec9d58272a3a8ae56033f1526c313d9db0d758513b61e81af82bd48be2167d2764284099c5637a1ae5dcbebf4aee998f58a129ae723392f7c3dc22c3912d067c4aa9d34e91b52fa26d549b8f2ef24ac9fc2ed078a5569e1f787a96c7fd8003d2621258adea8567ff6ce798e70256531a3e25a6d83e813617b1494b72db259ee9c1f4333ae35192b14369f2ee3c4effc3d2865954d36d31152d26544f2e2e9fae26216ff33180d537122efc6ff743f3745fb56642ee13e5d182a2fc748c6b54adbc21fabe0844400ebbaaabee392b30b7f74f0f2ea080629bfdef9e84d8b4c6e5632ebe8152935bb8134f04cbf898a33d862396d364966ba3f9dde21ee391bdc27d1dc17ce3bca21a57119221151994d727a3ff9dd02a56ab5a7128c3d2d9ab3115e0a9fd9f8345f9476cce880432c90f7c86d327273bceee41be47fa43348e53962ad3c14053f93e90979289e9e52b099976aa49a3054d4ba18cb0bea84fef72f635a0c202bd9e9a0302bbb861324f6b8956faad72b0ef162b0c64c404ee9a0dd460bfa69ecc30ad4016099a32bae3623404a92c417b424af2621fd36048d95c298da45c7737f2393407643a9e969f330bd00d43bc32257f3ae3b34cc99808632decae2505b9daa9622973ac7fa6d3abbd12960cda33b46bd3b175f79239176207f16168f6106b1ceb1110c3fdb059955043f32b279b17d201191b345b1794d42069d17ddc2b5fb1437ece5ff734eda77f57da1132f2855b3375b062dd0e91bebbb7d2c9c0f61562c38004b98989aa0f5076d36c030bbe0771a516d90ba5a57048b7183a752f4a10463b225744bdcb6ad797bf544638a9660e6e3cd0a702d05816c79d43034b4c94322f28ef89fa5f2580aa53c4c3514c767c5193687b097b26788800387d0dd23fb5af3e1e5f0b2be2dcbff945c671dfb2b7bcd2b3ac087fb9b0ef632bda518e1ad5c19f957e4fd0271a824e0e30a9daffeb7e7e4efcb926330549e978179574e09bb6f11339d3fbb2b3e4d577e372528b91af608b562f49697f8692e10f85c9521b19e4e67ed0ac6fd77251818ac2ebd142a2558693ebd0502bc2b09a485ea3ef3c891b501185e409ec79b56fd532974d9b9e1dee742df60be3274232ef52f8aa09505a20204d1b134146aae22b6ffbdda96f6667242e0356806557fdaaec361934b242cf4c45a403020a9ff3caa624c419f8368b9b96f5f2df5465330294dd75ff8c75b93170529aa7be41c7257138a349f41965f42f783968d38d2b5b4b0c4eb6c0fe540b74f9c55286c14b08c75950206850996db417c640467a91e9ecec5b3098651a07443b992c5bf649126f3f9fc45804a015e614ea05e0538885b822a287ec83221b397d1ed34776b45159b79abeabd59c258899ecaa4a63763e522fd4b7ef666669203060043d6c8f3b1f015a3f030a141af3e1c6564ac9a20dfa9b0ef4580b553bb505c8363e091f032cbdfcb8d0dd1a5460ab5403b338b33f5d466d4d2f41d0f4d938087d3674f2d611ccddfbcf87fd0c2999fa7682b968e683a9d22d8450048652b892c7f4a72074b93393d2cd37e968127a559a8ffcff38e52aeee44d5762be88f06991704ab7cc30a5a4844a3b1632a5ffb856ffbc5cf4293fc2531bc28fd5428dd4a0a18d9a6ef265fe8d24e8bc7359e437fe152a21135037b5a68ea2b442e733f37883f56aeac2f5384ecf82964ba2d1ecbf036eb3ffbdd1cc0defa11857944a60fa904633bb7d72825c2b32f828a652060a4155927ccaf584910f4ad53b62dffeec57b9ec1210de5dd4bf81763e193b77ba102001e1485aec2d4c0564c1d1f0aed94e28c1b8222ab6a61c735f02cf74674e49b7359ee3b6965eaf6d8c882b2aa645e26fe0628089207451e40378b11f00c3b29fb75017869f6fc5f4722a35110e4970a639da8c2e57e52bbad166909c11e7f491a6fb13b178b75a83433c682c31f6d7322d01f25cccc1060086b8cfb4505460e73dc5baea041b40b7b9a364854726fc101c56e2fb44c0e54e5945a1d942fcf9702704800c7a056ca4587e0428964139fceeea0ea9b4076293a9b47f4591ea745b070a17bea2fb4eeda1fe1f5ee99088b90ec7550b207435e19cff92dcdd6250dc55c6c6e4f563b67aaf4a421ff0a98a8006f0113d0cb3d65516fe560eba35f57d45aaa7c8db1e388177056da799a3afaf67c7109ca672855284399a8d091f28356f5c93ae785e12dad45716327e1b01ce499cd263c203a1a08967b2621bb02f33bf02190c49207386a60384968e0043a38130663357547cea12e17858644a262d831a8df2c1f8177083478c8c50af2cf686fc9ae6f63f15d40ce15d4a9df24cc650bd53226111b98c30ffdfbfb8f836d07fde32cea8250208e38adc4d7c158ac16a0f1bbcfb75676e083f4388ce208c04037b7446e07e4a2905cd8599baa4537a25977f1dc1708b8d213010bbb51395a8dafc492c41ed7fde5d58fe9f66e0d0ea03af0aca02a1c45d6589365a75e1de4f351577d15d86d839668a5ba2484f4ce78a1b7f2ef0edd13c90a35260486a8dd47468d7324b573fb34236f1603886c216890e12ef349f70cc3f747ee7fb5e16f9fc5e1315ae2fa6d3339ba550a3e85011d1fc3803f5c19783f6bc6dc5ea06f93ed87ff05f7a85ca5cc09bbf212ae09663b1c6e96a590e8cae5103baf4aba099f6fd5ec6549aa3f9bbc9229d4b27d3de07945bb8e878589dc326687012667f2f76a14399be5df0d7aa65a5e2026f3a9543b40d8721049a8d1a5a4e5047221b2d5ebbb11daae30925ce15c33ef256980e0749d3155281a4504166e00766f68d5396d9f5c29f1b7ade51f9d1b04c83629478a989f3e882c17990aeb4c5e04e502960958e94240cb4c03ed3239a71efbf26185191ac23968188fbdf44f2eb4f1bcb0ec3114a06e6a817056d92a246ca616825ddbac2a684061b6f7632c82bb6c54d60ac72a9f9d0a9a665eddd59bc14e5862b28e96232eae6efab0ed3b4035ecec1cc289944b0a87764d9edb04440a971ce2c37e886ea158b0c4e159558155b6da5aba9d8c40bef354bacbd3ff2e10faf4fc8ef89b0ebcdc3f1fb0367d2e96b7e6e3d815c0851de526d2c136138b96738aae2bac39f37669691f8761669fe7794b16c4d2333f6546fddc886558278decf2b836b8bf3bea9e84369d40a1168316a737bf3ef0e55ff963f99efc347f298ad2ea65975de43565f42585b06fedb19049df1af223aab42dff440c8f1696ecd87c61d97c396b202e1c542ff36d96fcb3948e993922470629ce7f9a125c67b63574ce234e517dda058d17e51a6b0bf3f566a909a8eb8a4c5a71f895d30ba03bebc86c75922348a98a0a2b3c4bbba3065e5c541e2235104ed6cd25e04fe48899ba3dd426210c9fbc8d11758af7d42d9924483acf810d1a3f76e515105e19d3f909210a671f6cf56a4300cb68e3f6a06392b5c82339d42dbac90245d43b9818de0a15c5c126fc5bbf6113567b76855414caaa5e19aa06e285b7f9086978a35232273fb01ab823d21529aefa51a7fbcff6b9dadbac726c210d660cfde7dc8235b6c17e2d861de06716ebc1382a25fda7102d688ce20e10df8209bb35c574d75a6b7eda00309c3051cb7f9b328b38ef9b7b2d9452a7a4961a8043dea7ba52924c36a12ef4635e07ebaff8d0123d244c013960d82259789246a4e533760f35d802389f8cf68ac03685cfa4d1f42628c11d894bd4db8fb64d4a68efff45a69809f641f4174d1bd46e25c400304ee0ff535653646c6cf9a28a154080ce6a9325852aed861856e802582c65b48ac61552ad5c666eb6e6cd1fbfa42b5485873fb65538ec883f1bfd71c4362765ebd91b506671618e9a91b3983bc800c9d16ab957f69a0e130b8b44772654635a2c816950aeead237999c72912826d7e3ba3e923ff5a26b757f33527f7c7252afb4194f46a1d3163504829da735e4125e40dfc14b08f649a2bf6622e2835e8465b75dc5cf25c9c3cb98664e8ac77cb082112119aeb70bdd75a7ef69d337042e6dd7b956e6351c51cca40a0b5987640e06286ab0154be3db4605743f2d3e963f1bdce963a1297a6a4d6f645a822e982812af10c9313ed3482d6434afe173b0e3cac89cc0dc0d4b0875300081e4a0594b1ec752194f9a5478b59d96736f6722fe05941a6adc7b5f9e038b9e17995052d97ecce1fb94d6f0c242d1a46267d1fba9a6865880c61cb257383d183e4a3366570efa37afcb92c686322489a14bfa445a63fb970f84c89b72b9c43237724db36e3e0c2872f75abb8396c67a255337b110594a975f0cf1d5dfc57ea87c3af8432beda1ace613ccd49a8185e1ff654a226405f7198997fa5dc599888d46befa051c207f6e14a2bcccafacd40170f49f69f43c75de9533527a0c1f9830032ac1347bb00c8a202de1eff3fdfbc731157b2995654056e7e740845fe1b0a1081f585b5b42ef7f08708af1831802e7819d4bf8963e94c9dc9042ce0aed2d4c2a70b3f9c5884bba656314db839f96085a2e693e76813e5aa8e1342dd3fa7de35f975dfd5bc007201ed15e35ee6222bd40018ff625f4dd64695b18988418d9110aafbf1f5907072f90426086489318ca3f739a46e255ce970ba5263a405e83993426bb2efb0c6f744d88f96daa0037f42f5e986c010fdca7098b005b5dc6a6aeaa048e836ad5c234401d4ae8cbfd0ebf145700fa2a68ebc95ace1e0865a544b546b8b7331d714f9b5515a94c1002f5f0584a0a2a2eb0c9113d9e50f19be6a35e1b202bcda02d654e25a4cfc04206aa0ccd0a1a2c3d4103f3ba061b9ac29de92fd049d7d014a2010d7d7d917307677c987e492e9037507d22865eca06f64800416d88453c3632344b5b3467e049ba09585780591db08c60573718c8c28a2f6c5c225013db49916e0aad8eaa2ac7ce48657dd64fc1d586ee17f8a674e5ec68a72c824d16dc5c6f296ce308f29aa129f33d784cad0501638c52e1a311602dbf883f44d150f25ed629a1ed71835ae9763bfe2687d557b04e4748a71833001bc84a8685b814f59624956f2af9eb415aa03e267b0297ab95edd842118c9e1179d6aef3d80917d0498ab350993583438e2c69ee63686139de639e735f692aeb13e689c108664920d31fa000ddc25ccd87447c14c9dbeff222e89578e4ab2a9b6db01ae9773a7ab876ada0510cbd6afdd0de936ab89d17a4128e2bd1d5e93841f0d1d76d193fc1cb0b2d2b029179819da100805e64cebe2808629f42681321e0f904d64c83bdba749203ed4ad95dba291dd1b76c5c14e483d0ea2ab680414c0814088039c0a4e83eab7c22262bf3a6583c19ab98504dfccb94d792b4e9357a2688810e40738da1e7860ff0a82df84ca6c6ddc30339a8c948e1e84edb1ba9d60a60920c5bbeac9e4acaa261b67116b1092e0006c991fef619cb842b06a37906f6abd39ef924428007a48633e9950b0d852425d4015624f8f968e3c057e23484835d885226e0072fd042b7e87fe16be52997c94cd206d05a2702a1a34ea051011e9aa622a8e0435498a915e02f1d79d285c767121deb29f39a0c7f49b2c24395229af78e71733a97212d302e409204f1826d13285748207b5cdd4b00721c4711b16ddec095bf50de7f74b75b3d84e26c3c9dcc5e9d506b84c11a199a380548e65ebae2be25f603cdf0287c813141db6712ac7c13af8810b4fd701e3a69cdfccb2688c442b281963fae21dec994ae5b6758ff5d3a2f2237eacdc0c2a7a5a20c8737a884838c23e44bc44f8514c96584c031044d020695e0fbde9ef780534f7e751d14cc27a38352c70d754b957b71a23a9ebdc0bcb4313dc08868f55c6ee69a4ab6c765d0088ef81fd085c3e0317f3e074511c68eeef582dae7538f1801b335b1d6a23f3e9b1c8edebedcac2b8f3d0303d6829dffebb70ff8335ffb37556c2a30f720c394cb970a3e2eb7ba5794622d1f97d1698fa051a6c0191f50f10213eb7812ff2cd9cd9a44e0d599f611ccb6f6e7205dffd06f65c6a788c4d8eebf728f9853e4b707530cf03cda87262f56ede883ae3a53c2b2fe2c7bed8651aa5c43fb1d3c8dec3923d4942ef0772018f037a521a02b4276a5d4deeff9965ac94956a08a1662e31ff2f61839b6457220008c89cb9103acd15ae19116e1304a663f54c06b2ae9654e40832583a88988407084f5a91e9e75018ba27b958a04b9a4cf256efc75212260dff0c912a10171a08848fd834338e4721a9e41e31a97e72e9581d95bb5041e05d0f87a324737bc908dd20261b6da82184fb480cfd9a05c239fbb3fe0b3c13cdc9597a0567ad674ed4770b7ef639b372f7f562773aaffb6932fad300093da07ba6541b0ccd6503ba4b1feafba51bc3e78c6bcfb0c16459520c2ca37fa6a2cca8d5b18eac2c525fbe7af24062f39f48098d0774ad35b45cc5142e57041634b48713598e3a5d82c12b5610ba974a5ef4507c343ef3728562b81bf128b3a552e6057970397bc975d6e8b8d4f9d536eea38eb8c88405cf4f9af9685bfa3b3e20f3bde00425f0edbc97ad53958ef21f49bde6a030dda3d75d1f5a1356cef59d16abf4b8e90daef8b5513588c1c3cb3ede5b36a8622cb8993225a44bc3790230c1c6a50cfad8e5106ea03d762806cf14e3a8bb3f2cd1d7497a4b7e989302b65c22648239614222aa082d63c94bb9ec732124fe5ece60a1e5f37f9e4afb91f32d39a31f3ff91a6c6f3dda6eb769a7b3ce865056746b31283b9b884c2f48fa726e916d17fe3cef01a8ec82025f3a11097119b95df77372bb2992222d3f7644d72cd109aa1d6a6f5fc7622f125c2a1bd17feeb69e104a37222f18448cfeef58018cc90264dfdd1ac5a3e9ac25e811d8a6215c5330a4bd6432344eba1b72d21738b51cbe96a3e5c66dbc0b7a24ec6bf71f3ab985034f1050f94b742abfefdcd4cea74495ababd22560bd5d50b07dbf7b445c60fbbb92df06b4a70707ae565bd24486a9862952722ea33f1eabf90ac570f0e507a41487f051d6afac9077cd3be037720b64b67839da9d8969caf59a686eeff8ea30e068fcd0e6c299a8c2728706d1e2192e6cf5b66711b8adf3ade314ec59f6500851e5b6ca7a9996035d2b86c7182438630589e4e999a72bc3279fa019f7efc7a646226a0f32f0e3df2c46a3b436196f0d810241efbc1f8df60f8d8e9391240b7922c9ab373bca6d40ad603e35123a90710fa567f321283bbf2d1d8b4fa8e643d619aa0fabd5bc10ba443d009d373437eee2a7daeb5cce5d447d69060489901cea9bd156a833b50a7e08bf4e1d30ff1078cd46358207ec2972988e75afb41c9143b8819fd164f60631d1036e4e4734c21f1539cb9d88d86ea103ea6377dae639b07e0cdabe41e7ff9106431d3ecd99277ad7a35e76ffe08a46c69a0eda689f387bedbae48de5976ce15f757af377d7f5dde2263cb753744f7131ea8289816fb1acc34092d897529ceff26fbc24a8f97eb27d927a3bd9e86410e2ef751472fc198aad0fee3632873c066d9ea6879837520bfe1afa9e9bc659716ea4746a59db067c3f007b5ce8d95adc1e00d8d0d8cd45f64ee5be5338799475c7eb564dcbab94b5d2237506e19873a4a4691b1114e2100ee27f7c2735024f3df0f94d5020e5a46ec2fa034a6d27073cf3d9c7cf9dc73e76084411bbf22ff55a9d8614c85a74acd8732a747278a943d6ecdb47ca877685ac7cf493c1eaf37fd1c2adcc4e134625108247f021011d5447fa730e61ae536d144aff4c4c1ab8070193233729f2ab61af45fad5fead904146460a159d0f9a71f7387f03c91f2fb664499e75ee979497322d8f5641926c5a63af526faa8a6c9e553212993ef93c6ec59e2dbb7f912d2d972519b61596d9afd0715bee588b152710610333e41575542de4b25abce391488dcccc53dbfd30e0572fcf5c43b872751191d21fc34a40db03fa2129519068a92b2fdf7efb3f981bca11ff04d0c1181a06e69a7a9963602e779037f720f6fd05990dba204162386a3dffabc0224b0d51ecabe028c75521d73bfe5153c0ffedd06912f98a90067cd4cfc1ad3310c47768928e45fd8dca0c56028d0bceee7b6316d85bb086c8b2f58158da5124fc6dfe2a8b1ea85b0f8f75f13cbc14d84e8455a86cd9c8b2189067d5fb89308e0a33338794c4240021c2cbac67c6b7f07ab2d656114ad985bf93ebc03afe8ec7ccfed78f96abebf683fb11dcee5936418019bb2a822ece814890109d9d9a8b4b7f7df2ce24535cc4d4bd3c35c86797822a97feb4bf2765790cca21d57b5c7fa0ac4b67a0cad8b924009801654ec0e77d8d760d8b30dcb4fb46f3d3c0404deb9a9e999c1401234f46f8e5aafb803a992a94159baffb0a8fa9d50ace620fb4424b14eb160f0905bf8da404e962d29611afdd18278beb285c18bf9998230a44418958980a02a380c0d1536c6c1a00f79bf237cc8ab5968831f452f049ad9a1a9f85e52ea182a611f6a41dcf0a9cbdc70206467ae76d5e480383ebed8f09c02ab1c5a7f160eb37efc31220f1405f6014b083b1d4dcea1ccab873e985453ef9dea88f04f46f72f59bcba89ca1005715771de11b1d9975888f883a08677dcc0b64384f28878a32ab0c20074a644ac0714309e8b6093030540da780c426e8bcbb351a57b89b8a1d055d33b2fb4bf08ebc2475549721dee924ed05b9dad0b1f3893d557a2aebef7de62576946535dbc57ab47e5dc6f23bf9a215cc8b327621852eed94cb4aea6437276f132ca656d0f5ce06921e4c69b8a2c75946f29565451e34474010a02ef6d850fa1a38ac180c000336e53ec666d8adf9b1610200f2acbf96c5c9a4290692328804514b7543c6c40d1d7e9252be53e974c3fd025a915e674e2222810429e5f7797dabcbb4228e01d11a55231cc815bedc26f3e6e75978e5ca1d65c3887cb8a0fd8aaebe19bef63bb7ed34c11da722e4f96be1dd36e65e5bc3124560f518315416d70532374a7fe6a31401cdd6b8a1fdc7dc0f7c1c7d1c3d705935f63c9c92ed21cf16ce3c2e77a0a6a7af82906d4fec7a500015c2c234c1b649b0798171454084c2c67e92f62a6bd00b4181c571e673a2ef319339d8900cbd593293b62019201b9ae93f017ef90e801b97a300c8eeb7e580419e6ff7bd8469a07ebe2674d54ccae6768e9d38193a1a8621291793be1a0d5bb7143043ab5f0b781da13492c58f451d933aef2c3f47ee98355fdcb6afb1d41ed85c501a95c4524555c496ed55e996768f504ee3ff7390034036ac5052693eeb66f7031f03761d1e8815cc9b8a5eea906d597e5c07f57807077c1c124429b2d1c578715410b4be493e06dde30dec05355e9105bee125833880d0457818fcca01be422c639371af964ae605a66fb85e270c7af301a43464f7c8b06b0ce359ee80fda821b14a52b7a77bd3cb6a11c9af2881b34a11848ba7d32c3625b0c03fbf20618850d7f73c05f6b000a5c5cb7641c6bea45341ca209f70af1861ce8abdd64aa79998fc1dea3bf4a6670e64f1a79ae73c640c268b42f20a08e58da89223cc2c5c89002aaa001c0abe4d13bd6abadaa6bad66c6ac00ddd909347fafd3082549690572c8bd4eb65c30a0bdad8dda0e87cf02ddc2206d8486ff5f532d9259e2faf088ecfc91997ab3ce59cae978e1e48be68f917f4012825b683a67250621b82703faebfb34fb75ce0a4375810d2f8d6d05d055c24039e3c8d662d5f13ba4de2f1caec0c769974b80c8ea57260ed16cb04537bda0635755c1b50300f224c0f01f1a8a5fb3175b883045e556b8f3cfc3d6a2e60d5b886bc198c430e9e1771c92c2e861f40b3d5ee3e2cb4e4b29a20773f0f51d0208deb9c491da2afb193397decfa17b699ab1556a35c80c90d340cfa5d0f4e30bc0d6deae1b8f09c10d6819077f8178b042b0cc9a30e3d519c0f884e39c532401893038b49001cf39c4a3a58babcd6cd210034bf782c4379bba08e563268786f62129e8a810e83939094b43cc6a61253a6e859129a548ad2acfbd9009d62e74e630b288d683cc404ebcdf47011be38f089ab04f484fc9f8e843ce75460180f7569954214f0acb5ef0c1649fea1c398710fc7ac11a17d4ccd7b09c2f5b0ec6fdb8d0dbe0d2ae6f83aa4364ffa4c8fb3cf4c28720751ffb7a0667d2722f236caefaf8e4d27ea1b25d8611b8bcb545b2e33d4c5db29eade0e7603520926910a0a2998bbb303767a0768108f515e023b8e36ddb025276e3a2d666ffdee2c321f90e3406078cf83e6706cd55a08496affea24e3e7f0148729c2338bcf370af6ca396c4c06ed1e1ea2433de0d8c3ddb8581b1d603d6a76ee77b5990b30366f79512e0524ada440e8350ff9c0a528c95fe8d3ccce76bf715452b7864ca8e9eeabf81c0d882c0b159a76b3abaa09610cccad16b4e7453a617ce61c424edf13f8d1e4d5960d152b7ff2a1bfcf805808bcf62201aae70df3310d57d6542ee941cd8eafd672b493d6552d280ee04761077f34046f3e9ab55ac89bbf083765bc790648e7f8b5ce15ac2e2af8456b5d77b9a23dd6f669da0ee0a02dacd1c65452a40c7fa85674bf013d98bbd7283ef2c9101ac21e76cdaa27de3f8654985dcac183d324060cb880223756e5e5d279c222420e288825c9ca909bfffd3ee7a36577e05c2afece344479be81ec940b9f66431f47eb3c2a623e2022bfc4680c49caf70931febc8f6acc1255ada1ab5efc81b73a1b0be215c347595dffb84df09f826183e5e94ab451b1ae1176728319760702f0cb1881ad379845ff39b5cc039c76ac7382293d20ca350159fed0772970bbae6b4597961ee2550277682cb26f14947df15feb00dd2156e6a868cb22776d7e20d2643cdec5cf36774b5bf3749d37017ab8223d70c6861a619af2b87b461bf9d5e80048147bcfc6af14216cf9b11656748d20ad065f1845d26951601ca18b98c2d76e6278a93ba139119f49ef76bc35e6afc4b5ea8172fda949b11e0b2667cb8e075d18b5a3de0cbb4e0e1bd5dec59130474502fb8fcf3b7133e8e8f8c69f2b5f73be1f3a6e122fe25c0848976144a8fec86b6c3a7d386562310a239a71865e0a1939dff3e1503a5429be5deea99ac51be9903877a4ba30134b9482898e11812228b3580860062054632952135d8d4aab37802337a41ea2c5cd68171c14050e3659794b14401c5e7541400263fc2d5913f75747052466fb907da2b445a32c9d9f71688ffb80829c9757cdec0ffdb1ced7d3590098706650d5c4f860293237b8d98228a87f9c362f39d16b732302e6240759e42e0f6458e534074fb22cb9798c0f389cb4f34558da117958a8d40e17f6eb64bcbfe7f60356d9faf30f26c869557c416ea9e13b1c005de0ed880595c13bcd7cd1392570029e2a70d022c459c52e75829edb7a448530fe3a0f249e5b40a35910e8e3e0456dd66a7605d4c01c81f1b7a2667979352035a2604044f3e24b730ab13cc8b1651f79f1160e47d17871739925c3d9103324145b4f7a06395aed2d62cb8bf9a0561e992bc1093cffa71e70178d0126f08c1ff87e5693ed61b1901a0ced708a2cdd9718cea51f29f8d23c42bc2a9b880be78484df6dbbaf0a04e49b3cc03efe5347f3fe0f8245b66b3a49818d11e08c85d933d93e88aab6a3f3efb90467332e0c873227bb679764e94b02fc13fd3f64b1806e768a1f270f6e6e078487863f2ab803726db164ef4cc6663492f74872dc2ec1194a2ba61acc09c9b310bdae6ab400c60df9d6873a341be66870cd80986c5d34591020881662e59831cf472367a24afec0b39c12204dc16890c88362da49f3d1f1915438d6543c87389b476cd360a1bc5d62d2b98c71d4aca36b489412ffc4e3c19d86d7088d0b9b1998a9ea40f796ee37d3b0678813637e27dd7b01272f98a0b12d836e0bbb6e1ba8436b25a048a6b35cce5079893b57538086dac8993a35a6c0fc4cbb7047374f7580d010e48caac36d0d128372c389b09d54bd513ecc8c6344f30a16f84f3e336b189d90ef5091a76c9db0f488c799ab80caa645ad64350bcfde0f28ef4093dd5b3c0761b285cbc15c65180f0eef386f320883b5c45eae8a5417c664182ab8b24106795abf4a815599656838f5a8cc318a558943231b7e648d581694d7d60a9ae13bb1ecc3f87089e3e823fa2a00edd482b75e2cd7b3cb69c20b8d9478d1af69f1b8668177782d4084b5f4b093da36626813b86dac6d4a0b32fed94fb2889e086dfe7d56a1bd78ecd44d6b0236ef69cd38b78d8200d3b33c902d7b8bd9f4b452d6b100d1b3dc707a205016a2a2db141aa1f07c9d55345629f416b43aad1135868632e34903b9fa6a3eb91c227fb74e7dbbb6e4dfa340e71ff9dcbee511683ad692a927c24440c75a9564376a9464376170643745546c375554343c4627b62d90e5d85c1705dd5c8e0565cc08a36d35d6d0cd1bd980c9375ed772dad867337bc236b0888fe9a125ae7260f93c9c81274408cf1f9d2162a8f9295164941595865d0d9f09f4a654d8fd8ecd8a7f74899490da336506275623f5f808056fa77c6465fa00a3cba50ed084ed11ebbe8487bf4a0bd59cebc0b70c0cbbd20fe9f997508f4a4589be039cfc64477898a02a4b551d55f01c7a1510c49e41124fee618acb12a8ca45513a99471d38ddceb4de34a703c41e3e6894ba343c3ac58703c53aca6b806463a0c6f9f98e4f3716a9623ed20bdbec9df52e1de388def2776e58e52909d0a0222b91da924b6f41023ede59bec6a2180afbaf274ca7b926261027c794209f844cd66eeb38da1b2c32474789cf367b3ea49edc862a671bcf9b6ccf7d79a40f068d46c14bcbef38aea8e605146b062724a824f67208108c51bf8b0714cf4c3c5e83f4096881baf059993fe86342ed710422685bbccb43358aae2c5c4a47f338beb6101c4d6dc99242d1bc19d4637803fd0e2ba73d2f23ea8afc429ecc8afcd72a843e35ce3e22a84973d194bd1b6067a2d612420a390e33b22fc2f59d03bf9d95d432a916bcd0d61174cf200d8c3e568e236b76bb89e62b1c2f758794512cd922f18a3dab7e7170704610759265f3660fb035142b2f58899c40d6f325469c4746633b401acc2f568e129bab4f964683608eb1e46bb87295479973ceeb28cc9f886097451038e52e930bbfe803d406204049830d2361ecf6556c267ff16c9d25fe110cf7b2dea3a6998e9c479326b456f942f28a5e3cca129f8862f454199334ef7328566a0c0c1844b817abd09235ac9b914f600a44c7fa81dcfcc2ee08844a3088e9e8f39c51a0ae4b58a27bd0571f1825e4546ab952d0b196b0cdd2bc6900d16f7910908aa48d1a51c059d789141430899c9c73d20a4bd124ca19b0efeb5b3a627110e82d7ff43c1fe604b68fd06d2022717e4d38c01de450ca099410e73275a5325945b301bfb9f0be4fb01c78d5bf8e6c11ddbe1b1399b504c7c4500b5fe8719ee20715140a8c188a5022a033c8cda071c072c0512a13ad2ff4e6c40a109623aca0f073f017df933e7fa3290df1514aa7b813c202c64f46a4237bd51887b5b079b204b9149b696f1f9ba6aabfb1991b6b9d1a1f93caa1815a1e685cd730baf70364598acd6bd22bd692acc260edc3665c8c4c34e9767c8893b02d879e500a49978e79b75a21d768f191a1e5bb119704f5b8eaf9ba6bd19904c807c3b7f75c1e31f4480cfdf63ef911586ec9eefe9ab7445b8ec587c9fdf0cd7ff946f393665bf3a5d099e83ddb425773c6f8d2e541fbd668fa962b13c8543ab16a4bf5e4fd934c4277ea3072b6407b1a2f00d2f6ddc095263fb35ab35445e6ea5bd14b5e859a78e2a7094051238a71ac8a8c29b895c5b5b351449f3636e0a7145dbda156e7fbe958b3c1e0cc7b40a2abf5e50a678a4fba0a8e52283da77d889d69ec859f8751d98fde8d915955f0e77d4e94d3be3b49ab31fd0d69e2a0763050f77b3c265731cd4f5ca7374c9add80748471bf31e4741d562688361cf763ae7629ee4df87f710d9410fb20dc4e502da48ae735a401a594d0755510234b62d89cbe863295702f0735bfb6d9a00ae9f54a41f605bdc32fc3a87b37170f9a5413dd0fe3edac6a17487fe9296cb2dc82650e428e4e16cad6199f9fd6c2b4cbc356b5d0ad242dadeddb694724b99920cce0642072607ed93fa42ef9e7cacc917da6bfac2eb95bed0fbfb7df1088b1cc62336b3389b73cecf308d7c1236f11b46f976c91877975c859e772f8ecbda7bdba77ddaa77ddcd53ef24d1e059f5c3246e53de92ee92ee92e194b71457f9bfaf0a2644cc6a87c2e94f259b92a7d784d1e9649882bfc352c9580d379b97b9cdbc555188b2e61b8328692bff259129971b179deb86a65d665a2171b5e3aef3b77dd8c93ec7d94eb1c4974e98ec691c8cb7986c196ec37f95466f2ede7471cf46f8dfee40b6dea0b2fea6bb54ca257f89b604904cb2544d0df854c2e5472a1eb42135f209904197379c4919c521cbdc1c9e124010a8ae5ac6a943d694452d53853a412d97f246361cda18cc92bb87841670bc555bc2028687aadb5d639fb720e9e3cefde5ae7fcb91345e21b9e43cfa3c20d27a5de3d67776b34dba8d52cedeeae953a6193b6beecea0a754a6badb556997dc59e4b1cfb168769490133e9e54bf92b2d41f76b7190462c9b526634cb32fa13d3704f43484e9212b73370c5410edb9f24dcb00b7c14b27967e400678dbeee91ab2af4a041ffee217a2f7ba29f5f0ff965f802350fa24b77836ed8ad9ee611655a6618882239ec2864ffb65f6ba534cb36916629a594528bba6eaa5252d951babd6a13695656d50c2efbd9cd4f25837e679a65d66a9a7d6b4ddcadee93fe66c2cd29a516f60fb27fc6f26fa99c57bbd6ee39ab6669364555b48944d409997e95b576d7a6b57bd6fa8519701d9cab5e10fdab91f9376926a59c1f9ea65f2477d22c8b2b5396c1be94af654fe58a6a6f1db42f35edc12cb3cfdedaec6d0d4b331d70cebe6be57f663bacb55279376badad6143ffcc3a481da41e7dfa2e6866dd294de26a54fbae83d45a2b73ccdc039ab596be887a995a4a3fc561ecd38f5f68356b6b464547840801092018b1c507cc7758fe4cbf85a80359f4a2dfdabf70e5860f9d370dd797527e5643da903324397bfad9679d0ef8923298303c9125e9c3932c491f61e8cbfba167795f7e955fa869d9cbcb4597ec5141b8f33b87364820e37ea6870a4499a932fd8885c3b438d87de9b377d17df6256c1decbeeb6efae189ecf6a57747d88dce219775dcf6cdf93eddb39f73667386c333ca8e72e4d693b8a2cfb21789be3a658e997ba0a38c99f155f69a080bb7ff22b9dda25f384cfd4cfb6c38338eceee1d124074e6bc4150f6b947dc002887f365731d36397b1d46e4f9376672f63aa24b8dec53c938409e7f803c638c2e67c8fe373ec7ef8639cafe37ee28fb8f4ee41875f492ec38cce101b7c9eef26b7a49ae11df0f90fd6f44588edf3797e46dbabb572db457da33fc0642a2b8898e006293fd45bf8d4847006995a2c9e49439580e5f2877b9189fedcf001dfc5a2c8e1a5216e11717383480071b1ab869f970f1c08618d93a7c4384c8b7533763be7fe1d7793b319959174d5d36c3bf699d280a0043d1d7e2a0f4ba1bc40d57b29f37b2b7cf61cf5a47f3c5b822ec66f88b9eeb667420d76f7118d18cf9a2afeb66cc0ffc48dd0c12d5c19fd674b62a8ee2b055b8cd5327629cc8f5ab399127a5b825c5c3c20d57bc1837d7b4d0e79a0eca936e9be43a7a6d2535e1302657430fb52e462f09a70e7e43969d0cbf214fd93e4718f08c83e6f9333ebf185d7a45a85b6206fd97f43519f6926c9764edfb4adf6252a6dfcc797e35a4dc3ce8a73931834a8aca048a7792429d4c4ca54b1a75dc26d26ca55974718f2ed25e4f7ed1a1d0b21bc88e2bd3f78b55ad1b3b9a5111f7d4f7881bbeb87809e34b8c3d7eca8a839de9d7a2c44a9edf3b98227323c2320ecf35ad244f991b386ccede079ae74b8a9de21b72f6d5c4254bf2fc26091c1ccd39bb6777cfe9ce79d16507b77e7f9cd7b3a3744e2ad26ccde8cc7e3e8dec5a3559b5fa0ab02f393c2571637ea1f33da65976243339b739c34cb3359b22d1261275d36e4a9b5239538cc20c7c221fd5e0a515ae0c62eb16fd9bdbf7bc4d959c92210dbd65b6947e38737cfa12ec16f45d7e165712953ba5f66758c615fd85f5dd7a063a28edf752bf835133b5d47e2d23f59c356703e8026c79a13cf89668a82d68f05989c4200dc47a18fa8187a6d1302f0dfa37180a20fbdb00d0d02d5620e1dd0e80ad21fb872d3900d7c8ede1c300f0208118246dba2c6cee320880993fa7eccea8674f5559cf2ca355b355665936b32cc3d9941248500e49d93b18282899ca2550426c3f94396ab9de29800d28f242640241039ffc806ed1ef1f816ee14a92b5772badf5646e1832b030d42b4ef8207bcfc1418fa971259f244f64f9b6b18c605ca17d8c2bc2fe898383fed1502971fbbbf1597ecdb18b11805c139794216731c22fcbb73770d0acbd0f36d7dc90b5afb1cf1cbb04b4ec6478b6df4bcb466134c04120dc78c4ce7cc04bc6218723767ab2ffc42f608b14aefc10ecce021d8c4ddbbe666a1f0e94ac3d75a1ddc9b0b9663e066ad81f7d0dfb729bdb7cfadbdbdfec57a3cd37999c4a28144afe098734c21fc20e8433598e3ee6ed2fde46a42f1c7df2b72ddbfeb72c47b62f7178b3b43fdcc4322c61a51e089ccadaa18395fae217da2565a8e91831d7d49c7d942fc261c330c189ecdbd0f1b25fa37da8818c0325771f4a2bbf1aed439a7aab3d7d6b4399a25f4df7ed0891fa1d3976e8f893939313ed63ac21ec40a69ffad8d1f07ec65327a9542a954aa552a9542ae57d31d690faae5cf5a38adcfe9046a6a99393939393939313efe4e4e4e4e4e4e4c4fb769c7c8ed4b723c6954ca552a9542af541b060a5be1d275f8cab50c72bd34ff43173fd31b684a2e7be86bf4a8696e5dba81987d48122e76adf4b72685f4475a84b962c09830cedb3df4eeabddbc911632c22a4cd3313c10890dc6f87e426021584e0a040a8235ba0662a6394e927ddc6c6c6e653cda02f9f4a05e0e85c3f1b35d30f87ccd937c36e947f42db7c19ab5c75bc724f3cff6be4871ac8a3af894bf2cefd1073df8c9b280171e72757dc731f634bd85f734fc3e6efaba12f9feb8e0191954d1c76dfe8bda3a11144b34a5f7a1aa70f88d3ffa08375fa8dced75e45faffd8c55091484fd23ece1af9e1e871c8bcb381d3c76c699c3e207ec8b1c4882870010c6320c312d6e977e8609dbe1d265f1a7d35f2e773f43b1cea7865ee8b58655fbee87b07ed3703ccf5774e6f8273340b88b884753f1c14d6e913e2f43b72ecd0f1a552a9e4c995ff96fd292221f79ff08e1c2e4654a10641e04212860062955ec74e133e20861bb4c0061e4882753a9d4e44cc6f48ee3f7da822d75f7e429cb076fc20c4096b478e53a9542a954aa59249a9542a954aa50f8205abf4ede040117ea0021f4c410b2e78b14cdef43b72ecc8c0112000e9820b8ea0c11758a5cf71fa76dcbfb9b9c161c13a3d0ec83afd0d8ec73a3d8e659dfe86346463e3b180a84a6e82005940c832d8b04e1f040bd6e9db517a939c290c21a80540b0821096fb2af4aeafac0a7ea084114c81074a08c1f22fe1e83a7edc207133c410255488b1466e52c4d6cdf937d6d16168e8860b427ec0a011a2134170e2a0b5c4124358829105d02c4189b88a39c6958dd99fde6dbf7557c3699aa6752f12fd863b5a91125c8769ea6bf57b3a39d9cd2ec6e0b87863f4dd779cc51c50294e268cb69839ae34ea386d64bba3e138db1cc7715e4a8b5ed4c1e0706239ebb88fe371573a183150f2f65b89eb70678ee37e76349cad23ecb59b81923751b5b1db8a9e1be19839238664fb755bd936edbb8be1f94fa42e06ca0c946c3f5912993854a7699a964aa1a4e0c026872b506040c4eb009e276352dd9fc4762546a3eff08b1733db871186b29ce53a6fd4f356ab8c93fe66b3cc4bf1acad9d8be8d21d8d8be842ff099c6f76e3be6dfb583848bfc696a31d9447f966fc04e7e02bfa5e2492e9df2adc90c50befd107061755082039668beb6834dab619df529b1c7123ceb957823261a3a51c8fc059226f97abf8f4f686888b6242ec76523fe39ded68665ee4d26f1a97c2cd3ae19dd47b18e759de9fe09b209ee57d38cf4a7d38c8951546288c8383f67eec48df8c83f40518b4eb841c3b1a12cade2644c19551b4ea6f264ae01cc933f5dda168d5afbfc56c1462206f1f0e0ed29917a6d7c01610b59d4ea3118a13fdca73bf69a98d234596a95a1c73adb56e1b0b526793c3188518f41909c213708008398ca4ad4a81ccfea425dc704576514713b3c43bdcd78ea6b3c497c80d5770ef3793a39dedca95646d9f25c56eccfda1b5597ca940b028d3dca8e3ecf5c297e9c29969c8156d316242b4a2491a75a2ee16596bad5649af611afb221c23665ba390b516938034d7b46dd3b66dd36466459ca643c9bb57e865aa770ab700d779727e384ce83cb987bebb3ca659f4dd077df79c86e91134489f7e8b203609a20b7d13ee5683f45be8be777ffbfcc7bb0fd791c2ed0fdd47a65f4d179031fd8af125145f42af52cbe87c37fb1af6a8cd264d54abb5b65afb1a675f45b2af1ad9577576ab9bb63daa5437fcb46e1685bb72b35b9d11a58bf1a33b186e71cd7188071846903714b76d6f6dd5360dabb851a7695a156d5fb51296b9bb18710cb97ade48db9344a83ffdc961fa471d0dea8b4ed8322e33f96d7224bcfd56b91aa56d6b6df78a24fd8c1461ed51f874c2dc466a51e712d71d4ded3775f5232571fbb7bb5913ce9eba70edd7e76a3a932e75dd13ae7634b5df7634b5b76c669d599f7814ea9841a593366d4abb53642bea364baaa5ef2ec60b0f008960cc31829594d3e272a6897b8e34ea4aaf7dc9542291365bd2417bd18bba17751cd791dee21891a6feb661ed69c8988ed158addfddf6758b79d370b71cac892025e1ce177098ee85a40f51467bea59da23e815f43b9c5fb12c82e82284824c9f3611de0c327d4b5d90e957a1ce892e940a37ec574ea63c51a633a91b75256e13caa11b216fbf0ce16286ded39d2478f122f561844296910911892c1f468cc16126b6f05e3e2bc2687f43963159aec852c5896c22c5f42057de627bf91e6548efe285145ccc04afbaf122a32ff42246ba2f742348b8cf7b5d1def7575bc97f69984280a08ca15eb3c3dad2d5c0bd01d0027f1cc149b30a1e406c74195ea07504ce5bdbc1e98832d64082a8b3e95cdffa4f0892efd2a41547a1c66de1fded5f15edecb61a6c3d8202bb82c456269f18e893fc1de2b65c20be2093991b7cfeb11c10ddf07a7b07d1f1993c1827203e5ec55036709c049ec03e0e284e124ee883b6bdaed31c77024dc349fe0e80490abe8f1f8aa7111d92bdb9ff59bd5168093589537194e6213b9e29d93b727287c5b54bc93fa11b62e368cffbfa3f1781cec9ff34538b8b37a3ddeebeaf8e086eff3400e33edac3f67e5b61bb8194e62935cf14eca5bbca37a14ac82a97ce4aa531e85719ea552c55440aa1e958dea4685a3cac9b0aa95a978a0e2a102a2faa1f2513fecbc97e7e30df1889ce816e0acd47baf2863bf5fe5ea9131aaef5701f118944b9efccbaa788278427e486e50450405a42aa2d2037a3e3226c5905ce520c2b0e0b8c71361584210c17eef856f11f1eec4553f4b0822cc95010b8ec35c1d078b8832a7efbf388832a6efbf445c2051a6f4fdf70651e67effb54194a9c17545999d14433286a575691065baefbf338832dcf7df1f5146065166fbfe3bc48dc1d5893294a59562a80d80f33cb95f58271f5e1de4fefbf2039c643e04085f89a03f62e72809b99f9444ee7725e4fe4b24f7979690fb4d9890fb4d4dc8fd27a0dc52e2474274e9e7f023115d7e62b93d53fc45882e46882e47c03f649e708c2e3b382f2c9437e11d1c162c942f5d941fd527611c178797ebb783f285ff84dc1fc4cb4721f7bf129100fd5b4647d9d7acc21ff3791f944bc69892f8aadfa424f7dfe446b972603c7c4c7c98fc00cafd267466e860a4f2fc4c423db82198c3f7c9a25c99b05be6241ee58a77543f527d2c2db93a924530548f5ca160df2357fd1efece2563502eb9ea6f94cbf5af13432794bccddff8203e4fee7198cf4104fbfb3b988cf91c20ffc3f37179e4ee60b9bd1caa7447547ab00aac25635484f8aa5f6548eeef607839fb1ee78570b5ed8f90420cb908b1458aa15ee11365eaf7b3f0f098d4f7b3b452582588affa513a1ad1a7d2d383abd293fbdf67c8c79e88c3843644b06c4f861ca6ff4489c7a0f0e1abfe22458c184182c493e410e5ca4a5c490e51aedc8fea60a03227bd4e866b1fe967d85e57d6434b31b48216a418427534f4515d8c299382caa20f450f07fbffe786defba86ca74e8667f6dfc42b777875b2164b2b2b41eeefec04396469e5fe8dc5bde0267ec1b174dcd6b282e2c3d93c49c590dea451cac7a263e236bab0f96fdd426e8f28c322cfa71165aa16b54c23baccef3e7015a092214395e53e55f731935e4756cdb8317355b8a1edae09458b24bffe0e07ac32bd0f595699be17396055f73cccef613e8df93bccbfd84b3129c3a531495f68ed0dafe8e36f2fba6181975c237ecbf8d40945b0422bf3d0a37bf0649f2bc85e842a04c9fe0f306275bc6d1cf4e64a41dcb07bdc0021972c6175f1fd7b01fe1121a3955fbfe5f7e7b0a9c96163f17c896f74e67405467f0d73d8641f6ceee73e1b2bb97ffb8a55336eeebfb95b8eb49ff107e4edb7f6bc6d580ba7779c5f9823679c1d648cb5f77a5e7b8adc5225bfd8e0125bec1057f8f77731c67251c673773fe1f6d75acb70c3cee9f8754eb71ac7ec838143ccfdddc1d091e33033cb4147fe623655f3edfc66802f9d2b0b16cea2e317da4cbf695c843664fa328b2eb3ce1e7f4bdcc6e1449229387b469ff40b73e4f87d5eb83b3896d5f512dabd0d0ed3e260ff0ebef2b7f65a2030a360704355fdf899aa7e33c0f92006fbeb74ba1dcc9c792f1c9c197d2b371b39bb40ce6a72a4645b77882fc20db8f97ef06107d117e6779069d3d27eaab49f378dc3a347f6713f1ce645f3784c64e5d0ae0692e70b8a73a0387c39585a43caf6531c26259b13c7a491c6180d1e2eb03560870748a0871c72f0c1b31c5e20e1c61739bcc08186fae039cb4e5e4af5a176a7256ef879fe0ac8e2e32c8a0637b42dfac156fb6f1143f2fd18a3f7eeb72d4e1961b9f48533df1fc9e0c648e0f46d04f5a18d53367d7c09d8fad9ec64a0fe7ea10955fa5ac231e3d110b77e1861dccb9f71ce843bbff82cc29f512693974da6f78ec664515f68effdc29bbbd21763cc4c5cd55a24f7937e8b1040924fef418a00127347459c6964fac2cea8920f9e515fef17dac8d784c35336a19e763a9c4aa61aa6cfc62993be2be198b36e469b7e469a608cdebfc3364eb5d65aeb9be01afea4e770e8cf91de6424835b5f7efdd2cd25cd98be19a3277d113e32ea4fb0e0d6afe18ffad0fff4f24d5fff84a383f151f8b3b5a552e967475332e1cf3d2e57ea74a06fca4cd8f4d1844fc4e09a4cdff46e863fe965375532487f9f64f25bec4e5fa8a3b3e94b38a441fdc521ea8371b93f6193bfd1c1d24719a61fbda974497814ad862d70caa18d6ce394fb6d7ffd6a44a16e886d257beebbe95b87a9e15f7ff459f6233992a4bfdd684926fd6665a6d25d24d35fd856c3a1fd4cc72bc73f728a7ee4fc91f347ce1f397fe4fcf93ccff3544cf923a7f623e78f9c3f72fec8f9834245454565861327fe31fe504c1428a4370af047ce1f397fe4fc91f3670563fca140b1b29222058b8aa94285f456014ef923e78f9c3f72fea4007fe4fc91f38785450508ae5634d0008096d9d222bd5bc0297fe4fc5101fe802b998418638c31c618638c31c618638c31c618638c31c618638c31c6582c168bc562b1582c168bc562b1582c168bc5188bc562b11863b1582cc6582c16632c161bc2b91c316e186c71a5e5cca8cc68b5d46aa24dc47523d236e246b7643281f90819e203231283090d2551322494dd643642263638d91f759393fd5338273cb2bfd742992828d21bc5a6872748cf4b08ec258f482312893c228364122924835a3d78f8e8d1faa1d3daa64ff6f729c487647fe9e3a0877312c9fe59cc419fa515dc70ba1da970336cdbb6896c5cc75dfef21e8709c17c624041f265e3311b1b1b1b1b070a3a2234a4bd5eafd7eb65636363636373a2542a95529c8486dcc671bc05f3890105c16030180cd66ab55aad960c7ab9ceebf57abddcf5f21e87b98f9530180c066bb55aadd6ebf57abd5e9f4aa5b8d20a6e0a1358fb74ac81825aad56abd5924142414141436ee338def21e150683c160b056abd56ab564900c924132480661558a8aca0c339c38f1184b6f6cea96edd13aede2010683c160b0965cc15aad56abd53eb1060a3a0283c1603058abd56ab5e46c9d38f1187f1f0a142b29668a14d23b4589874da86da6104cae40f0dff3eeed1efeea1e180c06834d188a0fc5ca4a8a142c2c2ac00982d21bbc2f96c585e908f1008252c81eb9425e1c7a9bebfd14b2d7fb2924a7d0ca8a2bfbb3fc70b0b10a970aaef18d097631409eecbf7ad13069a0417ad3203f52f6cf74e40a9497c5479f8f4032268b85f66a5f78b358a613d3017398e964b1304b31b2f6de1891b82c9dc71c06a5519bad27b0e38304b6fb3bcd2db460db3e5cc9dc3de5f8a197f2793e8b9b9173185b7f7e27a386192fb5a3c96c678ef36ec64b9e36b3a28e866af34f620df3379c8a35cc17e1f6ec73b1390781d0221adcfe96dc7e2ec63f6d61db4a3cdddddd3dddc6d81de3a429359bd44e4e27c7afa753d0b596b3d795927244f6c8f1b7e85c682d77bb13c5c1bdde9778ae0573fc6ec9637497524a193d8efa61a4e4fe502fa01d3d5fcd2b5c2eab15670e335f089fb57e444c197b4e97ee6eed4744967dcd42150555f4ab426eff8cec25644002205be7dcf89bbb8c73caafa5943b5b1ce2e3fa7163135424484f0f1e4984624380b8706e8c04c182f8e831948448eca525ba20c978f477b434b121405c1367de18098205913e648fa12444622f209ee338478c0881b54efb50321481229152086e7f2fd1a514820bda90e34b771b1cac45b8e1cc32120bb6b8128e6cb2673ea6111e99a67dd8ea799a86b821c723a8480e270fbf5e07c995b32cf805751723cbdf9290e3d1c3633a21b9e2e1301d14723cb27f272485b2839f7fc644567f2823283fce3a674c1b09b99b85dba3ac2b121bfd52cea5bfb59c19dd7ee2ed290e5732bd1e9599ca958cb1450fbd427ed8997b5a0ac12d7dd4c747bede4e6d0fdd62c57ab75b397257bac58b5e215f4e21618e7c2fe0a07cf045d634d1872e4b20b8f39ddb9058f9b43e57ffe69a21618b2b218b4e8fdb9b11414bb20ff1bd1c45309ff8d225633a57eae34b988c31f1f1650f1983f2f1a58e8cf1bef34104fb43c923c7972588305d179413bb584c0793ab96c7f7221ee430223f7243441d4522ec07f12cd46d49d2634eca3967968d7ea34068475303a3fbadd66aadd5344dd4d14cd1b6d1d4c09899ebbad9dd683422712611dc3073e57ed2bdb7549adfbf9948a65167323131994c2613cda6ec9f95e3646794c429528aabb81b9c1c95e7e5bed5528e94699ced781cec1e07db7b45970672b048ae73e6bbc2496c52f1518999e898b8547a547a7a04193982c4c11699ac40c6ae8e8e0b080f919ca15cbda2edfcfec7f99e2843471d27bf9b1c663c992bbaf45b5c831ba06c90adc9243a8950a839edc9a61244aaf44c951e1a95202a3dd9835cc53baaa01c5e9fdb73610fbb3ad7a5d3f3360edee0e4b41cec0ff23c781ecf73b34a4f8f0a4cc54765880a111566e1c1d262710141a17874a2cc899222d2c826d250ae7832a4f23839f20bbd4891d08d18117d54a547a527ebf1b273e4b9e1d5d1f9017455a060139789c96432995026a88949d4c5b8ab7375ae4baeeebd2a3d306b123225f118d58df7326204099224a22ff424ae44dee49b1c5e1def2573727875bc972784abe2541dcdf6aa2ec6ccf5fb0427a22f1c885070259e1b004ee2cee29d14550a500e51403e31940bf5eaf16039df7a1edf4308107c04c9add223557aa44a8f4a506e159854e9912b9f9883ad4244a58897e9f73819ad2c2660695991d6a4174e62ce2594644809ca440d6e7e74301e39deab2788900c05a7f08935d81a725a3c62403d309f2144e86ad5d1885ec331e20c009c97786ee8bddcb38c8255ae975ce99838620289092113494c0c397882719e85923130a1a40bea3eec804637f7c5130475751c26fbe1302297c3642a1bd52bcad0ef9a62a8548c988b7a5aaa9a910008005315003028140a884342b150240c7541940f14000a849444604a9d4ae3812887511807198310300a0040082000884103336615e56eee4dced36a837528c1dad6e8ba2233b30e96d56eeada8221130ec0abf394b06f1fc7d065b0b71d048b495c8fadbcf54bc68f529ab5b5d13505864c1c885fe22b42df917641cc03ab2d06527199b9d8fbdaec9a0533130e84f56ae4da8229930ec82d72d501228695165feb4b56cebfcc137a98b7c04350d485e8566eed32e38794c8ac0b160efc359466b532e4dcb83677b5c890a90362ab1c69b5af45844474c6cf3119c649e5d61e7173f202877533a52fbb2b8bd5448e5ed16c6047dd45e97b976b0021c7d2c97d2a411db0a2fc0db1946f1653fe8db1d27f2ab6bea998f537882d7c93d8f299c5946f163b7d55b1eb9b8aadff444cf84f62ca3f8b51be5accf44fc5d6772aa6fe89d8e19bc42a1f1e78af6ad56c1589beca25eaae66125d89333d930f91d81a7751772d4374e5d6ec55e95e67885cad2d44a07db812f83bf5d4dfa2626b2e91aed4ccf5c52b1dabbb9241c44a6255fb1bebd5ac45d1b9d0d37f3a86e5ea412d05d2ac7e566ae8f943d37c6e4e26c130013f76d27a68a44ab83550a02c1d71a50f49ea13a8e718bd6f9ba6661ed14c98c3b34b0a27d483ad05e74c7f738a9aa6b153cadef142dc3f101781fa3d3b2231b495f18c18fa0b27aea8248378ffce444480e6b29e11e3ad00c58bc70062fd9f19810836a20541c7c4f56a347ca3110d4d88f4e5a322f73363c411b5312b841b8383a61adeac88fa393b82b19ae9ffd418b0fae875384ae8568a9ff92e69e2bbbfb822fd7193916a2a49eba8dfea8bb17630dd245300d5aced603491054f6a0755b23efc30e2f9d595795a5ca1d7ff98697f45c60789c4c7afaef39753d44f759954da2ad7785281deee4f83d1b0d9c9372bb358750e3b366a0c7a08becdc413907276b770690fba725a693351be9d21080b71fef4324454dd3ef1173bb431b08f41d5face550af814a9e1095d01d221b16c19a48cef15dcc29c01052bc9e6a4e7ae128fcdf69a6d551b6ffe1fb7968d6c30473ee95028f7f64f86624f36b868caf9af49f3c2fe833090d8f00020ba7b0f33c6da93c4c10beea6aab1ddb0f4a86003b630b00ac3dbba83c98e577de32c68fd976bbe30ae3439485194cbd15f9d75aa14ee0666de189847ca57943e9500764f27dc7eaf07603469a36aded0123167ac97c843d91a9946752f90094d2db9025960cf5c676b6e12568da91daaf68b2266abc61236b6b4a25636a388c7ca4ddb4ac1a729f8c103fb66f795f5899fb274dffda1a80b22b8027d693b4479b4db44217b67c69702f8abf05e322bcd690806834e91c7992607528eca382677b1869e1e647dbbb71c8f9caf4942f7c8706fb9ce746d4ad3be1598688aea4ce8b928726aecd741be2941d03227e377f3f2fdf7503ea91012fdba5457f70a21b6d3564247c5670ba8497d7389b6f966558e5fe4ebf5502c0dc9b63d553f8719658ae0b5085b35c73233d04fc3c114a3c0111304b7febdd5af7abde5cf62bb2c5b186a2d90a2705d4c306c7d7b04e4632cd4e1157e861d0abb573371b262c041c02cbd753825ea8a1b32d31134ece7a02408dd32818ae93fec870b3e35c8e324f61f7000a7c176bb9a7aac1977fd3f25e0dba012f60d862e3e56f1ead4ef9d0315de666241d77f99b51dfe3aae69ed3894132f08ae71fe6b3b9a674344aa78e860e759c3dde989daaf6c7e778361b8f02f647499cdcacc751e7b31bfb4fcb2d877815993d96d00d64af220feb7ba729109ee0c2901cc9fb47effd3e69fea1dfb8711d92faca34378b9bed6475d342a8aaae7d18acf20ecfc0c6448932b8d2f674e8a5e3729f74d74578b95b9d30827f36beb07ea8efb71032d697490c24447addf48aea503ba6dc414f1d889e6c9c7ea7906b219d5f7e0defecaa2806d41fbe63f80e7c1f21d095a37234e6133ed8aeff34f041df58362ea26bbff6230b90fc0ce0f999c11a39f02062ebaf9c7adef77f3bc416f44a402f0de4c6084959dcc083a7112f1077679789eeefd6a79da07f013dc49083d030f6b5cab4da009d6f1ac692b3877a903bc2a82dccee79abac61c5bf5d9891b5698348f1d44daef1008b2d6295c1c9e9c03c2c9b9b4c681b4ed157ee75ad0da6761072145dbc31dc4b90b34dee4a9f89b60ad4232905ae9d5497ee7bbb365ac730b5140fd11a72153363def9ad2654e99aef14b6f88a171b26d474874d0056b40482e76fc928812c7cec10cf9ab85cbefa44911befc4b501e070ab98c6fd46bc56ef0d2bde91a2f49b5dc28c95143184a2f8a51ebc0a8059e42b072912422bf5dbe13ea78c3b8f1b1489550b54e3e6ef4935c6b546643e63e38ec89ba58bb24e31a0642ff4fbaa11e79f7882ee4cf0715586dada0ea2b3ad4e7e8f9683a7856cfa05556a9079c781168702c03ad117760b2ead6be042a931c38fda015b71a2d7602e7c72e242113163a0ccbb42314b61cbf11a492516dba42a290984c5c657b07e64ea45a8b8050d942540a4af65c0b876d1d36f1e80246e2a17b7cfb049094f32b6b63a7d227fae71e2cda4f51fbd6e668c1550ac7e40b2fb1f134b28d0195544d08ce71c0a0076d0393c59e123443651c61328c2d3f29b5d297beab7ad1c8b7d68f73cce7646ef7114c2e145fbdcf60fd25de37db11fe62fa2a02b0d1e141a6fdc21cfcc34de82d312d08f5c2048b9fea51d3133a921cfb90a12547327585a69147feb5cbd6631715852d92a3673329b3f76563148739c7708b459a9371c3affa33e252ac69a0270c703af37563de98fc4a7af6f5905e55ab929c457810c862911e4f14b080e98e51715ff2fde1d006d3e103bb19e0fe3ae90970fd91188fb4938e5014778d2b0670df360c7e0402742b6407372680054ae77173c5d2f9be177f8793d89c49332ba011aacd2eba5d4e560bf86d803f2782f2b873b8c33b80f89609022420d9ee5fa659bac0fbfeffc6b0d7ccfd25df9c304401ffefbbefbfee77feeb6f0adddf6c9553e33e56911058b9c61c5681a98b16ae95ebe719301a69b7f69e5b6d38dcf25975f0f6450f7a0885720b6e3962566a1df867502e1937c03bd82523ea4bdde08fd604849219c90c1af0b42b7823118343aca98e6cb83172b08d6a4f07fb89c4d0866619225f19f5254f2aa11766197a20cf8490905eb1b0df3d153d6c70229a72140554ba69942598c5cb176919ac2f17fc2f0b857648fb5b0700baae7b3659bf16ff2addcb8829c08fa6b46b62fff077ab3df1146831e64f346abbcd9154fc90ab2fe601c3e69cb6cf290181aa00d3423e8dfb15f3175dc3a705ed70399ea9858e619fee29d02fed0f914a1c12e1e95d2f3dd267f94b69f469f28f890847887126d5119250b99a891db066c11fc11badc03738f44563c2b1bc8c92e8a79a8e769599930b2a0b1b11901f3a54838fcb2a415a4044d607ea839dc61a1dbfb2f88d105aaf06ed3661d272e3d7b8b7d1c7c1dca75e0a8e2e2123421db3538c2d1808f51c881a06dd929bd5d24a146de55e0e633d05a9b83f027a049c1df775e873125c13538c877484e1809673d0d7177ae8e31917ee088b4e63bffeca0195042c57c5f93e364105c94802e2d286b1f0846577605ccb4317c73c2acbabc868aeceee5046f00622f2a6d4ec18d2716f4126c38c7a9d421de51d94e49a57b33b247ad95cbe46795c2ce03b2095211133bc5c23eda845a4a02ba8b77c076cfec7bfc968aede68c466dd428fe4bd5757ca8ea18e7a010432a7591b760a39aaf7bd7e693b7588d6fbe9dd5e558c38eb2279965dc198c872e14329eceae89ad3228dde2ba9a3c8e250e9352a2a06a320eba6b9960aa55d11f0839d6b37e0b3aed78a1c058a037db059ce61a2a5785042495f60c2209ad71d829e23a96102e47dcf042511544269584eb5c7e903025a3328d50e20c26ec8abb322c8455b1828a806113d499c7d6b2bf2422e3438cd19bb83952eb8523a4242561ad1481e1e88c7c05d9b737d5a5418299303689a5047f795a442538ddc51a49f734bfec9034ac8dc22e463aebd0295da675286e7c6e56e41fbf65f1ed4ffb72248a8ceb2e2bb17d4fc886d2ba8d3ae96b2adf0c602f567ee5bc70592942666a18d69e5e042db3ac0c01d8159853ebb68de934e9f38c8711f3b182dfd46751d22e46989dabe6d0180d559a05f785cbdcf967a243832d1a11866a9a8a21139fbde7a38942ef63bf78f058b3d8763492011c37e82d9e48fe4957d4db99dce22069031f291a4012ebdb86126e222e0371aac59f017f8a022317d435066670a1ace1fc63b32f0770ec73a309581e0450bbf47180ce382e25a950a3d6244066263105aaed6c1cd05aeab28841aacd4dd98beaa01cda858c9cb96228453b9dcbd1365357d95408c7950413ec92308c0417727815dfadc00bc752b505545cc7fed26b787e7583d25e47d0ea72a62953c0808e8d6a7e708d97320bfd718ff41f9abd0c84f3981c6a7ff13809c2e9e1e999f2ddf3d317a33103b27b5737cfe6f9b161f17da9c48a3f6495a2ba2b13644b414aa801800756636d487aed45175674b11b3d77d3534e83940d895e167782935a8d218b7e6a00e510df78240daa4c52b5db383a841f0228e326d043784c3806fd2079e7d1459d2310bdec7f5737364b31d7387d45cb0233771a0c6e0fbb5cd96e943aed687e2e8f9c865182bc4a5de80a61d99d284516358d9c4c0ce650b6f827493a923edbb968bcfb8b8698f5879755d160a3045e0d281f4fb240b6c625ac27768484d77e9564ec44918349a7ffc34689cdf13170777a95f45b522ff2743e65403f1a8277a4c91aed1cf8e88cc7117ad92e81632534282498cd49806caff4c1def6d106fc90985b8264612e21549d7acc2c199752a2b3d1345084b1141705cf77f27fd249a51ae7cc3a43c2cc9ca14614f094b31b6a1ddb41ec1273d2160125a3639152d3c77fe11b5f340cf80c82fdcca7446b7988fdbaec8e3e2320c665612a715f9702c3deab3b8844e5de6c645a2014eb98acea88aa07fa56ac79a3bc2bd1ab2fb6b004de9c95725838a4ec819dff9c91bfe0398e8f152064f227625028cf75619cb1127231393f2e5c417bcc795a652ccb2014b56925d02d5ac20ed6611d3cf4b725cb4e09d8017e1257c9c50e1fe979e31318b5a599a7a3045935219bc49126ffa7529302b1ada9ce0db932f2d2ba6898a39ca42adde4afcd7855e86e88008876f44ad73083c95db59a130d2388e88a43f9e8443434a7b73254a73e8deacdc42de3c60e3557591f409824a66d8e04f946ae83f237ccca427193fb0842624b028ec42ab012debcacefd472703f301e6c4d555dff2d008d3078c99c5333d70a9d1427fd59520ef57efe05ac67094b19acb22856b26d9028089e4ec6112f05a5abf2ed2cece29e40322dba1081bc46efd2b261ed618442a95e188137ac35018a87f843e88646fb056148d2f7cba48cd655758246445ded428d8cab45e3b796d1dec3a63da25b5082649855de7f14d4128f4ca446fd31033eb511a34413194e0de7698e8d34cc9de44fc791aeaff84209932c7605a2b59dd292212fc65ba296ef8c5a2c40cbcc19bd1fd6eb48f376a9a8d25c2c783d8b9264d0e6a2c2de222e60b99c3d753ee1e16c217da304c9c050d5ecbebcc79f27e174eddbd0c533b80c60ac43af1cf23e022a82994f4b1f58854499a2aad0abc1138f55566118938e5e8c70222873dc581abf8e2c6edbc24c3a85377e8386e5d252230bd713fc037919e51e36897a63cffc82a105498f74b7667326e5e9046d42531c149a1cc140e82bdacb8a303f2ddf0a24b38a02924da0956fa8f92bce947998684c3cb0b769440fee21bff60bf83ce8f9870bd1c1903e0555c812adc7898709f5648c113cd30080bd5b22e9368739311f8f5d9ef51c90d9f23dfec7b3f0c185ade008abc18fe4d4bfbc43ee794b239ea83c0bd80b79e8b534ddbe752bffe9c10b0fcf1b90d164e23f267ab70ae73ef4872e873eff61cba9a05ae122aa18a9983aecaade3d7bed7fcfdcf0f67fd0d62b05592620473dc4b93066bd2148f1714f136106d62eeb20ac547a2bb3f495bb9b412678825f975622213bc41266dc6c1ed4f646b3233df85514a0f26c9855ea6dca425c37efc8a2392964498ee57e595501b7a02532e701b597ab9d6d08860bc99ec74f2bad5f45928f53510d41c928f01f7e660dd65525a830a81b643139b28253a8a2b50a2e6ac3bd381e2b30a31a28b7c5b30c974d81f6b0c0bfca2fbec67b218e559fa3f62bf017fe8f54d1e349cd0b64600d15355ccd2a8bd8f2deb13f1f0855c878baf91a81d089033def0a858b36c3405ab2cfa4d51aadf5efe327732669a857e73842b0580dae87271b066eaf826d87cc87a3ac45d59fc286a23a16cc26357e8022dcf4c463ae5acbb586dbe769a0402f0e1ad37c79d7ea6872a43bdfc5d16c9073cbf0c34b619e2a98bcaedaa174f3aaf42950cc55348f1802d8639f927864003c2c292fe21c15a5431829de7a30ae2340f0c7429492ae6c3b29cbdf5225624e3059efb252628a8878c4c500b3db79cd56a2004ab14f6356f53d54cca7e2272451e678e86f5d048c63367459c9d4d4da95d9bc2d621504468cd0966140ccc2b754ef26c517fa3ba0296146ec89e442e024c0caa06838c0122f9bb5efc167c17953fb44e3ca515eb66c642373500be5541f069451f935edbea3a7e931fc29385b3e422e8a1c4335d21365bb680ac6b45fdca84e38a9b6daddb6a8f9c7a9914c541fd1893b7500eb3638463aca26f53fde22cd816c4df9f3b466890c9206f610b256b78c18cbdb6d4e3ee68a997bcc5b9db802a45bdfdf33e0fdebc2584712fb0b393feee1f854520433c703c58036657e63d5bc669067b1e17a7f631d05828656a7c0607979e2f1633164e0ea59180f9640f1dae497e7ccdf4d01bae2b54344839544cc9ad08361def01c85aba7d6aa46fa58267e2755bdba1da3ad4cc9aafb7cb8cc4c8ca2066e2012c5483f8f115f8f8b3f1122591580e08202dbc60194b1ffc7ae3e137699a21ee64bf49abf9042ec55b458ae5e81af35d4154a11e0503cf51f591c3e10bc3d64ebddd28a04b68f3d354c396f5a41f19261f07816db8bf53e807dcf8bad63eb6ea086b8b946e56f585f9d7176a46e1df1c8ed2319a4cc786f3742a37383d7d25517226baa72d53a0187aaef601dd9e69f3a09c30102eec309ca7f8a0913488b213aae25fb8119f3086c39dd515bfbd2ff4bc1f99c674f1d538f58ddb78c9786c376742651d1437d65441d7d79e6d3d5feb07b5e0cd4b77deb1fad56bf9dca9a3700623b89f3d954354a9ecae2a4efd04bb0dbe5796b16d3dc3ff38e022ec7203e489181c96a9c3afe567d11f472cf8be12b133687c8b87dc62de729c769b9d9d9e7c04af6bb2bf8360508ec17aa7b1836374afa28196451c53c82826c1c96855e049971a069160d4fd45836f56dbfeef55d6aea8c21bc79a2e3ca4581f61b7ea7c5e8734febac42ee75d47605d262a234d47ab7f583eefaeced26c842aa39790fabaf6da02dee60b14e3c5f741d26aeb7a893d45bc49a312d230260df486559b071f60d2f21ae980800f46a3f51434a34fb93c4f23d187ecd1ef59b6092050f019c87710194d54bf92bed817d8cb29abc593f0a4904f591d8ff84f7e723efdc0e098fb585b42bb9a2ed0e65754218a836635dcaf050c51dd81fe725e400e914d6e7a5dd266ee0a7aae1e5057707a65a0ea2f5dc632aaebb6284a65efda69f491adb15ff3776ba0df67cca6d2687cc3c5403f3c2300d5d0639416223d72817d45a148b487ec91546298b066a92a7ee0048b6e10d7878480a013d21b326f8129c5f829fc97a5c95e4c2acafb64a07186da8412db682552f90b8a08f662445b7282a85c82bc2ac2de42a62e699607514eea8abd5ebcebe657ffefb3c8c344ec8660a160de4363a3a340a84b2a478e81d067ffa5ebc1ac29d31a4fbae55feeb99c5a999a9c59bfb21708a5f7d5664c8f1d84c0743095d8bbc734638cc7ff291e991f77e1ef3e6fa2706fb6f624401ae396c5425fc00322f0680a6203ca4bc2c051fbb58098cbc0cd9dc7a753735ad9feeaf8fcd8dd88133d1a1ed8c7a0b5301337a172b683c31022c3b9e4214e3f9973b173aa578d37b6ca0a92ebc714b933f188c6e751a8c56813591e7b0afb188bd06b67dfb6b9bd6df79cc0ac1ef7ae852b2b2b981915d604a5b6564e33028730d39b45ff53262a5870bfe342afd90ae941fe5bd55732aa149aad608420b8667bdc3c0c1231c2aac90777673bd4b4433480e8e15f459df1686d7b8486d7ee3ca01edd6438d319a382e61e15d8b75808e1d91293f108037c80efba5835a2650c572605dc2ae99a36f0b2fdf8ee7d0af0c74c7539e115baececa85688d79d0e403a8dd19d1eb13b755e49a2ef23d614f16415f11704c3cc26c2a0da032f721ffa92bc41a27d53773394d61e729ccc053eb460e33be83588efc271caf3944a23fb6c9401c29264815d935cd6d6bab68b553229b2026b5681b525b35285458880da247ea3ab993638b16fa60d2f8c3bfa220295aa8332d225dc17be341ea2eb479eb027ef4273c5daa5958b3084195a348c6cc6d5a0ed0b8ae63725682d69da23798509c544401d33e4baabf19aca88e2db22431d139d81567e9c3e10215417d52447fc3e8c21b87ffd7bc87a8068df8a74eae6e2cee15190f29cf102065a6a3a7b8a0b3c3e52644bbc80a87aac3d6b74ae0142c020e446018d999e1b45a099c9ac1b991ee10736c534f8dc001c689da3eb8a48d547d0ebc164308ff9ffae32e5a311cb26c3089761b909c12705154eb96e067a11dbfb9c9432f279f900479711527944838bade3ce6ef863f83307d42129c306d77edca45e309b780604df46122c24f18e3b72d77f2284fc96c108a225c5b5471353583a2f3477162f400bd552f0d385666ccbe28e46010e1634c537c9948d06bd505832e59eba024922f12bff050d575a0c943c275334290e22a34a96640b2f0178523b7a063005a8f4012a7c171d2c2efcaab0eb08b9f3ec52df25b7e658980fc4454d72ce19591b5e5f7c247b8a49e713290300ae092ccbf7c02de806617f5a51dd03b158a71f807d4561800c350c0ae721456386c5f9094bfc300e02425a7cec4fa07f72467eac3a2fe9f9815d9d10be779ed8f12068ce16657d3c38044afeeb38f2ef73d75741cd67e72e2f82fe88af0c7df3d245b256ecb546ea55d5ebad25a8de82db512b6db2564fca62add90369bd1f0a11606542ef56d59d98adf80eec5385533aad489c6f048de13ae41925d87e649252630c8b8e9c3ab883ff7167eb1f807009197de576526c4ceb6672492a6fb0f186281cf410e833f99ece8346197282a7b4c489df8fb1db2099bddad97bf4555beccce540ea482d4062d50624fb88260d7d9222b4b1a0dd9e5a48b2121c0c409967089cfcf238ec7ce497a4201248d06a683b577cc2c4cc350d4bdc99f940b00f4ab3b1b5229d45057fdd22693eed144a24c31d19a6c1f4799d76801e5e15ea6d43085b63df80dfb910044b398bd16418c2184ffb687fddf15e9825adcf3ba0375fa961a0d3da4db187188fc4fba61a84f2df831118be9cca8e2aff98154a2217d2729b9c42cedb4ff83468e5b5d7f2f3226843df7c188ca38b3e5e35d9d57276d4ea1cdc5f17a2d4cd3d1d8e9fcf671203eb0969bcda4d30cf29e57f58d70c6fe8eaa9ac57bf687db1e4b9c1ff1ec3c68c10ff720c418883891f068326571cc435c5f639819d67bd6f68003912aefc229a3f94595a359475ece02debfe207d369f7996a5fd8371a9d95b2d686ffb76227c4fb336278a3e4756806f0305f4d5c180bdf84487a32b5fdf5b285ffc43c0668be071a82d78843e5d3b182fd6f62fa979fc7745ea4f1e80169f68173e11afdd9df42c579f70806bdbe6b62b3d742bec38b1e77c88737ec15fee69927ccb8c4c80f89197a5f9ddfa1d08005a8d7bc3d44335a97a3f437db5c22d9121ff531f4ccfc69169653b6e18fcadf172d3aa64ebd2d68d9ae75e8f5fbda1a8f91ebd1db75a7c97531ecb51d761050ef40c8b0891b8f7f67d467a4d013390822c411d185318b1ee3dc790ee0b5fdb00c2424c7f39e08bcc9d80d505501f5c31f8a16ebdbf298e43ea0159ddd40d3843880a851d7061ac1c55813bf8336342300d83632c3a5dd323e5352eaf18cd376d76ed1ef230721bbcd79d623e17e0db9e9c16dc3b6f90b6db861b9a124405b742d134c2caf029676dc74613dea6ae0a2f6ed6c53f35056ef59e2b760ad0c274c1ae115958994b8e6a1bc1f8a390912908a4269fc56358b67a476730491f1e891c2eb78c1a7fa214c52ff36a711d8f7611aa58aff23f77f10181bfd0dd5993e96715438a8c5d2608a58ab9f06c97f3ad4eac723eaff48aa5f263920faedcd8c8581a84d86e159e2a35f9e412ddcd32e10f6a4359949c94ca811cdf1569557a04ca1d7f708efba72e792f820bdab5d8e4c6e036e434e2a70f1cba6ef7c598485337ee70d31eb433f50e19ccd4e927f8fcec010d260c3c51622c8125336a1e90dac6ac20d1c75278ad33675bdd19581b20b2751150a936da92299095640d3b4bcc48be70e1dee0971cab7e21d52a6ca4fadc54540944e2a28110f58f5671b221da64f5c4cf55bae83ea22a75d4728cc5cfe43e1a901a96f3bf6ed58ea7f71194b7027b39166c1350d9feba35550086f8ff5b8421fb4a382cada9c51cc5eeb6617fda2d14d341cd4219e9efaa9dab18ee83200720a563b996f02b351f54c504895c3c984ae336196a7c1418fee4fc4c578e3975fdc9d241340fc1000c53b56ff646621855bac161f382a8f2d70401224cd0abc2b20f86f78a36aac0077dbcca56da8f964143cd993e960dc888430177e923aa22a07371a5b4d41afba9502178a81396fdf188b0e8737537242981f6ce404c88096fa3922b918ad41346f7798b41460ce465dabd679cbf1e83a81628d782efa625f18f2208ce230bf6385696463a0f118072094e047776425b93b3fb60399afbd8abd1a416d8e8095b33f265b2a0839f07ee8a07160682efc1fbe329e7f58903edf0bd94c47ecd561fa7f27c01ea352a3ed89328d4d1154043287b67d9e5c0a3c00a417aeb8dca4ed259c6f81307207b568c17a7507cd85f4e9e033c254ff78742cb45f4d93fd05752a96783d13e70170f0c5fec17f0282abed048e9b2f263d37a1ffd36ce43ff504bc30b6eb772f39d1ed777e58831cfebac3400bb54389ede12972f314fe7dd4afa3bcab165a3ca82af9e2a8502dd22bb13ec69e6d42f95801493937a0d6b7b2a328c481ee4bfa2e1d0d8ec349b7306d4114825be4417a8fb0c074140848e1eb114f40a6d5aaa9e8c9657c25f345e957959ef2ccb4788d52ee9370435a6de7d088208bb07665f8abb87c024962f07f7cdc8f09f683f6768522dbc55214c21521aba38cf3f86e2fc4366e6a22634d06844588bf0bfc256f60cb155848b6eaafc4351f5d9c06892cc7a3480e6738122bebcc05c4f697fd0221a529782cc4cac1042c63ce46c3f2a32f7f40b20f110d100af0a1e7e75723d2aec634197954324b305c430aaa035240a7d17addcfb160720e152d213fda5573e9979cca478aafdce845fb0afa0f17c64943805c0f24dc0c4a85450c17c2521f933edaba3f2d698348bf7b8553189e03e2e41a23ce7c8598cb93cb08da0d80a3f9023765750b11a56912f6da1432274e752242fed4e0f16a68023829a15e09c5c06a31e2fb319b5af48d43f0c2cc0b56605e4e62d9f83f469a542232ed4fc8bd6fdce7dd1d7215861cf65c37b82145a331c2eb69d55a050514799b9dc93c9db6cd6b0bfbba944debd70cd6a88ede76e8b07d44c1525a8e92d4263c3308aa26809ec43e39f03db48d7dbbca0091688cb2e23f0e5111cd24d054e07b0c53451106f1e2f0be80ac58ad9b3613935e2cea04e9e255733caad26e7983ddf896658274650056140e8ab9a871159a525142fdc38cada39947b5bf7b26363cce5978cd20401bd917a387738a030f70992fdff5cd80680a74d72fa4aa18fd06afe9972ad1430cb88c6ba383fbd52dfcc7c3fcb9a327ed2b7c2ad907c56f945160b6ed0f2374625c3a5d2cad8779c688620ed286fb8a36161a67205c18937cae729f33b8b160055a28056d7abe1dc98a44681530f0daba36f1195f84c4597a8c53634dd9a9702c0e137597f12fdbf18ff37c9950e401079a65a7143840257b5830c4f280d02134ef46f8f2f8d2c305c856a20378304027fa9d4e022f60787e88003b5edcb83d101a97d633c11124f3e42f3c50643f8c1ec36888189c4fe5809edc2072e3d651964363e61bcec0d4f56fc788064277e3807c85a4ba4051064dd7711064d4da668896adc978fe2d25f5e4964761b3ea9a8a882f749fc7d6afb8ef2584e9a7bdc9e8884c54aae66f23d25eb043c15a7f60c5a464a82cd5332cc5089a9f0eb6dd1e9bd33457c1757be9715d185a98e11c0b4ee834bd42d7ef49c88069e7e4311efe5e6757921a43a7bb798e21ef0ca6addd7732d82a2e3ff8eed5a34eebd89ce4b1872879c04b2a0185ab8380f111cfdc507c26cd95c931f689c5d97735e68eef24cfdfefc8f2670dab18a22e784441161244f4a42ddff967a6e2012b65aea2f9561b3f1c74ae3b2ab655332db299c2c279aedb1a2860afdd1faf25f930786eb85cc338859d1a379545cf033bc28e1ef61c22749aef2b430d6d3377a56b9bfd2a439d0138c1110fa70bdc20eb427c3f55a553563585d5a2f348bcef6e6d43aca0ee749e345936889f697c802b21cbd3c279752c334d5c6e2d7edf5575ffe4d689384f3b91cdbfd22f6185ace42b4acaed1aca071125f66026988a89f7b3139686ec3a51d477f01cbd3fd2c1175a38aa5f52db08b9221bf0110458737538deaf73e24d5b0f7ea784cd04f93f92b897a237b4b7d039dd97cc7aba385fda8ee9fc861920fd415d564eee8877e73ce941bf029cb6eb1d2c682aafbd7e47cb26168e5d9ead7e30b7382337ac1095a9e6febd3ab135dbb923230960ffc08a5ac2c1f533c2527b3e52633717414757d008d4a324f3a8290c8a41af70fb83440d8381c9c772d66af946eada4a290a8bf6a227068365076a85886f7edf1777246709fdcf723117a37f2e93bbb64bd39809fb433e1c46b67fe06d2f712df249c570b1b525483dbcf69473cd43ce9b37ee26837f2c3cfbc248913f72b5729919b47224512e9331c83f854917fdcaed3c0d3e2689769d36d87685d74403171aa5e311873de79d5a9913e73faf7cef12dbd27e4161e458e1612968b2dcca9f31f8dbb3bb924cf980c3097f2dd073fa6d56cfc8bd7155138d9d13e36502792486308881608d85af2e5670dcc222b2ae5acf40ebe6f1e8f1575a9050f1cd8677ea9ad597f6e46988a055632a34e3fb01884bc2b89ea1ccb263a8b50170003da5013fdc92780262ca5b8132d1adf188b8ff3ab176bf5098a6b3af945b1b8292b3cc7a1c26c3d7172d1b00d5177966836a64d7da15474f783d40e4be55cab5b16ad009f72e6ed2990a3504d9a02951301bb0ff0e644d171c962af8d29d359a4366129efeb0caf5c5b3c1070d8c6ccb9f51aadb70c3a1083899d54846362423f46ffd6d128f68b188d7e450fa01ab22d6e31e63618e152dd3dc2ac817757a1a8130d883bbb3ae5c509802dd9916dd5c08b35d5c6b54f0bce85d0c2e186b70f04a7341027fea7ac2606a4528d22c30c10e152ede9e954a5a124dac4c863187d1883528ba91de1e1375903f1b3905b126f36d1d8803a2087a4c25fadfd5e2cbc8c477be660e87d88d8fd4f069e8c0b1d5043e8a7aeeec8d6f516891a9a7c16c6db3d68cb3a587a8430cf28341838d2d30e8e62eed1da01fd0490d388b0391b354e38a62787b26384a5308ef2603890e6844effc5123a28e6c9c7a31a0b25a68ea3d49cdfc060f69694bb4d3decc0f30dffe3a5a25c30e0ab4103d38cbf54c0af63d089930a4638ebbb6ee270b08b1d04562853a082063d87607c285d0632df5c1292a420ef8df38a55fa5a3d7ff3fbf2270d3b52c0fa1c63599b9e056b39923a41d7a173e54491385f60d3d3381e7f5be0efa6c3d101a1abe9c3ccc0af6cdf860e82d2eabadbbb5844f66649271b4060ec22790d6ba83a47c5d9e3fda81a21b9f3bc57faac127ae1743b7e13da11ad51ab846256277f20e85de1f42725502b43e57d437037228bc247bc76983f2e04f584f8cb6dba2fe7f739f4bcbe61880443050b7efab58dd7b769318a76a4b9fadd4dda3a6757d621d36fb3e6d085692e07dfb73beef0e79395fac3157128e1ad815ca1380e36b1adf56585d252456e5f28e27da00805d34189d5d2013a2eb2be84bfa29103b809dc698416588e17bdb0a7deecd5024ed42da60243b9db26c3243234a64f18be3ce7ea793c1cc77616fb0535e6ee6bce6bb17d9bf65ce5ba931760921e4abe65572b38d5009ea31a90afb1d36e93042d3acb77936c93c54b0d02e77686875f708fc8e3515c9133a9b9ea9f30515431f5f00f94456f23af36a81b58373b74e6f5dfb1edaa569806ac63e3c99446a69455d3904ebdde01ae3a515f7831ab23832f8ae1c5299fb4fc1c39ffaa66a400d5c449872690eaa83140f4bb12a73ab34e6f75bff08ad1be65a8001a7dee710000fed11aeca16e5974f3e704a05a8ac7ca699dbd440967b6e69235c8faf804a88206d93285c236076c9ed1cd47407a4d227ab14d4de26f56e5720a29f62d8b366421a4b69dc78d54a2e47694e6d437857ce48804d0bd02e2f5e2743ce2d0d487b69b21d0c161717e57f37825870fb98728e2817a9b580c44971c393c0265298197a26a8e980c4d7529321a14c7dc65726135281ebceadb0bebf9f2c663c5055f9825bb739127d58de84ca47a422eeb8532dea4be15751866729b73db5d4ecebc89e7e60e0432f32cc4b5203488131818c2cfbb7e5abf7466c7b69a681a527673275ddfc36763063dc463c8f679ecd0ed014ecad9d5d9b165cfb258abf9a816865bb51e2a1cba02aaeb63d6cee6fbceb8bba9261483ad6e1da55e7ab1b5c5c833d1a85a01f2f65172df7105783cc2b58e2cb05465ad227584f35d9b3869b0b04fce7b3332effcca10db7d915281da10ba8e858ecf0bbec094426eb650e6d58774a64a4d9b8c4dae9176a12ba162422b377146f6f551a69934074e4dae32f45a083a10b7a123ed2a879579bb2634a93ec6dace71efcb52e377b12bbad3d8c903a8eb29e5356a8707ac7726adbf5c451e4c13349261217bf45c4cf13a488d5c7e3116f9523bb21519d18f9cc4d15de292f399915b6027ab3febaa73d83bda1949228e8e3dcea4328365b83e406c2ccb2ae9efeda852e8085c90cd3e458828a9fb18df5c0abb1a7fab7400f3c2a104a88ec99d1f11be1fc9de3e98a2041f705feac96e2a01b26b9088d716529d24f27dd64a4df21f679b3a024121ce0c5a7c8528d71c8f9ba5f2350a03a8ae916aa15871e51e89beb82aa364d78a51b3e20f0691f147fc0889ee4fd00ccf1740411b7297be17a1ca91626e762d027c36e8b588ded55f1fe994776f22c4a651f5149337e20c2646b8fb7dd3b5c4c13ac4aff5407c3a5eb025f14815b1b1d4406c19e335d03bfacb54fb4981a3c18aad190d4b7a11f482f1c664c794a5b437f9e498d733a756070a55257c22c003a2d1da8b574cb5c0d0c9cc61d1f489a05a3ad393a2d2a920ef0669b6cb2eb9b66f8ca48c08d3fc5381cd42d8e35b97800c45c60b909cdb0d7112792d60ca58e1e067020c66c259cd5a0a50089a0144e36bc54051ab444fe86acd49e439608966c8a67cf8ef88d681d3c424e5e2aa412f298f066bd2f1489da4b6f0a7daeaffc28510e588171e44f4b18e475a415154eb8fcf540b1ffabdec4e4356104e9158a6995e3e3e4a23e95b3ba8918dd7d7f45d1d0286c7dc090e65c98d7a5683d4d38dadbbee8aa02a1696d91e2114d647c312bff7e8d14b4ae34c528397658a8b8136e1d62618b4ba8bae011d056b751e3222d43affaa9cce8557c842d8a5256e37176844c6ba6abd1627440a92ae664bf73e3a5fbe0f80472c4475a34a6b80d537ac24f9b172d6805b6c55f099cbbcfcd608f47a95257c7345fb45c29330580de58741678e540b4d603d5e43afcac53d669a59651d88372605d4fe10d0f3299ec98c7e4a7ed9b6f8d79fea136d40627468d509d94787cf6b3b862a0fa60ef109ca423b1090c05a4847b3a4471de7301e7a5224dc0bcf3f4d49d605d1311a5eea6c6353c01416e44d61c0b92850d4a978fce6879422c5316f6b95e3100dd6d0b4f8a0c730d70b9d08ca0a7d404802646ac58ba43ea2d45f47a5f7b3228ebfbcff8bb0676234f3e7be4fb3fa716d6d56dd00dfe7c4211b9b37d6d0a428ba5c5b12424400acb1cb9537850c8c0aa8e4d79f6d92f0051e2f84ae7113448f114e80fcfc1b6d5d7c8cfd972ba29c2d5f2b325298b903124b23ea8ce00113ce3e11a105cb3834bd02f6adfa388dce8193152a4decf4fc3a7545fb004fec196710811cbf818712ebb1fa247805816b766175103b06341a42967b8d639670a615d221f2bb5a941a2216384abe3ea5e927bfdd0ed291740244704c4f55e30c7680973c7707cca314e4caa503d14d29f42f4fe89c846a031fd027fd77c096f7c331ad80bc3f4bf18828a8ae9b0d48d9ae8e2a57bc5017d909e60355456f407fada3c72382556f924d0e907eb230e23cba40a1bd51bd13a61c8a77590cbbcae72bf5f8f46fbc29e57e82fdde1d8a9cbc4bb77c18b6288abeebe0b450bbfd4cd755f5d5ddb5d4e430d4fe35267f03442bcb2d81a8bf51a55c0447db6b2534c8785ae0b13d56bf2dfe34b51c87a57c2dc0ef81cc309b24ecf5aa1d19757a51b515a7006a3e7d6a4e39c81fd99f3ea0770a9ba9e3049d1764b15dc3a6c6050c8dbaea907f2aa29b4b4272003d869a37a4a2ecd1fe809301c8ab07eacfd19582bbcedb4c812a6b1870c09d429c4f0aa3fc5c989f7eb53b1a825c1fbc03c7b3cec3f54ec22556fe4c098fc85be51f9d00774b2a686f97baad2acbc28c310d7c8c6b444d598aaf112c47dd0de4d53f54640c54e888878bda6581b42ab41d23783285db9a9d7554b6a49a771ada69d21b751488020151af69a85adc1cbe8d55d91f3a160a4612edf5bbe35eb0ab5769d7bdbd6554cc54097c2243e1d7bef80406000fdb72b83fae813b63a7afb5d31891f249d4f8d7bc0c399bd9158462f14e969274b72e3d3bb5a81a2bf04cbadf65f7b78c9e7f170a8bb5a121aac5ac933d21190e86934d72a5308da5c777888f66e2f6d80058b9b06b5b88a5887842a1af38068992e9df3947f7f69f54381ce9c6e117a3dc2c34646a9adad6a92281659f5e8009165f437da5455b644382f9e050792f29d5abdb5913a0a51d6e7de46e807a1bad6dfebcda377fdb2c9fc5769c56032c546ead6d5f1eff1637637ff41f0071ff0749d7e5b7bf8136c8f48dc583a69e5f303915f423a32b2272d97b9cde82af27bd1afe58757b86f7e6f6e6a6744d66e5ced1ac0f849666c69d993af3e345f86a47e5c6a900919c62565f11f5a66e0eae7c1455c6de5ab1deb2d08d43284dfa11251cfb72b83997c2dd5ea5172e0deb67b09bc03bb844128a8ea2fd3fc6dc9123633424b1da60e9bcdeeca464e28fe6317a54c71b2bcf0e62bb488ef3d6394261dc79e282d3c1186ef70877d2e4b526c42dd075764389b8ac2d21fd9414e307eee6d18c1d09651f3f44ae1fe0734c4d46c47dc6fb02d890d523427818f26da38f5a0ef4a23d505eb49c8694015aa366c4332bea985c07157a2ef46b33923b776d45b85b92b650fb11b1b2b38401fdedd3316d11d2a1776af40e8fec02b2ed4721a4c58c488a6b5a77fa9a7a11b00a4e206aa969a45291eb4d89384126508a1f6da7280ec05b0a2588a1b22a8329c0f364fe2f26341f0aa23294b080f80acda76d03b95f875c5f501db14935647f3783c025fcff6f810f66e7532860c1ecc7c382f6821f7ae373f529265c615a73817f3983fd8d3acbd83c561d86e685456bb16cf91872ed5acde3c24704786f9ad9ec78a77e5e8f00cd1e01276971b4bd06e4dfd3773dc3bc8edcd06c9f91f08bd1e2e0d7c0e4a2452aad753f2b569515bc595814c4e89a01b7690db1d3aa0336dfaa437650d60981b5bc6378581f1e3cdf2a41d7c511cc1c9ff6bb1260fbbd21991fc9d69840aa0e938746ca937d78339b8d0c4acf52641538cb67b5e64ebf9bbc7316173c7bda23c1fb42a48459bd5ff012fb1877706861686408014f6e2e1a47b5199ae52303cb43517be13be590252e9aafe206f4de27c319b22bb7726d183e42719a8c6331bc175e49dbe2ee556a272736d5fbcfcce6d82242f62195d35edc8f969d55db5d187fbd75a090948431f9f988e04a77da77f00a20c7fc5b691131ca416963639a39e4884d534168f403813dc4d130b182837b70758c470417bbcd7e53931fe2c9db0a94709f56337f850163998b1c009aab072749d3d704b2cd45c2597952712e3ca2e6023be7d559c1326e209e66158b26fd5b17fd803ab0efc9c5263dc490e76fb266b6aec406295ad5d9c67fe46861c3c42d009d26ad40669a05c854ce5225b29c6a8bb6d7577d568388943368e5b4c1a5b6e4fb34e86a41f7413336830a1199abbd1b9eb3384a0cc0baccc7e687285dc6725b9812099ad6cc5a2c363f1bc3b53e20621d0c031a665b4c1f7302808dca099c6cfc9bfc214a7beb3db52cb5af90264552c7f5d71cc2a575d2843c370351bb36722beba0d0209522cc7ba7a3540b22d379723487107d908f02410cd54f5c7866f0a2dfb53a5654972cfc4d0949a5a01e341c21bd89d894b46007a8507b7867f0920d5b9e92e9068632641132916d3e6681d89185f60d52423d565172b7235f7bcd4761dd381b6615d8fe5576c12979c97ac1d182251f7bd1ebbb0f65f1e116eef3819ad8fbfe8928d908f1d454c22da65dde617fe78f8d43d0416bcc4899f8e123e2639491674069db6d506a36a7d1cd3f68e9bcb26f60f10ff45afb044b528a2dfd48c6e07b2e1fd536cdcc508446f6db71441f49d15ebaa02b0322bd79547e072980e2ce09aa3177f0e54ef1b40f5fc09d5545e87160bbdf14fc2a422d029840c8891adbbcee2119db61ffadb75b4112b2238afcf746b4c707aad7a6fdc4e659117994477b44bdb353d1ac87c74ac7d00332aacfb92952facc24af699f95e6e82be6952f92558edeca7bd2061cd19ee0d80f96d0cb042a915542b33fa4c54fadb340e933043b2f53fde69d06bdc0c9a3a22b5814c48780aab756702b184579b9564a3aac4ff63518ef6e7b40d44f18a5dbfab87d4025c885ccbe5b455c7d6fcd493b2b8884a9c3153afe8ce4a955ce0b39ef92410d323ac398b3fefd909e6110cbe789c17c40f59b2ab92fe3f221a66f18fb7e655ab5355cdb87eefd928cda092ee49636e164cc795f6f4737aa296bd9d11a582f6ee1a3fa3992cf18e94686b5087c198c779b0cfc9c02bcf9a2266f270a1e52e7185912b87719e56b956bff51cedb68a291fd987a1c1ff9894d179eb1dc2e4b6c252314aa555d17fc64969105c4d86014a6144aedff93f8451b61f7f273f4acc876d460c1fa9acb876a7b44ccfad0f3f77557429ac5f4c350f633caf21f5b283dfa46d481cffcb22a093b9c09ed37b822b23ffdfadd69bcec7cd9a323faf47bd41cd3f05f40f5d594fb9b29c98f3414dbab8cf2433666b63da66d8736cf5badb8f6660c197481bfecd49408e43077e139cb9e3a0fca1a744515ca392efc82be7b47b4838d5c5a9ffb9db762e0a1012c60569486b560431eaa05a800413fa397406c9f367b96027c43df6925c54d1f8458ed3ce800f5dca4cd6e2a4f2b5034c6f168d081146f0888618508a5c9166a2b3d01efa7481e684286a55778cba588a25d86a7e7291dd41d5f40389d9d52e7c057e37fd1f421b511323545426ec5b13239434484636b3e6e613df08d08bcdda1b30faca543b13ebbeb5b8501a09b5e42541b4a10303b44ab2664c504d70cc583583d96f5641c82aa2ccf9a553d0334836ed752265f2833ce15d00841e42ac23e5cd4a1a9b61c04bf5259ef6e822cd06909a2599550b2080c0e5638670b491eb8f95895cc2b0990ce2abc27e9d225173e933fb06bd9b4e21cce75049bd1e038ebb81f274c050ad5d31c3a8343715aece2baed44911aa6c659730f73e33598ddc5eb7a9a20a26a6afdd7b6a13991e76f2080279330031fd7019f97c7a68e7e8fb71bdf6de14745e4e2014b0cfd9e65bbfcd061f5548dc6d1ac2b7da19c1769efcb2166331c73334c47ae0f98df8698f729087348c8bbcb03e0989710b5967ab001f0a707210a268400034a3dc6551c16b6b4a643ef841764bf8a518d3f67b3f8ae89de429cee709775f63c0228b000b2f56e536a4cb3702223f3e195985c4278c71e7544d5d7cd1163db72ca1bc9340e434047b87ed368fcbc1e2eba9469f1c9f983a99edd1846ed0a1ed4c8f1ee572726be8fb5a98dedcb74900832c5bcfe7bb180dba710eb8da833e9536e0a9ff2e866681c968f6010b8935337e911228ac45b009790d14494e02d5fff1382219d326ab73e2f29c4dbb1b8bcdc1fc198a711a2e9349bf6a5f1a9b2ee39c0d537387fff76ae6d468edac1ad0c003475b001f6447f7ef471b39ea17029ce0bc8f2024ed69e93e3619c544196722bc2105ec52049ed8628e4cd391351ae182360e868bad0e646f7d683ca0281d99acd6c9917036cd3bb003687b96e3aae8acd690ea9a20f452b7b378a4646b0081a23115b012a0cd37dd2f7e4b8f2ed537c3032602cc3f7c2aa48eaa8327923d8be650262f97006cde440d0bb26e504ccc9aa2273bef832b01f0a3bf6e553ded1d82d84242db358a6ce1700aeb77124abf4837bf35876f6ed75c7520ea5a02707fe4850e67ebc6aa94789338157db721c0fbceeb11c620f14d93ca95b09088100237aafd4079b6aa8570163ca7fd4a389b033f814bdffe343a39a1d747707c409baef4ea142a3e22b62442566981edec6cd6bd75cb0651ac994c22e9933fe4ccc8be6bd024c28d836d235cfedc241dbdbc494f279c47ea3c09011cc75aaa548ca78bd47a9d9b6cbc4030aa654fa9b2a74f5a8bdfac8cea8831425ea29d412009ff01e9a61921d95597b81628d41fcca222be00933caf134cfb743fc5f89ac6d7a12a7fbd29b8fd8c7a099cba480ee185f419e3d63eec51b28420a4c6eedac6598e84c2e82ebd040baee2abea5920211ed82e3e669d94e5b84692eb28aa27275a403ca1b0d323b0e55fdede46e40797dedd4f4dc88b7ef02bc5ce0b1b0720c70633dee9e5fae76ccae79cc9f636ee7fcf00f263a4e14e64622297900c35493dd1b8fe05c205e966f37314ad7c0f2fd1b383fa66375444342621973c83c1dd8ab2606b38a831908e58f6cadfae4d46a62525adb977841d0614ea6bf283fc9db3c6034189c67dc3045da0ec50bebe4e19c173ee74bd8bf0450467ffcf2ef44d1962753b33ede9a9c9fdd1009b00d018c8b88fa5485bca081a600d96a993cb6889d973c0ba893a1928f90b2c39e681dc494085b148c242005f409013f73e5ee1865c41c61e1108f78cae004d9390fbf9b363d7ec52cf719ce3adf88201148041c267920054f753d3b89dc7c0e81eec4d428b0efc3b9d5dd7a756d64bf81d8f606259c76b3d3f6de4d8f9db932621ccae485a838eec9606410c04c2481e818cc71c83c465e00efce37b13eff7999942784bd13c3540c78e19653f5f46b90cd8d3acb7926546e54a9553325ea948289a83055e8bf3322291522840d5353102c09594855893d681a465661f395ea82228d7ba0281d1bcd210d9dba84e13a55a1c2adddff20d631c58f3a73c9d421e9b126a49ad80e299d3b628955df0d86a92874c4f1324ef3f4841830485237f6b7d41a0906f371d6e3f2322f49cb498a31573362c7058b86b12800250e88631b1eed9fd92650356f3f236df48cb15f664ac6643aac8ae3bba5864f19e14533d3f8d0062ef564accc487e13c215b4b313fd016c8ffb815e7fd92ef8043f61f52a124048b2ac3975e750b20dc14946cafbb969f4440fe8d9763c40aea1bae52ad081a2a492cfed0dc85b577badc5bffe5683fbac157f3720bdee78d047055cd90558be7da1f43ada64b1b8245a38edb966d7393b994f8d5ccda25ba75ff68f6f31ac4264c64c1e74adae033222b4c1752654b21881d4dac0cc624fdeb92168bc67a17a1504296bacde19d7d407f34e39c9cfe622602bb7bf026495c9c4332e30e736414f2bd5332e5f7d56feb365c3fe156a73b230a0e3ef23ae8cce792395a6ab13c9fc818c37a4a592180b89c08165d7e74182f35294f00132b11b53533e5f66e1190328c885214de7f92d0ee1971cd8c2527928917c14f3e14f7be83c364ebcfb1e8877242dbf7a1f80a13dc7fb919d001066b7bc4bdc92dfd84f6ed7eb1bcb80c9b9d6689a83b00709be16c2e4d4ec4992872b9b5be672b32b22af8f8023834d67d7d68a353c87e95689fc4aab1d80a593518f876f3c57b3047827e632808d8eb977e7a28f02d495021796e05de9f5f2a15c5c47dd37b48fafbd3c6c29c4cee4f79f0d5bd208d5ce546bda44331e315bea466957612473002d413854b19c72bdea0e407b46bca86ffdb3956b3be0a901ffc7ed6182ecb982a78f4936f6657a21c5f7d77e95c539f4363cae2c1e5670578cd371612b522b65c95a9cfb9be59e7c785e885be7a03a458921bfacdc93b830d8ac7ddc280640b5a8c7845a88369e7b7f8951b50f8797ea2f11991307747a71c1b162e49a3e30357a8f2188f676adba949feef57e64d9f7709e81157efca4cce566a442a299f45e4f640461035a957e855b409651550719b22515a2825b3981d4c674f44646e52d3f721fcc401bb815cba24c4ff5d0b711ef98c06a184c9e620aac389e13720411084e9075542ce26052641821cdd768f3cf2689fc5e04f5c1dafaff25fbb7fff69752a624654e084c0864085d70166041a7c0619e3e6ca88061304f1f363859b08122bbebe4c3c626bb7fe863b9030af9fe9d0393f2f461e382ae0297f2f46143029a057ed1851fd8bbc213d8c404e7814352f41370e8d644e01633f02ae0913c7de8e004b99c36caa383587e1a628a3b4a79d2c110271c2884c909593062082044d1840facb088c20f4e80029d1170c104b8beb8c0a5e9a25163061a3474ab7f3e4886ebad233ef1cc70849089c11433c0ad94a71c840b948001153c8080042878c00527e4fa61b74a724d22d7273de5248218c85aa67ce4400b208a8f1ce4e4008bec79fac8810e13e13ddddd6b8e4a1d8939e7f49c565b5d68bb102e44bb0be1427875215c88eaee42d8eb3bbcd697fa526d7da92ff6d697fa725f3e9ef7715c571a292933d4a8d1ee28ff3190248539519baf7577253eeaf5c76fb5b6ce797dceda5e9d73ce3965dc3dacf67e400ffcbed0046590ebfe280a827b61d3091239ee567dc7a08cc3028b53155eab0812b8d65a2b89add65aafb5f6acb5d65a2705b28f15072a280f90ccd92feaa9ba98f35edbe233ef1d9913f400755b9e28c0d36b5c35ff46838828d97b491e081a85605867b38c4321161185b0776979d24ea2eb3224403a4235cb4ed81d97eeee0efadc731089d0dd7d57e99c715d8433342716b7c6327fceb8bb5bf7d14c2ccf596badd57df4044cdd92bc681409754fb93b6abaa744a3ceefacd3fb3ef553759024d9ce0f4429b542b750e08d36e92a1a339088144192640f4932069f4bd0a1e3542d5db1732587143a603a6e3082352164369bcd66b30a6b420703b3eeee6e2d755beff5281cc67a38c3992a0cec52daeeee5e6bedea3318d8136eefd5519dd624aa8e9824606060606060dc6b113c1dde2e0a9821341a8d46a37d92d0c1fca07d3d1dcc123a68a04307a383d1c158a1a3095450b15305139690a3420949d04102cc1447c8314211a4c0214249d35a8511a6b6de13c62050821284800b120420c0602790bb7bbd9f0f6cc57b0822ece77e3e3018af3666ab6e4f302b465e6badd5bdefbd5e85cc66b3d96ce6b65687b13c567881f15a6badeed67eeee76377f6c56b3833f90bccadb9575b6badd5fdd65b671e7acf17982bd8fbf9c0bcba9be05298ebc0042f2f2f2f2f2fd5d65ba3e0b05c477f1ef57e5fddd597fb1942a3d16834da3581155e76d7bd7e4ce0e17bdffb7cae155e3eb40a01a683b5155ea8155ea6155efc0796520a8be2e37d9426e1038d509a04d08f1b143e9eb8f1c1c8094cbf07361e60faa31d60faa32630fd910da63fd201a63fca01a63fc201a63faa3949f989c90e108b5cbec01b982efad2aaa62ff4057b1e8d714147c706d424dbec18a3f2290b4fe51903495d3568342acf3fa958006db574b6e3dbf1d1be59057bbabd56eb5eadbd7576dbfb2ef8854421d18854328db4282169dced96eb9cce3979913d77b5ad6b5ca5a36bfec553d374ad6b238c163d68b411cb637b47cf50627c3b627cb4dc1f23c637fb6e1f90ef16ca64789fd54921f727b6ac633177f7102772cb81e98b2c21ce0803468825c4417981f4cd763daed2d163d2339b2a42747476764a1a56920af168977681418e7874ba540a154385777239ab4379352ad50a06186258519d9c1c121206ab0bbf59f3b48e0269b2ff466fd6ad4deb5ad7bad6b5ced6b48ee2bc08519cc80c061842dc8c19219610c7dddd6d98830380c82c8610e7e1783ade8eecc66675a70c82813158dd0cabfb444aa333afc6d34d159b7689ec6855bf8ecece4e78b2a3c8ece422c483d666843034bb4801ec490200ac948fc6c06462334dca5228a52f4dc204201480a5e20e3ae87ab8c00f4d6e0014c0007aacceea8a20815488470e288a124038a2c134acced610c7f3ed8802d3704364268213d9d12e50c8370b71df2cc47db310f7cd42dc3743813da8108bd83cddd3ba10870b71daf5edf86609f86636d0a01162a956065b3d1befc60362755667751e63755e4d12f7db416bd23a4988c5672009d590219421c4726508e14865fbd85da0f73f7da2d5b94a886877764893fd24a11a4eb21d6d4fca8b100f5207d96a570d1376d520405823fc767c33abfb66b9dfea429c10a70b713004a0b76dac607ec515388170684efe643a3a6ed764fb90bccbf796ed0d72f9627eaf5c11f7a4bd52cbe5c7a545fe761f1750ada7a0603b4d8eb5a4473f19dbb579cce61faeda8cbe49bb2bc6b3a9e24266b3d96ce6b3d957b34ed8bcd0f390524a29f5da394db6bd3d5a4593d172bfcb7ca65db7e6d2c83c9dcce6518013a5e6345ee3b526fbba782843af6dd63e1cff70df17fb6c9f4cbbc21d1feeda3edcb57db86bfb70d7f6e1aeedc3dd39fb70f4da6a5fecda42dc25a24d4df69ceeee3e76ed5c93567765d30a6955bf1d22e4c50e8979c9f3cac4e43b2393a7ccf6ccbc582e7dd653c4ecd6463438ccf349eced9c3655dc757574767648279df41aade3f55afd5bf30fc45219cc30b9fc72df58eed2631e8b71e0fb8f9f60bc76a1d89793ebbe098e6870aac6e432656aa75d9a56390187bb4b9b2a43daf5bdb4aa5f476767878747c8add1727fc6cfe5abf96c3e1aa7d1e47ea775ab47bb2ecdad49716bf8b305019c28a5bbcf39e754b9aed66955ff0e8f102f877e6df28ed3633c363acc83b9cc65a490f1d9a59547ad73ce3953d91fbbeb9b9e5ffb9f885de55d9146933454c349f6d1091f1e27cfd1b45339446957ea24c5891e81ea7024037f91671198d65c7c5aa4461c94c3f44b941113987e0c30fd110c30fd1e98fee80598fec80598fea805983e0dd31ff1c074c4029397ab1023e1680598fe0e17e1480598fe68094c7f94024c7f34c3f4474a60fa231460faa9ba034942f01a97e7f72ccfff5c3bbf7a3f490898fefceeeec67d6a73ce39e79c73ce39e79c73ce39e79c73ce39e79c73ce39e79c271f0a8542a18cea41bc8241bc8282780de23588d7205e83780d22964aa552e90555d977603843b24f1c9cec371f31b99c383cd9cb89d3931d67975d0a97ec7f6d6d81b5c474abae20fbbcc2266abae30a2439470e3b1c3162e26ed1fa948eb57a93cc630cb07f09c232fde98e801e680e650dc632056732cd029c28a5c996bd6ecd39ffbe7c39530ee98e5c86619d3a504d949b2a55a4c6456a6a63493767f8972235d96dcdd65c97fbd22d3ba2eccf9d2f37555c78189a4617933204c9dcf5194537adf2bfa327bac90e9285e6d7da54a93da6f720fb97a1ec5f7b643af2507329baf96c7386bf15c51fb8531914697386bf78c3a58b9ed46caad02a835cbae8c92ed2483dd91f356b933d53c594fd49bb92cdc52cb5cb4e4bf2e8320438517e092de012c7f229d5ad4a471c33b77f4a8dcf886366fa0e0445c7d03471301d6b7836cadb31d9ec2f81a902667791fdaf10f8736963e015b8b4b15a4f415282a4c4886644637bb23f580b10f321f2bc270a200b0b200bc330f45ee4813e2b12434fc51001604d529bf3042e6d6ce2bf4f5f44b43b35eec2a3cd098d393539a74281fdedcde92dfb835646e6a1904844a40c22248a5e84814f16c96468b6b39a8d59d98ca5f5e85668b4b250b4334dfaac5b324dba6867768768694d7af5b0db99abfcb16865aef298070599bc43f56c4fa83f1ac48af7f5e70d2fb7d65973a6ca48ae6f69b5ece519aab57ca3fd73fa78e30ff7f473c57b181fc0f73f230fd0bf40620d57f97fe20d51bc23e92a9b049c4393fe7534e9c0f4ed9764ce802d3715b8ded0ad1bba853200edb7b9e6cefe3db6777d014de9eeeeee4b4b9316aeb9326901c61a9c904d72661f6b706266b2662eeb284f9a325534c4321a82fbe983720807f53103d986eae8fe9c3f5bb78a228650854cbf4e2fe74ce9a738718bd9d96a59ccd3872d8607437840448be50eb97f3aa103cb04c8d3099d59760236d202ee5c7a9e3e7ab0cb65d7e6ce6976e4d26dcaaed5e84c1f369c4cbf69ba45db26d3a7ff430f2ebbd69341230340e1d6e4cc658f1b984f5d689aa45d3376d973e4910306f3ebd35a05a6345403cd93a59f0e3155f48fa0ffa283414f0d9ac8f4055483cbae75ad5b257da12f5365031b70175da14f5de80bfdb6d1ef5bd7ba86fa6705e0442965983128a54e92bbe951a2d94a1d9753557071ea12b9bc3a2b99bb4e725c756fc8a1245392e51b6b7266964f66769c9cc8b89fc49abc5f9ec8728e1eb41df99ee4ac64377c253399d1bcdad1ad369999b9bf7f9ac89abceed14aca8df4c8882900b9d56da44f724e72350528c895a45c69e63d96255abecf827a55cf8aa8977d9227197fc0200870d750924b2f622b597faf5cf4e4fb2694c9b492b58bb59aad7aac6a56374fd0564056b2556d65b3b2e59b92cb956c85cbf74d9f935c598ae9ba55be889de874ab7930cb6598cb93f284c744967940e17002c204e7aafba79f2b5644e1f0c2246745f4042641f5d71f228815d49388a87e921f2288157b9273925372927317aa471403eca7be3f35fe00831e5fa82f197fa88f1a51fd7305f53f90bc1d518d12df55f77b251341015b925bbe5f4d6cf93e1326b21e683ea199ccf235e991ef4af6045c966cf94b935abe6f92b3230a071410248ffab94262a27317ea657fa8230a87faa94f8d40ace040329aa046135cbd650be684b35c5edb0daf1cba1504ea454232925c3e88952a9268aeba562481a41bf71649404838124eb766c669f282debf45d3ad5b936413493722e9865b01454a3152ce55f73129875b2cc15c483b1712ace4428291d9f4a45c8f9a7a53daa91e921b1dea4dcae5fb4a9076251777a5fe7e09d6ad167f9f94eb96a94f422fca81cb939b7c29ad35cdaa66bacf7634b99ab1f6decfc7f3be8fc74d93ac1bc8068261180aad7aac6a2bda9c219a11855856b3991d2c1a564d6dce1009593d5858b5262f8b3667dc2cf0e871886555832106834c9397d6e4fd518865d5a3c9fbf9ac68ab5a939324ba60e1b8105940583853e84264e17058409abcac5b93d7641a1969b16a116259cd9abca2956cceb88f12512f14ea83584989a8572af541acccd08b8464ac117a91bc1d7fb04f32a6b8ea3ee9095cae64255969e6aa1b4a312c30e9cb526c3573d5fd2aae68aebaf469f4742b887c3f9f3289344e6a179fd4f27dda82b6684161a841218322465b98a80c301962ba555140a3c75d34725c75dff368e4d0c869f2be4924b3c7033c7f408127973472f27d1a3ddd2a6580e14a72ba7557321960d974f22bd954a13e9ee4a4643a9e0001d9b28fed2691cc27b86e8d8ce50e3727b76e7dfefe094ee9a65be54ae6327a666834bb9a6e853e72f2fd92ad74eb1193af64dd2a4f724e72ba85aaa12483b339e3bef733df5fcd74ab9e60d6ad70076dd56355eb16f8f75734dd6a1c883c50d24a569e72b992e5fbb81413d1e8c9f743a41cc925df07c5923423d5f2cd815403d23a536546b2b9cb5bb94faac121d148b79c5c5edb3796a458066fa18ccce5c9a3e532255f1b29a75ba39cbbe68aae677792b9ebfee8769ae54b3bd570f98e74f29d395bbe9f91f64822f688c200cd763767dc2ce47b92231ae2fe8b3f7d0e4ddebfa1c9fbe5cce5e4dbe3aedd5499f9ba0daebaff417d3ea558bb5e94643b4ab5920d4e59bac997885c86201f24518ae5ebc3099e5c9668f22dd5946ca55bbeffa16dcbdd70b86e95d3766fee4c2ec38b837bff86fb2f44afdabf32dc20485d0305e04401bf8f070fd1cbf8be4fe4b4ca283bfcf9fb22ef795f63866e855adf7b1507fbe087c4fa89de143d31c42051247a2d8387052ec9fca4f7e027a69af41e448120e849ef53b297bd7f756bfaa0a647f63c1ad9f340cf03419f6793bdfe1e97ead248e82d78b4c2008dc0ada3e4d251ec0e4a0002541bb183228ad8c1103d83415bb8d1c41474b8b861c3b4d160430d835624d18411ae1d9b88e20893df6007384dccc08180719e3e9a58821201bbc8d347134654217028212960d05b6b43320fb8d91c763e45d64d344434d6d059f4da8d7a705c23cb63d3d3ad911ed9df012e22dbb28186048076361c012e57b25a415bcbe15f50251d814380fb495f42e5d1b7fba95a9acd56eb0db1802db316594bcc559e83527b2fa5376c2db06e5519ad5ba197b5c4b4665a662d3bba55c7965887c41699262b6d996999b5c044fd617dd07f22d07ade07661b39209ebf8d1d1b2c1a9d37daf3b38006f6e7b0d65a6befb5d75e7bbff9d279e55e371e1c82be41b1dcc1d6582011d51f8eac5a93fe3de24fcd02cb764dfa6a48f62c2ec903b85cc97e40e1500202d55ffa912ffd5c19917e40e13042f5c8a3c58fdef4a39f2b24f1953322be70af5bcb10de401980baa010405d728f36e4ce98087c3a81764fa67cb080cb79852c3be9efe8d342045d5a06ff9158037a05b40b82653397493f0ae130faef0697bad5bb6c6b9169d78dded971b3313806d895d2086601d72f6d8f8909b864ddec6daab4bb5a665ae5ae1658abfc7166406437311b188d8bf7c8ceeac93bb2b913d3c1c161fd98add78f49fa6cbd8080473851d1c325b9ac391018ce6ea16aa6029760cd036b6148420283868076f757b207503b22218149a28d4dd5ac62c680f48503ddea878ea00b68c712852eabb2583716ebc61a92e292f202f35262b27fbde038821bc189444458ac1b0b488fac28e0d08b6c5461236722ad6421b5d366a30ad0ca6625c32b19f8b2b2c9fe1714855636eef74d3ad96793ab9cbc92ad6e5638f0658553bfc7aab6a2e13102eddc351a5b629a2497fd3f229624f7ba4d959bfd1f309b2ae1e84936af1ff41a7fe6fbcb66ed7b1153d5ff01af04b8453db6c4ea87632e7f63b98385653bae662bd98811f824d391075a4ff3082920330d364000455b6c6d453d87509ce94b4bcccc8e0cac0625ec44c4eac594b0cbabd9aab69281763464fb5a650dfd7dd0ce0ab87e5bb17348dc01b4030d01f312d88aac28ecb1383b90b5213bae76ac7ac856334d8e35dca7d4152d3163e99df4dcaf9ef4647f1c6211b1f6d32204187f0b196ca3c746ae55d3669b2ab4a93282a37bac80cda8877bdb35324b808eec2f81169becafc3efe0ea15ff5b73854df6163542f667d174ab6db7023515b0b9dd6f15025068150b43a69c1b3d58847317e9fd0793f40f9f757bb08a379344713aca8d181b3977b1686e2327024ccb1f91cfe7fd59b46ef500d9a60a28374e907edde6eb07d3d5029b44c8fe95d4015cae649e07b27ec0ba79a0961b3f6d5f7afe461ee805432d37eeeb7a3e10d62418d3a4bb4b934e830d09981902ddea113404b46bb243383eb9be071bb5c066219831ab58b78ac8fd6e6926211864f164b20ab86491fda5e770e48196612e413b160f9e38b93225d30682c3c9e956ebe4583b2c1d8fd2cfcc83f4fe2c1e560f4b086bc71ad2add08863669794971458b7eac863f4fe2931dd42f508be808634591a5b625ae54f0a77bb182e315cf0ec16c9c884f7044cfad1e346230a07d38f7e3402512ae5b80bf51afd401a51389080183de9e7cae88358a1231c4a23681a419bab46f4c1d18894d3f98b8b0b2ca723517aa34997d1e32ed2d30777ee1a75c7320d6332ad3546e67573d70d57b90dec7115fdd208da76997e699c3d96e0ad25d60273953f68dbdafaf5f84fd056d66d35e33f59b76edd4aa4686424c482e929c4f2fdfd56a955d15b9107ea1fbaa2b125d61223b6c09a044d803ba5dde5f9880bf004b84b1e76153883bfc732c525d31f38b13c7f108136803c7f0c41487e91a3bb7677b7c028d5b538ebccd467a67347367766cab933fbe41618cde5b4d1d037a64acdfe228485585a629a6c91c93c7f94016cee903c4988a53e8ac5f6dfaf4d1aa07319442ac4c2ea7104be3127288be92a8d2c9cabfc49582497a01de881ec0f9ed0422c2cd62d2646642563896189b50b5b9abb6c78355c93bba7ad0342c8fd1597d35dfaeebee54ca103d37633c975ac3d73460e6c9b818323243769341a5f4070d94946e072da5a0898b6dc2ed3fbaf66e24ae62a1f917eae66c8b6ab59934e43abfcaf98002bae644d7a1d6f34d1f5c9d7ebd62410927862d19c954a9d4e2f4431c4f2dd6804608066917dc019bf08fecf53100eef2bf8e1dbbf8dc5d92d17a74cef57b1dce194fbef0bd7a4bf80dc768838f58921b1c484bc31034151e0b23e61324f5e144523cc70bafbcd5da5f17573d2c8ba65168c6ee908626b921078e62ed06cd9a8629245cc968d5c4bcc5d245a76bc63a38adcef0fdabd8d5cf7d720b6ec762c2dcdc63a9c992ad45e61a7906d0e3d020afd1831422c9f97415f08325da591848d30a9c8be92ad64d4698d2455aad52cfbab6473b29898aed208bab8ca9f845937188172c9a265dfcd1945d8c8817619346d3674dd5a657f1b3ced7addbcd2462e7b0a480bb7ee1d9e6e89481c2129a211c7cc558a1729607564e16496ce94228615125938d6cd536834e99f32d2e072259bd954abb0ce1e492f58e6ad22cbae3273957e8e5a62da551a5fb87034e2e4b27f69ba02abb8642fc1998a4bbb5e405a05d6a149c5a594e7eb36ce00cffc3c70490337126fb96b6a34702b1860886192305c71bc7093247d1ea37fdddce5e1e04e3886192418ec80996ea16accf0ba4d1593036439eca6adc68c70467fb744f2acd5cb046e8981d5dc9ca1438d985f87cb19458da98a03d8f82bc0ff003540b2cf50ce286af2128270852c97f316052e2534b678b3156b37080096c70aa7bbeecafccff3670a8908fa80db9ce134875d00021062f9900ca07f64022f008ccde4a8f5866e65dd4ad6ed75cbe9967dd12ba75f407038ddb29f7bed74cb8e2f9c487ce134395f40c497ce2bd7e488f4ca91c457ce487ce15eb76fda5a6053a5bebf0042357c98c8de873b309058ee606b292196fec6556ed20e8944b08f48d5964c232d5cdccfe905092a556272f2a2f78d305062c800bd40aa56200c31cc00002b65a65cd4bdaf5bbb0a607be174742f212f01aad2cbf44b0fe3d3e99f2461c020202b795ae2b65cf2b371c99788bea4e4e754f172c997fc0cb194dc681311c6115ef8033c337591ff023982180bece17b88e5df6bb400a9b7ef33982a34982d186fbd3c82554cbe3ce5919f253ff230449f64c9a7c43959256f72924b9e144bfe05b1e4a9984b4cfe46a3c412f5a91825283e80b093459ebe0d288265c89021e3c688f13250506e6a2c69a623939292921a5a80c8978c3ed06c3296f44516488d4f3f32dd82f1f63fb276bdf0f65dbccdede84631f5826ad7a47d19221d12436c176c475508b2c25425a6ad92a07a20db2f53aa4bcd515d52a9ea92aa2ea977f98c52513ef50e034689589b2c29f9cfd5a5bad4970ac3d1d9649c4d96a07ca8993e06445efc05883c1d7da035885abce5e9e95689901c1f5322ed4111a9904ff8dd128d65ea45226f1f24d91a2c307e0f34c3f8d43862814bcf194518a2eb904217f982cae6f9d5c55daad13a61aaec5b9b858cc442ec85510ad9da1c65d92f9b093557f29e57f2258fe333ad61899bfc88051e2d20fa1e6816790b780f34bb4e93f6a74d3d4f93f6f46597883398883572ee98936d6a1cb3c0f44baa8bce55b6f4f2a8f4a4779d5bd3a746fb37bc443c79513c35699f442c6926c926a3cd612c30fd932f6dae43b9a942b3ae5b276fdff2748bbe7871ca2f7ef68b17eb4b93f6a9058572f63d93b1f47049eec4e61eb457d005947cc9e7ba65f2f6ed4eb774536566fb37848092a79f2a11ab0f34a7c612f51e4a9c99049fc472deb410cbd388c8c3c72496b56473d93e492c4d23b1acb9ac2ed93e167ba059644c3569ff646934493f14539aa4ef357779f64376eb631b7b05091220e1816e8b73557f8833e15238945987d8171b93a7cbe4f995a75d358773d7b7fb76381ceedbe1be212019500c0ee825f7fb10904bea443d9c93e7b9cbc66aee646363ae6f36d9fe2f8106b4755404f6c692e276aeea07b97cbb6ff7eddc5573f5ff74c2385777ea902aa4f23c90bad32d5ad67108fe8c95da199b6bb28fc076a6e6724ce626d36ef5d3a0434c0d87ee666cbd03eb817321b26a3355da00aa6c3f32de0daf6e7dde699016e594b221f8b8acaced07262ba603cb84267c516cccd6589b26fbbd0fe8714e40b037432c8677bdabbaa7cac6c6d2cee4b6321f6bade0c9f387153ab9fc7656d4b25bea3f43d429b5b156f57b1ec6a7d33f395201bf0f357f1e0322f933967601fe9fd1079a2d60bf079a7db435ed9ab6d2d956049abd909d9894a450242f4e2e5a8c984aa4111611854210f4791f215ef0e7daea4d43b730ca62ce3aab334376393834358f790c8fee76b3a367ed324427a7864686c67a7698406c40a193bad5413f69099d08d064f9fbfa2309b0fc7d9ebdb69abb284fab9afc4fe7377e6b979df94db73ecf6ffcc6d23e5f46f9d76c6d8da75db66d8d7ea3ad399026bbe6b7269be25a79c2b6666b7ed364bfdfd4f4e44fbfa559c0f7b5d6adcfd74c15047c5fbf2afa409bfc8c9f589e3082f0e8e70920c9041f386960ef3fff830940f2fcb1849e5cfe8f25dc6450c47377532a9c4ec50f9b2c00aedfa926bb3ff77f1e9d0a10a49f8fe77d20100cdda7cf396728c432e79c22774f8ddc6beeeeeede353679fe88c93432d202340570d2c0f469fe680d4f1f3f7ae4ef3f7b5fbe28473ab8caebcf0db17c5a0777d5f0f0acf4837104fe9e86583e5ff510d561aa74f69ec6505905a6abc6e751193a639bc22d7b5e076e93de53b1a549ef3bc4f28d1068d2fbe9a3b049ef6d0d07c7e9a01a9f108eff1efc78dfafc354f1ecfd0e1f1ee19bdaf39e4c19672a7bdea3642f063ae30248478067797e126a798e3df4247f4c81936f9e3fa60092e78f296cf2fc2fcf1f53d4f2fc31c52c97e4fc314509a688c9749c407f0eb5d2b7e30f3f04f1c4afb4d39f2310f3e9db110818bce6d311f540d09f2bf5e78a154550c0654a6e3acb8e019afb3fcfda5431f14844600b9b336453e5e6d51a0b028f89cc03cda50782ec5f45d16dce70f1071834fb456636b3666d0c3ed524b5aecff5be867f523055c2c12e64176d069bfaec2a1acd196da1f08115d9c58f0998d60ee072bdd1a5a69fe353dc736b6bb2fe8811371cd7449a7d3c7d8e4286c890f8aeaa1f8a275755fba0a7284ac75f02d71f774ca754b7ae8f38264df1aad74ffdbc56af95c4f1c1b9863373067d774d2ca4cc902bad8dccf5e692cb1ab97e6eab96e14ca65f6feadb9c6ef99fc0c6239716275716e4d2eae4fa57b4a02f08088eb2c0934c01274a8e1123f08c004829a594fa9c73ce399930cbf64190ade6fd8d01fedcdd436bc9266d0da7875ca22fb14b84fa208b883ac8168a6cdf1a0187c620d9dab628a40f605ad3aee9b2dbaed0dba7b46e7dde3eb54f6b34ddf2b73552487777bff6fb6fb4f576d1e79ae84cab2ca5b218ae4f696869957dcbd328b6514063488ca16bcc20de68d2d268d23e0ad9a4b5b6db3e4ab65476675e7b3cc0d9ad59ab8bd06a0327ca58695ae5ef39ad34d961319b63756aee48435dc84239528ca4cb657721f348baecefe53cdd57fb684231928ea473d1830470a29430d45a6bad75babbbbfb87ae1438da98976f0cb6f73fa29b6ed5bf2fbadd596badb77ec54d15ef2bf8151441a2e7aaeac9f2c541be5f7e3dc8d7c66a30f95207706063ee3abdb4eada58eed38bf78d3cd45c9e5e4a2ea248fc813f2d8a70317253a5ffca106bf9f6b8d2cd19f7adc09f2f53b57cbfe4e5a66a53c594efa76aee97b8dcffdcbd326af215e1f20de128c92515065b6d8f0632a0010c6811161831ec3846af5d69adb5ce94a8d440769cd190d110120c098604438221c15c61abb5ce39c3dadaf73ee8dfdf90069eeda8640c3727490b99a18100000010001315003028140c86c482f178384b925cb50f14800c779e44705a9b4ba320c77118c520640c3286006008018618324333421c00285e81aa929eee07cd070074da0882146395b32ce29694e7839801be86d2e38240b4dd2301e805615e1170ef63ac4eca7b029ef3078ba2a3cefe0bae2d5bdfbb1953a0c525a48c606f772877544d8c4ff9c102c437e715294d75856674454b566b3da6134e4e47ed3f0e4e01c9c91485ecff83c2be499cc027ffb9e8bb629076466f2b332050c1b14fcc82ea01a7eef3c5bb3eb22c0dff563e7017270e29cd3cd6b05be45d99f61f96aa055c5023d393d7c8877c00698f8e5bb0d21a09ac9904a11b89ec63edd356d1ec0fe22e8ca59a15c42c15dea13a9667f66559a5b0e450157675f4337a46c72bbf32541b0afb49a9fe0a9e930004ceadfac2750c5c603f6a1e448fe0d5b9508de21d4e728c2a08c33a618039d5bce4cf70788382df12ffa9e493bb0165eb974986d5ccbf20e6b311556ac3df46d2e8b1f3dd8afe62ecf66d442bbfa83c6b6bbc98b6ae1b4d47fecc8fa5d2deb384eb52a11b9b40161f6e7f25ac5cad4f8cc70d9afff1d887d702bafc6a3eca0dcbcc0ea8166c5ccfeb325e8d007894f70c3c0bf9972571990d06e8eee7e396a0d92e4aef02f1ab335a70c8e97097f8742135705d86b68cb2600799a1f1e2a504ec8cf75295938505636a258c4c273c7b6e0e517e9174ba6ae011986fe6a36bfe5cf062b30ffc3acebb1614dddae79f417887b598ff466c79bdf719bebda83eac36012b0b2c62e9569c3aaf62214291dd77d01c50f8976b329bc7c0de2b04b2100208b226b93e6a5501657b823867e7bef9dd00c55064fab52c712a45e0b4c15257a1bfa2a3858aa7560f2c6c8b2014d947a137e7159f4c6f30d5bc272704d847d3393ca5e79116cd575ad2be155fdb3ca5a81b61c726185ea7c9b770edb562269801a46a1ed555b4f4e7e54a3db3aa78e8c4429427b35bcb3cf0141f02104e2c0e006274194a0a2af09db55b95d085efc981a5def87c07538144e898b87452abdd3ec28f4046f1bf6f20acd9b2f4d61401c6d8f201addc8a609eedf1423ee8442d0340570710552b3be114cb60630e5a04f14cd40a79253718d6c316d1722715d540ab2ea9eec73bb62bf1a453c9c3b1399910feb9b5ee79bee60fa626bcaedda000f4543ba98fb41259f9c04d3ae4d8c56d807012e51bed2ebd56a8f1470bfed34def233af9dabd70ab8526fb9f8621feafc532268a18e647700ecc1f0fdb82d25586f8f3bf77279ed8389030ff38d402d99738cf8c30c8edb370a54a120c79760ecf435bb83c906dae6db4dcd34ecdf01f2300700c7c37403718f06855c9f08443b157bd5c60b917cb0c184ad0d2b58009dcb13301ee7bf16b2869a8a0fc930a3762f846b0b92d13c86db9b6756a8b6e1af8845404b5316a5bb93bf3b36cc2c45f311424fba917dacc5f81f0a5951d793e90a85dc4a22dcfe3bd6f23084341562627a8cef50785a5a87915afedfaf6e65ff1cba67cee0bd1e85378b20d25b12ef3f9e51e0d4daaecc14572dc58d2566aa9bf74293c1426ac6ad6e9812f27e8c1151a558cdf11a262733900efe48b4087315beb3937653ba345ee7cb35e3f2d40ee2c1cdb78cd0fea06c04fe591da0d6cadc7ea14cd59a2392d22a903e580e900945a430d4981910067b3c0f84a9fc34343dd908e4e5d67450e58f610e84ef1913d414151025dc55d3044372247b34ae3a281365930c3d5911291e824b273cf519753e9aba7ec73a39a778504ddb5c53105d347f6017c6ad57067eee66093b2d25e6dc348c239bcc42fda9e40c34807590cb991652c8917aee581e4204d931099019f92fa074ed11eec4d7072b955341ad3e9f29aae57e963df901c04e2fde166c46c9d0690d0b2b3056c1a1d8593649e45456586939348c72c33db98e1d739dc51b89c546716dc611d9b6674c678383486de487b3441ed88bca3779a742d003a6af4e075a69eb344093bcd4f9bbe16239c3aa4925121f90f83094ca95ee48679989b8141d9bb155c4c034db547861157887dc94da2a6bc5bcf613805acddf41fae10457f0658dd8fbe48728f2e86611cd0b0feb6ce45ac7caca88384f830bbb0645ad564f1f5010d265d863a705c8a5f32cc6b9b441d2e2707950e8b0eae60bba3239fa3d24e24f16527fb098d6d9bdb71d86b5e3356e752b8d8dddecc9b58f6764f4216845ea086b8bd8b9a2c61053ad55cd5a2f93771216e86057641bf31875092310c16bd5b56273b997ea1be3d5328cdaa6512a5beeb0cc228e19f383c549334cfd2cf1aa99cbd72a7ac4f8db020004de306e2caeeddf55d77add7bcc6f5affbda6bbfc6b5ae75adeb5ef31a7f4af5ecedebbbf63aafff4bf4f5360df077601a60d33bafb9beebae53af6703cc316e427acf3a486f5a29a81d4b8333a00d60431b59d9c903b6654a2a6b2aa0ed1e4c0714c3e3f203ad861ea506b4f127efe11c338f74ea217c3584ea40934ca8c4f495614e1f44a395f45c06d506087cc16fa0a8bcf4c051c8f610d853a20295418af254f907a0d48c9df65c012b8effd2c31d3a8244c11747c4469b683bff3830f4798d3ab851789b10a42288d8fc0b126eeb3ada63031e5431532c01d88c508cb640318a90b2b179afcfc427e0ae7683790af41e0f7313e115831450fa5cd0836d30044a4c450373415722761fb498a2700954580ff873a455d62fb6391fbc13e49bf0cb1832de2ad2732eb23ef7e501934982d433b557da1f63afc2f9ab0b24b0e615ff024704391d74de983dd9b2076dd5ef33cc12f7c40a94e83f2b357e312642a7bc0a9abf6828351806648ddbe3c9089c092abeeab855cce56702af1e7cb670d4a55e7a8dab6896c86c704ab9b2f36768887db1ac19fb0897a36992bad91c94bacb86de9f12d44427483f728e75a01849b1e6d622d0bc095e23527e77b39ba01ac3bb94ff14adb971ff960e90b89a72efb59098b22ed5ca0a8f7ba49eca1044cb8557a96c138881cc28678a32b1695f24248a3c3426e877a821c1078dcdc9b8234e235c322b5c6c16ff455eac726ba05ebd95fc4abbff8ce97055ce83ec38076b82832c6388a5d5003c7a6d0f963dea943e614ee41c599541eae0c3fae01587cd8bbf2e472de97af2c12a3fd72b068ebe936239b277f704088781fd72e5e019c9487c70563b245a298581c3491586e275419a4908299351a06ce107afb839437172fd725a2ade5ec6c7b2f9e884d0e1e1a96e73859aba50df27f20f4630f06a23a2d98904679e43aba879a68fe64b7999dc494466ee5d495cf7dd4c0203b7169fc90c3cac3baad8d8ff66bdc13c55bff398fbea01afcafc0ff2b101c4560038e146523d89a5ef088bfb78f4c89b018786bd21f3707147907113ebe154daa1541cd05ea7525072b7d625d286a7faf956e5869779c2438b7b37313032e69e3b91ba507d2dcf738b1c82bf2811b9eda87dfe8f389af8ec1199c46a53aafb119b8ddf3bedd37b4294a3eac187127cb3279e053bbdc0f786104c8447e49ea414bbb4beccdf9319551ea4c89862ff00bcbc928bd841c8acb4d9f8ab00ad998d33a5ae4319aa0a3dbaaf8817bff18750739450a505144ebf96d4fb03daa14089c95d14d4537b1407cef3ceec9264e5008bed0c04e8bbda3a87ab12f3b1f018d7643fc5039a7d09a7de93632c70a872b97e71436802ebfec96e66bb847096078fe2be6a2a89d8a640fcc9a5d33dc7b7dec84052069b72a7b6a37e82541b0f1c835ea4f36b78d0de0f4fb244b5745d0071d146877d01f6a05c82d9672235a5e033a3201a25385e5854cc8581aca80f46d033be44c9ec2eec557fa11c59522eb26f896e9efff0b205c31132ee51ef104f82781ad37c1213a5e0551426e0420c7c95222ac3198afe330d9e057c6d81c37b6bb8a42d7be4b38f265d8f35f18ff5ff7a2850f98e57f1a976f04e397de83d1b0e94d062095996ef91837ee7081081839e9ef8085143891bc92a4405eec6924d6e0f02153f249c99e911905c78b8cbff91eb29746a5b318141d93fe2647e49427bff2b7307fc08ac556183e7e439d7239767e751690d0e38b5dca5e3789d388241751b8aa8908810a7635dce82c748eb73687998209c58a14e6238bf6b3026e0d4297f16bdfbb124e4712283f34a06878132b88a0ba114a9a3a7c9ff32da3e25e6dcf536e4ae41119cd62ac99fc3616e9853d049b1fc414882fba9703cd9a5e17ba10a1a074a046b9d8bbb2099cb30c339b94ed14904ff7d3baa0087be5f13687a28c85a48d336e034bcc4bdeedaa8988d604d63a88dcd39318d0f231776281c42d5dc21bc96e43410fabdb71eda480769ce364f9dcb63740206f6b698b525b848b14bbac8ccb4040d1b5db9f909ca1d2ce3b10bb63ef0692cea5ca8b12a329816d38866275f1fd8f7893f5b8e800b247ef1cdc521670b7a796ba437038be70f79d0ef21c36294b9e2cc68a56791e1ce2317d75edaa625fb018df96b5a00fb6b2fec65afbeb934a1bae1f7999d30493d452c46557fcf296d225ce0e34f5db9fb967df3bad58bc8cfce6d066d40e6a68bebf2c679b74555e6bdb5e0f39a22c852278d7befe006e60004114af93d34a39993d55ca428428632fdb5618ec6135c70af53d7ef39d37717e40f34d3a1e50b81dd50cd4b282109191e91567c0727315ea87776cb84defc9c79e8da4418623ff43534412fc8f8fd6b07a8504b8bb8e62ca8a6ace730cb118f01591f554bb89c088d8e5cd53327762762e545531dcaba1c3f07afe570020321b83a6b8a9a8ad11361f3e6a1bc558b3bd2236eec224ced52947a59e947c09981ccb021667e4a084b7e0467e8681c562a98d96a34c922268492678bb4a51afa3ae98261c236b858787d56a8504ca7bdc6ec882c0a4626502c11ca555813d93af77c8075bd4693a3ab284e468e448d31e16cab0b6cf6f1769d07e3899fbccad9ebd86afef15088ab6d57fc7abb5ecabe2057044cafdfbea8e6caff0d4a0b4801641cb4d22f3091ac8c6949ef36a02d0860deb7e34c6b88fc7317a321acd1a030ffbba99cb391aa40afc46b75f60993c49058fb8d18e17f035b32924eff0575b11844c695756c066c550dbedcb44667a60ae929e7be329d6d82889a92870471696f5fb45325d3917125cd3a5588c970837bef3c10c68ead3a9de035e929ab1833a8a35ce7fe80d452305276016e6147520291cd846b2d74960a6bab1c07a26df2840f41a548c644e3b26a320c96ede0ad6bbb11557673ef1fa6b0c01e3364a84d4d31dc27180bab8dffaa4a03e85a03d14216a30494e057150df069797b8a808cd0b001310f4ba85e6050a5e408d1a4f4974a4c9ec1d634cfcacccbb5989a2a4d76c83ab7a32ba432400c74585b2dd9da99799359df78795a932902e05e05a85a92915b342be32a14bc0337f5cb65efb2e0152e7cb235885448c1ffa96630c7aaae2b47ba64679642bf5e5dbb71b83e92b56749881c9e0d8a07b7f7c447833ac715b0870810bdf8e8c0d10d43d49bf91409f97246a40ab2aca58b07de90a57eb20ef3e750967f291a99b930104dcaa100b74b371df66ade2f588c1845187d57371d1dcc7b096b17bb77b7033fb0185a8751d9256508f3adf16efae4a408a3411d802e12213974ddcf29825e82e9861edc3e7ac09df344bfbbe5a9cc9ed99461f4bf77c6503f85433a1e09f3543911b548e89e9030735fbcd060731deb6f8c0332480b9b5f0abf1ee36af3dd83e15c96bda18bce3f7b479c8379f3e023aad119c12d30e40739046798a37247d934ad71bd35b7d1538998a571c0bf2e317a80285370ab7b18c4877a387b83fcb3ba82b352f0d0529ac169be0bcd25609159f4c2295a1c12bee02ed3e8cd2f80c801aae5fb85964eafbba1ef503010549e04c852b5db94ecc1e7d0deb4d64facb1732ff4100c01b731fc77811ba4008e4a826c35734577a7b1e9838fea6d81bdb9a3a14c0b89a35aaf0c8ce823febf7faa0c68d1db0fe114b303a8e0cf166c9ae16bb000ff82284e2c7997e6781aae0ace67f866dc9c4b74d0949ac01f610dfa3ed129b3bce382c6fbcbc2fe34a970b80d4cbfd02b103e720028407e0be7b7b4f99cbe27f4f3f12c0e902c9578023844f942cb9c935493f875fdc4f259626ea03ea35111a6689321cea58f376a1995dabb6f5cb782893f1ba78251b58c82814b9952d209be89357cd96518d4edf0c4b97038cb4023041053ce48307f70da521c6d534a26f34b75ccb73f56f6b69f14a3e4b8808e4d9651b535b1e046b9eebfebfa0715df6c6efcaf18848b156dcf046369a3ed977668d3fffa400dc44a962539245b5011056879a474367cb63f82bd42bf9aec5d5533220abd34d9dc2dbdbd9a66187666b90ed49fcc2023d2e6722f5a92279681b57c4d5b5bcbaf11f4d10a05cc387048d763211e7b38e977a44d584457fe402bc220458b561132e2ed6fdd1715da0635525d7f469968ce61206116410a3734d62011e0fe082e70631529ff0661e33aa741cc902a7c1bb97382828bbd62f1bc21cc6a3029f9eb108b11f95749a010742854963ea9012830b541e4f228241cf0b462f05c46bff1a5285c4b5921a63c5547e9ed587c50902e13563326b5183420174cbaaeb7099a2ece46a14e2693c6813edfbb1a9782ac98c23319ea5455a883c5c21bcaa983ab852d8ca9743744971f0f2c82ded1bcefbf13c7cbc5cde84263c1970263330b33198f6d3b35da5dcf086bf5078541e9b359de038cc2e21226b5fbd9ecbd98d92a44b2c00c7a4a34b04dc6692f0fa544bf0087405557c6dccbd87fd103c061cc46652ade79cb59fcd0aa226d8cee357ec4611406e9df3ea2951b81ecf33ec2db18a0282b3f9e35bad27323b7cc9e3bce0af062d3b5769375ee2e85817ac32124820758bde87d6e91d5dfa692b2768a36a0e06732dec7074e00c8e67e397021ef6418137df57f240101dafd86f5d988b21600538ad76a3b02bbb6055caeb4ed9c0b7d0a941de29c77510940c700f3173ed954110020426cf5633fd1a50056ecb16e01af6ec4edbcb3054b63be551a191e153cc634e520d3207f9d545b9ddb4edc33957ba7cb6b93c4a9d2c47485948cc14d5186db325486d84ebbee41ee089d49f86d6a435cf55e0d8034a5f9519227841916c83a4f2f5e0f23f99426a23a46c926a8dab3aed6d5cdf05d0d42511bbf24ad0aa71dcdd6fe3578433e41f1ac116ae07d07c6ca5a2c985b6e67edcbdb371ea6e794e4b2b97bf98486053ad8a2e0989e86e3410a33bc3f65c24fff3e3876197d08a2796d3daff086a38df3b553138e6ed886a9846e5d3ffae001c10dd456ba25e04335b86a4bbde39bacb1715483f927130e4aaf5af525621bbc4377a8980d5ad206b2a082e852f40f3287717b9eaa32a7fe353dfe26147d38c0b70969f4b53c30ee93bf7082daacb7cb6ba19d309e7c264ae4fda3362e63e59db42e178274a35da110cbdcca3c84f5610c5d40cad5cb41179c3a18c2dfda1a7464082f3ab7b0cf1cd5ba08c10f039a910a96c8ffb3020dcdc4159d59146358a9b0dec9aa612062b042fd4e455cd6c70186e36baa3cea34cc4671d7f0f88ed57a22ea8d03cada8a8317c885ac16b04dfc32b26e73779109f4e848bc42dbeb813c9a961d61886bdf38310503b0d6cd2093c796fd0f9b15c5b7c1fdfe0507b0531a84bc1105bd97784764b4e7f26ead6378a463f747a666c125cc8215742023021e62f3f3cf836fab66646b152e75aaa1b1dce42ba9f05187326ca0b6183e0eabc3aeac7916823bc60cbe1d552d942c04a398ef2a81f77d727414003312c778c69bd5dc2f39ab163e23a7e7d55ade2a6b0b017610bbe73594f8f0662cc5b215030f7ac6c8d37af16acb4b280ce08d4288391913f03cd8e47dfcaec992be381414b4320fd3c7147d72e62e4a675dee8f638b0fb53a066421196ba6927d8b94788be9028c6a15ca4abda6205dc9f4592e428ea2d1133c0c1e2f3a4667a136a1f2fe5e4a57baf4240fdcd2b95675b3f60f8f3c4615e3c436219841617e27dbc503ff75047e2904639ea3d20729506f74ba1f7260564c45d412acc0d17a043bbc2d4aa14e6130319508706e10e69b9e7ead4cb3df361f267b579750057d29a26491f86d7c887f8861e2adcfd07d8ba9c34ce9ebc24191014414c3b4a5e985367a8a59972da6814caa40c1c64d0a0c72f83660b387f4460758c4334fb9bf697cb7b55cb274a7a0d473e091f0a01434434a993f965a1d9601e663f2d828e674ccbd40ab2ad7319c58eed12d311ff2260c352cb0f35cc14ac3ff194eb53cd5e9e39eea97b879f154d4932d4010a015c47da6a2189cb427f1a2ad2105a867c8eb136574b93bcb6e3a30e561a3da9ae3b910c1101edb7a4081530df7d4e39a66fa96c7c374f80f7e205f9cd29e32f835d3c35c39ebd7dea405f99981077b999fd04667dd4e3a8dd39ee614219416114354577adf5f204b5ad758c7805c21c94dbcd6c08dce8d657e6f9804281f827cbed524c6cdef4f7a4da606b6cb7fd72eed609b7c01ad8730477ec86bdcd6b7ba2e3afa081cb59ff1d90579692d0f12d8a604984e116ba66cc92999dfc6704bd885ac78a40fa4cc43eb74710ba06fc5edc843639e12e57170acdd788bcbfa3cd276ef9af578015b5f6e5153603a418018f3143ec2d7c84729d94cebd1cb7dcd023d6a33109d72656435d3ccb690f4961651f1c91406ee101cad6975c2b8b12daa5f5f4b2b4e2a4c7e4c850460997e75990aadde566168d3b1fc6140877695d96024e79556e35232274a41b51e90e0861ec2dd998a2636f899a34efbda40808a3a1993a1b566c83640ffdc19cb753edabd331e0bfca82424d7b55c0afe003c40c79db08f7142cc9455a67a452f5d8f6419191a0707f47645c31f3727dbac8b6ae9ead8e2e6f60597e63fa981a6b70b9fa9a7681cd56f176596735ca54dd61c58f43cd4b4dcd8eb02b77925aeafb3130f5bd885f9a8e2b870f3a8298505bf5209514c373e64600bbe2e5f5949c74155cc5b8e00b3729b18afc5b0c1f5b9274984a5025508637a3826553a445c4a31aaf6c5f27a4a2c81e88895812c3d469a2cc49827356620527791de9e6c2261742752726d8104be3c69c5d04d5c2eff3331512e98c510e3cf48fa42524a307a6992dab29697382cc8966f77eba3d3ce48b81407629d842532075041d946693b8d83d28282901349856d5669a63ba3741eb8da3e7995c728b2100d64e62a6123ed97b0ed1b649813dfea73688f2d98ca00c3f34958ad5f2ed938ef1f31a95dcc8c2891f36d4f8a13209fa0a18d029506c7f204d035e9119f285b6a44e351a2d7493a675105bea48b3ff1d55793f84b167c5abc0f7fe62aaf8efe6d20975ae8cc058ed9fb3f84b80cac3eadbf50ecb8932d4d81c07aa5ae99c5708af52a57a500d5ebf8448d55f45903a23af6e342b1e0740089b867d2183ac3816bf115dc34ae693e98d28807c3c462a22798962983bd72c1d2bf9623e32691a5f5d82b953ac9ae29359195a96046a72306282f77a330aa73c1dd2fe8831eebc086b74153ed87d3040ac4a46d6797e423dd1b8f3eabaf4d76a78af3eb4373dc80ae41f5f1978a413049e4e21445162eec882309ba90dc66941b9b4075a696b08336b3bd41a85894000bfe45b26cfaf3d7d435649d75f547b576b7e6513906cd69fa0f1ecec3edf0ca9a9eb34301ea00a34a45d5af680c98531c4bc1eb4c028fbedfc36d762c4211cfe3c5337e3ed72412e76c766e61722cfb1c94f26ca88c1aefcc4bfcb203d79637590a6d2f892d8f7a2a606a24b1a23900d82910e524886b93c29c23ab810d2f1d32094e7dcca175b6c6cf5e99d54ea33df9fcccd44427d6155c6049ded19ed0733e18fdd44345b03c92c8d0fbd91b933ed3c0dbaf2c3619088fd42e982b0a94a6321e2898d13e8c9c8e53f6bf1a7b1b33c918541367f6fda65b2a64459849ae498b6ac06b8024088c72d76b91ac47660108434a67b4052dc8354c8967e522c8fce2123840e0c07a6438d43f532a9e4b22033fa8d7540c936ade3b5f2c3b8696e27a9fd6b33c3e2ba360fb3e9a7929fd482df02882eaddb5125162fdb7f7ec4abc4b892a203d32cebccd03d4d4f86d46e9d4a41e6b4226e2dd9b8fa7cce1c18afc3dc46d1f7b52dd6f080930d0635fe69db408ae54f731dcb5989882e238fdbb996510872e7a4fe94c7a199fe0d8d14aa733f0cdf38c4bc6e8682d56818b060e0a0445bc37ce767f6408dae0dfb19049ddb0a070c31bb29168f7d2ebbe0b20ea5c81bf7279c35342c8e747a841ac260122898136a44b8d8e0f75c11ce0cc8ef7b5609baa5035ed89f682f70918f92c12520ccaaaed94196ed626878668d6c37d00f069e223fc26b88200cd3fe2f3b63e1a0c8ad1ccb583b9f03915e920205218ba6e6692d690e0b3ed4aecf8d8c8d8f951c8f979820090af1ac1359870e0eb515c436400e52354e91b3e68507e35604be362593ae80f02082b85b6be03450dae7ffc886d39a6e8d3d8fa80e842e3674a70af782e74d7734a2eb58e842d0a4dc3dc8a6684558b4a5c8193da110dc6ea2aa8a4f07798e65ab704c9a8b7c77832798c635f9c807bf18ddb7e25716ca27259b572f54a7e0e2008063092eca8856d50822b0fef26fb42c2427ea5898b8ecac157294e412578ab34987ecda0f8e08f0523dab3d1ad290229ba21b5002433793afe4584a62593d9ada19c5d5a87225ede6b55c9fc46d7ddc2885a91399c46de0e5cca98cfc500f87731ec19bfbe32db23f3108fe6431e0411b13eb1147a3187810b0ff27b293007028c1a34f0f88939bea29a22c328026d6c6075bd155f5f47be60c7786af67d82e76e7c186456a51e498741172491a433c07c86a528d37342b361d46ddf110c8403be923931f34bf6b06db890178cd7fa9c1ea4a245037a3cba260bb9fa5314dee9f1c33ac168de89038db6735365dc1c5a7fa034f45db0d96ff1b04c38389ebdc3edd1c73d88e3214bfc7b3c1c2c5efa4838100b1325229c321c837612b04d46c3946390c7e226ff2dbfa981f71c82bc28500f2010cd6ab99e802b23d3099f13243e708e77c4b4ec1408a980080a7914ef6b51bd581942e7795a156d3c8f8e32953e443eb0e570750c2bfbc7d40403734b0eb1d4312fc8f471297a9c195943155ef3349bac3408657dda496481dec9cc45a89ba0437a681683be222d7d6e0983ad8b64f2fdbe9a25d8b4e059f529281ed1c1280b8c7c597d26f10cfdf4b6982356105e4a6f33763c9392588f194b5ace762cea5a58a1e43557e5e46ad55488546384d0a5ab690e96b7e5f61c49008c7b9890dae743e1b29c4db09e048e41cd499f9dd58468dd70b40419125cc381e80b360e26f294692c5ac86ffe2e403c74b3f50414e02a9c8c837fa368756a330b22c2bb8eae1d88a109289f83cc0fd307a5251a0dc441b328498df4b85405559021fb15431acc8f2fcfc681f830e93b411d4514411424c7f43f0fee2670f32bc5ed30ab69215c66db7506aaa01fb1b5640992cd8522f27d88715c192bd571d0ff4f041c25b3c049d99845d4a74ca608f037591f99ff37a5f0f77aa8fa6f52be834233c663176ca7fb9ba5eaf2987d743dcb8b8e168a809b0bfcc07a10571584a09cb804adf3fc019b2fef77e8af358e02e52be2a7f13b1df2d5d676e18ec1d684fb3a473154ef5b0907100cd33a0c019b466c414c26e17d457c5926691f5056fb21110ac98701bac4e2989f2182a9cf3f8f8a06bb349a2fcf682f60ae5d337a432765077bf8e564cf2868169f4383c71fdf6ac14e99d5bb75f2e5069b04e5d7aa8d1068755d0525d241387474345341430e70f3e0474418c590fdeb6367e9ea1761521afb8194f9019daa5aaf6cea0a0990d30c5f2d2ad9fa24196aef1896f43146947a902cdebcae5c64729aec62eeef24d5e361395a227310bed1c098d703c824addcb868daddb01c464a57dea62d31c7ac9709414603ca6bbd42044bac7db797d258e6576bace3b7363874b613c3cd914a06a980d884573889a6a40ec1d5b70d4dc995cfc8477ca684459867383ed4c8db8d828c2e1c33c6b986b92562494204e8220e9138e6782587e1ea5ec93d5920d4ff8af92b89a3e8e2990b962c5ca1baf17b063f87da34dbcacd5c9f182d52d9d8d7d118eaea205dbd18fa7d1e64e1c7e4660b7861157887810036aa2ee0c7dc3fcaa41a5d61ed68a89d885658c1b237a8ee174d210201c5e06c7a1fa8b5ad91333e1f2cb421c8a4afd60a92449ab42e96d71210961647f2045897d2bf1251a4bb53b2a426c2c904c6094ca494a0e64823145a8bd6a9e6990908bec34681fdf5251b31634bf4014842ae7d8772ab5128ae163121275a7f8b0c7594414e6f15e207b338d507992b5c03bf3b082afd9db271a83375b897dd89ee50bd1fabd9ff01a2f46f2c9924f29f17a91f2c006e681270d570a779410ffd77d3f29a11b12c09eb66c1647033ab4c3c6e0a059da4515a0d3f4c0e41aeb01e711266d92886ef60c9d6ff6ca26af157ca9c6f2ef1725e8cdb25694a900acac9fb0c39e99b8791a085ac63eaab18000070a69f743a1fe0cb300564dd669ea14e6bf485b6af1342122afbda0efcb18037d41b988474dca73db2aff71e4112843a034d50583698d723b814bd7ccfc45ea363600d53f7fbe345fe1d0fc44bde1140549129da4c4dea138e19a30fdf753ed4989acdb0ffacccd45da029e24f9c431b43b042ef33da24239c9dc6fe0479a090bc6e4fff59e750aea738101a11026306534eeca3ae63fe047ac89519da68f682cefca0794770b7166d2300dca2f3f9837957e77abc112926d7bf2a309eddc808c075f93db68192290547a64772363c9d919e0c5020b297482fc7b99cb0a1e710e3f78d161e9e2cf2b46167276fd4fd14fb77e621f0ce72dc2032e65e93b0b57feb3456acdfca3badfcc7f40bba24375e020da933cc1ba390db422b5e45b70b5ce22400107e77237418735fe53aabb7827c5363f00c879f47c5b4fc2df6d01199d8f521c4db827118291c7056c5cd7fe61a47284b46a9a770c1abdedc0176f13d0a562af87230581ea9163d1fbdeac7cb3f3c3b06b415ca1b45928d41a0a82db6604060804c16bef24bc74454a8ee3d4cff7b48abf703a7f5ad3690a2981fa7ecd278b227d09183cc86e469c4a2debc05ca435344749e6d39366858eccc8948964e641823909ca2c89e2f22edc71bc8761bc15b2bb2f6509f055fb61ea940bf78ae34c9e088f88d589ca63c5074a37893948424ab74c7da1ec6914ccd261c0178311789366f472d322874637ed9b83cf363c6c09a0b2d808d76e3b458276b59f3fd770644269cc79426a58c5f04441a95177249449609c7cd5ab2b76f05f874f73858068c37c090b5858a52fb6c3f113792063162cbdd07d0e87d8f5d7b220739847ffdfda7c8a1f26e9efe5973b1c37ea8c7eee57eeb3e2f69f37f3634a889f6073168a2b031c74555703528bd4b7c20b62b74e0c93813f73f50a6c2a726d7a70e4dda39b52ed6e134a44a94257ab5c3a5e7d131e4f70ae69aa87d58cb51a96a9d5ebcde70c7c0e3ea54d2970a7a0a3e69f2862c1a4ee2c0087f1447579ffe574624172fbdd6f1d8aa8da2742acd1dd0bf5525d9a358ef52fbfd029d0b3306d4ceb8e860931dd4bcc16a22c80420de40f054289c97a52a50d1f4591f3f7873e6ad47980e8316169d6a0679c40696111529030b20927d060e9a7028dde7eb07f9458b9c83e8e30844eaa1def4fecd4801031b27078e54497f2db3813594005b632ebef9197038c56a87679141845c469e14320900d6d61120c79c357dac4c8c02608bec2ff4cfb660864bb47524c7613f8ffb6836c9fe93b597637cd38477a8a7b90488da42af1abb768f8bb38d0588b61a77ae1976e86ec2600bbd68a13ab08cebcd712a44ada5df4d86398df3883aa056f9240a9933c97b7454c497044c3fa9bcff2d8514050193d233a852acc58c6556052a3c3693f5af97999ab1e5492a086dbf84ee41609c06af5263ae8acb1a4f5f72172b2c9e06955c78d0c21a82721b92144a53a81d96b8d10fa008a5519ad8bb2b3c1c254921a897757f9f1a7b63e843f4b36c8f1e7810a969b982759ee0e503431233d057fe95f43ba758ddd6426608accd9c4580a1a2b1fb34119b630e810fc644f217f69755c81fdd0f62d43adb418f00829e2aa966287c8bb210fb686b2050812bdaf879d2c3bc3ca05d95384f1c070af250bda2f899f49122870681137d79da33873107f23f1d77dfa3177af22256dd2f5d1fa628c1339a223ab91428df0057e557c860f2e4ec1c72bf04a1af584a2208883600bd5204fc811e1c9262735d610924a77aacb0ed906e3f25e2b6af9e9e1fc06070f9ca28b32dc36ef3eb037fb8ca93ae278c7acf6e798128fe50c5f0b55b12d405c3bfb065106f9b3a53686fafc4aaece25b5c0f8b835bcf1f26bfdc4fe1a84b38c98272aa10aa043bb9bc8900d3c5abc1ee6ba01851c81bb67e718d87203d492fbbd295f4bea629d25b3035833ea640c3b87b8916aae0132aabb68e57156aa7d517f9b3536f7a97e5fb60cd4f22321c23430f4250b72d00854671ff41bdab3f01a0daf531a7f88baa14338bbaf34282e9559e52715bee4805f969392439f2c3ff129c9fee92b2ce05ae8e900d27fac139dfb1d67b364deea4c8199e86a4dca5aadb227a196058085fbcaf937e3079c4ab3a4dc96df4f0e06894bdfe28ac258df9b8c2eb5626cf0bad5e008d63aea102a83fe1f18bfdff22d5254391c107987feaa44fb23290126f6432b520843dc1f9161b284de09bfa7575eee929841970e83766fd3a3a3e8e9b6d921a71705a1f540f8592cf90451529e8bd229edaa65c506434cccc0abb2dacd446598dc7288923d584fa53b60738acfa344732d5995b10039ea2b996bf06007e5e3c4db76f366c6ca46b98b894a2dae460b6d1066deb42a72c27ceeba77a17ffe98f81419fb721877f719958a60912b4f0692fbc3af16f48bd2b4af1141dad18988e44074bbf1d0b7f7c6c88c8c968b2f49b8baa046de5c6bf15e9141f3358148f1405706499d1b7650372ea1ce39d440c084307c141401f47278a57eabe8bf62ac90ed7e1611f93c2a69614fbd40c33577fbd2d0afafe01f3fa542b31a160127582257820946e1ba7bc0b12ad584023e88a434c7c9656cc59f0894db6500f3565055f95cbf44212b0f3d910b421babe0f22d091385e3be2756d972bdc0027f9c1010b2501b8693545607f0751af5f48285d12a348701abf140ebe5e0474049cf70bbec6c861109680e7a41a1c5c8b863d002e513c37c4d82dd13a496e181e63219b8b123d04a440c76c0888b6f843bb75277684a934d0d03185e50f87fe551f372a9f0e34028b50704dcd42dadaef79b669c0f46ae81736e6b5f2117d64f15d48c6ead377ed63fd6e05e6f2d6a758728157356ebd79278052d465ff998776202544b6e5e57363a03198931e174fcfa279353941cad5e0c7acb160f22e4fe13c9b3ad5d21ff82cad7133fd909e5f1e56bb208beae487cceb51d9514228c77a30378cad699f0712424c58a027050e6333f188f8fe35b354564e2c823ddc2edb14bb87e32c639483231577d6b43dc2ce9abb27d33b8f66b13af7b47256b3546fc1b852598beb4b6db0434b5109f33910abcf22b553d3f9538b02c1e003acaa2f5980add14b8e821249c2f9083ab19e8413abfb296d3eaa42176ac6441a69363334372848abb125afe992b53f92d463bfc04171cb5f0cde0420c3f58e39c79d1be540fcd8ec0c8fb4c2edd1c8e9e824bd5db4ca5ec5942eea8248302e1aa51f2a85263aa087e3bc12fac0d2151b4667504601c65703061a8cf4c36c482dae0f128c782018156b47c9672402f194d4d9e80ae7e2a29dc5d9ebdb60e23735a2e4a5bdda9c2f20f574b7f860dff54bdfb69bac9880e32d37d978f646c6bbeb8552ef28aaf082a76a0bc469fabe4d85a51e4e710fd31e600258f4d2af65335142a15fbf8327d20b0a5aafc668fdb371ed9666d078dbaae6b58f922207c7ee8c7d7a21a75c6410b62dbf003cfa35c56318f7001299a79a475abf6abeffd60eb049bce43295ab693443734f0242b1c9a28c92333017306dee215355820ee107cd2163f7227e5d44bbf23dc21970d91b10a17104f8e7e0a3f4c73ee0b2198a8597472e6ef1771d6f02744639f6a8aa3749f178aa64befa597cf151bd73ef87e9091b83492fb13fda6f79ff09cd9da00babf707e7c9daab2638b0a2b1017806007527468fc83f45601c38bc7cc69231827fe912d68a47a0bcf878fd220225c4026ac3fcb9af82ab1bf883cfcb54aa39bb418844839ddc9b7084fc83027f05b85f54a884254edaca1f38c975913f62e66ef31200e3ba9f45b2ed40a20d1aa9a1e2558388a3594a242f9b0028b4f1169390a76daa9b97994da5b175623a6c76691f997d52749974db3ce823849be1bc12612f85dddb62c99a35b1b8a17a114a483e2ab8f6a620b34b0c63b8458d8b2946297be5183b39207ba1aed165c5eb55a473b0cc62df862ee4fee4c478bd12d3a4855fc57b80e0192f5b1a72ab7a717b9a2dc4806209141c756bbfc9eca2cda159fa4066989daeb4ea5e902ed05e0c5ca56aa1b95347e2588ea2288a947c20736113e7b40cf9e9e95c8ec9fe6bcf2ad7400e15836c435061a71e08d62a0f195ef249d2be2a7ac44e9cffad84b386600f40700aa9df2d9cf36918920a70730346dea5e6f8420948b1d8d0e87ea4edaf45a89aab6bd08d26181adee0bb8d7d65ab443c968e792cbbf958668fec640057030eaa44284df28a0cc21c0a2c4bdebedd000e6b27b17503b07c0548566eae6a022bb84c4e81969b6029e425daa1ab18d72cf45700f86b80b93b4d04cb238f938308bb826c6fe4bc398f6f470bd1c27d617fc8bf300f9107e1888cd4851fcfc93d1d11e6d67ce00775aba466086a7aa6ab52b102328166dc2500ae3ce6bfc3d7dfa2b851fd7f2401fce299bb280c2786a2a837c8652e4e29e3e25d56cd40979a9cf52da08419bd2cfdeac70c47c3822e51ffa0e45fca221cc43317526b4828026d04cf3cb050caf7e40100d8419d4a4cf2b0ece40590fabad89f42a00ecea2d810691c80d929659d3a73bea72faa7d68797e8ac916d18b19eb144d784947929aefea9e9db3cdf046143349ea636f3259322b57485a059cef5e43f75672d3ee236fa617d354743e2a7a377b8017983dd0ea548b0c522b701c722946bcfe92220bb7f9020e57f7316f8812fc39f91313825ce2c76f7cffedf0781f3b60fe59025a691dbc2b8f7b910367bdc9f61d9c32ac53b5d8ceb214186d83ebcf2b2826e4b91b0166ca234491d2499cb84dba9c6bc53403fc7b724c10bd476ea4308454ec5f71ab1f7d70aed57db61d00808252a9acc44a4e28c37df1b191be0ff25724ecd718183d208737d564c51dfa982996f6e99349d059f3b21cb1e12414d9f7d357de740eddd9ba14eda7ae87bd9da3a984ee23cd73bbb9545170e6f94ab2e3e72efce466cf48f7d67cc6106233fea4303ef76dd8af913705a7292adf1f74af6f4eb2e473dc19cf7c1bbfc74fda9f79ed372e487091130e56aee4e7f466eca32cf96d550662450c9ebc0fae1312c234dc669896c8115feb69d69dd5e54395a4c6a5e01261e888e5b2af1df227acff230efe7fd3c0593a30cba9e7cfa9763f3af790198dcbd5f0e6e0c1b8a5d3f0f7a8d2a96368f31d9245e92369e54f4db8e80902094babe5a17635444bf5e0e1a4f17ccce67c7e53f5bf8a3d8a78afc2ea3fd3f077fa4d9dc138f5999e94b94ec3230cbe9fc44f61c0de0b3f587c61e83f792eb23bfa7c91a01aa296954e591390fb0e7622cd7fb91aad702d421a6db1fb9e51a626c23549b655bcaa12d81ef8a777a833204f428dee4a6640e87223860e4d27a9cd535a4d7ddcb16d2baa00ce07e297a5d6b7d43bbd9399f076ce8f7e12cf9a4397b504dab3942a8e32eae16f29a159eebc36420fc7ec1bf9ced41fe9dd04ecb8728d190d50f6e9f9742fb0a3f2f64224e2f6b63a3ec286d5b219395918bcd8ce89c4b1b8a9fc38774c9f5f307f5d8486ca65c1a78685ee06bdd2b92f60596c2641621c45d1390a5c523e67265e7d634f417559c064f749f206c513605fe23819e2f49a6e99b88916e1529ac3e1a215bbeac16e3c802b2681c15b3bd1ab8073d7eb75dca6de08ff468ce4f280aba31cb03cc3839947a51d03ce25af861a044bdcace6986d7339e5fb9c0589091c94ba3c84d1f323f4af221a695e51901042d3e0f4c85da4d2b444e9a6802cf4aef317c08c4c6f8a058d996183e049fd524802b3702243f1bea444b6186989b7b915081390cfbd0703f24f42acf572ad9d9d4d4661f5b7ffb54722bb599622c4c132c55d8b407111221252d4762665831ab9f6b8c2f90294d67567e997ff6e8c633469822a815f7a1045a69310bb92a4859d4952b4b27a6f68d3436d08ced1b342a6223648499550b6b1b7c21b078544ac465e27f23d9bbc5cb87541aff08475c14b00686e69aff1580bee6ba477453a5e00b8f1ec1407aac85c9dea37f9b88747d3541b11d10028a9b0d8bd22c86990686e3d79b89a4332374d8327bc7f44b3b416d557ef0225fc1be4b67342b379e78421e47b296ce7da5790d5357997f150e06e10d420054b1b8be49730d7986d359ab67174024bb10a3841a6860be231db9442781a42c770e113fbb5c370fd1933110c6376c7fb6dff42448b42e1ee1303b8e7ef0d126d9dbe7933003a0ad6c31963868eddec3322628e18333cc9f137858a71daa93e88deb57f0b2040b23940fa290071497d3d6a618d7f5fdd4cde86404238715ea72880f2a1b357434d3d0657e62141cd110dbeb94e83111b8a1a0053a43cf44ad4d53106ccc513083f9f2051c1a305c28da22068109156657d02be4bcd9532222dddd39503121501f02b0dc832512e459d96f2f53971e01e89b5e3e657c3575e684ed11d22df141501ee81c2ff3a1e2913769d4bb30a1829b78c60444001225e0667ef9dfcf3a99e89313b3e61180d133b7831741a537a0a66bbdf3368a7b127678313960aa6c0448716406766cf3bd9c7580ee334c6cce8c4702c46c9fc9921794cb0990ae30a1ed741f68b595f88d5f45aaf8671d67463b13a7347dbc4aa9dbe1eefba076678ce557def979215368f37a66802f77a7e96360bdc0a007a68eca3f61024db6f8c6f032d010a1dd06d03fffb80a4b79b2192135ae001a34a8079d05895004328e6e1ca055c6ba602cc5cc03905b0e703ec6404fcc344900dca10c7c8eceed104ac00587745eba210b4fe9062322d1a3fa8af2e59ebc4b0afca7480b90b5f61afc297535a323caecf8057296cdf7501948f0fb67f6668a6c0bc96277d97b921737a75247a78076a2dced62a89f91d24936fee584f281cc889f279ea0e05f2e9b2eb25f2fa725b7077283557a029ff3d1c08105ab89b527006d117dd7900144f72ef55da02fa3adde303bd2becb10ceb8db8aa925185a053c47d7d153c845f86d822cb107c03fe0cbd213c4667f541375eb680c21dd04b0bc2dc5755ee843ab132781051fb92ee4362696936ed81c7c4f25a58929c34ce2853060042f4f708276d3a5b63f3ec1c51245ae8d7376a0091ccb0ec6fb970b8984d0763448f8aef4d92df4eafcf731bb6eca11352dbd3a0cf1346e643a4ba460c10135d9f35207dbf55f541fbf414075d47163837612d8aeb09315d760542219f8d606dc8944ae5b52782ac56a4541a3c136c7f61e3503b5220d359aa9ad94d5368191bc7c3e97985049e66e857fdc5f4d815d14cc049d80adce7de17cd58adfcf5a1f46d0a02f663993eb092989ac9a24ea510e532afc2a36bda2037f0e98649c54252fdf25d78fc9e85e4797e89481ae8bc8b62c5d6114af3e5584b163665e2706ebe2c56ab236fe27844155b01dc8ebaeb23d71d34d5a3773676c6cb9256705d66de274a95ae9b989c88e29000609978becf0a6a38b1c4233cad91a51161f0e7e241da20b2014c87ad82070d16b264a82e74a362e87298b7ea3d044f543144099117d3067b38191df94ac0a03cd6d70924424ed56bf239c5902db74a3391b62dd31506b27f61ae47fc095071ee18e2a21f3c32c96cfec01a71852529bf737ca364dcb3e947e9a9ba20b4d4a49b9bb8675c5cc7affc97df12e28aacc780e332b1d024f072d9dd314f193559a7b9bde9dcb0fdb0587e6553011b92a5c2346f8b16e769491625ca45181a34638303d01d66749617a9f4a8270ffac977e317ea6384f31b15e2ecd1ac407d2ce3226587b0c379ff4d925f9c8849f3a0be80717d77679e60df0a62b87ece9322bdcdecd3a02b85253bfdf9f8cb7e68cd0ed528f1d8185418ecd99f4878232218ecbb31c4284c2e3de113456d1d90db0eae4e507eb280b901bdcea85d744d03f7908a2dd6cb377eed700fbb7108988b4abd96a0ab504e51cfad46701b9fd6134fd501583d0b149e9b3528d7e31c041fcbe2e94ae74ca3634a3aec545616a3e570408808dc01e1bfbc2389f462077c41180c7c9f62dffd6e785d9176042537772083445fb331bf58b4164a4b0c252ed3f8bf3ff60097f839b1d8afbcc62a3f311bc4c0db46db655f8b5426a888ad3a4a89c3c4f0e4c04f125b6a5fbbeec9052b1ab1ee9dc922690e3f8821f6e9fe040871b1ed0c5374dfeed453788b48895fed144ced13ff377f237aab2df0219f68020dc367db99e3cbd580c0a9298eaea8e96ba571e6cabc2111bfbe12b7caba18c3c43f9a4e1503fb6517723a9c77f650ac9532907891cfe87da9e43d15422f5d83706105db60a04a1740bb2d7e4f313d39d853941423328c4f13143847eb0782c6de4c1f1d96487d3ba6160ee2c82a084c601d44c439b0de2a61f506f1a34ed1934fac07c1ded059888a83148db65ed1b615ac755a326bd62d1cdc6d48b96d6f2db70f67e9ce8996ab0da1ca4a4083c4e0452f984b772cb5bbc5f64fee36e811a148b6dbdf5dc7143139f1abebd1104cd1881012256e56e7755d83477cbfd7828b52c4f3fd246dac92bba3f589e3cb244bbedb366c94808344c97e7cbcb2bb4b8c7f8f2538576a933bd87cead7bffba5a385534bdd5437ae8ad94c086522ca5252c19a5247cbc34408ce9855c27bc97084bcec5b2a519aa2ee32967a51ece6949b53bac70a0d80bd5cf72fbf951581e410b84395db29383280be1ee47d3da6ac2fcb4c5092910b187ae6df7e9003c9c822aa1c5036ca45bf3322efad1905eac5c27f8483902a6b4329c863d2230249544c7c0441724becb040ba585f5da925c4b2d8db1ab1bfdaadbb1f2b00fd724b57ed0c44bf692741ff83bc16f591f14bc1e9f1f6a1ba8e4883af66ef10211d60c7d38ad232b3752818cd164e2ca722c5489aca4648626f422fd878ebbd613d610927f47ae98396999ec465ed28e0d3d6d68eaf70446fbdf7b23ac3088b70a3094710ddb09fe37de299ee51f8fcd6dcbe893cac74488911c166ccd1ed9e281d267d8a651fbd3982d59de4cdb6bf396dd795eb49a309456420c0fe0a7cf69f5e70a14dddb69013e1f1e1de33be50e01a33bde833ef0da49c2da3cb53585e015deee061c778ed650a7482ed51148ea76d854e3cb2b84d140f33f31720915d264fb2d78a44187637490f6cbcf5762b841c3dd71b8414d1af9f1efc91682e9168400508bd3ef94c02a1377d6b584681c31447bf5061d48a7ff6465ab6aab5e118871ab531dfdfe1fa9ed596de1167dfb9b44ea39ecb46316522409d977dfca378a4f8a107d1c8a9ee17db39dd1b447fa3e5e5739f23de0c243460d76efb8f10e1aad12964a04f9ef75fea42f59277587c14b0f7e8056af7380427ba78aa01a1e16726baa8d2f97e923656c9dbd1dac9f165e2e279145b7984038c684f2399a7a9eeb6d39452d80df65b64f9d6aa94666b7a0be5676a43d06c426d6b97dd6e3e6941026faca3904ca2069145d773c3780c193c69df4f994292f4998df8777f29522917dd85b814454b577d3729b39d10cb7a746b5ea61789aa48775ec3c56c46960d6b6790305560fe69e19fa12a2c79690954ce6c8803a15e65a6c2919e489b70431721c03b66db0139d44e2ac982ab3db1d968cef4f8a9cd6e0949b3160547291a652fdf903fe0dd62e09e7d981f2bb88d029bb143c648dc81aeab8df98650a0445c670c8a6d1fea1427efee4cdd29bccb926916141ea4926a46c6c6c734228d16f6f2469f3fb16e075866311134a0c77be9f30fba68dcb998076a9a9b6b80fe8444fd4af15205ec7006c0f6568b071da99f278a49525457d4b17c54bf312f854ebac8b274a28c7169e95bae2f6475530ccd75d45f6719b553345095842c6f3d1199bd8092c6ac2ef31b0abe839fc13da910d6aca26e30d8f4e9915f7a2b268e10905f0952943e0f29d15ba603cebc1e0999dd1d64bdf2443f0eba46848b1b9f7d1173449c4d264b76a48a1a5fbbcbbfc7934946ed09d485349e9d5f9c320251f73c7b426c3693912b98e93ef43bbf09f7664a4fc57d792366f5b941248e1751493180562e0cdc29c8dcd7438b2f8cb5ec007062c21c0fd79d1cd6894a9d1f022c7753b7f570b874e43498ace5f70c10e680626c33484279110172589293361915aa594adc7965cf0b948f7ea9948755b7a367855aa618cb553afca1b4919d9328b2717f2ccca08019f009cca6986740c08b68f75c68995b2cf461be218041a0ced67114f815c78ffb648001944cde9d259dde3e349c4cae9d25e2ece551b419e72288fb0be5376d2a763c1be71cbb4bf91c7337c7f6084506eb69f0d25581670543ba6610ed23562bf0bda569f6a6d2a3a8de8cfae7012f3e080bd485005196f50f9fe74f465b003dc9c5a02adc39b4e4fa67a99ac6ad26d88fa87ee74c0a5676e735ddc29bbac0d8519967c59ccb8563d4f626e46e01ade7b116d97b4a3ed6665fb6888bee0c03b86ea35999924132156b6109e94e40b3136c6d0c334330f535362033550ee3c9f7c2cfd6b861a9ea81bfc18c9ac2c27ff9bbea95e682b020ad6454edef95b1c8a80cf413edf45f9598c2d5753972aaf3dc3d7f082971c5ac502819b71241134490d261f67b7dda6c73ae2ccde8938bdae3a0a04dce89380f66866f68f9e09df99c5334047e7c3ead7ece4e193b3691415df516659253171ee511d9e583737fe0d3e764f6dbec665ed5151f1f5c4a2bdebb3ac7134d8ecb662e32337c976c2d65778a5ffbfa6dc3a2f8533c0cd1a5f9ef96108decac96a0bf138d2e9c3edeace831d382eeef8444301f813bdce031843fc8f2862fbf2f00787eb5ce274ecdc4c5487ed04e9d5e1b7d7c67fe694bd75cd00046da1785fb85366cb3c5aa1574e1b25d5ecbfa4b76e50f9f21c1649664c0ca438683c2b9d80e9d6918ceff483195b5dd3992e0ca78a818476fb7309292ccc17185ace589d8c3fb2807797eec0f82978fd43d5641ce23d6947c75b613f67762170e35d605254392c35de5bcf90db0410eb17540dee4b894301c903937fe1aa160eaf38b4a9ee60719c4b1b1e9efbcb005fb722876ce8aff4cac43b5c7103eeb8025c2eed3e9ba533d145a9f67c86f090064913fd4ffa8a140a0a6fd2effb9de3b7f68f75143bea561ed0235c094ffafcbd360decd9acc0669c767a3c54c4cab792b5d4f6db4636622ae11c330777aa74e81976489396271915ecbe869aa39286a9b9fe386cd02f5028a619039b3e51faabda4bd9a073a3fbaf9dd3195548cd82d48d8270b4897ec4c26a84e269caee679e5d8123b32913dc98a9268aa41ced7480d399e228c9a7b779ff34ade35b450844ae58895d254a66f45b1864956becdccaf22a60b7c81ee76b0f8d8050226e394e086c1e4f77d6bd2a33a5a89403eb8dced062e65b535d3bddc6b3a9dfbcde410a52cd113273816490fd518652afb05a42663f5e8d301c8a324505fbdbcd81021bffd2e15cae300a02e1a5312df1e57a421b18d06ddeddf8e466f3c50dd64aab2fb4c7f65e5490382c7b7074246eb919579374a4138e60a2b377dd22fa7cfe73516a5f7fc74f0a2a39ddfbb3252583e77ad6b1685c56b27217660b59927bdc7cf24a61d68f2ce0f7e97eb57ada78b65ad39f0ff481cd93e9ab0b1bc2918b176d6d0554e5f038483e2e6e118e71e21afba8d11ac86467c3e2e7ba42b48355796e901f4de929b607def70fc3d4c0779383383172b8789939954051efa1acb816ef39d36f01103a44d5300177955df54cc0d9f8009ca734bdc7c229dff7791f91ae9c37f4e680b99c13f0d688f01b285894bcd64e28a64ca39115f5cd41b587670160b8bd0392de166221a587d7464ca4d3bb762f3a501a1e18068868fd0e39bab46be2b429a9c68f22c197d2b55f0ddba52f0c887f3edab37911de56e12f9557aebbe29ca2aad0debc6723c3a06cc32a2345cf05e9a153a0fd347a137a63c20ae1c9a5ffa83671db5158961aaa1157cc5da61c0b1b3398b06d182fb6e488f0e1cbd14b80823cab0c64b3e9d8e6c8fa9e95eb70acbabee760b4250502c7fce7fe6bca7404a0a77286f46764b22e2dcf546c1ad31ded903e00e58b824ff30888c6c22a1c0344eaf22f0184549a1cf88b0e8b808b5d39a65c5a4541b4ea04b17ba5d43150872145dab3a3a0de88ef8dace23f3a2620651e016b29446be8eb7857c828a6453cd7da15cfb98480ea337f4d89ac05bb8f13f7f20efd8a4f1a5abf94c0a0c14a6308e9c9376955987ecb2b778123908a3a07474759a4b77a74532588d4a47948efe100ca56e3d07bc449f61a8b494d1350906c3de8ff57cb2d8829deb72d2d7cc23bec6c1fab16f7fd16d10a99be897be82b05d7bed1b99f0e2578da7a08598235270d4719cef1184128a78a648cde2f895dce887db282bb47cfc770645338f10ab60d59549ce8bbf599d03b0dce8af1e9f8dd383c041eb2986a7d10da0e0bc2f7dbb533822e67d887319a2172c5e1244c640f3c6cadec8ce833bc30f862035009bedadcd5d90c91bc35a3bfe2102c14ff8b039bd1cc036bd787b4018df3b31047d1ed948882e5870daf555d07181a220f5224f40de06490014d4e661997416e15bb1906616a833a515c450b2cd2fb917ae6411a28829a3d8263759e6095c9243c70851948d235910b6f819dcdc26b95bc9040d7cce9b1804886a21d1fd1cbba08c817bb998df53b2099449b8ac05ea9dcd4c40de122272f7600b4a88e405e805e6605079041577c6fc5e466c42895e7a35919acaac4a8f383ce695124b68de7da0a3a2a7ad1684434a26b7ad15363dd9a81a6191126b243c1f7546669f2e24014e8c2b312edbf22a6bfbc5a2e6823b5444bf237cf0a67b8a1bda8d926e3ec1c70e20a0e90e53b0ae77f9a22af1a19bc5a2515aa6a16d3c170a94a7fce789afc4fa5d77a24710319cce441932683b445d254ff599387b609bba5c7e633c09e43c44c7843826113967104b22c895e26ee27595093e1416468be399ca2cea3905b9ccb80124a1e56494e1ce68255363c1216387e46824e848e90dfebe39e79c54eb9f04329c826c0f85365205543aa61811a33ecf9d1d5974549f4a0e15b6542c790b2fc6a60bb893deef3109d3b00294bed44b20989066f347cc6a1522d2a185e80a33824b1c14b68d7213159331249386417b72407e401278aa48325801e9f1d34b8506d2ad7deaf6d3344a1673190607ce95753c136e8cbae22ff5d524c26795656166833d07d7fff83cd88a15bcb3e8347ee3de08e28b3f9b7968c4b586f519ba8abd046514495fba2de8f9c7c6c1d101c18b12fb7d0721a298e4790e2e0dcdbb209cffe0501e9151e7685f5fdcab0672c1cbc43b7459a0c61228fe321140b9e7199ad12dd83968261df9caca203c6039ddd001de9e8b68552330568724bd1a7c1955691c92c6645cf49a8f4b866ba1ac840d48ac4ec84edc911d95ca052c7434f8fb791b952078ecbe46a2d22d023e7044925c40b5dc27f30d94356e70e51180f6e899463cd8c98196ae1dc9ca210ff82a52a1b77f6b3a25c358fce6c923acb1b756c6abcca1263f2599876792a3e6444f770ae81df9f5589c4eba68a84d12f277e7b5b9cd039f830d090ba076a5edaa357fcb618b16c60878d4341d44f099b5faed45e6a490f5588a57055b1ca4687dd5bb5678c36e3efe015306560532a5201b906f1113e0377171c3ccf4bafb8c9fb9800121e6c62ca90b1f0b20e9c34e62465f578c2d2aa56d4061eb46779d166130d88d9b3f142b4b339d9fd43749c7526ffd45477b065c194685445585fa4fc1ee81c17fd48665fd6b494f24b460ed9a950198bc62d8cc3ea7b2838f9d06a3c8f73de18fd4716e401bfe7fb2341504820b2b38084a6cbaf08903b49af289e2e9bf72c7a5e419c9699c1c63aa2a2d93b768fe2771bf28010c8057863b87100dec57fd7090b4581768b2093002a000c01a8b51e2558a3b8487df824ea254c0b0336cc1e8cc05183434f89d6a2e85b99124c6e5fd9c85a2c78c8cd4ffc3389c87e94fd7e6046bb855601006e9ea002d030ce89cf74c7df1d8bdf000b4e3867897cc84dd531b83b81a1cd06be0915a1426c6e632d6797ac8ea4608f48dc87a3569a23d1ab5d7bca7853c0e1eacdf22ee8d02a13c0a1c8f1a03bd07b25493f0e084ff235bb8f2d6b4abeb14f74d5807706dcaba2853d438f24c83e8e986c6d85ae9c4cd34368a3d4aa76e65c3846e2b6d7c631be7e84389c96d359cd0a5525537693847df4acf6ebbd1045d949ab949c32afa547272db8d7374aa74ee66344ce815956cc3f4a4cd69812f977fa2aebdd979e3a799a50e9c3f6610a261b7f35771c8e7f34db753cafb25269a961ad1e920ef76b1d3bcdc8c1e0779c238b766e78d9feed27b803da40b036a1a566d5b30d61da703cd2aa7f19696963ea8996f4b3eaffad87c71163790c7b73a93fbd0f6df719392552b8b4346c38d3bf400e287031818d4abef7425448544495d1fe1a17240fc4756fee35ef80f5a3b1b95bc60235bee2db79432c924037506e006e80639e61894a085bc89425770c590c58ebc8989218b9d2c6f04d2ba654b9b6da74e268e3e5ec94939fa31dd2d87858ca6047d7c665e93fb77e239a22f47f6afe47a8301695f7f3302d7ec2bf7d7a34012e50435b9a74948955d5128d9e94edec93eea84f24815f751a0fad11f25f04ff6696f3665d55b69beb0ac0a37d684592c538d9b349525473fbcbf1a37b7caf22f04f15beddb2a776b783bd4a8e13dd95e7b6edbb6ed39afb5d7913721c6271d7cc2b8458766d59d3c2fadac296f58f7c3cad2be39eee33e1a6a9873663d9c861a6a0f512589624ced37af5944ae6a9d2132fd185fd86d9144728b8c65aa031178f2bcbebebfdcd2a93aa2627cd476e44b8ef161e589712d5759f46b0f339e4a26b6084e92e98c0fab924cab93c66f3510e4738ccffeb6c76d1f0cfd9cf6fd3d5cfb195ed839468cbfceb5e462bcc66dd535aaacaad304df172bc68d92e9e3af498d2f9237f25fafd7ebf58201034604c3c7514583a669af6953e368d136bfaaf9bf8f7e784f43bf903d7d09c41dfdf427106f664ced617e86e711d43ef3a6a6695a0c2f8cf1998647241a200d274d4dd3b40f87cef36de0fee57bc83bca6abeb324b220166abca9e34d979c2241faa0278746a466b9b48e0e3accf8f9338166d01c623a994930c9f46768df9e103a5ff3357966cf37354ec6879525470ac01cf72f447547e371d564d5089137dc176632c81bfcf4afcb57f3443acff8ecfb96807bc81a6fbaa68ecbe49120a62f89a25f2a01b62ff333f3b5ef9f796a6386c8321f5626997e585fb9f264fa1f1785268bfb6ce0f0db305d530777ad2e1f12fcb29fe149988c225144cde3f5ab7726abe6d361beb6bce4cda44537bba7373d2dda325aa479ff323c203434ffda7f5d5df2e69f7edd892e911447514583e6f990e0f7f5f0bcc9d3936259eefb6fca7c5859e17cd5222e183062aa0b86a67d618c2f7d0f8fe1c54ce3c53ce3e1138c17de96eea9accadabc7056d6f442fa25efc523d2197f3248903e0d4e5dbed01265fa40b80f4b4c3f094af71b5cc5c25798e75cfc65c1df853f8c3bac428972ebd337fdccbede4024f37af4c1907d3f9098b36fbf8188bc217dfdb622aab0a3ea77577c13729d42aedf99b5d9df2c6257751dced534fa7e28b3b63dc16484bcfe16b76f4a6f9c4c2693e9c3a1f3e90bb3efcf86ec4993d20ccbf7628e2fe80b0aba41a007055d8eeb57f66c943de925c1c7c0056ead24afa148b07eca550d93a8fadf75b58388c0a9ef2df2a6bfa88574226f42218ec2323bd631c17288cea1f5ec8432f37022e81fa900f5f0c8fe517cb8910c3ce48893e3665950fd86722de7b1bea2d577f7ef58dca113e335d550eb4b07cdefa02a508a1a16e52514b3b82b9d9ac0bc4bc788741e7d1778dde0bf7d167015cc97d5d7bc29c41fc845d22ce1fe8db71f875df839ca7c7f480e314455e7a8fbf7635401011c42bef77eb4f7de2c6b2f67ef83293966c9510a13b17c7b64a7043bf3ec9743823452fb33db2fdc216712bc6f5f4e52989892431ef93e7d1ef7e6be0f7923ff3e90db45543ff7dd4e2677d7e5fb32c6db7db6a3dd3e8c4240e20ecff7659037fef766df77f836cb0a37d684192cd319120d0c29473ffe6fcf90684e207eeb335f68834a39ba50a61fc270a01d0ee4aa1a4f5fba5c55e3a3b1d0a23ec4a82fe62847758c79c667be23e82a54f7a61728af5f680ca47f833e8dd12c997e7b9d1d88e62b8b071a9395256f48a7ef5d7ee6fbe56995f9a7f999afbf2b49d565859999999fc922414af3edcdd07c30f4cffccc377b38a9ad8837dfbb7c488f9029bd42e6438a450ca550c8740aa41a9ece9399f7e15735629ee6492f5882323e4ecbe15327f335b4ba4c9998976aa70463467a9294376462626262be99ff6c98f953cf2cdd949b32312f3360cdf0a993a9c9b81f7ea5f3909a191289f42fdf344ffa70e83cf3a72b12a41e9337335f48fae87b157943e34cc021f879279a498313c17e972913f33253c38b514713f06b78ae5f817f3326b0639120edbe1e4f4e8547ee7781e50882611c8a1135f371e68b12243de94f39661c7d45389cb9a54ca9925fb6c03d854a0e692c4a99e2937b073d439b8e7ecc7c4e25369d2e23e967267de10ed95d48314f63fd7d8c1fce5f97bf27793f62be9404499f53c127fb823f4a999225878e25e658e44de854b2c89b10d442de847e458b17d158f7a135953a97930465fc8bd7a4c67f3446a433cde755ae80ae9a2e47d1c7dd67fa424cbff4d5f8669c8abc0927eb4a97ab3a4ae9cc17b3174e8232de5fc6ec054b308926355832a320369c4ea51798d1067eccb72e2ef509c44d3de24823185cb8186de0c7f6190bddfd85d4ba54f9fef7d2ac33f6d1c30918a54d1ab1d03dcadd0a5afa68528a7df828ba37f3b46c7396af7319e5b2cc93798e525925e19b7df663c691f6f917c56a59fb418bdfa3ed7235a769397c1a72bab773559eef5a118e1b6de0873f059f5adbf74a8eba07e40ee1fe11a97e76946f0eeea8659253e2cae940a71cc8f4155776cbd8bd49cdedcbd92f65ad349bd635b9b5ffdc2e697e560537d684188c36764eeba878b36cfa749f3c389d4cd3bdddddddbddbdd5feea72127a7d43d273a9d45e85a616c80915e7d4651136ba5330637d6cc39e79c549b39da0073dadc66d64acb69d6698e5984006b3b40c05a8e52ace44c1fb0e728c58a1230cd510a1554c83226858a29f80022434d08a6a8b8a2518105ee7097a3142aa6642e472954c0f05014d7ba4a1e41046cc5c3ca3d1e5657fad0b3ea15c8c0b5baf3c706b0d5a555e859dd1a832c4d70492723285a5d9b8410b1a0462228b6badb93a2d50b9814ad2e5744088656a31e60f0b312c00e94a2551ba18910442be9c51cb1ba980441abb8832a6c005b492fc608ab5be2dc6b2244c05a75932b42ab6e4115b155c3a4f0b3ea274a60ad2e0b32706287d5c160ad6e8cec1833658a0d58abfb02092a0401f62226e68955cc13acd595911d6598a8b293a5288acfeac24882091584629e8031444cbf4c91954c11d6cabd18d6eacec88e3393341f460a3a2bf77a0925aa78026b75637a0b9f2d624c7aa28d7b3133f8df273131c42bb9294f4c8c36acd524cdc73932a507b0d5ed1e5c51a56815a50efa72af63900514432be9c53cb1ba339c7b1dc5119fd5a5e1dc6b265808ad6e0cce3d8a8512b0d57d09d3410f3f5e1f31021341a92456fe7d9c7b788b2db0aca417e382d595c1b9b743579982b54394a265e867e52fbd1d648aacfcab91f1792f2306cd8c0c193264d0e9b267c414497a71c543ef20e53d42c52b47293bf0c961a720cba791a3942a581e9f6ab842c5e394423020c18621039cd500f77f3280c0314a6e970441f9f2475970d8ae8e7f8bf2f436d039fe96ec4558ab28bb1761457e7cacdcd9a57084c02e48c03d5f7e572596c3ae0033474c59197c2aa2e3aa38c961976aecd3050b0e39295c9cfcf824d37158072438c4150b4c04289a924b5f3e8de5eeee988d11a15957ecb418885922b158d42207e9042b87b2d4c16a20af43d8af6cbd8e5f4cd39fc1d2afe361c5037694f44f0a4926b24fc2565a141c3651dc119f284a26ea2a37c42a72fc36d0f1a311387e924833010e65900c9250b8a12a844c8e295e05c0711c87a416a21cc6a1d0635b244b15e35f3fa33fff013fb167a9edb29f9fbd05bce802598a60259f06e92e213142ec3320aeec171df58026f6b380a3e44ebf4024b5384b62a9b24806b0074e18876600224355e2620dc12787d2c54a81cef48189e11e2c6591c4c21181e72b49b491d3c572948d2b29349465285d93c592a06b0173fadce0ea50f9923d31c0a1cd1c132c5912b4f2e5c29243f9cae1dc6180af7ac85151b07cc99a30d006e52bcc9f08ebd8130312947f0a0287d65afb4519cb8688ccc7274c8370685de5c37d50893f259df1017e856f221d0b440648f4313fec6a3a9988a593624a0ebb02748eee93609c94049fc061d72ada84ca74614ac696a9094514a47849a01f7913ce279cc89bf933b3792347cd90eade71d869b7049260501038c4594a0187f3e77f5c2593002909ca52aa20cb1f2d40d2156d9ac85154e0a90326330a9f1c369350fafc349376d24c646efcd780a91c3836d6481df23324b0e6040ea5cf8f0cb7040e4fa74e02cd263c525972c82373f3a7bbbb230fcf4712ecdfe97b1e1d63e0c3b8300f196af0707af890372dc4bf1c12942f3d750487299ccfa280c3ae938951d7d4420849ccefceb22ccbb2ac7b724474903ae4bc5ae070b29c7575b2972ea9e32575c8e75ed809d889e43b962e2a423994aea9737b70886f20220a71c762f10b1b4b88bb2887b87e3ee428f9534767bab8f9d242860a8f0fbfa23f3d4eead0219f068165f622168b75e4a59186e22773f3a7b9ae48bce8014b0ebb4ee609ee076314585d510e9be5ac2c1fb35c5287fc18217c92a07cd1030e3b192370d82cad07386c96b3a4099a480e73c61863a4f423a243137018b588fd326a8183b093c3a845d8577ccea7b4d65aeb0c879c327dbfc2f272f0742012050efb8a1657b048d5735d4449707b156b42f9c261bbb876750ea50e1524d2256fe60fb7032c5931fdf1e5eb8805824f0eadbf0fbf9a9fba213f1f32481df24955706843a045a2220bbbbad7f7803ea9ec23e747a2620e7198d40c4179d2efc3afea4b1df2710ebe114e5082f2290ff0cf4f9de089292f5be0e804957c5d749ac562b158ab27fe54c456fe9237f725862c3d128c218b1d0936278b7c023972741883ff4938d1c4949a7941e01694a516733c69305db6161b28704e3aa7efe4800927535091a1a393854e163a3a3eed76355aaf6b7369aed68a6054a8569a858e10ad75ead4d3d4a9b4d2a71e985d8ea0b71eebeaa1a1c95908707740c7e572752e60828067cd6cca7ed7d1397dc706a939335b3d8995ae4cbaaa740139d00bde3677afd73e9637db5f8ff68c82d8df7e8e7e6c9aa6435f49a21063aa66753221d493653509149273f799c15c26b9810b97d9ead3ba325775b9132a65144e7474747474749a523a6b9645ccfcbb4e68565aed64823ad188bc08759fb63aa19f7dd83a4ba0b06cbb1a96681382dbaead5d388e92427a0c2173512a5b274e25e8987c80fb4d4ce0b6a937b29452099eb33f5a02dc59a8075278608a82fb97d88112301de400072628b8ff062cd8e04577bb6a600ac2fd3498810c924022063000321d81fb8d009fd8e86e1d93135311a617985c60fa313531b500f79b887021e5ee820032282e60964065f9e18bdcaea86a9e215e3c3c115bfb5da784052b5041cdacb6c19a4e6f6a8e4477b7900d14080492eee51455db90cc10e828693f4804796e806c43ae1232b40de5afa28aa121ca12e2a8971141f94343360af1aec3d85110901a07b2db889a2f833e8ea8295fd62f5699442183b6a0d56ab55a353362c4486b451446855a4a7c7acb5b52e8ee09ee3ce847e8ee9a75c967543467320a5aad56cb8811235d134d4c5a53f5bb0e08f94310468c18e9e10507c144b36fb5562b08dbce83268260020bc28d183162e4490b9eb45aad56ab35690edb2e029f19f5599bc89e6844d35bad297cfaac9482737aab25a1702e9834ba5b6f4faed7d146d3b2ef99dcd8888b11d28888334247d06ab55aad962905a625376aad95ce5a3b956fe54c28300d613a81c9042625a61e53094c24308dc0c46312c214842989e96542d2dd464c474c4098764c3f988c988a985ca696c90793084c3aa61c5308babb65eac1c4ba8215aab0850a5b509901bd361f575d1b386201b00228a68415a417108cf4f27a75fbbb6e657ad560d442fb4805b668c2463eb6c84745dd840d14681a72ad868b4f965a919d2e3eb668c2b4a2f9c31c923c5b0c6b5c546d428ea291e3c9654cc94dc8554084b62a5b1579136e44d888108584a696ce55401c25df62dc75ff600e3b2052086db1d98364cdc80dd44030d902d1c6044564e52023ca8c72dfec64ec96a359998e8704bf9ace01b5965960ee79a67ddc413fc62144ef3bdb0404b526440a6bad8852211a85c236982ff9fcb2bba98e9cd149f3b7c4c8d65554656fe4c060f60ffce1c1dc4ab8b1262c1565f9a94c9333bb016925158c8a4a3eb6563a93e9572a5ac18c8c75954fdae1548fa0739182398dfce583aef24f4646460a0e79c8e4f08517e28e082b0207b98ad68f190d7288a2a9ecbb2e4a1afb01f763d80b567a450ab429715f9b12f7e53ebc60974a77e80b74a771c88fb4478292a7bbb3de986c4cb61f495ff5eb10b68767a75fa0498438f27ac28db1492a17593717641f372d98c9103e940427c8f1a992f802e5691cb2c7e5c755d4e5274bdae302c5058abc095d6ee07283b823e6cd053d9b96ecd3847a98501f3a04e5e917a8127a024a02da437bb20b6cbac0c4ea0f8a3b7ad220873da23c3d5a0e84c8f16992f88206a571c851136a302a8265559ba2096951a0f40b9a12da125a0eb2fca8c15e3013cb9134173d6b12639c40b2089714dd5e9b068b36b608ea92cac9c949e5e4e4d4501e9d54e5c8912307fc226fe4c69a903494a51c8a3b22a78446a40d49947c6d480a0eb528a1b6445e82d483d4862289a511695486b42851e48d90546954b421d250f549c15e718703418939f4b5ca9a7755cdbf8f1274ceead5546a447f285010140aa33e01c832fe645dcd0a0aa4c5a28d7c5b44479b2ddbbc991ce54d66330c44a1c02418c5a34223187064ff68901080c077d40674253581ecef5299090e6dab3a17f6532641aaa405f74729e07e9b1bb97b61359f1400b9e38e6e2fc2d0d95fe6ce71f4a3bb1405dc5f8202ee2f6981fb9f80fb63c909b8bfd48452518909a52c4a5894b29496505202ee2f5d0153c2c24229092524948e50ba523242a908b8bf6405ee8fa518ee2f5581fb63c90aee2f5181fb4b55707f8908b8df7236956f0e8a2b4d511a02ee2f1195a4c0fda5285ae04a42c0c195a8e0fe12143800a9148e166c6e00c0060aac4163466ac64ccb4b135eb0c0eeee9ecdeafea2b367b4713f9d4c27af4e90ff315e9c80fb63474d876cadb474cf26cd82524a29a5b745b92728897e94d6ee276a77ef64f1e736e7b41c3e0d39b920695ab669d335c9c97087bc6da31f1937e79c6e676d5bbf29bfec8f47fef978228a4bef6843e96d715a913927c9c565f483be0b9e4e857abc30c1070c5b9e5f8f2cb8f14be9deaf47c3523d9c8095baef0502f766f3e68df23d9d606a4e96c32e4c0145c80ec58a106e80dd09471f4064c0dd5f1fe0214c859c9c9c9c9c9c56ab15452b8a562b46df708c53ab415259a7c391a820291d1d5752f393524ae99448e4d084cbc59303209e7044beb6b0811214f4a0a80811405708400916222949a06031c18e2492b033042b64e96109ec0a5470318f906245cab4c2c40a0d72121c6c62b9728506f74679c37d38da3ebc1fd6cb35d71d8e48a41f91bef73a6b1cf7dabdbfdd6abf2160eebfd7dd9170630e78be472958b81a8a13696d9f943efd5c3832e5e0fc15cd6af5b2a75ecde853fa95fef4117d39a259dbd6b6becda146de3c224a098872683b99afa95db392d7acbecbaeb62fb35996bd0b67a5fd75ce69b542dbaee43a4f4a29c745795333f53c9a270f4190e987a3cd76bff98539e4f936aeb4aa81ceb9f9d940bf6abf03f57156bf6c49a7eac578563f178e4c3938bf7a36b35fbdac3e29d69f597dcdd6cfea8763b202370c267f89318e54705f76dffe30cb7552581b4102f1030398e92f81fb9b7ed35e6ee3b1a4e86283ff7cc1a31924cbbed45c489f339bf6c630cd938b4ec290737ad3bb34247851dcf4ae8d6ca16f1546425a90383ac54901b86091bc74dc78df1f61c54bc599623366d0a04183068d199fb7239c4fddbd525a51281b366cd8b081fabc0fc3f9ee3c06c07dcf7c09e002c400463080f6885980991c347bf4c8b905e0820b2eb8e082006ad0c8e11e75441d5147d41175c41c71468d0cfce30007001281740cdca90a312019c000084000021080000390417ae4ccc9b03200ee3100e763f423faf8b1f1e086814bc00180a0226e056c3c8d801964069941669019642260da401df1f60806704d299d21c6e8930b3d4f59c399a9677917c05d0670f3c6a90ab2011c04463f66e0a203389b518cff3470f608dc23f721eef401dcf4421ab8ecb58761957d2e1c997270beab5b657f23c059175e654fc38783e7261dc8de7a2ebbcabe85d10c93c5b219cdd02cd62afb6c4e600235d4102f05e69c1470e72820a9e42183b631665e27a533c618638c99b4edae45f74c0a6d4a77ce1ea1db12ace55e826dee2538cbfdd7b96d09aedb124c732fc1336f4bb0ff80fb670e5fb439e7cce69c737a73ce39e7a473ce397bce39e7aca79309a7e79c178969ce39a7c499d3a672b482e7dc9a521a638cfeb95c11637354d2604a0298e3f7747777cf90e0fe28e93c71b162bb246bdd9e7e392a86eeeed688685b903631de881100d4463df24265475ea03d5263d38c3059a161a262468c31464e867b8d32998d47beeea953cf1d07b12dc132889729c1f819921859cbd2984a33a78f32a798183977777f61ad11d403f408edc218238c172e6260c0b89fb6dc197ac4dd7d13a21483e6e563f4e08f3613bb7c1e375fa4cf2584bb7badcfb95b2366d0a801a262fcae008836ac11d403f4080500678da073ce1b5cd6c28d4d55707b0b3612470ba31ff13de501ba1dc131fa11df638ab4230699d5badbb55dce25b6dd638cb3fcea42228de27dd9524bd0b639ab98556876bb55f09c3a17077743b3dc289bd974d96c449a5387e432944961c54a7796168e49e98d5a1f6727d5dddd6aa1b81a0eb1006f9ab51e8bd4e872dbba1b653dfabd77d3ec3604504fea75237322283b97375e0e3734cbbb0e63b791e903b2cb88a25ba638b896f31251b456e09b35ab4ea7cd6a8bb6668bb65ab4455b8d434ebcf16f48b55f479bcc6a73ce398ae1eb7aa7ebe97e449314942022390d39d9ac4e0aa2deeb5ee097142b762baa24eb3b2236c9d24856277520c9c21dc462b9aa87baeebfa964dddc9908f025b55c2810cc0aba85dcb9ecce55a91f292a5cba4d9c4ef877c238e68d9972948c82f3430aa438aa8d1c29cf914ae5a070409139e5e809c6456bda76b9d188bb9b36850b16a6ad19f5e9cd9cb54ecd8008cd20446788074ed5c991d249d90c441bf918a0487ccee96274436c444d804f261816ba1775c28c82643fbdf0cbdeb318b2f70c6718182eb94d25987c6364b286a570b499d328880da7d3662ac9cc38d5a6b559753c5f36d2c86506860647b624cbeb5ee097148d41e9636a2dc65dd7d9149b0b89868b71c7858951eb88cbe48b20dc963027109563e869d19243e421aab6ed6b92822ec1e8c34642fab05b246b31f775f7db1a28ec580399a480c10167fa210bd36630f1059aad77010bc486f40803de0c42866aa081485acf470f1980f0a05e0e38d8ecff8178e31f1109ca1ba8951de546ca4a5edc31a3ab3630ffd04ec249a1bc17da69c849b359a5a88933da116d56e91ca5402fc7176d76cc556d2dee5803d5c86103d500725507224a7e0f4145604994b48f145bf62f876823df24c5d5481726df1c172ec61d1bc94a175b7ef003775ab1b5df754b4c413001c134c4040c1374d62c9e97a8c40c5bca61ca6824008020282316000020100806c442e17018c56920c90714800f668e42725a3a188792244761100541104341c6104280210819828c3254c50136c6147bd90a028610191e697d243cb39edc4c7cbb32c85dec4e5e619b96f2d99f7478fe95ceba285e40d833289fcb853101457640a257578aceea9a162f42397a2662481aaba698669b154d004060a1a5a0da91d67ace48fdce3c5ee1c212432bbe3bbbc5da99ea789840499567978234dcdb48227fdcd22d6a93479c247cd84c584a3cd9b21d168ff946bbde3678f99fb63fd5150b755c718bec66adec7a12c701f5290b422e17a972ecc7721c4f26680de5205a19f3b909301d655b622815a2f712f470d0616734f068b950041c057607c530dbd08ad62c63cf4239c4b0c12851cef52d7bd2fc5d057930f2644abbb8cf0117489affdd443e12eae6ad6f4794d246f456a6938144f51fab436fb42e1cebd56cc440374a0bd8de397dbffac29b9f1f778b2c7713d6742e1ebdcf363f8c76434d98ac9639d98b929f940c191ad18e2c5edb8ec4036c3bb1bdafff2baf4ee79776d7fc8a9d3a1b65d232d5d6897ca368f78b21d2951462584a749e5aca645da9292e211e4303661ca3acffc447dbac09f815142f9ce9ac124118cbfc12786682650417d757882276bfdb8964cc0e1f951a222f9a6f1c25faff3bba4f9e94ef593486ed1f918b66bdfdbc15b7fd570878f467160db7da41daa332d2a1be9e3958e76186668c4212a18da601526938ab3df9840350cc356ac41ded269359f3745a8e01194c1ab349db46768033d7a249fa4af33dcd049795871dc623680342656b750d52eebcda772e6b1e4bb1d2587f5dd677fa62192df352aa5e8c332f782cdeeb74e626d3735dfbc97ed3aa2f625beb27e63ff902a4ba3913225c94aa0f760ff8c34570911c77e414bbe3c21b7187551ee0b31c2ec753600b942a2e397f294994c588025b70c92d841883314cd88fdce87df153db06ecf4cea2254ba30cd9562bfaca23ba26662b4c8ec0e349ccc0093b1c3cd1b151d436689ec110b8484115e5c01ac0459f914e1a49f7c8f379f245356df1d3a2bfb97da08ada14f2320486d62e9c883e4c91a8584870e1796be0faa54468a4032e0bb41aee9ead7722750ddb7859a0cac0920643b04a9903991f8321d05529a1fd80105c5646408bca866b72387196bc4584d53c4d9060ca7162a7d396c0f469f9ea3abbc182d442234b16b3535895b5a7d9d4a2a382af4a72a335b05c06ad54815659a9522aa26ff811447c8c3e9ddc1aa32dfc34b776490cbaf249f1268e2301662ce976fc00f06500877bda0936e85b160d843a79bf7fd4d35ec149196d51fb89c79cfee262250f9157bc58b0930082c3581470a36a765e01417f5d906644c6c33392b936b97a84094618b6dd6e038b1326cf933ca493569c6f6c34ed31e27413b32030a148606c8bc0d1f30854a09d17b8da96b1ac390265f8c676b115edce089f3eea12c2d4dfc9261c70dba59a3f57cb004f60918ca400891b89a6fef005530dac2173bab7e6b00f226749cd767ab3fc8ab4b8a20f28501f71c786865c09d5fbf8aaa8ce1d737b47261d2498d04cbaffb83505bcb450e6d647724a97ccb843bb7397998da11e28f65ed5e9539e92e1bb4757cbd3f60d681d3b2d02f2adc70d656cd0f7fe95629659afb17d32da6ded71a967cd22dbd224b034b95d607d2eb6938262fe774417a544a2c95204c48fb840c1b2959a2884f5fdd211494c5a772e63f63223da499e0f2868538f829a90afb36f95ef8a47076f216407c7a12d670929f08a42f4355350fa3609dd19f014a9ae90b49f63b1b167554bff6488fbcc6722c5c78b972a6ee6635a2730046b7138d0cc5fea613c71ccdc74bb61a8076d73a8bb114bc75576bbaefae818d76e3c9db75c465c6d25662f6ee6475a4b38443b1ca4963512a8eac969941f757dc1104b2303a21c18bb7fb64b12038e72471b3b8633ea8eb40cec613c7c8dda34253b762b4952e1ad9052757ab44ab80a80ae9855c5da2f494df7c8185456d4b49bf4bdd5b182935ab2297db8a3e84fc6eb5818df5c1c2458fdf384e14c0493168c42231544968a2d32dbe35b250e458c311b0caae63a272782ac93725f234ba42b703763cd94db8ceadd846f95e8160b12114274b4ef18c455bbcd8ccc5f03b9a35ae9035b14b1833b2e9a2e02effd00770cfd508b60932bbc6834cef34365c41735f44b2c32f351ad25949065971918df9b008c635838e12ef21c57a23354ac2ba51e35e01441d5bb93cebfa60ffbb81cb61d40458ae6a9ae64a874a2985e9968a22e4a384f0ec462b1ba0ee4d8d5d1974a1c4a73d2c56d3d4bb43ab3fc9901d6d2e64621c37b051340b9da903c1ad7c8c1e2fea141247250152a407f6f9fd329ebe0d69169e4b568e23c4db59599dafa62aec8854417d74ee00d9eef045e99f356e4e72d6573326ecd54efe7670aed70b351583c050c2f2fc2ede0db1ee6be099c112f7324187deb91227e6ff4e1cb386d62de7b3671358320888d0e3a130df67c5fa9c77402cc586054cd9948d8ec2b6e16b56f4e00fdae0467f420535a97326430727835773ce4e3b4d2103a0bffff4618fddc475e3118be2a90c424e46a1f86b69d10da5d55ec09787ede48d3f80e11f6913c86572eeb9c870624f0e3a1bc641eada3e7e3651e1be94aca56e5ac1970aaa70c992191a3305965b76306fc77e00693fe52892d156fc5fcd4e6a4ed22137900d09d59da3d89f8337398fe8d25a68d80c16a1c740b104c13ce3f34c8956af3ae3df8c69acec9d8c44c1f5f16e1e3788c05c09881a62dc781d6e4d2e627d13e7de1f903060538a58ca9333dc618a0f27fe9407494a85beac06b351051a680522ce378ef165cc2349869c920c0b5ba1b7f379842197811a4a78708f0e0bff04b5ddf1604f7c4c4a92efa548903e7f38e39814d67d68ce5bfcf88956cd5d275a88a27bb254fafbfdac366b129fea3cef8faaa35c0e732b6077dae372633a0c3d83e2b1d618ecfa345b339c1e8ee68dc3f32a44fecd7f95cd6431928bf291f77f067ae093c68b0bf053e569e092a807e1f008f1a5adb837e3a2fac473f7cf42cc9dc89cbea3350d05fecb98b8e9c5d18d2318c422ece8357aebfd36900a2647f4373d4115aca42cb051ad6d4212480fe0e9f83309a96f8b2b22c168dd0f0f129999e8860769408726fe5d90779e90a99029d0e4d92bb027626052807cfa9fed6473aed9718f75860c2d6d5fc8a433e57e74b50396d031a8c26bd7ff8679a331cd6f1abd14d2e3ae73933d0adeb45e344eeab1894362f6bdebe264be2f38dbed232af2820f75f2a847a791b72f5c2546504dd8f446e21b0e187ac06cf2ffd4718159289747b743823927589908f6a6ca2521a2bd070cbcaf0c920bbd262f99db17bea2cae40290a692241febfcce61369a179a3b8416652a61ba81d2a63ac39f065bae9b174a99cf51de2cfb6df64bbbebe5746469aaa2e8b66ff9bc276357e0dbfa37e39136c9286f6fa91635337f1e38c35116287e780e2957a79489f2bcfdb3a577623a32cbf5732767ff604a5bb8350f30da51915dd755c5750ceaae9be610552e1c098556ed0049f8892e0ae0cdff0b818b7103ed9d13ca0e0cd2ca46c7f7e2d5f292dacbf3a873ab518e4f27b019b1d40b98c9d819bd378bef7c2b795e0f11cc1f34011fb2c501913128a25a4dd9420cbec8de2fd0cb71ed448f68e99e87b0351e751ae180ef3ba88a11d6c72610444d1638e34ea1c967ac5c8aca0ca5fb4e3b9a755c292ce2528699cb11f24ad0cef4450baac0a345d7c5817423c854768913cbffb534e2ce11a8c7a9066b0ac51888bcf87d264a1e0efd9edda34a55c771a43dda6f0d5edd4e5795e4fd6e48d4f3488e57c84f7b5c1b5e2958b6c80cf03e142a2dff7ac434448a65568e6fd6a951b0806e8997d2237884f02a0e04d82fd56b2214030bef2d4854dd132d29c3234bcde7384ad9be6f027d61167892fe6991ffb750c60e5a5fab1f04570a5d7cc57176497932057907c29318d59cd861c2709e71efda4d4485ebca2eaab2764636819b0442554c2931a0907f193794041b9d07dcf7151e011421c8ab029525d81574dde1040d377fc9c063d0ee7bd51541afc95946a7d57f5028a4c6c31ff785008d3520f00c2b3d33834ed9a72012e8457e2feaa66860c0cb13265100c0216710296250522a041c4302f36758bb4e3db1bf336e19a91b6947357007992b96c0b36395a2f398530a89765b0bb0e7bef1eaa810449edb0debaafcaabe04be6b72042fde19358eb2be8e7361119ea8597dd9dbc6a7d7eb6531e2692180d62e5cc0f11fc36864640b16032032838d1cd8bbf7777c0828f8b22199c387e3c87fac1d630b3abf70ef63619e8897f737b6c9d174c1633e26a5e174c14b72b9a58f4832ca9af48ea31b2863afec53727c11a605c4143fc47e4f6a36c1dfd00b1c0f4d5e9745ceb4ee6648913f43a797ef61645bd29e5dd2843c39d777b8212bfc69bc8ef96ef88e0dcabc81ef78703e481ad2f200c7a0b32e263ad03b23e48bd9ed2d8fdc95a4edc36572d07ba37240138aff23753afb4eaddf1db42e68587da4812122fc7328f5c23c1bab78fc4ef6b0d31ba7218b5182d861172e97eee68ba8a2c275b3b78428c281bfd628b87d8f3c0b0060300b0535b94861128e17a5a24e2f82e293c0f59be3e7df98fa4ab0e3b3c8346f96fab85ba391f077d05f1faf462910a8aaa493acbc11aa17cf742e1b9a98dd3094c75afa8cb0c4b5f2c6cc601efb8ca7a374de41831499f1a765b582945a048648e3f1c27b22338ed15e6485d60a3740ae732e92ccb32de7d4c273cbe4b5e66a4a4e8a37eae6ac93c58f1e6360df1f2f2ffffde293ce4a68dd7d5ee268f0078373ec2836a0c454b265e3d19f140dbaee883a58ce9bb0018eceba3a5ed74398f66a1dd9b5aa2fc70bc7f2cfa0a5c6428ac05088078b1f48256e57d56f306c4bd3399f8019a12743f33f8cf7ee20183c498e71ba90139524069a2f1dcbf02fce2e9afc6ffa4a354922f9866337cf2012ada46f864c10a1ad6da3b423e88cf30545ba53857324d0a95c71f180644dafcdb036e78dfe7367530761b1f402aa07547f98a76897a0d5284d22be4e9392aa40d23e720a550a141f6d0f054cacf192298108f4ee618e6c151852b64dc7441248615a8dd857c86c08a6293c65a5ee75e64c47ff0e4ab2aec4b33384a817a7bd879e8212a2cffae34c34419858366a425888c341bc62fed9927bdd54ca834d023b66411b814db8e34db32b75389278b06d9f7bafdd4f50cd79005aa8fa699418c9552ef1438a2f8f160502d41ecd107787617d2e0732e1f6de9eaadb4b08835a7001e8c5465354f1d4b3955463e3b4ee49a19547304fa931e2cb9e447b0f25527741e5916bb82a8a46292aa59645fe183cfab3ae9cf16bf7cc65648b0fda625e933d7041dfcf08d1fa006e0a4c028dc800eaff9ffe3288588432b2a83e9eb7f06f6bcaba27ba5fee9dbe281556194f506edb424653cc0b62ecee5b71a126d2f0e9e4e52096505de0edb2b3799936f026265bad2f362fc09304c96b4ffb41327eb74d58948af564f47879d8876416cce0827442e3f4fdc0e491e40399affe0cc0b38540007ab56515049a2fca0104bd979528840b4bd3750f14d21644ea38b1e14ad293dff6c6bbb7d4e9f76324e9b08088ed586e9e819888482aca8cfa9f37908646add03b64b30148e790f2925deb80ed07708e3ead259a7608e45f4a410358cfb21fb51e961879988c13df2cb49fc213a383038c851098698f0623e7b0c3493459047d6a19d9c5e1cab1f6c7248aa7a1c762bf0d01d809e9bb8f64483f8ff69aba5affecf4a4d686890aaf82da9ae080f9eccc2ea38c2ca4c66da1a332ced239a810a72c11921fe567587c984a7dac95fead76723653616e758bdb10f831ef43eaffbe8d73e572e3d849698009dc9c52c4eabd145aa12d226d0f2858c5ebbde6234bd31f7f454213eca4989a0e16207874f929c104df2e2028c63556b9594f6c198fa464e93b21d3e25ee2f1a9117abb0970f9a7e9556cf0dbc6d93416fa35db84b42e178ff635a5a9164c60432a44838c440a8577e915db75c73fc9fb0a33de60383bc8f551c82eac26e123022f55c266c4b4211a54f415c4750d56f0f621c148ab5d42c840e6d8890d34a6e088d1c5cb95f6e774878028d49ece93dde0c66de03df309130793896ea695b9607f37efcaf1acb8cdaa4ca8db87d6f7ff958a6fb8a242f382af3e6f80b4bf4d388e25850ead40eac5aca0cb24818e280599cd959c19c2c03a2100f157ef53b67e4870d4723544db8a44c1be72ff62fd40abc05394b489a918a7110aa5a5990ab39256f9c3ace4005eee55f14d44064b424198a2b8044b6b19933b2933b042f1e0721266b3642e089b0719a8d0b06d28691ec2ad9f089fa8183c260a52ca0a7111da41e5a4214ce6252275fd9e8879784a4af1d8e2020284b5b4ca58b2d64fb9e49cd9f3e4ed92f0186ce236afb8be73e44e8867cdf6cff80237663d8c490b66f8d52a175339dd82e5470f19a1c59bb680c258c6ac011a127decfa5ab631021edbec1a19fe9e0cbb378dcb429626f6d96c472c95b863e251692033e44deb653a2c5d8cdb6b372c1fb666fdb4f30333b26ee71efced6cc108309457faf75d1258b3eca011d183ab75af6075b1f9654d6cd6dcd360f7fe4061338c4fdff89c02d5ab28807adecc6c0d449b6b4f13366755720f749e49bd110246e87a87957136ed8a4b83b2e805f8b413e8d1fa5b568e32f11a2fbf75ed31bfe13c6c1cd51fc19069f983eae90b8c06daf0984bec07f7b54438b943053856eb8b2d6891e82732246d8f3016aeea91c62fb1168cbb9dde0881f5dc2b262286f1ed16302704e99e80f240788f00af37d64824471d909f718a373fb09869017adca4433371ce592751be930693f1663a51e8147fc7d8727eb4be88922dd01e4879ee198d144e6e36f5c85e64f46e6a8d344c7d588690ff363981de1c9f4b3c414194455e3795338968488c7b05441bd11e2ad9c2324c939e231fec486e5361a9560f07d6b4b9de7320e877f254da63837e644431fba29696a5a42320d59827bdaf4125a4cbda7c91c6c8b05860172972ce4cfe88baeac2a739ad7f66a243263163fd770391ac509b299252ffd66c140afbd9bf88b66413db100c2200485c5acf040e992240df1355c45323b0dbecc11bcf96d65a1d8e640d1c8b4e8e0e19b4be890858e903e69c72e758e2b33301b3c222262f908bcbacc068007804be19cf4c9c47df203385e66e50419c063703de36432bc6c463ce50e6da89018021841ef2054d8c0fca087fb36917513a1b46e3a1ac553dd4c692ca1e0cec262d3cd62c5395fa1efa182a43e68e1aa870d2170670f7186692202eef10273e91bf8ed16e10d8c44b9c80af4f25dcfa27487ea644c505c8d293a27f4a20f907448e7898e46fa3caedf7f6e08e51fa030e432d6cb5c63eb306c1d90205b7fd535bf57ed6a8a53a9a2d85bccd8a9214d16ad84331256c0a88391ccc4344582427e3372b5d5389c42c03c99eefe428af148da9a1228ca0fe62e6a25a98e79c2df01ce7a6bca32037d5ca793f2fe0b3c1999d8e84f6b6e19443c0a20b1685c782aa3113ee0c7506e48af631bb4b7fa92f829df665572213a8b9f91838c09d6bbcb57911a5b12cbdef23ea492bfb96b6dcd275981c805631104318d009762b71c4997c62654615f62133786936b21a39360703ca653be744220677fc7847e6f25fd77f55f55df13bd553ef3096fa224b1ea3bfc39d1d1f965269440a44b72c519475de27961234517d332a770e7d18ba7f4fa0eb59c4b39cccb9bf62dcc9843091ce616065cd003913f24e9cb6e81c9b25b22a05efc3ad04ba0a3ac9b49a91b0edc21596c50e2217da9f754cc532c2d63f1d832c6c9653c5210189ea5f665f04f53ffe236b339434e387cd638dc00f08aec9d483fc3eb0acfb80f39ea1e4b5985714c604e8f425a743976580a24ff6aea54c8ab59bb041bfd110ed882f93e7746676c148c506c1ac5c74d323e49468d3dbc02cd100f022917234b47ed7067971b90f70b87cc0bdf08e98a67dcc7f9fe0062e3471a9364a446d4fd5ae1ef00423217ae4ae21376ba6c3b6bfd717be31479811e45e20ad6fb7d90f3ae600547a9edbde03c606f9ba1c195b6e6e227f849c2104ef07ab131143ae97e3dee20260cce3101687ec449aa96bc8966552699fd640c3a1407978f1e156239c4491fc9b4a17da705fa1b5fbe1563ba14b8237e38227d3df0f04341e65e001be00f6dcd0295501935f90349b65a0a1b4b3d7669d8b7ed50ed058d94e30d14648b95f0b3b2fe97ffcb4e15fa661977de1d13cfb7b02a727b88090c31647f8642d02667423f55d87dcabc43b78daa0040650a10b181e6d0dddd4988a647a18ffff44f6e1bc105fc6c0ac442c1c4579910f7d037897264999a711f13e219c97f68120a4afab853e9f227ef3ac8a2cf4ba21efe6cc45c23a8fc3886a0df6af7bbb678190923ad4081f964dbc747a2ca74654bc72fa678f1f70a6b7209e1fcb9264b0351ec6d230ab6651366f2ff901fa43f3788adc2e4287f0aa2ec7c1b0037eaa0eed77810c39761a7bcd63a000eb87aaa0f5c1596cadc9843e4b9cacb5adbe45ee78c7119bb23d822f25e70cb37f571620cbe937e7b6cecde1748af150eb0929fd2cae5b5715d5a4c9326c5f3ab18060feed05b17913bafb2f0e46c59831eb809a3a14d6e8d2b801114e76c81c598ad242ebfe785fc354f0ddcafa3516a409e24d3fc281bb9272a92b69caee9acbab6aa503cf83b5d33dd6d37ec0a56e18fe315ee6db774a505e57793b1968f765088774d537744405e40731850f59acafc0461dbc4d83582b77d267eddf685826ee8c6c4530a5a98f5d1709d1123f7283c0cf7341c414e768675c9f526098714d20731be0fde8570a9e4715adcd839dccd8083e9525291b228a4bc8d975306675120a99b9aba49c455db64c290c56d7bcca377138e238297d9bb5196257a43d8086659c9f55b56f1a2c5a1fe359c712368ef86229ed05bab7e177ef2b56084a38471d8bb71a041a661191b77c842dd4a48ed530263ce39337d6e2e9bd0419cfd8089a545c587b494b960490a89379751d1c93d5769053afb4a4e2bc34651e7e8d33e5c4151cf26400faca01cb844a04b53ce360d955c470837964f7a5d56d5d32b20f8125354418d3c2971c957c18b04164aab802adbbb586393a2348fb4d24a8cb6954ebd3152651c242d543cf137de27fbfb135dc3af77156a5b4d0c40e0e0b174a2e877bfd186bd1a54ef92e2582ffe34297add9b07abb2c50527290298279ac5d4291ef9865a1a8d4ffb063cdc173f0b0e78ac0b30e2fd09abd513f731ad6756c04b018d31aabcff78bca398accc2193848637c23f0d9faa17e37fd805c58df426c5001e82a8aa528c7ee45ba6fd78eb92bb79b770f4ce58941f2a2e4836a6a614497fd263836a35eead5e8f647d903fb56656a3e0b0cbb0a11526cd29cf7dcafdc22f1f1f5e4f424f379a39428d5338475ab6e348ffae003f553e8b763f0d9b1791874a11b142e3b878845b0cbffdd60865aa7efd3f2d393f3503240c352f00e837fba818483778fb5094076e8fd955ec0abcb2a48ae737a63ca388b5c60088e2ede47672646d221c54786e4e815e5ab8c9a736b6793782810101b09e39db2fb2c9b8fbe4dae2a66b9650dac5fa41de5903cf20ab9050e6021d5903dd7b26a0cad27e9486586dc85697d0ea40be4846445770e2e71d53085b223927c97b8fa96fca49e6fc403e30a206abfadbaaf1248926f4e5da0fac784acb8840b8f6ef42f9fd480669cf737df5a2538ac4152bfd8d08f67ec78d7048f4562b53de8ca72e9a922003c82f053d8f3c164cfbab85cb80f095a5e01f8b8d38b2e7bd0823bd18de98c68c1bef3841aa6378fdc6a6e0cdeddc8953ecddcd8d14fcbd36172c6757962e784b586927f3aadaf71c0e0c627f676f0d7c7e3ed41cc4c378247a504eb508bd994966b1b90e8b32244c972f2cc9eb0c59265735b0a53ab2f2609bb1fa4ac826a584d28d878be40e6bbb987915e54ca1156bc2af270c9137dc1d6fddd0b9958e55a63b7b6800e981844095c9d973e3c1e29d8a391a20940e44b853b5aae3f8daf77c59c347e513569b62b2638949df3fc4350925f57370c92fa923856484285b5c775303f8469c96da30cab3d149cda544b889948702570cbfb1325b39b90d990a636242e79b88040188f09d70fecb0b8346ac7e24054ceda8d22b27bb369433b6a4c2db59c7b93eab4a2644ef50d991156aab3cfcd3359e95a57c4a7edd1550c5156e6ec1e8663e25b1147681ccacc2d70b4f1377e1b17169dd4efba57a6c14ac2971004b4ecec744c5bb200cb71452ad48d232e2fbb04af18888e81784e15698f81b66f823fad5c886ba9869a8a987656fd62214507778f4b7ca92134543cf8df8d9b15bc29fe89d020c8210fad4a24f5b6ffb75189674c5b71d96d11e7bafecc18ac40bc5586605accdfc1e965a70df4ea8aa1b9d175c70aadd411c3c2460efbadc3f11a1ec43011f762a4f761bf4b3aa300ce7bf1ac05c8cb064d5b2402cb79184de25622f348380c951016a71ebabe980d4666237498b7328281c6b4c0d60a02a22337743a449a9cafe6376e6f989d3ae59555577b5862da86bb4e63a102b9a6695bb16f69a1bf20004d977a480c1676ce6b70f9fd56df9723116da1fc9080f03c70dce0fd7627523587daaf80f0a31feefd0019cf3534ac28a8393f17216cc36f4854600605197bb5e7a859bd25f7a6e2696341be140247980464463500380fbed8ab87f9253a76a2753e3e6f6dd7194bd4c01dcb32c8d41487f5fa5becf9626092d89edcc97b793e71d93e824ac579eb19688c25a55d10673440e1807afff5fc512c7a84ad8a99603b05ededb39bfa72450e08682d40212452a4b319505b20b78b59f59962b80cab268b11a8cae4b09dfdf3c1a6322fa5f0ebda02d595747e9d0972604c0275b6222f0bd48d8963cb22b0aae78a15f3c534c7934043f26187a3eeccbc56667222d2d0e36d82e2100ec0791c4345acb71862e705a97ad2a55155b8ea1b6ca5bb303804626350d33463f24b58a884b1fbd31bcc26d2bfe0bebe1ea6c0256d8d2d9ab71682741f971f1893cc2631fbcc85b965671f1c99971388a2e3b0a175434a905bf27932fdbdcfe9635feac7a14434a65097b37f88337e0a2f190e3b5c9d2aaa817964f206b8192992ad743e7774264d65e630c6227010d4741606f52d155bea43761905ba9ded1cd6c6d8090a26a235aae374b0d3877749be0e1e44b96ff59b6a5d769894612c29aad657311ecd7f8678d9b584016023fb48df033421e99d44271d2ac5825e26dfb0b32c35c0a62126d4ad623f0ff80995d1238df8e98d7f0287dfbd8c8f76c9a9fa81b1b235280f9590ec10538491d5b1cee5f412cf6e2a70805630b1ab577b8242b4b38afdbd68794eac6f901281adbddf1575a85e727a6e30fe9c59896c5ef27774e816ae90d2e0de7442fd8f280295d0be81c58ba5394bd2e6792615ba0935e16aa5d036e3d8dca1f96f4f71429369ef71217498769bcfd668c0a57f09685545d70e865641ee523c9259f4383264aef76806de11c26c244a9f292e6da52b003124c588811ebbd659f175a23a11cfdaf20dce60ebfcc86b7dd95a17dd6052ee0770a381280389d1738225e0a7c8d728dbcca11a70507731d245a04cce5fe446754ba556a388b69d0c2e55832b02e7aaedfcd86bd2336d9057a5bece4a3b4011546481599a8321f11324474ebed2a02ead4ee9341dd33a458184a30eb5c58144c9a14bb6c3672422a494fcd349d9a6ce5074ab30d24b6fb681a902bc3e3d81f733915ca8349f1c10c91e974d3e25158cebd492f41515c0fd5b480d54de37a4a54ddb0e49b1de7ee558a0f3215e52c8f6270d19b50692ffced55d1f2249c0f8ed240dff8a1dc06993123b8b430ab5898a40b7313c42c9f0d1ba55ffa8d7cb235eddd6a3519701b85a013ce53ea14e3171eb5e55d0b14fe6ca35ec219d226807fc74ff918138af7d59d2c9e453ec1a572b178751aef672ed927fd72ad7569e613be80e329c7cc11525edfdb1249d23921bfb65d5d0d6e201d02ddc1d70004f443457145370e1bec50f2a5147490f4bd1044c8accb4332b894aee0ab83b86d44c5fa222e6a248a835451db372e06c349573ad84d3434f29faf5d562337d941654600a1dcd385a562cd1074d5c6df1a73f19cb3180647e5ba36bb12a42a59ae52fda006341f241c4cca7fa33d708b9f749648dda0c0393e0f4413f12f345ac675821bda5ca8836a3c33a928ee16317980e9c12d361235d2780d8a0f45ebe84cd3aa152df08c17df7bc3cafe5104f78a5dce5c7e6157782a860cb11f0fb7bb5d91c8f2b75e26f23e045f042f93016cefbc162f485a041b3c366004961c00dec2ca2f01bccfdc882f14ca3abe6acde8a120fd15bb03ffb8981718c83dbfbf013e7e04dc82a7da88f7889b07e4efdd455b018e2745549383a436b13f2e6cbf9f4341ce617293c134679dc0b022900686545c033fd1dc1375f12c47a950b2a380b41c01147250595638ca176df3a273044b21a6beec0f82db496db8064e412f6fb6563dabddaacadbaed5526ab52ec33cfd8c499602ea48b8fa6d810df66e15d51a7b49cd2a942ebac7de38220deade67661837b40f02f9981bdfb6bddca08dc92af5d334784e65a096041d5327a8f7ccc8b0ce34700b7de249edb5cef31043d1f4e8816f5b46216f390cbea112b02e53b03b42e96bc9820bc936e651998371c3f51f768278d4e682ab613d952f9393d23d7ceb8ef6e59458133e6832acd35edec07868a1122f4a47a26ef64d0ea31aeee324759054c1387aa2d571fa5286ad0999252540d9b37a82206b7915a6d063a97857b4657e3f99d18fa4bf00f7b3c3edc2d1d891a111c20b37fb89a744eeb4bc8560deffeadf7536e021fedc46053e7a3c41eea97b1335d338047dab40fa1a15073a8e8750e32105c914d11a93c2762848753edccc7007a90470a20f81761d7b2d659b8f18e75c9912ae33b1134a640f5ad58c601a78f842696e051b0469096f6e547027cca1333b59f87bc40c3912a332be380d541533cc8e4a955f21fd2e431a2488eb7fb70460d8fcd369f150f3824f342ae15533508156af3bbca416e6ccba0616734f8b628e7a585e8299f730a891f6d6762fd2e7215043408c3674adf020c1a5d2ccb150cf8a5a9bcbfc584e5642ae2a8d808466f18972b014646c35eaacca55820c18f1861d2fc1fcca9883af177a3042d4343c471b4d1d8451e4714ee6517832b1e588c180c13b283f4d5136399f924b8dc574149ea824ac8f785d626249e453af14e00d602450ea35cbbd732f5d7742e46636fb4f33488b5b8f4b92c20da15fa5831a60daeeb8038cc71b9bbc4a60f43dc91f3cfc18267671fbff8a27b202af77aabe2ed2c8e529c93b4636ab307d3eb9980652853e939ac7d3c6de1f877685491d2bc1e6945d3fc498b913b77032f7b3ede814276b6ac26849eeab38d945c8ec75e9db7dfc278d1e70c8b1b9d7bd1d1a01486c31dda2d77692c98bb5cbf4a77b804d7c2a60e34ecebde51efffe0cb94445499f8cdb2cb9ebc8ea838564546d360149e71843809e044999fd15e46ab31cd4031ba4dbad65e8a66954c78d3a5c4a5d40b9d2d16cb1e58c19781f02ecfb84816e81740063072174b6c6f9c73de717d9c1ab1918fb5cf400beeaf880daf4cb4755ac61cd7a038da83a180006b64ce66eb644a2def218eb78fb570a85029181bb68b7295c0b90e43a91ed32173639ac59ed578b271e74ced7f861ee6e659316710e403f3cdaf0482d71dd9cb0088c472a53777127f97aac9b320996c4208f75047ec8141cc6814ade74b912e687938dee5bd3a8eaefe06a35f5bf20cbda69f0abe7a0a2c776b2e8b001ee03ffc6a66129592edb8ec336b628d48182f3821a3afd5fb2a57e755aeab4f2d497ac2218df0cf3f2139391a230b9bd040745776cb9f105dd4204321444e7bc77835dd9d2e06ce914b6ca0fa3b2a902ffbdfc460c931711a990308434b419fc15a33552f1d3fec435d67a7df232b77527117f05dfef2ba3a1642b53c208dfcd305da7d9ef02e531054e8711ff27d81274ac62492f201de2155ac8428cc367e59c8e94e7705638ad1c9407cb690fced22eb71cc1bdd8c6490ab1a2c2ff20f605f5fce0dfb4f18feb1baa79faa83d01936b7766b72211993d1c18fe96b071c05fd0e3b894a683807f43e458c6c4aa41e68d2ee0bdc9f850c2bba9daf7636e3bc6de39101554f877096f6b990e0bfc193b9d06463874459a102f95a4bb3496d34fb9f48eace7f8e62bbad020e33213a1455e0a1ebfe549302f56cd58a553129ab4e8d364e4b397bed6dac02a6865dd077a9fac78fe624bdcfc53ccbccc232b4755ae2d131a415ed7999c25ba099e1ddbcaad3d9b9ec41cea1b5881cc43180847cd5ab91057adbbad8d6344eb95f82a84e67f225b19d2778829c0d979868c7572263600b7bd3bd3eec1609f6304827b3f90273469a0e54524a611301fb61d58fa004b945b5fd34a5d5dbbf57d31eff02ded4ad777e0ccb454a1f6a573e3d779def874f0adb72555b7de6d4db7b3b439a6cfceaa173de5cdea5b5d6ce949450fac2782e0c521031abc708235aa5eff4b96bd1df905db905a5c11b189428ade5af14e0c778187521990f7ba449126e5fc528bb32c83eb0a187d01a27f88df470345b999be8037f912a8c2ab6c9a6c6054f4b799f4b5647286fed1b0d328aaa93cb8f2dbe3e80b502d388b45a96b0f2c99d577cc22cbc05e81625ac878dbbcf539e5fa6eee7f0632eeb0c3e74f90648bd7fd446441335588451735f49ab9529ee918d9bc4c4731340a93f37015ca922dab548b3e151d1c6f12f68ca14cdfb33d4dc4b06658f1cd21e0ee8297442036c2aa80117857a2ff1e35fe97b8791449ecab476365219fb71a23f059b89c5d72eda683b593446d07e464cc6fcbb678065a1326f40316c5eb55ab92bfd9cf3ca97418dd5916968925a1b42f2d2bda9257f7c82654536cee7e2490b762e1928da04e62fe42be2facc768164c8ab4b8aba48d7181e5f57baa0a24bdc06762e1fbd791d28575e8cb361c972ef11c09e956282ff029444059acce8002755bb0575dcfb3ed1c0d1619a89dc4379947f73c9a0fab1fb4d4c32b7f9497f3612ba079a9375d2418c0bf9e5497ee5dd90e2c09581ec7ebf01cf5cd18d31d52b276b7fcf8e33067c6ae46d4b093c711bd90e74e1b29c5db3c9cbb57773b479975e0ed4cbca98b316f2496780510fbf41049ae1488d95fe2455a939978777d74f88c118d5935da27617963540d6755415dba98a0033989211f992b3817a213954437edd310742aafbfa124cbfa75a74ddfee34c4d67a24c0c62abfe7b44009ab59f875d4354a5c1034f24b55ff8d4ed4f033c050e07e7bc55f509fb6e587dc1a0de08c46e382db87a10b446e29cf0dcd32b7f74c995777b26f6cbd4f415bbc890ec7e4482ccf5863d3a152f0182cf4074099b0241cd4545b288197d0b57412bcf19aa99f9fe47216167e1541076ef14c649b854090a6931bf6e8a4aa94566bc7d1b642e91604b06546ac98ab4069a0c0df1c3b2554471391db1a02f4cf12211262bb7d136888d2eb3a25ced0ff8626947e7c45579a7a86e3a8f56e0f799ee6bf8000f941683f9a7a779cd2c0ea032927ae50a4988216021fb4db9b5f1366ccb89f2d5e365830a57b0eef18f879d9b174260388a2079475e6c7cc3a836ccbb77a2891c3e829028109d09e20bb43c4d2db6386825e3f08f640c2c718de082f5b6cf75b2096255a8a9f1390e2436152dbc5b3b2dfb4e7c614daf88f79f9a2fb11e459c35e640e6dbfb66b6139d5f520fd328c59a52d8a47003391cb094be7cae0575bd0969d92a0ee50dde112414f649ffa03e1e351311ebc7792a71bb41ec4de62e9f2d01544c0b3ceb56007a3cba33d8a241d24775d98abee609df3168505f3d2de4379041be57577a0060482fe085d52f26aca19798583a15b1f055467d104acceebc43113280ebb179e78240aa96f55bec297789b152b95fad7cf26c629fc75db1e9f348c9505cb8b7ff4139da6c2909e3f4fbe77ef67311bbbe25be2f464d008fa4d68fe4f82a4d14595cbfdfbf90f2caa3bb8e0f02e9916adb9f3cf62f31fb173950af388d99be433541b4573a5c353dfd8ecbfac33ba4743f2cf908133ebc0da6f6ad1188a08ee663d603428c758eff877eee00bf49e95b786ad0f505ee8f637fed339a7a6fedb1f1102feae94149b52a52c60c6c97e87eadb292771af5a0ee7bff75b78336184d9a47426a8946d2762247f7164f48e5d5172c8f9cd0254f87d60291b2e1affcbe6bf3975c9b248d4b2bda7b4f9a3220554975cbcf435197529648f09cb898d2f90484013d1de26164429d25944ab87069ee6036d87bca8419454c9305cb101e3e281d70856723afb6fab76ba2c68fb1decf2cdafdae1d99dbcf17624d27c40f3135f7201d5d06e070562b039608efbb2c5a8a7d66d761e9484900659909971981135d38e90ef66e604bd6ca3683246ba683ae84934b9e3e425c00f65eb1b4e742d3a22df4e83d582389e16f48728c02088563053124fc865073ea2697153a4c035c821684e95b391fe6282848e6161068c0bd9b542aeb4306fc465a09a9634b7927afe578554938cf1f6fa6772f7fc94d6b76cb466a2a8960d10e211c865fb5c72a4a9bd6c88ec7bb7198be41f526c6c619f7a82314187716c46508b3125c88721eccb4e7e8621fff47c4811dd30a4f4c49950d2148d88bdd2cd1ca6106f1c2a01634f1188b0782e57648f5a38930cd61166f9bf34f090d0286fcf2a26894ba2727d966526ff2061a39ea21c4f6bffe0966b63405812116e45147d20206e9e5c2b519c1a33224e0cc7e524f6d4449408e205c9268a67fc06c53a37a99db2c4020b02edba48fcfa45b9e172740a49fc861a1f27c5e71f74c4d9d002d61496aee8699e5c39ed5f8cdd7a66f19c6a8dcab791cf60a22eb7b1a07e513654c9873297f3f5cecc0ec4917601551a8405797758807a9c3d042fe4f9c109032c88c1e887a8465e945d11e7061a36f9d72979100b30790c9012ba87c546a156be880862e02d532b167cc0f9b369de0ca7e1588cd96fa0e7e77c9ae0bf112fcf5cb57fa567d6d19837e86f7a14305c767d118c3ec0501e3f9821f1bd116fc16eb954ccaefda3d482c2854a7201c5cc936799bf28623a3e2e1d66ceb298e5f06d582ebc919552ac29623a6e547140bee846e9d2444dd648f09084f1728bfaa116df31ecff7264ed3c8ea0fbc2301ef4a476ae536b8b2d4ade14f499b48c3f8dfb9e30ac40cdf0072f19d048ab31d295a259822bc58bae169d664eab8a98c103bee22412340c47fd8bb2b939cd3209be00fc1a48700daad74bc1fbeb0962b493ddb8e592e5a42b2c44443fffeabbaa283125dd82b947e8be300943678660138695f23a4efc86a2c35fc1e5f1acc0e87a0caf098feafa9032eb186eef7f4025f28f046b562090f7f67d9a98fdc170ace32c2e519acb18039d2172a2c9ffd5312888c5133d200c30d3e75f24119b2f465706bb161c3ed0757465d81f116744b6c62ec6be9ab0500b39ae695312e4fcc8d20402e55c353ce369289470e11d9e2c8812e279540a55dedc2fac23ddbc2ace4c9731aa31a695aded3e45c21fbdc874f5790f1d690ba338a0c44770f846a10b85e23bc8a093e06ee8a77cd2a3590675ee4c2468526311db0aac669ec561c0b90febe9f80b837efc97bb82166a8357ecef032531b55d0568d0959dbbbda41a6e8e63e0ecc1ff71fc2630c7f56ad46abf25899900a5e84b2c3b5b76c1cbf9b82c20a3230ae8791075d78a930f1bc803a60850dbdcfc8a14447ce42654156dabac40cbe00aa1d88433a84203438d267b2086be7ec49c42640254f2245f0ca97a3586f4ca354c7a92f0beef84bab9c4c51fe0585898c43ccb232861be8a29fbf647191dcc8afaadaaa50fc149b1693f344bd97bab83f032456047b06ef47c63e50402d5c1436d9c47f4aa3e6d288765b229b09d5a8d0fc4d50490bd158fd820b3d477ff3e3a8ed7aba3dbee45020acbd8397ca3325e69396fa71cf3510228b938a67d0a80bafc9d3a50fda729dada14c2d36b48dc68f2fc83ba46b693202c6ef963a648aa4f5ff9fffc348dacf646f272519b48ce5bbdd84b09e6186c382a8049ec8dd3f9ce92977672caa725751043951df83ae0c34845207043fae6ee5202516711f9ec3807c86594c5f6e0200f046717895f1e4a1235a4a516bbb12a4ab90916c2fd8c050314fe4c206897d4c11c7e418bedfedc5bf93e1e69837db94630c1a29912cb0a62010242239f8b7659d3911a3ae789d0ec30d10843f7cd435e930231c318f038f7800c088198f2c41d83c70d3852d2c7806d73cf719a83c622c370d4c64993cbffa6f43a1efb4fb4c399b94e7483f7380957b01bb31a9c3a438b8a699cd20c6b9c4b6d6bd2a106f1371107f09cb4bfc4c3fa90630b04e608ee42e5f485e3721ebd1d6a10373194d5720423b53d3689f055f3cc3dc59f2a7d4c2db802eeee0536c6e31d74c3158e5a1a56c6f9b4f82d76179b5e26adb36ae22b26804876d344a6f618dd946744feaf17be8c19113074a4f4c25370d4a885c7f78bde1a8cd38e051e70625a5001fc28f9712eec88116a5cd104f54fb977d24b59f8cec2714932da06f0227a1e85761dd328fadfb19a9059249fdf8e9a60987854c1e358f844c0739208c4c920bd7987ed21927e189239ecb9a2053369ae891e17b94b5a35e5107f6b34d4fc6b5d8159736e2db5880b78328427c122d40c2fb1e620635735b1541140486033c8336616c52690a49226429b312f2fa8a8fb2a801d20e90aad445d72527f18f65bbc256db5d1bb557c115ee4d086023fa655b4accf44db64f663e9749ef446479b2043fb79814eb05c76de607ec056f64d370c9c4205ccda55cf9f937a85b93567692a77b062a1e8417c0fcad5b3e2f1d040a68f80e16c5d96dab80fb3e848e09f373eee4a04bdd8c2cd4ab35a56c9c50fd7dbc601e39d856dc0822d9318e6ee6a2e27f2a2107d7a49386ded48d4f4e5d0d465200090a1d0e4579a8b8cc2ad6d00fe5e4e285c5801964d4ff4272be55bcc439f3ca006f7dcf2b37e7fa6cfe64852c490f5548645ea70bcc887fd27c324a32fff7e9a50b7d567a5edfa209f71653c00215d0180a4edd1f3476e1a702074663cbed097d362e39722933a043c1d7c23140608fb575447e4cf6b672b5e4f94178c1eb502261dfcdc96bbd7e28991c73fddad5a2b464e9beecd4f9b5280c3b77ccd6a856ba02ea054b934e1140228d3409d4a10ee2651b5eaa3b2b19880ad3370de913bb600d3bb8ff83dc13cb5d83ffea2bb006358e27c58b58c19cdea70b4ac69d5b6728dd918156002792e0e6b2e0f19bd7768c5d7cca88cde84697ee591f62513251dc46df7841cf1f47e3cd7ac243697bebd1dac2f4638ef16fd63ce628422a520f37c2e77b347e1ee035a9deea0d5470dd4401acb4cb5fc5b84e802c2c07db4bd066bf008d7b3db89f16c948e736826d49e8cbb97a704852084d78a2b1595b2063958bdc6dd1e4a39f2f9537ec2d6b12b3a0926c044bb3a9e7cd443e3cf7c23605fbc807333ee384d6613f042d0cda13c1dc869f951f20ce1564bea30893410b31fda9ee8d2b7034a892b04e53b30873dcde64928863b734f033aa5fb9450e1de08dd880dd8916949484046a458c0bb79fa9ec765d8027a46d7c2c4af98c5477be04ee6acc7b2780444d9974e978b8ca4ed7e730d99eaebc0a17d82569a69763aa58537ca3f60da3674767a2e3835d3a0e3e1cac7d92b74ede07267f692fcf72559de98ac45f6a2929e9bfdf9cc0dc6631c55da7acd4e6a4f152186701efe97790609441de7dbbff98dc45e222a884c0c5467b40ef70931ed21035a0d2fbefd242020e8da8b95301860df4aee6aedefb75615cf09a2cbff4d7bef986095d20909b34f22942f99ebd2b9fd008acfe7b2eb3ca05f00e221a0ebf9a53c73b10179e6463b8ea1b35bf8aec45c80d4de1b71cd13813083e56576afb69147904f900a8824005b237e00a659f03162595e0da1b3bf02444b86c999e0f6406dcb04cb251d23afe94fded98e201603e3d6fcfae97ae519b652f47b464182645a99a6f65563b092ac11cd609502a796681d19cb9a664a39351324a80081dee0fb90f72e64a39d962f20edc70e7cd237bf7b772018fe99922499d83f3ac0f0588c1bbe3379035c89741a4301a04aab16c1579fb59597b3e07882e21f2b6dd05bc344ea22e1168143bd33360d585cfd3107aa64f7827f8a83c68d221d163dbc3fc60b1b407906466b272eac31c3411f1818c09f3bd60c3c41840759a4e006bfb3694c798d59f4736ce089ad31f21ad012cb9e15e8af149da16926edb15682fd9a1ed2386fa4a795f00bef1b7761d89974e24b55eb0a20077d661ff7df709ebfd212e2b1866b4993c8f1f172dac034a8237bbf5a0975d41d39a6e2c2db6bed3138dc629b4b164ad4bedeb087b22f4c77418fd3afed17bd6605b7e36df06017a45866f2dbe3611907b5b4a8343df80ce5443aeb10e147af01adcc444f4bad37638115fc4460de50d569a927f73ed5d97edce606fcb594b718d8f234a5a9a2b6fd07df2be3ae2f628a693209182f18ea7ab009f8ac3f5a3fcc3c1980e8d2b5c364971c78678eeb7b0e22289a55aea55c9da59e289d6a85514d7277affc64367f36fed1c6826d0d88a30b816a2c718bbb932f1e40330482872886a84d7b78189851156c3c01db6f5cf395d6878cc2dea0831119ede8b9741496d1877aabd7b38020dac493e541531688d435ad8db9cba16df5cc7f8382a9e2f30f7058f22938ab2238a7a58eb1706f948e90921d42802c113a37a322ec756080f762764db1b93a6982e98057cccd73aa2f3b53a6a16b14fca695201cc4fccadb4bc1f13d418a7e773e960880b840a4a8806a19598095fb15bd93df6cf61a0afc6fd985e3725fce7e78f3e9a144e0808fc6c87b64add1000215ae66cac3e368f116428127c12ad0c7904b6bb434c14bcab86fe1dbf54920df0afb4cc9650568442e94d7a2681d4beff2f894d8500f7df92325a52971d1665b430249889bc775b1d7f1b2764267a3d29e1430b8e34337916abc0a5c6f9ed737f8d0304958584230ca879e2c7fa1e585699d63071c40784b100ddb7a81e0bde65e100dcf9ce20e17144c3ff7e6193b8ba13534f0d7147d84172a035becd28fcf42cdcf64022b9911da39dfdfab9cf4add9f97b36eb005ae37684c0522a50d87d494df90fab838dfaca6e072a523aeda7824fe154b31fd8292d8983c9ee6ce22e4bec7100632b4282f953a04acafaa7ab38126cee2165998e729540b1fd370c85f560770a830ef21cf956bde71c2c6f069cda8d5f9b10dd0a2d3b5cc340c9918476e2e01808860cd75b64aaf394bbbc891d6ca4411df40d2a31d70031dc0a6838fe28eb4314c6f05e7956ea7b91a943efb1ced417fd426fb754aa9fb2bf52e030065c9098632116965aeeb438222ed6ea0fae7fab7ed07f709f50166b0ad5131288ec4e09f4cfccfeb26de88964ec39cb2a13bfe78d2067f79600e10ec492bf534384be7c69f4c99a2594be024c175e189e25cdca68083909bfb7569f1d1f37429266b6de64c4eefdabe16696a99df1b349c4a1aa9254d8e8c1d8792b01c0ae0bd815740620eb6576db3978bfb79a5c83510b413efdb60ee87e55b7545e66df8599a50e65709c231304f669d94fc3345dc228209fff4d10703fd366ceb325f0706ddf5d3627dd389c608f0d816296ac37458bfc63098d61fbec10056599c0f36405212b3d6dbc6543847ccb25cd26d10b9ad9c3e5aa3206b57ab1a9884acdae6b292af970bc3fd9f072e19d8b29ed299165e02eb58c8462d0025a4b37bf26f485577936acfa5ff6195b09efb6c13d8d1107b2c0ca46aec30dd8bd854f14f19d3ee95f464c42a12ac996453656b3b8cac1bf96b5e2833378e73f275a909750ffdb9d4de5d5d974c0f34578f572b14ec80bc4953185c3111c78b8974b9befdbc486764da45438581eed3d62d454071c016bcc4892e10c63469b4a4aec9faed76157dee61f7ea822e90166539c5a13ad2ba944b1be91aa35849316886ca3561363ac40aeaa85092f57c130ed9da4ecd32d22a3317da3d9e37c9f9e96e1ee0b3bbbda61350cca4116f8beac0742263e106fd905313d00a65d64eabfbb8680209540543e6bbc3529f8f0ff36585216924a67e13d6110185a1c19be5898832daa708e4236455e224181159daef9f46fd755ce09f9a10736e12620373a403999d3f21e1c459868a2317a3c3d79499c4260d9759076b80989716032cf2cd97d2ba6f14f14e52c89a528d617338c475cfd2c32150c16d55bf475980e29596862cdf27823c5bc253962e9f4f269024081d9b73ebd252f1ff49423ed2e66f2042171863885ad44e420ee2bff3463d846981e235f95ae2289a94702bcce38864aea98a3d2116e0e9dc67dfaf27a4d28fa62f29a4a69a802ab6714561c54b97b60eec25d95c96b728e0c64ec2af6a86a6a57b01b6f07bfc405cd5c9be7b6ae041de2572a49c17b1d8de470cd2ed554dd9d17bc485154b406b72b03805eb0051e4704f4e0514dd98d8e1a2b4f988e7cecb3f2a8fc020c33f5581d80c619a14e564a8f56c983bf7a69648bdaf5a8176e3b0bbe016568874a219c6a130bb5b16a44f3798153e5310d263b610c8cd02900a2cfd6173984a89e21ea0a14e81541311f1dd924fc8af3f490ca19b1b489ededf64a708bdce637c4d7610845aac1675a21d71df2332209441d897622cc444cc0e3b1179ada519c62e671db3d4655882baa50d130e099004c899c7bde029c2210266e0622328186a15241312f07266a65306437aef1ab2d2874935cc985347cd28d29ce9e4a2ee1caaa03ef87f82de235b905bfd879de45a7bff5999f0086127c0c148276b48db5137e7f33afaea5333310f5903f793ccbd8dc07c0e77970ae3cf337d974931fc62c8fff0d657397954ea72992f3ad38c02dc8689c36b6f58bb6544364209faf30f47c8e63e35f42c6f3084c76beca9463e7b5c5779ca33ebec6603ba6e3fa86727d91b09a82f6176f9e40a819502ff7be374d510c34f197970f9792c950149a17659186ee45cd98bd0231d478c0dfa542a516f006ec7a64fd785343617fcd17e9d481b5f3c9ed6f9103ee2a2cfeb0783ee71278d73a980e1b8be0c91d9889c5e5d7c726bdf1bb3400f40fa028c6fbbc08f14ec7e74eb2656aedcaada5970969fe5463e8cc8ee4cdafb4ca7ec0d80dce360f1bbb22c87f23db1e5978ca19d1b5ba4d1605b302a80f1d7508ab63945b61412150e2c56ffdc17d513943fee5ec8c7ed5df0d10ef48cf442104b083548ac11ea0a81b35fa5ba0451e354712096ad84d74b69c9aec4afa4650111e2bb35b45790e7d9e0d1b35173c192e661aa99f16210ba437e7489edbed87ef00d569e162f04938cc745610382d365423d4987699c7bc98df28d408ba35025821f911b18dc3ea43c38ee559c0c625cdfa24a626c2b83a5bf6bc1fac0c04f226622c9798ffb1e2dbfada6fa572e33ab19810c448b2323e4453ef6307cb052419525bbcee981c202fdd73052bc3c8c1b684ce3e94cf1d434cb929966010cb00566215353143bd2432de999138c62a2dd91e826431c2a74b3d3d8734163951ac365d15333a13c5dbb6972d1bfa4a7d91090e79074e360caca6578d20c1540038e2301305951815009091556f16ef6b1bd9c429b7af3b2e2fb8e78c0bb435ab7da1f4de6e969116ef59885935dd978c5d9e7d5bf8ae19209b62a15bd3d8562fb5e0da1858cb7d78b89c4b7589bfee12d8d90d43acb66a8195ef810a8dfb058023ef530fa5062728ec1e451300d1e1ee89b7b6ce1d0ee58449152a794edaf65550e66d48cfa9fa473eed724ebc48f5dc7e35524215ff47c85e69cb2488240bf5075e537c64a5a98662d9050a162fa90b686fd7eb85469b7087eacd1213125f3dc97ec0e4c46aa94fbb8c3fe0c0fb03eec31f50880a0f79ab86658da91bf282f35ba4742167b65c5fd650eb10130f15c907a91a688086f60995dfefc4335760fdb74e53b17829db45fc68ace26f2b7af2c312136f593e5f303f67434bf2722bd93cf670123d543a2394d9ecb4429f22bcd6abc2cb934822587808050e5a9bcc21d2a039ef29b4a12daac123ad11ea40db86df1d31a7a8033f2ca607ef068436a30edcd00033479e26c66c90ef60b1508e61dcbe55acec461aa2a2656fd7386b4698abc03724372e73290bf8f35301c3fa220c017a3b9e3f42e9a79883e29d15168d29517a28fa4218d93124405445b4748df21f43e51b6c3c3abcd7644923264e52651e36bf202ccb27a5f86cbb2411fd6a1b73cea339e993a60a648ae4cec167153923411a87876a40b857099536c2873c5348d1c2cb0c353da0af9f36c661998718593ec5000a225ad484b9c0d07fed44b35be7dcf9b3537b8ae8cd91c629eeda34a813d3d62711c0380c70e4a0c0df671cb33a722f64ab9a3105ac46197194e1942ff3bf374ea6d11e1abd0dd1821906bc8e6aad2e5ef815f9106e57f0eb622edfae3042210fbd870a3efb885eb99fdbe2155e5a1ecc12c8f3758dc26269e9d646df1c3b56933d3944b33c5a8ed4932b7984f38a32e474c86f36937b6fa36ebb0aee93d79d5c71c4b327d157108ca18144ba9d20cfcc7110e3eb5f0f4f127d1ce52238a29ad4e1fc9b96c49918c5f71d3a3e533285c427e81884db644e1c926eb2ef59ba160e864d521603f51d00fe0b03b1fb53f3cfdc221b707d270b4b0c89e572f288d5a995e0506be45b6f9a4ba757e71d9053c38684a8aff6a8c778aac4f6b7f2fe6fff0feb6e9ab4bd20f7ff54bda184a6f1a05509358bf0d9b3b7eae4a801bf0f43cf8ec2f5be52b2e16837a932489c40caef762b7105e39988cbea470fcc1ebcbc660e9e723a1b121531fa62f6180e6b12cdd1cf3f89d5f247695ffc253cd821c15bcec4658f2e6d59d93f0582257afa94861d91961880e6199a1abb00546b6ab01d01a45f037a548e7c5e30d45d4d07051e66b8b9f22226fd40b9f9940f7fb6ddc16e38d6a1bd4443bbdc54b952eda40a3aa089cdc42263b84f7a220f0c767bc62d18c8fb1c50f12a536c506fb9621916fddfa8f64bec5e9e07551fefe3e55bdb6d6def2da54c4906fd0777070108dd30b59927b816e2ea89b7f4428b79c9c1d8007304834445ae95cb01c9f978c9b5606cb7a627fd53324177ca29334f326bec999de7793b85b2db4a229ccccaa79c13eec6f422964f68c6f2c49de2d30d77a371a544a3d783a2510bd4eb59b4c035e1598bd78cf872de4e9a8723ba107acae264ce49981bd5296de51329b9744244d3799eb7db098ed689870a9210203e7adc882e2c4475441fb41d2d042d29799a5079da2aec06e74475ca2a74a784a2073966ec999da29842bddcb060ba4991c1191521a56ea0a4bfab3ce59e4a42d9fa672544db5c4e0e7317eec49d4f6c2eb1678946ec61529b117b9298faa747899424378ff51c5992fd659878723c3814aeca7a5a4819f13ca58aaa8ce74aea06a71492c778a820657f150a9742e180a0703e50b81ed9df0585db91fd6150385a3ecff28910fd531671c44a083cf6cc7027cee5843b712e16b98e62795618d33f8b1bdb99fd5d3736e28dea26145f38b816a10b00a14ba4403729d1c8f5a08bc54d0042574a34ba79d4cdf8b954325c4e35b71377bb9d4f6c4cb7d3e572b1c0ddcef3898de97442cae156270fd82c4fdced3c9fd8984e970ecae5fa4227714eb71377bb9d4f6c4cb713e7743b71b7dbf9c4c6743b714ee789bb9de7131bd389733a4fdced3c9fd8984e8c7339b9a864acce13773bcf2736a6d3eb2e0c108b598d5fc0474c96766219c13222264b4c9618cd5ab14e5828e977078dd99c93fe2c92aacc456f9ee22097a7ac98a77f81d01f7b63708d8ab4fc151a150b659679e084caec93ec1aa1307fd32e65fa56c95d629364faf6088dad1ee65f881e4c7df83a1e6885cdd30769b7bbb535f7aa64dcefca74339f51cddb7b36517284881098ae0695f2fbe1f26372281afd5fb1e789eac478c48462b39e2d4eba13ee96138d826a5ec70774f3b62708d9bf470bddf16f89afa3045af137549aa03c41a33a2eaeb879b1c479403545d8d441aa4915d6cf4244d241ca1e05868111c51b31e8e6757c40afd75102e1fc4826216be492905c82b9009bc168b0192a7669b50723c26593144b26a801fc71c4720a75e13f8a2514da83737256617e339637eae28896845c42d6423209b90473013683cd00a3557269c9855c2297c8257209469457f5085758eb080606a6a63ec459c20902e77cc9f0127a11bd5ad0a299914181af229c2070ce970c2fa1570b5e442d9c9306e79cc13965704e14ce09e29caf223086c5aaa9b0c6c484e0a7669e66824033a3e981268966892608156fee90dfc23427f55833419879a299d1f44093441304cd920a9a598b66464333a399d1cc84d0cc68ceec2f82ac18eec9a864b0bcb01c014c851eab88a59261656c2eca25af106bb00f8a46ae5054e1e2c0d9e5bf999999d4ca56030585d5e0ea4cce67b0ec90dfc2d8956bf2f2f64070e39a6e5467a6a97f7aa0cc3cc13483f3580f0fa464ff5453f622daca5603c50c96995cb8b2d5954db5b2e1956d655bd9a4501d3b9637aaf347d8c4323232bc7761b5b51d8a46e283a2d1f829d1a8460caa81f53a3ea01278534c3105500d2ae0c039fc2abee45eb0bc3cc118a1b0fe8669981acc124af6cfbcb9437eb71a77c32c8db6515c3139ecae3c1b16a69cf3580f0f28d953d423f4f254653d40608c10c12055594f0f98253d3c606a1eebd971ee64f3e5496634c96cbe3ca15ec097a7d4cbd3cb13ce66795bcab80a83197b3a5b365d1065c789a514b18442139a955bcaa79c53d9e4246b2c6f2fe4f3c6d9512b5783cb4e53f334aa116ceebe1a891f8a46a338fa4cae779ac828aa800367fb1e142f36aa53835bd9ce6cba282aafd01dff175d10b970892e845c04b9b8c16299a5cc519d1257369558b2ff4cae7f4a28a594995c37963721d85cd95e2a11aeae6ce1d863ab30b74e56ec53ed0811214066ab962bac71fd4aec39a23a4454c7d5238416e51e1fb4a7071dca6e337252d4a447c993d00d672396b90a7bf96254328c5c2b56a86418b97e4558c59b41d1c8f529d7bbd8a09a7a27e73114ce492c34867a827a36ed5395a172d50895a56ca0304f1da5929cbc4b682c8564876cd9a7546d852b97834fecb1f53ce93963c49ea5a6fee9714277504ff40881f3584f134a7a0f11d9df4435657f18b167c6f394abb29e1e36f4b440614878b6a4923cc6a3a5a7b673243b91ec5f47f385b480647f8ccaf5f8c85ede52b5d5d84373e56e628eeaf8cae6125d20abb3e0560d8b5c6fc45225964e4efabbc43227964f15e62c150376f23796a20d9bad1a1bf1c646bcc109479537ba72afb0a6858d686733d1a8e6c30f0340c5c882850db65d0d0b16369d8db5ae2757ae26d54337801c944e58e389d6c91a2f7b5fe8a48d48815684a291cda75cb9182cf876b354652e6ad52c6f3767ee96c1991999db5def2ffeeb7532322c958c1a5c0dce5edb3dce763726060606e6e5c595736551c958bd166c96ae5cf62f731e3357b6ecb7269cc79c3c66dea8484e2deda189d15a6ec3c87936a594d2dabddd8e6ec7bd0d037b2fa640d5360b28760a04daa6be72a00ea2fea8469c678c467db8d6eaee2e042950b2496b2b30428a10eeae93dddddd07f863923b6285a40ca122e5052d4899213321e58516a208a19e208a952848ccf0c2ac1f6e8043248e43722530ebc712517acc10c50435080681d04e30ea0a9425b2bbbbbbbb7b109421b289a10481b34051924d8ca118c9eeeeeeeeee9d049421d9c4de04c505dfe88d506830b0780025c806ac92e2058ca7dc30cdd9c412176e483e031c66aa740bd25a6e3eb289996e3c30c64ab71658363f9a375e64fb9b98e5630b8a2598b289970cb104926ce21e9630d26109166413f7d3123060284a48914dec4389df5863ab0f5df28a3adadd3f8346957d18b7966c3738c3654d438d460927e0683aca4d9d72777777e9bdf75291e61c99f67ffdb63fd58feaefeeeeee06b222cda8569551a0ee19dd13485f1c81e6eea90bcec5c9a5a9e6d294fd63605cc3355cc3b55c0b3dad98e04c6594ba08c5f02635fd39728fdda802fd7b87be19b5560dd7700de744eceeee3a603bd66cee3671026d1b26d0f8beafa1c09f5065df68c2d750e3fef735ee7f35ee7b230be4f53bd65877eb49e03a96e04faa572a0d40c12f0de7aea1dddd626561d137bffe1f6a344917b948b0f7368a5c9a4654698fde48494a7e8f6ecb3103b2516514e8469f2810d8aab2a3ecdf727f6aa33ddd5debfc1af9be63351e98d13d7dfa1e58e10337998e66fd6eaca14fbf3f9693ad3b05dff104987e3751db0201ead980c66c614067c159dadafb52c9b0a1de75dd5d6bedbdf7569b976a049baee1096a3f6b876dd29f9229e8a54f29a55ebdb5525a29a5b4a25c608287d0115a2761a0ddcd872a428f3e4ebae9739f5e7befb597f6a5975a4abb7677f70efd7ea731dadd17065a9f8a94be7f099d43bf9c1772ba1e712cc871772727a594d21c3320d327d3b27edf42b6c70f7ff8fb4cc05ff87d21fe70d382bcfef8beaf3372d66857a45e65fb44a88c5297270a8327d76fa46ea2e448ae9ee7f9505113439ed7556eb1bb889335a9919cac170936a1bfc3e5aa0252ae482eeb1eb34e62d2a7c73a57aac4c493aef5509b82a84a4d48d9ec27b9da92a8d5146ac5377a620926881b70b23ead320aa403be16e3b3d211cf30fd94116cdad85c22301d593a88d4ee6efbf5c3b8d5fa16516ea108e0dc8d435dc6ad275bbc99aa2460ab12521fbd90f0046e6c2478469535508bf5312a10e5c1fccbcccb3cadb2d6639ab17ff450d3321ec156b98c4d446334716b5c22b349975a993ecda830d701d791c503c99ec069ac95a6e4fedf5a6b6d133694a5969c9c9c9c18bce070739e4f0c9f18a28ffb8810c3bbddf5897179726e269cb0811b36a6f0f1c1e124cbd2a71f85eeab4fedaed65a7b0a5c96650e6579d623baaeabb57e4df878576bed7e1f17635cc1d6fa88e064f5f1afb5bd73ea3c4ed69c9c6abf5a7f6bbbfab5565b6b6d22dbd1c74e29cb2aab4c95a64441e9404609e5c28bfd7ed9379bcd663520fa56f4b91faeffdfd2916b2de87e67adb5d65a6badb5b6bb79addff563b803f20db1f8dca34b966f7e5f3a59561f8fd5aed656053bd1c7499ed2f2f8d4d267cc71f2be4ab0f6cd55eeeffac75a5b964a5380946515a529b4172a46f8b811d929d03f3c3c3c9f110fcf0eaf9c1c9e1c1eef284f4e999353f254cfe1797a7acccc29c163261522c773949a7092931383d2a7561f2763f874dfb1ee765d17c3498f61bbb64f8c56f103f6b1c55840edae3e3e3e4d4ce17367b039df294d39b23b7c345b9aa98c2e01a208a21c68d8a2031f00f99f4065396830e286292f388160650740359c741aa28d0af3ee10702d3defef48c3bb82e9e9d9f098d7799ee78d9d6883468db33e8d1a36dc93f5e71c939e34d3c7a7cafa695098ffa784a3e54a249bf4ecda7effd8d184deb97f7fa4307accc0d7d4a32a0a0469063f2fb4d67a35a4fda342f838be1c3efdb0ccf7e9f70e1afb9cbc2025efa780630516661dd4421486c5f77daa2c07d0fd18556681aeeaefd3a8e1b1eeefdba030ba0948a5a254f2bd1703147665a84ca03af76f0eb8d6b62b3347ee6c0e2990d8412b340b220e27af0915767750f2febdd9b18554b76e0c554d4dfbbe5ab60f76f87d18d768598ea052029bfd641190cbf6d63edc7a729b7dfcb5b0ed5a855994126c7a36aa0cf5f64da83290acb27efaa8cccb551885f13d497eabf5b885e5de3b5e1cb0499f6454a61fd00f08befc7defaa28d8a467fe541dddf68dde03aa63df3e58c35cb55eaed288b2fd7eaa32b755f2c3a77eb2b8f56eab658b1aab902a095cdfdf6c9adbeca75049f2bfd57a8bb3ed0f7c32c379d1658471bdd0cc905a88302b8646a6501f804c1fb378fa2de80fcad63baefa1785b172b95c2ed7e972b99c5c314c4c6189b813e774e270381c5034c2f92bf6e0a84ecf969ea79e5c853939e94cb6f316e47a1d1fd0d84385ee384e8bc58f3c78e20489ec31425e2c469b6b2ccf22f18b4e701483c60000e05b0c41ba0195444a41e66625002b4c124c48e7873d032096455003f803402c8fa02efc5b88a513da637332378ee5893bc921e40d241239844c22a52073b012f050412293c8a427935ec8248f4c8209e9fcb0a3ce8fd74b453d8853c35982b3f472e1357bd15e33d4ac50d19251bd88c8a3944783b304a71683b3f472e1357bcdf0a2798c474b6de70849e485b480a870965e44e411799451e079d2dc5e4010f52c5e392c334f46906a4b6cdedca9799334bf8569966a9854a74733f3446384068966094dcd66e6a966e669c5ccd3cc13103cf344b394fd5f354caa1aa6ec7fa3a179015328702ccf93e676a36221d6603f251a8920ccbfccd86698669648adce9a2935b799a69929281063176ec6a9bf27278dad7f7a9c2c210493c77a9a1061cb4e8b599d355366a6cc34a15627b83a57a7cbea5c9dab9308aae384ee3c71d2e973cae7f942f342730345a3d7a744a3168f0aaa81a63e8bd70beee589971c8c0d304730493048bed501a8fa85a85a80300c4303f0f4c4643e2fc2d6bf06f021bef847045015ae522b95ea41d583aa300c433075000414a096b424f4a8d00360c90ef6fde79474f0eb2f83ac1df312851f822e2b98971e9775695745483d36bb4298fe07aec4afc2fc35b311aaae2336a9dfed5d897786caed2a540ce8f2377e54a7a44e08e0ba69aaa2694e531854f4157d6915d64f445454d43769080aa305ce0b07d5f2fe5f2a19de0a14eabf6f45cd28113b89ab8cbefd54d49a5aefecfb8f6401b311c00a153a2d02ecd04f09814ddbc9e4eeff9eb50436fb517d2385a392f17d2d5a749d8b02c0241d091942a9902149484384242175435c4495f92f2d48d2f2e01630584fe39716ebe55ba8fab1702c0c8fa805801dc000c29a4131f503f47154546deac725928594c250dd1e9748c88744bf45ab7ed47f43289ff07b1152183fa008a1f598f50384d665d6431001e1f778059ad306e816bf0ac3f756b1bef7ac1b467d8cfa89f7755432bc8fa7f2e41817e723ce4c6739a806ef55ef526f914c2f937c44bf9fd945a4f53dd1c8e555620952b84715d6df89494c56e29d5d2120b079932a5575a34e10d8bc4572b227de2327fb4720b37d01e44ebcb32087f92de2757654c1722802b90242ebb23babde36f79b77b60380162f1c02e8e40cc0460030b25cf93401762301212d596bc18fe145d93e5118fdf67ba9b550991755d8d96387b790adbd656bfd96ed8fe0d879adca3a1aee56cb5e546bb5b51be41edda24e28d7087cbea32dd225e55a813eb00aee928a78cc26f1587f4837a4154321c8e56eb75a0d0929064bea5d5c640a4381a14ba5b8f0fbba7168f8b3a53adeb7720caa9329ac3e75929b470739191304ecf655bd1c9d5b1a80f4be844eb2de0cb34db6693d071a48931d94e46e54a64d7648cafd2e3a319b59c1d140d610a2123b1cfdc8b4c90e3cb28933dd2128d32649b264b3459b24a1925f326d92c4a6811cd81f1c0a993c498a11558a10d68a1045d6ca0ee091db19510de9ee0d562ff0ba219f9520566080b24c5686b095a02a5bc02a4e5f180509d5f7832a74610a9d7c3655727097fa7195a42a43b26d0112aef2c3b27ebc54e1f145e901f3c5804060d550576460969009a9c4fc8086c6299752a22265640538a426a4591b28341ba79bd393242726b57e27d50d9f142e3ce566c83bfd701a6a9a130f2cda254c347e4f6ca185415e4e3e5a3cc1a4e20166d452e8a41f95a9d2134b3686890cc32421ce54e989214ffc786248c512d813417608ad19dce7840d14a2fb694576e9594603480269806b4a4e04c92cc8099d18f232557282c76f51a292a372b3655f31024c9570454a54ce6e010166a4d829c35a8f3629f05f41a59f041e88b219f240cbb4090fb39c25d3263b34d1263b2491539936d981887c44f187b40992224d9004c9993641f223f7bbd82ac05ea64d90a420b7d804a51ef6876aa918217047a3ee4570d292a006fbdd77ee91070bfefcf5c9fab87eab56f3cb30f029abba80caf054738aa287232c9802c9052840705212031a50a93b24999273c9610217eca8c92084040c66a04ccc3024040a1f49d8a006dc19a1303cdf2b5572a085c889081339263e245390f06848a65001111c113b8610e4d4482ce1e1440d529064a3ae43b6d6fe8c07e4780190232848828a133a70e2ed2da59de0f0629fc4459c3405252f00a208232036d081122ba0618814356842a201882353802020072337204890c30b3810614902e98827162001a40855b23c53682f31bba4731c69f1410dc895285a70d526896008141d447a300410422e121a78c96f35f8a6e7478798e202ca5a6bedf7297b535dca4ba13e0b7447ca7259db18a89529fa8973c80f4404f1000a20542358c26c23e0c41020ac80090ea27079fad2e73aae035460a801530f29a0614b0e567a6e183a721291010f31f89f228a1494408b93154cd183e200e5e618624488861a30890106b7f0c280f397435c83d202433a5c00228a221dcca0167102ebc1d10f31f850441040d823d881aa4e1122a8d40006447030058fbd4109c401440a86a8d2e31604f7b90f2506883881f42408226eb052ed0d789021051233177eb005c811df2b8503365f5666816a57171c31031818e1b4440d4440668bba2572801c663c804a29fac109809054e58a0a80ec93df65b2c391a3196a41c0bdc004905966eb07e81d6cf0ec630c2811e408238048a143940fb7bef43a437f535b837e4fb64b319bed63fba4b516bb804d96533143334777a6d55b2d8ced874ebabbe3b8f97bfcee8b2adc8ca36fa6aafab7a3f57af7c81a715b6b6b6565bf77a4d6fae41ba95a1d6d25aaa6cda6cdee1ef546519dfeb0adbfac813eaad3ef6282a279337532cc5445dab7550cb30a36dfb84819ecaadfa65d3782f905d53b7437c35cbf6bad375235240ff5f9904daaf4cae9a79d02ea83a19bc81b9b280903a88e23a1f422ff87af4d4e085d25c3bedbafaa113cd73fc1a69efe09295499eae9af5065600bb5f0c232bb37aad0d97cb9882bf10436aa0aa81e1c47300a8540aa17b24041e0ebf8809aba407d283690abc077a0ee03474a5da050dfd820ea7de02193407d689f517d7cca1285a226463d5592bfef7aa82a12a892d448a9ced7e538f9a23afe4d50ee29c1e24169cc10babd9bb5c301cd8201f73700851b1bb86553c9e3b1d4b7304f57828d1a35b7aacc67e96b7eb21bcb3bb2c2d2e6ea1090ba3ce14fbd771feac1fb80193170cd9d48b3ea75603b86b3d9f79ee78d66fd6fec26c05a653980bcaf638d1d7300f5acc2ead7e88029d07fe73d0b3590155659a8a1c6f7a89185d6e7c382971a3b8f027563cdfdd4e70022bd0a788ffa1adda746166af002389b6dcbf77e8f4354e73ee809614bfffdb67d5f77d24d6a9af962a16956d9dc36eabdb4bbb76dffe2c9f73365c243906cb6baeec50458cc9ddb67303cdcfb339cbc7f93c897897cabe41b45be13a0b05b83eadcfb1dc46397470b798c36e4320a746f7b5fb380fb4c16d0fddf8721df7b6907519dfb9e657a6024232b4b1dc707280c1f7769514a6df446736290cbeb782097b18695fb6ae5abf1039ee7799ee7bdca86ea882ca8cef7e1d693b63228cf9cacbfe5c9c92a7a114ff224607768a32c49f2bf55ebe8456c5d731226c31b656ee0493c86f2242789c028f4df78d488bff74614beef8ab8ecf384c034dfd1939cfcbe90aabaee5e54977aef4137717446c151b84ede22383a5fea499cf4224e56bfd2ddd5cfc1daf7bbfba98fe1630dea51b8df8f1a7168b826359270bfff7ee7c89e85c88b7892c73c8b93495ce64f0eab5f7d7cca9224ff5b2d5c3de7647d9915d40f298a22b947a09966f693f318f218558a82c88f8a7c48367271193de7b9a756bfd9b8c67d6771cadddba2d55aabe7ea076a2d5b55e663beb7dc7d62dc701cfdd3997e8e4f95f9152db9b690eb7f7547aedde839aa535fa607b6df153be9b8866e538b3aecee0e1d269300cb2910a5ba2b0fca66d8890e84eaf4bb885de464901642ecb36d8deb949b30dfbd8509bd2b18e66936c308c08c2c6feca1b069ac2b2da74eebba116c18b27dda3ffe66c790dd7650b6d643823b18988719a993b6da6ec9ba8edeb1b4d16566c044415cc86334fb586e322eeb63288cd4db6f183a86fe41bdfd1260de4546f3abb73fc365336f9f86c7546fbf86c7c2b76fc363e0bfe0b7ff5b5a59a8d3a6568681f9ec23d497198f3251ee8ff9913b977b080e4273ce3453ee5739093a511d140d994650f3e89fd28ee0de683a90dce20f276b118cafac64b965076b7daf56fad9239dacefb5d61360e10fb46984676185d950f3b0412e9b4d24d6d4a8353cd695f575b3027c05c4e1e4fd9c7c4b87ddf78680a9521444f47e5793c2a5674ec1a3f1611aa8f1bb3868e56ecca13a57a607f69ed9202343b7cd89054c957cb094a9d295a56cb60cb95ec121bb4a8688022af5e07f1fab858ab0c9caf5c10ad2a8a9114cb572eafb692af52e22f82a115c40eaab13fdd339f5552523e594cdd603ae4cf5f54997b97c7dfcf5df652f5fdd5f25deead475350445f3339812cdce20f85f8e8c124570943f11c7cdde589de89d9b23f7774580e4f8faeeeeee4a75ecbff8945827d9ca5c50982d43255cdf867d13368083851aef6967bf6bca540285f5377d595e96055f6bf851fab9ede31ecd5657067cae3fbc88e1058f172fc2a6304a780ba384a10e1a2d061e2e1403cd859a9aa2dc6c4469b2d14d41493c89ebe0498de43a3452124fa2034503d4d157f415e9484acaa1480e4949fd4210a804c814f4a3829fa1fc43fba1fd10e900a9c7eedbf6bc77a779a8cff32129b290e031f4cebdd57964f77f5babadd4c5c5fbb57efdbcbfee82caa4a41c8ae4d04940947cd841930f4b28c86df98264f3467883de504350475f118a06a821a821281b566badb5d59b9aa88c42ad80cf806ed7d61dacd5565b6db5d5d65abde92d027cf1c20b4242400d04ee68df40775fb5b5f3bc07c080a5871a4d092d563a108512494c5002244ab074c4d75d5b4b9f128a1c1457b2ffa704058e26c1e1f716a02c000fcf099ce63ca8c7e034a70131fd5eef5e6bafed1fa2aefeb4f83394fb87d64f5511f85101f5be3f7e6f8bd6fb3d465f45bfa891b279e30ad917b4173c5e08bd88e105ed05ed46d842d9bc41b7803790095402bc8137fba08c0cd81fec76af35db0ef414f90354a7bf91e2a030dc5338288cce5d8293369cace1a4eda194a555fbd669f63df575f4a114cd073651fe343f558a8228dbc7f1bdbd4fb37d195bc3635445c59aef7baa1445502eeb8bd661f57db25296dc37e68c76ac2a1c54a7913c2772bc27a23e8f992858fbf7bfcfbb117ede5f9aa234f5a19a507fc128bd43df1b69ef7c7fc5bee56b3b4aefdcf73e5baf9b9cbcd6f3be13bb559d278a2350fa21b16152520e45680e9d94c4040a11aca594520a850822f4f014f4140474a11e134dca641f47cdf66bd7ddef5eafddbb58bf13edfbadefdebd8bcd2347d7fdad6ebdb63e80b40a365926c0fd2278ccfac7aa12ab94aca123addf505a006726684aededa8d3d20463595d48d221e79a386ce7d03f3427f5b0a92024b1d13c9a47bfd04236fa051ecdc34af3a8b1427cc4af8d7ec1a6009bad04506a3f2bd87b0045bf390976c0cb2be47eda2a12bc7cbf0e758f668e085414f40e7d91f68edf9c4441eff4af5087ea9093393ae065fa566c6b7343d9da388903fe9f716dfce63114f40fcd433994017f1db193292dd87c6702d2a030c05ce3f849dcdff201f6834de9f831e0e6cf4586a5b4bbed97c3fb03207db9acbef9c1da46617dbf02088660cb0300866068493004c30e06869f00c0100cbf06c3540a0cc30e0c51601882a10b2b0c6542164d4bc58a1a1b16ae9b9f819181116562469c570b00048084096066003243e4e884604a1586a12a0512e0650787a8fa85a85a866118baf0d511918f1f45437c6118a050a8046d7826b564684600000000d3150000201008058462b158908679aea80f14000d738c4c6e4e9b8ae4c124886118848c41c01843082106184360a6a4660402e2cdd080c5496f40e78ab28af1e958b9e9793ee6db43d90fb8d3ee6a6e12caa021e052fa98894c73d4354cc83c0497687cfc88faf673a1035d94a4e9fa192e8b75886772b50d8ab4420205e1a2eec9d07e87ea9d0319a7e7b65d18994ed7e4af0c5e2bb6d93df4b7f5be396b3764b69964ab7f9475acccee84b8712f618e9bcb538495b60399dbc14d8400313011d0424b543bb8480c99f1fa0ad62e0a6eee7a650842103086850b7c0f62fa443bdd1d41f6d34965edd3755007c46c82f888ec8fd94637c2c8ea022ef2e2b29baef9c7304943daa15aaaf07cda9a21f9f752b7361b964bbc78352042a26f250997b443c77ea9307743b0be55efba19e0baaac12960e4dfcc04f326abbf11acab8e586d875d0623c3e77b47c43024632fd2c8b5839823dd0c8895641c6ba671c462c13570f6c20ebd899a2b1a490da57eb11f35cb8982e79541b3781499aa3ab7c27a5b83c595bde56a65b981ead791752d74e37cdc9cf303189820639e25af955c4f9e104186a95d3f9ddaacf54046a0e0115fb515f21c32ffefa77646baa17488d73eb44cdf5d2e552281446a53bd566ce60cb4b799c308e084e516993d411dc011020807f36a4542e91d53d8ee437dcd3503baa020ad9acbad4ed5f514cc583b1da9220cd07f609c296253aeea7e0b17b0fba4ef6da528a5ed96485355cbda2228be87a62378715e825924f1f8ea3b88d4626509fc3d2d325028ada85a07a9503f55b3b57a0a405060a47073dda68acaa888bc3df33e30ec22dcefb4230ac32a07ab8a45c66f4c08004f898ac8a65c67e0c350813e6c6836bf923511603e4b195d6f2db7aa8f8341a96484a2db44a622c30582c90570f244a2d162c5eb1be9eda03d8cec13b39d73b390a6e6bc0e5f151f5b9a40f8336b712ee0e6302117c04c37ba4a668b1ad43c9e64ec082334885291fd07384397a4e08ea6780491c77ceae88c044e61eb42f8f974eb087c292cca9fda6a15a209d251399175c5a640110e624de4df54a5e911b5d3074969dbe97174dddeef6720d2dc2c7711043b03d1e6b1e6dd99fbcc9355849439ce39f150d62863d9a500b2f71a04b69f4cc7e674fcec3f83fd6849d528adce7b12a97588bc5665708bf62a4647103f9bfb0bb857cb1ec82378badcc02704e4cf5c6b2adc0d1ddfec4c8e9e4e9ca583d1b6a3d9bc90ab3d81f1f9fb39c688904beda20b510775b6ab66bdfded4badde97cd52255f8612bce0f5df960237f0c058bc9735d5ab884c9f738b7d9811be9db288fe93f4d68c9f91face3f1b021c0eace96e03371c79841057c0c2d585224242c965ce453a706fa66b5836cf7816b5b4bfc52c219721c53726e0a760c3467fdddce76de5a564c0b8a640c0c7d43c15747a1ed19eb7dd9906b906b732ae636f43a6d612a5dcd96496fc9c093b0343602c0d9776c2955c7dbd453a628d7cde83e59d87a81fd6be5a980542bb3730a87a82014fad3d71836a487cbdfc958ca993b74e3c3cbbf0b4581e392a30c713ef8bba743130b8b35580b9ea045a9589005f6adb2d194a42aeb0eecb4416a1b1c6d0965c578bb6510f341f9691843d8e6c2b05a6db328df2d62c00367cc7209dc4c2586c2fb00c53aae64005c26cad277bca8d8be7fb8b736c5911d330b05a4ef4a7190676e1959ac581193867288340d48c95f83532f327e2ba4201d5fb87ef97554bc03914ad8242c1049d9a931e88fdf64e3c5bc5e8b9408921dd5ec603436f766e57ef1a83384997378281670250d982e6f2fc0064a867e79ab82e4f3e6950e9e18db21042ccebda4d308b53179f309baf9e92f24b2e10ea0a801c30f9f0f353738d72402b7abf7968943aafa22f487f8d34b5c5ce822b08b98536330d5c7d1eee08ff4bb7d607ddafab67df8e1b64f50513064266e6912cb35aeb85f0f1fbf48a5c675c8b45cd061730824b655eee7a9b2a091ce44a30b9b8dabd0bba3679b640f5eec9d0c1db9069a8ce4233ab39279048a546ba61f08893f971a4f5bf20b99598f24a4e69c63e12b0190f3fb299f4558e2eeeb630334b85e9dd07dc3c8dfc3a4953aec57ce482399da5cafc307b3706f753b54160c6ecb43fff9586de85a102dd479237b414be301118a8e65be9173a11af2226f395a82d938e1665506714788489e12b8cd3f1c382fefade968589d9236d591e1dfe71d60360635a309a5b3e4a5658a8e04e4c21b7ca74b7fed7fc9193535d7271893235a45ae991ce65f60534294bc48835dd6f3dd23d71517eb660604698eb02086c93f455d402bf4197e976c70623d0e58573d7dcddb9d7d1ef150ca351eb151c0d5fbe4e9570643fb4572648bc10df69860a78407c1277425f42d5a2d6816d799f99926461e5c66789d99cdb320759fe01f75a16ae9c010ac411e84e246330d7831cbea4b9d1afdc8ee9f087272a0e11443954e20584ec70ac4d5d10c50eb9ed3717a0f63b8d4dff50f0207aea1e6fbbcb4e37c3a6114edb6ba90dc0a5bc2e17b4d517c05930b3e8ee0dc767e40c5f1bb0b96b1e91bbb18379d86ccd8b0e2bae53565f1f24445c5b590cc2bcfaff60fafc056d31ac704e7a3741b5ca43cb43fe7a89a775df33b5ba30679dad5acafe7e1aba83a64ee49bcc38dfaa4a02dc8c841ef8cc4b354c4fbae56c5ef4c51d1b2693b348d705544cb063d3cbe38cb81b13e119e8770149c4b9dad073e39859356e4b7f160e2198be652045249812150ae78a1907b53831995b4a317b6effc35221fcd533762d046cdff792cd659103e3fb0652dab8470012ccc5488458ed749aa14100782d3bc7ac0b1b2d5a650f4f9e213fa743383208c298740f7e6082bc2f585848b40143cd01942d11acd21da3ed41c75a094e750ba3542d6de450e0c00b6522c9ced0c8f44f4b7aa28fad3f0ddb48f7ed74108b494aa33c4d6203c5a233b76b901cc393ab9761367d604cf36248890300751aa6e3e756076f41dd28f4059154d6d64c470a0c2c3447617aa6c679c8740026108a78eb023bc4481b610e8eb069e0aec9c9e2e2d04886ce034a7f386de8e809a6fe5205e6884e70dc2b2e96d53ab435eeb67f111b4ee43650ce63723b3b6dd1c70656bcdc3b5253b4fe339571e1d2d9ce5b5277c97fd43c8ae965791d901031390a60279c6de17d749f41b7583e074e66fac2f2a1b91ba253c738a15d72cd56c05685dff63c80ed732dac02b565b590bb9460014c75018f44b919295dcff2511c1e1985ad76710c4017071a5ba177ed890e18b83a2f0b1c78ebcf6a466eb474ada50514fde41451c666c30396eb89e8ee492e8a77b1808216ded69f530433304601f36d6dfcd04dada8b16a10b410cc1ef9568b53c4b748ed813d2a70d90fe929a3cd677c958ea24d48772c8c82c511461d26734ea130c5cceb90992579600e408b130a18476251b5fdc54cae98a529aad012a2032f85b45d98907a308db7ba4585092c9881b52aecc26e2db8379cec0f75e4c84edac0d484d88f5aff551351339d90901f73aee307f72a3f38a786941d40fde37217ce01caf983b4a6485ccff5f8d047d2648a547866027a4eaa17de2067dc65b814f7e9f444735c5424a2c30a70b666ef3354f1032c5acf1cabda5b09671b6d171670554135f3e6c5489200d812528a918f8883e22520683018b0561f9d206f004adfa5da396ea0568960e335b33ca79f549d50a9f20d18977413020da3a2764b2b2307e48a1b49670096c3949b06069d574c9977c6e3abb9feb68307a76e6060f3153a1eec018050cd0246fc42503afc81067620677506391a25104a3b30419d67cb244d09feca5e23b9183311b08a4b7c19f6daf0eda0a7264130483bf593d25fde2736900e8dcdea94a7d6c6950c3d0d6ace05b9c13202fc9438b576b0398099f594fbb0e823d2aa4c60cf6ec84be3521fe344ae59945ac87f373f10444824427cb89c27aac24776c3323102250e1d90236f807dbd6a5d3402a9fa6074f1a0008b2155e0eddf280f67794e0e792d79fe419a6d058497ae4e00418cc08d75291f7b2daf258856c289a91434de1157c388d43b49b09b5386d2b85de656fb84b7f4a89ebac8309e57bf8a714319ad7d5e9d321fac8cb8027a738ff0b5a4b490befbe6dfa546a3582de83ebef34aa1852b8caecee98c1280f3debbde28c27bab39f81343f5de43c66b025a58514ccdd3b9fdb93b988651df65e461addebb95ac28318a88182de4421b147921515be42b0734811580653d58337b085f4b1e2da4e7bea91f4f4a44f43aa177dcab30a16c27297423d3745090dea38934b187f058ca0842f4caf59d5993bc5a889504adc77baf05b4b0527101dddc877b0768b4ed1b32545aae61dc4006722502291325057443f0f1bc149c7b08cce93dbae3125242fa1f13c2390de5e6e76a618c42f7ae7a8580881b240174937541d88cb3d07ebad7525284f496fb0e33915e11c650e8bc3feaf30a4ea168e802ea5616da3aff594da46de62ae54378f9d14861bda7027d34ed2eea4b241c1994182723ad15defa3f9d0475b03d3d4a5ab0df15a3c934623694ffc4fd447f27ca2d7a1f8909217e549d16f17ba787c7d6056e99cb0229552047a10d5c3fe71d2903749bece5675d5ef77b00defb6c79b0842731e1547e90322d41a2d285f0432da2a938a9e373b8f294ac78d7fd663538bd26d6e595b4a16ee7f9dbf83c33f22cb7ec74922748075aea18ba93651d5d4d71176cbbe79d011ba19b2876bc38a855619581432e63f3b5b49b18d9da211041efb952d0dc37c8fe9e8cc0ccf70069a0a81f04e4398825b96c102593ff94f818efa4b26914bec21b468d3d81b5e145bce18d86ef0d56be4ed2f92d7847ccecf8dfc1911095e2ceba18adf85df72937bc518fb41eb053fb79444c5068ef8c8e0413a69cef28e1c3ff34fca15eed57dc5b9324264c100c265a991f8422e66a6a5d5c68775038637076166e480fb7a4183eb53e014b6a3fb1d4e23bf7236e6765bf576a7acfefb3fb1b9e4e86310508a03d17b8da26e6e08dd528c41ed7a026a8683604d6500904c8c266672a4232e18072f59fb00165b9608b11e2cc0df90520c7d58f1b97ef30d4b81d4f2cb1fb82d3d1746b01672cdbc9e7cd9a56d222eb50508c15c6f8a40d16d0853e61532f008b407b95e1d74d7ae3d44053cfb1769b5e052efc3ab4dcec10f7127f20746b0141071f200c286404ebc9c5456ce39017d1e2b9b366ab4d0853f40c718fca280b86d88721e7dfb1e53288cfde9baec1e26c40d2e4005904c4c2c4fe59cd8b91507be56dfa8194fd09b84325b4d98a6a62fafec8e5f6506b9ed2df014738bf026742eed3205427b2fc13bc3365c25c9ebdc424e1d3653a80ee07d58faa52226f1c076b52f0686238767be5aca095902c634c7bb505ebea25e81994440e33fad42e8ad357cbba9cbffb1c302210509dc2d787ec7d312166cc349644612024ef23e487c4993843332fb0a5c402f400c2211a0365decd8d5c0c095b464b8c17f8a551d869f0d5be53bdf9c19332f400d1c9e4b93f0d29c983258a8e3f91458caa9ed5c498781ab2cca429fc1dd57b88ca561df9c8b851d17d748f24ae2dd199bc81e3f2a8bc0bd09256d9ae39e0a4007b66deab23f30f6a3fea46677c3be9816dccc7bb5ab78cfd09b83b33355dc65eac985563137e50ff5132f2e05fd925e57c73a997e90d1a86444f04deb21a153950ccdef4e7fb063fb610b4e539f50508f2f9cf0a22a65ca278d1771a790132d4026c9fa191195c14d754e0e19e4243bbefe13143fea666244819152b58634e9614240d9426406460cb22c50ce4af0277ab00a8675be9b6e53eefd8bd2ecf16d19e5c033d156ce7aa3a55675461b76bb8f41258b1295374651cb29a4c174660a0097246c958605f802ccc422924f02d363caf4f3d69721c93272faa40256802b6e5575567c12a71aec940e100d2d22fa18ca5e60a86aa4fa6941a7ffcf56ddb29db4c7396f049ee51907af9f22d62ae4ad15cd4d2bba0491b9e752c9eacacf5d51b0e7a89a7bba9f5a3ea949ec9f238bef0ac6c146ba16600419e87ec5ea68283a24ba8311a67bbbb3b4febc8b21e1449fd2c967f98ec42e556bdbb359e9622bd797431e54a1c41cd856c8830213ece372a73e1ed301ddedf481ae6314e588d59008b973e4276e4a52fc981c69b09048187fed1376704739d95336a347f5541b4cca516f92e089610583b223f10c64446d8af34ae39ea55b64cdeb1ce377ef2decd75bc5c68c8683a5aef1ded82f0d1a69b7bf02996306e2f98ccc4a4177cb4d1f9ffc48e4c5a3a45261a5e8541367c5f86643a62e598e6f1b2b092f6c8a1a85377579803d2e4a64a0c5b00e0eaff8f7f6a1de5ae5fed30ca2ab4a992b9857b1a97f2808298821bf0699474283ab817edac535496d1e0f75d059b80316b377a31fbffaeb1bf7f3f90ce02a3784e8b0b941ce3d711e775778d0051465365e67ef2538d140cdd07e5354d37af8638cb9af0b5dacdc858ef0088a6c839daac8ecaf6211942b8b701432bfb068ab627a4e89ab851393f897eb30a697eb818c20c11ea45ee6a99ed5048136b0416168e773a1d9eff4d18fea5af81ebff0924c6848a4a0e4b8a9576de70bc7cd5c6fb14c915447f62c300b019072914dbc0456a4feabd557bd8e68b3af314aaab13855be1c20ee75f1b3b38a775acb34c7eb58e481dd671bc7e057f07e2de75e012115ac0b1815f9627d1aa49dbc7eddbd5098fa1eb45a6c134d129019535d194043417641b79bda899ec5c02630e3fc8e2a3cbe5bee8e369713c724d70d0bfe7ea79cd6da01c8124c99c699cb8185bba016a6a3d669da9468468edabe2424d7703d47bc6fb7bb4a22e2760060d8b5afc582c396867ea6f4c777e05eeb0b6bb472a8d2ddb6f7471c2383cb3dd0fc1bbd673856890f913143a0a1cff284368b08fe5167864029483b27ca69176f20771244a34846fbf79712862d0ed20f5c19b63578751470b5fe63eeeefc68fca27f44969b1898e82652b266f5323c07d6bf27dc78a7eb14fb9e5fb1d5b5dcf21aab88ed8de41cd8817f876d6ce715d540ef65e643950bcc1d6dea1d22354600b7cd4e062957bf3b8b7f039ba6ae417dbc27f10e9e1513736afb40d706d4055e00eeb1db872d7183a54602b68fb50c99dc053c334cbda22dd3d2277ca96c29848f64f57eda3ed286cc28f2fa5245aa999ca24dbf3ef099a32f2af835fbfd6af7422d426568b5cf36b691bf86d4821cfb946c54fd8c66ddf84ff3076f3fa9d793d85214ba09a70d5ecb5923227a77a1191bfa59b5a35f9691f7319bdce00f009b71fa834fb10cc069f94dbd8374345755297bc3da22f91b2caf87abdf9e6b1a2987e63c4808a238edb5cc5f04096274cdd80d59b48de1cd59bbd1c10da91d6cb8d10fa8a66466dce9bd3e1b2d95e06670ccf49a739e7674a6b86b48b2b4c90b75c25b05112abba714735bb2a15c64356a0bf0e5d6e3b290112db3236eedf431fb87b24e1d47bae24cd2f278adb7372836d2a0b8697d0a16c1672f3525e95d3c1ad483c6a2088ba5ec9050aca9342b701e6c6c44a661f0d56d6e4b2167bdc0bbfe7a135f44edd5372cbccd5e41e5d18776c4d6a5c19fa0e7609de1d4e70b12ef8c4d54444b9b807f8129d8b459bb0401945d746a937e93224fd628f62a8901e9f09dc46ae032499d7540426635d854cdbcad5ad7a7bdad64ba08fa6437bf639dad7b46a6d59a8724f455ae8efdf5931036844c5ece455d3abd159579e48fa133c07e55820e7e21ee65cecaa5418999f0f67eec06a15a3a3abc73a6fb3fde9ee74e72a869ab8d8ce7323ab45efec5bd0cc94a41f6e38d1bf14f7f5391caf9471c068352de9fe09de7cf5269fdcbdbc54da96466242a5f229ffa7263810b416800e125a7abf14a552beebf6b0714dcb511c0be2298002ad6f96d40285429e22868d40a84905ce921e1ada01abf6f910bc8b3a81d799f954c580937eb9e6d674f81211bf68856a969588116ca036b1106247322dfe291131cd2a952d2c7698e06f5ecbcde14a16ad4abb84be4e3d7903c555fc80dd5fc6817338078e7410c39e2e8d13381dd0889109f36d09f2378bab4299db28897e70cbd446afebdc70dc70005f64b308b42e14ab2358f88fc058759bd2fb71ab8087ae36cec0b6cac42eb9c9fd95d9dbd9cc7fad917cab7ba4b2f26a059f67de6f3e24309ec4d3e2b9358ed9122cf49a71c62dd358c972870371387e4876e1f1c82063f2da0f20035e061b4da01742da6a60bcef2932c14c5a00f25a503660927722abc376dd3bb0d365f1df50df49af2e1000b0519d9e572bd7cc5e235dc486ea064995e4b90ba546e60ad3c6f163fbd681ac4e1a0482e80db7a2d463b0a0a330cec4da60258e197c80d2882f30db3904c6336aa481ef621e0f196490df0b41f63d207bad477bb46979122c23bf4805febf7ac03ca2d0232a7b84cf474c589e3c8e7153e4d199a1c5b58aa516c09e88649021f1edc8ef8dccda5548e8dc8bb8cf9a0d170fbdac2561e27b7b41aa28d7228222857e6fd93ff97bc5fd97db02ead4fbf1d9728f0982e747e6ecde99dd3278770be0effee194e39000b235163a13d1e46d79fd1de4250fba7b17ff5981bb9cc2956685c9c54d532b93750cf1a393843b320de2ab22db0204bba9c3af194ded3a87842df4b58349be17415536bf355f47f59676d25b828dad1831f64e8e087c410d3a871b8b37529e7408faec545a5ba8da3c9f5f6619de1c70d0dd30228a06d16e078b12ddaa453558ce3b78de592f5b3092b842c10ee27180fef938875a94ada18822ce26d64d7dc1b88704b00e7293f105804f9b3b7ec776c3af6ed570ce8ebffd0afddc0038f43c60a5f946781d93dc7fc182267bed8bd6cf238ef2058555518b3947552b44799b182e6c51709f8da146c9b40a1e1c4435e2af9a0bdafa12ad33665ab21513bfd4f516b0f1d263b53da13c1dbd3f03d21157f319966d49d2f271bd7ba48e22adc2a46298e7ff1fcd7123061cc0dd16795a769408c940e4f530f462b7294420db2eebdf665ee198a3f22d40c38049df4701b5b568e20d1ace07bf58a343010aa72191175a5f0031e4ca4d1b45551c9c57e3e31613bc54570783458f89a12fd222d7167b0fc469dec2b7b332d5a70bf6a97957da080ff3361d4b06e7bcf4476c914549bdd1d10bf749453cc44dbcf43dd7aab6b25cb082039c8582594776601b4819dfa1b7eee4995931f2fe47371e00cc93f5819ee40d05499261d17e0623db158f24274e7271e8abfce44245eb08e85153251e59f7a8d5f96ff613fa78438303c846ea249587eed1cf46e814b3eac8eb544ca867db13c07f30c790d2415eb8d95021f660b39806485cfb7a4159bde175b362d822df8301042b99fa5db4785ccc77f9206047cb20366a3a8ce68880eafc5740a170d470a03ad2f0b63c7dd362263dfd23cee0581c6ecc8d5db64dd9a38ff80033b6b73d6bbb5c66de80583af6c751b81ab82dc1dd88d5d6a830435a76ac109d4ae91054022f4471160347846805aca3f89a484875c5bfea6d5ddf38ec3e1fc612dafd694648a931ca1f535320203d7ea8c81d1a2918ad0d2be7de3439099a7d07e856f99a8446ce17bdf8928953f301dd9f61eb8db1782e4193239a88c126e0391c52912c50b2482414fafb257b2e0eefbc2cbbe209e774514b7e3b27e34d829b62be01203dc413679809abc90633be1354924ccdddce292f8bebece532c48772c6e14a7f91ad4ef861c5c30e9383eaeb0b976464e3857bd20f166ec73a7608d9f86e6a2aae24db85d036e285d18fedf79c26c477ce5e793fb7cf94b89cfed912cab1c16f912328e6f00b00aab7f2f66c8b28960f2d4ab655d0213e096d9400587e96615f60904c2695af673721dad96df2a5044afd0fb93f82146a42a90fc4487cc32f34fc338d7bcffd6d9918c11e35c05270ea0e3856f4e891133316878b1a55d00c9732f6831e20f0703bc8e8d4a3191e3a7651577d3a0ad075b43513d391889e08759c0b47db01fd5ef2c4c3d519d0ddcc80cd4ed88635ee6bc79a370fbf581fd8219f3cc56108a4749b7164bbb82de72853795477f0c5b54e719bb617f739f2cb25b8e6447257430e7ede4e2769519ba5ab8e72d63605304939d730e33620ab35bd436a97d8bf8b81cb7d55c1051dcc2a5e1c1898953881a0c5cab85157888f6848a78988af4ed98a09d8d37d8924c9731173e0748e04a704ba87bf2e24e5ec7933fcac0dd3c5c7964ea938385b74da74b43ace6631cfbcdf2d7529d3a6bd042eef690d924077e308989e20eb59b4ee21f54cbed1faeae8230c7bedc25e20b231642181358eec90d7c9bd99a2abe10a8de493787a65ebe971764ee2848fac4dd1a5d4815a74e39d5978d08d62a4d75860b7b7a5134c5eb5b5f8fac281397127846efe62bddeab9b502c7954b492470d5d85bd0f10b2bb417faf1200af3b6c367a91aa9594eea5348d6c66de231690ccaf829a47e001a63b0e80736d1e54ec9c5284fe0cf93451d21e3d12ce5e1145820245783a3fc076356e4bd690184e4c7302407afe1e6ec6ec4ed67ec5e59636bc0174cfb85f4d6595d62223bc52d9a69a5d23730cd641e7d67c11da315a49f3d540435898595d5c0372cef6db6375cc0a324db6c7241b7ec8de1683f8c19903a623b7fb7897c4aee5b2207963296c014107ef2796a02d62dc1782ea5d1600632f66b03a563c24c2aa63c2c2f1e24a5d5e2ff96b83e51cca8401638abf83d2c65153909637c5dc873bda32d600d1bf8d93aa97e19eb89ceca2159eb27a9d151023006d22d9046705e7b25cd6e52206aa71eb2a8e7c0b4c903bf844fa60aea6a780866ab746777727670e7d3f198f315941f673e1979a23262fb84279527dcac4615f06d8a6317a25f086e0196d218bfbfa3c5c172e08e1d3acd74f06afbb9368fca60219d702cff7cdf47850fa5c17e6ab46cc76f4fa6def28566f1f53e23c4efd766ce7712c2d2de01bee0b4c222d8d5d23bd9252fcd262eb2c38885fa6eddd8e470c69385857147bde0b6da5645b5ac0e295189aff081c42b060252098d9dd31b3c276004f91d216811d936bda74402533e1690f77573a2540afcd2cafb4a9ca1a2647c0e91e06fcd6b3fb5275751210800ba173efd6f9b6f4ade5b1241746b22a8b75b700bb7be33dda7caf355e8d5d69fb53bd8579bc223ae4e0cb35ec60ff2ef1d6d25ad8229d76cdbc9c0d5db0d66c72e593668254acdb1dc7d0adab6b7db56185577fd333edf9560c41f8b0d0f2a8b7bc0ecc1256accf629ec5078b783da554bf953211a6df4293de7d02315d8f83f38a5f054076a06de6b6b631ff7b4d40d36bbfce78634fa5e6ad6c9856e64421a57458409d32cbb7594cc46ca7c12b33396b9f724a83738c4ae23f8be1898179536e772158859527a4a589efd55a4725d88ceaaab2b1b0d40db4ffc15dd863fe0acca81c3da172fde8fbca495f66a209a5acb8be50f88f0516b86a915c61e37c534baf5bf1914c523e87146d7653dacbcd8483d342e4150a8991450e9e1348096327da5c8192b3d397018bcf148f1b2b6391f68638a875dedceacc529642f11a7de9fe7904bd9c5f8515f269c10ea20af54c70c17fdf8565360b5972b2dd06de09ba9990260f9e98c949ae0c966c240faa4cdf5879dd80044299a9988f10e8b4b1167ea751b57576fc31243ee6557bd2e6f600101f845707f74a01a57237f0842b92274adfbccf79b59a1cc5b6225c9806550cb684679c8738b8d2419e6206b08e601127aade11146a0ac355620db3961d63caf70067fa6d98a59ee783741a63459b6a291b6152b8e4780cb507d3c4c603da0a6b7a1ac5289a2b721983fa66be70b058c9b0a820d9f0f62a7151c98acca20853ab1d08b0fc44eda134fc508d69413f0414314291c50796c2cb8672b425286d283831bb86112d47a815546648292c3f34c215f3e83ce8c16c02611afb59166543db01f3a42fa30db5cd320e2e3950555c28f503751006d0655c13a85836304b31b2155ccf53e11e33a4016d844ae78c5119664d9f80524184f980d1d11940acb5050d34684203445fe14eaf5d492614f5bd5af706fb6d4ff795660c6731214d3d69b7c5dda1488623e2fabe32a86a1d7ea8e1da17836ba3eba07453d9b557c40c24b088c14762867b2a28766ad5b17b1e3c64946da27c90e2265625a83ad44fb1aaa086a0aeab2bfb328c9a2090af9c361b8d53452c3c55b7336c35c8a0dcd913908962174875ad3250657d2489c5e5b676805b6def2a98fad0f096ef49d162008eee5a8adf5edd26bd5bbcf2dc887a12ab47f0682c0b7dcd51c2c0525d7a2f753623cbd8e69056f9c928f4d1bcd01407a50149346a2bdf7915b97ee755eb2f332a3b2611542e745803feae043386c9ba297956bd52ffd686cce2013eee669d7d999949d04a9b0eff5a02c8bc285dbb04ce7527e4ac3b26b01501c7f1dee976743d79f301952e52baf61a9b10a8f4f273587bc738aebdb7cd42a7307f0881192d209731890b05565b0b03cba80573c4d4e9e967e30530d58a0f7ea99b8e59d9008e00f679f4155a530285a12785002eb1a756d5a022c96a9cfc2e2244f85272b978a42f62e8cd52ed12773f884d1db4ffb0fec4b1d867eb96fb4a28f4edf635e0da62bb2367c66190308e75d4a16a026f1cb60b2bdfdaecd97993fadb4c87a362e4c6818c6e6aa81d92eea0b74072f22d7d2f4850ac3268b90915a0cbb6880fd9f5ce7025c9a1c2000539aebf9f3d6f602f3fa6a07ce1ba2c246f410bd390db6eb8c968d0e6314b8da4e756034b8db73681e08b5b5fd0e2881882c383b46d09d1f5b03268c141d4f996c63f2d222e5c00fe230effbb6c20e7d7715a1bd6cd6a7f6735fce100a7c350519e024156f994bb3ae1326e1e00c9f4cd827a9bc8e0bb7bd01eef392d3ad2f52480ef708e7b0ef864942d8e98430e4ab54314c8f81bbfc35b06258b89261172b01198f7cabecffbe6d9c444c3e0f947e4fe10e301aec54db404048b5bd20dacc50427d493252271c436e7c21c828bad7fa431c775638d78b95a374457ad25f2918b127f33daa977b8183e35cc4d9b4e4478f59645891083c074f7fd8868b6f8b07ef7b5da8c91b696d842e65a50fe6e18174d362917beca49849d39cdefef2aa95710b5065f343787b732caa3c4d82555a502bb54aeb30eb5ca851b42a0b92c3222a7df4f3122c9067ee7c16726aefaae213631b6d2db9cd011e33675630bf6853688ea195421296a144c1759400b8297e401a49f40934b07eb088c9773483f414591388fc513083793fea72d79e908ebcd33f35fe95929928328c91d263c831bcdbde1cac3c91228b2a885f85fe529cdf0d21e5c48162f575fd0b873ad563affde7d93a7d0c020d3b4cf8f6e8add1501385d87fba1dce4ad45f0ac996783ebf5b098115e063d1ee40f76ce8a3775235f25d45ac87d70e0fec30c389e1cf0f2733a633b6012afd15824f8cc449f4eaee76d44c27ad632c3b46fad4f95b7af46a5ee66e172411f4736fc52aae6ebd4f9035dbee8f3f1918daa5bbdc20b4f7b76eee19be15f855f2ce5689b73a90c47d5f080192d1167efea647a88aa0b31d7426fae730df78e72c37a1b64c7085fdb83ea1a99815d597f20acaa98e7616c6c6747132f81e4936efd1ca1feb0a3af55407ea2576fc77ce6d452f49c0d500fb6fd4ca2303f25bbf1ce02095fd9930592e919689d899a6b5467dd0977e219b8bdc41ef60805287b60f4eaf64cec381d580d19159eb12045b31827415f3ecee3a9dcd0a9c3909fb9154dd4107f9fb61e007d14fdb83c35216264f4bd9fcba13a86e2ca5e2bfd4a4dbc5ecc9b026b8ad0e22c9b9cb9ec5ef77c1b4d151284a99c38be9e65d7c2c0154ded8b08a4b2ce5eb02daa4dbd545c1ec5647dd4773a57adb59db0a28eb6ef7b861475fbfd91fc567c777fae2322f6353fc4aa8ce1acb6038b9533be31a4f24bdfdeaf91a2d36aac8a02109de6272dd985a2c7ddce389f81fa3a7d6d2524907feaf796e6ba9d0d9e45b3aaa3e03a298916f98ee556e7d6909f9d2ca26331ad1b5840f3cdb5e75ad86399955594fa7d01c27d2152b9cc2ba87dfdca5342f762b272b4b42701b61d695716945709cc859d8c7d76b9641343a8fddc0ab6d70327d078df44b69c920b01d1848f263c2406042734f861668a29956b5595af3e16b2193847bde69a9b7c795cd7391e5dcc1157bb2f0d71bb2dcf5eb005b682bf88113d9ab6344b9fe666028c641388a91d0ab69878c169c219e4ed12fa4d5f2b323def1bbfe5bb86f730092e533b7217bfa012685a9a673656a57509100db1eae6b9a25d6b4a3cdf5578b327c113cc9aeed289a4e2c55c04186ce61364c65abed57937df81f89a7c9391ff064c1fb4541c627c12a94787f2b0f71f1357c38c6366a35f52da97e18c46edd6c39d8003bd165958eef7fa95943bf98bc299ee2b0afa4169e0cfcc73ef8172fadbb6f506d18a97c451cff6b5ad5fd88ea04ed494f3e6aa1d0e6f21089e8e63165cf32defd5468d9810c70d55049936041d040a64309d0a9a003153567216e4e1164a8043378e8125a04b0996726d94cf1d72e503631b7d557c0753a82ed004be69b25450f26c9c28b4f8b8408c578eb1242c6b4d1e06dce305272272f5c9a8aaa3a6c96158b68cba76483c05454a82f29d017f1a355ec6b0db7c5b929ddea5a1ac463d15c6d31e9c83f4fc806587565126b9e40d14c5388a36d2f80a66555bd186e27550f9e03771774c804e5c6d6f1f919a22034cb43252a2efb3239e6bce3bc434d6fd43c8bc9db0c6d65f3e6149ea7674e18c6efa9dd116b9671e0fc499405cf87153fccd830a990e7851c63679025697351b9f2304f14d351bc642aadcde0bccb115f7594add1de496b501858d5c34b02b765bf4b08defdc9da2f6bcad020a43fa1c439424bd14a0cfe783ad080d0b0fbf68a1be8f0966504475f8cbeea50d725d2a419c6507029b508db484fec06472ca453053fec96ee90635d4f3a620f37907be545f7410e879baf71edf02144f4e41cc2b36d3bac190e97fe31b40503c7e8bebfe3ebb8b4349cac0ae766c908c25e68dd34aa02a06891a6edca61c80d7a0dfa3338d35551db474e92dc79b97329758994aa57957aea2a95c27f592af5fa926133854bd66cc73c2f1434e26d9a22e35abd8c4d9cbca47e4e2d593a70b01f5c2c12774b0201baa22e9756f6ee0952032900e4416f1e24c5d101e8cf90a69aaa3da88cf5c2400ab302ccb1eaa36866d13286cce931f33b0e81b0a5f4a5360b936c58f7685decc8fe820aa0cc6b47124b3352ab4b836d893555ba7bd97a9a328bc6ae535c12fc9e313d7b1981589e42b6ae85bfb5315743bf8bd29c3a3295e1d1a5f869a0f766cbf08357e30cb7bb1f609120b30c5339db53c2ebe88f4a4a5a053ec38cba227eedd2bf23bf1ab3396867242c9fd2445ae68e313939bc0a7b65c8c58991137f1f2a0cc8d457fc8ab752bc220f2e643870fe05d9811a6e4121c124e16aab427b7e62ca9301fbc81a51534a3db25b17d3fc987be5677a3acb55d48a62c8f170e31ed26cb9076abb3965ae4b573252ddcaddec021de3f1a52f9dc4079ab92d90e9c69663184a94b0d3138badb48375f85c0345c82ee86559077ea14eb1352b77c076fd7f94e91d15a704a759b71a44c798b8c1bdabe02484287435601d4432bc9bea50897601358e47107b53082702b24d113bbc113a5367e5225fada7079dd1c0085b7c9d9e15898cdf8709b711b6fc14daaaeee999aa7344a88ce5ab14e0a4d1e735ce10e9ad37d4ca08466174cd007e024a8501b449e62f2e7c15df6bb0556df11ac6f9c36d051a7d17aaeb67734db60d70c7db000826812a5b6f8b7ac524f607de14f3d961d51061553e35260c458b8ebe12c50d90f5798b2640e1f1a3e14c6618638874d991c7c1f35a37ffe18b42f7502ae3028fc75a34ff24f3ece88e8404310b266caf21dea271d9b4c1303793f27748546170b90ed109cf3164b71c7c356b34f26f5c686a948148e5401857d5e861b173bc08da7840aed9a6cf0664ec8ef15b6aef4afc8ad28ec1d31cd3ba70da18bb21211a54d3d00c70b52a56fefca8284ce62adb5f32bef437388801a2554d21d6beff91435666fa66c8203becd4250c499379f2bb86c2e983b4b7741e26ef17cdacf9a6a605631e24b9ca09978ff66583a7971a2c7dd8f96026ba0f801a455948a1b31724b33ead2f95b74d32b0925ddbae06e735535d094670380a258835421954bad080da5d8c4cdf4ce1c6783d9d119b485b91478df7aebe279671397018d4eee8b80faa6a9faa51edb255c9dd5708424ed1244bcfca108975fc9064dafa570af6bc2be8a4aa89062eeed8c28114bc2e65a36e89b6628d4b1e2667e51dea69a406836c773dee48816935468628539d0c676ce55d862c9dd25ab2d6d76d5188234d08d9b11c61a30e8ea4c56a77bf7d9886b463dc3ca6b55271dccdf02dc5cf9d7ab791212206054392ab7dfb8dd46cb56391c0093c9ff7c3c41d8bb14aa172b8c01c74a2cfd229c967020254bac8e4eca1979894c1ff0c557a9c98ae109d9a1caccba1a4fab0b9aeabb2ef5fd0299bc11f4e7e202e9aa409126b6fd8268814421505a246a331adf49119ea29d9a15087691cfcbb2ac33657613b908723a61d00ba721c7604cc2e3844707e2f5c1e1f901230e8fe77562372ade817a2b3246c1757101230c943dbef1e0ec15455f9c46f8369338ad37bb60752a0dace0883f874fa0e84b4a1425ac9ac3336044541ef45e57bdb07e30f8bb28d5f633c31ac1a1d5a3c7fa5bd663e1232266ae43b1b0b8b17d199e9089d80d1cc1696451f8a96fafd321c0b9de1fd2c07c015309aded1f180c0d29a024231aaadb06410acee0437fcc4b24807a0c9fa0070906ccc2185bf784562c081d7771500a3094e544a68950e3243112ee0d6e8ddb669928730239f5d9b65f1ef4f2971909e82d8b6c4ba85c69834b5a68ec1ebf8820683903563bc9fb2b0456218be18915c250af4304e6854ad11645cd0705480d548f28e9173132df94fedb03668ee07f4609e292386063a17652d6a78cc6e6cf7a89aa69cf209af930219675a104b7eb4058119bae4668752cb929b29a283f342884f037b276a24670242cecd98237963cfa49169763ba883535456af2761e03cfead1b8b24b74d9e994cfbdc993bf87a9a312867c9163a1ea3c525b415767ff95ab3bac3ea203d11a7f910a1b184fd7a51c0c3705ad0d205930558252151fe9b13c13fbb25f375cc5d845896aba990d19ae928f43ddad0bfb93b9f81d49805a75214aa7d2ddcd3043ce42c305587e15b7a2067adfd987d7e1b66219b765fd67cc104b7c80b126288044dc6a44015bb01bbede77b695ea5d2ff515f23a63f4b58a64a1f012d75c2f63aef475cca2e454cb8912fd61b81df323815895be2acd95d614470f0092a9b9ca848e6c9ef951c83ba1e531296cd07a30cebe9ad8a5053b96644dcedc656f557e39731db33dd975f8dcdad3ae1c8627ec322dad4696a5dcf5c4d50adbb2d09e0c058024a68f45bbf830389d9111f3d0056ac00778fb848d6534a5c0d7b66fb960e2a02d3b5a72a62abca42a24d170353741713d05b51f7cb995588c4f6d85402bdf7d50fa34d9150757404888a4543956e339df7097628ff0ea91d9c045f38e8730b84811b215fdd773c26c494be53355fec400afdf21c92543bbea19adc22fbba43b10477d9304107c30785ace066ba744aac80a3d56d3554591a9d9d4aa46a788404bad5d95d674d351ef5722037471337f04edbf33c29b97a0b39d5d34324ae7a5b9673df6457d3a121be4722f7c5d89d146d352bd40d16e7a721aba051da66a5716f6650ced7aa6523d4afd98759635e9ebb3692df4ba4fc4887ab0c553c8db368c4e5f76347662aed5a53917091123199a3f781373a33db1477265450b591b753b290489993fb6580e929b4f74f9104024ad294a33d70175123e2f28de60326467b2423b1087f8628a406f1222f8a67f53008b620a1b2032dd13b253c5a7795b93a8f4f55e629209c6eec57c69e27ec19a698057b3a5ec8cbab3052960c13690226927e07c144a2e772afdc3b2a95206ea654996aeb4179b3b23b8655e87324768715b6c318506fecfc05c1674414aa276be750798f5dad409049cd51ac57cac9622ccf9a2b685f605853de0cf5866ac0cacbbae6d61da84940a1ce21e465432c9914d216a67bb66558028cd29ba09f7e5494cf481a74e758174725d7d42487b7716c3491f4dc2a731593218a0a954de67424138c01a5bcc74abe21d2b4d4b182131afe4ee4449150a9c1e9e7263ab00176fd46d359ded0e8b4062a74d87804be0ba9cd689f83b242a4729f5aca3417445cbd7575e4ca30ef6529b8996166898d60595b652f690cd83d892a007cb5ce82486eb0283dcb415ee78330e88806b7ef6c813c1c42250186ab6318f1b219508fd698d840beffca9d20b9240c4d7190f8063c034250b715fe42d325cd6781d707efb280832faa2ae7be70233e9450a72c4795bfc154ab988e409df49c10784c818c049768ef643f6819ffa131b087d84d7cec57ce1cec6712eddf2d9b2151ce57631e658c4296988206e39d5de5d98d794112d5ebb409961b49044d232dfbba838cc85ad8f561fefbe3117eb723b1418523a82500f99fbdaf2f15f7a88599d979227b9ad18710e87b68e7573294efa4ded469d769c8bb4aadeafab894cb694bbdaf6c5804e901f0ccdbdc5ffdabe1aa767a8a2989c0baa822595e8787a85c5647f9ca35dc2e83f3bf158799ca215a77c1b508607f8bc2d8a50e209f0b7c738126b4e45f67d9bdf2141dfd3e965445afb5442a984027f699c00952922570c73af8b815b8fe5fefac85a447680504cbd43c2da0279550ccbfe2c268c2ff22da62ad9ffd93f3aaca7e8c261d1c50845cead6a186cf9a817ce5288ec9e635cafb7a1b9d9c6b321605086baef20d3629c0a541396549cf21af3471e310657e604a0af3afe46a360eb057d43c325f84c5b8ccdf5ccc61072e9ebaa1ab420ae942af1460b3da785d6874f170fe18920d295dd0ca1304a10f343ab6129016b61fa90cddbf95ab06d726d93dd82585dc61be745edd30b64eb7bcaf92da73dd332a69de5fd94363e6248c5a55289e68fdc7ffc117418a2a8824fd5c7bb7fb0ad59ce659c177b53310b89555405fc76161c35bda35c2edeb429e3419e41c73ecad3b0224c203a8d034e75c6968afb597d8301c3504f7506194988679412f9642e162521eabac613864c93ff327e703c2e61e9ea4c8300ecf03fd81cc972161b6ce6efc2a25103ede3efbb400df693957158ab349f2c1cbe11e02e118372d2b13ecfd8f6eac0700b759fddfc84bcefaa5c293b929e18ea9173d4b553bc22d4b857d35af7ea122b9b170ddac389c92acc9c89f4c2dbd4b7c75e026ae7c093a29f5ce350b72d1acd910f8646058b60b006596c43e452543aa6e810416b01a18c80f7a8b91e8e4ba2b8c87f492b2680efc7bd95ac0f2a18d8a1ab1806cb938dc41489a2c7c07ed51145d718e5582b895186d29be9fafe31b69f04fc9bd06ae9ddcb4a71b150acc44e351b8722b67200403a48350864486c740eb2919198d2f0f96e1372ef58f0385d6bcde05eb71c7791abf4e737a52864630dc9ffbfc1e7680c9faa8d6dc672e93def8226157c9ba44f97e4eeeb49b9d0a5ede19b88ee4c607c060121a389c7108793a35c3a5866b46cdeff65899a473841b5e1af89f2ed331d9424246317a5caf9065dadb1ac27f128ac55795602932a56a77d02db8431ec63dd2d0914e68d0155e7ac077d12efb1432bbb01e0e277f87ba2a7a7eee838b0b3011172c496ac9aae816ba83a5275e5c9d90b1fdaf9c45c41472126d42eb0455beb07239115529f1c0ecbbcb057004a3884ec56c223ec0ce400f76072c0cd6e8b2c33439ef63a4ae21a72a0d653f1c082da8007388d6720413c1bf2ff20a68a94d66b1e41a38d58b9dd19360f02ad246872baab332cce63cb6bdcf96b4c63816ba283111114cf766c0b69364b0ca978fd4fd6f289f1b68a0c55f8dbb0051a6f9eda088e2e18b679596b90e78b428c3efb22af9bfc0fe04aa77c5f86afebbb13ee020ec93310f42022f101a90077dc2922d97e672b1f295bcf0e7499659304df6ede25998f4fd119f3b4f7525e80227491c696590421a9089f28a4414580288a4b08fdb1dccd13ea64506448ef416781901192f1e1ec64918fa7833277fee6c649833d226d93a4dac9bce654eddca18b882f56dd3ee9c118ab76f68b550cfe6ed2d4d90b348ec23da1baa689f34f81b86c342d717cb717dc52b09a239b27de302d351cd0e712f0755f15ebff65b40cd277c99c894d109b463a342e497812291de598a44d58bab47ca26407da0c8a6fe5f04db944473946b3f6229d129cad14593e94ed2cc1b8e1336325b0de5dd9359a5d6dd112d801ea24cde3069f66eeec9dc2002480c761583bb11a409d871f19a04aa5fa06c39cde5ae90507d5b626cd78927d42ea4cfc84c16a0b6ec2c1c766d35920838eb873c894fb95f108329923b7a1637d374782040466fdbd74bc9aa5797c30320700d388c67bb5869ad2a33d5ecef505867e4062391c40ac3d065977eb5018ca770c4054fae79100ea7574d054b52da0c1a0c10b0ad41593b7693c44273bf4b4de083d54f12c5bd8a8af93198da2115e59402983921ee6e2ca4f16815808b7610534c917096da603df6776936249c92f871111d478715946091954c0db8e4dc755e6ccec371b05f6f52b596e1eb4c691b39c526139ab91c408c36355950697526db32fe45b2a2c8c759b152e8d9951c41f6cc86945ee3a70407cc84e10f03d45471e482371ea834bb04ad19b599e2b22758ab1aff4d02c02ce3709d3229b298756480a7a19b15425e1f1b2121b2392b4259b944656172ea819bdb5eceaee3f4b70037d30c219e2726264199efb1a43a2563cb8d84fe449b64fe99047b45b9d716fbf0fe6af31768be25bee22ca819f70f8a9da45066c217b95488486430441cf03f2613ec652bd55771c45c570860204b5d11c569168a6c25d888a994ae6df630db3192d57cde3fb9de0fa72376c952f6355311a5a151b226c868388229127ecc50895d2ddce675e6f05311141ae1dc71ef2433235055a042283426490b17c39cb3eb0c2d8646ab2f7bac4b0602c509e63e93c048e861db207d0416b85029942897f2823bb2687e189cc82981b014c5b8663cb2aefbfba9c69e219845075ea9e94d5e4347c4ea944ac854f998042a433093fc1caffa17798f4b09d06861f4014173ad2064d3c09cbc6f00c06cc3b238b3431e96524a0537b70b5c486c2e01c42d4041dd8002e881acfe8719f8d51201f2e122466b33d66fa55b41db05416b94818b8cfc40cb42eae0fa55321ade0ab876e3dc63dccad11c56e3567412e23431e58c8a1e69ebc402d4cd0b17f60efc40f963ee12be0b0b858cc901929412d2ffa460568dabed71e1d17062d098f7c2286d714e2976d7d4769c1485d4ab922d82ca523c68b593ebeab08a6d5f89e6a40229f9b8f3e0a88880e2bb0c616090b9a0bb9434f74814761bc6a72c29fc51bb4cbf93bf498720974d156d356a3defb95e40b76e32a75047b6aef9167663a6fb639a22814d91e882be895ba2da43de72ccfaa640c32d21b107d960585245b4194a612c828314a89e01a422913df471470e6508c829984f85736fca4ed308c0fc41f0ab1fc1f0aea1604c131a022fd40194a7a622e2adefb37b008f9fb1e293c36d5758939e13245f65de5cf2df079b619fba8143c3bddce3b97083e7536d6ae3145784879e3806beb82841249fe5323306993af0e6381097b0df4148808eebb8bee04f3a43759c2550d88ca00753eed6f3a4f28c52df66fb387d9b9ee1fe0916fd6e28736db283babe6bd15ea8848d808349b0d9c433cb309f967481948f6a74527e88af8a83a776ba4792989aaf8a8ca41f55114c44450b6ed232790ab369f861e4ef9bcb9189af1912349a762fe07c04aa8e5e0518aa859c8320d87853a6a193043ed4e560619a547a45193fe9b3dd4d1f0ebee6be0aafe3ccad4081348cf3bb7b907e392013f1893576847f3a331151844f182c05eea9f638372411da91e353bf7f4964b69694ed055a11ebcafb6b9ce3581b3bbb6ee980c8dd6f86fdb5335e279522a1cedc180ee92fed5b8574b302a2248cb4e11d96a2451a7d993f715b624c698c9554096f97a26c11f934c107c7233610609cee460707db6627f35ee565bf5293543a28f16d004b0c6c425e7cf679e4c80213c7395f6c65fc298a8e8ad0506e6b148d3f005e68553dd04c34654a48235527bc1ab6e5a00e757da08825bb148541c83ee749ae80131dc471abc87d507471c8864b9177e5386701d5de4a38b01900610aff9615cb46d30567144b2db8aff827b7ce29494ce6358bdf80db209cb4d8dc9054426c418f0213e9d03853a4008360cd641500f02e1026047f829c03f125973c5ea5fe4be550988645f812c7b3164011183db28ef947d88ce69e776dbba2adfc90eef0c67b9cc92747b7d09d75313ebf2440ed382ac372e2457060f1d72e82f1308ff1def8621404dfa247178bc22874049d8c5273ec72b5c454ca32d04f068eae2cd6826bdddc927010cbef39299690e41cba1aaeee47e8df8fb5c66848a20099894e3062be96221909f14b8e46388e1109c0992e14f8b222552efed88244d45dc26a06faf8966f8826fc67fa81c125444152c18802b4906e8c94b5acb8912c25de4125251b19bbca15a330accb93bae9e3d6bf52ff7665cc036858e9a1eaa432ec04f09d5bcc97b28211e812258ae09d094af9628a18ee914f0cbc690c5532d80d6c2511f40702c1bce18c5cd5a8371436818648a89b5a2fcf7f22e0c2ae70e9cf95ead58674ee31c80564dccb9db5382a03584419b9d90c9ba223d9c6110e3d3301e62fd956397cc9adfba6b884dbc1810b6612bb194a6fa06c2403b8a4c1f6393cdf371848c2d23ea9a8d8853917c92f48b063e3527251c96398381ba2f813c6a5be4ebd420fb38cdc040c6bd8a4b60ba39b5a88996e064afdd340c04eaaa72c7c666c4f932f1950fcdb2527ccf51740fb069be7229bd1d8a30f3070cfb994bb10d240fc39598de15dad618ad1a8aa5f336c97f36a4a6870e530540c9cc29f58d11991166d09b64326226ffe12be39118691794de44c46227ab833326fa7cbc2d6024d4470c34648125d780ce6d874ab781e3447eaa158b7f3e236df9f9cf086e0bc5983b56db27ab6371e65f7eacfc1e638d576152db9f314521b7ef546cb634f3a9db136b24a30b03632a91cab7749937022cae951dfc9ba6006927e12d85570324c3abdb23878d734d0c1ecc5d9f5f7bfa51fcc5ac47102749f1b0ee71a5b11ff78ed8f3a24e0004197c13874da06da7e731a8f2a506ecb8d70301185fa51c438df4cff4064f71307c8dc9aba82cb1bf92550efe68f69e9d1c136a668214b90a75ef016be85c8f52b6ff933c90edf43191be2032fcb575bac331bef740231b0b145cc95d1650144d9bd3876626e1d7cb50965838d7d844953fef11dd1bfb706b2ecf2333a652f1f73505cf53cdff6d5fa803a23c4567e4f409595248f0f7759a5a0a221cc6b413573c4fc65421e0f0a068432ff161b917f266d03944c7129e07835b9b8635f693e465d646458b3c0d659ae7d954ad2bb0d3e3203fd73386e77963d651352f334ed623ed9ea47dcb32952c07cbc67d4f9249ecc0dbfe4cf24b8bfc0651d337d9657825f0436d5faf8a7520bc71717cadc7fc487ef5c33c21f672207dc9d18422afe0c807523095a01d1c062c617e104aef5a507214ee3a7463195b71dceccd4f9b69816e8168172b2ff4b5034a177d652566c72b961da7200e1a465365b724addec4f011039b70f054cd0667018e2d4553b23b7cd08c87c40d74f501f02bb5ee49347e27f6141fb4aa43dacda03296ca00ee9ada325ab805e273afc2a3c48bd2d31f7d23f2892317704874485e58640184cd77845a7be8a1cd203c3b1f336820819af2e8f15039a27dae63b4c4e42e7cf161a3868907238a0244cb7012707fdc2e14bc89b9e6bd377976929921a73b980b90a7fd95b0353bb8591bdfb90ace3485b1218dbf67d92ea501b0001f7ccc05cb915ef1aa5485f89646a614ac8ca3e8093f6d632900f0d767e5d40342a48450342f60ac332e4cbd8408394043904dfe1f239c8f60b808282057a4c26d7bff85eb0b79378b001e30172aa15435e8529bc082f1fcd6548951fa445a1a903a32ee3cebc03e452109332f5aba19e060bda8146c99a0682e5055963b877c1dc9a49b42a9c4bce9c5c7acf5e2f4d734393e6810fe3592c1270776f8ca2380081400045eeb7fd7ce098b46f75e405f855f611e3b0b799fda0e922399149ba343e6ba46ced93fb64ab729e8662195a4f9944fcfa63872a41e8374e9f645332c5901db5779830ce30b067dfc96ee7d06c22afd865fdf4a64b23bc2f47d1fe1c9378a7022b53840223d81956c2ec8b94f55ad3b15ab0b268f4b23781c3ab155c607494c6e6f14935f503138a8d4fc0d8991ca9e9f150e5e47b34fda3452756468c50fca18da8c4b22cca20335cca936cacfe4a4c02978ebef2c17d1489d4b8e0ad0eed8fa4cde5a256f803b665137db9084a0a2f9ae624d1f51c4f208dbba5d699d165e32aa7b7b2058e6d7508fb198c971fdd43610d3c0b237ae17eb83737c6b921ec624e3bf25a54622cd2ab177cb5a5adf8d10b7b5268b562011c55e7c4d19c4617a21909eba0ea241682903a708dd889d7bf69a48f91436d019456adebe911025d3b839bc8a8727d56394443cb7a4a16e102020ad5980135d72033dc5e7e251edfb724c363bc12e1d8009c40d19a99e08cbf2c1d612e828e90a80680777a5204ad0e008fe371c428de015d2329cb281bb95d455e9a13066b4613101e08e9b6d1b555dbe4037ae2b97f79c22fa17ed90f18e3c294617f669d03b083930c015e1a616ec2b40ad01349b13786f7de5d8312bc15f9f98e3be5f0fae2e7c0ba29be05b710a1337d97018bae23dae99da28f84b9cb0f6987a5e9c222d5120a34139c305ce0a0b67d07392cbec44368e2c639b6f00c4697d62057557cbea7099c9f435634e694de7ffa38d427ca5ab7818edb7295cc311e88e2b6ee4d5c2a164dd20c2000ca11320a366ffa0b5a2c18185023ecc7667a1dbc6d7787b1106ef63385b8ecd39386410a5ea92cea760e4af85e06226defdd4808478fd1fb1a73b313cb6c7a717382e255137052c3ee8cec84c24cba7b27398cf062c0febc04fee77158d8ec41307bd17e0cd19a7253b8f39b5febf7f0d1c129fc88a7c42f6f7c653c82f3d309ef28965f4de4f116eaa929ea7647e4c480a2f4f6cf2922a9c9d4c612898c191a9aa2572d65c4e2746239f1731cd93a6a2e8f2b5834a2acc13454138366d1e2c680e999af09a827903de2ad3842d10ba70fba2a9db72218dc3cedbe357122e2c248c35728817351343c1a852ef426847f2a896281436e182c70969003828945a5a538909b4f198deb3bd08213b4d100f914d2a2f131f72e292103cdc53d09436f6226026527a79c09a06fdd96c235737281704846200c0f7134f61b6614d05a7607ea1670d2bef33f74d2153480c9bbb7267879aa0e5e1fa1993226840782964fe029a91a9538bae595150f8b56ae6bc3cc4767ba941afabf817a040e0cbfaed792a51af03a2eb67235b669e3d958248265e7cfc2ce547b63e79e260e2614dbbf32eab5ef816b4148179c1c110e56b5cbed12b68686004243d9c99abb2b6b30269d80401534789ef82da763c3eda83416d13568050221c4a9f3aedc5bf7f71f698191ac9f9d2d9078ae974a59f26e274376f342d6128501fa0a4bc273a3ba38f134a23e9083d3b2ff116c2a80144d7011c77821aa2fb7689cf99834ac66db208a54526f7ea03fd8b0eef65e35e874e2b17c81d2ab2477e5c40131c242d438fd35f6b26263d4a40b05ae86b99a8699d286c221091ae321a8389705ddc1824103a56fce913b81ddb6aa42bd898393f7ff204aeee751810d801aa7f5a3ebcc50225f48177b17e5ee6598c74c7831fa8cbfdfd9e6ed62e3a3101779914f175dcacf40a3eee48ea2650c1c9e4539964ff18ed48d54a55744f02976a41d0d034f3d438009941cb7aa274fb816ecbb618f52bce79f1d233dfb26f74a2b949b82af30992fced9f39d24f0a384cc31b5344af57b2f6480fb53eba7c4322663392b57d88debb36e39874edc1101dec53104be616d1fd80ddd7c6a7b4a681190dce4cca26386744585af84bd22aa627f67e236e56f51b238f2bab4fcca87971fc4890792426f342d40e2667d098c98122228fc4e5b059bdbbf3efcbe65dc81eafe542248858d681f11c3ea356ab866674b07a40046ef04ef74b24c724f9068c574a195bd25dd5b1229de5ab450e20ab0ba303affb29535d68076d515a61bbbb93c3d10af9cd1e681024c2a81b0104f4c00e4c48e548c86f7b3c1c380f302493946f9f2c67e0491bb90abf2d0023e7dd4b9949137843a052d8acb3cdfff3be21933db69a824b57f69e180308e1f8e55c714d07b295aece0f649feb23e532a74ed57d2a648a912c0f6ed02ea1f9c4253be89c3aa92c833f3610b8ca41f623474c7d3ac7cd193d4c712215f5bd8404b0f2d8d94432d6254652d0b095e929e8145728a72185a828ce37353719b07970f096bf5c1dde6a24c3c3736700bb04606992e593914720a2b5ba4dc137616737010281bb288a0216eecd8bdb704303aba6f4d22596785c5a0d8c4945ebe6b38751c8f7d3199cea76a013d5478143e4f2ecb7e668fa45d145fc124d022bd588e7f7cc66dcb15f4a0c7c4009e4586b5060c4007bd08f7bb4cef4a14f3f2bf5017d2c01ca31130b4483c4e546f9f72ac4516d512c711cf5be514d8fc57fb3d904b116e978be388b9889fe75db53901b3b95075ae55b4179e8072a3bca3912c60a7306712d21baf88b4e2a8cc9500c918f1cf4a4832b9ed88deefac8adaba9d12763b4d7578b5e71bf0c2f644c5b24a145c50d083c4d94e535590a86123332cf79ec595a2366daf2bac2b1192557b31d4aeeae4198104d755b5b6166c0fb5578acc329d258f7b745892a93a59e42cab0f61f0988f8a3890e0267f55a52c62826d306213eab99cafec6c6f94ee260825e984e6274340cbb28d2782d08415e85ffde68f97b7c2b143ba2efaf555b7f02e5a6d6f1a4daa98b8c7973bef10f2da8d2f49894cd34153005a031b228ea9071e9f0353a4d66716500a685cdbd3d95208eb875970c63d200ca63763fab6a4bf97bb06f2fc5643fc1d6c5748ff4310ff8b016a53213e54c89ab2854e8a7e409f1544590ea7fc9f4bd878fd4d60c2dacc9dc12ab0be464b238ff3a449bae4c2c33103121f5b21b037631ee02c10e841c41e1dac311f39dd87bfade95018a4905747c4e426a9954003208bd5ca2639054d4b882fc9ee35937600446557b17b17cfa5ed87a83a9e4b9f69b5459d3f4bdf5417c03943b03da82da7f56305e514d07b97b35f1f9338e6ab8417b29131bbc5879691a60c419c34719ab8f71f4056de133ee3df4eed77016c54c21e9a34edd00ba34a0c6bd0ee8c6a6f12077f36bb999a251d7b40ddd76b7bdf7de524a29659232a8079007e1072ecb9bf6d09e21f0d31b5f191d088bce501a5ae363737f3de9a2cc9ac84c5a36a2652095c919d61403b0851ee58f03711ddf711e5f91a4dfb6d14bc2ed4fe14612b208b38b98c5c8636aa274336d9b961eff561a19c1d8a9c43ff2780487da0f17f1a63f806938b2fd8a15781b4ff6412adb96b6b6fd5138d23d4e977e176b6d711be0a9622c51ace651ab0f13efc147c70d38fbdb92c4cd9c41f0747211a4a98ac700d20fb3ad290a565ab5d52e9f52ea53cea8d9c4ca2f2770f5b9da7233290ec770b480bdd9f986d6ff863eb6b425e8d9fe2e944e2770357fe5b6e7a1bd6f3f6938cad854cb58fad8f856a9f39c4195a7060ed8b2ab9d325f245484bc4434315753aad0f0157f171bb4a3fe54c4e1634b8df2e2cfd591dbdc572f870f39f5286e4d93215779bcf9eec9301c45b0656c6d6e3de8de746d62a6e0d7c25165e74ca56335b4dc7035dd0c797073773f3f670d72349c8c0ec011041a39996de79c537aa7471ab6de9b3d5a200fda5dde5dd7e5ee5b96982bef46d77203e42b31fb5c68a3d32e2410a5e42aab4149c357f08fdedaafc32d37dde3cf397b9ee779331c7f1c41d0e6bac7da6feeda5bd8c36e4db72c3153f0bbd0ccd55c1dd01de690724ffa7452224839df2b4e08b68dc6892868b67c3932837c9850a3c5c546a91231cb30836e70850ecc51c857f54cc7ee7e8742a92c980138a670bfe19fa01ebd82242819b1eb1fb16b7e6dba77237ba88de8f6d548541d23d88210b6d0da56f398efaff2024e86d9c50afacf3a03aeb342e703ca11d75501acbf829328b554e97b350848dfc70a83a7a2afdc4fed9af3cf5402e4767fec3fef5f715bca3377ad61b5734b938a4393fae236a97286c4e16f028335feaaf38bbb6ea94517a5acba05f2a0391c0dcd4ed156d9b2892904d953f8b17fcb26a000b27df314fdbe0b49af5dfcb7c7e79735e71f613d4ecdd3b1edece5c8cf3d2777f66edc53c945fa28f03e87bd1b976aefe2577b17fa85728f6abaaea3337325b7ffa4a13b9b0b3b175de700dcf4e863577daba63dfec982b91aa7f560b8ade9c982ecddd07c8f930533c5fa3f4e8262e92b5989d6fe2d9f502266736ef2e28fdf1fbff6f6399cbb1a3ef674e0c71e16025751451545fb0999205b3e21b3b379d8f209999a9d5f7015555441051066fe07fcd2886edfeabddc6d6f7808844d9ba0fb8189fcd6c3915feeceafc3d69b7f6e9317dffe486cc0c796dbc53d98fbae47ffebcfe36a93fbf6edb6ba3221b99cbbdbd5bae5bbc97df9dc775c0955dacec9dce2a27b37a4ccdb50eecabdf64fa4e0c6bd1b138729076037763ba33e7f29739f4d603a6d72dfeefcdc1dabc9d53aecce8ff54f1c805377d9c5e91987aba28b15dfa7fbd670b1d2d895868b95c6ce21830062c71012486e29db150565e80c524a29e50838897272c15bf792da35e70e942cdabbfdc01142d4c727efa53ed62656eb10b77dab5d5cd41f983b676d23ff0f6dd3368d353bed0670749cd1e24816fcf4dd0792457b1ef6b30d61f2d7fcb5661cc40e24a6d3b848f3ecbc8e461f5b5701d6af6f23e7d38bdbe737d9b40ef1be0c457cb3c90c6076204c701265bc18cf1855dd5706411d237523bf999e8589851370b8d9a5373d77da2690c3daf56f11f93bd9ee7eeb7e7b288066bbf4db48fe9986d99eff5101b42516b674828a99cd85ddd46b00bf3d7add4dc92275188ea57fe1c285098ac9f4a31f2139b128f9d3e9598463c989249cdbc4831919f92d947b84c5080b93c9646251e2c1989e450cd9a2a46405090b16b7ba989d66c4c3f1f7f51ac0911f7df595116d8244dda5ffc0b74bbfeded4ba6771917f1933c98d29b3412738ffc0a0fc7882e4dc982b510387a8d0edd7d9d4e208839fc23187f47859f8df187e1fe84a97f7f7c85c22a9064911bff0a4f47fdfb2b90987b851e57fcc8d720be326ed5a77bfc15f474cc34c0b610f9bbcf7bd9be7be9a172a86ac67230fe4ebb011cbde3f80a8fed4b9285c5e3771c481612d3e3e7b6f0f424e107be4df2a6703c6912ed7930a5df4abf3de71d4928378b506e53386eef352ee2dfdeb48548b05cc4bf8d23dc0c0e00dbcff07070a991ef31b749fb8c8b237a2c7d69e46922b58687b346bc468655e32b638947e9471ebf37f29df7521ae9a19b9205070fa771117f8fb97dc645fcf7a52652858e021c5d6663fc8e83bfd71ebfb77c85c7d7793af28be729a91dddcf5bfe1c63df13d3beefe1dce9d108957def18c07b5be09c3f772e140cc7fc85635562e37771195fa18f1fbfe3aa844ce177c10c367e0f571c6c3c635546cec09ad3375be82d17ada6fd66f41b51d698b5dbe43e36b95a87b869ecf93436b827c638e7bc3fdfd8cb8676dd34e6ca1a961e19af8deaa4ea52503e0daf4f6bcfd0cea1aa29f3947f1eba393767c7f6983d894d33b5d3745400e7964f98e1668f758755775ebf77b67f65555665b98b5f1f2ec48a206208d312e0bdee52daae4a17c0387db6fdd9e3a20d6267cfe4b101c82367d859c39aefacc9f295a947ff1c05e863cbb96ba6cdcfdbb22f8d7d65a0f6bddfd9bf5f738f8b3348918a8a28f24c9ec9c3e3a2a906a0063860c4113dec4b19eb39e4763d848bf64d2f00ed103676f84a06c2fe5395fc3ba550852d6c3bc330797846465883ec06fd1ffb4e634b19fb3d653f6b20692ca901df3567668c8b52cad329534a29a5140683c9241572cba2f15d5435613465df67cc9cb1730632653f242fdce05e4a168df7f5825ca96f477ecc7bc58f6001482edacbdd2609709c38b36620b5eae4b868715ccc19d4a33ff72ed4e73661a3dde384f5b02d2e7e610d1781d8b7d64340d634cddd3f87a4e1f81618c18ddd72d5c7de74a5c14cc98f6badb556b7b19ddb701ce638aed63ae66e7695d223e81155d35e87aa1e1ac261b794336a0db6f51ae93290dee837d8d6bba17d8baf80ae6978d87205d07fa451a3c5c51a9a411b1b72d16ade8d29e4a225d9f5a5f742b267900482c1ca007ac79202678ff2c5658ee39ca31c8ce39ec303e8219535f01496a6c76dcef2947deb3d2a2aa28835acc66b62db7a4d0dc0928babe48e7f4951b369b478f5e4aad2937efc6dc5028cfca8e2362e96f2c89f569c3c2ac009ba4fe725349f0c13720437cd52455f7e9bc7a429f93af5b384c2266d17a7a9367072fb464199a29c31a79433dcb93a5d521fb00b60cd9d949a765f6e6ddbde4e1b4e9a6dcb5bbed7354be56bbfadbd9a66b7b5d2de9b4dfaa38832ece4b817bc3bcfe3388f7b17ef38dc79a17dfbf8ca7729b1afccb9a5b437ccef2b33f4196a73c636cc9e115bf82bb0f64a794b27b9ed763dbd996fc08154a5c723f6f632d4fe66ecb5d65a6bad9acefa08acbdd65a6bad95524a29a5b48e22c84a4899920fee0da4aafa94527aeffd14d4f8e1be1224b07fa2a9a9848f1fae56e23eadef520a40fe25819401903d8c3ef6287fdb7efb1aca1fae8eb9b7bd997036348184e550a1c44fd016e2c0c40f24a05fdddddddddddd6bad9f821a3f54ad04d54c6cda84d3ae413741f62e0a93935f9b0047bafdc752e984a218eba8cf7d8eea634f6ef6f09db50f33c5bfd0ba2e736d17e462b555d868a1d7388d8c43011ce9cf2a248bdc5466c64401f4ff16be00289b08d2041582e8cf18ae6816b570f79e939a8bb988637ccc983dba4ce831e12c7a81e38cd9b468d39735cf18c92235cd5a77f74d7bad7e0eb19eb49bf40d2db4ee81f0bdfc1d200f405a6bad55fbd29caf7dc6d13e6baf0961aee6d6b41faaaf54431b9eaadd17bad0547d171b39678cdf7bfca3bf9bbdb3da1770f525cab63eccd5dcf6d4b9b50f52ed73ccd7b4f63eb666ab0d7decb0876fac7d9829f45de8a5b169b817f9f06b7007e0083e7ed763e9f1dcf825ae2a6ff43e0a6d78ca6d0031e9a4718ee33e87dc9c36e99e877deebb8d25f7ddce7ab260a6502fac9ef2e1bc4ec16b5e9f7200fe80e288dae66fa1cfbc60aee6aca1d23fdf2a55daa6614baa060ff8638dedb9034b34565fb306e9c9c191898901edb8583644433e417ee4ccc804c55e3b37ac19d18fcf5691e113e4474e50ecb53323faf101f2c36764413cafd99a374533d30f38b5e987d60a0568395a69a523957925756c474ba8b54a59abac33f3e49cb3a6892ece8ae2a2cbd8f6e7bd7aec41e526e5c6936d6dc2de6bebab3661795c9c364f29b5acbb4a85e4bdf256a17aed107baf950db1970add2b746dad5b1a4c3f60cb4dcb4dcb122dac96255a6e5a6e6438ce8405d0e4038e1945a5d6586b7165dd8b6f65d94a036bab4dada934b0b6b26ce836071ccaf400c74929e75ce1b8e9d3bdca19f25564bca4b67c8e8ea29d180ab05a943b7d34a594dbe917d400db14fc3de7772ffd0984dcfe031e4854e7526a3a671eaa4f2461b365135b3e11e3b339d312e0147271cf153d00472c3365c6ae8ee0d41d969971558ed154c532b21ca3aa2924cbb1ed429dae79c80d707083146fe09e724fb9a7f8393880f329ee38edfe7c931bc0f13736f19e7e7e13efbdc398c39a7ed1c54d66927dfc28781b5342d0e7389317fa9cb83d12736f5ac60eb754bf01bc2f51b0e62197e87e763fa514a0bf9ca48d08b46f7a0338faf9da9b8cb40e713ff77faf7e4e6612ca45edfffea38892859b5bfa98daf7ad27c4fc6e7b68c2cdefb409a775889b7b4e8b1ca7e50eafee5bbf01ebda04951a804d40c18aa1de4416010bc672c29650b07a5847d8774b2858ac3db5fc415295f6a34a8d968d3b6ed3f20e29da2e8ba0ce1facd316d47c0277ff99f34bcf624de3cf61c5f86b381fd7b776d66a6ba536d3ce3a1d45ddd66a2b9dee0329fe099c5e6b50ea4e234bfa329f9800e7535895b5524ac7ccc160536ab56a43dfb7863c4c5bd610dc52d294f48448dda1a087f7b0f43969827db5acf36ba17d2ed39a6dabfd6bf373d4e6e69cef638c65074e47b14de0a45c5dbff4ce9495b6d6d699622da572c668ff5efa72c68ff5afadd24e27430f9312ba59a3f8e1b11687b8e53d8ba0caa9c6bfc4ee071c678c4b15125bb2a318074253f655a40f891e658f7c9d40952ce64cb57dda731a79ba4768cfd59ba67accb4453921974be2285e36091fd98c06a13d2daa9aaedbda5ab435a25dc8895cb43f12fa108cf0370d43532132655f4791432dc5b6af93d8f67b6433296440ee7297bb680bb75a6ee32bb2c6652ee44398c77b8cd86ee090fe4858b2e12b365cc4d28d386dfc2d2edab002887f6c71d136c6bc3dc9e25fbc94a0c9f6e21d888b166bef0606e22e1755d196d3d60f38ca1735005b00317a9511bb59202aa2891ec537e9f1493fa2c7d3c8532ff498f7a6a55439104fd91ff5f4a034b67191d2f49c4e797bba374d715cb432196d4d310387191a5fc974643399684a436d424a6576447f1b95d1d61470a033f6b7c73fd296101df29592b74f89e88c16f98a3c3dc9dbaff6690f5505158657ab5fce089a39cf93f82c737b48a57825aabeb8b77a08c305eef6e78ce130701265fc7cf6a4d55e9cb58debbcd1f75a315232b1203995b430419db878e1ff9b0bbb4c3dafd7f346be02be949c8a0796eb34621ad4455396fecc14bba2b099625db0b9fa5e19846d0bce2e876666ab5142a67cafd6772ad8f6bf178661180672958c18ddf31076385dcbc5980eec72f20f58d5f972f8ef8bf11f0783c1601fca7fdc6cf6c1f88f73b95cae4fffc7fdfc7ce17f1cebfbbeefffe37474be17ff6db3d96cf6b9f88fb3e16cbe93ff36180c06fbdebf8d88e833f96f73b95caeafc57fdbcfcf57f2dfc6fabeeff4dfa6a3f391fca7cd66dfec63f1df66f37da6ff34180c06fb4aff694444dfc87f9acbe5727d2bfed37e668afdf948ff69acafc5fabe4fe7d374be0c83c160445f26fac0fffe085fd1fe7b23240bf79fcce5fa7e87abb28ba6eccff72f72957f58600beb7b19aecaac8ffea7f3cdbed937fbbedfb2cef7e1d9f7659bef8be1ddf872201abb18d8c74803f8a1c06630186cb6ed8730469a73fd702ecec5b97eb6fd0fbde7589c0ec7e2581c8bd3d9f65fbce85ccc389bd96c66dfc509878211c160b01393adc5e6fad95c9b6b73fd6cfba812edb4b1369d8db5b13696ceb66f42925968b3cde69bfd6cb3d9f65b9870498369441a6cd36030a26dbf64e4aed05cda8fe6d25c9a4bfbd9f64fa43480768f3888c6d2743496c6d2589aceb6cf81e1f7f3f47d9f1e4735353022180c46b4ed83dc6b241cc7b9f24f76655776e5d0374743fa1e0b9a595927b3322bb3b2ceb64fe96713052986715fd8e574382ece74325ed8c5c8191d0dec665b1bfc856ddfd4038e799667b9c8553b7cc571158e91c38f5547871febce1e7d6df98af8a3af38902b4c84f263d5c11e7dbd912c307ef435c65538a7ced4e46c3b7a29e40af7f44c31932c1ac85578662668468808e62be116e40ae3e074e147b2bc70b9eaca642f598fcc47c7575046902b2c73042092c5c58f9edab8eaf6f4d09b1e9c9e1f7bf4b4c6574e7ef4d40572758382280cf6e8298d64311972d5cdc999e5d0981c215f390991abcbc3434426595a0471d59df999010adaa31229c8d5c5c179628fde79240bc98fac4c0644e62afde87d07727565bc077bf4de922c2c7ef42ee32adbd3e3343d6e337a8ff115131572658382aa28922c233157d99c1c59ced0688517e4caf2f080012659483baeb233333c7626c8cf1efd744d24c895c599291627097bf45347b2803ffac9725595c9666bb4c9608f7ec640aeac4c0f57d59ea29e2035ecd17740ae6ad01cfd11bec2fde88d902c5406c67246bfc3553587a6ecf350618ffe45ae2acf4cb13fd3329a090208c9827f34eab047bf472e1bd11d43ae2a0e8a64a93ffaec2a3a1afd94ab2a3353ec8f464fe2dd18bdb688619848078d6139680c8ba1310c45136dfb304c6800bfc7b8270763dcb3ed8fe85188317e8cf18a171eea62d9bd98e4a23bb9f7a2eebda00977ba37e779b6fdafc55672672ece9d39dd993b3322d14a325949e6c9aeccb6efb1c8a69ea0514fa9c7ebb1df8de01536c7f2e4e4e4f06cfb1ce97e7606e7c793a7c713a8ed0cceb6bf8176ab322bf3e92aabb22ab332dbbe8606b0ee1107a93d413d3d3d41db3ea74d3b92d9762493c3939393437148bfcb947ab33a835367ea0c0eeb672d0657eb09e9a083f792da33bcdb434fd68154c83d32c894ca72569147e49941cef0b417339d01a4403983e08c170bbd204fe629fba3180ae42b9906f9f68466d906cff00ccfb24d49fe6c7c85e5aa1d3ca12059174e19e10ca24f65549567b4cacc15573467b2998c2baa327b73ee09c9b8683fcfa8aa9b299aab2e099962dfb6b69de5599e6ddba1808bc3b6bf753172867dd319c0fae3f792a017fb5edbe220be327ab11f5f193b0f7d631f1ace212fe605b92af5f63d216fc823f215df42bba98baabc184dfdcc153853ec77313465df8bb9622efa13c31aa59ef3a8c452bc1c782ab2edc8be766f5d37e9db95751ec2918ca7ec73e1a88ba12a2fe629fb31315e17038e40483d7efca3195f913ea9cc76447fee104e98a7eccbb09f0a4fe1bb8a37e4c5e8672fe6c5c04ec655944553315d69ec589462adf282bc4e7bf4dd7e280e8222c4ba5c34dbb20a5b3a31c5cd9e426883fb7adf79df8dbef3fedec730ef3bfcd7fbdb62f4a1d5dab9e79c8fb6376990d23ad2e3cbda691f6ff26e6822709c5bb301240279f4989b07e7c2a4e44442622a95bc17319f7c730d9a0d9d1ebb4ec7b7efe65efa9e9ee759afb39d75a1db86f9a4ebc271feae236a97767599f56884ca18ba1ff16e7438ec6ef19f1e0fe6409265f4f4b95138b7874188ee3d4f9b8c461ec97be97ea4bdf7340dcfd33582f80a7df7f1151eef3dbed2793aa6f7f7a72784f777e4bde0bf1dee9e03eb9bf2497deeb917a3ff46ef5d8cbbff7e34f260bcefbcefbac7de1d7523efebb8efba30572ff4ad63f4f2ed3b72f1ea7b2c818f42ba47a15e0328b3bb01b49f0d5fe1f1b54816d2d327c0073ef03f12fe8bff7ee1fd159814cafd7d9a4738e21f3de7e9f0fefee6bd14c9b624b2a51353146d2e874ecef04c5ee8ce46a8ecb9eb731db7695d67479c67cd479f1e4bb0b1be2147afad74349a606717bb51f75ea7f3d6d2324e19b60e4ed41a5e53d0dc6ddbbc17bfd87fe44c01a44f73a620483b2fc7efbb3d952cf73def46d6dd952b584a6e628cb90d6f2678d326f8b10d2d3d0584ee6ff73cee5b1d245c6dd32e6675a1df78eabace887fd3912c13099285dbd9f4396e7b5c9fb3130701844759af00e904bb2970280d45c6d5b4458a142952a4489122458a142952a4489122458a142952a4489122458a6840364579fc587f18feff9f9c3c0af525257f3abdc9f4a5d293480f82ef79df75af699ff3d7fad64aa9b23ca03553ae70cb716baef0ebd59adc372253d364cffad2c10b22c7e8a494b2099f57f679cd559e29dc2747a438492a0a6ec38b149e9c0e4e5431b3473ce42bbe229d8843904d3fffe02a62367d2c4431d10ce9ae5e15d2400630802f8062810a50209c802e4202117808c020e2010e3869808b2118b00094025eec80494089102d82d08180d38b09103970986eb0b071801f4a9bc4c5000520116045cb8a051cc0480dd58a27001f0240a38751f7a9a40060c60e3cc8d0b69c1275c82106276a200318b880052a408109142181084080880738a001433060010ad80193002182d08180172072e0b861e3003f6c17031480002d2b9601d450ad088046007ce8412505003364f0b0434ad42187182818638c31c62f6150308ef1281f0345631c04259c1b07f1814216835121468c9eec13c3183fc63b7830583f7e8d73ea8fea83ca5377aa4e0502c6da374a0a7ff8584666268916ab06056118b3d36ab576c4582c280cb48848680cff402e42df3074d8d9792901e6d3c3849313570e2cd6cd0c747ee0d40085b26911fa7e01f47abd80621011cda2a89989614349c9108a8fcf4f15848280ae703a056111fa3681f1e3079020f4bc5c43309972f4cc0c8d123837362af04d02f47abd80c2a0201919626643662091623bad566be75f2f9e264ca09f204fd8f13df2e2e6a6650317909c1b781ecbc54c16c936d8d0c8c837f8fe4e7e7e60581892c5b4a0693e19266795ab426346109e96141972c67c170f7de348558d0cfc587f60e0c7aa73010fdf87b080ebf7af31524544057eac3314f8b1d64cc0bd4711ee4f81a44a0412f8910645e0472a04013f799f3644b80b97544dd6037ea42f07fc487b1ae03e7586707f6a2355d3c5801fe9cd027ea4380af092f7f9b3c35b0c49d584c1fce8b304fc486384709f44417810a99a331d3ffa0f027e74a0177fef711b207ef42778240b8b1ca972568e1f1d088e1fdd75c34befae63e347ef81cb4895bb0ef0a3d3fcf0a3db6c27bdfb8fcb8fb38a22c9b22226550e33c08f5356801fe71001fc279013b5f88e54f96cf5e3e461f971061980ff74519b99426bf84f1dc9327affc9922aca52fd385b2b3fce1c01d070aad343aa680f3fca221f02a0e2df01b9a23fdffb1f2159b6941fa50c003fcad88cdf21a98c17b9a2443385a67e943c3bfcd8c2830ca9a2b320240bf7e28f3a7c0e988522592e96d15475ef86674063a0c60586982b1c64013d3a1154952b00a3c004748fb9c2b122f4e85b045485b304f49823a021a06de60a031161c3a22adc7a00cb01ac06b074e60aef0ca147df388601ae05b814e0fa992b7cb3438f7e6330b004c084d0e389fe249aab5b14841e9dde174dd1d7a11130672fda66ae2e1010362caabaad1c2c1cac1b2c9db9ba3b36745c5475630ee0fac1b55d73756f660a7d173dba8dd194016005801180be13cd95b52dee33aab2d6529db9b22bcde2b301f8ac868d4aaf6801681a3a9bda187b33536054556334453457b568a6d00f801e4f3eb87a70a9e8143d9e4000e8119c2143136dfa744655f5c59aab0a545b37735577660a7d1ee86c073d4bcd443dba0e7a3cc96428fa66d3e7b24fd05cd1998f8f0f9d056dfa9c0ec3300cc3d0c397303a0c515e3f8a0ec30fc3d0478773873e3f745605a120a02b5038a0a004c93896730cc6ffffff8761f861f82d3c98f01fc6870f23fcffffff01239cfb7f000942cfcb358430d43042dffa05f47abd805c9c9c9c9c9c9c9cfcffff9f9478307f7212fe7ff87a9c27272ec2b94fc24a5395d8f371ea4db5a92af8d7b8b5d36ab5765ea05028140a853a393939419d3c981314eaffe4ff04857a140a15f4229c1b152423438d990d99e1e424f622f4ed2206dfe0181c8363f04d8b92929292929212140af52854c94b185449c9c9a3fea4a4a4a4e43577c98ba709403f419e8042e958512c162b32399d4ea7d3e9545252f22525a7973025a713ea4b1e55723afde9743209e73e85b4456de00292436f5052a2678b17d0ebf502626132994c2693e9743afde9643279302793a9e44f5f723299de6432cd4cb3a236509a379c4efab6765aadd60e49a9542a954a2593c9f42653a9e4c1984aa5d39bfe642a95be542afd908473977e60581892c5b46032f99084be5984beb91b736f6eccbd59412291482412a9542a7da9447a095322914c5f7a5389447a1289048404448789203c3b45289574ac28168b158d802008822048229148e04b181208969ef425921ee7063508827383a1af20c75bcef21690487a24f4bde205f47abd80469ee7799ee78120f820e8bd84013d8ff4e09340ed799e6c6e4f262453449406b0b5d36ab576beaeebbaaeeb3ccf7bcfeb5ec2785d07bef7a0a7c7d9753c5f3877c7d3038518cc270a9ef7fa42dfa3181b636f364dd3344dd3baaefbaed35ec2749ae67df75ea7c7a969136767eacc1f3ae83a1d2b8ac562455cce39e79c354dd3f24b182de7eeb5ef66ce45b968c648c19a3573660acdf7f6027abd5e40b7d65a6bad39e7cfb9be84c9b5663dce5a2590dc0291505017e48c16556159dd99abec736ab5b0b5d65a6bab7d0953adb59686a551a3873d9ffaf4e0a100a8c81993874e86c2329aa2376701abd478f9f8b8bbbb4f33f87b305667c744367d9310e82ff39976cf4789d914cf36c55980810270144f22e8b369f6a129bba5dd70ae01be4e3def93ad0acb3c4557d200529c9f7da8ea00d9fa8461532ac0364de9a687001fbbbaa501030520966dfaa3097c60604e2efc08911121428408112244881021424488102142860c193264c8902143860c1932448810214284082972820aa10dd2bce57f276750e9e2d3d349527f1f7fd5ea22a3664a7d7f0205437bbace62ee02389f767b8a61cfb7723581664a7d16fbf34d50802638f2d4630fbcfd25ccd4593479d16369d3136ca300cd552853ea079ed7a8048cd9ea82dea91909000000f315000028100c878322a15018886a547c0714800d7a9e4662561a8bc4498e4219c418c49402861004000006040060840a038ce89fa0e7c37a4ed4e3837a4ed0fb819e27d6fba1de1d707c1bea3d819e0ff43e41ef87f59ca8f707f59ca0f703bd4eacf743bd27d6e343bd27d0f3819e8f5c6f33add5843bacf4e57a50233356d29eeed5c170d5279fd27a89d4993e4980247f2733cf3f89c55342ff2316a02df8c2296708ee50959c3805bec47e64cbe1874cfbae831730b85d6f7abab3f31cc9107796e8713224bab38588943cde26c0f7c8207a3ba10c7131d309958d6280cb472c532e4df8e083a62b543203570faa5aacbe29572457a946a03480ea9b33e0d4cc75911d9140dea3e60c9039d4f451f3694bf2c3bc5b51b2dfff0b56326844fdc2274b21966c53d4523cc9f280951e445c0f0c648f4a73693ff83122af530d798c349bebd750fd01fbdad7f722f71fb5992115e6be9e892f7313beaf6c042bcd4fed9d2a09944b55e2c67bfcab26fe5b2a2e0228d79354d215c78a22399038be857aa12f30fe379c763082e9a4900952579c75f2d21b443711698a9d988c9ced4ddab68f5dcba4c73a5eb4cd2a1b663b49859ddc22cefc7fde976d11b2607b543489a2e07f1e2f55b2f2413630222c6b9f6983a3c362f5896e304ad816dfd3064687c5ea0bdd6084b02d3ea70d8c089bd507ba8148615b7c4f1a1c15168b4f64f3cad5d9a9435ceb97d72cd8ac19cf2e9271990e02957a088368d07899dade7706fbdf7b0ffddffbddf7d35ffae3c4dd139d4036194cf4a4b2ca6402269729a3273a810c3299e8096595c1844c2e53664f7012596430c1e67acf3dfbedbd7ffffded07f5eaaabf7e3debd5319faf5f77fd75d4aba73ef0ed4336eb7b197928ca6077545867d6c8f3d357ea7d6b88d48f11286f69f2e93aa2891faabe4d61826f9641a09121b7fe899c6b2c720f733533a7b9f7af3022225079ff83916ba215618a612c720ad6c6264e267642543cd2da28d4e8b6ad4cd0cbfc3b57a4e3881fa3698a48377ddf836b19d4f80b3a4dc6749d74b3e1c3b374640b39e15be6b29adb3da16064fa701b6d622cd74a3a6e00a8e9cefd34c48c7487c45726d25d431772235a9ac2c3eab7104c7cf1b60cb64e5299719daf4ec66ac94d6b6b193aaefc2a6791793bd9c6aa17c14b4e76bfb916726ef2c5f4ca49db78ae7529486ba909f70b563ace26b54447815c93e7bcbe1f97c1d02763bd96ea8c4c574aa2055e42ce7f1e39fe68fbd229839e8536dcf1aae6c9f43a3f3c4b75968e93be652f666e4edeb0ab973288cfe68dbbbea23141f78e5e175424a4b749a30542ae7ffb41eccd5232e176c1ba8eb3e416d12891d5f29ccff7e33218bac9d8adb909296542a19b0f06999302b6c8fb2b845c0b8f4cbc341c6eb6944cb85fb0aae32cb945344a64b53cf7bb0f8b4564f021859ccbe534d2462d5d5ac8b96c63f9736cb3053e5c191cd602c4b05a8c9d7fb7a6486eb0d4a051638de55df2fcd9025f87fdedf30d68b9fc00f3163585ca0761bf4bb8147307ae5fc46a0d7960404393e048b985ea074673cc7f97cb4d409ed5a3c6cdc6d0258e8540bcc67460e910ac633a941a67cd998c40778ce135bb2c3660a07acab8d9d8bbc4711288cab0185409a4e8d762b91eb17c7909ff5715013501578ea6ec6173a4aea3f2f5672828241aaabc0634fde583857ebcc9ba8dcadfdbf325f9874288e96c3fd6f1a1eb172cb25415f115a0fda8158b05f2fddf329f1e317a80097b471591b405c85f32450e18d84e66cf1a86bd203c51f24497403115ccfb1361cc6b8ecb8f3e72180b83a8c04662c0a1e7c733c2a0fe1d22630073266a9ea3221c5480c1419efa621c8161c2977ccafacce544ac218cfc03fd54b07755ca53fdad581f24ff64aa9672bbd8cfc8df00fa83566a6911747010179a9163e637b026460f70821effe48cdad029e687425c70dfc0686244076fae4871c1930f778e0f76e20b85b06d805a9e487d28ad2c168a3bcea4dfe50080fb2b634adc0f152295affed7e3a34c518bb46722c8a0d0d00ad66e81ca97c6436ce87b3b60ff0fe8ee758a61616ba30702d5c1a179d98a098432f8de895a22c8b8876c5a72cc090aaac1946638a50683432d3d77755b2056201c7e88c3cde788bf1a54cbf6593e2309074ae5d3be0895323bc7ac384a08e79dbc141451199c5b1098c78586891878e7423065c420a57597284583e317a9ba4b1c8fea8f832b06feb21c7317c9c12463417bf8c20c792b3d75b000741e9160b7a9b2b9b928e4c0358902efab692272a96a51d4017a2e3610b3af32066d40c43bc574278b1f0c3886d641ce4695ba9bb3e4a9315e4b70f37e02b7e91476f58cce87185ebbfc7c604b3c009deed6a73834363933c93abcef890d61261f9a389cb8e2b381454c0b7fcd7ed4fc1d4647a03d893cfdcb3f270366153b16454607408a79525d60d513f976ef293d0748bb9846e6e2add108066f028175837f17566e56b067a6b8df75b6fb7be2e6eb12e6ff6278e31d7a3d9d3287ebf3a2907279c1656f09dda1439fed8fa2d6dd8b7800cc585937d5b77ff780a27495241a1e898499ee62509d0ed5e09841d449a468ca8572ca40e39388332f132b32f039bd602ec27b89f28fc4d51c7138f07d133456f2bbbe179c07af859b4c36b15b30ad99ae566babdad147dde5c8ed0cfc42d0cf92ef6c38eab8099ec188389cb880eeba6a2d57164bb94551c74bb8341fdb1ebc04af572db5b62eaf7a1112aba0c1f3dc7545113f54bd9160b62e14cae38fd6e11fa8341bd7a94fbc0684ec163ef58c62a8ce65318d9a28b84683a591d240d1ed088e228b47fc3112c0041a66f68245b183758928a43987d3f989678f34e8e49a4a009d8753c3c5fbe8e79a5ce55e7a50bfcab7966a90bfaecfa3e310217e54920d9ff3d65617233904b3198843a44894edff970e0294066d30f84d5d858963590d20778a06252c4feab65ebf0e561f7744b913f5408e0ce3447c57df481b938902efae5951f0ca4bc9f11d5f3fd690bd1e1779d3e2fe63e5f31527a27e1c2a0088dddc3dfc02b51da53eb185c5fdba50415f5436960c5a2eeaa86f4de2fd537edea681ced75545e86c1edb3dbc641e564a5eb55f467d2108964483a7d7efadaa602d77104c5b75907c55c40d301ff6330aeeee593e5819aff3293976f7eb8f1576afe3521e5accefafe633ea0d2cf4b475fb719ef72e51448755372458787fe362dfa1a1fb4f2ab053cc49263045c7820f317bddaef2d0457dc66c0255db97fe8dfa830bbcdadc7e38174a8581c879948e025973efdd9bd8fa57598fc274d5958cd5fdfa6f9539cbbc9c47910153e56593eee286d34969e2d436c95c9c065600c69e52b60b9cb21a60a0272f1ed58ee15ee4d7e1ef63496cc4469a0b6c05ea31da283ea8aa6cbccef7576becdee7f5bc8878fe1f98409d0cd26fa3f8009a40f9c67589a35d225280a65546616253c6a330e0e226d12b965637358982e90dd8877ab52783838959b393e4a62608ab74ac1db767abfc5d8ca53cab983e3bb8286da6513f5f5500c445494b9150ff969667b63b4ad181ea9b7446e0b30b2d5a80e822cb78b8b878607927be048eb3dd27349a5000c347ab8bb7dcf76a084c20b294de7c2b7928318125ae475b3369240a49db1183ec5a2178c7e8f48f155188fb2b717319eec14ea3512404bfa07ede94f570263f8a102a951db7f3fa6b0d31fb75310f252ee82c3090701109515d36792a23b9407ed690ae63540ba761097abe3082261b8abb6086507aa07fb84001139908b38ae02749ea7f98cc494079755e18ccd06934a65f9df03438ea5e78e029ed2c26845cf545b615687dddb26034117291b8fe8b5fb930ba00c565d68d711484785e788b341bc112fee907220462b73b44b08e0dd72e1d18b112e2583cfeb56ae214808c0736272c0016ec406d0c354ed807fc82dad3e6ec95913463b74c84a9f695defdbe666a89923e7147eec776b84bd88895250ae2f5388f84effd1571997c395a86004b12a7e3a9aedaab975f2ed99bdda76f2b434b25ddb85357692736f632949c171bd3f8d370edca12a5464fd5db98dc4d50093ef1989005372c580c82e067ce8a52eef944b98530c7d9c5592ffe8a32e43e0b49ba09528d45489f15c366771f359c3ccd5b186c021dde0275c4c813ae52344ecab3375758cd8f9135f10cfbf266a7746cb282ce8e824d72acbce0c9eb0fba06ee0bce5a031cd7087902b9816a38130666fc99a263bb8d357e0f57c3e1a67f1c900072e3b2897112ddd8d65c1f0873ce77ca73e2183a095035d482e210dffe10f8cb463a112618a831291a15fed8982d403d770ae0081dc2d4d19f5388b0ee1f190ae2d37f7c2797757da333cfe7da76088aa0462d2a8bcc80e9d3f6290be2318983a0359ba71dbca0115d66a58143febd0de0d41b898c934902b0046465e31c53492357b91bc6e0b4843a9e728079500cc9edd35bcc2c10cf2707f52a96d11842d38b3a7756085d173b83f839ba4a690d176d0fa0cde6762b9a36088c45956d1b733999e463a08399d6d96a4a4aa61731d584e22faf0b4885e9e5837e377a4dc27123630bc644c42e88891c5b182b724c614c849813b121a0cf71fa3ba62f52fa8f43be2076e498c2d8c8310b6323c416c48a882d1c13197b62ec08e873447fc4e94b4b3fc17a2948bd69bafc4e54da9ba2cf843d71c1dbcff60e15036629cca28368c4a22c1be21032f33215f7594aca0a08a8ca799051d6fcea1d599f024648cfd116c5542cd86ea4989c98b7626a0080bbacb1c8f2a7c1a1f7ccb590e94fa7710f863e0163ad5911731b007f89301bc2ba6d8e3ea46300f0b047d0e3b9ac238f309f8688f71131a56ab99e897e992064a0256340c018c20964db4fcc8224f14686fc08ee90617fd2c0f8f5c5eadd7cdb8266dfc0615a11ce716247a72211e9c21e44b57b84fa05fafb8a698d2de6a2653e844c39a0d1b83fbcbbf7ded0650646660df850dea8c46708e0e6421145c22608edf46b79ce665e8c2c1db8cc1b464ba8e5544642528c3d4094bd6241ae64c10ae74683fba8f629fb8276f5ab92352dd2a1a264ef96fdeef177aa2afde48e1a6be2586a3074c27c73481725beefe17e1c4acfddf275d18da82fae0b072dedd184af31632aa2dff5b0874c64262680b6c6a8c058cee1f4361e08ec64768a7948391138d2352db53362996a7e410c7d80793e5a3fcd7054601b6d0c777d6ab52b19cd21c9746488840224908f7d07b2ace536e8d31a106368517260dac2a978de74fd2dae101a7c0762e10c2bbba77fdeeaaf17bc466066468c85e237d10506b5060d78c8c6e1d6a0d5c15cebba71f5f6fd3bdfbfffe63b6fde7affedbd51b3bc97f84dc356cf0fc2a697567ae9d39a265dbad3a69d3e4b6790968e053565d7a0f101a82701c8f1a3927e544b04e30124d638119e000a70188a030529cf4f5066f1e68c40d8faa79fc2b902613a098275050b155372a67c7dad31608fb10cd1cb2e3a52ccbdd9c14f09dbc0334f7863e06fd0289fcc4c3c7b1b408af93c15e7137d995a522760dc1120e108c968194c9e8b3def64b91a55906301c05a44bb995637ce68100a32d8061566cf3029e87d6392ee994dc5a43bf4392added33f101f8d7e0a541bb7d613bc80fa7283a4fafcf2b8e02940d9bad8fbd5605aa498194335d6bae5fd235b6ee1cb2adddd25cc85911d23d530c49329174140a462d2da6b999145f85cc780e1bacccd2eee0ea5c4747881651438d8b5a71a62ac142dd9fb1abd8dcd92b1e91797c531c387e91a0b763a2c254a6fffd1ff9c36ffdcbc72f80a902fc5dfc7d85a94cfee70ff2afdffcc787df005325fe3bf85b6bb7012b884a22276872fce10f25840ea64ac82f61ed12a6b2c43f7fd0bffca63f1af21e98da68ce7fcbc1147cf9f30ffad76ff63f649862f678673c98e2f1bf93d53798ca14fff987fffc53ff7ed38b30553e7f23bc2f4c65713e4dc666937edf1cc265172234e97d8429befb1be17d83a92cfebf01a65806df28567dffb5ab34c3007043e7af1c4cd9a3bf3e8a7fb37dbf41aa4798ca1eff73f36d3055f44b3ad2a2b039faad1cff8bed5782a9e2365b083d83a95c3c58f00d2dd1fa8425bcd45e223a71344c017e605e14d0a7112f48c702d75f34f8286e29159c40e403c08857036398fada0260a9a50a1cdd6290ac67f15d81a9720bf0e882a9c9693fd4600f085321c41cdc2c5c4b8e0b1817a610e804dcf9f20b6642d3169882f7d781614ab425aee07ba6e95eef69bc06b3c5f0d51a6ddf706161eabfea3a1e051da5809dd5596ed044f4fa447705329ea50afe7ebda6fe274d4690b69b9a520061a85bbd3adcf41270753fdb846ce401426956b373892694c0d22c73f93c8a0017830f565a6d184bfbb05c9ee0c4d541890b17068c9b06cc9e8dc6613df11865a090fb3559fca137c52b1362854ff86cbc6d918c212607587d418a1ce98623f98706f298cefb2046efb3c395d7ba014ae8b56e47a741c4a007148698a296c3a63a9f808be75adc474f7fc0145a512f23393636c9cf258a6c1bb671e35d7c0d952315497e082de2f97395f8b890f0639ea5bc1c32ca20eacdceeeb4fe12371b2767390576d5855790eeb50f91c2a35ee997905adbbaf3ac0791eb6b0a14fc20d187da6e8f907e28d476f6a763250b6dd80f4195f85e68d3099f1729c15200e5d9c810257d1cffca07ca3e3d08c1388d0cf29444c1cd96449a051442687c860b1be8cacd7003a52966bdaeaa24d7e0150db4d6db49010fbc0b530db648a6f679fce0a65074ba95240e2afe35c25b47c067913c56bb78f7efe9c69c036f7ff658352b98bff01d723bb1fe3caa124637a7b4da478e1b10e0ad858e6f928d0dee0da70074d29f8da5ddabfd5700ceb05bd30baa5942f70383c475722bd86fd01f5b193407330b3b08232b3f3eab256b8f2cdc76f974c1bfe228e87c818a057c8a322671a195b1470dbd8a46ee7f860586237b5604bcfbaa9f39d9f93ac2ffe11dc8fb3f59c38fd0388200e761b50382074ed348997ea4080d72638c0dfd67e1cbcc4f6563341de8c8c652198dd6c9500e9ea813db7410d6831a2cb56645182ad4082cdd8a104d685964228ae33e471758c41c71e1bf725cecad41dba9bc62bbd6118d6df6097aec7f2cd252665dc60ceddbee77df48e3fc587f80170e636d5da162fecd796053ff5d304851a6750857372719412ec167c29214d62f025fb92b93aec02b9562d221b96f2549a36dc587087f03d2afc6c5c9ca50d0cac355957cda62bafebf7f2088b9f5f37dcb36ee85eff72439bd59070ee29c7db491f92fd5146f156b3f414a3cb525393069329bae8b2e0263211661c6fafa451c45c4b82e6a19bce8e4dbfe83494af35329b5f3b87b37d37baaed1ecf9d853e8d9c8eb1c40f6af206350b4a7c903df42ccf2136bf3012176bcb289b26182b0b5a84d5537eea5099053fe1608721267006b73d8e1f4fb4e7fa4f49fca000db98871c6aa20e5b55c38feac1036b6b15c1316c1a7d241b1da546a71b1bc930cf1a23da8d867991bd6fd5ac0fa75153c04537244e4ac636380eb4849b7611660ca52190519b2aab9b7fc637d405d71c3916048c7e6eabcf5354ae2b9c44e982e8148b9486775f1378320ad52e6e14808778fcfed0020a05810566dcf90d0191a71f36a5c5abf8e2090226453e95dddfb04411198801318de189f1653109c2f1580931657cea9b6e580e939c998f92d94520e4af055cbb974e97f32497406a5332ca49ccc4d434514302a15468b85efd7712865d1a2c7d3d021a66564730b09805bce09a88037a5a3e42bb80205d4988f16479de670a0171607e7c5063c7aa39e838883fd6cfcba8f6401ba731dc4d3677171575cef750ccd8084064723ee456b844d05b1a8a3e833d071eb19b8f7633919e23084b4971309488aaef1230505ae2406ef608927cf3ceb211010408d484a2a0abe549f3ce33237e5da998d22d34e5181aba4a8145ae8a87d89798ddf9dca5b7aecce725239735d46a354a831dcdeb85db03da79df85e594b7143aaed8ee21c6232a919e16f36d0658a19ba6b360665853922d3889894601797341e99775c0527702076a94e73f396acd68160cd180dc5495d05f51d93075a3ce3cc96c2506ee25b1770a25537189c1d7515b05a84407347176dd7746e2ff330ee6d8dad94027d6ab97c5a9409a452398f67a624a9966de663083652fa4891dbf62d1734c51cd6f6f5f99cdf316688b6ec8a7f78f031a68b470f529bad2a8ec9fa6939a2dd225a080d5462ce5c4f241f94d5a4c5b3884b25f956c8aec0773b102a2632de2257380b5aab50fd80e97a82a53e3a579f88bcb8414f8b1a10f6432dd9a00c984b5028a183268af9da781542ebca43487af8fed8e6e545ef2bb9cc16f2ceedf2f9311cf67b4bad7bfa36312fa62ced88108ecf48629500aa5980d53d08022d0e435b28af620668e95381a58f4e0da381141a1a8b0d510b64301c1f290a41e8c909044938389811942b50bb11d089b15ec32c7e90e6ef7348aa9f450cd189020c4ca0933fcd943e811c00acd813cf1248c1788bc5281f00d46c4a2890703815477b8af065f6efb610d4e2c39d5cbb8910df87efdaed73fab23aa92323a2c51c1b88a12ea328a4944e4fe74cedef69a43510079bd1f578a32526fe5e9b1f4ce692f00e380e4ae7c6ba516ca9d95e1b157a4f394b7e2af9a5047d5d7920b52bf4c48bd7f82f881358a6345baafe31efa6e7682129e7334d0b439c3def0806bf15d8e625d8f316a134033abaedcae052121f5819da404f7d8636e590e7bcaa7a754825a00cfd2b6d3dab182e36c24eee10ecd4fecfb9045b527241033cb0c4b2894e1a94cd5f0a467b85966bcc97762b9f4408c675b410e736e5d1d7b122baea1287c7bf62617ea758e956d716002498545dfc4b5e0e6171a3656836b2d0845cccd02049cd9d0a109102a1e7aa00e825f579a2ae803302d00e519b0026ed92020be2a1c0ef72d47e887af1799866b5903d66a29de1f21ff49b13d482ae2fedb48150bd12959c2c33bf36db2a6972337fea5171679858ceb651a578d6bbaaf1c1f19c29e0e2854d5e4d37156787289245175b9e80e5f15cd5e6b5a52827009ad197235d6628e3f4d4184eb726aa1d11854ea6782d83d7254dbddf0ced8d267e684e11912f9d353b9c608c68eadbc6954eb6fd3e347fef534430cf98d8adf4b3f1e48bc4a11e2eaa6c5d0577242c6d09b163d9ab4ce6f8bfa2b0b8df6bd85a312eb9be268389f34c4e5038666ecf08d00aa2ac7ad026a7d2257b51990190a9125c7cab4b4f69d2adbb52d5f3954dab0b84c91ed2533ad6375819a925e67391e3da6e2b8902e4cd868baa8cb939096088d577501b571c0831996632c1c27523c9960caa3c1c6e16ea08269362bf3dcba72c2344bf9ac4e653c68b39ccb7506833b8d72ab03ecdd427b3d76b2a99ef62a03a85536fe491bea8997eb096fcec429181e5b6d315693c12848e4f8514d2ea0d65e82d45dd071d238655fcb522e197a0a9dbb15190be4a992009b351ccd0a76637f6d84b57043ffd2f4d4fdbb21be42de54a982b8b2dff6db3a7b8d5510371561e2ef93761b86e0cdbe7bf52f4faef061abf86a69fa410db0d904a15a7a39e6f068a0a84fba1704e8ca35d699afb2ea66625899377d538b552ad77933c5180cedb2ad16ac77bc366ccaa07ece45ace4769b6d9b3d70dc12056266d20b64969afcf0dd5c6242029b5ae1a329359b34a6d83611246a61453273ca22770dcaabbfa0a4202f69d2e95fdc9547f79acb115bdf7681b2b1e60bd87d78eb884caa195daa376c8b64f85256f2403712cdc06ceee15ff2a51436d43ece13afed95a57a1c76a6d7125026406200e95803738141a9514e4062da1152f81cc3fc453dd8669d51469ea10ea4956459e38deb6df22c74daf503c48f4da8664d6f0a6bbe5e286ddeae6a982acaed54bcf8f73504372c2d06178f0822dac70df45f101bcbd5844f62987c1a6ff1c0effd9327689522b54e8827823f53c53048f3c1ae73a57eb2c2756ab50d7a66716de96f98f5710d29c2ec5a11975882214c21d18ffa1d0c999395089ed309f3cb3a1158d22cbc9e3e41a03d7da1788408d9b9a4480b2e6e1044114d5f08cb67779c4b7aec81c369ac037340c6bb2279a3a660c8c49e53a1b4f1ce4b6a956980a5c97582ea8791c43894758d39a28015ae44c022dd6d85a920d7440c17566fbbcf337e497985fe071b16e2a60c93ae61fdfee9796d6349e718d0c8f2432295927a0d6dc0f2fcdc4eea222d17072951fb937b657288a47f63555a9f72396e29b4911292ed1c86cf9b165b0e489da74b5d12bd68b0c9ace4e1c7fc6516e8fdc9f77fcfff6e3ff190ae76984eeb58536aab2061f4e888b8c99dfd84e9eb75c748347b3a8c6d144792e096ecfb1c8ef28998260366156048dc751ce637c4a724ce5478a7c910ab0fbf84598e5762b021b1aca40480b86350751e2b3794c285e3d8a8220785886769dafd8b3f06717934b6d927a87f8e4818c840a70e065221b16287afa6240ede58ed766bf090c811509589b7e9770a78ccc663806ca36f5434a36e108d646e830eed4df000035c0601aa970c6cf8845658e8e4502663f65020d8f1daf60ffd210201b7abac458305b8aa488b58999749f0af359aa9d89f274986427e169924fa87fac5c472ef8c6fd79d05967b7d11a7506c38901ef55918fffb8d98fa971c6070cb5499f2ebae25f161443de4d72a3354250d3795e5d1ee8b47929318fa5e5277854dcc098be622268b7fc1c4b623cdb1c0ab59f9593984a98fb656b608d1bd9fb4a7c0205d76308fac3d7511eeda5f8fbca5f33de810d517d2a8bf7addb878a1fe0cde982864fb7eecf08f35df8388f5012c653ffcd8e17349b5ac735272264ffaad0a9694274d4e65098dc11e4507cc9c1349d8431a48d4b9b1c1b3a9276cd2954f5f59bc79894edaa1828aaf942f77cec2e110cb12428c31e98fe554982848cc09f2e4d7ac3a12ab4405a0a6bce6460b03b71a605a5ef33e523af723a869c8fa309436d98b018356afa1e0ae17f6c11e4ce073d6184d81aafec1dbbe59a3a4396307e7febe5ccd2430b7f3b1fa6bb07b1a8ea7df1ebf36748fa46d43b01ec6929e4b43a307311d5e14f56f81e5fda89fea2930c11f3488a4a7c35a6ebfadc40cd995a23b2b8ba710f515f894775250222b0567d69c90925d19c5a505ad522c818b5629f610d9c85329a7d5415f6208f6a2d24c6378acb04a09d3b01c1c59f69bfa43cbe3ae1e6c457c5b532644518f9f8068bdde04395f0ca9c822bf8d1d2bfdcf8efe08b5f257a3340ae706812b1084984c418a52c630803a0713cfa858b7267aca94d40dc9633a68808db8f5be46ee412512cfd4e9c8e2c1ac90c3579d0504631d82e910739246470721ae210a48202712b6127e0924133defdcf0e883e597e9cfbb1a4589c78a6abaeae2c3696f336327f334c98c673cd7b22a50e2c4c073fcbb4342c6f9f879e40426301cb51e4f093dcaf9dba9555abaca569cdf1323ba6288a46c085116d6d3a5e2a69a904375d9654204b467eb0e1cb27e0412efa35a91776a4b540e4310f0438dca4f5eda6e738c5b77e1f9f5f8225f53c77fe2f6fcd5c8ff11ff2132f54f8216a215bfd060a76b9c9c2d412e45485a286fff44c163f8c00aadf44b468faf2408bd185e34f37fb8ecb611a6d769bf7fc332c0b52eec6f9e1f0c6422b340490432132b29ab3c65417fbf7a1a9b845605ffef024876e65c736fd33713ad2ef1a33b8e13a6957cdf4312e350e815bcf595d411642e08a970928c041e6880fe5e2ae1991e8394989bab1ccdddcc03829eb31b77a0421056cd25f82a2df9f03890b19bb7bb8300430e95e8c82f62349f91dc297a0c993948311c496ce98d1814ae37ddd2a95a4d1b61c03c0002cf9293e176d0d4451723ace27fc72df7da5de1252d29c1d8f103f7843e547c1e8e8a46d153cbf97659a914198278affd06c069765cb873e407be45fa537beb8c2d6fe41f86e15d1d69c25609bb21c5471389090829aa344e81068f3e52e6973b10f4b53fd43512689557054d6b4847f791e2f082aaef9c7ce4a79d0a2ff79d29ae2a0330e5a6ac8e2936782b5eeaac3e5ae9736fa9166c3c8fe05f4165b0c3214f25645ff559b99f70bcec27c38ddfd472d843631a827200ce472a03e234a1a9f9e9054bb8b6f38a1062ee68dc7d4b748040121f4d47f9a3c4f6b063f890756938f87a3a1e96620c3fc4924340d850f5821daf1717ac42ee0e1ffed2487a844afb3e23f8fa9898e1cd195a248bbd75aeffa8ea1873b59061960b494c0eb5121ce7932ef735064d547867ea88d8b4aa1f283d76ee2a3f86d55871525c3147401ccf682d75a2c6c135e1625f32575fc8107e6a56172b774c3edecb7ffa4b9627269579580c31e478643d292630f15d0367847be0d37a303183d82ebfda82f2536cb44f264f5960611a93a8add92497be56f7e5aff53c7a6fb06dd2871f72f583e213bf504139aa218cb980e2a2c85206d37a085d92db7418393207953960276c5e342b7a9aa8d2381700825b232d6032bf71ace0c41cbeadf84c02b1b48d726e15baf5fab997536ccdc737d063bfbda0f5bdaa5525c4dd98ba6e3a5da38ccb0a7966adf1d3fc79c4d5561bc612892fde694a4c01d4aefd35e33aac9861fcd383824710bdc66abdb4e315543e9fb64c8f2134aecbd6148321ac81bc7998fe4b6ea2bea4431886a6711c6a36797fd55a1a529ba074d05b04049984806558c05c424b827ddceff288ec31614eac9d72ef2170939e8a21b974216fb13308e283f27b9fa812b594b9598ccea3e3eef4adf156358452a45973c254f35596ee3b1cca71d00760017fb1ca839dd49a17f0ac274c807cfe98aea677e6980184846611961eff553c4aa27fd7f3e05a7cefe00dd4101ba6646131719b0d49c43a861bdb4577f516865471161e77a82b9a3f3eb932bec1f4d4ee05129078fba62ff5cf411c4c12c7d4533922a35131dbd0807d7cec0388905bd428d987b955024bb8fca0aec0b9c331ed4d6883a1edf90be386077cb1aac2035ac4685195ce7503d04dae0df9fb28a421812c5147ac92c005db6d45969906fef7f93b124f07b09d5a1df52193b7021c0cde3f835e5c0e619bcad514cd2d3e5a9ffdcf563a758faa09e3193ae05e0fef3e03436956fb771c8ecbdc872cb22937b8b2c9a3fca4dc3b5b9b15f98d3c0f23dd09332c1ca7b6a0ab5515552ed61f456beb80a0cb1305eb16314b642e8a53c1b9131142988ea68064add1a868032e89f726eabfe2e722059d5e8bc167e8fc05bd1eca8071b6a44bcfb3a55ee7584c7febe9671901a5889082095fbef77fc85e2f93f4aa214367a4888fdac39d74ddb4b318fabeab1c1a4d40f51fdf3d0a1b23a417a97215f9180af35475d66cf7dc67d2575c2187a18ce3188bebca1df93f8e28800c179ed0bf4bb987c5f65008dd6851606e1c99188e8bc2b1a29b5826914a59ad80e0e38f210408a2dda84d406a386fd932ff49cf86c519a780c93ff6157e0033263cfb4477fbc05d14f769ea96ec6c8792255ec72714b741e84253401af3afc4894d8a69e6d4bb4b69951cd8139a423ed07f7c918ba93e25ec740e49d9634d6de608a3e4a2e73590ac32736b361df520601e6a8f0cc1eb14f57ee205ee3fa9c1f34e9903300ed5bdd8f6e458a8a0a89573071b64a93c36de9689404a197d46ede63dcdf3e6c785f28adec848a879d84c2ab072aec9624bf1ce114325b64458310b3d4fc13bf3eec094c4a50b1d00bd703f173196243033eac200b9807ca9b46e10c75c04cd96ccbb280da6c9cfdfe752e87181973b06d8ec4a997e082ba8ee49bf8bdf38a7c6848d18f101e1acd37cdb068cc1c2e269a58e3f474bee30509b2837af95545f4e748348a62c323eb0f47f83e839c2a5c5470a3894385a4972925fa7f335bb8e9651299e9e0157c13201f86e98a13ce0de925062ffc866df02a1dd099bc6ea83ae2b1b4a18481cafc1a2f53ba6e9c807de66673f6f5d2d22fcaac9b91747fbc4e7987569404a9f3742dcb2db659334629e53f0172d5196e4a3a83983ebffe43e7604e02473d93eea823678a883423500ea41a11f089501d0060c75506806403d30d403a13300dae087ce50b475481002828483ce9c7e2a61e75cccd1c66a02d2dd3b670be978ce9bd804d04d409d9fe7fc36b56c4d933400aa31901b034d379ff3ad50aa09480d81cee3d052ba3297599ce0714b87cbde6b491eb839442bc0eed25c8faccaf719e2183abfcf276a90c60fcac01012432504bdb7b9010ffc6de50620150c89e8d57ae8a28bb0e3b5f9d7c7090975c4c204041cb295be6efe2f0303aed00dd7da2e50cc0c3eec3f384606bdb8e1419e2edcc60b66ad71b1ba1311d01d154691438e77508eea69e403db9fe3f9666c46ee9d84eecb90d3bad2b94da06e4844962dc9dd1c02fc4c8a4a8aca3b09b106cd2f074b4ef7ce357e55e242767d7f026f0fc69c23cd3fbfc6feabe63a76681026f4eb675a59581157b548025fe60f8af4a9d99a9426c4e64e817e1fca56ee765986254eb3e4c76b2257b2c6812787cf365376f660c28440cffe52819f78934cf631fedfffb561db52ef756df15e115b4993e8727748eb0ff071f84729eacf25b362a3431839e73e7368bed9a7defea3ff0af6d54442adacfe3c1c77a1df13c3f62f2073d2cc1131615a0a11990e86d1adf79f19831319e2eaaaa4789f3473861efc779bb97f507db7957ea1cfc282ec2a662aeb7abc0d8100357b7e578898c44edfb97635c76d0279f3fff34802dc8e77b33c4c051cdc8776faf025a3eba3d2fc893a60a7d05a153b7dee474eaf674d92f4c0d896d56fe7494c35258733c3ff39da1ce485a6ec906dcb62e7432a560140cc15007f132064885d32db1e0f683547aa3c3a22ea1dd4e9e65beda876553e08653136ffbe2fa34152825b71e87c13856ec122eb8bb541da313baa34dcf8497dcd25dff63479b8b5cce8b396f75e9be896f34d4678eef89d922688ec1d5f7c340c9f2296e3dcafc053943da523ca400481e326343498aebd198ded9ad5d7e6f299e69df41bef4e84b5b86261509ddb3c1a567a711a18735a403ea8ec1bbfc520f760f909c55143df7646de8c749c1cb7f445e013fb9396647fd253c3a796c3106e651e17082d785f835db6ed21dcca1db330ee2e745d01e99a80d44e288d9952618ed8f0c11301171e49102e2fe45a6828bea9ca3e5a7c8553eb99130016fc739876ed3b0a407021f2ccb8b5e4d798727a1bf7bc0a59be34f620d11b9ac10197885c8da8da7928483dd51fd2ffe713b8bb04584cb3c9b8a4f25d8f20ddb3e279d025a2232a570e51b918554b4810701f39dacc453efd908b32ae1d3f3f3444e57a8e3b68e7ec849717767671beb4de2765a53c2b07a9d5016cbbf2fd254c5474ef94259565f69e2213bb610d5573bd12babed2622dd5137d6f0fc34d2e5105b476f8409b4db54597f89eb536ca80a2d4cb936882939e674072f26d46db1e00ea0ab5e562b5fb171b542d1909a6d6485f5fa4c742f0695cbda5d4567bcbbc55b828d2e841d88321e8cf07d76fffec87e9bc3999ff76c8bdc4a36163ee75e32bb5b6fe2d926422ad62a864c7424f0b455ad85b431b66f6f77f692e44d19983d55882a840b7bf942cd6a1d8dad7f9bb34771c5f3f703d9a14b806e914485aa895f7aa590ab29dab62eaabb952ff73e4bc71c9fc7f067021298c4d2382f203e578362c9b63176245a479761ed3576bee5fb97a9a270b81c38daeebac8da6945f2d94011a97716ecc1e4f87c16c462742a43a3ac41f7200aed7893dda1dc447836c34b29c4b036a13f92447a40dede41111785108a17a27ffccc491d7a8bb77c214af1d87323f4303f2e28e11011472e0f963a1eb3b2728dd6a04935555ce2e10a8b6df9603cc2d526d15a88c267f70a61cc7e546f3e45a039a6f2c1e477bc3651d98a2d0ddc57267c5ffbc14e55d4ca383effe52e80b3e8a8c535326f1ff5e71cf51271d39104e85524338736d2bf3972bc3759ff93ba5258f8f0e18953d6adb0ff2a42912ab66d8f040ea4a16d68d728980e6a75e841c0efbb07aec7b1fd32cc58af562e5be8454f24ccccf32178d43fbe2c9598d1c669db4b6bddff5a3e013e6b2995343af922f4df45229bae46ce6a572fe1148c107352a6c2faa3a40ecce75ce7b49daa208d08008d95f2b751e2255af946c1e611c82be1c9820478a797cf86a8a066e8b046e17db480c597dd3143021780ac0815222f9b20b1524ab844997bfab166a6a6f3fd01ad454b591252f8a0f34166a6ac3722d94b058f02d5e728ec53ad3ca03f6a1a663bfbc1f9e18a70e3f2c6d061a9eb66a6a7cd085f0bdd531b312b43f1b99bb1b19fec017b81d5f0e417fc775c4795a03d471033250fcce6fef7b3a0f979e5d7e549c066863b7f269e903ea11a1ce63702a3740cad895c14c165d738c07b96110d282c928bcd13f6fe765783ee51fb429afddbc0a9446439e9b725452a038ee8271aa867c7d9c239900a3e7e8b8847a1de2df50110fab204229dce81b3019e406b73969a87bc7589ff2e82f39179e287805214039fe748630e174750579bbbdc437bef4d30d519132e349b1102752bb99d403104d2d5a55391048fe370404871223ad0d2e5c20730d0710d5c7495c5bdf1d05d224e3a5ef2be6250494979076398a01c84bdcf1268d16b921a965f051a26db77f01f069d014f4ab715b36bd9a33140e02415469f3f935008a67585e678f2e8905f5575eae718ecbf58af3eb1ca5dd02b5e1c168d27e24d8941b82f92d401a3edb72b8cd20c79e2964b928bf9342b8a9f953df474d9edf037f791309d0200ca626a0ab176daa7a3539be22d42c7e321f8fbccca464636abae5da1d8f915e08524af8e1af60f72f7e64da4a6b495b91d9770178cd61a22fdc697b9335dd75c2efc6b9dff456ca9a9bc16416026f96be9e8c173dc930131e3034cef545e1fc0ad3f6688d115e2964376be0303f178f01726b3af0684e77d40449af1329639e19d2996c0caf5ccae6e5de9eaeb517e962e6381a62d614ec566f36d6a88858d80f63f1beeae92845ba08345e4b868f55fccfe7409c5bb04302b9bc5de6d52a2d4262ed2ff63b8c72875c32b2539750cfea0f7d8ebfa487e1d09098ada5c0ee57e333113a7c8335b75d3195c68802986dbb522f952c2263a10221e429612850a28b3149a9874301626a44754837e5419bef333a6577ee9a4d494afb760f5ce740162889edb7fff693404475769aa81a0690ae7e2c357b1ccb9065ef166300bb17a9dc4d7bbeed166f095df7b716fa3230a774abfc739e3cd61d12335f226fbf40f8e0a37898818c02006f05e64bf417b71a0045b962d9750bd04cd5726e5371533cb1353751e88e1cfad5864b675ed59045cc850935705b0a375af0d1ff61a9532e9767aaa0414821bd1100cd2e56723c2439f018ec291cce12c3faea0da2c9f6295941ba20c5fa12abb91c75cf2e666f5627560516c533607003fcd78f540470b73cac67c48e666d493c53cf0413cbe1b62e07b3f60df4dde896575fe27427b779bc815424726f8f30f2ea164cf66a608f5d0935c58c79b64605bc370f2f2b0548a2880e19f1ef6e252e80c62cca3069b3e0bbe7a1b66e86db85e0c1c653c7901577a88f14feaf15aa20551567ae9d270af2d502f1d4e645b0a9626ffcb105b05fbdd4ae0628b7ce2453dee46a303a338e7228b150bba4843f3c537cbe59ed5a077a699e9727f05f4f1f640d645b49add9f052d8df533a5773a85255f4e28a903718fbcab8059bafba73b41544bdea223ab7ac4362093534749d9dba1da1f1052927694fe56edacfcac32fd8ce5941ed10dddf2459499565a1d5949197b5302ec1d03cfb395860e7a247555fc276f709d648dc51d4f2c256f2a6019e81399f65f8ce8724cedea8058a035a7b702018a6cab65d2271c16860a92a59a31a825b548055898742496d46e373880d100e347bed2448c3260dd2db355f1bd98c3bf560a00d5a939fb53adb6362ca1c10ed4c1d7b850a8414542cfc013115fe5c470611498ae9c8d36e56f3338d158f4596760dd52f4671c445eb32797f1728a57495f5728b6beaf48ddcbcf5dbbab1c2e8088fc0bd5cafad689b07908643ecd5963a02c347755d2b77f908af317bb78254ea980e7355b02075829a5121dbe5dcdcdc6d3c90b1fa1788ed1c4aefd86c80cb11d86c0eb6450540808ca6b60461ec4be53f180f89b7e35783e67611262ab75eb6ba15fec8a5a0cdfb32b0e8f7e05bca16e24800cffa67bb066049e639792d6d3063fcd9ecb277b1aa4ced7aabbca501805a54c5e750dbcfbddada9985f9a2393571f13a2e782b09305a67f25e662a980b133a11a8c2780231044658b0f76422312367c18d2fa041aa066c107199e98d0b82cfa1c6b5fdbabcbbf99ce5863eaf5e1e29eda621c272a212368a4b78bedc379e5ecefb8ecb725139504c3ee07308b48c947a00331d64d7442ff1752e8e6444e2d18995d6f5a2d4b57649b291fb2f5000ffe018b2888013e1238068a79e0e4381e88575b262165d52e81ae74dda810eec2cac4ce3cfc17091e1e0a7341294ef12e6504a82775d35de78decfc82a248cca1a78330b16fb6a255863cc41e01b0e3cd715be8c7d26f7d8a73cc8f69e06bfc26c2188c6a2d95d33ca2dcf20b18e5c54de13c62036bc51cb57688a0077091504c15ea54acad63822858351a2361793cced1b260c76f9a535445a09c2e9a001f9064722916bce96f3f34bd1af4707e3e9f2a7d3e2e91fcc980e89f97cf9770fb8427ecb95938185a18ea98da20c4be87e9997ba58ec6ae6c50959ce15d10086a14fd6d4b005d15ba523763c177b61e68918f244f9229bd211e4eb383cbd0cff341778602e21fb95ac2ed66c26c4073ec70d679bf5c09bb4cf8052361d52edcc24f08dce5dc417e6186536ceda85ddb42af646ff5a9ba6f4f300d303dabddb84d905b117a2467cb65a5dc4115121585a845673ba84c9730358ddfce057683b691a7853bfa603c0619d736b715a1f80ee8b5c68dfc21b3faa7ac1f4e35ea51f509fcaf25515cc3387d03c0e04307dc944332e57be98b886385e0039828b53584b363f900c9ddcac8c74cdb13b6ed8c47e25d181ea2e9a8c53b5709c3ee19ea75676985475facb0e4286c6fd5efd469f82a75caf52f2c772368f07f36e3d6805d88edd6af6c4d43a8f9e739a7934208ef348eaceeaf3705a6c8eb701d473644d6ed916f85329ff0455234960ebf660cf7c4f1e53031fe92dc6dea275f3010665a0cf89676a7ee60491a6acbcff7c85ccf7a6adf7c171213a60a7c8c2987e4fe84f8e96c497c18c3ead8cf2403dc45358c5069a6e3c712294654834565ab09922f0bc80cec1f5ea80245932108a5e34d6045834342dae04d8f883db7668e7a2fa9a59f0a2d4089ec622e2d148ca3879c13cab9d0dfec6c16837142d85d47d008ffc0d340e970bc6d62c5d6e8fc55d20396558db0b86384d440e094b18d954a2215f84d09e68e683766da4c2344bd04daa10a151fb112d25d0442fe13bcb797ae47fa06aae9250a1a5056da4f77673211a1a62d5a30b4c285ff4f1985ade919b61ce66cf07b1a97a3329e72f1e9c4a350c2b0f50e69d91faa902a3e65ea3693c5b5aef63fb8c77e3c883a7c328c610e63f127e805221a61ea608c6767ef42251e52542b6dfe10cf402824067a9c46170f9881ba448f08166accafe2bbc2d5fbd033021cee92b6d8aabd231f2ad14bf538b420f5d73b8bb3f1edab9296fc6db90046f8002e229b75e19ea6cced9fa97d1581ad28171c15252856a66d3c7d0d0703515aa1c7180eb3398ce50ae6f6a39797c03ac53fd4c275637bb3fc0976d6e30cbdabf2539965514f871a51d06d095676973d5b760417ae1c5f96c9258f15427de5d6e0f49933aaa62a6601a4adc22b6e5ccaa09293c69a4558160da5707a0001f676395dd57ac63017a05fa5506d8ce7effbe436fbe036804b397a505ff563e5202a0070fe5f1086451c085d877cbcd882d92fd23714d803eb0c7d3fc747b5df0bcf0c76374977e2ecc91955331ea19838e5de5d5c20f5f4d80959272ea142fea40a27c147d93e472e529a4617e455f1460cabb721078786c0cbf75424cb3e53e374536aff56e72d44343a7ad614a004511b9a9f373ac26c248013c615dcc240cd36dd8d05bbbf68dbf4a39643b7b430352ecafd7f744e056c4a58d699b21f8ef2a7c9627d59ac0f59a5415ed7d89b4dffb37056957f042412eead515776bd870ab10887441e0efdf2447833ec971dc7336c8b5e23b8bbc0491772d5a18f95ed1adb61609cedc75367dba3217d34b8f44434b8cfca48217ec9ee8b3872ad7da41598d64ca6743ea6734390eae1fbd5ccc1c69734a88b2452dc7619d3ffd3e879ff40c1f34739431e009b8840a0c2e388e9c65c563d4ab5f4384c45aa19f6cc340351027dfe966e8d8880117fa017c6d192c5605990a33c44379c002cfb3dd14d3e6269251f5f6a58bbccdb405d42ed064f3624870da780bdefb9c25cc46918ac6b6133df82ed5563ed653bc6cb44167c68cd13790705cc7cebb8d15ab3849c83326cc644945cb6701f16a6e984bcd1037874590790b041618144a3edb855d2353ed66e3b97fc95d53ad7b784c78563142b58a4b76524a3ff7cf886b898886f982676ce679909fcb7c673d575abebc019f7f0409476c8e0c3c8efca3c3bc16f369c8bde7112370c42365e2eec101d895121a6ea3fa95660bb0b35ed24f5534ca6338390c75bf10b975a3abe2c9167e8499761240acb118daecb856557cf93a54abc01a945f32fddce0a190f0a2965eab8b38bbc416f7423f9766e46fdf3ce9eecf52f6180bc1fabeb0634bd36c28c530aedc9062a7064f89559742b900658050ff0a3d3eb406238f522bf5cb82ca1c55883955077b111ba2d3cab9b688476fdde3f1eca23c922eae89c217cf8fb95fc6f8d78ca9ad0642b10660afe9bf2ed62c5afe12850414cc786b69efc1e6e76cd97370d01eaa0f4a12ff97bd8535c82f090bb3345ae69f4809ac9ccc05c2f565d0b4495e0ccefb54460ef24303fae55683a16c1254e161352bc767d6e44e2bd782c03e051dd94dd7fdd2358650ac6705a128f3313e91a7c4ee5d3ff679cb976102d409a88440b3e5cf5149c0c2d00efbbb5b2df0b059cf94529f40763a32c66b23eb10bbbf3f78292edf02d87a3bccb35308888042f440776c9ad2b186df687c8e6bddd42648d19789d1ff3bfde601102e6723bf96f1f12ed2756037e9bf2a4d1448f51233696c3fe8ff908293de4f27635a4670f6a391c2be37244ddcf22e23c764203e2a89c359834063d7c10234fb52b38acb4153501999093c9bef26461a1f3bd55b091b82ebb7d977e17732b3b4eb789ad30a996637da9d5f6b3e63f93fce90d7f4116403bf642383498188b609405d686929450e580e86b88c0785b411cafa9bde76d4c0e4a83d0d4163c05afff763d58fe391407d1bbcb7301867e3407f3617027075ef5c461b877b7cebab3b292daa6c7226883d9646496108110a06c89ff468387f66c7128ba96374b60e1bd560b7a2dad095bda07a48763b2fed1833c9fa9c583549b0d88d5ac1f6522791dc0467f278acdc5a29970b89cefa83574f0af3124a11dda2855fda0d96d437c44d23f29b2ce78c0af9f41cdc315a216da6d79b799029891ca7798c96857c3ed8402bb82b502f2a68e3e6d80cc5e94b42d20f6273090102a2fe90e1c1f81ae699fba598be731c50e099ad18799c8132da8575538db8db8924c96d1789df40db4a5ce4222732d40c67eed690d0b4ab664744dd5616d0dec913575ab74fccd30d027ae81f38723707b316b658133637d74ae027163f990135cfc0fd4e9c8a47408d5d8478f11d629a612c7c51e4c1620bcbb17fb45ffe8c5b86a878cba4c8f5009a5daa74f5ca2ff2a11137460f807c9792ef98ca0c497e17e5624af0c7122b058be5e15e8ad91ba7ed80715336877ff410ea2c1f54d3ad141735d280eea3eeff0646a0268a3ac645e8be63e4220c858316561114e119c89c05750dc5f4d738be18a9c9bdcbf384a950f87b130afff17939309adda87c21d81a2f04405bcc62799c142e00302ed4fa8766f22da1205b38618e21efccc05e629eee7d0c4c4ec8f16a4ae23ee5e42db2faa99e0ca02dc946381a96c3deb96df9aea638683f2cb6691e290888b84db00b8497379e297331b7218541e91c0aa9d3141d8c5fac125bd34e66ba4a97d3d7f32acd5b44b773e24b3daa8af41f693e2444eff97e40d27f1b6fe3d13866ba175b84e651958fc64753e4cb783b38533be25d7a686b76b216ca814189eaf6685ee4fd39cc4b7ab3fa843f0e4cd5b610096c2f40ba46af5b86e597f8a00b4b56dbe97298ddd932f68883583105ac1b5faf2d3f285a5449116ff64bb7ec43860e2d701140886f010c85be152dfcbd839aede00a032a33dae21d3fff5d516263ae045316d2481304de5d79ad40238709825fb06d90d9dbe1da5445f7d5b897d7151a8430c0749530c7f70e2eb03cf155172cbb37132a71e72d9986de27fefe91fe841415839210e7c91f59aca8f0250e7d709378e5a62b590bbfafb527a225a6d252e99b3f37e70ce87aa7644018cf419b3b88b6c71c7f9c6d8dcb1b011b535682743ce75f2b048458b3ecb9263f10561a5ad1c8cfbbc677f31949892f817e2bbea37ac4908793b6f924f0063f66252707487c9714bd7f94a58900d62b8209acad09452d07b64b0068349e6c408ea50cdcf9a0a25b745bc2bffb9ba22675cab84aa4ee648f56b83c7700a2137055f7bc7fcba76a61edcfaceecda27c6a9a87c85cf3a65b9ff1fbf82e263551682aa6ca31846514521b2f52bd3103854f6b45a159a1bdc214cf4f441844baf2c92f5f027093470485bd2dfc733dca7de8b06f5ea0029d01f1aee826686f381da359aa0dad430cd48a5f675e9eee6a32c8daa0fe12871676661cb655342dcad58ae7d3b8d8d3ef24f0c2d49115257d65dac00e1e2fef5fc65186c6c7ec71ce110e02df9c71318ddf83a209f9114498bf5fa799e822cf3c1ceae7e3eb977c1a76b3da1ec92399c4ea8de4a79e12d9ec50dfd206aaebc398adca3b85e0c993c36ff9acc6f6f3ae9afe8dc6824a1d28a136231ed4b913303740c6d5d20102aa20211f30efe3d7f2343935bcf55b3fba6f68de4442dcdf0921f614b6e1cc3c30bb5c81c605d55bd35f8fce213131a51fcb81fffffa40680cb2dc015659b3c847ff106b6ddc7da849a09e4f2073850ac8fbddc5fb5d196cda17ea82895c51730c7e9b36b560789e029ba104d754f5333f8b28303980837689f00f744880cccab873d06029ef1309334c6aa30a982e5d0fcd238c4d127a4476f3c968dd53599593e93215ccff2628810aecf046d11e8f427e0b7d365e8efd8019f2a4cf20e88cf0420052b131c33555dd090b2914dbc825482315b97fe171a1bf20221d17ac74dc066b704eadadb8b26a19930041965b0517573c658ae1e14df8a88a81bee640ce2c3e43f41cd685d08a42591d4c96b524d7fdc0cb01273ba4817796e61c1a6afe840416a6e608ab63790fc7c75861796e89e824070e4bdb8178a478d5457ebda74e33b91c87e01d5b0b624574754843aaf5a0eaa4628c12fd05b861acbcde77d606f3dea1e726cd7bb0c3ee1944f039f5b673c7915c3897ea39c4962325c66dca00c8df920f30c78fad68f4c259e9b5a6de5fc21a4142926f9069b9b9fda8b2d2fc309117429323abb16c4b7ffbe679b2f0949d8963831597f890496d4b2d20e0da1c425254027a8d55a850d5cc5d28cd0ea8aff03be5f1e916cd53f037bf2b19e57b72df354a34e2f8dfe2c96f927f5af3dc5e306db09e8e8c31c39bbb228dd579106290cfe051edc178b04bdc8b80d683cacb49e84dc6a4413fc7130f10406ce788c6ef18933a578632407b57745aa9a89fc27041cbb85a9cb3d6d36c1bfe638db80b0dd07db58fd0341382155b4c6a216acc1fdd04bd6d24dbc83de1861bf22b4b5029e8785d9f0b1e24dbeee7f3315bd7a1dbe55ca06933f633dde966e7e7c99f013ded76f97f561e1890b709c4522147b593377fb4b99cb509ed357c4be060739f62398bda334660b9d24cc432da2d5ce993ad89922a472d24e1a555745bc9eaaac5be669dc5ae76be55441f461d58f65c6dfa03ae1ca0d73fe00f4618910bb795ad5e6a7404a3c65da3190551b865f743b5ec1c4df77622989fd5dfd68df2e1eedc79d11a3e423611d54d64f42b7f826685c81250def41253484a34ac224c5e56160204f47eac4ca4c28fbf3d3d802263cf0d20976489df6ae3ba9705f051c56e86aa0bf6e8ba465d60b298d70ce09a2f95b9baf7f645223edf0b800e8c41354f41fa02b913b0206164790d5997bbfea69f765ae8b87ab08c42d29fa96210921d61eda4d9cb56eca99bd751f5d569cb87d1e89441af66eb1f479e2920b0d2edba3f0787142832b01c99abf9ba2ff690eb9363be0b727ba9b5a8e32069ea81a6cf5c6e556c8086500ba403cfa1b0d886f44ca50152a285546b52006030b7ad88cd8d34348b9c445b127a1e2490fc1a62da374fca8bd80da593408241edc4f067ddd8e3a3dbc3359604762f9c53620849cc99a9af8d92d7d106113baeb092467275dc88edd24a9ab040560736157b3da74409a268a2fd597d120f7d141d89bbc2299ca5240ab55bbec3645ab44bd62c67d18cae4a0a3a7375eae46447c382ec130edf5165934d2f55f3d4438e8f7d9a4a3020ee3ea2ea1db100388014e4212d1d8280fca73e9a883339847cb0d9e49c08b43bc7933440b83e93dfa7c3696cc037353c56128672d50d1b609d0a88c9275df67c215fbafc6ca082af7af0b49af50d5bef7521df6a756e6e172c4654bc8b08277321541ebbefa49558f6fbb677f8cef75afe63ae2a55f81074431585aee856da6dffc5710e22f1c48a06596477e0eb762db1051002bd4812a4d31d7684f3a07ca214dacdfd5f2a4291dea1a0a748af9bb5913356a95d9c4b55be988b9cb64d7a1a211e6d01c250e73b23c832d04841e5547051ebb98cd68f9665708aa9d83f95d8c05a4a4665f0ff9f3cc071ddb149c1f79410b7da51252a136cbd523444d53d0d003937ce06e581322b028ac8bad1c4373421ddd183ff1720b1a1ffb504f2066f34b4d01b536e344f51b836b05414053277332c490b117c69b9ea392bcfa6d3c606763203b9baf4402849428b6e19821f85f7c80b98d85fd06dbae24367fa5fa688df71e86692fa733b8e4ee593a79abb5286d7312aed0c055ecf0cc1f9ff25a6c4c6fe65d301056692110eb7c53c6205818135b4afcc56601dff7b6b1bd4ae8a06005f6afd6d60bedde192627a15b180be0650d119cada07addf5b5b0c1907145081c6999e290f8b1486e917ec9b246c3af0baaa9bd441f9d3cd185e691e7da3b48ade57cf3217cdc7892082b70534cc253615d2ece5109180c908e41cf972ccf428a034e87d783b75f73c093233e88db361d0815406dd3369504f660cc2435ca223f6fe6cf333b9bb566b8ce7c94690e99c68e68cad9a71830bfc1d4875a1b83d0224d402ea4f02725e5054556d3a99227effd82e0c2c8ad3e860067670954e7b40f978c20764740feb83091f9cf08131b8b7962285f9e5b5b031e4840074626fa6240013836f860e6fd0ec9df5c7202aeecc373366b2988eb3ecd0d5bf9b888890dd6def2df70eeb06d506470759e3f4af87ad846c33da54b0b74d9bae8ea888037b9f881ca00f21338acf5b2df3d430d7f33ad1b4422cd98fe0e9444cb14781650b962e51e47de1bd9eb7f531c99262c3d1bf264fc334ccec993cd3c77ea5c584ac2502e383c2a4cdd21a689688c29aa5599a05c3b21bde934d65fbb410bbb7ddc88ee5f0be1cda275dfa932d9245b2b469d4b4a627db5b9a783dd1c11734321e8d88268b58ce1e1ed9c6f8d11a2c3c79a613b30ab3a7e2e943550df268f0a5411bf3347f5c2c4bb6cfee9cf3daccd9b9b9c9f632e64c452fc698239bcabc33fb7d36a7b5599f5bb46cd06ce6824789d849d3a609a29938b68fdedb2009133c1ecbda9316c39241b6568b8b1c638caff164b544927dbce581789a3c9364a2c15f205a816782d01a818c534efcf3807892118888ba37310181ece556a389a0b9afa3cb7dcc9edb54b2f7e7690d5a1e2d04e3b32c954b0b8f26d907910124db8730c01ed99e524a29a592d2fa2b29fda2e0dde3bcc264fb0aa46d8d68c6135283582d6d936d85f17444b548b6b1c6d69f2db356dbb32f7c41c3b025c48ab18260cbc2962a96ec2f6c852096ec376c89c0e2d1e00b1137cf4fc6c63c593d9a644f73897837393bd9a2583fb2add1790b1165b33df5a989a899db6a99247bd1c8942f1402258f88a079bb8e2e6fbfcf381c7088d1a0c4a141191b6cdb7487888561df540645b4c22309a90ab27db8e57e8d27aa8248b258445997c6fd3a17f3c5836cfcc37ec6d220f694e65ecf3b8d7675301b0e8dcba44669ac48d4d817d69ca3fb7aa57d0d04c58610aa2037f2c7c74cefb8ac6c7a5cdc302adbef4784ccd9adad4676ed990b4ca37fb1d562b9a89a64ff8b3caf7e5aab6cdf300dd6af81c8172c9758b23fe1dd214776ed77d5402e86c1604697f6c8f62d20b97daf7a0025b7e7302df940182b322d2a2230682eb61afde5d8bec6c9bebec16c68eed1bdf6eda0b3e7a64da3db386d9a3c0d334fda0d79272294c364fbc9334f309ad49771653c1a1191479e9c6158344f564b93eceff53c910d3151b6f27dd0feba1b0ef9cd8f0899efe735687f4f31306fadc5c3f50e1758a10a4e3831e3c4bc2e25cbe9331393215e46836812fd55455026a982f72e829dca9d49a2b7db453a1ece5c591142082adf5fbb34a83d9c2b323411554f9fd5597b48a6dfb61ee6b95adf37e6b93a2ba5379e5a26d2647a152fb87839e4e5c396716990caaf7964b18613c8acf178bc70f6e4e80f21f3f570ea4c9f90cae4da3e53b573e9b4492bc213519c1311d579efba6b38f4be50629bca75c5acdd3448e5677477cec4992b2c4dba59690226fe043a7d16f18469901e84279026b54c6f3bcc9bebbb72dad4537b8b8b4c3cd972f5f5ce72db6166d05ba777da54419f8c8c37052f87cfd4a15f135e387b62c501668da6a68be8e0d8cc34d845ec106f0795401a44c9142696e87bbc1cf343c8dc947eb2b42987fc4a9b5a3e1051dab96b1587dca77ddea6d2975afcec6990ca4f9ff9cd1f1e2f6c9f9e4c4f3f7bda340a5b06f4c101e6f9336b2691364124d1afe0be20d3d320d3370e32fd0cd845327dd3b6e91aad5ddaa492f23acd97904ce90f7da5d7b05cc90e44d25b98bcb464b67770cbf4ccce3c75c570176970026953784d9888c24e3f5d1051dae95c651d5df64b4a29731c5d0fefef27df1293e933da747423cb9658a22fd22699799a3013c613cd2f147508d2eb3d417a270c486d83945eba12a387e681871ca31b7346c53ce84004efab2b47411663d3b881e853010c583fca8b6c3db32cfbeb80e3c98749b2be73030d2129d35a318d5f8d7a7a0cab0d629f31273084458f1d7bc41986314aa746634cd93556ec34631fa594523a73a5f43109237e58b715685328ca16066ef560b77e423f31ec66d8f5851ab4aca73c7a8bda2dac40887c76bd298e808c9c03f49167118732baedadfb1049f1d9638cf1da63dca287e12bb5f9c6a07738bca1b779388c216791c8c81712612164e4f9dd062957a0c12a57a1f93a3bf4c120bb5c4d2f8b187b96659987e3b52ccb3cdccfe495f2ddf1d8674c89c37ef789c3fe8440c9f1dc313cc2e1e5786ffb8c96311248aeff21731bee9c71387c719fcd3ba381f0b0d2a4fa7b3d6f058c8f0fc11c4a1b2832260b89439c2044ba60273b2e725690c4d86286c587223e5182171f8644dfc9d7054fae823488e7698df86923d6a072d5a620713e1b45ac3f1c28324b1fe629c54b1e5e9248e429be927b493e2f66f2b646e90d65e48b43be8ff774a311a36abdd10627a6b6ca68db6af7350463a6396c3d8079de7befbdf133c72fc4008d8f49acc0e430fa103fabeb111f3394524a2965824e4a29a5734e1894524ae9a49452fa4929dd814729a59452ca440f50c238c30021b9fe87c653a38d935879c92198935851e57a5a0fd6bf8821258a2c4315e024c94b09d6596bac8ff3e1057968534475ce7442134d34d144134d3411031ab61ab6345c354ca56a662134efd376c06074ddb90236aa5c4f4a8ef0e24944d55aab7d58cad53eb421d75014ebabb58e79da7563b6574c0cf9d6adc6ccd96d688fbdb71a5427d32f44c942a0642f5bb8cbb2472c61efb285391f2e5b78b3d9b285b595962d9c4d972c5b18dbc1b285af992b5bf8b68f9b2d6c7fac9b1aa4660b53a98a25ccc2330b114bd867b48d89124bd82dee128de250a74f09a02e087848597c78387f540e90808f7e08f8eec3a7f259aa037c719242962ad7efd0ae6302997b48f2ebd985e98a0669b06e34ae6b74bd050738c5a3ebdde975307b27f10ee61d348774354f07f8644c93ea43df2a86ae62e80af485ffba6f95eb4952e0d163bfa148bb43d0acdddfdfdb7b6b77d009840245e409737d0899af7d239bbcd15ff8525c812a3af196902bd8a47e7b75d25818f8e2cc857665dbd36caf8f1b2d45b0049d263adab53715d91da3bba77f9a25d3df1b512e16cb2ba6e407620a454910c412ad71f3fca4cb8e17c6c8328819776e8f56b934900e92e9b52445bc3006951f585d12647a824c5990e9ad228e60891b8d6892a5273b09237a1a049952158f0665a5a05083a0ac5fac2051bf4ea041f9565d345de8821173e3b4ace3b46d661dd69de3de6db5d6abe68b290fd5c1b99dac5dd0b86cebba2de3322ee334ae0b1ca76d1b97711cc7655cc771dd2feee3b8ece29e3dec9e6ddb33eedda5719b26effbf57692ab5cad15ab189761da980e89a85824a4442a77efaffb8e6a5a77efa5dc374d7ece6bd7ba1d97712f3aed97bbb7f3ba7b75ddfde57de175df59749b5376995669e5288661e7302ec3b4b3eea7ddcdb23eb58ecbb8acd3b84cd338141b42a882dcc81f1f33bde3b2b2993eb447a74d6be3b80dd74b5c9f617a9287b2aeeb3a142320ef22098da0e840ded5751f11dce489286d3a317ba60fe5415f287d82d3382ed3b0cd593737eec2d850d9e7af887a0163bbe7384ddb384dd3348d8ba8eceb4044712b4a9fe0b86cab5dc8368ddbb88cdb66d6695dd83a4ed3ba2dcbb26ccbb66dcbb2eecab62bfbd65d57a6691cf74cc356e6365933599fe09e71995662df6d294a34aee3ea374cafe19a333c84cc389eebbb1ec20852ce67134b39e59413748417efef27599eddec5eccf32e91e8bbc9d62b8bfd5822bdd7f372d859d2289bebfa512a6473aae69c73ce39e79c73ce39e79c9fa1830d1e7c68539d170708f449ca1e7b9d8c54dce4a21425240f5dfe459b468e02e47526eef23a28a04df4f45d93735391d3068baf388b4f8706a58d06e5e7dcb1e21306a605a605c66a9fda277dd7777dd7cb219efd8db4c5357c9d6216d839bcbdc3dc3ddc1d84bda3c0a08f60140fe19193e0d04b4a2ec2296e82452bb08e0cacc0cc7b3d917d766927b8c547f8e42af0e82658c5332cf3875960f05d05e8084feeb4bd6eedc35efd61cf20db9a26d95fcfeb9aac6bb210ccd917364b06e6153866ed7b66a26302d9af4d45fb9cda4db4152b5ae0b6b9c16181e70f9826d94b08445244d1b66d7f989077c89cadc0575b71f3c908abc08d632fc2add33b5d04374ffb34d83f73a5417b0f4f163c5ba64b832a1ef3a547833e3e3c7f34c95ec313c80e5d835d47ded2bcc8f6a1d4c9963e62201aec77bf29a574eb92152f943a459ac83a6daa6f1db9238bd4afef1c75280932fa249a247b7b6b8a28e149b659fbc56e6392ac85ba525bc4b867d9b90bd36ccc13b5d1b919c7756b40b6305553c8946993b576da643bc33993eda76ada83bf48e4795395ed230df77d54fbc2635f8669361b8eecd8b34d237293c9f9d327cba5b2b4b5f547b63743d9b2ebdd2b23cbb2dfecde7bef9d2db797b8bdc4ed256e2f715fe3a9978824fbfb186dd27e6f766d53e1b2ac3bf78efb6296691787312ee832597e7aba88975dd3bc4bfbdae6da70647753b9b0374e83f6dddddddddddd6d371a7decd7d23e2fed317d66cfe4d94ec2052fb45a5421c8f6964bb55a3aa2220eec97d2444a24eb3a14b307458f06e99ce77e61587ffbb48ebdb137d6bfe6aff5bbfd6ebfd9bb5ed2ed9966844e9621c7248c88c9db6f127cb23cc5dc2d4c9f4529efb6cde6b117c593e48931ba7f533167136f2afde130e7d55d93bbde1f8b0dc7ecbeb0fbf6159bcafc95d960c3768394694f8d2771d7349106ad8d79ea1889fb05b164dfb85d1053ec2b6e0ef7863b060d8306d230b16429ed161b0ef9c9160cc35e542d2b9307c318864d9ec93379260fc602b3cee17accc56a910183c7fda2e061df76b85f887ddb3eaf1341f3bc8e2ecf5bdb25b647f0fad9a38c9cdf9ca4aabbe5e5fe4da53f1cb2046ba4cc24d9d38c8088096e72e40e8a0d2154416ee48f8f99de7159d94c1fda83c32b361a9664999f6c09b14b1719a9027f91c8f3a44aaaa44aaa32a96a2b93a30d47dffac2ee0b6566350ed74fabe51dfac831ac431281033ef62e62cafed8e398ba2b2f224a747b30a24c6e8f1251a3139616d97e454c5d167b9398ba2df62431755dec413175552711b5e2f6a2885271fb901751a02da62e8f9852edaf98ba2ff635a66e0f1953f225a6449477fb1b5111c5e2f8bda9586ae9279d3074db1e230c303cc61862788c32c8f01853a9c788030e8f510002788c0318c0632400011ee38c198f31e7c798430e8fb10005788c3ae840e331d2a8f1186becf01877788c366cdc30000e1ec0879d7b788c371ea3011e238ec7c8c3c1f77012ce30dce2d7750d5befb0c66192a3c05c0a1c32f9091e7dc50a8c59bc071cca971e2f3c542e2d2c77e5c7a787a7c88e4e0ece8d0d919a213f78b13ca83d1aac25477832c6a299a42a7144365e4daed79531f5a5c191f61db487f6e100b376edab33f7ba96aaf3b4cbaad7b2549da75d56b56eadd5aa34950604e7bc74f072eb4b24554b06ec41ae3810d1c07b419659810c5b5f6a8f368d2ccbba3e985004ca98181e36cbf6b035d0270bb656254fad16cfac973888a87a798398b22e3225a248afb7a27b59180e1e7c585f2c1e1799aa3c648ac7c3ba5832f314db525919194be65ecfcb68ced47ac03c601cd800f806b68177c0e165c9f535300dac032e00ce01673c0313000f000b00871627d7e3805358061c038601877648ae3fc89607b9be41bc43ce80435a835cff0287f406b9be84439a835c0f001cd21de4fa141c521fe47a1838a443723d0d38a442c8f501c0211d42aeaf0187b408b93e060e291272bd0d38a44ac8f5261cd22572fd0987d409b95e06be0187b4895c8fc2217522d7bbc021bd4248b310522e84d588b06aa07620d70fe4fa22f24ff3593cec9b188c6fae3c64ca52f1c8f5f50331656b6a40e01251590762ca1221e28196886aa18198b236361cc8f5b5be1a1153b62291ebc58598b238384ffc4494958598b239395bf08928ed0a31657574b0d013519d1331657776ac906b1331658b14a1429188e2a010539687470ab99eee44148ad75327d427e47aaa135123afa74bc494f59129f5d687895c434a8829fb838498ba2b4588a9cb328498ba2d371165135126afa3ff3061250999e5082d44c8f5540831755d86c4d455c9141fec20a6eecbc9eb8ad7d3998852f17a2a1351257751421584cc2309da83cce2f594063988a0947c912935a60631655532a50689a89baa2f32a59eea20531ce46a835c9fa9c032bc04ab3808975cec9d05becf30e92d7036c30c2f5e944a0000404a0a0c1834d0108000d450438c1836d860329d4e3264dc7003ca05ca0bdfb702cbf013bcc2048f2ec2264f81450fe11428f0c8398ce224987b8749aee1ee16d6307c9d05a66f81b143c0de129961064b55f3e2450d915289880d00006073939272830303064e0e0d34e4e80420003a3b35d4b05324468c223c36d8c0d36332f5f89c7e7ad8f647c665fce4fabb72c36f6041b5b8704151bdf01dc5e2a205c525bfa0fa7ef15f2f5f5ab0c02f7f8b87cd42555fe8c39aed5be0e370cbf6187f3824c9f62f60141caec8f62e7088b33d0a872eb2fd0d58060e4bd9fe84431ab2bd098736647b1b707843b68f81430164fb1a70187790ed0380c3e8836c4f030ee3906c0f03875108d93e05877108d91e00388c45c8f6251c462464fb17389c018771896c6f63c9dec33796ec41588b25fb12ecc592bd0a1c8a257b19b02896ec57e09358b23fc18f25fb114689257b130cc692bd08bf8825fb1418460c19b1648f02e3104bf61c9e114bf62458071b3cc492bd857d50402cd96398013fc4923d0903114b36524ab71b334f2099dd68643112bc0986d74b99888ae1f5720711b595208e209a32999a382a19e4dad2827853307154b9da6736a3b78f997e21a5d652108fe8b1d3c78061b8343cd276729d3a9445e658aa79afa7bae8477ffdfab5f540af81f5da77fdfa648e1019447b3d5d4594f77a3a8388ea5e698cccd6a672ef85e9bbeb5d1366f47d55f088a0598794313215336673eaa6429f691a76840da745f0f85e229a979c92631247fcc899a765965a49fb09f0d8c4c64a95008f4526f19a309154b3cf17c453272192ea5f7861341a19e94c3e94e1c9105959aad1fc0e6af19896907f5af0ac2a4794d6264971a8903e556092ea39d045365e4dae5f78eb4b7df1bc1724723298631248c4e42c768c927261112ff364a926c9aa26a97ef4d902bfe0a2e4610c39ec9bbe414157570d2917723d25324f13e521f83da439f90f65dc90ae663d79280a3d175f7851bef0bef085def7851efe42d1bf50545f26786f5fc0d90293c99db6aa79923788a4fa91aa25d7abf8c2ab64c480840f21d72156b503959058aacf6eeaab8ccb9b45f4e3d52a759eb8913ef8644c09121e3d0c122d1925c7248ed0c937892378e498b5ee3ad52a59f1649036ddd7ebf5f406ad838a83182353b7874ca9afab23b412b5f6a0f43494313d64d99c5f38e7f446178fe8edc8fa7dcec83ac0378bcc9e14d425f470e4f7d91d09dd5f1b8d7b3f6f74ef51581fb996892845098a7943d3a2f4f677c34129b5381c9de4b7c1dba41e32256bb6ef91bd2f140245db76c8ac833757d4ac4ec35d961ae634bc6958d370a6614cc397866ff31dde308915bc50de3ea42bbab2b0eb2211f65d1f5d5df76b9caf6d1a9c3b30d1a3493b30f1a3c139633871e60f15bc2ba43ce869bbfc14d2a619c4c698e88b3ced417d50154454f667584787e150fb42495bf29d2d978abacc559026b5cc9fb67933719a445794b6dcef8aa8ecf2130951deb7b8c824044dd575819fdba9cdcdf6ad5639601a24e181371f73487f641951f187bd2e6f4c9bae2054c8bd8d77331b64bb41ca14a7c11d54e2dcc89b589239ecaa4d39e6576dba42228a5e7ee620a2a68eee1787d6174a6ecef8a341392d0c0532052fa43c421a0406c8fca12bf3669e9a89489297c2b582b7852c6f9090a741561327cb4957a21a6f46dab4e966db684cec7226cbb07f482923853418d3a07ce7cc930c4124c95f17e44d13295bc8778da4f9ab8237ada51f1152e6ebcb3135fbdd9b3ec51ce4e7f54c46c664194a992cdb14f3bdf7e2d0e0a4f31788bbe3f178736e2af3de89dd8a19e3e1462a8431f2c442964f64c9812c1f8a241049f2f6634083157bdd684ca041ad4189e1d10d9a7d52154b7224cb8b3e914399678c06e7e5d6c335e7753fe3ce39ef9c1068d3e8c6cd3594b9fe0044106d8a2fb878f289dcf5280d6a0fe94a8eb0ab220f7a83889239c07c6830bb86ad1f32455e0a8928ecf74a2979a454c91479ad7f64f91ac9dd877c7d1cc64011396c1812db3150440e9b54c99410f275a944ee8ce19a7c7d6111ab1c0a1189640b6c8f79fab07ddb2f7c5d60254fbb69a0881ce224f5877f886ffc03cd994568ed02080b0b0b07585838c0c281961623a874e9201aac9f2d91cae6688d2f16a1b1b949473772a432da33c9f49b90e5d0e3618ccc98a40af22249aa7bbcb857b114c4e6c6e66c6a57b34232326260ac6ad77520d03bd03bd03bfb2e140a9d3e1bd14227a9f142a1ac572bd067ef841e3614727deb84b44d25f4ae73ba6cc3110a854077fa782ba296a6aad6b693689886f68ede2b52420a21a6d410913c0d820e7a56a2d136812448fa9cbabbbb73be297861fb085dcfa30191e0993313938c04085e2869244d2c91685eb78f226d42c133c15f24f23c9979a73745f3137c21913431470921d834a9be8848c7ab2458d2c4d2caf33c4f0621b3b3359ff65142f2d0351089d63e403e201f900fe8a012684404cda0ebe832e87bfc68e8b741d043376e3b80be50e8dd170addeb790dd6d00782a1e4a1e1288346d24c99d5a409e7900cfae2af4d05f44e26a2220ed047dfddbdfbc2b8531282d139393932116573fde49933355e48742233a2699806e8abeeddb350d32096ea7b06312546b49a990d229640d66c2ecc40067df4541251a07b2fc132923acdbb890908d43dbcb2047507e1184b5d771d5deebe786c53b1bda22192557d23796025db0def29b4a913a471b2145a878998a739bd19a482a66abacc969d068b002153bd044bae323dcd446c42ae245f971ce1459988b2e69d3cdef411ade45abd2923c2c935d6e44a5b46cacd29a381963ea0871edb04fac23b827b152446d2605963e52e08b1542f87c494fa19f52da4bda3884e724c9a06ebccf749c19369d3a86bd3a8fb507c61e3746dea55104daa972e51878647d2f058ad56abb8a990724b9a1aca2164bba9844e69644d4b22a15312922fcc41f2216466a27b7d2f1153ddeb088a53af262927a240af6f9d36795ff54a94937f566e08d3128d04d7ec91bc7ec63cf5aa49484e7292933c0473084f9906eb27056f7e39423b86f0342cb3fc69d3fd46f7daebe87e24df0e3a67be293302a2c061d4092296ea2d9602147a55258f96159f558f1f1e10918c1492ab4c8ad932a6a81c779ab9ed83402cd5cb2c67220afb6a5cdf10325b1fa0d621268b28738a4e4587b1efec9ab96968b7aabbbbbbbbbbbbbbbbbbbbbbbbbbbf15dd3249b5b68f5ca71da93011a52821098da000791db769197659f86a27677132f18ef993374c4b1883da39e7b4e6b4b229a2a27b59fcaec830764da33a32b092ed4f70c3d4dfebd5ca42844d309e3077c6131244d4e2e1bc42ae334daabf9e2712f5ccbf70d29c3cec997f2dc84458e61627df3615d1e935d1e9b7c862a4c264f6f0d1a47a1a517687cc27a29e939b3fc1d7e2a669b07e84bba6de04b74d83f522dc37b87170e7b44e08f74e91e6e99ef6e99fb9325966cb9caac9034f8c678ff9a3f6cc06bcf970c2b44b9ba60b60ec5d90eb1b03314f10e8f7d4aeb7d9b5f5d0330dd2acea0cb2b5ef091371586b3fd952fb72c3d16d595f6859d6498b64588c3082a5933df445a2d6449e265b904594f0fac8fd4c920cf156b15463624c4ca947f14e54f6c28891b9c9b1546d5511a49664632c52eb1f1053960792074c647b201c1053f6073f44548bdb3720a6ec902149c8f60c8828ecf60b8847c8f60a88a8ebf6088844c8f63ef41095c8f63c449496b23731a5dadb88a8eef6346212d95e878822b97d8e3dc8f633228abbbd000890ed71882814b7bf2195ed6544d4c8ed6d3865fb181115ba3d0d35647b181195a22725db9762caf6f8cc90ed4931650399afa8548c77a5490d19a2810000005000131500003014088583a2e170208b63756e0f14800d83b450664e9c08b42cc761c81863083180000000000000000091e1040034a8d1ccb5df0617248fd3f197d7a192cf455bf7fa0e373cca63a12d3015ba28526ffa9747bda2de4eb222fb3e631d61d35c8936c4cbf190e6102fd858bf4bb28d1779a10bb54f5d5b04063eba0641d039e6c32e6c12ce494c6fcb23ebbfd18125a1720cbd7a8f210a6039aa9e519f3c4ca5f883e9d3db5f774423d5588271f69e2972aadea53bc109584cf660c61cb66a4b057ae436882a0208cba578b1c67c32ecf47c8b03843cc690f4cc369db1150e89d41ed68f953dada21e4b4670ac93476c994fde8d21dda7aaa4072f307ab86c75f2aaf6de936aecb03381fab628341c08d59e2b9268a99d37dcc32134072cb5ff040fb87bb4963e91af0bf01cf38c7cc8169bb1d4303196d9d33d321a44af1a79803d9b0f252622d3619a1733b6f7a89d86fa833008d3b50da4fa66a960f0eb2086daee0740d4557818f534b35461105368c81bcf97367d794c7550822c318cb91b9312038695238562962a61586cca03808bf92da56bf507600a99405a2563c4dc6beacb8ee1807c0a17b41a091d6e08c091ce684f4004293306c9d57578ea37a3db301eb9c7ed673544a776dbbed29480744babbe75090cce87aec0942264cd048faa6257214bad8797ca1ad2ab1775dcfa05697dd3a7a79118fc2acc04825bea6c757560bdb0471cdd0bc013299010528ec147da3535cb2247769b8c280af948b128d676e979825d3870658af93b341ba4a92c3781a4c522d01a8d8087f8fc8ddb921a133cab43c00ed93a92035e99d470ff2f2a2814f14edf31843166f7f651536a555202753a1a30eccdd92874411f794795f1c706b608f265c04415007d1841fbb9e38d92fb888cd0db551c6456d230a9582a7b481c3c0efb2afe535b66562c9596dfbee39f6c6c17b227085abab3931ca02aa8b60a630370c5ebbd98b52ff73d7fb326563c7c0b27810a63893e970e04339089eccef52af7afd7daf76a86376555a83962c34a81f458c90fc5326323719e9657622d0d5351cb78dd45ecd7826e8c9021972b895519dedacd4aba08e0668c18d77372b1279311a8cd7392310d9f9fb27a781f09059c85d2effe9e5e7b6c602a7c579e1558ddb89243bfa1fad43e5699f5ab853cf87da9eed354d86ffe4b05a3970cdc111d34efe4980c7c1dba8352083ba166b44c4e046dc8385e292fe32cf952f6225726e641c12b5b8e3de56249c76de1a50673d7ff5de728398f1f3e279f091f7efb79d05f169d4e02fac0d9bf3ac47185ab3eb1544d8a0f39b1ce17e2fbdebe46ff298e7719753d411d935323e9f9f08e88d4a4423a4561952fe10c474b81cd347b2f35c3743d13cc1b90cfa1ebc4528e5cc8cd152350978271529d40922d466a23fea142dd4124de8912dac9e5769f46870be39f270d0ac2a5f838869b4941551879cfcb97a0dd76a8c96c70ccff057930b13aeb34b58519db17ce1f953ccaf76f069db8a41cfae3f22d952dd7f2f75a1c751dcf474bd63526cae3d3123fc146428756d3b981c3419a586c8c027b32aa788ec398be159b6a367a8878b196d46d1cdc632f6172637de549c58c0acfb64c2901e002341427c5dab800342449314fe9875088140302fa19679aef27b46adc628e9964b6892db3bd235050ed1a6ed832b399821ac7bc963950e565946203d69e7cce68b8f02ca17ab2804fa4ec48f890c4ab9fd2a879878f0ddd34f418e298337a851acd40466689cbf68c6835cafb28d85b44dc7fa478dd2c300ddc8dab00be08cf921344fe5ce6a7b3333974318de652f4469b50f06df69b86cbeb60885cff4f3efe778de345e6da2940b374181b002a0640c1971128aae6148080f067a13e682300652943de4d0be41fa3e23ddb7a1dcf5e3adacb6bbd96746fe56f306eafa06f646edca7d0632cea91fc7348f227d1cdc9cafe0ed5b70e3a521f75908c9951328444a749b2b21ed0b2c621fdc96fbee51b8fc53bef2752de906937ec1b406c87c410ba7ddfd2c631ae37f37a68a80a01b1557e620d1078ccd56fc480e841bc2c5823cc8df87935d34c4d5b50e3662fca349db9f8bb51e261e111389a1249adc3941793807b6d134f5ca8423870c55fb7168f9e59b562806b28e11483d65b82a350f83dd47b231729b69cdff8a844315d87bd6bd04c1d49ec2a47e0a87d8704cbea2fe177644aea8df4a1836636b7f39e39ddbb48d9f46eb63292a72ebd6d639278989c56463c5fc78428461867d56e65c0e81047f0ba8c03e1db8f9847acd2ddc37ea34688b02564ec5a41ba2ac209990863f1d96c2ab6fd1908ac889b3436ad6b3d1326c20185f17d114cb041a1a3ce21e6abec5b62d9c39376c4914b1cf269cf6a62d80412d04d251ecd05e15a08af4a772dbd706452db4ad87c839164af6a31a493ace432a6bfa2b0e2d75492d5ba0b88e3e907fde1ff20f39fa03f6db22d3d7e493166a8556a1d6c5c630c80c7e099bf6c2f0ffd277437a00a24c4de262e2e097f5a7e9fffa57377eed7ff11223089ddd142a2727996c68e8cac12acb30f98d86cdee316e081a6444efe61b3beca20fd7bd0aec334c48c70b0524b01c0b22d6a74115b42f1e945884e113c159479f7c0f31d20d44ef2a14958aa204e1ce289e1c4589d790141de02fdb78720a850d329c48a0cc871e9302ef465f098d509ef2be60896f00160d22f8f3adc9b1ab64d974e03bded021a5f2a23e0ff3349225b2057e1374aebbfc4c9adbf0be494d86e21e2081f96b3c66aa35f7e6bc1cc476b0bc3cf487b0a8257c2ccc3af0463085d84aa442f0e36d99fbfb9edb358c383427e750ead21772b1b39f83a5433b4bf7f926f43f2f0746dc42242228704ed6fab6324a92d8817f2f80693bdbccde3dbd99f664866a0e3e2d532c3529d9db6ddec0efa2b2e334e5945d4ac3371843ae04a76c31499062a762d8511abedcd68a90765ea61ead4c197287c152b2ae3a6e0ff021778c18c21761cd93b68f28a951bc6675261e28d8e3b6f213bbbae19dd97111b58fc2c7e96d1810dfc7517edfd0edeefed6d29f71121dd80be86c8406b04916e604354662a3ae1aa4c7cfdfc28b4853c62bbbd6929645050e3b7291fa4665e90e508fbe427069d48babd26b87ffb86a3b227439568e5a6ad873b14ea7836c272d32d6a841a7a0df2992afd1c786911b0acd4d2e4524ad6839504df685727bcf5e20467db7810793ec0d8501a2dbe2ea7fd04e7a8b943fa9b70fd299140fa4888756a4dccc7b829abd2a5c8dfe6a7002e7e2e31d8745289afae5f0edd5df00c9456d58bfde26d5e5440bfabd9a051263269562430522a1fc64415a0a9c13eaf0bf61b3dbbc9b6545d40782881deb80884903103bdf453172efcd201abfece38c7f2d53ac34eacc4e7fc2b3c1a4ec659c37efd2b1b0087e951244c6444b16363db5891469d0ea31da1e2f42a2a27eb5d6f46e6911310710a3c00cbbca8c7fdc453fb1bac50ee94a82c0311c062f612df439cbc125c142f080bacc48cf0ac64790df4f0f164f25ac218ec4453d46eb7e7b1d3fd59196e24e64ca659e1df3cbe4aa84ec2f468d89f2642fde8a967ec34a5d578a624c7b845adda992774237cd3faa564a0600d069c8d03d1d2582d5ac317fe42c86a16830f60d1970409f4a7263bba8c3514e58245ab4b4651f1bc443ebf06827e95db3d200f361281d4a60793271518f57f63e11322dd32d41d91c1d8341dd55af4990b26216a28712e7c7796bb8f4c8a52dfd90e4f7cc711c31e481aa358dc693e6b4c3aab862b14fc738534e399ca9f391e9c4426d00d7f886992e0306456796bbc4222197d69413311893b0ac7a7bcd447e46eb8c490b6ffea8e8b80950cb002e02b46e9f9c0c72e1861ac20fec96527356cba5c0e222312f17ffc1fe845f3f978552153e19fea23a889f9c92f3cc232db515be376f903517a0a51a88ce181f5de007d20a867a28e0b482067137255743a7564748371a91f306b5eb671d4433b9fae21f8c112472f4bf842daa2b09d5a43aad4afd271818bc7e83f1768e73f2c89dee4a412091d095325a62daf4856930d6a41bbd1f356874cec674daf4c8d6005e9750a3abe4289d7987ea1712e52ef05eb1bf3ac53bb8e28078f4565594b7bcac404810733d44f417fc0e81f65f669c2191740b77c32f0485b31a9eb9e634e4be7d50c2b2cae097e7cd4baa7372ee5d23fb9cee24c5c5b25338e7680ccf2f804ce043d66185ac37e8539fb2284de3fd83aa84836751e05d7f593f65157d08429394b0591c40f63faa5a21ad709a6ce2e789123a4d71a3b8a3cffb1a78c915b570f14c86a78927bf87a5075491431a542c814c17806cae723ad042956a45a3e9b070c49c977c365ae851f0008335b6f0bf8098bde8c06903051fc45c55783938adbe8b3c6bf3a616b4f47e9fc61149025a91ebcd3d102777d817a9aed4b528a95e6811ac6a4f5c89feddd42e15a278525ed3352600dcb265e7891a1c297f948b1e3e435d6b40edc64e80c08011d4300ea953d6e89677a0006ccb55ba81e96cc05024b4e73a9d01bafe41efea4d593072d4f82a99c3a3eeb88f88b03244686d9fe0df22af5243d7428b3ed35eba713af0a01e8293621679f4025513863c6a1f53adaf2de4ef8c0a0c7e60b029dbd852385608761628e673675b3298c169141ea6b033da918e726d1b70d2fde19c1490ab5c0a3e61deadd4805634059335f66729479890b5c73cd9b9d6b284152d4bccfcf5c48b55ffefee85679db51df7d2eae374d7d23ea06ac6c8c52bca1c35c1c853dd5c3a8ad6ea42bb9bc67f9295f79cb53ef76572e95fcdd9d658d8dd37de475bf83d45d68a2d2855074bb573f012d108f50234fd129e2d4f1c4b1d51800b295f9ce3e21532882581454e5ca48da00628fbae9d7c6ace9d52f21a78a90d9f889e2b21fb637fc28a22ec2804bfb643ade20e6705e4e1c7279e94938d5a37869eea4e89ed1517bb76dd292cb21580cb77fd30102ec7138086594d7d4a574a04d60a1e5d6aae80bbc6da95de58a6f7115762205eb0abaf86716bacfe1e42182c77a7dfcdb2168785da5fe04a68d109d883051e0ed1037c41508f91530a485825e36b1f36702d7e0e7c7689fb26dceffc81ccc657e35741156b636798db6791639995070e8239d4ab722330be1e8de469d4f92a3f8a07c33f72e76100254d3f4eb66daf4c474010063995dd07118519248608b00d80de66dce62d88bfb5f59b4c0767a1d1e892768636f4d17ca0c7a553c6640ba4d33bec168316ad2c34ca79e547c8911f2123b7baf5786bc425fe8fa5259262ca70759df31bf4e3ce2f685ab595ac32afe2b56ac70f4b4602bb5d538a694fbd8f066491bc7f34a9a7030cb96f436bb9946de6b6cad2a344c2474ee6d125322af76d1236c4d116472db137bd50067a39845b8766ddfec4e40c1bd9bba3c9594381039b35558067d2757ed086629fa9962ccfaed6354cf62b5e3e5a38bd80352d1e9d149cfc8e75e8b718c8c14b26b1b8ede775700872fadbd2a8becdd26218c26a5da5ddb776f8e2ba1bda7ef8eba9e586d2383d508cc01df3d6b069575f0741fedaaa4d1ef7cff83d4484ca95edeb909bdf72bc6dfb6acb40d0add29bff8ee9349dad789ede3cddf378506855ce91d1982681f42ba27cba790030ff90c313c445ba3fa9b9fbbadcb97468d4efb53308de0ea903022a6de566f7e951721f702de23fcc30b873001d9ed4cf4da3139f17479745cad78c639b6d710398257f620cd6beb5fa11a0775cccb2a3df3647bd2d95992a71a25257236c730ae88f7455f49b977995f3954cf01da8f514c1aba7a640436e9ee90e0220633e397f9f206c42507619b7fd0419a13d6c30bab5f82ea084e220a69f1681d08017808d6b2d89603025c036e05d321e917d1888502f1e0fd57668b0d0ba00d057f18a416d1d812a4eba06facc6304f4c312bcdd5eef35656a089a87a4f75dd219201219a8c2e1e4865059e74f49f61fd7c5462e56fe928f40bd156474b37452c05a920d75baedd03d94a275195c4c91bc132507fbae26882a3798a3c365ac16b8e1afac0ea91ac517dbed6b1efb07c4c85e5ed3b9274a14474358f242524115ddd23a98449444efc482a6112919340924a91f3c84948a43ba743e0020d81a7eac4f71623b17591054edb85475a63857f84d29b19a85244b5c01254c38dbe1462b42702f6b33c997c74d869df618bd6b87521ee86728d05a2e1f24b843ed8d9c919212fbb5b9d0ead2abed81316acde8ecce24f146aea38a002b7bdf9fce82d04001b9253c4e545d7fd810f00e53fd9cc81464532314d33e2272d33e04c4936da8b04c5d98a816e75c68a4f87e35dcabc5d60c5bb6810ce2d9aa8649b7b8c79e94c6432397db4b554103aa9ddeb37e22322f7f9004a6c9b9c166eff5c5d93b1f2c2f4535824f4ead2b98e50e894ec6d8c2cf0bc8a09452ff4a532a5d068684b81bfa09142b73f530a6d44b6147803192974ea31a5707368e96ca32f35f02c33d3206338b8fa1268e0624ee1560e3fa290409668b18a4001b9eabac97de05c24530ac4d6b863e3d9489e03c0a698967b710c2e030a2fee2e51b89ac9203b6c104c7f8abef9d31068f3bac40f52477e2a74fb3bfdd1511de860c1d6d37f853c6077b114a6c289fb257ba301185242d9d318bb28eda51a46117096a87ca5f81c8a532b426dca352005b7de5c174321248e6c95ba54950c8c02cd5ea2c70751e0d23cccb15edad89411bdb0851b843b940b542eb29ee719d421329fb54330c63d02e290b88b639532196384080f54101519b5e7e92f07cdc6b522c1d3f54022db1da13ff4bf1dba78930d5d4a163e5395657d54a775238a084d8816268bf2eff43fed07cbd94d6667fa4c212a2d08358969591d8c443eb01d8168dbe4e8bfb1c99684ac09d5bc02a6d2afa654906cbf8b4b4802f6f3147b5c9152bd09d89f52413ddcf4843f21c6095b01a99834355cb754e7cf6a7b4a3a8c8e912c3d7255713f8c9520087a8aa490b2d761896a5bababb6a13d48bd5e24a075b2500f3e8eb3d44bd849aa57fb9852c9b68b9b4fd03286ab882ec63cd738d00dbb00130aa31d3eb502c7fade1f8329f976570bb201a91f049fb6f7a0df3946da96caede024f56a6ad616240253bf181a047b80c4fca7c661431ed3ed7da6a7c9520fde0664510b850d16b36d4ab868c283e5d744d428d79fee10f5f43592fb933eb720594da7936101bf73c8dc7c48663610973f12ef9780d3a8acf688b021ddda28adf8c0c3dc9ac16f5dab56bedb5377a3aa32898c894e607f053d2126b18313a132f3a74299555b93616eb18fe59ba5615f0527cd95573ccb12f043e5b128a1ce80b4a242e9110fc8360e004e6f8c4454bcc7a7517c2c59958459f8b9825813a6325ca2d958942b50427b219d0d152924c76504bb915d2f1bc18e0d816d21bbc2ed5ac09574ffcb5d244e1d6fecc4c45abdd8b26291641ebecd6a812aee3cbd0642772bea3c22d04889a873c28668195e8292746db02a4bb555faf52342feadc2b5e9efa60b91676bf426aae58a706cc8cab5e12d5133e2d8fb354f46c7287cdbf0d7d78a9a150dc7dff596321aadd6e5af5fc2549647765760dadbba861176df127dc353158a7a613ec33f05bc11cffcc7eea1039c5fc4c68a4e4c35624ec1c126da85bf621261cd54f876ed9aadc1086b83a8c9bc284f61ccd1fa0beea95e866d95add9a2195483c8a6a55b58565411100af7f59bc23233e835fd7ef743e3816666226359df3697f4ed6ecb2b143f4402e06c8ff6800751fd6aeefb9a522c8b81ae7e87e2cb1a06a59fe62661628b16637ca147e706302e33b3328c17adec5d92ba432ec16f6919106cbfc13f963a2878c2a88972e39272b6f88d6d7df2b93e1af4d4f723c43dc0f3f400e58da1c618afd974c0e5c7a3c01697615ad0328651cd8eb3c114b832671af3bfbb7089974f7cea833e1dac1d2912e3f8f64df5dc5f40f563a8f02199d17780063247f29d7fa368097f6e1f711358199a8ef61bf86708a3fd768465f147fb763b1e003c5ccf93f77d6b238816745579f1b0c20e200ec3cea5eebfe841b09eb2357358feb50e1b94a09246f1d7450927b7da5215372e323319d1230c2918b1fd251c1423b0f1c917ec6fd664f5f21ed12cfaa8dfd28831a9e23c828abde68c11f5685cfb4457932ed64dc594e66b58540c682e5f9f4821acd5a209e6e7db5693a54297e4284713c4be6c88cd3f51e3d6df9c5efeb5e2f70af7117d42c5f8f5b6b5207553820da7081f696b8ea5a91396feebd26417253ae00a57ca711933daf8ba9b4b02561ebb7461ddb94de1804c339dd97b865490f30d0896bf116a0da92566a311893c7f673e28327770433d43d73017762a41f206f1f1047be68ac1c4fb1500aa69561dea8a53288e643683a92f515effbcd297f7232b04bd2ad1ddd106446dcc40f5eff012fad8a9a1738d0eb598e26d0befac089f931f862279e069a649c740fddcbb5b30ce0cd888ed3a5278c366f196acb02eeeb075be0896907ebfb2017b24bdebcc5ff9089c3afbefb83490d5329beee7c1f5227b5df07ecf97d03baebd2977d64fdc623b26943df237b0e62c96b1126e767716cbc8c8522332bb78ef63910c988919ab43e7badfa2f84c964af407b1cee4606e241b6a841ee18ea77550b50af3324be5e29bf2113910d1e87699b63d295430da14c28cde3324ea4218703e92bb0ba61006878c7a1c30f72934c88ed2a21ebb1ad77689c145299db1e77664906644ad269782fb7086fa8676db46d721c4dc879de09461d7b8c777624b1a0f7dbac4938ba618ef33e954d2b03198f6ce53ee604d30cd2aa2b65ca226588e3a79e5ad1810d148f9ea2c23787413a05d36f2792aaa0ec153980154504011801500a84490b5b4056061226c18f5d6f04ec138eea265663029c1f30c759a34adc4c65997e712fad820e864d40426198f8fc7ad8b3f3b0374282d206b602c6c90967e2fe740175de00e757930c32848417eeb9559c42bd88335225e845866a49a00945bfca6311efbc69d1cefbd26df8050a87a6dae9dcd0485c7730d29b3fa19f5f2902a31b7ad99e53d90f88aeae7b74047002eaf84d3e8c8be42e2d01be591a75ead2dbc3bd0edaaabd5983a5bcb0d2289c0965414b42ebfd6010929e36ac86957d47e1eb58a5ce85a3d4822527ea83db801bf8a6b7857736457e21c82affadc5cd125f2efd34957a20056d0aca8a21aa6d363b902ac39d4dd718ca1130116db6fd648e231ec2594b6ab58d5152b6155d30ea501285bf494cf5162a6128e565a949513ba789449ea5f2659c1d491d0fc87a8abef12e6a3d68ad0d559443161a3f1612789c76f1a7779228f03beb26622271ccc747991ca67965672f158a0f1c213d20f398aeaf808e819cd7d978358a55c84dbcb55824cef9d5439bf10124f1e03bf270738aa4056b9787b3e2fb48b44281340c07a58af7346f8393aa0550997fbcffdf2d058ab12bdc36adbf3c18c91c395cd6201d8ea88fc688703b045ecc27dd67fec11c066448b2d8b895e16d5b4eca3c4eadca385cc5b907fa31d53a6482f445cbad5b00c02ed3136c90ddd4eb92dcc3f9b2ef766d41617a90321af03d421aa2f925da74e9eaeb116641b1576290d8e96acc562b5bcf188689616eec12bb3baefbb0dc8438b36157021aa0598da38cbee9fcfeed42d5302c6347d686b085130ceea87100600c3e3ab0d8403d15ebb3d0f50665bd985d7929df9f46184d392ff1a46cba74a92860991ec128819cb3895dc54804e860af012311bc70d553af5886490b6d48e08874d39b81f0f0729f9abd76da1e743aed6c826e948aaebf15ba460b1273866e8cafb452dcd8254c82153857b44b2b70d3687aad84c3ff31873ec441a5790727bb8be870b8ed7b5b83804498287572ddea82047e82c5a193f1136f34ad6e5819546194a4222e5bc7f5441a81959ec3579a546c73d879204dd4bebd9cd8ca1710b82aa18d0754302b90d81c5c979bd2e867362cd374f291582afeb216a095cdd3010b0bb8d42249bcd1a870d1832897a7407d5c53b2107bcab5582438d3a88cc499d4c1145bb341beb9a3b8f7766338d0c87d84c9711537f075e82e4fc9f8238f482de4f17e3ea7ac51cea07caa2b0373764d126a1ada6b61dcec1906299190589ea893f26fb5cd8ca720707e0b0679380bc716efddd0565a6e186ddb1b4aa3dfd6e23c0d2ea9ad10b39226b97b601340feb12ff4a8196a985e4d8a31719e4ccc74b25619344f3f261c1c9243369b906ffb31620b71813b7c12ea23acad1936ab64a1d996567a38ce4850c45fce035440a3ba62130121921149d4090df7b0810a58eeb477c45cf87bd53d3c3b75ee2e1aa9a9f86d12e7363ccc92a5e17163ed80fe4b0168ee9838efa78d5f464a67d6a2dbab9062509ad9f36071c97d9f52c2d4f64b2e03976873cd262687f2c0af484ae3e5895f7bcd2c59d8d422678c4dfc6f803653bdc1787819fd4a54461a55f7bb661956d687808ff307622060f71c52e8a982ed5092a730d89735606144638a199d54b3bce805926fa1632fe5706a0096f32fe19638fa5b1f3ad5aba1ba0fd286918c6224f64cb26799d5ab7c1b62ba8f750208e89cc2c339591025c8733a062870c6992f833441a2b09decc4bb69f01ea980cf108b54ab2cd8e1427db0a62fb0a945587e8abf9d9fc53814e5746fcc2be921435e8c0be4b14b5695f7f0214d5655effba1335b4bafee5260a52fc9014ac98a781b994828b73a4652383f7207b0acd3c98af75ff6bb733025c3b7fa73d99eb83874b738f5cfad2cf5fbd4a11ac0cf36645f15424eb72a5f56c4a67537eed1c6dd235328b7d653412e2651a314516b942f8bd970599c06434a096161d8e7d7b8699595b34e2bb4683113d56040defab91eec9fe48ab6c76fa75f09719f4fb776633c78448418723550179696b8bc7c425f699acfbd4e28fdd0b25b925a099105a2ad478a69258cb1d4207ca458636c5f38f788603c43b8dab41201980beefdab716a79ca3089b2c59811f74838b0f906efedb9010dfe4e5bfce6592e6fa30ab3e23fd03edb2760a710e29203b1f8a46f6db3e5792830c2b5ca48926532bb8bf472b1aad30cd97b4a108b0c4de7e4362515002647145d30997b856324f99c3a13d26a523acfbaf0a155c66d0ed164a911ea895f9fe3ca5ccdb277789a5de8e0c69a95644c38efa7e1c693191dad5e9470d1c5cf6f29d4e7da1b93e83b0c05f42d9e31c9d69e0fe0eb46a30e9b2be787c83f93b7ee9190334177a969afe9b4691e74fbf65d553438e904c255fc03f69d376daa97f0b5f4499747029a8282bb4cc75594a6d14b7b6c378845b792db74fae51eb23865c12289637bacb659df770ee13b66d3e914e5477b33fe86137a38bd8fb02715ad9bdc5cc052add06507b52b6eeaf025dba87e06e6e600d73e0eecce38d745d4e2f9b005bcbe5a5635a5672e1eed568ff1aa66f5feb5037d4866108078bc2d641eb6a2868519d4a34559fd1ac074cf3dedff446be1247bb7b9ac6f34f4bd0a156dbfd20276cf8ab5b2f655e3fca9adcfd5e4492484c8443b1f8cccad4119a4c179bacf3e7ce80e5f31e2141344a01eec2e6321241f86a5db95a579519239b840a370757d9e4c96c1240ad18c3e35a7d08026b173566225c9a7e2a53a1329af6f8e35a980a363c86dc72f5ff10bdb5345c2ab2317cd23a745926b63b5908e2b1beade5f0f044e9c559a7a4de1773ca1f3c42503fa03be75335cc92c5a16bb7e485f0c64796603a7e5adc12aaeae3c7b6e2fc74e1f9800a50a03543bf5537d57dd405c1ec8bbd39b516fb6d94b96a606800616d913d859ecddd5e1b121e8d2a105acc7c4de6fe49ba57bf7af82e78c78006212a7da90e72e11d9061e95bcab8f4ccee059c4dfd5e0ebd35d44b5cd4f3149f00748911d274c9eccba41c89aecf4841360c72e5222acf297dca3196c0801edf5770fc6ac661f12999cad4616b445af6057a3eb736c135d78db5cfd4c3eb40ccac97cc652ea3ae1abacff6a63856e8c4e81705395e6892567a53c3dfb65e4f6f54661ce996e288f46eaf8bfdb6a4ba71c8f40751b78d1b6d0f9279ec3f71d686b0320e0560acf37f1ea39125376e2db45969f2f9605cc938281572fc35ae9666df9e93f4e92e9482a348372b8b1b50d7812af1e2464d7e48f40d5d4d20e8dbfc17e317377e5c2a11ba89c43ce2fcf977b92f8c562359dbf61bac485a8ce0307b5cb6b8df039db8a1d1a108816547bb880228f96a0763c0f13634b748251968838ebc608d5a1f9c594cdf3968e35866cb8c2f2b4840c4e8d147d9303c69247e8db3b3a16b17e4b78ffcc8196e734db2a44c8a62375e1a0d27be6270ae08b516369637be34f4f75abab52bfd79a1143d7eb815ce0705ef17684af10fa61179580bc0288822f8e693aea3a19f890a4be3852f4e42db883769fcc6471a3fafceb3f075836b9c0f89c6bb8cc4b02bbd33608541c9bbf98ca3bb4ec1f95ec541469e4a34867446a4f1fecb85cc8937786210a0e62acbfb2ed8d98dd87f7f370f3f898676f4aacda59b7f6ec6817cc7839cd6fffbb6f24f9c095f1d34e22d30260f77fe6c05560a115b0b0d2dae2371eb161a8797d2481c81dc05e08bc00d445ea7745327b3733c9a62b4195a796f2e6b6849886f9931681678de4c8857e9566d6f874019c97d92815652f4f9d6778ccac4c387a12f383b8672755cf9f2eeb61763185b065ac344699a66ba42e1aac5f85dfad0396e8264bbc3b816447a56a4fb6e4ce0ba1eb7f1006a30ba9e97c6a1f332746b1f3f764e6ea87c43eec2857b90345bf05f0b0a8d6e1068ffb5dd2bd26d627222520a8f25f88373e69f53304c72f583dc957b4b666f8fd118ede5eafefe51f08596ec41ef59cd60033c31729d1c106192c09f7a971dc760171e5898990a4b961dc42b690c7b230a06f5a05823bc321e7f51fd8262757dfbd9931fe04b049b59e8fbb6211ca026c05fed3c50d4dfcbc11d30294348f6606fa8ef29cfacb228323a06c5a945a1530d1e5af38cdd707b2fad43545fc63654c6a030362690b07f862da4daacfd726c4a39e7726ed3720a5cad5b1f625554b1c7771bbba92fd6b3e6b5182a1cfc3eb573c994b6a35a0509839c664b4464a1145bce9026452200de04136d52a5a32e7757c4749b3114ea41bdafb9a55a8de8d6c58ffc6236ad7b8282855223043ad9d009020c3d921563376ecfebe17771455b8be8dcd61268cb9d4846fe7d961e07f70e9365cfae7e346621a8fefed7a77bc5ed4eff1790ac108939bfe7d924efe625f750cec54c1375401e167c215dccc089505d102ea4aae2713f923464dbf294dbb2c56e77ce4d19515d0ef5aa04805c7280cb2108db6aea01c2e73b95ce84c1b54e6834c42c9f7308890b309bdbbd380cfa0444b8489039f320e0f74fe8f2f724cc870da2dc3fdab263f2acd695208fdfe8917dd67f0d0981b0eb55a4c2d484ce3a016b1e4d6fdbae9f271755f47d4392e7536c11d997910cc5e296ba487f761212854cd5666012c38aa2e0cfd7541ebf0a76cb472e64f5683009e220eb99189b7147531d24234ea4fb8113f3efea57d5d193b29394d0464fab1566dfba00eeadeeaf5048b848d08175ec944a91c731db8090dbc10692fc53592c5b7e2bb49b8f2a93a6e1e29cfd6c375c2af2ef83a9cfbdd2505257bb318149d772e2f3a103271dd78af303346beab7457b165a0572c4b9e875169dfdf7aaae6582f99134d4f5ebdd38a4dc8cddaf7e9bcd0220f207bf111c69061449b91b9a042080dcbe476b6a6f4bf3d8483b77395fc9b51d402f0bbf887dac21d8d88b023217b7bf01ab68a8bc1debe3f84a1ecf90cc0070cad783161b52ff2b204eca816620c95fb3b56ad1e258821c1eace89f1d972695bfae4224c182931f9fc5f06b11aef6031665b9b0648364eee39704d72fd8448d35c34097c1268b089ae7ac5b037a708dc22dbe8739281c53c958367223cd83fd42d2b321eca791ac1781d4319f20a82714378d750bdb4acf4bc337ec42e44b23b16e80ad0bf5323cdac9541242fe53f7a5dd0270b433845535a036ea07161878233d6ce15413e641a5b96ac0f33b11ae2b4dd092c3e082c667cf2558f2e145161c9a2729542eeab0049b65f9b00079882c338a05c899c332e10dcb1f248ae932c26e9c81905b9656ee2c4fbb894b8e20685b6c4441eb688e5dcf59a6c5d091fb14da4d40d17eed8ca5a3863e2537a2adb058b5a57a54250b972b04e543b4cd2bdb1e0ff8679925a5639cdfa7f4ac3e5bd3a14d1d8732f7410abbb928b38132376a03ee9ca9aa2545b9e52fe5ed08f86dfc690ab521293a9e7917a519c204f5314710d68543f511603295c19aeccc710a7be617390046f2d6ef94a5867959a8bc278bda84575c867c390a34a5703904694a107a8d0d27188082d1a52e1e81401d97447355c56dd1403bf3b41ee7a13c37f60d12f2e231807cba2447d3e49d9e4f412e565ea52e1f4f3bf3b7bc94d48e67af6ca8b47aef24b11dbd357dea12a7c7fe88ba402f2b2741622df6ce17a74f5eae36f98f2f69ac16976775cb1553cd435cdcda07cc3cadda536c9f2c696b8285e0832cfea1f4d23aefc220b6f10c31249f1ab79a4adecff5b1707217b62470943f5f294226ad3fcbed5b14fce7032be24ae7008054b76aca200ffc23d3d89e4d56c660cf20fefb5bc9d5a71637fa31f8df046da15a36bfc25dd792048713134f689201a1e102e146c41a5785b09a5ccb023c7e408a51c863ea1815039a34e7534c1ac38a0cd2294886c3c85d37cc872bf153118f869bfea2eb85960fbaad0ce9329a9499e24d979e5ff74b20cc276d478c6a0094e80f9169312142506d4ff3189caca116656778db13655f1a53b19528feda9e720447e8474798dec08d0cabe8c949c1b4734bbc4b4f12680d25f2b406740253034c037492a5abf5eeb200b809c066a77f9ab727085112a8bdad58352e02816f0599048a664b6b36088e1f5d51ab71a15342168bd79654c32e8544bd2246e59da24b051a75e77be4516c2816192576df77227c008d606a410d63145822cb6dbbaee25922510285f36fa60922225a17a014527773dd7d41167cb404346aa257aa2a6444a680cb9e19464433bcf91fbfcc33aae1cb521a2811c855988ae9cdc2e1e3462ce0c535d2cbb463cf003aa21b52b1ea389f8205d31a78413becb20d78e08a7261cdfa9260ea90ab3bd16d4cd7c7f49cf8dd38ecf0747dc94544eda9919fdc4efe814ee9877a98bb553d63407c02f7b10ea98f579079835e6698d9d6d00bc83c0c93b7940f86b43aff87b1032eb9eed086da70b61d13f23b3ac1eae082043c4cad356458535100216030270cfd02faeac53988ae78e706a70948fa7d6671bbe1bb4c57fcc01c394adbeb0fe583b6c8287750a50b686316f4f3d9bc68df315875bbaa1e429e183a3539c41cd1dc5a31684befb5e7d90ec4231957c05c3c265238554cf8a6ce901eb44b94fb0180b8e550dc32444535b1e4579c324a3d781d1f1073237af22bdb8214730b7421ed887b7bce4ad4c20c932852fb25cf77d2b1094c992b3d02ae5677223c7cf00f7d0bd3152da411b3e23a1d64858aee064cba147642db71a038aba4c34ba3c31795d2a66b049625a76b18a6bd700ac4e3cf1efe119a4f2e955e252bf3d3cf2c05aed6a58156a444d12fe7cff8b3bf4167283f3ebfc5c0e8c33b650bd025af4167423a5ccafe9099f3a3c4594474d2dbc8a6e049a2dfc3d92e70379c64ea780b3a22b88584c159f0c240af6696821c9b1644ba62096ae258da1ab2dd4d87da5046ca032f79f8c4c54a0d544d0d670e78ab93ff05c8eabf6bb9f9ac43e4efbc02772b70844d80099fc7925b8ffeb7af5319fb686f94842b7afb2d8ccebe934c156bf2966e9e8c11cbf421db8da6b14cb79965814aba4290eda448e4c33b8a53e41454e89f92174704e3be54b8ec6fe41b3f53a2582ca5409649c0d46561986f650b858125dcaf7671f8dc78183c8b6add5476cdd8b3526725353eb35e25a89495a4ca60fee70d858f6971c220b0e6e9c2c1902d8413ad745a15fc4938f7fd24e4889080e3cfdb8338987e400c695be3737eba7c54bd10af858e34c6367455fa01d1881a672ff106c65d5e91bc9e64937ee450593a51b47c249d0304b6b6308397ccbfc0df8a6c3b3e6b68e84741c0fc076366c8a724ed5cb460664ed3b3f76c6d7d5b7ca98918ba34aa071878c5caf1e50a5cd5818cfbc9001cbea3dcdf1ddec6af05bbdd8e665a33f746d440459e0eef50066f63569ce8ac5214fbddf5cae6238fa2ba42c198214a0b0e109d208164f65764740e7ebc4e89724fd514e3bdbcfa772196b7b4db977f47f75093b2d92b88fcb4eafb80b83171ed25c438a9af3839ccb50cd451e1835e4ecee975890dde61421317ed36a8ac6ba067ab6b19573fdcd4a6bcdc488706da95174ed26c9b5c0e4af11808fd115292ab25b25de44a22837716fd1ae22631a9a200f5a3415dc9301aca0d0981814c8a49a8384a6920cb2724169d6f2e0559a0dfdfc73ea349107ad55821562c2d90d7360ba92e223fff8848a18299173f87180fd9702c8b22899a07234f0e0853de01fc8996fdb30a875d4388085c14ee9a50800d62d116b312da84a80619e6e7ea77a17664e27033b95fa351bb21ce852a571b59122a9c8ce657943175c1117a584a9377661a35239d32ac6cbb16f3671bb72389034b65fd2e0ef33c92c6056c1933967c522bea7a0bfe8501c52e724825da13ebcee7e7b02df62adc6b632e225e401635385ecfb92cef800a4483de2dc958cd99d6f5e174b38f3828b8ed9034d8a1d84caa103e6cd0565917178b960d8975801b6d1c7c7bdb3996443b35e7455ad1a1b0d565a038e737e202275186eda550dc6a352675db9649e9b93432e7d412c8576c752171c268520103e65bc4d103cf5ef395cdffb5113edcf6fda72352d47512cd6b70a4f87bdf18744bb40f6fc3ee2633493d7e48c99e6e2ce168e374f99d9d8862e924b9388d252da6ffbb9faa12195b2cd5c20dc77604864f4c8894aa8dcd7b4c3fdf04217e292d0b3ecafbbf84174df0100a3f6c1335d7d4bf19d35d3d7c4a104a107ce92c0aff99b0d9d46889a6350f60c60264ddf6f850c78e2544fb154a67918e59f78edfd859c9f66190a4001d56df98e686c830a2304e5a39be6b1c1feb1877dc33f0c8b39f461eadabd22e2e13490c412701761a97728b84136b63165466bc63a6ec1b1cc0a550621ef4250562222a4410b4c9d2a4ef450d913f84656245227abe0d4c4cd2878f861839734b2e6b2a94f08d272c2eef2b60f695531351039aedc6c031a121807423fe6043507f383fa782aff83730fd80094dfcca0354b73186b8ed5cc8ef228898e440d2fd561b07caa4e4e03f9aa4a62f16edfc17eb4d3cdf79f43e3363bc50b7affe69a442e4fc0a8ca323439850c44cbe83f66af1844ef338bae5cf05fb4d4269ed81fd3654f317e77c53eb7afde7e9afb3431b401bf8729b1b219904aeee912854fe124c1314cc2e99b7c573db17b757e20ceefc8d0165ce8654d8133ab6a7ca3f386249587798abcaca68fd50dae8dcf25627b825e8d2c6169cf4a9f97d2b4ba02c64d8dd4410036df4271af5a7d247534728550292a8350ee02b18ea884b7113dbb9a8541a2f2faac4100d5932918696e94fd1f81b117ad6c0bd6bf4b402870f02e9ee6ed4c88836c0234db77eb62d828ba59f9182c2fee878747ee5fc67cf4f930535a242ed691c7dde6888a4674e8d136389ecd4ddda09cd848f6b86ec4892cd22fdc83912d72caa0d3a2faaa1bf975d0564b12d69049c4ebd23d1cb49d904cec9300066003f02bf83129f099d84bc25aa05e741133c6a79d1d3945cb4d0b9a1da21a57ac9ef38425062e283b2cadcb646f423a9da8f35767e68c3619fbd8016b2f0c8ad2d0c7ba9371febfeb8b700ff90c64789c7cf1621e73df46276c78e1b6a2c582cbc6bf5c13babaa4a6751c7966ffee51984bfc96286e4793ab81d832be2428e4164662642372b73325f7f264f1d1c23f523bcfaf376ffaa26c094c9a58e5471a457da72b2f1dbd340c44acaa8ee47127b0e786178aba58b69ac1c9589f56ceae624484d69ffbbd4691432a2b80b05e69e127171c69249939d75d216a43f0618af182be0005499bf346251e114a59c703c94676a9e2eb8a2bdeb01cd72661628f435db3faad57c9fe4fe203fc4a3b82169a861afb5f1f66167e7c7822580c402a7366666ac11cadda780b97ca7209217829297afa9411833c8e8871db23ae716573644b85f63f75f1ee79d1c3e361b078ecc74a4ced65d6e5773f6a98863879cb13be08c0cc3ae3464aba98ee26a53dc1f5919b8214f3ad4f2bb0f18dd7fd449cfd9ba065e5de3eee5389b873b1c930f67fd1f6a605b30cd4e6b96bb4e611abfee64ac8b59e5a996d3647b979d30faab7ee8fe9659e5fd7ba84d15a97f1c5bd4730872033d7b0771c327b63cbd10a95e9b36027ffdc279b63ee3f505de3e8dc2b5b6d6e70412f8d23046f774915766bb10fe13d4af1adfd04142e14cbfc76649a8a267dd2575469bc41dee6c8303b53dd402eb0b1425f6f38ba2d318ae80a59626c07f4d15905a18dff02f1510367d0d4a19c5fc7fabce3cfc7b1a933cb4aca36404e2b21c50aeafe595cea17175ce447be409812e0228d160203ff3144183c7d704536803bbd65fd0fcb5c48107098ee02b748159326d20dd2ac6e7315e0d1ba2bc9b47405e6a42f6bf79834331d6ce508eed57c4a62dca4bc650371d0500e9221d514615a123c55393e8e75bfac623219dcb5f5971fc6f08e9e71c44901833636a82c446481711880644481ffc18d8292f6f50877ad29c59896e95be0beb0a129d4ea0469ab5dfb42817845b7841fe0101e64eb8237667e4842caa9c952f772d1e05b7724108efb498804f687f50cc4f18f6c32513b74680eb6a1ee3cbd864fd0f88330c698bacb18a863803c81b4490971b52ae331f5feb14821c027d64b9b1de9678c229970489d781dc401a9b0b6b30822bb4de83c9dbbbce272c4386c186572b503251c3050a703bbb5f5b215f69ea73898a0a59e83fd2767ccaff0e65d2bed7922875e077dfce668f4ad4c84c1014d13c920a7a9e8324181c936c21d0c02d0edf4de20bbd9852fda1e2d06111917a859bc028ef64cc40b778d270548fe987cac58a231afe4fdbedd7ef08a83f0b292f242e1f0034949de866a5541c2379ec47150c83c24c5d67075925b887e88a89063b1bdd021b57943ab84fb565115456310df96dec8e04a639901997b54f3b0e5045d8bc22b6efd1c74de74a5584a0d83984b4f14abccb39cb619c54cf425cc43704d703896184f2b46b82f685001e6703c5af84978804e2045123b3d72128f53e4543e25e830d73663990ca3fd78c1a7e014d8288ff1cd60ce3c3d25c6596a248a0ea14a451876dd97c3b9ba7581a9d1adc1b7a3d99c6d2ce736cc992cb4081ea9893ee1b44833539afc0305a40d28208312130cc2323d60e4fe2185c118b592d43e3a888f8002e8346408813a4403c66c9da0be66148ed95f061da4d3d562e21e3339e329e5221946d404916989163102f28466accaac192fd764ab6d375ac56294552449667db02df840e747d3c293fbf959d033393acda7657004301a26951b87821b15f32c656f4c79f579858306254b4218eabe11577821a3fb1b1fe834b752b9d28c6a1bcdabc4cd5330d9675c186f95aaf79a265cc295d50b663eb2d122989436c21b127d1dc88748ced9c0138cd201d9c25ee09bcb9776781d20295b42d8275612595a5c4ceaa1be3fe7e5bf08b12bc180269e6cd34d0e329465384fcff29fe14d81c5fe231fd431088834f9cbb88949a11a3a98a50e135ca1072171e4f5938f16593055654f86efc0004b8ef08afa76c28d342392e936823bbdd023444a2f561d75a6ef66cac77d739c4c710f28c8329f986b069fe6ac0697b5625c4967199af9040ae42d7fda1b72fdaec71efa6d46cf12b7c5d6b7308baa28bf927df2dcfe66898a7f964dab1af4e5603c8629930f24bb60b300107ea5e0253c65650b5e9338278cb3a4635215de456765ea2ce3decdd0b4078f0dae91875d508eecf8514f0aa38df1e30eeb92b9ae1e683463cc6bea9f256df78641faed039a328fcdf799f7a5f52df09383837238efa6bb55bd4095ec6520caac69b046a1654bd37892e1454d86f1231d3ab6eebec1350eae8f59ebd4e4cfbad76c3ac426347df09fa0128dd54241deaa860f7c57667c7436c5f5cb06e8f871ba78f87e1dd0c68ab5643508ab1d350147d51146f5a700489a387ef63824894b3a22581fdefcbb821af191dacc9c2f6c4798f93c8f1baacd3c4e5f9098fffbecb65f61d9281f9cd1adf6a6532db7885b8937b2b084fc99827d97d5fb2e925d466ccec814d0396bea619ecf00be25b46e84a61613fd831cef37a07c20d9c87d513f7f8b70d76d8c39692ae9302666420034a061a7848d60967d8a34081e727af8862241e495f4e5345c02014e35cd06aa4c99f025c7df8acf7fb3078ea944931c5a6a3a8e9f418f24bc9569ec7d4a8c3384810ca4590344ce5ac67be02c3e90a7981821671fa26533ed88ad3a061795749b7d4c4a8444385b2f5a8c4d5734c1f733d33f0003e6b33e893babe2b717897f2ca1087822a1da3405d7d1c3e3bb2d04a6c0bb3f631e72ecca45d20c664ef7aebce8cd51b50dc7d2f0d0d9ecea63e0a7841760b5ebb4aeb819d6509e2091fd65095f4367aa224e57b81b930c9196c6a45a0968bc76b5b9567f6c740f95592b10514c75eb1cb344e3f544d538823695a5ef77a6072081a9785419e8033ac2848773f836554c4fdc3b3ba0108b44a57a1ae7da33d986145c70370dc3f119083dfae5e1c803e634c3c76ea991e73c8400a80984cb0458507860babec1afa5424a7d20b1ead4c789829f159e9b2f6f29f02a4b205941b9dd4feef79a84ca0734f92caa21da70c2c89c7f3d3d451a9a993987e26b02448b190ef7fb97ca923c88d09f53243757fde7dc3d28ba64bf7c09234dae2ee8b1e8455c089f0b9c5ad27e28f96c0923484eb1167c61084c07de25d20f8c23fe563ea0b2592ca3f6da5e933cb3659cadcca0e43000bb61b5892270fbb85ee9b1885afdaa1d45258d66790f73b8da99b173b021bb35ad9f9be5cf363655083abc5bc9ee061b65022728d5d2ba8e4512180021ec4c533ab987780f31a319d7bf8417957559e5f728b8c76782e0932c60fa07147f0e0b884b4fc8c90a642d1be427e200ef37261c09d28c8d24ca0b69bc2a2a871bf530807cca70e184711bf99296c82ed57e7c53dd7349f7bd5094ca51869195944928b682aa75cac7ef203f9dce3b0bf7eb6600cf896f274f092b73816fa05dfe358707a595cd97233b25b7e646c0e54813b36d599d0c40d3b6d51d84e505c82d43b47390a8eaa7b76dc1d4d749174d101211d71d831f6e00102ee8b5e09d251ca9c8cde158da661f8e5eaf1732773d857e975be1c916cab120fb8c9ea8fb9484a1791c5eccfcc68f2ea24ba9ed1527659d17734ea3d33c773d1859cf72112b7fdd4c2c0cc9fd58c17d7c6f580064d5292018256498448d90d0af352a7cccc9d65509c066cc573c4901d7acb0be3e09b1492453a6422e41bef7e878e90297105e5c75f664414b1915d65f0c1c62b5b58a07d899dbe4a3e55a13089994cc982f42ab14e86954cde8938defb8e052509c7d503bc59242c4ab8c0cd07050e6c557e9442bee61967392cdd1bc597dd874d353eb590ac9bf75cbbc63451dfdf070923dcd5910a69efe415e7afdfefd922a1b36e0160bad72ffa31b19bb54699fccd2203a0e73e43f4646c1349db136064f05cd3d03cc7f7e820fde690b79dcbab53113d6e44c626ad19e77c8b565e11d67f847e9e67c7a2e87b2cff20b8276ee051ff4d72a142bc46560824cb9e321b10a570d88bbcd49561e91726f441a5a0b7f0cc8e9151291287184f8b9e77c79dc7549a92fa1d6472f579812a434e0057206e8f1e16229b85880cb459eb15d974ec8f791ef90e62403361a544d2b29f905c6756e0bde369254c6fb0d83b222b5b50b2dee5c0491919af51cf5ccd3ef0af004e9b9e00da64caf87b102392751e9525c997d0ee604fbbcade439f122ffb256257a18d071538b424c4dc882f526869646412e893e5f0e2ba3fd5f636d8cb09bdf8602f27ecd507bd9cb8c723f6178f241c030a0d86675930543a4a07010f6b7b138ed7a4b5c8d0077998236149c479f6395fa56922422491f8b5fb87bcc54ae30864aba655d8d7bd8a09d071cc0be04a02a29baaa8b95d162b5489811d72b17ec408249cb59290bdf726724b99524a322a06ec05c306906a43b2eab4db6fba4b5605a62808c5691d8b0fed8d92860dfd63cabb6d406ce06cbfca8fced033a01067e357291ad9e673046b26d84e770f6f1ccfe96da8fb6876996936eef6845fda713dfd09b4e37a2de553b7cb73fde99799763e473676f17b9867df86ca7dc5dffab7ce9bd4ae075b1a8c763e54e3f770e51918d6106b8835c47a06f61d23356cd850c83e6fdc6a5f38515fa637707c7cec6f3a6786b6819fe36ba8b837a1665e10b2cf300839936581777ae388bd0deeb40139bd8d379db09fe18477e339daad9ee6a09de41c586f4dbbd5b0877fd34cf9739c404dff5af5af737a608d0c4be53c881932a03379af0d888ddf3e72fc349cf6cbc5ec6d745f6db8d08da4dda4ddeae6eb0c65cd79c96deeee623f3d88c7ecc5bd9ebeebf18e613d51ec31ecdff6c2f51a9dbfd16ebb1e58e54f7aa3f4f1afbfe91c4a51f8eebb958eef66cd77b2a24057e86ba4d4415f43887df4ba6fba288475a3a70bbe0781fde9b50b7bd30625acd8c7efa407315467c800b320bca807b12a4427389886083f41604e60546fea6b9d40a80675a903a8afb5e4cb93aad57ef95f2a02ea6b0951a942482aabbe160f5c6af66498af25c4a466757f83e6bf971737f399a64d999772fb8c766bda866055d26d03627a7f97d9efbedcf5ed47469fe9b34cd2cee5bb674f44be67bfd3190ff63654f958ca55fd2e5916fc97871f9327189a9e36a8ee4b49ddf99df2f0632f3f835ab7b4f3baddacf2f2396283cc3a12d495ddf5cef1c8b7a12ed775cdaa962d4724fb5ea1da5d45ba76bbc1d071959fbadaf41df6feb4dba0f7cc860e1ea689fa7718ede19aa1dedf85c8df8ceb96690fd7d3cbdfed056cab8af630bda1fa4cc82f91055a16f633baddea2f1377e2d9c7dee4fbd7bb746a326d6f1b10f93c0e835625ed40906d3f342bab629d69fa2c25f3a86da74d3325ecb37ff53433b3a725cbc245b3aeda773dddf5f4d3284fa9d35e90bf4eb599d30cbd81fdf59c8e1d664fd7fdaea7abe9afd74eda4fee71be71271a3720fb3c30687557fef6da13d1b4f7ed87e618279915bfc4e94c995d3376668a6d25b92237f0984b6b49968aed4ba0e5cfcf4f097c740fcb7bf182383ca13b15d5ab83a9ee5eb35a1283d6922d2af392252a565f6b8913eda6c1bc7f1aa871ae42688a8cd0a5664bea894e4f5721334fb4f8a1061dffdd92b9c6d936edb73242be00fddb7873800feb906981338b6ce71ce9e33de48c9444254298a010483990a20940486283a41a474358e2491458984ca184282a590200aa8ba1e44708c742d5fd050d256474029a3610151e78f5eed55f6ad3dd83f8b7406956d3fd25126a56dd23fdd5ca7d890f7777ef9bfe2d5aacb468286829315a25535a4a88aaa9be961221b8467d2d253f9d545f0be88baaaaaf0584455da7c26d93f95a404feaa9be16101075abaf050454f73d62f5b59234a1eeb39856922ebc555821820364ef5b49baa855bc52205b1718cdfdf7d9695b8f47922655a6be960e5124076a6a57531f8c9cce0d8f2ab5dfafefaddb40784c66ed6cf9eda3ff86719e4e8548481fbb108ada3ffd1ace6316fc5412f3d54ecb711fabb16a76bf2081c417607c3146163928a295840595dfc7408216587210540617527cac3ed6d74a124506d0dddd2174777777777777777777775f2d69327180ddeeb06177bbb77bbbb77b77b7e7f07058a06ea638ac18f0c1f5c2613077410a8399bd7849823b989d56e17f73fc1c63fcb779f767cc954accecececcc92253bb364c9ce2c59b2334b96ec4e7f80aa5336524b8d654825aca5ccb8547ece76e0dedece5743a94e351a3a4c4c8bf7907461829a9a2573ff71adf97bfcf8f1cb72f4d885addccc751cc4df340566f112be8948de7bfe78308fe76c809b6700661ecc838bec41f81e7c7077a94c69165a1672c208e3c8d5ea7a238c137fb52b234624c9a49c4f4707eeaab3a9fbafe32a7c5f6a90a9bb5924a1a576ef4b8feadf3d98e55a4c97e1c1d6793b9cdfd2f076f8fba772989d4ef5f5f6400704b081c7026b6b782bc4f7959cfe3a29dcf08092e5be720154c741cc6456bc61567cf19d712a4b8b71caf076c4f834c6cc4eaba545c238bc418f81d7050d9ca393810b3c16625815e2c7f83322adcec7106f56f11f0e6af4094ba58794954aceac087f85c23882118a50042c8ad0f2af1252e527598e9aab35b6f6bfbf47dd59ab6ab73faa4af46fc76b48539b8610ac803f7d6c13afb6b1c55c2e5f909c78619ceebc6fba8328017a364fe8d9bc1ae9cfd0b3794194387936af1ffee060ba45166676a8eaf595f143c3b492885237a98b1a280c9cceffac7ab34541b60e65fd3e55e39aeb66a873b1ab51ccf24895a0cac1b7a87d8a070185ea78ecc0d11545e3ad7fe49c931a3f15fc797381abbb4354e7b060c7824fb4bd161646bb55068196b2a3519b5b8a7a3be663f54b7facd7d5507d6a9599699123d5ff6d340666418059f05f5244227b3559ce8dfeeb91e0b0637c48d98fff986ff4337d36fd6f2b6ffd4457e474903e642a9c51e16f0f01f0533798ce2c9593a900a0f771d1c736b0b556923d86d24a0115d613594290b22255c551174248d103304147ecc00a5f02184a5c314454c40d5508e1e3fda341631c9f62c2efbcf6635d3faea53d5bdc2d8fbf7ff9f929b3337fd3a1ec71c786974cece8d1bb617b777b5721a32576f4e8dbb0bdbbbd8992b8db5710325f31ba3f776ff7f8e07befbdf7de7b910a43767f980c43860d9d9fbfd78fa163117a77d4425bb88ec5fd8a105eee2b930c74082fbfe005a14787ee0edd08477208d7b7b7802e99a5f18fa68159a5895ac5085f49bac72fafdf39106c7530fea33985577401f26a911df3de8e86d0a34377872e839691a194bda66d9bdcb8addaf42b89ecf1985af51f785d7223f781ad175f97345ad2a5c68f5b23d3896aedba20848ed2a23bf4ab053febdd32cc62e6e7fef8ed2efb40f8fa2def2e539f3ed9153920af5edd5c17ace82de373d518c7636bdeebdb318a3b74bf5a0642785d10ae4308e52f2a73d9303a7477e85ad800fe0079357ee6f0b90c116649e85906a1975ed3fc336d76f7736f5473cf5f97a372f3e3f7de7bafff22e2a78340622d3e29237db4b7c5dfe16ebb1ae310507d2d20925a4020551484690d0dd5d70a22a9050416de6017d9abf9ddedeeee5ef6225505de18c2efcf4bdb0b9d1ea92a47dedeefbb3ebc6b82b5a12368eeefee8be0a6c6d2ef7549e68b2fe67ddcbb4a0b0391a5175da5a298f23bed880eef6397ec01f6fdb523142e5f9d8f4c4531df738747f090a572f5b57880620230268dc8d2a5cff989cd4a4b650a8ad494c9733dacddd7ecaf2f61a76c3fe33a9fb76543bc5eb42145ad684c8c139fc3275e7508532c98f1b7a25aa3494d995bbbaf7bddf0d0a94b5685cea7c5c350778b07a1da29bc0da326588bf49831d4fda1c3bf2e4aa5d36d4b543c183fd2eeff11e10659813fa0c788b364831e0c1991488964de24f399767d768a4014d51af5b5806852b3d6a0136fd243cc64892c10c57e1fc2ef3668abcbeff71784f4f4db4feeb14d677af84d57c70ef3d11eaedb7718ddbffabd6e9447d2edfa4ea317ac9147fef64b79fa61dd2853589b6ed0f3cc854cd24eab317e26f371a7b3d6a236bb55d5662637f36f7321a3db4cbc64b8f91b977d3639671bb99b0bd74b4de39e73926d50ab23d47ddcbbfab3a17d36de9470cadc9da78bdf6f83c7cfdcfd33eecb046549fbeb2a5da5ab7495aedfe9abf43dcc83fdab7b6d19bd2e4d2b65d9eff086617fcdedb5ef4ebf955826db5e662b99e8b6f1ccb0dfdeb4d14ecb4ad7f36325fa2edad513472f80086282549968a9db437dad1facd4ecf46efcfb484d3e47e263d82f507cccdfc4f174a5876f438d5be2a2c7eba37f0f5758ba3aaf322faf17b66abb24cb4e8f994c587c9309fb1de2d9fe61759a2886617f2ad2d5d4d95079f6b7c77e87ff4fdfcdfca43650f0bd8b5186f6702dcd1926da81c0a79ba13d5cb1773245ecfd376e97ccac62b42b498a8a28662da4dafa4cbe98f0610a33fc1ef6c18b0f463f44a906a8afe5431866fe8d7f83bff16fbcc176c1a77bb43fc6edfd16b72d6eefb7b8bddfba1de2f1ae7163ecf82dd4d9771bddb68d8319ddb487df71e489b4dbace3cf68a25be94f1cede94aa944691b5f507a782224a66627e7efe1caf5c0a506a0be560f3e38a907a8afd5c3979abdcc2f2240d7fbda1c4f91238ffdb7dbf7be5bdac3f1d2a2cc77f139cb997f5d1bf6a69f3d7de236cae9d86146dad3357ed7d39cd11eae1102e97c789a765ca2f225659efd28643f069d73fad572316a8dd86637f59d54adcceff01a318e7605cb66592b5b24b3caa9f129d597be06b75e16e98739f859cbc8404a8229758370c6a34cdb032b4ae667c87ccba098252343913a6786899d7e6c9ff59b5e87d0cc1e52e7faed96cdc8a923ccaec7068901e7bd4934549d72378a3525526180bcbadfaa9fb9affa99fcd9ca6fb9103ecc2ecdc6aedc52f6b4abf3f9ac77f9a3e4fa2fcea76eec87fd636b1fb488805262544ccc94182833d50428a48373d9265c34d495361a33bbedd2465da484bbde24cb4e2a292a292a29a9325265a49800534cd0a413cd7efe1ebbafe61135a99d0e0ff120845b831621846f081520f19344d00e495734d12efe0c91d273e935770a4b5875ba4b3620fe19911fcc1435c3d17c87aaed00373d2e5a244264632a0952d619dff534cfe01edb6495f79d0b913839feb0cc9ba2e210ee6eaa08b3d3a0d6f5a88b62e6a073a047e5d9ef819b65aa05b353215ebe1ae6afb441b2b3a1c6eb038f59524a2022422e4af4bcb9481d15208c20100915f980072a4f073f40288150114a786104a803ccc1c713463b380223891c92e0e31d0511c697284648c21244f8e86e8e00d33a628cd6115faa106a21e1a475441276c90bb8b48e8862944a9ad23202a9658496961148c080e9d25a4117605a4ebea4925a4734691991d45ac195ccb5e4d4d470359fa9a44c20359c94cc48f698679d65d9639c1319fcc90b33e443468e2c12098dac8661d48398053d88714a237837f8f6e080fd8cf326cc725834873099cbd1c7efcfd967331fbe112441d3c89111c037b24d16ca0d4a52df6d0fd977fbe485c1b299fd7258863d969a73fe183922c6d43e7ec74753eba00ae9ef3051cd330e7fbf9473f211db1cd5f8528d2fd5582c87911817f36c084aaf587255a23ea462c1f42fc1dddd92d48ae673cfb0ab66060a3366ccf82b43a1a69630ed336c7ee9b378491d28e8901786611815c156a75de94bcfb32f9395380a4fa1418174708c250bdbc0cf2ea11293a0a021cfa979c8458c7302e348a7e2561c4a94cb372b0df950132734d8aebe7b61765f06f58b0428c848e7f84ff65ba2c9e8556a8239498531e5e3f81330171a629c136c30c1f1dd3601a2599edd23d95be1d8886de0a7bee3a30adf83803a07d76dcd618459b0f49fdd789a3772647f1689eca6eadf53357127cc82bead91ce2132b7a78ee34ff8ce876e28fdd6f8d2471b35be54d27ee67370af9ec04dd40dee31cb0657835b714435afe252345e986e3583fbc055bb77a445ac86aec637f15d4b0e06c0182d2758524328c24bd1508d3ea6c6d72a224b8dbf5de29716114665b48898d26a72a5d5648a4a0a7752e5cf5e1bb5116c2d5d5263b820a95830357935dc7e2cd222f17b610f42455a24ef2429b29497596a357152462b05417b446b0831b52302a78e5a555f6b882b5c07c4aac4f8c435538434f5501a62074c468c105f5a4280a169f5b584c0c1e644ab67b3393b2b1f8e918e55cd8ae669be66274813429cc8a0625a48c10728f0820b0d4e30459603182146972054d1f24407204c32a898d5cbc9c40c66708226c63821740d292188a431436cc1c1c72585887a05a05e52aed44b47bd98b01344ca8f2625a85ef5e2225a91d16998b5aad909b27a56aabe9610469288ecc9dd473191c4c44f7ddb51ac41a7ea1cc1745d1caf2b8a0fea75455152afeb9f7178d4a06345ab59b1cda6b6e8086182aaa3bed69017a805f4f8be1790b758b41c21f90a9b790c913eb681ec4aa02899a2a4488951178144c2ea1f7d38f7685e01f82faeb28eca8fe32180575dcc1e3b916950dc632788ce569dca31e8d40f92c4e8d93c2ccf66a5e51dbdfd87d462b257c3bcfd98586f3f66dcf038cdd869dd0d717cb71096eab3f276f477daaac663015ba124ff7b6e10e7f4e8ef78743b50a84f6f70bc96323352df420b3d5ae8b1d34287a1a18a97cce9b44e7ab8cecce4bc164c14f53a39bed3a95e80ea36355ecefeacde1fbe154e78ffb82ce078f77fefc1d2a162fa77374078e8587935fe7596837639ea099c90b7a31f07d78055a19f86bbf15c0c9b0b5c6d5019de8efe1517440773f558de0abc463d5234bedd7be0acdeffbdb8fdf09fcea9f9ae41b37ffda75fa96ab82040509ecdab3ab82040539ecdab940b0254f46c5ecd388e0b0264f46c5e65ae5b551577f5a7381a5c272bea2625c57cf59a3113a39767f3929ecdab406194fc4c23669de81631ab9fcb2fd21e31abc7cd4d0f202ccfe6697936af021d0121a550397b1fe27ffd45794cef1455b930ab33132d127f48d76c91f6c8018cd3f58000911e3d7a24414ae22549529230de0e6106a33f16ff0e6bdc7baceb670933859f67f380a4d01c7a364180580fe77a4fa166bdb3163d2c450fcbab5bd4ef71511bcb1a75d60fa788488ff954aca8585551c16095c50a0aa4ca2a2eb37b592a776fbf3a57503a074b114327af07f1770ad6c383488b09bd1dfcab2a6f87fc27b1f776481c18ed7c4c9c2cf9aab54160a705c691484f20921766213de17dde264809d074071646b5690a2c56897b8fe55de22012ec02bf681c4c6a1bfe8b83612207c530cba636855e88340e76611b88b4532a7f0791a8700eecc236fcfc8ee4db10546d5f6501dfdbe136d5399db621ba699b5689e51254575639ac90ac7058956075c3ea473546d50455192a312a26a896a052822a8c8a0c55125463ac5a2a302a24a88ea032822a49550415115462a8bea886a012822a082a2fab2c54405085a1fa81aa8bca072a30543d5021a98ca6c6ac9d5dff7e18e9f3fe011daeb2487a3464efbdf7e4a640f5452f333373e3e0a4dac2bbddfd53df8dca8b093d4ad79c5c2a2f6637a5d424149517b393aa2dbbaaa3b9af6d99ddac3fe47bfba6ccce3c6666e6ad21330607746ad0a10107746a6a543570af5169a951b55835b2844185d5da02adb8c205f00833e222ae132d4ac4295eb46a5acccc3d859da0f2434ff142dad0f16f83413280db9fdb29249654bb2194018457119cb2565c61059c822539f11a1a14b3b8d091251d9d7f3a93a05835b2840185b35c0c0d21cce80b8c0698d116980b301adca8788019bd1e60a103664443287a657ebe65866155e8fda4e4cda4ba23a9396dc46168d7d0585a6bac217c7913a646da4036e83aa8d9092a3e744c8a50a496c4ac3a9ace1a773eb58b57bcd3184c276afc2e5e511bd2a964cefa82844e1dc6486b8853d6891628f286107eca8138a53ab3ba0699849c4e15282d88a28a0e66bcba66fd5511637dd02a2b6eaa1ce5a0aaa2e6d9a8af55c58a1aeb6b55293ad25159a9611cd6634159d252e862a85dc32252fb6b64d8389a9f41e3563419c838d48a86da8faaa1b6363d505b5edbfa0e4c2a00cab8e2091d943064d425024349495370b10432c23092f349fe15bfac6fbb0963e10f15306209a02fc0a0024a193ede0e7e308610c8904244113e525be693ab03cdd7ac7e08468059228b1834a1c4c70a0f52ae34b9a225090751a0d8a218e9803e3c39a1600bb27a560ba04424401994fd94a218238a2e59a2e862eb0166eef48a719ea65bcdcd76335ae4aa59b64f5f96ed974a57a26052a3a6690fe47aed7d6ab7d4328c36d73d2e46a4f3f24ad6d569fa34378cd3cfe3cc822932267ca95df186b51419537b9f44930e9543c3365ea2529b33be105437f3a8f7a93b1c0592caa3be16145d5ea031e369bc4fe595f2baaeab64a4625cf692c69c3f839bc1321307b3d558f3e713a973c670a4a789d9bd2e1e0ddbbbacaf66a03bebed4791a537805cf34d1ccbfcdbd6d4c35586bb779b3110916106c639bda94b9dac1a27b19932c2cd0e047a388071968744ea1f9d59ecfb98c5592a09533e7cf575353bb3580de06e2d28ae64aed131937fe507fc5bfb5e303925a2d3974e6f547b5649bbed342b5fb777dfa8b795edbd7332cb5197a41603c4c40957bfc238ae85719c0be3b817c601c3385c5bcaf63abc0f29eedb90f84e3baaedf682766d527e00c873df7e14e9316354e8b2dfed791b42829a6ddfbfd16e1b12a94459c4866b1be2d9cb4c6e43ba8859282a37d50a66d754acc46d88d32e629608b65e507451f94ffb92fffa1d2eb26d659f4393bf7f2441f5b7a38b98fd4dc50afc9144d93231f765568a29aef0980001b2ecb9903dc6a25ae23defb24a89c92a2596b9b3a12e95227b35ae5a020887fdc57535f5f99d051a5685fd6e6bf6974a8939af160b8aeaacf19d765b6df9246bf6446b783b96d54269d37837d584c9cf9db6d35b25f745833fabd3157a8197961361ea6b3511a6d5849714118e8eb060693551d46a028ac622e07a7d91de17aeed1b6ec4875af480a4c26f6f1564a5c67200c951252d92633717a4dc65816fc8e4639f6d119aa09f34f8d837577a8c03b2632a26b70d06c82da05b4095b4c802aafc6c6abd187777a44320f5e9850bc4d0dc53add95d1daa7677f75be18ad785c5f57ffda5d5b0502b9a78dddc909ac117cc2c08ff6d313b0dbabb6b73bbc86076b3fa7408176ab193b71fa92ce6ea6b58da445dd7eeb5718b9444d85ff1792e7a430885dc434929a59452ca52a974c357b084a82b66f7ddecbc86c5387279198a9154057005cb12549600aaac65b2905d992764afc6df0bb4989dac3d7f65814ed100fe11998a41bf15960b9aaac1dc7f37d9d460d06944b2b7a58ca6eff0e37e4016a160219a52b3d588f899126d4c65d1420862e63221355512f3b594b862e549984eca9e0a8959a5d65202a8faa33867fbf128c3272263217eabf71b3f52fb65dbd38057973e6d859c98485a1669be9d9ca8642e5655bd7468080000040103150000281008068422b1402898288238fc14000c8a9c446a489a48435190a32808829052ca18428001000460446648c646006a27dd0a8fa0e928153b825e73a7741390c518e9194ffe5ba837b03e0e24b9fa72b36f0af811b63fc610510cd003e83e8216322f89d16c35d808d466e5ca341397e147266861b78a61792364603280f4e097022e3ea152e23562bd48a954cd392c48bea0fd965899130f3c28216a70273727d44d41f59f487eb9a82b01c17a50008d3f4ba78e0f3161abeff255adf178672ac9304091e42acaa605ebc1ef27d9d0e897814228a9d7bb5bb00c286d0461c35acdbdf1489fb73075e5c47029190156e7353ed4097407d459c308f31a010ad3f44245fedef0cd01b36f59253ccbd1aec03600d07989197302fd4e471007f77c03111e79310f7711a4c3f12f57969e849e99e2b5765990c6a23fd39ba8eff512c387cca5f18cae5a60ef51706ef3435c86505f78f5321b84291293205a98067043b075b035c2389769be98256810ba47695220edbb7d0a90c244608226bed1000b6a93715800be1fd72f83573c26e4e49d808af8861681129ed0bb06b5ec2fadc005d6edf60565860308705a43e39679ad58a0618082be60f5fa44065bd23925d1d3062a1b2f35ccb5c3438812edc3dc46df0cdbeb0649950c915a5e4a321433eec376eb42135c08a8551665f47daac312c4a0d2f46c7d6c12d1d7c29c097af084803772dc5290d9f7fea09fddf736a09f133dd12d290fc01a78af4ceb0aa8adc84f5ed2af89d795acb257b693a42bedf26892edb950e34951b14f8cd55b55b4a41d8f14b71c095d25275c58c4329d285688489413e92157190ff4c0ea06df477beb9d59b6ae4b790f000b074776677c9b2f6ae93283b090b3ecd09a99d490a5a7f441eaf6b1a966ba3bcc3e4631e065fb2d8ccaa55777f534c6e01206d9d898773455c3e84075208f3fe72c61b6c9df605d69e715112dae9bd73e547ee6a8bf4b9ad0ca6b44a53d647be71bf3affb5d30a9d3220705d3bcebb953215d326a133575a3113be17f441fa7fe2ff183d87f2d7e00fb2f69e957507a640ed90321bc18af9a6db5cc9bc69b8e0b48f576a9c8956bb3287d13de3e3bc65037de9ca4db3238fece15397b27b6ee73a4af3ccacc3547757aec6aa6eae4d202cd76bbd1380ab973ec14fbb554f28ecd6cbcc6f8ecacd1e21ed30d71d02d4da700e843b5ccc4f88ca31ea00bf6d70f3c940afa5f9798118f7cbc8b330dcdae004fc8fad796afa8f8ae8838fa38448d195128a1db1e1c493cf10752b64b8c7e01d684614703867d6b4d644167369fd2719fe594f1860d81c29f044890b66bb7726bae33b5b14cd031721f1bf474b1b5cd5f83ccd1b6082c63a2742abdbc2096942b699d553f4abff94c43b01f1c47d5b3ced30f883b8807549c90dcfffe6992a01312d0d73f85fb0668e9303403ddf98cea6ddbdaff9c437f35d0976e95ffee52ec7450014d78bf6fdd95f853c63e9038262bc54dd0572adc7e7287b827caf6838b8a315c935b2552f44d0f0944a25ad1c431fcc0d8b8e5286df15569c8d5cf34801a94534a863e52edada7c35a7eee220f73d8352c0447f2c3434abfca6fc880b4e7a0a02d23c04a8384586314601dfaaccff80148a9466656898671f56fba7153409e41414bc2acc4a506f6c6a703e872ee40244c837a3dd6dde894ee02df28fbd82e8473581388e6dc7a096b91c753da7b57841b3716d0ecc31e7185196e72811e55abc21554d773423ccae6e1668d3265a032aab0bb3bd3e0e1d14e4a3557d18e6f9970110c649befec991bd7a3c4a93a09115e4a84171561a1171934a66b116c68d9e7dbe53f54d6c31417d873612f96a3dab36456ac4bc377e973ca0eb61274ae59dffaae5d3ba2f9f3d95fd30e662a336a1f70c91c8a8f78208186fd33a23be8a874f378e3a9eada2dcb78a4779ac6060bc8e079dcd2bfd2ab272f62a1694d0dd6c1bcb298cd5eb35f9fa28532c89b88be4ee2c36103c5fce3bca27ab40c2ba127aad4edcb0004b29306b8a652d20911febc416abe51ddeaf0cba11399a7352bb9274c990953b69d4ef31ff40bde4053f7499cf43fe7fb41adfeb1ae1c0c1fef81fbe6665cd1004e3a6da30b8739ccfb25c7cdaab9430c59a693f88623a16bd4b47692725b85e56a3c061e95e3a3e2524d78482a3b7cb55ddd796658ea91598c6bb6ca67665b08d655d99ca3acc3eaeefe8b9850abf59061dd1d87e069adba13e66f1fd2d99eeed6885ced1d95928302a72383bf9a9c0ba68a14b23f8b836f53841c813445f70706723a2bea027cbc40abb8ce6a499e75f075c85256444e700091b5c5578ca4a931c08ff3339d99a54321b7a9f14b7773793f00f4792b7050e700f04b7f462f8daea08549de61932ec7d1480f23145a8f37825dcb19957196b26eb10afbb82345977dc5a3abbd44d431a560fc9139d6b9606e1a3e38ee6c286e2b378f78563098ccf14640f6d1c1a42c3b3671fb027d57cf08b3fee2f2d761e87e415f1778d59e9e9031d5949549325845565b422c956a537875eaac7895c148750f63122e76ab3303b977e5ca2d0aa3a7d9386b2c7d29d642e7ae902b83ec05e95f393aca33f6c6c89afebacf3069844f2e471e7afef7be8820bfbd4f3522c0f91f3d870347985092693cb075786c42951e63970444c3788205fdc5da936523652df278b5c725d58e93a83de4f424a72a69d53938c98e695a74be270334513f8f49581c132a09d6e79ec1704c48ccf0c627a1e02389da3165f57e65f45c93d25c315c42798068159b5df20d28450952bb2b56b3f8472df6a75a4c02b1813734aee4f2d33717f1e6dcb1e3d3ba787c58f75d7c7757c4653c8f07058181315ded0a71d4d1549db044395839bd866bf8230044be5a6738c718486f67fbd331560c4d36b4a040b19d3b893dcbb1177a4748d2466c7d101bcac59ff8a47b04d8d3b6e02605149f28eaa86dadfeac6ee624c786b0775cdcb66ec061eec114cd2bc115e6124abb6df9242a6809f12afb8a20775ce50e2b8d0ba5b42d79313c5d0b873b65318e3e99f8d0a8fac3a802453fe8b58951b80458d7ca443233d7a6851a792f7b063a6b3a250359f7d1c64f53c45b2bf553e78a9f9d018dd0b36bf75398673d28cb7e7c0ec8f49d0173a40b19f97ad1ae16b34511fa23a91c4c667ad6e955f05e566f1fe8d37fc80345a278feb1aaf006d94ee0302d1c3aacdd2aa4ccc819b97aa4adfb9f3f11295a7036d3bf022db318d485ed6b7467204dcb4d04f1904bc6b28208043d6bd8b57812ae5f7b0b827fb003983b3052332ce7251eaa1e405b3b90ab6734388d77cb9b12f6886a44a69edb1f6434e7c61e9d097cfc5923d367b74226fb7590dbcfc753b570013122fc617253ba75cbf9626ee5642590dc07710d679eb5a0ad7c3d90fb87d5b6a17a13182704e4a4d8d0c153de1aefd3352efb5962a8f40f7550f06147b06318b8a59f03f02d5b95f122d4625085d3953d16c19f0023cccc35bd230afba87c3fbd1bc54e3ee2d3e764d09cd8d882cda9d3fb5f0fd574906a62023db444c4ce47ddefebc6e042fb551fe82cb1b6d69e66b900475f103db1154ee5bc2a79937004db93fe95f539f3310a0653d35489ff333ef82a309677657cbdb853b9bfa30662e306096d3d67eb36e556eeeee107671f7ebc683b76b7370f9e8f00b7d2cd35d768bf3bf7a7ae1d29565f01a1ef234987d21b68b03aed04338b004a249343077bbdd10d8bba2520b1bee743daae43c363e7b57fb230ed3ba9abfefc9f8096577fd9b511489562120f424e6691d1cc2c231cc8bdfbe64b6adcf65e1fe6b16292d60e4bcb5c4bb8e7eba75e01219ce51b9b0f5d668d0231eb98fa60b50cbdc12c1dc1b8f15211560272679b25e97b30ac71687f502ca69119dc514a95136e2303e222d3c157f7e5cc2334bfe7135d2d48467e08fe543f8cef83b6737a45e15295b98269c949907273a97a37b84eab9badf5b1e8dac067bee6fd81525a4ca977e1b78aa9723706a8ef1f287d2079c06536230279d041ebccb148ca9901c6c4912e3d6c5ddc4428774dd0012441935c967670d48cc653efa6b0f29969e6989dbba7ea75139d11ada680162b96eec821cc5e1cdce858a52efa3e28eb7351aeada344ac2f7f73b375a9c4ea70227aee156b56d3a198d3400929b8511486a3e5296cb2c0ca676c22dd9f97b426d0583136d7a05c6f9a1b6342a92dae2cfc9a28324774cfbb51fa036fac240c7cbe611bd62046e8b0421eb45207b540101766b71ee7df125eb720e8ab5418d5fc523da6350a2945ac32c74be93746af60b506d9109477f2106bdcd4af37022b28e2950a2810e7fcfa4ee22257f5ab38fc265ebae182617d36ee1beaace846b9cb166e4208ae0eb9c87a1e2eebc633a10b0d907963a3206afa9733cb1c60cace665ead847bc8d16ecfe7c31a5fab411066963eb0beb78e017404c8a62cd9d76c39701924b59fad6152d686ff9dd2726080a263bb38fdd90a9be8353ecc0e4f2b873053dcd58fc9e6d4f74f46a787fe8f5ce709ebac7a1b43779d54cb9cf7f8118c8fb84eb2255a6f8e70cbab29ea15d57c04b5d9475747722f1d24084867fd4739bd0029774b3a49fce7e6f7cf1bab2a8ea52b8e1aad4ee7ee8aa20a9be128d4b1ca3e232e63e98b4c4bb0607212321645a23eb4d7ffcae8e5d71f6824fa217294f2420a8fbe55c057a7244c14e9b8980e1577b03887453aaca88345392ed241c51d2dca61b18e15eb68518e5991c401f827c838ba60748a51242101d1082a9a00d1098a42a0a804884a4034024521487402a2102c9a20a21310cd1690a3042e353d2d34459f5f54d178bfcf74cf915ffd61f40262c93cf3d8a39d723d7b264013a256015801b6bebe5f68d708ac3cf915d301e963635af6299742ccfc5734072c5178780d51ec08ed1e260eb365abe56d578a0967e8301d2a1467b011cf1bea3756b026b97168341d8e38d3ecb1e90a65036228fe92a4b3241cd4c8f8071091141cc686ef6b25602943f5598e1abee00ae37660a410c91807c49057b22f86eef5b2eccb2ddfe0994b63ad8e41da90e526df869517fe48c7c6e945859782ee534974c01132e5fdb05e21ab3bf8d0f70d3f6c5bb1198968ca02fd88ad3c0d1feea3d5cad785432f5aa67d65fa9a15264e985c72882c4ae1458074569fed44c2f5a09bbd0b9199198eb424cb6991c76c8036392a4daa2dee8ad717fe9f86654858460387c4b41acfd850c3a444a9552c3424d932aaa98fe2b3c7097d39d6f649bfb86c6d66fdf0c470adbf838a801a305353a4f230ea5aa5730ab4db1079dd88d20824c2935098aa8015839970b15d1955bd6a9afd66a025a4f2e1d8fc4e151c8d3ef20c20925b3c608f0161724f15cf1450c60a94a15a996f443bcc3e605713b78b4af16508daabf7687320e45f2ae28fcd64f7a4af3bcb005d0d6c25b8b5c92c56d33a128ae89fcefb540d4e9bcfd2eddc72a11e86798e1365efcdfd68a6c678e5506685f7cf04cdc9639b0f890e3f6ec172a706d7324755817c3bfb8f8b80842eb544590796e6461b6b2f75b53e871da488a8c84101e86c9b3d44337c8186935daac66a0ea2fb2d16207c07c58c2cf83c3c71d09c5191090d65644ed21c01ffb8442b843fdc1ab0d080945be8e67bc01d272dc1080905887ec7b96864ffa97db227ab7d66f5f13a0a886b2991edb3f761c7aa821ae009f58f140372d7dc77cca4071299bbaa2652beff05794d529bd9984ccefda0e721d985c830fcc7904e96539ef789164e5ee5678a05716840eb2daed3d7dbcb7f679bbe413cec8257c44bdfe36419cf9ab9018ce7378cd1a999c0eb312f927b17da0ded3e9ea7b330103d3f975f44104dad4a52c538e795a5e905b79391ec3be857c749adc6b150fc2525e71a050193b0a95abd7bd66bc7807bcd41db02cda319232f349d7a75d5ed33f927c357394f25be11294bb1fdc51ce3ade98c0e6d4611f632be2387bfe94d3d8cd3344dde8378ea1d3fee2a55f26ae4ce644ac6b77e8894874dabae41b4d95a83f801c6661e6d5889873b54f583173bf28b32222d72170d41eedcf4abd5ec94dc50fd738fabe19003e5dc952b44940233d1baff3199ba59cb8e9b61075a5b2a41811501b2c84e4bd2e4450d27469acd1f2ec5ab0dd1e51da8a3d781404332cbb4ca94623ea9582a063f5d176479a1a44d5a451468ad339e1013a6c300d088a32ed0845951f7525e3c02535d088894884f233d7904a70c43a5feb3a27b9dd3f66015e911e569ea6e01b118b779a7b7943fe2b30bb67b962c14a5cad178eca0de0d8467b80282dbb9b363989deba845af597df3fd515b02eb876a440e362a5697f7d3ea5e917379d087fb5bc3885d3d04d13338976f5ceb19a45b25e55d16eb35c1e4f55c02e639678bfc5887c27ca13e1db8c6059953430e0019f8593641d18e5e30368f6f1432fab34c4161930274a974b77f3e26c4444a61cb62cb82b47a364e040c8e8ef7f05f3a95d030bbe49412dd7c29109193cbcc878c3a416f0b224c3b9b448ded9fa1fdfb14a7135998dd342b959d351137d592e0abc7f5ebcd36fa82b8a2e02d86529378887fc60e83c0d4d3e27f39b38f0a912349da44f102c2a1ecd002da29c879e2adc56a9dc9db57e0211fd2c233f8e8e43227e93b55b290968129be7b78566f6a9e273f8800290dba3564b47aca1983bda86aef8870b68fce19b6e196ca99061117c23599c981c1364a7f43cd455f45bcf2c79ec3d02f6609b431caff9ca771bf10d8ec0f4aff7ab97a0a43ef7de7c39591ab18c4826ca8fe0327c431a72741fcd353a2af4c2b8a32ea934c4ff21c307e5c2c1c33e5459188fcaabd1f6b2c2721acf651678cd628f0cbaeb6ce4236b3810c9cda99002e8dc713fef24ec3a6d871b476153fa0d61961fe573af9effb0f6f5d6082969b2f5dca789010ba987734f8ce19f6b418141c07266612e0f7144aefb9f4e01229f2ccc75a460bac6d9a9b5b8ce5895fe9523384edf3e6aba8e480fe01e9fbb2180204105246137d51134e10fd0aca89c1acb34b862f7c91aa88ee398c70e411644d51d7fce42c9cc881916478c2f94209af54132210cf4b165e98188b6c7943870b777acc7a94442289836fc752ff8bb54055e12aea47740360858b9d178ef5ce1e6244b56e4042b565a4a5a0eb788bca656103820ee25458b429240d224d5ce3a34a7510491bedd49d11e6d8c964bcfd6f4565017b54d842cb3553871a609c9cf17ae4b6fc63ad4a61e5c0a2e904e7cde3296707988722435d7a3248a206313804a1f5c3926d030afba5bf74b002805db9aa2f869689ced625bc650c4c19c9b80790eebd01fd32874f2c74af32cf700905e9a23c21e8d1ed9a7a6db6c7cc57ee4c72b3827bdd59b7b5cf6a175be7360f9bb3755c5a0a0f56e67287328cbf59db3ddd7348de636a515888f76dbe20277187b30e1c336fe90c5a0c71d2fda0fbbead2bcc31c447692ac1efebb3026de322c690e6fdf8e95a1f4d77d4568becea591c85dbd3c2730c3ba5b03e3109c6d84ebc6df9a488c99b52f2d68a41b706e6f76e66f0e420f9084f223f3b57e46261c62b491770499a90e2e79c0f3c5f862c896b3f6a2ebeede1ce9185736a1f106ed851bdd1c949712f245dc77772ba4aac1e84bf084d0aefc961810a9b595443121f34da8f97c5e38272825398e4604a3dccd6120f40f3769c38b5ef99aec260bf2ca7eb3f22b5f7f895189d87f41cfb012bce070ca735a12ba695b1a48fa7ca673a712b84ab020956fb12feb174982085e2030d985aadc045fb4b314dfea42c4c9027a9a4e78473775851daf6cf712ee0a621e477391794ceebb680efbd74e9f349059d8b8a301dd8cbec1fe9fd5145ec88e3eac225c61957d3769e805c44e5460c154cb5ea3259ce91c19e3078fdcbe7e61aad090940c46aa62d0da4cbc285acb6db93557e5fc87549aa4558814251ac248af78f1fb2b246e11651a9251ce9bfdc98133ab40a6e3b6059ff9c9c7b31ff36ecd96de0a2cc1359c121e8001e581cf81f5c3061fefebd050f586f59a0405c611702748fb467329a460a85a4171bea0b11907e652cf46c8facd95d6e8df2d53db71ae2db6d4e1af3b3abdc1ae4af6b8e1ac6b7cb9c34e6b34bb99946091fd04f1047ba5ef51f457959a0f3d9554e8de4af7b8e1ae2dbdddc34e4b3abdc1ae557d75c35c6b7dbdc69c8efeb9273046971ce4d99b80496061433539d5c10a9ecf6206ac61276436496e5ec2162b6e5ec40d4ac25ec43cc0ccb0dbb1771332e65271d88e09646110afa9db7459d6cbf81c85773603753aed8426d50c8aaccbebbb145bed0dbfa69f54163f652827e93886042f0d10b53e3275b6e6e5b6d4be8a9541860f7e10c42ece52ee2503d067234a13868c591b9a4f8f0b34f33d1ae67c9b3a0af9f0e004b57b02a3817754ed2de9f96f1e779c14eaf8fe9800a85bdc1473b1bc9844681763be878fe95884a97d48bd82b4203c3ae103973ae82ba2655ed42b1371497c29eabcdd7f0bb5ee3b29e1b68195e56600e405093d10e8f7e07b99337c2860a124e47219bfd233fc5e514c68b0c70f73dc92ae26f3f91c1e76849c4ea42004071a17b21809e3f9e63e3e0e995d66d3949b6fdc960899b719de195cad83fbf29884024d8e069786728aa8a43909eb9b2ddedc67858111ae4efbaa7695a8042506af8bf927ee69a94b70b2548f3795adfb7ab0dce8aec4954425e5f01d9b2bae3a45dad24e39ea568cb6cd68ad09456049577fdf3c21dea07d9ecfa7a3e99012fd14d40d306051572b613f83d1f1d673a5403bb16396adb4b5380eff0f77cfc24d7b83dd6d8061f3d4696562f5545cd32270303c9a7f7236b4c44aedc1ed42ff1e10bd00116577f9f3cbc2ca549d81ad38708642f33a9069509a7cfe56abbc52c47d4889269803dd88068dfef32a543bd23b60f5b173d52d39acc0f1f05d4f0e28c69ca151d8e132aa551bad004bacf4607222aa0fc1458df9d7f088aa5656dea0a5512a32433a48526b747db39ae12f586415af5cb4c48c8ff145ca0beb7a7e2d07d6842dfe41bd7e86b7599a555000f8c058199ce04b0e2c02a1d1773b4f6532c5ac7685123d85d57a8cb844d8013c8ec2bd9b428641123083340c53d536b6c809054089811eca3d62e32a3cff86144eb173f00b8883f18daf29a1b5c8355fc27120e1a79366586c6936da15bde1a2cf4ff30f9e7323154a89c445b8335f1e6c5d46002b879b4c2a6674ab947cd19611467593cec71ad815721fe1d58c3ac3e033d4adb17ee9895641afbbbbe7b4aa10e81f923811023ddeb861620438547cc5da80cdfc83e7c562df0b41459539f3ab015b537ff03c53d595a815dab722e8f59ec2d18228f53e72bb99c7e39106c162bf102c171450751149695c94be85074dc3be0279010a6c7db2f078f67a17d01ffdc5f8e163b6d208140804edfb523e14830a1cc773d8edc2fc7fb67a999d1d20bbc4ae6de69a67b373dd5127f39da3aba76613690f67dc38be090fd058b802f4b98968418e8dd8e8c7b36b0f0dba794d8a67f8fa245a17d03abee539994549aa24d92716bcb107e6214b9b5360955dffe72d40afe0f84c9dedb4bcf158dbaeca2895e2f7f166a252c2e215b1e02ad3cf11cc03c7ce343ac854fe0f61811105b43a71e470fa53fc3c6edd7e1ef20d148c90df9fa69d4512026887c9fc8cce5a3bdcaad8c3d93944b5dd9c44e0dfd4ec928447d4b900ed20803cc219d3279d8028d9933fa7d23a6dd8dcfe30143aef5326e19e649fc9688fcf67426ca11599d280bcc51e8d9f13c1dc37a3b43553f43f15bc3485b608e660a3eed32b217e5d19a69493d129230d94d78b62407e698999d08b4181e156f7d5c551ac998cd5097ddbe1f3ee8f3189e84e1babc0158f386f7751b49d60765fd22927c7c57b81f2f7548648c73638acb9ca989cc5d09ade195067357ba873f1252f3e142b214dcf86476de6062887e27135711e6f3c75142439d9dd79c539902e21ebde85d56b5aace2eed534283debbffdb7983a8ceb313f2c6830434f8944c04b75c9663fb86126bdd62466f685a534872cc2a15dccf3a5952f6b95b687cbc1ef80a373b9d81445305c58ccc9ad8cac378411a04e92bdcb94ca19509150a2da33721507cb0df95212707de55c7b4369d0179666e6759382c349843564a2ccccde904d9ac66a11fac1fa0393711e548d14a1ba27fad8b0098ae02eef0aa7eb4969aeb93901f1c70722cffd97fc5b424e638af52f6919e11a5e469275a08c0554148cd32260f921ac58236db74f533226e92477f2d7a3c7d4346b93452122d70721484223fbe40245d3f39c02ab42512dc400fa9f37375f0cdc397825228da004e8edde7b28fe0a6af4e2b93500127c7ebcd661892ba945f214ef2258efda8a1836a242cf731318b67b0e218619f508d0cedfc993a402214723839b647d6c6b0583562d8a13bb77d25d64a37e33839d0c5ffe240f405c734a2800e1ae526b853d7ec9163f0ce88e52ad55c99e1484609f89a8eb164c220120c6bc90a3447dd0972a7ecf373b051eee291e7e4a86e1f29c8dda3df05747ebaf4aa491c967dbc57e45d3a566d3026bd202a602eba8c65a9c72af4f23b5271193a0a46ae6b53721d30e65dde09974e8ec565da08edd5470d268883707493220fc57da90c5038437d35f65db849f627568e27671220bed011146f3d044fd1619ad8c0d00977f4a45b3930794f4e0587b510f896a9ac96d67fab7d650dea804a0d2e077de0ad1c4b87fbe08794e7b4650be0d4eb5478c9a90b5b78b6cc1bf9736472c8215bfc7b338e77687e0d7f743200243198e69e4015fe18759a8d3146d93b10ff6766412b47c5048e6a790ce258bfd026988028ce0ed4be209c3350c95f59e2502615a99986b16ffe0b61d5ff0a49580eb9f7ce55b01cb8712ef3d6337c388dd2c85caf40288fd616fab6365dc8ce6678c91e2a35163dba8dcc428869083bcbef98356658af50138b3546887b478ef05ac097f95560588ed7306180b12e9e6528c2b31c540fce7070c741a06b3121b2fdfacaf0e992419b991ae81d6faf018f2a5864a12f8d6f77ba72e04a6f0870a88a764f1d22ac244a6093fd64214c0ca7e1524a75f4d3a25cd3aa56c5de0f89669584039a21b9e8131df476204e3f842fb4b3c130e10d30e317c34d3da5fc6283c8e48098330024212d7e75212f39f622773173b2b4c605fa4d399d6fdadf124e714272eadb2511dd275cc34db4f8cc849269d7e03966b7c89bbfe8d88ebc79a647c753619f3bbc24c84a2bb1518d2b72057035ccc66f4952bf69294c345e92dc7324bc3efc7b2e5ad313ebc5997513aadeb4e473eddda433bb0c49e655a9dea84b0f13e7cbfa5cd8beda62df87399a8a39b87c4b32509e09a80dfeda29812aa147d2310778779af81bb94b82992edf45af6dbc6554d3553d9cc3393e12d0d564762d739e13bb8a683e7021cc41fb6f1b3367bad083a2e9c1ed4ceaebbbc34098bb2e8248519753a444ed3c2fd5962943cc52986718514c3fc883c63b82671f1cede8d141ab50fa6625591de294a46be8381a472311f251d67045018bda6f68b6966fbd3f396c42bbf9e11151aa45544cf0310ef2005696d0fdf196136a0dd2251baf64b02db2ff599bad4cd7c44b1d9740ade898dd6ca32b794ad669d6340335137f12a38c0e2dba3387e0280a8457e5c51b95375c467deaa07e84c4d1aa52c499324db4bd63fd80e64ce6e64c548428fc5ab4b38318c586cf9900f651751caa0aa2ed17cbf624e3519143102150d895fe44ba5e91350bf8f28de580d7f698a2e19a5ae182eac614669ffbb194ab30cae568b35045d097a1008fbb59a87843635e7daaf6219ebd54fd53a8c2c4e14159faffd9f3477a966085ca4ac8317aea0ec62aa0620758dcf6b601449c0a189ce626342a0b9520705dfcd8c7bf62f3048f895d65dba41befe4dc12e5e86ce810fa38aaeaf48f5307f2155d202ac3cfe82162b73a5e9032816613fc1d1ad70bfa8cbe542d9460a98cb66b3d43d2163409f5f6754ef33715c4b8237258036ffa6d6de39cdc36950905d3b20c7f531c37351360c53bc20fc632afec7f9088cbccc4ba51db00167e02eaafd0a52d86339177db9451622543c5daf9d698a056684da92b14abe5df44368d02a57802973f9e4d92294283c74f03c0f9559e2a5af28571167ebcfe1565210131a0946e029e5f32adcd854d0a97f5d1674b5b5ce6c2ceb00c33b132edcc6ef509b6a8da134123883fea84806a688d8b3cd0397dea32cf5435ae8f800a3885a810fe24724f46475cee233203971481587e36f552ed60141303ff3aa1932880d4d161a54f784fcce13d9cf3fa83e64613ff3ce0a11a9e070a663152c3508e1240b58b01be686f29fd4312e111af1d7431f3a4d482623c4501274aede06e82a0cc1a342820fb89b4abe6971ec3a43cae8df00a3a13a49961618c96d271100d221348bf5b5592ab74c5191559b83db97464ac0b25fdf18d2b8774989bb11bf4fb49d6606e5b91f7a2a511ae7f86f574809ca66a18f9a88d83e62ba06ee1da98c7103e12dbc44141d52ecdb01350dcc018bf5d06d537760e44f78bfb633f0553cd54755b0348c69a749f21c586eaa1981132f34c01a6179c5cc13d2fb3bbce78f8584de7e17f5fe8b64074122407ae91dd5505784379053d0d4add2243cc4b4819dcaa9a21de54a16e95b3506c18b7920f06e3ccea29b503dcf9c786e7bab3e4dce53f409e2d28fc99176c6ce106909c65ca0accfeb1e6094758656fa2d278afc2382fccdca123633c95dd52e00f11226642a87dfbf79204d2e5e6391f842acc3317bcb5cc22a494b7932d35e05c5cf9053ff3eb1c1842e3e7e729921dc93d9489085d28ca884957eb094a121441895e9480529eae9af29d2797785a9a3b94744335ea9a81b5f1b9c52eb01172cbcc0aec077a18544962d86bf1e08071acfc45b37ff5c44e278c5ccae16e310a829e2107e64b44c807f680aeee29fe0e954ced498e3349b1b3c9ebd12a372d6df0d4f797c849d819c899d7b2161e3ba0fc2d704c3a30ef9e39a931cbfd1efa01c3481fe4dc133decf54c07ee805b1d3cef7ea7853e029a97348f4eba2e501516a581d60b03e2ed24c4c6aa4a6642566b65dab43a88d2db89ebae0322da1acc7d4d6f868c3f72154ca7ca3818c18639007a125dc2b480f244e3d95c3a0b66dded3aa160261ba128d112ed30db63d8b0a1567623ff7ae4481eb98947fe62c1a06d38a3c9158581edd710ada087cf046b8fb6e3a3813e5aeb6f421fa26e21274a4905ca8ffff418c9305136a3c76882c0e3c6982ba9c3f89e0dd12c42b810cdf179238f7e493974dba71786b2ec0614ce7a7f683e4d9a09e2ce346a3fd65932755beff308c6946b68f127b8ee491ee85453ab0e26e093c88caf6956f372ff8c029bd41641e786e1caf836b2886fa10a93fe5119998a235e29278ed5fac20d2243c68173c8288da012abd29f59c7d32d341f9352ec58e6a4d1e40847e80f2c7b50406200e36ffed8ac8c50fa8e99dfc70ab3db6743c0b6e1a88d556d555fbf4373e28a62236d13cff6d049adc3e5fd943417bb9eef5258d330a291c033a9ddf7172a8e5831fe3579ecc9a1a66ef26ba1f14c97a8caa3132ab93e1b60c9674c9cb9e96c17db69d88a6f930f60fd72c8f1b6e3b507a20172c6d4c26063682b21d8771a9b07a00cd206a1d06f6e4eacbce8940d189820d3eeeebdfac86ecbcd5497f17f4f0067cc59a085e8639f1e23f52e742c139cb81cea6eab3ddbc02a7ed5a43a86eef6252f5f503e5c294aa71842e25af21503d96c0e872b1c9268f71e80e13cf5c910d872d668113f8df1c68e53adabf1d00bb4ead22869d8014185b45e991d318702d082937d02730414c9c53f846c51590701cf965d60cd53209ba3eea8df203bfb5c3f3efdfa3040c31053dffa179b13d63556b65048a30389cce4e8fd58a79089e710b00b9317905a6e04446f9937678cd49a4d8dc80adc52441cc9d03c878aa03f126a0a54600e5b13000087e3d2a641caf12cc940bbd351850ba970c533f047889301a01fc925be32876779b77e0409452519eaff80bfe3f7a45bd091bf328f736c32b678695f824bc20c139d8182adb1cf39182a6e2ee58b091ab74229201f43274a2b1db03009f17505ddcc53136d9c22539157a6a43b5b852a1e8fb2750bbf5fd36e5ac8a420d021eed650a82a70e36cb57dd3c6b36c23b985876a1bb37a4eea16f499f38bedb59eba240bcc36ca14035a792ca73417ca08dce0d5749e22b02590b923980cc80d3f8c164df8a74be5b0c8829b402b5dc673687da82726e93ecf68530e19951d723aa09de68e754c839ffc945bf36878141c42c620d36229b1222dd764d58163caa0833c90ddf6fa778a5f6b75da63a8b3c9a01c5f22bc86e280c3bc3d515ec285265f05a3840a02f0ea7c04976d8cebb242a05f1e4ad41cbf5b210cc8453b34e7ec0e0a6b43e704fa22045ec7dd1264eb7fe26db5c72e6d9b187a951475f77a2bc7650262d395bcc2f8b256fd6d6cf19255650e632f0f35546a8bf24afbdecb859198bfec414f3559dee0092e8cf7b8205206958eb312a20a267d83ec088b60794d20b9957aeca89b6a60d75093011d132174b967aa4e964beb2864341056540f2344e5cdcd0dae3464b89948ef1fee81eceaf925e2f407c79d52fb968eb603a05d88396910b9fff4d696fec077373df4a179293b57341e29c09a146fe1af6cf7f76b703b84db8b2ddcdc2a12ffb26e32ae5cf3aa8b1958a36881fbede75b67b6aaf496bda0029a590fece289dcb0158ca33810bfe0be5c193c895a922b6c23c8cace3f9ca48bfb426e3542415ef34dc413a548899341a72b5e369222703230f6f29e85bebdc1954829f08c8e79ced9fa79ace3460c6990690ee42fa3a2bd0be2f5788febfae0d1ec98dfb08620da6b9cd4d8f4d7cbf24ac4d51504ac432aebb250f097908c56523b00414f16dd02fe866f23db0d122c22466addbc6e6f7f4df80a247af5866c403f1a2244e43c02f24576649930fd236fe88014326923ee13505c26e235c5a13858523b7e0ab2429012871fcd0d2497ddd185c698699c079f2494699591c94546de177871a1113de5acb7acf1820f2b1405c55222519b9bf8895ee115d7987cbc5a3575549e60c895df29c9e47d65f45fa28c488eddd548fc70aa71019049c2143b8e1d94c5f6144f8d25f20e273ba65aee96dfe22c0f48c520aa0de4752a59512aff40d10aed2f67a9e394ec5cbed50ba7afeefb04a309929b20be5bf6243d7106e1056708df27334d3908318cd2fc78ab13d1b81c7e146e270d3ea81dd070b8aa43dc4e3646a09652e2c7a6efe0f33e5d007270f48d989f71a9d8b6c9395c32726b61656a5fcfc45cc09b2dcd0a09fbf270db9d8d75a0a2e83267667aaf1abaeea83f87a0de3a9ffde235be8e386c22eac5ef828cefa0e35163af5e425d2acc3b37b1d191a7d51ebb25c5ac0f06eb45cec4d7375b635c0fcb45c041233cae4442010b85364a10e1afbd474425088b0053f1f6c41674141dad9b32b77c2b8450f818142a6b2dd05b5f4d4884dacb6212c2de53f0d17b0585eafb3432ce130e63d2f9ccc7d1bb7a55681f88fea3cdec4037e475bab0ddccc33d9da2c69dd90c5d111103a243f127121b1d30f5fbd61ecb145e045361dd0846b36537cb7358924b8219fae86c8290fc75fe5e294963c20f2530d7dacaf76636897117ea513ad657a105b09ed885a0c4b6c548fb4095705f2448c45809f3fd2120111913648930134d690bf81cf725d25fc4581aa4519ab9f2db89bd07bfc39e951fab8f7a520fb34c458bca54560013979aff1e1fdc6bccc5bc2fbd3024e55e96707ff38b20e1d671c88bcfcd344a3428edfc51024253da27aa3749045158d205e71eccc5a43a415dafde9f0c54eede6a7730836dbac1a30d199aebb4638d5faa6bece9a53d17320b175d39128b970da288b06f4a9b1d1ac3af1208cd2d33a07bd8f4130da94a56e737809194548c7c2f73e6053f3acf13adfaf90dd779c3002d1950dc33018181f1dc55f28a70d4b986f50b660764663e5370354ef68108e89afb45b51eaf8a3c914f9af614361cea625e7c87d90b8bf823b697488b2efca8cfcc719f08174826af5ca2b1f0d07aaa9ac1db1e6b0109d3751e379543197d4e0e71795a988b90817db33df11f24bb8392d4a69ea09cf9028921b027e8e905ba595d585bce5df961a4584f80e123e68f39c53200bacaa1f6cc0d5e426e4f0384abee57efa4acb29ec71bc8eabd18c472e96d13e4d81fbd87cd30403bb58306e1055441deac99a941291dea037641dc1352cfa642d6890b9dd4fc5b2be7ffd23040485c87bc8fad6ab9a8d7cab04e3d5d4873b1c3193186eed6a872a09f620f6a3d1cfe1a036eb8b657b56fd45908334223246d8ab7ca62bb93a1db176582c3681ce7a7c5ff2d9beaee45426dd8232f3a41aaacc0f0a247fee63a4af280490d69aee5ce326d7c99deea6ef37631d63011755c00fdac3fd7227f7f49ac6f3431acc436e88a168423258d7eed8c4b6756ecd14594d36ce2a4448228df0acf24d39ccc85916f495578f51fea44e047e766bce0e03a8ff29ceea2360c5becc7bafce75775860137bcd321610c6ec208fa6b17f7b157c0c7df72c4692ebb12c571bb005fddb72bf9102aa0508dc137dbaa8c3cb15bebdc2eb13c4dc92e46e115593365842c7cbbaf9145418aa225d7c21dd7215eea813c488393d35ae7a09a9be281e2a3c48f059cd2708e8916f4f5345c9a859420a531c82b464d0aa384a291a379b7297fd29b5339da2cf86bae4c00ac634dc128de9c798a7846deb42b5e777fe9586b4a94aae792873c934dedf3a037a84de164e762a6dc54dc389502afea7448a75278ff972bdfe541577d23868ed75a57212849d037823521bd6d0b27995a048385ee343d6ba1b35cfc21cda83eec793612004d3e14723bafe5c142a410ed84ced8424fe8cef44a858884024ff2b48f486cf4be862dc8c5fd1511ca0d932543797bbf828dfd1d663d14fbaded79a31385a78c8072b95b018ac6ac0911962a1c8a528ff6ee8d958ef08efb3cf12ee1e258705e4a96c89ba8114d543c0c6be50126eaebc6d8623953c21c3b45e94d265397e6b71503fe25710ce6f970814c181d16e63ff8d9f56546af78e70bcebfd3e0db1017e2b1b6e8de06c7b9a86845d0d220c7b50ca75d4ce913d12d5a7178b6957d0bea3852dc887e93f622cc079689d46a48fe749d86f05f0667e84356c748f6380b88e660896607167cc7997ccac8df5a01f4ba1a0ca7a237a3222687c2da36dc1a6eab6141c5ad05665f56a438826ce10e4965eb0417867833e8591bd87e02dc5b6c655deb327c378a3720c2db12a38fa0027e772648a3d45b72e4e989cf02d881b9d20f0a6d49c18c4c2a49634991f4cc7911fc659f62e96fc735d8a40e528bd0332ce2e80267baa995903cb5159f81f4ba19a834d945651273102b8505485258bec1033d74e103546ac604b49215aa968a6e2d036f0e24236d70daec99aae68254d679e02fe6987ea56b8853ca84d2fdd3168de7dc578e1ae09ea6b77803354e2b2bdc663eb7841c9315936e7e1e53eb75911fd1d2450c5f1e82cda85d8adc08e7c4a2fa305ee825d8bdea16eba0fb29c09b8d15550633c4c9e96f29937b8751c250fab94b8a0bcace814b6f4a1d7c65302ce458ade6beee837ceafaf102e50140d6c3b45b7c533453c3a67e443ab019b5fda71a0273f53110f3b73761dd6531d1167b6c1d920691f55969065f60533117bd6db78805d63eb1a3bd4940844a82d999c39e572012dd35f8be246c665c79cfa0828ad97ccd1ce17f995976b7316d3dae4025661347938eb32996dd89b16c61225281caaf34dcc4dff4c82b06560ab631b0b6d5143e88cd4e4a1116fb882de784c8e5e2a077617904b28cdfc848fdd1e244e805759b42137ba487928c1ca5e230285a76e355320b24d4c49293685365a29ab7ab08199d72e7b86432f36a4d93259c988037b629ea0c794608e69d6e3c53aaec713e473d9fda820aac6ec058a3a3d3cd05211ba530becb7dd8d1aea29bc1b9bd2282b34dce80ae873efd7806326393c71f593d112da19a0a41dbef7c352c81d366dabf5e5da4f79ab937ba7cbeec20f159144430b3d584e713abeb6be1cc9c507a37c9a2ddbb87f58efcf253d971d95570c525b3ad31d063fffbe91d6bb8a9036c42cba73bf5bc1e78faf113d598eb4fa6670d9ff5847fd0123e19dfdf3797b679d49e8ba0e9624e1970ca53d0e9c5aba46a163bbdde38e9d19798c991c32f7ba2bf6ac65f239a5af56716d6244f67775075f560be880c242579396dc818ba49ecc5be74511e509363ea060fa0d6ecad959ff982534250965a5beec0d57c06de4209019d08c19b609bf399665298779b9f91cd5f2452a6d928e28fdf2708202615392b03371674a6cb3fc854209362027e94d4a56d7035c0d735d9f2d781b7a13ff0871c55e8ded8c81eced5282755b2abbca85ab591cd117a5df813d3599d7ab3074c9d99576d2f696a1582ffc2633262afe7535741811a02ed205165922a2e24504196ab26b1d9af8ec0d542eb3dde9075bd90c54f230e887da690b3c053ad14cf0bcff6b3d3805d2cab4aed005670dd1aaa6e82a411144ba22683b8b6b65db8191366ff5139ec6238285a13f1309172783a7c88e1d2a28057b1506916e20005cb910b376238a801dd1d7f1e32714276fa1ea8e8b2f1a95172a38aa846d86c854524c543168e550711ea7b747be71af27c093d8c707c806192851c84bed5a9aea7bea332b0e888d88b60b6b1e639a9c5875880084b57352cfbc4df2fe69e24d92de3465f89e9e9c93102e798e56de7340fb171fa117d68d3db612d8c9a8885ccf31d6c08d242a7bb58bf1edd56593907b51e912431614ad1c9edb3f7e82a3ebc8e7b779010b1f2a31609f136dffd41e17afffc45c58e8bf480bea44e77fe6a5626e007670f2924bd9e382b24ee8ac5e828dd900d1f79436839817450703de5b2270e82a4813162d44e9cdc04c9b932e312b55c2ebac689dd72ea2d942f0a801adf294e019601e03a4fa40c20e061165309d8dda220b6b70759ab3301e5c615d40279809d22bd60c967aea8304e37884a9d4ae77d01698181ed5028f1935dcbe6e155db1d63f0964cf46d4a601f2d01a42224d1e1713548ba97a471152b30c860ed88eb1ce45e21a13cbba9e808d07b6ac344fed79a264b6cb7ab244a8fcc34530b41dfe5f7df6558a2187ce0b77de78b8b380e7ef9f921aca6aadff8065ecf597ef77f8b445da9fcf1f75d8193770fc68475d540b0dea20023096c0f74cf7abc4216521afb172060d28942f14318cc7e57e1512b1845063023e33b4be1329b327c5835226c262b181af05057006d2b74f7f830f82e8882f5e2102d1b0cd92bee9d7077c37cdf8058e4872d2845f3d7acebf99341c38b2405081ab29e816f5f8dca8bb913d7302cbbfe041395f656c67f8fca8984435f7e0166eb86c93d57fb4329473db451c34f34ec99ccdf11f9c74313daf68fa36b7b7803a26b1e67bc8875e2ccf4da565141639f3b793078fa7fca239ab6d7ec8dea7e2bcf53eaeb3cc8f4c5c159c93ad040a3b527f245cae3306691e37d9e89f223cd22aa53723991cb6810df8de1605209c21af0a868c1d3e05a44d44a71a124a2372c8ab5c0e3c32947de78e85ea8835ffbb30ac21ab3a14db32a7d42319df9466f188ef228e468b1ee9a0c5e4b0df596bdd85d6a8c8b0e3cf5dc130bada52c94e9337518e7eb4b28456c3314c5e541d1f286e33d4be11d63d602fa28b05a64fb04b3992041337fbf05c78944e8ec87b67ef7418e44d74285ed386a6db50d288a8423fe7176f07268fa39f58669ecbccd3c4c47a2c52a9d14aa04a006108a51030b013ef43b6e22cef6d1169c1febb81c5c4dc50d0a6e9fa641d0cdae42a882cbab02230d989357f1647d67ff82b9adab220abd0f0c5b262902a32e96b3ee77ccdc8c25df16000deb0b428562a29bd9d6c4db1216ce1bf390b802dc8ccba369b8a3856820fcaf8e9d415536f3f6f72d4e828da44cd34f50cd70cb3cc359f5074dda5ef19b46351f4a58916c9401ede166a3175a69adc79fe21d5087cb7e77b7b1e70afff06b457d1bffcda740f5ad97dbe681397c0b2c317363198f035246c6586e9569db11f01d9e073eb7c71595e0b9d6c53ee77d65b06118be341703fd594165f7e3abd0f2547929c8549ead535ef23fa3ff1724c7a99550c5c8ae262ad35bf4c02a57032cdc55311e6df911d72062e22de15dddce09e3f1ec47b0132e0ffc1b86943e95d662425148210d022f64df5439f784bb2e11559b6afc9e387d9e90d2442298d048b8c1e78dd1380f2d80888d53fe882c8815b4c2d81d6c7f9ddc621d9843927797fe888708dec9a760298b8e4ec23d0ea698a74e0c0e753d348acc70f1770ac75ad4a701876ee1b8012175160069fb27c571aad3e7477f30ee70e487c1e2501bbd2cd013feff479b10d0061721c965a558c88466118ef6f6c9b670d0dbff1be653a372f1d6e10bf37a1764b898734434e83e44f207d36985dffc46e52420ff1e941d306755d40eb8edde923de7aadd51a220d1184e4c06d52360495677179ca99cf2b95ae77e59a2e5edaba27833ba9b59564f34ac80346fd7493ddfb1add016d62f7983cb5fff30cfe6d121ddad56b6b058bb8e2c6989c3d92b98af2c490bbfd53e06bb9aa5c60384545cd68b7a81e2a1d15a3729628caa46bc8469c43e72081c5948d88696d1352ff83f4239d9901a7c8df14bfcdac80280466b98a09498355cc9c19e35481f8332f5dc4c32e6a0826b41e585e86f0bef38f1de36b35187fec9ef451f7e2567f807197d4c2e4d28637f27a2a782af1ca50ca28d3855c9d3812b5e87de1b7d6d4e4344daea1017b7700d215cdb53766b50da573cc9e70c1bdcddffe6da376179e4bbd3c5622d0fb8791c71ec879d6f11d36b5a4c7e8ad0af6f5c8c82130e4797e87606be5a9d92b3d9a0a802b56cd2ec2a6c6cbacd1623a37c920b3734335d530bb51354243dbd1de42444d255793080c6be0baae34b16b4ce72e13b378e5128906c939ff8d020a7a16b6b75461da8d79efc462dbc4af9c3627ff4ae7e13ee4e73d41a96e48bcab208d6fc9f93a8d458861bbfa6fef9950b1180aea2c17be88e2459804957cfa6caacbfc0cb159f408de5b1a4cd736010abd4a21e110cc72463a5ec5c72e464bb825076456b15bc1dff7c0dc5a36a8daf5a99743bbc04c0ddbbe874e702f5f54af90df91d19b0523e5bfda14eca3aa2c20d1c1d0151c0724c0ac34aea4383ef51fad908f3d83255c8c56961c9351517b89fe4cc44348db0f205f319940b77191734aa338be6a2d5cf91815234868b4e538c2ee77d5ba75c926c2e066a1f2475a6004c5edae57d63874c7323dd8caa21fa854cdbc830f8b4c6d891ad317300c3b7749cf83c94063700c471af758267eef6b89fdeb7ca108c150d1a5b78d1db743636f92bc85885e0bc0a5bee349ef6881af4fc4a9528dcef9a4e30c486210c3bc5c499449ab0ce2b76ff60288d364dfe03a7280dd117bb943fdf30330a9075961b6dad92236f0cf53f9d1ca9e094cec55c16c7d80e1a3e00614b590344d43cc44135fe677f7719c98d19527faf12db512012ddb28669888f9001091124227c38d9b1f54fccd8000f878127860ac63aa81274449cb71c64df4dff5ae1e26f039fd6a173cb7abc55cc02f6a44845a634cd5bfdc0b0a21434444dd2e84629d47272d75693e858d4537331646167360071a9d4a320fcbd61c519cb957e87eef37753c63e47e14100547b5f0a7aed5946af1f15004962ad4c4d83cc230903003caf18fd534299f11534d008e5a342c7b69c2a86efe22b4d667fb74146c4ffb711835f423b301995827ed84473198dce5450d4657ee018fd80fc9f798e084e92b6b65bc863f0f05563f4de1ee5bea5ba1304007b14198e181735497cc0cef790b836a881222c016686429d15588e3542293eb2ffdb7be30b9fa8e818cba14afa35bfb67f91735b4287caa73b12b2c84ed76b7590f37c282d086c0d0aa8b7e6e17624e280626adc35971817909e76c69880afc10f861430e5303ed1f2c50f5acacced1337fd118c2094fb653743a29d4da4f68e96fe71f98f54bbcb82021f03e5963a755eaba4eef8e389ead75795955b92502cbb5b0bf77ea6f3adcdb3e9f2e37867604c4a773aa0f1b07f66ca0b105f78804fd6046be00b5d95f780cf43dad834207f262c0a40d97a43b6d8593b9bad84be378722e8892fbf1c8e24be28377ff8546809249d843c66621d2910f3c5363177a7dee3b906943abf86c6163fe666d7ce5e83cd991b9ccd96e8dd8ed5e6168c882d80bf45482976df39d3a07e040d926d22435420a66c4e1a1f06125210e520f13102c36a599a1e210765487ab83adbef17cdccd2799c1c1784e1973f4b85a62a1d944c5cc0f81b8323b2c67a5ebc67be4a2a7bbd177385b0093e4fbc4f13e0c4a6fabb30cc1c94bc15a6d327dc79bbc8cc26a2c175f099d0e653e7806923acb71c26f004b3a839eea84a896ceef8e4f0737d1190ace3864ede28a201cd9c1523501ec28e9eb2badecf41a0541deccc8510ab4d5b0ec86426ab0c2f2868ecf5d797dbed60e472d6bf5163cde6d10fa043b78d65eabc87a38c4d73a9c86d801ab4428fcded40b75438a4411508e3e8b5a09dbf69b54a62447e26056ab9a92831ead73b01a8135193ebfe51ea20f30e2cf616c899a2a282e75fd45c781f448700f3d9020acf4e57b10595f0195bcce24cb9ccefb22b1dd4733f68dd384d603a2008f587ece0fd0e74f24f344bac8f5b08fcdf3d0332496011caa782bdc4454cc111a62552a1b93e846dc6f127927a1623eb38ad6b7430bd2600b79ca19a2818b1cd68ec7522b884cb04df3919a842cdd8ce1d00a7eafe4aab659563902b585338d8947b90820ef89d80ee603e44cc3d3eff9d8a8c5d730e462018cc058180905b7777caa876d0d3fae93f075041a443793517f85e07c9ccacae056d71e6b605a9ae772eb2ff3321201ff6e116fcd748360f4608c2d6f97a7c673e411178b37f34a0348c260277b79e1ca6eadf1a5e38ae4a1552c1d1e74363f8b2c262d0dbeb7bc7b6ddc550d9bd851a4f38e806eb963385ca22dd75c2f3439bdb689504c532eeb28d51de02a583066e31ce9c0f8a2f74ee52321b227c8c1bbb992bbd59cc7cb83f36124489e449042628d254fe68ae337e9aa3a3058085b6a141295f429606a170bf94acc6b8912ae1d1ed2255f73d8dd5882b6a0a751bc39f5192d9f9426f38ee47790cde67d6020da2f91b5224238068b2eee0f8187f248195916484c942285290a39957b046d651e1043a15a5952e39b913e6145512d3f2ddf27dc7603f52cac058d61924402f70558296f7b3ae2f942814cc3143f7b2626bfdc298f6cb81d1a5f29d20f0751a7660650142d9e563ff079798a8a9aaec23e7797ed96f68d0d0ab3c62c42679e31dd7e0830d3ca059551cfa0d698650b53bb19bde8b8668f37807366b519d7322b187834f8a98febc766e63d092306b9427b056307aecd4d19673fd7204b5a6e7f217b06d59aefd88e4014446615688376b0df2f51f224d4ca54a887acd443cfac61d884a0ea0b94790ebc2d41218dbb2d3ad4e0ba6fa4aa1fc00aaff3b98f59296b00ce795496f096ee3a8a170d1ecd2a6b5a093c8744d3f9580f649766fd8cb512f6f7713f5374c1326d471f633ce2d802fdeab031b076c372eb97a7243f8a528d1f3824eb0fdc57862fb748625296c5de2d9e2da355d75c97fb169329f3ee6f6e376bd7b8c5fc186e47d3642ff366450009a0746ce200349273d00a11c6ea559d9f4ee22f69b91573c9bf362f5c326e26346ce270960f4588e42daad4657c8133c28cae06c45c8f7e894bc096874dfe251b689c7f57bf0138be15f711bebd775d147b3a401271dc8ebd00b831a32438e3d1ddf65bfdc0d4f8fd0bd051389bc4cf8c5d17014493515c1a56d3415ee8c0c1e27a74fa3010fda0ee62851427239c750cc504cb8699ca7291076181554ccd0c2f2a4554f2e83c38ff9311234a99940621090a94e6066e840b0864c54320c90042201a4b8079aa84f07e42c7dc6800bec81297460486b1f09a73e803b907b38c4c44ba98f67fa66920224560bfe03ed4894afa3b629af7aee46d616148fe2e3c49ff86438d5e112d2bac1fcd0756f1f15bbf9f31e031028990eb74ccf6b7686864813aeec33b13e8661009b9daed3e5aec4847c164434a4d91e703a7b58ab432fec813a6bdc70df4466316d972434133d04de3751ed04b954e52b96bea3f945701152c5abfd9f1136c79a6fb72ff5859162348a149d488d165be9832fe5653887514195b5b9401199cf59d8fa7c506238de55e4000973e423562088aace60acb2e531dbc490529a3231c27b3e52c0038156402e75d9de9cd24e0b2e8ac09c9cd1e7f7aae88ac0c1ea74903c5594c89464bfef31a6cf98ca85c44b4bad0561629725f421ca84934a38fb98cb58c660d849bf2ca81cbca510aec5f8d29697ba7fa6f7c6a5327d81a93bfbca38226f84dfb8cff36c92b3d4fb58674057ff6532fdbe473ea9a85c1e7cfdf4187f241820308b74a9e564532f23aa48c214c451d86f3a8024666e1ed21949f391b6ed161cbe0d9b2662fbdaa3bea6e286435313368f0a809ebdd7f0f1cb917499fa4e0eb27b21e74ea800d5ddc0aa3ef6dbc7f95f48890d07bbbea2b04d63877a9f32ceb987706b3939c7a4f9e72ef7f3517af26fb2634f1da2e4a1987f4b58b8550fba11093fc51a80e89980cca48a81a04b07fd7c0adae66fe5cd9be644d2f478fedcdd1bdd87aab5e80e526fb14cf89bf8dbb3482bbea3aca99fa96bd432e1aec808a690afb27520b99fe564f40bb4c16cf4c4db927efd861db09df4cc818ef0980e63f95b3deceff8dc6e1c5bba8dbdc9e832e1b4c3f958103a6b0fe06430360fbd0d1306bc89cdcc73a244f99d327fcdf9b26115b9524e8073b3ad9fef26da177c47d5a26935631024b62013aafc2753d0a80cc8040be4b22dccb82421696925515039ffc6ffc60453a24b6f9502b1d5842f06d830e63e1ea4a382c1003bf84f6192b69864dbea1776b28a817f5a8d79e9fa6a90a794d70073a368e249808d8c7e2ce999699c23be696ded91b0486c22cdabd1880912a24b18f9e04490833535eb3d557795c75e5c59c0584d79eb518cbd5154b1d600b7a187ccc8a30b8b20a808d48124b8296666821a9e32f2a93fc89f154b86446bf6e344b89fcfda98240c106580a61f78df3251cc633d8b186d37f83b22beba5630dae3a478a7fdfe7deefc5b2ad03ab793b4753a473380b5ce122560d7ef417fa6bed4f378b8cc952f94ea62743288f685026daf2e97fdf9855694170d8d863477f286fb73dda67c4d557c8a58c7ed312fff5c4747164319b47ece0950a24ee6a5b97b09a7f6ab8238d3a0174a9c7f9bc5b7cafcb3919c7d52e1613a353e492a8daba505cacdb4b8efc30aa5ea7cefd0eadcf3b50f6b022186be54e5737cf67110e2744a0ff6f3a5a22c7ab0c1fc7ffe7c2af8b324e83f7fd44d2afbd61a4f007dfa01ae7a83105e90ce909f1f1848eb015632e81e6edc14d21c118328179adee0d0214c586966fdf86cc1495de63e3301fcb11fa7cafd7efd65deed9766edd90720dd1e1c75110492c2f1ac86fc3080e94679cf81993f672cad5e662c6f177e07e2f4b1e590b27981fa263500d209f5e364298ab3e9d21ccfdc8760266546715c64c1ecdf60d65b9c66554df92ccfe6dd1d410af0d78e8a9220b0970b12c94f0066e43bb0b25316f9ebbae1b6315e5918b01b5ca938b8e9dd49b4a06c40ff95acc929de3f32aec8c541e50fdd19aab1e044a31a3e4335eb741e09e7b1caed51b2a698b8b80829802625dd048493b7d2c3f5965eb7752e4f9c2219df67e2b08aae109766768bd408548932beedd3c6808de7147ac882cf363e03ebfe5f6fd0b19931c5017ed5f185aa308ae930c9041502e6fe1ac0a5f04b74c78c25bbe62e2afc829b36d5599f0de6307ba491abe8548da6e49942d01fa98a4b1c1b2a3a374e3e109cf7879df12fd5e904011cb4b0776849ef392d5dbd296c857d73e647e77d6e28d6abb58208cca387b6218e786cc122d23e31ab94a67d64b84e91213927293d486e5d8d6fee0be3e4683822ac19a89af850a3bd0e28398bb186588d1d52336a5de9a65c47a8b999a54f62302724c89f82caa5aef4be7a5f320ee883720d14409e2a5968a038b069cf5fe881ee05e45e5062e8eb55d1c84f44b162b854388f90a73b0259ebc8eb077252cea6266de21c803c9d8cd093ed5fc62d68c04ee621262b31cee7b3cbe5fc0b2764b1cb84a41bbbe203010c0c028a3ab5405e504cc24a07b642afe9313cbc01f251523bf09ba0f63756686879cfb95dcd296c1a9b3d1a5be3b975392cf906105b3ee12deabc8c0c2b7070990243f8919d1290568c83529702175088f9a4ee53426e448a6758d692bdc9de5b4a9992940101040504fa034b76805803673aa067af18a01528e5c3922317ff8287bd4bacf4791435b0b159a18b2d79afb59182e7a3b612ce25dfe051b3a4404b7491574124fd483af28113577ec8f43e7002ea6ae1977d7aba1223cd074ec8ac134f1f3871855d51139274a309147b9452999ec73d14bcecb2e15d1e2c7b94975d54ecdd3ccb3d36a893241f634851481ef8214e9e7c8c358942729a55cad1e4262bbd6d4aee496b0d2f59e9f3439a3be53adda37b749bae0e97e9ea7097bab52c3756c54d1336297cf1d1011d5614d9c14214c2881f4f54118444442c8acc46e112a5c0ac0e3c4c64a214a189a2c3ccc7189293d407ba30a45d6b9dd33b27524a996de7446e762735b7b19acb4fe663678057587ea4c20031e5085382244da2e0e8a2b490418545a18a92c28c455800640354112aa63411257a000a124a5b647062e205860485755101d1604ac0aebca6adaa2015715058c294a014b1bad26a49b182a6b5344dd3b4d6aa69ae8cf0f16a70581f63483b7cb8e2c35609ba9bc41c638c4edd05c286cc2c75ac66f68200bc9c590b5e0ed17a39b32fc097de556f35b3df6a667d35b315bc04c0cb99a5e0e5cce2bc5ccdec042f67f6e6e5ccb25eceec7d39b32b173739d868f372666b5ece6c8b97ab9965f17266695e7ab7f256336b5fceeccccbd5cccabc9c59d5cb99f55633dba55ece2cf77266b79733abbd9cd9fad23bd07be1b53c0bbc0078175ce092699f73ca6800d7770dcaa95ed447bffde2a4c79ea5b2bd78f0bfef346ff3b82ee5f547c1779dd71fce779ea7f2fabb61dd958bb7f9187364bb8dea83ed654d8bef6c3a175e7f347646e6bb1bef3b9c8e02007407bef0fa9bdfb5bcfefa3b0b3c97d79f14408e4ba6c10c26cdc9696699d91586ee063960b68773ce192f10c5dca6bb448fdca619e38f189d9caed3955da7d5ec62c97265b29be566b9b22c6177777b322bbd636c4f46c3a2458dcdb5d7c8955dd975ba21092bbd1f707bbb58f8851297e81a718bac92b8b35b64a681eace6e915be5165182ad60b01f30180c068309c16aad55a9c26055a2c6b8bb83a9523dbbf5ebd610e1e07cad9ce2ec068089a4f3edebbaaf7eda17c20c0f6e9e8220fc60ebcd4bede3d979c1d840752fcb3867ea73758ec79c0b45ba51ec943c2e911bbb43565bae0c37862be40e5d186e900be4feb82f5c17eed26de10a5d1fb7c7e571775c1d9785dbd4d47497eed2c5e10eb19adda49b749bdca3cbe436dda6eb748b56b36b7471b84ed7e926dd2156b3dbe43eb94f6ed27d72936ed26dba4db7e9e2b84937e9365d1cee75ea8a907866e94b1bacf4f932073b9f7d35b3fdd76835b3fc5788e8ab9995bf9ad9f8d2afd36d729be2ce0644ee0e5787bb248271ee99e3b8e90ceeb487157cc855f031be6678e9b64d6b7b4796f33eec6247024632fbb8b1bbc345ba4e623a442df9b08118d452546bb15aaf26861e5040923841096303052274e881829629235882d22085d63dc391a62a643784000a105bc0208de100932d41001123dc096249ca5292c471a136bf5aecfc185b5a6232a90c4b4b9672e8262891fd78a347084c2dd68e60a266b8f24491a41774c408ef0b51c42dd5b049a60a10d1c20c53c8763802488c16020699251d3c74cc53ba14f49476e42245111a720489628b92c8e5294a918f20a8157a0001132f8c94f001144a90420788f87861d662885b644e17b03cbda0828f181456e8d20d1e18ba210c134350884195624fa9104e9eba47893ca5745e9e9d4d08259743412949a3dc942a4581d1a0128ee9b1d2d18d26362521efe2634c4905991629414100f1f9d0e77f7c9e6a75ce2adf457cd321ce432bc8e330b8a508f1ddbe5d26b6deba6378a54879be1f635272f8161f6352867674b155e53637cfd65a5b4dd80a1211d9e10a0c399e7a8811deaf4e5c9068e14717283962d45aa90c5f6b65c26e31a6fdf882c8098da53d222165ec4ec1908877071beabc1cc000a206f1658dd1fbfc83d9c92e19e2c425eb497776491c16903d572336fed4a310c73797f4a74fd0603cfa144cd62697864b74a75ca75bc3ade1366db933dc222ed32de22ed939bf0e6ad94011034a6de674f1170b15d2c556e81d3d7b27aff0eb6a7128d797c83ca6c1c8f4ccccbcf325b4434c576cd843524afa855f95a86917eea16e147544c720dd80edf8ca547f54591d529f86e867f3f5a95f9c11676444d4af6e0ce7b0df30daf1ec48cf479e3dc9b353b0134384d1738ccd2e7ec6eeaa85739e388e4bc2af1ed2439e8c7b6ef4b62b774af7eceeee36fad89d92d980e1045eba912b963b7455af4a441733750ef7542dece29e22e65c110bc05e99ba5625624f43115d3d45d4723c3bbba6427c55288f55d301c501a8e71bf3c6c4f1ec138833d0608839ec6ce4d9fb8a06a3699a361b4c8ba160fac571150cf7d4ca7d415b0ccefb8af89a82db38aac934b869bd835f0deba0468a1ab433fd903d737349c2603e9b6f30fdd234200d6807d62f2d4c50b22fcfcc458de92e3296694093bbcbe1889318105c6240f0d085c6a0a36d2450d4a0fd050fdb402cab626503c91bdd3de21e718fb8471c5d2bd7cab572addca7fb84e43addd855b231f6c353ec0726bf526cec4997e71f8e623f20a9a2778ea1297db84d246fdb029c7c71a2254a102b4081c5624eb4cc6606e79626fa85f3bb29ce39e79c94520a8674524aa90c7aea0105bf6f132b7d5239e39c9de23173742bb39c537a4673ce39c1273292f56065d4a64c534a67a444cfaf549298329a3132e92e1366669e471f3dba16bd46a7337af365424373e25e01b576666e5af7c8e88adebc4da1e09cb38d3e724c6a74da84524a2b9326e5c764e54e9367a01af451f0ac7d0cf8e93d13ce41d2eb74952a01302186bd40e89c76ad86943cbce41e936a3b7ab05010f788420cd32a07c16010466f3e2c166c83947b48024ca712e8a7b465d81a05e9b694caa38c21b98f3b60e73ce08f8b915f32de79d4346f718fe67d1fb7d91ace49bd10b2d5bb03ae1b8cadd5ed4ba59cbf59bfd0f6b4cbfe44c0dab1010c0e64dc20ee21c4c2c16301f58b99dda9984351576690293485e650f509c618238d3827c5a999d323065104160e2b9d524ae9ecadbaacb5d64867f48eac1bacf49a1ba2133b2e569126bbbbbbbbbb273d61b28a5ab6c7da8c568e3a5b8ae038345507d3594593849fac1b35e6cfad7aa8699a56a367a7845524e5f458a002151be2466c0a538d6666660e92c25281c583a502aba804927bd23ac3d26161ec73524ab7e92daf15368257d8086a32a109cf4262a5d3a4ee3e05b96180618def9f278104d647c61458376017d7963a3fbff05e9e9efdedb579dcb6cdd9259b6fbc5813fa35038a691004192e9baa8bf5c08062689d60b7046a13d8c50ab244dc936b4e4ab7ceebbc6a531c8d9f4fba7da571f29c32521c76f9a44c9822cc47d642fc04126adc77764d97099a17d6549da8b4f114b4b26ab0ec5d18c570547a19c47ac16e1eda54d4735173ee2b617e477fa212067ce40842cc53f9759e13c5c8384b97aa73ce3947f0097dda03b9aff57293cc02623d67679651cda45ce60b5d3b4fc11266282365c19fd6014e400ab38451ea9b23f83c05694c70033d19399f3a0ad0a7d12a8fbb5d07c2e0ef84ef2209df79b8f351d5010752a7007d87010101dd8821bda31b18bae3b0db5b850d757476787e7c7ec63767df807b52965d5de732f6bb9cd3751db8398cf6ad82a0c7323c3570c5fc5c0160c161f673bb3d5691e5add65a59456087355a2edd287c286f716a0de56b75ad8221057f7cbe66825e4f51c2532ee85104102b5948f064c469042da6642087de60a3872d4952e8628590952d52c806f0101584122723a2a0c1068f2049628c28e2082b1b5872caf2d43d23299c886896d83c757a4ae99cf30614343c4105ca072e2da4928880880b3021545069a262c66985151270d32cf8186bc2f2361f634db00abb5f6cb87d74761d7e21e04625e68915dc22158f5d1bbb2cb51f885f7eb8c7b277a4a497cc340d350135ddb0410a12684f74525ccbf4c4c6347b161f634c4a301c2ea547e99bf42b6d4829992ca005880e28548c841953644306a8284441603aaac4000198cc6e1cc0904183a7a461c8e88e45b178442bd7bb698f16337cbbd732babb99967c37d393efee6e2a050ff308a078f6ada5a394c492d226c4ad3637707e9bfb04755e368fdda01573a473ed21e71ec7391872a0c795ce19e3a711d1892e335c5992849724988eb89a50f2840c5e6088220c94183840841156c484d01aa050c1e889943205b4a7016ea0b7d47551f6524a0902bb68ad524a29b708f5943d8a691b649aa6693e3e2debaf9a9a161f8b2fd592d1f0aca18b2dd611cb40140c62352139e6b728d32ae8b10ca3699ae6511b2176791a9a6f1ec62eafc9a83c162924411ec3c643d7b7f05067876722b1719a16df8d179b5a39fb4ebf5cd4384d0b7716dfc46197e6d27cf5b9384773175fe4946ba75f35ae7ed9f885c18102429821c2c6391ae7681ef8b060aaa5f3b1f3379aefc68bed9c732b6534296fe8da79b9f9d7982c82b9699f179b724e6a9de65ee7b255600933dc7ebc6fdf36d0e3209452da03851863574a7974d885001f9fad470a56ba8c89f8b02beee830cfc723d91059ac9be00330869b87a004bbf912940e4ef08117ceefdcf379cf6d7cb7a954bea9c08df3ba5a232cf40d94c1ae38396057a495e79ccc2ef9632a647c64b5e0f33146181183584329b5335a3e7e5a4f5dceaee8ded6b18458e934d4f9e83a17095691ce14d66fb7eb49541a8a4a3f6bbc4e062b03567af3f49cd322206a20bf132206214fcfe474f8358373a48f982f60a22290a48bad1a7ee9b0c62a62c316e7ed16877ba8b7fbfca8e2c01f6fba8abac863553e5f2a805f12d6391cb743064d8c1ce73186e73c7c7df4c87998414a6666c7f39087e328c7717e031555aa4eb5719c941cc7518eb5827c6284f41b37394e6a1a4dfd6ebc58cd2f1596873018e927bf6d7b4e86918e863be7542a16c146a6999dfb29effb01e29ce39c3503c739e73344e09c1b2289a8732e95b847e59c739c07fe44996a7ef7cda75fe4384ee939e738ce638b0369484ea6b6785e84113520216220bd6686c7bacbdc4f3e6f3e9ba5c1fad070eb53ceaa03e020855902841997774e4af5c997f96ebc5866e1edaed8c57ef9b0886c18953890b1fdc42e9ff2cddb773aaff33cf0c7e753deaa03b038d2e4c2a752205497193dc39a0e0ff6d5753caedebaf526ca7a358aea375036944372887b349647b82641323d847eb538a7fab6d5d90aef8d17dbfaba83732acb880de3d3d0570f618608dc635487864822ee39c25b953c5b1103e61b2f96593658e92d1d1f7ec518d5b7d6d75bddf66b3a6c2952ef6e496ba4947ed1b93aeda0e7a4a0f300791f7f868811a766e64029a534c6186b584256fa95aebb5bd2b6a28badfa4d07fa0b3ec6aa3c7d15a62a446f25c9b33ec6ac087dd71e3d32897a080fbda67d057f3cc842210bd51afc12acc11df9d5a282a18c6b9bd378add56bba16de2ab733cea2ce70f335154843d2f0c050c60886f2883e07d260d718a4219dbe068220952048c190853ed5dd1d481a81af11d02a38c2fd09d2903edb2757117aff181be2c70793fda884503306316433340000a315000018100c094422814828ccd26c123f14800968883a6c502e168722a150144b5114043110c43010022008024190414a29a824a5002aa9ea66bb45fcd5868fc9cd492d04703cec3f5b972c4083f96e7e22f0bfcadd8369654368f2008f9e6ff6a6e310e663e0e9a5b7c0947f306dcf0c7edee7ac27adf973a28feacd0400d3c869ea48f08150a002862ad93d06ebb66add609d6eb2e65162e108016078837839115d889f73332e0f832759846aa3d8edcbf93808fab2a233ce8579726d448b4445fca2c26694d56cfaeb9a8eb8e65504e465a5517809df48e0b938e496132797a1b77875afddf552c3fc8bb82565f23c50b70f300ff51f3c18c139d4eb977e4ecc63aa03aa235cfac7302d0f390a013e94baebce337d9a6cca892d5e74dd196f7d6a41729aa3c149bb5ba821b5649e3ab6769ab3ebf5ce0f797dbf67762beab04b8363f4cda5e839c0d46878944005ed24d6f1511a0e276047a133bf818589942a10dff2bb580bc95581069653ba826df9ad5e3dc4fba6807eafd64f1ffc29f3f9e2d6de592a56db4a7225034667d3bf7a31d613cf0a745d3443ed142758905f92dcd0a17c95d7d277d3faf66208d1a8df9f7f1ef64d730b066b637fe435ec96840009df0dbb3792b5913c0e9c3963bb7f8983f3db62a10fc1fe1446aba2c7b82c3992573ae4e462331947223a5a7d3c4190071294ea77bf4849406642b9f2104ebb93c0b9a3b545cd3545bb0c59b2e413ee120f7a34c6bf2e1da9e60f7179a4d3daf54024ee313b9d5530bf0677164f49e654985f93d3af41b36bfdb4107b6d29fc84cb216fe7b73d307a6753b7ec1f2abaee3182503a609f897662516955a4da68644a68466185515a4d622613ebdd86a5f56184318e43fb5b5b7fd47d5816f7a4eb250d5eee3a304e90061b51a092692b53206d93a9566670bf45bdb6485e09d7f08216947c38bde87baebee8b89837e4083e27a38bdf065a041149c476c251183f173d192ec70ccf2efc9a0f104a431787c851a4dfe79aa455b9b3cb460a0138826f722f432691ae774b5af90bea6f3cad3a2249a3c5984732b186f83e4c16391470fb7e2df9afbeeff07819880d12ecd44cdc42efa04cd2ca0b1cabf308bcb2623f6ed03d9d79ce6a0190f4cfbd2841622df93a29258d722e7500817f3518c97e60e8e7e69ef91188547801c0547aebba505373f5608143d02ee1059eaded51120094b250438e0a0604ed8dd959387a18e0fb7426cdbccece2f9833cc95b9d9a025182c1c0dcbc09ff2753d9784a280494754036f1d33f136283de7b8460d56f67c6275dce9b0c8bdd72521db46c88325709a5b0ba75d99556cc090a8f1502c79bb65ab6485f8d2106341cc42bfa1551e8f2824448c385ba139503826cdcbc51a989052671c1ef92a88aad78da0bc76ba14ed47981c9eb167340205c0f94053134f437cf5e70f1ba6f6ede7470011f50c53ba605dced51011da09af387022cf8501f9e4475ecdd2fa8e4074bcc72f9542392ba828a9cc0a2b533d45a28641f643b202366682ca0f5bd3a705ad3816c872a8e5e9af6f8c843440bfb3dbf7bd9a3370285b80f119ac0360b62837a9f6293fb5f9d5adb80a88c8a1e4a3bc9aff8154218229f89d28a8500955cc3e979efe49616a1955a3783586daa9ec3ca367dbdb5026e2011803260b5de02f8be306f059e22d051b667a73809579626dbe61016c3ef1f03ec33af05bc9ee84f69f09321189f48e2106a26b04007c94289303b389b1c7e108cf4d19a877115b83244bc7267c3a3274eecc5063461714c5961132a9be126ed96921111d55e67f42f4b9bf272897eb421579d0207cb084b48c849c61ebc8ed5f3b0542d10b025849d7983ae6a30fed3956e8904b38a3bcf68ddcbeb266f34356d1101163ef02d3b80785022b1d0de4ed95965aa408b1295768b24d018879330612262983e19429c418858a4c2d9ca262c14a3bfece1098dee9c4cbb7b5b9ca518656c9c3b4f14d22c4a8460383148731ad18c3ce7191a7256c1a414355eb87b0196fc3991c5160a87a68280c10f04182e81facca467af9e11c87178012d25e76e116747fe95c510285ab3b814eaec0775e176d2a49aa20b1ee3d545d5ee0849a24dc090c577e30264a3ea5f9ee141a2b8823f493ef54220d7a7a5e9eef2f8ddcb513ab95f5066ed8a72909999b83db26b554d28db01827e0a76c6746707fe82eb11c148181a7f498defe207aa37fb9280ba94fc75f760bf9fd62f4b4d98ca7e6f9360e6f46721967d52434c5692e11003f934fe938ede8cbb3150ecf9a5f35da55caa7a946ee8f75cd17154063e206b739f73da24ccfa836b0f1c3e8d7774cc6aaeab2c0183899514846c3070a894640186233021a7479b8052072ec3afd0a982cd9733e926e0e9ffe5e9f8364eeb134ddb9e498e90a1a0014aa5e7029af9a3c47f16f284761eec64596c26009d6dc243cedc36caf0f529e20aa2b04c8be85d2b3cc4c9c78fcd99804bfbc4dd223b512d35e57c8b09f11c5398e792b1c68c17a5f64de430ef10f17631ead34338f7bdff38ab8a2832e71392df02d4a892caed139777bb0f7f13460eba11b0a6bce4e25b90b4182b6cf7194f604596dae2b75ae57f6f17fd66bb2210a0f8ed961352ac9932f46eb4cc6c4704f4d2d41a29e171fc4a845942f1aac9212759d43036bde0698856f22403782c0f8b1ba65d32bdf0b5108c9aa3e39653391e64cd20751f4ec3752b3e05d3326a0cf428daef02528ca59bc97b2eb473af4c592585406b8f1215800fdad49f92da582920333365bcf2c9158f9a492f6d9b4bed79022169f51053d3eca6616208496289ded74542811c8a84ba0ca88e46086e64a31645e2adb4c1beac4d193452974230d0a6e5ce8b9037ae500be55b04d98932d63000f54ea65159d911ec0ae0e70b44321f0626ab78c249a2e40f37a095b8b2c86f47423bb73fa66b591fc0d87027f6718be9239dd76a58cb09c8355deda7d8aba2e9c09436349f2173c0954edb1891a6d08fee4a7e24989a4931a3d795ac7970883087501eff7265c136fe03811fd7515bd978bacca4f2044fe902f8ff4de8c3b8d8c4cc8e1da35f32bd312a3bcb3b4bfe11836358e4c04fd3b2ce65ebc8b3d7e419d8942cab6b5830f997ce76f44134bddd5499d7d66e1cb221c9ee6ecf5ab5d7b7f8ce18f2b2d14264ffee249088ad2a4bf7edc9ae722b461fb1681d7ceb60a8e3c5cab6b9c96e544bb1b3c4aad2df88173425beab9093b43db0ff4f43d67d725070135be129a9793d93bfc9fe81c1ef4332bcc91240a5d28e657ba28620b3e4a8bf1b907e43b3d8c9dd9ada3fbccb1155e9d0da8b0c1c64372093757c33e826cfadf06ad1535cda82e046489f246115e4e802cbc798762917b02933c81dfdd80d13bc0faa8627213f9a06cc71725df7ba037cab91fb5a6385d100a82f043fdf587ff07e17495c595450bd7852021d0eeb71cdf51b6c82385d97da4d6c6d40eb4cb59c2c8f4a18da061f38aeb200ef7b6d4a54e0738f09a05c658df960539d10e4d856996654cad0fc1d9538f6343125be41a2579f94902451c2500ffee71683dee443b7466aeb0bd8483b36a3f480c991f368f52e0b79aa65d8fae37ca96b72f58bd603e4bbc4f187515498c5e3e08eb4ecda92a67b5ab3ab0266d40c8c05b1f529bb1440194589699fcda663d8f2ff03111554eddb0034e61dacb33d69201970784cff0337baae18b52294c75abafdcd6e9f31b357d85e2e5d9078c44b5ad0e3ab1e30ece8ddd0aa419b7c191be3585d5ee3fb1fb527911f21b18e52acb2263b08ae2c2b73809977317bbb8dbc8b3a878a7ad6d0be4a509ddf9becff8d6d8b279be48de3cab8a5a2aedab8cd5a925985461b22f3ef410c938eaed2a1ab1a165f09378f56eaf23ad00544c97ed533e12e13b4ecb36e401ff85c6c2c1de222ac4093a072aee753f38e41f6175adc0129d2a93690e6f95492bae8a814c928f71f8a2b35d92c3cfd5c41baa7b5c5e8f921ae33d30f53c5db91b1366c0ea02300e0f1350df6244a511eb281f170e31ab734b782dd84f3723628ab10a893dfa04bb4afc572a05bed205a19301ef5166a57b9a8f3c8011c55c37bd9f1aaf195f08db991fa3a7a46fe5c83e65d06e44ae36972f81956cdbbd61270ca8bbcce622e4c7d816b1a49e0fe1359996f95fcbcff4d892f1d384d2177788f834f8e0d131eb43287e4a5087921965f3c2a6fdb4e952206a5ba2d2f998954b24721c44e54fc509c34f75bc51354b6341e98eb87159c281da03bfbdb0d2395e822e4d85b1007d9c6b298155cee8b52b0cd4212524405bf4a641381db067810600166c46f42d7fc113428ab3ec88cf5388238a49d51114142cf76d61a18b67160f8a55f7fec4de3527ca22764a05a69f52db41d4e334ce5c24f6dcf8bca59f372c7d33640c23e1d2727c5663c08f8f8a8d7a7f261e9698c065d061ceb443dd44d391293a90eaa0a81113ed67a2fbcfd18ddc0e41eda6923dcf22fb8fc601fa95170a42476f1f52df09b58e0435c724729ac8a1cb5c3e23e6028ae1c90e673dfab98f7f818451a9b19b99abd735cfa003118a8d45a982310d15ab0fab44e4912ba5d01766a0e7bd86b2ad8eff44f6100729919aeaaa1b8e4947cb884b82e038ebc6e4d32069faeddeb4539d30ecdcbc862ee23b3988cc121063a7bd3799444416b31ffbd4b8bf02fe32669e3f92228e0270078ec339f7e580403a29ee16dbce68c65c8713a93a2815f4721445df5aa25071945ec0383566cae4793a2734424af742c922e15a82126e27f0d7b7898840211462b0b322957204a0f6851087d9b2a3c30e900b1f5d931a3defe201f2ae400658beb7ea71e1cdb7549f06c710ddf55bb8aa22e5529fab3b1d74df190b42f30138165e4e3a9029d207e662483602b499b8017bf89e939aeb174417bcee48e69dcf22321f1a9f47175e84df7c045d1763eeec7fdd7ab0a42f2c637cca07aa8e2c57319c652223c8baac12e96e3efa53c4b26b6f450e9a5f81de9f53595a96f904ef5f6da3aa51ebc3cdfbd0930c35e900180de637c8ead2edeecfd79da579e6f0e6fd0d6738cc0a37cd0fd56054d4c66a8ecc3dbff8ae0b3ff1cbb2987a5322745c6a8ebe2c0a7b86387faa384d15f24050ffcf7a7af5aaf548b033f290e43475a229c819e7e8c06cd62fd89e391508ae3a8550e9747432e5e486816299804b0d89c52646f912c777999f8b54370f815761733e3ee8411ba8e18c6e0c181eff74b0675183c60cfba7ca4397203294d62380a52250a6af8c07f8d2fb9a7881d9314c38c548c32537f118e6b867abc185d63afda080c5338da07ddfb775440ec84ccf06840549e38939381abad35b0d9a5527cc695282d88c42ef7e3e917275403c6a7933257dcaf70b6a3d8d4163a9c05f6f327a588d19fa436c50678dfb773f3ffa5ab9d479a944876e09b73ec94f9ebf06637655a5e7b288685a37696fb68fb28355e5f628cba40680e1c0c844f051867c447bef01d08683e870519799e0eab82adec9129c0d42224ef6344953cac96d4f2625961f28615d396f0d925680f1e2c05007d2d154453ae65984db42e419fb8bc63b31ba01fa11094890081055f85e364e737174a9bcd59c9008f4d05e8d25dcef300312bdc7d490797dca9039b6efddfd816cdf078dbf8d15e20c2f773557b95e773ffc067af72671a5822549b346030cb6d89b55524a8dfbacc0882dca40346358f277c78e8e6cae0240b282f9a7eb41cdc56ef444f6e3004eaeaab3b9aa9843b43af0cc8a55c69d97d577ab7694e01bf2afcacbceb56a5dbfe7ce04c395ae4dfea2507c142e6779af8745612973b04defdf02c033aff5970a08c3dccc577630daa63003ab7f54ff37418955de5b0a520ef409867491bdecffd461103d801bdbea9c4e3d29d47ae23317c5c972ba1e5d6dc00b40e050b586dfbac55c2ce97079c36a122f1a3e4ce0f1e1de101066f1d06c1059636ae90a77095355cb32a01dabaf41773fcd5149708ea42a5f5156b4df75e3166beb9cdb902282760df470ca120602f60f7a1feeb84c211a1780583c651d4f025ca56aad8df0d1c22f985577fd0d932e8a5bb9d8be1260c17cec5374c6165b997b45107b9d5f545fab04e431aeaa640fc1b0c2dc9b8484832f22ecb9457cf6394c9b6473520c55e52c3a6ead6de759ed205d13c92d364e0f35e01636354aca5935f3cec732515cd6db7eb86d8564d3e0fe8ccfdcb36fad1e7f92ae5c28b56e6ba8b1b0957fc6c153cda087aea04a1d45ac5d834f0551dfca33a09a974b1d0b3bba826485cb7fc2836814c9037c69ba4055ad11634a9191f3a006fa3858b3dd67de610a31d85260dfd933924c6c782a0d64425b995b5888bff6cbc0e030dae6772fcebfc412023e5f7b544b5807656fdb73e41d92cd2988a6e3baf957be37eceaea9a33a317b43b52c2188cc06520cd8bc87b5af46d5362479ff92d0c4b6ab4b026fe924d5dea1d2076c5c5e99c96f584d2518ede5bec5b9ba66ab01f7e4487d5fddefa4efe6b4c7c0afbec4f5710a87b34feaeb78054f8e861696852032ea120d9a122b349a958b88133f5cccc04e173f2c0546fb349c3adec3a6401398280d8e7acd2cfecbbfa2cc040aae6af40168922ccde6ed6fc8f0a00a1f96c6036660d2b059a8241491a691d7205f8403e391040f762d1481715b4999978077be49bec51fa8999a5944c414ad658560822dbe04ef37c1138c9f0a2b5e00ef0b14befdd2c07771152145624a50ff4b307fd52b39126079835ab28657ce336867841c66dedb2dd316dc731bcb0d312b6c86364c08bdc6582f9e3175c596fb109b6b921e233e5df78f6221b71d528dd4553b141d5186575598b5591e4f1cfeca32512bbbd7ab394a29e43c44c27d09e364b8a034b0e634a69a860fce73e7b844352da4b46f0ae9eea9618cb4432dd0d92b6351b09f9631e59f27182f485dee91956630f6066465e9f7ecefc20c113ed9c87869b58ab7d0c118e1f1772753fae5f276261351ae3f478d3fc5657b5bce322ace9cfbdfdc15c44e6833bf002db0d48bca4e9a7d5d25a0d824a08413a8e4217826f07357f0d2a33cbe499f04c9d6d567deeeac43aba83fe3430160a3daf2e4d018d5b10be612c0026e0c1286b36ac6b238a23d0c7917298c720c19082c87550f4755c226aabb98b7bea74870e833000d3e9aa67f0b7cb58742c944960219aad11e5e242c989754301c6943dfdfb3964eaf00a3d17e8dcaf455cbffe70aeb47e1d83d7312cc7feef99554e31185b224061b3e88bebee518ff3580087417a69c3e723c88ff4c02ee9733c7780b104e97f32cb03978104acea5b79151b2206fc3539879b3777d1f62bf546c755023b0b6128324c50940b310e303b85d6257bd82e7e79c9cebd5a01484d9a8133adfba231f0bc6802fe39be1651c02a9a0c2e2761313da9d107709d0cf93b373a733b59cdfc8d72e3169a591b717611543faf31b0e22639a5c3671b947a1bb49f7ecc1590e64bae3304f24f8bb9a9b5651d635c0ff726168a1e7c342a1c59946b44317bf99632ddebb7520d57b32784d42c7ff7f2965668f29e0911ec10fe2058ab56135ff6e443f7f86ac5512be621eb1149ac81db56c7101e2bedcee88bed44cbbd6c603a1dd4df1dd29a4c1c7198c4016dc85fa95a0c2a31b58b8924263d1d6831f10d1e3c0fef375ac4383967f39a9b00c9abe50d2556df8e7f92f5d2f2a5caf8ec2583c1f68c49a87e2205f9ac63f334b3544d4260770321a865eaa09f730f25779957dee8cc190b6b19b672c1b4a8d6a053ace36a09564b1cc17e0cc9437cc81e87a0fb05b55b2c2ea8c06c014e7c97a723ad409882f4aa09d11c3b2a68dea48f25ef4a0f4aec63097c17bacbd9677abef00672079c9425b2b5e975d53350af01e8c21d80257e5cc116a40b2f967d97a4e09cd50aa410382e53f1c845b18abc34f16a8866958e41e41cacb053d20d0036bfc19228d99091c653cccb0c23afe09e644f64e460d02a4affedc23b7791287bab76f23a18df5aa6cc855b014590bb699af0912b8e1f2e8695c1083827dad3807287b4f67275e1335c53347ceaa369c263e950cf7da80309d782439cf00ff5eed860a1e845df855dfad47fbc630f086ad8137d2f522587ed566a8f6a54bd56f3304913be7a86dc403adc94290319e0c70049aa7a4a616c3f61470b80c96c49346cc91ee5b3f781281e6873b272c51a92119e5007c974921da7516c6d7052e10be06a221ac5519715fb05cd4b95835febb14612367ddf03005fde565ec5aa54695bb0a609e1e192f7e8ec30f0552b1b4d32c0cd549901a85cc81ab96f006a5ab314528de6c792435a64518a4c6b9c38b8417ba9ee8f4ad41f0693892e5d974c5b25e1f4284ea36ed1a6e7661290f26729f2cbbd381a6601f61bc52c82f9fb54142ac5f268c19d4c3b5cb4c762b4bdef8a2f61d13733a0829641eeeb28ae22c686d2b6e613f3bcd683a8d38650827e8f13684c19eda235e4fa2baa12079d92c3e65d8411d558c8ff769649521630bc935920ddd2ee789f7f048b17abe384fb50e74c33d0ecd0d54b751457143f0973c2e80c8e89362c248cbd26d1e5d4fde7afad47777da23503a55c033dbdb3416cc811c96b1e31af0549a47e62339542b7fabd4903d81b64df04ea8e7d93ae95cd7ba59b2c5187d54c32597a849d5fa0cabc000955ecb469f2d175b5bffa346d469b6ca677d4983d34060c2ae496d92ba2f992bc1760e309392755185a47d247d713e16c70b092834aad41ba99eefa8b3228bd2f1ba7cfe6911b8ac45da142eea24d43b76f33a43f28bd727f8daacc916935fdcdf803b1e7889f3fa55230f95b67b367fc6df59157a22b3eaa608e657ceb467ff5fe02bdbc3ede589d4a32a63c5a366106b172693f29cf6f60e2975536d48b316cce9be7c45be2b9f934630fcdb1bef9dcf2914f92ed574a50baf48f22cfc25bd50466cdca4b70e4bfcc14aa05b844f2253a54fa06d3e66970654c329b67933ea8ea375a6ac795c169a786b86c2ea6462d37ecd739adea1894f07b4b4c4888b6b7c4fe64eab13b806287ed7caf1dac0a3980ba6cdac772074263e61caaa95ee83744b30d41a65d594d4d88e4dac267efa54d38f5fe03e77be58e8212675edf6416ac1861b0e4a4060cc3529a0235a9e38c4af539f8d3223366e052941346e24a9e7018f2e4a3ee88490a7ee4b0dcad7dbef47c037f96cf35e59353ce6666ee9e18da24caf44d0aad31920b85ad5637923e9ce53ec6a03bb925aed5976c5c6832608b383f576858d4040cd27f6dca454ac4782a7eb05537f8f01c60877b252e74fb7c1034982fd9c04364f697567d1a4cb9fcdbbfa7156bd9934b4205c4d412017c7bb1800eeb406bc79bf09a312f141949f4f4c03b54c94161663427d4eb72499c8583978c1c7c7f75f97ca2a86d047ccd9909a196ac828be10e517cd915d50d32bc081dee657e7b591e157e33f5abf5256cb0eebb6d669f97c9e751aa5551f432dbb6969e457016a358fdf36f9917429ea26db521c89a3997b3e63621065f543d81bf7816253377ce063eff8cf13a35399eaf9e92c50e6987eff40fdbc3454c1f1c85eae5aa2fa724e90c3ec55f55cf2c6023769a5015d7b4623e1b53dd62ed55dcc3753c3c801ac27fc03a49456b5c82f09acea5593eb5f9c76c47b0571d68e53eccb6e0dd6772bf7cc13cc85443d8664e269b228e280683fd67086a7a45e6c64c52ee8bd0178a2834cb72572837a8358420d76306cc4bc420d3db69540799261e49926c5d1244c23854210cfc6f7f150fef28a254ef6d356c94415b927b9cc9dfdcf60718992d89804ef99f02416e5d9fccb30a212c64afb5ca8d0604b22c40a88cdf2ca73c42aab25436cca92717159b332f1ac0a1adcaa0c55f4bc143dc4f131a4aa541a95c9252e4df447bed3cc1c0732e34e4263eb36f8db4b350ab1f11c5fc61fc61089b0e749090dae91c8b6bccf534bfe7e060054cd07340420c68fcd411e2c99b164eedd7ed641db29d8a0fdda232e464689bfb5c3e45f64d07a461eb851ef73c181b4587d0ee658ee28cde2c5bd2d20b828396c48f4d1bcc1e003853fbd578092bc36949ba553d8e31434b5fc8a9c5383f296a43e4023132d352d26ca89e6965978260c23e3db8857bbc1b9e757ea078dec49d6adbc9d031dd8be45bbf2b7a004e3d5ba190ceef0098d6a1fe501623ace6296397560d421e07c7e7bee77a234e8c4f81d82da0b6125432cf7fd351d70394391ed7442ac24ebe6e56188fdf9d93a3f20b3a55f748eada5edfc09566677683f59fcb5ab5d9b5243ff69f317dfe91d46dd1806e3daea897a4cba1cbf371528b12a6bc8f276c0910a6367740a7730b3e925b642f12768a9442b2c55a163fb7ad1be74405dc1eccd56c1c2cf628cf2499bf0669fcfe73ddef771645ae0f7a06fc7440f0cfd123f5ad253516b2c4738cfc95c78759110e65acfbc28efc83c5d297d4d207ed874ed5835fbf9e16ce917c8d096408eacd54dc3ef8d5f2267b26270d306a38d41690563666f48e61ee053b9b1c1047cb8f4189492149e5b80c38f83faf3514bbb62d1aabc370bbeb64ee417b7256e713e9034aed7b2c8e94645138603f7c31bd9171021b160e6d6192dcf0789e90195d5c7aa6e1462f63be49df001fd45d550884fa7f92eba1df2877baf28f1e579a3bca24fc031a3508a69a0c6f8feecdf0158ae17ec653689ee5c7fc84d1c790f96e48f89c1ce5ea8ff3d877c7f3f20da8f4809d31b3d4ee3f9cf2ed3e7c5dc66fcc28d882c143698e68680ae60241ff169c3e9aeb099ecd5c6fbf4704de59d55fd09ee2161f72c0d38751a73d75afbd9c896848661fd73f26c1f4afc865104f64764588ae1c66071dbc29393e73fc26ce2f77cf916bcd333d0afeb856cc835010edb5504a81ae5efdbbe4d19163ff4372b84f99b2f95a4099cd803b49fc342276d4ea539ac72787364fdd87c7eef8f840d86141dd40c06f14ba1dee3cd7bb2ea741f4a47017980707f03d667d4630f3cdea7e4c037b4cf8786aed8f659ae6b29bc8c76196f2ce77a4358df0d43b4e320c54a734979649d27eff72103416f5e21c5b58e492d6b90fb29f0c687ec5b2620e3d795159ec3e3d64935a9d8604a7d90c77f59f854ce3b2a31620ba1eac58b43cd0e21734b444662a7965112b67349fa2d04cc3c5558660ccbcc290ca3700fe514865ad245616051fff941d493bf0f1f8312dd677f172bde7f4b05c48c067aa0e3f42cd334789b2dda0f426ab0a62f295021745632a996c1cd7a96d998126096eed317c65f5f5e75e0332c6abc349c9c89db3a1f4f75d05efe812bb24bc157d4155cea92e2bc3ac68e23d0ab604cb8b8030abd9e6a88b07f956a5656321ed30434023c558cbc9966d236576c13128c5faeb4809796f69d244460dbf36f99ff22edd9a02c98235db963fbc7e34d1afd4a16063743f64abce461aef7d0e3ddcdf777ef980b83e9ed4c35f5bc4cff0220920a60a22f7c77310a94c158d6c6774ea01138d963ec80592c79b1f22dbe5a7900a4db9467a2eaf90002bb51bb9a26e44d4cb2c223d9516a5c4480a522023b0ccbb24ea487544ee4a665a6ab43dde055147aa3372adf9b4c4d8a99dc815b121522aa13fbb6cee380f4124319510d99f8c4e6bc07bbc0591472a6764afda6a5749fa2c6169bfa204c1b97df22bcf705a0ef0a893fd0ec3286c833411ae932ba18e06aad0204f6828f5a1364d74fd12ff906a3796546b790fd54fe661bbf2b0a38a9b2b2f8a2e5c9e3e10838ce53dbcd981d644b07dc79ac746dbd3ec2abd606f9208ea42a2e86f127d0598f6bfbb3a96c8ef908c9220d637bb5ac967ae2d12c44b4fff32a277413cacfef9e8405e54d2ac1a01c3253883834e8140253dfbc4072b42b3fac61cc87dab89b8258e567e0b775f18e3a82b7035fb7dc756697c9cd0131ba0d07caba32405ab1751993ea1a1842f35f288feb6bd1b97971277e778970bfd79b23e02559884684a43674e1eb4924bb60800c210e2926499244444a8dbc8d21508f78b46532573e2dbf1c916955a3ed3614894e65b57e0281ba7015b42a0c6392989ae92b14c8c282481643522a09de854a274933ce2530942ab09ef5c9dc445febfc020e87de45b12347818e935d4c78ee2b61930c33b52de327cb6335a34c044d4f4a63e2bf4d37615b6951d2cd58b9b8df8df2efc0911c785f7871c1b7f4364843bd065f92425b93c2a9d27bba9e04d54dac1c4f090c4785835ca30cbaa8297f0ef161306bb8f3a6c562b545a7d33596a52637ac7bf55de01eb5831c7776487a0f8c3310f5e486434aecf059084626601af84f54bb142e6e063c227f47fc30e497b2d311a8bdee6ef1abbb93d03b8e79828f0b25cd9b3153c254d6a12dbcdace8ae6bf6e72bf4110dbcaf046d08daae06028959dafdbce7bf330a336256916ec39afb78d4bb68aa6567a62cd6bc6a6801e9387911689895c5b58b172166b3f934776c30c5417442b991a47cca28922bb67c341fef229cc5aed9674fed878ba671c18d04930f35ff4dd24c2972784735bcb44f09ded0ea61ed8528e26138cbd663676dea760c26de36d5001e508919a03539fe21589b9ae934e561611c6b5db86e11afb218cefa46a8925436cafb11bd2f854b99dc1f3ecca1ad15954ce08d32083f0a5c0902cdd46ab73d27534a94168706d9d0143e1a002bf960e7ad2452abdd35ed9eb1473173b4d6e88f0377a434c86280f09327eb05e56972bf89d478ee52630148a58c1492ffb219e8bcb11f5178c4a583ae90f48231bf180b79a54bd011917ea23acf93380b6ef05b39b431b934cec2a9847a33b3431dd45f11a38416e4c9a43bc52a2f0ac2a2844ae3b99fdf929d5c7b040026d50a536c8a78081a28a21924cd51064d86913c401031a9695482f479e888249336a62052a57d31fb9bb4ea0a39a9afffc17f0d977aae3111b8884c45882641724de80b23984027ce4e6e2fb3d7c5559190d770190142ddad929a445b04ad5c4f79b631acaf4e81a9bdbfcffc8544211741300304c410c65b5b7d07c51dbd83e224139853759aca081d619bf1c8a2965c82c1c734a71adf93380e378f7c014ee6bf4790057e890132d1a9fe1ef380598c73e9cc0baacef585ca72eee7c0e0928b0e45bd0a20b4de148e190b61f9e492e1a404317304dc0e246b50bb82aed603da08c44f487bc0458e240c09445123291d64a8a19802bf26bb40c726444bb4118b062c1ab168c0a21e592c012f761b3219ce480205ae25ea90a5230bc7c8b2e0dc938d0366c1200114989e284396d48165c1391edb0d21242e3060d998853ab22c389762832004ed620396bb9165c9790b5b05f12a483d001bc0c501420a27d4ea701be4dbd8ed384208cb27f533ff5b77a281e4f3777e3062275de4803a729d9fd4657e4192a6083ad34d7654ff75478d8331b294fa56db87bf8bddbec5c1664ec238aa135bf68a4405823af7b1f153a6687e8adc9603519f6450690b0a21cb6c0c5940d3b323199ae51e8f3c81c56ab5c63f2f65d06aa1d863d19ec7d7259bd001828fee88f5c7849cc5c47351b7e45ebc17ec54caf33ce9ba91358636a84112873764fa7215a0584e33163cfb5c709e74f7ecc9a3d0dc6f37ea3110a25c1b31e73aa1d6dd757b4c59d7c236fbc20550e0fcc84354586734608b34fba10bad9f871b945998f94601bf3ac162791b4ad33e7a314564028660afcb98dfa10cc598500043ca1168af986c794688f7ee24f26c1a0c32f52c000ff6ae95e649a42e3a70a55274921d4cb0026301700d8325712e4b15e6e68d2f77992ad9f653c4e9265e8f851fa96d0cdb29bb4c52ffb78ab62d71ad3361e5a97001c4f29215d7be1ccdd8766d3041512a82ac7b30fb4caf0f1cba8b00125c9dc0de584adeff0be9075a8364585ae57940431745a050a10c436b6d845a43aa89f2b4c6d0c7876e66bc7a5b60a714bbc3875416233d9a0eeda6b91d73e6ff5a1c243b70380a49085936f732827c7a42256f914fbd9c5028de03eb22dda24cda883e08b9866a4268e46d49d34591dc15450711e649de1c306e9add5e6ddcc11bbefadd0164e3fce2d4e14ce75ab7de477fdfd20f9d0c8e9761827c3b820728c17ee71bfd802b36f654befc49de36fa81650a24e858703c64fd872836138c1a3dd2e7081cf91fea50653817bf245fbc791dfa3c705d43e35bbad2b7191fcf713d4faea5a90bd013bf917d53b1a2511c4a510d58e613393ee1baa58d0d07816befdde4fddccd4012d87b5e9c9c527622b92e2bfdebf021409aba5c7256d4b6e5a71f0e9a9befd3020280ef38814d4bfe4798f01332c5fba6638a1525eb775cad8ab883321a40ffc2b21d758edfbb3aec74ec1336730cf3291d56e110725639810303f81871bb4c1c0e13fbef6a24dc4c07a723508e325ca383e6bc8068dedb58823a8d22a91a3085b69524046b284c493dcc72a6b9711d6bdfc1040b324b7e1f9f695832e3bd996a97129b743309dbc52aadf04d267211098bfa1c9b146fb740d73df8ae41f5a8b9d2f9f3f36c648eb033fdb6b8077e1d2450c5284ac9be6d8196440883170cbc5a009105db040f45f38715caa4dd1d0a39a2eaac9ec6ca59a4fb8d79b1b12c754f465871acc4c3f4248bb5fcc26abbee48163643563796fa01e4d7ba7bdc4ab844fbc160c456c3a2c67f3de4e325e64eb4020029445c5746e95663ab44b68de77580bbd0c58fed7c429989c4023baa2ea3202953a80996494fb3a2239cb2dce74ae8051420f3ca62871369b13aa0894166d9bb76ad9c7654850bf5f6c8512f9d6fe70829a1e6fecfb6e9317edf11eaaf8e1627b2ca5a90b842874c59c4b09d36e62ff31266a3a0dc1e127e86413e1ad75c01fca1896d64f9bd708c88866859b7f3a5b9cfce635953201f608396251ffc77bb0ef03458ed93caf6c7fa8e9b548e8b2227d5f76a9c6374c7b78d11baa18cc7fa0e02f628b90f2ad2af03aa8f32f7c1e624ea650e73bca0524123a9f7dfe0ad09a1657f9abb19828bb90833caa800830d0700cdde9f8d6bc88fe8de9be19af3cde080fb6668524f970291aa9718b4ad6bb93c9ad5c840e9caa9035602af14b207ce707fc119bc73759163d52bde61f2b13bc6a64105e5160ac4d49a213455746e9a489ca67704ad9d4740d3320dab7711551d5d91b44cc3425407c46c1c43acd1d19a8932650ec79ca1a0952b17a7bd3c1b3206bb544a84dff517a42d6ab9163bf95f240841f63266fdfe861c9a330c34e2c530af2b14056f5eb5058e59c9454cc3139f84492a1c08332451d0ac0d91732e90e858fa63e04f8c78ea8475fc868377948ead5204f57b2a39bf6dc1b20945f422d089fe1eaa8065c697f520a6cc417e62b39482f503fa88400a5d170d7f150ab29ba3457cdfe555bef66a72327e7b10e4b20418a6f20ab3e940dfb3603d73974e9fb89e656b9c25535fb3981142425f2b8194217fce545755ee7fd6386435e71d21cf142d60eb47c799349a8ebc944f45e0287aed150e8717ef08c2cc36b6ddccfdd0d36efa0f7cb34487e96b526d79a4ac0efba726c16ed6fcc75ad35ce0020fae820f272ca2371e31b811426b3abb073c5c00d9d49ec333ab152d75172e5ff50cbe80810d92de14f7038fc00be58330b1b92fa777d2ef27b2c9dd89aceb53e3ef36d12a8327ef2cd131c832ee9ad4826dd3781a5b1d4a88acbd918615fdc3956743b55ee118310d45428e3039861fbe044d99d373bf0f98e25fc125e04c1007a018bd107b67f705cda11091653f516de279d1b015127f78940e83c6200e5ea2336b3f3baa64ac3c2babd39c0d9a7d6eeae794f4a184bdd3c63d979cb4799afbcd47ca8513051396457ec71ce702b92e1dc70b9768a2c115c30badc2354e0cc10ec5e85db596901f730dc44327177b7f86702c2b78a83891cffc313cb5d2c30771a5aef78e1bda37b87380b2e6395b2c7fb4891f4201380283b622a09f5851497054aaa2c977cd2830ef0da699298f27f9d844223ab76aebe1b1e8b4bb128de7ada299e7ddc964563de06bf6e7929715283e8d33b966e7cdc36472357b53cc20a455019e26ab99d3945fec449c802620426c8402550d08f6978305c58783d8a853e59ab083cc0f876f139b383f08fba0cdc9d6049874bf1990dd1c1eb09f7dfa4908a0e4c0d0ddbb931af9950b1c661449d43622b9ecf454c11a4a849c57a05486034f7a39921489e109a010215d1a0d103fef9a7b48193639dd4ecc6092f242b1c37344f6f1411610e14b9c108123611f3c960365ba9005561230ec83e42f8c7c2fc007ade9aac4593596bca81c504e95dbe626af2faa812df1c31db7fb91eca6824232310e6dab89331dfe904528c7636cc9b2880b11c88ca0ce4891c7e449c3391eb047b7b36aba480c0891b46b019d3f44a70add240f627f98ad3d630e27b29217e9ff2ad365477be480940a82081e6462338388d02d29e1b6295a488b81b96281c83659673c65a7d93275d216c4fe3356a0a12b315132399ba512bd779bc68c46834c5aaaf1918c9345591c0177ef655613f41138c4d464618d7b9be2a56843b2e66ebd1c2d38f40c0a5fe9ba19a04c881050bc725eee12d251e2d270f826f4ac224778147688faf52493654d52bc4e30fa4451e7a4edcaf6e4fab21634886faf913094cb7850b151c490454ac439a3569b7e007ad44dba9ae775a0ec0a90620204df09fb0f1a84b82d160a6eb10a71b8970b703658216017f310fe2794f08827db7aecb6d14b70fb3f2bc5a99a4290903361c446a51f4ca22433b58c852bca6703bd2854773c5aeb9e4e64793b54e6fcd6c144540aa813654d6cacebe9c95d902e7741d385f35e9162f7364dd9d2bc15f36b9830ea9a0883416d2357b5e398cc2ffa55aeef3e216bd4bd540d5a6911bbcd608907cd037008e77f4943bb132e502f1ac934f009262dec6ad916c9fc8bdc9d2ba2cd8b957a723f907d2631a6e8f1c3be77025280ceff4c197a3a36ade1aaf70ec290c9141482e2e8ee46e61f1e7a36b5d7d9670e028019f9e937258bf10351cb0f7942570f1c0888115d4adebb8ac83982774263c32f2707b643e8777be97ac8ffe54c0ad0970aa882a7ac1d0ea5129b3b376a2de99e0b0b4f22d9233c1d950bcd98e05584fc21489c1a7f4440a838e261d0adf06c7f545414c8511c793217f20236470129a74d4c16e14a6db78d4c3ce3554b97425bc1b62aa99b77d81d0e22b843a10defe1d955e9bb2b6ad5078b9cd9ccfad186ac276bed6a35004018872fa713110b569c68bdba297e89033606b72308850c9f74a89ef144c443ff26dc06a73e87d9f7bc52000715e1c87d8e74bc11c449ddb3836e36646577516ad860634d7a9a1986f88b2e5c9fd8c781c684c7652c7a8161be10720bbbaef14077ce0cbc39f9a57ebcf9c041d565d60a55a19d6533e6e0c4797f135dc3ce1220dfbc30f4419551e4721bf3e1cf2ba485107865e01ca4bbdd88bf64b585e42dbe2f1c03ec905d9149dbf40818605d9007a0b0e106306c143be2ec92d6ce31698d950c798a001e56f7a28babb29d16a54f34377cc40016c1921ab630c73e21b6ab6812377041aaf3f43ff1ba97bd24c25ae3fc26d2c806a80e1d34f2d5d014ed6c1945a2e8a924d968419799b7af3c68000fc0364558b054cf30a7a7e7e4cac0d963f02cb0b077a09442d96a6a0841209c2b8d659d35cea600da6fd695caa5cbc8da063497036aae7a8b5b304e4a4e07bbf3f2a467a3bcf3e7010a4c34a6f91ca2e8a45ce5bb6df37575d5e7decec81a56a20a3804dd7a76a98726f51000eacc8f009014a183880eed2bbde3cc27fcd0bdd8c6e5650a4946d837c84b6b5beebde596524a29654d0973081d083a357d6e44bc5a448430ee6cc576ee902d901050901016b48b9a02c310292b60819424b01872b148016593740c6ce86af580c612fd896f373063a963e0020af40a2395c620c89297073492280c4cad589302abea193218427fac68aa35721b0805203550d4207930a42649cd105f3deb6ab19a2a568d0fb4560c2464c59277e0cb8a1ade3ac12929ded32dc1f9138c4a6b8abc27b397a794d279512e22fb758712162dccaa1c811540aa38a22f3724c4002b5ca042133624c480d584c925d68329a9152d3c85d17980828e1da5d4a788046a81e5920f85662ed830039a29b820a18411b11046021329e8a1871252488221160259c1249ab182859f8e1d664592df84c8ebe4258d1355a85002ceabf923bd8a2027c05a4174fc70f572f5e374c6e9890f574e8d98d02a818a27cea8f9ca615bc116af09834d3455de5ab962798bd70f5d65fec4c76992e60fdec034b52fcd97b79ee78b0c44c797b1570b1833d020d11f96cffc914e051b2ad47cc8a2c18d508f9b574eac4521343eac48f38218c624a1822c3a54b1c412303eb08172c51462f00f6f7aa83833e68c1713b278625df0e4de1bf486862ceebd6fa29cb1c214c4834d059193aa0939dc24caec60a58812a4c9c148dc42060a2d4770e161c90467926c6758d8b13eac202755225b34f661f99920a8378e8625f48632a1ab191f70cc68d14166a6746d1420850a362a62109090191caad09b37570a2639a906d9e2b52b561b8d3f2a4981e4c3a09e357afba824059116303d830f6129541cad0fcb6b7d53afa86d14f0668aa6af750a2abed63765a424e1888580829a984c7865d1a40491571615b7e0c357520f75c803364d3c7cc86a9a9245130e40b2684ae1511f959a681f0249a173ad5378b956629937659e7e7a1926beeb7922c11ad9160d63126c128e414042535c91828b19153a332840512bde68a1520309aa44f1a48a216221ab090e65909861628924ccfca8668460a9c29b5bc64b93104d69924ac081ae0365cac4ba51d697794175404f53192194aca4753acba74c91285a48faf192a28c15202f29caf4f0a3bea4a86564f8eda35299163e04aa54bcf89a7973a1b8f216f3277abc1d07e2ad4651e4e3978f5bca7cac5e9c57cc0b770926307faf983061c284b9d1b2ea10122ab0200a3242e810263add60c4131126707892e606261ec01d9866e09858e832137b838b68f67c89b3e78b9ebbe78b8e3efbd9cb4d296d526b5d22a5b5d6ee39048b77a3f56088c6844913e0211a3189a9045cad4d54f0e58920b5265f70f8f0839b2d38441183955875228d9bafa8af54bed65a6b5de2ab1352d45aef12113baf172f8c1ed269ef4dbad6daf8316e00c13a4b3fde60d11feb9eb556dbce4629e59c34e84fdcd2c498ad0d191d7698624c13222ed0c0056864c0023764c2bc714208ea04113a53b6d547a526b078efa3521367e698e93d5caa501857d22e983964497a2150189b57a7adf920c6b07519abe00dfad3e37a055d20d41ed86b6cf3099b37f0adbed96ab1573ff2717d73bc7d5cefe163db346f4261589f3e1540c1dc9032ca4ba781e0d70542f51be99c4d40285026121a0f7b29282f677695a73c7e392e4e0fd5f53e1cd5279170ae4cc2b93a3c1ee3c98eea73cff350724ba42a90db188cd352d30eea9fb7e1f8e631f6798e1ccfd93daeb7f21c9c1cd7733cc70a74555ff92ce65170c774108eb27b9e72108eb47fdef98ea21c29c79ea37394c778c2e5b8aef21b4054be65df5cb55dd6795c76dfd8d991fee86cda4abaeabe11e90f9d4b6a110ff945451fc4d8e61fc498ca8b72b840e83ce5a9dd23b6798eeb77f7f8543e23e2f8754f7e2078393e97af02b1a63fd27140d7f4cd67b10a86b3c907310624e59dd32c3f103cef7c7e393e4f798e9c43ef3964bba8a3fc033318e94f07bae8bec16dd6866d73df00a23fd2a5cf623e54b33a71152fced76b4cad2f321188474ba5b5064d5854a2614a991da8c082254d975a98a5342e60e28a286d3818fce8895308d55a2bd3129f99cae4581d8432ec45c629092f2968fe4897d3ba5ec6ef084db76631a530354baf34851114442689a745623468c2a86442a33e2a91a9b580613256de7e5422c3c387b01a70e0aa7850aecdc1e650e4c8182990946973c40c4410e102132e3b38b152db82c4ba69a196528b0357c57302ca75e2861e31af16649abcfea844c6489bfb414a4e2c515aa2214aecead1f17a06ec20a126c81009d2938c10bd848eaf5bc07ca2106482f8bcc8d07e8b0e977ab4e82862e7317b2ab78c3a766a63e420a47f9ff3ea7787d23d1fa2d6b724798cd35c82cacf25a2fcfcd7cf299dc7ecab7760119521f314cd79bc1f91b52e5d461dfbf6c5c8dbf5b62fc62681992492519751b7a0ac7acd1386a4110399e9c9e1f5ead1a1d6570f5252e6ee8a95f1d6e6b7df2cd26fdbc64daf2d01e4f147a5258ee4a4ca82183743c4ac0122e68b989a97f379be70d54ab9955779999491c240f1e12b4cd2874003f83088012fc1d4e89cbb2749e77c5402537bb9e4d10893b1e2e0098beed1241a8d4682588e0d34a909794b4a2851e5df566a71903dc08ccce27e7229263293246964bca4c8faf2c4172f2f15e0c5f9a5ca165819a207165c91b4e78a97205f7c30a16eef89f265cad32f50887c8141c8972527d060394c838f4a5ed87889e243a06d8548849010ab045a162a6bc0302d11b324c9608a14b42bd83c754183bb5c615570c3084bb49c10833748283c31637245520a487a90c10c30e832a68b13320aa11b7a6ec81f95bc88c142be5e5c4e985e8820f24a0af2aa34580ef332e54320fba64b12125b7a86f002a4042f24f8f1aa3d57bcb4f0f5a392972594cad7e079ccb2f448e991427b70b85d92f87b7b6ea821e90ff0510909238fe3b456e290e5797e11983dc622dcf830ba0ed6d36ed2264ebcc786245cae70a1b2a5e9b18e733ccef9b7e33dceca2be92a30aff25c53da5205cc115b9e7a5e91a0c1a35cfbfd6cac5ca5c2496d97b723307b94ca533b3b3e345760b85aad44982aadbd50074b84d58ee76c01a0a057dbc68eabb66cc7bd2dcbaed260b8da3a58bfb371322b7f3c3d2c160f0f0fcf8a67a5a3a3a3d3630312342e5e3456618cb1ca3d9574bc05ca63f752e00a0c45f8558e766977699de3caf9d13bcc9ef215a883f52acf8ec2f868c55aad5cfbeaa8fab0824460a5c2e8354a2c7a98e8b07e94d4e90e775037aa2ea2b877d4975146db3db7dd9f609843d6a4d5de2da7e96121d5b3820e336a7e3457cf76975bad745d51cf1336eb87f957f3c506ea7611d11e285afaecc8b0dce83053b7181813129450641489743d945028cae506db3763e5d95120f521da036a678138ce03fe0ea823a17c50565448872c21ece1061f0add9c0baa2255e11d6ee024b7cd1e3fd41114ea080a815ee551c6b9e7128dec404827b16a54caad23e83dce33d0dfec6d9ebdbce5fad7db15cd07ec061bc060ee2c96e737e8511eea087abce180726b107f3350be7d36f2a35c42a1302490123f2f1d7ce93bd41184519e7fbba2911b5caf686407d109ac1d28a3482409058d8f741f52a8bd7faca19065c8037daca500e651b0f206f8582b82b4f4f93b9f4b1ed78c40a9a9e0545321a9a6c2929a0a5b9a1eab70dc93484b920a8f57c71406cb9998f49244626a42d260a89766474b1269a903659ffb781c31963a1dd30ae55f4eb7c3f99fe7ec703e4a677bf5b08758625cb70ce59f63b9343b5a92484b6a50489dcba5ee0c6ae5a16ceaf2e65f4edde1b7b75a515b4eedf0b7255368545d3a1269a9ebc21ddf5c775f289976b6aeb8e3018d6a4aef5052e92a13d35cf281924907c5b4a45760f61c30e513e4710ab21c839b0f510d6a8934613838aefa248e941fca7198b6ceebaae791c2508175630a83c2c0c1d9aece37d72e996407d8b74fef5a79c0487f6a2a9454989824125313938a0a255a5fbef4a0a5676f81d161febccaab5a91253522503e7e148a273425d03203262a2851634a105140b1a469090bb15a6b45a07cb55892d0b057ea638d48095f3fd6883871c28b1e5f5edcfae77417a2c5702d3aeda7031169e1a70731e0e7122d3d46205b6c9bc5364a29a517744db7b10d74cd4d23f6b8d6efa56ea90679489f94d2ea3c2a8dd563f48bc06c16a3e02c5602a70ff5d7139abed64a00e4ab4bfaf51e47523e88b1e9d7238dd8637a8c79f4fa944e7f6aa43f3fd55d2c884599751e76834083972e6f00a13e670c5e9c2fac8dd66ed8c31ef6b0473d8f77cb383ab9b9711b9d75ce8ed23943f99e73de7160886bdd32ea35de14269355104072aead7412e0634d081321436c96ad73e9bf5e65ab36f19cb865a526e4074e7afa39e79c5a77dbb5951e510bf286550bb2a6859616fd49580b4e49638f8fc3d5cb3ecfde941d7f44d9f10e65547ed8bd0c7e8e4122d9e63263d9e69d7b136f18cc2ebfcd3328b31983f1ebb7f9076e9ec1cea97f1c17632d4891284eacfc62dc18c36e6e37c757cbcf868cb2e667dd8244db75d9f50d9459a7dff5f8592ba3becaf2c6a035c495161140bc5a4000f1722580a8954048cd04134c407dac01c142b66aaf570d8893905715ca2b1fd5c71a10263e7c25d136db15f84d56fa71a6fbc1fde8a27f0c81fad143ce31a26ba2465353a395d02a62888607110a19182186044c1411c39514b871a287266c881cf1c304abdf6a3f9efca6fa8d8819b0bc2fae129cbc12a6ec125478ade18181ce7ec18e500b5442db0d5f8d042b08b582c02d2c34580ee3f9580352e47b3ed680e8c0da923ad312e28856102e3c3dcd8f4a4f5960f1a4129d42a58975a34f4bde40796afafb7788960e4f50fee7a3d2d30f4f3c5420f52907e6a980a03d57401316bd35458799fae674afecc6134675ace68bd03acdab9594f2f5caf384ad5661f69151e38a1d6fdb4554ef7e7d68dfe69f5e04bbb5b645454a99650e425606efa3d29b25d363073be41bcd9ff3230777c77c1bd69f4efdd2c7f62392341a51c595d21636056b74314fc8c2c8cfb0858f4f25374e7eda2b1fe6fa6608d00c6d5dd6a832a75bda5d837af53a3faf12551aedebb695843901f9f4f76b49d1f3431f1fd941fce9357220b99f15cb744a5d462150c37c217fb6a49c2ed350eb928ef218f3c0542a3b6af74079d61e633d3cff1c84cef5e7751e987294e34839caa5a3f69114b9519ef751f6d476c994e3f0529d7ffb28e59d1fe1b8e7b3d82c163f9de802bb4bba67d025f70e1cd93566e97d7414f52c86034a099fa43c95f2d4f6d163c8b5e36c20fa439d66c75bebada70270087404b56fc4a4cfb38771cb2c96c159ac067d493bfa00fda11e02fda19e77a422a03fd4777c106322d01fea451fc418ca3f88b12f7b2869393acd97b28934d2644993f9d2bf947b5e05e526a1089449f487fafc76e048396a1f1da11cb52512fda1fe418c0141a53c9449289f5e41198b6550c6e227f72abac03bd4c1a2aeead26e57dd356a0872cb36710d2d19641092e1d54a41de960a3aacb9d69a6f9d4e8596be45d35d91a20be973626935c115cb96916ae55dad72842895ad265a7aacb5d68a5b4d628cd145048254185cb76b2b9db5565a7748e9846165c51ba63fd1d64a71b473d7b971a99256262d26b4c524c618638dad23ad23ad23ad23ad23ad23ad232d26ad232d245a7aeb48eb888e2f5de31869bcb5b66aadb5d65a6bad75b5ca59558d6ba52c68e934c668239eac5ab75aa99cb4d66aadb52d26b5563f7aba75a4a8a0e52484244ef0830a351308f9b1f304930c412061e9e1ca0c9cfe7a6ecd4029a594524a29a594d2d85a4147a5364b4a6db6504a698c944a17fd32f7de7b63f4f0de7b6f8c1ede7bef8d2d253a2ab549623384cd16253660ac8d37c67baf087edb57ca8ce6d38db10fcd3beb0966b0d4c6a99582354f2d1734fda8b4c6cd9a27d65c212b0d72cba8eb099b2c1f15b4b3e26a75c6e98c1aa7336ed6d05aadbd77c315633a25aed9debb6d1873376f18735cd779b9e64ca7cc38735de779397f60baece5fc7d28548a464659415df9e9a9a494959fae75969f8e535355958a4ea99a3e8dcc223389915964b630878c591af3c4d298334d6024928c22a9482419455a915524143792e64602913437b2881c2202ba258c593c3927a5b55a3929add5dabbd56da3536ed5debb6d18735ded3a3a65b7618eeb3acfcb9d97f3f7a150a90f954a698d83a352e5ac563a3a3b3b3cacca62d12959389e2a5330f419f257df0cf9de2a5356d8e2276cc266ddac099bd479fcacb562d021abd622073a3f23025c58e365cd9524a5169318636c400b0618660b86edda4ac3b80506182c17aff5029ead17b66b2b9dad1702b6cbcf1a636a56dfaa22c104e963d2f42f14124f2ad1384a7494898224d44d7dc26eb957b62a180ab7c448e7c653e26585a6cc65497e3e35d496280bc0d400297b849e41ac5024b2b4d5f25389d3cf89a38a13b2773c69430d3525576a4aac3ccec79a121b644d490b2ffd024a8a7c114f4fe0e65f55cf18d2ee5c5b4ee85c3190912c2c9f6d93b4dfb6558b49b37c42d83620c207dc48041b4bd2a278f148c7da09ac7cac25a97d023ed69228796b6b6d51a1af53d08856995b30d0a1be812387ec40be9d6e932479cd8217a76c07953b7c4dc880b6ad31189048524ac924659c4e734eb7423f519dce5434d58986b3373b6b63d67387ab8f3e7987af167f770884ebbd1768ca2a468775d65add3d6de7c4605883fe62cebbab23e8b95dd10cd1ed5aa0181873f3152bb6156fb95d49e79c734ee976ce19639c71d20231819a5a1220352462829cea9958d154a7ead475deedd845a1bb57181dbe7eaa873058c7a29df5ce259264a20e980e985e5fde7455807a0a88099f9b301db5675fdf0b3bbfb9734e227d57fffa10ddba59cb78f1e5a1b7c3d77bfe18e3cf6dca6d0ec67987fe2d323a6cf1d6396f01a472ab72eb0cc8aec201b57fce9e42811b83a1e7d471dea1e7d7657c9a34d378d79fd89c3e0a153de0e9e9cd7b1ec1302e097d3833f294db23087d48e3e99665976da1d04799c3bc432129713e50088c9d03c5e89c630a23b5670cf17f3bcc19c7ea04925aea7a518ceb5c9106ba1b5f9d827857d05afac3b77ef6c25397119b781eb3b7b6ca5777d5a84bfe7a955dd77115185e572181f2d5b92dc72b387b6f66cf6374919d03c3d9731904436ba352b7b38f1fe5787c0676ca51ce23c29ecab17f377ce6fc3e88311f1ff087cb83c818f7cde05838a4ceeae17cb31ff7d9b8ee11619fa1721bd543ca39b75d353c3c445bee720f8ccf7d7973970f4d6c9d05ca743c7e0677b07cc7eb0159a08deadc0eaf6bb7fbf321ca0316c927ba9ee33b2e5007947d393b9c7df80981295086da9f4b46bc42f3acb5d9b3d9bd1d5eb6ee591e92f3b82c3f19d8ab5bb0730ade1c5d60c7bb4e980e7a7eac2101f3d2a34ff7c24ac323978ce83f34e557240220259080f631c2a25f3052207e8c2dea5730a431e8ec2720bd6e5974ba8b8e3ea45daa4f98c69a7541fb74bec0dcdd58d5525dc14e046f4475b0ec17a3c378bbf4eb7440f6e811539f5fe78b961911728490414c7f584cbca404e3b7c8e80dd41c17084104599d4aa83367cf4345f9aaa8e8496f873a5e9ffde3e6d7bd043fdfc0221f2f5dbefca4cbad63a0c3a826648530bd75464797497e4afd5d87bfcbdf759e9a9fe71c186ea3fa77c30164c2a04163c4d113869df40fbe8206e9ec798cf345768ec371cebd0ee4289d13a8ab8f03c23c2f056effa1feb3afbddaeafce39cfb627cdc07d6ef3e09cc9edbdd5743a6c0fa1d9802292a05ceffb69c02e5520a0556dc840e2b75adda2a10cf1fcebfecd3a35f8c6d56a35ae3014f4f4f9f3be7c0fab5ab915e3394524a29956ec31851232a068a3a5b501855a30a46e62a5a4c29a5941e02e568dd78c16464971e020d512af4390402c2586b20cb62e11dbac3604039e6cf746bad508e29b4cf84cd2a3c6997f06c11d66d87f4252fb8d2219006aad6b26618234b68ecd35fd5a749bb24cd25659d1396716cfa0d86de40bbc30f54a76e54dfced95a4287f837595fc012a49efcea4382a1beb2221f6f3d3e0563bed2bab432aa53599e330c4e79fd8a513a72c07209ea57f66b446bc4a75a7da4af70b6d618f3e4ece8a87a7ce52ced5f0fc8c2d831c63d607c16589f67476795a3f2940f511c10e5f68bf1a5be94a7507e511f58df4ebfa0d5c192364dfd5b6b7ebdf23c646117000a3a5553a84a5f7bfd6ac4a7a7a7a7183aaf58d1c8ce99921489acfaed3a97327fa094345e4a1f71e9f35624dfeb76c7b9e5c0f8db08af97e56fa5d179c2b40c2d343a7cbd601357697b3c3d3dd5ea8f9eb49614dbe6d487aae7c8018f1651084f3d6e3941597561892207a8c8817c28bfb9ab86f4cde50ea9affc557d967cedc890e7bca2dcf36c969dabdce22f06ca3b30945d8ec7e8a2f3158872da812bb7110365c3730fe7b9e5ecbd1d56af20eac60f199b7df711715e6528e77c058628ef3c070c517e5d0586b309a09c9b3d8a6873ea2f1ced140cbf4fc6c59f8dcdf1dde1cc46750fe59e9cdf0cec36365ff95d6d570dcf51ee39cac1f81c47b7ca5f377ec818f51cd7f96c6c9c537f3d1912230242ecd775529e0386aa1dcede48e2803294cbd7a0ec732eb5754014d8ed4c73e4404a15e8583b5285f290afbf08cc7ec0c9f29ba1bf18d52b51a5d1e8c78f483f96b4c78ef315c9a7df51149d68b43752bde7d428bf67e3038f77143de06774c1b9d1fd1d9d1b5d1b2178609106450f78195d7078c7d882db61f51b03571a43d56f0dba65f7bd034d980b29633e7d1f729633bf2b97da265f51eef456b565dffcd60faf534a294da241f7abf3c58d2faf53fe62dc2f460fa8fdae84288cc872b57c3c521800b81e009f9f0ca73b84fddde1066fddf3bc9ca5e7ece32f0fa5eeb9cbccb3655e8fe7f36ae0d7e367a36787f3a76bb0c379a50760871b2c016087b0303e3b742ead1db2b0b8f6f51859fbde0c660faf873a823c9f7e3345cd8ea40c7b8428379a325abd6dcbd27355f3a88df26447b9e761e7db0eabd3a37c3ad00fb865931186108d1bded7bb1dcb2c2d85f92d72f90dcb6f765b8010fdb11e2260873a82b60c6ebff27de7ed6a39ca3797503afca574dc7788a85f1b676407d765cea18fa33cac4ebff92adf95a3aeef70830fa393063b8405600360bbe6a6d35d3e1be51afcbe19d465738732d34b77c863b6ed5cd7b99ebafe5dc777bb7608f428efbc26bf02033e342be89a2e6946dbdf2d8b31771109dbcf1dce84fceb188b31bb252d46d9bcf41a6e3f6b443634e60b1a473889b0f882c6114f222cbeac09a0888e6c3e7e188f783a051036599e4e8005925a8cb6608a992d606850819616c418c083153438a8e9e264436c36c3932c9eccb0460d1555c4221721498e68938689095c62948512c41c09220c1b302fc4a80351181a0071c50e3f8809d2c64c8c2ee1344586232cac09824d8cfa108511634d700e5e9c5ebc447aa98f66d55a6badb5b2340b76c490239668ea822b0921212530160ab91851c510579088020a0bb8d10203123a7491418c161734a179c3848b6bcb567bc19a325fb8acb2fe58d382464b5385cd1ff9d2c2f4e1ab0a11516c4bbce0054d5964303b81124ec4e002251eae20d1f2820650c4a0c58a15f4304498153cb9bebcb40cd1a2240b16140cc18282129654f1d2f3036aa62e2456b5d231408c503b9034429642df2c4846fc50cb12c502b20b085d71162f5f3fd6b2247d587f3e9193ca2429a594725223f942c4bad1229ec01203a729342065310326375dae11487f537f99664b8ae8c1861780d801cb1697955a116abe001f6b469cf0f763cd881f2d109249bfb9c7ae47e729f7c01e5270743bd29fcd53de637e2e3baf8ea3f33abd736ee3c84ef791f4ec9fa35c0047f4d59afe6c1eeac9e338da79dc8fa4e0d891d23dc721dddb4752a4731b07cb53fb28e5ac7d83fe6c721f01519e8db38f86e8cfa681f691d39fcd773605b3a3c0af7ae7382ae747daab731b07f5bc8fe407ba3df791a45123475270489ffb88762405c774b98f3e9f3b04fab3b9ab80723cc6e2d2dc743cc6e4b6f218c33ae091941bab7d2463da713c07ece179e72ab087141cde964de8cfe69df7f0acde5c0042f4ee7124e58318b37e3dc6baddc37a8c8512e937f7640a8c7d79baac25d5b6bc17679ca827ae1bd73f88b1eb20c8987d6da9199ddb0e4e3488882135fcf6b1a6e405054a34a52b4a463e864c47f4eb4e3fb942f8f2f1d8741a12881cd0cffe81eeef1e21ba24ea46e89e1291e4e794e9a0511231a4ca112a9314dac73dada4515c535c3ab8a858170e4ab870108a2e1e8484b60dcb99ea002117121692ad8fb521929efb581bc2cd0a431819628c104b6faf9c79eb41d6bd94f4191fc4987497711f49b9213dbadc473226dd93df0d209b635705e806815680fae638e8f4213246f7d10f199bce6d20411e10a33e44c6a6e33a2b6a888240ac03d11feb52701c49d94752ae1f49c7211def23b97d4b0f75a44bd5871a9631b59a14ae15504921ca90d7144286135eae1caa6b87ef634d882e425c09c24b2d882c8f3fd682b8a23fd682a062012f4e4f1e21ada5d4523a6bad75ce3a279d35cf49b1dc407aa493d638abad71ce09c68f775222eab7f372a5b4465a6bacb5d6188be8db68a98c3df79e5eb70dcf85504a29a9d33331c618638c31c638b97871663a9ba6ec20946e548df06f6e54bf93219f5ecae7dca3149c17537c3bebf2eb7c61ade790da3a37979b755d2bebb4f23efdb693a86049371a7c58f27abed8bcbb77dbeeb66ddbddacd72cefb66d59be47b4651c3337a0b866dbdd2fec5c5633c735d19c4f9957415c6bad1b83f5573c1f2a6f202be5e91aceacd068cf8322d168b4dff68e1aedab1b755be64744d7d03e8c49b4af7b476e405d7e2bb901f52883df7c68e2aa135d50d7caa3abc841e774f30dd4ab1a5d4ede40170d3c4ffdc6e8e282f475563b1d387fd539751d4db39d4b76d7855d9e8bebdc65bb2bab77d5bf1a445b92931fd6bcfc6cccac18a13d8fd90f48b4efbc7e326815da5724dad75d44d7d0bedba82c37a0336859a1bc2a87ae72583dad917ae4aa7cf6aaefa6b1d69ad39dd6dad39fce1a85031566e06374e1b9275571ad5d57bbae7aeec98ef3bbe5a03b5f757bde7bafe5be18b7e643edb3d7f9a2de5aed47e4f9f43c7a2086417732cf55f51763eb7095de79055d1e67b1bb24fe0b161d7dcdd6731ef39e879d57afdb21eebcd67c58f3dee63670886e07937894522ce7101f864cfa476fe746411787b74b699d7b2271bde07a41cfe9438b70d0a5444f9f0ba88ea901e2919c493a83e2f4e4898f38ab1a01a027bc38b5f4587b92e55d78d1e30b169d92a04643119bc48739094da269f5b588262dbcf554f5cc797cd7f5e8ae459eba4e94d7f1cfa94f2b9fe33c4e7dd2e0e6c15086720572e07dd2c253cf6952e48531567ab606dd561ee23cfe66e818391bce630ff07820c779bcfbe40a74f5f0f339037ffe7d5f0d1dffbcbb1b28c371ea32d433b4db9c9c4d797688f39da37e85e3819755c7f9c07960e1862460e003114d6231fea47cbb2197a29e0243ee43eb385b070cb9ef3aeef19d9f04b80fb91921f81c72df85e0bb1d56afae7d887e3be4de6a504665d643f01e18da17a2fce6758729b7beb5f0d9b595cf7e5fc8f2db96e547b4f9e79e0ec8f20aeef807ca76fc8bd10587e317dc3e1bdbfd6454d7cea5bc0343eb5eca793ce53ceed9afc6607905b37fa0ecba2ce51ff68e73cf7e366828ab5e5de577bb585bc6ec51ee22d24979eaba0e9871cb79401d1ef07aaedee316bc5b96dd7ae5acaf7c887a33f35420c65ab347f98f1e0f12230264ac07c42c59f6f839a02cbb87b3855c35b2a73c7b6a6f598ec0ec071f1198d94f02b31f667cf5e87b705e411fcfcd9e723e6be7b9d17dce3d2ebbd1fda2ed637491ca3d8a3478ee87f77c3cee3608586fc49a3ddea1f5cdfa95b13910953a68ee63cdc9d2d38d256bea373517b230e182958fb5142c3d8c8fb5144079a0a0da0c507e7ef9397fa64bd7117d44c75a0a8cc090b17864ba8479f99a13353f692cccb985eb889659b2e039a9f97cac3989e204054e88bc3ed66428d3e2634d8616047dacc92064f5b116430c1cf0b116c30e31b010c39036a833790909d4951c725ca8c180a4874dab09d7c75a932b5289667dac3589d272a520b278767456392a1ebc18572fbcf831bcf8188698f424dccfd544538fb4bed3176d4f82ea4b79f423e1e6c8c10eb9f4246454e46087a47dd1035e3a8d263f222d7d92c1d6e3eb9934410195f76697da4fdba5c6a037a8944d96653d0b11d588040000006315000020100a87040281502c1c886aacfa14000b889c40684e1749434910c3308881188641c618628821c0186414293a51072aa40c1dca5a50b039151cc4983078ff5fc39716d159bffec924f2321b75cec055a678a63343b1155e29b28a0559d0edbd580eee8d709d829e5c652f7af5b041deb838b1d72bb4b74afe93367bbc771c3b09583e79f5828eb48af4abb1c81bf367723e692b52979a323245221ed3c301778a22a2f5cbaa9334aacff71181eba7936cdf9e5b4bb055c71006a96199102b5bceef3c6341e8cb0b0737e8193eab3c2e63cae9608a7c38c5c5701180609ff364de7038603d6a8cee25dd880ef4aef58461e6943f69df0f4450ec49a978ffc0d12268ef8cf8407cecb6cb198916a7ba589af03396ef3cac7023e1dc8c140abb4c1bb805c1e6b253c412fc2496bf8f8257d7f1a7e9e9e552e1d80fa50717fcb533f4eb1d5522b17fd111a97061fc4c9686c3f3846af9759a6bda40904ffc2c9b34a8895094acfea3ea5c2aebf3a7d18a2a20a344a87acaa3a6e9d9a2872877a4890cc692cd3e688e5196f4ab7d904664e78d2a4097670c56afd0989da07f63a7142b10f6520339e3e88ac476a081c2c16f100e7348da28bdbbe09b3bcce9b717a55b8be49b7a953e709f5c41c7a2fb8ce560212c74a635892c1277e7971b1f1e6c96621209771ceda8ffa24c8860a9a5601d21f8cc943f176385a024f17318566af0880ec4c90f84f0d2eedbffd69fcf520a3a0a008b9218b0bce16a8ac66b6b8561075e5ea68583845842d32cceef4a47b8eee55467562b525e99e661c0cbe4a8d61c3ddbfee40c07309fb8adcbd9eeea47f2837f36de43831751d950532a16cb6821a24ef217d3abdbd843e627a513d97a06e01e0485db54a8efec953790df2a36b0c34f33b6be29d0571fb477db0c9aa25879bff010c23912d95bdb3c495174872eea7be0cf650248d48bbab73cd753febc7f0d5eef07e61921cc480ea7266ce952ffa928d026a240cd79d82c3da4772634f9b7ea8f565fe2f81aa904f1b1ae85d0fac0f06821f740a36a0ee96112fbd53afe3524ab8cab601df5be6795a97300168bc6d2222088838eba561044579919745e9e6cba305c1cf6c2064ab9a622a803c3da454c36a01baaa52a8e9fed1faa349a83eb9ab9345138d6fa7e4a74f79a19a53e43ff36a67c8f120fbcea55fb906b5775486b67d8207c8104954fca78510fa275fe39f23976b5691e63a5f70f45668402560203b93e51b80ba492d47d9f23cf87439c7df382853425e64184c439035a2a83e5652b1c77c7d936fb35816709b40bb300f770c83c323c3344487941d0e67ffd1c79919d9aebe8fdb9d8f42f7aafe046cd331318dc0e031fbea1f307edecf7b399816b22f6a3ca310a841f8579afef0a653f23245445d6bcda2165c82b0026ed10e86f35cb14a77fc16426b0423a5b3bbff1f0322fac09f270028c1472ba7ff6fec610f7c4cd151402e432b4ba385013f05a81454da9d29a80318192e1886c1a6e088ce04e5a59fd905d8f97d8103c65f4289c1fa064f5bef4f12d1ae50e4c32a12e8702fae591e137e658c73d6e7a4208f087bbac2a87ca8fd927004e208df032eac9cb001e54c519a490348f197b4fecb27a4a2ed1bc9ac43ab91b013a2ff63bc11a301003d5b8d8cb23f54ad56b197233239ba00bbc84b7d88598b12cd8e8d704b2a372993bc00fcc11085be69a01178cd308501e5c4092f68b4c6d20101931d828f0d42aed0d8938b5cd3edd6dc94150b554358e429d36001c30a4270d256c680c872d95d559625ff8f9eb7e322f1398e0ab4cf7bc86e7fa8d62b0716876018f80cb87f058b7694a3a39d4834fd3d97b0c27dabbb9ed75e2fd6e68ad40689640f64f374733acdf3a641abb9b027b784e2fdbea026ff4b2707fcde1fd849c49a0864c026183c78898a1efbb306efe90640063f92220bbad95f5cea77038cc0b0e1161dc8403ab156cda629a2cbf76f1a7d7c940f4ce14d5763bb1be2d8ab1596912c6fb3eb8d58fe8349a30ebd1906e6654fb5c35a427d3ed632c08828b0985689564779b01f040ef324d654182808a5e0d4bc6bf6e22a0c4e467c9bf9b2376d1c73d527cbfdb0503dcb3cc5d5b3e17511143a85d16bd3ef659dbd652ce1b4462bb8d3142b503f93088b3525ca4ed093767260c9c70675a534f664850943eb2bbece5ba54b8801d7efb9f9106017a3cb472117b403d6b4b88a16313be153545fe5001bdeac1416519eee87c81101bf2e2d57d26ab5bbd0673500a378f02d4249cf459c0934afabaa8a6450ed27ebfe4c12ca7657b19bd54e385baa126decb60b9bd3fa0114172dd08f071cf374c3272518f13874cf7c82329fc9657a5e8b514c4f11dfa201b215f1ad402f37e150deb6264a81cb1f06d99fd7957496617fb3b1c854c8cee828e000507f0f67cd1d16fe222bcc531b136ed4f588b798e9af0707f31ef8b9b3402a955419c7e20699387b9c55c50198f929ea14781c038a5f7c396e51e82641aa681b40edace0c5da21ba9a08bbdfa53c74d5c6381bd510b199d5b457c8810c41a814c93a16873a0822404c303601d275877dbd83dcf6ec53205e088713825a25ca6e23de70ce15f9299b6f76cec27a58fe960d23c62e0839895c79baccbd2726d7d5eaef457673ca840a3d3f3eb73d301ec3a216b15796f0f4da165cdcc6876b830c310fe54907c592e647566402db7d2d02683646cf781bdfd49108d48cbc2f11d587204671cc6b97326966777b8cf02f98b753405778cabf5f29d8aac705342ed421c8ecdc2e5ae8c531dbdb7f2e8149a90e3c2d243b3f1c89c29fb156e5edfab1a0555045191b06b8d09204e0975ab4d4b0825c97abf344c8f8d0ba592966be122678f147a04665077502646c2eefc934d8a25fdc18dd1c0d6a6d6644a89d5e05760cc78486c310242d71d129fa7240bf829803094dddf51115b56e967c8a9e04b4c58376d68245410c226c220508efd84b36ce4d12d89a7f537edfc42541fab4c30c848d02fe03fe8b274ba763c655c01988c4f8c8489333bed9c6cf0e9adb11ba9b8b7322d265241ec281c149bf006036c12e4e70b4e9af89169c9478df4bb86b42365efe74838fcaa0045936a60b41d263da1f22c152c8c3419817072a4cca6d77198e1ccb8391b37e763e06cac1c1d277038dee54da05ccb332e92c8dbc0900dd8491470ff035b0a2f3d0562201851829426b84e4ee12e9567bb238f26a3007193c629f83b2e3ce032ccedc106273da2d681e1af63cd8a5f27985da2a2a21d99154433153310053528e816cad37de68c6df23b06cddfa5e913e1c6bfda9830f11c0c661c576541c6cbfdf234913be05fbe8c8537ee9bc933e40b2751ef0e1ff57f8718ced07db638356c580520d063dac26b7e616d33efa8605baa771aa9689a47a9cb2e31a2d345b598251f638d5051926b325502491d6afd519d0c4051016b4db4bf41f39878987ba1d8c263a487703de499f7eb9df554126777987120c234d086bc6ec03006014bb46f296925588b308d6021ca287feef770970448e2528c0d1697e746383c4a99d1d595318290e4680590144a39fc89d20a75e44467d1242b3b7720772ac937a7fdde74648f9ed6d4fccaede679a0087098c6d089682646dc45a6b106c5fc3fa908c91a672b248f3401ac06478ece07f3cd439b9641eabd4f8cdf7db23b071b286d46e260d73fda609159c390ea030ce39e63eeb7263d0cfabcd58786edf010f3cc88305389dc0e3d9851682d1e31483c6a422ea2acd5885e143fdcc4d37d5c181ac67c94290f42e4954ef9ceb19cbec18578d2a0380e37c0ba67922134a0bd299ec9e7cf0958082e798a4f72a74839bdb6929429b3e2e446fdf24d0cef49fa6aa1afdaec6a318165c8b5bc5de2a8ecae6b0104be9dac24abc937aad9bc34048945bc5b4114162932e0097d462fe28e0ad790681b3f542b4537eaebe952d8eb8251c7ec3859bcc5c19e3b1e947e81b67c9c89a2af36736b98ca11d9c851445afda5c6707694449861fb90d8607c142a2c5f0259844dfd2f9b334937778465f753929a8b96b0bcde39cfedef72aa1e43ab6d06174a3c02da29109248b53a0880842f4d05ff43b9e4342105ce5cecd74d4a3de2f2aa9b3cba085c04a60e4f07adcea6fc7ad521ab2103f52229a03fa64baa1bcf49fab1064d0ddbbdae5af250e5c1a0fe84116417224af77430bb866ead24fb773a546c4e76aae7acc0a503a08c8b4bba01f5f7da2ce0383895de9d29b4022f6a91ca791419f190ce8c3d8eb254d389bf8291c9ada01f3b60c7f9e0be3afe746d890ccd9351a80c18d683b00ce7f2b9f41ca9ebf0a3168a4585c101fe1cc91e131e68e64057c33f1ffc24d4c1e5c6b7a2847a82fb30f57b95dd759345f0a0314abe0938a044ec67f18762d0caf179d277ed88616acd4608269abe992452f35f04e29fcede6e731707f1d9fd7eddb9092fc5bc294145b33667627d5713f7c8b9f47445b45ddcba04b16181df666e83b66e8641cb5db392a3ea9ccfcc96ff06c38ebfdfb3e249af1233538dee08c761f498cc4a64f75371c78329304357857f10bcb5d58ad22217df30bb4f299377de99d8e015db7660bf6799eb70facc173b00a2e32ebd1406da11cdd8d6e35ea429b51ea3af2e8f9ec861e9e3b633f2d284f561eaa1ada939332fb47c271407595773fd8ec7db50bf71696362a323e13d50f1f142530972b3f1b9167f3155ef900bc3c9377aaaa641c00f28bc47e4437ed17104f623842037431f78c52a4c27137b0fa29599d67a17143d230f8a62d9cb8a20f68ae552d11cbe3da98ebc756fb0bbdb1c1b5848454b8a4db7b05404cec4a0dca4e46bf1431fd8b883dce8e96f225fc66254d4288066ce90ba40ae7fca8d4629013d18142522df4d57386af1c7511870a8234c7b0cffd156c0fac517ee240c853ad2fb365de22003f331f5430e47601093e6161a246b06ac49f002b9eca4dccd18a12a0dc74373ccc7b21260cca39010806f35fa595fe70be40c87fa52c48885de0ba830c1e27f5e480b02a2d55bc5100e5bfe1c59dd14a738ca03a637090fe143d3f64d2f20fc13d5f8cf4ba3a12ae4554bd04e2e6cf28ed6cc7e49a7f03c7e1814cd539081b2380e14f27f9e36bb3985bd9730eba88c1c4821bf46c960ba03f81f918a73cbd9827ebdf641a377af1cf0c5a502ea91973745d7a7db6aed9321c636a883d77f9cee3d213e81d96cdea873a4f2ecd2afc12f85644d9e6d33b4c84261c1dc6e794c3cae4a4dd28e1ccf5956b4ddb5ce63dbce880fe16ad4ad2515f4df5802b16b887b9dcfc2b67885d6e74ac253300fb65bf5d30a2d620cefad72ff6020544a0a785b2097c518fa7a0873d66eda732f94ae37bf9fd25dac39afbd990c039e752a634d42efca0bdd4439af7dbea004420260f09432f67710d10baf53590e2a38cba9ed9ef4b42e6b377f48dd937b298bc49d15157aff09b11a7d760f299dc051535bd2c541d18b77b1c4a3414d4f38d6f42440a6cb6b753d49f0cc056c684f1299049290bb142b9b717013b2b27db8a8bb9efa3f98417cd950629b70a50fb5389e19a15af36e2c5c476d221a20331ab799af69bba44c65c970e4f3f1b209033ccdadef3ea665bb304c702c4594a6023cdd9b22908c3a6871188c3580a529d5a36f0040da2209e43b7b18257a059a88d28e02604561d03e57fbbc2555067a6a32304f6e2a8d47a051c4b1e2c2e20814df622d0ef695e298f6ec57ced736409c301dfa5a5547efb80dad203c866fa186cb0a9d5da9152f5b50453be609746f621b2e31b7b5d8f200fef4cb27337792e057db51d85d0a83aa55f3b94e7e01aef84f620602df280ebd04da979ce2302a51f65ab5816fe5afe127a91a6c0385489ca1d493ebff843d95808a31f0f56547797e9146d4850f08b3e1d914f56fce95fc8841d168fd46c6f45b46f67a6e32d823d51725518a85f14884dcbedec4ebfc6c4bce54f0cec2e5a0d0553bc59baab02ce42b1bf1cbb93c65164f24ee25d5a0b8589729432f1016517013e8487539795c3aa9fee0e1c955386fc850d7f661c181636cd3f0e84a38a6de5eaa89f5188107c807f93535532d334ad029f5c6d7dd560e4e8162eee37b0cf7789da48e1096cfce3633b854cbc9791ef6cc3379af2c8a666423019c358feccfe70b5b316bfee1c25c44ebb84ee8864b2e3e80239599e09dd5e68c10768c9bcb5aa10c9d0b4c4dabe6182b33dd20daca5453d1fb0cb2956fc0c823b1e8e97b8bddc715c9c50ccdb124793eed870c2956cdec49da228d92bba51d01ce8c784b09e7647948fe74a4f4f818e6b007f14dc8edc3047c24045f09c567c2e523a1f94f08be12acbd3221f0bb2e8c1fed468883b3ae56ea2f21b90be9884467801f1995c633b9e8b6620c838bce79bca05199e645ee1d13cd4fe07f31a6e1527437b103c0d91fe75c1a528afe649a84016950b95636a20b4866fa089c1669bafb7fc40c65d5aaf1e114e0ec22ab5907eae3f5431d07d42880f76b505499474227094410d5b78a4151e50afa4e3c6b9d9320f6339fc8073da9719231c350bcf458c1ca5207c5c09e42cde2907aff7de08017aebc3bd7400d43b15c1a0f2b91ee4f1ab5664dd85326d30f3990864f52221569fe9e61555a58f6e6132f45e2f826832b4d0d5b3a1ab0b4fd5d28a71fcb62f64ac1fa6440018f114102b690754c2601acc67c991983f56cbf4af7ab8b3d13aabc5c7394c59180e9f575e131c838dcc6a3812dddcc3bc20883f589a7a22331787918781f30a7e9095888eeb6e747b061f649ee4b352c02d27fd9813d54bf9da69d70933f53c6c633adc1b401d8c2cda015462e4a4c03450ec4e160b10f9f543443efa756b5185129de833ccf909df541983e38e1bea44a64a340fc049c536e1fe74877611a95d9b2aea877120ea38c16c6f004cb4a179de39d43ceee9a4c7e86aebbd88b589758cb8bcd1529710f7d0019038c5d4c5d4c837e081fcb68d8e84393dc1aa0c0d7e923c80e27e7fcafc1c91e1de88dabe66f54ba16d46854b96b978fa9deb80a54c05ff99e69dac03d1b5729d50630c570670b8416641d0b901674e8a81e50daf3b3c1481bd53ad64ff5be2ee78f29e1d0af9cc8299a1632a18caa77877453ab18474078762d11a2668f8f2d29a2b620f9615a692c280b3c2f1dfc1892f001f2a4476df58da99a4b1b867ed1b128964bb8f771c7f48fd7b8149995f54167d9f2737a42b1bb65a0aa87097eecd6624384b582f52a02932e51bef4e12719cb79b5f74838e808123279e7c64e141ba869d42828d0109b256229981166e4ad240438bfa874c87fd860939e8ab5b4bef4d629cd97d6c9ec2ade1d955e0d4a6acd9d80203c58d3920fe67eea34e7dd3e24140067caaba671e08c8806cd21aff887fb40c45265f1ddb9ab45b80f519358fcc6d98b5388a50a01bae1903187bd38cee15c5f6cdec7422c741f0371b0a946b81e247229c60de41090eb97c645e0df4d902860910287a967dc08d9771cba525628d5b18d35b6a1dd5e90414acf836a6850e935435ac41fe74b61dad358cfef64965fed422a30db26b632d450128800f03c82a9c91d0f4a6546967440a0b3a7bd7bd8c59ee4f95037cde34261a19ab1c41f32d756ea4339df25c83ea28ac9e2e8ab3399c5721924b3653401cff86dbbecdf733f8471039749eac320cca95c233e3bd97ad47054bae8398169a828136672998c0c1e7778ee3814154c8c9fc354dbd039477d0902003a43fa213e4141cb9e4c683bc8e6c63cd10db2a90b41792529b00a623075e2a8eb7158a9b2087cbfde0dbea8c02fc0178761041ae210e665b7a8133a3db84af478004bd6e59026c1558369e5b5bb0bcbb047d8f80b99e8e1ba1cb6fccece48d2d509889ffe880740a332400b682a6494390813bda5129cf51ea0126be239be0c1408c1212fad4e630794dd9e0bd3fff5023e186d93ba2e40efd864295309a5fa67dadbb6d85030a9f54b21a0847abc423dfd48382b2c268d0ca0c45cc181d2408ca0f144ff5150e0302de58ea38b4be0a08a6e893ef1759e12d88dc37cbc2db9b215e4cf955f65a27a50bd39ce276d3a0ad02210f85ead13fe7ee9ccffc14a74849671c8a6a8f7b7319e7ab43204cba7e237f5fd8953dc28bb7354bbc0b17bb2f77dd7aa8e891434dc49991612d173166ac1611146b737d7d76bc25d26734203a4d4fd96b94d12840a3fde6a656793ccd2f4dd37eea67adf20fec413b4f7bc05c4d5824d42bb7bdcbd2de6239f5c993c53ccbad2836cad0a3828d9de57951b8af95202694c4b92f697e048390917d57fca837d7435be52995ef8ee2b785ca68ec2f831851235f293ea631cecbef304473699ed74a776f3d5f825f56efde3ea8e5d5c2d9d2b7ba388a202eb521a104445d5156e646ef90f8cdbb1ded4b51328bd5475b3764bee257f2a99d9db6a70b58747e7cea065ad732ca97e229dcbb4f2e2ed037779dfbc3f124a663f4c8448db38980ba33c2d5a280c279f944e560219b47515b1ea01c103220699478c157ce6c901a5697ea669e12994787c8975e81da7141a064f5523c844574ec36200e6b073adb31106c442416dd040930f42d10189404ce782cf085c1dbc0fcceea34e18a71566445e6df78cb4858c3f8a8a17f68336473b3389b7f35165f4f7c9ba12c398550eb7902976420b776c7953c38c01689f42b5447e071f5e725a911d59a04c92212ee93076384ac65472ae0294fdb5c216d1d735da721a77e20af165f381cfc08261e35a2cdf8862a4c60e2f3e020d418ae0de916f9c5ba9218d8b962dda043ea776a7da230e489973f94050154ca0039f658b2d5aa35c6e5e1bfc64a59920b86ff206c479c926708fec06e8869d44f19bf8729d46d0cd849b6afc843e9d0a82832448c091f3479bcfcde73b5358da00a65c911223a5f21a613be100adec8d3a703487a8c739a6a9376a32ce7f08b4f2f50eb757d40615c9c236c6c929ff01b7d245e4ee29527cfd71b2370d3632998d5c56ac9bf43a818819c12ca6206b154b4c2310ebf97be9a5c806118c520875d974630bb117667e4149022c00193c3411925350ea79b3ade070752e67e3f8044df6033d3bc736d20956783a12c6f9b466aad39d93f1d60f9d65a0c93f6cfe738ea18933a32e1bfe316b3167f7aec0e020bc7ff84702f2e9251e43fadf9c3e8949af26477ebb4966af1c08a106999d280bd7cd8d6260ca0f40494a97ce5da26576a90361fdffc4d1e514c80100816a3fe628205945c140eefef5a72158969068159dda5c239c498740e29c5f7cb742759f2157a9874f2994fe7610bf9555f30caef714312304f922cf2ec6b9aec5ea52ec8545146a0d4b271f0949816e623f4841542f2305c2a882a8f33933b8c8d24062bd32a50cfdff3f365bfa46e1eb37cc20197b9d14ee1c3cc992af868566444908400769a555e1cd3330bc8920153e53b756533736606a555402b5bfaf91364da3991f8ce38432f750e80adb0fa196f4a550be6a4e6b4b38d2830cee5da463d18e0c0cfb4f8880f763481baafa6dc18eadb5124c3cb5d0ced13b334e57c6111c2caf2bdbb82a9baa96387047fd8edbe45081e2024eb8e554ed78e00a363eb6f18d9d84a352f9264f0c34de7b1ba7fcd77ac5d7ae631cd33b8c646123b899ea76c4481e56bf3d4ab475811ca875543fac082989b7744b17240edbdfc33071faa892eed06aa8851d1780ba258452deafce6c8d79c6d54f8661653fcab5987d9e256248211bad1f197a838074bb8b35b1ca58e7c92a14c8659e1e1b345de833e210773bcecf7526bdb6cdfc73454c07aeb0b840aa36f4885c2db9ccd6b84a15899053e594f26397ac37e881902e1b2df8c72e5dbbc7d520c852e9c955099ed5edd8115778c6c68ae6764cc36db728aafe7dbe5a1e141dbd15040431e81d4808121998389650f298f1dc3c8140c9cf404c0c0ce2bb04da20702105990bb9d3ed5de24500a3a056b707336fc3b81baa13fe80c8e8b0d0933910c61ac9ab9d80121f9ffd1dd79d11580cc5e3e83e42b16b102389424ce511c6e183cb1b1f395e5a87cf5b72971b7357cda41e54184f586722f557145875fcecf2d298ba9c90a48591fd0e31a15e10d22e9a355801a386a088c05cf506c8ef11a5a8d589a8ed33d85f560d502d71a002cdfe70336342de3da07c88d70d99262426bb740969158352c30c730fb5e66047672fc238540a5527e73c90e2ee1e224fb892205b81c5c6ce41cfcead9e3366f85c675e075e1cd2038219644a7a26384960c91b5032ac1883806462c1f817f9c83df0299e430d6099fa22233c2e9f983992ae9508854bd7254ee02af6d2ec01fbeeb5111ddbe5c6db5053aace73cbeeb1c4d81239596d574f98b47da94a3c01d65a678468fc3d9df37eb01a4bf259c37dff92c3a835bb237a9eca6be492147111beba4c127590bdde3c878103bd55eada1bd960478d22068f2ff9ae5915a278c14445a9828821f2995da61f58bd82f8b6268f68882d3f86402305d745a50e487324be97c4f0f24cce24a6b47cbb31bfdbd638e5ccf021ba59d648c9fd8627f3635df8899788f04af55702093a8d8b27fa6ff272c023711e676e053711eccc053f6cec04b13e5de85bcb533f91db07352a90a1ad9007ec6a2ecd726a03777b38586d56665a003a6a400cc5b17a56df9998406b5933ea023d6dd442c069a4f05904b2acb042fa03313c1494edcec33a7db69d605518d821dd85cd6a4a5c043d72ab8712937bf16bde9085ce142e491b807920a5b93f5e85a683db74306f84cd4e52e8750164afd22516a50f9b7c7ea2518e4ec0647b5b182c2aabdd8448f8d03be1b7fde90e0ca3d0969e8f29b418b180eb2af2384934b09fca51efbcbc0e923c776fca0cbdbf9911a5ea5479823afda0bcaa50e7bb8237cfb970dd59b344806968c3907445a15d3920108f2be407aec850749418da3a74b9440b2f80aa5bba37b7660f3bc6a9a237977824169636987fa06c5bde94466e8835868ec1a485c4aa01d8eb4897a11e2526b00b94ce098abab0c94276ee3a3495032d0de5bd2625d26a4525bdad0955672a6e537f804764c1ad5291906d59869b667b9ae901f4ae59b075abeaabd271e165fc395df2635ba089700d0d0fc9653155e1fbccdb40c80037197260d806dcf470cd86f2cc48b414eadab64d452cad3751905c685e161c48e815b5a8e2d0ab496d02f72652e24fd47405bbb24e0186a91a4187cdd6d9d167a7ddf3b1e0591c037dc26000753150a1b8660632f6f46da6eff313cc6e56f30248da6b3922e642c66d5a891e193a15e901416284209b7124f1fc5c7ce09a07174c38fc8cd0c6c61d64ed9b93f984f963348e27e020e58ecc4619ed4f0ad8913dede0f7f89bf6cfb11ca5cac6dfe8caabce708133f7c485959d6bf83f9ed0421f3112b7c8cdddcfc4b7d6a7e84c32a62dff312e7533093dfde566c247c9a553068b5d5003a817040f73d56dc3eb59733ddf1c23ef7ec9a5372e1e405cd42d4e58ba9c57d96f5cf90509102cfb6ae2e132b9ae715938c41a4853b0f3debbe6d39cd2a64d35b2048d98ef47dd6561b4260fa00126f3590ff77ea40bac70a3fcfac24b89471e8e9d8d3f1ff663deef6e082f933b40cabbd435818f98997f14eeff848610d79bebd0c1e6317395fdc9f773da50cb0a1b1b2a1236ec52cf75499df212353c1eea558504e44b3d823c242b1f88fff4acf1cbf84d093494f7d0658a9eb4f9125737aca6465bb9ddcd50da91337c513bcf84b43c50c6464aec80e0f23dbabe4bdfd62e5328ae3c7e5be2015e4b55422e8dbcc96f2f701899318471e8202f82756d2d644fcc4293e4de58ae221d1998ab0cc17f899d236e5cb6bf88e39730a3633b0f31390854d94629ee7a56f484515882a6c945ae41c10f537e659dd1584edf22247d235b04759de052986ac7544862419ff29d1f2dbe738d486ac35a37728b98c42f85d2c205e37349221ba1592e083651af6afe3aecb9752f4491ab4de9a9f55a68eb99f343cff94ba24908b0203be07e621b33945f3767da25dfbdb388e5bb07fdc9dac290e0e71e0db333846e03d28edbda81299d8160a07741e4e5083fd6d46377ea8144ae07841f35839c63e6e22e3d0501b61c66a3e75aa28e59182d7cdfa942e83e0c283b62c441b3054c6b8d5d6b071152c1d6a2896ad61637568e79351a2bbb04f17c9048adc8ead239f7cb2691b3fa7791eab97f009747eb02c116cabec026eda7eec7177c4fc92f4ca8d8a81e4667e88073f3f90c6a0a17a16d885d32c2da3a8898f885a5b7212835e5a1e6d8aee5cc932faa05446cca4c3f3c15e132dd00bfb30fe2b597f63ef12a3eb5e23f482fe248160228e1d3167f4717d62a88a4d594c227eebd66c2da57b08150fef8916df0a2ce46c7d8bd36f8af24abf17f26599df49a0a56fe438ec1098fe5c5e6007f105c176a622f4450703121a5e75c2fc9a316db4b29b2d5db4d4dd4b35f3d0aade3b52c5b7f7e9ae40c3db8ebf2e287008d5e29bab7d5fd674288ae82cba4349cf4f46f62aca11b9500f92b2970ec8a46f3c01643b405caafd16cd112519528b07e3dfa77e09ac7857cc0ad93783785bf0ad7f1f7a097849ff7dee9f9f48602e15ee616a965abdeda605c5a3604c9a93435a353c0c6543c973998aa9b00e3f0d4b9f3b4404417914c7ccc616dea00c6fbc2606821cd3bbf9e97a9e1e11a3d6cbaa52811b6d841b24eea73161e8d94a8049016941bf8b05a6f4d53b8564b98c58836ed916d6ff197c31cef95ff42261707d2cde8ceaa0bfff896ef931bf0412fe320435dabe0ef1248ab83bbe22c32b84e7d5ad9ee78e07512ef04acf73a7c1192716b72e1797eb8ac39830db21856f634980d2797270eedd7a40bd122ba0d14dbeca30d098bc7811531070c3af5a9d6cfdff8a38803281fdd24270a87ea4161faffc8386379af177730e82466bdf2c54f4ef6aa2ff75fc83de22a51a7ea317c9b0085a8ff9ea816de5db4fcfa5be96af6b8156a101db604becc721941ec2640bdef7dd0be15af155fcba84f7c85c0671f03bc27e938636db2e2136506a0aae86dd18619c4d4c9fb97266722ce26aea314e22d0d39459a2d978d53faca6f491359d2ec1c6288ce0c5fad0cf276e64011bf37c01b5dc12d37c671af5ce3db2bda071448e31ce87307e793f641bc2e179cf70d8c4d9d76181e47166072c76772ebd36a6ae834c2ade7b5e38fa9e7d2155c68e476c69aeedd8344c171a0202dc5caea74d3470fc33198fc01ca0159445a643a0d0c41876ff350c806bc0e060ecc64d2ec807d434a1f30c45f9bf30f842ee84eca1c4e3fd7e891d0522bcf4f76160c3ee76346873e8db307e74f1158599c87f257f63cda373cb8cb3a0cd235ac09d574e6d96067b8ef8554ea099e29491e158214c3fb36cdcfb3f760f97d426c6e2f08cfc8bbf482731c0588c20c068c7e061ec2deb3dcc31bf0428e63c8d75059cd270a4b70a8a4ac1870d997ff0aac90905304753b01c96473c3512aa5ba3309761eb3c8d35ad18731bb7c8d39fb5289146a44f85cc960cfd8818bdce08239d4d2a9530d70d2359337707ee475ea610af644080a0f3b247150a401a2166fc09886d927be04e680f5c1626e22c2b3c480e30ae49faccb40ebefdd646b5a1d374b553d2170155ff133b4b22a2003d96ca7b4e61dab508c4ab13c22bf9e604602b08f17c44b8ed3bf23b5650e0325a8541c6c3a05478b63d5dc7671221e360f8cc9258502345c47c4965d19ea7dd1f376795297e56e6c2c9df3d42eff7b127e85851740c87c40370dc9cb11100e230f7418b1452d877d93b485a4af94756118dd0fcf378ec2836848c1d9e32ff73f603e33c2ea48353506f3685ab5cb7bce8e40085e0bd6df09cc8bb31ffd1b27651b4e49864fcb751fbc923cd14db3f9229e1e48042827be0df7d4446592e9d74fa80207a31d7084afb561d489dd2d2644ea3748931b2c32e2abb06fbfe59803918ef3f432b79daa5538bbb512944bd8b50b85ebe50af63bc342b6e6914117fb6f2a99a4d731d5bac35f0dfbfd91e5d8ed12cf8ddbf153c6e2c05af30e4169071f42caed845b0c6aeedc6f3b63b75a18df6eab014bcb590bc40acb39771d44756d26027b129a4398cdd1c0663f1fc819e1178ea38516222734ae2f0b557c3f060cab04a238d3653edebe42f192337b9fa9bf85dff25ab36b44f88d33aa676c4076769cfcce6e44b768644421745c29b30d7a0532cf0957ff9fcd0a24c93eb8894272c6ade09e3a1a88c594f23289ef0c2699c6c29c281410c66df4ce0fa510889c5b6b6640543b2439772dd9a451ed87947f10a1998f4ddffda1c02a37a89ff65182dda332e4c23ae5f010a930a6aa1c297b43919e4f48522de6b01f8dcefc17947fe31d4a4fa3d19c294ac986e39d958e1577c73b8ae2e44ca124057700fd101e2b41c94bcb440141d247521d161f2e34bb335311d2031ea9831f025b17158b05229714ed8b2c38a1cd908e519d860e22b0820226288f617c2a03fda10b3e9f4e620598c03a6a69c2a28c7165c89d8a7ee1a8d753b50390f0944c905988b843f22f5b57a359f3c01d1032d3133f2d0c3edb312771429c13da96d84b56fb4f8841f207bb86f8e49d7b206972b44ef4f3d2cc31fb090d84e3b8fb8fb8a75ad78a7bcf3c24c4cd293a68f29e860b70d0e4449bcfe4e4544050c09e1cf77cc9d12ce59bdcd879216269ef6d9fc959a7cd0cdc999c44d9486500e1c56672e8473167f8183339c9f5196f7ea2ba2c93834a9fc08585c6647262ad3c500c90c939c2cdb60bf18fc9b15e2549ecc631477b7d9228c5ad3239d9d825138a5464e7bbe70cc2c1619bd1dc6f39e11d04741ea49d4b66c6f5014c0e84a77d41b931258cb2f1029fdf4b4e72b256600ebce414803a34eb5a84c1fa40b3a577d773d92587a996eab4339393135757591bb99d30073354677db444ed25c0b1e42c73d524cd92138928cb186af8623b969c7f51e70512377d4a8e09dd298b98494b961c48971882f3f36140bae4c82c1d6de792b3924cf752dd628231979c89e9f1e0b4e605af20fbe74c4e6e2667d26c40b544e2280d045581b4a4595c794a12e0925390a9ec7d9c3c079a56bcdde1d8507e386ec9a9d39beaa5e7a1cb9ae37ee23c1cbfef92d3bc8ec328502a255ab25928087125a7c05ee8c9f6b9c47451a313e9bf8934397ae22c3b912c3e366a3a654a0ec2c0ca5a36aff3d62739b6a92889a8cf808d069b991c5ba3fd126e0974f524471b60bf28da70c971fb664dc52d1ec999e21a135b30920ebd44ed6f9fa82a6a941c5419b274a2e4f07c6802dec49a9fe404e6c406f50dbe5906f66ad13e6c54f25ce4454af27d80c9d3cc455510e062e233a2240248bf90a6409a84fb18e1068c0202f61a665488931cf045db2ffed77280ddc7d88aef462fa88f451d9b8ac0c50b0400a3e55a49fbd39096c853c7fa040414b08dfae4182b482ad95b534f6dcb1df0e0d80830071d0a70470fc8ed009fbb4c1beb222b3de2ab80365fd460a51ed1c878501dec8259dd30421d2cbaf290039e94088848072f1a8889a35ab01f3b3781219f948e0bb01a7b1ea6ce587daf90f70dcb655b2be7f1513113720ac288932c34aadc4035f9122aef504c8043c2b687a5af12ddecdd4bfe382f759f8e4aef600bb1ccf037e44c50366b0880c0d7db02898942e53f4c4112ec9fb0e6741ba567430bd84fd904d65652bc04959713c165b54c972ddf883aa7427cd0115d4c67f965d03d94fa5e5184c35b9260bbc1528dd796fc7cfce36481534de476aa7ba4c1d7b5675ef105aeb44a8b40adf588a03f4588f5531435e5a6948946b38dab0e30cfd7c5e1b5be4d000894c1898337b0374155aa8b768084d46c9d976ad90b64b89054b6d87e5c850de508f61e552be8d21a014900a886df04d2d85416e0b1f9112a5cd576716c70fff113456b31b3b35e8182cd0c0505624a267bfc4c8de3fff43c2daced626666d89428278669004e7c9eb6a8bc794a5a2cab70955c022181360e32f2546a1167d19480b92ac2214cfa4c31cd57d000e5072d586472c332495c9aa44c9f6988f5e4abbaa1a65c897e98f9883091224fc83c8e168aeda4a7be2103fd2e38510cdd51019c9fae0918017a00aae81187d83ffe21dbc6b538d747980021f130d6f9281f686d162248b347af3955c08704309f8e039f1dbfa9a756dbe885a80e8fae93fd6e741a3c34fe10e20d9b0a066ad88772828e37dc45b6cc08853dba483f47f2c658ddaf1096aabdd0cea544f0510aca3a485fdb92901cb5ef9b19268412d0606455051063120beb1dc0b326819d20e36832b6e64d902d22d191a14c8b85db92f832a3b0d495e58dfa480a0f6400f4be12fbebe1de911dd0b2b685f5a352f9e2324bd8d1e0aebf7f6bd6e0b7a98ca737754078f1aba9ff1e89d8a0b7034695a4865b4c5ef541eb209a199b8f61a87cd1f439f0f6e6b65df7ab5ed0dc3890a73c863fa421c956346a6b6d3ace2b1f26195a824a58054d03ef3b343141fb4184aa553e5d2ba348e45bbeb41b5e50fac097f6a91d1a7f54226d25208230f9d1045e1a2c586e31ebba0e418087f022d78826bd6c5e2a2e9066326504d3aa4bb6eb0ef2fcd99ab2d654df6f9f9170bf6d8db78f7082f6de8db376790394e388ae99894ef44bc8a91253cbe8849d125b21031cb49a66c483009c2cd390b0712a808273e0e4ff6d7d1b54688cd44b9d8cf25b70aabdd66732ac824d1c0dd19b978011268ae81df6cf61cf33a203f49e7fcee4a369d093a0bdcf754114c4d698fb89a4e91303747e29b87caa82be591fa714774a0d65897773462473027a3d80c4bd905d70cd385908cfd90068cdc0df626c5a67fd3852e7f5b681f6d385f1c0bfdb1cce00ccd23d19d906c0640b8cf7b1620df877310a64c272502c828907e860ebceee91d8a243c77d5b146ba3f311ff623d9074ecc58c85e2c148c944efc8105929b65cf4d4704d8dab270bbaa2b2174caae63a6aadaeca52ac00e7e890c010680e5f07c7028cc1ca31ca46fca6224e9cb8705a86a1580c2dc375f602564f65886599b41c04dfe778835c94ece8e74f77204da8a88383ed9f82e0383e1a04e13059874c15d316935cdd4021b82472d07c2684ba789f80a53d8c76d9a966765270591e629e0939998d11efc9d31700192691126634fb1039d42ffa921cbdcbd2cd094cbd95a4faf80b08b8c72c59d7ff845ff2094c52beef012137a1abcc4f7460355bd5ab253998850979c73e360b41b2401392beb4eac27e6355501a3537dd64423f55eeaaab7f665498e6af150b346770ef517e143b57d2be27d49fc26a8660c1708b93114368435403f0e8550525975ccf2e1a2bd3444e35bfc1c2f58f920b626fc582d9339516104e50c73156330968f13729d62760e8416a57d5063535627389e522cdcc21b0863ac4bc34d55b88fc008b4f5ad56b159e8664730cf9bef95acf8a93dcff2c450544ad97f246c8b1147a9c42d5d456b833613839807b20d7d6e7a707d808e990e5e9a0014728e5064c0e3b45af76f6283a7fe797842cda971403b7498a1c7fa21effff9dc7ed39bdecece19bd88b8e38d714d7ab5542d1f311252351f6c7f9b43c5f0968b13b1779fdc48cc53b6ee9684cfa12340d36c1ec0451e3f38f5b0d199b663132b83c49202692956b4bc1bf8d18f8f54a408677cec061d0220ccb2f250c687ca9cca0edfcec31c18997c71d6c981006288ba01ab8eba8079aff42894273f324aadc68a81c476d1868c7ca90f119e345304cb0e98e3e9b7161ffe794098e2477b50477812c78091c1a352a2b25eb62fc30ff47e52f50733b7d0ef1084fa6f723b18c73ba3f21db268a49ecb8afc58c2fe4c9a80fb36abc10beeb727525c152f88a706bb504263b454ffcc26eb643c4e32c2fc2d2c8871bf77ea40f091f2f3ad02114529e72f57045bc060119f852f6e4c851e9cfc94dd7161c37387694091005e73675f65f35cbbad64f0df1149bb9472b3b0664bf05cf101b413aed18609a3fdd6c5d3fe09a4af94e4879541c710a90d1a7a953e9ccc3e5916f581eb29819539b91a292b790b523982fde89933c25982ef5e8881e6343919b031453c5203bd8da7eb096fbfd27c1daeb701026976ae098ea8623026f24b73f53a655aa74946238668510af66d1dfd1c4d63047907ae2fb8e697848a0f0a86dc10aabd9f196ea1bcdce18867dffdb156b076ca6b9cb5b307b9947420b950b74e134e0d2a2f0ee9e9ea1ddf7f04fac28f025ad3fca37e399377926ef2c6fdddd310293c7a8e3422bbea9cb3db394adfdfe9b54eb838c0ca2dcf6b1b18d9ad7492f6ebb799cfb5a7f102ff642e88e9844515202c599d5bb6365a158cffd5ca41db3c25d01ca559c0be102b7b9d7917351427008606c65ef4af67ca22b1f7f75cfac6b852786ccfb11000d5df7fe0f4d0c335732eaa83807f93ac7216c21a648700ecd658521c49552546091ae20cc07cd3d4bca40da4e4e0d8903b48f44121c2b9223f8aa2053b461081826c3f29e1f23ec06c93c1514ea56067d2afa61db7b1c677c12540c24881a5bc38f4d37aacc914402323a2919c08b4fc1ac9ea460aa3be8d45e3c8f2e5e7eee9ef3e1626e1e9dd923301ae38ba41d252a48619e25c7ba08b23ed021d0f2fee51755129a43e2cb4cd9cf360c9d43c11017dd2119c8b11d4326b8ab190f22ffa111a1a1cf0d13c03ab977bb0dea3a753b4acc53829f4bc2057df066a603845b1005bd2c4c150ed1a95a070e115b1c029cd994ef88d5e74a7a041d10c0fc0a0c41680b5690057a7962c6da57967b821f2aed0bc2943d2fb39634c0b1a78ab5370016ee836ea394851bd199ae28ba0ed8152ec82decb9b82fc32053cce359953f0bf8f7a50fcb7030fa86783c9e3037e4d0f1007ca93d7875ecf752203a341202eced03351e545d229f7e9847a877ddf41023471ada2f7a3c5d34ba0894f3894701e40d1ce8feaf595972460d1bfa78e290caad8842182d86d48ba14772d5f0b59496b47d81c0a35cb53766213b641362bc386ccfafce87a72031a4c60b13df8f7a9419b0c82fd5272c17164357af6f9c6dd558f1eaf9bedb82b8587985a4df246be5b7fe097081e393a8b3154b0ced16255a3751e2479e9c03b069c60b510632365e03ff18f89ee07226cddc8171e233b83251b7b2e1560d0e8033cb76e00e16a33bdd9f153a933350836d4dacf753e714eae8cc872a44c30fd4355681ddc672d857674412f77100eb4c554320dcfc24ddcea484740927f5529abde57493b4e82fa4ced20d87eb7e021e36e7d027d727ee8c157a46dc32a49f88c591cc60069f4e4da8165bb44c7fff12b940a477ecb0b7091d90ba55dfb9aab270ef0367926e99b20cd4216594a3e6f0aa7e7ba602571bd3ef2082e8fbaf0d2f0c849d895552cafa3e1346cfbaf914125d4566204143fa26f9e190a39b4cb10aca8bd9ef178a89636c3ff0a57c02f66a585f12d4a8c76b6f3f0b153e61a8b4be6c28f113df3d3a098df0e3b4c6de6b5ef354a894d7319c85e7fd1cf880fafcadf052a8f721d2d43b0c8636c96f76af69f50679398b68a4e2694e18dda315816de8279f28d084bc47636268503c1d12a98901ddce9f347bd4aa50cd0cd1f78450b0960d181e7152663fa27b130040817e3b2ce722e9f6d4b08f9bcca71ea40e664424cf03c6fb2e225c5b3ee1c10135e62dda8a89f225ead61692b671849c15fb07f6b116000cdfde225612e88e7cbae163757cac18e4edaec5c03ed027ea598d89e304edec06d8f2619828c055943cf70b0168a991fd029b4ef2bf01309c4021f24c1e5390ef07bdf7930d6ff4b75bef4b58fda6d6cfdc7b68ccbda243ab9dbaaa9281f8a7c2706ce6d12bdd37937a255c5b1823f0d4ac955fe77ba4f3705b5f9798be01020b41cfeef1dfdcbac23797e9fd6fc585025896ea61fb9a4b988a116c3cea147682af09430c9ebbff8fda94f11c079814b1747419168ca517392af6d248e026caa53c861d4ca4fa4124e03a7190f28068a713125b87fccb4fef8462363b3d4111425e69759a73436c9a7de65019494fae250905216a117b92c21346a2af798fa833ba50cd0fd6b0fbab4898e0d0b0669c517b1c0d9af1daada0593b85ab84bfac0a0dbeb0004a7938c0539c7f4339e73ecf5c73bd279a6f0eb1b1757c92363904cf7cdf5534d8ec199bf46ead94b27d17b808cb0acf21757b7b19b36f67de3bd5f281c70fa672baee7ffc0d5588f78633106a7c67d18bbdf92b5b58523936c69951a6482dc1de582dbf60583dab8e6405b2e1bd0606bb3d5e12ded99f3b53266323eca63ac66b5a7be360b6391cd098823990c95341d888c38908d68081d150083a20d4b70fcecf24ebc766e5be39aa4ba1897c921e5c614eb8c54bf135970b639923351c50d90325ca273e2443229aec36ba2fe46288c1916be762be1d1e65f5d727ad337e064adb86a37ebe353e42d658d625c9a351b38b4d06b583e738bf0b00d008fb18a6813d808a5107a8517632f78e16ba15c09b55cf8e945bdcec80d461366a541c48f55b529d1260774898c06c485f8768d3fb72c326505490a881fe71e44a1121171881438a881a52a4acdc8fef802adb4f61642b2b83f82f6036062010736953b373b0d42dc1c47106ba050afc4f244210417d29b26115a305d8190661ccef5a29a6a80773f91d20de16fad88f8c58615e2fe08b89a2c0b4e5c213b00ee0080f3ed231d3f0a90a446bddbee8c792aba7526a1e5f89b8a6b2116952e2cd428de0cf97fa24135d3029a511255f4d1bdb9c90a7eece7e37296e405d844d06c1205f46468b591201a9eb7f3f08a046152dfc965dbedba3007aac108265ea07bae3badc5d6290a1422bc3087053edf45d7d05a0838a20488a7fa01bb7e7ee12828c153462df28c6d8dadd00d3189935102600b8f3e66920b95976cb7ebc215a6c274b70cc50918a05d5e0114e903008e437cfd79cb72040503887ee152461bf5d2ae0c201eeccfe31b9d70e56304e9ddc934fa94a1f2cd04b55938b02ec824625760d7e36e91f680901347a367c5ed20b7f9a454a92652430edc0fd09be9760e8936b3d1b8afefac775b6b1e20d844121980275545788a71d3abc52e6b19cbc2303cab96f5d25efbbc827acba3b324091df13dee88f7f6a3956d01ee4af1909e1c21e4c80067cae942c48d77fca993866b7dcf4cd76c3041be7274116f4603c4c808b961fa2eca58dcd9b26711fca37c45672258e6bc93e59cfc2c405364a0fa86b4d1c7dca45a9ceebc405160145d1adecc62b7faa0387c6be01f58c032a0674c4b51247fb66723c60d5294ebcf5f3324dec9e67b6de1ab61f4f6d088544664536ca059c9a4af85a921e76048b5ba1270a2d85507e752ca8b6211b31a91b0ff48f6f3f7d4d4ab991bb94e122a92dea02f357c9af039405a4d160648ca6649942a46a963242108ea2d4ba572aa3182bc53f11b334b01489cf77c7dfb1c70b58d47b68b1e8886012fa353881ba6baf3825a6a31064acb63d7c67cfec4693042f424cea786d486076a3aa734ec75c2b812dad3bc73436626ef5575e33c778e2d905dca94441779a6c608091758a7919579be05c4a76869e44b36fa3f3b490b6b8705d697e8a4f65504c8a655b21186146416448bbcf2a4877c8a6e01f2aa11b30a9a8bdaa779534673baadad78d4c65fd52750b5a2b11386556348610bd473c3f6911a2318881414d31984a1698a00ca0a1dd98024aa99cd3aceb5f58ca620bf29526d11fec77c939bd6f5baa78ffe6c02d080411e8a40641bf6577b019a571a47477f476d2e3bb7fd10aff33e05db8ef84f54632669a6fadcca3b24ff989a1843eebbfbf773dc48f61fbb5922f3c0591b4165955521bccfd0e0edc01f439d4b13e435e63ffd2508a82cd46de02b130c443761dd758e0e6dc61310b91a7999af1117a24d8efb0508dd10873a60bcd4c1bef759f6b3d27034ae3ea007080fceba0e910339c07bcf047d45a17e3924105403fc132b0ea32bc80e7b060f9f5a28ff612952036536cada85471c0c82b7a363bb4b5648ab28dc8dbf820d440f103245de490467e3ac1fe5bb26d416692fe3b5c9209938173fb2303842fa5b98cabe80525e5b4e7a017ab68e854d362dd9a0bd6ead3022044f145b97502e59bed3bc2305b15815bc7085122f16211a24fe398e4e9f1af124598a0e20888f6db914fd7ec167a4f255580ec6a80ede67d000854f064e0c639aa29e6fe06f717b200970ac204b78a9c446cb9b739f5b4426c544e0caae1d32271645d93ee84408164195f83f04e9da06757af21a09d005a64afaca7dc3e4dd5372237554b2ccadc46cb5c55b096962b880c26db85376e3d62c3d8a6d144a3a13143b3c6e0410387bf483960abc472460bbff04e0060be9b0dc9df5ff59511afdca6ced5a449933d3a7395b9013e51829eef0711c1c185cb01f0bb64806728e7f99777ec69440cd0575face21d398522ca25fa974fde6f383a894dc10c5ca2814bfe95d35b73a334a24afb65cb12c80ec8de07e34fb1b05e6a17b8e2f9968115a089ebd5ce809e49eb7ed8591ac3855eca893e17fc6ade2997b925100fb4a40e61718ae587b8b7142a05a377ac8ad2a247204bbcb8b4e42facaa42ff83f9ef87ce600cf8c8a142e074942042545e222500dee17b09e9de4c1234d61842d3a358bee8bc2a6c1c1ae699d034c499cba7c4a2bc0a911b8ae18a1fe35f875e148b4398d7d3cb5b21d6d1c96299b34771716d31fec5d1e2ebeb5df4b51f538fe043817042372dfc4f454de4a152573a60004543efb91df1a0fe621f2208d5ff6c81d1a5156a0058adc8c513c20a0b310c10df5de57d412816ec320fce8b8effb89555caa6c8b4959456827a44ae8d68ed0db190ae8d67f8015941d6542b43bbcae7cdbb56dc0472d6bbc3b2f163b57ec8724e04c44f321c040f9ab851e37506ef57aea597f9068413571e498bcee59058265990f79a09895b2c183f5c406fe520701d285dc87a5cbd2ad85230c436a45cb87230690ed7366e85cb50ac9bd091824cc9e220cbee08b7ac89e8550e20224d2bf48b754501e65bfc86a5df14144c8724e553dc893b4497c2f89264a036a43532c70dce675c9100e3d090d1029e95bebc52ed3c18da1d63d8a20b092cc06f605ff27e223c7d017575f5ef57e96443940c1b6480b11f0a5478a5c4085a231c041ebcedddec044d449e2e4a6ad33215713a9cf6ee445cf549bcf655b3297c71269e9e59bc3ccc437afe03543d5bb13bd67cac2c3d9027dad9194174d0770a042e8a48113d4dcaba7b76e8c02eabfcbe21655e6ef06530b43a6d97373ef2e992bbe552ddde630c93e4d76ff61dbc57dcc03b320236fe088ba503603a2f5870a5e1841b2423eaa4ab91ce02173107923d1d16cf8fc5f67c547e9e0d3d1414e59a99a953ae5a7246e64e81d73ec720850ce1e7414170124a671ae055fc119057336f5e094bfa04a20f84bfceed0e68d4ee9b4f3609292c41d9a8eeef39d168c0af2bee28c983ad54c31de0081d42af1c4823e98bc5f3a812d4b3404affd1c6a4452644fccaabba4f75b193be08ee97d8a93df2e695ee4c5ca47b3c8878268abdc8eb29f04c284d32736fbfa6118cae5f00e8631fc44e35f0bdeca33a6e8eac99ee9f13fc36bc27782e61f5ae8ce8fcf4b2487945f8c315a6e8f72d3e31516d276b91dc2f8b735e7c7adc7700c8d760665e7cdab477f65024287e040b35e23543d23192575b2a89ab6f443c2fb70f8bfbb48dc1ede05f1685f82cabe1876701b1105c305dcedb57157219a0df867e084dff073f060f4592105ce3c4c23c0a90d25d2a753301ff3dc4780a1e107dd2b2cf1f0d2328a412060f9f732fc800539fc462f734a07019a06344f0f9f22793f1d7a2e00c3223dfec6b2406763bf46085f854f9277b21ab4f7e5db33136a1f67c2ee56a988c44247ff7779ccc76860bbdce55cca45ca2fb09012b0649005a12f86002526628908b6f165bad644315295a1c35cb0c0811a4b15b289598b47cb750a19a74e22da003a1b3c2a00582b07ff316a3f2e705f7542ea31042458ca982d823bd8ba2b77fbfb8feb87c4381edbddb0c0344d7149e4b6b9c2cb65b114a44a3d956b8bf293e2aab9496822c8287254254aa8914be91b196bc3859a234ae093aa7870be074164cd6757a0d3e94c942064fe4154df8203280b1c99a8ac8a6dc47146cef01cf08e8591398d5302b4eb291dd3309cab664537eeb220f044bd42560bb022978d0c0d2f1f1b324a3e01b9650b09b347841d3045fd9c19286c887c812e801b85f299cf80a328349f48ac302123f4e5f09109bea6b124ae0e6566a339001f3b552a8086d10249d51c910c052363f720996edcc2f0674121e3409f48e5d7f8535e49898f9fb351924f60c6f7e3aeb666c284b8c7436573f22aaec33d2ca1eef2ec01806f2e6b4789ad6bd6e5606fb0400b06975fb3b45ea3d3e1168853bd69d8504b31487ba03bf9db51b076eabd5541a37a3b3bb07391aad52ef64c714c56509aa64e84a750d478ab8403f9b066d0b9977fc43e4c364cdd43168c6623649833bd75803c50edce71e7a8cc078dd09a61cedf76a010809af955472a62f8472a482a9ce8377a7f33455ffd9b191317b7c2b73dfaddd0abacc05ec888adcc106cf9df435a3458525756d581d22abfe6f73bc1736e1bed081acdcd83e99da83400e24ff371ba93d89f6f9ebd5871d9cee4bea20710c972f1d1d912b44898b46762163bed713516631d3aa424be074f492ebc724776a77c1c93d0bfc92fc23d13defffa831beca76913497de4487e4cbc4383b2849720ebc77458ff0254a81e17d1cd15b282c0a7a3f632ff7e1fa349a3058e4d2e6f0b576adeeafe3a4bbb0c9aa0b78a2eba062f99f419f723bac39b6eb56f270e04ee139bdd35ebb6bdfc15625ee22b51e3c8e3e1a5b857418cd92b2865d7f24c3dae3de89bbf08ea971c46279da5b085c9af214a75cec10a3a81075d19a422463072f771083ac1aab2954b070a636384e3bcb199cb85752702a12b925ad9458c4f4ad6a1c18888a1bd03177292d91509f617d98a04555ecdd1cd800a3b5a730a9ce3e237f72850a3d263863c9f8558bd5ae6545f09e8ff11f709ba29ccdd51cad82a12728faf83a7a4b5793b342254f7f77b9ff98bc1531177e417fc53114b341965f19b12d4dab9bc6e9e232820f005c6a7215ae0b95326454dfc540918ac078c0f4153025ff6b7b94495381892d1fffc1ee708786e41d4a44880ff02ef46f5258b0ae6378a0050438a446ae0c6b15970642e4118b7d8d81109772b612671a6cd6d574deaff861393f9d7b353940145585d850b14a24cd9a1a0ae946c262d80af7e3b30d9bd7356ec0825cc41645b24363b829ec4aefbecae3fad891bab80ffff07700f359c37095a5b15526e84c196375971b9c93e02806241ce77fb371e598d8b6d2d2bd815ceb09c1cd217f0271e006c4be3c454ac9730df451f5d7ea6d914d6212f620baa21e27aacfd2f47ccf0fd1e9b9c912eb4b14c69045166a64860bd53182676319009c337b350f882d0b086034b2ca4fa89de053f90ba3ea2dd91525ea07e63c93c32088d1f6bd96501f3db85d7c35cfd9bd235d1b05e71d519aa3e53de554f653a3412b04624c4b5c28d0afc425e01d91486d31dc82ce687b9cc4d391e625c1a4f1c2805165ba115dfa1548f6d5ee280647295f53c10ee30870121dbb864c61df088bdcbc5c593e36eaaedb43bc2d6e4192b5cc056d7500d8c6bae9eb135c8c030f542b255291172afbd38bbd3103948000f9119bf854af54c3a985f5dad3373f621f534cdaa01c6b53f8fb66dc246d12d9113c423ee2bdd58902befec2870ab0d8a6bce1e9411f155808e852cb216132b2c727a912f36b49a81baccd034bfd69998778f286b1e35b580734e124eea445967014ade979ffe433a309a6f0cdb4ce92132eb4295a4d905efc6a97b5c8aa2c89b1566dfdec1f9734feed3a57b686a8273bd20b34902edfb2ebde5abc6f21a4d0f55105d426f025f7454684b580633172cd61529966ca06be46017088a6fcf409eea03b03e23408f80bd154a12931a0616c30fe9fa4ef5706f7b4855fc9cb3ee68c863a8025c5ebed058def753ede4d3e49404592de9e4fa32c9f2c203456d98cabbc3dd553b4555a0f9fdd1efee6ed05ff1874053cf0cb078e8322a562d8fdfa42647d2ac4b5e5e48bc3b24c613ecc7f08204ef7049e818c394f9503259799bc9a92ebff1e059d9600e1f9da4658a7a846b8710a7be5bc29cd80a1338c6be966684468b757885304b7cfb7ba38b47bcf9f4acfa504f1304f5374d44ba7949146310454d49d04e281d4a69e8d288acfcce3e6d145c3bb7aaa91ca3587ae54ec1e49ef2da0d95b44e797bb0ccce8bb035397ec30b2c3d70c677ab2b14f98afe0dd3e2516df57e87bf9d31ed01bcd0f838288d8fdf7629f1089658a0d1861099751cc58288f7c765aab05d986c64a9879ef200bbb869fb5fc82b0b3a96e76f3f5e624e1b881aaeee984d2046c12573274258d27b126dc17d29d57cede810640cdcce5ef4e8fcda4d6566ca07c725de1d68568e8aae9c2fff8f222bb10659e286a9f08a88d23c988edb7a5332af0b28e505495d45ce26fddf8370a83e8df5a4a48a950d5e9f8d65b555c49535546dc47bd8568af959126866004b9c9524fa179abc1c83a3f70be215ff14767f45c2098c1cec0285e82337a0e8f778a9df1053c4bd1cc156077145e81f8820438524ea844072e4ca41d7ce8877742c4d6ac8118b1ec94adcb2380d453f48366a62a1e9d24233bb0432b2bc19990e1ce2ee44e1cd513ad779cc0d46aa3db1a8f9a0d59777e4d56e16fde8ae76e29a336407f775506e41161eddd5e73aff2298ef7757adee84cf267acfdafd33212fd5b6a26195bc87f4b2495912a43bab30623ce030f46c25d621ac487c70093fd72772a4887f313ddbbb42728e915133f7bbd668f79d76e8fa1c91c57b8371bce559ac324d8466f20db820cd5811095974aa5db2a5a5fb99d04971dea9393f098beed46532a485738e8ff8b942f22828dac1779229c2f80333d65ed3aa77f797a79f4a82486233f5ed6f097d1e5576271ee1800da275ffe47947e0233cfceaa0b5129e6cc6ac6d6345945e1e6c4fd044e13c4717eee29d48a43794810c15dbd579380bc8dbf46af19e99d8813bb234530bf46afcefbc9f55a8f14074f4ab30276c44c6655ec3dc32b55d6a5f4c09c563ff3be3ecc539075e9918e551d333eb93b421bf6a54431257c620b26da22eafba0060ab5e582ba3fb3577a5f7d7ce9b4a594261da9b99018a09a432470e5852f2e59bf2114f875d2d95b9163296296fd16fb7570e6ffcce1b0705b1bb9ec476d56061e8741e276fb7c61658074a2278b5570f81bd43f7fe3065f1e41b3b4b74d73ef6fba2badef9aa4db121a327e30fd0499c7be7ddc741543be19001cc01a630fb1e59e0d2187e70e5994a0cc96a414e1f8f6419ac6b10cc88dc1a367e9f68a782f6cef1ffca91920365cf1b8b8f84cb326f1f56a2a86d73f9857348a433563b68e83ff310dae91ef4c03f0bba0a6d7f3221b35c648065ef5aa2759fd4878ddda8a6e164460d44db97187aa6e22e1317a92d18d8ff1978a8af5551ccd205f3eeccb8033bea1237c899edd7bf6db18221c7096ed711a0415143ada09f6537dd8483bb70e866962a01b0226d3b80f550008048fa5de54cca639b84a8750cebaaa44812d3e83b8c594b661cdf4a326c0efb40ac6d8e5cbb37f27cf0988b959741165ac93458a54edbd9bad3a8ba87ce790a143524e8074d137230f7800febc05c629909e577af7cd63047c44d82bcb8e5523b1f92a7363bc6b12898174b402f8333512f371b910376625ab411dd7e4b14450105b776337486f92a66399318e8a666f4ba3c03d8db3c8c3025bf2b966cd430e49f133899f590a20b5c5aa8c1604e6a8c8ea0fc5051e219c5a1215a1285101b6cca27107174c386ba090b0137d487d2f46f7244c7250e975e9db5d76e190c4f7009e81b114519b9edb372497a97f9b8eb59a774da979df90d09eb0e6ab30387fd2755f0c8649163705f2138ac5a0d140fd1eb33d120320d09b88f5cfd71f2c69953a1edd7d431add61da942717246f7ad9a3852816af2e0e906e6641049d3ea7296092dac013345c38ec9e33582333790b670efe824971f22c65cafd30d080091be1a0e98ff16254aa8d04c70643f54ede18020c920859c87b49f91c44ddef6dc7217ffd7e23e228c530a37be641edb9a432de92edf724f911a1bca03dde6533a339030c3567eb05dd5d67a10763f09d26611031c816b22c8dd806e134d81f31cb570793f1ba063eecbd6c52e9e867cdae62f545827e1674af6901f05df8180dc97398a7edff9008f666cedb9e5380eafdc5015a8483bc04efefaef7cf0739325c7ce78dfd11e85886688fe72ee660bbe03599b316631ef83972a5543a4df8613112e669fd7797888284afab5fbd8cfa9261a5a1cffb5aa963d5147d5827fcb6a9ab45052061affed2e576a7a1cbafa8e07567585dc4013f8c8cc8391287946560798da2567a845d0dfb1dbe3fe2735f91dd4eb897e97a1cf341e17895607d37071456eb495a84e07a9d957263126dbf4360861c5001a0702ca769ec40d4c03ce3fac59b17a5532da03b8a282284935a6278438a3fb2d3ee989863b84b4f7095e298bc12a2d2d042f07a5c0e2092a2a4f2f32fff6ed80e3b3e155cc901ea50bd495c404a59a7395e4f7082d0b08075ad4a7e2c4d46c80127c00ec44a1e33152f721d6730800c9c25a3c8f6a433b6456826ee1c828d0bea9c61fb1ef1b68d79922571ef0bf30f51a0cd89daa483308360a78d7190df4b7637111122a5940143047e04e304e38afb6d1abc6e222c4b0af0f69723afb5e007c38ba7f9e2bf6e677b908b24f9a7b9e6569dde91e48bd0cb9dde91cfbede919f5323d9311c316b6e2fe6db6ca1c9498e35ae567b7489dbf8ebbfada6dee99df275f966a8d36014d26714d127ced930870ae16d3eaaa1913512c08e332b81aa078da01e92fbc7f61aeb1d0c8c47daaacc5ac43a7eb1ca7a9bd3f15bd0f18be5a48f2001c7072823e0401d3f5e4b1d04a1c9f5fa61c8f291cdbd4e1ace62aff5f99013183e0b6a0db20ff0fd0820c5901471394c923892046b1b0c553efe905328fecf48c3300c4354efc27fbdd361c35bb387214f28ea8df29ea27283dc7574c61c1e4d8ecb91903bf924ab3758633df021a7f06bb530246ba1f8614886e4c89af8dda2ec9094a545eb0e186a393760f7cc7a20ea07b01dac21f87acb3840d7a8debd5acc48cdd3c47942500c5fbf6e84dcf79390fb7e7629bfdef9af723a0e14608c1df880c43b9addc029c06d4c929c6756031f720a5950ef4c7dc1fe4dea9071dd8424b9adeff67bfb36bcc3d3b70d7fd83c7ab7bf074de22d8fadefe7e9b18017220347526e903b06be7f43c93906cb1c3ee4a4b701f4ff64cdde78ce189427c760298aa6f86d6ed569c35bb38b1a7c0dea6df2f0879cf66b16258ac46d7c83dc6b24c760cf5dd4a6a875e0f01c09b98b2f7e16d9a5f145e83cf221a7fde3e7eec320b00f287ed81fad14f99053665bfc08525fa0dfa7cce3189e0b10c1711c33d6b71093183a3073a477b89b584a7aee3a68f979b48f48d41f97510b680862ecbd730e063c3f7eb19e7ace5125b8397e2c9a6f1655c76fd6110a3a7eb3863a3e3530757aa7c386b768df24e4ae5fea055ad7ec9208aef8d562a6798f8a32f321279c1fdfb406f56f8d75d7bdc459eb9bd699835fcece3aeba0e1a6ce18cfda27e79c2fc0cb9d3b0882a0d6381167f210cc2cf99a8d8e1a1d355987dcd42b4eef76665bb3e7c7856118aec93a6bf6d6634a1c82e6da47d48f5bd083fde2efb303f045b6d561189a0059bea59859c2844a272ccbc50da3252b27233e1b36a8ce6ab0b8a1555576a6072b478806abd7f5932f56128b12ebb06488404cdde581902b2b845cb9a2e34c2e87255482600e04c3f0ac875771407c458eb88edf2b31610e2b295f961a47287459f1838d9622235ae8e2159408c62670a178b97af1048c95333a235740ae3274fc5e25f578af863afe5bc7af5559d7af55586fc9d7cad78d463104b7ce2fd68e33101120d374343d3fce4fe6cf4dc1a0c95411535892a72f67806ccca032f20123cb0e1d23f06309f4b8d135e5298aea0c9cde1537891698a8241f5882c6313e2939c45a96950f5f925e76fcfa9a9ee7c8250ded1bda67c76f9617b288f5fc66e1ca75fc6661411f61ea395780a54191d733f6eddcf1997d36b6e57d8d6d7b6e3fb2edee345f64db5ca9d9fdfbfde08efda38ff6ce7e1ec9b6bc9eddee735cb32d678146e8cd8541e4a08e7b9b7f03cdd5770aa7ccfaf28b417808ca4139450e1ab1518c5d0c60a0e02ea41f426ab820c6e504c65508a2243fc158996c434fcc63f8eb09053d33b705178781a027c5ddf55474793104851c6e97cbf698dc2e2932aaa878f1a56468c9068d2e2c541922c40d9793204d485c0d800e38b28b3ca5976cbd17a8c2b0142957ecfd4e6893854abec2697256043dcc25cac56c82b470c95c30bc27c6057b4b4532105c2584a3e47a5bdcdce386875e963bc675c18c4be60b2c08d13bc35a2c5c2b17c7f132402fa71da0975970a1b867cf85fc04898952d20d1b665844b4b102d3c174d5462aca5210ec25efe8c17125e845c15b64b2935c86a7b83d266fcab86e5c01f4c6b82b541a17832d7131ecf4ce4c99812507615f12284a26e4305d5c3c36e45e713116982eac223da45c79f2c2660c11ac364bb250b86103a2821bd7a727e6d5d0c35bd0b84d5c2ebf077a715c0c7a296422d7ec01310913f3658d142f62348258f55e232ca61f5b503f9ad08cb8b79e5515178d9bb550e9e9e117c4dc2335d9085fe53755dccc431445910445511445a61a1ac6cb0d2b44414854806628750993864ad2168d2d35ba28fa0862c55d53f68a5c1d1989cbe5aaa027c3fd300cdf0c3f0cc3d0d41a338a4a3b2e7e4b7210865a5c3d7c53ecd1c330c438dc6f2954d94706bd310912332c3ea2fcaed894dac030eb92a40535626b4617451e4b5aee93fb138e01e8d5783199718ba8f7b20a4e2efef2c59da087969bf09afcd5069f51a540a818638c31c619638c31c618e7cf3f3948af269098f75489751674adcdc071dc7bdc7befbdf7188262071338d6bb4cb477da10224c20050601be7e10f64ff97a341b5f7f894f921cc71cb4d7912d41ef528036fc7eb04b689fcd6631bd0b51e890c47d193efd08bec56f080cba477f43f0fb75d0fe617fefb094ceb7df792810def2bcadc4fe5973afe1f793d83f3bbbdf5fc2fe99e0b704b5a79d031b76d37ffb6d4e615c73f9358e81514489f09cf6e9f0fbcb0e6b9b83cab0cd3eb489934f420125f2265770e5b80e6c1bb228c63eb2a299e3b08a00a10225a408d29061cd293ce557e75f5936cb686b6eefe4df4d20c12a4204ba35efc84af64e7e76cd3ebc777e7d404d519d311e31ddaf6f121a02da472cb2aa72a6e38ebf14c59c7366c50e26f0da7b78f45bfedbfcfdb92cfbf64ffa5b7cbd3f8b99e9fb49b02778e2a33f78cbc3d363012f8fb159ec5cb399a012cc1479087fc85f5b730ab9cc0c4deff2a72bba66a26cd633d65a6bad51b43d7d4411e29ed17afe32bdcb25645405ae33095d6b0ec441e754e1b01425fe1026905592fb67c869cc9f7d3ed024f60f89dd93439f274284ddfeb9817cefe40fd7dbbadb3bf94d1eb9747bf1c6e64488803fe4d7eb063650a9b556087ae72366fe5956008348813fe4c75a3c7ccb3b7cbbe3855042fb988fea3cfef25cc9128be3f837ae4e7e4ba2df6e8ff50faa77f467d090aaa2ba62bd9363d315eb1d0e6c4b767247f66c56d7c9e7ecf8e6089e6b7b634ff03af9a6c996d0bb2f3dac1dd6fdf37a47bf880619b15837635771027a97a53868710bfb30c6186350c418638c31c6a11882bb4729fe28ee300cc3102cc307cbf2c3707c9489dbbec566ddac7d0e9ffc665d697284495f7041052d2859551628690a4b623cad581a728f9c20a6c648f5a14688c61b313569143134ca179586569ae60aca840a4512959231a2be50018dda71058554ca988c946a8c858a021a4a852c5d41a6052f2e2ea52ca89594192cf4387286290deb91b26043bd91e6e84c1a1768e0a0526c522e332a1330d4c7255561a51ebd5e9ca4442b5871525df840bbe040af4c5075a0793186260835f302189ad40a98a72e681a16942aaa8d276b94a42d88a44380a84a7a2a54123ae64c9191332b5070939e30969a89417f5e50235958aca83ba6d22a26478aa84b82c0d19162d540c3ccc440cd0ca54aced4226b5a1883f443bf6cbd58da44a9c26b4d5ce035a85406d39992dac3b105092d5394fa2823942e3943e390a94665521f18caa60bcd82e556a545a6d2a828750528358809ed5242c3e0485920a55a648ad424648454a4b32cb274aacc1630f4ab0b758275a32aed32953e8942ab40a93198d2204a6f70a840905221638a9ac608a935ce5228b2b74c0f30345d2a0b58285515ea662a4512951e81524f60526528a54938502f24f48a5851ea464c486d71a6b220439f9409039616759161a149aad21d5356516a0e28364c6919a5d4041c4948e89898221862849ace5424646a0a659a80a560ba52292c7546953b95c289728242db30a94c4aa9118e940a92da244c91983042e9d2195a860cc5e264991f27c1521b5d926441c1c265ca94d49425681323a918304cbdc5be5f018c8f7ff20593a3ef07f7defb7f1f5eb0212e6a9b470c92c6d108d6a248040b6a119619816246fbab8bd197ef4bea080c496f7b7c269aacd31991717e2d15995f3d18a5fe7a61d3e2ea126f73e8197f3a1245af1f45a17ef1f54aa23185ffca5efcc48c74562c742089dcefbef0e86d8fef9cf265247f2dbd5fbdafa49edfafa1b3e3d7ab2cecf5e2f27abda4bc9e48af1f350c1dbf5e4936afa15f5aff95f5fcfec47e5cfa67b571fc94b8787f4d463a29f0e7040617993a6e0969102acfc4a14daef8b8166b3a1ce5b85c9510d7d2d516aef4740c1f3b7ebf48e93cbb1c8ea33a123cc7e5c897265f86f476e7435362fde1fde5f82575fcfe867a4ba275fc7e31d35bf3fd12f6654baec175f09b7dec3a98c5efafa9e3f7a7a4e7c71048bd6062ea95911c473248869b3164ce8891919aed307b3281c70b53468c5a637d1cb5cafa381251a17019c20397c3e5505c0ec5e550f045688c3b6e671c8977c78958ef301c4d50d74e0d400e4e0e36680b6ba5589627a9771a430766c6f40e73b9d1f1b941c6bbfc19ef4e0e4a70b35025d6a95a1c34c9ac37fbd34300fca32b617630839e5fb5c2db9e1e1eb8e6d77ab3b4726a15ef09d16addcbc506b9c54334b48a83666a902d697a9ac6c1749de921ce962addd6f1bbc94a12933adca08933b3d6b81c7e9b33984d93c463d30bc78ceb52033c7ff96e796a7ab704e900aa56783c2924c953a3a853a2129a343f2f3ba27e2b884d1ec2bcde2e442ec62851b1743961e22c21594c274cd5898e8723800d2b6270aa139d0f30183f84924c79e395d640d3a40c13a61848564c4178bd9c5e0693e462357030162d2eda5b21cd87cb98b961582e2ecdd0abb2e282240284ce6e9071bd4abf0c205115610a3b0b821ab1e54314b284a5b68eb8190c44efccc565305c07bc5c5dcf8c0d7785abd3fbe1168000bdefe12b6c88b8345c0ebd01f4f054972ba6f684b85962b81f7a3c5ef4084ca0ac701d490560cece3967b186a206d4c5136607d9d24bae20ffde556698f945dabe3c6f5fdebe5c6dabb94d920120f837f6f6e0dfd8f076bbdd5ebcbdf83796d4bb7c6e507eedcfd5f62276ce75720581caacbbf033c90cdbbf1ee6949ac8fc65731c6da619a67d6c63796a6003cbf7509627500afde34fff88429fab890dbf81aeb106adb386af9cc1f859eb73c3cd0ceb39c3ad1c75d65a6f789d6d369b3966db6f337f3903db9fa698386ed0667eddccb02efec88ee31ef778634dd8327cab8dc671cc5a2f60437e1bdbe25efc719b3fdb6986d9ccb03e3ee71bfec6470caf9ff6cf7e39df597318590862709be6b07fbfe6d7e8c03e91e3ec99b4e6553fdd783c3fe6f935ace6eb36d73716734ef2734ecef9cc31bff016cddbebd3644dd87efcf376b39d36f32b5790f363ce9984d6ea27db68d44f76b41975d1fc3a59f32ba789cc2f33acd44ffa88de85fac9fcda3f0e6954f8fa774c2548cb51efe9988a8a5fa7124415478958373beeb5d053bfa0632a2bcc3a95152f95153ba8ace0026fb63f45510c7f35a1c552144331d4e1f8e1c9b6faa8878f42f75cb226cef3344bf1cb561f69cdb6996d73cee981adebfcb793839c3f1fd43e58e7ac419612d79c2735b4bc03a5c8fa359136ca7a5c4de07e03fa3c89f48f3ae9e4eca865e40cce175138d080916d75c7bd03227416376060338b331ff7ed899c073891d5c1a0d9cfa0417f3ec5713c3f0797d3e6f31dd8903ffc538fe5c9817e13238b7b9bd6b80cb553833267c5b0865845e81df83c5e769db551ce8b1faef9f95abe5e43dbe798e14892e7c9668c35b97f6e99932772dd04f9e2dffe7663756a1f7e7ef0645bb2cbc819881f7e5ef3b72772e593a7f9238fc7b62772a30580cab27cf1d4a0e485d03b9027629f0633a0d6dff216ed3ad7db103d441699c4d9d175bb333155993b06e1fc1e48ca3131089db3117c85c73312c575428dcbc5f1a070c5e04119b7d6905b6f342ce14161b7b6b6be68c0800785cce53e4d4a6d2aad05a2b4252cd28cb8c8e57e97c623fd9176032593862486e06639cf7daee317edacbb50621d8e725c6e1cc7d46ba389217134231e825b739e7bb42abddd35e974684f5ed8d08620d5d07a18912ca0e5402ba271f686c6d91aa2b3332ccec4b438fbb938eb3204f2e472bf6b63e5ec4c088b12d4f980fcda932cc9927b87418cb0c31ff2a31fd46a0f3402bf4e37a23a1d8af6bcc50fcd1e3ecf5171f1c30d68a050ef19259c570b7ed3c6ba7ee1e4e83a3f50ce24a471a585fdb0af8403f04f02f6665b9e8dbbb0af04082178253e00210414a7bb056d8cf4ddf1db86484f03a4a73c7a2953d20a6d8a541e6d56a05cdca06fc6d42731e9172f5b59aa0956521c53691c26a89622a80b4152341d4735d032363160b01952719cd55893f6c6a44c7e6ad1166a86250d8a12d5442502a52a0981e2913aa580aa299b812a296ba10ea501294bd59431f3b5664beac487658afaa3052948d2ab26144c491d7223d5424623254246a41a89a312b5495d9c41d1c25415ba54215760a86449a12f247931a4ec878e1c5e90d2af353084d6a850550490b8a8044bdb515aa78a6a0028f3160020200808858362711807b24c98e40314000a65b83a4e3a2e12cfe48010464110c3000c03400c800000002008c02000c46088297a407f9a36bc05f7f4858638011cca8d8577e04c327dfdeff82d99eae66dd8f424a213f0fcd6fc2568f51cfd332b8b80aa1bacb0429e093156e3cc302eb0720851d39674f492913b23c8ee09944281c828651859fa0a3461b46864420cd995c76e4d945645e1a511c55b73fb8579242eb27b8e9ab587e6345d21d250a410900084d46b3fcab90890ea5b00969712125ecb981121a5e88abc24507079d9a5097ffa478014b196fd9c9a86fba2c9360a9e3b0f97ae6a17e592a44a9b49658ef4ebccc9284435bcaeda5c033def318ff6e70e1cd3006794062ac0aedb6d3576402f7f6186004022fd7e44cf420511e63a383b56c1aeb9edaaed853cc000b7ca18ece680a47fb01cec16dc7eed0d2660c8c5435b0a6e118497d21b4ca31595a923c16df6d343996b7f24001624686b50829ec60a5d6c9742a4b0e6c6aa8f32389c9b45e9da51ced9816ae3c2a319e4696398456ae3e44c77f90b8dc9366aa053814b56aa68216caae98ba678bb315f495de2eacfdc5d8427b49033158c2b3b1ea0719bf8e6f02dc3143545c9628b98948561ef2a2f8900a90506789d8cbc996c274318611c34c295733c16d265ff7088a4c5bb4c471f7a8571fc8945e1d807ce4492634d6ce41fa511a4db1166d80f6d6a1f92854fd43ef73aebfdecf781b8452e4b4cb0fbdf1176b32efe617ab59caa476fa139fd2955dca02c3d1ecee6669116ec8b8e22b1d5d541e4f6b09cbe0ae359a607cf05ae4d0ed2074d0bc6c4569cdb3447e92a8938e6374d923a1f596521092c8c059d29825d48838991768a33fd1582a11be5bf1a20891f30cb5cc0f3d510c1571e579a35236a3073c5bc88460b974fed2882f97309a3b67df490c7fdba56af604c8e60e61a31e343b2105f9ab572ec7b336ac0b2bd90108a15d96926fa7e9950327306aa9579c77926e469a1b01e6c9ec6a874409e885fc9177dd28eb13b6f4776a67fe843393b2c0b62802e6b3cd18310583fe18c993f6039e40b75ecf8d998e72da5327fba141cbe817f4464f71b2afeb8090c3fe7840bf54139249250c10067dd42a0e3902c84e62c4513f61dac957476058d49da562d177f99c7c878f329c6e3e67aa8cef8ca186a4675884ec4af5a55e441c5eb9908951352bfe59067111fcd151ba5ce47f381c089b01f8ae4c55535132a72d29ca3ec34fa375611524fd0dba8e81db725f53cbabe1498dd4d5507ef3ddb0146402a1c221bff22e5f75c6b0da258c70f724754f3812e08a565103800402bd27979378de94f71f980d63c05c234d4c8c0773267a4e6d5cc955783238c85bf4874e18e14bd15e87a16c39a377947ef2596623e5efbb59a6e0ffbc70e92aa8397af9550e92e32dca5f8b490f9ede7f7ceb2c9613bf95b3996b309cd28281466b42fba38dac17863a0281cbd5681cdd614e3f54e13957ecb350227c0615b18da40137b72fe6e2394c183ae081e16ebb87feb1540024dffe50c1e2389a5aa90974f45ee5e6dedc537ecb15297d9d661a5e8db1c24a9f4ffa304271f51659eeb0c7a7b7bcb05821641ea3f7f7e14f72d3d3bd171409117e9ff57f7c981bb00600f532853c969a3cafb94110261d12b89dbdb1152fff5f5283743047740bf82895d4be861868c0a354fc2d48415db33a167409fbb2c05b93ca3757215a482bbb28752f02309625b74600fac2a994d0965f1a0cc2fbf2638cf17b4db1d5db5706c830b356bdc60b43638a6076bfc590524f4a0ff5be2d9e4337053f03d8209a22a8a4482c949d64a027cd33f868253de57e09c143c7d840354d4274070fe6a5270f679c653609b49154ff24d82436e119ee16c1e84366266a65640e41aa408de72cc2ec9e923c88d409b738f1b67cb1f439184e4907f1342777d89a22935d198166b9255757fa0de45b1f0457c4823d3bc6e40e7d56f9b4972082330eca18e69ce7584aaf62f810a82b78aa64f736152c589504d665221f272a36d25e1801d889c104f874f02a0887fc5060fd1828c8ae093a2ac200697478f51295015056aa2fb185964a7a656cf4518c3c91b4fce7c1176a8b637a572b67f27514ca77a1b841aa8339191cd0cfb71603e45592c157b2036acff3bd663016e4c21d6950c008e664609c9ae00e6b0b0e0eccacac14589f21109354222ba5f6aeb9c98cf36b18fd63534025403781eaea6c39698feabf606284e4b1d49a9c367664ef96813283271d2ad9631873ac5a30a814c5cacf838e1eaaa99038efad70a8fd493bdd6cfc4d3452c8aaaaa9eae9068ec466354b2d01c4c22c982076ec7a7a0dc9e27d1a7aae581dea7173133e349fe8c0152f5e234e3b4c3bad62a8c651922d8263a40596ec24b63fc55386ba411ebb0f3fe014bfba922c00b21e11a872e087ad0129ea8b9fffe3e9da0fc7d40e5fffd5abaeea0536fee856f74a6722ee6405df22c45e47eedf51840119a3b303731dbb2714768a80cfaac3f6fc04d75f1d0bd88c98f18a2b528c2dbb5f119129abbae8a845154b1dad3436b062089c44e4fa4d92bc640e14dc8de8eb1db4986b2cb7543ca216dca97ba5033c108da4da80926e23519ffb4c3baf84a92a3a291af646b96b504b1430aff4664acf425f253ac92c021dc4cd951e4284b4ed643626396f4b9768610097245813b0e50d9a976cd3e1d1262647ca61e37fbecca6e945f089be2e3f57670d86252a6d759cad649d03e800626be58b24c5d0f02a9da8ca9086627ceb58cad798df9c05fc2e4064a9cd38d7a6ab4508989ff39acb7a2b684b3bf4c76da83efbe9536bda4e2651a585b96a84613dafe17a407a5db4ebf242b66902548b96078b54cb8570f7941dac240bde522c0f717fbfa85d14b32eb5bdfd6a9d8923d503f7619ecff779018fcf25330c2be794d336cbd7153d7788e2f2e84deb3996b274fc6d16ee221ecda0c03fd51467cb1e901a6160e3e921617368c59c4023a4a0d1034653563049cf4a0bd5b7496b6019aad38f44cd72db5406ab53944199009459aaca9ccc3b3fb741782bcce2c50142c65e80e7b5e7cc904c805a0b37f32f0a1f23767923b82bf600922d3a9b5b2b08ce3f23fc7094ae43bd3ad7a80e47ece98e1ad692e467f44bfd45ec8d9658cf9fc170daf74c6c02f774aa0fbc7d4538c4537436ccdbe7541f0aa0c1d5e36cf92309f54d2b319d3104dff5d54c13fb49473d69b21af7c8ecba139ba8a475a37dde7ddd8fc7d0b263c6a68615fc7f50741185b83342c9d3612e013db05ec562f781ebc1a0f1677bd09ca28e61ef3776ace86354700d51a8bf635f4acd12da8e2bda9f85d51914e8de75c2095d3702177ee4c6524d9c22e5214fcad487acea27e619b4bb12d1b2eefb25b9f1a288ec09b16588a1da186d043bb7af8ba0e70aa7c91d937eb5ca13bbc4274f5e2e925024ec60db97ee2d508d80d0e79824ed0a81e72aa54c46694fd1718d1f602a55b1935116b516b146f98ae5c1430f125e7313789b2b81895b1ea2d75b210ca1ba449cca55127a8b11894af0facee25f83244c376da901b3045eca33e59140bcc300c4df4309219b9a7c281f0a29742d6514e888193271183eb10a71badf06a6437e82ce65d24740fe20dd1048005a74dee24e01a946b0604f5868607a1657c03c16cd1d811ff652153f216011cc34730d1fc14b3273584016af6528a9cd2a441a27283e004fe9a1c09ef4b92e1b5846305585cf514e414a274d406c4314cab59d1c210aa35afb15871a0f0e6540874096da62e1ba88279524547bdab21adeb06046dcd551681f4331729a39bada0dda78d51a2e7332a813e88282d0e247865f6b045c0bece229176e674619d1dce68a88b8ec68ef30e599a4e5c52c1ee5651b90e1c0caf7d42f16afacb20de8c68d89226db6061623498491af4902401a98d8865b12c13aaa3468d0b079d96962a1d031488eb99136de99b94558d5e1611b217581c032fb26a8a761a53823be6368bf8a015418b575945be8a8111f9638679dc138aa95da7a5a54ac7809222c16380b8ec316776e4460084c9bd14b2ca2b6055c83102e3753b560d6da78a0602aef8ca09de3b65a40f04445b8d05415ae7665488e17ba3249657162694559ebc04f10ea94190e959c34bf41c8602bb3951dc79b3c8d7c704871024c04982caf76203f827edd448aa1efd0633a2dc1c41134a4c14c6f2ff7b91ab9f2f9578f997ac9fb3a5e4afaf54f7a80489f5d70a9ffa467b57be2a85f12df7ca38aee5fab074dcb018feb7c8e5f107c19f8f954f0c968e97df4c818e703b67c81c2c191765162e2fb6a1c3604b1b88568d7f19768d242205a3a8a67e91aff2b27c9651dfdd77ad3f455f73f672e399fc91f93d395f136739799889fc03ca6bd0f8453d559ecfc6cf44e776223e4d2e76e7f4656763af96e81c143c03d34efbb23fcb90a98eec09343ee8ad3014ae16884a3c45712f4dc55b020287716e37fc610c881a9fc3b61bfe9a47146046aa57896ff46411b0067727996b72837803f597ffe7981cc5075587da113488ddab79fd98037f561153b14f446e69ff609032bc977ab6879aa2dbf020ba68b52d7b98d0b2af7618dd4369b0b56a8b16ac05c424f65878219a1401bc1a2ae7c1bd54acab783750527c9d6efdaa9e03566ff27a8869798fe235b1d1e56d42ee9c5566807c426150e190ed143983793aeaef4163a0f64ece9687a0b809b2b349b4172ead08a25d9859e627ff3e14d4b66527f34cfa606f404662e9ff5708440190ef52d2467584817834ec049686720897e42d6590d194a619361e8181180b28e0cd0ec101c92b4e884eed218854be7c0c182804af3124ea1db78f5e8ec8f019db074b98c8020d06c22601cb1da67c6d606620fd730cb4a534b60eeb84daebcf602577b327abaaae057fea4e3807b939505bda7bda5826b37eb1ba2f901058d4441bc02be500744ba10e6a4a76e5bd8a41abcb59005c1036496a683e628a955a75dafedae8db8206a1e61e411dfaf7d1c274125c565685131fd90c498faafe6ddf87a2318d956052c576af8090d24296443ae02a10abaa4ac50cb217621fb8282d39672bdfdfc6df788e44a03395cbc0e2fe09e27f7fe6e76cb11217f9fccbe8ca4f63865a57e7504cc37cc56b0d3f2f47a51712ba4d6160ca1650b50554c1c2aa77b8dab60aee2f1225a726fb5adcdf503265eb53bc4fd62ba60c0b09da250392a9a5c62f2f853b7709210f00dd1709885fd5fcbdb34c9794763a81091b00489d1285ef8c19583b8488bbabb5aa4c155ddcd954cf92bc7e7ae1c487514e19e8a229d14fbfaa3ecb0eadc659478c48bb69a17ab676991b625dfc58ec963bf97459b92ae5bec248025e11ad5dbdc3ee0021e4a108fa29bcab4e3ace9fa2b212c13125f0ebf229af824c93d844be881a1d6f0deda3e1e8bfcf12403a956aaef5c82f272b8c1bf50f059ba119066168acac186013ba013322f94a7ca38ce50947fba3260c665d50bd70cd424c3922e9d7f643af2b85bb3d79a96d59c2447d72a302e9a8a87422d07466cda5705840445c93c0a03668901bbe94a029bdd0d01ef2658888e1ff09ea7f8b8c8e1d04a175bc2183cfbb7ba6dba8667f6ecb5fd6445f90ec6d943d67306be03e8b1e30a7d0f338ad7b2c9b5fe75b6c593085b4d6b2ece6db27f4600758507fad8df80ef501d4bc23d74f55ca3602a227c20b728cc1f2c20cd771a5868aa7029b1eb19aa485fcbfbd48c4b5146a2f996a7a28bb7be593c07138e1758885d62d8451c0a81f0082456fa4fdb82ce5da11ef513c3fdd8a56f57d6b17ccfb4bf1b52b254814c0347208a55a055f7d1a559b3764507da82cefa5957964b261853bb337591e9977952ecc9fcaf046281fafaa96689a376ea2be4834e33fd0ee2472307aaf03433e6fb6a925814f013855a1e64ff7357db3a138fbf2b6a23655dbbed20ba4f7d62f50c4fac11b00742f6bc38a8aad9d66c88277e31875d228aa80c175950e0d685aeff7972638bdf7f0593536883c0c025701530a2046a0064fc9ff913c926967495fb81019123a0e09cf852b8d7acf8e66b53619a1d1ad25bccec572a45f58277ecef1159429f1412c0df96b9b2a10d25f8f69a7886d8cff816081f9996bc2819b95b00b31318a8a70ba0a3456a7fec418429f89e88d2bc046a6e2fa9be098a3e2c4a8fa41b9817d223236eb2a11843a334a36c521b49dd94ed2e100b321730ed18ab3921011c4b35b417174385a6fb02bc790ffcc5b16e1006dd16c428a1b8adb10a99c65972039a8d49a75045dbb226219211a2c02a2f1e8e725ac3614d0e0d0f424c71c62ca31929b454c8edf0896357b5e19f29e894f36e3086d7a762081c2e1b3eeccea894867f62c3bc231429895a408219cf98d8445cf7c5d80d598b1647f1b2268b34e899084b31b04cd915d8e11ac59fb05fcafd9c088c86c56a544ac752609393c8762d9339d12d78610f3d9046588a16b6ee2ec28a59e1ccbd6ce4a42821066760285a3b301ac38ac53b31bce5938f4fd70decac28d171a2bf9b7c1f40d95aeb36412cbae8be41202d1068b03dd1b82fccce62d4320b31914b1b4b35b24d01b42b833df17f13933761091d0d9b0d4387039141c371cc6e118699d555784b8671627edab4c4b522ecf2d258ae3cc0249de41720a4cdee5a31f96562e7f4286f971b9803677b627dd0678438e83d0468b1ba98dd341aa1c12ad1e1111cd544a25c78e43fbc67239c46fcfbc4344b866f122e34873ec72d0727468bb08e746d80d96dd10a4382b9984c831567e9680e473289b23205c333245acdf59a0846c43086a3663114dcaac57446433cb945f0e9a1bd636d0b4c7827a033a37c4b267d39511d74c6c32cb71e80db1fbd962cad8a4d9ea8a20ddd95302cae13df14c4a0a1bb88d8a1bbbd910e9ccea4bef0684718cc8672e2882d466ed92149abaa86643c87ff6403462432c712681f0425b07b38695c2c8635600224276562ed68da59bae4c3f7a381a759c20373d48911b661c87e7106d319b2c11419ad995ee8d3087ec8de21b2c6c6c4af30429c6d7d2b7709e01ca8c23d31c21ba334bb608919c4d47c2ea9acd29a2416707a4ce91cfa1e4d8bcc15c8ef0dbb31c12ae0d91f9acb0d472e038141c9a3776d96073b8387c1c108e23368cc631729925472e3860d95466d2b4bf38299e75c5e003d49997f57510076399c2795809b63aeb8744043d5b152d07fd360481cc3c9314e618b9ccbaac08629d214b1e4d5f9adb10129e397c113b9bb93211b9ce9265de0d606b6ed5390f2350aa66ee98de6aa54c5aa641c2d094df055908d3da8eada49243ecdbcc3544e4370b969de118829ef5b108929aa921b438e26f88159d7d2401710ce23a2b2b570ee51b9a3676da6071c0bb2d3757b314399ea6d73a0a5496d0fe199ab51ca16a6f6d650f0c09c9d721cb379241719141800ebc4e628d76c7cb45d8fc4caf70bf21043ceb581922334b2ad73640c1e13cb7b3d5821a9a90b144013fb304cb0230372a4dcbc50cba12d97ab5748fb8ae8877dff1ee209c73e3e67e59dcfb81c55a9e3bf9fc7b6cdab448df121612d778df0732d2066e82521aab81a03343b841d966f8d6393a0516bd7ba7725ce9e35f836544a70dd1408daeed78b17f8816447ed593793f1bbc3ad3af49602acb22168f6ea292468a0cb76ec7cdf3b02f4f182813592097a58e51e12b48365a1bec0df08c3c24848aba588923f50c4da68746e77e0b07c0f6c996bcb9b9636a19e19c7550399a7ca64c2e1b0a1baad910c99ded4b9703d486cc3796dd62e7627328c6c2b2c16f436060f3ee972b1d95ed2550676b496a3886fc66cf44a31c6209663e212208b37b41b7d179a3fd0617c7fed246ee40aa9f2146f3a811537284fa597c30e759364c4940e8c7614aa9c67d527c5826ae29c3028fc981a941096009f86b2029c2b7a6b816eef58c59ff3394f9943754e10c484593561064bad981835205b4245386a7b11a1ca1fb58eafc97ce7e1391b329d3992f16bccd6cb26dbdfb2bf9a2c33a33387487de6c3488ba2861a860213f4f80a5edf9233112a0f675b9604e2d15fad386fa439338d214216fdf42d595c5f1faad15e9c534e0349d03098b025647874082133921c7652d2465c659e88c1f4754f1ccb6905bda65104d31273f771dccd4d14c5db39cbdb063ca9ae683a08cae058c2920dc0cab65110685cd25fd12d78a8e29579b2f42e03e53d520d98a47706c3877b97d1625f54ea0f3f9f496a4ce2d101115f47ec849256ff84afb7b6ea6e5a1ba3ebe5a1ba505f6ffeb13ab943730b8ad848366f0649f91d5e0db5fcf8b9d57d209e908c59e8f7c71a423762ad2d185ac8b2497f89bb832d005a932a440e411ead28ec8edb2063913734b90f97403f5ada216e16ac9b08a77471de36c709dfc7e8d56595cc5cfc3086cd20d4337a967a71c2b582834fcc7ed98151de8a89db1f30c6f64e344eda31a1f4c87b3089d0daf970930957bfe02872ceacc58245289c6b7188b5ac460b83a3d3c5c9ded25b94ada1b0f8b6826a7f64e950ddbc9df2598e1526349f8473d305ef286b9e62330c164322a8210d320e7f142b73690c3d60b4c85581c24263cc0d4a28a54989941e63ebe318891f5a7a8c01cf41207545b1d8f0b109348ceab1bff0120bacea03d3bd540dbc100378202448aeb1fd55d44a3ff8542efa75e139095cc5cd043a306494dba83c75a0f0fc7b351929fa4bb4b5e0bd7bb4baa88c5f5922f000afadfba38d1e13a01509c58d752e6165866c01670bb1de6391e48a13b72e01d49311c8a4c2dd7b4fca8ca8ad650ff6f2bec42cf9f3b525532aea4d74ee317cce44a21252b08b750b618da0e19b045e5402e4133071f400c5f7472a24cd16bc46c72ca842e5fa279a024f541e729ec8456de2bedb52cf9c8a9072895d002ba842a7a7f6fa71062629469188565fd114a054fdaca5d35193cf8247bd09502e5050087b7eaac646424194fa60ee25b409ba0d6038f303e68b1f4fa814a3c8d7ec79196cadc518ac985443212f4a42fea21f5a38727f39b93684a18073e25f42cabb9802e4b538506cef66cdb310a8647d2974048b3f1c5024c5f110fe2765444794fd19e3f307de743e65108505cb12b2d6d7781782bf31a890d2dcd2221b172ac73f86aefa74286f795230f836a5860b17387419ca0d6bf27339bdb7fd06bb81271f2e5a23a1f8583cd8b0f65f20e70e3849c7dfd7ab6d2d06a3985944505542680ecc3c7c9d5da45452d805cfdbe6907d66d74e46d38fa49a1d3eecad964550de018aeb737b5e556171afe4ef413c4824c78ed20e222520a489411c2eb2fc568b2218d8c895473a11025db41aa29ad21caa269e7fe8a990118379056120f65dc6e6ba205123e22a9f3de08f89c7dad3a5db23388a4a442c7646a96528cafcb68eb75bc4dbec9dfe02018031d736cb5720c8d298baa079053268bada4aef4bdfff215a8c11b2e0917f5d67e98f84a0421df64dae61a039b92510e0ee87ffd36d758230a827326e07842c1162903424ed915dee610dc963cef3222de441e29d4b7c13ab041767aa576283e0b9d30b617e093766779f3af9f6e42658e03269466666db73e6b5fb8193a0ecfbe7d7976f1eca607263d050241349bed73663c30b490e52ecd8432a9ff0355b84c6b593c39356f1991216a07ebc21c6923705bb21653dcc87f2673bc80c9d1927e824b94c0c0a1cc489785df82ec21339fdc8580199b299dddcb6be24e00212f2e516a6902bf0a05a63559f28147a41be0aa58640aaff67e1917ce9a9a1df608565c093d69f200aeee59612a270f5ab63936d4634d74bae66cd1a78a3774f7b66c148e8d8eb26d18d70a74538f1f2bc4565ec43935522bed551dd53e205f4466ebd8d3f7b882a80a35ffd36caf6fbeb069e2c3ac89b172a109928f312f42b5c33eee9833a36b05947a455fa1e7f135fb450bb799da096171a42cee42fdb7a95041a5a1f8c4bcb70fe47438dbe69e927c8e258b3397c807cd8ea1225593881a32f693ca210e47f8e04bb852300a4cf12a0787d0f955e5da152ff236e419c38b4247de63a068c0c842004ea89b64080b3768bd56020ae2023f83b6af07daf9172207f766a256318ed54209f7ad23c7cbbea9de3102b89ebaea1ab9848207fa50b285c85722aa36a5d814073c46d557237139be965aa3eec8812da2ecddc62bdf25ee9a5b69af8e5adb2283960868ec403b443ad854cd74654b3fcbefe2c1a6949cc5081bc522d68f80d7446b9cd1960c36d10d32bd8eddd3a3b987b2b9f3d2b61c43fab6ebe9ae99907d4d21763b48582813435d6053544b8c00082f0f044772096dd2764d967425dcaa978fefed9ac2eb437a4ba9c1b85abdacd0a3467c4ec42bc47b5a9a42a5e62fa8805f9cbb2829e5581c54e994e46498452a156e62b9a28103065b8225192ac5644033e2e1ac908f1eda162a2d485442d85187ada46b8a8b4e89bfd1f1bc1261e7b91b3e055c6531b40d0b87695aa1df94ba05161963a391fa8ab487110dd4635aa14271d32eef41c88d3dc2c94fe69320b965646f640bee25f0987f7f1c82a1d45d829675fa58e900745c0dfc846bc11272799c3b919e3af300d496472ba61db559d8205c8322fbb0a6b4f37a40c3f894f0b8a1a26dd21274fba73bedc88b608ffefabf268bf29f9aea052ae4dbd039603485a8736d04b86a9ef892671f66ecccf542b92f33e68b94849b716a9dcc8a913ae96d49f7901daf7c8e496f3cd001386dfd665cb43028491e32f1d343fd62bb0cb423bbf7e6928725be5673d96406f4cb7828643436c1c92788fcb9582d11e55ec0eade03bba3270fd4767a95a43a0fe9a9b4c43c879f6300cf84004404fb5a84fa892566775b4e27529763b729815b22b117456a2eafada075b106a724ade556bebdfabad7e19ebcc38f2de709575a8f728dccd668893861c00cf0e880e17714123a94c29027f1985a39824f8aa2fd31f56d4b24120b7e3c7c43385022f4ec31ae449f3c2d331d11ead53fc902ecd6865e8ce940670084fbeebe1a0f3ce00c2c47cc96693913507225afb3355d8e56b65abcd0d9c5b6493fe4a84dc20e78a3c39fcd1c31a1d003f498df204c9679286776b3969d01443d0dba79823a0b68173b69a9b9353b1da2ccecdc4789d216e88126d37775511220857c5062026bce8256c3f1a533b81957cb27b3535aabb144d5827253607fbe7c8d1511c30cc6372a3420d0d5214fd6187184a8bec8b6678317737f81d767320556aeaece5fc2fa397975a50b5c304cc26c92348ab5b9af3875e652c9400f16e56e9f4cd7fd5db8ccfefe16cdce074ae032f40a1930af109dbdd5118b261696288ac9d4addd3606348fa552804f779120cd29a676b202dcb89b6ee197306fae1b6641dee1873dec18322f4378f6dc305b546b415bda5950c020c2731ad75b6e388c44ef7e3aa834a314a52dc44425b31375f1bdc0413a4e8fdfcd60c3340dbe39b6618be4fd8561b2e4d900005f414ec15ac99c4a02f0245f44fa7e66b3349bb6755a25d109032f5d5377f31fd3e89a62226c23b2b85958475bc97bf07aed1e76169c834e85e66dc8c4c07889031a76c30f533446eea0f466c065d860432573e55d9544a38ab7d32a078932bbac15c10d81ba4da28804d6a48a0c1866d9f40d6cf012bfc98e86860c8597e4defe26dc373678a16d0be3520463c67731474133fec4628baed07eb34323d504e887fb7f949f62e1ad090e37c10d530f6619ac0f6455a98d09c53ca787b79aea7c3ba31c6e54f8a0880912ecf5b60de5d381cb685c9830b96bc6c671c49783fed59c0e7305dda49c954881a5a56abd100c6e8418e0a0f078a758802cf3b51a33c1fb65bc213a804f80885210dc7fd5e042418487ef97343bb095d8d70e4a30be1b7070b28bcbcccdcaf14345ecd5691b75125891b1c36bbdd6a0370f2ae890b603c7bc05633daace776207dfb955c4c27508c2866a375652a6936eb89065fb6e142aa6eaf04498f46dd648c24e07083495d04c3a8e51601446ddb47396163d5089aa6d5c8ba4e36633a6adda910b65931594ea99e8a2d2a4f654e7b4b5d3381df1e025cd6fff6120fbbcf042d0787754edee6d8353339be1f970fcf5da2d8a850e4e9a70a54a29c38e1185b84e7e7602ca2389f8f29b958670ca7bbc6f0aa9c1e59226c6ca6009cd811e8868438125107237be301dc71207f071336c38a907da252bc6ae2b454a45cb4752ce7c3e068053c04b14ee52475ba9a98b3efd169c396e6936a787eac7cd4c044f8251ab6c432602446830fd1442960e6913784ab37a196469c3b3c519520eb8f12599ac8e8bdffc57e39591cb0df79d656e647fe9a3d55246d2657d25bf252241afbfdf5ec546cf5432f85d6137b5cc16d55736c09d39d23a512e52bdb62a17da418f4692c777d71f328993b2dc29b921ea38b51cc7b2d2535cfc34f19411df496eac7e16be24270f43c382a50cb937845c799b9b51a65e61415e49fd0a4be6309370f31c61e694f71f5f1dd7c56710712de7352ca91f41625d8443734ee1bc5b5dab74b9d58c61c669d3e0fc0b0352cae87a577ec2e64e344a2fe6b5d958b19f20f2e00b3780f9411237417251c687e45ba1f101af1c93c3adae6e178f8a4953196e033fded1e523e599c5ae26240b832bf698558be82686122afe4ca9ed56c8701ca731871c8cc65cc3c11e9e2b25cbc6fe85a0e7f970c864e4a4d508865714a653d14052e9800c0c7225ec3e724bb6a3aa2091d6d0fae8f588b595e200e836a1811497888e0a69419a7f2cd2b76204445284ef7af2e0f054154c3aa1459ba310b817d4785c86d68425f4ed4335130a40fc0f9ca1125d84f06ceb21bbe2e965893017a1a0a6dfbbfd2ad141174f86a3933faad8b228686a701e22b5f8a364a6ce842ea42317e55080f961d84487ca8d7f14418bc854768247ce9928c5e0abbcad2e13713bfee80b1fdea08fbf945a008dd397dce406743390302733cb57fe9db14ed3c563cde92f3fa4d42b920051519874093bc2e2cf67499bf74824d833995c2b141b278d43e89e8bdb73570be94e28b5cdfb3a24b12c6c7da0495d929eb088df5fb3be52646684831db6aef8539577326b3cac8098c774b2cc92e1eaed4edd89ee58c0a3840282ce5fe282f023aa41262909998d29017223b57f91bb258a279531874127729bc6d9b87f291bd1c80ca1b5a33f50c0acce26e18e08ec7b413951d7720a0b9096012e91dc3748d6c6bffee33fff597e5deebe49d2d8cc0065160b27caa251a8e0709eb9487d6a4ec31447b0425167fe6d69e9ea88377ca8d0de1a7c50276920f202acea07fa5f40c18e389ccfb3647f77856c09df6358a7ea27bacb8285d2e908ef60a108dee71b70544149481aa5c4a6b5e130b5efd0022f37caeee8c0c52b0743812020ff30a2385b75c0225e58e852c136fb869233160a62ed3f43881d927d2c52f69bf11aff8872ef0b7598a0331480f769d9a6be656142a4bb81653562d9d27357d1b320c845199c2077982ba6fab4e084da8fbd92e7acefa434861d1fe886ef51bfb9346009b0209a88bd954ea7d2014e5239f5bdccb248fabdbad951d645752b791ff230edcddb1c144e0cfcc411dce0950e6269f31f78c2805fcb185d0003658c69877274bb15d7189b8399080cbd2f739df7732f31532735e855bb282c29fb71a05785d9c4861863bbf62987610b6a21ffd50b3950a676b78bb3f7b4454213e7d6289e253f7193436e3b8f458009d2da5c3bf47416111c12ced2d4885cc84089767116450e9218abfbfec140fdd3d2c150bc6d782effd4e128a9f9e8d339b11e43e160168a6281cec732cc9d7e715b301ce46baa964b07bf81d16c1f27b0fb5a8942fef194a0020aef59675c304e42930eeea0793fc8ae1559db3af5d62b60ce1b80eb41a4f13ad17a8132ef5275d70edb434e50c98a9cce5eeaee5670d60805401838842a20aa5b6907ff4514fb3cf7f1f5de3520556c9a92991640886c42f6de7b4b29a54c49caaa068f06fd05d73be482dce762681c556bc551ef54aadfb750b40c2364a644b1a5cc4d06da09a04002440c525dae304aeaa1866a6679233c494a15e25c92a0b810e7f26e84db242dd95a1a66d20d7506a9494972adf37a49327ff40c2b1c3584a0020c1621a088f171554484290551fc20926b7dfc8329d7ffc0bc77a1de5f8f6815582521136688d10e4b84f4e041c895252a2b41a8d0e08bb7a481b870ad17d8172f48a4aca04011a4ca0d495451244999a71e00b05348ac0c1b68b8322226882523281a4c507489f292c30e59de082621ce65c96c82a5987ed86817265b99d02658aad68228a931006d0a1dae78c92207160e8000629ba2e5052780d8281c34d47a7431e284142878c062880e5b966862a2a826e40a792509fd71255b6badb5964b130c56a0c4d41247608c8e386286d41722866069a2cb8d831abce6de2427f9fe10e296cb054d6498ac80820a33434755115684f13205c4290339c265b7f406a838aaa1c5862c281a13a89161410b4888c961cb0f26f902d9e15a2d217d6276a08b11207a08e344920dc9892958b011a5051b3f6c963be9bdf7c28cc27ba9df1be68435d2a97d1ad22950342431244b550bb8f0b0c4661525088d2b2fb52422f3857cefa50f732194390c3b151079992c6420f1001221c8ca328f2b44e9ee9e73ceeed9dd05688d329838a72c8724d410b2ca6d484ed1845c424a960f66c897314b4491534bb294fa22af4091420c21a5bc7cc1623e31a046872f1e80f1e0855a6f6b24fa818814e2ca00aec4a6c8f24524766888b5a085d195978f9d234227c81e8a58c82af4cfdc20036a728be307b2509fd608021e5e3d7ebe64e95965b925cbae3586c07693c8f21d1cb23c1c94d51f5966f9125c80dd81b56429f3254a9d52ead49d5277a7943a9d575a63761664f92e5a9641598a720e40fe4d8a22e50707d0a6745f474919828816684d7a90578a802a228a0e42f0281242136c85a0a20faa6c23e4fb1727f040b342c3b2fab0f5f0625563f8c480b1c3c4a7aa861425bbbbfbb7c3e4f670caae2c6b3dae64354d1e68563cc801f421d75a84c600365cb0a10b1463ca8491b1430a2b4844bdb0c4c8103d7cd01e40a07ac0f0e594f9fc895756aeb522013a416b7d0955e3a125d7eac3c387dccab2c6c3890705860de20789058f2796b29eae245164810073044511254d5049a209261e4b3b70086d6d2789ad2159c10c5ba8d04264476d0713193e720c3144952044c430c6b3acedb0c107df09e282055140e560459514463c5aa2e4c8a28a133d24cdba9a0c3f5e4f3b426eb2aced40ca5f96b51d37947694768cd464c8aae998d56428ba614c71678f1b5190bbc7b2673efec28ed53828039cb68a9d233b4b55eef7edbedf2f4de8afee18a148a1fc16e9ef0c09479a69900e51bf7d146817caa0ce84fb27a0807eff9241de5398943d9f312c01f9bac89296314c96c917a643f441eeffe0037719664531e4c83eb85a2b2e8e76a708b65d9b21756d368b522ba538b97edff0159247e6d14594c38a76a7478893e506f2fce88793a7f70a7678e8d849c14e0e9f5dd43b39a26a58c38154bb81a3890b312ec6c8fea24232f3e50b9cad72d7600893bb6535189eb2cccab266e329d7c0aa1126cf8c39ba1343389f0ed11f5568ac813cea4c10da82429da833c511748cfba8c8717fe54e0be1ccdc571df9dc4b1df9f73bf955478a0cc0ca34731c0772b21492f3e7d30eb67323ec5efef71cf832f69923e818f797f3c28ed5dc7dc7fd54c7eabbc022f49182a7d36dcda617b97ed3e7d5cf73d0077c8a411004412110fcc984bfb026070310c8f53e303a766107004101a08bac9072df82750f7e07187dbcbf5d277a1dc77dfd8e7bdb1c37a93c25ec8e0be17d99c717f25fc436e81fab018eb696ebd70007c694725cebe0b2d99ae36e5f7a058a7dcc814010a17fbca5144df02942c7ea4f09d50010daba38d22cc59ae940301a068c9da270fc4618f9e6503a1d84b6346a474cb5a3a35a8d2c59d66a38d56af8e82fd77ed9306c425bfa754e1796e4fe69e98e0ca109f7db281c69c8cdd914ca9a8d2799fbab018ef0bee5febe0da63b0d80c2cc5c28836887fd83427bcde14bfe80dc5750a6c38918dff72c48f44d1002f7debfd49bf3a2701f0515709e7200f655c8c952f650908856908816154d19b344d5ad28778c422aef0d5e97dd13dbc77e5fc7246dbe046506c1792867b4c468c9417811eb6f90a813bf8eb9a5ef228bd0c5cf07c3c20babc921138e2f32a5f7a98d91e78bfed9202f4084f975fd1c6c80cc3add77f8ebe3b73dbb75dfab9376ebd2a0cae397696d0656a61fe668300b310565b567b7dcbf7ac56b770a0ad55a6bfd5baf8c3c61e337aa902df774ac26543109effb03385fc2cde37c7d1cd1042ac8114d70c1e3bc0972fee66584d042e88d84dddbfc9c114f9834ef7d8b272d680e74c1cc8ffe93f3afb781d91cd9cc1c08e71bb75e7a4b898cb5943f9529bcf55f00c392677e0e4ccada64a6697e8f2d9e728f611e5db7dca0cd516e0125b7b0b5b071a0364dd8589bb2ad4afa2b53ff4c19b3df8f03c392c7fe4d85b1108e3b52e47eff89f304e94b3aa7f43025bbb873f370f068f862dc674671297994b4e1bcfc3174cd5c405c472ea48e751783e4e9c7817535244fbf0b88fce966c85823f54f57d4b118ba1c1d8eee460743f74267a33b924136dfdfd53872a05ad4b9d0197534ba195d0b1d0b5d910caaee3ada31763d727f37eb0f6ebedf0b71de85f3af191189cd0a61b64f035b21275b11098e58b9489e2264acb9c858dfd430b9eb12b9bf527507fdb5c881a4dbc06a5495923dfd34b0da45f65423ea94ece90f61d58bece977c1ea17d9038682b0fac1aa16d9d3efc1ea1658e5227baaad62a944c89e22644fdfc781552e92a7ff0656c1489ebe158c0ca3aacd81a6ac45360acb20579b03755dedaa2d7777ef8f5d51834337cb97f58ad65b4c8a5a2f45d815e59eef52aa696f07afdf7349ffcec9698ef36f29f12b09479afb6796912728d4af71c8c5500c658f94d1747f135111066b50f6c27fdf08d41901fffd12f0ed44cc89d84159289b44539cb267be14db5593c71831aaac45022e018b31c418ce6341d97cf917249a22bda0cc93f9824335b9bb7d7c38507c2061e71377b2bb16a5a2d509c12c93514065d4be4a78ef2f6598c7396534fb4b89a5a44e415a9dc8c377bd51ebc19fa0ce08e1bbbe84502ca105ca6436fbdbec59264590d972dfcdfb75ce3927046ce8519e3fd2eeee765076dd9fb8bb3ba5945259ad8dd448597eadd582326ae7d37ccaf2ad95f91d25569e57fc212127ebecc17e48c87d97bdf73a6bf17ba20e51b6d6737d0e127d4cf9c7582c85a10c327e590636837c456fa82d0aa80caf3f1a454553d40047489b6a0639020e54c75ae4ff59e6d17fac45d5052cbb8899e46e9ab77f7470cecdcbf76e604092a7df069600c9d38fdd4747fe7020633d64337d6f5298cd4436fb27400681dfffc123e0003228fc7e03c8a0d7f70779208368be3f860caaf97e2019c47dff8f0ceabebf03181c148000ef4011701f1984dfe900473e21d8fc28ab7c60f3d9054372e413c24d8c106ec2d7cdd7704f035b21ccdccfc056c8c99c88e446c4cef3921dccf766add9264f9c0e22e040fdb65c43d3e5f9335e9eff0a5b60e8f983dd492bccd6dbf2bf8161e7719e4bd3d8098fbe476124dc309c2009f6eb832558118b7896c92e510685c9ece1567b0ab22efbcb3a0a2b93db61286819de9d84b357539a1252842acb5a115b1e6796459c9ce4111761ca4590f24871cdb25644479e5e6446adbcefa144236b5add309d05caa50c71426b4384e05a1bc2c3fe0ea59b52983cff1bb2a43495e763297ba4078284b246248c6759234295658d882d6759232204112a24d48a14e5f193352257d55ed1d6da5a6bfd30164f4081028a96315c7078204916282550c034d1e19a42869213236cb042090e50dc40e384873156441c014594db825a6badb57e984937917a556de009135898d470048a0fdf4d0549aa2c4519a38231ad1b124c81224f5196fc80451539582033a5480a0d35f8f00316340b2946a8c10a4b98db0d1ba00840658b0e58c6f898e2898d828a5769420a7b7f1784b34c42b4bc8098acb5495e0859e285a49f6219e2020748469025c70da329204ce49851830627251990e041444ed91031c38f2b2b9a5051d4830f2a275d7248e20a0a214a6aadb5d65a6bbd5ab8586f5ca3d65a3f5ca3549a1f31831c754da492b2a2a6ad15797962a30a2b2d53531ce12235458b12478056fe34886b6d1019b2c5a19d4b0d8ee309265a644a0d241b379e2013c31626564172984a811523803481d609fb77cc4cba4b78500f324a9acc922c7171c052145c5e90c1ca8f3154bc4a139c0f4ed810040e48626c00c0939122783c5d7d31227283fc785571699f419b3123ab4a19166a7e3091a2410587292a354c2049628124dd256c3c4062697e04fd92c311248618b234c5940b946ca07d91c207284380ecc04ae0aa207c183912a584952ead178ce0010b2cac267e60f1238b30566c4058b18a626a8a25111c4d99b1c3132c20513fae6c12356ef3f1448e2a4f74f8e1060e43f8b0828394a6221b1023209092ae2f58f1fe2a85e4892e61c43cc16246c6a740b9e1f88146153e0019d34262e27850414841192048a680caa10a89054b530d3524c6e480438894961c53a3549a1f319992542c15a0ec73bd1307525937280b3bc6496eb6d36a2fd7aa2295e2d959eef787124e138e3a466f74eca184a31f655aa33a666f73cee9802b6f55b4ee6efa5d4573f72a1aa5749cb35ae71195908f3e994e0961724a88391d229cebe35cc531857c9f1385349885f365c7a638e445b207b7386493ab1f1ddde42ab6ad63549cdf334ec9b33fcc59e32eea58eb35d23f77d99cc5b9fe9ca0bf15a156ea97045c0216739cc779e45b0bbab5d5d69fd3bba03f2882ccd5adac4e6b5d10a8383be626d7a22f337d8015a374e89b20cad94eab37add1f75eebc12fa1057edebdf75e9dfa15bf7d1cbb5fe79c1302e0d35355d59327b35d8abb3b9d94d25aab9d4747f68e322a4a8aa5d6e2e7c614b2fdeeb9ce26e31fb2b1c936198b16d658f75eaebfa57abb692965e8f23b4b03c90d6cf2bb380ad1a7b39d567b31d7791fd87285af199a1a9b1b9c9c0b5a8c4255d4913df31da653450c64cfcc40f6cc77b1237be657a7e6e987c259c2a91a26572ba73c7656ee1f37c8b7be6aac1fe296fbef968721a459d68cdce0a10815228439619865cd8852c74d09ab08b3c222b3194594a05d2c27040f43bcc0848fa8295d2410387e185d11254a105110e1b257571d546c455893e31303861336d46852e371c3989a15544b34a2d49260c2c88a67a970c107460c17708caf06039b4e95908af04a714284c88f3c331006869ad2d4bd975ec5f86a302002431e5fd0c8bce5b042ef2a2cca63ac8b2d6c5bfb71549b01e9abd8910a6f160c26c21b668a700788700c77c084e1c518638cef5fe57c4d6929eb645953ea218359d6949ce431566b7c0d5fc3d7405fca395d8d71532923a2b4976eecbc365a3d2aa63ee54f8c18f0c9cb2063d80b7c72a0d70cf894e9eb46ff7f7cddb81b77d5316a3bcbed28ec9872b5b35eedac773f0cde0f835cab7371adcee585dfcb0bbf1738d3a2f1f9669696e4f9344cae5ecaf36b422779be4d53a6add4b1f958575958574da38b6e4f4e504f4e596cb4893477cca4893477cc5987f12a19e6ea66011879ca49c5d94e6bf59eb59dd6fad16aef672fc6dfc55ce77ddef779cfefebbcef035bae96cbe53d5dad0f04875aaef0738143e16be63533e33d677040194dce05a0cca685ce8d8e8ef7d479814330503634f30c6f6c6e6ebce70dbe00b7c614327d6cedf4d668020c846a9e7ef0a9634f1d03a19e5eb799a2fe19ebeb76f57ad12719542ba5ee8f153a082e41219cdcb68e4deed6b1beea182c5391c3baf95ee0d3ebe63c374adced966fb287e6d4409dc56964655d5d595971b7a93c72b71baca91f4d085011e3642ab6cd6737b70eaed0dc6a3db22f59e098a238319585eec9f332c8dd9303b5b09ca7bf8f5a371a4e4c6ea63cb6b05a372bd2b46e7e247b6437b983ea9e3af6d4b186ea58ebf694fb5d45fd73bb6a61b5b26490c43437214ddd474fbec3580847d71012d82aac16cee75ab47a944b60cbf2b9273288e392f1df6e568f38b1459b6577dccd46ca248ff5e86dad2ea59e793a44f2ebcba4bfe792f9d79791e7ecf6ef93d1af44b487a8f49e94d6af39ee1cd7b5d65aa7c4adc698484657d8c9f5bdc3a7a08c5611267b2a28b33a23dcb75f02f7f8af35e22c28ab32f20565544acc755de7715ce7245c31460ce7e1baeae5e478255c5b3f8eabf54f98659ca8bf7a95525a9b5611635026a5d781fdde9d5f187e2009f7ed0796702d088a20737da7efd196b8455f36c1a12e852ed3775997ab78c22c5326eb10cd972ff33038c4655062b08a3357710c41a6628bb443183ccfe58143b6df5f4878fbbdc7b25926773fd22829a594927b92bb7fce39e7ecaadcfddddded61a42a77a7f789525ab16ab5a3653ae18f84f8b9ef820cb8f97b0fb74619f98af771bef761dfe3fcd5efefa27cec8e72d7a8dce2287354a622096c9903b5493610f62657c573da4445b5a4a9a85ca8bbdb673e137250c8bd6934a1db4da84ea5a924646df89784f3a56c3421d36f51824e9b8632c82dda9d1b827f9f8b8a395db739a7eb4645cfe97a42c6dae57f03cb791cd805f54913196baac9a9b01ab4b3b9aafaa732f513f2a72a31caf99b37bae071fe7bd7f72e90841650240f8fac051419ebb7b121bd47197966e6a5d4a99ff33242b881e9545167849b0fb5aa56d5aa5a55671df39f8ae4df30c89fab43c6fcfdce3a76919cc71fe330ccc9f1bfb1fbd4345b75d459ffb86668d5402510e9abc282947d86a956cd28bd6e57c7ccd29df5cf0c918b74693bee93dbc494af5206b98a3436d9e3ff52d82a82f3ab02022665a4fe0167909fd58e197803a4f1657d57550ef4ba6a1eff57d68d46c5ba91fd771c659f49cafea39d651fef53f66ff175eb98ff0f118e1d52f6a7301792ecf1974f1dd21711ceafd36b943e276fecdc3546fd1d1c8a5909e429c2686ee506854ea8df27b4282a2aca525461be8dcd2850daa20e11c5409ed279becb9dcd6c972eb75b972e27cc3246525252adc5a9574a6dadd55a6bb58463b796db8d46d312820eb899bec7495c9d78365b4d2b29d1ccbce62c945454ae5696ff59c61432cdb265d64fd206aa699e694121da36cc3539f68242947a38fd13f2ea39f466bd0ea3cdd3ff64c2b1c65a31ec9faeced98142ce39954154f650eec322968f87d4b8c1e505298eb4b880048d2b5ad842431195b0b3ac1dc9e2081634b82c6b34e4f0417ab9c1ca14135792c6e8f82086263ab8445166062592663809899b346e928d7c9fc670011f81ca2eb2ac1d993a72836db652df9c46e7ac4aaafe96916152214c0a2615ca29b6ad5a7945b3a9d34a6bed76827aaa596c1514c2ea916661615aeda54b4adc489f9ca09eb2d8eec594eb2af53cef3d0f365224ba2389228d74892a79de47c156a5aeaa30565557b719ed96435088d297df904d9a1a1b6a63e33d6dbc6f8e2ec59ff8d7d1ee4168a79a5d0947dad4721ee89aa9b9b9e0d371017b51f357628da7acdad64b7849e8a4a5f8b4938ffc79d54078664929e5cf9b5303cdd9849a59e654982cadb2fc4993933693e6d2129a139a942cff020d34b1557895934523cb9bfc39b340ffd89ffa2c3950a174dae05fd8806cced32f67dff77ddf275f3fe2fee9b4c9fb57e86a81ee713634271a8d46ab99ed98cd66331aa79ae99a9a9a9a8a8a68141515156d0073413f0b50492a49459b7ddff77d9f8f8fad26fbf8f8784ec5b95aa0d770eed1d09c684ef368b419d03d0ebfbe2627dee44ddee44dded4f3bda873369bcd6634cff33ccfb3c0c7f90cbb5ae0e72fcc8534271a8dc6d1bcd98ed96c369b7918a7722aa7722aa71240007866f2a4d168341ac7711cc7cd66b3d90c37ed829f7bae4b6f98a339d168341a6db663369bcd6603e899b71bc618634c29a5944e9a8f38749a47a3dd9b7df0738f6b594c3b9a138d46a3d17cbe017c7f25545252521229a594d279bbcddbed6a9cf366a752f7fd75a92a55a5aab4411e2b48e98d5e79f4c6d11ba6b74b6f96de08f011a00005f8268c03a68e7100a3839f0e7e7ebce70f6e5bec3fa795b81ff1185ea5dcdf4d180a7494365bfebe9a1a0c3078f1228f5569830d40e8db3607aa535161a8acaafa968505e62a561b9770620ecce1acc06d87ea0890208ee838320407c79122184b648e18352d51598ab2148509638478ea1104113030c8282ae2861d4fbc40e649c73daa2d2501f4448a881a8aa0b224ca08c98626be2cd123c7935ba3054b52b7d0a37215c5bb12c5d212259696969cec381165044b680408234e46a6188162a4c988d5920d2359401a2627960d25b58a68f851db60dcc6b81bcb1bab7d7c890365299a3a0a33b3cafd7d95fbb3daa3013ebd0ef836fd26e3e40bebb260378463bd7559b7abfea11294d1561194a723827f7d99bbcb6a6afa934dc5b0ce976e65cf75bf350c31e672729c075b27aad83d0cebbb4c66fffa5e5d0612f55399f40b0e61b08a3a441cd729f1e48bd167b9dfdeeb79d7bbde187bfbd5fb1d6e7294d0132f88df13a9f27def7ade7bdd7f584f55554f8eb0f2bd3fe79c73f653be3f7677b757a47cdfdd9d56e57b9f525a9f547baf27be0f1eec7d6881e29842065b8f5ddf7a07895c6254bedfb2c91e78c5d132e57b3d2adfd104b6cc016f9a4edd67de0c4fd80de1187a072c2dabe58d1d9f24a544b24a2c9265f221ee4389fc711d32d64cfde3b38e0d71211ec4931c880cfae13338920cf261911cc836790fe7e13b5c87cbe029f0990c9a69b248bee434e47e579a79852e9b9a6b682c876fe7b5c0efc636d9a63cf30a5d34dbd4d0580edfce6b81ae70e6157a76d9d4d05c3c037b75e7d035730bfcbc8ec3f7a6d2cf385657b9b368e4b6316662a57a1dc23196671d1361d8dfe7ae117272a88c62af821acc42da324aa9e7ba0198c7a8c4ad1636b1746870000400044316002028140c0a0402913047a328d5640f14000b6a8c486a5a3412c662a12c48711083310cc618020c2000184080018649a5370a5632a644d9207b2eedb1aab1a70eaa04ff3963a19286e99621c36c4042f03f0af78eeead3bc5deac40d0a237dd1f2b1a31899469ab3502f4475ba992ff11aa6b5b7f424a21953d00b778e89fcf15e00e11a81fd6a181323495e27204a06d4f4c8c657e635e3749b68b80318759979a1afc8a8a89990a06aa98c23a0746655606e4fa065bab301e4700bdd81e4178dbb823ae75dbedd64845dfb44e72a62f40131f285239ee5f09499c09822bb7273e2bdb7e7a272da02ee6447e908fdf89d0cd55069119c8833af2df3cd5e6472ae657c25d4c43a848f6a59c3afdaa0457d63fa61a9618cac2cdc8b1f7fb79767148db6d88123d444b53fa831a23035665b31d4e1118fa7d295b062dd85b62d5fd833b159f4a535119b472646575d89f7ba5cc06c7aa77b02c2c99dcc5409db27b6be7870f26ede142e7513c6084e295d0d2f84efa1bf29a937682dc04d4b8f3820c961c8677f1000acf21319f1db17d9c3c1065e382086af00eec621b20e43c17b59b5aad6f4769b29579109f4b86e6843efdc3b676c571e0a359d2466ca856babd87ca9bee13521d229d87653b4df5d671967899f98f67a08076c7d9f47e29313a5d59497706e84f65343cbcefd1af97b5cba32a410c1312a00dd22d4de94a0ad33d425d53f84628d31d70b45002ac8f917ffe08b806bbd07a984b2995a7c1305fa63d32a8f460d6cb6b532244ba02a51c991517de83d1c8bd022659c8c348c49456ed035a263cfa36754f94f22c36b8d214a03401d6a9bff1de0a9472c7d2d4906c57a205923abe1bc5a2c741bc69a66695a70338a4c14bbd7130fe059261aaebb9349548b10943e80498f7f240d1b3315a654351994725c6544f3f497baa5563665172ae61eceb801cc1d7d743247805b4dca68befff0a21cae5a16d7949ba3e2d5f297668c1aac3c8c5454104d8d22e47abb23b15c67bfb243af0fa8c7440d311040de64735f047822ba230f804feb6df059c6e00d202462f5f8b824875a3ce7fe7128fb20d51e4fe16fa509974239ae6c69af49906fd840f2859eab2125dacbce664bdb1c7bbe3b54d59437b72971645a45e19ef5abcc1b4070f4a71b23ab0250b7c80deb2f905ab035c629926dd1e4db350af81735e6a8262d7f1e582c0aabf84ebd02b42352ffc6d36a4f615e1c84ddfc5335b1e82fae5ce1a6ab4e5c02d7a97ac80547d86a6eda3b11b56a836b31d2714acd2262be8f6534862e89396b01b31725b435f6a81b0c1fd033e160a006cd97f804c01a49f87b6926ee91124a5a83494a26423c8be77273a60797a7c83922e82cf416849bfff92da2f9269206580db5750e016d354b8dcf0f2b5fb6288f4e8fdaccffcee14a123a06a39fddaf5a6af5bb6ffcf47037c110f1e00eab25fbd3158380f5195d0e5ae34e9406253d1ee39dd084ae7b09e9a9da0e7850af6c584d00c09865d7268f5cb3f325efd1695348533934c9eaa22ab2aee6b11efda72ba7281c27cfd69208321bbb11e46aa8e21acd61386553d61b02992e7d82bd33374ced9dc1f3d1ee2b0be4859050395071f36cd70ecfaf9589e38a594e4faf3297be3a84dbf934fc77db959d0a336139e9a08c29587354334c4fb0fa58f26c0df8b3135e00495389ba717f660fa652a59ba24bc413814e0ffc571526f8d6c92f29e20d9c603a2bbeaec4e5b32edd79278cb1d6ff81489c3800329c27f2b49373bc002ae46b194855335a3e3b01f6bd19b9ac841b70574d2df53e6dfa96c001bce7d596e6bc5876ee38639435a182f33450f1d094f0040cdecbd45b1699e46c58bf282abc84d7a5918c40ba5af715813284cb5902e99d91dad0a4b60660b071fe99807e9b027a8af3b456b6e1c5c48385284d9749411c25141ce8156f6a5126092cc705e01aaaca48740bdc3b50d2671679ed4e633db2a1e44dbf5f2243ca09086a76315c69a680f04b67a462c9613dd4bcc89ae4e8c85cb24458bf30de24600dd8388be327d6085b48c31a0a1acf46b0a9d44565f1869313c0b7da36cfc69d8a0fb6784dbf1583a3cd4c4e667f1e6e61d711cf389b141b115cff42629c2de7966bfa483555205500caf5c368836935ccf4e13d1a48b046e80a2a8d69c62f092b3413a95481575d4665eac996fb5680e978c46c424c8e4982f056ec9c27ae1594ee026897d53c3f965ea33300eeac6eb2a320ef4c821c4f9adfff41b3cd019616f3741a39507862a0630fa6363351a5ce71c4b6e3559b67bf08dfa252c190f08007c08ddb84968688bb4abf094dace2af619dda83b5c7318e85238ac0f66b0b10f18c366c958260fc8e041b0ec3812ea6061a4732d5196685c3dc4bce02064ea173c49a9b0dea6a8cbd3003e30bedb134578f72cfdd6d4da1ab08923081eab9e07418df6ef1494c9eadf4e2b0bf1e605fb02c46a2d9f33de472a38264e078ad2634b4b7e4324ea8d871b2d7296b3652644836699d6c5e789d0e657702d6f14d5c1e7f7c9c893fa41c31ed657a3830bd745837fc56b228a4adb8053be2bada9d4065369c8eb3a3aa35bd26be5bb55dfd6309f9b1de96fa81d9c6f48ccccd1dc74a98249104a5828ebd1a1a6b19c10e3eda23d5908a816fc69b50e173e44c1cc7b8f0ebbf113fd9f3f860687a65bc2078d99fa1120ff0ec1a921ef65c4de1d6bfa9d35ef245864d4cf2258dbe0948c5ac676876969fad821818f50abc7597562e1a5b8ea9dd4d930231e142cbf4ee680ff753841d523176f99b1d6ee914ca5e5125cb660d05c044246145159a885bfb908c4391f7696bb2a12e5ec86cea51abbb9e55a54572a6a835556cb280adca308454cd394074ba38501a3d80f634611637baea948039a726cec18bbb28035b54d89d8b2c648fd4846936349f5462cddb855e1f7fcfdca6a1d83343186116ccf1b2cfb99106e5d74a70ca56e91d7385ffc311c2e87f5a6ee736d42107646bfcb0eb0537bea74b7af20d9c493dfb029575f2415587f8e15582696389693acfdbba3f308c6e122ea3b19f28da1afbe8cb8eaca4342a7afb426a51ea2d050090d15d585687359d3ce9c0374d1c6268850fdcb8e95b69a106b4340a27b5dab0991d24cabb7b0ea40cabb50a46bb4d388af991cb3fdded8109d01bb301cc1c167b7ad207d3781d4e1f15eda28ddbefc15ef8af44d33e92385cc6e2a14674b7f8225b11ed662ede7ce6f6e49f8e8c87fbb26df12c203c967a3f781def800dca5b8718944f1db4a9f4780c0f8b72f1f9956c8ab8749d4313437990130b13ea10af068323d1b7d66089ac856602d6431ea07dc73465eb3ee8b3c5bfc48bfa20035497a3121f08f7c7c67a7edb38c86586597d298c47d1a6592e5991c1c251bcf417a4647b3c43b064aebe68f3b181bec5daf30d5bb2e898b0b92e188acd9daba2c56e85cecb5a39151144db22966bb6c5b8ea5dce58112505c3252a43f35547586891ce7e4fc92d56aa92c02d7dd26a5bf6b7406e0592a891962b76aa1953b79285f90fa64bd9b906c1bffbbc7c8af9ca529e56862c7f9430042729aa87ddf85d6ab46b64c8fad3cd9bd53bdc74c81098eeeba5fd6caafb20772002f68103b3318a0fc51d6e3a7c9cfdd64aaf07b4d02be3ddf279e43d6ba9dbd9ed16a67acf98b64ed9486469d35769856c9369f5d06a45f922b5a1cca1ac8d220701f3d9c6af4ac796c913e1d6b9f7d6450dff1c0d17c0ebe6f853528dc16c859cf54c9a0433b0482c4ec11d2b1c5626660ba0967ff7217426e757fcc13a9572b6157815d17de920e9754759d0e92e800fab96f72f14c24e6161756ead073d64085a5b80c284b47d398c0e98ad15f37c7507869d4bf41d494aec1cabe3ed0a185b6067450cd04fe7368391bfb395421f6ef8de163ad678ad47f05dd8462d2230a3903e14071982906e67390ae8aa3f679a04f5e25962513692da06d45d777e721ca015c65c201426e4bc4b6466cabdec2902f15e61f7edf735c3eefcfe171cdd129de18619688f5bf65a043fe65e2564982579998b88786c1e8f4f293dc25e8c19af6520fe373f7f91c0cfd3bdced93ab96a5597f07c195a755f9c083f4da7d7f35af79bb57c5d282fbae10a11bc26774afcbf50a21d60110ae9d44f467c625ee810db842dd38f00aa835f048fa96252363fb7bd53d94f3136d639f003516e4d9f7e80aa844d49078882b10403ce61c024e71850f21ccbff28aa76b30e6342660b3f01361eac9d3a5fbd0ff7ff036b1a407d4e32a8e9d44155edeaa652355f3a62fbb9f82640e5d412d51e144d69bff6d0690f991fb10f648a6b10d7663ca7cd0e04cd208a620204e2e887ad1022d1a3927cf15ffad6b434a462c501a38b08fff957715ebb57177746352d1820f6e3a90f28a85baf2f54b8e4db2ba81f3d2da75cb3afceadd96a2aaa2b055b5cad9b1a7a1bfbc43841faabc6b1043688892204f9a82069467fda0e0ccd68c0f94ad77f76dd9589fd6c98d4095d782f89256237ec95cbf1d21f6fba3fe05cee60672cd895ca163cd6f67d4a6268b7b2e5a8ecc56e0cb9ec6fdc58df84a20f0f87011877a79ecb10f967756cb1f0d0314283108ac598fb2eb68b3d7b4492be7c147e48abb649f34f424e95d443a8f277b280dfd7d24921a1a99160a461b966950ab596bc56af093417f9f0069a15e76a524830891545f1a0da87ec08512f182f6976cd09bc81211913660fa6203899f474d5e4484b21fae5870e0cee510af69de42cdac8aadd683e0f033cd620b4ed30d068dace58a1fafad7ceae658d109d5a19364fe96548d6d256217cace367282f31144efa39cb185eaa860e72945046154e72077a14c8d3980fc6917ffa8b25ecbbe2d85e8dda292f7f2f17e50936237ecbfcce52fd862e77d8c6da1c60e56eeb462f0b1dffae6a4e867a1f6b1f1267c3f820120649f74c3ea99a98a93359acae8a1ec7910b2efe99df9f3da7d6c2510059660382226244beaaab7b5dec40968743530d9b1d5867d142696a8910e137960d647459b652e8b59774e9921af798501f29888c03690083c3b10ef02bfed74ecfa10443535f1a3ac3863ddf91040e8180a9db7814fd4bdca8dabbce1bef233aeeeeafc052a87404619445d41090c64d6d2dcd51bb07d627ef976384b502958a2414989bb1abb0b2383f9093134195ecdc6a5adbbda843fd81a05b2fade68459a84bcabf1922000e1a638b5414128243a46f9ee6a924b6d6f8fc151d72eca8f5d00babb7a1ab67e84f5c9daab6fc60b11168dc742b342e35bae5169ba580fd988555c1ad8f4ed76049f797c31f57c4706be1a800958937781987b3fb16e7d494db0fe61c794dd1ec81290a07f42acf6afd8d67c2f462a88443b1a0234d31fb7d45b1f690f2d79dfbe8e7daa0d42c3725f9518fe4883ee28c4cef19648fc6c2c31cf0899d6bdf6438411c80862665b993218f807a35bfcf0a21fcd0d3a0847dd83e11b3024ab51979c1be9a5222ef5c8ec0ed50b9d5d0a6ed0543dde9a2af2b34ea8700910a3bbc87717ea93668d0f5d813e61386cb6bcf91147027d1ad78ef1abebe30f81e397ffb80c1f1d8d3009ef0f176441c280bf7ecd48914f0c659ea05ad8557ae6e3621bb8b9b29447ff58fd34ffe056cdb3cd7921bacefdb5ae867d6acdd5e61f9aed14c83325b66723163447d28e78fe31fceb7d889670b1452d801c0980b4724038fc322388b1e31efe60bac6b4181b946678b67991ae81ce479e526c8f88abb9af41452c4ad0f13c74c6dd0eeb298ba443d69b4078e6048b4b002c1171fda9259d9f6dae96d4dec731eda2713baf46192469b4bfd21d475418094237cd232e61af2a3286e6a381a0390fc3efa6df6ac89e153914073a3b827f02c073331f6c41d4fc1e6961eb63446ec96163164f92ae5e0a9fc346265974b298ebe9f4d93993090bf6de51a9de17be4e341fac65ffd7581de0f9ab6ad662df04e7bed824489b244e61e06c72025dd0d110fa5a461727ec0ed55e185913c86e12090aaf62556d51b39cbd2a0f14279588c2aa238a1552eebbe983d89006d2c89cc7b333ac29191568d3054340289bcff42f2dac0000d528807c3e4583c3ca9f7007a33cc4d4206f162a06c05291e3a8c79cd69b5b6269b31962f870fa2be370a07c01734d8463d1762576ebec08a985f718a21460d730808ac10b2f2de6fc35873299c708bbf9bd9142ac300d5e00eb37c31082ba3621ec17f3d1ef2e6d66bcc0288d02ace02ee394d88d0919a2b4194002cd86ca2a64b595596f98ed8493cff602d175286bad01d1f96a47dc77554ce07c4c9730cba0f64836f3d05f763aa174328d4e5c38f0b95e93845d5be894e3d72d5ae3d251c0b1252c16379661822ce93bdbabfbd53bc7dcedcb700256b8c36c9d4a9ef725183628ba537cc32d175e4541cf30f06c385a38befccfae0b5a5968bc3d8f9ebcb8c6ecf8ed7fd7326ab00372ed762b8d702f70b10fa376932351af367ea93eaba39127b98204b9b7e6489a20ef23b154b0b20bb9d8545814611378d465d6a70a67e6b0d5716bac63bef2e58cf1b162a9aecef0ad7eb867246bce473bcb2c9256bb126a3ccac006bf69aae5e3fee8ada55b6b62f67e352f878dee118d3b568de3eef184bc6b3b8d4e14589ccef06695617b34a020d91b23e61f870deb3ecda293687842d6a2c7219b419303741d0d8d8a8e835319ee9f99ce73593374ad9de58fb6dbb5e968b8b2e9d2a7474c37d66906ba792e139e177c978c30288ea9fdff005828c83409b516a7a15c2d2da61ae00efe61622195157e55a14dc7ee7479cbe81f8cd2b3efdef7e9756585251af1400e63be48d3f344e652082eb73a37441b488c640b666ab82b4b96bd2d51c53aca904aec40cfc1c983b019d82cd6c675ba93d79cd30508a023eb55bd86b8befdc37fa355e5d810cbdf132ed58583916ef788760e23b96b1e99489e971bb8f067784023336ff137c9e150f437c6198b522577b844258ddf6f3c36f79866faaf0e67633467adbaacc696ee4a785ee4a01884221f7cea1399c11f215977e6b2ac21b48cfb35489526a6c35e20a0bfeec6ad0f78622cb83b40a3c17c118e8c77327d23cf8941188dccba7a0a69df870a9b68b017a5939fc4ec3d459830fc16d871b2c1ecb06cf49bc5114dd9dc42dfeffc7f56f6778ba1d5dd8a620ca46ec4d6ed8e0e573f981a29d8d470157db3e76fe9b9e9bd09b9133053186d75f3a2f518741dd8d8ba07dc472bf069893ce76ea135ef72958bfeec5a6c53ad4294582b66e0563d24ab8875b58a94986f1d34cd82413347670b485bcd105d683362e15b01f9c23335a65972260b34c51b61bf8e79c031b397b658e0351f5c0387dcb3d2aa737bd4d04d20fca91cb55171cbc109ae6d1d09fb157b838805ee9456d2406cf8314f696032ed9879ba23f369c7ccd31d994f3b669eeec87cdab161e6f4284139e5a2d520604b2ad42f2c9881fbafae0dd12cd66eb726003c2b0e462f3c9ec08e252300a45e49f425c4a79c9eb276b8aa767a08e75e10a01a3aabce0846d68e62269a8b8cafbad34f30b34c441727c6171a861672b99981b057dc16baf78e268d1840e03b76a43a33c5caeb872fd38316ec62b0db44454b79fcd75069f079cb668044f77bd1e14cefdeb7f0d04bb6344782b82da0b54203f448a08309d8a96b3b3ac5528793b817ca171db1e914cc602d7b45990119c84ed9e18251d1ee4829461b250e19990e9cbec566103d73a69d9fe569269ddd3ca22109e3ac07dc4941f29b9f74645db5d050341932bb5bef0235a4a2036a88dde7ccabb26e44b353458aad46e52eeba57511a81c114dcd1cef242e0b7c56665f2faaacbb8e0209a3ded491f9bbbcd394ebc2436c7690fe8d080eabe2931c4ca0e19c037d8bf19ce314589788826de76cc5e76cee62c1ba385b332888a3f96fa2841535465959f566ec46f4ac411e422efac3a1accfd84152b63e5da0e29facd216231d05433c071258596d856e4d121c5c6501e2443621f6bb79e6d29ff9c99572f6943d9ab98285f46fa90b46d417dd3646fbc46b67e9b9931f74f9b940066c5d3135df6353e3b7ecb3304960a76094a6ed16be8568d19f1f2c93f4f891fd030992ccc60678cf4205624ac2c24a68bec9c1b720186a27540cf24180289ce52364198a423a49168de06bd74e0a8b2e54bb2471ddb722eba577335970624ab3e59768049c3cd5b8f24ac9406e20af9e5339fb34c1213a3ef946f4803da2390c1825028dfe0df000e914edb88101cfce196fb4fe805f8230dcecd69f632c7eea8b64a7dbfb5b9d4a3240f283d03843fd4f754cbf2a83d39e6e0e4d19c472ac88e463fb47377d586003789220c32a410abb7551949d2a4d608a79e59fc33f94194da65c6b56ef693ef621abf12c7f9a80ab843aee1db4e132b4fd701574ab96c85ab0616bf1464ca48b8dc244638317dc40c13743b780913dc8eb340ac481dd565817d6ca4688f8abf49690f7e9434c3c9c848f912907370094f563ec3c226fc7f9e5727342431e2ce60fc1d0df2f307b23ca6ffeaf4c2ca9eaf3f19fecff736d1a9c5aae6e72c600b96a244854b3f1535d41c17c1ffdbaf49d496f110936182e80fc610840b4c7d10b233e82767697fd8eec76b04904e2d2da5ac9c6b6d0b4ba282ec23ae3d77a7b69376acdaafdb295648272f0daa1fb6a194d48118b41eef207081d5cddac1a2bdb7daa41011f1d80f162884a82f570a10de80d991b476d970586971b47a81b6a6db0c57d66ade7f19e41c19200fd24e815f211264863c01f4395a3a099dc249430fbc74c0039395353191c2c6e086c9ce81aae7459f55fbcac004022385c5242b31bb3c47a14725b511776557389abb2dfa4b8d89b47a115ac11f190a6f419f1c6cc0e04fff9186bb34207844d18ce48f4768d86afe24c79e982adbf765d119c6979686cb60b02999633d8f7861ef3b27fb8086cfccfcaa131a3be734aa4a3bc9bd72ce9b464509003d4b3b0520f8d80905960d774267e4b18e89866e6c29dc920a71018454b8ee345a25096e05bfcd8d7bada34f16eebc1e1e2e2faf50994e1458c5dae6f3f5876475b5da6920c69e1a331a639a9948b7415645ba383920ed3bc9f14f9979d2ed35911b209918e308de842fae2c71f11ab2489db720c7c35a8dbd9cf8a36a52f3ef3585b2cb328d55635864d047ebe99c02280a694804eb93f96b2e2e7a6b580929561c18db8ac7371a3182844940d2eb26deae176d30022c3cc3ae6557f3300ab8c6392ac7195fe32dbbd2588f9edbbe478d7ed7f60fafaf3a8106ea97b1faef6af292e2822fb0301a8091b6a01e639a3289100604b308a90d41e6617195374ec4093f19dbe1f46c238d7d1ce59144a3a200a00a396da0855d4306cd902a236b50b9477c3e5d3567f0355cfd98b3bed2cf5b79c7f311dd8dd561de966af1f5f33c6f8fe30aa606298231963694ef198b07503b0cf75ca31dc9465bba232f2a13f28c9ab1210dad476ab61b1a5090d24507d242c0ee3086678acf35f1cdc6db07426c03b30015669ae3f1baf8d6482da7271aea72986eb13db7896f8154ebe42173bb97b8673e6cac41084c5d2ef7b8e9eea2642076c40f1fa1c3ed9aa5b4027a16ba8bba5db115857c440938ed0724548662f66f3fd8057fa64fb44920293c25a604c34a529575a8df3d2168872596099dafc0771224bce9233f5ffd869384e1ed864370e6a4a23d766d803a02e7f90ab5960bce0db9ab117dcbeb6c91f20c2e942986ca0b4a4176725d539703291360d2c4c1a1bfd8fc581b54300bca303d1210040d20964a51091c663ea706aac0f4081a3d340790b2b7ab76c466fae24409ce8b28e56afe3656074eb0c594344e2159a8d5e38e87778beb639c71e1ab0bada090e0260bc29cf9e2bb5a5fd7ac05a6cda64d9d42bda315ad64f2315e555c030e118a6b05da23fd690a42dac7649314cf2645b6fa31d4d3a0a735854d2bf76cbfc6ec4a07ef630284ed46442190c3cb515cccf94d6acbbb8fd66919aa6fe9b62d6d249d9b19fdc62a4f1c5cbf4eb6beba4cf198a194534caadb46b1deb5d063f0bf00040acd199dd3b24de96ae31b7dbbe53e0cf06592393b2c01996fc98f0ae14f1ddae21849e1431412f2007b2e75325afe9ea109053cd5d2e039ef25a121c059103379efda701d32e1d4ab08b6dc26e6ce0c691cbd30eca111b496b8c6cbf8ee29a8d4525eb9561705e8fa7240a2c00df1c5cf8e8097d03a55d0aeb6cd7af7a40c456a40b55d460279703cbf97461fb7de65f6275538d099750e72f6cbba28b167ae99ae8307545138135151dd2f9eb756cd8e0331d46c568d9ab0b7ea75c392b883a578f3178171a45e90c3d64548d09b6c068b8e000550940424953372fe6622e472432e82965677e05411a37e6f8b2813c3773a8a223062fac1b70a25816e04bdcaad049dbd2ee4e86d751e5cb021475ef3507121b29f7bd755e21f77c698ef7712c53f0757cbaf01effda0b97ba28bca7b81a6b1624267d74ce8bf460e40de0eca1e51e29dc8259c9f0d482bccf0a153a25ec1226a4f2e9076d04ebadfe1123237e753fb0a3fb4d14a40210557a450c5aa138b1b89dff733b908d10e8af30150f0f449d5704fcafeeb98cae337e178424a180d291801aabaae5e8114a868ba9c66d0193e8bffab12a3398ea44063219e38386b77e8751a58a562282206554273410a3a1110116b12cb1cf0f382461cc02890f62ac7c18fb27acfbfc5dedea0f546d42514daecede90708e55f25fb3accd49da86a5cb175221ce8b91bd25441116d6c2ab126ddbdd0836a1d1070e1e83666401ed5cc9fd022a933437637f3647e932bfa1df4ad8b89427e81e7467542e0565c4a6d11250f9155dd2614bb2fab8ec95980f63a717bb6afa61bce47da60a66d759dce6fda2f75bf265f325063620c0c6da2b6c3e35d08680ab2de58f8200c48c9995b262694bb950678a5a8b9e64108eca82ccf4aa70dde9cee62e4aa4e02d5894d9bc4436a8852239b46360920d0c69d20245d07c674c397d1c20866e0daf0f021c8bb685124e9a9954542825dfad088ea0ab0d31296b053518b86dce1c2b6ebc69a8b7359cb6272603d1e5577b54ab127fb755702d6792429be12ce1731557f2931bcc0d207cce9e986d384ff87af3eb55a18eb05cdb55b4e017468184992784765200da92a0d99714556aa5d7c09758c47a25db0fd7fe0f1d9103c29e8e4238bf0248a56b1599e051d25f77ec227362425761f2290bc1d7169d38ff5a5e92b9417afcd695ec0e9d28c0cce60ed01fb596d19e8f1ec89f958420d1aea2c3d56f46572debe3ab2be65897127d4a66683061d5ac40271a3bd01a5bb9be2f33203ad878de5a188aa8ba9043e79969172a522aa36a53748ad58b18fb65e575afb09c4340be9305da0c984dd1a52eb0c97d95d42f1bb104e2df9571b53c2f383a3d81326093c4d5439030f3970b0ca350b4ebce80852c6abc942e327df939450a2f95fc1c7a586ed9abbfad8787ea59b9c05b20544e23d862162e3a2fb598ea7519e6d64b085b26cde17927ec88d5c27c87c301033b78dfa1f696e285a20e60d36bdcf4b8b8272210533f9efbd420093ae46832135f5e7641b8aef881a2c0188961cc648766229c94ceb87ea2cf665ee55ee9acff85f4081540e6d4184fba1acb86fba920ab25120c6d70128f8b4c4f9d6453b778cbe480369fbd1b51a5ab09858934713f3bd5535c00ab01ec5842c38eb30532c79ec2387e8e1b816fdb6713ffa2c1b104f0ec2dcfc298f340ab055e6c3fed022c114207b243976cac2da5968d850443e7165acb1c2399fe6d71a6e2595b49773d3847e3ed4926f298aad1f7920d35d7def976ccf426174bd7f72b6b4b006e4f6260c264857218bc9c6fbaeec242732e3915600f698845aaf58391832d872b8cd0744909f9db9ec17fa35ebadfbb205a1043a3459f0a46e0018ba8410f576f5c93fa81b032a4995b3e3e246983d04095ddd8027888ddb71f267e840bfe5871b7ab584aab70ae2a464115559b8ad848a9e8e82364c5c54c88b0a1e8492890bc1d88c38adbac88d5852200afd9d95ded60f827da0459819c099870ae1395268a18a1b74727517455565c0e8753e7b29c13910cb808e542e39189d42de3996c4e3ab74bd075a2eb6cf6e5a91915c9715c0250cb7b9b0d324aa069d679a18bb09e27523fad108185a13dfd3ee8a95f6c1304ef41c022fb8087d69aa174ba6c701441301ee9e27ea5735f0f17beb83e89b1d057e3e7ea6d89d8fd027a9a540631bc645217bc78e980885f296b0efeed572327c06f461ba256cd595273632426ca4d2042e6d6cfb455cb249f50cc4fb6c5fe09200697a0b546eb54a2f3b12609bd258d8e2853db1ba0e029716774d78cddd47cffd0fc3f902c97ee291e49161329e93bb3025eec0bf7401927b25a7ff28b8aa44d5ff4251bafb81c0cfb3e2efacdefc09bffe984aa491ab10451cc99b763fcd6d2ccaa12b79b8b11d2cddb0a9c085dd5623459c63bf23d17e85f47316c143eba0e6d819cdc46fd57521253ace6202bef551693cf080bc5e12473ccda88ec22da67e454e9a8c07ae77ff297f964eb16c918dd3233ff02ebacb571eb05a6faa4ec2a651d34ea5ab8491f26ff5b4211776dba9986f2ef840c73abf51e0422ecdc0ebb5e9e4d8b96990e6867e25e49d21283599ec1bf3d754d9d60958d0ade0092e60190e538fc247d84c7020cd26a3695c0dbf83050a6a91a0a05748db2d99ffa67d941cf23fc7424c84544cdf821d0c96db8665105dfcfc62e42f2418ca37ea6b2a1b341ef8a5fd3927552d5436b8518aae88721848121833fcca1723ed21ce80737258ad2036788bb6b709d49510f20f37de34add174546bc97de12e60c624d58e08633333a52ee909de78eba0013b791cbe6b4505580e969e60dd6292f94100524eba327e15fc8a7d247998e3c5e7bcae4ae01c1e4613208bdb51e4cba9230447542830c5b19b15694c1b12cd9d3263178219e07aa2272068d253e1835ecaf00dd0edf09e92e3d9ac810043043099d72c336c593b8a9e042647f691b9b9adba4eb85613cc8b9318d3cfb716d02db68a24237cb36a39ea0b786f5f3bc59ed8d341f046b9e5060bfef9a9d10d309a7e0345f47d7035bef7a0a6dfe451e94124fb12b1bcbd3f97ae26e17b2ca72e008aa763dc5f010c0e4cea14c382bee8e1f7613e8300daba44fb0ce78bf1728e57b87b07fb75944a64e456e65220cbfe2d2f92469daac20598c615e208e58e05562760a88f7aa209ece95f2574b0ddfd80cee866d4237b4b50aeaf8bb054808af2a01a2d878a3480ad6e49f7815f99a9b4d39f35d95b7d26ec3a35d556a06f3e24fca50db0f100d0dc8cb7961d57bdb13f883278d6cd1fe14e96b40e41e46db025320a2e2fa43d0e8a9015a0b2d47428a61a15343b7303a60a03180ce27bfb59521fdb04187b1313e7604457dad930a25d708961aa6eb52b402bf1726bff48d54a346e3d475fbe1167a541b64f7e263df43286b911256242136cb9125e82e65c4c3294d9e4023c4a79211c8e21d716fea734c954f8f8b4b1af5b49d16576fc6c9ac0b0b6d8afcab365bf75eb489ee641001a0aedb47c6d9113d9236be97c88a4ec3b68c434550936a6d2bcf85e23f98f5ca29f26133ce20e9efdcc0c77a71d5d32f67c9c7ea9979ae06be71e6a42e32490179e23e23b58134a1a2c6d100e49ba85d402cd96bf97404d1c70a26fdd669532f91a9892edb2711ab91f085cc984f657ba43148ecaf04b1cbd4ea37d402e1500f3e036a3bd234bcd46ced3caa30fb5216428c9ce4d040daa15f1ec496ef803eb8648c1e2ef2329afa3b68aeb9026c62004d5fcb2da9240658941da96edfd14b19478997110d543d146277d932e2ec686a4ea047d52ebc5d196c37ca770071d3b67653222d0135769a35544acdba5fc297c4c29c8fb321f95940e28dc3f6aeed8a66a29e045cdaf28aa5fadd969d0704bc910d4822f1e1254abeef7c8de4b2973ecd0274ef9338e70254a37b6bb897b8a13d46f6c3fc306bc100e667d0fe42d121b3255d3b4b785852e8ac6cb23aaea558d8534357af96ef6c0523aaf28393cde800ee44f24e8c6e347d3c40b194a09cc08a1b5285c5ed74be2ddc674c94ab07a6cb141ef71720b4cf9b39e7a6063feca45f9b36716834d5a526b1c5bf22e07b9a2d2766d9493903342320a232835414234a1397e5139ae3c871a482b73d0ca445aa54ebee321eb0e03eef3b035f724165114f0a014af2ca70b47489ebc7b22eeadd366a7b15c83576aa0494cf141380007a84d9eb1f07280dd98fd9be5c702f8d95b45a94a5a767dbca92b6204200f73adeb578a479ac5da916e8a573ca5cc79aa26e16ceeb6c1dccbdd720cabb6abd9492b1348dd118521039740ceea6d75024a8c231b8a9b06a153648d692fc251e9142b969869f945095daf1c7bd3567c812a69e4dcb8e88c60f5f755335d1ecc9aefe0380d7bd5736f98e0f79abdbc95166eaf6258b707b2bd54b0d891f7f3b85727b09e8914c49746ff33f1c9b4b00cbc5d6af23b5be14845ddfc9ca40a9cc8065954fccf9420a818976a636bd062c8b891f5bfb317d9f049646f9df10a145e132d924b3cc60c73e1478d1337f83542a37b1b86aeedb87359ccbb1a76bd995c4568678a6b10db896f1b2fa384df4a3d37d283f0c3b418a68f655e334a2f79d643e8e4a953653de715d2733d889139ce5bae2dfb37ca03526cda1e0d776b2e372b6bb34ea23ddba520f2e6939f6b54bb6f1c31e8532c9dad593b1558cb847063d7dd94347493540a021773642d030b7a5ce7b1e77b92092aa602c1b9f1a2eeeae86c4e7e5565fd6ea9bff2287258cec7620b1604e79769eace44619572fd9f49209052983878eb93a83e9dd57e8e6dd9ba474a94e0ab734094a313f9829a90286584e5445ea64a8782eb404e5777e9b084714d357015025fbb8f2cb5e926f2347dda5d870cf00b31299793d95f3f828ebaa1f8d9c1a7f20f89759962c119a91a1a4de79f58834f9d0412ca13dd3c9e72ee7407bbe54a45febc54c9eae324d9c7b012b811ed13e19b12514677cef91800fa8d5939b395b9558c76b30ae2e6a5ec5661a36285d1f7114bcf8361bc8115cfa495dbbd09643f5d62fb37b9383ba89c39ef5ac931f6b0b183c608dbed456c23d2e023dc032cfa875ae2894dad82a747257d1f1b27bab9889b5724554e9c3cd3e988709bf5084f74de91d68cd2ab8126d869ec704f3c81ba73010fb76d367994b8b66728463dec4ae79de13d0488e4db0fe0f9f44ec33686c9026318f83c287498352bf21292e6b54bd941fa469d25cdff88fcb66e7c77ec7ba4406a7035134267dbd20b825e6d3b2b6dd0723b2021b34b61e215985669a8687aeef6ee4b04237c6631292acf42627062345fd0a8195dddba17f11f0c56523e04869d4f011508b8e9bded5914a5142291b72f4bc36bd6c9af6815b5f6c21673b305ab21a38de5b26aa3576ec7f4cef33132ea993043a54cecb53e4f948847e7ce5eb65299dbee8a5981d578c5c0233a79d3c8d315b03f1a054670ad726fbbb59ee4c41692c78ebc613913bd6cc75137cd181c08f5f5c51d2cb3c0345717925322b5e7066fd2cb4d1d7ee40224c786330d77a5963206d1279131c8dce70cd056685429c8cfc71609b64e6d0a8b326551d97cb388792d90149932d6a0fa40e1544b2885921243c74f94e2b88fd1234ae1be1badc04f52b120cedcc5fb86b5b98219f7e8b70374116a8595095a087af2aebcd971940f105eb5bc61f1111c8c992da034081fe0f59460ae9597ee9b892c2783286497eb98b8b78083461076406f35203a18a8bb0407ef1115eb42f82dd44665511ec68b0c1265903bf96a9e1390ee13e6cd00c78cccb6b4a2e9586d6ebefcaeebfd35bb1666e9c8a3a0c935c01a44d62f076e6fb1123eec870d39b2354bc62050c701adac924e0fe0a371d1fe84cf6fba2827b17f8c35e191b6100afc3d06256396a081fd4ac097c01e7e1075a7ecb40ddfa86ae9c312c60f7395988566db2b5b6179711c86eec967e79cc3b45088a61365016bd72c34742afd750e857de42c641a485a2dc6281c2ffe76f71ee54328060fb40d1839f15196458340bc457cee0e376d76e21a7e4eb761c2b330c6b1265eb219af07063b7b5e7403ca2fe2b9ab19dec8498f3f15ac8bea665edc7a1f6c2f72bc94672c244b7e5299cad5d16777b95d295bc72a1b900acc88e57b737c9086ece62c84f1a75623eb2f826eb3920b89a7a7dde6ee7d8b4d88e160ce722fe0e7708a3533d15c2ed8eda0b00c4617c39998c5b042f103311699fa64fc8acb452efba70a1c8b0ef6d3bb0af4c69e4711b64c973551c3195c0edd4c0040c4a5c3d10503a2d1673f148946d99bd603776bd78cd4d7dc041742a3c40c7d6141f3730e1ebdded24293ba1b426f1971fa1dc57f86aba68b31813bc518034ccdbc0a9316a22e1370f021971a31a079c8e98950a62d165c435e456dfe24116f28966ca8f5a482750e4c98df115469319290edff2f685329b35f411278249de734d577dbf0111c0f5dce78dc355dfc9fce88f6378b21ac8b899221ace4586cc42c717b209c8de2cf125dce4cb3224464a48d0c52f2835f5b23764819285d06502e21a4f25d34a1e6792641c257165ca663a2728eb797fe07f67f367e5f77faf97d903bc053f83abdb730be494951e81a20ab56903f7c4e12dd0d5251d9a94145d4e068270c43bb1dac5b5ac54c6db05dec47cce806220b83f268cc34ea61fc76657006734e636e8ac3d841dbf0571c9def84c695b0e2a0ac17c3c81735bcc21e7e6372199edafff94122b93a056886d9f3834c853fbddeb55da5d32572b1515e5b51e7a4ab87c00c6c5c899ac39eace46a671a4a4c3e78d252bf03effd934b11c569557e8e1e015cb94f0fee0c0778111afc0c67b2f5f2095313e44f2aaca3b213cb5d65caa116c05eb24f5be1ad057ac61eda09a52c3447860f11a1e1e1fa0d3b14b6c200e5affa687540a8812b5116a16308a5da77a72ac73af0dce6643a12912ee91800e4a69e0473ec33dd116f683c8566d90708fd232dc83f205f78a2b411975513454448a704d5f2d45351c1f0107695a994cc80826144fc3753e16ba61503eedaf3a2f80b4acfc224f5f0aad2157732c039fafcb5bb45fa4ad9af60cfda9e3647c008fbf8d46e9cd0e9a6d36ea3170550b4cbb25a73f919da46f839c2e0a4b185c862d81cfdbf82e7ec4bf83027d87de4659f578e27d5986bfef198687f419698448e6261ac5ac2b556499e7986b0f1664abf3b09a78178f42e4865668755774f0c25237a8399bf8bf3c01238b8d8fda859b6cc89178066d113a8f7d6ad4fb91c99ce27c73a8bb9725b528365fd73cad6b95cc650e16aaebecd3270873388e7632c6c8adfe1f4fb3d230ce17358c7c3af54aa082aea6611051d4ff75cf1ef6ae57715c51c88e6507d1bf56fa2636c6e76a85e92510fded3c7f1c4d7d9f8c427d2e641c859312fcb3336e974affb0f84406d9908f2a19e59f908631ac8a070def0cb1bc04ab3dbf0f1a8d56f0025c03a151bf47ba86af91dd74099d212df10471a3602315c2cc8760bbf23ffd57ae33cbfd4e85d4304dd7ce8c31cb453831f97767f95336e263ffdfc2912a7dcc758488352d251ce9a75364d5dcba2a6fba9d5bead80a9eea0d70ed260a25a2d6b1f225f8cb6db59f2371345fc26be9d93ae5f618ab6a4ae9f3af5120cadd7ba203446e31755cd850fb50a0007ae5df3f712369da46db465f134ed16b05bbfc34fce21ceac5fc83abe487da4c65669cd76095fb4961a807a9cd5c5859d0e696528908e9734a321c95406c50773adf5a3b5edcc4d99ed0733e8aace4f99b55b54d04d5f2f408a2f9e8aedd41d703e17a1ae65ac01bfa1121cf6c385cce7508578205c9096ec394b601bf0a40e50a0a64a72f87e3f31b8d48458f358a500129b96b65cece36d52e2f3ab0450e7a7a1536e6043b328555d97eda0223268b927ba2543034151ed7d9b51266f80d55852c4f6a7628c74992616d55a57d37b72b543e0b1c150a10075d01c26cf929fed6fb1558fdbe04818002fa166fac8af1984521f9288471c9462de182ec8656adffd933a3bd45cf13f7b4d7a7f980fd84d3417071448d3296115247d28c21933d8b1d6a126c396e69bf9d780a3e16c63e2079e3b2073ea95562bfdcb63e8f14635faa275e598dfed837509931768aec177adfb712e419fe55f7c342a8c832d8d8c1ee2e043970bc81385041d9460d520fe2ac6856965161836b3857891a43a973ef9b48584ed3e5048d1dc9b51ba1d323b651b50379086a7f96b3cc0ce52413ee3f2153b4b3e73e88d895ab12257500c9eaadd6e6fd49d8bec3b052305d6f6811b965629f46e59d6f06f0bdeecd1b4d87e35f8a8150ac7dc7e9ba8131b51fc4592b6621cf11a8cb0ecb4e28b59657535d2ee882540ceb0a6116b871fccb9974b4a34f36129b560bcf6c50b7304aa1783d83e82c8beb21bc4aad240e84babd485be2d84d9c01e0e4ebec2a2bfb4a2c79470f3e79678464e47d95a50d63f7b007a4f11cf8175b5511e6d30f39f7ec9a42855f535c3dd9159179d916f2667e29a8765752170f96df85fa7989cae91e7d7b478681e370c578fb84dd4320247e15f1c3f9b5f039dc57a330ae5768add02aaa1315688b68863aa631dbc711d9d5bcbe58027b52230078da79b71eb55a7ffd65947d1cf2effc219d415f0535812ac2c38594c33434d0d161b85267752ccb8b247d5dd93a6fc130735db071181fb5222dff9bd09ee801bc18103a342b41bdc59a05d261a84f4c82ae902c0acd895ab9362a702bd4301fba0da34b8eef56497760b0a5050abe1cf92c3b126f9a0f7cb6aaad8a4b57559b3c7a4108bc53ad7b3b4eec199787ea15042e9d4a4513b68d73648420c3a120fd094f7ab4b4455cc368304a3db0e8cf43329e299ebae14443d9c31a339164aec21c9b7380b617ddbac6914c60bd19b109842564029cc831b05cfbbbeea1b276331f5e854c733ad6073fb7a11c2e4fd367a061462570863bafd091a62452917493433d6e097655a654c70b3a5a5917eac8365c37cd8beac2c10643725fd615d08da86118a2af78b97780e60f7d8c894916c854b01bc0c0dda155ffec26425e6924a0abe6d1f9170ca88cf78335129bf4c0775f4708d6dd4dcb0e1b1185309554efdca611fc32aeadba6afee491898f73e8a971b0d5c88aeeb31a162438205fa0b5ba82cbc2aa0745356d8f7b1db60d5f860a30c1c1d22f55727718fda34a194252283b9eb7bf42d6921f7604ed3afc380780f960e8f8d3b6a9b1149d65e74785dd67201cbbc781f82865ea515207420d8d158e539b57f69c13a1c7c71e80edb6d370fc620a1b8633ba49ec33ae6354d609269583fab05e2f440d43153a7ffe27a2ac651388df3fbdf03149c370507754744f4a81ecf774543bceaded6d4b298360e5604813d88cd68742f3b34af7e1a6cfed5c60489030bfce47ab346a20ddbe335769104557ed55b06239708ed934e7640e4dc8d70269095f4acfe924a9f309dac277fc3ee64d4c86f52cafbec9c00f89dbd3f00121c9cee916a303a7a63bde005197d2567f580aa51d4c28f6dc1e08b56cc09f62d6afbad159e2820deb7911c72a4e4439b0461c449238fb00ca8715ca70aab97a41c0c261834bd585514552c77d9ab7920d7c9dd94f111951431dbd25ddf281df4aeeb62b74f89d6c1369068e3b32845488cda7efc2f552df8050b450039f69417c3029f791c53c079fe77a4c780a422c01918981c2393824c4a58677f543415a9b79b122a11db5746ed4ce5a2edb9e555c804a7405fe82bec3997b3275084c6845797eac35a54a8d73040751495e6887760ac86080eba8a6e0f8a48eb8a5bd1528f4ffe947ba9f5d5cdc33daeda4cf2021d503b7167f085bcd09e8389c3f6ff37b5fb3de204808477e5b9572d0a121cef7970b3ea2c8d7a23f583b619b8eeb24fe0b033327f176438bae24498464394489be0d4a5a0297d5cfff20efd56aff3d32e72d43497853c9ac8b00509cd9ef36ad2c6e3760ac1737b37a82a797796c0a3f92bd4b557750a0c71777374b936456cb5db2c5143858af01e22ad4ab529ef219ba935aadd0a92e25b738bb6edfffd7e3c1ab88d1133b37ed88abe059d5e6599f7f94ea8fc7caa6d1d5fadf356de3ec96c2a4f20fbc495ea8ef60fc92a83e688d09fdd0458ca13b8f02d67ac32f2c698ff13af09aec0558ad52cdc44eea2fc3e45f2ce32c8bd2bd49c0600986cdafdc625a476a1fd80bbb8507a5790c20fb8c8b52093107970aa11f3b86ad83a4ae66677b8081374c7526542bda721d169f8018160a872f1df9bd98ebd6497f9af5b83a9553a45603a341ab7709236d4b10208488a2bab9e1cd2e75ba21e36dceab0759166656df6bdc178348a03a01e80ee815cf802cc711fed727a1bf462f6540fe865aedaeada8fc59685be142aeff76d9f43c04fa4003934749585bbf7d00292f47224f750e02c021e6db4aa710386e127ede55ac8bab190972733fdd9f5c15093e02c857271977e66403db94fae3aad9e64ca3f0c2535cb2df9396cfa0f1b6069f35ee19b395e57409fd27729bd16cbcf24cb953232e81519bc4fca2488fb187432f8b04270b9d4a425c0b9f801655f469bd8b3f319078409c595ed418be5b5f7b8685e2222b602a5e4053d08a2ae22a210dfc5df350bd702c0bafb446bb48c487222592a60e5c7e1c44325f7a7079d09f2860b496200037de3ed5a12402b7722112d7fde04cf5c5127d51edaebedc5b991338c814bbd7c88e3d0c503c393ae88bd2f161ecdf268b1994cc56fbc664d3d83ce91779c6ba90cd5b9a199721d91e66f466e5aaee2e34ff0e775c2448a358999c3d036a67d67c5c30141aa70d1225071b4caf43deaf0cf61cdce600495dc86f2b8a8c6b63927001c4b24d95d389d5be0c864b4a15c971ece897050e0e06c10060f4e2f96029c85d19ee94e753188b2d8d41988cf1c03f5a63372196882412d9ddddbd03b4070508a70733c6faa233dc7befcd15cad864b4d24a2bcd3efc610f08a692c2b37a7bba4cbe279217208ef43d81a8b18111634f2052c6630af0f17b00b4017de3f71af3868c6f0e4d23f90068632681637c5bc3f8b6ccdb7cdb713c6fba37e7d0bc01672c096863fa00e20c79f6a70fa00d18973e9d803684006160bca6e6d6489cfa704a8ffe8ccd3861bcf93306e3c99f3109e3c59f4e4022e83f920d880c58802dd5380c8c77bf26d378299f49f98cc7c4a46c2a26f5798e9b0ad0288b79d38a37afcc78b6d545c3b8e61eca5fa4cf7827a419cf3434e3e9f72ebaf319af7befa237bc32e395debbe894ef19e3f863be7d828f71ee65bc2fe5edba03e54daf73cf23bc64426c53d7a64795555f35c9b662412d4cd7d359a7cf69633164a784184dd0019c2bbfb716707efa0b7148a3a0b9d7e34efb497bd1344dd3346db7305d5f838eafb5e790a6d2f6f26d9c8f317ddba77dda8b1f638c31729137f4945b3ec8bd5ecf1bf3356948c7fa95f57ce9f9d1184d77c57ce6f385b1d63232ee385b6bcb5fcfbeeec7a5e86d935a2fdd26419d4c88c7d9876d52174bca70c6a6397a79ddfa4dbd1e7fa69ba7448f60bade7ac6d8abb7c33af652e9abdbc75717087df5ed821fbe7ebbe49a678d47c7ef7480248ed67ae9d1e3a7fdc01c5c5f186b0d5ffbe6777d9936fd99b670daa5d7a8df9ec0638f1b86d863fd4189936376da90e73c13172ec49fc21e5dcf21b1679de2d313af39bd0275a26b0ea978e91bea60d7522f277ed717a422f5048c6b8a975e5ff306078334a437f17ae2a57351bc740e89082f1d7f9c1190dedacf3671f1c44bce08c6153fd3161ef43ec5707e6b3fa7d84be7b8481ad581e01e5d440628cea0af48befae68abcac127f728bc499aeaf1bcd511e624e5891d1efcd070e1c4330c63163460fa52398e1d9a0c3821bf0b083e4a40b1e70b93d13d041082a3ef00c09a2a202203d4e7ebe906264034c620522b064f0c510222f8070845811115efc40832c5d441d80708445142fbaa082061dccc45efa1627adb3da0b21b51767d526d58b33cdbeb02ea52f2fc8657e332d6f2e9c6d31c60823a4315a9b653b3c2f3d03e979e91b4f91975e62491cb9c3f1487d750d358132e42a7ab978a4b8eb596ef194e5a4e5a5cf13d2e9089eb438259d8e22eba708d00f2ba8c57a191555317ad1172b2fb197972d2f5abc7079d9f2920464e785c228e59c94e66ca3916af89907638cdccb09b144f1d0e7510c82c8432d7621891eba7c419d4cc2b078883d1e79e8b105752e94591223454c0e3045a92d523ea09cb893fa9ed9899fcc92976ea578e975c6e4f012672fdf305a6a8b99f2e1a54b8c72e2a5634ca78c1db95c2e97cbb5b3b3b3b3b3a34da7d3cb0b2a756db699414be32f79a9a5d0397445a52d4a3e48af59b64c4bb4143a87976ebb2259daa2e4836c09b9865e46afd7ebf57ab15c4327d7c975729d5c27d7c9f5b2c1546a8330306683367e864fdf098e677b92abc83bc4205e3ad59238275efae4785ebadc9ec4afb98abc43d216b92379583f2fd7d0e9e874743a3a1d9d60369acc8b4c092642172f3d8b2fadca4bd799172fbdcb94bcf48889f0328a5d39427abd5eafd78bc562b158ac0dc636835997c866216138b24a97e8a5cfd81a9fcd227e64c59fd812720dbd5eafd7eb05e3e6da1e5e5a89171ed91e6cb5128249233a5212aab505d5729c9724fcd22f492f492f492f5128140a8542a1e0876a491ce93738c81476d778fad520a8d6bcd17a8972bd440dbd44bd5e1abdf47cb3c1b8107fcfec5022ea37b3037396a0a3ef999d9733310ff800456f7da548136080034b09fd4317413b10fd831442424ff31026442434445df1484ed6942f9ac4a5c616172e7ac318172e4cd0a2454bde3e8e264bbe9262abdb30063d1b4e0228183534b2b459108366466696760b6e64626052b4b45de0b5b461f06c69bfe0bba51dc347c71fb38c0f97a2531dd8c41a493367a84cfd62f0c382daf90903464de6b20575683c7a4c823a331e5dbe623cfa3c823a301e33af9e79a9cf1b57eab4c94fd877cd3ce9271bcfd2ab6ebd1a1f7ef3adb7f8e911466f61c3f93615fd7419632aaa29f93ee5f0d3a74c0e349def93143f9dce9ca498d15ee3345e751b6fbf2c9131f9ce2d7c710986e387517fc0bc8db7732be669a2bf68319883d276608e53a139cdadf12ce0c516cc893ee3c52498135dc6932f98133dc69b3029d48bb7b5267efac933c5233b62b125d19e44b2d46866fdabb1dcea625027cb722bb7ec87aa891a123b497649d4a97567d3254cd4fa6346318f604eb4a9a1f16664629ec683a99eb1fc36cc911a1019cee07c7ed0398fba220b7342ff5172c19c3967b73385de28540cea705ef1e933df3449342d983353ad3782dea9d64fbf6979348eda813ad567ea3b8d26e9698efc748c8a693b9b2e49d5e92347ca93e18c4d6da82bd61c491a3967e48bca24c91a2363cb42df3430f53052979d828dc0a22ad4156f918f9e03c78c02a0b0005874e483b64230f888922e6333038505bc64cd1bb0e48b06f924d51e847a62cbda00f60397875b1ec6ee0f48bff5cb1f8ef0f807293efaa5925d8a9d9b29361af510f6c312bf716e588f1f9d8ba9037fca4863ba27c40c970db03ea73ba410d65a6b851e9538b2c69494480619fc862f0f32e483900f3afc30846afdf40ca18d0c7166f4fa03dac0d6f4131ef1bc0d1067fafc016dc82887b8b8b410d2f2f3d3a515b90375621f8caf3bd49f8a143f5e70083884601ca349865e7f40d798c86880afb850ac0d35081488e925ee08e648e758dd9693608ef4dc8239274ddb3182ceb6401d182887d95129cf84a08e06e3f80ad4c9621cf3401d2ce37708ea5c09e5a5cfb845823a96a6ba0c4235b271ba05ea4c973b500786c73951f05ae6f8daead433c6592986e38fa1f98461e3b9106bbc0d9bd8f1c88e586c4914e3ed4904c6db338a14dd527fbc782e44d8443c8285242212c5263ff90332318f26111abc744c74857c610125291eb1e1a5d726826001981381e860c48c0becc1b4f4980d51d7479d0ec11caab17ac870c6e754680eca496987610e755a77e0eea31287078438db84031d723ba0c4c191df79a7610ef52d854add8339d02d002448106e478439944b21d372ce32ed7217c03169d0ac71b4e32ed079de7ce3304063eb3a9377ae713bb4377d399b3a0c73708dcf1cd517d09eb96d738ec380f43c2394b8a4bb1dda775fdeb6c8ed3869cfb81d54c35733f9c9d4390a5e7fb073fc5de9f32a748fe8392617f3342fbb5efde6177b28c387296a4e329cb153493f3d07480f613900728087302262af93a0cef57924dfec53e8fb438b49ed47fd5171b5475c88d371ed329fd26fd71f2f658d04a45fbf1f7cdd823933c6604e6ee9a4540bead04c2765fa76f96dfd77e6f8b31a0960cf3cfb7adcafeeecc01cf9d1549295c2abd0d40a6dbd462e056babd0d3230fe8a3c69824c7d88a33c4274514795be8e8db4c8e525e471881af9797457c524491a7458411d18a4453860c050d013d840df5fc7d081b0a92832d19c89e12a40ebc99cca651be0429e50e46a0b8c18a1b60e972244510c51757f8d08420407a7448099bc1cf4b7963f052ca19a80d051c0b2082061246440d5e3af9e2b57841e831c64869a4917a174b720c503e8617a5430f779a0079ea933a9d3d2f39ebbdf7de7be7adf75e49abbdd45e9ce5bb519c69196bd9a89637eed372de28e5e806847a2520252b91a70aa532ee402bd20af529812492a75e8f606c46d20c2d70b4508f2fc8a2a73e5710a1c42a25804091a73e55883dd4ab0572c4a3a72e8bc82c3e7eb0402d3e5adb07eba5473927a535ca3929add5d26aedbd1867d76656b379d3ec66395bea38db759bd57ab326d3664fbb064d5198986bbd1d4396b7de4b16149e3a0ae9adb70bf0d453a9cd7a7b014f1d2686a497d6e3db7b633882dfac314553ec28d7c24912a29323396196a0d53269c24a41a162e00d08cca29b4973e058808fbe893179fd8645a828980cfd46d9d428006682c4ef027837d01b3ff46ea0a1cbcfc77b8cd2654665cd0af3bfdd01e9831c3dcbec2127a796714e8f537eeeb2cf524a09e32351056e008803194a9893212be41059a613a1e8db1052aa931f1b3d5f2732e08c8b4c4b8266a9c825216c39c6a1de833501a2090fba090e26265d946879d9844045cf29d810446043cc10b3314146bb62267b085b928506e6216cc912354b9ec096fc00237a8eb184e7f706736571e33202cc05049712a987302655c8803181027a30d710e8c184c022005ef48b43f68e20792c7184e8f96d0353c2c5063e8429e1420221a0c4083fa0032b5fd82b7c8b9b2e302553502545784a29a505c0b1914aa4b099a1044b6c8993212202983904200b0d00c8a1027c4140059f2107193f3e9f139f1a3c2732f43817436e9250430c2a84c010828f4dcc861a2845689a0091c34c131e7a646a131c7c6298746131a922064ca0e8710213402cf210a5957452fae518c28a1c66b2d02003853ef5400e212507181bfa39159a3e840d61c44f217a50475e8620c23a0d31838f89093dfa8a1aba2c434a4b18e19ec4605bf2030cf2921f1cb42c629019e1060c041cae12432c931954970d8850d7101da61058504a29a57466b9415221b03c754a29a596098cc91126335cdc1b7ce0c08412242e908872840f0a1f1d422e3e5464f17a02c886206a441e2001818292d690ec22a209254450d0a2bb8730253204415b2e5b8028f9190216faf41096048a1e68d343581225b2e81ddcbcf47d084b1225c99320f8212c4912c5226608b1c48173ce193f6824089e8c071f6c84863b93f8f058194f32830db50b2ab118020115b6d0f25b06091210fb109684493e12b32d344aa6060e149e103223c8fd9ae0911b4aa36e7c80a4ca7f486033cc0842331c1bca0609117ecf78d91a90e030c38421113264092c5810494264641c07490b4911af3d842171fdae7177a0c0945479f8bd20a343006c30cf2dd38d4e3abd4d4f8ca1ccb298d5521d80c4895c0a26885f34a1cbbf403d7ef43689c349209571295ccfb81d03b8d1b4a9d152758ddb3180a7d7a717e3af07b1b441c303077b58d2b0fa5a3869a97e359fe489e9128237c39c73ce19257de954084fe0f066989182208ede000f6141b8328df55873cc1adfcab84157af2868fd86de42757151e4f2646802c34116180eacc070c023d3a3e45b2e799c67af8bbe6df9cd639080b822b44528e9a7d3ad73cbb1b079a9e4b9e45dd6ce79dbe4d02330e35cc9d30eb90ac49ff192eb4fc60dbae4d9e9e6a5925b8e02d9bb1a936fdfaee111bbbc76f8ddb76b4cdf8ed8e5f5b7770b62bf39fc16c4bef392496fdede36ed1d0b33aebf1e33ce7d3d627cf31cd2e4b5505dbb34e3f98b71e8325b0ccc4e957c2b6ddbe9743a6d9e0c1bb779f40d16440b86032db6ec99e7e81910469f79d6dff6f1da24e3065d7253a9e471be79590ae2774eb915e4771e390944ef3cfb76f60e723c22c703967cf3b4cfcdf5b6ede07c57d7e72f73a8ff7abbba760b6275e7690ae20aa9773d94e123266e4fd45775e170a5da436d695b2e7d5588fbe0a4c1aa43b2f6006d5423a0501daa4658edcba6d7166af0bb3e60a8d3abaf8ad4efafd7c304304ca79066af7e205dfdfc84d76775bdd53e2ce3067dbfd923fb66f589bf1ed1ebb7a3d3f9a1641669124aaa978a653d6f5bb6633cc6af46f192e6bb1cc7a3a4c23e2a96b4c1a570352e05fc41cd519ef6eb699ebd529ca653ccb9bb5b05d483f3183e6255d7dddc3987ba9d7329d4b7e5739efab68cde56b1fe3a74fce57c638cf98b79deeb0306ac5dc72aa0df1abede9e8fbf7bcd33f6ac2af25bc3f8db2ad66bee58529752ae10fdeeb823ca63cc5f4dca35977eafdfeb2a1e69433a76554f5c5dc739dffd82dc2ad64bcdf128f9fd7a5ce7bce358d8a2d430ccb7bd84bf1d39ecbbd301e3ab695c0a9beaa63aafdb725de5134fd05cd5538adaa707e3d48b51f1684486bcbd72b4458e478c4e07226f91de9a4a26ce4db1c47949e5336f4cf7f8b55073ecaeca87cbbadde9f03609a9a3e1f9e89d6f1ee3c17870761c8d139def7af4d675c7f3d84b9fca47e5a3e251f9a8585d92c4b1ae795dd625bded92543ea896963148a997e908211e001d8174c4d0f3a0e709f010b6831f557efbead1574630248abc021ec260581e86e4711ec260403e431068088341f9fcdbeae7f1e7d2b662695a8d310e3d8d3c12d0381e35be62ad8cac7e342e851ab1c7f04a5e6b1c8627bdba32eb31a917984d9bb4d65aec55732bccdf3c5b9b59cfb009e6f7a8ceb1a039ae3673cc8490d1911b524ab9c5ea31fb58881ebf424aebb76feab73d7a5bbf0f18aa6799af8a54cf56419f3d86af114646bffa6a8bbeed15500623c7581989ab0cc6565988f16df9d96f563f6f5f7cd73a847a0caf5fe66d9ef3b73272e3d8a5c7cd39ef5cdbd46faf103916a2575fb15645e2aabacdaadd2fc8bdfa79e9355b0feb352f6964606c1c855dc6ecb8ba9687409beaba7a579dab384a8c8d6abc1b4f43d1afea5b0fe1ea99632f7a8e19c32b390cef6d3ced6996b7315cb1aa6bded08ebe98afba60bed4575da8efa5baa48deaa7bc32625ba80e3909588f1fae9ec925c7c3be76346f74beb1d68eac76f4d433cf53df382e4f5e0df6acc66d327d35aebf1d356bdea857260deab8fb36d6f9db3256b39eeecc63bd85eaaa2ecd4b5ee5e1786cf937af57a610138e24e9f0b412b9f2d4bfdd425d1989ab2d7f2b23f184ea9aaf582b23ab9f4c0f491c281287fad5437a686524f59a49428652051b009bd084580f3f887285062a220a41e494d55a2b44d7a0a95cb1d6da22bdf515ba0bdda38b5c4ac83bbed4ea9434ba88ee434acf7b5b9d05d64d4f69a5b63ecc096ededa1898067cce321b5f3f9cfa4d29c5913fda8f71fe003e4f29e3d44ad1bf87dc0e8d4a023c0ec0e3c79fb34d7adf676d931e44e2739e53c2ac95a64ff9cbedd0bcc758daac523c658428903ea8b45d10294104650a8b4809518b4807222244425e5ebcb4d8324ce8571422229444a29624d26112112112e2c54b8b17168aabc8d7948fd92bca471cacb5339460438664035e822612628da81637a181cab8b54a84cc1c2a5869adb5d65a2ef48d177acbc8c838ceabe7758317d0ef1ab169a4bd1a38e60dcd6194719539e41c4812175c7841bbf002fecc37cf5ed4816bad52c7440111e23a523001d333fdf5dc832748b79e0c88239df3040069481afb84bf0169480754df8e1d429d14aef17a14e644ba23662fd381755c1d196fd9b33a72b665afeac8da963daa23e72d7b5347deeea6952c9c34380f6bfd1973ded491b58df3a48e9c2394999668092569482e056e4ac8d112e7693ab6cccdcf5dd6114a4d4bd4b5cf9e96787af921eeb49b9d1e4b6c8397934977256ecb5a163d2aa52b715bd6327c6da53e90af238a282a6a15b18a76b83c8451d1f25b3f8ce2a36f54ae50b1f21046a5e8b7f7904a94d79a441a04a3f283a9f06c89760ad234c2f6c4ad56369ec203b94d297a089bd2e4e114243fe5488d293ff406d9abe2f445345d2179407a0823baf20f61443f2052e29585c8888888088a0db287a4842805e96152ae30f1474c4b448da8529a58294aae141f789002f41026a5e7f74358942fa26cf9e8388b82f49b4621c247a7724af68e10650851a000c0435894a1284221b04207443a18d28111111dc081e302658143c8bc4045c04056dc28688004942bb1250c41c3b415cda3ad95181028b11a5e3028ae0d4a0b4a0edb1016283d7333828b166a041623ac7c3422866598745a8c7115dd440846001911031a8c9852047d0938702021870af75221e33c64994ee450e1892c24a609115678e143105ba658c013506c008a8225d4e2c109e5e189439143850f87102c23e33846089189695a2aa62ee594d55a7b842754f49322de5a6beda782c4895a73ddec2088e88991214f6ac032c4842586b41c31d4035ce9944fb03cd1e2899621d4ac3061a0e72cc54f6ffa3d2a75165437bd7cc9d540875ff1a4919a7be6a79e3e28a574477c1cbdaf5961d7f96d003cdcf1efbd587e4f7f18c05720d77aa6504a98d2f49869fc3689538087383f391e345366e7cdcb6a4c397f7041e72ddfcf240d21ae03875440a4367b38bc247356a8037f353b34397f7ef2b3075fdef6d803a2e5281590e4ba0b299079084fd8a98f91a3344288333fad659e8c1bf4747fea0e653c9813b39ff4ebfc60cd744a7c6dcc4a28789bdfadb4596428a394d711d06ba06d11488ae0f251ca68e9a84dcb6fb72902cbef19bfb7212cbf71f4c045776a80f826490c78302587247041650a9f26b628b1a324df4b57b7b8ca2b9a4c4ca825d4ba127dd79611cc99f283d5fbe9dac18b07ead8879e693e22bd359ec72ed6bc5179260de92cd6cf4fab558584607af280f19e91f61724a8533d7643433027ba6b3c1f69e5f15056f460031bd820856f072b8e709b97f2e665d7b9e4db09a2fe76d09b77be79e77af39c376f2b6dbae4a64d7be7dbe6a5eedbdfb783de1ffcce4d9e639a36ce4bf96ba1dbbe1e9c674e6b7d24856f876f876f870913371cf4204b0f9ab47eee45faf9b9f6e743fa89fdfc080a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a32eabe1a0cc19a40fa0cd6c41558133d99c9b5936b9e92f19819cf5e177de3f29bc36841c5b030c1e527135afc9c73c63beee79bf13627e333323348351c12f72121217132339f8c1bf4a6bd9bf97ac0f8d642fd91f93e18871ef302933aa15e5e4ea7d3e96432994c5f0d7a10d4c49658951fa49fcd4b25dff87fbe9fefe7fbf9f941fa696559c104b14bb72376714df14cc1cd47d8c149430370d2705adf04b14b855e79a44f1e50052a81249004924012480249200adc39e79c93524a29adb5d66aadb5f75e8c81e40724e7e476ecd066f874f87e2a95d65e8c7ddcb7feb2ca4a63fc20bd51522975b9fb36afe459fa8c53f3a014771e0ff85d5787588e87fc8a72930779f1935baee6022837b906509f065e3ece4f7eb1f51cb2d35ebd5b417f10e67c5f11cd7d7bf3a839e43cc7fc6d47dd3177c4ca0373a69f583f3f87fcf418a80f4ece2e72f4ee9b4152526421757424a5bc73ce6929a53529a9d6d86ad9b9612cf6cde09b818e0e33b8829c5e3f69bf3a3d4b79999059ae2643aed50fa5ab222b23b11cb25a711d115919219293d41f2aa957fa414aadbd75deb84e1d63ea19a592c613a457cf7e3baa7a9e7aac43dfcb56286ef4d33f9696be51322a9f9880e8d3270c95d2ba7d449676bc510f6b312aad0c492eecbb3619ca20a5216620bcd5a0778d6120ba47e6355fed0a96a32c48da8a957d2b2345465570151e5a69a07505c4132baa022416b37205cb91b481b320491b78652476454bcc0a969511bc62e19511975e19c15d6438e327569e79a3e4532762cf1fde84c47ce3a73f1bf4ae2efd05d13db0d77cb32dd758b76ffb805c8e55c583bf1cb37e35a80a491c244142d2868644dab090d6b87d42685515f98668eb0a42f205d1d1552b945791b461246d682a9f7842f65598d1ebeb90b4b16b1597b4016146433fbd36a950543ef184f8a978b4cc96387a1de30f575a639991b476a39b43ae6e9bab7822758ee3eaacd596dcd6686354d5a9e251f5f8a858756e31c62dd65a6bdcb6ad7eddd0a471bdc4f9ae40fcbd8e3afa5bbdfead9fca47da706def74c97d46d0d5b7e68af1f40575a65fef60d59ba2faee60f5fae6d38bf190e3b1792d1d411debd7394f060e1a4ef1d371f4e9651a75b9feeefaf3d1b79b7f419d9bbf9e63d217ccb91e3dbc499cebddeb12fd75d7df2a843ada88688c423247b40ed7eb1078c3deecf7f32420fa480b9216ab1f7d94b44567c1a28f8ad047b9e6756d9c3548daedcebc915d9dddf97ae5abfe6a7e5cb8cbae527671d9857dcbaeaf5752482fcde7b76f34edd6bcbe1e217df50fcbd1574f51f1d5b3ad8f6a74b03b9e540242a552a9542a956aaa5473ba4aa52a954a2a1654d6773db2afaf6e552a954aa5524d558f8a47e5a362a97ce654f14c95cf8deb6b100d44daf0ea7a47da70dd236ddcad626dd13c9ad571a92a9f22aedb6284a65e5b1f83a301a26687f3eeae54fcb62f9a9f187fb786c557bfdecc2b1b7d75eda576268d9a35df3440a084604edd353b5ffd834257dfdd96af34de4ef1a08048b16688be227df4a952a9542a954aa552ddb8369985903d7f40740f7bf4330f614b147dfd6dd6eb73babe7e79c418298d8c1b58f05deb5db15646563f39e6f6b13212295cfdac58d47348cde83b829ef3f5d1573f2b23180ba7eae16a75ce6e1aa7711aa7711bc61ac7719b6fb6fab6f97e81ea6dfbb4dd02c693cb9847e5a3f251f9a87c387979d8acacb5d6e9d2ebb1af538fa1de5aa534c1fc6b33cd35cf999372c55a15919cd723c312c6ce69a59c1d4b0e73dadc64deb0e612fbf4ac7d147ffbdae7a25d42379d73ce5ace1e63bdd87354b1543e5aab78f4f59c73be5a67dda958b476ddb7abf6170f4e3f7970d2e83e2d73ebb96a3bf4f9dbdc96553e2a9f5a593709b0259ac096e08129b10556254b871d3ae5388eab5b73eb31681c57b16b4e23e3062ddb9cd37e29a57415d4a364f27b39d7d735e72fc8a73b86ef115928f9fd34e734b5731fbb769c535f192971d987ba2b23f10414bd336452ded58fbcd7debb0a92f7ca7befbdab2029e58a25574017ca7baf951acd5a76574650d565ab48e2ca9c707a5558492055b1f2087808abd29a733a379d9bce4dce629f1e7cae723b7c3ca6d42fc771aeea99773af57ad4f937de4be9a458c5e2384e060e167393478ffbed985dc7945ed7d74d5fe9e3b62ddfab7ddb87ca07b561195854c58a31eaf701039e9862870fbdad028a58c5d2542c8cf1c9b1e3cd33edd84df386c9b19f3c8ee7bb6e739f49cf9b799ae72fd35ec8b2e92a1f958fca073aab242d0f1255900892104e7f413e845e12405e000f61482461f40978084ba2c8079f93a8840db656390bd19000000010004316000030140e88c342a120c8d144d06c0714800c7190485c4e321949c4510ca3288ce110831423800042000084184354330500e3bb0a46b0e22e95c8fe68bbccbc8009ea5b2f7844c037bbbef9999522061296d8d891838d7234a1525e827bba7762c6dfa7ba52dcbc77ec16fdbb5ef23c4b0b43b626afba92eed670ff14625a602ce83c71c1b7b9e7f0aa2d4e38ae00dcc7fddc57c8d39ef35d1c0cc473428c47651beefff9f052aee4a83061470dce08bed710c8eec4b61c5006ad1998dcbbe992d90d6b6a6ae7fcc91d7496d6659af07dffd5b2813ac88cf813a0e803fc6425facf1ee10e8b66043209a7ff3e56cc3ff603cce6d6fd61aab9d0da95f72accac3eb34ba0118a3960b03e6802cb37d56cb94cd94e2fcafa9775c0dcb86eb7e07c8ee1c81dbf2aafa696e6caaf873aceafa2d2057099b032560825e2fcf2992d840f897cb732a71f6c6a0475597e481488990b379b9c5ffa1e2202184b35b3f32bf15d7a529f7ec9312c4deff09d9d3b9d99dee14899c4c1f66be730c69d7e75e2b3c4d270a650048004fe9241be7da1a04bfb752ad4e56b748d79db1ba7f142ee82183dcbd2ca8c4aac44d258df0eda2fa027bb5f97790c7fe1be62f90b956462d57360aa4cd2591a02ebb00264c66c4acc6090c3bace42c07d896edeb08c75ccfb0ad876d66b57ed2c955cd7dbb0748909c3228a15d51f3caae06b359fd356d3bcaac1dd72566eb070dacfcda1dd5c1eaaf06d35c953057c9670da9be53184626ee1c092cc7d002d9e87ef4ceb10e53a500692562605aebfa681c4b6b49172ce525b0ea7a342f88278143ee7ce0dabfb308eaadfdaea8655cbab9e677da94c87ce284f6e54d74e59d8275b3bdac33905ae62b14e0b308d076417ffca70a3bae40d87a24488291c690be946a5f758ecd9623ef14644dc2b95f42309f3c52f04436eb1333f6ee770ab4ea56a16805515bf6e54e78d28a4e0744eeea2ae60ec51e1cdbdb239180539bb227be4be31cdb43ec22b8d4a1aeb058c53dbbfef175206e8f6c55c3906551016f80067c83ee8ced4d03b1e75fcd40233aaa91b9eb74d3029391c6434426bf8d5b831c9e7acf9a6153aaa43abc7ee9250f195ebd564a6eb05ed5646c5e560c364bbd599e268729c3e5f11b2625797e287f3e3c000a9863e773b3c98d516d2428e125a238b42a30bfdab2e026f2012d18ce57c55c0d510fe7c253261a5306d090f55486d9ec33ccbeb2bd341e1a912734e1971b32c9fb1cc8db139bc0541571c9d4c9e39ae9536c57614e61c66cd18e9def22ffde18feb232f515fa3fa1931ec5d6e8db041aff2b44d2021bddc13436fb827db39d91efb31fbbe2806e0ba76bd188b264ae9d020b806b09b530439bc61a468d4eb9f23db9d69b0c8a1cdc65e9869dbb0d50e96a580bcafe6f21d3dca1c1314876e637b56c4dcd113da0222c1c9823d8273dcb66c02d1d73c2f60abd0f19114c9dc6fcfed4ffed08497f317b466b63a13457e16f52ae2ab1a0fc60624f23ddc5a10c64ca7a766fe3ffa72a7ef23649ce777196c8c7336c98a9fe0a10a9983ace1e8a17823c836f9fb7165b6bfecfda907b40c67dca75152559ba0a071db127517882fd89d89198109baa7d8d47c876d20bab62828045252603153017acdfce02c4c0dc8c3594341d7e5222f0448f76c9d70c2c6b1b362f07bf3750d30e8b7f26698ef7ee891413fb235948735e0fc7b5c46a35484bfd849819ef2758b63fe3e464adde069d30b76af2cb62b48fcb8d662ba5adc684b35a12417adb1bdb14680b9f6e8a047a0214901ecc8acebc5f990be9aa8b8e708abc8903685c23dff1b22acc132f4c5f21f02bc79436c6e1eb44844fda3730724332c6686cf69d4c1ab0afc9035f342ef9fc59d9719a116f229c500914d077603b5ccc43d0b0caa34a9490e4ea3adcc408725833a47ab2acb9a9419bc7ce77ee979c4a2c4492cf8b5c9333474fa5eba35133b02cdc172487ce083aee77b8d1f6ff49037efa16d31997816a08ce6af45de8ee5cadb7b13993558dac8f8049b70ccb692a6b8b49b23e7ee4c50893580e7a4084f56239761253801f8e3da6a48d585c56a94d84731f9220ad81189fa220a1edd1dae13ff03acbc4e4f3e242788b45ba334c36a52a3c26ac161855c19bf0916f8b94889422c581df0ebf894ab35ad5299b066a922a3bbad8f20c177f28281e040db20ae4ac64260fe8f888e904b05c2d40da92b805abf2066d022447cf4b9fb5dbfe097846366ac49ded8b482c051aa3b3e51d5f846d7d85a0e8d4ee49f962cfcfbd6f6ed5bdf0e3f95ca5859df974350139c25739e38a25d9d37491840ea2e7cbdb4e5a07ad920bf68dc55f84c5e26b5181aa771351b529c2400f3d20c07377a69c2feeb48b8cd4c17486783a1b5d8179a173770a9531916082b8bce60686b142651daee23ebf40df5488763599bce622c524be556d0e2577f2659d6faf84a30a0a3829465c0a8d9b70411b4689e2658e2e379a549bf40bc01557bf8355af51f32666ba535230903579030f6473481b1b24fea85db4c38df4a0e04d792d7e3ce8b3231126324ef0baa06c468d9596c153a6e5d45c7f5fcc2c84a5a1a1aa4995de43de919d2105ed61131dc0f95ccc05e1eca648832f3afae12f84d29ed2b390136d7a9582132e77cdc615e7e46337aa6efb58d39c87e9ac7cf2cb92da4d38124bb26dece122f85a1182a790bd53281b605d2eda5e24c1eaeca1b9bf46834d0a782103ba3074e7c6f916bae863e052a4dca94f4a21e51458958f57deef37162fc16e25d1e9202930aae4a67364fbe1c604e984062e1d5b30b4fda307ccb3e6349f07518c0ddfceb9aea0c197c9e598134444d26c32b74f136ffd08309ee1dbdde90237f043437b1b017afcff8a6008f0e8527a5a4cb16288f2f1290b63dea72f52a0b320ed5d9ab9a240163d0c03d5bb636bbab6a0781419f3e497d660605d668ff64511f11d0e779dce46b71da94ef6d81bcf9ae3d33c3623744f648218150481e257dc6cf6357b88a63ee9e2d8bd5a59dc351e519cdcaacdc665e4ce2e6d6156fa40f472bbce41e80f30adfa938e240d4a2cf604ed6b3126fd770c509e48121e45b01f1322978d36a78821a1e9c58aae52dc1668f06d8c45ebc338464e6c75607d3db7f317bee87588530d25c6d25eef800e29aeba57f7936fee2d53ec982296e1f1ae6af3ce749b446e94392ea0603f137aeeecfafb68f92243639323fae71688402e09eb5d086b7a684248aab1bcc88eef8ae3d4ab2701a12fe69e914c735883c69ee57e4f5e5479da5e6e99946dbc6e66338c44eb2272aa6a9ce1180b49d3110acfa46c4161bd7f3f281271652853a43f19939c32d77cf8764485dcb53036f5d105880fa0d3c51536e09b7f3e0b1b73c2140aa464f3f4ba0928db74d548ac9801e32d7306d955a5476255daa6449ad44e38d66402c2bd8fd65aa348894b92b451ef3821aee7a20ff1b9148d27a15a5ef3747cc2625a5bcbe465c40128c0caf94d0da638e9c3ee6d8ffa7ba0ae7976c134d3e198da57112595c76fb5e899ba829ca9ef1b1aee90283dacaba7702941da909d3acfc353e7f120e873e39827400dd8d9dac003f03474ecd407e96553ceaf6aaa00303220bdba63a68df5f4198db62dcf8a75f81c26ac16585a82c06c3020550fa1c3956e3b83cbd82b8ce38eda0627dcbbe4abd31e321dbaf9a32081c8765f3eaeb14aa6c5e5b164be42bd2f9bdadbcdfab16c49f8e568ff467fc8955966234185f2b8611b856227ba38a4607ad5f388615b561062d5b95b5a73f8345fc9a0c90d397a2e0da9e1be666e18f095cd45bfc9dc2301436d9c84cc8ddc1df13935b372e0b35e7d639d9efcf58920e509037266a08a86435fd6f66eee1ff5a5a17ceba4cea1af528e9c1ae979f9fe9205fdac3958d735993d99a70a9234cb0b4fc5916ec597078e348bcffbc74c7c4837d9df32d3f73ac40b772340cc082c2c2b65519b8372ce85d8b0c91ee5fa59c88d9028d6d283c2a7368eaf90753b83b6c96e4cb83cc53607358cad55321e173441c76f817f78f43f8cb6414d026a5410f79a19758987cbe98d43528c54ee0e6227c3620d730795290d0eb8d351706937277cd5cff7546208273f7c1774baf280d327952731e8c223a1736462f341e0104a6d423208b1a0e35d0d146cab34219c720893a5a6eef86d729b6678bba9029c38d86f253fb8aca8a6b30a9318296349564d285f5a5499f7bc2b5c48cc6f3f82a00014322ac6476cb70559fc8365e1c26447c54c8bcea463f181a0d629a9269b3b84a16073f665d824fd1a0d01653de0d0e98eea85b3a24f6ed4c3c8762703e6196a927b2455e32018fc4b6908f2345416b8721be216be64f054a280d49c7c8cd7ef50e736c0567990db1702f0d6ae92e96ac62bf850d5f7dd893f2233824803036aaf04cfe87db72e341391f165ffd6cd3b8c2a4e7189c82d203c24c44b200dba4e046b4f05f59030c5f9c4b64e7dea65db6263f350fdc6236a039f3ea04e41a347256cfbcb47f6509444cc2f4d2be85da8155d466beffd4cd52c1e037ddfd76afc34eda502c61c4f7f4d2900e8aab715544de24a9a0ea45598df6556d8f4ac23fbd5aa4c4d1ca943f73e282e0fd773b08357669d560fc9acdaa7d3f43b6fa262c11cfdbccd747976a43edc00aa04f56ed4bda69ff65e6e5ff3b0f514556edf132eff4c1890307dfff5911fdf190abafc7d4b77ddb8f3b4d18adfd08d9ccf0c3cb8a27b9683c010c412cf69f97f8e941db878659f98cde73b7a2483bba18ab961bd94926e06600594ac908a2f33440e624a6dd52f006922a96a05fb74e48b19011f8c2a50a1a229ab7075702d1ec310df561ba30edb48cbc93dc5f04d1dcfd1ede41ee87b6294f88248ec78410c1659ae313cb00f8f9dc85d2cd3d195d18c02d86275337e522bdf2b6164ec971871ee07e0fba7c9431ef94ac5fd84a4d0a171e67f9727972c8719e05461871235e9061c956815124e27d7e746a46b1c65e0459eec103d374af83610c1a4e268e26dfa5c6e49912244547cbddf0c6d423c5da57dc6c9b2f3846387e9a0d8f0026ba934c816e7e47c01434e6c3c248181fce44c79212a60fd90dbc614abe3c221696d36b4fef6b5f6824c98e5f8683b7262b2f269e565f207870a18871bd655089818ec5a8984d7adc3dbda1a15ad10df0f999b23e67305bc8f4c12223509137e8a0806dc94d463f49772a66115b4ea117ea05ee7c3fbfa5b94139783e42433f583cbaa43852129a4683d7bd0d2d0191426110bc400908420d7d5eaed96713f407017aee06eb92c78c241fea117e0ed91be08ce7af807dbc5cbd200816f99bdd81a119c82a7bd04306788f7e2a568383000f8b4fdd3d3d53282af419b26af96c8e4af843c00dcc9c51729737579ef6f08a6c20b8c14c5b80f7c88fbee7f2bcf298ddecad23b83f1a3ccab82bb48cb7b49f28cba90c1662969c82e4a7519315b95d38b562deaca6ea40d1bb01923ddd8c85a1a3b78ab9f4fdff68ff29542adcc24a1950ae87916b262bfe2e7f4b210ec13193e939116854a564bcca6f7ce898e1c0196b1f967e4213e7c83eb784211f33176d64a4dff9d90f2c0f6acba69fb44e214f07f6c022d05b1e6a8edfe6885f214967b04586062a787ad2172e658f2218045dceadfae6f55f1663966557ed040e36594a905d1b5ad77f391ffda94566fa0c6148013e77ad92aa2974715083b8c3cfd8350380698a6a40143b69ab96b8ca0c92b8bfc40784b8152a7717786f2f3e9b56b22433e65b0c86a983988fb6251079101742456616598c16c4006c3818fd35d1af4d934dc37a131475c6c0a39cf5fcd9191726f4bca504cd2cc017fbc306eae917fac92a32d79069aa3ee9b40d7a00b195210a7bf091ad8fdf0436f3f332332b02f575f8123050b56ff9a9b9ac69c3144e28b7b62f1108951ccf009b9cec973ec929a49acbe5d982f84652ceb99a0a1500147f95b76935c6515e8fcda0630ad8dda8fbd64079fb841a61f6feb68cab18a517fbbf88e24cf2446caf64b2c2ca1a48e1221763a9a7274515e48f1d146b2c007a5d78db4e8241a6c21b264878eee6d7586bcb5284473539120ae0da0101d67199e532221955eb73ac7e08f69b0e4c8487e471f680cbee5fbd27c52d2bf50a527c404b19f111a43a40ea27d5dcfbfcb34c892f92ff201996d093eaf2940e8e152d1c098b91d5e7cde34ceaa20365b28969b5985b580ce60c389751893ebce4ee9fbd529db12a4636c0b4a73aab4893c4c8960da30410dda3230665bcaa294309e171258d56823fb013fe8ba0f2474200335f469a95f2cbd737f25337e72670e594f18216a6ae4b00b23a1e61edd1ecfcbc298885b7d7f84e8c3fa9cb08c83195c3688ab143a01f220d002e797aad2d420146d09a95c70c1ff34acdb4f5c205b17d803d1d390bd8dda8dc424340987b40061a5ccdacb8ca33008ecd4136f993c396357c6dd11a83a4c504abbefd89c77724dc6091ed9bf86a56072c325dfd46111dc2f81c19c51a4e5b389834332cdac755da1abd11beb6bcb94a95c66a5ad4afcf429c75583d4420091e09ed9ec506c6fbc764ab3a455527ce7184adc7e65db05c4aadb462fcd4dbadc2198f9669b1cd559c8f068e6d80f4661b645d7cba04bfde84a64b173222755dc7ce68421c4a8bef5da95f4b36fd44ac536d40f09978e216f05b092a564d80a9908ead8ea7ba92572a4c5510117528edf18dcecf14b8829728b7e77eff011b1759b39d44c77726f672ac4df505c6cccb31b3b0c3cd647bd94a70ad80f6a4fbddc1448b47f4334b53af0bf05b00580d2fdf87cf1dce3d65f66369e1389f51de251e74d5ee6a55c8c33133479b8296bceac048436b31f355bb65c392391bafa80e61ff3195fb4e7a128d328e94781ec140c35d733d1f766e5dbbbdd765e9fd587aa70f201388c2b9b1fe43280f43ec9efe6a51de7da0f467207fdc7a7ebdff78fd9910c43e0a63341330ef63f1ec961b795d108176faac33d60a376d082c4047a34c7e6652df1c4bb85c144bc563dcc6a2c5a787ef12ba28db24ede58095d1159061cd8cd2fc5d1bef18a71863eb07edcbb284df0c4928034d91f9deb7ed92f53c51c24c99fde97e6d857405da00dbcf3c6c509cd1de0014c211ef70d13d02ab4a5e2f12862946ac1bcb0315f112827dcfc2d9e10548311aafee78ae3b4f4158fc2dcb6b382a2b5abeef80a872ce0eb713e5ec0d8759dd1d4fec2e3ed3ea57e74b248d2cd6ed4ded4eff3b56f21338631f01efd6d447f2e399b5b25c4d3beadf7a63ef2ea6adaca508e68b3e0a5670671907eb6cef03f6b6c423f85daf5e787d9160a5db968069079899e5827f71eafab17bb4e7e6ed503e285f5428167e749a0e491a4c99165eccf4ad09d9f79fa9e91dcc6697c88af8112f95ac605bb2499f9f76285f0b5c505010317d979b8ad5623d4430c491ac119f5b48c08c0807fdec16dcfeb4f6b4c2b529a22eedfee8525c8c4e866da16231cbb7133fd347df27092092f2186d1776ed5d07d16941f83cbb068e85ecefeca7e7856b717a3ceb0bc5659b7d858a9f867c6109f1be0406c4cda0653095cc46a3470badbf97e6e371e9b48364664aef7c439a7001adfa38d4e3b145dc2921aa59f6c8f64324d1f2c426bad13b673bb0389e0de0b1dd25b632d589d35996996d1ad94bcc0e3b08403ac94bdc5cb6a4de372bafae77853f9250c8b22ce703062aa2366e9ff462bbe35215f64c07e7180c52345d46dd29ef4a7b2bb9672d8ad53e9d49fbb67e7824f3b184a9a30953876550d642680c3b1ea980189e70aa2c5e0bd91c372e267f91dbbf70fd8205673f1379a412d4f8e5f9c578f2c810d91fc923355084e924e11eb0de65fd786429f2980af1c8baa744126f52409953f16783cedaa072d223a17f77a4cc8b475d7acdf2965dbc845402e46c57fa58d6eb483e8d2387a990871947c69c5a41827b5931cf22894792bf5c2b85d9ae50f28ebdb2d2948934ed8f3b86aa18877815b15283a2a1226079e8dbb48518aee0e3d353b4d02bb3b0609f35f8837802fd000fb39e7179fa3798319ef1b81e8ed9cc23dd6a0590f596ff39f578f92f668c725f77daebe917652a63c8164997c3b8f4e230633472c87a754535c1089588ded3d26a11a4e6b203ad322614998a9c590686259c7788e4c1819b31b15476b7cb0f375a1c9ec669a0425d05843f0688b6fe9786e34fb54752a5b1817347802547d72bb162eac8ad1405c0078c70db47f9913139dee712b91ebfe62460ab3ecb300d171b7035a91ed04ee7d2e33a5d80e1f5c9586ce8d8318ca64be8b0f0807300c427e862a0825023b092ae4959f88e6b739d6178109665b8f9f2834ce23e5b81007f18d638b6510c650439c64b638801288b263c55dc01901a3536e20e470640a18e71b0152878d87202edfb7a2215f4f2d4db45806ef9e363fb3bdd1680275ec73b65dfed0ebe5ea32dcd0eddda80f72b71fc6e360e482607341e6783ba77bebc66c10ce63e3673c22add22c8c91c0bfacb824dbddc0ecb6c5930e1084efb78ac49199c0d2353397c98f8990af604c3394c1b28b736a7b1d29f130f67c308bd2cf02fe5af5df0b78cbcd9107f9c025d91219c427192b6a7578631a3a1926bf4e5a2c323095c7e9b7dbc5caaa1f8d7dc383a4776c088eab74a8165224388e0da30a30549d3ffa9e1899fb5d9b5a9e1e2272dfcf843c09149ae57b1b63acf7d9fcda7a8e3c248b12a2b296139bd95f6928a020b2491148bb0a8f136bcffef441c6339ae5243c95cf59f1c335f1b35cb2569297b427c3232318f5a8740a1ba5d7061a5aa0334daea7551d17e9124ca3b8549431178e16a21bb04d59d1b873f0bf8bf88ca48d0276d03138adc9bcf83c431fc3a6e0c9bae454cc60b2ca84a2bda8fc0adce226c250e3d0f2023b6c0250c1d1e9cf515e62ea83f72e6388150785f93571443985870a4d894369bd9fe16f90fc13d3926e9e77b49b99c240967d5ac0197b18d66f1cfddfb5e453944159ec899993ab7bee2b71d7cb1557d79da3bd0b886d61371c87331b89f70272415fa39febeb7c2eb2a314ee1f9ee1616ceadbd42e981bdcf75ddaf151bbcd8df3e234ed68b8412e96ea2efd02879266d375375ca57964ed6b28ae27ee514117e9afaeb5b6d885a69c60ccddcba8e4e1ae692257586e8d7ead0bed3650953b39a34cc4bc6e3078f02c2c1de83c29179fe9639d1c8e7e715a93c0809b255a9fb2eaadf8bfa76b77ea7645ae1d45ce2f79c354c1d65c24037783cfa3fdcb11d2e4dfcd4ad4c78bab29c5dbcb7de102513ce810f9930908f443aa8f07e8611fc1ef485e199238dde708b91313fbc400cf065842b8f6aa728c9c8059dda8fbf73864cc2deab9f03063572a3096232e000457d477c818862c288eadbdbe373d2807d052567f610340441ceacf2b481eff6781a791fdee94edd21509b4711e818653eb60c66d9e972d433b03a3d912a1bcf2f259a681c15404a64223b84b0090fb41f7307f90e8841777a92d84760fd8d4ac0eb6280195889983cda79a4b98f9c4e735b88f1de1467e18dbf558217ffcbbe71053b43a8f3e21e7caa98503ed8a3dceace93dcd750edced3f4d8a9d99ed2693c2cb323c3d5b4659280459a5ec9d0bebe60d3a69bcff9cc1d9ba6e324d585c3d2eb8c4da70401a26b98014e6f18e4e6fe9b39a03e8b770134bb0d40625ac3c89e3487b4108cd2ad6d000bb5811b8cf7752bb14fcfefd1b19fce5c2b09a7354c78f5570a90a6450daf7dda2319518978f1e4c44f80f9d326639632c3904519a5bbea71bf1fab98d057a9ef1ebfc716b01ffa2a7fd7f77f4d3ec8e41dcb9ffe054db8707cfc82894946ef73694d80359f7dec9eb107e8d91b5340bd3c8b4dfb640dab4ef3e090f7fa138a26f9b81d66de76c77d32f71d508c5bd38abfb6555251f73025c7f2651b9773176d14d07480ee3cbc2e7d6ab41c1351652ca328e57196e6433a4bfb525304477e5e0fde7fcac97a8997bca2c72416d404ceffcac101562fb3d230510e8a498734469786a874050642a6d36f9cb4193d545cf6051e9d9f07c2029a3667971b05117adba7af1a9850178537350b2ce801ff62b221f805b869a4bb80de0ee708c9c768ede2a76d40451344bf321e2e9a40f159886c0a3108eb2c97a95e63b3a6e5842b5c67c6b92653317995585b932944dbf0e95e4f4b569980d1e5a41fd0b9852b7ff4e596e4f2756034916602f1b9d28c13f73b6f8f6560d412c1815a62a11003d68c70db3ea7808e0f50ded6d1df60c1d225050d64de8f574930cc7a333bb440f04f18b86a8e431f70b5c9e2ce96f76e66b7801a057ffb62049233d909bd502f841cf7cdd62dfd33b66197c9a587fc9fabc3735f57641a99e02795070ede362985855cb01ca7f3551b6b209963b6d89b913b2fec4536a96d6f68c09dbae3b7da85c5180e2f430232e7e334c62b788cc3d87d5f66c7a920c020a1ceefa611c8a6f4ee85f64e3310ca3e345e556657ee5f4ccc74e4ce55ef62214b88c142b26926098f314ec4264e1a9c53db0144631838434b141700ee98e19f3750ac29ba8bbf05fabdc5f39b74b2cc52bdfd191a8ab3c66ca28346975dae37489e09c466ea9dc5a0cb34b5f50ed7e8dc0ed716b394cda75c98a631b72506d85a312169d3ce1bae640f224dcb94821a44155db4284589b2c4ecd04b1198cdbd327dfd001ea4311a00c55de834dbd826ec594baf51d4a8468936da68a28e32ba05dfef6084f3380a103a0fe0036fd832549a829ab619aa26604d5b86aa2950d3b641c504dc6ccb50310d6ad836a89a801a6d19aaa6a04d5bc64a1350c37643d514b421b4bc11f459ae5a8dd79e82dc780cf057de0300ef38882d7b84c1487fc83258f591905c9c2a6842e686c42d2483767a62519fa248e5a028ee89a32ba380b5e24698ee1004d749761a0ffe19247baf9990dfd1130155103bf0af7dc493dbce85be16b979c071a7a8d7b201f3d077f22e00d325edd160975a2fd171865772147de5db5e4dd028d0c3f4f2142f39f899c4c8b0b2a26e72644f24ce74689e5efc037cc6794056f80910409db28b86cb22ff91029e98900772fa34c514f25760dca06fcae76c5d166d9a46a5d1e05a2f7c9696c4ad43f9b7e550846a396c46858accca1f111a674095a90fc9f20b4991bde1289afa44eee35ae887ebf7f60080466a1818baccbca3be88e6834349dcb1500398110dab9998274dd0b77fd912251fa424ce403e9597e3d67251ce6c02e5a71111bb1cf745573906747eda02f495528cb95507a34d3214e61b8227ab66730e1eff673d0ad28142ef4fbca8e805db9b80d76a06016aab6e20b209bc065bf5a5658c035e974eb3e18e13d40c91f86bcc2008264e10a4392d9a4f7ce594382a296af4076a8138ef3492dddd8954231dce29a74bb5f568eb216e27bcaf3213809b0c8d8dc7eafa300f15321e3cf8befb994f1c017a749c52c1f2ded7edf5854b1eb63680361d406e286f0cb4aeb5684e8ba2b0ee48533c65aaa48027ddcae19759275c2b31f9a75b05492b2e2b5d07382c6a45d59ba7cd6a6e8068317d936d718e63ccf6aac788e5d10c29a6b93623d4cbf9f5ec5c43b61fe1a4314b04b14561c87d52e8b1ba6fd6090f45a6c1b5005836f498de2dd73de347cd4940abdd1f9429d87ff6d7285bba761f2687de60a30fd1c177656d0950ed19119fb6ff5e0e4d09aa1ed82d20a1925edaea05882dbb3110a30e4d5f35619664bd14737d1b03e734e2c70c6dc12069f17458d8450c5b23ea6712f01b8ed8498b40600b84b71658fc7d74b35f895efa0124e3484b1ee94e6b1369adc8fc4e44411bb88abff869290528aebf24ec10c22b0e2a8dd4adc8d6189292e584fb2a66526306cd3dd7a1f5da74796f544c18978cdfc87950d6919b5c711aea37932a8a96f877c82931278d217e85e245b8c791fcd4a02a95ab41e0c027e2d46f19525a0d71d000d0281025d636da7d78a7b4bea91fe40c50f58d343f8ac24229750120d15f82f2d741548c2ecdae648bcdbecaf1f941e508f22b41b3fb52ebb00ea9eb9760e1e2d10e66ae9852d13c3c154b1c842ae0de417e5c063af0f77224a527b25592e61635e7373ef8a6494a9fe2b4b422c2b4621941502549266fa42f38565a11210984e32057b10362414b246312561000122b86c2f5ce31b9981167360b04c2c05d7ca4804e7ed15c3fc2b677b05fa1efc10909ea2b20e7a6d55c4c69888f0d8fb04ef81567cc9f7f088fdf6049c3de69ff3b99396ae0c812fb62b086c00127f245c0bc042ff017b7749622c270591b56571b1ef77571bf441ecb8bc2e771c19f3d1736a6a42cef4fae6e2e5a64a2fc3ed0cb44355472d8b6fe8e46730c83706888258c8d275ec0e86610292aebf3437c06013d998e4444627358e4cc5f64ca7732b1e54a0b0baf284e4ce5a12118d616d602405255b24dde60286566099b2a5e88bae90f8bb14f8359ca661e0e5f618715e77e68b40c790408ce01af4ef341cd6b23874bcd139682b91c2b0a1ea507bc82f3e84491f6f83f6fba0ae1713ccea108527e280c6ff1d8b0bc3a113a8fae8a7fd2a010516084bbb961b10dc901af539381e287efd0000401d23bf47a597c5d1d3f9793701cbb36422c1f5f9bb28d8644f34532392eeb37e0135b04d4e2b6169403ca7fd6b57dfad7d6cb7d26f78a7e6134f13b20408a18fc27210bcac8b1d0448e93394da9883cbf92a1fbb85048c7a16d01333c28deb7b2636482d5db62362548abd0e413fb5c65287878403fb06ca73814f4d834d4743d9fabb16d0746f4233052fb9585aae741e2d3a896785eaa0ed87abf45de4ab6dd7b2d8000d402d2102a1bf3c684fdcbac8fcbe966083a500ecce5b0e64b46e568f767580f8c951b215748d795d1cec31abe37a1898b4a564b0575a597ab51c0b7086ffef395acc1848c0a2f9410028c03182eed84ba6a271ec626229d295ae9a1634518e8b30551bf3ee27a894c7528f36e892e4cd50a705abf6feaba690487dbc00d063b852a6721773713144914014a5e8c69299f753253e038166a480b4be30186c8eb3904f67f90e426099ee8c9ead90c11a36580f9e2942354cc4436dd10bf85cf84ab752b558f3cad4f74cd7f3c7494e214f14ad7b6f57b34145dbaa99fb7626c6e14f7e401ee48134c6dec72c6da3e758261f917a588a608138aa485a6c413139ceebe7acd0678281ff065131c51422b4209e4a3227b6d0a0cce2416451454be1f3990668281ccc265b7c8c0b04f26266aed6dbe0c1734c60db0134e708d99608dc69608b88983d09e98faa85e9605200729cecadd1fda4ec710f5bee388b9547f95cd93cc513fe36cc37533c6ae9063c67465255a95d2fdef58533b877d49cb66cdf86878ea8866ace6c2be9a9fc2d8ddfa9a509645af9255a3bbfba87b3b910a4cdf90034ffd13b63e0ae6fddfb2f692bd6422487e880262fb87721a46915a52990fceade875f6b8757998cbf60885385a189f50ad30307d8640ff7a146676dd8cb662fbd82070ffca0478f5130cd2fdd78039b4c06029f5427424f528c0068219c88b3abf5400ad2e50916504a9d0c12d9d71638174cd3283bce56ce900d44e9b62fab82669687d636c030e4b332fcb0325e7bbf62e18ca8b0a8136610844eac331fa63d6641b233b1faac64d97049052e1254b6c10766c09b2d14c00b0486032c1b12326807c7ac5230ad294c73d9120ec343499dc585351716b206dccb13985f2eb8b5899c9f9f300afca2f60ae5ed611211ec56358189e1a4edcbd4c03b74445464c2807d527436b1575f62b268373b01e1845f3a6ef310af8c2a02c896ad4c1789fb3a7bb00677368327562cc7a6d1b3bfe2acc8d3d59c1d9a213527f98221c761db453b2e9360ddb1d3f446a0137baa977c45bd36f0d08f414ff8cb84ac917da8600ff88901ef397a0adf5856cba6bb7a15c267fdafc4e98d0cebc2769a070f8eaab9bc362cbbdba748c4a65da068b00beae1fa2a0d4dc55b351f56b863218e038d727062d0f6c8a32e4330d181cfe68119171c10870d78abc3101ed5d1ccf76a3ed7ee12ba60ceb9403c4d1364f3eac628000746cac1635eaa92779c0e6a513c19f4dc96414b094c1fc55d2dd6e44a43a9f0df8e4920d7fb15753dd032d5fa6712305a8ef24e5595303f22a1908fa3383e635b4c702ff34b91da89f746e637efb6ce6753210b123813c79643b439493401456b7fdd5077a8334ba82492e07e9dcd9435d756eb966c82951056f34e580f4059ed5eff2bb0c7e5e0af9d041cdf64507f7a1b21872a4ee088c69094200f70c2ab4033eb53b66b35f784a083eb77e0363cb8a3b193a0ee6e77d290c7f008ed1000b9d019fb156ba01bf2385b82bbd8d10a26fdbf7705d15a1305f5f6a6211e43354acc25c6d829ff3cbbbc83f9a00c03d919fc1a0c728fe172dde242aafd304af725f351ab04076f04ed10cc0147690b628acae284028280199dc4c71b68c8f7565b5540bd041b2ce6b9f015d73703128fa6693fc7bedc90b954478d81fd36ce0fd77e10573ff4617e1d7d200a6484179ce15093cd1c63b29c91d68f4a8066c843a086e1f06fa25a641c1ffce9b89b71d4d615f022d780034bfbf0478a1f5a486c1c086ed2c51e47e4950de842b7475869349b0f8e80701106bffe382905e6ba32a4e2603af6fa2c5379d413262e9e226ed5bf6010146dac2a032107ef10b20ccc4489a8a27101cee19e70d64021c53e9fe62c3ddb1ec708c51a746135beb1c2f3f9a2b120d07982b03e95a998c04e280114fd343cceb1a86bce2219693ccd9e4c8001d0cccc8bff2fed198084d40c91b4103aca1e1706d664ec83c537d562edfb68cff0c3eb5b8b0f31a0a05692a3c6263cbbb650fc602a879669eaae113ea0a4c8165dd17ca9ac6e217bc24dacf85734304fc915615edd2501681a247605549a98e8f3e5d6a5633339b71da7fbd32140be15bf74458d6e059aff2e28b2563288de143ecdc3955408f1c17d0d4665c3160dc6a3573e60db43a6be0e4457c44731793ed8fe63a44dfc9ae4030956c4d1d5e9dba14b0c06445435239eccce7691684ee189bc33a0efe5b5f7a30a2bc54c4a5e6c068e1bbc89a1b798796d10b2b0294442b6f31b7b1d411c844236d0771bc449582d955f89ad50f0f82bb5cb52e5a627d3d6b3720520da05eb6628a2aa0112522b85bcba788f45118207b6267b42d45610577a46b4c06edbce80e7149cae38064624f2fdf9ff1550b0903c7babd4bc0610029105880c65720d24fab5ce482cb89922211a75b01197a178583640655aba2ea3558ba72dc9b61ee424454b18da53591ea642766e5f1f99345c19a89518be540452cd8b8e6c60e506e510e8288ada025a94110e1ace624da150e3c786646e0aa3bba72c1189118e2c0ec39daef49fca0c9f26ff6df9b43217657c7109044155c0b25186cb80f63d9e3df61e5659d58086fa9c3e39928e7c848ff480b66049403960b93cb97170e5f5f7e609436df4dc6d5db3bbbbd3b85be219015be1bbf4320376f2df5dca392c1c155090ec276713bda7e2ba0b673384454e96c2d61a85f662b1bb10c346894794523beb2fc4069a82f491a434640cb79fc8ae69c8baa2234086981a011a90766fe32e01b4a7ca53c63b10c6334a5f933eb5e499504afa01c769748916349eeeea44e5c74014364d737cfe75be572d7271134f56d1dede5daaca875a68d21754fd781e12393fd9845c0fe147493f3fc68ceea7e69ed291008bab0eb02b78e565c720271b2d8ed743ad8847a165dca62ef5b37176a1b223cf31220c28bbcc9606f9e692ed629268ea775aadba68d8ceba79948b06adc93af678dfd5ee96e58cedb5f851a342030ec0d263fa17ba40bffc4113ccd7c949c1c40b37aa1c65109320b1eb31cab188058ba510399a4dfb317db60e3d65c446cebcc58f7c94aaa85b0044eb14f20343f997d0231a82aac6a211561351f9c9512b1c9cfcaef85d09f61b5490563a0f4a0e2a74c3903ebf8eb0674aca200523e875881b5f6b8eedb214ba6919552aa45726d3659842da632b2463346bfdd01c8be8b48a4b4ce8471009296bf96c31ef0b536112d7b24a567eb60db8fc1dca4b5f0fbd0f3357a8b43c13dafd7ff665102723fba41dff189d0061527a5e2a2c5aaa57b94f8221ae978cdb8f606485ed4aa2f76d0ff7afd3d0e0da8a3cb92859ec51e8bd25b4a707709eb52af5545bb4353ce99e10533392595713a8c92064551ad99983774db724fadeb91a81ec92d09c20469367ba39e11a7603391aae00a1a115993b55a5bce9fd1a9762b8f71b25a4bae6def3d42e4450dc117cdccca1c2ac2206c43fccc2d5257e2f2b4a372b90c3b0b449f61a04e9e03e223ce5d71c5d8143d3f3877596e53d67cb0bb128e9ad7a006d96e03d1ad13f73255938285ac4c755363362c51c33931931c518e65456b28dc2590cadc6aed7e7ed17165cf821a16b2b21f02696657762a0c8246364252d76f19436408c5dbaa928c102cd428d2faa39b4d4443d89cf4f6d28a4281b88043a4c1d612be9f77a16a74ae65f3b3115156397f67698229c0789a5ba8e66acf425339d50f83514da99646704e83a1d85d67e42c1d47cb7b9fbe28f70f2d9d22e243391c100b99b851a3b7e88251a3afc5d7b64cfb42db0689d2047ab8d63a909e6600af47047c09e66ea1764f6f42443401d11ab79954fcc6a0c2389c0501cb59cb8171644d3341fa1cd5705ea040a097c2ebdeb142121f54dcb4dc84a8fa8c359e27c03e557171a2828780af1864074d0daa6f9387874ce0e1a3a2e60464423ab31015435de3068737c23241786e5994d34655c287db82a62e07dbffc937fa6b6039411867661a29b8449f4dd52ffdccf94206cea3e15b8d9d88e743007b3b12a96d72f81de6b5dcb3e0d14105d7488585c6c0eefb17bf2a2bd6fbf83ffdefb5aeb0164441d3ace78c56d6027db3ddd368a16f3fe42289b80f79ce4bbd143b24eb0dcd1fb1788338376cf07a4873108c3dd399f7c40da8f5eb4e420907942476a7c7f4cc04017ab35dd6258e4203369ce11ec4c0ddf0dd91079f5d12c2f7a4be7529f2db4fb6953474f6c62edc992c3ac049d6311a043ffea4f5e82480a41214e51dc0374e6e32385a32dea4754f4873cd64c63b663d902d88020a20490cb7b420f4014d464f5f4d48cb2cd31253b6e3d362c6748997e9b8b49c315de2659971d267db97a58eabc02eb60ea62e839e7c2dfa0225cb6922b25dbca6c86a8f3b63ad80a954a02987abc7fa98875db92597c6fc8c95be95424f692351dc7cff85f429db5217a84019eaab2620b2450bad0bb0d1f4d09fcec01b5a269354c2497edd2220797dc463613317ef7a76f1e39dfcd3e7a7b46f9843a0b4389a4a831e99bde3c13876d3528b3752f752c505c7ebefa2284e495eb1da857c00dc66a4874c7c3d3e98d416b2d3a08c8ce3a88bece92843e638ea2a6b1a274bf6f8a48bac69284be678ea2a6b3aca91759cba929d0e65641d67ba96995693a85cf99b88e9dacf2273e7b1944dd246890ec9cae5b0e89076000b861a7b0bf085672516f5d7a34ee4577667e79c778b7ec7593c472750a9e4a03e8f4f7ff68f04a916aaa3fd0574071ef1f62c552b6a8be6b536e44fb91c67c9e87d4d55c2f2064b6525fbfa5059d92bb8e3881431ebfbba674eb59ec86d46ad7c26bb9a8da2ff8ed9142816654b64bc0dbfe270fe72e855d1ba48a626e655e6722370802af5059f2b2b900c8d5611ad1d866f45b909e07e8fed332c1ca786df9d5397e7310b4acf6e8cb96331ce6803450f8935de0b5350e2e8e7c1d060f33c3e059aaa5e1c54dc6e13ec6a812fb8cb6767168186bd486621f5acb3a712e3094d5c8dca53e5dd87861a3b0e3608b88bf67b6c2bfa7213f945fec90a1a4824c63569fb08188e5dfb648f969ac0324676007dcf0bfacc722ee1ab4df6a4eda7c0833fa6c194c15d22e22b11c944835c2893deb096cade2a8d3ef47baf58ad12f7cd3f24b3ee3ea052d1cb489345fe5ae0cf327b548ea485ff2a1266d743344411f0582ba634e007f2a943e528d38059028a2985b587d429fe492b95dd1dc3e179592ec7b0d965d6651438d0e273f9cc486ac6c0c01b47dbed2b1542537800e0ad838e376269c3881bdddabd4f57797cbd3edc342f0539f0c4a4b08e19321e3240781970eef70965dd82eca781ff25b4787cb91aa04691acf819e88f09671850f90c9af3a9d5a02f6cccbcc1fe4992a30d2edc46f0033bb35dfc9a7731c89835d0547eb0a86f5abf01b6f2bf164a2663b5111e974b24d52f9b9500239029601365105e57af84919660eac2e2151c3cd156328319298071a697c9be2b299f2bb7f9509b500ba649a2203b171f8b7b541e526d7f919c21390d8d1a1710a029f2a2632f8a92c1fe9a9de0976e2e8cbe53f839d87d32d94ddaee84fd0569eef88c42b81c9bdc98258cda905db16d217d9151b2d96cc11381bad1e20c744f124af343d1414a83e64f2895bea532b6c1587b1408e6530abc624d04f224757ecea1bd99bf400d90b9f20f92c4aedefa642b8a7dda49656ede3173499676336e6a7534f0ee4693514cb1855799a417309ad64cff698c567e8ae93338f26061e46d157994ef1a2b345ebd59ea05e4b07466aa8ad702c4945b884b66586c99911741f4ca21aa28e5454156abbd0a59c780d303050251962f89fd198e50555219b36bfc48b34e58c8568b1d1051ef0873bb61a2a02b8dc3ed2d88ed420b4e12b10927c1204d897bbf9c6f6adaafaf3fe17fea5a2cc6307c6f0ec52e93826e75a4a0a3bda408b7f56bfc137951d2779a2ac0bc4edc4d387da4d52b71dad622ed40418cea8581c84492bf200c9881577e1406202639d73912a0d5f342adbea8de6eb1680306c1217bfa862d856b136a4128d694f5491d04a0e4ff2bc531d573aeaa1b72ae536c7400fb850fe18ecf8100044ee135fb23ad76e85f559dde3c75908420c776d166af4c1a1114490d43c54f961afe372ad65da25c1355fab7cf4322befffbba1c81b8b116e59fd92ce50705c392f5ea6a39081cd4734c24e01a83de25f1e72b879bc0bde093c6c003c7a3337769d853f853c7d90a3866fa2a1a8357389fae9fe8a8cff829de0a57022f407a94536d92e6b46ada51db2cbdb56ba37c91d8b5f06d9d655ef59e91c94d7f26a6e245852505454b3b89bdd99be7707d359b30a0a77caecb76cce2cf732aff8013c05aad1f05a36c00908bc655cf0dd3a7c90b63d925d4a71f12e61d69c3465e08e7d09db5fec2182043dfae97eff22ec5c237a46354b9b5dfebbd86605b38c8d45149fe912a12bbf1bc2124c1dc1d6050090ff008141c4538c675de63f8e09dc0c08a9ba65ddfcc120269ffb91fc234a3e67e1bafecb64634d7cbd12c30d97cec4065f9aac0742883e7d0369b7d707e95e48a2928729f4007d04c31d0982937a883c4a1196afb108c35103ec4e94da53c8d7c64f640d670b69147c2ead7cbc98283dc382c6e091cff7a03dab58b8c792d34a052c16ce66e13313a3293047a882de4442e6290d556e2983040033d4028078ff63b2f73e6f00f5e1086f695c358fe06f227fa835f662d71171cd680edb6d59028ba2bc3c412034a6072a91ef60ace65f8e3c4b89a653b910404543d83b9d5e36089a7cf0ef4ff3cd65fcb18931759e4260a26dd44ed557a431058c4afc7aa0e11bdd63ea7ad3bb6adcca1cc237f79d112bd5c7aeaafe2ed4b7219e12361d147cf11b81cd8a2a2e23d9c8eac2e5fe9b5e1d66e373022be0d063a0b7befac001cd865da0bdc6209527e40499a0f0846575c56847208e9bf64fe79d3f8b7f0a1c3b25d3545adf4a4f389bca1895b6967c4843745db61274622920821890ec5981044bf91ecec36829da3a2475f85342363a929a33acd82effb334eda1483683bf33ec97c3cf8425c2a19c51d1132396314ba8376d9680ab0839a8d987337edafca769ba3e861715cd461483cea7aad846204fd42968b0225b503c13a2e4fd117061b5d6e418af34905450078102b9fa6b4a5e6ab4da6a40cedf2aede92af587b93cb557127c781ebdf748a07a4a33cb59fe820860010f3a81bcede2ff85b52a5df8c98b56cd65e9682e5b4eb6992c1195e3d20c16aa1fa1e276de5d93666cf1365f7153c932c376e8c3a2181304feceaf50150b1ae1473a29c245644032e9fd599abfbf00070f02683d4ebd31e431b561a611b3cd10b357ead612a372825cd3ee82e67888e0ca828a701e58ae6fe7977dee16006c09cd1bf4300f8868287f200de7ca7b418a5164bc1db4398f88bff7081a086afb4ba7b63b74d3dae1aa5364495e37055e2d225ec73f713403c708800632302553636111e4f6ee47c24e29a660b8c949e64242e192f2326c3387a9922871be8e82e31617a19effb55d8cebd16cf001a2b64bed792ae42c7a28c1941cf9f025eb25b8403036f20f98e1cad3bf5dcd08328ace53645ab79a621401f252a48a92b2b282dbc4c6334ef4c30f512eccd8bbd2238c6160cd49318267de2696a7c796aaa65b172e7480f95dacaa988adb923575c289901c6d178fc2d805d584f521d5e145812846c18944120064bdc13a872923d5162b768e2905d30bd184a0961d8fee275bcae114971254b9103384fbedf19e057a4067c95c158baa2719d31c074ae1c84c26014c8b9c7ec62a703c226c3c56d2cbc6dfe7cd70cbc7f2e63746cf8ccf438270f2a50a6e26a1815b6fbfeb55d8e8457886bac2ffd82caf93f66a36ccafc4fdc28e0f388dd0bbc2ac097c376bba12092b5299d4653a4fa6aea859933609e21617f58ca724b0c8da71f212ef9ec8718a664ac5881221ee4c7dd63c777b60009a44e9f699edae03bea33f7b4b40e2df41bcfeea010c2f4e911a20ced535262031fb8e8426e2a398a1984e051142d95764638b726c3d142fb3697dac3619ea3ede0fc939f5dc578b3e3443ea3c8920614154cc69aab626f5961560b2361292a5b46866859980cc295661a4c3ec841386008222641c1453f7bd295b8eb807798cf6b7b3c8eaf62e380a80f08697140ab10f5181228e1d04c74430400b1e5cbf7ed852cc154c786d3a274e1021203f13b7ccb8596799364a1cf99e30c6149fdff9f6087ab93f62540ab14ed3e3254b4866b59183abb0586774e018171d2420ce7a13c8dda611060a745022b5ccbc49014190af64642a07ba7cee97c30862dbba17170fe23ec4f3a8b97964fef5768c80fe101a04bf68bc85412120698fdfc38fa34aa52d6bddcad18d2cce82ff5d6e3dfc6965cf8e1888468ad803f8f095ed32b19952618669d9371d5d78d538e10cc86500c26d9de1210e832c30d2892957c640f72038cf2ba6ece275357984a577136cb434409958441b7b451093f82541af403f026261915969b8783c31078b6aed23e6f2e6d46f3237cb75dbf0d2dbf62c3272e348b424662130ff253201a7b3b0afbc986460d60db5eabe2ac18c2cef083bcb62ada247f76339a5812cfe4677986902ab86cfe93597a8c3a5246d3e4abe4728f6c4292bc931a06505cbb13c57ccad31954ff0542631ae8b54a57e886b9edf6cb7c468b855a8a0033430f01880a37025874d4441db8d10a205fe1990f038fa2e3d31535204529a2cdf6fb4f5150adb382d0019092c22c322d72a95bf69a9ff03ce50f1c2dd8fc773a455835ffa622481031bdd94280f49eb70f91dfc4c0d2ad9f66c94e37916ebf50ab1f82ce153cf0d629bc5cd22e30fc21f7a9b741f8814580df7b9a40373f5314f970acf4a4149496caf40c1da70098b4f73375dbd94193a11d5871a6c4ae23bc4517dd3d230e6320a11fccef3e4db09bff53cbfc51e93420bcd04f9ee8edf2e004a6427f3c34b839bed615ad6a84b89dc57febd7629bf5b0adc741dda03d2471027bf71404e1a8d197f567a7d66588750f371475d91207b9e1bbfe692a1cf33f59c8243c6d6510e58882458002826ee4a02cb7c4b14b8c86f540e4bd06f17a3c15b3f71e39be4b4c88609b6fa1234874faffe55f72cfdcef13ab7ccf5c0cacc9bc6fb33c9bf39939383b098bf56d3e585b287d265a79b5446e9c020505680bae8fee245a82b048e58a3f287651b79455153d81c8004d75d5506a5c102c0d5c56dd17f67a1483ab71d4a1beec8dc6350ca60fc12c73dc3d0b8d27e46b16324a9bfd74ac56aae2a7598ee570c0b107d32de56377e0b6c33acc0cc7be20d8bacc8bc9659acd4e2080a0fa9287bff5065b2ea95f9beb4084f66a18fa783b3449e7bc9261537dd26934f7b81dbde979b74cdb93ab4d88045739c87b4ba09b5ada55dc4946779b5cadbdff9c0f964482866b135ff82012328750da40d3a9aa793f7de8306a1843f17a3dbd9ef578b9a0ab0466ddc529f7403debd2f7f4fe92113458965c14dd417752fda289ed67ac4ef214ce5797e5aeba4c534ac0d22354f70e8368dabce242e3bdd4f00df9699bede8fde3d048f6b8d96d7634f829222e42b9d06f91d189bc238b1834b7332886c9456202af627fbd1ea3dc13b28318576db48a65f2ca06bc1efcd1a76e03d7997db8a6c07445b5c4445447b1d63238684759ab804156a357e5baaa0a0e8cb4147c0d622b01f0c58c1ce890781b2aee0b3921e02c627ada600df47a420671484cf5054221e2a9fdd99456c06a83ca468842dcb40216a210c4fdf622bb74940cb2801771f8e28848ca91f59c54113d1f9b1827345b5b25e018afde778307d558507d3467c260545aca44e134b9401bac27d25623b1e666d9f98a11d2efdc2a76fd89cdb2fd974aed64b26d501279b12316b02f770a08fb6623b414eef59e05eaf13756886dfbca8c0c7592b81db5e09516da37c3de06957861d143de245b7e5a51302a1d61e8d2307d4aa45e4229d966814abcc4266442a0633cd2ab13d1082745f131b318eb4319235b9c1683905930adbf3e922288ee54cb7372e1cff4c186c90ac470a12b60dc47c346e67c52ec811768279969293039f6538f037862b7da15d1328f63e3c71b85113d63f09c01028ae989baedab3ee871bf619e2af1ab43e7b05945ee9f9a983660e96d03d8f1a8679ab08d90a7dd316b478e78b297273e0c435d36cc2bf18237b344af2e388d5db3d848823a2a6cf532cd800468f4244cbf622a30493fe0a353cfc4cb9fb74b23052963f30dde18a4041c0dc1f958a6750f8cc52f90ca1cdb3d85fd27eea716986e7e43afde5019dbece7be3223435c346e436fc89c6afb9a375b85e5e6164eb1dc6855398f51c7cab73429028214dc30500a963acec223d371f8d0483ace3e421e9868dffec1d269f8ca9f20bc184b292e8d1046078ff1a6a2980bf15eddf65f56935fb6f069267abbd0d76c2ce21611d22531d37ba5949c237636a14249d801f3648ba2329a1dba447e4930cd5cf227dd14ffb0ab720ed6b137b3c8eedd60d5e19f4cd32aaf6db71b03281430a8ca7a440ffc68ed60cde028d011905002f12b2105d4edeeb1de71d7146b3e172e40981356a7c8fb5b2bdc4a84f1c45ce5545392fd3151dc8f01e70d68e8c4ec301e0a11d5f72240c93334fcad60d04281bc211d02e03fa41b0ea372fb7bee36d434afcd7829c07ff97063ae272c3b8673f2a22d4d94c4f0352b9f3abc6024593f417c355f50ead89ad617f0b1cee6795c2e7753d4091e74491bc3720600dd0ec4cad0030d77fff07c07b491e3eff16bbb35da303d3c5ab1d7062a273e8247689253019b02ee270626eef2e351da0b1281670ecca2e6d314c818cd8b642061ecebe8e1a0a65fa129240f7200ac9dd3ff4e244d23de4dd75a9c9deced3ac935575c118b6ee8c5513b8b5d91f4597c4acecbb33dd1262de77a949e775aabb775f9743988dfda86855ba723a6531ee1204c4774c930c9b0744a91473e7c23bee80fb52b7bb42677d114a0512a82524e03bead3982792d2de43de0f2d24095f98a0607ec06e0037b77e0f9151222c696d0d1c4f78d10cae513ea3fc729d850b8c71082e1e130e5229adc15047d1fca07988dc41ffe3e38f49a7d24a7c9b79422514242832b147dd14b430178b035a1fd40801b26c8c98415ee2e65a05cd8580c779f7034a8656bbead0af7dc36101f51a5a8e9b9491a5bf048171e4f525a42996c15fddf0f255a62e9ab0ea19ace2bd9ed12f944ef1b9a463535cc2cb963b03e74af1ba81ea953d2a1f7fab98ed0950b669b65d2b47c8642994ed0beb41846a85b5c07aa97b8cab0ac320a604869fdaada1a3551c68e3ce04e8546cd28253b707fd327cdb986273f9e59746c0b43fdb2c15b3a9a5b6b2c314c7d63f81baded7ddab92089033ab96c3609ec43c117293ac0aa24fae1a933e7014a109df1db47160c403fd65e6cf11c102d1ca21d532e2c8c7206576d17c347810c403f2a78120ded92c39a4fefe354251ab295f0c381157d9537a1f4c8f07cf47f568844305a0d10bda0038f99f5afccf469bd363c427c80610442b69137dd46e2e1463647194ce5bdbbc56c1841a11ee2e89c8f2a452fc2cc8caa4685640bc152c695be50103db1a9609c2181fa2a8ebca53cb9d09eacdae835336aee0f52d0a2f640ad3029706d70532970eeea34a588dc07546f882b1dd548670a6bcbd6d8286bd4ad8a02f976ada801a9461f92f94de2bf5874e5691681ba4346f7df8d166507ee34abb6a067048c95244c1033537325a6c10129df95b5f8102c76276f1a43d8bf9e004ce98475566e7138fd581162d6d50bdc72131187f95a1aa087e45bb4adfd66515dd64ec08c8b691d9fd28884cc757a3a9ea364ce8ac74b3a449d9909fde42b166e2e06c811d11c930d81d4dbc37f4cdaefb48f71bbc9eb6ad2ed65997a081f05bece818085f01d27f13c0444f950111cf80a464e103e34dd738283fac62fa55af1ee3a8950111310cd0d3d300c19227e304ff52954c2d255a5609e306162440729d3d5ef4b300f5bc97cc1ff291110b9ad3a7c3c0a4d4a8a09232628394bca07bd7003916224f069b1cb11f72fd226970add8b42707e84d0f494f66326c6e930be42c6b6d5452c31a15b43e10d2af1a0b534df45fc556a826a7d9d5552af812a09b49c324398ec5019c4e89fdc80daf83150bd1c5b6f81f4f2657efab67108d8cb476d53968fe4da89035e64bc062a14e1c106e0dc245e569612e22f2a3725747da50345e0bcad1a0561d5a0e9ec005d131c503ce33956892734cb01c54324ad45ade2c65c356d8e64dad761a1760b668083145ec2749cdbdce8fa25c7b17e67644d83b158af885c85bbdf65755b41111afe22fb21366c6dd09038f17dd9063c941422cede7efb8b9046b4252b0b7a9795d6cbcea976418470e549a861247564c3674f44b37259b4981bbe39efba5d7942c6a1166c6f4809c9f9f76c2dfb1ee32255e0d171132a22e6065ce5f252c0a4bd756635e61cc510ae8a57f91124c841bc32b8f0a2ec9407fb94286e16a869a772b0d90925b03f69691ef83272c08437a3590975c75a00aeef6bc87eb190c1812cfd638f8ec6b22a51a3b08d1959560dc236e8c4084c2fc119eebfa31f10ea28c9843d42bc38bc2f6809e528bf688a548ee22de7274e815f47398512cd19a2a198f084d9e2c3baadfb74faba7210d9c8da9d14d4dfd36d44098b90882b0438b2957190df343427144d6822ec4ac4153295e6d3fd2f9a15c6aef0f806ca0cdbcd86af745c4208047b0d0d0c6884010ff9404acc64ca58e67a86d6dd16c2ea028b0a3d9856055c8d1d82c38b9da89d9741c9c087d263481a545cad161614fb778eca59a71f4a07c5a1813bf5d5efd1aae7c534c689ef90397ac4db72950daa58126fddb79298dea9852e0b001ee3a25ea04ce5ac3889a60d74883e34c9b58261f4ccd7970ea617beaa67789889a0584c00c81be3dc6ec5cd5035df22b228d5c415d07c964a39310940fd849b58a65857b98be52c35c1fecbb2293cb1b69dce9e41de22a8eeb02958f37037e60bbaddcfdca87a11af8fbe2019b9c2e0622611d74deb6a61961f933d6656ddfbfecfa4552d2c0c3c51b038f15399c9b12ed92804b8527b4b7584dc45b605acb3059e70c596125810400989735189ff9342256ea209a92ba6b8c8b7b5f7d872a98d1ff1549d27b0abccb56cb949b19a58007d71730b956adbf6b21bf26864e491466a8c210b01d3160f731e83e4f7c667cd2ced1878eab0b7f6bf9b881099020513441413112f25392a84ef7a17c0b7b1195a57542c580172c56640e2a8f5f66760fdf7b011f51628070f63154f53a2624911e87d1f815ef845dfdb578e0a4543b43ea7cf29bce214c690a872420e485439a14c02dffd8905b7a50e1db0954b54a956a9d4c392521f86b9d4bb8456aab7301d2bd6ab5036f53060c0205ac9c256ab955a927ad4af4458ce95837a186ffff5ad5c2a5683fa9d4bbd58ba3e17cb417d0ac6c37850c727937db2570cf539a998934ff6bdac0c75582f733a84e8d80162c49b50899fd3517eac1f5afe3d1183a7d29f3023c51366b634f1840c8a70704bcb75a8546f5b20d8c4f79302a302552a15f812b2a2aa44a1dea24113c6da475951c8b2acb5ac150cf695569512512f6a6146cc14f053a929e08b5aa029c547d9c4b0b1791d3540782db14f652a967395298fe55ab02b48e4f028ab7aad50e2af62b9d457ba7074f8186972544b99ae602162cb5786df92d19af1bd5c5a8871ad54372ef13fd5a73e87b37aa560cd3895e013f053aa97906afc642afb624c8c7d21685f3c40a16a4af061d04514c34f5664fcde36f10794797a0196d25fd054fa993263caf07335a1529813c650fe16967a87a5604bbb3d5cbd9ec4725672427fb765682d887a3d41bdef883b4ca51e7c7f3db19fb352a6763e99db520c6d18c6764a55e92a226b1f7c19a47cf5210c74775164c554200aa67a027ee802284af0512ef8f27d32d4e788322b9ed3f1810e68f967d3722a686aec87b11b8ce07b9218d3c1a85a7df8aa24d4b37e85725b7e5e5afb296b7bf0d4a54cbd4a4be9a5ea6500440cbaf86d4bd1f5b9546a65531616ae54ad777d2ae54aa5de3f27f5a8942ba56ab152e1a7c015a81496368ce5d898fd249b033f47f5a9588e2ae69f4c04c1f7d4a762b21b8c556a4a5bfe19f0b18c692abdf4f24c2e0c657cb2cfc6c6d13fc77ecb86f65f35a55258aa7e87a558438583d32ac3d78b16c6ea3caf5c8ab5fa95a33e6485614eb8ca093fb68a398f958539612a94854a523f60d1a5f4d64ef83959097e8efdf0c1588e8da5202b6928eda752b0a4d43b9894b3b19c1464a57d2bc2bed80e38002cb494b1d29f68811765ab8689974a6159a5c66755eceaad92540a25c272502fa25e56aa7e85ca85e5cef723e6846f3f15cb5989e572c2580ab2525686e097456b67a7055b94b3d29f6841973206656210a65cedbbf358297339a0cc672d511473d430dad21d145f56868f126329c8ca30262bc31de7f1ff28e09fea99a43e7c2ba55db2c44a69ed33f1188af536061289ef31a5162b4715134a25a192c0cffa60052e41edd76b49ce6bf5acb730ff17ac8a7db2025f44e1a7624a168ca5807a8fe56c6999ec7c2768812dd052b65e15be2fd9b6b41f9bc1980b4bf093d925392bd6a7dcfd5d55ec13554cc963606c897dd423013d67f5aa4f3d0b96b38aa5202b5531192ab6f3c9ac7f4e6429bf073f4bf4d94fc976a9095d3efb3eaf40cbbf9f24f03353862f7e44e1839f7da510c294ac15d15a0a7829c10fadd8527edf427dea5b356052ea85c6527fdf6afd6753ad9a9cf8db86ad076349b1a4d67f0e130ac59750ebbf6fb5c42a35a57ee7018940a2ef5baf6495aceabf1793d6eafd4584fa544cc912896f634ae07f3942a9073f154b0a7fdb3226c6c225556c59c5965f2c8440162bac001d74d04197794e0ab272a754d188f960ac62cbefc107bf1596202c7c54887a1185af7af125847a550b7481a0ac044325fb6385744a1b4bcaa1de5f298442a8573df8aa62953e255b8a49624c058a666aaad8127c97ab868b6f7fc795ac07cc9831d372990c872d38885ab0803a2ef0554ac0175f2ab8005cc7058a3060fc2b56c5a689bd60ac79170d074110fc1a98abc6e57ac180a1ca14ac06464c7452d96f59183054e92f26a84fbdcb71942a9c98b75cae174156e812537e2fa652df4a3dcba65e2576417d4acce2b35469459cd2e53ce110e518540e5ada96312db4b0d65ab75a7cdf97fab43873060451a016a1188aa2a805888a6931da67f2c5b448a9962851a2fa21c8e81263451c8867ac8db552b030c7be95d2e6c2f2b3b923d8578a7ff4c9be07f2c95cb19ced0203e56ab1ac052d0ec0960d55a0b59605e4938ddf8fcff723be5e28961750088c184b4cc812e3a5fc8418732c302c302814980f04dfda977dbd5e35703ed9675ff65be05b1848c4e98b42f4014330c61af3c9c48c62c64ff6b56c17206317304e45ea4331b64b8ac58294f51f96984fe6333155fa92af0c45110daa464423a251d5840f039645d4e23a218b056118a2c2308c357d32118d8eafb4e3881263b91467f4333562663ce53cb95cad9888c62582d1962e34684434221a118d162e384a0bb6ba88e902aa623915d812e302c3e5fb69c572e21660c0800103e67bd7c8121930848a85c3fa544f37606c8699078cb91b2c3959c05fb9839f025937384a317683651c738365891b2c62729e5a35c81843c35fad302652f1b1efc310cc68cbd6e7442a9e6c4c461756172fd78b2c1e8800c60573d09229c1cfb17830435cb52cab0b118a72cb962de216718b4df9a53eec1243c918a345f93d8da61b251893d10502636e469656182d2e02189fadfe0363606ca58ac56668a1b1a5fc5e9cd154cec8f2c9ece7666429bf6f85b134baa8b48cc1020b2c9e50f6432fa956e840a92bc61518e7f9c458d885a5250c9f06eb4b18c69450224b169596ef7b1a609a7042c542548cf54509518b122ad59306c8902143860c193264c8902143860c193264c8902143860c193264c8902143860c193264c8902143e673f24165c3d5db17b1a0be05147e30c0b7e1f889aa140cf56ae2a5ea7bbdeb7168e5a8f07ad71fbdb2b862472d564c25a48a59a0d815a3288018cb8bf37c6218c6be179dbc7cabf762056b8b8f5546f452a6fc561f90fd158c75265544cb3f1c376cd4c8a121024e083733648010c366ac81f172b5582b550a258655941940cb6e198daaf0a20a3455746135b04413ae4f47c60e634e86cf52e567635ac69c8885ca05230e0e0ece98af0b2abca0e20c15668c4ca02ca27c820a212c153c7c545c11d3851833a53f21464ce9624e208604629e44315d4afb2d5408a53f216688d27e2b252607d5143798628bd2a24a3096532a1ff0c414563c318509a6f832459729b68066697fb0df83d66553f0596471a20238c8c2825808c4302bd5ea5d210cd60bc6eb55044b91205e38355af643fb2c7105be4a54c15c2a27c654912c9fec43c1ec8ba84810ff55c03469caef455bda2241847159f18b299cb2a45c1ec272e1588ae37fae94ea35c672f69502ebc524f58d3244140cfba897ea43fb2e550ba6fa7ec077224e1f0f44544d8cab18112c3f626a87345031885aa52af5399ccf7ea2f8a8295a305e4830b9c1fa16112cd6a658b0b00626620175c087f159d6073a31118b647125389ce713b738cff7b1028c391c387ce69f68c6558ab10f559eb1656a54df8515c6863137a608d6189614ac311696a307514b91205846846149c112030a59fdf7ac2d3eb3ff81c1f1004b03ac24645a523fa817c38f2d4195554427ff74ce94dfa760ac2e50250a4dc9f28275266680d19ef970949f4553e6460f555d7c68b98edc08c472ba61cc855bb22851b2b694e2b3b2b0583bb05462138bc562b19cbe9f1db080425e2fae565d46f1c5a6efc7f5e28b5744277187ef67f5a205725048f8ac0759ac580ec55a95e2b35c3095eb05cbe18190687dab655b28d51306b0f03086ef5ebe3c3501068a305288b1624c19335b9ce9028d174582c092850063f81fd087e2d2458918132fbf7c3ffe894de4fcf72214dfcf2a8c1462ca7c3f66c42dbc0c7db55a5998a354a1bf8db1debd090160ba2861a53f01260c11162b46044bca79c0b742e38731972ac1142ae533bf914ab95cac1ceb53ac54740253b1f0e97b41ac871d310b8e3201232846517eff7db12c4030cc0f449c7258c10e2ad8a24816d787ca218a302ab0a2091578b10222886091e2490a0ad820a4d092538528ccb9b14aa13ef634da787902513cc21babd467ad5dadc297921ba9542a850ac39c9cd5ae5c854a56af29b24811a66cad58be0a51ac97922f16f332e6c431aad2c2c43167504ddf4ff8a0b88517a219b10b110d91ea73474f23a8f3812810fc0c8c2dd712474d8401554e3e19288e6162ccd97841027e9f0ad6e49381369fea53c5c0ff6c9e4a30e6c46863e305b4f1d2c4187eb2d2c60b1831a54d13527c3fa82f4f3650d884f942ff842069b15cfe62c2fa558cc7eff89c388685c56738fef539c42dec0e1effe1807d8e181610c7cde7689919c788636e2c0f1ebf63c7ef88c9b0e37184374f378c35b91b33323e27cb8d999b2d6ecedc74313a81200c2724e0270179ecf8cf060cc7c76e9e6e9af87e50507c3f233cd8f26186199fd978d08c8d97ef07c7836ff3e5fbf907dfe6e9fb813df8364d7c3fb1079d7c28c15ccb4c097e8eea77bc15201ebfe38f78fc8e980c48a85e861dcfe348f63c9e474c061e2fc3f12a18ccc618a712b4f172632635420abc712389f8374f3efb1efc1b30389f539537372fc2e7c03204113e847750c88eb7f182ba71e35b29970e98eafd7543656d0a6523b452da488264072ce7e301cbf962392aec781e7fb4e379fc8ee7f1abc7b15a3d4c9603165bad78c076c050a818924f06826f03c6c2e23ce02b0613b7808966c4329f0c7c1c3071cc2703dfb2cc380ff83c60ac33a00ef83b600eead4f8d5cbc64b10634e1c43e3572f253472dec19cb1ccc9c9791a397ab0f1b2528136e00afc6cbcdc80f927bbf13660392ba58d6fbd94d808c3304ca170581c376e3c0a96db953740781bb0189f82e5642508abaf01cb8959726039d18906cc05cb8902c009e166c68d991b33316c60b9314ca2c6c64b093e0c58eea6893189168c15be94a86261939c1c5f8e2f62180fffe5fa9ac7e1f5307e0624be9fc1f5359f7a3d8c1c155c5ff347aeaf891dbd1e460cc9a7bf0f16fbc0e8eae2457c1245954af52b16111e76a5f84840970e5aae23b7234c197eabe8d309df3fc6bf62b916cfef7ceee6090b16bbc3f3dff77d3cc621462ce310e319ab237b9d3f92bd0ecfcb643b2f43c172bc0a06c3c2034c59199f9b61a6cb8c1a3bd470aa71a546d3270b77c0fc557485e777be1503c19843a15e8aec4b78293a4fc20c481ced3c093f034f2c07fc125ef625ccb013cb51a18497fd5109b23f7a9d2721a66ab56a50b09c0b160362447daef58120f85929bf56975dcde7dab1e58691c6cb5ee773374f213c8d33387ff374d3c40d981b28669811e143116698293a0a65ffd97c5f8e0ff65fec3f1dff7d4abe1d5b7670f97e543b94f87e46f81958caf0736cbec6c3c28f7d0e1d1fce308305e5247b2b409fcecbfe48e765b2d789a1624724bcceebc464d079126256803ed8a360396cc61966caf0e66947175088cedbb09103cb1b37605a54b09c951160a8f757eb917c2008cb7dafaaf950302be55773f4c9c2a24f16de7c6e3cf35a9c274cbd0e584e0e580e1a580e0c9673e693855fecd1384ff83a305813a813a23e3082f08fc6674da0101dd9a35a586e7059f87f06d4091fc6bbffa09a5e9f6b6151813a2f779ed7a36ef09f334daf0f5f3fb2fe6139b0c411cb39136ab901cb8902b001cb895a6ac07263490396130196dbc1a50c1f07961b93186f60b9308919b0dc973260b94fa20c1f0458cec55ae2e432c64ec93903d3927306a6a5cb93f8c150a94010f5bdd6542b078ccf5c36effef9e7dff7af9ba7327cebc251be7e84e570cad7d7c02c2ce789327cd00906ca09e584ca82da82da01850505048a0894165411aed8d3e8a04e6e479732fc1d5b409d21e5921be508613630ae4cbc547daaf5b99c3365f80991bd8e0eccf5e95819cc3f9d25c4dfb105078e128542a11e05d3f2b962a8d71228944b86bf624fa3cecb84549f3bfff52384f199eb439d9781b02d302d3126c65cce9932fc9c334d58be1f170c95d3450e9a1c2f6a5ca9e1546387efe78b85aef589ea73a8982a659d47557e523e59082b620b179812302fb02fdf0f2a76f4c94217ca8b565ba262302dce137e2c099896327cd40b7c162cb41ff8853050df0addad0d61a06ce9af25e1f7aeb2484a991d282b3a3e1eac541943460f634e0653813ae2cb80b19e5460c630ce12e3e092578b157e2d56f8a142988d7d5910c9e7e3f835b09c1525352f26af57a540181d3c8a11fb60b9162c06c4f8c180a6b436ef2f6b6dc62ee5f82c586e578e2b172c272bbbb8bf94842d56f8d9162bfcec074398f213bb7c32fbb12046fba8577d4eec623f050a19bb2c1153b18b6ae5827d635c4d2ca102170a9624c68437f1b12f404219383574c876c2ef07d5348e29bf6fb5badcf0e55a6246a796989615ad31ad32219a9612e567ad9d22a5c53e29f1fd7cf97ec0b7d696d6b6ba7c3f4a7c3f5ebe9f2f53b0c4f82cf52e864b179412b625464cf9fa9ab702645fb1af89c980c4eb65a8f951751493617c9b9803bd506f535fcc0363179597f1c97ead30e5a70a5f4c80187ff516f67ad5b75e302ba5553d12f0a3424b89da527e3ba50f10d538864b6b89f025634214ad05418f75600c6339578c03a375988cb185c4183eebad00e5a056b1950cab98833ae25b0112b98ce1835fe393c53430e61c8aff64dfc73430e6644e4050caf7037ed151edf452268a302049767c8c2029432fcfa09c5a3942df83cfe47bf07bff9c98fe62b12536be236ac68c118f38730675c49933a9238e384275446a7504eb88d1be7beafbaced41cc88981131236246c48cd0404c023109c424900b586c68edc7b239f8ecca451b7e20b636f759fba9a27c399ffd50e16767f0598bfaac0a36046bc14f0502114cc1b037d65afb11f966a8409b00fb59d467ed07d2ec17b256403e973da2b2a20ed0049bfabeb007c8fa3eab53f36363087bb49680459f87fe3dc086a02c143f0bba68009b85f5cfc77174eb36b49fad81557d2458fb89df075afbc3f65895757ddff7a1822c8fef0b3feb03922d11543bec2b068d4f082b7e22d8d082d6bfa2ef5936f40f45f9d72c01408781c03a92107ca045d930655f16ccf27daa19688780f6fbc2ff5c2b9915ad4df9843d70f8d88f85527d296b67f6fb5800a2ecea0b41251bfb78d6823c76d5faac2a653f24df8defc6670374d06d8d457d9f7d8523187e227cdf675136b4d9950edb123f2b5a1842723ea1546bf55924952bf55915acca5af0b3a16d626d7c44be1a5feb4b7da205ed673f3bb336bed6970a2d2882d60ab1a095d99575596b8bd81b1f0b4c5955683f6b67d6a26e3e1936fcac185a225fcb82df0d0b82df177ea125f27d96c6c7b22bab0a3f6bedccdaf85829d086aad05a2be42d0e092a236009a205edca863876b59ab55ec8b9617384f6fb505f0adb71864fab89b59ffdacb53c9ef29dbb60c59e69a106fe2d30c04c98166065b660e16631812864c6f811ac0a3762c009b0d18dc2a130e04b02a0c032910a0cc89d29ba40903861c00d1c34b9357c883000a787c885718410322f1d42602cfb43c6fee0a79646013fff8593351fdce0a96df976c64020efbc0f092568d9e10247ed5d383e8418ae05042a5e137df00f6f7007dddd7bd0f2a6ed783477f7f11c58978db09a877cfec8af18b7339037f27aa337f444caaa5b2eee7ec3471c626e28528f8ea7ba23e1d8e2ee31f0a6e895c4bb6b6a6cc3a78974890c11f21304c80f1f3d7ca6b8178d388af44ade7d4fdaab06cc0139d01412a029748222e16d2a07358c10681245576a471535840ce81186e02ae208d4009a4227ab1b560d9c1b9a562d842e80375a1be5522d510d41b1c022382c91044d2a2f4d32a6d4b0120226e0062e2c9ac4344da28bc60a9a5c3bc681a6150e8c2f5544ec1181709ad11241081bc21d9a6a60353090c7a647856393c606b104d5909411b00634a22aa2097cd2a307c5427169025b281ae14eab07684357b8c35a2296906a014503c542e55c325c325638ab9b540be00f6c40d100bbd82082691a2117ea9e36828d70e6aa41d98416e40183c2225708a82fc5422a273524ce8061512d500c5d20087e600a54812b568d104c4549c5a82962d9a450290ba64220614f685522803935ac70884734c1e052830d2acc5125b121c4c28618ed3dcd175a5021e604619e00c3bb19f9804509d0092608c92a1735e8e131d6a8522fb8403494c60452a000470f3e59844072002ca68842041dc8000522d043ee0882b77bd06b0e6c70c60a1548e1c405acd00080292e48211a62b204c78d106ebe3061850213a061069a8d1a59c501038b1654d135a5f962073a98f242083736538820041ee840063090440f3c088006801658201a128ac2042128c106b2346141155188c0890e70000245e880c30d363833850a3ac0812f15b8d2844f212536af332f2883c5134e30b1841246f840007cd20030e5051684941499e9d8bca230c1130940800f57f009001484962829e22f281385094610022696502209237ee0e10a1514844c28321302a4874e0c9bd0d3bca04c0b46f044089c606289248cf8c1071e0870250b1a952927f4905ef8c0490a3530aea88165071da4b0e0d30002e8d06342629506fce2fb81e883af07aa2342097c467c11b03ebe1ea08f255b3c6009e0dfe0f86ad89c140d50048b1386606f5620c488018e618d0bc6f8a2e112a1558365b34aa950a90f851245d03aea0a6b041234a556a9550843f5935a81365c47350cc55432144b352474d5d8d085a2854be00bb409c5dc708026148c2fb50a775e36864ca089b582eb0c7760d4f001c911a3841665e4034d2638496273c317b242273a3b6882810d2484a9c18a331b1c486af8421a20cfcec28e8825a8a00985c2517465460d100e20931a02d024c28a05970c970c1896ccd8a9344b074d46f68a49ed8731b5025f625228801d6a50853050366ccd8f1ab468c08a84155c51a11102c6d71291d8a4888429e017bad8008228632d61ed404d09494811b141030c606283047ab8197daebc4c270368a2a9c5b321e086978f1abb420db0484a849f1a58292228960a06284488096883b544074dac94d0cb48d52447c912d6aa89cbe834a281a610c29d1f166a06c20bc56a29890100024d2c55931b483a3489e0285a940a2896580445c211a0166fc543d504c54a89f04ab2d2110ead42905163078d1b125425a40065470d2c1599faf1fa2144a828e50a5334c419f8b372853c1e496a9562853d620ae1102456cc0161e28dcf4a6582449414c151b16e56426a081a6a0151c9421da10e94049a48801126114b106fac7484356a7a80366c68227b2c68037942508c210680027020ab14984098a72e1490401103b03203934eb261b30680292e4859218a519113149acc86fc90ed1821c7872170220d175b6871c2911162344448692901141180800a4a4e98d998e16aa19af8b204125b2250840318a0250151643c7a48041ce0c8288d175d20b9c0450d3a40cb363ff480da8e1461a5b6f88045c88a0a31466c9911f90941468ba54ad5c8c90006a6e093680805a1254a66407ae8c4b081f10a15c083000210634c900d50600212b0c2c20a427e70648427088383158e98f0b34aa192c861890a34208802e810c30214a0801e88868e14e1e1b23e007bf0a109cf7c0d3e33a1161f19718cade29be25bc14a052e29be137c517c5fbe24400a7c4961ceeab0385436c41a2f11be10be1956860d08628ccfc68e218caf25b2be954af5a552e2175ad05a94b39cc628c20e29d2dd2abaee7af0994d54e55950849a8be0a3d1c7f902a70723ce16eeb5bfa928c62dbdce9b60e46526187915bd61249c277747f988b3c488538111678711a70677afd5de965fe765fff844b58abe467fa35fa4b7def5e2ccbfe8ef1e121592245f384d5410990834e2b856bcf7ddf5ac5b7b087e6ec79b276e9450d1adf1f9bfb3fa1ae7f37564d85c7959df0471d3e4a78af77d7d533b553cde9037351eb76f2a4edf961f9b68aa7fcdb6f56efdf8a6de752563958379ebc63abdb6540870a81c87bb28c627c676f71e771e1910e9f1477e5d79260944880c212284c80f9120448010f941c407911e447c88101932648890213f43820c0132e4c7101f437a0cf1194244c810214284fc0809220488901f427c08e921c44708919f213f427e7e7e82fc00f9f9f1e3e3a7c78fcf0f912043820809f21324481020417e04f111a447109f2044800c012204c80f9020408000f901c407901e407c8010f931e487901f3f3f82fc00f2e3c70f1f3f7afcf0f941c4c7101f427cfcf808e203888f1f3e7cf8e8e1c3c707911e437a08e9f1d323480f203d7ef4f0d1a3470f9f1e447c86f808f1f9f109e203c4e7878f0f9f1e3e3e3eeea8bbe7f82843888ea732f95071f71dd60e4b269be16760edb062f8dff918feffdfdd4b707712dc5d870708637ea64411ee3f1b41b00184a4118417fc67ac9f6d1b4eff59b58dbba1ebffb6e1b4a631cedc576702cc0413dc5dc603841a630c2fdc5fa39b87f4af518cdbeebe630477d6ecf7fd132799a87a774f2fcc36efc99ad755c9525ed70c14a3077727c918b531069331061254129dcf8a8a53a6abf3b1a9e8d01d2a81e7cb06dc9dc7141f1e5390fec853f179c1c643e280bbe7f0d1e604a2f77a77a40f09050aee1f179f0bacb8c2b6e04bbf9fef4791038cc0c51c9071cf124493d70021719b8316771ea33b68c6dd4fab23ebed9d0ed3344ada784830ace6a1daab19dd3b222324700417242640019d1e3f6fc4c8f790bd91ff121ec92baf1886ef213d3e5125f4fcbc7fef7478ef6b5933b83be963cdc8d3e87a7312d6cc20880ea84b60b144451230070a1081053f28e1821c238c805548f123840410b183971208f8c4c38d881e002449d3c30ef8800ec0ca2001b95cc1a303d4a129490a0080210251e05003dc71913d154845bad0910146d16244800f1840842b012eb00802c6225e10031f7ae8d810fc3038b81821c0c2951d2f40940e47f0c00506901041a38b6f064c283971128122928c5b7c617c800019a8282202498c94f930b0858a13184d71810582b0e24340165a2e608510387c66527c3564b971010731c08cb080e2b341f12640400aa6303da089cf8993173808e106b1328b2f5f8f0c58d101a3a31870c0044a7c373a08c10156076459c0142ed68b0720e0034058406487118ab0645ab064011b18420bcd0544581118800425a6f440082d1600c2720113c4c809304150316107fb430e2fe4f0c30b0870e20357ec9212476518d0bb026749063be5062ba61894982109876d811aa073c01007e0620985d4f2a8c2d6e0a4b123800c4efbfae109ba03811c2da4b8dfa0092a36780054c5c6018e5ccc0d2250f140e308cc02f70d7469011eb2031824b624f106d0c06c400f299af0010f23eeb400221e3b4238404c0910d7a90005438a3822064db81d37ea81061f268841065376ee439e8430410c4fa46658c0fd460d2710614203c4ea8a3b8804d30c9ce082e44a63c68c140f18d3988008245ea4b1c009321082942c44c03b5da41962872f50ac729113145ba4a1e1cb0b54e70f36346650268df983005ce00637f8086058914648023a740c81ea1f5220451ab2cc94b109124a288282228d8c214ec822046162b0c2a5892f7850822e2344c13d7a60e0cb17580c4075064d076a662429f145131a48b22b400f5b101005972f8c4063042d0aa73d0310457cd10304b0d8c002bcbcc04b0f447cb1b1e0c1928e9d0e0d1b00e20b178218c261071f96d81165872f4e78e24b9a1a100ff8185df962840020d1c45406147490e10bd6052e80c41609a469f2b27fc0050eb24053801680c0063bd21fa8c00147d8a4bc6855e8e0fcc1122ce092ea9801e90157a6fc404b01921660022646782288a31fe0e0c4154978d04841099670f283a42b60a4c002052138a148921f145560c8cd072404a9000f467e10840b20ac2c2190c0e505407e90a32587284a20440784e862e7073ec5c6810423d83013810e2f6080250819e4214db210d5f082041f1881f879e2831584c8f022091b8cc4e851c1800958707911c404a010f2010993912e4de8450c322022b694a3063a90c00b2f6e02aa70e90109083c71812ebc58920215a6c87a4439c00d5b78b14380303890c062c50b2365bcb0e1c00a3e705126adc065850f74906629092f38f0c50a22297c60c511bb2f4210c10142300277f72fa0f081076040230ad0041a4ab060b55c2f0bc3a660f10d6e75b8db2a3c25155df2f923af79e98e29dd91a7ec3c6f4f47867559d3344aea689e8aeac85386c4d3b41327991867925bbd3af274188c8e84980825a1311132a249299fbc09475e47a6e294b4f1907edcadf51e78c0dd7b7c4c6d71bd926abeddf5ece9ddf0beebd63d263e7decd4261aed8066051726e842a581154d5688600751bec86e8079c045085044d14f669a2318468052e0828d193f3a900881adcb8e0a5451556000313551a0a0ee925a50148218337a0220868a05ac1c4841005ec842ca60fd1b8a018e1d20047e5811e14b09ba54d14468852a0551e4608b1cbb4c4fcd8c213f00b11862451ae088751c22300627f0a08b2a2220040dd42134383b90c3613dac018fae7c01072e5cd49023871b640fb82f0501c25b33f880db1e3cee37ae3439f842e23ef4eea930ee0ee673e2f3261cf9bb537ce29fe93be4ee301f5149f6cda98dd643cf1e1d4fd5eece828fe2157a2591d074af19e942e1ee534671e7c59d898bbb8f16f70d84fb3ac5c95d9d22cae0eeb151dcb9c790dc457017720f6d42d07d863b08ee369688d0c9182a117af9993e555e467a5bfecdcb9f37cd0423efeea3bbd7b83b0c20640f1e8d770f3ce360159ea6576794f3d18a6d361e90ddd92beede828f60113eb3894f1f3208e9c333248846eab1f5f0f109d2e32221f9f0710ae961fbe1c928a9f1beab49f6d6add11b5e7bf26dbd26d9935e359f3d5897713da17bcb5dc910db8ea2cbeb127767a97e7c52f846d39dfedabeb51b1fbf77f7183e7e5bdcd3ab94757815b57c42c6efc7dd43f0f1bbb9bb0c1f3f23771398f0a9a22bd62656d2798dca5ec5e91b798cf467cacb38fd3aeeeec3ddaaee2e828fb60b77d72b69aa3dbdc2bcf42a7d6d5d95d45ebdafe6afe9c876775d5279b3d94e791a43a9fd89d3f49aeefeee1f92bbe3f868b1e895dc3a9bcaddada77ccdeb8a5fbd7f6275e56dbc6e15eb70bad3a1bfd1bbeebfa9e8de57b766dbdf1d7870771a3efa98d1d6b8fb0c1fbd07274ed16b7b8d770fe9df965fcde8bedf5bb30eebf44a7e37ee5ec347cfe2ee363eba12eebe9453db8a95f2f7366adedd35f54a9a5889b6745733a7e975f797bb0de2ee29f8e8327777f9e8daf56dbd7fa2e9555251bd9267d6f56c9dadc75c750f5eb3d9d35bef8a84a63d3f7ed86c406e0f9f9f1ee6907bfa081162faf8fcf820827485f41012240891213f40cefbf3639a3de6d6bcb5c7dd51ee2e82a1bb7f2b1948d1f2a7a6a6d2c1550dbab45a2a50880c32d0f03df834d80f5f06248e52cf7a19ae383d90f8393c100dab57c564c8e181c4980c34ac624e0f4403ea55b1548c06544c8c81ef4f03caaaad1c3a08c0e6607308dffe07bbe2f43984b11c4e390690247ee83c6e05b429b43c1453d5151b6a28bfff426b2fd0726b2d08cba5aa80e52a0cc310f5a9551882af52bd0573a005c12f677ff5369441e9dbe0ab5e05aa6448a952ffa15249a8552c0915bea88ae540d5f749a8581550fcde93ecabacd8a5e5d67e0fe654bffaafd55abd8bb175874adfa35e0c615570ca24d47bc98a7db02a38252ab6c126b65481e52a960bdfc6aac85026f9fb7f40e5397018c3b7ef402d17ec7b970b0c57ab2be1bb562c172a96b324f5a8a4542c02bdef51b108f4c03fa174a0ef43b1de3e2bd61486575433b4de862e07fa60565ab01c4eb8e26481c0cfe104a0f0dde5b240df17aa624de0db77c11c6805bbb27aa70762bd0a76a5f5393c10eb6d2bd6045e998106f059b126f08ad303b9fe7bb9e082cd4003f8ab5813f8dfbf8ec0ff5830270bc4fa15ccc902adbe05bb92c30940ac77b240ad6f7d30d787015bdcb605a0843b9acd4cac349b9d5bd3767ac5f8768b68ba8793889cd0387971776ae2a917a74e4d9c5ebd383557247c06c0cc0d40009c0230c53d003a02a0daa80e3f46ba396461cb4c186b1e4d970316bfdd5d0e3e9a27fbda9a8b6ae77a4d8d9e39380e4f70d801555ab17ecc53d1bc7f6715871a0eac2b631cafbcad62a5146b1dc6ed9d13e3addef5f26ebfb3ba833379462aef7b29bade35ef7478bf46357ac5ca9524bd75f3e0f57b485829cd1aafa7baef5f73a3a77aef8e7785841b70375e56f19966f57717af37602155f4de6e90e2ee37bcf36c3cccabf21ab52107eeb75b8461408d66b3237cbb3b7cbb3b1bb0f88a9532cd869caf4a78dd1d79626448afbc8c84bba158a5f5ce8b570c03aa6fb768eb9b1e398261408d7e07c3801aed2e6e62c4c78f2879ab42bf3384b7bb186734a4947734a6ab6b42ebdd14af77df24e7c54dce8b8f1c19d9d808e3f508a886d1c9274152c6261a347d71a732e577bea988a62b54a6fc89fe0b53c8274152fe5cef92ba94936c15ebf293d9ec6829ab4d2d607d53519cbe4dd2f406dd54d40a1a27ad7871c7baacad38b9bb1529a515551ea2418c93af83d7ac937d4fbd9b070d4dee427ca40189933bab4f6638e38ef49b878a7e91f7e29ea637680627728626395d9a6194c1cba72a910cbbbbb4e2f386eacfeace97327c0fe3f61759f1b9e618cc78fa4bd8f639ef189858f3fb788c7484d31777e4c8d6185d336dc5b89d63181dc330a607ed4c334ee315b769307871180680ee94a7a3e94bc3adf98811ac438f8e944cf7c9efe053e565209d5ea5bcee7657d3f2c678b5e9f26a13b35554d7db82d4ab913a6b46952e0e23695437f69078af86e949e7f4372fbf7a5fdd49a2e497728a917ef39098762bde37651ae24e32e190275ebab87d66290c792e352d4d712777ceebf7907ee32510949e76bdcdbbadf7c96c62ada48554aab9933a5749e58e844f1e185207af36dece776a3595a735ca93e52dfb739fd97a8721cf8d45e9cb5dc3dd501cd2df56d838f8fcf4a25bc5da4c52cf91eea2bbaa767227314f5dcaa996e2ee7ea6b9c999669c96b993b5254cf749ed310c18afb6150d8fe6e980d62fee647a377aa2bc2a68fa78b5d196b07ac4888957d8f192727602349bad48dcd34bdb619cb4e25431b32f3e69b42a5e90681beb2a557055664ec3e75d6f3b1e86720a41d16ad617af2b466d4249667672a22a8621af367dbbe992bb6e2625fa7653db89315e6dbb0ff8fff4e01dd1b3d99111a60ca46f9a5e932903ed7c3c4d2f6da7ba790c6ea34bd98b128a4f9abe394bdee1cc7d91f2bb933af4358f8d7ed6bf8395d0f437d6dfc329a0e9e12428ea93bbeee1a4cf43aa1632aba927117a34bd1735b3d6f7f3902de775a77b3885d94c1da28eeedec349b48db5ce0ad7f1a043a243a6f9a62a11a953a560c8133d7bd2145d4a5303ac39e8888e8fcf8f90203622bdd75bf43b255e7390cc88895748913899e2f812569334e07ee25e9a44c5c96d629b0d3f4eba1b4d0a2117c6dd735bc8dccec9d2c75c0ed4033715d5e85e92bd0de955f48f8cac7909ca84cdbc6af451195953316ea9f66bb6e1cce88c8380bb3baee64e06e186e09c54efdb727a555497d5dbd3cdc9dd5d976f406ea0ad02b61aa951ad66f486945e15eb74d9b41971d256038721719a3376c254ce3463d979858a93ee36fa9dcf9b94e6a2c7b87d36b9936bb6ad17eb53e6ee260dc8a277626e71d3893ba9519e8a6e359b9be90813564d969358b7d125acf33b324d5bc22ad21352961d5213249c1b062305f1f162e919ba3527ef10772795f85833e31a4db3c6ebd5b52eeeb51c72ad89bbbf7a4d1a1a7dcf34d3bad0a6782f5dc2ea6bf4a4ed00a00500c8e24eeaf4d2ddeee6ad319aaef7f2d852acd3145dd228008a8e0080e34e2e65f5bc39a5328335e396a828e1a4be4b3ae3a8f4a8c8dcc9cd84d5acaae82fa5d8e8c95efa3b698ab57a971e2f51b1ee679acf344f0133058bbbbbbe7b4a137c5e5dde53de498dbe80e605302bbea939fdacbee034f3f105254ed6f09acd9a8ade6ab57d31eee8051c77d285319ede9db70b5a5cdfa5231770eb0ec5e915ab4b442e8c2d807115d5e9d0d7e8ceebe3f4b6d0e4b87d9eb705297a09ab2d7c29c58c1427f78dae37e5698d332ffe6c4a29f2fbc34729e33d59e8e23c3d78cdba5ff3633597230b4c7edf965958018dbbaf00c69d5479b79b8a9a2b60214f9c9ae50a45eee4895e1d15fd5eaae697952ba89e6e2a6acbff187714450b79aaf833d27d8d9651a4dc5474b7bbe98a95725eda9f77942793f4ddbfde94671e818172b44352ca037a5bfe233e1e153183d5ef5d1d93bfa1464f46bbad625defeed26ba246a3fbc6db44d7ad97f808e5c9555ece457f622859dcdd64c23a740df2114a13c7b6fb6b8632ea3ca402181545d3ddeeaae0a4962ad44615be088dbb93e855baff597dbcdea22eeeeeba8849ebbbd317d75b517d8f8a9ab83bd94b6f2a9ad52742837b97080b22a7ab371356b12e9b32a21ab935ca847578a3ff187744e4e3be0e89d1c129d2d52aeff19a6d7895fd8966a5a12ee48971e67d9c5e3d54e4ee3bdeba66f3358f9bee92d6bc3484e309186ce675a779b8adb3714f766674c5bbd7284eafd1e33507bde665acdeaddead55a127473c91e2a489de727a5f9feaa7f78993334eaa4b594dea6d2760d49cb4e6a5cf2a121f9d3491371555ffb78ae6dde8a489c3806edcfb9d4219ac79a02756d1bbd56cde5434495fdd3fc61dd196b07a0a25e97b94a4ef4ed1adf2548c5b3ad76c6228a90e6f14afd9dc5909dd1d39326223da2a2febee92de46d3aba236cd747538e59d18671a9d37a7496b5e3a85a09c280d05332a0f052f3414b2a0b043a189bba757d35078341bddeb0db3f24ca12d2495da464fbc9a34ac2fce5c793ba1267d714adb580b4911f2e1d1849a8c21a9d49a3c3949a5d6248b799becdcd7bc358aa3edf27a36294a73de359179efa6180a36b1a95ea5f3e29397d2763a1e122dbd4b58c56b9aa2482b2e5233bad7bccbeb8e9694f2908ed0ce4c53d1f3e294965e7ca278cd266deb15b5d1362fa729d649664e816838bdfa54314dcde80daf78cd41679a354de3359ba78a4ff4eef0be4ae8ba3bb2db285092be4ff09a83b49ad1cd4342d7ad6693a6c35bf734c6bdbbc33af4089bea4d2f1036d175a779fb6ea32035a3e94daf6ecdea516fcdfb9eead5e1f46d329b1d9db3d951b6a94249ce9c3bdeaca6048c598e4a9430edee52a9a4c8f16e7771cfa3e6578994f8f8ab651231b795b7fb9b8a62a4d7e5f5f38a61e051935cd15d15c8c724457c0cdac2ddc9357f6dcd41b5bf99a812f3ae9b097fdebf24084c1013b984d553bd2bcfc4786963a4c7fae2d5c4275eca696ae29d1e8386e04ef011880678a33aef74d97c1e35ab27c6276aa23ca3239897de157478a33d9c023eb379a48753e8e124ddc349483c0dd44452a969dae66520294e52a9697cbb3bdaee621c6d630d24a301b96fac6df8588a29bbe0339bb48d7589c5492ab5a4f5eaf05a263949a5c684daf0baa3a5299aa464ab58091f39dae58df5c515617d71bbbb6f92bbefa9b78a5113b5d9785aafd854b3ba555e0eb261287755824d350fcd6647a7d050d29a97365651a09d2a9a44c3b7f5ee35e7ee9a555447a3a9a80eebaeba74d713b7d125da4673e9d59952b24d4569d9a60a6df52eadf888ceeff8f8c1936ddd556938e59d5987cf1c84917af7c98a4f156b253845e2e524697acd534553c0bbdea66118504d63ba6b4657bc5521ac84de98ae8ec674751b2799e8d64c5707e487b775d6d1f6a5e94ca6ad6274879a785d7284b76ead0a1931f10a3e948ce84c29b3d90f2575e7bcd2f0be5b6fde0ea72f6dab78bdbb245be31b7a0ead1849c7538f283162e215b4896a155d37136eb2e2f3621c133ed5234378464cbcc2295452f1f1838a8f8f2f3284f7827b05dc9de6a30949e8953c5394e7d383f4c1936d2aca83d36bea13ab3754eb8bdbb7e8888ecc88ce94a231b611cd665be37dd3d94c6732615d36372fd3d2f49aabce94b2e675c54378b4dd4f101f4d70fae2684c5787d3b789ce9472a2b49b8af6eeee143a51dad6d93c424b2f6f9bd7080ed6a137358b3c794d674a39556ca47978dbb26cc54baf315e52448b935bc5ba2c928be064b546c34977d7fea6a249b777de53bd33317ea1cc1c301b2282c6c9cdcb7faef977f635d174c73bffa21bfd9d152b61557731d2f7ee258273772240dc497d97940ce94111642f4d7936adb1699efae27e886dc828e48b93351d28bf730afd8eac8657debeea0dd57fffa6a24a1767aa3c1befdc5fa496a637a8f6f7f356d1577942761082c2f8e3853ba9fbfb6bfe37d17d7579f3ae7a1f77e3e515b71f23e95ea31877f473c50f104e6abdcbfbe7feb89c4cd36bfe8de26310050469e2fb12f908e48c935af3feb2e0ee447c04420490253fba487927def876f2743c1dca747517b77fc5fbe2f5f61add69f454d2a87a55f881811f352797b0faebbeeb0dd52de5d777e9fe7971e58ff731021f4b3e7818f9d8438a1e4d18ab18e973be7d2f45ba4879ddbd4655acb4e2ad5e75c54af9f6e9e5a9f7c99327deedf27a3e46fa3445977a2912aa75de3dc66dcdcb2bbea9f7d4d9bc8c75e8cefbd78caebbf3e2f5a6de57d1bf3295f71a7d8de28ec85eaa791955c2ebeed7d7e8edae79ebfc4c7cecb1c3dd57f0d1278cdea84ea32a5a921bfd13af59cd38bc74e2adb1be381f207ca75ef3a63b5d36f2a18d3ead1e25dc4935ef78f74ff562a4bc777e67c5fba67f57fc5a45af0ee38e9ec48f715be37cae185d31afca8995506ce2557f6fc5bc2a7fe26de21d9312771fe263cfedb9630fcec94b4d9d1ed26375cd48b2dfa83e22f5c5a138532dc92777df9f79c82c8e5753cd268f9a55528a93a38f3c4fbcd7e5d5767be7c56b7a4d15d53c35f72433a77ac53a9e56b3f9698a6efd78bd27c6a6c9d32aef31ee68e451fd9a6d3714af58296bd4866e159fe8ab5be565d3bc4d7cdcf1429e78e375b7e2ada23845aa3dc66d8c3b1a779a5454b7e28dcfd73ca0f8b8f3eef8558c911e2b5ddceb237737c1c712c4b8df7dcfcf3b8dd7359b8f713bc9cc69399680e5c47bc54a2a7ae21355caebee6bb5a3b18421ee58b7e67dd18daa28ce44714b7fa277c7ab8257157c2441ccb6a1a7de5987d7df6bdeed783a9fbf23444217f2f17a7fab583f46226187374e77ba6caae8dbf29320299f5e333b2101889a5f279939fd9e7a759ff37e7d714724e4e834e1eee4463f6f5bfede5dfaacfe7d8dee5e9ade15abf8f63b3845ba38f3e255e5bdbe4b47a34e938e8f3b1236ef4ebf2d7f9279d3bfaf7717b7e22252455fe7a6a29b97d7c76d7489c4242a7bccd31ac5baac5fdfa5c72bc61dc9d03879aabc6cfb139b2a5eb10daf8f7147b230eee44d454f156b15bda12bd128d3e2e48a778adaf43fc61dc99a906a5ef12e679c4697be7771fbd3f4ca5e5dca2b5697f263dc91bb3ff191c719772755f4e24c8cdb1a631b5e6f6ae235e34cf5f2e035888713230f9ebb933a4f82a4bc2dff9f7845353e316ebf8afe89b5c6eb8e09abd7fc8d3ed6bc6b62a4276f2496fd8935ef31d2efac9aff2a56426f8f7147478ee8c8d29c914e7c1e3992a63708ebd0adf2a0cc66476ea84dcd41afef1f1931a233a5e0dbd51aeb8c3065a0233a538a11a4ded5f9f8c1d3e18dd230b6f5d68b9aa80dab1869a33ad4096d89858dbba17889c6747547ca234ed09df29e9c7805234c19686b7c8e3b469537829911bcec35ef708af7084d4e52a9f56ce8ce2a0d23a1aba991787a1ca1c94e79d786cf117056ac44d3994c3acce85033aa55bcd33c4dc3e69a6d3ab2b83b49a576aa588f3a6a24959ade58eb4b5bb14dab77dd34acb4628d57da8937aa435377c7f151c7094e52a9e1cd3331139ecd364ed35b547be13136baa1e9c530a07af372ef3af1334d354fe9521e7a6882f594167b8a3636e53556bcb130acca4728c44120c21ba94fa51243d05a0fe123fd73ab427882f55411d16b50d6adb5a208e46b7d6ead05bf26d6a6ec672d8882e1b39f4d7d3750ac45d9947ff645821f0a2563bd0dbf2f0cfb6f0fe9777476e8963d0ca8e6e9a5eb4d519dca5b79b67acd5a7a75ab5633ba43f7dff47e0d635badd6db68ed5754e71cdba1fbd3cbdb2baa147bbc793b5d366be925aaad184d77d8f6e59f423bddda84478475d9e8c4414aa23ca9ef8adeddef9c06ad908bce34f39032baa41f2fa978e3f5aae8639cf91a2badd8e8f54ade509bc9349ba959a7cb264dd366339dc984830738b8c021c54e89e3c94f211b1c3b5c74051b1c52dc8d6c708ce0e387dfd881fbcf94d07d8774b944af64cf9a6d6c6ce1b3ad5752cda8a6d9d8f8b1b151c3fd67a78a26ad58f356bce319e952488d4d8d304521d8d4b8e2ee77cdbf834d8d21ae81b0c941e307c8f1429efbe61c3956426d7246c8797d23adf17a9e25efc46a14ff7a2128c0860693fb0935d84dcdebd2ff8e0d0d2a36229871d546842bae57f287528fb9ea23dc5d6525603444247414341405059a94f249567face063059d29e5c4b47336b3c1a1014e163a93496732f1f4f4e86c53511eb737fac6c4e9db44c96c66a2b3d94eafab92242225bbbb2ed9cc30e23fdbdd75e9f39e318263dbd527d6b74863bc448da2027a973c39ea9d46bbdd5d8fb48a93ee11d62b3e7b3674a877dead62a3d20684194070e2a78ab54d8c108ed2f406698c83761ec23a8a2ab4f35092999d6cfc64e7218df112a3ad93ccbc949d1c6d1ed169649487ce0b74813094dedee994e0140915da7928094e91ae1ae5c44b4e151b45d1994ca33ae276f0aeb7752613ed542f005e505e29d8bc8acc5eff4e3e6d5c56d8b85260e3728203ae0cb83fd389f260ac77fe777e8747c33bab362e293f1b800580bbe3dc86b5029bd6187d3bdf86e2b4ce64e2b1691dd12b69fe903f784c7c6693c76615c666f5c566f5c5fd67ee2e9ac0663564c51bed29a148b251d5524fb8bb13b75185d6004014e0071fb0f46091f0e00748bdfb66c23c2834fad38bf55f28bc724952ba4b5a5971ab58e944f30a2b4ed31b04c54684011636cec5461463238ac046ec808d5801d101ee8e721b3101eeae33a5dc33cd4d6c44295edbbc5d0d477177286e13fec071367796d8841ab009b1b8fb5677cc598feed19a09d3eecabb3a93c9a60a9577e5959b49c95d79a5ce94a233a50431b9db252577cb73b75bafeeb68addd96c55076ddc8cbb8e15b8bbb5712a7c055c309942034b4ef8c0dd3f24d4846c0317144006ee0eb6b08372840a64a4c181bb875b1a604411084c8011e2eef6841f5e20c22280047c7177abc30c70e8aca29123dcfd73a2e48417e8c043871db83b38a38730351022cb1714b83bea00064063a5987d81c4ddbf3239f041062f84708110770f11504b0d8123410e0b77b75220f970620a01aa5cc193cd6ce69566de9577c92764ad96b7baaf8a52a969a3da0b8fe3a16ab47637268d6a78cd41e49324ba2bd3f4063921376fa7a2358c97e423166abcdde6615bb6a92879b16d67e7d15d59846db4bc69348c6dbd35dd4c3c744762dc1159b3e5c74c3e08dd41a1d1c835db1e2fa5280fe36a37e8c9156fdbed768fc81e9aee746bb6ad783784d317a76b35adae5869e5e9c74957a7ae17a739ef3e292ba9286e63a6bd62dc4697f0de29efeee833c5e8fd33ab454faebc53c539157a7247a7e8b57dfe6de275cd429bb7fb53bd69cab33dc66d7caa3df5be9a758ec46badf6770bad58ffa9a2e80f1119a1500b7a7457de95579277e5ddcf5a6313ab2f54543e6de7549327d6bc5d6feff4d227efca2b7fcdb614e53dbabb5f034a32730a54d35a9379f7d6ab442ea1913babbf668dd5bb2b1fdd952c1091e8eefe8a93d6bc442357bc6db6fcba875320d19dd19378d7db25fcd25dd13409b97bfc4a9c944146afa13c7953d175ebaf0db16d5eed49fc1755fa13eb1e4ec21a6f267f62ac67f018b002780c980c1e037686108324e331480c780cb2c963902d780cf2048f41e2f01824ca63f044e1317826e03178862881c73bccbb9c1fea5f1412eb9c9acfb431e6ddfe54b3f9bb9c5316562c72ab184dcdff7d97ac58a456f16ea7cbe65db34db57d7a6f0b549632d2fda3b4060d771cb8ddb141d6076e51ee57b88f200b1b77ab42dea8bb894383f7bb6f926f48d147db8208ff9d3cb461f868709752c50eff7cab4011918bc0dd0e3d717729ee4e021940619d38298f86885c108242d464ab190674cdb8da93284334254c4a2323254f6849a0942c1445a149299fd4462a9e626085bbd3620084bb4e5aaf0e67aa18e955de5a44071d79a6ab8b01ce1dabf91603233e3b314ea32ada83e13a89c1eb8c8ece9472e27d55bcafa9e6a0df5995fd9b799add54546b5437bb42359a71baa148332dc268c1a5c8dd79cc90e03f53e1c9e7fd26931658b4b842ea9bd6fd8e16ef6760f0a4c40b3008000c64b8a928cf33192272f24444473fcbf15460b0020c808cb87f8ea7f2020c4618b04e3079be85a3a2274a7e9643afa4d6994c3c3c3c3bdd0b5078419217007192243fc793178ceeeeee281fcb70a145193079ffcecf767e46d3e2ee659cca6cff59c62dfd0ead8c0aeefeb3cdcb65729481e13fdb17b7f43b3f53519abae2bdbbe7a5f5cc2cd064f1e4a7cab3e195882c7cc842e73fdb4c78e77fe7673d1ed26ca6b78ad5bcd3e5a09b8aea287a25371366c2b31946d74d060a7fbc51b7f8c4559e5cef9a6d1add59ad562b967a817a7b454fa22f4118a385d42ade65f4ae4914900413187077001656e8955cb1ee9feac56af66f96c338f39a4e9040cc151685990c1caf678ae24ccb85bbab3e5eb1c55de3db897b2a8a33af8ea7476887b756d1b7d9f22ea7aec0598971b28202eeaed1234f8cfcdef77b487a257526538fce64ea59f14d456f776b2b46f79f651b2c070ef691054c3889965e33f320e07e843b0f6e9bfc5085170742f6207bf0a437afa8928a2d13bbe4c49ba7db5d8c9bf18451a8885141041531b8ffeccc3a98d7c34932312cf87d93be8793689b09abfb076274b84f21859379ab175744a3d9599af4ba5b22eeaeb243dcddad1077fb638110e16e7fb85b1feeb687bbf571b73dee9674b73cee76c796e06e4970b73aee56e66e79b8db1dee76843445ee442b5880efa056fb53456d5687bbcde16e63ee16e66edfdde270b737dcad0d775bc3dde6b85b1aee56041b82bbbd71b733dcad0c770b82bb8de16e6ddcede86e6beccbb6eccaddaadc6dcadda2dcade86e43fbb95beb6e3d4dcdddd4c01738150c719cbe3810b68f5228a157b2470a0290dbbc3b5d0eda2abefb9ed9a60a414982f112a38d356d36a39df8c4d9a6f1aeb7b19a878c76ce50cea50be568c5451ad5f5981ad5cd663a4d79eede0277bfc2ddad707716a8aaa042cc142b4841991370c16d74bd3d7a974311e8c892f2cba043fb1d2ddb21c3efc87a3889d643a2d17aeb555124526b8dd79b8aa24c30e1579e191e21c6c234e1ee4298edee5975f71beea24f1812dc7756b78a8d344e52ae791b2d216b77dff331367ab2866b6fcbbabc35cffcf2359a04e336baae58290749593a3ad56bcba6cacbaaba54f4240ad2636c43537c3ed61769b7cd6b53b18ea26e92d4e8ba5ef3b58a62a5abff54ef79737a31527e7d97eefaba14af38bdbb2ad2fdacd3fb1afd9d9d23a4fb78a7f7c98d358adbe86bf5625d7a57acc3b81daa3379675e773b68090fd55ea8615d36aa5d8de657cb276b1806f484b7a12c3c89d1756353cd5ba3546ab517781bebacbe0dfd8b5373ab9857056b359b9faf89aa3c9d2e9b2bbccee61256779aa62815254988826633ddc349345a9ae2a59d7e81ca0be89aa6e8cef3e41bef75cefa75f9a4b973f5355f157a526f15bd26de69bc2e6155477932a7f7b1de619c74a618b51951a925e5dc44f3b48ab59a836a2f3cd63c4859c954af3ed7bca4eeb069de57efa96253e3f39dfca94629cf9d8782b6ce4dca9d876e2850ce473da0131769220fe87077d80978df6d7453d1ad5e259c62289fd51a2dc5aa7a71266de39b45c2dd55309ef886f5ab3c8b03ebad5809bf8ae2f5c458f54187a723772328f8768b94101591bdb4a6f16ca679b987752fc5fbead08dde707aaaf8757aea7d1b2a7ba313f754ac847f47c5eb3555a227d56bf24c1d9ddead492a351b918a9d30dd27b517be87d44b37ee86a6fa359a5edd8a62dcfe1d8d6140f50e9f9ff3edcbd7a1f8767730a0faea6e4b3a3c6a566545518e585085cea23c846fb7280f41d979880933414c3ca16ad24d45a130d1e4ee68edbcb80936aa31e1a477de14a7f1ba840911dc7db64416773cb4048ec69978f736bade5d8f2e9b24120fb7d15b4fcf4ceff6c6fdbebfeebec889577cbba1ebe629a15ac5367cfe9d80930f35f9519acd34564237aa43d71d6d85136f8dea15173d69cbffe93d71efbc188a4ea266f41674a2b74887b790cabb61201d7ad320232527c6e9350ac2e77d72064149732e3af12974e2a213af278672167979b9bb6f152b65e00a77d7f154fcb5da63dc5106767072af78f75bbde87a95febe0e4ad31b446acd749f3c79f24f21f2c43b173d79e23fd7bb84d74f7f4d6f2aaab5be1bdf6c399f8f9774549eec49cddbea5df12eafbb9d8d4f249e4e536c6a54f7b6fcba67de1b4e75b42d5f5d92be5bf6eb895774c7a4a44cef12569be4a13445b791909ad120ac2f76a2a1f4d4fb24e7a39c241fdd5414b7f3d0a94629771ec23af4e8a6e69585cd233ad36ca4463957ac4494875838d1bc0293925eba5e25785f27391fedac8416ed3c1445af640f4e5f9cca9bcd92f83226b144121070f7dacf6afb0631f998040df79fe5fd429857055579b3596f97d7ad62da5db78ace94649baabbcd667a33615a97d13546c91a4dcd35acc92c28b0615e468a14b87bc9749fcc66475ae374633d813324bea93bab37a1bbde957727b0c404b2b89b2a6fddbfa331bab54ca085dacea951502daf1886ac5125f4fcfbf84c79667a4d2d811280187077177ce4e2c589ab7c91bbef99774e455ff7ee527a7577bd3b213f7ef440754ff3f4e81e2e2e18b9a85c00407ede8f71db86cfcfea121efa076059c099bde6271ad558c54c924c8c0b3acab8cd7357de9dcdeecabb3c12b8e2ee190722b24873def5f420f1744f8f1f3e3d7efc0009f2e307c88f203e4386fcf8fce8d1a379be1e4684fbde50a56bf1d012564504cca04ed9d931e18809afc374a2b26dc34e665056a26dc34efeffd529313cd389d2f0edc4b424f3aefb71e6be3a940ab5421179c204235fc2084c38f22a4e69db8653da99669107e015a1152111a27baac6d6e79b6082b96aa4232ee23c600777c767567fa6e29fa944f4781e5b8af59b60c293f876622d3db8fb0b3e1611466de14828a82c2a83dec8339d68cdc7224cf0deba55dcb3bbba1e8cd78dd4a3d36c9a5bc54ae756b1126dab58098947dbe94c26ad69fa44f30ab3198dc6a2695ecad3f14cda91d98c867577b5ad3829af40bd8da6e88e9244674ac13ccc5361a733a5688d8d708a8d82f44e77f791df3132b2e625697a83d21b349bb166335a36691a9f34159f278aa3a1bb4bdbe9d9cc96623d9b1d31d1148957b4db95f96836d3f1fafe5d79a591bbf26e15dd7904a76f1315bdb8201d4fa5d1860843ee21b63879964334b97f0e31fe9a45ccf76efaaf9659b09cea5dcf2c45bedb098166eb8c13628b932a6fe569219ae88d22a1b8bcee845069340f0511c68368dadd54b40ce2887c7c66f3f3d018c40f0364b17e4697347a5b6ffa483945fa148d82578c53858a0c80c50d40dbd80032f773bd4b3b1eed54b1a6e593a781d80149a5463b310ce89a719b7769dbbc2a4e3231cec4673693d6ab5bf1be4bb49d6ec51d6982d31747bbebdd1d392fc695994994d92c3d2fc65d5abed14ea013eb28b87da24ba77a916827d63c20641480034ed6326ea9f63da41d8c6d5fdba1bb66cbbf53c3d846ab7da9f54d83b4bea989b18d965e8c6d34cdcb9d17631b0deb8b84d323478c60bc4408631b4dcda8e6a5a68aeed07daa1989e9ea684b582d00ce0f66dcfd3cef0f4f5b456958e9e2f4072cfad27ea8fde043fbc187309e534dc349d78705d036d61a3dd34c3bd58c443b51daf5e1d5fb3d242c66dc3596a7212c58766a06c252446279f5e0c5c98d75efea885ef770127aea1eb2e45c0f3d34f11e9e07309ac74ec20316e7a1b6716f051e64d80901c4787a7955f06bf424c0162709c044802202bcef7066872c3be07cc56aca5352855edd41459796f0900e60764e759a66b3b7e399667e9caa19e97be6524e8374c8e2a40e498e9eea35ff2e615587213aa8683a9369006206a0c50790d270fae2062023ef7a7748a8fe5bf4044a93574b01a0d1f1345e0510aa70a8b48f6ce6a91c754c2167444400000000531200303024168e476422a964979450de011400057fba62804c9e09a328c7510a298308310600000000000024002000c46f68c2a55f89d857e60a1701147a994ee1cc68a82455b7f3c4f0d547db0abcc34e36a8a3a184019499de755e90328b7a2525d0ab37e239e11c63be1c93c7f97b8a99d83230032c954c5edb063bdcae7e7a77d49428ff011455ca867bf376ecb90252be9174f1e4bd4405fa901cbde2798706c088554bd3e89bb87841118a46526ded76eba436312d3646c62ffacb51c586f356591342d78c49a9c111d4ca9c25c09b97c121dc452ca3cf74b2fa8bd22877d81a4976d89e1a6d46e7b4daafd949c1d3cb3dadb6112108bad5dd6ed13a5bbbbeb2da634bd5d63e1218d2a1b5c8995aa8a199783a93fb022135ce5134a80aa94098ddf4a6195be2dc6a9e24a17acfe2279423c60066c22fe6af150fe05d11e893537a1c28756a66cff6c4a6b9acda5c2ce7e6b4274e17061277f7f194ecb69daafbb5b007d4142c56feb7d35da8dbbdf12dacb687a17766ff0b77bf26da795eb50ebbb2b18a8af3a1d39847603de219c06021bf24383e942395487d35a181bc73b7cef8f584f0cfe8841d0a477e437a92cc612e22fbcd8c2fbdacf236787fd3737e6ae4c846529b398a044bf22e61d2515b9d7101d4640fb0b23541990b8077e42de4d3b24ab04473f1af98080b859abcc824f7d01e388bccc0c3f3130759d5d1587fb7dfdf406e18b94de971236793c7bd98cde49f59de8a065da070f58293960816d33c05145444c6d39f5979710227f70d7512e4fdb3031930bcbe4c203cf8d9e65ae52caf7bebefd0fcd8e9d7dafeb3a9911af37d19f8623b607a3e455624c835a5d57582bafbdf0b65b0081d20d89e1f1527297e5454b76658fc95e8c05791a2292a9e56537fb2b2989a31df64625aff7b3b9a547200fd843e994c84c2a8bc74f3a14d7f2dec77fd66f6b5043f1a35f95c92679aff5f72f5e02ca8ee809d497ad7591a1308e55a753c6a801876766932129e6107f7d20dc169f335100902f817caf2d5358992edf1eaf6e037089cb36da604c386f476577cb9e07ae63e8553fbd6cb37fb6e2051a22e95c4e4cd2af5c765f2fce8771808ea860bd02eb43bc3897debae6c7a0530fe2f29a61868c1cdd13203e32ad4de4d51bdb2d157cc1b7195a7e266e8320c9fa768447f01827168041569911adc685aa41b1a8c0edc9b820420d7b3eba03fbb09cdbba694ebbc6a087fc489251381d65489e93cf2687a8c7c886a59a84d7b1bc343c60ecf9ca2a72cfc7e7f20b353dcf2a3dbd48c37682f99b34e8c6a9cdc795d0f9e229921dac02506bde615ff59d13dd8629d5b4b1fda35982920274054eb9e3a50853788b059f0522adb6ce46a8511536e47a2cba76f4c886038db79eaf7319501d31cf2886f5a58db1e9fdbb4a980f9df9516694e3ab7517b8bcd6bb90debe9dcd2fdc911c06ce4d1a7ddcc1fb6bea04bc994fdadb2e482ed254c3e6d683b10f40c9561886d42873cf684d3bf89f152e470d43e76f5429db1e31bcf5397f63a6eb2c8757c8346921ae22c5ee7aa4251186b562ac673b5d8297b95c8f67ba1b46cbc90433607bbd6ecb8ceff1170bad6f1a74a73cef83986d383eacf9faab26652cd47d5237763a447b7b19082713fb86f84a2af1ad400e64ae88c9ede01ff657cd59ab5e3bf819ad29016351d2ed226ea8060cc2b2276e842bc23faac6d354c421a06b643f0145b8e76ba7b0e9093190b1bdd57b3e0a30c8ed2827fc88e1c45de5161216f880d4e2c3a5717e98c052bb754f7cfb0f898f3d9da74c43fd8a0c1ec12920d80e2fc856bcb425896bd3d069690fb276c834ba2315e8b2dc75ea0aea7f60372b3d7ffb3cb7972ff6f0d1edc059c12179c95410be86f4cb3a4c7743e9eee6811a4bf95190485daf2c2a1eb94c5fc414067e6fa2e18fcee0567aada9f6002c5bd341fa5508ae606e845a85f7acf8a17a941bf6e1b9f0730c68259f751072bfbeb5c2631e29341f6e39ea2692712dab6bfedfb5bb2faf5e055d9b279325100ff69b5997ea857fcca026000bcf28805f8969dde763215d1cba1d460f433c175a32ec2173961259eb35b719154cb20e98129b881b29848d6b2744b8a38b61186620cfeb8fdebd4a0b7e865ffb746cf4fe459e72230fb1f963c63bb5b685e8d33b260caa66a58e9c764fc0d628dbe31c7d663e94d3f4ae62148338a6a4506412e08c1c5acbc2c79a4a0e7db23250dbc48cfaed293386635961e458d75763d2ac4cd118654f9fd4e7dae3960a801684970624096769a344817f863abd3bb9428c6a253a6ee6b62b0f7c949dfd26c1e93bad772275ed69b4f1382ebf5814b0f44989a75fe525a147a7827e90eb0e6346ba89e4180ef57a67555a759a4c2537cfa88e913c4aa40cb4bea26b2a647a66e3d234470e251407665befe16ea5d2ac35733e270e844498511ccaf03b318352c911e2f1d43295c5f86af754d6bc501a493aff822ea539c8304788f83306b9daee7125651ae446754cbac57411c3dd164052e437e577387c99d710247b54305e4f19da731ee5a6c1d1313f8b096fbff1a5a50ed9cfc817f748bd346271317c25b07d68c0923ce5083d63963beccbb89e16c04dba9f375617ac3aa64cae851c86ac07d66bf5fbe7947a20736e3da8c298e0a531fc021e286344e07a7e98975fcf7d164c2d3f0fd6d96e5f094c4a86a91d9205b67d84850c41be481219659d55080503f896f6fa086ff1f3a5aeaa4f4e87c928f6ac6c7ee7b8ac67e4de04b36ad5166464ee1b9971dd60f42b3dbaf9cafc2d57e85e4629eaf4d83447b22e2bfd8e04826be2982f26b50a36c0798ebc79cbe6adae272f8983cc8513010f8ab2551bd545259ce283a5111589a153809af45cb71f8e29981f6b167079e448620dccc7e3325433b93da502186411a50834ef916e507ce5424709288d70072000da278a238d7e82de2d96cb932a88dacd4ae3cfde4984d1b534bde51b3081dd211145e22ee3c28cba1099b0aff54d5f36f10ebc7dbfd03c57c716ecf5cd8db56c210ce8a6efe4939b71ba32cb54a86909eafded82e62acbf25bb14cd5d3bd7a1cc5d1e6d87ad620dfab2cc767ccf2cb43f829024ef95f270c4f88d3b69207d2164be6ede7807b3ccb646042e5f28e4af26ab5d9dbdc5bd48ca694c8378bf3ae523a43ce306146ddb39c03d2f6a9dd5373f589a10c5c9d74010bdeb727c85928fbea793f6792746c2925db81506f4bbe1bd874a08d7daa22d067a4c9af0d05fc0fff0f0d045ec6d3d6d937eb959e61ccdbd9f17a36cd16d02cee06dd266e2adf8a34b29c09513c4cf60aa4c2e42911689232f11d821d814798dd6354766d292c807671db6ebf194edc18695682b2fd495c3481f28671880f4c1d77c912123e2cd66f12c07bc175019f75f54695ac35232cad99e1dc09cb754563118babd346916b19fdc41eeb145fca972aef5aa7c1377792f736042aaeb8d3ecee4261def72e01a965b1e45b108637f164db3ff1ee07c4d65973ad5d69c2af179a2cad00c2424dfbd1081999b7eaa2e6fc46380b04fb33433f2ee1de0854c64e9c6f1a04a190565121f4256b11ca2852081275d7fb4eb10919a896de172282ac2e31a749bce4f8188d9fa4347341b3bbaccf066c37b321a350fecd49c3dde56323e3ab1900ce23fc12c325ba27b5c012e5a16f68b16725680d6e5ccec04a2cad5fb0f94319bf90f1cdc3c3b84e95c0213b50337ba0e730a375b8a7c99284ffe4e253d6c8c6067c8ccaa05b2e57fdc5465f1005c37f87b5e105986881d62ed263a44b56232ae0562ccf88399f18810747202a292ecba7fed7a2ac19ff15d4897d8db4f03a00b845c7638dd41bdecf8909b6c34714b7bea11e0f504e4531e7e6d4896c55bd7089277e491e4935c4c2a2e1ed7146670cde99321214d1398c2b4c5a5f7b88f86e86cd36a2b83fdfb2313100e270ff8ac5986bc172b72361590c37dedb5391076631a79f82be380216e560dbd92bb0dd38ec963288ebcaf1951366e67d44c6a24be896d3bad6c1afc4c18f2d6594924dd0f74e4cb21a5707057c671183c75c2f3e4f4e320d2a3c5bd8210dc5318c1cb6c928e32afbaa048756f816d96b185288c426f70cd7144ad68120111fe47fbf60231063a1fb23f0ca887a320dc2461915afe2fc2f5058646cdcd67da6aafad41565af4e43ae327a54d4a8c2e935ecf138d74a43fafa7a34fcf51c3e6a0f5027fd6c70d4d68c8a25a5b5421b918fea8e1c92829ac1c15bf7f3765daf1bb6d6d9a096370a41aef5d4b5355d8aafb572b9ae1b354dc77ff792624f139d3b17556fa0e325fa5dd15bd13b0127f1cf9f299eb41a9c0d4690ba43387394a555b14126970e167a26ab33e8b52213885c26cfebcbb050adbe648112ec390568784f9e90f1a842216e2b97d4b77ed91c91475ddb9bda40f71ad565320330f93db84cd563dfa3c663b37b1fafc0d7e3c225caaf4e835a8473e8b953e31c48b8232c8792b75d4714814ae6b742eb9af03a1ffb225f87078a8208806970401c09d34fe9d35f67d3f560f76fb43eab79bea0170d583b717c03450e9200e964e957d353cf9a4e16e36dc8447e64fddde47ea35f5b9b2d9a7de52e7c02cfb1da4e013e8d1044b1ab97768574150e9ae915f46559f467661c235b2bd712af12de6601fa5f2d30f133df30f92a044dc612e906f4cfec98a710c1e5cf61e961b567da900991e79977c911b03ffce9a17614a9518aa901afe0cb2a4c48024c4b8967115aa328cf3528aac59a6ac87caa68d73c640ac365f679ddfc071ad3dc067400dcc76a9ca854f16429db0e55b5fa74bcbe4b1fefdbc21997bb765e4f20882845cffd10f8be9c75224e66a8c987f1a1fcf8c05a8f75ea78daf57bd985205020bfbf6bf7018bbc523bb1408678ce320460df83a3772a613786b04d0460da7718931656235b2e64e17098f1837296274e6433246018520795d615db159767da665d3884bcde9b2c58a3517f69f6aff4be109ec118e92f679e4089db1e7b151af7cb771603abd04f91d59a026a0616c5031b7ab6d434ee73d310a4cf8f476f99e63369023c771d2c1a1962688da60ffa5a89e2bff68c45c96bea911d9cde4f0925c6f8c7e342e054480ec8e1c82e2f04bf14891cb445e7aef0ffbeb3cd346c3f79d8d56de249214621918cb1d26ee0709084440f1273c9e60cb2f8047e8fac99ff25a6b9b7bc6593af621490836d106fd024b9b697900fe07a17ece4489f73e4d4bdecc6a07050224ee0574f42ee29293198865e731ec94768dbff3a3ebb0defe06ac434b12783b6dae5594f55e58c7d1f93deb1ae5759a11a8e5cec6e3527ef389292e0a34b67f3d3119157577cc39c706c47ac3155810771462b713ebc4e613ebe8d751e2bab82c41c5ac7243c67bf8f29950790d4ca390672d13647a3ebfe27e7009327847496093db4e65e513567bace855bd4b6d0e3df122309ddd5d2b76da0532dd7da49d7086f2d03d8c7c35b20e333d4949d780af4a72ec72b2b9f3aec9b210096e1988c96694f9bf358c8f98f359753e6b9e3500d437402f0a833e74c4aec0061d9229e4431f818ab6075740135e2f487fc169884b2a1ef9517b55db869cdc76bbb59ce1e449ecaa612fc685d0d6b4508a30ffce0eb2a0b3e26322658b6064d85d2ff9c0935a2907533b49b913a42ff2a1cda7cfbeda9570ea8194e6620a7ae90db2e4c98cf3b82741a47292aac0cc4ad9bc7388da07b9c3a06a517c675e97738abc7fb9b6968f6d2afc084150d763cd4157aaa115deaddec2e39d8435aabdd239ac85f03a4c649ddd9bb6fd88b0bc41568e0267f85c903a991fde0244126abc3a04616f7c8c052a279559eeb9f25a97c7d6628a798a6bd24eb895f5d8a7633948f821043a0ff798064e33b09fab50113c7747ff7accfdead24ab7f19667bc1762e8c2cd371ce8069b7c7a7a476f1c99d3834f0d6684eb628c75b07454c72e9042f8d780ef15c7b4761dddf623390adb54e3e2dce940f43ba1ff155eb7b472014539a65f88b30a108d548c116114a0877c5c7654f503922f6af29befe849c35ee4a0e32be1abfc4874931a0d005717759c8eababf165037807b6f6eb003f06add586bf1eccf1f9380f42a7f3791a95a7f4ed69ea8ea8bd4756d90753d0acab71997be117809810d6ad80b064fd2ec26e49ca74b776078b602550188eefa594f84c64369fdfbcb5e22e6bf5a7dfdb547c3e2e6783eaa6a6a11ae9cf060ecf76a07899d463d2f8266e85727c5b3ce3fc8870f26ba5361d61e6bebf146c9a33aefd2b3c528e06c739284e1d0fdc9d7e6500b1273cc3ea30ee0b97fb2dc20e5e6f0faead03e6ebd99d5e4b1d7eb77bd43e428cf28f970795ba15844487e0330b0bd597a73fd21b7570c9b242b44e359d20634c037ad4269a8bccc777bded657cefcdd0abcebdbb20162c4a24b2fcc5204a5a13c42f851972e127aeeafcd912dea4d78aaa3d69e2705a8d5a6296db42f95118f646dc35a9c1b1426413552a4b8121fc86902dd0f493d731fb72e8b1c6a9038c049c1a7c08d41284a7091ea0303aef7c84feecd3752023e06f6a41bf5ad36761deec2a02793f7def68a11149825cc70880236665280d844e23eaf1092017b48f2464d7358cbe41dc8ce43f40657ba99f64f9ac337db48191b1d5445a419f5370bca7110469387902d57c7c60a5d15317d04d945327e5c0b09a86381e988409c70c3f7e695fb11ceb48cb26bf8b5b99462acaa29e6e587adf052132249909e2e39a54d6ff56f7c615b9677e29f5154e2440f5de7528b3598f1f9fbf5c409971682eacf24f2a2e018d9e0f9c835ecf073f3709758d854f06967f3fda9955cdb86205ecccd0e1aae91e2a30416c74348149e604d5ae49cdedfb22631b01725303775037ed33e89182c5d214942030b8ad6d4addad9feaf3a314104ee3ced07cb0cd1c1139fcffc3b149ed0245b5e686a7161e2e0a49c24f64f486eb5b89009d9a18458d2562fb67a5620162dde21f1b24ecd3c2dc992cf6f498d8d4f2e677f5825f825e664a209744ed8bbf5807b5e5c60e03c28eb73703a817ca39a201832adcd5f0a883a6106d5571a0a0436d8a485d46034ba13096129cf18442954b80089b7018993e989d57c9d2855836868ba21b2cb04163a7dc48dc0cd3a4d415bec9e2a51a67ce30f62bf602b150f992033be2b04d60a52599382929a146d0027d129215297431043d2e5dd3154e13a87d7b9a045cdb87b66c6cdd9f2f69e4921f4e99031823dc9e9b9544b9a3a2c452212834cb725f756d76a5c1769aae1dd9623e7ce80e9a1b900487a6e7b368895640b6500a9b727ba88e5a0f63764b10ae3fed977eac7ff50dcfe7c776e5f0d9a11c10f4983a85b2f2b2de57725f23371b8b83ac5daf3ce9f2222f5bd5d777bb19679c1d27f191b36ee31b8d2714a0ed0719f28c614f6ae8e23e3928a87a26c118b49f48f06cd44dad6cadf767cb4772f30bead9994f7e975f6a1b222c42d6439da07e3f85fd848c5bf0f551a74e691059ab41dfea8b1a93b3216cdb8da9a5f0097f1eb58eb4c2acdf806e6700cfba5a9e2069eed5141c8a848488f1e0ba1272fd1cf679ab356065c31b2f4286d821e2f93de3288d7495adc3626c5c57d5933917092cdcc645ef5e42b1cb0da8765e8e130bd4f182a52b3ba6650055ba6c5958431ea3cdc4ac05d7dea73adc5e101cdde389e8d8e0ec609e487a5befad63d05ee1d96e1616eb368217e7556a07d3350c4169767151cc8f2d2eaa499b9b7d1c07edefc54cab9d216157a005f2dca8e62cb8aeaeaf2b005675f5f7d752c59075ada53abe562ea5bf71aaa7a838672fe8c1bba664799d9299a3fb8a16e21eb4ebd3470b390ea5c80c5b0a0122f3eeddcb64c38022cc404588efbe53a9b4c84869a13dbccea72fdb4eebe37d01b50362ebce7d8de6bec352ff461b640615cf1c101f3986f37b81646bc93feb94cae89fd6280dbc4a5fb2435d3e04a57e0c8b4b590ab7facc06e413927bfe7292d8351010433f22282e3a97c345c2b39532b1ff2fa4045e426b6468d48825afdded61b6b116480fde94fec1f001f1f602fadb458d1409433b10c19a534bc139dedc5bef51f8e63cda2ddabcf9ab7df0c4ca11decb6c2855360195db137592f4aa0885b708f7329a734f64fe15ed2156e1af98b8f82d7afc9a32992d33b1dd3404ec86eacb5b09471f6f88ea3eac36c550547f05c4839bc64fdc155012a42982988f63c82efd3ab29146f2b48bbf8b36165348c3f0da8b2e7485b5ea6ee1dca22ba7fdcd9e74f8fb183a05c1bcc500e858cf02aa20b723b5cf7e85ef0074585f0f4d321b88ee6f216d302864d7819fba6f6bceaac34e662433f0e626eb52ec30e5866e4303b2afc8f8fae09ad86f512aeabfaa293a23658cae5e3c4d5420e131d2a552c265826f1ec956224189ad8623a7c1dd7bc06940a5d11a521bcd25a87955eb92dd03ccdff6b255891cb337c9530bf3fd95d16c364dc96fd2060d1c309d43b5039aca42fe21432b6d1b9f90a505b7052a6d3502ad2e84bf3ec7286feecb8e1b0a37691994c228541499e79990fbf2d3576cd1fe4e56438153b36e2397da821b6642e06e4c71f720dd4e9b63ffa5357d96205209202fab19e283c5bca1077d845ca59fdd535d552b82f1e1682499d725a253c7de6a239bcffa2aea136af32ac86d89ba2fc90b8cf186e28ac11dd1a25888e7b02199019fd77baf234884ce25a1f45acf5750c2f7cde80a79e3840e27748c1a8c10731f463f1c3a9322ca8da3c653b2d6a782bc470f2972087cc041d36420dca0a76c815425d900c4130b1b0af36e09738c6f48a63e8589e2b50b97f86f03edaa8594ade38f310b02297454f9bda9caf55147ff8ae6a1008d6e7766285d9b4946acc3cf6a7dcfd0390b67e418c56ea3abc163571a0d909e3522fc215baac0ad6127d10c2f1fe0a8bd64ca968c2643b6b7d752ae8775e5f5ff3f6043bff1612580bcb646f121e623aa20643c5abdacb9bc3b628e485eba79545d401653e0a52b67b5a468365da7b7da06f21fa06c2f3f1f683c03a69e8ebdcfb0a80ea11699e3d01749fac0b5d4008eea3e7bfd4368981c2801967549a415beb9408cd050251c2354cd3083ca3e11fb29921cd3077661115129fa93648e5af653e4ee959d5abff119eb03071b3eef0be69448010faa27178d04d4bdefe24488e00385f428811094ba43e80c0a56d6cbef2ea5032d90d8aeb33d522250dfdbae899ef9d0f00436d1cb4be1afe7551b8e01312c3e184621f71acf6bfbb7f9dd42a3c7a91052b86758f34a8f62e64fe0c017b2e19b02e0bdfaa1c21b1939756430380326ab222186d692fd827b5e6bddab486f0e35d326bdfa9b1c8a9f2aeee450134a82cda3a2f5dd5541cf439a7d04512897ab97b8e8eb2b1482fb96965341720be2fc7dc4086a2a2b0a84ed2c9b966837b66ac8977eb50a19e5e3dd30e6e325e8e051f3d90f416aab2ca60c835c764a7ac088fb597bfa7a137e5ee9185389c84d566c2323290abb30153632e363d4717d79699973310273411259ac7d3df0e83f9f41ad705b002e319dd3a21991b8785d76794cce61608c6fb63b59dd8253f155a51123c29e18d5fe1873f22caf488a1c422407cf80998958e2bd11bef2a87e95539e9ed2640658af709ae82dfec5035516060adde68b5a4511b9f43e6b5820023835128ef52ba232bd25f92d778f0bcd4278103e5248fb209165816d5d5c6c09f83bef9198019c10e0c21a7329ae8769f568357c3405bc46e40dc05fb5576af7e4f21b6f2403efa202307897685e8c73e79267df243bcca09559b8dac8f0c2365f428847d0394460cf60e90e38942148895561d14661dca0ca4468e444f2b2c2cee04adc03fe9307f5039182cbf80e6ab5c5e76fba959998a9147c7b0d59144e53c4684fbf93d632216fc2715e83167bbe4a72e6b173aebaa39708219990de4a895c9184788f531cebcf2cfd0163989921a08a0a0a4b09d09a4704fd949be00122563f27c06f8e806cd6105a3ce8c733c478d19a553be3ba3e2d0e0d1790516c04c34d7c4bbdb0890ef60b8414e60af41fe6dcbd457a0a15de6f40b53d987adf0b2b2a903ff2bb88e09f0d68078a2fe668d48dbb288abc1e543d0a97485fa4802ae6ec788a3612cd7d72c7283b6ae994e4ca1a00c9b99121936c004afadd703fcc435d2eb6fdf9c568e5eb77fc0ea8fa77f8467dc224db60031f981c3c86e76070b60f06251272ddf0ec7d3e016641e4cae4a7580afc5dbd92e4f8ad1a97932377ee7a473749b9d558c9431c05d7b7583c97f1daf901e5e2ab15573b085eb96188e1bd5b88a7aae1fec96e39f1f59c4f4c24c473a3f69e88437c1877831869001bb8a0b755ca359d2219f061990e364709b0c7f3bb21a4cc652d59dc43dcc3b1608e5cdfca5cfb70e9689b3848ba334f003f44d6d06eeb8037c01dfecb4d4b781681babbfdc91b063a9307ef7ba184bfe4df615a58ec236522788e7463e73e6962a4eeed83d9bffcb285da6f34a3a9f0ae93b2ddc7f10ef3acde3ee87d66bd4ec21c961f651371350e04338f7ff945f9bb3074052a8505e1af72eec439e873d00972eae7c1618f64fb428156efd9136ca621a82ceff7cc75c67073077ea0012ec8440d55f4496d89a209681862b00f251ba4156b29afaab2b0f239b96188353b96e47d7704acbd27e5dd907375b608c610dc8cc5b0ace0921634913a1b03f76a272068e1fc103a8b2df89118a311438423b0506ca04a664305bf270e13215398b6ca104bf89079f884910d63413b88396cecd3d4b67dfdbd54ef75ff7f31fcb5f4c4409be69bd91a53d2e2ce2391cb0b63de154de1fd43cb0f88486a02a7f72fe6bd5bc3fc5974f5fb2b2fbf27729cc51893b2802441c0f29821925494f32f15201fdd7da015ae4357807ff69f6e63939d2012ab7dc6c0fab56269f3564485aa1f7fbec48b85738a8f41dc0c16a17645a4d16b2153331fa2ab4be02eb10db926a36581b45be660a1fc32bfcb9f60f7da66c73062c5a25e84805f34441f5df0f56889a17a198709087abb47cc6b68d568d7aeeeb9bd0c8d1d93b81c02f4ebe5bf340924126c6e58f7132150ea1025d63a8f023c671b2880dea258802a80bbf35f010d6a1418de752516968d0642eeb10b50fefdf90ccdc98f151b6625c097d5cac4d64c34b39f70128e1b43682caa0468df5b95747e1c56eba11abbe875a080e6a6d9cbe30a00b39bf6f7896dabcd833ba235747c549c332289d4a19124de3faad0f25b65c3e082c91f272891c587cb190a2ad04b340d0d7e196de496de6e755d9729102963799d5347c9c84651d77c1a6572c2fade2989a0d34882910789abff303816f1000fb2d090d824ac06adbcb89d26807680d84bf7ae271e1393b589140475db6ffe41caed2b2c2d4aea36f07fb009f7f1efc7e933ba8703be155156dbed53fae6ac03eca90952552f1d0e1b80d35e1fb344770aa761a18434c037a2d105560de80926f3a7a6e48fa1eaae5087609fb356ecafcc56252d34b8dd9ffc4b3a6d8c9f1810a7e34f1f4573297569e3169967b649da8ad3c36cfc6bf2a976b6845957c61c575597fc2f15753c1b6ac2889c642b78da9610997404aef54c290d2921191356541f47f1f50a9a90dbc549e5b275f956da3cb80572ca9aa3b14f727a9c39294616607961eb6f795fb29530cc369be08b4e2fb10530fadd6b1f08cf2ef86634e84420bfb7a6a92d6b1a9bd5ab40933a71658353b9f786a8aa6a54226bc03fe989fb4fc7c8b2e545e536ef0be771f63bb89b37aae24cbea9740b4a613733323ed240b0977e2152303db8cc59432a759daf06bc7bd77f72f117e38be3fbb6c869e7291829f5185e8c1f50f64d57121597451df2f54be73e574a4f93920b78ffc3efe2167efa855df10b85f1e138737a1955c1ab06db4d4bd39f359cdf6455a9597e60294d53b8ee7a7ba58d84c9054af728fde7df2465a7bab81425c192e199f6f0f0ae826afd7c85ef079ed2fcd6a156fffa711916586efde41a08043d2dc69e628b52eb9e9726667414c97da1711199e038338966a141e82caf6bb8f280dc3bc13126a07d27a0b0050e4e60ebf17bc2ddd80374c3fbc94579f6e1bc4a22da8524c1556e57c3fe2d37d3cb7376ba48ab4e5f0c40390569f68f11016c7c6fc9b6853430691c1c0f79060a19f7095c1706025c096f045982c7470b1b2ac32044f0162bab7a9435de278dae72d8e99ca70f1db2334139a734dbd9a182b278c3b2aad301cae672050acfbf32be4f16808c9471a2e95f46f1166cb6f4d610937f9922ce35d24e7298f543141cc00ac0051265c20278cf5e713549ff04a2f30c1aa0ddd572dc3845fcc25f607079179a5e29fc51bfb05b97c74c0162578114337139a120e36f0bd181f3955987fd6790607ec498e9db0502391f723897b368cd2834744c15b60815cbd4bfe38a5c87253e04e18489d99237fdb5e6ffb4fb6e0781496dadc9220f0aaf2199618763c583342befc71fbda9d909cc6124dd7a986fa049e32b202eb5d5677fbf33ed1c4ba0fef966788bc2fe69e1bb3aa09d57b5d6a5e78981b9419c58f533aad119767b1fea6a97cbffcbf736d11db480b73992661206995f14c6039917f989ae65d55ab3858c78038f8bfeb60662e8c030e5030ca3894d8788c05bbe03c2b36d1a816c2c595360798717f77465562d96c2827db494cccd3772d5aba7e4926f38d893347331dbb0e3617a8b1456991f40273b685e2cdcbff30f3b67742248dd16428b7393ba8f792253f9850855700bf8fd1a27f955caa7ab28ce0bdc048cc3f9a716d255c448df7c0420bd550d6ddd8f6b9459187689b42622fdbbba897937490ef8025ed6ed2d72cf92a142245f11d7b8daab81126bf8df928ebb0a40fa51d8fb1880a37e633087f6aed0482887cea1ec46c7e1877fedc312a2a2f073cd3f4092c0dc72fb003fcecb97142b459a5d714634b8f02932118bea42a8595a8f2d0ce67323c35d9cc48c5dbb5dcf798e98f0ac04c4d4de8e2b1ae89fa734a8a5fdf842664e225f97ca1e2ca7171053a05830dbb64132cf5da8cea12bb1d471ce4ddc23f87004600e05ea07a6c819f604f60ef931dad67faf0a4df071bec692145fd0faf1711cedcd5b09e9dd361f6d012dc36a9da6702798eabc5bb6a050f357c492f7be5bf0b13e645df4fca8f55a8a4228c3beaee1b3312def9700893ce39072f08b81364fb1d27581cd68fc2c57ff07e6e9b40e63bf6e5fd9aad3c126a4c32c7d5ef7e7bee575d8ab1f677c846ce1882607a40f14ef1226ec11d2b831b826793f3002e3ea6dd48472da992c992524bed4d9f19cb8f8ce5268063e5a8fdd886d8a93ed66425f8dd91ba8f8d94e74c48ccb740b61a31f650ea5b0384b3afcd24d2467da3cf5489316c7dfd064bba0862700d7ddf36a82e932b50b9d4eb9619db62d5c4f71640b78fbb652e4a8ced9922425ad68f405bc73326d2d6ca5414c00a4c62423ad8c526e0c18fccbd44f374add8529f0d2f9c2686b01bc90e5d3025eb5b4122bc74b979cc52799cdd2e2920ea086d242002b89548350958f989012fa3424adaaa37f764d4d94132d80ef7bbb8b25bb543fa3557ee96ca7f4894313bfb89e4b154823229471037ade006f8cc6aa8fb0acf625de28f32a9f467f6f667c631d29bc98f8a809d9c145e011fdf84050c411e319220dcf5efc89fb68ea94177edd8e98ae48f9365cfba03e7b7956e876957252a9ac7bd8a14f432a1f92aa83174a61d064724043ec026ddb4d412dd694b74031704874f6e39c0275d45f6722683be7d9d359139366a972e32e197bee12fef22c74c0381b7bc2c32735623eff333a42d4346b80d4561c4d66cdfc90f1732cdedc32ac688b4577fa2f423630eaaf0fdd4313d529a17bf52eb2d809325a7d8ada37ce4a6fc487b00917265a8979c516994fa4ddf43a1ebd0eeb8680ba6baff3e24cc25adcecf17443f025256f26e8713b7c86c2c52333688a14108158f7c5c90bcb5d46461557becd38710b2bcfc0ca9b5b9f547d3d157710d950d44199d33d2fc589d54f4340637ce6770c2cc253f0360258b9f94881cda198968aed6bb7c733014ca2853db47678285cc69d7b146f3057b1f120a1cce8c34f4fceda8dfd064201f4276a4b858c193c3c92d02a00698d3982b72113143aeb49aa74471f121c20573cbeaf7785a1f078549ed6139fc8f46d71039679a201222d5683e75afe9100db36335a0d719af922f4fc227de0f0bd5ae51dc735ad663cd46cedd60b689a7debce4492c9bf9f28c81d8dd06035733e3331f9e91ad77198459bbac1056030b1d14217c1a4dff20a7034f2a289df5629e40b1f943a7d15c49be7da9e8fa6267116b8c2b084a72756c32db8a617a474d62be397125a0cf865d4171f09442465d260a9c2ce005012a4d98ccc960728915d81f4603879afa6990f1302a743979254ca275a10e7df1f2487e1a1015863615b70cc17dfa82d673f6593322dbe6482f8d53e7aa44e3742670e8dc939c705c6386104e3363184c6a7b9d6caafdb456f2699dc59c1ab97db79c7029414ef466ca74bc79a4fc360337b9021a5e31e9dc867f39709fdf2a2e98258378e8cb42191c30524a050572e59978cb609a1dd61bfbd3131217e5ddd146f98127f3f9b183894c46e4b45be72e57761b3ce5fb975b20438dfe1832f68d19003557eda46c469a08851baea2be5136889602c89cb58cd47250f25ed70002c4a2e1df7efc3197d5cebd68635f636b7288f624e9cdddbb32c643513a8aac28b409612336f20ed9cac86a83ed4b8d8e257064c81512f691b08e2b5cf5d990fa05f9b752519e447872c843c4e591924d90826c8cdd5e9a2bae739474fda8b96372378fc27d349e032094f46cf88d04c6aaf9616de22cbc2b51c361cea8539653e2a4374204e0922320a60fafe573dafd0980dfe307ea379821c1acb97a048a98163901db8fc896ccc3f511520e5d8333f3db10c46bb754d4fef3c736ce3d2f6359eed7b839a354ab27ee8466908318462642f6e2286676cd1d0fdbf5f559f9e3979fad00f182748da6b7ea8cc8c974dc472acf26af93d2255291414e766e90546858473aa4774225b623867c21d603d9794602fd0f0cfc5c00a1c5b8afdccb067b1bb17e4bb09682bfa391ee200bd814dd555a3e76544abaee7ee919ecee96125f8fdf4411ff0fc6819926cda6f0f32c680e41b71e7ee7d3ad596e6785745d3c9a8a1bb78e9c4d674f68124b7e01628d19bd28a553675dc8cdc181708d1561a267edec9adc55c2c3514c492e263351e844a46f1dc616bdb5076df6b83b49f0bc0f4358e6e3bc886db4ddb31aef676f9a012d592dff6f5e32508b36170fd55b82209a6fc1ed34aac0c14b0ac2e2e7d0ca43d349239c82df6b2be56348301f12f19dbdfd98904545fe6dd98f6d896fc8a82947b1099a8e411dcb33cac654245a9c173cf827e19712294268809230f695de2318a592e54877c2efed845e3c1f3a42e0add43f31a8b9355f64fa220973db708633a1739c95377af4c2757dd8e0b50000396761548ca1d0e31a6afb9d10ad4a42cd2f931ce4127faaa8963df109e03caf7f523027444563f10c41d35d25e54b0dc1784826449f06ab113f324d3431753851834c30ef5d10ee8ef466c86f31723ffb617ecc3ecae0c9e33d4acec22a1577721dac41eb1318edc90339b7921368fab47eb95b4150317fd81b28706db1c73d80538e86572c445012086810f8b877dd755d979ca8bb162b19fcb7e117eacfdbecb46251c67401d8fd95552891a1dce35501e5df6a6101bb7e7df917b90095cf339d5d856ca9da25f1ce49ac158406924c0e4361c526cff42888455671747680276b37e21d3a3076b88e531f9f43c4499a39945428006b452a4f7cc15606688acdbd4d68e0b4f9621790eb6654c01df2b7b4534a9ed4d58e495fad7fb019d9c3c3e9d6ab011680c02e77959419c382e7f868e90722ac04a733e8220f307340537cbce45d08e2ab71c87a14fcd8e5c324cd3da0a794a5d3f3a1921220f78f98f1830df81a47fe11b6918a59844b23f37b3b0a0d98caebaa9d5def2195a0cebde1632bd7ca4d20d1d4cdd180ba56b87222fbffcee5777b12d769d999074684d1461dc5e51334e2bfeb6c6a65cd426cb6a818b1c22ad41dace8b07f137d822b77a0fb21d42315c7ecec521261af77c483cb8c1299697a2289b6232249395ce02cc71de76c2cfcebcda3c8d82a639b88fbfe39b71c0af5d89ab4185eece749bec678d9de5a2f8ecab6bda09efa129de5966a9209173c043b981aac2d43dcdcf5dc387d45df040b193e1eb3cbc68315bb63cd368952e2b085825195aa8498b90375eee60d3b06f31f2a586184d4fd76d8067a64238d3bbcb5276459bf9cd34787dbe4ac19f33c3d4ed2d5547757073327c1f1265dbe5c0fa97a561391f6664f3fc80bbd074072591630eaf08671c5f4ba98d62f41e67a04db827a0208205c4ab1087c1318247cee7505a212495642efea3c30b7dcaf3e0ded368d45bf9462b1f06f0527ec1da338dc8c108f2e0e92c10a74c3b7b6b658a9095aff9d2fef78c8e77435468811be2a3d5534fb483a68be0f9d97e3158f96a876df52408112af46c59bfd20df7c2d6386866f3eb0f0a9f77a6dd9b166eb390b7e77c66e93aca41cf51ca74beb8004b9ba6bce9ce3136fc075fd45f7735642cb1e9235111db683637325d1012a58d76429a6ca4b1152f61c47de27924c5c9f3e7f75d3cf92ddb88e48201b9d1f7d663f765444215c8b4a6e23639c34d9cf800dd681b15de19c2c60633f273cd1fd070f8c9526861054841dcde4c6954d365ce18a60376921f2534116ef88e4834063933d8c657cc55604642d21e9af6589796bd89238f68e30d18a89811d8d541a8617a04dcd8e0bb7216a4da3a5efa2b9a098794d215dc8ab20b59b1a24cd2e9a03f2c1c75f9c637e4d0cd221ce92b5ec937919cfc181d5f710d9c2d41c196bd73f00db6b3ad66bc1ce7d8875f88cf4e17f4027606a2d502912a54f704cacf13821d642e430c855c77099619e95ff910492601ec776dd75049838775b6db334cde406f0ada5b4777b3490a8c26e94704eb2efa6146d93af16592c92e987cd8226c320aadba0f5ff637dad12284a67328e497dfafcadd1969436269a7560d1fe62acdb777fee536356cee0a5d02d851eee0d2efa11ecd970130c4a0214f5fb68c187f7c4d796efc5e4307c945b90db0e3e67514e8a93311c7ccbbb865abd7581002164dc3d34724da629f8e0c676610cddbb6f0c0e7109449f98d78302a9e3ffce8678991943ca4a7585b6b94663da570c7e13a43d5d18a7693ceb18174b55e65afcf4b344650b9334b4e6a7bbcc379c5c79598814c29a06d056127a17b90556f8b96c04a775c9a5fa5d247c0bbc71e331daa62d6cdc43ff586076fb6d1e978ce7e73899ed588c86182e49e7a0f1482862c06206849c53a16fea0709b4523bbaf4c3fbb58ef95bfa52c2f74bdcd21d6cb6ab53798085410615a3ad7e5477f9634a3efd0a039b2c6a86e95b707e0f3f345872fe6fefb7e95fd371e80213f8b074a01dec8258bdcd324abab5df8f971e9ae83a3625466c2d2658ba42e5a70f0ed99949fdfdfb3f7c1406c7e22b7c131f3418e47fac2e8b16d13f57b8ab46b400dfe04c46bbf72f620584682800406cc3b3f60267d97d391306088284a71cdc9493fffffc3ef94745fccd81c5d534ac1db5d1212d62cf0f2105af848692d5eb681be950178f0ae8ad5faa64770022afa999aa5489b8bf8f92d6233dcb3fc08a12f9281eb2a8961fedc7167437958de178fcc84bd85ef31093066d1dfef77a1b6051869db0d907d529bc736ab9a50ca3ea7a36b216333473a43a16736ba2506a9cd2cdf69cdcb09ff2e25e232fbcb1c72315882707671294f090d529cb648459afb181e6df8f461cd486f1d55fd87426d59d95c1b03ce7d5695484f5453dd762d993198d2044c7394346c8f2efe995794d5e1a6f269076677fbc58ad93400c30531bf3b1eeee189f6aca6df27f456b59afe60cdd36f22994d3b240456551c0ebd10a4ec7b3ca876db2402c0f72dfae3e0fa743219d7d7b8310d53e9e3f7a4ac873bf86318b34e61a33736f4f70faeabd45ba3ac429aa21c01c40d68e327a314fe7ef1fb8d576c008b3282f8ef86c122ab6cd56e7f4cbd77db866a363c595787fbb404e164679835620ab7150f16eeb742f54b6bc8cdc25d6e939e101b242bed21c6094b6f259b18c2fca7d634619c9af4eb24e8803d10ef2f1a6d6d9d096b8f65397d509d76ad4d9fada0cc6f985b39e9a2f85e60d8ea8b81fe5bd4162f58577261fbe010f81347f2b04bdaa5639b29d8ad92eceba1ceda0248b1ab0a3ad4f7330dba8e610779f5f920df6741069ff089f988c189dc14e1a6225fdbe5fa3ee9f59e25bad1e025450e53755ad7e07b997a112824924f10b33ae430d4519b7f9ad76e996d69b9c6781b90be0736a92a5ef79f6a406e0bd063f41529c4cc4126a02e827a99292f6ee90aa65cafe4611deb2c3ed1d309a9c166d60fb2cdb8ade2c70e32e3a3d131ff002f1b79f84f12e7990bc6143ddf22206acf5d2bf5bc76cf4780a65e0f1afe2b82b230d278632007c403c4f0141d913cd4423425871745787f35ebf4f45f0b6f8d85a0fbef89dfa347e64b0938dd79b5d317fe292e5622f5ed3c7e6dfcea2bf21d8c3dff177fad0fd2b00c3ac08d3bd9e31ebad1bcd05b855a96c5aa6b4c0ce285d6d3dc1891a5864bfd588c325ddc076359926209d06159662862154777b58b092f7855a8b2cc9dc2882673241eb3072b2c7d045e7d1e7c46ba90b0071c47cc880bfebbe597d1fbfa72e42740cddd62935350920e7159f9aaf6d97307e7cb0e03a427e8789e14ee5dbbe8ba685b209124c0085b463e9f88bf1aded718231cdc40ccb28f1055c57b25d579ff9ad83552331cf5d582d5cbaa57d41ca38ce26a0e35e50e97d25dcbbb0cf9b817ec6297f133fbe93a84212feb8d3307947882546598519761a38b493d24280bfae5f0afc5999fdf05f262f7d833d1c343c6c9425701848ed0ee2a484a1a1e57fffd779c8c8cc38d79b26c0777b3401a5e98bb803816491911a786c47528b4e71a831b843fa2bb3da410b35ca1bc2d8a569fa73b0da3a88aa8a90d5776b04d47eea7f0b5091a385fd9c60cbb8d94f02a363f571fa062919af55aef762ecd4ffa09307454a2e5ed34ee7ecacc7816a00f6bdbaec4faabceea1db3e1e803846fead3fe79e6c13e52e810bf9cd61909f165090704322fddabcc97c6067b2fbc9c60634f4f45d4b3dd47093111394c07fefeb1f5fb7adc577559e978daf4d5685e3311d08b5e41afcf3b94a686c95b77613fc955b961a7ef9fe2d05b344147062c54fd979e1852012b63b5453dd96f50cdf732e8855c78baece3b72cf5855f174ccb4f6fe830616dd5987532394df29c07a70e784bff408ffca9c4740eed405904e59af0ac1cc8e943c6ce6a46e6e8ffa54b773b7c41a84b3043f290d0fed02fa0bb84727d41d1d3e1a59f7372596ad53d7aadc44b5a40d274c85b477a7fb2f8df0d106513c65f8fa5bd0299c43e4d0b4149e347acaf8f71c05fde7b6a39236feff182ddd012ab43fafa4f9700a8d13d4e7e641102778c4d1622189486c5bb3874453d71e126425fb1e49bb12f089a31ea1e32c7bf09f2e6a11262c03c91d40a000b77a870528d6a7a1ebd6b61e8df46025eea4cf42a0276cf5ff4e41b8dc8b727b10e8b817e9688666ffb847afa5725c870466aadc7c71d8b489cc9f5efb861a86d29413b4d825c34a5b1db9aeefdc5aa19b7de1214ea887c523c0f4fa588555df026e68919e9e8a9affdcef4869432bc1b327c2870003169027f5155d4bc913ca182d09bd6f4bd38ed62d03ce468d5c25051f38b81d0ae7c25f3705e416763e4d6a750569ddbeec866944ffbe14f55d5377236cb85f34ba0236990fa1d520d127581bce096dcfcce376fdc4576c6ad08ccf666e5d7c167d4a7cc71723e3b91b49043420a058f1385cd1ff26d73eb65e00ce2ef2a30286385310ffdead00c1268502c48325846c8e749d89d0358345f4a905f91f03b011f79044d1dfa486ed932eff5d0a28e3fa656bf150c6f22f933e93292455ae2a4f832ef6e4b8f374e94b4391293d86575964ebb0f8b294160040839096eb07dd58f5a6088b3414ca644ffc519d3b441703ead3ef65aa4041701ae9061356d52086d4b28959453be6d4e80012ff39b3169fd15e87fe1011d2357c2dd49e124d1826ff7732c4eeac8fa8f33424e05509d1fd70f3765e9f934b5e8215f4206c8834a3ad9033ed460bd982e364b727aae17bbce0589d92b5831fed0c78372db2bc5479f19ef3d909bf5f6f12c349b4044642089ae7218870c0e8d18ba06f191bb31940d8262fe6b776495c893c4592f855bc5b8c5a92267f598c67254c5d39caf6f4e9a5a299c7c643883562fd4edfc31a2a295f043f4dabffbc40a8a8ed4d356aad9350b9f67c5ebe3a79af221b64237f11d974fb5d2331bf68ee561b66d488cebf3c1ac80b8de0037c3517ea757caf6fb1dda9626b728805386c954cdd63c36fcf9004fd3e32abbdc0b3599edc07d465ab61c30b2728cecefc5c4d240df33ee9ed383892ce859eab028ffd600b6b5a717d8a93f0436773d818cfb9842e8ef4b7f58d5f76b7df713b0ffd60d0bfb303cf73bcdfd03e6943f4dba444771cf7475d8c9191fc7eaf1ae1b01353b03fa30f27b39ae891b2f834dbd6fc9d14d43dce922ffa9c889f7888f7e61bd6c994d6a994ce9bfc7e1cd209e930300fcc769d4bf2b0fcce5b61decbf51d3b3aa650b069ddf455ba13cd7e87e747245f88cf0ca940350a2b4a31b231c72883acbd221e2e837424c88182c4963dcf1c30e22dd6e0bb658d10d1ac4fad6738b61a73aa045a5dd691f32a311184747a3f615dbe90ae8013b64da58f588717f19a3979cbf5748db37c5022db70b987b45d60d06b6ffedfec68bd57f7ce012c4b7efb9750e3306be83ae7368428abf1d81053656d75230cf0bd318f7462f8fec9f402ee0cb8e647b6746b1fafa3fa13a8a7cad539e5cd09e78bb9b51d7b816ee90b7fefc88a44eec2fb7eba22f068d55f65e6767dd82e62d817ae4cc27f712c05ee185050f6f1ca863e58fc214c61d1d74d756e8c948afea552370fd0f76eb609062d3656a1185781119588f072eed42f0708fbc690c7f3a936bef3a15bfc5db04f1219c3741e1d0424e741e757370d8215fc949b424b3d8206d0289342dc8ae7946d4c0baedf8ff92767b1893d24eefcdf9c22b7495bb27c7b4c6e9b0b1bd7aa3e83458c539309e17a00399230a4c6324f1b802f41beb83763aa55ceafa6671894027523d7ac36166ed4f379b386db1e038ef6a376906eba7528adb0bf94d52cfe6e449a471a3885c9b38370fae7d9e43b42a8b187e881334a5d2e3da157d9aab685402b17e8c3b685b92587c9d8368548a987f9733423f831ef67ca341e96dc6e6c4e4bbe1363b1d35a3b35797f1114b0bbe6196c3dcc12cafd87dc009742fb1187fce71f42fbd983fcd75342eb1d83fce7db42f59acbfce61342e5dccbfcf79346ba970eb0a7d8053342bf54103c4814a3138dac875703743d15afd3b5e843a3a391a557ef2bd844bf50528b7bda50dd1a6eee42f08d26fc6472981b84495e9ea632b591bc14f0fccc14f9a54a62a64d054724e25cf9209960d9dfefe9dd7efa5fdfc4a7dc2a5594761904ec25b85a0f0adbc21f4e139ef1d37e014e840774a126de2a67cc6fa1a3e89f407ce958b79b7b3e5e01f167037c2e3d24d26e7aad06a485363fa43863de2df90fa9f3427ae5f5a5e5e79f91727f9031e9404409dfdbff5771bf9c0e5185d8b7c67b5c82fa01e9fedbe669f458d9eb116738293559ee3dcb058c860a716e68bfe0e74e4da5fd94c4f3b92d04ffcf0eb2dca5f742f4f7b3f08f322208543533aa87e366ee9daa1455c40e628385dc83dab0919fcfc53a676c86c35a7a1512e40fa825371e082020796064e4490a107daef560f631783fa07ee730f2d9417efe7dd46a538e7a5d7cdc98069290023a0cdd163404e6d3e7882e698891812c9730db5db8de8d7804457fe1852c0194602f7a7484ec1cae061028df38947b9d9cb646e6d648ebbec8d093f5827beeed36ed8be7d172bea75f690ea101b6d18ee7b894c0dd7471210fccbb0e2afc86ff54280300a1a4fc1e1179485ba675cc610713c0910142946756534b28abf1b16d6c3e63407334c104e2e0c61f7de178ee064aa35d78442a1c5b2e008ffe0c490ccde4260a04478e9209b61c2b1bd45280eee799a43dc96bc378a1f4a2ca08be1a2dc9d0b2a776ea11efeca2c1ebcb8853691d11c2cffcf86d38a079ff255c6551cdd1a4b87970b3ae8ddf20e3601838eb66ae61cddad96610c394df76335fd0c98b2ac590fff4a95dc776a6fd676082072871bef96c43c41c83ab424cd6a3b85a4a00c4b95932eff159e28a3138b77c7722b459a6315b336d4e223c1fba65d0c0ff8c5eab71dd63a2f16de76c9b715a7800538af31d1a01a12c0057ec9768bacec131e0deb4facc386232ad6371d51d9469374b0eea920d1347b6d3db2e52f73146269969fc900d05ab5c1e36c592e4b980d2b495781c4700b0b20f1bbd416c1ebab994571c2d0945c54fa8cb617e414215061d8e88c47cf7a001e5c171c80834e038193b361e97d33e5967b2260586d329040354067714d3a3f64d8c58a2e0ad83cce747743c28be02bc3de6a01f9d12ce5eb66d4408f0f9fd5eabad4eb196445b34ce1015e0d3d12a5539ab6f5be8e71cd0501500f815667028bb15cc318702e214535c225a44cda918e23345327d318621944f4592ac74d3d189df35c73fce6cd9fc57f5d3d4f23987b8dd1f14f66d52cf29e895614ee0f253cb312648adbab14f7f1aa9983e2389bc82eae698d7aa572972de1b1d9ac6a6e976e3f2631696f4ccf3f1c3512b33603ff748427d466e9cd3ec261acff2b58fd863af07c5131b0e3c0ddeaccc92c248bd4511714a1fced6cc79642e655fb1bd141665860c28044bc55df7254be35b9be59e2bab2ef01ca54d501c156dc741a5ea860ab39d084fbacdd92990970874e8dd6851df1012fc0ee7ca2654bc015e8159ebadfd3d72dfb4c0daf06f51da49077d85314a8e44e60cb679c4702468a1cce1d416ace49fa0642df3392683eeab808bb498cf3ff683b98cd405ed1944ebde1b0d005ce7390f617d20146a53265a778e102e84d59dfd986dc4c52fac0b0ff0277400296460afacca9cd8745b34993eeb53aca60d949fb1512d14a505396fe404c1336f708907da9727904ad6ee8763801540ef0f63e4a1081f794125bd9ef878f76276d705fdd10f0af2c788e61cbf8c972d34bae4dbdba396d338048542e7c5158bb2e0377c62f099a8f11c616a206603e03a66ba37e490a3dfc148e873487bc041dddcc030de8380e5861657bc03cc0f81fe407e4d69b629bb278a0dc4e098c20cc8387360dfdaac004eaf24889dd08ab8d895a689a7190f7aec004b5bef91b3137966ca3acb3a54a31b26039cd7000051498eea8ac214e326628eb6128e467060fd76ce62a5a6d31dead472a143364bb02aa703ca9cc63f0d26427dc2c32d92a23014570a7263eaccece3a1ccb56b5e57881ac203fea3008fe50d2bdaecbc255bb27f6cf2a929f89d72a1a66f6ff1245e8e36294787ce61594e000530cc5c685f752da8cddb9625d2ff12d205156caeac2699adccc5862edc60520e98fd57f71c09445d47f9a7b958058747504e3bdd83cb1dbd6726243c9e9c0021b429fecdb6a930f0af0567e049cc80432845400e615b2ac45e99a25f56cd3945093af30744bfd421dcc396c4d5a6864d96e16ba92cf156ed42cc256caef9860817381b278e6c3326d7713127f628686f04926cb9be0a16dde20c65e50a005dbcb1ab2e27b0c40ed64bdc9b561e3709d40086f458e0087c17aa95bba7b8ff88a898d5b415a949958e6bd594a0dbca42230156738972eb954447066b0f8726a8ae1b0e23a8a4895938cdbf727ede938e12ea7685982c4b5891297003075a2c3744fcf9438654acd7a0e756725f068ca4d7fac59d23ccef963300dc6edda4a8cab9d71814a4908261603e5a5a5855990be0bec3c18bb1e07eeb9b2ade0e9b18497afcb6b858c0f00f4d81e88a4606a0602221a88ae56a1962909f9569ec8c547e804de2b6e7e9a5087e11e3568ad8b7c6d783365d0141914839c189f31048b036e7879417a8a9405d767b85fa8f91bcdb321a76c52173056b948d831998b463393cab4dff91655cccd6bec84a581c9b180c56f59217e14bfaa0e193b76a888b6549c282057e7096f7b090962c0d999d200d95a06623994493aa26474b744a9bd5662516ab0ade03fcf7d2fab18504a36b60c530dba7c7066d7390da05684fcef21f3a0763c0a1cbd5861a21ea04a406694c44f6d2c361906e318b8c98b22473af91a5fb504fb3787f6d4bdec0bb5586a850c50543e4493bee4460700c014f95bc41a887549b6e82a2f77fb39ceda078578a325eb24e7ce26b188fd3c134a549696683d926f9b22ba7de2945d840b2a7db0701704d2d6408f81c9565d78db2fdb0aa237d7efd4f0ad46ea1e4e24e939fcf89697cc8debd81cb0207ed2f854a524dece4202653a3f7784d7743f6e40741da8804e4e3c6054490276ded15f96df4464ef0c8695e75c8245a8f98716f4bf5c6647336c58e01593c816f90cce545794785e5a3e2ed2f00997c208c17615edbd2481fca1da6aa26261d8dad1d1ad1e6d081465b77f5f856f74a8398e25ce6cfb9711033789fbbc3e78aeb10d466057d83cb0a074ac5e634b16bf626f4e26917e375f0773144f503d0e6694077291e15d080924b68007a41b612826ac220b9122b50cf20feeb8be51bda9a28dd0437673c0f2dfe4f8f06907d96af8e14fd588e5c1ad408a2c35ada3916c095d690427aca8ee7e04606a5c67242a079092e4dcc94a69bd28154a79f2c7ce163e8b9fb0adb8fe1faa34fe8fb954ac7531e639504e16cbd8621fa8a2db1d7a7a1595dabb7b5ab080b83cd44ce41ea61f290db40342d1503787ea97327c28581d12cd2499a10b019d44a93f4dcb56c0baed5aa4aa353a8d1f9bf517359b0ed5d68f63f001e40d422ce37c0196ee0ccd0053cdda9a00b3be876354fb1ceda109a0d998ac93c8e1f8895aa48188947588410c602b941214e1d3eb43ac2c03395442a4df7f58173e847fe21d6e4d344c948f09fba79c232a7d686b5e8cdc0ca1fac7081798a1d7570d7962aa786b29a4587c0eaee8486577941316cb2854e7865a42e78fc6901c573cb93030872d7618653996e3ee0bdc92ba63044d13f8d2b2c70e2b2655604d427340b675fef14fcb892feea4e5aa10b9c23a9fcdd4174915cbc46ab3e17b0ee5740d02dfa3b6e0b33aa7f9c76f975ef5bb0dbd24f6643b917c1869fc6848513ce2e55b743b77299dac433e952ced77c459d6ee31640046088962914b7f3701e04e2185be983c46064da1c2a394b751009d927d7ed0586f03dee5a763e86055cee66cc6be7b34ba7bbf9a605e395505b655e83aba61c72038cb3dab0e0d71de96b1a7c6203e6beb51f2ca30dbe578de1823c8534200962c8b1721688bee1fcc5fd1a510c0b4cd0590a58b70250e241c5093193d7731ad49a08444f620b6034f44b040ecdd3e33f622d98a44c364206180758467d0a7a3830f95786562dd3157bc1f5541b8e406e2b378bc900020cbd23c403e9c3cf0a0de9c1ab1683f4c4e91a2d9a0dd62fc89e347fcc02b4f2f51e7af7be274ec33ba16ca1060d8d26183cb16b9795a90b39f92a7adf2ed2e52d82a85e153506ed81d89d0be6f05ddf0eb2659e6b3d20d54c6e8e47790897d0e853e645963395b2ab4218c1f85ea9a18cb75530a50fdc2c9739a75b8225b227cad69cc1f34490c2296cfcf2855f8461828da66d0505d4f00111eae2c41139bed342539a39d28ca10bb39d16a1a050cca0130913e5d90f30a30e18606f2f534bc79e0ab8c5e33adc21d3ce35ae214558300f3530d819e5aa67ccc6ea064e9c6fd9f7c25c57041a7cb2041dabc7e4aa587d5283148fe0d668e3ad17b8921dca67a2ed86fd0371bfdbd134527478b079b97023bcc0e3ed644a16a6aa19e89bc6a086bcce142853bfbc26933118d2574d36e859f9a33f7d5242c689322a5d6712a405994174e415d2dbaf2a9a9b533546fabd005fc43c887e9c6ae262a2a07cf3b3c1c5ff24fe6253cf16a744f0020ab00d62d6aad7fb15949d56f6ea31e093c4d0fd924cda4bfbc20e8c932f583c989ba590b366c61869774805982201c1d4cd1848cff05d4603bd286e20321958d0cc6e5ee07cd4947ad48c717406feeb168ac2cbf4bae5c29a6dd3c7051129a6e4462ec3970652b5107ae5cb942fc6b82a258649c25f700ae82eec3c213decd6d327f1ddfc811f01078b32877b5232950db0ed9cf79a20339c0d32025343a8128b6f5b2915ed9855c69ba90fe9d9aaaf92bcef50b874f95480b940102766202f327241a939d9a2c85b654f22ca6033768a08b73e92054c570a9da08378301a3ecd9e6bbeae6159244b42a29d63b9e286195e71c9405fb9a53b9a4286a0a43d89554f646a23948aacf5b784d8bfc9c150fd0adf55981e64c5d1ea8f9965c46798a18dc992aac28a2404708ca3c24d58b7a350aacbab280652ca88665fcebcd71a4c9f5a8b1d4376400f5b6335860dec52d8dd7f6648d6df807447aa43828874e33cd160c83ce295d8925fd070b99b106c0ec22dd5369f8da5ecc6c34c1ddb9829f23efaea9d92233e89e9b2817b0f644bdd51c99002a975c0ba012877bd068980174ef8fac839fd26aaf4cea64c0d5af398d5d783a316893436cca60b06f1ed70a361c8e7a86df5c8c0570cf42287fd3638ac5d539a8cb31f20e807112b703882bea8a784b16a15819ec1de38c83bbce87cc670e09e316f9acf7b1b6854c94029c3efaca7f3f1716b5deec57f89f95793f60829fb46ce3ec4d05d7bca9d0868f8e59eb914c010c40efa52cf306c39f204409054135649ff6c6901fb2c3859cf2bd60c63c99e4732742d8d71bfbe11b12d277e838e48f9a626c686bbca609184c165fc904dcd664a143c2a3dedf4aef2516c5c1775bc257e2eb84a7bc2a234a3b5c9ddfae596ecf65b0deba9740b78549de7a4a897786f4ea8c4491bbacccb08dce34ea6be8b072a25057a8ce24f4b18f0e2dfe781e9d5a69e77ef807473ffa96050e300225a37399bf54467fa04be63518d9ddbde4f82e84dfd1ae68c4f90016e27ba937cca4386fcb4baa21277f76dd02e5b8f1358f3a087a4c984b6fe40168d9974bc7acaa22d6426ea244e914529b988460069eed0c9159c8cadd71ef693886409e0d2ceea25d68199cdcad37f122801ada284fa0a4f429bd425653488863381a18fd7736e7d1504f539d515f2799c8d5095fd9fb0eae6fa355bd8af995ce41cb90b5e3b4396bc2ad98b6ad68c955159ca48364863903d9315ebebe1e65a700514e5d725f2999d16409858d956a71de10b120f344898e58a22ccffbc2603890520fc22311488f5147335e01704f49f7d099136b6a87c45f38d0bb8a6ded60cd7b304fec0b690a377d24e6dced6e859b81c573d6fc6140326343f3d8d70cf11367e3709202d508f2f5d5741ac6442c023576103daf24ff39cfac398726bfacfc070312f15e52637b3de4b6ba01b7c1bd6cf5e80fb0ebd4efef237aca1f48e68a28591fbedcacdbe042b40bce3e9408b5903a005af7017603166da41fabe338165f490946875033d50150970f30937a05b6577cb7696b424d7cc11780143f59c7993b2452c158df37f8ea9a04bbc3080a393f68c4d34f9c3bec88f53f0151c42f83aad30b679a6a9f9dea7f897281cbc3196802b669760ae71234c44d2f36b32009a135578c086759f2be983041c4ebde4f130813efcb106f2f3e3bb916426058d692013813b4e027e1302f48ad03ae382fca2128195462dea05d89119a94092ff3b08873b5422b16c43078f01c2f7b1344fee313ca822e8bff8c3454bd3d2a3c0905d3aa7790c1941593666fffbbb74fdb1e616540676cb6c9051b36d1c4a40e665a9827048780614efe11fb8cefca6c6fe0cbf70d02c5802d239c19aacd60cefa60bcde3dfe62563d3845645b535ee0ad39b349a27c65600c2e125d7593cad8849dc06e796638e3c99b32828f2ec5ef0371a581b85ee7a945b8b50c67822dd628052af54f3200b63bc55f22d65ddfcace98eadb45c9365cf2b12a374256e3007d551ed92b2f137160a88da74180d3ef1d0499814431c6939011cd113b07482869469730000f67b193ce0d3ae3efc0809fb7f1f00d3a4b44b811d2e15af6dd7f732d5f4fc71f7d08809c8b405d490bb34ce0fb6e5c6d74ba60abf193ed40cc9ee3db573ed822199c22b28fd9b2c2286193a206c9a51c69987b1b5b54ec1a2908209548032f7dadec7bec69a8df23cc7a07fdb1229d9877b478e9e2a3d3b51977151fd649c402d8654de275c1cb6b0884934971cfec9dc82dec4501d97584e859b9d300c0d081b36f0dbf8eba3b1864ce3fb52221645c7609907acd7d58a85433bf7d8e326912d0101b1f5a4df9f80da2be39bbb3e405945e2bc44347612518343d5763257f0a65764a73a270630931da65efe9b0f00ac8848e992d29ce3171bfb8ffd0acaaf8683f2c68bd253696854501d5b9abd15657ac5bef033e1ded7d14b7a07d028a30b1adf112ed235b35de0bb9301a3d143dd93307bf3a25764ce5780448aecd63358f7b44274b3bd265d01162959d8708e4339ecd79b71e69190042f160611dd261c298ae7ddaa6f2bd6bab28750d26e1fa26a9134292e33f0edbdb841caa3a0ac360d8f4c3e6f9fc47a08408e4ba66881db65aea8db4f073c7ab662e7bcaa1f641a021ec5908bc6ca92abf91a53962c979d8ccb598db481a456bd27835691435694c135a03c2759ace86478000017997667ebac4eb31ec9f6306e2d8920c944462995448d44741a984dc3367430cdb4cc522150ceab44c4e5dbc944ffeab5e3a623b4eb4da80f13b16027cab5c7c58779ba887d2a69153ab2b05f499d97767e2a1f42df3719242ed1ecc9129e8935b3851615835491acb6651880287330ca3ac260c9bb885bef39d209060e32b1be754c3887961f9d29718487201416ca72100fb4e655927fb4d8c00bd14755654e8720b5fdaa2ad5801b604b7670036ba3e622df6763618a57cd8101b3aa2eb8e0ef9e0970d52d6b6d55934b221c6a9a5dc8b1f35b543518ec427fdfb69b331954304607255e6e7db4b59a400ea5cc1693beec236adb0cc4ece83c7a18494f43bbe644887bc2001004918a1c890f60978c210f0dfcbc726e00692a12bc8ac735f89262ed373271a28da4d3ee254505db5bf6d7bd80befd62d4ec42f8b537d9ee34d38ba7de6a4c20ef80a76bc9a13fc82c0e1782d22e7a411cc10e9e85896a14e95b2ad3724c448eb2dd87c677cea2b5d98e12a34d3c25126cc229e11dbc1449f258894d8e99e0c6e50b93d266e38e006f2493a13482c30dfbe0fb8d0a936b03400aae188d9d6da33e7e77020b53bd806db3025be32f54978b5fa54600436086ff2257fe30da2d16b4530fbfa8f5a39e80620893805eb86a7bf9f38484c6af65967cf13a63645afaa1a52e945b0d7410d74180bf890620f4792c6be93ceb127225aa64de4af83210c77ec8a41c081cc562e1a3e50d18adccb6ffaea2239e7fb4de368dfdeb8a312c7d8b04d32a8831e5be97be25b38d00079cf0bd4b91d7cd99a96122fc699169bd6f4d30fd50fb6b807a5dad7f62a00eeaf5b670445839b623a9b917d6930a20a4e564b2dfa56c9c2661e77ae500b894b3b70ac9f11e954cf5012a37a3b3d074ab9284f50f99284f2ca4f43183eba85c36cea59c1929f1c61f2fe166748c00a412924e959373bdf6bcc3870371510765a0f740db879bb76dc19c7d7f6bb37e849b520679b0abe3b52b62bf567fc4c78f517779f550c77d4bed66d23df9cb85b9d9b4675b876df5005c41ebb873f66b12fb0814d5755b07ad9317c503fcc8e1b011031306e59167b4228fa2464e11deeedfb8f2e19b1f4414b436c7c9022c5fa072e8598fabc25881a3e598a62ff079713757d6e298801df52a618fed16588429f5b0251e24b94944b6a257215fa2c3cfc377c88180392421c3281dd6edb4344e5d8f6c01b7f53c2e20e98ba55ae0624072db571c9444f9a97ec35d2fdbce0faa2d4892119c7d25a5e37866c576d1f23a5b06e509cf68237dd988c7da737c275cdf8fc3bf4406ad82dac8503186faadd4ed16bb2dee3478d3fe47ddc110bba8101d7e9425660a43eb4051d9c7ee2b4b7db696c9f202dfbba2c5d7e665b357066e9db5603dd20982863d553bbd805885174fd2fb812138187f8276631e41e5a8d8f249b7cd7875cd60bfe720c81e96f23aefe74f2607d0126f5fc60726206d6f034d8d5acfe2aa8c7e94c2db8d109da645c193fc60b49603e4140e315ff687db97dac30e7119c64eb784553721c6c4d0eb271894717333cae632bcef188ff066cef1aa78c8eb9eead35524a29d2e737fb46dca01b7a13dc8c1bbd316ffe4dbe3937ebe6de0037e226dec09b7f03dfc84dba416fc28db8b9177f0f598d49ee965d379da1a5db9a51028a0e75de6caba4462ce32040fc17c4cbb6b2d992dd94efb512948ef901eade66a9d38d3cd10b8bac93622c424b57c0cc8d2c37e8952747a07d4cf22d69975acb5b3bcfc6b279c4a16ed0409498ef46fe5c3945fdaeef015d437ea86d93652599a21b20961b513c2b0b5c380ab77429724fa91ff54c2842116325b4e7641710e4c8f286fe8ef91d42bf5834def956358d2aea9608d8171b7b46e53433daf4789a8f5eb470b388383e47922b46ce9e3bdda65ef45ae5a54b94bcc43e9558c905370242021d99b576cbf0156c54db2b29380e6128e986432eba8a148bbe174db0b41e4322f69b3471a7ffbcb7a5ac982943460ed94cc7ab35ec3382822c2c9e522e3f85bdeee03fc5b8529eb912f0be2b20bde966688b8dc4e3dea40bbd383d86da24a5d69ac8b44f454f72ae66d2f4bc2d1a525b4ee4491b41efb20a4d378acf2b30bad055d84b00bef3b0038a9e47c6b48a3a97297b2c2e36709f103e67ef9dbb603365ed557cfcfcf0a8ac925b35e028ea08cd7a2d50aa5e86bcdecf6d76f07091e82a8e140333d85f9b64ccab06462a6de621f43329f458f02cb3ce0e88960ac2d69ac923b1b8e4269a58b80280b4dc1c640710e820521b80aef1d235a9541b878d7a3407baa7d3ef28f69774a1e8dc5ac3529e380ab43c07fe71c0e92c24ce2fec0ce5e9443c39d4be35c3820475cdb14e2605f52c66ebf3101054c57c484543337d871e2567727933562609321d77c4205888c6f77f384bfc7ae5678d5230e3bc055578bbfb32185c9bd207b48a2039fa6a60932ffef31562455a2b08eb9f836677661b06c9cc727e29e5b2690b6cacda17333a7e78e906eeb572ca2fa469af4a91db26546642883452e05c838a7e43cff8b9efd5f4d132c4cea1e52a1f5edfbc58eddbc2b2f5ab78e8aef57fb168858616f74cf16bceb3b48ed8cac81ecc686184f26cf88b4518eca79bb7e81b0c7ef52d61b8b887dc8b0df57fc7774cd842d9368d549889a59e807c2edb2a5658a84da823f754c41848d2fd058c23fae85002528ca1c207ae8264a0f36b9733663b05082f8eb845cbb848385888b1644f342f931b49f8b81968ad6a8c5f55004dd25d3ac64fce4dfe642be0d76394e7753640f3619a3ebc9126f59347cd17210ade0026b3a54d6ff49bfc1d4423b3ea8f652ac2841e0d16b5a11ee16b2ba9d71be1fdebdc6762c3455ca464581b49e67b7cadd25b8744679ecd1a5b6e3eac15cb7187a65ccf5b26fd66aa63d5d8ce1e263ea6193248a4b1a9acfc8d3195aa8f6a6cddc38d2935494c5d4423d592444074f67a1ca9689a925ee5e1b4d79e5b2f61e954ad9c68ed214a5030db87f2b5e76965f0a14b43b6a2899d16b1fc419a68bb57bd8e76c70e73fa0bca537c28de234d23d575cdaf267d8c2f0892ec670046c19a5a15a88648e224c0ee2bc0e82f5cf97fc582fb4705a296fe726a0b8e25d855f25c52f5ef1d6db29eff4863ffb9f687a77c5053b5a1ddb0bc273b2387e22dde3b944f5e365ffde68fd96bd5a143c274b80d00e803b1c0d09b88da7492304c7619dfc1ad24a33866680a83fc164fd96b7eb5764e0c2c9a9b09318f5f96873427617807c9a47fc0aff2e7e31c18faf4677b79fcefe5d03ca622e3f1c63f309836de94a60fb49a462a7acabfa553c199a35cd673b852bb0ba3f33f4a5ab87690573173dfb20c2d6bbd3c92d78f53272a6908fd4f746f245c487ee3ae31e7b934d67d2e30bc3a80e57e6f4472a1e492b003300d9b0ed5be052f89b185b5e9c287e347caed0847913a4d11b226cda1ad0560a09fb272f60bf74ae7539158d54549d087f3d231f58c822d932a0eca10e054ea40584c63f967a8e9277169db7108db942b9eb12103b734973e4a6de3f6e1b94ba7944533a7fc72a6b9e72ef6a2370a820bfd88b123da58093fbbb776d0bf8215b0b98220ff28e0b30060c0f65e93e0f21a45381405ea8e5f693121daa0e4c04675f638580be5bf9600d6ea031c710d94bf4c0025da1c0de6951a662132b01cb4f2f8ca7ba0cd1f7469982417acdfc9463832dcb382e88a29021c05db3eed461247f9e0aca9056461b97ae3907a1a6f1170849641a74e0dec76e1768fce1159a227225f13b6fee6a208ee959573a444e6163eb1c3a9af3ae0d165f653f8cc8790282b99e48b8d288f67dbf5b24d4b0cf911e5a25f9d30a0bb78c5c18093211f897f87cbb6b3f989bc21fa216c1d5164b35098e44cbd789eb49bdbfcd2486684b9dea91607dfd797230b6f66f7149d08fe3e8057db5e1a5d0b7ba557c1843e0b980e60f6eda4b41fa881510feabccbf68a90a06c68ae368928dbffe7d6b574f361a5debe080197eadb66f8526a136b357f61be07166951ebb8163dc5001dc68abd8fb76aaa1ba0f2a79013009ebbd301530353a6c6e54bfbb790e7308cbf65a94841947e05dd5666dfe64b0d6a4afcd9fbbf6580fb7d936c1f55335055c67c42c9b530512765cd5f18261caa74d72c08800071dcb20f68c40263f6805b2adc7ca04a66b3c851b1a8fa808603eb59c2fda9bdde9b1f08be673fe12fbe470be523aea4d7078c4fe1f78858c25da4087a13dba925b4fd719fab601f293dad99a01313ac7ebb7a5b1b6548c7c7cd8d33335cd24533e36d0686eb451815e7ed7dadd65635ae01b5a790de84ba931242fd94d87e00ca351ed050f3cd6a69aba0765c7a373fcbceb102ebd90898479b57b80b072cc6d521499e006e8691f00df363df8280c322297208c4cee0297bcfbaa18ad21519d68db1232149b832cd3e58b068a516f6bbd0148564cb769011e0673f544018a2c087c2986048a17ab0e41351980760b356c40eae227bc53872fa67c92759bb25006997e909bb0a3288eb9fc5fa2952153e067a24633034b3c38155df49dfcc5ea9057e30f058744b4149ce2098f4ba3e129d173464d433aa4872125d676ac684283428794d936825c549274725916bd1bea56ab96b40e6c758f8006883c5e328b3505d435d04e740646b8b7795c77831600717eee1475203f0e6a0035c31e0dbd6238a463753b14ac884182e33aeddf7f68b88a6bbba8b676c070535df8243b30d67ca2c5d83007d55ee4428022759a325b2b2872354441e6ce7450ab0364931525a84d2cd0dd1e5fb4c3032c5a13c85319d2a027cd4f92f0647dbc480c2fdf37471b1fe5a581c27bf28f0b3fe4309570ae851b258d82da9725b54963daa7b0868313907ac90086ce9992c2f69366e27ad7bde85f17d68e11ec16d6cf02bf0ad6a50395e601662633f4410efd4ad4a720350d39f923ec6d8d9e90ab8fae555ac0374d58c9d037030060724bf48a1aa723bebdd02798207a9e501895e4d8da98b218b8337fa2e23c909dbe5526c19740c58162cd3eaa85bf6a467608c20c13574f6f25a86bd5652cdb195367c3390985ab02adee90ed24b5260ac60334c8f67bc19119de5644ae56f9ab6a87e75001931369e733a49e1f362d791fdd19acbcc1d0467a479f537a37ee6b56768a4048b20d49618e7ec7c5ff3c4c457091ed7c070d9508933cfe5c9e28167482367350874f492512b78db0226711dfd0a60e7cdbc9bdccd3f9c777cb5b602fbdca619b26c01128ef19c7444a974d34839e788207b98dddc27319d3d3bf553c11a13706edd1d2607664241154e8c0b65a22b3a415b9d52369987048880b72396d143900718dd979be7e38949c91fcc5fd980f20ff785586e94a5304907c46519af345bf0b5d88fadeeb95329e0e3fad074df1d3d0a2c4e6e2bab2c223303998996cee88335a2737ea77349070480b785e9aefe6f7c83fb2e28801b87d9e22af91122fe63e6f5a0390818e21dda2f910447f983992b8c8eebb7a8dff55230ed4756eb6524003c1fabe122fa15404f4f5c5e2fdd8497a5dcf1e560c0bf6cc53129ac8fd47b3acc5cc51b948ec8465a4cf23e418153039bafb72b2ffee727191c67a3af5964f341e59780b65658fdaf1789b6e7696b20d0a3ef719cacbd9151af5e1eb7a726941869667027719852b1e5a8525e0f04bd93360bf5d5cdce1fc84442567055d87d2e47bb74de815d1e108298063e228b9a77540ae53ce2d892fc2dddb464b83b66de9130139d7f9826f368eab5e46f4c9e408557fcb7094df543bbcdf85008324bdd4f8509430cadaa853bbf950842b93c257afe2c29a58ab4ca9028c7d65ee7fc5d93872a4c79c1568c4ca2fc5862b39c3112b37d22064f09f09ccff4427fe48f341b2890b33793e133063e20cc019b4a305e4864d9bf6f3e80036ba28af3268e4fe1aacaae2ee8c06281d5872b3c83d4267385744847c73ba71d04e3a06ce76efdfce2af047678f6c14adf4dde0537ef03e4157eab4e4919a0a332e9490f176a4a924425aeb3256a43364dc0c2487e126196c441ce8d2aeb098061d21a6bcdfe138eb3ec0800bbb0f4e67a2cadc265f4de0e5081e46189a5d0d814c625b6747bccfce8075db2326dc190406478622c6ba25b21f32370f56591d6d6cda84ae6d3befad814f545e6f5a02629a9c7b9848da20db39fea74d21bb878bd2a06944f6eb18062b730ad47f4004305c6c39b2851162a5d2491a2da1e8f8b21fe51f16775455749980da878eaf073a9febabad1b1df53450876b6b7afd9d2f9702d831312ad0bf0409bde499ce44170a5aa94185621e3c27fffc828fe8b8b775429d725fd9011b21722085d3449682ce3be6126883c42ec95e2981456d5b008cf85282bb5540d7d4d6944fd6956c26d11a80262fa9f1f1c5d6abbeeb635a303d8f1e9d2a75599e4c8d878aa5c289e8aa7c99acb6f9f670759a80f89bc3f861c4453e0dbbb2d19e4c1567792aeeb1129738817161e4635948bac70b43dcf14d631b817287b0baddcd03230083055e0040e41f8dd304a35eec42f38856ddbe30431a0d0847fe168d818825cd2e5b63276bc4231523164923c3aabb2007ebc025f24fb3fa370ab02f53aba8312c5d58443e4c799237336080b6342f1f7390b9cd5d8bb08b6eae96053ff51bf7003f73be938411b5ae9651af0a42d8eb585c15353fb65c4adf058a4ad693ab370b1ec779d630e438778848ca86a90e04015c8597dea720680d4a2ad3ead61c12813e39c958cdf76b420020e2df7630f1aae262753aa069b53eb62bfd052a752df419d62957045822bdc7753439c6afef1d6ee0f952fd8be719cb95ba151c09bdcf56998fb12e11db908a7b3671b5d4c7c36444917886bdb6642b6b0045b875ce9814297629cadb17277e77eaf00d5a67c4f5b9e19c6f7363fddf92a138bb63faeadf2af8047fddaffa5ee38e6f6806d450a430ca54d0a1b77947c63cf4592b280145d72e65f7df9f5177e672aeebfedef2904ee0800fb6510913d9bdc0c02cfdac9a39baed8447b7a913a1d0d9264fe65f7d93951ef3f7c5b028a9d44df082732e3d778069987b1b0c0e943dad662a7b3545e66ab94b7aa24001af3167c0b8bf6b746b435d18d0bece612b8b43d29c0f8e1f4b873c8b0f1874da98dff6faf9fd13f6709bd58e86c09b238a226878c553a51934d816dc35640cf92a16f88b42cebffb50b9149152077330094c88764e7a273b923550e4c7e0124cc3f08e1c99ed20b5954017c0ce5e7f6c12a5a888b78627f1456883a2ceafb2466b1c10306a6255ccd9981ac8a902ad23480aa116fd2e0f191b4c0c017fd5f42005f5d4b639f78e8a01dc307597bd04721375ace194100d066283b751a50acee2414709f29287f9574907d28033c8a6c81eb2236a88cc8f302118ff281a74805cabb527a2fe63b7fa3e2c411df274b67e4eb2f3b241105f72f26b270a155bbfb8b5380a0262fcf69bd3351ab4b88e95568528a6a2ee76b86fc4cd8c6d4b942739e81d22226844fdea114737b32253f5c890c9c9d0511bd82c49729245c9f846eb85a20a4ae52c8cc8c18e393c299cccf42a52c9819484938c09fb0fb6b9a959fc2afbd76f9b482cdef9b44effc2a2bc7857c5e08951ae3c6048004a1004b561a13b38625b179aa4a13b1d7534b26fa60c331173dfcc505e07c46af31914156872eef00fc37fc5291250faafb51b594d56d504043316f2854eb57c2c23343373dbfaeb466de0d3a13c9e23d44ca926547e81650368f04296ce043cc50fb94be50707331c348458dca8c8fe4c74f5130c4288bb779dfd3acb327715d26324b8bc360a6ef875f0cd4492e2114e593e1579b372430f2bc5e0e9f60395fd0e5e7cae91a9edcd0d8cd8bab184d3c0a0954a52c24508829a50930313aab198eea1849e06335b8bd59b8c087535dc922f95ac1c23b17e3bda820c568b58a9887ddf2874afab29f605fbad153ab7cac473c2844299cef997066483ecced7c5b6c3a2dd3019a06572efa30bd8df1999cdb37aa428e7c9571aa461533a87b77d4bea63053d7402c078530ac378d79cda1ed2be771ff9b57fb6ccc1cdf25788fc27151f783b31e55d18f1dc1e2dd9e5e6f13dda4dd54be4f45b62516b05d8752edd01197795404a80b3444458dfa7a1f271765b3f98e8b39417df85b20890c93e546517613b1c46d9af21ecfdc9993508b5d01790621726e986dc6f1bddbe981f059cc4cd5939a2d2683596388696a9800e94bdcabd0e974001d14692c0ab56a92e3181bb5e37aa793c3a110246069ca3b6bc138343a66b3cee51cc1a0f8cbd9a00ddbc415e13c8358f2c2ee16512df20bca0f17e5f1b3ad8e6ada7e03fc9455472cedb24258109a9b69869b9631b763ce3f286887a87ef9fde41b753d27931a9ad9be9e136fa8420ee8e0ec4a39eb5346d666d9c72dd4a9e47728370b8215ccae62f120db4574e9035a8c3ba20fa7615f8512b86381afe569cb8054c32e2a3fb0f6eb445569c6afddfffb4509c4c050c01a854b431646ba96731039a120d77ea00c4521b0b434d3d93ca00a482268afa0cd9816e028a832af2a69b26e4c5cc987829ea2422a6761a07544e420747e459f9044851c0e1d5a513a21a4027ce75b4b926665114aa5b956634dc7d882af40427e1d3ea7e61ad47d4cc404be92413267cc8a5e66ab0637082bd0e6078b1afde5a894cd2719811578eceecc3cbafba0520acdf5d56a4b38958ec1d34951fda54466dfd8227e3a04e8ee254a2e5551e1587a9b63f8e893c2757019df6ff043cb549c0995bc6c87c29fda712ae51fd91285a77e0f7f02c47a82e7dd63b9a1012ed8852e0682180d03c0c101b47fdb9c6fb704cbe7a8ac727b6cc0962250d3c6af4ff174e8dd43db82c426df1daee3ce6f4b54904ea0d76baaa042583960baf88e4e98a10ab783017f073de1d1522254b83dc15d1c86b605d537caff48df61ab5b7f2568b1d8ad6cab33ef35ef3f2d7da3e903ddd3f62fe2726ed90aa9d750a680a27ccefc139a683a28a31ca9070f7fba61aa92221803e9482fb9c8bc1dde43d60dc4d1387fe14ae65d512cdcce6f0498303e26a0dfc88e0102b8290576de48f74105a4d22f0d3273bab35a109807ae16c5c4182069a4e238b3e1e6e4cd9f4cfeaf31edb7711ad03f83c24728ea0c4f48df968fde40a7dd963373216c83ed0b9800b6ac79b952e6b48338bba8651b0039a0d7fea2c8228e6c55b49359487e9ebdc88baf10be59488ef1e915f4e74c641273bfbdacc10cc2ccbd9bd19ca255bf7477ce706fac270bb2553dc1b6b8131f8885f3f74870f1f2aa7042230e523f9704705c881edd2e74e95350e92614ad4779f47837eacc1d654b47e2c34fd1753ee642d23658ece0bcc03a29669bcf324484aa5fca881680e38b9171fc1b7674be92195b3b90e7ccf9624d9ccb1d4fe1d61fc2e1d0ee6a2748c8a04a54416915955765b9948a3233914f4a5a7ce2038bf0c920d8cc6927e75492e5f5a8f504c0260577a8f1a34f4e737a016cd560743dde0352cfae47200609de0b2e2ea0677682e53228626f77a1321042fb249660b10a3e42ed4bd41573e48fd53b97a830c8572f1e0673e99145566f14254610be157c4bfbe44968b9bd6b9e140cfe27f871f65eacb2a3a6491837163c2c93c743588a4c677db0948ae16d0d29ecc042a97a6dcdf440c46515ef3af55e4d9380a1e28cd8cf66f8314e71e6214e4b6585349c67909378b96f37e9b050d86ad9c218c61714da4c911de151a7dea96d066d873cc66de3911e0e5740dc12d10cb70bad09824b01e107aff7b0edae7bb0f99ec71f32fc4fee317406cc98040e8a0540124b1030b42807bdbffb2aedf7ead7e46e73b58f6f6e557129024ecbafb7f6f7fa6d88903b934dc89a662222229301c2b0d7220f52ac29b625d59694949494c6a149889c06df5f79ee6e8d5a0af413e415fe0f1b96652e1dbf69be8cd78a365de4c217252fba70aeab7caa06cd937d96cf9624ddc5b9ec67f33590b95b92eee2fd476d49ba25025d081f85ac81c61402330861c4392b56ace8e8f894e642b536568622da561ae562f92dcad78f20437c99418bf265c5f7ec8a152adc7fc93ecbe70a0ae57bc68f3c0bb5751fcd67c97e54aa1716edd21d042a3814925e2569ee3b2aca57852f55966dd4f687207fe47cc0047e4cf2811614a5279cf063f621444901ce6997ee31e2e23c80c539e71019ea432b40d101109c93d25a69451c08e39c21263efa50e20c127c0cf1c1c439d764c3f628a2944409010740c2b9d21106f056a010f594b6779e50e1fe0b8ae7b042e5b0b28245e93e44ac5446e47a65a8d60ad55abda27ca188b6950694e0e26a64c8b4eca7460f3d9cebda97f478c2b9257a8471ee9932a0c7a69d4e2ebf65e74a4638572ac23977e34a4438e75c06a46c5a1e79e4d1040f171e61dc1d8338e7ee4073013d4a42385722800741385702e2073bda30d9518533d9018533d9d1c4921dedb3d45c718e28b7565a169fd64acb92a98254ba6b0fe45ca9071e5c92e662e5ae3dd01657960105a1503a3aa82b4025c8a2833e34f0c2152220a4025a70808a0d1f2cf181c90330303de00e253035cc94588c40808421043923050e86d0024593331bc4044c6186195216014101205c40035bf4f490879001aa7c6089898e33ae268b890e574a32cdd1c524471372dc58b0000a38e14a4847ce95cabcac58b132e38354a2f4e2da58d995595f7e6bbd349473a51cbadf5ea8eca7d42a652ce79c15131c554c80e40d31a8b082b534471d7956765fd698ce958c4aac925ea2c40d6196bc54ebc57986fd14a6622d797272b1fc11e657591076daf66b2be22cadf12c71408e8d09378d10b1524d4a3838574a31b1a04bcf58aeed258373a522e74a44a5ef5cc987f162027a1cf99f2a26f0042ba562a5bea4310121e74c13d0e0c4c7ec38275429adb9a6a8745186edd54be398c636df33162a73b152a8206ad250b1348df932d9d6321fdfb31f9e1e9fd284b0ced23a3a7bf5d2ae304095d27fc8f55aa15c9b560df9322bf82336a2646ba8a1a3a353e2ceb99bd276109ea014eecbb82be61040a9860da01a4e7c95efa995e6c1e823a50147c672aea49d2b0d956e20e35c698c73251b4a614a62d6402311cef2dbe65135d7840692732c6fc4f546f994e67244549c736350a633f8d8b453180786e98c12beccd0d25bbcd784882280b46927d76bf5a5e4c5b9929073a520bfd22c24dfcf385702a2c1b95217e76a60d8bcff5c54dac5d247be4c8ac8b9d2cf162dde4c6aab0143f3a519542acd4b32ece13657c947f3a91a1de74a599c2bc580a594a9a8a1d27385670706577ac18adb3c91eeb26d3ea55dbaa77bd7a6b56c497e061792ffd1322c99cf96e4c16c2c5fc644461fbea8931185736e8c449cd35efd28537d4c478b4ea97ccfb66cde6371f920afdada1bf1cca5652abd69be4c8ae5a54bd65e3c320c2c8c0fdc8a23bd18e59106ea3e48beb374ce170e5cce97252ec78b232ec74b22172cb139c069088cf9451c45384ce70b2d0ed3f902044c07104cc70b2d301d93172de7301d2f6070988e171a3887e974a107a6d3c513ce613a5d744c07d5c59346301d2ed6c074362eba38e74c5c9080e96c21c6164898ce161e68d187165a3887e968d1e39c03fa70ae86e54c0e18636a4023a74df32ebfca583a58e6ea9ac7f934e007e79c6aefd4c9b99214164a78981af0c439389c298b312e89a575a6da492e97ee3a3addb38eb8f89efd0c619a2e4571aed4020b35586061801615111d30a48a16d0fce09cdbbcff18c0e20d2cc4c0820198ce0ab5a5304ce77b0d85e978ff3d1642384c07880b1050c69a346962c2e2052cac60e1c4a134541417309dee5dd85051505838ac4a952a57f871451a875dd184115774875269560abb4208d3b9e2c915225cc181152570ce41c1749e60274ca749f73c28560ab5e2482b8e64c5152bae150fd371cea101c53917061a42d0d0e1301d0c8d6a23d27419686070ce69e15c132caad8a289de342f5f5a48ad1d970fd2b2f8a0eda56a69afa0ce7a7d0f94f4e221cae25d3e4859cb34cd03f568daabaea8aeecb4565a16966f71b972e47f5a2b2d8b8f657474563ccc14415364710ee70d0d1c8e1b92381c371071386ee4e170dc38c3e1b84186c371830a87e3c6111a2c31b50271a6561eced4928033b5c070a656029ca9558433b58c9ca9d5c5995a3aad169ca9058233b56e9c297bc49932439c29c38033656de0e06c3082003cc031a207673282e54c460c399c35ca389c356e70386b6871386b6071386b5487b3861487b3c60a0e670d129c7319e4e06400e97026b88633c12d9c0946e14cf08c33c1229c09fee04c70e54c308c33412cce04a9334127ce043f70265801074c7238d81270a64d86336d2c9c693fe14c1b0867da2e67dadb99361767da3aceb4a37020809c0f502d6742e1e04c2832ce84c2e24c289d250228830c875306031c4e190a70386508e170cad0c1e1949183c329838cc3294306875306158753860b0ea70c121c4e19268753c6050e878c491c0e198b381c3244e070c808c4e190b187c321c30e8743861c0e878c08381c32b870386458e170c868c2e1904184c32143078743c6e670c8f8391800a0032618588081731c5cb001132f4e9cc9cb07cee4a5e44c42843893101dce24b486734e830e9c08a6489cc974883399ec70265319ce6492c2994c4e3893e908673201e14c26963399b63399c2389389c7994cd0994c2838930904673201c0994c35ce84d38833e184c0997040e04c381570269c0838134e18ce84c30067c2818203112ae8c06160ca60030080c02483252158708110b4f1c418b7e127a2a4e0ac7056eca19aa4293040710206787a525c59a681705312802b75f041003ee8e0830e723ce820c754c2a9b9c940035338332e873e9a1022014f38e77e309d263e20d4d33356cdc99949423a2af3726d5a0ead8cb532c221554424a6863060be78110a02a2a1cbcf162d33c89025062cb9e70acf4e252db000e54925d8004c2881844a2aa9040c1334b84d3b65ae5692c699e0a00400266e06714ba4195aa28a33ceb96d091f5a4343d812414bf4381705d3f1418a2aa50dde40a30e0cd4e0a18415284f3e70060fe7cea871460a16cebc2404712e960f4a228b24ca20e92d2732434336ec94c637dfffcfa4f83e25491b65ef3df804cbb2a22bd82949af5429fd9354aad72ab5ed6dcb9530299e5a695652cff4b6a5f491766dcc4bd1982fa3f9299e955149693dca34226c5bbdc060a7a1216cc888cb104bb3b2235714bfb19fadb6285e8ae6cb645f54ac4c67aa24ddd27ea8a5b7f82120df350f074680e09c53a9b02945e8e19c23dab814a185098ab6576b4a92abb55a81a579114f8868c4b993f6fad894292622e6301121c61495eaf589f881882c5be6220204e71ccb8ba9008674afea2c5da4b16d672a1e5301a614a0e59c7f391b6ee2c1822112c93e2b35c419ce3956ca4c661aa208e79c27d2ad3f84cab9216870ce7922dd6a22c4235bae84c1b0a46dc4534242d4e1dc8a23a9f08488855a7124210ae0dc267d3e70b99a1c6a6608e210e708a087732ded8b082044001e1f8ac0748cb28cc79b4905750912e2be4c92372a6950ca2008159c731e83ce9530909e6be74a1744cc9b49bd5c98766c00c11d113f9ce19c4ae5a4f8218b73aed4c487427c286223d274aa660a1f9e60d09da907335a2a5f842a312959e04edde7809d8cb4eca887300ed32971e1c111e79c0d0f463cd8e07618a3b4a454c14d123750e80001bfa9b47f692ad5cbb99a29a51b33a9cdd72862260ed80488065853aa5992d448521ae792ce3817267361a6240cd3411a04290b6dd34ea6a3363217e65c8d22ced580614822ced5245253021394c0b99a439cab21817335874831bd0c71442cec55f40afa71ce39ac101707845670ae5489ebc7759fcff2310a62653c47fee7c8fff4ee7bdf39f23f2723ae77aafbd52a85250d612c2deb1e2985053b9119224afd9ec24e499bd6829dbae75e4bda298db152581924ef7aad86b66d083b6d50a224b99e68be854549f1cda7b3b2a34c4b9609ad320d0bd096d29209f9b8b21f57f6b379d54e11a5543973c200190fbdb3321e130b042c36dca97bccb732be61ac5410f7655046da1fe9e818690fe6b4b1322c8a6aa73696df308db1fc9615714c7b653560a7cdf75499974b6bbad5d2586781856c4b1d69ccf360a70d637997ef495befd786b1b2d60b1bf22fcd3584652e30d8c9a4ca311281430173690cd3b295df362dc4f266320d4bf75ebaf79d95e29b07f2e9403cddbb58a92daa2030ddbb744a73e99607f2e2f241ae2dd3e2da5e3ddd1f659d958d4030e150021f1c38e09cdb54fac54a9d3892de726265a9cdbf3c96a4c25cd90f766ae259992bf5cacae88f69ecabfc96f5603a9e955261abcce5ca78b053a67933a914a6bd5c9e2849afb657961494f56098c65a2f1da32da569af2c69c3b2aef932fe28cb829dba4779edc5fdc64a0df98ff9221f25d3bc198c058d85ef8335e10294c5603f3b598430a02cb4938162c0320f2614e4650b7662f95666638126d80e3b60dd6355ac603bec804179b2a54ede6b3fc37eb0536745d94149ac1decf4da52434398c636bfbda20c2569daf7d43634846d51b6ff33dfb5e65af160434335f08061daa57bb0285deba28345a1b24a1505b5f4164fa4ab601886e98061196b68682863286027556ba5917c99948b6bdfb10cfbd9e64ab15e5c00bb0ee7dc698515309d9e4245d9bed7b0ae7d0f112bb57567f91652cedbd6a7246fd40236d47d7c2b4928c9cf30a48f3c6b08c5ca86b0a2a30d73b5bc11f7653af6b3246fb4ad0026875491df18112b95e2a955c6cab85769beb3b6ec674bf233643f497e86ded37d76b21f548d7344acee8154aad40c3fddf720d30d07b8c1e71b3ce8726950d0e9e5bb2f3aca58461a3b259d70e9b69d805d1a148411612bec9e9337cacaf09f156d3a8b6bd3522fdf55d913ace5bdd10adb4e9bcea602869d8a5a435bf6592e284f30bfa93416ec3414e56b680873e9fed284b021bfd2aca12d5315b930bf33169671d74f0d41896245888a966119f2459bd7bccbff9f6d29962ee29b2762f9325e2505db78cab5a554aa1d2a9bff992f8369a12718a6b760435684a80cadbaf6dacfa420653cd849cb567e258595c2b4fe9275f9ac14e6b7d4910ff6d2c9425c7eb0131625cb501006655b61f504dbb0d3b6258ae68b5c9e287361ae574ba5a1b0525b8f8f77a5b61e16cf847c32a1ad7bffe357fa87fb565005829864c829d21be65f3dfb11fac01454c9228904f9118447500582da08ea22680b2d986b651894149e602e605052c0b02829603aad0c8b9202f6048bb261647ccf78d0104146980e9427da078170ea5d63ddab543b4089b81390e72c2d45f3080042d22ba01c8084302b18a693250102c19d4a352310818d0c2470ce6167a2210be76a969868b871ce9d581e64f1d2c50e77ea4242971a4c07e502972d2797df92bc519421cd136996de92fdb81a1034d992bc11c6c64d8d2177fce0bc0d98b238c0b4250ed78495c2a06b8b165be416149c27d274d115d7186d0c6bcc1fb3c78c1973c2181b983461725a928173ee06679a4189edc1d33b4129ac6cc301e5bbe63721954abb60f249e39c43a390159e54713521a821c44a9692e3ae8cf55adab5ad522eaf39e7b6b818ca9862c0719b7642f994e6c22286732cbed25e736d984f69ae285450017b58952698cb6fff6715a8a0820a58152b5867f90aacbb51c3dd7ce16e88b8b9e26e78dccdcecdcc2e2ddb4c3b39c070a6870fe75c1396c684f030ed44d283c49522570a4c4f968d7594b166b83289732d9617578aa7542da46cbab28673dd67dbe1a95626e4f24144ac942aa535a12bae94eea2f265bc9656267465ba55a661d936edc44303b66dba75c54e133b42ec18613a58144c678b62a4854c3b1a6c449a4e99605064d34eab4d1f71fda5e0d4ec38130ccf398742d5785713e604afb592f615819400e09cd3cef44216e72aa8a235ddaac0a7088ba28f34dd72ce6d9072262b27b7692723ae35a12c28d48eabf1a62a47ceb96dd37cca2603139538f270ce31c180f35d3be756ce44858973ee9ee0e949d9589914d3943a4e465ca6b4e19c51669ab203a613c38fcf0fd00e982945ce3967d279c2b92919b6d23c3a20e82c3915613adbc6c36cae4d6be95101f5eecba45c5c77f1d9b44cb5f596ea7121f99fcd27fb2c1f57a60aea3e1b92ef2c9fa0a3eca7a77afca68bba7456c693c47d54da95098169adb42cae4d6bd12edde355ad9426b4f5b4565a16970feaa91e2ead150f13a5974ca8b7563c4cd73e0bcf614b0eab1ed7a635df65f33b5bd1a6b3f89e5de972654bf23374af45a5da716d292dddbb3491d7888876bcc7d2b305b1bc388b47a667565b6a1583896671ceb93295cee4c3196559118a679b2b5369af1df99fe9c421e92d272c5176d60bd37c6bd33ca72893bcd110142858142cca93273f6b019b2add35c6d22a5f846d2a9566f956769469c990f496ec87e5a3f9ae71f95c5c2f2e41471e4b9609fd643fdd6b97eed951a9f415d3f3a66772cea14e9b4aa5f76b4b6aa97ab6dab493b64d2ed800f5603a28d40f179f20a0fc059563d801e222148442e9685ef36650ac8cc57d6b13427249e1430a1b52b248b948424199e6c570df0a722e0be798304539d3c21fa61660701aa55269541177e96d73c3c44af7ad564a736d3aab4d1f5131a30e461601011967823289dbdda734d78da7276577293ea5b9c670ae468c30c0a8f9c28b27137882c6398c0a869d302dfb4f90589a7b55f739a1044fc268d986e47f9ef4b827cf74821a4f6edc0a80ac608673ee9db05aa109e756d8c1619e48af3084b9b42bc5f20101470089985678e2dc0a16a850890a89b82a51aa44a9a2e3553d8562655c4c2ac0e18cb8de584fe92ede63396d99ab9572613f4ba95aaba1a1de5abdb627c2a26441d8697b61fe686868089b02a5056c8ac782b180b58079ff514fb02a582be542b9bc6a0a9456caf584ab344755c1309757691916cc0517b028aeeda50d0d0d61a7562a609cb319430ce78cb40c4b128f733666c248e2091272ce391b309c73365f38e76a9c8d17cef514aa0b7765c5c33867d3840d175bd444b18573365a38c0a60136436421cbe8e830000be76cae50a1091912c898c86c9033660837668f3175682f5597ae4a155d4952b1b824f9195e9c15c9775694685c155a96b2a1628a1c1b9a90c239e79c4d140b70ce068a279cb371c246019bf75876a411d7aea026bc6aebeca77b96972ed98f4afb9eeca7ab5e1918bfd23f2ad50b4b6bc795fdd460440d3dac38526bd5595e5aba8594b34c68f31e0b112bf5e35729ad7a651acb8b4bcb5a6652415b576559bc6a6b57f6e39c0d132ad50b8be66279e99ee5c5399b25cc28b1c399209c4d1208e8be7b961795eaf5c3d25bbab876342c9be6f7ca6ff13c957d49d25e9bf69a102b4ba558a955dff12a9de2a9fe9241b5a588bc1695e6295611f742be8c2bc5f2a2577a7bcd90c4da895f4af892b3e248394248394236388783100a4220389b239c8b619cb33180119b0639413b7e09721214825b7124f965bb616c981a868699616498180686f19acf023407d01a5ba4a1101afa706ec59176a6e289b2c25b80ae4a8171ce6608dfe39c8d1004e89e8b4a1544f72a15109f8b4ab5a352ed3867f3c3e69c8d0facd777cea607e71c131b1e5c4ff9ece09c8d0e5e95fd78952ca3a393d36500395d3c703666a24caa10e91eb999a4b5322fc7f2b2455946472796c93ecb67cb3ecb870acb6bb1c2f25afc4aff20e92d7ea559daa5bb95eed35328cdefeea3a3a3f9d66b5b652cdf57194bcb342d6fdbd655293056a870ff2545c47a6161bd7ee7ac0aef7469ba4b52cf785c9a6e759fa49ef158b112e58df0755f49de68d6578ff295a3650b9b2020ef4a69475d7bcd391b1aba3867c3c5e667d6572c839aa19219149901102898cecfbed79eccc0725b6bbb2f17f75fb6546b674bb534114bd55aa53619ae081d6557505bcd07727cb6c8f169c151d97ccf5839599a88c14a4e961062a8e2072074d8014b1ae7b46bb3c958ae63f91697ec2727f3d193937beeabe7e65ca162d3e3dc10ce3996cbe159c3a19072785a2ecbe171393b6d3887c4d230b85e10e40534ced95c71ce86c7399b1d189cb379c1c68a7336559cb3a1326527a7ca112ea78a0c2ea7ca055806a0821300cea1b288cba1e285cba19283cba102e472a83c7139544a2e678a202e674a1d2e674a162e678acae54cd1e2729a98e1729a78e1729a60c1c4272827b9525eb21fad6b9eae79b6229796e2e1f12aed0af2dacbf5c2e24ab15e44a96d9b923a619bf65bab78914b4b6d4c63ac8d6997ee508e4e4427ff2449b37cb4e6b59629a594523ae79c73ce39a794524a29a59431c618638c31420821841042f8e28b2fbef8e28b2fbef8e28b18638c31c618df7befbdf7de6badb5d65a6b6dadb5d65a6bad94524a29a594ce39e79c73ce29a594524a29658c31c618638c1042082184efbdf7de7bef418c31c618638cefbdf7de7befb5d65a6badb5b6d65a6badb5564a29a594524ae79c73ce39e794524a29a59432c618638c31460821841042f820beb6d22923dcb2f2a921e238e7b4e65dc88160b81c6885cb814ab81c580097037f7039d0e5726091cb81635c0eece272200cce390b7034e8deabb29faecab2b8fcb6ed1c652acf93a46271c932a02bd9399beb9c8db5a96ecb7e68d73c362797a4b5643f40aed42aa5c5399b299d4dbc71ce06da3ce79cde3acf41d9956540deb5bd741192f740dbcf15cdd37a19651b2ba55799e67aedcdfb7df4531d4bf7ac23ddda349fa455984a772f2aed83bcd665e55d3e36271b293d5caefc6414101720a08cca5abcf470d9820ab3b34547c7bb34916e655a4b4b192b445aa88b37ca8454af9e6db1b2f22e9f1ea24ce55929225666a11007e58973cea1a1d2b460e166d34e491bb56dba6503828d009c66a556298d6fa9bedaf49106450ce74a8e9cc0b92f336c2aedd2df28dbac58b92fedd27d6b6ddd3be7d060c4b91ee74a8b28e2dcf66428ca5ee4d248a9ef57afcd88fba22ba54346e09c73e9959661b9740bea9ae752bf699eae79329073dd6bcef554f6c56bfe95836e7121332b992cc62708d593c5f868d9f101ca41a80ce44568e727069f20bd75ee1d99a942019ceb7165aaa0595fce950611c495a982f040b55a5a4707434aa3b6e9e8a05a29dcdc085f4ecc38e7b8e4a0e081d4be11a2360baaa04082733b38e752d8b4d386d27c2b07051ce7dc0905265ed030394013409cd3d139e1097782cbb99c13761c6a9569a8d6b6232689c74baa87b5a3bd38cf4a2000c43995a6659ea9543b5c2ab9c0a601ce4a49851a0db89a3be8a891c30a139e68aff900823a1819e29034687cf042870150f1c2257d289386100ba070068a0f3c3a34b082e0401a3e6cc0c20883dc2471a6873d840421010fad033d5cc105171960b021901e567eccc08563c2a6073b089522dc4b8a1e6c48480186020562f0708126d28c818284161e9e385a2246932a18f0c097306a430427a6f0e042172ffe19451ed901920dbe9cb13532c70e7160d0851c70b0707738c3c408a33b8422d9a10607f06001810847767032c405a830b304a5432246198c21c9d5a2431a3d7f10a0850360d161089b10948ca892870e5dee3884ea38e1011d4408416e82821a6e3043c81037234489c1073363d8ba030a2a6f4687230c3074bfc8cc60b960ca0f52c02061c68466926f002f5a497dcc39303832b325a90167aa98b2449a2a49da065a5cd0020d4ca21248073eb8641049168cc053c718476a90f2d881b664b88108690a268a28838b970512d1163a50841839032996204d139c372039a2c40786590815638ed2e8400107097a10e38889ed81146c44158e50364252242140ebe8c91d658e70410a316518e1400b5720c1c3076526e0c61f3898d16a943182881013a4f971a18c50900961d05841a20cc6d3c3175a28d9c06b04362908c4030b28f232e30e4a7e8e98b4f1faa1013e832556442f19b0d0e38f2e6164f0fa808b1f3e6c13a0e202810663c4372ae1ae2e620062041878820ad72b8f0b78719901c1b5f3cac10f47d278e0ca0011121400a60105d8361046902e92806e362b0081c00973b8f0d8540b60e346130262ab813c3c6c2863c756fa39c0b6032a03cd0e1974382412d885e604ab024634d18811da9e8005565c71440f4d0a255a1455281294030a28792300211ca08f1ce088f30366f61024070440208d14285183510e61967001ee78f0250714b448c10de787a985c89645319b10410b0d282a7c000717422d21b0437aa428e24aab8b085ef0e001dfd10a018e357e4833c6876c10291460c72a00756462f090737092532533b3993c6009019ac8f2083a2c18495126c309a40913acc1431496076e9af01089fe8395851485382109103eb0729001e88f4988a0604de1c20429454b82b5a4c9186f18e00d0d561830030174ca055a2b298402a0c612828460f5b7e8a2023c5c0e59c5265f74a2d85050a5a084c29947ceb0aa39a6086090031239544b9c496301770e0ca8c89841060e046810846a05387aa81954a1468c94e8b821eb2c184900870fa4c087255c1815e1c507188dd4300a3a7aa291275f9ed1005270a3000d48440b0e861c527387380006389481c8946219c004071f08c1b2d4b064c3c14788103260c628091c3c4881c193e68b062940848e2842d3b3811417d81f1bd8a1a348ca5508087becb1c5a4603803102fbcf8092385811b4466be90618c220d100d21091b1a105364c500a8d894f4642932f216b029d0d9a0881ec2248a059ad8a3a8a6880c806172d401511d003041110738398448013990218604251841a41b41401828c8a0075194347820a4829e027c4724716204384c71ff1bfb0f13a8210624ff00385432080a88243e9822ea80001917d0e09f90810d3c92440655bc09062001313d20697f4608fe030889219e00310881d3c81c24f03f7c64e04768f3c083f0c58b8f2b495ce982b0810240aa06b587a1801afe1a807ce949d903a0570652efb1575c8cbc2147c789425100a5a80ace0140be84e1818112ce803290b0444114792b09268cc218c20daee3035026e48a3b7805510b3b0243b2d8789c2008850826c48ee204132a21c4e9b1bd1984402184db6243324298c1c311a12549930114943135d072e85c8992c4980d6825d250365ee001498fd98c38d12149235a8537f448219b048ea1456819216a70a234c4c60960749e2832c510113f5e9c8858618c21a02cbe1c51055023432568004ca62302254015e2c71f4617a014419521004210d1296305540f48600102994334549656104983ac6103aa8303d05317058471c31f59bc04a010303edcb0c5122e90d0c8a9e30657055ea40c79600337c070d3e364cb0e5ddc70019ad59240740e193d7e00731f20c28b0c9aef85143260c44106872a806449c0202b3293922d4b3ed0050c1947472b8f19b6a43116f8438411e400d93026013e645163c7033b8cd1114d022ee0f3c6b420c43c41102db6d8e088cd1843208055b1c10d2964088a23044ed88084942b684cc100091bbe18408a265c9882850d2730e1e14a9849821043820eec0a6c90428598087c3082ddc1490f628238ca02c92b218ad97284034e10421a2e6204700509e2f000cd0b350462081b292e42a8a30630765ce0a04c125fd4803453c8e2114d911aae8c19c121529eb851030024312165d9a161f848d30139d04c16c260918140ee0f50d40893a1916ac4f150200cd64dce386a14e6668b199b248308183cac4039c11b632001068a147080c814860002a65b6053410025f801ccb3e2046774e0e47f89448a356a3843a7ca170ac8f06290a3094abe28c144852af2c0a1e38b0d3054a983003f395f52a883922a940f007851a445476fa18317bca8514817194032c1025e0a0084481f43205ce185060f30128032b018e28504264c30c019396c4221e8030416248d8c1122c3e78b149a808307211e78c0b882882a4e4231141df100ac2505a19c342e203347cb84203f1c796d3ecae0410e78848c215f8ce112b449114009c0f0a04190153090006311fd45109323b098c0931f274019b842041e0d3e4a00aac288830ba0d4300750ea046d95061818688e8000099c149903c80520033ac2b8a1a2a1026bfcd1851bd40c0d4d3811c297c9421a1a8690406082c3cb8a06166ca88140055e74e872820f16f0c84dcfeed2c6073e60a24e314217034c82080d894882eae2c589143cb0820b3e7469922310c810138082cb21574c000f0d54620317088c5087034c5004800b10616c800400f0c0c4458b96233af041e3015c0280c5152f3d9a50e22710128040811f571cf0e345242924128035f8393aa5b1013fe6a8f2c373449a2e06a9a2ff6ce0850b8bce13556cd9830d2818486326842d57a4400d00604962d8c2da710892c423da96cbc546042f4072822d365a8a88af95d0724709af2c5a528ca0e589416e288111313ed0c24530c8206f30d2a3c5853eac60dd9cb19a01121eb62832c5109819e2e856c40cb2a58319ce74818174a9b2c50c624210010e214cb2338313101051840715b8800c8998a152f9c1b222431a69c4e041027878320ca1f328e3470ada908186110040811efa026418e1861e98584027091f42088168ac48b3f98c21c40a659881668ccf0e4bb220819094c3078b510412b932860a1f132272d470070f5ab2f441c6061c01214d5296069c00290e40d0e82c1a9948ac08211492a50a87a2081c63b2c8624110443422850c25c490c70532c04200ac1823062a0470c61530a9116228ca81e48e244c9018248fd6e6d81204164af08862047cec6083254d030439014b05a4c0c2c4190f7840052c0160411d0091229888e1040b142b356034488c203702018924047b34c96dac50880b03c801221bc1811c06a144885216faa29108441b9ab1235888f2a4a444cf0890ae2471600a337a1e20a53407086470a4e78744ee58b245034bf4cc20c2201b0804912e3d1f845102d2039080e10a08c20c32a4441577a50b3756443f69dc953213cc107ca0715776e048b280fce0ae6860740215a6733c1b58230e13ce38c773c5938210189ce35989d0c415364b19439c733c253428cc0e3bbc137b08c173f0d83909f1c32338c051441230d4e06070e25e482427c7030db254e98f921f7dd438b2880802a9f94007246cda292787929c444a703939699c732ad58b85e9f856922b8701390b5822078928519ee4a47230d6eaa5ca38867956eac5bdb6e9d52a43f2454499a6bd3656a682f25929292eb4806919f6a37f305746f404f3ae142bf5b1cdbbb2246f94e48da06081efbdc64879efbdd79827d8d0093c908932a4338411b1b8c7616718cbb5a5545aaae808c3c2251ff10128ac27499a4669ba88ab3c254b30e040cb0552e4002011b76927261e7049aa24ad6a6da99e0e3857e28073253ef670635eda7fb15cfbf5a27c6dd0720e8bb2c190cbd90086212682e468f08673fdfaaef9cd4b91a38110cee568a072615c2c9dd27234d0b27ab17c8e0630b8965ee568f0723400c1b923cfcad1e02611e77232189393011f0ecbc9600d17d79a2ee239194831f483e689bc8b95cac920cbc9e00f0d612ced5559b693b4a6693be8703e5bcee460d007061e384d0c066174cb8524571d746c4058914bb730956a474727e7822150d0d2a44993e6c63aa0490565e430b9687296902067890d8e4c943915a05169cc9253c10f391520bd23722ad0c0c54a652d54f748a9cf532ebf2a72a5349d7363080e1ab819414cc40236b4d05b252c6ae8b048063ea83244c706fc30134595424e00431b4d504108150478a16160c804a6a000174ce240c4872d1a74001109306205683bd34715ed092450c0b136a2b42a40804caf1812ef58b95a50244b0d3d1650606ba3821ca28c21c60942b02554a9b9c00228d00029c0bcc032401095681982c00e7b913315702dee1a1d4091c518341be0a0636500a80510a042e2861e03d8430f020603913091421400b43cc0790520a48f3b6c7cc04e0047999e0f1052854b2508e0030a1d2ea440658426ac30b3a3421d7e00d9747162e36590831d3a3a393624e494bcc82929e1d2b2bdd3a596d1d171ce4ad1a6b72e3c9c95b4ed6c2b22568ab392369da455beb38eb2aeca328e5abd58a89eb1bc0a95a4b950dd47f92a72b57c4779578eeb40beba8f8e4e2558cb342dfb0ee53b13256852a0645262420a52e01c56850a86e90c0d61ae4db7b0140031091f939c59f13025384a6fb86153b2b1a064c112498a764c9280608a248d3ba930bd13c919e7dc697bed48807a94af48026082c48d9396699a57a9fcd1a6b1283ed82909dbfcb6d3bddf5c293045dca579207941c8a57a6d8f5c11bfb8583ec5593bf08b0742c122ce3924df83507006053ceee4da3c11d16b8bb2e9a21f1470e01c19c268d3ab4a2a31dab48be58b8e8c36bd22f360238138e756dee5e3a3cab22edbcba7cbcabb7c549a95a5b62497d1a6855459d6c5abba0f4a5b39e76e842fbea5b6788f6563448a69912d5caaa551f1344f4f0a51a61ada582f5419a3a1942625c91b395752c3b9521ace95d038c339f7c4392746913a8eb4164f129e9e14d651a6eda24d179914d1022bda741645a408baa2a3c37dcf78942f2b28cdb78c78a652695766850a925e5989f2450549af545a2811ebdcb669d566062220b8d4942194960d69a72d02250838977d964f062298c0c9941298e135ef4aa15699f651dcb73617b82f5302289cf31a169637ca5cda49a5559a0436b8d3e9b482cbab36952fa3a3f265bc0aa5e39ce990290e89c27408114587607169595177626d619d325692a98fbc5bfda69496e21829c977f64f79e537cafd3e8c29c80f3ec939d5fc4a7d318c93e44ea1e41ed21dfbf6144649f2bf5efaf7aee6385a096324d9c6cd7fddfbfa67297e1192dce995d043eff196f87ef848de0ff32f63ec7fc7c93d4441ee6f3f7fabb5b2e2bf3d74246f5c35c630f2c9b77f1e9e207708e9a5f5ee1de7a51d369277addac7ff6af55b6e0e19c91a7bc92bbc554f4ef5868be4fe3884b1ef07b9d56f4345f29757c22e31d71eda8f6122d9d68d37f4777ffa66c710913cf78bb8472c31ef146268822c6b7dddee0e7bbdb05e5882fc34b6b44edeb9d4d2574882fc6de7956a8dabdf0f567848dede475ae9e6740499fbd821f5d17e3a77174196f07f2cb7edd0426f0dc97a57dde5c371724fa52c24d7bea1b69a730dfd85300479f7cf638c77d25e3f2724df5b39e7f2fa7d25d683e46739ddf56b3ff594f04141b2c6b6cf6b27de14df1f48fef2ddb9affe7ec66e419069bc966e8b3bc6fe410f48c6f77f2cfbdf52f3e8ffc8346a497ff5136f3efb07b2d7bdbedabd7ff36fbafdc818efaedfe5b0be59adee237bebb7c72f46e9f985d8031946f8268dbdca3fb5b51dc8fbebef759f555ae87de540b6f3eef821c6965f4d291ff9f2f72f87d7460cbd9c7b6468bb871e53cd5f947b0379eb78af8eb7df083b961ac857f66ee5ebfe428e69d4235f5fadb41cf6a7fdd519c8dc6e6fb9f676ee8f27cc23433b399dfddf5d25ddef155988c589901627db170b29ea410c64bcf9a59ef34b6fdcf4773c328ddb7e2e21d79de3c9e91df9770db19eb7562f2dbcf7749af5470c8a4ccd05f2c456dac937f493f7b7a91d384e6e9fc6bffa57b5aca35b682b9f56ffeea39daf868e3ceddbdebff8fcdef8450be4ad71b592c758b7acfebd0ae47dbfdcf8cdcdafa77163fa230605549326570e6dd5eff50b6fac90bfe6c8927b5bf1dc7377393dd672e4cff9be965ed9f17fbad65020eb78bf8797eade614d1c6fea1e9fc79e7e6e3ff54516ce6a5bab94f4a98123c32f2dd7d55b1ae1bb5bbe91e5bd6f42ba67b49d6f3eddc836ea8f35a7d1ee3fb9a46de41ffb85b7627cede41abe09641bed96157edea7bc705a09e42f3bfd15622ae59ef4423672fc976f5bab87fbde0bf51a9957fbaed5fdbffe78fcb44235327eb44e0827acd8db1e61abe5258d6c2df612f74a61a5fe7d9f42f259347f9469b9a1068dac2986f5f9fe2fdcfbda3deb1faa392343eaf1eff46db8a19655c2a29a08e4fe6bf57bdffa34ee9ed21bb4ca342ca7d3e9a4b9b6ba7ab1886a209039f5f8bfad3fae9d3f39bd9c4e99e6cdb032d6e9b47ab1ea8f18d4ae794086bb4329e3fc3b3e7c63a766e47adfb4befea86df55e561486b4a68cacfffb1d566aebecf2611ea4b98220b49a6bc33564646e6fd7986b0abdbcf67ed70b6f2e7e35d72665cd1899fae9fbf69a6efeafac11c5f22a0b935a19a79dbe9c0839d9f4e504475f2346aeb27efd2ee6b06e3d258c30d484917b84f3e12a697c917ffb6b4f0d1859cac73ba417eefbf184f58bac7dfffe77cae99cf6dda78bbcc8f4f20ead9fdf778ebddc355de43e1fe49c4a1c9f971eea0a35d7c6459e1272f922edd7c2fd75756d5b64dcb97f5fdb1bbfae15c72cdb5a64799ffd9f732fb7a7d8ce94ea4107e42835ddf3bf7beb9555cead015957b9adacf6db286bc49e669129d41cf2a96b9d546f5b2703b28f5a5739abd6b34efaa9c422437cef9bbbcfbbb5b54fc62b32eedf7e3e69dddfee6e278d56e4df2595b7621c9f8455aa5a2f1784b6064d8eff7f3ea7beb07f2e7bdcaac87ddb1edfdb5f5eab3fbd928a2c399d3bc2c9f9a6dac21fa7c8f76a4a7ba474d3581fad28548d52648a6f9531daf97fc597ea220b6314596eca5f7f8f46eae77dbed57a2d204fa97fac923f88b57c71165988e48b50280845ae30762d1fbcf37b6b252fb2d0bb54fa897c258eeff25efb84bde3ee44ee1e62e8f184f6c2bd639d350ac853d32d71d5bde3a9638771a7260179c6fd78a5f77929f197bad544965d532ca3edb0db39231379f7b7fdee187adaf7ec599f906aaeadd62c91a9fdb3fe47a7c7d84b3f8b2c3cf22c79aa51224f6cefa61046dde3f68f9ec99f4e1a7bd4d746303549e4ea9fd5174a2c317cef5f2f3508c8d2622f65bf5a425b29bd3507c8b2e36d6dadf642fa2f86606a90c8916a2d79f4ff4fca1fd65a3ce2fe69f9f6d4624c35be4516de085f28d7eadf1a03e42d69c7bc4f0d9fe5f4ef1ba144d518b17b8d324efbfee793cf595f28bf69ba35e1eac5925b6a8ac8776f5a6dd4916e7dadaf5166a921227b0cfbb41f476aeddb91175988eade85eaba85a1e65df8859a02648f238c35d6abe3fe3d3e56b65aad5238d25c3344deda4e8c31d6efc61eb1766d292db84688ec617df4d34dabfc9652ecf2f7d610c0ff5da3ef974b68a9f7451652cdb3583e423541e4ad27ed755e69ebb792df570344b65dcffaf0d7f8c32ee7f4aad64be8d5fc9021b61153d9bfd4bdbfbf8b2cac557cc8715fd839dc9ffeeea5bd4516d22008af6bf5650fb9d34e7db5ef6e4e6bfc6fa7eb2ea7d3a6f95b7fc4a08878c8dbd20d2d84f0bfdde5be12d6b843beb85bfc3d7e1eeaf85ec4f4470c2a8c0ed0c6f87ddf5862fba01c3223fdaefaf76f1fa734465d64a1fc49ca9cc22dbb7f1362adeff71822e5a7b9df136e0a25c4fafece4a1db15e19eb28cb697f943feea96ba4dfb65629b9cb646f3dffb5cfbe7fd4bfcfecb37c788aa5bb9c4ed967a550f6470ceabfb2c795de1befebb277e8e573c1cd57b9f5ad96772aabbe7ece1f31a8ade58bfdac5d53093f8f517b096bcc21437a35e7fcd3fe28e63d1659d4968a10b7f29e5462d8f98bdd3f4f6d9185b5a3b44644618456862c3fdaeffc36dafaba9d7a1659e842f22854d54571b39a2ee233889575b59846ece3bdd56b3ae5985586d24bfd3fae1c3e0da73d9d542acf6b50e58e1f94d2cfc739c68fca220b7b0ae55b492eeb4428062749ac9dd32989a5e58f185436cad45ebc37c79046ad3fb4451652d7eaab8003bf7aebca75c4d87f3f6794ef95ca3f4a4de5c632e25f2de448dd8788a5814ea7d3696b6528687fc4a07a51eefe75fcafeeb66b3a5fe4bea33217cac2294419f658efadf759da3f7ebbc8c2ce7a651a2a69d6f0f3a4376e1fffa316f6ea6bf599567cb7fe964269b5dd97f62c23dc8fea773bf5f5d55686c2906ae1d9d2eef1b5963fa8afee5c23792c3bdbde25d6fdc54d1f7fff155948a3e8bc39c4776f5e21fcfe7e586461bc7828cb776bb4513ecae3959d1759e8da3c853ea8acbbed764a7e3feefda354afd5836f22454994e2b995ca0dd93e4839a7f1ead9e98cb8c8c20d7521112b6584c96479b7e498ca8fe9d6ffde220b595ed5591e3523a56372af1cf7cb1f7ebef66b6791850f1e652d94eab5c2f5dad58bc56343e6d44eaba5e5ef772ced8b418cb4f35e096badf6be775facd7ebff3ec57b6a7867df52f32e9f2ba753f7a956c64fa7ed8405c8497c5073b56aaea821d38fbffcef3e6befb49eb332ec398b0b0b4bbd5b2bd30993a594d5c62d65a79a5ffd8a2c7469d9d62880c9fbfdeef9a691bf37bbc6df03d94af4dabe53d7eacbd697a927f6f6cd2a1f9f12cae045ce8f21be5a7e0fb7a745164a2d42f146ea3ff4b35e6ff58c7086a07ca5e593c63727bf7d3fdd7b86e105caf0ca6825b5fdbf4b7dd74516f64c8786fc36b7376a0d2faf15c2d97bf670972c61a51f7fba6d9deffefa3097fc2ca6d672dee1d43caa5aab14aa7b4d176dd7fe64c923fe7477afe5e476fb18a76cc9d6db2839dc50c67abfbc459bad5ab2be5b4a3b9fd7fc532f31cb97f1a86c95692d187566c8b8778daf9d773ebf75a54516b632adc32743d6bc723fff96f15608f72bb2994bc2e89375dc7f63bcebf4f33d0a513ce5d2ae2d4298255f4c23ae57e21bffd7af1659787962c8777b5de7e472c7cf398445f674925473b5c060c936da6761adf2c6585f8458ce3bf58df1614eefee5d7e272fbe54ad558aae5e2c89d493ff7f9e632fb99f9772f94ea74bb75de98f1894972b796f7fff86ef6fae27deb5c84208eba5db9e3f62508f27c33a3dc4dbd77dfdf4ff175978bd965dd1f497cd3361fd1183b23b99ee3d23f79d465ef5a610864ca3847f52486de598be49eb8f18d40d2f64091f7fb556d82dbdb3cbff3314d662254bf9e1bd1d4f69bba67156c9b5fa6739c772bfea294ac25a21f765a40f954ca57e11cbfaec87d25f5d64218a6b3a4ace4ada66cf94fc28fd58467a29fe77ef5b64216565aa2ba79367652a7e3a9d4ef5470cca069d8ce9d6516fbeafd773625e64212ac2ea5a7d59718e5df6e87dc4b7d23af92db2f041df33d6a410eedc5596a1545d43a12eb0b9ff5d35ec714e0bade5b3c842977661a8595a8ef77c7f57bf7da5b8c84294bd344f3affd3d6c21ee3d617da99efeff8d30ef7ec12f2fb8a2c3cca3422148c124aac7d855af7aa27f7bcc842cdb5c52e3d9ff14b282bbcd3e30ce6197baffc43aaabaf12cb220b519da561b435bcaca37d51e26879ac1e6e586461d1f66aa1b4ecd71d27579c081d69200cb92f833ad29aa53f62505a5cd8b6636dfbec9f3f2c372db2f041ef4a6960c0b85eab477fc4a07238656fdfbcdff748af96f07227423138b9dc7f399db82f733ad5d9454ad4dc460c9faf18cf6b6d918556ea28ff632debb6b0bfbae9ad45163a118ac1893793da5e4e84b43841b152356aaed697161eb6145a8c7195f53d282fadf0b42aa3529db2f530f6fb679ddf774a7b9185b06ed8b5fad26b199f81853cffaff5595fb9d7536f0c25df87e7ffbddb7b2ffd981659e85a7de94428062744afed7b4e27d7ea9f4e5ecbf8a69dbcf87222e4040b901327425a9ca0e2fc11838ae1096a7b692894082b20e9d5005480a84c4594a94248017372020aa84a230b2748d46bb202f664004f4c8852c20a24b030c213014a0870d6124040ca8e5c2608a0d28805204254f4465ab55144ac54d1a68bb00fa28682071095420771957194e6cb64dc6b281434aa34b6b8df6c0e0a858269059c2d040e6296692200c088ebad52652c6cd0b5d744d0c0840c20ca13858001dc48b820b55a654f98c4132cd0b457f1119654005726dca0b4cca549b039a10451f7bb5e25d440942f42a1f8965aa15c489e0487c212d8234ad4f89566dd608fcc9181ab80098ad8b14963053600134a206104114208c0071e749063c2e100001b689001061758b0a4821b9b92ab8492144c22492425484a8fa08004a645a838d3224260d8989181abc008f4d8714b0871758787096a4ad001366ad6c8d976b0e10e0c3ab064052d0e0d4d8e8646f35cdb71cef5382262e8c1872272e883494f4e0e632cd822270777c105725a5d5c1554382705115986c8e2d2526e0b8fe659ac1436256229602caf627915cd619d51a68a238d7ce1c280ce417126892f5d5ec85921e1eca0a30e3a9cb3b140c904e71c131b389cb3a9c01cced9c8e17aca060ed7c56371ce86023671c0e1d2b2ff861b2e5be51845c9c1410767d3c6049c736772526748400ce76cd870442c97de8cb40ba5d2394493e410019243d4cae18fa0498253d95e5c59430de76c1e9086cd122abd33151a2e4db79cb339838976e9ee9c4d042090e46728e39ccd03cc48f24629e76cca78dd391b3256192b089b23e7346f9462655b5c299697a10b5094ac3852d1a6bd965d61a532ee4a25e156af0c06a8b3bc6bf3016b6408e38d4f474ae9a7be7b35f2953ace3fa3871e6f3a711a59cbc7dfadbb621e7bc5158dfcfeabaf7ffba2dc105e7a46aed8621d357e567b0b790472edb5462829955b436b2504f27cdf6e6ff7947253df1f566996c6a57bd611976b61ad71e4e601b9731a2f9e0f3fdb2dacdf8ccc759cba563d711959ebf8b7869aa3b27ec9dc909139df0f5a8dedab35e2e9c7c85df72aa5f715467837ad62e4cf35c58ff7f9747c9d12758ff2449a5fd198dd8491f9a73e726e37f46064cabd9f74de5bed17f943f9eee573da2bebbff122f747ebfef7c9e7f5a4767791afb6505face5c735f628b9c83ffa0dbb9d8fc67abd4a7bd7863252bdb69016272e24ef62617fb345b6f7c327bfdd1b4369fdd7226bfe9ee7ffd5fdf4ebdb01797f08af9ffc6b4bf9d5be01d9bfbee3db57ca29399659648bedb68fd307dfd3f6710664f924d5bc4abaab9ccf6e2c3297d4dbdae7eff2d7daafc8dece793fafb3fb2e35b6224f7aab947deb3d259e56a3c9d86a8e6bd5bd7e3af99b55e4885ffcb543de2bd6964a2a32e693eb0d7d8cd14fbd639185442c14f4443d6bafe58a932f4eae3899c1c91527aed796d349f3469a5e7d0fe47bf6733a9d4ea70763498a9b29f287f3411be1bcd6e2f7a5c81fea47a396985a6c7514b93ffda5de14f3bff15d408e3dceeefdaefdd96fa1c8f8c53d2b9ef7c75deb7e22431dabee13db0d3becda897ca384fe6e2a37fdf62a20fb5e67a7fd69ff6f1290e3a378fe3fa7f5114ffa6f9ac8d06e7979e79b63c9b7fc374ce477b5eccf73a86dad5bfe9b25f2b45842582d8d91d727ff8d12d97fc9ff9ed7d7f96d84ffe64cd6fe578d63bcbe574dbfbf49226f5d23a6d8c30d6b7fdfdf20205f5b6b7f90bf0f397ededf1c20635b69acbd43acb7efdddf209125eeda4aaeb1f4d6f7ee6f8ec8d3de8ddfdf1cce3d21f73706c8d5cb57e5eede5e6febf63746e44aa9a5145a4df19d74fb9b22f2ed574afca4be1cdb8efd0d11f9c60a6797f6c92afdc6fea60039428f7dc5f662fce6bffe66880c5fb7d8bffeb7c49d5f7f2344fe0f7b58afdcf46afdadbf2140b6707b7cbbb658d648adbf0922ff0fe1f67b6e08e1fdd5df00912bf5bffafabed75fdbea6f7ec8b67afbf9ebf3c3abfdf495e4ebdfc6bb5ef9bf9f727a4a329cdafeee25bf6f62297d0af2fbdf4edcf7ef5b4728fd2479c6f727b46f6b7c7d8f5e922cbb9d105b18778f32421f49befdc60939eccf4392e38ff7491bb59d54fb47f2ffbd4efe379fb27ee85190a99e1a6fc8a397bbebed48de9d4f5be19df1f239eb0932bef1f10975f5755e391bc9956bab7ff4b043d9a96424636fe99dfe62dfb5857191fcb1fd705e7f21f7764345f2ed77cb1a27c5d5dff77a22b973feb7947dd3395f47246b1f7ff7da6fef7dc526c8f7fe1d798553f76aa72f41aef851db3ff616f6de4990bddc8f6ebcf7db156e7e48b6d2438e25e5faf1fa47906fd7f7d2e7eb9e7f5f11640f6995f3fed92ba56f1b92edae735e6ea3d54f6e5c48d6f7bea967f5d1e3ef43906d878fceffba8c91e24b48a6fdca5be99357bf8be920b9ff372fbe5b7e4ba39d82642bf1dcf3d5873bb4550692b5bcbdd74fa9ee9c4f10e4f9e197fac5fae59c3102921f847a56e8b7ff7e46f847ae74dfaaff8bbd6fdc3f9023e7fd6d3fafa57befc7fdc8bc3f6a7dc5b273fb7b1f99fa67ab7f105f2a63fc1ec87dd2d9a1bd173f6d7b07f2b78f7eeb9f8696f7eb3990398d567f6b7da498dece47f6b0d33aedaf7b7fdaf7c81b7e2fa78cd17e3d27df407e16527a3dfe78c6d73590b5dd554edabff795dbad479e7bcbeb9f8716e3de3390f1bff5cab91fb653d63cb2d51e776eefb69b63a83190ffb391f67efbc523478ff19c96e3bbefc8bcd2a9b77ffcfb39a5dd17c87cc21f3fb7b36e3b72ef913f5cb7e7af4f1a771df9d35e25c616debba5859b8ebca7ffb7f2bd297faf7e0b64ddb77ddfd3a865acde57205be8ebdfdf562d1fc73e4dde73434f6fd7517b89f71c596a7f63edbbf3daffd772e4bfab85d6faf8aaa55e532063f8eea61a62c97bf5388edcabaef17e5d27b5f36238729d1af3ab25bcbf4e89dfc8564e3ee1afd4d7a81f76235b0cdf945356df7b9fb78d6c79dc7ec76b6da573de09640ff9ddb2625a75bcd64a20d35bfdf49243bc2db456b391b5b69ac33ff7ff93eaaad7c810dbefed9d5dcb8a39d56a646f279537f6396b8c7dea3432b7b3d38da7de7dca29351a9957febbaff1417bfd93fa8c2c639f0f6a1fa38e40ae3a5649e1a550c2eda186408ed1ff4be7c55bdf89a17e40fe31d28fe3bcf8bf6fa13623d3cd21aed47fabe1ad509791f1f334f61f6fedf84ea8c9c8af43792bdcf4fbf7e1d3636468e5f755efdaa77efc6331b2e5fdff87a9f7d06fef7118b9beafb78c513f2dbdf6188cfce8f510f34a3b8d537afc45eeaf732ea9dd98de8739f622d74fdf93efc91fa5d61a7791a7c71a624f3be6227f59aba674d3baf7af778becff8dbf5b68efec568bacb1fdf84fcb3f84f25b07e4aeff8498fb8fa1e6bc362073eeff86d4433f61e4348b4ca3ad3e7e282394154f06640b31a75bef1835dd556291e5deffebd72bb4fafa2b32ed513e4ea39dfedf17adc871ce6aff8bf8ca6e234493ad7d5b4e1c29d458c387abc812beff3fe5967aed39155953fd64b4154e1b2b9e2243afb9ded57a589f7d5f8a7c239fbc77fe25c71cfa28f2adfb57e9e7db6fe2be80ecabac94dabdb5b6fb7628b29d30daf8f99f8f3efe44c6bf46b925fdbe6e5c9dc835d62bbdef73db1e2157407e0f6bbfbf9437563b770232e5bd77ffa6f4fd5ede44d67777ff6fbf94de8f99c87bf2b931bd7e5aafa75e22bfc8f79fd4daefbdf658892c71bc16cfbf397cddde33d9fe8a3bbc1f5b1dffb749e4d9fb9550537ea594180159d23fbbbf7aca7d233d4096f3bddaab9cf8bffb24121343fc2b8fd1c66b7344c69cc70d71b7767ba8bdb53140d6dfe35b7bdc1bc62ebdb5312247be9f96bcefbea1fcddda1491ef967e77faf1e5727e6e6d88c874f3fbb68f17cf082db73605c8303ef82bb590ff1721b73643644b71f5d04629abd68f5b1b2172ef386e2fa7fd78f2bfad0d01f2eb5547cc69bff459adad4d10f9dbd7e9bbb5f37da1d5d60688fc1eb4f2eb8de7b5586a6bf343e61eebfaffc5f76a7fb12d5592f7c4914ab8f7a413f76b4b9464dff5c5784f8b29fdfada520ab29f1ddeb9a78e7b7f6d6d69923c5fbf924e5d2b843d5a5b92246348a5b597c3587bf4d59622c99a560ddfd670d6477bb52548f2ac5efbebefd772d75a6de991ec31feb05a7a35ad5b565b42419e13e2aebdd4d33a92217ebc5b49a7a7fde9694f90eb7bbb520de58eb56b681bc97b5aeaa1ee96ce4b35b48c644f5f9511426e71bd17da4572ffddf6773bf65cf70aad22d94b1825b7b752fd358536911ce5fb9fbeade97cf53f8b48b67adef9788c92bf5b9f354186b6420c37de58530b9f2d41a67b3f582fd52f3e7b7f2541c6105ff878df96fe387f3d24db6eef957ef3cee18ebe8e205bfb60840ffabbafd7bd8a20cb4e35d4ffbff83787bc1a9229d777d35eafe437fa5d0bc9715ed9f9a37f477f21ae21c8faffd9e996fa794921ae84e468b5bdd1c28fadbcf8d64172bdff4d0837ee5af77bab20f9c729f5fed0f6da35bd3590bc65efdd4af978a4f4da0a825c25d5ef5f8d7be4b6da0a48ee1c52bd21fc0fc7fe6afd23c7b9ef9defd78fe98eb47e20eba93b7c18f28ddfeeb3fa91afbe50c28e23ff0fe359fbc8f045db1f7d7656dedfac1ec8d6ee87398ff17939b9ac1dc8137f5f35eefa4e1fabac1cc84f77eebd9ebe4aea7dac7c64cdb9c75dcf2de1bc3ed63d32fe10522c25c6b5defeea06f2d3f5d6672bd6d56ffbaa06b2eff4ce2e25f41e3ffbaa1eb97ad9bb8f337a5d79ff340339460fb7e6b4fe283bff348ffc1e8f915e7c6194947f8a815cedc74fd23d29df907e8a47a6d37a2f29dc5bc2593dbd23efd871840f5a3ef7949e5e20ebfe7cd5bbdb79b5869eda91f78792532b699cbafe4eebc85d3f899f7e326ab875a77464ea77e55fc7ed6d9d9d530be46ef5bbd77ee86bc476d30a64db3787bc6f8cbb8750d334d96e496bc475fb3f31c7748e5c7d95d6ebd9f9f6d75f2a47ae5b4e8fedc4754a8d2fa540f696fb7961ed96c691a3e752cf7f2fdedcd749e1c8d8434e23e4f76d797ba46fe4cbf5fff7fa3aa5f537523732b795da8b25c637460f691b795b0937fc5dfea8fb847402b97a1839beb7ef2fe7fe5302d9ea08e7f650feeaadfc938ddca3ec9cee7975ecb2fbb946a6774bfeb4fd58c7f7f9542377fb3bd6d46afd6ff57ca691bd84527beef9fc17eb3dd1c8d076cb75b774471df19e67648fa3dfd46f3b61adf8ce0864ca3b9c2f6a1f7785bc4e08e487f9f60fc77affffb8ce07e40fab945ac64965d49c4e33b2fc747bea3bb4efdb496719197f8f2fa7716f1bbba4938c0cedf35feb8763fcb7cf3946deb1c3bb6b9454eed8e51423cbb8e793fbbf8a31dc708691e3dcf13deab585cf5338c1c8d1fa2eedf5b1ffba299c5f64ffbbd4f66a89a1c40f4e2ff2f6fc6aad39b6bd46fd6617f9d7a8bbd65c5acabb7c938bccef9c755edebd9ed4fb2d72a45ff6ed3ba4f7d7d7a51699f3f9b48db2cabde7e6d20159da0d25d4765b4fbde5b201d96e5c23edf15e1c2bdf328b7cf5c34f5ab9e18b5f6fc9804c23b75052dce38e1e6f89458656db1a61e7fcfb79b7bc22bff9f093b74f4fe78d5b5a91efbb5e63fbdeec37fa2bd1e42e659797fe1d35d7f6ca2af2a51a4edde3a5dcf3792515394679a3953f5ebb6db7728a0c2fac1ddabddfe4d15a2945a65b4689a37cd7f75bad8c22e37ee59dbdeeaf3d9f562e20c32de3dfd2da7bb9e654429125dd9eee1aa7c5b5f6294b4f646ee7d4544b193baf77ca921399563a7befef611a779db2a4800cedb75c77fc61df8f4b594a40c6fc5b1ea5f4bff3f8a32c3591e1f3de430eb984fccb284b4c64ab238ffbf16f3ded12cad212d9537b21ddb2be77ff7fb2a444ee98d758f17ffe43d99f2c9dc9fcbd4b1ff537ea1fb18fa524f2b4366e0b75c4dac3eb63090199dabb3df69d7e6d21edb174804cafe49b734aa1b4ddf35842227b2ffdd3baf76bffaf3c968ec815cfba5f7d37ea4bfb8e250364399ff5d7577df9c575c79211d9dbe735bebb4e595fddb15444beffef6f69aff545ca752c11912feebaeacefbae903f1d4b05c8f8fdda2b7d9a4fbc3f8ea521f29c7c7729fd9c1c4a7e634988bc21c71b5fef39f657df5822407e30de6ded8c523e3f6f2c05917de413d2e8bfb773d71a4b40e43bf1c330fa5efdf78fc6d20fb93f19bb0e9d33a804500ab6b11cc428c8180300a12a69006800f312003040281a0bc662d1a054ba530f0014800251966eae44170cc4c130065110c3300c83200c000000041840003238da381cb753be572ab7b729db7b96d97b99b3772af7d5c71ec4090bdfefa38997048b954e328f9c8c030f32981fdf969da5f0609b04ffbe6361e97d20cc7e4742ea5d2baf55c096eb96ea0fd7ef06ed5a02b74dd42828210607b755abacceb3f7b085259639f8b76027d220365645f3310207422f49e17db84937c8acd3bd402b4e0938bdb07a2b00d38579d768cc75d9ee5b040bfdf105ef270cdf272ef43ec3e0fdb7c0fbca85ee6b19707f60e8be59f83eb650efefbb30e2fb354fe01d81715f832e6f71817aed6a30f9fda0048b45f7cae22ebfb223c16fe2bc114af4b0d57a4d02af708118724d33d87ed1059321bd5c33ec712a4f9bb0468fd4e6b92990a3b561dfb47210dae437b79c521bf586574ede0674d3c819b4a9ddd872b86d0a37703975a3e9a82ac9db887e94244b6c1ff66864a8f4b089d45d67ee7eaf049e9a1eaf76f93090458dc1c19b35d0ec34b99a154684b359773719abbee9058f9e5ea41d66b4009b5b776d63ee438695f231d1ac455daee67a5fd3c124a5d66809305ac6e2dd655d734ae5244af6b54526bddc84a6a3ad0e058f0b4013f454d4a185062f4a6fd5ae773c9d3d52778d3980f732f0eef4bada19c6a333ab9f408ad242dfa7ba22a1923ccbc84c81d8f4393a49fa1ab58f2449d446dd23b8a4a8d173542049ac519cb8ce5bd67aeaf793a8a576d735077f2f02ef49ad404b6d3c36b3f613c2853998777a25cdd4317959cb3b04996cde1b80564bd1d6923b5e813d7877b5b1e9c52a98723325b6ea28583eba9c761be9862aa7db067e13c979da14dc6872d86dda1b0439799bfba624476dc37b93cb013592911144e189998454d421ba17951aa947bc92f246a0a346d2a051edc896c46d5438824baa1b4d475549de46f4a34812a651e06893d46ee41e3148ca1ba18f22496ba3de235d12a951730420296b741f7525191ad18f6a49a046e9d15752bd91744446ca8f427969d12c2d2df21ab18f2249d046dda35d52a991734420296b843e6a251d1ad58f6c49a446e911aea4bcd174d4912468443baa25619b2ab4ed98da9b24232aa6ee26b85184e9d95460a461626f6a8d1030e59b6ea31226750faf4d8e07b4a7b119e0a9edb16db8780a7be036359e694fd5c68b87be27b2c1e009ecd96cda78dc3d0c36391ef49ec868c5d4bb493722616a3601186598ee4d5d230326faa6da088429ddf435aa639236718c0298b0ade44d4997a2ca5b6db0f4e60ade6e6ab986a0818d450383b5376dd0b82916b4848f57b337755735e77d8f0e5e941a46cbc0781b6bed2e654da724088a90b9d8e5bc1245f88f0555f8444a17442c8931f3af78300cc2759b73ff88871acda53c54cccd6e7854233d3314540316080d4ad2da09654e78654dd3327c2e82a0d8e4261aab79fb4f967a5bd286596d94bb61c64a65e426282887387b28e8439b2d7075a9b929cf94d92ca6f212a2cd3d2c18ffe03a5abc93859a51c4f548506c13d7c4df1260c5472b5c2643d01d405985061c21ea55f352198258625e0a8e84a221ca7b4c055381f336b67458829ffed5c3455801fa378148f207c9e2d8e905031cd8b40c92ba89825d3fc324b9d075f70bdbc522473f33d33a6509d491b5a05f4b5eeccd7c7ef9374d9e16a44058f538f148aa24d79065b7a6a7e2f774923f858fc9ffa60d2835667a1bd7e6f48a9e4452bc5334e7c7309264bba87fd057b44688762753807160827d346fad61ea36f3654287d542a00fdc5a8a7f4104c38b37706e5347a4c35d493a759d1557e3f2a58c616235afab04e02833fe435e24a194c60727c95e529509a25d99510048b196a49958f56632ab224bbe30bddcfd115bf04650f50e6de50594bfec462203da241827f3cf3611828aac295524e87f13c47e3315f09589e07f35412cf51b4cac672488b33fb9d8515d6f7cee19b82cbfca3f9a587da06988795f9316873e4bf5e581d881c60fc1f7fa620952c0314da800bb3645d07f314aa03eed3a53c2cdf17a5269a24c4101e9c8433553101a4ec33dd0e93b5822a5e4bdd934b2319172040f6ec850a81a90b4a9668eb1731bed8d7bb1a9618749af799952022b9c9d550eecba4438ad01f78f87a0fb04b881bbe4a0e6a6a3fcc5b3068c326d19a0c97ad4ac9c7556470b41230fe22022858b7a79f64bec8c4d928c76fcede929a5ba6646ba9c707cc981f135700a4aa2f43c23299c901367091b6bf40db400f20c0de91e0d49a4fdb5beddf0d49784d6f8a0745ba318a89f8101aae2214ab3e223240105656f8dab0495d87617ce243d27b654819be3fdb3c27e80ef602038e96f220e50976b704aeecce0b40a2a05f6bad43bff0b50f0a33a678f272b595c2c4c90d6b0698d0adb7ce7247af763251426785077ff303faa59b49cd4d9f37ab2b6871d88f00ccaf22fa32132bcfbc32d663d148d00764e781204900ac14d07a44d1bd8d09e034a69026ea160598e47cb7ec32356bb52f61162f90e03c98ed5a4210aad48c5abf1372bc3eef113571aadb298d1d6391300a9f39204444e51bad701330e6896065162c4e6b5832bc66a19960aedbd6e64e4824368c1d3fb84f15fea9224c596bd17a7796422280f3985b700620b3150af7edf024c805f4e03ef89f204f3182f5263151a22c64f275e00aa4ab77e283d146523bc4f2f588a162bc5587c33847a6106a2c17f28b8a03d1247f9e2a1fc7df99a75a41024d49daef80f2983e55a14d8f6ccbc2317b6dd3397a762d052ccd96436e00fb7f07ecae840a81701e1f5cfe9ba47258a5be02cf7c36fd38f26fc2cee22ad3f75a31be5962710490b8834e056b76f8e44ede1c5f0f585ea16ac9fba000f1b0ab04e71c6461766b2d19481636326d4838f26dbee42af1c3cbcb5374de41629fe323016ed6fb63635f9082a84871510eaae99406ea82aae7f828ab166919d2c8b1fefc8f596ee724e8b88eb0875ba3517588ebf686dbe4bab023894186ff95b57e9c4c9b6978f0994fe004638059cfcbfa66ec49a7f19b024d1d625e9d80d94409e442472108cfb537538976266337d70bc0837728c8c42b30788366896a1f8045c97f931e1ecdb4e0eefc126a3f0269629086b3fbed7351531f33db8ffd8b4297e9730bba19d7fb3964e142b435add1a9436a7ea08691e105b457df5a77c6cb0504e77c9c88102a0baa9e61f3071368356573139424cbfc4c9ee99d70fced08422c006288d8e9b20a30728071ff4913e776f8a2e98404939204c5fc96cc9e7c046b115931e604aef52271987e4a4d58b97b87e7e81f39f1617a301eda975da382202e955bf3718537c7d8129325242ec49532645144558478568d5b7c247de65c32a5d4e403d0e3d24d04cf5a552f5195366b6dc24c198d8311830a5a1b5d09fe8802f10867382e2e97d0478b311434888868ff01642c235085448dd54eb34cbd11ac69c64d396636e10fec9e3ff2d3e508d2b330bb5d989d1cb04c1fe9afb0ef2bc3302623a710c23d47e69673a2bb908171d078e86ab616bd28f1b5ef17219f1f610c3003f3c37698c8e542e07c8effc75b4a9191b91905dcacfa6ff2d9ba94848c78b59a83c109ba1eef54edd119377fdfe965f5148ddba205800c0d2448bb115b8ebd31843fd5508b0857881020d239d549401258ab2f9de40459dffc0be92f1b48fb40b33cbdae1c41d10c7cc201a7e4fde6ab41af49bab649cce7ebe8b006ec545fdff0c9dc3db5474c9f5ffbd847989b9e217a32b46a1316cfd8802f3a690692b1b49970c54d5661bcb3e3066e4462a510070199a8cca0ba0ca447a54be003899af15698a212ec3a1e30f25499533fbdef4f8d908bc06e96758069458e01afec95f04f118e12ee2ae028850183d4f364c3320ceba7f72934771bd59eca314879c6647f4f11dd2bae3c03a7369de2691136186466e9ee6ed9751f4404cea41be62502425e95b7fdb49e8abcb9f6283627ff04e688ddf6242514018c30e0cd667bdfed1b8d1511a5d56dfd10333ec55d01ba6fe6e4b415021499589698070939cfd2a662611930c1f7ff9a669f082b71e06941c703918897b649d5dea6af8483512ef9413a3d15335c5c2eca2a0f46cbb1b63e8019934d0cf4e46115cd56565217a2d24027fadf899d387a86834fad7264bafdf9ebe6260a87373ea286ed2ea19dfa92cb4f4163b66c99d8b30fc5426ff442c7c87d56f25de535e58ff93b0f1dbc3e74b32cf3dab733c0dd602bde577ed58ff1ccb95510d86298eb07db031477b133574108f12420176dcc77ef39c8f99262b6a3698a8575ce99822f84b8a6b179c295c4d1c67d36b529f566d69957a74d753ccb567a36159ca7be7b9c41c0f71de4b7c9c2941cdcf1bfdae03c1b1c8fbeca8b416a6adb933e54d2757cbf197f3a6a07e29f4314ae4ce1d46bdcb5ddb3c1710ab03f3ba7184682924a7cbe3f9f651d1f0b833dac2ddd545539837c80636de8f6997889f1a635f48538e348bd4244dbba2d41dc90e7b5ba3cd7b81d1e4c5aeaf69fde86f5e49ddde999a05d5b97f1471e2c5b746f7b0b0d4061e7060dda9ebfb8a4aff49f91190da632f27f543846426db419bab1d397495dcfc3aa1ea3300e737f5afc714dd41f53760ddef33ed375fbbf2709a2daf4b48a46fc5b9c9704792d8d6187dd901434e1b5f05ab3e2a97d896fb1f5809e1ae7bf3eb1e7da965051608ba368c775553dbc94a1265b227764a93ec94811cffa08e4e5fcd9e4d447f715aa8ba1d3e0b8e9fa0226a6e5c0180102fd8fe98f532e76e9ab3ff87b1304b62f54bf25f0211d7fc26e16ceec2853076e6e698ac8b1111d5f94d55d42ca08212c1c1c63d5f09ccdb3df8dc8fe8d7055f6cf215822ca513471ebefd6fe4ecb361cd6075da60656ea9c7719b675f6d42422fc7a1e383b86cff3ce53eacf80725ffc771c91e0f3eaba7134a569e003496f30ad07bcd727e25a0a7ff66981e4a06e88670a5e3961eb11d8f8f05ee834ebaa46b3d3e7476c22de205de8326bf45ab996fbe11d2604060865136c6b18f8f1fc7c00ca8080e0e531c6872be27cdeff86c03fac428b2e07fdc02831c715e187954d6bf522ad8aece1ad40fcee3f4083a24e2b0db9d2c06aea3fefbbe073c3f51cbb19dffcfc7e49e49d33cad7ef0b9d58639d0ae959992b11b19d190af62e41d702dc8f90fa0560d542a8b7c64111c4062bbbbdffcf922a03a80f3dffae9fdb4ba7fcf530b365c379fcd80c2554ad346a66e49cf788a1581bf880a3f506ebb20c8e86de39d66bc0100c492a916ffdc759ce4b9b8432f7067eb7fb871b79a19a7f9b1fa0e9f47cbe6bc5d9be03555f3911cee36f5c74fbb40e4e81e0c1efa52879b3a96968a75cd45d68f74e696045cf62bc931baa05dd49dec427fb7da968c132d7d72cad048fa61268dc5e3675aba7aed17b977e36514ce81a2bfd8d6808f8f5c2b2e07b327760e21fc44180c761c251a87265b14b0ea649c54dda298149979dd68e0fd6342bbe4e55b0faa820d95ba03c36bb157ea6b6ffa804e345543a758d9fa5eba2a6f1a5b91683f4073842beb3efc0e126cbf8afc6ff9901b51da4e08096335d01adca316b6b81d65218436e2a351ac1af2930cdee9c8791970f4387ecad0b942f59e1f0908729a62b66f6648b8e2381b9b60fa4945a38b475aa50fcb2585eb15fe2bdc7eb3104ed97a250d043c519a2b5aa0d4d84a440a112f51cdbfc19cc263541a6ae163b498ceeba68d953e6cf0768f041f703f8a05459650131b6e3f43e02d5e47e55dc1643e22c351bd9bf297f4b904fb22444cecaf298aae88cbcb928ef6c03a7134a01452fa614b2fac96f9d626b03aa43c0252e5909a48c62fd8b1524936798a40f7a70770a05c1470c881496f23f2d9b46848beea7ceef3f6ed283b477621e384316bb90817d80c67f24b92078d48aaeca0f066ac12241a67c9e22264c7860f7bff1ba5289fa8047c200c65014e85e1d350341c54927eccbccd520f4d47466ed6459796d8edf6aef5c6839ef81d7d1fc3b4f2174a84b8beaa42bb411e8e7803609dd5e568e1efc12b1154a9d7bd7d851f34cc2cc4a884fb5e5571f4721cf0398eadcd66e0c206e1193ccaf60769ac55803530ca3f1545498080b9670a7532ca8edbb6898d865e4506d095ddd4e2e1ed03b710107b83278e459d337a33e09a7835aea5d02a8038d592e9a4557aa3a5483d57facfedc2349848d6473f237e6e1e90a8020f509e0fb7f5d0386f92d0c6cd8a342dd0c109c18f40e15674f3dbaa3268fa447b2fae7bedfe3dfd46d166fc0f7c79e993e7ada09fce3435a8470f8f423ebb5e1925be3afeacac7e8a6c9bda974ce92cf0195b8ff50d38e9e98f4e9c01fe6eaff2139856ca7e2fc84bcfeb63b7df0f77ad3d4763aecfc930e2d2ca90f5847e1fe83eaa06a6bf6fcfe80b957e095df49057b121accf32d677c503a8f2dfaab125f4ed5efdd14d5b914c17395de07a6c50c53039297f25979d83217be9f240b788facf46393fa1e5d98ff95e53a7526de3a072324b5d60307bf78407b29819740d1ea9f13c183bcb98a387f65cf7526d1ea32d546166e6d3419699fd9570440daa2b1cb4e7df8f53d83eb657a68122ca34cb763a0db149695b4826d073b5d9fb886a5d52e71592cf00e0f062dbc7a32c535ad258ca38b519166a2166e6cede954cca8376addee56392a49f61203cbec4d54ef7feb27dcdb5d29b1da6b0e4977f9fbacdc2340d47561e33fb4d24dd76bbe21f21f61f0ff72b694341119452d8325e2d6290768ba0e49ecb48cc8d7aded63b6a8a1038d04bbaa527545741734cec5ca7591e200ec0bda8490e789ea46c595506b04c0d34566640b2df39dea99db69ffba23a89a59a24d30c8a70b1a5e468ef9362047a23f7647fffc368fb9fd63648d24f5d561fbff9d9e042a6c3c079dd050c0d7018a0b4789cfbea5bf39dd15858b2f273db0583d8cdab546506276e96ff20d37abbbce92a02c78a318e8ae56481a27d14391b7e37cda2fa24fcf85e729e6a5cec2e1918fbcf1c8b30758bdff2bd6d793329296028cf3442c6a2575f752a676f84ea51ed21bc066c951198e42b652c30a4f55ad9947303024dd2ff9315ad0e7f4ead48597fa2cd92476950b02c062cb762008c7817b07018a73c78c839cfbb299915bdf40371f57d10e6eb92b0b58ba4eae79a0924a65d4dbcb0e8f681827f6b61f6f129f8f69e0a7fe30f1d61ddd4ff42607478a2b4f4562e70f06febc251effc352ecd0edb149ccfd19dae281597085a0db8074adf7790e010104db11c505bccb61378d2ad2fca6ac03117ced7a07f59f5195ca67dfbff939dfef6971d97b6ed488408332be4ae4ece1d0c2472b74aa336e8c5e11dc2641cc6093d8330cb8a47fdb1f74fb4da1468b2491fd4d2a03bce194550fdbebb9d70161624da252f806c43d7d3efede048a6a3e9b3506c515657586cc8e0c2685c1ca4065a6d23d0624723c6d08f0cd67642dd142f39e4f280015ce6e03b0a70da9d503eee1c80f085a13c8e8b2710e6a7553b2c212205de1580ce19c591dbb814bd46c7f060889d2b45d0b92f2305f5cdbf772b948a6578171122424689e0f6e1f5e1a27f339117190233479d805b9063aa5089f6fe9448e908de9a723f063ce2b0d86360c8e1805abd7de7922b4ffa7f60f07a095a9caa083d29c52e43a284a0b2f9e821613b8e93368b8909d884f24765715c760caafb0f5a8d7b2c14884e1c26bf1afffba22dddbde6752b6fe401b8fac3a80e7bc95f58475741d3bdf733e804c10a76c5065a11a8c2bd908d2e0052be2b36d08ac097ec8599f31301ad8edf36e43392419d1c37eb916290a4e36d1a9248a4c4585b83288628396ed2234520e4c7da1a4431e49971b31e2906493adea62189444a8cb53588628892e3263d5204427eacad4114439e1937eb916290a4e36d1a9248a4c4586d57ae4be92d6bcfed45dbb2b431289b99d8d05f93ca5ae5aa3d945a743e0555a5a1996da4c27e2d6498e7a1572c2ad2e7520eb8ef568e096d3dba84919a2e26c2f02b663569b1ac4314b6eb6042bc0f3dc6519d3d9b64c079af664478ebc12becb4b4511006df70aac88b653ca2bc6f5328a412a28443ee3dbb9d97681862c05baa3764b65074debbd93c3291942bfaa9078e1ed46c65f00debc63dc2801bd6d8c5a914613e00be82ed1e6667ec68c60e0efc376186c3c3848b035f32f3c424ab116e206d5adce765a3bea36000d9fcc251812911b412c4e217b93ce5371b4e4b2860b5fe239e385b7849b9787f38d7529a6ed67a009b39c3dc2e21afd532421abefe493f049420bdb765941471fba858cd668dc7462618ae42e1b7bc156188c535aa15439c99c73960458612db44bb68245df136f57c650a0a8ef793da58d08e7303c81e737a6377acd1c5276bb59dc6c4d80da0ab1aec293167bc59bd29d1bfbcc0091e0e729e7855b45e49cf6830a15bf28eb75fc500cb479aee2c3880bd66ff3e0cccf7ce1e75652bcfb2594a3dd117b6641a1ac2e1613971545b10fed25bf7cc72a9c529f8ea86cfcb3e951e0f0f6e7fa053d7b97aba69d7fb2946ee55078073152b4030af87f37b52db26d18338504251cd3c7f643d69ff5bcc6a3a1c18d5d76808c1a357e90035a04a34c8f73aa4839aa94bed4a59ba99da1a4033bf7443794ceaf12657e759aaa9d9cade8626b60e58decc5e14f7e00785a0fc7141532a6d7fcb1059dbab942a014335b6bae341b0d5c1ab021c5155055dc2911ab659b863b92e6083624e78053c766665c77c9014f40980469bff0a7b5d3e3eab8f3278ab2e7d7669b3c6d3ed5b181af5515203f074ffc97980f1e3e29166da9d86d090ea8baa1c4ed1b96db6287fb60e47dc6b94712de82df26be9c433f2f04d97a8718411b3585104776922cba2453b5b951f68ac6dde4fe73e6e3dbd4f81086ffd8f997a215925564d507f10554c1d56e00c929c385ca3782b476a6daf601e082171d5882380875e46448737b3b4ef4ca719a141a2d84e54a5890b712eaa6bf181f532c656202689ed4b71dd8a72c64329450acb6085721f3375360a6d6ae8fc93b078012355309893babac4d62fee0002c564df96c34393b4edd9e4421bd05b71cddbcb8dae57c12fcb9a7c127644a11bc2cd1660d82124b1e24c3d0ddc8d875dcee54e839363b4375ec13b5b7bf328ec731e755960b9bc9bb110040b0e6633dfa8f58aa0a21a2c98c54717e909d2feb1c7482376496f7848db1dca5f2949a56aaf454aa530f95729fdfe086ed5da5a7e07983043c3fec80c85debf3fc87e095f9a69c412ff00df7162ccca885d190f6872f3d639b0693686d1e843317dd1996be9c36f777b90bc86f5d8b62687c79efaa5b90b517fd7eaa4fc259bfe45c0d523f39a8b6bf263d39f92db3ac659220b8a5ec41d07849824e824caf9898f728b0485fbb49a6a9a0c3ebd449357c5def77f0f4ffd62c37f39edea9df38f968a60e07d7a07dadfeb0c5dfa31845ad967ed694ac376b59fb48c5083c083f7dd9dae5fa1f38a83fd8076eb9cc633604eddba8cb8fd288bd93dc3a482f7059567f5afb7e7259d030fee9687b5d8f4207e294a242f06fec9c8eccd9d6f0cb6882f3bf31e5f8e6fcfc29c4ee96bb8716cb509d50f39f1a6692ab52f12f0aac03c2d22e0d9dd163e4edd9011437e069f0ee3aef534c32466d1c93b1e11ebcee94dc1ced5f0b9b2e2c7f3686c9602904a14f5a56d7ada4c5e7db6aaff60fc5624d852f86c23c7937a3edc793fc8e1b72592485156fd6e87509ee40e5b404654428f5cdfd1e75acc620e15d3f4741412aa6c09f31e8d4e9aff24d7c82e44ecc71718c66fa480120247c76d37cb9bec4c0de071fb780a468ff2c0a41a242c773bd0a512e3bff6b3def85382c6b83e536d1257674e63ec13ef6f107e254a3d6c4cbaa10ac298b01d3ef656c0658584c8e02e13d6035bff09b49eb102e5e973d40c67874f9ade9a404ed9917546c1a1ca38de7f5e7704076b0ebab9653306060236c05d9cd6cb9bd461f44299a76bc224cf20903a65bda7dcce848808643e2f86dbe4e07d752a6300310d721b4a19f1f01453f09fc9716229bfc8b657e56247e520c4dfc950c1810248de720a63ca7b78808e27197aa2976d5f82f0dc25a6a5f44d5b24020ef6b3e88f633f3e48cca322f187e82438d570c0f576e51f1e74f50f60d23c58a498fa3316429aa98fd329e3bd5aa62688561e1d34dd52ac25ba38c803e028ccfe0b4e407506787e9e2ea2a8c7ef54840c07a1021dfdf9f90ea7759ccb74db0c5904028733b19628f0038f03895c3c13faaf0c9aaa3f2228f617f80773a7e14fd63a8adb919a119839667caa5f23b41d58d0535c348ca30a55994be8111b39b436f01bd1abb22603ac6c4f6dfc4d421269b614db636c0cce2e020b6bd17d94b75cbceaacb77ad49ab4f76cc3fa5f3c0866e25a5dc769186f5ff09dc7f7692f1488b9acb0f1f3f7bf9c4f70abe43d60a539390c9b0f62ee1f00f708910d0d5b802a2d0059e71f03f768b897b6f86dd0e49ce686888c663dc3eb5db34f637fcbe8f7e8b542673258069ac1977d2c2e8558da873f6b74b60bacc5e9f40b1ac345f10f9c359173c4cf8fd458e4de35fb577b65c5dcee534ad7d5d2d26aca3732d420544da3b44243b1041cb3e8b67eb2efdf1c0c8af3551b75ddf2329770c0be6f357a8520a1ba2f9007602c541989c10f375e957c58a4540d14b407d366c88bd5aac2f57169f8741eae3109f7ffc0b3afc36a7159470952b05b355e547aa307535f3b5c0581a587d2769de6b34eb31369847f30093646beca4621dd70e7f33e34e13cf56d588b47e35af5c29f2e39cbe717a78d5cdb553a5cacc42a3ec06b552cd8efa4b10cfcfcea7e86735867c7e37afe6cf117e895cdd35c4b5788b133de5f5bd498a974f22d053fa6a94d9c86ee30836dc4b13fdfae392da34e33e511ef23d90725344630a01933cb1fbca28d671883c16d43d17e7fc8fa07333c064e27b76aec9f8f9bc10f68be79037334f7f3266b3a8c36d1e296a6c9135ef64f43687c5e828c2d836e3ae9e40cd332e5d32052195ff364d004a59a29b8411c21b3006a74b7d1c56ed36b17250efaf9752ade1b6c10d4292fbcf1c2504d289dd0fbd9fb35031c6cbcf7425ce2b3d63cc7d97767b14068d9f8e0f3b9140e6364dd137fadcfc11fde66d85998860c4e314e5e7f3604f40e47db2a95145a4696f8e10efca4ad972213829212fc19036a9df5c87e5e30fa6d6f2c7a604904679b1621029f5130631823800d682eb26383eb2bc54c44a00706bca1218fb0676d4fff8dba63e065736b3a4db3db65af823cad40a30224b76437eb68ddc8c74ee267815ff866b62e0c39fa0becbf6445b7871d320a66ba99aeef5a8f430e7b6e2f18ba51a81955c99cf5245a31d21ca880222d9b65d5789280d555dc0981bc50785d509c3014c514b340e8aa3e3b8be03c5dbc77d542d5575cf004d562563e575494d966eac0d8e838e3e8df2ebc6cc35d53dffaaeea5084cc46ea43600f556905dc61f0b476b07078bf95261e919f44de6c651f7fe0863a5223dd345245400b62d32c53f63b59d52acf0e145d3d1d1a33ba75e666c174d4d2b35330927fe823ab601197f7f262cbc77b00c39631670580f78fd4496ab6ddbcc1d1e3149684780f9c588b4bb13e0fffce23fe0ef1c1ccfc5af21957122dc7cb65f8e5b57ebf118fb9136a939ea50e24e7f9aaf522d97519a8036cf2b595379900b06150477505675a4bb0e84d7accd713d5020c40b7432724b2866ca3ad3985a3210b63e27deed25d75963f20b030dc864f063522c4ea823a90c3ef7c22d59523892289acb75c762ddbde6ca0a0c6381016930c21e5167db6a74ed0677661cfe27d8775b842ff09982e845e6176095216f138efa998bcd2b7056d8294cac95d311800d49e13585bf954f90f27b8d60f53a2d76b67aeaa061677c86021e3bb0d289b74c1170695401fb665ebe646c8614d6b7db275c41cf8287ddbccd3a686c4edc2761c7adf4ceac3c1d276a84d6e8961db690ce096e46ab3454bb6cb140abba338e51a81be19017343e198319e41a7fc854111a948ef1c887587a49d5de1c627bef450455a67af232b16dc0a6441e3337ec10d6dc99ee11b2aebac6fc83421b1f55dfa8df81d010f103c9742c673ac0f238fb829fc2c798ee7b68330bfd07b3ce28963d0e0c1aed64ff1b106febab75ffa19fe7f9f5a19a5ba4b403f9ee4e875bedb620cad97335e17ac9e975509a04f579901c6d12b1da357e4ec475db0c3ed5cb1a5d08a9adc4b4c5d5c9897aef9e7b47a959067ac4ee70c23a59869df6d990358e1fe54688a681f8e4ffea1e3e2e1ae7cc82335cd569e1d6cf3b9def519bff3fbe21a90a64d7e92245feeb25d0812958fb8fd1e79ce83907e6429ec517a6463e38e290667c86eade7e7403d77459b00328ee5c8d241288ff41b278ffe8f39d838f155ba3b86d5030632ced4ffe9c39a61a81991b163561c8fc3833c74454a15e35fae0d3cd1fba3a350b67972645d8a97672f6a0d9ae58872156b4e3996488b596b29063fefba69f905c55ce4124342bf54b34dccdf28b8944b3fbf23f8bb194b0e7a787474ca8db0c157756f9e3855421eddf4518d30720a392c9edd3331e1f3263297468bc11a67413321267ebf52bf276585a65660b28db3b2b9db35fc849c4cf3ce47f75d99a0472d268114138ed376ad536e0e8b535ad64a7d1ce57f154c853513d51d1533cf080f9fdd3c3b128cc307a87fcd21dd9d5bd74448e04463f5b16aed7491f8cc9b26b4189447af92d57e6d66329376ee46046baadcd509af46d27c322f3e507c532c3814f945b94fe188a938f39fcb3c035bb3f642a3812defdc9019714baa78d349e9feae822a4a99be9cc74801ed08e089d231f8e44af4f060b312b14f2381dfd917dff79890331bc110512406a3e780357f62b36044dec35031ff96bf8e5466005818bc5b4ea56d09c30421bcaf85a5ce942f7c3867bcff03e548e68a1e31117924a797b15ab8ffb5b3243fa0f4d370d3756d94615a1d6f9b1d5802f5b7279837439701f0b025aff7d1b54c8e05a4754fc85e02e5f58d40c0e6c68517dbfb2601da3720e67d19085c01cbe94c692ec9bf80a90be7380292331e6f94ab8a776f125315432dc7032e5c13246dfc2553873977a535e443c52bf081c624a3b3209da7e76318a4cb92380f5b4f3c329eeff8bd0b7f7d3496a42ccfa8594617b38d7c74d147233dc83992ffb53ee7ffd5f2ca7216e87e6c19938412d388f96b7a6e1af72ac74dcc0642900581832f69c7a896031b21a9340659a68f9fd73e3c54a26d47f9cb9a78dd14a45ca6870a167ad7997aae080f069def9f27fa685f549c742984b5a8b1916f570282c2f7f133af2bf3877b35edcff70bf421d89c2e4f6c78de5474a7e777a4a1097f2c51260c93039cccfeafc41b378ede90531b7e36f45b1c00b68156829ee12ebc6071af56506661a1dcfcc2ef2c2c5848bf9c8d3412f6ade95f93fbf900456689f4b130acf8de7ffa097f7a823f8df57a8b0f052e56a4213f001ced2b9123c7d1fc5955f58cd9a3610097c881ba8d037461fc74d0142f1f8d99fc812322cb586db086e26781fe3926d5e8ff3b276cfeb536aa3da6fdcb1c8b65226f73b18eaf98264fd415e733a2d15eaaba0247827ff9266c86a3262304ec2c75fc397e46ca5d52094559b231f6e2ed8cc6ea3730bccc45b372b778bed9a84ecece34a5963873cbb3685ea7ddf742b62b5ca8f6aebf89bc1418f0adb23105e1f638ecd9c9ed0aba90fa2424b710af9e800a2a3fa0c0d09c309cee6f6f2e15a9ec21ddc1009f1fee2a01f425eec37f1d5d9275038e8bb6e19edc679e57e08466207b506dc0810f422bb12dc1b5da77857d050dfcf353f214e28cef43c630de93ac77dcd223b6e3f1b1c07dd0499774adc787ce4eb845bcc07bd0e4b7289c51d8e1469126356741e03844f4ef00a61cd2465edd7ce124ff3a70d26d08ea6406ed6bc41fceb7f79ef941500456f0bf9aa5d51c33b41b29ec40c36fd1ea2c412dfadd8d1d0532b0e77ba88973fce200a3749100844fbd2f54c9551c4e4496feee0145e442c8a71492b227008a2ebe671de737a40131b4f75307015bc960146375fcec55124517e8c5759e507b2c24ccf4c86c4c55db7bd31b328f68e7511e0e607cd5bd1e0fe2586659aa021c0398ee50d433c9799bc8fedf8ea992fdc6aa6f16a62bb0534bbc3480cf569579f35c68d8288d67cc550e941c5ef4a074b5ff3ea3c246a4cfd7ca909626decd85a99dbaa62c23fdf762beb6dd41cf7aada4af435e62d8b1cf52163c6d47b8ed0094c7aab6cc351f459282a416cae467cbae3f22bfd8c6654462d21deba544f544589341ee783837ca49ae99f8c92bf281bb7da461c751239d1b5e16d0727006c549c0e966d814763af8437a7ed1135b89526e2907f5dd280323b5756cc6f641d24bc312ffa6c49dca7174790f36a3494185d6118b888db4276c5fb874946cd8cdfcc017cbfe963d690e4a789f362a882f0c899d216f4108662da2843d71f1ddacf9390d04e35f635416383d241b03e17235047716dbff18459d5b5ca29cdf18718314a4f0c84c5a1e59f18bbd263ad9b9a85787734d1f1c0caa176bd14591c47e20af35393a0e21e18b330834d4ea160204fd6bed58ea3e36616cb2a7bcbfbf2ec4e6d40bc6f35ecc25f3e75f036ea43d7933c5e48aae67c9acaf9b7a9a01a68cd9b1deacee1ddd01814995d5a0d686c46ceb6955d40ddbf61c38d4ce11828a4d8059f19640f7b49624f42875edd61b572e92d9664588f3e760beb90c8cd3bb8c08d77b7b6927862fd8036ed4cf381c9a0e78d7c13250404e6f2bba2735c06c49bb5f86e170420e78157c50269fd0aecaad2756321650d2c388143229e78837fe72f6fc4fce9edbd1f2dfc2f0dfb1fc4fe316bee9b5090cef908e4f60620d46f67b10e48730ff6b6c41b40f67597095a1ed494a8821c3b076c428e35791825006c8ed68fc058c5465db352e073bf5de8567ecde541976b8eebd157f0b87b453bb67365d8997312a660be34e206f65f7a89af0eaea40a45e2ee2a51f277173851ad64a56a51fac0f9389eccc52edb0a297ddf241a2147f07f24ef4322a7fcfde8c1d0d77c8351febe78fb4fae838ed3b36eb1f9d19ea9f771044ec3c1c35bf5dbb66e00ecf3d3ae95fc2e3ba04bde086de631384b70a25b71c81659eb9fe149945421d96666c16ac03b5b75dae9521313606c688879774f640c7a95f0358095467b7ce4925b784ae42d566a25a05a08531bbe96f82e5ce90bfc8cfa43d6300bb893a4bb51f789750a7a2560d8fc6c5929f0118094c6f9a0ee19c2f017f82d37751000f4a9872eb1be4d545cb62289ed182c01ddb7691f31c71689024165d019e8244e66fbb3d1493a04e837b47c747032e641aa9cf614316f99f4a70f1b408ba507336f9b79626dd26e4eb6ad309bc85c0b1d1d102651e52525f26b4ff6b36b0eca8b57dc7bfb31c2c8dc921642263b40b72d43d3cc783733911922c20ca760f98f6a41cd5893627ee24a7210dc93c7127d94ea78de5f440e73c4c4d23c78af923729f261ba4aa75730ada804b82d183c7956bacf295f24064cbfab58fa6db4870bff60864227dacc2c50fe5feabef0606f6caede100acb2a2db39926078105f0b5381b10576917f250025c052f98f859ed196f11796ad3a1b3cfe4516dc46e1c4e766d00c31b77205171d82c86dd6740958e9c78127f1a9c3d514fbc3044d3df3df7f3b1db92d06eb4740dc0f926f78a55ea97dfaab05bdb3b8bd113752a3529b2ddc64ca0bd1bf5a4551d75e4a9ede6edc82425f530fd589a7479d62eae9142513b787e3cf9a81f525c983b5eab9ee123b282585e436cf54999554df84051511cceae68703c54c9ff1142c2186ffba7e8f95001ea6c24bcb7bd4b657fa1cc52377191abe3fed4bfc524e5d85871d4b43c54c0902202b19819d8f57c49382f4146edece0937ad694a585bc564435fe168cc34c3eb04b2bf01334abbf76958b9fc7d1aa4e03cc8486f1e5e519a38c10fc0c48373a67dcd9cc28633788dcf7eb1105cfe9f6c148d3150bafae5312dc3012f7ddb8032d7f72ebe4dde5cf6ea62c5abf95daebcfda6da17b5173d91b3f0bba3efc12bc1422c942d803d7678a105d614f3e7df76e9b5057f887ff3d3d9f322c2b841316dc880e84199ae35b871e9a9c9f008214739a388b663b6c8dab5f47f22bc2ec7d6924169a8de7de8e167cedc0764231577bb48bad04e8d56ea3e4c86fa02c2cdc759bd78cda0037ebfd3d54ecc54e52133e0087ea111fce3b70cd3fbaa96a32e3e0e9482bde4526bb56102f11f274b8f6905f8dc15de36ad9fcf6bdb11c8948315f85f91474a992ecdaa835d588da5e7d6391c896901839472e6316dbe2e6f0c575ba6633ad79bda5a6539f97398c2e153b6b3e392fcdca8f4b0ce5eacd946fccfe47d0d3d873d98b02f7ab6f66030113f07187cceb6d1cf09fa84ae190207666f24373eadfe07d25e4f06d725e69a00897eb80361daceb7134029fb3910b8d8c56e69f314eda7d4ce783649d340b71b4baebf8d61b06a022a5bab3df24d66c44402df9d682893f9403e25c6ea583f1be987382365ecf8a8323539773f0155dd550fc4c7dbe88247a16e243281c113c31f85e26a2d5d94313f79e851bd3ac99827591a7ada19e8e40aad0608f3f2daabe77794014fe4b44883ea8dfbb049a8bce70e941b5c493c0dd3ba7af42cb9f756df320de789b75bb052e20875480a3e2066a2c4655e467645b86c8c476f33b324dd7d43177520a5c3905a482244e8b2c6fb74a29af392d208028737195077c726ca6c64df67934cf91d46b5c3f93b7ecd6f8158b02aa19fec5b47e7796079eec867251fe96c969fba6637f4b3ddc0767f59b767c47487ba71c58f36c78a7f03b8426f58aa2018a1cfd8ba59eb70c1deb2a02e5c3e3a0addb599e0120d6700ed551eac14c658d4b236dcff827d3ed07d30acf8547d5f7f1c4dfba71a3d42d6076be9268e0cc90b6557b7d4e5422af8bf56efbbe2d775b7415a586d217e43ee6d4adecf6925867b14d4d471f2c43a877a93697710ff8cbb648711228fbd24640f87bf22a78d1149c9eb659bb5029f0766e7efc27b3e0229db918c5f617bedc6bf935908c47e5c0b1f9dee76b668983e2320b70a8aac9495a4d6b57f29a6022ff3232278f74d32d7eb6edfbd21de2f34f784d016a0da1f4ab537fcfc40d50f88b1f4b4f019a4bff1daf885dca08e1ce946e80dc899b7846137a1c44f1fd04e54d8a027b05df1666a913898420ae530e93732ced8e580ce1df32f9094bb98578eb5a684539ddf3546da44789eafafcad39c14af67c735cef3a647972eea60184e94748be465c7c5ef6fdf377f08d4fd9664f8b14528fc674f8dee34a6b46aae93e3fb9302ae1c65ee6883f1c412f9b390c4a58b9765bfe302d14fc2f6e6d9d8d06f85a5c4bfefc009b9a4c81056a3734be3d5b39aaf72cb1ba55da98f6c0dd2b702de46a9bef070ceaf4883a1d0d46187c71baa89b76a975c9ee928fbff8af9f0d080f8d6f8f3c878a5ca3390bbb7abfe71e0f63e3812de4b88d671a6da3def5e48aee71042ea10b1c211f2055b9043b18977e26e486adb501d2acc72ca11a4a628f93f0bed5596ffb9ae7abc4d40c4ee39cb18d12055fd74bcf35ad271c879a5e724599509b78e1dd694d1c29b54973a377b08f6bec636647a31ca4d9ab803b947fc7550279269ad1bc3f207e6be8cf5f2f7887b4089ea271b754f954be1086d407f9bcb95516a00d9e133c39d390d0f39e1f2129643e17f09142cb201843b3e772b7d923f2189a028a9363071868005e1ffd652dab51a93394e5178e00c6a35da6ab0f05bec4df024942ca58a26039f1f3a2f8c5874fc3ea90d62f20a37289fb77f373813410af9a4537541714e62e8d168622f07090129d61e68c1a31887e7cc8809d83c89538578349d6f83619535a6cc23f32698eb4ac18cae910f59097da9711bd4eb0a94f9e446677728532628b7bca145509c5228042045932392a2485a25f6604fc5e972813b124d1923fa59534e029dd214ec846a28aa71e8a23cf4cede19beede55e6d1600813de00fe161e3c5a844a6f32b40879009a16037e2dadb3ec2345b6f040a6240f25c51c1e4b42b06aa347c4023448db4327b88acd7256dbab587eb001413c0cdd40f2086c5cc608dd3c1142f9346daf2c83dc51da978246396e38ae0aa9620331cd80560fb280dcb2174fe6835236d2e79e6e648cb7e1ecf2b343384a58e7a403f9a754742391c4865a313b92b0d6b9270b3f634c47befa8ee4494777f11366c16ec038437b894a9a3236ced66fdd857f75ba22f91f8ac4f1d497de6122e85aa73fcaf3e918c0b7ea0fb50928cdb476b5fb848fe34ece6d8b142f3a5db29657e7b8fa6cea0de055be3dbb7c9e93f77209992d0bb1df1e2deea1454db61be620f0b131f3adccc6b2e64fd114699bbc0b6dfdd1085d1a463440d95228344f772c7b8319d8df133784c2812d7dc8dc5c4b2e178a453c2f4af7a9331f99714547969767e16cca4030d6afe73216c634174fd26ebf7206722aa37da32cb307ee5d09d646adaa2827f627c3d9d3e7c3c0ff818a7062bd326ed9c69c281040aed3731615cab7c57ed416fc092b730254e33d1f333f1ee68c9d01c34c7f401c7b49096a20bd115f9bd274ea4ff35b5bb72bfe3e82c9930ff7387a6a45f2e94d4d35d4cd1e0293e6e3ac3a10aa747005227f2cca40908cf37d6130fa83bcec353c80ec607ab669c24f702701486f64a610edf77cb1a561823a787d37b32cb1154dfee0b3486a1c76a2446c418bc7553b7a5cffbbb77ff6f83851964aa6ac6f145b6d0405b78ef3da3e96bdce822c45280d8fb7f5f72254203893777ff3c8a15d5ff635ed508a9a58faf282b8e1d044979bae04783e9fd178926a0262cad4c454b37da9991ec590b7c5dc0e8fc82129e80d5608af07d6df832c605ded9a0383dc6551f64010ee2fa72ee4c9be54682bb52c793c3359728cda5a981d20e314e1da0e54534207a874bba7e8e7184a2f124d5b360a4140edd5bbe36f501fa9faf3037e3993ab9adeaa66cfac5d976948365ca30439dae36f3cac4ca83b786ce6715e3602c7be03226c314e513b2eb801827aacbdbd0ee60a69d7da6ae79697bb8dcb700f91afea79ab4aee5232bdd81c2f720a8076c4f368c20a1f0ba03019fdad9afaf4bfecf2e8b751b9f8ae3e820efb1707cde8de23506c401fb06667a493a7bc1931b26171c316bdfb5e1592b4a47813fdf859857cc48f3bbaaf8d8a26a5336e24db7e8cd5b21676686b2b03dbbc82e316a1e7a2dc0bf3c9f4a424aa1bddfbad9039e199f64be14527ab13ff7ab91b438b7fbc96ac1fa4e5b91f1a383475a16382f7fa75a102f19446bf8b4f56bf6fdbd8a9928da9d57af0fc9628b07cce074c0cc2767e0b9391744f0cff4ca85372365cc1d8df86f731f01e3c449dfdc7198cdf55e255df1042f0dfaccba54d00d194c250ff00b212275b77162e85cde38867e0f43ddd704a0851524834b882206b8ee9dd166dcf4538b90cc4ccec3c50367f5d370768af1e1ccdc67681ce44e5de32d4c44310f2b53d22a07c14c9d55e64f48f45ed8fe60988c6b8b5cce619b15ac671b3cfc19abf863b9ebe63ad7192f68dab0746f0cec4ea6d22f92115f16e9b3b5f0e0dbf9f7226073658e4bfccda20ac80836b2da66dcff4de6cdf65747d1dbda43e6f68dc07cb55b0cf8e7028d925817bab424a6ee444c123541f302c41c34a9272b7bd5a391c5465a3021fbdf8043867db040dba3103e7d5266010e8268e82849b8149f5693a9cdb8f4785938663131742a7dcf5484f7368fda28649673bd0d39ea9bc5f099bcec4b4b3c1e54a6d35b062472bf5714aaa118ade0039d10838983249bc6aeaf6e90c939fa0a3285c0f35a3a5f79cf18629e3db167795e0f4fb1669981f431ebfcc74730a031d7887470453fb54eac46de72e9f7f80265688a9329ea58b4c396ff51d6ea76a5aee10a276b4fd0b3e9528a0e11fb722f5706d7d57203bc46809f3e6d8047773f53362e461ec71d0551621224c731d8a0d578789c65f59f304739ece1b840ccbb984e716f6032281b2328403f6239db5c0d8c7573ef795480c53a584da36a7d743ffb33c8763e7b042ddfdc4217c453425e6bfce919ec9b68e647750aea6a6aad6dcba8f0e62f7553f3b27c0d6f6608ea570693fab96ffc6d0f97c7527aab93a560955835087628661a9483fca5c86a9d6c94f467647aef65c334f1b354cbc8c9e71f157abdd3140843a59a0e3962ca0b2ce329e3415118d3d52909b77eefc22ecf6b7d29fe445ddc51e95c72adaed309af14c56d4faa73fcabcb92230a46fb4947fc0882ded484013977ff446b7257a8882c8133a6a88c8e620d2693ff06b6f92472492aa6982f0491ee6629eada71d642ccab06d4eaf84765db84dc35bef47bcd2fc0c941044441827bb6ffad059ee79fed239347047fa3544cd362d35f6073edff1d45cf21cb92b07b65bc983fb4c615df9635200a5e7571856b8e9069bd7359d2f9dcf9b17e6375889d4e0f37b770f9b244d9e3f92c731bde0d04f88d7c4d7abded401a498d5f21fb6b036653ae60203bcc3afb134dcce6e078b80079c26d66dbe8c2efd8936e85f8d2aa3fc302f787d76580097189703bfc9bef40f874aa4c17159e5b071651da8e9d15fdda020e0b31a13afa204904137092acd9828b4cfe3af9b0082217271ce1a6d142b85b6366a4466db022c306ddf4d3cfd1d031a8a425459fbaa922526e6ff6dc7b840b0c44f90be03f56c08e98a7b2f9d73138ec44d8de47494420f701bb7d5277b5efc222cdc008102e26b37aede28886ddb9319f8b99957bbf58408181eda69f01363926fbfab7ae426a6a85bf7af4258886e8fc74b367d4760a540ebc0bcf60c824c4e57b59e12f75db5c1569bc07e249121c931dc2c7952bae79547191cb078d3e37f3264ec11a671f99db303dba7c3a371fc6522d159cbccfc0e206338fc548724a92ee9ba006322bc8368c161ee12923d3f94a27211251c56c818e7cd9de99cc14d8379f0bd3c157a87d26f961c9173de3e20492bf6ad9bc5c203633422a675a88762e60cdc7becb64c7224e1a0de18704ae85b395705e82802d2c5f141798f098f3bf8302d1497a82567e6abcf196146a37df10177df24cfa05e8bcf220d2c9129c3fb0878f5de6330e4d54f91cb234b21972bbe59b506a38131c7e7856ea3059809b19acc9989ae7f4d2b78606135fd6d9ba3ddb23c8513a75bea9aa6731766466197b7a0651100593fdfae9467e111e2da4d409764d27e030082caa477a93282eed82aab80f8e8e1ebfdd66562c7c2a41c530e99ba0615f2d40b9efdadf3ebed221ccababc87974e494eaa109ebf59c0bd7fbe03baeaf27bd591585bb10c7b6fc8482580eca11bbcec25a40bd40a1849a8b2206a66a4e24cb7ba7e522edb9ad38c09dac46e7f4c1a5ab56172aca5dceb1241b8f497a0fa8f341b3681e6eac1122630908aabe53d43f3ba1490052d46715e01bc6d9cbfa2909f792b751f6bf382a35d6d51d6f948bcb0f8c953a79fa50ee62d1787648b98f29af42ab9b6ce45d7a3b1fb5305c80a9ede46db5c2e031c4a3c25b391718f4481294d282f0371081e6938153021785874096a7820e056c421027f5020002b008091d5606d3711353ea529a468ab6a1003df1eb9865216849d6f02f4db8e8d67ac09add5335a066211a3cfb7d80ee853d7749a520c8eef6bc1fd75905253839244d85b5ea60a2c9c579a05004ced52d38b7cfd74066372a906da6a006ecaca6f21faf6ffaac1dd37cf0a40cd3015684227e7d22d789a2b2ba0a0255dd246ea7750df351c644e821724166a0038e31cbc0ddce075f07fa53c46f8601118306a5331667e481a095236e7e5c471a1408aa4f9967a9193628f15900e6a675fb047bc2a4bb5acdd6e79d3ba74f3320ab304789a0b05c37844d04d9349a32e82b66338d270065772a1c1821085b40f1c164f80a07182afb538dd349e1ecb8cd5af80eb58f83b0ee21d1469fe388fc514c1bff59f306d2a772c6dbd9063f297be64d665dd8194f109ed6fca37467c026c673c352aa616e1e35e9a74e4ece140fc2351cc3c350bfbf977b48d2f49fb57e3d9c0dcb57180e5af352b6a3a1d6332bc351059d4389ec25ff000d92c5bbe14073992ee83098bf00a8b22283f3eab149f8c97ed096646fbe7189a9384a3619b0aa2afdf9da85bbb3118af57d061663a040d6dee6919df73816aba6bc4a8ee744fc1d45bda6511f44019616e4508c15892659638348aac1888203ef8d8adb41994390326546c06f9c98703243f125105eb34c69814c10e5cd177dd234886b8feef16391ef264e080fc862e9914ecb045876ca3a1196a4aff06753749b0d89adff698bc9298b29716a4419ff5a38a62577e6ba1d1c51401d42668f26e24960ac7eab344b2a6f3211c2c5df7fc9a4c827fd4f8daa22ba1e73614c4f40c3bd80463026bc55572f82e25b4c5dd18bc9ce8a4e271a52c3da9c259c41dd06cb165056a071d4853dcf94c8597a601af1940e41a7834139190f9282bc38a299ae8b775daac922e5525921a3247d959b4014d073c14b0445da3624d7eb9d8ebca9df888a876ca801374aaee2407d3b31609b739584308517afc245999e19f47d73645f43564e424f6c8eec3b9caa235d0c7db574d04eb44fd543e80b60437bc848cf31fa1ced87cd520904004345a31d2a99e579a49332f0cd16f17834c9989b5845c0423575e7b7b85711ce88e6c08f6ffbdd57d09b764da4d81c5ea279bf7e7d9f83ed48b210235c7c0091d62f00c8f296372e909a607bf0e2ba82828f107a7410e99c21fba7dc29db25f1ac6c9ed8f55d0d9df366e4ac12a460c183cfd77d8df8c965d8d9f9bf52c400009a8f293b53eefa0b0ad73a38fa3e04dd626a20b3df4c2db821c2f6cad5d281f08ba75d923ebe90fbd51c57da4aa39465fa7ba2a4c11a92c70d9ec1163e2f5ed7452000b849ec058aaeadf430303cbb1f534dc468a2d187de4d51903c2b1af33aa9a3342b37b6f17bc7830429a347cb47d1eda9347faeaa63147ab92f6d5df9b0b63e677b06634e65f35faff4b137f6fa8db140c76937af9b4ddb73d37d158d43cb5b876dd63f896f2bf617f751223a8083befe72a2ffedbb1b8dfcb03fd67bc99769c96e72f47f1f273aa609cf439c2a51d1b2e42cf22fcd151f3f459deb6cd9fa09b4a11a226c1a482ecc1a93ff7cecff7d2d4c852248079ec6942f08ed99da325622f167c1fa6d1a4154735896ecdd8666d3664782bb4eead423319e9b8f6a6ae9ede8aa19a6a37a590e3b8ea5c968b6c612e189668baf6ebea92f474ab366c850742e46f2b5a57664c6bd2af84e7c7a47bd641d65ec6f5de0cc1490b468f894d896377c75cc4baae01e7f58efac342c36c27c0e768da4f019684b5f84fc041d8cdb26c5f7a26b0b57b4d58811f013d00fb77db808d322e5ba00095c7b19de314b84f31ab7bc23c76231989b735d159ea67eff63310bee6fbd35bb0ff19ce81eea32f89e13bfa09b0a131d9cccedc4d04b7d90c251974a6fdd500dd744d8308a01d046c4902843902f837b509a1e968f2fd9f472e21d8ca8ce12440ccfba161eab18df49143997bc24086f5bf471443ebaa4f1575cfc83a9d941a2628c2c510db390f1a0c3858b58dcff55d3d2213d568588b51ed485b0e61996c5497d1bb701647041862aec6c8516eab2ba3ffa20bc7d2cdff044e791cc338a342dc49f7ccf9a10dc4bd4fde13a7ad83cbea2d41a185d3d3711c5ef242bc9f4af86bdda50b7761b25f57b3a15abf4b62ac316ac835670eb7b81bf3c83eb647c0bdc302970064bdd1794202ec0a3a56051eb292958e6a7a091b53b466216bb0d54af7cf921111f43f681687c72d0640a11539dd0774b266a515630d08d01768ef206029807156a0270fca7097c72c8c8f84f8fe577521f5adabcd5c1a5e1295067bf5560cf9bdc0d7e680cf1c5f4ebf503576ff46d1918bbd72253df224733f1dacab2856866801b9577a0e0bd8abff6497fdb454c74f194f7094315f0dace428325810358d60397fad44e89f39bbcb21741d3e4847b9fa073b22f19de4e9aa1060427e4b37e4fdfde8e34f22fc8dc8051b35afc9d8434c9f83be8ba9418d9ebca60dfce33e4e12b4aba9b0be9e7fd6b7a19ef1fd91a513f6d304a48c9c8d7b447343f485f49786aba5560caf721b95696ef1a494856c9a5a89e31520aa949a917d6fc43335d9b515cccd16ac698e27bac031b664f01e062971cec20be42a4951580df6acff450917dbd2a667c129a6c819c48e3ff45fb3579d6452ba76aaee0b8a78bbcf10071e6b1609b5aa817ba01d69d6aa46b1b2956580a470f4f27d1ffa8c12d37c74d04859edcb8965b5c0723b7e4d71eb1b1e27d5d422fdb8bf745fe530d8bf4672ffa701517e3598d33ff605d49b270a471be411cc5e3e4008b7325051b1a9f25a75a80c058494bd83b5d25cdd95794ef1a191260ffe07b479310bdc7258d74ceaf0a6a8ded4123417b000ddefc0c8f56a4b00d25e1db717c069c34037924d5d8f4afe7c9f62f4c84b697431b6417f01d39bdb22fcc5bb6832aefa4bc2626dc3f188f3ff7cfde6fd1f9d06035ead8b4399da27f48af0ac09ff7fac65596364e2e11ef90ddd0d924e40b35d08c1022dfeafc06a24026f18a810abd179c29053abdf9271188ec29186293e65dc6bed23ed82715a194e407a3b02e0c9ad21a97fccbb611b98459d044ff9c29f8f542047b00f093522d975006baff85e28cd83258071a46037b090289830ee94f4201b3c3789b0d1fdda7a0ba6d16322095001bd260f16d8c03eabb8027a0623b67420ed6999aea03574be25c77e72eeb1f7156b822811fd3fda4a424ef564c8f1e105e23e2afe50593cf800f634601957d0280441c0c6083dfde92d7c34b5e242ca7621bb571d8d2fcb3f3426138ddc7756947e5dacc30c495239e41f9408e085f9a4aa62058f58dc41d35ea6eafc6b783b24f1a4c01be160a019c61d39ed6ea07f99bff22812d6b98752169e78aa04868bc51d12e2e9f690048c4244ced7eadda5b1805af385c6f6c9e13f3b5e753d8eabb047f53e776135bd5cccc4cde53eb3476beef04bd6b9d9d019b4abf0f4d07e091589916ca91c7d0bfbddf6e136c180067c852f01a0d0210e63bccaf05cee2a52b1b625d6ef6a7531c94172628d741ce2f4a670fafccab60c65cec02dbecd0b6fd2a7f995b2d231810fc832cd427d1276f58c259433ca039dbb36e8214361e646fdcd31c84646423d72169853d26b805e146a4745bdd8dd57ac55293c4e360f358dea5a1c762348340e55c6b80a4f00f37f7aa82988528536898424fb81959729cb8b045fb568eb18e816abe58b03e8a0c909d7f9b8202c38bd2b9427aa603bbf007b30730be66fd3ed25702ab46d5b9b240a4efb3d309ccc3a8cc0a851e1d0f2fc2d068be871db31cd899ad83d547f1c57bd87ed59a4bdd4cc9a4e6dc1da809bb2eaad516e43b19fac81f27f2f49ec13866b58d1578454aef66d4e35f133379c37d3918c31389e8fd74a30972fdea0b992a718e2829c369e56c0ba43822a89de0871b94112144c5d045b7e35a3f5ef6b536c68fa0ffd301b14b4ce484d55af972b700949950d67cef6a9b64d94639ff57aada7786121d3ee9f9fb37d290bf9afd7d5049fae15f0adbafc0eacc30f948f0da0409c63cbcb9145cc4c1b710716a52c11c7e61293fc37ea11f2842a8e60f97b79523553bb6ca654d7063fe6101e2274c8fe5930451e4d131f2d366b0007e7d6fc7444edb8a036a739da52e967bd49e1b3683607f6b03b6bc389ff131f2407c49af94a0f1f3ec5e4f1afda25ddd9c1f3fc12949951d1b7733b661cc5828a570ba01e201632345ebc3fb2af531bbe761ec86ac1ccfbfc7464f4530570ee4c8cd3db47aa688bfc4b494fa45b447c47456a810e28451f0b34901999d188e4b61c29771b93019eb63da99fbc752146dde2fd960178ad2ee55c3617f439ae29e6a7632dab5702c02bec095fcc7e774fc39a88909474f45ecd4e08a8c72ea93f8d13ebf9372c0ac81f2b8c4de38cd397aeeb626091909464cf89ab07d1b823f17e728acbefe73efa4b69c2ce60b2e004b7ca3e16cef99a3aff6f5cded6667228d63d0528addde21329a91e0b274790200df07f38ffeff5df9b8ba818974b6f3fe7692267e2bf71c9e2f742032c14aa923170646a0e6642d2618f52959fdb33531aa5892f7011f06f787834f02657c047fe89b7703a3e5ae1c1501d1da72b9915e843a549fde9ae1410474366772fae0a3693045b1c137c3c2e68b4783c7a15b0c39f4e0e5de66feb0a64463547674b2363bdc70e8e188ab707828e678f58edd8ea2e60ca3cad10eb5b0353228ec94f708022ba1bb45f39136bb0d70b1fae9a6df1542ad83334a0dee1fd99ab309ddd6b69ad8e3ffc2108281cc6c4a479274f60a9304f5ca1caacb4c7badb939c2fc67593799fc7b1fe51cfd0c78e95c9d0bdf7c8a0104d802bee344c30c3c60ae26e900c3300cc3300cc3300cc33074c4a0f98fd614aabd9d929456474686581197af3cc924534a2909ce4c7ce9e9ccc4a73313bfaae1db0f1908920ce80cb60cf7261b99294e8d444a092211102b2538c6438c2f9caa65344eb28caaba170e6b312ecea7c8de50036274e12459d2ac49aec79fee568b185c4087e8d3145cd72d9c24416d7889a2f736e21d3a76ec38460b4799cd3ed1efa927081920c4c8c24998127464891734d68b85839e70a2959a6827be6e4f887185d3e93bf74d2a09feba136258e1982c59b674f36dd2fa5538584acac4fc372da60a15cefbbed134a52dedb470e0681b6520b884185338fe78bf869bc8fca1c4a3871e076248e124a831793f533e5d7e8c289c4ac7d55c769d24b3a1400c289cefed4dd7dba90d9d87ace508c10d1e3c1a4487330b623ce120b2c41c9163a2e43b9915c470c2e1bdc44c8d9c12554e42d670e8d0d105880e5f15c468c2490a8f9156f2969f7210830947bbd63acda2fe5eaac3418c259c544f6c36996e83464dc89ab1410c259c6ce534939d38315f0e5903d1e18506319270d011bacce44dade90e249c4cbf84ada6a6cae9216b3a83184738996b9f8c355b5131c2d14e5c67d693e4cc1985ac81e8f094418c229c7be74ddaa849bde705114e4a1c152ee4280ba74c216b4338c916bdda6497df733f64ad0b219c2d75d6a43ce24c871db2168463c6c9b8b9b2fde47c30880184f358a866255351736dc8da0f8e3627896317b3b202a2c3ed05317c7092c25ac5244966299fa490b5c781da05317a7052a7355a09b242fcc6d6043178700c19abe2cbe43b249512c4d8c13183284164ee54dd8d43d60a53104307e6ec5a2b3d252879d33c40deec438b06f01841bad1a30c2d08317270b65871ff4f4c99d908ba471a20060e4ea92bb4b4e83bcb7c12e306471ff94c63e9dc4b28896183f3bad865d16be6ff25316a70dc345d2ab7c59247ff3168709269e994cad2255b7f8c191c93f49b5969294eb87c0c199c2c9912d73d624a843c460c8e259c1c9bd6a682ab1e030667932ae79e25ef28d163bce0e079b9c4f4b651ff790c179cc42467503569c7ca4fad388c8813219e7af259122b4e1957629d2eb1314c6815279125e784ca8eca1ba9e2a825dd4d4b88b7c828150725678ecac6c8b01742c54173c6a67eb7f8fa7d8a5365a8ff3a2987ca9736c54949b266499e692a575d8a83142f93a3ecf2d367529c24f1e47d29d12e8d128fe218da5cfdc4a67cd9b0280ee715ca4f9a2edb974371ecb7b50b596e23640c8aa3c6b5ce5cd28298bcf9c42946e5e492bdb524d978e2bc29fc954972289915d389934931b5927a4a5cd570e2287a92141a3f74d76437717a8e9237bf683571accc1d0d9593358a3271dcbfcb26c86c8d16c6c431c87cea1b636f2c55b9c459bc36a6ea5df3db2d71de16a54bffd32bafc4516433e692764a53981207f74c6bd1d3a43695491cccd64f66366468a89238cf879293a2d999508ac461ec629d1079f35b43e2ac7a9a6f464e94971f71ac36bd96d32d2631978e38951665c1746d9225da88638b6e12ab30da7221234e32e6d1b426ab43991671d03269e524e9abf44811a7949424224f5d9d56137198dbd85196f7b54f449c72bd52636edb0bd61de26cfb69a1b26bca921be2e8a24fe58d4b62535a88b3bba917b39891f519218e4996bb3d71accc448338e81273487b515aa111c4419f947beb4f853a61200e62f1d53395fc965e85acedd00162d701188038a5c979162a5e531e71c8daa3fd0e2f78e43867fe70925162e8550f79b2e57e3885c6999cf93c66f4d4877349b2f3444d23575a0c5933bb80da0560f0e1e4795abafd929ef02364038c3d9cbb2effe788126f326b7400430f07b1a7ef4b902d993f6c7c6881c5878e049300230f0765b12c87dee4592313b2a6a307888d8ff3a105161f6520783898679a97205d6bb3fa5ebc172408038c3b1c64f2b8970b7de28cb60a30ec70aa2f4986f07a51b19484ac3d5f2012d9f13c2291f71daf0c62041875387908a14dfe2a49eb7ac81a4831b592050c3a9c33090d32657ccf366b0e673739c9548cb15291e5701853d29c5c8c0a1313f6028c389c6287b41494d0ac4184c341ef29e172c5db30d6bde1244ed87dfe9968a92f216b20fa8048649d00c30d075325c8cd55aa24e6b90d6cbedc6a8234a9c44a21208f821b3c58bf00830de6922aa429d1fcb2981f5a34e02362e3e3011f5a60f1d14547225d3417aa05186b389dbea820bf49216b660830d470d22e9d27a35a7eaa250da78dd5672e2644a9f62140b368596c0152001868386993622f5eb68525f5782201c6198ef1bfe4b3dc51c81a0f2e4070e06810be0f2d1af0c103078e0444223c46a04347081660982199ef8eb1e45929c558b7e427c4699d4a2b2a0e59e3f1377a9cf60ee3018c321c836edca58a6164b312b2f6478148241259c32cb60001c0136090e19c392a855edff66e93903590dfd1c5d9f7e8623c7adce81d3d0a04608ce12ca745edd35c4edeca9a8198d20186180e336a6d368c5de63ef9944347166520390c0d30c270924e5c92a45b922bca1c89442291881988f1b8c1038d47d9b90106184e928e5d4d75428e2c932f9cabb288bdf09db561f7c2d17274959598af278eba70b0bca42a87ac9bab202e1c64e5ecd7e4268dad680b07e95d295d34b13369480ba7cc0a5952af945ab8b370d2dcbee7ae37160e96b64df3c5199597af70761f35b3b1ebe5826b85d3b7eca54b8b517229ab70d01353566fdf9c0ca2c2e1b22865267c56502a9cc2e124ddd75e529d6b7f5238ecffcbeb9524a5a847e120fb6bd6992d4337289c92d29304911db524555a7c6881c547245206003380f184c39bba18217a37e69376c249f7667ea5d275fa344d385bbcfd52a1ee55946e5900830947bf306a5d2ece7e2d4b389934a6c2ca43efd518b2a623c9c114b0c087023e6c7c24e08302587c442285078e2eb8b8e1050c251c4fe99e966f1315f2948493242941bc653331cd899070aa526289e93709aa467b84d3893239c3bb9905c2b2596c01b20386118e9ae4346dd2a67ba39b2d6014e1143346bfaf2da1f4dd2c443889e2157363dc8899cce1104e7275d7f5e6b53caa0cd9625ec010c249a98b4c6d5e6ef2eb914824b201cd620b10101841386d8810e9ab6669830c104e2aa9a46f43bc29b72000c60fcede25ac6cb0e8576a86ac618e531a00c307e73819359bcedbef2585ac79ff0eeee14517391ea00980d183b3960c9ad5f3d574887870ecdb4d2797ec7b1ef30e4e2778a9a9d47ba32c46072731a6123bf7949dca1b8c1c1c67d32a93cdf526e9c801828383d9978d0c72b19594dce020d737448f7291db26363898bc73694d8b52a792d4e074e2093bb561ed334b68703e496acb9f92b94cfa30667050522dd8a8dfd8a83e0c199c4decde327745e5761831388f6c8d1b371354a90e0306a7109b44460966da4a87f182c38a5da99824a9dc9ac370c1c964c57c4aca94ca84532b8eb33f3a64695bdf35b1e27426cde6eb4ce124615ac53154c9590ab3a1a64baa385e4939ad625016f746a938b76cfe885a10fa64102a4e1763d888ea320f1d3ac551d34245699336c5b9b2f968f7db1f9bbb1467d5cd5fadb1d432cea4388d869994295d4a32e7511c9478392b88b9f99c5814876f8f93eee4976e1087e264993dab7275a038658ccaced4afb00d7fe2d8567df2b7496131cb9e38e9b22b759763f15deec4f134cfdd9ff5a564614e1c2fc93131aac2a55c7913673ff12c4de8ef5251d6c431a918b49e9442ff929c89e3c5680d5ff9ad65379838c6133e4de6e4b6a4349738a686d19e312fde4b6389d3eac8d9a8ddf65d9a4a1cb4d5c8987c57eeff52e29c9704255b067b12a7aa378d97f7f3db5c499cf409eab151d4ab0537120737cb13dcf29232950289c3c6a58c97c40a4a3079c4b1fe4b5f5f8f97a03be218dff6b287e698991b71da78d1aa92447f779511a72d692f67fa2eb92eba88738a2c3dbf29a3b4a28a385e854e2da5e74a2549c439d32649bc0d9f1b3d224ec1e782b21e39bb49798853100fd96ca54b483b0d716c9313f3c4bcd8269a85388789b33149d164ec131c00210eaa2f6a92f5e2208e616e835853fa52890be2a4a2648cede55e51148883f7b889f71a162a7b80388e38b94b66372579e5fe702e4d32e8b392df599d1f4e6295bf5fd2354ede8763dce8af7d49162fe7c3a9d64ee5589317b4680fa7b32e9da5623d9cfddebacea48eedf370fe0be5a37c4b46370d0f674be14ed814abad1c8f237d09d81404c458165b80306000773865342b2593b825843eb1c3299589d98285ccc675eb70ea3e21b388cab997a4d0e1b426ae8f3c09418ef70d418e1b5f2ca09c090021063087837fbf26ef53152788e570dc8cb9ab464405dbfc8e1e2066dfc5175aa4f100c020061087734992fc4bad3953490387934959834aa1e924ebcb1bce261ad7167359ef77216b251881298918801bceb3a76e8210bf2d6ac3d15a4e8a55a5d335676c3878c85c4125419ed925180148d28f03242d0311d0fb12e8e0e27704600f0358c3294349df984adcb76ca2451338c18de47750201231439831859309ad279b1bbf6ce61e71982185c36ad9a5b8499d5a257098118563b7cd29299e70735e81c2c9da24711f9636eafc046d34a693c1d1db81194e38db865a1dbb9882deb0090729b2f9377b4c8f9a5ff460c2517309735af64cd0f7128e72f569621af90d3394702e753975ef45a864bfcd48c229c90b9964550e0907db4d52ca9e1b543a494738fa9a2832ea6212322e46388f4cb9ae154d507b16e12093e8fc4929c549494a1b6610e1a4b6154776845bea50c85a311c8d13983184930926d8c979d2d859382412295bcc10c2b94dba3431b71db20662ee0b04723850e7c00017e904bc86194138de09cb1eb901e1dc2e6631a39980bc1bcef8c1f99458153ee3ddf22c205f2090dba1a3c70540bae0e1801389f438c167991166f8e03c62e1ce4f86cb92d60283193de833ef7f772f16b2c663ed04a77bf402221100c460060f8e71a456e636abb953efe0a4312899e2b276edce3a38a505b1aa583266254be4864722e94604390767ff4b82b8f66990f5f0820b909c818353665242344982b824e4203cba8c4702b2d8026405336e700abf953158c950299bc516203d66d8e09ca147c64eda74cd5b0d8eb1c4b9aba4e790352e7e4d308306276d39f9ca2f2c68882c99a643eca943d64a304306073f4dd5a2f721ba7c2dbc90008f1931c83776a49664422bde3f98018383faed2939843651257382192fd042ae55091d9a6250cf70c141576e4da9ee27fb5f0e50c0024278b403427874483be0c3c6870216505a713059df709d56c81a2bced9a6244d6129fe557615672db74d82c92b3b7951c5c967943c5b22d6a2e55271bc1ef5e5a3a2855329bb220315b968dd969ca79fe268fa45bda61bd5368b2d404a86294e312b285d16a3adafd7858e1d0b8844bad0b1c323111e168844d28e4804c928c529daa81cfdf65e0b0e1cbd3d6e7071030748488f2ede4f208314e7d259b398ef72925c1ac5295c99e8ab13a91b45a2b8943c491895843a14e7127392e7598a8d16038a63ea1a314b952f94bd9f38ebc94ae1a2443d71f29acbcd17531232493b7190e2a2d5664eb2a02a274e5a825bbb5e1ed73437714ab956d9ab7ff2a6a0268e41f6c8badd77877c9938a986bce895a241c58609f376e63e296cec12277537569541ec4f89258e2264cc88ac52c2c29538c8b8f0bd73fa2154c5011994389aa0299814da327e9e4ce294cb5fe4c36ce3998924cea74c12f396541289638787aafe8c8dbe1e1207a5ea2f1ade2c79fd888369d4538d9e3be2a45592c55b9a1a71963999534d57348b991127a14eceec7d6599f2224ec934af9aaa73b3501107738be157e3b2fb3289389a7811f7d38cb95f441ccee6e25572bf74957288e326316836f9212e2b35c4319498e40c4243e67f588893cc6d61bb82a6929f10079571e36ccab824896e10a713afe44d13e6046512c4394b68bb70a25a8a41813849156126f76813931810c76427cd941c93c466ed0fe78b3eaa56d2bbc6ed8753da6e68d1bef14eedc3e975c34b0ab3d42d1fce7667277f54892577b587830a7a52673cf92e2e460f674b6a954bc8093fa985ac591ece1025d64a7cf3bb4440061e8effaba964e545837aef702a25893f6697d52d523b9c4e30492d4ed21634c63a1cd3c6c304ad71a7263a1c4f0a67719651948c16b206f223e81e5fa0a0b1d005828c399c04fdbdfd5eb5b4fc7b9ce07380d47d68d180a41f0bc51e32e4b096f7cbaef9290ea7d01533c92393aaaa0d1c0e624ca52e2d56e2f21bced79643f4c692e1864439c1941025a59edd858c369c443d6d7639bf628e442291d21d3dba90c18647998a497944f5ff04e29fba8b0b7cf1118868e62964ac014bebeaae54b1c42b667c95a687b2134d6e7d486a1b91482412f9b061e3e38b8f40088f76800d052ce08b1d3ab878094422c8413eb4c0e2e328e06fecd0228206d320430d2721c348372117e325110e1ebc2301c5528e2f78e40164a4e13ca2921c9e4934543c43d68a9e0e13686123128944d08420030d27296275c4e9a8145430643b2d2d44c6194eb2a9f43015be995bffb071071966388579d3641bccd29b98329caf62a5516aa944a4c8ac0c32c870cc27291159ea5741d917f8b0118944226b3c07196338fdd79d1e21e52d4b5bcac910c379d4bebcfd62b78d320c8751c10425a99dabf421180e4a2c299a71c1f2a59b1520e30b4793514cbdb5568792c40ba7d832b973378df14a195d3868ad5f5db4cfb09295c18563e78cea2693e4054b656ce138aab45e5beccebaa92cf061e3a32af041012c3e1647175cdc284c90a185931ca5a259c824759a6c04195938df8925958f2f2dd9848593a5fe1bef0a6a5de121c8b8c2714655bc18542cf91407195638ae85092dc1bc2bd9588593b00d66a6299b6bcea870cc26846a095ed25e2f74838c299c764d3a392ec473a3ae06195238a693fac3a4507206cdf80c32a2704a4abc52214d69e8927ed8c023830c289cd2b7c2d2a813e3c56e2706194f38252153835092cc97b87fd828d605194e38c99864bd4d7333328a6c9c654146138e49da6ca2c7c4655790c18453864d9a9971b2e9be8463e7558f7e093aa7fcffd0028b8f482412d12ac850c229949225a824349d2497e8176424e1bc5da12ccc04f512ba71410612ce6956b2c1bbe4b28d7b41c6110e6253127583bcb8397adb820c239c54ae0f3dfd8ae762114e1bf3ddf65b7cb14cd1028b8f93820c229cc4c7829cd58a8c211cac3f3e47dc59cdf84238e5138450a67c354f8aca08c2e15259aea4b595fe643280702af9047126dddee343b09cc5162000d8818c1f9cad84cab1f182beb857c89a093e07480e1d69fe8004548f1ccfc5e3381f14c0e2a3b440860f8efb3ea36ea349d209263d3806b7fc3995d16c639e07a79362fc16b125097befe014575b4fa87c76234e3a3897a9495a3cdf3326e5e0206b6392c9f54e4a22c6c149aa8965a56fd7f23738f7a938ffb724455bd606c75029c54d37e73b97d6e05461bff7922c625d742590418383689b284988cc21a76406e7b5dbd0327db5294806a7fe6b3fe147a4e6f863700ad58ba3722a631a0c0ebed9dd3796ca9aaef48263527255259999249d23192e389e182366617ebef3b6e218d4e689292a8ebc9315e7136c2beca249821095478c559cd27344a95d0dcb6babe294525887c8935b62d694928ac3cd8f88b236994e93216b5c3c8ec3858e1d0c48dfc50522112e1ec75fc9620b908e818a832ad1c4fc4b5382cb28c6290c4dd31d85f4c8811b88610ac6c4355552f8499b90b52f5099313bbec78d8c510af38c5f497f49d5f9e1ebc5c7eff082870e1ce903ad171f91c8171f811c3a22910f1b14c0e2c3c647e4c3c6c7a147221f14c0e2c360eee8d185004211831467b3aa647962c88b263f8a6334d1e6ffb6c1474ba2388fa8b5a749193708a118a138c9d05e4ac99effde3506280e6f7663234d9cb4d84622ef313e71d22d4a92a4d3a09035bd420c4f9cd364b193db2e9d962a640d04b11307337daa79abd2892686ac71146270e2145bc3c43cf1d3dddbc4c9640625b78a3664cd2e09313471d2a484b09c364a12bfcd2146260e2a4a53af495933b92f87189838e88f0553497f89a388dc97e4253dfb724b1ca4fc58b7fc880dad197b438c4a9c2dc5bf29259750e29892247ba9c6a4cbc44b99c451a3ba5b9a8a290329430c491cd389f9275499508c489c4b90133aea3479cc7684189038699620d4c97e85acf1307b88f188d365cc739dafbb65ca90b51edf8048e42c0f311c71f8b73ead92494c51ab0ab3d80224008388d188e3688ebbd950e2e91287ac598e0918fe430c461c333ebe436a9cf1106311c712f511e65da9430c459c62da46b33349bd26e9042e0e3112713a31fda376722aa20959437b430c441c3e54956042a68bc18242d6368b07e4988018621ce238de1fe65d9f214eea947cb99bc53757480b71509a04a523375d63ca31218ea64ef3a7dfa64cb90fe27c5290d9c637f737fe00e8420c419ce3f48fd61cc2ed822510a7303a27bd5ac98fed0171d2f5d6fee1606d62ec2931b85988e187e37c6865150d771b7410c4e8c35947be249934cdb2683510830fa7dc25c978254e3a6127216b205883187b38e9df9494e0669e414643d6f470d694b397622ca9c63f640d44875f1e4ea1438c52f137e67649440c3c7cbb354aca38880e374a8871875365f9cfa657da935a24f2a145033e22117375596c01120044c4b0c351cb92de5d25397c4769885187c35fa5d72f2548bd0b1d0e5a54cc36d3d1d8edf4cc10630e07139a32565072a9cd57161f363e1cf0a105161fc7851872382995fab5d9966951c6428c381c2e5f8398704b42fb62aa0a31e0705e77edd3e937daac7fc3314597c5d8a3458cd0dd70fc8b7771b2cda9b0a3369c32ac4aa9ecb8ca3cb3e124fa499a9292e44fef790da756350b69f256c9b551c3e1fb4f2e9e74a65f9a341c37662cfdaecde1dfa2e17cb3514d4c5d5295a59ce16025c624a5a89646af6a86d38949bc4b412fc341290d2e16e24c850dc9708c9764c36f357dc33663386ad64bb2f526f99642311c4426c164ee9ca0c70bc3e95c4535e6d2a73a3b3074ca6d977ab5134cc2154738897dc1cb6a339bcadd08276da54bf6df9eb3ae14e178f77b7dfb73c81a2f6ee10a221cf3ad64d0b39b26884bc89ae9e891e301ee4338dba8cb93e2efed4a8c100e165329296ab52c9c6410cea7276b0a2b41057503e15c2ac93935bb27fbd7883f389aa80e61d5996db7f6c141d4894aefd48d31e43d388eee4a6b25488d952b0fce69e3af7955a3daeb3b38b7877c8bc6201d1c4cea8ffef40c5bae22e6e05c42bcbca5e0fd37a72e5c8183d3650a56926e30296bc90dce9637fd7f53ae0bed6d7092622ecd29ab59a375362d5c51839466aed9514acc15aea0c139d5b44ec8caac299ccce07465f14a686cae8c4f06e5f6b628965e6e41b444b37277567f995e5070450c0e427da9731d2d133a52e10a181c2fd586b3fc90fd127ac17184d2d229c2c2e59c51b8c205a71bbd7961563f735d91488fe7c1e34a1089945d2b0e266d59b75dcc27e91e033d1a070322911cdfa347e360c5296673d17cd12f43c9afe21856593535fd49268951c5415578bb8d6a5271b8d496c41365bcc65e549cb7de4c4fd420ec4a798a53261f59fb269ae25425e24c960d66ab59298e97c662fcdddca74c8a73c7a535794c1e3b6d328ab38f9f8e5df86b9c2e8ab3cbf86fd424742f0fc531a5e02ed671b39a4aa038abe6c54ebbfc269c9f38c93a4245e8496aa7439e3849fabf36dd36c650e9c4499fb85f7d694b069113a70ed39172aa16b3d59b3886fd3fddecf1e2214d1c4da59c964b4c694ac799388c469daf4a73aab5c1c4d1fa32a924ce8d50527b8963c50925e36626976e89c379854a621269254eba66522a712c9438456bf7f3322b29893a8983bef4baa6e724cd3e2571d8ce352b496b4c4a8691389c240997d1625e924d9038685c0c96e2fd289bef11873fd93754a5bc2485cf1127132c284ba167c962ae11278bef1d199312a5d25e18d060c431352ce662bbc94e177192bbfd532d99ecea99224e426f8b468b22639712713c1b69a9747585280b1187bbca26c86099431c53a9e749e2ec2b8bbc3c7074c1c50d431cd7525ac6bdf9d03c8d429c46bdc418ea3349590b218ebf1ba4554a49464e3788f366968e30db52a94c82386c8c69d46ba8bc9a5929d008c431ea98dc885cacd0b9c70d1e374ac01f5a34a0c70d1e3732e038fe06034040229148e417108980f0246800e2307f319de76c889e113781c61f4eea4cd809d22ad7093bfbe15c8252b1d499248aba9290353bcbc08d2e9aa540a30fc7bb607a45a524a39f26648d87f6b0f1457263c76720019108062291c392011ce93d12e982478d23d0e0c329e3e4136ba25a10ba12b2207849a0b187e3493e4a9229b3211f5a34c071dcf0c2f470ea1b259c529619734df270f83d0f6942c6e0e1fc9666fed48c0aaa62fc018d3b1c737ec62c2efa9bec9059f7c5da54a1ac90b51d3740ccf60334ea70b4182c976802051a74389eeb5d16dda3903573388971c1e7b24cbe50170d399c422e6cd6fcf356e7551168c4e124059d31b2365c2849389c4bbebc4995704a5636d13a4dd078c37d964a684a1b57c3fa030d379c549c2d11ab594d727e48a0d186e3997c2a838c61e294d40e1534d8709a114a8cd9cdd794bcca1a0e42f326711be64e59520d874d829d0cad60f2d5491a8e7766925c455fdf0ba1e1b07579d54f9219962f76f438c371a3970926548acc0943d6d40c5994136385f9aceb53199ebfec5d5289df2495030d329c4f52b2529ad40f934cc670d2a816e7a458e2a485216b6534c470acaa18ff4c6d4e5299de046884e128b29bae375e58be3c00e4430b2c3e7a7c03985d40030c27d535d1cb453e34067de118f364b9549bb6d7848840c30b16b912d0e8020d2e58c40334b6d09cec17f4ccfa981886acb9772472a3776861860108050d2d1864c388970b1d3b9248c42c2768644137a9fade52aa202ce026cb55dcd479587d854dfd6e94d10fcf4ab142b992e7c6dda064b8b811c22352824a1e34aac0685f92176d2ddf387074323dbc90400e06680568502155924cbae25d870347a7ccc18083008d291c2ca55751a7265a7d92c229a5986550a5a41105bc4dbe339777574aaeb25af1a25996dca40dd080c2c1bad3d44e2e097bf909a76e5352fe30d5fe8b39e12c6761daa48e65b250146834e1b8fa63b14a9eb05e521a408309c7a0279f8c0c15c534c9124e22674e55d815317e2be19454ca2939b34b3acf24e12487e5c657fbf7ff8b84d3e6e69a89a3629a1a0f8d231cdc32891f1e7e9234171e0d239ccffd24e9a9712f9519b22aa0518483cddec8a0c439b1a00e592b29a041846348f33841c7dbbdeae28609f20b1a43385efad5a4736c93924df039de700834847032934d88d434bd72cd008146100ef3b129bd4387cb98141fd000c23994186dc45ee564520a59fbc1b142e90b9d41840a271db29643c70d1f1c77e64cd65653bf478e0e815e0f68f4e0f83fef9ac6ad4ca56c070f4e6941c592a1efe28b773aa0b18393aed863b92276419c3c0f1d9c72c62bdf18f77ed6d7e180460e0ee35daf69a225ad7c031a38388ff64bb15409235a221c386e8ce006e7b00a32698f177162648383594c93926cb406c7506f9e7b828c65293136a04183c36ae65332c6a82e6f85accde0a09bbc0415f392459984ac7df123c85168404306e7925bd49ffc72480c8e31e5e28af630e9462865400306c74d55c17a546daf331e2f386abce8373993ae4acaf7b8116202901e1f021a2e38dcbe09b995b96451aa561cd376fea5d959db305971d27193bbe92f868d7315075927c564eadb26153f551cf54ed853aea631bb09592b17cc48c54155dc4af22b724e4c1a2a0e267ad245c8bb1883cbe514e75fcb667bc26afda54ea043019188ff0974a033a65044c46b052f653b0ac90cc18c529c7ac399ff6f8cd870241289a4ede8d1c5176690e214677ec16492a5eaa1482407334671b8a876a9249d494891cf10c549fbad7f89a3e9a2205fa0a07194d3cb620b900dcc08c569f344534ef3d7d8c880e278fed7a346685017ec2e40fe8c3d2f8b2d401e30e31347ab74a9d2a8bead9914333c71eab830df6d623841e88619c58c4e9c4a66a932a1232ec254cce0c4594cd49470bf335b72c85a46221f363e7a48e0c3c6c78716584422a68a199b386dca1217ac649326a543d6d052139674cd7ee2975df67c2d138737315e4cf136788f8d988189c3e9f5d3b0ee95d34a216b65de3bb4c881811c13f8b0f1f145f2077cd8f8308a987189f39f1264ec3bf4892a0a5903d12bd6e3048f9638ed8af42bd14249755b9a5189a3e5ebcb26498bb9c4b432f0a105161f48899370329bbab4d0a592e346ef709bc4498edad56e8f5fba8e8b1992388fb2f4ec0c61248e7aa937e9d9d0a184ff79e8c091d62071124ccbebc96fc97c5ac89a19c18c479cabe3f3ca04b57e33f2c01e9ff86738e22493cc6b15d390198d38afcc9aa81b62da3d62328311a724f2a3a48dd0a4bb0d59e397c08c451c6e4ec80eadf16418bdde9a086628e2b0ea9ef19b54ac6429646d23302311872bbfef9e4dbd8ba91dfd381222e254f26465bcde84aca1f1210edebb234409322d871fb26676d08a65b105c8996188e398944c5fe7b7c9d5d46c7cd8f8e0226d808b74029048848b206614e264b95b6d292bef62f6c58e1e6513d8f13dbc98c08716587c58e0c3c607160b482650720621ce95bcc324b73f61330d59b3316310ca76bc558af34ab9332cb88e929a2b0926dc83478e1b28011b1f1af8d0028b0fc4b2e37986208e239629d5df1e88b309d3a441ae68897f0288836955d8b6fd7f38c935ab3eb3dc0f07f5fd5e7993ed89be0f070b5697c42f1564e87c38dec8a4c414b524b1bdb48753524a3849c9a0a41c5aa48763ca172fa252724d7f1e8ed99d7392f655d7ddf070ac0cef27577be74ae80ee716bf0c1d5b2a8f88ec703c7de31adc829638a9c349bb6d74ed964c7ad27438c9a539e3abe2399c426c46f7e3b2d2ce5ca40d4422580221cc90c34964de19ed6be37034ddbb157739295a0b878368059934dc676f2f6f38ae6d8f45d9ecd14d2e1769037a203966b8e1546209bdd69b5fdf2a6d38fa5e4aaae469a567ca866386513149319bded0ace1a4e23695b4f3abe6aae1f023359fb5b89c8e9886834cf7a571192f83101a8e41f4c3454c0acd9de164b16b7396aa92af7266384951b3871a9717f3ec86091247271d58acb1036694e1607f3193668de72725231126c3416e7ba5121befbcd5319ce249663245f7def3b4101033c470166d512c8d69909ab4613889722a8f06b92798e86038682971a4acc65abd4c9ee961c6178ea1e9e19a34891db384f0f0a28b326ec00c2f9cb774ca0899a4b412b35d38d6c81fbf3c8ba6a43a85195c382641cc3567922d9c2ff3624c3e1e1e2bd2c2494c426f833c39a156e311894422588248840763090e0a33b2701a73af2045c369e78e8563cca632379a63d454aec38c2b9c64cc8ba64a5e124b4ab2c239835a0d17a34bcc6f7ac0870d1e74985185f39a4cf92d94cfc857a87010aaafa2e8cc8bdd2b47513898bca14ffccb9ee85a24b2a7060240e12c22bb962b9e20977d2c10e009a7ebd2342649f7502bf31508e08493b67fa8fb3e1bd5931508d084a3057b91f9ba27db7459060230e1b016aa52368b364ae51248311060090719cd843659f486d3620708a084535249cc27fd5f1b6f19040224e124534b12af74281932af0516c50b047037646b5fa58be102018e701015a7bfe44bf4dc532492050218e1986438c1a4b8aee8efeb160428c2298d499924d9465a0ced8e1b4d012e22910848006e4000221c469e7cc124794956d2af0b0418c2494ad26ad3888c23b52c0208e120d74a4e8b2605617707e15c7b92bc9f24c3d9c900e1940479824ab1953496fb8363d6a06eb1e7bfe1a4f8e0549a4d5b9217d37f287b7090396536ff8a8933711e9ca4eed67c2645662d413b388b4aa7225310e9e054a2c69524d89974c2cdc1490a225434f9ad842f3104c0c1c16ab3a69411235ec90610e006a7cbafbfa0fe4bb6fe3638b76ca8dd3361cda2a606a77abf0d7995e66b7204a0c149ac28b2bb6ebe4c3ecdc09364b7515a292d83933cf9b2316c927f718cc131bd299ffb124d7f6c0480c171468d3cbdbfcd968b002f386dbcd85dc93f030502b8e0d8a3c4bf7cbab272979826d468c5e93b4ec7bafb87febf841aac38f608d527e48a905a9ab12cd458c549542ad7b20da6ac7d551c4d0c3be1c26b92e4b758266aa4e2a404ad1e26bd9abc967dd8f8d0028b8f4881a2062a8e7e312c552555c85ada043eb4c022a2896792a8718a53cacd5d7f259e12b71ccf2371e0d091e32f1089ece89143478a44d6f850c3146751797d6fbf43497aaa2bc549e934f9aba60a5923454aea05b9d61b426b1a07ea1aa338cad5261d62e5b428d410452776c9202e7f23d0a123e471f88dbb39d408c5a9c76e4d74b86857a5500314c73321f4a5cddf6c932f353e71924a980dd2642ae1b324640d734cc046488f1b1ae0810347023e6c7c7cd8f8b0f1f1a105161f59a650a8e189e2252fd5bd3a6629448d4e1c4c2ce5724a8839719096d9366b65369952d7506313c7b3509b7faa4773961cc080087cd8f870006be2a0e57c6ec4bbc4e8931a99384965e9a5f14b2fe5490d4c9c2b93782377fdea357d8963ccdaf7e575c67cc99ca186258e3b5a546d4c614f5c2e65a85189e3a8dd5c569ab744b5f428711aa1a5a28aee11ef8c8e24c78d31d498c4f9d784dd893a91c449b6b0f5534abd8c385d240e3e3268bb1e2572710289c3af458ba31694459b1f718aebb75c9ea9d1c7aae188c3862d93499031a7446586868625380bd468c4f9b7529faf8ed8e6c98c38a857b631a549ccd9fb220e2e1bf4d7c6982774fe410d451c4c9bc922b2267b339a88c3f8f9a9df8eb85f09351071ccd1a6922a259874e267775bd438c4c1f443a9da1295e5964824cd10e793d4863da9e458c9f50a350a81b88bbb53d27ea84188739afc1684bccca03447861a83386e2921d6b4dee4b8d91f363e6c64186a08e2309a2a9bcadb1f363410c7a071f52d0555e2085d0d401c630a755ac4841819e23f9c365fb685927719d9f8e1b0ed72a26db57d38c66f53324975a3becbc243a8c1877386d3b222a7e2f8c91e4ee3a7d1cd4658e53de9e17441cd574b123273df3c9ce2062506bf5eb3d7143c1cec6b4ca4a6cc3b6972879338edb9ba8d4b9212b7c3314e52f1f43599f425abc3419914832c1d3abd2a5e830e27e14caedc3e1bc38a3a87b3786bd08b61644ca73b1e35e4707e511ff933319e9e60088f7600e2c28b2c4abab17138c91943c9311356ccb25cd480c3299edc7bf16b6d4ed745efd0c01b4e7b417e28310657d9d00dc7d825bf65b11d1b593248a8d186739920674e56994da966c3d9520531a2bf6431df1ca1c61a4e32a635f1ee524376480da78de2f197b453d5c3349cf7d7434309a1b4f68e86b349a56634fa6c59fe673889b89c9411627389a7198e771dbf993c3334c694e1d4a929a8745e7a528d6438b98bb29a5149925cd36338ec8e7ed9b12fd9bd12c3799494048dad252649d46a84e1a044997c681525495aa90186d32855da6fcec438d52c116a7ce1f4eda3ac5f53f75a12106a78e1681a4ec928affd96d72e9c6284b630db9342e62cee410d2e9cd34c923b835022dbeb164ec24eda68596dd319522d9c4cd92913cc4a4c168e77f29bb85e2695fc2756a881855329393f94891c2996a4c6154e529b3629528486c9453a814935ac70780f8b27ea28b12e2985aca1f1e203a91714b0800d0a50008b33428d2a9cf63b934ecfdb53e27966478f2e6a50c18baa31859398a87b61ef3ce4b2a50435a470f212dd666acf4b7ccb8bec51230ac70c1727b2c4a4a65443d6beb8db51030a0733d90ccb4bcd30b6a0c613ce232e2d4dcc7b9199d670c231254156d2259d10521d6e72d468c231a88a313144454d177f0262a621a8813ef9d93a644d910b359670122a868df5863d78246ea186124e922e8bb1df555dba48e4b450230987d5984bbc8d710872dc305fa8818463deadb8ecae5d00bbc6116a18e1182e89b1c54bca2d6fd528c229837888af0931267c20358850630895c668168be154de3a2c56b69356d1637727c193e044225d70916a08e170bb71432e497e62f642d6724c2012c9a1230827778beb19ed54def0e0229da006104e9ae7f25436f503bc08b940ba517e70cc998265134648b9d27507357c701a95a25c09d96d3ea61e9c445eb8be49339d95491dd4e0c1295d0c1e2bfead27273b38dac5ca4b49997c555f07a793ef3efae25f831a39385e525eb62d423838a9fbdb5950b371467883a305712fbaeaa45ea86c70ded5985757253538d909aab29eec320dccfcd2301e66ff8e2e66703a3d295a9db89bc9a4323888571b7919a361deb311a91183e386bf923ee399a0452289c70d2e4e2472831a3038fcded6085319338afe05c7ee0cdaeaafe182c369ae87fbddf89b5a714ad9ff3b6d4b4caf3a2bceb561425890aa31e9ab38aea9d913c42cd7e6a48ad3c93e3a7ccf84b23a15274b9db1955412930aa3e25416c4c41032a8f4e1290ec2b7a489a347c96c21539c4c9a9c9eef97e254e32d7ec9448a63abdebeeb9f0a66f3284eca6334434f8c288ef9a42426419a84e2a4a5f96531aedba80c288e33262717c5d463b49f38a5916d171b535b12d513272dbf8de9d6c2b4edc4a9829249cfc287fb979c38c5553e17cd982d9d7013e60debd3b399d3c4717c43e456aecc0caec8c4b9c4b58d8d95d3274c98387d09bbce30fb120795248d216a83c7bdba35b8c212479393d50b5fd1344c2a7190f14b846ff79438c98d62294b842ad5f1244e3ad486cf20cfdb048d248eb3314a5fbd66cd8cc4e94b10da64f51212c7985d449dad16b2e6b980efe20b2d767c175df40e0d5cf188832c9354be6441a4fa89234ee95f372f4eac9a991a71f4d4932c9c98843349861107932649d75c739adf5dc4b104d3be71938a5f291ab26614710ce55b256f2e9974dab7596c0192e38a449ca4d296df124d10713ed920ffa2e2554ad287389e9aab74a326ac8a6d88538c39192a5725acbb853865c553b6a2c4cdb624c4b1944c92dcd20ce2246659c6f825efae7b82387957f2bf708dd9b905e2ac29873ad12bfe9e7401e234aa84cce0beb5494efe703c25f48553673a2693fc70d813fbe792767fc5b80fe737378bab70ea4e5c3e9caa3388995442c637953d9cdd4ee98ebc4b79747a3846ad727fddd24aaaccc3716f648c16bf9a4e878b87639d787289314dee7050a22de3c41cfb5d793b9c4c92b2dab68567c9741d8ed66226e42525f545a6c3e9c4a849da249b685266e7703c41f365ebd54aeccb07ae90c3b1fae572ee2dc9923671388a789d983c5fd3370887e3eb86535e42f485124757bce118fa6db915c36c68da0da70a27a68551711b8ea2ee84d593f4b4c91a369ce4d05cfa2572efe26b3898fc4dcbf1b9d153aae118d2534ce7e72c282d0d2779622c4d46c5b660095963c0156860cbf35b77dbbb64be9ce1a45a6666aaee42af36c3499f20325dfbca71a37bfc8e32045c518653da264992794ec8708adbd493baba26fb6338c91f429fa81f4a9bd46f7185180ed2e48a3954ef94a8ba06ae08c32957306164bf9866bd60380936327aabee5452d9155ff0f45c52b2f8852b93a217ceab9d9eae49c447f390b552ba90743777eb5ad6d787ac5d09b4ace00a2e9c8216ffdcd974b9cbecb8620b7785160e36fafba216f4d58442d6782c09aec8c279539be0aa7a9a2faec0c21557b0f4ea998a9690350658e0e3cc0c575861396152c67f3595151fe18a2a146a29bde88b49368b2d40fc0a2a1cc4681ecfbe9fd3d786ac1a11ae98c261cb5f4b1ee1997a43523866935133bd1553293b0a273dbf2950387c9cf0b3bf6dada27cc2492ea917fd6b73c2a9a4f4b1d5af0fadd6154d38263d27f3e9daa082129ec0154c386812bce449996393a94cb86209c74b29de7d4496a431af84838cd69663ec74848c93700c5e393f2ec8bc3931249caa4d928e58a8e4efe5035120108602614020108441b2dd6e0073130000000c18170783d1804851a6791400044d462a4a30301c2e24160c45e2b040180c8641c1602810080482614020104423a91487d9dc003ec3fb7412b092a9f6186a3fbb0c87aeed6257cdc7b04a8cc9a978ce574204e21ae433572bd6f3cb0db0854b9653185cb94ee6c1f4f553600488d187e816d07aceca575205f4b7d7e37b4b8978ef7406f580b8d5f00c55bb87db6edf43a996ef550bd7ab7d27d7cd2d46d25899f65953bb45ece57f36ba7c306eb3318435a03739fb90348088241a848b2c4a000187d3d8e640cff75009cc14b3071b4d6296046087c63e504d70dd840a5b541e3db38fed75df8e1f4611d979c76735264cf4e93cc97f1b187b55b1ed20592160a94f40e194eaa4ff6648564b62b3224c4d680982b92f86d503c9b4b830db960f190687700e5ae9b3206341010422bb2ca01a5a9bf21d76c4106946b5774158a4c68abe1f31ce5428edca95138b18097b9d293df683b53332a525a4bfca45faff81e6c2eecca3f3f7a4b2dbebcc96c7e4aa09c261ad614789b5919c1473a90a07613720b0faa2141c385571c4574765e49d667bd67194da8426518d2aa64d8f681535adec14957e9e526d42a08f6715e461ea8b4f2994295b27b68c40e539e2df385ad760cca4ac012e1aa5293230934eace0fe2e4e0dba4d6d7a18f5d19ad8d9178eda12fef197b412d34b69a4082e0cb3f5c7022a2b24833cd05c5f246d99b77803e9a0d2e99aeb60bd59df0044ddd47abd017fdffaaebcc3d928e6804ca1c505c89398fdaa2c9e5aa6d8fdd19c001502f030308f05b795b5d3aaaec55a95af41a5caf9b56801e7f8ab7472b69f816945e17555be3be13db80a07a3c9b34da1eaac284e7eee215891b045ac76f18009c3dc7e324fb15e2ebe9c4d857fd2443f9868d3540d69ee5a48b33980e254486b18c30ba682166b32da47b986863a3c961429584a199ba2a1c00bfc60534a4d2a7ae0f38429c9bf12e25d2c32c73bb41998879e649a3e4df8024e3299971e2028dd2c7aba9594d18fd2b40d50a5c7448ab8b2db58fa98e6646ad64d59bb293664e638cc8b9040b2791a50429a02400f28b8a1dc87a798f91935078939153722397031c58fd715f4c935f93355b80b0487ee759f2b8c79d8ac93baa942975378efc4eeb6292aaa6babc54878c630736a79c06caff3d7cd31ae1d557d7af7ecabf337db6c0e74374278859476fa85603a6999f303ffacb20bb4a9d1e98dcb42ccad94297d2c225c747c66d0053168da7badbe68c20fe1b82dd4e117162bf7f1598e045513128d8d78d2c3562b4b1c8755266e1cd865b3246be8912c5e83acd9097a08200fca3ca7b59789089e570f2488656652bc6000c0a33801aac5b783647b8778b95cea5806b55cf04c94cf218c9531fa354aa132c1600274f291a8c4371d2dbb9caf782cbfc97cdb44ec9a25b15466e60221cde30b213caf335d4dca8d653c56c4636b91cbeb15f7cb3dc666e00cc26c7dae2e417194a16f9dedf41bad49aba2931942a2361bb5ad8377492a36c1e3edf8394f6f2e2f2e87890d61c126cd2374030023ee4928839ac602c7044e4631ab4aad77fa2c4685b8241498168c5fda55c1fde8dc8b93167634888c52bb4a74688c23361329b160ffd7f8a42ce5af758105afe323e05d1312a15839fa0c3958753849e40d93d87d2672d61bac5d0266de7ea8e48b8d7d2925ae660cea51410c4f974354fdf250d9e2c98702bd337c4a2d8909a55e83423de73cf462f796503aaad1fad3b7d8df5f38fa538bdce6eb0bb874e00a641a17786a891cbbabda78ff12a21a5bc80b84b4933d35425c3a484b98f81741de94429809b250120bd77c9a037302afb442b72c486340efc0aaa90bf5c6b7081773040ee6fcca282d048edd9c1507f06fee1989a2f5f94060ef91498493084376f93835d1436fcd347307736aa1ac31ee067be3d38d1dfd458c3efb424eda9496648028e91d167c120ec9f628b7a3ec3b2c1222ebb2e05190e180e96aa17e7cfe41d3c7de10e24025bbe3d9aed2e96b23521b97e5965f1e955378c851bf4c33ec66ea125e5681ca1168cbd2190ae2d6c6115e7fbcd143c9ec6d416b9f91ce787ca223c07d0d07a5993d85ebb477de4044351a6d3cd394829cf6cef0359ea85097425b4c2d66577f270f6313f16beb0ee960e947bf37e45fc1e3d784cdbca535241b4015c0122669173f6c243fa7ab7ae5a1ba49b633c36c4e11016633a3c1924908cf1a596de398f6f4cebbbf7da05cca43260ef82d6703c445ceeb7ca733d52ed1d3c8e18fba5e2042649231f473a7e26c0b17b880640c120ef7a864522e18ac3e527e9b1989e5934e31a832da70da1b25215735219a659f1cb8ffb903003f4aed26ac9588c0bcbd7605fe8572c21a7a2978f9951d85429a81af8bad0947779fcc7a8004e99535f47691e002a8ab69f7684b4c68efe7881a7265308b4ca8cd038d234dd8e971012230f56b90a06fa3453fa267705e590e31bfa003e8045abd989ccb38dc5910bef008f8e5ca0b94ef64f1b961b2345d062c95f97e99e4bba87c56fba6a18c0cc0704c0018099f9f7122db5ec23c909739288777606ebbc01d583cbcdd267ca06cfd3af4ecbe22fb2ea8b78f61fa3134caca360f99ea86a1022c545c93b232710379e232e8471c4eaf9676952c67690933ac98e67535fc5631f82f3839e862b89b5c6201f0451c625a53eb712a535422a2de1047617d045ceeaffbcd43deb752c14db3989ae65136152f8d80b1d4c0b6625d43af2cef5989d8182300ed8c6183a372801ffa4cdc13404f55a415ea5b23207efadea68246557ffa362c7c863afff7a822844904e23774a6919e034d2e96fe8fd3515c603b09c3c6b12afd9e18a8d977c1e8d9dab252206cc88d24bc63c6d7924de89e6c87a6234bfea33551ead6627e69781d0d5caed8b0c067a29a3368d7b468361bc76433aecfd0cb5738c3a87a34241d1a3880d16c70e03362d06f4a2f3e364145cb041cb5ba207dc25c69524b996eb058d127185b0959abdbecbb681d503fcf0bd1decc24e8918243e17c0233d4bd872a963a0f69f323b264d930d08637fcfada70ba51be5a9030c63b31295f4097cb121683e20c5a0134bfc130c88f46228d82ed024fdce45b0444d1a2c46ae31a034dc39817eb9e74ebce7c4d7aacf72d514b740f42c09ac84e1f102ae44519871df8dca5a7c94953b4176f9184f6b9dcca583cb39e3efe562df94c1bd84329031349c813f5b13aba2956950cd3945dbfb3de50414594f128a79097a956f865e51acdaa1ea50cb638d2f8ca4d85837e0e776a551494341457291d751daab09441610c39704ea20ced35e3a1a06fbc2d75a390635fc2980bda955a4d7d21d04aade35f5fe814b20e70184c9ebd6ab8670ceee22532519dd8b7df0550dc42e4a734477447511cd9946ba2fc4957a08bae75da2acd5c9c264a87ac43db20091ddc26b5e36c634f3a2100d1c1abc034e19167a65956c8719be44381818836f1b6eefb4952bc10cf188c823ec94c7340d12021cfacfee9ee89bf489384f648a85ac1712d8b864aa359a236891aaa0477d00ac80d2e06c306701b785ad00c40d50e8605694eb23882f32dfe3498603ba60a73101386c113268174075338255fcd769c28f3887a397b6c38b6007b1a02b6ddf104e4994382bd4240ccc44c212b9ee914692a77efcce01726b6f3d8a23acc0f90a286a39ecdb07ba260fbf5365871330fcef5d9cce01386beb978bc8b84d00a0ad0f57bd2868a24064f94605634ee137993c7410aa24224641c9650038e4742f4d5c2351a8309175528e6fa06158b84c977ed0a1f616428efad7b6be3aa080b17c3583f6eec3ac23843120481650488fc24bedd225cb2942e830493014d64e33e3c1cf5814c40e2da1ee1ca7ee0777cd9cd6475615c4225d8cee7ab436c62a068b76f097104eae0bbb9d5c35c090f079ae15198f6322693f4119fc217ae1ae9aaf64738d90eba0d37e94f3c38eeaaa7195de38ae0ae9b8287aa8e03422b3f8caa8592c97e0baca52ced5a779fe513431ff1ac7f538d18a53f92f5c116b2aa76e543f1a28b29ca3b5e0a881694d2c5f2813e2801c73ea942d528eaf3cc2c9103826af2cf438b9c1b7c71ef4e649e00e3b6ee8b40fdc326b0d4d0ee1087563cf7bc2255758f7a992a72d3ca50ed6bd585b14d7f1b67c10d6d9ce1d34376c99f97ca495074a3b933dbdb3dd482a6f40a13d70cc26052ec8f224e54889636a2a23e43481163028521c50847590287364bb285e94151d1f20d22a44d9ad1f095ebf1f0bb1ec1a8b379e2d3be3975b27342f2bf5f15ab40cdd037a8d79e3ad778bf0297adf460ff560d29fe86e11d2ee16046f0c153f1a690688101e3b175c5e82701a12be8a1c1c1198b5ddb8817041cbd02f1cd73c0ad3983815520b1497bb838c4c5675d69b55de201332aad4abf8a3878e8206163ec043d3089db8edb64d166b6d13195bb5a54af94d4b6ea3cac59d51f00ff640273765f45e03c048fed06555a61ad8a0a90d8018133b32c91447603372d9a104cf65ae48a4601578fbbd7c6b04da72ca924605d9540090b8c83b2b1dd59f33dfef1145f6da186645bfdc1c19d5f9cb444fe6406ea048176a693eaa1260b9df6d2993d255d1c3cc5797bac742196fd62e264f1628e09fd4ae1850631a1ae8de9bc07537bc1fbb10b36f01b19dcc2079f900a20273e3a203a6f284fcd3e8dc2c3a0d969f0eb799702cf243dbcb1debc9ee4bf4b051f7178ed7ba4f72a78e888ca731760d9fec509aee3533878a0b67fff0fc89aa334fe70b391ce4d3964b0be07ef4ab46e94577a51603b876decd7a08c23ae25acfdf41c5669b1a6e0b2843e1522ee628b24c4edd42fa4feef22bfa180436df04052434088a6a2e5c80530304639f1836800d73da0b40891ff6ec75aca8aafa557f416cbdadb9cd988e359a85287960c3805105361dbab59154cbe150254ba845052181a85028c04ed9bdb1846362b9e4f7f68c14c1f8fc5139cd2e46fc919dc4e16428c66ebe02c1d38349dc69d18fad30cbb80c8f4b3b3b589248056bb140d763046adcf583de6838306331291747a8da5a061342281101435ded5317049df4263126e432781120720b418ed030364575f583230d76d8633a2fb98e0bcab868b7ffb98c80636fc262bd711149b2b20eee5f8f547c358b39b84a20a4e76ac49aeb5e0b3e91880efc9b3fc6f240d38185f530864d1a216de4883dea8516b6365ef5e09ead0a12a089b55cee0d01c030304f648f89ed33a738aaf323a9ea12b93399b83a4a632315cd60152d6683dbe13d245876b72ecd10352d12caef312dcb52c093a808ca5fb607b3353e214cb32e60fd20ac277e43a61598981ba2d3418b2fbf97d7ed1eaa53de3a08ac100436dde884811e3d5d04149664cd8b80e0418dcff9a318961066054ecae643feafc355001aebd2e2eb9e96b3337fa9ae38162167831adc3549738d83aec60487cf5e38db0a2e88aae97f3ff9bc2d4f3809a4ccd26b46b28e91a0eb54da11b67bdad8f5c4bebe3e8ad7e6cb96405ee4b0bd2843e35ea8831a7d8c4b20655170342df7d8dfb269826256d1ca0e3193bf9570cc98c06053ba630a98a87835770c834046498bb9cc2f8daf302a17667d9de656cf40eb7207ca30b9e9e39742e8a09a35d1da81127b50e647944332461748911e722b7232a7b6d9286b3aada0d84922124263385a8bd9a01962db3b965073519fbab8b50433c8c2bb7ca50d8f3c0b6912038084197d8759cfdf2e46c2c2d3962715d7dc3b2661798079c86d4d246876dce5248f5da02b58c4006704cf5ee799ac00a29be0c81f1a2fb4cd6902e1c21a15599f7d6e968966ef36a301c963a5aced93b5711e6949cc9bf5c7e74b58dfc9a432edcfad6e89336faaa8ab2458e47c46b947edfc48b3677a7e4652fbe37a8a2d0311c8c1297b7ab7d28c5c59ed1ac5bc93991464e3d903b228c129b73db1e6c78293075240cba4bd8047037260792c089448ca11e4c1eb8a40aa57bce35063bebeb981b3032285d4f84bddbaf4830404de671002af22c97f5323ab9989a7247a1416a24b02cbd5a58b529e0673ea762d072b2e00e1dc80b75bd93196698b2cdb53bbc638b90a20a1f392b18b55744044c41d1290829aa7fcc8280a3158aa7c8338b1026a40bca206ca07ad4588d15e29d6042e0c93d23759d59646d03a391505f2f2cd703f13ec3df3885bfb8b7cdaf6be21cb5bc30e48c0f214c8c06e2250890a30c001543bec215aa4a9f8c03357746e6a94fba9a6a7e6793febbc9d9744637df027a9dc3a0fa95ef1c801718dcba1d2c216419fc5f8bbf1e73d16e50b31079bcd3e5918712668d122859ff79ef6f836220362f3af217ba61de265fed1d3b10ec6f76e08170d49ffd77fdeef2697b93aa419f68b3fbd380ca332390a370c5217f59f880a5db0cf92d3dcd1c03f44759caa366089c33b89533d884452e5cdd090c3745398e61aac86d7138f3536cc03dca10131cecf9ba635078e2aa6fccf22ec16489ef2370073958e80298d3248264fc1c918c4b6aef1ff21b297c18e2d1964dee15cee81c8fe2a3a8f2d4bc147c005f48dd40de02f8dfe0f8b81d5c9d65cf02be04a251aca4c01781bfb071553ba73f1b3359169558bc4a4d0b39e9ed1eaf491a138a55ed91e5bb0c0ff475e5b01502719a0803d0a2124232355533d2c72112af4599b93a85c0af7de4caad214710badae3e5223a9ab4b70f0fb625a0c551a3269d9c95372db76fdb54f5f3b66e5c0e607c457e3ed9da5c15d8c7de7d36919305d1f3f8bbf87a3cf89aaa5c0e6f9d6ea22f0483e82043dc5b7e93f9e907404df1cb3b5d0041cea29fa8005273294fe7ef5093d10e37134e2a4a991de38a9b3e629223e1a6589fa0cb99b2433d9cdee8234aa4fa52d7342ad7d47ced8d6fd2b01606b907a4e9f017c8fb48daeae715673629bfc892e7429d7e4553bd3b0c25554cb72f82538d67aa13b4bc38a62857b2af0c4c6f09e541c08e6c92eea8d5b1a5d0a4751f244c7bb7e89dc3ea4500e2252535d57e1d78d11d486fe3505c31ff865f6c770e016de38d4664c0fed5c9f3e75a69aefe29aeb3fe3ecb012fb4920ca9b2647cd5b064941b0005550ceb69d12cf57300df1232a499beb2b770da64b48d0af5adde11e7614228d90b9b09f36c7a0498cd77bfb61f80d4b2b81bcb22baa39ce2b4d61449a12e0964b944fb0f7eb626fd64457fb71b187e075f6f38c82b3b17e93da751351a8c30c3a9ffc5df860ab8d70887ae918ebc3ac4a4f1dc72345aa5185ac018ff539cf5374d25118a7fb3c546d29606932d9056b129077752b8d11fb13dbb86c2ce4bfaef64a434efd075a5bf16ae53a7ab370b3908bd65ffec30b52cc754a32bd06d3f552f556e0d913fbf9d04c6614ca36b9b31989d3d83d44f6313ef0924c988af20af9200f2c5789cfa1fc101be5b442b64230ba43d800c9a53011c2123d7de8b4caf2a07af0933a3d76a850ee33876b737f528dcf8d65bcb13e00ad7582b5d3201c1bb58e09b9938dd6202b512fc2ca19e7f18a12bdd1dc4b279b55defbe4e566fcd51ac5633c88dc2fa4763a2d646608c40a3200c3aab834464fed171901a7d6e1912bf356d06ddbc910036949cdd2de88b7d0577552709815ee0d6127ca9f7b541702fdfecbde65edb9c54553ae4c9678376c729583b225ef8764f30947c460e5cb1861392f0b0e0dae88de5a12c3c6e889272f82622fe1715f660f97a1c30a59bee4f2a5c48515fbd047412eac8e75e68855cb66f8774a82ce6e737b47025413d4e1bf6210c2066023138a6cbde4e05f261506876fc721724abec12b6ede71bc1fc87e9010f28f0f00e19ecc39cdd208210d3627c3ce90382d172faf1fd95ff6af1969211440a758a25ae354e7de1489ff97cc4abf2a632337c59afb932f07739bbc9343ba28937f02ae7d7691771bf12ef0764daee71f8474ea5cdbcce26403f3b80e7c68507de2691ea1e70e90db9be70b404ac9e804cb86d2241b991dd05c94973596f2ab2b6c40fc18ab05a8ab28282097745c269f55f8fb0ea58078b4e99bef80fe586acf80298fe17a133673d6094ba0cfe6a1872b6d3b7a652ee6876a4aead0da3804461095f8ea30a241a0d98329f0e3556ab24915e91547e4e6601e061add5bd18e33abde97edbe808800a88dd06727d847915e41745f64c3f7dea337ad759bd6fb7e84807855e3fc967cdd34742f2f7437afb04bf3bd460028133b7f06a33a09425e960ad56643d1dd8269be2fc9696b1c4d58d8e44d4d2293ab00d8a07458a72b7f9944889c95435291d9067e46675a51e5fcbaa83faadaacfb359b29562fa0d70e3c177efd136f6afcae0a6add7784bd50077295df9711b486335cc8cb4200d97f2804f8c301a598aa4384bb5571118dc6d29b6917c2575a3ab82aae855fbb355b8658c7889ba732f2f71d6c17ef96d9015528991b6c839162013e9efb71f58517e2e3597f478bc3669e54d54354e7535bb5d69b29aa9e2814bf7cb66ac5066b889d37a7d6b275920cfb1499a549d96f35b74b4a2c1630dfb7bf0a6401c368282bc2a94de805b1d6543c69a0b286d035475f66bf3abea250994b50ce3a5ee7c703e664b1aaedf2a5f3bfd618f4a1428621ade24c0263b449321f4d693b1171f6755b4812fb668d0344cb8ead8e4665fc577304640cc70401a989d4a5bcf48d2baf93b60c4770f00ebec65ab5e2b0116b47a660d08a14fe034f32fc83d4878fe8441a0676dc102f7842e84404704f539200c1104dd1c22c151630566874248c20ae531b2e9bf3c6f6a1da5ed7c251b9a6b44bf2b423b11825e129b635b5c9a3558b1d9dfb27a1b6b5f3df803e7e05093be8d813ceadd1e130bf58dcbfb4c771def87bbd1952fad6ba07f86dc0cbba7a9c4417acf9f9d964c99e8d26f71396837a6d6bd1ef581724594407bd065cd665db5386467d7cc251e4658b711b6fea04dd693c432601371e31d20d8b84164834dc6564ca20b92bd836ccaa16b79061b87cbd783f00abd12e2db7b066385f67845b5186cfdf3f31128186fbf1746de4b53a0719525796d2724b27433dcc12eb67b3a38b1e6fef2fd22a3a43b5854114ae0fc284c05a585b4a38965991faafe1a0892b69a6c5003ed4cea5dc4187f7c4f9cdedc227d872ecd8815d639c0e5dd4de44e71187094e82e20e6f8b3303d838adb1b7e24f3ed0d0350b2c492045f571c0f6be4d815e9ed24ad0b09d88a5664a8692c3644a1ad88cbaddbb4e692deee45b821deb34263c7abd6c5b1aa23dde86de192e36e3650a3447148ff47c3364e86852065db2de5ce3879fe6a2f67939f5916c603288b0897152191a240760f0cdf824cab5600f6d6295bb4486b2388959038addfee6fb1876283d80a95d84fefb9f0af37565703ef5a3a60bad7f0fe13d577349a3263d837809443ed0b413bfabaf71c8b970b57f00541b12e1a406511455ad418b4c03324fe2ba49fb6caa720e145aa76225afe7150c921bc72e1e5a86a238952154f1a00308b8e1c0e4bfbde3407f3728ec2dc3b8c8a44d493b0971eb10838f578cbf18ecd7b39b22ad15d62e9c51156237e3bed00bf989fb4e49349f500c02dcee1b5d2c76f3ec93788d8d7fd8947487733a2ddeb88d2732d576e28dd2065c4b564ae797199a2a513cfad581a42d9098b13eefb47905b817c1094e1be736eea0f9496fa944b265a6b148b1ff5fe2865af15a1818af52213f607be52a44f1233b06c82b8240c045a592b1a646b98e1687ee54803f74d228a3ece71d9e47800234591053a13807ab7f8b00918832412a9493ddec6f427f9c132e421861069483667a9c613b4bfa71d1940fdba07f410aebc2838533a29e06c387124de3c3623fb8fa050eadd8afdeb46da2f67e0060f8adf1f64c4aae1cf192a384ad4989171aa75b3cfea032d66e5505f66683a30df4a495dc25f9ac6cc629d4c376df8543125dca6903c788a3ee3e483f641a5c6ff4102617cbe7d8301db709c9c4e0f3312c0cb8e8ab549ae10c084168957e5f8f479d4432fb8f33a5e39f47947761640900e934769cc4e55ae9c1720ef840c31cf59b45c3639f6302333994b6a904af8a36f5c3db398a8f3b988f69d2cf69abfccbeac135c511df4320c40b4bad5059830336380c28c1249a8e62fccd35fbd069e6fdb44a6840f57a01355ee49274e4a4caab04595a68981d8fac514dfcd300cb82c241ac4aeb0b1f40bab71eb853b102ee93079f494921d6358176237d6b25d6e50b63d17ee2137a9c35817ae0b6ea1be1a19aa9d4d106019d38603369011da8e63f59d3f41ab3a5cbbf0a0ed1c52f716096fcebbfe254eebe8a45a62682652dcd09abee87c1d7e557ee904b3d1cf734269459ba7e95cf3c4c138d20152f499e542f33bd1fd3ea7566d0740ad27e950c5869dfcb1022117a3691ed8c703a55d901b7666b0437a3904e48dbad0ca4f8c9b20314bd7018d2629f7278b594cc3a249d9b845027c1d232afd569195e10284b445d23f06d5e2b4a883500d0fa834cbc7a9e083bc2851b2a2e7e4be824a84304c3de447088f902ccf61588bc32a7b58009189610eb19ac02960b3815444ae50e76f79b1446ec9ead218899e0415494c1b18488a3acdba9308f07b73d0d20329166937c9f43a0e59a47cd65959f7dd52a0d70623df702e304d451363c623b3cb9ef2e0429b289367518680618232feabc4a0c2cca993a54ec05b8e09340006dc7665cb411dfac62def74eb6ec1406f94f85452c8d9705447d08d7f42441f2463083c199e4ae1dacb6c1fa7f66e19685ab927118d9652588d83539c7413832f8c2dcd5a2d6ccb1d043cd2c0e9888fd115f715b8a2c3b9a2dddfaff2e811166ed2d968038f545a49420adc9b308948a1c8b5ee85361689b585fadbd02554fae05be2d53318ca2e9f6b51603b7f1e5d82763c1c8d52fdd6d5610d114f332dec724ad2ba6b4cbad7486a82f72c414252a06f8994d688f9a4df1e039b08ee21f76b7d9b9199c4781e99f54992c9e8a22cb95fe37a3c29c28424c0a318277a7099238700f96bb4c6739ee58345141872def842cf109cdb1475e280aebe386d4b851fa6144b943adefb97f8fd0ae6825a7ef6994c267a6299e65c2c5cb7b5c591843932874d41be0c7a5bda2a7f056f5f34981d6ba135d50f6b3f0d50066a8b5db1c6ac7b6cbc457daba71239b36b37caf54a9252e9758479b7d3b768884c8ee3e36fa51e1ca207bf3d3c049a4de6fe6f03c66c63b313d5cd6354a56a5948be80b87e4dc74a75f3c301930dfc157e67bf4e9486de779ac2455477652210604e5552af7c3978a5956a4cf3e83db63182e7d9da083ccf6b881f2b19f1864888dd67f530232140a3ff48e1b7474d1399a02c2d34790f736ec51c076034823d775e230bcf619a83d6eaa2886c41d0d7bbc3b4799db74ebdf616295e51bf6478e3ba7b741423503cd0aa1bc46b2f6d5e34b4a99078fc51c5681a61dc4bfb6852d0fc932a017f323c60dc97512b8c5c242a0f0fec0555de4e1b927d4896097e69801784f94380e6686f0091ec0b7fbd3282c4f662ba6b686b42d7966a8be56dddba37a02c0581d8c726602a49aa91bd7e6f32f033a38f57237beef330beb4baa7ab973dfd006279966c52ab4038f4b2363376302460e39fd432ff5c07fa5924b2e6f5c9bbc9b0a5418de3faee066c3fd0a0a5cfa306aec6ce6315a0f5e3d6453f3e06239a3401aa8788ce5c0c5181aa84e386c131e28f23db4b93e4c2f41b5e2f3a7ac29338c84006cf798c2afedc8f7322f6b47d5d4c2d92aa7abc8851d7b5018be7f028a2a48c975605d858974096ffcb55924adb751efc50bb402e00bcf653a20aeb44dfaebd0fd869680fda86835715503ff4cecd228517e6c03b6d36fe20d5e24173d768811a2bab783af9b859919df0509217e8adee57674c0e4dc7ec3b571381862d2df9101550756eb8a64250b2b4baaa2e8a97eaaabeac2f8bcbe265f1f277d8d723ff2e922309e0a35c4468334c1194ac5879d00405a7c43f68354b8d8551d7fb4fa51d1cabd70d0360b15fe8f4c41289b8a311aa7fe25568007d138862b7b5c888f8d40e525d0e155237ed1f06a685ca58a35c6900809f8bf83007f8fc933abafe271b3c48710dd252b5f33289181542e7d3aa981a3115b288d61696be7156557d1ba36b669c0634410459a8402c02f280ce7d926ae44c91dd3e7881b65ae00b74a78200e3f41824cda5f5402c1bec20a58c1766ccdedf76aa3737fd023572901c2b363ad1401a55a497f06640424cdf98f2bf4ab06a0dd4cd0094f07f98d6105abc1ee4ed3bc31710fb90de026ed747377ad56013ba76ea3d60031f81ef787da1dd4cf3aec0bef6879491effde84a97fb6f548eddab19a0674849ef0a5e3a06aa2b46fb0f8a879eb86abfc860b44d21a9498e6551ebb98e968ca17f9e4f1c03f768fa1fa15d4b42a58269c55a12c00a404c6c96446dc7d19c6e49484f49caf1760cdadfcc9e8f50b601a376150490f993a25c40130ffe4385febc07ff7ab1abbf181728b733547b12eab806f23e821dfc55c4614489812a5f31ab1d31d16a0e23e3dd5f251903d2e1c691299ef182b1b2e98a0199b14ae3659d1c725003943707b5b78a133918b2177d9258c71f13bf9c959d04b1d056580c688157ce8c9c49516d532c4554c55b676bc74258b42d96058ae0a1f325e75248db110be248459834af7b91692ed5d0246f5726dc695fd8629f5c72a058f850b2b8432731b5ed5ea4a056f2b6e573476e118b1d72cd815481df0620f3561bfbb836cf8f4aa60873c140f3d815d46850274c8cbec3ce9edee20133326c861b5d7dccfeb906132be98599a4cbb43fcd475172cc33096f629908945626142bc3266ea9bb4b94d89ebc4cc469d76b1cdc3d09a9525006b4d2ae2d4c36e49f9f971a356c407c5add61f56e910eb2855b825609db18fc6914e69c1ba84b039cdd3ae08757387a5744cdb0f6061a0e2c64acdf14cb56694b139b7962d8d7772944c9475f11cbc9fa0230593655e5354f7d3d8087669bab8c2ac0562d13c36e6919dd998f99352b5c09605e2baa66a460daa87e02e0da999b97951bf634cd32e8a2af7a259b64513473291d5d1a381949ff62cdc427fc2266bd589a84cd969ec3c85a9c2e7c2e245a2622f1d73a957868c757cda91607af1435d3de4945eb65e3307d632cac55574af02e9e473a42e55d43edc64de2500d546828039800fdc4b0ecb18f1ab44f1312841c52092d29352fa4f8b22147a949d3e46b0f9d895b65c0e070c7883022c0d049fc08743fe49a8fa088c0a91fe21fa146eda983ca2d268c4586c02842b09b98edca879fe69c739e01a6ecd78b70f339f7d096bde9d3f136fb50e835c015d40eb60a823e6af522b8a67d0e6909b0e17aeb46a9c83c581c26c06ed3a7b1260eb96a2b56c7899817a02329a8714cf7ad6c97bdad37705f04495f76bbff9587395c72f4a7198e351e8a349cb31dbb7939ce5558c9b6e035157b65e243eb0c53711817a5840bae31c470caa98871be255d6b28696b2705eb3e4ec151afb2e780566fdb9143de7537e94ab6ee25fc2f5a8e6323e01452345546a2a3a189d01fd16b2823944226a5263266b65cd412dd1415faf4aeca0025fa69f6d7335486520e21ae90a5cc75f89bc4bd6cffd0dc6234d420682c558c10133ecb0ddc4f348eef53a9c24cc6ee528d1ec20eea4835a8e40edd9760eb08923cd9b6f8518f8a010119881650480378e4e2ce9ccb35eadd53da0328dd7d1d0ff04fe47809c278323e0abe531e3f15d2e22b7a008aa42f204fd1fa783bdc47b1b37bf8676619651e6991bf04c8b2ad3d6ab01d154b2d9bec139dc5d768155eeb0deb77d7157f43e9f3857718ab95ad0f5bfbbc86d1cfe4f20f4fe342d1259e3f737b4a6e310af374744d409849ee43547102f5882adef4e3fda87ed1eff75b1da123df112584823ce05092b981df3e66399a8463a267b810622613b77edd2438bac1f9a149381339430a614cfc0c174598c83324517192c3e19ab68484225bcca364721bfffd40174298c8331211169672888ba1b8e8e14d05795368e65ca2e042d1de904a18b1fca95ded02f1f5fe292aa3a570791e2c32934d43b58218d937a7faea776168e7281420b1f8284851bdace87a4515755159038442c605d9346256f272c7edf27686b0f6d480e2f838d9ba653acd58c00f22f6ca79442297b3fb5683c62131ddef299c742e1c7f67a18afe6638ccfc12ae9b422925e8c595c46213cdd5d374008482a773febeaf1f7b0b62129feb95f15051237d25c18a7826090c746cd35ba1973c046ac54f1ddc08081a0485026e0644840a3640b0a6d0013c0c3c0c3c0c3c0c3c8cdfda7db3336f61a724a58c0b24d76070534a29c994220d7d0aa86f02e01bc412a2f60eb00f07028c0a7d0a690a337871ec324d393b745fde4a9d19bb281bb53374a19b4a62a9da8a5d497cb9f047bebd7b63597bad4498810b63c36830e31627bdb4e9a654a66bbea88ac20c5be0e127a94bf1447d6fa5c230a316c7b0f8cd13517aea9b418b836fd6c78993afd7d5591c648e29392a4a477494c5514f4b8e0a577bfa2c23a58498118b630e534955bca4c92f0e8b531274e479a88db8a84d8d54b1571c7cc46ec5244dc60b6a2966b8e258a64fd4a275a6152731fdeb499d22c7c5c28919ac3865daaa3cda36258919ab385c86134ea326e5d081030738c2c0d1430c10981a11c50c559c24cdd513dbc4fe0a6aadc38c549c6a6f4d5ef8bd10a7e56183f6408d2fccea06bfe36ff0e80c18009830031587b5f015df24fa8937e31487abb2de0d7ef289c7e63e31c31497f8212747e62cc5f153ddcaea4e4871907b27d40431fdcbfe8b1a250435bea8514050e38b1ae50335bea8513c50e38b1aa50335bea851385023041da8b18719a348ac1825c98e116f6889e2d8227f26251d2636eb8919a138c6b99c9ca64dba384d192b6680e29457f595fda494ed960dddd1438cc331e3132761b3d6ce7fc826317f43cb13270db641ab378e8a199d38bc6c12159f870e318e14333871ac13ffa469ebec67ab7956a398b18983c993f58bb144138793bda455749bc9e8337192259b9dfa212fa91f13e7d125846851314efee812e74a72854d19644b1cfd7533ae649a94c6adc449ce5f10165c84f8302971ce2466a2a89fcdfa388993741e264bacb5542727896312c7a225e92fc83d5924b624b96716293e1ab761c3868dad58cc80c4491825cc485b8fd194626eb0a3478ee3397070a0c61735bea85189198f38b78f49d134252bc7880c74e8c8c00d7ae0483ac0f813d8b021031d3a6e4c6286234e42a306cda5f3c4144230c0e82f2e70a3070e14086246234eca7c5330952d3197ce88b3d9b5885ff64a736a15662ce2249ba03f5c572ceee8a830431127217a4f9f70a329fb7663989188b326e99e2909d24a8929441c4fcc4d428931fd06257588830adea52c9399961719e2f4d65d2294de96a8b51087b538da92242b2961b92fcc20c449a5a4f2bb24f15b575fc18c419c44f1935a9286fb8b12411c94e0efe15e7ff36edfd0e21c330271b88dada5f259803846bdb74ef98e912a1833fe70f6cc2e2f49ee1bdac66a94000308031c3c7830c30f274b3ab48da5888ed94687197d38580e19b59290afd1d286197c389acc0a6a2f5e1ef5d31e0ef7a3a4540d62a562736298a187c3e9b26b53928a9e782283a4230fa714f745833e29ed698f78386b8fb4a0b1b95394923b1cafe4ced42f889bd04c61861dce3322e4d524f1b63dadc3d177d48495184d63d8e870d2de1bd2ae848d0f2130cc98c3e1bfe4752df3ecde5e0e2715d5923c5e6ebf3ac761061c0efe19cdeb845059546bba30e30da7a427e5c5f6bf1d3d71c3419a526d6ec2c915f76fc3d965edcca43bcf0a3f1b8e327a6336d92465aa4b6b3876094acce2755a44490d27abfe4c39e34d503b0de73453a5479abd6714a1e17c1963456ab0909642673828296354dc950561a1196638af8bce53b1da321c478805af177923d36438c86776c969e518cea2b68433c954c9b739319ce2ae5f54e553327718cac6086680e11463ef58b65e59f3fc0be7b8dc539f962769d3dc90c20c2f9ca4ef982c59c92e9cea425f2e794a69cd93524eba929566f6162a9972e1c4a0195a38b98df65d2ef992b0d12c1c2b85b69f8a120ba7131572d4f2573849928dc65c92a8262f6885b368ab7c4938495cb35538084d25851d7fb1923b2a1c3f74478f5f05f592291c3677689acbba98a4a570922bff97f4c449cab2281c434cea4a61bb2efa058593dc972c8bff8493c839499e0ecb186238e11893aecb497339f4f5269cef4e8d2e71841e75424c38e788cc0b66f1124e52d2f790717da356f884194a38bc86eff9122c696a9f84b3bea92fa565f52936128e5561646693f0a362fa080737653a93d0fe32e235c2f1f404b166e116e164c2a4504d992134a744386ace34e6a5cc219cad6c35bc4d0adb240ae12054dcc8c9de8270f60f19ad0d15108ec92a59e99ccac80d76f428a57885193f30e991a5a33126cdf0c1b14cc61833e928d554f7c24d256d54ef7871aef8aa5db258264910efc29246ed44c68d21cbd0c5f1b663c645489b3fa9aa0703311d64e4e29cb2ea62525f4c53215c9c6467ba247d94244fc4b738de96bf5e92c44c62165b1c4b757b6d0c268e6ab4c71861d4e2a0a47d31a52f6615132d4e6fdac4fca39f057f99d74b94cc657112aa2ef4fe4efe933b16875953e6724a0a9af126830c589c82185dff57f2ac2c8401e3408d2f6a14bf2241bd955435bb62b5b1ae93b2aec5e55674a2376f56cfd89865858c55b4a5f2081552c597e48efb6ecc522acad5b396f534d6a91315e5864c7677a659f23bc56d16e761965252b3a45763091953bb2f4687516a878e1ecda638ecaa8e69d11b31da03d90119a538dc7899cc1c2a4eed27c54972514a5a3c154cdaf0288e362a4c12830c27b251519c4baa5c33b52dd12e59ca3220231407154f1a25fca5ea9726c3b8830c501ce3752939645299928f3e71f617e9f755d28adc4f032410630c7f0b8c883186bf7be2dce72577a75f25954c278e173f83a9fa5323deae35c8e0c4d174c52ca6f324994a498dd43242c6268e1dda4a35595213ef32840c4d9ce6ee4ba512f27e23341e94909189e36b494dae3bc2408d2f6a5ce08b1a16d825c8c0c431bd09dae764ad0f99bfc4315c32294ca5da3d31c812077d71d4e5cae2579337b446cab620a31207b10fd15362ff289d12c794d42d484beba2a71c38308c94021ba50a322671b4937b295da8d878413a78e4d091aad2581227f9478b95c99d381547828c481c53ac262586b798504986c4294fc524f6e11a43c9c978c42954faff9337652aef1c713e490c4228b17082e6b911279f33fd69726bbaae321871daceb313f404652ce29c6b929857b9954086220eea4eea55b97c22e43db243c7480d7ac7066424e230eab5c4f62e498a6bde483d3ea9c24a0bc840c4f944a9de4bd1f61fe90754308243c6210e9be584b02f31376418e254e2a7b14b080b71b8375debaf9634bcaa51020c3c8e1d25e80072e41f50c14818320871cc7c27898f6baa14af246310071d224d0451a8b720a27d07e274b25e096182eca88a6500e23497c26eb0bc51947e7f388accf6a331dae80f4776e8306576831d3d723c8ad1611c92e187c35fea5f74fd4c5023041d00818c3e9c75f5fde44511a5847c3855beb9fc10a5e2c9247b38e9ddf24d92c55630911e4e73624a3635262529657938ab5c12d3eca858d2c80d76f4a8da1ddf0387511978381b349071875350eafc66e3c515990c3b5c26bfb9e6ec4cb1522303197538efd7dee9fe0223b01d3dc488800c3a9cd4d37c7453dac93e99c3492c257fc9522a2bbd2887f3f9861c51f1848b320ea7131bd126a83be51b0387c35b55c8d5919941bf379c6e64ecb7c684969492e18693f9c5f357b1fc8e4f461b4ee156394f2edd7ba64a990c369c642fbd9962aeffe5345e848c351ce369d334237329215bfd830c359c35682649c99a3767e47e90918683ae1dada1de5ec3c9340e32d070dc6032be726a8c5a3c0f32ce70ee312f69c4c2899dbfcc70de8c974ca68c134479898c329c36967093bbd5f027db021964407eb672aa9fd2de0dad1af40e1c838c311cf42d2e65ccb1f94204196238cac8206ddbd63b844a1030c8a1038c1501c8234e29b35492c3f672ffed8863092642c735b3c5e766260069c4c9b224416b0c66e9a4fe86960d9e1127a941682e2bab3f534d26c603208b38968967aa204db65a4a1838d2fb75004411874b32ebe4c67f0ddf715495bddb064012c166c9a7665e54449cbf9212b24ad399dc1fe224979477923842431c7b4305a410c760629a503122fe2b8438dde894511b2ce64d29c8204e6a57635fc9beb2100e208238957c134694c9a2c46e90e0e8118893b2ff9bcf9418400071160ff5d3deaff00addd0325506903f9cd72c49c29bade5bf7ae4c7c8f134f81d676e00f1c32963d3ce99d80a72a4ab010ad8b09106903e9c64642e31d68f569317103e9cdc468e1c55b26103903d1c4728592ec693b92d323b8e0d1bbde341f470d424690a4dd2c77c9ee4e118c7c498f90ca65b4df07092eef37f7925b326bfc351e4bf6efccc55aa04d981eb2cf55531677e8f20753825c92bbe979faad8371d4eaa7289a9e64acff973389eec1694496eeaf2c672387958dc3f7963e59b7138a7c54d7152acfca60c1cce32a2e4bb4f4576f786d397bc154ff7c40d67ad3f9db7d27b9e95112c31da03866d385eacbed3985f4c8aff0d358d01081b40d670c9a24c88596876f4102381a8a16c80a4218b255e92433708040d67abd524c9234c639f0b728663caa49a6ed53405b90131c339b53a53292549279f9200dc01a40c27cb24f76a522a5d306be700428663c919da94951cea5d1104c8188eb795a4f0a782a5ec742439705040479243033cc600228693b494bf24fb8a1377bfa155b6aaaaaaaa14ef06c00b206138789ddf6b7ac8cc6a7a000183fefd9917e369504246807ce1281ab3924a5a8406102f1c5fc5447bc6248400e9c2f1e54e0c3acbcb928a7707102e1c7efb2b6938417600d9c2a904af78fffe6be17c5b39945b9266e1582ab79aa0326631a99b030816ce71822e75a5b26c46f70a075dfd1afc47338fad2056386d10c24dd0563f95bd00a40ac79237777aff880ac7f98d299d8edbb9ba5626b061a35350e38b1a1ea8f10509c2a0c0ff05fc7b3c0c767409ca2b40a6701247e3f6b54f10299cfdf5c20942a82455b825001285e39b20bd3629d91bbe43e1246ee74a7e9d4f3886f08c2733c79c46910d1b470310271c2cbdea67850c48131217a14c4f43cc84c3064b212763b13326b900b284f39a8b543131497b2829e1142262ead56254f0320987cd65826a934f586606094791bfadd5acbc6faa231c6fa4af56aa8be91dc40827e94bc6b78ccd9b4b1048114ef65b96c363479cda5900428463489197e516a74a5d0419c249b4a91acd77517354847090a754ca259a060d25980590209c52ee4a9b3862010408c7a04fa8a06ee152387f70ea5699b1fc54cf00e28363baec23ba99ebc5496dcc1d234f69860f5e9ce46c536dda16c449f32ece55daf3d49b7998467571526ac252e5ce317ce4e2a449724d6a72c84da21dc347609003c7488faca10f5c9c479e90314d091f7afdc8c72d4e7beddfb515ff62a54ff0618b53580c6719348c858f5a9cbcadf29f9494da1e0cd40f06da6156f8a0c5a96b46654d49623af9fd98c5abc9425d0a1bfa90c5e14e76558ada3a23937cc4e298b2842fa9f9f2018b9308117d42b66c5736117cbce23cfb26d5a66c8b4feb6170ae3805152b6594d6c75a4e87978e8f569c4e96ca9567c1a47ac7080f1cb743478fae5e7cb0e21c27c931e24464aa14fd58c5299c2c6944935ad9ff6e68650140091faa38c658feade5aeee4a53d1d76a4cbb14542457509a62b95ba8a4bb357c9ce218543a493ac15bdb7cbfa10506c291c6f0dfa1d523bd18366c1800a6f0610ad4860f2d225f93c66f68bd67291d7c94e274d2b6e8aad945932629ce3a3acfb4e57dbe4c46711a53278fe8edab53924471b2ec29278bc88cf3257f84e258e9aacf4ccab2e903c559ff325886c9559db27ee21472b46bd80c5d7246eb89a47431b641e6d989d398796e5b5550429374e18313a714cd3b2ce6767418bf232df0b189d3c96cf247b887583169e2943297ec1bd799523449c147264e319468e23a4d4b081d31719619db34aec1e0e31247ff9244566a35493636f8b0c4612b8dbe60abf172331a7c54e26069c229616ad45b0cbaa1853b7a88c1820f4a9cc43739466a89f113277110e59f6327e65ec9f586d6488e4e06c687248e61696eb197bda155ca22712e29e59b3a25739fc50c12a70b4d17995a840ac2e411a774bb305927858a371d71904dd2a40f7941c88d8d385bac935df94860c3c6153e1871348f2d3fb59f5531be888386db1cb625459c245de65d627e5378fb2311a712b7fd4fd26e82b6e37be030441c346b3053df980d39f5e31007cd222d6593a43c592fb5f06188e396a447f9af9d1426f2c8d1c00a710ab25e4c979cd6dc9d153e0871fa134fc4a6b81c9fff865a8dc131f818c427658b123f7fee5d8ea7c197a1208caeb239e492ec86966371204e9543095d6a84ca69232e7c00e214327c54cd6dbab82937b4b6460930c0750580207cfce11c7a36e5111fab1f4e7267d643eb76559ae0e0a123047d385a986db1cfe0afae690006ff813070d8b0917c38262d3ef2c494bd645a55f8d88359715aa3fddac89811e1430feb855341cf89a7450b831c0fc608103ef2706a35df9365474dd2e8173ef0f07187a3de568e124bbb850f3b9c3186be6f6e6815ebc1471d0eb24cb35596d268524b477cd0a1760b9b2cc97aa62873e5e9794a94b68dddd0c2399cbbed2ef9f797b4e356143ee4708cc9d6929419162de75771389f86cdfaccd4196484c331bf3ed39d9cd81e3ede700ae39a73a4494185d870f870c3c95cbba48b61764bba7d6bc7f3b8f2d186a36be5774b6972a7ab1f6c3856ff883ef152129a746b3889d7e8b6d9d411fdb1f0a18683a53dc9c4f44ab9b7caa1638b0a1f6938577b09eda2ca64c6e486d67a2035d934c1071a8e2237c89d70d2566df086560f1d39aace7012b4bd9f4ce97cc64da4f06186533c5735e9475ddd5486d3694de29692d21b5a3a7a8cb00d1b3d9e47123ec8704ae945487df92d25e5091f6338096d92850ba14b6e4d37b48c133ec4705029544e87ca13b7a21b5a637c84e12872aca4d4bc74a2911c3860f0c8aa460930408230fa77f4e0a11f50c1c80c3ec0709a2bd93b2993377464470f318a8e1d891f5f38c53c2283f895bbd178e198e404599236bd0ba7ee7c8d1e76275b32170edb22c4f454bdc56c0b0799d6f6a384bf351db570d8986d17cd9b6ba99485f3e88931c3c66a13cbb170921554d796e80a274b41451b35a9fae6b7c2b974d6a41221aac2a92e2661e4ccf2fe5b2a9ce289aef1849437b9a1291c2c435749df5aa31b4be158bf5999a537e36c8ec2614b93c99a2842e120d378b8858fedb8f609a758257377a62d7da539e194626389e725feec8a4d3825aba82a664ab2129330e1e01b9465b9e4739a2fe1d49b2ea82489c5add329e17c624efc8ab225e19c1bff9bf5433d443582f68184939451b485d5f89252e58656a91e3b74f0301f472896a6b9b98bbaf96184d3ffc927d98baa1dbb7c14e17ca16f845a0619ada40f221c4d9824b3e909bae46d37b48c8d0aecf81c397860fde16308e7f4ab78ebd325e7e5fc218483aabad40e91bb41534cf808c2414e1415374adbe30308e7527399947af1cffb3f7e70f20b3eeefdf20d2dc1870f0eda7456e53efb5049121d3d0c0a66f4e2646e15bf64836a2a49b86490ba070976b0206768386c4c21ef4259909995339cd26591bb5b51b37f6386539e9c34f7be6921ee321c4b183331c97da5ba26198e6262e6bae9ae52223386e3ac8fc5609a99c3466238d928a57d72787eac1a868352e5a2243529c3c915184ef2e5132a85c88e2ecb174e25ed97d4b118e126ed8573662979fc2fc593044b17cef221c5fd4ae6071a5c38ef4965e7d5a5276703038d2db439f4c2cc67081a5ac04d16ddf125d22d99642119737a2c9c2fc9cfb6bf532a5e6e34aec0d9c7c8da961bb041d0b0c2d95fdea45c927d3cfc2a9c725b33fb097ac232890a0755ff5aaa42e615b3a75029491855fa2eaf5674a02185844a92b031d86d7ae80a34a270decc4ae946bb73445038bc4925ae65c995a3344f382841951021a48913bc73023a2b2ec2c4a0b47edf84736856dc30e1942ee6c4f56dab242dc1503227a9a032a98ad90a020d257897ae52ada93260c3068f1a25e880128146123ae9446cda14e6f2cf51031d233a7a60312ba08184633071d790a3d4e56b47d0cd33538a95b55587b67c9fbf5fd0a644c308e73329a9ab7cd291d8b021468761c3068d221cdc54a62474f6af89748f408308478d96cfe49235c784874663080719744665d164f2b6bfa1f53876f428fc01158c3c8086108e15a2b49a78c28d50eeef3085ba0435e81194d5a07774804610ce27c97a232edea9b7f9068fcec09a181dc6f1075430b2011a4038089519e922971cd0f8c1298cca7fca4ba9e45742c307e70d6bd9a4f2da8bc3bb29e9824af367968417a71334cbc49fcd8a3eeee234d6a39b62e5ff66a78b83523266b8944ebcca968b533049284dd16c3bb51b0317c7cbd8ec693567d2f8b738af655a563c49378a6c71b2d298c7ccdebcca548b936459474f90766133b43886d7b7db6cfa332e8c578490599c525b739a7852cef14cd20f06ef204416c7544de13795494ae5492c4ea95ea9a4e61223ec87c549f5ef4cdd922443c65f7176175fcba449dee4ed8ae3eb68139625060c8470e418612384b4e29854b4840da2af73b50942082b0eaf49e88f2ae5b1a25a459b243166ac70eb222884a8e2e41a9725ef524bd306430c1c3b7a70482a8e7723c3010e1e23ef3a725471082a4e1bfee2dbd252da139c42c8290e36ea542d6c12dc342315628a93bea434ebca529ccbcb7def2f9992f47f1294a0424871b2b5a4a48dfb75624da338a98de15ae4c163a4d2bb8e2f16799080f377e848130811c5c9f2f20976ff15e388437136a12a6ad63c694108280ef327a4f88bba93abffc43179897affb86d65d91367ad1a2b298c508275a61387173156317fe68c9e72e22cc24cebff8ee912ed268e4175a81cea379a38dde892535b6748264e2985dbf8a1ccff9ac1938037041307214577c66057f911d4904b9c764bfccfc6dca664d4648825ce35d25564da98fcdc5489d3a6d86229f49aa8281981410e4a7829671eb139f2431d3d788c91f2032a18a141c8240e7a4baf92f82709a6b97b370c918426eff999146e466c66f016487f82b21f6306ef23e969c091385aa8d0b6949b84570e89c399fc0d57829b14667ec449c6959892a034cf4fe98845df49d965b217d28810469ce4d2cd25dd55d28d792641c8224a726135863c44119d4ecd521bdad1438c90441c949462820aaa4cddf82188389bc91773c747068d7e12420e1162889042b87b25e9ca53d29bf08e1e3caa4ad00133421cbefc24154afc4b62fa73e00819c4c9244bb27c96a0d14088200e9b654d1edb78be9a0fc471bb44932a4b338bed80f8456910fa15f33f9cc24fe5ca26f8998bfc70b2ca6472e9add45ea13e9c564733d9e955264df3e12496f4b2a0b48959b987934a19748e36a1ca2dac8753922d49757d9a297d9b87e345df92d1d56493f7c4c34157ccb663a123a2bd3b9c35649e6cacb427e6ed70d0dcb69791ad4c9dd5e1b4a7f527abf4fcbe0aa1c3c9cb4f2631c9094bf31cce1b2a9c3261d1379c2f87a3989c31659b5a5d4b8ac3b9f2c995491254539d1a0e279793f7a48d2ae40d277982ca27a9d8ed2342dc708c7d49b4cdd2a8a2410b8890369ce4cf2b490cab761b970de7f29342fb26b9829b898690359c5412e2969e292776688710351c56e42bf56efc122287a4e1d85d1ea617c3b68f0e0d4753eb1b83ccab1a42ce70fe1dcb6ef3d2a3a41f6286631222d3cb6225297fb320a40cc7983f83aa57dd649294418490e15ca2c7e76ecc2c962f1e63b418233c70b00d1b3cb66811328693bc249c8609428ba9f80dadca218488e1245cda75934b122dec39747c910304366c147d4548184ea2f658c54aaf7b278b51cc2542c07012b7316532166f546688902f1c764b6b32cd93843b651b42bc70b48e1519af41e34ace86902e9cf2f7dd622ef9acb248f310c285e30625fd094a2dc8d6ac18233dda3a640bc753b227eaad29194d7e43eb063b7aac164edd323a2c49e2a84b929682902c386eb1d4c789b3183864c0030b270d5a232ca93b7024a5d44e10728593bd6e92724d18b768925638c80a3732e8133d3b2d6b08a9c23167a80baac582b737526208a1c2e12e962e4992c4586e910d1b610899c2b9b4dc6eb6b17bd94b8d2f6a3c0e7090a043102285935c31e88b1d2f9b257ee68290289ccee5e7365aec0f215038591a4df209762568ff9f701c59429a20c2ce4adc9d70300d397b4a101fa1eb269ca44bc2af4c4cd06152261c45ce69586ea5c8d12ce11c5a3686fcadd90c4f0987b33c55529b9838a3249c84d78abe1fc264a50d0907b5d9c2e42455c8118ea5b2ce667a9c542789118ea776632e9bab555884830c5abac4248ea85e9e0827e1e2a4d126db43385c8eb66d8ba3104e41a8cd91919d62af914048108e22479fb81df9ee5302c2a94ecc3421734729550af9c1e92499215f4d698f3bc407673fb1adcbdceec5413cae4b6c4bf3e2a4c4dbaa54e245a57771aece1243e82e4db9b4ba38963c524ef2ced6926b2e8a754d55ee62e6ed2563c93a4950b29402105c9c53f4f34b8c9ae8086f71d21afa55d34683656a8ba377496a29d52f2659d5e2b0419e57d84a52865f6871cae0714295bcca1927b33888c9a762c9a3e5ef347b03882c4e2908e9a9757a7b4f90294380c4e220c4cd9fc8a5567cb3e400028ba3fc285d59329f58a2a302c82b8ebe5682d2a7e48d4970618083c7d548e501c415a7309f25898c267c3eb46103a4158791596d746c9fc58a9336f7dfa831940c4a7015273b95f7849232646eb80d20aa38fd594ada4ebe1372a5ad012415e7abbca236263c80a0e274a7eb33b25d379b6ed501e414768dc53cbde10dad3210539ce28d6e4b3f99f54b578ae3d7c8d37f4a4a91a9bda1656506428a932edf7426b6d696dc3c8a9334267b89b271be2e298a63bc8db02405af189450280e5bf205bbd7fd0ca76a000414d79de91e0a209f38a677884cd2aad674f51c4f821f6306387298e009209e384517ad9fd75d15b4edc4318846ab4dfda21a444e9c2dac6f74e6f61625253d0d9c00b289b3a5f9d9cd2ca6216b12403471b63b7dd3a25429c935238064e29841c5dc7dbac4349c90008289831aa592dc159325a989c7254e79ee3e64922637d473bc1e104b1c54dacb0b52c4c56d7480a1238d54e21c22a4c6e9a554d9dc111be048ac102100428937639413fa1a91c1bf181a0290491ccf35ce72adba138048e22428d972af454dab41881f0089c4e1a451492e5eafc4700289d305f566f25aab24a5146b38bb6d996c928f16a1961a8e61943649bab1e07e97346027fb8e4a412f341ced464eeefd3d19e63ac341ab6b54ed6268cba9194e7649eb6e948a2e692bc359649e9026c7a898d4c97070bd944abefc552a786338c568298bf893a25e45c570d222942e41f60dc3a9c4f6b45783bc9384c170fa9a3b319a744b32a8be7012f4554d381f2d591606e085535feb8cf8f58eabb60b4719b524a6b2e1c2d9468a9518ef7745ae5b38895771ec843b1355a7164e596597b45c9949abb270bad750164c08755a335838e5111ba4defacb7ee60a07699a2b9889a815ebac70b62408a949a58ace91ab700af7d9e466592a1c74a8eae510512ab6368583a991a2f54c0c356129148cc239adfc43cb8d92e184c2717408f33425941e193ee124e4c95d79359d70d4e8e76b1ab2e3366dc241c6bad7e79bb8a8c584835adcf8882c33fd93259ce6338bc889b68d5a51c271662f96e950a62794927092418a5b2625ba277b4838889588df98c57a4b7584d38b9a7251bd114e614b12cb6555114e72ddce4d9a13942e2d118e414bfeca302663b47408271383bc4b3937211c64289d97a694bc683b08275526e93349459aa41f108e7fe16ffacbb3f62c3f38c96b9b63474ecc186d003e3898a02ea5bb132fbc2abd38a6e896d9d55dd2efcb8b7357763f6529985f4aeee2142bb88e7a557471d6fc8d2528f30d7a33b938e84cd519639725293e5c1cf7b3c2c9181b7c2fbcc531fdaaeb2b75299fd716a75032284d925d6a71d258622c4196bb8f0c6971aa1e25a538f7cde278611b6fd13d599cd2e5505234f9f2326e2c4eb94598cea9d8139b83c5f94e3ad9576466745c5e7190119931be49be297aae38c5a4293322a66bd9d28a93a66a101fa3c4d8e3b1e29c27c5d833a6fe6ef72a0ee733a32a8ea7e4ba2c622a4eb6fe9d276569bd3b5171909b04159b8bdea7e9294e719a4384afc514e7901a840c16eb44135f290e1bf3ce43eea924d9498a836c8a99cfbac4909e8ee26c629c89a67a13345da2389f182a76f5a80b72ba509c2ffdf247c51a1498342f59a254f813c79acf351953d24a7b7be2e07af2a49252f6db2b75e22489565850b117470871e2f871b2babd5b4917aa4d1c35934aef92594ce8551307997c935427beede695896316a5737db244ed053171ac186132c692644b4af212a74a62fc6de343433f4b1c3c835653a6324db254258e75c2da7e9994296d8c12671326c24f26533a2d3c89b36526392dbfa6bc9995c47993123157a27a92ce227110ddd4a544abcb820824ce3b323799bed33b377d41e411c7fe4a2ae62ed1aca0c411e78c3d8d9b63cb52d58d386db766de97349aa4970b228c386a30f1ed640aed063b4a400591451c646cf2929220e5f46f801051c4319a8abad03ed79ae48be1412411c724e8ba5f3661428820e2f41fabd9e6267ba5e61047bda03fc3e836f1cc33c4393589b67e9292ec4abb408814e2749af5cd84cdeda5e46df09ec3ee2042886310ed21bc7d14d42841076af4780cd8114406f121220803880462a48608201c20f28722e2071d490e1c237de0c37f32a2a3c7480344f6c000113d8c2840240f38c4a0c0a71c0810c1430244eeb000113b8c2c40a40e230e10a1c31c142022070388c461e40022702880c81b0e20e2061a226d2080081b4444d62043440d031049c3080144d0709292ffdbde667520728663fa38bfa0b34698a4bfa1f58588190efbdaa916d7ee848ab60c27617d842e21644a935f06226438bf788d90b76ffbf66f68658de13c1ac474988a9a8b41561a1011c34155f48d593fd6d4c2613875efd8e7beb7fd49ded0ab771d1f302b0286634c23cfc25e5f12b97ee16035273259fbe949960fdca077ec680c43c40b28d205112e1c3b6ccc94a4e54db8f98696b70e306cd8e8f13018f9c2868dd4cb82c8160e6eba69545989bf7fcaba1a838816ceefeba3c14c904d8266448c314664a04307186a22601a8864e178c18274cb77a2ae78583846912b9f419b10162b912b9c88158e269c603a5fe9a32b49a40ae74a26f7ffeb840ae79f2de9dd6e2fc55244a670124bbbf66d8a6f224ca470b0ab1c6b8d314d60821a5f8cc18387062cc08210890296995762a677e84846ae78ecf884478e30520ab44c220285f3a8a094ce5ccd63e2cc81c8138e294ce93e51a7dada252b0211279cae541ca59494ddd052268834e124a64977d2ba6729fd271e366c08e00f224c301b224b38989a2d15d6f7808812ce175f3d83cc2776bde347c4e83094459270f0925f9b36425790f7868ea4b908120edaf5ebbc4b2f8609dfd0daa1211039c2f1445550aa4dfeda5e49c4086523062245e0a1421021c2410899a53da64da6e9c6e016880ce124a855c9d822af15ff30c6e081c6e0615220228483e9969494d2a664929d4024082549cc466f68ed98c1888e1e4038e5cf8d95ca936fbaef285502911f948d22e2836a018d5e9c44cd567e91a14fd0e0c54912d282ed2661fe8decd0918c6c5960878e0b5ca00235bec0b1230460348e1def399e47d1d845d990010d5d1c4c99502969da7ca259c9e4a268e0e214752e09bf725da2731968dce25c29fa66e998bc5ea6749aa0618b63087db267befc8656591829054504346a714c498f9cdea66971ca125ceddfefce2cb955a0318b63509269531b269824c96571d64a6236b69dde34712c4e41d3940c2768d6d8b309346071f62aa5bbd452346df315c74d4912b66d73eaa5ee8aa3ac55ca925e9bcba45b7152419ecad3be9a4a6a59714eb113a4a9504bb2951268ace224c4442831a34555712a8d17379cfeeb3c3d15c7a8eba5c492354ca0818a837ac98cde357a3456c640e314c713c34f9fa6a4cbb334c5f18417597231d668ff4b7116a51f2afe28212c5c48718cb15ff6c47429d9378a6389f50a329e8b987411c5714f92c412847e59905628ce32ea545f3657502a0914a7a4ae438c9c3c494cffc4b1a44d729bea3931a7c913c7546a2df7668f533977e2e47d52ca286aba5f839c385ae5e9930f6de214846afafc492a4b8c3471fc392995b81a268bcc32710eaf143246d9f87736268e9527579b122d9738dc692841d3a97705a9254e65ebde96d5549069abc4f994ee599bf2559595120713a2fa2fb294cccc4fe2605916e6faad31d32e89932869458cf69b24895e240c353f2b9674481cb32e876a4ab1c28df888738a50498fbbc911274b77ad11a7b7529abe844dd2493e234efe7952d81261f126bc88c3ad95c692f476542c51c449f032bbfedb8dbb6422ce5d22bfde7249aad345c4e9dedadce2d787382551b7256a9474a733431c840ccd936b494d8fb410c712b2bc6297e75bb20971ac104af0b992dc52f806719ab9cd25c4985c5c4910c74b925252902968305f03511010071593c6d456342deafac3d1e4d4be2fa37e385c8e2f1f256f6eb6541fce266f128b4949d25a4d7c38565d8c7ff209cd6a710f473be154442929baa8530f27f13c2d2a98129a35260f27259714f24b100fc738d94b9b496eed15bdc3494f30f126456b8773a59693318c521d0e42e388cb3b25743849f2cbebc520422dbe73a02187931242987a2b15eae49e041a7138b988b4cb2054381cf544dbfc5d7af762ea0dc7de98a4aa4cdb167371c371af3dc3583c9322b2369cc3c4cae552ee957662c361777fbb4e7ebe87690d073d41ceb249e39632a386931c138bfd2e4ac3f1efa432dfaf13d28d4da804b1c5325920100643c15018c43024635d0203130000101016934662b168402c55b83d1400044f382c4e342e26282018188d84e281181c0a84c2203110100804c2c0601088714c4652383e0409a56314b0cbb7dcd204d547120a72505390850a092507c58e57640b3242b34328d34001b512d417c2b87a6e0ae9b8a8f532aa288250d243c5867a124a1a4a2cd448a87d26940e40d846c939545a45b12ea52312a4ec1916f5d907a88a12552fb51f40adf776e8194400ca41282d2863506ba00e414940f125145069da984283a5744081bdd6595043429d3551b43d4374f32950da5046a158421d7b3a0b852314f0d11465392e0d9510116a03ca00142b2860390281ea13c634c220942c02057c46826aec04b51e798e560b43b1837a09a50aca0e6a19a82b28438c02729de830c8a8c73d6b940ed3cb900b5492a0ac51541cd9caaf6229d4225033503f434187b2835040eedcae07302a4b100a7d75f050385092a068403d80ba0185004a038a02a85ba8a3a1e8a18c42310d0aa8ae5f0d081039c09ca467a86da2e122d87885436248cbd83cd1f9d1004202f724c5ea67b2d761d200dc1ba528d801de6272279c48ec548acdcae3a1851d5b54f4f0e4047dcbfe3f8d953608608f41b168de1288761e2e33a9d24b76c530e2ed1f95a9018a726d29e74f3c51738196aecb0ccc4c8ac16ea09472417e48e5583b48aa09a64fd0644feb936ea1437632c7d0289c0c6e2a4778645a64c72753d64d3d62dfe6de1c737f68d431372a68a56dbb3f76019a38ef4dc5c0e24d10410f8866cc4938d727b2139d6e23b58d9d2ab002815def51da024985a1d7c5af13eb8ec8673153ccb09d1702433e8b78e22b5d3a32cabfb06575a8131d09605e56ef6045d642aa550ed137e8d7b6116857d34eeb1a4694ef3b9d47e48e6d142363e6843bfa3a664ff0ece9349516109b5d67e8597b5dbb85a4ffb63a58002cd8ecef9dd2226a9b3d31c88225493bff8d1e5afe8423410031fa8ec1e22eb20092baf9e20752042b75fb9c0b43e46048f269cc26cdeee355dc97c8c9c0222b3eea7676a3dd4887466afb04097022eb9b0013428146f0d629bc1bd77980eba02caae68ec222510c8aa953b07471c9eb647f928eff13ffde3a7606fae7583852e839a65143d2d4bd885447236f05d96d7b325cd26f1efa1d29bd97486451698d6336a17c40b76008ecec868ab0e205a99bcfeb31f300d613df7d202853adaf6e9288a0ff743323c53c1cc427a428e28763e3e38934723d8d0f844898ac761ee7f82fa2a20b1af80d4256b56207f1786d798ef6b00a943ce44fbf95f232b7f84bf42e40fe0ba4a054b9f798209578429980b179b286b73847e6117ecc328f61eca0a3c9a6e330369a797826c02089dc2960cfbce0c184b163bd566410e599cf5f8764ced01048029d8b4f40a20e79ffe8b39724ff5d0aec1c6cbb07f1fc10e05b4a9488fa1e3251680b2514a8a176d19b558328190058b2a61035749fa68830155ffadf987656b4422416e28807fb01874b7221289a8c41c776d6b66c55587a8acabddba05514e80f515490414d4f5e1a7c7d0e735c6fc17c6a938c24d5ab6bc61cec6ae7a94ba26e062cc7bf4af4f8af322a29a1a1186614e24a8450375379e19c4e6add9107ec8335cff50c88925934bf5a034b9440cc2062a31b2e0fefcc121c8d4b54aae8662c67af9f4c83b58a9e741609f1fdd91033562a1211b5b39507a5ac00aa86aa62a50983214fdc55c071c06d21a5253fba47d39cef3ab4812e7f29d17e20baa6a3c9d16b680dd53a05a28bfd9a690d52f3104ce93446d7a68fe88233608b05640ccd171003a1a112b7ca6295bd3071a926b47f58b3aad62fc5eeec99f403dfe1413fe5b7216c623c873e760d771e8ce3d2e5a9aad01364b0dbc73cd708e19cfa1c603c5f2decd080a3fbf2723ebf6a0c3a6ad7df546d55d3cfb61c859da48f88b08c07f0dab4450be285392e5b2413fe2b22b69864a0af945ce54a0ba126df8266a7ebaf0b79e159c2f0144d62b32017eb516d2c9e737e0d2925be4d662d7e5bf3bf1079d8b17686062d7a8cfc1d21324145454daf8910d6bb6b6511a73376df0f8f751bb5504c8dcc7f5c8666cd729f0471c1440d07ff49389537cac1975f76e2fa7f0cf93504782d8947d2f8c5bd67efae3b1a5249439d4fb5fea3977d7bbf5677352a51ca1b9528bb857c340aaa6bdbc79b07845ec2e2e230b0ac9e7be612c1371c3403a0e4f3e6f4d83da343b79ccce47fae243721c4c98432cecf87c9a4b53b68943a4db37603255439364a18c94abd081f9c60ef72ac8b035986dc9061bcc152ce48387a5863b7ec551c131d1043aaaa742d9678c69146bf267a00e9414ec198c2e3d44e8f4dafa061aded10f9334e91d25ab8063fc1daa9fc8d21c886aa1b4d2bf4b748811d6a5c5f20d19b07bbcb7e3b2d2d67f10446e2b7bf536cb762f752be4fe289dd72d7eec91b632cf03ce7a4ca5aa60c76a382c86fb88ba21959f3006dbf516446c7919bd690e3f8a04ecc7cdf781c1409131075064fa2637ee52eabd045c30d78cbe0894d8400b742d3065e13f971b4f9306c2d0a9baee4c315b83b1304d8e00fcbf98de52377e5282208ac46f3195ab20660c817911b99acb164cf8178f99262c8fd89f3d4bee2ce25c88b183f4edd1e8275a3f32705141fdb6d9fc149153071bb3a8cf28e2f4279a43f1ce69d3574f3e4a8d26f24377162f82491906eb4a433e86283615f6483e97b49f09ae1f5d44bdb8b72afe3f29a68b1d98cb9f112cd6bd3eb8ce2b5c9ab2afb8e575bafc1bc247af1f6baa9d7b1cf575ba508747a28491f917eafa339d811e3befaa072ed352232be9257142f3a5e672c927f7daf2fa0afaf62fd26955ea27bf5f6fad0cbdb4ba9d73e5f8b9fcaca8d8de9cd9e80f7bc1aedb50922356614a897b69773af195e4bbdccc66b1154ffb57601cba7d73123f4ca0debd566752597185591b66a63f23abcb24d2fb2e9c0ba0bfa7381690122c20ad910853e4127a5fd65273cf5012c7ca111c97f695ebd5e0ebdf8792df43a57bcee83295f1b8e97be5ed1bc7ef492ece5ebb5a1d7b797522f9e5eefbcde7a4199d7f163545fc9c5542378532327f9e822d807613d3416553dc5efdac2e15c239f4b29c9a55be6bdd6bf3026515a786a76f40ea07d1ae603a7f46a619b6b0fb49b26451d47f4b78d6864ce3ef2d0eff87e5ac9dd22b44c6e692280173d2cf81d227fcfda3ab08c9425f8f62e7369c3f0e08e6dc03923a603763dbf729a250dc3fe0ccaaab4b4bde45989fa68e8c81d414027131a5a27e24a3b3675ddd926b0b4a758415496c49622fb64f156ddd80c1e3c40b26ec090e6c0eedb8da394cfc8aa0472b83a439670fe4738c1068ac6a8104a820e2695e19f3546f4a7fe937d2e0915c4a258942e951c153f5c872ded45d6a487de80caefc7867bd3da4df825b5ee7d19b2f79b0db7d6fdb596b9180b94dda791a83cec6c7e17bd732bc24cddffa3f743128d40ecebf74ee05b1396bee6464d33e00eb5ac97e7d1279e0cae48bfaa29aa470ac7664f8247df6ce01419137440ec1914070601e72e8d42d84fe2d1b10fe0deea5c3cd75e66f9d546c51d96ef6c33ded8ece50915b55e86e01f4061621ebef8693eef161a991ae918ead04347f609473c1da0b7c84dfcb2934325c288ac7104e3036e6029bb46764bd60c39d276287314cf2486e482328e48734517e062c7ed12b88e4d5ca57bacb2a641091562a03f8130b1af13dd797221702d84ee83ae1ee4021e343ec81d986e0e5204506091df8b1f4a5b3804b65c7b3174a03aeafdec637255a67f39018af76c0e20882a4b803cf38e4b81f9a1bf38ed3ab52019151f8783a639ced7366847a637074ed323a46a6deb161d773f2b4604d5e818f213facaccaea104eb555be96ad2ac164f4d03f0c61b9085f2aa64ea066c1bae44dd42ce8e233362d1a00c8d958e25ce3a41be117e8ffc4c9fea6e02d7457dc1c02a99ae0a18eafd81358051561bc8cdfba6d109b6fd245cafb06fa63cebefc7b2dfa424cb7101ab676d24732cd365d7e25eadc388897d616a329d9a51d69a2faa3737f374c841d024cf884dd4302b793b301132932a4aea865331856825b347e7d8f37a45c79dd74a53c8d89048792ecaedbb1d84009f32ee17a3c58cdec77e011b4936a9ba3d3b2b15de031bc9a984939efb9bded234d527afa78c8ef3729a074bb457c64c6b13dd74f1f5876d1fd5ff0804d70a3ef953eeca7c4b7148dcfb0265c36e42673d6a7bcb19fb00a0b1e6880db041d0ebd04e872ea951faafe9c249b286c681d7d78851fef1aa8c187a34975756f2e5c2c649408b6d6bc61142bc88a5bbc63a94bb058b9107b7aa5b968a79336c534e6d43923937eec492d7b504ea57cfe48dde2d8a0d112bc709a45d4c96bd3133bd569dcb7909c44ea739d336f5697b7609d1e458cbcd53a0706f06c69aca688ff728f519fbf00fca444e0371b15bf1d57ca04da2c580ce7e20e7cf606de4b03457f5a3b2e4bdf41a4e2f2934d3b3d1986693847fe557b9bcb49effa5963d56e2ebaafaf51646b6beb521241aa616acc8e29928d52493d76c857b8b1d13621bfc3b3d4d696d65ccde0e1ca759ba5da506901870383d0d92a255b3355d82d3f36e8fd76a40b187c8b7f9e9ee28e04b6ad8aeba5ff2be45d1eb86bdb6d9a14abcf2be3e8b6416b559dd1790c9f11fd5aa841c29060f64908205797d09e166346b38aae4f8cdd50fad24efa9d2f6998db3910ffed7e0f189a3c52cf75a080b55de3dd39e39e19c3417ac6fe889bb4c9cbf6cecc2e71290e2d7d558e97c9efd9a4f19797f103ab96b38e7ea8895f2cdd10f87d1bda8a8af1d8b64ea9d53a95ae08c44a3d8423d422f9f11e3ee78e49dae866b5cebb26a10fda40617eb6ce38408f8748c9680a481444610ccc7f3a9db19d8050c306eeb430d06a6d935986956438b22b8b4825880565174d881dd446c9b9e58f1d3ecb4fda4a62fba86d02013b3ac8593d4a32e87ad742391212c484a6d44239e13605b8971c891d81b4b6d026246ed1f8ac70f0862e7ad6f65b146bb0539fa07c018fea76ebf973d6420444924e08c9ef68574acbd199693a1cb256fd9186d61e88483488423b342d84f5209bca4101695f116c68811d630edf24f5441ae295e609422f4fd39d6ed50d8a4ad9fc915adfc836726b245b9436f0161c63801008c900dd1de85302a191013008d7f885e61c05c9e4adcea41c85b54edd7a2847c032c27cc53c5079957b6e9ab19236e6c2680212ebf32a488a5d5d00772e4a37f5be4502934160cb39c2dcb343eb5b503941a81382145f5d5e49bd15302237645ecb88c25477730918ac5bdcd6aba86221b58d76b417e6231da36badc88d648b4117b1d1d443af6473bdd3875f0684535b83857b08c8eabc266a4913acca8c8f60a44782a5e4bf09395e3aa7728467b09ff44ec18c31a46490c0713a8ad5ddeb5898c288ada66edfdc4ac94d812d6461fb758a7afdb78aab659c33e1fca68d35ae65317bf93d2e8087f2ff6ecd78759e4b8675b1ece5208aa4bb1aa461680f7998d8e37425475bf56f3782dd55da10e01590a6e84d24b73849189556acb61d0e9edacea39d89101fce717618068e372c57b3a44383c4fbf7c8e13ddfb52906c3aa7512d25f6c0a0ed764be6b16cb196ea750f8348977c3a900126d763ba6c4a94ef57aa9cc54095cf0fee637e9b84aa5f1a0f0303f317c55bb2250fa276903422c171cdc5d34a742dec069b8f760930f7311866cdab32151326e1817f53ec699bcd7c14d14d3c6c5f321fd8e2778c5de6adfa9be0f1dc77e5b32968cd87ee803fa6dfbacd7a00551234f832228c1e0425086642597a806e066c20273ad3e94a423040e920443099f7ad978612de9b31ab8ef08ba9f2c4aa65858116f07b2e3993d9d82dd4eeb6ddce60979d1c972d9f9a83726f5194727aab056670b445de85a277e9c569748a61122fd66148951135e93f37176e18ec079686ecda5bc517d0a1458d7b919994d091c9fde66bb5836928225f9338b01cbc3345c7a95389a5cbb40486b20cc39a56df66c0b7950dc5f49a962ed4579d428c66caca7d0af916ee5fd866b218347d6298169d21c4f2ea06e867c856c5e6770e112f339845421eaa475fc7dd7d7cb59e88233ddc3a80e62d54e873059f22cda632008a28bca594cec1f49ce214f9833ea7d3d90aad0323bba4a373a3a2bb2d89e76ef5998ea68e83f39e8f89f3b0c8cf4ec041809c593ffb7e40739c120d960847529145ebce1425f61debc1204cf70201ea63fb0c7c050028e87e16beecf19feb1533da6f62d03c11029d4e2d425771af60a51a98932cf3db33a0d446cb325cb9a841bad114ede2e6e9e2edc4382175f74b018fdee8be9fa9c85c3a5560439e1d3a112bc061293101baafeca9beff0ea3b2174f237930e774c1c3e685236599ece5e1ea2dcf63a7f90fc2b8bd68ac0891b59998e22a691c272c081154059478cca1a10e0d78b85809730911e22b29735488d7033418698c62f359c5914f4bc6a04cdb04a306ee616d082fc12d5c89d356bf1d37c2dcda17505040ab05829579fc1f049e971c1da4468897913d62b3dc62be1e48daf09be3537f71ade71b21ea6ebbecb0a1ec564ff3e09a1e495346f2bf823569c8596683a2cd86edfc605d8439c8cbaf9c4256fbfa1eb04540ffbc1f3e228b582ca125ece9bd6af641f3a211518161e9dd7c84c5127b2dbf7a6e0b858efad626d50fc88ba588ae08deb2069137da5964b9834438052334e2be8e3c110f65161bc197861da80991b8b29fe6429ab7175b07d979e34fa2414a1171a8f309e76ad040d84edc69f0605cdb016fb0c629854fe385ea728b9b68cd9d8d985a16414628417ac588c368751e1d52c2c0c16b36207aafe2b93a3f5c8c761b4f4026b5ceafc6e10d33c15a24011b0a14a8d40967090286c4dfa8b0438f55b696c6487b93aaca9c1d5f1671f26466e2bb02832f94d032c2fc5886917d0180176f462623897ab9c0d5e48f96bda05703d4dbbad65efd3e094ccaeabcbec43f0c4a55cc48b77568f74b7bb9b40c2f71ff7f3ada4a24070628a682cc8c2d18f9e8ea149781b92e06be6230b0d67981a9d805869a2db0407132950719373f8381c01b61f1155694ce28c32eb51a3f942e9165b5e7b60a1f6f41d2d530abeecfbb5bb29ea18d3a768ab4f0f3d2fee85d07342523eb4ff102710936b61dcbef18a6f7590cedc49b1e966b113cc4a9260d58b938288394948020408a3df1f2d351908ddee7969cffe6855638a1564a4324d6bff506af725fa16061483c4bfd877b41e2c9650ecfc62e98e08420b1718bbfc29548d87ce120589f79e6b50dd38766101ad6576db3253638c87868db3ee624e7ea40eb1747932465fd140c339190642fb0132d1ab19d86bf612d4948809738f0b04e014140615ca8baa33f8688c812e7b02c4a49872a2d3a2146c9bb88f68fe5aa076f07e8abd6881d85da9662cb656dc2bafc984422e45acf7a84f2f29606f8a10e99cda41b25280aac35a0b25a9dbf43b75857eda34dce48823b20ea81b207d5a5d282f88853c444b576bdc29c50cd0d12622cf94a44b13db70d96adb09008969d62257f0a5fa3794951a3e4b7e61cbf760899112aa6b84b2191423d55883aaac0daae5f497a6b49b7bfb9decceab01c49e67491aca6675996c23200710a5b0af2b6cfc4fd4826d6efbc1d78e6c50c171249053ca9b5cf3194241ebaaf6874935324156db5b0e22391a9a0288ea8d11417c3c2d03c5b6328bbf2170c58565dda24325761579b3d307623981079f56fee8fe62e5de3e2454a21c75eb8e687f03630ef0b471d65efa0b07e68a18508d0b67278b1eba6670f1dfdfdc95967253786ce2585d4d96a48d9b30ea6dbf7d69ae0ea33c6377e8a083108202db424e272783e1d6c47f52eb35fbc05e7761e87d3228197df8cfab8fe036df9a834087d1a3144b9e9e33ed7c065950e9da849b4832d88c280b69cc36f7ec2e255854a47810e289b65bd9e32c1e255b6d564c4be987469d7d8fe9cc2054bba04ef4d59f351dcb7e15b7b0693beba5d3b85a06bb0172dcfba748dac758286ee7134643450c0d26d2c1637083f20c488b847efd0e25f6282b2c3157db62c64ff2f27d2018ab0dcc6a43d3f79b38d479d4a9428ee55f908f54ff1fc688402fdc0d441bbfd68275edc00ccdc544a2cd7ca047aa09af9b9949c1bef4f1a3dea9e2ce0baa32d370a280da01d99d92835d11398aa48ba81cb9d5001ffa3ace778a9b2eee69844effd559fe0e1c9e273d3d7a584f7ef11e8e4488a054d14cc9f217a4027a480a6382f89d4f9a35808533df38cb91e04f9c51cd1fd0c9905aca35f2f60824c81b3adb98834da91c0914488fd2da9c3d98918b43b876aa5c45f5f70eaf107870fb052ba1218396d2b11bb14eda2101a9226cc1bed291bb4635470d375453f18496252a767d8a0962fb066ad4dd62230b9f143ca5439441ce7dab4782d620aa2b3844a3a61edd2277879262a0590e556a029f836a557444561f21a18a440a06aa1c8406762ce9915388f181dab0f481edb42ed6c836134de57ef751361bea4161d79c06cd8ea42fe5e8faf0a52a29fa1b55ed4aa2993b55aeaee2c0364bf12f2cd46c270b14492fdae9c87ee3da4bc5c84cbb3962843fd90eab02a7eb6ef9fa66219e83795b468d3e6149f2048f343f654cd40aca16facae2d660d61a051204d65d85b37d66acd0af3d32c9bc24d12101f0901324d16e00858b56df013e83d39dbfff10aefd6952db93bb652f8a9e76242dcc5906be53f525904258c32fce865913a9e3f08efb9f49ce90b08eacbabe9addf9dffb0a4254a0be3efb462a0bacb07abad0942302c1f4f4ed879b7c7209210cabac45a06222ac0d2099b999ef631ea958d8458f612d5164e78559b7eade89372abce84cc8fec00d0843a7d47d3f9e019d14fb4a889cffcec2b264b33f00fe5e94d030478711473101d694aa95fe01033f4f810e2b72eb923365a4766b3700ae7e75383afde8d0ed247dc7037641673bdeae87b306f7d3155e6a07b384b5c2efbc8a301b73005c730775f2ba7ecc101b0156002ccfc63815eef07335c9fb10e3363366c5227b025692ee855eace34a14ce92f5d63104e12016b290cc5ef18ae63f26b5b6cee0d314b45a9bbeb6b10a751037a51f3c6e8684613a180463610fca6b12fa84f0ca7378aaac46dcf7799c86a6ad4344f45c7068700ee4f7a44b4a912bd04ae8775cc8eb48a0c3547069f51622037ceb2bac2c8e511b0a1e5327be8e94e82293b96654ce0299a0d3cbf34c6b3d615cbed21072ad237b583fe08a378e6d05eb54e83bc1c53fa34e6d685bfa284efa93d2fcc61ef81d398d96e348f7395b8f042bd203719237511dbd9569ef21e3cdfebc39b49334f0663cd02ae636e46425902679483f51b114d6c4baabac48a254937febde2fe092eb6777f854ac7101b813d0c36e759a9f6c1db2998c9c5a42d62808a2da55c383e61c093b80a7820f2ba85eac0c7ba6d285d278b645279a04e4fddeab1f6b9016ec2c27db5614a3f492276fcaebc50abdf184c00cda8bd87496ff051445b9e2e99062cb77f625af48b226c5cc02db51e935e3e06de598a9723014291cef9554e4424804048211965e141aed8fd0bf6934cbd02139348e2241cfb5d64a4a591871988cbfb232d4fad80dd68c55a6cd299b914682229d49366c53f4c6ea1802c5cb9ae63eb965a0253ad90cb22d67ec10015f7fd2508d5814816b1812a50c6d1d07edf6c42993307011f174dbd02a0acf5082565903d317ef657e94b0d31dc9262d5653a4c1ff60b636d294005f840380f17135debd725f4d2c7bbd6003165ffe4ba782a1853daf8a488330f7ae58497afa6a2e22670f92139d105e207caa653c5927ddfbfe59739b46b7ccb2738017a1d1dbcd7ee7e39363f1e5df95ed3b94d6e5981ca9a8402dfd7388f6d8f3c0b9da506d0b1482d6378b236d8a4ec39f8119611b2a72f942ccabd36e7df853a2c789faf04c4ebbe5795dd790908816200777805e3f882ea828fdd06ceee54df9107a57a69cee5757bf14eb585e63d6dbf200719314a4e40827b06cb43ba23dcf11d4efb1acea439321e13e39aed5c1640d4466f630e431eb36e660593c9ccd819ce447453060d1f6d3cbb2cad06a0145c8f7ca8a333c8e0f23372138da6f97e09d9f1049412002dca6c3fe0e60ee8732709ba66ba69e8bd2e7c382b3d86c1a3dddff2f6ba85af75cc2a85db673e4ea82a618a0e12afd84d5bf8cf2a942cdfa408d6dca695ae477854412f1afe381169d30521f1d3649bf9ae5d3bd4b1feb499b2b1cd9025b92afbaa3837608f1b8105bebf4daaf9aac1a692063c96c0397c11a2350f5c74ee7ef21eebc5034e3b4a060981f13c35e4f85de8047615b9abe4e2741202a1966e93aae5deec25ffb5db44283b62fab84b38a1fe94db76c96c1fd234488771b224bfdf6326855771500a345b06a2171ecb07c811ab17b87016f6476e5ba6b39d370c5066df68273510a835cbde1d3a37eab00fa1064aeb33b37f9c9140e605b980a53379910e9441b3c2b45db8f3a8ead93662b8a7f166b756e71ebccbd3e974be41c8bba0d5f9cfa36b1cdcf7842eb92c72b01d5fb867f6fa654ab60216fa266b981366f85c578b09bd51d6b95235a0f2e8f9aa772ec55204a772d41521c74fe4267206652b52105efeb32949314741720acdbbb16b15c32a78b1bdc31a38cd0d7bce222935530433f3c350efa1aa73cf0ffb05aa0139d73de6e8eb7b0d98d1e2bac6a40269e26284a7eea89bcd8aa426ed4c6d079e111b0d8dc849da34cf06f348bf159ab5271d4593303cffff4dad43148cf4ea6ab1e46d64afeee868a3444f21569a9a2271ddd36707ccfe5558be1d372628165107144514b88a686de7d414e474ed05648a081badcbbc4911cfd7984192e76d64bf60bd6f58fb9fe4b88f05bbeee74475cc335b9b1d8608ac6af2592ba925c539ecc448836bb97d9e55bdea3f14c9627cdc04f3a17da985144fd8e6554925305418534c329b4a42f69627ca7879d4e00633079468bc4e2ff306edea0a07d7481bd402bd0c505352bdde46c45262032353464fc629a651095f7c879f31d6310a641c89711fa3f74d1aabfb07501dbf26d39e93380b3af0e42f2131fc755d251d154320acadbaeb31d20f53805f805bad59766bb72c6d8792cce3152fe6e26aebaa3ed97f6ea809d9adfca7984e0054ebf65c216c87792dfefb3b48aa0bf4955da6cfdc0a204415feada0a0504560661a018598cb9762212e15df4af353d650e001e287b2acdb7b8344f643a7b0235dbdaab7c12cae8e98ffe959ab11ad8945770f33a99ae8d9eb45f23f9e1cec3f8b0d2cf3316e63878d1cf61458e02d2e29856469400f793016185edca9fb8e39b049cce634a2ea55cdc049bac361fe77e560ff2457a91cf0f4e10b1dda5b244873b462704d7558692e7086c112086250d88d385b4110088262c4e4a77270b0e2a7fe8af93870b0fe9bb8714fe756955cd8474808a9f44ca1ae5385cb30e5a02d36fe144435b2e8c93bf1d696cf8d6f55ee8385485306f5b3269b918dcfb0fa2fa9ab68b110974de02e87d6e3882fdabc7774645f16911e2192ee70f0de05c74504540a9e2f850161336a5c2ba51de33f092395072856a9a05a5617d47b55a4a40f10d99bac5eca5f8d229c94354062d49071a27421d587bf02ac6052aa6aad109c37ed5964137397d508d835fc265c31e80b10bb671092bede0a3177d0071ef4f216ee843f7af18d6724b3e43996aa88519fc18274367edbf300b047c3fa56293e88ff0ef9ea714bd4f7d7f7f4b37cc28bbd2aa4e8da780e2454e5b105030887a96a8e8e998c3158fcd0913c0894f57c5b2e0843cf32ae0bea99caac2ceeca8c39c80a16e26d6490c172831f062c7c60cd04a64698a937e00983be5710352ae15ca095e107c591b06120233d0033d8a82522325fbd01e804b8f069510a44536e3d1cfc63b75da5d5e1e86467be838d93902584a4dbb27b1fbe3dbe84d0a1250330e99d57141501734cfa422b7561085c18955366b163b304607c053706058055a84317d58d8038057c12380d013c1d7022c00be0640130bdbd3069626c345ad8f61d44e711e9e89500530700f38421117d008c978382712e47085f107210fbe2889e5325cd25104db1881ef464e39208210b4780f20cb98c2008903d28b6b083008d8100a193127558d2997198c55cfadc9c80fee01107193c105a166b6ed9f14b658956954aa5134b4c9968641408df3a7d2b1703b7a58942f322297da52b107d64b1321458b64c9819fb8bd1b8caee52e56bb005c984a72a337789b3cbeba8d1e194632bbb9267117987bf83796db3e8c677babc4ac2a93a402eaf5eac0a60ab15325ab26dfdd31b2bce277017d6e866c172e13c023c2b779edd33e2eb1959ded2f771d05d739c0cdd4a17e138dba8a9a57400b29ef6e15318fe875813233486c5ea4fe3eb049a91eb546e14a89e9edf34b600ab63dc41c5212bc7c9ea258306377f17cc83d2dd3e19a2240694129c8432133ff313507181277bcab1b03f8f501024274b87aefa3f56515041c619a089cf14551253bc7ade037680e1fa57ff23871a623812244784c0e8b78003143617016b33d2c14812d7cc421aeadaabac01a7e41ef65414cee50e19cb5a2898d0e2f26a497e2c97e2278d2cfdde44df2eba3079d60aa7ae3a93b59a91b078e8d470f06f0aa7dbb52acc4ac4d4387340cd82cccece599d0fe725211c0112621c62e4a61ccc3a5302cb2ffd59689e723561759cfa5cd4c73f383a419e60fda3c9f541a6ec62cf5286b72b0fe5c4d82eb292d0cab6102a4113ba780bb6d949f63875d935b8cec55b541be9ac96047ef522d83aea45ee2bb6656150e6b8ac3f956077ecaf477652021479be6d18b1bc309bfef38307843c1f12c320ba73065b42698c6967903e396c1949d60905f58327dcb50a9a9cb1dc79091fc80932f019b67edd2f725bfb07eca0070c4e67c5d3365423115c4d77fd3da27fd9d0826f317b9d82c679f32f71e42593cdc4bf72343c38a51e32501c8a20894bf7fa70f9dbaf1a08c570fcd9442cffac887d0ac0ce470b457c5c0c09a659f278dea8daf409d279cfa6a35a25390b470f2d10a755d91169587171d3e7694e982afdcc717ca8645b180fff3ac0ce7a435cb652d28b5e583cff5f8f1bddb7984eb01baa44274c2dead71216b95149506af0b173087cdc00abbb198619f3c522038ce63c4e005f235b448053e6f620256940d9669533125842375dce82cbd47641a532a4bae54081bbda70b2f98128590e3dd6e3bf10c6ffc197561b2ee3d3f622ef93e427a0cfb9f0158a02cb076e509779c21696561819f93455913194a1a61e2f51f16652663871664789be971c9709e96df304ebec1ba526f047ea41e89b5ac16e1631e5c6cfee94503f0f4ea742209de95c2a17b9fc10731c4a1c5a74924ff8098edf9f70cfedcea6598d7537d7ef26787b4573ab0432bc316b9700d5db797d61b374cb69334e3e3f577511e57d90cc4e8efb099bc1d0cf7241815244ec17d5ccb89f3fe36c2ebbe11a3e9a899a7384840118448a96b1179c8ce832e2a75ced197f8b39cc381d374251cec2bb998ee861c7a9890ace17c42eb8d3ba723ef032c5f90ef82e3fa1c2da394f20e3b9ec877a7793638423d5921a8bbe7971b16c6171af0d30c385cd4867ff3f0fea94419ab1aec4711d05692265753a1388175adad03e7873fe940064ad06fb1b2bcd89b35280f55114362ffb57e3447484dc474391295a336ec63409548602fe74043f0b3660b46439330f0f0f0f0f0f0f8f14ce6da8a41dc21692949244ceeba1cfa494524a2925c1998983d3192ef6de846c4a7c3a33f1e9bc04390b410bfc0aff598a6e62b957421b0a0e3110d46cb55e2c1d97557103471808174cf96e3a25d6dc34708081341e94874ccdf162294f0046a1c009c0285ed4708e2f105ed48ecca0a2bde379060e2f90452b5a79d2cfe9cee531707481f0396f6f7faa186a4d5c20a69665aec61c9f32be058218b13c631b3070688128426e37f66bfdbe2c90fc4cc677becdd3afbac08105e2686852cd3b42fefa2b9075cce43205eddeb95981a0748a9f829d8c7fda5d941b84060dc52a9484b630f31b10705081946b357cbc304fe1a4d35498dc7d5bb0a9008c1ae85220c5d2313c074bb17505405003011c517884d07a11800d3820005d7451bcd0000d1a27ada08b2e8a17c8010552accb8b2d3a4386a4c0f104f4ac3c3787f2790b4e5cdcd8c020389c4052cd50af39b85fc6730bb6e6680229fc3fbf372748098ce460027146b645b114845e3c4da0ec3d8063098a0cd59fb3bb14038712c81e2d9cd2b727f2c4960472ae9c32879612ffdb692f7020c13cf9b11652b7742c28377a071c4720775e961077bd2376c4050e23d45a71549a3bf96599a20f388a40dccc1836f5b7a5db1db3c041841b700c21f95cddb7319806d500a3ec1a273884407e4b328fcc98bca3f7001a34147058e00802416faae7609d36a5ea2c9001d405175b2c80c613388060c5fc296e10a36af3036bb7bdb773d49207f920fbb8ae4b664199dd8383ca8d1944c983a3edc5b2a8f11df8a5f5769e3227257b1d1817aadc7454d83607a7e83cb7bd295f1e078618b3d4392dcabe81e1c3eaa5a464834c530cad4993cc6b2e406509505501470dc8377ae3dba2602011386840acfd7c9197526c78ce2c48965a573ebc445dcadd486140c04c08316441bca4df62399ba46b4e2c48374ab5ec740c1362c082f4a6319eeec595f6ff0ab2e78c7af38a1125545790345e4c59a233878eef5650c32b09315a411a4fd53276492d799d5288c10a9216d51a5e6fc3fcfeab20a5e49d63360f9b5a4eaa20db890e1ba9fea26f2a889d6408e51f3ba820c51834a69aebd728fd2948b539ac47a78e15133245973fe6e288aaa02a28483750c00b08c00234c0829281bc83418c52902d87560dd5ad1ef6430abb32eb362d63f44ac63484c968551fcf428c511045c4e85061328ca945144451ed184bd3dda1207690e7b7c9cf8a010a529dda91a245fe09521c119a9257e5b10df204f954fe59ebfef4fbbd13a4d231e7ec3c1e325fe104d13273d68970138471cf3995662f7b689a20855c7fdf7b6f1a35d620462648def1cc32262fa51b61c4c004b93c2f456576c5a0f2831897209fca8d5a4f17a14bdc802f1ad039c4b004297eedbe481d953ade2cb0b1001a345860e3c68d14c4a804f94d899f074fb9523e51829c4948f919abae30b1c79804c99326313a6e560a9e189220ff7cc5b8d2b91891205c0a7d3f9ee3ddba0f0962324dd72c7f8af108622cf1a9e2c5687bbe238839494db2e75bf5e16f04c17c4c37e82434735818411067ff95628eea1c528db1888da108620c392afac51464fc54033210004b04318dc614b7b3a553c28b8108e2454f3ae6f30d299f93108871085246dfcbb79db5d39b0c4174bbcb266349753f9d42903c76e8599bf60a6d2104f19458e535995c632a718c41902c66661413df9db60a82e4e7af9d6f0782204d6cefccbfea554010467edef4a5202f07f10fe450a24fe6f4f01ce6f98160b9949c7bb20fc44f9b39262a8bc10762d2253e860d6df72dc61e086f2694a5cdf5d9366dc186bee0e21770c3c61661a820015ed8b8d1802fb868002862e881cfb9cce781ec299e3d5c7d7437e181242ae6ec386fd9fd4a77205e3415cdcf7289e9203b10fbc2544cf2e3c47fea402e99a999de3fdd8f850ec4b02df3f92d881f95cf81143fbed927ae99f32d0772ce529d4e6df52d8d03b17c5e465fbb0599311c4842f97aa6a041da55fb0682528de39de66d41ed0672de30bb1f35f72e986d20a88d0e1eb7a6f489d840dad15bd96767a672d640d2febbea9159b48aa806f259cc394b7a54d04903b1ea44997e7a31d040904df5d8c994fa2f0f10e30c04fdf8c14f8792fb983703593c6c0a61bb71253c65209f2eb519348b8553330619087f97d38c307f0c84ebcc39568a1166e305c440b4b294548ed20903f963ded09e3c6465aa602076c6cec624fec966fc02393573f60c6b32588c79e1b31b9d3167febb40fe4ee53b32a598f27381709ef4848d4ccd9dd902e9ac8310a64eff7cf468c160aa299e853ccbc719bf506381a45ef1664c7b0562e74ae5a653e6675ead40ce24a38986355719b30a048fb19a723c71fe79a302e1d66cc694fd5dd753205cfe8c25322b2990ab721232a831a1578d02d94299450f4f39e9d44381a4b9f6bd73e5d6faa02790c4e47fc9a4928c90294e205c38dd63ba443694dd048269cef56c2394662f994012f2c327718db17db404525dacb0a264a46b4509a49c45761e4f51639a152309a4ec692ac6fc9e478fc60831904090a7d2b7ad765b25c53802319dd7755a13cdb1f322c4300271d63a580ab22ba50c728c2210763485d1e4aad94528c420024166110fd6ad4974f6219052d0e69aa2c828285e600c21a4f23b55ec3a9562fc4138ff3a7f8e680eff03a1f7187dbe6653167dfac1b65b25f48350bf94e48372ebe6e7d03f5b21d403fff2c42a5687cf0f0f8e91ed78e2e46707c6381d7d54deb5c68e0eb0f00e752eda62f92607a9b3289e4fc59c1a1cec7d9dd2cafc8e6ecb0d4afa2c85b51ec306c95dfef867329b9c1da306fdc9a8318e789039060df23cfe751bb6ebfc9dc53956c66d4e596031abecd2076381cc9fede6d4c607ed605106b7f8b5d42b0c96deeb193e567b6528285e600bb47005f1ef44778de98f7fe902ba9399b68260a17539b3f3829f300c5ab082344a63bcf9ce166c2ee802052848005a000d1a5aac8254a3f92fee5185d1782d52c15a6a8655ba768e69ec688bf06c6723cb400b549c16a7206fcc294756fa16d9182d4c413699ad773d8ce820834a417ed1a15269b320eec52268410a6288536f4a27511ad6340ae26f14a1b4a752b5b428889d64cc4341f44e23a35d2faac6040a82b6149e3e29716baff90449a538e51af3b8880b79829c7db38c4acb3c376d27bebfb41c321b0b82169c20e9203f6741e583b29b085a6c222165e48fe8aa9a206bfe5295d4471e68910952cda9d58d113141b6cb1a63aa2d8bfd162d2e41b2aeb4d272a1ac84a98525c8d51973e7941f66f35609e2b5e84a751535854fa104497685afa7cdcbe1d94990fa44a818a6a559a7bf82169220eee9dff655058d1b57418b48902f3bc6e56427bb3385a00524c8b1a46e56bc9cf3ed7a04413de51c3d73ac92121d4152b56a4945bce6d4a646104dae7e8c20683e1946c79cf73a3b15b4580431c807cf9dc546ada88a206c10267d53cc3ca913fe408b44102b6eac677312cb27a216882076259d949acd17f78452d0e210041994f96bfca5598f21489e6edd7355c5cc7e8520ce5f4a3f69aa2943470872d229bfb58cfc184f1f04799377c9c79bf6340a82945bb94f05692088292fc9eb513e2aea020892095d162c684ef76dff81183d8c744ba2225fa21fc8e994d020afdb3e904574caaa952b2133e3034988259bcdfaec6a730fa40f42d343be5e7a4bf5408a1aaefc377a8a39ed3c907cb3c7f0b183abd98e076248ab3f5333ededda1dc8d62e7b31261bdb0ee4d74bda349c3e5d49ad033907ed95f64eb542373a10744a4ae9d520e78266732048518d1bf264aad039722096d8945325f70e8b721cc82d52c73dc5fce66be140cecf497ee6787a03e9626b0ca23af7f7aa1b48613728cdd8a154456d20cf675995960ef15eb181a043c999939b3173456b20f559e67ca1c682ccab81389f31faef4def3f250d847db1a42a086539470b0da4fcac793fac666cec3390e4525b57eebb7e0ccd40f82436465ceea679ba0cc4fc5417379ff6717bc9404e4f213a58aaf8de8c81146f963cfeb5a6939f18487d419be55c6a8d6f783c630b04d39ffb97add702d96d3ee9253142899cb34030e54938030be69ccbcb9dce9d8c76877c90dfb8ae7d535f81a08285d258417df8da675881e02163ba3925a5ad4a5520989e59665081a829adb79212bf9771c614881a3c456fdb850dedce9002a9777fbf743221840ea3404cd2ee32686f791a0b5e0a664081dcafa3ae174f94c18c27902ec53ecd65fa54d4cd09e411a7c464eb5efea4d204d2e8532a08d3bc59fe630261c3d45d0a6949c65d74c1c509b0063396408ae6dea9a9738ad2f7bd608612c8a33e75fb2f5ff8ff809104a279c79c2ddf2e064f420249b42773d37943e5b98f40d023eb7346e8ac508db9608611c8f66657a929a84dda8430985104a2ba099954f6df74be296cc10c22902cd7a88ab9e26cd2417636660c8124e5848cf942de824d08c4bb687af2ad47eef77a60cc0802419afaf87825311d08047de6aa72df7649ddc58c1f10645498ba4cab7b31c3075ddc1e95a007c4349977ac3eedc364d60433784092fd9c9ec9520aca53521860d8d882ed04337640b014d437e9f89b67e72dd84a1805d5b81b337440ca5a22fc83e933b19807bc0d1b372e8096b8b811862866e4808bd1dc3ed94a1f2294bee0000d1a60988103623c8dd99a2b9b7a5967dc207997b19495e3fc3dc3067cb7ad98e6c575785c7c9893513ea8924d9541cca801c184caf837a7e2656733cca001613d45a977e765cc82ac95bf04c89005e97d4dff490b4aeb69bb90110b52abed86be2a65c082d757b50a3d3db333f3686b96dbfba47dec1504cbe7e7a6723e7f97325c41caa063106759d40a82528f4f4295dcb41b67056966c634ae5526fdd62aacf572adb80d6d95bdd4b1782e32b3552f84b8204315e4e8a97370bf59d1b48241462a88175cfc82ee9eb93e1f02619c63820c5490e7b494ce723ae98c4cc6298862ba34e8144fa62055697b28a91619a520c7e952d175546a4d8f0c52104ca6da20dff3324641d07974f238a9c9100531f33dc3e76eb6654f4628c8b6f5adfe9fbc4d8c3240414ea72eff58da647c825c1d7af1b27e315649862788e9da34eac9743125ed0431f7ad5789ae657082f0ad9e53df87ccfca08c4d10940a42c9afe8a8eccbd00441658bd3171d3ca88c33909109a2e96a31351e749190810972ce16644c7d9b3e177a42c62588de562a7c5e512aaffe850d2e2c41ecda1a7d1f645bb0b50d645482dcb97a327dd6543294810c4a103ffdb6e29cdc4faa7137903109f2886ccbecfd5ef7729d0c4990bad46e9120e54e7d29e7ac6d830a04322041b820a7b496d82a1392f10882527eb1996d3ef32a8e20a9cd7f66fa76cba06d0449c8dcd88efa62d96418412cb71af951d7b1d31606198b207b6f087bf14aab7d51043145ebcc467f712b2d11247142e9d4b569800c4458276a5e61199e5623625da75d464c28a58c4310ed4fa58b1bcf9853de10a412ffd96b9a53d2f81782dc1d3cc778c958cc9f10ad8751f1f4cb6910e4ca71cc7dc564981a098224a386dd6cf549761a0582a896725be4b243590710249dc4b66d5a7ceba8fc81243fc52bd531995295e207d2a68f2bd99cd94f2e7d2087e5a82acb494de6381f882f1b2b9ee7c2c4de7b2055b46aabb3b01e48293d687b8ce12bcecd0331a555cebb1efd935ef140bea43587af8e8fbbef40caf094b5528a39ef9b7620dae92c134ae550efa90331ad0511264aa9d8d6e840f694ca2b6950c99803697c43bf787ce540be2fdd3128a5e1938a32e240b012de1fa39ce040ba2d1d35a91ca7b5936f209d9ef0cd78a10c37902b466dcaab3d317f65b481f0a574bf9adcc7f1940c36b4b7a759f7edd59e3122cdb289fe90abd2d61a085a54aceee6e03e42861a08273ed858de31a1f40f848c34903c3468c878963e458f0c3410e5bc4f96b2341be78a40c619886f49c5707fc27f451b32cc4096b1cefc2e1d64cbbc2fa30c84d94d53732a7f7e723210e48f1a5949c4290fcf18486e3dd2b3db97b66c648881182c935cbfd39839dd32c240108f2244a7ee6c722f20030c048bdf9ba58486bccccaf882d138195e2006b7ce395a87c89bad0b867d586890c105b20935252daf8acc3dc9d802f93627bd18d3b4409c15e59dabd9eb5d65e1cad53badbad0d952931ea64666101b36195820e9f71caf1bddf060cbb802699368fc29a5da34465d0110d4b821c30a04551b9af1eee4c66d32aad078478f97b3fc0dc840005806150a79abad8a6d0babb4fc13ad3163109654fd24903105826cb86f322f4981bc963fddf3ee6bda5c1488f92d58d01e4b0614c8ffa33bcca5e440c6134851fd4fb442c4fa979c40526a37bd0719b18a9626105452a7477dc518f73c134841bb8eb6b0cd12c841df656b839bc8b85102316dc6747f27b71df62490e36adf32b56c67a89140f4f90ca32d379fd2e91188a3ed3b74b2d00804f1397f17565d1a74452046d1b15c3e6c9aaeca6b208308c4ece557b935c8fc6342808c21106f73909335518dee0b815862fbb72cef57264b10886df19d264a9dffa58140b4d09a72a9320dab2e7171630329e307c4cd566a39aae90362cbf665ca9c6999b30a80a0c617327a400a8b31ffe24f2fb3c20352afe9265362e29f1d908478b7d798eb929c57860e88a59d53ec183bf3543207e424432915f6c3dfa78703f28b6989bcb48d1b618091104fe06e40ea2aef3f59e3f57db5808b77193620c81e8bad23a71a102fac5336f567b57ed105c8a0416eeaee5408cd82ace521d3e9cd968e9105417beefa1dbdeafaaf0b1b35f8021cb1e05f53ae8db3a065db822d8ce2850316c4bcf28bdd25163b9f30b8b000c72bf8d17e2a449ef0aabc2bfe6a93bb1ac42571b482dcc9d23667ef2d38588159f618f3e9bcb3af227549674fd92023b7a982204798ee518d399e8a49053976be7e0b0daa46545041d22985790e3aa8e8d09f826879a2d772e852b2ef3205397acdc7a653b7304aa520e7af0e39eabbf7ae430a722e65b2d237ecba864741cad0ce29685d914dcab31405b9fa52e6684a7f8d9a5010af2ada5fb0c0868282a06e548c8a1736e9763f41fca46d74103b1afa4d9e2026fd61afd25c2c27752748d79f2ec78be10429a7cb17192de9f4d9de044955fcb7f4b2210e4d9034cf55a9cc4b7d7aba61a3466682b4754aa67a6988460d1bc08109526be87d06d79434fd5bb07981a6018e4b103c9a9275e52193eb450a830baf008725483a9ca9a49436008e4a10fd4fc8261396da5bfbe2860ac248376a7cf135bc00a3b0a0460d1b61202a808312e42e1f95fa84ba041c9320954ae2f2897b244176b1586dcde99fb13c1c9120475175c2dac6d32c680b30ca1623e08004313f6edaf6cc19b4f38f20678d9b2f9e68f8209e2388293b5ffed78a1e9e358294623df586af5a0d1a46104f9ebcfc41a637e92e82a06b41c5281a16d3e78a20c5519fa4ad0821d6ea00472274c08108acd34ce4fa5dd07501ce71080e43907637e8b51844852085cf71ce2ac88d1e13020e1c83208e88f970377fb69e710882b49755bfc33ba911f3fa812310a4b6be56fb53cba19a30700082d51a1936e9bb85cae21c38fe40f2d222a664836efa770bb62a2b02871f881b642ce95095f581245bb74f866ddcd905c0c107628ce66d6a4a6957b67b205e6ce9f4eba62ad6c7a10752e54b3acc7c98d3661e50d1c39d08a5fa2b27e161cb1bff112b95a23b70b9840e16bbc352e562c06187743ca9f773396bf33a9043b473d58689830e244b4969f2cd391c7320bfc93f7d212c7220e620b365990ca297837120e74eeea33427f79bef001c7020d97b16b1aff814fdf40672d2243ab2a17603b1946ceecb943203471bc899358e5d7a28252fc6c106c297696ed12ee2bcc31be0580339a63291b7943a8d9f18e05003b1eeb6efd2ab35bae84205cf13e0480341b5f3872a152b58a58b06c2a9a4d3e8346ae9749699e30cacbdfac9143cbb12e030839d4ec6147412e2714b7094a12cba45ceeba724c48a02159cc0868d2eea46c14186549b681115c537a9f88a82630c01e9871cbbca2987ec900ac4cb61a92c9596c9eda6b05a67deef9cf2900241db66d90bcdaef8f0d40b1e51206ccae1495fa886d6a82a1448daeaa3262ba7fcb79f4032b9ee9a72c893414baaea04727a2e13174d3d9e2b16068f2690ccb2e99b9a4e4ac5c504625cbb07cfa62a782c813042a738a273e9e8d6512590fb37ce84bcbe54b10c82471208734977832cdd4ef9a28a04929acc303b51de5914a08571c3c6055c7083060d1b781c817cfdf73a9fb9c2872fad03bd000f2390458432f79cd3b546511681a831b8f5ecc6d238321e4420af5b5fa66ef73b53185f94dcf41802d9ad6d539a8df1f26d908d2dc24814e0020509505b81da0a900c1e422096fadde07f419c5c90471088725742b6675485071048f9a2a1bee567165a0d3c7e40bacaf163bed8415b1e79f8c0bd20d73eb4cb60f0e84172838efdb3070f08c2e5f267b7ceb92e89060d2d78ec806c39b89a0c7e9fc77b1a34c0405d242e7eade0a10392e7fcaf76599faa7345f0c801697ce45a7ccaf14a6d7241183468b8208c7b82070e38754b510f31db117391dddfab182a163c6e404a725b5c84f81cc6743c6c4016ddd1f289e6cb375f5a173c6a404e4a96a9ad58b9296a3c6840f6b417bab4f8a76cfe2c08bf49bbf3ace80aabcb82704a89fb54d51447bf1db120aea894eb5f6a072cc87927be73a664311fef7805a9f2c930d5abe63ba62b48b571329e5d92d3933b5ab167e687addec8decadadb77fee96f0a2ace0a721ef5b1d6f2a5944b3b564114594296109ee4abbcaa583b5477bf53d44e8adccf6f6c8c5f24d0910ab209556e17636ece8bc5860e549054fcad4a11d919af8543c72908572a9ec812055edcd8a286d9175c942d16c023e8300579e49397a7d4b3115b0d1da5206f7a4ca734d9c5d8b983142411f1d2f4b9da3fb32ae81805bb6db3697399e1d96a195eea3b6a988bade98a829ca4c7144579d7e67b1da120474b2ba2f44aa79c565090f6fa64377dde8aa5fe44faffa379e23c2a94b6f87fea0441a94d294ffcffc2893a384192d39df26564ccd62648a34bf586d3905d0fd244622f783613ed686b857cd6db5ba9e8baaf9ab40313a439ed0df37c765c8268be1f83e7fa2d4150373b4ae8584999482b41ecf4498be7e8493dbe0e4a90624e494c89bb946ab4b8848e4990466be8ae6c98590fea908422e372ac2312a42b59c16498ce577a18d00109b2e878c9457e7deefc8f20254db3d7a95365f8aec311e43fed95d365f7dabfdc3582d471ed455bcc8d72cb1d2388a73b5a6cc9d8239b74b708b26eceebec3fb2daeb3b45903ddbc55c21b272dcec5d2288a12f28f95c9bd3dd6fc116820e4490e5cdf3ff54b6fa797787208e32af1c6b173562d735a1c310e45cd9c2b3f67b8e92bd10a4f05d339d9f512ca762e8200439d97c14df13252be51d8320f96a0e162a56822027b9b4b2d9ae8e40904bdd8b69f8b5907b7700829ca6e3a5a6a31d7f20bc6ce668b1e2e708911f48a3c9d25759dbd1079227d327a36b52b4486f071d7c20ca96f66ced9b6c33dfb107e2ea451f19ba2e7bd63bf4401cd5b4f16ae41d7920a75d3cb58f1d1367eac003d97ea49e7aa5bcdf483bee40d298ac548b50c13d7a5bb019a0c30e66ec689b4ca96842a0a30e84cf29558e5bca2a5c9e0ec4609ab66395d63107f29c3c6d29d47ab2cb74c881a4c4a69c119de9f4ca1d7120abda6625b7df9c4df7ea800349cfafe70f0dea780339aac6fced49750371a3a766895be9870bb1a30da4f50add6ca33f29a5845ae86003493c55a48e8f4eb9d0710da4e42e32758615cb14d5400a3a698a1f6df7948a55a0230da4533a2f6466b5030de4becc7a3ac4ba2b453bce40121b7395596fcaf15b153acc4078f16c66f1d237b8a70c244f4af4bfc52b6d99769081ac95f308bfec9b0a1d6320a953da398cf23c99f6287488011b31ea7ea1230c24f3b14e1f4dfb6e0e838160597b298c676e50afe30bc4f6fd4b7ac233078f1748d2fc45abd653fef3bb400ebd9d428d9049cfa6b8820e2e10f793cef849864b42e71d5b20a88c265b3d63ff695f0b24f54e72614fe91a0debd0910592deb69c4fa624d62a8805c2e98e27d4fc1c42c715c89ac32f6a55e7d3f108a1c30ac4d47e19d673abe3dd8e2a10fe54dc3c0bd541dd0e2a90936d976691a18e29103cbee7203ba8c5a0b30e2990e362ac742a994ac68b02b9d2a3976fc62c5ab35020eeed68cd19748a4ddf1388dbaeffa929a85c4274027946dbd673f09a4090492f997e4fed954d269035a5d0315db7c3e86509e4d0c14aef72ccb3684a207a50ae6fbab4a58b195fc4544adf8b1112c8a31d3a73de1c45eb3b02319358668e331a8118a69479ce78d94f488b40d4cc966fcc626f784f047227f3d231c21f02499ed5e8fc09f9513b2190467aa6d867f9ffac0a0251ac52780aea64a898030239754aa975c1fa01c936d435a7d6a8cf241d3a7c40eade18d46c10aa734f5bb059a1a3072499212fb65a1242cbdbc103c2dbfd7ab478c70e88be1e36a7bb2e850e1d90626bb82af575470e4829534c6bc68feb39d88103f268937131c5c94f32a9e30624953c74941d197b36db6103724e65e1d77476eaa0efa801496e73cafa2b425e841d3420c8beaace7a5a5e3a661604297be9bed4ca88d864411a9937fbea7f624134992efcae79fb470b1624213a86f2f4b627bc7c05b19496fa5b6f56d8bc2b887b153f9e29cb2f96b5822043774aab0f7de1152bc8e69e164f95ce5143b40ab226d9e5a97b6346bf5441ea93b30c77f99c9b4c05c9920a29ee1acdfc4fa820c7ff18ea62d5a720e52445bcba3ca620584e7f4a9b79a5209f058b7fb14f5290ae7eb466cc29d99976140417b5bb20d483485d4541be4cedb135eb8c8d150a6225cb7b3a57feb89d838228d22fc3d77c8e1ef513e4b09baf0d9f7982d8d59f45c5ab77665127c8253c433d83e9259b132473cd12bd14dadffe26c85146bebb8c1ca19ea309b2ff68e65e525641e63341b4e817deff799fe68409f2898f539ea4884c994b90c582aab67c7ed52c5a82f896e13d25b5578224844c4973945893969b410952f4f49c6ef59c310952ce157c6fbd930449a8f64afeb7ab5b2a8e04c1c22d275171ff4a21489053fc8df9756fa475f811b50571756a396fa323484a99dc07a5b1e2fbcf68c475a3523ed45cf41783198cd0b4b354d3bbe3e6e2d28286ce7829cd696dc622086b6ae3ae54d2294a9ea108526779f31ca46729a1930862f9e5bc8b1d460441e357fe6b10ce3804496dce29ba7fdeb09a6308826a2af9a653c5d5242f04b94ee587d4d39ff4f88119842069908bbd2c9d42d41f04415b7e0c363f2efe398258446891090459bde46c987b50a2d28020c7e6f7b861ea3f104da5fdbd4ec9fb56f40379c53fbbc77d7d20b5a8d878d6152c6f6af97068ee7588ab66c6c89c851a2f75b2a25263650f04392a86ed96c58b3aea8130967a9e4be376ee280fa4f54c9794c7080f04a5edfe4fc6ff31d3b903f1d7dc43e84991cbd70ee4b061b46230e17eadd681545ae6cb4539830ee4dd1cbdb936d38ca9ba46cf980341fb64cc100f42635fe44056df0a6531d4a9d8e919712098ecc68e4ab539057d061c4a7df17f62c54c0bc38c3790c3064b9a84fb9adb37c30dc4b2f6ce984b847c9f2a98d10662f8b87522f2a1737366b081a03edd9390232bb6638498b106b2e6558cb99ea10692dc788cfbceed79eb196920bddbc698f2a6ebbe9cd268061a101e7350d128e28c331073f447fba7efb0517b19016698c17a8f17fa39576694819445e76eb5532103414f33df2769223d68c740ee7ce2c9bbe6bfbe140329bd679c571299cd6818d2d65213b5182f8b97cd34df7caeb7baf9eee281196020a9942f465d53f273495f98e105a3915fcce802d12a5e8c30b155997510667081d81e844ac2da88f1070453cf953b4234ac320ba42f2cb00100f88078ba15c35ba9790200e801d9e73dcca72b2b193f0e7c00003c20e9ff98c33cc84c5a9d1d1037fbcb95a5bbfba0921000800e889f9ed9e6676e3605e580e0796a195e5b33eb8203b2ae59e7cec9007003d28c96534d99a4264b37006c406c4f2f6a7c4d8c28930aba483750c00d801a10dc5de4ab6c9c6ed46041fa624d0100a00141c5fd62f6d65b84512e905b845150902e08e3f26316a75c65acce59c8cb5aed8b5bfea53ba1d3ad5b84114641c1a92c48e1e316935049f56475147cc48220dac742a511b98005f1c46afaed1842cb85af2099ce9a8a6b2be1b2b9829c84d241c6523335885b41b6a0947f991c1b1d463dc1072b88693f94b929fbcc9ca2093e5641eacf5129e59d5dd8b061baf85005e192895a4f41dd2efd54104e7ff6a4964ac57bd3072a88b9212e6fcef9384556592ad6a661ae36ebd9a683a9780ed99d17376c3480060d2f6ed8781a349c3f4c4136d99542a8ac30aafa4729c8224677b53ec75f0cddb051e38b1b09026c37d21715f8200539a8c7f0b932c4abe94641b4bcd84175f07423962808226fd43585d2b8793f176180a1821b35c0e0a20d8c2eb808430505f80805c1f39265f53c96e4ef4f0c58c10728ca25222ac3f809b266ea3c1a3b8519137f788270fbf15d65646a8f4f2748761b97f2976a33993941ccbd60a673a9f2cbb94d904a772ebf6cda64a5561357566c578eb999c6d9f6a794274667e4253313c40af53b96b4c65c168409e2c651af563a2acfe29720069576eb73898ab1694b9062834a5582143ae959769ebfa64b0962d0e371738ab45839fc9804f1d35a8d8d5cacb8a40f4990e297e92c9bec54bcfd880439563dac3ad75d4f0409921056224cc61462ae3d82f83936ebea5c4a72764790cc6307d329bf8f46904c5688959b9d6c2c3182b8b939de3eabc68766112425ee5193bfde667a8a68ecbb4cf7ce5bacad36437669c80f356a94892009bd99b4c6ef882075704d7f2e9fff22fc380441bf87f4e4e92d3726ae616a8640e5dd6aebaa3b77b7cc5474d48cae0220a8713e0a41ce562273cbaa85999f10e428aafa9abefec2061761941b79617cc1858d0bac99e1c720c8e1f39a8fca7ab6210b827422338a2eb370bd270d1ae8868f409082582febefeda0e10182dc29e810eae3891ff13ffe40feb4412c4fe53aab7cf8819442c6b33acd397b6c3ffa40321d166350f1b37cbe3ef840f834be3f962b3c8e650f6413963f3686fef89d7a20e7ad124ddd9a8490f340da4ba262f64c32668b07f2ade5ed4d31c9f97c07f29895690babdac12ef3b25dd3daae243baea542752056956daeef14e5632de1830e24d5d5a0478ed0f8fae6133ee640b22093b6a0dd663b58a0f02107a2c9f29841bd1c07926ceef4bc25553f35389072ca31535d73a6c1c71b88d1b36a4adb96ed3c3fdc404e2a76ac8ff16bee3f193eda404a1b6f2acaf8ba5eac0220a861e3830d84f1cbb539768e1a468d6c2c200e1f6b20f9a9119fed92e7a65bc3871ac83166e5d8f08eaf21c4050a4a53e0230d24511b6232cc6dffe66820ad9abaa46207cf23376720e6f46ea294fc8feb1b3368f77adf7abbea71bbae62fa61a3087c9481a4a3fac9ff58362a5bcc0719c8fd7d5ae4bc2e87fad0c718c87771415f4f478f966ec1b62c0633ef994c8681a0f12eb4055b8d2eca173752187c60dc50c102c04861b800f90718c8df9d537dcc7f7c61394fca32d89538a50f2f9c5d1eb725aa5465540b95944ef24717ee830b64ad519f46f578bee4ad2025175ed8f8c2055dd8b8404a0de8db0259d3453799b35b55f7a10572af89cf1efb4226f9f9c802f1e3fa784ad95357a858c8ee454bbd3ef365e385ac70f2e535750592e8d81ee4edf39f4a7d58816861dfe4490b8d2905b10a84f1983f9ac5fda002496753464cd4e67efc9802394b658367c9bc5b5c0aa47e4f93e1a6f66ec38f2890da6cdf207c40c1ef8a4badaf4d53b337dbacdfbf98d1c2c713485931e5dd7816eea5fb70023155dc9e4afbe9d2cc3572f0d104f2e67b683ea94de08309c44f7aac64fcf2b10452c6514985b54aa19e7d28812423523ee6dbc409e947124821a631ec7b880452d88eb93726a18f23904b7da8cfd91d91711fc487118817636434ffeeb550fa2802e1a3a54d42bd82ed057d108134976a93da0ecbe16cc4219047a9ff8b66ff8b9d74337c0881b89ad7ac8368eb14fc2090e354f00ba73f20904bfc6c447ed0a449e707c4a43fc4a8b6c907648b73d92eaa427bed4df8e801398bb28ca1b5d28ce68307841bcbf9df3cb3c73d098c923e7640ecbce641d8e7d98b261d10a3e59ced693477743007c4f1a47a3ef755ce59e280202ce6ed142c87f49c7ddc80e4493e2ea87c2a9df83e6c404c79ad9ba727f45703848f1a90e4c7ab524a2b1fca78e9d42cc879412cbb3d6d4a3bc9822ce3a3e1494edd6d8ec51d3bae6ba1592f96b3b2e5967ecead4fe5010bf2e64b4a8ba7dcaca2f30a62f06c7bd245b6ece9b8826c3a322ec554f238762b3e153f693ab19615a4f49c2c97f47af990b6c72a0842e624adfa2c55905268d114cf522ac86aa9839e30eff797514198bf35cf301b3f82c729c839ed52a48fe5265f4d41724b22d2b42efb814729ee6c9d512e4ca5418314a494d33467d257d38b68f018053145550cd5d271635814e4f79c2b8b9d32355b28884986c69b9a8fe72b2a2848e251b635555dbd4a1e9f2008615b3255e62af5414f10b3cdf529bd974e908379d0797082e89b773e977eb4dc391e9b20dc6b97321da33a2ead9a2046d34d1d1d13fae3d39a09b2c79977cdf09dfd6205405083860726082a2dab676b550a16ede235021e9720e8d341e4786af468096c74819620579ab8a4b3a59f52096c4c202b5158dc65baebeb55d217365a12a2e1624e2528818d09a0c0460568d028818d2ef0461828f0a004313beda75063a383324d82f4ebae215acd4b992709f2e8d1bfa4a189044163901b4726a169aa820441c559d48fc12a647e1f418edeb9ec547a53cbd0116eb6c9cbcc5c88b6f9afe6e57a2835825c9df35f999cc55c1f4690b3b4651c0a1e8b20c6aeff7e3e53ca72c6081e8a2056ee4d9fb76f2a782482b0a7b2e599479d92d5161e882068d991e9b619c3075d0d8f431066736fac101a3f4390b35f84e88b164bc6b3bd42d8a5193aef25f2be9fbf2dd8bce0a20b570f4210644ee5f895bdd9900f8294445d45d5950a0b9920d2bfa3a21e8120db79781e9d4425b91d8cb2c5056a980b3c00418ea533f7f927fd81204a54b6ab91d941b657f0f00339b8db6d8c3dcdfa238f3e90b78457da0d3ff5d0e103f1446b669a7832d7d11e082ab3e7b42936779c8d1ec86165497f5e6cbaba1e7920a77abc8c4fcb5d3e1e082b3a4dcc6c1a2d29425cc3ee40daf4a77d1a63dbde970e185c78916807b2a78fa5fa92a7b4b8d08da20207745168e051076232f5a22dd8d250da028cb2c5172a683a90539a974fa74255b8c64e20010ab0c0041cb0a7c65a033ce6407cb7ec3997e51478c88118c3eb45cfdf6937db5c008f38907b37c64dba4173a3080e44591fcf17aa2cc3783cde4092d77eaded1f35658b871b08f29647559239f20c3cda40be1c22f49a6d10a7540f3690d347fe8513b37529b60682a5b3d8a333c860be76123cd4408c6eb371371647bd608051ba58802bc1230d64b7f86ef14ecb8ab6c07041b9000d1a35ac3dd04090a357234b697db4cc19887ad69e369994f13c9a81a8a35a2fab9781144295cadfcdc972f83cc840ce5aa146e7dc630ce451f2622ca1f9bca32e063bdf6a3edcba56334db43d6ba5d1698f309082b6b38ca2f60003694e5b06b558f9217a8f2f1063fb45477f73af2e797881a44d65f26049edd10562bc9a878e63a21a2f48f0e00231a998528c96a90e9db37d008f2d104c2c75acd0ceb00a9a0b6e64a0fb011e5a20dedbc6b3f0ca230b848b97f309f7ec5d158405928e71a47c7b3e2544e67105629cbad2af622a2561b10249dd99c70f532796d22a908c20a8f44e261261281087c3c160300c0c05475817a31310206840140ac582c180449aea0114000455321e4034241a1c20121a14160905e370300c0a06038130180c0a8403625058202c4bb54cfed19d1b62a84c0a467df0fea6bf9fcc38d33292ef26dbbb553819b211410703ee185861a40191c2c6861dd55d7b9acb32ac4c3c28e90ff8b52279b74e0fa8ccab0dd1a0263576cacd33ba3624f4e27259238d1de25a7719b418545c54e70448f1a246dacdcaa4d6ad32af52abf50ac22dcfae77719fdfa07175fd143087d9ca3b6bc5306a790a4af449765d8a15428010196750774184758a7cc57b898e8826bd2a05df344ded016b9946fe6035c674acead59cbe3efad583aa9b4942a35b06c490d072b9e94a1d8b0b12c96c2da7a8dc891ea1dae88088ecffa5b7e71dc89e4142e36424a8f548440fd1f7f8980b12310bf0b69940e96503fd175e40d6fd5223beaa987bdba4e63184400a5fba05e11c630a2c9a8102dbce33786906ded6d692105bb7b242a810054e60455edef32094aa1aee20820bf9950de45260600bcce3cf81c34af0e7daf760b62beed8e2cbbd57e41f9526ea16615f8d480f708f9caf5ce7e4c69de6ef1c1ff26634624d1ce4b8cf3e5c5e14855afa72ceaf4444154077c59481e16085c06fe599a12c2cb30065e53b87f15fcd4c358a6de1e2040e7d189bd016e9f5b3e48591eb9aaf61b8c28f06eae210aa05e709db67dd66dd52586c3df04cf862c65b0587566093c0d670f61250b8900cb83e91bd5c37b1201c4e26990c8f6d936e80cc95359eb5a29ebe8087920250038a5e19a67ef955c5127c1f5cc4bb4bb0e3756d16a1c9654ac0b525823ababea60e5d98608a70ecc95c62394a22c9dd843470f5fae4cb0b41e2edbb0022236a370d3ca9fbb4c57b2b24a0f34292704e0b1ebd7befdcee1a31f4e670b63351708756803b2b11d11b23ad9e05b825df34028fe438dd4cf1c6dba8dfb9f017c8c76fa82d9656483e29bccf6bbc36e1005e090f5d012fdb0edcfe151a8a5ded7812d407303635448150e9d67c9efb7f6d155f29b523d291c2d549cafa79fb2624bc9d88e5188ae4aeb221a0839cf1d576aecbfd4d1623263e7fbb2eea4fdf2cbbe99ad02cd765c2aabfab8c3c93e60ff85fcdc7f7c1b6c6f1301be78bf24c9c67a5da48b165529e59dacb57f823e59353e5663f6b8f14f0e551568f044bc6a3d7b6667650836ffbce23d51a0c4df6befaee5ca24c56e2db66301bd921e84e1218c41094c77ee9026fddebd98dce6627460c2109ed435794706b7a8524e27373b99a3416d7605e1a9ad4e2b879ae517b5c6b8b54b6a72aa48bfa757691bcbf3ae5aa4f2be440d84cf6a81a8d992b0126c5cca24dbd4e35730631502166c0df36a407446d8cef376f87589ab5ab94709e594bf1c987c1a9fc247c3c42df6e88d3dbec26e228ce97ead81a1f4630f8aaaa8c51efe6ce88994e5cdf43cc610be816755bb9359d740d6e41ed33aa69da4ba4c9611b41fdb07e44d315a62c5df04921ace5b3fb08990b95c5d1321c674576309c6d74af1bc41362d68d823b91d237bec3b491e1622fb19a9b920070207022c8b11000b508150a86959395cc89afa999b5ce3fd62b5dc3090b877986def9df4708948458ba7bb0dc88b6c89300bd2fe81f79b3a7f721f7099b142b4e0c6df0317d976ae58a4e91af35f08826a6715ee9d30660a80a72a519b50187df55a7221ddef1751c9b61874e30b4e69e42b2055744a30545a269e6190acccd7a1e303f5959ff714a1839eb23dcb21dd1008d05b61dd32e0be463da2f3c0e7a4e9645133df7ec5f285f158e6df4ad53f46422a32fa80e8899d4b337d07fd47549436b055208f4a5ff3bb181f4cfacac3e13c57908a3d54a72b5ce7674ece79c6bc0d4b6797cbdeb49aa5562b0d582dd6509f4b1222179ea064a0b11ff5f544fccb820002962b03bb02e7b05a93bcb1eac30b652ef3b6c22d616adf0734ce2c7fc6f661440b642cd85419a88be44a56d78b7c2546c139a87b5c22425f3c214068597dcc0966eb17ef0bf5a452c9207df6055d413acd0c88a7569033cde01c7d5e04db06508b3081d9014034f778ad42f8b3cb2a342c4d1b16224655486b519a75822c1a408b29542a54291b26d633aeb9b52885a866dbceeaa16d44d1b9f04d80ae0fa692337658dbb8c00c1b2359d5b9b8baeedf649a2b58810a1cbe72d62d40d9abdd74f75ec2e31f254130e13a65765f6280b59c34152614735b19287cb0b652052212c83a20e551b7a387b40c4cbe380037313bcbfbb384db2dc35c66a6826838d1ea95adc3dbc02e5e75c4803616a19ddd9b0d3657dd9a1395dc78ca545b8e02a151a07e776ca1f627290fff00180a6d0abaa9523b416ddd550fe88c597c3c2173814926e6c17530f49c9cbb9dd578cbc8669e299d2e034c2a34a85fb7ba7d0b8fe17e6d64d20ebde62cf1c13b67c40cc45ec2c28c07c7e76f43c6b7c4e808db298eb92bab17b6296c5520e6a3873ec58a94dc1d61b384cd591976bffc50713de1fc5aa5950d36a966b91c46976c4e184609a1cb07a8b637a44bd17a78b94a783002f4d64d155e8e874a2279682b206ad524026175e65539651ec2d99d8257b1a840d9a2c3ecb89d8d51cbc557214ef9089bc16aa5d26b836394ef81174c183c81a42a638909f94cc71a804acb03c93fc13ce77a787c606c516e6b82238d41003312a00c563e0c80740df95df74765740958805d9277d05a0ceace2d296738500ceadadb33f28ce29521852bf552a83351c65d9f087260909d295ec3a12bcc2f70d4306a4756154a9f4d05690f890501612722009f232bb4030784486f06065aae9711389f71ec13a835f169648641c5a3d706e513829882afc1c5312ff40c165ef347d60b1ddc3fce24829d5e59bbaf646c55844310734fa896fde177af7faf39144652f43385b228d4055fa3b1d9cec82f9792b2f7ce7ff8620e18c5d724784b14779685e7ca0a850a62ad7a95c7c27a463eb3ff2885e20e08ec435a078640b1c5abf4d65ff1a71489881ba2e18eed2ca3cb49a3b7057f1507d47ebb371383976cddc9677c980d6ea0ff3bd3d962e3d32c0209028ab2cd0b076224ef9af612522d3adaee61a318bbf54741fa24af4bed58cd5fc2f455b23c61b1cfa7d6c51508ad9c9477af2f8c1c712edccc7b0e0529e10766fc2518105cf1d368794beff73ce69229f21f5c18b805cda80bfdeb234fe03d7d171cd939fe359f74503a1b035c5b0930de06d113eb8a92fa81a91cfef3de6a14ded29c113e8df7c7b0b67d17a1fee7943b72346cd564aebea4dd939be23a82293a777148bbaff58a4e9af42d699993c90509cb156a4330d284a695f22e8a13bc639a6a6ffe8d98141c9d145a28c5d934e03eca06538a961f2b000c5a128cd17049b9b5c02c704630db13a663dabc5d7ed7ee01e8afbe2f2d1c36a861f8834d6d431bbb91ae4408a487390910823c35267123a4671186904f1cf28d26652a1ee162ea12d73102701fa3e040a6fa126bfa9a08159888c227fb4e92e5af1d7b9094be9caef8e13528f26863435bd8554069e205d94cfaea48d67ab4fa2d227c4c1e5266072ed2eab2aa1736ac0972811a58be2812e246520dcc408967e4e2fb9bf4a75bd1362bc07bd372f603560dd03c6042ae365ae9c0828a38bf6a69ea302146b036408eda93d90d6eec8fc5e87d152b97b3b9eed194dc2f944dcf75e3d81b3c3ec313957136b1724adc302196113432e498fe1966dac3180450db49755548550789bad3049e0b9a89adef3557a3054a67d6fb5850cb27941f6564713b3a6c6c13478bf94a4cafb8e388ef18c98a60b000cb419d5e06c55be3996518a595a261ebcfda070bca9a6f63a7197a49a6aeb54ec1a615296dbfe719237e8bc59a88955f020474c2385f8654008c9e29974a76f79358641ba68c6c1afbc29d3106f283252e36836483b1a42154098263b9a4afd1fe26a2e8407eca26d78f34fc4c10b68aabfa305653b96f8b4612d5088390a0f465d13e30f6a946d5f8b9deaf32109ccd87964c6514b1e7c6c436f51acdc4add694897ca9fb0c18b54132cf16053d3e9739f9b60b2a9e3a9594c4ee37a0f6d79856b88dce8ba84a12fc09b3f873d5d4a4fb06070b89d8dde7a5db37fe44ed635bbdd5266fbbaf6b92c7dc9de470fc0400c6365478c18f69048c6898446a684fe30fdd895ed70b74eba30740b89435e7153c2c90565e22091c0f5dc425a00f659f79d250418889a8f886c1192ca1d3faec95743ae0cf5df6a682419b5b432ef514adcb7a4d5ef3451b438c1024dd578eb8b5f1c8e0408372831a04bc544ce0f56b3ecd4eeba7bc875249f1efddbe85aaeb4c98554a3a0b8958a2f7ce923133ed315fde15d7c8fbac88fb29f97731355af278810797f91d8a3c8395da4fa787152778ddb7984e424be6405f9bd32ec01d217c42a44a3fabff7b304856dc56c54c566bfe7b510735bf6b6b4e8d508657e6165267b752c791cdbcfba32cd0b806b319fcbb5909dd3c290b0292aa0ec1d7600151e06b0482f7d8703a69efc016fb65299917bc0edf83abc35e0ade72025d1bcedb7db3e0f3cb65b8fd0910ea2a558a044aef1ddad67f5e20fe72e82d2c45366294bf4f13159f4c0f10e7ed2c1992c42228ec048eb3d3f55cd1265ba9dcb568470be568acf6b0b9a469b9e87b2d68e925f0585b8820adf40416da2c9cc1d659aa031fb7281382cf37869de729cc0f7311253e2947e51a8e42c1a787291da481948d4e211499c147ccb1e18439d7728d44a544943ba3ee609cc599e619fa9836f277e59f84615f72ba44a64ec55ad0f3b0640c8242bc09cc480bf0bbc9c786e376f32f89ac8680afe72dda231181270a3c4b2b04e7e3fdc368d014ca464736541cec2d837702ffa304628a09baf01661d1cb15b05592e87b78f6e4f0ed3d507fd49c931d7b146eda35be7a70a2f3672de3c05238dc6fb1507284765ba124ca8032683cfa7441d5764bdc74bb33de3b6a9ece4d52a3d809069e862fa5f1ae16f7be0427ed226fb6548625fca54ce19064ca0554aa29959ce9839ce6a55047be583e2fffe52003d54882fc83d8aa83567f1df65971fd0846c2fa70421af01b0d1e2cf7a4487339e783f27d63c420e011833cb8482a80e65d91c5dba05213946b96ed68f02fa7135255bef80134e06f8fb0bea8e140aacc8689ad5df85f29b94f2e5f46347c9a4a57aa61db270139ec4df5cd0e9c964cfd763e49606fe4cc324bb623c33c0264717958930402c2adaf4b7d06413e71f4c64f4de29bf928815ad337b773b5c656d1aa912cf73f84afa91145267ab5f068ff995f52b1f81e5c1b2c088c65b33316a4981666088b0c3f1baf0b869f4b4fe6db76d0d612c090e2184f22d42da52b309705d44a92584a71316c38e91f7d05a03a7ffdd8b2ff6abe97630e4592dbfde9ad532b4f0b512cbd8795e73cb9df0903b45f258c1392397384bd00f9fde3467494bd4bdc02ec9dfd3d131b8cf6ff1ac7290b3e57d976e48cda34e7481e18305a4dd6e2056f242f492e29578f6ba0e3324d294d779af155ee2bda05f4a402e0df95e4adbebc9cc4dc009e7c5e79537f59a2893d2f1e985ebe5d52b0f791d999764796baf63521a068031a78e046ca935cfa0678363a8f7b4682c6f00c7e157149a3a9e87a51b82343a2378c79d4edc64b33af7e9e9c353e753c153f927554ff0509b20aa6c2fae02926c283428f75070a0f6a07484e28732085502957a440149f0e148f850c06d107101f3514061117b0ca0a1e2d82b368e8c50b3a0a2a16840ed41291450a876042b0c30141da2b249e5438581328342bfa85729c57e14700342974d83023ed7136f8145595e3c001336077d3d83476f98ee7d06eff8236b636d428ea809ca60750b27338145a584271c2158bbeaa9ec12f8cd63c58418f513a837d10fd2e1c1ea56e36a8fcbf1d85ded80009aa167a48f2412a6931dfa717f4df0ee8e7befef7fa5511c8736fcb70dafbb1cda345fb855ebc62b3bde4904ef9b0901df9af2b4f84ccfa430a7101394b8c7ab3b6e3d711a55a843cbebe5e982210938cad0d823e930ecdda852d559c6598db449cc8ff6492275b192cea34e24c37942ee52f3ab28246e8ff43999d17e7d9f8e3e4dfa83fc0270d5e479fe939f25d396edd241124712380fe02aed2506432189034cac76b998b48d651f71ec50a400335f058b976c16fd51ea2484cf2e3a5c68ec123840508af02b163ef13265b2834002b3c586a37951c67465e976d0d525cdd466de3032909b74d64f4a00adc3ec24bc7a73609384ecfbfe67110ce0fadb2dcaa59492083e38bcde8417b3f2c98a3fc573b1f2b192b2251ce23fa2eff728e91f9783ce55b0c229bbefce471dba4a8a81d02a0a21b4b19d3211fc4e4e416aa0f66b115a15dd4344381002c6e30441632e06edd6a6b36449310b8cf921c3d26f94208cd79bb028baf6b5bf33ed32b99ecac6a0337598f021af7b92600b32e71e67e09ee5da7ebba3f881396f944afcbaeb90fcccd0dac035031ce96bd27f1bdbb662e036bb020cd821f67a95b5712c798e2a4fde25b45c51dc2eefe7a2b7372ddee6ec1800be29f10e10e2ef42c4daee5e0f7569992b481cd6d7857f0f195dd0100cb07d4acd43be078dcb085beba19b518af12848836792f2083aea6c604bb55816b2288500bdbbee6d8e4f3154df342631954d0d52523c724cc8bfe2ce90405614e34d4fc4129f10e0f1b60e39a276a5b9d93318be6256d8ba59f606512a66620c46bb3d07c184885560b1870619158f1ddf5dd3bc4c704299fffb01fe432bbf66bf29812f44098b606cf83a837a021f7bc57586a0947836558ad31d053ce11010b8b1df9863a9d71b421a0721d0c6b28eeec802d695896e0275118b268d6728c9dd24c114e9cb97e66cb37e51982bd809b89bc6128afc1fee486c7381ad10a533959ebc38ff68047ccdfd2b4a0026e10f87433b08cd063f9533770ffa71a03c3727439eceb77cc873aef708e12b74dc9f9256768daee3eea532166f7999893124bae8e2018a23515cdf0c8ee70c3bac8423ea3a4e627c1e98361ea1ccf14ec24156e152a99a9cb6044e6c7e5cab5baddd43724b99182901add5dc32e3225bae3d1b50eec335343b20271743c6a4f74dab7807f19c0c5dbd8b84e1c826801e8b3d9cba68e279259692ca65678e0be5a5b288f92112c6ea52fb30a407b6b27e8be49edc8ff167f8d5874127111fcc693b654b4c9122bb163da3c1c1b7eff469d165607a19a51770336574403e5529bbd51185766a0686113d9b94f70dae889e3675f5e4a53f400bd044d09feb236697ba3b50de83fd07944e9fe0f45f81787dbaf7ad98f42c7f0f5b25eae39fdcbb8e5a463ef16b6ef845694955f4f81d4110be33201bf991611464f05fd7298758435264ac1999427bece739c5e60937dd09ce3bff2c39d3f8064ef0a1391edfc65c374cce0892878b5728a1b40a35ea96eab92c71fef384701707de1f8fe1daa073acb8586028d20bc023d88b967f6cb19e9d3fcd1ec59f30163a57815f62c3d145103e007f44fd8b35a79b9911b9789b248cf0af8a0be532e6d16b59f689cb8823b1888ea69c756d6148a9da3050efa8151c1ade3e3ce8dc6b3f5f8d0b4b784e4b825474fcf2a83b4c4f1da163e2a7787152659f83d1c0195ef330ba90195082a811e0cf44ef11d697a5aff3eb64504006ff558d43a71df5334bbf26e2fb78c2d914afaabcafc70b98063666e6f92396ced8b26ac810a4ef04286f66cffcd52b5d36364ad722b0a3f86ba06254a2ef78c65d2da9fbbe7dcd1a0105eb4ec8a7a84d498e9f461051874a12aa485001e38c266bb0d776b5f0d69ff3613a34a68e228434dcb1384de875c03b4a2ea4c64121db44b7315bc04d9a5641d7dcb0f470583c9c764331165d26e57b161dba8c205b18412f5738e4467ddcbba28112769247b4cd090548c6b57c9af1016846870f3183545dce9ad356842d96b5a9bc466970289183872673186fb9bf76518e24a9663ae2d2ee2155719e104e854f6b02a77b2c00eb583126163b36b324bc45bfd699db997df6f36bebb41f74384ea89800f0c368b2ed9a7ebfa0d899a6ed46f52b974fda1c2f39e258b448b6b5ac9964bcf9e482cbc4d7e52a699790e3d3daa68252dbcca6409b0c4b8953ecc55588fd97c06b19dfc6483c50f93e63e28f497976cb99d119043c1dc4d0e4f748c6c146219093e57da7a33348ab30fc34c2a01de094409a236c1038325b0a20c4800817c4287357a4c8444feee599dee065bc927a0842b604a1737988371181e43a74ddc36568c33dda21c0ba1fb904a6e323bd935ff5a9715b9ac027eb19279b793735fbca63db3515e91f0c5da96c63156e0471da586f689834475530177f33eeb5d88df7727c082770c5fd9d78f786efa35c1dd67430413a07ba02e3930655427bd652120bbada489841fa3534250c9c3d9fd4b638c60ce135152230e114d41b0b57cd9644a486fbe9310758cc924799424fd34012432d9623abe1cf394463d15a35dd778763559d864e8aeb9afe6276c24ec0c432052a08e6298864c9e03aca90c30725ab366d3aa2c9e26d56eff8f3fe6b4da8b9cc244e812cbb53524b74f06bd3085871c542048ad86935c629998bff505835b4ae0771420894915b826daa0f650c2a16a2643259e332da2761c3a36538035117458fc2922686782f1b1cce33749874effac2b6622219eec3d3d011e88034133ea2efa6967481e1b593c5fc6e22caa979c244d5da9fd9f79d5419fa95c3330b0d48bef99bdc8f345da45274dd864119eb09ad9a95ed137f71d73d1830966999204500d49d330dc417f2d31cdcba74ee2255ca6dc5fe239909c3c560c7006a45c28f29d3fde7fa459d1674b174d8f6d5be24fc8f568493d344ececf2482bcf1a7482aad4a2c4e96c8d99e512f7c71d12dda8def740c8c30c796dce36c975370fd402f1eed7d4fed33ef1601fd77c7ec1cc9afd49f0a7e3a45581caf9ee6b2eef21a222452499739c4d62bec1b7fed3f5a7bc578165c9f9557abba70a88020b8830b6a921352d938f3b419c19b539aa3f605f02d63a475530b1f737570160fc9d4546f536d9c0bfb590bf61b79103a444c96318f1ab34e6d221a9552f392b41d68a0c2620835c78d3c280faecbbd0a00743bf26a59523e0011465fc7d4f4709d12b5166ce35a93e88fdfe0a11570241488e2d49ed03e3f5ebb6131536583e8838a33cb5d82b028045b09d604ff7e0139f98d70977ecb43d481458b75f9fc7b07b1e7a22d660b76d8bf1efa895c62d851e9c933ff9a3907c31877719176886dd7ba8ed88519261cf18330608608d788bceebea10a4375db14efcf60b251fb3713a42aa70dbb1c74dc847da28a778a1d160072cdbea4d4d6a44578783026c344f6b4ab564c9d87853504e6ac67ad091190e473107f302bd32493df8f04824f756de98ec3874df654c7e19d97acce0375aa8784d9665c23f69dc18542af8f9205d8829048dcf9e11e17b1e710c48a44b8d914cdfcf75f92b11b61252bfa9e0dbf6e6a43af766f18eadb3bee86a7761bd0aa0865c77ceee194e79d0458f25c0ec58b48a671323fd5560babe3b60516509d1a0efb98b718a8197251f5d50d588c1774da2398a9f7bdc1b2e5fba12a5b256072fd177043f8ced28fe3a39d0f40be4790e3fa3f2bd98ca1da4e409304d22d4830e6acf2b8c27e6f7534cee7995283c9efd3cd1e4ba03c555bae61acc947c4fe8bfc2a6956462f8166ee20a0bc077a97d6b49aafbb7628546344ecc86bebf9945ae56618415ef72afe43623b70101406a083bfd3ef50528cbd7a6e093e3d58f40b4fac0e229be3c09bac2a2ab5d6a03cb12341f6518cb0b39675d242355ced4b68390d88bbd17353ebeaf24b51de220c2d9c8bd1cf3a0c2f96206aebb0642cd9a0051cdfda0c4a1123e40637106e9c0eb18eb1f29880655a23de55c062550305992bf1b46e36ef60eab3fa694361d63a8ca2dd60bb8d3f988605d58d4a02368307ff52247d191bfdf19374d5cf19180aa66ba0011f901528cb72b386df207185b20e795aa0248838e2162f4549972a62008314027eb0fff37af7db3530285d8adb1191c91281f9fa6fef3447ed47397e333d49cfd56fdc6b1d6f5dc2f7414893d5ab69ef265ee0acb295880059fdc7f5441b7f3f4c90ce0377165122026695886248951d1ce4599ba01be8ad375cfe48c3240c7ffd11e5c6160e45c52a6aa4c1007b7a8673ae1615360073f33b87a75d3a4ead7454d75c39e03f529e731a764ef218ede0d0bd70900dcf9d678dcc3d90cd71aa910a8c35ef0ac32ef4ad8315ed0d8d37d7d7d6d30af28bf3857c1a1e51fae5164b547474d775cbe660a48159a5e954ddb48cb472328ea1281d72f52b78f6561849f0bbb26d9a56064d2ad7b31a7e22416382e008e254d1c636596162f53e2200bc66ccfbe5219532703493ca37d68e3ddeb44b195a122ad520f387cb2226572cf1fd3bdb5a92121b6ec6c6b431d0ed3937e76229a7a6496e7b0521cd68e8c1dd44e70e49aa14a50fb308aa4200246693f63b8d0e829793c2d96e2509173d1c340d300ce9da1a966bd692f5d9f9a94c3dc6fb6332414e4cf1cc183d5f845fa32b9368b1bfe3f62aa0a81e9917a16b6c9a64892320ea4f7f4a9572ac4f04c0a6fffb8c0170fefd0085a8ad303c5fee113e01469cc91f4f8cee08c8a04441222848bc0f13b34da560f36338cfc4e7da0ab4854b12e864c8496d752bd7f7eaaf7b09f053f3f0ce19eafed59b9c0930f233c46d7b126af25019a0fa147a3d1c7f30d8f079225454ba097fe36ce14c46d403bb521bb07260834ae962571999a246f16ff704b6f26ff7a21129715ef7fb02f0695c9b9b237f889982ff1acc15922f24f095764919178004065893147b0df90b8a988ce23bc275e28b725ffa69069c3296c991c5ffc0ff2bf6dd0f7d87880c2ea06e77885c1fb543cac0dcedd28a6bbb38c0d3a8738bfe7d08bc99d7017a8961dcaca1d6c671d7e5f8fe9c82d501d4238b32323b65b328f79984ff92c82ece863b458b4f2db5062ea1c2d50855698543189ad1115400e785a19a7c833b9514e0de439801ab322d4aac772434c2e27e0ae83e40b279a187e3f12e0c5a106cf8df3a4be0e4cd25fca95e1d721d8b3b9868f8c1e58117c681b7967a94e72009711464c6be3b52eb8413374a30132faaf614f5af2520042bb4a21da8aa13a0d911ac7e702ad05d5a5d5c9933ae10efc11177eb8dc0cceee9dfc378c999f67dc8efece229278e571a2377af1da658ff904a19edf1c8fe7ec72986b6ac5986a461be5a94e50d06fcaed85f36576f93bf656c180eb46f97557bab42564ff356aae4c032e6df25f2046fd77431e5a4d33f81157c25dcd3a87ac393a213647aa04664bd3693b5f51a0b2e5b58d3d6e79588ad8793b493522e592bb91444dceba8daaf436d116b4981a5849757d61ad170a2f8ea0565d8feafa16e1bbd8bc2175cbbaab829745778eae1ced72e4f5d12dfa6e795e75eec2a77722af5ae892b7dfba81313750ffaef0522154980fab3fd27d638f7c56ed03eac9af9eaa2c87adf42f72062e1ce29d578b420689687c6993aaf1a22816ed1c1df7c789fbea23ffaf737b0070424a0a8d845f9b32ce4f38b6ff9c46837783c537d8ecca3f6cce7acc365df454f4415025904050ed60d3419e6447733aadde60336b3ca150d41decc3a57a484a1a501ae430f0e2011f9b2905bdd5a1a6be327efd53fe9a204213832a839c06de0d383f387c82ca216c4e53c37f4f326678cdbcfbdd15b260ac9650346271636fee5c602e2efa9392f8fedd25a33741d31da4d4c0e89b4bf20e3df15902bf6704c841dd99dbfba040fd7cf9594fc8dd44e8971a145495cd62316e977f93db07f40171eaee50db1dceb34a4b8771dbdeb59a775c4125477757aefe16d2973508b5d3067c8fa62bc80dacbacf4e1d9aeef948caba80ed72739014ae49402c6f9aea9b4c5a003f0dc36e89a6a355117a0f10456ffaef548914444d731468d49bf7fb46d01382f6cb8f69fb7a42f975ff535a99e8c185771471c29a5102095ea9e4a56a3068100712443d266f9f4c5e9857793b8d80afa516f8fe6d0750ef7ca6f25ac5d681d2e30aca4f01781d47ecdae8fb9650e42609765faa48fd5dd54178c2bc60ae3b730956811deac98bf7fbc31c5bee8dda5ab8c3c023486ef54237feba6af616fbebca61912480ee31325808e0b22986c5c1fc8b62530ff36e76622556cf2b87ed2a8956066b4b13bc8a4a42b26a76bf1aefefe060d3348f3e995c2b7699646c285050b5c09f092471c647c9bdf950f6e06d5f69de1286aa2c97f49b2ead560e3e264d832703e28fafcb588d7f5105b54d846b6df828bb77b146e22ab91c2f454e91617c8d282136c71696a86536977e8cd6449bed9f12d379dbfcd71d68784e5536497856fe2cf187225ecd111fbd8f42110519432d867376ec77b8e8c5868c5d1b3c38a9505a1cfb8daf0624538f324f59e9a796177b2e13933c0948bcd3350601a7f2a9c753e49e10240def51bfe8be270e30396dd2795b30abb2a4a0a4da93aeeb61fe9e403ad1ae08487c3f1bad7e160e924731d5a1251a1a54909e31a52669ec52261d58ade8378c4cd24702e57cc5e1c13bd5d2a02118ec8cad2cff3a9fbf33cdf80bb0c8096574026a8a087411b6d193542a141ba86756a86a53d9864747a2089464a8c1a180657583cad26e1047d205f5042a165424541d283d28b0853ab592028a15940c547ea80e50e253a82c4992f32e42493aaabe141e6afca39449a187720f15132a07ca3b14175147a55422513a46d01a2950d9020063f571022e7bc46e0b3340b0a6d0013c0c3c0c3c0c3c0c5ce3f9d6d7dd7ec016a494a9e86f6450b0864b29a594524a0375c423443b9407b2bf33ce9712650b1e0b230b95f4a2eca7c2b5c359f5dcbc28cef6778a39f518de5d14a46ad0baea6df2a48b621ef19f47cb5c94fec4133a745c946c4e6ffc2a53d2adbc45b14a9224bbdadc24836c51ce8c212ccd3f335f8b626bf2cd0ca7ec425a144be4f8072d994541e72be1c1775914ec9385b816ddef742c4abd252e4ec54d4e0c8b82e8669712c657143654a57d36ef98175d51d2e2d1f4b47cced9c556943bf575758587dc8aac28b6d8c7bd1157511ab552b6262679fb5015451b0f77ad6dd7fea4a2a45f6d724cb2cbfb4745e1c48cfa0c1f93f79fa2a0465ac9a899a35d6f8a62897dd2c7993c329b94a26ca52adb52438af29b360fd735794cbf5194648e531a53439a509f280ab252945ddea128083d31b78686d22883a224e9cedff4794a50dafb4441c7f7e8413c8a88f73c51321532b629b3dee05e27cad1748df4fd24e75a8f13258f194a8eaa5e2793b789d22793b5649de427c74e13e5369d934a5d49f27732511631755e1fa6367f4c946d4fec6729b94449fe6456728fecca249628f79a242757b37b8fa944d1434df3b3a45ac650a2b0a3bad9249d7c64338952f97f5a0d5a59ae9144c172fccf243d12a51599837f8c9dd2c39028889811df49eeefdc3ea2ec39cf44dfefeb8e3aa2641f77ff46065d3e36a2b076776abe5445c488e2e8c59abca23bf7224a21a36b9fcedbb3a6886234efb0b13f3a9eb2441446883b491e21a2fa2856b2c6d121cabaf9e73e76ce07bd214a6d427665b444d17f214a339ee63e6cfe207f4214347a4eba619324e41f44d99498ceee9a3e3e4610c5207ff3c4c651934d204a726535e9d200a29cdec4242f4b3c96fa0f454b9373c6cdc927b71f8a1bb7f7954916add93e1483a578e6b4ff39a37c288e7c58486d31493af7501a397973507b366eeaa134da842ca124a53d8f79289592bb32b9c998877828db497ab397dca170722e41bd9c18e7333b94df47757352958c3a1444e8b052935a9a2d24830ec5984937e928511d384c0ed4c3868e1d367e201cf4d8910eed7c0ee51c5366af9f8e1fa6eda04b861c4a5263105526ce6a8ca6ca8843b1c368ce41c6577bd854e150b8f913b26933fe7394f186a2e7983229d93f0b4690b603ec81c3860d1e3ed2f620c30da534d14a12b51b374b95d186e2f727d14c3059ff4cd850123cc851ea4d29a1645fc61a8a1f26d7693afb77ac65a8a19894feab1235491eaa83838c34146fb424197d4d27b19740061aca9d3b7e9f9ff40c2579396a629c13119e3743d1329bb612b38ab835ad0cc5f47d73cd1c74d8f070f4f89164282951ac64f59b9d4c8da16061e93b9b46796be6430c25b9d21837e9646b271e86b2d59ad4b2717307cb80a1685f32870cf512c499be50b092d1322b79a19c93d8cea1835277e5e942f13c2be7a4b8db53ab0d6470a1f8bd3ba2a74a3b18c8d84282b0568d5f8f1f3c64684197ad6bd92cf9bc54fff3c411a9c0045928ec89d932263c90818562d6d518f479f63611f2c831021f74c0870fa30217d4a851430c32ae50ceea1ea95b62e7e7cd23906185e27c9fa61f9bd1d4fa0db6ae42b93b9abb093141cc7837d8568f0ac50f592a5b42ba9554bac1567c02195328d87eb6d3d953261bad144aba47e4f3a937d8d65820230ae51c337bc6a7136a4e3c32a050b4d01b637bec923be61b6c692a90f184620cfdeb5f4a0c5a42c3e602194e2899742235e954fe97b78f2614b4e966f79475ed2e614249d96775bea7f0ec760c642ca1b4316a77c774b31516086428a13872e25f8d2edd22ae8c24144e731e1dff8b0c2494ce5399a04aa6cb74ae8c23148310f59abdea24793d2f906184b2a77c79ccfe316edb328a50baadcdecf4bb7f766b086410a12c66259efe983be9a86e0ca3e81f949c4647749bb011430c1c25a85163070e611c1d3878a0630c068004a3ae0ab94b5fcd8cfe5aaf5dde600546d1bbf63c4fea6fb0e5d85f943235df754ef02475921e29dd17c52473d25b89af41dc81a600a417e5bf13dd36e369cc699591008417453f4974afd1917a721b367ef8d871c3868e1eb703870d1e3e140533b02102905d142c4d94dfd349ecf2902e4aea5c474bd2b126bc0d928bb26fae55d74c52977bb82888c878ba37c927891dba4561eb2d8458dfb831bdb44541e6fdeca6ff94a5c9d5025d6a626e324d20b428a88e21bfd1de43bb8a23a5b431c430301801084050a346df2cca9afa74273994abdb0a228b62f87db4ff1374d62a41627195576bb99d9eeb65be46d1a64f0a5376232cfc34aad284afc0ea3eebc6b442cc4bccb36daaae8e2b4ab39adb8474f3702a6f45d173143b6b13841525d1c9d42773dd8f2a32016415253b6194185f1b2fd774aa28acace90c3a7667cc18241565d5649289d97ad67ca3a2b4de7afdff41435dc9294a6a3386ead3622b6fde606b10b020020d628a62ae515a4dc78d68964b5152f9e625f37c76531f29caa6f7da32bc3aabc64046a17b579edb77e698caacd1ce2e4ce75d14e55fdbd1d7262727a7837ee0c881430c1b88c78ef781080420a128dd9ede36e5265c04105014467836932ae3eda3c4867da2d8a2c76734683d51ec92d4a9ededad3e7cf405403a51d2fb2aa2ee4c9a13ab51c3d868f581cc89c2bd59ab5ec9eae1fa260ac28497d86025deaed244d993d4d612aec944e9f576edb55972ad595b73269ad30465726a4c9446ad670e9dfaaf2f74d025ca9ed94e402c51fe6492a0568216a9495b898277d4b12a2b41a95352a294ab49cc3ec9f1ea0d641205d9ad4d5ffee3d7721f014412a53021d6e60489001289b2a9cc57524d27a54ac4b103069b030412e5f6d49b731284aa92191e803ca278d2cf7b12bdd3638c1fa6460dd4836d98f1711ee910401c51ae32498370336944d9a42b41e647f5ac85208c289a08f96184a57ca96d11d7cba98abd58d8bc6b59a8c96c01441125d9c24f79a6311145d9382779c885ce73024144e146bb426799118f3f14400e51d4351dcf4fda133df70e315a50a3860df3f16387183eda400c51b6cd59effb94ca9d0d528862a6bc133a4993c2460721443a8abfe8bc933c0d328855df6457c4c3556fbc6e4ed8ef492a88204ac2bd7ceeefcbb00d7a1c622463a8a0468d1a356ad4303dc630666c7a8c611824104591bbf96f940a10e897e9d555798c29396731d3503ff31fca79a3c94db2da5a86ee06db0e701cfc80f71912231963c7f14401881f4a679fd1366fe5742a2b0b207d28a78ede214fda20930e081f0a625ed485927340f65034797379478f1b6b77103d14645e8d9d640ff24f7f20792878c9e8ce2294369983f0500e9abd2aeed486ddf90e455162491917b5ac12b4433194b25162c7983a144bd6649e4907a1831f1e63766f793a9be319736437536b8be77b0ea59294f8a5b39e5425f62e80c8a124762e93f6fb946ec547c7183bf8725f70500f7080a0e3501aa5bbcea49dd4a86103040ea5381dcfc4d7fe0bb9bda15c6faaf65dc100c40d251142efe34528dbd0b7a170256d8e9e24563900614339989471c27449f227ed40367aec305b4379436efadf785627ad5a03440d25e1a3c6184274265d0fd08d1e20692886a7de6c62c58e03040d8553626ccedbd2540d4d07c8194a7bf267d950eb2946d42c3062b4a0468d63508f1b20662887fde617134f9032944e8cd4a42174ee9606840c79a6868aca8b79be5887b88e6a5f31e12f90311444fe54684db7713ef6d1c3a8e00c9d134339c89329d57754a3ca23078e1a3576e0501b8084a12429a504311fc3e4549280a1b457e399dc46ada8f40b250ddabce48c1dc40bc5d29b5134b6c5bf9cd5857218bddaacd14a102e943426a1a411266bc65102b28572ef58fcc6731df9e5d901d142e14dcef0e9931427bc2807264799826481fdae8b5b1131db96b75363ca347ece76008285e2b5ca8713d43bcc89cf00e40a255dd2ffda630c22fb01b14231cdc36a32f549e89ce406205528758a0cdaeed2643b70dc8150a1e4214489e1573607a5760d40a650ec584d27d37edaf0da0688144ad24cc6246bce9bfe323100894249eab41167e56faf7d0b7afce00102859270abdbb4261ed48d7a0465867b92c493e47f0c8d2694b7249555f149f7766ad4a8510309349850f0f4e1c3e6e8eb2e1b1a4b289836d936e6270fad97221a4a28ab6750526877901a341a49286aca8fde2193794d0309a5d2dad13f9a8d656ad003348e50ce3859457fc7348c90bbbacd6ae9dbda883019a754778e866914a11835aeeeb59a6ae7b2c70e1b6d6828a04184f2095ac4e23da78712bcc18670a0c3f4d06178f8b0e1231954e88a19c3289eaa0a9944178551922fedbd95f9847ed4460fc4831d62dcf1f0810b22e0811bdfc3201f3b2318c50c3d4ad7369d0cfa19c0286e4ed193ec4ed05df98c5f94b732fd9e58a332c71c5f94b544d88828c919bd28c90dea4726415b46d863cce045f924cdf6cb38cbcc2234631705f98d2174cebce4983f4317c5939673a1b44992a60d07337251d66caad4643067e0a298b9e6369a209b4953336e514ea6f4e9f07c6e826c67d8c25055f55e627a201ce06087185b8b42b6f6d5b3c4cd269f7426834cc560062dca49d5ab4933e72277cda224af3fce6b3cce47c9c961862c8afd7b2b9fc13a89577b1e66c4a2642a4b2ae98409fa4c161605956b9a933ecd61c62bcafa1f63a92f6993d22537d8900e1c498e1d7fb6ae282869d564f92be1539f0031a3152525e7dc419cf09fcc2e56944ad4109a645f5e6666aca2943999f62cf2c71fcc50456146ac08a5a9c7e46aa9287f09a13c27f1e89aea2d2a4a26bfd4a40b359d9912c3cc384569b3774e20cc30452963f22463326d6ab2590aab418a822c5f1121e6ecf18387cf1845397a7890a2e9e3844c7bd26086284ad2c3a7d2b99424d7a35094e4a03f8caeeb8c6e09280a426763f457285526f309ab2c6eb44d4c6b6186274ad2846dd317974fdb8ea10364c3c43063e8a0cce844517cde73107d06274aeaa61b42739f7421f4316313e5bccc72561f75466859e09a285ff679a9d53ab92fcfc8443977cc779660624f49fdc0199828596bc8ac616ea227718e60c6258aa6ddf564912699dcdd12c52e4de2c154f434dd9528076f31b92c532aec9a4109bd9424f8799cd88c499404759249a7c41342fc35431205bb3431d589a34894a308d98e794e29559a0189829e8bcced8d51b2337198f18872af85e7947df2893d7244c1339afadf14a5b5d5461483b6d6511ebe4fb79ac188d299f438239365d0b5662ca29ce464d2d7b95e23478a28ed89637d22eee3ec2611e51c4fccf94298d83a5a4494fcccbff47a6432d76430e310c5b431d887d6523b1337443196660ef2c57e2edf42944f93c60d56da0c42f4f9651f2ada1d26d61e9fd15cd4e860eda99e318882c89224499f529a218862095fea630e256836a51981e02441885bab0e204af29d49f2bd1dc5fb3f944be4ab49759e297b3f946e3be629cbf232257d28c69a7892c4749939860fc5dedf0c3a773da8660f053b1d2daa73dd57460f052d2372e489e7a13c42773a69937ec91b0fe53aadd1a6359fc4fb0e25991b63eaa549c86c87729f4c5bf1711d8a6e3ac96cc9f1512b1d4ae2e67ab54d61dacf34875207b5cca39d62fb4c7228e9cfdf8b99290ea53f25667b4e5f662fc1a1149b044dcd616c5396de507edf335152946b527243314e50a28b9235492ab5a1e821f6ec57c48662dc469355da22e3670dc5df4caf93fe74ea470dc5134dfad32a4de27dd250d2994ee6322813e3a3a1689b84950cfa24594cce500c7d5a63859263788919caa51bdeb3d5e7d2bd0cc54da3ebebbd6b3293a12469d7c86b790c25e19a1eef3a3dcf2b86925252ab3f5a6f8d320cc5d72b3997244a6d09184a213e7b49751b21c62f946f773c9bc5c960e28582ce295e19a3a9d5bb50b8cf41c76a0f71a15862f6969f6d0b85eb392595e0268d6a480be5a4f48c29cb0d510d65a124e5cbb567505d57212c1446e38477f524ec94ae50928df54183d2685bb242b9cdf5e498f3552869ecff33153def792a1483bc135dd2c54839994241a6c930adeb48a11cb254c63efbacaa395128496a945cb965b228cd814249f7c83aadf6138a63a25ee869ce993ba1f86bba3b4d0ead396e4271fc4e9f6c324bae92092599444b0d269ae01b3c4b2898070d323ef3534f4a28e8cad1b951324be69350fcf8af2589ccf29c41424934c1849aa09db3f9114a32fff946a850ae110a3aa8f650b1ce284241c9d91a4b833a95ea0c22144f8ed04f3a08e925398cf2652eb97ae36fe5298c62d0e2bdb77942dd198c92c7f4701ea4b96e101865937aa7a35a47d1e0ffa224dea39e4bf298f3de17257d92fe4ca72461affb5e14353bc7ad0d27de7a78516cddfdbc33c13e95eca2a06bf7cb5dd3bedeba28abe6c9cfa79830762e4a6249bd19edf313675c9483d885fc996da7f916051344cf891fb64a922d8aa94db6dd3c36a6b3b528fda72fe97d214f7c69513e2d9ee4e0ee2c0a672793f0729fb95559942fc36cea51a27b3e63511a1d91a571c2a2e0715df366b54c36bea22453dd4f8878c70c5d5198f1eefc794b5a51ba4bd5f6b30f21b48415e5d5a0a3b99556512efd4f9e634cb1ce5145d9df64e3ba2415bae613e5e5332a4a5d1eb4d24efa86f914a54d32a74e339ba2a429d773905f4a2c2945d9a48978dbfe6c79495112257cbd883a8a8249e619324a5114aece6594fa4dbbcf84a2ec39cc8413740c280aa34c497284a9fda4994f943be979ce22639f2ee3899289d65bbe1e3bc7653a513a39a9116382f07cf29c287cf5d627ed268aa5648776b55796af89725a939e42a6ca134e3251dccf1a5d274a2751838982ce2833c2e4fe804b201ed368d11eb7c4baa255b54ceb95288d101abd7adc47a99c12251df7354dce240a36f32a2be2d7334812059326ec789e0e4a8822512e37cf7d92247bc40712e530e63fa25499c4d4963a293d89238ced15f2742c6944e9741225b53695ae0d23cadb339a7a1e4a6fbe88d258eb6d5295c14d5a11e5a4faa37ecea484bd135194139ec4e491d77123a258ee39830a5da373f610e513a74993e41aa2e0d9db04e1b1353b5988e2c8fbfd9c7bf57c429424617772ee388862f670626cfe2cafa3209e53eae418e4d68128d78ce8285196375b03a2a4d5a349fd31f48cd67f28ea49f9a79db1e4bcda0fc5b43332e708f5a124e91c4e978ba792233e1465848679977c65a23d947e536c6c93fd36e9e8a164d5419d923f7928a6d5e79d1844f43f7828e8ea7cd45afdce983b94a327adec9c4a67367628c9f88c1dcebe3b367528e6974fa34d678ccee950decc7842278fe995cfa1ac6f4acf9c722da196431d34a9feb8c7a17819363b4b9eece3c2a1605209e6571d2777de50ba31696fab2a525337144d6b9a9449c96d28bf89e82c75321bcaa56932c3ac4e848ed75036d1c4b3dafe496a63359453d90919259d763fa5a124e82a0ff5263494fd43ec6913748efb190afafe5aae435466c80cc51373ccce0b95a118b4f667c62fcd9843866252425feec9180a1f3bdc749e13337f3194c4d5342a4d36c9681286a229eb109327ed9e0e8652ab49f91c199f49fa0b65b12b1d4ff84f8dd70b454d4add0774a16042e4789f7eb63af7015c28b69e78532293b46aee03b650f452137962692bc27d8016caa9932cf937a6f520ee03b2508ca1732294a49aa4701f808562c62793bbf943beb70fb84279c33794d4362784b70fb042392831195592b0aa6e1f5085628acae4f99bad1fdb0750a1a099377e548dd93eb60f9842f9347f4e2b0b7fb5f60152286ec7fc5f4891254afa8028e8bba10740a1fc1e434be7c9ace63ce009e7cf232794c2d4f48ebe99d37c138af1ec3b46e6125f3e138a27461375aa5d424992ee7b9e3d3a4f5542f124e194da0c9350d698347dc7b88cf921a1dca6c234a62a99dbe9114aa296941aa1542a436e9af587b60805f374b24e450f204261be3c493df173927386510efd0ba39c54d4adb3b6ec3cc12898ea64b19d84fb0f30ca62fac9c5945015fe2fca49c328414f125f94b39c5096066b1a1d6f074c108942491057df9a94e6c6b8814249c94195f8b1435b6cfc0463d01c72b429d50965bff3eacca56ad34936a124ad07a519272603112694f4b6d36d959c68a26709e5df2e41a9cc0f9dd3ae8492b07ff6d5169b402409e51346adbc8fef5f9842208284c26bce2ebcedebbdace6ba4a98b0c8110aea49f20a9342ebaf47c408e5681dae2439ff788e9f4811caad772756e89c6e2c8910c16a5c0ea3bcc9cd5499981646d1c38eee32edad1ad60de6242418c5d99c73a9f2a56d2d308abeba565f62f9094af88b92a8eb53882f4a625f09bfcf493a3309e945b9376faf33b6babae6f1a2ecb63232fbbb286d9062ea943649670ed1454926a54990cfe36f924c482e0ae3e37937fea7c9ec86e0a2a01f9478efe82d0af23dab6795ca66956c510aa144ae6c4c8d99da5a94fce44699de4884105a94ac849ccdf3ce1b769a45395f7567cc88d241655b089145713dfaf986e84f82d085c4226111f28ae265526a72f7e906db0f731b08714559bebf931ca18920a41525513ff79741892dd94c768881031b3a70dcf8818307ace0eb3badf4b66b466e941421b4ffb37fd00d1f63f0e05594e36e38ab529fcff9f6303f6ce0401284a8a228329896a79be817d18711c3860f4f4541758ff78df8083141dbe3078f10549435099d53c532bbcac45314dde3a6a9dfd3140555523b5968d5f8da96a2783ac898a1abc5f5ed544208294a92d473159a939c475ca32889ee26093d326ba6944244517aaddedff474c70f1d23e04148284a4277ac10fb36d24613028a904fa027b013a632e1cd2d2b3b0be1c472259a4993eb904d588d1b8468c26a5c264a77b5e94d34d942ac2631e16aea8b5c6e7dd8db3bfdb1eb0db6904b14764c893136c3c4a0da434b94554dd797b59eb66eae1265cd3f32c5d62784126531cfa353acc54b5a27510c26e69cbc7defc4918648a2e031bf698fa6de45a2d441dadcbea7ef20518e417e5eaf554df0cfdd234a9e339c776a8e8d89714449c9b1df04fbec5d23cad61d2c34567ec78872dead92b24df2cda9e46e1185352172d28af546bbee14918aaecf9c24fd8724a2e439e6565e52d44fc922a27c7ac433977852f7c47887284921664c12afe7a1738628c89775cf1cdeac64778528b687eedd543b62b48fe7fba84d9dd57abc4194dec4abc899fed8267c218240f4778937d874ecd061c3070eb53a158404a27cda4eaf654edd6dc20788f2881c1d2de2fda1ec656247ecd724591f3c3f944679124d26b8dbc96b481f4a523336949ef11cfd36840f05fd259d24d493720c217b2877db6d4c6796c94da48772924d7728f579481e8ad1f2e39dd56e6809bf108287a29512b54caf95a4baed1dca65f26a66648c61ace642881d4ab7e5a6ed9a4a87ef42ea50fe31693cf5ac5265d5103a947ebdcd94ecbf8e9039942493d718a264edd8bf8d103994bf5bd5a4b310bd2d87c4e142e0502c69347dac84c613d11bae460e42dc507cdbb0ceef246a9eeb81534184b4a178b925d9ab87d75c6d081bca273b5c93582f4a3b0643d65014f917d1a473c926253d821035144cce8fad7371b1efdae0612686c1f1a38751818f9034944a32934cf58a5dc7e8f4990d42d05052a523dbaa2a8e903394936713a67c4cce103394d6376df80e7a198ad1a39817428672de9322f30713cf642f640ce83d71d4cd880c0e42c4508efda993d061433cbf17128662d813634f107572e84d08184aa931a744e6ffd82305215f28bdc7d2877881edb01dc34597d234a40ba9b68d269fc4102e14c633e8dbbc31b7ab690bc5d32bebf8f9a9c9e31c215ad0fde412939aa4cc24ca42f9c36c0c79ae18215828e6f5ec29b326c8d9cf157617cddaf5ca6f3769d4ad9e2426c40a2531b6b66aa3598582ce3559364b67a9eb42a850eeb79acd1bcd5dd25328ae5bdd7a97a82547a55092269b767353148a499bbaabbe3f2d61824249795d5ca9f6acccd213cad94a7cd46c9113ca7134e5885dec97246a4249925b469396ddfb38138a5153e7185dc27cbacf128ae95925abfde9aced5142312715f1f11332437592504efa84191d4dde3d3d128a66ba4ce678728472c7f49dff94d49dc93742b1ceed84759e3b697d48114a3a493ac935ab25973e092142d9c2ef6418051db47dacfa8d308a623a34b67659b5890946594e77a85fdb7452c600a3bc16fa3aff97926b37bf2886ae5e0f4fcb8daef14551939d5cb631e7bd35bd288b9faaf3b81bcb848617c510266639f14cdc92e3bb28fd66acdcd0d0b5b7ebc2f1934ad949a2b9289688cd89b79a4c9be3a29cc4b74a7edf73ccfc1625a56c3649fa4d8ef1725b94cd5aae4f36093a846a51f69799d126fb3583685130194f928b2949a74fcfa2341b3a7b3aa196b1b72c8a5df2e8f1647fa7b18e4539659ee89c188645794c4bf4294d3adfe35794e66a376bb0f13739ae284992fc5672b815652b41fc348f34770f2b0a5fb93985b86750f22a4aaa47a878ecfcea5145416c6a8b15371525adaa0a259fa828087d759af6db5314459e58219e648a62ce345973d271b3994a518c19e94956d9d70a91a2147e27aa997cd3f4a3286e9811aa311745c9d46c9b10224f0973288abd494e4ed5fd2c33280a6276fa2a7b4c4cb2fa8982b0dbe825aa99949f7aa254d2263d3f29ed44416aae66d3a53ada8413259374cf7fd20d9d6436516c751d0fe3a6260ac24eed76083313a5d53c255cc3efe80913053d9aa1ab99f7932e511e99838b49194bdbc812c5645a96195fc5f2af44491263fbbdce739d124a14d54491eb77f2d5bd388992e0e1e4b38f9f6222499473acf44eff44a2a474bfbcce0f89927072880c1b7fc4bf667392a0e1a3e18872a8f38d9bb7a9be1e8d4614a3e8e0257ebcb9538f06230c91516452827a8b2877d4287b72d767cd2ba2d4b9a406216399b02789289f30a6ef1e93e6b588287566504acc233ce67888825e6fd86bea2ccbcc1025f9f3bfc6ea51d5a5429476f49d24c48c5cf110a22ca2caca6489593a661025adc1332dff3e675c340451f05873625f9e2ec12d1a8128966422d3469d92338b0620ca3988ea2455281367c4367ce0f0a5f1078467dd12636b7e30f76355535bf7b54b4bff3b9927591a7d28be28d1f77b55d2bd4f830fc530a6d736a74df51368eca120da33a78a1ddb33391a7aa8dff34a2aa9754c6eb081800511e818d0c843cabf84d1397ddc7c3d7ef068010d3cf49ed5a16ef11696dfaa9f39c74f7a74c3a77187e2c599a9f392d4f7e2e40336ccc71068d8a1a02dde56b455a634611df2aad1d5f030bb93a4f3ee121d8ae31a6746f7d37fd469cca1a0e4e6e87992bff7571a72287eed961c7b6b5309a538947b4dc9515656d2a990061c4aa2e69865945ca6b9d27843399f1293ce3beb274ada0dc55411fb8f9bdf631ab5a1b2b74d4fb79917358f0df3da9284fadfc9cb866228e97f3f9a18e5746a0d858fd9942ef14451d35bdab1a3078f2bd05043317ed2dc9cf44e43314c44a9f4cfd6d16434944fa9cb0c4affbf67f50c253df96bdd7e829f0699a174f27e65103a6c29415886bd4dee5bb4e2c53d4f7be7444bd0246d5c84c8600921bb9da23fbe041a6328fb28cf756292ffd1f36228cfe720b46f3e6984a1f4653ac9f7b0a23ea334c05090be1f7692e76727ef0be5a0a7e7449f5271920c1283070d2fe0617aafa59972632a1e27cb4d34a1f515e38146174ab9a7c76a33e80cbf72a19cc42ec9d66b34850eaadb91748cc06b0b6ae994def325e74cb5a0cc976acc6cb0ec2f9984591da12c9c841d1db477f7d7e7830616b07d57b5b57211adce6d626a11a34bd2ae60c965922434658a4140c30a45cd20fe4dcd6d96b56954a1587e429f2949f07c956950a1bc31de16275e860d221a5348c533bedbc2ae62f54673a9d3682356734d430a05799a4b7f4e9a46140a1bdcaf4ff4a4aacba40185746654ab3bdcd69398139dad2568683ca1a44177cdae7c85c98686134a0a3f7a802ca00307387c2080023e2c9063011410800f946c2ca0020098009605ca2c805717228190aa815cc31e508000f820b1c0413e7ca0dfd183870200f0c3c7182c204000100ecc1838d061c44080007cf4403fc6d9d18347024ee003070fa38000840100010000000030801dbfe377f4b0400616d00100f8f091d4208000cc0f736a142000e687393b7ad438000006e08004f4403f74e0d8c1c3460edefcf061c3c602001080061c006d20000255e091830a0780c01410c70f316ef830366c24000252f0018f8fc20fe42307ca61000840a128374a3de793e3cb694f289ca493fe9c277899103aa164829e68a2f4e3782707cac10b812694ecad939ce9eb069b0f787c0e946373a01c0a0126208e1f3bc0719680387e9c1d39c6b0612301105042315d6dbc63eb1bdc67639ce5403d6cec00c7b1f188870fb71f3a70a00f1d387e888183478e1dbf0208240171fce871c38718366c2400024828e83cb1efbfeee33b5de901159820026609081c81cb7addcab8d2b4ccd4f34e5911ded94c0818a1d47ea747bb24adf532048a50925b5aefcfe374df440d102042398bf5be7c0879aa261d460c15a0b303058dce0e1d398c52cb06e9a7d5b474be4684b19a6cdee97c5a977db736128ca28926997032ffe1830e00a3b059b794341bb424f99170dcf0e13e78ecb05123bf287d9efdd2b85de207a11cd88ef8a2dcd4b55bf7b0ec38ef4c6a3656a9788cf4a2204bc9ad61d34ed2921ac1082f8aa993ce9e9ea3c3f03824c2c82e4a72d2d1469ed0a5da48d331a28b62ee97ab4ce233928b828faf9a52faf8e1c388818bc29efef8f6a33d3ddbc1036f51942f8def5a2526c1751ef96807fe23b628e7fbadd3a384526084915a94e458d22913ab2f6bc51b6c3a40f708066e18a145b194d21b4c8afca89e8f5914fb93f665e8fb24899b1c9145394db4d73f1be15f6bc5a2bcad965f9ee72c44466151d6fcb11be3b63f8f52c78e1c39763cf61879456994c55686fbbc127745d14a143d59af76c493ecf8d10214d4a89166488c24c1a123c7482b9615ba8ae25709bdb413aa44faaa30cf565567bf2ab43be73a9116ba7492b9c186749cf3c8f123a9288fed9c582b426609a3a214729ffe439ccc98d553144663c97de26bcceef4248c98024b81a4b8519456e6c4f3aabb2eb917451f6a67a11daaf55d62280cea74f68c273a021d23c0410f7402bc1ee8070e1a8c80a29ca42be93effcf1a18f944796e449e387236e8883c51d24f5278096e274a722c65a6735839515e59ddf075624967b289b26913337f83c8cdf469a2ce33524ff0180486914c94bce4521f649fe09b520c8c60a2a084bb2c49771a319f1fb944d156c7d5cc4e9c4d253f18b14429eddce46832e6af8b0881c0e830396c2094462a514ceb133e970ee90825cae1e3c5fe07cf0a2393f86df6644ea9182392c8523546947ca73b168c44e2c70824ca4969767e8f7592e9f0234af2f3f587ed6cda6374c411be78587d5dc6d78db6e610a7d7372d5cbc4694c44fe74a2aa5e94b1851f0d0d327427bceb77964117b9ad8877bab78c6ea983e317d4f3ba20853c9a141b4e4b950428950e524494cf369ed847d0411057562c6544fbacefd1ca2542746b38ce70c519e4fb29f782693ac490b513e39ae84879341f6474264eb31d9659ed3200aeae3099d649657963a228862780eda7b64f22c10e58fb3ed2283d20820caa44e75ab8709c2be3fa075a66a3b575537b727b2c75a67ad946746fc5090a65b643d4cdc3ca71446fa50ce27c931ea327d50eb46f85012bc5498ecb9d4b7953c61640fa510aa44ed93a254b6113d945389767fbaeeb4b119c943499fa67fb8b99f6ce3c8811c18c14339ed8a4ab5103a87d2dc604bc6f0612218b943d227add1b373e5333b94f7c4837d983ca99f32c1481d8a9d734b2821b3f2bdfec0081d0a26e8f0d6f71eca620f8ccca1a49be420daa3493613e4637d9460440ecbe5df69e619cd8cc48147e0706fd01137e4481b0a3a637925dc2fc54f998cb0c19d1dcb2ecdbd8a530d357555262907c6053c185943a93deffb72cdbf6da386f27cc68cad27bf28a98ea4e1d07067b01a2366289adba8898def2fd596a194369f56756382f2203294633cc547ee8326118e8ce18c9c51f3b34a8d78240c56638c113094f49f5029679e44d1d9912f580d2f588d912e145b4c0a35ea649c10f90817ca9abc836c53e9a74b1bd9427147342829d6369bfd235a286c9a24459757c7b499912c60d921faba73b59b6c6c4d0ad1f96d1046b0508c418aaafcc915b053d9f2df7e62c40a0517ad25ddc87815caed2734b3ae86124a1ea1425193106616569e25f529947b7fbc93b476cd262d85a2586a0a4d1b17a2b34d8922838e15ab46a050aeea2e9d1a26b349d1134a26758c19f39f35187142b153bc7ba9d2258be734a15c552adb31c28462c91b67941874b6c95942c97baea37db6b79f69d388128a59932cfa7a7b937f2809058d4156c6f3cc08128a7692a9e6160f5f3a337284c2e9ea6c72c832a9f61e31427b7af6961e56ea48114a6a653acae4daed95468850d6d87cdfdefd2f273f8ce269924197dcbc0bfd8908a3184f10a1d973183118e5d12084348b111865f50e7f27ff3f322ec45f94d5644f33d5bbaf5a21faa2381b730916ba63c7ea7a518e5bcdf87c9a693b26c28b82c95ee6a67a627dcc82c82eca2d72748e9171aed73fd445d2290fca45318bb60fa2fafc47091749c2afa6944d9a5b14835213d94976f0f4780e115b98d408e51af7647f915ad0820522b39005c6420416c518b2b6b2e4ed15c57c5a4bf651b61bbbc41505f93b2a356dd38a720c622729abd674aa2311561cb2b332dff66d1a3a09556ed9e98457512c614caa2c9323a28a925215aae94709b5351505f97bbd771127c956b319420415c593a644689aa025a6d329caf372a12fb7e46396688a926f687eaffc3a71b948294c8d53af460d44278890a2dc79fb3a4d46cf7d84388a52272f55e2b515114549983c1e328f5ca6ad4b10094579d3e4fde0734250143c89b94af349c2ba7b50453e5132192f7e74cc3177b65810f144490e273699aec9996522d289e2091b9d645151425b7ac8899298935e9539cf6de2e069a232dc6e928a68c29513224ec66ecbd59909feb3f99da0a331140110b020026d07114c144565ec6bf8708f6105914b58e26a9448258cb1af32f5d37d52d3e9ef203a114a94eb2eb6323c677e5e27519224b193bba7373ef5408848a2b0f96d4753e467501351241225ffcf7ca7ff440412c5309639c925c537d874e030373eed05228f28b89f2c1ae36a8eb25911479457e7d4c9e61a4ec7e1a35120d288c2ccf7e56e973d781c234a712523cb4c94b36c1c1d0606228b2868134a7eedfe8828a220a7e45432bb8f5a89432411092516b223c428c174834d04115663450e512c39e6f970224be6a840c410c80d6bfb95b9469142a008213c8baf11f3ac91450651b692d465924b0451cadb93f1ac934094ae548ea97f1f10a5b4505e42bfe40f45fd1733f144ebe9cbf8a124c613abe4309b3e94e3c4586571321f0a4a929410328dd87b7ef750b67fb38dffc1426f500f65f9549332becb433163c3e61b71ddf00c0fe512e3c949ab714628b94379d5eb64794dd9a1202a2fcf43f3643f588772ca6d2bbd27e6206b89d0a12072c4f74dbc3da1569139ac36ead9dd257257ed757771bb5bfadcdc2a113994affff344fe8996271f87e2bedd9adcf339954c0287625ecf125ae15bc2f23794467387d062ad1b4aa71aa4cfe548d1258a42106943c174ceb44ebe494cea47076a81081b0a9aecf70425efe55f3a05913514f3e99473519933c90f0c226a2879965b9fc711cd5589a4a15ca1c29412f4091a0a4ade13dc649f8ba855e40ce593a24b76d6ed545b6e40c40c851753a2bb68682bb184226528bb09a54dab648c1e1332143b79d6dcb92dd3d83c86723a9963cd9f540c251d4ccaa0bbf349dc120943316e982827c8f0f9e9014341aca3cf6757650e992f14d467c6fd0655d7558b78a19867b2b9ad32c42e94e24a74d7a4b2c794ca8592389bbfad728b82c816cade3163779a9c93dc25a285623ed9227334892341240ba51b719234759a537c8d8552d7c87fa7ec8f31a45b04912b9463d685488fa6c4069d88154a2a345f68fe2a8720528572c954e7eea9d4caa7ce08225428a5072b339df9d537bc23884ca1ac9ebb1933944c0d421129144dea1427473e018b3da8640dc642024920108ac4e170281806a7311e00b3130800103c248c0563b1581ca9c2f8011400034d24203230222426161410201e181a8983c140180c0805c2603010100a86030181f02a679a0f87868718a22d344dd89dec1a92c30300315a759a9a74387434def12d9b3b0ba97515b2e9caccb8728fbae5954e82526264ddbee777df4f17cec72bb860f3e7e8a6f09fd9ae4652d90fa5410522664255dcf6bab9558e6d2f134cffdde3601bba69f8637c57a67b1a2b3b163bf8f480c64972e753bfdef5c29cbc0174fb14fbc02b53e915e886b9e78c4f9a61aedee24a8981c9a7c445c7bb62e4599083abc52593c0daa2aacaf1652d786f4a8ed07eae8a669eba4b6b443071e7e13bd7f949c2758500c5df1dcabf67f8ff6dd27b5020063fcc3e1c1f559ebe780ffb442dadfdd20c0aa76cbc3f8247b218c618a0ef51c476c5729ee9ced7d3c8cf8b0c62178e5d2c838cf37202ed86c9bc4e575ee5c5ad5bd59b357c10a964964a70272e7b24398aa680792d60bb17b4a642850e04c2046aef011efdc5ad7c8117e2ed4456b4f023b8718913c906b3282296bad3a1cf10ae79511b0aaf89e6270ed032d0da34a6e3a1af75cbb6d4e82e6a8052954b30328a5cfc8debda5e07af4f3174742808a8743fad5f1dbe1b4cc047b7172369acb54e566d1414554cce5fd489b9fc235896452fa8cbddd33cf881c2a975ce0fb43b8ba25ca41c5600477ceaee23448439724e19df747d808653a15bf72286b6f2334a31de313919be3177cefe48ebd633a1aaae4adf9bbca1dd98992c30734d21619a35dd99baaccf6793fc24187b8e38ddd1e69ec958557270702adaad4be8c0e9fd42b0b9b23b082bc54189f4d73df63aad8dd5fda6fd4ee49026fff8e42b97bb12b87fd7a82d1e65f4bf83c805d961386dc7b6c7c8804a10470748623965385c7c993850d4802f8d9115788285e9c1079a87d0ccd90cf392ca9751329975fb9a74a56f04149a5032264b74c2b090f3481c9f81e7d96a1aa0b9e80983b975ac51195098dedb056d5e6847853ae8c509ea7a086c71dc90556aea0853c2ab0ca626b105bba8fbb947f8a817944c93ac07e98b75ae44deed7da6d1f060d0eb443c59e51440a55fc1e06e85bd24b5d2ca9dfd4f99c66a0c9c658ad3495a58be7350d5b940fddb760db6c65e6244b7251531fbd0d2a903f1780c5b3a3078302fb6e6a0bd4b30a596e334c919b8d94cbb95f1844ae820293c58d982cceb69ae2fbedeeb8c4a60c6f487920c8ed131145a4eed92582a5557c547195387e1302b61b85e90bff24c046db70343b5192c6ec7dae85b2b89c1fe72a12b0834fc0204ec4d3bc7c551c7f97eb66a6a7daca5f8ded02606d25fa1d90400549dcb05e20cd7bfb0da016a96e33dffaa0b6bbf1057cb99c7e61de7c9b601848eb81ffce2e8b534e0fb431de9472e328a8d999b9aa2923071a26a62f67df9e749336ccecdd93072cfeb93190164c455573deb084f2acfe69f0c5c3f54c7236eec931ddd4eba11b0327577bc89c132f2917a6d728aaeef4f0e083db9a04c35e6bc34a93a6846fd233bc9c5d549f64bd8a1655b1b7186e612dcf0f74c2e7e0b011c9ac4ff6d6a34f717926118a0f08d25f0a45c6c1c9e644d2888d13506d02631efcd55ae8a6bf5c4bfa7ec0879490075c006f82bb1a963314d0812d305991edd3e8071a3dc46882567e7340042402cc4e44ead342dd4f4aeb483c67a53f288f0ecd7b5e2bbd4bf085e958c815e3d84eebd3d2278af7615b907a9918a7a940ea7383b9ff2fdceac70f0060ce1ecdf187f5b3c98c3a2648eba9d31189afac4b309073f43b1ccfcffb6ceb4819abd751b3323248f988024e412ddec91490254eb96d1842740e3e2f28041543966a8d3c8ecef08aeaf2715662c0a6b05639f6df4dd6f319c85f9afb67b2feaf5752145ec8541e6d590ca60b9251286ba9e87b6164337da04450a7bcf09aeca1bcca3d88de4b6c747621a4d11a11830384ca53350863de49218b5b031f2f9d7aae3c7a96bf0692e021ffb6a8cea7ec3e2a0228a872abd7a076fd0fd945ba9fcb1e5fea6b22272b426a326dbd576041674430991b6366dfd5fe99a2392afddb3d7470c71ffe0b9565cb1887ffa139dc0e72ffc59013ca16d52e5dccf755ca17b7915c04e5c317a42df87253ae220ba1138894606768b7961c24143d15cba1a0a805b164f7e55e108d5e202fd75bee9a3a06e8d41423c0022403eca5a9a6de15f9d176f93f6521b8e936b33b9eb7dc54b2c8cc0c5f20f60a18399422d2d891cada5c096d77ae87efd6c32f93bf04224a243e718ae8986b82e43218a3ac0008146aef9e219f38281147c76069fc00a3978733988557e19f1b040e4169c75b6306b21b7a09931fb9f48cf3942f5599eb83b26a006b9a1c9f74eed4541ef53c87a3a69c65854911f27875053cdc4bb045b6ba0553bdbba4fea7a4213a5d330293660840496d1f56649e8cacc8443e3c7f2f9189d5cc6d6366f273875cec9a2323cc5d0c276171a8209aa841e06e93cdb11be96a1947a73dda5b057d8cd160e143157eadb5ea3889207167af75d47c2a0362ad239839682ad639fd4ee73c2a6d3e2164c808d7f328a3163b810801810a63860fbced2f1089189acdf93f816307f41eda5db4b60fa00ba788d03451a1e0596260c3d584b2c8a0f6353d0696820ad465598e630e63c93c6bdf5d796504884c4d4fad7c35b4665e392f0caf0831c2d0952d691dc750278a3cb88a3a5a14db827495f9f88283b1e514284ff655e84a60d171a80ddf765850cb5c1fb2cab9592603a70b5fcd3ae65500985ebf6acfdfc41efb46f107147e806f9fd00886a43f265da7859ab2db6c5bbb7013d83adf15455be6e2f43b4887ea3e0d6bb1b683a0e26b7c05df9f9d18e9c245cc42f183f7f11728f87d1b4256d3ab5085cc8d5f08cb4fcfa757b6296d4e36573be59e64140717650b8d3dc40649d4fee491a2703d6434dd76afe74cc0c22b09790d54059b3d5c687c13974f98097045d7ea80e134acc286cc12918b5e4a8360f3738369cf4468872b3efb25d57cdd9753aabd25e63ea366372b66c56c9eb725047732a033c9a69ce5c2490135f2d53928e19a566ad11fadc716539686da86f2f9ff41e7e1790bb7a5570a32ba310c672868ca09bb80c6fc81091608308fb84dd02245b39c5a168fc11e39b1e19efb18488fa6e1a5ab7e1a542c870ae703a367da990aaff71216cc9cbc0187c2cfce2905fae885f9e1768d324374bd73bbf2e50648c77a84c662b3bae6721a52ab811d8740211dbb8dda584bcf6327502159d96e336d831282a6cb89c348a53ab9d024cc3590bf972fab858cf8d50dc0a039fb2035418ed4a4fd1151cd02a028ee66e84264c382e5876ba5956c8a7946b552cae911c2609f6996484ba7eb5e1b518411af40b1f83a65cccc750fe6f3ae101d2aca6acc0a3391d1a10a443b7dbd59a10351c558fc0d5dcf0371cd29e1c2e909cffe08e72bad4199626ef5dc0882fd62918b93d13f8c578e208b872607cebe3d74a83da308fda5784b5495d868281a84c45197da689bf9a22bfd0d1b1edeaa824d21a0c16e356f1a858c0f6aa810cae11522c3841ad27d805d16a49c07cc83ab58ae5052809e62db3d9d5e2148becc91c82849c5900caba2ee755e7fdb857640b422e77130623e9c7acdfe6e21bb5661d62ad045fa9621d14e803b1510772f9f416e42b68412ab7e410fb07e2a450cd66d234b3e80f2cf7b8bc124f601b9e6b824e5f6009149d6e237cffae371b12423a3f472e6ec7645c0f9dee9851f73524252872ce18cb2d499966a192b8c872284266db621fee32a4d23a0607fd4249ec71fef12f70e4d70bba4cf6f2d3df610c160906aaddb8191b32b9fd64db466604dc3e61bd550095fa7921cf30351e0c93a18f89f623f16c7f3e28affe1c6492a6ee0af3c7ca9def76cd6027426ed82288edcd696a47498b73bc71036ebcb9ec91f33e7ae0804ff6fe20ef605d18b9e9b1d36f11a063d45410fb63fed4357818a1fff438cf33e9827ec74fa9dc7a202f37d9d8a266cadd5bb13020793e381b979f263a5ad57653b0db7f9d174c4513eaf9786bc5347d1261f31477e91f6e92d04b5d09faa743d1a02ece30cff45c8329685ac9a9bf68c4ac3af289278a042a74476fc486293aa4e498a210b38cb9545352ff31c95cd2cc8c30eacf3ef0f12f1650b6697cd1346af5d2ffc72ee0d45bdb7fcaa88eb662e1825e0451c43954189598e3dcc7b623fd4059d426d448f9be71882bcf615457b03c179af3ee21448a286abaf9708137b5fdbf4c81350eb42558105e43931dac962321ae4668a1a0b3142e5d676f3c952033bf2c053ef58dcef4aa8adb214a281d53f15827db0f893f91295cf710761c89e7c77064aa7187ae7220a706af400116f5d972cee043722969ec6066290d9698bd12a62c6d3e3b45568bea4d0ff9c7836fe11da9640d3b1ab254abf103bcbfc589e7b6177306627a293077eed1d148bbc280f00aa6eb6b5a7c50423daf5dae88d4ef27751d1591947d1fc6e8b53a27b52e3a76086e71c5dc66fa59461cb30b06d6135aeeec518e60e499e389cf5414a59c49082b3d35a25ada54c309fe11f81a8497cff4d353537d1ed82134492954295d88c70abeae89b48bf991891c840c51a51cd70b9ae6d49e8a135bd6bd530c33f9c6c245f320f0402c0762853801ca0ff2377cc106fdd7d5b32d87f8d847d54b4fb47a169153a307645a4e5ba6b47d72c1f327e41af8492d0259f4bf8906cb3d307b7d62ec4fb2a4c814adac509d2b9285b42698f5158104cfd9659d8767273a1aa4ad24bf7c71bc2ba09413dcbd478b34dda1af712b4768b9398f28d6c6b39c6984f0608f945b53b12b2c6018a6283216afc4e839c1126c05d44a1c3f3c8280f2ddfffaecf8039fca18dee120409547c88710ea5f41248a91755b2b1fd1373019bc0bf294c8b01cedfd9c75674d64bf8df04fd198fc3d37453890ba9451134232c53572ba7781f52f9374e22560a1dcc39df6aba18836869c1e74b083e85016ed14adecc00e0e9acddade09bad81c0bb99dcc3509856fca0e136645605923e654ca9e8215d99c10b9ebe869073bccdf25621047efa984540af8a8a294420c09d12d87d2534284a1b05eaafe57860d886b230101081e2b158f9000654f82b02e480435e6cccf2ae70ad6cd4c723447300107a96f1cfcd2d51a1e45a670f99276159c0f4773095f9324bc465a2b72e301714e8f9699097c0fac2a6f2cd9a5b36a6f4735df4d624b0660673aba3e6e96f9ddaa081cf27200047c1ccfe1ba1c0a788f0a2c95dcca770f245cf27ce84789c6038a811855c6ad94445dda0bb7f5d7cb7897baf6be0a1a6f8562f867995a291bd901489e4a4ca9ee8184ab9558d1e8ba7066cd33f3d2821a2b6ce7a1591c7709241228632b864221c33b81f89dcdef86ce8600ce306cc92b38004d2b683ef326e131fc606b568f8875f2f27ca923b9e93164c1365bf09a7d728c1820fe31cb7a94ed710ce1521eae41b5ebd18a59304ffe0ffe12675a6a8669e6135f039f40ba65f96df9a20a015732b9da3ed17475f8920d83e5f8717cf3a822b3a5da1a413db5e263d031b999b3369fbf146809651444b9de10ca797b49c1eef45319fd827a2c984f8b6d2e8843d86f596eea81a862c340bb965520a68ee6c228d6a35c6938b93ebce5005ce3d90b67ff98c1f7792bd0a78cd26a487b5a82170da8e26f77dd89b91ef33c60c9a5ca6ae9adc6379765762e860e42ae64c710685a59db3e76f352c86e68df152c1dbb8ccc7a6e10e1c169ff10ac2d31294897be0137c81e3dc4301be2499ebcdbf9edc3a1ce114c8d7d3a350338e060a36b3dce28d634e164f66a732fce71fa489d6109efea322cc11072889ecaf772d091c6bad82bed68533dcbb0831a62dc6896349dab99086310b8f3caa83b204198d8d3b34929142206e11089d80843c892a0c71284a8b725a1126cd11dd5c41386f087b03f611282a3020545f6d199ace695e9ff5676cc54523623c12e3785ff007eb09b52f003022d431f8788cd02d43dddce7d576776e070a178b7704b36a32c296ca4ff303b54ef3bc1298879e2b43668c722841a2badfa3699a9eee8a00db1f0e9146da0038124a618c4590f314c5120de88e129b1f7f7606f1a737cceea9b21b9ee0feb680ed4e88ae0814e7aa688a73de00e7db63cf9c2806dd5a47c2797268f644392f6bcd0d4ec18d00cba43512f84e47b8c9f86f9d0ac409436108a73705ed35236f679c5793c76ae5a4842ed45acd975cfa9ae2e5305817811217f338698ede51d9794e8589de4919d057a35a6ebe33209e1b2a69fd558d62ebaef07a237b0936928646be5e6d9b81bbd98f5cc3e225a3b4c8fc226ee169edd396d4f58814613ed7181c316909e87e4c8de49a47e1ff90e29805c862c2c4b9628d24c118abcb5b9bbc8077a45a14f48729ee77e108551d05abdc120cda350ff325f4311ab9e79b010fe6c89f561d099bc42a96587cc04bc45c8e02bed63859455bdd786ca95913582cd0fe0bc46eaaec42fbcddb8e95b911abc5edbca6c26096bae178654e9729c06339e8bab86ee332667008f0e2885684769f2d1919c804c2640bd6d2f809c36d20b57dcd29a9994120cbe7d5470e2cf3f15332a251b1c5afefca168ba39b71dd42971eeb3644f8f8be01fdcf9349c95b09a82f0f017c39a98e9732ab45115627d2841e4a4280016bcdbbff60463d38cf9cd6dc6c1df54d08b3f5d234eaa0cd46d64a07fef48aee42f79eedfcdda88fc64ab79282f19a9cc5683e4429e840f80bc8fb10ccf88322f952486be22c45b66d181fe4c3dc8425d430192c9620638cbca990924dcdd966cf7ed41288502ec6128b81fd6a310538dc457871e75ddf09f987ba2e597e2b22f654afd925854db70df0d04b9078f7a3996c25dbbc719ddc20d7c80ac1674106ca4218efe1d67fd58045748573b484f863f42f4615a7337f5f01f47c78b99d9eee1dfacd0f7f31acfb1c1c5f1d5f465c066d10b0a0d9f65befe579e7b7d47cad839cdb7d5c8e7263fc0cc9d8df6fe54abe7e9d778bf67702b15ee663ab5c4b4448872af199efbf58fd0a7c08e8a470e2dd23c42007d12e4e8a04eba03fa06154d9f2bf818eab83ab6902268e9277e8af239b65a3b99645f1ff2d67b2e91986838336ec8c5fe8e82973fce2c0ef5554066da049b95f85033f314ef30e3396d0c37b48619d81089328fc162f30a7bef3c5b900f2843158be9e978b594c8eb0ecb40b5d8d9c2085535c8df935470ea7d5f448120157e60a40b1dab30f1921da8299709373afe2ac1945e38f16b0cb64cb919f782107040d731f6ee9abe7adbb72b8b50e022d97d90029071e61ec784cfb20b76f0887c7282899f36f469eaa8001b77ba287cded5011584f8e230d63b50831f6efd018dc2b2346a2e1c1aad594ce50ffd3ffcaebb912abf342c2a6f2b1e32e3db3c5b2a7229d2493d5311067d72c34ff16d0b11c4bec47f44dbcb43bc555738a2b12ae14e2ddb4ef83584adbf0fbaa79dd06a497334253cd44e2555c25eed6fdc1bc9caf85d42baca6960974a3418cac56defe2ff3c5bd28bcae23418663060d2981b9ec967fbea2135b3dad486da9bfcd6169201e8553cb080b8a127bf416b39e9f13937884b850cbd0a094d7d9e23c250e8a99747194f5f28f4e17b4c4d9606d7581bf2b954dc370720a60d81647cb00d3b515b87e64d766b53130c5537e58112431481551a9f6193a3094ace3dff3a3d5b8e095d579fc8fc95d715574a29b5f9d020db0392dfb0e690e2067dd8a2ed46b5625cf1f6718c36d2cb43b351180c8576906fb24d711f11e9c7bb63248fcc212019c62ef2b2729f683a1687b1f1a73c3884de365ab7a88f31ff8c5ab8a26ba3dd282ecffc836f30be711d448e7c84c17f7a7dc640820685cdce6c871f32a97caf71641a849417e11a3a2faa76e35be44f844b0172d01ca802f2adf98a834ddb35afd9098ddbcff61d2510f5f1169985189d5f1b2211d9f2aa2f668ae375e9a72caa016e8b1b9bfcba39b4efe5806b251f7686b0bc9fe01deaa43baa51f920e0dab8533974709f5206edcc79a348bfe89260bf8e9120369778495d1909b9c3ebe1ca23db2995ff5f7aadcc9ddd863bb9a1bbba937f1f67435390eefaaedd2feee3a6ebaaf52fceb2043cc96cec51156e42a3a1fa5d727b821c9caa17dd113892c33aaae33f9a473ad4c2e8ff1743017de76f647b3294fd235aa3d2f496043aa45627dbcb62b768ea12bc823b281eb6d0a762cdafccadaf6133698e56273f7a064a06cc2226532d40760ecfc00afc711ed131f5a4bd8a694e974d9a21a2477858473436511079d13b2d47755007ff208d2aa10efe0fbb068b1e513d8443cb610f14dbec6ff241ce2219f06c554e034211e71dfb40eb4e35251dcd1152f52207848c53bdf20d4b98912c60633367610ab5bd335dd922688cb686b67a93598325b74a644b33baac176f1fc0d6115ec971a94391298a0f9af4a43022857e64111d2e5edd247ea48f07b30d2a976d1dfda1f522af9e4c436ad49170bb46afbf89f5d9b96fb7705fee75bbeef9871d4888e5c7e36629ccc86f10cf179debf601a0f3dd671440c93481fa68824cb96b8ee0aa1c4a6e879c8d6debbf69b77033f77bd32ec04db38fe60353e32061ac7e62e91471e362015ee9c343a73f4e919db657760e1b70115f01d94bbe7b11f335e25f3d82b1d67b39e9dee4d0211db12338709a72b52bac268800010d6b128332a0a118ca408ddcf00c6bf006420088703c5a287ab22e94ae94abaedf0e4121052e971709776e5ab9f38b617d20c4bcfcfbb5f329c2074c2d85236c4cc9bd5181444f7305f2c07dc420e9de9939a95ee9d156994ea6f4cf87b8a7601f00ae2e76414763904a651c774de2e432b3f05c2408d4ac611b8f7fa602426dfac6352c16f186f631bae4b50f8fd202201ed9110fe152f464d7eb1a30c5d4de85beb7c371903aac0f78e3aeedd2c451b25e3ddf3c7936c3253a0113818809a0f09d44aed54f8973f6037cd1efe0910e3c4f909402889a7f7e37f05eb7c9e630c07c19c694d205ff265d1cbd3324e5407d4e1ce9301ddd311ea83a418967e42aebb40ee8c01de3111dd3e11d0a5b84f1f39ca26960a6687a40e2147342af02414855fa020bfebcccd5aa0a2980edb011f59911f156c73030fca29b60127da7bd36bb1cf406cc7648fea0b4b1782646182af1f8b2340a498b30740efbce9a189dff98b289d0893cdd3e63d815919d4d39b9cd72579734ecbd05b0d38c3bc0af94ae60dc92dc70e0d4ecfe22513eaa6ea93873cc262f2278be1767a6ee9ad0d4e06de585a77bcb078eee6e362edbbd0ba3c167fb0e72d8eeea8e71a9baa3e81b6c28ab8c60533f5738465196ae224d3cda987956e207002b6efefe205f8578f48ddb54f18ae73e4c41b34426ffcbba25c1fb347ce3e9206a7dbe109a812a7f10e50448cac21281e786ce36a1f7c5d897e8c13d79a25fff95d6e1c8533427c5d6df2d95c5f0fa98ebcb85f27f3401e357747fafc582b793752df81a0070e24e662d7c87059e5bd7295420db843d2a32dfe4b22c351d477bb6a042c697237ba6258e79c190e40e8cd71c6546b5a5c9ee9a332659b7ea391b37e99dd9e78b3faf97df5046601c1a412a63cb6d84af628f4c5c48a1d6de6205946d74afff4e5768cfdb4e65c6953cdea6cfc7714c7f7812c9e0dea1f3f9e16d9c20d570c6945d14dfedb3f367d91fee9624734f8ccbbacab2b16710b920a8328cc476079f08fbe068c97134e150a24b453bf35d1925b6d3facd4c22062a84d23ed1b24b933e0403854af4be3f096aba14270b05d99a62432395cca514959f6e323e42ba9829fc0b52785236ddebb443263d925d273417c6012fd0aecbe6681da921f115a8c78d072bb130305c08d17e43796ad2cefccff9ca70ae0b73df63044c21930bb96072d08a2ec361f97804effd2ca2ea5ad4191aed76c2267275b93e9fb42ddada771705a6da54041213385840228e5b3d273d7d459d9e4508548a67fbec2a99407afc91034ccf7db2bc10122ce4cf1b805e55ea824501d0c39035026990decb6d3343161a450d3036920a94933a068aafab71e9511113a5dead20fc2112372f9671b7eb4d1fcd6fd5644017d07c690a986fa5640d4abce6e419ed419060a4daa4ba9f6d9ce5b7aebd7c2c96f0bc8d1f38fbded94a4c7f3bae27bc616092cfebf1f7730d35591c99960e8356d4ae52b7d8b632685f19050e861e428eb18c164570c89a65339b45494b15c886f21f15e5f7326cfeed9f282dd019bc227674e3e9ce4c45f624aef0c5ef10359200c2aca708aba11a51060c5b06c53b8f069a11bb195985a83f050b624cdeb818b03f799d33fc8a81a44ef3a34a6348760064702962bc50762fcaab63f9d7398afccb4174a7e071acd83fcfcc5c8b977529870b5cdc065b84423df6f19d5b0957e367639c7507e5a6b37ed55bb06f73489d539f49cd3573afdbf2de939f4fb5ea981aa0e9a6359551227a168f06cce1957e4e80f40681365927e28ecc01df4779f22f8651b08e050294ca4b87f54515915a4d06f5741c9ac78c333573d16d7e451c7ebdacc5c3914a0642dfceda51d05eee06860a402c982d25a67139c96f4a1a37a48ecb33a306c49e1b3c8b499bf4368311bdcc56a8e203eb2241d32747e1f7088847d033a4fe034691ab883389fa3574eb7d834b628e0855f671767c0deda44e8789bbf3402feabf6edfc19916565798a9c2089fe9ba75d0e2720177e2014cf4c23b4e2e9c0601b464369b4700b9d12c2b78f7219edbd9c794593e8b3cdf91b68194d48ac3a2153502048114dd4ae1dd89e16cfe2889cdddef5ed622bb1a05b37d70d045e05da44ae188f3626fbd5a567c8857645ed2eb5f8e4a3c218c645cee894cfd702fe1adec0d90ff7d173e124f676cee6295cc173dd17a998e8852018c54b993976c8dac0fcd36dacbe05edeb4f226c57a53dcbc76c4701f8eec6726c4c93d319b24611d194da4668012dba4f740ee4df9741cdec9929620b439f3815c3df49308a3e6113a8f9078641ad932892fb65c40f6cdee4cf16cfe202e74969f7f5b69607f82d3a78d9da4e266d54e17d85e53f9c00663ec5c64985769562df87f36ec693cb780ee0900fd51d54e8854d328fa5e858a1b44aca651df8290c24fa6175b9119645870f01faafd94c0d4b99810f56db74489e628fc61b298be970cdd335c9c5090040788420b7b6d6e7405c5b4a349747a5ac2db93a14bfd4b89ae805c52c32bc777de04b466c8718d277624d402e97238c9686bf413551c6e1e5305397767db8d2aa941b2e32e3d6cf7e2049083493133f0592e780fda9b5f41ea0aff5f0877c6d0ad6d1ef1d0fc7e658e73edd1e546a6aacc098a407506af9128b7a5238a7c233fe7edf27de30246733fe0625edb3a3a5520a029c1cf9e46dbac1f112f1e9a5acd0668f57af5a62cb8de25929fddb3f12987d5e70f0d529264545b7cfa521c995dd9095015599a734d612986ecfdc6963e45249eaab35e22bec48ca1720ebdc9ddc7703612ba1035d7440d5276bedf629d07868245e9c73ffae4d61934b424117e4f64f7f694b47393ac03a5ad3444ffcf4886260041bf2fe90872a97af2a3342d820c3cab01", "0x3a65787472696e7369635f696e646578": "0x00000000", "0x3c311d57d4daf52904616cf69648081e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x3c311d57d4daf52904616cf69648081e5e0621c4869aa60c02be9adcc98a0d1d": "0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0x3c311d57d4daf52904616cf69648081e5e0621c4869aa60c02be9adcc98a0d1d": "0x0802f40601439cb3765ef8e2a0a5770a78fdda8ea3675f0d4262ceac46fe9b8a38b25ca9a71a8570a05814e75eee9eab0757d2c98e91b24c1fa2e3eb75f7b26d4b", "0x3f1467a096bcd71a5b6a0c8155e208104e7b9012096b41c4eb3aaf947f6ea429": "0x0000", "0x45323df7cc47150b3930e2666b0aa3134e7b9012096b41c4eb3aaf947f6ea429": "0x0200", "0x4dcb50595177a3177648411a42aca0f54e7b9012096b41c4eb3aaf947f6ea429": "0x0000", "0x57f8dc2f5ab09467896f47300f0424384e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x57f8dc2f5ab09467896f47300f0424385e0621c4869aa60c02be9adcc98a0d1d": "0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0x57f8dc2f5ab09467896f47300f0424385e0621c4869aa60c02be9adcc98a0d1d": "0x0802f40601439cb3765ef8e2a0a5770a78fdda8ea3675f0d4262ceac46fe9b8a38b25ca9a71a8570a05814e75eee9eab0757d2c98e91b24c1fa2e3eb75f7b26d4b", "0x7474449cca95dc5d0c00e71735a6d17d4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", "0x79e2fe5d327165001f8232643023ed8b4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", "0x7b3237373ffdfeb1cab4222e3b520d6b4e7b9012096b41c4eb3aaf947f6ea429": "0x0300", "0xb8753e9383841da95f7b8871e5de32694e7b9012096b41c4eb3aaf947f6ea429": "0x0000", "0xc2261276cc9d1f8598ea4b6a74b15c2f4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", - "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x004035b70c0000000000000000000000", + "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x00000000000000000000000000000000", "0xcd5c1f6df63bc97f4a8ce37f14a50ca74e7b9012096b41c4eb3aaf947f6ea429": "0x0200", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3518366b5b1bc7c99d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3274dc1bb854565c3b25ca9a71a8570a05814e75eee9eab0757d2c98e91b24c1fa2e3eb75f7b26d4b": "0xb25ca9a71a8570a05814e75eee9eab0757d2c98e91b24c1fa2e3eb75f7b26d4b", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3d6e4cff6e22a77dc02f40601439cb3765ef8e2a0a5770a78fdda8ea3675f0d4262ceac46fe9b8a38": "0x02f40601439cb3765ef8e2a0a5770a78fdda8ea3675f0d4262ceac46fe9b8a38", "0xcec5070d609dd3497f72bde07fc96ba04e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950391c80dfcd87103c6175726180d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", - "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", - "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195089a0705a664955c36175726180b25ca9a71a8570a05814e75eee9eab0757d2c98e91b24c1fa2e3eb75f7b26d4b": "0xb25ca9a71a8570a05814e75eee9eab0757d2c98e91b24c1fa2e3eb75f7b26d4b", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d6611bd6b7ff46a3617572618002f40601439cb3765ef8e2a0a5770a78fdda8ea3675f0d4262ceac46fe9b8a38": "0x02f40601439cb3765ef8e2a0a5770a78fdda8ea3675f0d4262ceac46fe9b8a38", + "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x0802f40601439cb3765ef8e2a0a5770a78fdda8ea3675f0d4262ceac46fe9b8a38b25ca9a71a8570a05814e75eee9eab0757d2c98e91b24c1fa2e3eb75f7b26d4b", + "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x0802f40601439cb3765ef8e2a0a5770a78fdda8ea3675f0d4262ceac46fe9b8a3802f40601439cb3765ef8e2a0a5770a78fdda8ea3675f0d4262ceac46fe9b8a38b25ca9a71a8570a05814e75eee9eab0757d2c98e91b24c1fa2e3eb75f7b26d4bb25ca9a71a8570a05814e75eee9eab0757d2c98e91b24c1fa2e3eb75f7b26d4b", "0xd57bce545fb382c34570e5dfbf338f5e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", "0xd5e1a2fa16732ce6906189438c0a82c64e7b9012096b41c4eb3aaf947f6ea429": "0x0000", "0xe38f185207498abb5c213d0fb059b3d84e7b9012096b41c4eb3aaf947f6ea429": "0x0100", diff --git a/cumulus/scripts/create_coretime_rococo_spec.sh b/cumulus/scripts/create_coretime_rococo_spec.sh index 5d005266356..877e8ee36c7 100755 --- a/cumulus/scripts/create_coretime_rococo_spec.sh +++ b/cumulus/scripts/create_coretime_rococo_spec.sh @@ -4,7 +4,7 @@ usage() { echo Usage: echo "$1 " echo "$2 " - echo "e.g.: ./scripts/create_coretime_rococo_spec.sh ./target/release/wbuild/coretime-rococo-runtime/coretime_rococo_runtime.compact.compressed.wasm 1005" + echo "e.g.: ./cumulus/scripts/create_coretime_rococo_spec.sh ./target/release/wbuild/coretime-rococo-runtime/coretime_rococo_runtime.compact.compressed.wasm 1005" exit 1 } @@ -33,7 +33,7 @@ cat $rt_path | od -A n -v -t x1 | tr -d ' \n' > rt-hex.txt # replace the runtime in the spec with the given runtime and set some values to production # Related issue for bootNodes, invulnerables, and session keys: https://github.com/paritytech/devops/issues/2725 -cat chain-spec-plain.json | jq --rawfile code rt-hex.txt '.genesis.runtime.system.code = ("0x" + $code)' \ +cat chain-spec-plain.json | jq --rawfile code rt-hex.txt '.genesis.runtimeGenesis.code = ("0x" + $code)' \ | jq '.name = "Rococo Coretime"' \ | jq '.id = "coretime-rococo"' \ | jq '.chainType = "Live"' \ @@ -43,12 +43,13 @@ cat chain-spec-plain.json | jq --rawfile code rt-hex.txt '.genesis.runtime.syste ]' \ | jq '.relay_chain = "rococo"' \ | jq --argjson para_id $para_id '.para_id = $para_id' \ - | jq --argjson para_id $para_id '.genesis.runtime.parachainInfo.parachainId = $para_id' \ - | jq '.genesis.runtime.collatorSelection.invulnerables = [ + | jq --argjson para_id $para_id '.genesis.runtimeGenesis.patch.parachainInfo.parachainId = $para_id' \ + | jq '.genesis.runtimeGenesis.patch.balances.balances = []' \ + | jq '.genesis.runtimeGenesis.patch.collatorSelection.invulnerables = [ "5G6Zua7Sowmt6ziddwUyueQs7HXDUVvDLaqqJDXXFyKvQ6Y6", "5C8aSedh7ShpWEPW8aTNEErbKkMbiibdwP8cRzVRNqLmzAWF" ]' \ - | jq '.genesis.runtime.session.keys = [ + | jq '.genesis.runtimeGenesis.patch.session.keys = [ [ "5G6Zua7Sowmt6ziddwUyueQs7HXDUVvDLaqqJDXXFyKvQ6Y6", "5G6Zua7Sowmt6ziddwUyueQs7HXDUVvDLaqqJDXXFyKvQ6Y6", -- GitLab From ea2892c08f374aeb5659c5c476547c1ff9226a7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=B3nal=20Murray?= Date: Fri, 24 Nov 2023 12:05:39 +0000 Subject: [PATCH 056/102] Set origin to Native and add Decode trait bound --- .../coretime/coretime-rococo/src/coretime.rs | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/cumulus/parachains/runtimes/coretime/coretime-rococo/src/coretime.rs b/cumulus/parachains/runtimes/coretime/coretime-rococo/src/coretime.rs index ee974201f80..c39606367c7 100644 --- a/cumulus/parachains/runtimes/coretime/coretime-rococo/src/coretime.rs +++ b/cumulus/parachains/runtimes/coretime/coretime-rococo/src/coretime.rs @@ -48,12 +48,12 @@ where /// `construct_runtime` of the Relay chain. #[derive(Encode, Decode)] enum BrokerRuntimePallets< - CoreIndex: Encode, - BlockNumber: Encode, - AccountId: Encode, - Balance: Encode, - CoreAssignment: Encode, - PartsOf57600: Encode, + CoreIndex: Encode + Decode, + BlockNumber: Encode + Decode, + AccountId: Encode + Decode, + Balance: Encode + Decode, + CoreAssignment: Encode + Decode, + PartsOf57600: Encode + Decode, > { #[codec(index = 74)] Broker( @@ -71,12 +71,12 @@ enum BrokerRuntimePallets< /// Call encoding for the calls needed from the Broker pallet. #[derive(Encode, Decode)] enum CoretimeProviderCalls< - CoreIndex: Encode, - BlockNumber: Encode, - AccountId: Encode, - Balance: Encode, - CoreAssignment: Encode, - PartsOf57600: Encode, + CoreIndex: Encode + Decode, + BlockNumber: Encode + Decode, + AccountId: Encode + Decode, + Balance: Encode + Decode, + CoreAssignment: Encode + Decode, + PartsOf57600: Encode + Decode, > { #[codec(index = 1)] RequestCoreCount(CoreIndex), @@ -127,7 +127,7 @@ impl CoretimeInterface for CoretimeAllocator { check_origin: None, }, Instruction::Transact { - origin_kind: OriginKind::Xcm, + origin_kind: OriginKind::Native, require_weight_at_most: Weight::from_parts(1, 1), call: request_core_count_call.encode().into(), }, @@ -163,7 +163,7 @@ impl CoretimeInterface for CoretimeAllocator { check_origin: None, }, Instruction::Transact { - origin_kind: OriginKind::Xcm, + origin_kind: OriginKind::Native, require_weight_at_most: Weight::from_parts(1, 1), call: request_revenue_info_at_call.encode().into(), }, @@ -199,7 +199,7 @@ impl CoretimeInterface for CoretimeAllocator { check_origin: None, }, Instruction::Transact { - origin_kind: OriginKind::Xcm, + origin_kind: OriginKind::Native, require_weight_at_most: Weight::from_parts(1, 1), call: credit_account_call.encode().into(), }, @@ -240,7 +240,7 @@ impl CoretimeInterface for CoretimeAllocator { check_origin: None, }, Instruction::Transact { - origin_kind: OriginKind::Xcm, + origin_kind: OriginKind::Native, require_weight_at_most: Weight::from_parts(1, 1), call: assign_core_call.encode().into(), }, -- GitLab From 471eafcb8de32c0aac393a3cf3874ae62a495bf8 Mon Sep 17 00:00:00 2001 From: Sebastian Kunert Date: Fri, 24 Nov 2023 13:52:55 +0100 Subject: [PATCH 057/102] Disable any peer connections for parachain nodes in pov-recovery zombienet test (#2475) I noticed that this test broke at some point. The parachain nodes should only acquire their blocks from the relay chain. But they were connecting to their peers and started fetching blocks from there. In this test I now take additional measures so we check that each nodes really uses pov-recovery to get the blocks. --- cumulus/zombienet/tests/0002-pov_recovery.toml | 10 +++++----- cumulus/zombienet/tests/0002-pov_recovery.zndsl | 7 +++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/cumulus/zombienet/tests/0002-pov_recovery.toml b/cumulus/zombienet/tests/0002-pov_recovery.toml index 34cacbc2a9b..105e4a324f3 100644 --- a/cumulus/zombienet/tests/0002-pov_recovery.toml +++ b/cumulus/zombienet/tests/0002-pov_recovery.toml @@ -48,7 +48,7 @@ add_to_genesis = false validator = false # full node image = "{{COL_IMAGE}}" command = "test-parachain" - args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug,cumulus-consensus=debug", "--disable-block-announcements", "--bootnodes {{'bob'|zombie('multiAddress')}}","--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] + args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug,cumulus-consensus=debug", "--disable-block-announcements", "--bootnodes {{'bob'|zombie('multiAddress')}}", "--in-peers 0", "--out-peers 0","--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] # we fail recovery for 'eve' from time to time to test retries [[parachains.collators]] @@ -56,7 +56,7 @@ add_to_genesis = false validator = true # collator image = "{{COL_IMAGE}}" command = "test-parachain" - args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug,cumulus-consensus=debug", "--fail-pov-recovery", "--use-null-consensus", "--disable-block-announcements", "--bootnodes {{'bob'|zombie('multiAddress')}}", "--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] + args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug,cumulus-consensus=debug", "--fail-pov-recovery", "--in-peers 0", "--out-peers 0", "--use-null-consensus", "--disable-block-announcements", "--bootnodes {{'bob'|zombie('multiAddress')}}", "--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] # run 'one' as a RPC collator who does not produce blocks [[parachains.collators]] @@ -64,7 +64,7 @@ add_to_genesis = false validator = true # collator image = "{{COL_IMAGE}}" command = "test-parachain" - args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug,cumulus-consensus=debug", "--use-null-consensus", "--disable-block-announcements", "--bootnodes {{'bob'|zombie('multiAddress')}}", "--relay-chain-rpc-url {{'ferdie'|zombie('wsUri')}}", "--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] + args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug,cumulus-consensus=debug", "--use-null-consensus", "--in-peers 0", "--out-peers 0", "--disable-block-announcements", "--bootnodes {{'bob'|zombie('multiAddress')}}", "--relay-chain-rpc-url {{'ferdie'|zombie('wsUri')}}", "--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] # run 'two' as a RPC parachain full node [[parachains.collators]] @@ -72,7 +72,7 @@ add_to_genesis = false validator = false # full node image = "{{COL_IMAGE}}" command = "test-parachain" - args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug,cumulus-consensus=debug", "--disable-block-announcements", "--bootnodes {{'bob'|zombie('multiAddress')}}", "--relay-chain-rpc-url {{'ferdie'|zombie('wsUri')}}", "--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] + args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug,cumulus-consensus=debug", "--disable-block-announcements", "--in-peers 0", "--out-peers 0", "--bootnodes {{'bob'|zombie('multiAddress')}}", "--relay-chain-rpc-url {{'ferdie'|zombie('wsUri')}}", "--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] # run 'three' with light client [[parachains.collators]] @@ -80,4 +80,4 @@ add_to_genesis = false validator = false # full node image = "{{COL_IMAGE}}" command = "test-parachain" - args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug,cumulus-consensus=debug", "--disable-block-announcements", "--bootnodes {{'bob'|zombie('multiAddress')}}", "--relay-chain-light-client", "--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] + args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug,cumulus-consensus=debug", "--disable-block-announcements", "--in-peers 0", "--out-peers 0", "--bootnodes {{'bob'|zombie('multiAddress')}}", "--relay-chain-light-client", "--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] diff --git a/cumulus/zombienet/tests/0002-pov_recovery.zndsl b/cumulus/zombienet/tests/0002-pov_recovery.zndsl index 12ff00210f3..7a93e2f3742 100644 --- a/cumulus/zombienet/tests/0002-pov_recovery.zndsl +++ b/cumulus/zombienet/tests/0002-pov_recovery.zndsl @@ -15,3 +15,10 @@ one: reports block height is at least 20 within 800 seconds two: reports block height is at least 20 within 800 seconds three: reports block height is at least 20 within 800 seconds eve: reports block height is at least 20 within 800 seconds + +one: count of log lines containing "Importing block retrieved using pov_recovery" is greater than 19 within 10 seconds +two: count of log lines containing "Importing block retrieved using pov_recovery" is greater than 19 within 10 seconds +three: count of log lines containing "Importing block retrieved using pov_recovery" is greater than 19 within 10 seconds +eve: count of log lines containing "Importing block retrieved using pov_recovery" is greater than 19 within 10 seconds +charlie: count of log lines containing "Importing block retrieved using pov_recovery" is greater than 19 within 10 seconds +alice: count of log lines containing "Importing block retrieved using pov_recovery" is greater than 19 within 10 seconds -- GitLab From 7554f53f9e02f6ea5c7cb6a4ef977925f7e78b96 Mon Sep 17 00:00:00 2001 From: Liam Aharon Date: Fri, 24 Nov 2023 17:06:01 +0400 Subject: [PATCH 058/102] Remove dmp-queue pallet from Rococo Asset Hub and Bridge Hub (#2483) DMP queue migration is complete and the pallet should be removed to fix the check runtime upgrade CI. Screenshot 2023-11-24 at 16 05 37 Screenshot 2023-11-24 at 16 06 44 --- Cargo.lock | 2 - .../assets/asset-hub-rococo/Cargo.toml | 123 ++++++++-------- .../assets/asset-hub-rococo/src/lib.rs | 7 - .../src/weights/cumulus_pallet_dmp_queue.rs | 131 ------------------ .../asset-hub-rococo/src/weights/mod.rs | 1 - .../bridge-hubs/bridge-hub-rococo/Cargo.toml | 100 ++++++------- .../bridge-hubs/bridge-hub-rococo/src/lib.rs | 8 -- .../src/weights/cumulus_pallet_dmp_queue.rs | 131 ------------------ .../bridge-hub-rococo/src/weights/mod.rs | 1 - 9 files changed, 119 insertions(+), 385 deletions(-) delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-rococo/src/weights/cumulus_pallet_dmp_queue.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/cumulus_pallet_dmp_queue.rs diff --git a/Cargo.lock b/Cargo.lock index ab51be3d5db..ce43f78fa4f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -924,7 +924,6 @@ dependencies = [ "bp-bridge-hub-rococo", "bp-bridge-hub-westend", "cumulus-pallet-aura-ext", - "cumulus-pallet-dmp-queue", "cumulus-pallet-parachain-system", "cumulus-pallet-session-benchmarking", "cumulus-pallet-xcm", @@ -2158,7 +2157,6 @@ dependencies = [ "bridge-hub-test-utils", "bridge-runtime-common", "cumulus-pallet-aura-ext", - "cumulus-pallet-dmp-queue", "cumulus-pallet-parachain-system", "cumulus-pallet-session-benchmarking", "cumulus-pallet-xcm", diff --git a/cumulus/parachains/runtimes/assets/asset-hub-rococo/Cargo.toml b/cumulus/parachains/runtimes/assets/asset-hub-rococo/Cargo.toml index 0773eb0c8eb..f3bdabd9cef 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-rococo/Cargo.toml +++ b/cumulus/parachains/runtimes/assets/asset-hub-rococo/Cargo.toml @@ -7,74 +7,86 @@ description = "Rococo variant of Asset Hub parachain runtime" license = "Apache-2.0" [dependencies] -codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ + "derive", + "max-encoded-len", +] } hex-literal = { version = "0.4.1" } log = { version = "0.4.20", default-features = false } -scale-info = { version = "2.10.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.10.0", default-features = false, features = [ + "derive", +] } smallvec = "1.11.0" # Substrate -frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true} -frame-executive = { path = "../../../../../substrate/frame/executive", default-features = false} -frame-support = { path = "../../../../../substrate/frame/support", default-features = false} -frame-system = { path = "../../../../../substrate/frame/system", default-features = false} -frame-system-benchmarking = { path = "../../../../../substrate/frame/system/benchmarking", default-features = false, optional = true} -frame-system-rpc-runtime-api = { path = "../../../../../substrate/frame/system/rpc/runtime-api", default-features = false} -frame-try-runtime = { path = "../../../../../substrate/frame/try-runtime", default-features = false, optional = true} -pallet-asset-conversion-tx-payment = { path = "../../../../../substrate/frame/transaction-payment/asset-conversion-tx-payment", default-features = false} -pallet-assets = { path = "../../../../../substrate/frame/assets", default-features = false} -pallet-asset-conversion = { path = "../../../../../substrate/frame/asset-conversion", default-features = false} -pallet-aura = { path = "../../../../../substrate/frame/aura", default-features = false} -pallet-authorship = { path = "../../../../../substrate/frame/authorship", default-features = false} -pallet-balances = { path = "../../../../../substrate/frame/balances", default-features = false} -pallet-message-queue = { path = "../../../../../substrate/frame/message-queue", default-features = false} -pallet-multisig = { path = "../../../../../substrate/frame/multisig", default-features = false} -pallet-nft-fractionalization = { path = "../../../../../substrate/frame/nft-fractionalization", default-features = false} -pallet-nfts = { path = "../../../../../substrate/frame/nfts", default-features = false} -pallet-nfts-runtime-api = { path = "../../../../../substrate/frame/nfts/runtime-api", default-features = false} -pallet-proxy = { path = "../../../../../substrate/frame/proxy", default-features = false} -pallet-session = { path = "../../../../../substrate/frame/session", default-features = false} +frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true } +frame-executive = { path = "../../../../../substrate/frame/executive", default-features = false } +frame-support = { path = "../../../../../substrate/frame/support", default-features = false } +frame-system = { path = "../../../../../substrate/frame/system", default-features = false } +frame-system-benchmarking = { path = "../../../../../substrate/frame/system/benchmarking", default-features = false, optional = true } +frame-system-rpc-runtime-api = { path = "../../../../../substrate/frame/system/rpc/runtime-api", default-features = false } +frame-try-runtime = { path = "../../../../../substrate/frame/try-runtime", default-features = false, optional = true } +pallet-asset-conversion-tx-payment = { path = "../../../../../substrate/frame/transaction-payment/asset-conversion-tx-payment", default-features = false } +pallet-assets = { path = "../../../../../substrate/frame/assets", default-features = false } +pallet-asset-conversion = { path = "../../../../../substrate/frame/asset-conversion", default-features = false } +pallet-aura = { path = "../../../../../substrate/frame/aura", default-features = false } +pallet-authorship = { path = "../../../../../substrate/frame/authorship", default-features = false } +pallet-balances = { path = "../../../../../substrate/frame/balances", default-features = false } +pallet-message-queue = { path = "../../../../../substrate/frame/message-queue", default-features = false } +pallet-multisig = { path = "../../../../../substrate/frame/multisig", default-features = false } +pallet-nft-fractionalization = { path = "../../../../../substrate/frame/nft-fractionalization", default-features = false } +pallet-nfts = { path = "../../../../../substrate/frame/nfts", default-features = false } +pallet-nfts-runtime-api = { path = "../../../../../substrate/frame/nfts/runtime-api", default-features = false } +pallet-proxy = { path = "../../../../../substrate/frame/proxy", default-features = false } +pallet-session = { path = "../../../../../substrate/frame/session", default-features = false } pallet-state-trie-migration = { path = "../../../../../substrate/frame/state-trie-migration", default-features = false, optional = true } -pallet-timestamp = { path = "../../../../../substrate/frame/timestamp", default-features = false} -pallet-transaction-payment = { path = "../../../../../substrate/frame/transaction-payment", default-features = false} -pallet-transaction-payment-rpc-runtime-api = { path = "../../../../../substrate/frame/transaction-payment/rpc/runtime-api", default-features = false} -pallet-uniques = { path = "../../../../../substrate/frame/uniques", default-features = false} -pallet-utility = { path = "../../../../../substrate/frame/utility", default-features = false} -sp-api = { path = "../../../../../substrate/primitives/api", default-features = false} -sp-block-builder = { path = "../../../../../substrate/primitives/block-builder", default-features = false} -sp-consensus-aura = { path = "../../../../../substrate/primitives/consensus/aura", default-features = false} -sp-core = { path = "../../../../../substrate/primitives/core", default-features = false} -sp-inherents = { path = "../../../../../substrate/primitives/inherents", default-features = false} -sp-genesis-builder = { path = "../../../../../substrate/primitives/genesis-builder", default-features = false } -sp-offchain = { path = "../../../../../substrate/primitives/offchain", default-features = false} -sp-runtime = { path = "../../../../../substrate/primitives/runtime", default-features = false} -sp-session = { path = "../../../../../substrate/primitives/session", default-features = false} -sp-std = { path = "../../../../../substrate/primitives/std", default-features = false} -sp-storage = { path = "../../../../../substrate/primitives/storage", default-features = false} -sp-transaction-pool = { path = "../../../../../substrate/primitives/transaction-pool", default-features = false} -sp-version = { path = "../../../../../substrate/primitives/version", default-features = false} -sp-weights = { path = "../../../../../substrate/primitives/weights", default-features = false} +pallet-timestamp = { path = "../../../../../substrate/frame/timestamp", default-features = false } +pallet-transaction-payment = { path = "../../../../../substrate/frame/transaction-payment", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { path = "../../../../../substrate/frame/transaction-payment/rpc/runtime-api", default-features = false } +pallet-uniques = { path = "../../../../../substrate/frame/uniques", default-features = false } +pallet-utility = { path = "../../../../../substrate/frame/utility", default-features = false } +sp-api = { path = "../../../../../substrate/primitives/api", default-features = false } +sp-block-builder = { path = "../../../../../substrate/primitives/block-builder", default-features = false } +sp-consensus-aura = { path = "../../../../../substrate/primitives/consensus/aura", default-features = false } +sp-core = { path = "../../../../../substrate/primitives/core", default-features = false } +sp-inherents = { path = "../../../../../substrate/primitives/inherents", default-features = false } +sp-genesis-builder = { path = "../../../../../substrate/primitives/genesis-builder", default-features = false } +sp-offchain = { path = "../../../../../substrate/primitives/offchain", default-features = false } +sp-runtime = { path = "../../../../../substrate/primitives/runtime", default-features = false } +sp-session = { path = "../../../../../substrate/primitives/session", default-features = false } +sp-std = { path = "../../../../../substrate/primitives/std", default-features = false } +sp-storage = { path = "../../../../../substrate/primitives/storage", default-features = false } +sp-transaction-pool = { path = "../../../../../substrate/primitives/transaction-pool", default-features = false } +sp-version = { path = "../../../../../substrate/primitives/version", default-features = false } +sp-weights = { path = "../../../../../substrate/primitives/weights", default-features = false } # num-traits feature needed for dex integer sq root: -primitive-types = { version = "0.12.1", default-features = false, features = ["codec", "scale-info", "num-traits"] } +primitive-types = { version = "0.12.1", default-features = false, features = [ + "codec", + "scale-info", + "num-traits", +] } # Polkadot -rococo-runtime-constants = { path = "../../../../../polkadot/runtime/rococo/constants", default-features = false} -pallet-xcm = { path = "../../../../../polkadot/xcm/pallet-xcm", default-features = false} +rococo-runtime-constants = { path = "../../../../../polkadot/runtime/rococo/constants", default-features = false } +pallet-xcm = { path = "../../../../../polkadot/xcm/pallet-xcm", default-features = false } pallet-xcm-benchmarks = { path = "../../../../../polkadot/xcm/pallet-xcm-benchmarks", default-features = false, optional = true } -polkadot-core-primitives = { path = "../../../../../polkadot/core-primitives", default-features = false} -polkadot-parachain-primitives = { path = "../../../../../polkadot/parachain", default-features = false} -polkadot-runtime-common = { path = "../../../../../polkadot/runtime/common", default-features = false} -xcm = { package = "staging-xcm", path = "../../../../../polkadot/xcm", default-features = false} -xcm-builder = { package = "staging-xcm-builder", path = "../../../../../polkadot/xcm/xcm-builder", default-features = false} -xcm-executor = { package = "staging-xcm-executor", path = "../../../../../polkadot/xcm/xcm-executor", default-features = false} +polkadot-core-primitives = { path = "../../../../../polkadot/core-primitives", default-features = false } +polkadot-parachain-primitives = { path = "../../../../../polkadot/parachain", default-features = false } +polkadot-runtime-common = { path = "../../../../../polkadot/runtime/common", default-features = false } +xcm = { package = "staging-xcm", path = "../../../../../polkadot/xcm", default-features = false } +xcm-builder = { package = "staging-xcm-builder", path = "../../../../../polkadot/xcm/xcm-builder", default-features = false } +xcm-executor = { package = "staging-xcm-executor", path = "../../../../../polkadot/xcm/xcm-executor", default-features = false } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } -cumulus-pallet-dmp-queue = { path = "../../../../pallets/dmp-queue", default-features = false } -cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = ["parameterized-consensus-hook",] } -cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false} +cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = [ + "parameterized-consensus-hook", +] } +cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false } cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } -cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false, features = ["bridging"] } +cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false, features = [ + "bridging", +] } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } @@ -107,7 +119,6 @@ default = [ "std" ] state-trie-version-1 = [ "pallet-state-trie-migration" ] runtime-benchmarks = [ "assets-common/runtime-benchmarks", - "cumulus-pallet-dmp-queue/runtime-benchmarks", "cumulus-pallet-parachain-system/runtime-benchmarks", "cumulus-pallet-session-benchmarking/runtime-benchmarks", "cumulus-pallet-xcmp-queue/runtime-benchmarks", @@ -142,7 +153,6 @@ 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", @@ -182,7 +192,6 @@ std = [ "bp-bridge-hub-westend/std", "codec/std", "cumulus-pallet-aura-ext/std", - "cumulus-pallet-dmp-queue/std", "cumulus-pallet-parachain-system/std", "cumulus-pallet-session-benchmarking/std", "cumulus-pallet-xcm/std", diff --git a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs index b274f45877b..02b51310890 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs +++ b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs @@ -685,12 +685,6 @@ parameter_types! { pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; } -impl cumulus_pallet_dmp_queue::Config for Runtime { - type WeightInfo = weights::cumulus_pallet_dmp_queue::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type DmpSink = frame_support::traits::EnqueueWithOrigin; -} - parameter_types! { pub const Period: u32 = 6 * HOURS; pub const Offset: u32 = 0; @@ -912,7 +906,6 @@ construct_runtime!( XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event} = 30, PolkadotXcm: pallet_xcm::{Pallet, Call, Storage, Event, Origin, Config} = 31, CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 32, - DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 33, MessageQueue: pallet_message_queue::{Pallet, Call, Storage, Event} = 34, // Handy utilities. diff --git a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/weights/cumulus_pallet_dmp_queue.rs b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/weights/cumulus_pallet_dmp_queue.rs deleted file mode 100644 index cc41dcd6cbb..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/weights/cumulus_pallet_dmp_queue.rs +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (C) 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_dmp_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-10-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=cumulus_pallet_dmp_queue -// --chain=asset-hub-kusama-dev -// --header=./cumulus/file_header.txt -// --output=./cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_dmp_queue`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_dmp_queue::WeightInfo for WeightInfo { - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65696` - // Estimated: `69161` - // Minimum execution time: 124_651_000 picoseconds. - Weight::from_parts(127_857_000, 0) - .saturating_add(Weight::from_parts(0, 69161)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65659` - // Estimated: `69124` - // Minimum execution time: 65_684_000 picoseconds. - Weight::from_parts(68_039_000, 0) - .saturating_add(Weight::from_parts(0, 69124)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_overweight_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65726` - // Estimated: `69191` - // Minimum execution time: 117_657_000 picoseconds. - Weight::from_parts(122_035_000, 0) - .saturating_add(Weight::from_parts(0, 69191)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(6)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - fn on_idle_overweight_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65689` - // Estimated: `69154` - // Minimum execution time: 59_799_000 picoseconds. - Weight::from_parts(61_354_000, 0) - .saturating_add(Weight::from_parts(0, 69154)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/weights/mod.rs b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/weights/mod.rs index 252cf2630f4..aa994a7608a 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/weights/mod.rs +++ b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/weights/mod.rs @@ -15,7 +15,6 @@ // along with Cumulus. If not, see . pub mod block_weights; -pub mod cumulus_pallet_dmp_queue; pub mod cumulus_pallet_parachain_system; pub mod cumulus_pallet_xcmp_queue; pub mod extrinsic_weights; diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml index c475768d5dd..42ea63bfea5 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml @@ -10,64 +10,71 @@ license = "Apache-2.0" substrate-wasm-builder = { path = "../../../../../substrate/utils/wasm-builder", optional = true } [dependencies] -codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ + "derive", +] } hex-literal = { version = "0.4.1" } log = { version = "0.4.20", default-features = false } -scale-info = { version = "2.10.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.10.0", default-features = false, features = [ + "derive", +] } serde = { version = "1.0.188", optional = true, features = ["derive"] } smallvec = "1.11.0" # Substrate -frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true} -frame-executive = { path = "../../../../../substrate/frame/executive", default-features = false} -frame-support = { path = "../../../../../substrate/frame/support", default-features = false} -frame-system = { path = "../../../../../substrate/frame/system", default-features = false} -frame-system-benchmarking = { path = "../../../../../substrate/frame/system/benchmarking", default-features = false, optional = true} -frame-system-rpc-runtime-api = { path = "../../../../../substrate/frame/system/rpc/runtime-api", default-features = false} -frame-try-runtime = { path = "../../../../../substrate/frame/try-runtime", default-features = false, optional = true} -pallet-aura = { path = "../../../../../substrate/frame/aura", default-features = false} -pallet-authorship = { path = "../../../../../substrate/frame/authorship", default-features = false} -pallet-balances = { path = "../../../../../substrate/frame/balances", default-features = false} -pallet-session = { path = "../../../../../substrate/frame/session", default-features = false} +frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true } +frame-executive = { path = "../../../../../substrate/frame/executive", default-features = false } +frame-support = { path = "../../../../../substrate/frame/support", default-features = false } +frame-system = { path = "../../../../../substrate/frame/system", default-features = false } +frame-system-benchmarking = { path = "../../../../../substrate/frame/system/benchmarking", default-features = false, optional = true } +frame-system-rpc-runtime-api = { path = "../../../../../substrate/frame/system/rpc/runtime-api", default-features = false } +frame-try-runtime = { path = "../../../../../substrate/frame/try-runtime", default-features = false, optional = true } +pallet-aura = { path = "../../../../../substrate/frame/aura", default-features = false } +pallet-authorship = { path = "../../../../../substrate/frame/authorship", default-features = false } +pallet-balances = { path = "../../../../../substrate/frame/balances", default-features = false } +pallet-session = { path = "../../../../../substrate/frame/session", default-features = false } pallet-message-queue = { path = "../../../../../substrate/frame/message-queue", default-features = false } -pallet-multisig = { path = "../../../../../substrate/frame/multisig", default-features = false} -pallet-timestamp = { path = "../../../../../substrate/frame/timestamp", default-features = false} -pallet-transaction-payment = { path = "../../../../../substrate/frame/transaction-payment", default-features = false} -pallet-transaction-payment-rpc-runtime-api = { path = "../../../../../substrate/frame/transaction-payment/rpc/runtime-api", default-features = false} -pallet-utility = { path = "../../../../../substrate/frame/utility", default-features = false} -sp-api = { path = "../../../../../substrate/primitives/api", default-features = false} -sp-block-builder = { path = "../../../../../substrate/primitives/block-builder", default-features = false} -sp-consensus-aura = { path = "../../../../../substrate/primitives/consensus/aura", default-features = false} -sp-core = { path = "../../../../../substrate/primitives/core", default-features = false} +pallet-multisig = { path = "../../../../../substrate/frame/multisig", default-features = false } +pallet-timestamp = { path = "../../../../../substrate/frame/timestamp", default-features = false } +pallet-transaction-payment = { path = "../../../../../substrate/frame/transaction-payment", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { path = "../../../../../substrate/frame/transaction-payment/rpc/runtime-api", default-features = false } +pallet-utility = { path = "../../../../../substrate/frame/utility", default-features = false } +sp-api = { path = "../../../../../substrate/primitives/api", default-features = false } +sp-block-builder = { path = "../../../../../substrate/primitives/block-builder", default-features = false } +sp-consensus-aura = { path = "../../../../../substrate/primitives/consensus/aura", default-features = false } +sp-core = { path = "../../../../../substrate/primitives/core", default-features = false } sp-genesis-builder = { path = "../../../../../substrate/primitives/genesis-builder", default-features = false } -sp-inherents = { path = "../../../../../substrate/primitives/inherents", default-features = false} -sp-io = { path = "../../../../../substrate/primitives/io", default-features = false} -sp-offchain = { path = "../../../../../substrate/primitives/offchain", default-features = false} -sp-runtime = { path = "../../../../../substrate/primitives/runtime", default-features = false} -sp-session = { path = "../../../../../substrate/primitives/session", default-features = false} -sp-std = { path = "../../../../../substrate/primitives/std", default-features = false} -sp-storage = { path = "../../../../../substrate/primitives/storage", default-features = false} -sp-transaction-pool = { path = "../../../../../substrate/primitives/transaction-pool", default-features = false} -sp-version = { path = "../../../../../substrate/primitives/version", default-features = false} +sp-inherents = { path = "../../../../../substrate/primitives/inherents", default-features = false } +sp-io = { path = "../../../../../substrate/primitives/io", default-features = false } +sp-offchain = { path = "../../../../../substrate/primitives/offchain", default-features = false } +sp-runtime = { path = "../../../../../substrate/primitives/runtime", default-features = false } +sp-session = { path = "../../../../../substrate/primitives/session", default-features = false } +sp-std = { path = "../../../../../substrate/primitives/std", default-features = false } +sp-storage = { path = "../../../../../substrate/primitives/storage", default-features = false } +sp-transaction-pool = { path = "../../../../../substrate/primitives/transaction-pool", default-features = false } +sp-version = { path = "../../../../../substrate/primitives/version", default-features = false } # Polkadot -rococo-runtime-constants = { path = "../../../../../polkadot/runtime/rococo/constants", default-features = false} -pallet-xcm = { path = "../../../../../polkadot/xcm/pallet-xcm", default-features = false} +rococo-runtime-constants = { path = "../../../../../polkadot/runtime/rococo/constants", default-features = false } +pallet-xcm = { path = "../../../../../polkadot/xcm/pallet-xcm", default-features = false } pallet-xcm-benchmarks = { path = "../../../../../polkadot/xcm/pallet-xcm-benchmarks", default-features = false, optional = true } -polkadot-core-primitives = { path = "../../../../../polkadot/core-primitives", default-features = false} -polkadot-parachain-primitives = { path = "../../../../../polkadot/parachain", default-features = false} -polkadot-runtime-common = { path = "../../../../../polkadot/runtime/common", default-features = false} -xcm = { package = "staging-xcm", path = "../../../../../polkadot/xcm", default-features = false} -xcm-builder = { package = "staging-xcm-builder", path = "../../../../../polkadot/xcm/xcm-builder", default-features = false} -xcm-executor = { package = "staging-xcm-executor", path = "../../../../../polkadot/xcm/xcm-executor", default-features = false} +polkadot-core-primitives = { path = "../../../../../polkadot/core-primitives", default-features = false } +polkadot-parachain-primitives = { path = "../../../../../polkadot/parachain", default-features = false } +polkadot-runtime-common = { path = "../../../../../polkadot/runtime/common", default-features = false } +xcm = { package = "staging-xcm", path = "../../../../../polkadot/xcm", default-features = false } +xcm-builder = { package = "staging-xcm-builder", path = "../../../../../polkadot/xcm/xcm-builder", default-features = false } +xcm-executor = { package = "staging-xcm-executor", path = "../../../../../polkadot/xcm/xcm-executor", default-features = false } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } -cumulus-pallet-dmp-queue = { path = "../../../../pallets/dmp-queue", default-features = false } -cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = ["parameterized-consensus-hook",] } -cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false} +cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = [ + "parameterized-consensus-hook", +] } +cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false } cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } -cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false, features = ["bridging"] } +cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false, features = [ + "bridging", +] } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } @@ -96,7 +103,9 @@ bridge-runtime-common = { path = "../../../../../bridges/bin/runtime-common", de [dev-dependencies] static_assertions = "1.1" bridge-hub-test-utils = { path = "../test-utils" } -bridge-runtime-common = { path = "../../../../../bridges/bin/runtime-common", features = ["integrity-test"] } +bridge-runtime-common = { path = "../../../../../bridges/bin/runtime-common", features = [ + "integrity-test", +] } sp-keyring = { path = "../../../../../substrate/primitives/keyring" } [features] @@ -117,7 +126,6 @@ std = [ "bridge-runtime-common/std", "codec/std", "cumulus-pallet-aura-ext/std", - "cumulus-pallet-dmp-queue/std", "cumulus-pallet-parachain-system/std", "cumulus-pallet-session-benchmarking/std", "cumulus-pallet-xcm/std", @@ -179,7 +187,6 @@ std = [ runtime-benchmarks = [ "bridge-runtime-common/runtime-benchmarks", - "cumulus-pallet-dmp-queue/runtime-benchmarks", "cumulus-pallet-parachain-system/runtime-benchmarks", "cumulus-pallet-session-benchmarking/runtime-benchmarks", "cumulus-pallet-xcmp-queue/runtime-benchmarks", @@ -211,7 +218,6 @@ 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", diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs index 8e138822696..7d64623f551 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs @@ -394,12 +394,6 @@ parameter_types! { pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; } -impl cumulus_pallet_dmp_queue::Config for Runtime { - type WeightInfo = weights::cumulus_pallet_dmp_queue::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type DmpSink = frame_support::traits::EnqueueWithOrigin; -} - pub const PERIOD: u32 = 6 * HOURS; pub const OFFSET: u32 = 0; @@ -500,7 +494,6 @@ construct_runtime!( XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event} = 30, PolkadotXcm: pallet_xcm::{Pallet, Call, Storage, Event, Origin, Config} = 31, CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 32, - DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 33, // Handy utilities. Utility: pallet_utility::{Pallet, Call, Event} = 40, @@ -552,7 +545,6 @@ mod benches { [pallet_collator_selection, CollatorSelection] [cumulus_pallet_parachain_system, ParachainSystem] [cumulus_pallet_xcmp_queue, XcmpQueue] - [cumulus_pallet_dmp_queue, DmpQueue] // XCM [pallet_xcm, PalletXcmExtrinsicsBenchmark::] // NOTE: Make sure you point to the individual modules below. diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/cumulus_pallet_dmp_queue.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/cumulus_pallet_dmp_queue.rs deleted file mode 100644 index cc41dcd6cbb..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/cumulus_pallet_dmp_queue.rs +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (C) 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_dmp_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-10-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=cumulus_pallet_dmp_queue -// --chain=asset-hub-kusama-dev -// --header=./cumulus/file_header.txt -// --output=./cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_dmp_queue`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_dmp_queue::WeightInfo for WeightInfo { - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65696` - // Estimated: `69161` - // Minimum execution time: 124_651_000 picoseconds. - Weight::from_parts(127_857_000, 0) - .saturating_add(Weight::from_parts(0, 69161)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65659` - // Estimated: `69124` - // Minimum execution time: 65_684_000 picoseconds. - Weight::from_parts(68_039_000, 0) - .saturating_add(Weight::from_parts(0, 69124)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_overweight_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65726` - // Estimated: `69191` - // Minimum execution time: 117_657_000 picoseconds. - Weight::from_parts(122_035_000, 0) - .saturating_add(Weight::from_parts(0, 69191)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(6)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - fn on_idle_overweight_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65689` - // Estimated: `69154` - // Minimum execution time: 59_799_000 picoseconds. - Weight::from_parts(61_354_000, 0) - .saturating_add(Weight::from_parts(0, 69154)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/mod.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/mod.rs index a615f539547..3604ab3c0ff 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/mod.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/mod.rs @@ -21,7 +21,6 @@ use ::pallet_bridge_messages::WeightInfoExt as MessagesWeightInfoExt; use ::pallet_bridge_parachains::WeightInfoExt as ParachainsWeightInfoExt; pub mod block_weights; -pub mod cumulus_pallet_dmp_queue; pub mod cumulus_pallet_parachain_system; pub mod cumulus_pallet_xcmp_queue; pub mod extrinsic_weights; -- GitLab From 891628a7f1afcc210f83e944ddf3dcf4748fd0b6 Mon Sep 17 00:00:00 2001 From: Michal Kucharczyk <1728078+michalkucharczyk@users.noreply.github.com> Date: Fri, 24 Nov 2023 14:06:19 +0100 Subject: [PATCH 059/102] relay-chain-consensus: set a fork_choice (#2462) After #2001 the `fork_choice` strategy may remain uninitialized in the block import pipeline which uses relay-chain verifier. Refer to https://github.com/paritytech/polkadot-sdk/pull/2430#issuecomment-1823979813 for some further discussion. --- cumulus/client/consensus/relay-chain/src/import_queue.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cumulus/client/consensus/relay-chain/src/import_queue.rs b/cumulus/client/consensus/relay-chain/src/import_queue.rs index 9ee03b95904..f44f4409324 100644 --- a/cumulus/client/consensus/relay-chain/src/import_queue.rs +++ b/cumulus/client/consensus/relay-chain/src/import_queue.rs @@ -55,6 +55,10 @@ where &mut self, mut block_params: BlockImportParams, ) -> Result, String> { + block_params.fork_choice = Some(sc_consensus::ForkChoiceStrategy::Custom( + block_params.origin == sp_consensus::BlockOrigin::NetworkInitialSync, + )); + // Skip checks that include execution, if being told so, or when importing only state. // // This is done for example when gap syncing and it is expected that the block after the gap @@ -100,7 +104,6 @@ where } block_params.post_hash = Some(block_params.header.hash()); - Ok(block_params) } } -- GitLab From 803ea7605937f3f452c38dc17c66d73049a7ba00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Fri, 24 Nov 2023 15:20:21 +0100 Subject: [PATCH 060/102] Improve `UnpinHandleInner` debug (#2485) Printing the `unpin_worker_sender` included the entire stacktrace and that is a little bit too verbose. --- substrate/client/api/src/client.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/substrate/client/api/src/client.rs b/substrate/client/api/src/client.rs index e334f2f9fb4..46232c74539 100644 --- a/substrate/client/api/src/client.rs +++ b/substrate/client/api/src/client.rs @@ -25,7 +25,11 @@ use sp_runtime::{ traits::{Block as BlockT, NumberFor}, Justifications, }; -use std::{collections::HashSet, fmt, sync::Arc}; +use std::{ + collections::HashSet, + fmt::{self, Debug}, + sync::Arc, +}; use crate::{blockchain::Info, notifications::StorageEventStream, FinalizeSummary, ImportSummary}; @@ -271,13 +275,18 @@ impl fmt::Display for UsageInfo { } /// Sends a message to the pinning-worker once dropped to unpin a block in the backend. -#[derive(Debug)] pub struct UnpinHandleInner { /// Hash of the block pinned by this handle hash: Block::Hash, unpin_worker_sender: TracingUnboundedSender, } +impl Debug for UnpinHandleInner { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("UnpinHandleInner").field("pinned_block", &self.hash).finish() + } +} + impl UnpinHandleInner { /// Create a new [`UnpinHandleInner`] pub fn new( -- GitLab From 07ea6da2d8d4f0eb5f563d6803768d4ef0de6cda Mon Sep 17 00:00:00 2001 From: Nazar Mokrynskyi Date: Fri, 24 Nov 2023 16:21:10 +0200 Subject: [PATCH 061/102] Derive `MaxEncodedLen` on `SlotDuration` (#2484) # Description Needed this in my code as part of the larger data structure. --------- Co-authored-by: command-bot <> --- substrate/primitives/consensus/slots/src/lib.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/substrate/primitives/consensus/slots/src/lib.rs b/substrate/primitives/consensus/slots/src/lib.rs index a299ce395ea..b9a032c1bcf 100644 --- a/substrate/primitives/consensus/slots/src/lib.rs +++ b/substrate/primitives/consensus/slots/src/lib.rs @@ -121,7 +121,20 @@ impl From for u64 { } /// A slot duration defined in milliseconds. -#[derive(Clone, Copy, Debug, Encode, Decode, Hash, PartialOrd, Ord, PartialEq, Eq, TypeInfo)] +#[derive( + Clone, + Copy, + Debug, + Encode, + Decode, + MaxEncodedLen, + Hash, + PartialOrd, + Ord, + PartialEq, + Eq, + TypeInfo, +)] pub struct SlotDuration(u64); impl SlotDuration { -- GitLab From 90488ff7e32c79a601e95eeee0675a43c17ba157 Mon Sep 17 00:00:00 2001 From: Adrian Catangiu Date: Fri, 24 Nov 2023 17:30:25 +0200 Subject: [PATCH 062/102] pallet-xcm: fix benchmarking (#2489) Use non-zero weight limit in benchmarking `pallet_xcm::execute()` so the given XCM actually executes. --- polkadot/xcm/pallet-xcm/src/benchmarking.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/polkadot/xcm/pallet-xcm/src/benchmarking.rs b/polkadot/xcm/pallet-xcm/src/benchmarking.rs index 3aca24791fc..f0289512399 100644 --- a/polkadot/xcm/pallet-xcm/src/benchmarking.rs +++ b/polkadot/xcm/pallet-xcm/src/benchmarking.rs @@ -168,7 +168,7 @@ benchmarks! { return Err(BenchmarkError::Override(BenchmarkResult::from_weight(Weight::MAX))) } let versioned_msg = VersionedXcm::from(msg); - }: _>(execute_origin, Box::new(versioned_msg), Weight::zero()) + }: _>(execute_origin, Box::new(versioned_msg), Weight::MAX) force_xcm_version { let loc = T::reachable_dest().ok_or( -- GitLab From 8af61d03b62d541370015608b48c7399d5f67320 Mon Sep 17 00:00:00 2001 From: Ankan <10196091+Ank4n@users.noreply.github.com> Date: Fri, 24 Nov 2023 16:31:20 +0100 Subject: [PATCH 063/102] [NPoS] Use EraInfo to manipulate exposure in fast-unstake tests (#2459) The FastUnstake pallet tests were previously directly modifying storage items in the pallet-staking to alter exposure. However, due to the introduction of the [new paged exposure feature](https://github.com/paritytech/polkadot-sdk/pull/1189) these tests were not testing against correct storage items. This issue resulted in a bug that I didn't catch, which has been addressed in [this fix](https://github.com/paritytech/polkadot-sdk/pull/2369). This PR introduces a modification to how the pallet-fast-unstake handles exposure. It now utilizes `pallet-staking::EraInfo` to set or mutate Exposures. --- substrate/frame/fast-unstake/src/mock.rs | 11 ++++++----- substrate/frame/fast-unstake/src/tests.rs | 8 +++++--- substrate/frame/staking/src/lib.rs | 10 +++++----- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/substrate/frame/fast-unstake/src/mock.rs b/substrate/frame/fast-unstake/src/mock.rs index df133bdfd47..09a08f222b6 100644 --- a/substrate/frame/fast-unstake/src/mock.rs +++ b/substrate/frame/fast-unstake/src/mock.rs @@ -244,7 +244,7 @@ impl ExtBuilder { (v, Exposure { total: 0, own: 0, others }) }) .for_each(|(validator, exposure)| { - pallet_staking::ErasStakers::::insert(era, validator, exposure); + pallet_staking::EraInfo::::set_exposure(era, &validator, exposure); }); } @@ -342,10 +342,11 @@ pub fn assert_unstaked(stash: &AccountId) { } pub fn create_exposed_nominator(exposed: AccountId, era: u32) { - // create an exposed nominator in era 1 - pallet_staking::ErasStakers::::mutate(era, VALIDATORS_PER_ERA, |expo| { - expo.others.push(IndividualExposure { who: exposed, value: 0 as Balance }); - }); + // create an exposed nominator in passed era + let mut exposure = pallet_staking::EraInfo::::get_full_exposure(era, &VALIDATORS_PER_ERA); + exposure.others.push(IndividualExposure { who: exposed, value: 0 as Balance }); + pallet_staking::EraInfo::::set_exposure(era, &VALIDATORS_PER_ERA, exposure); + Balances::make_free_balance_be(&exposed, 100); assert_ok!(Staking::bond( RuntimeOrigin::signed(exposed), diff --git a/substrate/frame/fast-unstake/src/tests.rs b/substrate/frame/fast-unstake/src/tests.rs index 94ad6a84b85..b19fe3b8c46 100644 --- a/substrate/frame/fast-unstake/src/tests.rs +++ b/substrate/frame/fast-unstake/src/tests.rs @@ -788,10 +788,12 @@ mod on_idle { assert_ok!(FastUnstake::register_fast_unstake(RuntimeOrigin::signed(VALIDATOR_PREFIX))); // but they indeed are exposed! - assert!(pallet_staking::ErasStakers::::contains_key( + assert!(pallet_staking::EraInfo::::get_paged_exposure( BondingDuration::get() - 1, - VALIDATOR_PREFIX - )); + &VALIDATOR_PREFIX, + 0 + ) + .is_some()); // process a block, this validator is exposed and has been slashed. next_block(true); diff --git a/substrate/frame/staking/src/lib.rs b/substrate/frame/staking/src/lib.rs index e6250bb9681..41cb2a12c3a 100644 --- a/substrate/frame/staking/src/lib.rs +++ b/substrate/frame/staking/src/lib.rs @@ -724,7 +724,7 @@ pub struct Nominations { /// This is useful where we need to take into account the validator's own stake and total exposure /// in consideration, in addition to the individual nominators backing them. #[derive(Encode, Decode, RuntimeDebug, TypeInfo, PartialEq, Eq)] -struct PagedExposure { +pub struct PagedExposure { exposure_metadata: PagedExposureMetadata, exposure_page: ExposurePage, } @@ -1017,7 +1017,7 @@ where /// Wrapper struct for Era related information. It is not a pure encapsulation as these storage /// items can be accessed directly but nevertheless, its recommended to use `EraInfo` where we /// can and add more functions to it as needed. -pub(crate) struct EraInfo(sp_std::marker::PhantomData); +pub struct EraInfo(sp_std::marker::PhantomData); impl EraInfo { /// Temporary function which looks at both (1) passed param `T::StakingLedger` for legacy /// non-paged rewards, and (2) `T::ClaimedRewards` for paged rewards. This function can be @@ -1047,7 +1047,7 @@ impl EraInfo { /// /// This builds a paged exposure from `PagedExposureMetadata` and `ExposurePage` of the /// validator. For older non-paged exposure, it returns the clipped exposure directly. - pub(crate) fn get_paged_exposure( + pub fn get_paged_exposure( era: EraIndex, validator: &T::AccountId, page: Page, @@ -1082,7 +1082,7 @@ impl EraInfo { } /// Get full exposure of the validator at a given era. - pub(crate) fn get_full_exposure( + pub fn get_full_exposure( era: EraIndex, validator: &T::AccountId, ) -> Exposure> { @@ -1176,7 +1176,7 @@ impl EraInfo { } /// Store exposure for elected validators at start of an era. - pub(crate) fn set_exposure( + pub fn set_exposure( era: EraIndex, validator: &T::AccountId, exposure: Exposure>, -- GitLab From d07186b8e3ec6634187936caaae48bb8558e3346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=B3nal=20Murray?= Date: Fri, 24 Nov 2023 16:48:56 +0000 Subject: [PATCH 064/102] Remove `RuntimeApi` dependency on system parachain runtime code (#2455) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The last issue blocking the removal of the Polkadot and Kusama system parachains from the repo in #1737 is the dependency on the runtime code through the RuntimeApi in `polkadot-parachain`. This PR introduces two fake runtimes to satisfy the build requirements and changes the `new_partial` function to make it not be generic over the runtimes. The reason for the second runtime is the different Aura keys used in Polkadot Asset Hub, as the impl for AuraApi depends on this type. If this changes the `RuntimeApi` generic could be removed completely from all functions in `services.rs` and and generic type parameters in `services.rs` and specified as a concrete type to TFullClient`. --------- Co-authored-by: Bastian Köcher --- Cargo.lock | 9 + cumulus/polkadot-parachain/Cargo.toml | 13 + .../src/chain_spec/bridge_hubs.rs | 5 - cumulus/polkadot-parachain/src/command.rs | 285 +++--------------- .../asset_hub_polkadot_aura.rs | 200 ++++++++++++ .../src/fake_runtime_api/aura.rs | 200 ++++++++++++ .../src/fake_runtime_api/mod.rs | 21 ++ cumulus/polkadot-parachain/src/main.rs | 1 + cumulus/polkadot-parachain/src/service.rs | 24 +- 9 files changed, 497 insertions(+), 261 deletions(-) create mode 100644 cumulus/polkadot-parachain/src/fake_runtime_api/asset_hub_polkadot_aura.rs create mode 100644 cumulus/polkadot-parachain/src/fake_runtime_api/aura.rs create mode 100644 cumulus/polkadot-parachain/src/fake_runtime_api/mod.rs diff --git a/Cargo.lock b/Cargo.lock index ce43f78fa4f..3fbede968bc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12964,6 +12964,9 @@ dependencies = [ "cumulus-relay-chain-interface", "frame-benchmarking", "frame-benchmarking-cli", + "frame-support", + "frame-system-rpc-runtime-api", + "frame-try-runtime", "futures", "glutton-runtime", "glutton-westend-runtime", @@ -12971,7 +12974,9 @@ dependencies = [ "jsonrpsee", "log", "nix 0.26.2", + "pallet-transaction-payment", "pallet-transaction-payment-rpc", + "pallet-transaction-payment-rpc-runtime-api", "parachains-common", "parity-scale-codec", "penpal-runtime", @@ -13003,14 +13008,18 @@ dependencies = [ "sp-blockchain", "sp-consensus-aura", "sp-core", + "sp-genesis-builder", + "sp-inherents", "sp-io", "sp-keystore", "sp-offchain", "sp-runtime", "sp-session", + "sp-std 8.0.0", "sp-timestamp", "sp-tracing 10.0.0", "sp-transaction-pool", + "sp-version", "staging-xcm", "substrate-build-script-utils", "substrate-frame-rpc-system", diff --git a/cumulus/polkadot-parachain/Cargo.toml b/cumulus/polkadot-parachain/Cargo.toml index d5deda9e7bf..e23a7aeb22b 100644 --- a/cumulus/polkadot-parachain/Cargo.toml +++ b/cumulus/polkadot-parachain/Cargo.toml @@ -49,8 +49,10 @@ sp-runtime = { path = "../../substrate/primitives/runtime", default-features = f sp-io = { path = "../../substrate/primitives/io" } sp-core = { path = "../../substrate/primitives/core" } sp-session = { path = "../../substrate/primitives/session" } +frame-try-runtime = { path = "../../substrate/frame/try-runtime", optional = true } sc-consensus = { path = "../../substrate/client/consensus/common" } sp-tracing = { path = "../../substrate/primitives/tracing" } +frame-support = { path = "../../substrate/frame/support" } sc-cli = { path = "../../substrate/client/cli" } sc-client-api = { path = "../../substrate/client/api" } sc-executor = { path = "../../substrate/client/executor" } @@ -63,12 +65,19 @@ sc-network-sync = { path = "../../substrate/client/network/sync" } sc-basic-authorship = { path = "../../substrate/client/basic-authorship" } sp-timestamp = { path = "../../substrate/primitives/timestamp" } sp-blockchain = { path = "../../substrate/primitives/blockchain" } +sp-genesis-builder = { path = "../../substrate/primitives/genesis-builder", default-features = false } sp-block-builder = { path = "../../substrate/primitives/block-builder" } sp-keystore = { path = "../../substrate/primitives/keystore" } sc-chain-spec = { path = "../../substrate/client/chain-spec" } sc-rpc = { path = "../../substrate/client/rpc" } +sp-version = { path = "../../substrate/primitives/version" } sc-tracing = { path = "../../substrate/client/tracing" } sp-offchain = { path = "../../substrate/primitives/offchain" } +frame-system-rpc-runtime-api = { path = "../../substrate/frame/system/rpc/runtime-api" } +pallet-transaction-payment = { path = "../../substrate/frame/transaction-payment" } +pallet-transaction-payment-rpc-runtime-api = { path = "../../substrate/frame/transaction-payment/rpc/runtime-api" } +sp-std = { path = "../../substrate/primitives/std" } +sp-inherents = { path = "../../substrate/primitives/inherents" } sp-api = { path = "../../substrate/primitives/api" } sp-consensus-aura = { path = "../../substrate/primitives/consensus/aura" } sc-sysinfo = { path = "../../substrate/client/sysinfo" } @@ -126,6 +135,7 @@ runtime-benchmarks = [ "cumulus-primitives-core/runtime-benchmarks", "frame-benchmarking-cli/runtime-benchmarks", "frame-benchmarking/runtime-benchmarks", + "frame-support/runtime-benchmarks", "glutton-runtime/runtime-benchmarks", "glutton-westend-runtime/runtime-benchmarks", "parachains-common/runtime-benchmarks", @@ -149,8 +159,11 @@ try-runtime = [ "collectives-polkadot-runtime/try-runtime", "collectives-westend-runtime/try-runtime", "contracts-rococo-runtime/try-runtime", + "frame-support/try-runtime", + "frame-try-runtime/try-runtime", "glutton-runtime/try-runtime", "glutton-westend-runtime/try-runtime", + "pallet-transaction-payment/try-runtime", "penpal-runtime/try-runtime", "polkadot-cli/try-runtime", "polkadot-service/try-runtime", diff --git a/cumulus/polkadot-parachain/src/chain_spec/bridge_hubs.rs b/cumulus/polkadot-parachain/src/chain_spec/bridge_hubs.rs index 94cef106001..eb253908f5f 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/bridge_hubs.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/bridge_hubs.rs @@ -199,8 +199,6 @@ pub mod rococo { /// Specialized `ChainSpec` for the normal parachain runtime. pub type BridgeHubChainSpec = sc_service::GenericChainSpec<(), Extensions>; - pub type RuntimeApi = bridge_hub_rococo_runtime::RuntimeApi; - pub fn local_config( id: &str, chain_name: &str, @@ -319,7 +317,6 @@ pub mod kusama { /// Specialized `ChainSpec` for the normal parachain runtime. pub type BridgeHubChainSpec = sc_service::GenericChainSpec<(), Extensions>; - pub type RuntimeApi = bridge_hub_kusama_runtime::RuntimeApi; pub fn local_config( id: &str, @@ -429,7 +426,6 @@ pub mod westend { /// Specialized `ChainSpec` for the normal parachain runtime. pub type BridgeHubChainSpec = sc_service::GenericChainSpec; - pub type RuntimeApi = bridge_hub_westend_runtime::RuntimeApi; pub fn local_config( id: &str, @@ -545,7 +541,6 @@ pub mod polkadot { /// Specialized `ChainSpec` for the normal parachain runtime. pub type BridgeHubChainSpec = sc_service::GenericChainSpec<(), Extensions>; - pub type RuntimeApi = bridge_hub_polkadot_runtime::RuntimeApi; pub fn local_config( id: &str, diff --git a/cumulus/polkadot-parachain/src/command.rs b/cumulus/polkadot-parachain/src/command.rs index 7bede22fea7..ea19ad12ba0 100644 --- a/cumulus/polkadot-parachain/src/command.rs +++ b/cumulus/polkadot-parachain/src/command.rs @@ -17,6 +17,9 @@ use crate::{ chain_spec, cli::{Cli, RelayChainCli, Subcommand}, + fake_runtime_api::{ + asset_hub_polkadot_aura::RuntimeApi as AssetHubPolkadotRuntimeApi, aura::RuntimeApi, + }, service::{new_partial, Block}, }; use cumulus_primitives_core::ParaId; @@ -439,128 +442,46 @@ impl SubstrateCli for RelayChainCli { macro_rules! construct_partials { ($config:expr, |$partials:ident| $code:expr) => { match $config.chain_spec.runtime() { - Runtime::AssetHubKusama => { - let $partials = new_partial::( - &$config, - crate::service::aura_build_import_queue::<_, AuraId>, - )?; - $code - }, - Runtime::AssetHubRococo => { - let $partials = new_partial::( - &$config, - crate::service::aura_build_import_queue::<_, AuraId>, - )?; - $code - }, - Runtime::AssetHubWestend => { - let $partials = new_partial::( - &$config, - crate::service::aura_build_import_queue::<_, AuraId>, - )?; - $code - }, Runtime::AssetHubPolkadot => { - let $partials = new_partial::( + let $partials = new_partial::( &$config, crate::service::aura_build_import_queue::<_, AssetHubPolkadotAuraId>, )?; $code }, - Runtime::BridgeHub(bridge_hub_runtime_type) => match bridge_hub_runtime_type { - chain_spec::bridge_hubs::BridgeHubRuntimeType::Polkadot | - chain_spec::bridge_hubs::BridgeHubRuntimeType::PolkadotLocal | - chain_spec::bridge_hubs::BridgeHubRuntimeType::PolkadotDevelopment => { - let $partials = new_partial::( - &$config, - crate::service::aura_build_import_queue::<_, AuraId>, - )?; - $code - }, - chain_spec::bridge_hubs::BridgeHubRuntimeType::Kusama | - chain_spec::bridge_hubs::BridgeHubRuntimeType::KusamaLocal | - chain_spec::bridge_hubs::BridgeHubRuntimeType::KusamaDevelopment => { - let $partials = new_partial::( - &$config, - crate::service::aura_build_import_queue::<_, AuraId>, - )?; - $code - }, - chain_spec::bridge_hubs::BridgeHubRuntimeType::Westend | - chain_spec::bridge_hubs::BridgeHubRuntimeType::WestendLocal | - chain_spec::bridge_hubs::BridgeHubRuntimeType::WestendDevelopment => { - let $partials = new_partial::( - &$config, - crate::service::aura_build_import_queue::<_, AuraId>, - )?; - $code - }, - chain_spec::bridge_hubs::BridgeHubRuntimeType::Rococo | - chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoLocal | - chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoDevelopment => { - let $partials = new_partial::( - &$config, - crate::service::aura_build_import_queue::<_, AuraId>, - )?; - $code - }, - }, - Runtime::CollectivesPolkadot => { - let $partials = new_partial::( - &$config, - crate::service::aura_build_import_queue::<_, AuraId>, - )?; - $code - }, + Runtime::AssetHubKusama | + Runtime::AssetHubRococo | + Runtime::AssetHubWestend | + Runtime::BridgeHub(_) | + Runtime::CollectivesPolkadot | Runtime::CollectivesWestend => { - let $partials = new_partial::( + let $partials = new_partial::( &$config, crate::service::aura_build_import_queue::<_, AuraId>, )?; $code }, - Runtime::Shell => { - let $partials = new_partial::( - &$config, - crate::service::shell_build_import_queue, - )?; - $code - }, - Runtime::Seedling => { - let $partials = new_partial::( + Runtime::GluttonWestend | Runtime::Glutton | Runtime::Shell | Runtime::Seedling => { + let $partials = new_partial::( &$config, crate::service::shell_build_import_queue, )?; $code }, Runtime::ContractsRococo => { - let $partials = new_partial::( + let $partials = new_partial::( &$config, crate::service::contracts_rococo_build_import_queue, )?; $code }, Runtime::Penpal(_) | Runtime::Default => { - let $partials = new_partial::( + let $partials = new_partial::( &$config, crate::service::rococo_parachain_build_import_queue, )?; $code }, - Runtime::GluttonWestend => { - let $partials = new_partial::( - &$config, - crate::service::shell_build_import_queue, - )?; - $code - }, - Runtime::Glutton => { - let $partials = new_partial::( - &$config, - crate::service::shell_build_import_queue, - )?; - $code - }, } }; } @@ -569,39 +490,9 @@ macro_rules! construct_async_run { (|$components:ident, $cli:ident, $cmd:ident, $config:ident| $( $code:tt )* ) => {{ let runner = $cli.create_runner($cmd)?; match runner.config().chain_spec.runtime() { - Runtime::AssetHubWestend => { - runner.async_run(|$config| { - let $components = new_partial::( - &$config, - crate::service::aura_build_import_queue::<_, AuraId>, - )?; - let task_manager = $components.task_manager; - { $( $code )* }.map(|v| (v, task_manager)) - }) - }, - Runtime::AssetHubRococo => { - runner.async_run(|$config| { - let $components = new_partial::( - &$config, - crate::service::aura_build_import_queue::<_, AuraId>, - )?; - let task_manager = $components.task_manager; - { $( $code )* }.map(|v| (v, task_manager)) - }) - }, - Runtime::AssetHubKusama => { - runner.async_run(|$config| { - let $components = new_partial::( - &$config, - crate::service::aura_build_import_queue::<_, AuraId>, - )?; - let task_manager = $components.task_manager; - { $( $code )* }.map(|v| (v, task_manager)) - }) - }, Runtime::AssetHubPolkadot => { runner.async_run(|$config| { - let $components = new_partial::( + let $components = new_partial::( &$config, crate::service::aura_build_import_queue::<_, AssetHubPolkadotAuraId>, )?; @@ -609,9 +500,14 @@ macro_rules! construct_async_run { { $( $code )* }.map(|v| (v, task_manager)) }) }, - Runtime::CollectivesPolkadot => { + Runtime::AssetHubWestend | + Runtime::AssetHubRococo | + Runtime::AssetHubKusama | + Runtime::CollectivesPolkadot | + Runtime::CollectivesWestend | + Runtime::BridgeHub(_) => { runner.async_run(|$config| { - let $components = new_partial::( + let $components = new_partial::( &$config, crate::service::aura_build_import_queue::<_, AuraId>, )?; @@ -619,39 +515,22 @@ macro_rules! construct_async_run { { $( $code )* }.map(|v| (v, task_manager)) }) }, - Runtime::CollectivesWestend => { - runner.async_run(|$config| { - let $components = new_partial::( - &$config, - crate::service::aura_build_import_queue::<_, AuraId>, - )?; - let task_manager = $components.task_manager; - { $( $code )* }.map(|v| (v, task_manager)) - }) - }, - Runtime::Shell => { - runner.async_run(|$config| { - let $components = new_partial::( - &$config, - crate::service::shell_build_import_queue, - )?; - let task_manager = $components.task_manager; - { $( $code )* }.map(|v| (v, task_manager)) - }) - }, - Runtime::Seedling => { + Runtime::Shell | + Runtime::Seedling | + Runtime::GluttonWestend | + Runtime::Glutton => { runner.async_run(|$config| { - let $components = new_partial::( + let $components = new_partial::( &$config, crate::service::shell_build_import_queue, )?; let task_manager = $components.task_manager; { $( $code )* }.map(|v| (v, task_manager)) }) - }, + } Runtime::ContractsRococo => { runner.async_run(|$config| { - let $components = new_partial::( + let $components = new_partial::( &$config, crate::service::contracts_rococo_build_import_queue, )?; @@ -659,66 +538,10 @@ macro_rules! construct_async_run { { $( $code )* }.map(|v| (v, task_manager)) }) }, - Runtime::BridgeHub(bridge_hub_runtime_type) => { - match bridge_hub_runtime_type { - chain_spec::bridge_hubs::BridgeHubRuntimeType::Polkadot | - chain_spec::bridge_hubs::BridgeHubRuntimeType::PolkadotLocal | - chain_spec::bridge_hubs::BridgeHubRuntimeType::PolkadotDevelopment => { - runner.async_run(|$config| { - let $components = new_partial::( - &$config, - crate::service::aura_build_import_queue::<_, AuraId>, - )?; - - let task_manager = $components.task_manager; - { $( $code )* }.map(|v| (v, task_manager)) - }) - }, - chain_spec::bridge_hubs::BridgeHubRuntimeType::Kusama | - chain_spec::bridge_hubs::BridgeHubRuntimeType::KusamaLocal | - chain_spec::bridge_hubs::BridgeHubRuntimeType::KusamaDevelopment => { - runner.async_run(|$config| { - let $components = new_partial::( - &$config, - crate::service::aura_build_import_queue::<_, AuraId>, - )?; - - let task_manager = $components.task_manager; - { $( $code )* }.map(|v| (v, task_manager)) - }) - }, - chain_spec::bridge_hubs::BridgeHubRuntimeType::Westend | - chain_spec::bridge_hubs::BridgeHubRuntimeType::WestendLocal | - chain_spec::bridge_hubs::BridgeHubRuntimeType::WestendDevelopment => { - runner.async_run(|$config| { - let $components = new_partial::( - &$config, - crate::service::aura_build_import_queue::<_, AuraId>, - )?; - - let task_manager = $components.task_manager; - { $( $code )* }.map(|v| (v, task_manager)) - }) - }, - chain_spec::bridge_hubs::BridgeHubRuntimeType::Rococo | - chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoLocal | - chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoDevelopment => { - runner.async_run(|$config| { - let $components = new_partial::( - &$config, - crate::service::aura_build_import_queue::<_, AuraId>, - )?; - - let task_manager = $components.task_manager; - { $( $code )* }.map(|v| (v, task_manager)) - }) - }, - } - }, Runtime::Penpal(_) | Runtime::Default => { runner.async_run(|$config| { let $components = new_partial::< - rococo_parachain_runtime::RuntimeApi, + RuntimeApi, _, >( &$config, @@ -728,26 +551,6 @@ macro_rules! construct_async_run { { $( $code )* }.map(|v| (v, task_manager)) }) }, - Runtime::GluttonWestend => { - runner.async_run(|$config| { - let $components = new_partial::( - &$config, - crate::service::shell_build_import_queue, - )?; - let task_manager = $components.task_manager; - { $( $code )* }.map(|v| (v, task_manager)) - }) - }, - Runtime::Glutton => { - runner.async_run(|$config| { - let $components = new_partial::( - &$config, - crate::service::shell_build_import_queue, - )?; - let task_manager = $components.task_manager; - { $( $code )* }.map(|v| (v, task_manager)) - }) - } } }} } @@ -927,28 +730,28 @@ pub fn run() -> Result<()> { match config.chain_spec.runtime() { Runtime::AssetHubPolkadot => crate::service::start_asset_hub_node::< - asset_hub_polkadot_runtime::RuntimeApi, + AssetHubPolkadotRuntimeApi, AssetHubPolkadotAuraId, >(config, polkadot_config, collator_options, id, hwbench) .await .map(|r| r.0) .map_err(Into::into), Runtime::AssetHubKusama => crate::service::start_asset_hub_node::< - asset_hub_kusama_runtime::RuntimeApi, + RuntimeApi, AuraId, >(config, polkadot_config, collator_options, id, hwbench) .await .map(|r| r.0) .map_err(Into::into), Runtime::AssetHubRococo => crate::service::start_asset_hub_node::< - asset_hub_rococo_runtime::RuntimeApi, + RuntimeApi, AuraId, >(config, polkadot_config, collator_options, id, hwbench) .await .map(|r| r.0) .map_err(Into::into), Runtime::AssetHubWestend => crate::service::start_asset_hub_node::< - asset_hub_westend_runtime::RuntimeApi, + RuntimeApi, AuraId, >(config, polkadot_config, collator_options, id, hwbench) .await @@ -956,7 +759,7 @@ pub fn run() -> Result<()> { .map_err(Into::into), Runtime::CollectivesPolkadot => crate::service::start_generic_aura_node::< - collectives_polkadot_runtime::RuntimeApi, + RuntimeApi, AuraId, >(config, polkadot_config, collator_options, id, hwbench) .await @@ -964,14 +767,14 @@ pub fn run() -> Result<()> { .map_err(Into::into), Runtime::CollectivesWestend => crate::service::start_generic_aura_node::< - collectives_westend_runtime::RuntimeApi, + RuntimeApi, AuraId, >(config, polkadot_config, collator_options, id, hwbench) .await .map(|r| r.0) .map_err(Into::into), Runtime::Shell => - crate::service::start_shell_node::( + crate::service::start_shell_node::( config, polkadot_config, collator_options, @@ -982,7 +785,7 @@ pub fn run() -> Result<()> { .map(|r| r.0) .map_err(Into::into), Runtime::Seedling => - crate::service::start_shell_node::( + crate::service::start_shell_node::( config, polkadot_config, collator_options, @@ -1007,7 +810,7 @@ chain_spec::bridge_hubs::BridgeHubRuntimeType::Polkadot | chain_spec::bridge_hubs::BridgeHubRuntimeType::PolkadotLocal | chain_spec::bridge_hubs::BridgeHubRuntimeType::PolkadotDevelopment => crate::service::start_generic_aura_node::< - chain_spec::bridge_hubs::polkadot::RuntimeApi, + RuntimeApi, AuraId, >(config, polkadot_config, collator_options, id, hwbench) .await @@ -1016,7 +819,7 @@ chain_spec::bridge_hubs::BridgeHubRuntimeType::Polkadot | chain_spec::bridge_hubs::BridgeHubRuntimeType::KusamaLocal | chain_spec::bridge_hubs::BridgeHubRuntimeType::KusamaDevelopment => crate::service::start_generic_aura_node::< - chain_spec::bridge_hubs::kusama::RuntimeApi, + RuntimeApi, AuraId, >(config, polkadot_config, collator_options, id, hwbench) .await @@ -1025,7 +828,7 @@ chain_spec::bridge_hubs::BridgeHubRuntimeType::Polkadot | chain_spec::bridge_hubs::BridgeHubRuntimeType::WestendLocal | chain_spec::bridge_hubs::BridgeHubRuntimeType::WestendDevelopment => crate::service::start_generic_aura_node::< - chain_spec::bridge_hubs::westend::RuntimeApi, + RuntimeApi, AuraId, >(config, polkadot_config, collator_options, id, hwbench) .await @@ -1034,7 +837,7 @@ chain_spec::bridge_hubs::BridgeHubRuntimeType::Polkadot | chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoLocal | chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoDevelopment => crate::service::start_generic_aura_node::< - chain_spec::bridge_hubs::rococo::RuntimeApi, + RuntimeApi, AuraId, >(config, polkadot_config, collator_options, id, hwbench) .await @@ -1054,7 +857,7 @@ chain_spec::bridge_hubs::BridgeHubRuntimeType::Polkadot | .map_err(Into::into), Runtime::GluttonWestend => crate::service::start_basic_lookahead_node::< - glutton_westend_runtime::RuntimeApi, + RuntimeApi, AuraId, >(config, polkadot_config, collator_options, id, hwbench) .await @@ -1062,7 +865,7 @@ chain_spec::bridge_hubs::BridgeHubRuntimeType::Polkadot | .map_err(Into::into), Runtime::Glutton => crate::service::start_basic_lookahead_node::< - glutton_runtime::RuntimeApi, + RuntimeApi, AuraId, >(config, polkadot_config, collator_options, id, hwbench) .await diff --git a/cumulus/polkadot-parachain/src/fake_runtime_api/asset_hub_polkadot_aura.rs b/cumulus/polkadot-parachain/src/fake_runtime_api/asset_hub_polkadot_aura.rs new file mode 100644 index 00000000000..76dd7347ccb --- /dev/null +++ b/cumulus/polkadot-parachain/src/fake_runtime_api/asset_hub_polkadot_aura.rs @@ -0,0 +1,200 @@ +// Copyright (C) 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 . + +//! These are used to provide a type that implements these runtime APIs without requiring to import +//! the native runtimes. + +use frame_support::weights::Weight; +use parachains_common::{AccountId, AssetHubPolkadotAuraId, Balance, Nonce}; +use polkadot_primitives::Block; +use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; +use sp_runtime::{ + traits::Block as BlockT, + transaction_validity::{TransactionSource, TransactionValidity}, + ApplyExtrinsicResult, +}; + +pub struct Runtime; + +sp_api::impl_runtime_apis! { + impl sp_api::Core for Runtime { + fn version() -> sp_version::RuntimeVersion { + unimplemented!() + } + + fn execute_block(_: Block) { + unimplemented!() + } + + fn initialize_block(_: &::Header) { + unimplemented!() + } + } + + impl sp_api::Metadata for Runtime { + fn metadata() -> OpaqueMetadata { + unimplemented!() + } + + fn metadata_at_version(_: u32) -> Option { + unimplemented!() + } + + fn metadata_versions() -> sp_std::vec::Vec { + unimplemented!() + } + } + + impl sp_consensus_aura::AuraApi for Runtime { + fn slot_duration() -> sp_consensus_aura::SlotDuration { + unimplemented!() + } + + fn authorities() -> Vec { + unimplemented!() + } + } + + impl cumulus_primitives_aura::AuraUnincludedSegmentApi for Runtime { + fn can_build_upon( + _: ::Hash, + _: cumulus_primitives_aura::Slot, + ) -> bool { + unimplemented!() + } + } + + impl sp_block_builder::BlockBuilder for Runtime { + fn apply_extrinsic(_: ::Extrinsic) -> ApplyExtrinsicResult { + unimplemented!() + } + + fn finalize_block() -> ::Header { + unimplemented!() + } + + fn inherent_extrinsics(_: sp_inherents::InherentData) -> Vec<::Extrinsic> { + unimplemented!() + } + + fn check_inherents(_: Block, _: sp_inherents::InherentData) -> sp_inherents::CheckInherentsResult { + unimplemented!() + } + } + + impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { + fn validate_transaction( + _: TransactionSource, + _: ::Extrinsic, + _: ::Hash, + ) -> TransactionValidity { + unimplemented!() + } + } + + impl sp_offchain::OffchainWorkerApi for Runtime { + fn offchain_worker(_: &::Header) { + unimplemented!() + } + } + + impl sp_session::SessionKeys for Runtime { + fn generate_session_keys(_: Option>) -> Vec { + unimplemented!() + } + + fn decode_session_keys( + _: Vec, + ) -> Option, KeyTypeId)>> { + unimplemented!() + } + } + + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi for Runtime { + fn query_info( + _: ::Extrinsic, + _: u32, + ) -> pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo { + unimplemented!() + } + fn query_fee_details( + _: ::Extrinsic, + _: u32, + ) -> pallet_transaction_payment::FeeDetails { + unimplemented!() + } + fn query_weight_to_fee(_: Weight) -> Balance { + unimplemented!() + } + fn query_length_to_fee(_: u32) -> Balance { + unimplemented!() + } + } + + impl cumulus_primitives_core::CollectCollationInfo for Runtime { + fn collect_collation_info(_: &::Header) -> cumulus_primitives_core::CollationInfo { + unimplemented!() + } + } + + #[cfg(feature = "try-runtime")] + impl frame_try_runtime::TryRuntime for Runtime { + fn on_runtime_upgrade(_: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { + unimplemented!() + } + + fn execute_block( + _: Block, + _: bool, + _: bool, + _: frame_try_runtime::TryStateSelect, + ) -> Weight { + unimplemented!() + } + } + + impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { + fn account_nonce(_: AccountId) -> Nonce { + unimplemented!() + } + } + + #[cfg(feature = "runtime-benchmarks")] + impl frame_benchmarking::Benchmark for Runtime { + fn benchmark_metadata(_: bool) -> ( + Vec, + Vec, + ) { + unimplemented!() + } + + fn dispatch_benchmark( + _: frame_benchmarking::BenchmarkConfig + ) -> Result, sp_runtime::RuntimeString> { + unimplemented!() + } + } + + impl sp_genesis_builder::GenesisBuilder for Runtime { + fn create_default_config() -> Vec { + unimplemented!() + } + + fn build_config(_: Vec) -> sp_genesis_builder::Result { + unimplemented!() + } + } +} diff --git a/cumulus/polkadot-parachain/src/fake_runtime_api/aura.rs b/cumulus/polkadot-parachain/src/fake_runtime_api/aura.rs new file mode 100644 index 00000000000..0f01b85ebcf --- /dev/null +++ b/cumulus/polkadot-parachain/src/fake_runtime_api/aura.rs @@ -0,0 +1,200 @@ +// Copyright (C) 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 . + +//! These are used to provide a type that implements these runtime APIs without requiring to import +//! the native runtimes. + +use frame_support::weights::Weight; +use parachains_common::{AccountId, AuraId, Balance, Nonce}; +use polkadot_primitives::Block; +use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; +use sp_runtime::{ + traits::Block as BlockT, + transaction_validity::{TransactionSource, TransactionValidity}, + ApplyExtrinsicResult, +}; + +pub struct Runtime; + +sp_api::impl_runtime_apis! { + impl sp_api::Core for Runtime { + fn version() -> sp_version::RuntimeVersion { + unimplemented!() + } + + fn execute_block(_: Block) { + unimplemented!() + } + + fn initialize_block(_: &::Header) { + unimplemented!() + } + } + + impl sp_api::Metadata for Runtime { + fn metadata() -> OpaqueMetadata { + unimplemented!() + } + + fn metadata_at_version(_: u32) -> Option { + unimplemented!() + } + + fn metadata_versions() -> sp_std::vec::Vec { + unimplemented!() + } + } + + impl sp_consensus_aura::AuraApi for Runtime { + fn slot_duration() -> sp_consensus_aura::SlotDuration { + unimplemented!() + } + + fn authorities() -> Vec { + unimplemented!() + } + } + + impl cumulus_primitives_aura::AuraUnincludedSegmentApi for Runtime { + fn can_build_upon( + _: ::Hash, + _: cumulus_primitives_aura::Slot, + ) -> bool { + unimplemented!() + } + } + + impl sp_block_builder::BlockBuilder for Runtime { + fn apply_extrinsic(_: ::Extrinsic) -> ApplyExtrinsicResult { + unimplemented!() + } + + fn finalize_block() -> ::Header { + unimplemented!() + } + + fn inherent_extrinsics(_: sp_inherents::InherentData) -> Vec<::Extrinsic> { + unimplemented!() + } + + fn check_inherents(_: Block, _: sp_inherents::InherentData) -> sp_inherents::CheckInherentsResult { + unimplemented!() + } + } + + impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { + fn validate_transaction( + _: TransactionSource, + _: ::Extrinsic, + _: ::Hash, + ) -> TransactionValidity { + unimplemented!() + } + } + + impl sp_offchain::OffchainWorkerApi for Runtime { + fn offchain_worker(_: &::Header) { + unimplemented!() + } + } + + impl sp_session::SessionKeys for Runtime { + fn generate_session_keys(_: Option>) -> Vec { + unimplemented!() + } + + fn decode_session_keys( + _: Vec, + ) -> Option, KeyTypeId)>> { + unimplemented!() + } + } + + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi for Runtime { + fn query_info( + _: ::Extrinsic, + _: u32, + ) -> pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo { + unimplemented!() + } + fn query_fee_details( + _: ::Extrinsic, + _: u32, + ) -> pallet_transaction_payment::FeeDetails { + unimplemented!() + } + fn query_weight_to_fee(_: Weight) -> Balance { + unimplemented!() + } + fn query_length_to_fee(_: u32) -> Balance { + unimplemented!() + } + } + + impl cumulus_primitives_core::CollectCollationInfo for Runtime { + fn collect_collation_info(_: &::Header) -> cumulus_primitives_core::CollationInfo { + unimplemented!() + } + } + + #[cfg(feature = "try-runtime")] + impl frame_try_runtime::TryRuntime for Runtime { + fn on_runtime_upgrade(_: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { + unimplemented!() + } + + fn execute_block( + _: Block, + _: bool, + _: bool, + _: frame_try_runtime::TryStateSelect, + ) -> Weight { + unimplemented!() + } + } + + impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { + fn account_nonce(_: AccountId) -> Nonce { + unimplemented!() + } + } + + #[cfg(feature = "runtime-benchmarks")] + impl frame_benchmarking::Benchmark for Runtime { + fn benchmark_metadata(_: bool) -> ( + Vec, + Vec, + ) { + unimplemented!() + } + + fn dispatch_benchmark( + _: frame_benchmarking::BenchmarkConfig + ) -> Result, sp_runtime::RuntimeString> { + unimplemented!() + } + } + + impl sp_genesis_builder::GenesisBuilder for Runtime { + fn create_default_config() -> Vec { + unimplemented!() + } + + fn build_config(_: Vec) -> sp_genesis_builder::Result { + unimplemented!() + } + } +} diff --git a/cumulus/polkadot-parachain/src/fake_runtime_api/mod.rs b/cumulus/polkadot-parachain/src/fake_runtime_api/mod.rs new file mode 100644 index 00000000000..29e2736b06f --- /dev/null +++ b/cumulus/polkadot-parachain/src/fake_runtime_api/mod.rs @@ -0,0 +1,21 @@ +// Copyright (C) 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 . + +//! In an ideal world this would be one runtime which would simplify the code massively. +//! This is not an ideal world - Polkadot Asset Hub has a different key type. + +pub mod asset_hub_polkadot_aura; +pub mod aura; diff --git a/cumulus/polkadot-parachain/src/main.rs b/cumulus/polkadot-parachain/src/main.rs index 26d7dae4b8a..0757bea84aa 100644 --- a/cumulus/polkadot-parachain/src/main.rs +++ b/cumulus/polkadot-parachain/src/main.rs @@ -22,6 +22,7 @@ mod chain_spec; mod cli; mod command; +mod fake_runtime_api; mod rpc; mod service; diff --git a/cumulus/polkadot-parachain/src/service.rs b/cumulus/polkadot-parachain/src/service.rs index f580835db55..b0fca518201 100644 --- a/cumulus/polkadot-parachain/src/service.rs +++ b/cumulus/polkadot-parachain/src/service.rs @@ -40,7 +40,7 @@ use sp_core::Pair; use jsonrpsee::RpcModule; -use crate::rpc; +use crate::{fake_runtime_api::aura::RuntimeApi, rpc}; pub use parachains_common::{AccountId, Balance, Block, BlockNumber, Hash, Header, Nonce}; use cumulus_client_consensus_relay_chain::Verifier as RelayChainVerifier; @@ -917,8 +917,8 @@ where /// Build the import queue for the rococo parachain runtime. pub fn rococo_parachain_build_import_queue( - client: Arc>, - block_import: ParachainBlockImport, + client: Arc>, + block_import: ParachainBlockImport, config: &Configuration, telemetry: Option, task_manager: &TaskManager, @@ -960,11 +960,8 @@ pub async fn start_rococo_parachain_node( collator_options: CollatorOptions, para_id: ParaId, hwbench: Option, -) -> sc_service::error::Result<( - TaskManager, - Arc>, -)> { - start_node_impl::( +) -> sc_service::error::Result<(TaskManager, Arc>)> { + start_node_impl::( parachain_config, polkadot_config, collator_options, @@ -1866,8 +1863,8 @@ where #[allow(clippy::type_complexity)] pub fn contracts_rococo_build_import_queue( - client: Arc>, - block_import: ParachainBlockImport, + client: Arc>, + block_import: ParachainBlockImport, config: &Configuration, telemetry: Option, task_manager: &TaskManager, @@ -1909,11 +1906,8 @@ pub async fn start_contracts_rococo_node( collator_options: CollatorOptions, para_id: ParaId, hwbench: Option, -) -> sc_service::error::Result<( - TaskManager, - Arc>, -)> { - start_contracts_rococo_node_impl::( +) -> sc_service::error::Result<(TaskManager, Arc>)> { + start_contracts_rococo_node_impl::( parachain_config, polkadot_config, collator_options, -- GitLab From 81638d4d5e78b67fda4130308930bb4a19b20144 Mon Sep 17 00:00:00 2001 From: Oliver Tale-Yazdi Date: Fri, 24 Nov 2023 18:22:28 +0100 Subject: [PATCH 065/102] Add missing workspace members (#2491) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The following members have been added: ```pre cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal cumulus/parachains/testnets-common polkadot/node/tracking-allocator substrate/frame/examples/frame-crate ``` CI check can be added after https://github.com/paritytech/pipeline-scripts/pull/105 is merged. --------- Signed-off-by: Oliver Tale-Yazdi Co-authored-by: Bastian Köcher --- Cargo.toml | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 57079aa4d03..6af3ea4c3cb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,8 +22,8 @@ members = [ "bridges/primitives/chain-bridge-hub-rococo", "bridges/primitives/chain-bridge-hub-westend", "bridges/primitives/chain-kusama", - "bridges/primitives/chain-polkadot", "bridges/primitives/chain-polkadot-bulletin", + "bridges/primitives/chain-polkadot", "bridges/primitives/chain-rococo", "bridges/primitives/chain-westend", "bridges/primitives/header-chain", @@ -60,20 +60,20 @@ members = [ "cumulus/parachain-template/pallets/template", "cumulus/parachain-template/runtime", "cumulus/parachains/common", - "cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo", - "cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend", - "cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo", - "cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend", - "cumulus/parachains/integration-tests/emulated/common", - "cumulus/parachains/integration-tests/emulated/chains/relays/rococo", - "cumulus/parachains/integration-tests/emulated/chains/relays/westend", "cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-rococo", "cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-westend", "cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo", "cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend", + "cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal", + "cumulus/parachains/integration-tests/emulated/chains/relays/rococo", + "cumulus/parachains/integration-tests/emulated/chains/relays/westend", + "cumulus/parachains/integration-tests/emulated/common", "cumulus/parachains/integration-tests/emulated/networks/rococo-system", - "cumulus/parachains/integration-tests/emulated/networks/rococo-westend-system", "cumulus/parachains/integration-tests/emulated/networks/westend-system", + "cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo", + "cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend", + "cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo", + "cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend", "cumulus/parachains/pallets/collective-content", "cumulus/parachains/pallets/parachain-info", "cumulus/parachains/pallets/ping", @@ -98,6 +98,7 @@ members = [ "cumulus/parachains/runtimes/test-utils", "cumulus/parachains/runtimes/testing/penpal", "cumulus/parachains/runtimes/testing/rococo-parachain", + "cumulus/parachains/testnets-common", "cumulus/polkadot-parachain", "cumulus/primitives/aura", "cumulus/primitives/core", @@ -156,6 +157,7 @@ members = [ "polkadot/node/subsystem", "polkadot/node/test/client", "polkadot/node/test/service", + "polkadot/node/tracking-allocator", "polkadot/node/zombienet-backchannel", "polkadot/parachain", "polkadot/parachain/test-parachains", @@ -190,9 +192,9 @@ members = [ "polkadot/xcm/xcm-simulator", "polkadot/xcm/xcm-simulator/example", "polkadot/xcm/xcm-simulator/fuzzer", + "substrate", "substrate/bin/minimal/node", "substrate/bin/minimal/runtime", - "substrate", "substrate/bin/node-template/node", "substrate/bin/node-template/pallets/template", "substrate/bin/node-template/runtime", @@ -288,9 +290,9 @@ members = [ "substrate/frame/collective", "substrate/frame/contracts", "substrate/frame/contracts/fixtures", + "substrate/frame/contracts/mock-network", "substrate/frame/contracts/primitives", "substrate/frame/contracts/proc-macro", - "substrate/frame/contracts/mock-network", "substrate/frame/conviction-voting", "substrate/frame/core-fellowship", "substrate/frame/democracy", @@ -305,6 +307,7 @@ members = [ "substrate/frame/examples/basic", "substrate/frame/examples/default-config", "substrate/frame/examples/dev-mode", + "substrate/frame/examples/frame-crate", "substrate/frame/examples/kitchensink", "substrate/frame/examples/offchain-worker", "substrate/frame/examples/split", @@ -470,6 +473,7 @@ members = [ "substrate/utils/frame/try-runtime/cli", "substrate/utils/prometheus", "substrate/utils/wasm-builder", + "cumulus/parachains/integration-tests/emulated/networks/rococo-westend-system", ] default-members = [ "polkadot", "substrate/bin/node/cli" ] -- GitLab From 92440590bc4dacdaf9b579e0a0163159a8f85bad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=B3nal=20Murray?= Date: Fri, 24 Nov 2023 17:38:26 +0000 Subject: [PATCH 066/102] Add broker weights --- .../coretime/coretime-rococo/src/lib.rs | 1 + .../coretime-rococo/src/weights/mod.rs | 1 + .../src/weights/pallet_broker.rs | 490 ++++++++++++++++++ 3 files changed, 492 insertions(+) create mode 100644 cumulus/parachains/runtimes/coretime/coretime-rococo/src/weights/pallet_broker.rs diff --git a/cumulus/parachains/runtimes/coretime/coretime-rococo/src/lib.rs b/cumulus/parachains/runtimes/coretime/coretime-rococo/src/lib.rs index 61d225463b1..5f2615cab41 100644 --- a/cumulus/parachains/runtimes/coretime/coretime-rococo/src/lib.rs +++ b/cumulus/parachains/runtimes/coretime/coretime-rococo/src/lib.rs @@ -509,6 +509,7 @@ mod benches { [cumulus_pallet_parachain_system, ParachainSystem] [pallet_timestamp, Timestamp] [pallet_balances, Balances] + [pallet_broker, Broker] [pallet_collator_selection, CollatorSelection] [pallet_session, SessionBench::] [cumulus_pallet_xcmp_queue, XcmpQueue] diff --git a/cumulus/parachains/runtimes/coretime/coretime-rococo/src/weights/mod.rs b/cumulus/parachains/runtimes/coretime/coretime-rococo/src/weights/mod.rs index 7fc715b5d66..0b6e81bb62f 100644 --- a/cumulus/parachains/runtimes/coretime/coretime-rococo/src/weights/mod.rs +++ b/cumulus/parachains/runtimes/coretime/coretime-rococo/src/weights/mod.rs @@ -24,6 +24,7 @@ pub mod cumulus_pallet_xcmp_queue; pub mod extrinsic_weights; pub mod frame_system; pub mod pallet_balances; +pub mod pallet_broker; pub mod pallet_collator_selection; pub mod pallet_message_queue; pub mod pallet_multisig; diff --git a/cumulus/parachains/runtimes/coretime/coretime-rococo/src/weights/pallet_broker.rs b/cumulus/parachains/runtimes/coretime/coretime-rococo/src/weights/pallet_broker.rs new file mode 100644 index 00000000000..244d7e6c841 --- /dev/null +++ b/cumulus/parachains/runtimes/coretime/coretime-rococo/src/weights/pallet_broker.rs @@ -0,0 +1,490 @@ +// Copyright (C) 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_broker` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2023-11-24, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `dagda.local`, CPU: `` +//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("coretime-rococo-dev")`, DB CACHE: 1024 + +// Executed Command: +// ./target/release/polkadot-parachain +// benchmark +// pallet +// --chain=coretime-rococo-dev +// --wasm-execution=compiled +// --pallet=pallet_broker +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./cumulus/file_header.txt +// --output=./cumulus/parachains/runtimes/coretime/coretime-rococo/src/weights/pallet_broker.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weight functions for `pallet_broker`. +pub struct WeightInfo(PhantomData); +impl pallet_broker::WeightInfo for WeightInfo { + /// Storage: `Broker::Configuration` (r:0 w:1) + /// Proof: `Broker::Configuration` (`max_values`: Some(1), `max_size`: Some(31), added: 526, mode: `MaxEncodedLen`) + fn configure() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_000_000 picoseconds. + Weight::from_parts(3_000_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Broker::Reservations` (r:1 w:1) + /// Proof: `Broker::Reservations` (`max_values`: Some(1), `max_size`: Some(6011), added: 6506, mode: `MaxEncodedLen`) + fn reserve() -> Weight { + // Proof Size summary in bytes: + // Measured: `4878` + // Estimated: `7496` + // Minimum execution time: 24_000_000 picoseconds. + Weight::from_parts(25_000_000, 0) + .saturating_add(Weight::from_parts(0, 7496)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Broker::Reservations` (r:1 w:1) + /// Proof: `Broker::Reservations` (`max_values`: Some(1), `max_size`: Some(6011), added: 6506, mode: `MaxEncodedLen`) + fn unreserve() -> Weight { + // Proof Size summary in bytes: + // Measured: `6080` + // Estimated: `7496` + // Minimum execution time: 23_000_000 picoseconds. + Weight::from_parts(24_000_000, 0) + .saturating_add(Weight::from_parts(0, 7496)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Broker::Leases` (r:1 w:1) + /// Proof: `Broker::Leases` (`max_values`: Some(1), `max_size`: Some(41), added: 536, mode: `MaxEncodedLen`) + fn set_lease() -> Weight { + // Proof Size summary in bytes: + // Measured: `101` + // Estimated: `1526` + // Minimum execution time: 10_000_000 picoseconds. + Weight::from_parts(10_000_000, 0) + .saturating_add(Weight::from_parts(0, 1526)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Broker::Configuration` (r:1 w:0) + /// Proof: `Broker::Configuration` (`max_values`: Some(1), `max_size`: Some(31), added: 526, mode: `MaxEncodedLen`) + /// Storage: `Broker::InstaPoolIo` (r:3 w:3) + /// Proof: `Broker::InstaPoolIo` (`max_values`: None, `max_size`: Some(28), added: 2503, mode: `MaxEncodedLen`) + /// Storage: `Broker::Reservations` (r:1 w:0) + /// Proof: `Broker::Reservations` (`max_values`: Some(1), `max_size`: Some(6011), added: 6506, mode: `MaxEncodedLen`) + /// Storage: `Broker::Leases` (r:1 w:1) + /// Proof: `Broker::Leases` (`max_values`: Some(1), `max_size`: Some(41), added: 536, mode: `MaxEncodedLen`) + /// Storage: `Broker::SaleInfo` (r:0 w:1) + /// Proof: `Broker::SaleInfo` (`max_values`: Some(1), `max_size`: Some(57), added: 552, mode: `MaxEncodedLen`) + /// Storage: `Broker::Status` (r:0 w:1) + /// Proof: `Broker::Status` (`max_values`: Some(1), `max_size`: Some(18), added: 513, mode: `MaxEncodedLen`) + /// Storage: `Broker::Workplan` (r:0 w:10) + /// Proof: `Broker::Workplan` (`max_values`: None, `max_size`: Some(1216), added: 3691, mode: `MaxEncodedLen`) + /// The range of component `n` is `[0, 1000]`. + fn start_sales(_n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `6192` + // Estimated: `8499` + // Minimum execution time: 54_000_000 picoseconds. + Weight::from_parts(56_738_055, 0) + .saturating_add(Weight::from_parts(0, 8499)) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().writes(16)) + } + /// Storage: `Broker::Status` (r:1 w:0) + /// Proof: `Broker::Status` (`max_values`: Some(1), `max_size`: Some(18), added: 513, mode: `MaxEncodedLen`) + /// Storage: `Broker::SaleInfo` (r:1 w:1) + /// Proof: `Broker::SaleInfo` (`max_values`: Some(1), `max_size`: Some(57), added: 552, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Broker::Regions` (r:0 w:1) + /// Proof: `Broker::Regions` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + fn purchase() -> Weight { + // Proof Size summary in bytes: + // Measured: `316` + // Estimated: `3593` + // Minimum execution time: 35_000_000 picoseconds. + Weight::from_parts(36_000_000, 0) + .saturating_add(Weight::from_parts(0, 3593)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: `Broker::Configuration` (r:1 w:0) + /// Proof: `Broker::Configuration` (`max_values`: Some(1), `max_size`: Some(31), added: 526, mode: `MaxEncodedLen`) + /// Storage: `Broker::Status` (r:1 w:0) + /// Proof: `Broker::Status` (`max_values`: Some(1), `max_size`: Some(18), added: 513, mode: `MaxEncodedLen`) + /// Storage: `Broker::SaleInfo` (r:1 w:1) + /// Proof: `Broker::SaleInfo` (`max_values`: Some(1), `max_size`: Some(57), added: 552, mode: `MaxEncodedLen`) + /// Storage: `Broker::AllowedRenewals` (r:1 w:2) + /// Proof: `Broker::AllowedRenewals` (`max_values`: None, `max_size`: Some(1233), added: 3708, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Broker::Workplan` (r:0 w:1) + /// Proof: `Broker::Workplan` (`max_values`: None, `max_size`: Some(1216), added: 3691, mode: `MaxEncodedLen`) + fn renew() -> Weight { + // Proof Size summary in bytes: + // Measured: `434` + // Estimated: `4698` + // Minimum execution time: 48_000_000 picoseconds. + Weight::from_parts(68_000_000, 0) + .saturating_add(Weight::from_parts(0, 4698)) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(4)) + } + /// Storage: `Broker::Regions` (r:1 w:1) + /// Proof: `Broker::Regions` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + fn transfer() -> Weight { + // Proof Size summary in bytes: + // Measured: `357` + // Estimated: `3550` + // Minimum execution time: 13_000_000 picoseconds. + Weight::from_parts(13_000_000, 0) + .saturating_add(Weight::from_parts(0, 3550)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Broker::Regions` (r:1 w:2) + /// Proof: `Broker::Regions` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + fn partition() -> Weight { + // Proof Size summary in bytes: + // Measured: `357` + // Estimated: `3550` + // Minimum execution time: 15_000_000 picoseconds. + Weight::from_parts(15_000_000, 0) + .saturating_add(Weight::from_parts(0, 3550)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: `Broker::Regions` (r:1 w:2) + /// Proof: `Broker::Regions` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + fn interlace() -> Weight { + // Proof Size summary in bytes: + // Measured: `357` + // Estimated: `3550` + // Minimum execution time: 14_000_000 picoseconds. + Weight::from_parts(15_000_000, 0) + .saturating_add(Weight::from_parts(0, 3550)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: `Broker::Configuration` (r:1 w:0) + /// Proof: `Broker::Configuration` (`max_values`: Some(1), `max_size`: Some(31), added: 526, mode: `MaxEncodedLen`) + /// Storage: `Broker::Status` (r:1 w:0) + /// Proof: `Broker::Status` (`max_values`: Some(1), `max_size`: Some(18), added: 513, mode: `MaxEncodedLen`) + /// Storage: `Broker::Regions` (r:1 w:1) + /// Proof: `Broker::Regions` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Broker::Workplan` (r:1 w:1) + /// Proof: `Broker::Workplan` (`max_values`: None, `max_size`: Some(1216), added: 3691, mode: `MaxEncodedLen`) + fn assign() -> Weight { + // Proof Size summary in bytes: + // Measured: `602` + // Estimated: `4681` + // Minimum execution time: 23_000_000 picoseconds. + Weight::from_parts(26_000_000, 0) + .saturating_add(Weight::from_parts(0, 4681)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: `Broker::Status` (r:1 w:0) + /// Proof: `Broker::Status` (`max_values`: Some(1), `max_size`: Some(18), added: 513, mode: `MaxEncodedLen`) + /// Storage: `Broker::Regions` (r:1 w:1) + /// Proof: `Broker::Regions` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Broker::Workplan` (r:1 w:1) + /// Proof: `Broker::Workplan` (`max_values`: None, `max_size`: Some(1216), added: 3691, mode: `MaxEncodedLen`) + /// Storage: `Broker::InstaPoolIo` (r:2 w:2) + /// Proof: `Broker::InstaPoolIo` (`max_values`: None, `max_size`: Some(28), added: 2503, mode: `MaxEncodedLen`) + /// Storage: `Broker::InstaPoolContribution` (r:0 w:1) + /// Proof: `Broker::InstaPoolContribution` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) + fn pool() -> Weight { + // Proof Size summary in bytes: + // Measured: `637` + // Estimated: `5996` + // Minimum execution time: 28_000_000 picoseconds. + Weight::from_parts(29_000_000, 0) + .saturating_add(Weight::from_parts(0, 5996)) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(5)) + } + /// Storage: `Broker::InstaPoolContribution` (r:1 w:1) + /// Proof: `Broker::InstaPoolContribution` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) + /// Storage: `Broker::InstaPoolHistory` (r:3 w:1) + /// Proof: `Broker::InstaPoolHistory` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:2 w:2) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// The range of component `m` is `[1, 3]`. + fn claim_revenue(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `721` + // Estimated: `6196 + m * (2520 ±0)` + // Minimum execution time: 63_000_000 picoseconds. + Weight::from_parts(64_601_933, 0) + .saturating_add(Weight::from_parts(0, 6196)) + // Standard Error: 114_459 + .saturating_add(Weight::from_parts(1_784_254, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(m.into()))) + .saturating_add(T::DbWeight::get().writes(5)) + .saturating_add(Weight::from_parts(0, 2520).saturating_mul(m.into())) + } + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) + /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) + /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) + /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) + /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) + /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + fn purchase_credit() -> Weight { + // Proof Size summary in bytes: + // Measured: `284` + // Estimated: `3749` + // Minimum execution time: 62_000_000 picoseconds. + Weight::from_parts(64_000_000, 0) + .saturating_add(Weight::from_parts(0, 3749)) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().writes(3)) + } + /// Storage: `Broker::Status` (r:1 w:0) + /// Proof: `Broker::Status` (`max_values`: Some(1), `max_size`: Some(18), added: 513, mode: `MaxEncodedLen`) + /// Storage: `Broker::Regions` (r:1 w:1) + /// Proof: `Broker::Regions` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + fn drop_region() -> Weight { + // Proof Size summary in bytes: + // Measured: `465` + // Estimated: `3550` + // Minimum execution time: 27_000_000 picoseconds. + Weight::from_parts(35_000_000, 0) + .saturating_add(Weight::from_parts(0, 3550)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Broker::Configuration` (r:1 w:0) + /// Proof: `Broker::Configuration` (`max_values`: Some(1), `max_size`: Some(31), added: 526, mode: `MaxEncodedLen`) + /// Storage: `Broker::Status` (r:1 w:0) + /// Proof: `Broker::Status` (`max_values`: Some(1), `max_size`: Some(18), added: 513, mode: `MaxEncodedLen`) + /// Storage: `Broker::InstaPoolContribution` (r:1 w:1) + /// Proof: `Broker::InstaPoolContribution` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) + fn drop_contribution() -> Weight { + // Proof Size summary in bytes: + // Measured: `463` + // Estimated: `3533` + // Minimum execution time: 33_000_000 picoseconds. + Weight::from_parts(40_000_000, 0) + .saturating_add(Weight::from_parts(0, 3533)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Broker::Configuration` (r:1 w:0) + /// Proof: `Broker::Configuration` (`max_values`: Some(1), `max_size`: Some(31), added: 526, mode: `MaxEncodedLen`) + /// Storage: `Broker::Status` (r:1 w:0) + /// Proof: `Broker::Status` (`max_values`: Some(1), `max_size`: Some(18), added: 513, mode: `MaxEncodedLen`) + /// Storage: `Broker::InstaPoolHistory` (r:1 w:1) + /// Proof: `Broker::InstaPoolHistory` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn drop_history() -> Weight { + // Proof Size summary in bytes: + // Measured: `692` + // Estimated: `3593` + // Minimum execution time: 36_000_000 picoseconds. + Weight::from_parts(55_000_000, 0) + .saturating_add(Weight::from_parts(0, 3593)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Broker::Status` (r:1 w:0) + /// Proof: `Broker::Status` (`max_values`: Some(1), `max_size`: Some(18), added: 513, mode: `MaxEncodedLen`) + /// Storage: `Broker::AllowedRenewals` (r:1 w:1) + /// Proof: `Broker::AllowedRenewals` (`max_values`: None, `max_size`: Some(1233), added: 3708, mode: `MaxEncodedLen`) + fn drop_renewal() -> Weight { + // Proof Size summary in bytes: + // Measured: `387` + // Estimated: `4698` + // Minimum execution time: 21_000_000 picoseconds. + Weight::from_parts(27_000_000, 0) + .saturating_add(Weight::from_parts(0, 4698)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) + /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) + /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) + /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) + /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) + /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[0, 1000]`. + fn request_core_count(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `74` + // Estimated: `3539` + // Minimum execution time: 20_000_000 picoseconds. + Weight::from_parts(21_600_464, 0) + .saturating_add(Weight::from_parts(0, 3539)) + // Standard Error: 133 + .saturating_add(Weight::from_parts(315, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: UNKNOWN KEY `0x18194fcb5c1fcace44d2d0a004272614` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x18194fcb5c1fcace44d2d0a004272614` (r:1 w:1) + /// The range of component `n` is `[0, 1000]`. + fn process_core_count(_n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `26` + // Estimated: `3491` + // Minimum execution time: 4_000_000 picoseconds. + Weight::from_parts(5_001_875, 0) + .saturating_add(Weight::from_parts(0, 3491)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: UNKNOWN KEY `0xf308d869daf021a7724e69c557dd8dbe` (r:1 w:1) + /// Proof: UNKNOWN KEY `0xf308d869daf021a7724e69c557dd8dbe` (r:1 w:1) + /// Storage: `Broker::InstaPoolHistory` (r:1 w:1) + /// Proof: `Broker::InstaPoolHistory` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:2 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn process_revenue() -> Weight { + // Proof Size summary in bytes: + // Measured: `515` + // Estimated: `6196` + // Minimum execution time: 43_000_000 picoseconds. + Weight::from_parts(45_000_000, 0) + .saturating_add(Weight::from_parts(0, 6196)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(3)) + } + /// Storage: `Broker::InstaPoolIo` (r:3 w:3) + /// Proof: `Broker::InstaPoolIo` (`max_values`: None, `max_size`: Some(28), added: 2503, mode: `MaxEncodedLen`) + /// Storage: `Broker::Reservations` (r:1 w:0) + /// Proof: `Broker::Reservations` (`max_values`: Some(1), `max_size`: Some(6011), added: 6506, mode: `MaxEncodedLen`) + /// Storage: `Broker::Leases` (r:1 w:1) + /// Proof: `Broker::Leases` (`max_values`: Some(1), `max_size`: Some(41), added: 536, mode: `MaxEncodedLen`) + /// Storage: `Broker::SaleInfo` (r:0 w:1) + /// Proof: `Broker::SaleInfo` (`max_values`: Some(1), `max_size`: Some(57), added: 552, mode: `MaxEncodedLen`) + /// Storage: `Broker::Workplan` (r:0 w:10) + /// Proof: `Broker::Workplan` (`max_values`: None, `max_size`: Some(1216), added: 3691, mode: `MaxEncodedLen`) + /// The range of component `n` is `[0, 1000]`. + fn rotate_sale(_n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `6143` + // Estimated: `8499` + // Minimum execution time: 43_000_000 picoseconds. + Weight::from_parts(45_171_081, 0) + .saturating_add(Weight::from_parts(0, 8499)) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(15)) + } + /// Storage: `Broker::InstaPoolIo` (r:1 w:0) + /// Proof: `Broker::InstaPoolIo` (`max_values`: None, `max_size`: Some(28), added: 2503, mode: `MaxEncodedLen`) + /// Storage: `Broker::InstaPoolHistory` (r:0 w:1) + /// Proof: `Broker::InstaPoolHistory` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + fn process_pool() -> Weight { + // Proof Size summary in bytes: + // Measured: `42` + // Estimated: `3493` + // Minimum execution time: 6_000_000 picoseconds. + Weight::from_parts(7_000_000, 0) + .saturating_add(Weight::from_parts(0, 3493)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Broker::Workplan` (r:1 w:1) + /// Proof: `Broker::Workplan` (`max_values`: None, `max_size`: Some(1216), added: 3691, mode: `MaxEncodedLen`) + /// Storage: `Broker::Workload` (r:1 w:1) + /// Proof: `Broker::Workload` (`max_values`: None, `max_size`: Some(1212), added: 3687, mode: `MaxEncodedLen`) + /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) + /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) + /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) + /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) + /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) + /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + fn process_core_schedule() -> Weight { + // Proof Size summary in bytes: + // Measured: `1321` + // Estimated: `4786` + // Minimum execution time: 33_000_000 picoseconds. + Weight::from_parts(34_000_000, 0) + .saturating_add(Weight::from_parts(0, 4786)) + .saturating_add(T::DbWeight::get().reads(7)) + .saturating_add(T::DbWeight::get().writes(4)) + } + /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) + /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) + /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) + /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) + /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) + /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + fn request_revenue_info_at() -> Weight { + // Proof Size summary in bytes: + // Measured: `74` + // Estimated: `3539` + // Minimum execution time: 16_000_000 picoseconds. + Weight::from_parts(16_000_000, 0) + .saturating_add(Weight::from_parts(0, 3539)) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: `Broker::Status` (r:1 w:1) + /// Proof: `Broker::Status` (`max_values`: Some(1), `max_size`: Some(18), added: 513, mode: `MaxEncodedLen`) + /// Storage: `Broker::Configuration` (r:1 w:0) + /// Proof: `Broker::Configuration` (`max_values`: Some(1), `max_size`: Some(31), added: 526, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0x18194fcb5c1fcace44d2d0a004272614` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x18194fcb5c1fcace44d2d0a004272614` (r:1 w:1) + /// Storage: UNKNOWN KEY `0xf308d869daf021a7724e69c557dd8dbe` (r:1 w:1) + /// Proof: UNKNOWN KEY `0xf308d869daf021a7724e69c557dd8dbe` (r:1 w:1) + fn do_tick_base() -> Weight { + // Proof Size summary in bytes: + // Measured: `351` + // Estimated: `3816` + // Minimum execution time: 10_000_000 picoseconds. + Weight::from_parts(11_000_000, 0) + .saturating_add(Weight::from_parts(0, 3816)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(3)) + } +} -- GitLab From 63f1210d084014e77bc5a33ac8a35e4508587dcb Mon Sep 17 00:00:00 2001 From: Javier Viola Date: Fri, 24 Nov 2023 20:02:27 -0300 Subject: [PATCH 067/102] bump zombienet version `v1.3.83` (#2492) Include fix for `0002-parachains-upgrade-smoke-test` test. --- .github/review-bot.yml | 2 +- .gitlab/pipeline/zombienet.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/review-bot.yml b/.github/review-bot.yml index b053ead37fb..c522988f02e 100644 --- a/.github/review-bot.yml +++ b/.github/review-bot.yml @@ -9,7 +9,7 @@ rules: - ^\.config/nextest.toml - ^\.cargo/.* exclude: - - ^./gitlab/pipeline/zombienet.* + - ^\.gitlab/pipeline/zombienet.* minApprovals: 2 type: basic teams: diff --git a/.gitlab/pipeline/zombienet.yml b/.gitlab/pipeline/zombienet.yml index fc3fd125619..558cc549cb0 100644 --- a/.gitlab/pipeline/zombienet.yml +++ b/.gitlab/pipeline/zombienet.yml @@ -1,7 +1,7 @@ .zombienet-refs: extends: .build-refs variables: - ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.3.82" + ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.3.83" include: # substrate tests -- GitLab From 5e2734219880b688e63d033968dafe0960f234ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Sat, 25 Nov 2023 00:22:52 +0100 Subject: [PATCH 068/102] Do not pollute global base path with export genesis/wasm (#2487) Otherwise the user may runs into weird errors if there is already a db. --- cumulus/client/cli/src/lib.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/cumulus/client/cli/src/lib.rs b/cumulus/client/cli/src/lib.rs index a2238b73b2b..7e78afe6efb 100644 --- a/cumulus/client/cli/src/lib.rs +++ b/cumulus/client/cli/src/lib.rs @@ -215,6 +215,13 @@ impl sc_cli::CliConfiguration for ExportGenesisStateCommand { fn shared_params(&self) -> &sc_cli::SharedParams { &self.shared_params } + + fn base_path(&self) -> sc_cli::Result> { + // As we are just exporting the genesis wasm a tmp database is enough. + // + // As otherwise we may "pollute" the global base path. + Ok(Some(BasePath::new_temp_dir()?)) + } } /// Command for exporting the genesis wasm file. @@ -266,6 +273,13 @@ impl sc_cli::CliConfiguration for ExportGenesisWasmCommand { fn shared_params(&self) -> &sc_cli::SharedParams { &self.shared_params } + + fn base_path(&self) -> sc_cli::Result> { + // As we are just exporting the genesis wasm a tmp database is enough. + // + // As otherwise we may "pollute" the global base path. + Ok(Some(BasePath::new_temp_dir()?)) + } } fn validate_relay_chain_url(arg: &str) -> Result { -- GitLab From ffc64fd255bc3f1d60138e01a2987540c3f72791 Mon Sep 17 00:00:00 2001 From: Javier Viola Date: Fri, 24 Nov 2023 20:42:20 -0300 Subject: [PATCH 069/102] Zombienet: add polkadot-debug image publish as needs for cumulus tests (#2493) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add `build-push-image-polkadot-debug` job to needs since we changed to use the polkadot-debug image from the current branch for cumulus test and we need to be sure that the image is ready. Fix issues like https://gitlab.parity.io/parity/mirrors/polkadot-sdk/-/jobs/4481059 cc: @bkchr Co-authored-by: Bastian Köcher --- .gitlab/pipeline/zombienet/cumulus.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab/pipeline/zombienet/cumulus.yml b/.gitlab/pipeline/zombienet/cumulus.yml index 3e4df000b7f..409c0aba68e 100644 --- a/.gitlab/pipeline/zombienet/cumulus.yml +++ b/.gitlab/pipeline/zombienet/cumulus.yml @@ -27,6 +27,8 @@ needs: - job: build-push-image-test-parachain artifacts: true + - job: build-push-image-polkadot-debug + artifacts: true variables: POLKADOT_IMAGE: "docker.io/paritypr/polkadot-debug:${DOCKER_IMAGES_VERSION}" GH_DIR: "https://github.com/paritytech/cumulus/tree/${CI_COMMIT_SHORT_SHA}/zombienet/tests" -- GitLab From d5d15a18029eed59914fbf807956ee6ab3bcabf1 Mon Sep 17 00:00:00 2001 From: Michal Kucharczyk <1728078+michalkucharczyk@users.noreply.github.com> Date: Sat, 25 Nov 2023 09:56:17 +0100 Subject: [PATCH 070/102] polkadot-parachain: one chain-spec for all (#2457) This PR removes some `ChainSpec` types which are not necessary (left-overs from #1256). Currently `ChainSpec` does not have to be generic over the specific `RuntimeGenesisConfig`, it is enough to use single type for all: https://github.com/paritytech/polkadot-sdk/blob/9f787018857660440182142adc806954d7d07709/cumulus/polkadot-parachain/src/chain_spec/mod.rs#L53-L54 related to: https://github.com/paritytech/polkadot-sdk/issues/25 --------- Co-authored-by: command-bot <> --- .../src/chain_spec/asset_hubs.rs | 65 +++++------ .../src/chain_spec/bridge_hubs.rs | 92 +++++---------- .../src/chain_spec/collectives.rs | 22 ++-- .../src/chain_spec/contracts.rs | 17 ++- .../src/chain_spec/glutton.rs | 30 +++-- .../polkadot-parachain/src/chain_spec/mod.rs | 3 + .../src/chain_spec/penpal.rs | 9 +- .../src/chain_spec/rococo_parachain.rs | 12 +- .../src/chain_spec/seedling.rs | 9 +- .../src/chain_spec/shell.rs | 9 +- cumulus/polkadot-parachain/src/command.rs | 110 +++++------------- 11 files changed, 137 insertions(+), 241 deletions(-) diff --git a/cumulus/polkadot-parachain/src/chain_spec/asset_hubs.rs b/cumulus/polkadot-parachain/src/chain_spec/asset_hubs.rs index a8d3d2975ad..2988d6af0d1 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/asset_hubs.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/asset_hubs.rs @@ -15,7 +15,8 @@ // along with Cumulus. If not, see . use crate::chain_spec::{ - get_account_id_from_seed, get_collator_keys_from_seed, Extensions, SAFE_XCM_VERSION, + get_account_id_from_seed, get_collator_keys_from_seed, Extensions, GenericChainSpec, + SAFE_XCM_VERSION, }; use cumulus_primitives_core::ParaId; use hex_literal::hex; @@ -23,16 +24,6 @@ use parachains_common::{AccountId, AssetHubPolkadotAuraId, AuraId, Balance as As use sc_service::ChainType; use sp_core::{crypto::UncheckedInto, sr25519}; -/// Specialized `ChainSpec` for the normal parachain runtime. -pub type AssetHubPolkadotChainSpec = - sc_service::GenericChainSpec; -pub type AssetHubKusamaChainSpec = - sc_service::GenericChainSpec; -pub type AssetHubWestendChainSpec = - sc_service::GenericChainSpec; -pub type AssetHubRococoChainSpec = - sc_service::GenericChainSpec; - const ASSET_HUB_POLKADOT_ED: AssetHubBalance = parachains_common::polkadot::currency::EXISTENTIAL_DEPOSIT; const ASSET_HUB_KUSAMA_ED: AssetHubBalance = @@ -72,13 +63,13 @@ pub fn asset_hub_westend_session_keys(keys: AuraId) -> asset_hub_westend_runtime asset_hub_westend_runtime::SessionKeys { aura: keys } } -pub fn asset_hub_polkadot_development_config() -> AssetHubPolkadotChainSpec { +pub fn asset_hub_polkadot_development_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 0.into()); properties.insert("tokenSymbol".into(), "DOT".into()); properties.insert("tokenDecimals".into(), 10.into()); - AssetHubPolkadotChainSpec::builder( + GenericChainSpec::builder( asset_hub_polkadot_runtime::WASM_BINARY .expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "polkadot-dev".into(), para_id: 1000 }, @@ -104,13 +95,13 @@ pub fn asset_hub_polkadot_development_config() -> AssetHubPolkadotChainSpec { .build() } -pub fn asset_hub_polkadot_local_config() -> AssetHubPolkadotChainSpec { +pub fn asset_hub_polkadot_local_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 0.into()); properties.insert("tokenSymbol".into(), "DOT".into()); properties.insert("tokenDecimals".into(), 10.into()); - AssetHubPolkadotChainSpec::builder( + GenericChainSpec::builder( asset_hub_polkadot_runtime::WASM_BINARY .expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "polkadot-local".into(), para_id: 1000 }, @@ -152,13 +143,13 @@ pub fn asset_hub_polkadot_local_config() -> AssetHubPolkadotChainSpec { } // Not used for syncing, but just to determine the genesis values set for the upgrade from shell. -pub fn asset_hub_polkadot_config() -> AssetHubPolkadotChainSpec { +pub fn asset_hub_polkadot_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 0.into()); properties.insert("tokenSymbol".into(), "DOT".into()); properties.insert("tokenDecimals".into(), 10.into()); - AssetHubPolkadotChainSpec::builder( + GenericChainSpec::builder( asset_hub_polkadot_runtime::WASM_BINARY .expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "polkadot".into(), para_id: 1000 }, @@ -249,13 +240,13 @@ fn asset_hub_polkadot_genesis( }) } -pub fn asset_hub_kusama_development_config() -> AssetHubKusamaChainSpec { +pub fn asset_hub_kusama_development_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 2.into()); properties.insert("tokenSymbol".into(), "KSM".into()); properties.insert("tokenDecimals".into(), 12.into()); - AssetHubKusamaChainSpec::builder( + GenericChainSpec::builder( asset_hub_kusama_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "kusama-dev".into(), para_id: 1000 }, ) @@ -280,13 +271,13 @@ pub fn asset_hub_kusama_development_config() -> AssetHubKusamaChainSpec { .build() } -pub fn asset_hub_kusama_local_config() -> AssetHubKusamaChainSpec { +pub fn asset_hub_kusama_local_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 2.into()); properties.insert("tokenSymbol".into(), "KSM".into()); properties.insert("tokenDecimals".into(), 12.into()); - AssetHubKusamaChainSpec::builder( + GenericChainSpec::builder( asset_hub_kusama_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "kusama-local".into(), para_id: 1000 }, ) @@ -325,13 +316,13 @@ pub fn asset_hub_kusama_local_config() -> AssetHubKusamaChainSpec { .build() } -pub fn asset_hub_kusama_config() -> AssetHubKusamaChainSpec { +pub fn asset_hub_kusama_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 2.into()); properties.insert("tokenSymbol".into(), "KSM".into()); properties.insert("tokenDecimals".into(), 12.into()); - AssetHubKusamaChainSpec::builder( + GenericChainSpec::builder( asset_hub_kusama_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "kusama".into(), para_id: 1000 }, ) @@ -407,12 +398,12 @@ fn asset_hub_kusama_genesis( }) } -pub fn asset_hub_westend_development_config() -> AssetHubWestendChainSpec { +pub fn asset_hub_westend_development_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("tokenSymbol".into(), "WND".into()); properties.insert("tokenDecimals".into(), 12.into()); - AssetHubWestendChainSpec::builder( + GenericChainSpec::builder( asset_hub_westend_runtime::WASM_BINARY .expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "westend".into(), para_id: 1000 }, @@ -439,12 +430,12 @@ pub fn asset_hub_westend_development_config() -> AssetHubWestendChainSpec { .build() } -pub fn asset_hub_westend_local_config() -> AssetHubWestendChainSpec { +pub fn asset_hub_westend_local_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("tokenSymbol".into(), "WND".into()); properties.insert("tokenDecimals".into(), 12.into()); - AssetHubWestendChainSpec::builder( + GenericChainSpec::builder( asset_hub_westend_runtime::WASM_BINARY .expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "westend-local".into(), para_id: 1000 }, @@ -485,12 +476,12 @@ pub fn asset_hub_westend_local_config() -> AssetHubWestendChainSpec { .build() } -pub fn asset_hub_westend_config() -> AssetHubWestendChainSpec { +pub fn asset_hub_westend_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("tokenSymbol".into(), "WND".into()); properties.insert("tokenDecimals".into(), 12.into()); - AssetHubWestendChainSpec::builder( + GenericChainSpec::builder( asset_hub_westend_runtime::WASM_BINARY .expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "westend".into(), para_id: 1000 }, @@ -569,7 +560,7 @@ fn asset_hub_westend_genesis( }) } -pub fn asset_hub_rococo_development_config() -> AssetHubRococoChainSpec { +pub fn asset_hub_rococo_development_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 42.into()); properties.insert("tokenSymbol".into(), "ROC".into()); @@ -587,8 +578,8 @@ fn asset_hub_rococo_like_development_config( name: &str, chain_id: &str, para_id: u32, -) -> AssetHubRococoChainSpec { - AssetHubRococoChainSpec::builder( +) -> GenericChainSpec { + GenericChainSpec::builder( asset_hub_rococo_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "rococo-dev".into(), para_id }, ) @@ -614,7 +605,7 @@ fn asset_hub_rococo_like_development_config( .build() } -pub fn asset_hub_rococo_local_config() -> AssetHubRococoChainSpec { +pub fn asset_hub_rococo_local_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 42.into()); properties.insert("tokenSymbol".into(), "ROC".into()); @@ -632,8 +623,8 @@ fn asset_hub_rococo_like_local_config( name: &str, chain_id: &str, para_id: u32, -) -> AssetHubRococoChainSpec { - AssetHubRococoChainSpec::builder( +) -> GenericChainSpec { + GenericChainSpec::builder( asset_hub_rococo_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "rococo-local".into(), para_id }, ) @@ -673,12 +664,12 @@ fn asset_hub_rococo_like_local_config( .build() } -pub fn asset_hub_rococo_genesis_config() -> AssetHubRococoChainSpec { +pub fn asset_hub_rococo_genesis_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("tokenSymbol".into(), "ROC".into()); properties.insert("tokenDecimals".into(), 12.into()); let para_id = 1000; - AssetHubRococoChainSpec::builder( + GenericChainSpec::builder( asset_hub_rococo_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "rococo".into(), para_id }, ) diff --git a/cumulus/polkadot-parachain/src/chain_spec/bridge_hubs.rs b/cumulus/polkadot-parachain/src/chain_spec/bridge_hubs.rs index eb253908f5f..377ceb20e1e 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/bridge_hubs.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/bridge_hubs.rs @@ -14,12 +14,12 @@ // You should have received a copy of the GNU General Public License // along with Cumulus. If not, see . -use crate::chain_spec::{get_account_id_from_seed, get_collator_keys_from_seed}; +use crate::chain_spec::{get_account_id_from_seed, get_collator_keys_from_seed, GenericChainSpec}; use cumulus_primitives_core::ParaId; use parachains_common::Balance as BridgeHubBalance; use sc_chain_spec::ChainSpec; use sp_core::sr25519; -use std::{path::PathBuf, str::FromStr}; +use std::str::FromStr; /// Collects all supported BridgeHub configurations #[derive(Debug, PartialEq)] @@ -71,33 +71,11 @@ impl FromStr for BridgeHubRuntimeType { impl BridgeHubRuntimeType { pub const ID_PREFIX: &'static str = "bridge-hub"; - pub fn chain_spec_from_json_file(&self, path: PathBuf) -> Result, String> { - match self { - BridgeHubRuntimeType::Polkadot | - BridgeHubRuntimeType::PolkadotLocal | - BridgeHubRuntimeType::PolkadotDevelopment => - Ok(Box::new(polkadot::BridgeHubChainSpec::from_json_file(path)?)), - BridgeHubRuntimeType::Kusama | - BridgeHubRuntimeType::KusamaLocal | - BridgeHubRuntimeType::KusamaDevelopment => - Ok(Box::new(kusama::BridgeHubChainSpec::from_json_file(path)?)), - BridgeHubRuntimeType::Westend | - BridgeHubRuntimeType::WestendLocal | - BridgeHubRuntimeType::WestendDevelopment => - Ok(Box::new(westend::BridgeHubChainSpec::from_json_file(path)?)), - BridgeHubRuntimeType::Rococo | - BridgeHubRuntimeType::RococoLocal | - BridgeHubRuntimeType::RococoDevelopment => - Ok(Box::new(rococo::BridgeHubChainSpec::from_json_file(path)?)), - } - } - pub fn load_config(&self) -> Result, String> { match self { - BridgeHubRuntimeType::Polkadot => - Ok(Box::new(polkadot::BridgeHubChainSpec::from_json_bytes( - &include_bytes!("../../chain-specs/bridge-hub-polkadot.json")[..], - )?)), + BridgeHubRuntimeType::Polkadot => Ok(Box::new(GenericChainSpec::from_json_bytes( + &include_bytes!("../../chain-specs/bridge-hub-polkadot.json")[..], + )?)), BridgeHubRuntimeType::PolkadotLocal => Ok(Box::new(polkadot::local_config( polkadot::BRIDGE_HUB_POLKADOT_LOCAL, "Polkadot BridgeHub Local", @@ -110,10 +88,9 @@ impl BridgeHubRuntimeType { "polkadot-dev", ParaId::new(1002), ))), - BridgeHubRuntimeType::Kusama => - Ok(Box::new(kusama::BridgeHubChainSpec::from_json_bytes( - &include_bytes!("../../chain-specs/bridge-hub-kusama.json")[..], - )?)), + BridgeHubRuntimeType::Kusama => Ok(Box::new(GenericChainSpec::from_json_bytes( + &include_bytes!("../../chain-specs/bridge-hub-kusama.json")[..], + )?)), BridgeHubRuntimeType::KusamaLocal => Ok(Box::new(kusama::local_config( kusama::BRIDGE_HUB_KUSAMA_LOCAL, "Kusama BridgeHub Local", @@ -126,10 +103,9 @@ impl BridgeHubRuntimeType { "kusama-dev", ParaId::new(1003), ))), - BridgeHubRuntimeType::Westend => - Ok(Box::new(westend::BridgeHubChainSpec::from_json_bytes( - &include_bytes!("../../chain-specs/bridge-hub-westend.json")[..], - )?)), + BridgeHubRuntimeType::Westend => Ok(Box::new(GenericChainSpec::from_json_bytes( + &include_bytes!("../../chain-specs/bridge-hub-westend.json")[..], + )?)), BridgeHubRuntimeType::WestendLocal => Ok(Box::new(westend::local_config( westend::BRIDGE_HUB_WESTEND_LOCAL, "Westend BridgeHub Local", @@ -144,10 +120,9 @@ impl BridgeHubRuntimeType { ParaId::new(1002), Some("Bob".to_string()), ))), - BridgeHubRuntimeType::Rococo => - Ok(Box::new(rococo::BridgeHubChainSpec::from_json_bytes( - &include_bytes!("../../chain-specs/bridge-hub-rococo.json")[..], - )?)), + BridgeHubRuntimeType::Rococo => Ok(Box::new(GenericChainSpec::from_json_bytes( + &include_bytes!("../../chain-specs/bridge-hub-rococo.json")[..], + )?)), BridgeHubRuntimeType::RococoLocal => Ok(Box::new(rococo::local_config( rococo::BRIDGE_HUB_ROCOCO_LOCAL, "Rococo BridgeHub Local", @@ -184,7 +159,7 @@ fn ensure_id(id: &str) -> Result<&str, String> { /// Sub-module for Rococo setup pub mod rococo { use super::{get_account_id_from_seed, get_collator_keys_from_seed, sr25519, ParaId}; - use crate::chain_spec::{Extensions, SAFE_XCM_VERSION}; + use crate::chain_spec::{Extensions, GenericChainSpec, SAFE_XCM_VERSION}; use parachains_common::{AccountId, AuraId}; use sc_chain_spec::ChainType; @@ -196,9 +171,6 @@ pub mod rococo { const BRIDGE_HUB_ROCOCO_ED: BridgeHubBalance = parachains_common::rococo::currency::EXISTENTIAL_DEPOSIT; - /// Specialized `ChainSpec` for the normal parachain runtime. - pub type BridgeHubChainSpec = sc_service::GenericChainSpec<(), Extensions>; - pub fn local_config( id: &str, chain_name: &str, @@ -206,7 +178,7 @@ pub mod rococo { para_id: ParaId, bridges_pallet_owner_seed: Option, modify_props: ModifyProperties, - ) -> BridgeHubChainSpec { + ) -> GenericChainSpec { // Rococo defaults let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 42.into()); @@ -214,7 +186,7 @@ pub mod rococo { properties.insert("tokenDecimals".into(), 12.into()); modify_props(&mut properties); - BridgeHubChainSpec::builder( + GenericChainSpec::builder( bridge_hub_rococo_runtime::WASM_BINARY .expect("WASM binary was not built, please build it!"), Extensions { relay_chain: relay_chain.to_string(), para_id: para_id.into() }, @@ -303,7 +275,8 @@ pub mod rococo { pub mod kusama { use super::{BridgeHubBalance, ParaId}; use crate::chain_spec::{ - get_account_id_from_seed, get_collator_keys_from_seed, Extensions, SAFE_XCM_VERSION, + get_account_id_from_seed, get_collator_keys_from_seed, Extensions, GenericChainSpec, + SAFE_XCM_VERSION, }; use parachains_common::{AccountId, AuraId}; use sc_chain_spec::ChainType; @@ -315,21 +288,18 @@ pub mod kusama { const BRIDGE_HUB_KUSAMA_ED: BridgeHubBalance = parachains_common::kusama::currency::EXISTENTIAL_DEPOSIT; - /// Specialized `ChainSpec` for the normal parachain runtime. - pub type BridgeHubChainSpec = sc_service::GenericChainSpec<(), Extensions>; - pub fn local_config( id: &str, chain_name: &str, relay_chain: &str, para_id: ParaId, - ) -> BridgeHubChainSpec { + ) -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 2.into()); properties.insert("tokenSymbol".into(), "KSM".into()); properties.insert("tokenDecimals".into(), 12.into()); - BridgeHubChainSpec::builder( + GenericChainSpec::builder( bridge_hub_kusama_runtime::WASM_BINARY .expect("WASM binary was not built, please build it!"), Extensions { relay_chain: relay_chain.to_string(), para_id: para_id.into() }, @@ -411,7 +381,7 @@ pub mod kusama { /// Sub-module for Westend setup. pub mod westend { use super::{get_account_id_from_seed, get_collator_keys_from_seed, sr25519, ParaId}; - use crate::chain_spec::{Extensions, SAFE_XCM_VERSION}; + use crate::chain_spec::{Extensions, GenericChainSpec, SAFE_XCM_VERSION}; use parachains_common::{AccountId, AuraId}; use sc_chain_spec::ChainType; @@ -423,22 +393,18 @@ pub mod westend { const BRIDGE_HUB_WESTEND_ED: BridgeHubBalance = parachains_common::westend::currency::EXISTENTIAL_DEPOSIT; - /// Specialized `ChainSpec` for the normal parachain runtime. - pub type BridgeHubChainSpec = - sc_service::GenericChainSpec; - pub fn local_config( id: &str, chain_name: &str, relay_chain: &str, para_id: ParaId, bridges_pallet_owner_seed: Option, - ) -> BridgeHubChainSpec { + ) -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("tokenSymbol".into(), "WND".into()); properties.insert("tokenDecimals".into(), 12.into()); - BridgeHubChainSpec::builder( + GenericChainSpec::builder( bridge_hub_westend_runtime::WASM_BINARY .expect("WASM binary was not build, please build it!"), Extensions { relay_chain: relay_chain.to_string(), para_id: para_id.into() }, @@ -527,7 +493,8 @@ pub mod westend { pub mod polkadot { use super::{BridgeHubBalance, ParaId}; use crate::chain_spec::{ - get_account_id_from_seed, get_collator_keys_from_seed, Extensions, SAFE_XCM_VERSION, + get_account_id_from_seed, get_collator_keys_from_seed, Extensions, GenericChainSpec, + SAFE_XCM_VERSION, }; use parachains_common::{AccountId, AuraId}; use sc_chain_spec::ChainType; @@ -539,21 +506,18 @@ pub mod polkadot { const BRIDGE_HUB_POLKADOT_ED: BridgeHubBalance = parachains_common::polkadot::currency::EXISTENTIAL_DEPOSIT; - /// Specialized `ChainSpec` for the normal parachain runtime. - pub type BridgeHubChainSpec = sc_service::GenericChainSpec<(), Extensions>; - pub fn local_config( id: &str, chain_name: &str, relay_chain: &str, para_id: ParaId, - ) -> BridgeHubChainSpec { + ) -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 0.into()); properties.insert("tokenSymbol".into(), "DOT".into()); properties.insert("tokenDecimals".into(), 10.into()); - BridgeHubChainSpec::builder( + GenericChainSpec::builder( bridge_hub_polkadot_runtime::WASM_BINARY .expect("WASM binary was not built, please build it!"), Extensions { relay_chain: relay_chain.to_string(), para_id: para_id.into() }, diff --git a/cumulus/polkadot-parachain/src/chain_spec/collectives.rs b/cumulus/polkadot-parachain/src/chain_spec/collectives.rs index 07bd742fa8e..ac75a40ebde 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/collectives.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/collectives.rs @@ -15,16 +15,14 @@ // along with Cumulus. If not, see . use crate::chain_spec::{ - get_account_id_from_seed, get_collator_keys_from_seed, Extensions, SAFE_XCM_VERSION, + get_account_id_from_seed, get_collator_keys_from_seed, Extensions, GenericChainSpec, + SAFE_XCM_VERSION, }; use cumulus_primitives_core::ParaId; use parachains_common::{AccountId, AuraId, Balance as CollectivesBalance}; use sc_service::ChainType; use sp_core::sr25519; -pub type CollectivesPolkadotChainSpec = sc_service::GenericChainSpec<(), Extensions>; -pub type CollectivesWestendChainSpec = sc_service::GenericChainSpec<(), Extensions>; - const COLLECTIVES_POLKADOT_ED: CollectivesBalance = parachains_common::polkadot::currency::EXISTENTIAL_DEPOSIT; const COLLECTIVES_WESTEND_ED: CollectivesBalance = @@ -39,13 +37,13 @@ pub fn collectives_polkadot_session_keys( collectives_polkadot_runtime::SessionKeys { aura: keys } } -pub fn collectives_polkadot_development_config() -> CollectivesPolkadotChainSpec { +pub fn collectives_polkadot_development_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 0.into()); properties.insert("tokenSymbol".into(), "DOT".into()); properties.insert("tokenDecimals".into(), 10.into()); - CollectivesPolkadotChainSpec::builder( + GenericChainSpec::builder( collectives_polkadot_runtime::WASM_BINARY .expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "polkadot-dev".into(), para_id: 1002 }, @@ -75,13 +73,13 @@ pub fn collectives_polkadot_development_config() -> CollectivesPolkadotChainSpec } /// Collectives Polkadot Local Config. -pub fn collectives_polkadot_local_config() -> CollectivesPolkadotChainSpec { +pub fn collectives_polkadot_local_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 0.into()); properties.insert("tokenSymbol".into(), "DOT".into()); properties.insert("tokenDecimals".into(), 10.into()); - CollectivesPolkadotChainSpec::builder( + GenericChainSpec::builder( collectives_polkadot_runtime::WASM_BINARY .expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "polkadot-local".into(), para_id: 1002 }, @@ -169,13 +167,13 @@ pub fn collectives_westend_session_keys(keys: AuraId) -> collectives_westend_run collectives_westend_runtime::SessionKeys { aura: keys } } -pub fn collectives_westend_development_config() -> CollectivesWestendChainSpec { +pub fn collectives_westend_development_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 42.into()); properties.insert("tokenSymbol".into(), "WND".into()); properties.insert("tokenDecimals".into(), 12.into()); - CollectivesWestendChainSpec::builder( + GenericChainSpec::builder( collectives_westend_runtime::WASM_BINARY .expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "westend-dev".into(), para_id: 1002 }, @@ -205,13 +203,13 @@ pub fn collectives_westend_development_config() -> CollectivesWestendChainSpec { } /// Collectives Westend Local Config. -pub fn collectives_westend_local_config() -> CollectivesWestendChainSpec { +pub fn collectives_westend_local_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 42.into()); properties.insert("tokenSymbol".into(), "WND".into()); properties.insert("tokenDecimals".into(), 12.into()); - CollectivesWestendChainSpec::builder( + GenericChainSpec::builder( collectives_westend_runtime::WASM_BINARY .expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "westend-local".into(), para_id: 1002 }, diff --git a/cumulus/polkadot-parachain/src/chain_spec/contracts.rs b/cumulus/polkadot-parachain/src/chain_spec/contracts.rs index 7ca66354fbf..87ac1ed2fa1 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/contracts.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/contracts.rs @@ -15,7 +15,8 @@ // along with Cumulus. If not, see . use crate::chain_spec::{ - get_account_id_from_seed, get_collator_keys_from_seed, Extensions, SAFE_XCM_VERSION, + get_account_id_from_seed, get_collator_keys_from_seed, Extensions, GenericChainSpec, + SAFE_XCM_VERSION, }; use cumulus_primitives_core::ParaId; use hex_literal::hex; @@ -23,8 +24,6 @@ use parachains_common::{AccountId, AuraId}; use sc_service::ChainType; use sp_core::{crypto::UncheckedInto, sr25519}; -pub type ContractsRococoChainSpec = sc_service::GenericChainSpec<(), Extensions>; - /// No relay chain suffix because the id is the same over all relay chains. const CONTRACTS_PARACHAIN_ID: u32 = 1002; @@ -32,12 +31,12 @@ const CONTRACTS_PARACHAIN_ID: u32 = 1002; const CONTRACTS_ROCOCO_ED: contracts_rococo_runtime::Balance = parachains_common::rococo::currency::EXISTENTIAL_DEPOSIT; -pub fn contracts_rococo_development_config() -> ContractsRococoChainSpec { +pub fn contracts_rococo_development_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("tokenSymbol".into(), "ROC".into()); properties.insert("tokenDecimals".into(), 12.into()); - ContractsRococoChainSpec::builder( + GenericChainSpec::builder( contracts_rococo_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "rococo-local".into(), // You MUST set this to the correct network! @@ -79,12 +78,12 @@ pub fn contracts_rococo_development_config() -> ContractsRococoChainSpec { .build() } -pub fn contracts_rococo_local_config() -> ContractsRococoChainSpec { +pub fn contracts_rococo_local_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("tokenSymbol".into(), "ROC".into()); properties.insert("tokenDecimals".into(), 12.into()); - ContractsRococoChainSpec::builder( + GenericChainSpec::builder( contracts_rococo_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "rococo-local".into(), // You MUST set this to the correct network! @@ -126,13 +125,13 @@ pub fn contracts_rococo_local_config() -> ContractsRococoChainSpec { .build() } -pub fn contracts_rococo_config() -> ContractsRococoChainSpec { +pub fn contracts_rococo_config() -> GenericChainSpec { // Give your base currency a unit name and decimal places let mut properties = sc_chain_spec::Properties::new(); properties.insert("tokenSymbol".into(), "ROC".into()); properties.insert("tokenDecimals".into(), 12.into()); - ContractsRococoChainSpec::builder( + GenericChainSpec::builder( contracts_rococo_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "rococo".into(), para_id: CONTRACTS_PARACHAIN_ID } ) diff --git a/cumulus/polkadot-parachain/src/chain_spec/glutton.rs b/cumulus/polkadot-parachain/src/chain_spec/glutton.rs index aff1358d1ae..8eced8d8f81 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/glutton.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/glutton.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Cumulus. If not, see . -use crate::chain_spec::{get_account_id_from_seed, Extensions}; +use crate::chain_spec::{get_account_id_from_seed, Extensions, GenericChainSpec}; use cumulus_primitives_core::ParaId; use parachains_common::AuraId; use sc_service::ChainType; @@ -22,12 +22,8 @@ use sp_core::sr25519; use super::get_collator_keys_from_seed; -/// Specialized `ChainSpec` for the Glutton parachain runtime. -pub type GluttonChainSpec = sc_service::GenericChainSpec<(), Extensions>; -pub type GluttonWestendChainSpec = sc_service::GenericChainSpec<(), Extensions>; - -pub fn glutton_development_config(para_id: ParaId) -> GluttonChainSpec { - GluttonChainSpec::builder( +pub fn glutton_development_config(para_id: ParaId) -> GenericChainSpec { + GenericChainSpec::builder( glutton_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "kusama-dev".into(), para_id: para_id.into() }, ) @@ -41,8 +37,8 @@ pub fn glutton_development_config(para_id: ParaId) -> GluttonChainSpec { .build() } -pub fn glutton_local_config(para_id: ParaId) -> GluttonChainSpec { - GluttonChainSpec::builder( +pub fn glutton_local_config(para_id: ParaId) -> GenericChainSpec { + GenericChainSpec::builder( glutton_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "kusama-local".into(), para_id: para_id.into() }, ) @@ -59,11 +55,11 @@ pub fn glutton_local_config(para_id: ParaId) -> GluttonChainSpec { .build() } -pub fn glutton_config(para_id: ParaId) -> GluttonChainSpec { +pub fn glutton_config(para_id: ParaId) -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 2.into()); - GluttonChainSpec::builder( + GenericChainSpec::builder( glutton_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "kusama".into(), para_id: para_id.into() }, ) @@ -94,8 +90,8 @@ fn glutton_genesis(parachain_id: ParaId, collators: Vec) -> serde_json:: }) } -pub fn glutton_westend_development_config(para_id: ParaId) -> GluttonWestendChainSpec { - GluttonWestendChainSpec::builder( +pub fn glutton_westend_development_config(para_id: ParaId) -> GenericChainSpec { + GenericChainSpec::builder( glutton_westend_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "westend-dev".into(), para_id: para_id.into() }, ) @@ -109,8 +105,8 @@ pub fn glutton_westend_development_config(para_id: ParaId) -> GluttonWestendChai .build() } -pub fn glutton_westend_local_config(para_id: ParaId) -> GluttonWestendChainSpec { - GluttonWestendChainSpec::builder( +pub fn glutton_westend_local_config(para_id: ParaId) -> GenericChainSpec { + GenericChainSpec::builder( glutton_westend_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "westend-local".into(), para_id: para_id.into() }, ) @@ -127,11 +123,11 @@ pub fn glutton_westend_local_config(para_id: ParaId) -> GluttonWestendChainSpec .build() } -pub fn glutton_westend_config(para_id: ParaId) -> GluttonWestendChainSpec { +pub fn glutton_westend_config(para_id: ParaId) -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 42.into()); - GluttonChainSpec::builder( + GenericChainSpec::builder( glutton_westend_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "westend".into(), para_id: para_id.into() }, ) diff --git a/cumulus/polkadot-parachain/src/chain_spec/mod.rs b/cumulus/polkadot-parachain/src/chain_spec/mod.rs index 9cd0a37ad63..e8ed8a74ed7 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/mod.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/mod.rs @@ -50,6 +50,9 @@ impl Extensions { } } +/// Generic chain spec for all polkadot-parachain runtimes +pub type GenericChainSpec = sc_service::GenericChainSpec<(), Extensions>; + /// Helper function to generate a crypto pair from seed pub fn get_from_seed(seed: &str) -> ::Public { TPublic::Pair::from_string(&format!("//{}", seed), None) diff --git a/cumulus/polkadot-parachain/src/chain_spec/penpal.rs b/cumulus/polkadot-parachain/src/chain_spec/penpal.rs index 2e35ee231df..cb1cb632d63 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/penpal.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/penpal.rs @@ -15,23 +15,22 @@ // along with Cumulus. If not, see . use crate::chain_spec::{ - get_account_id_from_seed, get_collator_keys_from_seed, Extensions, SAFE_XCM_VERSION, + get_account_id_from_seed, get_collator_keys_from_seed, Extensions, GenericChainSpec, + SAFE_XCM_VERSION, }; use cumulus_primitives_core::ParaId; use parachains_common::{AccountId, AuraId}; use sc_service::ChainType; use sp_core::sr25519; -/// Specialized `ChainSpec` for the normal parachain runtime. -pub type PenpalChainSpec = sc_service::GenericChainSpec<(), Extensions>; -pub fn get_penpal_chain_spec(id: ParaId, relay_chain: &str) -> PenpalChainSpec { +pub fn get_penpal_chain_spec(id: ParaId, relay_chain: &str) -> GenericChainSpec { // Give your base currency a unit name and decimal places let mut properties = sc_chain_spec::Properties::new(); properties.insert("tokenSymbol".into(), "UNIT".into()); properties.insert("tokenDecimals".into(), 12u32.into()); properties.insert("ss58Format".into(), 42u32.into()); - PenpalChainSpec::builder( + GenericChainSpec::builder( penpal_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: relay_chain.into(), // You MUST set this to the correct network! diff --git a/cumulus/polkadot-parachain/src/chain_spec/rococo_parachain.rs b/cumulus/polkadot-parachain/src/chain_spec/rococo_parachain.rs index c2ba4431456..0434e5f7be8 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/rococo_parachain.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/rococo_parachain.rs @@ -16,7 +16,7 @@ //! ChainSpecs dedicated to Rococo parachain setups (for testing and example purposes) -use crate::chain_spec::{get_from_seed, Extensions, SAFE_XCM_VERSION}; +use crate::chain_spec::{get_from_seed, Extensions, GenericChainSpec, SAFE_XCM_VERSION}; use cumulus_primitives_core::ParaId; use hex_literal::hex; use parachains_common::AccountId; @@ -25,10 +25,8 @@ use rococo_parachain_runtime::AuraId; use sc_chain_spec::ChainType; use sp_core::{crypto::UncheckedInto, sr25519}; -pub type RococoParachainChainSpec = sc_service::GenericChainSpec<(), Extensions>; - -pub fn rococo_parachain_local_config() -> RococoParachainChainSpec { - RococoParachainChainSpec::builder( +pub fn rococo_parachain_local_config() -> GenericChainSpec { + GenericChainSpec::builder( rococo_parachain_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "rococo-local".into(), para_id: 1000 }, ) @@ -57,9 +55,9 @@ pub fn rococo_parachain_local_config() -> RococoParachainChainSpec { .build() } -pub fn staging_rococo_parachain_local_config() -> RococoParachainChainSpec { +pub fn staging_rococo_parachain_local_config() -> GenericChainSpec { #[allow(deprecated)] - RococoParachainChainSpec::builder( + GenericChainSpec::builder( rococo_parachain_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "rococo-local".into(), para_id: 1000 }, ) diff --git a/cumulus/polkadot-parachain/src/chain_spec/seedling.rs b/cumulus/polkadot-parachain/src/chain_spec/seedling.rs index b034588e14c..32d51622054 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/seedling.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/seedling.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Cumulus. If not, see . -use crate::chain_spec::{get_account_id_from_seed, Extensions}; +use crate::chain_spec::{get_account_id_from_seed, Extensions, GenericChainSpec}; use cumulus_primitives_core::ParaId; use parachains_common::{AccountId, AuraId}; use sc_service::ChainType; @@ -22,11 +22,8 @@ use sp_core::sr25519; use super::get_collator_keys_from_seed; -/// Specialized `ChainSpec` for the seedling parachain runtime. -pub type SeedlingChainSpec = sc_service::GenericChainSpec<(), Extensions>; - -pub fn get_seedling_chain_spec() -> SeedlingChainSpec { - SeedlingChainSpec::builder( +pub fn get_seedling_chain_spec() -> GenericChainSpec { + GenericChainSpec::builder( seedling_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "westend".into(), para_id: 2000 }, ) diff --git a/cumulus/polkadot-parachain/src/chain_spec/shell.rs b/cumulus/polkadot-parachain/src/chain_spec/shell.rs index 02c65e809a6..e0a9875fb96 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/shell.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/shell.rs @@ -14,18 +14,15 @@ // You should have received a copy of the GNU General Public License // along with Cumulus. If not, see . -use crate::chain_spec::Extensions; +use crate::chain_spec::{Extensions, GenericChainSpec}; use cumulus_primitives_core::ParaId; use parachains_common::AuraId; use sc_service::ChainType; use super::get_collator_keys_from_seed; -/// Specialized `ChainSpec` for the shell parachain runtime. -pub type ShellChainSpec = sc_service::GenericChainSpec<(), Extensions>; - -pub fn get_shell_chain_spec() -> ShellChainSpec { - ShellChainSpec::builder( +pub fn get_shell_chain_spec() -> GenericChainSpec { + GenericChainSpec::builder( shell_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), Extensions { relay_chain: "westend".into(), para_id: 1000 }, ) diff --git a/cumulus/polkadot-parachain/src/command.rs b/cumulus/polkadot-parachain/src/command.rs index ea19ad12ba0..f966a5db8f3 100644 --- a/cumulus/polkadot-parachain/src/command.rs +++ b/cumulus/polkadot-parachain/src/command.rs @@ -16,6 +16,7 @@ use crate::{ chain_spec, + chain_spec::GenericChainSpec, cli::{Cli, RelayChainCli, Subcommand}, fake_runtime_api::{ asset_hub_polkadot_aura::RuntimeApi as AssetHubPolkadotRuntimeApi, aura::RuntimeApi, @@ -128,18 +129,15 @@ fn load_spec(id: &str) -> std::result::Result, String> { // - Defaul-like "staging" => Box::new(chain_spec::rococo_parachain::staging_rococo_parachain_local_config()), - "tick" => - Box::new(chain_spec::rococo_parachain::RococoParachainChainSpec::from_json_bytes( - &include_bytes!("../chain-specs/tick.json")[..], - )?), - "trick" => - Box::new(chain_spec::rococo_parachain::RococoParachainChainSpec::from_json_bytes( - &include_bytes!("../chain-specs/trick.json")[..], - )?), - "track" => - Box::new(chain_spec::rococo_parachain::RococoParachainChainSpec::from_json_bytes( - &include_bytes!("../chain-specs/track.json")[..], - )?), + "tick" => Box::new(GenericChainSpec::from_json_bytes( + &include_bytes!("../chain-specs/tick.json")[..], + )?), + "trick" => Box::new(GenericChainSpec::from_json_bytes( + &include_bytes!("../chain-specs/trick.json")[..], + )?), + "track" => Box::new(GenericChainSpec::from_json_bytes( + &include_bytes!("../chain-specs/track.json")[..], + )?), // -- Starters "shell" => Box::new(chain_spec::shell::get_shell_chain_spec()), @@ -154,10 +152,9 @@ fn load_spec(id: &str) -> std::result::Result, String> { "asset-hub-polkadot-genesis" | "statemint-genesis" => Box::new(chain_spec::asset_hubs::asset_hub_polkadot_config()), // the shell-based chain spec as used for syncing - "asset-hub-polkadot" | "statemint" => - Box::new(chain_spec::asset_hubs::AssetHubPolkadotChainSpec::from_json_bytes( - &include_bytes!("../chain-specs/asset-hub-polkadot.json")[..], - )?), + "asset-hub-polkadot" | "statemint" => Box::new(GenericChainSpec::from_json_bytes( + &include_bytes!("../chain-specs/asset-hub-polkadot.json")[..], + )?), // -- Asset Hub Kusama "asset-hub-kusama-dev" | "statemine-dev" => @@ -168,10 +165,9 @@ fn load_spec(id: &str) -> std::result::Result, String> { "asset-hub-kusama-genesis" | "statemine-genesis" => Box::new(chain_spec::asset_hubs::asset_hub_kusama_config()), // the shell-based chain spec as used for syncing - "asset-hub-kusama" | "statemine" => - Box::new(chain_spec::asset_hubs::AssetHubKusamaChainSpec::from_json_bytes( - &include_bytes!("../chain-specs/asset-hub-kusama.json")[..], - )?), + "asset-hub-kusama" | "statemine" => Box::new(GenericChainSpec::from_json_bytes( + &include_bytes!("../chain-specs/asset-hub-kusama.json")[..], + )?), // -- Asset Hub Rococo "asset-hub-rococo-dev" => @@ -181,10 +177,9 @@ fn load_spec(id: &str) -> std::result::Result, String> { // the chain spec as used for generating the upgrade genesis values "asset-hub-rococo-genesis" => Box::new(chain_spec::asset_hubs::asset_hub_rococo_genesis_config()), - "asset-hub-rococo" => - Box::new(chain_spec::asset_hubs::AssetHubRococoChainSpec::from_json_bytes( - &include_bytes!("../chain-specs/asset-hub-rococo.json")[..], - )?), + "asset-hub-rococo" => Box::new(GenericChainSpec::from_json_bytes( + &include_bytes!("../chain-specs/asset-hub-rococo.json")[..], + )?), // -- Asset Hub Westend "asset-hub-westend-dev" | "westmint-dev" => @@ -195,28 +190,25 @@ fn load_spec(id: &str) -> std::result::Result, String> { "asset-hub-westend-genesis" | "westmint-genesis" => Box::new(chain_spec::asset_hubs::asset_hub_westend_config()), // the shell-based chain spec as used for syncing - "asset-hub-westend" | "westmint" => - Box::new(chain_spec::asset_hubs::AssetHubWestendChainSpec::from_json_bytes( - &include_bytes!("../chain-specs/asset-hub-westend.json")[..], - )?), + "asset-hub-westend" | "westmint" => Box::new(GenericChainSpec::from_json_bytes( + &include_bytes!("../chain-specs/asset-hub-westend.json")[..], + )?), // -- Polkadot Collectives "collectives-polkadot-dev" => Box::new(chain_spec::collectives::collectives_polkadot_development_config()), "collectives-polkadot-local" => Box::new(chain_spec::collectives::collectives_polkadot_local_config()), - "collectives-polkadot" => - Box::new(chain_spec::collectives::CollectivesPolkadotChainSpec::from_json_bytes( - &include_bytes!("../chain-specs/collectives-polkadot.json")[..], - )?), + "collectives-polkadot" => Box::new(GenericChainSpec::from_json_bytes( + &include_bytes!("../chain-specs/collectives-polkadot.json")[..], + )?), "collectives-westend-dev" => Box::new(chain_spec::collectives::collectives_westend_development_config()), "collectives-westend-local" => Box::new(chain_spec::collectives::collectives_westend_local_config()), - "collectives-westend" => - Box::new(chain_spec::collectives::CollectivesWestendChainSpec::from_json_bytes( - &include_bytes!("../chain-specs/collectives-westend.json")[..], - )?), + "collectives-westend" => Box::new(GenericChainSpec::from_json_bytes( + &include_bytes!("../chain-specs/collectives-westend.json")[..], + )?), // -- Contracts on Rococo "contracts-rococo-dev" => @@ -224,10 +216,9 @@ fn load_spec(id: &str) -> std::result::Result, String> { "contracts-rococo-local" => Box::new(chain_spec::contracts::contracts_rococo_local_config()), "contracts-rococo-genesis" => Box::new(chain_spec::contracts::contracts_rococo_config()), - "contracts-rococo" => - Box::new(chain_spec::contracts::ContractsRococoChainSpec::from_json_bytes( - &include_bytes!("../chain-specs/contracts-rococo.json")[..], - )?), + "contracts-rococo" => Box::new(GenericChainSpec::from_json_bytes( + &include_bytes!("../chain-specs/contracts-rococo.json")[..], + )?), // -- BridgeHub bridge_like_id @@ -279,44 +270,7 @@ fn load_spec(id: &str) -> std::result::Result, String> { }, // -- Loading a specific spec from disk - path => { - let path: PathBuf = path.into(); - match path.runtime() { - Runtime::AssetHubPolkadot => Box::new( - chain_spec::asset_hubs::AssetHubPolkadotChainSpec::from_json_file(path)?, - ), - Runtime::AssetHubKusama => - Box::new(chain_spec::asset_hubs::AssetHubKusamaChainSpec::from_json_file(path)?), - Runtime::AssetHubRococo => - Box::new(chain_spec::asset_hubs::AssetHubRococoChainSpec::from_json_file(path)?), - Runtime::AssetHubWestend => Box::new( - chain_spec::asset_hubs::AssetHubWestendChainSpec::from_json_file(path)?, - ), - Runtime::CollectivesPolkadot => Box::new( - chain_spec::collectives::CollectivesPolkadotChainSpec::from_json_file(path)?, - ), - Runtime::CollectivesWestend => Box::new( - chain_spec::collectives::CollectivesWestendChainSpec::from_json_file(path)?, - ), - Runtime::Shell => - Box::new(chain_spec::shell::ShellChainSpec::from_json_file(path)?), - Runtime::Seedling => - Box::new(chain_spec::seedling::SeedlingChainSpec::from_json_file(path)?), - Runtime::ContractsRococo => - Box::new(chain_spec::contracts::ContractsRococoChainSpec::from_json_file(path)?), - Runtime::BridgeHub(bridge_hub_runtime_type) => - bridge_hub_runtime_type.chain_spec_from_json_file(path)?, - Runtime::Penpal(_para_id) => - Box::new(chain_spec::penpal::PenpalChainSpec::from_json_file(path)?), - Runtime::GluttonWestend => - Box::new(chain_spec::glutton::GluttonChainSpec::from_json_file(path)?), - Runtime::Glutton => - Box::new(chain_spec::glutton::GluttonChainSpec::from_json_file(path)?), - Runtime::Default => Box::new( - chain_spec::rococo_parachain::RococoParachainChainSpec::from_json_file(path)?, - ), - } - }, + path => Box::new(GenericChainSpec::from_json_file(path.into())?), }) } -- GitLab From 73ff1c3647024d3a5e94727e7fb74714c3a98b47 Mon Sep 17 00:00:00 2001 From: Wil Wade Date: Sat, 25 Nov 2023 05:30:57 -0500 Subject: [PATCH 071/102] Update documentation for SafeMode and TxPause Pallets (#2413) # Description Documentation for the TxPause and SafeMode pallets. Based on reading and the notes from the following related PRs: - https://github.com/paritytech/substrate/pull/12092 I believe this also completes the checklist to be able to close the related PRs: - Close #302 - Close #274 --------- Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com> --- Cargo.lock | 2 + substrate/frame/safe-mode/Cargo.toml | 1 + substrate/frame/safe-mode/src/lib.rs | 56 ++++++++++++++++++++++++++ substrate/frame/safe-mode/src/tests.rs | 3 ++ substrate/frame/tx-pause/Cargo.toml | 1 + substrate/frame/tx-pause/src/lib.rs | 56 ++++++++++++++++++++++++++ substrate/frame/tx-pause/src/tests.rs | 3 ++ 7 files changed, 122 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 3fbede968bc..8a3f8e05fbc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10795,6 +10795,7 @@ dependencies = [ name = "pallet-safe-mode" version = "4.0.0-dev" dependencies = [ + "docify", "frame-benchmarking", "frame-support", "frame-system", @@ -11198,6 +11199,7 @@ dependencies = [ name = "pallet-tx-pause" version = "4.0.0-dev" dependencies = [ + "docify", "frame-benchmarking", "frame-support", "frame-system", diff --git a/substrate/frame/safe-mode/Cargo.toml b/substrate/frame/safe-mode/Cargo.toml index ac469bb385c..f7b4ea4dd8c 100644 --- a/substrate/frame/safe-mode/Cargo.toml +++ b/substrate/frame/safe-mode/Cargo.toml @@ -13,6 +13,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false, features = ["derive"] } +docify = "0.2.6" frame-benchmarking = { path = "../benchmarking", default-features = false, optional = true} frame-support = { path = "../support", default-features = false} frame-system = { path = "../system", default-features = false} diff --git a/substrate/frame/safe-mode/src/lib.rs b/substrate/frame/safe-mode/src/lib.rs index b8e8378fa9e..554f509db63 100644 --- a/substrate/frame/safe-mode/src/lib.rs +++ b/substrate/frame/safe-mode/src/lib.rs @@ -15,6 +15,62 @@ // See the License for the specific language governing permissions and // limitations under the License. +//! # Safe Mode +//! +//! Trigger for stopping all extrinsics outside of a specific whitelist. +//! +//! ## WARNING +//! +//! NOT YET AUDITED. DO NOT USE IN PRODUCTION. +//! +//! ## Pallet API +//! +//! See the [`pallet`] module for more information about the interfaces this pallet exposes, +//! including its configuration trait, dispatchables, storage items, events, and errors. +//! +//! ## Overview +//! +//! Safe mode is entered via two paths (deposit or forced) until a set block number. +//! The mode is exited when the block number is reached or a call to one of the exit extrinsics is +//! made. A `WhitelistedCalls` configuration item contains all calls that can be executed while in +//! safe mode. +//! +//! ### Primary Features +//! +//! - Entering safe mode can be via privileged origin or anyone who places a deposit. +//! - Origin configuration items are separated for privileged entering and exiting safe mode. +//! - A configurable duration sets the number of blocks after which the system will exit safe mode. +//! - Safe mode may be extended beyond the configured exit by additional calls. +//! +//! ### Example +//! +//! Configuration of call filters: +//! +//! ```ignore +//! impl frame_system::Config for Runtime { +//! // … +//! type BaseCallFilter = InsideBoth; +//! // … +//! } +//! ``` +//! +//! Entering safe mode with deposit: +#![doc = docify::embed!("src/tests.rs", can_activate)] +//! +//! Entering safe mode via privileged origin: +#![doc = docify::embed!("src/tests.rs", can_force_activate_with_config_origin)] +//! +//! Exiting safe mode via privileged origin: +#![doc = docify::embed!("src/tests.rs", can_force_deactivate_with_config_origin)] +//! +//! ## Low Level / Implementation Details +//! +//! ### Use Cost +//! +//! A storage value (`EnteredUntil`) is used to store the block safe mode will be exited on. +//! Using the call filter will require a db read of that storage on the first extrinsic. +//! The storage will be added to the overlay and incur low cost for all additional calls. + #![cfg_attr(not(feature = "std"), no_std)] #![deny(rustdoc::broken_intra_doc_links)] diff --git a/substrate/frame/safe-mode/src/tests.rs b/substrate/frame/safe-mode/src/tests.rs index b92c5b87a53..c0a2f45a3e7 100644 --- a/substrate/frame/safe-mode/src/tests.rs +++ b/substrate/frame/safe-mode/src/tests.rs @@ -189,6 +189,7 @@ fn can_filter_balance_in_proxy_when_activated() { }); } +#[docify::export] #[test] fn can_activate() { new_test_ext().execute_with(|| { @@ -271,6 +272,7 @@ fn fails_force_deactivate_if_not_activated() { }); } +#[docify::export] #[test] fn can_force_activate_with_config_origin() { new_test_ext().execute_with(|| { @@ -288,6 +290,7 @@ fn can_force_activate_with_config_origin() { }); } +#[docify::export] #[test] fn can_force_deactivate_with_config_origin() { new_test_ext().execute_with(|| { diff --git a/substrate/frame/tx-pause/Cargo.toml b/substrate/frame/tx-pause/Cargo.toml index 9af424f541c..bf0641f5b6d 100644 --- a/substrate/frame/tx-pause/Cargo.toml +++ b/substrate/frame/tx-pause/Cargo.toml @@ -13,6 +13,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false, features = ["derive"] } +docify = "0.2.6" frame-benchmarking = { path = "../benchmarking", default-features = false, optional = true} frame-support = { path = "../support", default-features = false} frame-system = { path = "../system", default-features = false} diff --git a/substrate/frame/tx-pause/src/lib.rs b/substrate/frame/tx-pause/src/lib.rs index a3be0f50172..31be575fba7 100644 --- a/substrate/frame/tx-pause/src/lib.rs +++ b/substrate/frame/tx-pause/src/lib.rs @@ -15,6 +15,62 @@ // See the License for the specific language governing permissions and // limitations under the License. +//! # Transaction Pause +//! +//! Allows dynamic, chain-state-based pausing and unpausing of specific extrinsics via call filters. +//! +//! ## WARNING +//! +//! NOT YET AUDITED. DO NOT USE IN PRODUCTION. +//! +//! ## Pallet API +//! +//! See the [`pallet`] module for more information about the interfaces this pallet exposes, +//! including its configuration trait, dispatchables, storage items, events, and errors. +//! +//! ## Overview +//! +//! A dynamic call filter that can be controlled with extrinsics. +//! +//! Pausing an extrinsic means that the extrinsic CANNOT be called again until it is unpaused. +//! The exception is calls that use `dispatch_bypass_filter`, typically only with the root origin. +//! +//! ### Primary Features +//! +//! - Calls that should never be paused can be added to a whitelist. +//! - Separate origins are configurable for pausing and pausing. +//! - Pausing is triggered using the string representation of the call. +//! - Pauses can target a single extrinsic or an entire pallet. +//! - Pauses can target future extrinsics or pallets. +//! +//! ### Example +//! +//! Configuration of call filters: +//! +//! ```ignore +//! impl frame_system::Config for Runtime { +//! // … +//! type BaseCallFilter = InsideBoth; +//! // … +//! } +//! ``` +//! +//! Pause specific all: +#![doc = docify::embed!("src/tests.rs", can_pause_specific_call)] +//! +//! Unpause specific all: +#![doc = docify::embed!("src/tests.rs", can_unpause_specific_call)] +//! +//! Pause all calls in a pallet: +#![doc = docify::embed!("src/tests.rs", can_pause_all_calls_in_pallet_except_on_whitelist)] +//! +//! ## Low Level / Implementation Details +//! +//! ### Use Cost +//! +//! A storage map (`PausedCalls`) is used to store currently paused calls. +//! Using the call filter will require a db read of that storage on each extrinsic. + #![cfg_attr(not(feature = "std"), no_std)] #![deny(rustdoc::broken_intra_doc_links)] diff --git a/substrate/frame/tx-pause/src/tests.rs b/substrate/frame/tx-pause/src/tests.rs index a71ff3439d9..823abf9d9c4 100644 --- a/substrate/frame/tx-pause/src/tests.rs +++ b/substrate/frame/tx-pause/src/tests.rs @@ -25,6 +25,7 @@ use sp_runtime::DispatchError; // GENERAL SUCCESS/POSITIVE TESTS --------------------- +#[docify::export] #[test] fn can_pause_specific_call() { new_test_ext().execute_with(|| { @@ -43,6 +44,7 @@ fn can_pause_specific_call() { }); } +#[docify::export] #[test] fn can_pause_all_calls_in_pallet_except_on_whitelist() { new_test_ext().execute_with(|| { @@ -64,6 +66,7 @@ fn can_pause_all_calls_in_pallet_except_on_whitelist() { }); } +#[docify::export] #[test] fn can_unpause_specific_call() { new_test_ext().execute_with(|| { -- GitLab From cfa19c37e60f094a2954ffa73b1da261c050f61f Mon Sep 17 00:00:00 2001 From: Marcin S Date: Sat, 25 Nov 2023 17:03:58 +0100 Subject: [PATCH 072/102] PVF: remove audit log access (#2461) --- .gitlab/pipeline/test.yml | 2 +- .../node/core/pvf/src/execute/worker_intf.rs | 31 +--- .../node/core/pvf/src/prepare/worker_intf.rs | 26 +-- polkadot/node/core/pvf/src/security.rs | 149 ------------------ 4 files changed, 3 insertions(+), 205 deletions(-) diff --git a/.gitlab/pipeline/test.yml b/.gitlab/pipeline/test.yml index 79ef9070dba..9c3fa7701c8 100644 --- a/.gitlab/pipeline/test.yml +++ b/.gitlab/pipeline/test.yml @@ -522,4 +522,4 @@ test-syscalls: - if [[ "$CI_JOB_STATUS" == "failed" ]]; then printf "The x86_64 syscalls used by the worker binaries have changed. Please review if this is expected and update polkadot/scripts/list-syscalls/*-worker-syscalls as needed.\n"; fi - allow_failure: true # TODO: remove this once we have an idea how often the syscall lists will change + allow_failure: false # this rarely triggers in practice diff --git a/polkadot/node/core/pvf/src/execute/worker_intf.rs b/polkadot/node/core/pvf/src/execute/worker_intf.rs index fc6cd8fc725..16a7c290b52 100644 --- a/polkadot/node/core/pvf/src/execute/worker_intf.rs +++ b/polkadot/node/core/pvf/src/execute/worker_intf.rs @@ -18,7 +18,6 @@ use crate::{ artifacts::ArtifactPathId, - security, worker_intf::{ clear_worker_dir_path, framed_recv, framed_send, spawn_with_program_path, IdleWorker, SpawnErr, WorkerDir, WorkerHandle, JOB_TIMEOUT_WALL_CLOCK_FACTOR, @@ -33,7 +32,7 @@ use polkadot_node_core_pvf_common::{ execute::{Handshake, WorkerResponse}, worker_dir, SecurityStatus, }; -use polkadot_parachain_primitives::primitives::{ValidationCodeHash, ValidationResult}; +use polkadot_parachain_primitives::primitives::ValidationResult; use polkadot_primitives::ExecutorParams; use std::{path::Path, time::Duration}; use tokio::{io, net::UnixStream}; @@ -132,10 +131,7 @@ pub async fn start_work( artifact.path.display(), ); - let artifact_path = artifact.path.clone(); with_worker_dir_setup(worker_dir, pid, &artifact.path, |worker_dir| async move { - let audit_log_file = security::AuditLogFile::try_open_and_seek_to_end().await; - if let Err(error) = send_request(&mut stream, &validation_params, execution_timeout).await { gum::warn!( target: LOG_TARGET, @@ -160,10 +156,7 @@ pub async fn start_work( handle_response( response, pid, - &artifact.id.code_hash, - &artifact_path, execution_timeout, - audit_log_file ) .await, Err(error) => { @@ -217,10 +210,7 @@ pub async fn start_work( async fn handle_response( response: WorkerResponse, worker_pid: u32, - validation_code_hash: &ValidationCodeHash, - artifact_path: &Path, execution_timeout: Duration, - audit_log_file: Option, ) -> WorkerResponse { if let WorkerResponse::Ok { duration, .. } = response { if duration > execution_timeout { @@ -238,25 +228,6 @@ async fn handle_response( } } - if let WorkerResponse::JobDied { err: _, job_pid } = response { - // The job died. Check if it was due to a seccomp violation. - // - // NOTE: Log, but don't change the outcome. Not all validators may have - // auditing enabled, so we don't want attackers to abuse a non-deterministic - // outcome. - for syscall in security::check_seccomp_violations_for_job(audit_log_file, job_pid).await { - gum::error!( - target: LOG_TARGET, - %worker_pid, - %job_pid, - %syscall, - ?validation_code_hash, - ?artifact_path, - "A forbidden syscall was attempted! This is a violation of our seccomp security policy. Report an issue ASAP!" - ); - } - } - response } diff --git a/polkadot/node/core/pvf/src/prepare/worker_intf.rs b/polkadot/node/core/pvf/src/prepare/worker_intf.rs index f978005068c..a393e9baa9e 100644 --- a/polkadot/node/core/pvf/src/prepare/worker_intf.rs +++ b/polkadot/node/core/pvf/src/prepare/worker_intf.rs @@ -19,7 +19,6 @@ use crate::{ artifacts::ArtifactId, metrics::Metrics, - security, worker_intf::{ clear_worker_dir_path, framed_recv, framed_send, spawn_with_program_path, IdleWorker, SpawnErr, WorkerDir, WorkerHandle, JOB_TIMEOUT_WALL_CLOCK_FACTOR, @@ -134,7 +133,6 @@ pub async fn start_work( pid, |tmp_artifact_file, mut stream, worker_dir| async move { let preparation_timeout = pvf.prep_timeout(); - let audit_log_file = security::AuditLogFile::try_open_and_seek_to_end().await; if let Err(err) = send_request(&mut stream, &pvf).await { gum::warn!( @@ -170,7 +168,6 @@ pub async fn start_work( &pvf, &cache_path, preparation_timeout, - audit_log_file, ) .await, Ok(Err(err)) => { @@ -211,34 +208,13 @@ async fn handle_response( pvf: &PvfPrepData, cache_path: &Path, preparation_timeout: Duration, - audit_log_file: Option, ) -> Outcome { let PrepareWorkerSuccess { checksum, stats: PrepareStats { cpu_time_elapsed, memory_stats } } = match result.clone() { Ok(result) => result, // Timed out on the child. This should already be logged by the child. Err(PrepareError::TimedOut) => return Outcome::TimedOut, - Err(PrepareError::JobDied { err, job_pid }) => { - // The job died. Check if it was due to a seccomp violation. - // - // NOTE: Log, but don't change the outcome. Not all validators may have - // auditing enabled, so we don't want attackers to abuse a non-deterministic - // outcome. - for syscall in - security::check_seccomp_violations_for_job(audit_log_file, job_pid).await - { - gum::error!( - target: LOG_TARGET, - %worker_pid, - %job_pid, - %syscall, - ?pvf, - "A forbidden syscall was attempted! This is a violation of our seccomp security policy. Report an issue ASAP!" - ); - } - - return Outcome::JobDied { err, job_pid } - }, + Err(PrepareError::JobDied { err, job_pid }) => return Outcome::JobDied { err, job_pid }, Err(PrepareError::OutOfMemory) => return Outcome::OutOfMemory, Err(err) => return Outcome::Concluded { worker, result: Err(err) }, }; diff --git a/polkadot/node/core/pvf/src/security.rs b/polkadot/node/core/pvf/src/security.rs index ef8714f58c8..2fd3b53e96b 100644 --- a/polkadot/node/core/pvf/src/security.rs +++ b/polkadot/node/core/pvf/src/security.rs @@ -17,10 +17,6 @@ use crate::{Config, SecurityStatus, LOG_TARGET}; use futures::join; use std::{fmt, path::Path}; -use tokio::{ - fs::{File, OpenOptions}, - io::{AsyncReadExt, AsyncSeekExt, SeekFrom}, -}; const SECURE_MODE_ANNOUNCEMENT: &'static str = "In the next release this will be a hard error by default. @@ -35,7 +31,6 @@ const SECURE_MODE_ANNOUNCEMENT: &'static str = pub async fn check_security_status(config: &Config) -> SecurityStatus { let Config { prepare_worker_program_path, cache_path, .. } = config; - // TODO: add check that syslog is available and that seccomp violations are logged? let (landlock, seccomp, change_root) = join!( check_landlock(prepare_worker_program_path), check_seccomp(prepare_worker_program_path), @@ -303,147 +298,3 @@ async fn check_seccomp( } } } - -const AUDIT_LOG_PATH: &'static str = "/var/log/audit/audit.log"; -const SYSLOG_PATH: &'static str = "/var/log/syslog"; - -/// System audit log. -pub struct AuditLogFile { - file: File, - path: &'static str, -} - -impl AuditLogFile { - /// Looks for an audit log file on the system and opens it, seeking to the end to skip any - /// events from before this was called. - /// - /// A bit of a verbose name, but it should clue future refactorers not to move calls closer to - /// where the `AuditLogFile` is used. - pub async fn try_open_and_seek_to_end() -> Option { - let mut path = AUDIT_LOG_PATH; - let mut file = match OpenOptions::new().read(true).open(AUDIT_LOG_PATH).await { - Ok(file) => Ok(file), - Err(_) => { - path = SYSLOG_PATH; - OpenOptions::new().read(true).open(SYSLOG_PATH).await - }, - } - .ok()?; - - let _pos = file.seek(SeekFrom::End(0)).await; - - Some(Self { file, path }) - } - - async fn read_new_since_open(mut self) -> String { - let mut buf = String::new(); - let _len = self.file.read_to_string(&mut buf).await; - buf - } -} - -/// Check if a seccomp violation occurred for the given job process. As the syslog may be in a -/// different location, or seccomp auditing may be disabled, this function provides a best-effort -/// attempt only. -/// -/// The `audit_log_file` must have been obtained before the job started. It only allows reading -/// entries that were written since it was obtained, so that we do not consider events from previous -/// processes with the same pid. This can still be racy, but it's unlikely and fine for a -/// best-effort attempt. -pub async fn check_seccomp_violations_for_job( - audit_log_file: Option, - job_pid: i32, -) -> Vec { - let audit_event_pid_field = format!("pid={job_pid}"); - - let audit_log_file = match audit_log_file { - Some(file) => { - gum::trace!( - target: LOG_TARGET, - %job_pid, - audit_log_path = ?file.path, - "checking audit log for seccomp violations", - ); - file - }, - None => { - gum::warn!( - target: LOG_TARGET, - %job_pid, - "could not open either {AUDIT_LOG_PATH} or {SYSLOG_PATH} for reading audit logs" - ); - return vec![] - }, - }; - let events = audit_log_file.read_new_since_open().await; - - let mut violations = vec![]; - for event in events.lines() { - if let Some(syscall) = parse_audit_log_for_seccomp_event(event, &audit_event_pid_field) { - violations.push(syscall); - } - } - - violations -} - -fn parse_audit_log_for_seccomp_event(event: &str, audit_event_pid_field: &str) -> Option { - const SECCOMP_AUDIT_EVENT_TYPE: &'static str = "type=1326"; - - // Do a series of simple .contains instead of a regex, because I'm not sure if the fields are - // guaranteed to always be in the same order. - if !event.contains(SECCOMP_AUDIT_EVENT_TYPE) || !event.contains(&audit_event_pid_field) { - return None - } - - // Get the syscall. Let's avoid a dependency on regex just for this. - for field in event.split(" ") { - if let Some(syscall) = field.strip_prefix("syscall=") { - return syscall.parse::().ok() - } - } - - None -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_parse_audit_log_for_seccomp_event() { - let audit_event_pid_field = "pid=2559058"; - - assert_eq!( - parse_audit_log_for_seccomp_event( - r#"Oct 24 13:15:24 build kernel: [5883980.283910] audit: type=1326 audit(1698153324.786:23): auid=0 uid=0 gid=0 ses=2162 subj=unconfined pid=2559058 comm="polkadot-prepar" exe="/root/paritytech/polkadot-sdk-2/target/debug/polkadot-prepare-worker" sig=31 arch=c000003e syscall=53 compat=0 ip=0x7f7542c80d5e code=0x80000000"#, - audit_event_pid_field - ), - Some(53) - ); - // pid is wrong - assert_eq!( - parse_audit_log_for_seccomp_event( - r#"Oct 24 13:15:24 build kernel: [5883980.283910] audit: type=1326 audit(1698153324.786:23): auid=0 uid=0 gid=0 ses=2162 subj=unconfined pid=2559057 comm="polkadot-prepar" exe="/root/paritytech/polkadot-sdk-2/target/debug/polkadot-prepare-worker" sig=31 arch=c000003e syscall=53 compat=0 ip=0x7f7542c80d5e code=0x80000000"#, - audit_event_pid_field - ), - None - ); - // type is wrong - assert_eq!( - parse_audit_log_for_seccomp_event( - r#"Oct 24 13:15:24 build kernel: [5883980.283910] audit: type=1327 audit(1698153324.786:23): auid=0 uid=0 gid=0 ses=2162 subj=unconfined pid=2559057 comm="polkadot-prepar" exe="/root/paritytech/polkadot-sdk-2/target/debug/polkadot-prepare-worker" sig=31 arch=c000003e syscall=53 compat=0 ip=0x7f7542c80d5e code=0x80000000"#, - audit_event_pid_field - ), - None - ); - // no syscall field - assert_eq!( - parse_audit_log_for_seccomp_event( - r#"Oct 24 13:15:24 build kernel: [5883980.283910] audit: type=1327 audit(1698153324.786:23): auid=0 uid=0 gid=0 ses=2162 subj=unconfined pid=2559057 comm="polkadot-prepar" exe="/root/paritytech/polkadot-sdk-2/target/debug/polkadot-prepare-worker" sig=31 arch=c000003e compat=0 ip=0x7f7542c80d5e code=0x80000000"#, - audit_event_pid_field - ), - None - ); - } -} -- GitLab From 4f8048b9c7a333cd8020ec4498fe96567ddeee18 Mon Sep 17 00:00:00 2001 From: Chevdor Date: Mon, 27 Nov 2023 10:16:35 +0100 Subject: [PATCH 073/102] New runtime `spec_version` format + backport of the bump to 1.4.0 (#2468) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Overview This PR aligns the `spec_version` formatting to the [recent changes](https://github.com/polkadot-fellows/runtimes/pull/26/files#diff-efa4caeb17487ecb13d8f5eb7863c3241d84afa2e73fbf25909a2ca89df0f362R142) made for the Polkadot/Kusama runtimes. It also backports the latest version `v1.4.0` bumps as `1_004_000`. ## Details During the switch from `v0.9` to `v1.x`, the format of the `spec_version` was modified from: `(M)m_ppp` for a runtime considered on version `M.m.pp`. For instance `0.9.42` had a `spec_version` of `9420`. With the transition to `v1.x`, the format was changed to a bigger number (still `u32`) formatted as `MM_mm_ppp` where `1.2.3` would be stored as `01_02_003`. This PR aligns the format with that has been introduced in the fellowship repo: `MMM_mmm_ppp`. --------- Co-authored-by: Bastian Köcher --- .../parachains/runtimes/assets/asset-hub-kusama/src/lib.rs | 4 ++-- .../parachains/runtimes/assets/asset-hub-polkadot/src/lib.rs | 2 +- .../parachains/runtimes/assets/asset-hub-rococo/src/lib.rs | 4 ++-- .../parachains/runtimes/assets/asset-hub-westend/src/lib.rs | 2 +- .../runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs | 2 +- .../runtimes/bridge-hubs/bridge-hub-polkadot/src/lib.rs | 2 +- .../runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs | 2 +- .../runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs | 2 +- .../runtimes/collectives/collectives-polkadot/src/lib.rs | 2 +- .../runtimes/collectives/collectives-westend/src/lib.rs | 2 +- .../parachains/runtimes/contracts/contracts-rococo/src/lib.rs | 2 +- cumulus/parachains/runtimes/glutton/glutton-kusama/src/lib.rs | 2 +- .../parachains/runtimes/glutton/glutton-westend/src/lib.rs | 2 +- cumulus/parachains/runtimes/starters/seedling/src/lib.rs | 2 +- cumulus/parachains/runtimes/testing/penpal/src/lib.rs | 2 +- .../parachains/runtimes/testing/rococo-parachain/src/lib.rs | 2 +- polkadot/runtime/rococo/src/lib.rs | 2 +- polkadot/runtime/westend/src/lib.rs | 2 +- 18 files changed, 20 insertions(+), 20 deletions(-) diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/lib.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/lib.rs index af0116d7014..4c76262f60a 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/lib.rs +++ b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/lib.rs @@ -114,7 +114,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("statemine"), impl_name: create_runtime_str!("statemine"), authoring_version: 1, - spec_version: 10000, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 13, @@ -130,7 +130,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("statemine"), impl_name: create_runtime_str!("statemine"), authoring_version: 1, - spec_version: 10000, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 13, diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/lib.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/lib.rs index 1b7ef10f485..78721b194d0 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/lib.rs +++ b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/lib.rs @@ -140,7 +140,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("statemint"), impl_name: create_runtime_str!("statemint"), authoring_version: 1, - spec_version: 10000, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 13, diff --git a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs index 02b51310890..c6c9735ecb1 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs +++ b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs @@ -114,7 +114,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("statemine"), impl_name: create_runtime_str!("statemine"), authoring_version: 1, - spec_version: 1_003_000, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 13, @@ -127,7 +127,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("statemine"), impl_name: create_runtime_str!("statemine"), authoring_version: 1, - spec_version: 1_003_000, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 13, diff --git a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs index d52edfe479c..a0d5a528c3f 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs +++ b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs @@ -111,7 +111,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("westmint"), impl_name: create_runtime_str!("westmint"), authoring_version: 1, - spec_version: 1_003_000, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 13, diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs index d2db0340790..a511791d347 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs @@ -135,7 +135,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("bridge-hub-kusama"), impl_name: create_runtime_str!("bridge-hub-kusama"), authoring_version: 1, - spec_version: 10000, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 3, diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/lib.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/lib.rs index 02f05a8bb87..e5c4f00f28e 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/lib.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/lib.rs @@ -135,7 +135,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("bridge-hub-polkadot"), impl_name: create_runtime_str!("bridge-hub-polkadot"), authoring_version: 1, - spec_version: 10000, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 2, diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs index 7d64623f551..152e071a26a 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs @@ -170,7 +170,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("bridge-hub-rococo"), impl_name: create_runtime_str!("bridge-hub-rococo"), authoring_version: 1, - spec_version: 1_003_000, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 3, diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs index 9c97728058f..764b9825d4e 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs @@ -170,7 +170,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("bridge-hub-westend"), impl_name: create_runtime_str!("bridge-hub-westend"), authoring_version: 1, - spec_version: 1_003_000, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 3, diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs index c3d671c9085..90c44f8bfc5 100644 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs +++ b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs @@ -115,7 +115,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("collectives"), impl_name: create_runtime_str!("collectives"), authoring_version: 1, - spec_version: 10000, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 5, diff --git a/cumulus/parachains/runtimes/collectives/collectives-westend/src/lib.rs b/cumulus/parachains/runtimes/collectives/collectives-westend/src/lib.rs index 8c5593e154d..54cb898fd6c 100644 --- a/cumulus/parachains/runtimes/collectives/collectives-westend/src/lib.rs +++ b/cumulus/parachains/runtimes/collectives/collectives-westend/src/lib.rs @@ -110,7 +110,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("collectives-westend"), impl_name: create_runtime_str!("collectives-westend"), authoring_version: 1, - spec_version: 1_003_000, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 5, diff --git a/cumulus/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/cumulus/parachains/runtimes/contracts/contracts-rococo/src/lib.rs index 9d6a53c5ed3..a7c06103c4a 100644 --- a/cumulus/parachains/runtimes/contracts/contracts-rococo/src/lib.rs +++ b/cumulus/parachains/runtimes/contracts/contracts-rococo/src/lib.rs @@ -131,7 +131,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: 10001, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 6, diff --git a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/lib.rs b/cumulus/parachains/runtimes/glutton/glutton-kusama/src/lib.rs index 60a5d004e6c..ef0734df25f 100644 --- a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/lib.rs +++ b/cumulus/parachains/runtimes/glutton/glutton-kusama/src/lib.rs @@ -98,7 +98,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("glutton"), impl_name: create_runtime_str!("glutton"), authoring_version: 1, - spec_version: 10000, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, diff --git a/cumulus/parachains/runtimes/glutton/glutton-westend/src/lib.rs b/cumulus/parachains/runtimes/glutton/glutton-westend/src/lib.rs index 60107281c22..10f4d5f3307 100644 --- a/cumulus/parachains/runtimes/glutton/glutton-westend/src/lib.rs +++ b/cumulus/parachains/runtimes/glutton/glutton-westend/src/lib.rs @@ -99,7 +99,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("glutton-westend"), impl_name: create_runtime_str!("glutton-westend"), authoring_version: 1, - spec_version: 10000, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, diff --git a/cumulus/parachains/runtimes/starters/seedling/src/lib.rs b/cumulus/parachains/runtimes/starters/seedling/src/lib.rs index 43c8f1488a6..7619ed19798 100644 --- a/cumulus/parachains/runtimes/starters/seedling/src/lib.rs +++ b/cumulus/parachains/runtimes/starters/seedling/src/lib.rs @@ -75,7 +75,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("seedling"), impl_name: create_runtime_str!("seedling"), authoring_version: 1, - spec_version: 10000, + spec_version: 1, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 2, diff --git a/cumulus/parachains/runtimes/testing/penpal/src/lib.rs b/cumulus/parachains/runtimes/testing/penpal/src/lib.rs index 1ddad31920a..b2a04272a4a 100644 --- a/cumulus/parachains/runtimes/testing/penpal/src/lib.rs +++ b/cumulus/parachains/runtimes/testing/penpal/src/lib.rs @@ -230,7 +230,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: 10000, + spec_version: 1, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, diff --git a/cumulus/parachains/runtimes/testing/rococo-parachain/src/lib.rs b/cumulus/parachains/runtimes/testing/rococo-parachain/src/lib.rs index 965fb0d6adc..3a890d7953a 100644 --- a/cumulus/parachains/runtimes/testing/rococo-parachain/src/lib.rs +++ b/cumulus/parachains/runtimes/testing/rococo-parachain/src/lib.rs @@ -106,7 +106,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: 10000, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 6, diff --git a/polkadot/runtime/rococo/src/lib.rs b/polkadot/runtime/rococo/src/lib.rs index 675e0a20b2b..12388da1868 100644 --- a/polkadot/runtime/rococo/src/lib.rs +++ b/polkadot/runtime/rococo/src/lib.rs @@ -150,7 +150,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("rococo"), impl_name: create_runtime_str!("parity-rococo-v2.0"), authoring_version: 0, - spec_version: 10020, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 22, diff --git a/polkadot/runtime/westend/src/lib.rs b/polkadot/runtime/westend/src/lib.rs index 29183fdfe00..6bbdb2db098 100644 --- a/polkadot/runtime/westend/src/lib.rs +++ b/polkadot/runtime/westend/src/lib.rs @@ -145,7 +145,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("westend"), impl_name: create_runtime_str!("parity-westend"), authoring_version: 2, - spec_version: 10020, + spec_version: 1_004_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 22, -- GitLab From dc69dbba728bf447bb447746e41a86367d939030 Mon Sep 17 00:00:00 2001 From: Maciej Date: Mon, 27 Nov 2023 09:30:13 +0000 Subject: [PATCH 074/102] Zombienet tests - disputes on finalized blocks (#2184) **Overview:** Adding an extra malus variant focusing on disputing finalized blocks. It will: - wrap around approval-voting - listen to `OverseerSignal::BlockFinalized` and when encountered start a dispute for the `dispute_offset`th ancestor - simply pass through all other messages and signals Add zombienet tests testing various edgecases: - disputing freshly finalized blocks - disputing stale finalized blocks - disputing eagerly pruned finalized blocks (might be separate PR) **TODO:** - [x] Register new malus variant - [x] Simple pass through wrapper (approval-voting) - [x] Simple network definition - [x] Listen to block finalizations - [x] Fetch ancestor hash - [x] Fetch session index - [x] Fetch candidate - [x] Construct and send dispute message - [x] zndsl test 1 checking that disputes on fresh finalizations resolve valid Closes #1365 - [x] zndsl test 2 checking that disputes for too old finalized blocks are not possible Closes #1364 - [ ] zndsl test 3 checking that disputes for candidates with eagerly pruned relay parent state are handled correctly #1359 (deferred to a separate PR) - [x] Unit tests for new malus variant (testing cli etc) - [x] Clean/streamline error handling - [ ] ~~Ensure it tests properly on session boundaries~~ --------- Co-authored-by: Javier Viola Co-authored-by: Marcin S. Co-authored-by: Tsvetomir Dimitrov --- .gitlab/pipeline/zombienet/polkadot.yml | 16 ++ polkadot/node/malus/src/malus.rs | 46 +++ polkadot/node/malus/src/variants/common.rs | 4 +- .../variants/dispute_finalized_candidates.rs | 265 ++++++++++++++++++ polkadot/node/malus/src/variants/mod.rs | 2 + .../src/variants/suggest_garbage_candidate.rs | 2 +- .../0007-dispute-freshly-finalized.toml | 40 +++ .../0007-dispute-freshly-finalized.zndsl | 29 ++ .../0008-dispute-old-finalized.toml | 40 +++ .../0008-dispute-old-finalized.zndsl | 21 ++ 10 files changed, 462 insertions(+), 3 deletions(-) create mode 100644 polkadot/node/malus/src/variants/dispute_finalized_candidates.rs create mode 100644 polkadot/zombienet_tests/functional/0007-dispute-freshly-finalized.toml create mode 100644 polkadot/zombienet_tests/functional/0007-dispute-freshly-finalized.zndsl create mode 100644 polkadot/zombienet_tests/functional/0008-dispute-old-finalized.toml create mode 100644 polkadot/zombienet_tests/functional/0008-dispute-old-finalized.zndsl diff --git a/.gitlab/pipeline/zombienet/polkadot.yml b/.gitlab/pipeline/zombienet/polkadot.yml index 995dd982532..d1f3a201c80 100644 --- a/.gitlab/pipeline/zombienet/polkadot.yml +++ b/.gitlab/pipeline/zombienet/polkadot.yml @@ -115,6 +115,22 @@ zombienet-polkadot-functional-0006-parachains-max-tranche0: --local-dir="${LOCAL_DIR}/functional" --test="0006-parachains-max-tranche0.zndsl" +zombienet-polkadot-functional-0007-dispute-freshly-finalized: + extends: + - .zombienet-polkadot-common + script: + - /home/nonroot/zombie-net/scripts/ci/run-test-local-env-manager.sh + --local-dir="${LOCAL_DIR}/functional" + --test="0007-dispute-freshly-finalized.zndsl" + +zombienet-polkadot-functional-0008-dispute-old-finalized: + extends: + - .zombienet-polkadot-common + script: + - /home/nonroot/zombie-net/scripts/ci/run-test-local-env-manager.sh + --local-dir="${LOCAL_DIR}/functional" + --test="0008-dispute-old-finalized.zndsl" + zombienet-polkadot-smoke-0001-parachains-smoke-test: extends: - .zombienet-polkadot-common diff --git a/polkadot/node/malus/src/malus.rs b/polkadot/node/malus/src/malus.rs index 69dd7c869fc..b8a83e54d4f 100644 --- a/polkadot/node/malus/src/malus.rs +++ b/polkadot/node/malus/src/malus.rs @@ -36,6 +36,8 @@ enum NemesisVariant { BackGarbageCandidate(BackGarbageCandidateOptions), /// Delayed disputing of ancestors that are perfectly fine. DisputeAncestor(DisputeAncestorOptions), + /// Delayed disputing of finalized candidates. + DisputeFinalizedCandidates(DisputeFinalizedCandidatesOptions), } #[derive(Debug, Parser)] @@ -80,6 +82,15 @@ impl MalusCli { finality_delay, )? }, + NemesisVariant::DisputeFinalizedCandidates(opts) => { + let DisputeFinalizedCandidatesOptions { dispute_offset, cli } = opts; + + polkadot_cli::run_node( + cli, + DisputeFinalizedCandidates { dispute_offset }, + finality_delay, + )? + }, } Ok(()) } @@ -184,4 +195,39 @@ mod tests { assert!(run.cli.run.base.bob); }); } + + #[test] + fn dispute_finalized_candidates_works() { + let cli = MalusCli::try_parse_from(IntoIterator::into_iter([ + "malus", + "dispute-finalized-candidates", + "--bob", + ])) + .unwrap(); + assert_matches::assert_matches!(cli, MalusCli { + variant: NemesisVariant::DisputeFinalizedCandidates(run), + .. + } => { + assert!(run.cli.run.base.bob); + }); + } + + #[test] + fn dispute_finalized_offset_value_works() { + let cli = MalusCli::try_parse_from(IntoIterator::into_iter([ + "malus", + "dispute-finalized-candidates", + "--dispute-offset", + "13", + "--bob", + ])) + .unwrap(); + assert_matches::assert_matches!(cli, MalusCli { + variant: NemesisVariant::DisputeFinalizedCandidates(opts), + .. + } => { + assert_eq!(opts.dispute_offset, 13); // This line checks that dispute_offset is correctly set to 13 + assert!(opts.cli.run.base.bob); + }); + } } diff --git a/polkadot/node/malus/src/variants/common.rs b/polkadot/node/malus/src/variants/common.rs index 20b6654638e..92264cd653d 100644 --- a/polkadot/node/malus/src/variants/common.rs +++ b/polkadot/node/malus/src/variants/common.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Implements common code for nemesis. Currently, only `FakeValidationResult` +//! Implements common code for nemesis. Currently, only `ReplaceValidationResult` //! interceptor is implemented. use crate::{ interceptor::*, @@ -188,7 +188,7 @@ where let _candidate_descriptor = candidate_descriptor.clone(); let mut subsystem_sender = subsystem_sender.clone(); let (sender, receiver) = std::sync::mpsc::channel(); - self.spawner.spawn_blocking( + self.spawner.spawn( "malus-get-validation-data", Some("malus"), Box::pin(async move { diff --git a/polkadot/node/malus/src/variants/dispute_finalized_candidates.rs b/polkadot/node/malus/src/variants/dispute_finalized_candidates.rs new file mode 100644 index 00000000000..113ab026879 --- /dev/null +++ b/polkadot/node/malus/src/variants/dispute_finalized_candidates.rs @@ -0,0 +1,265 @@ +// Copyright (C) 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 malicious node variant that attempts to dispute finalized candidates. +//! +//! This malus variant behaves honestly in backing and approval voting. +//! The maliciousness comes from emitting an extra dispute statement on top of the other ones. +//! +//! Some extra quirks which generally should be insignificant: +//! - The malus node will not dispute at session boundaries +//! - The malus node will not dispute blocks it backed itself +//! - Be cautious about the size of the network to make sure disputes are not auto-confirmed +//! (7 validators is the smallest network size as it needs [(7-1)//3]+1 = 3 votes to get +//! confirmed but it only gets 1 from backing and 1 from malus so 2 in total) +//! +//! +//! Attention: For usage with `zombienet` only! + +#![allow(missing_docs)] + +use futures::channel::oneshot; +use polkadot_cli::{ + prepared_overseer_builder, + service::{ + AuthorityDiscoveryApi, AuxStore, BabeApi, Block, Error, HeaderBackend, Overseer, + OverseerConnector, OverseerGen, OverseerGenArgs, OverseerHandle, ParachainHost, + ProvideRuntimeApi, + }, + Cli, +}; +use polkadot_node_subsystem::{messages::ApprovalVotingMessage, SpawnGlue}; +use polkadot_node_subsystem_types::{DefaultSubsystemClient, OverseerSignal}; +use polkadot_node_subsystem_util::request_candidate_events; +use polkadot_primitives::CandidateEvent; +use sp_core::traits::SpawnNamed; + +// Filter wrapping related types. +use crate::{interceptor::*, shared::MALUS}; + +use std::sync::Arc; + +/// Wraps around ApprovalVotingSubsystem and replaces it. +/// Listens to finalization messages and if possible triggers disputes for their ancestors. +#[derive(Clone)] +struct AncestorDisputer { + spawner: Spawner, //stores the actual ApprovalVotingSubsystem spawner + dispute_offset: u32, /* relative depth of the disputed block to the finalized block, + * 0=finalized, 1=parent of finalized etc */ +} + +impl MessageInterceptor for AncestorDisputer +where + Sender: overseer::ApprovalVotingSenderTrait + Clone + Send + 'static, + Spawner: overseer::gen::Spawner + Clone + 'static, +{ + type Message = ApprovalVotingMessage; + + /// Intercept incoming `OverseerSignal::BlockFinalized' and pass the rest as normal. + fn intercept_incoming( + &self, + subsystem_sender: &mut Sender, + msg: FromOrchestra, + ) -> Option> { + match msg { + FromOrchestra::Communication { msg } => Some(FromOrchestra::Communication { msg }), + FromOrchestra::Signal(OverseerSignal::BlockFinalized( + finalized_hash, + finalized_height, + )) => { + gum::debug!( + target: MALUS, + "😈 Block Finalization Interception! Block: {:?}", finalized_hash, + ); + + //Ensure that the chain is long enough for the target ancestor to exist + if finalized_height <= self.dispute_offset { + return Some(FromOrchestra::Signal(OverseerSignal::BlockFinalized( + finalized_hash, + finalized_height, + ))) + } + + let dispute_offset = self.dispute_offset; + let mut sender = subsystem_sender.clone(); + self.spawner.spawn( + "malus-dispute-finalized-block", + Some("malus"), + Box::pin(async move { + // Query chain for the block hash at the target depth + let (tx, rx) = oneshot::channel(); + sender + .send_message(ChainApiMessage::FinalizedBlockHash( + finalized_height - dispute_offset, + tx, + )) + .await; + let disputable_hash = match rx.await { + Ok(Ok(Some(hash))) => { + gum::debug!( + target: MALUS, + "😈 Time to search {:?}`th ancestor! Block: {:?}", dispute_offset, hash, + ); + hash + }, + _ => { + gum::debug!( + target: MALUS, + "😈 Seems the target is not yet finalized! Nothing to dispute." + ); + return // Early return from the async block + }, + }; + + // Fetch all candidate events for the target ancestor + let events = + request_candidate_events(disputable_hash, &mut sender).await.await; + let events = match events { + Ok(Ok(events)) => events, + Ok(Err(e)) => { + gum::error!( + target: MALUS, + "😈 Failed to fetch candidate events: {:?}", e + ); + return // Early return from the async block + }, + Err(e) => { + gum::error!( + target: MALUS, + "😈 Failed to fetch candidate events: {:?}", e + ); + return // Early return from the async block + }, + }; + + // Extract a token candidate from the events to use for disputing + let event = events.iter().find(|event| { + matches!(event, CandidateEvent::CandidateIncluded(_, _, _, _)) + }); + let candidate = match event { + Some(CandidateEvent::CandidateIncluded(candidate, _, _, _)) => + candidate, + _ => { + gum::error!( + target: MALUS, + "😈 No candidate included event found! Nothing to dispute." + ); + return // Early return from the async block + }, + }; + + // Extract the candidate hash from the candidate + let candidate_hash = candidate.hash(); + + // Fetch the session index for the candidate + let (tx, rx) = oneshot::channel(); + sender + .send_message(RuntimeApiMessage::Request( + disputable_hash, + RuntimeApiRequest::SessionIndexForChild(tx), + )) + .await; + let session_index = match rx.await { + Ok(Ok(session_index)) => session_index, + _ => { + gum::error!( + target: MALUS, + "😈 Failed to fetch session index for candidate." + ); + return // Early return from the async block + }, + }; + gum::info!( + target: MALUS, + "😈 Disputing candidate with hash: {:?} in session {:?}", candidate_hash, session_index, + ); + + // Start dispute + sender.send_unbounded_message( + DisputeCoordinatorMessage::IssueLocalStatement( + session_index, + candidate_hash, + candidate.clone(), + false, // indicates candidate is invalid -> dispute starts + ), + ); + }), + ); + + // Passthrough the finalization signal as usual (using it as hook only) + Some(FromOrchestra::Signal(OverseerSignal::BlockFinalized( + finalized_hash, + finalized_height, + ))) + }, + FromOrchestra::Signal(signal) => Some(FromOrchestra::Signal(signal)), + } + } +} + +//---------------------------------------------------------------------------------- + +#[derive(Debug, clap::Parser)] +#[clap(rename_all = "kebab-case")] +#[allow(missing_docs)] +pub struct DisputeFinalizedCandidatesOptions { + /// relative depth of the disputed block to the finalized block, 0=finalized, 1=parent of + /// finalized etc + #[clap(long, ignore_case = true, default_value_t = 2, value_parser = clap::value_parser!(u32).range(0..=50))] + pub dispute_offset: u32, + + #[clap(flatten)] + pub cli: Cli, +} + +/// DisputeFinalizedCandidates implementation wrapper which implements `OverseerGen` glue. +pub(crate) struct DisputeFinalizedCandidates { + /// relative depth of the disputed block to the finalized block, 0=finalized, 1=parent of + /// finalized etc + pub dispute_offset: u32, +} + +impl OverseerGen for DisputeFinalizedCandidates { + fn generate( + &self, + connector: OverseerConnector, + args: OverseerGenArgs<'_, Spawner, RuntimeClient>, + ) -> Result< + (Overseer, Arc>>, OverseerHandle), + Error, + > + where + RuntimeClient: 'static + ProvideRuntimeApi + HeaderBackend + AuxStore, + RuntimeClient::Api: ParachainHost + BabeApi + AuthorityDiscoveryApi, + Spawner: 'static + SpawnNamed + Clone + Unpin, + { + gum::info!( + target: MALUS, + "😈 Started Malus node that disputes finalized blocks after they are {:?} finalizations deep.", + &self.dispute_offset, + ); + + let ancestor_disputer = AncestorDisputer { + spawner: SpawnGlue(args.spawner.clone()), + dispute_offset: self.dispute_offset, + }; + + prepared_overseer_builder(args)? + .replace_approval_voting(move |cb| InterceptedSubsystem::new(cb, ancestor_disputer)) + .build_with_connector(connector) + .map_err(|e| e.into()) + } +} diff --git a/polkadot/node/malus/src/variants/mod.rs b/polkadot/node/malus/src/variants/mod.rs index 3789f33ac98..bb4971c145c 100644 --- a/polkadot/node/malus/src/variants/mod.rs +++ b/polkadot/node/malus/src/variants/mod.rs @@ -18,11 +18,13 @@ mod back_garbage_candidate; mod common; +mod dispute_finalized_candidates; mod dispute_valid_candidates; mod suggest_garbage_candidate; pub(crate) use self::{ back_garbage_candidate::{BackGarbageCandidateOptions, BackGarbageCandidates}, + dispute_finalized_candidates::{DisputeFinalizedCandidates, DisputeFinalizedCandidatesOptions}, dispute_valid_candidates::{DisputeAncestorOptions, DisputeValidCandidates}, suggest_garbage_candidate::{SuggestGarbageCandidateOptions, SuggestGarbageCandidates}, }; diff --git a/polkadot/node/malus/src/variants/suggest_garbage_candidate.rs b/polkadot/node/malus/src/variants/suggest_garbage_candidate.rs index cf0ff5f809d..817afb58437 100644 --- a/polkadot/node/malus/src/variants/suggest_garbage_candidate.rs +++ b/polkadot/node/malus/src/variants/suggest_garbage_candidate.rs @@ -113,7 +113,7 @@ where let (sender, receiver) = std::sync::mpsc::channel(); let mut new_sender = subsystem_sender.clone(); let _candidate = candidate.clone(); - self.spawner.spawn_blocking( + self.spawner.spawn( "malus-get-validation-data", Some("malus"), Box::pin(async move { diff --git a/polkadot/zombienet_tests/functional/0007-dispute-freshly-finalized.toml b/polkadot/zombienet_tests/functional/0007-dispute-freshly-finalized.toml new file mode 100644 index 00000000000..69eb0804d8c --- /dev/null +++ b/polkadot/zombienet_tests/functional/0007-dispute-freshly-finalized.toml @@ -0,0 +1,40 @@ +[settings] +timeout = 1000 + +[relaychain.genesis.runtimeGenesis.patch.configuration.config] + max_validators_per_core = 1 + needed_approvals = 1 + +[relaychain] +default_image = "{{ZOMBIENET_INTEGRATION_TEST_IMAGE}}" +chain = "rococo-local" +default_command = "polkadot" + +[relaychain.default_resources] +limits = { memory = "4G", cpu = "2" } +requests = { memory = "2G", cpu = "1" } + + [[relaychain.node_groups]] + name = "honest" + count = 6 + args = ["-lparachain=debug"] + + [[relaychain.nodes]] + image = "{{MALUS_IMAGE}}" + name = "malus" + command = "malus dispute-finalized-candidates" + args = [ "--alice", "-lparachain=debug,MALUS=trace", "--dispute-offset=3" ] + +[[parachains]] +id = 2000 + + [parachains.collator] + image = "{{COL_IMAGE}}" + name = "collator" + command = "undying-collator" + args = ["-lparachain=debug"] + +[types.Header] +number = "u64" +parent_hash = "Hash" +post_state = "Hash" diff --git a/polkadot/zombienet_tests/functional/0007-dispute-freshly-finalized.zndsl b/polkadot/zombienet_tests/functional/0007-dispute-freshly-finalized.zndsl new file mode 100644 index 00000000000..62d5a9768f9 --- /dev/null +++ b/polkadot/zombienet_tests/functional/0007-dispute-freshly-finalized.zndsl @@ -0,0 +1,29 @@ +Description: Test if disputes triggered on finalized blocks within scope always end as valid. +Network: ./0007-dispute-freshly-finalized.toml +Creds: config + +# Check authority status and peers. +malus: reports node_roles is 4 +honest: reports node_roles is 4 + +# Ensure parachains are registered. +honest: parachain 2000 is registered within 30 seconds + +# Ensure parachains made progress. +honest: parachain 2000 block height is at least 10 within 200 seconds + +# Ensure that malus is already attempting to dispute +malus: log line contains "😈 Disputing candidate with hash:" within 180 seconds + +# Check if disputes are initiated and concluded. +honest: reports polkadot_parachain_candidate_disputes_total is at least 2 within 100 seconds +honest: reports polkadot_parachain_candidate_dispute_concluded{validity="valid"} is at least 2 within 100 seconds +honest: reports polkadot_parachain_candidate_dispute_concluded{validity="invalid"} is 0 within 100 seconds + +# Check lag - approval +honest: reports polkadot_parachain_approval_checking_finality_lag is 0 + +# Check lag - dispute conclusion +honest: reports polkadot_parachain_disputes_finality_lag is 0 + + diff --git a/polkadot/zombienet_tests/functional/0008-dispute-old-finalized.toml b/polkadot/zombienet_tests/functional/0008-dispute-old-finalized.toml new file mode 100644 index 00000000000..1ea385c3a42 --- /dev/null +++ b/polkadot/zombienet_tests/functional/0008-dispute-old-finalized.toml @@ -0,0 +1,40 @@ +[settings] +timeout = 1000 + +[relaychain.genesis.runtimeGenesis.patch.configuration.config] + max_validators_per_core = 1 + needed_approvals = 1 + +[relaychain] +default_image = "{{ZOMBIENET_INTEGRATION_TEST_IMAGE}}" +chain = "rococo-local" +default_command = "polkadot" + +[relaychain.default_resources] +limits = { memory = "4G", cpu = "2" } +requests = { memory = "2G", cpu = "1" } + + [[relaychain.node_groups]] + name = "honest" + count = 6 + args = ["-lparachain=debug"] + + [[relaychain.nodes]] + image = "{{MALUS_IMAGE}}" + name = "malus" + command = "malus dispute-finalized-candidates" + args = [ "--alice", "-lparachain=debug,MALUS=trace", "--dispute-offset=14" ] + +[[parachains]] +id = 2000 + + [parachains.collator] + image = "{{COL_IMAGE}}" + name = "collator" + command = "undying-collator" + args = ["-lparachain=debug"] + +[types.Header] +number = "u64" +parent_hash = "Hash" +post_state = "Hash" diff --git a/polkadot/zombienet_tests/functional/0008-dispute-old-finalized.zndsl b/polkadot/zombienet_tests/functional/0008-dispute-old-finalized.zndsl new file mode 100644 index 00000000000..b30c5801a1d --- /dev/null +++ b/polkadot/zombienet_tests/functional/0008-dispute-old-finalized.zndsl @@ -0,0 +1,21 @@ +Description: Test if disputes triggered on finalized blocks out of scope never get to be confirmed and concluded. +Network: ./0008-dispute-old-finalized.toml +Creds: config + +# Check authority status and peers. +malus: reports node_roles is 4 +honest: reports node_roles is 4 + + +# Ensure parachains are registered. +honest: parachain 2000 is registered within 30 seconds + +# Ensure parachains made progress. +honest: parachain 2000 block height is at least 20 within 300 seconds + +# Ensure that malus is already attempting to dispute +malus: log line contains "😈 Disputing candidate with hash:" within 180 seconds + +# Ensure that honest nodes don't participate and conclude any disputes +honest: count of log lines containing "Dispute on candidate concluded" is 0 within 100 seconds + -- GitLab From 0317501758c97c940d3ceec165f22f8b54dee047 Mon Sep 17 00:00:00 2001 From: Javier Bullrich Date: Mon, 27 Nov 2023 11:33:36 +0100 Subject: [PATCH 075/102] Decomissioned PR-Custom-Review (#2503) This PR decomissions [`PR-Custom-Review`](https://github.com/paritytech/pr-custom-review) in replacement for [`Review-bot`](https://github.com/paritytech/review-bot). --- .github/pr-custom-review.yml | 63 -------------------------- .github/workflows/pr-custom-review.yml | 46 ------------------- 2 files changed, 109 deletions(-) delete mode 100644 .github/pr-custom-review.yml delete mode 100644 .github/workflows/pr-custom-review.yml diff --git a/.github/pr-custom-review.yml b/.github/pr-custom-review.yml deleted file mode 100644 index ac13d862a4a..00000000000 --- a/.github/pr-custom-review.yml +++ /dev/null @@ -1,63 +0,0 @@ -# 🔒 PROTECTED: Changes to locks-review-team should be approved by the current locks-review-team -locks-review-team: locks-review -team-leads-team: polkadot-review -action-review-team: ci - -rules: - - name: CI files - check_type: changed_files - condition: - include: ^\.gitlab-ci\.yml|^docker/.*|^\.github/.*|^\.gitlab/.*|^\.config/nextest.toml|^\.cargo/.* - exclude: ^\.gitlab/pipeline/zombienet.* - min_approvals: 2 - teams: - - ci - - release-engineering - - - name: Core developers - check_type: changed_files - condition: - include: .* - # excluding files from 'Runtime files' and 'CI files' rules - exclude: ^polkadot/runtime/(kusama|polkadot)/src/[^/]+\.rs$|^cumulus/parachains/runtimes/assets/(asset-hub-kusama|asset-hub-polkadot)/src/[^/]+\.rs$|^cumulus/parachains/runtimes/bridge-hubs/(bridge-hub-kusama|bridge-hub-polkadot)/src/[^/]+\.rs$|^cumulus/parachains/runtimes/collectives/collectives-polkadot/src/[^/]+\.rs$|^cumulus/parachains/common/src/[^/]+\.rs$|^substrate/frame/(?!.*(nfts/.*|uniques/.*|babe/.*|grandpa/.*|beefy|merkle-mountain-range/.*|contracts/.*|election|nomination-pools/.*|staking/.*|aura/.*))|^polkadot/runtime/(kusama|polkadot)/src/[^/]+\.rs$|^\.gitlab-ci\.yml|^docker/.*|^\.github/.*|^\.gitlab/.*|^\.config/nextest.toml|^\.cargo/.* - min_approvals: 2 - teams: - - core-devs - - # cumulus - - name: Runtime files cumulus - check_type: changed_files - condition: ^cumulus/parachains/runtimes/assets/(asset-hub-kusama|asset-hub-polkadot)/src/[^/]+\.rs$|^cumulus/parachains/runtimes/bridge-hubs/(bridge-hub-kusama|bridge-hub-polkadot)/src/[^/]+\.rs$|^cumulus/parachains/runtimes/collectives/collectives-polkadot/src/[^/]+\.rs$|^cumulus/parachains/common/src/[^/]+\.rs$ - all_distinct: - - min_approvals: 1 - teams: - - locks-review - - min_approvals: 1 - teams: - - polkadot-review - - # if there are any changes in the bridges subtree (in case of backport changes back to bridges repo) - - name: Bridges subtree files - check_type: changed_files - condition: ^bridges/.* - min_approvals: 1 - teams: - - bridges-core - - # substrate - - - name: FRAME coders substrate - check_type: changed_files - condition: - include: ^substrate/frame/(?!.*(nfts/.*|uniques/.*|babe/.*|grandpa/.*|beefy|merkle-mountain-range/.*|contracts/.*|election|nomination-pools/.*|staking/.*|aura/.*)) - all: - - min_approvals: 2 - teams: - - core-devs - - min_approvals: 1 - teams: - - frame-coders - -prevent-review-request: - teams: - - core-devs diff --git a/.github/workflows/pr-custom-review.yml b/.github/workflows/pr-custom-review.yml deleted file mode 100644 index 4e0809cbfdc..00000000000 --- a/.github/workflows/pr-custom-review.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Assign reviewers - -on: - pull_request: - branches: - - master - - main - types: - - opened - - reopened - - synchronize - - review_requested - - review_request_removed - - ready_for_review - - converted_to_draft - pull_request_review: - merge_group: - -jobs: - pr-custom-review: - runs-on: ubuntu-latest - steps: - - name: Skip merge queue - if: ${{ contains(github.ref, 'gh-readonly-queue') }} - run: exit 0 - - name: Skip if pull request is in Draft - # `if: github.event.pull_request.draft == true` should be kept here, at - # the step level, rather than at the job level. The latter is not - # recommended because when the PR is moved from "Draft" to "Ready to - # review" the workflow will immediately be passing (since it was skipped), - # even though it hasn't actually ran, since it takes a few seconds for - # the workflow to start. This is also disclosed in: - # https://github.community/t/dont-run-actions-on-draft-pull-requests/16817/17 - # That scenario would open an opportunity for the check to be bypassed: - # 1. Get your PR approved - # 2. Move it to Draft - # 3. Push whatever commits you want - # 4. Move it to "Ready for review"; now the workflow is passing (it was - # skipped) and "Check reviews" is also passing (it won't be updated - # until the workflow is finished) - if: github.event.pull_request.draft == true - run: exit 1 - - name: pr-custom-review - uses: paritytech/pr-custom-review@master - with: - checks-reviews-api: http://pcr.parity-prod.parity.io/api/v1/check_reviews -- GitLab From 2610450a18e64079abfe98f0a5b57069bbb61009 Mon Sep 17 00:00:00 2001 From: Koute Date: Mon, 27 Nov 2023 19:40:27 +0900 Subject: [PATCH 076/102] Build the standard library crates when building the runtimes (#2217) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Our executor currently only supports the WASM MVP feature set, however nowadays when compiling WASM the Rust compiler has more features enabled by default. We do set the `-C target-cpu=mvp` flag to make sure that *our* code gets compiled in a way that is compatible with our executor, however this doesn't affect Rust's standard library crates (`std`, `core` and `alloc`) which are by default precompiled and still can make use of these extra features. So in this PR we force the compiler to also compile the standard library crates for us to make sure that they also only use the MVP features. I've added the `WASM_BUILD_STD` environment variable which can be used to disable this behavior if set to `0`. Unfortunately this *will* slow down the compile times when building runtimes, but there isn't much that we can do about that. Fixes https://github.com/paritytech/polkadot-sdk/issues/1755 --------- Co-authored-by: Bastian Köcher --- polkadot/parachain/src/lib.rs | 2 - substrate/utils/wasm-builder/README.md | 12 +- substrate/utils/wasm-builder/src/lib.rs | 126 +++--------- .../utils/wasm-builder/src/prerequisites.rs | 192 ++++++++---------- substrate/utils/wasm-builder/src/version.rs | 17 ++ .../utils/wasm-builder/src/wasm_project.rs | 20 ++ 6 files changed, 163 insertions(+), 206 deletions(-) diff --git a/polkadot/parachain/src/lib.rs b/polkadot/parachain/src/lib.rs index 913d887e4a8..bd75296bf83 100644 --- a/polkadot/parachain/src/lib.rs +++ b/polkadot/parachain/src/lib.rs @@ -14,8 +14,6 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -#![warn(unused_crate_dependencies)] - //! Defines primitive types for creating or validating a parachain. //! //! When compiled with standard library support, this crate exports a `wasm` diff --git a/substrate/utils/wasm-builder/README.md b/substrate/utils/wasm-builder/README.md index db32f5cbc95..6dfc743816c 100644 --- a/substrate/utils/wasm-builder/README.md +++ b/substrate/utils/wasm-builder/README.md @@ -13,7 +13,7 @@ A project that should be compiled as a Wasm binary needs to: The `build.rs` file needs to contain the following code: -```rust +```rust,no_run fn main() { #[cfg(feature = "std")] { @@ -32,7 +32,7 @@ fn main() { As the final step, you need to add the following to your project: -```rust +```rust,ignore include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); ``` @@ -63,11 +63,17 @@ By using environment variables, you can configure which Wasm binaries are built - `WASM_TARGET_DIRECTORY` - Will copy any build Wasm binary to the given directory. The path needs to be absolute. - `WASM_BUILD_TOOLCHAIN` - The toolchain that should be used to build the Wasm binaries. The format needs to be the same as used by cargo, e.g. `nightly-2020-02-20`. +- `WASM_BUILD_WORKSPACE_HINT` - Hint the workspace that is being built. This is normally not required as we walk up from + the target directory until we find a `Cargo.toml`. If the target directory is changed for + the build, this environment variable can be used to point to the actual workspace. +- `WASM_BUILD_STD` - Sets whether the Rust's standard library crates will also be built. This is necessary to make sure + the standard library crates only use the exact WASM feature set that our executor supports. + Enabled by default. - `CARGO_NET_OFFLINE` - If `true`, `--offline` will be passed to all processes launched to prevent network access. Useful in offline environments. Each project can be skipped individually by using the environment variable `SKIP_PROJECT_NAME_WASM_BUILD`. Where -`PROJECT_NAME` needs to be replaced by the name of the cargo project, e.g. `node-runtime` will be `NODE_RUNTIME`. +`PROJECT_NAME` needs to be replaced by the name of the cargo project, e.g. `kitchensink-runtime` will be `NODE_RUNTIME`. ## Prerequisites diff --git a/substrate/utils/wasm-builder/src/lib.rs b/substrate/utils/wasm-builder/src/lib.rs index c9011f97be7..cd31a8cba10 100644 --- a/substrate/utils/wasm-builder/src/lib.rs +++ b/substrate/utils/wasm-builder/src/lib.rs @@ -15,99 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! # Wasm builder is a utility for building a project as a Wasm binary -//! -//! The Wasm builder is a tool that integrates the process of building the WASM binary of your -//! project into the main `cargo` build process. -//! -//! ## Project setup -//! -//! A project that should be compiled as a Wasm binary needs to: -//! -//! 1. Add a `build.rs` file. -//! 2. Add `wasm-builder` as dependency into `build-dependencies`. -//! -//! The `build.rs` file needs to contain the following code: -//! -//! ```no_run -//! use substrate_wasm_builder::WasmBuilder; -//! -//! fn main() { -//! WasmBuilder::new() -//! // Tell the builder to build the project (crate) this `build.rs` is part of. -//! .with_current_project() -//! // Make sure to export the `heap_base` global, this is required by Substrate -//! .export_heap_base() -//! // Build the Wasm file so that it imports the memory (need to be provided by at instantiation) -//! .import_memory() -//! // Build it. -//! .build() -//! } -//! ``` -//! -//! As the final step, you need to add the following to your project: -//! -//! ```ignore -//! include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); -//! ``` -//! -//! This will include the generated Wasm binary as two constants `WASM_BINARY` and -//! `WASM_BINARY_BLOATY`. The former is a compact Wasm binary and the latter is the Wasm binary as -//! being generated by the compiler. Both variables have `Option<&'static [u8]>` as type. -//! -//! ### Feature -//! -//! Wasm builder supports to enable cargo features while building the Wasm binary. By default it -//! will enable all features in the wasm build that are enabled for the native build except the -//! `default` and `std` features. Besides that, wasm builder supports the special `runtime-wasm` -//! feature. This `runtime-wasm` feature will be enabled by the wasm builder when it compiles the -//! Wasm binary. If this feature is not present, it will not be enabled. -//! -//! ## Environment variables -//! -//! By using environment variables, you can configure which Wasm binaries are built and how: -//! -//! - `SKIP_WASM_BUILD` - Skips building any Wasm binary. This is useful when only native should be -//! recompiled. If this is the first run and there doesn't exist a Wasm binary, this will set both -//! variables to `None`. -//! - `WASM_BUILD_TYPE` - Sets the build type for building Wasm binaries. Supported values are -//! `release` or `debug`. By default the build type is equal to the build type used by the main -//! build. -//! - `FORCE_WASM_BUILD` - Can be set to force a Wasm build. On subsequent calls the value of the -//! variable needs to change. As wasm-builder instructs `cargo` to watch for file changes this -//! environment variable should only be required in certain circumstances. -//! - `WASM_BUILD_RUSTFLAGS` - Extend `RUSTFLAGS` given to `cargo build` while building the wasm -//! binary. -//! - `WASM_BUILD_NO_COLOR` - Disable color output of the wasm build. -//! - `WASM_TARGET_DIRECTORY` - Will copy any build Wasm binary to the given directory. The path -//! needs to be absolute. -//! - `WASM_BUILD_TOOLCHAIN` - The toolchain that should be used to build the Wasm binaries. The -//! format needs to be the same as used by cargo, e.g. `nightly-2020-02-20`. -//! - `WASM_BUILD_WORKSPACE_HINT` - Hint the workspace that is being built. This is normally not -//! required as we walk up from the target directory until we find a `Cargo.toml`. If the target -//! directory is changed for the build, this environment variable can be used to point to the -//! actual workspace. -//! - `CARGO_NET_OFFLINE` - If `true`, `--offline` will be passed to all processes launched to -//! prevent network access. Useful in offline environments. -//! -//! Each project can be skipped individually by using the environment variable -//! `SKIP_PROJECT_NAME_WASM_BUILD`. Where `PROJECT_NAME` needs to be replaced by the name of the -//! cargo project, e.g. `kitchensink-runtime` will be `NODE_RUNTIME`. -//! -//! ## Prerequisites: -//! -//! Wasm builder requires the following prerequisites for building the Wasm binary: -//! -//! - rust nightly + `wasm32-unknown-unknown` toolchain -//! -//! or -//! -//! - rust stable and version at least 1.68.0 + `wasm32-unknown-unknown` toolchain -//! -//! If a specific rust is installed with `rustup`, it is important that the wasm target is -//! installed as well. For example if installing the rust from 20.02.2020 using `rustup -//! install nightly-2020-02-20`, the wasm target needs to be installed as well `rustup target add -//! wasm32-unknown-unknown --toolchain nightly-2020-02-20`. +#![doc = include_str!("../README.md")] use std::{ env, fs, @@ -158,6 +66,9 @@ const FORCE_WASM_BUILD_ENV: &str = "FORCE_WASM_BUILD"; /// Environment variable that hints the workspace we are building. const WASM_BUILD_WORKSPACE_HINT: &str = "WASM_BUILD_WORKSPACE_HINT"; +/// Environment variable to set whether we'll build `core`/`std`. +const WASM_BUILD_STD: &str = "WASM_BUILD_STD"; + /// Write to the given `file` if the `content` is different. fn write_file_if_changed(file: impl AsRef, content: impl AsRef) { if fs::read_to_string(file.as_ref()).ok().as_deref() != Some(content.as_ref()) { @@ -282,6 +193,12 @@ impl CargoCommand { self.version } + /// Returns whether this version of the toolchain supports nightly features. + fn supports_nightly_features(&self) -> bool { + self.version.map_or(false, |version| version.is_nightly) || + env::var("RUSTC_BOOTSTRAP").is_ok() + } + /// Check if the supplied cargo command supports our Substrate wasm environment. /// /// This means that either the cargo version is at minimum 1.68.0 or this is a nightly cargo. @@ -332,3 +249,26 @@ impl std::ops::Deref for CargoCommandVersioned { fn color_output_enabled() -> bool { env::var(crate::WASM_BUILD_NO_COLOR).is_err() } + +/// Fetches a boolean environment variable. Will exit the process if the value is invalid. +fn get_bool_environment_variable(name: &str) -> Option { + let value = env::var_os(name)?; + + // We're comparing `OsString`s here so we can't use a `match`. + if value == "1" { + Some(true) + } else if value == "0" { + Some(false) + } else { + build_helper::warning!( + "the '{}' environment variable has an invalid value; it must be either '1' or '0'", + name + ); + std::process::exit(1); + } +} + +/// Returns whether we need to also compile the standard library when compiling the runtime. +fn build_std_required() -> bool { + crate::get_bool_environment_variable(crate::WASM_BUILD_STD).unwrap_or(true) +} diff --git a/substrate/utils/wasm-builder/src/prerequisites.rs b/substrate/utils/wasm-builder/src/prerequisites.rs index 8e81e6774fa..2cdbdd2798e 100644 --- a/substrate/utils/wasm-builder/src/prerequisites.rs +++ b/substrate/utils/wasm-builder/src/prerequisites.rs @@ -47,14 +47,11 @@ pub(crate) fn check() -> Result { check_wasm_toolchain_installed(cargo_command) } -/// Create the project that will be used to check that the wasm toolchain is installed and to -/// extract the rustc version. -fn create_check_toolchain_project(project_dir: &Path) { - let lib_rs_file = project_dir.join("src/lib.rs"); - let main_rs_file = project_dir.join("src/main.rs"); - let build_rs_file = project_dir.join("build.rs"); - let manifest_path = project_dir.join("Cargo.toml"); +/// Creates a minimal dummy crate at the given path and returns the manifest path. +fn create_minimal_crate(project_dir: &Path) -> std::path::PathBuf { + fs::create_dir_all(project_dir.join("src")).expect("Creating src dir does not fail; qed"); + let manifest_path = project_dir.join("Cargo.toml"); write_file_if_changed( &manifest_path, r#" @@ -62,120 +59,99 @@ fn create_check_toolchain_project(project_dir: &Path) { name = "wasm-test" version = "1.0.0" edition = "2021" - build = "build.rs" - - [lib] - name = "wasm_test" - crate-type = ["cdylib"] [workspace] "#, ); - write_file_if_changed(lib_rs_file, "pub fn test() {}"); - - // We want to know the rustc version of the rustc that is being used by our cargo command. - // The cargo command is determined by some *very* complex algorithm to find the cargo command - // that supports nightly. - // The best solution would be if there is a `cargo rustc --version` command, which sadly - // doesn't exists. So, the only available way of getting the rustc version is to build a project - // and capture the rustc version in this build process. This `build.rs` is exactly doing this. - // It gets the rustc version by calling `rustc --version` and exposing it in the `RUSTC_VERSION` - // environment variable. - write_file_if_changed( - build_rs_file, - r#" - fn main() { - let rustc_cmd = std::env::var("RUSTC").ok().unwrap_or_else(|| "rustc".into()); - - let rustc_version = std::process::Command::new(rustc_cmd) - .arg("--version") - .output() - .ok() - .and_then(|o| String::from_utf8(o.stdout).ok()); - - println!( - "cargo:rustc-env=RUSTC_VERSION={}", - rustc_version.unwrap_or_else(|| "unknown rustc version".into()), - ); - } - "#, - ); - // Just prints the `RURSTC_VERSION` environment variable that is being created by the - // `build.rs` script. - write_file_if_changed( - main_rs_file, - r#" - fn main() { - println!("{}", env!("RUSTC_VERSION")); - } - "#, - ); + + write_file_if_changed(project_dir.join("src/main.rs"), "fn main() {}"); + manifest_path } fn check_wasm_toolchain_installed( cargo_command: CargoCommand, ) -> Result { let temp = tempdir().expect("Creating temp dir does not fail; qed"); - fs::create_dir_all(temp.path().join("src")).expect("Creating src dir does not fail; qed"); - create_check_toolchain_project(temp.path()); - - let err_msg = print_error_message("Rust WASM toolchain not installed, please install it!"); - let manifest_path = temp.path().join("Cargo.toml").display().to_string(); - - let mut build_cmd = cargo_command.command(); - // Chdir to temp to avoid including project's .cargo/config.toml - // by accident - it can happen in some CI environments. - build_cmd.current_dir(&temp); - build_cmd.args(&[ - "build", - "--target=wasm32-unknown-unknown", - "--manifest-path", - &manifest_path, - ]); + let manifest_path = create_minimal_crate(temp.path()).display().to_string(); + + let prepare_command = |subcommand| { + let mut cmd = cargo_command.command(); + // Chdir to temp to avoid including project's .cargo/config.toml + // by accident - it can happen in some CI environments. + cmd.current_dir(&temp); + cmd.args(&[ + subcommand, + "--target=wasm32-unknown-unknown", + "--manifest-path", + &manifest_path, + ]); + + if super::color_output_enabled() { + cmd.arg("--color=always"); + } - if super::color_output_enabled() { - build_cmd.arg("--color=always"); + // manually set the `CARGO_TARGET_DIR` to prevent a cargo deadlock + let target_dir = temp.path().join("target").display().to_string(); + cmd.env("CARGO_TARGET_DIR", &target_dir); + + // Make sure the host's flags aren't used here, e.g. if an alternative linker is specified + // in the RUSTFLAGS then the check we do here will break unless we clear these. + cmd.env_remove("CARGO_ENCODED_RUSTFLAGS"); + cmd.env_remove("RUSTFLAGS"); + cmd + }; + + let err_msg = + print_error_message("Rust WASM toolchain is not properly installed; please install it!"); + let build_result = prepare_command("build").output().map_err(|_| err_msg.clone())?; + if !build_result.status.success() { + return match String::from_utf8(build_result.stderr) { + Ok(ref err) if err.contains("the `wasm32-unknown-unknown` target may not be installed") => + Err(print_error_message("Cannot compile the WASM runtime: the `wasm32-unknown-unknown` target is not installed!\n\ + You can install it with `rustup target add wasm32-unknown-unknown` if you're using `rustup`.")), + + // Apparently this can happen when we're running on a non Tier 1 platform. + Ok(ref err) if err.contains("linker `rust-lld` not found") => + Err(print_error_message("Cannot compile the WASM runtime: `rust-lld` not found!")), + + Ok(ref err) => Err(format!( + "{}\n\n{}\n{}\n{}{}\n", + err_msg, + Color::Yellow.bold().paint("Further error information:"), + Color::Yellow.bold().paint("-".repeat(60)), + err, + Color::Yellow.bold().paint("-".repeat(60)), + )), + + Err(_) => Err(err_msg), + }; } - let mut run_cmd = cargo_command.command(); - // Chdir to temp to avoid including project's .cargo/config.toml - // by accident - it can happen in some CI environments. - run_cmd.current_dir(&temp); - run_cmd.args(&["run", "--manifest-path", &manifest_path]); - - // manually set the `CARGO_TARGET_DIR` to prevent a cargo deadlock - let target_dir = temp.path().join("target").display().to_string(); - build_cmd.env("CARGO_TARGET_DIR", &target_dir); - run_cmd.env("CARGO_TARGET_DIR", &target_dir); - - // Make sure the host's flags aren't used here, e.g. if an alternative linker is specified - // in the RUSTFLAGS then the check we do here will break unless we clear these. - build_cmd.env_remove("CARGO_ENCODED_RUSTFLAGS"); - run_cmd.env_remove("CARGO_ENCODED_RUSTFLAGS"); - build_cmd.env_remove("RUSTFLAGS"); - run_cmd.env_remove("RUSTFLAGS"); - - build_cmd.output().map_err(|_| err_msg.clone()).and_then(|s| { - if s.status.success() { - let version = run_cmd.output().ok().and_then(|o| String::from_utf8(o.stdout).ok()); - Ok(CargoCommandVersioned::new( - cargo_command, - version.unwrap_or_else(|| "unknown rustc version".into()), - )) - } else { - match String::from_utf8(s.stderr) { - Ok(ref err) if err.contains("linker `rust-lld` not found") => - Err(print_error_message("`rust-lld` not found, please install it!")), - Ok(ref err) => Err(format!( - "{}\n\n{}\n{}\n{}{}\n", - err_msg, - Color::Yellow.bold().paint("Further error information:"), - Color::Yellow.bold().paint("-".repeat(60)), - err, - Color::Yellow.bold().paint("-".repeat(60)), - )), - Err(_) => Err(err_msg), + let mut run_cmd = prepare_command("rustc"); + run_cmd.args(&["-q", "--", "--version"]); + + let version = run_cmd + .output() + .ok() + .and_then(|o| String::from_utf8(o.stdout).ok()) + .unwrap_or_else(|| "unknown rustc version".into()); + + if crate::build_std_required() { + let mut sysroot_cmd = prepare_command("rustc"); + sysroot_cmd.args(&["-q", "--", "--print", "sysroot"]); + if let Some(sysroot) = + sysroot_cmd.output().ok().and_then(|o| String::from_utf8(o.stdout).ok()) + { + let src_path = + Path::new(sysroot.trim()).join("lib").join("rustlib").join("src").join("rust"); + if !src_path.exists() { + return Err(print_error_message( + "Cannot compile the WASM runtime: no standard library sources found!\n\ + You can install them with `rustup component add rust-src` if you're using `rustup`.", + )) } } - }) + } + + Ok(CargoCommandVersioned::new(cargo_command, version)) } diff --git a/substrate/utils/wasm-builder/src/version.rs b/substrate/utils/wasm-builder/src/version.rs index e4f7d98be61..3a0a306d737 100644 --- a/substrate/utils/wasm-builder/src/version.rs +++ b/substrate/utils/wasm-builder/src/version.rs @@ -212,4 +212,21 @@ mod tests { version_1_69_0, ); } + + #[test] + fn parse_rustc_version() { + let version = Version::extract("rustc 1.73.0 (cc66ad468 2023-10-03)").unwrap(); + assert_eq!( + version, + Version { + major: 1, + minor: 73, + patch: 0, + is_nightly: false, + year: Some(2023), + month: Some(10), + day: Some(03), + } + ); + } } diff --git a/substrate/utils/wasm-builder/src/wasm_project.rs b/substrate/utils/wasm-builder/src/wasm_project.rs index 2e6f671c45e..5bf44c2c9b2 100644 --- a/substrate/utils/wasm-builder/src/wasm_project.rs +++ b/substrate/utils/wasm-builder/src/wasm_project.rs @@ -750,6 +750,25 @@ fn build_bloaty_blob( build_cmd.arg("--offline"); } + // Our executor currently only supports the WASM MVP feature set, however nowadays + // when compiling WASM the Rust compiler has more features enabled by default. + // + // We do set the `-C target-cpu=mvp` flag to make sure that *our* code gets compiled + // in a way that is compatible with our executor, however this doesn't affect Rust's + // standard library crates (`std`, `core` and `alloc`) which are by default precompiled + // and still can make use of these extra features. + // + // So here we force the compiler to also compile the standard library crates for us + // to make sure that they also only use the MVP features. + if crate::build_std_required() { + // Unfortunately this is still a nightly-only flag, but FWIW it is pretty widely used + // so it's unlikely to break without a replacement. + build_cmd.arg("-Z").arg("build-std"); + if !cargo_cmd.supports_nightly_features() { + build_cmd.env("RUSTC_BOOTSTRAP", "1"); + } + } + println!("{}", colorize_info_message("Information that should be included in a bug report.")); println!("{} {:?}", colorize_info_message("Executing build command:"), build_cmd); println!("{} {}", colorize_info_message("Using rustc version:"), cargo_cmd.rustc_version()); @@ -952,6 +971,7 @@ fn generate_rerun_if_changed_instructions( println!("cargo:rerun-if-env-changed={}", crate::WASM_BUILD_RUSTFLAGS_ENV); println!("cargo:rerun-if-env-changed={}", crate::WASM_TARGET_DIRECTORY); println!("cargo:rerun-if-env-changed={}", crate::WASM_BUILD_TOOLCHAIN); + println!("cargo:rerun-if-env-changed={}", crate::WASM_BUILD_STD); } /// Track files and paths related to the given package to rerun `build.rs` on any relevant change. -- GitLab From 4298bc608fa8e5d8b8fb1ca0c1028613d82bc99b Mon Sep 17 00:00:00 2001 From: Adrian Catangiu Date: Mon, 27 Nov 2023 14:22:13 +0200 Subject: [PATCH 077/102] asset-hub-westend-integration-tests: add more asset transfers tests (#2488) Just adds more tests. --- Cargo.lock | 2 + .../assets/asset-hub-rococo/src/lib.rs | 2 +- .../assets/asset-hub-westend/src/lib.rs | 2 +- .../bridges/bridge-hub-rococo/src/lib.rs | 2 +- .../bridges/bridge-hub-westend/src/lib.rs | 2 +- .../parachains/testing/penpal/Cargo.toml | 1 + .../parachains/testing/penpal/src/lib.rs | 6 +- .../emulated/common/src/impls.rs | 12 +- .../src/tests/reserve_transfer.rs | 43 +-- .../assets/asset-hub-rococo/src/tests/swap.rs | 6 - .../tests/assets/asset-hub-westend/Cargo.toml | 1 + .../tests/assets/asset-hub-westend/src/lib.rs | 32 +- .../src/tests/reserve_transfer.rs | 337 ++++++++++++++++-- .../asset-hub-westend/src/tests/send.rs | 12 +- .../asset-hub-westend/src/tests/swap.rs | 24 +- .../asset-hub-westend/src/tests/teleport.rs | 45 +-- 16 files changed, 402 insertions(+), 127 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8a3f8e05fbc..f99b579bfe9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1028,6 +1028,7 @@ dependencies = [ "pallet-xcm", "parachains-common", "parity-scale-codec", + "penpal-runtime", "polkadot-runtime-common", "sp-runtime", "staging-xcm", @@ -11746,6 +11747,7 @@ dependencies = [ "serde_json", "sp-core", "sp-runtime", + "westend-emulated-chain", ] [[package]] diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-rococo/src/lib.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-rococo/src/lib.rs index 1ed22b3cc4f..877edceae32 100644 --- a/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-rococo/src/lib.rs +++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-rococo/src/lib.rs @@ -52,6 +52,6 @@ decl_test_parachains! { // AssetHubRococo implementation impl_accounts_helpers_for_parachain!(AssetHubRococo); -impl_assert_events_helpers_for_parachain!(AssetHubRococo, false); +impl_assert_events_helpers_for_parachain!(AssetHubRococo); impl_assets_helpers_for_parachain!(AssetHubRococo, Rococo); impl_foreign_assets_helpers_for_parachain!(AssetHubRococo, Rococo); diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-westend/src/lib.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-westend/src/lib.rs index 4dcdb613ac2..1c017c63c6f 100644 --- a/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-westend/src/lib.rs +++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-westend/src/lib.rs @@ -52,6 +52,6 @@ decl_test_parachains! { // AssetHubWestend implementation impl_accounts_helpers_for_parachain!(AssetHubWestend); -impl_assert_events_helpers_for_parachain!(AssetHubWestend, false); +impl_assert_events_helpers_for_parachain!(AssetHubWestend); impl_assets_helpers_for_parachain!(AssetHubWestend, Westend); impl_foreign_assets_helpers_for_parachain!(AssetHubWestend, Westend); diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo/src/lib.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo/src/lib.rs index ea0c9513abc..8e5b29e6561 100644 --- a/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo/src/lib.rs +++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo/src/lib.rs @@ -46,4 +46,4 @@ decl_test_parachains! { // BridgeHubRococo implementation impl_accounts_helpers_for_parachain!(BridgeHubRococo); -impl_assert_events_helpers_for_parachain!(BridgeHubRococo, false); +impl_assert_events_helpers_for_parachain!(BridgeHubRococo); diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend/src/lib.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend/src/lib.rs index 4a130ac1f27..a774f31b0fb 100644 --- a/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend/src/lib.rs +++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend/src/lib.rs @@ -46,4 +46,4 @@ decl_test_parachains! { // BridgeHubWestend implementation impl_accounts_helpers_for_parachain!(BridgeHubWestend); -impl_assert_events_helpers_for_parachain!(BridgeHubWestend, false); +impl_assert_events_helpers_for_parachain!(BridgeHubWestend); diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal/Cargo.toml b/cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal/Cargo.toml index c55b10d7180..5886158c263 100644 --- a/cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal/Cargo.toml +++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal/Cargo.toml @@ -23,3 +23,4 @@ cumulus-primitives-core = { path = "../../../../../../../primitives/core", defau emulated-integration-tests-common = { path = "../../../../common", default-features = false } penpal-runtime = { path = "../../../../../../runtimes/testing/penpal" } rococo-emulated-chain = { path = "../../../relays/rococo" } +westend-emulated-chain = { path = "../../../relays/westend" } diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal/src/lib.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal/src/lib.rs index f9a422bfcba..c76120adb79 100644 --- a/cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal/src/lib.rs +++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal/src/lib.rs @@ -25,6 +25,7 @@ use emulated_integration_tests_common::{ impl_assets_helpers_for_parachain, impls::Parachain, xcm_emulator::decl_test_parachains, }; use rococo_emulated_chain::Rococo; +use westend_emulated_chain::Westend; // Penpal Parachain declaration decl_test_parachains! { @@ -67,5 +68,6 @@ decl_test_parachains! { // Penpal implementation impl_accounts_helpers_for_parachain!(PenpalA); impl_assets_helpers_for_parachain!(PenpalA, Rococo); -impl_assert_events_helpers_for_parachain!(PenpalA, true); -impl_assert_events_helpers_for_parachain!(PenpalB, true); +impl_assets_helpers_for_parachain!(PenpalB, Westend); +impl_assert_events_helpers_for_parachain!(PenpalA); +impl_assert_events_helpers_for_parachain!(PenpalB); diff --git a/cumulus/parachains/integration-tests/emulated/common/src/impls.rs b/cumulus/parachains/integration-tests/emulated/common/src/impls.rs index 8c94df6d888..768784ac067 100644 --- a/cumulus/parachains/integration-tests/emulated/common/src/impls.rs +++ b/cumulus/parachains/integration-tests/emulated/common/src/impls.rs @@ -418,7 +418,7 @@ macro_rules! impl_accounts_helpers_for_parachain { #[macro_export] macro_rules! impl_assert_events_helpers_for_parachain { - ( $chain:ident, $ignore_weight:expr ) => { + ( $chain:ident ) => { $crate::impls::paste::paste! { type [<$chain RuntimeEvent>] = <$chain as $crate::impls::Chain>::RuntimeEvent; @@ -431,7 +431,7 @@ macro_rules! impl_assert_events_helpers_for_parachain { [<$chain RuntimeEvent>]::::PolkadotXcm( $crate::impls::pallet_xcm::Event::Attempted { outcome: $crate::impls::Outcome::Complete(weight) } ) => { - weight: $ignore_weight || $crate::impls::weight_within_threshold( + weight: $crate::impls::weight_within_threshold( ($crate::impls::REF_TIME_THRESHOLD, $crate::impls::PROOF_SIZE_THRESHOLD), expected_weight.unwrap_or(*weight), *weight @@ -453,7 +453,7 @@ macro_rules! impl_assert_events_helpers_for_parachain { [<$chain RuntimeEvent>]::::PolkadotXcm( $crate::impls::pallet_xcm::Event::Attempted { outcome: $crate::impls::Outcome::Incomplete(weight, error) } ) => { - weight: $ignore_weight || $crate::impls::weight_within_threshold( + weight: $crate::impls::weight_within_threshold( ($crate::impls::REF_TIME_THRESHOLD, $crate::impls::PROOF_SIZE_THRESHOLD), expected_weight.unwrap_or(*weight), *weight @@ -509,7 +509,7 @@ macro_rules! impl_assert_events_helpers_for_parachain { [<$chain RuntimeEvent>]::::MessageQueue($crate::impls::pallet_message_queue::Event::Processed { success: true, weight_used: weight, .. }) => { - weight: $ignore_weight || $crate::impls::weight_within_threshold( + weight: $crate::impls::weight_within_threshold( ($crate::impls::REF_TIME_THRESHOLD, $crate::impls::PROOF_SIZE_THRESHOLD), expected_weight.unwrap_or(*weight), *weight @@ -529,7 +529,7 @@ macro_rules! impl_assert_events_helpers_for_parachain { [<$chain RuntimeEvent>]::::MessageQueue($crate::impls::pallet_message_queue::Event::Processed { success: false, weight_used: weight, .. }) => { - weight: $ignore_weight || $crate::impls::weight_within_threshold( + weight: $crate::impls::weight_within_threshold( ($crate::impls::REF_TIME_THRESHOLD, $crate::impls::PROOF_SIZE_THRESHOLD), expected_weight.unwrap_or(*weight), *weight @@ -560,7 +560,7 @@ macro_rules! impl_assert_events_helpers_for_parachain { vec![ [<$chain RuntimeEvent>]::::MessageQueue($crate::impls::pallet_message_queue::Event::Processed { success: true, weight_used: weight, .. } ) => { - weight: $ignore_weight || $crate::impls::weight_within_threshold( + weight: $crate::impls::weight_within_threshold( ($crate::impls::REF_TIME_THRESHOLD, $crate::impls::PROOF_SIZE_THRESHOLD), expected_weight.unwrap_or(*weight), *weight diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/reserve_transfer.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/reserve_transfer.rs index d0e9b72176b..18483762ae1 100644 --- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/reserve_transfer.rs +++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/reserve_transfer.rs @@ -40,19 +40,6 @@ fn relay_to_para_sender_assertions(t: RelayToParaTest) { ); } -fn relay_to_para_receiver_assertions(_: Test) { - type RuntimeEvent = ::RuntimeEvent; - assert_expected_events!( - PenpalA, - vec![ - RuntimeEvent::Balances(pallet_balances::Event::Deposit { .. }) => {}, - RuntimeEvent::MessageQueue( - pallet_message_queue::Event::Processed { success: true, .. } - ) => {}, - ] - ); -} - fn system_para_to_para_sender_assertions(t: SystemParaToParaTest) { type RuntimeEvent = ::RuntimeEvent; @@ -78,7 +65,7 @@ fn system_para_to_para_sender_assertions(t: SystemParaToParaTest) { ); } -fn system_para_to_para_receiver_assertions(_: Test) { +fn para_receiver_assertions(_: Test) { type RuntimeEvent = ::RuntimeEvent; assert_expected_events!( PenpalA, @@ -297,7 +284,7 @@ fn reserve_transfer_native_asset_from_relay_to_para() { let receiver_balance_before = test.receiver.balance; test.set_assertion::(relay_to_para_sender_assertions); - test.set_assertion::(relay_to_para_receiver_assertions); + test.set_assertion::(para_receiver_assertions); test.set_dispatchable::(relay_to_para_limited_reserve_transfer_assets); test.assert(); @@ -314,6 +301,10 @@ fn reserve_transfer_native_asset_from_relay_to_para() { assert_eq!(sender_balance_before - amount_to_send - delivery_fees, sender_balance_after); // Receiver's balance is increased assert!(receiver_balance_after > receiver_balance_before); + // Receiver's balance increased by `amount_to_send - delivery_fees - bought_execution`; + // `delivery_fees` might be paid from transfer or JIT, also `bought_execution` is unknown but + // should be non-zero + assert!(receiver_balance_after < receiver_balance_before + amount_to_send); } /// Reserve Transfers of native asset from System Parachain to Parachain should work @@ -337,7 +328,7 @@ fn reserve_transfer_native_asset_from_system_para_to_para() { let receiver_balance_before = test.receiver.balance; test.set_assertion::(system_para_to_para_sender_assertions); - test.set_assertion::(system_para_to_para_receiver_assertions); + test.set_assertion::(para_receiver_assertions); test.set_dispatchable::(system_para_to_para_limited_reserve_transfer_assets); test.assert(); @@ -354,6 +345,10 @@ fn reserve_transfer_native_asset_from_system_para_to_para() { assert_eq!(sender_balance_before - amount_to_send - delivery_fees, sender_balance_after); // Receiver's balance is increased assert!(receiver_balance_after > receiver_balance_before); + // Receiver's balance increased by `amount_to_send - delivery_fees - bought_execution`; + // `delivery_fees` might be paid from transfer or JIT, also `bought_execution` is unknown but + // should be non-zero + assert!(receiver_balance_after < receiver_balance_before + amount_to_send); } /// Reserve Transfers of native asset from Parachain to System Parachain should work @@ -400,6 +395,10 @@ fn reserve_transfer_native_asset_from_para_to_system_para() { assert_eq!(sender_balance_before - amount_to_send - delivery_fees, sender_balance_after); // Receiver's balance is increased assert!(receiver_balance_after > receiver_balance_before); + // Receiver's balance increased by `amount_to_send - delivery_fees - bought_execution`; + // `delivery_fees` might be paid from transfer or JIT, also `bought_execution` is unknown but + // should be non-zero + assert!(receiver_balance_after < receiver_balance_before + amount_to_send); } /// Reserve Transfers of a local asset and native asset from System Parachain to Parachain should @@ -420,7 +419,7 @@ fn reserve_transfer_assets_from_system_para_to_para() { ASSET_MIN_BALANCE, false, PenpalASender::get(), - Some(Weight::from_parts(1_019_445_000, 200_000)), + None, 0, ); @@ -485,6 +484,10 @@ fn reserve_transfer_assets_from_system_para_to_para() { assert!(sender_balance_after < sender_balance_before); // Receiver's balance is increased assert!(receiver_balance_after > receiver_balance_before); + // Receiver's balance increased by `amount_to_send - delivery_fees - bought_execution`; + // `delivery_fees` might be paid from transfer or JIT, also `bought_execution` is unknown but + // should be non-zero + assert!(receiver_balance_after < receiver_balance_before + fee_amount_to_send); let sender_assets_after = AssetHubRococo::execute_with(|| { type Assets = ::Assets; @@ -495,8 +498,8 @@ fn reserve_transfer_assets_from_system_para_to_para() { >::balance(ASSET_ID, &PenpalAReceiver::get()) }); - // Sender's balance is reduced + // Sender's balance is reduced by exact amount assert_eq!(sender_assets_before - asset_amount_to_send, sender_assets_after); - // Receiver's balance is increased - assert!(receiver_assets_after > receiver_assets_before); + // Receiver's balance is increased by exact amount + assert_eq!(receiver_assets_after, receiver_assets_before + asset_amount_to_send); } diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/swap.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/swap.rs index e08af50c14e..9e691bf02f1 100644 --- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/swap.rs +++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/swap.rs @@ -44,12 +44,6 @@ fn swap_locally_on_chain_using_local_assets() { 100_000_000_000_000, )); - assert_ok!(::Balances::force_set_balance( - ::RuntimeOrigin::root(), - AssetHubRococoSender::get().into(), - 100_000_000_000_000, - )); - assert_ok!(::AssetConversion::create_pool( ::RuntimeOrigin::signed(AssetHubRococoSender::get()), asset_native.clone(), diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/Cargo.toml b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/Cargo.toml index 7080abc0a44..4c7537bfd53 100644 --- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/Cargo.toml +++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/Cargo.toml @@ -38,4 +38,5 @@ asset-test-utils = { path = "../../../../../runtimes/assets/test-utils" } cumulus-pallet-dmp-queue = { default-features = false, path = "../../../../../../pallets/dmp-queue" } cumulus-pallet-parachain-system = { default-features = false, path = "../../../../../../pallets/parachain-system" } emulated-integration-tests-common = { path = "../../../common", default-features = false} +penpal-runtime = { path = "../../../../../runtimes/testing/penpal" } westend-system-emulated-network ={ path = "../../../networks/westend-system" } diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/lib.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/lib.rs index 83a867e6ae3..e2c03d2f8f0 100644 --- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/lib.rs +++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/lib.rs @@ -47,11 +47,12 @@ pub use westend_system_emulated_network::{ asset_hub_westend_emulated_chain::{ genesis::ED as ASSET_HUB_WESTEND_ED, AssetHubWestendParaPallet as AssetHubWestendPallet, }, - penpal_emulated_chain::PenpalAParaPallet as PenpalAPallet, + penpal_emulated_chain::PenpalBParaPallet as PenpalBPallet, westend_emulated_chain::{genesis::ED as WESTEND_ED, WestendRelayPallet as WestendPallet}, AssetHubWestendPara as AssetHubWestend, AssetHubWestendParaReceiver as AssetHubWestendReceiver, - AssetHubWestendParaSender as AssetHubWestendSender, PenpalAPara as PenpalA, - PenpalAParaReceiver as PenpalAReceiver, PenpalAParaSender as PenpalASender, + AssetHubWestendParaSender as AssetHubWestendSender, BridgeHubWestendPara as BridgeHubWestend, + BridgeHubWestendParaReceiver as BridgeHubWestendReceiver, PenpalBPara as PenpalB, + PenpalBParaReceiver as PenpalBReceiver, PenpalBParaSender as PenpalBSender, WestendRelay as Westend, WestendRelayReceiver as WestendReceiver, WestendRelaySender as WestendSender, }; @@ -62,18 +63,20 @@ pub const ASSET_MIN_BALANCE: u128 = 1000; pub const ASSETS_PALLET_ID: u8 = 50; pub type RelayToSystemParaTest = Test; +pub type RelayToParaTest = Test; pub type SystemParaToRelayTest = Test; -pub type SystemParaToParaTest = Test; +pub type SystemParaToParaTest = Test; +pub type ParaToSystemParaTest = Test; /// Returns a `TestArgs` instance to be used for the Relay Chain across integration tests -pub fn relay_test_args(amount: Balance) -> TestArgs { +pub fn relay_test_args( + dest: MultiLocation, + beneficiary_id: AccountId32, + amount: Balance, +) -> TestArgs { TestArgs { - dest: Westend::child_location_of(AssetHubWestend::para_id()), - beneficiary: AccountId32Junction { - network: None, - id: AssetHubWestendReceiver::get().into(), - } - .into(), + dest, + beneficiary: AccountId32Junction { network: None, id: beneficiary_id.into() }.into(), amount, assets: (Here, amount).into(), asset_id: None, @@ -82,13 +85,14 @@ pub fn relay_test_args(amount: Balance) -> TestArgs { } } -/// Returns a `TestArgs` instance to be used for the System Parachain across integration tests -pub fn system_para_test_args( +/// Returns a `TestArgs` instance to be used by parachains across integration tests +pub fn para_test_args( dest: MultiLocation, beneficiary_id: AccountId32, amount: Balance, assets: MultiAssets, asset_id: Option, + fee_asset_item: u32, ) -> TestArgs { TestArgs { dest, @@ -96,7 +100,7 @@ pub fn system_para_test_args( amount, assets, asset_id, - fee_asset_item: 0, + fee_asset_item, weight_limit: WeightLimit::Unlimited, } } diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/reserve_transfer.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/reserve_transfer.rs index 5b2c648b7b0..1a69a4f3f71 100644 --- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/reserve_transfer.rs +++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/reserve_transfer.rs @@ -14,7 +14,31 @@ // limitations under the License. use crate::*; -use asset_hub_westend_runtime::xcm_config::XcmConfig; +use asset_hub_westend_runtime::xcm_config::XcmConfig as AssetHubWestendXcmConfig; +use penpal_runtime::xcm_config::XcmConfig as PenpalWestendXcmConfig; +use westend_runtime::xcm_config::XcmConfig as WestendXcmConfig; + +fn relay_to_para_sender_assertions(t: RelayToParaTest) { + type RuntimeEvent = ::RuntimeEvent; + + Westend::assert_xcm_pallet_attempted_complete(Some(Weight::from_parts(864_610_000, 8_799))); + + assert_expected_events!( + Westend, + vec![ + // Amount to reserve transfer is transferred to Parachain's Sovereign account + RuntimeEvent::Balances( + pallet_balances::Event::Transfer { from, to, amount } + ) => { + from: *from == t.sender.account_id, + to: *to == Westend::sovereign_account_id_of( + t.args.dest + ), + amount: *amount == t.args.amount, + }, + ] + ); +} fn system_para_to_para_sender_assertions(t: SystemParaToParaTest) { type RuntimeEvent = ::RuntimeEvent; @@ -42,10 +66,54 @@ fn system_para_to_para_sender_assertions(t: SystemParaToParaTest) { } fn para_receiver_assertions(_: Test) { - type RuntimeEvent = ::RuntimeEvent; + type RuntimeEvent = ::RuntimeEvent; + assert_expected_events!( + PenpalB, + vec![ + RuntimeEvent::Balances(pallet_balances::Event::Deposit { .. }) => {}, + RuntimeEvent::MessageQueue( + pallet_message_queue::Event::Processed { success: true, .. } + ) => {}, + ] + ); +} + +fn para_to_system_para_sender_assertions(t: ParaToSystemParaTest) { + type RuntimeEvent = ::RuntimeEvent; + + PenpalB::assert_xcm_pallet_attempted_complete(Some(Weight::from_parts(864_610_000, 8_799))); + + assert_expected_events!( + PenpalB, + vec![ + // Amount to reserve transfer is transferred to Parachain's Sovereign account + RuntimeEvent::Balances( + pallet_balances::Event::Withdraw { who, amount } + ) => { + who: *who == t.sender.account_id, + amount: *amount == t.args.amount, + }, + ] + ); +} + +fn para_to_system_para_receiver_assertions(t: ParaToSystemParaTest) { + type RuntimeEvent = ::RuntimeEvent; + + let sov_penpal_on_ahw = AssetHubWestend::sovereign_account_id_of( + AssetHubWestend::sibling_location_of(PenpalB::para_id()), + ); + assert_expected_events!( - PenpalA, + AssetHubWestend, vec![ + // Amount to reserve transfer is transferred to Parachain's Sovereign account + RuntimeEvent::Balances( + pallet_balances::Event::Withdraw { who, amount } + ) => { + who: *who == sov_penpal_on_ahw.clone().into(), + amount: *amount == t.args.amount, + }, RuntimeEvent::Balances(pallet_balances::Event::Deposit { .. }) => {}, RuntimeEvent::MessageQueue( pallet_message_queue::Event::Processed { success: true, .. } @@ -54,7 +122,7 @@ fn para_receiver_assertions(_: Test) { ); } -fn system_para_to_para_assets_assertions(t: SystemParaToParaTest) { +fn system_para_to_para_assets_sender_assertions(t: SystemParaToParaTest) { type RuntimeEvent = ::RuntimeEvent; AssetHubWestend::assert_xcm_pallet_attempted_complete(Some(Weight::from_parts( @@ -80,6 +148,31 @@ fn system_para_to_para_assets_assertions(t: SystemParaToParaTest) { ); } +fn system_para_to_para_assets_receiver_assertions(_: Test) { + type RuntimeEvent = ::RuntimeEvent; + assert_expected_events!( + PenpalB, + vec![ + RuntimeEvent::Balances(pallet_balances::Event::Deposit { .. }) => {}, + RuntimeEvent::Assets(pallet_assets::Event::Issued { .. }) => {}, + RuntimeEvent::MessageQueue( + pallet_message_queue::Event::Processed { success: true, .. } + ) => {}, + ] + ); +} + +fn relay_to_para_limited_reserve_transfer_assets(t: RelayToParaTest) -> DispatchResult { + ::XcmPallet::limited_reserve_transfer_assets( + t.signed_origin, + bx!(t.args.dest.into()), + bx!(t.args.beneficiary.into()), + bx!(t.args.assets.into()), + t.args.fee_asset_item, + t.args.weight_limit, + ) +} + fn system_para_to_para_limited_reserve_transfer_assets(t: SystemParaToParaTest) -> DispatchResult { ::PolkadotXcm::limited_reserve_transfer_assets( t.signed_origin, @@ -91,6 +184,17 @@ fn system_para_to_para_limited_reserve_transfer_assets(t: SystemParaToParaTest) ) } +fn para_to_system_para_limited_reserve_transfer_assets(t: ParaToSystemParaTest) -> DispatchResult { + ::PolkadotXcm::limited_reserve_transfer_assets( + t.signed_origin, + bx!(t.args.dest.into()), + bx!(t.args.beneficiary.into()), + bx!(t.args.assets.into()), + t.args.fee_asset_item, + t.args.weight_limit, + ) +} + /// Reserve Transfers of native asset from Relay Chain to the System Parachain shouldn't work #[test] fn reserve_transfer_native_asset_from_relay_to_system_para_fails() { @@ -159,19 +263,62 @@ fn reserve_transfer_native_asset_from_system_para_to_relay_fails() { }); } +/// Reserve Transfers of native asset from Relay to Parachain should work +#[test] +fn reserve_transfer_native_asset_from_relay_to_para() { + // Init values for Relay + let destination = Westend::child_location_of(PenpalB::para_id()); + let beneficiary_id = PenpalBReceiver::get(); + let amount_to_send: Balance = WESTEND_ED * 1000; + + let test_args = TestContext { + sender: WestendSender::get(), + receiver: PenpalBReceiver::get(), + args: relay_test_args(destination, beneficiary_id, amount_to_send), + }; + + let mut test = RelayToParaTest::new(test_args); + + let sender_balance_before = test.sender.balance; + let receiver_balance_before = test.receiver.balance; + + test.set_assertion::(relay_to_para_sender_assertions); + test.set_assertion::(para_receiver_assertions); + test.set_dispatchable::(relay_to_para_limited_reserve_transfer_assets); + test.assert(); + + let delivery_fees = Westend::execute_with(|| { + xcm_helpers::transfer_assets_delivery_fees::< + ::XcmSender, + >(test.args.assets.clone(), 0, test.args.weight_limit, test.args.beneficiary, test.args.dest) + }); + + let sender_balance_after = test.sender.balance; + let receiver_balance_after = test.receiver.balance; + + // Sender's balance is reduced + assert_eq!(sender_balance_before - amount_to_send - delivery_fees, sender_balance_after); + // Receiver's balance is increased + assert!(receiver_balance_after > receiver_balance_before); + // Receiver's balance increased by `amount_to_send - delivery_fees - bought_execution`; + // `delivery_fees` might be paid from transfer or JIT, also `bought_execution` is unknown but + // should be non-zero + assert!(receiver_balance_after < receiver_balance_before + amount_to_send); +} + /// Reserve Transfers of native asset from System Parachain to Parachain should work #[test] fn reserve_transfer_native_asset_from_system_para_to_para() { // Init values for System Parachain - let destination = AssetHubWestend::sibling_location_of(PenpalA::para_id()); - let beneficiary_id = PenpalAReceiver::get(); + let destination = AssetHubWestend::sibling_location_of(PenpalB::para_id()); + let beneficiary_id = PenpalBReceiver::get(); let amount_to_send: Balance = ASSET_HUB_WESTEND_ED * 1000; let assets = (Parent, amount_to_send).into(); let test_args = TestContext { sender: AssetHubWestendSender::get(), - receiver: PenpalAReceiver::get(), - args: system_para_test_args(destination, beneficiary_id, amount_to_send, assets, None), + receiver: PenpalBReceiver::get(), + args: para_test_args(destination, beneficiary_id, amount_to_send, assets, None, 0), }; let mut test = SystemParaToParaTest::new(test_args); @@ -180,7 +327,7 @@ fn reserve_transfer_native_asset_from_system_para_to_para() { let receiver_balance_before = test.receiver.balance; test.set_assertion::(system_para_to_para_sender_assertions); - test.set_assertion::(para_receiver_assertions); + test.set_assertion::(para_receiver_assertions); test.set_dispatchable::(system_para_to_para_limited_reserve_transfer_assets); test.assert(); @@ -188,53 +335,171 @@ fn reserve_transfer_native_asset_from_system_para_to_para() { let receiver_balance_after = test.receiver.balance; let delivery_fees = AssetHubWestend::execute_with(|| { - xcm_helpers::transfer_assets_delivery_fees::<::XcmSender>( - test.args.assets.clone(), - 0, - test.args.weight_limit, - test.args.beneficiary, - test.args.dest, - ) + xcm_helpers::transfer_assets_delivery_fees::< + ::XcmSender, + >(test.args.assets.clone(), 0, test.args.weight_limit, test.args.beneficiary, test.args.dest) }); // Sender's balance is reduced assert_eq!(sender_balance_before - amount_to_send - delivery_fees, sender_balance_after); // Receiver's balance is increased assert!(receiver_balance_after > receiver_balance_before); + // Receiver's balance increased by `amount_to_send - delivery_fees - bought_execution`; + // `delivery_fees` might be paid from transfer or JIT, also `bought_execution` is unknown but + // should be non-zero + assert!(receiver_balance_after < receiver_balance_before + amount_to_send); } -/// Reserve Transfers of a local asset from System Parachain to Parachain should work +/// Reserve Transfers of native asset from Parachain to System Parachain should work #[test] -fn reserve_transfer_asset_from_system_para_to_para() { - // Force create asset from Relay Chain and mint assets for System Parachain's sender account +fn reserve_transfer_native_asset_from_para_to_system_para() { + // Init values for Penpal Parachain + let destination = PenpalB::sibling_location_of(AssetHubWestend::para_id()); + let beneficiary_id = AssetHubWestendReceiver::get(); + let amount_to_send: Balance = ASSET_HUB_WESTEND_ED * 1000; + let assets = (Parent, amount_to_send).into(); + + let test_args = TestContext { + sender: PenpalBSender::get(), + receiver: AssetHubWestendReceiver::get(), + args: para_test_args(destination, beneficiary_id, amount_to_send, assets, None, 0), + }; + + let mut test = ParaToSystemParaTest::new(test_args); + + let sender_balance_before = test.sender.balance; + let receiver_balance_before = test.receiver.balance; + + let penpal_location_as_seen_by_ahw = AssetHubWestend::sibling_location_of(PenpalB::para_id()); + let sov_penpal_on_ahw = + AssetHubWestend::sovereign_account_id_of(penpal_location_as_seen_by_ahw); + + // fund the Penpal's SA on AHW with the native tokens held in reserve + AssetHubWestend::fund_accounts(vec![(sov_penpal_on_ahw.into(), amount_to_send * 2)]); + + test.set_assertion::(para_to_system_para_sender_assertions); + test.set_assertion::(para_to_system_para_receiver_assertions); + test.set_dispatchable::(para_to_system_para_limited_reserve_transfer_assets); + test.assert(); + + let sender_balance_after = test.sender.balance; + let receiver_balance_after = test.receiver.balance; + + let delivery_fees = PenpalB::execute_with(|| { + xcm_helpers::transfer_assets_delivery_fees::< + ::XcmSender, + >(test.args.assets.clone(), 0, test.args.weight_limit, test.args.beneficiary, test.args.dest) + }); + + // Sender's balance is reduced + assert_eq!(sender_balance_before - amount_to_send - delivery_fees, sender_balance_after); + // Receiver's balance is increased + assert!(receiver_balance_after > receiver_balance_before); + // Receiver's balance increased by `amount_to_send - delivery_fees - bought_execution`; + // `delivery_fees` might be paid from transfer or JIT, also `bought_execution` is unknown but + // should be non-zero + assert!(receiver_balance_after < receiver_balance_before + amount_to_send); +} + +/// Reserve Transfers of a local asset and native asset from System Parachain to Parachain should +/// work +#[test] +fn reserve_transfer_assets_from_system_para_to_para() { + // Force create asset on AssetHubWestend and PenpalB from Relay Chain AssetHubWestend::force_create_and_mint_asset( ASSET_ID, ASSET_MIN_BALANCE, true, AssetHubWestendSender::get(), Some(Weight::from_parts(1_019_445_000, 200_000)), - ASSET_MIN_BALANCE * 1000000, + ASSET_MIN_BALANCE * 1_000_000, + ); + PenpalB::force_create_and_mint_asset( + ASSET_ID, + ASSET_MIN_BALANCE, + false, + PenpalBSender::get(), + None, + 0, ); // Init values for System Parachain - let destination = AssetHubWestend::sibling_location_of(PenpalA::para_id()); - let beneficiary_id = PenpalAReceiver::get(); - let amount_to_send = ASSET_MIN_BALANCE * 1000; - let assets = - (X2(PalletInstance(ASSETS_PALLET_ID), GeneralIndex(ASSET_ID.into())), amount_to_send) - .into(); - - let system_para_test_args = TestContext { + let destination = AssetHubWestend::sibling_location_of(PenpalB::para_id()); + let beneficiary_id = PenpalBReceiver::get(); + let fee_amount_to_send = ASSET_HUB_WESTEND_ED * 1000; + let asset_amount_to_send = ASSET_MIN_BALANCE * 1000; + let assets: MultiAssets = vec![ + (Parent, fee_amount_to_send).into(), + (X2(PalletInstance(ASSETS_PALLET_ID), GeneralIndex(ASSET_ID.into())), asset_amount_to_send) + .into(), + ] + .into(); + let fee_asset_index = assets + .inner() + .iter() + .position(|r| r == &(Parent, fee_amount_to_send).into()) + .unwrap() as u32; + + let para_test_args = TestContext { sender: AssetHubWestendSender::get(), - receiver: PenpalAReceiver::get(), - args: system_para_test_args(destination, beneficiary_id, amount_to_send, assets, None), + receiver: PenpalBReceiver::get(), + args: para_test_args( + destination, + beneficiary_id, + asset_amount_to_send, + assets, + None, + fee_asset_index, + ), }; - let mut system_para_test = SystemParaToParaTest::new(system_para_test_args); + let mut test = SystemParaToParaTest::new(para_test_args); + + // Create SA-of-Penpal-on-AHW with ED. + let penpal_location = AssetHubWestend::sibling_location_of(PenpalB::para_id()); + let sov_penpal_on_ahw = AssetHubWestend::sovereign_account_id_of(penpal_location); + AssetHubWestend::fund_accounts(vec![(sov_penpal_on_ahw.into(), WESTEND_ED)]); + + let sender_balance_before = test.sender.balance; + let receiver_balance_before = test.receiver.balance; + + let sender_assets_before = AssetHubWestend::execute_with(|| { + type Assets = ::Assets; + >::balance(ASSET_ID, &AssetHubWestendSender::get()) + }); + let receiver_assets_before = PenpalB::execute_with(|| { + type Assets = ::Assets; + >::balance(ASSET_ID, &PenpalBReceiver::get()) + }); + + test.set_assertion::(system_para_to_para_assets_sender_assertions); + test.set_assertion::(system_para_to_para_assets_receiver_assertions); + test.set_dispatchable::(system_para_to_para_limited_reserve_transfer_assets); + test.assert(); + + let sender_balance_after = test.sender.balance; + let receiver_balance_after = test.receiver.balance; + + // Sender's balance is reduced + assert!(sender_balance_after < sender_balance_before); + // Receiver's balance is increased + assert!(receiver_balance_after > receiver_balance_before); + // Receiver's balance increased by `amount_to_send - delivery_fees - bought_execution`; + // `delivery_fees` might be paid from transfer or JIT, also `bought_execution` is unknown but + // should be non-zero + assert!(receiver_balance_after < receiver_balance_before + fee_amount_to_send); + + let sender_assets_after = AssetHubWestend::execute_with(|| { + type Assets = ::Assets; + >::balance(ASSET_ID, &AssetHubWestendSender::get()) + }); + let receiver_assets_after = PenpalB::execute_with(|| { + type Assets = ::Assets; + >::balance(ASSET_ID, &PenpalBReceiver::get()) + }); - system_para_test.set_assertion::(system_para_to_para_assets_assertions); - // TODO: Add assertions when Penpal is able to manage assets - system_para_test - .set_dispatchable::(system_para_to_para_limited_reserve_transfer_assets); - system_para_test.assert(); + // Sender's balance is reduced by exact amount + assert_eq!(sender_assets_before - asset_amount_to_send, sender_assets_after); + // Receiver's balance is increased by exact amount + assert_eq!(receiver_assets_after, receiver_assets_before + asset_amount_to_send); } diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/send.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/send.rs index bda9a3e69c4..4b98eeb0ed3 100644 --- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/send.rs +++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/send.rs @@ -33,7 +33,7 @@ fn send_transact_as_superuser_from_relay_to_system_para_works() { #[test] fn send_xcm_from_para_to_system_para_paying_fee_with_assets_works() { let para_sovereign_account = AssetHubWestend::sovereign_account_id_of( - AssetHubWestend::sibling_location_of(PenpalA::para_id()), + AssetHubWestend::sibling_location_of(PenpalB::para_id()), ); // Force create and mint assets for Parachain's sovereign account @@ -60,8 +60,8 @@ fn send_xcm_from_para_to_system_para_paying_fee_with_assets_works() { let native_asset = (X2(PalletInstance(ASSETS_PALLET_ID), GeneralIndex(ASSET_ID.into())), fee_amount).into(); - let root_origin = ::RuntimeOrigin::root(); - let system_para_destination = PenpalA::sibling_location_of(AssetHubWestend::para_id()).into(); + let root_origin = ::RuntimeOrigin::root(); + let system_para_destination = PenpalB::sibling_location_of(AssetHubWestend::para_id()).into(); let xcm = xcm_transact_paid_execution( call, origin_kind, @@ -69,14 +69,14 @@ fn send_xcm_from_para_to_system_para_paying_fee_with_assets_works() { para_sovereign_account.clone(), ); - PenpalA::execute_with(|| { - assert_ok!(::PolkadotXcm::send( + PenpalB::execute_with(|| { + assert_ok!(::PolkadotXcm::send( root_origin, bx!(system_para_destination), bx!(xcm), )); - PenpalA::assert_xcm_pallet_sent(); + PenpalB::assert_xcm_pallet_sent(); }); AssetHubWestend::execute_with(|| { diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/swap.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/swap.rs index a8e19f9ef4b..aca60f68802 100644 --- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/swap.rs +++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/swap.rs @@ -114,7 +114,7 @@ fn swap_locally_on_chain_using_foreign_assets() { let foreign_asset1_at_asset_hub_westend = Box::new(MultiLocation { parents: 1, interior: X3( - Parachain(PenpalA::para_id().into()), + Parachain(PenpalB::para_id().into()), PalletInstance(ASSETS_PALLET_ID), GeneralIndex(ASSET_ID.into()), ), @@ -125,18 +125,18 @@ fn swap_locally_on_chain_using_foreign_assets() { .into(); let penpal_location = - MultiLocation { parents: 1, interior: X1(Parachain(PenpalA::para_id().into())) }; + MultiLocation { parents: 1, interior: X1(Parachain(PenpalB::para_id().into())) }; // 1. Create asset on penpal: - PenpalA::execute_with(|| { - assert_ok!(::Assets::create( - ::RuntimeOrigin::signed(PenpalASender::get()), + PenpalB::execute_with(|| { + assert_ok!(::Assets::create( + ::RuntimeOrigin::signed(PenpalBSender::get()), ASSET_ID.into(), - PenpalASender::get().into(), + PenpalBSender::get().into(), 1000, )); - assert!(::Assets::asset_exists(ASSET_ID)); + assert!(::Assets::asset_exists(ASSET_ID)); }); // 2. Create foreign asset on asset_hub_westend: @@ -190,18 +190,18 @@ fn swap_locally_on_chain_using_foreign_assets() { ])); // Send XCM message from penpal => asset_hub_westend - let sudo_penpal_origin = ::RuntimeOrigin::root(); - PenpalA::execute_with(|| { - assert_ok!(::PolkadotXcm::send( + let sudo_penpal_origin = ::RuntimeOrigin::root(); + PenpalB::execute_with(|| { + assert_ok!(::PolkadotXcm::send( sudo_penpal_origin.clone(), bx!(assets_para_destination.clone()), bx!(xcm), )); - type RuntimeEvent = ::RuntimeEvent; + type RuntimeEvent = ::RuntimeEvent; assert_expected_events!( - PenpalA, + PenpalB, vec![ RuntimeEvent::PolkadotXcm(pallet_xcm::Event::Sent { .. }) => {}, ] diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/teleport.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/teleport.rs index d618cd2fe04..2c43bb9d801 100644 --- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/teleport.rs +++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/teleport.rs @@ -157,10 +157,12 @@ fn system_para_teleport_assets(t: SystemParaToRelayTest) -> DispatchResult { fn limited_teleport_native_assets_from_relay_to_system_para_works() { // Init values for Relay Chain let amount_to_send: Balance = WESTEND_ED * 1000; + let dest = Westend::child_location_of(AssetHubWestend::para_id()); + let beneficiary = AssetHubWestendReceiver::get(); let test_args = TestContext { sender: WestendSender::get(), - receiver: AssetHubWestendReceiver::get(), - args: relay_test_args(amount_to_send), + receiver: beneficiary.clone(), + args: relay_test_args(dest, beneficiary, amount_to_send), }; let mut test = RelayToSystemParaTest::new(test_args); @@ -204,7 +206,7 @@ fn limited_teleport_native_assets_back_from_system_para_to_relay_works() { let test_args = TestContext { sender: AssetHubWestendSender::get(), receiver: WestendReceiver::get(), - args: system_para_test_args(destination, beneficiary_id, amount_to_send, assets, None), + args: para_test_args(destination, beneficiary_id, amount_to_send, assets, None, 0), }; let mut test = SystemParaToRelayTest::new(test_args); @@ -245,7 +247,7 @@ fn limited_teleport_native_assets_from_system_para_to_relay_fails() { let test_args = TestContext { sender: AssetHubWestendSender::get(), receiver: WestendReceiver::get(), - args: system_para_test_args(destination, beneficiary_id, amount_to_send, assets, None), + args: para_test_args(destination, beneficiary_id, amount_to_send, assets, None, 0), }; let mut test = SystemParaToRelayTest::new(test_args); @@ -278,10 +280,12 @@ fn limited_teleport_native_assets_from_system_para_to_relay_fails() { fn teleport_native_assets_from_relay_to_system_para_works() { // Init values for Relay Chain let amount_to_send: Balance = WESTEND_ED * 1000; + let dest = Westend::child_location_of(AssetHubWestend::para_id()); + let beneficiary = AssetHubWestendReceiver::get(); let test_args = TestContext { sender: WestendSender::get(), - receiver: AssetHubWestendReceiver::get(), - args: relay_test_args(amount_to_send), + receiver: beneficiary.clone(), + args: relay_test_args(dest, beneficiary, amount_to_send), }; let mut test = RelayToSystemParaTest::new(test_args); @@ -325,7 +329,7 @@ fn teleport_native_assets_back_from_system_para_to_relay_works() { let test_args = TestContext { sender: AssetHubWestendSender::get(), receiver: WestendReceiver::get(), - args: system_para_test_args(destination, beneficiary_id, amount_to_send, assets, None), + args: para_test_args(destination, beneficiary_id, amount_to_send, assets, None, 0), }; let mut test = SystemParaToRelayTest::new(test_args); @@ -366,7 +370,7 @@ fn teleport_native_assets_from_system_para_to_relay_fails() { let test_args = TestContext { sender: AssetHubWestendSender::get(), receiver: WestendReceiver::get(), - args: system_para_test_args(destination, beneficiary_id, amount_to_send, assets, None), + args: para_test_args(destination, beneficiary_id, amount_to_send, assets, None, 0), }; let mut test = SystemParaToRelayTest::new(test_args); @@ -394,16 +398,15 @@ fn teleport_native_assets_from_system_para_to_relay_fails() { assert_eq!(receiver_balance_after, receiver_balance_before); } -// TODO: uncomment when CollectivesWestend and BridgeHubWestend are implemented -// https://github.com/paritytech/polkadot-sdk/pull/1737 (CollectivesWestend) -// #[test] -// fn teleport_to_other_system_parachains_works() { -// let amount = ASSET_HUB_WESTEND_ED * 100; -// let native_asset: VersionedMultiAssets = (Parent, amount).into(); - -// test_parachain_is_trusted_teleporter!( -// AssetHubWestend, // Origin -// vec![CollectivesWestend, BridgeHubWestend], // Destinations -// (native_asset, amount) -// ); -// } +#[test] +fn teleport_to_other_system_parachains_works() { + let amount = ASSET_HUB_WESTEND_ED * 100; + let native_asset: MultiAssets = (Parent, amount).into(); + + test_parachain_is_trusted_teleporter!( + AssetHubWestend, // Origin + AssetHubWestendXcmConfig, // XCM Configuration + vec![BridgeHubWestend], // Destinations + (native_asset, amount) + ); +} -- GitLab From fd1ed403c95e1802c2c1bbb5cc724bb645ff0d8b Mon Sep 17 00:00:00 2001 From: Vladimir Istyufeev Date: Mon, 27 Nov 2023 17:50:38 +0400 Subject: [PATCH 078/102] Remove the timestamp handler (#2506) --- .gitlab-ci.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f7e54961fa9..aada30f1dda 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -69,7 +69,6 @@ default: .common-before-script: before_script: - !reference [.job-switcher, before_script] - - !reference [.timestamp, before_script] - !reference [.pipeline-stopper-vars, script] .job-switcher: @@ -211,10 +210,6 @@ include: - .gitlab/pipeline/publish.yml # zombienet jobs - .gitlab/pipeline/zombienet.yml - # timestamp handler - - project: parity/infrastructure/ci_cd/shared - ref: v0.2 - file: /common/timestamp.yml # ci image - project: parity/infrastructure/ci_cd/shared ref: main -- GitLab From 838a534da874cf6071fba1df07643c6c5b033ae0 Mon Sep 17 00:00:00 2001 From: Ross Bulat Date: Mon, 27 Nov 2023 21:42:04 +0700 Subject: [PATCH 079/102] Staking: `chill_other` takes stash instead of controller (#2501) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `chill_other` call is the only staking call that explicitly requires `controller` in its signature. This PR changes the controller arg to be the stash instead, with `StakingLedger` then fetching the controller from storage. This is not a breaking change per se - the call types do not change, but is noteworthy as UIs will now want to pass the stash account into `chill_other` calls, & metadata will reflect this. Note: This is very low impact. `chill_other` has [hardly ever been used](https://polkadot.subscan.io/extrinsic?address=&module=staking&call=chill_other&result=all&signedChecked=signed%20only&startDate=&endDate=&startBlock=&timeType=date&version=9431&endBlock=) on Polkadot - notwithstanding the one called 11 days ago at block 18177457 that was a part of test I did, the last call was made 493 days ago. Only 2 calls have ever been successful. Addresses controller deprecation #2500 --------- Co-authored-by: command-bot <> Co-authored-by: Gonçalo Pestana --- substrate/frame/staking/src/benchmarking.rs | 2 +- substrate/frame/staking/src/pallet/mod.rs | 13 +- substrate/frame/staking/src/weights.rs | 382 ++++++++++---------- 3 files changed, 203 insertions(+), 194 deletions(-) diff --git a/substrate/frame/staking/src/benchmarking.rs b/substrate/frame/staking/src/benchmarking.rs index 6f60c4909f4..c0c6a838aa5 100644 --- a/substrate/frame/staking/src/benchmarking.rs +++ b/substrate/frame/staking/src/benchmarking.rs @@ -873,7 +873,7 @@ benchmarks! { )?; let caller = whitelisted_caller(); - }: _(RawOrigin::Signed(caller), controller) + }: _(RawOrigin::Signed(caller), stash.clone()) verify { assert!(!T::VoterList::contains(&stash)); } diff --git a/substrate/frame/staking/src/pallet/mod.rs b/substrate/frame/staking/src/pallet/mod.rs index 1f79ef63a47..ce80f22c2bb 100644 --- a/substrate/frame/staking/src/pallet/mod.rs +++ b/substrate/frame/staking/src/pallet/mod.rs @@ -1327,7 +1327,7 @@ pub mod pallet { // (temporary) passive migration. Self::ledger(StakingAccount::Stash(stash.clone())).map(|ledger| { let controller = ledger.controller() - .defensive_proof("ledger was fetched used the StakingInterface, so controller field must exist; qed.") + .defensive_proof("Ledger's controller field didn't exist. The controller should have been fetched using StakingLedger.") .ok_or(Error::::NotController)?; if controller == stash { @@ -1764,11 +1764,16 @@ pub mod pallet { /// who do not satisfy these requirements. #[pallet::call_index(23)] #[pallet::weight(T::WeightInfo::chill_other())] - pub fn chill_other(origin: OriginFor, controller: T::AccountId) -> DispatchResult { + pub fn chill_other(origin: OriginFor, stash: T::AccountId) -> DispatchResult { // Anyone can call this function. let caller = ensure_signed(origin)?; - let ledger = Self::ledger(Controller(controller.clone()))?; - let stash = ledger.stash; + let ledger = Self::ledger(Stash(stash.clone()))?; + let controller = ledger + .controller() + .defensive_proof( + "Ledger's controller field didn't exist. The controller should have been fetched using StakingLedger.", + ) + .ok_or(Error::::NotController)?; // In order for one user to chill another user, the following conditions must be met: // diff --git a/substrate/frame/staking/src/weights.rs b/substrate/frame/staking/src/weights.rs index ad9ca75a032..ae00509eaa8 100644 --- a/substrate/frame/staking/src/weights.rs +++ b/substrate/frame/staking/src/weights.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_staking` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-11-17, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-11-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` //! WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` @@ -98,8 +98,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `927` // Estimated: `4764` - // Minimum execution time: 43_427_000 picoseconds. - Weight::from_parts(45_221_000, 4764) + // Minimum execution time: 42_895_000 picoseconds. + Weight::from_parts(44_924_000, 4764) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -119,8 +119,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1990` // Estimated: `8877` - // Minimum execution time: 87_100_000 picoseconds. - Weight::from_parts(90_599_000, 8877) + // Minimum execution time: 87_734_000 picoseconds. + Weight::from_parts(90_762_000, 8877) .saturating_add(T::DbWeight::get().reads(9_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -146,8 +146,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2195` // Estimated: `8877` - // Minimum execution time: 91_488_000 picoseconds. - Weight::from_parts(94_126_000, 8877) + // Minimum execution time: 90_914_000 picoseconds. + Weight::from_parts(94_156_000, 8877) .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -166,10 +166,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1115` // Estimated: `4764` - // Minimum execution time: 42_713_000 picoseconds. - Weight::from_parts(44_530_499, 4764) - // Standard Error: 1_067 - .saturating_add(Weight::from_parts(51_411, 0).saturating_mul(s.into())) + // Minimum execution time: 43_141_000 picoseconds. + Weight::from_parts(45_081_969, 4764) + // Standard Error: 1_010 + .saturating_add(Weight::from_parts(39_539, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -206,10 +206,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2196 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 88_700_000 picoseconds. - Weight::from_parts(98_329_624, 6248) - // Standard Error: 4_477 - .saturating_add(Weight::from_parts(1_347_380, 0).saturating_mul(s.into())) + // Minimum execution time: 87_743_000 picoseconds. + Weight::from_parts(96_983_484, 6248) + // Standard Error: 4_271 + .saturating_add(Weight::from_parts(1_382_993, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(13_u64)) .saturating_add(T::DbWeight::get().writes(11_u64)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -241,8 +241,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1372` // Estimated: `4556` - // Minimum execution time: 51_877_000 picoseconds. - Weight::from_parts(53_503_000, 4556) + // Minimum execution time: 51_888_000 picoseconds. + Weight::from_parts(54_353_000, 4556) .saturating_add(T::DbWeight::get().reads(11_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -255,10 +255,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1280 + k * (569 ±0)` // Estimated: `4556 + k * (3033 ±0)` - // Minimum execution time: 29_604_000 picoseconds. - Weight::from_parts(31_726_296, 4556) - // Standard Error: 6_350 - .saturating_add(Weight::from_parts(6_416_846, 0).saturating_mul(k.into())) + // Minimum execution time: 28_944_000 picoseconds. + Weight::from_parts(31_116_533, 4556) + // Standard Error: 11_848 + .saturating_add(Weight::from_parts(6_422_601, 0).saturating_mul(k.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(k.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(k.into()))) @@ -291,10 +291,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1866 + n * (102 ±0)` // Estimated: `6248 + n * (2520 ±0)` - // Minimum execution time: 64_276_000 picoseconds. - Weight::from_parts(62_615_844, 6248) - // Standard Error: 14_914 - .saturating_add(Weight::from_parts(4_097_019, 0).saturating_mul(n.into())) + // Minimum execution time: 63_921_000 picoseconds. + Weight::from_parts(62_662_863, 6248) + // Standard Error: 15_071 + .saturating_add(Weight::from_parts(3_950_084, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(6_u64)) @@ -318,8 +318,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1650` // Estimated: `6248` - // Minimum execution time: 55_064_000 picoseconds. - Weight::from_parts(56_566_000, 6248) + // Minimum execution time: 54_605_000 picoseconds. + Weight::from_parts(56_406_000, 6248) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } @@ -333,8 +333,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `902` // Estimated: `4556` - // Minimum execution time: 16_626_000 picoseconds. - Weight::from_parts(17_519_000, 4556) + // Minimum execution time: 16_826_000 picoseconds. + Weight::from_parts(17_326_000, 4556) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -348,8 +348,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `969` // Estimated: `4556` - // Minimum execution time: 20_545_000 picoseconds. - Weight::from_parts(21_395_000, 4556) + // Minimum execution time: 20_831_000 picoseconds. + Weight::from_parts(21_615_000, 4556) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -361,8 +361,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `902` // Estimated: `4556` - // Minimum execution time: 20_179_000 picoseconds. - Weight::from_parts(20_728_000, 4556) + // Minimum execution time: 20_190_000 picoseconds. + Weight::from_parts(20_993_000, 4556) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -372,8 +372,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_594_000 picoseconds. - Weight::from_parts(2_777_000, 0) + // Minimum execution time: 2_603_000 picoseconds. + Weight::from_parts(2_747_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `Staking::ForceEra` (r:0 w:1) @@ -382,8 +382,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_302_000 picoseconds. - Weight::from_parts(8_741_000, 0) + // Minimum execution time: 8_070_000 picoseconds. + Weight::from_parts(8_745_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `Staking::ForceEra` (r:0 w:1) @@ -392,8 +392,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_504_000 picoseconds. - Weight::from_parts(8_774_000, 0) + // Minimum execution time: 7_999_000 picoseconds. + Weight::from_parts(8_624_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `Staking::ForceEra` (r:0 w:1) @@ -402,8 +402,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_474_000 picoseconds. - Weight::from_parts(8_740_000, 0) + // Minimum execution time: 8_131_000 picoseconds. + Weight::from_parts(8_467_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `Staking::Invulnerables` (r:0 w:1) @@ -413,10 +413,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_732_000 picoseconds. - Weight::from_parts(3_360_048, 0) - // Standard Error: 34 - .saturating_add(Weight::from_parts(9_964, 0).saturating_mul(v.into())) + // Minimum execution time: 2_731_000 picoseconds. + Weight::from_parts(3_298_421, 0) + // Standard Error: 31 + .saturating_add(Weight::from_parts(10_075, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `Staking::SlashingSpans` (r:1 w:1) @@ -452,10 +452,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2196 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 87_495_000 picoseconds. - Weight::from_parts(95_710_388, 6248) - // Standard Error: 5_849 - .saturating_add(Weight::from_parts(1_339_335, 0).saturating_mul(s.into())) + // Minimum execution time: 86_305_000 picoseconds. + Weight::from_parts(94_494_401, 6248) + // Standard Error: 3_602 + .saturating_add(Weight::from_parts(1_339_477, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(13_u64)) .saturating_add(T::DbWeight::get().writes(12_u64)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -468,10 +468,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `66672` // Estimated: `70137` - // Minimum execution time: 98_255_000 picoseconds. - Weight::from_parts(892_807_378, 70137) - // Standard Error: 57_735 - .saturating_add(Weight::from_parts(4_876_449, 0).saturating_mul(s.into())) + // Minimum execution time: 100_007_000 picoseconds. + Weight::from_parts(894_033_025, 70137) + // Standard Error: 57_584 + .saturating_add(Weight::from_parts(4_870_504, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -507,11 +507,11 @@ impl WeightInfo for SubstrateWeight { fn payout_stakers_alive_staked(n: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `33297 + n * (377 ±0)` - // Estimated: `30944 + n * (3774 ±3)` - // Minimum execution time: 144_258_000 picoseconds. - Weight::from_parts(175_256_796, 30944) - // Standard Error: 24_339 - .saturating_add(Weight::from_parts(46_011_700, 0).saturating_mul(n.into())) + // Estimated: `30944 + n * (3774 ±0)` + // Minimum execution time: 142_575_000 picoseconds. + Weight::from_parts(196_320_577, 30944) + // Standard Error: 29_330 + .saturating_add(Weight::from_parts(45_325_062, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(14_u64)) .saturating_add(T::DbWeight::get().reads((6_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(4_u64)) @@ -535,10 +535,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1991 + l * (7 ±0)` // Estimated: `8877` - // Minimum execution time: 83_532_000 picoseconds. - Weight::from_parts(86_757_943, 8877) - // Standard Error: 6_379 - .saturating_add(Weight::from_parts(57_566, 0).saturating_mul(l.into())) + // Minimum execution time: 81_113_000 picoseconds. + Weight::from_parts(84_470_927, 8877) + // Standard Error: 5_588 + .saturating_add(Weight::from_parts(97_606, 0).saturating_mul(l.into())) .saturating_add(T::DbWeight::get().reads(9_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -573,10 +573,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2196 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 96_776_000 picoseconds. - Weight::from_parts(100_950_027, 6248) - // Standard Error: 4_719 - .saturating_add(Weight::from_parts(1_432_091, 0).saturating_mul(s.into())) + // Minimum execution time: 94_810_000 picoseconds. + Weight::from_parts(99_292_156, 6248) + // Standard Error: 3_677 + .saturating_add(Weight::from_parts(1_345_598, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().writes(11_u64)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -621,13 +621,13 @@ impl WeightInfo for SubstrateWeight { fn new_era(v: u32, n: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `0 + n * (720 ±0) + v * (3598 ±0)` - // Estimated: `512390 + n * (3566 ±0) + v * (3566 ±0)` - // Minimum execution time: 577_699_000 picoseconds. - Weight::from_parts(582_827_000, 512390) - // Standard Error: 2_000_851 - .saturating_add(Weight::from_parts(67_316_744, 0).saturating_mul(v.into())) - // Standard Error: 199_373 - .saturating_add(Weight::from_parts(18_503_387, 0).saturating_mul(n.into())) + // Estimated: `512390 + n * (3566 ±4) + v * (3566 ±40)` + // Minimum execution time: 583_230_000 picoseconds. + Weight::from_parts(585_794_000, 512390) + // Standard Error: 1_984_644 + .saturating_add(Weight::from_parts(65_914_551, 0).saturating_mul(v.into())) + // Standard Error: 197_758 + .saturating_add(Weight::from_parts(18_105_424, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(206_u64)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) @@ -658,12 +658,12 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `3175 + n * (911 ±0) + v * (395 ±0)` // Estimated: `512390 + n * (3566 ±0) + v * (3566 ±0)` - // Minimum execution time: 34_048_778_000 picoseconds. - Weight::from_parts(34_397_777_000, 512390) - // Standard Error: 346_115 - .saturating_add(Weight::from_parts(3_704_941, 0).saturating_mul(v.into())) - // Standard Error: 346_115 - .saturating_add(Weight::from_parts(4_064_819, 0).saturating_mul(n.into())) + // Minimum execution time: 33_312_958_000 picoseconds. + Weight::from_parts(4_949_866_209, 512390) + // Standard Error: 402_931 + .saturating_add(Weight::from_parts(16_448_367, 0).saturating_mul(v.into())) + // Standard Error: 402_931 + .saturating_add(Weight::from_parts(25_361_503, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(201_u64)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) @@ -680,10 +680,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `979 + v * (50 ±0)` // Estimated: `3510 + v * (2520 ±0)` - // Minimum execution time: 2_473_149_000 picoseconds. - Weight::from_parts(84_721_859, 3510) - // Standard Error: 8_690 - .saturating_add(Weight::from_parts(4_870_439, 0).saturating_mul(v.into())) + // Minimum execution time: 2_474_646_000 picoseconds. + Weight::from_parts(2_512_113_000, 3510) + // Standard Error: 33_996 + .saturating_add(Weight::from_parts(1_992_173, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(v.into()))) .saturating_add(Weight::from_parts(0, 2520).saturating_mul(v.into())) @@ -704,8 +704,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_312_000 picoseconds. - Weight::from_parts(5_897_000, 0) + // Minimum execution time: 5_466_000 picoseconds. + Weight::from_parts(5_861_000, 0) .saturating_add(T::DbWeight::get().writes(6_u64)) } /// Storage: `Staking::MinCommission` (r:0 w:1) @@ -724,10 +724,12 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_676_000 picoseconds. - Weight::from_parts(4_913_000, 0) + // Minimum execution time: 4_780_000 picoseconds. + Weight::from_parts(4_998_000, 0) .saturating_add(T::DbWeight::get().writes(6_u64)) } + /// Storage: `Staking::Bonded` (r:1 w:0) + /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:0) /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) /// Storage: `Staking::Nominators` (r:1 w:1) @@ -750,11 +752,11 @@ impl WeightInfo for SubstrateWeight { /// Proof: `VoterList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn chill_other() -> Weight { // Proof Size summary in bytes: - // Measured: `1773` + // Measured: `1939` // Estimated: `6248` - // Minimum execution time: 67_286_000 picoseconds. - Weight::from_parts(69_081_000, 6248) - .saturating_add(T::DbWeight::get().reads(11_u64)) + // Minimum execution time: 71_261_000 picoseconds. + Weight::from_parts(72_778_000, 6248) + .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } /// Storage: `Staking::MinCommission` (r:1 w:0) @@ -765,8 +767,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `691` // Estimated: `3510` - // Minimum execution time: 12_749_000 picoseconds. - Weight::from_parts(13_275_000, 3510) + // Minimum execution time: 12_497_000 picoseconds. + Weight::from_parts(13_049_000, 3510) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -776,8 +778,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_155_000 picoseconds. - Weight::from_parts(3_319_000, 0) + // Minimum execution time: 3_044_000 picoseconds. + Weight::from_parts(3_278_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } } @@ -798,8 +800,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `927` // Estimated: `4764` - // Minimum execution time: 43_427_000 picoseconds. - Weight::from_parts(45_221_000, 4764) + // Minimum execution time: 42_895_000 picoseconds. + Weight::from_parts(44_924_000, 4764) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } @@ -819,8 +821,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1990` // Estimated: `8877` - // Minimum execution time: 87_100_000 picoseconds. - Weight::from_parts(90_599_000, 8877) + // Minimum execution time: 87_734_000 picoseconds. + Weight::from_parts(90_762_000, 8877) .saturating_add(RocksDbWeight::get().reads(9_u64)) .saturating_add(RocksDbWeight::get().writes(7_u64)) } @@ -846,8 +848,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2195` // Estimated: `8877` - // Minimum execution time: 91_488_000 picoseconds. - Weight::from_parts(94_126_000, 8877) + // Minimum execution time: 90_914_000 picoseconds. + Weight::from_parts(94_156_000, 8877) .saturating_add(RocksDbWeight::get().reads(12_u64)) .saturating_add(RocksDbWeight::get().writes(7_u64)) } @@ -866,10 +868,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1115` // Estimated: `4764` - // Minimum execution time: 42_713_000 picoseconds. - Weight::from_parts(44_530_499, 4764) - // Standard Error: 1_067 - .saturating_add(Weight::from_parts(51_411, 0).saturating_mul(s.into())) + // Minimum execution time: 43_141_000 picoseconds. + Weight::from_parts(45_081_969, 4764) + // Standard Error: 1_010 + .saturating_add(Weight::from_parts(39_539, 0).saturating_mul(s.into())) .saturating_add(RocksDbWeight::get().reads(5_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -906,10 +908,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2196 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 88_700_000 picoseconds. - Weight::from_parts(98_329_624, 6248) - // Standard Error: 4_477 - .saturating_add(Weight::from_parts(1_347_380, 0).saturating_mul(s.into())) + // Minimum execution time: 87_743_000 picoseconds. + Weight::from_parts(96_983_484, 6248) + // Standard Error: 4_271 + .saturating_add(Weight::from_parts(1_382_993, 0).saturating_mul(s.into())) .saturating_add(RocksDbWeight::get().reads(13_u64)) .saturating_add(RocksDbWeight::get().writes(11_u64)) .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -941,8 +943,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1372` // Estimated: `4556` - // Minimum execution time: 51_877_000 picoseconds. - Weight::from_parts(53_503_000, 4556) + // Minimum execution time: 51_888_000 picoseconds. + Weight::from_parts(54_353_000, 4556) .saturating_add(RocksDbWeight::get().reads(11_u64)) .saturating_add(RocksDbWeight::get().writes(5_u64)) } @@ -955,10 +957,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1280 + k * (569 ±0)` // Estimated: `4556 + k * (3033 ±0)` - // Minimum execution time: 29_604_000 picoseconds. - Weight::from_parts(31_726_296, 4556) - // Standard Error: 6_350 - .saturating_add(Weight::from_parts(6_416_846, 0).saturating_mul(k.into())) + // Minimum execution time: 28_944_000 picoseconds. + Weight::from_parts(31_116_533, 4556) + // Standard Error: 11_848 + .saturating_add(Weight::from_parts(6_422_601, 0).saturating_mul(k.into())) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(k.into()))) .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(k.into()))) @@ -991,10 +993,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1866 + n * (102 ±0)` // Estimated: `6248 + n * (2520 ±0)` - // Minimum execution time: 64_276_000 picoseconds. - Weight::from_parts(62_615_844, 6248) - // Standard Error: 14_914 - .saturating_add(Weight::from_parts(4_097_019, 0).saturating_mul(n.into())) + // Minimum execution time: 63_921_000 picoseconds. + Weight::from_parts(62_662_863, 6248) + // Standard Error: 15_071 + .saturating_add(Weight::from_parts(3_950_084, 0).saturating_mul(n.into())) .saturating_add(RocksDbWeight::get().reads(12_u64)) .saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(RocksDbWeight::get().writes(6_u64)) @@ -1018,8 +1020,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1650` // Estimated: `6248` - // Minimum execution time: 55_064_000 picoseconds. - Weight::from_parts(56_566_000, 6248) + // Minimum execution time: 54_605_000 picoseconds. + Weight::from_parts(56_406_000, 6248) .saturating_add(RocksDbWeight::get().reads(8_u64)) .saturating_add(RocksDbWeight::get().writes(6_u64)) } @@ -1033,8 +1035,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `902` // Estimated: `4556` - // Minimum execution time: 16_626_000 picoseconds. - Weight::from_parts(17_519_000, 4556) + // Minimum execution time: 16_826_000 picoseconds. + Weight::from_parts(17_326_000, 4556) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -1048,8 +1050,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `969` // Estimated: `4556` - // Minimum execution time: 20_545_000 picoseconds. - Weight::from_parts(21_395_000, 4556) + // Minimum execution time: 20_831_000 picoseconds. + Weight::from_parts(21_615_000, 4556) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -1061,8 +1063,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `902` // Estimated: `4556` - // Minimum execution time: 20_179_000 picoseconds. - Weight::from_parts(20_728_000, 4556) + // Minimum execution time: 20_190_000 picoseconds. + Weight::from_parts(20_993_000, 4556) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } @@ -1072,8 +1074,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_594_000 picoseconds. - Weight::from_parts(2_777_000, 0) + // Minimum execution time: 2_603_000 picoseconds. + Weight::from_parts(2_747_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `Staking::ForceEra` (r:0 w:1) @@ -1082,8 +1084,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_302_000 picoseconds. - Weight::from_parts(8_741_000, 0) + // Minimum execution time: 8_070_000 picoseconds. + Weight::from_parts(8_745_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `Staking::ForceEra` (r:0 w:1) @@ -1092,8 +1094,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_504_000 picoseconds. - Weight::from_parts(8_774_000, 0) + // Minimum execution time: 7_999_000 picoseconds. + Weight::from_parts(8_624_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `Staking::ForceEra` (r:0 w:1) @@ -1102,8 +1104,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_474_000 picoseconds. - Weight::from_parts(8_740_000, 0) + // Minimum execution time: 8_131_000 picoseconds. + Weight::from_parts(8_467_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `Staking::Invulnerables` (r:0 w:1) @@ -1113,10 +1115,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_732_000 picoseconds. - Weight::from_parts(3_360_048, 0) - // Standard Error: 34 - .saturating_add(Weight::from_parts(9_964, 0).saturating_mul(v.into())) + // Minimum execution time: 2_731_000 picoseconds. + Weight::from_parts(3_298_421, 0) + // Standard Error: 31 + .saturating_add(Weight::from_parts(10_075, 0).saturating_mul(v.into())) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `Staking::SlashingSpans` (r:1 w:1) @@ -1152,10 +1154,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2196 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 87_495_000 picoseconds. - Weight::from_parts(95_710_388, 6248) - // Standard Error: 5_849 - .saturating_add(Weight::from_parts(1_339_335, 0).saturating_mul(s.into())) + // Minimum execution time: 86_305_000 picoseconds. + Weight::from_parts(94_494_401, 6248) + // Standard Error: 3_602 + .saturating_add(Weight::from_parts(1_339_477, 0).saturating_mul(s.into())) .saturating_add(RocksDbWeight::get().reads(13_u64)) .saturating_add(RocksDbWeight::get().writes(12_u64)) .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -1168,10 +1170,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `66672` // Estimated: `70137` - // Minimum execution time: 98_255_000 picoseconds. - Weight::from_parts(892_807_378, 70137) - // Standard Error: 57_735 - .saturating_add(Weight::from_parts(4_876_449, 0).saturating_mul(s.into())) + // Minimum execution time: 100_007_000 picoseconds. + Weight::from_parts(894_033_025, 70137) + // Standard Error: 57_584 + .saturating_add(Weight::from_parts(4_870_504, 0).saturating_mul(s.into())) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -1207,11 +1209,11 @@ impl WeightInfo for () { fn payout_stakers_alive_staked(n: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `33297 + n * (377 ±0)` - // Estimated: `30944 + n * (3774 ±3)` - // Minimum execution time: 144_258_000 picoseconds. - Weight::from_parts(175_256_796, 30944) - // Standard Error: 24_339 - .saturating_add(Weight::from_parts(46_011_700, 0).saturating_mul(n.into())) + // Estimated: `30944 + n * (3774 ±0)` + // Minimum execution time: 142_575_000 picoseconds. + Weight::from_parts(196_320_577, 30944) + // Standard Error: 29_330 + .saturating_add(Weight::from_parts(45_325_062, 0).saturating_mul(n.into())) .saturating_add(RocksDbWeight::get().reads(14_u64)) .saturating_add(RocksDbWeight::get().reads((6_u64).saturating_mul(n.into()))) .saturating_add(RocksDbWeight::get().writes(4_u64)) @@ -1235,10 +1237,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1991 + l * (7 ±0)` // Estimated: `8877` - // Minimum execution time: 83_532_000 picoseconds. - Weight::from_parts(86_757_943, 8877) - // Standard Error: 6_379 - .saturating_add(Weight::from_parts(57_566, 0).saturating_mul(l.into())) + // Minimum execution time: 81_113_000 picoseconds. + Weight::from_parts(84_470_927, 8877) + // Standard Error: 5_588 + .saturating_add(Weight::from_parts(97_606, 0).saturating_mul(l.into())) .saturating_add(RocksDbWeight::get().reads(9_u64)) .saturating_add(RocksDbWeight::get().writes(7_u64)) } @@ -1273,10 +1275,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2196 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 96_776_000 picoseconds. - Weight::from_parts(100_950_027, 6248) - // Standard Error: 4_719 - .saturating_add(Weight::from_parts(1_432_091, 0).saturating_mul(s.into())) + // Minimum execution time: 94_810_000 picoseconds. + Weight::from_parts(99_292_156, 6248) + // Standard Error: 3_677 + .saturating_add(Weight::from_parts(1_345_598, 0).saturating_mul(s.into())) .saturating_add(RocksDbWeight::get().reads(12_u64)) .saturating_add(RocksDbWeight::get().writes(11_u64)) .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -1321,13 +1323,13 @@ impl WeightInfo for () { fn new_era(v: u32, n: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `0 + n * (720 ±0) + v * (3598 ±0)` - // Estimated: `512390 + n * (3566 ±0) + v * (3566 ±0)` - // Minimum execution time: 577_699_000 picoseconds. - Weight::from_parts(582_827_000, 512390) - // Standard Error: 2_000_851 - .saturating_add(Weight::from_parts(67_316_744, 0).saturating_mul(v.into())) - // Standard Error: 199_373 - .saturating_add(Weight::from_parts(18_503_387, 0).saturating_mul(n.into())) + // Estimated: `512390 + n * (3566 ±4) + v * (3566 ±40)` + // Minimum execution time: 583_230_000 picoseconds. + Weight::from_parts(585_794_000, 512390) + // Standard Error: 1_984_644 + .saturating_add(Weight::from_parts(65_914_551, 0).saturating_mul(v.into())) + // Standard Error: 197_758 + .saturating_add(Weight::from_parts(18_105_424, 0).saturating_mul(n.into())) .saturating_add(RocksDbWeight::get().reads(206_u64)) .saturating_add(RocksDbWeight::get().reads((5_u64).saturating_mul(v.into()))) .saturating_add(RocksDbWeight::get().reads((4_u64).saturating_mul(n.into()))) @@ -1358,12 +1360,12 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `3175 + n * (911 ±0) + v * (395 ±0)` // Estimated: `512390 + n * (3566 ±0) + v * (3566 ±0)` - // Minimum execution time: 34_048_778_000 picoseconds. - Weight::from_parts(34_397_777_000, 512390) - // Standard Error: 346_115 - .saturating_add(Weight::from_parts(3_704_941, 0).saturating_mul(v.into())) - // Standard Error: 346_115 - .saturating_add(Weight::from_parts(4_064_819, 0).saturating_mul(n.into())) + // Minimum execution time: 33_312_958_000 picoseconds. + Weight::from_parts(4_949_866_209, 512390) + // Standard Error: 402_931 + .saturating_add(Weight::from_parts(16_448_367, 0).saturating_mul(v.into())) + // Standard Error: 402_931 + .saturating_add(Weight::from_parts(25_361_503, 0).saturating_mul(n.into())) .saturating_add(RocksDbWeight::get().reads(201_u64)) .saturating_add(RocksDbWeight::get().reads((5_u64).saturating_mul(v.into()))) .saturating_add(RocksDbWeight::get().reads((4_u64).saturating_mul(n.into()))) @@ -1380,10 +1382,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `979 + v * (50 ±0)` // Estimated: `3510 + v * (2520 ±0)` - // Minimum execution time: 2_473_149_000 picoseconds. - Weight::from_parts(84_721_859, 3510) - // Standard Error: 8_690 - .saturating_add(Weight::from_parts(4_870_439, 0).saturating_mul(v.into())) + // Minimum execution time: 2_474_646_000 picoseconds. + Weight::from_parts(2_512_113_000, 3510) + // Standard Error: 33_996 + .saturating_add(Weight::from_parts(1_992_173, 0).saturating_mul(v.into())) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(v.into()))) .saturating_add(Weight::from_parts(0, 2520).saturating_mul(v.into())) @@ -1404,8 +1406,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_312_000 picoseconds. - Weight::from_parts(5_897_000, 0) + // Minimum execution time: 5_466_000 picoseconds. + Weight::from_parts(5_861_000, 0) .saturating_add(RocksDbWeight::get().writes(6_u64)) } /// Storage: `Staking::MinCommission` (r:0 w:1) @@ -1424,10 +1426,12 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_676_000 picoseconds. - Weight::from_parts(4_913_000, 0) + // Minimum execution time: 4_780_000 picoseconds. + Weight::from_parts(4_998_000, 0) .saturating_add(RocksDbWeight::get().writes(6_u64)) } + /// Storage: `Staking::Bonded` (r:1 w:0) + /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:0) /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) /// Storage: `Staking::Nominators` (r:1 w:1) @@ -1450,11 +1454,11 @@ impl WeightInfo for () { /// Proof: `VoterList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn chill_other() -> Weight { // Proof Size summary in bytes: - // Measured: `1773` + // Measured: `1939` // Estimated: `6248` - // Minimum execution time: 67_286_000 picoseconds. - Weight::from_parts(69_081_000, 6248) - .saturating_add(RocksDbWeight::get().reads(11_u64)) + // Minimum execution time: 71_261_000 picoseconds. + Weight::from_parts(72_778_000, 6248) + .saturating_add(RocksDbWeight::get().reads(12_u64)) .saturating_add(RocksDbWeight::get().writes(6_u64)) } /// Storage: `Staking::MinCommission` (r:1 w:0) @@ -1465,8 +1469,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `691` // Estimated: `3510` - // Minimum execution time: 12_749_000 picoseconds. - Weight::from_parts(13_275_000, 3510) + // Minimum execution time: 12_497_000 picoseconds. + Weight::from_parts(13_049_000, 3510) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -1476,8 +1480,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_155_000 picoseconds. - Weight::from_parts(3_319_000, 0) + // Minimum execution time: 3_044_000 picoseconds. + Weight::from_parts(3_278_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } } -- GitLab From db290997651dae8615be706efdd74f0ab0db52ee Mon Sep 17 00:00:00 2001 From: Liam Aharon Date: Tue, 28 Nov 2023 09:42:14 +0400 Subject: [PATCH 080/102] CI: Fix `build-and-attach-release-runtimes.yml` (#2471) Incorporate suggestion from release team to get this workflow working. edit: worked on this test GH release: https://github.com/paritytech/polkadot-sdk/releases/tag/liam-debug-ghw. let's try it. --- .github/workflows/build-and-attach-release-runtimes.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/workflows/build-and-attach-release-runtimes.yml b/.github/workflows/build-and-attach-release-runtimes.yml index db0175c6855..8e0a5ba04b4 100644 --- a/.github/workflows/build-and-attach-release-runtimes.yml +++ b/.github/workflows/build-and-attach-release-runtimes.yml @@ -3,7 +3,7 @@ name: Build and Attach Runtimes to Releases/RC on: release: types: - - created + - published env: PROFILE: production @@ -44,12 +44,6 @@ jobs: runtime_dir: ${{ matrix.runtime.path }} profile: ${{ env.PROFILE }} - - name: Build Summary - run: | - echo "${{ steps.srtool_build.outputs.json }}" | jq . > ${{ matrix.runtime.name }}-srtool-digest.json - cat ${{ matrix.runtime.name }}-srtool-digest.json - echo "Runtime location: ${{ steps.srtool_build.outputs.wasm }}" - - name: Set up paths and runtime names id: setup run: | -- GitLab From 2ac23d247d2d81e6f67116a1696beaf189192b78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Pestana?= Date: Tue, 28 Nov 2023 08:11:46 +0100 Subject: [PATCH 081/102] Fixes cumulus README instructions (#2442) README instructions fixes to be compatible with the `polkadot-prepare` and `polkadot-execute` binary split. --- cumulus/README.md | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/cumulus/README.md b/cumulus/README.md index 19f9f3f113d..6acbf6dc2ca 100644 --- a/cumulus/README.md +++ b/cumulus/README.md @@ -142,8 +142,8 @@ zombienet --provider native spawn ./zombienet/examples/small_network.toml # Clone git clone https://github.com/paritytech/polkadot-sdk -# Compile Polkadot -cargo build --release --bin polkadot +# Compile Polkadot's required binaries +cargo build --release -p polkadot # Generate a raw chain spec ./target/release/polkadot build-spec --chain rococo-local --disable-default-bootnode --raw > rococo-local-cfde.json @@ -158,11 +158,8 @@ cargo build --release --bin polkadot #### Launch the Parachain ```bash -# Clone -git clone https://github.com/paritytech/polkadot-sdk - # Compile -cargo build --release --bin polkadot-parachain +cargo build --release -p polkadot-parachain-bin # Export genesis state ./target/release/polkadot-parachain export-genesis-state > genesis-state @@ -172,15 +169,15 @@ cargo build --release --bin polkadot-parachain # Collator1 ./target/release/polkadot-parachain --collator --alice --force-authoring \ - --tmp --port 40335 --rpc-port 9946 -- --chain ../polkadot/rococo-local-cfde.json --port 30335 + --tmp --port 40335 --rpc-port 9946 -- --chain rococo-local-cfde.json --port 30335 # Collator2 ./target/release/polkadot-parachain --collator --bob --force-authoring \ - --tmp --port 40336 --rpc-port 9947 -- --chain ../polkadot/rococo-local-cfde.json --port 30336 + --tmp --port 40336 --rpc-port 9947 -- --chain rococo-local-cfde.json --port 30336 # Parachain Full Node 1 ./target/release/polkadot-parachain --tmp --port 40337 --rpc-port 9948 -- \ - --chain ../polkadot/rococo-local-cfde.json --port 30337 + --chain rococo-local-cfde.json --port 30337 ``` #### Register the parachain -- GitLab From 75062717de9f3dbe741d058309600c864cc603c3 Mon Sep 17 00:00:00 2001 From: Ross Bulat Date: Tue, 28 Nov 2023 14:19:49 +0700 Subject: [PATCH 082/102] Pools: Add ability to configure commission claiming permissions (#2474) Addresses #409. This request has been raised by multiple community members - the ability for the nomination pool root role to configure permissionless commission claiming: > Would it be possible to have a claim_commission_other extrinsic for claiming commission of nomination pools permissionless? This PR does not quite introduce this additional call, but amends `do_claim_commission` to check a new `claim_permission` field in the `Commission` struct, configured by an enum: ``` enum CommissionClaimPermission { Permissionless, Account(AccountId), } ``` This can be optionally set in a bonded pool's `commission.claim_permission` field: ``` struct BondedPool { commission: { claim_permission: Option>, }, } ``` This is a new field and requires a migration to add it to existing pools. This will be `None` on pool creation, falling back to the `root` role having sole access to claim commission if it is not set; this is the behaviour as it is today. Once set, the field _can_ be set to `None` again. #### Changes - [x] Add `commision.claim_permission` field. - [x] Add `can_claim_commission` and amend `do_claim_commission`. - [x] Add `set_commission_claim_permission` call. - [x] Test to cover new configs and call. - [x] Add and amend benchmarks. - [x] Generate new weights + slot into call `set_commission_claim_permission`. - [x] Add migration to introduce `commission.claim_permission`, bump storage version. - [x] Update Westend weights. - [x] Migration working. --------- Co-authored-by: command-bot <> --- polkadot/runtime/westend/src/lib.rs | 3 +- .../src/weights/pallet_nomination_pools.rs | 276 ++++----- .../nomination-pools/benchmarking/src/lib.rs | 41 +- substrate/frame/nomination-pools/src/lib.rs | 58 +- .../frame/nomination-pools/src/migration.rs | 77 +++ substrate/frame/nomination-pools/src/tests.rs | 211 ++++++- .../frame/nomination-pools/src/weights.rs | 523 ++++++++++-------- 7 files changed, 796 insertions(+), 393 deletions(-) diff --git a/polkadot/runtime/westend/src/lib.rs b/polkadot/runtime/westend/src/lib.rs index 6bbdb2db098..bb6331e9534 100644 --- a/polkadot/runtime/westend/src/lib.rs +++ b/polkadot/runtime/westend/src/lib.rs @@ -1533,11 +1533,10 @@ pub mod migrations { parachains_configuration::migration::v8::MigrateToV8, parachains_configuration::migration::v9::MigrateToV9, paras_registrar::migration::MigrateToV1, - pallet_nomination_pools::migration::versioned::V5toV6, pallet_referenda::migration::v1::MigrateV0ToV1, - pallet_nomination_pools::migration::versioned::V6ToV7, pallet_grandpa::migrations::MigrateV4ToV5, parachains_configuration::migration::v10::MigrateToV10, + pallet_nomination_pools::migration::versioned::V7ToV8, ); } diff --git a/polkadot/runtime/westend/src/weights/pallet_nomination_pools.rs b/polkadot/runtime/westend/src/weights/pallet_nomination_pools.rs index 49bc687a3e4..6aa5ddd1ec8 100644 --- a/polkadot/runtime/westend/src/weights/pallet_nomination_pools.rs +++ b/polkadot/runtime/westend/src/weights/pallet_nomination_pools.rs @@ -17,9 +17,9 @@ //! Autogenerated weights for `pallet_nomination_pools` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-09-22, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-11-24, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-nbnwcyh-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` +//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` //! WASM-EXECUTION: `Compiled`, CHAIN: `Some("westend-dev")`, DB CACHE: 1024 // Executed Command: @@ -53,7 +53,7 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(717), added: 3192, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:1) @@ -78,20 +78,22 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:2 w:2) /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn join() -> Weight { // Proof Size summary in bytes: - // Measured: `3318` + // Measured: `3355` // Estimated: `8877` - // Minimum execution time: 187_795_000 picoseconds. - Weight::from_parts(193_857_000, 0) + // Minimum execution time: 173_707_000 picoseconds. + Weight::from_parts(179_920_000, 0) .saturating_add(Weight::from_parts(0, 8877)) - .saturating_add(T::DbWeight::get().reads(19)) - .saturating_add(T::DbWeight::get().writes(12)) + .saturating_add(T::DbWeight::get().reads(20)) + .saturating_add(T::DbWeight::get().writes(13)) } /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(717), added: 3192, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) @@ -110,22 +112,24 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:2 w:2) /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn bond_extra_transfer() -> Weight { // Proof Size summary in bytes: - // Measured: `3328` + // Measured: `3365` // Estimated: `8877` - // Minimum execution time: 186_245_000 picoseconds. - Weight::from_parts(190_916_000, 0) + // Minimum execution time: 174_414_000 picoseconds. + Weight::from_parts(178_068_000, 0) .saturating_add(Weight::from_parts(0, 8877)) - .saturating_add(T::DbWeight::get().reads(16)) - .saturating_add(T::DbWeight::get().writes(12)) + .saturating_add(T::DbWeight::get().reads(17)) + .saturating_add(T::DbWeight::get().writes(13)) } /// Storage: `NominationPools::ClaimPermissions` (r:1 w:0) /// Proof: `NominationPools::ClaimPermissions` (`max_values`: None, `max_size`: Some(41), added: 2516, mode: `MaxEncodedLen`) /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(717), added: 3192, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) @@ -144,22 +148,24 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:2 w:2) /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn bond_extra_other() -> Weight { // Proof Size summary in bytes: - // Measured: `3274` + // Measured: `3312` // Estimated: `8799` - // Minimum execution time: 217_918_000 picoseconds. - Weight::from_parts(224_772_000, 0) + // Minimum execution time: 198_864_000 picoseconds. + Weight::from_parts(203_783_000, 0) .saturating_add(Weight::from_parts(0, 8799)) - .saturating_add(T::DbWeight::get().reads(16)) - .saturating_add(T::DbWeight::get().writes(12)) + .saturating_add(T::DbWeight::get().reads(17)) + .saturating_add(T::DbWeight::get().writes(13)) } /// Storage: `NominationPools::ClaimPermissions` (r:1 w:0) /// Proof: `NominationPools::ClaimPermissions` (`max_values`: None, `max_size`: Some(41), added: 2516, mode: `MaxEncodedLen`) /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(717), added: 3192, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) @@ -168,10 +174,10 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn claim_payout() -> Weight { // Proof Size summary in bytes: - // Measured: `1137` + // Measured: `1138` // Estimated: `4182` - // Minimum execution time: 76_958_000 picoseconds. - Weight::from_parts(78_278_000, 0) + // Minimum execution time: 70_250_000 picoseconds. + Weight::from_parts(72_231_000, 0) .saturating_add(Weight::from_parts(0, 4182)) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(4)) @@ -179,7 +185,7 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(717), added: 3192, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) @@ -210,16 +216,16 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// Proof: `NominationPools::CounterForSubPoolsStorage` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn unbond() -> Weight { // Proof Size summary in bytes: - // Measured: `3597` + // Measured: `3545` // Estimated: `8877` - // Minimum execution time: 170_992_000 picoseconds. - Weight::from_parts(179_987_000, 0) + // Minimum execution time: 155_853_000 picoseconds. + Weight::from_parts(161_032_000, 0) .saturating_add(Weight::from_parts(0, 8877)) .saturating_add(T::DbWeight::get().reads(20)) .saturating_add(T::DbWeight::get().writes(13)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:1) @@ -230,25 +236,27 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:1 w:0) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) /// The range of component `s` is `[0, 100]`. fn pool_withdraw_unbonded(s: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1670` + // Measured: `1744` // Estimated: `4764` - // Minimum execution time: 60_740_000 picoseconds. - Weight::from_parts(64_502_831, 0) + // Minimum execution time: 62_933_000 picoseconds. + Weight::from_parts(65_847_171, 0) .saturating_add(Weight::from_parts(0, 4764)) - // Standard Error: 2_724 - .saturating_add(Weight::from_parts(37_725, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) + // Standard Error: 1_476 + .saturating_add(Weight::from_parts(59_648, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(7)) + .saturating_add(T::DbWeight::get().writes(3)) } /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(717), added: 3192, mode: `MaxEncodedLen`) /// Storage: `Staking::CurrentEra` (r:1 w:0) /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::SubPoolsStorage` (r:1 w:1) /// Proof: `NominationPools::SubPoolsStorage` (`max_values`: None, `max_size`: Some(261), added: 2736, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) @@ -261,6 +269,8 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) /// Storage: `System::Account` (r:1 w:1) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) /// Storage: `NominationPools::CounterForPoolMembers` (r:1 w:1) /// Proof: `NominationPools::CounterForPoolMembers` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `NominationPools::ClaimPermissions` (r:0 w:1) @@ -268,22 +278,22 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_update(s: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `2098` + // Measured: `2134` // Estimated: `4764` - // Minimum execution time: 127_322_000 picoseconds. - Weight::from_parts(132_064_603, 0) + // Minimum execution time: 123_641_000 picoseconds. + Weight::from_parts(127_222_589, 0) .saturating_add(Weight::from_parts(0, 4764)) - // Standard Error: 3_424 - .saturating_add(Weight::from_parts(64_590, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(10)) - .saturating_add(T::DbWeight::get().writes(8)) + // Standard Error: 2_493 + .saturating_add(Weight::from_parts(83_361, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(11)) + .saturating_add(T::DbWeight::get().writes(9)) } /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(717), added: 3192, mode: `MaxEncodedLen`) /// Storage: `Staking::CurrentEra` (r:1 w:0) /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::SubPoolsStorage` (r:1 w:1) /// Proof: `NominationPools::SubPoolsStorage` (`max_values`: None, `max_size`: Some(261), added: 2736, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:1) @@ -292,16 +302,18 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) /// Storage: `Staking::SlashingSpans` (r:1 w:0) /// Proof: `Staking::SlashingSpans` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Staking::Validators` (r:1 w:0) - /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) - /// Storage: `Staking::Nominators` (r:1 w:0) - /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) /// Storage: `Balances::Locks` (r:2 w:1) /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:2 w:1) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:2 w:2) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Staking::Validators` (r:1 w:0) + /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + /// Storage: `Staking::Nominators` (r:1 w:0) + /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) /// Storage: `NominationPools::CounterForPoolMembers` (r:1 w:1) /// Proof: `NominationPools::CounterForPoolMembers` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `NominationPools::ReversePoolIdLookup` (r:1 w:1) @@ -323,17 +335,15 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// Storage: `NominationPools::ClaimPermissions` (r:0 w:1) /// Proof: `NominationPools::ClaimPermissions` (`max_values`: None, `max_size`: Some(41), added: 2516, mode: `MaxEncodedLen`) /// The range of component `s` is `[0, 100]`. - fn withdraw_unbonded_kill(s: u32, ) -> Weight { + fn withdraw_unbonded_kill(_s: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `2454` + // Measured: `2453` // Estimated: `8538` - // Minimum execution time: 236_510_000 picoseconds. - Weight::from_parts(243_943_334, 0) + // Minimum execution time: 219_469_000 picoseconds. + Weight::from_parts(227_526_000, 0) .saturating_add(Weight::from_parts(0, 8538)) - // Standard Error: 4_864 - .saturating_add(Weight::from_parts(14_974, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(23)) - .saturating_add(T::DbWeight::get().writes(19)) + .saturating_add(T::DbWeight::get().reads(24)) + .saturating_add(T::DbWeight::get().writes(20)) } /// Storage: `NominationPools::LastPoolId` (r:1 w:1) /// Proof: `NominationPools::LastPoolId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) @@ -359,14 +369,12 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:1) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) - /// Storage: `Staking::Ledger` (r:1 w:1) - /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) - /// Storage: `Staking::CurrentEra` (r:1 w:0) - /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `Balances::Locks` (r:2 w:1) /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:2 w:1) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::CounterForRewardPools` (r:1 w:1) @@ -376,21 +384,23 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// Storage: `NominationPools::CounterForReversePoolIdLookup` (r:1 w:1) /// Proof: `NominationPools::CounterForReversePoolIdLookup` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) + /// Storage: `Staking::Ledger` (r:0 w:1) + /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) /// Storage: `Staking::Payee` (r:0 w:1) /// Proof: `Staking::Payee` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) fn create() -> Weight { // Proof Size summary in bytes: - // Measured: `1222` + // Measured: `1102` // Estimated: `8538` - // Minimum execution time: 197_883_000 picoseconds. - Weight::from_parts(201_750_000, 0) + // Minimum execution time: 166_466_000 picoseconds. + Weight::from_parts(171_425_000, 0) .saturating_add(Weight::from_parts(0, 8538)) - .saturating_add(T::DbWeight::get().reads(24)) - .saturating_add(T::DbWeight::get().writes(16)) + .saturating_add(T::DbWeight::get().reads(23)) + .saturating_add(T::DbWeight::get().writes(17)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:0) @@ -416,36 +426,36 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// The range of component `n` is `[1, 16]`. fn nominate(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1779` + // Measured: `1738` // Estimated: `4556 + n * (2520 ±0)` - // Minimum execution time: 65_505_000 picoseconds. - Weight::from_parts(67_148_657, 0) + // Minimum execution time: 59_650_000 picoseconds. + Weight::from_parts(60_620_077, 0) .saturating_add(Weight::from_parts(0, 4556)) - // Standard Error: 9_115 - .saturating_add(Weight::from_parts(1_421_198, 0).saturating_mul(n.into())) + // Standard Error: 7_316 + .saturating_add(Weight::from_parts(1_467_406, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(12)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(5)) .saturating_add(Weight::from_parts(0, 2520).saturating_mul(n.into())) } /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:0) /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) fn set_state() -> Weight { // Proof Size summary in bytes: - // Measured: `1367` + // Measured: `1363` // Estimated: `4556` - // Minimum execution time: 34_157_000 picoseconds. - Weight::from_parts(35_557_000, 0) + // Minimum execution time: 31_170_000 picoseconds. + Weight::from_parts(32_217_000, 0) .saturating_add(Weight::from_parts(0, 4556)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::Metadata` (r:1 w:1) /// Proof: `NominationPools::Metadata` (`max_values`: None, `max_size`: Some(270), added: 2745, mode: `MaxEncodedLen`) /// Storage: `NominationPools::CounterForMetadata` (r:1 w:1) @@ -453,13 +463,13 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// The range of component `n` is `[1, 256]`. fn set_metadata(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `497` + // Measured: `498` // Estimated: `3735` - // Minimum execution time: 13_806_000 picoseconds. - Weight::from_parts(14_540_018, 0) + // Minimum execution time: 12_603_000 picoseconds. + Weight::from_parts(13_241_702, 0) .saturating_add(Weight::from_parts(0, 3735)) - // Standard Error: 123 - .saturating_add(Weight::from_parts(644, 0).saturating_mul(n.into())) + // Standard Error: 116 + .saturating_add(Weight::from_parts(1_428, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -479,25 +489,25 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_870_000 picoseconds. - Weight::from_parts(6_253_000, 0) + // Minimum execution time: 3_608_000 picoseconds. + Weight::from_parts(3_801_000, 0) .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(6)) } /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) fn update_roles() -> Weight { // Proof Size summary in bytes: - // Measured: `497` - // Estimated: `3685` - // Minimum execution time: 18_290_000 picoseconds. - Weight::from_parts(18_961_000, 0) - .saturating_add(Weight::from_parts(0, 3685)) + // Measured: `498` + // Estimated: `3719` + // Minimum execution time: 16_053_000 picoseconds. + Weight::from_parts(16_473_000, 0) + .saturating_add(Weight::from_parts(0, 3719)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:0) @@ -516,16 +526,16 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// Proof: `VoterList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn chill() -> Weight { // Proof Size summary in bytes: - // Measured: `1942` + // Measured: `1901` // Estimated: `4556` - // Minimum execution time: 63_708_000 picoseconds. - Weight::from_parts(65_570_000, 0) + // Minimum execution time: 57_251_000 picoseconds. + Weight::from_parts(59_390_000, 0) .saturating_add(Weight::from_parts(0, 4556)) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(5)) } /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) @@ -534,37 +544,49 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn set_commission() -> Weight { // Proof Size summary in bytes: - // Measured: `736` - // Estimated: `3685` - // Minimum execution time: 34_291_000 picoseconds. - Weight::from_parts(34_767_000, 0) - .saturating_add(Weight::from_parts(0, 3685)) + // Measured: `770` + // Estimated: `3719` + // Minimum execution time: 29_888_000 picoseconds. + Weight::from_parts(31_056_000, 0) + .saturating_add(Weight::from_parts(0, 3719)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(2)) } /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) /// Proof: `NominationPools::GlobalMaxCommission` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn set_commission_max() -> Weight { // Proof Size summary in bytes: - // Measured: `537` - // Estimated: `3685` - // Minimum execution time: 18_406_000 picoseconds. - Weight::from_parts(18_999_000, 0) - .saturating_add(Weight::from_parts(0, 3685)) + // Measured: `538` + // Estimated: `3719` + // Minimum execution time: 15_769_000 picoseconds. + Weight::from_parts(16_579_000, 0) + .saturating_add(Weight::from_parts(0, 3719)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) fn set_commission_change_rate() -> Weight { // Proof Size summary in bytes: - // Measured: `497` - // Estimated: `3685` - // Minimum execution time: 18_440_000 picoseconds. - Weight::from_parts(19_230_000, 0) - .saturating_add(Weight::from_parts(0, 3685)) + // Measured: `498` + // Estimated: `3719` + // Minimum execution time: 15_385_000 picoseconds. + Weight::from_parts(16_402_000, 0) + .saturating_add(Weight::from_parts(0, 3719)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `NominationPools::BondedPools` (r:1 w:1) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) + fn set_commission_claim_permission() -> Weight { + // Proof Size summary in bytes: + // Measured: `498` + // Estimated: `3719` + // Minimum execution time: 14_965_000 picoseconds. + Weight::from_parts(15_548_000, 0) + .saturating_add(Weight::from_parts(0, 3719)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -576,14 +598,14 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `508` // Estimated: `4182` - // Minimum execution time: 14_310_000 picoseconds. - Weight::from_parts(14_681_000, 0) + // Minimum execution time: 13_549_000 picoseconds. + Weight::from_parts(14_307_000, 0) .saturating_add(Weight::from_parts(0, 4182)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) @@ -592,16 +614,16 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn claim_commission() -> Weight { // Proof Size summary in bytes: - // Measured: `934` - // Estimated: `3685` - // Minimum execution time: 64_526_000 picoseconds. - Weight::from_parts(66_800_000, 0) - .saturating_add(Weight::from_parts(0, 3685)) + // Measured: `968` + // Estimated: `3719` + // Minimum execution time: 60_153_000 picoseconds. + Weight::from_parts(61_369_000, 0) + .saturating_add(Weight::from_parts(0, 3719)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(2)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:1 w:1) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) /// Storage: `System::Account` (r:1 w:1) @@ -610,10 +632,10 @@ impl pallet_nomination_pools::WeightInfo for WeightInfo /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) fn adjust_pool_deposit() -> Weight { // Proof Size summary in bytes: - // Measured: `866` + // Measured: `867` // Estimated: `4764` - // Minimum execution time: 73_472_000 picoseconds. - Weight::from_parts(74_698_000, 0) + // Minimum execution time: 64_985_000 picoseconds. + Weight::from_parts(66_616_000, 0) .saturating_add(Weight::from_parts(0, 4764)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(2)) diff --git a/substrate/frame/nomination-pools/benchmarking/src/lib.rs b/substrate/frame/nomination-pools/benchmarking/src/lib.rs index fc86a6f56c0..48d7dae29ef 100644 --- a/substrate/frame/nomination-pools/benchmarking/src/lib.rs +++ b/substrate/frame/nomination-pools/benchmarking/src/lib.rs @@ -35,9 +35,9 @@ use frame_support::{ use frame_system::RawOrigin as RuntimeOrigin; use pallet_nomination_pools::{ BalanceOf, BondExtra, BondedPoolInner, BondedPools, ClaimPermission, ClaimPermissions, - Commission, CommissionChangeRate, ConfigOp, GlobalMaxCommission, MaxPoolMembers, - MaxPoolMembersPerPool, MaxPools, Metadata, MinCreateBond, MinJoinBond, Pallet as Pools, - PoolMembers, PoolRoles, PoolState, RewardPools, SubPoolsStorage, + Commission, CommissionChangeRate, CommissionClaimPermission, ConfigOp, GlobalMaxCommission, + MaxPoolMembers, MaxPoolMembersPerPool, MaxPools, Metadata, MinCreateBond, MinJoinBond, + Pallet as Pools, PoolMembers, PoolRoles, PoolState, RewardPools, SubPoolsStorage, }; use pallet_staking::MaxNominationsOf; use sp_runtime::{ @@ -706,17 +706,24 @@ frame_benchmarking::benchmarks! { max_increase: Perbill::from_percent(20), min_delay: 0u32.into(), }).unwrap(); + // set a claim permission to an account. + Pools::::set_commission_claim_permission( + RuntimeOrigin::Signed(depositor.clone()).into(), + 1u32.into(), + Some(CommissionClaimPermission::Account(depositor.clone())) + ).unwrap(); }:_(RuntimeOrigin::Signed(depositor.clone()), 1u32.into(), Some((Perbill::from_percent(20), depositor.clone()))) verify { assert_eq!(BondedPools::::get(1).unwrap().commission, Commission { - current: Some((Perbill::from_percent(20), depositor)), + current: Some((Perbill::from_percent(20), depositor.clone())), max: Some(Perbill::from_percent(50)), change_rate: Some(CommissionChangeRate { max_increase: Perbill::from_percent(20), min_delay: 0u32.into() }), throttle_from: Some(1u32.into()), + claim_permission: Some(CommissionClaimPermission::Account(depositor)), }); } @@ -731,6 +738,7 @@ frame_benchmarking::benchmarks! { max: Some(Perbill::from_percent(50)), change_rate: None, throttle_from: Some(0u32.into()), + claim_permission: None, }); } @@ -751,9 +759,25 @@ frame_benchmarking::benchmarks! { min_delay: 1000u32.into(), }), throttle_from: Some(1_u32.into()), + claim_permission: None, }); } + set_commission_claim_permission { + // Create a pool. + let (depositor, pool_account) = create_pool_account::(0, Pools::::depositor_min_bond() * 2u32.into(), None); + }:_(RuntimeOrigin::Signed(depositor.clone()), 1u32.into(), Some(CommissionClaimPermission::Account(depositor.clone()))) + verify { + assert_eq!( + BondedPools::::get(1).unwrap().commission, Commission { + current: None, + max: None, + change_rate: None, + throttle_from: None, + claim_permission: Some(CommissionClaimPermission::Account(depositor)), + }); + } + set_claim_permission { // Create a pool let min_create_bond = Pools::::depositor_min_bond(); @@ -786,8 +810,13 @@ frame_benchmarking::benchmarks! { CurrencyOf::::set_balance(&reward_account, ed + origin_weight); // member claims a payout to make some commission available. - let _ = Pools::::claim_payout(RuntimeOrigin::Signed(claimer).into()); - + let _ = Pools::::claim_payout(RuntimeOrigin::Signed(claimer.clone()).into()); + // set a claim permission to an account. + let _ = Pools::::set_commission_claim_permission( + RuntimeOrigin::Signed(depositor.clone()).into(), + 1u32.into(), + Some(CommissionClaimPermission::Account(claimer)) + ); whitelist_account!(depositor); }:_(RuntimeOrigin::Signed(depositor.clone()), 1u32.into()) verify { diff --git a/substrate/frame/nomination-pools/src/lib.rs b/substrate/frame/nomination-pools/src/lib.rs index ab4bd51ffc0..f191126fbdd 100644 --- a/substrate/frame/nomination-pools/src/lib.rs +++ b/substrate/frame/nomination-pools/src/lib.rs @@ -676,6 +676,13 @@ pub struct PoolRoles { pub bouncer: Option, } +// A pool's possible commission claiming permissions. +#[derive(PartialEq, Eq, Copy, Clone, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)] +pub enum CommissionClaimPermission { + Permissionless, + Account(AccountId), +} + /// Pool commission. /// /// The pool `root` can set commission configuration after pool creation. By default, all commission @@ -705,6 +712,9 @@ pub struct Commission { /// The block from where throttling should be checked from. This value will be updated on all /// commission updates and when setting an initial `change_rate`. pub throttle_from: Option>, + // Whether commission can be claimed permissionlessly, or whether an account can claim + // commission. `Root` role can always claim. + pub claim_permission: Option>, } impl Commission { @@ -1078,6 +1088,17 @@ impl BondedPool { self.is_root(who) } + fn can_claim_commission(&self, who: &T::AccountId) -> bool { + if let Some(permission) = self.commission.claim_permission.as_ref() { + match permission { + CommissionClaimPermission::Permissionless => true, + CommissionClaimPermission::Account(account) => account == who || self.is_root(who), + } + } else { + self.is_root(who) + } + } + fn is_destroying(&self) -> bool { matches!(self.state, PoolState::Destroying) } @@ -1572,7 +1593,7 @@ pub mod pallet { use sp_runtime::Perbill; /// The current storage version. - const STORAGE_VERSION: StorageVersion = StorageVersion::new(7); + const STORAGE_VERSION: StorageVersion = StorageVersion::new(8); #[pallet::pallet] #[pallet::storage_version(STORAGE_VERSION)] @@ -1850,6 +1871,11 @@ pub mod pallet { pool_id: PoolId, change_rate: CommissionChangeRate>, }, + /// Pool commission claim permission has been updated. + PoolCommissionClaimPermissionUpdated { + pool_id: PoolId, + permission: Option>, + }, /// Pool commission has been claimed. PoolCommissionClaimed { pool_id: PoolId, commission: BalanceOf }, /// Topped up deficit in frozen ED of the reward pool. @@ -2742,6 +2768,32 @@ pub mod pallet { let who = ensure_signed(origin)?; Self::do_adjust_pool_deposit(who, pool_id) } + + /// Set or remove a pool's commission claim permission. + /// + /// Determines who can claim the pool's pending commission. Only the `Root` role of the pool + /// is able to conifigure commission claim permissions. + #[pallet::call_index(22)] + #[pallet::weight(T::WeightInfo::set_commission_claim_permission())] + pub fn set_commission_claim_permission( + origin: OriginFor, + pool_id: PoolId, + permission: Option>, + ) -> DispatchResult { + let who = ensure_signed(origin)?; + let mut bonded_pool = BondedPool::::get(pool_id).ok_or(Error::::PoolNotFound)?; + ensure!(bonded_pool.can_manage_commission(&who), Error::::DoesNotHavePermission); + + bonded_pool.commission.claim_permission = permission.clone(); + bonded_pool.put(); + + Self::deposit_event(Event::::PoolCommissionClaimPermissionUpdated { + pool_id, + permission, + }); + + Ok(()) + } } #[pallet::hooks] @@ -3106,12 +3158,12 @@ impl Pallet { fn do_claim_commission(who: T::AccountId, pool_id: PoolId) -> DispatchResult { let bonded_pool = BondedPool::::get(pool_id).ok_or(Error::::PoolNotFound)?; - ensure!(bonded_pool.can_manage_commission(&who), Error::::DoesNotHavePermission); + ensure!(bonded_pool.can_claim_commission(&who), Error::::DoesNotHavePermission); let mut reward_pool = RewardPools::::get(pool_id) .defensive_ok_or::>(DefensiveError::RewardPoolNotFound.into())?; - // IMPORTANT: make sure that any newly pending commission not yet processed is added to + // IMPORTANT: ensure newly pending commission not yet processed is added to // `total_commission_pending`. reward_pool.update_records( pool_id, diff --git a/substrate/frame/nomination-pools/src/migration.rs b/substrate/frame/nomination-pools/src/migration.rs index 3d68fee1dca..3adfd926d95 100644 --- a/substrate/frame/nomination-pools/src/migration.rs +++ b/substrate/frame/nomination-pools/src/migration.rs @@ -27,6 +27,15 @@ use sp_runtime::TryRuntimeError; pub mod versioned { use super::*; + /// v8: Adds commission claim permissions to `BondedPools`. + pub type V7ToV8 = frame_support::migrations::VersionedMigration< + 7, + 8, + v8::VersionUncheckedMigrateV7ToV8, + crate::pallet::Pallet, + ::DbWeight, + >; + /// Migration V6 to V7 wrapped in a [`frame_support::migrations::VersionedMigration`], ensuring /// the migration is only performed when on-chain version is 6. pub type V6ToV7 = frame_support::migrations::VersionedMigration< @@ -47,6 +56,74 @@ pub mod versioned { >; } +pub mod v8 { + use super::*; + + #[derive(Decode)] + pub struct OldCommission { + pub current: Option<(Perbill, T::AccountId)>, + pub max: Option, + pub change_rate: Option>>, + pub throttle_from: Option>, + } + + #[derive(Decode)] + pub struct OldBondedPoolInner { + pub commission: OldCommission, + pub member_counter: u32, + pub points: BalanceOf, + pub roles: PoolRoles, + pub state: PoolState, + } + + impl OldBondedPoolInner { + fn migrate_to_v8(self) -> BondedPoolInner { + BondedPoolInner { + commission: Commission { + current: self.commission.current, + max: self.commission.max, + change_rate: self.commission.change_rate, + throttle_from: self.commission.throttle_from, + // `claim_permission` is a new field. + claim_permission: None, + }, + member_counter: self.member_counter, + points: self.points, + roles: self.roles, + state: self.state, + } + } + } + + pub struct VersionUncheckedMigrateV7ToV8(sp_std::marker::PhantomData); + impl OnRuntimeUpgrade for VersionUncheckedMigrateV7ToV8 { + #[cfg(feature = "try-runtime")] + fn pre_upgrade() -> Result, TryRuntimeError> { + Ok(Vec::new()) + } + + fn on_runtime_upgrade() -> Weight { + let mut translated = 0u64; + BondedPools::::translate::, _>(|_key, old_value| { + translated.saturating_inc(); + Some(old_value.migrate_to_v8()) + }); + T::DbWeight::get().reads_writes(translated, translated + 1) + } + + #[cfg(feature = "try-runtime")] + fn post_upgrade(_: Vec) -> Result<(), TryRuntimeError> { + // Check new `claim_permission` field is present. + ensure!( + BondedPools::::iter() + .all(|(_, inner)| inner.commission.claim_permission.is_none()), + "`claim_permission` value has not been set correctly." + ); + Ok(()) + } + } +} + /// This migration accumulates and initializes the [`TotalValueLocked`] for all pools. /// /// WARNING: This migration works under the assumption that the [`BondedPools`] cannot be inflated diff --git a/substrate/frame/nomination-pools/src/tests.rs b/substrate/frame/nomination-pools/src/tests.rs index 2749e89ecff..7fe1e704bb1 100644 --- a/substrate/frame/nomination-pools/src/tests.rs +++ b/substrate/frame/nomination-pools/src/tests.rs @@ -5761,7 +5761,13 @@ mod commission { // Then: assert_eq!( BondedPool::::get(1).unwrap().commission, - Commission { current: None, max: None, change_rate: None, throttle_from: Some(1) } + Commission { + current: None, + max: None, + change_rate: None, + throttle_from: Some(1), + claim_permission: None, + } ); assert_eq!( pool_events_since_last_call(), @@ -5956,6 +5962,7 @@ mod commission { min_delay: 2_u64 }), throttle_from: Some(1_u64), + claim_permission: None, } ); assert_eq!( @@ -6007,6 +6014,7 @@ mod commission { min_delay: 2_u64 }), throttle_from: Some(3_u64), + claim_permission: None, } ); assert_eq!( @@ -6082,7 +6090,8 @@ mod commission { max_increase: Perbill::from_percent(1), min_delay: 2 }), - throttle_from: Some(7) + throttle_from: Some(7), + claim_permission: None, } ); assert_eq!( @@ -6183,6 +6192,7 @@ mod commission { max: Some(Perbill::from_percent(50)), change_rate: None, throttle_from: Some(1), + claim_permission: None, } ); @@ -6409,6 +6419,7 @@ mod commission { min_delay: 10_u64 }), throttle_from: Some(11), + claim_permission: None, } ); @@ -6502,7 +6513,8 @@ mod commission { max_increase: Perbill::from_percent(1), min_delay: 0 }), - throttle_from: Some(1) + throttle_from: Some(1), + claim_permission: None, } ); @@ -6885,6 +6897,13 @@ mod commission { #[test] fn claim_commission_works() { ExtBuilder::default().build_and_execute(|| { + /// Deposit rewards into the pool and claim payout. This will set up pending commission + /// to be tested in various scenarios. + fn deposit_rewards_and_claim_payout(caller: AccountId, points: u128) { + deposit_rewards(points); + assert_ok!(Pools::claim_payout(RuntimeOrigin::signed(caller))); + } + let pool_id = 1; let _ = Currency::set_balance(&900, 5); @@ -6905,21 +6924,9 @@ mod commission { ] ); - // Pool earns 80 points, payout is triggered. - deposit_rewards(80); - assert_eq!( - PoolMembers::::get(10).unwrap(), - PoolMember:: { pool_id, points: 10, ..Default::default() } - ); - - assert_ok!(Pools::claim_payout(RuntimeOrigin::signed(10))); - assert_eq!( - pool_events_since_last_call(), - vec![Event::PaidOut { member: 10, pool_id, payout: 40 }] - ); - // Given: - assert_eq!(RewardPool::::current_balance(pool_id), 40); + deposit_rewards_and_claim_payout(10, 100); + assert_eq!(RewardPool::::current_balance(pool_id), 50); // Pool does not exist assert_noop!( @@ -6944,6 +6951,176 @@ mod commission { Pools::claim_commission(RuntimeOrigin::signed(900), pool_id,), Error::::NoPendingCommission ); + + assert_eq!( + pool_events_since_last_call(), + vec![ + Event::PaidOut { member: 10, pool_id, payout: 50 }, + Event::PoolCommissionClaimed { pool_id: 1, commission: 50 } + ] + ); + + // The pool commission's claim_permission field is updated to `Permissionless` by the + // root member, which means anyone can now claim commission for the pool. + + // Given: + // Some random non-pool member to claim commission. + let non_pool_member = 1001; + let _ = Currency::set_balance(&non_pool_member, 5); + + // Set up pending commission. + deposit_rewards_and_claim_payout(10, 100); + assert_ok!(Pools::set_commission_claim_permission( + RuntimeOrigin::signed(900), + pool_id, + Some(CommissionClaimPermission::Permissionless) + )); + + // When: + assert_ok!(Pools::claim_commission(RuntimeOrigin::signed(non_pool_member), pool_id)); + + // Then: + assert_eq!(RewardPool::::current_balance(pool_id), 0); + assert_eq!( + pool_events_since_last_call(), + vec![ + Event::PaidOut { member: 10, pool_id, payout: 50 }, + Event::PoolCommissionClaimPermissionUpdated { + pool_id: 1, + permission: Some(CommissionClaimPermission::Permissionless) + }, + Event::PoolCommissionClaimed { pool_id: 1, commission: 50 }, + ] + ); + + // The pool commission's claim_permission is updated to an adhoc account by the root + // member, which means now only that account (in addition to the root role) can claim + // commission for the pool. + + // Given: + // The account designated to claim commission. + let designated_commission_claimer = 2001; + let _ = Currency::set_balance(&designated_commission_claimer, 5); + + // Set up pending commission. + deposit_rewards_and_claim_payout(10, 100); + assert_ok!(Pools::set_commission_claim_permission( + RuntimeOrigin::signed(900), + pool_id, + Some(CommissionClaimPermission::Account(designated_commission_claimer)) + )); + + // When: + // Previous claimer can no longer claim commission. + assert_noop!( + Pools::claim_commission(RuntimeOrigin::signed(1001), pool_id,), + Error::::DoesNotHavePermission + ); + // Designated claimer can claim commission. + assert_ok!(Pools::claim_commission( + RuntimeOrigin::signed(designated_commission_claimer), + pool_id + )); + + // Then: + assert_eq!( + pool_events_since_last_call(), + vec![ + Event::PaidOut { member: 10, pool_id, payout: 50 }, + Event::PoolCommissionClaimPermissionUpdated { + pool_id: 1, + permission: Some(CommissionClaimPermission::Account(2001)) + }, + Event::PoolCommissionClaimed { pool_id: 1, commission: 50 }, + ] + ); + + // Even with an Account claim permission set, the `root` role of the pool can still + // claim commission. + + // Given: + deposit_rewards_and_claim_payout(10, 100); + + // When: + assert_ok!(Pools::claim_commission(RuntimeOrigin::signed(900), pool_id)); + + // Then: + assert_eq!( + pool_events_since_last_call(), + vec![ + Event::PaidOut { member: 10, pool_id, payout: 50 }, + Event::PoolCommissionClaimed { pool_id: 1, commission: 50 }, + ] + ); + + // The root role updates commission's claim_permission back to `None`, which results in + // only the root member being able to claim commission for the pool. + + // Given: + deposit_rewards_and_claim_payout(10, 100); + + // When: + assert_ok!(Pools::set_commission_claim_permission( + RuntimeOrigin::signed(900), + pool_id, + None + )); + // Previous claimer can no longer claim commission. + assert_noop!( + Pools::claim_commission( + RuntimeOrigin::signed(designated_commission_claimer), + pool_id, + ), + Error::::DoesNotHavePermission + ); + // Root can claim commission. + assert_ok!(Pools::claim_commission(RuntimeOrigin::signed(900), pool_id)); + + // Then: + assert_eq!( + pool_events_since_last_call(), + vec![ + Event::PaidOut { member: 10, pool_id, payout: 50 }, + Event::PoolCommissionClaimPermissionUpdated { pool_id: 1, permission: None }, + Event::PoolCommissionClaimed { pool_id: 1, commission: 50 }, + ] + ); + }) + } + + #[test] + fn set_commission_claim_permission_handles_errors() { + ExtBuilder::default().build_and_execute(|| { + let pool_id = 1; + + let _ = Currency::set_balance(&900, 5); + assert_eq!( + pool_events_since_last_call(), + vec![ + Event::Created { depositor: 10, pool_id }, + Event::Bonded { member: 10, pool_id, bonded: 10, joined: true }, + ] + ); + + // Cannot operate on a non-existing pool. + assert_noop!( + Pools::set_commission_claim_permission( + RuntimeOrigin::signed(10), + 90, + Some(CommissionClaimPermission::Permissionless) + ), + Error::::PoolNotFound + ); + + // Only the root role can change the commission claim permission. + assert_noop!( + Pools::set_commission_claim_permission( + RuntimeOrigin::signed(10), + pool_id, + Some(CommissionClaimPermission::Permissionless) + ), + Error::::DoesNotHavePermission + ); }) } } diff --git a/substrate/frame/nomination-pools/src/weights.rs b/substrate/frame/nomination-pools/src/weights.rs index 2cb414fc2a0..047a17c3f9a 100644 --- a/substrate/frame/nomination-pools/src/weights.rs +++ b/substrate/frame/nomination-pools/src/weights.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for `pallet_nomination_pools` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-09-19, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-11-23, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-guclnr1q-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` +//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` //! WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: @@ -67,6 +67,7 @@ pub trait WeightInfo { fn set_commission() -> Weight; fn set_commission_max() -> Weight; fn set_commission_change_rate() -> Weight; + fn set_commission_claim_permission() -> Weight; fn set_claim_permission() -> Weight; fn claim_commission() -> Weight; fn adjust_pool_deposit() -> Weight; @@ -80,7 +81,7 @@ impl WeightInfo for SubstrateWeight { /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(237), added: 2712, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:1) @@ -105,19 +106,21 @@ impl WeightInfo for SubstrateWeight { /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:2 w:2) /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn join() -> Weight { // Proof Size summary in bytes: - // Measured: `3388` + // Measured: `3425` // Estimated: `8877` - // Minimum execution time: 203_377_000 picoseconds. - Weight::from_parts(206_359_000, 8877) - .saturating_add(T::DbWeight::get().reads(19_u64)) - .saturating_add(T::DbWeight::get().writes(12_u64)) + // Minimum execution time: 184_295_000 picoseconds. + Weight::from_parts(188_860_000, 8877) + .saturating_add(T::DbWeight::get().reads(20_u64)) + .saturating_add(T::DbWeight::get().writes(13_u64)) } /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(237), added: 2712, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) @@ -136,21 +139,23 @@ impl WeightInfo for SubstrateWeight { /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:2 w:2) /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn bond_extra_transfer() -> Weight { // Proof Size summary in bytes: - // Measured: `3398` + // Measured: `3435` // Estimated: `8877` - // Minimum execution time: 199_792_000 picoseconds. - Weight::from_parts(206_871_000, 8877) - .saturating_add(T::DbWeight::get().reads(16_u64)) - .saturating_add(T::DbWeight::get().writes(12_u64)) + // Minimum execution time: 188_777_000 picoseconds. + Weight::from_parts(192_646_000, 8877) + .saturating_add(T::DbWeight::get().reads(17_u64)) + .saturating_add(T::DbWeight::get().writes(13_u64)) } /// Storage: `NominationPools::ClaimPermissions` (r:1 w:0) /// Proof: `NominationPools::ClaimPermissions` (`max_values`: None, `max_size`: Some(41), added: 2516, mode: `MaxEncodedLen`) /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(237), added: 2712, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) @@ -169,21 +174,23 @@ impl WeightInfo for SubstrateWeight { /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:2 w:2) /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn bond_extra_other() -> Weight { // Proof Size summary in bytes: - // Measured: `3463` + // Measured: `3500` // Estimated: `8877` - // Minimum execution time: 246_362_000 picoseconds. - Weight::from_parts(253_587_000, 8877) - .saturating_add(T::DbWeight::get().reads(17_u64)) - .saturating_add(T::DbWeight::get().writes(13_u64)) + // Minimum execution time: 221_728_000 picoseconds. + Weight::from_parts(227_569_000, 8877) + .saturating_add(T::DbWeight::get().reads(18_u64)) + .saturating_add(T::DbWeight::get().writes(14_u64)) } /// Storage: `NominationPools::ClaimPermissions` (r:1 w:0) /// Proof: `NominationPools::ClaimPermissions` (`max_values`: None, `max_size`: Some(41), added: 2516, mode: `MaxEncodedLen`) /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(237), added: 2712, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) @@ -192,17 +199,17 @@ impl WeightInfo for SubstrateWeight { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn claim_payout() -> Weight { // Proof Size summary in bytes: - // Measured: `1171` - // Estimated: `3702` - // Minimum execution time: 81_115_000 picoseconds. - Weight::from_parts(83_604_000, 3702) + // Measured: `1172` + // Estimated: `3719` + // Minimum execution time: 75_310_000 picoseconds. + Weight::from_parts(77_709_000, 3719) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(237), added: 2712, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) @@ -233,15 +240,15 @@ impl WeightInfo for SubstrateWeight { /// Proof: `NominationPools::CounterForSubPoolsStorage` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn unbond() -> Weight { // Proof Size summary in bytes: - // Measured: `3674` + // Measured: `3622` // Estimated: `27847` - // Minimum execution time: 187_210_000 picoseconds. - Weight::from_parts(189_477_000, 27847) + // Minimum execution time: 170_656_000 picoseconds. + Weight::from_parts(174_950_000, 27847) .saturating_add(T::DbWeight::get().reads(20_u64)) .saturating_add(T::DbWeight::get().writes(13_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:1) @@ -252,24 +259,26 @@ impl WeightInfo for SubstrateWeight { /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:1 w:0) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) /// The range of component `s` is `[0, 100]`. fn pool_withdraw_unbonded(s: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1743` + // Measured: `1817` // Estimated: `4764` - // Minimum execution time: 66_384_000 picoseconds. - Weight::from_parts(69_498_267, 4764) - // Standard Error: 2_566 - .saturating_add(Weight::from_parts(34_528, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(6_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) + // Minimum execution time: 68_866_000 picoseconds. + Weight::from_parts(72_312_887, 4764) + // Standard Error: 1_635 + .saturating_add(Weight::from_parts(41_679, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(237), added: 2712, mode: `MaxEncodedLen`) /// Storage: `Staking::CurrentEra` (r:1 w:0) /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::SubPoolsStorage` (r:1 w:1) /// Proof: `NominationPools::SubPoolsStorage` (`max_values`: None, `max_size`: Some(24382), added: 26857, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) @@ -282,6 +291,8 @@ impl WeightInfo for SubstrateWeight { /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) /// Storage: `System::Account` (r:1 w:1) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) /// Storage: `NominationPools::CounterForPoolMembers` (r:1 w:1) /// Proof: `NominationPools::CounterForPoolMembers` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `NominationPools::ClaimPermissions` (r:0 w:1) @@ -289,21 +300,21 @@ impl WeightInfo for SubstrateWeight { /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_update(s: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `2171` + // Measured: `2207` // Estimated: `27847` - // Minimum execution time: 137_474_000 picoseconds. - Weight::from_parts(142_341_215, 27847) - // Standard Error: 3_468 - .saturating_add(Weight::from_parts(66_597, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(10_u64)) - .saturating_add(T::DbWeight::get().writes(8_u64)) + // Minimum execution time: 131_383_000 picoseconds. + Weight::from_parts(136_595_971, 27847) + // Standard Error: 2_715 + .saturating_add(Weight::from_parts(52_351, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(11_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(237), added: 2712, mode: `MaxEncodedLen`) /// Storage: `Staking::CurrentEra` (r:1 w:0) /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::SubPoolsStorage` (r:1 w:1) /// Proof: `NominationPools::SubPoolsStorage` (`max_values`: None, `max_size`: Some(24382), added: 26857, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:1) @@ -312,16 +323,18 @@ impl WeightInfo for SubstrateWeight { /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) /// Storage: `Staking::SlashingSpans` (r:1 w:0) /// Proof: `Staking::SlashingSpans` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Staking::Validators` (r:1 w:0) - /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) - /// Storage: `Staking::Nominators` (r:1 w:0) - /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) /// Storage: `Balances::Locks` (r:2 w:1) /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:2 w:1) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:2 w:2) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Staking::Validators` (r:1 w:0) + /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + /// Storage: `Staking::Nominators` (r:1 w:0) + /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) /// Storage: `NominationPools::CounterForPoolMembers` (r:1 w:1) /// Proof: `NominationPools::CounterForPoolMembers` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `NominationPools::ReversePoolIdLookup` (r:1 w:1) @@ -345,12 +358,12 @@ impl WeightInfo for SubstrateWeight { /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_kill(_s: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `2526` + // Measured: `2525` // Estimated: `27847` - // Minimum execution time: 249_135_000 picoseconds. - Weight::from_parts(263_632_571, 27847) - .saturating_add(T::DbWeight::get().reads(23_u64)) - .saturating_add(T::DbWeight::get().writes(19_u64)) + // Minimum execution time: 233_314_000 picoseconds. + Weight::from_parts(241_694_316, 27847) + .saturating_add(T::DbWeight::get().reads(24_u64)) + .saturating_add(T::DbWeight::get().writes(20_u64)) } /// Storage: `NominationPools::LastPoolId` (r:1 w:1) /// Proof: `NominationPools::LastPoolId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) @@ -376,14 +389,12 @@ impl WeightInfo for SubstrateWeight { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:1) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) - /// Storage: `Staking::Ledger` (r:1 w:1) - /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) - /// Storage: `Staking::CurrentEra` (r:1 w:0) - /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `Balances::Locks` (r:2 w:1) /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:2 w:1) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::CounterForRewardPools` (r:1 w:1) @@ -393,20 +404,22 @@ impl WeightInfo for SubstrateWeight { /// Storage: `NominationPools::CounterForReversePoolIdLookup` (r:1 w:1) /// Proof: `NominationPools::CounterForReversePoolIdLookup` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) + /// Storage: `Staking::Ledger` (r:0 w:1) + /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) /// Storage: `Staking::Payee` (r:0 w:1) /// Proof: `Staking::Payee` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) fn create() -> Weight { // Proof Size summary in bytes: - // Measured: `1289` + // Measured: `1169` // Estimated: `8538` - // Minimum execution time: 214_207_000 picoseconds. - Weight::from_parts(221_588_000, 8538) - .saturating_add(T::DbWeight::get().reads(24_u64)) - .saturating_add(T::DbWeight::get().writes(16_u64)) + // Minimum execution time: 171_465_000 picoseconds. + Weight::from_parts(176_478_000, 8538) + .saturating_add(T::DbWeight::get().reads(23_u64)) + .saturating_add(T::DbWeight::get().writes(17_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:0) @@ -432,34 +445,34 @@ impl WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 16]`. fn nominate(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1849` + // Measured: `1808` // Estimated: `4556 + n * (2520 ±0)` - // Minimum execution time: 70_626_000 picoseconds. - Weight::from_parts(73_830_182, 4556) - // Standard Error: 24_496 - .saturating_add(Weight::from_parts(1_561_416, 0).saturating_mul(n.into())) + // Minimum execution time: 63_588_000 picoseconds. + Weight::from_parts(64_930_584, 4556) + // Standard Error: 9_167 + .saturating_add(Weight::from_parts(1_595_779, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(5_u64)) .saturating_add(Weight::from_parts(0, 2520).saturating_mul(n.into())) } /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:0) /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) fn set_state() -> Weight { // Proof Size summary in bytes: - // Measured: `1438` + // Measured: `1434` // Estimated: `4556` - // Minimum execution time: 36_542_000 picoseconds. - Weight::from_parts(37_644_000, 4556) + // Minimum execution time: 32_899_000 picoseconds. + Weight::from_parts(33_955_000, 4556) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::Metadata` (r:1 w:1) /// Proof: `NominationPools::Metadata` (`max_values`: None, `max_size`: Some(270), added: 2745, mode: `MaxEncodedLen`) /// Storage: `NominationPools::CounterForMetadata` (r:1 w:1) @@ -467,12 +480,12 @@ impl WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 256]`. fn set_metadata(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `531` + // Measured: `532` // Estimated: `3735` - // Minimum execution time: 15_130_000 picoseconds. - Weight::from_parts(16_319_671, 3735) - // Standard Error: 351 - .saturating_add(Weight::from_parts(2_024, 0).saturating_mul(n.into())) + // Minimum execution time: 13_778_000 picoseconds. + Weight::from_parts(14_770_006, 3735) + // Standard Error: 151 + .saturating_add(Weight::from_parts(1_900, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -492,23 +505,23 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 6_819_000 picoseconds. - Weight::from_parts(7_253_000, 0) + // Minimum execution time: 4_550_000 picoseconds. + Weight::from_parts(4_935_000, 0) .saturating_add(T::DbWeight::get().writes(6_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) fn update_roles() -> Weight { // Proof Size summary in bytes: - // Measured: `531` - // Estimated: `3685` - // Minimum execution time: 19_596_000 picoseconds. - Weight::from_parts(20_828_000, 3685) + // Measured: `532` + // Estimated: `3719` + // Minimum execution time: 16_759_000 picoseconds. + Weight::from_parts(17_346_000, 3719) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:0) @@ -527,15 +540,15 @@ impl WeightInfo for SubstrateWeight { /// Proof: `VoterList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn chill() -> Weight { // Proof Size summary in bytes: - // Measured: `2012` + // Measured: `1971` // Estimated: `4556` - // Minimum execution time: 68_551_000 picoseconds. - Weight::from_parts(71_768_000, 4556) + // Minimum execution time: 61_970_000 picoseconds. + Weight::from_parts(63_738_000, 4556) .saturating_add(T::DbWeight::get().reads(9_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) @@ -544,34 +557,45 @@ impl WeightInfo for SubstrateWeight { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn set_commission() -> Weight { // Proof Size summary in bytes: - // Measured: `770` - // Estimated: `3685` - // Minimum execution time: 36_128_000 picoseconds. - Weight::from_parts(38_547_000, 3685) + // Measured: `804` + // Estimated: `3719` + // Minimum execution time: 31_950_000 picoseconds. + Weight::from_parts(33_190_000, 3719) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) /// Proof: `NominationPools::GlobalMaxCommission` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn set_commission_max() -> Weight { // Proof Size summary in bytes: - // Measured: `571` - // Estimated: `3685` - // Minimum execution time: 20_067_000 picoseconds. - Weight::from_parts(21_044_000, 3685) + // Measured: `572` + // Estimated: `3719` + // Minimum execution time: 16_807_000 picoseconds. + Weight::from_parts(17_733_000, 3719) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) fn set_commission_change_rate() -> Weight { // Proof Size summary in bytes: - // Measured: `531` - // Estimated: `3685` - // Minimum execution time: 19_186_000 picoseconds. - Weight::from_parts(20_189_000, 3685) + // Measured: `532` + // Estimated: `3719` + // Minimum execution time: 16_710_000 picoseconds. + Weight::from_parts(17_563_000, 3719) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `NominationPools::BondedPools` (r:1 w:1) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) + fn set_commission_claim_permission() -> Weight { + // Proof Size summary in bytes: + // Measured: `532` + // Estimated: `3719` + // Minimum execution time: 16_493_000 picoseconds. + Weight::from_parts(17_022_000, 3719) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -583,13 +607,13 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `542` // Estimated: `3702` - // Minimum execution time: 15_275_000 picoseconds. - Weight::from_parts(15_932_000, 3702) + // Minimum execution time: 14_248_000 picoseconds. + Weight::from_parts(15_095_000, 3702) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) @@ -598,15 +622,15 @@ impl WeightInfo for SubstrateWeight { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn claim_commission() -> Weight { // Proof Size summary in bytes: - // Measured: `968` - // Estimated: `3685` - // Minimum execution time: 67_931_000 picoseconds. - Weight::from_parts(72_202_000, 3685) + // Measured: `1002` + // Estimated: `3719` + // Minimum execution time: 61_969_000 picoseconds. + Weight::from_parts(63_965_000, 3719) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:1 w:1) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) /// Storage: `System::Account` (r:1 w:1) @@ -615,10 +639,10 @@ impl WeightInfo for SubstrateWeight { /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) fn adjust_pool_deposit() -> Weight { // Proof Size summary in bytes: - // Measured: `900` + // Measured: `901` // Estimated: `4764` - // Minimum execution time: 72_783_000 picoseconds. - Weight::from_parts(75_841_000, 4764) + // Minimum execution time: 65_462_000 picoseconds. + Weight::from_parts(67_250_000, 4764) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -631,7 +655,7 @@ impl WeightInfo for () { /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(237), added: 2712, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:1) @@ -656,19 +680,21 @@ impl WeightInfo for () { /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:2 w:2) /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn join() -> Weight { // Proof Size summary in bytes: - // Measured: `3388` + // Measured: `3425` // Estimated: `8877` - // Minimum execution time: 203_377_000 picoseconds. - Weight::from_parts(206_359_000, 8877) - .saturating_add(RocksDbWeight::get().reads(19_u64)) - .saturating_add(RocksDbWeight::get().writes(12_u64)) + // Minimum execution time: 184_295_000 picoseconds. + Weight::from_parts(188_860_000, 8877) + .saturating_add(RocksDbWeight::get().reads(20_u64)) + .saturating_add(RocksDbWeight::get().writes(13_u64)) } /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(237), added: 2712, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) @@ -687,21 +713,23 @@ impl WeightInfo for () { /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:2 w:2) /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn bond_extra_transfer() -> Weight { // Proof Size summary in bytes: - // Measured: `3398` + // Measured: `3435` // Estimated: `8877` - // Minimum execution time: 199_792_000 picoseconds. - Weight::from_parts(206_871_000, 8877) - .saturating_add(RocksDbWeight::get().reads(16_u64)) - .saturating_add(RocksDbWeight::get().writes(12_u64)) + // Minimum execution time: 188_777_000 picoseconds. + Weight::from_parts(192_646_000, 8877) + .saturating_add(RocksDbWeight::get().reads(17_u64)) + .saturating_add(RocksDbWeight::get().writes(13_u64)) } /// Storage: `NominationPools::ClaimPermissions` (r:1 w:0) /// Proof: `NominationPools::ClaimPermissions` (`max_values`: None, `max_size`: Some(41), added: 2516, mode: `MaxEncodedLen`) /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(237), added: 2712, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) @@ -720,21 +748,23 @@ impl WeightInfo for () { /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:2 w:2) /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn bond_extra_other() -> Weight { // Proof Size summary in bytes: - // Measured: `3463` + // Measured: `3500` // Estimated: `8877` - // Minimum execution time: 246_362_000 picoseconds. - Weight::from_parts(253_587_000, 8877) - .saturating_add(RocksDbWeight::get().reads(17_u64)) - .saturating_add(RocksDbWeight::get().writes(13_u64)) + // Minimum execution time: 221_728_000 picoseconds. + Weight::from_parts(227_569_000, 8877) + .saturating_add(RocksDbWeight::get().reads(18_u64)) + .saturating_add(RocksDbWeight::get().writes(14_u64)) } /// Storage: `NominationPools::ClaimPermissions` (r:1 w:0) /// Proof: `NominationPools::ClaimPermissions` (`max_values`: None, `max_size`: Some(41), added: 2516, mode: `MaxEncodedLen`) /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(237), added: 2712, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) @@ -743,17 +773,17 @@ impl WeightInfo for () { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn claim_payout() -> Weight { // Proof Size summary in bytes: - // Measured: `1171` - // Estimated: `3702` - // Minimum execution time: 81_115_000 picoseconds. - Weight::from_parts(83_604_000, 3702) + // Measured: `1172` + // Estimated: `3719` + // Minimum execution time: 75_310_000 picoseconds. + Weight::from_parts(77_709_000, 3719) .saturating_add(RocksDbWeight::get().reads(6_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(237), added: 2712, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) @@ -784,15 +814,15 @@ impl WeightInfo for () { /// Proof: `NominationPools::CounterForSubPoolsStorage` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn unbond() -> Weight { // Proof Size summary in bytes: - // Measured: `3674` + // Measured: `3622` // Estimated: `27847` - // Minimum execution time: 187_210_000 picoseconds. - Weight::from_parts(189_477_000, 27847) + // Minimum execution time: 170_656_000 picoseconds. + Weight::from_parts(174_950_000, 27847) .saturating_add(RocksDbWeight::get().reads(20_u64)) .saturating_add(RocksDbWeight::get().writes(13_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:1) @@ -803,24 +833,26 @@ impl WeightInfo for () { /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:1 w:0) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) /// The range of component `s` is `[0, 100]`. fn pool_withdraw_unbonded(s: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1743` + // Measured: `1817` // Estimated: `4764` - // Minimum execution time: 66_384_000 picoseconds. - Weight::from_parts(69_498_267, 4764) - // Standard Error: 2_566 - .saturating_add(Weight::from_parts(34_528, 0).saturating_mul(s.into())) - .saturating_add(RocksDbWeight::get().reads(6_u64)) - .saturating_add(RocksDbWeight::get().writes(2_u64)) + // Minimum execution time: 68_866_000 picoseconds. + Weight::from_parts(72_312_887, 4764) + // Standard Error: 1_635 + .saturating_add(Weight::from_parts(41_679, 0).saturating_mul(s.into())) + .saturating_add(RocksDbWeight::get().reads(7_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) } /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(237), added: 2712, mode: `MaxEncodedLen`) /// Storage: `Staking::CurrentEra` (r:1 w:0) /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::SubPoolsStorage` (r:1 w:1) /// Proof: `NominationPools::SubPoolsStorage` (`max_values`: None, `max_size`: Some(24382), added: 26857, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) @@ -833,6 +865,8 @@ impl WeightInfo for () { /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) /// Storage: `System::Account` (r:1 w:1) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) /// Storage: `NominationPools::CounterForPoolMembers` (r:1 w:1) /// Proof: `NominationPools::CounterForPoolMembers` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `NominationPools::ClaimPermissions` (r:0 w:1) @@ -840,21 +874,21 @@ impl WeightInfo for () { /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_update(s: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `2171` + // Measured: `2207` // Estimated: `27847` - // Minimum execution time: 137_474_000 picoseconds. - Weight::from_parts(142_341_215, 27847) - // Standard Error: 3_468 - .saturating_add(Weight::from_parts(66_597, 0).saturating_mul(s.into())) - .saturating_add(RocksDbWeight::get().reads(10_u64)) - .saturating_add(RocksDbWeight::get().writes(8_u64)) + // Minimum execution time: 131_383_000 picoseconds. + Weight::from_parts(136_595_971, 27847) + // Standard Error: 2_715 + .saturating_add(Weight::from_parts(52_351, 0).saturating_mul(s.into())) + .saturating_add(RocksDbWeight::get().reads(11_u64)) + .saturating_add(RocksDbWeight::get().writes(9_u64)) } /// Storage: `NominationPools::PoolMembers` (r:1 w:1) /// Proof: `NominationPools::PoolMembers` (`max_values`: None, `max_size`: Some(237), added: 2712, mode: `MaxEncodedLen`) /// Storage: `Staking::CurrentEra` (r:1 w:0) /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::SubPoolsStorage` (r:1 w:1) /// Proof: `NominationPools::SubPoolsStorage` (`max_values`: None, `max_size`: Some(24382), added: 26857, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:1) @@ -863,16 +897,18 @@ impl WeightInfo for () { /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) /// Storage: `Staking::SlashingSpans` (r:1 w:0) /// Proof: `Staking::SlashingSpans` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Staking::Validators` (r:1 w:0) - /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) - /// Storage: `Staking::Nominators` (r:1 w:0) - /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) /// Storage: `Balances::Locks` (r:2 w:1) /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:2 w:1) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:2 w:2) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Staking::Validators` (r:1 w:0) + /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + /// Storage: `Staking::Nominators` (r:1 w:0) + /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) /// Storage: `NominationPools::CounterForPoolMembers` (r:1 w:1) /// Proof: `NominationPools::CounterForPoolMembers` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `NominationPools::ReversePoolIdLookup` (r:1 w:1) @@ -896,12 +932,12 @@ impl WeightInfo for () { /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_kill(_s: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `2526` + // Measured: `2525` // Estimated: `27847` - // Minimum execution time: 249_135_000 picoseconds. - Weight::from_parts(263_632_571, 27847) - .saturating_add(RocksDbWeight::get().reads(23_u64)) - .saturating_add(RocksDbWeight::get().writes(19_u64)) + // Minimum execution time: 233_314_000 picoseconds. + Weight::from_parts(241_694_316, 27847) + .saturating_add(RocksDbWeight::get().reads(24_u64)) + .saturating_add(RocksDbWeight::get().writes(20_u64)) } /// Storage: `NominationPools::LastPoolId` (r:1 w:1) /// Proof: `NominationPools::LastPoolId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) @@ -927,14 +963,12 @@ impl WeightInfo for () { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:1) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) - /// Storage: `Staking::Ledger` (r:1 w:1) - /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) - /// Storage: `Staking::CurrentEra` (r:1 w:0) - /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `Balances::Locks` (r:2 w:1) /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:2 w:1) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// Storage: `NominationPools::TotalValueLocked` (r:1 w:1) + /// Proof: `NominationPools::TotalValueLocked` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::CounterForRewardPools` (r:1 w:1) @@ -944,20 +978,22 @@ impl WeightInfo for () { /// Storage: `NominationPools::CounterForReversePoolIdLookup` (r:1 w:1) /// Proof: `NominationPools::CounterForReversePoolIdLookup` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) + /// Storage: `Staking::Ledger` (r:0 w:1) + /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) /// Storage: `Staking::Payee` (r:0 w:1) /// Proof: `Staking::Payee` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) fn create() -> Weight { // Proof Size summary in bytes: - // Measured: `1289` + // Measured: `1169` // Estimated: `8538` - // Minimum execution time: 214_207_000 picoseconds. - Weight::from_parts(221_588_000, 8538) - .saturating_add(RocksDbWeight::get().reads(24_u64)) - .saturating_add(RocksDbWeight::get().writes(16_u64)) + // Minimum execution time: 171_465_000 picoseconds. + Weight::from_parts(176_478_000, 8538) + .saturating_add(RocksDbWeight::get().reads(23_u64)) + .saturating_add(RocksDbWeight::get().writes(17_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:0) @@ -983,34 +1019,34 @@ impl WeightInfo for () { /// The range of component `n` is `[1, 16]`. fn nominate(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1849` + // Measured: `1808` // Estimated: `4556 + n * (2520 ±0)` - // Minimum execution time: 70_626_000 picoseconds. - Weight::from_parts(73_830_182, 4556) - // Standard Error: 24_496 - .saturating_add(Weight::from_parts(1_561_416, 0).saturating_mul(n.into())) + // Minimum execution time: 63_588_000 picoseconds. + Weight::from_parts(64_930_584, 4556) + // Standard Error: 9_167 + .saturating_add(Weight::from_parts(1_595_779, 0).saturating_mul(n.into())) .saturating_add(RocksDbWeight::get().reads(12_u64)) .saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(RocksDbWeight::get().writes(5_u64)) .saturating_add(Weight::from_parts(0, 2520).saturating_mul(n.into())) } /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:0) /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) fn set_state() -> Weight { // Proof Size summary in bytes: - // Measured: `1438` + // Measured: `1434` // Estimated: `4556` - // Minimum execution time: 36_542_000 picoseconds. - Weight::from_parts(37_644_000, 4556) + // Minimum execution time: 32_899_000 picoseconds. + Weight::from_parts(33_955_000, 4556) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::Metadata` (r:1 w:1) /// Proof: `NominationPools::Metadata` (`max_values`: None, `max_size`: Some(270), added: 2745, mode: `MaxEncodedLen`) /// Storage: `NominationPools::CounterForMetadata` (r:1 w:1) @@ -1018,12 +1054,12 @@ impl WeightInfo for () { /// The range of component `n` is `[1, 256]`. fn set_metadata(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `531` + // Measured: `532` // Estimated: `3735` - // Minimum execution time: 15_130_000 picoseconds. - Weight::from_parts(16_319_671, 3735) - // Standard Error: 351 - .saturating_add(Weight::from_parts(2_024, 0).saturating_mul(n.into())) + // Minimum execution time: 13_778_000 picoseconds. + Weight::from_parts(14_770_006, 3735) + // Standard Error: 151 + .saturating_add(Weight::from_parts(1_900, 0).saturating_mul(n.into())) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -1043,23 +1079,23 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 6_819_000 picoseconds. - Weight::from_parts(7_253_000, 0) + // Minimum execution time: 4_550_000 picoseconds. + Weight::from_parts(4_935_000, 0) .saturating_add(RocksDbWeight::get().writes(6_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) fn update_roles() -> Weight { // Proof Size summary in bytes: - // Measured: `531` - // Estimated: `3685` - // Minimum execution time: 19_596_000 picoseconds. - Weight::from_parts(20_828_000, 3685) + // Measured: `532` + // Estimated: `3719` + // Minimum execution time: 16_759_000 picoseconds. + Weight::from_parts(17_346_000, 3719) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:0) @@ -1078,15 +1114,15 @@ impl WeightInfo for () { /// Proof: `VoterList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn chill() -> Weight { // Proof Size summary in bytes: - // Measured: `2012` + // Measured: `1971` // Estimated: `4556` - // Minimum execution time: 68_551_000 picoseconds. - Weight::from_parts(71_768_000, 4556) + // Minimum execution time: 61_970_000 picoseconds. + Weight::from_parts(63_738_000, 4556) .saturating_add(RocksDbWeight::get().reads(9_u64)) .saturating_add(RocksDbWeight::get().writes(5_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) @@ -1095,34 +1131,45 @@ impl WeightInfo for () { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn set_commission() -> Weight { // Proof Size summary in bytes: - // Measured: `770` - // Estimated: `3685` - // Minimum execution time: 36_128_000 picoseconds. - Weight::from_parts(38_547_000, 3685) + // Measured: `804` + // Estimated: `3719` + // Minimum execution time: 31_950_000 picoseconds. + Weight::from_parts(33_190_000, 3719) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) /// Proof: `NominationPools::GlobalMaxCommission` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn set_commission_max() -> Weight { // Proof Size summary in bytes: - // Measured: `571` - // Estimated: `3685` - // Minimum execution time: 20_067_000 picoseconds. - Weight::from_parts(21_044_000, 3685) + // Measured: `572` + // Estimated: `3719` + // Minimum execution time: 16_807_000 picoseconds. + Weight::from_parts(17_733_000, 3719) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:1) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) fn set_commission_change_rate() -> Weight { // Proof Size summary in bytes: - // Measured: `531` - // Estimated: `3685` - // Minimum execution time: 19_186_000 picoseconds. - Weight::from_parts(20_189_000, 3685) + // Measured: `532` + // Estimated: `3719` + // Minimum execution time: 16_710_000 picoseconds. + Weight::from_parts(17_563_000, 3719) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `NominationPools::BondedPools` (r:1 w:1) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) + fn set_commission_claim_permission() -> Weight { + // Proof Size summary in bytes: + // Measured: `532` + // Estimated: `3719` + // Minimum execution time: 16_493_000 picoseconds. + Weight::from_parts(17_022_000, 3719) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -1134,13 +1181,13 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `542` // Estimated: `3702` - // Minimum execution time: 15_275_000 picoseconds. - Weight::from_parts(15_932_000, 3702) + // Minimum execution time: 14_248_000 picoseconds. + Weight::from_parts(15_095_000, 3702) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `NominationPools::RewardPools` (r:1 w:1) /// Proof: `NominationPools::RewardPools` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) /// Storage: `NominationPools::GlobalMaxCommission` (r:1 w:0) @@ -1149,15 +1196,15 @@ impl WeightInfo for () { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn claim_commission() -> Weight { // Proof Size summary in bytes: - // Measured: `968` - // Estimated: `3685` - // Minimum execution time: 67_931_000 picoseconds. - Weight::from_parts(72_202_000, 3685) + // Measured: `1002` + // Estimated: `3719` + // Minimum execution time: 61_969_000 picoseconds. + Weight::from_parts(63_965_000, 3719) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } /// Storage: `NominationPools::BondedPools` (r:1 w:0) - /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(220), added: 2695, mode: `MaxEncodedLen`) + /// Proof: `NominationPools::BondedPools` (`max_values`: None, `max_size`: Some(254), added: 2729, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:1 w:1) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) /// Storage: `System::Account` (r:1 w:1) @@ -1166,10 +1213,10 @@ impl WeightInfo for () { /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) fn adjust_pool_deposit() -> Weight { // Proof Size summary in bytes: - // Measured: `900` + // Measured: `901` // Estimated: `4764` - // Minimum execution time: 72_783_000 picoseconds. - Weight::from_parts(75_841_000, 4764) + // Minimum execution time: 65_462_000 picoseconds. + Weight::from_parts(67_250_000, 4764) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } -- GitLab From 0f7ffc66a59526968c5cad39edf63bb54ca11585 Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Tue, 28 Nov 2023 12:14:50 +0300 Subject: [PATCH 083/102] Added NetworkId::PolkadotBulletin variant (#2517) We're going to bridge Polkadot Bridge Hub with [Polkadot Bulletin chain](https://github.com/zdave-parity/polkadot-bulletin-chain) soon (and Rococo Bridge Hub with 1:1 copy of Polkadot Bulletin chain even sooner), so we need a variant for that chain in `NetworkId`. As suggested, I'm adding a new variant for it to the `NetworkId` (we may have used `ByGenesis(_)`, but decision was made to have a dedicated variant for that). --- polkadot/xcm/src/v3/junction.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/polkadot/xcm/src/v3/junction.rs b/polkadot/xcm/src/v3/junction.rs index 47429a8c36e..5e6e4ab903b 100644 --- a/polkadot/xcm/src/v3/junction.rs +++ b/polkadot/xcm/src/v3/junction.rs @@ -75,6 +75,8 @@ pub enum NetworkId { BitcoinCore, /// The Bitcoin network, including hard-forks supported by Bitcoin Cash developers. BitcoinCash, + /// The Polkadot Bulletin chain. + PolkadotBulletin, } impl From for Option { -- GitLab From 58a1f9c53dbf8766bd703b4fd417a9ca1ab99df3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= <123550+andresilva@users.noreply.github.com> Date: Tue, 28 Nov 2023 09:18:26 +0000 Subject: [PATCH 084/102] polkadot: disable block authoring backoff on production networks (#2510) Currently the polkadot node will backoff from block authoring if finality starts lagging. This PR disables this mechanism on production networks (polkadot and kusama) and adds a flags to optionally force enabling it. --- .../relay-chain-inprocess-interface/src/lib.rs | 1 + polkadot/cli/src/cli.rs | 4 ++++ polkadot/cli/src/command.rs | 1 + polkadot/node/service/src/lib.rs | 18 ++++++++++++++---- polkadot/node/test/service/src/lib.rs | 1 + .../test-parachains/adder/collator/src/main.rs | 1 + .../undying/collator/src/main.rs | 1 + 7 files changed, 23 insertions(+), 4 deletions(-) diff --git a/cumulus/client/relay-chain-inprocess-interface/src/lib.rs b/cumulus/client/relay-chain-inprocess-interface/src/lib.rs index 42a56b649f0..3d297af00f2 100644 --- a/cumulus/client/relay-chain-inprocess-interface/src/lib.rs +++ b/cumulus/client/relay-chain-inprocess-interface/src/lib.rs @@ -286,6 +286,7 @@ fn build_polkadot_full_node( grandpa_pause: None, // Disable BEEFY. It should not be required by the internal relay chain node. enable_beefy: false, + force_authoring_backoff: false, jaeger_agent: None, telemetry_worker_handle, diff --git a/polkadot/cli/src/cli.rs b/polkadot/cli/src/cli.rs index e20e35c9103..6a7a8b4ad7b 100644 --- a/polkadot/cli/src/cli.rs +++ b/polkadot/cli/src/cli.rs @@ -98,6 +98,10 @@ pub struct RunCmd { #[arg(long)] pub no_beefy: bool, + /// Enable the block authoring backoff that is triggered when finality is lagging. + #[arg(long)] + pub force_authoring_backoff: bool, + /// Add the destination address to the 'Jaeger' agent. /// /// Must be valid socket address, of format `IP:Port` (commonly `127.0.0.1:6831`). diff --git a/polkadot/cli/src/command.rs b/polkadot/cli/src/command.rs index 2dcf5e0e8d7..c9c3c39aab1 100644 --- a/polkadot/cli/src/command.rs +++ b/polkadot/cli/src/command.rs @@ -259,6 +259,7 @@ where is_parachain_node: service::IsParachainNode::No, grandpa_pause, enable_beefy, + force_authoring_backoff: cli.run.force_authoring_backoff, jaeger_agent, telemetry_worker_handle: None, node_version, diff --git a/polkadot/node/service/src/lib.rs b/polkadot/node/service/src/lib.rs index c03835b2a4b..fafdc586009 100644 --- a/polkadot/node/service/src/lib.rs +++ b/polkadot/node/service/src/lib.rs @@ -625,6 +625,9 @@ pub struct NewFullParams { pub is_parachain_node: IsParachainNode, pub grandpa_pause: Option<(u32, u32)>, pub enable_beefy: bool, + /// Whether to enable the block authoring backoff on production networks + /// where it isn't enabled by default. + pub force_authoring_backoff: bool, pub jaeger_agent: Option, pub telemetry_worker_handle: Option, /// The version of the node. TESTING ONLY: `None` can be passed to skip the node/worker version @@ -716,6 +719,7 @@ pub fn new_full( is_parachain_node, grandpa_pause, enable_beefy, + force_authoring_backoff, jaeger_agent, telemetry_worker_handle, node_version, @@ -733,15 +737,21 @@ pub fn new_full( let is_offchain_indexing_enabled = config.offchain_worker.indexing_enabled; let role = config.role.clone(); let force_authoring = config.force_authoring; - let backoff_authoring_blocks = { + let backoff_authoring_blocks = if !force_authoring_backoff && + (config.chain_spec.is_polkadot() || config.chain_spec.is_kusama()) + { + // the block authoring backoff is disabled by default on production networks + None + } else { let mut backoff = sc_consensus_slots::BackoffAuthoringOnFinalizedHeadLagging::default(); if config.chain_spec.is_rococo() || config.chain_spec.is_wococo() || - config.chain_spec.is_versi() + config.chain_spec.is_versi() || + config.chain_spec.is_dev() { - // it's a testnet that's in flux, finality has stalled sometimes due - // to operational issues and it's annoying to slow down block + // on testnets that are in flux (like rococo or versi), finality has stalled + // sometimes due to operational issues and it's annoying to slow down block // production to 1 block per hour. backoff.max_interval = 10; } diff --git a/polkadot/node/test/service/src/lib.rs b/polkadot/node/test/service/src/lib.rs index be2746daf32..a8352b60751 100644 --- a/polkadot/node/test/service/src/lib.rs +++ b/polkadot/node/test/service/src/lib.rs @@ -82,6 +82,7 @@ pub fn new_full( is_parachain_node, grandpa_pause: None, enable_beefy: true, + force_authoring_backoff: false, jaeger_agent: None, telemetry_worker_handle: None, node_version: None, diff --git a/polkadot/parachain/test-parachains/adder/collator/src/main.rs b/polkadot/parachain/test-parachains/adder/collator/src/main.rs index dfaa1973206..1558df6708d 100644 --- a/polkadot/parachain/test-parachains/adder/collator/src/main.rs +++ b/polkadot/parachain/test-parachains/adder/collator/src/main.rs @@ -64,6 +64,7 @@ fn main() -> Result<()> { ), grandpa_pause: None, enable_beefy: false, + force_authoring_backoff: false, jaeger_agent: None, telemetry_worker_handle: None, diff --git a/polkadot/parachain/test-parachains/undying/collator/src/main.rs b/polkadot/parachain/test-parachains/undying/collator/src/main.rs index c6b338a20dc..1db1b6f1102 100644 --- a/polkadot/parachain/test-parachains/undying/collator/src/main.rs +++ b/polkadot/parachain/test-parachains/undying/collator/src/main.rs @@ -84,6 +84,7 @@ fn main() -> Result<()> { ), grandpa_pause: None, enable_beefy: false, + force_authoring_backoff: false, jaeger_agent: None, telemetry_worker_handle: None, -- GitLab From 6dc3e6c909361c6643b8d91c2929c306de4aee4a Mon Sep 17 00:00:00 2001 From: Liam Aharon Date: Tue, 28 Nov 2023 14:02:48 +0400 Subject: [PATCH 085/102] Set `frame_system::LastRuntimeUpgrade` after running `try-runtime` migrations (#2515) Sets `frame_system::LastRuntimeUpgrade` after running try-runtime migrations to better emulate real behavior. This fixes an issue where migrations using the spec version to determine whether to execute can incorrectly fail idempotency checks. @s0me0ne-unkn0wn noticed this issue with the session key migration introduced in https://github.com/paritytech/polkadot-sdk/pull/2265. --- substrate/frame/executive/src/lib.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/substrate/frame/executive/src/lib.rs b/substrate/frame/executive/src/lib.rs index dec1fe158bd..4eb76325bab 100644 --- a/substrate/frame/executive/src/lib.rs +++ b/substrate/frame/executive/src/lib.rs @@ -362,9 +362,13 @@ where Ok(frame_system::Pallet::::block_weight().total()) } - /// Execute all `OnRuntimeUpgrade` of this runtime. + /// Execute all Migrations of this runtime. /// /// The `checks` param determines whether to execute `pre/post_upgrade` and `try_state` hooks. + /// + /// [`frame_system::LastRuntimeUpgrade`] is set to the current runtime version after + /// migrations execute. This is important for idempotency checks, because some migrations use + /// this value to determine whether or not they should execute. pub fn try_runtime_upgrade(checks: UpgradeCheckSelect) -> Result { let before_all_weight = ::before_all_runtime_migrations(); @@ -372,6 +376,13 @@ where <(COnRuntimeUpgrade, AllPalletsWithSystem) as OnRuntimeUpgrade>::try_on_runtime_upgrade( checks.pre_and_post(), )?; + + frame_system::LastRuntimeUpgrade::::put( + frame_system::LastRuntimeUpgradeInfo::from( + >::get(), + ), + ); + // Nothing should modify the state after the migrations ran: let _guard = StorageNoopGuard::default(); -- GitLab From 6a417eb9c22f329f252bb48afe705fc43962817c Mon Sep 17 00:00:00 2001 From: Vladimir Istyufeev Date: Tue, 28 Nov 2023 15:02:10 +0400 Subject: [PATCH 086/102] Increase `cargo-check-each-crate-macos` timeout (#2519) --- .gitlab/pipeline/test.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitlab/pipeline/test.yml b/.gitlab/pipeline/test.yml index 9c3fa7701c8..190249d2d0f 100644 --- a/.gitlab/pipeline/test.yml +++ b/.gitlab/pipeline/test.yml @@ -270,7 +270,7 @@ cargo-check-benches: SKIP_WASM_BUILD=1 time cargo check --locked --benches --all; cargo run --locked --release -p node-bench -- ::trie::read::small --json | tee ./artifacts/benches/$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA/::trie::read::small.json; - echo "___Uploading cache for rusty-cachier___"; + echo "___Cache could be uploaded___"; ;; 2) cargo run --locked --release -p node-bench -- ::node::import::sr25519::transfer_keep_alive::paritydb::small --json @@ -439,7 +439,7 @@ cargo-check-each-crate: - .run-immediately # - .collect-artifacts variables: - # $CI_JOB_NAME is set manually so that rusty-cachier can share the cache for all + # $CI_JOB_NAME is set manually so that cache could be shared for all jobs # "cargo-check-each-crate I/N" jobs CI_JOB_NAME: cargo-check-each-crate timeout: 2h @@ -462,10 +462,10 @@ cargo-check-each-crate-macos: variables: SKIP_WASM_BUILD: 1 script: - # TODO: enable rusty-cachier once it supports Mac # TODO: use parallel jobs, as per cargo-check-each-crate, once more Mac runners are available # - time ./scripts/ci/gitlab/check-each-crate.py 1 1 - time cargo check --workspace --locked + timeout: 2h tags: - osx @@ -488,7 +488,7 @@ cargo-hfuzz: # use git version of honggfuzz-rs until v0.5.56 is out, we need a few recent changes: # https://github.com/rust-fuzz/honggfuzz-rs/pull/75 to avoid breakage on debian # https://github.com/rust-fuzz/honggfuzz-rs/pull/81 fix to the above pr - # https://github.com/rust-fuzz/honggfuzz-rs/pull/82 fix for handling rusty-cachier's absolute CARGO_TARGET_DIR + # https://github.com/rust-fuzz/honggfuzz-rs/pull/82 fix for handling absolute CARGO_TARGET_DIR HFUZZ_BUILD_ARGS: > --config=patch.crates-io.honggfuzz.git="https://github.com/altaua/honggfuzz-rs" --config=patch.crates-io.honggfuzz.rev="205f7c8c059a0d98fe1cb912cdac84f324cb6981" -- GitLab From cd8741c8b591407a78fdfef1dccdd3b5d03e13f4 Mon Sep 17 00:00:00 2001 From: gupnik <17176722+gupnik@users.noreply.github.com> Date: Tue, 28 Nov 2023 18:43:57 +0530 Subject: [PATCH 087/102] Moves all test runtimes to use `derive_impl` (#2409) Step in https://github.com/paritytech/polkadot-sdk/issues/171 This PR adds `derive_impl` on all `frame_system` config impls for mock runtimes. The overridden configs are maintained as of now to ensure minimal changes. --------- Co-authored-by: Oliver Tale-Yazdi --- cumulus/pallets/xcmp-queue/src/mock.rs | 3 +- cumulus/parachains/common/src/impls.rs | 3 +- .../pallets/collective-content/src/mock.rs | 3 +- .../runtimes/starters/seedling/src/lib.rs | 4 +- .../runtimes/starters/shell/src/lib.rs | 3 +- .../runtimes/testing/penpal/src/lib.rs | 3 +- .../testing/rococo-parachain/src/lib.rs | 3 +- .../runtime/common/src/assigned_slots/mod.rs | 4 +- polkadot/runtime/common/src/auctions.rs | 5 +- polkadot/runtime/common/src/claims.rs | 4 +- polkadot/runtime/common/src/crowdloan/mod.rs | 3 +- polkadot/runtime/common/src/impls.rs | 2 + .../runtime/common/src/integration_tests.rs | 3 +- .../runtime/common/src/paras_registrar/mod.rs | 3 +- polkadot/runtime/common/src/purchase.rs | 4 +- polkadot/runtime/common/src/slots/mod.rs | 4 +- polkadot/runtime/parachains/src/mock.rs | 3 +- .../src/fungible/mock.rs | 2 + .../pallet-xcm-benchmarks/src/generic/mock.rs | 1 + polkadot/xcm/pallet-xcm/src/mock.rs | 3 +- polkadot/xcm/procedural/tests/ui.rs | 2 +- polkadot/xcm/xcm-builder/tests/mock/mod.rs | 3 +- .../xcm-simulator/example/src/parachain.rs | 3 +- .../xcm-simulator/example/src/relay_chain.rs | 3 +- .../xcm/xcm-simulator/fuzzer/src/parachain.rs | 3 +- .../xcm-simulator/fuzzer/src/relay_chain.rs | 3 +- .../pallets/template/src/mock.rs | 6 +- .../src/chain_head/subscription/inner.rs | 2 +- substrate/frame/asset-conversion/src/mock.rs | 3 +- substrate/frame/asset-rate/src/mock.rs | 6 +- substrate/frame/assets/src/mock.rs | 3 +- substrate/frame/atomic-swap/src/tests.rs | 6 +- substrate/frame/aura/src/mock.rs | 3 +- .../frame/authority-discovery/src/lib.rs | 3 +- substrate/frame/balances/src/tests/mod.rs | 4 +- .../benchmarking/pov/src/benchmarking.rs | 2 + substrate/frame/benchmarking/pov/src/tests.rs | 2 + substrate/frame/benchmarking/src/baseline.rs | 2 + substrate/frame/benchmarking/src/tests.rs | 3 +- .../frame/benchmarking/src/tests_instance.rs | 3 +- substrate/frame/bounties/src/tests.rs | 3 +- substrate/frame/broker/src/mock.rs | 3 +- substrate/frame/child-bounties/src/tests.rs | 3 +- substrate/frame/collective/src/tests.rs | 4 +- .../contracts/mock-network/src/parachain.rs | 3 +- .../contracts/mock-network/src/relay_chain.rs | 3 +- substrate/frame/contracts/src/tests.rs | 3 + .../frame/conviction-voting/src/tests.rs | 3 +- substrate/frame/core-fellowship/src/tests.rs | 4 +- substrate/frame/democracy/src/tests.rs | 4 +- .../election-provider-multi-phase/src/mock.rs | 3 +- .../election-provider-support/src/onchain.rs | 3 +- substrate/frame/elections-phragmen/src/lib.rs | 3 +- substrate/frame/examples/basic/src/tests.rs | 3 +- .../frame/examples/dev-mode/src/tests.rs | 3 +- .../examples/offchain-worker/src/tests.rs | 3 +- substrate/frame/executive/src/lib.rs | 3 +- substrate/frame/glutton/src/mock.rs | 3 +- substrate/frame/grandpa/src/mock.rs | 3 +- substrate/frame/identity/src/tests.rs | 3 +- substrate/frame/im-online/src/mock.rs | 3 +- substrate/frame/indices/src/mock.rs | 6 +- .../src/lib.rs | 3 +- substrate/frame/lottery/src/mock.rs | 3 +- substrate/frame/membership/src/lib.rs | 3 +- .../message-queue/src/integration_test.rs | 3 +- substrate/frame/message-queue/src/mock.rs | 4 +- .../frame/nft-fractionalization/src/mock.rs | 4 +- substrate/frame/nfts/src/mock.rs | 3 +- substrate/frame/nicks/src/lib.rs | 3 +- substrate/frame/nis/src/mock.rs | 3 +- .../frame/node-authorization/src/mock.rs | 3 +- .../nomination-pools/benchmarking/src/mock.rs | 3 +- substrate/frame/nomination-pools/src/mock.rs | 3 +- .../nomination-pools/test-staking/src/mock.rs | 3 +- .../frame/offences/benchmarking/src/mock.rs | 3 +- substrate/frame/offences/src/mock.rs | 3 +- substrate/frame/paged-list/src/mock.rs | 6 +- substrate/frame/preimage/src/mock.rs | 3 +- .../frame/ranked-collective/src/tests.rs | 3 +- substrate/frame/recovery/src/mock.rs | 3 +- substrate/frame/referenda/src/mock.rs | 3 +- substrate/frame/remark/src/mock.rs | 6 +- substrate/frame/root-offences/src/mock.rs | 3 +- substrate/frame/safe-mode/src/mock.rs | 3 +- substrate/frame/salary/src/tests.rs | 4 +- substrate/frame/scored-pool/src/mock.rs | 3 +- .../frame/session/benchmarking/src/mock.rs | 3 +- substrate/frame/session/src/mock.rs | 3 +- substrate/frame/society/src/mock.rs | 3 +- substrate/frame/staking/src/mock.rs | 3 +- .../frame/state-trie-migration/src/lib.rs | 3 +- substrate/frame/statement/src/mock.rs | 3 +- substrate/frame/sudo/src/mock.rs | 6 +- .../number_of_pallets_exceeds_tuple_size.rs | 3 +- ...umber_of_pallets_exceeds_tuple_size.stderr | 26 ++--- .../pallet_error_too_large.rs | 3 +- .../pallet_error_too_large.stderr | 18 ++-- .../undefined_call_part.rs | 3 +- .../undefined_call_part.stderr | 14 +-- .../undefined_event_part.rs | 3 +- .../undefined_event_part.stderr | 30 +++--- .../undefined_genesis_config_part.rs | 3 +- .../undefined_genesis_config_part.stderr | 30 +++--- .../undefined_inherent_part.rs | 3 +- .../undefined_inherent_part.stderr | 94 +++++++++---------- .../undefined_origin_part.rs | 3 +- .../undefined_origin_part.stderr | 30 +++--- .../undefined_validate_unsigned_part.rs | 3 +- .../undefined_validate_unsigned_part.stderr | 58 ++++++------ substrate/frame/support/test/tests/pallet.rs | 3 +- .../support/test/tests/pallet_instance.rs | 2 + .../tests/pallet_ui/pass/dev_mode_valid.rs | 3 +- .../pallet_ui/pass/no_std_genesis_config.rs | 3 +- .../support/test/tests/runtime_metadata.rs | 3 +- .../support/test/tests/storage_layers.rs | 5 +- substrate/frame/system/benches/bench.rs | 7 +- .../frame/system/benchmarking/src/mock.rs | 2 + substrate/frame/timestamp/src/mock.rs | 3 +- substrate/frame/tips/src/tests.rs | 4 +- .../asset-conversion-tx-payment/src/mock.rs | 2 + .../asset-tx-payment/src/mock.rs | 2 + .../frame/transaction-payment/src/mock.rs | 2 + substrate/frame/treasury/src/tests.rs | 3 +- substrate/frame/tx-pause/src/mock.rs | 3 +- substrate/frame/uniques/src/mock.rs | 3 +- substrate/frame/utility/src/tests.rs | 3 +- substrate/frame/vesting/src/mock.rs | 3 +- substrate/frame/whitelist/src/mock.rs | 3 +- substrate/utils/frame/rpc/support/src/lib.rs | 3 +- 130 files changed, 433 insertions(+), 261 deletions(-) diff --git a/cumulus/pallets/xcmp-queue/src/mock.rs b/cumulus/pallets/xcmp-queue/src/mock.rs index 7c3a3bd1bd0..755b685d5b8 100644 --- a/cumulus/pallets/xcmp-queue/src/mock.rs +++ b/cumulus/pallets/xcmp-queue/src/mock.rs @@ -19,7 +19,7 @@ use core::marker::PhantomData; use cumulus_pallet_parachain_system::AnyRelayNumber; use cumulus_primitives_core::{ChannelInfo, IsSystem, ParaId}; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, Everything, Nothing, OriginTrait}, BoundedSlice, }; @@ -55,6 +55,7 @@ parameter_types! { type AccountId = u64; +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = Everything; type BlockWeights = (); diff --git a/cumulus/parachains/common/src/impls.rs b/cumulus/parachains/common/src/impls.rs index 81d78baba54..50cb1c7f3e8 100644 --- a/cumulus/parachains/common/src/impls.rs +++ b/cumulus/parachains/common/src/impls.rs @@ -122,7 +122,7 @@ impl> ContainsPair for AssetsFr mod tests { use super::*; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, FindAuthor, ValidatorRegistration}, PalletId, }; @@ -155,6 +155,7 @@ mod tests { pub const MaxReserves: u32 = 50; } + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type RuntimeOrigin = RuntimeOrigin; diff --git a/cumulus/parachains/pallets/collective-content/src/mock.rs b/cumulus/parachains/pallets/collective-content/src/mock.rs index 2ae5943f332..7a752da71fc 100644 --- a/cumulus/parachains/pallets/collective-content/src/mock.rs +++ b/cumulus/parachains/pallets/collective-content/src/mock.rs @@ -18,7 +18,7 @@ pub use crate as pallet_collective_content; use crate::WeightInfo; use frame_support::{ - ord_parameter_types, parameter_types, + derive_impl, ord_parameter_types, parameter_types, traits::{ConstU32, ConstU64}, weights::Weight, }; @@ -55,6 +55,7 @@ impl pallet_collective_content::Config for Test { type WeightInfo = CCWeightInfo; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = (); type BlockWeights = (); diff --git a/cumulus/parachains/runtimes/starters/seedling/src/lib.rs b/cumulus/parachains/runtimes/starters/seedling/src/lib.rs index 7619ed19798..cb868627e79 100644 --- a/cumulus/parachains/runtimes/starters/seedling/src/lib.rs +++ b/cumulus/parachains/runtimes/starters/seedling/src/lib.rs @@ -44,7 +44,7 @@ use sp_version::RuntimeVersion; // A few exports that help ease life for downstream crates. pub use frame_support::{ - construct_runtime, + construct_runtime, derive_impl, dispatch::DispatchClass, genesis_builder_helper::{build_config, create_default_config}, parameter_types, @@ -134,6 +134,8 @@ parameter_types! { .build_or_panic(); pub const SS58Prefix: u8 = 42; } + +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { /// The identifier used to distinguish between accounts. type AccountId = AccountId; diff --git a/cumulus/parachains/runtimes/starters/shell/src/lib.rs b/cumulus/parachains/runtimes/starters/shell/src/lib.rs index f67c0c19ec6..de95969f71d 100644 --- a/cumulus/parachains/runtimes/starters/shell/src/lib.rs +++ b/cumulus/parachains/runtimes/starters/shell/src/lib.rs @@ -52,7 +52,7 @@ use sp_version::RuntimeVersion; // A few exports that help ease life for downstream crates. pub use frame_support::{ - construct_runtime, + construct_runtime, derive_impl, dispatch::DispatchClass, genesis_builder_helper::{build_config, create_default_config}, parameter_types, @@ -143,6 +143,7 @@ parameter_types! { pub const SS58Prefix: u8 = 42; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { /// The identifier used to distinguish between accounts. type AccountId = AccountId; diff --git a/cumulus/parachains/runtimes/testing/penpal/src/lib.rs b/cumulus/parachains/runtimes/testing/penpal/src/lib.rs index b2a04272a4a..9387c454715 100644 --- a/cumulus/parachains/runtimes/testing/penpal/src/lib.rs +++ b/cumulus/parachains/runtimes/testing/penpal/src/lib.rs @@ -35,7 +35,7 @@ pub mod xcm_config; use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; use cumulus_primitives_core::{AggregateMessageOrigin, ParaId}; use frame_support::{ - construct_runtime, + construct_runtime, derive_impl, dispatch::DispatchClass, genesis_builder_helper::{build_config, create_default_config}, pallet_prelude::Weight, @@ -323,6 +323,7 @@ parameter_types! { // Configure FRAME pallets to include in runtime. +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { /// The identifier used to distinguish between accounts. type AccountId = AccountId; diff --git a/cumulus/parachains/runtimes/testing/rococo-parachain/src/lib.rs b/cumulus/parachains/runtimes/testing/rococo-parachain/src/lib.rs index 3a890d7953a..9d2ba98a67c 100644 --- a/cumulus/parachains/runtimes/testing/rococo-parachain/src/lib.rs +++ b/cumulus/parachains/runtimes/testing/rococo-parachain/src/lib.rs @@ -39,7 +39,7 @@ use sp_version::RuntimeVersion; // A few exports that help ease life for downstream crates. pub use frame_support::{ - construct_runtime, + construct_runtime, derive_impl, dispatch::DispatchClass, genesis_builder_helper::{build_config, create_default_config}, match_types, parameter_types, @@ -184,6 +184,7 @@ parameter_types! { pub const SS58Prefix: u8 = 42; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { /// The identifier used to distinguish between accounts. type AccountId = AccountId; diff --git a/polkadot/runtime/common/src/assigned_slots/mod.rs b/polkadot/runtime/common/src/assigned_slots/mod.rs index cb2e5083b0a..f5e3aaef632 100644 --- a/polkadot/runtime/common/src/assigned_slots/mod.rs +++ b/polkadot/runtime/common/src/assigned_slots/mod.rs @@ -636,7 +636,7 @@ mod tests { use crate::{assigned_slots, mock::TestRegistrar, slots}; use ::test_helpers::{dummy_head_data, dummy_validation_code}; - use frame_support::{assert_noop, assert_ok, parameter_types}; + use frame_support::{assert_noop, assert_ok, derive_impl, parameter_types}; use frame_system::EnsureRoot; use pallet_balances; use primitives::BlockNumber; @@ -679,6 +679,8 @@ mod tests { parameter_types! { pub const BlockHashCount: u32 = 250; } + + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/polkadot/runtime/common/src/auctions.rs b/polkadot/runtime/common/src/auctions.rs index 267413eb1ba..baa66d83a3f 100644 --- a/polkadot/runtime/common/src/auctions.rs +++ b/polkadot/runtime/common/src/auctions.rs @@ -677,7 +677,8 @@ mod tests { use crate::{auctions, mock::TestRegistrar}; use ::test_helpers::{dummy_hash, dummy_head_data, dummy_validation_code}; use frame_support::{ - assert_noop, assert_ok, assert_storage_noop, ord_parameter_types, parameter_types, + assert_noop, assert_ok, assert_storage_noop, derive_impl, ord_parameter_types, + parameter_types, traits::{ConstU32, EitherOfDiverse, OnFinalize, OnInitialize}, }; use frame_system::{EnsureRoot, EnsureSignedBy}; @@ -705,6 +706,8 @@ mod tests { parameter_types! { pub const BlockHashCount: u32 = 250; } + + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/polkadot/runtime/common/src/claims.rs b/polkadot/runtime/common/src/claims.rs index 548adc6fbd5..4f04a79be55 100644 --- a/polkadot/runtime/common/src/claims.rs +++ b/polkadot/runtime/common/src/claims.rs @@ -710,7 +710,7 @@ mod tests { use crate::claims; use claims::Call as ClaimsCall; use frame_support::{ - assert_err, assert_noop, assert_ok, + assert_err, assert_noop, assert_ok, derive_impl, dispatch::{GetDispatchInfo, Pays}, ord_parameter_types, parameter_types, traits::{ConstU32, ExistenceRequirement, WithdrawReasons}, @@ -739,6 +739,8 @@ mod tests { parameter_types! { pub const BlockHashCount: u32 = 250; } + + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/polkadot/runtime/common/src/crowdloan/mod.rs b/polkadot/runtime/common/src/crowdloan/mod.rs index f67fc12a67f..77ef406e579 100644 --- a/polkadot/runtime/common/src/crowdloan/mod.rs +++ b/polkadot/runtime/common/src/crowdloan/mod.rs @@ -863,7 +863,7 @@ mod tests { use super::*; use frame_support::{ - assert_noop, assert_ok, parameter_types, + assert_noop, assert_ok, derive_impl, parameter_types, traits::{ConstU32, OnFinalize, OnInitialize}, }; use primitives::Id as ParaId; @@ -900,6 +900,7 @@ mod tests { type BlockNumber = u64; + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/polkadot/runtime/common/src/impls.rs b/polkadot/runtime/common/src/impls.rs index e50ffb634b3..60e631a03ee 100644 --- a/polkadot/runtime/common/src/impls.rs +++ b/polkadot/runtime/common/src/impls.rs @@ -192,6 +192,7 @@ pub mod benchmarks { mod tests { use super::*; use frame_support::{ + derive_impl, dispatch::DispatchClass, parameter_types, traits::{ @@ -237,6 +238,7 @@ mod tests { pub const AvailableBlockRatio: Perbill = Perbill::one(); } + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type RuntimeOrigin = RuntimeOrigin; diff --git a/polkadot/runtime/common/src/integration_tests.rs b/polkadot/runtime/common/src/integration_tests.rs index 793f75e79cd..b0d277a702d 100644 --- a/polkadot/runtime/common/src/integration_tests.rs +++ b/polkadot/runtime/common/src/integration_tests.rs @@ -25,7 +25,7 @@ use crate::{ traits::{AuctionStatus, Auctioneer, Leaser, Registrar as RegistrarT}, }; use frame_support::{ - assert_noop, assert_ok, parameter_types, + assert_noop, assert_ok, derive_impl, parameter_types, traits::{ConstU32, Currency, OnFinalize, OnInitialize}, weights::Weight, PalletId, @@ -114,6 +114,7 @@ parameter_types! { ); } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = BlockWeights; diff --git a/polkadot/runtime/common/src/paras_registrar/mod.rs b/polkadot/runtime/common/src/paras_registrar/mod.rs index 2d33cf28993..12376ae6f1f 100644 --- a/polkadot/runtime/common/src/paras_registrar/mod.rs +++ b/polkadot/runtime/common/src/paras_registrar/mod.rs @@ -699,7 +699,7 @@ mod tests { mock::conclude_pvf_checking, paras_registrar, traits::Registrar as RegistrarTrait, }; use frame_support::{ - assert_noop, assert_ok, + assert_noop, assert_ok, derive_impl, error::BadOrigin, parameter_types, traits::{ConstU32, OnFinalize, OnInitialize}, @@ -751,6 +751,7 @@ mod tests { limits::BlockLength::max_with_normal_ratio(4 * 1024 * 1024, NORMAL_RATIO); } + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type RuntimeOrigin = RuntimeOrigin; diff --git a/polkadot/runtime/common/src/purchase.rs b/polkadot/runtime/common/src/purchase.rs index bc95483dd7e..06b0a0a0211 100644 --- a/polkadot/runtime/common/src/purchase.rs +++ b/polkadot/runtime/common/src/purchase.rs @@ -484,7 +484,7 @@ mod tests { // or public keys. `u64` is used as the `AccountId` and no `Signature`s are required. use crate::purchase; use frame_support::{ - assert_noop, assert_ok, ord_parameter_types, parameter_types, + assert_noop, assert_ok, derive_impl, ord_parameter_types, parameter_types, traits::{Currency, WithdrawReasons}, }; use sp_runtime::{ @@ -511,6 +511,8 @@ mod tests { parameter_types! { pub const BlockHashCount: u32 = 250; } + + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/polkadot/runtime/common/src/slots/mod.rs b/polkadot/runtime/common/src/slots/mod.rs index 01f6365b791..c3aaf8b51b8 100644 --- a/polkadot/runtime/common/src/slots/mod.rs +++ b/polkadot/runtime/common/src/slots/mod.rs @@ -505,7 +505,7 @@ mod tests { use crate::{mock::TestRegistrar, slots}; use ::test_helpers::{dummy_head_data, dummy_validation_code}; - use frame_support::{assert_noop, assert_ok, parameter_types}; + use frame_support::{assert_noop, assert_ok, derive_impl, parameter_types}; use frame_system::EnsureRoot; use pallet_balances; use primitives::BlockNumber; @@ -529,6 +529,8 @@ mod tests { parameter_types! { pub const BlockHashCount: u32 = 250; } + + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/polkadot/runtime/parachains/src/mock.rs b/polkadot/runtime/parachains/src/mock.rs index 9df54bf29d3..222942922f9 100644 --- a/polkadot/runtime/parachains/src/mock.rs +++ b/polkadot/runtime/parachains/src/mock.rs @@ -25,7 +25,7 @@ use crate::{ }; use frame_support::{ - assert_ok, parameter_types, + assert_ok, derive_impl, parameter_types, traits::{ Currency, ProcessMessage, ProcessMessageError, ValidatorSet, ValidatorSetWithIdentification, }, @@ -94,6 +94,7 @@ parameter_types! { pub type AccountId = u64; +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = BlockWeights; diff --git a/polkadot/xcm/pallet-xcm-benchmarks/src/fungible/mock.rs b/polkadot/xcm/pallet-xcm-benchmarks/src/fungible/mock.rs index 9adc706fc18..4d566fd585d 100644 --- a/polkadot/xcm/pallet-xcm-benchmarks/src/fungible/mock.rs +++ b/polkadot/xcm/pallet-xcm-benchmarks/src/fungible/mock.rs @@ -45,6 +45,8 @@ parameter_types! { pub BlockWeights: frame_system::limits::BlockWeights = frame_system::limits::BlockWeights::simple_max(Weight::from_parts(1024, u64::MAX)); } + +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = Everything; type BlockWeights = (); diff --git a/polkadot/xcm/pallet-xcm-benchmarks/src/generic/mock.rs b/polkadot/xcm/pallet-xcm-benchmarks/src/generic/mock.rs index 710ff0d8019..6efd2304e28 100644 --- a/polkadot/xcm/pallet-xcm-benchmarks/src/generic/mock.rs +++ b/polkadot/xcm/pallet-xcm-benchmarks/src/generic/mock.rs @@ -51,6 +51,7 @@ parameter_types! { frame_system::limits::BlockWeights::simple_max(Weight::from_parts(1024, u64::MAX)); } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = Everything; type BlockWeights = (); diff --git a/polkadot/xcm/pallet-xcm/src/mock.rs b/polkadot/xcm/pallet-xcm/src/mock.rs index 0b0f795100c..606d51bb8bc 100644 --- a/polkadot/xcm/pallet-xcm/src/mock.rs +++ b/polkadot/xcm/pallet-xcm/src/mock.rs @@ -16,7 +16,7 @@ use codec::Encode; use frame_support::{ - construct_runtime, match_types, parameter_types, + construct_runtime, derive_impl, match_types, parameter_types, traits::{ AsEnsureOriginWithArg, ConstU128, ConstU32, Contains, Equals, Everything, EverythingBut, Nothing, @@ -246,6 +246,7 @@ parameter_types! { pub const BlockHashCount: u64 = 250; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; diff --git a/polkadot/xcm/procedural/tests/ui.rs b/polkadot/xcm/procedural/tests/ui.rs index a30f4d7dee5..b3469b520eb 100644 --- a/polkadot/xcm/procedural/tests/ui.rs +++ b/polkadot/xcm/procedural/tests/ui.rs @@ -21,7 +21,7 @@ fn ui() { // Only run the ui tests when `RUN_UI_TESTS` is set. if std::env::var("RUN_UI_TESTS").is_err() { - return; + return } // As trybuild is using `cargo check`, we don't need the real WASM binaries. diff --git a/polkadot/xcm/xcm-builder/tests/mock/mod.rs b/polkadot/xcm/xcm-builder/tests/mock/mod.rs index 4f183c7a15b..968b294c6a4 100644 --- a/polkadot/xcm/xcm-builder/tests/mock/mod.rs +++ b/polkadot/xcm/xcm-builder/tests/mock/mod.rs @@ -15,7 +15,7 @@ // along with Polkadot. If not, see . use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, derive_impl, parameter_types, traits::{ConstU32, Everything, Nothing}, weights::Weight, }; @@ -76,6 +76,7 @@ parameter_types! { pub const BlockHashCount: u64 = 250; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; diff --git a/polkadot/xcm/xcm-simulator/example/src/parachain.rs b/polkadot/xcm/xcm-simulator/example/src/parachain.rs index 9f0411970ce..951e946372d 100644 --- a/polkadot/xcm/xcm-simulator/example/src/parachain.rs +++ b/polkadot/xcm/xcm-simulator/example/src/parachain.rs @@ -19,7 +19,7 @@ use codec::{Decode, Encode}; use core::marker::PhantomData; use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, derive_impl, parameter_types, traits::{ContainsPair, EnsureOrigin, EnsureOriginWithArg, Everything, EverythingBut, Nothing}, weights::{constants::WEIGHT_REF_TIME_PER_SECOND, Weight}, }; @@ -63,6 +63,7 @@ parameter_types! { pub const BlockHashCount: u64 = 250; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; diff --git a/polkadot/xcm/xcm-simulator/example/src/relay_chain.rs b/polkadot/xcm/xcm-simulator/example/src/relay_chain.rs index bdd7ff6d3ea..20070d192b5 100644 --- a/polkadot/xcm/xcm-simulator/example/src/relay_chain.rs +++ b/polkadot/xcm/xcm-simulator/example/src/relay_chain.rs @@ -17,7 +17,7 @@ //! Relay chain runtime mock. use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, derive_impl, parameter_types, traits::{AsEnsureOriginWithArg, Everything, Nothing, ProcessMessage, ProcessMessageError}, weights::{Weight, WeightMeter}, }; @@ -49,6 +49,7 @@ parameter_types! { pub const BlockHashCount: u64 = 250; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; diff --git a/polkadot/xcm/xcm-simulator/fuzzer/src/parachain.rs b/polkadot/xcm/xcm-simulator/fuzzer/src/parachain.rs index 41234837aca..0aa1b54f5e7 100644 --- a/polkadot/xcm/xcm-simulator/fuzzer/src/parachain.rs +++ b/polkadot/xcm/xcm-simulator/fuzzer/src/parachain.rs @@ -18,7 +18,7 @@ use codec::{Decode, Encode}; use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, derive_impl, parameter_types, traits::{Everything, Nothing}, weights::{constants::WEIGHT_REF_TIME_PER_SECOND, Weight}, }; @@ -52,6 +52,7 @@ parameter_types! { pub const BlockHashCount: u64 = 250; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; diff --git a/polkadot/xcm/xcm-simulator/fuzzer/src/relay_chain.rs b/polkadot/xcm/xcm-simulator/fuzzer/src/relay_chain.rs index c9a57db970a..085773f3073 100644 --- a/polkadot/xcm/xcm-simulator/fuzzer/src/relay_chain.rs +++ b/polkadot/xcm/xcm-simulator/fuzzer/src/relay_chain.rs @@ -17,7 +17,7 @@ //! Relay chain runtime mock. use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, derive_impl, parameter_types, traits::{Everything, Nothing, ProcessMessage, ProcessMessageError}, weights::{Weight, WeightMeter}, }; @@ -48,6 +48,7 @@ parameter_types! { pub const BlockHashCount: u64 = 250; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; diff --git a/substrate/bin/node-template/pallets/template/src/mock.rs b/substrate/bin/node-template/pallets/template/src/mock.rs index 244ae1b3785..8346461e6ed 100644 --- a/substrate/bin/node-template/pallets/template/src/mock.rs +++ b/substrate/bin/node-template/pallets/template/src/mock.rs @@ -1,5 +1,8 @@ use crate as pallet_template; -use frame_support::traits::{ConstU16, ConstU64}; +use frame_support::{ + derive_impl, + traits::{ConstU16, ConstU64}, +}; use sp_core::H256; use sp_runtime::{ traits::{BlakeTwo256, IdentityLookup}, @@ -17,6 +20,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/client/rpc-spec-v2/src/chain_head/subscription/inner.rs b/substrate/client/rpc-spec-v2/src/chain_head/subscription/inner.rs index abd42ad9678..2b250f3dc2c 100644 --- a/substrate/client/rpc-spec-v2/src/chain_head/subscription/inner.rs +++ b/substrate/client/rpc-spec-v2/src/chain_head/subscription/inner.rs @@ -763,7 +763,7 @@ impl> SubscriptionsInner { // blocks. for hash in hashes.clone() { if !sub.contains_block(hash) { - return Err(SubscriptionManagementError::BlockHashAbsent); + return Err(SubscriptionManagementError::BlockHashAbsent) } } diff --git a/substrate/frame/asset-conversion/src/mock.rs b/substrate/frame/asset-conversion/src/mock.rs index 4eee701f193..c84263b0796 100644 --- a/substrate/frame/asset-conversion/src/mock.rs +++ b/substrate/frame/asset-conversion/src/mock.rs @@ -21,7 +21,7 @@ use super::*; use crate as pallet_asset_conversion; use frame_support::{ - construct_runtime, + construct_runtime, derive_impl, instances::{Instance1, Instance2}, ord_parameter_types, parameter_types, traits::{AsEnsureOriginWithArg, ConstU128, ConstU32, ConstU64}, @@ -48,6 +48,7 @@ construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/asset-rate/src/mock.rs b/substrate/frame/asset-rate/src/mock.rs index 9ca0f0f3cc3..041f3740952 100644 --- a/substrate/frame/asset-rate/src/mock.rs +++ b/substrate/frame/asset-rate/src/mock.rs @@ -18,7 +18,10 @@ //! The crate's mock. use crate as pallet_asset_rate; -use frame_support::traits::{ConstU16, ConstU64}; +use frame_support::{ + derive_impl, + traits::{ConstU16, ConstU64}, +}; use sp_core::H256; use sp_runtime::{ traits::{BlakeTwo256, IdentityLookup}, @@ -36,6 +39,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/assets/src/mock.rs b/substrate/frame/assets/src/mock.rs index 2c2203bcdad..a4d85b64922 100644 --- a/substrate/frame/assets/src/mock.rs +++ b/substrate/frame/assets/src/mock.rs @@ -22,7 +22,7 @@ use crate as pallet_assets; use codec::Encode; use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, derive_impl, parameter_types, traits::{AsEnsureOriginWithArg, ConstU32, ConstU64}, }; use sp_core::H256; @@ -46,6 +46,7 @@ construct_runtime!( type AccountId = u64; type AssetId = u32; +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/atomic-swap/src/tests.rs b/substrate/frame/atomic-swap/src/tests.rs index 92eb9a04458..7e2f22b1836 100644 --- a/substrate/frame/atomic-swap/src/tests.rs +++ b/substrate/frame/atomic-swap/src/tests.rs @@ -20,7 +20,10 @@ use super::*; use crate as pallet_atomic_swap; -use frame_support::traits::{ConstU32, ConstU64}; +use frame_support::{ + derive_impl, + traits::{ConstU32, ConstU64}, +}; use sp_core::H256; use sp_runtime::{ traits::{BlakeTwo256, IdentityLookup}, @@ -38,6 +41,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/aura/src/mock.rs b/substrate/frame/aura/src/mock.rs index 39b798c2f68..14b87089ce3 100644 --- a/substrate/frame/aura/src/mock.rs +++ b/substrate/frame/aura/src/mock.rs @@ -21,7 +21,7 @@ use crate as pallet_aura; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, ConstU64, DisabledValidators}, }; use sp_consensus_aura::{ed25519::AuthorityId, AuthorityIndex}; @@ -41,6 +41,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/authority-discovery/src/lib.rs b/substrate/frame/authority-discovery/src/lib.rs index 87b743ae196..3044b41e31d 100644 --- a/substrate/frame/authority-discovery/src/lib.rs +++ b/substrate/frame/authority-discovery/src/lib.rs @@ -169,7 +169,7 @@ mod tests { use super::*; use crate as pallet_authority_discovery; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, ConstU64}, }; use sp_application_crypto::Pair; @@ -225,6 +225,7 @@ mod tests { pub const Offset: BlockNumber = 0; } + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/balances/src/tests/mod.rs b/substrate/frame/balances/src/tests/mod.rs index dd3e5b7a85a..8e834483cbe 100644 --- a/substrate/frame/balances/src/tests/mod.rs +++ b/substrate/frame/balances/src/tests/mod.rs @@ -22,7 +22,7 @@ use crate::{self as pallet_balances, AccountData, Config, CreditOf, Error, Pallet}; use codec::{Decode, Encode, MaxEncodedLen}; use frame_support::{ - assert_err, assert_noop, assert_ok, assert_storage_noop, + assert_err, assert_noop, assert_ok, assert_storage_noop, derive_impl, dispatch::{DispatchInfo, GetDispatchInfo}, parameter_types, traits::{ @@ -90,6 +90,8 @@ parameter_types! { ); pub static ExistentialDeposit: u64 = 1; } + +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = BlockWeights; diff --git a/substrate/frame/benchmarking/pov/src/benchmarking.rs b/substrate/frame/benchmarking/pov/src/benchmarking.rs index 473947b171a..a24b772ade0 100644 --- a/substrate/frame/benchmarking/pov/src/benchmarking.rs +++ b/substrate/frame/benchmarking/pov/src/benchmarking.rs @@ -339,6 +339,7 @@ frame_benchmarking::benchmarks! { #[cfg(test)] mod mock { + use frame_support::derive_impl; use sp_runtime::{testing::H256, BuildStorage}; type AccountId = u64; @@ -354,6 +355,7 @@ mod mock { } ); + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/benchmarking/pov/src/tests.rs b/substrate/frame/benchmarking/pov/src/tests.rs index f09e37a5288..dda29c071de 100644 --- a/substrate/frame/benchmarking/pov/src/tests.rs +++ b/substrate/frame/benchmarking/pov/src/tests.rs @@ -162,6 +162,7 @@ fn noop_is_free() { } mod mock { + use frame_support::derive_impl; use sp_runtime::testing::H256; type Block = frame_system::mocking::MockBlock; @@ -174,6 +175,7 @@ mod mock { } ); + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/benchmarking/src/baseline.rs b/substrate/frame/benchmarking/src/baseline.rs index 6cd23ebe028..6451284e012 100644 --- a/substrate/frame/benchmarking/src/baseline.rs +++ b/substrate/frame/benchmarking/src/baseline.rs @@ -110,6 +110,7 @@ benchmarks! { #[cfg(test)] pub mod mock { + use frame_support::derive_impl; use sp_runtime::{testing::H256, BuildStorage}; type AccountId = u64; @@ -124,6 +125,7 @@ pub mod mock { } ); + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/benchmarking/src/tests.rs b/substrate/frame/benchmarking/src/tests.rs index e5bacbdb236..7d6cfaad609 100644 --- a/substrate/frame/benchmarking/src/tests.rs +++ b/substrate/frame/benchmarking/src/tests.rs @@ -19,7 +19,7 @@ #![cfg(test)] -use frame_support::{parameter_types, traits::ConstU32}; +use frame_support::{derive_impl, parameter_types, traits::ConstU32}; use sp_runtime::{ testing::H256, traits::{BlakeTwo256, IdentityLookup}, @@ -75,6 +75,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/benchmarking/src/tests_instance.rs b/substrate/frame/benchmarking/src/tests_instance.rs index f2c721c8114..55010840896 100644 --- a/substrate/frame/benchmarking/src/tests_instance.rs +++ b/substrate/frame/benchmarking/src/tests_instance.rs @@ -19,7 +19,7 @@ #![cfg(test)] -use frame_support::traits::ConstU32; +use frame_support::{derive_impl, traits::ConstU32}; use sp_runtime::{ testing::H256, traits::{BlakeTwo256, IdentityLookup}, @@ -85,6 +85,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/bounties/src/tests.rs b/substrate/frame/bounties/src/tests.rs index 233e41b474c..22e608cce63 100644 --- a/substrate/frame/bounties/src/tests.rs +++ b/substrate/frame/bounties/src/tests.rs @@ -23,7 +23,7 @@ use super::*; use crate as pallet_bounties; use frame_support::{ - assert_noop, assert_ok, parameter_types, + assert_noop, assert_ok, derive_impl, parameter_types, traits::{ tokens::{PayFromAccount, UnityAssetBalanceConversion}, ConstU32, ConstU64, OnInitialize, @@ -59,6 +59,7 @@ parameter_types! { type Balance = u64; +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/broker/src/mock.rs b/substrate/frame/broker/src/mock.rs index cab6b7389c0..8b8cfa55abc 100644 --- a/substrate/frame/broker/src/mock.rs +++ b/substrate/frame/broker/src/mock.rs @@ -19,7 +19,7 @@ use crate::{test_fungibles::TestFungibles, *}; use frame_support::{ - assert_ok, ensure, ord_parameter_types, parameter_types, + assert_ok, derive_impl, ensure, ord_parameter_types, parameter_types, traits::{ fungible::{Balanced, Credit, Inspect, ItemOf, Mutate}, nonfungible::Inspect as NftInspect, @@ -47,6 +47,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/child-bounties/src/tests.rs b/substrate/frame/child-bounties/src/tests.rs index 46f8fa65dd3..7de45c73127 100644 --- a/substrate/frame/child-bounties/src/tests.rs +++ b/substrate/frame/child-bounties/src/tests.rs @@ -23,7 +23,7 @@ use super::*; use crate as pallet_child_bounties; use frame_support::{ - assert_noop, assert_ok, parameter_types, + assert_noop, assert_ok, derive_impl, parameter_types, traits::{ tokens::{PayFromAccount, UnityAssetBalanceConversion}, ConstU32, ConstU64, OnInitialize, @@ -62,6 +62,7 @@ parameter_types! { type Balance = u64; +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/collective/src/tests.rs b/substrate/frame/collective/src/tests.rs index 86b85e07a8b..06a91cf6fe9 100644 --- a/substrate/frame/collective/src/tests.rs +++ b/substrate/frame/collective/src/tests.rs @@ -18,7 +18,7 @@ use super::{Event as CollectiveEvent, *}; use crate as pallet_collective; use frame_support::{ - assert_noop, assert_ok, + assert_noop, assert_ok, derive_impl, dispatch::Pays, parameter_types, traits::{ConstU32, ConstU64, StorageVersion}, @@ -90,6 +90,8 @@ parameter_types! { frame_system::limits::BlockWeights::simple_max(Weight::MAX); pub static MaxProposalWeight: Weight = default_max_proposal_weight(); } + +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = BlockWeights; diff --git a/substrate/frame/contracts/mock-network/src/parachain.rs b/substrate/frame/contracts/mock-network/src/parachain.rs index 1465b02f903..2ef579276ae 100644 --- a/substrate/frame/contracts/mock-network/src/parachain.rs +++ b/substrate/frame/contracts/mock-network/src/parachain.rs @@ -23,7 +23,7 @@ use crate::{ }; use core::marker::PhantomData; use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, derive_impl, parameter_types, traits::{AsEnsureOriginWithArg, Contains, ContainsPair, Everything, EverythingBut, Nothing}, weights::{ constants::{WEIGHT_PROOF_SIZE_PER_MB, WEIGHT_REF_TIME_PER_SECOND}, @@ -53,6 +53,7 @@ parameter_types! { pub const BlockHashCount: u64 = 250; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; diff --git a/substrate/frame/contracts/mock-network/src/relay_chain.rs b/substrate/frame/contracts/mock-network/src/relay_chain.rs index c59c8e4bfa8..17e36eada25 100644 --- a/substrate/frame/contracts/mock-network/src/relay_chain.rs +++ b/substrate/frame/contracts/mock-network/src/relay_chain.rs @@ -17,7 +17,7 @@ //! Relay chain runtime mock. use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, derive_impl, parameter_types, traits::{Contains, Everything, Nothing}, weights::Weight, }; @@ -47,6 +47,7 @@ parameter_types! { pub const BlockHashCount: u64 = 250; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; diff --git a/substrate/frame/contracts/src/tests.rs b/substrate/frame/contracts/src/tests.rs index 76fd012852a..79ad451964d 100644 --- a/substrate/frame/contracts/src/tests.rs +++ b/substrate/frame/contracts/src/tests.rs @@ -42,6 +42,7 @@ use assert_matches::assert_matches; use codec::Encode; use frame_support::{ assert_err, assert_err_ignore_postinfo, assert_err_with_weight, assert_noop, assert_ok, + derive_impl, dispatch::{DispatchErrorWithPostInfo, PostDispatchInfo}, parameter_types, storage::child, @@ -332,6 +333,8 @@ parameter_types! { ); pub static ExistentialDeposit: u64 = 1; } + +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = BlockWeights; diff --git a/substrate/frame/conviction-voting/src/tests.rs b/substrate/frame/conviction-voting/src/tests.rs index 850b98b218b..371d0364384 100644 --- a/substrate/frame/conviction-voting/src/tests.rs +++ b/substrate/frame/conviction-voting/src/tests.rs @@ -20,7 +20,7 @@ use std::collections::BTreeMap; use frame_support::{ - assert_noop, assert_ok, parameter_types, + assert_noop, assert_ok, derive_impl, parameter_types, traits::{ConstU32, ConstU64, Contains, Polling, VoteTally}, }; use sp_core::H256; @@ -51,6 +51,7 @@ impl Contains for BaseFilter { } } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = BaseFilter; type BlockWeights = (); diff --git a/substrate/frame/core-fellowship/src/tests.rs b/substrate/frame/core-fellowship/src/tests.rs index a02c010718c..9ac381ab7f5 100644 --- a/substrate/frame/core-fellowship/src/tests.rs +++ b/substrate/frame/core-fellowship/src/tests.rs @@ -20,7 +20,7 @@ use std::collections::BTreeMap; use frame_support::{ - assert_noop, assert_ok, ord_parameter_types, + assert_noop, assert_ok, derive_impl, ord_parameter_types, pallet_prelude::Weight, parameter_types, traits::{tokens::GetSalary, ConstU32, ConstU64, Everything, IsInVec, TryMapSuccess}, @@ -50,6 +50,8 @@ parameter_types! { pub BlockWeights: frame_system::limits::BlockWeights = frame_system::limits::BlockWeights::simple_max(Weight::from_parts(1_000_000, u64::max_value())); } + +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = Everything; type BlockWeights = (); diff --git a/substrate/frame/democracy/src/tests.rs b/substrate/frame/democracy/src/tests.rs index 07a0ef5c3d5..00d8fedca0c 100644 --- a/substrate/frame/democracy/src/tests.rs +++ b/substrate/frame/democracy/src/tests.rs @@ -20,7 +20,7 @@ use super::*; use crate as pallet_democracy; use frame_support::{ - assert_noop, assert_ok, ord_parameter_types, parameter_types, + assert_noop, assert_ok, derive_impl, ord_parameter_types, parameter_types, traits::{ ConstU32, ConstU64, Contains, EqualPrivilegeOnly, OnInitialize, SortedMembers, StorePreimage, @@ -77,6 +77,8 @@ parameter_types! { Weight::from_parts(frame_support::weights::constants::WEIGHT_REF_TIME_PER_SECOND, u64::MAX), ); } + +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = BaseFilter; type BlockWeights = BlockWeights; diff --git a/substrate/frame/election-provider-multi-phase/src/mock.rs b/substrate/frame/election-provider-multi-phase/src/mock.rs index 92144351e8f..15a50165ff3 100644 --- a/substrate/frame/election-provider-multi-phase/src/mock.rs +++ b/substrate/frame/election-provider-multi-phase/src/mock.rs @@ -21,7 +21,7 @@ use frame_election_provider_support::{ bounds::{DataProviderBounds, ElectionBounds}, data_provider, onchain, ElectionDataProvider, NposSolution, SequentialPhragmen, }; -pub use frame_support::{assert_noop, assert_ok, pallet_prelude::GetDefault}; +pub use frame_support::{assert_noop, assert_ok, derive_impl, pallet_prelude::GetDefault}; use frame_support::{ parameter_types, traits::{ConstU32, Hooks}, @@ -204,6 +204,7 @@ pub fn witness() -> SolutionOrSnapshotSize { .unwrap_or_default() } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type SS58Prefix = (); type BaseCallFilter = frame_support::traits::Everything; diff --git a/substrate/frame/election-provider-support/src/onchain.rs b/substrate/frame/election-provider-support/src/onchain.rs index 8ac245a360b..412aac45475 100644 --- a/substrate/frame/election-provider-support/src/onchain.rs +++ b/substrate/frame/election-provider-support/src/onchain.rs @@ -182,7 +182,7 @@ impl ElectionProvider for OnChainExecution { mod tests { use super::*; use crate::{ElectionProvider, PhragMMS, SequentialPhragmen}; - use frame_support::{assert_noop, parameter_types}; + use frame_support::{assert_noop, derive_impl, parameter_types}; use sp_npos_elections::Support; use sp_runtime::Perbill; type AccountId = u64; @@ -200,6 +200,7 @@ mod tests { } ); + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type SS58Prefix = (); type BaseCallFilter = frame_support::traits::Everything; diff --git a/substrate/frame/elections-phragmen/src/lib.rs b/substrate/frame/elections-phragmen/src/lib.rs index e4c56e68f9a..5e50027e344 100644 --- a/substrate/frame/elections-phragmen/src/lib.rs +++ b/substrate/frame/elections-phragmen/src/lib.rs @@ -1307,7 +1307,7 @@ mod tests { use super::*; use crate as elections_phragmen; use frame_support::{ - assert_noop, assert_ok, + assert_noop, assert_ok, derive_impl, dispatch::DispatchResultWithPostInfo, parameter_types, traits::{ConstU32, ConstU64, OnInitialize}, @@ -1321,6 +1321,7 @@ mod tests { }; use substrate_test_utils::assert_eq_uvec; + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/examples/basic/src/tests.rs b/substrate/frame/examples/basic/src/tests.rs index c7b5b9e9a84..e00b1ac01b3 100644 --- a/substrate/frame/examples/basic/src/tests.rs +++ b/substrate/frame/examples/basic/src/tests.rs @@ -19,7 +19,7 @@ use crate::*; use frame_support::{ - assert_ok, + assert_ok, derive_impl, dispatch::{DispatchInfo, GetDispatchInfo}, traits::{ConstU64, OnInitialize}, }; @@ -45,6 +45,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/examples/dev-mode/src/tests.rs b/substrate/frame/examples/dev-mode/src/tests.rs index c7722bc0524..3acedcd0fd1 100644 --- a/substrate/frame/examples/dev-mode/src/tests.rs +++ b/substrate/frame/examples/dev-mode/src/tests.rs @@ -18,7 +18,7 @@ //! Tests for pallet-dev-mode. use crate::*; -use frame_support::{assert_ok, traits::ConstU64}; +use frame_support::{assert_ok, derive_impl, traits::ConstU64}; use sp_core::H256; use sp_runtime::{ traits::{BlakeTwo256, IdentityLookup}, @@ -39,6 +39,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/examples/offchain-worker/src/tests.rs b/substrate/frame/examples/offchain-worker/src/tests.rs index 203a59a8af0..48a8d86588c 100644 --- a/substrate/frame/examples/offchain-worker/src/tests.rs +++ b/substrate/frame/examples/offchain-worker/src/tests.rs @@ -19,7 +19,7 @@ use crate as example_offchain_worker; use crate::*; use codec::Decode; use frame_support::{ - assert_ok, parameter_types, + assert_ok, derive_impl, parameter_types, traits::{ConstU32, ConstU64}, }; use sp_core::{ @@ -46,6 +46,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/executive/src/lib.rs b/substrate/frame/executive/src/lib.rs index 4eb76325bab..b351819f612 100644 --- a/substrate/frame/executive/src/lib.rs +++ b/substrate/frame/executive/src/lib.rs @@ -761,7 +761,7 @@ mod tests { }; use frame_support::{ - assert_err, parameter_types, + assert_err, derive_impl, parameter_types, traits::{fungible, ConstU32, ConstU64, ConstU8, Currency}, weights::{ConstantMultiplier, IdentityFee, RuntimeDbWeight, Weight, WeightToFee}, }; @@ -917,6 +917,7 @@ mod tests { write: 100, }; } + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = BlockWeights; diff --git a/substrate/frame/glutton/src/mock.rs b/substrate/frame/glutton/src/mock.rs index 4bc40b54788..31b78efc574 100644 --- a/substrate/frame/glutton/src/mock.rs +++ b/substrate/frame/glutton/src/mock.rs @@ -19,7 +19,7 @@ use super::*; use crate as pallet_glutton; use frame_support::{ - assert_ok, + assert_ok, derive_impl, traits::{ConstU32, ConstU64}, }; use sp_core::H256; @@ -38,6 +38,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/grandpa/src/mock.rs b/substrate/frame/grandpa/src/mock.rs index 9afcec1c797..4766d5c3780 100644 --- a/substrate/frame/grandpa/src/mock.rs +++ b/substrate/frame/grandpa/src/mock.rs @@ -27,7 +27,7 @@ use frame_election_provider_support::{ onchain, SequentialPhragmen, }; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU128, ConstU32, ConstU64, KeyOwnerProofSystem, OnFinalize, OnInitialize}, }; use pallet_session::historical as pallet_session_historical; @@ -66,6 +66,7 @@ impl_opaque_keys! { } } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/identity/src/tests.rs b/substrate/frame/identity/src/tests.rs index 78074df933a..8ac7b4d66cb 100644 --- a/substrate/frame/identity/src/tests.rs +++ b/substrate/frame/identity/src/tests.rs @@ -25,7 +25,7 @@ use crate::{ use codec::{Decode, Encode}; use frame_support::{ - assert_noop, assert_ok, ord_parameter_types, parameter_types, + assert_noop, assert_ok, derive_impl, ord_parameter_types, parameter_types, traits::{ConstU32, ConstU64, EitherOfDiverse, Get}, BoundedVec, }; @@ -47,6 +47,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/im-online/src/mock.rs b/substrate/frame/im-online/src/mock.rs index 85da061fe90..2f4e3922026 100644 --- a/substrate/frame/im-online/src/mock.rs +++ b/substrate/frame/im-online/src/mock.rs @@ -20,7 +20,7 @@ #![cfg(test)] use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, ConstU64}, weights::Weight, }; @@ -113,6 +113,7 @@ pub fn new_test_ext() -> sp_io::TestExternalities { result } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/indices/src/mock.rs b/substrate/frame/indices/src/mock.rs index 7dc6730d34e..913a37fe55b 100644 --- a/substrate/frame/indices/src/mock.rs +++ b/substrate/frame/indices/src/mock.rs @@ -20,7 +20,10 @@ #![cfg(test)] use crate::{self as pallet_indices, Config}; -use frame_support::traits::{ConstU32, ConstU64}; +use frame_support::{ + derive_impl, + traits::{ConstU32, ConstU64}, +}; use sp_core::H256; use sp_runtime::BuildStorage; @@ -35,6 +38,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/insecure-randomness-collective-flip/src/lib.rs b/substrate/frame/insecure-randomness-collective-flip/src/lib.rs index 474087777c4..c7ed22d1dd5 100644 --- a/substrate/frame/insecure-randomness-collective-flip/src/lib.rs +++ b/substrate/frame/insecure-randomness-collective-flip/src/lib.rs @@ -169,7 +169,7 @@ mod tests { }; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, ConstU64, OnInitialize, Randomness}, }; use frame_system::limits; @@ -189,6 +189,7 @@ mod tests { ::max(2 * 1024); } + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/lottery/src/mock.rs b/substrate/frame/lottery/src/mock.rs index e50ec3441b2..6e50529619b 100644 --- a/substrate/frame/lottery/src/mock.rs +++ b/substrate/frame/lottery/src/mock.rs @@ -21,7 +21,7 @@ use super::*; use crate as pallet_lottery; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, ConstU64, OnFinalize, OnInitialize}, }; use frame_support_test::TestRandomness; @@ -47,6 +47,7 @@ parameter_types! { pub const AvailableBlockRatio: Perbill = Perbill::one(); } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/membership/src/lib.rs b/substrate/frame/membership/src/lib.rs index 6fb61f0e491..2f4bf4bc4ff 100644 --- a/substrate/frame/membership/src/lib.rs +++ b/substrate/frame/membership/src/lib.rs @@ -531,7 +531,7 @@ mod tests { }; use frame_support::{ - assert_noop, assert_ok, ord_parameter_types, parameter_types, + assert_noop, assert_ok, derive_impl, ord_parameter_types, parameter_types, traits::{ConstU32, ConstU64, StorageVersion}, }; use frame_system::EnsureSignedBy; @@ -551,6 +551,7 @@ mod tests { pub static Prime: Option = None; } + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/message-queue/src/integration_test.rs b/substrate/frame/message-queue/src/integration_test.rs index 965b96a99ca..53dc204ab9c 100644 --- a/substrate/frame/message-queue/src/integration_test.rs +++ b/substrate/frame/message-queue/src/integration_test.rs @@ -38,7 +38,7 @@ use crate::{ use crate as pallet_message_queue; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, ConstU64}, }; use rand::{rngs::StdRng, Rng, SeedableRng}; @@ -57,6 +57,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/message-queue/src/mock.rs b/substrate/frame/message-queue/src/mock.rs index 55a64574354..97246900597 100644 --- a/substrate/frame/message-queue/src/mock.rs +++ b/substrate/frame/message-queue/src/mock.rs @@ -24,7 +24,7 @@ use super::*; use crate as pallet_message_queue; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, ConstU64}, }; use sp_core::H256; @@ -43,6 +43,8 @@ frame_support::construct_runtime!( MessageQueue: pallet_message_queue::{Pallet, Call, Storage, Event}, } ); + +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/nft-fractionalization/src/mock.rs b/substrate/frame/nft-fractionalization/src/mock.rs index 987c65a8954..855109adcbe 100644 --- a/substrate/frame/nft-fractionalization/src/mock.rs +++ b/substrate/frame/nft-fractionalization/src/mock.rs @@ -21,7 +21,7 @@ use super::*; use crate as pallet_nft_fractionalization; use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, derive_impl, parameter_types, traits::{AsEnsureOriginWithArg, ConstU32, ConstU64}, BoundedVec, PalletId, }; @@ -49,6 +49,8 @@ construct_runtime!( Nfts: pallet_nfts, } ); + +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/nfts/src/mock.rs b/substrate/frame/nfts/src/mock.rs index 248522aafff..4363eccc7ff 100644 --- a/substrate/frame/nfts/src/mock.rs +++ b/substrate/frame/nfts/src/mock.rs @@ -21,7 +21,7 @@ use super::*; use crate as pallet_nfts; use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, derive_impl, parameter_types, traits::{AsEnsureOriginWithArg, ConstU32, ConstU64}, }; use sp_core::H256; @@ -46,6 +46,7 @@ pub type Signature = MultiSignature; pub type AccountPublic = ::Signer; pub type AccountId = ::AccountId; +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/nicks/src/lib.rs b/substrate/frame/nicks/src/lib.rs index ad30c628adf..540777f87ca 100644 --- a/substrate/frame/nicks/src/lib.rs +++ b/substrate/frame/nicks/src/lib.rs @@ -253,7 +253,7 @@ mod tests { use crate as pallet_nicks; use frame_support::{ - assert_noop, assert_ok, ord_parameter_types, + assert_noop, assert_ok, derive_impl, ord_parameter_types, traits::{ConstU32, ConstU64}, }; use frame_system::EnsureSignedBy; @@ -274,6 +274,7 @@ mod tests { } ); + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/nis/src/mock.rs b/substrate/frame/nis/src/mock.rs index 30f7ef95f33..be6e79ac6f6 100644 --- a/substrate/frame/nis/src/mock.rs +++ b/substrate/frame/nis/src/mock.rs @@ -20,7 +20,7 @@ use crate::{self as pallet_nis, Perquintill, WithMaximumOf}; use frame_support::{ - ord_parameter_types, parameter_types, + derive_impl, ord_parameter_types, parameter_types, traits::{ fungible::Inspect, ConstU16, ConstU32, ConstU64, Everything, OnFinalize, OnInitialize, StorageMapShim, @@ -50,6 +50,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = Everything; type BlockWeights = (); diff --git a/substrate/frame/node-authorization/src/mock.rs b/substrate/frame/node-authorization/src/mock.rs index 84e3336b3bd..3c99d41b89e 100644 --- a/substrate/frame/node-authorization/src/mock.rs +++ b/substrate/frame/node-authorization/src/mock.rs @@ -21,7 +21,7 @@ use super::*; use crate as pallet_node_authorization; use frame_support::{ - ord_parameter_types, + derive_impl, ord_parameter_types, traits::{ConstU32, ConstU64}, }; use frame_system::EnsureSignedBy; @@ -43,6 +43,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type DbWeight = (); diff --git a/substrate/frame/nomination-pools/benchmarking/src/mock.rs b/substrate/frame/nomination-pools/benchmarking/src/mock.rs index 9a7f2197a7b..095df219dc8 100644 --- a/substrate/frame/nomination-pools/benchmarking/src/mock.rs +++ b/substrate/frame/nomination-pools/benchmarking/src/mock.rs @@ -17,7 +17,7 @@ use crate::VoterBagsListInstance; use frame_election_provider_support::VoteWeight; -use frame_support::{pallet_prelude::*, parameter_types, traits::ConstU64, PalletId}; +use frame_support::{derive_impl, pallet_prelude::*, parameter_types, traits::ConstU64, PalletId}; use sp_runtime::{ traits::{Convert, IdentityLookup}, BuildStorage, FixedU128, Perbill, @@ -28,6 +28,7 @@ type Nonce = u32; type BlockNumber = u64; type Balance = u128; +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/nomination-pools/src/mock.rs b/substrate/frame/nomination-pools/src/mock.rs index 24bea0b87f2..1bd969230da 100644 --- a/substrate/frame/nomination-pools/src/mock.rs +++ b/substrate/frame/nomination-pools/src/mock.rs @@ -17,7 +17,7 @@ use super::*; use crate::{self as pools}; -use frame_support::{assert_ok, parameter_types, traits::fungible::Mutate, PalletId}; +use frame_support::{assert_ok, derive_impl, parameter_types, traits::fungible::Mutate, PalletId}; use frame_system::RawOrigin; use sp_runtime::{BuildStorage, FixedU128}; use sp_staking::{OnStakingUpdate, Stake}; @@ -209,6 +209,7 @@ impl sp_staking::StakingInterface for StakingMock { } } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type SS58Prefix = (); type BaseCallFilter = frame_support::traits::Everything; diff --git a/substrate/frame/nomination-pools/test-staking/src/mock.rs b/substrate/frame/nomination-pools/test-staking/src/mock.rs index 0db24e9c244..ee24b53db06 100644 --- a/substrate/frame/nomination-pools/test-staking/src/mock.rs +++ b/substrate/frame/nomination-pools/test-staking/src/mock.rs @@ -17,7 +17,7 @@ use frame_election_provider_support::VoteWeight; use frame_support::{ - assert_ok, + assert_ok, derive_impl, pallet_prelude::*, parameter_types, traits::{ConstU64, ConstU8}, @@ -38,6 +38,7 @@ pub(crate) type T = Runtime; pub(crate) const POOL1_BONDED: AccountId = 20318131474730217858575332831085u128; pub(crate) const POOL1_REWARD: AccountId = 20397359637244482196168876781421u128; +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/offences/benchmarking/src/mock.rs b/substrate/frame/offences/benchmarking/src/mock.rs index 1a458ec90d5..62ce1990112 100644 --- a/substrate/frame/offences/benchmarking/src/mock.rs +++ b/substrate/frame/offences/benchmarking/src/mock.rs @@ -25,7 +25,7 @@ use frame_election_provider_support::{ onchain, SequentialPhragmen, }; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, ConstU64}, }; use frame_system as system; @@ -40,6 +40,7 @@ type AccountId = u64; type Nonce = u32; type Balance = u64; +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/offences/src/mock.rs b/substrate/frame/offences/src/mock.rs index 990ceae5ac0..61f680f6db9 100644 --- a/substrate/frame/offences/src/mock.rs +++ b/substrate/frame/offences/src/mock.rs @@ -23,7 +23,7 @@ use crate as offences; use crate::Config; use codec::Encode; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, ConstU64}, weights::{constants::RocksDbWeight, Weight}, }; @@ -75,6 +75,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/paged-list/src/mock.rs b/substrate/frame/paged-list/src/mock.rs index 390b4a8530d..37bdc4f157c 100644 --- a/substrate/frame/paged-list/src/mock.rs +++ b/substrate/frame/paged-list/src/mock.rs @@ -20,7 +20,10 @@ #![cfg(feature = "std")] use crate::{paged_list::StoragePagedListMeta, Config, ListPrefix}; -use frame_support::traits::{ConstU16, ConstU64}; +use frame_support::{ + derive_impl, + traits::{ConstU16, ConstU64}, +}; use sp_core::H256; use sp_runtime::{ traits::{BlakeTwo256, IdentityLookup}, @@ -38,6 +41,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/preimage/src/mock.rs b/substrate/frame/preimage/src/mock.rs index 0f966312d9e..357f088f5ba 100644 --- a/substrate/frame/preimage/src/mock.rs +++ b/substrate/frame/preimage/src/mock.rs @@ -21,7 +21,7 @@ use super::*; use crate as pallet_preimage; use frame_support::{ - ord_parameter_types, + derive_impl, ord_parameter_types, traits::{fungible::HoldConsideration, ConstU32, ConstU64, Everything}, weights::constants::RocksDbWeight, }; @@ -43,6 +43,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = Everything; type BlockWeights = (); diff --git a/substrate/frame/ranked-collective/src/tests.rs b/substrate/frame/ranked-collective/src/tests.rs index ba8c5a0f937..3a557065160 100644 --- a/substrate/frame/ranked-collective/src/tests.rs +++ b/substrate/frame/ranked-collective/src/tests.rs @@ -20,7 +20,7 @@ use std::collections::BTreeMap; use frame_support::{ - assert_noop, assert_ok, + assert_noop, assert_ok, derive_impl, error::BadOrigin, parameter_types, traits::{ConstU16, ConstU32, ConstU64, EitherOf, Everything, MapSuccess, Polling}, @@ -45,6 +45,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = Everything; type BlockWeights = (); diff --git a/substrate/frame/recovery/src/mock.rs b/substrate/frame/recovery/src/mock.rs index bc81d07bec2..44cbeec0986 100644 --- a/substrate/frame/recovery/src/mock.rs +++ b/substrate/frame/recovery/src/mock.rs @@ -21,7 +21,7 @@ use super::*; use crate as recovery; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, ConstU64, OnFinalize, OnInitialize}, }; use sp_core::H256; @@ -41,6 +41,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/referenda/src/mock.rs b/substrate/frame/referenda/src/mock.rs index 345accbe268..b75558723e9 100644 --- a/substrate/frame/referenda/src/mock.rs +++ b/substrate/frame/referenda/src/mock.rs @@ -21,7 +21,7 @@ use super::*; use crate as pallet_referenda; use codec::{Decode, Encode, MaxEncodedLen}; use frame_support::{ - assert_ok, ord_parameter_types, parameter_types, + assert_ok, derive_impl, ord_parameter_types, parameter_types, traits::{ ConstU32, ConstU64, Contains, EqualPrivilegeOnly, OnInitialize, OriginTrait, Polling, SortedMembers, @@ -59,6 +59,7 @@ impl Contains for BaseFilter { parameter_types! { pub MaxWeight: Weight = Weight::from_parts(2_000_000_000_000, u64::MAX); } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = BaseFilter; type BlockWeights = (); diff --git a/substrate/frame/remark/src/mock.rs b/substrate/frame/remark/src/mock.rs index e597a1ca4df..0a385c30eac 100644 --- a/substrate/frame/remark/src/mock.rs +++ b/substrate/frame/remark/src/mock.rs @@ -18,7 +18,10 @@ //! Test environment for remarks pallet. use crate as pallet_remark; -use frame_support::traits::{ConstU16, ConstU32, ConstU64}; +use frame_support::{ + derive_impl, + traits::{ConstU16, ConstU32, ConstU64}, +}; use sp_core::H256; use sp_runtime::{ traits::{BlakeTwo256, IdentityLookup}, @@ -36,6 +39,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/root-offences/src/mock.rs b/substrate/frame/root-offences/src/mock.rs index 82da429e00a..5e04e9abc13 100644 --- a/substrate/frame/root-offences/src/mock.rs +++ b/substrate/frame/root-offences/src/mock.rs @@ -23,7 +23,7 @@ use frame_election_provider_support::{ onchain, SequentialPhragmen, }; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, ConstU64, Hooks, OneSessionHandler}, }; use pallet_staking::StakerStatus; @@ -84,6 +84,7 @@ impl sp_runtime::BoundToRuntimeAppPublic for OtherSessionHandler { type Public = UintAuthorityId; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/safe-mode/src/mock.rs b/substrate/frame/safe-mode/src/mock.rs index 10afe5bd4b5..7574d64d59d 100644 --- a/substrate/frame/safe-mode/src/mock.rs +++ b/substrate/frame/safe-mode/src/mock.rs @@ -23,7 +23,7 @@ use super::*; use crate as pallet_safe_mode; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU64, Everything, InsideBoth, InstanceFilter, IsInVec, SafeModeNotify}, }; use frame_system::EnsureSignedBy; @@ -33,6 +33,7 @@ use sp_runtime::{ BuildStorage, }; +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = InsideBoth; type BlockWeights = (); diff --git a/substrate/frame/salary/src/tests.rs b/substrate/frame/salary/src/tests.rs index 1136ea746f6..fbca1be1188 100644 --- a/substrate/frame/salary/src/tests.rs +++ b/substrate/frame/salary/src/tests.rs @@ -20,7 +20,7 @@ use std::collections::BTreeMap; use frame_support::{ - assert_noop, assert_ok, + assert_noop, assert_ok, derive_impl, pallet_prelude::Weight, parameter_types, traits::{tokens::ConvertRank, ConstU32, ConstU64, Everything}, @@ -49,6 +49,8 @@ parameter_types! { pub BlockWeights: frame_system::limits::BlockWeights = frame_system::limits::BlockWeights::simple_max(Weight::from_parts(1_000_000, 0)); } + +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = Everything; type BlockWeights = (); diff --git a/substrate/frame/scored-pool/src/mock.rs b/substrate/frame/scored-pool/src/mock.rs index 32a66c0cdc5..6c032ab808c 100644 --- a/substrate/frame/scored-pool/src/mock.rs +++ b/substrate/frame/scored-pool/src/mock.rs @@ -21,7 +21,7 @@ use super::*; use crate as pallet_scored_pool; use frame_support::{ - construct_runtime, ord_parameter_types, parameter_types, + construct_runtime, derive_impl, ord_parameter_types, parameter_types, traits::{ConstU32, ConstU64}, }; use frame_system::EnsureSignedBy; @@ -51,6 +51,7 @@ ord_parameter_types! { pub const ScoreOrigin: u64 = 3; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/session/benchmarking/src/mock.rs b/substrate/frame/session/benchmarking/src/mock.rs index 47c337569a0..5c00d4bb491 100644 --- a/substrate/frame/session/benchmarking/src/mock.rs +++ b/substrate/frame/session/benchmarking/src/mock.rs @@ -24,7 +24,7 @@ use frame_election_provider_support::{ onchain, SequentialPhragmen, }; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, ConstU64}, }; use sp_runtime::{traits::IdentityLookup, BuildStorage}; @@ -45,6 +45,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/session/src/mock.rs b/substrate/frame/session/src/mock.rs index 2db54e1a597..f3f18fde168 100644 --- a/substrate/frame/session/src/mock.rs +++ b/substrate/frame/session/src/mock.rs @@ -35,7 +35,7 @@ use sp_staking::SessionIndex; use sp_state_machine::BasicExternalities; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, ConstU64}, }; @@ -232,6 +232,7 @@ pub fn new_test_ext() -> sp_io::TestExternalities { sp_io::TestExternalities::new(t) } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/society/src/mock.rs b/substrate/frame/society/src/mock.rs index 0bee08236f7..3e29d01ca8e 100644 --- a/substrate/frame/society/src/mock.rs +++ b/substrate/frame/society/src/mock.rs @@ -21,7 +21,7 @@ use super::*; use crate as pallet_society; use frame_support::{ - assert_noop, assert_ok, ord_parameter_types, parameter_types, + assert_noop, assert_ok, derive_impl, ord_parameter_types, parameter_types, traits::{ConstU32, ConstU64}, }; use frame_support_test::TestRandomness; @@ -58,6 +58,7 @@ ord_parameter_types! { pub const MaxBids: u32 = 10; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/staking/src/mock.rs b/substrate/frame/staking/src/mock.rs index 364d125792b..90b0ee0260d 100644 --- a/substrate/frame/staking/src/mock.rs +++ b/substrate/frame/staking/src/mock.rs @@ -23,7 +23,7 @@ use frame_election_provider_support::{ onchain, SequentialPhragmen, VoteWeight, }; use frame_support::{ - assert_ok, ord_parameter_types, parameter_types, + assert_ok, derive_impl, ord_parameter_types, parameter_types, traits::{ ConstU64, Currency, EitherOfDiverse, FindAuthor, Get, Hooks, Imbalance, OnUnbalanced, OneSessionHandler, @@ -124,6 +124,7 @@ parameter_types! { pub static Offset: BlockNumber = 0; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/state-trie-migration/src/lib.rs b/substrate/frame/state-trie-migration/src/lib.rs index ac3996459cd..5330634ca07 100644 --- a/substrate/frame/state-trie-migration/src/lib.rs +++ b/substrate/frame/state-trie-migration/src/lib.rs @@ -1051,7 +1051,7 @@ mod mock { use super::*; use crate as pallet_state_trie_migration; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, ConstU64, Hooks}, weights::Weight, }; @@ -1081,6 +1081,7 @@ mod mock { pub const SS58Prefix: u8 = 42; } + #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/statement/src/mock.rs b/substrate/frame/statement/src/mock.rs index 10a74e100df..192baa1f218 100644 --- a/substrate/frame/statement/src/mock.rs +++ b/substrate/frame/statement/src/mock.rs @@ -21,7 +21,7 @@ use super::*; use crate as pallet_statement; use frame_support::{ - ord_parameter_types, + derive_impl, ord_parameter_types, traits::{ConstU32, ConstU64, Everything}, weights::constants::RocksDbWeight, }; @@ -47,6 +47,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = Everything; type BlockWeights = (); diff --git a/substrate/frame/sudo/src/mock.rs b/substrate/frame/sudo/src/mock.rs index 6f123b7c82b..878e9239080 100644 --- a/substrate/frame/sudo/src/mock.rs +++ b/substrate/frame/sudo/src/mock.rs @@ -19,7 +19,10 @@ use super::*; use crate as sudo; -use frame_support::traits::{ConstU32, Contains}; +use frame_support::{ + derive_impl, + traits::{ConstU32, Contains}, +}; use sp_core::{ConstU64, H256}; use sp_io; use sp_runtime::{ @@ -108,6 +111,7 @@ impl Contains for BlockEverything { } } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = BlockEverything; type BlockWeights = (); diff --git a/substrate/frame/support/test/tests/construct_runtime_ui/number_of_pallets_exceeds_tuple_size.rs b/substrate/frame/support/test/tests/construct_runtime_ui/number_of_pallets_exceeds_tuple_size.rs index ea52293a673..78ae6f57f08 100644 --- a/substrate/frame/support/test/tests/construct_runtime_ui/number_of_pallets_exceeds_tuple_size.rs +++ b/substrate/frame/support/test/tests/construct_runtime_ui/number_of_pallets_exceeds_tuple_size.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use frame_support::construct_runtime; +use frame_support::{construct_runtime, derive_impl}; use sp_core::sr25519; use sp_runtime::{generic, traits::BlakeTwo256}; @@ -36,6 +36,7 @@ pub type UncheckedExtrinsic = generic::UncheckedExtrinsic tests/construct_runtime_ui/number_of_pallets_exceeds_tuple_size.rs:66:2 + --> tests/construct_runtime_ui/number_of_pallets_exceeds_tuple_size.rs:67:2 | -66 | pub struct Runtime +67 | pub struct Runtime | ^^^ error[E0412]: cannot find type `RuntimeCall` in this scope @@ -22,38 +22,38 @@ error[E0412]: cannot find type `Runtime` in this scope | ^^^^^^^ not found in this scope error[E0412]: cannot find type `Runtime` in this scope - --> tests/construct_runtime_ui/number_of_pallets_exceeds_tuple_size.rs:39:31 + --> tests/construct_runtime_ui/number_of_pallets_exceeds_tuple_size.rs:40:31 | -39 | impl frame_system::Config for Runtime { +40 | impl frame_system::Config for Runtime { | ^^^^^^^ not found in this scope error[E0412]: cannot find type `RuntimeOrigin` in this scope - --> tests/construct_runtime_ui/number_of_pallets_exceeds_tuple_size.rs:41:23 + --> tests/construct_runtime_ui/number_of_pallets_exceeds_tuple_size.rs:42:23 | -41 | type RuntimeOrigin = RuntimeOrigin; +42 | type RuntimeOrigin = RuntimeOrigin; | ^^^^^^^^^^^^^ help: you might have meant to use the associated type: `Self::RuntimeOrigin` error[E0412]: cannot find type `RuntimeCall` in this scope - --> tests/construct_runtime_ui/number_of_pallets_exceeds_tuple_size.rs:43:21 + --> tests/construct_runtime_ui/number_of_pallets_exceeds_tuple_size.rs:44:21 | -43 | type RuntimeCall = RuntimeCall; +44 | type RuntimeCall = RuntimeCall; | ^^^^^^^^^^^ help: you might have meant to use the associated type: `Self::RuntimeCall` error[E0412]: cannot find type `RuntimeEvent` in this scope - --> tests/construct_runtime_ui/number_of_pallets_exceeds_tuple_size.rs:49:22 + --> tests/construct_runtime_ui/number_of_pallets_exceeds_tuple_size.rs:50:22 | -49 | type RuntimeEvent = RuntimeEvent; +50 | type RuntimeEvent = RuntimeEvent; | ^^^^^^^^^^^^ help: you might have meant to use the associated type: `Self::RuntimeEvent` error[E0412]: cannot find type `PalletInfo` in this scope - --> tests/construct_runtime_ui/number_of_pallets_exceeds_tuple_size.rs:55:20 + --> tests/construct_runtime_ui/number_of_pallets_exceeds_tuple_size.rs:56:20 | -55 | type PalletInfo = PalletInfo; +56 | type PalletInfo = PalletInfo; | ^^^^^^^^^^ | help: you might have meant to use the associated type | -55 | type PalletInfo = Self::PalletInfo; +56 | type PalletInfo = Self::PalletInfo; | ~~~~~~~~~~~~~~~~ help: consider importing one of these items | diff --git a/substrate/frame/support/test/tests/construct_runtime_ui/pallet_error_too_large.rs b/substrate/frame/support/test/tests/construct_runtime_ui/pallet_error_too_large.rs index 2834b5b8f2a..d3e519af551 100644 --- a/substrate/frame/support/test/tests/construct_runtime_ui/pallet_error_too_large.rs +++ b/substrate/frame/support/test/tests/construct_runtime_ui/pallet_error_too_large.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use frame_support::construct_runtime; +use frame_support::{construct_runtime, derive_impl}; use sp_core::sr25519; use sp_runtime::{generic, traits::BlakeTwo256}; @@ -61,6 +61,7 @@ pub type UncheckedExtrinsic = generic::UncheckedExtrinsic tests/construct_runtime_ui/pallet_error_too_large.rs:90:1 + --> tests/construct_runtime_ui/pallet_error_too_large.rs:91:1 | -90 | / construct_runtime! { -91 | | pub struct Runtime -92 | | { -93 | | System: frame_system::{Pallet, Call, Storage, Config, Event}, -94 | | Pallet: pallet::{Pallet}, -95 | | } -96 | | } - | |_^ the evaluated program panicked at 'The maximum encoded size of the error type in the `Pallet` pallet exceeds `MAX_MODULE_ERROR_ENCODED_SIZE`', $DIR/tests/construct_runtime_ui/pallet_error_too_large.rs:90:1 +91 | / construct_runtime! { +92 | | pub struct Runtime +93 | | { +94 | | System: frame_system::{Pallet, Call, Storage, Config, Event}, +95 | | Pallet: pallet::{Pallet}, +96 | | } +97 | | } + | |_^ the evaluated program panicked at 'The maximum encoded size of the error type in the `Pallet` pallet exceeds `MAX_MODULE_ERROR_ENCODED_SIZE`', $DIR/tests/construct_runtime_ui/pallet_error_too_large.rs:91:1 | = note: this error originates in the macro `$crate::panic::panic_2021` which comes from the expansion of the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/substrate/frame/support/test/tests/construct_runtime_ui/undefined_call_part.rs b/substrate/frame/support/test/tests/construct_runtime_ui/undefined_call_part.rs index 62c4b1327e0..8193d12120c 100644 --- a/substrate/frame/support/test/tests/construct_runtime_ui/undefined_call_part.rs +++ b/substrate/frame/support/test/tests/construct_runtime_ui/undefined_call_part.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use frame_support::construct_runtime; +use frame_support::{construct_runtime, derive_impl}; use sp_core::sr25519; use sp_runtime::{generic, traits::BlakeTwo256}; @@ -36,6 +36,7 @@ pub type UncheckedExtrinsic = generic::UncheckedExtrinsic, Event}, -69 | | Pallet: pallet::{Pallet, Call}, -70 | | } -71 | | } +66 | / construct_runtime! { +67 | | pub struct Runtime +68 | | { +69 | | System: frame_system::{Pallet, Call, Storage, Config, Event}, +70 | | Pallet: pallet::{Pallet, Call}, +71 | | } +72 | | } | |_- in this macro invocation | = note: this error originates in the macro `pallet::__substrate_call_check::is_call_part_defined` which comes from the expansion of the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/substrate/frame/support/test/tests/construct_runtime_ui/undefined_event_part.rs b/substrate/frame/support/test/tests/construct_runtime_ui/undefined_event_part.rs index 893690501a8..ef3a790b61a 100644 --- a/substrate/frame/support/test/tests/construct_runtime_ui/undefined_event_part.rs +++ b/substrate/frame/support/test/tests/construct_runtime_ui/undefined_event_part.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use frame_support::construct_runtime; +use frame_support::{construct_runtime, derive_impl}; use sp_core::sr25519; use sp_runtime::{generic, traits::BlakeTwo256}; @@ -36,6 +36,7 @@ pub type UncheckedExtrinsic = generic::UncheckedExtrinsic, Event}, -69 | | Pallet: pallet expanded::{}::{Pallet, Event}, -70 | | } -71 | | } +66 | / construct_runtime! { +67 | | pub struct Runtime +68 | | { +69 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, +70 | | Pallet: pallet expanded::{}::{Pallet, Event}, +71 | | } +72 | | } | |_- in this macro invocation | = note: this error originates in the macro `pallet::__substrate_event_check::is_event_part_defined` which comes from the expansion of the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0412]: cannot find type `Event` in module `pallet` - --> tests/construct_runtime_ui/undefined_event_part.rs:65:1 + --> tests/construct_runtime_ui/undefined_event_part.rs:66:1 | -65 | / construct_runtime! { -66 | | pub struct Runtime -67 | | { -68 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, -69 | | Pallet: pallet expanded::{}::{Pallet, Event}, -70 | | } -71 | | } +66 | / construct_runtime! { +67 | | pub struct Runtime +68 | | { +69 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, +70 | | Pallet: pallet expanded::{}::{Pallet, Event}, +71 | | } +72 | | } | |_^ not found in `pallet` | = note: this error originates in the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/substrate/frame/support/test/tests/construct_runtime_ui/undefined_genesis_config_part.rs b/substrate/frame/support/test/tests/construct_runtime_ui/undefined_genesis_config_part.rs index a3501ca31a3..b4dd41750c8 100644 --- a/substrate/frame/support/test/tests/construct_runtime_ui/undefined_genesis_config_part.rs +++ b/substrate/frame/support/test/tests/construct_runtime_ui/undefined_genesis_config_part.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use frame_support::construct_runtime; +use frame_support::{construct_runtime, derive_impl}; use sp_core::sr25519; use sp_runtime::{generic, traits::BlakeTwo256}; @@ -36,6 +36,7 @@ pub type UncheckedExtrinsic = generic::UncheckedExtrinsic, Event}, -69 | | Pallet: pallet expanded::{}::{Pallet, Config}, -70 | | } -71 | | } +66 | / construct_runtime! { +67 | | pub struct Runtime +68 | | { +69 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, +70 | | Pallet: pallet expanded::{}::{Pallet, Config}, +71 | | } +72 | | } | |_- in this macro invocation | = note: this error originates in the macro `pallet::__substrate_genesis_config_check::is_genesis_config_defined` which comes from the expansion of the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0412]: cannot find type `GenesisConfig` in module `pallet` - --> tests/construct_runtime_ui/undefined_genesis_config_part.rs:65:1 + --> tests/construct_runtime_ui/undefined_genesis_config_part.rs:66:1 | -65 | / construct_runtime! { -66 | | pub struct Runtime -67 | | { -68 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, -69 | | Pallet: pallet expanded::{}::{Pallet, Config}, -70 | | } -71 | | } +66 | / construct_runtime! { +67 | | pub struct Runtime +68 | | { +69 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, +70 | | Pallet: pallet expanded::{}::{Pallet, Config}, +71 | | } +72 | | } | |_^ not found in `pallet` | = note: this error originates in the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/substrate/frame/support/test/tests/construct_runtime_ui/undefined_inherent_part.rs b/substrate/frame/support/test/tests/construct_runtime_ui/undefined_inherent_part.rs index e22745930d6..5e0b8f3c44f 100644 --- a/substrate/frame/support/test/tests/construct_runtime_ui/undefined_inherent_part.rs +++ b/substrate/frame/support/test/tests/construct_runtime_ui/undefined_inherent_part.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use frame_support::construct_runtime; +use frame_support::{construct_runtime, derive_impl}; use sp_core::sr25519; use sp_runtime::{generic, traits::BlakeTwo256}; @@ -36,6 +36,7 @@ pub type UncheckedExtrinsic = generic::UncheckedExtrinsic, Event}, -69 | | Pallet: pallet expanded::{}::{Pallet, Inherent}, -70 | | } -71 | | } +66 | / construct_runtime! { +67 | | pub struct Runtime +68 | | { +69 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, +70 | | Pallet: pallet expanded::{}::{Pallet, Inherent}, +71 | | } +72 | | } | |_- in this macro invocation | = note: this error originates in the macro `pallet::__substrate_inherent_check::is_inherent_part_defined` which comes from the expansion of the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0599]: no function or associated item named `create_inherent` found for struct `pallet::Pallet` in the current scope - --> tests/construct_runtime_ui/undefined_inherent_part.rs:65:1 + --> tests/construct_runtime_ui/undefined_inherent_part.rs:66:1 | 28 | pub struct Pallet(_); | -------------------- function or associated item `create_inherent` not found for this struct ... -65 | construct_runtime! { +66 | construct_runtime! { | _^ -66 | | pub struct Runtime -67 | | { -68 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, -69 | | Pallet: pallet expanded::{}::{Pallet, Inherent}, -70 | | } -71 | | } +67 | | pub struct Runtime +68 | | { +69 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, +70 | | Pallet: pallet expanded::{}::{Pallet, Inherent}, +71 | | } +72 | | } | |_^ function or associated item not found in `Pallet` | = help: items from traits can only be used if the trait is implemented and in scope @@ -37,19 +37,19 @@ error[E0599]: no function or associated item named `create_inherent` found for s = note: this error originates in the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0599]: no function or associated item named `is_inherent` found for struct `pallet::Pallet` in the current scope - --> tests/construct_runtime_ui/undefined_inherent_part.rs:65:1 + --> tests/construct_runtime_ui/undefined_inherent_part.rs:66:1 | 28 | pub struct Pallet(_); | -------------------- function or associated item `is_inherent` not found for this struct ... -65 | construct_runtime! { +66 | construct_runtime! { | _^ -66 | | pub struct Runtime -67 | | { -68 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, -69 | | Pallet: pallet expanded::{}::{Pallet, Inherent}, -70 | | } -71 | | } +67 | | pub struct Runtime +68 | | { +69 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, +70 | | Pallet: pallet expanded::{}::{Pallet, Inherent}, +71 | | } +72 | | } | |_^ function or associated item not found in `Pallet` | = help: items from traits can only be used if the trait is implemented and in scope @@ -58,19 +58,19 @@ error[E0599]: no function or associated item named `is_inherent` found for struc = note: this error originates in the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0599]: no function or associated item named `check_inherent` found for struct `pallet::Pallet` in the current scope - --> tests/construct_runtime_ui/undefined_inherent_part.rs:65:1 + --> tests/construct_runtime_ui/undefined_inherent_part.rs:66:1 | 28 | pub struct Pallet(_); | -------------------- function or associated item `check_inherent` not found for this struct ... -65 | construct_runtime! { +66 | construct_runtime! { | _^ -66 | | pub struct Runtime -67 | | { -68 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, -69 | | Pallet: pallet expanded::{}::{Pallet, Inherent}, -70 | | } -71 | | } +67 | | pub struct Runtime +68 | | { +69 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, +70 | | Pallet: pallet expanded::{}::{Pallet, Inherent}, +71 | | } +72 | | } | |_^ function or associated item not found in `Pallet` | = help: items from traits can only be used if the trait is implemented and in scope @@ -79,19 +79,19 @@ error[E0599]: no function or associated item named `check_inherent` found for st = note: this error originates in the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0599]: no associated item named `INHERENT_IDENTIFIER` found for struct `pallet::Pallet` in the current scope - --> tests/construct_runtime_ui/undefined_inherent_part.rs:65:1 + --> tests/construct_runtime_ui/undefined_inherent_part.rs:66:1 | 28 | pub struct Pallet(_); | -------------------- associated item `INHERENT_IDENTIFIER` not found for this struct ... -65 | construct_runtime! { +66 | construct_runtime! { | _^ -66 | | pub struct Runtime -67 | | { -68 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, -69 | | Pallet: pallet expanded::{}::{Pallet, Inherent}, -70 | | } -71 | | } +67 | | pub struct Runtime +68 | | { +69 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, +70 | | Pallet: pallet expanded::{}::{Pallet, Inherent}, +71 | | } +72 | | } | |_^ associated item not found in `Pallet` | = help: items from traits can only be used if the trait is implemented and in scope @@ -100,19 +100,19 @@ error[E0599]: no associated item named `INHERENT_IDENTIFIER` found for struct `p = note: this error originates in the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0599]: no function or associated item named `is_inherent_required` found for struct `pallet::Pallet` in the current scope - --> tests/construct_runtime_ui/undefined_inherent_part.rs:65:1 + --> tests/construct_runtime_ui/undefined_inherent_part.rs:66:1 | 28 | pub struct Pallet(_); | -------------------- function or associated item `is_inherent_required` not found for this struct ... -65 | construct_runtime! { +66 | construct_runtime! { | _^ -66 | | pub struct Runtime -67 | | { -68 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, -69 | | Pallet: pallet expanded::{}::{Pallet, Inherent}, -70 | | } -71 | | } +67 | | pub struct Runtime +68 | | { +69 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, +70 | | Pallet: pallet expanded::{}::{Pallet, Inherent}, +71 | | } +72 | | } | |_^ function or associated item not found in `Pallet` | = help: items from traits can only be used if the trait is implemented and in scope diff --git a/substrate/frame/support/test/tests/construct_runtime_ui/undefined_origin_part.rs b/substrate/frame/support/test/tests/construct_runtime_ui/undefined_origin_part.rs index 656365279b8..40a4a1ebcb5 100644 --- a/substrate/frame/support/test/tests/construct_runtime_ui/undefined_origin_part.rs +++ b/substrate/frame/support/test/tests/construct_runtime_ui/undefined_origin_part.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use frame_support::construct_runtime; +use frame_support::{construct_runtime, derive_impl}; use sp_core::sr25519; use sp_runtime::{generic, traits::BlakeTwo256}; @@ -36,6 +36,7 @@ pub type UncheckedExtrinsic = generic::UncheckedExtrinsic, Event}, -69 | | Pallet: pallet expanded::{}::{Pallet, Origin}, -70 | | } -71 | | } +66 | / construct_runtime! { +67 | | pub struct Runtime +68 | | { +69 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, +70 | | Pallet: pallet expanded::{}::{Pallet, Origin}, +71 | | } +72 | | } | |_- in this macro invocation | = note: this error originates in the macro `pallet::__substrate_origin_check::is_origin_part_defined` which comes from the expansion of the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0412]: cannot find type `Origin` in module `pallet` - --> tests/construct_runtime_ui/undefined_origin_part.rs:65:1 + --> tests/construct_runtime_ui/undefined_origin_part.rs:66:1 | -65 | / construct_runtime! { -66 | | pub struct Runtime -67 | | { -68 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, -69 | | Pallet: pallet expanded::{}::{Pallet, Origin}, -70 | | } -71 | | } +66 | / construct_runtime! { +67 | | pub struct Runtime +68 | | { +69 | | System: frame_system expanded::{}::{Pallet, Call, Storage, Config, Event}, +70 | | Pallet: pallet expanded::{}::{Pallet, Origin}, +71 | | } +72 | | } | |_^ not found in `pallet` | = note: this error originates in the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/substrate/frame/support/test/tests/construct_runtime_ui/undefined_validate_unsigned_part.rs b/substrate/frame/support/test/tests/construct_runtime_ui/undefined_validate_unsigned_part.rs index 05545821ab0..be9e4ac2c30 100644 --- a/substrate/frame/support/test/tests/construct_runtime_ui/undefined_validate_unsigned_part.rs +++ b/substrate/frame/support/test/tests/construct_runtime_ui/undefined_validate_unsigned_part.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use frame_support::construct_runtime; +use frame_support::{construct_runtime, derive_impl}; use sp_core::sr25519; use sp_runtime::{generic, traits::BlakeTwo256}; @@ -36,6 +36,7 @@ pub type UncheckedExtrinsic = generic::UncheckedExtrinsic, Event}, -69 | | Pallet: pallet::{Pallet, ValidateUnsigned}, -70 | | } -71 | | } +66 | / construct_runtime! { +67 | | pub struct Runtime +68 | | { +69 | | System: frame_system::{Pallet, Call, Storage, Config, Event}, +70 | | Pallet: pallet::{Pallet, ValidateUnsigned}, +71 | | } +72 | | } | |_- in this macro invocation | = note: this error originates in the macro `pallet::__substrate_validate_unsigned_check::is_validate_unsigned_part_defined` which comes from the expansion of the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0599]: no variant or associated item named `Pallet` found for enum `RuntimeCall` in the current scope - --> tests/construct_runtime_ui/undefined_validate_unsigned_part.rs:69:3 + --> tests/construct_runtime_ui/undefined_validate_unsigned_part.rs:70:3 | -65 | // construct_runtime! { -66 | || pub struct Runtime -67 | || { -68 | || System: frame_system::{Pallet, Call, Storage, Config, Event}, -69 | || Pallet: pallet::{Pallet, ValidateUnsigned}, +66 | // construct_runtime! { +67 | || pub struct Runtime +68 | || { +69 | || System: frame_system::{Pallet, Call, Storage, Config, Event}, +70 | || Pallet: pallet::{Pallet, ValidateUnsigned}, | || -^^^^^^ variant or associated item not found in `RuntimeCall` | ||________| | | ... | error[E0599]: no function or associated item named `pre_dispatch` found for struct `pallet::Pallet` in the current scope - --> tests/construct_runtime_ui/undefined_validate_unsigned_part.rs:65:1 + --> tests/construct_runtime_ui/undefined_validate_unsigned_part.rs:66:1 | 28 | pub struct Pallet(_); | -------------------- function or associated item `pre_dispatch` not found for this struct ... -65 | construct_runtime! { +66 | construct_runtime! { | __^ | | _| | || -66 | || pub struct Runtime -67 | || { -68 | || System: frame_system::{Pallet, Call, Storage, Config, Event}, -69 | || Pallet: pallet::{Pallet, ValidateUnsigned}, -70 | || } -71 | || } +67 | || pub struct Runtime +68 | || { +69 | || System: frame_system::{Pallet, Call, Storage, Config, Event}, +70 | || Pallet: pallet::{Pallet, ValidateUnsigned}, +71 | || } +72 | || } | ||_- in this macro invocation ... | | @@ -54,21 +54,21 @@ error[E0599]: no function or associated item named `pre_dispatch` found for stru = note: this error originates in the macro `frame_support::construct_runtime` which comes from the expansion of the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0599]: no function or associated item named `validate_unsigned` found for struct `pallet::Pallet` in the current scope - --> tests/construct_runtime_ui/undefined_validate_unsigned_part.rs:65:1 + --> tests/construct_runtime_ui/undefined_validate_unsigned_part.rs:66:1 | 28 | pub struct Pallet(_); | -------------------- function or associated item `validate_unsigned` not found for this struct ... -65 | construct_runtime! { +66 | construct_runtime! { | __^ | | _| | || -66 | || pub struct Runtime -67 | || { -68 | || System: frame_system::{Pallet, Call, Storage, Config, Event}, -69 | || Pallet: pallet::{Pallet, ValidateUnsigned}, -70 | || } -71 | || } +67 | || pub struct Runtime +68 | || { +69 | || System: frame_system::{Pallet, Call, Storage, Config, Event}, +70 | || Pallet: pallet::{Pallet, ValidateUnsigned}, +71 | || } +72 | || } | ||_- in this macro invocation ... | | diff --git a/substrate/frame/support/test/tests/pallet.rs b/substrate/frame/support/test/tests/pallet.rs index 00e7adafb0b..1afb8fdf497 100644 --- a/substrate/frame/support/test/tests/pallet.rs +++ b/substrate/frame/support/test/tests/pallet.rs @@ -16,7 +16,7 @@ // limitations under the License. use frame_support::{ - assert_ok, + assert_ok, derive_impl, dispatch::{DispatchClass, DispatchInfo, GetDispatchInfo, Parameter, Pays}, dispatch_context::with_context, pallet_prelude::{StorageInfoTrait, ValueQuery}, @@ -682,6 +682,7 @@ frame_support::parameter_types!( pub const MyGetParam3: u32 = 12; ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type BaseCallFilter = frame_support::traits::Everything; type RuntimeOrigin = RuntimeOrigin; diff --git a/substrate/frame/support/test/tests/pallet_instance.rs b/substrate/frame/support/test/tests/pallet_instance.rs index 724734ec4fc..e9ac03302b2 100644 --- a/substrate/frame/support/test/tests/pallet_instance.rs +++ b/substrate/frame/support/test/tests/pallet_instance.rs @@ -16,6 +16,7 @@ // limitations under the License. use frame_support::{ + derive_impl, dispatch::{DispatchClass, DispatchInfo, GetDispatchInfo, Pays}, pallet_prelude::ValueQuery, parameter_types, @@ -292,6 +293,7 @@ pub mod pallet2 { } } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type BaseCallFilter = frame_support::traits::Everything; type RuntimeOrigin = RuntimeOrigin; diff --git a/substrate/frame/support/test/tests/pallet_ui/pass/dev_mode_valid.rs b/substrate/frame/support/test/tests/pallet_ui/pass/dev_mode_valid.rs index bf26cfd95b1..4dc33991b12 100644 --- a/substrate/frame/support/test/tests/pallet_ui/pass/dev_mode_valid.rs +++ b/substrate/frame/support/test/tests/pallet_ui/pass/dev_mode_valid.rs @@ -17,7 +17,7 @@ #![cfg_attr(not(feature = "std"), no_std)] -use frame_support::traits::ConstU32; +use frame_support::{derive_impl, traits::ConstU32}; pub use pallet::*; @@ -70,6 +70,7 @@ pub mod pallet { impl Pallet {} } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type BaseCallFilter = frame_support::traits::Everything; type RuntimeOrigin = RuntimeOrigin; diff --git a/substrate/frame/support/test/tests/pallet_ui/pass/no_std_genesis_config.rs b/substrate/frame/support/test/tests/pallet_ui/pass/no_std_genesis_config.rs index 9ab486c718c..de856ddcd3e 100644 --- a/substrate/frame/support/test/tests/pallet_ui/pass/no_std_genesis_config.rs +++ b/substrate/frame/support/test/tests/pallet_ui/pass/no_std_genesis_config.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use frame_support::construct_runtime; +use frame_support::{construct_runtime, derive_impl}; use sp_core::sr25519; use sp_runtime::{generic, traits::BlakeTwo256}; @@ -27,6 +27,7 @@ pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; pub type UncheckedExtrinsic = sp_runtime::generic::UncheckedExtrinsic; +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type BlockWeights = (); type BlockLength = (); diff --git a/substrate/frame/support/test/tests/storage_layers.rs b/substrate/frame/support/test/tests/storage_layers.rs index b825c85f956..a6d16e0d66d 100644 --- a/substrate/frame/support/test/tests/storage_layers.rs +++ b/substrate/frame/support/test/tests/storage_layers.rs @@ -16,8 +16,8 @@ // limitations under the License. use frame_support::{ - assert_noop, assert_ok, dispatch::DispatchResult, ensure, pallet_prelude::ConstU32, - storage::with_storage_layer, + assert_noop, assert_ok, derive_impl, dispatch::DispatchResult, ensure, + pallet_prelude::ConstU32, storage::with_storage_layer, }; use pallet::*; use sp_io::TestExternalities; @@ -64,6 +64,7 @@ pub type Header = sp_runtime::generic::Header; pub type Block = sp_runtime::generic::Block; +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/system/benches/bench.rs b/substrate/frame/system/benches/bench.rs index da8bb10fd4e..79d5a2d8689 100644 --- a/substrate/frame/system/benches/bench.rs +++ b/substrate/frame/system/benches/bench.rs @@ -16,7 +16,10 @@ // limitations under the License. use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use frame_support::traits::{ConstU32, ConstU64}; +use frame_support::{ + derive_impl, + traits::{ConstU32, ConstU64}, +}; use sp_core::H256; use sp_runtime::{ traits::{BlakeTwo256, IdentityLookup}, @@ -57,6 +60,8 @@ frame_support::parameter_types! { 4 * 1024 * 1024, Perbill::from_percent(75), ); } + +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/system/benchmarking/src/mock.rs b/substrate/frame/system/benchmarking/src/mock.rs index 4e6b1221da3..9a81cddca14 100644 --- a/substrate/frame/system/benchmarking/src/mock.rs +++ b/substrate/frame/system/benchmarking/src/mock.rs @@ -20,6 +20,7 @@ #![cfg(test)] use codec::Encode; +use frame_support::derive_impl; use sp_runtime::{traits::IdentityLookup, BuildStorage}; type AccountId = u64; @@ -34,6 +35,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/timestamp/src/mock.rs b/substrate/frame/timestamp/src/mock.rs index 418d257b3f0..b75bcaeb0e0 100644 --- a/substrate/frame/timestamp/src/mock.rs +++ b/substrate/frame/timestamp/src/mock.rs @@ -21,7 +21,7 @@ use super::*; use crate as pallet_timestamp; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, ConstU64}, }; use sp_core::H256; @@ -42,6 +42,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/tips/src/tests.rs b/substrate/frame/tips/src/tests.rs index 189623b520e..d5c8e17a396 100644 --- a/substrate/frame/tips/src/tests.rs +++ b/substrate/frame/tips/src/tests.rs @@ -27,7 +27,7 @@ use sp_runtime::{ use sp_storage::Storage; use frame_support::{ - assert_noop, assert_ok, parameter_types, + assert_noop, assert_ok, derive_impl, parameter_types, storage::StoragePrefixedMap, traits::{ tokens::{PayFromAccount, UnityAssetBalanceConversion}, @@ -56,6 +56,8 @@ frame_support::construct_runtime!( parameter_types! { pub const AvailableBlockRatio: Perbill = Perbill::one(); } + +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/transaction-payment/asset-conversion-tx-payment/src/mock.rs b/substrate/frame/transaction-payment/asset-conversion-tx-payment/src/mock.rs index 76c78fb4222..081e8e53db2 100644 --- a/substrate/frame/transaction-payment/asset-conversion-tx-payment/src/mock.rs +++ b/substrate/frame/transaction-payment/asset-conversion-tx-payment/src/mock.rs @@ -18,6 +18,7 @@ use crate as pallet_asset_conversion_tx_payment; use codec; use frame_support::{ + derive_impl, dispatch::DispatchClass, instances::Instance2, ord_parameter_types, @@ -78,6 +79,7 @@ parameter_types! { pub static TransactionByteFee: u64 = 1; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = BlockWeights; diff --git a/substrate/frame/transaction-payment/asset-tx-payment/src/mock.rs b/substrate/frame/transaction-payment/asset-tx-payment/src/mock.rs index 5fa8a4ab27d..c9b00be8e2c 100644 --- a/substrate/frame/transaction-payment/asset-tx-payment/src/mock.rs +++ b/substrate/frame/transaction-payment/asset-tx-payment/src/mock.rs @@ -18,6 +18,7 @@ use crate as pallet_asset_tx_payment; use codec; use frame_support::{ + derive_impl, dispatch::DispatchClass, pallet_prelude::*, parameter_types, @@ -70,6 +71,7 @@ parameter_types! { pub static TransactionByteFee: u64 = 1; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = BlockWeights; diff --git a/substrate/frame/transaction-payment/src/mock.rs b/substrate/frame/transaction-payment/src/mock.rs index 419989bef12..d6686d44c80 100644 --- a/substrate/frame/transaction-payment/src/mock.rs +++ b/substrate/frame/transaction-payment/src/mock.rs @@ -22,6 +22,7 @@ use sp_core::H256; use sp_runtime::traits::{BlakeTwo256, IdentityLookup}; use frame_support::{ + derive_impl, dispatch::DispatchClass, parameter_types, traits::{ConstU32, ConstU64, Imbalance, OnUnbalanced}, @@ -69,6 +70,7 @@ parameter_types! { pub static OperationalFeeMultiplier: u8 = 5; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Runtime { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = BlockWeights; diff --git a/substrate/frame/treasury/src/tests.rs b/substrate/frame/treasury/src/tests.rs index 522ecf6b18f..093757b2770 100644 --- a/substrate/frame/treasury/src/tests.rs +++ b/substrate/frame/treasury/src/tests.rs @@ -27,7 +27,7 @@ use sp_runtime::{ }; use frame_support::{ - assert_err_ignore_postinfo, assert_noop, assert_ok, + assert_err_ignore_postinfo, assert_noop, assert_ok, derive_impl, pallet_prelude::Pays, parameter_types, traits::{ @@ -54,6 +54,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/tx-pause/src/mock.rs b/substrate/frame/tx-pause/src/mock.rs index 66218c8c015..4f1c981abc6 100644 --- a/substrate/frame/tx-pause/src/mock.rs +++ b/substrate/frame/tx-pause/src/mock.rs @@ -23,7 +23,7 @@ use super::*; use crate as pallet_tx_pause; use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU64, Everything, InsideBoth, InstanceFilter}, }; use frame_system::EnsureSignedBy; @@ -36,6 +36,7 @@ use sp_runtime::{ parameter_types! { pub const BlockHashCount: u64 = 250; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = InsideBoth; type BlockWeights = (); diff --git a/substrate/frame/uniques/src/mock.rs b/substrate/frame/uniques/src/mock.rs index 1f62c3c4e93..056c19ec559 100644 --- a/substrate/frame/uniques/src/mock.rs +++ b/substrate/frame/uniques/src/mock.rs @@ -21,7 +21,7 @@ use super::*; use crate as pallet_uniques; use frame_support::{ - construct_runtime, + construct_runtime, derive_impl, traits::{AsEnsureOriginWithArg, ConstU32, ConstU64}, }; use sp_core::H256; @@ -41,6 +41,7 @@ construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); diff --git a/substrate/frame/utility/src/tests.rs b/substrate/frame/utility/src/tests.rs index 01e3f5264bf..7b42fa511d1 100644 --- a/substrate/frame/utility/src/tests.rs +++ b/substrate/frame/utility/src/tests.rs @@ -23,7 +23,7 @@ use super::*; use crate as utility; use frame_support::{ - assert_err_ignore_postinfo, assert_noop, assert_ok, + assert_err_ignore_postinfo, assert_noop, assert_ok, derive_impl, dispatch::{DispatchErrorWithPostInfo, Pays}, error::BadOrigin, parameter_types, storage, @@ -144,6 +144,7 @@ parameter_types! { pub BlockWeights: frame_system::limits::BlockWeights = frame_system::limits::BlockWeights::simple_max(Weight::MAX); } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = TestBaseCallFilter; type BlockWeights = BlockWeights; diff --git a/substrate/frame/vesting/src/mock.rs b/substrate/frame/vesting/src/mock.rs index 13d6d5ba57a..67444b8d125 100644 --- a/substrate/frame/vesting/src/mock.rs +++ b/substrate/frame/vesting/src/mock.rs @@ -16,7 +16,7 @@ // limitations under the License. use frame_support::{ - parameter_types, + derive_impl, parameter_types, traits::{ConstU32, ConstU64, WithdrawReasons}, }; use sp_core::H256; @@ -39,6 +39,7 @@ frame_support::construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type AccountData = pallet_balances::AccountData; type AccountId = u64; diff --git a/substrate/frame/whitelist/src/mock.rs b/substrate/frame/whitelist/src/mock.rs index 4e70a503c28..200e589c6aa 100644 --- a/substrate/frame/whitelist/src/mock.rs +++ b/substrate/frame/whitelist/src/mock.rs @@ -22,7 +22,7 @@ use crate as pallet_whitelist; use frame_support::{ - construct_runtime, + construct_runtime, derive_impl, traits::{ConstU32, ConstU64, Nothing}, }; use frame_system::EnsureRoot; @@ -44,6 +44,7 @@ construct_runtime!( } ); +#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = Nothing; type BlockWeights = (); diff --git a/substrate/utils/frame/rpc/support/src/lib.rs b/substrate/utils/frame/rpc/support/src/lib.rs index 2d8e45cbfc6..b91ae436127 100644 --- a/substrate/utils/frame/rpc/support/src/lib.rs +++ b/substrate/utils/frame/rpc/support/src/lib.rs @@ -34,7 +34,7 @@ use sp_storage::{StorageData, StorageKey}; /// # use jsonrpsee::core::Error as RpcError; /// # use jsonrpsee::ws_client::WsClientBuilder; /// # use codec::Encode; -/// # use frame_support::{construct_runtime, traits::ConstU32}; +/// # use frame_support::{construct_runtime, derive_impl, traits::ConstU32}; /// # use substrate_frame_rpc_support::StorageQuery; /// # use sc_rpc_api::state::StateApiClient; /// # use sp_runtime::{traits::{BlakeTwo256, IdentityLookup}, testing::Header}; @@ -49,6 +49,7 @@ use sp_storage::{StorageData, StorageKey}; /// # /// # type Hash = sp_core::H256; /// # +/// # #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)] /// # impl frame_system::Config for TestRuntime { /// # type BaseCallFilter = (); /// # type BlockWeights = (); -- GitLab From dbd8d20b25b29abf138e3ad35c40df4c55bd7c5c Mon Sep 17 00:00:00 2001 From: Marcin S Date: Tue, 28 Nov 2023 14:23:25 +0100 Subject: [PATCH 088/102] PVF: Add test instructions (#2058) --- polkadot/doc/testing.md | 91 ++++++++++++++----- polkadot/node/core/pvf/README.md | 47 ++++++++++ ...executor_intf.rs => executor_interface.rs} | 6 +- polkadot/node/core/pvf/common/src/lib.rs | 2 +- .../node/core/pvf/execute-worker/src/lib.rs | 4 +- .../benches/prepare_rococo_runtime.rs | 2 +- .../node/core/pvf/prepare-worker/src/lib.rs | 4 +- polkadot/node/core/pvf/src/execute/mod.rs | 2 +- polkadot/node/core/pvf/src/execute/queue.rs | 8 +- .../{worker_intf.rs => worker_interface.rs} | 2 +- polkadot/node/core/pvf/src/lib.rs | 4 +- polkadot/node/core/pvf/src/prepare/mod.rs | 2 +- polkadot/node/core/pvf/src/prepare/pool.rs | 8 +- .../{worker_intf.rs => worker_interface.rs} | 2 +- polkadot/node/core/pvf/src/testing.rs | 4 +- .../{worker_intf.rs => worker_interface.rs} | 0 polkadot/node/core/pvf/tests/README.md | 9 -- .../implementers-guide/src/glossary.md | 9 +- 18 files changed, 146 insertions(+), 60 deletions(-) create mode 100644 polkadot/node/core/pvf/README.md rename polkadot/node/core/pvf/common/src/{executor_intf.rs => executor_interface.rs} (98%) rename polkadot/node/core/pvf/src/execute/{worker_intf.rs => worker_interface.rs} (99%) rename polkadot/node/core/pvf/src/prepare/{worker_intf.rs => worker_interface.rs} (99%) rename polkadot/node/core/pvf/src/{worker_intf.rs => worker_interface.rs} (100%) delete mode 100644 polkadot/node/core/pvf/tests/README.md diff --git a/polkadot/doc/testing.md b/polkadot/doc/testing.md index 1045303baf0..76703b1b439 100644 --- a/polkadot/doc/testing.md +++ b/polkadot/doc/testing.md @@ -1,6 +1,7 @@ # Testing -Automated testing is an essential tool to assure correctness. +Testing is an essential tool to assure correctness. This document describes how we test the Polkadot code, whether +locally, at scale, and/or automatically in CI. ## Scopes @@ -8,27 +9,57 @@ The testing strategy for Polkadot is 4-fold: ### Unit testing (1) -Boring, small scale correctness tests of individual functions. +Boring, small scale correctness tests of individual functions. It is usually +enough to run `cargo test` in the crate you are testing. + +For full coverage you may have to pass some additional features. For example: + +```sh +cargo test --features ci-only-tests +``` ### Integration tests -There are two variants of integration tests: +There are the following variants of integration tests: #### Subsystem tests (2) One particular subsystem (subsystem under test) interacts with a mocked overseer that is made to assert incoming and -outgoing messages of the subsystem under test. This is largely present today, but has some fragmentation in the evolved -integration test implementation. A `proc-macro`/`macro_rules` would allow for more consistent implementation and -structure. +outgoing messages of the subsystem under test. See e.g. the `statement-distribution` tests. #### Behavior tests (3) -Launching small scale networks, with multiple adversarial nodes without any further tooling required. This should -include tests around the thresholds in order to evaluate the error handling once certain assumed invariants fail. +Launching small scale networks, with multiple adversarial nodes. This should include tests around the thresholds in +order to evaluate the error handling once certain assumed invariants fail. + +Currently, we commonly use **zombienet** to run mini test-networks, whether locally or in CI. To run on your machine: + +- First, make sure you have [zombienet][zombienet] installed. + +- Now, all the required binaries must be installed in your $PATH. You must run the following from the `polkadot/` +directory in order to test your changes. (Not `zombienet setup`, or you will get the released binaries without your +local changes!) -For this purpose based on `AllSubsystems` and `proc-macro` `AllSubsystemsGen`. +```sh +cargo install --path . --locked +``` + +- You will also need to install whatever binaries are required for your specific tests. For example, to install +`undying-collator`, from `polkadot/`, run: + +```sh +cargo install --path ./parachain/test-parachains/undying/collator --locked +``` -This assumes a simplistic test runtime. +- Finally, run the zombienet test from the `polkadot` directory: + +```sh +RUST_LOG=parachain::pvf=trace zombienet --provider=native spawn zombienet_tests/functional/0001-parachains-pvf.toml +``` + +- You can pick a validator node like `alice` from the output and view its logs +(`tail -f `) or metrics. Make sure there is nothing funny in the logs +(try `grep WARN `). #### Testing at scale (4) @@ -41,13 +72,27 @@ addition prometheus avoiding additional Polkadot source changes. _Behavior tests_ and _testing at scale_ have naturally soft boundary. The most significant difference is the presence of a real network and the number of nodes, since a single host often not capable to run multiple nodes at once. ---- +## Observing Logs + +To verify expected behavior it's often useful to observe logs. To avoid too many +logs at once, you can run one test at a time: + +1. Add `sp_tracing::try_init_simple();` to the beginning of a test +2. Specify `RUST_LOG=::=trace` before the cargo command. + +For example: + +```sh +RUST_LOG=parachain::pvf=trace cargo test execute_can_run_serially +``` + +For more info on how our logs work, check [the docs][logs]. ## Coverage Coverage gives a _hint_ of the actually covered source lines by tests and test applications. -The state of the art is currently [tarpaulin][tarpaulin] which unfortunately yields a lot of false negatives. Lines that +The state of the art is currently tarpaulin which unfortunately yields a lot of false negatives. Lines that are in fact covered, marked as uncovered due to a mere linebreak in a statement can cause these artifacts. This leads to lower coverage percentages than there actually is. @@ -102,7 +147,7 @@ Fuzzing is an approach to verify correctness against arbitrary or partially stru Currently implemented fuzzing targets: -* `erasure-coding` +- `erasure-coding` The tooling of choice here is `honggfuzz-rs` as it allows _fastest_ coverage according to "some paper" which is a positive feature when run as part of PRs. @@ -113,16 +158,16 @@ hence simply not feasible due to the amount of state that is required. Other candidates to implement fuzzing are: -* `rpc` -* ... +- `rpc` +- ... ## Performance metrics There are various ways of performance metrics. -* timing with `criterion` -* cache hits/misses w/ `iai` harness or `criterion-perf` -* `coz` a performance based compiler +- timing with `criterion` +- cache hits/misses w/ `iai` harness or `criterion-perf` +- `coz` a performance based compiler Most of them are standard tools to aid in the creation of statistical tests regarding change in time of certain unit tests. @@ -140,10 +185,10 @@ pursued at the current time. Requirements: -* spawn nodes with preconfigured behaviors -* allow multiple types of configuration to be specified -* allow extendability via external crates -* ... +- spawn nodes with preconfigured behaviors +- allow multiple types of configuration to be specified +- allow extendability via external crates +- ... --- @@ -251,5 +296,7 @@ behavior_testcase!{ } ``` +[zombienet]: https://github.com/paritytech/zombienet [Gurke]: https://github.com/paritytech/gurke [simnet]: https://github.com/paritytech/simnet_scripts +[logs]: https://github.com/paritytech/polkadot-sdk/blob/master/polkadot/node/gum/src/lib.rs diff --git a/polkadot/node/core/pvf/README.md b/polkadot/node/core/pvf/README.md new file mode 100644 index 00000000000..796e17c05fa --- /dev/null +++ b/polkadot/node/core/pvf/README.md @@ -0,0 +1,47 @@ +# PVF Host + +This is the PVF host, responsible for responding to requests from Candidate +Validation and spawning worker tasks to fulfill those requests. + +See also: + +- for more information: [the Implementer's Guide][impl-guide] +- for an explanation of terminology: [the Glossary][glossary] + +## Running basic tests + +Running `cargo test` in the `pvf/` directory will run unit and integration +tests. + +**Note:** some tests run only under Linux, amd64, and/or with the +`ci-only-tests` feature enabled. + +See the general [Testing][testing] instructions for more information on +**running tests** and **observing logs**. + +## Running a test-network with zombienet + +Since this crate is consensus-critical, for major changes it is highly +recommended to run a test-network. See the "Behavior tests" section of the +[Testing][testing] docs for full instructions. + +To run the PVF-specific zombienet test: + +```sh +RUST_LOG=parachain::pvf=trace zombienet --provider=native spawn zombienet_tests/functional/0001-parachains-pvf.toml +``` + +## Testing on Linux + +Some of the PVF functionality, especially related to security, is Linux-only, +and some is amd64-only. If you touch anything security-related, make sure to +test on Linux amd64! If you're on a Mac, you can either run a VM or you can hire +a VPS and use the open-source tool [EternalTerminal][et] to connect to it.[^et] + +[^et]: Unlike ssh, ET preserves your session across disconnects, and unlike +another popular persistent shell, mosh, it allows scrollback. + +[impl-guide]: https://paritytech.github.io/polkadot-sdk/book/pvf-prechecking.html#summary +[glossary]: https://paritytech.github.io/polkadot-sdk/book/glossary.html +[testing]: https://github.com/paritytech/polkadot-sdk/blob/master/polkadot/doc/testing.md +[et]: https://github.com/MisterTea/EternalTerminal diff --git a/polkadot/node/core/pvf/common/src/executor_intf.rs b/polkadot/node/core/pvf/common/src/executor_interface.rs similarity index 98% rename from polkadot/node/core/pvf/common/src/executor_intf.rs rename to polkadot/node/core/pvf/common/src/executor_interface.rs index 4bafc3f4291..e634940dbe6 100644 --- a/polkadot/node/core/pvf/common/src/executor_intf.rs +++ b/polkadot/node/core/pvf/common/src/executor_interface.rs @@ -175,11 +175,9 @@ pub fn params_to_wasmtime_semantics(par: &ExecutorParams) -> Semantics { /// Runs the prevalidation on the given code. Returns a [`RuntimeBlob`] if it succeeds. pub fn prevalidate(code: &[u8]) -> Result { + // Construct the runtime blob and do some basic checks for consistency. let blob = RuntimeBlob::new(code)?; - // It's assumed this function will take care of any prevalidation logic - // that needs to be done. - // - // Do nothing for now. + // In the future this function should take care of any further prevalidation logic. Ok(blob) } diff --git a/polkadot/node/core/pvf/common/src/lib.rs b/polkadot/node/core/pvf/common/src/lib.rs index c041c60aaf9..dced43ef213 100644 --- a/polkadot/node/core/pvf/common/src/lib.rs +++ b/polkadot/node/core/pvf/common/src/lib.rs @@ -18,7 +18,7 @@ pub mod error; pub mod execute; -pub mod executor_intf; +pub mod executor_interface; pub mod prepare; pub mod pvf; pub mod worker; diff --git a/polkadot/node/core/pvf/execute-worker/src/lib.rs b/polkadot/node/core/pvf/execute-worker/src/lib.rs index d82a8fca65d..8c985fc7996 100644 --- a/polkadot/node/core/pvf/execute-worker/src/lib.rs +++ b/polkadot/node/core/pvf/execute-worker/src/lib.rs @@ -17,7 +17,7 @@ //! Contains the logic for executing PVFs. Used by the polkadot-execute-worker binary. pub use polkadot_node_core_pvf_common::{ - executor_intf::execute_artifact, worker_dir, SecurityStatus, + executor_interface::execute_artifact, worker_dir, SecurityStatus, }; // NOTE: Initializing logging in e.g. tests will not have an effect in the workers, as they are @@ -236,7 +236,7 @@ fn validate_using_artifact( let descriptor_bytes = match unsafe { // SAFETY: this should be safe since the compiled artifact passed here comes from the // file created by the prepare workers. These files are obtained by calling - // [`executor_intf::prepare`]. + // [`executor_interface::prepare`]. execute_artifact(compiled_artifact_blob, executor_params, params) } { Err(err) => return JobResponse::format_invalid("execute", &err), diff --git a/polkadot/node/core/pvf/prepare-worker/benches/prepare_rococo_runtime.rs b/polkadot/node/core/pvf/prepare-worker/benches/prepare_rococo_runtime.rs index ba2568cd80c..d531c90b64b 100644 --- a/polkadot/node/core/pvf/prepare-worker/benches/prepare_rococo_runtime.rs +++ b/polkadot/node/core/pvf/prepare-worker/benches/prepare_rococo_runtime.rs @@ -16,7 +16,7 @@ use criterion::{criterion_group, criterion_main, Criterion, SamplingMode}; use polkadot_node_core_pvf_common::{ - executor_intf::{prepare, prevalidate}, + executor_interface::{prepare, prevalidate}, prepare::PrepareJobKind, pvf::PvfPrepData, }; diff --git a/polkadot/node/core/pvf/prepare-worker/src/lib.rs b/polkadot/node/core/pvf/prepare-worker/src/lib.rs index 499e87c6e20..b3f8a6b11ba 100644 --- a/polkadot/node/core/pvf/prepare-worker/src/lib.rs +++ b/polkadot/node/core/pvf/prepare-worker/src/lib.rs @@ -18,7 +18,7 @@ mod memory_stats; -use polkadot_node_core_pvf_common::executor_intf::{prepare, prevalidate}; +use polkadot_node_core_pvf_common::executor_interface::{prepare, prevalidate}; // NOTE: Initializing logging in e.g. tests will not have an effect in the workers, as they are // separate spawned processes. Run with e.g. `RUST_LOG=parachain::pvf-prepare-worker=trace`. @@ -41,7 +41,7 @@ use os_pipe::{self, PipeReader, PipeWriter}; use parity_scale_codec::{Decode, Encode}; use polkadot_node_core_pvf_common::{ error::{PrepareError, PrepareWorkerResult}, - executor_intf::create_runtime_from_artifact_bytes, + executor_interface::create_runtime_from_artifact_bytes, framed_recv_blocking, framed_send_blocking, prepare::{MemoryStats, PrepareJobKind, PrepareStats, PrepareWorkerSuccess}, pvf::PvfPrepData, diff --git a/polkadot/node/core/pvf/src/execute/mod.rs b/polkadot/node/core/pvf/src/execute/mod.rs index 669b9dc04d7..c6d9cf90fa2 100644 --- a/polkadot/node/core/pvf/src/execute/mod.rs +++ b/polkadot/node/core/pvf/src/execute/mod.rs @@ -21,6 +21,6 @@ //! `polkadot_node_core_pvf_worker::execute_worker_entrypoint`. mod queue; -mod worker_intf; +mod worker_interface; pub use queue::{start, PendingExecutionRequest, ToQueue}; diff --git a/polkadot/node/core/pvf/src/execute/queue.rs b/polkadot/node/core/pvf/src/execute/queue.rs index a0c24fd4432..be607fe1c20 100644 --- a/polkadot/node/core/pvf/src/execute/queue.rs +++ b/polkadot/node/core/pvf/src/execute/queue.rs @@ -16,12 +16,12 @@ //! A queue that handles requests for PVF execution. -use super::worker_intf::Outcome; +use super::worker_interface::Outcome; use crate::{ artifacts::{ArtifactId, ArtifactPathId}, host::ResultSender, metrics::Metrics, - worker_intf::{IdleWorker, WorkerHandle}, + worker_interface::{IdleWorker, WorkerHandle}, InvalidCandidate, PossiblyInvalidError, ValidationError, LOG_TARGET, }; use futures::{ @@ -448,7 +448,7 @@ async fn spawn_worker_task( use futures_timer::Delay; loop { - match super::worker_intf::spawn( + match super::worker_interface::spawn( &program_path, &cache_path, job.executor_params.clone(), @@ -500,7 +500,7 @@ fn assign(queue: &mut Queue, worker: Worker, job: ExecuteJob) { queue.mux.push( async move { let _timer = execution_timer; - let outcome = super::worker_intf::start_work( + let outcome = super::worker_interface::start_work( idle, job.artifact.clone(), job.exec_timeout, diff --git a/polkadot/node/core/pvf/src/execute/worker_intf.rs b/polkadot/node/core/pvf/src/execute/worker_interface.rs similarity index 99% rename from polkadot/node/core/pvf/src/execute/worker_intf.rs rename to polkadot/node/core/pvf/src/execute/worker_interface.rs index 16a7c290b52..7864ce548c2 100644 --- a/polkadot/node/core/pvf/src/execute/worker_intf.rs +++ b/polkadot/node/core/pvf/src/execute/worker_interface.rs @@ -18,7 +18,7 @@ use crate::{ artifacts::ArtifactPathId, - worker_intf::{ + worker_interface::{ clear_worker_dir_path, framed_recv, framed_send, spawn_with_program_path, IdleWorker, SpawnErr, WorkerDir, WorkerHandle, JOB_TIMEOUT_WALL_CLOCK_FACTOR, }, diff --git a/polkadot/node/core/pvf/src/lib.rs b/polkadot/node/core/pvf/src/lib.rs index 3306a2461c1..79391630b2d 100644 --- a/polkadot/node/core/pvf/src/lib.rs +++ b/polkadot/node/core/pvf/src/lib.rs @@ -98,7 +98,7 @@ mod metrics; mod prepare; mod priority; mod security; -mod worker_intf; +mod worker_interface; #[cfg(feature = "test-utils")] pub mod testing; @@ -107,7 +107,7 @@ pub use error::{InvalidCandidate, PossiblyInvalidError, ValidationError}; pub use host::{start, Config, ValidationHost, EXECUTE_BINARY_NAME, PREPARE_BINARY_NAME}; pub use metrics::Metrics; pub use priority::Priority; -pub use worker_intf::{framed_recv, framed_send, JOB_TIMEOUT_WALL_CLOCK_FACTOR}; +pub use worker_interface::{framed_recv, framed_send, JOB_TIMEOUT_WALL_CLOCK_FACTOR}; // Re-export some common types. pub use polkadot_node_core_pvf_common::{ diff --git a/polkadot/node/core/pvf/src/prepare/mod.rs b/polkadot/node/core/pvf/src/prepare/mod.rs index 580f67f73fa..eb88070c2ba 100644 --- a/polkadot/node/core/pvf/src/prepare/mod.rs +++ b/polkadot/node/core/pvf/src/prepare/mod.rs @@ -24,7 +24,7 @@ mod pool; mod queue; -mod worker_intf; +mod worker_interface; pub use pool::start as start_pool; pub use queue::{start as start_queue, FromQueue, ToQueue}; diff --git a/polkadot/node/core/pvf/src/prepare/pool.rs b/polkadot/node/core/pvf/src/prepare/pool.rs index 4901be9fe1b..4e11f977c9e 100644 --- a/polkadot/node/core/pvf/src/prepare/pool.rs +++ b/polkadot/node/core/pvf/src/prepare/pool.rs @@ -14,10 +14,10 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use super::worker_intf::{self, Outcome}; +use super::worker_interface::{self, Outcome}; use crate::{ metrics::Metrics, - worker_intf::{IdleWorker, WorkerHandle}, + worker_interface::{IdleWorker, WorkerHandle}, LOG_TARGET, }; use always_assert::never; @@ -278,7 +278,7 @@ async fn spawn_worker_task( use futures_timer::Delay; loop { - match worker_intf::spawn( + match worker_interface::spawn( &program_path, &cache_path, spawn_timeout, @@ -306,7 +306,7 @@ async fn start_work_task( cache_path: PathBuf, _preparation_timer: Option, ) -> PoolEvent { - let outcome = worker_intf::start_work(&metrics, idle, pvf, cache_path).await; + let outcome = worker_interface::start_work(&metrics, idle, pvf, cache_path).await; PoolEvent::StartWork(worker, outcome) } diff --git a/polkadot/node/core/pvf/src/prepare/worker_intf.rs b/polkadot/node/core/pvf/src/prepare/worker_interface.rs similarity index 99% rename from polkadot/node/core/pvf/src/prepare/worker_intf.rs rename to polkadot/node/core/pvf/src/prepare/worker_interface.rs index a393e9baa9e..984a87ce5c9 100644 --- a/polkadot/node/core/pvf/src/prepare/worker_intf.rs +++ b/polkadot/node/core/pvf/src/prepare/worker_interface.rs @@ -19,7 +19,7 @@ use crate::{ artifacts::ArtifactId, metrics::Metrics, - worker_intf::{ + worker_interface::{ clear_worker_dir_path, framed_recv, framed_send, spawn_with_program_path, IdleWorker, SpawnErr, WorkerDir, WorkerHandle, JOB_TIMEOUT_WALL_CLOCK_FACTOR, }, diff --git a/polkadot/node/core/pvf/src/testing.rs b/polkadot/node/core/pvf/src/testing.rs index c7c885c4342..60b0b4b8d3d 100644 --- a/polkadot/node/core/pvf/src/testing.rs +++ b/polkadot/node/core/pvf/src/testing.rs @@ -18,7 +18,7 @@ pub use crate::{ host::{EXECUTE_BINARY_NAME, PREPARE_BINARY_NAME}, - worker_intf::{spawn_with_program_path, SpawnErr}, + worker_interface::{spawn_with_program_path, SpawnErr}, }; use crate::get_worker_version; @@ -36,7 +36,7 @@ pub fn validate_candidate( code: &[u8], params: &[u8], ) -> Result, Box> { - use polkadot_node_core_pvf_common::executor_intf::{prepare, prevalidate}; + use polkadot_node_core_pvf_common::executor_interface::{prepare, prevalidate}; use polkadot_node_core_pvf_execute_worker::execute_artifact; let code = sp_maybe_compressed_blob::decompress(code, 10 * 1024 * 1024) diff --git a/polkadot/node/core/pvf/src/worker_intf.rs b/polkadot/node/core/pvf/src/worker_interface.rs similarity index 100% rename from polkadot/node/core/pvf/src/worker_intf.rs rename to polkadot/node/core/pvf/src/worker_interface.rs diff --git a/polkadot/node/core/pvf/tests/README.md b/polkadot/node/core/pvf/tests/README.md deleted file mode 100644 index 27385e19025..00000000000 --- a/polkadot/node/core/pvf/tests/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# PVF host integration tests - -## Testing - -Before running these tests, make sure the worker binaries are built first. This can be done with: - -```sh -cargo build --bin polkadot-execute-worker --bin polkadot-prepare-worker -``` diff --git a/polkadot/roadmap/implementers-guide/src/glossary.md b/polkadot/roadmap/implementers-guide/src/glossary.md index b2365ba51c5..ac2392b14d2 100644 --- a/polkadot/roadmap/implementers-guide/src/glossary.md +++ b/polkadot/roadmap/implementers-guide/src/glossary.md @@ -48,10 +48,13 @@ has exactly one downward message queue. - **Proof-of-Validity (PoV):** A stateless-client proof that a parachain candidate is valid, with respect to some validation function. - **PVF:** Parachain Validation Function. The validation code that is run by validators on parachains. -- **PVF Prechecking:** This is the process of initially checking the PVF when it is first added. We attempt preparation - of the PVF and make sure it succeeds within a given timeout, plus some additional checks. +- **PVF Prechecking:** This is the process of checking a PVF when it appears + on-chain, either when the parachain is onboarded or when it signalled an + upgrade of its validation code. We attempt preparation of the PVF and make + sure it that succeeds within a given timeout, plus some additional checks. - **PVF Preparation:** This is the process of preparing the WASM blob and includes both prevalidation and compilation. - As there is no prevalidation right now, preparation just consists of compilation. +- **PVF Prevalidation:** Some basic checks for correctness of the PVF blob. The + first step of PVF preparation, before compilation. - **Relay Parent:** A block in the relay chain, referred to in a context where work is being done in the context of the state at this block. - **Runtime:** The relay-chain state machine. -- GitLab From f01781a9021d1a95db9e77174b94745b8bed244c Mon Sep 17 00:00:00 2001 From: Koute Date: Tue, 28 Nov 2023 22:30:02 +0900 Subject: [PATCH 089/102] Remove `wasm-builder`'s README (#2525) Followup of https://github.com/paritytech/polkadot-sdk/pull/2217 This PR deletes the README of the `wasm-builder` crate and moves its docs back into the rustdoc, [as requested here](https://github.com/paritytech/polkadot-sdk/pull/2217#discussion_r1406401175). (: --- substrate/utils/wasm-builder/Cargo.toml | 1 - substrate/utils/wasm-builder/README.md | 92 ----------------------- substrate/utils/wasm-builder/src/lib.rs | 97 ++++++++++++++++++++++++- 3 files changed, 96 insertions(+), 94 deletions(-) delete mode 100644 substrate/utils/wasm-builder/README.md diff --git a/substrate/utils/wasm-builder/Cargo.toml b/substrate/utils/wasm-builder/Cargo.toml index 2550122ad4b..fc3f6450fd7 100644 --- a/substrate/utils/wasm-builder/Cargo.toml +++ b/substrate/utils/wasm-builder/Cargo.toml @@ -4,7 +4,6 @@ version = "5.0.0-dev" authors.workspace = true description = "Utility for building WASM binaries" edition.workspace = true -readme = "README.md" repository.workspace = true license = "Apache-2.0" homepage = "https://substrate.io" diff --git a/substrate/utils/wasm-builder/README.md b/substrate/utils/wasm-builder/README.md deleted file mode 100644 index 6dfc743816c..00000000000 --- a/substrate/utils/wasm-builder/README.md +++ /dev/null @@ -1,92 +0,0 @@ -# Wasm builder is a utility for building a project as a Wasm binary - -The Wasm builder is a tool that integrates the process of building the WASM binary of your project into the main `cargo` -build process. - -## Project setup - -A project that should be compiled as a Wasm binary needs to: - -1. Add a `build.rs` file. -2. Add `wasm-builder` as dependency into `build-dependencies` (can be made optional and only enabled when `std` feature - is used). - -The `build.rs` file needs to contain the following code: - -```rust,no_run -fn main() { - #[cfg(feature = "std")] - { - substrate_wasm_builder::WasmBuilder::new() - // Tell the builder to build the project (crate) this `build.rs` is part of. - .with_current_project() - // Make sure to export the `heap_base` global, this is required by Substrate - .export_heap_base() - // Build the Wasm file so that it imports the memory (need to be provided by at instantiation) - .import_memory() - // Build it. - .build(); - } -} -``` - -As the final step, you need to add the following to your project: - -```rust,ignore -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); -``` - -This will include the generated Wasm binary as two constants `WASM_BINARY` and `WASM_BINARY_BLOATY`. The former is a -compact Wasm binary and the latter is the Wasm binary as being generated by the compiler. Both variables have -`Option<&'static [u8]>` as type. - -### Features - -Wasm builder supports to enable cargo features while building the Wasm binary. By default it will enable all features in -the wasm build that are enabled for the native build except the `default` and `std` features. Besides that, wasm builder -supports the special `runtime-wasm` feature. This `runtime-wasm` feature will be enabled by the wasm builder when it -compiles the Wasm binary. If this feature is not present, it will not be enabled. - -## Environment variables - -By using environment variables, you can configure which Wasm binaries are built and how: - -- `SKIP_WASM_BUILD` - Skips building any Wasm binary. This is useful when only native should be recompiled. If this is - the first run and there doesn't exist a Wasm binary, this will set both variables to `None`. -- `WASM_BUILD_TYPE` - Sets the build type for building Wasm binaries. Supported values are `release` or `debug`. By - default the build type is equal to the build type used by the main build. -- `FORCE_WASM_BUILD` - Can be set to force a Wasm build. On subsequent calls the value of the variable needs to change. - As wasm-builder instructs `cargo` to watch for file changes this environment variable should only - be required in certain circumstances. -- `WASM_BUILD_RUSTFLAGS` - Extend `RUSTFLAGS` given to `cargo build` while building the wasm binary. -- `WASM_BUILD_NO_COLOR` - Disable color output of the wasm build. -- `WASM_TARGET_DIRECTORY` - Will copy any build Wasm binary to the given directory. The path needs to be absolute. -- `WASM_BUILD_TOOLCHAIN` - The toolchain that should be used to build the Wasm binaries. The format needs to be the same - as used by cargo, e.g. `nightly-2020-02-20`. -- `WASM_BUILD_WORKSPACE_HINT` - Hint the workspace that is being built. This is normally not required as we walk up from - the target directory until we find a `Cargo.toml`. If the target directory is changed for - the build, this environment variable can be used to point to the actual workspace. -- `WASM_BUILD_STD` - Sets whether the Rust's standard library crates will also be built. This is necessary to make sure - the standard library crates only use the exact WASM feature set that our executor supports. - Enabled by default. -- `CARGO_NET_OFFLINE` - If `true`, `--offline` will be passed to all processes launched to prevent network access. - Useful in offline environments. - -Each project can be skipped individually by using the environment variable `SKIP_PROJECT_NAME_WASM_BUILD`. Where -`PROJECT_NAME` needs to be replaced by the name of the cargo project, e.g. `kitchensink-runtime` will be `NODE_RUNTIME`. - -## Prerequisites - -Wasm builder requires the following prerequisites for building the Wasm binary: - -- rust nightly + `wasm32-unknown-unknown` toolchain - -or - -- rust stable and version at least 1.68.0 + `wasm32-unknown-unknown` toolchain - -If a specific rust is installed with `rustup`, it is important that the wasm target is installed as well. For example if -installing the rust from 20.02.2020 using `rustup install nightly-2020-02-20`, the wasm target needs to be installed as -well `rustup target add wasm32-unknown-unknown --toolchain nightly-2020-02-20`. - -License: Apache-2.0 diff --git a/substrate/utils/wasm-builder/src/lib.rs b/substrate/utils/wasm-builder/src/lib.rs index cd31a8cba10..ec85fd1ffdd 100644 --- a/substrate/utils/wasm-builder/src/lib.rs +++ b/substrate/utils/wasm-builder/src/lib.rs @@ -15,7 +15,102 @@ // See the License for the specific language governing permissions and // limitations under the License. -#![doc = include_str!("../README.md")] +//! # Wasm builder is a utility for building a project as a Wasm binary +//! +//! The Wasm builder is a tool that integrates the process of building the WASM binary of your +//! project into the main `cargo` build process. +//! +//! ## Project setup +//! +//! A project that should be compiled as a Wasm binary needs to: +//! +//! 1. Add a `build.rs` file. +//! 2. Add `wasm-builder` as dependency into `build-dependencies`. +//! +//! The `build.rs` file needs to contain the following code: +//! +//! ```no_run +//! use substrate_wasm_builder::WasmBuilder; +//! +//! fn main() { +//! WasmBuilder::new() +//! // Tell the builder to build the project (crate) this `build.rs` is part of. +//! .with_current_project() +//! // Make sure to export the `heap_base` global, this is required by Substrate +//! .export_heap_base() +//! // Build the Wasm file so that it imports the memory (need to be provided by at instantiation) +//! .import_memory() +//! // Build it. +//! .build() +//! } +//! ``` +//! +//! As the final step, you need to add the following to your project: +//! +//! ```ignore +//! include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); +//! ``` +//! +//! This will include the generated Wasm binary as two constants `WASM_BINARY` and +//! `WASM_BINARY_BLOATY`. The former is a compact Wasm binary and the latter is the Wasm binary as +//! being generated by the compiler. Both variables have `Option<&'static [u8]>` as type. +//! +//! ### Feature +//! +//! Wasm builder supports to enable cargo features while building the Wasm binary. By default it +//! will enable all features in the wasm build that are enabled for the native build except the +//! `default` and `std` features. Besides that, wasm builder supports the special `runtime-wasm` +//! feature. This `runtime-wasm` feature will be enabled by the wasm builder when it compiles the +//! Wasm binary. If this feature is not present, it will not be enabled. +//! +//! ## Environment variables +//! +//! By using environment variables, you can configure which Wasm binaries are built and how: +//! +//! - `SKIP_WASM_BUILD` - Skips building any Wasm binary. This is useful when only native should be +//! recompiled. If this is the first run and there doesn't exist a Wasm binary, this will set both +//! variables to `None`. +//! - `WASM_BUILD_TYPE` - Sets the build type for building Wasm binaries. Supported values are +//! `release` or `debug`. By default the build type is equal to the build type used by the main +//! build. +//! - `FORCE_WASM_BUILD` - Can be set to force a Wasm build. On subsequent calls the value of the +//! variable needs to change. As wasm-builder instructs `cargo` to watch for file changes this +//! environment variable should only be required in certain circumstances. +//! - `WASM_BUILD_RUSTFLAGS` - Extend `RUSTFLAGS` given to `cargo build` while building the wasm +//! binary. +//! - `WASM_BUILD_NO_COLOR` - Disable color output of the wasm build. +//! - `WASM_TARGET_DIRECTORY` - Will copy any build Wasm binary to the given directory. The path +//! needs to be absolute. +//! - `WASM_BUILD_TOOLCHAIN` - The toolchain that should be used to build the Wasm binaries. The +//! format needs to be the same as used by cargo, e.g. `nightly-2020-02-20`. +//! - `WASM_BUILD_WORKSPACE_HINT` - Hint the workspace that is being built. This is normally not +//! required as we walk up from the target directory until we find a `Cargo.toml`. If the target +//! directory is changed for the build, this environment variable can be used to point to the +//! actual workspace. +//! - `WASM_BUILD_STD` - Sets whether the Rust's standard library crates will also be built. This is +//! necessary to make sure the standard library crates only use the exact WASM feature set that +//! our executor supports. Enabled by default. +//! - `CARGO_NET_OFFLINE` - If `true`, `--offline` will be passed to all processes launched to +//! prevent network access. Useful in offline environments. +//! +//! Each project can be skipped individually by using the environment variable +//! `SKIP_PROJECT_NAME_WASM_BUILD`. Where `PROJECT_NAME` needs to be replaced by the name of the +//! cargo project, e.g. `kitchensink-runtime` will be `NODE_RUNTIME`. +//! +//! ## Prerequisites: +//! +//! Wasm builder requires the following prerequisites for building the Wasm binary: +//! +//! - rust nightly + `wasm32-unknown-unknown` toolchain +//! +//! or +//! +//! - rust stable and version at least 1.68.0 + `wasm32-unknown-unknown` toolchain +//! +//! If a specific rust is installed with `rustup`, it is important that the wasm target is +//! installed as well. For example if installing the rust from 20.02.2020 using `rustup +//! install nightly-2020-02-20`, the wasm target needs to be installed as well `rustup target add +//! wasm32-unknown-unknown --toolchain nightly-2020-02-20`. use std::{ env, fs, -- GitLab From c5f211d0dee5e698ded0700469fb81a8c22c244a Mon Sep 17 00:00:00 2001 From: s0me0ne-unkn0wn <48632512+s0me0ne-unkn0wn@users.noreply.github.com> Date: Tue, 28 Nov 2023 14:36:04 +0100 Subject: [PATCH 090/102] Remove `im-online` pallet from Rococo and Westend (#2265) Co-authored-by: ordian Co-authored-by: Vladimir Istyufeev --- .gitlab/pipeline/check.yml | 1 + .../chains/relays/rococo/src/genesis.rs | 4 - .../chains/relays/westend/src/genesis.rs | 4 - .../emulated/common/src/lib.rs | 2 - polkadot/node/service/src/chain_spec.rs | 64 +---- polkadot/runtime/rococo/src/lib.rs | 164 ++++++++++-- polkadot/runtime/westend/src/lib.rs | 163 ++++++++++-- .../frame/offences/benchmarking/src/lib.rs | 235 +----------------- 8 files changed, 288 insertions(+), 349 deletions(-) diff --git a/.gitlab/pipeline/check.yml b/.gitlab/pipeline/check.yml index b2f2efc5e66..3ef3865aa43 100644 --- a/.gitlab/pipeline/check.yml +++ b/.gitlab/pipeline/check.yml @@ -111,6 +111,7 @@ check-rust-feature-propagation: time ./try-runtime ${COMMAND_EXTRA_ARGS} \ --runtime ./target/release/wbuild/"$PACKAGE"/"$WASM" \ on-runtime-upgrade --disable-spec-version-check --checks=all ${SUBCOMMAND_EXTRA_ARGS} live --uri ${URI} + sleep 5 # Check runtime migrations for Parity managed relay chains check-runtime-migration-westend: diff --git a/cumulus/parachains/integration-tests/emulated/chains/relays/rococo/src/genesis.rs b/cumulus/parachains/integration-tests/emulated/chains/relays/rococo/src/genesis.rs index 6f5f3923ead..45e1e94de01 100644 --- a/cumulus/parachains/integration-tests/emulated/chains/relays/rococo/src/genesis.rs +++ b/cumulus/parachains/integration-tests/emulated/chains/relays/rococo/src/genesis.rs @@ -16,7 +16,6 @@ // Substrate use beefy_primitives::ecdsa_crypto::AuthorityId as BeefyId; use grandpa::AuthorityId as GrandpaId; -use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; use sp_consensus_babe::AuthorityId as BabeId; use sp_core::{sr25519, storage::Storage}; @@ -38,7 +37,6 @@ const ENDOWMENT: u128 = 1_000_000 * ROC; fn session_keys( babe: BabeId, grandpa: GrandpaId, - im_online: ImOnlineId, para_validator: ValidatorId, para_assignment: AssignmentId, authority_discovery: AuthorityDiscoveryId, @@ -47,7 +45,6 @@ fn session_keys( rococo_runtime::SessionKeys { babe, grandpa, - im_online, para_validator, para_assignment, authority_discovery, @@ -74,7 +71,6 @@ pub fn genesis() -> Storage { x.4.clone(), x.5.clone(), x.6.clone(), - x.7.clone(), get_from_seed::("Alice"), ), ) diff --git a/cumulus/parachains/integration-tests/emulated/chains/relays/westend/src/genesis.rs b/cumulus/parachains/integration-tests/emulated/chains/relays/westend/src/genesis.rs index e87b85881d3..e2297100a45 100644 --- a/cumulus/parachains/integration-tests/emulated/chains/relays/westend/src/genesis.rs +++ b/cumulus/parachains/integration-tests/emulated/chains/relays/westend/src/genesis.rs @@ -16,7 +16,6 @@ // Substrate use beefy_primitives::ecdsa_crypto::AuthorityId as BeefyId; use grandpa::AuthorityId as GrandpaId; -use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; use sp_consensus_babe::AuthorityId as BabeId; use sp_core::storage::Storage; @@ -39,7 +38,6 @@ const STASH: u128 = 100 * WND; fn session_keys( babe: BabeId, grandpa: GrandpaId, - im_online: ImOnlineId, para_validator: ValidatorId, para_assignment: AssignmentId, authority_discovery: AuthorityDiscoveryId, @@ -48,7 +46,6 @@ fn session_keys( westend_runtime::SessionKeys { babe, grandpa, - im_online, para_validator, para_assignment, authority_discovery, @@ -75,7 +72,6 @@ pub fn genesis() -> Storage { x.4.clone(), x.5.clone(), x.6.clone(), - x.7.clone(), get_from_seed::("Alice"), ), ) diff --git a/cumulus/parachains/integration-tests/emulated/common/src/lib.rs b/cumulus/parachains/integration-tests/emulated/common/src/lib.rs index 952b053f2aa..58222f622c2 100644 --- a/cumulus/parachains/integration-tests/emulated/common/src/lib.rs +++ b/cumulus/parachains/integration-tests/emulated/common/src/lib.rs @@ -21,7 +21,6 @@ pub use xcm_emulator; // Substrate use grandpa::AuthorityId as GrandpaId; -use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; use sp_consensus_babe::AuthorityId as BabeId; use sp_core::{sr25519, storage::Storage, Pair, Public}; @@ -163,7 +162,6 @@ pub mod validators { AccountId, BabeId, GrandpaId, - ImOnlineId, ValidatorId, AssignmentId, AuthorityDiscoveryId, diff --git a/polkadot/node/service/src/chain_spec.rs b/polkadot/node/service/src/chain_spec.rs index 871d7e82911..fd35a4aaf6a 100644 --- a/polkadot/node/service/src/chain_spec.rs +++ b/polkadot/node/service/src/chain_spec.rs @@ -18,7 +18,6 @@ use beefy_primitives::ecdsa_crypto::AuthorityId as BeefyId; use grandpa::AuthorityId as GrandpaId; -use pallet_im_online::sr25519::AuthorityId as ImOnlineId; #[cfg(feature = "westend-native")] use pallet_staking::Forcing; use polkadot_primitives::{AccountId, AccountPublic, AssignmentId, ValidatorId}; @@ -162,7 +161,6 @@ fn default_parachains_host_configuration_is_consistent() { fn westend_session_keys( babe: BabeId, grandpa: GrandpaId, - im_online: ImOnlineId, para_validator: ValidatorId, para_assignment: AssignmentId, authority_discovery: AuthorityDiscoveryId, @@ -171,7 +169,6 @@ fn westend_session_keys( westend::SessionKeys { babe, grandpa, - im_online, para_validator, para_assignment, authority_discovery, @@ -183,7 +180,6 @@ fn westend_session_keys( fn rococo_session_keys( babe: BabeId, grandpa: GrandpaId, - im_online: ImOnlineId, para_validator: ValidatorId, para_assignment: AssignmentId, authority_discovery: AuthorityDiscoveryId, @@ -192,7 +188,6 @@ fn rococo_session_keys( rococo_runtime::SessionKeys { babe, grandpa, - im_online, para_validator, para_assignment, authority_discovery, @@ -220,7 +215,6 @@ fn westend_staging_testnet_config_genesis() -> serde_json::Value { AccountId, BabeId, GrandpaId, - ImOnlineId, ValidatorId, AssignmentId, AuthorityDiscoveryId, @@ -237,9 +231,6 @@ fn westend_staging_testnet_config_genesis() -> serde_json::Value { //5Eb7wM65PNgtY6e33FEAzYtU5cRTXt6WQvZTnzaKQwkVcABk hex!["6faae44b21c6f2681a7f60df708e9f79d340f7d441d28bd987fab8d05c6487e8"] .unchecked_into(), - //5CdS2wGo4qdTQceVfEnbZH8vULeBrnGYCxSCxDna4tQSMV6y - hex!["18f5d55f138bfa8e0ea26ed6fa56817b247de3c2e2030a908c63fb37c146473f"] - .unchecked_into(), //5FqMLAgygdX9UqzukDp15Uid9PAKdFAR621U7xtp5ut2NfrW hex!["a6c1a5b501985a83cb1c37630c5b41e6b0a15b3675b2fd94694758e6cfa6794d"] .unchecked_into(), @@ -264,9 +255,6 @@ fn westend_staging_testnet_config_genesis() -> serde_json::Value { //5FXFsPReTUEYPRNKhbTdUathcWBsxTNsLbk2mTpYdKCJewjA hex!["98f4d81cb383898c2c3d54dab28698c0f717c81b509cb32dc6905af3cc697b18"] .unchecked_into(), - //5CDYSCJK91r8y2r1V4Ddrit4PFMEkwZXJe8mNBqGXJ4xWCWq - hex!["06bd7dd4ab4c808c7d09d9cb6bd27fbcd99ad8400e99212b335056c475c24031"] - .unchecked_into(), //5CZjurB78XbSHf6SLkLhCdkqw52Zm7aBYUDdfkLqEDWJ9Zhj hex!["162508accd470e379b04cb0c7c60b35a7d5357e84407a89ed2dd48db4b726960"] .unchecked_into(), @@ -291,9 +279,6 @@ fn westend_staging_testnet_config_genesis() -> serde_json::Value { //5G4kCbgqUhEyrRHCyFwFEkgBZXoYA8sbgsRxT9rY8Tp5Jj5F hex!["b0f8d2b9e4e1eafd4dab6358e0b9d5380d78af27c094e69ae9d6d30ca300fd86"] .unchecked_into(), - //5HVhFBLFTKSZK9fX6RktckWDTgYNoSd33fgonsEC8zfr4ddm - hex!["f03c3e184b2883eec9beaeb97f54321587e7476b228831ea0b5fc6da847ea975"] - .unchecked_into(), //5CS7thd2n54WfqeKU3cjvZzK4z5p7zku1Zw97mSzXgPioAAs hex!["1055100a283968271a0781450b389b9093231be809be1e48a305ebad2a90497e"] .unchecked_into(), @@ -318,9 +303,6 @@ fn westend_staging_testnet_config_genesis() -> serde_json::Value { //5ChfdrAqmLjCeDJvynbMjcxYLHYzPe8UWXd3HnX9JDThUMbn hex!["1c309a70b4e274314b84c9a0a1f973c9c4fc084df5479ef686c54b1ae4950424"] .unchecked_into(), - //5DnsMm24575xK2b2aGfmafiDxwCet6Mr4iiZQeDdWvi8CzuF - hex!["4c64868ba6d8ace235d3efb4c10d745a67cf3bdfeae23b264d7ea2f3439dec42"] - .unchecked_into(), //5D8C3HHEp5E8fJsXRD56494F413CdRSR9QKGXe7v5ZEfymdj hex!["2ee4d78f328db178c54f205ac809da12e291a33bcbd4f29f081ce7e74bdc5044"] .unchecked_into(), @@ -361,7 +343,6 @@ fn westend_staging_testnet_config_genesis() -> serde_json::Value { x.5.clone(), x.6.clone(), x.7.clone(), - x.8.clone(), ), ) }) @@ -408,7 +389,6 @@ fn rococo_staging_testnet_config_genesis() -> serde_json::Value { AccountId, BabeId, GrandpaId, - ImOnlineId, ValidatorId, AssignmentId, AuthorityDiscoveryId, @@ -425,9 +405,6 @@ fn rococo_staging_testnet_config_genesis() -> serde_json::Value { //5CPd3zoV9Aaah4xWucuDivMHJ2nEEmpdi864nPTiyRZp4t87 hex!["0e6d7d1afbcc6547b92995a394ba0daed07a2420be08220a5a1336c6731f0bfa"] .unchecked_into(), - //5F7BEa1LGFksUihyatf3dCDYneB8pWzVyavnByCsm5nBgezi - hex!["86975a37211f8704e947a365b720f7a3e2757988eaa7d0f197e83dba355ef743"] - .unchecked_into(), //5CP6oGfwqbEfML8efqm1tCZsUgRsJztp9L8ZkEUxA16W8PPz hex!["0e07a51d3213842f8e9363ce8e444255990a225f87e80a3d651db7841e1a0205"] .unchecked_into(), @@ -452,9 +429,6 @@ fn rococo_staging_testnet_config_genesis() -> serde_json::Value { //5HnDVBN9mD6mXyx8oryhDbJtezwNSj1VRXgLoYCBA6uEkiao hex!["fcd5f87a6fd5707a25122a01b4dac0a8482259df7d42a9a096606df1320df08d"] .unchecked_into(), - //5DhyXZiuB1LvqYKFgT5tRpgGsN3is2cM9QxgW7FikvakbAZP - hex!["48a910c0af90898f11bd57d37ceaea53c78994f8e1833a7ade483c9a84bde055"] - .unchecked_into(), //5EPEWRecy2ApL5n18n3aHyU1956zXTRqaJpzDa9DoqiggNwF hex!["669a10892119453e9feb4e3f1ee8e028916cc3240022920ad643846fbdbee816"] .unchecked_into(), @@ -479,9 +453,6 @@ fn rococo_staging_testnet_config_genesis() -> serde_json::Value { //5HAes2RQYPbYKbLBfKb88f4zoXv6pPA6Ke8CjN7dob3GpmSP hex!["e1b68fbd84333e31486c08e6153d9a1415b2e7e71b413702b7d64e9b631184a1"] .unchecked_into(), - //5HTXBf36LXmkFWJLokNUK6fPxVpkr2ToUnB1pvaagdGu4c1T - hex!["ee93e26259decb89afcf17ef2aa0fa2db2e1042fb8f56ecfb24d19eae8629878"] - .unchecked_into(), //5FtAGDZYJKXkhVhAxCQrXmaP7EE2mGbBMfmKDHjfYDgq2BiU hex!["a8e61ffacafaf546283dc92d14d7cc70ea0151a5dd81fdf73ff5a2951f2b6037"] .unchecked_into(), @@ -506,9 +477,6 @@ fn rococo_staging_testnet_config_genesis() -> serde_json::Value { //5DJV3zCBTJBLGNDCcdWrYxWDacSz84goGTa4pFeKVvehEBte hex!["36be9069cdb4a8a07ecd51f257875150f0a8a1be44a10d9d98dabf10a030aef4"] .unchecked_into(), - //5FHf8kpK4fPjEJeYcYon2gAPwEBubRvtwpzkUbhMWSweKPUY - hex!["8e95b9b5b4dc69790b67b566567ca8bf8cdef3a3a8bb65393c0d1d1c87cd2d2c"] - .unchecked_into(), //5F9FsRjpecP9GonktmtFL3kjqNAMKjHVFjyjRdTPa4hbQRZA hex!["882d72965e642677583b333b2d173ac94b5fd6c405c76184bb14293be748a13b"] .unchecked_into(), @@ -533,9 +501,6 @@ fn rococo_staging_testnet_config_genesis() -> serde_json::Value { //5EX1JBghGbQqWohTPU6msR9qZ2nYPhK9r3RTQ2oD1K8TCxaG hex!["6c878e33b83c20324238d22240f735457b6fba544b383e70bb62a27b57380c81"] .unchecked_into(), - //5GqL8RbVAuNXpDhjQi1KrS1MyNuKhvus2AbmQwRGjpuGZmFu - hex!["d2f9d537ffa59919a4028afdb627c14c14c97a1547e13e8e82203d2049b15b1a"] - .unchecked_into(), //5EUNaBpX9mJgcmLQHyG5Pkms6tbDiKuLbeTEJS924Js9cA1N hex!["6a8570b9c6408e54bacf123cc2bb1b0f087f9c149147d0005badba63a5a4ac01"] .unchecked_into(), @@ -560,9 +525,6 @@ fn rococo_staging_testnet_config_genesis() -> serde_json::Value { //5GzDPGbUM9uH52ZEwydasTj8edokGUJ7vEpoFWp9FE1YNuFB hex!["d9c056c98ca0e6b4eb7f5c58c007c1db7be0fe1f3776108f797dd4990d1ccc33"] .unchecked_into(), - //5GWZbVkJEfWZ7fRca39YAQeqri2Z7pkeHyd7rUctUHyQifLp - hex!["c4a980da30939d5bb9e4a734d12bf81259ae286aa21fa4b65405347fa40eff35"] - .unchecked_into(), //5CmLCFeSurRXXtwMmLcVo7sdJ9EqDguvJbuCYDcHkr3cpqyE hex!["1efc23c0b51ad609ab670ecf45807e31acbd8e7e5cb7c07cf49ee42992d2867c"] .unchecked_into(), @@ -587,9 +549,6 @@ fn rococo_staging_testnet_config_genesis() -> serde_json::Value { //5DnEySxbnppWEyN8cCLqvGjAorGdLRg2VmkY96dbJ1LHFK8N hex!["4bea0b37e0cce9bddd80835fa2bfd5606f5dcfb8388bbb10b10c483f0856cf14"] .unchecked_into(), - //5E1Y1FJ7dVP7qtE3wm241pTm72rTMcDT5Jd8Czv7Pwp7N3AH - hex!["560d90ca51e9c9481b8a9810060e04d0708d246714960439f804e5c6f40ca651"] - .unchecked_into(), //5CAC278tFCHAeHYqE51FTWYxHmeLcENSS1RG77EFRTvPZMJT hex!["042f07fc5268f13c026bbe199d63e6ac77a0c2a780f71cda05cee5a6f1b3f11f"] .unchecked_into(), @@ -614,9 +573,6 @@ fn rococo_staging_testnet_config_genesis() -> serde_json::Value { //5DrA2fZdzmNqT5j6DXNwVxPBjDV9jhkAqvjt6Us3bQHKy3cF hex!["4ee66173993dd0db5d628c4c9cb61a27b76611ad3c3925947f0d0011ee2c5dcc"] .unchecked_into(), - //5FNFDUGNLUtqg5LgrwYLNmBiGoP8KRxsvQpBkc7GQP6qaBUG - hex!["92156f54a114ee191415898f2da013d9db6a5362d6b36330d5fc23e27360ab66"] - .unchecked_into(), //5Gx6YeNhynqn8qkda9QKpc9S7oDr4sBrfAu516d3sPpEt26F hex!["d822d4088b20dca29a580a577a97d6f024bb24c9550bebdfd7d2d18e946a1c7d"] .unchecked_into(), @@ -657,7 +613,6 @@ fn rococo_staging_testnet_config_genesis() -> serde_json::Value { x.5.clone(), x.6.clone(), x.7.clone(), - x.8.clone(), ), ) }) @@ -768,35 +723,24 @@ pub fn get_authority_keys_from_seed( AccountId, BabeId, GrandpaId, - ImOnlineId, ValidatorId, AssignmentId, AuthorityDiscoveryId, BeefyId, ) { let keys = get_authority_keys_from_seed_no_beefy(seed); - (keys.0, keys.1, keys.2, keys.3, keys.4, keys.5, keys.6, keys.7, get_from_seed::(seed)) + (keys.0, keys.1, keys.2, keys.3, keys.4, keys.5, keys.6, get_from_seed::(seed)) } /// Helper function to generate stash, controller and session key from seed pub fn get_authority_keys_from_seed_no_beefy( seed: &str, -) -> ( - AccountId, - AccountId, - BabeId, - GrandpaId, - ImOnlineId, - ValidatorId, - AssignmentId, - AuthorityDiscoveryId, -) { +) -> (AccountId, AccountId, BabeId, GrandpaId, ValidatorId, AssignmentId, AuthorityDiscoveryId) { ( get_account_id_from_seed::(&format!("{}//stash", seed)), get_account_id_from_seed::(seed), get_from_seed::(seed), get_from_seed::(seed), - get_from_seed::(seed), get_from_seed::(seed), get_from_seed::(seed), get_from_seed::(seed), @@ -829,7 +773,6 @@ pub fn westend_testnet_genesis( AccountId, BabeId, GrandpaId, - ImOnlineId, ValidatorId, AssignmentId, AuthorityDiscoveryId, @@ -861,7 +804,6 @@ pub fn westend_testnet_genesis( x.5.clone(), x.6.clone(), x.7.clone(), - x.8.clone(), ), ) }) @@ -899,7 +841,6 @@ pub fn rococo_testnet_genesis( AccountId, BabeId, GrandpaId, - ImOnlineId, ValidatorId, AssignmentId, AuthorityDiscoveryId, @@ -930,7 +871,6 @@ pub fn rococo_testnet_genesis( x.5.clone(), x.6.clone(), x.7.clone(), - x.8.clone(), ), ) }) diff --git a/polkadot/runtime/rococo/src/lib.rs b/polkadot/runtime/rococo/src/lib.rs index 12388da1868..5ac92a73732 100644 --- a/polkadot/runtime/rococo/src/lib.rs +++ b/polkadot/runtime/rococo/src/lib.rs @@ -78,7 +78,6 @@ use frame_support::{ use frame_system::EnsureRoot; use pallet_grandpa::{fg_primitives, AuthorityId as GrandpaId}; use pallet_identity::legacy::IdentityInfo; -use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use pallet_session::historical as session_historical; use pallet_transaction_payment::{CurrencyAdapter, FeeDetails, RuntimeDispatchInfo}; use sp_core::{ConstU128, OpaqueMetadata, H256}; @@ -90,7 +89,8 @@ use sp_runtime::{ Verify, }, transaction_validity::{TransactionPriority, TransactionSource, TransactionValidity}, - ApplyExtrinsicResult, FixedU128, KeyTypeId, Perbill, Percent, Permill, RuntimeDebug, + ApplyExtrinsicResult, BoundToRuntimeAppPublic, FixedU128, KeyTypeId, Perbill, Percent, Permill, + RuntimeAppPublic, RuntimeDebug, }; use sp_staking::SessionIndex; #[cfg(any(feature = "std", test))] @@ -354,14 +354,53 @@ impl pallet_timestamp::Config for Runtime { impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type EventHandler = ImOnline; + type EventHandler = (); +} + +#[derive(Clone, Debug, PartialEq, Eq, Encode, Decode)] +pub struct OldSessionKeys { + pub grandpa: ::Public, + pub babe: ::Public, + pub im_online: pallet_im_online::sr25519::AuthorityId, + pub para_validator: ::Public, + pub para_assignment: ::Public, + pub authority_discovery: ::Public, + pub beefy: ::Public, +} + +impl OpaqueKeys for OldSessionKeys { + type KeyTypeIdProviders = (); + fn key_ids() -> &'static [KeyTypeId] { + &[ + <::Public>::ID, + <::Public>::ID, + sp_core::crypto::key_types::IM_ONLINE, + <::Public>::ID, + <::Public>::ID, + <::Public>::ID, + <::Public>::ID, + ] + } + fn get_raw(&self, i: KeyTypeId) -> &[u8] { + match i { + <::Public>::ID => self.grandpa.as_ref(), + <::Public>::ID => self.babe.as_ref(), + sp_core::crypto::key_types::IM_ONLINE => self.im_online.as_ref(), + <::Public>::ID => self.para_validator.as_ref(), + <::Public>::ID => + self.para_assignment.as_ref(), + <::Public>::ID => + self.authority_discovery.as_ref(), + <::Public>::ID => self.beefy.as_ref(), + _ => &[], + } + } } impl_opaque_keys! { pub struct SessionKeys { pub grandpa: Grandpa, pub babe: Babe, - pub im_online: ImOnline, pub para_validator: Initializer, pub para_assignment: ParaSessionInfo, pub authority_discovery: AuthorityDiscovery, @@ -369,6 +408,18 @@ impl_opaque_keys! { } } +// remove this when removing `OldSessionKeys` +fn transform_session_keys(_val: AccountId, old: OldSessionKeys) -> SessionKeys { + SessionKeys { + grandpa: old.grandpa, + babe: old.babe, + para_validator: old.para_validator, + para_assignment: old.para_assignment, + authority_discovery: old.authority_discovery, + beefy: old.beefy, + } +} + /// Special `ValidatorIdOf` implementation that is just returning the input as result. pub struct ValidatorIdOf; impl sp_runtime::traits::Convert> for ValidatorIdOf { @@ -513,22 +564,6 @@ impl pallet_authority_discovery::Config for Runtime { type MaxAuthorities = MaxAuthorities; } -parameter_types! { - pub const ImOnlineUnsignedPriority: TransactionPriority = TransactionPriority::max_value(); -} - -impl pallet_im_online::Config for Runtime { - type AuthorityId = ImOnlineId; - type RuntimeEvent = RuntimeEvent; - type ValidatorSet = Historical; - type NextSessionRotation = Babe; - type ReportUnresponsiveness = Offences; - type UnsignedPriority = ImOnlineUnsignedPriority; - type WeightInfo = weights::pallet_im_online::WeightInfo; - type MaxKeys = MaxKeys; - type MaxPeerInHeartbeats = MaxPeerInHeartbeats; -} - parameter_types! { pub const MaxSetIdSessionEntries: u32 = BondingDuration::get() * SessionsPerEra::get(); } @@ -778,7 +813,6 @@ impl InstanceFilter for ProxyType { // Specifically omitting the entire Balances pallet RuntimeCall::Session(..) | RuntimeCall::Grandpa(..) | - RuntimeCall::ImOnline(..) | RuntimeCall::Treasury(..) | RuntimeCall::Bounties(..) | RuntimeCall::ChildBounties(..) | @@ -1292,8 +1326,7 @@ construct_runtime! { TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event} = 33, // Consensus support. - // Authorship must be before session in order to note author in the correct session and era - // for im-online. + // Authorship must be before session in order to note author in the correct session and era. Authorship: pallet_authorship::{Pallet, Storage} = 5, Offences: pallet_offences::{Pallet, Storage, Event} = 7, Historical: session_historical::{Pallet} = 34, @@ -1307,7 +1340,6 @@ construct_runtime! { Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 8, Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event, ValidateUnsigned} = 10, - ImOnline: pallet_im_online::{Pallet, Call, Storage, Event, ValidateUnsigned, Config} = 11, AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 12, // Governance stuff; uncallable initially. @@ -1453,6 +1485,8 @@ pub mod migrations { use frame_support::traits::LockIdentifier; use frame_system::pallet_prelude::BlockNumberFor; + #[cfg(feature = "try-runtime")] + use sp_core::crypto::ByteArray; parameter_types! { pub const DemocracyPalletName: &'static str = "Democracy"; @@ -1461,6 +1495,7 @@ pub mod migrations { pub const PhragmenElectionPalletName: &'static str = "PhragmenElection"; pub const TechnicalMembershipPalletName: &'static str = "TechnicalMembership"; pub const TipsPalletName: &'static str = "Tips"; + pub const ImOnlinePalletName: &'static str = "ImOnline"; pub const PhragmenElectionPalletId: LockIdentifier = *b"phrelect"; } @@ -1497,10 +1532,82 @@ pub mod migrations { type PalletName = TipsPalletName; } + /// Upgrade Session keys to exclude `ImOnline` key. + /// When this is removed, should also remove `OldSessionKeys`. + pub struct UpgradeSessionKeys; + const UPGRADE_SESSION_KEYS_FROM_SPEC: u32 = 104000; + + impl frame_support::traits::OnRuntimeUpgrade for UpgradeSessionKeys { + #[cfg(feature = "try-runtime")] + fn pre_upgrade() -> Result, sp_runtime::TryRuntimeError> { + if System::last_runtime_upgrade_spec_version() > UPGRADE_SESSION_KEYS_FROM_SPEC { + log::warn!(target: "runtime::session_keys", "Skipping session keys migration pre-upgrade check due to spec version (already applied?)"); + return Ok(Vec::new()) + } + + log::info!(target: "runtime::session_keys", "Collecting pre-upgrade session keys state"); + let key_ids = SessionKeys::key_ids(); + frame_support::ensure!( + key_ids.into_iter().find(|&k| *k == sp_core::crypto::key_types::IM_ONLINE) == None, + "New session keys contain the ImOnline key that should have been removed", + ); + let storage_key = pallet_session::QueuedKeys::::hashed_key(); + let mut state: Vec = Vec::new(); + frame_support::storage::unhashed::get::>( + &storage_key, + ) + .ok_or::("Queued keys are not available".into())? + .into_iter() + .for_each(|(id, keys)| { + state.extend_from_slice(id.as_slice()); + for key_id in key_ids { + state.extend_from_slice(keys.get_raw(*key_id)); + } + }); + frame_support::ensure!(state.len() > 0, "Queued keys are not empty before upgrade"); + Ok(state) + } + + fn on_runtime_upgrade() -> Weight { + if System::last_runtime_upgrade_spec_version() > UPGRADE_SESSION_KEYS_FROM_SPEC { + log::info!("Skipping session keys upgrade: already applied"); + return ::DbWeight::get().reads(1) + } + log::trace!("Upgrading session keys"); + Session::upgrade_keys::(transform_session_keys); + Perbill::from_percent(50) * BlockWeights::get().max_block + } + + #[cfg(feature = "try-runtime")] + fn post_upgrade( + old_state: sp_std::vec::Vec, + ) -> Result<(), sp_runtime::TryRuntimeError> { + if System::last_runtime_upgrade_spec_version() > UPGRADE_SESSION_KEYS_FROM_SPEC { + log::warn!(target: "runtime::session_keys", "Skipping session keys migration post-upgrade check due to spec version (already applied?)"); + return Ok(()) + } + + let key_ids = SessionKeys::key_ids(); + let mut new_state: Vec = Vec::new(); + pallet_session::QueuedKeys::::get().into_iter().for_each(|(id, keys)| { + new_state.extend_from_slice(id.as_slice()); + for key_id in key_ids { + new_state.extend_from_slice(keys.get_raw(*key_id)); + } + }); + frame_support::ensure!(new_state.len() > 0, "Queued keys are not empty after upgrade"); + frame_support::ensure!( + old_state == new_state, + "Pre-upgrade and post-upgrade keys do not match!" + ); + log::info!(target: "runtime::session_keys", "Session keys migrated successfully"); + Ok(()) + } + } + /// Unreleased migrations. Add new ones here: pub type Unreleased = ( pallet_society::migrations::MigrateToV2, - pallet_im_online::migration::v1::Migration, parachains_configuration::migration::v7::MigrateToV7, assigned_slots::migration::v1::MigrateToV1, parachains_scheduler::migration::v1::MigrateToV1, @@ -1527,6 +1634,12 @@ pub mod migrations { pallet_grandpa::migrations::MigrateV4ToV5, parachains_configuration::migration::v10::MigrateToV10, + + // Upgrade `SessionKeys` to exclude `ImOnline` + UpgradeSessionKeys, + + // Remove `im-online` pallet on-chain storage + frame_support::migrations::RemovePallet::DbWeight>, ); } @@ -1597,7 +1710,6 @@ mod benches { [pallet_conviction_voting, ConvictionVoting] [pallet_nis, Nis] [pallet_identity, Identity] - [pallet_im_online, ImOnline] [pallet_indices, Indices] [pallet_message_queue, MessageQueue] [pallet_multisig, Multisig] diff --git a/polkadot/runtime/westend/src/lib.rs b/polkadot/runtime/westend/src/lib.rs index bb6331e9534..f7ff2d5e9e1 100644 --- a/polkadot/runtime/westend/src/lib.rs +++ b/polkadot/runtime/westend/src/lib.rs @@ -41,7 +41,6 @@ use frame_support::{ use frame_system::EnsureRoot; use pallet_grandpa::{fg_primitives, AuthorityId as GrandpaId}; use pallet_identity::legacy::IdentityInfo; -use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use pallet_session::historical as session_historical; use pallet_transaction_payment::{CurrencyAdapter, FeeDetails, RuntimeDispatchInfo}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; @@ -88,7 +87,8 @@ use sp_runtime::{ IdentityLookup, Keccak256, OpaqueKeys, SaturatedConversion, Verify, }, transaction_validity::{TransactionPriority, TransactionSource, TransactionValidity}, - ApplyExtrinsicResult, FixedU128, KeyTypeId, Perbill, Percent, Permill, + ApplyExtrinsicResult, BoundToRuntimeAppPublic, FixedU128, KeyTypeId, Perbill, Percent, Permill, + RuntimeAppPublic, }; use sp_staking::SessionIndex; use sp_std::{collections::btree_map::BTreeMap, prelude::*}; @@ -417,7 +417,7 @@ impl pallet_timestamp::Config for Runtime { impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type EventHandler = (Staking, ImOnline); + type EventHandler = Staking; } parameter_types! { @@ -425,11 +425,50 @@ parameter_types! { pub const Offset: BlockNumber = 0; } +#[derive(Clone, Debug, PartialEq, Eq, Encode, Decode)] +pub struct OldSessionKeys { + pub grandpa: ::Public, + pub babe: ::Public, + pub im_online: pallet_im_online::sr25519::AuthorityId, + pub para_validator: ::Public, + pub para_assignment: ::Public, + pub authority_discovery: ::Public, + pub beefy: ::Public, +} + +impl OpaqueKeys for OldSessionKeys { + type KeyTypeIdProviders = (); + fn key_ids() -> &'static [KeyTypeId] { + &[ + <::Public>::ID, + <::Public>::ID, + sp_core::crypto::key_types::IM_ONLINE, + <::Public>::ID, + <::Public>::ID, + <::Public>::ID, + <::Public>::ID, + ] + } + fn get_raw(&self, i: KeyTypeId) -> &[u8] { + match i { + <::Public>::ID => self.grandpa.as_ref(), + <::Public>::ID => self.babe.as_ref(), + sp_core::crypto::key_types::IM_ONLINE => self.im_online.as_ref(), + <::Public>::ID => self.para_validator.as_ref(), + <::Public>::ID => + self.para_assignment.as_ref(), + <::Public>::ID => + self.authority_discovery.as_ref(), + <::Public>::ID => self.beefy.as_ref(), + _ => &[], + } + } +} + impl_opaque_keys! { pub struct SessionKeys { pub grandpa: Grandpa, pub babe: Babe, - pub im_online: ImOnline, pub para_validator: Initializer, pub para_assignment: ParaSessionInfo, pub authority_discovery: AuthorityDiscovery, @@ -437,6 +476,18 @@ impl_opaque_keys! { } } +// remove this when removing `OldSessionKeys` +fn transform_session_keys(_v: AccountId, old: OldSessionKeys) -> SessionKeys { + SessionKeys { + grandpa: old.grandpa, + babe: old.babe, + para_validator: old.para_validator, + para_assignment: old.para_assignment, + authority_discovery: old.authority_discovery, + beefy: old.beefy, + } +} + impl pallet_session::Config for Runtime { type RuntimeEvent = RuntimeEvent; type ValidatorId = AccountId; @@ -744,19 +795,6 @@ impl pallet_authority_discovery::Config for Runtime { parameter_types! { pub const NposSolutionPriority: TransactionPriority = TransactionPriority::max_value() / 2; - pub const ImOnlineUnsignedPriority: TransactionPriority = TransactionPriority::max_value(); -} - -impl pallet_im_online::Config for Runtime { - type AuthorityId = ImOnlineId; - type RuntimeEvent = RuntimeEvent; - type ValidatorSet = Historical; - type NextSessionRotation = Babe; - type ReportUnresponsiveness = Offences; - type UnsignedPriority = ImOnlineUnsignedPriority; - type WeightInfo = weights::pallet_im_online::WeightInfo; - type MaxKeys = MaxKeys; - type MaxPeerInHeartbeats = MaxPeerInHeartbeats; } parameter_types! { @@ -986,7 +1024,6 @@ impl InstanceFilter for ProxyType { RuntimeCall::Staking(..) | RuntimeCall::Session(..) | RuntimeCall::Grandpa(..) | - RuntimeCall::ImOnline(..) | RuntimeCall::Utility(..) | RuntimeCall::Identity(..) | RuntimeCall::ConvictionVoting(..) | @@ -1374,8 +1411,7 @@ construct_runtime! { TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event} = 26, // Consensus support. - // Authorship must be before session in order to note author in the correct session and era - // for im-online and staking. + // Authorship must be before session in order to note author in the correct session and era. Authorship: pallet_authorship::{Pallet, Storage} = 5, Staking: pallet_staking::{Pallet, Call, Storage, Config, Event} = 6, Offences: pallet_offences::{Pallet, Storage, Event} = 7, @@ -1390,7 +1426,6 @@ construct_runtime! { Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 8, Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event, ValidateUnsigned} = 10, - ImOnline: pallet_im_online::{Pallet, Call, Storage, Event, ValidateUnsigned, Config} = 11, AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 12, // Utility module. @@ -1522,10 +1557,88 @@ pub type Migrations = migrations::Unreleased; #[allow(deprecated, missing_docs)] pub mod migrations { use super::*; + #[cfg(feature = "try-runtime")] + use sp_core::crypto::ByteArray; + + parameter_types! { + pub const ImOnlinePalletName: &'static str = "ImOnline"; + } + + /// Upgrade Session keys to exclude `ImOnline` key. + /// When this is removed, should also remove `OldSessionKeys`. + pub struct UpgradeSessionKeys; + const UPGRADE_SESSION_KEYS_FROM_SPEC: u32 = 104000; + + impl frame_support::traits::OnRuntimeUpgrade for UpgradeSessionKeys { + #[cfg(feature = "try-runtime")] + fn pre_upgrade() -> Result, sp_runtime::TryRuntimeError> { + if System::last_runtime_upgrade_spec_version() > UPGRADE_SESSION_KEYS_FROM_SPEC { + log::warn!(target: "runtime::session_keys", "Skipping session keys migration pre-upgrade check due to spec version (already applied?)"); + return Ok(Vec::new()) + } + + log::info!(target: "runtime::session_keys", "Collecting pre-upgrade session keys state"); + let key_ids = SessionKeys::key_ids(); + frame_support::ensure!( + key_ids.into_iter().find(|&k| *k == sp_core::crypto::key_types::IM_ONLINE) == None, + "New session keys contain the ImOnline key that should have been removed", + ); + let storage_key = pallet_session::QueuedKeys::::hashed_key(); + let mut state: Vec = Vec::new(); + frame_support::storage::unhashed::get::>( + &storage_key, + ) + .ok_or::("Queued keys are not available".into())? + .into_iter() + .for_each(|(id, keys)| { + state.extend_from_slice(id.as_slice()); + for key_id in key_ids { + state.extend_from_slice(keys.get_raw(*key_id)); + } + }); + frame_support::ensure!(state.len() > 0, "Queued keys are not empty before upgrade"); + Ok(state) + } + + fn on_runtime_upgrade() -> Weight { + if System::last_runtime_upgrade_spec_version() > UPGRADE_SESSION_KEYS_FROM_SPEC { + log::warn!("Skipping session keys upgrade: already applied"); + return ::DbWeight::get().reads(1) + } + log::info!("Upgrading session keys"); + Session::upgrade_keys::(transform_session_keys); + Perbill::from_percent(50) * BlockWeights::get().max_block + } + + #[cfg(feature = "try-runtime")] + fn post_upgrade( + old_state: sp_std::vec::Vec, + ) -> Result<(), sp_runtime::TryRuntimeError> { + if System::last_runtime_upgrade_spec_version() > UPGRADE_SESSION_KEYS_FROM_SPEC { + log::warn!(target: "runtime::session_keys", "Skipping session keys migration post-upgrade check due to spec version (already applied?)"); + return Ok(()) + } + + let key_ids = SessionKeys::key_ids(); + let mut new_state: Vec = Vec::new(); + pallet_session::QueuedKeys::::get().into_iter().for_each(|(id, keys)| { + new_state.extend_from_slice(id.as_slice()); + for key_id in key_ids { + new_state.extend_from_slice(keys.get_raw(*key_id)); + } + }); + frame_support::ensure!(new_state.len() > 0, "Queued keys are not empty after upgrade"); + frame_support::ensure!( + old_state == new_state, + "Pre-upgrade and post-upgrade keys do not match!" + ); + log::info!(target: "runtime::session_keys", "Session keys migrated successfully"); + Ok(()) + } + } /// Unreleased migrations. Add new ones here: pub type Unreleased = ( - pallet_im_online::migration::v1::Migration, parachains_configuration::migration::v7::MigrateToV7, pallet_staking::migrations::v14::MigrateToV14, assigned_slots::migration::v1::MigrateToV1, @@ -1537,6 +1650,11 @@ pub mod migrations { pallet_grandpa::migrations::MigrateV4ToV5, parachains_configuration::migration::v10::MigrateToV10, pallet_nomination_pools::migration::versioned::V7ToV8, + UpgradeSessionKeys, + frame_support::migrations::RemovePallet< + ImOnlinePalletName, + ::DbWeight, + >, ); } @@ -1583,7 +1701,6 @@ mod benches { [frame_election_provider_support, ElectionProviderBench::] [pallet_fast_unstake, FastUnstake] [pallet_identity, Identity] - [pallet_im_online, ImOnline] [pallet_indices, Indices] [pallet_message_queue, MessageQueue] [pallet_multisig, Multisig] diff --git a/substrate/frame/offences/benchmarking/src/lib.rs b/substrate/frame/offences/benchmarking/src/lib.rs index c190927b84b..563aa4755ce 100644 --- a/substrate/frame/offences/benchmarking/src/lib.rs +++ b/substrate/frame/offences/benchmarking/src/lib.rs @@ -25,30 +25,25 @@ mod mock; use sp_std::{prelude::*, vec}; use frame_benchmarking::v1::{account, benchmarks}; -use frame_support::traits::{Currency, Get, ValidatorSet, ValidatorSetWithIdentification}; +use frame_support::traits::{Currency, Get}; use frame_system::{Config as SystemConfig, Pallet as System, RawOrigin}; -#[cfg(test)] -use sp_runtime::traits::UniqueSaturatedInto; use sp_runtime::{ traits::{Convert, Saturating, StaticLookup}, Perbill, }; -use sp_staking::offence::{Offence, ReportOffence}; +use sp_staking::offence::ReportOffence; use pallet_babe::EquivocationOffence as BabeEquivocationOffence; use pallet_balances::Config as BalancesConfig; use pallet_grandpa::{ EquivocationOffence as GrandpaEquivocationOffence, TimeSlot as GrandpaTimeSlot, }; -use pallet_im_online::{Config as ImOnlineConfig, Pallet as ImOnline, UnresponsivenessOffence}; use pallet_offences::{Config as OffencesConfig, Pallet as Offences}; use pallet_session::{ historical::{Config as HistoricalConfig, IdentificationTuple}, - Config as SessionConfig, SessionManager, + Config as SessionConfig, Pallet as Session, SessionManager, }; -#[cfg(test)] -use pallet_staking::Event as StakingEvent; use pallet_staking::{ Config as StakingConfig, Exposure, IndividualExposure, MaxNominationsOf, Pallet as Staking, RewardDestination, ValidatorPrefs, @@ -56,8 +51,6 @@ use pallet_staking::{ const SEED: u32 = 0; -const MAX_REPORTERS: u32 = 100; -const MAX_OFFENDERS: u32 = 100; const MAX_NOMINATORS: u32 = 100; pub struct Pallet(Offences); @@ -66,7 +59,6 @@ pub trait Config: SessionConfig + StakingConfig + OffencesConfig - + ImOnlineConfig + HistoricalConfig + BalancesConfig + IdTupleConvert @@ -184,220 +176,7 @@ fn make_offenders( Ok((id_tuples, offenders)) } -fn make_offenders_im_online( - num_offenders: u32, - num_nominators: u32, -) -> Result<(Vec>, Vec>), &'static str> { - Staking::::new_session(0); - - let mut offenders = vec![]; - for i in 0..num_offenders { - let offender = create_offender::(i + 1, num_nominators)?; - offenders.push(offender); - } - - Staking::::start_session(0); - - let id_tuples = offenders - .iter() - .map(|offender| { - < - ::ValidatorSet as ValidatorSet - >::ValidatorIdOf::convert(offender.controller.clone()) - .expect("failed to get validator id from account id") - }) - .map(|validator_id| { - < - ::ValidatorSet as ValidatorSetWithIdentification - >::IdentificationOf::convert(validator_id.clone()) - .map(|full_id| (validator_id, full_id)) - .expect("failed to convert validator id to full identification") - }) - .collect::>>(); - Ok((id_tuples, offenders)) -} - -#[cfg(test)] -fn check_events< - T: Config, - I: Iterator, - Item: sp_std::borrow::Borrow<::RuntimeEvent> + sp_std::fmt::Debug, ->( - expected: I, -) { - let events = System::::events() - .into_iter() - .map(|frame_system::EventRecord { event, .. }| event) - .collect::>(); - let expected = expected.collect::>(); - - fn pretty(header: &str, ev: &[D], offset: usize) { - log::info!("{}", header); - for (idx, ev) in ev.iter().enumerate() { - log::info!("\t[{:04}] {:?}", idx + offset, ev); - } - } - fn print_events( - idx: usize, - events: &[D], - expected: &[E], - ) { - let window = 10; - let start = idx.saturating_sub(window / 2); - let end_got = (idx + window / 2).min(events.len()); - pretty("Got(window):", &events[start..end_got], start); - let end_expected = (idx + window / 2).min(expected.len()); - pretty("Expected(window):", &expected[start..end_expected], start); - log::info!("---------------"); - let start_got = events.len().saturating_sub(window); - pretty("Got(end):", &events[start_got..], start_got); - let start_expected = expected.len().saturating_sub(window); - pretty("Expected(end):", &expected[start_expected..], start_expected); - } - - for (idx, (a, b)) in events.iter().zip(expected.iter()).enumerate() { - if a != sp_std::borrow::Borrow::borrow(b) { - print_events(idx, &events, &expected); - log::info!("Mismatch at: {}", idx); - log::info!(" Got: {:?}", b); - log::info!("Expected: {:?}", a); - if events.len() != expected.len() { - log::info!( - "Mismatching lengths. Got: {}, Expected: {}", - events.len(), - expected.len() - ) - } - panic!("Mismatching events."); - } - } - - if events.len() != expected.len() { - print_events(0, &events, &expected); - panic!("Mismatching lengths. Got: {}, Expected: {}", events.len(), expected.len(),) - } -} - benchmarks! { - report_offence_im_online { - let r in 1 .. MAX_REPORTERS; - // we skip 1 offender, because in such case there is no slashing - let o in 2 .. MAX_OFFENDERS; - let n in 0 .. MAX_NOMINATORS.min(MaxNominationsOf::::get()); - - // Make r reporters - let mut reporters = vec![]; - for i in 0 .. r { - let reporter = account("reporter", i, SEED); - reporters.push(reporter); - } - - // make sure reporters actually get rewarded - Staking::::set_slash_reward_fraction(Perbill::one()); - - let (offenders, raw_offenders) = make_offenders_im_online::(o, n)?; - let keys = ImOnline::::keys(); - let validator_set_count = keys.len() as u32; - let offenders_count = offenders.len() as u32; - let offence = UnresponsivenessOffence { - session_index: 0, - validator_set_count, - offenders, - }; - let slash_fraction = offence.slash_fraction(offenders_count); - assert_eq!(System::::event_count(), 0); - }: { - let _ = ::ReportUnresponsiveness::report_offence( - reporters.clone(), - offence - ); - } - verify { - #[cfg(test)] - { - let bond_amount: u32 = UniqueSaturatedInto::::unique_saturated_into(bond_amount::()); - let slash_amount = slash_fraction * bond_amount; - let reward_amount = slash_amount.saturating_mul(1 + n) / 2; - let reward = reward_amount / r; - let slash_report = |id| core::iter::once( - ::RuntimeEvent::from(StakingEvent::::SlashReported{ validator: id, fraction: slash_fraction, slash_era: 0}) - ); - let slash = |id| core::iter::once( - ::RuntimeEvent::from(StakingEvent::::Slashed{ staker: id, amount: BalanceOf::::from(slash_amount) }) - ); - let balance_slash = |id| core::iter::once( - ::RuntimeEvent::from(pallet_balances::Event::::Slashed{ who: id, amount: slash_amount.into() }) - ); - let balance_locked = |id| core::iter::once( - ::RuntimeEvent::from(pallet_balances::Event::::Locked{ who: id, amount: slash_amount.into() }) - ); - let balance_unlocked = |id| core::iter::once( - ::RuntimeEvent::from(pallet_balances::Event::::Unlocked{ who: id, amount: slash_amount.into() }) - ); - let chill = |id| core::iter::once( - ::RuntimeEvent::from(StakingEvent::::Chilled{ stash: id }) - ); - let balance_deposit = |id, amount: u32| - ::RuntimeEvent::from(pallet_balances::Event::::Deposit{ who: id, amount: amount.into() }); - let mut first = true; - - // We need to box all events to prevent running into too big allocations in wasm. - // The event in FRAME is represented as an enum and the size of the enum depends on the biggest variant. - // So, instead of requiring `size_of() * expected_events` we only need to - // allocate `size_of>() * expected_events`. - let slash_events = raw_offenders.into_iter() - .flat_map(|offender| { - let nom_slashes = offender.nominator_stashes.into_iter().flat_map(|nom| { - balance_slash(nom.clone()).map(Into::into) - .chain(balance_unlocked(nom.clone()).map(Into::into)) - .chain(slash(nom).map(Into::into)).map(Box::new) - }); - - let events = chill(offender.stash.clone()).map(Into::into).map(Box::new) - .chain(slash_report(offender.stash.clone()).map(Into::into).map(Box::new)) - .chain(balance_slash(offender.stash.clone()).map(Into::into).map(Box::new)) - .chain(balance_unlocked(offender.stash.clone()).map(Into::into).map(Box::new)) - .chain(slash(offender.stash).map(Into::into).map(Box::new)) - .chain(nom_slashes) - .collect::>(); - - // the first deposit creates endowed events, see `endowed_reward_events` - if first { - first = false; - let reward_events = reporters.iter() - .flat_map(|reporter| vec![ - Box::new(balance_deposit(reporter.clone(), reward).into()), - Box::new(frame_system::Event::::NewAccount { account: reporter.clone() }.into()), - Box::new(::RuntimeEvent::from( - pallet_balances::Event::::Endowed{ account: reporter.clone(), free_balance: reward.into() } - ).into()), - ]) - .collect::>(); - events.into_iter().chain(reward_events) - } else { - let reward_events = reporters.iter() - .map(|reporter| Box::new(balance_deposit(reporter.clone(), reward).into())) - .collect::>(); - events.into_iter().chain(reward_events) - } - }); - - // In case of error it's useful to see the inputs - log::info!("Inputs: r: {}, o: {}, n: {}", r, o, n); - // make sure that all slashes have been applied - check_events::( - sp_std::iter::empty() - .chain(slash_events) - .chain(sp_std::iter::once(Box::new(::RuntimeEvent::from( - pallet_offences::Event::Offence{ - kind: UnresponsivenessOffence::::ID, - timeslot: 0_u32.to_le_bytes().to_vec(), - } - ).into()))) - ); - } - } - report_offence_grandpa { let n in 0 .. MAX_NOMINATORS.min(MaxNominationsOf::::get()); @@ -409,12 +188,12 @@ benchmarks! { Staking::::set_slash_reward_fraction(Perbill::one()); let (mut offenders, raw_offenders) = make_offenders::(1, n)?; - let keys = ImOnline::::keys(); + let validator_set_count = Session::::validators().len() as u32; let offence = GrandpaEquivocationOffence { time_slot: GrandpaTimeSlot { set_id: 0, round: 0 }, session_index: 0, - validator_set_count: keys.len() as u32, + validator_set_count, offender: T::convert(offenders.pop().unwrap()), }; assert_eq!(System::::event_count(), 0); @@ -446,12 +225,12 @@ benchmarks! { Staking::::set_slash_reward_fraction(Perbill::one()); let (mut offenders, raw_offenders) = make_offenders::(1, n)?; - let keys = ImOnline::::keys(); + let validator_set_count = Session::::validators().len() as u32; let offence = BabeEquivocationOffence { slot: 0u64.into(), session_index: 0, - validator_set_count: keys.len() as u32, + validator_set_count, offender: T::convert(offenders.pop().unwrap()), }; assert_eq!(System::::event_count(), 0); -- GitLab From b0b4451f31dcd9da04e2952d7c4cdcc219271b88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= <123550+andresilva@users.noreply.github.com> Date: Tue, 28 Nov 2023 14:00:18 +0000 Subject: [PATCH 091/102] polkadot: remove grandpa pause support (#2511) This was never used and we probably don't need it anyway. --- .../src/lib.rs | 1 - polkadot/cli/src/cli.rs | 10 - polkadot/cli/src/command.rs | 7 - polkadot/node/service/src/grandpa_support.rs | 178 ------------------ polkadot/node/service/src/lib.rs | 26 +-- polkadot/node/test/service/src/lib.rs | 1 - .../adder/collator/src/main.rs | 1 - .../undying/collator/src/main.rs | 1 - 8 files changed, 3 insertions(+), 222 deletions(-) diff --git a/cumulus/client/relay-chain-inprocess-interface/src/lib.rs b/cumulus/client/relay-chain-inprocess-interface/src/lib.rs index 3d297af00f2..4096cd2523f 100644 --- a/cumulus/client/relay-chain-inprocess-interface/src/lib.rs +++ b/cumulus/client/relay-chain-inprocess-interface/src/lib.rs @@ -283,7 +283,6 @@ fn build_polkadot_full_node( config, polkadot_service::NewFullParams { is_parachain_node, - grandpa_pause: None, // Disable BEEFY. It should not be required by the internal relay chain node. enable_beefy: false, force_authoring_backoff: false, diff --git a/polkadot/cli/src/cli.rs b/polkadot/cli/src/cli.rs index 6a7a8b4ad7b..f1e0d1e99d7 100644 --- a/polkadot/cli/src/cli.rs +++ b/polkadot/cli/src/cli.rs @@ -82,16 +82,6 @@ pub struct RunCmd { #[arg(long = "force-rococo")] pub force_rococo: bool, - /// Setup a GRANDPA scheduled voting pause. - /// - /// This parameter takes two values, namely a block number and a delay (in blocks). - /// - /// After the given block number is finalized the GRANDPA voter will temporarily - /// stop voting for new blocks until the given delay has elapsed (i.e. until a - /// block at height `pause_block + delay` is imported). - #[arg(long = "grandpa-pause", num_args = 2)] - pub grandpa_pause: Vec, - /// Disable the BEEFY gadget. /// /// Currently enabled by default on 'Rococo', 'Wococo' and 'Versi'. diff --git a/polkadot/cli/src/command.rs b/polkadot/cli/src/command.rs index c9c3c39aab1..ba41383c279 100644 --- a/polkadot/cli/src/command.rs +++ b/polkadot/cli/src/command.rs @@ -215,12 +215,6 @@ where set_default_ss58_version(chain_spec); - let grandpa_pause = if cli.run.grandpa_pause.is_empty() { - None - } else { - Some((cli.run.grandpa_pause[0], cli.run.grandpa_pause[1])) - }; - if chain_spec.is_kusama() { info!("----------------------------"); info!("This chain is not in any way"); @@ -257,7 +251,6 @@ where config, service::NewFullParams { is_parachain_node: service::IsParachainNode::No, - grandpa_pause, enable_beefy, force_authoring_backoff: cli.run.force_authoring_backoff, jaeger_agent, diff --git a/polkadot/node/service/src/grandpa_support.rs b/polkadot/node/service/src/grandpa_support.rs index 3a767d9783f..729dbfde5c7 100644 --- a/polkadot/node/service/src/grandpa_support.rs +++ b/polkadot/node/service/src/grandpa_support.rs @@ -16,8 +16,6 @@ //! Polkadot-specific GRANDPA integration utilities. -use std::sync::Arc; - use sp_runtime::traits::{Block as BlockT, Header as _, NumberFor}; use crate::HeaderProvider; @@ -59,55 +57,6 @@ where } } -/// A custom GRANDPA voting rule that "pauses" voting (i.e. keeps voting for the -/// same last finalized block) after a given block at height `N` has been -/// finalized and for a delay of `M` blocks, i.e. until the best block reaches -/// `N` + `M`, the voter will keep voting for block `N`. -#[derive(Clone)] -pub(crate) struct PauseAfterBlockFor(pub(crate) N, pub(crate) N); - -impl grandpa::VotingRule for PauseAfterBlockFor> -where - Block: BlockT, - B: sp_blockchain::HeaderBackend + 'static, -{ - fn restrict_vote( - &self, - backend: Arc, - base: &Block::Header, - best_target: &Block::Header, - current_target: &Block::Header, - ) -> grandpa::VotingRuleResult { - let aux = || { - // only restrict votes targeting a block higher than the block - // we've set for the pause - if *current_target.number() > self.0 { - // if we're past the pause period (i.e. `self.0 + self.1`) - // then we no longer need to restrict any votes - if *best_target.number() > self.0 + self.1 { - return None - } - - // if we've finalized the pause block, just keep returning it - // until best number increases enough to pass the condition above - if *base.number() >= self.0 { - return Some((base.hash(), *base.number())) - } - - // otherwise find the target header at the pause block - // to vote on - return walk_backwards_to_target_block(&*backend, self.0, current_target).ok() - } - - None - }; - - let target = aux(); - - Box::pin(async move { target }) - } -} - /// GRANDPA hard forks due to borked migration of session keys after a runtime /// upgrade (at #1491596), the signaled authority set changes were invalid /// (blank keys) and were impossible to finalize. The authorities for these @@ -214,130 +163,3 @@ pub(crate) fn kusama_hard_forks() -> Vec> { }) .collect() } - -#[cfg(test)] -mod tests { - use consensus_common::BlockOrigin; - use grandpa::VotingRule; - use polkadot_test_client::{ - ClientBlockImportExt, DefaultTestClientBuilderExt, InitPolkadotBlockBuilder, - TestClientBuilder, TestClientBuilderExt, - }; - use sp_blockchain::HeaderBackend; - use sp_runtime::traits::Header; - use std::sync::Arc; - - #[test] - fn grandpa_pause_voting_rule_works() { - let _ = env_logger::try_init(); - - let client = Arc::new(TestClientBuilder::new().build()); - let mut hashes = vec![]; - hashes.push(client.info().genesis_hash); - - let mut push_blocks = { - let mut client = client.clone(); - - move |hashes: &mut Vec<_>, n| { - for _ in 0..n { - let block = client.init_polkadot_block_builder().build().unwrap().block; - hashes.push(block.header.hash()); - futures::executor::block_on(client.import(BlockOrigin::Own, block)).unwrap(); - } - } - }; - - let get_header = { - let client = client.clone(); - move |n| client.expect_header(n).unwrap() - }; - - // the rule should filter all votes after block #20 - // is finalized until block #50 is imported. - let voting_rule = super::PauseAfterBlockFor(20, 30); - - // add 10 blocks - push_blocks(&mut hashes, 10); - assert_eq!(client.info().best_number, 10); - - // we have not reached the pause block - // therefore nothing should be restricted - assert_eq!( - futures::executor::block_on(voting_rule.restrict_vote( - client.clone(), - &get_header(hashes[0]), - &get_header(hashes[10]), - &get_header(hashes[10]) - )), - None, - ); - - // add 15 more blocks - // best block: #25 - push_blocks(&mut hashes, 15); - - // we are targeting the pause block, - // the vote should not be restricted - assert_eq!( - futures::executor::block_on(voting_rule.restrict_vote( - client.clone(), - &get_header(hashes[10]), - &get_header(hashes[20]), - &get_header(hashes[20]) - )), - None, - ); - - // we are past the pause block, votes should - // be limited to the pause block. - let pause_block = get_header(hashes[20]); - assert_eq!( - futures::executor::block_on(voting_rule.restrict_vote( - client.clone(), - &get_header(hashes[10]), - &get_header(hashes[21]), - &get_header(hashes[21]) - )), - Some((pause_block.hash(), *pause_block.number())), - ); - - // we've finalized the pause block, so we'll keep - // restricting our votes to it. - assert_eq!( - futures::executor::block_on(voting_rule.restrict_vote( - client.clone(), - &pause_block, // #20 - &get_header(hashes[21]), - &get_header(hashes[21]), - )), - Some((pause_block.hash(), *pause_block.number())), - ); - - // add 30 more blocks - // best block: #55 - push_blocks(&mut hashes, 30); - - // we're at the last block of the pause, this block - // should still be considered in the pause period - assert_eq!( - futures::executor::block_on(voting_rule.restrict_vote( - client.clone(), - &pause_block, // #20 - &get_header(hashes[50]), - &get_header(hashes[50]), - )), - Some((pause_block.hash(), *pause_block.number())), - ); - - // we're past the pause period, no votes should be filtered - assert_eq!( - futures::executor::block_on(voting_rule.restrict_vote( - client.clone(), - &pause_block, // #20 - &get_header(hashes[51]), - &get_header(hashes[51]), - )), - None, - ); - } -} diff --git a/polkadot/node/service/src/lib.rs b/polkadot/node/service/src/lib.rs index fafdc586009..5069ec467c9 100644 --- a/polkadot/node/service/src/lib.rs +++ b/polkadot/node/service/src/lib.rs @@ -623,7 +623,6 @@ where #[cfg(feature = "full-node")] pub struct NewFullParams { pub is_parachain_node: IsParachainNode, - pub grandpa_pause: Option<(u32, u32)>, pub enable_beefy: bool, /// Whether to enable the block authoring backoff on production networks /// where it isn't enabled by default. @@ -717,7 +716,6 @@ pub fn new_full( mut config: Configuration, NewFullParams { is_parachain_node, - grandpa_pause, enable_beefy, force_authoring_backoff, jaeger_agent, @@ -1248,32 +1246,14 @@ pub fn new_full( // provide better guarantees of block and vote data availability than // the observer. - // add a custom voting rule to temporarily stop voting for new blocks - // after the given pause block is finalized and restarting after the - // given delay. - let mut builder = grandpa::VotingRulesBuilder::default(); + let mut voting_rules_builder = grandpa::VotingRulesBuilder::default(); #[cfg(not(feature = "malus"))] let _malus_finality_delay = None; if let Some(delay) = _malus_finality_delay { info!(?delay, "Enabling malus finality delay",); - builder = builder.add(grandpa::BeforeBestBlockBy(delay)); - }; - - let voting_rule = match grandpa_pause { - Some((block, delay)) => { - info!( - block_number = %block, - delay = %delay, - "GRANDPA scheduled voting pause set for block #{} with a duration of {} blocks.", - block, - delay, - ); - - builder.add(grandpa_support::PauseAfterBlockFor(block, delay)).build() - }, - None => builder.build(), + voting_rules_builder = voting_rules_builder.add(grandpa::BeforeBestBlockBy(delay)); }; let grandpa_config = grandpa::GrandpaParams { @@ -1281,7 +1261,7 @@ pub fn new_full( link: link_half, network: network.clone(), sync: sync_service.clone(), - voting_rule, + voting_rule: voting_rules_builder.build(), prometheus_registry: prometheus_registry.clone(), shared_voter_state, telemetry: telemetry.as_ref().map(|x| x.handle()), diff --git a/polkadot/node/test/service/src/lib.rs b/polkadot/node/test/service/src/lib.rs index a8352b60751..312113869bc 100644 --- a/polkadot/node/test/service/src/lib.rs +++ b/polkadot/node/test/service/src/lib.rs @@ -80,7 +80,6 @@ pub fn new_full( config, polkadot_service::NewFullParams { is_parachain_node, - grandpa_pause: None, enable_beefy: true, force_authoring_backoff: false, jaeger_agent: None, diff --git a/polkadot/parachain/test-parachains/adder/collator/src/main.rs b/polkadot/parachain/test-parachains/adder/collator/src/main.rs index 1558df6708d..3984026f511 100644 --- a/polkadot/parachain/test-parachains/adder/collator/src/main.rs +++ b/polkadot/parachain/test-parachains/adder/collator/src/main.rs @@ -62,7 +62,6 @@ fn main() -> Result<()> { is_parachain_node: polkadot_service::IsParachainNode::Collator( collator.collator_key(), ), - grandpa_pause: None, enable_beefy: false, force_authoring_backoff: false, jaeger_agent: None, diff --git a/polkadot/parachain/test-parachains/undying/collator/src/main.rs b/polkadot/parachain/test-parachains/undying/collator/src/main.rs index 1db1b6f1102..d70a98c7ef6 100644 --- a/polkadot/parachain/test-parachains/undying/collator/src/main.rs +++ b/polkadot/parachain/test-parachains/undying/collator/src/main.rs @@ -82,7 +82,6 @@ fn main() -> Result<()> { is_parachain_node: polkadot_service::IsParachainNode::Collator( collator.collator_key(), ), - grandpa_pause: None, enable_beefy: false, force_authoring_backoff: false, jaeger_agent: None, -- GitLab From ec3a61ed86305e5b70ce6e466cf127addf560186 Mon Sep 17 00:00:00 2001 From: Sebastian Kunert Date: Tue, 28 Nov 2023 16:59:06 +0100 Subject: [PATCH 092/102] Remove pov-recovery race condition/Improve zombienet test (#2526) The test was a bit flaky on CI. There was a race condition in the pov-recovery system. If the timing is bad, it can happen that a block waits for a parent that is already queued for import. The check if a block has children waiting happens when we insert into the import queue. So we need to do an additional check once we receive the import notification for the parent block. Second issue is that `alice` was missing `--in-peers 0` and `--out-peers 0`, so alice was sometimes still fetching block via sync and the assertion on the logs in zombienet would fail. There is another potential issue that I saw once locally. We have a failing pov-recovery queue that fails from time to time to check that the retry mechanism does what it should. We now make sure that the same candidate is never failed twice, so the tests become more predictable. --- cumulus/client/pov-recovery/src/lib.rs | 17 ++++++++++++++--- cumulus/test/service/src/lib.rs | 18 ++++++++++++------ cumulus/zombienet/tests/0002-pov_recovery.toml | 5 ++--- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/cumulus/client/pov-recovery/src/lib.rs b/cumulus/client/pov-recovery/src/lib.rs index b9a140f55c6..32aba6c8993 100644 --- a/cumulus/client/pov-recovery/src/lib.rs +++ b/cumulus/client/pov-recovery/src/lib.rs @@ -410,6 +410,7 @@ where ?block_hash, parent_hash = ?parent, parent_scheduled_for_recovery, + waiting_blocks = self.waiting_for_parent.len(), "Waiting for recovery of parent.", ); @@ -442,13 +443,13 @@ where _ => (), } - self.import_block(block).await; + self.import_block(block); } /// Import the given `block`. /// /// This will also recursivley drain `waiting_for_parent` and import them as well. - async fn import_block(&mut self, block: Block) { + fn import_block(&mut self, block: Block) { let mut blocks = VecDeque::new(); tracing::debug!(target: LOG_TARGET, block_hash = ?block.hash(), "Importing block retrieved using pov_recovery"); @@ -551,7 +552,6 @@ where }; futures::pin_mut!(pending_candidates); - loop { select! { pending_candidate = pending_candidates.next() => { @@ -573,6 +573,17 @@ where imported = imported_blocks.next() => { if let Some(imported) = imported { self.clear_waiting_recovery(&imported.hash); + + // We need to double check that no blocks are waiting for this block. + // Can happen when a waiting child block is queued to wait for parent while the parent block is still + // in the import queue. + if let Some(waiting_blocks) = self.waiting_for_parent.remove(&imported.hash) { + for block in waiting_blocks { + tracing::debug!(target: LOG_TARGET, block_hash = ?block.hash(), resolved_parent = ?imported.hash, "Found new waiting child block during import, queuing."); + self.import_block(block); + } + }; + } else { tracing::debug!(target: LOG_TARGET, "Imported blocks stream ended"); return; diff --git a/cumulus/test/service/src/lib.rs b/cumulus/test/service/src/lib.rs index 4d4c60d1bda..fb858ce0b71 100644 --- a/cumulus/test/service/src/lib.rs +++ b/cumulus/test/service/src/lib.rs @@ -27,6 +27,7 @@ mod genesis; use runtime::AccountId; use sc_executor::{HeapAllocStrategy, WasmExecutor, DEFAULT_HEAP_ALLOC_STRATEGY}; use std::{ + collections::HashSet, future::Future, net::{IpAddr, Ipv4Addr, SocketAddr}, time::Duration, @@ -57,7 +58,7 @@ use cumulus_test_runtime::{Hash, Header, NodeBlock as Block, RuntimeApi}; use frame_system_rpc_runtime_api::AccountNonceApi; use polkadot_node_subsystem::{errors::RecoveryError, messages::AvailabilityRecoveryMessage}; use polkadot_overseer::Handle as OverseerHandle; -use polkadot_primitives::{CollatorPair, Hash as PHash, PersistedValidationData}; +use polkadot_primitives::{CandidateHash, CollatorPair, Hash as PHash, PersistedValidationData}; use polkadot_service::ProvideRuntimeApi; use sc_consensus::ImportQueue; use sc_network::{ @@ -144,12 +145,13 @@ pub type TransactionPool = Arc>; pub struct FailingRecoveryHandle { overseer_handle: OverseerHandle, counter: u32, + failed_hashes: HashSet, } impl FailingRecoveryHandle { /// Create a new FailingRecoveryHandle pub fn new(overseer_handle: OverseerHandle) -> Self { - Self { overseer_handle, counter: 0 } + Self { overseer_handle, counter: 0, failed_hashes: Default::default() } } } @@ -160,11 +162,15 @@ impl RecoveryHandle for FailingRecoveryHandle { message: AvailabilityRecoveryMessage, origin: &'static str, ) { - // For every 5th block we immediately signal unavailability to trigger - // a retry. - if self.counter % 5 == 0 { + let AvailabilityRecoveryMessage::RecoverAvailableData(ref receipt, _, _, _) = message; + let candidate_hash = receipt.hash(); + + // For every 3rd block we immediately signal unavailability to trigger + // a retry. The same candidate is never failed multiple times to ensure progress. + if self.counter % 3 == 0 && self.failed_hashes.insert(candidate_hash) { + tracing::info!(target: LOG_TARGET, ?candidate_hash, "Failing pov recovery."); + let AvailabilityRecoveryMessage::RecoverAvailableData(_, _, _, back_sender) = message; - tracing::info!(target: LOG_TARGET, "Failing pov recovery."); back_sender .send(Err(RecoveryError::Unavailable)) .expect("Return channel should work here."); diff --git a/cumulus/zombienet/tests/0002-pov_recovery.toml b/cumulus/zombienet/tests/0002-pov_recovery.toml index 105e4a324f3..fe42fd4b2f6 100644 --- a/cumulus/zombienet/tests/0002-pov_recovery.toml +++ b/cumulus/zombienet/tests/0002-pov_recovery.toml @@ -34,13 +34,12 @@ add_to_genesis = false args = ["--disable-block-announcements"] # run 'alice' as a parachain collator who does not produce blocks - # 'alice' is a bootnode for 'bob' and 'charlie' [[parachains.collators]] name = "alice" validator = true # collator image = "{{COL_IMAGE}}" command = "test-parachain" - args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug,cumulus-consensus=debug", "--use-null-consensus", "--disable-block-announcements", "--bootnodes {{'bob'|zombie('multiAddress')}}", "--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] + args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug,cumulus-consensus=debug", "--use-null-consensus", "--disable-block-announcements", "--bootnodes {{'bob'|zombie('multiAddress')}}", "--in-peers 0", "--out-peers 0", "--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] # run 'charlie' as a parachain full node [[parachains.collators]] @@ -48,7 +47,7 @@ add_to_genesis = false validator = false # full node image = "{{COL_IMAGE}}" command = "test-parachain" - args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug,cumulus-consensus=debug", "--disable-block-announcements", "--bootnodes {{'bob'|zombie('multiAddress')}}", "--in-peers 0", "--out-peers 0","--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] + args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug,cumulus-consensus=debug", "--disable-block-announcements", "--bootnodes {{'bob'|zombie('multiAddress')}}", "--in-peers 0", "--out-peers 0", "--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] # we fail recovery for 'eve' from time to time to test retries [[parachains.collators]] -- GitLab From e71c484d5bd12330e16f568ad582e1fc1c878669 Mon Sep 17 00:00:00 2001 From: Aaro Altonen <48052676+altonen@users.noreply.github.com> Date: Tue, 28 Nov 2023 20:18:52 +0200 Subject: [PATCH 093/102] Rework the event system of `sc-network` (#1370) This commit introduces a new concept called `NotificationService` which allows Polkadot protocols to communicate with the underlying notification protocol implementation directly, without routing events through `NetworkWorker`. This implies that each protocol has its own service which it uses to communicate with remote peers and that each `NotificationService` is unique with respect to the underlying notification protocol, meaning `NotificationService` for the transaction protocol can only be used to send and receive transaction-related notifications. The `NotificationService` concept introduces two additional benefits: * allow protocols to start using custom handshakes * allow protocols to accept/reject inbound peers Previously the validation of inbound connections was solely the responsibility of `ProtocolController`. This caused issues with light peers and `SyncingEngine` as `ProtocolController` would accept more peers than `SyncingEngine` could accept which caused peers to have differing views of their own states. `SyncingEngine` would reject excess peers but these rejections were not properly communicated to those peers causing them to assume that they were accepted. With `NotificationService`, the local handshake is not sent to remote peer if peer is rejected which allows it to detect that it was rejected. This commit also deprecates the use of `NetworkEventStream` for all notification-related events and going forward only DHT events are provided through `NetworkEventStream`. If protocols wish to follow each other's events, they must introduce additional abtractions, as is done for GRANDPA and transactions protocols by following the syncing protocol through `SyncEventStream`. Fixes https://github.com/paritytech/polkadot-sdk/issues/512 Fixes https://github.com/paritytech/polkadot-sdk/issues/514 Fixes https://github.com/paritytech/polkadot-sdk/issues/515 Fixes https://github.com/paritytech/polkadot-sdk/issues/554 Fixes https://github.com/paritytech/polkadot-sdk/issues/556 --- These changes are transferred from https://github.com/paritytech/substrate/pull/14197 but there are no functional changes compared to that PR --------- Co-authored-by: Dmitry Markin Co-authored-by: Alexandru Vasile <60601340+lexnv@users.noreply.github.com> --- Cargo.lock | 6 + .../relay-chain-minimal-node/Cargo.toml | 1 + .../src/collator_overseer.rs | 15 +- .../relay-chain-minimal-node/src/lib.rs | 14 +- .../relay-chain-minimal-node/src/network.rs | 25 +- polkadot/node/network/bridge/src/lib.rs | 1 + polkadot/node/network/bridge/src/network.rs | 96 +- polkadot/node/network/bridge/src/rx/mod.rs | 952 +++++++++-------- polkadot/node/network/bridge/src/rx/tests.rs | 335 ++++-- polkadot/node/network/bridge/src/tx/mod.rs | 42 +- polkadot/node/network/bridge/src/tx/tests.rs | 130 ++- .../network/bridge/src/validator_discovery.rs | 13 +- .../node/network/protocol/src/peer_set.rs | 77 +- polkadot/node/service/Cargo.toml | 1 + polkadot/node/service/src/lib.rs | 56 +- polkadot/node/service/src/overseer.rs | 14 +- .../bin/node-template/node/src/service.rs | 7 +- substrate/bin/node/cli/src/service.rs | 33 +- .../consensus/beefy/src/communication/mod.rs | 12 +- substrate/client/consensus/beefy/src/lib.rs | 6 +- substrate/client/consensus/beefy/src/tests.rs | 41 +- .../client/consensus/beefy/src/worker.rs | 4 + .../grandpa/src/communication/mod.rs | 4 +- .../grandpa/src/communication/tests.rs | 232 ++-- substrate/client/consensus/grandpa/src/lib.rs | 22 +- .../client/consensus/grandpa/src/observer.rs | 23 +- .../client/consensus/grandpa/src/tests.rs | 82 +- .../client/executor/wasmtime/src/tests.rs | 8 +- substrate/client/mixnet/Cargo.toml | 1 + .../client/mixnet/src/packet_dispatcher.rs | 36 +- substrate/client/mixnet/src/protocol.rs | 25 +- substrate/client/mixnet/src/run.rs | 60 +- .../client/mixnet/src/sync_with_runtime.rs | 1 + substrate/client/network-gossip/Cargo.toml | 2 + substrate/client/network-gossip/src/bridge.rs | 268 +++-- .../network-gossip/src/state_machine.rs | 166 ++- substrate/client/network/Cargo.toml | 2 + substrate/client/network/common/src/role.rs | 14 +- substrate/client/network/src/behaviour.rs | 55 +- substrate/client/network/src/config.rs | 90 +- substrate/client/network/src/error.rs | 9 + substrate/client/network/src/event.rs | 49 +- substrate/client/network/src/lib.rs | 22 +- substrate/client/network/src/mock.rs | 9 + substrate/client/network/src/peer_store.rs | 41 +- substrate/client/network/src/protocol.rs | 441 +++----- .../client/network/src/protocol/message.rs | 1 + .../network/src/protocol/notifications.rs | 4 + .../src/protocol/notifications/behaviour.rs | 994 ++++++++++++++---- .../src/protocol/notifications/handler.rs | 73 +- .../protocol/notifications/service/metrics.rs | 130 +++ .../src/protocol/notifications/service/mod.rs | 634 +++++++++++ .../protocol/notifications/service/tests.rs | 839 +++++++++++++++ .../src/protocol/notifications/tests.rs | 31 +- .../client/network/src/protocol_controller.rs | 3 + substrate/client/network/src/service.rs | 218 ++-- .../client/network/src/service/metrics.rs | 28 - .../client/network/src/service/signature.rs | 2 + .../client/network/src/service/traits.rs | 205 +++- substrate/client/network/statement/src/lib.rs | 123 ++- substrate/client/network/sync/src/engine.rs | 386 ++++--- .../client/network/sync/src/service/mock.rs | 2 + substrate/client/network/test/src/lib.rs | 97 +- substrate/client/network/test/src/service.rs | 337 +++--- substrate/client/network/test/src/sync.rs | 86 +- .../client/network/transactions/src/lib.rs | 156 ++- substrate/client/offchain/src/api.rs | 6 +- substrate/client/offchain/src/lib.rs | 8 +- substrate/client/service/src/builder.rs | 33 +- .../data/account_reentrance_count_call.wat | 2 +- .../data/add_remove_delegate_dependency.wat | 16 +- .../frame/contracts/fixtures/data/balance.wat | 2 +- .../frame/contracts/fixtures/data/call.wat | 2 +- .../fixtures/data/call_runtime_and_call.wat | 2 +- .../fixtures/data/caller_contract.wat | 66 +- .../fixtures/data/chain_extension.wat | 2 +- .../data/chain_extension_temp_storage.wat | 2 +- .../fixtures/data/create_storage_and_call.wat | 2 +- .../data/create_storage_and_instantiate.wat | 2 +- .../contracts/fixtures/data/crypto_hashes.wat | 6 +- .../data/debug_message_invalid_utf8.wat | 2 +- .../data/debug_message_logging_disabled.wat | 2 +- .../fixtures/data/debug_message_works.wat | 2 +- .../contracts/fixtures/data/delegate_call.wat | 6 +- .../fixtures/data/delegate_call_lib.wat | 2 +- .../fixtures/data/delegate_call_simple.wat | 2 +- .../fixtures/data/destroy_and_transfer.wat | 2 +- .../frame/contracts/fixtures/data/drain.wat | 2 +- .../contracts/fixtures/data/ecdsa_recover.wat | 2 +- .../contracts/fixtures/data/event_size.wat | 2 +- .../contracts/fixtures/data/multi_store.wat | 2 +- .../fixtures/data/reentrance_count_call.wat | 10 +- .../data/reentrance_count_delegated_call.wat | 12 +- .../contracts/fixtures/data/self_destruct.wat | 2 +- .../data/self_destructing_constructor.wat | 2 +- .../contracts/fixtures/data/set_code_hash.wat | 6 +- .../contracts/fixtures/data/storage_size.wat | 2 +- .../contracts/fixtures/data/store_call.wat | 2 +- .../contracts/fixtures/data/store_deploy.wat | 2 +- .../contracts/fixtures/data/xcm_execute.wat | 2 +- .../contracts/fixtures/data/xcm_send.wat | 2 +- substrate/frame/contracts/src/wasm/mod.rs | 54 +- 102 files changed, 5628 insertions(+), 2537 deletions(-) create mode 100644 substrate/client/network/src/protocol/notifications/service/metrics.rs create mode 100644 substrate/client/network/src/protocol/notifications/service/mod.rs create mode 100644 substrate/client/network/src/protocol/notifications/service/tests.rs diff --git a/Cargo.lock b/Cargo.lock index f99b579bfe9..4fa9e83a173 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4177,6 +4177,7 @@ dependencies = [ "cumulus-relay-chain-interface", "cumulus-relay-chain-rpc-interface", "futures", + "parking_lot 0.12.1", "polkadot-availability-recovery", "polkadot-collator-protocol", "polkadot-core-primitives", @@ -13268,6 +13269,7 @@ dependencies = [ "pallet-transaction-payment-rpc-runtime-api", "parity-db", "parity-scale-codec", + "parking_lot 0.12.1", "polkadot-approval-distribution", "polkadot-availability-bitfield-distribution", "polkadot-availability-distribution", @@ -15728,6 +15730,7 @@ dependencies = [ "array-bytes 4.2.0", "arrayvec 0.7.4", "blake2 0.10.6", + "bytes", "futures", "futures-timer", "libp2p-identity", @@ -15793,6 +15796,7 @@ dependencies = [ "tempfile", "thiserror", "tokio", + "tokio-stream", "tokio-test", "tokio-util", "unsigned-varint", @@ -15848,10 +15852,12 @@ name = "sc-network-gossip" version = "0.10.0-dev" dependencies = [ "ahash 0.8.3", + "async-trait", "futures", "futures-timer", "libp2p", "log", + "parity-scale-codec", "quickcheck", "sc-network", "sc-network-common", diff --git a/cumulus/client/relay-chain-minimal-node/Cargo.toml b/cumulus/client/relay-chain-minimal-node/Cargo.toml index ce76fc5cd6d..ee93df09ce1 100644 --- a/cumulus/client/relay-chain-minimal-node/Cargo.toml +++ b/cumulus/client/relay-chain-minimal-node/Cargo.toml @@ -47,4 +47,5 @@ array-bytes = "6.1" tracing = "0.1.37" async-trait = "0.1.73" futures = "0.3.28" +parking_lot = "0.12.1" diff --git a/cumulus/client/relay-chain-minimal-node/src/collator_overseer.rs b/cumulus/client/relay-chain-minimal-node/src/collator_overseer.rs index a785a9f6f79..5f5bf338ef9 100644 --- a/cumulus/client/relay-chain-minimal-node/src/collator_overseer.rs +++ b/cumulus/client/relay-chain-minimal-node/src/collator_overseer.rs @@ -15,7 +15,8 @@ // along with Polkadot. If not, see . use futures::{select, StreamExt}; -use std::sync::Arc; +use parking_lot::Mutex; +use std::{collections::HashMap, sync::Arc}; use polkadot_availability_recovery::AvailabilityRecoverySubsystem; use polkadot_collator_protocol::{CollatorProtocolSubsystem, ProtocolSide}; @@ -28,7 +29,7 @@ use polkadot_node_core_chain_api::ChainApiSubsystem; use polkadot_node_core_prospective_parachains::ProspectiveParachainsSubsystem; use polkadot_node_core_runtime_api::RuntimeApiSubsystem; use polkadot_node_network_protocol::{ - peer_set::PeerSetProtocolNames, + peer_set::{PeerSet, PeerSetProtocolNames}, request_response::{ v1::{self, AvailableDataFetchingRequest}, v2, IncomingRequestReceiver, ReqProtocolNames, @@ -42,7 +43,7 @@ use polkadot_overseer::{ use polkadot_primitives::CollatorPair; use sc_authority_discovery::Service as AuthorityDiscoveryService; -use sc_network::NetworkStateInfo; +use sc_network::{NetworkStateInfo, NotificationService}; use sc_service::TaskManager; use sc_utils::mpsc::tracing_unbounded; @@ -77,6 +78,8 @@ pub(crate) struct CollatorOverseerGenArgs<'a> { pub req_protocol_names: ReqProtocolNames, /// Peerset protocols name mapping pub peer_set_protocol_names: PeerSetProtocolNames, + /// Notification services for validation/collation protocols. + pub notification_services: HashMap>, } fn build_overseer( @@ -94,6 +97,7 @@ fn build_overseer( collator_pair, req_protocol_names, peer_set_protocol_names, + notification_services, }: CollatorOverseerGenArgs<'_>, ) -> Result< (Overseer, Arc>, OverseerHandle), @@ -101,6 +105,8 @@ fn build_overseer( > { let spawner = SpawnGlue(spawner); let network_bridge_metrics: NetworkBridgeMetrics = Metrics::register(registry)?; + let notification_sinks = Arc::new(Mutex::new(HashMap::new())); + let builder = Overseer::builder() .availability_distribution(DummySubsystem) .availability_recovery(AvailabilityRecoverySubsystem::for_collator( @@ -131,6 +137,8 @@ fn build_overseer( sync_oracle, network_bridge_metrics.clone(), peer_set_protocol_names.clone(), + notification_services, + notification_sinks.clone(), )) .network_bridge_tx(NetworkBridgeTxSubsystem::new( network_service, @@ -138,6 +146,7 @@ fn build_overseer( network_bridge_metrics, req_protocol_names, peer_set_protocol_names, + notification_sinks, )) .provisioner(DummySubsystem) .runtime_api(RuntimeApiSubsystem::new( diff --git a/cumulus/client/relay-chain-minimal-node/src/lib.rs b/cumulus/client/relay-chain-minimal-node/src/lib.rs index 8801f93640c..d121d2d3356 100644 --- a/cumulus/client/relay-chain-minimal-node/src/lib.rs +++ b/cumulus/client/relay-chain-minimal-node/src/lib.rs @@ -21,7 +21,7 @@ use cumulus_relay_chain_rpc_interface::{RelayChainRpcClient, RelayChainRpcInterf use network::build_collator_network; use polkadot_network_bridge::{peer_sets_info, IsAuthority}; use polkadot_node_network_protocol::{ - peer_set::PeerSetProtocolNames, + peer_set::{PeerSet, PeerSetProtocolNames}, request_response::{ v1, v2, IncomingRequest, IncomingRequestReceiver, Protocol, ReqProtocolNames, }, @@ -175,10 +175,13 @@ async fn new_minimal_relay_chain( 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 }; - - for config in peer_sets_info(is_authority, &peer_set_protocol_names) { - net_config.add_notification_protocol(config); - } + let notification_services = peer_sets_info(is_authority, &peer_set_protocol_names) + .into_iter() + .map(|(config, (peerset, service))| { + net_config.add_notification_protocol(config); + (peerset, service) + }) + .collect::>>(); let request_protocol_names = ReqProtocolNames::new(genesis_hash, config.chain_spec.fork_id()); let (collation_req_receiver_v1, collation_req_receiver_v2, available_data_req_receiver) = @@ -218,6 +221,7 @@ async fn new_minimal_relay_chain( collator_pair, req_protocol_names: request_protocol_names, peer_set_protocol_names, + notification_services, }; let overseer_handle = diff --git a/cumulus/client/relay-chain-minimal-node/src/network.rs b/cumulus/client/relay-chain-minimal-node/src/network.rs index 813dca47a03..95785063c1a 100644 --- a/cumulus/client/relay-chain-minimal-node/src/network.rs +++ b/cumulus/client/relay-chain-minimal-node/src/network.rs @@ -26,10 +26,9 @@ use sc_network::{ NetworkService, }; -use sc_network::config::FullNetworkConfiguration; +use sc_network::{config::FullNetworkConfiguration, NotificationService}; use sc_network_common::{role::Roles, sync::message::BlockAnnouncesHandshake}; use sc_service::{error::Error, Configuration, NetworkStarter, SpawnTaskHandle}; -use sc_utils::mpsc::tracing_unbounded; use std::{iter, sync::Arc}; @@ -45,7 +44,7 @@ pub(crate) fn build_collator_network( Error, > { let protocol_id = config.protocol_id(); - let block_announce_config = get_block_announce_proto_config::( + let (block_announce_config, _notification_service) = get_block_announce_proto_config::( protocol_id.clone(), &None, Roles::from(&config.role), @@ -69,8 +68,6 @@ pub(crate) fn build_collator_network( let peer_store_handle = peer_store.handle(); spawn_handle.spawn("peer-store", Some("networking"), peer_store.run()); - // RX is not used for anything because syncing is not started for the minimal node - let (tx, _rx) = tracing_unbounded("mpsc_syncing_engine_protocol", 100_000); let network_params = sc_network::config::Params:: { role: config.role.clone(), executor: { @@ -86,7 +83,6 @@ pub(crate) fn build_collator_network( protocol_id, metrics_registry: config.prometheus_config.as_ref().map(|config| config.registry.clone()), block_announce_config, - tx, }; let network_worker = sc_network::NetworkWorker::new(network_params)?; @@ -150,7 +146,7 @@ fn get_block_announce_proto_config( best_number: NumberFor, best_hash: B::Hash, genesis_hash: B::Hash, -) -> NonDefaultSetConfig { +) -> (NonDefaultSetConfig, Box) { let block_announces_protocol = { let genesis_hash = genesis_hash.as_ref(); if let Some(ref fork_id) = fork_id { @@ -160,12 +156,11 @@ fn get_block_announce_proto_config( } }; - 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( + NonDefaultSetConfig::new( + block_announces_protocol.into(), + iter::once(format!("/{}/block-announces/1", protocol_id.as_ref()).into()).collect(), + 1024 * 1024, + Some(NotificationHandshake::new(BlockAnnouncesHandshake::::build( roles, best_number, best_hash, @@ -173,11 +168,11 @@ fn get_block_announce_proto_config( ))), // NOTE: `set_config` will be ignored by `protocol.rs` as the block announcement // protocol is still hardcoded into the peerset. - set_config: SetConfig { + SetConfig { in_peers: 0, out_peers: 0, reserved_nodes: Vec::new(), non_reserved_mode: NonReservedPeerMode::Deny, }, - } + ) } diff --git a/polkadot/node/network/bridge/src/lib.rs b/polkadot/node/network/bridge/src/lib.rs index 46d4a00faac..ddce99d5c2a 100644 --- a/polkadot/node/network/bridge/src/lib.rs +++ b/polkadot/node/network/bridge/src/lib.rs @@ -83,6 +83,7 @@ pub(crate) enum WireMessage { ViewUpdate(View), } +#[derive(Debug)] pub(crate) struct PeerData { /// The Latest view sent by the peer. view: View, diff --git a/polkadot/node/network/bridge/src/network.rs b/polkadot/node/network/bridge/src/network.rs index c264c94cc19..a9339a5c443 100644 --- a/polkadot/node/network/bridge/src/network.rs +++ b/polkadot/node/network/bridge/src/network.rs @@ -14,23 +14,24 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use std::{collections::HashSet, sync::Arc}; +use std::{ + collections::{HashMap, HashSet}, + sync::Arc, +}; use async_trait::async_trait; -use futures::{prelude::*, stream::BoxStream}; +use parking_lot::Mutex; use parity_scale_codec::Encode; use sc_network::{ - config::parse_addr, multiaddr::Multiaddr, types::ProtocolName, Event as NetworkEvent, - IfDisconnected, NetworkEventStream, NetworkNotification, NetworkPeers, NetworkRequest, - NetworkService, OutboundFailure, ReputationChange, RequestFailure, + config::parse_addr, multiaddr::Multiaddr, types::ProtocolName, IfDisconnected, MessageSink, + NetworkPeers, NetworkRequest, NetworkService, OutboundFailure, ReputationChange, + RequestFailure, }; use polkadot_node_network_protocol::{ - peer_set::{ - CollationVersion, PeerSet, PeerSetProtocolNames, ProtocolVersion, ValidationVersion, - }, + peer_set::{CollationVersion, PeerSet, ProtocolVersion, ValidationVersion}, request_response::{OutgoingRequest, Recipient, ReqProtocolNames, Requests}, v1 as protocol_v1, v2 as protocol_v2, vstaging as protocol_vstaging, PeerId, }; @@ -44,104 +45,94 @@ const LOG_TARGET: &'static str = "parachain::network-bridge-net"; // Helper function to send a validation v1 message to a list of peers. // Messages are always sent via the main protocol, even legacy protocol messages. pub(crate) fn send_validation_message_v1( - net: &mut impl Network, peers: Vec, - peerset_protocol_names: &PeerSetProtocolNames, message: WireMessage, metrics: &Metrics, + notification_sinks: &Arc>>>, ) { gum::trace!(target: LOG_TARGET, ?peers, ?message, "Sending validation v1 message to peers",); send_message( - net, peers, PeerSet::Validation, ValidationVersion::V1.into(), - peerset_protocol_names, message, metrics, + notification_sinks, ); } // Helper function to send a validation vstaging message to a list of peers. // Messages are always sent via the main protocol, even legacy protocol messages. pub(crate) fn send_validation_message_vstaging( - net: &mut impl Network, peers: Vec, - peerset_protocol_names: &PeerSetProtocolNames, message: WireMessage, metrics: &Metrics, + notification_sinks: &Arc>>>, ) { gum::trace!(target: LOG_TARGET, ?peers, ?message, "Sending validation vstaging message to peers",); send_message( - net, peers, PeerSet::Validation, ValidationVersion::VStaging.into(), - peerset_protocol_names, message, metrics, + notification_sinks, ); } // Helper function to send a validation v2 message to a list of peers. // Messages are always sent via the main protocol, even legacy protocol messages. pub(crate) fn send_validation_message_v2( - net: &mut impl Network, peers: Vec, - protocol_names: &PeerSetProtocolNames, message: WireMessage, metrics: &Metrics, + notification_sinks: &Arc>>>, ) { send_message( - net, peers, PeerSet::Validation, ValidationVersion::V2.into(), - protocol_names, message, metrics, + notification_sinks, ); } // Helper function to send a collation v1 message to a list of peers. // Messages are always sent via the main protocol, even legacy protocol messages. pub(crate) fn send_collation_message_v1( - net: &mut impl Network, peers: Vec, - peerset_protocol_names: &PeerSetProtocolNames, message: WireMessage, metrics: &Metrics, + notification_sinks: &Arc>>>, ) { send_message( - net, peers, PeerSet::Collation, CollationVersion::V1.into(), - peerset_protocol_names, message, metrics, + notification_sinks, ); } // Helper function to send a collation v2 message to a list of peers. // Messages are always sent via the main protocol, even legacy protocol messages. pub(crate) fn send_collation_message_v2( - net: &mut impl Network, peers: Vec, - peerset_protocol_names: &PeerSetProtocolNames, message: WireMessage, metrics: &Metrics, + notification_sinks: &Arc>>>, ) { send_message( - net, peers, PeerSet::Collation, CollationVersion::V2.into(), - peerset_protocol_names, message, metrics, + notification_sinks, ); } @@ -151,19 +142,19 @@ pub(crate) fn send_collation_message_v2( /// messages that are compatible with the passed peer set, as that is currently not enforced by /// this function. These are messages of type `WireMessage` parameterized on the matching type. fn send_message( - net: &mut impl Network, mut peers: Vec, peer_set: PeerSet, version: ProtocolVersion, - protocol_names: &PeerSetProtocolNames, message: M, metrics: &super::Metrics, + network_notification_sinks: &Arc>>>, ) where M: Encode + Clone, { if peers.is_empty() { return } + let message = { let encoded = message.encode(); metrics.on_notification_sent(peer_set, version, encoded.len(), peers.len()); @@ -171,13 +162,13 @@ fn send_message( encoded }; - // optimization: generate the protocol name once. - let protocol_name = protocol_names.get_name(peer_set, version); + let notification_sinks = network_notification_sinks.lock(); + gum::trace!( target: LOG_TARGET, ?peers, + ?peer_set, ?version, - ?protocol_name, ?message, "Sending message to peers", ); @@ -185,29 +176,26 @@ fn send_message( // optimization: avoid cloning the message for the last peer in the // list. The message payload can be quite large. If the underlying // network used `Bytes` this would not be necessary. + // + // peer may have gotten disconnect by the time `send_message()` is called + // at which point the the sink is not available. let last_peer = peers.pop(); - - // We always send messages on the "main" name even when a negotiated - // fallback is used. The libp2p implementation handles the fallback - // under the hood. - let protocol_name = protocol_names.get_main_name(peer_set); peers.into_iter().for_each(|peer| { - net.write_notification(peer, protocol_name.clone(), message.clone()); + if let Some(sink) = notification_sinks.get(&(peer_set, peer)) { + sink.send_sync_notification(message.clone()); + } }); + if let Some(peer) = last_peer { - net.write_notification(peer, protocol_name, message); + if let Some(sink) = notification_sinks.get(&(peer_set, peer)) { + sink.send_sync_notification(message.clone()); + } } } /// An abstraction over networking for the purposes of this subsystem. #[async_trait] pub trait Network: Clone + Send + 'static { - /// Get a stream of all events occurring on the network. This may include events unrelated - /// to the Polkadot protocol - the user of this function should filter only for events related - /// to the [`VALIDATION_PROTOCOL_NAME`](VALIDATION_PROTOCOL_NAME) - /// or [`COLLATION_PROTOCOL_NAME`](COLLATION_PROTOCOL_NAME) - fn event_stream(&mut self) -> BoxStream<'static, NetworkEvent>; - /// Ask the network to keep a substream open with these nodes and not disconnect from them /// until removed from the protocol's peer set. /// Note that `out_peers` setting has no effect on this. @@ -239,16 +227,12 @@ pub trait Network: Clone + Send + 'static { /// Disconnect a given peer from the protocol specified without harming reputation. fn disconnect_peer(&self, who: PeerId, protocol: ProtocolName); - /// Write a notification to a peer on the given protocol. - fn write_notification(&self, who: PeerId, protocol: ProtocolName, message: Vec); + /// Get peer role. + fn peer_role(&self, who: PeerId, handshake: Vec) -> Option; } #[async_trait] impl Network for Arc> { - fn event_stream(&mut self) -> BoxStream<'static, NetworkEvent> { - NetworkService::event_stream(self, "polkadot-network-bridge").boxed() - } - async fn set_reserved_peers( &mut self, protocol: ProtocolName, @@ -273,10 +257,6 @@ impl Network for Arc> { NetworkService::disconnect_peer(&**self, who, protocol); } - fn write_notification(&self, who: PeerId, protocol: ProtocolName, message: Vec) { - NetworkService::write_notification(&**self, who, protocol, message); - } - async fn start_request( &self, authority_discovery: &mut AD, @@ -348,6 +328,10 @@ impl Network for Arc> { if_disconnected, ); } + + fn peer_role(&self, who: PeerId, handshake: Vec) -> Option { + NetworkService::peer_role(self, who, handshake) + } } /// We assume one `peer_id` per `authority_id`. diff --git a/polkadot/node/network/bridge/src/rx/mod.rs b/polkadot/node/network/bridge/src/rx/mod.rs index 06be57ead00..40cd167a968 100644 --- a/polkadot/node/network/bridge/src/rx/mod.rs +++ b/polkadot/node/network/bridge/src/rx/mod.rs @@ -20,11 +20,14 @@ use super::*; use always_assert::never; use bytes::Bytes; -use futures::stream::{BoxStream, StreamExt}; use net_protocol::filter_by_peer_version; use parity_scale_codec::{Decode, DecodeAll}; +use parking_lot::Mutex; -use sc_network::Event as NetworkEvent; +use sc_network::{ + service::traits::{NotificationEvent, ValidationResult}, + MessageSink, NotificationService, +}; use sp_consensus::SyncOracle; use polkadot_node_network_protocol::{ @@ -88,6 +91,9 @@ pub struct NetworkBridgeRx { shared: Shared, metrics: Metrics, peerset_protocol_names: PeerSetProtocolNames, + validation_service: Box, + collation_service: Box, + notification_sinks: Arc>>>, } impl NetworkBridgeRx { @@ -102,8 +108,18 @@ impl NetworkBridgeRx { sync_oracle: Box, metrics: Metrics, peerset_protocol_names: PeerSetProtocolNames, + mut notification_services: HashMap>, + notification_sinks: Arc>>>, ) -> Self { let shared = Shared::default(); + + let validation_service = notification_services + .remove(&PeerSet::Validation) + .expect("validation protocol was enabled so `NotificationService` must exist; qed"); + let collation_service = notification_services + .remove(&PeerSet::Collation) + .expect("collation protocol was enabled so `NotificationService` must exist; qed"); + Self { network_service, authority_discovery_service, @@ -111,6 +127,9 @@ impl NetworkBridgeRx { shared, metrics, peerset_protocol_names, + validation_service, + collation_service, + notification_sinks, } } } @@ -121,444 +140,563 @@ where Net: Network + Sync, AD: validator_discovery::AuthorityDiscovery + Clone + Sync, { - fn start(mut self, ctx: Context) -> SpawnedSubsystem { - // The stream of networking events has to be created at initialization, otherwise the - // networking might open connections before the stream of events has been grabbed. - let network_stream = self.network_service.event_stream(); - + fn start(self, ctx: Context) -> SpawnedSubsystem { // Swallow error because failure is fatal to the node and we log with more precision // within `run_network`. - let future = run_network_in(self, ctx, network_stream) + let future = run_network_in(self, ctx) .map_err(|e| SubsystemError::with_origin("network-bridge", e)) .boxed(); SpawnedSubsystem { name: "network-bridge-rx-subsystem", future } } } -async fn handle_network_messages( - mut sender: impl overseer::NetworkBridgeRxSenderTrait, - mut network_service: impl Network, - network_stream: BoxStream<'static, NetworkEvent>, - mut authority_discovery_service: AD, - metrics: Metrics, - shared: Shared, - peerset_protocol_names: PeerSetProtocolNames, -) -> Result<(), Error> -where +/// Handle notification event received over the validation protocol. +async fn handle_validation_message( + event: NotificationEvent, + network_service: &mut impl Network, + sender: &mut impl overseer::NetworkBridgeRxSenderTrait, + authority_discovery_service: &mut AD, + metrics: &Metrics, + shared: &Shared, + peerset_protocol_names: &PeerSetProtocolNames, + notification_service: &mut Box, + notification_sinks: &mut Arc>>>, +) where AD: validator_discovery::AuthorityDiscovery + Send, { - let mut network_stream = network_stream.fuse(); - loop { - match network_stream.next().await { - None => return Err(Error::EventStreamConcluded), - Some(NetworkEvent::Dht(_)) => {}, - Some(NetworkEvent::NotificationStreamOpened { - remote: peer, - protocol, - role, - negotiated_fallback, - received_handshake: _, - }) => { - let role = ObservedRole::from(role); - let (peer_set, version) = { - let (peer_set, version) = - match peerset_protocol_names.try_get_protocol(&protocol) { - None => continue, - Some(p) => p, - }; - - if let Some(fallback) = negotiated_fallback { - match peerset_protocol_names.try_get_protocol(&fallback) { - None => { + match event { + NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx, .. } => { + // only accept peers whose role can be determined + let result = network_service + .peer_role(peer, handshake) + .map_or(ValidationResult::Reject, |_| ValidationResult::Accept); + let _ = result_tx.send(result); + }, + NotificationEvent::NotificationStreamOpened { + peer, + handshake, + negotiated_fallback, + .. + } => { + let role = match network_service.peer_role(peer, handshake) { + Some(role) => ObservedRole::from(role), + None => { + gum::debug!( + target: LOG_TARGET, + ?peer, + "Failed to determine peer role for validation protocol", + ); + return + }, + }; + + let (peer_set, version) = { + let (peer_set, version) = + (PeerSet::Validation, PeerSet::Validation.get_main_version()); + + if let Some(fallback) = negotiated_fallback { + match peerset_protocol_names.try_get_protocol(&fallback) { + None => { + gum::debug!( + target: LOG_TARGET, + fallback = &*fallback, + ?peer, + peerset = ?peer_set, + "Unknown fallback", + ); + + return + }, + Some((p2, v2)) => { + if p2 != peer_set { gum::debug!( target: LOG_TARGET, fallback = &*fallback, - ?peer, - ?peer_set, - "Unknown fallback", + fallback_peerset = ?p2, + peerset = ?peer_set, + "Fallback mismatched peer-set", ); - continue - }, - Some((p2, v2)) => { - if p2 != peer_set { - gum::debug!( - target: LOG_TARGET, - fallback = &*fallback, - fallback_peerset = ?p2, - protocol = &*protocol, - peerset = ?peer_set, - "Fallback mismatched peer-set", - ); - - continue - } - - (p2, v2) - }, - } - } else { - (peer_set, version) - } - }; - - gum::debug!( - target: LOG_TARGET, - action = "PeerConnected", - peer_set = ?peer_set, - version = %version, - peer = ?peer, - role = ?role - ); - - let local_view = { - let mut shared = shared.0.lock(); - let peer_map = match peer_set { - PeerSet::Validation => &mut shared.validation_peers, - PeerSet::Collation => &mut shared.collation_peers, - }; + return + } - match peer_map.entry(peer) { - hash_map::Entry::Occupied(_) => continue, - hash_map::Entry::Vacant(vacant) => { - vacant.insert(PeerData { view: View::default(), version }); + (p2, v2) }, } + } else { + (peer_set, version) + } + }; + // store the notification sink to `notification_sinks` so both `NetworkBridgeRx` + // and `NetworkBridgeTx` can send messages to the peer. + match notification_service.message_sink(&peer) { + Some(sink) => { + notification_sinks.lock().insert((peer_set, peer), sink); + }, + None => { + gum::warn!( + target: LOG_TARGET, + peerset = ?peer_set, + version = %version, + ?peer, + ?role, + "Message sink not available for peer", + ); + return + }, + } - metrics.on_peer_connected(peer_set, version); - metrics.note_peer_count(peer_set, version, peer_map.len()); - - shared.local_view.clone().unwrap_or(View::default()) - }; - - let maybe_authority = - authority_discovery_service.get_authority_ids_by_peer_id(peer).await; - - match peer_set { - PeerSet::Validation => { - dispatch_validation_events_to_all( - vec![ - NetworkBridgeEvent::PeerConnected( - peer, - role, - version, - maybe_authority, - ), - NetworkBridgeEvent::PeerViewChange(peer, View::default()), - ], - &mut sender, - &metrics, - ) - .await; - - match ValidationVersion::try_from(version) - .expect("try_get_protocol has already checked version is known; qed") - { - ValidationVersion::V1 => send_validation_message_v1( - &mut network_service, - vec![peer], - &peerset_protocol_names, - WireMessage::::ViewUpdate( - local_view, - ), - &metrics, - ), - ValidationVersion::VStaging => send_validation_message_vstaging( - &mut network_service, - vec![peer], - &peerset_protocol_names, - WireMessage::::ViewUpdate( - local_view, - ), - &metrics, - ), - ValidationVersion::V2 => send_validation_message_v2( - &mut network_service, - vec![peer], - &peerset_protocol_names, - WireMessage::::ViewUpdate( - local_view, - ), - &metrics, - ), - } - }, - PeerSet::Collation => { - dispatch_collation_events_to_all( - vec![ - NetworkBridgeEvent::PeerConnected( - peer, - role, - version, - maybe_authority, - ), - NetworkBridgeEvent::PeerViewChange(peer, View::default()), - ], - &mut sender, - ) - .await; - - match CollationVersion::try_from(version) - .expect("try_get_protocol has already checked version is known; qed") - { - CollationVersion::V1 => send_collation_message_v1( - &mut network_service, - vec![peer], - &peerset_protocol_names, - WireMessage::::ViewUpdate( - local_view, - ), - &metrics, - ), - CollationVersion::V2 => send_collation_message_v2( - &mut network_service, - vec![peer], - &peerset_protocol_names, - WireMessage::::ViewUpdate( - local_view, - ), - &metrics, - ), - } + gum::debug!( + target: LOG_TARGET, + action = "PeerConnected", + peer_set = ?peer_set, + version = %version, + peer = ?peer, + role = ?role + ); + + let local_view = { + let mut shared = shared.0.lock(); + let peer_map = &mut shared.validation_peers; + + match peer_map.entry(peer) { + hash_map::Entry::Occupied(_) => return, + hash_map::Entry::Vacant(vacant) => { + vacant.insert(PeerData { view: View::default(), version }); }, } - }, - Some(NetworkEvent::NotificationStreamClosed { remote: peer, protocol }) => { - let (peer_set, version) = match peerset_protocol_names.try_get_protocol(&protocol) { - None => continue, - Some(peer_set) => peer_set, - }; - gum::debug!( - target: LOG_TARGET, - action = "PeerDisconnected", - peer_set = ?peer_set, - peer = ?peer - ); + metrics.on_peer_connected(peer_set, version); + metrics.note_peer_count(peer_set, version, peer_map.len()); - let was_connected = { - let mut shared = shared.0.lock(); - let peer_map = match peer_set { - PeerSet::Validation => &mut shared.validation_peers, - PeerSet::Collation => &mut shared.collation_peers, - }; + shared.local_view.clone().unwrap_or(View::default()) + }; - let w = peer_map.remove(&peer).is_some(); + let maybe_authority = + authority_discovery_service.get_authority_ids_by_peer_id(peer).await; - metrics.on_peer_disconnected(peer_set, version); - metrics.note_peer_count(peer_set, version, peer_map.len()); + dispatch_validation_events_to_all( + vec![ + NetworkBridgeEvent::PeerConnected(peer, role, version, maybe_authority), + NetworkBridgeEvent::PeerViewChange(peer, View::default()), + ], + sender, + &metrics, + ) + .await; - w - }; + match ValidationVersion::try_from(version) + .expect("try_get_protocol has already checked version is known; qed") + { + ValidationVersion::V1 => send_validation_message_v1( + vec![peer], + WireMessage::::ViewUpdate(local_view), + metrics, + notification_sinks, + ), + ValidationVersion::VStaging => send_validation_message_vstaging( + vec![peer], + WireMessage::::ViewUpdate(local_view), + metrics, + notification_sinks, + ), + ValidationVersion::V2 => send_validation_message_v2( + vec![peer], + WireMessage::::ViewUpdate(local_view), + metrics, + notification_sinks, + ), + } + }, + NotificationEvent::NotificationStreamClosed { peer } => { + let (peer_set, version) = (PeerSet::Validation, PeerSet::Validation.get_main_version()); - if was_connected && version == peer_set.get_main_version() { - match peer_set { - PeerSet::Validation => - dispatch_validation_event_to_all( - NetworkBridgeEvent::PeerDisconnected(peer), - &mut sender, - &metrics, - ) - .await, - PeerSet::Collation => - dispatch_collation_event_to_all( - NetworkBridgeEvent::PeerDisconnected(peer), - &mut sender, - ) - .await, - } + gum::debug!( + target: LOG_TARGET, + action = "PeerDisconnected", + ?peer_set, + ?peer + ); + + let was_connected = { + let mut shared = shared.0.lock(); + let peer_map = &mut shared.validation_peers; + + let w = peer_map.remove(&peer).is_some(); + + metrics.on_peer_disconnected(peer_set, version); + metrics.note_peer_count(peer_set, version, peer_map.len()); + + w + }; + + notification_sinks.lock().remove(&(peer_set, peer)); + + if was_connected && version == peer_set.get_main_version() { + dispatch_validation_event_to_all( + NetworkBridgeEvent::PeerDisconnected(peer), + sender, + &metrics, + ) + .await; + } + }, + NotificationEvent::NotificationReceived { peer, notification } => { + let expected_versions = { + let mut versions = PerPeerSet::>::default(); + let shared = shared.0.lock(); + + if let Some(peer_data) = shared.validation_peers.get(&peer) { + versions[PeerSet::Validation] = Some(peer_data.version); } - }, - Some(NetworkEvent::NotificationsReceived { remote, messages }) => { - let expected_versions = { - let mut versions = PerPeerSet::>::default(); - let shared = shared.0.lock(); - if let Some(peer_data) = shared.validation_peers.get(&remote) { - versions[PeerSet::Validation] = Some(peer_data.version); - } - if let Some(peer_data) = shared.collation_peers.get(&remote) { - versions[PeerSet::Collation] = Some(peer_data.version); - } + versions + }; - versions + gum::trace!( + target: LOG_TARGET, + action = "PeerMessage", + peerset = ?PeerSet::Validation, + ?peer, + ); + + let (events, reports) = + if expected_versions[PeerSet::Validation] == Some(ValidationVersion::V1.into()) { + handle_peer_messages::( + peer, + PeerSet::Validation, + &mut shared.0.lock().validation_peers, + vec![notification.into()], + metrics, + ) + } else if expected_versions[PeerSet::Validation] == + Some(ValidationVersion::V2.into()) + { + handle_peer_messages::( + peer, + PeerSet::Validation, + &mut shared.0.lock().validation_peers, + vec![notification.into()], + metrics, + ) + } else if expected_versions[PeerSet::Validation] == + Some(ValidationVersion::VStaging.into()) + { + handle_peer_messages::( + peer, + PeerSet::Validation, + &mut shared.0.lock().validation_peers, + vec![notification.into()], + metrics, + ) + } else { + gum::warn!( + target: LOG_TARGET, + version = ?expected_versions[PeerSet::Validation], + "Major logic bug. Peer somehow has unsupported validation protocol version." + ); + + never!("Only versions 1 and 2 are supported; peer set connection checked above; qed"); + + // If a peer somehow triggers this, we'll disconnect them + // eventually. + (Vec::new(), vec![UNCONNECTED_PEERSET_COST]) }; - // non-decoded, but version-checked validation messages. - let v_messages: Result, _> = messages - .iter() - .filter_map(|(protocol, msg_bytes)| { - // version doesn't matter because we always receive on the 'correct' - // protocol name, not the negotiated fallback. - let (peer_set, version) = - peerset_protocol_names.try_get_protocol(protocol)?; - gum::trace!( - target: LOG_TARGET, - ?peer_set, - ?protocol, - ?version, - "Received notification" - ); + for report in reports { + network_service.report_peer(peer, report.into()); + } - if peer_set == PeerSet::Validation { - if expected_versions[PeerSet::Validation].is_none() { - return Some(Err(UNCONNECTED_PEERSET_COST)) - } + dispatch_validation_events_to_all(events, sender, &metrics).await; + }, + } +} + +/// Handle notification event received over the collation protocol. +async fn handle_collation_message( + event: NotificationEvent, + network_service: &mut impl Network, + sender: &mut impl overseer::NetworkBridgeRxSenderTrait, + authority_discovery_service: &mut AD, + metrics: &Metrics, + shared: &Shared, + peerset_protocol_names: &PeerSetProtocolNames, + notification_service: &mut Box, + notification_sinks: &mut Arc>>>, +) where + AD: validator_discovery::AuthorityDiscovery + Send, +{ + match event { + NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx, .. } => { + // only accept peers whose role can be determined + let result = network_service + .peer_role(peer, handshake) + .map_or(ValidationResult::Reject, |_| ValidationResult::Accept); + let _ = result_tx.send(result); + }, + NotificationEvent::NotificationStreamOpened { + peer, + handshake, + negotiated_fallback, + .. + } => { + let role = match network_service.peer_role(peer, handshake) { + Some(role) => ObservedRole::from(role), + None => { + gum::debug!( + target: LOG_TARGET, + ?peer, + "Failed to determine peer role for validation protocol", + ); + return + }, + }; + + let (peer_set, version) = { + let (peer_set, version) = + (PeerSet::Collation, PeerSet::Collation.get_main_version()); + + if let Some(fallback) = negotiated_fallback { + match peerset_protocol_names.try_get_protocol(&fallback) { + None => { + gum::debug!( + target: LOG_TARGET, + fallback = &*fallback, + ?peer, + ?peer_set, + "Unknown fallback", + ); + + return + }, + Some((p2, v2)) => { + if p2 != peer_set { + gum::debug!( + target: LOG_TARGET, + fallback = &*fallback, + fallback_peerset = ?p2, + peerset = ?peer_set, + "Fallback mismatched peer-set", + ); - Some(Ok(msg_bytes.clone())) - } else { - None - } - }) - .collect(); + return + } - let v_messages = match v_messages { - Err(rep) => { - gum::debug!(target: LOG_TARGET, action = "ReportPeer"); - network_service.report_peer(remote, rep.into()); + (p2, v2) + }, + } + } else { + (peer_set, version) + } + }; + + // store the notification sink to `notification_sinks` so both `NetworkBridgeRx` + // and `NetworkBridgeTx` can send messages to the peer. + match notification_service.message_sink(&peer) { + Some(sink) => { + notification_sinks.lock().insert((peer_set, peer), sink); + }, + None => { + gum::warn!( + target: LOG_TARGET, + peer_set = ?peer_set, + version = %version, + peer = ?peer, + role = ?role, + "Message sink not available for peer", + ); + return + }, + } - continue + gum::debug!( + target: LOG_TARGET, + action = "PeerConnected", + peer_set = ?peer_set, + version = %version, + peer = ?peer, + role = ?role + ); + + let local_view = { + let mut shared = shared.0.lock(); + let peer_map = &mut shared.collation_peers; + + match peer_map.entry(peer) { + hash_map::Entry::Occupied(_) => return, + hash_map::Entry::Vacant(vacant) => { + vacant.insert(PeerData { view: View::default(), version }); }, - Ok(v) => v, - }; + } - // non-decoded, but version-checked collation messages. - let c_messages: Result, _> = messages - .iter() - .filter_map(|(protocol, msg_bytes)| { - // version doesn't matter because we always receive on the 'correct' - // protocol name, not the negotiated fallback. - let (peer_set, _version) = - peerset_protocol_names.try_get_protocol(protocol)?; - - if peer_set == PeerSet::Collation { - if expected_versions[PeerSet::Collation].is_none() { - return Some(Err(UNCONNECTED_PEERSET_COST)) - } + metrics.on_peer_connected(peer_set, version); + metrics.note_peer_count(peer_set, version, peer_map.len()); - Some(Ok(msg_bytes.clone())) - } else { - None - } - }) - .collect(); + shared.local_view.clone().unwrap_or(View::default()) + }; - let c_messages = match c_messages { - Err(rep) => { - gum::debug!(target: LOG_TARGET, action = "ReportPeer"); - network_service.report_peer(remote, rep.into()); + let maybe_authority = + authority_discovery_service.get_authority_ids_by_peer_id(peer).await; - continue - }, - Ok(v) => v, - }; + dispatch_collation_events_to_all( + vec![ + NetworkBridgeEvent::PeerConnected(peer, role, version, maybe_authority), + NetworkBridgeEvent::PeerViewChange(peer, View::default()), + ], + sender, + ) + .await; - if v_messages.is_empty() && c_messages.is_empty() { - continue - } + match CollationVersion::try_from(version) + .expect("try_get_protocol has already checked version is known; qed") + { + CollationVersion::V1 => send_collation_message_v1( + vec![peer], + WireMessage::::ViewUpdate(local_view), + metrics, + notification_sinks, + ), + CollationVersion::V2 => send_collation_message_v2( + vec![peer], + WireMessage::::ViewUpdate(local_view), + metrics, + notification_sinks, + ), + } + }, + NotificationEvent::NotificationStreamClosed { peer } => { + let (peer_set, version) = (PeerSet::Collation, PeerSet::Collation.get_main_version()); - gum::trace!( - target: LOG_TARGET, - action = "PeerMessages", - peer = ?remote, - num_validation_messages = %v_messages.len(), - num_collation_messages = %c_messages.len() - ); + gum::debug!( + target: LOG_TARGET, + action = "PeerDisconnected", + ?peer_set, + ?peer + ); - if !v_messages.is_empty() { - let (events, reports) = if expected_versions[PeerSet::Validation] == - Some(ValidationVersion::V1.into()) - { - handle_peer_messages::( - remote, - PeerSet::Validation, - &mut shared.0.lock().validation_peers, - v_messages, - &metrics, - ) - } else if expected_versions[PeerSet::Validation] == - Some(ValidationVersion::V2.into()) - { - handle_peer_messages::( - remote, - PeerSet::Validation, - &mut shared.0.lock().validation_peers, - v_messages, - &metrics, - ) - } else if expected_versions[PeerSet::Validation] == - Some(ValidationVersion::VStaging.into()) - { - handle_peer_messages::( - remote, - PeerSet::Validation, - &mut shared.0.lock().validation_peers, - v_messages, - &metrics, - ) - } else { - gum::warn!( - target: LOG_TARGET, - version = ?expected_versions[PeerSet::Validation], - "Major logic bug. Peer somehow has unsupported validation protocol version." - ); + let was_connected = { + let mut shared = shared.0.lock(); + let peer_map = &mut shared.collation_peers; - never!("Only versions 1 and 2 are supported; peer set connection checked above; qed"); + let w = peer_map.remove(&peer).is_some(); - // If a peer somehow triggers this, we'll disconnect them - // eventually. - (Vec::new(), vec![UNCONNECTED_PEERSET_COST]) - }; + metrics.on_peer_disconnected(peer_set, version); + metrics.note_peer_count(peer_set, version, peer_map.len()); - for report in reports { - network_service.report_peer(remote, report.into()); - } + w + }; - dispatch_validation_events_to_all(events, &mut sender, &metrics).await; + notification_sinks.lock().remove(&(peer_set, peer)); + + if was_connected && version == peer_set.get_main_version() { + dispatch_collation_event_to_all(NetworkBridgeEvent::PeerDisconnected(peer), sender) + .await; + } + }, + NotificationEvent::NotificationReceived { peer, notification } => { + let expected_versions = { + let mut versions = PerPeerSet::>::default(); + let shared = shared.0.lock(); + + if let Some(peer_data) = shared.collation_peers.get(&peer) { + versions[PeerSet::Collation] = Some(peer_data.version); } - if !c_messages.is_empty() { - let (events, reports) = if expected_versions[PeerSet::Collation] == - Some(CollationVersion::V1.into()) - { - handle_peer_messages::( - remote, - PeerSet::Collation, - &mut shared.0.lock().collation_peers, - c_messages, - &metrics, - ) - } else if expected_versions[PeerSet::Collation] == - Some(CollationVersion::V2.into()) - { - handle_peer_messages::( - remote, - PeerSet::Collation, - &mut shared.0.lock().collation_peers, - c_messages, - &metrics, - ) - } else { - gum::warn!( - target: LOG_TARGET, - version = ?expected_versions[PeerSet::Collation], - "Major logic bug. Peer somehow has unsupported collation protocol version." - ); + versions + }; - never!("Only versions 1 and 2 are supported; peer set connection checked above; qed"); + gum::trace!( + target: LOG_TARGET, + action = "PeerMessage", + peerset = ?PeerSet::Collation, + ?peer, + ); + + let (events, reports) = + if expected_versions[PeerSet::Collation] == Some(CollationVersion::V1.into()) { + handle_peer_messages::( + peer, + PeerSet::Collation, + &mut shared.0.lock().collation_peers, + vec![notification.into()], + metrics, + ) + } else if expected_versions[PeerSet::Collation] == Some(CollationVersion::V2.into()) + { + handle_peer_messages::( + peer, + PeerSet::Collation, + &mut shared.0.lock().collation_peers, + vec![notification.into()], + metrics, + ) + } else { + gum::warn!( + target: LOG_TARGET, + version = ?expected_versions[PeerSet::Collation], + "Major logic bug. Peer somehow has unsupported collation protocol version." + ); - // If a peer somehow triggers this, we'll disconnect them - // eventually. - (Vec::new(), vec![UNCONNECTED_PEERSET_COST]) - }; + never!("Only versions 1 and 2 are supported; peer set connection checked above; qed"); - for report in reports { - network_service.report_peer(remote, report.into()); - } + // If a peer somehow triggers this, we'll disconnect them + // eventually. + (Vec::new(), vec![UNCONNECTED_PEERSET_COST]) + }; - dispatch_collation_events_to_all(events, &mut sender).await; - } + for report in reports { + network_service.report_peer(peer, report.into()); + } + + dispatch_collation_events_to_all(events, sender).await; + }, + } +} + +async fn handle_network_messages( + mut sender: impl overseer::NetworkBridgeRxSenderTrait, + mut network_service: impl Network, + mut authority_discovery_service: AD, + metrics: Metrics, + shared: Shared, + peerset_protocol_names: PeerSetProtocolNames, + mut validation_service: Box, + mut collation_service: Box, + mut notification_sinks: Arc>>>, +) -> Result<(), Error> +where + AD: validator_discovery::AuthorityDiscovery + Send, +{ + loop { + futures::select! { + event = validation_service.next_event().fuse() => match event { + Some(event) => handle_validation_message( + event, + &mut network_service, + &mut sender, + &mut authority_discovery_service, + &metrics, + &shared, + &peerset_protocol_names, + &mut validation_service, + &mut notification_sinks, + ).await, + None => return Err(Error::EventStreamConcluded), }, + event = collation_service.next_event().fuse() => match event { + Some(event) => handle_collation_message( + event, + &mut network_service, + &mut sender, + &mut authority_discovery_service, + &metrics, + &shared, + &peerset_protocol_names, + &mut collation_service, + &mut notification_sinks, + ).await, + None => return Err(Error::EventStreamConcluded), + } } } } @@ -593,17 +731,15 @@ where } #[overseer::contextbounds(NetworkBridgeRx, prefix = self::overseer)] -async fn run_incoming_orchestra_signals( +async fn run_incoming_orchestra_signals( mut ctx: Context, - mut network_service: N, mut authority_discovery_service: AD, shared: Shared, sync_oracle: Box, metrics: Metrics, - peerset_protocol_names: PeerSetProtocolNames, + notification_sinks: Arc>>>, ) -> Result<(), Error> where - N: Network, AD: validator_discovery::AuthorityDiscovery + Clone, { // This is kept sorted, descending, by block number. @@ -695,13 +831,12 @@ where mode = Mode::Active; update_our_view( - &mut network_service, &mut ctx, &live_heads, &shared, finalized_number, &metrics, - &peerset_protocol_names, + ¬ification_sinks, ); } } @@ -735,7 +870,6 @@ where async fn run_network_in( bridge: NetworkBridgeRx, mut ctx: Context, - network_stream: BoxStream<'static, NetworkEvent>, ) -> Result<(), Error> where N: Network, @@ -748,16 +882,21 @@ where sync_oracle, shared, peerset_protocol_names, + validation_service, + collation_service, + notification_sinks, } = bridge; let (task, network_event_handler) = handle_network_messages( ctx.sender().clone(), network_service.clone(), - network_stream, authority_discovery_service.clone(), metrics.clone(), shared.clone(), peerset_protocol_names.clone(), + validation_service, + collation_service, + notification_sinks.clone(), ) .remote_handle(); @@ -766,12 +905,11 @@ where let orchestra_signal_handler = run_incoming_orchestra_signals( ctx, - network_service, authority_discovery_service, shared, sync_oracle, metrics, - peerset_protocol_names, + notification_sinks, ); futures::pin_mut!(orchestra_signal_handler); @@ -791,17 +929,14 @@ fn construct_view( } #[overseer::contextbounds(NetworkBridgeRx, prefix = self::overseer)] -fn update_our_view( - net: &mut Net, +fn update_our_view( ctx: &mut Context, live_heads: &[ActivatedLeaf], shared: &Shared, finalized_number: BlockNumber, metrics: &Metrics, - peerset_protocol_names: &PeerSetProtocolNames, -) where - Net: Network, -{ + notification_sinks: &Arc>>>, +) { let new_view = construct_view(live_heads.iter().map(|v| v.hash), finalized_number); let (validation_peers, collation_peers) = { @@ -849,43 +984,38 @@ fn update_our_view( filter_by_peer_version(&validation_peers, ValidationVersion::VStaging.into()); send_validation_message_v1( - net, v1_validation_peers, - peerset_protocol_names, WireMessage::ViewUpdate(new_view.clone()), metrics, + notification_sinks, ); send_collation_message_v1( - net, v1_collation_peers, - peerset_protocol_names, WireMessage::ViewUpdate(new_view.clone()), metrics, + notification_sinks, ); send_validation_message_v2( - net, v2_validation_peers, - peerset_protocol_names, WireMessage::ViewUpdate(new_view.clone()), metrics, + notification_sinks, ); send_collation_message_v2( - net, v2_collation_peers, - peerset_protocol_names, WireMessage::ViewUpdate(new_view.clone()), metrics, + notification_sinks, ); send_validation_message_vstaging( - net, vstaging_validation_peers, - peerset_protocol_names, WireMessage::ViewUpdate(new_view.clone()), metrics, + notification_sinks, ); let our_view = OurView::new( diff --git a/polkadot/node/network/bridge/src/rx/tests.rs b/polkadot/node/network/bridge/src/rx/tests.rs index f784e78a7f2..e0b86feb644 100644 --- a/polkadot/node/network/bridge/src/rx/tests.rs +++ b/polkadot/node/network/bridge/src/rx/tests.rs @@ -15,7 +15,7 @@ // along with Polkadot. If not, see . use super::*; -use futures::{channel::oneshot, executor, stream::BoxStream}; +use futures::{channel::oneshot, executor}; use overseer::jaeger; use polkadot_node_network_protocol::{self as net_protocol, OurView}; use polkadot_node_subsystem::messages::NetworkBridgeEvent; @@ -26,10 +26,13 @@ use parking_lot::Mutex; use std::{ collections::HashSet, sync::atomic::{AtomicBool, Ordering}, - task::Poll, }; -use sc_network::{Event as NetworkEvent, IfDisconnected, ProtocolName, ReputationChange}; +use sc_network::{ + service::traits::{Direction, MessageSink, NotificationService}, + IfDisconnected, Multiaddr, ObservedRole as SubstrateObservedRole, ProtocolName, + ReputationChange, Roles, +}; use polkadot_node_network_protocol::{ peer_set::PeerSetProtocolNames, @@ -47,9 +50,8 @@ use polkadot_node_subsystem_test_helpers::{ mock::new_leaf, SingleItemSink, SingleItemStream, TestSubsystemContextHandle, }; use polkadot_node_subsystem_util::metered; -use polkadot_primitives::{AuthorityDiscoveryId, CandidateHash, Hash}; +use polkadot_primitives::{AuthorityDiscoveryId, Hash}; -use sc_network::Multiaddr; use sp_keyring::Sr25519Keyring; use crate::{network::Network, validator_discovery::AuthorityDiscovery}; @@ -64,10 +66,9 @@ pub enum NetworkAction { WriteNotification(PeerId, PeerSet, Vec), } -// The subsystem's view of the network - only supports a single call to `event_stream`. +// The subsystem's view of the network. #[derive(Clone)] struct TestNetwork { - net_events: Arc>>>, action_tx: Arc>>, protocol_names: Arc, } @@ -79,37 +80,42 @@ struct TestAuthorityDiscovery; // of `NetworkAction`s. struct TestNetworkHandle { action_rx: metered::UnboundedMeteredReceiver, - net_tx: SingleItemSink, - protocol_names: PeerSetProtocolNames, + validation_tx: SingleItemSink, + collation_tx: SingleItemSink, } fn new_test_network( protocol_names: PeerSetProtocolNames, -) -> (TestNetwork, TestNetworkHandle, TestAuthorityDiscovery) { - let (net_tx, net_rx) = polkadot_node_subsystem_test_helpers::single_item_sink(); +) -> ( + TestNetwork, + TestNetworkHandle, + TestAuthorityDiscovery, + Box, + Box, +) { let (action_tx, action_rx) = metered::unbounded(); + let (validation_tx, validation_rx) = polkadot_node_subsystem_test_helpers::single_item_sink(); + let (collation_tx, collation_rx) = polkadot_node_subsystem_test_helpers::single_item_sink(); + let action_tx = Arc::new(Mutex::new(action_tx)); ( TestNetwork { - net_events: Arc::new(Mutex::new(Some(net_rx))), - action_tx: Arc::new(Mutex::new(action_tx)), + action_tx: action_tx.clone(), protocol_names: Arc::new(protocol_names.clone()), }, - TestNetworkHandle { action_rx, net_tx, protocol_names }, + TestNetworkHandle { action_rx, validation_tx, collation_tx }, TestAuthorityDiscovery, + Box::new(TestNotificationService::new( + PeerSet::Validation, + action_tx.clone(), + validation_rx, + )), + Box::new(TestNotificationService::new(PeerSet::Collation, action_tx, collation_rx)), ) } #[async_trait] impl Network for TestNetwork { - fn event_stream(&mut self) -> BoxStream<'static, NetworkEvent> { - self.net_events - .lock() - .take() - .expect("Subsystem made more than one call to `event_stream`") - .boxed() - } - async fn set_reserved_peers( &mut self, _protocol: ProtocolName, @@ -143,7 +149,8 @@ impl Network for TestNetwork { } fn disconnect_peer(&self, who: PeerId, protocol: ProtocolName) { - let (peer_set, _) = self.protocol_names.try_get_protocol(&protocol).unwrap(); + let (peer_set, version) = self.protocol_names.try_get_protocol(&protocol).unwrap(); + assert_eq!(version, peer_set.get_main_version()); self.action_tx .lock() @@ -151,13 +158,10 @@ impl Network for TestNetwork { .unwrap(); } - fn write_notification(&self, who: PeerId, protocol: ProtocolName, message: Vec) { - let (peer_set, _) = self.protocol_names.try_get_protocol(&protocol).unwrap(); - - self.action_tx - .lock() - .unbounded_send(NetworkAction::WriteNotification(who, peer_set, message)) - .unwrap(); + fn peer_role(&self, _peer_id: PeerId, handshake: Vec) -> Option { + Roles::decode_all(&mut &handshake[..]) + .ok() + .and_then(|role| Some(SubstrateObservedRole::from(role))) } } @@ -201,35 +205,85 @@ impl TestNetworkHandle { peer_set: PeerSet, role: ObservedRole, ) { - let protocol_version = ProtocolVersion::from(protocol_version); - self.send_network_event(NetworkEvent::NotificationStreamOpened { - remote: peer, - protocol: self.protocol_names.get_name(peer_set, protocol_version), - negotiated_fallback: None, - role: role.into(), - received_handshake: vec![], - }) - .await; + fn observed_role_to_handshake(role: &ObservedRole) -> Vec { + match role { + &ObservedRole::Light => Roles::LIGHT.encode(), + &ObservedRole::Authority => Roles::AUTHORITY.encode(), + &ObservedRole::Full => Roles::FULL.encode(), + } + } + + // because of how protocol negotiation works, if two peers support at least one common + // protocol, the protocol is negotiated over the main protocol (`ValidationVersion::V2`) but + // if either one of the peers used a fallback protocol for the negotiation (meaning they + // don't support the main protocol but some older version of it ), `negotiated_fallback` is + // set to that protocol. + let negotiated_fallback = match protocol_version { + ValidationVersion::V2 => None, + ValidationVersion::V1 => match peer_set { + PeerSet::Validation => Some(ProtocolName::from("/polkadot/validation/1")), + PeerSet::Collation => Some(ProtocolName::from("/polkadot/collation/1")), + }, + ValidationVersion::VStaging => match peer_set { + PeerSet::Validation => Some(ProtocolName::from("/polkadot/validation/3")), + PeerSet::Collation => unreachable!(), + }, + }; + + match peer_set { + PeerSet::Validation => { + self.validation_tx + .send(NotificationEvent::NotificationStreamOpened { + peer, + direction: Direction::Inbound, + handshake: observed_role_to_handshake(&role), + negotiated_fallback, + }) + .await + .expect("subsystem concluded early"); + }, + PeerSet::Collation => { + self.collation_tx + .send(NotificationEvent::NotificationStreamOpened { + peer, + direction: Direction::Inbound, + handshake: observed_role_to_handshake(&role), + negotiated_fallback, + }) + .await + .expect("subsystem concluded early"); + }, + } } async fn disconnect_peer(&mut self, peer: PeerId, peer_set: PeerSet) { - self.send_network_event(NetworkEvent::NotificationStreamClosed { - remote: peer, - protocol: self.protocol_names.get_main_name(peer_set), - }) - .await; + match peer_set { + PeerSet::Validation => self + .validation_tx + .send(NotificationEvent::NotificationStreamClosed { peer }) + .await + .expect("subsystem concluded early"), + PeerSet::Collation => self + .collation_tx + .send(NotificationEvent::NotificationStreamClosed { peer }) + .await + .expect("subsystem concluded early"), + } } async fn peer_message(&mut self, peer: PeerId, peer_set: PeerSet, message: Vec) { - self.send_network_event(NetworkEvent::NotificationsReceived { - remote: peer, - messages: vec![(self.protocol_names.get_main_name(peer_set), message.into())], - }) - .await; - } - - async fn send_network_event(&mut self, event: NetworkEvent) { - self.net_tx.send(event).await.expect("subsystem concluded early"); + match peer_set { + PeerSet::Validation => self + .validation_tx + .send(NotificationEvent::NotificationReceived { peer, notification: message }) + .await + .expect("subsystem concluded early"), + PeerSet::Collation => self + .collation_tx + .send(NotificationEvent::NotificationReceived { peer, notification: message }) + .await + .expect("subsystem concluded early"), + } } } @@ -240,6 +294,121 @@ fn assert_network_actions_contains(actions: &[NetworkAction], action: &NetworkAc } } +struct TestNotificationService { + peer_set: PeerSet, + action_tx: Arc>>, + rx: SingleItemStream, +} + +impl std::fmt::Debug for TestNotificationService { + fn fmt(&self, _: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + Ok(()) + } +} + +impl TestNotificationService { + pub fn new( + peer_set: PeerSet, + action_tx: Arc>>, + rx: SingleItemStream, + ) -> Self { + Self { peer_set, action_tx, rx } + } +} + +struct TestMessageSink { + peer: PeerId, + peer_set: PeerSet, + action_tx: Arc>>, +} + +impl TestMessageSink { + fn new( + peer: PeerId, + peer_set: PeerSet, + action_tx: Arc>>, + ) -> TestMessageSink { + Self { peer, peer_set, action_tx } + } +} + +#[async_trait::async_trait] +impl MessageSink for TestMessageSink { + fn send_sync_notification(&self, notification: Vec) { + self.action_tx + .lock() + .unbounded_send(NetworkAction::WriteNotification( + self.peer, + self.peer_set, + notification, + )) + .unwrap(); + } + + async fn send_async_notification( + &self, + _notification: Vec, + ) -> Result<(), sc_network::error::Error> { + unimplemented!(); + } +} + +#[async_trait::async_trait] +impl NotificationService for TestNotificationService { + /// Instruct `Notifications` to open a new substream for `peer`. + async fn open_substream(&mut self, _peer: PeerId) -> Result<(), ()> { + unimplemented!(); + } + + /// Instruct `Notifications` to close substream for `peer`. + async fn close_substream(&mut self, _peer: PeerId) -> Result<(), ()> { + unimplemented!(); + } + + /// Send synchronous `notification` to `peer`. + fn send_sync_notification(&self, _peer: &PeerId, _notification: Vec) { + unimplemented!(); + } + + /// Send asynchronous `notification` to `peer`, allowing sender to exercise backpressure. + async fn send_async_notification( + &self, + _peer: &PeerId, + _notification: Vec, + ) -> Result<(), sc_network::error::Error> { + unimplemented!(); + } + + /// Set handshake for the notification protocol replacing the old handshake. + async fn set_handshake(&mut self, _handshake: Vec) -> Result<(), ()> { + unimplemented!(); + } + + fn try_set_handshake(&mut self, _handshake: Vec) -> Result<(), ()> { + unimplemented!(); + } + + /// Get next event from the `Notifications` event stream. + async fn next_event(&mut self) -> Option { + self.rx.next().await + } + + // Clone [`NotificationService`] + fn clone(&mut self) -> Result, ()> { + unimplemented!(); + } + + /// Get protocol name. + fn protocol(&self) -> &ProtocolName { + unimplemented!(); + } + + /// Get notification sink of the peer. + fn message_sink(&self, peer: &PeerId) -> Option> { + Some(Box::new(TestMessageSink::new(*peer, self.peer_set, self.action_tx.clone()))) + } +} + #[derive(Clone)] struct TestSyncOracle { is_major_syncing: Arc, @@ -335,10 +504,11 @@ fn test_harness>( let peerset_protocol_names = PeerSetProtocolNames::new(genesis_hash, fork_id); let pool = sp_core::testing::TaskExecutor::new(); - let (mut network, network_handle, discovery) = new_test_network(peerset_protocol_names.clone()); + let (network, network_handle, discovery, validation_service, collation_service) = + new_test_network(peerset_protocol_names.clone()); let (context, virtual_overseer) = polkadot_node_subsystem_test_helpers::make_subsystem_context(pool); - let network_stream = network.event_stream(); + let notification_sinks = Arc::new(Mutex::new(HashMap::new())); let shared = Shared::default(); let bridge = NetworkBridgeRx { @@ -348,9 +518,12 @@ fn test_harness>( sync_oracle, shared: shared.clone(), peerset_protocol_names, + validation_service, + collation_service, + notification_sinks, }; - let network_bridge = run_network_in(bridge, context, network_stream) + let network_bridge = run_network_in(bridge, context) .map_err(|_| panic!("subsystem execution failed")) .map(|_| ()); @@ -942,8 +1115,6 @@ fn relays_collation_protocol_messages() { .await; } - // peer A gets reported for sending a collation message. - let collator_protocol_message = protocol_v1::CollatorProtocolMessage::Declare( Sr25519Keyring::Alice.public().into(), Default::default(), @@ -953,19 +1124,23 @@ fn relays_collation_protocol_messages() { let message_v1 = protocol_v1::CollationProtocol::CollatorProtocol(collator_protocol_message.clone()); - network_handle - .peer_message( - peer_a, - PeerSet::Collation, - WireMessage::ProtocolMessage(message_v1.clone()).encode(), - ) - .await; - - let actions = network_handle.next_network_actions(3).await; - assert_network_actions_contains( - &actions, - &NetworkAction::ReputationChange(peer_a, UNCONNECTED_PEERSET_COST.into()), - ); + // peer A gets reported for sending a collation message. + // NOTE: this is not possible since peer A cannot send + // a collation message if it has not opened a collation protocol + + // network_handle + // .peer_message( + // peer_a, + // PeerSet::Collation, + // WireMessage::ProtocolMessage(message_v1.clone()).encode(), + // ) + // .await; + + // let actions = network_handle.next_network_actions(3).await; + // assert_network_actions_contains( + // &actions, + // &NetworkAction::ReputationChange(peer_a, UNCONNECTED_PEERSET_COST.into()), + // ); // peer B has the message relayed. @@ -1212,7 +1387,7 @@ fn our_view_updates_decreasing_order_and_limited_to_max() { fn network_protocol_versioning_view_update() { let (oracle, handle) = make_sync_oracle(false); test_harness(Box::new(oracle), |test_harness| async move { - let TestHarness { mut network_handle, mut virtual_overseer, .. } = test_harness; + let TestHarness { mut network_handle, mut virtual_overseer, shared } = test_harness; let peer_ids: Vec<_> = (0..4).map(|_| PeerId::random()).collect(); let peers = [ @@ -1231,12 +1406,22 @@ fn network_protocol_versioning_view_update() { handle.await_mode_switch().await; + let mut total_validation_peers = 0; + let mut total_collation_peers = 0; + for &(peer_id, peer_set, version) in &peers { network_handle .connect_peer(peer_id, version, peer_set, ObservedRole::Full) .await; + + match peer_set { + PeerSet::Validation => total_validation_peers += 1, + PeerSet::Collation => total_collation_peers += 1, + } } + await_peer_connections(&shared, total_validation_peers, total_collation_peers).await; + let view = view![head]; let actions = network_handle.next_network_actions(4).await; @@ -1264,15 +1449,19 @@ fn network_protocol_versioning_view_update() { #[test] fn network_protocol_versioning_subsystem_msg() { + use polkadot_primitives::CandidateHash; + use std::task::Poll; + let (oracle, _handle) = make_sync_oracle(false); test_harness(Box::new(oracle), |test_harness| async move { - let TestHarness { mut network_handle, mut virtual_overseer, .. } = test_harness; + let TestHarness { mut network_handle, mut virtual_overseer, shared } = test_harness; let peer = PeerId::random(); network_handle .connect_peer(peer, ValidationVersion::V2, PeerSet::Validation, ObservedRole::Full) .await; + await_peer_connections(&shared, 1, 0).await; // bridge will inform about all connected peers. { diff --git a/polkadot/node/network/bridge/src/tx/mod.rs b/polkadot/node/network/bridge/src/tx/mod.rs index 5f222ad59c7..bdcd1574e33 100644 --- a/polkadot/node/network/bridge/src/tx/mod.rs +++ b/polkadot/node/network/bridge/src/tx/mod.rs @@ -32,7 +32,7 @@ use polkadot_node_subsystem::{ /// To be passed to [`FullNetworkConfiguration::add_notification_protocol`](). pub use polkadot_node_network_protocol::peer_set::{peer_sets_info, IsAuthority}; use polkadot_node_network_protocol::request_response::Requests; -use sc_network::ReputationChange; +use sc_network::{MessageSink, ReputationChange}; use crate::validator_discovery; @@ -60,6 +60,7 @@ pub struct NetworkBridgeTx { metrics: Metrics, req_protocol_names: ReqProtocolNames, peerset_protocol_names: PeerSetProtocolNames, + notification_sinks: Arc>>>, } impl NetworkBridgeTx { @@ -74,6 +75,7 @@ impl NetworkBridgeTx { metrics: Metrics, req_protocol_names: ReqProtocolNames, peerset_protocol_names: PeerSetProtocolNames, + notification_sinks: Arc>>>, ) -> Self { Self { network_service, @@ -81,6 +83,7 @@ impl NetworkBridgeTx { metrics, req_protocol_names, peerset_protocol_names, + notification_sinks, } } } @@ -107,6 +110,7 @@ async fn handle_subsystem_messages( metrics: Metrics, req_protocol_names: ReqProtocolNames, peerset_protocol_names: PeerSetProtocolNames, + notification_sinks: Arc>>>, ) -> Result<(), Error> where N: Network, @@ -130,6 +134,7 @@ where &metrics, &req_protocol_names, &peerset_protocol_names, + ¬ification_sinks, ) .await; }, @@ -140,13 +145,14 @@ where #[overseer::contextbounds(NetworkBridgeTx, prefix = self::overseer)] async fn handle_incoming_subsystem_communication( _ctx: &mut Context, - mut network_service: N, + network_service: N, validator_discovery: &mut validator_discovery::Service, mut authority_discovery_service: AD, msg: NetworkBridgeTxMessage, metrics: &Metrics, req_protocol_names: &ReqProtocolNames, peerset_protocol_names: &PeerSetProtocolNames, + notification_sinks: &Arc>>>, ) -> (N, AD) where N: Network, @@ -194,25 +200,22 @@ where match msg { Versioned::V1(msg) => send_validation_message_v1( - &mut network_service, peers, - peerset_protocol_names, WireMessage::ProtocolMessage(msg), &metrics, + notification_sinks, ), Versioned::VStaging(msg) => send_validation_message_vstaging( - &mut network_service, peers, - peerset_protocol_names, WireMessage::ProtocolMessage(msg), &metrics, + notification_sinks, ), Versioned::V2(msg) => send_validation_message_v2( - &mut network_service, peers, - peerset_protocol_names, WireMessage::ProtocolMessage(msg), &metrics, + notification_sinks, ), } }, @@ -227,25 +230,22 @@ where for (peers, msg) in msgs { match msg { Versioned::V1(msg) => send_validation_message_v1( - &mut network_service, peers, - peerset_protocol_names, WireMessage::ProtocolMessage(msg), &metrics, + notification_sinks, ), Versioned::VStaging(msg) => send_validation_message_vstaging( - &mut network_service, peers, - peerset_protocol_names, WireMessage::ProtocolMessage(msg), &metrics, + notification_sinks, ), Versioned::V2(msg) => send_validation_message_v2( - &mut network_service, peers, - peerset_protocol_names, WireMessage::ProtocolMessage(msg), &metrics, + notification_sinks, ), } } @@ -259,18 +259,16 @@ where match msg { Versioned::V1(msg) => send_collation_message_v1( - &mut network_service, peers, - peerset_protocol_names, WireMessage::ProtocolMessage(msg), &metrics, + notification_sinks, ), Versioned::V2(msg) | Versioned::VStaging(msg) => send_collation_message_v2( - &mut network_service, peers, - peerset_protocol_names, WireMessage::ProtocolMessage(msg), &metrics, + notification_sinks, ), } }, @@ -284,18 +282,16 @@ where for (peers, msg) in msgs { match msg { Versioned::V1(msg) => send_collation_message_v1( - &mut network_service, peers, - peerset_protocol_names, WireMessage::ProtocolMessage(msg), &metrics, + notification_sinks, ), Versioned::V2(msg) | Versioned::VStaging(msg) => send_collation_message_v2( - &mut network_service, peers, - peerset_protocol_names, WireMessage::ProtocolMessage(msg), &metrics, + notification_sinks, ), } } @@ -389,6 +385,7 @@ where metrics, req_protocol_names, peerset_protocol_names, + notification_sinks, } = bridge; handle_subsystem_messages( @@ -398,6 +395,7 @@ where metrics, req_protocol_names, peerset_protocol_names, + notification_sinks, ) .await?; diff --git a/polkadot/node/network/bridge/src/tx/tests.rs b/polkadot/node/network/bridge/src/tx/tests.rs index 1a2d9a7a424..c3cf0f322f6 100644 --- a/polkadot/node/network/bridge/src/tx/tests.rs +++ b/polkadot/node/network/bridge/src/tx/tests.rs @@ -15,15 +15,18 @@ // along with Polkadot. If not, see . use super::*; -use futures::{executor, stream::BoxStream}; +use futures::executor; use polkadot_node_subsystem_util::TimeoutExt; use async_trait::async_trait; use parking_lot::Mutex; use std::collections::HashSet; -use sc_network::{Event as NetworkEvent, IfDisconnected, ProtocolName, ReputationChange}; +use sc_network::{ + IfDisconnected, ObservedRole as SubstrateObservedRole, ProtocolName, ReputationChange, Roles, +}; +use parity_scale_codec::DecodeAll; use polkadot_node_network_protocol::{ peer_set::{PeerSetProtocolNames, ValidationVersion}, request_response::{outgoing::Requests, ReqProtocolNames}, @@ -51,10 +54,9 @@ pub enum NetworkAction { WriteNotification(PeerId, PeerSet, Vec), } -// The subsystem's view of the network - only supports a single call to `event_stream`. +// The subsystem's view of the network. #[derive(Clone)] struct TestNetwork { - net_events: Arc>>>, action_tx: Arc>>, peerset_protocol_names: Arc, } @@ -66,37 +68,78 @@ struct TestAuthorityDiscovery; // of `NetworkAction`s. struct TestNetworkHandle { action_rx: metered::UnboundedMeteredReceiver, - net_tx: metered::MeteredSender, - peerset_protocol_names: PeerSetProtocolNames, + _peerset_protocol_names: PeerSetProtocolNames, + notification_sinks: Arc>>>, + action_tx: Arc>>, +} + +struct TestMessageSink { + peer: PeerId, + peer_set: PeerSet, + action_tx: Arc>>, +} + +impl TestMessageSink { + fn new( + peer: PeerId, + peer_set: PeerSet, + action_tx: Arc>>, + ) -> TestMessageSink { + Self { peer, peer_set, action_tx } + } +} + +#[async_trait::async_trait] +impl MessageSink for TestMessageSink { + fn send_sync_notification(&self, notification: Vec) { + self.action_tx + .lock() + .unbounded_send(NetworkAction::WriteNotification( + self.peer, + self.peer_set, + notification, + )) + .unwrap(); + } + + async fn send_async_notification( + &self, + _notification: Vec, + ) -> Result<(), sc_network::error::Error> { + unimplemented!(); + } } fn new_test_network( peerset_protocol_names: PeerSetProtocolNames, -) -> (TestNetwork, TestNetworkHandle, TestAuthorityDiscovery) { - let (net_tx, net_rx) = metered::channel(10); +) -> ( + TestNetwork, + TestNetworkHandle, + TestAuthorityDiscovery, + Arc>>>, +) { let (action_tx, action_rx) = metered::unbounded(); + let notification_sinks = Arc::new(Mutex::new(HashMap::new())); + let action_tx = Arc::new(Mutex::new(action_tx)); ( TestNetwork { - net_events: Arc::new(Mutex::new(Some(net_rx))), - action_tx: Arc::new(Mutex::new(action_tx)), + action_tx: action_tx.clone(), peerset_protocol_names: Arc::new(peerset_protocol_names.clone()), }, - TestNetworkHandle { action_rx, net_tx, peerset_protocol_names }, + TestNetworkHandle { + action_rx, + _peerset_protocol_names: peerset_protocol_names, + action_tx, + notification_sinks: notification_sinks.clone(), + }, TestAuthorityDiscovery, + notification_sinks, ) } #[async_trait] impl Network for TestNetwork { - fn event_stream(&mut self) -> BoxStream<'static, NetworkEvent> { - self.net_events - .lock() - .take() - .expect("Subsystem made more than one call to `event_stream`") - .boxed() - } - async fn set_reserved_peers( &mut self, _protocol: ProtocolName, @@ -130,7 +173,8 @@ impl Network for TestNetwork { } fn disconnect_peer(&self, who: PeerId, protocol: ProtocolName) { - let (peer_set, _) = self.peerset_protocol_names.try_get_protocol(&protocol).unwrap(); + let (peer_set, version) = self.peerset_protocol_names.try_get_protocol(&protocol).unwrap(); + assert_eq!(version, peer_set.get_main_version()); self.action_tx .lock() @@ -138,13 +182,10 @@ impl Network for TestNetwork { .unwrap(); } - fn write_notification(&self, who: PeerId, protocol: ProtocolName, message: Vec) { - let (peer_set, _) = self.peerset_protocol_names.try_get_protocol(&protocol).unwrap(); - - self.action_tx - .lock() - .unbounded_send(NetworkAction::WriteNotification(who, peer_set, message)) - .unwrap(); + fn peer_role(&self, _peer_id: PeerId, handshake: Vec) -> Option { + Roles::decode_all(&mut &handshake[..]) + .ok() + .and_then(|role| Some(SubstrateObservedRole::from(role))) } } @@ -174,23 +215,14 @@ impl TestNetworkHandle { async fn connect_peer( &mut self, peer: PeerId, - protocol_version: ValidationVersion, + _protocol_version: ValidationVersion, peer_set: PeerSet, - role: ObservedRole, + _role: ObservedRole, ) { - let protocol_version = ProtocolVersion::from(protocol_version); - self.send_network_event(NetworkEvent::NotificationStreamOpened { - remote: peer, - protocol: self.peerset_protocol_names.get_name(peer_set, protocol_version), - negotiated_fallback: None, - role: role.into(), - received_handshake: vec![], - }) - .await; - } - - async fn send_network_event(&mut self, event: NetworkEvent) { - self.net_tx.send(event).await.expect("subsystem concluded early"); + self.notification_sinks.lock().insert( + (peer_set, peer), + Box::new(TestMessageSink::new(peer, peer_set, self.action_tx.clone())), + ); } } @@ -208,7 +240,8 @@ fn test_harness>(test: impl FnOnce(TestHarne let peerset_protocol_names = PeerSetProtocolNames::new(genesis_hash, fork_id); let pool = sp_core::testing::TaskExecutor::new(); - let (network, network_handle, discovery) = new_test_network(peerset_protocol_names.clone()); + let (network, network_handle, discovery, network_notification_sinks) = + new_test_network(peerset_protocol_names.clone()); let (context, virtual_overseer) = polkadot_node_subsystem_test_helpers::make_subsystem_context(pool); @@ -219,6 +252,7 @@ fn test_harness>(test: impl FnOnce(TestHarne Metrics(None), req_protocol_names, peerset_protocol_names, + network_notification_sinks, ); let network_bridge_out_fut = run_network_out(bridge_out, context) @@ -364,9 +398,9 @@ fn network_protocol_versioning_send() { approval_distribution_message.clone(), ); - // Note that bridge doesn't ensure neither peer's protocol version - // or peer set match the message. - let receivers = vec![peer_ids[0], peer_ids[3]]; + // only `peer_ids[0]` opened the validation protocol v2 + // so only they will be sent a notification + let receivers = vec![peer_ids[0]]; virtual_overseer .send(FromOrchestra::Communication { msg: NetworkBridgeTxMessage::SendValidationMessage( @@ -406,7 +440,9 @@ fn network_protocol_versioning_send() { let msg = protocol_v2::CollationProtocol::CollatorProtocol(collator_protocol_message.clone()); - let receivers = vec![peer_ids[1], peer_ids[2]]; + // only `peer_ids[0]` opened the collation protocol v2 + // so only they will be sent a notification + let receivers = vec![peer_ids[1]]; virtual_overseer .send(FromOrchestra::Communication { diff --git a/polkadot/node/network/bridge/src/validator_discovery.rs b/polkadot/node/network/bridge/src/validator_discovery.rs index 86e861fbc5b..b11af8a8a08 100644 --- a/polkadot/node/network/bridge/src/validator_discovery.rs +++ b/polkadot/node/network/bridge/src/validator_discovery.rs @@ -169,13 +169,12 @@ mod tests { use crate::network::Network; use async_trait::async_trait; - use futures::stream::BoxStream; use polkadot_node_network_protocol::{ request_response::{outgoing::Requests, ReqProtocolNames}, PeerId, }; use polkadot_primitives::Hash; - use sc_network::{Event as NetworkEvent, IfDisconnected, ProtocolName, ReputationChange}; + use sc_network::{IfDisconnected, ProtocolName, ReputationChange}; use sp_keyring::Sr25519Keyring; use std::collections::{HashMap, HashSet}; @@ -224,10 +223,6 @@ mod tests { #[async_trait] impl Network for TestNetwork { - fn event_stream(&mut self) -> BoxStream<'static, NetworkEvent> { - panic!() - } - async fn set_reserved_peers( &mut self, _protocol: ProtocolName, @@ -263,7 +258,11 @@ mod tests { panic!() } - fn write_notification(&self, _: PeerId, _: ProtocolName, _: Vec) { + fn peer_role( + &self, + _peer_id: PeerId, + _handshake: Vec, + ) -> Option { panic!() } } diff --git a/polkadot/node/network/protocol/src/peer_set.rs b/polkadot/node/network/protocol/src/peer_set.rs index eb483dec970..7e257d508b5 100644 --- a/polkadot/node/network/protocol/src/peer_set.rs +++ b/polkadot/node/network/protocol/src/peer_set.rs @@ -21,6 +21,7 @@ use polkadot_primitives::Hash; use sc_network::{ config::{NonDefaultSetConfig, SetConfig}, types::ProtocolName, + NotificationService, }; use std::{ collections::{hash_map::Entry, HashMap}, @@ -68,7 +69,7 @@ impl PeerSet { self, is_authority: IsAuthority, peerset_protocol_names: &PeerSetProtocolNames, - ) -> NonDefaultSetConfig { + ) -> (NonDefaultSetConfig, (PeerSet, Box)) { // Networking layer relies on `get_main_name()` being the main name of the protocol // for peersets and connection management. let protocol = peerset_protocol_names.get_main_name(self); @@ -76,39 +77,47 @@ impl PeerSet { let max_notification_size = self.get_max_notification_size(is_authority); match self { - PeerSet::Validation => NonDefaultSetConfig { - notifications_protocol: protocol, - fallback_names, - max_notification_size, - handshake: None, - set_config: SetConfig { - // we allow full nodes to connect to validators for gossip - // to ensure any `MIN_GOSSIP_PEERS` always include reserved peers - // we limit the amount of non-reserved slots to be less - // than `MIN_GOSSIP_PEERS` in total - in_peers: super::MIN_GOSSIP_PEERS as u32 / 2 - 1, - out_peers: super::MIN_GOSSIP_PEERS as u32 / 2 - 1, - reserved_nodes: Vec::new(), - non_reserved_mode: sc_network::config::NonReservedPeerMode::Accept, - }, + PeerSet::Validation => { + let (config, notification_service) = NonDefaultSetConfig::new( + protocol, + fallback_names, + max_notification_size, + None, + SetConfig { + // we allow full nodes to connect to validators for gossip + // to ensure any `MIN_GOSSIP_PEERS` always include reserved peers + // we limit the amount of non-reserved slots to be less + // than `MIN_GOSSIP_PEERS` in total + in_peers: super::MIN_GOSSIP_PEERS as u32 / 2 - 1, + out_peers: super::MIN_GOSSIP_PEERS as u32 / 2 - 1, + reserved_nodes: Vec::new(), + non_reserved_mode: sc_network::config::NonReservedPeerMode::Accept, + }, + ); + + (config, (PeerSet::Validation, notification_service)) }, - PeerSet::Collation => NonDefaultSetConfig { - notifications_protocol: protocol, - fallback_names, - max_notification_size, - handshake: None, - set_config: SetConfig { - // Non-authority nodes don't need to accept incoming connections on this peer - // set: - in_peers: if is_authority == IsAuthority::Yes { 100 } else { 0 }, - out_peers: 0, - reserved_nodes: Vec::new(), - non_reserved_mode: if is_authority == IsAuthority::Yes { - sc_network::config::NonReservedPeerMode::Accept - } else { - sc_network::config::NonReservedPeerMode::Deny + PeerSet::Collation => { + let (config, notification_service) = NonDefaultSetConfig::new( + protocol, + fallback_names, + max_notification_size, + None, + SetConfig { + // Non-authority nodes don't need to accept incoming connections on this + // peer set: + in_peers: if is_authority == IsAuthority::Yes { 100 } else { 0 }, + out_peers: 0, + reserved_nodes: Vec::new(), + non_reserved_mode: if is_authority == IsAuthority::Yes { + sc_network::config::NonReservedPeerMode::Accept + } else { + sc_network::config::NonReservedPeerMode::Deny + }, }, - }, + ); + + (config, (PeerSet::Collation, notification_service)) }, } } @@ -204,7 +213,7 @@ impl IndexMut for PerPeerSet { pub fn peer_sets_info( is_authority: IsAuthority, peerset_protocol_names: &PeerSetProtocolNames, -) -> Vec { +) -> Vec<(NonDefaultSetConfig, (PeerSet, Box))> { PeerSet::iter() .map(|s| s.get_info(is_authority, &peerset_protocol_names)) .collect() @@ -286,7 +295,7 @@ impl From for ProtocolVersion { } /// On the wire protocol name to [`PeerSet`] mapping. -#[derive(Clone)] +#[derive(Debug, Clone)] pub struct PeerSetProtocolNames { protocols: HashMap, names: HashMap<(PeerSet, ProtocolVersion), ProtocolName>, diff --git a/polkadot/node/service/Cargo.toml b/polkadot/node/service/Cargo.toml index e7a4f4a825c..19efd1b66c4 100644 --- a/polkadot/node/service/Cargo.toml +++ b/polkadot/node/service/Cargo.toml @@ -89,6 +89,7 @@ kvdb = "0.13.0" kvdb-rocksdb = { version = "0.19.0", optional = true } parity-db = { version = "0.4.8", optional = true } codec = { package = "parity-scale-codec", version = "3.6.1" } +parking_lot = "0.12.1" # Polkadot polkadot-core-primitives = { path = "../../core-primitives" } diff --git a/polkadot/node/service/src/lib.rs b/polkadot/node/service/src/lib.rs index 5069ec467c9..70159301fc4 100644 --- a/polkadot/node/service/src/lib.rs +++ b/polkadot/node/service/src/lib.rs @@ -51,7 +51,8 @@ use { }, polkadot_node_core_dispute_coordinator::Config as DisputeCoordinatorConfig, polkadot_node_network_protocol::{ - peer_set::PeerSetProtocolNames, request_response::ReqProtocolNames, + peer_set::{PeerSet, PeerSetProtocolNames}, + request_response::ReqProtocolNames, }, sc_client_api::BlockBackend, sc_transaction_pool_api::OffchainTransactionPoolFactory, @@ -74,7 +75,7 @@ pub use { #[cfg(feature = "full-node")] use polkadot_node_subsystem::jaeger; -use std::{path::PathBuf, sync::Arc, time::Duration}; +use std::{collections::HashMap, path::PathBuf, sync::Arc, time::Duration}; use prometheus_endpoint::Registry; #[cfg(feature = "full-node")] @@ -809,9 +810,9 @@ pub fn new_full( // anything in terms of behaviour, but makes the logs more consistent with the other // Substrate nodes. let grandpa_protocol_name = grandpa::protocol_standard_name(&genesis_hash, &config.chain_spec); - net_config.add_notification_protocol(grandpa::grandpa_peers_set_config( - grandpa_protocol_name.clone(), - )); + let (grandpa_protocol_config, grandpa_notification_service) = + grandpa::grandpa_peers_set_config(grandpa_protocol_name.clone()); + net_config.add_notification_protocol(grandpa_protocol_config); let beefy_gossip_proto_name = beefy::gossip_protocol_name(&genesis_hash, config.chain_spec.fork_id()); @@ -824,12 +825,17 @@ pub fn new_full( client.clone(), prometheus_registry.clone(), ); - if enable_beefy { - net_config.add_notification_protocol(beefy::communication::beefy_peers_set_config( - beefy_gossip_proto_name.clone(), - )); - net_config.add_request_response_protocol(beefy_req_resp_cfg); - } + let beefy_notification_service = match enable_beefy { + false => None, + true => { + let (beefy_notification_config, beefy_notification_service) = + beefy::communication::beefy_peers_set_config(beefy_gossip_proto_name.clone()); + + net_config.add_notification_protocol(beefy_notification_config); + net_config.add_request_response_protocol(beefy_req_resp_cfg); + Some(beefy_notification_service) + }, + }; // validation/collation protocols are enabled only if `Overseer` is enabled let peerset_protocol_names = @@ -840,13 +846,21 @@ pub fn new_full( // // Collators and parachain full nodes require the collator and validator networking to send // collations and to be able to recover PoVs. - if role.is_authority() || is_parachain_node.is_running_alongside_parachain_node() { - use polkadot_network_bridge::{peer_sets_info, IsAuthority}; - let is_authority = if role.is_authority() { IsAuthority::Yes } else { IsAuthority::No }; - for config in peer_sets_info(is_authority, &peerset_protocol_names) { - net_config.add_notification_protocol(config); - } - } + let notification_services = + if role.is_authority() || is_parachain_node.is_running_alongside_parachain_node() { + use polkadot_network_bridge::{peer_sets_info, IsAuthority}; + let is_authority = if role.is_authority() { IsAuthority::Yes } else { IsAuthority::No }; + + peer_sets_info(is_authority, &peerset_protocol_names) + .into_iter() + .map(|(config, (peerset, service))| { + net_config.add_notification_protocol(config); + (peerset, service) + }) + .collect::>>() + } else { + std::collections::HashMap::new() + }; let req_protocol_names = ReqProtocolNames::new(&genesis_hash, config.chain_spec.fork_id()); @@ -1078,6 +1092,7 @@ pub fn new_full( offchain_transaction_pool_factory: OffchainTransactionPoolFactory::new( transaction_pool.clone(), ), + notification_services, }, ) .map_err(|e| { @@ -1179,13 +1194,15 @@ pub fn new_full( // need a keystore, regardless of which protocol we use below. let keystore_opt = if role.is_authority() { Some(keystore_container.keystore()) } else { None }; - if enable_beefy { + // beefy is enabled if its notification service exists + if let Some(notification_service) = beefy_notification_service { let justifications_protocol_name = beefy_on_demand_justifications_handler.protocol_name(); let network_params = beefy::BeefyNetworkParams { network: network.clone(), sync: sync_service.clone(), gossip_protocol_name: beefy_gossip_proto_name, justifications_protocol_name, + notification_service, _phantom: core::marker::PhantomData::, }; let payload_provider = beefy_primitives::mmr::MmrRootProvider::new(client.clone()); @@ -1265,6 +1282,7 @@ pub fn new_full( prometheus_registry: prometheus_registry.clone(), shared_voter_state, telemetry: telemetry.as_ref().map(|x| x.handle()), + notification_service: grandpa_notification_service, offchain_tx_pool_factory: OffchainTransactionPoolFactory::new(transaction_pool.clone()), }; diff --git a/polkadot/node/service/src/overseer.rs b/polkadot/node/service/src/overseer.rs index fd618863eea..599563d6454 100644 --- a/polkadot/node/service/src/overseer.rs +++ b/polkadot/node/service/src/overseer.rs @@ -26,7 +26,7 @@ use polkadot_node_core_candidate_validation::Config as CandidateValidationConfig use polkadot_node_core_chain_selection::Config as ChainSelectionConfig; use polkadot_node_core_dispute_coordinator::Config as DisputeCoordinatorConfig; use polkadot_node_network_protocol::{ - peer_set::PeerSetProtocolNames, + peer_set::{PeerSet, PeerSetProtocolNames}, request_response::{ v1 as request_v1, v2 as request_v2, IncomingRequestReceiver, ReqProtocolNames, }, @@ -41,15 +41,16 @@ use polkadot_overseer::{ OverseerConnector, OverseerHandle, SpawnGlue, }; +use parking_lot::Mutex; use polkadot_primitives::runtime_api::ParachainHost; use sc_authority_discovery::Service as AuthorityDiscoveryService; use sc_client_api::AuxStore; use sc_keystore::LocalKeystore; -use sc_network::NetworkStateInfo; +use sc_network::{NetworkStateInfo, NotificationService}; use sp_api::ProvideRuntimeApi; use sp_blockchain::HeaderBackend; use sp_consensus_babe::BabeApi; -use std::sync::Arc; +use std::{collections::HashMap, sync::Arc}; pub use polkadot_approval_distribution::ApprovalDistribution as ApprovalDistributionSubsystem; pub use polkadot_availability_bitfield_distribution::BitfieldDistribution as BitfieldDistributionSubsystem; @@ -140,6 +141,8 @@ where pub peerset_protocol_names: PeerSetProtocolNames, /// The offchain transaction pool factory. pub offchain_transaction_pool_factory: OffchainTransactionPoolFactory, + /// Notification services for validation/collation protocols. + pub notification_services: HashMap>, } /// Obtain a prepared `OverseerBuilder`, that is initialized @@ -173,6 +176,7 @@ pub fn prepared_overseer_builder( req_protocol_names, peerset_protocol_names, offchain_transaction_pool_factory, + notification_services, }: OverseerGenArgs, ) -> Result< InitializedOverseerBuilder< @@ -218,6 +222,7 @@ where use polkadot_node_subsystem_util::metrics::Metrics; let metrics = ::register(registry)?; + let notification_sinks = Arc::new(Mutex::new(HashMap::new())); let spawner = SpawnGlue(spawner); @@ -235,6 +240,7 @@ where network_bridge_metrics.clone(), req_protocol_names, peerset_protocol_names.clone(), + notification_sinks.clone(), )) .network_bridge_rx(NetworkBridgeRxSubsystem::new( network_service.clone(), @@ -242,6 +248,8 @@ where Box::new(sync_service.clone()), network_bridge_metrics, peerset_protocol_names, + notification_services, + notification_sinks, )) .availability_distribution(AvailabilityDistributionSubsystem::new( keystore.clone(), diff --git a/substrate/bin/node-template/node/src/service.rs b/substrate/bin/node-template/node/src/service.rs index 40320282924..e69428d8190 100644 --- a/substrate/bin/node-template/node/src/service.rs +++ b/substrate/bin/node-template/node/src/service.rs @@ -163,9 +163,9 @@ pub fn new_full(config: Configuration) -> Result { &client.block_hash(0).ok().flatten().expect("Genesis block exists; qed"), &config.chain_spec, ); - net_config.add_notification_protocol(sc_consensus_grandpa::grandpa_peers_set_config( - grandpa_protocol_name.clone(), - )); + let (grandpa_protocol_config, grandpa_notification_service) = + sc_consensus_grandpa::grandpa_peers_set_config(grandpa_protocol_name.clone()); + net_config.add_notification_protocol(grandpa_protocol_config); let warp_sync = Arc::new(sc_consensus_grandpa::warp_proof::NetworkProvider::new( backend.clone(), @@ -316,6 +316,7 @@ pub fn new_full(config: Configuration) -> Result { link: grandpa_link, network, sync: Arc::new(sync_service), + notification_service: grandpa_notification_service, voting_rule: sc_consensus_grandpa::VotingRulesBuilder::default().build(), prometheus_registry, shared_voter_state: SharedVoterState::empty(), diff --git a/substrate/bin/node/cli/src/service.rs b/substrate/bin/node/cli/src/service.rs index 1c71b5a3956..a746de8de84 100644 --- a/substrate/bin/node/cli/src/service.rs +++ b/substrate/bin/node/cli/src/service.rs @@ -370,28 +370,28 @@ pub fn new_full_base( let shared_voter_state = rpc_setup; let auth_disc_publish_non_global_ips = config.network.allow_non_globals_in_dht; let mut net_config = sc_network::config::FullNetworkConfiguration::new(&config.network); - let genesis_hash = client.block_hash(0).ok().flatten().expect("Genesis block exists; qed"); let grandpa_protocol_name = grandpa::protocol_standard_name(&genesis_hash, &config.chain_spec); - net_config.add_notification_protocol(grandpa::grandpa_peers_set_config( - grandpa_protocol_name.clone(), - )); + let (grandpa_protocol_config, grandpa_notification_service) = + grandpa::grandpa_peers_set_config(grandpa_protocol_name.clone()); + net_config.add_notification_protocol(grandpa_protocol_config); - let statement_handler_proto = sc_network_statement::StatementHandlerPrototype::new( - genesis_hash, - config.chain_spec.fork_id(), - ); - net_config.add_notification_protocol(statement_handler_proto.set_config()); + let (statement_handler_proto, statement_config) = + sc_network_statement::StatementHandlerPrototype::new( + genesis_hash, + config.chain_spec.fork_id(), + ); + net_config.add_notification_protocol(statement_config); let mixnet_protocol_name = sc_mixnet::protocol_name(genesis_hash.as_ref(), config.chain_spec.fork_id()); - if let Some(mixnet_config) = &mixnet_config { - net_config.add_notification_protocol(sc_mixnet::peers_set_config( - mixnet_protocol_name.clone(), - mixnet_config, - )); - } + let mixnet_notification_service = mixnet_config.as_ref().map(|mixnet_config| { + let (config, notification_service) = + sc_mixnet::peers_set_config(mixnet_protocol_name.clone(), mixnet_config); + net_config.add_notification_protocol(config); + notification_service + }); let warp_sync = Arc::new(grandpa::warp_proof::NetworkProvider::new( backend.clone(), @@ -422,6 +422,8 @@ pub fn new_full_base( mixnet_protocol_name, transaction_pool.clone(), Some(keystore_container.keystore()), + mixnet_notification_service + .expect("`NotificationService` exists since mixnet was enabled; qed"), ); task_manager.spawn_handle().spawn("mixnet", None, mixnet); } @@ -590,6 +592,7 @@ pub fn new_full_base( link: grandpa_link, network: network.clone(), sync: Arc::new(sync_service.clone()), + notification_service: grandpa_notification_service, telemetry: telemetry.as_ref().map(|x| x.handle()), voting_rule: grandpa::VotingRulesBuilder::default().build(), prometheus_registry: prometheus_registry.clone(), diff --git a/substrate/client/consensus/beefy/src/communication/mod.rs b/substrate/client/consensus/beefy/src/communication/mod.rs index 10a6071aae6..3827559057d 100644 --- a/substrate/client/consensus/beefy/src/communication/mod.rs +++ b/substrate/client/consensus/beefy/src/communication/mod.rs @@ -67,10 +67,16 @@ pub(crate) mod beefy_protocol_name { /// For standard protocol name see [`beefy_protocol_name::gossip_protocol_name`]. pub fn beefy_peers_set_config( gossip_protocol_name: sc_network::ProtocolName, -) -> sc_network::config::NonDefaultSetConfig { - let mut cfg = sc_network::config::NonDefaultSetConfig::new(gossip_protocol_name, 1024 * 1024); +) -> (sc_network::config::NonDefaultSetConfig, Box) { + let (mut cfg, notification_service) = sc_network::config::NonDefaultSetConfig::new( + gossip_protocol_name, + Vec::new(), + 1024 * 1024, + None, + Default::default(), + ); cfg.allow_non_reserved(25, 25); - cfg + (cfg, notification_service) } // cost scalars for reporting peers. diff --git a/substrate/client/consensus/beefy/src/lib.rs b/substrate/client/consensus/beefy/src/lib.rs index 3d104f13250..b3ff11add27 100644 --- a/substrate/client/consensus/beefy/src/lib.rs +++ b/substrate/client/consensus/beefy/src/lib.rs @@ -38,7 +38,7 @@ use parking_lot::Mutex; use prometheus::Registry; use sc_client_api::{Backend, BlockBackend, BlockchainEvents, FinalityNotifications, Finalizer}; use sc_consensus::BlockImport; -use sc_network::{NetworkRequest, ProtocolName}; +use sc_network::{NetworkRequest, NotificationService, ProtocolName}; use sc_network_gossip::{GossipEngine, Network as GossipNetwork, Syncing as GossipSyncing}; use sp_api::ProvideRuntimeApi; use sp_blockchain::{ @@ -178,6 +178,8 @@ pub struct BeefyNetworkParams { pub network: Arc, /// Syncing service implementing a sync oracle and an event stream for peers. pub sync: Arc, + /// Handle for receiving notification events. + pub notification_service: Box, /// Chain specific BEEFY gossip protocol name. See /// [`communication::beefy_protocol_name::gossip_protocol_name`]. pub gossip_protocol_name: ProtocolName, @@ -243,6 +245,7 @@ pub async fn start_beefy_gadget( let BeefyNetworkParams { network, sync, + notification_service, gossip_protocol_name, justifications_protocol_name, .. @@ -264,6 +267,7 @@ pub async fn start_beefy_gadget( let gossip_engine = GossipEngine::new( network.clone(), sync.clone(), + notification_service, gossip_protocol_name.clone(), gossip_validator.clone(), None, diff --git a/substrate/client/consensus/beefy/src/tests.rs b/substrate/client/consensus/beefy/src/tests.rs index 3aaa59cbfa1..3f800166e26 100644 --- a/substrate/client/consensus/beefy/src/tests.rs +++ b/substrate/client/consensus/beefy/src/tests.rs @@ -72,7 +72,7 @@ use substrate_test_runtime_client::{BlockBuilderExt, ClientExt}; use tokio::time::Duration; const GENESIS_HASH: H256 = H256::zero(); -fn beefy_gossip_proto_name() -> ProtocolName { +pub(crate) fn beefy_gossip_proto_name() -> ProtocolName { gossip_protocol_name(GENESIS_HASH, None) } @@ -371,6 +371,7 @@ async fn voter_init_setup( let mut gossip_engine = sc_network_gossip::GossipEngine::new( net.peer(0).network_service().clone(), net.peer(0).sync_service().clone(), + net.peer(0).take_notification_service(&beefy_gossip_proto_name()).unwrap(), "/beefy/whatever", gossip_validator, None, @@ -392,6 +393,14 @@ where { let tasks = FuturesUnordered::new(); + let mut notification_services = peers + .iter() + .map(|(peer_id, _, _)| { + let peer = &mut net.peers[*peer_id]; + (*peer_id, peer.take_notification_service(&beefy_gossip_proto_name()).unwrap()) + }) + .collect::>(); + for (peer_id, key, api) in peers.into_iter() { let peer = &net.peers[peer_id]; @@ -409,6 +418,7 @@ where let network_params = crate::BeefyNetworkParams { network: peer.network_service().clone(), sync: peer.sync_service().clone(), + notification_service: notification_services.remove(&peer_id).unwrap(), gossip_protocol_name: beefy_gossip_proto_name(), justifications_protocol_name: on_demand_justif_handler.protocol_name(), _phantom: PhantomData, @@ -1045,7 +1055,25 @@ async fn should_initialize_voter_at_custom_genesis() { net.peer(0).client().as_client().finalize_block(hashes[8], None).unwrap(); // load persistent state - nothing in DB, should init at genesis - let persisted_state = voter_init_setup(&mut net, &mut finality, &api).await.unwrap(); + // + // NOTE: code from `voter_init_setup()` is moved here because the new network event system + // doesn't allow creating a new `GossipEngine` as the notification handle is consumed by the + // first `GossipEngine` + let known_peers = Arc::new(Mutex::new(KnownPeers::new())); + let (gossip_validator, _) = GossipValidator::new(known_peers); + let gossip_validator = Arc::new(gossip_validator); + let mut gossip_engine = sc_network_gossip::GossipEngine::new( + net.peer(0).network_service().clone(), + net.peer(0).sync_service().clone(), + net.peer(0).take_notification_service(&beefy_gossip_proto_name()).unwrap(), + "/beefy/whatever", + gossip_validator, + None, + ); + let (beefy_genesis, best_grandpa) = + wait_for_runtime_pallet(&api, &mut gossip_engine, &mut finality).await.unwrap(); + let persisted_state = + load_or_init_voter_state(&*backend, &api, beefy_genesis, best_grandpa, 1).unwrap(); // Test initialization at session boundary. // verify voter initialized with single session starting at block `custom_pallet_genesis` (7) @@ -1075,7 +1103,11 @@ async fn should_initialize_voter_at_custom_genesis() { net.peer(0).client().as_client().finalize_block(hashes[10], None).unwrap(); // load persistent state - state preset in DB, but with different pallet genesis - let new_persisted_state = voter_init_setup(&mut net, &mut finality, &api).await.unwrap(); + // the network state persists and uses the old `GossipEngine` initialized for `peer(0)` + let (beefy_genesis, best_grandpa) = + wait_for_runtime_pallet(&api, &mut gossip_engine, &mut finality).await.unwrap(); + let new_persisted_state = + load_or_init_voter_state(&*backend, &api, beefy_genesis, best_grandpa, 1).unwrap(); // verify voter initialized with single session starting at block `new_pallet_genesis` (10) let sessions = new_persisted_state.voting_oracle().sessions(); @@ -1371,7 +1403,7 @@ async fn gossipped_finality_proofs() { let api = Arc::new(TestApi::with_validator_set(&validator_set)); let beefy_peers = peers.iter().enumerate().map(|(id, key)| (id, key, api.clone())).collect(); - let charlie = &net.peers[2]; + let charlie = &mut net.peers[2]; let known_peers = Arc::new(Mutex::new(KnownPeers::::new())); // Charlie will run just the gossip engine and not the full voter. let (gossip_validator, _) = GossipValidator::new(known_peers); @@ -1384,6 +1416,7 @@ async fn gossipped_finality_proofs() { let mut charlie_gossip_engine = sc_network_gossip::GossipEngine::new( charlie.network_service().clone(), charlie.sync_service().clone(), + charlie.take_notification_service(&beefy_gossip_proto_name()).unwrap(), beefy_gossip_proto_name(), charlie_gossip_validator.clone(), None, diff --git a/substrate/client/consensus/beefy/src/worker.rs b/substrate/client/consensus/beefy/src/worker.rs index 0eea5647e51..1fbda974053 100644 --- a/substrate/client/consensus/beefy/src/worker.rs +++ b/substrate/client/consensus/beefy/src/worker.rs @@ -1145,12 +1145,16 @@ pub(crate) mod tests { let api = Arc::new(TestApi::with_validator_set(&genesis_validator_set)); let network = peer.network_service().clone(); let sync = peer.sync_service().clone(); + let notification_service = peer + .take_notification_service(&crate::tests::beefy_gossip_proto_name()) + .unwrap(); let known_peers = Arc::new(Mutex::new(KnownPeers::new())); let (gossip_validator, gossip_report_stream) = GossipValidator::new(known_peers.clone()); let gossip_validator = Arc::new(gossip_validator); let gossip_engine = GossipEngine::new( network.clone(), sync.clone(), + notification_service, "/beefy/1", gossip_validator.clone(), None, diff --git a/substrate/client/consensus/grandpa/src/communication/mod.rs b/substrate/client/consensus/grandpa/src/communication/mod.rs index 6d9e956b41b..5c7e1276297 100644 --- a/substrate/client/consensus/grandpa/src/communication/mod.rs +++ b/substrate/client/consensus/grandpa/src/communication/mod.rs @@ -46,7 +46,7 @@ use finality_grandpa::{ Message::{Precommit, Prevote, PrimaryPropose}, }; use parity_scale_codec::{Decode, DecodeAll, Encode}; -use sc_network::{NetworkBlock, NetworkSyncForkRequest, ReputationChange}; +use sc_network::{NetworkBlock, NetworkSyncForkRequest, NotificationService, ReputationChange}; use sc_network_gossip::{GossipEngine, Network as GossipNetwork}; use sc_telemetry::{telemetry, TelemetryHandle, CONSENSUS_DEBUG, CONSENSUS_INFO}; use sp_keystore::KeystorePtr; @@ -247,6 +247,7 @@ impl, S: Syncing> NetworkBridge { pub(crate) fn new( service: N, sync: S, + notification_service: Box, config: crate::Config, set_state: crate::environment::SharedVoterSetState, prometheus_registry: Option<&Registry>, @@ -260,6 +261,7 @@ impl, S: Syncing> NetworkBridge { let gossip_engine = Arc::new(Mutex::new(GossipEngine::new( service.clone(), sync.clone(), + notification_service, protocol, validator.clone(), prometheus_registry, diff --git a/substrate/client/consensus/grandpa/src/communication/tests.rs b/substrate/client/consensus/grandpa/src/communication/tests.rs index 4a869d0f515..b76b1af93da 100644 --- a/substrate/client/consensus/grandpa/src/communication/tests.rs +++ b/substrate/client/consensus/grandpa/src/communication/tests.rs @@ -24,16 +24,17 @@ use super::{ }; use crate::{communication::grandpa_protocol_name, environment::SharedVoterSetState}; use futures::prelude::*; -use parity_scale_codec::Encode; +use parity_scale_codec::{DecodeAll, Encode}; use sc_network::{ config::{MultiaddrWithPeerId, Role}, event::Event as NetworkEvent, + service::traits::{Direction, MessageSink, NotificationEvent, NotificationService}, types::ProtocolName, Multiaddr, NetworkBlock, NetworkEventStream, NetworkNotification, NetworkPeers, NetworkSyncForkRequest, NotificationSenderError, NotificationSenderT as NotificationSender, PeerId, ReputationChange, }; -use sc_network_common::role::ObservedRole; +use sc_network_common::role::{ObservedRole, Roles}; use sc_network_gossip::Validator; use sc_network_sync::{SyncEvent as SyncStreamEvent, SyncEventStream}; use sc_network_test::{Block, Hash}; @@ -123,6 +124,12 @@ impl NetworkPeers for TestNetwork { fn sync_num_connected(&self) -> usize { unimplemented!(); } + + fn peer_role(&self, _peer_id: PeerId, handshake: Vec) -> Option { + Roles::decode_all(&mut &handshake[..]) + .ok() + .and_then(|role| Some(ObservedRole::from(role))) + } } impl NetworkEventStream for TestNetwork { @@ -211,10 +218,70 @@ impl NetworkSyncForkRequest> for TestSync { fn set_sync_fork_request(&self, _peers: Vec, _hash: Hash, _number: NumberFor) {} } +#[derive(Debug)] +pub(crate) struct TestNotificationService { + sender: TracingUnboundedSender, + rx: TracingUnboundedReceiver, +} + +#[async_trait::async_trait] +impl NotificationService for TestNotificationService { + /// Instruct `Notifications` to open a new substream for `peer`. + async fn open_substream(&mut self, _peer: PeerId) -> Result<(), ()> { + unimplemented!(); + } + + /// Instruct `Notifications` to close substream for `peer`. + async fn close_substream(&mut self, _peer: PeerId) -> Result<(), ()> { + unimplemented!(); + } + + /// Send synchronous `notification` to `peer`. + fn send_sync_notification(&self, peer: &PeerId, notification: Vec) { + let _ = self.sender.unbounded_send(Event::WriteNotification(*peer, notification)); + } + + /// Send asynchronous `notification` to `peer`, allowing sender to exercise backpressure. + async fn send_async_notification( + &self, + _peer: &PeerId, + _notification: Vec, + ) -> Result<(), sc_network::error::Error> { + unimplemented!(); + } + + /// Set handshake for the notification protocol replacing the old handshake. + async fn set_handshake(&mut self, _handshake: Vec) -> Result<(), ()> { + unimplemented!(); + } + + fn try_set_handshake(&mut self, _handshake: Vec) -> Result<(), ()> { + unimplemented!(); + } + + /// Get next event from the `Notifications` event stream. + async fn next_event(&mut self) -> Option { + self.rx.next().await + } + + fn clone(&mut self) -> Result, ()> { + unimplemented!(); + } + + fn protocol(&self) -> &ProtocolName { + unimplemented!(); + } + + fn message_sink(&self, _peer: &PeerId) -> Option> { + unimplemented!(); + } +} + pub(crate) struct Tester { pub(crate) net_handle: super::NetworkBridge, gossip_validator: Arc>, pub(crate) events: TracingUnboundedReceiver, + pub(crate) notification_tx: TracingUnboundedSender, } impl Tester { @@ -279,6 +346,9 @@ fn voter_set_state() -> SharedVoterSetState { // needs to run in a tokio runtime. pub(crate) fn make_test_network() -> (impl Future, TestNetwork) { let (tx, rx) = tracing_unbounded("test", 100_000); + let (notification_tx, notification_rx) = tracing_unbounded("test-notification", 100_000); + + let notification_service = TestNotificationService { rx: notification_rx, sender: tx.clone() }; let net = TestNetwork { sender: tx }; let sync = TestSync {}; @@ -293,14 +363,22 @@ pub(crate) fn make_test_network() -> (impl Future, TestNetwork) } } - let bridge = - super::NetworkBridge::new(net.clone(), sync, config(), voter_set_state(), None, None); + let bridge = super::NetworkBridge::new( + net.clone(), + sync, + Box::new(notification_service), + config(), + voter_set_state(), + None, + None, + ); ( futures::future::ready(Tester { gossip_validator: bridge.validator.clone(), net_handle: bridge, events: rx, + notification_tx, }), net, ) @@ -385,63 +463,62 @@ fn good_commit_leads_to_relay() { let commit_to_send = encoded_commit.clone(); let network_bridge = tester.net_handle.clone(); - // asking for global communication will cause the test network - // to send us an event asking us for a stream. use it to - // send a message. + // `NetworkBridge` will be operational as soon as it's created and it's + // waiting for events from the network. Send it events that inform that + // a notification stream was opened and that a notification was received. + // + // Since each protocol has its own notification stream, events need not be filtered. let sender_id = id; - let send_message = tester.filter_network_events(move |event| match event { - Event::EventStream(sender) => { - // Add the sending peer and send the commit - let _ = sender.unbounded_send(NetworkEvent::NotificationStreamOpened { - remote: sender_id, - protocol: grandpa_protocol_name::NAME.into(), + + let send_message = async move { + let _ = tester.notification_tx.unbounded_send( + NotificationEvent::NotificationStreamOpened { + peer: sender_id, + direction: Direction::Inbound, negotiated_fallback: None, - role: ObservedRole::Full, - received_handshake: vec![], + handshake: Roles::FULL.encode(), + }, + ); + let _ = tester.notification_tx.unbounded_send( + NotificationEvent::NotificationReceived { + peer: sender_id, + notification: commit_to_send.clone(), + }, + ); + + // Add a random peer which will be the recipient of this message + let receiver_id = PeerId::random(); + let _ = tester.notification_tx.unbounded_send( + NotificationEvent::NotificationStreamOpened { + peer: receiver_id, + direction: Direction::Inbound, + negotiated_fallback: None, + handshake: Roles::FULL.encode(), + }, + ); + + // Announce its local set being on the current set id through a neighbor + // packet, otherwise it won't be eligible to receive the commit + let _ = { + let update = gossip::VersionedNeighborPacket::V1(gossip::NeighborPacket { + round: Round(round), + set_id: SetId(set_id), + commit_finalized_height: 1, }); - let _ = sender.unbounded_send(NetworkEvent::NotificationsReceived { - remote: sender_id, - messages: vec![( - grandpa_protocol_name::NAME.into(), - commit_to_send.clone().into(), - )], - }); + let msg = gossip::GossipMessage::::Neighbor(update); - // Add a random peer which will be the recipient of this message - let receiver_id = PeerId::random(); - let _ = sender.unbounded_send(NetworkEvent::NotificationStreamOpened { - remote: receiver_id, - protocol: grandpa_protocol_name::NAME.into(), - negotiated_fallback: None, - role: ObservedRole::Full, - received_handshake: vec![], - }); + let _ = tester.notification_tx.unbounded_send( + NotificationEvent::NotificationReceived { + peer: receiver_id, + notification: msg.encode(), + }, + ); + }; - // Announce its local set has being on the current set id through a neighbor - // packet, otherwise it won't be eligible to receive the commit - let _ = { - let update = gossip::VersionedNeighborPacket::V1(gossip::NeighborPacket { - round: Round(round), - set_id: SetId(set_id), - commit_finalized_height: 1, - }); - - let msg = gossip::GossipMessage::::Neighbor(update); - - sender.unbounded_send(NetworkEvent::NotificationsReceived { - remote: receiver_id, - messages: vec![( - grandpa_protocol_name::NAME.into(), - msg.encode().into(), - )], - }) - }; - - true - }, - _ => false, - }); + tester + } + .boxed(); // when the commit comes in, we'll tell the callback it was good. let handle_commit = commits_in.into_future().map(|(item, _)| match item.unwrap() { @@ -537,31 +614,32 @@ fn bad_commit_leads_to_report() { let commit_to_send = encoded_commit.clone(); let network_bridge = tester.net_handle.clone(); - // asking for global communication will cause the test network - // to send us an event asking us for a stream. use it to - // send a message. + // `NetworkBridge` will be operational as soon as it's created and it's + // waiting for events from the network. Send it events that inform that + // a notification stream was opened and that a notification was received. + // + // Since each protocol has its own notification stream, events need not be filtered. let sender_id = id; - let send_message = tester.filter_network_events(move |event| match event { - Event::EventStream(sender) => { - let _ = sender.unbounded_send(NetworkEvent::NotificationStreamOpened { - remote: sender_id, - protocol: grandpa_protocol_name::NAME.into(), + + let send_message = async move { + let _ = tester.notification_tx.unbounded_send( + NotificationEvent::NotificationStreamOpened { + peer: sender_id, + direction: Direction::Inbound, negotiated_fallback: None, - role: ObservedRole::Full, - received_handshake: vec![], - }); - let _ = sender.unbounded_send(NetworkEvent::NotificationsReceived { - remote: sender_id, - messages: vec![( - grandpa_protocol_name::NAME.into(), - commit_to_send.clone().into(), - )], - }); + handshake: Roles::FULL.encode(), + }, + ); + let _ = tester.notification_tx.unbounded_send( + NotificationEvent::NotificationReceived { + peer: sender_id, + notification: commit_to_send.clone(), + }, + ); - true - }, - _ => false, - }); + tester + } + .boxed(); // when the commit comes in, we'll tell the callback it was bad. let handle_commit = commits_in.into_future().map(|(item, _)| match item.unwrap() { diff --git a/substrate/client/consensus/grandpa/src/lib.rs b/substrate/client/consensus/grandpa/src/lib.rs index a4584e6fc80..b7cfc9f5b60 100644 --- a/substrate/client/consensus/grandpa/src/lib.rs +++ b/substrate/client/consensus/grandpa/src/lib.rs @@ -67,7 +67,7 @@ use sc_client_api::{ BlockchainEvents, CallExecutor, ExecutorProvider, Finalizer, LockImportRun, StorageProvider, }; use sc_consensus::BlockImport; -use sc_network::types::ProtocolName; +use sc_network::{types::ProtocolName, NotificationService}; use sc_telemetry::{telemetry, TelemetryHandle, CONSENSUS_DEBUG, CONSENSUS_INFO}; use sc_transaction_pool_api::OffchainTransactionPoolFactory; use sc_utils::mpsc::{tracing_unbounded, TracingUnboundedReceiver}; @@ -687,6 +687,8 @@ pub struct GrandpaParams { pub network: N, /// Event stream for syncing-related events. pub sync: S, + /// Handle for interacting with `Notifications`. + pub notification_service: Box, /// A voting rule used to potentially restrict target votes. pub voting_rule: VR, /// The prometheus metrics registry. @@ -707,21 +709,21 @@ pub struct GrandpaParams { /// For standard protocol name see [`crate::protocol_standard_name`]. pub fn grandpa_peers_set_config( protocol_name: ProtocolName, -) -> sc_network::config::NonDefaultSetConfig { +) -> (sc_network::config::NonDefaultSetConfig, Box) { use communication::grandpa_protocol_name; - sc_network::config::NonDefaultSetConfig { - notifications_protocol: protocol_name, - fallback_names: grandpa_protocol_name::LEGACY_NAMES.iter().map(|&n| n.into()).collect(), + sc_network::config::NonDefaultSetConfig::new( + protocol_name, + grandpa_protocol_name::LEGACY_NAMES.iter().map(|&n| n.into()).collect(), // Notifications reach ~256kiB in size at the time of writing on Kusama and Polkadot. - max_notification_size: 1024 * 1024, - handshake: None, - set_config: sc_network::config::SetConfig { + 1024 * 1024, + None, + sc_network::config::SetConfig { in_peers: 0, out_peers: 0, reserved_nodes: Vec::new(), non_reserved_mode: sc_network::config::NonReservedPeerMode::Deny, }, - } + ) } /// Run a GRANDPA voter as a task. Provide configuration and a link to a @@ -744,6 +746,7 @@ where link, network, sync, + notification_service, voting_rule, prometheus_registry, shared_voter_state, @@ -770,6 +773,7 @@ where let network = NetworkBridge::new( network, sync, + notification_service, config.clone(), persistent_data.set_state.clone(), prometheus_registry.as_ref(), diff --git a/substrate/client/consensus/grandpa/src/observer.rs b/substrate/client/consensus/grandpa/src/observer.rs index 8541baa822b..608ff5e46a0 100644 --- a/substrate/client/consensus/grandpa/src/observer.rs +++ b/substrate/client/consensus/grandpa/src/observer.rs @@ -28,6 +28,7 @@ use futures::prelude::*; use log::{debug, info, warn}; use sc_client_api::backend::Backend; +use sc_network::NotificationService; use sc_telemetry::TelemetryHandle; use sc_utils::mpsc::TracingUnboundedReceiver; use sp_blockchain::HeaderMetadata; @@ -168,6 +169,7 @@ pub fn run_grandpa_observer( link: LinkHalf, network: N, sync: S, + notification_service: Box, ) -> sp_blockchain::Result + Send> where BE: Backend + Unpin + 'static, @@ -189,6 +191,7 @@ where let network = NetworkBridge::new( network, sync, + notification_service, config.clone(), persistent_data.set_state.clone(), None, @@ -414,14 +417,14 @@ mod tests { use futures::executor; - /// Ensure `Future` implementation of `ObserverWork` is polling its `NetworkBridge`. Regression - /// test for bug introduced in d4fbb897c and fixed in b7af8b339. + /// Ensure `Future` implementation of `ObserverWork` is polling its `NetworkBridge`. + /// Regression test for bug introduced in d4fbb897c and fixed in b7af8b339. /// - /// When polled, `NetworkBridge` forwards reputation change requests from the `GossipValidator` - /// to the underlying `dyn Network`. This test triggers a reputation change by calling - /// `GossipValidator::validate` with an invalid gossip message. After polling the `ObserverWork` - /// which should poll the `NetworkBridge`, the reputation change should be forwarded to the test - /// network. + /// When polled, `NetworkBridge` forwards reputation change requests from the + /// `GossipValidator` to the underlying `dyn Network`. This test triggers a reputation change + /// by calling `GossipValidator::validate` with an invalid gossip message. After polling the + /// `ObserverWork` which should poll the `NetworkBridge`, the reputation change should be + /// forwarded to the test network. #[test] fn observer_work_polls_underlying_network_bridge() { // Create a test network. @@ -463,12 +466,6 @@ mod tests { // validator to the test network. assert!(observer.now_or_never().is_none()); - // Ignore initial event stream request by gossip engine. - match tester.events.next().now_or_never() { - Some(Some(Event::EventStream(_))) => {}, - _ => panic!("expected event stream request"), - }; - assert_matches!(tester.events.next().now_or_never(), Some(Some(Event::Report(_, _)))); }); } diff --git a/substrate/client/consensus/grandpa/src/tests.rs b/substrate/client/consensus/grandpa/src/tests.rs index 644befe9885..7e42c2d45c7 100644 --- a/substrate/client/consensus/grandpa/src/tests.rs +++ b/substrate/client/consensus/grandpa/src/tests.rs @@ -317,6 +317,9 @@ fn initialize_grandpa( (net.peers[peer_id].network_service().clone(), link) }; let sync = net.peers[peer_id].sync_service().clone(); + let notification_service = net.peers[peer_id] + .take_notification_service(&grandpa_protocol_name::NAME.into()) + .unwrap(); let grandpa_params = GrandpaParams { config: Config { @@ -332,6 +335,7 @@ fn initialize_grandpa( link, network: net_service, sync, + notification_service, voting_rule: (), prometheus_registry: None, shared_voter_state: SharedVoterState::empty(), @@ -472,6 +476,9 @@ async fn finalize_3_voters_1_full_observer() { let net_service = net.peers[peer_id].network_service().clone(); let sync = net.peers[peer_id].sync_service().clone(); let link = net.peers[peer_id].data.lock().take().expect("link initialized at startup; qed"); + let notification_service = net.peers[peer_id] + .take_notification_service(&grandpa_protocol_name::NAME.into()) + .unwrap(); let grandpa_params = GrandpaParams { config: Config { @@ -487,6 +494,7 @@ async fn finalize_3_voters_1_full_observer() { link, network: net_service, sync, + notification_service, voting_rule: (), prometheus_registry: None, shared_voter_state: SharedVoterState::empty(), @@ -557,14 +565,17 @@ async fn transition_3_voters_twice_1_full_observer() { for (peer_id, local_key) in all_peers.clone().into_iter().enumerate() { let keystore = create_keystore(local_key); - let (net_service, link, sync) = { - let net = net.lock(); + let (net_service, link, sync, notification_service) = { + let mut net = net.lock(); let link = net.peers[peer_id].data.lock().take().expect("link initialized at startup; qed"); ( net.peers[peer_id].network_service().clone(), link, net.peers[peer_id].sync_service().clone(), + net.peers[peer_id] + .take_notification_service(&grandpa_protocol_name::NAME.into()) + .unwrap(), ) }; @@ -582,6 +593,7 @@ async fn transition_3_voters_twice_1_full_observer() { link, network: net_service, sync, + notification_service, voting_rule: (), prometheus_registry: None, shared_voter_state: SharedVoterState::empty(), @@ -1025,6 +1037,9 @@ async fn voter_persists_its_votes() { communication::NetworkBridge::new( net.peers[1].network_service().clone(), net.peers[1].sync_service().clone(), + net.peers[1] + .take_notification_service(&grandpa_protocol_name::NAME.into()) + .unwrap(), config.clone(), set_state, None, @@ -1043,6 +1058,9 @@ async fn voter_persists_its_votes() { (net.peers[0].network_service().clone(), link) }; let sync = net.peers[0].sync_service().clone(); + let notification_service = net.peers[0] + .take_notification_service(&grandpa_protocol_name::NAME.into()) + .unwrap(); let grandpa_params = GrandpaParams { config: Config { @@ -1058,6 +1076,7 @@ async fn voter_persists_its_votes() { link, network: net_service, sync, + notification_service, voting_rule: VotingRulesBuilder::default().build(), prometheus_registry: None, shared_voter_state: SharedVoterState::empty(), @@ -1082,6 +1101,9 @@ async fn voter_persists_its_votes() { net.add_authority_peer(); let net_service = net.peers[2].network_service().clone(); let sync = net.peers[2].sync_service().clone(); + let notification_service = net.peers[2] + .take_notification_service(&grandpa_protocol_name::NAME.into()) + .unwrap(); // but we'll reuse the client from the first peer (alice_voter1) // since we want to share the same database, so that we can // read the persisted state after aborting alice_voter1. @@ -1104,6 +1126,7 @@ async fn voter_persists_its_votes() { link, network: net_service, sync, + notification_service, voting_rule: VotingRulesBuilder::default().build(), prometheus_registry: None, shared_voter_state: SharedVoterState::empty(), @@ -1255,6 +1278,9 @@ async fn finalize_3_voters_1_light_observer() { let mut net = GrandpaTestNet::new(TestApi::new(voters), 3, 1); let voters = initialize_grandpa(&mut net, authorities); + let notification_service = net.peers[3] + .take_notification_service(&grandpa_protocol_name::NAME.into()) + .unwrap(); let observer = observer::run_grandpa_observer( Config { gossip_duration: TEST_GOSSIP_DURATION, @@ -1269,6 +1295,7 @@ async fn finalize_3_voters_1_light_observer() { net.peers[3].data.lock().take().expect("link initialized at startup; qed"), net.peers[3].network_service().clone(), net.peers[3].sync_service().clone(), + notification_service, ) .unwrap(); net.peer(0).push_blocks(20, false); @@ -1317,6 +1344,10 @@ async fn voter_catches_up_to_latest_round_when_behind() { link, network: net.peer(peer_id).network_service().clone(), sync: net.peer(peer_id).sync_service().clone(), + notification_service: net + .peer(peer_id) + .take_notification_service(&grandpa_protocol_name::NAME.into()) + .unwrap(), voting_rule: (), prometheus_registry: None, shared_voter_state: SharedVoterState::empty(), @@ -1409,6 +1440,7 @@ fn test_environment_with_select_chain( keystore: Option, network_service: N, sync_service: S, + notification_service: Box, select_chain: SC, voting_rule: VR, ) -> TestEnvironment @@ -1433,6 +1465,7 @@ where let network = NetworkBridge::new( network_service.clone(), sync_service, + notification_service, config.clone(), set_state.clone(), None, @@ -1462,6 +1495,7 @@ fn test_environment( keystore: Option, network_service: N, sync_service: S, + notification_service: Box, voting_rule: VR, ) -> TestEnvironment, VR> where @@ -1474,6 +1508,7 @@ where keystore, network_service, sync_service, + notification_service, link.select_chain.clone(), voting_rule, ) @@ -1490,14 +1525,22 @@ async fn grandpa_environment_respects_voting_rules() { let peer = net.peer(0); let network_service = peer.network_service().clone(); let sync_service = peer.sync_service().clone(); + let mut notification_service = + peer.take_notification_service(&grandpa_protocol_name::NAME.into()).unwrap(); let link = peer.data.lock().take().unwrap(); // add 21 blocks let hashes = peer.push_blocks(21, false); // create an environment with no voting rule restrictions - let unrestricted_env = - test_environment(&link, None, network_service.clone(), sync_service.clone(), ()); + let unrestricted_env = test_environment( + &link, + None, + network_service.clone(), + sync_service.clone(), + notification_service.clone().unwrap(), + (), + ); // another with 3/4 unfinalized chain voting rule restriction let three_quarters_env = test_environment( @@ -1505,6 +1548,7 @@ async fn grandpa_environment_respects_voting_rules() { None, network_service.clone(), sync_service.clone(), + notification_service.clone().unwrap(), voting_rule::ThreeQuartersOfTheUnfinalizedChain, ); @@ -1515,6 +1559,7 @@ async fn grandpa_environment_respects_voting_rules() { None, network_service.clone(), sync_service, + notification_service, VotingRulesBuilder::default().build(), ); @@ -1608,6 +1653,8 @@ async fn grandpa_environment_passes_actual_best_block_to_voting_rules() { let peer = net.peer(0); let network_service = peer.network_service().clone(); let sync_service = peer.sync_service().clone(); + let notification_service = + peer.take_notification_service(&grandpa_protocol_name::NAME.into()).unwrap(); let link = peer.data.lock().take().unwrap(); let client = peer.client().as_client().clone(); let select_chain = MockSelectChain::default(); @@ -1622,6 +1669,7 @@ async fn grandpa_environment_passes_actual_best_block_to_voting_rules() { None, network_service.clone(), sync_service, + notification_service, select_chain.clone(), voting_rule::BeforeBestBlockBy(5), ); @@ -1669,6 +1717,8 @@ async fn grandpa_environment_checks_if_best_block_is_descendent_of_finality_targ let peer = net.peer(0); let network_service = peer.network_service().clone(); let sync_service = peer.sync_service().clone(); + let notification_service = + peer.take_notification_service(&grandpa_protocol_name::NAME.into()).unwrap(); let link = peer.data.lock().take().unwrap(); let client = peer.client().as_client().clone(); let select_chain = MockSelectChain::default(); @@ -1678,6 +1728,7 @@ async fn grandpa_environment_checks_if_best_block_is_descendent_of_finality_targ None, network_service.clone(), sync_service.clone(), + notification_service, select_chain.clone(), voting_rule.clone(), ); @@ -1780,11 +1831,19 @@ async fn grandpa_environment_never_overwrites_round_voter_state() { let peer = net.peer(0); let network_service = peer.network_service().clone(); let sync_service = peer.sync_service().clone(); + let notification_service = + peer.take_notification_service(&grandpa_protocol_name::NAME.into()).unwrap(); let link = peer.data.lock().take().unwrap(); let keystore = create_keystore(peers[0]); - let environment = - test_environment(&link, Some(keystore), network_service.clone(), sync_service, ()); + let environment = test_environment( + &link, + Some(keystore), + network_service.clone(), + sync_service, + notification_service, + (), + ); let round_state = || finality_grandpa::round::State::genesis(Default::default()); let base = || Default::default(); @@ -2012,9 +2071,18 @@ async fn grandpa_environment_doesnt_send_equivocation_reports_for_itself() { let peer = net.peer(0); let network_service = peer.network_service().clone(); let sync_service = peer.sync_service().clone(); + let notification_service = + peer.take_notification_service(&grandpa_protocol_name::NAME.into()).unwrap(); let link = peer.data.lock().take().unwrap(); let keystore = create_keystore(alice); - test_environment(&link, Some(keystore), network_service.clone(), sync_service, ()) + test_environment( + &link, + Some(keystore), + network_service.clone(), + sync_service, + notification_service, + (), + ) }; let signed_prevote = { diff --git a/substrate/client/executor/wasmtime/src/tests.rs b/substrate/client/executor/wasmtime/src/tests.rs index e185754b076..1c06da1e3c1 100644 --- a/substrate/client/executor/wasmtime/src/tests.rs +++ b/substrate/client/executor/wasmtime/src/tests.rs @@ -384,7 +384,9 @@ fn test_max_memory_pages( ) (i32.const -1) ) - (unreachable) + (then + (unreachable) + ) ) (i64.const 0) @@ -421,7 +423,9 @@ fn test_max_memory_pages( ) (i32.const -1) ) - (unreachable) + (then + (unreachable) + ) ) (i64.const 0) diff --git a/substrate/client/mixnet/Cargo.toml b/substrate/client/mixnet/Cargo.toml index 86c5a37754a..d11cb1805ff 100644 --- a/substrate/client/mixnet/Cargo.toml +++ b/substrate/client/mixnet/Cargo.toml @@ -16,6 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] array-bytes = "4.1" arrayvec = "0.7.2" blake2 = "0.10.4" +bytes = "1" codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] } futures = "0.3.25" futures-timer = "3.0.2" diff --git a/substrate/client/mixnet/src/packet_dispatcher.rs b/substrate/client/mixnet/src/packet_dispatcher.rs index 856208ecb34..420e0c68847 100644 --- a/substrate/client/mixnet/src/packet_dispatcher.rs +++ b/substrate/client/mixnet/src/packet_dispatcher.rs @@ -24,7 +24,7 @@ use libp2p_identity::PeerId; use log::{debug, warn}; use mixnet::core::{AddressedPacket, NetworkStatus, Packet, PeerId as CorePeerId}; use parking_lot::Mutex; -use sc_network::{NetworkNotification, ProtocolName}; +use sc_network::NotificationService; use std::{collections::HashMap, future::Future, sync::Arc}; const LOG_TARGET: &str = "mixnet"; @@ -77,41 +77,37 @@ pub struct ReadyPeer { } impl ReadyPeer { - /// If a future is returned, and if that future returns `Some`, this function should be called - /// again to send the next packet queued for the peer; `self` is placed in the `Some` to make - /// this straightforward. Otherwise, we have either sent or dropped all packets queued for the - /// peer, and it can be forgotten about for the time being. + /// If a future is returned, and if that future returns `Some`, this function should be + /// called again to send the next packet queued for the peer; `self` is placed in the `Some` + /// to make this straightforward. Otherwise, we have either sent or dropped all packets + /// queued for the peer, and it can be forgotten about for the time being. pub fn send_packet( self, - network: &impl NetworkNotification, - protocol_name: ProtocolName, + notification_service: &Box, ) -> Option>> { - match network.notification_sender(self.id, protocol_name) { - Err(err) => { + match notification_service.message_sink(&self.id) { + None => { debug!( target: LOG_TARGET, - "Failed to get notification sender for peer ID {}: {err}", self.id + "Failed to get message sink for peer ID {}", self.id, ); self.queue.clear(); None }, - Ok(sender) => Some(async move { - match sender.ready().await.and_then(|mut ready| { - let (packet, more_packets) = self.queue.pop(); - let packet = - packet.expect("Should only be called if there is a packet to send"); - ready.send((packet as Box<[_]>).into())?; - Ok(more_packets) - }) { + Some(sink) => Some(async move { + let (packet, more_packets) = self.queue.pop(); + let packet = packet.expect("Should only be called if there is a packet to send"); + + match sink.send_async_notification((packet as Box<[_]>).into()).await { + Ok(_) => more_packets.then_some(self), Err(err) => { debug!( target: LOG_TARGET, - "Notification sender for peer ID {} failed: {err}", self.id + "Failed to send packet to peer ID {}: {err}", self.id, ); self.queue.clear(); None }, - Ok(more_packets) => more_packets.then(|| self), } }), } diff --git a/substrate/client/mixnet/src/protocol.rs b/substrate/client/mixnet/src/protocol.rs index 555c267b86e..955502a4856 100644 --- a/substrate/client/mixnet/src/protocol.rs +++ b/substrate/client/mixnet/src/protocol.rs @@ -18,7 +18,10 @@ use super::config::Config; use mixnet::core::PACKET_SIZE; -use sc_network::{config::NonDefaultSetConfig, ProtocolName}; +use sc_network::{ + config::{NonDefaultSetConfig, NonReservedPeerMode, SetConfig}, + NotificationService, ProtocolName, +}; /// Returns the protocol name to use for the mixnet controlled by the given chain. pub fn protocol_name(genesis_hash: &[u8], fork_id: Option<&str>) -> ProtocolName { @@ -31,12 +34,26 @@ pub fn protocol_name(genesis_hash: &[u8], fork_id: Option<&str>) -> ProtocolName } /// Returns the peers set configuration for the mixnet protocol. -pub fn peers_set_config(name: ProtocolName, config: &Config) -> NonDefaultSetConfig { - let mut set_config = NonDefaultSetConfig::new(name, PACKET_SIZE as u64); +pub fn peers_set_config( + name: ProtocolName, + config: &Config, +) -> (NonDefaultSetConfig, Box) { + let (mut set_config, service) = NonDefaultSetConfig::new( + name, + Vec::new(), + PACKET_SIZE as u64, + None, + SetConfig { + in_peers: 0, + out_peers: 0, + reserved_nodes: Vec::new(), + non_reserved_mode: NonReservedPeerMode::Deny, + }, + ); if config.substrate.num_gateway_slots != 0 { // out_peers is always 0; we are only interested in connecting to mixnodes, which we do by // setting them as reserved nodes set_config.allow_non_reserved(config.substrate.num_gateway_slots, 0); } - set_config + (set_config, service) } diff --git a/substrate/client/mixnet/src/run.rs b/substrate/client/mixnet/src/run.rs index 09020469d5e..14d188df097 100644 --- a/substrate/client/mixnet/src/run.rs +++ b/substrate/client/mixnet/src/run.rs @@ -29,11 +29,12 @@ use super::{ request::{extrinsic_delay, Request, SUBMIT_EXTRINSIC}, sync_with_runtime::sync_with_runtime, }; +use bytes::Bytes; use codec::{Decode, DecodeAll, Encode}; use futures::{ future::{pending, Either}, stream::FuturesUnordered, - StreamExt, + FutureExt, StreamExt, }; use log::{debug, error, trace, warn}; use mixnet::{ @@ -43,8 +44,8 @@ use mixnet::{ }; use sc_client_api::{BlockchainEvents, HeaderBackend}; use sc_network::{ - Event::{NotificationStreamClosed, NotificationStreamOpened, NotificationsReceived}, - NetworkEventStream, NetworkNotification, NetworkPeers, NetworkStateInfo, ProtocolName, + service::traits::{NotificationEvent, ValidationResult}, + NetworkNotification, NetworkPeers, NetworkStateInfo, NotificationService, ProtocolName, }; use sc_transaction_pool_api::{ LocalTransactionPool, OffchainTransactionPoolFactory, TransactionPool, @@ -154,12 +155,13 @@ pub async fn run( protocol_name: ProtocolName, transaction_pool: Arc

, keystore: Option, + mut notification_service: Box, ) where B: Block, C: BlockchainEvents + ProvideRuntimeApi + HeaderBackend, C::Api: MixnetApi, S: SyncOracle, - N: NetworkStateInfo + NetworkEventStream + NetworkNotification + NetworkPeers, + N: NetworkStateInfo + NetworkNotification + NetworkPeers, P: TransactionPool + LocalTransactionPool + 'static, { let local_peer_id = network.local_peer_id(); @@ -189,7 +191,6 @@ pub async fn run( } else { None }; - let mut network_events = network.event_stream("mixnet").fuse(); let mut next_forward_packet_delay = MaybeInfDelay::new(None); let mut next_authored_packet_delay = MaybeInfDelay::new(None); let mut ready_peers = FuturesUnordered::new(); @@ -248,33 +249,36 @@ pub async fn run( } } - event = network_events.select_next_some() => match event { - NotificationStreamOpened { remote, protocol, .. } - if protocol == protocol_name => packet_dispatcher.add_peer(&remote), - NotificationStreamClosed { remote, protocol } - if protocol == protocol_name => packet_dispatcher.remove_peer(&remote), - NotificationsReceived { remote, messages } => { - for message in messages { - if message.0 == protocol_name { - match message.1.as_ref().try_into() { - Ok(packet) => handle_packet(packet, - &mut mixnet, &mut request_manager, &mut reply_manager, - &mut extrinsic_queue, &config.substrate), - Err(_) => debug!(target: LOG_TARGET, - "Dropped incorrectly sized packet ({} bytes) from {remote}", - message.1.len(), - ), - } - } + event = notification_service.next_event().fuse() => match event { + None => todo!(), + Some(NotificationEvent::ValidateInboundSubstream { result_tx, .. }) => { + let _ = result_tx.send(ValidationResult::Accept); + }, + Some(NotificationEvent::NotificationStreamOpened { peer, .. }) => { + packet_dispatcher.add_peer(&peer); + }, + Some(NotificationEvent::NotificationStreamClosed { peer }) => { + packet_dispatcher.remove_peer(&peer); + }, + Some(NotificationEvent::NotificationReceived { peer, notification }) => { + let notification: Bytes = notification.into(); + + match notification.as_ref().try_into() { + Ok(packet) => handle_packet(packet, + &mut mixnet, &mut request_manager, &mut reply_manager, + &mut extrinsic_queue, &config.substrate), + Err(_) => debug!(target: LOG_TARGET, + "Dropped incorrectly sized packet ({} bytes) from {peer}", + notification.len(), + ), } - } - _ => () + }, }, _ = next_forward_packet_delay => { if let Some(packet) = mixnet.pop_next_forward_packet() { if let Some(ready_peer) = packet_dispatcher.dispatch(packet) { - if let Some(fut) = ready_peer.send_packet(&*network, protocol_name.clone()) { + if let Some(fut) = ready_peer.send_packet(¬ification_service) { ready_peers.push(fut); } } @@ -288,7 +292,7 @@ pub async fn run( _ = next_authored_packet_delay => { if let Some(packet) = mixnet.pop_next_authored_packet(&packet_dispatcher) { if let Some(ready_peer) = packet_dispatcher.dispatch(packet) { - if let Some(fut) = ready_peer.send_packet(&*network, protocol_name.clone()) { + if let Some(fut) = ready_peer.send_packet(¬ification_service) { ready_peers.push(fut); } } @@ -297,7 +301,7 @@ pub async fn run( ready_peer = ready_peers.select_next_some() => { if let Some(ready_peer) = ready_peer { - if let Some(fut) = ready_peer.send_packet(&*network, protocol_name.clone()) { + if let Some(fut) = ready_peer.send_packet(¬ification_service) { ready_peers.push(fut); } } diff --git a/substrate/client/mixnet/src/sync_with_runtime.rs b/substrate/client/mixnet/src/sync_with_runtime.rs index 4a80b3c75f4..f3be9602541 100644 --- a/substrate/client/mixnet/src/sync_with_runtime.rs +++ b/substrate/client/mixnet/src/sync_with_runtime.rs @@ -196,6 +196,7 @@ where #[cfg(test)] mod tests { use super::*; + use multiaddr::multiaddr; #[test] fn fixup_empty_external_addresses() { diff --git a/substrate/client/network-gossip/Cargo.toml b/substrate/client/network-gossip/Cargo.toml index 95e26a232c1..5006d5d0e3e 100644 --- a/substrate/client/network-gossip/Cargo.toml +++ b/substrate/client/network-gossip/Cargo.toml @@ -29,5 +29,7 @@ sp-runtime = { path = "../../primitives/runtime" } [dev-dependencies] tokio = "1.22.0" +async-trait = "0.1.73" +codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ] } quickcheck = { version = "1.0.3", default-features = false } substrate-test-runtime-client = { path = "../../test-utils/runtime/client" } diff --git a/substrate/client/network-gossip/src/bridge.rs b/substrate/client/network-gossip/src/bridge.rs index 8f7d490757b..c1bc414c3a3 100644 --- a/substrate/client/network-gossip/src/bridge.rs +++ b/substrate/client/network-gossip/src/bridge.rs @@ -21,7 +21,11 @@ use crate::{ Network, Syncing, Validator, }; -use sc_network::{event::Event, types::ProtocolName, ReputationChange}; +use sc_network::{ + service::traits::{NotificationEvent, ValidationResult}, + types::ProtocolName, + NotificationService, ReputationChange, +}; use sc_network_sync::SyncEvent; use futures::{ @@ -48,10 +52,10 @@ pub struct GossipEngine { periodic_maintenance_interval: futures_timer::Delay, protocol: ProtocolName, - /// Incoming events from the network. - network_event_stream: Pin + Send>>, /// Incoming events from the syncing service. sync_event_stream: Pin + Send>>, + /// Handle for polling notification-related events. + notification_service: Box, /// Outgoing events to the consumer. message_sinks: HashMap>>, /// Buffered messages (see [`ForwardingState`]). @@ -81,6 +85,7 @@ impl GossipEngine { pub fn new( network: N, sync: S, + notification_service: Box, protocol: impl Into, validator: Arc>, metrics_registry: Option<&Registry>, @@ -91,17 +96,16 @@ impl GossipEngine { S: Syncing + Send + Clone + 'static, { let protocol = protocol.into(); - let network_event_stream = network.event_stream("network-gossip"); let sync_event_stream = sync.event_stream("network-gossip"); GossipEngine { state_machine: ConsensusGossip::new(validator, protocol.clone(), metrics_registry), network: Box::new(network), sync: Box::new(sync), + notification_service, periodic_maintenance_interval: futures_timer::Delay::new(PERIODIC_MAINTENANCE_INTERVAL), protocol, - network_event_stream, sync_event_stream, message_sinks: HashMap::new(), forwarding_state: ForwardingState::Idle, @@ -125,7 +129,7 @@ impl GossipEngine { /// Broadcast all messages with given topic. pub fn broadcast_topic(&mut self, topic: B::Hash, force: bool) { - self.state_machine.broadcast_topic(&mut *self.network, topic, force); + self.state_machine.broadcast_topic(&mut self.notification_service, topic, force); } /// Get data of valid, incoming messages for a topic (but might have expired meanwhile). @@ -150,19 +154,21 @@ impl GossipEngine { /// Send all messages with given topic to a peer. pub fn send_topic(&mut self, who: &PeerId, topic: B::Hash, force: bool) { - self.state_machine.send_topic(&mut *self.network, who, topic, force) + self.state_machine.send_topic(&mut self.notification_service, who, topic, force) } /// Multicast a message to all peers. pub fn gossip_message(&mut self, topic: B::Hash, message: Vec, force: bool) { - self.state_machine.multicast(&mut *self.network, topic, message, force) + self.state_machine + .multicast(&mut self.notification_service, topic, message, force) } /// Send addressed message to the given peers. The message is not kept or multicast /// later on. pub fn send_message(&mut self, who: Vec, data: Vec) { for who in &who { - self.state_machine.send_message(&mut *self.network, who, data.clone()); + self.state_machine + .send_message(&mut self.notification_service, who, data.clone()); } } @@ -173,6 +179,11 @@ impl GossipEngine { pub fn announce(&self, block: B::Hash, associated_data: Option>) { self.sync.announce_block(block, associated_data); } + + /// Consume [`GossipEngine`] and return the notification service. + pub fn take_notification_service(self) -> Box { + self.notification_service + } } impl Future for GossipEngine { @@ -184,46 +195,56 @@ impl Future for GossipEngine { 'outer: loop { match &mut this.forwarding_state { ForwardingState::Idle => { - let net_event_stream = this.network_event_stream.poll_next_unpin(cx); + let next_notification_event = + this.notification_service.next_event().poll_unpin(cx); let sync_event_stream = this.sync_event_stream.poll_next_unpin(cx); - if net_event_stream.is_pending() && sync_event_stream.is_pending() { + if next_notification_event.is_pending() && sync_event_stream.is_pending() { break } - match net_event_stream { + match next_notification_event { Poll::Ready(Some(event)) => match event { - Event::NotificationStreamOpened { remote, protocol, role, .. } => - if protocol == this.protocol { - this.state_machine.new_peer(&mut *this.network, remote, role); - }, - Event::NotificationStreamClosed { remote, protocol } => { - if protocol == this.protocol { - this.state_machine - .peer_disconnected(&mut *this.network, remote); - } + NotificationEvent::ValidateInboundSubstream { + peer, + handshake, + result_tx, + .. + } => { + // only accept peers whose role can be determined + let result = this + .network + .peer_role(peer, handshake) + .map_or(ValidationResult::Reject, |_| ValidationResult::Accept); + let _ = result_tx.send(result); }, - Event::NotificationsReceived { remote, messages } => { - let messages = messages - .into_iter() - .filter_map(|(engine, data)| { - if engine == this.protocol { - Some(data.to_vec()) - } else { - None - } - }) - .collect(); - + NotificationEvent::NotificationStreamOpened { + peer, handshake, .. + } => { + let Some(role) = this.network.peer_role(peer, handshake) else { + log::debug!(target: "gossip", "role for {peer} couldn't be determined"); + continue + }; + + this.state_machine.new_peer( + &mut this.notification_service, + peer, + role, + ); + }, + NotificationEvent::NotificationStreamClosed { peer } => { + this.state_machine + .peer_disconnected(&mut this.notification_service, peer); + }, + NotificationEvent::NotificationReceived { peer, notification } => { let to_forward = this.state_machine.on_incoming( &mut *this.network, - remote, - messages, + &mut this.notification_service, + peer, + vec![notification], ); - this.forwarding_state = ForwardingState::Busy(to_forward.into()); }, - Event::Dht(_) => {}, }, // The network event stream closed. Do the same for [`GossipValidator`]. Poll::Ready(None) => { @@ -306,7 +327,7 @@ impl Future for GossipEngine { while let Poll::Ready(()) = this.periodic_maintenance_interval.poll_unpin(cx) { this.periodic_maintenance_interval.reset(PERIODIC_MAINTENANCE_INTERVAL); - this.state_machine.tick(&mut *this.network); + this.state_machine.tick(&mut this.notification_service); this.message_sinks.retain(|_, sinks| { sinks.retain(|sink| !sink.is_closed()); @@ -328,15 +349,19 @@ impl futures::future::FusedFuture for GossipEngine { mod tests { use super::*; use crate::{multiaddr::Multiaddr, ValidationResult, ValidatorContext}; + use codec::{DecodeAll, Encode}; use futures::{ - channel::mpsc::{unbounded, UnboundedSender}, + channel::mpsc::{unbounded, UnboundedReceiver, UnboundedSender}, executor::{block_on, block_on_stream}, future::poll_fn, }; use quickcheck::{Arbitrary, Gen, QuickCheck}; use sc_network::{ - config::MultiaddrWithPeerId, NetworkBlock, NetworkEventStream, NetworkNotification, - NetworkPeers, NotificationSenderError, NotificationSenderT as NotificationSender, + config::MultiaddrWithPeerId, + service::traits::{Direction, MessageSink, NotificationEvent}, + Event, NetworkBlock, NetworkEventStream, NetworkNotification, NetworkPeers, + NotificationSenderError, NotificationSenderT as NotificationSender, NotificationService, + Roles, }; use sc_network_common::role::ObservedRole; use sc_network_sync::SyncEventStream; @@ -351,14 +376,10 @@ mod tests { use substrate_test_runtime_client::runtime::Block; #[derive(Clone, Default)] - struct TestNetwork { - inner: Arc>, - } + struct TestNetwork {} #[derive(Clone, Default)] - struct TestNetworkInner { - event_senders: Vec>, - } + struct TestNetworkInner {} impl NetworkPeers for TestNetwork { fn set_authorized_peers(&self, _peers: HashSet) { @@ -422,14 +443,17 @@ mod tests { fn sync_num_connected(&self) -> usize { unimplemented!(); } + + fn peer_role(&self, _peer_id: PeerId, handshake: Vec) -> Option { + Roles::decode_all(&mut &handshake[..]) + .ok() + .and_then(|role| Some(ObservedRole::from(role))) + } } impl NetworkEventStream for TestNetwork { fn event_stream(&self, _name: &'static str) -> Pin + Send>> { - let (tx, rx) = unbounded(); - self.inner.lock().unwrap().event_senders.push(tx); - - Box::pin(rx) + unimplemented!(); } } @@ -501,6 +525,58 @@ mod tests { } } + #[derive(Debug)] + pub(crate) struct TestNotificationService { + rx: UnboundedReceiver, + } + + #[async_trait::async_trait] + impl sc_network::service::traits::NotificationService for TestNotificationService { + async fn open_substream(&mut self, _peer: PeerId) -> Result<(), ()> { + unimplemented!(); + } + + async fn close_substream(&mut self, _peer: PeerId) -> Result<(), ()> { + unimplemented!(); + } + + fn send_sync_notification(&self, _peer: &PeerId, _notification: Vec) { + unimplemented!(); + } + + async fn send_async_notification( + &self, + _peer: &PeerId, + _notification: Vec, + ) -> Result<(), sc_network::error::Error> { + unimplemented!(); + } + + async fn set_handshake(&mut self, _handshake: Vec) -> Result<(), ()> { + unimplemented!(); + } + + fn try_set_handshake(&mut self, _handshake: Vec) -> Result<(), ()> { + unimplemented!(); + } + + async fn next_event(&mut self) -> Option { + self.rx.next().await + } + + fn clone(&mut self) -> Result, ()> { + unimplemented!(); + } + + fn protocol(&self) -> &ProtocolName { + unimplemented!(); + } + + fn message_sink(&self, _peer: &PeerId) -> Option> { + unimplemented!(); + } + } + struct AllowAll; impl Validator for AllowAll { fn validate( @@ -521,16 +597,19 @@ mod tests { fn returns_when_network_event_stream_closes() { let network = TestNetwork::default(); let sync = Arc::new(TestSync::default()); + let (tx, rx) = unbounded(); + let notification_service = Box::new(TestNotificationService { rx }); let mut gossip_engine = GossipEngine::::new( network.clone(), sync, + notification_service, "/my_protocol", Arc::new(AllowAll {}), None, ); - // Drop network event stream sender side. - drop(network.inner.lock().unwrap().event_senders.pop()); + // drop notification service sender side. + drop(tx); block_on(poll_fn(move |ctx| { if let Poll::Pending = gossip_engine.poll_unpin(ctx) { @@ -550,42 +629,37 @@ mod tests { let remote_peer = PeerId::random(); let network = TestNetwork::default(); let sync = Arc::new(TestSync::default()); + let (mut tx, rx) = unbounded(); + let notification_service = Box::new(TestNotificationService { rx }); let mut gossip_engine = GossipEngine::::new( network.clone(), sync.clone(), + notification_service, protocol.clone(), Arc::new(AllowAll {}), None, ); - let mut event_sender = network.inner.lock().unwrap().event_senders.pop().unwrap(); - // Register the remote peer. - event_sender - .start_send(Event::NotificationStreamOpened { - remote: remote_peer, - protocol: protocol.clone(), - negotiated_fallback: None, - role: ObservedRole::Authority, - received_handshake: vec![], - }) - .expect("Event stream is unbounded; qed."); + tx.send(NotificationEvent::NotificationStreamOpened { + peer: remote_peer, + direction: Direction::Inbound, + negotiated_fallback: None, + handshake: Roles::FULL.encode(), + }) + .await + .unwrap(); let messages = vec![vec![1], vec![2]]; - let events = messages - .iter() - .cloned() - .map(|m| Event::NotificationsReceived { - remote: remote_peer, - messages: vec![(protocol.clone(), m.into())], - }) - .collect::>(); // Send first event before subscribing. - event_sender - .start_send(events[0].clone()) - .expect("Event stream is unbounded; qed."); + tx.send(NotificationEvent::NotificationReceived { + peer: remote_peer, + notification: messages[0].clone().into(), + }) + .await + .unwrap(); let mut subscribers = vec![]; for _ in 0..2 { @@ -593,9 +667,12 @@ mod tests { } // Send second event after subscribing. - event_sender - .start_send(events[1].clone()) - .expect("Event stream is unbounded; qed."); + tx.send(NotificationEvent::NotificationReceived { + peer: remote_peer, + notification: messages[1].clone().into(), + }) + .await + .unwrap(); tokio::spawn(gossip_engine); @@ -672,6 +749,8 @@ mod tests { let remote_peer = PeerId::random(); let network = TestNetwork::default(); let sync = Arc::new(TestSync::default()); + let (mut tx, rx) = unbounded(); + let notification_service = Box::new(TestNotificationService { rx }); let num_channels_per_topic = channels.iter().fold( HashMap::new(), @@ -699,6 +778,7 @@ mod tests { let mut gossip_engine = GossipEngine::::new( network.clone(), sync.clone(), + notification_service, protocol.clone(), Arc::new(TestValidator {}), None, @@ -724,22 +804,18 @@ mod tests { } } - let mut event_sender = network.inner.lock().unwrap().event_senders.pop().unwrap(); - // Register the remote peer. - event_sender - .start_send(Event::NotificationStreamOpened { - remote: remote_peer, - protocol: protocol.clone(), - negotiated_fallback: None, - role: ObservedRole::Authority, - received_handshake: vec![], - }) - .expect("Event stream is unbounded; qed."); + tx.start_send(NotificationEvent::NotificationStreamOpened { + peer: remote_peer, + direction: Direction::Inbound, + negotiated_fallback: None, + handshake: Roles::FULL.encode(), + }) + .unwrap(); // Send messages into the network event stream. for (i_notification, messages) in notifications.iter().enumerate() { - let messages = messages + let messages: Vec> = messages .into_iter() .enumerate() .map(|(i_message, Message { topic })| { @@ -752,13 +828,17 @@ mod tests { message.push(i_notification.try_into().unwrap()); message.push(i_message.try_into().unwrap()); - (protocol.clone(), message.into()) + message.into() }) .collect(); - event_sender - .start_send(Event::NotificationsReceived { remote: remote_peer, messages }) - .expect("Event stream is unbounded; qed."); + for message in messages { + tx.start_send(NotificationEvent::NotificationReceived { + peer: remote_peer, + notification: message, + }) + .unwrap(); + } } let mut received_msgs_per_topic_all_chan = HashMap::::new(); diff --git a/substrate/client/network-gossip/src/state_machine.rs b/substrate/client/network-gossip/src/state_machine.rs index 4bfb5a7d37f..91b56b0f097 100644 --- a/substrate/client/network-gossip/src/state_machine.rs +++ b/substrate/client/network-gossip/src/state_machine.rs @@ -23,7 +23,7 @@ use libp2p::PeerId; use schnellru::{ByLength, LruMap}; use prometheus_endpoint::{register, Counter, PrometheusError, Registry, U64}; -use sc_network::types::ProtocolName; +use sc_network::{types::ProtocolName, NotificationService}; use sc_network_common::role::ObservedRole; use sp_runtime::traits::{Block as BlockT, Hash, HashingFor}; use std::{collections::HashMap, iter, sync::Arc, time, time::Instant}; @@ -74,33 +74,33 @@ struct MessageEntry { /// Local implementation of `ValidatorContext`. struct NetworkContext<'g, 'p, B: BlockT> { gossip: &'g mut ConsensusGossip, - network: &'p mut dyn Network, + notification_service: &'p mut Box, } impl<'g, 'p, B: BlockT> ValidatorContext for NetworkContext<'g, 'p, B> { /// Broadcast all messages with given topic to peers that do not have it yet. fn broadcast_topic(&mut self, topic: B::Hash, force: bool) { - self.gossip.broadcast_topic(self.network, topic, force); + self.gossip.broadcast_topic(self.notification_service, topic, force); } /// Broadcast a message to all peers that have not received it previously. fn broadcast_message(&mut self, topic: B::Hash, message: Vec, force: bool) { - self.gossip.multicast(self.network, topic, message, force); + self.gossip.multicast(self.notification_service, topic, message, force); } /// Send addressed message to a peer. fn send_message(&mut self, who: &PeerId, message: Vec) { - self.network.write_notification(*who, self.gossip.protocol.clone(), message); + self.notification_service.send_sync_notification(who, message); } /// Send all messages with given topic to a peer. fn send_topic(&mut self, who: &PeerId, topic: B::Hash, force: bool) { - self.gossip.send_topic(self.network, who, topic, force); + self.gossip.send_topic(self.notification_service, who, topic, force); } } fn propagate<'a, B: BlockT, I>( - network: &mut dyn Network, + notification_service: &mut Box, protocol: ProtocolName, messages: I, intent: MessageIntent, @@ -147,7 +147,7 @@ where ?message, "Propagating message", ); - network.write_notification(*id, protocol.clone(), message.clone()); + notification_service.send_sync_notification(id, message.clone()); } } } @@ -191,7 +191,12 @@ impl ConsensusGossip { } /// Handle new connected peer. - pub fn new_peer(&mut self, network: &mut dyn Network, who: PeerId, role: ObservedRole) { + pub fn new_peer( + &mut self, + notification_service: &mut Box, + who: PeerId, + role: ObservedRole, + ) { tracing::trace!( target:"gossip", %who, @@ -202,7 +207,7 @@ impl ConsensusGossip { self.peers.insert(who, PeerConsensus { known_messages: Default::default() }); let validator = self.validator.clone(); - let mut context = NetworkContext { gossip: self, network }; + let mut context = NetworkContext { gossip: self, notification_service }; validator.new_peer(&mut context, &who, role); } @@ -233,30 +238,35 @@ impl ConsensusGossip { } /// Call when a peer has been disconnected to stop tracking gossip status. - pub fn peer_disconnected(&mut self, network: &mut dyn Network, who: PeerId) { + pub fn peer_disconnected( + &mut self, + notification_service: &mut Box, + who: PeerId, + ) { let validator = self.validator.clone(); - let mut context = NetworkContext { gossip: self, network }; + let mut context = NetworkContext { gossip: self, notification_service }; validator.peer_disconnected(&mut context, &who); self.peers.remove(&who); } /// Perform periodic maintenance - pub fn tick(&mut self, network: &mut dyn Network) { + pub fn tick(&mut self, notification_service: &mut Box) { self.collect_garbage(); if Instant::now() >= self.next_broadcast { - self.rebroadcast(network); + self.rebroadcast(notification_service); self.next_broadcast = Instant::now() + REBROADCAST_INTERVAL; } } /// Rebroadcast all messages to all peers. - fn rebroadcast(&mut self, network: &mut dyn Network) { + fn rebroadcast(&mut self, notification_service: &mut Box) { let messages = self .messages .iter() .map(|entry| (&entry.message_hash, &entry.topic, &entry.message)); + propagate( - network, + notification_service, self.protocol.clone(), messages, MessageIntent::PeriodicRebroadcast, @@ -266,7 +276,12 @@ impl ConsensusGossip { } /// Broadcast all messages with given topic. - pub fn broadcast_topic(&mut self, network: &mut dyn Network, topic: B::Hash, force: bool) { + pub fn broadcast_topic( + &mut self, + notification_service: &mut Box, + topic: B::Hash, + force: bool, + ) { let messages = self.messages.iter().filter_map(|entry| { if entry.topic == topic { Some((&entry.message_hash, &entry.topic, &entry.message)) @@ -276,7 +291,7 @@ impl ConsensusGossip { }); let intent = if force { MessageIntent::ForcedBroadcast } else { MessageIntent::Broadcast }; propagate( - network, + notification_service, self.protocol.clone(), messages, intent, @@ -327,6 +342,7 @@ impl ConsensusGossip { pub fn on_incoming( &mut self, network: &mut dyn Network, + notification_service: &mut Box, who: PeerId, messages: Vec>, ) -> Vec<(B::Hash, TopicNotification)> { @@ -367,7 +383,7 @@ impl ConsensusGossip { // validate the message let validation = { let validator = self.validator.clone(); - let mut context = NetworkContext { gossip: self, network }; + let mut context = NetworkContext { gossip: self, notification_service }; validator.validate(&mut context, &who, &message) }; @@ -414,7 +430,7 @@ impl ConsensusGossip { /// Send all messages with given topic to a peer. pub fn send_topic( &mut self, - network: &mut dyn Network, + notification_service: &mut Box, who: &PeerId, topic: B::Hash, force: bool, @@ -443,7 +459,7 @@ impl ConsensusGossip { ?entry.message, "Sending topic message", ); - network.write_notification(*who, self.protocol.clone(), entry.message.clone()); + notification_service.send_sync_notification(who, entry.message.clone()); } } } @@ -451,7 +467,7 @@ impl ConsensusGossip { /// Multicast a message to all peers. pub fn multicast( &mut self, - network: &mut dyn Network, + notification_service: &mut Box, topic: B::Hash, message: Vec, force: bool, @@ -460,7 +476,7 @@ impl ConsensusGossip { self.register_message_hashed(message_hash, topic, message.clone(), None); let intent = if force { MessageIntent::ForcedBroadcast } else { MessageIntent::Broadcast }; propagate( - network, + notification_service, self.protocol.clone(), iter::once((&message_hash, &topic, &message)), intent, @@ -471,7 +487,12 @@ impl ConsensusGossip { /// Send addressed message to a peer. The message is not kept or multicast /// later on. - pub fn send_message(&mut self, network: &mut dyn Network, who: &PeerId, message: Vec) { + pub fn send_message( + &mut self, + notification_service: &mut Box, + who: &PeerId, + message: Vec, + ) { let peer = match self.peers.get_mut(who) { None => return, Some(peer) => peer, @@ -488,7 +509,7 @@ impl ConsensusGossip { ); peer.known_messages.insert(message_hash); - network.write_notification(*who, self.protocol.clone(), message); + notification_service.send_sync_notification(who, message) } } @@ -524,9 +545,9 @@ mod tests { use crate::multiaddr::Multiaddr; use futures::prelude::*; use sc_network::{ - config::MultiaddrWithPeerId, event::Event, NetworkBlock, NetworkEventStream, - NetworkNotification, NetworkPeers, NotificationSenderError, - NotificationSenderT as NotificationSender, ReputationChange, + config::MultiaddrWithPeerId, event::Event, service::traits::NotificationEvent, MessageSink, + NetworkBlock, NetworkEventStream, NetworkNotification, NetworkPeers, + NotificationSenderError, NotificationSenderT as NotificationSender, ReputationChange, }; use sp_runtime::{ testing::{Block as RawBlock, ExtrinsicWrapper, H256}, @@ -651,6 +672,10 @@ mod tests { fn sync_num_connected(&self) -> usize { unimplemented!(); } + + fn peer_role(&self, _peer_id: PeerId, _handshake: Vec) -> Option { + None + } } impl NetworkEventStream for NoOpNetwork { @@ -691,6 +716,62 @@ mod tests { } } + #[derive(Debug, Default)] + struct NoOpNotificationService {} + + #[async_trait::async_trait] + impl NotificationService for NoOpNotificationService { + /// Instruct `Notifications` to open a new substream for `peer`. + async fn open_substream(&mut self, _peer: PeerId) -> Result<(), ()> { + unimplemented!(); + } + + /// Instruct `Notifications` to close substream for `peer`. + async fn close_substream(&mut self, _peer: PeerId) -> Result<(), ()> { + unimplemented!(); + } + + /// Send synchronous `notification` to `peer`. + fn send_sync_notification(&self, _peer: &PeerId, _notification: Vec) { + unimplemented!(); + } + + /// Send asynchronous `notification` to `peer`, allowing sender to exercise backpressure. + async fn send_async_notification( + &self, + _peer: &PeerId, + _notification: Vec, + ) -> Result<(), sc_network::error::Error> { + unimplemented!(); + } + + /// Set handshake for the notification protocol replacing the old handshake. + async fn set_handshake(&mut self, _handshake: Vec) -> Result<(), ()> { + unimplemented!(); + } + + fn try_set_handshake(&mut self, _handshake: Vec) -> Result<(), ()> { + unimplemented!(); + } + + /// Get next event from the `Notifications` event stream. + async fn next_event(&mut self) -> Option { + None + } + + fn clone(&mut self) -> Result, ()> { + unimplemented!(); + } + + fn protocol(&self) -> &ProtocolName { + unimplemented!(); + } + + fn message_sink(&self, _peer: &PeerId) -> Option> { + unimplemented!(); + } + } + #[test] fn collects_garbage() { struct AllowOne; @@ -773,20 +854,28 @@ mod tests { fn peer_is_removed_on_disconnect() { let mut consensus = ConsensusGossip::::new(Arc::new(AllowAll), "/foo".into(), None); - let mut network = NoOpNetwork::default(); + let mut notification_service: Box = + Box::new(NoOpNotificationService::default()); let peer_id = PeerId::random(); - consensus.new_peer(&mut network, peer_id, ObservedRole::Full); + consensus.new_peer(&mut notification_service, peer_id, ObservedRole::Full); assert!(consensus.peers.contains_key(&peer_id)); - consensus.peer_disconnected(&mut network, peer_id); + consensus.peer_disconnected(&mut notification_service, peer_id); assert!(!consensus.peers.contains_key(&peer_id)); } #[test] fn on_incoming_ignores_discarded_messages() { + let mut notification_service: Box = + Box::new(NoOpNotificationService::default()); let to_forward = ConsensusGossip::::new(Arc::new(DiscardAll), "/foo".into(), None) - .on_incoming(&mut NoOpNetwork::default(), PeerId::random(), vec![vec![1, 2, 3]]); + .on_incoming( + &mut NoOpNetwork::default(), + &mut notification_service, + PeerId::random(), + vec![vec![1, 2, 3]], + ); assert!( to_forward.is_empty(), @@ -798,11 +887,14 @@ mod tests { #[test] fn on_incoming_ignores_unregistered_peer() { let mut network = NoOpNetwork::default(); + let mut notification_service: Box = + Box::new(NoOpNotificationService::default()); let remote = PeerId::random(); let to_forward = ConsensusGossip::::new(Arc::new(AllowAll), "/foo".into(), None) .on_incoming( &mut network, + &mut notification_service, // Unregistered peer. remote, vec![vec![1, 2, 3]], @@ -822,18 +914,20 @@ mod tests { let mut consensus = ConsensusGossip::::new(Arc::new(AllowAll), "/foo".into(), None); let mut network = NoOpNetwork::default(); + let mut notification_service: Box = + Box::new(NoOpNotificationService::default()); let peer_id = PeerId::random(); - consensus.new_peer(&mut network, peer_id, ObservedRole::Full); + consensus.new_peer(&mut notification_service, peer_id, ObservedRole::Full); assert!(consensus.peers.contains_key(&peer_id)); let peer_id2 = PeerId::random(); - consensus.new_peer(&mut network, peer_id2, ObservedRole::Full); + consensus.new_peer(&mut notification_service, peer_id2, ObservedRole::Full); assert!(consensus.peers.contains_key(&peer_id2)); let message = vec![vec![1, 2, 3]]; - consensus.on_incoming(&mut network, peer_id, message.clone()); - consensus.on_incoming(&mut network, peer_id2, message.clone()); + consensus.on_incoming(&mut network, &mut notification_service, peer_id, message.clone()); + consensus.on_incoming(&mut network, &mut notification_service, peer_id2, message.clone()); assert_eq!( vec![(peer_id, rep::GOSSIP_SUCCESS)], diff --git a/substrate/client/network/Cargo.toml b/substrate/client/network/Cargo.toml index 7b0536addda..8b599f058f7 100644 --- a/substrate/client/network/Cargo.toml +++ b/substrate/client/network/Cargo.toml @@ -37,6 +37,8 @@ serde = { version = "1.0.188", features = ["derive"] } serde_json = "1.0.108" smallvec = "1.11.0" thiserror = "1.0" +tokio = { version = "1.22.0", features = ["macros", "sync"] } +tokio-stream = "0.1.7" unsigned-varint = { version = "0.7.1", features = ["futures", "asynchronous_codec"] } zeroize = "1.4.3" prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus" } diff --git a/substrate/client/network/common/src/role.rs b/substrate/client/network/common/src/role.rs index fd02c00e232..11b7a7924c4 100644 --- a/substrate/client/network/common/src/role.rs +++ b/substrate/client/network/common/src/role.rs @@ -28,7 +28,7 @@ use codec::{self, Encode, EncodeLike, Input, Output}; /// > **Note**: This enum is different from the `Role` enum. The `Role` enum indicates what a /// > node says about itself, while `ObservedRole` is a `Role` merged with the /// > information known locally about that node. -#[derive(Debug, Clone)] +#[derive(Debug, Copy, Clone, PartialEq, Eq)] pub enum ObservedRole { /// Full node. Full, @@ -45,6 +45,18 @@ impl ObservedRole { } } +impl From for ObservedRole { + fn from(roles: Roles) -> Self { + if roles.is_authority() { + ObservedRole::Authority + } else if roles.is_full() { + ObservedRole::Full + } else { + ObservedRole::Light + } + } +} + /// Role of the local node. #[derive(Debug, Clone)] pub enum Role { diff --git a/substrate/client/network/src/behaviour.rs b/substrate/client/network/src/behaviour.rs index 0aa724818e0..9f770bc3ba7 100644 --- a/substrate/client/network/src/behaviour.rs +++ b/substrate/client/network/src/behaviour.rs @@ -22,12 +22,13 @@ use crate::{ peer_info, peer_store::PeerStoreHandle, protocol::{CustomMessageOutcome, NotificationsSink, Protocol}, + protocol_controller::SetId, request_responses::{self, IfDisconnected, ProtocolConfig, RequestFailure}, + service::traits::Direction, types::ProtocolName, ReputationChange, }; -use bytes::Bytes; use futures::channel::oneshot; use libp2p::{ core::Multiaddr, identify::Info as IdentifyInfo, identity::PublicKey, kad::RecordKey, @@ -35,7 +36,6 @@ use libp2p::{ }; use parking_lot::Mutex; -use sc_network_common::role::{ObservedRole, Roles}; use sp_runtime::traits::Block as BlockT; use std::{collections::HashSet, sync::Arc, time::Duration}; @@ -97,8 +97,10 @@ pub enum BehaviourOut { NotificationStreamOpened { /// Node we opened the substream with. remote: PeerId, - /// The concerned protocol. Each protocol uses a different substream. - protocol: ProtocolName, + /// Set ID. + set_id: SetId, + /// Direction of the stream. + direction: Direction, /// If the negotiation didn't use the main name of the protocol (the one in /// `notifications_protocol`), then this field contains which name has actually been /// used. @@ -106,8 +108,6 @@ pub enum BehaviourOut { negotiated_fallback: Option, /// Object that permits sending notifications to the peer. notifications_sink: NotificationsSink, - /// Role of the remote. - role: ObservedRole, /// Received handshake. received_handshake: Vec, }, @@ -120,8 +120,8 @@ pub enum BehaviourOut { NotificationStreamReplaced { /// Id of the peer we are connected to. remote: PeerId, - /// The concerned protocol. Each protocol uses a different substream. - protocol: ProtocolName, + /// Set ID. + set_id: SetId, /// Replacement for the previous [`NotificationsSink`]. notifications_sink: NotificationsSink, }, @@ -131,16 +131,18 @@ pub enum BehaviourOut { NotificationStreamClosed { /// Node we closed the substream with. remote: PeerId, - /// The concerned protocol. Each protocol uses a different substream. - protocol: ProtocolName, + /// Set ID. + set_id: SetId, }, /// Received one or more messages from the given node using the given protocol. NotificationsReceived { /// Node we received the message from. remote: PeerId, + /// Set ID. + set_id: SetId, /// Concerned protocol and associated message. - messages: Vec<(ProtocolName, Bytes)>, + notification: Vec, }, /// We have obtained identity information from a peer, including the addresses it is listening @@ -272,44 +274,33 @@ impl Behaviour { } } -fn reported_roles_to_observed_role(roles: Roles) -> ObservedRole { - if roles.is_authority() { - ObservedRole::Authority - } else if roles.is_full() { - ObservedRole::Full - } else { - ObservedRole::Light - } -} - impl From for BehaviourOut { fn from(event: CustomMessageOutcome) -> Self { match event { CustomMessageOutcome::NotificationStreamOpened { remote, - protocol, + set_id, + direction, negotiated_fallback, - roles, received_handshake, notifications_sink, } => BehaviourOut::NotificationStreamOpened { remote, - protocol, + set_id, + direction, negotiated_fallback, - role: reported_roles_to_observed_role(roles), received_handshake, notifications_sink, }, CustomMessageOutcome::NotificationStreamReplaced { remote, - protocol, + set_id, notifications_sink, - } => BehaviourOut::NotificationStreamReplaced { remote, protocol, notifications_sink }, - CustomMessageOutcome::NotificationStreamClosed { remote, protocol } => - BehaviourOut::NotificationStreamClosed { remote, protocol }, - CustomMessageOutcome::NotificationsReceived { remote, messages } => - BehaviourOut::NotificationsReceived { remote, messages }, - CustomMessageOutcome::None => BehaviourOut::None, + } => BehaviourOut::NotificationStreamReplaced { remote, set_id, notifications_sink }, + CustomMessageOutcome::NotificationStreamClosed { remote, set_id } => + BehaviourOut::NotificationStreamClosed { remote, set_id }, + CustomMessageOutcome::NotificationsReceived { remote, set_id, notification } => + BehaviourOut::NotificationsReceived { remote, set_id, notification }, } } } diff --git a/substrate/client/network/src/config.rs b/substrate/client/network/src/config.rs index 124d73a74db..24e96843c32 100644 --- a/substrate/client/network/src/config.rs +++ b/substrate/client/network/src/config.rs @@ -23,10 +23,11 @@ pub use crate::{ discovery::DEFAULT_KADEMLIA_REPLICATION_FACTOR, - protocol::NotificationsSink, + protocol::{notification_service, NotificationsSink, ProtocolHandlePair}, request_responses::{ IncomingRequest, OutgoingResponse, ProtocolConfig as RequestResponseConfig, }, + service::traits::NotificationService, types::ProtocolName, }; @@ -47,7 +48,6 @@ pub use sc_network_common::{ ExHashT, }; -use sc_utils::mpsc::TracingUnboundedSender; use sp_runtime::traits::Block as BlockT; use std::{ @@ -454,14 +454,14 @@ impl Default for SetConfig { /// /// > **Note**: As new fields might be added in the future, please consider using the `new` method /// > and modifiers instead of creating this struct manually. -#[derive(Clone, Debug)] +#[derive(Debug)] pub struct NonDefaultSetConfig { /// Name of the notifications protocols of this set. A substream on this set will be /// considered established once this protocol is open. /// /// > **Note**: This field isn't present for the default set, as this is handled internally /// > by the networking code. - pub notifications_protocol: ProtocolName, + protocol_name: ProtocolName, /// If the remote reports that it doesn't support the protocol indicated in the /// `notifications_protocol` field, then each of these fallback names will be tried one by @@ -469,37 +469,84 @@ pub struct NonDefaultSetConfig { /// /// If a fallback is used, it will be reported in /// `sc_network::protocol::event::Event::NotificationStreamOpened::negotiated_fallback` - pub fallback_names: Vec, + fallback_names: Vec, /// Handshake of the protocol /// /// NOTE: Currently custom handshakes are not fully supported. See issue #5685 for more /// details. This field is temporarily used to allow moving the hardcoded block announcement /// protocol out of `protocol.rs`. - pub handshake: Option, + handshake: Option, /// Maximum allowed size of single notifications. - pub max_notification_size: u64, + max_notification_size: u64, /// Base configuration. - pub set_config: SetConfig, + set_config: SetConfig, + + /// Notification handle. + /// + /// Notification handle is created during `NonDefaultSetConfig` creation and its other half, + /// `Box` is given to the protocol created the config and + /// `ProtocolHandle` is given to `Notifications` when it initializes itself. This handle allows + /// `Notifications ` to communicate with the protocol directly without relaying events through + /// `sc-network.` + protocol_handle_pair: ProtocolHandlePair, } impl NonDefaultSetConfig { /// Creates a new [`NonDefaultSetConfig`]. Zero slots and accepts only reserved nodes. - pub fn new(notifications_protocol: ProtocolName, max_notification_size: u64) -> Self { - Self { - notifications_protocol, - max_notification_size, - fallback_names: Vec::new(), - handshake: None, - set_config: SetConfig { - in_peers: 0, - out_peers: 0, - reserved_nodes: Vec::new(), - non_reserved_mode: NonReservedPeerMode::Deny, + /// Also returns an object which allows the protocol to communicate with `Notifications`. + pub fn new( + protocol_name: ProtocolName, + fallback_names: Vec, + max_notification_size: u64, + handshake: Option, + set_config: SetConfig, + ) -> (Self, Box) { + let (protocol_handle_pair, notification_service) = + notification_service(protocol_name.clone()); + ( + Self { + protocol_name, + max_notification_size, + fallback_names, + handshake, + set_config, + protocol_handle_pair, }, - } + notification_service, + ) + } + + /// Get reference to protocol name. + pub fn protocol_name(&self) -> &ProtocolName { + &self.protocol_name + } + + /// Get reference to fallback protocol names. + pub fn fallback_names(&self) -> impl Iterator { + self.fallback_names.iter() + } + + /// Get reference to handshake. + pub fn handshake(&self) -> &Option { + &self.handshake + } + + /// Get maximum notification size. + pub fn max_notification_size(&self) -> u64 { + self.max_notification_size + } + + /// Get reference to `SetConfig`. + pub fn set_config(&self) -> &SetConfig { + &self.set_config + } + + /// Take `ProtocolHandlePair` from `NonDefaultSetConfig` + pub fn take_protocol_handle(self) -> ProtocolHandlePair { + self.protocol_handle_pair } /// Modifies the configuration to allow non-reserved nodes. @@ -703,9 +750,6 @@ pub struct Params { /// Block announce protocol configuration pub block_announce_config: NonDefaultSetConfig, - - /// TX channel for direct communication with `SyncingEngine` and `Protocol`. - pub tx: TracingUnboundedSender>, } /// Full network configuration. diff --git a/substrate/client/network/src/error.rs b/substrate/client/network/src/error.rs index f0828fb821f..01e8356fb55 100644 --- a/substrate/client/network/src/error.rs +++ b/substrate/client/network/src/error.rs @@ -68,6 +68,15 @@ pub enum Error { /// Name of the protocol registered multiple times. protocol: ProtocolName, }, + /// Peer does not exist. + #[error("Peer `{0}` does not exist.")] + PeerDoesntExist(PeerId), + /// Channel closed. + #[error("Channel closed")] + ChannelClosed, + /// Connection closed. + #[error("Connection closed")] + ConnectionClosed, } // Make `Debug` use the `Display` implementation. diff --git a/substrate/client/network/src/event.rs b/substrate/client/network/src/event.rs index 2913f0b5522..dc4fd53a49a 100644 --- a/substrate/client/network/src/event.rs +++ b/substrate/client/network/src/event.rs @@ -19,14 +19,12 @@ //! Network event types. These are are not the part of the protocol, but rather //! events that happen on the network like DHT get/put results received. -use crate::{types::ProtocolName, NotificationsSink}; +use crate::types::ProtocolName; use bytes::Bytes; -use futures::channel::oneshot; use libp2p::{kad::record::Key, PeerId}; -use sc_network_common::{role::ObservedRole, sync::message::BlockAnnouncesHandshake}; -use sp_runtime::traits::Block as BlockT; +use sc_network_common::role::ObservedRole; /// Events generated by DHT as a response to get_value and put_value requests. #[derive(Debug, Clone)] @@ -92,46 +90,3 @@ pub enum Event { messages: Vec<(ProtocolName, Bytes)>, }, } - -/// Event sent to `SyncingEngine` -// TODO: remove once `NotificationService` is implemented. -pub enum SyncEvent { - /// Opened a substream with the given node with the given notifications protocol. - /// - /// The protocol is always one of the notification protocols that have been registered. - NotificationStreamOpened { - /// Node we opened the substream with. - remote: PeerId, - /// Received handshake. - received_handshake: BlockAnnouncesHandshake, - /// Notification sink. - sink: NotificationsSink, - /// Is the connection inbound. - inbound: bool, - /// Channel for reporting accept/reject of the substream. - tx: oneshot::Sender, - }, - - /// Closed a substream with the given node. Always matches a corresponding previous - /// `NotificationStreamOpened` message. - NotificationStreamClosed { - /// Node we closed the substream with. - remote: PeerId, - }, - - /// Notification sink was replaced. - NotificationSinkReplaced { - /// Node we closed the substream with. - remote: PeerId, - /// Notification sink. - sink: NotificationsSink, - }, - - /// Received one or more messages from the given node using the given protocol. - NotificationsReceived { - /// Node we received the message from. - remote: PeerId, - /// Concerned protocol and associated message. - messages: Vec, - }, -} diff --git a/substrate/client/network/src/lib.rs b/substrate/client/network/src/lib.rs index 4dc9bdb4cc1..4c39c57e8df 100644 --- a/substrate/client/network/src/lib.rs +++ b/substrate/client/network/src/lib.rs @@ -244,7 +244,6 @@ mod behaviour; mod protocol; -mod service; #[cfg(test)] mod mock; @@ -258,25 +257,30 @@ pub mod peer_info; pub mod peer_store; pub mod protocol_controller; pub mod request_responses; +pub mod service; pub mod transport; pub mod types; pub mod utils; -pub use event::{DhtEvent, Event, SyncEvent}; +pub use event::{DhtEvent, Event}; #[doc(inline)] pub use libp2p::{multiaddr, Multiaddr, PeerId}; pub use request_responses::{Config, IfDisconnected, RequestFailure}; -pub use sc_network_common::{role::ObservedRole, types::ReputationChange}; +pub use sc_network_common::{ + role::{ObservedRole, Roles}, + types::ReputationChange, +}; pub use service::{ signature::Signature, traits::{ - KademliaKey, NetworkBlock, NetworkDHTProvider, NetworkEventStream, NetworkNotification, - NetworkPeers, NetworkRequest, NetworkSigner, NetworkStateInfo, NetworkStatus, - NetworkStatusProvider, NetworkSyncForkRequest, NotificationSender as NotificationSenderT, - NotificationSenderError, NotificationSenderReady, + KademliaKey, MessageSink, NetworkBlock, NetworkDHTProvider, NetworkEventStream, + NetworkNotification, NetworkPeers, NetworkRequest, NetworkSigner, NetworkStateInfo, + NetworkStatus, NetworkStatusProvider, NetworkSyncForkRequest, + NotificationSender as NotificationSenderT, NotificationSenderError, + NotificationSenderReady, NotificationService, }, - DecodingError, Keypair, NetworkService, NetworkWorker, NotificationSender, NotificationsSink, - OutboundFailure, PublicKey, + DecodingError, Keypair, NetworkService, NetworkWorker, NotificationSender, OutboundFailure, + PublicKey, }; pub use types::ProtocolName; diff --git a/substrate/client/network/src/mock.rs b/substrate/client/network/src/mock.rs index bc596b0fa57..534b8118970 100644 --- a/substrate/client/network/src/mock.rs +++ b/substrate/client/network/src/mock.rs @@ -20,6 +20,7 @@ use crate::{peer_store::PeerStoreProvider, protocol_controller::ProtocolHandle, ReputationChange}; use libp2p::PeerId; +use sc_network_common::role::ObservedRole; use std::collections::HashSet; /// No-op `PeerStore`. @@ -49,6 +50,14 @@ impl PeerStoreProvider for MockPeerStore { 0 } + fn peer_role(&self, _peer_id: &PeerId) -> Option { + None + } + + fn set_peer_role(&mut self, _peer_id: &PeerId, _role: ObservedRole) { + unimplemented!(); + } + fn outgoing_candidates(&self, _count: usize, _ignored: HashSet<&PeerId>) -> Vec { unimplemented!() } diff --git a/substrate/client/network/src/peer_store.rs b/substrate/client/network/src/peer_store.rs index 35d17e588cb..4b28b8e7544 100644 --- a/substrate/client/network/src/peer_store.rs +++ b/substrate/client/network/src/peer_store.rs @@ -23,7 +23,7 @@ use libp2p::PeerId; use log::trace; use parking_lot::Mutex; use partial_sort::PartialSort; -use sc_network_common::types::ReputationChange; +use sc_network_common::{role::ObservedRole, types::ReputationChange}; use std::{ cmp::{Ord, Ordering, PartialOrd}, collections::{hash_map::Entry, HashMap, HashSet}, @@ -66,9 +66,15 @@ pub trait PeerStoreProvider: Debug + Send { /// Adjust peer reputation. fn report_peer(&mut self, peer_id: PeerId, change: ReputationChange); + /// Set peer role. + fn set_peer_role(&mut self, peer_id: &PeerId, role: ObservedRole); + /// Get peer reputation. fn peer_reputation(&self, peer_id: &PeerId) -> i32; + /// Get peer role, if available. + fn peer_role(&self, peer_id: &PeerId) -> Option; + /// Get candidates with highest reputations for initiating outgoing connections. fn outgoing_candidates(&self, count: usize, ignored: HashSet<&PeerId>) -> Vec; } @@ -96,10 +102,18 @@ impl PeerStoreProvider for PeerStoreHandle { self.inner.lock().report_peer(peer_id, change) } + fn set_peer_role(&mut self, peer_id: &PeerId, role: ObservedRole) { + self.inner.lock().set_peer_role(peer_id, role) + } + fn peer_reputation(&self, peer_id: &PeerId) -> i32 { self.inner.lock().peer_reputation(peer_id) } + fn peer_role(&self, peer_id: &PeerId) -> Option { + self.inner.lock().peer_role(peer_id) + } + fn outgoing_candidates(&self, count: usize, ignored: HashSet<&PeerId>) -> Vec { self.inner.lock().outgoing_candidates(count, ignored) } @@ -122,13 +136,19 @@ impl PeerStoreHandle { #[derive(Debug, Clone, Copy)] struct PeerInfo { + /// Reputation of the peer. reputation: i32, + + /// Instant when the peer was last updated. last_updated: Instant, + + /// Role of the peer, if known. + role: Option, } impl Default for PeerInfo { fn default() -> Self { - Self { reputation: 0, last_updated: Instant::now() } + Self { reputation: 0, last_updated: Instant::now(), role: None } } } @@ -242,10 +262,27 @@ impl PeerStoreInner { } } + fn set_peer_role(&mut self, peer_id: &PeerId, role: ObservedRole) { + log::trace!(target: LOG_TARGET, "Set {peer_id} role to {role:?}"); + + match self.peers.entry(*peer_id) { + Entry::Occupied(mut entry) => { + entry.get_mut().role = Some(role); + }, + Entry::Vacant(entry) => { + entry.insert(PeerInfo { role: Some(role), ..Default::default() }); + }, + } + } + fn peer_reputation(&self, peer_id: &PeerId) -> i32 { self.peers.get(peer_id).map_or(0, |info| info.reputation) } + fn peer_role(&self, peer_id: &PeerId) -> Option { + self.peers.get(peer_id).map_or(None, |info| info.role) + } + fn outgoing_candidates(&self, count: usize, ignored: HashSet<&PeerId>) -> Vec { let mut candidates = self .peers diff --git a/substrate/client/network/src/protocol.rs b/substrate/client/network/src/protocol.rs index 9b94f288352..ea7977cc9ae 100644 --- a/substrate/client/network/src/protocol.rs +++ b/substrate/client/network/src/protocol.rs @@ -20,12 +20,11 @@ use crate::{ config, error, peer_store::{PeerStoreHandle, PeerStoreProvider}, protocol_controller::{self, SetId}, + service::traits::Direction, types::ProtocolName, }; -use bytes::Bytes; -use codec::{DecodeAll, Encode}; -use futures::{channel::oneshot, stream::FuturesUnordered, StreamExt}; +use codec::Encode; use libp2p::{ core::Endpoint, swarm::{ @@ -34,24 +33,23 @@ use libp2p::{ }, Multiaddr, PeerId, }; -use log::{debug, error, warn}; +use log::warn; -use sc_network_common::{role::Roles, sync::message::BlockAnnouncesHandshake}; -use sc_utils::mpsc::{TracingUnboundedReceiver, TracingUnboundedSender}; +use codec::DecodeAll; +use prometheus_endpoint::Registry; +use sc_network_common::role::Roles; +use sc_utils::mpsc::TracingUnboundedReceiver; use sp_runtime::traits::Block as BlockT; -use std::{ - collections::{HashMap, HashSet}, - future::Future, - iter, - pin::Pin, - task::Poll, -}; +use std::{collections::HashSet, iter, task::Poll}; -use message::{generic::Message as GenericMessage, Message}; use notifications::{Notifications, NotificationsOut}; -pub use notifications::{NotificationsSink, NotifsHandlerError, Ready}; +pub(crate) use notifications::ProtocolHandle; + +pub use notifications::{ + notification_service, NotificationsSink, NotifsHandlerError, ProtocolHandlePair, Ready, +}; mod notifications; @@ -64,85 +62,93 @@ pub(crate) const BLOCK_ANNOUNCES_TRANSACTIONS_SUBSTREAM_SIZE: u64 = 16 * 1024 * /// Identifier of the peerset for the block announces protocol. const HARDCODED_PEERSETS_SYNC: SetId = SetId::from(0); -mod rep { - use crate::ReputationChange as Rep; - /// We received a message that failed to decode. - pub const BAD_MESSAGE: Rep = Rep::new(-(1 << 12), "Bad message"); -} - -type PendingSyncSubstreamValidation = - Pin> + Send>>; - // Lock must always be taken in order declared here. pub struct Protocol { - /// Used to report reputation changes. - peer_store_handle: PeerStoreHandle, /// Handles opening the unique substream and sending and receiving raw messages. behaviour: Notifications, /// List of notifications protocols that have been registered. notification_protocols: Vec, - /// If we receive a new "substream open" event that contains an invalid handshake, we ask the - /// inner layer to force-close the substream. Force-closing the substream will generate a - /// "substream closed" event. This is a problem: since we can't propagate the "substream open" - /// event to the outer layers, we also shouldn't propagate this "substream closed" event. To - /// solve this, an entry is added to this map whenever an invalid handshake is received. - /// Entries are removed when the corresponding "substream closed" is later received. - bad_handshake_substreams: HashSet<(PeerId, SetId)>, - /// Connected peers on sync protocol. - peers: HashMap, - sync_substream_validations: FuturesUnordered, - tx: TracingUnboundedSender>, + /// Handle to `PeerStore`. + peer_store_handle: PeerStoreHandle, + /// Streams for peers whose handshake couldn't be determined. + bad_handshake_streams: HashSet, + sync_handle: ProtocolHandle, _marker: std::marker::PhantomData, } impl Protocol { /// Create a new instance. - pub fn new( + pub(crate) fn new( roles: Roles, + registry: &Option, notification_protocols: Vec, block_announces_protocol: config::NonDefaultSetConfig, peer_store_handle: PeerStoreHandle, protocol_controller_handles: Vec, from_protocol_controllers: TracingUnboundedReceiver, - tx: TracingUnboundedSender>, - ) -> error::Result { - let behaviour = { - Notifications::new( - protocol_controller_handles, - from_protocol_controllers, - // NOTE: Block announcement protocol is still very much hardcoded into `Protocol`. - // This protocol must be the first notification protocol given to - // `Notifications` - iter::once(notifications::ProtocolConfig { - name: block_announces_protocol.notifications_protocol.clone(), - fallback_names: block_announces_protocol.fallback_names.clone(), - handshake: block_announces_protocol.handshake.as_ref().unwrap().to_vec(), - max_notification_size: block_announces_protocol.max_notification_size, - }) - .chain(notification_protocols.iter().map(|s| notifications::ProtocolConfig { - name: s.notifications_protocol.clone(), - fallback_names: s.fallback_names.clone(), - handshake: s.handshake.as_ref().map_or(roles.encode(), |h| (*h).to_vec()), - max_notification_size: s.max_notification_size, - })), + ) -> error::Result<(Self, Vec)> { + let (behaviour, notification_protocols, handles) = { + let installed_protocols = iter::once(block_announces_protocol.protocol_name().clone()) + .chain(notification_protocols.iter().map(|p| p.protocol_name().clone())) + .collect::>(); + + // NOTE: Block announcement protocol is still very much hardcoded into + // `Protocol`. This protocol must be the first notification protocol given to + // `Notifications` + let (protocol_configs, handles): (Vec<_>, Vec<_>) = iter::once({ + let config = notifications::ProtocolConfig { + name: block_announces_protocol.protocol_name().clone(), + fallback_names: block_announces_protocol.fallback_names().cloned().collect(), + handshake: block_announces_protocol.handshake().as_ref().unwrap().to_vec(), + max_notification_size: block_announces_protocol.max_notification_size(), + }; + + let (handle, command_stream) = + block_announces_protocol.take_protocol_handle().split(); + + ((config, handle.clone(), command_stream), handle) + }) + .chain(notification_protocols.into_iter().map(|s| { + let config = notifications::ProtocolConfig { + name: s.protocol_name().clone(), + fallback_names: s.fallback_names().cloned().collect(), + handshake: s.handshake().as_ref().map_or(roles.encode(), |h| (*h).to_vec()), + max_notification_size: s.max_notification_size(), + }; + + let (handle, command_stream) = s.take_protocol_handle().split(); + + ((config, handle.clone(), command_stream), handle) + })) + .unzip(); + + ( + Notifications::new( + protocol_controller_handles, + from_protocol_controllers, + registry, + protocol_configs.into_iter(), + ), + installed_protocols, + handles, ) }; let protocol = Self { - peer_store_handle, behaviour, - notification_protocols: iter::once(block_announces_protocol.notifications_protocol) - .chain(notification_protocols.iter().map(|s| s.notifications_protocol.clone())) - .collect(), - bad_handshake_substreams: Default::default(), - peers: HashMap::new(), - sync_substream_validations: FuturesUnordered::new(), - tx, + sync_handle: handles[0].clone(), + peer_store_handle, + notification_protocols, + bad_handshake_streams: HashSet::new(), // TODO: remove when `BlockAnnouncesHandshake` is moved away from `Protocol` _marker: Default::default(), }; - Ok(protocol) + Ok((protocol, handles)) + } + + pub fn num_sync_peers(&self) -> usize { + self.sync_handle.num_peers() } /// Returns the list of all the peers we have an open channel to. @@ -163,21 +169,12 @@ impl Protocol { } } - /// Returns the number of peers we're connected to on sync protocol. - pub fn num_connected_peers(&self) -> usize { - self.peers.len() - } - - /// Set handshake for the notification protocol. - pub fn set_notification_handshake(&mut self, protocol: ProtocolName, handshake: Vec) { - if let Some(index) = self.notification_protocols.iter().position(|p| *p == protocol) { - self.behaviour.set_notif_protocol_handshake(SetId::from(index), handshake); - } else { - error!( - target: "sub-libp2p", - "set_notification_handshake with unknown protocol: {}", - protocol - ); + /// Check if role is available for `peer_id` by attempt to decode the handshake to roles and if + /// that fails, check if the role has been registered to `PeerStore`. + fn role_available(&self, peer_id: &PeerId, handshake: &Vec) -> bool { + match Roles::decode_all(&mut &handshake[..]) { + Ok(_) => true, + Err(_) => self.peer_store_handle.peer_role(&peer_id).is_some(), } } } @@ -189,25 +186,42 @@ pub enum CustomMessageOutcome { /// Notification protocols have been opened with a remote. NotificationStreamOpened { remote: PeerId, - protocol: ProtocolName, + // protocol: ProtocolName, + set_id: SetId, + /// Direction of the stream. + direction: Direction, /// See [`crate::Event::NotificationStreamOpened::negotiated_fallback`]. negotiated_fallback: Option, - roles: Roles, + /// Received handshake. received_handshake: Vec, + /// Notification sink. notifications_sink: NotificationsSink, }, /// The [`NotificationsSink`] of some notification protocols need an update. NotificationStreamReplaced { + // Peer ID. remote: PeerId, - protocol: ProtocolName, + /// Set ID. + set_id: SetId, + /// New notification sink. notifications_sink: NotificationsSink, }, /// Notification protocols have been closed with a remote. - NotificationStreamClosed { remote: PeerId, protocol: ProtocolName }, + NotificationStreamClosed { + // Peer ID. + remote: PeerId, + /// Set ID. + set_id: SetId, + }, /// Messages have been received on one or more notifications protocols. - NotificationsReceived { remote: PeerId, messages: Vec<(ProtocolName, Bytes)> }, - /// Now connected to a new peer for syncing purposes. - None, + NotificationsReceived { + // Peer ID. + remote: PeerId, + /// Set ID. + set_id: SetId, + /// Received notification. + notification: Vec, + }, } impl NetworkBehaviour for Protocol { @@ -274,23 +288,6 @@ impl NetworkBehaviour for Protocol { cx: &mut std::task::Context, params: &mut impl PollParameters, ) -> Poll>> { - while let Poll::Ready(Some(validation_result)) = - self.sync_substream_validations.poll_next_unpin(cx) - { - match validation_result { - Ok((peer, roles)) => { - self.peers.insert(peer, roles); - }, - Err(peer) => { - log::debug!( - target: "sub-libp2p", - "`SyncingEngine` rejected stream" - ); - self.behaviour.disconnect_peer(&peer, HARDCODED_PEERSETS_SYNC); - }, - } - } - let event = match self.behaviour.poll(cx, params) { Poll::Pending => return Poll::Pending, Poll::Ready(ToSwarm::GenerateEvent(ev)) => ev, @@ -307,204 +304,86 @@ impl NetworkBehaviour for Protocol { NotificationsOut::CustomProtocolOpen { peer_id, set_id, + direction, received_handshake, notifications_sink, negotiated_fallback, - inbound, - } => { - // Set number 0 is hardcoded the default set of peers we sync from. + .. + } => if set_id == HARDCODED_PEERSETS_SYNC { - // `received_handshake` can be either a `Status` message if received from the - // legacy substream ,or a `BlockAnnouncesHandshake` if received from the block - // announces substream. - match as DecodeAll>::decode_all(&mut &received_handshake[..]) { - Ok(GenericMessage::Status(handshake)) => { - let roles = handshake.roles; - let handshake = BlockAnnouncesHandshake:: { - roles: handshake.roles, - best_number: handshake.best_number, - best_hash: handshake.best_hash, - genesis_hash: handshake.genesis_hash, - }; - - let (tx, rx) = oneshot::channel(); - let _ = self.tx.unbounded_send( - crate::SyncEvent::NotificationStreamOpened { - inbound, - remote: peer_id, - received_handshake: handshake, - sink: notifications_sink, - tx, - }, - ); - self.sync_substream_validations.push(Box::pin(async move { - match rx.await { - Ok(accepted) => - if accepted { - Ok((peer_id, roles)) - } else { - Err(peer_id) - }, - Err(_) => Err(peer_id), - } - })); - - CustomMessageOutcome::None - }, - Ok(msg) => { - debug!( - target: "sync", - "Expected Status message from {}, but got {:?}", - peer_id, - msg, - ); - self.peer_store_handle.report_peer(peer_id, rep::BAD_MESSAGE); - CustomMessageOutcome::None - }, - Err(err) => { - match as DecodeAll>::decode_all( - &mut &received_handshake[..], - ) { - Ok(handshake) => { - let roles = handshake.roles; - - let (tx, rx) = oneshot::channel(); - let _ = self.tx.unbounded_send( - crate::SyncEvent::NotificationStreamOpened { - inbound, - remote: peer_id, - received_handshake: handshake, - sink: notifications_sink, - tx, - }, - ); - self.sync_substream_validations.push(Box::pin(async move { - match rx.await { - Ok(accepted) => - if accepted { - Ok((peer_id, roles)) - } else { - Err(peer_id) - }, - Err(_) => Err(peer_id), - } - })); - CustomMessageOutcome::None - }, - Err(err2) => { - log::debug!( - target: "sync", - "Couldn't decode handshake sent by {}: {:?}: {} & {}", - peer_id, - received_handshake, - err, - err2, - ); - self.peer_store_handle.report_peer(peer_id, rep::BAD_MESSAGE); - CustomMessageOutcome::None - }, - } - }, - } + let _ = self.sync_handle.report_substream_opened( + peer_id, + direction, + received_handshake, + negotiated_fallback, + notifications_sink, + ); + None } else { - match ( - Roles::decode_all(&mut &received_handshake[..]), - self.peers.get(&peer_id), - ) { - (Ok(roles), _) => CustomMessageOutcome::NotificationStreamOpened { + match self.role_available(&peer_id, &received_handshake) { + true => Some(CustomMessageOutcome::NotificationStreamOpened { remote: peer_id, - protocol: self.notification_protocols[usize::from(set_id)].clone(), + set_id, + direction, negotiated_fallback, - roles, received_handshake, notifications_sink, - }, - (Err(_), Some(roles)) if received_handshake.is_empty() => { - // As a convenience, we allow opening substreams for "external" - // notification protocols with an empty handshake. This fetches the - // roles from the locally-known roles. - // TODO: remove this after https://github.com/paritytech/substrate/issues/5685 - CustomMessageOutcome::NotificationStreamOpened { - remote: peer_id, - protocol: self.notification_protocols[usize::from(set_id)].clone(), - negotiated_fallback, - roles: *roles, - received_handshake, - notifications_sink, - } - }, - (Err(err), _) => { - debug!(target: "sync", "Failed to parse remote handshake: {}", err); - self.bad_handshake_substreams.insert((peer_id, set_id)); - self.behaviour.disconnect_peer(&peer_id, set_id); - self.peer_store_handle.report_peer(peer_id, rep::BAD_MESSAGE); - CustomMessageOutcome::None + }), + false => { + self.bad_handshake_streams.insert(peer_id); + None }, } - } - }, + }, NotificationsOut::CustomProtocolReplaced { peer_id, notifications_sink, set_id } => - if self.bad_handshake_substreams.contains(&(peer_id, set_id)) { - CustomMessageOutcome::None - } else if set_id == HARDCODED_PEERSETS_SYNC { - let _ = self.tx.unbounded_send(crate::SyncEvent::NotificationSinkReplaced { - remote: peer_id, - sink: notifications_sink, - }); - CustomMessageOutcome::None + if set_id == HARDCODED_PEERSETS_SYNC { + let _ = self + .sync_handle + .report_notification_sink_replaced(peer_id, notifications_sink); + None } else { - CustomMessageOutcome::NotificationStreamReplaced { - remote: peer_id, - protocol: self.notification_protocols[usize::from(set_id)].clone(), - notifications_sink, - } + (!self.bad_handshake_streams.contains(&peer_id)).then_some( + CustomMessageOutcome::NotificationStreamReplaced { + remote: peer_id, + set_id, + notifications_sink, + }, + ) }, NotificationsOut::CustomProtocolClosed { peer_id, set_id } => { - if self.bad_handshake_substreams.remove(&(peer_id, set_id)) { - // The substream that has just been closed had been opened with a bad - // handshake. The outer layers have never received an opening event about this - // substream, and consequently shouldn't receive a closing event either. - CustomMessageOutcome::None - } else if set_id == HARDCODED_PEERSETS_SYNC { - let _ = self.tx.unbounded_send(crate::SyncEvent::NotificationStreamClosed { - remote: peer_id, - }); - self.peers.remove(&peer_id); - CustomMessageOutcome::None + if set_id == HARDCODED_PEERSETS_SYNC { + let _ = self.sync_handle.report_substream_closed(peer_id); + None } else { - CustomMessageOutcome::NotificationStreamClosed { - remote: peer_id, - protocol: self.notification_protocols[usize::from(set_id)].clone(), - } + (!self.bad_handshake_streams.remove(&peer_id)).then_some( + CustomMessageOutcome::NotificationStreamClosed { remote: peer_id, set_id }, + ) } }, NotificationsOut::Notification { peer_id, set_id, message } => { - if self.bad_handshake_substreams.contains(&(peer_id, set_id)) { - CustomMessageOutcome::None - } else if set_id == HARDCODED_PEERSETS_SYNC { - let _ = self.tx.unbounded_send(crate::SyncEvent::NotificationsReceived { - remote: peer_id, - messages: vec![message.freeze()], - }); - CustomMessageOutcome::None + if set_id == HARDCODED_PEERSETS_SYNC { + let _ = self + .sync_handle + .report_notification_received(peer_id, message.freeze().into()); + None } else { - let protocol_name = self.notification_protocols[usize::from(set_id)].clone(); - CustomMessageOutcome::NotificationsReceived { - remote: peer_id, - messages: vec![(protocol_name, message.freeze())], - } + (!self.bad_handshake_streams.contains(&peer_id)).then_some( + CustomMessageOutcome::NotificationsReceived { + remote: peer_id, + set_id, + notification: message.freeze().into(), + }, + ) } }, }; - if !matches!(outcome, CustomMessageOutcome::None) { - return Poll::Ready(ToSwarm::GenerateEvent(outcome)) + match outcome { + Some(event) => Poll::Ready(ToSwarm::GenerateEvent(event)), + None => { + cx.waker().wake_by_ref(); + Poll::Pending + }, } - - // This block can only be reached if an event was pulled from the behaviour and that - // resulted in `CustomMessageOutcome::None`. Since there might be another pending - // message from the behaviour, the task is scheduled again. - cx.waker().wake_by_ref(); - Poll::Pending } } diff --git a/substrate/client/network/src/protocol/message.rs b/substrate/client/network/src/protocol/message.rs index 66dca297537..247580083f9 100644 --- a/substrate/client/network/src/protocol/message.rs +++ b/substrate/client/network/src/protocol/message.rs @@ -29,6 +29,7 @@ use sc_network_common::message::RequestId; use sp_runtime::traits::{Block as BlockT, Header as HeaderT}; /// Type alias for using the message type using block type parameters. +#[allow(unused)] pub type Message = generic::Message< ::Header, ::Hash, diff --git a/substrate/client/network/src/protocol/notifications.rs b/substrate/client/network/src/protocol/notifications.rs index aa49cfcf9d4..10fa329097d 100644 --- a/substrate/client/network/src/protocol/notifications.rs +++ b/substrate/client/network/src/protocol/notifications.rs @@ -22,9 +22,13 @@ pub use self::{ behaviour::{Notifications, NotificationsOut, ProtocolConfig}, handler::{NotificationsSink, NotifsHandlerError, Ready}, + service::{notification_service, ProtocolHandlePair}, }; +pub(crate) use self::service::ProtocolHandle; + mod behaviour; mod handler; +mod service; mod tests; mod upgrade; diff --git a/substrate/client/network/src/protocol/notifications/behaviour.rs b/substrate/client/network/src/protocol/notifications/behaviour.rs index b78f15f8529..ef0c6540eee 100644 --- a/substrate/client/network/src/protocol/notifications/behaviour.rs +++ b/substrate/client/network/src/protocol/notifications/behaviour.rs @@ -17,16 +17,18 @@ // along with this program. If not, see . use crate::{ - protocol::notifications::handler::{ - self, NotificationsSink, NotifsHandler, NotifsHandlerIn, NotifsHandlerOut, + protocol::notifications::{ + handler::{self, NotificationsSink, NotifsHandler, NotifsHandlerIn, NotifsHandlerOut}, + service::{metrics, NotificationCommand, ProtocolHandle, ValidationCallResult}, }, protocol_controller::{self, IncomingIndex, Message, SetId}, + service::traits::{Direction, ValidationResult}, types::ProtocolName, }; use bytes::BytesMut; use fnv::FnvHashMap; -use futures::prelude::*; +use futures::{future::BoxFuture, prelude::*, stream::FuturesUnordered}; use libp2p::{ core::{ConnectedPoint, Endpoint, Multiaddr}, swarm::{ @@ -36,11 +38,15 @@ use libp2p::{ }, PeerId, }; -use log::{debug, error, info, trace, warn}; +use log::{debug, error, trace, warn}; use parking_lot::RwLock; +use prometheus_endpoint::Registry; use rand::distributions::{Distribution as _, Uniform}; use sc_utils::mpsc::TracingUnboundedReceiver; use smallvec::SmallVec; +use tokio::sync::oneshot::error::RecvError; +use tokio_stream::StreamMap; + use std::{ cmp, collections::{hash_map::Entry, VecDeque}, @@ -51,6 +57,13 @@ use std::{ time::{Duration, Instant}, }; +/// Type representing a pending substream validation. +type PendingInboundValidation = + BoxFuture<'static, (Result, IncomingIndex)>; + +/// Logging target for the file. +const LOG_TARGET: &str = "sub-libp2p"; + /// Network behaviour that handles opening substreams for custom protocols with other peers. /// /// # How it works @@ -106,6 +119,12 @@ pub struct Notifications { /// Notification protocols. Entries never change after initialization. notif_protocols: Vec, + /// Protocol handles. + protocol_handles: Vec, + + // Command streams. + command_streams: StreamMap + Send + Unpin>>, + /// Protocol controllers are responsible for peer connections management. protocol_controller_handles: Vec, @@ -138,6 +157,18 @@ pub struct Notifications { /// Events to produce from `poll()`. events: VecDeque>, + + /// Pending inbound substream validations. + // + // NOTE: it's possible to read a stale response from `pending_inbound_validations` + // as the substream may get closed by the remote peer before the protocol has had + // a chance to validate it. [`Notifications`] must compare the `crate::peerset::IncomingIndex` + // returned by the completed future against the `crate::peerset::IncomingIndex` stored in + // `PeerState::Incoming` to check whether the completed future is stale or not. + pending_inbound_validations: FuturesUnordered, + + /// Metrics for notifications. + metrics: Option, } /// Configuration for a notifications protocol. @@ -235,6 +266,9 @@ enum PeerState { /// Incoming index tracking this connection. incoming_index: IncomingIndex, + /// Peerset has signaled it wants the substream closed. + peerset_rejected: bool, + /// List of connections with this peer, and their state. connections: SmallVec<[(ConnectionId, ConnectionState); crate::MAX_CONNECTIONS_PER_PEER]>, }, @@ -303,6 +337,8 @@ struct IncomingPeer { alive: bool, /// Id that the we sent to the peerset. incoming_id: IncomingIndex, + /// Received handshake. + handshake: Vec, } /// Event that can be emitted by the `Notifications`. @@ -314,6 +350,8 @@ pub enum NotificationsOut { peer_id: PeerId, /// Peerset set ID the substream is tied to. set_id: SetId, + /// Direction of the stream. + direction: Direction, /// If `Some`, a fallback protocol name has been used rather the main protocol name. /// Always matches one of the fallback names passed at initialization. negotiated_fallback: Option, @@ -364,24 +402,52 @@ pub enum NotificationsOut { impl Notifications { /// Creates a `CustomProtos`. - pub fn new( + pub(crate) fn new( protocol_controller_handles: Vec, from_protocol_controllers: TracingUnboundedReceiver, - notif_protocols: impl Iterator, + registry: &Option, + notif_protocols: impl Iterator< + Item = ( + ProtocolConfig, + ProtocolHandle, + Box + Send + Unpin>, + ), + >, ) -> Self { - let notif_protocols = notif_protocols - .map(|cfg| handler::ProtocolConfig { - name: cfg.name, - fallback_names: cfg.fallback_names, - handshake: Arc::new(RwLock::new(cfg.handshake)), - max_notification_size: cfg.max_notification_size, + let (notif_protocols, protocol_handles): (Vec<_>, Vec<_>) = notif_protocols + .map(|(cfg, protocol_handle, command_stream)| { + ( + handler::ProtocolConfig { + name: cfg.name, + fallback_names: cfg.fallback_names, + handshake: Arc::new(RwLock::new(cfg.handshake)), + max_notification_size: cfg.max_notification_size, + }, + (protocol_handle, command_stream), + ) }) - .collect::>(); - + .unzip(); assert!(!notif_protocols.is_empty()); + let metrics = registry.as_ref().and_then(|registry| metrics::register(®istry).ok()); + let (mut protocol_handles, command_streams): (Vec<_>, Vec<_>) = protocol_handles + .into_iter() + .enumerate() + .map(|(set_id, (mut protocol_handle, command_stream))| { + protocol_handle.set_metrics(metrics.clone()); + + (protocol_handle, (set_id, command_stream)) + }) + .unzip(); + + protocol_handles.iter_mut().skip(1).for_each(|handle| { + handle.delegate_to_peerset(true); + }); + Self { notif_protocols, + protocol_handles, + command_streams: StreamMap::from_iter(command_streams.into_iter()), protocol_controller_handles, from_protocol_controllers, peers: FnvHashMap::default(), @@ -390,6 +456,8 @@ impl Notifications { incoming: SmallVec::new(), next_incoming_index: IncomingIndex(0), events: VecDeque::new(), + pending_inbound_validations: FuturesUnordered::new(), + metrics, } } @@ -807,14 +875,21 @@ impl Notifications { *entry.into_mut() = PeerState::Backoff { timer, timer_deadline } }, - // Invalid state transitions. - st @ PeerState::Incoming { .. } => { - info!( + // `ProtocolController` disconnected peer while it was still being validated by the + // protocol, mark the connection as rejected and once the validation is received from + // the protocol, reject the substream + PeerState::Incoming { backoff_until, connections, incoming_index, .. } => { + debug!( target: "sub-libp2p", "PSM => Drop({}, {:?}): Ignoring obsolete disconnect, we are awaiting accept/reject.", entry.key().0, set_id, ); - *entry.into_mut() = st; + *entry.into_mut() = PeerState::Incoming { + backoff_until, + connections, + incoming_index, + peerset_rejected: true, + }; }, PeerState::Poisoned => { error!(target: "sub-libp2p", "State of {:?} is poisoned", entry.key()); @@ -823,20 +898,71 @@ impl Notifications { } } + /// Substream has been accepted by the `ProtocolController` and must now be sent + /// to the protocol for validation. + fn peerset_report_preaccept(&mut self, index: IncomingIndex) { + let Some(pos) = self.incoming.iter().position(|i| i.incoming_id == index) else { + error!(target: LOG_TARGET, "PSM => Preaccept({:?}): Invalid index", index); + return + }; + + trace!( + target: LOG_TARGET, + "PSM => Preaccept({:?}): Sent to protocol for validation", + index + ); + let incoming = &self.incoming[pos]; + + match self.protocol_handles[usize::from(incoming.set_id)] + .report_incoming_substream(incoming.peer_id, incoming.handshake.clone()) + { + Ok(ValidationCallResult::Delegated) => { + self.protocol_report_accept(index); + }, + Ok(ValidationCallResult::WaitForValidation(rx)) => { + self.pending_inbound_validations + .push(Box::pin(async move { (rx.await, index) })); + }, + Err(err) => { + // parachain collators enable the syncing protocol but `NotificationService` for + // `SyncingEngine` is not created which causes `report_incoming_substream()` to + // fail. This is not a fatal error and should be ignored even though in typical + // cases the `NotificationService` not existing is a fatal error and indicates that + // the protocol has exited. Until the parachain collator issue is fixed, just report + // and error and reject the peer. + debug!(target: LOG_TARGET, "protocol has exited: {err:?} {:?}", incoming.set_id); + + self.protocol_report_reject(index); + }, + } + } + /// Function that is called when the peerset wants us to accept a connection /// request from a peer. - fn peerset_report_accept(&mut self, index: IncomingIndex) { - let incoming = if let Some(pos) = self.incoming.iter().position(|i| i.incoming_id == index) - { - self.incoming.remove(pos) - } else { - error!(target: "sub-libp2p", "PSM => Accept({:?}): Invalid index", index); - return + fn protocol_report_accept(&mut self, index: IncomingIndex) { + let (pos, incoming) = + if let Some(pos) = self.incoming.iter().position(|i| i.incoming_id == index) { + (pos, self.incoming.get(pos)) + } else { + error!(target: "sub-libp2p", "PSM => Accept({:?}): Invalid index", index); + return + }; + + let Some(incoming) = incoming else { + error!(target: "sub-libp2p", "Incoming connection ({:?}) doesn't exist", index); + debug_assert!(false); + return; }; if !incoming.alive { - trace!(target: "sub-libp2p", "PSM => Accept({:?}, {}, {:?}): Obsolete incoming", - index, incoming.peer_id, incoming.set_id); + trace!( + target: "sub-libp2p", + "PSM => Accept({:?}, {}, {:?}): Obsolete incoming", + index, + incoming.peer_id, + incoming.set_id, + ); + match self.peers.get_mut(&(incoming.peer_id, incoming.set_id)) { Some(PeerState::DisabledPendingEnable { .. }) | Some(PeerState::Enabled { .. }) => { }, @@ -847,26 +973,42 @@ impl Notifications { .dropped(incoming.peer_id); }, } + + self.incoming.remove(pos); return } let state = match self.peers.get_mut(&(incoming.peer_id, incoming.set_id)) { Some(s) => s, None => { - debug_assert!(false); + log::debug!( + target: "sub-libp2p", + "Connection to {:?} closed, ({:?} {:?}), ignoring accept", + incoming.peer_id, + incoming.set_id, + index, + ); + self.incoming.remove(pos); return }, }; match mem::replace(state, PeerState::Poisoned) { // Incoming => Enabled - PeerState::Incoming { mut connections, incoming_index, .. } => { + PeerState::Incoming { + mut connections, + incoming_index, + peerset_rejected, + backoff_until, + } => { if index < incoming_index { warn!( target: "sub-libp2p", "PSM => Accept({:?}, {}, {:?}): Ignoring obsolete incoming index, we are already awaiting {:?}.", index, incoming.peer_id, incoming.set_id, incoming_index ); + + self.incoming.remove(pos); return } else if index > incoming_index { error!( @@ -874,12 +1016,39 @@ impl Notifications { "PSM => Accept({:?}, {}, {:?}): Ignoring incoming index from the future, we are awaiting {:?}.", index, incoming.peer_id, incoming.set_id, incoming_index ); + + self.incoming.remove(pos); debug_assert!(false); return } - trace!(target: "sub-libp2p", "PSM => Accept({:?}, {}, {:?}): Enabling connections.", - index, incoming.peer_id, incoming.set_id); + // while the substream was being validated by the protocol, `Peerset` had request + // for the it to be closed so reject the substream now + if peerset_rejected { + trace!( + target: "sub-libp2p", + "Protocol accepted ({:?} {:?} {:?}) but Peerset had request disconnection, rejecting", + index, + incoming.peer_id, + incoming.set_id + ); + + *state = PeerState::Incoming { + connections, + backoff_until, + peerset_rejected, + incoming_index, + }; + return self.report_reject(index).map_or((), |_| ()); + } + + trace!( + target: "sub-libp2p", + "PSM => Accept({:?}, {}, {:?}): Enabling connections.", + index, + incoming.peer_id, + incoming.set_id + ); debug_assert!(connections .iter() @@ -898,53 +1067,85 @@ impl Notifications { *connec_state = ConnectionState::Opening; } + self.incoming.remove(pos); *state = PeerState::Enabled { connections }; }, - + st @ PeerState::Disabled { .. } | st @ PeerState::Backoff { .. } => { + self.incoming.remove(pos); + *state = st; + }, // Any state other than `Incoming` is invalid. peer => { - error!(target: "sub-libp2p", + error!( + target: "sub-libp2p", "State mismatch in libp2p: Expected alive incoming. Got {:?}.", - peer); + peer + ); + + self.incoming.remove(pos); debug_assert!(false); }, } } - /// Function that is called when the peerset wants us to reject an incoming peer. + /// Function that is called when `ProtocolController` wants us to reject an incoming peer. fn peerset_report_reject(&mut self, index: IncomingIndex) { + let _ = self.report_reject(index); + } + + /// Function that is called when the protocol wants us to reject an incoming peer. + fn protocol_report_reject(&mut self, index: IncomingIndex) { + if let Some((set_id, peer_id)) = self.report_reject(index) { + self.protocol_controller_handles[usize::from(set_id)].dropped(peer_id) + } + } + + /// Function that is called when the peerset wants us to reject an incoming peer. + fn report_reject(&mut self, index: IncomingIndex) -> Option<(SetId, PeerId)> { let incoming = if let Some(pos) = self.incoming.iter().position(|i| i.incoming_id == index) { self.incoming.remove(pos) } else { error!(target: "sub-libp2p", "PSM => Reject({:?}): Invalid index", index); - return + return None }; if !incoming.alive { - trace!(target: "sub-libp2p", "PSM => Reject({:?}, {}, {:?}): Obsolete incoming, \ - ignoring", index, incoming.peer_id, incoming.set_id); - return + trace!( + target: "sub-libp2p", + "PSM => Reject({:?}, {}, {:?}): Obsolete incoming, ignoring", + index, + incoming.peer_id, + incoming.set_id, + ); + + return None } let state = match self.peers.get_mut(&(incoming.peer_id, incoming.set_id)) { Some(s) => s, None => { - debug_assert!(false); - return + log::debug!( + target: "sub-libp2p", + "Connection to {:?} closed, ({:?} {:?}), ignoring accept", + incoming.peer_id, + incoming.set_id, + index, + ); + return None }, }; match mem::replace(state, PeerState::Poisoned) { // Incoming => Disabled - PeerState::Incoming { mut connections, backoff_until, incoming_index } => { + PeerState::Incoming { mut connections, backoff_until, incoming_index, .. } => { if index < incoming_index { warn!( target: "sub-libp2p", "PSM => Reject({:?}, {}, {:?}): Ignoring obsolete incoming index, we are already awaiting {:?}.", index, incoming.peer_id, incoming.set_id, incoming_index ); - return + return None } else if index > incoming_index { error!( target: "sub-libp2p", @@ -952,7 +1153,7 @@ impl Notifications { index, incoming.peer_id, incoming.set_id, incoming_index ); debug_assert!(false); - return + return None } trace!(target: "sub-libp2p", "PSM => Reject({:?}, {}, {:?}): Rejecting connections.", @@ -976,10 +1177,20 @@ impl Notifications { } *state = PeerState::Disabled { connections, backoff_until }; + Some((incoming.set_id, incoming.peer_id)) + }, + // connection to peer may have been closed already + st @ PeerState::Disabled { .. } | st @ PeerState::Backoff { .. } => { + *state = st; + None + }, + peer => { + error!( + target: LOG_TARGET, + "State mismatch in libp2p: Expected alive incoming. Got {peer:?}.", + ); + None }, - peer => error!(target: "sub-libp2p", - "State mismatch in libp2p: Expected alive incoming. Got {:?}.", - peer), } } } @@ -1021,6 +1232,7 @@ impl NetworkBehaviour for Notifications { send_back_addr: remote_addr.clone(), }, self.notif_protocols.clone(), + self.metrics.clone(), )) } @@ -1035,6 +1247,7 @@ impl NetworkBehaviour for Notifications { peer, ConnectedPoint::Dialer { address: addr.clone(), role_override }, self.notif_protocols.clone(), + self.metrics.clone(), )) } @@ -1195,7 +1408,12 @@ impl NetworkBehaviour for Notifications { }, // Incoming => Incoming | Disabled | Backoff | Ø - PeerState::Incoming { mut connections, backoff_until, incoming_index } => { + PeerState::Incoming { + mut connections, + backoff_until, + incoming_index, + peerset_rejected, + } => { trace!( target: "sub-libp2p", "Libp2p => Disconnected({}, {:?}, {:?}): OpenDesiredByRemote.", @@ -1274,6 +1492,7 @@ impl NetworkBehaviour for Notifications { connections, backoff_until, incoming_index, + peerset_rejected, }; } }, @@ -1313,7 +1532,7 @@ impl NetworkBehaviour for Notifications { let event = NotificationsOut::CustomProtocolReplaced { peer_id, set_id, - notifications_sink: replacement_sink, + notifications_sink: replacement_sink.clone(), }; self.events.push_back(ToSwarm::GenerateEvent(event)); } @@ -1474,7 +1693,7 @@ impl NetworkBehaviour for Notifications { event: THandlerOutEvent, ) { match event { - NotifsHandlerOut::OpenDesiredByRemote { protocol_index } => { + NotifsHandlerOut::OpenDesiredByRemote { protocol_index, handshake } => { let set_id = SetId::from(protocol_index); trace!(target: "sub-libp2p", @@ -1495,7 +1714,12 @@ impl NetworkBehaviour for Notifications { match mem::replace(entry.get_mut(), PeerState::Poisoned) { // Incoming => Incoming - PeerState::Incoming { mut connections, backoff_until, incoming_index } => { + PeerState::Incoming { + mut connections, + backoff_until, + incoming_index, + peerset_rejected, + } => { debug_assert!(connections .iter() .any(|(_, s)| matches!(s, ConnectionState::OpenDesiredByRemote))); @@ -1523,8 +1747,12 @@ impl NetworkBehaviour for Notifications { debug_assert!(false); } - *entry.into_mut() = - PeerState::Incoming { connections, backoff_until, incoming_index }; + *entry.into_mut() = PeerState::Incoming { + connections, + backoff_until, + incoming_index, + peerset_rejected, + }; }, PeerState::Enabled { mut connections } => { @@ -1588,11 +1816,13 @@ impl NetworkBehaviour for Notifications { set_id, alive: true, incoming_id, + handshake, }); *entry.into_mut() = PeerState::Incoming { connections, backoff_until, + peerset_rejected: false, incoming_index: incoming_id, }; } else { @@ -1725,7 +1955,7 @@ impl NetworkBehaviour for Notifications { let event = NotificationsOut::CustomProtocolReplaced { peer_id, set_id, - notifications_sink: replacement_sink, + notifications_sink: replacement_sink.clone(), }; self.events.push_back(ToSwarm::GenerateEvent(event)); } @@ -1830,8 +2060,13 @@ impl NetworkBehaviour for Notifications { peer_id, set_id, inbound, - negotiated_fallback, - received_handshake, + direction: if inbound { + Direction::Inbound + } else { + Direction::Outbound + }, + received_handshake: received_handshake.clone(), + negotiated_fallback: negotiated_fallback.clone(), notifications_sink: notifications_sink.clone(), }; self.events.push_back(ToSwarm::GenerateEvent(event)); @@ -1979,8 +2214,11 @@ impl NetworkBehaviour for Notifications { peer_id, set_id, ); - let event = NotificationsOut::Notification { peer_id, set_id, message }; - + let event = NotificationsOut::Notification { + peer_id, + set_id, + message: message.clone(), + }; self.events.push_back(ToSwarm::GenerateEvent(event)); } else { trace!( @@ -2009,10 +2247,10 @@ impl NetworkBehaviour for Notifications { loop { match futures::Stream::poll_next(Pin::new(&mut self.from_protocol_controllers), cx) { Poll::Ready(Some(Message::Accept(index))) => { - self.peerset_report_accept(index); + self.peerset_report_preaccept(index); }, Poll::Ready(Some(Message::Reject(index))) => { - self.peerset_report_reject(index); + let _ = self.peerset_report_reject(index); }, Poll::Ready(Some(Message::Connect { peer_id, set_id, .. })) => { self.peerset_report_connect(peer_id, set_id); @@ -2031,6 +2269,43 @@ impl NetworkBehaviour for Notifications { } } + // poll commands from protocols + loop { + match futures::Stream::poll_next(Pin::new(&mut self.command_streams), cx) { + Poll::Ready(Some((set_id, command))) => match command { + NotificationCommand::SetHandshake(handshake) => { + self.set_notif_protocol_handshake(set_id.into(), handshake); + }, + NotificationCommand::OpenSubstream(_peer) | + NotificationCommand::CloseSubstream(_peer) => { + todo!("substream control not implemented"); + }, + }, + Poll::Ready(None) => { + error!(target: LOG_TARGET, "Protocol command streams have been shut down"); + break + }, + Poll::Pending => break, + } + } + + while let Poll::Ready(Some((result, index))) = + self.pending_inbound_validations.poll_next_unpin(cx) + { + match result { + Ok(ValidationResult::Accept) => { + self.protocol_report_accept(index); + }, + Ok(ValidationResult::Reject) => { + self.protocol_report_reject(index); + }, + Err(_) => { + error!(target: LOG_TARGET, "Protocol has shut down"); + break + }, + } + } + while let Poll::Ready(Some((delay_id, peer_id, set_id))) = Pin::new(&mut self.delays).poll_next(cx) { @@ -2153,7 +2428,10 @@ mod tests { } } - fn development_notifs() -> (Notifications, ProtocolController) { + fn development_notifs( + ) -> (Notifications, ProtocolController, Box) { + let (protocol_handle_pair, notif_service) = + crate::protocol::notifications::service::notification_service("/proto/1".into()); let (to_notifications, from_controller) = tracing_unbounded("test_controller_to_notifications", 10_000); @@ -2169,24 +2447,31 @@ mod tests { Box::new(MockPeerStore {}), ); + let (notif_handle, command_stream) = protocol_handle_pair.split(); ( Notifications::new( vec![handle], from_controller, - iter::once(ProtocolConfig { - name: "/foo".into(), - fallback_names: Vec::new(), - handshake: vec![1, 2, 3, 4], - max_notification_size: u64::MAX, - }), + &None, + iter::once(( + ProtocolConfig { + name: "/foo".into(), + fallback_names: Vec::new(), + handshake: vec![1, 2, 3, 4], + max_notification_size: u64::MAX, + }, + notif_handle, + command_stream, + )), ), controller, + notif_service, ) } #[test] fn update_handshake() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let inner = notif.notif_protocols.get_mut(0).unwrap().handshake.read().clone(); assert_eq!(inner, vec![1, 2, 3, 4]); @@ -2201,14 +2486,14 @@ mod tests { #[should_panic] #[cfg(debug_assertions)] fn update_unknown_handshake() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); notif.set_notif_protocol_handshake(1337.into(), vec![5, 6, 7, 8]); } #[test] fn disconnect_backoff_peer() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); notif.peers.insert( @@ -2225,7 +2510,7 @@ mod tests { #[test] fn disconnect_pending_request() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); notif.peers.insert( @@ -2242,7 +2527,7 @@ mod tests { #[test] fn disconnect_requested_peer() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); notif.peers.insert((peer, 0.into()), PeerState::Requested); @@ -2253,7 +2538,7 @@ mod tests { #[test] fn disconnect_disabled_peer() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); notif.peers.insert( (peer, 0.into()), @@ -2269,7 +2554,7 @@ mod tests { #[test] fn remote_opens_connection_and_substream() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let connected = ConnectedPoint::Listener { @@ -2299,7 +2584,10 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); if let Some(&PeerState::Incoming { ref connections, backoff_until: None, .. }) = @@ -2319,7 +2607,7 @@ mod tests { #[tokio::test] async fn disconnect_remote_substream_before_handled_by_controller() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let connected = ConnectedPoint::Listener { @@ -2339,7 +2627,10 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); notif.disconnect_peer(&peer, 0.into()); @@ -2355,7 +2646,7 @@ mod tests { #[test] fn peerset_report_connect_backoff() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let set_id = SetId::from(0); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); @@ -2393,7 +2684,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -2420,7 +2711,7 @@ mod tests { #[test] fn peerset_connect_incoming() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let set_id = SetId::from(0); @@ -2444,19 +2735,22 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); // attempt to connect to the peer and verify that the peer state is `Enabled`; // we rely on implementation detail that incoming indices are counted from 0 // to not mock the `Peerset` - notif.peerset_report_accept(IncomingIndex(0)); + notif.protocol_report_accept(IncomingIndex(0)); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); } #[test] fn peerset_disconnect_disable_pending_enable() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let set_id = SetId::from(0); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); @@ -2503,7 +2797,7 @@ mod tests { #[test] fn peerset_disconnect_enabled() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let set_id = SetId::from(0); @@ -2525,11 +2819,14 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); // we rely on the implementation detail that incoming indices are counted from 0 // to not mock the `Peerset` - notif.peerset_report_accept(IncomingIndex(0)); + notif.protocol_report_accept(IncomingIndex(0)); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); // disconnect peer and verify that the state is `Disabled` @@ -2539,7 +2836,7 @@ mod tests { #[test] fn peerset_disconnect_requested() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let set_id = SetId::from(0); @@ -2554,7 +2851,7 @@ mod tests { #[test] fn peerset_disconnect_pending_request() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let set_id = SetId::from(0); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); @@ -2587,7 +2884,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -2607,7 +2904,7 @@ mod tests { #[test] fn peerset_accept_peer_not_alive() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let set_id = SetId::from(0); @@ -2631,7 +2928,10 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); @@ -2647,14 +2947,14 @@ mod tests { IncomingPeer { alive: false, incoming_id: IncomingIndex(0), .. }, )); - notif.peerset_report_accept(IncomingIndex(0)); + notif.protocol_report_accept(IncomingIndex(0)); assert_eq!(notif.incoming.len(), 0); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(PeerState::Disabled { .. }))); } #[test] fn secondary_connection_peer_state_incoming() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let conn2 = ConnectionId::new_unchecked(1); @@ -2678,7 +2978,10 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); if let Some(PeerState::Incoming { connections, .. }) = notif.peers.get(&(peer, set_id)) { assert_eq!(connections.len(), 1); @@ -2709,7 +3012,7 @@ mod tests { #[test] fn close_connection_for_disabled_peer() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let set_id = SetId::from(0); @@ -2734,7 +3037,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -2743,7 +3046,7 @@ mod tests { #[test] fn close_connection_for_incoming_peer_one_connection() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let set_id = SetId::from(0); @@ -2766,7 +3069,10 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); @@ -2775,7 +3081,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -2788,7 +3094,7 @@ mod tests { #[test] fn close_connection_for_incoming_peer_two_connections() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let conn1 = ConnectionId::new_unchecked(1); @@ -2815,7 +3121,10 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); @@ -2842,7 +3151,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -2857,7 +3166,7 @@ mod tests { #[test] fn connection_and_substream_open() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let set_id = SetId::from(0); @@ -2882,13 +3191,16 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); // We rely on the implementation detail that incoming indices are counted // from 0 to not mock the `Peerset`. - notif.peerset_report_accept(IncomingIndex(0)); + notif.protocol_report_accept(IncomingIndex(0)); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); // open new substream @@ -2911,7 +3223,7 @@ mod tests { #[test] fn connection_closed_sink_replaced() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn1 = ConnectionId::new_unchecked(0); let conn2 = ConnectionId::new_unchecked(1); @@ -2947,7 +3259,10 @@ mod tests { notif.on_connection_handler_event( peer, conn2, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); if let Some(PeerState::Enabled { connections, .. }) = notif.peers.get(&(peer, set_id)) { @@ -2984,7 +3299,7 @@ mod tests { peer_id: peer, connection_id: conn1, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -3005,7 +3320,7 @@ mod tests { #[test] fn dial_failure_for_requested_peer() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let set_id = SetId::from(0); @@ -3028,7 +3343,7 @@ mod tests { #[tokio::test] async fn write_notification() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let set_id = SetId::from(0); @@ -3077,7 +3392,7 @@ mod tests { #[test] fn peerset_report_connect_backoff_expired() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let set_id = SetId::from(0); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); @@ -3110,7 +3425,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -3125,7 +3440,7 @@ mod tests { #[test] fn peerset_report_disconnect_disabled() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let set_id = SetId::from(0); let conn = ConnectionId::new_unchecked(0); @@ -3151,7 +3466,7 @@ mod tests { #[test] fn peerset_report_disconnect_backoff() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let set_id = SetId::from(0); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); @@ -3184,7 +3499,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -3197,7 +3512,7 @@ mod tests { #[test] fn peer_is_backed_off_if_both_connections_get_closed_while_peer_is_disabled_with_back_off() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let set_id = SetId::from(0); let peer = PeerId::random(); let conn1 = ConnectionId::new_unchecked(0); @@ -3247,7 +3562,7 @@ mod tests { peer_id: peer, connection_id: conn1, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected.clone(), vec![]), + handler: NotifsHandler::new(peer, connected.clone(), vec![], None), remaining_established: 0usize, }, )); @@ -3261,7 +3576,7 @@ mod tests { peer_id: peer, connection_id: conn2, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -3270,7 +3585,7 @@ mod tests { #[test] fn inject_connection_closed_incoming_with_backoff() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let set_id = SetId::from(0); let conn = ConnectionId::new_unchecked(0); @@ -3294,7 +3609,10 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); // manually add backoff for the entry @@ -3312,7 +3630,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -3321,7 +3639,7 @@ mod tests { #[test] fn two_connections_inactive_connection_gets_closed_peer_state_is_still_incoming() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn1 = ConnectionId::new_unchecked(0); let conn2 = ConnectionId::new_unchecked(1); @@ -3355,7 +3673,10 @@ mod tests { notif.on_connection_handler_event( peer, conn1, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); assert!(std::matches!( notif.peers.get_mut(&(peer, 0.into())), @@ -3367,7 +3688,7 @@ mod tests { peer_id: peer, connection_id: conn2, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -3376,7 +3697,7 @@ mod tests { #[test] fn two_connections_active_connection_gets_closed_peer_state_is_disabled() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn1 = ConnectionId::new_unchecked(0); let conn2 = ConnectionId::new_unchecked(1); @@ -3413,7 +3734,10 @@ mod tests { notif.on_connection_handler_event( peer, conn1, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); assert!(std::matches!( notif.peers.get_mut(&(peer, 0.into())), @@ -3425,7 +3749,7 @@ mod tests { peer_id: peer, connection_id: conn1, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -3434,7 +3758,7 @@ mod tests { #[test] fn inject_connection_closed_for_active_connection() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn1 = ConnectionId::new_unchecked(0); let conn2 = ConnectionId::new_unchecked(1); @@ -3494,7 +3818,7 @@ mod tests { peer_id: peer, connection_id: conn1, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -3502,7 +3826,7 @@ mod tests { #[test] fn inject_dial_failure_for_pending_request() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let set_id = SetId::from(0); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); @@ -3535,7 +3859,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -3565,7 +3889,7 @@ mod tests { #[test] fn peerstate_incoming_open_desired_by_remote() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let set_id = SetId::from(0); let conn1 = ConnectionId::new_unchecked(0); @@ -3599,7 +3923,10 @@ mod tests { notif.on_connection_handler_event( peer, conn1, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); @@ -3607,7 +3934,10 @@ mod tests { notif.on_connection_handler_event( peer, conn2, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); if let Some(PeerState::Incoming { ref connections, .. }) = notif.peers.get(&(peer, set_id)) @@ -3619,7 +3949,7 @@ mod tests { #[tokio::test] async fn remove_backoff_peer_after_timeout() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let set_id = SetId::from(0); let conn = ConnectionId::new_unchecked(0); @@ -3652,7 +3982,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -3697,7 +4027,7 @@ mod tests { #[tokio::test] async fn reschedule_disabled_pending_enable_when_connection_not_closed() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let set_id = SetId::from(0); @@ -3726,13 +4056,16 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); // we rely on the implementation detail that incoming indices are counted from 0 // to not mock the `Peerset` - notif.peerset_report_accept(IncomingIndex(0)); + notif.protocol_report_accept(IncomingIndex(0)); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); let event = conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]); @@ -3815,7 +4148,7 @@ mod tests { #[should_panic] #[cfg(debug_assertions)] fn peerset_report_connect_with_enabled_peer() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let set_id = SetId::from(0); @@ -3840,7 +4173,10 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); @@ -3865,7 +4201,7 @@ mod tests { #[test] #[cfg(debug_assertions)] fn peerset_report_connect_with_disabled_pending_enable_peer() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let set_id = SetId::from(0); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); @@ -3911,7 +4247,7 @@ mod tests { #[test] #[cfg(debug_assertions)] fn peerset_report_connect_with_requested_peer() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let set_id = SetId::from(0); @@ -3927,7 +4263,7 @@ mod tests { #[test] #[cfg(debug_assertions)] fn peerset_report_connect_with_pending_requested() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let set_id = SetId::from(0); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); @@ -3960,7 +4296,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -3984,7 +4320,7 @@ mod tests { #[test] #[cfg(debug_assertions)] fn peerset_report_connect_with_incoming_peer() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let set_id = SetId::from(0); let conn = ConnectionId::new_unchecked(0); @@ -4008,7 +4344,10 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); @@ -4019,7 +4358,7 @@ mod tests { #[test] #[cfg(debug_assertions)] fn peerset_report_disconnect_with_incoming_peer() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let set_id = SetId::from(0); let conn = ConnectionId::new_unchecked(0); @@ -4043,7 +4382,10 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); @@ -4052,13 +4394,68 @@ mod tests { } #[test] - #[should_panic] #[cfg(debug_assertions)] - fn peerset_report_accept_incoming_peer() { - let (mut notif, _controller) = development_notifs(); + fn peerset_report_disconnect_with_incoming_peer_protocol_accepts() { + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); + let set_id = SetId::from(0); let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + // `Peerset` wants to disconnect the peer but since it's still under validation, + // it won't be disabled automatically + notif.peerset_report_disconnect(peer, set_id); + + let incoming_index = match notif.peers.get(&(peer, set_id)) { + Some(&PeerState::Incoming { peerset_rejected, incoming_index, .. }) => { + assert!(peerset_rejected); + incoming_index + }, + state => panic!("invalid state: {state:?}"), + }; + + // protocol accepted peer but since `Peerset` wanted to disconnect it, the peer will be + // disabled + notif.protocol_report_accept(incoming_index); + + match notif.peers.get(&(peer, set_id)) { + Some(&PeerState::Disabled { .. }) => {}, + state => panic!("invalid state: {state:?}"), + }; + } + + #[test] + #[cfg(debug_assertions)] + fn peer_disconnected_protocol_accepts() { + let (mut notif, _controller, _notif_service) = development_notifs(); + let peer = PeerId::random(); let set_id = SetId::from(0); + let conn = ConnectionId::new_unchecked(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -4079,24 +4476,188 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - assert!(std::matches!( - notif.incoming[0], - IncomingPeer { alive: true, incoming_id: IncomingIndex(0), .. }, + assert!(notif.incoming.iter().any(|entry| entry.incoming_id == IncomingIndex(0))); + notif.disconnect_peer(&peer, set_id); + + // since the connection was closed, nothing happens for the peer state because + // there is nothing actionable + notif.protocol_report_accept(IncomingIndex(0)); + + match notif.peers.get(&(peer, set_id)) { + Some(&PeerState::Disabled { .. }) => {}, + state => panic!("invalid state: {state:?}"), + }; + + assert!(!notif.incoming.iter().any(|entry| entry.incoming_id == IncomingIndex(0))); + } + + #[test] + #[cfg(debug_assertions)] + fn connection_closed_protocol_accepts() { + let (mut notif, _controller, _notif_service) = development_notifs(); + let peer = PeerId::random(); + let set_id = SetId::from(0); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: ConnectionId::new_unchecked(0), + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![], None), + remaining_established: 0usize, + }, )); - notif.peers.remove(&(peer, set_id)); - notif.peerset_report_accept(IncomingIndex(0)); + // connection closed, nothing to do + notif.protocol_report_accept(IncomingIndex(0)); + + match notif.peers.get(&(peer, set_id)) { + None => {}, + state => panic!("invalid state: {state:?}"), + }; + } + + #[test] + #[cfg(debug_assertions)] + fn peer_disconnected_protocol_reject() { + let (mut notif, _controller, _notif_service) = development_notifs(); + let peer = PeerId::random(); + let set_id = SetId::from(0); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + assert!(notif.incoming.iter().any(|entry| entry.incoming_id == IncomingIndex(0))); + notif.disconnect_peer(&peer, set_id); + + // since the connection was closed, nothing happens for the peer state because + // there is nothing actionable + notif.protocol_report_reject(IncomingIndex(0)); + + match notif.peers.get(&(peer, set_id)) { + Some(&PeerState::Disabled { .. }) => {}, + state => panic!("invalid state: {state:?}"), + }; + + assert!(!notif.incoming.iter().any(|entry| entry.incoming_id == IncomingIndex(0))); + } + + #[test] + #[cfg(debug_assertions)] + fn connection_closed_protocol_rejects() { + let (mut notif, _controller, _notif_service) = development_notifs(); + let peer = PeerId::random(); + let set_id = SetId::from(0); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: ConnectionId::new_unchecked(0), + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![], None), + remaining_established: 0usize, + }, + )); + + // connection closed, nothing to do + notif.protocol_report_reject(IncomingIndex(0)); + + match notif.peers.get(&(peer, set_id)) { + None => {}, + state => panic!("invalid state: {state:?}"), + }; } #[test] #[should_panic] #[cfg(debug_assertions)] - fn peerset_report_accept_not_incoming_peer() { - let (mut notif, _controller) = development_notifs(); + fn protocol_report_accept_not_incoming_peer() { + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let set_id = SetId::from(0); @@ -4121,7 +4682,10 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); @@ -4138,14 +4702,14 @@ mod tests { assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); notif.incoming[0].alive = true; - notif.peerset_report_accept(IncomingIndex(0)); + notif.protocol_report_accept(IncomingIndex(0)); } #[test] #[should_panic] #[cfg(debug_assertions)] fn inject_connection_closed_non_existent_peer() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let endpoint = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -4157,7 +4721,7 @@ mod tests { peer_id: peer, connection_id: ConnectionId::new_unchecked(0), endpoint: &endpoint.clone(), - handler: NotifsHandler::new(peer, endpoint, vec![]), + handler: NotifsHandler::new(peer, endpoint, vec![], None), remaining_established: 0usize, }, )); @@ -4165,7 +4729,7 @@ mod tests { #[test] fn disconnect_non_existent_peer() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let set_id = SetId::from(0); @@ -4177,9 +4741,9 @@ mod tests { #[test] fn accept_non_existent_connection() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); - notif.peerset_report_accept(0.into()); + notif.protocol_report_accept(0.into()); assert!(notif.peers.is_empty()); assert!(notif.incoming.is_empty()); @@ -4187,9 +4751,9 @@ mod tests { #[test] fn reject_non_existent_connection() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); - notif.peerset_report_reject(0.into()); + notif.protocol_report_reject(0.into()); assert!(notif.peers.is_empty()); assert!(notif.incoming.is_empty()); @@ -4197,7 +4761,7 @@ mod tests { #[test] fn reject_non_active_connection() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let set_id = SetId::from(0); @@ -4221,61 +4785,24 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); notif.incoming[0].alive = false; - notif.peerset_report_reject(0.into()); - - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - } - - #[test] - #[should_panic] - #[cfg(debug_assertions)] - fn reject_non_existent_peer_but_alive_connection() { - let (mut notif, _controller) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::new_unchecked(0); - let set_id = SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + notif.protocol_report_reject(0.into()); - // remote opens a substream, verify that peer state is updated to `Incoming` - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - assert!(std::matches!( - notif.incoming[0], - IncomingPeer { alive: true, incoming_id: IncomingIndex(0), .. }, - )); - - notif.peers.remove(&(peer, set_id)); - notif.peerset_report_reject(0.into()); } #[test] #[should_panic] #[cfg(debug_assertions)] fn inject_non_existent_connection_closed_for_incoming_peer() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let set_id = SetId::from(0); @@ -4299,7 +4826,10 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); @@ -4308,7 +4838,7 @@ mod tests { peer_id: peer, connection_id: ConnectionId::new_unchecked(1337), endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -4318,7 +4848,7 @@ mod tests { #[should_panic] #[cfg(debug_assertions)] fn inject_non_existent_connection_closed_for_disabled_peer() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let set_id = SetId::from(0); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); @@ -4343,7 +4873,7 @@ mod tests { peer_id: peer, connection_id: ConnectionId::new_unchecked(1337), endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -4353,7 +4883,7 @@ mod tests { #[should_panic] #[cfg(debug_assertions)] fn inject_non_existent_connection_closed_for_disabled_pending_enable() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let set_id = SetId::from(0); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); @@ -4394,7 +4924,7 @@ mod tests { peer_id: peer, connection_id: ConnectionId::new_unchecked(1337), endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -4404,7 +4934,7 @@ mod tests { #[should_panic] #[cfg(debug_assertions)] fn inject_connection_closed_for_incoming_peer_state_mismatch() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let set_id = SetId::from(0); @@ -4428,7 +4958,10 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); notif.incoming[0].alive = false; @@ -4438,7 +4971,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -4448,7 +4981,7 @@ mod tests { #[should_panic] #[cfg(debug_assertions)] fn inject_connection_closed_for_enabled_state_mismatch() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); let set_id = SetId::from(0); @@ -4472,7 +5005,10 @@ mod tests { notif.on_connection_handler_event( peer, conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index: 0, + handshake: vec![1, 3, 3, 7], + }, ); assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); @@ -4485,7 +5021,7 @@ mod tests { peer_id: peer, connection_id: ConnectionId::new_unchecked(1337), endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -4495,7 +5031,7 @@ mod tests { #[should_panic] #[cfg(debug_assertions)] fn inject_connection_closed_for_backoff_peer() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let set_id = SetId::from(0); let peer = PeerId::random(); let conn = ConnectionId::new_unchecked(0); @@ -4528,7 +5064,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected.clone(), vec![]), + handler: NotifsHandler::new(peer, connected.clone(), vec![], None), remaining_established: 0usize, }, )); @@ -4539,7 +5075,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), + handler: NotifsHandler::new(peer, connected, vec![], None), remaining_established: 0usize, }, )); @@ -4549,7 +5085,7 @@ mod tests { #[should_panic] #[cfg(debug_assertions)] fn open_result_ok_non_existent_peer() { - let (mut notif, _controller) = development_notifs(); + let (mut notif, _controller, _notif_service) = development_notifs(); let conn = ConnectionId::new_unchecked(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), diff --git a/substrate/client/network/src/protocol/notifications/handler.rs b/substrate/client/network/src/protocol/notifications/handler.rs index cffdec7d71e..28662be29fe 100644 --- a/substrate/client/network/src/protocol/notifications/handler.rs +++ b/substrate/client/network/src/protocol/notifications/handler.rs @@ -58,9 +58,12 @@ //! [`NotifsHandlerIn::Open`] has gotten an answer. use crate::{ - protocol::notifications::upgrade::{ - NotificationsIn, NotificationsInSubstream, NotificationsOut, NotificationsOutSubstream, - UpgradeCollec, + protocol::notifications::{ + service::metrics, + upgrade::{ + NotificationsIn, NotificationsInSubstream, NotificationsOut, NotificationsOutSubstream, + UpgradeCollec, + }, }, types::ProtocolName, }; @@ -92,7 +95,7 @@ use std::{ /// Number of pending notifications in asynchronous contexts. /// See [`NotificationsSink::reserve_notification`] for context. -const ASYNC_NOTIFICATIONS_BUFFER_SIZE: usize = 8; +pub(crate) const ASYNC_NOTIFICATIONS_BUFFER_SIZE: usize = 8; /// Number of pending notifications in synchronous contexts. const SYNC_NOTIFICATIONS_BUFFER_SIZE: usize = 2048; @@ -126,11 +129,19 @@ pub struct NotifsHandler { events_queue: VecDeque< ConnectionHandlerEvent, >, + + /// Metrics. + metrics: Option>, } impl NotifsHandler { /// Creates new [`NotifsHandler`]. - pub fn new(peer_id: PeerId, endpoint: ConnectedPoint, protocols: Vec) -> Self { + pub fn new( + peer_id: PeerId, + endpoint: ConnectedPoint, + protocols: Vec, + metrics: Option, + ) -> Self { Self { protocols: protocols .into_iter() @@ -148,6 +159,7 @@ impl NotifsHandler { endpoint, when_connection_open: Instant::now(), events_queue: VecDeque::with_capacity(16), + metrics: metrics.map_or(None, |metrics| Some(Arc::new(metrics))), } } } @@ -303,6 +315,8 @@ pub enum NotifsHandlerOut { OpenDesiredByRemote { /// Index of the protocol in the list of protocols passed at initialization. protocol_index: usize, + /// Received handshake. + handshake: Vec, }, /// The remote would like the substreams to be closed. Send a [`NotifsHandlerIn::Close`] in @@ -331,6 +345,36 @@ pub enum NotifsHandlerOut { #[derive(Debug, Clone)] pub struct NotificationsSink { inner: Arc, + metrics: Option>, +} + +impl NotificationsSink { + /// Create new [`NotificationsSink`]. + /// NOTE: only used for testing but must be `pub` as other crates in `client/network` use this. + pub fn new( + peer_id: PeerId, + ) -> (Self, mpsc::Receiver, mpsc::Receiver) + { + let (async_tx, async_rx) = mpsc::channel(ASYNC_NOTIFICATIONS_BUFFER_SIZE); + let (sync_tx, sync_rx) = mpsc::channel(SYNC_NOTIFICATIONS_BUFFER_SIZE); + ( + NotificationsSink { + inner: Arc::new(NotificationsSinkInner { + peer_id, + async_channel: FuturesMutex::new(async_tx), + sync_channel: Mutex::new(Some(sync_tx)), + }), + metrics: None, + }, + async_rx, + sync_rx, + ) + } + + /// Get reference to metrics. + pub fn metrics(&self) -> &Option> { + &self.metrics + } } #[derive(Debug)] @@ -350,8 +394,8 @@ struct NotificationsSinkInner { /// Message emitted through the [`NotificationsSink`] and processed by the background task /// dedicated to the peer. -#[derive(Debug)] -enum NotificationsSinkMessage { +#[derive(Debug, PartialEq, Eq)] +pub enum NotificationsSinkMessage { /// Message emitted by [`NotificationsSink::reserve_notification`] and /// [`NotificationsSink::write_notification_now`]. Notification { message: Vec }, @@ -379,8 +423,8 @@ impl NotificationsSink { let mut lock = self.inner.sync_channel.lock(); if let Some(tx) = lock.as_mut() { - let result = - tx.try_send(NotificationsSinkMessage::Notification { message: message.into() }); + let message = message.into(); + let result = tx.try_send(NotificationsSinkMessage::Notification { message }); if result.is_err() { // Cloning the `mpsc::Sender` guarantees the allocation of an extra spot in the @@ -476,7 +520,10 @@ impl ConnectionHandler for NotifsHandler { match protocol_info.state { State::Closed { pending_opening } => { self.events_queue.push_back(ConnectionHandlerEvent::Custom( - NotifsHandlerOut::OpenDesiredByRemote { protocol_index }, + NotifsHandlerOut::OpenDesiredByRemote { + protocol_index, + handshake: in_substream_open.handshake, + }, )); protocol_info.state = State::OpenDesiredByRemote { @@ -531,6 +578,7 @@ impl ConnectionHandler for NotifsHandler { async_channel: FuturesMutex::new(async_tx), sync_channel: Mutex::new(Some(sync_tx)), }), + metrics: self.metrics.clone(), }; self.protocols[protocol_index].state = State::Open { @@ -881,6 +929,7 @@ pub mod tests { async_channel: FuturesMutex::new(async_tx), sync_channel: Mutex::new(Some(sync_tx)), }), + metrics: None, }; let (in_substream, out_substream) = MockSubstream::new(); @@ -1040,6 +1089,7 @@ pub mod tests { }, peer_id: PeerId::random(), events_queue: VecDeque::new(), + metrics: None, } } @@ -1545,6 +1595,7 @@ pub mod tests { async_channel: FuturesMutex::new(async_tx), sync_channel: Mutex::new(Some(sync_tx)), }), + metrics: None, }; handler.protocols[0].state = State::Open { @@ -1597,7 +1648,7 @@ pub mod tests { assert!(std::matches!( handler.poll(cx), Poll::Ready(ConnectionHandlerEvent::Custom( - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0, .. }, )) )); assert!(std::matches!( diff --git a/substrate/client/network/src/protocol/notifications/service/metrics.rs b/substrate/client/network/src/protocol/notifications/service/metrics.rs new file mode 100644 index 00000000000..2a57d57c175 --- /dev/null +++ b/substrate/client/network/src/protocol/notifications/service/metrics.rs @@ -0,0 +1,130 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use crate::types::ProtocolName; + +use prometheus_endpoint::{ + self as prometheus, CounterVec, HistogramOpts, HistogramVec, Opts, PrometheusError, Registry, + U64, +}; + +use std::sync::Arc; + +/// Notification metrics. +#[derive(Debug, Clone)] +pub struct Metrics { + // Total number of opened substreams. + pub notifications_streams_opened_total: CounterVec, + + /// Total number of closed substreams. + pub notifications_streams_closed_total: CounterVec, + + /// In/outbound notification sizes. + pub notifications_sizes: HistogramVec, +} + +impl Metrics { + fn register(registry: &Registry) -> Result { + Ok(Self { + notifications_sizes: prometheus::register( + HistogramVec::new( + HistogramOpts { + common_opts: Opts::new( + "substrate_sub_libp2p_notifications_sizes", + "Sizes of the notifications send to and received from all nodes", + ), + buckets: prometheus::exponential_buckets(64.0, 4.0, 8) + .expect("parameters are always valid values; qed"), + }, + &["direction", "protocol"], + )?, + registry, + )?, + notifications_streams_closed_total: prometheus::register( + CounterVec::new( + Opts::new( + "substrate_sub_libp2p_notifications_streams_closed_total", + "Total number of notification substreams that have been closed", + ), + &["protocol"], + )?, + registry, + )?, + notifications_streams_opened_total: prometheus::register( + CounterVec::new( + Opts::new( + "substrate_sub_libp2p_notifications_streams_opened_total", + "Total number of notification substreams that have been opened", + ), + &["protocol"], + )?, + registry, + )?, + }) + } +} + +/// Register metrics. +pub fn register(registry: &Registry) -> Result { + Metrics::register(registry) +} + +/// Register opened substream to Prometheus. +pub fn register_substream_opened(metrics: &Option, protocol: &ProtocolName) { + if let Some(metrics) = metrics { + metrics.notifications_streams_opened_total.with_label_values(&[&protocol]).inc(); + } +} + +/// Register closed substream to Prometheus. +pub fn register_substream_closed(metrics: &Option, protocol: &ProtocolName) { + if let Some(metrics) = metrics { + metrics + .notifications_streams_closed_total + .with_label_values(&[&protocol[..]]) + .inc(); + } +} + +/// Register sent notification to Prometheus. +pub fn register_notification_sent( + metrics: &Option>, + protocol: &ProtocolName, + size: usize, +) { + if let Some(metrics) = metrics { + metrics + .notifications_sizes + .with_label_values(&["out", protocol]) + .observe(size as f64); + } +} + +/// Register received notification to Prometheus. +pub fn register_notification_received( + metrics: &Option, + protocol: &ProtocolName, + size: usize, +) { + if let Some(metrics) = metrics { + metrics + .notifications_sizes + .with_label_values(&["in", protocol]) + .observe(size as f64); + } +} diff --git a/substrate/client/network/src/protocol/notifications/service/mod.rs b/substrate/client/network/src/protocol/notifications/service/mod.rs new file mode 100644 index 00000000000..62e6d88a3d5 --- /dev/null +++ b/substrate/client/network/src/protocol/notifications/service/mod.rs @@ -0,0 +1,634 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Notification service implementation. + +use crate::{ + error, + protocol::notifications::handler::NotificationsSink, + service::traits::{ + Direction, MessageSink, NotificationEvent, NotificationService, ValidationResult, + }, + types::ProtocolName, +}; + +use futures::{ + stream::{FuturesUnordered, Stream}, + StreamExt, +}; +use libp2p::PeerId; +use parking_lot::Mutex; +use tokio::sync::{mpsc, oneshot}; +use tokio_stream::wrappers::ReceiverStream; + +use sc_utils::mpsc::{tracing_unbounded, TracingUnboundedReceiver, TracingUnboundedSender}; + +use std::{collections::HashMap, fmt::Debug, sync::Arc}; + +pub(crate) mod metrics; + +#[cfg(test)] +mod tests; + +/// Logging target for the file. +const LOG_TARGET: &str = "sub-libp2p"; + +/// Default command queue size. +const COMMAND_QUEUE_SIZE: usize = 64; + +/// Type representing subscribers of a notification protocol. +type Subscribers = Arc>>>; + +/// Type represending a distributable message sink. +/// Detached message sink must carry the protocol name for registering metrics. +/// +/// See documentation for [`PeerContext`] for more details. +type NotificationSink = Arc>; + +#[async_trait::async_trait] +impl MessageSink for NotificationSink { + /// Send synchronous `notification` to the peer associated with this [`MessageSink`]. + fn send_sync_notification(&self, notification: Vec) { + let sink = self.lock(); + + metrics::register_notification_sent(&sink.0.metrics(), &sink.1, notification.len()); + sink.0.send_sync_notification(notification); + } + + /// Send an asynchronous `notification` to the peer associated with this [`MessageSink`], + /// allowing sender to exercise backpressure. + /// + /// Returns an error if the peer does not exist. + async fn send_async_notification(&self, notification: Vec) -> Result<(), error::Error> { + // notification sink must be cloned because the lock cannot be held across `.await` + // this makes the implementation less efficient but not prohibitively so as the same + // method is also used by `NetworkService` when sending notifications. + let notification_len = notification.len(); + let sink = self.lock().clone(); + let permit = sink + .0 + .reserve_notification() + .await + .map_err(|_| error::Error::ConnectionClosed)?; + + permit.send(notification).map_err(|_| error::Error::ChannelClosed).map(|res| { + metrics::register_notification_sent(&sink.0.metrics(), &sink.1, notification_len); + res + }) + } +} + +/// Inner notification event to deal with `NotificationsSinks` without exposing that +/// implementation detail to [`NotificationService`] consumers. +#[derive(Debug)] +enum InnerNotificationEvent { + /// Validate inbound substream. + ValidateInboundSubstream { + /// Peer ID. + peer: PeerId, + + /// Received handshake. + handshake: Vec, + + /// `oneshot::Sender` for sending validation result back to `Notifications` + result_tx: oneshot::Sender, + }, + + /// Notification substream open to `peer`. + NotificationStreamOpened { + /// Peer ID. + peer: PeerId, + + /// Direction of the substream. + direction: Direction, + + /// Received handshake. + handshake: Vec, + + /// Negotiated fallback. + negotiated_fallback: Option, + + /// Notification sink. + sink: NotificationsSink, + }, + + /// Substream was closed. + NotificationStreamClosed { + /// Peer ID. + peer: PeerId, + }, + + /// Notification was received from the substream. + NotificationReceived { + /// Peer ID. + peer: PeerId, + + /// Received notification. + notification: Vec, + }, + + /// Notification sink has been replaced. + NotificationSinkReplaced { + /// Peer ID. + peer: PeerId, + + /// Notification sink. + sink: NotificationsSink, + }, +} + +/// Notification commands. +/// +/// Sent by the installed protocols to `Notifications` to open/close/modify substreams. +#[derive(Debug)] +pub enum NotificationCommand { + /// Instruct `Notifications` to open a substream to peer. + #[allow(unused)] + OpenSubstream(PeerId), + + /// Instruct `Notifications` to close the substream to peer. + #[allow(unused)] + CloseSubstream(PeerId), + + /// Set handshake for the notifications protocol. + SetHandshake(Vec), +} + +/// Context assigned to each peer. +/// +/// Contains `NotificationsSink` used by [`NotificationService`] to send notifications +/// and an additional, distributable `NotificationsSink` which the protocol may acquire +/// if it wishes to send notifications through `NotificationsSink` directly. +/// +/// The distributable `NoticationsSink` is wrapped in an `Arc>` to allow +/// `NotificationsService` to swap the underlying sink in case it's replaced. +#[derive(Debug, Clone)] +struct PeerContext { + /// Sink for sending notificaitons. + sink: NotificationsSink, + + /// Distributable notification sink. + shared_sink: NotificationSink, +} + +/// Handle that is passed on to the notifications protocol. +#[derive(Debug)] +pub struct NotificationHandle { + /// Protocol name. + protocol: ProtocolName, + + /// TX channel for sending commands to `Notifications`. + tx: mpsc::Sender, + + /// RX channel for receiving events from `Notifications`. + rx: TracingUnboundedReceiver, + + /// All subscribers of `NotificationEvent`s. + subscribers: Subscribers, + + /// Connected peers. + peers: HashMap, +} + +impl NotificationHandle { + /// Create new [`NotificationHandle`]. + fn new( + protocol: ProtocolName, + tx: mpsc::Sender, + rx: TracingUnboundedReceiver, + subscribers: Arc>>>, + ) -> Self { + Self { protocol, tx, rx, subscribers, peers: HashMap::new() } + } +} + +#[async_trait::async_trait] +impl NotificationService for NotificationHandle { + /// Instruct `Notifications` to open a new substream for `peer`. + async fn open_substream(&mut self, _peer: PeerId) -> Result<(), ()> { + todo!("support for opening substreams not implemented yet"); + } + + /// Instruct `Notifications` to close substream for `peer`. + async fn close_substream(&mut self, _peer: PeerId) -> Result<(), ()> { + todo!("support for closing substreams not implemented yet, call `NetworkService::disconnect_peer()` instead"); + } + + /// Send synchronous `notification` to `peer`. + fn send_sync_notification(&self, peer: &PeerId, notification: Vec) { + if let Some(info) = self.peers.get(&peer) { + metrics::register_notification_sent( + &info.sink.metrics(), + &self.protocol, + notification.len(), + ); + + let _ = info.sink.send_sync_notification(notification); + } + } + + /// Send asynchronous `notification` to `peer`, allowing sender to exercise backpressure. + async fn send_async_notification( + &self, + peer: &PeerId, + notification: Vec, + ) -> Result<(), error::Error> { + let notification_len = notification.len(); + let sink = &self.peers.get(&peer).ok_or_else(|| error::Error::PeerDoesntExist(*peer))?.sink; + + sink.reserve_notification() + .await + .map_err(|_| error::Error::ConnectionClosed)? + .send(notification) + .map_err(|_| error::Error::ChannelClosed) + .map(|res| { + metrics::register_notification_sent( + &sink.metrics(), + &self.protocol, + notification_len, + ); + res + }) + } + + /// Set handshake for the notification protocol replacing the old handshake. + async fn set_handshake(&mut self, handshake: Vec) -> Result<(), ()> { + log::trace!(target: LOG_TARGET, "{}: set handshake to {handshake:?}", self.protocol); + + self.tx.send(NotificationCommand::SetHandshake(handshake)).await.map_err(|_| ()) + } + + /// Non-blocking variant of `set_handshake()` that attempts to update the handshake + /// and returns an error if the channel is blocked. + /// + /// Technically the function can return an error if the channel to `Notifications` is closed + /// but that doesn't happen under normal operation. + fn try_set_handshake(&mut self, handshake: Vec) -> Result<(), ()> { + self.tx.try_send(NotificationCommand::SetHandshake(handshake)).map_err(|_| ()) + } + + /// Get next event from the `Notifications` event stream. + async fn next_event(&mut self) -> Option { + loop { + match self.rx.next().await? { + InnerNotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx } => + return Some(NotificationEvent::ValidateInboundSubstream { + peer, + handshake, + result_tx, + }), + InnerNotificationEvent::NotificationStreamOpened { + peer, + handshake, + negotiated_fallback, + direction, + sink, + } => { + self.peers.insert( + peer, + PeerContext { + sink: sink.clone(), + shared_sink: Arc::new(Mutex::new((sink, self.protocol.clone()))), + }, + ); + return Some(NotificationEvent::NotificationStreamOpened { + peer, + handshake, + direction, + negotiated_fallback, + }) + }, + InnerNotificationEvent::NotificationStreamClosed { peer } => { + self.peers.remove(&peer); + return Some(NotificationEvent::NotificationStreamClosed { peer }) + }, + InnerNotificationEvent::NotificationReceived { peer, notification } => + return Some(NotificationEvent::NotificationReceived { peer, notification }), + InnerNotificationEvent::NotificationSinkReplaced { peer, sink } => { + match self.peers.get_mut(&peer) { + None => log::error!( + "{}: notification sink replaced for {peer} but peer does not exist", + self.protocol + ), + Some(context) => { + context.sink = sink.clone(); + *context.shared_sink.lock() = (sink.clone(), self.protocol.clone()); + }, + } + }, + } + } + } + + // Clone [`NotificationService`] + fn clone(&mut self) -> Result, ()> { + let mut subscribers = self.subscribers.lock(); + let (event_tx, event_rx) = tracing_unbounded("mpsc-notification-to-protocol", 100_000); + subscribers.push(event_tx); + + Ok(Box::new(NotificationHandle { + protocol: self.protocol.clone(), + tx: self.tx.clone(), + rx: event_rx, + peers: self.peers.clone(), + subscribers: self.subscribers.clone(), + })) + } + + /// Get protocol name. + fn protocol(&self) -> &ProtocolName { + &self.protocol + } + + /// Get message sink of the peer. + fn message_sink(&self, peer: &PeerId) -> Option> { + match self.peers.get(peer) { + Some(context) => Some(Box::new(context.shared_sink.clone())), + None => None, + } + } +} + +/// Channel pair which allows `Notifications` to interact with a protocol. +#[derive(Debug)] +pub struct ProtocolHandlePair { + /// Protocol name. + protocol: ProtocolName, + + /// Subscribers of the notification protocol events. + subscribers: Subscribers, + + // Receiver for notification commands received from the protocol implementation. + rx: mpsc::Receiver, +} + +impl ProtocolHandlePair { + /// Create new [`ProtocolHandlePair`]. + fn new( + protocol: ProtocolName, + subscribers: Subscribers, + rx: mpsc::Receiver, + ) -> Self { + Self { protocol, subscribers, rx } + } + + /// Consume `self` and split [`ProtocolHandlePair`] into a handle which allows it to send events + /// to the protocol and a stream of commands received from the protocol. + pub(crate) fn split( + self, + ) -> (ProtocolHandle, Box + Send + Unpin>) { + ( + ProtocolHandle::new(self.protocol, self.subscribers), + Box::new(ReceiverStream::new(self.rx)), + ) + } +} + +/// Handle that is passed on to `Notifications` and allows it to directly communicate +/// with the protocol. +#[derive(Debug, Clone)] +pub(crate) struct ProtocolHandle { + /// Protocol name. + protocol: ProtocolName, + + /// Subscribers of the notification protocol. + subscribers: Subscribers, + + /// Number of connected peers. + num_peers: usize, + + /// Delegate validation to `Peerset`. + delegate_to_peerset: bool, + + /// Prometheus metrics. + metrics: Option, +} + +pub(crate) enum ValidationCallResult { + WaitForValidation(oneshot::Receiver), + Delegated, +} + +impl ProtocolHandle { + /// Create new [`ProtocolHandle`]. + fn new(protocol: ProtocolName, subscribers: Subscribers) -> Self { + Self { protocol, subscribers, num_peers: 0usize, metrics: None, delegate_to_peerset: false } + } + + /// Set metrics. + pub fn set_metrics(&mut self, metrics: Option) { + self.metrics = metrics; + } + + /// Delegate validation to `Peerset`. + /// + /// Protocols that do not do any validation themselves and only rely on `Peerset` handling + /// validation can disable protocol-side validation entirely by delegating all validation to + /// `Peerset`. + pub fn delegate_to_peerset(&mut self, delegate: bool) { + self.delegate_to_peerset = delegate; + } + + /// Report to the protocol that a substream has been opened and it must be validated by the + /// protocol. + /// + /// Return `oneshot::Receiver` which allows `Notifications` to poll for the validation result + /// from protocol. + pub fn report_incoming_substream( + &self, + peer: PeerId, + handshake: Vec, + ) -> Result { + let subscribers = self.subscribers.lock(); + + log::trace!( + target: LOG_TARGET, + "{}: report incoming substream for {peer}, handshake {handshake:?}", + self.protocol + ); + + if self.delegate_to_peerset { + return Ok(ValidationCallResult::Delegated) + } + + // if there is only one subscriber, `Notifications` can wait directly on the + // `oneshot::channel()`'s RX half without indirection + if subscribers.len() == 1 { + let (result_tx, rx) = oneshot::channel(); + return subscribers[0] + .unbounded_send(InnerNotificationEvent::ValidateInboundSubstream { + peer, + handshake, + result_tx, + }) + .map(|_| ValidationCallResult::WaitForValidation(rx)) + .map_err(|_| ()) + } + + // if there are multiple subscribers, create a task which waits for all of the + // validations to finish and returns the combined result to `Notifications` + let mut results: FuturesUnordered<_> = subscribers + .iter() + .filter_map(|subscriber| { + let (result_tx, rx) = oneshot::channel(); + + subscriber + .unbounded_send(InnerNotificationEvent::ValidateInboundSubstream { + peer, + handshake: handshake.clone(), + result_tx, + }) + .is_ok() + .then_some(rx) + }) + .collect(); + + let (tx, rx) = oneshot::channel(); + tokio::spawn(async move { + while let Some(event) = results.next().await { + match event { + Err(_) | Ok(ValidationResult::Reject) => + return tx.send(ValidationResult::Reject), + Ok(ValidationResult::Accept) => {}, + } + } + + return tx.send(ValidationResult::Accept) + }); + + Ok(ValidationCallResult::WaitForValidation(rx)) + } + + /// Report to the protocol that a substream has been opened and that it can now use the handle + /// to send notifications to the remote peer. + pub fn report_substream_opened( + &mut self, + peer: PeerId, + direction: Direction, + handshake: Vec, + negotiated_fallback: Option, + sink: NotificationsSink, + ) -> Result<(), ()> { + metrics::register_substream_opened(&self.metrics, &self.protocol); + + let mut subscribers = self.subscribers.lock(); + log::trace!(target: LOG_TARGET, "{}: substream opened for {peer:?}", self.protocol); + + subscribers.retain(|subscriber| { + subscriber + .unbounded_send(InnerNotificationEvent::NotificationStreamOpened { + peer, + direction, + handshake: handshake.clone(), + negotiated_fallback: negotiated_fallback.clone(), + sink: sink.clone(), + }) + .is_ok() + }); + self.num_peers += 1; + + Ok(()) + } + + /// Substream was closed. + pub fn report_substream_closed(&mut self, peer: PeerId) -> Result<(), ()> { + metrics::register_substream_closed(&self.metrics, &self.protocol); + + let mut subscribers = self.subscribers.lock(); + log::trace!(target: LOG_TARGET, "{}: substream closed for {peer:?}", self.protocol); + + subscribers.retain(|subscriber| { + subscriber + .unbounded_send(InnerNotificationEvent::NotificationStreamClosed { peer }) + .is_ok() + }); + self.num_peers -= 1; + + Ok(()) + } + + /// Notification was received from the substream. + pub fn report_notification_received( + &mut self, + peer: PeerId, + notification: Vec, + ) -> Result<(), ()> { + metrics::register_notification_received(&self.metrics, &self.protocol, notification.len()); + + let mut subscribers = self.subscribers.lock(); + log::trace!(target: LOG_TARGET, "{}: notification received from {peer:?}", self.protocol); + + subscribers.retain(|subscriber| { + subscriber + .unbounded_send(InnerNotificationEvent::NotificationReceived { + peer, + notification: notification.clone(), + }) + .is_ok() + }); + + Ok(()) + } + + /// Notification sink was replaced. + pub fn report_notification_sink_replaced( + &mut self, + peer: PeerId, + sink: NotificationsSink, + ) -> Result<(), ()> { + let mut subscribers = self.subscribers.lock(); + + log::trace!( + target: LOG_TARGET, + "{}: notification sink replaced for {peer:?}", + self.protocol + ); + + subscribers.retain(|subscriber| { + subscriber + .unbounded_send(InnerNotificationEvent::NotificationSinkReplaced { + peer, + sink: sink.clone(), + }) + .is_ok() + }); + + Ok(()) + } + + /// Get the number of connected peers. + pub fn num_peers(&self) -> usize { + self.num_peers + } +} + +/// Create new (protocol, notification) handle pair. +/// +/// Handle pair allows `Notifications` and the protocol to communicate with each other directly. +pub fn notification_service( + protocol: ProtocolName, +) -> (ProtocolHandlePair, Box) { + let (cmd_tx, cmd_rx) = mpsc::channel(COMMAND_QUEUE_SIZE); + let (event_tx, event_rx) = tracing_unbounded("mpsc-notification-to-protocol", 100_000); + let subscribers = Arc::new(Mutex::new(vec![event_tx])); + + ( + ProtocolHandlePair::new(protocol.clone(), subscribers.clone(), cmd_rx), + Box::new(NotificationHandle::new(protocol.clone(), cmd_tx, event_rx, subscribers)), + ) +} diff --git a/substrate/client/network/src/protocol/notifications/service/tests.rs b/substrate/client/network/src/protocol/notifications/service/tests.rs new file mode 100644 index 00000000000..02ba9e1711c --- /dev/null +++ b/substrate/client/network/src/protocol/notifications/service/tests.rs @@ -0,0 +1,839 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::*; +use crate::protocol::notifications::handler::{ + NotificationsSinkMessage, ASYNC_NOTIFICATIONS_BUFFER_SIZE, +}; + +use std::future::Future; + +#[tokio::test] +async fn validate_and_accept_substream() { + let (proto, mut notif) = notification_service("/proto/1".into()); + let (handle, _stream) = proto.split(); + + let peer_id = PeerId::random(); + let ValidationCallResult::WaitForValidation(result_rx) = + handle.report_incoming_substream(peer_id, vec![1, 3, 3, 7]).unwrap() + else { + panic!("peerset not enabled"); + }; + + if let Some(NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx }) = + notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(handshake, vec![1, 3, 3, 7]); + let _ = result_tx.send(ValidationResult::Accept).unwrap(); + } else { + panic!("invalid event received"); + } + + assert_eq!(result_rx.await.unwrap(), ValidationResult::Accept); +} + +#[tokio::test] +async fn substream_opened() { + let (proto, mut notif) = notification_service("/proto/1".into()); + let (sink, _, _) = NotificationsSink::new(PeerId::random()); + let (mut handle, _stream) = proto.split(); + + let peer_id = PeerId::random(); + handle + .report_substream_opened(peer_id, Direction::Inbound, vec![1, 3, 3, 7], None, sink) + .unwrap(); + + if let Some(NotificationEvent::NotificationStreamOpened { + peer, + negotiated_fallback, + handshake, + direction, + }) = notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(negotiated_fallback, None); + assert_eq!(handshake, vec![1, 3, 3, 7]); + assert_eq!(direction, Direction::Inbound); + } else { + panic!("invalid event received"); + } +} + +#[tokio::test] +async fn send_sync_notification() { + let (proto, mut notif) = notification_service("/proto/1".into()); + let (sink, _, mut sync_rx) = NotificationsSink::new(PeerId::random()); + let (mut handle, _stream) = proto.split(); + let peer_id = PeerId::random(); + + // validate inbound substream + let ValidationCallResult::WaitForValidation(result_rx) = + handle.report_incoming_substream(peer_id, vec![1, 3, 3, 7]).unwrap() + else { + panic!("peerset not enabled"); + }; + + if let Some(NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx }) = + notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(handshake, vec![1, 3, 3, 7]); + let _ = result_tx.send(ValidationResult::Accept).unwrap(); + } else { + panic!("invalid event received"); + } + assert_eq!(result_rx.await.unwrap(), ValidationResult::Accept); + + // report that a substream has been opened + handle + .report_substream_opened(peer_id, Direction::Inbound, vec![1, 3, 3, 7], None, sink) + .unwrap(); + + if let Some(NotificationEvent::NotificationStreamOpened { + peer, + negotiated_fallback, + handshake, + direction, + }) = notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(negotiated_fallback, None); + assert_eq!(handshake, vec![1, 3, 3, 7]); + assert_eq!(direction, Direction::Inbound); + } else { + panic!("invalid event received"); + } + + notif.send_sync_notification(&peer_id, vec![1, 3, 3, 8]); + assert_eq!( + sync_rx.next().await, + Some(NotificationsSinkMessage::Notification { message: vec![1, 3, 3, 8] }) + ); +} + +#[tokio::test] +async fn send_async_notification() { + let (proto, mut notif) = notification_service("/proto/1".into()); + let (sink, mut async_rx, _) = NotificationsSink::new(PeerId::random()); + let (mut handle, _stream) = proto.split(); + let peer_id = PeerId::random(); + + // validate inbound substream + let ValidationCallResult::WaitForValidation(result_rx) = + handle.report_incoming_substream(peer_id, vec![1, 3, 3, 7]).unwrap() + else { + panic!("peerset not enabled"); + }; + + if let Some(NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx }) = + notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(handshake, vec![1, 3, 3, 7]); + let _ = result_tx.send(ValidationResult::Accept).unwrap(); + } else { + panic!("invalid event received"); + } + assert_eq!(result_rx.await.unwrap(), ValidationResult::Accept); + + // report that a substream has been opened + handle + .report_substream_opened(peer_id, Direction::Inbound, vec![1, 3, 3, 7], None, sink) + .unwrap(); + + if let Some(NotificationEvent::NotificationStreamOpened { + peer, + negotiated_fallback, + handshake, + direction, + }) = notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(negotiated_fallback, None); + assert_eq!(handshake, vec![1, 3, 3, 7]); + assert_eq!(direction, Direction::Inbound); + } else { + panic!("invalid event received"); + } + + notif.send_async_notification(&peer_id, vec![1, 3, 3, 9]).await.unwrap(); + assert_eq!( + async_rx.next().await, + Some(NotificationsSinkMessage::Notification { message: vec![1, 3, 3, 9] }) + ); +} + +#[tokio::test] +async fn send_sync_notification_to_non_existent_peer() { + let (proto, notif) = notification_service("/proto/1".into()); + let (_sink, _, _sync_rx) = NotificationsSink::new(PeerId::random()); + let (_handle, _stream) = proto.split(); + let peer = PeerId::random(); + + // as per the original implementation, the call doesn't fail + notif.send_sync_notification(&peer, vec![1, 3, 3, 7]) +} + +#[tokio::test] +async fn send_async_notification_to_non_existent_peer() { + let (proto, notif) = notification_service("/proto/1".into()); + let (_sink, _, _sync_rx) = NotificationsSink::new(PeerId::random()); + let (_handle, _stream) = proto.split(); + let peer = PeerId::random(); + + if let Err(error::Error::PeerDoesntExist(peer_id)) = + notif.send_async_notification(&peer, vec![1, 3, 3, 7]).await + { + assert_eq!(peer, peer_id); + } else { + panic!("invalid error received from `send_async_notification()`"); + } +} + +#[tokio::test] +async fn receive_notification() { + let (proto, mut notif) = notification_service("/proto/1".into()); + let (sink, _, _sync_rx) = NotificationsSink::new(PeerId::random()); + let (mut handle, _stream) = proto.split(); + let peer_id = PeerId::random(); + + // validate inbound substream + let ValidationCallResult::WaitForValidation(result_rx) = + handle.report_incoming_substream(peer_id, vec![1, 3, 3, 7]).unwrap() + else { + panic!("peerset not enabled"); + }; + + if let Some(NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx }) = + notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(handshake, vec![1, 3, 3, 7]); + let _ = result_tx.send(ValidationResult::Accept).unwrap(); + } else { + panic!("invalid event received"); + } + assert_eq!(result_rx.await.unwrap(), ValidationResult::Accept); + + // report that a substream has been opened + handle + .report_substream_opened(peer_id, Direction::Inbound, vec![1, 3, 3, 7], None, sink) + .unwrap(); + + if let Some(NotificationEvent::NotificationStreamOpened { + peer, + negotiated_fallback, + handshake, + direction, + }) = notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(negotiated_fallback, None); + assert_eq!(handshake, vec![1, 3, 3, 7]); + assert_eq!(direction, Direction::Inbound); + } else { + panic!("invalid event received"); + } + + // notification is received + handle.report_notification_received(peer_id, vec![1, 3, 3, 8]).unwrap(); + + if let Some(NotificationEvent::NotificationReceived { peer, notification }) = + notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(notification, vec![1, 3, 3, 8]); + } else { + panic!("invalid event received"); + } +} + +#[tokio::test] +async fn backpressure_works() { + let (proto, mut notif) = notification_service("/proto/1".into()); + let (sink, mut async_rx, _) = NotificationsSink::new(PeerId::random()); + let (mut handle, _stream) = proto.split(); + let peer_id = PeerId::random(); + + // validate inbound substream + let ValidationCallResult::WaitForValidation(result_rx) = + handle.report_incoming_substream(peer_id, vec![1, 3, 3, 7]).unwrap() + else { + panic!("peerset not enabled"); + }; + + if let Some(NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx }) = + notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(handshake, vec![1, 3, 3, 7]); + let _ = result_tx.send(ValidationResult::Accept).unwrap(); + } else { + panic!("invalid event received"); + } + assert_eq!(result_rx.await.unwrap(), ValidationResult::Accept); + + // report that a substream has been opened + handle + .report_substream_opened(peer_id, Direction::Inbound, vec![1, 3, 3, 7], None, sink) + .unwrap(); + + if let Some(NotificationEvent::NotificationStreamOpened { + peer, + negotiated_fallback, + handshake, + direction, + }) = notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(negotiated_fallback, None); + assert_eq!(handshake, vec![1, 3, 3, 7]); + assert_eq!(direction, Direction::Inbound); + } else { + panic!("invalid event received"); + } + + // fill the message buffer with messages + for i in 0..=ASYNC_NOTIFICATIONS_BUFFER_SIZE { + assert!(futures::poll!(notif.send_async_notification(&peer_id, vec![1, 3, 3, i as u8])) + .is_ready()); + } + + // try to send one more message and verify that the call blocks + assert!(futures::poll!(notif.send_async_notification(&peer_id, vec![1, 3, 3, 9])).is_pending()); + + // release one slot from the buffer for new message + assert_eq!( + async_rx.next().await, + Some(NotificationsSinkMessage::Notification { message: vec![1, 3, 3, 0] }) + ); + + // verify that a message can be sent + assert!(futures::poll!(notif.send_async_notification(&peer_id, vec![1, 3, 3, 9])).is_ready()); +} + +#[tokio::test] +async fn peer_disconnects_then_sync_notification_is_sent() { + let (proto, mut notif) = notification_service("/proto/1".into()); + let (sink, _, sync_rx) = NotificationsSink::new(PeerId::random()); + let (mut handle, _stream) = proto.split(); + let peer_id = PeerId::random(); + + // validate inbound substream + let ValidationCallResult::WaitForValidation(result_rx) = + handle.report_incoming_substream(peer_id, vec![1, 3, 3, 7]).unwrap() + else { + panic!("peerset not enabled"); + }; + + if let Some(NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx }) = + notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(handshake, vec![1, 3, 3, 7]); + let _ = result_tx.send(ValidationResult::Accept).unwrap(); + } else { + panic!("invalid event received"); + } + assert_eq!(result_rx.await.unwrap(), ValidationResult::Accept); + + // report that a substream has been opened + handle + .report_substream_opened(peer_id, Direction::Inbound, vec![1, 3, 3, 7], None, sink) + .unwrap(); + + if let Some(NotificationEvent::NotificationStreamOpened { + peer, + negotiated_fallback, + handshake, + direction, + }) = notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(negotiated_fallback, None); + assert_eq!(handshake, vec![1, 3, 3, 7]); + assert_eq!(direction, Direction::Inbound); + } else { + panic!("invalid event received"); + } + + // report that a substream has been closed but don't poll `notif` to receive this + // information + handle.report_substream_closed(peer_id).unwrap(); + drop(sync_rx); + + // as per documentation, error is not reported but the notification is silently dropped + notif.send_sync_notification(&peer_id, vec![1, 3, 3, 7]); +} + +#[tokio::test] +async fn peer_disconnects_then_async_notification_is_sent() { + let (proto, mut notif) = notification_service("/proto/1".into()); + let (sink, async_rx, _) = NotificationsSink::new(PeerId::random()); + let (mut handle, _stream) = proto.split(); + let peer_id = PeerId::random(); + + // validate inbound substream + let ValidationCallResult::WaitForValidation(result_rx) = + handle.report_incoming_substream(peer_id, vec![1, 3, 3, 7]).unwrap() + else { + panic!("peerset not enabled"); + }; + + if let Some(NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx }) = + notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(handshake, vec![1, 3, 3, 7]); + let _ = result_tx.send(ValidationResult::Accept).unwrap(); + } else { + panic!("invalid event received"); + } + assert_eq!(result_rx.await.unwrap(), ValidationResult::Accept); + + // report that a substream has been opened + handle + .report_substream_opened(peer_id, Direction::Inbound, vec![1, 3, 3, 7], None, sink) + .unwrap(); + + if let Some(NotificationEvent::NotificationStreamOpened { + peer, + negotiated_fallback, + handshake, + direction, + }) = notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(negotiated_fallback, None); + assert_eq!(handshake, vec![1, 3, 3, 7]); + assert_eq!(direction, Direction::Inbound); + } else { + panic!("invalid event received"); + } + + // report that a substream has been closed but don't poll `notif` to receive this + // information + handle.report_substream_closed(peer_id).unwrap(); + drop(async_rx); + + // as per documentation, error is not reported but the notification is silently dropped + if let Err(error::Error::ConnectionClosed) = + notif.send_async_notification(&peer_id, vec![1, 3, 3, 7]).await + { + } else { + panic!("invalid state after calling `send_async_notificatio()` on closed connection") + } +} + +#[tokio::test] +async fn cloned_service_opening_substream_works() { + let (proto, mut notif1) = notification_service("/proto/1".into()); + let (_sink, _async_rx, _) = NotificationsSink::new(PeerId::random()); + let (handle, _stream) = proto.split(); + let mut notif2 = notif1.clone().unwrap(); + let peer_id = PeerId::random(); + + // validate inbound substream + let ValidationCallResult::WaitForValidation(mut result_rx) = + handle.report_incoming_substream(peer_id, vec![1, 3, 3, 7]).unwrap() + else { + panic!("peerset not enabled"); + }; + + // verify that `notif1` gets the event + if let Some(NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx }) = + notif1.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(handshake, vec![1, 3, 3, 7]); + let _ = result_tx.send(ValidationResult::Accept).unwrap(); + } else { + panic!("invalid event received"); + } + + // verify that because only one listener has thus far send their result, the result is + // pending + assert!(result_rx.try_recv().is_err()); + + // verify that `notif2` also gets the event + if let Some(NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx }) = + notif2.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(handshake, vec![1, 3, 3, 7]); + result_tx.send(ValidationResult::Accept).unwrap(); + } else { + panic!("invalid event received"); + } + + assert_eq!(result_rx.await.unwrap(), ValidationResult::Accept); +} + +#[tokio::test] +async fn cloned_service_one_service_rejects_substream() { + let (proto, mut notif1) = notification_service("/proto/1".into()); + let (_sink, _async_rx, _) = NotificationsSink::new(PeerId::random()); + let (handle, _stream) = proto.split(); + let mut notif2 = notif1.clone().unwrap(); + let mut notif3 = notif2.clone().unwrap(); + let peer_id = PeerId::random(); + + // validate inbound substream + let ValidationCallResult::WaitForValidation(mut result_rx) = + handle.report_incoming_substream(peer_id, vec![1, 3, 3, 7]).unwrap() + else { + panic!("peerset not enabled"); + }; + + for notif in vec![&mut notif1, &mut notif2] { + if let Some(NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx }) = + notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(handshake, vec![1, 3, 3, 7]); + let _ = result_tx.send(ValidationResult::Accept).unwrap(); + } else { + panic!("invalid event received"); + } + } + + // `notif3` has not yet sent their validation result + assert!(result_rx.try_recv().is_err()); + + if let Some(NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx }) = + notif3.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(handshake, vec![1, 3, 3, 7]); + let _ = result_tx.send(ValidationResult::Reject).unwrap(); + } else { + panic!("invalid event received"); + } + assert_eq!(result_rx.await.unwrap(), ValidationResult::Reject); +} + +#[tokio::test] +async fn cloned_service_opening_substream_sending_and_receiving_notifications_work() { + let (proto, mut notif1) = notification_service("/proto/1".into()); + let (sink, _, mut sync_rx) = NotificationsSink::new(PeerId::random()); + let (mut handle, _stream) = proto.split(); + let mut notif2 = notif1.clone().unwrap(); + let mut notif3 = notif1.clone().unwrap(); + let peer_id = PeerId::random(); + + // validate inbound substream + let ValidationCallResult::WaitForValidation(result_rx) = + handle.report_incoming_substream(peer_id, vec![1, 3, 3, 7]).unwrap() + else { + panic!("peerset not enabled"); + }; + + for notif in vec![&mut notif1, &mut notif2, &mut notif3] { + // accept the inbound substream for all services + if let Some(NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx }) = + notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(handshake, vec![1, 3, 3, 7]); + let _ = result_tx.send(ValidationResult::Accept).unwrap(); + } else { + panic!("invalid event received"); + } + } + assert_eq!(result_rx.await.unwrap(), ValidationResult::Accept); + + // report that then notification stream has been opened + handle + .report_substream_opened(peer_id, Direction::Inbound, vec![1, 3, 3, 7], None, sink) + .unwrap(); + + for notif in vec![&mut notif1, &mut notif2, &mut notif3] { + if let Some(NotificationEvent::NotificationStreamOpened { + peer, + negotiated_fallback, + handshake, + direction, + }) = notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(negotiated_fallback, None); + assert_eq!(handshake, vec![1, 3, 3, 7]); + assert_eq!(direction, Direction::Inbound); + } else { + panic!("invalid event received"); + } + } + // receive a notification from peer and verify all services receive it + handle.report_notification_received(peer_id, vec![1, 3, 3, 8]).unwrap(); + + for notif in vec![&mut notif1, &mut notif2, &mut notif3] { + if let Some(NotificationEvent::NotificationReceived { peer, notification }) = + notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(notification, vec![1, 3, 3, 8]); + } else { + panic!("invalid event received"); + } + } + + for (i, notif) in vec![&mut notif1, &mut notif2, &mut notif3].iter().enumerate() { + // send notification from each service and verify peer receives it + notif.send_sync_notification(&peer_id, vec![1, 3, 3, i as u8]); + assert_eq!( + sync_rx.next().await, + Some(NotificationsSinkMessage::Notification { message: vec![1, 3, 3, i as u8] }) + ); + } + + // close the substream for peer and verify all services receive the event + handle.report_substream_closed(peer_id).unwrap(); + + for notif in vec![&mut notif1, &mut notif2, &mut notif3] { + if let Some(NotificationEvent::NotificationStreamClosed { peer }) = notif.next_event().await + { + assert_eq!(peer_id, peer); + } else { + panic!("invalid event received"); + } + } +} + +#[tokio::test] +async fn sending_notifications_using_notifications_sink_works() { + let (proto, mut notif) = notification_service("/proto/1".into()); + let (sink, mut async_rx, mut sync_rx) = NotificationsSink::new(PeerId::random()); + let (mut handle, _stream) = proto.split(); + let peer_id = PeerId::random(); + + // validate inbound substream + let ValidationCallResult::WaitForValidation(result_rx) = + handle.report_incoming_substream(peer_id, vec![1, 3, 3, 7]).unwrap() + else { + panic!("peerset not enabled"); + }; + + if let Some(NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx }) = + notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(handshake, vec![1, 3, 3, 7]); + let _ = result_tx.send(ValidationResult::Accept).unwrap(); + } else { + panic!("invalid event received"); + } + assert_eq!(result_rx.await.unwrap(), ValidationResult::Accept); + + // report that a substream has been opened + handle + .report_substream_opened(peer_id, Direction::Inbound, vec![1, 3, 3, 7], None, sink) + .unwrap(); + + if let Some(NotificationEvent::NotificationStreamOpened { + peer, + negotiated_fallback, + handshake, + direction, + }) = notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(negotiated_fallback, None); + assert_eq!(handshake, vec![1, 3, 3, 7]); + assert_eq!(direction, Direction::Inbound); + } else { + panic!("invalid event received"); + } + + // get a copy of the notification sink and send a synchronous notification using. + let sink = notif.message_sink(&peer_id).unwrap(); + sink.send_sync_notification(vec![1, 3, 3, 6]); + + // send an asynchronous notification using the acquired notifications sink. + let _ = sink.send_async_notification(vec![1, 3, 3, 7]).await.unwrap(); + + assert_eq!( + sync_rx.next().await, + Some(NotificationsSinkMessage::Notification { message: vec![1, 3, 3, 6] }), + ); + assert_eq!( + async_rx.next().await, + Some(NotificationsSinkMessage::Notification { message: vec![1, 3, 3, 7] }), + ); + + // send notifications using the stored notification sink as well. + notif.send_sync_notification(&peer_id, vec![1, 3, 3, 8]); + notif.send_async_notification(&peer_id, vec![1, 3, 3, 9]).await.unwrap(); + + assert_eq!( + sync_rx.next().await, + Some(NotificationsSinkMessage::Notification { message: vec![1, 3, 3, 8] }), + ); + assert_eq!( + async_rx.next().await, + Some(NotificationsSinkMessage::Notification { message: vec![1, 3, 3, 9] }), + ); +} + +#[test] +fn try_to_get_notifications_sink_for_non_existent_peer() { + let (_proto, notif) = notification_service("/proto/1".into()); + assert!(notif.message_sink(&PeerId::random()).is_none()); +} + +#[tokio::test] +async fn notification_sink_replaced() { + let (proto, mut notif) = notification_service("/proto/1".into()); + let (sink, mut async_rx, mut sync_rx) = NotificationsSink::new(PeerId::random()); + let (mut handle, _stream) = proto.split(); + let peer_id = PeerId::random(); + + // validate inbound substream + let ValidationCallResult::WaitForValidation(result_rx) = + handle.report_incoming_substream(peer_id, vec![1, 3, 3, 7]).unwrap() + else { + panic!("peerset not enabled"); + }; + + if let Some(NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx }) = + notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(handshake, vec![1, 3, 3, 7]); + let _ = result_tx.send(ValidationResult::Accept).unwrap(); + } else { + panic!("invalid event received"); + } + assert_eq!(result_rx.await.unwrap(), ValidationResult::Accept); + + // report that a substream has been opened + handle + .report_substream_opened(peer_id, Direction::Inbound, vec![1, 3, 3, 7], None, sink) + .unwrap(); + + if let Some(NotificationEvent::NotificationStreamOpened { + peer, + negotiated_fallback, + handshake, + direction, + }) = notif.next_event().await + { + assert_eq!(peer_id, peer); + assert_eq!(negotiated_fallback, None); + assert_eq!(handshake, vec![1, 3, 3, 7]); + assert_eq!(direction, Direction::Inbound); + } else { + panic!("invalid event received"); + } + + // get a copy of the notification sink and send a synchronous notification using. + let sink = notif.message_sink(&peer_id).unwrap(); + sink.send_sync_notification(vec![1, 3, 3, 6]); + + // send an asynchronous notification using the acquired notifications sink. + let _ = sink.send_async_notification(vec![1, 3, 3, 7]).await.unwrap(); + + assert_eq!( + sync_rx.next().await, + Some(NotificationsSinkMessage::Notification { message: vec![1, 3, 3, 6] }), + ); + assert_eq!( + async_rx.next().await, + Some(NotificationsSinkMessage::Notification { message: vec![1, 3, 3, 7] }), + ); + + // send notifications using the stored notification sink as well. + notif.send_sync_notification(&peer_id, vec![1, 3, 3, 8]); + notif.send_async_notification(&peer_id, vec![1, 3, 3, 9]).await.unwrap(); + + assert_eq!( + sync_rx.next().await, + Some(NotificationsSinkMessage::Notification { message: vec![1, 3, 3, 8] }), + ); + assert_eq!( + async_rx.next().await, + Some(NotificationsSinkMessage::Notification { message: vec![1, 3, 3, 9] }), + ); + + // the initial connection was closed and `Notifications` switched to secondary connection + // and emitted `CustomProtocolReplaced` which informs the local `NotificationService` that + // the notification sink was replaced. + let (new_sink, mut new_async_rx, mut new_sync_rx) = NotificationsSink::new(PeerId::random()); + handle.report_notification_sink_replaced(peer_id, new_sink).unwrap(); + + // drop the old sinks and poll `notif` once to register the sink replacement + drop(sync_rx); + drop(async_rx); + + futures::future::poll_fn(|cx| { + let _ = std::pin::Pin::new(&mut notif.next_event()).poll(cx); + std::task::Poll::Ready(()) + }) + .await; + + // verify that using the `NotificationService` API automatically results in using the correct + // sink + notif.send_sync_notification(&peer_id, vec![1, 3, 3, 8]); + notif.send_async_notification(&peer_id, vec![1, 3, 3, 9]).await.unwrap(); + + assert_eq!( + new_sync_rx.next().await, + Some(NotificationsSinkMessage::Notification { message: vec![1, 3, 3, 8] }), + ); + assert_eq!( + new_async_rx.next().await, + Some(NotificationsSinkMessage::Notification { message: vec![1, 3, 3, 9] }), + ); + + // now send two notifications using the acquired message sink and verify that + // it's also updated + sink.send_sync_notification(vec![1, 3, 3, 6]); + + // send an asynchronous notification using the acquired notifications sink. + let _ = sink.send_async_notification(vec![1, 3, 3, 7]).await.unwrap(); + + assert_eq!( + new_sync_rx.next().await, + Some(NotificationsSinkMessage::Notification { message: vec![1, 3, 3, 6] }), + ); + assert_eq!( + new_async_rx.next().await, + Some(NotificationsSinkMessage::Notification { message: vec![1, 3, 3, 7] }), + ); +} + +#[tokio::test] +async fn set_handshake() { + let (proto, mut notif) = notification_service("/proto/1".into()); + let (_handle, mut stream) = proto.split(); + + assert!(notif.try_set_handshake(vec![1, 3, 3, 7]).is_ok()); + + match stream.next().await { + Some(NotificationCommand::SetHandshake(handshake)) => { + assert_eq!(handshake, vec![1, 3, 3, 7]); + }, + _ => panic!("invalid event received"), + } + + for _ in 0..COMMAND_QUEUE_SIZE { + assert!(notif.try_set_handshake(vec![1, 3, 3, 7]).is_ok()); + } + + assert!(notif.try_set_handshake(vec![1, 3, 3, 7]).is_err()); +} diff --git a/substrate/client/network/src/protocol/notifications/tests.rs b/substrate/client/network/src/protocol/notifications/tests.rs index d57c24144f5..92d269f89c3 100644 --- a/substrate/client/network/src/protocol/notifications/tests.rs +++ b/substrate/client/network/src/protocol/notifications/tests.rs @@ -22,6 +22,7 @@ use crate::{ peer_store::PeerStore, protocol::notifications::{Notifications, NotificationsOut, ProtocolConfig}, protocol_controller::{ProtoSetConfig, ProtocolController, SetId}, + service::traits::{NotificationEvent, ValidationResult}, }; use futures::{future::BoxFuture, prelude::*}; @@ -70,6 +71,8 @@ fn build_nodes() -> (Swarm, Swarm) { .timeout(Duration::from_secs(20)) .boxed(); + let (protocol_handle_pair, mut notif_service) = + crate::protocol::notifications::service::notification_service("/foo".into()); let peer_store = PeerStore::new(if index == 0 { keypairs.iter().skip(1).map(|keypair| keypair.public().to_peer_id()).collect() } else { @@ -91,16 +94,22 @@ fn build_nodes() -> (Swarm, Swarm) { Box::new(peer_store.handle()), ); + let (notif_handle, command_stream) = protocol_handle_pair.split(); let behaviour = CustomProtoWithAddr { inner: Notifications::new( vec![controller_handle], from_controller, - iter::once(ProtocolConfig { - name: "/foo".into(), - fallback_names: Vec::new(), - handshake: Vec::new(), - max_notification_size: 1024 * 1024, - }), + &None, + iter::once(( + ProtocolConfig { + name: "/foo".into(), + fallback_names: Vec::new(), + handshake: Vec::new(), + max_notification_size: 1024 * 1024, + }, + notif_handle, + command_stream, + )), ), peer_store_future: peer_store.run().boxed(), protocol_controller_future: controller.run().boxed(), @@ -118,6 +127,16 @@ fn build_nodes() -> (Swarm, Swarm) { }; let runtime = tokio::runtime::Runtime::new().unwrap(); + runtime.spawn(async move { + loop { + if let NotificationEvent::ValidateInboundSubstream { result_tx, .. } = + notif_service.next_event().await.unwrap() + { + result_tx.send(ValidationResult::Accept).unwrap(); + } + } + }); + let mut swarm = SwarmBuilder::with_executor( transport, behaviour, diff --git a/substrate/client/network/src/protocol_controller.rs b/substrate/client/network/src/protocol_controller.rs index 3a305011ded..4c8f119baa2 100644 --- a/substrate/client/network/src/protocol_controller.rs +++ b/substrate/client/network/src/protocol_controller.rs @@ -847,6 +847,7 @@ mod tests { use super::*; use crate::{peer_store::PeerStoreProvider, ReputationChange}; use libp2p::PeerId; + use sc_network_common::role::ObservedRole; use sc_utils::mpsc::{tracing_unbounded, TryRecvError}; use std::collections::HashSet; @@ -858,8 +859,10 @@ mod tests { fn is_banned(&self, peer_id: &PeerId) -> bool; fn register_protocol(&self, protocol_handle: ProtocolHandle); fn report_disconnect(&mut self, peer_id: PeerId); + fn set_peer_role(&mut self, peer_id: &PeerId, role: ObservedRole); fn report_peer(&mut self, peer_id: PeerId, change: ReputationChange); fn peer_reputation(&self, peer_id: &PeerId) -> i32; + fn peer_role(&self, peer_id: &PeerId) -> Option; fn outgoing_candidates<'a>(&self, count: usize, ignored: HashSet<&'a PeerId>) -> Vec; } } diff --git a/substrate/client/network/src/service.rs b/substrate/client/network/src/service.rs index c1df48ad785..43a3ab09115 100644 --- a/substrate/client/network/src/service.rs +++ b/substrate/client/network/src/service.rs @@ -54,6 +54,7 @@ use crate::{ ReputationChange, }; +use codec::DecodeAll; use either::Either; use futures::{channel::oneshot, prelude::*}; #[allow(deprecated)] @@ -71,10 +72,13 @@ use libp2p::{ Multiaddr, PeerId, }; use log::{debug, error, info, trace, warn}; -use metrics::{Histogram, HistogramVec, MetricSources, Metrics}; +use metrics::{Histogram, MetricSources, Metrics}; use parking_lot::Mutex; -use sc_network_common::ExHashT; +use sc_network_common::{ + role::{ObservedRole, Roles}, + ExHashT, +}; use sc_utils::mpsc::{tracing_unbounded, TracingUnboundedReceiver, TracingUnboundedSender}; use sp_runtime::traits::Block as BlockT; @@ -118,12 +122,6 @@ pub struct NetworkService { bandwidth: Arc, /// Channel that sends messages to the actual worker. to_worker: TracingUnboundedSender, - /// For each peer and protocol combination, an object that allows sending notifications to - /// that peer. Updated by the [`NetworkWorker`]. - peers_notifications_sinks: Arc>>, - /// Field extracted from the [`Metrics`] struct and necessary to report the - /// notifications-related metrics. - notifications_sizes_metric: Option, /// Protocol name -> `SetId` mapping for notification protocols. The map never changes after /// initialization. notification_protocol_ids: HashMap, @@ -132,6 +130,8 @@ pub struct NetworkService { protocol_handles: Vec, /// Shortcut to sync protocol handle (`protocol_handles[0]`). sync_protocol_handle: protocol_controller::ProtocolHandle, + /// Handle to `PeerStore`. + peer_store_handle: PeerStoreHandle, /// Marker to pin the `H` generic. Serves no purpose except to not break backwards /// compatibility. _marker: PhantomData, @@ -199,7 +199,7 @@ where )?; for notification_protocol in ¬ification_protocols { ensure_addresses_consistent_with_transport( - notification_protocol.set_config.reserved_nodes.iter().map(|x| &x.multiaddr), + notification_protocol.set_config().reserved_nodes.iter().map(|x| &x.multiaddr), &network_config.transport, )?; } @@ -241,7 +241,7 @@ where .map(|cfg| usize::try_from(cfg.max_response_size).unwrap_or(usize::MAX)); let notifs_max = notification_protocols .iter() - .map(|cfg| usize::try_from(cfg.max_notification_size).unwrap_or(usize::MAX)); + .map(|cfg| usize::try_from(cfg.max_notification_size()).unwrap_or(usize::MAX)); // A "default" max is added to cover all the other protocols: ping, identify, // kademlia, block announces, and transactions. @@ -273,7 +273,7 @@ where // We must prepend a hardcoded default peer set to notification protocols. let all_peer_sets_iter = iter::once(&network_config.default_peers_set) - .chain(notification_protocols.iter().map(|protocol| &protocol.set_config)); + .chain(notification_protocols.iter().map(|protocol| protocol.set_config())); let (protocol_handles, protocol_controllers): (Vec<_>, Vec<_>) = all_peer_sets_iter .enumerate() @@ -312,21 +312,9 @@ where iter::once(¶ms.block_announce_config) .chain(notification_protocols.iter()) .enumerate() - .map(|(index, protocol)| { - (protocol.notifications_protocol.clone(), SetId::from(index)) - }) + .map(|(index, protocol)| (protocol.protocol_name().clone(), SetId::from(index))) .collect(); - let protocol = Protocol::new( - From::from(¶ms.role), - notification_protocols.clone(), - params.block_announce_config, - params.peer_store.clone(), - protocol_handles.clone(), - from_protocol_controllers, - params.tx, - )?; - let known_addresses = { // Collect all reserved nodes and bootnodes addresses. let mut addresses: Vec<_> = network_config @@ -336,7 +324,7 @@ where .map(|reserved| (reserved.peer_id, reserved.multiaddr.clone())) .chain(notification_protocols.iter().flat_map(|protocol| { protocol - .set_config + .set_config() .reserved_nodes .iter() .map(|reserved| (reserved.peer_id, reserved.multiaddr.clone())) @@ -389,6 +377,16 @@ where let num_connected = Arc::new(AtomicUsize::new(0)); let external_addresses = Arc::new(Mutex::new(HashSet::new())); + let (protocol, notif_protocol_handles) = Protocol::new( + From::from(¶ms.role), + ¶ms.metrics_registry, + notification_protocols, + params.block_announce_config, + params.peer_store.clone(), + protocol_handles.clone(), + from_protocol_controllers, + )?; + // Build the swarm. let (mut swarm, bandwidth): (Swarm>, _) = { let user_agent = @@ -508,7 +506,6 @@ where } let listen_addresses = Arc::new(Mutex::new(HashSet::new())); - let peers_notifications_sinks = Arc::new(Mutex::new(HashMap::new())); let service = Arc::new(NetworkService { bandwidth, @@ -518,13 +515,10 @@ where local_peer_id, local_identity, to_worker, - peers_notifications_sinks: peers_notifications_sinks.clone(), - notifications_sizes_metric: metrics - .as_ref() - .map(|metrics| metrics.notifications_sizes.clone()), notification_protocol_ids, protocol_handles, sync_protocol_handle, + peer_store_handle: params.peer_store.clone(), _marker: PhantomData, _block: Default::default(), }); @@ -539,8 +533,8 @@ where metrics, boot_node_ids, reported_invalid_boot_nodes: Default::default(), - peers_notifications_sinks, peer_store_handle: params.peer_store, + notif_protocol_handles, _marker: Default::default(), _block: Default::default(), }) @@ -567,7 +561,7 @@ where /// Returns the number of peers we're connected to. pub fn num_connected_peers(&self) -> usize { - self.network_service.behaviour().user_protocol().num_connected_peers() + self.network_service.behaviour().user_protocol().num_sync_peers() } /// Adds an address for a node. @@ -991,6 +985,16 @@ where fn sync_num_connected(&self) -> usize { self.num_connected.load(Ordering::Relaxed) } + + fn peer_role(&self, peer_id: PeerId, handshake: Vec) -> Option { + match Roles::decode_all(&mut &handshake[..]) { + Ok(role) => Some(role.into()), + Err(_) => { + log::debug!(target: "sub-libp2p", "handshake doesn't contain peer role: {handshake:?}"); + self.peer_store_handle.peer_role(&peer_id) + }, + } + } } impl NetworkEventStream for NetworkService @@ -1010,68 +1014,20 @@ where B: BlockT + 'static, H: ExHashT, { - fn write_notification(&self, target: PeerId, protocol: ProtocolName, message: Vec) { - // We clone the `NotificationsSink` in order to be able to unlock the network-wide - // `peers_notifications_sinks` mutex as soon as possible. - let sink = { - let peers_notifications_sinks = self.peers_notifications_sinks.lock(); - if let Some(sink) = peers_notifications_sinks.get(&(target, protocol.clone())) { - sink.clone() - } else { - // Notification silently discarded, as documented. - debug!( - target: "sub-libp2p", - "Attempted to send notification on missing or closed substream: {}, {:?}", - target, protocol, - ); - return - } - }; - - if let Some(notifications_sizes_metric) = self.notifications_sizes_metric.as_ref() { - notifications_sizes_metric - .with_label_values(&["out", &protocol]) - .observe(message.len() as f64); - } - - // Sending is communicated to the `NotificationsSink`. - trace!( - target: "sub-libp2p", - "External API => Notification({:?}, {:?}, {} bytes)", - target, protocol, message.len() - ); - trace!(target: "sub-libp2p", "Handler({:?}) <= Sync notification", target); - sink.send_sync_notification(message); + fn write_notification(&self, _target: PeerId, _protocol: ProtocolName, _message: Vec) { + unimplemented!(); } fn notification_sender( &self, - target: PeerId, - protocol: ProtocolName, + _target: PeerId, + _protocol: ProtocolName, ) -> Result, NotificationSenderError> { - // We clone the `NotificationsSink` in order to be able to unlock the network-wide - // `peers_notifications_sinks` mutex as soon as possible. - let sink = { - let peers_notifications_sinks = self.peers_notifications_sinks.lock(); - if let Some(sink) = peers_notifications_sinks.get(&(target, protocol.clone())) { - sink.clone() - } else { - return Err(NotificationSenderError::Closed) - } - }; - - let notification_size_metric = self - .notifications_sizes_metric - .as_ref() - .map(|histogram| histogram.with_label_values(&["out", &protocol])); - - Ok(Box::new(NotificationSender { sink, protocol_name: protocol, notification_size_metric })) + unimplemented!(); } - fn set_notification_handshake(&self, protocol: ProtocolName, handshake: Vec) { - let _ = self - .to_worker - .unbounded_send(ServiceToWorkerMsg::SetNotificationHandshake(protocol, handshake)); + fn set_notification_handshake(&self, _protocol: ProtocolName, _handshake: Vec) { + unimplemented!(); } } @@ -1209,7 +1165,6 @@ enum ServiceToWorkerMsg { pending_response: oneshot::Sender>, }, DisconnectPeer(PeerId, ProtocolName), - SetNotificationHandshake(ProtocolName, Vec), } /// Main network worker. Must be polled in order for the network to advance. @@ -1239,11 +1194,10 @@ where boot_node_ids: Arc>>, /// Boot nodes that we already have reported as invalid. reported_invalid_boot_nodes: HashSet, - /// For each peer and protocol combination, an object that allows sending notifications to - /// that peer. Shared with the [`NetworkService`]. - peers_notifications_sinks: Arc>>, /// Peer reputation store handle. peer_store_handle: PeerStoreHandle, + /// Notification protocol handles. + notif_protocol_handles: Vec, /// Marker to pin the `H` generic. Serves no purpose except to not break backwards /// compatibility. _marker: PhantomData, @@ -1282,8 +1236,7 @@ where }; // Update the `num_connected` count shared with the `NetworkService`. - let num_connected_peers = - self.network_service.behaviour_mut().user_protocol_mut().num_connected_peers(); + let num_connected_peers = self.network_service.behaviour().user_protocol().num_sync_peers(); self.num_connected.store(num_connected_peers, Ordering::Relaxed); if let Some(metrics) = self.metrics.as_ref() { @@ -1353,11 +1306,6 @@ where .behaviour_mut() .user_protocol_mut() .disconnect_peer(&who, protocol_name), - ServiceToWorkerMsg::SetNotificationHandshake(protocol, handshake) => self - .network_service - .behaviour_mut() - .user_protocol_mut() - .set_notification_handshake(protocol, handshake), } } @@ -1472,47 +1420,27 @@ where }, SwarmEvent::Behaviour(BehaviourOut::NotificationStreamOpened { remote, - protocol, + set_id, + direction, negotiated_fallback, notifications_sink, - role, received_handshake, }) => { - if let Some(metrics) = self.metrics.as_ref() { - metrics - .notifications_streams_opened_total - .with_label_values(&[&protocol]) - .inc(); - } - { - let mut peers_notifications_sinks = self.peers_notifications_sinks.lock(); - let _previous_value = peers_notifications_sinks - .insert((remote, protocol.clone()), notifications_sink); - debug_assert!(_previous_value.is_none()); - } - self.event_streams.send(Event::NotificationStreamOpened { + let _ = self.notif_protocol_handles[usize::from(set_id)].report_substream_opened( remote, - protocol, - negotiated_fallback, - role, + direction, received_handshake, - }); + negotiated_fallback, + notifications_sink, + ); }, SwarmEvent::Behaviour(BehaviourOut::NotificationStreamReplaced { remote, - protocol, + set_id, notifications_sink, }) => { - let mut peers_notifications_sinks = self.peers_notifications_sinks.lock(); - if let Some(s) = peers_notifications_sinks.get_mut(&(remote, protocol)) { - *s = notifications_sink; - } else { - error!( - target: "sub-libp2p", - "NotificationStreamReplaced for non-existing substream" - ); - debug_assert!(false); - } + let _ = self.notif_protocol_handles[usize::from(set_id)] + .report_notification_sink_replaced(remote, notifications_sink); // TODO: Notifications might have been lost as a result of the previous // connection being dropped, and as a result it would be preferable to notify @@ -1535,31 +1463,17 @@ where // role, // }); }, - SwarmEvent::Behaviour(BehaviourOut::NotificationStreamClosed { remote, protocol }) => { - if let Some(metrics) = self.metrics.as_ref() { - metrics - .notifications_streams_closed_total - .with_label_values(&[&protocol[..]]) - .inc(); - } - self.event_streams - .send(Event::NotificationStreamClosed { remote, protocol: protocol.clone() }); - { - let mut peers_notifications_sinks = self.peers_notifications_sinks.lock(); - let _previous_value = peers_notifications_sinks.remove(&(remote, protocol)); - debug_assert!(_previous_value.is_some()); - } + SwarmEvent::Behaviour(BehaviourOut::NotificationStreamClosed { remote, set_id }) => { + let _ = self.notif_protocol_handles[usize::from(set_id)] + .report_substream_closed(remote); }, - SwarmEvent::Behaviour(BehaviourOut::NotificationsReceived { remote, messages }) => { - if let Some(metrics) = self.metrics.as_ref() { - for (protocol, message) in &messages { - metrics - .notifications_sizes - .with_label_values(&["in", protocol]) - .observe(message.len() as f64); - } - } - self.event_streams.send(Event::NotificationsReceived { remote, messages }); + SwarmEvent::Behaviour(BehaviourOut::NotificationsReceived { + remote, + set_id, + notification, + }) => { + let _ = self.notif_protocol_handles[usize::from(set_id)] + .report_notification_received(remote, notification); }, SwarmEvent::Behaviour(BehaviourOut::Dht(event, duration)) => { if let Some(metrics) = self.metrics.as_ref() { diff --git a/substrate/client/network/src/service/metrics.rs b/substrate/client/network/src/service/metrics.rs index 13bc4b4e7af..c349fd98c76 100644 --- a/substrate/client/network/src/service/metrics.rs +++ b/substrate/client/network/src/service/metrics.rs @@ -61,9 +61,6 @@ pub struct Metrics { pub kbuckets_num_nodes: GaugeVec, pub listeners_local_addresses: Gauge, pub listeners_errors_total: Counter, - pub notifications_sizes: HistogramVec, - pub notifications_streams_closed_total: CounterVec, - pub notifications_streams_opened_total: CounterVec, pub peerset_num_discovered: Gauge, pub pending_connections: Gauge, pub pending_connections_errors_total: CounterVec, @@ -153,31 +150,6 @@ impl Metrics { "substrate_sub_libp2p_listeners_errors_total", "Total number of non-fatal errors reported by a listener" )?, registry)?, - notifications_sizes: prometheus::register(HistogramVec::new( - HistogramOpts { - common_opts: Opts::new( - "substrate_sub_libp2p_notifications_sizes", - "Sizes of the notifications send to and received from all nodes" - ), - buckets: prometheus::exponential_buckets(64.0, 4.0, 8) - .expect("parameters are always valid values; qed"), - }, - &["direction", "protocol"] - )?, registry)?, - notifications_streams_closed_total: prometheus::register(CounterVec::new( - Opts::new( - "substrate_sub_libp2p_notifications_streams_closed_total", - "Total number of notification substreams that have been closed" - ), - &["protocol"] - )?, registry)?, - notifications_streams_opened_total: prometheus::register(CounterVec::new( - Opts::new( - "substrate_sub_libp2p_notifications_streams_opened_total", - "Total number of notification substreams that have been opened" - ), - &["protocol"] - )?, registry)?, peerset_num_discovered: prometheus::register(Gauge::new( "substrate_sub_libp2p_peerset_num_discovered", "Number of nodes stored in the peerset manager", diff --git a/substrate/client/network/src/service/signature.rs b/substrate/client/network/src/service/signature.rs index 024f60e4c46..5b2ba6be8cf 100644 --- a/substrate/client/network/src/service/signature.rs +++ b/substrate/client/network/src/service/signature.rs @@ -18,6 +18,8 @@ // // If you read this, you are very thorough, congratulations. +//! Signature-related code + use libp2p::{ identity::{Keypair, PublicKey}, PeerId, diff --git a/substrate/client/network/src/service/traits.rs b/substrate/client/network/src/service/traits.rs index bed325ede4a..f66e810be11 100644 --- a/substrate/client/network/src/service/traits.rs +++ b/substrate/client/network/src/service/traits.rs @@ -18,8 +18,11 @@ // // If you read this, you are very thorough, congratulations. +//! Traits defined by `sc-network`. + use crate::{ config::MultiaddrWithPeerId, + error, event::Event, request_responses::{IfDisconnected, RequestFailure}, service::signature::Signature, @@ -30,7 +33,9 @@ use crate::{ use futures::{channel::oneshot, Stream}; use libp2p::{Multiaddr, PeerId}; -use std::{collections::HashSet, future::Future, pin::Pin, sync::Arc}; +use sc_network_common::role::ObservedRole; + +use std::{collections::HashSet, fmt::Debug, future::Future, pin::Pin, sync::Arc}; pub use libp2p::{identity::SigningError, kad::record::Key as KademliaKey}; @@ -221,6 +226,14 @@ pub trait NetworkPeers { /// Returns the number of peers in the sync peer set we're connected to. fn sync_num_connected(&self) -> usize; + + /// Attempt to get peer role. + /// + /// Right now the peer role is decoded from the received handshake for all protocols + /// (`/block-announces/1` has other information as well). If the handshake cannot be + /// decoded into a role, the role queried from `PeerStore` and if the role is not stored + /// there either, `None` is returned and the peer should be discarded. + fn peer_role(&self, peer_id: PeerId, handshake: Vec) -> Option; } // Manual implementation to avoid extra boxing here @@ -296,6 +309,10 @@ where fn sync_num_connected(&self) -> usize { T::sync_num_connected(self) } + + fn peer_role(&self, peer_id: PeerId, handshake: Vec) -> Option { + T::peer_role(self, peer_id, handshake) + } } /// Provides access to network-level event stream. @@ -611,3 +628,189 @@ where T::new_best_block_imported(self, hash, number) } } + +/// Substream acceptance result. +#[derive(Debug, PartialEq, Eq)] +pub enum ValidationResult { + /// Accept inbound substream. + Accept, + + /// Reject inbound substream. + Reject, +} + +/// Substream direction. +#[derive(Debug, Copy, Clone, PartialEq, Eq)] +pub enum Direction { + /// Substream opened by the remote node. + Inbound, + + /// Substream opened by the local node. + Outbound, +} + +impl Direction { + /// Is the direction inbound. + pub fn is_inbound(&self) -> bool { + std::matches!(self, Direction::Inbound) + } +} + +/// Events received by the protocol from `Notifications`. +#[derive(Debug)] +pub enum NotificationEvent { + /// Validate inbound substream. + ValidateInboundSubstream { + /// Peer ID. + peer: PeerId, + + /// Received handshake. + handshake: Vec, + + /// `oneshot::Sender` for sending validation result back to `Notifications` + result_tx: tokio::sync::oneshot::Sender, + }, + + /// Remote identified by `PeerId` opened a substream and sent `Handshake`. + /// Validate `Handshake` and report status (accept/reject) to `Notifications`. + NotificationStreamOpened { + /// Peer ID. + peer: PeerId, + + /// Is the substream inbound or outbound. + direction: Direction, + + /// Received handshake. + handshake: Vec, + + /// Negotiated fallback. + negotiated_fallback: Option, + }, + + /// Substream was closed. + NotificationStreamClosed { + /// Peer Id. + peer: PeerId, + }, + + /// Notification was received from the substream. + NotificationReceived { + /// Peer ID. + peer: PeerId, + + /// Received notification. + notification: Vec, + }, +} + +/// Notification service +/// +/// Defines behaviors that both the protocol implementations and `Notifications` can expect from +/// each other. +/// +/// `Notifications` can send two different kinds of information to protocol: +/// * substream-related information +/// * notification-related information +/// +/// When an unvalidated, inbound substream is received by `Notifications`, it sends the inbound +/// stream information (peer ID, handshake) to protocol for validation. Protocol must then verify +/// that the handshake is valid (and in the future that it has a slot it can allocate for the peer) +/// and then report back the `ValidationResult` which is either `Accept` or `Reject`. +/// +/// After the validation result has been received by `Notifications`, it prepares the +/// substream for communication by initializing the necessary sinks and emits +/// `NotificationStreamOpened` which informs the protocol that the remote peer is ready to receive +/// notifications. +/// +/// Two different flavors of sending options are provided: +/// * synchronous sending ([`NotificationService::send_sync_notification()`]) +/// * asynchronous sending ([`NotificationService::send_async_notification()`]) +/// +/// The former is used by the protocols not ready to exercise backpressure and the latter by the +/// protocols that can do it. +/// +/// Both local and remote peer can close the substream at any time. Local peer can do so by calling +/// [`NotificationService::close_substream()`] which instructs `Notifications` to close the +/// substream. Remote closing the substream is indicated to the local peer by receiving +/// [`NotificationEvent::NotificationStreamClosed`] event. +/// +/// In case the protocol must update its handshake while it's operating (such as updating the best +/// block information), it can do so by calling [`NotificationService::set_handshake()`] +/// which instructs `Notifications` to update the handshake it stored during protocol +/// initialization. +/// +/// All peer events are multiplexed on the same incoming event stream from `Notifications` and thus +/// each event carries a `PeerId` so the protocol knows whose information to update when receiving +/// an event. +#[async_trait::async_trait] +pub trait NotificationService: Debug + Send { + /// Instruct `Notifications` to open a new substream for `peer`. + /// + /// `dial_if_disconnected` informs `Notifications` whether to dial + // the peer if there is currently no active connection to it. + // + // NOTE: not offered by the current implementation + async fn open_substream(&mut self, peer: PeerId) -> Result<(), ()>; + + /// Instruct `Notifications` to close substream for `peer`. + // + // NOTE: not offered by the current implementation + async fn close_substream(&mut self, peer: PeerId) -> Result<(), ()>; + + /// Send synchronous `notification` to `peer`. + fn send_sync_notification(&self, peer: &PeerId, notification: Vec); + + /// Send asynchronous `notification` to `peer`, allowing sender to exercise backpressure. + /// + /// Returns an error if the peer doesn't exist. + async fn send_async_notification( + &self, + peer: &PeerId, + notification: Vec, + ) -> Result<(), error::Error>; + + /// Set handshake for the notification protocol replacing the old handshake. + async fn set_handshake(&mut self, handshake: Vec) -> Result<(), ()>; + + /// Non-blocking variant of `set_handshake()` that attempts to update the handshake + /// and returns an error if the channel is blocked. + /// + /// Technically the function can return an error if the channel to `Notifications` is closed + /// but that doesn't happen under normal operation. + fn try_set_handshake(&mut self, handshake: Vec) -> Result<(), ()>; + + /// Get next event from the `Notifications` event stream. + async fn next_event(&mut self) -> Option; + + /// Make a copy of the object so it can be shared between protocol components + /// who wish to have access to the same underlying notification protocol. + fn clone(&mut self) -> Result, ()>; + + /// Get protocol name of the `NotificationService`. + fn protocol(&self) -> &ProtocolName; + + /// Get message sink of the peer. + fn message_sink(&self, peer: &PeerId) -> Option>; +} + +/// Message sink for peers. +/// +/// If protocol cannot use [`NotificationService`] to send notifications to peers and requires, +/// e.g., notifications to be sent in another task, the protocol may acquire a [`MessageSink`] +/// object for each peer by calling [`NotificationService::message_sink()`]. Calling this +/// function returns an object which allows the protocol to send notifications to the remote peer. +/// +/// Use of this API is discouraged as it's not as performant as sending notifications through +/// [`NotificationService`] due to synchronization required to keep the underlying notification +/// sink up to date with possible sink replacement events. +#[async_trait::async_trait] +pub trait MessageSink: Send + Sync { + /// Send synchronous `notification` to the peer associated with this [`MessageSink`]. + fn send_sync_notification(&self, notification: Vec); + + /// Send an asynchronous `notification` to to the peer associated with this [`MessageSink`], + /// allowing sender to exercise backpressure. + /// + /// Returns an error if the peer does not exist. + async fn send_async_notification(&self, notification: Vec) -> Result<(), error::Error>; +} diff --git a/substrate/client/network/statement/src/lib.rs b/substrate/client/network/statement/src/lib.rs index 69d4faa13ef..5187e681d83 100644 --- a/substrate/client/network/statement/src/lib.rs +++ b/substrate/client/network/statement/src/lib.rs @@ -21,12 +21,13 @@ //! Usage: //! //! - Use [`StatementHandlerPrototype::new`] to create a prototype. -//! - Pass the return value of [`StatementHandlerPrototype::set_config`] to the network -//! configuration as an extra peers set. +//! - Pass the `NonDefaultSetConfig` returned from [`StatementHandlerPrototype::new`] to the network +//! configuration as an extra peers set. //! - Use [`StatementHandlerPrototype::build`] then [`StatementHandler::run`] to obtain a //! `Future` that processes statements. use crate::config::*; + use codec::{Decode, Encode}; use futures::{channel::oneshot, prelude::*, stream::FuturesUnordered, FutureExt}; use libp2p::{multiaddr, PeerId}; @@ -34,7 +35,7 @@ use prometheus_endpoint::{register, Counter, PrometheusError, Registry, U64}; use sc_network::{ config::{NonDefaultSetConfig, NonReservedPeerMode, SetConfig}, error, - event::Event, + service::traits::{NotificationEvent, NotificationService, ValidationResult}, types::ProtocolName, utils::{interval, LruHashSet}, NetworkEventStream, NetworkNotification, NetworkPeers, @@ -101,35 +102,35 @@ impl Metrics { /// Prototype for a [`StatementHandler`]. pub struct StatementHandlerPrototype { protocol_name: ProtocolName, + notification_service: Box, } impl StatementHandlerPrototype { /// Create a new instance. - pub fn new>(genesis_hash: Hash, fork_id: Option<&str>) -> Self { + pub fn new>( + genesis_hash: Hash, + fork_id: Option<&str>, + ) -> (Self, NonDefaultSetConfig) { let genesis_hash = genesis_hash.as_ref(); let protocol_name = if let Some(fork_id) = fork_id { format!("/{}/{}/statement/1", array_bytes::bytes2hex("", genesis_hash), fork_id) } else { format!("/{}/statement/1", array_bytes::bytes2hex("", genesis_hash)) }; - - Self { protocol_name: protocol_name.into() } - } - - /// Returns the configuration of the set to put in the network configuration. - pub fn set_config(&self) -> NonDefaultSetConfig { - NonDefaultSetConfig { - notifications_protocol: self.protocol_name.clone(), - fallback_names: Vec::new(), - max_notification_size: MAX_STATEMENT_SIZE, - handshake: None, - set_config: SetConfig { + let (config, notification_service) = NonDefaultSetConfig::new( + protocol_name.clone().into(), + Vec::new(), + MAX_STATEMENT_SIZE, + None, + SetConfig { in_peers: 0, out_peers: 0, reserved_nodes: Vec::new(), non_reserved_mode: NonReservedPeerMode::Deny, }, - } + ); + + (Self { protocol_name: protocol_name.into(), notification_service }, config) } /// Turns the prototype into the actual handler. @@ -147,7 +148,6 @@ impl StatementHandlerPrototype { metrics_registry: Option<&Registry>, executor: impl Fn(Pin + Send>>) + Send, ) -> error::Result> { - let net_event_stream = network.event_stream("statement-handler-net"); let sync_event_stream = sync.event_stream("statement-handler-sync"); let (queue_sender, mut queue_receiver) = async_channel::bounded(100_000); @@ -176,6 +176,7 @@ impl StatementHandlerPrototype { let handler = StatementHandler { protocol_name: self.protocol_name, + notification_service: self.notification_service, propagate_timeout: (Box::pin(interval(PROPAGATE_TIMEOUT)) as Pin + Send>>) .fuse(), @@ -183,7 +184,6 @@ impl StatementHandlerPrototype { pending_statements_peers: HashMap::new(), network, sync, - net_event_stream: net_event_stream.fuse(), sync_event_stream: sync_event_stream.fuse(), peers: HashMap::new(), statement_store, @@ -219,10 +219,10 @@ pub struct StatementHandler< network: N, /// Syncing service. sync: S, - /// Stream of networking events. - net_event_stream: stream::Fuse + Send>>>, /// Receiver for syncing-related events. sync_event_stream: stream::Fuse + Send>>>, + /// Notification service. + notification_service: Box, // All connected peers peers: HashMap, statement_store: Arc, @@ -261,14 +261,6 @@ where log::warn!(target: LOG_TARGET, "Inconsistent state, no peers for pending statement!"); } }, - network_event = self.net_event_stream.next() => { - if let Some(network_event) = network_event { - self.handle_network_event(network_event).await; - } else { - // Networking has seemingly closed. Closing as well. - return; - } - }, sync_event = self.sync_event_stream.next() => { if let Some(sync_event) = sync_event { self.handle_sync_event(sync_event); @@ -277,6 +269,14 @@ where return; } } + event = self.notification_service.next_event().fuse() => { + if let Some(event) = event { + self.handle_notification_event(event) + } else { + // `Notifications` has seemingly closed. Closing as well. + return + } + } } } } @@ -306,14 +306,24 @@ where } } - async fn handle_network_event(&mut self, event: Event) { + fn handle_notification_event(&mut self, event: NotificationEvent) { match event { - Event::Dht(_) => {}, - Event::NotificationStreamOpened { remote, protocol, role, .. } - if protocol == self.protocol_name => - { + NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx, .. } => { + // only accept peers whose role can be determined + let result = self + .network + .peer_role(peer, handshake) + .map_or(ValidationResult::Reject, |_| ValidationResult::Accept); + let _ = result_tx.send(result); + }, + NotificationEvent::NotificationStreamOpened { peer, handshake, .. } => { + let Some(role) = self.network.peer_role(peer, handshake) else { + log::debug!(target: LOG_TARGET, "role for {peer} couldn't be determined"); + return + }; + let _was_in = self.peers.insert( - remote, + peer, Peer { known_statements: LruHashSet::new( NonZeroUsize::new(MAX_KNOWN_STATEMENTS).expect("Constant is nonzero"), @@ -323,39 +333,26 @@ where ); debug_assert!(_was_in.is_none()); }, - Event::NotificationStreamClosed { remote, protocol } - if protocol == self.protocol_name => - { - let _peer = self.peers.remove(&remote); + NotificationEvent::NotificationStreamClosed { peer } => { + let _peer = self.peers.remove(&peer); debug_assert!(_peer.is_some()); }, + NotificationEvent::NotificationReceived { peer, notification } => { + // Accept statements only when node is not major syncing + if self.sync.is_major_syncing() { + log::trace!( + target: LOG_TARGET, + "{peer}: Ignoring statements while major syncing or offline" + ); + return + } - Event::NotificationsReceived { remote, messages } => { - for (protocol, message) in messages { - if protocol != self.protocol_name { - continue - } - // Accept statements only when node is not major syncing - if self.sync.is_major_syncing() { - log::trace!( - target: LOG_TARGET, - "{remote}: Ignoring statements while major syncing or offline" - ); - continue - } - if let Ok(statements) = ::decode(&mut message.as_ref()) { - self.on_statements(remote, statements); - } else { - log::debug!( - target: LOG_TARGET, - "Failed to decode statement list from {remote}" - ); - } + if let Ok(statements) = ::decode(&mut notification.as_ref()) { + self.on_statements(peer, statements); + } else { + log::debug!(target: LOG_TARGET, "Failed to decode statement list from {peer}"); } }, - - // Not our concern. - Event::NotificationStreamOpened { .. } | Event::NotificationStreamClosed { .. } => {}, } } diff --git a/substrate/client/network/sync/src/engine.rs b/substrate/client/network/sync/src/engine.rs index 2cb8eab22f7..d7b024cd801 100644 --- a/substrate/client/network/sync/src/engine.rs +++ b/substrate/client/network/sync/src/engine.rs @@ -38,7 +38,7 @@ use crate::{ warp::{EncodedProof, WarpProofRequest, WarpSyncParams}, }; -use codec::{Decode, Encode}; +use codec::{Decode, DecodeAll, Encode}; use futures::{ channel::oneshot, future::{BoxFuture, Fuse}, @@ -61,9 +61,12 @@ use sc_network::{ FullNetworkConfiguration, NonDefaultSetConfig, NonReservedPeerMode, NotificationHandshake, ProtocolId, SetConfig, }, + peer_store::{PeerStoreHandle, PeerStoreProvider}, request_responses::{IfDisconnected, RequestFailure}, + service::traits::{Direction, NotificationEvent, ValidationResult}, + types::ProtocolName, utils::LruHashSet, - NotificationsSink, ProtocolName, ReputationChange, + NotificationService, ReputationChange, }; use sc_network_common::{ role::Roles, @@ -88,15 +91,15 @@ use std::{ time::{Duration, Instant}, }; -/// Log target for this file. -const LOG_TARGET: &'static str = "sync"; - /// Interval at which we perform time based maintenance const TICK_TIMEOUT: std::time::Duration = std::time::Duration::from_millis(1100); /// Maximum number of known block hashes to keep for a peer. const MAX_KNOWN_BLOCKS: usize = 1024; // ~32kb per peer + LruHashSet overhead +/// Logging target for the file. +const LOG_TARGET: &str = "sync"; + /// If the block announces stream to peer has been inactive for 30 seconds meaning local node /// has not sent or received block announcements to/from the peer, report the node for inactivity, /// disconnect it and attempt to establish connection to some other peer. @@ -226,8 +229,6 @@ pub struct Peer { pub info: ExtendedPeerInfo, /// Holds a set of blocks known to this peer. pub known_blocks: LruHashSet, - /// Notification sink. - sink: NotificationsSink, /// Is the peer inbound. inbound: bool, } @@ -252,9 +253,6 @@ pub struct SyncingEngine { /// Channel for receiving service commands service_rx: TracingUnboundedReceiver>, - /// Channel for receiving inbound connections from `Protocol`. - sync_events_rx: sc_utils::mpsc::TracingUnboundedReceiver>, - /// Assigned roles. roles: Roles, @@ -312,12 +310,18 @@ pub struct SyncingEngine { /// Prometheus metrics. metrics: Option, + /// Handle that is used to communicate with `sc_network::Notifications`. + notification_service: Box, + /// When the syncing was started. /// /// Stored as an `Option` so once the initial wait has passed, `SyncingEngine` /// can reset the peer timers and continue with the normal eviction process. syncing_started: Option, + /// Handle to `PeerStore`. + peer_store_handle: PeerStoreHandle, + /// Instant when the last notification was sent or received. last_notification_io: Instant, @@ -362,7 +366,7 @@ where block_downloader: Arc>, state_request_protocol_name: ProtocolName, warp_sync_protocol_name: Option, - sync_events_rx: sc_utils::mpsc::TracingUnboundedReceiver>, + peer_store_handle: PeerStoreHandle, ) -> Result<(Self, SyncingService, NonDefaultSetConfig), ClientError> { let mode = net_config.network_config.sync_mode; let max_parallel_downloads = net_config.network_config.max_parallel_downloads; @@ -387,7 +391,7 @@ where } for config in net_config.notification_protocols() { let peer_ids = config - .set_config + .set_config() .reserved_nodes .iter() .map(|info| info.peer_id) @@ -438,7 +442,7 @@ where let warp_sync_target_block_header_rx_fused = warp_sync_target_block_header_rx .map_or(futures::future::pending().boxed().fuse(), |rx| rx.boxed().fuse()); - let block_announce_config = Self::get_block_announce_proto_config( + let (block_announce_config, notification_service) = Self::get_block_announce_proto_config( protocol_id, fork_id, roles, @@ -450,7 +454,6 @@ where .flatten() .expect("Genesis block exists; qed"), ); - let block_announce_protocol_name = block_announce_config.notifications_protocol.clone(); let chain_sync = ChainSync::new( mode, @@ -460,6 +463,7 @@ where warp_sync_config, )?; + let block_announce_protocol_name = block_announce_config.protocol_name().clone(); let (tx, service_rx) = tracing_unbounded("mpsc_chain_sync", 100_000); let num_connected = Arc::new(AtomicUsize::new(0)); let is_major_syncing = Arc::new(AtomicBool::new(false)); @@ -496,7 +500,6 @@ where num_connected: num_connected.clone(), is_major_syncing: is_major_syncing.clone(), service_rx, - sync_events_rx, genesis_hash, important_peers, default_peers_set_no_slot_connected_peers: HashSet::new(), @@ -508,8 +511,10 @@ where num_in_peers: 0usize, max_in_peers, event_streams: Vec::new(), + notification_service, tick_timeout, syncing_started: None, + peer_store_handle, last_notification_io: Instant::now(), metrics: if let Some(r) = metrics_registry { match Metrics::register(r, is_major_syncing.clone()) { @@ -673,23 +678,11 @@ where }; self.last_notification_io = Instant::now(); - peer.sink.send_sync_notification(message.encode()); + let _ = self.notification_service.send_sync_notification(peer_id, message.encode()); } } } - /// Inform sync about new best imported block. - pub fn new_best_block_imported(&mut self, hash: B::Hash, number: NumberFor) { - log::debug!(target: LOG_TARGET, "New best block imported {hash:?}/#{number}"); - - self.chain_sync.update_chain_info(&hash, number); - self.network_service.set_notification_handshake( - self.block_announce_protocol_name.clone(), - BlockAnnouncesHandshake::::build(self.roles, number, hash, self.genesis_hash) - .encode(), - ) - } - pub async fn run(mut self) { self.syncing_started = Some(Instant::now()); @@ -698,8 +691,10 @@ where _ = self.tick_timeout.tick() => self.perform_periodic_actions(), command = self.service_rx.select_next_some() => self.process_service_command(command), - sync_event = self.sync_events_rx.select_next_some() => - self.process_sync_event(sync_event), + notification_event = self.notification_service.next_event() => match notification_event { + Some(event) => self.process_notification_event(event), + None => return, + }, warp_target_block_header = &mut self.warp_sync_target_block_header_rx_fused => self.pass_warp_sync_target_block_header(warp_target_block_header), response_event = self.pending_responses.select_next_some() => @@ -853,8 +848,20 @@ where } }, ToServiceCommand::AnnounceBlock(hash, data) => self.announce_block(hash, data), - ToServiceCommand::NewBestBlockImported(hash, number) => - self.new_best_block_imported(hash, number), + ToServiceCommand::NewBestBlockImported(hash, number) => { + log::debug!(target: "sync", "New best block imported {:?}/#{}", hash, number); + + self.chain_sync.update_chain_info(&hash, number); + let _ = self.notification_service.try_set_handshake( + BlockAnnouncesHandshake::::build( + self.roles, + number, + hash, + self.genesis_hash, + ) + .encode(), + ); + }, ToServiceCommand::Status(tx) => { let mut status = self.chain_sync.status(); status.num_connected_peers = self.peers.len() as u32; @@ -894,56 +901,60 @@ where } } - fn process_sync_event(&mut self, event: sc_network::SyncEvent) { + fn process_notification_event(&mut self, event: NotificationEvent) { match event { - sc_network::SyncEvent::NotificationStreamOpened { - remote, - received_handshake, - sink, - inbound, - tx, - } => match self.on_sync_peer_connected(remote, &received_handshake, sink, inbound) { - Ok(()) => { - let _ = tx.send(true); - }, - Err(()) => { - log::debug!( - target: LOG_TARGET, - "Failed to register peer {remote:?}: {received_handshake:?}", - ); - let _ = tx.send(false); - }, - }, - sc_network::SyncEvent::NotificationStreamClosed { remote } => { - if self.on_sync_peer_disconnected(remote).is_err() { - log::trace!( - target: LOG_TARGET, - "Disconnected peer which had earlier been refused by on_sync_peer_connected {}", - remote - ); - } + NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx } => { + let validation_result = self + .validate_connection(&peer, handshake, Direction::Inbound) + .map_or(ValidationResult::Reject, |_| ValidationResult::Accept); + + let _ = result_tx.send(validation_result); }, - sc_network::SyncEvent::NotificationsReceived { remote, messages } => { - for message in messages { - if self.peers.contains_key(&remote) { - if let Ok(announce) = BlockAnnounce::decode(&mut message.as_ref()) { - self.last_notification_io = Instant::now(); - self.push_block_announce_validation(remote, announce); - } else { - log::warn!(target: "sub-libp2p", "Failed to decode block announce"); + NotificationEvent::NotificationStreamOpened { peer, handshake, direction, .. } => { + log::debug!( + target: LOG_TARGET, + "Substream opened for {peer}, handshake {handshake:?}" + ); + + match self.validate_connection(&peer, handshake, direction) { + Ok(handshake) => { + if self.on_sync_peer_connected(peer, &handshake, direction).is_err() { + log::debug!(target: LOG_TARGET, "Failed to register peer {peer}"); + self.network_service + .disconnect_peer(peer, self.block_announce_protocol_name.clone()); } - } else { - log::trace!( - target: LOG_TARGET, - "Received sync for peer earlier refused by sync layer: {remote}", - ); - } + }, + Err(wrong_genesis) => { + log::debug!(target: LOG_TARGET, "`SyncingEngine` rejected {peer}"); + + if wrong_genesis { + self.peer_store_handle.report_peer(peer, rep::GENESIS_MISMATCH); + } + + self.network_service + .disconnect_peer(peer, self.block_announce_protocol_name.clone()); + }, } }, - sc_network::SyncEvent::NotificationSinkReplaced { remote, sink } => { - if let Some(peer) = self.peers.get_mut(&remote) { - peer.sink = sink; + NotificationEvent::NotificationStreamClosed { peer } => { + self.on_sync_peer_disconnected(peer); + }, + NotificationEvent::NotificationReceived { peer, notification } => { + if !self.peers.contains_key(&peer) { + log::error!( + target: LOG_TARGET, + "received notification from {peer} who had been earlier refused by `SyncingEngine`", + ); + return } + + let Ok(announce) = BlockAnnounce::decode(&mut notification.as_ref()) else { + log::warn!(target: LOG_TARGET, "failed to decode block announce"); + return + }; + + self.last_notification_io = Instant::now(); + self.push_block_announce_validation(peer, announce); }, } } @@ -965,129 +976,167 @@ where /// Called by peer when it is disconnecting. /// /// Returns a result if the handshake of this peer was indeed accepted. - fn on_sync_peer_disconnected(&mut self, peer_id: PeerId) -> Result<(), ()> { - if let Some(info) = self.peers.remove(&peer_id) { - if self.important_peers.contains(&peer_id) { - log::warn!(target: LOG_TARGET, "Reserved peer {peer_id} disconnected"); - } else { - log::debug!(target: LOG_TARGET, "{peer_id} disconnected"); - } - - if !self.default_peers_set_no_slot_connected_peers.remove(&peer_id) && - info.inbound && info.info.roles.is_full() - { - match self.num_in_peers.checked_sub(1) { - Some(value) => { - self.num_in_peers = value; - }, - None => { - log::error!( - target: LOG_TARGET, - "trying to disconnect an inbound node which is not counted as inbound" - ); - debug_assert!(false); - }, - } - } - - self.chain_sync.peer_disconnected(&peer_id); + fn on_sync_peer_disconnected(&mut self, peer_id: PeerId) { + let Some(info) = self.peers.remove(&peer_id) else { + log::debug!(target: LOG_TARGET, "{peer_id} does not exist in `SyncingEngine`"); + return + }; - self.pending_responses.remove(&peer_id); - self.event_streams.retain(|stream| { - stream.unbounded_send(SyncEvent::PeerDisconnected(peer_id)).is_ok() - }); - Ok(()) + if self.important_peers.contains(&peer_id) { + log::warn!(target: LOG_TARGET, "Reserved peer {peer_id} disconnected"); } else { - Err(()) + log::debug!(target: LOG_TARGET, "{peer_id} disconnected"); } - } - /// Called on the first connection between two peers on the default set, after their exchange - /// of handshake. - /// - /// Returns `Ok` if the handshake is accepted and the peer added to the list of peers we sync - /// from. - fn on_sync_peer_connected( - &mut self, - peer_id: PeerId, - status: &BlockAnnouncesHandshake, - sink: NotificationsSink, - inbound: bool, - ) -> Result<(), ()> { - log::trace!(target: LOG_TARGET, "New peer {peer_id} {status:?}"); - - if self.peers.contains_key(&peer_id) { - log::error!( - target: LOG_TARGET, - "Called on_sync_peer_connected with already connected peer {peer_id}", - ); - debug_assert!(false); - return Err(()) + if !self.default_peers_set_no_slot_connected_peers.remove(&peer_id) && + info.inbound && info.info.roles.is_full() + { + match self.num_in_peers.checked_sub(1) { + Some(value) => { + self.num_in_peers = value; + }, + None => { + log::error!( + target: LOG_TARGET, + "trying to disconnect an inbound node which is not counted as inbound" + ); + debug_assert!(false); + }, + } } - if status.genesis_hash != self.genesis_hash { - self.network_service.report_peer(peer_id, rep::GENESIS_MISMATCH); + self.chain_sync.peer_disconnected(&peer_id); + self.pending_responses.remove(&peer_id); + self.event_streams + .retain(|stream| stream.unbounded_send(SyncEvent::PeerDisconnected(peer_id)).is_ok()); + } + /// Validate received handshake. + fn validate_handshake( + &mut self, + peer_id: &PeerId, + handshake: Vec, + ) -> Result, bool> { + log::trace!(target: LOG_TARGET, "Validate handshake for {peer_id}"); + + let handshake = as DecodeAll>::decode_all(&mut &handshake[..]) + .map_err(|error| { + log::debug!(target: LOG_TARGET, "Failed to decode handshake for {peer_id}: {error:?}"); + false + })?; + + if handshake.genesis_hash != self.genesis_hash { if self.important_peers.contains(&peer_id) { log::error!( target: LOG_TARGET, - "Reserved peer id `{}` is on a different chain (our genesis: {} theirs: {})", - peer_id, + "Reserved peer id `{peer_id}` is on a different chain (our genesis: {} theirs: {})", self.genesis_hash, - status.genesis_hash, + handshake.genesis_hash, ); } else if self.boot_node_ids.contains(&peer_id) { log::error!( target: LOG_TARGET, - "Bootnode with peer id `{}` is on a different chain (our genesis: {} theirs: {})", - peer_id, + "Bootnode with peer id `{peer_id}` is on a different chain (our genesis: {} theirs: {})", self.genesis_hash, - status.genesis_hash, + handshake.genesis_hash, ); } else { log::debug!( target: LOG_TARGET, "Peer is on different chain (our genesis: {} theirs: {})", - self.genesis_hash, status.genesis_hash + self.genesis_hash, + handshake.genesis_hash ); } - return Err(()) + return Err(true) } - let no_slot_peer = self.default_peers_set_no_slot_peers.contains(&peer_id); - let this_peer_reserved_slot: usize = if no_slot_peer { 1 } else { 0 }; + Ok(handshake) + } - // make sure to accept no more than `--in-peers` many full nodes - if !no_slot_peer && - status.roles.is_full() && - inbound && self.num_in_peers == self.max_in_peers - { - log::debug!( + /// Validate connection. + // NOTE Returning `Err(bool)` is a really ugly hack to work around the issue + // that `ProtocolController` thinks the peer is connected when in fact it can + // still be under validation. If the peer has different genesis than the + // local node the validation fails but the peer cannot be reported in + // `validate_connection()` as that is also called by + // `ValiateInboundSubstream` which means that the peer is still being + // validated and banning the peer when handling that event would + // result in peer getting dropped twice. + // + // The proper way to fix this is to integrate `ProtocolController` more + // tightly with `NotificationService` or add an additional API call for + // banning pre-accepted peers (which is not desirable) + fn validate_connection( + &mut self, + peer_id: &PeerId, + handshake: Vec, + direction: Direction, + ) -> Result, bool> { + log::trace!(target: LOG_TARGET, "New peer {peer_id} {handshake:?}"); + + let handshake = self.validate_handshake(peer_id, handshake)?; + + if self.peers.contains_key(&peer_id) { + log::error!( target: LOG_TARGET, - "All inbound slots have been consumed, rejecting {peer_id}", + "Called `validate_connection()` with already connected peer {peer_id}", ); - return Err(()) + debug_assert!(false); + return Err(false) } - if status.roles.is_full() && + let no_slot_peer = self.default_peers_set_no_slot_peers.contains(&peer_id); + let this_peer_reserved_slot: usize = if no_slot_peer { 1 } else { 0 }; + + if handshake.roles.is_full() && self.chain_sync.num_peers() >= self.default_peers_set_num_full + self.default_peers_set_no_slot_connected_peers.len() + this_peer_reserved_slot { log::debug!(target: LOG_TARGET, "Too many full nodes, rejecting {peer_id}"); - return Err(()) + return Err(false) } - if status.roles.is_light() && + // make sure to accept no more than `--in-peers` many full nodes + if !no_slot_peer && + handshake.roles.is_full() && + direction.is_inbound() && + self.num_in_peers == self.max_in_peers + { + log::debug!(target: LOG_TARGET, "All inbound slots have been consumed, rejecting {peer_id}"); + return Err(false) + } + + // make sure that all slots are not occupied by light peers + // + // `ChainSync` only accepts full peers whereas `SyncingEngine` accepts both full and light + // peers. Verify that there is a slot in `SyncingEngine` for the inbound light peer + if handshake.roles.is_light() && (self.peers.len() - self.chain_sync.num_peers()) >= self.default_peers_set_num_light { - // Make sure that not all slots are occupied by light clients. log::debug!(target: LOG_TARGET, "Too many light nodes, rejecting {peer_id}"); - return Err(()) + return Err(false) } + Ok(handshake) + } + + /// Called on the first connection between two peers on the default set, after their exchange + /// of handshake. + /// + /// Returns `Ok` if the handshake is accepted and the peer added to the list of peers we sync + /// from. + fn on_sync_peer_connected( + &mut self, + peer_id: PeerId, + status: &BlockAnnouncesHandshake, + direction: Direction, + ) -> Result<(), ()> { + log::trace!(target: LOG_TARGET, "New peer {peer_id} {status:?}"); + let peer = Peer { info: ExtendedPeerInfo { roles: status.roles, @@ -1097,8 +1146,7 @@ where known_blocks: LruHashSet::new( NonZeroUsize::new(MAX_KNOWN_BLOCKS).expect("Constant is nonzero"), ), - sink, - inbound, + inbound: direction.is_inbound(), }; self.chain_sync.new_peer(peer_id, peer.info.best_hash, peer.info.best_number); @@ -1106,10 +1154,11 @@ where log::debug!(target: LOG_TARGET, "Connected {peer_id}"); self.peers.insert(peer_id, peer); + self.peer_store_handle.set_peer_role(&peer_id, status.roles.into()); - if no_slot_peer { + if self.default_peers_set_no_slot_peers.contains(&peer_id) { self.default_peers_set_no_slot_connected_peers.insert(peer_id); - } else if inbound && status.roles.is_full() { + } else if direction.is_inbound() && status.roles.is_full() { self.num_in_peers += 1; } @@ -1333,7 +1382,7 @@ where best_number: NumberFor, best_hash: B::Hash, genesis_hash: B::Hash, - ) -> NonDefaultSetConfig { + ) -> (NonDefaultSetConfig, Box) { let block_announces_protocol = { let genesis_hash = genesis_hash.as_ref(); if let Some(ref fork_id) = fork_id { @@ -1347,14 +1396,11 @@ where } }; - NonDefaultSetConfig { - notifications_protocol: block_announces_protocol.into(), - fallback_names: iter::once( - format!("/{}/block-announces/1", protocol_id.as_ref()).into(), - ) - .collect(), - max_notification_size: MAX_BLOCK_ANNOUNCE_SIZE, - handshake: Some(NotificationHandshake::new(BlockAnnouncesHandshake::::build( + NonDefaultSetConfig::new( + block_announces_protocol.into(), + iter::once(format!("/{}/block-announces/1", protocol_id.as_ref()).into()).collect(), + MAX_BLOCK_ANNOUNCE_SIZE, + Some(NotificationHandshake::new(BlockAnnouncesHandshake::::build( roles, best_number, best_hash, @@ -1362,13 +1408,13 @@ where ))), // NOTE: `set_config` will be ignored by `protocol.rs` as the block announcement // protocol is still hardcoded into the peerset. - set_config: SetConfig { + SetConfig { in_peers: 0, out_peers: 0, reserved_nodes: Vec::new(), non_reserved_mode: NonReservedPeerMode::Deny, }, - } + ) } /// Import blocks. diff --git a/substrate/client/network/sync/src/service/mock.rs b/substrate/client/network/sync/src/service/mock.rs index 885eb1f8da5..47986a71d01 100644 --- a/substrate/client/network/sync/src/service/mock.rs +++ b/substrate/client/network/sync/src/service/mock.rs @@ -27,6 +27,7 @@ use sc_network::{ NetworkNotification, NetworkPeers, NetworkRequest, NetworkSyncForkRequest, NotificationSenderError, NotificationSenderT, ReputationChange, }; +use sc_network_common::role::ObservedRole; use sp_runtime::traits::{Block as BlockT, NumberFor}; use std::collections::HashSet; @@ -105,6 +106,7 @@ mockall::mock! { peers: Vec ) -> Result<(), String>; fn sync_num_connected(&self) -> usize; + fn peer_role(&self, peer_id: PeerId, handshake: Vec) -> Option; } #[async_trait::async_trait] diff --git a/substrate/client/network/test/src/lib.rs b/substrate/client/network/test/src/lib.rs index cfc3cb7af3f..71f13b74a53 100644 --- a/substrate/client/network/test/src/lib.rs +++ b/substrate/client/network/test/src/lib.rs @@ -58,7 +58,7 @@ use sc_network::{ request_responses::ProtocolConfig as RequestResponseConfig, types::ProtocolName, Multiaddr, NetworkBlock, NetworkService, NetworkStateInfo, NetworkSyncForkRequest, - NetworkWorker, + NetworkWorker, NotificationService, }; use sc_network_common::role::Roles; use sc_network_light::light_client_requests::handler::LightClientRequestHandler; @@ -239,6 +239,7 @@ pub struct Peer { imported_blocks_stream: Pin> + Send>>, finality_notification_stream: Pin> + Send>>, listen_addr: Multiaddr, + notification_services: HashMap>, } impl Peer @@ -263,8 +264,8 @@ where } /// Returns the number of peers we're connected to. - pub fn num_peers(&self) -> usize { - self.network.num_connected_peers() + pub async fn num_peers(&self) -> usize { + self.sync_service.status().await.unwrap().num_connected_peers as usize } /// Returns the number of downloaded blocks. @@ -502,10 +503,19 @@ where self.network.service() } + /// Get `SyncingService`. pub fn sync_service(&self) -> &Arc> { &self.sync_service } + /// Take notification handle for enabled protocol. + pub fn take_notification_service( + &mut self, + protocol: &ProtocolName, + ) -> Option> { + self.notification_services.remove(protocol) + } + /// Get a reference to the network worker. pub fn network(&self) -> &NetworkWorker::Hash> { &self.network @@ -778,6 +788,23 @@ pub trait TestNetFactory: Default + Sized + Send { network_config.transport = TransportConfig::MemoryOnly; network_config.listen_addresses = vec![listen_addr.clone()]; network_config.allow_non_globals_in_dht = true; + + let (notif_configs, notif_handles): (Vec<_>, Vec<_>) = config + .notifications_protocols + .into_iter() + .map(|p| { + let (config, handle) = NonDefaultSetConfig::new( + p.clone(), + Vec::new(), + 1024 * 1024, + None, + Default::default(), + ); + + (config, (p, handle)) + }) + .unzip(); + if let Some(connect_to) = config.connect_to_peers { let addrs = connect_to .iter() @@ -849,11 +876,16 @@ pub trait TestNetFactory: Default + Sized + Send { protocol_config }; + let peer_store = PeerStore::new( + network_config.boot_nodes.iter().map(|bootnode| bootnode.peer_id).collect(), + ); + let peer_store_handle = peer_store.handle(); + self.spawn_task(peer_store.run().boxed()); + let block_announce_validator = config .block_announce_validator .unwrap_or_else(|| Box::new(DefaultBlockAnnounceValidator)); - let (tx, rx) = sc_utils::mpsc::tracing_unbounded("mpsc_syncing_engine_protocol", 100_000); let (engine, sync_service, block_announce_config) = sc_network_sync::engine::SyncingEngine::new( Roles::from(if config.is_authority { &Role::Authority } else { &Role::Full }), @@ -869,7 +901,7 @@ pub trait TestNetFactory: Default + Sized + Send { block_relay_params.downloader, state_request_protocol_config.name.clone(), Some(warp_protocol_config.name.clone()), - rx, + peer_store_handle.clone(), ) .unwrap(); let sync_service_import_queue = Box::new(sync_service.clone()); @@ -887,22 +919,10 @@ pub trait TestNetFactory: Default + Sized + Send { full_net_config.add_request_response_protocol(config); } - for protocol in config.notifications_protocols { - full_net_config.add_notification_protocol(NonDefaultSetConfig { - notifications_protocol: protocol, - fallback_names: Vec::new(), - max_notification_size: 1024 * 1024, - handshake: None, - set_config: Default::default(), - }); + for config in notif_configs { + full_net_config.add_notification_protocol(config); } - let peer_store = PeerStore::new( - network_config.boot_nodes.iter().map(|bootnode| bootnode.peer_id).collect(), - ); - let peer_store_handle = peer_store.handle(); - self.spawn_task(peer_store.run().boxed()); - let genesis_hash = client.hash(Zero::zero()).ok().flatten().expect("Genesis block exists; qed"); let network = NetworkWorker::new(sc_network::config::Params { @@ -917,7 +937,6 @@ pub trait TestNetFactory: Default + Sized + Send { fork_id, metrics_registry: None, block_announce_config, - tx, }) .unwrap(); @@ -953,6 +972,7 @@ pub trait TestNetFactory: Default + Sized + Send { backend: Some(backend), imported_blocks_stream, finality_notification_stream, + notification_services: HashMap::from_iter(notif_handles.into_iter()), block_import, verifier, network, @@ -967,20 +987,6 @@ pub trait TestNetFactory: Default + Sized + Send { tokio::spawn(f); } - /// Polls the testnet until all peers are connected to each other. - /// - /// Must be executed in a task context. - fn poll_until_connected(&mut self, cx: &mut FutureContext) -> Poll<()> { - self.poll(cx); - - let num_peers = self.peers().len(); - if self.peers().iter().all(|p| p.num_peers() == num_peers - 1) { - return Poll::Ready(()) - } - - Poll::Pending - } - async fn is_in_sync(&mut self) -> bool { let mut highest = None; let peers = self.peers_mut(); @@ -1058,10 +1064,27 @@ pub trait TestNetFactory: Default + Sized + Send { } /// Run the network until all peers are connected to each other. - /// - /// Calls `poll_until_connected` repeatedly with the runtime passed as parameter. async fn run_until_connected(&mut self) { - futures::future::poll_fn::<(), _>(|cx| self.poll_until_connected(cx)).await; + let num_peers = self.peers().len(); + let sync_services = + self.peers().iter().map(|info| info.sync_service.clone()).collect::>(); + + 'outer: loop { + for sync_service in &sync_services { + if sync_service.status().await.unwrap().num_connected_peers as usize != + num_peers - 1 + { + futures::future::poll_fn::<(), _>(|cx| { + self.poll(cx); + Poll::Ready(()) + }) + .await; + continue 'outer + } + } + + break + } } /// Polls the testnet. Processes all the pending actions. diff --git a/substrate/client/network/test/src/service.rs b/substrate/client/network/test/src/service.rs index 62d7f9f9d1b..800c0d4369c 100644 --- a/substrate/client/network/test/src/service.rs +++ b/substrate/client/network/test/src/service.rs @@ -24,8 +24,9 @@ use sc_network::{ config::{self, FullNetworkConfiguration, MultiaddrWithPeerId, ProtocolId, TransportConfig}, event::Event, peer_store::PeerStore, - NetworkEventStream, NetworkNotification, NetworkPeers, NetworkService, NetworkStateInfo, - NetworkWorker, + service::traits::{NotificationEvent, ValidationResult}, + NetworkEventStream, NetworkPeers, NetworkService, NetworkStateInfo, NetworkWorker, + NotificationService, }; use sc_network_common::role::Roles; use sc_network_light::light_client_requests::handler::LightClientRequestHandler; @@ -116,7 +117,7 @@ impl TestNetworkBuilder { self } - pub fn build(mut self) -> TestNetwork { + pub fn build(mut self) -> (TestNetwork, Option>) { let client = self.client.as_mut().map_or( Arc::new(TestClientBuilder::with_default_backend().build_with_longest_chain().0), |v| v.clone(), @@ -183,7 +184,12 @@ impl TestNetworkBuilder { protocol_config }; - let (tx, rx) = sc_utils::mpsc::tracing_unbounded("mpsc_syncing_engine_protocol", 100_000); + let peer_store = PeerStore::new( + network_config.boot_nodes.iter().map(|bootnode| bootnode.peer_id).collect(), + ); + let peer_store_handle = peer_store.handle(); + tokio::spawn(peer_store.run().boxed()); + let (engine, chain_sync_service, block_announce_config) = SyncingEngine::new( Roles::from(&config::Role::Full), client.clone(), @@ -198,24 +204,27 @@ impl TestNetworkBuilder { block_relay_params.downloader, state_request_protocol_config.name.clone(), None, - rx, + peer_store_handle.clone(), ) .unwrap(); let mut link = self.link.unwrap_or(Box::new(chain_sync_service.clone())); - if !self.notification_protocols.is_empty() { + let handle = if !self.notification_protocols.is_empty() { for config in self.notification_protocols { full_net_config.add_notification_protocol(config); } + None } else { - full_net_config.add_notification_protocol(config::NonDefaultSetConfig { - notifications_protocol: PROTOCOL_NAME.into(), - fallback_names: Vec::new(), - max_notification_size: 1024 * 1024, - handshake: None, - set_config: self.set_config.unwrap_or_default(), - }); - } + let (config, handle) = config::NonDefaultSetConfig::new( + PROTOCOL_NAME.into(), + Vec::new(), + 1024 * 1024, + None, + self.set_config.unwrap_or_default(), + ); + full_net_config.add_notification_protocol(config); + Some(handle) + }; for config in [ block_relay_params.request_response_config, @@ -225,12 +234,6 @@ impl TestNetworkBuilder { full_net_config.add_request_response_protocol(config); } - let peer_store = PeerStore::new( - network_config.boot_nodes.iter().map(|bootnode| bootnode.peer_id).collect(), - ); - let peer_store_handle = peer_store.handle(); - tokio::spawn(peer_store.run().boxed()); - let genesis_hash = client.hash(Zero::zero()).ok().flatten().expect("Genesis block exists; qed"); let worker = NetworkWorker::< @@ -248,7 +251,6 @@ impl TestNetworkBuilder { protocol_id, fork_id, metrics_registry: None, - tx, }) .unwrap(); @@ -268,7 +270,7 @@ impl TestNetworkBuilder { }); tokio::spawn(engine.run()); - TestNetwork::new(worker) + (TestNetwork::new(worker), handle) } } @@ -276,18 +278,18 @@ impl TestNetworkBuilder { /// The nodes are connected together and have the `PROTOCOL_NAME` protocol registered. fn build_nodes_one_proto() -> ( Arc, - impl Stream, + Option>, Arc, - impl Stream, + Option>, ) { let listen_addr = config::build_multiaddr![Memory(rand::random::())]; - let (node1, events_stream1) = TestNetworkBuilder::new() + let (network1, handle1) = TestNetworkBuilder::new() .with_listen_addresses(vec![listen_addr.clone()]) - .build() - .start_network(); + .build(); + let (node1, _) = network1.start_network(); - let (node2, events_stream2) = TestNetworkBuilder::new() + let (network2, handle2) = TestNetworkBuilder::new() .with_set_config(config::SetConfig { reserved_nodes: vec![MultiaddrWithPeerId { multiaddr: listen_addr, @@ -295,10 +297,11 @@ fn build_nodes_one_proto() -> ( }], ..Default::default() }) - .build() - .start_network(); + .build(); + + let (node2, _) = network2.start_network(); - (node1, events_stream1, node2, events_stream2) + (node1, handle1, node2, handle2) } #[tokio::test] @@ -306,22 +309,15 @@ async fn notifications_state_consistent() { // Runs two nodes and ensures that events are propagated out of the API in a consistent // correct order, which means no notification received on a closed substream. - let (node1, mut events_stream1, node2, mut events_stream2) = build_nodes_one_proto(); + let (node1, handle1, node2, handle2) = build_nodes_one_proto(); + let (mut handle1, mut handle2) = (handle1.unwrap(), handle2.unwrap()); // Write some initial notifications that shouldn't get through. for _ in 0..(rand::random::() % 5) { - node1.write_notification( - node2.local_peer_id(), - PROTOCOL_NAME.into(), - b"hello world".to_vec(), - ); + let _ = handle1.send_sync_notification(&node2.local_peer_id(), b"hello world".to_vec()); } for _ in 0..(rand::random::() % 5) { - node2.write_notification( - node1.local_peer_id(), - PROTOCOL_NAME.into(), - b"hello world".to_vec(), - ); + let _ = handle2.send_sync_notification(&node1.local_peer_id(), b"hello world".to_vec()); } // True if we have an active substream from node1 to node2. @@ -343,18 +339,10 @@ async fn notifications_state_consistent() { // Start by sending a notification from node1 to node2 and vice-versa. Part of the // test consists in ensuring that notifications get ignored if the stream isn't open. if rand::random::() % 5 >= 3 { - node1.write_notification( - node2.local_peer_id(), - PROTOCOL_NAME.into(), - b"hello world".to_vec(), - ); + let _ = handle1.send_sync_notification(&node2.local_peer_id(), b"hello world".to_vec()); } if rand::random::() % 5 >= 3 { - node2.write_notification( - node1.local_peer_id(), - PROTOCOL_NAME.into(), - b"hello world".to_vec(), - ); + let _ = handle2.send_sync_notification(&node1.local_peer_id(), b"hello world".to_vec()); } // Also randomly disconnect the two nodes from time to time. @@ -367,8 +355,8 @@ async fn notifications_state_consistent() { // Grab next event from either `events_stream1` or `events_stream2`. let next_event = { - let next1 = events_stream1.next(); - let next2 = events_stream2.next(); + let next1 = handle1.next_event(); + let next2 = handle2.next_event(); // We also await on a small timer, otherwise it is possible for the test to wait // forever while nothing at all happens on the network. let continue_test = futures_timer::Delay::new(Duration::from_millis(20)); @@ -383,58 +371,55 @@ async fn notifications_state_consistent() { }; match next_event { - future::Either::Left(Event::NotificationStreamOpened { remote, protocol, .. }) => - if protocol == PROTOCOL_NAME.into() { - something_happened = true; - assert!(!node1_to_node2_open); - node1_to_node2_open = true; - assert_eq!(remote, node2.local_peer_id()); - }, - future::Either::Right(Event::NotificationStreamOpened { remote, protocol, .. }) => - if protocol == PROTOCOL_NAME.into() { - something_happened = true; - assert!(!node2_to_node1_open); - node2_to_node1_open = true; - assert_eq!(remote, node1.local_peer_id()); - }, - future::Either::Left(Event::NotificationStreamClosed { remote, protocol, .. }) => - if protocol == PROTOCOL_NAME.into() { - assert!(node1_to_node2_open); - node1_to_node2_open = false; - assert_eq!(remote, node2.local_peer_id()); - }, - future::Either::Right(Event::NotificationStreamClosed { remote, protocol, .. }) => - if protocol == PROTOCOL_NAME.into() { - assert!(node2_to_node1_open); - node2_to_node1_open = false; - assert_eq!(remote, node1.local_peer_id()); - }, - future::Either::Left(Event::NotificationsReceived { remote, .. }) => { + future::Either::Left(NotificationEvent::ValidateInboundSubstream { + result_tx, .. + }) => { + result_tx.send(ValidationResult::Accept).unwrap(); + }, + future::Either::Right(NotificationEvent::ValidateInboundSubstream { + result_tx, + .. + }) => { + result_tx.send(ValidationResult::Accept).unwrap(); + }, + future::Either::Left(NotificationEvent::NotificationStreamOpened { peer, .. }) => { + something_happened = true; + assert!(!node1_to_node2_open); + node1_to_node2_open = true; + assert_eq!(peer, node2.local_peer_id()); + }, + future::Either::Right(NotificationEvent::NotificationStreamOpened { peer, .. }) => { + something_happened = true; + assert!(!node2_to_node1_open); + node2_to_node1_open = true; + assert_eq!(peer, node1.local_peer_id()); + }, + future::Either::Left(NotificationEvent::NotificationStreamClosed { peer, .. }) => { assert!(node1_to_node2_open); - assert_eq!(remote, node2.local_peer_id()); + node1_to_node2_open = false; + assert_eq!(peer, node2.local_peer_id()); + }, + future::Either::Right(NotificationEvent::NotificationStreamClosed { peer, .. }) => { + assert!(node2_to_node1_open); + node2_to_node1_open = false; + assert_eq!(peer, node1.local_peer_id()); + }, + future::Either::Left(NotificationEvent::NotificationReceived { peer, .. }) => { + assert!(node1_to_node2_open); + assert_eq!(peer, node2.local_peer_id()); if rand::random::() % 5 >= 4 { - node1.write_notification( - node2.local_peer_id(), - PROTOCOL_NAME.into(), - b"hello world".to_vec(), - ); + let _ = handle1 + .send_sync_notification(&node2.local_peer_id(), b"hello world".to_vec()); } }, - future::Either::Right(Event::NotificationsReceived { remote, .. }) => { + future::Either::Right(NotificationEvent::NotificationReceived { peer, .. }) => { assert!(node2_to_node1_open); - assert_eq!(remote, node1.local_peer_id()); + assert_eq!(peer, node1.local_peer_id()); if rand::random::() % 5 >= 4 { - node2.write_notification( - node1.local_peer_id(), - PROTOCOL_NAME.into(), - b"hello world".to_vec(), - ); + let _ = handle2 + .send_sync_notification(&node1.local_peer_id(), b"hello world".to_vec()); } }, - - // Add new events here. - future::Either::Left(Event::Dht(_)) => {}, - future::Either::Right(Event::Dht(_)) => {}, }; } } @@ -444,20 +429,29 @@ async fn lots_of_incoming_peers_works() { sp_tracing::try_init_simple(); let listen_addr = config::build_multiaddr![Memory(rand::random::())]; - let (main_node, _) = TestNetworkBuilder::new() + let (main_node, handle1) = TestNetworkBuilder::new() .with_listen_addresses(vec![listen_addr.clone()]) .with_set_config(config::SetConfig { in_peers: u32::MAX, ..Default::default() }) - .build() - .start_network(); + .build(); + let mut handle1 = handle1.unwrap(); + let (main_node, _) = main_node.start_network(); let main_node_peer_id = main_node.local_peer_id(); + tokio::spawn(async move { + while let Some(event) = handle1.next_event().await { + if let NotificationEvent::ValidateInboundSubstream { result_tx, .. } = event { + result_tx.send(ValidationResult::Accept).unwrap(); + } + } + }); + // We spawn background tasks and push them in this `Vec`. They will all be waited upon before // this test ends. let mut background_tasks_to_wait = Vec::new(); for _ in 0..32 { - let (_dialing_node, event_stream) = TestNetworkBuilder::new() + let (dialing_node, handle) = TestNetworkBuilder::new() .with_set_config(config::SetConfig { reserved_nodes: vec![MultiaddrWithPeerId { multiaddr: listen_addr.clone(), @@ -465,8 +459,9 @@ async fn lots_of_incoming_peers_works() { }], ..Default::default() }) - .build() - .start_network(); + .build(); + let mut handle = handle.unwrap(); + let (_, _) = dialing_node.start_network(); background_tasks_to_wait.push(tokio::spawn(async move { // Create a dummy timer that will "never" fire, and that will be overwritten when we @@ -474,34 +469,23 @@ async fn lots_of_incoming_peers_works() { // make the code below way more complicated. let mut timer = futures_timer::Delay::new(Duration::from_secs(3600 * 24 * 7)).fuse(); - let mut event_stream = event_stream.fuse(); - let mut sync_protocol_name = None; loop { futures::select! { _ = timer => { // Test succeeds when timer fires. return; } - ev = event_stream.next() => { - match ev.unwrap() { - Event::NotificationStreamOpened { protocol, remote, .. } => { - if let None = sync_protocol_name { - sync_protocol_name = Some(protocol.clone()); - } - - assert_eq!(remote, main_node_peer_id); - // Test succeeds after 5 seconds. This timer is here in order to - // detect a potential problem after opening. - timer = futures_timer::Delay::new(Duration::from_secs(5)).fuse(); - } - Event::NotificationStreamClosed { protocol, .. } => { - if Some(protocol) != sync_protocol_name { - // Test failed. - panic!(); - } - } - _ => {} + ev = handle.next_event().fuse() => match ev.unwrap() { + NotificationEvent::ValidateInboundSubstream { result_tx, .. } => { + result_tx.send(ValidationResult::Accept).unwrap(); } + NotificationEvent::NotificationStreamOpened { peer, .. } => { + assert_eq!(peer, main_node_peer_id); + // Test succeeds after 5 seconds. This timer is here in order to + // detect a potential problem after opening. + timer = futures_timer::Delay::new(Duration::from_secs(5)).fuse(); + } + _ => {} } } } @@ -518,33 +502,27 @@ async fn notifications_back_pressure() { const TOTAL_NOTIFS: usize = 10_000; - let (node1, mut events_stream1, node2, mut events_stream2) = build_nodes_one_proto(); + let (_node1, handle1, node2, handle2) = build_nodes_one_proto(); + let (mut handle1, mut handle2) = (handle1.unwrap(), handle2.unwrap()); let node2_id = node2.local_peer_id(); let receiver = tokio::spawn(async move { let mut received_notifications = 0; - let mut sync_protocol_name = None; while received_notifications < TOTAL_NOTIFS { - match events_stream2.next().await.unwrap() { - Event::NotificationStreamOpened { protocol, .. } => { - if let None = sync_protocol_name { - sync_protocol_name = Some(protocol); - } + match handle2.next_event().await.unwrap() { + NotificationEvent::ValidateInboundSubstream { result_tx, .. } => { + result_tx.send(ValidationResult::Accept).unwrap(); }, - Event::NotificationStreamClosed { protocol, .. } => { - if Some(&protocol) != sync_protocol_name.as_ref() { - panic!() - } + NotificationEvent::NotificationReceived { notification, .. } => { + assert_eq!( + notification, + format!("hello #{}", received_notifications).into_bytes() + ); + received_notifications += 1; }, - Event::NotificationsReceived { messages, .. } => - for message in messages { - assert_eq!(message.0, PROTOCOL_NAME.into()); - assert_eq!(message.1, format!("hello #{}", received_notifications)); - received_notifications += 1; - }, _ => {}, - }; + } if rand::random::() < 2 { tokio::time::sleep(Duration::from_millis(rand::random::() % 750)).await; @@ -554,20 +532,20 @@ async fn notifications_back_pressure() { // Wait for the `NotificationStreamOpened`. loop { - match events_stream1.next().await.unwrap() { - Event::NotificationStreamOpened { .. } => break, + match handle1.next_event().await.unwrap() { + NotificationEvent::ValidateInboundSubstream { result_tx, .. } => { + result_tx.send(ValidationResult::Accept).unwrap(); + }, + NotificationEvent::NotificationStreamOpened { .. } => break, _ => {}, }; } // Sending! for num in 0..TOTAL_NOTIFS { - let notif = node1.notification_sender(node2_id, PROTOCOL_NAME.into()).unwrap(); - notif - .ready() + handle1 + .send_async_notification(&node2_id, format!("hello #{}", num).into_bytes()) .await - .unwrap() - .send(format!("hello #{}", num).into_bytes()) .unwrap(); } @@ -576,28 +554,31 @@ async fn notifications_back_pressure() { #[tokio::test] async fn fallback_name_working() { + sp_tracing::try_init_simple(); // Node 1 supports the protocols "new" and "old". Node 2 only supports "old". Checks whether // they can connect. const NEW_PROTOCOL_NAME: &str = "/new-shiny-protocol-that-isnt-PROTOCOL_NAME"; let listen_addr = config::build_multiaddr![Memory(rand::random::())]; - let (node1, mut events_stream1) = TestNetworkBuilder::new() - .with_notification_protocol(config::NonDefaultSetConfig { - notifications_protocol: NEW_PROTOCOL_NAME.into(), - fallback_names: vec![PROTOCOL_NAME.into()], - max_notification_size: 1024 * 1024, - handshake: None, - set_config: Default::default(), - }) + let (config, mut handle1) = config::NonDefaultSetConfig::new( + NEW_PROTOCOL_NAME.into(), + vec![PROTOCOL_NAME.into()], + 1024 * 1024, + None, + Default::default(), + ); + let (network1, _) = TestNetworkBuilder::new() + .with_notification_protocol(config) .with_config(config::NetworkConfiguration { listen_addresses: vec![listen_addr.clone()], transport: TransportConfig::MemoryOnly, ..config::NetworkConfiguration::new_local() }) - .build() - .start_network(); + .build(); - let (_, mut events_stream2) = TestNetworkBuilder::new() + let (node1, _) = network1.start_network(); + + let (network2, handle2) = TestNetworkBuilder::new() .with_set_config(config::SetConfig { reserved_nodes: vec![MultiaddrWithPeerId { multiaddr: listen_addr, @@ -605,34 +586,38 @@ async fn fallback_name_working() { }], ..Default::default() }) - .build() - .start_network(); + .build(); + let mut handle2 = handle2.unwrap(); + let _ = network2.start_network(); let receiver = tokio::spawn(async move { // Wait for the `NotificationStreamOpened`. loop { - match events_stream2.next().await.unwrap() { - Event::NotificationStreamOpened { protocol, negotiated_fallback, .. } => { - assert_eq!(protocol, PROTOCOL_NAME.into()); + match handle2.next_event().await.unwrap() { + NotificationEvent::ValidateInboundSubstream { result_tx, .. } => { + result_tx.send(ValidationResult::Accept).unwrap(); + }, + NotificationEvent::NotificationStreamOpened { negotiated_fallback, .. } => { assert_eq!(negotiated_fallback, None); break }, _ => {}, - }; + } } }); // Wait for the `NotificationStreamOpened`. loop { - match events_stream1.next().await.unwrap() { - Event::NotificationStreamOpened { protocol, negotiated_fallback, .. } - if protocol == NEW_PROTOCOL_NAME.into() => - { + match handle1.next_event().await.unwrap() { + NotificationEvent::ValidateInboundSubstream { result_tx, .. } => { + result_tx.send(ValidationResult::Accept).unwrap(); + }, + NotificationEvent::NotificationStreamOpened { negotiated_fallback, .. } => { assert_eq!(negotiated_fallback, Some(PROTOCOL_NAME.into())); break }, _ => {}, - }; + } } receiver.await.unwrap(); @@ -655,6 +640,7 @@ async fn ensure_listen_addresses_consistent_with_transport_memory() { ) }) .build() + .0 .start_network(); } @@ -674,6 +660,7 @@ async fn ensure_listen_addresses_consistent_with_transport_not_memory() { ) }) .build() + .0 .start_network(); } @@ -699,6 +686,7 @@ async fn ensure_boot_node_addresses_consistent_with_transport_memory() { ) }) .build() + .0 .start_network(); } @@ -723,6 +711,7 @@ async fn ensure_boot_node_addresses_consistent_with_transport_not_memory() { ) }) .build() + .0 .start_network(); } @@ -751,6 +740,7 @@ async fn ensure_reserved_node_addresses_consistent_with_transport_memory() { ) }) .build() + .0 .start_network(); } @@ -778,6 +768,7 @@ async fn ensure_reserved_node_addresses_consistent_with_transport_not_memory() { ) }) .build() + .0 .start_network(); } @@ -800,6 +791,7 @@ async fn ensure_public_addresses_consistent_with_transport_memory() { ) }) .build() + .0 .start_network(); } @@ -821,5 +813,6 @@ async fn ensure_public_addresses_consistent_with_transport_not_memory() { ) }) .build() + .0 .start_network(); } diff --git a/substrate/client/network/test/src/sync.rs b/substrate/client/network/test/src/sync.rs index 389177b4aaf..f2be662ada1 100644 --- a/substrate/client/network/test/src/sync.rs +++ b/substrate/client/network/test/src/sync.rs @@ -44,16 +44,16 @@ async fn sync_peers_works() { sp_tracing::try_init_simple(); let mut net = TestNet::new(3); - futures::future::poll_fn::<(), _>(|cx| { - net.poll(cx); - for peer in 0..3 { - if net.peer(peer).num_peers() != 2 { - return Poll::Pending - } - } - Poll::Ready(()) - }) - .await; + while net.peer(0).num_peers().await != 2 && + net.peer(1).num_peers().await != 2 && + net.peer(2).num_peers().await != 2 + { + futures::future::poll_fn::<(), _>(|cx| { + net.poll(cx); + Poll::Ready(()) + }) + .await; + } } #[tokio::test(flavor = "multi_thread", worker_threads = 2)] @@ -412,15 +412,13 @@ async fn can_sync_small_non_best_forks() { assert!(net.peer(1).client().header(small_hash).unwrap().is_none()); // poll until the two nodes connect, otherwise announcing the block will not work - futures::future::poll_fn::<(), _>(|cx| { - net.poll(cx); - if net.peer(0).num_peers() == 0 || net.peer(1).num_peers() == 0 { - Poll::Pending - } else { + while net.peer(0).num_peers().await == 0 || net.peer(1).num_peers().await == 0 { + futures::future::poll_fn::<(), _>(|cx| { + net.poll(cx); Poll::Ready(()) - } - }) - .await; + }) + .await; + } // synchronization: 0 synced to longer chain and 1 didn't sync to small chain. @@ -465,6 +463,7 @@ async fn can_sync_forks_ahead_of_the_best_chain() { net.peer(1).push_blocks(1, false); net.run_until_connected().await; + // Peer 0 is on 2-block fork which is announced with is_best=false let fork_hash = net .peer(0) @@ -516,15 +515,13 @@ async fn can_sync_explicit_forks() { assert!(net.peer(1).client().header(small_hash).unwrap().is_none()); // poll until the two nodes connect, otherwise announcing the block will not work - futures::future::poll_fn::<(), _>(|cx| { - net.poll(cx); - if net.peer(0).num_peers() == 0 || net.peer(1).num_peers() == 0 { - Poll::Pending - } else { + while net.peer(0).num_peers().await == 0 || net.peer(1).num_peers().await == 0 { + futures::future::poll_fn::<(), _>(|cx| { + net.poll(cx); Poll::Ready(()) - } - }) - .await; + }) + .await; + } // synchronization: 0 synced to longer chain and 1 didn't sync to small chain. @@ -613,15 +610,14 @@ async fn full_sync_requires_block_body() { net.peer(0).push_headers(1); // Wait for nodes to connect - futures::future::poll_fn::<(), _>(|cx| { - net.poll(cx); - if net.peer(0).num_peers() == 0 || net.peer(1).num_peers() == 0 { - Poll::Pending - } else { + while net.peer(0).num_peers().await == 0 || net.peer(1).num_peers().await == 0 { + futures::future::poll_fn::<(), _>(|cx| { + net.poll(cx); Poll::Ready(()) - } - }) - .await; + }) + .await; + } + net.run_until_idle().await; assert_eq!(net.peer(1).client.info().best_number, 0); } @@ -917,18 +913,16 @@ async fn block_announce_data_is_propagated() { }); // Wait until peer 1 is connected to both nodes. - futures::future::poll_fn::<(), _>(|cx| { - net.poll(cx); - if net.peer(1).num_peers() == 2 && - net.peer(0).num_peers() == 1 && - net.peer(2).num_peers() == 1 - { + while net.peer(1).num_peers().await != 2 || + net.peer(0).num_peers().await != 1 || + net.peer(2).num_peers().await != 1 + { + futures::future::poll_fn::<(), _>(|cx| { + net.poll(cx); Poll::Ready(()) - } else { - Poll::Pending - } - }) - .await; + }) + .await; + } let block_hash = net .peer(0) @@ -1010,7 +1004,7 @@ async fn multiple_requests_are_accepted_as_long_as_they_are_not_fulfilled() { tokio::time::sleep(tokio::time::Duration::from_secs(10)).await; net.peer(0).push_blocks(1, false); net.run_until_sync().await; - assert_eq!(1, net.peer(0).num_peers()); + assert_eq!(1, net.peer(0).num_peers().await); } let hashof10 = hashes[9]; diff --git a/substrate/client/network/transactions/src/lib.rs b/substrate/client/network/transactions/src/lib.rs index 1b97d4b96c9..9758ea4c4fc 100644 --- a/substrate/client/network/transactions/src/lib.rs +++ b/substrate/client/network/transactions/src/lib.rs @@ -21,8 +21,8 @@ //! Usage: //! //! - Use [`TransactionsHandlerPrototype::new`] to create a prototype. -//! - Pass the return value of [`TransactionsHandlerPrototype::set_config`] to the network -//! configuration as an extra peers set. +//! - Pass the `NonDefaultSetConfig` returned from [`TransactionsHandlerPrototype::new`] to the +//! network configuration as an extra peers set. //! - Use [`TransactionsHandlerPrototype::build`] then [`TransactionsHandler::run`] to obtain a //! `Future` that processes transactions. @@ -37,7 +37,7 @@ use prometheus_endpoint::{register, Counter, PrometheusError, Registry, U64}; use sc_network::{ config::{NonDefaultSetConfig, NonReservedPeerMode, ProtocolId, SetConfig}, error, - event::Event, + service::traits::{NotificationEvent, NotificationService, ValidationResult}, types::ProtocolName, utils::{interval, LruHashSet}, NetworkEventStream, NetworkNotification, NetworkPeers, @@ -115,8 +115,11 @@ impl Future for PendingTransaction { /// Prototype for a [`TransactionsHandler`]. pub struct TransactionsHandlerPrototype { + /// Name of the transaction protocol. protocol_name: ProtocolName, - fallback_protocol_names: Vec, + + /// Handle that is used to communicate with `sc_network::Notifications`. + notification_service: Box, } impl TransactionsHandlerPrototype { @@ -125,35 +128,28 @@ impl TransactionsHandlerPrototype { protocol_id: ProtocolId, genesis_hash: Hash, fork_id: Option<&str>, - ) -> Self { + ) -> (Self, NonDefaultSetConfig) { let genesis_hash = genesis_hash.as_ref(); - let protocol_name = if let Some(fork_id) = fork_id { + let protocol_name: ProtocolName = if let Some(fork_id) = fork_id { format!("/{}/{}/transactions/1", array_bytes::bytes2hex("", genesis_hash), fork_id) } else { format!("/{}/transactions/1", array_bytes::bytes2hex("", genesis_hash)) - }; - let legacy_protocol_name = format!("/{}/transactions/1", protocol_id.as_ref()); - - Self { - protocol_name: protocol_name.into(), - fallback_protocol_names: iter::once(legacy_protocol_name.into()).collect(), } - } - - /// Returns the configuration of the set to put in the network configuration. - pub fn set_config(&self) -> NonDefaultSetConfig { - NonDefaultSetConfig { - notifications_protocol: self.protocol_name.clone(), - fallback_names: self.fallback_protocol_names.clone(), - max_notification_size: MAX_TRANSACTIONS_SIZE, - handshake: None, - set_config: SetConfig { + .into(); + let (config, notification_service) = NonDefaultSetConfig::new( + protocol_name.clone(), + vec![format!("/{}/transactions/1", protocol_id.as_ref()).into()], + MAX_TRANSACTIONS_SIZE, + None, + SetConfig { in_peers: 0, out_peers: 0, reserved_nodes: Vec::new(), non_reserved_mode: NonReservedPeerMode::Deny, }, - } + ); + + (Self { protocol_name, notification_service }, config) } /// Turns the prototype into the actual handler. Returns a controller that allows controlling @@ -173,12 +169,12 @@ impl TransactionsHandlerPrototype { transaction_pool: Arc>, metrics_registry: Option<&Registry>, ) -> error::Result<(TransactionsHandler, TransactionsHandlerController)> { - let net_event_stream = network.event_stream("transactions-handler-net"); let sync_event_stream = sync.event_stream("transactions-handler-sync"); let (to_handler, from_controller) = tracing_unbounded("mpsc_transactions_handler", 100_000); let handler = TransactionsHandler { protocol_name: self.protocol_name, + notification_service: self.notification_service, propagate_timeout: (Box::pin(interval(PROPAGATE_TIMEOUT)) as Pin + Send>>) .fuse(), @@ -186,7 +182,6 @@ impl TransactionsHandlerPrototype { pending_transactions_peers: HashMap::new(), network, sync, - net_event_stream: net_event_stream.fuse(), sync_event_stream: sync_event_stream.fuse(), peers: HashMap::new(), transaction_pool, @@ -253,8 +248,6 @@ pub struct TransactionsHandler< network: N, /// Syncing service. sync: S, - /// Stream of networking events. - net_event_stream: stream::Fuse + Send>>>, /// Receiver for syncing-related events. sync_event_stream: stream::Fuse + Send>>>, // All connected peers @@ -263,6 +256,8 @@ pub struct TransactionsHandler< from_controller: TracingUnboundedReceiver>, /// Prometheus metrics. metrics: Option, + /// Handle that is used to communicate with `sc_network::Notifications`. + notification_service: Box, } /// Peer information @@ -295,14 +290,6 @@ where warn!(target: "sub-libp2p", "Inconsistent state, no peers for pending transaction!"); } }, - network_event = self.net_event_stream.next() => { - if let Some(network_event) = network_event { - self.handle_network_event(network_event).await; - } else { - // Networking has seemingly closed. Closing as well. - return; - } - }, sync_event = self.sync_event_stream.next() => { if let Some(sync_event) = sync_event { self.handle_sync_event(sync_event); @@ -317,10 +304,61 @@ where ToHandler::PropagateTransactions => self.propagate_transactions(), } }, + event = self.notification_service.next_event().fuse() => { + if let Some(event) = event { + self.handle_notification_event(event) + } else { + // `Notifications` has seemingly closed. Closing as well. + return + } + } } } } + fn handle_notification_event(&mut self, event: NotificationEvent) { + match event { + NotificationEvent::ValidateInboundSubstream { peer, handshake, result_tx, .. } => { + // only accept peers whose role can be determined + let result = self + .network + .peer_role(peer, handshake) + .map_or(ValidationResult::Reject, |_| ValidationResult::Accept); + let _ = result_tx.send(result); + }, + NotificationEvent::NotificationStreamOpened { peer, handshake, .. } => { + let Some(role) = self.network.peer_role(peer, handshake) else { + log::debug!(target: "sub-libp2p", "role for {peer} couldn't be determined"); + return + }; + + let _was_in = self.peers.insert( + peer, + Peer { + known_transactions: LruHashSet::new( + NonZeroUsize::new(MAX_KNOWN_TRANSACTIONS).expect("Constant is nonzero"), + ), + role, + }, + ); + debug_assert!(_was_in.is_none()); + }, + NotificationEvent::NotificationStreamClosed { peer } => { + let _peer = self.peers.remove(&peer); + debug_assert!(_peer.is_some()); + }, + NotificationEvent::NotificationReceived { peer, notification } => { + if let Ok(m) = + as Decode>::decode(&mut notification.as_ref()) + { + self.on_transactions(peer, m); + } else { + warn!(target: "sub-libp2p", "Failed to decode transactions list"); + } + }, + } + } + fn handle_sync_event(&mut self, event: SyncEvent) { match event { SyncEvent::PeerConnected(remote) => { @@ -346,51 +384,6 @@ where } } - async fn handle_network_event(&mut self, event: Event) { - match event { - Event::Dht(_) => {}, - Event::NotificationStreamOpened { remote, protocol, role, .. } - if protocol == self.protocol_name => - { - let _was_in = self.peers.insert( - remote, - Peer { - known_transactions: LruHashSet::new( - NonZeroUsize::new(MAX_KNOWN_TRANSACTIONS).expect("Constant is nonzero"), - ), - role, - }, - ); - debug_assert!(_was_in.is_none()); - }, - Event::NotificationStreamClosed { remote, protocol } - if protocol == self.protocol_name => - { - let _peer = self.peers.remove(&remote); - debug_assert!(_peer.is_some()); - }, - - Event::NotificationsReceived { remote, messages } => { - for (protocol, message) in messages { - if protocol != self.protocol_name { - continue - } - - if let Ok(m) = - as Decode>::decode(&mut message.as_ref()) - { - self.on_transactions(remote, m); - } else { - warn!(target: "sub-libp2p", "Failed to decode transactions list"); - } - } - }, - - // Not our concern. - Event::NotificationStreamOpened { .. } | Event::NotificationStreamClosed { .. } => {}, - } - } - /// Called when peer sends us new transactions fn on_transactions(&mut self, who: PeerId, transactions: Transactions) { // Accept transactions only when node is not major syncing @@ -482,8 +475,7 @@ where propagated_to.entry(hash).or_default().push(who.to_base58()); } trace!(target: "sync", "Sending {} transactions to {}", to_send.len(), who); - self.network - .write_notification(*who, self.protocol_name.clone(), to_send.encode()); + let _ = self.notification_service.send_sync_notification(who, to_send.encode()); } } diff --git a/substrate/client/offchain/src/api.rs b/substrate/client/offchain/src/api.rs index c7df5784d32..2901bab2f26 100644 --- a/substrate/client/offchain/src/api.rs +++ b/substrate/client/offchain/src/api.rs @@ -223,7 +223,7 @@ mod tests { use sc_client_db::offchain::LocalStorage; use sc_network::{ config::MultiaddrWithPeerId, types::ProtocolName, NetworkPeers, NetworkStateInfo, - ReputationChange, + ObservedRole, ReputationChange, }; use sp_core::offchain::{storage::OffchainDb, DbExternalities, Externalities, StorageKind}; use std::time::SystemTime; @@ -294,6 +294,10 @@ mod tests { fn sync_num_connected(&self) -> usize { unimplemented!(); } + + fn peer_role(&self, _peer_id: PeerId, _handshake: Vec) -> Option { + None + } } impl NetworkStateInfo for TestNetwork { diff --git a/substrate/client/offchain/src/lib.rs b/substrate/client/offchain/src/lib.rs index 756ab77ff94..8bcfa66a5af 100644 --- a/substrate/client/offchain/src/lib.rs +++ b/substrate/client/offchain/src/lib.rs @@ -330,7 +330,9 @@ mod tests { use libp2p::{Multiaddr, PeerId}; use sc_block_builder::BlockBuilderBuilder; use sc_client_api::Backend as _; - use sc_network::{config::MultiaddrWithPeerId, types::ProtocolName, ReputationChange}; + use sc_network::{ + config::MultiaddrWithPeerId, types::ProtocolName, ObservedRole, ReputationChange, + }; use sc_transaction_pool::BasicPool; use sc_transaction_pool_api::{InPoolTransaction, TransactionPool}; use sp_consensus::BlockOrigin; @@ -423,6 +425,10 @@ mod tests { fn sync_num_connected(&self) -> usize { unimplemented!(); } + + fn peer_role(&self, _peer_id: PeerId, _handshake: Vec) -> Option { + None + } } #[test] diff --git a/substrate/client/service/src/builder.rs b/substrate/client/service/src/builder.rs index 25f998385ba..d078f44f198 100644 --- a/substrate/client/service/src/builder.rs +++ b/substrate/client/service/src/builder.rs @@ -753,6 +753,11 @@ where } let protocol_id = config.protocol_id(); + let genesis_hash = client + .block_hash(0u32.into()) + .ok() + .flatten() + .expect("Genesis block exists; qed"); let block_announce_validator = if let Some(f) = block_announce_validator_builder { f(client.clone()) @@ -802,11 +807,7 @@ where // Allow both outgoing and incoming requests. let (handler, protocol_config) = WarpSyncRequestHandler::new( protocol_id.clone(), - client - .block_hash(0u32.into()) - .ok() - .flatten() - .expect("Genesis block exists; qed"), + genesis_hash, config.chain_spec.fork_id(), warp_with_provider.clone(), ); @@ -845,17 +846,13 @@ where } // create transactions protocol and add it to the list of supported protocols of - // `network_params` - let transactions_handler_proto = sc_network_transactions::TransactionsHandlerPrototype::new( - protocol_id.clone(), - client - .block_hash(0u32.into()) - .ok() - .flatten() - .expect("Genesis block exists; qed"), - config.chain_spec.fork_id(), - ); - net_config.add_notification_protocol(transactions_handler_proto.set_config()); + let (transactions_handler_proto, transactions_config) = + sc_network_transactions::TransactionsHandlerPrototype::new( + protocol_id.clone(), + genesis_hash, + config.chain_spec.fork_id(), + ); + net_config.add_notification_protocol(transactions_config); // Create `PeerStore` and initialize it with bootnode peer ids. let peer_store = PeerStore::new( @@ -869,7 +866,6 @@ where let peer_store_handle = peer_store.handle(); spawn_handle.spawn("peer-store", Some("networking"), peer_store.run()); - let (tx, rx) = sc_utils::mpsc::tracing_unbounded("mpsc_syncing_engine_protocol", 100_000); let (engine, sync_service, block_announce_config) = SyncingEngine::new( Roles::from(&config.role), client.clone(), @@ -884,7 +880,7 @@ where block_downloader, state_request_protocol_name, warp_request_protocol_name, - rx, + peer_store_handle.clone(), )?; let sync_service_import_queue = sync_service.clone(); let sync_service = Arc::new(sync_service); @@ -905,7 +901,6 @@ where fork_id: config.chain_spec.fork_id().map(ToOwned::to_owned), metrics_registry: config.prometheus_config.as_ref().map(|config| config.registry.clone()), block_announce_config, - tx, }; let has_bootnodes = !network_params.network_config.network_config.boot_nodes.is_empty(); diff --git a/substrate/frame/contracts/fixtures/data/account_reentrance_count_call.wat b/substrate/frame/contracts/fixtures/data/account_reentrance_count_call.wat index ab678906648..e6d6ba8bb81 100644 --- a/substrate/frame/contracts/fixtures/data/account_reentrance_count_call.wat +++ b/substrate/frame/contracts/fixtures/data/account_reentrance_count_call.wat @@ -14,7 +14,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/add_remove_delegate_dependency.wat b/substrate/frame/contracts/fixtures/data/add_remove_delegate_dependency.wat index ef456b6d620..dac7736244d 100644 --- a/substrate/frame/contracts/fixtures/data/add_remove_delegate_dependency.wat +++ b/substrate/frame/contracts/fixtures/data/add_remove_delegate_dependency.wat @@ -16,7 +16,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -44,8 +44,8 @@ ;; [0..4) - size of the call ;; [4..8) - action to perform ;; [8..42) - code hash of the callee - (set_local $action (i32.load (i32.const 4))) - (set_local $code_hash_ptr (i32.const 8)) + (local.set $action (i32.load (i32.const 4))) + (local.set $code_hash_ptr (i32.const 8)) ;; Assert input size == 36 (4 for action + 32 for code_hash). (call $assert @@ -56,25 +56,25 @@ ) ;; Call add_delegate_dependency when action == 1. - (if (i32.eq (get_local $action) (i32.const 1)) + (if (i32.eq (local.get $action) (i32.const 1)) (then - (call $add_delegate_dependency (get_local $code_hash_ptr)) + (call $add_delegate_dependency (local.get $code_hash_ptr)) ) (else) ) ;; Call remove_delegate_dependency when action == 2. - (if (i32.eq (get_local $action) (i32.const 2)) + (if (i32.eq (local.get $action) (i32.const 2)) (then (call $remove_delegate_dependency - (get_local $code_hash_ptr) + (local.get $code_hash_ptr) ) ) (else) ) ;; Call terminate when action == 3. - (if (i32.eq (get_local $action) (i32.const 3)) + (if (i32.eq (local.get $action) (i32.const 3)) (then (call $terminate (i32.const 100) ;; Pointer to beneficiary address diff --git a/substrate/frame/contracts/fixtures/data/balance.wat b/substrate/frame/contracts/fixtures/data/balance.wat index d86d5c4b1c6..d7970c92e41 100644 --- a/substrate/frame/contracts/fixtures/data/balance.wat +++ b/substrate/frame/contracts/fixtures/data/balance.wat @@ -12,7 +12,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/call.wat b/substrate/frame/contracts/fixtures/data/call.wat index 4558b2c6409..43b32049c88 100644 --- a/substrate/frame/contracts/fixtures/data/call.wat +++ b/substrate/frame/contracts/fixtures/data/call.wat @@ -7,7 +7,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/call_runtime_and_call.wat b/substrate/frame/contracts/fixtures/data/call_runtime_and_call.wat index 3320922d9e2..5d76e19a74c 100644 --- a/substrate/frame/contracts/fixtures/data/call_runtime_and_call.wat +++ b/substrate/frame/contracts/fixtures/data/call_runtime_and_call.wat @@ -7,7 +7,7 @@ (func $assert (param i32) (block $ok - (br_if $ok (get_local 0)) + (br_if $ok (local.get 0)) (unreachable) ) ) diff --git a/substrate/frame/contracts/fixtures/data/caller_contract.wat b/substrate/frame/contracts/fixtures/data/caller_contract.wat index 929171b9a26..43eb8ccfd54 100644 --- a/substrate/frame/contracts/fixtures/data/caller_contract.wat +++ b/substrate/frame/contracts/fixtures/data/caller_contract.wat @@ -10,7 +10,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -37,10 +37,10 @@ ) ;; Read current balance into local variable. - (set_local $sp (i32.const 1024)) + (local.set $sp (i32.const 1024)) ;; Fail to deploy the contract since it returns a non-zero exit status. - (set_local $exit_code + (local.set $exit_code (call $seal_instantiate (i32.const 24) ;; Pointer to the code hash. (i64.const 0) ;; How much ref_time weight to devote for the execution. 0 = all. @@ -60,11 +60,11 @@ ;; Check non-zero exit status. (call $assert - (i32.eq (get_local $exit_code) (i32.const 2)) ;; ReturnCode::CalleeReverted + (i32.eq (local.get $exit_code) (i32.const 2)) ;; ReturnCode::CalleeReverted ) ;; Fail to deploy the contract due to insufficient ref_time weight. - (set_local $exit_code + (local.set $exit_code (call $seal_instantiate (i32.const 24) ;; Pointer to the code hash. (i64.const 1) ;; Supply too little ref_time weight @@ -85,11 +85,11 @@ ;; Check for special trap exit status. (call $assert - (i32.eq (get_local $exit_code) (i32.const 1)) ;; ReturnCode::CalleeTrapped + (i32.eq (local.get $exit_code) (i32.const 1)) ;; ReturnCode::CalleeTrapped ) ;; Fail to deploy the contract due to insufficient ref_time weight. - (set_local $exit_code + (local.set $exit_code (call $seal_instantiate (i32.const 24) ;; Pointer to the code hash. (i64.const 0) ;; How much ref_time weight to devote for the execution. 0 = all. @@ -110,17 +110,17 @@ ;; Check for special trap exit status. (call $assert - (i32.eq (get_local $exit_code) (i32.const 1)) ;; ReturnCode::CalleeTrapped + (i32.eq (local.get $exit_code) (i32.const 1)) ;; ReturnCode::CalleeTrapped ) ;; Length of the output buffer (i32.store - (i32.sub (get_local $sp) (i32.const 4)) + (i32.sub (local.get $sp) (i32.const 4)) (i32.const 256) ) ;; Deploy the contract successfully. - (set_local $exit_code + (local.set $exit_code (call $seal_instantiate (i32.const 24) ;; Pointer to the code hash. (i64.const 0) ;; How much ref_time weight to devote for the execution. 0 = all. @@ -130,7 +130,7 @@ (i32.const 8) ;; Pointer to input data buffer address (i32.const 8) ;; Length of input data buffer (i32.const 16) ;; Pointer to the address output buffer - (i32.sub (get_local $sp) (i32.const 4)) ;; Pointer to the address buffer length + (i32.sub (local.get $sp) (i32.const 4)) ;; Pointer to the address buffer length (i32.const 4294967295) ;; u32 max sentinel value: do not copy output (i32.const 0) ;; Length is ignored in this case (i32.const 0) ;; salt_ptr @@ -141,28 +141,28 @@ ;; Check for success exit status. (call $assert - (i32.eq (get_local $exit_code) (i32.const 0)) ;; ReturnCode::Success + (i32.eq (local.get $exit_code) (i32.const 0)) ;; ReturnCode::Success ) ;; Check that address has the expected length (call $assert - (i32.eq (i32.load (i32.sub (get_local $sp) (i32.const 4))) (i32.const 32)) + (i32.eq (i32.load (i32.sub (local.get $sp) (i32.const 4))) (i32.const 32)) ) ;; Zero out destination buffer of output (i32.store - (i32.sub (get_local $sp) (i32.const 4)) + (i32.sub (local.get $sp) (i32.const 4)) (i32.const 0) ) ;; Length of the output buffer (i32.store - (i32.sub (get_local $sp) (i32.const 8)) + (i32.sub (local.get $sp) (i32.const 8)) (i32.const 4) ) ;; Call the new contract and expect it to return failing exit code. - (set_local $exit_code + (local.set $exit_code (call $seal_call (i32.const 0) ;; Set no flag (i32.const 16) ;; Pointer to "callee" address. @@ -172,29 +172,29 @@ (i32.const 0) ;; Pointer to the buffer with value to transfer (i32.const 9) ;; Pointer to input data buffer address (i32.const 7) ;; Length of input data buffer - (i32.sub (get_local $sp) (i32.const 4)) ;; Ptr to output buffer - (i32.sub (get_local $sp) (i32.const 8)) ;; Ptr to output buffer len + (i32.sub (local.get $sp) (i32.const 4)) ;; Ptr to output buffer + (i32.sub (local.get $sp) (i32.const 8)) ;; Ptr to output buffer len ) ) ;; Check non-zero exit status. (call $assert - (i32.eq (get_local $exit_code) (i32.const 2)) ;; ReturnCode::CalleeReverted + (i32.eq (local.get $exit_code) (i32.const 2)) ;; ReturnCode::CalleeReverted ) ;; Check that output buffer contains the expected return data. (call $assert - (i32.eq (i32.load (i32.sub (get_local $sp) (i32.const 8))) (i32.const 3)) + (i32.eq (i32.load (i32.sub (local.get $sp) (i32.const 8))) (i32.const 3)) ) (call $assert (i32.eq - (i32.load (i32.sub (get_local $sp) (i32.const 4))) + (i32.load (i32.sub (local.get $sp) (i32.const 4))) (i32.const 0x00776655) ) ) ;; Fail to call the contract due to insufficient ref_time weight. - (set_local $exit_code + (local.set $exit_code (call $seal_call (i32.const 0) ;; Set no flag (i32.const 16) ;; Pointer to "callee" address. @@ -211,11 +211,11 @@ ;; Check for special trap exit status. (call $assert - (i32.eq (get_local $exit_code) (i32.const 1)) ;; ReturnCode::CalleeTrapped + (i32.eq (local.get $exit_code) (i32.const 1)) ;; ReturnCode::CalleeTrapped ) ;; Fail to call the contract due to insufficient proof_size weight. - (set_local $exit_code + (local.set $exit_code (call $seal_call (i32.const 0) ;; Set no flag (i32.const 16) ;; Pointer to "callee" address. @@ -232,23 +232,23 @@ ;; Check for special trap exit status. (call $assert - (i32.eq (get_local $exit_code) (i32.const 1)) ;; ReturnCode::CalleeTrapped + (i32.eq (local.get $exit_code) (i32.const 1)) ;; ReturnCode::CalleeTrapped ) ;; Zero out destination buffer of output (i32.store - (i32.sub (get_local $sp) (i32.const 4)) + (i32.sub (local.get $sp) (i32.const 4)) (i32.const 0) ) ;; Length of the output buffer (i32.store - (i32.sub (get_local $sp) (i32.const 8)) + (i32.sub (local.get $sp) (i32.const 8)) (i32.const 4) ) ;; Call the contract successfully. - (set_local $exit_code + (local.set $exit_code (call $seal_call (i32.const 0) ;; Set no flag (i32.const 16) ;; Pointer to "callee" address. @@ -258,23 +258,23 @@ (i32.const 0) ;; Pointer to the buffer with value to transfer (i32.const 8) ;; Pointer to input data buffer address (i32.const 8) ;; Length of input data buffer - (i32.sub (get_local $sp) (i32.const 4)) ;; Ptr to output buffer - (i32.sub (get_local $sp) (i32.const 8)) ;; Ptr to output buffer len + (i32.sub (local.get $sp) (i32.const 4)) ;; Ptr to output buffer + (i32.sub (local.get $sp) (i32.const 8)) ;; Ptr to output buffer len ) ) ;; Check for success exit status. (call $assert - (i32.eq (get_local $exit_code) (i32.const 0)) ;; ReturnCode::Success + (i32.eq (local.get $exit_code) (i32.const 0)) ;; ReturnCode::Success ) ;; Check that the output buffer contains the expected return data. (call $assert - (i32.eq (i32.load (i32.sub (get_local $sp) (i32.const 8))) (i32.const 4)) + (i32.eq (i32.load (i32.sub (local.get $sp) (i32.const 8))) (i32.const 4)) ) (call $assert (i32.eq - (i32.load (i32.sub (get_local $sp) (i32.const 4))) + (i32.load (i32.sub (local.get $sp) (i32.const 4))) (i32.const 0x77665544) ) ) diff --git a/substrate/frame/contracts/fixtures/data/chain_extension.wat b/substrate/frame/contracts/fixtures/data/chain_extension.wat index 670f8e70172..c24ca286ff8 100644 --- a/substrate/frame/contracts/fixtures/data/chain_extension.wat +++ b/substrate/frame/contracts/fixtures/data/chain_extension.wat @@ -9,7 +9,7 @@ (func $assert (param i32) (block $ok - (br_if $ok (get_local 0)) + (br_if $ok (local.get 0)) (unreachable) ) ) diff --git a/substrate/frame/contracts/fixtures/data/chain_extension_temp_storage.wat b/substrate/frame/contracts/fixtures/data/chain_extension_temp_storage.wat index b481abb5bc7..504646df1b0 100644 --- a/substrate/frame/contracts/fixtures/data/chain_extension_temp_storage.wat +++ b/substrate/frame/contracts/fixtures/data/chain_extension_temp_storage.wat @@ -11,7 +11,7 @@ (func $assert (param i32) (block $ok - (br_if $ok (get_local 0)) + (br_if $ok (local.get 0)) (unreachable) ) ) diff --git a/substrate/frame/contracts/fixtures/data/create_storage_and_call.wat b/substrate/frame/contracts/fixtures/data/create_storage_and_call.wat index 5592e7e96a9..2bff53b638f 100644 --- a/substrate/frame/contracts/fixtures/data/create_storage_and_call.wat +++ b/substrate/frame/contracts/fixtures/data/create_storage_and_call.wat @@ -8,7 +8,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/create_storage_and_instantiate.wat b/substrate/frame/contracts/fixtures/data/create_storage_and_instantiate.wat index cd720247843..00c9a657f39 100644 --- a/substrate/frame/contracts/fixtures/data/create_storage_and_instantiate.wat +++ b/substrate/frame/contracts/fixtures/data/create_storage_and_instantiate.wat @@ -14,7 +14,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/crypto_hashes.wat b/substrate/frame/contracts/fixtures/data/crypto_hashes.wat index c2b4d6b81ed..9d86b02f419 100644 --- a/substrate/frame/contracts/fixtures/data/crypto_hashes.wat +++ b/substrate/frame/contracts/fixtures/data/crypto_hashes.wat @@ -59,8 +59,10 @@ (call $seal_input (local.get $input_ptr) (local.get $input_len_ptr)) (local.set $chosen_hash_fn (i32.load8_u (local.get $input_ptr))) (if (i32.gt_u (local.get $chosen_hash_fn) (i32.const 7)) - ;; We check that the chosen hash fn identifier is within bounds: [0,7] - (unreachable) + (then + ;; We check that the chosen hash fn identifier is within bounds: [0,7] + (unreachable) + ) ) (local.set $input_ptr (i32.add (local.get $input_ptr) (i32.const 1))) (local.set $input_len (i32.sub (i32.load (local.get $input_len_ptr)) (i32.const 1))) diff --git a/substrate/frame/contracts/fixtures/data/debug_message_invalid_utf8.wat b/substrate/frame/contracts/fixtures/data/debug_message_invalid_utf8.wat index e8c447b42fc..dae0de88418 100644 --- a/substrate/frame/contracts/fixtures/data/debug_message_invalid_utf8.wat +++ b/substrate/frame/contracts/fixtures/data/debug_message_invalid_utf8.wat @@ -8,7 +8,7 @@ (func $assert_eq (param i32 i32) (block $ok (br_if $ok - (i32.eq (get_local 0) (get_local 1)) + (i32.eq (local.get 0) (local.get 1)) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/debug_message_logging_disabled.wat b/substrate/frame/contracts/fixtures/data/debug_message_logging_disabled.wat index fc6ee72df8b..e9ce20ba42b 100644 --- a/substrate/frame/contracts/fixtures/data/debug_message_logging_disabled.wat +++ b/substrate/frame/contracts/fixtures/data/debug_message_logging_disabled.wat @@ -8,7 +8,7 @@ (func $assert_eq (param i32 i32) (block $ok (br_if $ok - (i32.eq (get_local 0) (get_local 1)) + (i32.eq (local.get 0) (local.get 1)) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/debug_message_works.wat b/substrate/frame/contracts/fixtures/data/debug_message_works.wat index 61933c23296..44a7b6db1be 100644 --- a/substrate/frame/contracts/fixtures/data/debug_message_works.wat +++ b/substrate/frame/contracts/fixtures/data/debug_message_works.wat @@ -8,7 +8,7 @@ (func $assert_eq (param i32 i32) (block $ok (br_if $ok - (i32.eq (get_local 0) (get_local 1)) + (i32.eq (local.get 0) (local.get 1)) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/delegate_call.wat b/substrate/frame/contracts/fixtures/data/delegate_call.wat index 7fe422af455..b8d4f0d47f0 100644 --- a/substrate/frame/contracts/fixtures/data/delegate_call.wat +++ b/substrate/frame/contracts/fixtures/data/delegate_call.wat @@ -24,7 +24,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -70,7 +70,7 @@ ) ;; Call deployed library contract code. - (set_local $exit_code + (local.set $exit_code (call $seal_delegate_call (i32.const 0) ;; Set no call flags (i32.const 64) ;; Pointer to "callee" code_hash. @@ -83,7 +83,7 @@ ;; Check for success exit status. (call $assert - (i32.eq (get_local $exit_code) (i32.const 0)) ;; ReturnCode::Success + (i32.eq (local.get $exit_code) (i32.const 0)) ;; ReturnCode::Success ) (call $assert diff --git a/substrate/frame/contracts/fixtures/data/delegate_call_lib.wat b/substrate/frame/contracts/fixtures/data/delegate_call_lib.wat index 340b9699f87..62eea32800a 100644 --- a/substrate/frame/contracts/fixtures/data/delegate_call_lib.wat +++ b/substrate/frame/contracts/fixtures/data/delegate_call_lib.wat @@ -20,7 +20,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/delegate_call_simple.wat b/substrate/frame/contracts/fixtures/data/delegate_call_simple.wat index 24ae5a13e33..ba0a8fcc8ae 100644 --- a/substrate/frame/contracts/fixtures/data/delegate_call_simple.wat +++ b/substrate/frame/contracts/fixtures/data/delegate_call_simple.wat @@ -12,7 +12,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/destroy_and_transfer.wat b/substrate/frame/contracts/fixtures/data/destroy_and_transfer.wat index 25554795552..2afd3b2fbac 100644 --- a/substrate/frame/contracts/fixtures/data/destroy_and_transfer.wat +++ b/substrate/frame/contracts/fixtures/data/destroy_and_transfer.wat @@ -33,7 +33,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/drain.wat b/substrate/frame/contracts/fixtures/data/drain.wat index cb8ff0aed61..18a21cca803 100644 --- a/substrate/frame/contracts/fixtures/data/drain.wat +++ b/substrate/frame/contracts/fixtures/data/drain.wat @@ -19,7 +19,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/ecdsa_recover.wat b/substrate/frame/contracts/fixtures/data/ecdsa_recover.wat index d694b3215e8..4910e706069 100644 --- a/substrate/frame/contracts/fixtures/data/ecdsa_recover.wat +++ b/substrate/frame/contracts/fixtures/data/ecdsa_recover.wat @@ -12,7 +12,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/event_size.wat b/substrate/frame/contracts/fixtures/data/event_size.wat index 4bd6158d72f..1c1f34b24d7 100644 --- a/substrate/frame/contracts/fixtures/data/event_size.wat +++ b/substrate/frame/contracts/fixtures/data/event_size.wat @@ -9,7 +9,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/multi_store.wat b/substrate/frame/contracts/fixtures/data/multi_store.wat index 2592baf6183..c334ed54c4e 100644 --- a/substrate/frame/contracts/fixtures/data/multi_store.wat +++ b/substrate/frame/contracts/fixtures/data/multi_store.wat @@ -19,7 +19,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/reentrance_count_call.wat b/substrate/frame/contracts/fixtures/data/reentrance_count_call.wat index c6b529e2aff..44db8d041b1 100644 --- a/substrate/frame/contracts/fixtures/data/reentrance_count_call.wat +++ b/substrate/frame/contracts/fixtures/data/reentrance_count_call.wat @@ -20,7 +20,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -36,11 +36,11 @@ (call $seal_input (i32.const 32) (i32.const 36)) ;; reading manually passed reentrant count - (set_local $expected_reentrance_count (i32.load (i32.const 32))) + (local.set $expected_reentrance_count (i32.load (i32.const 32))) ;; reentrance count is calculated correctly (call $assert - (i32.eq (call $reentrance_count) (get_local $expected_reentrance_count)) + (i32.eq (call $reentrance_count) (local.get $expected_reentrance_count)) ) ;; re-enter 5 times in a row and assert that the reentrant counter works as expected @@ -52,7 +52,7 @@ (i32.store (i32.const 32) (i32.add (i32.load (i32.const 32)) (i32.const 1))) ;; Call to itself - (set_local $seal_call_exit_code + (local.set $seal_call_exit_code (call $seal_call (i32.const 8) ;; Allow reentrancy flag set (i32.const 0) ;; Pointer to "callee" address @@ -66,7 +66,7 @@ ) (call $assert - (i32.eq (get_local $seal_call_exit_code) (i32.const 0)) + (i32.eq (local.get $seal_call_exit_code) (i32.const 0)) ) ) ) diff --git a/substrate/frame/contracts/fixtures/data/reentrance_count_delegated_call.wat b/substrate/frame/contracts/fixtures/data/reentrance_count_delegated_call.wat index b8219a8462e..49e0193bcdb 100644 --- a/substrate/frame/contracts/fixtures/data/reentrance_count_delegated_call.wat +++ b/substrate/frame/contracts/fixtures/data/reentrance_count_delegated_call.wat @@ -17,7 +17,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -30,7 +30,7 @@ (call $seal_input (i32.const 0) (i32.const 36)) ;; reading passed callstack height - (set_local $callstack_height (i32.load (i32.const 32))) + (local.set $callstack_height (i32.load (i32.const 32))) ;; incrementing callstack height (i32.store (i32.const 32) (i32.add (i32.load (i32.const 32)) (i32.const 1))) @@ -40,12 +40,12 @@ (i32.eq (call $reentrance_count) (i32.const 0)) ) - (i32.eq (get_local $callstack_height) (i32.const 5)) + (i32.eq (local.get $callstack_height) (i32.const 5)) (if (then) ;; exit recursion case (else ;; Call to itself - (set_local $delegate_call_exit_code + (local.set $delegate_call_exit_code (call $seal_delegate_call (i32.const 0) ;; Set no call flags (i32.const 0) ;; Pointer to "callee" code_hash. @@ -57,13 +57,13 @@ ) (call $assert - (i32.eq (get_local $delegate_call_exit_code) (i32.const 0)) + (i32.eq (local.get $delegate_call_exit_code) (i32.const 0)) ) ) ) (call $assert - (i32.le_s (get_local $callstack_height) (i32.const 5)) + (i32.le_s (local.get $callstack_height) (i32.const 5)) ) ) diff --git a/substrate/frame/contracts/fixtures/data/self_destruct.wat b/substrate/frame/contracts/fixtures/data/self_destruct.wat index b8a37306e20..00c3895fdde 100644 --- a/substrate/frame/contracts/fixtures/data/self_destruct.wat +++ b/substrate/frame/contracts/fixtures/data/self_destruct.wat @@ -26,7 +26,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/self_destructing_constructor.wat b/substrate/frame/contracts/fixtures/data/self_destructing_constructor.wat index 85fce511e21..628f283a19f 100644 --- a/substrate/frame/contracts/fixtures/data/self_destructing_constructor.wat +++ b/substrate/frame/contracts/fixtures/data/self_destructing_constructor.wat @@ -5,7 +5,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/set_code_hash.wat b/substrate/frame/contracts/fixtures/data/set_code_hash.wat index b4df1b13318..c0a9557b4d0 100644 --- a/substrate/frame/contracts/fixtures/data/set_code_hash.wat +++ b/substrate/frame/contracts/fixtures/data/set_code_hash.wat @@ -16,7 +16,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -27,11 +27,11 @@ (call $seal_input (i32.const 0) (i32.const 32)) - (set_local $exit_code + (local.set $exit_code (call $seal_set_code_hash (i32.const 0)) ;; Pointer to the input data. ) (call $assert - (i32.eq (get_local $exit_code) (i32.const 0)) ;; ReturnCode::Success + (i32.eq (local.get $exit_code) (i32.const 0)) ;; ReturnCode::Success ) ;; we return 1 after setting new code_hash diff --git a/substrate/frame/contracts/fixtures/data/storage_size.wat b/substrate/frame/contracts/fixtures/data/storage_size.wat index 293a656d4f6..728bb4fcf3c 100644 --- a/substrate/frame/contracts/fixtures/data/storage_size.wat +++ b/substrate/frame/contracts/fixtures/data/storage_size.wat @@ -20,7 +20,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/store_call.wat b/substrate/frame/contracts/fixtures/data/store_call.wat index 9e090d31801..746b7a48b55 100644 --- a/substrate/frame/contracts/fixtures/data/store_call.wat +++ b/substrate/frame/contracts/fixtures/data/store_call.wat @@ -15,7 +15,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/store_deploy.wat b/substrate/frame/contracts/fixtures/data/store_deploy.wat index cc428e9623b..7f115cba977 100644 --- a/substrate/frame/contracts/fixtures/data/store_deploy.wat +++ b/substrate/frame/contracts/fixtures/data/store_deploy.wat @@ -15,7 +15,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/xcm_execute.wat b/substrate/frame/contracts/fixtures/data/xcm_execute.wat index b3459996a2e..72ef14ed82c 100644 --- a/substrate/frame/contracts/fixtures/data/xcm_execute.wat +++ b/substrate/frame/contracts/fixtures/data/xcm_execute.wat @@ -12,7 +12,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/fixtures/data/xcm_send.wat b/substrate/frame/contracts/fixtures/data/xcm_send.wat index 9eec6388de9..fe29ddf0f14 100644 --- a/substrate/frame/contracts/fixtures/data/xcm_send.wat +++ b/substrate/frame/contracts/fixtures/data/xcm_send.wat @@ -12,7 +12,7 @@ (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) diff --git a/substrate/frame/contracts/src/wasm/mod.rs b/substrate/frame/contracts/src/wasm/mod.rs index 77e94b16777..f73655e9920 100644 --- a/substrate/frame/contracts/src/wasm/mod.rs +++ b/substrate/frame/contracts/src/wasm/mod.rs @@ -1506,7 +1506,7 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -1531,7 +1531,7 @@ mod tests { ) ;; Find out the size of the buffer - (set_local $buf_size + (local.set $buf_size (i32.load (i32.const 32)) ) @@ -1539,7 +1539,7 @@ mod tests { (call $seal_return (i32.const 0) (i32.const 36) - (get_local $buf_size) + (local.get $buf_size) ) ;; env:seal_return doesn't return, so this is effectively unreachable. @@ -1575,7 +1575,7 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -1633,7 +1633,7 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -1680,7 +1680,7 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -1726,7 +1726,7 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -1773,7 +1773,7 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -1836,7 +1836,7 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -1925,7 +1925,7 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -1966,7 +1966,7 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -2013,7 +2013,7 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -2067,7 +2067,7 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -2137,7 +2137,7 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -2327,7 +2327,7 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -2995,7 +2995,7 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -3047,7 +3047,7 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) @@ -3162,18 +3162,18 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) ) (func (export "call") (local $exit_code i32) - (set_local $exit_code + (local.set $exit_code (call $seal_set_code_hash (i32.const 0)) ) (call $assert - (i32.eq (get_local $exit_code) (i32.const 0)) ;; ReturnCode::Success + (i32.eq (local.get $exit_code) (i32.const 0)) ;; ReturnCode::Success ) ) @@ -3202,18 +3202,18 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) ) (func (export "call") (local $return_val i32) - (set_local $return_val + (local.set $return_val (call $reentrance_count) ) (call $assert - (i32.eq (get_local $return_val) (i32.const 12)) + (i32.eq (local.get $return_val) (i32.const 12)) ) ) @@ -3234,18 +3234,18 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) ) (func (export "call") (local $return_val i32) - (set_local $return_val + (local.set $return_val (call $account_reentrance_count (i32.const 0)) ) (call $assert - (i32.eq (get_local $return_val) (i32.const 12)) + (i32.eq (local.get $return_val) (i32.const 12)) ) ) @@ -3267,7 +3267,7 @@ mod tests { (func $assert (param i32) (block $ok (br_if $ok - (get_local 0) + (local.get 0) ) (unreachable) ) -- GitLab From aada961da9400d6f1e1fcccecd5aac627dd230c4 Mon Sep 17 00:00:00 2001 From: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> Date: Tue, 28 Nov 2023 21:07:40 +0100 Subject: [PATCH 094/102] [ci] Run gitspiegel trigger with merge conflicts (#2531) Currently gitspiegel trigger won't run if there is merge conflict. This PR fixes it. close https://github.com/paritytech/gitspiegel/issues/183 --- .github/workflows/gitspiegel-trigger.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/gitspiegel-trigger.yml b/.github/workflows/gitspiegel-trigger.yml index 59347fad6d6..b338f7a3f62 100644 --- a/.github/workflows/gitspiegel-trigger.yml +++ b/.github/workflows/gitspiegel-trigger.yml @@ -13,8 +13,19 @@ on: - unlocked - ready_for_review - reopened + # the job doesn't check out any code, so it is relatively safe to run it on any event + pull_request_target: + types: + - opened + - synchronize + - unlocked + - ready_for_review + - reopened merge_group: +# drop all permissions for GITHUB_TOKEN +permissions: {} + jobs: sync: runs-on: ubuntu-latest -- GitLab From 820179348c1c56bbe00236be6115a7bab451d1fd Mon Sep 17 00:00:00 2001 From: Sebastian Kunert Date: Tue, 28 Nov 2023 23:13:36 +0100 Subject: [PATCH 095/102] Remove long deprecated `AllPalletsWithoutSystemReversed` (#2509) Remove deprecated `AllPalletsXY` types. They have been deprecated for nearly 1.5 years now, I think its fine to remove them. If anyone feels like we should first put a date on the deprecation as stated in the deprecation guideline, feel free to speak up. To me it looks like this has been forgotten and can be directly removed. --- substrate/frame/executive/README.md | 6 +- .../procedural/src/construct_runtime/mod.rs | 54 -------- substrate/frame/support/test/tests/pallet.rs | 117 ------------------ 3 files changed, 2 insertions(+), 175 deletions(-) diff --git a/substrate/frame/executive/README.md b/substrate/frame/executive/README.md index 96a412a4537..6151232ecaf 100644 --- a/substrate/frame/executive/README.md +++ b/substrate/frame/executive/README.md @@ -34,14 +34,13 @@ The default Substrate node template declares the `Executive` type declaration from the node template. ```rust -# /// Executive: handles dispatch to the various modules. pub type Executive = executive::Executive< Runtime, Block, Context, Runtime, - AllPallets, + AllPalletsWithSystem, >; ``` @@ -51,7 +50,6 @@ You can add custom logic that should be called in your runtime on a runtime upgr generic parameter. The custom logic will be called before the on runtime upgrade logic of all modules is called. ```rust -# struct CustomOnRuntimeUpgrade; impl frame_support::traits::OnRuntimeUpgrade for CustomOnRuntimeUpgrade { fn on_runtime_upgrade() -> frame_support::weights::Weight { @@ -65,7 +63,7 @@ pub type Executive = executive::Executive< Block, Context, Runtime, - AllPallets, + AllPalletsWithSystem, CustomOnRuntimeUpgrade, >; ``` diff --git a/substrate/frame/support/procedural/src/construct_runtime/mod.rs b/substrate/frame/support/procedural/src/construct_runtime/mod.rs index ce34694275b..d1d6040d33a 100644 --- a/substrate/frame/support/procedural/src/construct_runtime/mod.rs +++ b/substrate/frame/support/procedural/src/construct_runtime/mod.rs @@ -600,66 +600,12 @@ fn decl_all_pallets<'a>( } }); - let all_pallets_without_system_reversed = attribute_to_names.iter().map(|(attr, names)| { - let names = names.iter().filter(|n| **n != SYSTEM_PALLET_NAME).rev(); - quote! { - #attr - /// All pallets included in the runtime as a nested tuple of types in reversed order. - /// Excludes the System pallet. - #[deprecated(note = "Using reverse pallet orders is deprecated. use only \ - `AllPalletsWithSystem or AllPalletsWithoutSystem`")] - pub type AllPalletsWithoutSystemReversed = ( #(#names,)* ); - } - }); - - let all_pallets_with_system_reversed = attribute_to_names.iter().map(|(attr, names)| { - let names = names.iter().rev(); - quote! { - #attr - /// All pallets included in the runtime as a nested tuple of types in reversed order. - #[deprecated(note = "Using reverse pallet orders is deprecated. use only \ - `AllPalletsWithSystem or AllPalletsWithoutSystem`")] - pub type AllPalletsWithSystemReversed = ( #(#names,)* ); - } - }); - - let all_pallets_reversed_with_system_first = attribute_to_names.iter().map(|(attr, names)| { - let system = quote::format_ident!("{}", SYSTEM_PALLET_NAME); - let names = std::iter::once(&system) - .chain(names.iter().rev().filter(|n| **n != SYSTEM_PALLET_NAME).cloned()); - quote! { - #attr - /// All pallets included in the runtime as a nested tuple of types in reversed order. - /// With the system pallet first. - #[deprecated(note = "Using reverse pallet orders is deprecated. use only \ - `AllPalletsWithSystem or AllPalletsWithoutSystem`")] - pub type AllPalletsReversedWithSystemFirst = ( #(#names,)* ); - } - }); - quote!( #types - /// All pallets included in the runtime as a nested tuple of types. - #[deprecated(note = "The type definition has changed from representing all pallets \ - excluding system, in reversed order to become the representation of all pallets \ - including system pallet in regular order. For this reason it is encouraged to use \ - explicitly one of `AllPalletsWithSystem`, `AllPalletsWithoutSystem`, \ - `AllPalletsWithSystemReversed`, `AllPalletsWithoutSystemReversed`. \ - Note that the type `frame_executive::Executive` expects one of `AllPalletsWithSystem` \ - , `AllPalletsWithSystemReversed`, `AllPalletsReversedWithSystemFirst`. More details in \ - https://github.com/paritytech/substrate/pull/10043")] - pub type AllPallets = AllPalletsWithSystem; - #( #all_pallets_with_system )* #( #all_pallets_without_system )* - - #( #all_pallets_with_system_reversed )* - - #( #all_pallets_without_system_reversed )* - - #( #all_pallets_reversed_with_system_first )* ) } fn decl_pallet_runtime_setup( diff --git a/substrate/frame/support/test/tests/pallet.rs b/substrate/frame/support/test/tests/pallet.rs index 1afb8fdf497..d2e5b185163 100644 --- a/substrate/frame/support/test/tests/pallet.rs +++ b/substrate/frame/support/test/tests/pallet.rs @@ -1271,52 +1271,6 @@ fn pallet_hooks_expand() { }) } -#[test] -fn all_pallets_type_reversed_order_is_correct() { - TestExternalities::default().execute_with(|| { - frame_system::Pallet::::set_block_number(1); - - #[allow(deprecated)] - { - assert_eq!( - AllPalletsWithoutSystemReversed::on_initialize(1), - Weight::from_parts(10, 0) - ); - AllPalletsWithoutSystemReversed::on_finalize(1); - - assert_eq!( - AllPalletsWithoutSystemReversed::on_runtime_upgrade(), - Weight::from_parts(30, 0) - ); - } - - assert_eq!( - frame_system::Pallet::::events()[0].event, - RuntimeEvent::Example2(pallet2::Event::Something(11)), - ); - assert_eq!( - frame_system::Pallet::::events()[1].event, - RuntimeEvent::Example(pallet::Event::Something(10)), - ); - assert_eq!( - frame_system::Pallet::::events()[2].event, - RuntimeEvent::Example2(pallet2::Event::Something(21)), - ); - assert_eq!( - frame_system::Pallet::::events()[3].event, - RuntimeEvent::Example(pallet::Event::Something(20)), - ); - assert_eq!( - frame_system::Pallet::::events()[4].event, - RuntimeEvent::Example2(pallet2::Event::Something(31)), - ); - assert_eq!( - frame_system::Pallet::::events()[5].event, - RuntimeEvent::Example(pallet::Event::Something(30)), - ); - }) -} - #[test] fn pallet_on_genesis() { TestExternalities::default().execute_with(|| { @@ -2186,31 +2140,6 @@ fn test_storage_info() { ); } -#[test] -fn assert_type_all_pallets_reversed_with_system_first_is_correct() { - // Just ensure the 2 types are same. - #[allow(deprecated)] - fn _a(_t: AllPalletsReversedWithSystemFirst) {} - #[cfg(all(not(feature = "frame-feature-testing"), not(feature = "frame-feature-testing-2")))] - fn _b(t: (System, Example4, Example2, Example)) { - _a(t) - } - #[cfg(all(feature = "frame-feature-testing", not(feature = "frame-feature-testing-2")))] - fn _b(t: (System, Example4, Example3, Example2, Example)) { - _a(t) - } - - #[cfg(all(not(feature = "frame-feature-testing"), feature = "frame-feature-testing-2"))] - fn _b(t: (System, Example5, Example4, Example2, Example)) { - _a(t) - } - - #[cfg(all(feature = "frame-feature-testing", feature = "frame-feature-testing-2"))] - fn _b(t: (System, Example5, Example4, Example3, Example2, Example)) { - _a(t) - } -} - #[test] fn assert_type_all_pallets_with_system_is_correct() { // Just ensure the 2 types are same. @@ -2255,52 +2184,6 @@ fn assert_type_all_pallets_without_system_is_correct() { } } -#[test] -fn assert_type_all_pallets_with_system_reversed_is_correct() { - // Just ensure the 2 types are same. - #[allow(deprecated)] - fn _a(_t: AllPalletsWithSystemReversed) {} - #[cfg(all(not(feature = "frame-feature-testing"), not(feature = "frame-feature-testing-2")))] - fn _b(t: (Example4, Example2, Example, System)) { - _a(t) - } - #[cfg(all(feature = "frame-feature-testing", not(feature = "frame-feature-testing-2")))] - fn _b(t: (Example4, Example3, Example2, Example, System)) { - _a(t) - } - #[cfg(all(not(feature = "frame-feature-testing"), feature = "frame-feature-testing-2"))] - fn _b(t: (Example5, Example4, Example2, Example, System)) { - _a(t) - } - #[cfg(all(feature = "frame-feature-testing", feature = "frame-feature-testing-2"))] - fn _b(t: (Example5, Example4, Example3, Example2, Example, System)) { - _a(t) - } -} - -#[test] -fn assert_type_all_pallets_without_system_reversed_is_correct() { - // Just ensure the 2 types are same. - #[allow(deprecated)] - fn _a(_t: AllPalletsWithoutSystemReversed) {} - #[cfg(all(not(feature = "frame-feature-testing"), not(feature = "frame-feature-testing-2")))] - fn _b(t: (Example4, Example2, Example)) { - _a(t) - } - #[cfg(all(feature = "frame-feature-testing", not(feature = "frame-feature-testing-2")))] - fn _b(t: (Example4, Example3, Example2, Example)) { - _a(t) - } - #[cfg(all(not(feature = "frame-feature-testing"), feature = "frame-feature-testing-2"))] - fn _b(t: (Example5, Example4, Example2, Example)) { - _a(t) - } - #[cfg(all(feature = "frame-feature-testing", feature = "frame-feature-testing-2"))] - fn _b(t: (Example5, Example4, Example3, Example2, Example)) { - _a(t) - } -} - #[test] fn test_storage_alias() { use frame_support::Twox64Concat; -- GitLab From a9aa2d1f1c7b73ddfa69f8fb61f3035d091018d2 Mon Sep 17 00:00:00 2001 From: Liam Aharon Date: Wed, 29 Nov 2023 10:44:44 +0400 Subject: [PATCH 096/102] Remove `dmp_queue` pallet from Westend SP runtimes (#2516) Westend SP dmp queue pallet removal is complete. Screenshot 2023-11-28 at 08 31 27 Screenshot 2023-11-28 at 08 32 08 Screenshot 2023-11-28 at 08 31 45 --- Cargo.lock | 3 - .../assets/asset-hub-westend/Cargo.toml | 96 ++++++------- .../assets/asset-hub-westend/src/lib.rs | 8 -- .../src/weights/cumulus_pallet_dmp_queue.rs | 131 ------------------ .../asset-hub-westend/src/weights/mod.rs | 1 - .../bridge-hubs/bridge-hub-westend/Cargo.toml | 84 ++++++----- .../bridge-hubs/bridge-hub-westend/src/lib.rs | 7 - .../src/weights/cumulus_pallet_dmp_queue.rs | 131 ------------------ .../bridge-hub-westend/src/weights/mod.rs | 1 - .../collectives-westend/Cargo.toml | 8 +- .../collectives-westend/src/lib.rs | 8 -- .../src/weights/cumulus_pallet_dmp_queue.rs | 131 ------------------ .../collectives-westend/src/weights/mod.rs | 1 - 13 files changed, 87 insertions(+), 523 deletions(-) delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-westend/src/weights/cumulus_pallet_dmp_queue.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/weights/cumulus_pallet_dmp_queue.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-westend/src/weights/cumulus_pallet_dmp_queue.rs diff --git a/Cargo.lock b/Cargo.lock index 4fa9e83a173..871d46ea844 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1050,7 +1050,6 @@ dependencies = [ "bp-bridge-hub-rococo", "bp-bridge-hub-westend", "cumulus-pallet-aura-ext", - "cumulus-pallet-dmp-queue", "cumulus-pallet-parachain-system", "cumulus-pallet-session-benchmarking", "cumulus-pallet-xcm", @@ -2321,7 +2320,6 @@ dependencies = [ "bridge-hub-test-utils", "bridge-runtime-common", "cumulus-pallet-aura-ext", - "cumulus-pallet-dmp-queue", "cumulus-pallet-parachain-system", "cumulus-pallet-session-benchmarking", "cumulus-pallet-xcm", @@ -2940,7 +2938,6 @@ name = "collectives-westend-runtime" version = "1.0.0" dependencies = [ "cumulus-pallet-aura-ext", - "cumulus-pallet-dmp-queue", "cumulus-pallet-parachain-system", "cumulus-pallet-session-benchmarking", "cumulus-pallet-xcm", diff --git a/cumulus/parachains/runtimes/assets/asset-hub-westend/Cargo.toml b/cumulus/parachains/runtimes/assets/asset-hub-westend/Cargo.toml index 49b80b067cf..bc06c6fe9a1 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-westend/Cargo.toml +++ b/cumulus/parachains/runtimes/assets/asset-hub-westend/Cargo.toml @@ -14,63 +14,62 @@ scale-info = { version = "2.10.0", default-features = false, features = ["derive smallvec = "1.11.0" # Substrate -frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true} -frame-executive = { path = "../../../../../substrate/frame/executive", default-features = false} -frame-support = { path = "../../../../../substrate/frame/support", default-features = false} -frame-system = { path = "../../../../../substrate/frame/system", default-features = false} -frame-system-benchmarking = { path = "../../../../../substrate/frame/system/benchmarking", default-features = false, optional = true} -frame-system-rpc-runtime-api = { path = "../../../../../substrate/frame/system/rpc/runtime-api", default-features = false} -frame-try-runtime = { path = "../../../../../substrate/frame/try-runtime", default-features = false, optional = true} -pallet-asset-conversion-tx-payment = { path = "../../../../../substrate/frame/transaction-payment/asset-conversion-tx-payment", default-features = false} -pallet-assets = { path = "../../../../../substrate/frame/assets", default-features = false} -pallet-asset-conversion = { path = "../../../../../substrate/frame/asset-conversion", default-features = false} -pallet-aura = { path = "../../../../../substrate/frame/aura", default-features = false} -pallet-authorship = { path = "../../../../../substrate/frame/authorship", default-features = false} -pallet-balances = { path = "../../../../../substrate/frame/balances", default-features = false} -pallet-multisig = { path = "../../../../../substrate/frame/multisig", default-features = false} -pallet-nft-fractionalization = { path = "../../../../../substrate/frame/nft-fractionalization", default-features = false} -pallet-nfts = { path = "../../../../../substrate/frame/nfts", default-features = false} -pallet-nfts-runtime-api = { path = "../../../../../substrate/frame/nfts/runtime-api", default-features = false} -pallet-proxy = { path = "../../../../../substrate/frame/proxy", default-features = false} -pallet-session = { path = "../../../../../substrate/frame/session", default-features = false} -pallet-timestamp = { path = "../../../../../substrate/frame/timestamp", default-features = false} -pallet-transaction-payment = { path = "../../../../../substrate/frame/transaction-payment", default-features = false} -pallet-transaction-payment-rpc-runtime-api = { path = "../../../../../substrate/frame/transaction-payment/rpc/runtime-api", default-features = false} -pallet-uniques = { path = "../../../../../substrate/frame/uniques", default-features = false} -pallet-utility = { path = "../../../../../substrate/frame/utility", default-features = false} -sp-api = { path = "../../../../../substrate/primitives/api", default-features = false} -sp-block-builder = { path = "../../../../../substrate/primitives/block-builder", default-features = false} -sp-consensus-aura = { path = "../../../../../substrate/primitives/consensus/aura", default-features = false} -sp-core = { path = "../../../../../substrate/primitives/core", default-features = false} +frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true } +frame-executive = { path = "../../../../../substrate/frame/executive", default-features = false } +frame-support = { path = "../../../../../substrate/frame/support", default-features = false } +frame-system = { path = "../../../../../substrate/frame/system", default-features = false } +frame-system-benchmarking = { path = "../../../../../substrate/frame/system/benchmarking", default-features = false, optional = true } +frame-system-rpc-runtime-api = { path = "../../../../../substrate/frame/system/rpc/runtime-api", default-features = false } +frame-try-runtime = { path = "../../../../../substrate/frame/try-runtime", default-features = false, optional = true } +pallet-asset-conversion-tx-payment = { path = "../../../../../substrate/frame/transaction-payment/asset-conversion-tx-payment", default-features = false } +pallet-assets = { path = "../../../../../substrate/frame/assets", default-features = false } +pallet-asset-conversion = { path = "../../../../../substrate/frame/asset-conversion", default-features = false } +pallet-aura = { path = "../../../../../substrate/frame/aura", default-features = false } +pallet-authorship = { path = "../../../../../substrate/frame/authorship", default-features = false } +pallet-balances = { path = "../../../../../substrate/frame/balances", default-features = false } +pallet-multisig = { path = "../../../../../substrate/frame/multisig", default-features = false } +pallet-nft-fractionalization = { path = "../../../../../substrate/frame/nft-fractionalization", default-features = false } +pallet-nfts = { path = "../../../../../substrate/frame/nfts", default-features = false } +pallet-nfts-runtime-api = { path = "../../../../../substrate/frame/nfts/runtime-api", default-features = false } +pallet-proxy = { path = "../../../../../substrate/frame/proxy", default-features = false } +pallet-session = { path = "../../../../../substrate/frame/session", default-features = false } +pallet-timestamp = { path = "../../../../../substrate/frame/timestamp", default-features = false } +pallet-transaction-payment = { path = "../../../../../substrate/frame/transaction-payment", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { path = "../../../../../substrate/frame/transaction-payment/rpc/runtime-api", default-features = false } +pallet-uniques = { path = "../../../../../substrate/frame/uniques", default-features = false } +pallet-utility = { path = "../../../../../substrate/frame/utility", default-features = false } +sp-api = { path = "../../../../../substrate/primitives/api", default-features = false } +sp-block-builder = { path = "../../../../../substrate/primitives/block-builder", default-features = false } +sp-consensus-aura = { path = "../../../../../substrate/primitives/consensus/aura", default-features = false } +sp-core = { path = "../../../../../substrate/primitives/core", default-features = false } sp-genesis-builder = { path = "../../../../../substrate/primitives/genesis-builder", default-features = false } -sp-inherents = { path = "../../../../../substrate/primitives/inherents", default-features = false} -sp-offchain = { path = "../../../../../substrate/primitives/offchain", default-features = false} -sp-runtime = { path = "../../../../../substrate/primitives/runtime", default-features = false} -sp-session = { path = "../../../../../substrate/primitives/session", default-features = false} -sp-std = { path = "../../../../../substrate/primitives/std", default-features = false} -sp-storage = { path = "../../../../../substrate/primitives/storage", default-features = false} -sp-transaction-pool = { path = "../../../../../substrate/primitives/transaction-pool", default-features = false} -sp-version = { path = "../../../../../substrate/primitives/version", default-features = false} +sp-inherents = { path = "../../../../../substrate/primitives/inherents", default-features = false } +sp-offchain = { path = "../../../../../substrate/primitives/offchain", default-features = false } +sp-runtime = { path = "../../../../../substrate/primitives/runtime", default-features = false } +sp-session = { path = "../../../../../substrate/primitives/session", default-features = false } +sp-std = { path = "../../../../../substrate/primitives/std", default-features = false } +sp-storage = { path = "../../../../../substrate/primitives/storage", default-features = false } +sp-transaction-pool = { path = "../../../../../substrate/primitives/transaction-pool", default-features = false } +sp-version = { path = "../../../../../substrate/primitives/version", default-features = false } # num-traits feature needed for dex integer sq root: primitive-types = { version = "0.12.1", default-features = false, features = ["codec", "scale-info", "num-traits"] } # Polkadot -pallet-xcm = { path = "../../../../../polkadot/xcm/pallet-xcm", default-features = false} +pallet-xcm = { path = "../../../../../polkadot/xcm/pallet-xcm", default-features = false } pallet-xcm-benchmarks = { path = "../../../../../polkadot/xcm/pallet-xcm-benchmarks", default-features = false, optional = true } -polkadot-core-primitives = { path = "../../../../../polkadot/core-primitives", default-features = false} -polkadot-parachain-primitives = { path = "../../../../../polkadot/parachain", default-features = false} -polkadot-runtime-common = { path = "../../../../../polkadot/runtime/common", default-features = false} -westend-runtime-constants = { path = "../../../../../polkadot/runtime/westend/constants", default-features = false} -xcm = { package = "staging-xcm", path = "../../../../../polkadot/xcm", default-features = false} -xcm-builder = { package = "staging-xcm-builder", path = "../../../../../polkadot/xcm/xcm-builder", default-features = false} -xcm-executor = { package = "staging-xcm-executor", path = "../../../../../polkadot/xcm/xcm-executor", default-features = false} +polkadot-core-primitives = { path = "../../../../../polkadot/core-primitives", default-features = false } +polkadot-parachain-primitives = { path = "../../../../../polkadot/parachain", default-features = false } +polkadot-runtime-common = { path = "../../../../../polkadot/runtime/common", default-features = false } +westend-runtime-constants = { path = "../../../../../polkadot/runtime/westend/constants", default-features = false } +xcm = { package = "staging-xcm", path = "../../../../../polkadot/xcm", default-features = false } +xcm-builder = { package = "staging-xcm-builder", path = "../../../../../polkadot/xcm/xcm-builder", default-features = false } +xcm-executor = { package = "staging-xcm-executor", path = "../../../../../polkadot/xcm/xcm-executor", default-features = false } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } pallet-message-queue = { path = "../../../../../substrate/frame/message-queue", default-features = false } -cumulus-pallet-dmp-queue = { path = "../../../../pallets/dmp-queue", default-features = false } -cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = ["parameterized-consensus-hook",] } -cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false} +cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = ["parameterized-consensus-hook"] } +cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false } cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false, features = ["bridging"] } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } @@ -98,7 +97,6 @@ substrate-wasm-builder = { path = "../../../../../substrate/utils/wasm-builder", default = [ "std" ] runtime-benchmarks = [ "assets-common/runtime-benchmarks", - "cumulus-pallet-dmp-queue/runtime-benchmarks", "cumulus-pallet-parachain-system/runtime-benchmarks", "cumulus-pallet-session-benchmarking/runtime-benchmarks", "cumulus-pallet-xcmp-queue/runtime-benchmarks", @@ -133,7 +131,6 @@ 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", @@ -172,7 +169,6 @@ std = [ "bp-bridge-hub-westend/std", "codec/std", "cumulus-pallet-aura-ext/std", - "cumulus-pallet-dmp-queue/std", "cumulus-pallet-parachain-system/std", "cumulus-pallet-session-benchmarking/std", "cumulus-pallet-xcm/std", diff --git a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs index a0d5a528c3f..4eb3e2471ce 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs +++ b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs @@ -667,12 +667,6 @@ parameter_types! { pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; } -impl cumulus_pallet_dmp_queue::Config for Runtime { - type WeightInfo = weights::cumulus_pallet_dmp_queue::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type DmpSink = frame_support::traits::EnqueueWithOrigin; -} - parameter_types! { pub const Period: u32 = 6 * HOURS; pub const Offset: u32 = 0; @@ -890,7 +884,6 @@ construct_runtime!( XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event} = 30, PolkadotXcm: pallet_xcm::{Pallet, Call, Storage, Event, Origin, Config} = 31, CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 32, - DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 33, // Bridge utilities. ToRococoXcmRouter: pallet_xcm_bridge_hub_router::::{Pallet, Storage, Call} = 34, MessageQueue: pallet_message_queue::{Pallet, Call, Storage, Event} = 35, @@ -1082,7 +1075,6 @@ mod benches { [pallet_timestamp, Timestamp] [pallet_collator_selection, CollatorSelection] [cumulus_pallet_xcmp_queue, XcmpQueue] - [cumulus_pallet_dmp_queue, DmpQueue] [pallet_xcm_bridge_hub_router, ToRococo] // XCM [pallet_xcm, PalletXcmExtrinsicsBenchmark::] diff --git a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/weights/cumulus_pallet_dmp_queue.rs b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/weights/cumulus_pallet_dmp_queue.rs deleted file mode 100644 index cc41dcd6cbb..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/weights/cumulus_pallet_dmp_queue.rs +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (C) 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_dmp_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-10-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=cumulus_pallet_dmp_queue -// --chain=asset-hub-kusama-dev -// --header=./cumulus/file_header.txt -// --output=./cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_dmp_queue`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_dmp_queue::WeightInfo for WeightInfo { - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65696` - // Estimated: `69161` - // Minimum execution time: 124_651_000 picoseconds. - Weight::from_parts(127_857_000, 0) - .saturating_add(Weight::from_parts(0, 69161)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65659` - // Estimated: `69124` - // Minimum execution time: 65_684_000 picoseconds. - Weight::from_parts(68_039_000, 0) - .saturating_add(Weight::from_parts(0, 69124)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_overweight_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65726` - // Estimated: `69191` - // Minimum execution time: 117_657_000 picoseconds. - Weight::from_parts(122_035_000, 0) - .saturating_add(Weight::from_parts(0, 69191)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(6)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - fn on_idle_overweight_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65689` - // Estimated: `69154` - // Minimum execution time: 59_799_000 picoseconds. - Weight::from_parts(61_354_000, 0) - .saturating_add(Weight::from_parts(0, 69154)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/weights/mod.rs b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/weights/mod.rs index 1646c00989d..2462138b04a 100644 --- a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/weights/mod.rs +++ b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/weights/mod.rs @@ -14,7 +14,6 @@ // limitations under the License. pub mod block_weights; -pub mod cumulus_pallet_dmp_queue; pub mod cumulus_pallet_parachain_system; pub mod cumulus_pallet_xcmp_queue; pub mod extrinsic_weights; diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/Cargo.toml b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/Cargo.toml index 7e384126ab6..4d2e60d971d 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/Cargo.toml +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/Cargo.toml @@ -18,54 +18,53 @@ serde = { version = "1.0.188", optional = true, features = ["derive"] } smallvec = "1.11.0" # Substrate -frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true} -frame-executive = { path = "../../../../../substrate/frame/executive", default-features = false} -frame-support = { path = "../../../../../substrate/frame/support", default-features = false} -frame-system = { path = "../../../../../substrate/frame/system", default-features = false} -frame-system-benchmarking = { path = "../../../../../substrate/frame/system/benchmarking", default-features = false, optional = true} -frame-system-rpc-runtime-api = { path = "../../../../../substrate/frame/system/rpc/runtime-api", default-features = false} -frame-try-runtime = { path = "../../../../../substrate/frame/try-runtime", default-features = false, optional = true} -pallet-aura = { path = "../../../../../substrate/frame/aura", default-features = false} -pallet-authorship = { path = "../../../../../substrate/frame/authorship", default-features = false} -pallet-balances = { path = "../../../../../substrate/frame/balances", default-features = false} -pallet-session = { path = "../../../../../substrate/frame/session", default-features = false} -pallet-message-queue = { path = "../../../../../substrate/frame/message-queue", default-features = false} -pallet-multisig = { path = "../../../../../substrate/frame/multisig", default-features = false} -pallet-timestamp = { path = "../../../../../substrate/frame/timestamp", default-features = false} -pallet-transaction-payment = { path = "../../../../../substrate/frame/transaction-payment", default-features = false} -pallet-transaction-payment-rpc-runtime-api = { path = "../../../../../substrate/frame/transaction-payment/rpc/runtime-api", default-features = false} -pallet-utility = { path = "../../../../../substrate/frame/utility", default-features = false} -sp-api = { path = "../../../../../substrate/primitives/api", default-features = false} -sp-block-builder = { path = "../../../../../substrate/primitives/block-builder", default-features = false} -sp-consensus-aura = { path = "../../../../../substrate/primitives/consensus/aura", default-features = false} -sp-core = { path = "../../../../../substrate/primitives/core", default-features = false} +frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true } +frame-executive = { path = "../../../../../substrate/frame/executive", default-features = false } +frame-support = { path = "../../../../../substrate/frame/support", default-features = false } +frame-system = { path = "../../../../../substrate/frame/system", default-features = false } +frame-system-benchmarking = { path = "../../../../../substrate/frame/system/benchmarking", default-features = false, optional = true } +frame-system-rpc-runtime-api = { path = "../../../../../substrate/frame/system/rpc/runtime-api", default-features = false } +frame-try-runtime = { path = "../../../../../substrate/frame/try-runtime", default-features = false, optional = true } +pallet-aura = { path = "../../../../../substrate/frame/aura", default-features = false } +pallet-authorship = { path = "../../../../../substrate/frame/authorship", default-features = false } +pallet-balances = { path = "../../../../../substrate/frame/balances", default-features = false } +pallet-session = { path = "../../../../../substrate/frame/session", default-features = false } +pallet-message-queue = { path = "../../../../../substrate/frame/message-queue", default-features = false } +pallet-multisig = { path = "../../../../../substrate/frame/multisig", default-features = false } +pallet-timestamp = { path = "../../../../../substrate/frame/timestamp", default-features = false } +pallet-transaction-payment = { path = "../../../../../substrate/frame/transaction-payment", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { path = "../../../../../substrate/frame/transaction-payment/rpc/runtime-api", default-features = false } +pallet-utility = { path = "../../../../../substrate/frame/utility", default-features = false } +sp-api = { path = "../../../../../substrate/primitives/api", default-features = false } +sp-block-builder = { path = "../../../../../substrate/primitives/block-builder", default-features = false } +sp-consensus-aura = { path = "../../../../../substrate/primitives/consensus/aura", default-features = false } +sp-core = { path = "../../../../../substrate/primitives/core", default-features = false } sp-genesis-builder = { path = "../../../../../substrate/primitives/genesis-builder", default-features = false } -sp-inherents = { path = "../../../../../substrate/primitives/inherents", default-features = false} -sp-io = { path = "../../../../../substrate/primitives/io", default-features = false} -sp-offchain = { path = "../../../../../substrate/primitives/offchain", default-features = false} -sp-runtime = { path = "../../../../../substrate/primitives/runtime", default-features = false} -sp-session = { path = "../../../../../substrate/primitives/session", default-features = false} -sp-std = { path = "../../../../../substrate/primitives/std", default-features = false} -sp-storage = { path = "../../../../../substrate/primitives/storage", default-features = false} -sp-transaction-pool = { path = "../../../../../substrate/primitives/transaction-pool", default-features = false} -sp-version = { path = "../../../../../substrate/primitives/version", default-features = false} +sp-inherents = { path = "../../../../../substrate/primitives/inherents", default-features = false } +sp-io = { path = "../../../../../substrate/primitives/io", default-features = false } +sp-offchain = { path = "../../../../../substrate/primitives/offchain", default-features = false } +sp-runtime = { path = "../../../../../substrate/primitives/runtime", default-features = false } +sp-session = { path = "../../../../../substrate/primitives/session", default-features = false } +sp-std = { path = "../../../../../substrate/primitives/std", default-features = false } +sp-storage = { path = "../../../../../substrate/primitives/storage", default-features = false } +sp-transaction-pool = { path = "../../../../../substrate/primitives/transaction-pool", default-features = false } +sp-version = { path = "../../../../../substrate/primitives/version", default-features = false } # Polkadot -westend-runtime-constants = { path = "../../../../../polkadot/runtime/westend/constants", default-features = false} -pallet-xcm = { path = "../../../../../polkadot/xcm/pallet-xcm", default-features = false} +westend-runtime-constants = { path = "../../../../../polkadot/runtime/westend/constants", default-features = false } +pallet-xcm = { path = "../../../../../polkadot/xcm/pallet-xcm", default-features = false } pallet-xcm-benchmarks = { path = "../../../../../polkadot/xcm/pallet-xcm-benchmarks", default-features = false, optional = true } -polkadot-core-primitives = { path = "../../../../../polkadot/core-primitives", default-features = false} -polkadot-parachain-primitives = { path = "../../../../../polkadot/parachain", default-features = false} -polkadot-runtime-common = { path = "../../../../../polkadot/runtime/common", default-features = false} -xcm = { package = "staging-xcm", path = "../../../../../polkadot/xcm", default-features = false} -xcm-builder = { package = "staging-xcm-builder", path = "../../../../../polkadot/xcm/xcm-builder", default-features = false} -xcm-executor = { package = "staging-xcm-executor", path = "../../../../../polkadot/xcm/xcm-executor", default-features = false} +polkadot-core-primitives = { path = "../../../../../polkadot/core-primitives", default-features = false } +polkadot-parachain-primitives = { path = "../../../../../polkadot/parachain", default-features = false } +polkadot-runtime-common = { path = "../../../../../polkadot/runtime/common", default-features = false } +xcm = { package = "staging-xcm", path = "../../../../../polkadot/xcm", default-features = false } +xcm-builder = { package = "staging-xcm-builder", path = "../../../../../polkadot/xcm/xcm-builder", default-features = false } +xcm-executor = { package = "staging-xcm-executor", path = "../../../../../polkadot/xcm/xcm-executor", default-features = false } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } -cumulus-pallet-dmp-queue = { path = "../../../../pallets/dmp-queue", default-features = false } -cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = ["parameterized-consensus-hook",] } -cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false} +cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = ["parameterized-consensus-hook"] } +cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false } cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false, features = ["bridging"] } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } @@ -115,7 +114,6 @@ std = [ "bridge-runtime-common/std", "codec/std", "cumulus-pallet-aura-ext/std", - "cumulus-pallet-dmp-queue/std", "cumulus-pallet-parachain-system/std", "cumulus-pallet-session-benchmarking/std", "cumulus-pallet-xcm/std", @@ -177,7 +175,6 @@ std = [ runtime-benchmarks = [ "bridge-runtime-common/runtime-benchmarks", - "cumulus-pallet-dmp-queue/runtime-benchmarks", "cumulus-pallet-parachain-system/runtime-benchmarks", "cumulus-pallet-session-benchmarking/runtime-benchmarks", "cumulus-pallet-xcmp-queue/runtime-benchmarks", @@ -209,7 +206,6 @@ 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", diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs index 764b9825d4e..7b8ea1b7734 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs @@ -393,12 +393,6 @@ parameter_types! { pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; } -impl cumulus_pallet_dmp_queue::Config for Runtime { - type WeightInfo = weights::cumulus_pallet_dmp_queue::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type DmpSink = frame_support::traits::EnqueueWithOrigin; -} - pub const PERIOD: u32 = 6 * HOURS; pub const OFFSET: u32 = 0; @@ -499,7 +493,6 @@ construct_runtime!( XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event} = 30, PolkadotXcm: pallet_xcm::{Pallet, Call, Storage, Event, Origin, Config} = 31, CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 32, - DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 33, // Handy utilities. Utility: pallet_utility::{Pallet, Call, Event} = 40, diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/weights/cumulus_pallet_dmp_queue.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/weights/cumulus_pallet_dmp_queue.rs deleted file mode 100644 index cc41dcd6cbb..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/weights/cumulus_pallet_dmp_queue.rs +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (C) 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_dmp_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-10-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=cumulus_pallet_dmp_queue -// --chain=asset-hub-kusama-dev -// --header=./cumulus/file_header.txt -// --output=./cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_dmp_queue`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_dmp_queue::WeightInfo for WeightInfo { - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65696` - // Estimated: `69161` - // Minimum execution time: 124_651_000 picoseconds. - Weight::from_parts(127_857_000, 0) - .saturating_add(Weight::from_parts(0, 69161)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65659` - // Estimated: `69124` - // Minimum execution time: 65_684_000 picoseconds. - Weight::from_parts(68_039_000, 0) - .saturating_add(Weight::from_parts(0, 69124)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_overweight_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65726` - // Estimated: `69191` - // Minimum execution time: 117_657_000 picoseconds. - Weight::from_parts(122_035_000, 0) - .saturating_add(Weight::from_parts(0, 69191)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(6)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - fn on_idle_overweight_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65689` - // Estimated: `69154` - // Minimum execution time: 59_799_000 picoseconds. - Weight::from_parts(61_354_000, 0) - .saturating_add(Weight::from_parts(0, 69154)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/weights/mod.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/weights/mod.rs index 833944ebfa5..ee49c72ea5f 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/weights/mod.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/weights/mod.rs @@ -21,7 +21,6 @@ use ::pallet_bridge_messages::WeightInfoExt as MessagesWeightInfoExt; use ::pallet_bridge_parachains::WeightInfoExt as ParachainsWeightInfoExt; pub mod block_weights; -pub mod cumulus_pallet_dmp_queue; pub mod cumulus_pallet_parachain_system; pub mod cumulus_pallet_xcmp_queue; pub mod extrinsic_weights; diff --git a/cumulus/parachains/runtimes/collectives/collectives-westend/Cargo.toml b/cumulus/parachains/runtimes/collectives/collectives-westend/Cargo.toml index 79d6c697b5f..1801488eeed 100644 --- a/cumulus/parachains/runtimes/collectives/collectives-westend/Cargo.toml +++ b/cumulus/parachains/runtimes/collectives/collectives-westend/Cargo.toml @@ -72,10 +72,7 @@ westend-runtime-constants = { path = "../../../../../polkadot/runtime/westend/co # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } pallet-message-queue = { path = "../../../../../substrate/frame/message-queue", default-features = false } -cumulus-pallet-dmp-queue = { path = "../../../../pallets/dmp-queue", default-features = false } -cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = [ - "parameterized-consensus-hook", -] } +cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = ["parameterized-consensus-hook"] } cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false } cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } @@ -96,7 +93,6 @@ sp-io = { path = "../../../../../substrate/primitives/io", features = ["std"] } [features] default = [ "std" ] runtime-benchmarks = [ - "cumulus-pallet-dmp-queue/runtime-benchmarks", "cumulus-pallet-parachain-system/runtime-benchmarks", "cumulus-pallet-session-benchmarking/runtime-benchmarks", "cumulus-pallet-xcmp-queue/runtime-benchmarks", @@ -133,7 +129,6 @@ 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", @@ -169,7 +164,6 @@ try-runtime = [ std = [ "codec/std", "cumulus-pallet-aura-ext/std", - "cumulus-pallet-dmp-queue/std", "cumulus-pallet-parachain-system/std", "cumulus-pallet-session-benchmarking/std", "cumulus-pallet-xcm/std", diff --git a/cumulus/parachains/runtimes/collectives/collectives-westend/src/lib.rs b/cumulus/parachains/runtimes/collectives/collectives-westend/src/lib.rs index 54cb898fd6c..1017ac30499 100644 --- a/cumulus/parachains/runtimes/collectives/collectives-westend/src/lib.rs +++ b/cumulus/parachains/runtimes/collectives/collectives-westend/src/lib.rs @@ -456,12 +456,6 @@ parameter_types! { pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; } -impl cumulus_pallet_dmp_queue::Config for Runtime { - type WeightInfo = weights::cumulus_pallet_dmp_queue::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type DmpSink = frame_support::traits::EnqueueWithOrigin; -} - pub const PERIOD: u32 = 6 * HOURS; pub const OFFSET: u32 = 0; @@ -651,7 +645,6 @@ construct_runtime!( XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event} = 30, PolkadotXcm: pallet_xcm::{Pallet, Call, Storage, Event, Origin, Config} = 31, CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 32, - DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 33, MessageQueue: pallet_message_queue::{Pallet, Call, Storage, Event} = 34, // Handy utilities. @@ -740,7 +733,6 @@ mod benches { [pallet_collator_selection, CollatorSelection] [cumulus_pallet_parachain_system, ParachainSystem] [cumulus_pallet_xcmp_queue, XcmpQueue] - [cumulus_pallet_dmp_queue, DmpQueue] [pallet_alliance, Alliance] [pallet_collective, AllianceMotion] [pallet_xcm, PalletXcmExtrinsicsBenchmark::] diff --git a/cumulus/parachains/runtimes/collectives/collectives-westend/src/weights/cumulus_pallet_dmp_queue.rs b/cumulus/parachains/runtimes/collectives/collectives-westend/src/weights/cumulus_pallet_dmp_queue.rs deleted file mode 100644 index cc41dcd6cbb..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-westend/src/weights/cumulus_pallet_dmp_queue.rs +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (C) 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_dmp_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-10-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=cumulus_pallet_dmp_queue -// --chain=asset-hub-kusama-dev -// --header=./cumulus/file_header.txt -// --output=./cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_dmp_queue`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_dmp_queue::WeightInfo for WeightInfo { - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65696` - // Estimated: `69161` - // Minimum execution time: 124_651_000 picoseconds. - Weight::from_parts(127_857_000, 0) - .saturating_add(Weight::from_parts(0, 69161)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65659` - // Estimated: `69124` - // Minimum execution time: 65_684_000 picoseconds. - Weight::from_parts(68_039_000, 0) - .saturating_add(Weight::from_parts(0, 69124)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_overweight_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65726` - // Estimated: `69191` - // Minimum execution time: 117_657_000 picoseconds. - Weight::from_parts(122_035_000, 0) - .saturating_add(Weight::from_parts(0, 69191)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(6)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - fn on_idle_overweight_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65689` - // Estimated: `69154` - // Minimum execution time: 59_799_000 picoseconds. - Weight::from_parts(61_354_000, 0) - .saturating_add(Weight::from_parts(0, 69154)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-westend/src/weights/mod.rs b/cumulus/parachains/runtimes/collectives/collectives-westend/src/weights/mod.rs index 1d877fdbd2b..d49a2905e7f 100644 --- a/cumulus/parachains/runtimes/collectives/collectives-westend/src/weights/mod.rs +++ b/cumulus/parachains/runtimes/collectives/collectives-westend/src/weights/mod.rs @@ -14,7 +14,6 @@ // limitations under the License. pub mod block_weights; -pub mod cumulus_pallet_dmp_queue; pub mod cumulus_pallet_parachain_system; pub mod cumulus_pallet_xcmp_queue; pub mod extrinsic_weights; -- GitLab From 1d5d4a484021ede73152bf71af37718fa38bb72b Mon Sep 17 00:00:00 2001 From: Julian Eager Date: Wed, 29 Nov 2023 14:46:10 +0800 Subject: [PATCH 097/102] Enable parallel key scraping (#1985) closes #174 --------- Co-authored-by: Liam Aharon Co-authored-by: Oliver Tale-Yazdi --- .../frame/remote-externalities/src/lib.rs | 193 ++++++++++++++---- 1 file changed, 156 insertions(+), 37 deletions(-) diff --git a/substrate/utils/frame/remote-externalities/src/lib.rs b/substrate/utils/frame/remote-externalities/src/lib.rs index 71e9320ebee..5c7a36867ff 100644 --- a/substrate/utils/frame/remote-externalities/src/lib.rs +++ b/substrate/utils/frame/remote-externalities/src/lib.rs @@ -47,6 +47,7 @@ use std::{ fs, ops::{Deref, DerefMut}, path::{Path, PathBuf}, + sync::Arc, time::{Duration, Instant}, }; use substrate_rpc_client::{rpc_params, BatchRequestBuilder, ChainApi, ClientT, StateApi}; @@ -298,6 +299,7 @@ impl Default for SnapshotConfig { } /// Builder for remote-externalities. +#[derive(Clone)] pub struct Builder { /// Custom key-pairs to be injected into the final externalities. The *hashed* keys and values /// must be given. @@ -400,41 +402,134 @@ where }) } - /// Get all the keys at `prefix` at `hash` using the paged, safe RPC methods. - async fn rpc_get_keys_paged( + /// Get keys with `prefix` at `block` in a parallel manner. + async fn rpc_get_keys_parallel( &self, - prefix: StorageKey, - at: B::Hash, + prefix: &StorageKey, + block: B::Hash, + parallel: usize, + ) -> Result, &'static str> { + /// Divide the workload and return the start key of each chunks. Guaranteed to return a + /// non-empty list. + fn gen_start_keys(prefix: &StorageKey) -> Vec { + let mut prefix = prefix.as_ref().to_vec(); + let scale = 32usize.saturating_sub(prefix.len()); + + // no need to divide workload + if scale < 9 { + prefix.extend(vec![0; scale]); + return vec![StorageKey(prefix)] + } + + let chunks = 16; + let step = 0x10000 / chunks; + let ext = scale - 2; + + (0..chunks) + .map(|i| { + let mut key = prefix.clone(); + let start = i * step; + key.extend(vec![(start >> 8) as u8, (start & 0xff) as u8]); + key.extend(vec![0; ext]); + StorageKey(key) + }) + .collect() + } + + let start_keys = gen_start_keys(&prefix); + let start_keys: Vec> = start_keys.iter().map(Some).collect(); + let mut end_keys: Vec> = start_keys[1..].to_vec(); + end_keys.push(None); + + // use a semaphore to limit max scraping tasks + let parallel = Arc::new(tokio::sync::Semaphore::new(parallel)); + let builder = Arc::new(self.clone()); + let mut handles = vec![]; + + for (start_key, end_key) in start_keys.into_iter().zip(end_keys) { + let permit = parallel + .clone() + .acquire_owned() + .await + .expect("semaphore is not closed until the end of loop"); + + let builder = builder.clone(); + let prefix = prefix.clone(); + let start_key = start_key.cloned(); + let end_key = end_key.cloned(); + + let handle = tokio::spawn(async move { + let res = builder + .rpc_get_keys_in_range(&prefix, block, start_key.as_ref(), end_key.as_ref()) + .await; + drop(permit); + res + }); + + handles.push(handle); + } + + parallel.close(); + + let keys = futures::future::join_all(handles) + .await + .into_iter() + .filter_map(|res| match res { + Ok(Ok(keys)) => Some(keys), + _ => None, + }) + .flatten() + .collect::>(); + + Ok(keys) + } + + /// Get all keys with `prefix` within the given range at `block`. + /// Both `start_key` and `end_key` are optional if you want an open-ended range. + async fn rpc_get_keys_in_range( + &self, + prefix: &StorageKey, + block: B::Hash, + start_key: Option<&StorageKey>, + end_key: Option<&StorageKey>, ) -> Result, &'static str> { - let mut last_key: Option = None; - let mut all_keys: Vec = vec![]; - let keys = loop { + let mut last_key: Option<&StorageKey> = start_key; + let mut keys: Vec = vec![]; + + loop { // This loop can hit the node with very rapid requests, occasionally causing it to // error out in CI (https://github.com/paritytech/substrate/issues/14129), so we retry. let retry_strategy = FixedInterval::new(Self::KEYS_PAGE_RETRY_INTERVAL).take(Self::MAX_RETRIES); let get_page_closure = - || self.get_keys_single_page(Some(prefix.clone()), last_key.clone(), at); - let page = Retry::spawn(retry_strategy, get_page_closure).await?; - let page_len = page.len(); + || self.get_keys_single_page(Some(prefix.clone()), last_key.cloned(), block); + let mut page = Retry::spawn(retry_strategy, get_page_closure).await?; - all_keys.extend(page); + // avoid duplicated keys across workloads + if let (Some(last), Some(end)) = (page.last(), end_key) { + if last >= end { + page.retain(|key| key < end); + } + } + let page_len = page.len(); + keys.extend(page); + last_key = keys.last(); + + // scraping out of range or no more matches, + // we are done either way if page_len < Self::DEFAULT_KEY_DOWNLOAD_PAGE as usize { log::debug!(target: LOG_TARGET, "last page received: {}", page_len); - break all_keys - } else { - let new_last_key = - all_keys.last().expect("all_keys is populated; has .last(); qed"); - log::debug!( - target: LOG_TARGET, - "new total = {}, full page received: {}", - all_keys.len(), - HexDisplay::from(new_last_key) - ); - last_key = Some(new_last_key.clone()); - }; - }; + break + } + + log::debug!( + target: LOG_TARGET, + "new total = {}, full page received: {}", + keys.len(), + HexDisplay::from(last_key.expect("full page received, cannot be None")) + ); + } Ok(keys) } @@ -529,7 +624,7 @@ where "Batch request failed ({}/{} retries). Error: {}", retries, Self::MAX_RETRIES, - e.to_string() + e ); // after 2 subsequent failures something very wrong is happening. log a warning // and reset the batch size down to 1. @@ -590,7 +685,7 @@ where /// map them to values one by one. /// /// This can work with public nodes. But, expect it to be darn slow. - pub(crate) async fn rpc_get_pairs_paged( + pub(crate) async fn rpc_get_pairs( &self, prefix: StorageKey, at: B::Hash, @@ -598,8 +693,10 @@ where ) -> Result, &'static str> { let start = Instant::now(); let mut sp = Spinner::with_timer(Spinners::Dots, "Scraping keys...".into()); + // TODO We could start downloading when having collected the first batch of keys + // https://github.com/paritytech/polkadot-sdk/issues/2494 let keys = self - .rpc_get_keys_paged(prefix.clone(), at) + .rpc_get_keys_parallel(&prefix, at, Self::PARALLEL_REQUESTS) .await? .into_iter() .collect::>(); @@ -628,9 +725,9 @@ where .unwrap() .progress_chars("=>-"), ); - let payloads_chunked = payloads.chunks((&payloads.len() / Self::PARALLEL_REQUESTS).max(1)); + let payloads_chunked = payloads.chunks((payloads.len() / Self::PARALLEL_REQUESTS).max(1)); let requests = payloads_chunked.map(|payload_chunk| { - Self::get_storage_data_dynamic_batch_size(&client, payload_chunk.to_vec(), &bar) + Self::get_storage_data_dynamic_batch_size(client, payload_chunk.to_vec(), &bar) }); // Execute the requests and move the Result outside. let storage_data_result: Result, _> = @@ -644,7 +741,7 @@ where }, }; bar.finish_with_message("✅ Downloaded key values"); - print!("\n"); + println!(); // Check if we got responses for all submitted requests. assert_eq!(keys.len(), storage_data.len()); @@ -778,8 +875,9 @@ where pending_ext: &mut TestExternalities>, ) -> Result { let child_roots = top_kv - .into_iter() - .filter_map(|(k, _)| is_default_child_storage_key(k.as_ref()).then(|| k.clone())) + .iter() + .filter(|(k, _)| is_default_child_storage_key(k.as_ref())) + .map(|(k, _)| k.clone()) .collect::>(); if child_roots.is_empty() { @@ -799,11 +897,10 @@ where let mut child_kv = vec![]; for prefixed_top_key in child_roots { let child_keys = - Self::rpc_child_get_keys(&client, &prefixed_top_key, StorageKey(vec![]), at) - .await?; + Self::rpc_child_get_keys(client, &prefixed_top_key, StorageKey(vec![]), at).await?; let child_kv_inner = - Self::rpc_child_get_storage_paged(&client, &prefixed_top_key, child_keys, at) + Self::rpc_child_get_storage_paged(client, &prefixed_top_key, child_keys, at) .await?; let prefixed_top_key = PrefixedStorageKey::new(prefixed_top_key.clone().0); @@ -846,7 +943,7 @@ where for prefix in &config.hashed_prefixes { let now = std::time::Instant::now(); let additional_key_values = - self.rpc_get_pairs_paged(StorageKey(prefix.to_vec()), at, pending_ext).await?; + self.rpc_get_pairs(StorageKey(prefix.to_vec()), at, pending_ext).await?; let elapsed = now.elapsed(); log::info!( target: LOG_TARGET, @@ -1110,7 +1207,7 @@ mod test_prelude { pub(crate) type Block = RawBlock>; pub(crate) fn init_logger() { - let _ = sp_tracing::try_init_simple(); + sp_tracing::try_init_simple(); } } @@ -1440,4 +1537,26 @@ mod remote_tests { .unwrap() .execute_with(|| {}); } + + #[tokio::test] + async fn can_fetch_in_parallel() { + init_logger(); + + let uri = String::from("wss://kusama-bridge-hub-rpc.polkadot.io:443"); + let mut builder = Builder::::new() + .mode(Mode::Online(OnlineConfig { transport: uri.into(), ..Default::default() })); + builder.init_remote_client().await.unwrap(); + + let at = builder.as_online().at.unwrap(); + + let prefix = StorageKey(vec![13]); + let paged = builder.rpc_get_keys_in_range(&prefix, at, None, None).await.unwrap(); + let para = builder.rpc_get_keys_parallel(&prefix, at, 4).await.unwrap(); + assert_eq!(paged, para); + + let prefix = StorageKey(vec![]); + let paged = builder.rpc_get_keys_in_range(&prefix, at, None, None).await.unwrap(); + let para = builder.rpc_get_keys_parallel(&prefix, at, 8).await.unwrap(); + assert_eq!(paged, para); + } } -- GitLab From 39d6c95c0daa4e42c30836919150a67317f0e408 Mon Sep 17 00:00:00 2001 From: Michal Kucharczyk <1728078+michalkucharczyk@users.noreply.github.com> Date: Wed, 29 Nov 2023 10:30:09 +0100 Subject: [PATCH 098/102] substrate-node: `NativeElseWasmExecutor` is no longer used (#2521) This PR removes `NativeElseWasmExecutor` usage from substrate node. Instead [`WasmExecutor<(sp_io::SubstrateHostFunctions, sp_statement_store::runtime_api::HostFunctions)>`](https://github.com/paritytech/polkadot-sdk/blob/49a41ab3bb3f630c20e5b24cec8d92382404631c/substrate/bin/node/executor/src/lib.rs#L26) is used. Related to #2358. --------- Co-authored-by: Davide Galassi --- Cargo.lock | 57 +++------ Cargo.toml | 1 - .../bin/node-template/node/src/service.rs | 30 +---- substrate/bin/node/cli/Cargo.toml | 40 ++++++- .../bench.rs => cli/benches/executor.rs} | 109 +++++++----------- substrate/bin/node/cli/src/command.rs | 3 +- substrate/bin/node/cli/src/service.rs | 24 +++- .../bin/node/{executor => cli}/tests/basic.rs | 0 .../node/{executor => cli}/tests/common.rs | 9 +- .../bin/node/{executor => cli}/tests/fees.rs | 0 .../tests/res/default_genesis_config.json | 0 .../tests/submit_transaction.rs | 0 substrate/bin/node/executor/Cargo.toml | 57 --------- substrate/bin/node/executor/src/lib.rs | 40 ------- substrate/bin/node/inspect/Cargo.toml | 8 ++ substrate/bin/node/inspect/src/command.rs | 10 +- substrate/bin/node/testing/Cargo.toml | 2 +- substrate/bin/node/testing/src/bench.rs | 14 +-- substrate/bin/node/testing/src/client.rs | 19 ++- 19 files changed, 164 insertions(+), 259 deletions(-) rename substrate/bin/node/{executor/benches/bench.rs => cli/benches/executor.rs} (71%) rename substrate/bin/node/{executor => cli}/tests/basic.rs (100%) rename substrate/bin/node/{executor => cli}/tests/common.rs (95%) rename substrate/bin/node/{executor => cli}/tests/fees.rs (100%) rename substrate/bin/node/{executor => cli}/tests/res/default_genesis_config.json (100%) rename substrate/bin/node/{executor => cli}/tests/submit_transaction.rs (100%) delete mode 100644 substrate/bin/node/executor/Cargo.toml delete mode 100644 substrate/bin/node/executor/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 871d46ea844..bf4efa60ad7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8928,7 +8928,7 @@ dependencies = [ "sp-keyring", "sp-runtime", "sp-timestamp", - "staging-node-executor", + "staging-node-cli", "substrate-test-client", "tempfile", ] @@ -18358,7 +18358,9 @@ dependencies = [ "clap 4.4.6", "clap_complete", "criterion 0.4.0", + "frame-benchmarking", "frame-benchmarking-cli", + "frame-support", "frame-system", "frame-system-rpc-runtime-api", "futures", @@ -18368,13 +18370,20 @@ dependencies = [ "nix 0.26.2", "node-primitives", "node-rpc", + "node-testing", "pallet-asset-conversion-tx-payment", "pallet-asset-tx-payment", "pallet-assets", "pallet-balances", + "pallet-contracts", + "pallet-glutton", "pallet-im-online", + "pallet-root-testing", "pallet-skip-feeless-payment", + "pallet-sudo", "pallet-timestamp", + "pallet-transaction-payment", + "pallet-treasury", "parity-scale-codec", "platforms", "rand 0.8.5", @@ -18409,27 +18418,31 @@ dependencies = [ "sc-telemetry", "sc-transaction-pool", "sc-transaction-pool-api", + "scale-info", "serde", "serde_json", "soketto", "sp-api", + "sp-application-crypto", "sp-authority-discovery", "sp-blockchain", "sp-consensus", "sp-consensus-babe", "sp-consensus-grandpa", "sp-core", + "sp-externalities 0.19.0", "sp-inherents", "sp-io", "sp-keyring", "sp-keystore", "sp-mixnet", "sp-runtime", + "sp-state-machine", "sp-statement-store", "sp-timestamp", "sp-tracing 10.0.0", "sp-transaction-storage-proof", - "staging-node-executor", + "sp-trie", "staging-node-inspect", "substrate-build-script-utils", "substrate-cli-test-utils", @@ -18440,44 +18453,6 @@ dependencies = [ "tokio-util", "try-runtime-cli", "wait-timeout", -] - -[[package]] -name = "staging-node-executor" -version = "3.0.0-dev" -dependencies = [ - "criterion 0.4.0", - "frame-benchmarking", - "frame-support", - "frame-system", - "futures", - "kitchensink-runtime", - "node-primitives", - "node-testing", - "pallet-balances", - "pallet-contracts", - "pallet-glutton", - "pallet-im-online", - "pallet-root-testing", - "pallet-sudo", - "pallet-timestamp", - "pallet-transaction-payment", - "pallet-treasury", - "parity-scale-codec", - "sc-executor", - "scale-info", - "serde_json", - "sp-application-crypto", - "sp-consensus-babe", - "sp-core", - "sp-externalities 0.19.0", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "sp-state-machine", - "sp-statement-store", - "sp-tracing 10.0.0", - "sp-trie", "wat", ] @@ -18492,7 +18467,9 @@ dependencies = [ "sc-service", "sp-blockchain", "sp-core", + "sp-io", "sp-runtime", + "sp-statement-store", "thiserror", ] diff --git a/Cargo.toml b/Cargo.toml index 6af3ea4c3cb..f16c8393183 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -200,7 +200,6 @@ members = [ "substrate/bin/node-template/runtime", "substrate/bin/node/bench", "substrate/bin/node/cli", - "substrate/bin/node/executor", "substrate/bin/node/inspect", "substrate/bin/node/primitives", "substrate/bin/node/rpc", diff --git a/substrate/bin/node-template/node/src/service.rs b/substrate/bin/node-template/node/src/service.rs index e69428d8190..c4a2b2f39d2 100644 --- a/substrate/bin/node-template/node/src/service.rs +++ b/substrate/bin/node-template/node/src/service.rs @@ -5,35 +5,17 @@ use node_template_runtime::{self, opaque::Block, RuntimeApi}; use sc_client_api::{Backend, BlockBackend}; use sc_consensus_aura::{ImportQueueParams, SlotProportion, StartAuraParams}; use sc_consensus_grandpa::SharedVoterState; -pub use sc_executor::NativeElseWasmExecutor; use sc_service::{error::Error as ServiceError, Configuration, TaskManager, WarpSyncParams}; use sc_telemetry::{Telemetry, TelemetryWorker}; use sc_transaction_pool_api::OffchainTransactionPoolFactory; use sp_consensus_aura::sr25519::AuthorityPair as AuraPair; use std::{sync::Arc, time::Duration}; -// Our native executor instance. -pub struct ExecutorDispatch; - -impl sc_executor::NativeExecutionDispatch for ExecutorDispatch { - /// Only enable the benchmarking host functions when we actually want to benchmark. - #[cfg(feature = "runtime-benchmarks")] - type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; - /// Otherwise we only use the default Substrate host functions. - #[cfg(not(feature = "runtime-benchmarks"))] - type ExtendHostFunctions = (); - - fn dispatch(method: &str, data: &[u8]) -> Option> { - node_template_runtime::api::dispatch(method, data) - } - - fn native_version() -> sc_executor::NativeVersion { - node_template_runtime::native_version() - } -} - -pub(crate) type FullClient = - sc_service::TFullClient>; +pub(crate) type FullClient = sc_service::TFullClient< + Block, + RuntimeApi, + sc_executor::WasmExecutor, +>; type FullBackend = sc_service::TFullBackend; type FullSelectChain = sc_consensus::LongestChain; @@ -75,7 +57,7 @@ pub fn new_partial( }) .transpose()?; - let executor = sc_service::new_native_or_wasm_executor(config); + let executor = sc_service::new_wasm_executor::(config); let (client, backend, keystore_container, task_manager) = sc_service::new_full_parts::( config, diff --git a/substrate/bin/node/cli/Cargo.toml b/substrate/bin/node/cli/Cargo.toml index 8f3c2185deb..656d6f86505 100644 --- a/substrate/bin/node/cli/Cargo.toml +++ b/substrate/bin/node/cli/Cargo.toml @@ -90,6 +90,7 @@ sc-storage-monitor = { path = "../../../client/storage-monitor" } sc-offchain = { path = "../../../client/offchain" } # frame dependencies +frame-benchmarking = { path = "../../../frame/benchmarking" } frame-system = { path = "../../../frame/system" } frame-system-rpc-runtime-api = { path = "../../../frame/system/rpc/runtime-api" } pallet-assets = { path = "../../../frame/assets" } @@ -102,7 +103,6 @@ pallet-skip-feeless-payment = { path = "../../../frame/transaction-payment/skip- kitchensink-runtime = { path = "../runtime" } node-rpc = { path = "../rpc" } node-primitives = { path = "../primitives" } -node-executor = { package = "staging-node-executor", path = "../executor" } # CLI-specific dependencies sc-cli = { path = "../../../client/cli", optional = true} @@ -136,6 +136,26 @@ substrate-rpc-client = { path = "../../../utils/frame/rpc/client" } pallet-timestamp = { path = "../../../frame/timestamp" } substrate-cli-test-utils = { path = "../../../test-utils/cli" } +wat = "1.0" +frame-support = { path = "../../../frame/support" } +node-testing = { path = "../testing" } +pallet-balances = { path = "../../../frame/balances" } +pallet-contracts = { path = "../../../frame/contracts" } +pallet-glutton = { path = "../../../frame/glutton" } +pallet-sudo = { path = "../../../frame/sudo" } +pallet-treasury = { path = "../../../frame/treasury" } +pallet-transaction-payment = { path = "../../../frame/transaction-payment" } +sp-application-crypto = { path = "../../../primitives/application-crypto" } +pallet-root-testing = { path = "../../../frame/root-testing" } +sp-consensus-babe = { path = "../../../primitives/consensus/babe" } +sp-externalities = { path = "../../../primitives/externalities" } +sp-keyring = { path = "../../../primitives/keyring" } +sp-runtime = { path = "../../../primitives/runtime" } +serde_json = "1.0.108" +scale-info = { version = "2.10.0", features = ["derive", "serde"] } +sp-trie = { path = "../../../primitives/trie" } +sp-state-machine = { path = "../../../primitives/state-machine" } + [build-dependencies] clap = { version = "4.4.6", optional = true } clap_complete = { version = "4.0.2", optional = true } @@ -163,14 +183,21 @@ cli = [ ] runtime-benchmarks = [ "frame-benchmarking-cli/runtime-benchmarks", + "frame-benchmarking/runtime-benchmarks", + "frame-support/runtime-benchmarks", "frame-system/runtime-benchmarks", "kitchensink-runtime/runtime-benchmarks", + "node-inspect?/runtime-benchmarks", "pallet-asset-tx-payment/runtime-benchmarks", "pallet-assets/runtime-benchmarks", "pallet-balances/runtime-benchmarks", + "pallet-contracts/runtime-benchmarks", + "pallet-glutton/runtime-benchmarks", "pallet-im-online/runtime-benchmarks", "pallet-skip-feeless-payment/runtime-benchmarks", + "pallet-sudo/runtime-benchmarks", "pallet-timestamp/runtime-benchmarks", + "pallet-treasury/runtime-benchmarks", "sc-client-db/runtime-benchmarks", "sc-service/runtime-benchmarks", "sp-runtime/runtime-benchmarks", @@ -178,15 +205,22 @@ runtime-benchmarks = [ # Enable features that allow the runtime to be tried and debugged. Name might be subject to change # in the near future. try-runtime = [ + "frame-support/try-runtime", "frame-system/try-runtime", "kitchensink-runtime/try-runtime", "pallet-asset-conversion-tx-payment/try-runtime", "pallet-asset-tx-payment/try-runtime", "pallet-assets/try-runtime", "pallet-balances/try-runtime", + "pallet-contracts/try-runtime", + "pallet-glutton/try-runtime", "pallet-im-online/try-runtime", + "pallet-root-testing/try-runtime", "pallet-skip-feeless-payment/try-runtime", + "pallet-sudo/try-runtime", "pallet-timestamp/try-runtime", + "pallet-transaction-payment/try-runtime", + "pallet-treasury/try-runtime", "sp-runtime/try-runtime", "substrate-cli-test-utils/try-runtime", "try-runtime-cli/try-runtime", @@ -199,3 +233,7 @@ harness = false [[bench]] name = "block_production" harness = false + +[[bench]] +name = "executor" +harness = false diff --git a/substrate/bin/node/executor/benches/bench.rs b/substrate/bin/node/cli/benches/executor.rs similarity index 71% rename from substrate/bin/node/executor/benches/bench.rs rename to substrate/bin/node/cli/benches/executor.rs index 587e76af867..d654646904b 100644 --- a/substrate/bin/node/executor/benches/bench.rs +++ b/substrate/bin/node/cli/benches/executor.rs @@ -22,20 +22,16 @@ use kitchensink_runtime::{ constants::currency::*, Block, BuildStorage, CheckedExtrinsic, Header, RuntimeCall, RuntimeGenesisConfig, UncheckedExtrinsic, }; -use node_executor::ExecutorDispatch; use node_primitives::{BlockNumber, Hash}; use node_testing::keyring::*; -use sc_executor::{ - Externalities, NativeElseWasmExecutor, RuntimeVersionOf, WasmExecutionMethod, WasmExecutor, - WasmtimeInstantiationStrategy, -}; +use sc_executor::{Externalities, RuntimeVersionOf}; use sp_core::{ storage::well_known_keys, traits::{CallContext, CodeExecutor, RuntimeCode}, }; use sp_runtime::traits::BlakeTwo256; use sp_state_machine::TestExternalities as CoreTestExternalities; -use staging_node_executor as node_executor; +use staging_node_cli::service::RuntimeExecutor; criterion_group!(benches, bench_execute_block); criterion_main!(benches); @@ -58,12 +54,6 @@ const HEAP_PAGES: u64 = 20; type TestExternalities = CoreTestExternalities; -#[derive(Debug)] -enum ExecutionMethod { - Native, - Wasm(WasmExecutionMethod), -} - fn sign(xt: CheckedExtrinsic) -> UncheckedExtrinsic { node_testing::keyring::sign(xt, SPEC_VERSION, TRANSACTION_VERSION, GENESIS_HASH) } @@ -80,7 +70,7 @@ fn new_test_ext(genesis_config: &RuntimeGenesisConfig) -> TestExternalities( - executor: &NativeElseWasmExecutor, + executor: &RuntimeExecutor, ext: &mut E, number: BlockNumber, parent_hash: Hash, @@ -159,7 +149,7 @@ fn construct_block( fn test_blocks( genesis_config: &RuntimeGenesisConfig, - executor: &NativeElseWasmExecutor, + executor: &RuntimeExecutor, ) -> Vec<(Vec, Hash)> { let mut test_ext = new_test_ext(genesis_config); let mut block1_extrinsics = vec![CheckedExtrinsic { @@ -181,56 +171,43 @@ fn test_blocks( fn bench_execute_block(c: &mut Criterion) { let mut group = c.benchmark_group("execute blocks"); - let execution_methods = vec![ - ExecutionMethod::Native, - ExecutionMethod::Wasm(WasmExecutionMethod::Compiled { - instantiation_strategy: WasmtimeInstantiationStrategy::PoolingCopyOnWrite, - }), - ]; - - for strategy in execution_methods { - group.bench_function(format!("{:?}", strategy), |b| { - let genesis_config = node_testing::genesis::config(); - let use_native = match strategy { - ExecutionMethod::Native => true, - ExecutionMethod::Wasm(..) => false, - }; - - let executor = - NativeElseWasmExecutor::new_with_wasm_executor(WasmExecutor::builder().build()); - let runtime_code = RuntimeCode { - code_fetcher: &sp_core::traits::WrappedRuntimeCode(compact_code_unwrap().into()), - hash: vec![1, 2, 3], - heap_pages: None, - }; - - // Get the runtime version to initialize the runtimes cache. - { - let mut test_ext = new_test_ext(&genesis_config); - executor.runtime_version(&mut test_ext.ext(), &runtime_code).unwrap(); - } - - let blocks = test_blocks(&genesis_config, &executor); - - b.iter_batched_ref( - || new_test_ext(&genesis_config), - |test_ext| { - for block in blocks.iter() { - executor - .call( - &mut test_ext.ext(), - &runtime_code, - "Core_execute_block", - &block.0, - use_native, - CallContext::Offchain, - ) - .0 - .unwrap(); - } - }, - BatchSize::LargeInput, - ); - }); - } + + group.bench_function("wasm", |b| { + let genesis_config = node_testing::genesis::config(); + + let executor = RuntimeExecutor::builder().build(); + let runtime_code = RuntimeCode { + code_fetcher: &sp_core::traits::WrappedRuntimeCode(compact_code_unwrap().into()), + hash: vec![1, 2, 3], + heap_pages: None, + }; + + // Get the runtime version to initialize the runtimes cache. + { + let mut test_ext = new_test_ext(&genesis_config); + executor.runtime_version(&mut test_ext.ext(), &runtime_code).unwrap(); + } + + let blocks = test_blocks(&genesis_config, &executor); + + b.iter_batched_ref( + || new_test_ext(&genesis_config), + |test_ext| { + for block in blocks.iter() { + executor + .call( + &mut test_ext.ext(), + &runtime_code, + "Core_execute_block", + &block.0, + false, + CallContext::Offchain, + ) + .0 + .unwrap(); + } + }, + BatchSize::LargeInput, + ); + }); } diff --git a/substrate/bin/node/cli/src/command.rs b/substrate/bin/node/cli/src/command.rs index 16d0415ff26..dc28705c2ae 100644 --- a/substrate/bin/node/cli/src/command.rs +++ b/substrate/bin/node/cli/src/command.rs @@ -24,7 +24,6 @@ use crate::{ }; use frame_benchmarking_cli::*; use kitchensink_runtime::{ExistentialDeposit, RuntimeApi}; -use node_executor::ExecutorDispatch; use node_primitives::Block; use sc_cli::{Result, SubstrateCli}; use sc_service::PartialComponents; @@ -89,7 +88,7 @@ pub fn run() -> Result<()> { Some(Subcommand::Inspect(cmd)) => { let runner = cli.create_runner(cmd)?; - runner.sync_run(|config| cmd.run::(config)) + runner.sync_run(|config| cmd.run::(config)) }, Some(Subcommand::Benchmark(cmd)) => { let runner = cli.create_runner(cmd)?; diff --git a/substrate/bin/node/cli/src/service.rs b/substrate/bin/node/cli/src/service.rs index a746de8de84..4f8c6198cdc 100644 --- a/substrate/bin/node/cli/src/service.rs +++ b/substrate/bin/node/cli/src/service.rs @@ -26,11 +26,9 @@ use frame_benchmarking_cli::SUBSTRATE_REFERENCE_HARDWARE; use frame_system_rpc_runtime_api::AccountNonceApi; use futures::prelude::*; use kitchensink_runtime::RuntimeApi; -use node_executor::ExecutorDispatch; use node_primitives::Block; use sc_client_api::{Backend, BlockBackend}; use sc_consensus_babe::{self, SlotProportion}; -use sc_executor::NativeElseWasmExecutor; use sc_network::{event::Event, NetworkEventStream, NetworkService}; use sc_network_sync::{warp::WarpSyncParams, SyncingService}; use sc_service::{config::Configuration, error::Error as ServiceError, RpcHandlers, TaskManager}; @@ -42,9 +40,25 @@ use sp_core::crypto::Pair; use sp_runtime::{generic, traits::Block as BlockT, SaturatedConversion}; use std::sync::Arc; +/// Host functions required for kitchensink runtime and Substrate node. +#[cfg(not(feature = "runtime-benchmarks"))] +pub type HostFunctions = + (sp_io::SubstrateHostFunctions, sp_statement_store::runtime_api::HostFunctions); + +/// Host functions required for kitchensink runtime and Substrate node. +#[cfg(feature = "runtime-benchmarks")] +pub type HostFunctions = ( + sp_io::SubstrateHostFunctions, + sp_statement_store::runtime_api::HostFunctions, + frame_benchmarking::benchmarking::HostFunctions, +); + +/// A specialized `WasmExecutor` intended to use accross substrate node. It provides all required +/// HostFunctions. +pub type RuntimeExecutor = sc_executor::WasmExecutor; + /// The full client type definition. -pub type FullClient = - sc_service::TFullClient>; +pub type FullClient = sc_service::TFullClient; type FullBackend = sc_service::TFullBackend; type FullSelectChain = sc_consensus::LongestChain; type FullGrandpaBlockImport = @@ -174,7 +188,7 @@ pub fn new_partial( }) .transpose()?; - let executor = sc_service::new_native_or_wasm_executor(&config); + let executor = sc_service::new_wasm_executor(&config); let (client, backend, keystore_container, task_manager) = sc_service::new_full_parts::( diff --git a/substrate/bin/node/executor/tests/basic.rs b/substrate/bin/node/cli/tests/basic.rs similarity index 100% rename from substrate/bin/node/executor/tests/basic.rs rename to substrate/bin/node/cli/tests/basic.rs diff --git a/substrate/bin/node/executor/tests/common.rs b/substrate/bin/node/cli/tests/common.rs similarity index 95% rename from substrate/bin/node/executor/tests/common.rs rename to substrate/bin/node/cli/tests/common.rs index 2d68c88db92..7d8f6a9a0e7 100644 --- a/substrate/bin/node/executor/tests/common.rs +++ b/substrate/bin/node/cli/tests/common.rs @@ -18,7 +18,7 @@ use codec::{Decode, Encode}; use frame_support::Hashable; use frame_system::offchain::AppCrypto; -use sc_executor::{error::Result, NativeElseWasmExecutor, WasmExecutor}; +use sc_executor::error::Result; use sp_consensus_babe::{ digests::{PreDigest, SecondaryPlainPreDigest}, Slot, BABE_ENGINE_ID, @@ -38,11 +38,10 @@ use kitchensink_runtime::{ constants::currency::*, Block, BuildStorage, CheckedExtrinsic, Header, Runtime, UncheckedExtrinsic, }; -use node_executor::ExecutorDispatch; use node_primitives::{BlockNumber, Hash}; use node_testing::keyring::*; use sp_externalities::Externalities; -use staging_node_executor as node_executor; +use staging_node_cli::service::RuntimeExecutor; pub const TEST_KEY_TYPE_ID: KeyTypeId = KeyTypeId(*b"test"); @@ -98,8 +97,8 @@ pub fn from_block_number(n: u32) -> Header { Header::new(n, Default::default(), Default::default(), [69; 32].into(), Default::default()) } -pub fn executor() -> NativeElseWasmExecutor { - NativeElseWasmExecutor::new_with_wasm_executor(WasmExecutor::builder().build()) +pub fn executor() -> RuntimeExecutor { + RuntimeExecutor::builder().build() } pub fn executor_call( diff --git a/substrate/bin/node/executor/tests/fees.rs b/substrate/bin/node/cli/tests/fees.rs similarity index 100% rename from substrate/bin/node/executor/tests/fees.rs rename to substrate/bin/node/cli/tests/fees.rs diff --git a/substrate/bin/node/executor/tests/res/default_genesis_config.json b/substrate/bin/node/cli/tests/res/default_genesis_config.json similarity index 100% rename from substrate/bin/node/executor/tests/res/default_genesis_config.json rename to substrate/bin/node/cli/tests/res/default_genesis_config.json diff --git a/substrate/bin/node/executor/tests/submit_transaction.rs b/substrate/bin/node/cli/tests/submit_transaction.rs similarity index 100% rename from substrate/bin/node/executor/tests/submit_transaction.rs rename to substrate/bin/node/cli/tests/submit_transaction.rs diff --git a/substrate/bin/node/executor/Cargo.toml b/substrate/bin/node/executor/Cargo.toml deleted file mode 100644 index 595a313d2cb..00000000000 --- a/substrate/bin/node/executor/Cargo.toml +++ /dev/null @@ -1,57 +0,0 @@ -[package] -name = "staging-node-executor" -version = "3.0.0-dev" -authors.workspace = true -description = "Substrate node implementation in Rust." -edition.workspace = true -license = "Apache-2.0" -homepage = "https://substrate.io" -repository.workspace = true -publish = false - -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] - -[dependencies] -codec = { package = "parity-scale-codec", version = "3.6.1" } -scale-info = { version = "2.10.0", features = ["derive", "serde"] } -frame-benchmarking = { path = "../../../frame/benchmarking" } -node-primitives = { path = "../primitives" } -kitchensink-runtime = { path = "../runtime" } -sc-executor = { path = "../../../client/executor" } -sp-core = { path = "../../../primitives/core", features=["serde"] } -sp-keystore = { path = "../../../primitives/keystore" } -sp-state-machine = { path = "../../../primitives/state-machine" } -sp-tracing = { path = "../../../primitives/tracing" } -sp-trie = { path = "../../../primitives/trie" } -sp-statement-store = { path = "../../../primitives/statement-store", features=["serde"] } - -[dev-dependencies] -criterion = "0.4.0" -futures = "0.3.21" -wat = "1.0" -frame-support = { path = "../../../frame/support" } -frame-system = { path = "../../../frame/system" } -node-testing = { path = "../testing" } -pallet-balances = { path = "../../../frame/balances" } -pallet-contracts = { path = "../../../frame/contracts" } -pallet-im-online = { path = "../../../frame/im-online" } -pallet-glutton = { path = "../../../frame/glutton" } -pallet-sudo = { path = "../../../frame/sudo" } -pallet-timestamp = { path = "../../../frame/timestamp" } -pallet-treasury = { path = "../../../frame/treasury" } -pallet-transaction-payment = { path = "../../../frame/transaction-payment" } -sp-application-crypto = { path = "../../../primitives/application-crypto" } -pallet-root-testing = { path = "../../../frame/root-testing" } -sp-consensus-babe = { path = "../../../primitives/consensus/babe" } -sp-externalities = { path = "../../../primitives/externalities" } -sp-keyring = { path = "../../../primitives/keyring" } -sp-runtime = { path = "../../../primitives/runtime" } -serde_json = "1.0.108" - -[features] -stress-test = [] - -[[bench]] -name = "bench" -harness = false diff --git a/substrate/bin/node/executor/src/lib.rs b/substrate/bin/node/executor/src/lib.rs deleted file mode 100644 index 3557a16740b..00000000000 --- a/substrate/bin/node/executor/src/lib.rs +++ /dev/null @@ -1,40 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! A `CodeExecutor` specialization which uses natively compiled runtime when the wasm to be -//! executed is equivalent to the natively compiled code. - -pub use sc_executor::NativeElseWasmExecutor; - -// Declare an instance of the native executor named `ExecutorDispatch`. Include the wasm binary as -// the equivalent wasm code. -pub struct ExecutorDispatch; - -impl sc_executor::NativeExecutionDispatch for ExecutorDispatch { - type ExtendHostFunctions = ( - frame_benchmarking::benchmarking::HostFunctions, - sp_statement_store::runtime_api::HostFunctions, - ); - - fn dispatch(method: &str, data: &[u8]) -> Option> { - kitchensink_runtime::api::dispatch(method, data) - } - - fn native_version() -> sc_executor::NativeVersion { - kitchensink_runtime::native_version() - } -} diff --git a/substrate/bin/node/inspect/Cargo.toml b/substrate/bin/node/inspect/Cargo.toml index 30cc22b0e8c..cfdec6af5de 100644 --- a/substrate/bin/node/inspect/Cargo.toml +++ b/substrate/bin/node/inspect/Cargo.toml @@ -20,4 +20,12 @@ sc-client-api = { path = "../../../client/api" } sc-service = { path = "../../../client/service", default-features = false} sp-blockchain = { path = "../../../primitives/blockchain" } sp-core = { path = "../../../primitives/core" } +sp-io = { path = "../../../primitives/io" } sp-runtime = { path = "../../../primitives/runtime" } +sp-statement-store = { path = "../../../primitives/statement-store" } + +[features] +runtime-benchmarks = [ + "sc-service/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", +] diff --git a/substrate/bin/node/inspect/src/command.rs b/substrate/bin/node/inspect/src/command.rs index dcecfd78826..e0e25707e31 100644 --- a/substrate/bin/node/inspect/src/command.rs +++ b/substrate/bin/node/inspect/src/command.rs @@ -23,18 +23,20 @@ use crate::{ Inspector, }; use sc_cli::{CliConfiguration, ImportParams, Result, SharedParams}; -use sc_service::{Configuration, NativeExecutionDispatch}; +use sc_service::Configuration; use sp_runtime::traits::Block; +type HostFunctions = + (sp_io::SubstrateHostFunctions, sp_statement_store::runtime_api::HostFunctions); + impl InspectCmd { /// Run the inspect command, passing the inspector. - pub fn run(&self, config: Configuration) -> Result<()> + pub fn run(&self, config: Configuration) -> Result<()> where B: Block, RA: Send + Sync + 'static, - D: NativeExecutionDispatch + 'static, { - let executor = sc_service::new_native_or_wasm_executor::(&config); + let executor = sc_service::new_wasm_executor::(&config); let client = sc_service::new_full_client::(&config, None, executor)?; let inspect = Inspector::::new(client); diff --git a/substrate/bin/node/testing/Cargo.toml b/substrate/bin/node/testing/Cargo.toml index e4fb06b5dcd..dba5016fb3e 100644 --- a/substrate/bin/node/testing/Cargo.toml +++ b/substrate/bin/node/testing/Cargo.toml @@ -19,7 +19,7 @@ futures = "0.3.21" log = "0.4.17" tempfile = "3.1.0" frame-system = { path = "../../../frame/system" } -node-executor = { package = "staging-node-executor", path = "../executor" } +node-cli = { package = "staging-node-cli", path = "../cli" } node-primitives = { path = "../primitives" } kitchensink-runtime = { path = "../runtime" } pallet-asset-conversion = { path = "../../../frame/asset-conversion" } diff --git a/substrate/bin/node/testing/src/bench.rs b/substrate/bin/node/testing/src/bench.rs index 89b96c0191c..98d3b968a35 100644 --- a/substrate/bin/node/testing/src/bench.rs +++ b/substrate/bin/node/testing/src/bench.rs @@ -43,7 +43,7 @@ use sc_block_builder::BlockBuilderBuilder; use sc_client_api::{execution_extensions::ExecutionExtensions, UsageProvider}; use sc_client_db::PruningMode; use sc_consensus::{BlockImport, BlockImportParams, ForkChoiceStrategy, ImportResult, ImportedAux}; -use sc_executor::{NativeElseWasmExecutor, WasmExecutionMethod, WasmtimeInstantiationStrategy}; +use sc_executor::{WasmExecutionMethod, WasmtimeInstantiationStrategy}; use sp_api::ProvideRuntimeApi; use sp_block_builder::BlockBuilder; use sp_consensus::BlockOrigin; @@ -388,13 +388,11 @@ impl BenchDb { let task_executor = TaskExecutor::new(); let backend = sc_service::new_db_backend(db_config).expect("Should not fail"); - let executor = NativeElseWasmExecutor::new_with_wasm_executor( - sc_executor::WasmExecutor::builder() - .with_execution_method(WasmExecutionMethod::Compiled { - instantiation_strategy: WasmtimeInstantiationStrategy::PoolingCopyOnWrite, - }) - .build(), - ); + let executor = sc_executor::WasmExecutor::builder() + .with_execution_method(WasmExecutionMethod::Compiled { + instantiation_strategy: WasmtimeInstantiationStrategy::PoolingCopyOnWrite, + }) + .build(); let client_config = sc_service::ClientConfig::default(); let genesis_block_builder = sc_service::GenesisBlockBuilder::new( diff --git a/substrate/bin/node/testing/src/client.rs b/substrate/bin/node/testing/src/client.rs index 22276833fb6..07ba1cdbbfb 100644 --- a/substrate/bin/node/testing/src/client.rs +++ b/substrate/bin/node/testing/src/client.rs @@ -23,7 +23,7 @@ use sp_runtime::BuildStorage; pub use substrate_test_client::*; /// Call executor for `kitchensink-runtime` `TestClient`. -pub type ExecutorDispatch = sc_executor::NativeElseWasmExecutor; +use node_cli::service::RuntimeExecutor; /// Default backend type. pub type Backend = sc_client_db::Backend; @@ -31,7 +31,7 @@ pub type Backend = sc_client_db::Backend; /// Test client type. pub type Client = client::Client< Backend, - client::LocalCallExecutor, + client::LocalCallExecutor, node_primitives::Block, kitchensink_runtime::RuntimeApi, >; @@ -63,7 +63,7 @@ pub trait TestClientBuilderExt: Sized { impl TestClientBuilderExt for substrate_test_client::TestClientBuilder< node_primitives::Block, - client::LocalCallExecutor, + client::LocalCallExecutor, Backend, GenesisParameters, > @@ -71,8 +71,17 @@ impl TestClientBuilderExt fn new() -> Self { Self::default() } - fn build(self) -> Client { - self.build_with_native_executor(None).0 + let executor = RuntimeExecutor::builder().build(); + use sc_service::client::LocalCallExecutor; + use std::sync::Arc; + let executor = LocalCallExecutor::new( + self.backend().clone(), + executor.clone(), + Default::default(), + ExecutionExtensions::new(None, Arc::new(executor)), + ) + .expect("Creates LocalCallExecutor"); + self.build_with_executor(executor).0 } } -- GitLab From 8dea375cf16d44037982872ffaa283d6769a9945 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=B3nal=20Murray?= Date: Wed, 29 Nov 2023 11:06:00 +0000 Subject: [PATCH 099/102] Add westend local and dev chainspecs --- .../src/chain_spec/coretime.rs | 107 +++++++++++++++++- cumulus/polkadot-parachain/src/command.rs | 22 ++-- 2 files changed, 119 insertions(+), 10 deletions(-) diff --git a/cumulus/polkadot-parachain/src/chain_spec/coretime.rs b/cumulus/polkadot-parachain/src/chain_spec/coretime.rs index 0bcd9a63ed6..ebd34ad3cc5 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/coretime.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/coretime.rs @@ -28,7 +28,12 @@ pub enum CoretimeRuntimeType { // Benchmarks RococoDevelopment, + // Live Westend, + // Local + WestendLocal, + // Benchmarks + WestendDevelopment, } impl FromStr for CoretimeRuntimeType { @@ -40,6 +45,8 @@ impl FromStr for CoretimeRuntimeType { rococo::CORETIME_ROCOCO_LOCAL => Ok(CoretimeRuntimeType::RococoLocal), rococo::CORETIME_ROCOCO_DEVELOPMENT => Ok(CoretimeRuntimeType::RococoDevelopment), westend::CORETIME_WESTEND => Ok(CoretimeRuntimeType::Westend), + westend::CORETIME_WESTEND_LOCAL => Ok(CoretimeRuntimeType::WestendLocal), + westend::CORETIME_WESTEND_DEVELOPMENT => Ok(CoretimeRuntimeType::WestendDevelopment), _ => Err(format!("Value '{}' is not configured yet", value)), } } @@ -54,7 +61,9 @@ impl CoretimeRuntimeType { CoretimeRuntimeType::RococoLocal | CoretimeRuntimeType::RococoDevelopment => Ok(Box::new(rococo::CoretimeChainSpec::from_json_file(path)?)), - CoretimeRuntimeType::Westend => + CoretimeRuntimeType::Westend | + CoretimeRuntimeType::WestendLocal | + CoretimeRuntimeType::WestendDevelopment => Ok(Box::new(westend::CoretimeChainSpec::from_json_file(path)?)), } } @@ -81,6 +90,18 @@ impl CoretimeRuntimeType { Ok(Box::new(westend::CoretimeChainSpec::from_json_bytes( &include_bytes!("../../../parachains/chain-specs/coretime-westend.json")[..], )?)), + CoretimeRuntimeType::WestendLocal => Ok(Box::new(westend::local_config( + westend::CORETIME_WESTEND_DEVELOPMENT, + "Westend Coretime Local", + "westend-local", + ParaId::new(1005), + ))), + CoretimeRuntimeType::WestendDevelopment => Ok(Box::new(westend::local_config( + westend::CORETIME_WESTEND_DEVELOPMENT, + "Westend Coretime Development", + "westend-dev", + ParaId::new(1005), + ))), } } } @@ -192,10 +213,92 @@ pub mod rococo { /// Sub-module for Westend setup. pub mod westend { - use crate::chain_spec::Extensions; + use super::ParaId; + use crate::chain_spec::{ + get_account_id_from_seed, get_collator_keys_from_seed, Extensions, SAFE_XCM_VERSION, + }; + use parachains_common::{AccountId, AuraId, Balance}; + use sc_chain_spec::ChainType; + use sp_core::sr25519; pub(crate) const CORETIME_WESTEND: &str = "coretime-westend"; + pub(crate) const CORETIME_WESTEND_LOCAL: &str = "coretime-westend-local"; + pub(crate) const CORETIME_WESTEND_DEVELOPMENT: &str = "coretime-westend-dev"; + const CORETIME_WESTEND_ED: Balance = parachains_common::westend::currency::EXISTENTIAL_DEPOSIT; + pub type CoretimeChainSpec = sc_service::GenericChainSpec; pub type RuntimeApi = coretime_westend_runtime::RuntimeApi; + + pub fn local_config( + id: &str, + chain_name: &str, + relay_chain: &str, + para_id: ParaId, + ) -> CoretimeChainSpec { + // westend defaults + let mut properties = sc_chain_spec::Properties::new(); + properties.insert("ss58Format".into(), 42.into()); + properties.insert("tokenSymbol".into(), "ROC".into()); + properties.insert("tokenDecimals".into(), 12.into()); + + CoretimeChainSpec::builder( + coretime_westend_runtime::WASM_BINARY + .expect("WASM binary was not built, please build it!"), + Extensions { relay_chain: relay_chain.to_string(), para_id: para_id.into() }, + ) + .with_name(chain_name) + .with_id(super::ensure_id(id).expect("invalid id")) + .with_chain_type(ChainType::Local) + .with_genesis_config_patch(genesis( + // initial collators. + vec![( + get_account_id_from_seed::("Alice"), + get_collator_keys_from_seed::("Alice"), + )], + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Alice//stash"), + get_account_id_from_seed::("Bob//stash"), + ], + para_id, + )) + .with_properties(properties) + .build() + } + + fn genesis( + invulnerables: Vec<(AccountId, AuraId)>, + endowed_accounts: Vec, + id: ParaId, + ) -> serde_json::Value { + serde_json::json!({ + "balances": { + "balances": endowed_accounts.iter().cloned().map(|k| (k, CORETIME_WESTEND_ED * 4096)).collect::>(), + }, + "parachainInfo": { + "parachainId": id, + }, + "collatorSelection": { + "invulnerables": invulnerables.iter().cloned().map(|(acc, _)| acc).collect::>(), + "candidacyBond": CORETIME_WESTEND_ED * 16, + }, + "session": { + "keys": invulnerables + .into_iter() + .map(|(acc, aura)| { + ( + acc.clone(), // account id + acc, // validator id + coretime_westend_runtime::SessionKeys { aura }, // session keys + ) + }) + .collect::>(), + }, + "polkadotXcm": { + "safeXcmVersion": Some(SAFE_XCM_VERSION), + } + }) + } } diff --git a/cumulus/polkadot-parachain/src/command.rs b/cumulus/polkadot-parachain/src/command.rs index b1f6146c322..ffcbcc75568 100644 --- a/cumulus/polkadot-parachain/src/command.rs +++ b/cumulus/polkadot-parachain/src/command.rs @@ -536,17 +536,19 @@ macro_rules! construct_partials { $code }, Runtime::Coretime(coretime_runtime_type) => match coretime_runtime_type { - chain_spec::coretime::CoretimeRuntimeType::Westend => { - let $partials = new_partial::( + chain_spec::coretime::CoretimeRuntimeType::Rococo | + chain_spec::coretime::CoretimeRuntimeType::RococoLocal | + chain_spec::coretime::CoretimeRuntimeType::RococoDevelopment => { + let $partials = new_partial::( &$config, crate::service::aura_build_import_queue::<_, AuraId>, )?; $code }, - chain_spec::coretime::CoretimeRuntimeType::Rococo | - chain_spec::coretime::CoretimeRuntimeType::RococoLocal | - chain_spec::coretime::CoretimeRuntimeType::RococoDevelopment => { - let $partials = new_partial::( + chain_spec::coretime::CoretimeRuntimeType::Westend | + chain_spec::coretime::CoretimeRuntimeType::WestendLocal | + chain_spec::coretime::CoretimeRuntimeType::WestendDevelopment => { + let $partials = new_partial::( &$config, crate::service::aura_build_import_queue::<_, AuraId>, )?; @@ -764,7 +766,9 @@ macro_rules! construct_async_run { { $( $code )* }.map(|v| (v, task_manager)) }) }, - chain_spec::coretime::CoretimeRuntimeType::Westend => { + chain_spec::coretime::CoretimeRuntimeType::Westend | + chain_spec::coretime::CoretimeRuntimeType::WestendLocal | + chain_spec::coretime::CoretimeRuntimeType::WestendDevelopment => { runner.async_run(|$config| { let $components = new_partial::( &$config, @@ -1115,7 +1119,9 @@ chain_spec::bridge_hubs::BridgeHubRuntimeType::Polkadot | >(config, polkadot_config, collator_options, id, hwbench) .await .map(|r| r.0), - chain_spec::coretime::CoretimeRuntimeType::Westend => + chain_spec::coretime::CoretimeRuntimeType::Westend | + chain_spec::coretime::CoretimeRuntimeType::WestendLocal | + chain_spec::coretime::CoretimeRuntimeType::WestendDevelopment => crate::service::start_generic_aura_node::< chain_spec::coretime::westend::RuntimeApi, AuraId, -- GitLab From 63ac2471aa0210f0ac9903bdd7d8f9351f9a635f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=B3nal=20Murray?= Date: Wed, 29 Nov 2023 11:07:07 +0000 Subject: [PATCH 100/102] Remove system parachains Polkadot and Kusama runtimes (#1737) Since the Polkadot and Kusama runtimes are no longer in the repo, the relevant systems parachains runtimes also need to be removed. More context [here](https://github.com/paritytech/polkadot-sdk/issues/603) and [here](https://github.com/paritytech/polkadot-sdk/pull/1731). Removes the following: - `asset-hub-kusama` and `asset-hub-polkadot` - `bridge-hub-kusama` and `bridge-hub-polkadot` - `collectives-polkadot` - `glutton-kusama` Partially solves #603 and adds to #1731. --- .gitlab/pipeline/short-benchmarks.yml | 30 - Cargo.lock | 395 ----- Cargo.toml | 6 - .../assets/asset-hub-kusama/0_xcm/0_init.yml | 145 -- .../assets/asset-hub-kusama/0_xcm/1_dmp.yml | 263 --- .../assets/asset-hub-kusama/0_xcm/2_ump.yml | 191 -- .../0_xcm/3_force_hrmp-open-channels.yml | 122 -- .../assets/asset-hub-kusama/0_xcm/4_hrmp.yml | 388 ----- .../e2e/assets/asset-hub-kusama/config.toml | 71 - .../asset-hub-polkadot/0_xcm/0_init.yml | 145 -- .../assets/asset-hub-polkadot/0_xcm/1_dmp.yml | 263 --- .../assets/asset-hub-polkadot/0_xcm/2_ump.yml | 194 --- .../0_xcm/3_force_hrmp-open-channels.yml | 120 -- .../asset-hub-polkadot/0_xcm/4_hrmp.yml | 388 ----- .../e2e/assets/asset-hub-polkadot/config.toml | 72 - .../e2e/collectives/README.md | 26 - .../collectives-polkadot/0_xcm/0_init.yml | 166 -- .../collectives-polkadot/0_xcm/1_teleport.yml | 168 -- .../collectives-polkadot/0_xcm/2_reserve.yml | 53 - .../0_xcm/3_hrmp-open-channels.yml | 69 - .../1_alliance/0_join_alliance_fails.yml | 29 - .../1_alliance/1_init_alliance.yml | 256 --- .../1_alliance/2_join_alliance_fails.yml | 30 - .../1_alliance/3_kick_member.yml | 175 -- .../2_opengov/0_assethub.yml | 149 -- .../3_fellowship/0_init.yml | 209 --- .../3_fellowship/1_whitelist_call.yml | 146 -- .../3_fellowship/2_assethub.yml | 126 -- .../collectives-polkadot/config.toml | 42 - .../assets/asset-hub-kusama/Cargo.toml | 236 --- .../runtimes/assets/asset-hub-kusama/build.rs | 26 - .../assets/asset-hub-kusama/src/lib.rs | 1549 ----------------- .../src/weights/block_weights.rs | 53 - .../src/weights/cumulus_pallet_dmp_queue.rs | 131 -- .../cumulus_pallet_parachain_system.rs | 80 - .../src/weights/cumulus_pallet_xcmp_queue.rs | 148 -- .../src/weights/extrinsic_weights.rs | 53 - .../src/weights/frame_system.rs | 154 -- .../asset-hub-kusama/src/weights/mod.rs | 45 - .../src/weights/pallet_asset_conversion.rs | 154 -- .../src/weights/pallet_assets_foreign.rs | 533 ------ .../src/weights/pallet_assets_local.rs | 530 ------ .../src/weights/pallet_assets_pool.rs | 530 ------ .../src/weights/pallet_balances.rs | 152 -- .../src/weights/pallet_collator_selection.rs | 248 --- .../src/weights/pallet_message_queue.rs | 179 -- .../src/weights/pallet_multisig.rs | 164 -- .../weights/pallet_nft_fractionalization.rs | 114 -- .../src/weights/pallet_nfts.rs | 772 -------- .../src/weights/pallet_proxy.rs | 225 --- .../src/weights/pallet_session.rs | 80 - .../src/weights/pallet_timestamp.rs | 74 - .../src/weights/pallet_uniques.rs | 466 ----- .../src/weights/pallet_utility.rs | 101 -- .../src/weights/pallet_xcm.rs | 324 ---- .../src/weights/paritydb_weights.rs | 63 - .../src/weights/rocksdb_weights.rs | 63 - .../asset-hub-kusama/src/weights/xcm/mod.rs | 244 --- .../xcm/pallet_xcm_benchmarks_fungible.rs | 187 -- .../xcm/pallet_xcm_benchmarks_generic.rs | 328 ---- .../assets/asset-hub-kusama/src/xcm_config.rs | 634 ------- .../assets/asset-hub-kusama/tests/tests.rs | 658 ------- .../assets/asset-hub-polkadot/Cargo.toml | 215 --- .../assets/asset-hub-polkadot/build.rs | 26 - .../assets/asset-hub-polkadot/src/lib.rs | 1383 --------------- .../src/weights/block_weights.rs | 53 - .../src/weights/cumulus_pallet_dmp_queue.rs | 131 -- .../cumulus_pallet_parachain_system.rs | 80 - .../src/weights/cumulus_pallet_xcmp_queue.rs | 148 -- .../src/weights/extrinsic_weights.rs | 53 - .../src/weights/frame_system.rs | 154 -- .../asset-hub-polkadot/src/weights/mod.rs | 42 - .../src/weights/pallet_assets_foreign.rs | 532 ------ .../src/weights/pallet_assets_local.rs | 528 ------ .../src/weights/pallet_balances.rs | 152 -- .../src/weights/pallet_collator_selection.rs | 246 --- .../src/weights/pallet_message_queue.rs | 179 -- .../src/weights/pallet_multisig.rs | 164 -- .../src/weights/pallet_nfts.rs | 772 -------- .../src/weights/pallet_proxy.rs | 225 --- .../src/weights/pallet_session.rs | 80 - .../src/weights/pallet_timestamp.rs | 74 - .../src/weights/pallet_uniques.rs | 466 ----- .../src/weights/pallet_utility.rs | 101 -- .../src/weights/pallet_xcm.rs | 324 ---- .../src/weights/paritydb_weights.rs | 63 - .../src/weights/rocksdb_weights.rs | 63 - .../asset-hub-polkadot/src/weights/xcm/mod.rs | 244 --- .../xcm/pallet_xcm_benchmarks_fungible.rs | 187 -- .../xcm/pallet_xcm_benchmarks_generic.rs | 328 ---- .../asset-hub-polkadot/src/xcm_config.rs | 546 ------ .../assets/asset-hub-polkadot/tests/tests.rs | 683 -------- .../bridge-hubs/bridge-hub-kusama/Cargo.toml | 192 -- .../bridge-hubs/bridge-hub-kusama/build.rs | 26 - .../bridge-hubs/bridge-hub-kusama/src/lib.rs | 872 ---------- .../src/weights/block_weights.rs | 53 - .../src/weights/cumulus_pallet_dmp_queue.rs | 131 -- .../cumulus_pallet_parachain_system.rs | 80 - .../src/weights/cumulus_pallet_xcmp_queue.rs | 148 -- .../src/weights/extrinsic_weights.rs | 53 - .../src/weights/frame_system.rs | 154 -- .../bridge-hub-kusama/src/weights/mod.rs | 41 - .../src/weights/pallet_balances.rs | 152 -- .../src/weights/pallet_collator_selection.rs | 248 --- .../src/weights/pallet_message_queue.rs | 179 -- .../src/weights/pallet_multisig.rs | 164 -- .../src/weights/pallet_session.rs | 80 - .../src/weights/pallet_timestamp.rs | 74 - .../src/weights/pallet_utility.rs | 101 -- .../src/weights/pallet_xcm.rs | 323 ---- .../src/weights/paritydb_weights.rs | 63 - .../src/weights/rocksdb_weights.rs | 63 - .../bridge-hub-kusama/src/weights/xcm/mod.rs | 244 --- .../xcm/pallet_xcm_benchmarks_fungible.rs | 187 -- .../xcm/pallet_xcm_benchmarks_generic.rs | 328 ---- .../bridge-hub-kusama/src/xcm_config.rs | 280 --- .../bridge-hub-kusama/tests/tests.rs | 51 - .../bridge-hub-polkadot/Cargo.toml | 192 -- .../bridge-hubs/bridge-hub-polkadot/build.rs | 26 - .../bridge-hub-polkadot/src/lib.rs | 873 ---------- .../src/weights/block_weights.rs | 53 - .../src/weights/cumulus_pallet_dmp_queue.rs | 131 -- .../cumulus_pallet_parachain_system.rs | 80 - .../src/weights/cumulus_pallet_xcmp_queue.rs | 148 -- .../src/weights/extrinsic_weights.rs | 53 - .../src/weights/frame_system.rs | 154 -- .../bridge-hub-polkadot/src/weights/mod.rs | 41 - .../src/weights/pallet_balances.rs | 152 -- .../src/weights/pallet_collator_selection.rs | 248 --- .../src/weights/pallet_message_queue.rs | 179 -- .../src/weights/pallet_multisig.rs | 164 -- .../src/weights/pallet_session.rs | 80 - .../src/weights/pallet_timestamp.rs | 74 - .../src/weights/pallet_utility.rs | 101 -- .../src/weights/pallet_xcm.rs | 323 ---- .../src/weights/paritydb_weights.rs | 63 - .../src/weights/rocksdb_weights.rs | 63 - .../src/weights/xcm/mod.rs | 244 --- .../xcm/pallet_xcm_benchmarks_fungible.rs | 187 -- .../xcm/pallet_xcm_benchmarks_generic.rs | 328 ---- .../bridge-hub-polkadot/src/xcm_config.rs | 284 --- .../bridge-hub-polkadot/tests/tests.rs | 51 - .../collectives-polkadot/Cargo.toml | 226 --- .../collectives/collectives-polkadot/build.rs | 26 - .../src/ambassador/mod.rs | 255 --- .../src/ambassador/origins.rs | 135 -- .../src/ambassador/tracks.rs | 282 --- .../src/fellowship/migration.rs | 261 --- .../src/fellowship/mod.rs | 239 --- .../src/fellowship/origins.rs | 247 --- .../src/fellowship/tracks.rs | 532 ------ .../collectives-polkadot/src/impls.rs | 229 --- .../collectives-polkadot/src/lib.rs | 1031 ----------- .../src/weights/block_weights.rs | 53 - .../src/weights/cumulus_pallet_dmp_queue.rs | 131 -- .../cumulus_pallet_parachain_system.rs | 80 - .../src/weights/cumulus_pallet_xcmp_queue.rs | 148 -- .../src/weights/extrinsic_weights.rs | 53 - .../src/weights/frame_system.rs | 154 -- .../collectives-polkadot/src/weights/mod.rs | 50 - .../src/weights/pallet_alliance.rs | 494 ------ .../src/weights/pallet_balances.rs | 152 -- .../src/weights/pallet_collator_selection.rs | 246 --- .../src/weights/pallet_collective.rs | 304 ---- .../src/weights/pallet_collective_content.rs | 93 - .../pallet_core_fellowship_ambassador_core.rs | 223 --- .../pallet_core_fellowship_fellowship_core.rs | 222 --- .../src/weights/pallet_message_queue.rs | 179 -- .../src/weights/pallet_multisig.rs | 164 -- .../src/weights/pallet_preimage.rs | 232 --- .../src/weights/pallet_proxy.rs | 225 --- ...ranked_collective_ambassador_collective.rs | 177 -- ...ranked_collective_fellowship_collective.rs | 176 -- .../pallet_referenda_ambassador_referenda.rs | 536 ------ .../pallet_referenda_fellowship_referenda.rs | 535 ------ .../pallet_salary_ambassador_salary.rs | 190 -- .../pallet_salary_fellowship_salary.rs | 189 -- .../src/weights/pallet_scheduler.rs | 206 --- .../src/weights/pallet_session.rs | 80 - .../src/weights/pallet_timestamp.rs | 74 - .../src/weights/pallet_utility.rs | 101 -- .../src/weights/pallet_xcm.rs | 323 ---- .../src/weights/paritydb_weights.rs | 63 - .../src/weights/rocksdb_weights.rs | 63 - .../collectives-polkadot/src/xcm_config.rs | 331 ---- .../glutton/glutton-kusama/Cargo.toml | 138 -- .../runtimes/glutton/glutton-kusama/build.rs | 24 - .../glutton/glutton-kusama/src/lib.rs | 528 ------ .../cumulus_pallet_parachain_system.rs | 80 - .../src/weights/frame_system.rs | 154 -- .../glutton/glutton-kusama/src/weights/mod.rs | 19 - .../src/weights/pallet_glutton.rs | 179 -- .../src/weights/pallet_message_queue.rs | 179 -- .../src/weights/pallet_timestamp.rs | 75 - .../glutton/glutton-kusama/src/xcm_config.rs | 92 - cumulus/polkadot-parachain/Cargo.toml | 18 - .../src/chain_spec/asset_hubs.rs | 357 +--- .../src/chain_spec/bridge_hubs.rs | 246 +-- .../src/chain_spec/collectives.rs | 134 -- .../src/chain_spec/glutton.rs | 56 - cumulus/polkadot-parachain/src/command.rs | 58 +- cumulus/polkadot-parachain/src/service.rs | 90 - .../tests/benchmark_storage_works.rs | 2 +- cumulus/scripts/benchmarks.sh | 9 - .../scripts/create_bridge_hub_kusama_spec.sh | 108 -- .../create_bridge_hub_polkadot_spec.sh | 108 -- cumulus/scripts/create_glutton_spec.sh | 2 +- .../scripts/parachains_integration_tests.sh | 32 - ...l => asset_hub_westend_local_network.toml} | 18 +- .../bridge_hub_kusama_local_network.toml | 67 - .../bridge_hub_polkadot_local_network.toml | 67 - cumulus/zombienet/examples/small_network.toml | 2 +- 212 files changed, 25 insertions(+), 43083 deletions(-) delete mode 100644 cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/0_init.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/1_dmp.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/2_ump.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/3_force_hrmp-open-channels.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/4_hrmp.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/config.toml delete mode 100644 cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/0_init.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/1_dmp.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/2_ump.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/3_force_hrmp-open-channels.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/4_hrmp.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/config.toml delete mode 100644 cumulus/parachains/integration-tests/e2e/collectives/README.md delete mode 100644 cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/0_xcm/0_init.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/0_xcm/1_teleport.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/0_xcm/2_reserve.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/0_xcm/3_hrmp-open-channels.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/1_alliance/0_join_alliance_fails.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/1_alliance/1_init_alliance.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/1_alliance/2_join_alliance_fails.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/1_alliance/3_kick_member.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/2_opengov/0_assethub.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/3_fellowship/0_init.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/3_fellowship/1_whitelist_call.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/3_fellowship/2_assethub.yml delete mode 100644 cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/config.toml delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/Cargo.toml delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/build.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/lib.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/block_weights.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/cumulus_pallet_dmp_queue.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/cumulus_pallet_parachain_system.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/cumulus_pallet_xcmp_queue.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/extrinsic_weights.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/frame_system.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/mod.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_asset_conversion.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_assets_foreign.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_assets_local.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_assets_pool.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_balances.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_collator_selection.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_message_queue.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_multisig.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_nft_fractionalization.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_nfts.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_proxy.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_session.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_timestamp.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_uniques.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_utility.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_xcm.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/paritydb_weights.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/rocksdb_weights.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/xcm/mod.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/src/xcm_config.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-kusama/tests/tests.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/Cargo.toml delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/build.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/lib.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/block_weights.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/cumulus_pallet_dmp_queue.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/cumulus_pallet_parachain_system.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/extrinsic_weights.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/frame_system.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/mod.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_assets_foreign.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_assets_local.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_balances.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_collator_selection.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_message_queue.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_multisig.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_nfts.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_proxy.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_session.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_timestamp.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_uniques.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_utility.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_xcm.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/paritydb_weights.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/rocksdb_weights.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/xcm/mod.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/xcm/pallet_xcm_benchmarks_generic.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/xcm_config.rs delete mode 100644 cumulus/parachains/runtimes/assets/asset-hub-polkadot/tests/tests.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/Cargo.toml delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/build.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/block_weights.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/cumulus_pallet_dmp_queue.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/cumulus_pallet_parachain_system.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/cumulus_pallet_xcmp_queue.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/extrinsic_weights.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/frame_system.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/mod.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_balances.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_collator_selection.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_message_queue.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_multisig.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_session.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_timestamp.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_utility.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_xcm.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/paritydb_weights.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/rocksdb_weights.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/mod.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/xcm_config.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/tests/tests.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/Cargo.toml delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/build.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/lib.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/block_weights.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/cumulus_pallet_dmp_queue.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/cumulus_pallet_parachain_system.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/extrinsic_weights.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/frame_system.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/mod.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_balances.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_collator_selection.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_message_queue.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_multisig.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_session.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_timestamp.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_utility.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_xcm.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/paritydb_weights.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/rocksdb_weights.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/xcm/mod.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/xcm/pallet_xcm_benchmarks_generic.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/xcm_config.rs delete mode 100644 cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/tests/tests.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/build.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/ambassador/mod.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/ambassador/origins.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/ambassador/tracks.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/fellowship/migration.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/fellowship/mod.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/fellowship/origins.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/fellowship/tracks.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_dmp_queue.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_parachain_system.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/mod.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_balances.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collective.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collective_content.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_core_fellowship_ambassador_core.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_core_fellowship_fellowship_core.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_message_queue.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_preimage.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_ranked_collective_ambassador_collective.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_ranked_collective_fellowship_collective.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_referenda_ambassador_referenda.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_referenda_fellowship_referenda.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_salary_ambassador_salary.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_salary_fellowship_salary.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_scheduler.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_session.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_timestamp.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_xcm.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/paritydb_weights.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/rocksdb_weights.rs delete mode 100644 cumulus/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs delete mode 100644 cumulus/parachains/runtimes/glutton/glutton-kusama/Cargo.toml delete mode 100644 cumulus/parachains/runtimes/glutton/glutton-kusama/build.rs delete mode 100644 cumulus/parachains/runtimes/glutton/glutton-kusama/src/lib.rs delete mode 100644 cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/cumulus_pallet_parachain_system.rs delete mode 100644 cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/frame_system.rs delete mode 100644 cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/mod.rs delete mode 100644 cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/pallet_glutton.rs delete mode 100644 cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/pallet_message_queue.rs delete mode 100644 cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/pallet_timestamp.rs delete mode 100644 cumulus/parachains/runtimes/glutton/glutton-kusama/src/xcm_config.rs delete mode 100755 cumulus/scripts/create_bridge_hub_kusama_spec.sh delete mode 100755 cumulus/scripts/create_bridge_hub_polkadot_spec.sh delete mode 100755 cumulus/scripts/parachains_integration_tests.sh rename cumulus/zombienet/examples/{statemine_kusama_local_network.toml => asset_hub_westend_local_network.toml} (71%) delete mode 100644 cumulus/zombienet/examples/bridge_hub_kusama_local_network.toml delete mode 100644 cumulus/zombienet/examples/bridge_hub_polkadot_local_network.toml diff --git a/.gitlab/pipeline/short-benchmarks.yml b/.gitlab/pipeline/short-benchmarks.yml index 0218d3fdac0..97bce479927 100644 --- a/.gitlab/pipeline/short-benchmarks.yml +++ b/.gitlab/pipeline/short-benchmarks.yml @@ -49,16 +49,6 @@ short-benchmark-westend: &short-bench script: - ./artifacts/polkadot-parachain benchmark pallet --chain $RUNTIME_CHAIN --pallet "*" --extrinsic "*" --steps 2 --repeat 1 -short-benchmark-asset-hub-polkadot: - <<: *short-bench-cumulus - variables: - RUNTIME_CHAIN: asset-hub-polkadot-dev - -short-benchmark-asset-hub-kusama: - <<: *short-bench-cumulus - variables: - RUNTIME_CHAIN: asset-hub-kusama-dev - short-benchmark-asset-hub-rococo: <<: *short-bench-cumulus variables: @@ -69,16 +59,6 @@ short-benchmark-asset-hub-westend: variables: RUNTIME_CHAIN: asset-hub-westend-dev -short-benchmark-bridge-hub-polkadot: - <<: *short-bench-cumulus - variables: - RUNTIME_CHAIN: bridge-hub-polkadot-dev - -short-benchmark-bridge-hub-kusama: - <<: *short-bench-cumulus - variables: - RUNTIME_CHAIN: bridge-hub-kusama-dev - short-benchmark-bridge-hub-rococo: <<: *short-bench-cumulus variables: @@ -89,21 +69,11 @@ short-benchmark-bridge-hub-westend: variables: RUNTIME_CHAIN: bridge-hub-westend-dev -short-benchmark-collectives-polkadot: - <<: *short-bench-cumulus - variables: - RUNTIME_CHAIN: collectives-polkadot-dev - short-benchmark-collectives-westend: <<: *short-bench-cumulus variables: RUNTIME_CHAIN: collectives-westend-dev -short-benchmark-glutton-kusama: - <<: *short-bench-cumulus - variables: - RUNTIME_CHAIN: glutton-kusama-dev-1300 - short-benchmark-glutton-westend: <<: *short-bench-cumulus variables: diff --git a/Cargo.lock b/Cargo.lock index bf4efa60ad7..db5717a67ec 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -730,150 +730,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" -[[package]] -name = "asset-hub-kusama-runtime" -version = "0.9.420" -dependencies = [ - "asset-test-utils", - "assets-common", - "cumulus-pallet-aura-ext", - "cumulus-pallet-dmp-queue", - "cumulus-pallet-parachain-system", - "cumulus-pallet-session-benchmarking", - "cumulus-pallet-xcm", - "cumulus-pallet-xcmp-queue", - "cumulus-primitives-core", - "cumulus-primitives-utility", - "frame-benchmarking", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-benchmarking", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "hex-literal", - "log", - "pallet-asset-conversion", - "pallet-asset-conversion-tx-payment", - "pallet-assets", - "pallet-aura", - "pallet-authorship", - "pallet-balances", - "pallet-collator-selection", - "pallet-message-queue", - "pallet-multisig", - "pallet-nft-fractionalization", - "pallet-nfts", - "pallet-nfts-runtime-api", - "pallet-proxy", - "pallet-session", - "pallet-state-trie-migration", - "pallet-timestamp", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "pallet-uniques", - "pallet-utility", - "pallet-xcm", - "pallet-xcm-benchmarks", - "parachains-common", - "parity-scale-codec", - "polkadot-core-primitives", - "polkadot-parachain-primitives", - "polkadot-runtime-common", - "primitive-types", - "scale-info", - "smallvec", - "sp-api", - "sp-block-builder", - "sp-consensus-aura", - "sp-core", - "sp-genesis-builder", - "sp-inherents", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-std 8.0.0", - "sp-storage 13.0.0", - "sp-transaction-pool", - "sp-version", - "sp-weights", - "staging-parachain-info", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", - "substrate-wasm-builder", -] - -[[package]] -name = "asset-hub-polkadot-runtime" -version = "0.9.420" -dependencies = [ - "asset-test-utils", - "assets-common", - "cumulus-pallet-aura-ext", - "cumulus-pallet-dmp-queue", - "cumulus-pallet-parachain-system", - "cumulus-pallet-session-benchmarking", - "cumulus-pallet-xcm", - "cumulus-pallet-xcmp-queue", - "cumulus-primitives-core", - "cumulus-primitives-utility", - "frame-benchmarking", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-benchmarking", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "hex-literal", - "log", - "pallet-asset-tx-payment", - "pallet-assets", - "pallet-aura", - "pallet-authorship", - "pallet-balances", - "pallet-collator-selection", - "pallet-message-queue", - "pallet-multisig", - "pallet-nfts", - "pallet-nfts-runtime-api", - "pallet-proxy", - "pallet-session", - "pallet-timestamp", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "pallet-uniques", - "pallet-utility", - "pallet-xcm", - "pallet-xcm-benchmarks", - "parachains-common", - "parity-scale-codec", - "polkadot-core-primitives", - "polkadot-parachain-primitives", - "polkadot-runtime-common", - "scale-info", - "smallvec", - "sp-api", - "sp-block-builder", - "sp-consensus-aura", - "sp-core", - "sp-genesis-builder", - "sp-inherents", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-std 8.0.0", - "sp-storage 13.0.0", - "sp-transaction-pool", - "sp-version", - "sp-weights", - "staging-parachain-info", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", - "substrate-wasm-builder", -] - [[package]] name = "asset-hub-rococo-emulated-chain" version = "0.0.0" @@ -1973,134 +1829,6 @@ dependencies = [ "sp-runtime", ] -[[package]] -name = "bridge-hub-kusama-runtime" -version = "0.1.0" -dependencies = [ - "bridge-hub-test-utils", - "cumulus-pallet-aura-ext", - "cumulus-pallet-dmp-queue", - "cumulus-pallet-parachain-system", - "cumulus-pallet-session-benchmarking", - "cumulus-pallet-xcm", - "cumulus-pallet-xcmp-queue", - "cumulus-primitives-core", - "cumulus-primitives-utility", - "frame-benchmarking", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-benchmarking", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "hex-literal", - "log", - "pallet-aura", - "pallet-authorship", - "pallet-balances", - "pallet-collator-selection", - "pallet-message-queue", - "pallet-multisig", - "pallet-session", - "pallet-timestamp", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "pallet-utility", - "pallet-xcm", - "pallet-xcm-benchmarks", - "parachains-common", - "parity-scale-codec", - "polkadot-core-primitives", - "polkadot-parachain-primitives", - "polkadot-runtime-common", - "scale-info", - "serde", - "smallvec", - "sp-api", - "sp-block-builder", - "sp-consensus-aura", - "sp-core", - "sp-genesis-builder", - "sp-inherents", - "sp-io", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-std 8.0.0", - "sp-storage 13.0.0", - "sp-transaction-pool", - "sp-version", - "staging-parachain-info", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", - "substrate-wasm-builder", -] - -[[package]] -name = "bridge-hub-polkadot-runtime" -version = "0.1.0" -dependencies = [ - "bridge-hub-test-utils", - "cumulus-pallet-aura-ext", - "cumulus-pallet-dmp-queue", - "cumulus-pallet-parachain-system", - "cumulus-pallet-session-benchmarking", - "cumulus-pallet-xcm", - "cumulus-pallet-xcmp-queue", - "cumulus-primitives-core", - "cumulus-primitives-utility", - "frame-benchmarking", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-benchmarking", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "hex-literal", - "log", - "pallet-aura", - "pallet-authorship", - "pallet-balances", - "pallet-collator-selection", - "pallet-message-queue", - "pallet-multisig", - "pallet-session", - "pallet-timestamp", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "pallet-utility", - "pallet-xcm", - "pallet-xcm-benchmarks", - "parachains-common", - "parity-scale-codec", - "polkadot-core-primitives", - "polkadot-parachain-primitives", - "polkadot-runtime-common", - "scale-info", - "serde", - "smallvec", - "sp-api", - "sp-block-builder", - "sp-consensus-aura", - "sp-core", - "sp-genesis-builder", - "sp-inherents", - "sp-io", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-std 8.0.0", - "sp-storage 13.0.0", - "sp-transaction-pool", - "sp-version", - "staging-parachain-info", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", - "substrate-wasm-builder", -] - [[package]] name = "bridge-hub-rococo-emulated-chain" version = "0.0.0" @@ -2861,78 +2589,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "collectives-polkadot-runtime" -version = "1.0.0" -dependencies = [ - "cumulus-pallet-aura-ext", - "cumulus-pallet-dmp-queue", - "cumulus-pallet-parachain-system", - "cumulus-pallet-session-benchmarking", - "cumulus-pallet-xcm", - "cumulus-pallet-xcmp-queue", - "cumulus-primitives-core", - "cumulus-primitives-utility", - "frame-benchmarking", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-benchmarking", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "hex-literal", - "log", - "pallet-alliance", - "pallet-aura", - "pallet-authorship", - "pallet-balances", - "pallet-collator-selection", - "pallet-collective", - "pallet-collective-content", - "pallet-core-fellowship", - "pallet-message-queue", - "pallet-multisig", - "pallet-preimage", - "pallet-proxy", - "pallet-ranked-collective", - "pallet-referenda", - "pallet-salary", - "pallet-scheduler", - "pallet-session", - "pallet-timestamp", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "pallet-utility", - "pallet-xcm", - "parachains-common", - "parity-scale-codec", - "polkadot-core-primitives", - "polkadot-parachain-primitives", - "polkadot-runtime-common", - "scale-info", - "smallvec", - "sp-api", - "sp-arithmetic", - "sp-block-builder", - "sp-consensus-aura", - "sp-core", - "sp-genesis-builder", - "sp-inherents", - "sp-io", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-std 8.0.0", - "sp-storage 13.0.0", - "sp-transaction-pool", - "sp-version", - "staging-parachain-info", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", - "substrate-wasm-builder", -] - [[package]] name = "collectives-westend-runtime" version = "1.0.0" @@ -6248,51 +5904,6 @@ dependencies = [ "regex", ] -[[package]] -name = "glutton-runtime" -version = "1.0.0" -dependencies = [ - "cumulus-pallet-aura-ext", - "cumulus-pallet-parachain-system", - "cumulus-pallet-xcm", - "cumulus-primitives-aura", - "cumulus-primitives-core", - "cumulus-primitives-timestamp", - "frame-benchmarking", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-benchmarking", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "pallet-aura", - "pallet-glutton", - "pallet-message-queue", - "pallet-sudo", - "pallet-timestamp", - "parachains-common", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-block-builder", - "sp-consensus-aura", - "sp-core", - "sp-genesis-builder", - "sp-inherents", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-std 8.0.0", - "sp-storage 13.0.0", - "sp-transaction-pool", - "sp-version", - "staging-parachain-info", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", - "substrate-wasm-builder", -] - [[package]] name = "glutton-westend-runtime" version = "1.0.0" @@ -12939,17 +12550,12 @@ name = "polkadot-parachain-bin" version = "1.1.0" dependencies = [ "assert_cmd", - "asset-hub-kusama-runtime", - "asset-hub-polkadot-runtime", "asset-hub-rococo-runtime", "asset-hub-westend-runtime", "async-trait", - "bridge-hub-kusama-runtime", - "bridge-hub-polkadot-runtime", "bridge-hub-rococo-runtime", "bridge-hub-westend-runtime", "clap 4.4.6", - "collectives-polkadot-runtime", "collectives-westend-runtime", "color-print", "contracts-rococo-runtime", @@ -12970,7 +12576,6 @@ dependencies = [ "frame-system-rpc-runtime-api", "frame-try-runtime", "futures", - "glutton-runtime", "glutton-westend-runtime", "hex-literal", "jsonrpsee", diff --git a/Cargo.toml b/Cargo.toml index f16c8393183..e154c2f3bc8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -77,21 +77,15 @@ members = [ "cumulus/parachains/pallets/collective-content", "cumulus/parachains/pallets/parachain-info", "cumulus/parachains/pallets/ping", - "cumulus/parachains/runtimes/assets/asset-hub-kusama", - "cumulus/parachains/runtimes/assets/asset-hub-polkadot", "cumulus/parachains/runtimes/assets/asset-hub-rococo", "cumulus/parachains/runtimes/assets/asset-hub-westend", "cumulus/parachains/runtimes/assets/common", "cumulus/parachains/runtimes/assets/test-utils", - "cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama", - "cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot", "cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo", "cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend", "cumulus/parachains/runtimes/bridge-hubs/test-utils", - "cumulus/parachains/runtimes/collectives/collectives-polkadot", "cumulus/parachains/runtimes/collectives/collectives-westend", "cumulus/parachains/runtimes/contracts/contracts-rococo", - "cumulus/parachains/runtimes/glutton/glutton-kusama", "cumulus/parachains/runtimes/glutton/glutton-westend", "cumulus/parachains/runtimes/starters/seedling", "cumulus/parachains/runtimes/starters/shell", diff --git a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/0_init.yml b/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/0_init.yml deleted file mode 100644 index fdc1aa258d4..00000000000 --- a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/0_init.yml +++ /dev/null @@ -1,145 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9900 - assets_parachain: &assets_parachain - wsPort: 9910 - paraId: &ap_id 1000 - penpal_parachain: &penpal_parachain - wsPort: 9920 - paraId: &pp_id 2000 - variables: - common: - xcm_version: &xcm_version 3 - require_weight_at_most: &weight_at_most {refTime: 1000000000, proofSize: 200000} - weight_threshold: &weight_threshold { refTime: [10, 10], proofSize: [10, 10] } - chains: - relay_chain: - signer: &rc_signer //Alice - assets_parachain_destination: &ap_dest { v3: { 0, interior: { x1: { parachain: *ap_id }}}} - penpal_parachain: - signer: &pp_signer //Alice - decodedCalls: - ap_force_xcm_version: - chain: *assets_parachain - pallet: polkadotXcm - call: forceXcmVersion - args: [ - { # location - parents: 1, - interior: Here - }, - *xcm_version # xcmVersion - ] - -tests: - - name: Initialize Chains - its: - - name: XCM supported versions between chains - actions: - - extrinsics: # Relay Chain sets supported version for Asset Parachain - - chain: *relay_chain - sudo: true - signer: *rc_signer - pallet: xcmPallet - call: forceXcmVersion - args: [ - { # location - parents: 0, - interior: { - X1: { - Parachain: *ap_id - } - } - }, - *xcm_version # xcmVersion - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: xcmPallet.SupportedVersionChanged - result: { location: { parents: 0, interior: { X1: { Parachain: *ap_id }}}, version: *xcm_version } - - extrinsics: # Relay Chain sets supported version for Penpal Parachain - - chain: *relay_chain - sudo: true - signer: *rc_signer - pallet: xcmPallet - call: forceXcmVersion - args: [ - { # location - parents: 0, - interior: { - X1: { - Parachain: *pp_id - } - } - }, - *xcm_version # xcmVersion - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: xcmPallet.SupportedVersionChanged - result: { location: { parents: 0, interior: { X1: { Parachain: *pp_id }}}, version: *xcm_version } - - extrinsics: # Asset Parachain sets supported version for Relay Chain through it - - chain: *relay_chain - signer: *rc_signer - sudo: true - pallet: xcmPallet - call: send - args: [ - *ap_dest, # destination - { - v3: [ #message - { - UnpaidExecution: { - weightLimit: { - limited: { - refTime: 2200000000, - proofSize: 200000 - } - } - } - }, - { - Transact: { - originKind: Superuser, - requireWeightAtMost: *weight_at_most, - call: $ap_force_xcm_version - } - } - ] - } - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: xcmPallet.Sent - - name: dmpQueue.ExecutedDownward - chain: *assets_parachain - threshold: *weight_threshold - result: { - outcome: { Complete: { refTime: '1,019,210,000', proofSize: '200,000' }} - } - - name: polkadotXcm.SupportedVersionChanged - chain: *assets_parachain - result: { location: { parents: 1, interior: Here }, version: *xcm_version } - - extrinsics: # Penpal Parachain sets supported version for Relay Chain - - chain: *penpal_parachain - signer: *pp_signer - sudo: true - pallet: polkadotXcm - call: forceXcmVersion - args: [ - { # location - parents: 1, - interior: Here - }, - *xcm_version # xcmVersion - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: polkadotXcm.SupportedVersionChanged - result: { location: { parents: 1, interior: Here }, version: *xcm_version } diff --git a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/1_dmp.yml b/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/1_dmp.yml deleted file mode 100644 index 0e207e632a0..00000000000 --- a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/1_dmp.yml +++ /dev/null @@ -1,263 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9900 - assets_parachain: &assets_parachain - wsPort: 9910 - paraId: &ap_id 1000 - variables: - common: - weight_threshold: &weight_threshold { refTime: [10, 10], proofSize: [10, 10] } - chains: - relay_chain: - signer: &rc_signer //Alice - wallet: &rc_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F - assets_parachain_destination: &ap_dest { v3: { parents: 0, interior: { x1: { parachain: *ap_id }}}} - assets_parachain_account: &ap_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' - assets_parachain_beneficiary: &ap_benf { v3: { parents: 0, interior: { x1: { accountId32: { id: *ap_acc }}}}} - ksm: &rc_ksm { concrete: { parents: 0, interior: { here: true }}} - amount: &amount 1000000000000 - ksm_fungible: &rc_ksm_fungible { id: *rc_ksm, fun: { fungible: *amount }} - require_weight_at_most: &rc_weight_at_most { refTime: 1000000000, proofSize: 200000 } - assets_parachain_account: - wallet: &ap_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F - asset_id: &asset_id 1 - asset_min_balance: &asset_ed 1000 - decodedCalls: - force_create_asset: - chain: *assets_parachain - pallet: assets - call: forceCreate - args: [ - *asset_id, - { Id: *ap_wallet }, # owner - true, # isSufficient - *asset_ed # minBalance - ] - -tests: - - name: DMP - its: [] - describes: - - name: xcmPallet.limitedTeleportAssets - before: &before_get_balances - - name: Get the balances of the Relay Chain's sender & Assets Parachain's receiver - actions: - - queries: - balance_rc_sender_before: - chain: *relay_chain - pallet: system - call: account - args: [ *rc_wallet ] - balance_ap_receiver_before: - chain: *assets_parachain - pallet: system - call: account - args: [ *ap_wallet ] - its: - - name: Should teleport native assets from the Relay Chain to the Assets Parachain - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - pallet: xcmPallet - call: limitedTeleportAssets - args: [ - *ap_dest, # destination - *ap_benf, # beneficiary - { v3: [ *rc_ksm_fungible ] }, - 0, # feeAssetItem - { unlimited: true } # weightLimit - ] - events: - - name: xcmPallet.Attempted - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '764,772,000', proofSize: 0 }}} - - name: dmpQueue.ExecutedDownward - chain: *assets_parachain - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '166,944,000', proofSize: 0 }}} - - queries: - balance_rc_sender_after: - chain: *relay_chain - pallet: system - call: account - args: [ *rc_wallet ] - balance_ap_receiver_after: - chain: *assets_parachain - pallet: system - call: account - args: [ *ap_wallet ] - - - name: Should reduce the balance of the sender - actions: - - asserts: - balanceDecreased: - args: [ - { - balances: { - before: $balance_rc_sender_before, - after: $balance_rc_sender_after, - }, - amount: *amount - } - ] - - - name: Should increase the balance of the receiver - actions: - - asserts: - balanceIncreased: - args: [ - { - balances: { - before: $balance_ap_receiver_before, - after: $balance_ap_receiver_after, - } - } - ] - - - name: xcmPallet.send | Superuser - Transact(assets.forceCreate) - its: - - name: Relay Chain Superuser account SHOULD be able to execute a XCM Transact instruction in the Assets Parachain - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - sudo: true - pallet: xcmPallet - call: send - args: [ - *ap_dest, # destination - { - v3: [ #message - { - UnpaidExecution: { - weightLimit: Unlimited - } - }, - { - Transact: { - originKind: Superuser, - requireWeightAtMost: *rc_weight_at_most, - call: $force_create_asset - } - } - ] - } - ] - events: - - name: xcmPallet.Sent - - name: dmpQueue.ExecutedDownward - chain: *assets_parachain - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '1,014,103,000', proofSize: '200,000' }}} - - queries: - forced_created_asset: - chain: *assets_parachain - pallet: assets - call: asset - args: [ *asset_id ] - - asserts: - isSome: - args: [ $forced_created_asset ] - - - name: xcmPallet.send | Native - Transact(assets.forceCreate) - its: - - name: Relay Chain Native account SHOULD NOT be able to execute a XCM Transact instruction in the Assets Parachain - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - pallet: xcmPallet - call: send - args: [ - *ap_dest, # destination - { - v3: [ #message - { - UnpaidExecution: { - weightLimit: Unlimited - } - }, - { - Transact: { - originKind: Native, - requireWeightAtMost: *rc_weight_at_most, - call: $force_create_asset - } - } - ] - } - ] - events: - - name: system.ExtrinsicFailed - result: { dispatchError: BadOrigin } - - - name: xcmPallet.limitedReserveTransferAssets - before: *before_get_balances - its: - - name: SHOULD NOT reserved transfer native assets from the Relay Chain to the Assets Parachain - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - pallet: xcmPallet - call: limitedReserveTransferAssets - args: [ - *ap_dest, # destination - *ap_benf, # beneficiary - { v3: [ *rc_ksm_fungible ] }, # assets - 0, # feeAssetItem - { unlimited: true } # weightLimit - ] - events: - - name: xcmPallet.Attempted - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '750,645,000', proofSize: 0 }}} - - name: dmpQueue.ExecutedDownward - chain: *assets_parachain - threshold: *weight_threshold - result: { - outcome: { - Incomplete: [ - { refTime: '1,000,000,000', proofSize: 0 }, - UntrustedReserveLocation - ] - } - } - - queries: - balance_rc_sender_after: - chain: *relay_chain - pallet: system - call: account - args: [ *rc_wallet ] - balance_ap_receiver_after: - chain: *assets_parachain - pallet: system - call: account - args: [ *ap_wallet ] - - - name: Should reduce the balance of the sender - actions: - - asserts: - balanceDecreased: - args: [ - { - balances: { - before: $balance_rc_sender_before, - after: $balance_rc_sender_after, - }, - amount: *amount - } - ] - - - name: Should keep the balance of the receiver - actions: - - asserts: - equal: - args: - [ - $balance_ap_receiver_before, - $balance_ap_receiver_after - ] diff --git a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/2_ump.yml b/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/2_ump.yml deleted file mode 100644 index 2a0bb88090e..00000000000 --- a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/2_ump.yml +++ /dev/null @@ -1,191 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9900 - assets_parachain: &assets_parachain - wsPort: 9910 - paraId: &ap_id 1000 - variables: - common: - amount: &amount 1000000000000 - require_weight_at_most: &weight_at_most {refTime: 1000000000, proofSize: 0} - weight_threshold: &weight_threshold { refTime: [10, 10], proofSize: [10, 10] } - chains: - relay_chain: - signer: &rc_signer //Alice - wallet: &rc_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F #Alice - assets_parachain_destination: &ap_dest { v3: { 0, interior: { x1: { parachain: *ap_id }}}} - assets_parachain_account: &ap_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' - assets_parachain_beneficiary: &ap_benf {v3: { parents: 0, interior: { x1: { accountId32: { id: *ap_acc }}}}} - ksm: &rc_ksm { concrete: { 0, interior: { here: true }}} - ksm_fungible: &rc_ksm_fungible { id: *rc_ksm, fun: { fungible: *amount }} - assets_parachain_account: - signer: &ap_signer //Alice - wallet: &ap_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F - relay_chain_destination: &rc_dest { v3: { parents: 1, interior: { here: true }}} - assets_parachain_account: &rc_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' #Alice - relay_chain_beneficiary: &rc_benf {v3: { parents: 0, interior: { x1: { accountId32: { id: *rc_acc }}}}} - ksm: &ap_ksm { concrete: { parents: 1, interior: { here: true }}} - ksm_fungible: &ap_ksm_fungible { id: *ap_ksm, fun: { fungible: *amount }} - decodedCalls: - system_remark: - chain: *relay_chain - pallet: system - call: remark - args: [ 0x0011 ] - -tests: - - name: UMP - describes: - - name: polkadotXcm.limitedTeleportAssets - before: - - name: DEPENDENCY | Do a 'limitedTeleportAssets' from the Relay Chain to the Assets Parachain to have funds to send them back - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - pallet: xcmPallet - call: limitedTeleportAssets - args: [ - *ap_dest, # destination - *ap_benf, # beneficiary - { v3: [ *rc_ksm_fungible ] }, # assets - 0, # feeAssetItem - { unlimited: true } # weightLimit - ] - events: - - name: xcmPallet.Attempted - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '761,173,000', proofSize: 0 }}} - - name: dmpQueue.ExecutedDownward - chain: *assets_parachain - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '166,944,000', proofSize: 0 }}} - - - name: Get the balances of the Assets Parachain's sender & Relay Chain's receiver - actions: - - queries: - balance_ap_sender_before: - chain: *assets_parachain - pallet: system - call: account - args: [ *ap_wallet ] - balance_rc_receiver_before: - chain: *relay_chain - pallet: system - call: account - args: [ *rc_wallet ] - its: - - name: Should teleport native assets back from Assets Parachain to the Relay Chain - actions: - - extrinsics: - - chain: *assets_parachain - signer: *ap_signer - pallet: polkadotXcm - call: limitedTeleportAssets - args: [ - *rc_dest, # destination - *rc_benf, # beneficiary - { v3: [ *ap_ksm_fungible ] }, # assets - 0, # feeAssetItem - { unlimited: true } # weightLimit - ] - events: - - name: polkadotXcm.Attempted - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '539,494,000', proofSize: '7,133' }}} - - name: messageQueue.Processed - chain: *relay_chain - threshold: *weight_threshold - result: { origin: { Ump: { Para: '1,000' } }, weightUsed: { refTime: '298,716,000', proofSize: '0' }, success: true } - - queries: - balance_ap_sender_after: - chain: *assets_parachain - pallet: system - call: account - args: [ *ap_wallet ] - balance_rc_receiver_after: - chain: *relay_chain - pallet: system - call: account - args: [ *rc_wallet ] - - - name: Should reduce the balance of the sender - actions: - - asserts: - balanceDecreased: - args: [ - { - balances: { - before: $balance_ap_sender_before, - after: $balance_ap_sender_after, - }, - amount: *amount - } - ] - - - name: Should increase the balance of the receiver - actions: - - asserts: - balanceIncreased: - args: [ - { - balances: { - before: $balance_rc_receiver_before, - after: $balance_rc_receiver_after, - } - } - ] - - - name: polkadotXcm.send | Native - Transact(system.remark) - its: - - name: Assets Parachain SHOULD NOT be able to dispatch 'send' call - actions: - - extrinsics: - - chain: *assets_parachain - signer: *ap_signer - pallet: polkadotXcm - call: send - args: [ - *rc_dest, # destination - { - v3: [ #message - { - UnpaidExecution: { - weightLimit: Unlimited - } - }, - { - Transact: { - originKind: Native, - requireWeightAtMost: *weight_at_most, - call: $system_remark - } - } - ] - } - ] - events: - - name: system.ExtrinsicFailed - result: { dispatchError: BadOrigin } - - - name: polkadotXcm.limitedReserveTransferAssets - its: - - name: Should NOT be able to reserve transfer native assets from the Assets Parachain to the Relay Chain - actions: - - extrinsics: - - chain: *assets_parachain - signer: *ap_signer - pallet: polkadotXcm - call: limitedReserveTransferAssets - args: [ - *rc_dest, # destination - *rc_benf, # beneficiary - { v3: [ *ap_ksm_fungible ] }, # assets - 0, # feeAssetItem - { unlimited: true } # weightLimit - ] - events: - - name: polkadotXcm.Attempted - result: { outcome: { Error: Barrier }} diff --git a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/3_force_hrmp-open-channels.yml b/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/3_force_hrmp-open-channels.yml deleted file mode 100644 index dfdae028f00..00000000000 --- a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/3_force_hrmp-open-channels.yml +++ /dev/null @@ -1,122 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9900 - assets_parachain: - wsPort: 9910 - paraId: &ap_id 1000 - penpal_parachain: - wsPort: 9920 - paraId: &pp_id 2000 - variables: - common: - amount: &amount 2000000000000 - hrmp_channels: - proposed_max_capacity: &max_capacity 8 - proposed_max_message_size: &max_message_size 8192 - channel: &channel { - maxCapacity: *max_capacity, - maxTotalSize: *max_message_size, - maxMessageSize: *max_message_size, - msgCount: 0, - totalSize: 0, - mqcHead: null, - senderDeposit: 0, - recipientDeposit: 0 - } - chains: - relay_chain: - signer: &rc_signer //Alice - assets_parachain_account: - sovereign_account: &ap_sovereign F7fq1jSNVTPfJmaHaXCMtatT1EZefCUsa7rRiQVNR5efcah - penpal_parachain: - sovereign_account: &pp_sovereign F7fq1jMZkfuCuoMTyiEVAP2DMpMt18WopgBqTJznLihLNbZ - -tests: - - name: HRMP - beforeEach: - - name: DEPENDENCY | Penpal Parachain Sovereign account in the Relay Chain needs to be funded - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - pallet: balances - call: transfer - args: [ - *pp_sovereign, # destination - *amount, # value - ] - events: - - name: balances.Transfer - - - name: DEPENDENCY | Assets Parachain Sovereign account in the Relay Chain needs to be funded - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - pallet: balances - call: transfer - args: [ - *ap_sovereign, # destination - *amount, # value - ] - events: - - name: balances.Transfer - describes: - - name: hrmp.forceOpenHrmpChannel (Penpal Parachain → Assets Parachain) - its: - - name: Open Penpal Parachain to Assets Parachain - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - sudo: true - pallet: hrmp - call: forceOpenHrmpChannel - args: [ - *pp_id, - *ap_id, - *max_capacity, - *max_message_size - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: hrmp.HrmpChannelForceOpened - - - name: hrmp.forceOpenHrmpChannel (Assets Parachain → PenPal Parachain) - its: - - name: Open Assets Parachain to PenPal Parachain - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - sudo: true - pallet: hrmp - call: forceOpenHrmpChannel - args: [ - *ap_id, - *pp_id, - *max_capacity, - *max_message_size - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: hrmp.HrmpChannelForceOpened - - - name: hrmp.forceProcessHrmpOpen (make sure all the channels are open) - its: - - name: Make sure all the pending channels are open - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - sudo: true - pallet: hrmp - call: forceProcessHrmpOpen - args: [ 2 ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } diff --git a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/4_hrmp.yml b/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/4_hrmp.yml deleted file mode 100644 index 02e53da7558..00000000000 --- a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/0_xcm/4_hrmp.yml +++ /dev/null @@ -1,388 +0,0 @@ ---- -# Note: This tests depends on the 3_hrmp-open-channels.yml for opening channels, otherwise teleports aren't going to -# work. -settings: - chains: - relay_chain: &relay_chain - wsPort: 9900 - assets_parachain: &assets_parachain - wsPort: 9910 - paraId: &ap_id 1000 - penpal_parachain: &penpal_parachain - wsPort: 9920 - paraId: &pp_id 2000 - variables: - common: - mint_amount: &mint_amount 1000000000000 - amount: &amount 100000000000 - require_weight_at_most: &weight_at_most {refTime: 1200000000, proofSize: 20000} - amount_to_send: &amount_to_send 500000000000 - weight_threshold: &weight_threshold { refTime: [10, 10], proofSize: [10, 10] } - chains: - relay_chain: - signer: &rc_signer //Alice - assets_parachain_destination: &ap_dest { v3: { 0, interior: { x1: { parachain: *ap_id }}}} - assets_parachain_dest_routed: &ap_dest_routed { v3: { parents: 1, interior: { x1: { parachain: *ap_id } }}} - assets_parachain_account: - signer: &ap_signer //Alice - wallet: &ap_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F - asset_id: &asset_id 2 - assets_pallet_id: &assets_pallet_id 50 - asset_min_balance: &asset_ed 1000 - penpal_parachain_destination: &pp_dest { v3: { parents: 1, interior: { x1: { parachain: *pp_id } }}} - ksm: &ap_ksm { concrete: { parents: 1, interior: { here: true }}} - ksm_fungible: &ap_ksm_fungible { id: *ap_ksm, fun: { fungible: *amount }} - suff_asset: &suff_asset { concrete: { parents: 0, interior: { x2: [ { PalletInstance: *assets_pallet_id }, { GeneralIndex: *asset_id } ] }}} - suff_asset_fail: &suff_asset_fail { concrete: { parents: 0, interior: { x2: [ { PalletInstance: *assets_pallet_id }, { GeneralIndex: 3 } ] }}} - suff_asset_fungible_fail: &ap_suff_asset_fungible_fail { id: *suff_asset_fail, fun: { fungible: 200000000000 }} - penpal_parachain: - sovereign_account: &pp_sovereign_sibl FBeL7EAeUroLWXW1yfKboiqTqVfbRBcsUKd6QqVf4kGBySS - signer: &pp_signer //Alice - penpal_parachain_account: &pp_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' - decodedCalls: - force_create_asset: - chain: *assets_parachain - pallet: assets - call: forceCreate - args: [ - *asset_id, - { Id: *ap_wallet }, # owner - true, # isSufficient - *asset_ed # minBalance - ] - force_create_asset2: - chain: *assets_parachain - pallet: assets - call: forceCreate - args: [ - *asset_id, - { Id: *ap_wallet }, # owner - true, # isSufficient - *asset_ed # minBalance - ] - -tests: - - name: HRMP - describes: - - name: polkadotXcm.limitedReserveTransferAssets (Asset) | Assets Parachain -> Penpal Parachain - before: - - name: DEPENDENCY | A sufficient Asset should exist in the Assets Parachain - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - sudo: true - pallet: xcmPallet - call: send - args: [ - *ap_dest, # destination - { - v3: [ #message - { - UnpaidExecution: { - weightLimit: Unlimited - } - }, - { - SetTopic: '0x0123456789012345678901234567891201234567890123456789012345678912' - }, - { - Transact: { - originKind: Superuser, - requireWeightAtMost: *weight_at_most, - call: $force_create_asset - } - } - ] - } - ] - events: - - name: xcmPallet.Sent - - name: dmpQueue.ExecutedDownward - chain: *assets_parachain - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '1,216,703,000', proofSize: '20,000' }}} - - queries: - forced_created_asset: - chain: *assets_parachain - pallet: assets - call: asset - args: [ *asset_id ] - - asserts: - isSome: - args: [ $forced_created_asset ] - - - name: DEPENDENCY | Some Assets should be minted for the sender - actions: - - extrinsics: - - chain: *assets_parachain - signer: *ap_signer - pallet: assets - call: mint - args: [ - *asset_id, - *ap_wallet, - *mint_amount - ] - events: - - name: assets.Issued - result: { assetId: *asset_id, owner: *ap_wallet, amount: *mint_amount } - - its: - - name: Assets Parachain should be able to reserve transfer an Asset to Penpal Parachain - actions: - - extrinsics: - - chain: *assets_parachain - signer: *ap_signer - pallet: polkadotXcm - call: limitedReserveTransferAssets - args: [ - *pp_dest, # destination - { # beneficiary - V3: { - parents: 0, - interior: { - X1: { - AccountId32: { - id: *pp_acc - } - } - } - } - }, - { # assets - V3: [ - { - id: { - Concrete: { - parents: 0, - interior: { - X2: [ - { - PalletInstance: *assets_pallet_id - }, - { - GeneralIndex: *asset_id - } - ] - } - } - }, - fun: { - Fungible: *amount_to_send - } - } - ] - }, - 0, # feeAssetItem - Unlimited # weightLimit - ] - events: - - name: polkadotXcm.Attempted - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '679,150,000', proofSize: '6,196' }}} - - name: assets.Transferred - result: { - assetId: *asset_id, - from: *ap_wallet, - to: *pp_sovereign_sibl, - amount: *amount_to_send - } - - - name: polkadotXcm.limitedReserveTransferAssets (KSM) | Assets Parachain -> Penpal Parachain - its: - - name: Assets Parachain should be able to reserve transfer KSM to Penpal Parachain - actions: - - extrinsics: - - chain: *assets_parachain - signer: *ap_signer - pallet: polkadotXcm - call: limitedReserveTransferAssets - args: [ - *pp_dest, # destination - { # beneficiary - V3: { - parents: 0, - interior: { - X1: { - AccountId32: { - id: *pp_acc - } - } - } - } - }, - { # assets - V3: [ - *ap_ksm_fungible - ] - }, - 0, # feeAssetItem - Unlimited # weightLimit - ] - events: - - name: polkadotXcm.Attempted - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '679,150,000', proofSize: '6,196' }}} - - name: balances.Endowed - result: { - account: *pp_sovereign_sibl, - freeBalance: *amount - } - - - name: polkadotXcm.send( assets.forceCreateAsset ) | 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 in Assets Parachain - actions: - - extrinsics: - - chain: *penpal_parachain - signer: *pp_signer - sudo: true - pallet: polkadotXcm - call: send - args: [ - *ap_dest_routed, # destination - { - v3: [ #message - { - WithdrawAsset: [ - { - id: { - concrete: { - parents: 0, - interior: { - X2: [ - { PalletInstance: *assets_pallet_id }, - { GeneralIndex: *asset_id } - ] - } - } - }, - fun: { fungible: *amount }} - ] - }, - { - BuyExecution: { - fees: { id: *suff_asset, fun: { fungible: *amount }}, - weightLimit: Unlimited - } - }, - { - Transact: { - originKind: SovereignAccount, - requireWeightAtMost: *weight_at_most, - call: $force_create_asset2 - } - }, - { - RefundSurplus - }, - { - DepositAsset: { - assets: { Wild: All }, - beneficiary: { - parents: 0, - interior: { - X1: { - AccountId32: { - network: , # None - id: *pp_acc - } - } - }} - } - } - ] - } - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: polkadotXcm.Sent - - name: assets.Burned - chain: *assets_parachain - result: { assetId: *asset_id, owner: *pp_sovereign_sibl } - - name: assets.Issued - chain: *assets_parachain - result: { assetId: *asset_id } - - queries: - assets_balance_pp_sovereign_after: - chain: *assets_parachain - pallet: assets - call: account - args: [ - *asset_id, - *pp_sovereign_sibl - ] - forced_created_asset2: - chain: *assets_parachain - pallet: assets - call: asset - args: [ 3 ] - - asserts: - isSome: - args: [ $forced_created_asset2 ] - - name: Should reduce the assets 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 assets if not enough balance - actions: - - extrinsics: - - chain: *penpal_parachain - signer: *pp_signer - sudo: true - pallet: polkadotXcm - call: send - args: [ - *ap_dest_routed, # destination - { - v3: [ #message - { - WithdrawAsset: [*ap_suff_asset_fungible_fail] - }, - { - BuyExecution: { - fees: *ap_suff_asset_fungible_fail, - weightLimit: Unlimited - } - }, - { - Transact: { - originKind: SovereignAccount, - requireWeightAtMost: *weight_at_most, - call: $force_create_asset2 - } - } - ] - } - ] - events: - - name: xcmpQueue.Fail - chain: *assets_parachain - threshold: *weight_threshold - result: { - error: FailedToTransactAsset, - weight: { refTime: '152,426,000', proofSize: '3,593' } - } diff --git a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/config.toml b/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/config.toml deleted file mode 100644 index 1ec06b3fa10..00000000000 --- a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-kusama/config.toml +++ /dev/null @@ -1,71 +0,0 @@ -[relaychain] -default_command = "./bin/polkadot" -default_args = [ "-lparachain=debug", "-lxcm=trace" ] -chain = "kusama-local" - - [[relaychain.nodes]] - name = "alice" - ws_port = 9900 - validator = true - args = ["--state-cache-size=0"] - - [[relaychain.nodes]] - name = "bob" - ws_port = 9901 - validator = true - - [[relaychain.nodes]] - name = "charlie" - ws_port = 9902 - validator = true - - [[relaychain.nodes]] - name = "dave" - ws_port = 9903 - validator = true - -[[parachains]] -id = 1000 -chain = "asset-hub-kusama-local" -cumulus_based = true - - [[parachains.collators]] - name = "collator1" - ws_port = 9910 - command = "./bin/polkadot-parachain" - args = [ "-lxcm=trace", "--state-cache-size=0" ] - - [[parachains.collators]] - name = "collator2" - ws_port = 9911 - command = "./bin/polkadot-parachain" - args = [ "-lxcm=trace" ] - -[[parachains]] -id = 2000 -chain = "penpal-kusama-2000" -cumulus_based = true - - [[parachains.collators]] - name = "collator3" - ws_port = 9920 - command = "./bin/polkadot-parachain" - args = [ "-lxcm=trace", "--state-cache-size=0" ] - - [[parachains.collators]] - name = "collator4" - ws_port = 9921 - command = "./bin/polkadot-parachain" - args = [ "-lxcm=trace" ] - -# [[hrmpChannels]] -# sender = 1000 -# recipient = 2000 -# maxCapacity = 8 -# maxMessageSize = 8192 - -# [[hrmpChannels]] -# sender = 2000 -# recipient = 1000 -# maxCapacity = 8 -# maxMessageSize = 8192 diff --git a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/0_init.yml b/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/0_init.yml deleted file mode 100644 index a6d3fb3ec83..00000000000 --- a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/0_init.yml +++ /dev/null @@ -1,145 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9800 - assets_parachain: &assets_parachain - wsPort: 9810 - paraId: &ap_id 1000 - penpal_parachain: &penpal_parachain - wsPort: 9820 - paraId: &pp_id 2000 - variables: - common: - xcm_version: &xcm_version '3' - require_weight_at_most: &weight_at_most {refTime: 1000000000, proofSize: 200000} - weight_threshold: &weight_threshold { refTime: [10, 10], proofSize: [10, 10] } - chains: - relay_chain: - signer: &rc_signer //Alice - assets_parachain_destination: &ap_dest { v3: { 0, interior: { x1: { parachain: *ap_id }}}} - penpal_parachain: - signer: &pp_signer //Alice - decodedCalls: - ap_force_xcm_version: - chain: *assets_parachain - pallet: polkadotXcm - call: forceXcmVersion - args: [ - { # location - parents: 1, - interior: Here - }, - *xcm_version # xcmVersion - ] - -tests: - - name: Initialize Chains - its: - - name: XCM supported versions between chains - actions: - - extrinsics: # Relay Chain sets supported version for Asset Parachain - - chain: *relay_chain - sudo: true - signer: *rc_signer - pallet: xcmPallet - call: forceXcmVersion - args: [ - { # location - parents: 0, - interior: { - X1: { - Parachain: *ap_id - } - } - }, - *xcm_version # xcmVersion - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: xcmPallet.SupportedVersionChanged - result: { location: { parents: 0, interior: { X1: { Parachain: *ap_id }}}, version: *xcm_version } - - extrinsics: # Relay Chain sets supported version for Penpal Parachain - - chain: *relay_chain - sudo: true - signer: *rc_signer - pallet: xcmPallet - call: forceXcmVersion - args: [ - { # location - parents: 0, - interior: { - X1: { - Parachain: *pp_id - } - } - }, - *xcm_version # xcmVersion - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: xcmPallet.SupportedVersionChanged - result: { location: { parents: 0, interior: { X1: { Parachain: *pp_id }}}, version: *xcm_version } - - extrinsics: # Asset Parachain sets supported version for Relay Chain through it - - chain: *relay_chain - signer: *rc_signer - sudo: true - pallet: xcmPallet - call: send - args: [ - *ap_dest, # destination - { - v3: [ #message - { - UnpaidExecution: { - weightLimit: { - limited: { - refTime: 3200000000, - proofSize: 200000 - } - } - } - }, - { - Transact: { - originKind: Superuser, - requireWeightAtMost: *weight_at_most, - call: $ap_force_xcm_version - } - } - ] - } - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: xcmPallet.Sent - - name: dmpQueue.ExecutedDownward - chain: *assets_parachain - threshold: *weight_threshold - result: { - outcome: { Complete: { refTime: '1,019,210,000', proofSize: '200,000' }} - } - - name: polkadotXcm.SupportedVersionChanged - chain: *assets_parachain - result: { location: { parents: 1, interior: Here }, version: *xcm_version } - - extrinsics: # Penpal Parachain sets supported version for Relay Chain - - chain: *penpal_parachain - signer: *pp_signer - sudo: true - pallet: polkadotXcm - call: forceXcmVersion - args: [ - { # location - parents: 1, - interior: Here - }, - *xcm_version # xcmVersion - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: polkadotXcm.SupportedVersionChanged - result: { location: { parents: 1, interior: Here}, version: *xcm_version } diff --git a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/1_dmp.yml b/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/1_dmp.yml deleted file mode 100644 index 36b296f3eb1..00000000000 --- a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/1_dmp.yml +++ /dev/null @@ -1,263 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9800 - assets_parachain: &assets_parachain - wsPort: 9810 - paraId: &ap_id 1000 - variables: - common: - weight_threshold: &weight_threshold { refTime: [10, 10], proofSize: [10, 10] } - chains: - relay_chain: - signer: &rc_signer //Alice - wallet: &rc_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F - assets_parachain_destination: &ap_dest { v3: { parents: 0, interior: { x1: { parachain: *ap_id }}}} - assets_parachain_account: &ap_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' - assets_parachain_beneficiary: &ap_benf {v3: { parents: 0, interior: { x1: { accountId32: { id: *ap_acc }}}}} - ksm: &rc_ksm { concrete: { parents: 0, interior: { here: true }}} - amount: &amount 1000000000000 - ksm_fungible: &rc_ksm_fungible { id: *rc_ksm, fun: { fungible: *amount }} - require_weight_at_most: &rc_weight_at_most {refTime: 1000000000, proofSize: 200000} - assets_parachain_account: - wallet: &ap_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F - asset_id: &asset_id 1 - asset_min_balance: &asset_ed 1000 - decodedCalls: - force_create_asset: - chain: *assets_parachain - pallet: assets - call: forceCreate - args: [ - *asset_id, - { Id: *ap_wallet }, # owner - true, # isSufficient - *asset_ed # minBalance - ] - -tests: - - name: DMP - its: [] - describes: - - name: xcmPallet.limitedTeleportAssets - before: &before_get_balances - - name: Get the balances of the Relay Chain's sender & Assets Parachain's receiver - actions: - - queries: - balance_rc_sender_before: - chain: *relay_chain - pallet: system - call: account - args: [ *rc_wallet ] - balance_ap_receiver_before: - chain: *assets_parachain - pallet: system - call: account - args: [ *ap_wallet ] - its: - - name: Should teleport native assets from the Relay Chain to the Assets Parachain - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - pallet: xcmPallet - call: limitedTeleportAssets - args: [ - *ap_dest, # destination - *ap_benf, # beneficiary - { v3: [ *rc_ksm_fungible ] }, # assets - 0, # feeAssetItem - { unlimited: true } # weightLimit - ] - events: - - name: xcmPallet.Attempted - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '3,000,000,000', proofSize: 0 }}} - - name: dmpQueue.ExecutedDownward - chain: *assets_parachain - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '166,944,000', proofSize: 0 }}} - - queries: - balance_rc_sender_after: - chain: *relay_chain - pallet: system - call: account - args: [ *rc_wallet ] - balance_ap_receiver_after: - chain: *assets_parachain - pallet: system - call: account - args: [ *ap_wallet ] - - - name: Should reduce the balance of the sender - actions: - - asserts: - balanceDecreased: - args: [ - { - balances: { - before: $balance_rc_sender_before, - after: $balance_rc_sender_after, - }, - amount: *amount - } - ] - - - name: Should increase the balance of the receiver - actions: - - asserts: - balanceIncreased: - args: [ - { - balances: { - before: $balance_ap_receiver_before, - after: $balance_ap_receiver_after, - } - } - ] - - - name: xcmPallet.send | Superuser - Transact(assets.forceCreate) - its: - - name: Relay Chain Superuser account SHOULD be able to execute a XCM Transact instruction in the Assets Parachain - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - sudo: true - pallet: xcmPallet - call: send - args: [ - *ap_dest, # destination - { - v3: [ #message - { - UnpaidExecution: { - weightLimit: Unlimited - } - }, - { - Transact: { - originType: Superuser, - requireWeightAtMost: *rc_weight_at_most, - call: $force_create_asset - } - } - ] - } - ] - events: - - name: xcmPallet.Sent - - name: dmpQueue.ExecutedDownward - chain: *assets_parachain - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '1,014,103,000', proofSize: '200,000' }}} - - queries: - forced_created_asset: - chain: *assets_parachain - pallet: assets - call: asset - args: [ *asset_id ] - - asserts: - isSome: - args: [ $forced_created_asset ] - - - name: xcmPallet.send | Native - Transact(assets.forceCreate) - its: - - name: Relay Chain Native account SHOULD NOT be able to execute a XCM Transact instruction in the Assets Parachain - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - pallet: xcmPallet - call: send - args: [ - *ap_dest, # destination - { - v3: [ #message - { - UnpaidExecution: { - weightLimit: Unlimited - } - }, - { - Transact: { - originType: Native, - requireWeightAtMost: *rc_weight_at_most, - call: $force_create_asset - } - } - ] - } - ] - events: - - name: system.ExtrinsicFailed - result: { dispatchError: BadOrigin } - - - name: xcmPallet.limitedReserveTransferAssets - before: *before_get_balances - its: - - name: SHOULD NOT reserved transfer native assets from the Relay Chain to the Assets Parachain - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - pallet: xcmPallet - call: limitedReserveTransferAssets - args: [ - *ap_dest, # destination - *ap_benf, # beneficiary - { v3: [ *rc_ksm_fungible ] }, # assets - 0, # feeAssetItem - { unlimited: true } # weightLimit - ] - events: - - name: xcmPallet.Attempted - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '2,000,000,000', proofSize: 0 }}} - - name: dmpQueue.ExecutedDownward - chain: *assets_parachain - threshold: *weight_threshold - result: { - outcome: { - Incomplete: [ - { refTime: '1,000,000,000', proofSize: 0 }, - UntrustedReserveLocation - ] - } - } - - queries: - balance_rc_sender_after: - chain: *relay_chain - pallet: system - call: account - args: [ *rc_wallet ] - balance_ap_receiver_after: - chain: *assets_parachain - pallet: system - call: account - args: [ *ap_wallet ] - - - name: Should reduce the balance of the sender - actions: - - asserts: - balanceDecreased: - args: [ - { - balances: { - before: $balance_rc_sender_before, - after: $balance_rc_sender_after, - }, - amount: *amount - } - ] - - - name: Should keep the balance of the receiver - actions: - - asserts: - equal: - args: - [ - $balance_ap_receiver_before, - $balance_ap_receiver_after - ] diff --git a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/2_ump.yml b/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/2_ump.yml deleted file mode 100644 index fa84d4b006a..00000000000 --- a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/2_ump.yml +++ /dev/null @@ -1,194 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9800 - assets_parachain: &assets_parachain - wsPort: 9810 - paraId: &ap_id 1000 - variables: - common: - amount: &amount 1000000000000 - require_weight_at_most: &weight_at_most {refTime: 1000000000, proofSize: 0} - weight_threshold: &weight_threshold { refTime: [10, 10], proofSize: [10, 10] } - chains: - relay_chain: - signer: &rc_signer //Alice - wallet: &rc_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F - assets_parachain_destination: &ap_dest { v3: { 0, interior: { x1: { parachain: *ap_id }}}} - assets_parachain_account: &ap_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' - assets_parachain_beneficiary: &ap_benf {v3: { parents: 0, interior: { x1: { accountId32: { id: *ap_acc }}}}} - ksm: &rc_ksm { concrete: { 0, interior: { here: true }}} - ksm_fungible: &rc_ksm_fungible { id: *rc_ksm, fun: { fungible: *amount }} - assets_parachain_account: - signer: &ap_signer //Alice - wallet: &ap_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F - relay_chain_destination: &rc_dest { v3: { parents: 1, interior: { here: true }}} - assets_parachain_account: &rc_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' - relay_chain_beneficiary: &rc_benf {v3: { parents: 0, interior: { x1: { accountId32: { id: *rc_acc }}}}} - ksm: &ap_ksm { concrete: { parents: 1, interior: { here: true }}} - ksm_fungible: &ap_ksm_fungible { id: *ap_ksm, fun: { fungible: *amount }} - decodedCalls: - system_remark: - chain: *relay_chain - pallet: system - call: remark - args: [ 0x0011 ] - -tests: - - name: UMP - describes: - - name: polkadotXcm.limitedTeleportAssets - before: - - name: DEPENDENCY | Do a 'limitedTeleportAssets' from the Relay Chain to the Assets Parachain to have funds to send them back - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - pallet: xcmPallet - call: limitedTeleportAssets - args: [ - *ap_dest, # destination - *ap_benf, # beneficiary - { v3: [ *rc_ksm_fungible ] }, # assets - 0, # feeAssetItem - { unlimited: true } # weightLimit - ] - events: - - name: xcmPallet.Attempted - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '3,000,000,000', proofSize: 0 }}} - - name: dmpQueue.ExecutedDownward - chain: *assets_parachain - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '166,944,000', proofSize: 0 }}} - - - name: Get the balances of the Assets Parachain's sender & Relay Chain's receiver - actions: - - queries: - balance_ap_sender_before: - chain: *assets_parachain - pallet: system - call: account - args: [ *ap_wallet ] - balance_rc_receiver_before: - chain: *relay_chain - pallet: system - call: account - args: [ *rc_wallet ] - - its: - - name: Should be able to teleport native assets back from Assets Parachain to the Relay Chain - actions: - - extrinsics: - - chain: *assets_parachain - signer: *ap_signer - pallet: polkadotXcm - call: limitedTeleportAssets - args: [ - *rc_dest, # destination - *rc_benf, # beneficiary - { v3: [ *ap_ksm_fungible ] }, # assets - 0, # feeAssetItem - { unlimited: true } # weightLimit - ] - events: - - name: polkadotXcm.Attempted - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '533,283,000', proofSize: '7,096' }}} - - name: messageQueue.Processed - chain: *relay_chain - threshold: *weight_threshold - result: { origin: { Ump: { Para: '1,000' } }, weightUsed: { refTime: '4,000,000,000', proofSize: '0' }, success: true } - - queries: - balance_ap_sender_after: - chain: *assets_parachain - pallet: system - call: account - args: [ *ap_wallet ] - balance_rc_receiver_after: - chain: *relay_chain - pallet: system - call: account - args: [ *rc_wallet ] - - - name: Should reduce the balance of the sender - actions: - - asserts: - balanceDecreased: - args: [ - { - balances: { - before: $balance_ap_sender_before, - after: $balance_ap_sender_after, - }, - amount: *amount - } - ] - - - name: Should increase the balance of the receiver - actions: - - asserts: - balanceIncreased: - args: [ - { - balances: { - before: $balance_rc_receiver_before, - after: $balance_rc_receiver_after, - } - } - ] - - - name: polkadotXcm.send | Native - Transact(system.remark) - its: - - name: Assets Parachain SHOULD NOT be able to dispatch 'send' call - actions: - - extrinsics: - - chain: *assets_parachain - signer: *ap_signer - pallet: polkadotXcm - call: send - args: [ - *rc_dest, # destination - { - v3: [ #message - { - UnpaidExecution: { - weightLimit: Unlimited - } - }, - { - Transact: { - originType: Native, - requireWeightAtMost: *weight_at_most, - call: $system_remark - } - } - ] - } - ] - events: - - name: system.ExtrinsicFailed - attributes: - - type: SpRuntimeDispatchError - value: BadOrigin - - - name: polkadotXcm.limitedReserveTransferAssets - its: - - name: Should NOT be able to reserve transfer native assets from the Assets Parachain to the Relay Chain - actions: - - extrinsics: - - chain: *assets_parachain - signer: *ap_signer - pallet: polkadotXcm - call: limitedReserveTransferAssets - args: [ - *rc_dest, # destination - *rc_benf, # beneficiary - { v3: [ *ap_ksm_fungible ] }, # assets - 0, # feeAssetItem - { unlimited: true } # weightLimit - ] - events: - - name: polkadotXcm.Attempted - result: { outcome: { Error: Barrier }} diff --git a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/3_force_hrmp-open-channels.yml b/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/3_force_hrmp-open-channels.yml deleted file mode 100644 index ecf344a073b..00000000000 --- a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/3_force_hrmp-open-channels.yml +++ /dev/null @@ -1,120 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9800 - assets_parachain: - wsPort: 9810 - paraId: &ap_id 1000 - penpal_parachain: - wsPort: 9820 - paraId: &pp_id 2000 - variables: - common: - amount: &amount 2000000000000 - hrmp_channels: - proposed_max_capacity: &max_capacity 8 - proposed_max_message_size: &max_message_size 8192 - channel: &channel { - maxCapacity: *max_capacity, - maxTotalSize: *max_message_size, - maxMessageSize: *max_message_size, - msgCount: 0, - totalSize: 0, - mqcHead: null, - senderDeposit: 0, - recipientDeposit: 0 - } - chains: - relay_chain: - signer: &rc_signer //Alice - assets_parachain_account: - sovereign_account: &ap_sovereign 5Ec4AhPZk8STuex8Wsi9TwDtJQxKqzPJRCH7348Xtcs9vZLJ - penpal_parachain: - sovereign_account: &pp_sovereign F7fq1jMZkfuCuoMTyiEVAP2DMpMt18WopgBqTJznLihLNbZ - -tests: - - name: HRMP - beforeEach: - - name: DEPENDENCY | Penpal Parachain Sovereign account in the Relay Chain needs to be funded - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - pallet: balances - call: transfer - args: [ - *pp_sovereign, # destination - *amount, # value - ] - events: - - name: balances.Transfer - - - name: DEPENDENCY | Assets Parachain Sovereign account in the Relay Chain needs to be funded - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - pallet: balances - call: transfer - args: [ - *ap_sovereign, # destination - *amount, # value - ] - events: - - name: balances.Transfer - describes: - - name: hrmp.hrmpInitOpenChannel (Penpal Parachain → Assets Parachain) - its: - - name: Open Penpal Parachain to Assets Parachain - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - sudo: true - pallet: hrmp - call: forceOpenHrmpChannel - args: [ - *pp_id, - *ap_id, - *max_capacity, - *max_message_size - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: hrmp.HrmpChannelForceOpened - - name: hrmp.hrmpInitOpenChannel (Assets Parachain → PenPal Parachain) - its: - - name: Open Assets Parachain to PenPal Parachain - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - sudo: true - pallet: hrmp - call: forceOpenHrmpChannel - args: [ - *ap_id, - *pp_id, - *max_capacity, - *max_message_size - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: hrmp.HrmpChannelForceOpened - - name: hrmp.forceProcessHrmpOpen (make sure all the channels are open) - its: - - name: Make sure all the pending channels are open - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - sudo: true - pallet: hrmp - call: forceProcessHrmpOpen - args: [ 2 ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } diff --git a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/4_hrmp.yml b/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/4_hrmp.yml deleted file mode 100644 index 681af698c16..00000000000 --- a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/0_xcm/4_hrmp.yml +++ /dev/null @@ -1,388 +0,0 @@ ---- -# Note: This tests depends on the 3_hrmp-open-channels.yml for opening channels, otherwise teleports aren't going to -# work. -settings: - chains: - relay_chain: &relay_chain - wsPort: 9800 - assets_parachain: &assets_parachain - wsPort: 9810 - paraId: &ap_id 1000 - penpal_parachain: &penpal_parachain - wsPort: 9820 - paraId: &pp_id 2000 - variables: - common: - mint_amount: &mint_amount 1000000000000 - amount: &amount 1000000000000 - require_weight_at_most: &weight_at_most {refTime: 1200000000, proofSize: 20000} - amount_to_send: &amount_to_send 500000000000 - weight_threshold: &weight_threshold { refTime: [10, 10], proofSize: [10, 10] } - chains: - relay_chain: - signer: &rc_signer //Alice - assets_parachain_destination: &ap_dest { v3: { 0, interior: { x1: { parachain: *ap_id }}}} - assets_parachain_dest_routed: &ap_dest_routed { v3: { parents: 1, interior: { x1: { parachain: *ap_id } }}} - assets_parachain_account: - signer: &ap_signer //Alice - wallet: &ap_wallet 15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5 - asset_id: &asset_id 2 - assets_pallet_id: &assets_pallet_id 50 - asset_min_balance: &asset_ed 1000 - penpal_parachain_destination: &pp_dest { v3: { parents: 1, interior: { x1: { parachain: *pp_id } }}} - ksm: &ap_ksm { concrete: { parents: 1, interior: { here: true }}} - ksm_fungible: &ap_ksm_fungible { id: *ap_ksm, fun: { fungible: *amount }} - suff_asset: &suff_asset { concrete: { parents: 0, interior: { x2: [ { PalletInstance: *assets_pallet_id }, { GeneralIndex: *asset_id } ] }}} - suff_asset_fail: &suff_asset_fail { concrete: { parents: 0, interior: { x2: [ { PalletInstance: *assets_pallet_id }, { GeneralIndex: 3 } ] }}} - suff_asset_fungible_fail: &ap_suff_asset_fungible_fail { id: *suff_asset_fail, fun: { fungible: 200000000000 }} - penpal_parachain: - sovereign_account: &pp_sovereign_sibl 13cKp89Msu7M2PiaCuuGr1BzAsD5V3vaVbDMs3YtjMZHdGwR - signer: &pp_signer //Alice - penpal_parachain_account: &pp_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' - decodedCalls: - force_create_asset: - chain: *assets_parachain - pallet: assets - call: forceCreate - args: [ - *asset_id, - { Id: *ap_wallet }, # owner - true, # isSufficient - *asset_ed # minBalance - ] - force_create_asset2: - chain: *assets_parachain - pallet: assets - call: forceCreate - args: [ - *asset_id, - { Id: *ap_wallet }, # owner - true, # isSufficient - *asset_ed # minBalance - ] - -tests: - - name: HRMP - describes: - - name: polkadotXcm.limitedReserveTransferAssets (Asset) | Assets Parachain -> Penpal Parachain - before: - - name: DEPENDENCY | A sufficient Asset should exist in the Assets Parachain - actions: - - extrinsics: - - chain: *relay_chain - signer: *rc_signer - sudo: true - pallet: xcmPallet - call: send - args: [ - *ap_dest, # destination - { - v3: [ #message - { - UnpaidExecution: { - weightLimit: Unlimited - } - }, - { - SetTopic: '0x0123456789012345678901234567891201234567890123456789012345678912' - }, - { - Transact: { - originKind: Superuser, - requireWeightAtMost: *weight_at_most, - call: $force_create_asset - } - } - ] - } - ] - events: - - name: xcmPallet.Sent - - name: dmpQueue.ExecutedDownward - chain: *assets_parachain - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '1,216,703,000', proofSize: '20,000' }}} - - queries: - forced_created_asset: - chain: *assets_parachain - pallet: assets - call: asset - args: [ *asset_id ] - - asserts: - isSome: - args: [ $forced_created_asset ] - - - name: DEPENDENCY | Some Assets should be minted for the sender - actions: - - extrinsics: - - chain: *assets_parachain - signer: *ap_signer - pallet: assets - call: mint - args: [ - *asset_id, - *ap_wallet, - *mint_amount - ] - events: - - name: assets.Issued - result: { assetId: *asset_id, owner: *ap_wallet, amount: *mint_amount } - - its: - - name: Assets Parachain should be able to reserve transfer an Asset to Penpal Parachain - actions: - - extrinsics: - - chain: *assets_parachain - signer: *ap_signer - pallet: polkadotXcm - call: limitedReserveTransferAssets - args: [ - *pp_dest, # destination - { # beneficiary - V3: { - parents: 0, - interior: { - X1: { - AccountId32: { - id: *pp_acc - } - } - } - } - }, - { # assets - V3: [ - { - id: { - Concrete: { - parents: 0, - interior: { - X2: [ - { - PalletInstance: *assets_pallet_id - }, - { - GeneralIndex: *asset_id - } - ] - } - } - }, - fun: { - Fungible: *amount_to_send - } - } - ] - }, - 0, # feeAssetItem - Unlimited # weightLimit - ] - events: - - name: polkadotXcm.Attempted - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '673,627,000', proofSize: '6,196' }}} - - name: assets.Transferred - result: { - assetId: *asset_id, - from: *ap_wallet, - to: *pp_sovereign_sibl, - amount: *amount_to_send - } - - - name: polkadotXcm.limitedReserveTransferAssets (KSM) | Assets Parachain -> Penpal Parachain - its: - - name: Assets Parachain should be able to reserve transfer KSM to Penpal Parachain - actions: - - extrinsics: - - chain: *assets_parachain - signer: *ap_signer - pallet: polkadotXcm - call: limitedReserveTransferAssets - args: [ - *pp_dest, # destination - { # beneficiary - V3: { - parents: 0, - interior: { - X1: { - AccountId32: { - id: *pp_acc - } - } - } - } - }, - { # assets - V3: [ - *ap_ksm_fungible - ] - }, - 0, # feeAssetItem - Unlimited # weightLimit - ] - events: - - name: polkadotXcm.Attempted - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '679,150,000', proofSize: '6,196' }}} - - name: balances.Endowed - result: { - account: *pp_sovereign_sibl, - freeBalance: *amount - } - - - name: polkadotXcm.send( assets.forceCreateAsset ) | 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 in Assets Parachain - actions: - - extrinsics: - - chain: *penpal_parachain - signer: *pp_signer - sudo: true - pallet: polkadotXcm - call: send - args: [ - *ap_dest_routed, # destination - { - v3: [ #message - { - WithdrawAsset: [ - { - id: { - concrete: { - parents: 0, - interior: { - X2: [ - { PalletInstance: *assets_pallet_id }, - { GeneralIndex: *asset_id } - ] - } - } - }, - fun: { fungible: *amount_to_send }} - ] - }, - { - BuyExecution: { - fees: { id: *suff_asset, fun: { fungible: *amount_to_send }}, - weightLimit: Unlimited - } - }, - { - Transact: { - originKind: SovereignAccount, - requireWeightAtMost: *weight_at_most, - call: $force_create_asset2 - } - }, - { - RefundSurplus - }, - { - DepositAsset: { - assets: { Wild: All }, - beneficiary: { - parents: 0, - interior: { - X1: { - AccountId32: { - network: , # None - id: *pp_acc - } - } - }} - } - } - ] - } - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: polkadotXcm.Sent - - name: assets.Burned - chain: *assets_parachain - result: { assetId: *asset_id, owner: *pp_sovereign_sibl } - - name: assets.Issued - chain: *assets_parachain - result: { assetId: *asset_id } - - queries: - assets_balance_pp_sovereign_after: - chain: *assets_parachain - pallet: assets - call: account - args: [ - *asset_id, - *pp_sovereign_sibl - ] - forced_created_asset2: - chain: *assets_parachain - pallet: assets - call: asset - args: [ 3 ] - - asserts: - isSome: - args: [ $forced_created_asset2 ] - - name: Should reduce the assets 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 assets if not enough balance - actions: - - extrinsics: - - chain: *penpal_parachain - signer: *pp_signer - sudo: true - pallet: polkadotXcm - call: send - args: [ - *ap_dest_routed, # destination - { - v3: [ #message - { - WithdrawAsset: [*ap_suff_asset_fungible_fail] - }, - { - BuyExecution: { - fees: *ap_suff_asset_fungible_fail, - weightLimit: Unlimited - } - }, - { - Transact: { - originKind: SovereignAccount, - requireWeightAtMost: *weight_at_most, - call: $force_create_asset2 - } - } - ] - } - ] - events: - - name: xcmpQueue.Fail - chain: *assets_parachain - threshold: *weight_threshold - result: { - error: FailedToTransactAsset, - weight: { refTime: '152,426,000', proofSize: '3,593' } - } diff --git a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/config.toml b/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/config.toml deleted file mode 100644 index da53cd0ad4f..00000000000 --- a/cumulus/parachains/integration-tests/e2e/assets/asset-hub-polkadot/config.toml +++ /dev/null @@ -1,72 +0,0 @@ -[relaychain] -default_command = "./bin/polkadot" -default_args = [ "-lparachain=debug", "-lxcm=trace" ] -chain = "polkadot-local" - - [[relaychain.nodes]] - name = "alice" - ws_port = 9800 - validator = true - args = ["--state-cache-size=0"] - - [[relaychain.nodes]] - name = "bob" - ws_port = 9801 - validator = true - - [[relaychain.nodes]] - name = "charlie" - ws_port = 9802 - validator = true - - [[relaychain.nodes]] - name = "dave" - ws_port = 9803 - validator = true - -[[parachains]] -id = 1000 -chain = "asset-hub-polkadot-local" -cumulus_based = true - - [[parachains.collators]] - name = "collator1" - ws_port = 9810 - command = "./bin/polkadot-parachain" - args = [ "-lxcm=trace", "--state-cache-size=0" ] - - [[parachains.collators]] - name = "collator2" - ws_port = 9811 - command = "./bin/polkadot-parachain" - args = [ "-lxcm=trace" ] - - -[[parachains]] -id = 2000 -chain = "penpal-polkadot-2000" -cumulus_based = true - - [[parachains.collators]] - name = "collator3" - ws_port = 9820 - command = "./bin/polkadot-parachain" - args = [ "-lxcm=trace", "--state-cache-size=0" ] - - [[parachains.collators]] - name = "collator4" - ws_port = 9821 - command = "./bin/polkadot-parachain" - args = [ "-lxcm=trace" ] - -# [[hrmpChannels]] -# sender = 1000 -# recipient = 2000 -# maxCapacity = 8 -# maxMessageSize = 8192 - -# [[hrmpChannels]] -# sender = 2000 -# recipient = 1000 -# maxCapacity = 8 -# maxMessageSize = 8192 diff --git a/cumulus/parachains/integration-tests/e2e/collectives/README.md b/cumulus/parachains/integration-tests/e2e/collectives/README.md deleted file mode 100644 index 9c4efe7c950..00000000000 --- a/cumulus/parachains/integration-tests/e2e/collectives/README.md +++ /dev/null @@ -1,26 +0,0 @@ -E2E tests concerning Polkadot Governance and the Collectives Parachain. The tests run by the Parachain Integration Tests -[tool](https://github.com/paritytech/parachains-integration-tests/). - -# Requirements -The tests require some changes to the regular production runtime builds: - -## RelayChain runtime -1. Alice has SUDO -2. Public Referenda `StakingAdmin`, `FellowshipAdmin` tracks settings (see the corresponding keys of the `TRACKS_DATA` - constant in the `governance::tracks` module of the Relay Chain runtime crate): -``` yaml -prepare_period: 5 Block, -decision_period: 1 Block, -confirm_period: 1 Block, -min_enactment_period: 1 Block, -``` - -## Collectives runtime -1. Fellowship Referenda `Fellows` track settings (see the corresponding key of the `TRACKS_DATA` constant in the - `fellowship::tracks` module of the Collectives runtime crate): -``` yaml -prepare_period: 5 Block, -decision_period: 1 Block, -confirm_period: 1 Block, -min_enactment_period: 1 Block, -``` diff --git a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/0_xcm/0_init.yml b/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/0_xcm/0_init.yml deleted file mode 100644 index 33f4d603e2a..00000000000 --- a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/0_xcm/0_init.yml +++ /dev/null @@ -1,166 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9700 - collectives_parachain: &collectives_parachain - wsPort: 9710 - paraId: &cp_id 1001 - assethub_parachain: &assethub_parachain - wsPort: 9810 - paraId: &sp_id 1000 - variables: - xcm_version: &xcm_version 3 - weight_threshold: &weight_threshold { refTime: [10, 10], proofSize: [10, 10] } - chains: - accounts: - alice_signer: &alice_signer //Alice - decodedCalls: - ap_force_xcm_version: - chain: *collectives_parachain - pallet: polkadotXcm - call: forceXcmVersion - args: [ - { # location - parents: 1, - interior: Here - }, - *xcm_version - ] - -tests: - - name: Initialize Chains - its: - - name: XCM supported versions between chains - actions: - - extrinsics: # Relay Chain sets supported version for Collectives Parachain - - chain: *relay_chain - sudo: true - signer: *alice_signer - pallet: xcmPallet - call: forceXcmVersion - args: [ - { # location - parents: 0, - interior: { - X1: { - Parachain: *cp_id - } - } - }, - *xcm_version - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: xcmPallet.SupportedVersionChanged - result: { location: { parents: 0, interior: { X1: { Parachain: *cp_id }}}, version: *xcm_version } - - extrinsics: # Collectives Parachain sets supported version for Relay Chain through it - - chain: *relay_chain - signer: *alice_signer - sudo: true - pallet: xcmPallet - call: send - args: [ - { v3: { 0, interior: { x1: { parachain: *cp_id }}}}, # destination - { - v3: [ # message - { - UnpaidExecution: { - weightLimit: { - limited: { - refTime: 2200000000, # 2_200_000_000 - proofSize: 200000, # 200_000 - }, - } - } - }, - { - Transact: { - originKind: Superuser, - requireWeightAtMost: { - refTime: 200000000, # 200_000_000 - proofSize: 0, - }, - call: $ap_force_xcm_version - } - } - ] - } - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: xcmPallet.Sent - - name: polkadotXcm.SupportedVersionChanged - chain: *collectives_parachain - result: { location: { parents: 1, interior: Here }, version: *xcm_version } - - name: dmpQueue.ExecutedDownward - chain: *collectives_parachain - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '2,200,000,000', proofSize: 0 }}} - - extrinsics: # Relay Chain sets supported version for AssetHub Parachain - - chain: *relay_chain - sudo: true - signer: *alice_signer - pallet: xcmPallet - call: forceXcmVersion - args: [ - { # location - parents: 0, - interior: { - X1: { - Parachain: *sp_id - } - } - }, - *xcm_version - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: xcmPallet.SupportedVersionChanged - result: { location: { parents: 0, interior: { X1: { Parachain: *sp_id } } }, version: *xcm_version } - - extrinsics: # AssetHub Parachain sets supported version for Relay Chain through it - - chain: *relay_chain - signer: *alice_signer - sudo: true - pallet: xcmPallet - call: send - args: [ - { v3: { 0, interior: { x1: { parachain: *sp_id }}}}, # destination - { - v3: [ # message - { - UnpaidExecution: { - weightLimit: { - limited: { - refTime: 2200000000, # 2_200_000_000 - proofSize: 200000, # 200_000 - }, - } - } - }, - { - Transact: { - originKind: Superuser, - requireWeightAtMost: { - refTime: 200000000, # 200_000_000 - proofSize: 0, - }, - call: $ap_force_xcm_version - } - } - ] - } - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: xcmPallet.Sent - - name: polkadotXcm.SupportedVersionChanged - chain: *assethub_parachain - result: { location: { parents: 1, interior: Here }, version: *xcm_version } - - name: dmpQueue.ExecutedDownward - chain: *assethub_parachain - result: { outcome: { Complete: {} } } diff --git a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/0_xcm/1_teleport.yml b/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/0_xcm/1_teleport.yml deleted file mode 100644 index cda04859b19..00000000000 --- a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/0_xcm/1_teleport.yml +++ /dev/null @@ -1,168 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9700 - collectives_parachain: &collectives_parachain - wsPort: 9710 - paraId: &cp_id 1001 - variables: - weight_threshold: &weight_threshold { refTime: [10, 10], proofSize: [10, 10] } - accounts: - alice_signer: &acc_alice_signer //Alice - alice_account32: &acc_alice_acc32 '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' - alice_ss58: &acc_alice_ss58 '15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5' - checking_account: &checking_account '13UVJyLnbVp9x5XDyJv8g8r3UddNwBrdaH7AADCmw9XQWvYW' - -tests: - - name: Teleport assets from Relay Chain to Collectives Parachain successful. - before: - - name: Get the Alice balances on Relay & Collectives Chains. - actions: - - queries: - balance_rc_alice_1: - chain: *relay_chain - pallet: system - call: account - args: [ *acc_alice_acc32 ] - balance_cp_alice_1: - chain: *collectives_parachain - pallet: system - call: account - args: [ *acc_alice_acc32 ] - its: - - name: Teleport assets from Relay Chain to Collectives Parachain - actions: - - extrinsics: - - chain: *relay_chain - signer: *acc_alice_signer - pallet: xcmPallet - call: teleportAssets - args: [ - { v3: { 0, interior: { x1: { parachain: *cp_id }}}}, # destination - { v3: { parents: 0, interior: { x1: { accountId32: { id: *acc_alice_acc32 }}}}}, # beneficiary - { - v3: [ - # { - # # TODO use a separate Assets to pay a fee, to receive an exact amount of assets on beneficiary account. - # # a call with two assets fails with an error right now. - # id: { concrete: { 0, interior: { here: true }}}, - # fun: { fungible: 1000000000000 } # 1_000_000_000_000 - # }, - { - id: { concrete: { 0, interior: { here: true }}}, - fun: { fungible: 20000000000000 } # 20_000_000_000_000 - } - ] - }, # assets - 0, # feeAssetItem - ] - events: - - name: xcmPallet.Attempted - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '3,000,000,000', proofSize: 0 }}} - - name: dmpQueue.ExecutedDownward - chain: *collectives_parachain - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '4,000,000,000', proofSize: 0 }}} - - queries: - balance_rc_alice_2: - chain: *relay_chain - pallet: system - call: account - args: [ *acc_alice_acc32 ] - balance_cp_alice_2: - chain: *collectives_parachain - pallet: system - call: account - args: [ *acc_alice_acc32 ] - - name: Alice deposit check, balance decreased on Relay Chain, increased on Collectives. - actions: - - asserts: - balanceDecreased: - args: [ - { - balances: { - before: $balance_rc_alice_1, - after: $balance_rc_alice_2, - } - } - ] - balanceIncreased: - args: [ - { - balances: { - before: $balance_cp_alice_1, - after: $balance_cp_alice_2, - } - } - ] - - - name: Teleport assets from Collectives Parachain to Relay Chain successful - actions: - - extrinsics: - - chain: *collectives_parachain - signer: *acc_alice_signer - pallet: polkadotXcm - call: teleportAssets - args: [ - { v3: { parents: 1, interior: { here: true }}}, # destination - { v3: { parents: 0, interior: { x1: { accountId32: { id: *acc_alice_acc32 }}}}}, # beneficiary - { - v3: [ - { - id: { concrete: { parents: 1, interior: { here: true }}}, - fun: { fungible: 10000000000000 } # 10_000_000_000_000 - } - ] - }, # assets - 0, # feeAssetItem - ] - events: - - name: balances.Withdraw - result: { who: *acc_alice_ss58, amount: 10000000000000 } - - name: polkadotXcm.Attempted - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '3,000,000,000', proofSize: 0 }}} - - name: balances.Withdraw - chain: *relay_chain - result: { who: *checking_account, amount: 10000000000000 } # amount received and withdrawn from registry account - - name: messageQueue.Processed - chain: *relay_chain - threshold: *weight_threshold - result: { origin: { Ump: { Para: *cp_id } }, weightUsed: { refTime: '4,000,000,000', proofSize: '0' }, success: true } - - queries: - balance_rc_alice_3: - chain: *relay_chain - pallet: system - call: account - args: [ *acc_alice_acc32 ] - balance_cp_alice_3: - chain: *collectives_parachain - pallet: system - call: account - args: [ *acc_alice_acc32 ] - - - name: Alice deposit check, balance decreased on Collectives, increased on Relay Chain. - actions: - - asserts: - balanceDecreased: - args: [ - { - balances: { - before: $balance_cp_alice_2, - after: $balance_cp_alice_3, - } - } - ] - balanceIncreased: - args: [ - { - balances: { - before: $balance_rc_alice_2, - after: $balance_rc_alice_3, - } - } - ] -# TODO (P2) assert Alice balance before and after teleport (see example in kick_member test) -# TODO (P1) test: teleport of non relay chain assets fails diff --git a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/0_xcm/2_reserve.yml b/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/0_xcm/2_reserve.yml deleted file mode 100644 index bd17f07524a..00000000000 --- a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/0_xcm/2_reserve.yml +++ /dev/null @@ -1,53 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9700 - collectives_parachain: &collectives_parachain - wsPort: 9710 - paraId: &cp_id 1001 - variables: - weight_threshold: &weight_threshold { refTime: [10, 10], proofSize: [10, 10] } - chains: - accounts: - alice_signer: &alice_signer //Alice - alice_account32: &alice_acc32 '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' - -tests: - - name: Reserve assets from Relay Chain to Collectives Parachain fails - its: - - name: Reserve assets from Relay Chain to Collectives Parachain - actions: - - extrinsics: - - chain: *relay_chain - signer: *alice_signer - pallet: xcmPallet - call: reserveTransferAssets - args: [ - { v3: { 0, interior: { x1: { parachain: *cp_id }}}}, # destination - { v3: { parents: 0, interior: { x1: { accountId32: { id: *alice_acc32 }}}}}, # beneficiary - { - v3: [ - { - id: { concrete: { 0, interior: { here: true }}}, - fun: { fungible: 20000000000000 } # 20_000_000_000_000 - } - ] - }, # assets - 0, # feeAssetItem - ] - events: - - name: xcmPallet.Attempted - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '2,000,000,000', proofSize: 0 }}} - - name: dmpQueue.ExecutedDownward - chain: *collectives_parachain - threshold: *weight_threshold - result: { - outcome: { - Incomplete: [ - { refTime: '1,000,000,000', proofSize: 0 }, - UntrustedReserveLocation - ] - } - } diff --git a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/0_xcm/3_hrmp-open-channels.yml b/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/0_xcm/3_hrmp-open-channels.yml deleted file mode 100644 index 17a16d9ccd7..00000000000 --- a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/0_xcm/3_hrmp-open-channels.yml +++ /dev/null @@ -1,69 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9700 - collectives_parachain: &collectives_parachain - wsPort: 9710 - paraId: &cp_id 1001 - assethub_parachain: &assethub_parachain - wsPort: 9810 - paraId: &sp_id 1000 - variables: - chains: - accounts: - alice_signer: &alice_signer //Alice - hrmp: - proposed_max_capacity: &hrmp_proposed_max_capacity 8 - proposed_max_message_size: &hrmp_proposed_max_message_size 8192 -tests: - - name: HRMP - describes: - - name: Force Open HRMP Channel From Collectives Parachain → AssetHub Parachain - its: - - name: Alice calls hrmp.forceOpenHrmpChannel - actions: - - extrinsics: - - chain: *relay_chain - signer: *alice_signer - sudo: true - pallet: hrmp - call: forceOpenHrmpChannel - args: [ - *cp_id, # sender - *sp_id, # recipient - *hrmp_proposed_max_capacity, # proposedMaxCapacity - *hrmp_proposed_max_message_size # proposedMaxMessageSize - ] - events: - - name: hrmp.HrmpChannelForceOpened - result: { - sender: *cp_id, - recipient: *sp_id, - proposed_max_capacity: *hrmp_proposed_max_capacity, - proposed_max_message_size: *hrmp_proposed_max_message_size - } - - name: Force Open HRMP Channel From AssetHub Parachain → Collectives Parachain - its: - - name: Alice calls hrmp.forceOpenHrmpChannel - actions: - - extrinsics: - - chain: *relay_chain - signer: *alice_signer - sudo: true - pallet: hrmp - call: forceOpenHrmpChannel - args: [ - *sp_id, # sender - *cp_id, # recipient - *hrmp_proposed_max_capacity, # proposedMaxCapacity - *hrmp_proposed_max_message_size # proposedMaxMessageSize - ] - events: - - name: hrmp.HrmpChannelForceOpened - result: { - sender: *sp_id, - recipient: *cp_id, - proposed_max_capacity: *hrmp_proposed_max_capacity, - proposed_max_message_size: *hrmp_proposed_max_message_size - } diff --git a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/1_alliance/0_join_alliance_fails.yml b/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/1_alliance/0_join_alliance_fails.yml deleted file mode 100644 index 9aff8b1db10..00000000000 --- a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/1_alliance/0_join_alliance_fails.yml +++ /dev/null @@ -1,29 +0,0 @@ ---- -settings: - chains: - relay_chain: - wsPort: 9700 - collectives_parachain: &collectives_parachain - wsPort: 9710 - variables: - accounts: - alice_signer: &alice_signer //Alice - -tests: - - name: Alice fails to join an the Alliance, since it is not initialized yet. - its: - - name: Alice joins alliance - actions: - - extrinsics: # Relay Chain sets supported version for Asset Parachain - - chain: *collectives_parachain - signer: *alice_signer - pallet: alliance - call: joinAlliance - args: [] - events: - - name: system.ExtrinsicFailed - result: { - dispatchError: { Module: { index: 50, error: '0x00000000' }} - } - # TODO assert with Alliance Error variant - alliance.AllianceNotYetInitialized - # issue - https://github.com/paritytech/parachains-integration-tests/issues/59 diff --git a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/1_alliance/1_init_alliance.yml b/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/1_alliance/1_init_alliance.yml deleted file mode 100644 index 1e01c701744..00000000000 --- a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/1_alliance/1_init_alliance.yml +++ /dev/null @@ -1,256 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9700 - collectives_parachain: &collectives_parachain - wsPort: 9710 - paraId: &coll_para_id 1001 - variables: - weight_threshold: &weight_threshold { refTime: [10, 10], proofSize: [10, 10] } - accounts: - alice_signer: &acc_alice_signer //Alice - liam_account32: &acc_liam_acc32 "0x3614671a5de540d891eb8c4939c8153a4aa790602b347c18177b86d0fc546221" # //Liam - olivia_account32: &acc_olivia_acc32 "0x24ee8a659c6716fe9f7cb4e9e028602aa12867654ca02737da9171b7ff697d5c" # //Olivia - noah_account32: &acc_noah_acc32 "0x9c6ad3bc3aa2f1b2e837898e6da9980445f7ef8b3eee0b8c8e305f8cfae68517" # //Noah - emma_account32: &acc_emma_acc32 "0x8ac272b333ba1127c8db57fa777ec820b24598a236efa648caf0d26d86f64572" # //Emma - james_account32: &acc_james_acc32 "0x9a52805151a0b5effc084af9264011139872a21a3950cb9ae0b2955c4bf92c18" # //James - ava_account32: &acc_ava_acc32 "0x348ef0b8776adbc09c862ddc29b1d193b9e24738e54eea3b0609c83856dc101c" # //Ava - mia_account32: &acc_mia_acc32 "0xaebf15374cf7e758d10232514c569a7abf81cc1b8f1e81a73dbc608a0e335264" # //Mia - decodedCalls: - init_alliance_members: - chain: *collectives_parachain - pallet: alliance - call: initMembers - args: [ - [ - *acc_liam_acc32, - *acc_olivia_acc32, - *acc_noah_acc32, - *acc_emma_acc32, - *acc_james_acc32, - *acc_ava_acc32 - ], - [ - *acc_mia_acc32 - ] - ] - init_alliance_voting_members: - chain: *collectives_parachain - pallet: alliance - call: initMembers - args: [ - [ - *acc_liam_acc32, - *acc_olivia_acc32, - *acc_noah_acc32, - *acc_emma_acc32, - *acc_james_acc32, - *acc_ava_acc32, - *acc_mia_acc32 - ], - [] - ] - disband: - chain: *collectives_parachain - pallet: alliance - call: disband - args: [ - { - fellowMembers: 6, - allyMembers: 1 - } - ] - -tests: - - name: Alliance initiated with the root call, second init call fails. Alliance disband and set again. - its: - - name: Alliance initiated, founders and fellows are set. - actions: - - extrinsics: - - chain: *relay_chain - signer: *acc_alice_signer - sudo: true - pallet: xcmPallet - call: send - args: [ - { v3: { parents: 0, interior: { x1: { parachain: *coll_para_id }}}}, # destination - { - v3: [ # message - { - UnpaidExecution: { - weightLimit: { - limited: { - refTime: 3000000000, # 3_000_000_000 - proofSize: 2000000, # 2_000_000 - }, - } - } - }, - { - Transact: { - originKind: Superuser, - requireWeightAtMost: { - refTime: 1000000000, # 1_000_000_000 - proofSize: 1000000, # 1_000_000 - }, - call: $init_alliance_members - } - } - ] - } - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: xcmPallet.Sent - result: { origin: { parents: 0, interior: Here }, destination: { parents: 0, interior: { X1: { Parachain: *coll_para_id }}}} - - name: alliance.MembersInitialized - chain: *collectives_parachain - - name: dmpQueue.ExecutedDownward - chain: *collectives_parachain - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '3,000,000,000', proofSize: '1,000,000' }}} - - - name: Alliance init call fails. - actions: - - extrinsics: - - chain: *relay_chain - signer: *acc_alice_signer - sudo: true - pallet: xcmPallet - call: send - args: [ - { v3: { parents: 0, interior: { x1: { parachain: *coll_para_id }}}}, # destination - { - v3: [ # message - { - UnpaidExecution: { - weightLimit: { - limited: { - refTime: 3000000000, # 3_000_000_000 - proofSize: 2000000, # 2_000_000 - }, - } - } - }, - { - Transact: { - originKind: Superuser, - requireWeightAtMost: { - refTime: 1000000000, # 1_000_000_000 - proofSize: 1000000, # 1_000_000 - }, - call: $init_alliance_voting_members - } - } - ] - } - ] - events: - # TODO can not currently assert variant AllianceAlreadyInitialized, XCM Transact fails silently - # issue - https://github.com/paritytech/polkadot/issues/4623 - # Next test with a disband call will fail, if this call does not fail, - # since a witness data from a disband call will be invalid. - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: xcmPallet.Sent - result: { origin: { parents: 0, interior: Here }, destination: { parents: 0, interior: { X1: { Parachain: *coll_para_id }}}} - - name: dmpQueue.ExecutedDownward - chain: *collectives_parachain - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '3,000,000,000', proofSize: '1,000,000' }}} - - - name: Alliance disbanded and initialized again. - actions: - - extrinsics: - - chain: *relay_chain - signer: *acc_alice_signer - sudo: true - pallet: xcmPallet - call: send - args: [ - { v3: { parents: 0, interior: { x1: { parachain: *coll_para_id }}}}, # destination - { - v3: [ # message - { - UnpaidExecution: { - weightLimit: { - limited: { - refTime: 5000000000, # 3_000_000_000 - proofSize: 1000000, # 1_000_000 - }, - } - } - }, - { - Transact: { - originKind: Superuser, - requireWeightAtMost: { - refTime: 3000000000, # 3_000_000_000 - proofSize: 200000, # 200_000 - }, - call: $disband - } - } - ] - } - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: xcmPallet.Sent - result: { origin: { parents: 0, interior: Here }, destination: { parents: 0, interior: { X1: { Parachain: *coll_para_id }}}} - - name: alliance.AllianceDisbanded - chain: *collectives_parachain - result: { fellowMembers: 6, allyMembers: 1, unreserved: 0 } - - name: dmpQueue.ExecutedDownward - chain: *collectives_parachain - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '3,321,495,872', proofSize: '181,779' }}} - - name: Alliance initiated, founders and fellows are set. - actions: - - extrinsics: - - chain: *relay_chain - signer: *acc_alice_signer - sudo: true - pallet: xcmPallet - call: send - args: [ - { v3: { parents: 0, interior: { x1: { parachain: *coll_para_id }}}}, # destination - { - v3: [ # message - { - UnpaidExecution: { - weightLimit: { - limited: { - refTime: 3000000000, # 3_000_000_000 - proofSize: 2000000, # 2_000_000 - }, - } - } - }, - { - Transact: { - originKind: Superuser, - requireWeightAtMost: { - refTime: 1000000000, # 1_000_000_000 - proofSize: 1000000, # 1_000_000 - }, - call: $init_alliance_members - } - } - ] - } - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: xcmPallet.Sent - result: { origin: { parents: 0, interior: Here }, destination: { parents: 0, interior: { X1: { Parachain: *coll_para_id }}}} - - name: alliance.MembersInitialized - chain: *collectives_parachain - - name: dmpQueue.ExecutedDownward - chain: *collectives_parachain - threshold: *weight_threshold - result: { outcome: { Complete: { refTime: '3,000,000,000', proofSize: '1,000,000' }}} diff --git a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/1_alliance/2_join_alliance_fails.yml b/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/1_alliance/2_join_alliance_fails.yml deleted file mode 100644 index 2afdadae602..00000000000 --- a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/1_alliance/2_join_alliance_fails.yml +++ /dev/null @@ -1,30 +0,0 @@ ---- -settings: - chains: - relay_chain: - wsPort: 9700 - collectives_parachain: &collectives_parachain - wsPort: 9710 - paraId: 1001 - variables: - accounts: - liam_signer: &acc_liam_signer //Liam - -tests: - - name: Liam fails to join an the Alliance, Liam is already a member. - its: - - name: Alice joins alliance - actions: - - extrinsics: # Relay Chain sets supported version for Asset Parachain - - chain: *collectives_parachain - signer: *acc_liam_signer - pallet: alliance - call: joinAlliance - args: [] - events: - - name: system.ExtrinsicFailed - result: { - dispatchError: { Module: { index: 50, error: '0x02000000' }} - } - # TODO assert with Alliance Error variant - alliance.AllianceNotYetInitialized - # issue - https://github.com/paritytech/parachains-integration-tests/issues/59 diff --git a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/1_alliance/3_kick_member.yml b/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/1_alliance/3_kick_member.yml deleted file mode 100644 index a5941cb4723..00000000000 --- a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/1_alliance/3_kick_member.yml +++ /dev/null @@ -1,175 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9700 - collectives_parachain: &collectives_parachain - wsPort: 9710 - paraId: &cp_id 1001 - variables: - weight_threshold: &weight_threshold { refTime: [10, 10], proofSize: [10, 10] } - init_teleport_amount: &init_teleport_amount 20000000000000 # 20_000_000_000_000 - accounts: - alice_signer: &acc_alice_signer //Alice - treasury_account32: &acc_treasury_acc32 '0x6d6f646c70792f74727372790000000000000000000000000000000000000000' - alice_account32: &acc_alice_acc32 '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' - alice_ss58: &acc_alice_ss58 '15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5' - decodedCalls: - alliance_kick_member: - chain: *collectives_parachain - pallet: alliance - call: kickMember - args: [ - {Id: *acc_alice_acc32} - ] - -tests: - - name: Member kicked out, deposited assets slashed and teleported to Relay Chain treasury. - before: - - name: DEPENDENCY | Do a 'limitedTeleportAssets' from the Relay Chain to the Collectives Parachain - actions: - - extrinsics: - - chain: *relay_chain - signer: *acc_alice_signer - pallet: xcmPallet - call: limitedTeleportAssets - args: [ - { v3: { 0, interior: { x1: { parachain: *cp_id }}}}, # destination - { v3: { parents: 0, interior: { x1: { accountId32: { id: *acc_alice_acc32 }}}}}, # beneficiary - { v3: [ { id: { concrete: { 0, interior: { here: true }}}, fun: { fungible: *init_teleport_amount }} ] }, # assets - 0, # feeAssetItem - { unlimited: true } # weightLimit - ] - events: - - name: xcmPallet.Attempted - threshold: *weight_threshold - result: { - outcome: { Complete: { refTime: '3,000,000,000', proofSize: 0 }} - } - - name: balances.Deposit - chain: *collectives_parachain - result: { who: *acc_alice_ss58 } - - name: dmpQueue.ExecutedDownward - chain: *collectives_parachain - threshold: *weight_threshold - result: { - outcome: { Complete: { refTime: '4,000,000,000', proofSize: 0 }} - } - - name: Get the balances of the Relay Chain's treasury & Collectives parachain's future alliance member - actions: - - queries: - balance_rc_treasury_before: - chain: *relay_chain - pallet: system - call: account - args: [ *acc_treasury_acc32 ] - balance_cp_alice_before: - chain: *collectives_parachain - pallet: system - call: account - args: [ *acc_alice_acc32 ] - its: - - name: Alice joins alliance - actions: - - extrinsics: - - chain: *collectives_parachain - signer: *acc_alice_signer - pallet: alliance - call: joinAlliance - args: [] - events: - - name: balances.Reserved - chain: *collectives_parachain - result: { who: *acc_alice_ss58, amount: 10000000000000 } - - name: alliance.NewAllyJoined - result: {ally: *acc_alice_ss58, reserved: 10000000000000 } - - queries: - balance_cp_alice_after: - chain: *collectives_parachain - pallet: system - call: account - args: [ *acc_alice_acc32 ] - - name: Alice deposit check, balance decreased - actions: - - asserts: - balanceDecreased: - args: [ - { - balances: { - before: $balance_cp_alice_before, - after: $balance_cp_alice_after, - } - # TODO (P3) set `amount` and `fee` for more strict assert - } - ] - - name: Kick Alice from alliance - actions: - - extrinsics: # Asset Parachain sets supported version for Relay Chain through it - - chain: *relay_chain - signer: *acc_alice_signer - sudo: true - pallet: xcmPallet - call: send - args: [ - { v3: { parents: 0, interior: { x1: { parachain: *cp_id }}}}, # destination - { - v3: [ #message - { - UnpaidExecution: { - weightLimit: { - limited: { - refTime: 4000000000, # 4_000_000_000 - proofSize: 2000000, # 2_000_000 - }, - } - } - }, - { - Transact: { - originKind: Superuser, - requireWeightAtMost: { - refTime: 2000000000, # 2_000_000_000 - proofSize: 1000000, # 1_000_000 - }, - call: $alliance_kick_member - } - } - ] - } - ] - events: - - name: sudo.Sudid - result: { sudoResult: Ok } - - name: xcmPallet.Sent - result: { origin: { parents: 0, interior: Here }, destination: { parents: 0, interior: { X1: { Parachain: *cp_id }}}} - - name: alliance.MemberKicked - chain: *collectives_parachain - result: { member: *acc_alice_ss58, slashed: 10000000000000 } - - name: dmpQueue.ExecutedDownward - chain: *collectives_parachain - threshold: *weight_threshold - result: { - outcome: { Complete: { refTime: '4,000,000,000', proofSize: '1,000,000' }} - } - - name: messageQueue.Processed - result: { origin: { Ump: { Para: *cp_id }}, success: true } - - - queries: - balance_rc_treasury_after: - chain: *relay_chain - pallet: system - call: account - args: [ *acc_treasury_acc32 ] - - name: Slashed balance appears on the relay chain treasury account - actions: - - asserts: - balanceIncreased: - args: [ - { - balances: { - before: $balance_rc_treasury_before, - after: $balance_rc_treasury_after, - } - # TODO (P3) set `amount` and `fee` for more strict assert - } - ] diff --git a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/2_opengov/0_assethub.yml b/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/2_opengov/0_assethub.yml deleted file mode 100644 index c53efff51fb..00000000000 --- a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/2_opengov/0_assethub.yml +++ /dev/null @@ -1,149 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9700 - assethub_parachain: &assethub_parachain - wsPort: 9810 - paraId: &ap_id 1000 - variables: - proposal_index: &proposal_index 0 - chains: - accounts: - alice_signer: &alice_signer //Alice - bob_signer: &bob_signer //Bob - decodedCalls: - set_candidates_ap: - chain: *assethub_parachain - encode: true - pallet: collatorSelection - call: setDesiredCandidates - args: [ - 3 - ] - send_set_candidates_rc: - chain: *relay_chain - encode: false - pallet: xcmPallet - call: send - args: [ - { v3: { parents: 0, interior: { x1: { parachain: *ap_id }}}}, # destination - { - v3: [ #message - { - UnpaidExecution: { - weightLimit: Unlimited - } - }, - { - Transact: { - originKind: Xcm, - requireWeightAtMost: { - refTime: 200000000, # 200_000_000 - proofSize: 100000, # 100_000 - }, - call: $set_candidates_ap - } - } - ] - } - ] -tests: - - name: OpenGov - describes: - - name: Set desired candidates on AssetHub from Relay Chain OpenGov Staking track - its: - - name: Note preimage from xcm send set_desired_candidates call - actions: - - extrinsics: - - chain: *relay_chain - signer: *alice_signer - pallet: preimage - call: notePreimage - args: [ - $send_set_candidates_rc - ] - events: - - name: preimage.Noted - result: {hash_: $send_set_candidates_rc.hash } - - name: Submit a proposal to set desired candidates - actions: - - extrinsics: - - chain: *relay_chain - signer: *alice_signer - pallet: referenda - call: submit - args: [ - { - "Origins": "StakingAdmin", - }, - { - "Lookup": { - "hash_": $send_set_candidates_rc.hash, - "len": $send_set_candidates_rc.len, - }, - }, - { - "After": 1, - }, - ] - events: - - name: referenda.Submitted - result: { - index: *proposal_index, - proposal: { Lookup: { hash_: $send_set_candidates_rc.hash, len: $send_set_candidates_rc.len }} - } - - name: Alice Vote Aye - actions: - - extrinsics: - - chain: *relay_chain - signer: *alice_signer - pallet: convictionVoting - call: vote - args: [ - *proposal_index, - { - "Standard": { - "vote": { - "aye": true, - "conviction": "Locked1x", - }, - "balance": 200000000000000, - } - }, - ] # TODO no event to catch https://github.com/paritytech/substrate/issues/14687 - - name: Bob Vote Aye - actions: - - extrinsics: - - chain: *relay_chain - signer: *bob_signer - pallet: convictionVoting - call: vote - args: [ - *proposal_index, - { - "Standard": { - "vote": { - "aye": true, - "conviction": "Locked1x", - }, - "balance": 200000000000000, - } - }, - ] # TODO no event to catch https://github.com/paritytech/substrate/issues/14687 - - name: Submit the decision deposit - actions: - - extrinsics: - - chain: *relay_chain - signer: *alice_signer - pallet: referenda - call: placeDecisionDeposit - args: [ - *proposal_index, - ] - events: - - name: referenda.DecisionDepositPlaced - result: { index: *proposal_index } - - name: collatorSelection.NewDesiredCandidates - chain: *assethub_parachain - result: { desiredCandidates: 3 } diff --git a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/3_fellowship/0_init.yml b/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/3_fellowship/0_init.yml deleted file mode 100644 index 1e4b2dabe21..00000000000 --- a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/3_fellowship/0_init.yml +++ /dev/null @@ -1,209 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9700 - collectives_parachain: &collectives_parachain - wsPort: 9710 - paraId: &cp_id 1001 - variables: - proposal_index: &proposal_index 1 - chains: - accounts: - alice_signer: &alice_signer //Alice - bob_signer: &bob_signer //Bob - alice_account32: &acc_alice_acc32 '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' - alice_ss58: &acc_alice_ss58 '15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5' - decodedCalls: - fellowship_induct_alice_cp: - chain: *collectives_parachain - encode: true - pallet: fellowshipCore - call: induct - args: [ - *acc_alice_acc32 - ] - fellowship_promote_1_alice_cp: - chain: *collectives_parachain - encode: true - pallet: fellowshipCore - call: promote - args: [ - *acc_alice_acc32, - 1 - ] - fellowship_promote_2_alice_cp: - chain: *collectives_parachain - encode: true - pallet: fellowshipCore - call: promote - args: [ - *acc_alice_acc32, - 2 - ] - fellowship_promote_3_alice_cp: - chain: *collectives_parachain - encode: true - pallet: fellowshipCore - call: promote - args: [ - *acc_alice_acc32, - 3 - ] - send_init_fellowship_rc: - chain: *relay_chain - encode: false - pallet: xcmPallet - call: send - args: [ - { v3: { parents: 0, interior: { x1: { parachain: *cp_id }}}}, # destination - { - v3: [ #message - { - UnpaidExecution: { - weightLimit: Unlimited - } - }, - { # since batch_all not yet allowed over xcm, we have to send multiple `Transact`. - Transact: { - originKind: Xcm, - requireWeightAtMost: { - refTime: 1500000000, # 1_500_000_000 - proofSize: 10000, # 10_000 - }, - call: $fellowship_induct_alice_cp - } - }, - { - Transact: { - originKind: Xcm, - requireWeightAtMost: { - refTime: 1500000000, # 1_500_000_000 - proofSize: 10000, # 10_000 - }, - call: $fellowship_promote_1_alice_cp - } - }, - { - Transact: { - originKind: Xcm, - requireWeightAtMost: { - refTime: 1500000000, # 1_500_000_000 - proofSize: 10000, # 10_000 - }, - call: $fellowship_promote_2_alice_cp - } - }, - { - Transact: { - originKind: Xcm, - requireWeightAtMost: { - refTime: 1500000000, # 1_500_000_000 - proofSize: 10000, # 10_000 - }, - call: $fellowship_promote_3_alice_cp - } - } - ] - } - ] - -tests: - - name: Fellowship - describes: - - name: Init the Fellowship - its: - - name: Note preimage from init fellowship call - actions: - - extrinsics: - - chain: *relay_chain - signer: *alice_signer - pallet: preimage - call: notePreimage - args: [ - $send_init_fellowship_rc - ] - events: - - name: preimage.Noted - result: { hash_: $send_init_fellowship_rc.hash } - - name: Submit a proposal to init the Fellowship - actions: - - extrinsics: - - chain: *relay_chain - signer: *alice_signer - pallet: referenda - call: submit - args: [ - { - "Origins": "FellowshipAdmin", - }, - { - "Lookup": { - "hash_": $send_init_fellowship_rc.hash, - "len": $send_init_fellowship_rc.len, - }, - }, - { - "After": 1, - }, - ] - events: - - name: referenda.Submitted - result: { - index: *proposal_index, - proposal: { Lookup: { hash_: $send_init_fellowship_rc.hash, len: $send_init_fellowship_rc.len }} - } - - name: Alice Vote Aye - actions: - - extrinsics: - - chain: *relay_chain - signer: *alice_signer - pallet: convictionVoting - call: vote - args: [ - *proposal_index, - { - "Standard": { - "vote": { - "aye": true, - "conviction": "Locked1x", - }, - "balance": 200000000000000, - } - }, - ] # TODO no Aye event to catch https://github.com/paritytech/substrate/issues/14687 - - name: Bob Vote Aye - actions: - - extrinsics: - - chain: *relay_chain - signer: *bob_signer - pallet: convictionVoting - call: vote - args: [ - *proposal_index, - { - "Standard": { - "vote": { - "aye": true, - "conviction": "Locked1x", - }, - "balance": 200000000000000, - } - }, - ] # TODO no Aye event to catch https://github.com/paritytech/substrate/issues/14687 - - name: Submit the decision deposit - actions: - - extrinsics: - - chain: *relay_chain - signer: *alice_signer - pallet: referenda - call: placeDecisionDeposit - args: [ - *proposal_index, - ] - events: - - name: referenda.DecisionDepositPlaced - result: { index: *proposal_index } - - name: fellowshipCollective.MemberAdded - chain: *collectives_parachain - result: { who: *acc_alice_ss58 } diff --git a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/3_fellowship/1_whitelist_call.yml b/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/3_fellowship/1_whitelist_call.yml deleted file mode 100644 index 5991c7ae2f8..00000000000 --- a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/3_fellowship/1_whitelist_call.yml +++ /dev/null @@ -1,146 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9700 - collectives_parachain: &collectives_parachain - wsPort: 9710 - paraId: &cp_id 1001 - variables: - fellows_proposal_index: &fellows_proposal_index 0 - chains: - accounts: - alice_signer: &alice_signer //Alice - decodedCalls: - remark_rc: - chain: *relay_chain - encode: false - pallet: system - call: remark - args: [ - "0x10" - ] - whitelist_remark_rc: - chain: *relay_chain - encode: true - pallet: whitelist - call: whitelistCall - args: [ - $remark_rc.hash - ] - send_whitelist_remark_cp: - chain: *collectives_parachain - encode: false - pallet: polkadotXcm - call: send - args: [ - { v3: { parents: 1, interior: { here: true }}}, # destination - { - v3: [ #message - { - UnpaidExecution: { - weightLimit: Unlimited - } - }, - { - Transact: { - originKind: Xcm, - requireWeightAtMost: { - refTime: 500000000, # 500_000_000 - proofSize: 20000, # 20_000 - }, - call: $whitelist_remark_rc - } - } - ] - } - ] - -tests: - - name: Fellowship - describes: - - name: The Fellowship white list the call - its: - - name: Note preimage from the whitelist call on the Relay Chain - actions: - - extrinsics: - - chain: *relay_chain - signer: *alice_signer - pallet: preimage - call: notePreimage - args: [ - $remark_rc - ] - events: - - name: preimage.Noted - result: { hash_: $remark_rc.hash } - - name: Note preimage from the xcm send call to white list the call above - actions: - - extrinsics: - - chain: *collectives_parachain - signer: *alice_signer - pallet: preimage - call: notePreimage - args: [ - $send_whitelist_remark_cp, - ] - events: - - name: preimage.Noted - result: { hash_: $send_whitelist_remark_cp.hash } - - name: Submit a proposal to while list the call - actions: - - extrinsics: - - chain: *collectives_parachain - signer: *alice_signer - pallet: fellowshipReferenda - call: submit - args: [ - { - "FellowshipOrigins": "Fellows", - }, - { - "Lookup": { - "hash_": $send_whitelist_remark_cp.hash, - "len": $send_whitelist_remark_cp.len, - }, - }, - { - "After": 1, - }, - ] - events: - - name: fellowshipReferenda.Submitted - result: { - index: *fellows_proposal_index, - proposal: { Lookup: { hash_: $send_whitelist_remark_cp.hash, len: $send_whitelist_remark_cp.len}} - } - - name: Vote Aye - actions: - - extrinsics: - - chain: *collectives_parachain - signer: *alice_signer - pallet: fellowshipCollective - call: vote - args: [ - *fellows_proposal_index, - true, - ] - events: - - name: fellowshipCollective.Voted - result: { poll: *fellows_proposal_index, vote: { Aye: 1 } } - - name: Submit the decision deposit - actions: - - extrinsics: - - chain: *collectives_parachain - signer: *alice_signer - pallet: fellowshipReferenda - call: placeDecisionDeposit - args: [ - *fellows_proposal_index, - ] - events: - - name: fellowshipReferenda.DecisionDepositPlaced - result: {index: *fellows_proposal_index} - - name: whitelist.CallWhitelisted - chain: *relay_chain - result: { callHash: $remark_rc.hash } diff --git a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/3_fellowship/2_assethub.yml b/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/3_fellowship/2_assethub.yml deleted file mode 100644 index c0805594808..00000000000 --- a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/3_fellowship/2_assethub.yml +++ /dev/null @@ -1,126 +0,0 @@ ---- -settings: - chains: - relay_chain: &relay_chain - wsPort: 9700 - collectives_parachain: &collectives_parachain - wsPort: 9710 - paraId: &cp_id 1001 - assethub_parachain: &assethub_parachain - wsPort: 9810 - paraId: &ap_id 1000 - variables: - fellows_proposal_index: &fellows_proposal_index 1 - chains: - accounts: - alice_signer: &alice_signer //Alice - - decodedCalls: - xcmp_resume_execution_ap: - chain: *assethub_parachain - encode: true - pallet: xcmpQueue - call: resumeXcmExecution - args: [] - send_xcmp_resume_execution_cp: - chain: *collectives_parachain - encode: false - pallet: polkadotXcm - call: send - args: [ - { v3: { parents: 1, interior: { x1: { parachain: *ap_id }}}}, # destination - { - v3: [ #message - { - UnpaidExecution: { - weightLimit: Unlimited - } - }, - { - Transact: { - originKind: Xcm, - requireWeightAtMost: { - refTime: 300000000, # 300_000_000 - proofSize: 10000, # 10_000 - }, - call: $xcmp_resume_execution_ap - } - } - ] - } - ] - -tests: - - name: Fellowship - describes: - - name: The Fellowship resume xcm execution for the xcmp queue on AssetHub - its: - - name: Note preimage from the xcm send call to suspend_xcm_execution - actions: - - extrinsics: - - chain: *collectives_parachain - signer: *alice_signer - pallet: preimage - call: notePreimage - args: [ - $send_xcmp_resume_execution_cp - ] - events: - - name: preimage.Noted - result: {hash_: $send_xcmp_resume_execution_cp.hash } - - name: Submit a proposal to resume xcm execution on AssetHub - actions: - - extrinsics: - - chain: *collectives_parachain - signer: *alice_signer - pallet: fellowshipReferenda - call: submit - args: [ - { - "FellowshipOrigins": "Fellows", - }, - { - "Lookup": { - "hash_": $send_xcmp_resume_execution_cp.hash, - "len": $send_xcmp_resume_execution_cp.len, - }, - }, - { - "After": 1, - }, - ] - events: - - name: fellowshipReferenda.Submitted - result: { - index: 1, - proposal: {Lookup: {hash_: $send_xcmp_resume_execution_cp.hash, len: $send_xcmp_resume_execution_cp.len}} - } - - name: Vote Aye - actions: - - extrinsics: - - chain: *collectives_parachain - signer: *alice_signer - pallet: fellowshipCollective - call: vote - args: [ - *fellows_proposal_index, - true, - ] - events: - - name: fellowshipCollective.Voted - result: { poll: *fellows_proposal_index, vote: { Aye: 1 } } - - name: Submit the decision deposit - actions: - - extrinsics: - - chain: *collectives_parachain - signer: *alice_signer - pallet: fellowshipReferenda - call: placeDecisionDeposit - args: [ - *fellows_proposal_index, - ] - events: - - name: fellowshipReferenda.DecisionDepositPlaced - result: {index: *fellows_proposal_index} - - name: xcmpQueue.Success - chain: *assethub_parachain diff --git a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/config.toml b/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/config.toml deleted file mode 100644 index 20fda92bd08..00000000000 --- a/cumulus/parachains/integration-tests/e2e/collectives/collectives-polkadot/config.toml +++ /dev/null @@ -1,42 +0,0 @@ -[relaychain] -default_command = "./bin/polkadot" -default_args = [ "-lparachain=trace", "-lxcm=trace" ] -chain = "polkadot-local" - - [[relaychain.nodes]] - name = "alice" - ws_port = 9700 - validator = true - args = ["--state-cache-size=0"] - - [[relaychain.nodes]] - name = "bob" - ws_port = 9701 - validator = true - - [[relaychain.nodes]] - name = "charlie" - ws_port = 9702 - validator = true - - [[relaychain.nodes]] - name = "dave" - ws_port = 9703 - validator = true - -[[parachains]] -id = 1001 -chain = "collectives-polkadot-local" -cumulus_based = true - - [[parachains.collators]] - name = "collator1" - ws_port = 9710 - command = "./bin/polkadot-parachain" - args = [ "-lxcm=trace", "--state-cache-size=0" ] - - [[parachains.collators]] - name = "collator2" - ws_port = 9711 - command = "./bin/polkadot-parachain" - args = ["-lxcm=trace"] diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/Cargo.toml b/cumulus/parachains/runtimes/assets/asset-hub-kusama/Cargo.toml deleted file mode 100644 index f71499e0c29..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/Cargo.toml +++ /dev/null @@ -1,236 +0,0 @@ -[package] -name = "asset-hub-kusama-runtime" -version = "0.9.420" -authors.workspace = true -edition.workspace = true -description = "Kusama variant of Asset Hub parachain runtime" -license = "Apache-2.0" - -[dependencies] -codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } -hex-literal = { version = "0.4.1" } -log = { version = "0.4.20", default-features = false } -scale-info = { version = "2.10.0", default-features = false, features = ["derive"] } -smallvec = "1.11.0" - -# Substrate -frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true} -frame-executive = { path = "../../../../../substrate/frame/executive", default-features = false} -frame-support = { path = "../../../../../substrate/frame/support", default-features = false} -frame-system = { path = "../../../../../substrate/frame/system", default-features = false} -frame-system-benchmarking = { path = "../../../../../substrate/frame/system/benchmarking", default-features = false, optional = true} -frame-system-rpc-runtime-api = { path = "../../../../../substrate/frame/system/rpc/runtime-api", default-features = false} -frame-try-runtime = { path = "../../../../../substrate/frame/try-runtime", default-features = false, optional = true} -pallet-asset-conversion-tx-payment = { path = "../../../../../substrate/frame/transaction-payment/asset-conversion-tx-payment", default-features = false} -pallet-assets = { path = "../../../../../substrate/frame/assets", default-features = false} -pallet-asset-conversion = { path = "../../../../../substrate/frame/asset-conversion", default-features = false} -pallet-aura = { path = "../../../../../substrate/frame/aura", default-features = false} -pallet-authorship = { path = "../../../../../substrate/frame/authorship", default-features = false} -pallet-balances = { path = "../../../../../substrate/frame/balances", default-features = false} -pallet-multisig = { path = "../../../../../substrate/frame/multisig", default-features = false} -pallet-nft-fractionalization = { path = "../../../../../substrate/frame/nft-fractionalization", default-features = false} -pallet-nfts = { path = "../../../../../substrate/frame/nfts", default-features = false} -pallet-nfts-runtime-api = { path = "../../../../../substrate/frame/nfts/runtime-api", default-features = false} -pallet-proxy = { path = "../../../../../substrate/frame/proxy", default-features = false} -pallet-session = { path = "../../../../../substrate/frame/session", default-features = false} -pallet-state-trie-migration = { path = "../../../../../substrate/frame/state-trie-migration", default-features = false, optional = true } -pallet-timestamp = { path = "../../../../../substrate/frame/timestamp", default-features = false} -pallet-transaction-payment = { path = "../../../../../substrate/frame/transaction-payment", default-features = false} -pallet-transaction-payment-rpc-runtime-api = { path = "../../../../../substrate/frame/transaction-payment/rpc/runtime-api", default-features = false} -pallet-uniques = { path = "../../../../../substrate/frame/uniques", default-features = false} -pallet-utility = { path = "../../../../../substrate/frame/utility", default-features = false} -sp-api = { path = "../../../../../substrate/primitives/api", default-features = false} -sp-block-builder = { path = "../../../../../substrate/primitives/block-builder", default-features = false} -sp-consensus-aura = { path = "../../../../../substrate/primitives/consensus/aura", default-features = false} -sp-core = { path = "../../../../../substrate/primitives/core", default-features = false} -sp-genesis-builder = { path = "../../../../../substrate/primitives/genesis-builder", default-features = false } -sp-inherents = { path = "../../../../../substrate/primitives/inherents", default-features = false} -sp-offchain = { path = "../../../../../substrate/primitives/offchain", default-features = false} -sp-runtime = { path = "../../../../../substrate/primitives/runtime", default-features = false} -sp-session = { path = "../../../../../substrate/primitives/session", default-features = false} -sp-std = { path = "../../../../../substrate/primitives/std", default-features = false} -sp-storage = { path = "../../../../../substrate/primitives/storage", default-features = false} -sp-transaction-pool = { path = "../../../../../substrate/primitives/transaction-pool", default-features = false} -sp-version = { path = "../../../../../substrate/primitives/version", default-features = false} -sp-weights = { path = "../../../../../substrate/primitives/weights", default-features = false} -# num-traits feature needed for dex integer sq root: -primitive-types = { version = "0.12.1", default-features = false, features = ["codec", "scale-info", "num-traits"] } - -# Polkadot -pallet-xcm = { path = "../../../../../polkadot/xcm/pallet-xcm", default-features = false} -pallet-xcm-benchmarks = { path = "../../../../../polkadot/xcm/pallet-xcm-benchmarks", default-features = false, optional = true } -polkadot-core-primitives = { path = "../../../../../polkadot/core-primitives", default-features = false} -polkadot-parachain-primitives = { path = "../../../../../polkadot/parachain", default-features = false} -polkadot-runtime-common = { path = "../../../../../polkadot/runtime/common", default-features = false} -xcm = { package = "staging-xcm", path = "../../../../../polkadot/xcm", default-features = false} -xcm-builder = { package = "staging-xcm-builder", path = "../../../../../polkadot/xcm/xcm-builder", default-features = false} -xcm-executor = { package = "staging-xcm-executor", path = "../../../../../polkadot/xcm/xcm-executor", default-features = false} - -# Cumulus -cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } -pallet-message-queue = { path = "../../../../../substrate/frame/message-queue", default-features = false } - -cumulus-pallet-dmp-queue = { path = "../../../../pallets/dmp-queue", default-features = false } -cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = ["parameterized-consensus-hook",] } -cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false} -cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } -cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } -cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } -cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } -pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } -parachain-info = { package = "staging-parachain-info", path = "../../../pallets/parachain-info", default-features = false } -parachains-common = { path = "../../../common", default-features = false } -assets-common = { path = "../common", default-features = false } - -[dev-dependencies] -asset-test-utils = { path = "../test-utils" } - -[build-dependencies] -substrate-wasm-builder = { path = "../../../../../substrate/utils/wasm-builder", optional = true } - -[features] -default = [ "std" ] -# When enabled the `state_version` is set to `1`. -# This means that the chain will start using the new state format. The migration is lazy, so -# it requires to write a storage value to use the new state format. To migrate all the other -# storage values that aren't touched the state migration pallet is added as well. -# This pallet will migrate the entire state, controlled through some account. -# -# This feature should be removed when the main-net will be migrated. -state-trie-version-1 = [ "pallet-state-trie-migration" ] -runtime-benchmarks = [ - "assets-common/runtime-benchmarks", - "cumulus-pallet-dmp-queue/runtime-benchmarks", - "cumulus-pallet-parachain-system/runtime-benchmarks", - "cumulus-pallet-session-benchmarking/runtime-benchmarks", - "cumulus-pallet-xcmp-queue/runtime-benchmarks", - "cumulus-primitives-core/runtime-benchmarks", - "cumulus-primitives-utility/runtime-benchmarks", - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system-benchmarking/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "pallet-asset-conversion/runtime-benchmarks", - "pallet-assets/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "pallet-collator-selection/runtime-benchmarks", - "pallet-message-queue/runtime-benchmarks", - "pallet-multisig/runtime-benchmarks", - "pallet-nft-fractionalization/runtime-benchmarks", - "pallet-nfts/runtime-benchmarks", - "pallet-proxy/runtime-benchmarks", - "pallet-state-trie-migration/runtime-benchmarks", - "pallet-timestamp/runtime-benchmarks", - "pallet-uniques/runtime-benchmarks", - "pallet-utility/runtime-benchmarks", - "pallet-xcm-benchmarks/runtime-benchmarks", - "pallet-xcm/runtime-benchmarks", - "parachains-common/runtime-benchmarks", - "polkadot-parachain-primitives/runtime-benchmarks", - "polkadot-runtime-common/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "xcm-builder/runtime-benchmarks", - "xcm-executor/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-support/try-runtime", - "frame-system/try-runtime", - "frame-try-runtime/try-runtime", - "pallet-asset-conversion-tx-payment/try-runtime", - "pallet-asset-conversion/try-runtime", - "pallet-assets/try-runtime", - "pallet-aura/try-runtime", - "pallet-authorship/try-runtime", - "pallet-balances/try-runtime", - "pallet-collator-selection/try-runtime", - "pallet-message-queue/try-runtime", - "pallet-multisig/try-runtime", - "pallet-nft-fractionalization/try-runtime", - "pallet-nfts/try-runtime", - "pallet-proxy/try-runtime", - "pallet-session/try-runtime", - "pallet-state-trie-migration/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", - "polkadot-runtime-common/try-runtime", - "sp-runtime/try-runtime", -] -std = [ - "assets-common/std", - "codec/std", - "cumulus-pallet-aura-ext/std", - "cumulus-pallet-dmp-queue/std", - "cumulus-pallet-parachain-system/std", - "cumulus-pallet-session-benchmarking/std", - "cumulus-pallet-xcm/std", - "cumulus-pallet-xcmp-queue/std", - "cumulus-primitives-core/std", - "cumulus-primitives-utility/std", - "frame-benchmarking?/std", - "frame-executive/std", - "frame-support/std", - "frame-system-benchmarking?/std", - "frame-system-rpc-runtime-api/std", - "frame-system/std", - "frame-try-runtime?/std", - "log/std", - "pallet-asset-conversion-tx-payment/std", - "pallet-asset-conversion/std", - "pallet-assets/std", - "pallet-aura/std", - "pallet-authorship/std", - "pallet-balances/std", - "pallet-collator-selection/std", - "pallet-message-queue/std", - "pallet-multisig/std", - "pallet-nft-fractionalization/std", - "pallet-nfts-runtime-api/std", - "pallet-nfts/std", - "pallet-proxy/std", - "pallet-session/std", - "pallet-state-trie-migration/std", - "pallet-timestamp/std", - "pallet-transaction-payment-rpc-runtime-api/std", - "pallet-transaction-payment/std", - "pallet-uniques/std", - "pallet-utility/std", - "pallet-xcm-benchmarks?/std", - "pallet-xcm/std", - "parachain-info/std", - "parachains-common/std", - "polkadot-core-primitives/std", - "polkadot-parachain-primitives/std", - "polkadot-runtime-common/std", - "primitive-types/std", - "scale-info/std", - "sp-api/std", - "sp-block-builder/std", - "sp-consensus-aura/std", - "sp-core/std", - "sp-genesis-builder/std", - "sp-inherents/std", - "sp-offchain/std", - "sp-runtime/std", - "sp-session/std", - "sp-std/std", - "sp-storage/std", - "sp-transaction-pool/std", - "sp-version/std", - "sp-weights/std", - "substrate-wasm-builder", - "xcm-builder/std", - "xcm-executor/std", - "xcm/std", -] - -experimental = [ "pallet-aura/experimental" ] diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/build.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/build.rs deleted file mode 100644 index 60f8a125129..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/build.rs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#[cfg(feature = "std")] -fn main() { - substrate_wasm_builder::WasmBuilder::new() - .with_current_project() - .export_heap_base() - .import_memory() - .build() -} - -#[cfg(not(feature = "std"))] -fn main() {} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/lib.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/lib.rs deleted file mode 100644 index 4c76262f60a..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/lib.rs +++ /dev/null @@ -1,1549 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! # Asset Hub Kusama Runtime -//! -//! Asset Hub Kusama, formerly known as "Statemine", is the canary network for its Polkadot cousin. - -#![cfg_attr(not(feature = "std"), no_std)] -#![recursion_limit = "256"] - -// Make the WASM binary available. -#[cfg(feature = "std")] -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -mod weights; -pub mod xcm_config; - -use assets_common::{ - foreign_creators::ForeignCreators, - local_and_foreign_assets::{LocalAndForeignAssets, MultiLocationConverter}, - matching::FromSiblingParachain, - AssetIdForTrustBackedAssetsConvert, MultiLocationForAssetId, -}; -use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; -use polkadot_runtime_common::xcm_sender::NoPriceForMessageDelivery; -use sp_api::impl_runtime_apis; -use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; -use sp_runtime::{ - create_runtime_str, generic, impl_opaque_keys, - traits::{AccountIdConversion, AccountIdLookup, BlakeTwo256, Block as BlockT, Verify}, - transaction_validity::{TransactionSource, TransactionValidity}, - ApplyExtrinsicResult, Perbill, Permill, -}; - -use sp_std::prelude::*; -#[cfg(feature = "std")] -use sp_version::NativeVersion; -use sp_version::RuntimeVersion; - -use codec::{Decode, Encode, MaxEncodedLen}; -use cumulus_primitives_core::{AggregateMessageOrigin, ParaId}; -use frame_support::{ - construct_runtime, - dispatch::DispatchClass, - genesis_builder_helper::{build_config, create_default_config}, - ord_parameter_types, parameter_types, - traits::{ - AsEnsureOriginWithArg, ConstBool, ConstU128, ConstU32, ConstU64, ConstU8, EitherOfDiverse, - InstanceFilter, TransformOrigin, - }, - weights::{ConstantMultiplier, Weight}, - BoundedVec, PalletId, -}; -use frame_system::{ - limits::{BlockLength, BlockWeights}, - EnsureRoot, EnsureSigned, EnsureSignedBy, -}; -use pallet_asset_conversion_tx_payment::AssetConversionAdapter; -use pallet_nfts::PalletFeatures; -pub use parachains_common as common; -use parachains_common::{ - impls::DealWithFees, - kusama::{consensus::*, currency::*, fee::WeightToFee}, - message_queue::{NarrowOriginToSibling, ParaIdToSibling}, - AccountId, AssetIdForTrustBackedAssets, AuraId, Balance, BlockNumber, Hash, Header, Nonce, - Signature, AVERAGE_ON_INITIALIZE_RATIO, DAYS, HOURS, MAXIMUM_BLOCK_WEIGHT, - NORMAL_DISPATCH_RATIO, SLOT_DURATION, -}; -use sp_runtime::RuntimeDebug; -use xcm::opaque::v3::MultiLocation; -use xcm_config::{ - FellowshipLocation, ForeignAssetsConvertedConcreteId, GovernanceLocation, KsmLocation, - PoolAssetsConvertedConcreteId, TrustBackedAssetsConvertedConcreteId, -}; - -#[cfg(any(feature = "std", test))] -pub use sp_runtime::BuildStorage; - -// Polkadot imports -use pallet_xcm::{EnsureXcm, IsVoiceOfBody}; -use polkadot_runtime_common::{BlockHashCount, SlowAdjustingFeeUpdate}; -use xcm::latest::BodyId; - -use crate::xcm_config::{ - ForeignCreatorsSovereignAccountOf, LocalAndForeignAssetsMultiLocationMatcher, - TrustBackedAssetsPalletLocation, -}; -use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight}; - -impl_opaque_keys! { - pub struct SessionKeys { - pub aura: Aura, - } -} - -#[cfg(feature = "state-trie-version-1")] -#[sp_version::runtime_version] -pub const VERSION: RuntimeVersion = RuntimeVersion { - // Note: "statemine" is the legacy name for this chain. It has been renamed to - // "asset-hub-kusama". Many wallets/tools depend on the `spec_name`, so it remains "statemine" - // for the time being. Wallets/tools should update to treat "asset-hub-kusama" equally. - spec_name: create_runtime_str!("statemine"), - impl_name: create_runtime_str!("statemine"), - authoring_version: 1, - spec_version: 1_004_000, - impl_version: 0, - apis: RUNTIME_API_VERSIONS, - transaction_version: 13, - state_version: 1, -}; - -#[cfg(not(feature = "state-trie-version-1"))] -#[sp_version::runtime_version] -pub const VERSION: RuntimeVersion = RuntimeVersion { - // Note: "statemine" is the legacy name for this change. It has been renamed to - // "asset-hub-kusama". Many wallets/tools depend on the `spec_name`, so it remains "statemine" - // for the time being. Wallets/tools should update to treat "asset-hub-kusama" equally. - spec_name: create_runtime_str!("statemine"), - impl_name: create_runtime_str!("statemine"), - authoring_version: 1, - spec_version: 1_004_000, - impl_version: 0, - apis: RUNTIME_API_VERSIONS, - transaction_version: 13, - state_version: 0, -}; - -/// The version information used to identify this runtime when compiled natively. -#[cfg(feature = "std")] -pub fn native_version() -> NativeVersion { - NativeVersion { runtime_version: VERSION, can_author_with: Default::default() } -} - -parameter_types! { - pub const Version: RuntimeVersion = VERSION; - pub RuntimeBlockLength: BlockLength = - BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); - pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() - .base_block(BlockExecutionWeight::get()) - .for_class(DispatchClass::all(), |weights| { - weights.base_extrinsic = ExtrinsicBaseWeight::get(); - }) - .for_class(DispatchClass::Normal, |weights| { - weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); - }) - .for_class(DispatchClass::Operational, |weights| { - weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT); - // Operational transactions have some extra reserved space, so that they - // are included even if block reached `MAXIMUM_BLOCK_WEIGHT`. - weights.reserved = Some( - MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT - ); - }) - .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO) - .build_or_panic(); - pub const SS58Prefix: u8 = 2; -} - -// Configure FRAME pallets to include in runtime. -impl frame_system::Config for Runtime { - type BaseCallFilter = frame_support::traits::Everything; - type BlockWeights = RuntimeBlockWeights; - type BlockLength = RuntimeBlockLength; - type AccountId = AccountId; - type RuntimeCall = RuntimeCall; - type Lookup = AccountIdLookup; - type Nonce = Nonce; - type Hash = Hash; - type Hashing = BlakeTwo256; - type Block = Block; - type RuntimeEvent = RuntimeEvent; - type RuntimeOrigin = RuntimeOrigin; - type BlockHashCount = BlockHashCount; - type DbWeight = RocksDbWeight; - type Version = Version; - type PalletInfo = PalletInfo; - type OnNewAccount = (); - type OnKilledAccount = (); - type AccountData = pallet_balances::AccountData; - type SystemWeightInfo = weights::frame_system::WeightInfo; - type SS58Prefix = SS58Prefix; - type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode; - type MaxConsumers = frame_support::traits::ConstU32<16>; -} - -impl pallet_timestamp::Config for Runtime { - /// A timestamp: milliseconds since the unix epoch. - type Moment = u64; - type OnTimestampSet = Aura; - type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; - type WeightInfo = weights::pallet_timestamp::WeightInfo; -} - -impl pallet_authorship::Config for Runtime { - type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type EventHandler = (CollatorSelection,); -} - -parameter_types! { - pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; -} - -impl pallet_balances::Config for Runtime { - type MaxLocks = ConstU32<50>; - /// The type for recording an account's balance. - type Balance = Balance; - /// The ubiquitous event type. - type RuntimeEvent = RuntimeEvent; - type DustRemoval = (); - type ExistentialDeposit = ExistentialDeposit; - type AccountStore = System; - type WeightInfo = weights::pallet_balances::WeightInfo; - type MaxReserves = ConstU32<50>; - type ReserveIdentifier = [u8; 8]; - type RuntimeHoldReason = RuntimeHoldReason; - type RuntimeFreezeReason = RuntimeFreezeReason; - type FreezeIdentifier = (); - // We allow each account to have holds on it from: - // - `NftFractionalization`: 1 - type MaxHolds = ConstU32<1>; - type MaxFreezes = ConstU32<0>; -} - -parameter_types! { - /// Relay Chain `TransactionByteFee` / 10 - pub const TransactionByteFee: Balance = MILLICENTS; -} - -impl pallet_transaction_payment::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type OnChargeTransaction = - pallet_transaction_payment::CurrencyAdapter>; - type WeightToFee = WeightToFee; - type LengthToFee = ConstantMultiplier; - type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; - type OperationalFeeMultiplier = ConstU8<5>; -} - -parameter_types! { - pub const AssetDeposit: Balance = UNITS / 10; // 1 / 10 UNITS deposit to create asset - pub const AssetAccountDeposit: Balance = deposit(1, 16); - pub const ApprovalDeposit: Balance = EXISTENTIAL_DEPOSIT; - pub const AssetsStringLimit: u32 = 50; - /// Key = 32 bytes, Value = 36 bytes (32+1+1+1+1) - // https://github.com/paritytech/substrate/blob/069917b/frame/assets/src/lib.rs#L257L271 - pub const MetadataDepositBase: Balance = deposit(1, 68); - pub const MetadataDepositPerByte: Balance = deposit(0, 1); -} - -/// We allow root to execute privileged asset operations. -pub type AssetsForceOrigin = EnsureRoot; - -// Called "Trust Backed" assets because these are generally registered by some account, and users of -// the asset assume it has some claimed backing. The pallet is called `Assets` in -// `construct_runtime` to avoid breaking changes on storage reads. -pub type TrustBackedAssetsInstance = pallet_assets::Instance1; -type TrustBackedAssetsCall = pallet_assets::Call; -impl pallet_assets::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Balance = Balance; - type AssetId = AssetIdForTrustBackedAssets; - type AssetIdParameter = codec::Compact; - type Currency = Balances; - type CreateOrigin = AsEnsureOriginWithArg>; - type ForceOrigin = AssetsForceOrigin; - type AssetDeposit = AssetDeposit; - type MetadataDepositBase = MetadataDepositBase; - type MetadataDepositPerByte = MetadataDepositPerByte; - type ApprovalDeposit = ApprovalDeposit; - type StringLimit = AssetsStringLimit; - type Freezer = (); - type Extra = (); - type WeightInfo = weights::pallet_assets_local::WeightInfo; - type CallbackHandle = (); - type AssetAccountDeposit = AssetAccountDeposit; - type RemoveItemsLimit = frame_support::traits::ConstU32<1000>; - #[cfg(feature = "runtime-benchmarks")] - type BenchmarkHelper = (); -} - -parameter_types! { - pub const AssetConversionPalletId: PalletId = PalletId(*b"py/ascon"); - pub const AllowMultiAssetPools: bool = false; - // should be non-zero if AllowMultiAssetPools is true, otherwise can be zero - pub const LiquidityWithdrawalFee: Permill = Permill::from_percent(0); -} - -ord_parameter_types! { - pub const AssetConversionOrigin: sp_runtime::AccountId32 = - AccountIdConversion::::into_account_truncating(&AssetConversionPalletId::get()); -} - -pub type PoolAssetsInstance = pallet_assets::Instance3; -impl pallet_assets::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Balance = Balance; - type RemoveItemsLimit = ConstU32<1000>; - type AssetId = u32; - type AssetIdParameter = u32; - type Currency = Balances; - type CreateOrigin = - AsEnsureOriginWithArg>; - type ForceOrigin = AssetsForceOrigin; - // Deposits are zero because creation/admin is limited to Asset Conversion pallet. - type AssetDeposit = ConstU128<0>; - type AssetAccountDeposit = ConstU128<0>; - type MetadataDepositBase = ConstU128<0>; - type MetadataDepositPerByte = ConstU128<0>; - type ApprovalDeposit = ApprovalDeposit; - type StringLimit = ConstU32<50>; - type Freezer = (); - type Extra = (); - type WeightInfo = weights::pallet_assets_pool::WeightInfo; - type CallbackHandle = (); - #[cfg(feature = "runtime-benchmarks")] - type BenchmarkHelper = (); -} - -impl pallet_asset_conversion::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Balance = Balance; - type HigherPrecisionBalance = sp_core::U256; - type Currency = Balances; - type AssetBalance = Balance; - type AssetId = MultiLocation; - type Assets = LocalAndForeignAssets< - Assets, - AssetIdForTrustBackedAssetsConvert, - ForeignAssets, - >; - type PoolAssets = PoolAssets; - type PoolAssetId = u32; - type PoolSetupFee = ConstU128<0>; // Asset class deposit fees are sufficient to prevent spam - type PoolSetupFeeReceiver = AssetConversionOrigin; - // should be non-zero if `AllowMultiAssetPools` is true, otherwise can be zero. - type LiquidityWithdrawalFee = LiquidityWithdrawalFee; - type LPFee = ConstU32<3>; - type PalletId = AssetConversionPalletId; - type AllowMultiAssetPools = AllowMultiAssetPools; - type MaxSwapPathLength = ConstU32<4>; - type MultiAssetId = Box; - type MultiAssetIdConverter = - MultiLocationConverter; - type MintMinLiquidity = ConstU128<100>; - type WeightInfo = weights::pallet_asset_conversion::WeightInfo; - #[cfg(feature = "runtime-benchmarks")] - type BenchmarkHelper = - crate::xcm_config::BenchmarkMultiLocationConverter>; -} - -parameter_types! { - // we just reuse the same deposits - pub const ForeignAssetsAssetDeposit: Balance = AssetDeposit::get(); - pub const ForeignAssetsAssetAccountDeposit: Balance = AssetAccountDeposit::get(); - pub const ForeignAssetsApprovalDeposit: Balance = ApprovalDeposit::get(); - pub const ForeignAssetsAssetsStringLimit: u32 = AssetsStringLimit::get(); - pub const ForeignAssetsMetadataDepositBase: Balance = MetadataDepositBase::get(); - pub const ForeignAssetsMetadataDepositPerByte: Balance = MetadataDepositPerByte::get(); -} - -/// Assets managed by some foreign location. Note: we do not declare a `ForeignAssetsCall` type, as -/// this type is used in proxy definitions. We assume that a foreign location would not want to set -/// an individual, local account as a proxy for the issuance of their assets. This issuance should -/// be managed by the foreign location's governance. -pub type ForeignAssetsInstance = pallet_assets::Instance2; -impl pallet_assets::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Balance = Balance; - type AssetId = MultiLocationForAssetId; - type AssetIdParameter = MultiLocationForAssetId; - type Currency = Balances; - type CreateOrigin = ForeignCreators< - (FromSiblingParachain>,), - ForeignCreatorsSovereignAccountOf, - AccountId, - >; - type ForceOrigin = AssetsForceOrigin; - type AssetDeposit = ForeignAssetsAssetDeposit; - type MetadataDepositBase = ForeignAssetsMetadataDepositBase; - type MetadataDepositPerByte = ForeignAssetsMetadataDepositPerByte; - type ApprovalDeposit = ForeignAssetsApprovalDeposit; - type StringLimit = ForeignAssetsAssetsStringLimit; - type Freezer = (); - type Extra = (); - type WeightInfo = weights::pallet_assets_foreign::WeightInfo; - type CallbackHandle = (); - type AssetAccountDeposit = ForeignAssetsAssetAccountDeposit; - type RemoveItemsLimit = frame_support::traits::ConstU32<1000>; - #[cfg(feature = "runtime-benchmarks")] - type BenchmarkHelper = xcm_config::XcmBenchmarkHelper; -} - -parameter_types! { - // One storage item; key size is 32; value is size 4+4+16+32 bytes = 56 bytes. - pub const DepositBase: Balance = deposit(1, 88); - // Additional storage item size of 32 bytes. - pub const DepositFactor: Balance = deposit(0, 32); - pub const MaxSignatories: u32 = 100; -} - -impl pallet_multisig::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type Currency = Balances; - type DepositBase = DepositBase; - type DepositFactor = DepositFactor; - type MaxSignatories = MaxSignatories; - type WeightInfo = weights::pallet_multisig::WeightInfo; -} - -impl pallet_utility::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type PalletsOrigin = OriginCaller; - type WeightInfo = weights::pallet_utility::WeightInfo; -} - -parameter_types! { - // One storage item; key size 32, value size 8; . - pub const ProxyDepositBase: Balance = deposit(1, 40); - // Additional storage item size of 33 bytes. - pub const ProxyDepositFactor: Balance = deposit(0, 33); - pub const MaxProxies: u16 = 32; - // One storage item; key size 32, value size 16 - pub const AnnouncementDepositBase: Balance = deposit(1, 48); - pub const AnnouncementDepositFactor: Balance = deposit(0, 66); - pub const MaxPending: u16 = 32; -} - -/// The type used to represent the kinds of proxying allowed. -#[derive( - Copy, - Clone, - Eq, - PartialEq, - Ord, - PartialOrd, - Encode, - Decode, - RuntimeDebug, - MaxEncodedLen, - scale_info::TypeInfo, -)] -pub enum ProxyType { - /// Fully permissioned proxy. Can execute any call on behalf of _proxied_. - Any, - /// Can execute any call that does not transfer funds or assets. - NonTransfer, - /// Proxy with the ability to reject time-delay proxy announcements. - CancelProxy, - /// Assets proxy. Can execute any call from `assets`, **including asset transfers**. - Assets, - /// Owner proxy. Can execute calls related to asset ownership. - AssetOwner, - /// Asset manager. Can execute calls related to asset management. - AssetManager, - /// Collator selection proxy. Can execute calls related to collator selection mechanism. - Collator, -} -impl Default for ProxyType { - fn default() -> Self { - Self::Any - } -} - -impl InstanceFilter for ProxyType { - fn filter(&self, c: &RuntimeCall) -> bool { - match self { - ProxyType::Any => true, - ProxyType::NonTransfer => !matches!( - c, - RuntimeCall::Balances { .. } | - RuntimeCall::Assets { .. } | - RuntimeCall::NftFractionalization { .. } | - RuntimeCall::Nfts { .. } | - RuntimeCall::Uniques { .. } - ), - ProxyType::CancelProxy => matches!( - c, - RuntimeCall::Proxy(pallet_proxy::Call::reject_announcement { .. }) | - RuntimeCall::Utility { .. } | - RuntimeCall::Multisig { .. } - ), - ProxyType::Assets => { - matches!( - c, - RuntimeCall::Assets { .. } | - RuntimeCall::Utility { .. } | - RuntimeCall::Multisig { .. } | - RuntimeCall::NftFractionalization { .. } | - RuntimeCall::Nfts { .. } | RuntimeCall::Uniques { .. } - ) - }, - ProxyType::AssetOwner => matches!( - c, - RuntimeCall::Assets(TrustBackedAssetsCall::create { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::start_destroy { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::destroy_accounts { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::destroy_approvals { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::finish_destroy { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::transfer_ownership { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::set_team { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::set_metadata { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::clear_metadata { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::set_min_balance { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::create { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::destroy { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::redeposit { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::transfer_ownership { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::set_team { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::set_collection_max_supply { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::lock_collection { .. }) | - 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, - RuntimeCall::Assets(TrustBackedAssetsCall::mint { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::burn { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::freeze { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::block { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::thaw { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::freeze_asset { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::thaw_asset { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::touch_other { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::refund_other { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::force_mint { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::update_mint_settings { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::mint_pre_signed { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::set_attributes_pre_signed { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::lock_item_transfer { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::unlock_item_transfer { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::lock_item_properties { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::set_metadata { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::clear_metadata { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::set_collection_metadata { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::clear_collection_metadata { .. }) | - 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, - RuntimeCall::CollatorSelection { .. } | - RuntimeCall::Utility { .. } | - RuntimeCall::Multisig { .. } - ), - } - } - - fn is_superset(&self, o: &Self) -> bool { - match (self, o) { - (x, y) if x == y => true, - (ProxyType::Any, _) => true, - (_, ProxyType::Any) => false, - (ProxyType::Assets, ProxyType::AssetOwner) => true, - (ProxyType::Assets, ProxyType::AssetManager) => true, - (ProxyType::NonTransfer, ProxyType::Collator) => true, - _ => false, - } - } -} - -impl pallet_proxy::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type Currency = Balances; - type ProxyType = ProxyType; - type ProxyDepositBase = ProxyDepositBase; - type ProxyDepositFactor = ProxyDepositFactor; - type MaxProxies = MaxProxies; - type WeightInfo = weights::pallet_proxy::WeightInfo; - type MaxPending = MaxPending; - type CallHasher = BlakeTwo256; - type AnnouncementDepositBase = AnnouncementDepositBase; - type AnnouncementDepositFactor = AnnouncementDepositFactor; -} - -parameter_types! { - 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 { - type WeightInfo = weights::cumulus_pallet_parachain_system::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type OnSystemEvent = (); - type SelfParaId = parachain_info::Pallet; - type DmpQueue = frame_support::traits::EnqueueWithOrigin; - type ReservedDmpWeight = ReservedDmpWeight; - type OutboundXcmpMessageSource = XcmpQueue; - type XcmpMessageHandler = XcmpQueue; - type ReservedXcmpWeight = ReservedXcmpWeight; - type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; - type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< - Runtime, - RELAY_CHAIN_SLOT_DURATION_MILLIS, - BLOCK_PROCESSING_VELOCITY, - UNINCLUDED_SEGMENT_CAPACITY, - >; -} - -impl parachain_info::Config for Runtime {} - -parameter_types! { - pub MessageQueueServiceWeight: Weight = Perbill::from_percent(35) * RuntimeBlockWeights::get().max_block; -} - -impl pallet_message_queue::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = weights::pallet_message_queue::WeightInfo; - #[cfg(feature = "runtime-benchmarks")] - type MessageProcessor = pallet_message_queue::mock_helpers::NoopMessageProcessor< - cumulus_primitives_core::AggregateMessageOrigin, - >; - #[cfg(not(feature = "runtime-benchmarks"))] - type MessageProcessor = xcm_builder::ProcessXcmMessage< - AggregateMessageOrigin, - xcm_executor::XcmExecutor, - RuntimeCall, - >; - type Size = u32; - // The XCMP queue pallet is only ever able to handle the `Sibling(ParaId)` origin: - type QueueChangeHandler = NarrowOriginToSibling; - type QueuePausedQuery = NarrowOriginToSibling; - type HeapSize = sp_core::ConstU32<{ 64 * 1024 }>; - type MaxStale = sp_core::ConstU32<8>; - type ServiceWeight = MessageQueueServiceWeight; -} - -impl cumulus_pallet_aura_ext::Config for Runtime {} - -parameter_types! { - // Fellows pluralistic body. - pub const FellowsBodyId: BodyId = BodyId::Technical; -} - -impl cumulus_pallet_xcmp_queue::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type ChannelInfo = ParachainSystem; - type VersionWrapper = PolkadotXcm; - // Enqueue XCMP messages from siblings for later processing. - type XcmpQueue = TransformOrigin; - type MaxInboundSuspended = sp_core::ConstU32<1_000>; - type ControllerOrigin = EitherOfDiverse< - EnsureRoot, - EnsureXcm>, - >; - type ControllerOriginConverter = xcm_config::XcmOriginToTransactDispatchOrigin; - type WeightInfo = weights::cumulus_pallet_xcmp_queue::WeightInfo; - type PriceForSiblingDelivery = NoPriceForMessageDelivery; -} - -parameter_types! { - pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; -} - -impl cumulus_pallet_dmp_queue::Config for Runtime { - type WeightInfo = weights::cumulus_pallet_dmp_queue::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type DmpSink = frame_support::traits::EnqueueWithOrigin; -} - -parameter_types! { - pub const Period: u32 = 6 * HOURS; - pub const Offset: u32 = 0; -} - -impl pallet_session::Config for Runtime { - 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; - type ShouldEndSession = pallet_session::PeriodicSessions; - type NextSessionRotation = pallet_session::PeriodicSessions; - type SessionManager = CollatorSelection; - // Essentially just Aura, but let's be pedantic. - type SessionHandler = ::KeyTypeIdProviders; - type Keys = SessionKeys; - type WeightInfo = weights::pallet_session::WeightInfo; -} - -impl pallet_aura::Config for Runtime { - type AuthorityId = AuraId; - type DisabledValidators = (); - type MaxAuthorities = ConstU32<100_000>; - type AllowMultipleBlocksPerSlot = ConstBool; - #[cfg(feature = "experimental")] - type SlotDuration = pallet_aura::MinimumPeriodTimesTwo; -} - -parameter_types! { - pub const PotId: PalletId = PalletId(*b"PotStake"); - pub const SessionLength: BlockNumber = 6 * HOURS; - // StakingAdmin pluralistic body. - pub const StakingAdminBodyId: BodyId = BodyId::Defense; -} - -/// We allow root and the `StakingAdmin` to execute privileged collator selection operations. -pub type CollatorSelectionUpdateOrigin = EitherOfDiverse< - EnsureRoot, - EnsureXcm>, ->; - -impl pallet_collator_selection::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type UpdateOrigin = CollatorSelectionUpdateOrigin; - type PotId = PotId; - type MaxCandidates = ConstU32<100>; - type MinEligibleCollators = ConstU32<4>; - type MaxInvulnerables = ConstU32<20>; - // should be a multiple of session or things will get inconsistent - type KickThreshold = Period; - type ValidatorId = ::AccountId; - type ValidatorIdOf = pallet_collator_selection::IdentityCollator; - type ValidatorRegistration = Session; - type WeightInfo = weights::pallet_collator_selection::WeightInfo; -} - -impl pallet_asset_conversion_tx_payment::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Fungibles = LocalAndForeignAssets< - Assets, - AssetIdForTrustBackedAssetsConvert, - ForeignAssets, - >; - type OnChargeAssetTransaction = AssetConversionAdapter; -} - -parameter_types! { - pub const UniquesCollectionDeposit: Balance = UNITS / 10; // 1 / 10 UNIT deposit to create a collection - pub const UniquesItemDeposit: Balance = UNITS / 1_000; // 1 / 1000 UNIT deposit to mint an item - pub const UniquesMetadataDepositBase: Balance = deposit(1, 129); - pub const UniquesAttributeDepositBase: Balance = deposit(1, 0); - pub const UniquesDepositPerByte: Balance = deposit(0, 1); -} - -impl pallet_uniques::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type CollectionId = u32; - type ItemId = u32; - type Currency = Balances; - type ForceOrigin = AssetsForceOrigin; - type CollectionDeposit = UniquesCollectionDeposit; - type ItemDeposit = UniquesItemDeposit; - type MetadataDepositBase = UniquesMetadataDepositBase; - type AttributeDepositBase = UniquesAttributeDepositBase; - type DepositPerByte = UniquesDepositPerByte; - type StringLimit = ConstU32<128>; - type KeyLimit = ConstU32<32>; - type ValueLimit = ConstU32<64>; - type WeightInfo = weights::pallet_uniques::WeightInfo; - #[cfg(feature = "runtime-benchmarks")] - type Helper = (); - type CreateOrigin = AsEnsureOriginWithArg>; - type Locker = (); -} - -parameter_types! { - pub const NftFractionalizationPalletId: PalletId = PalletId(*b"fraction"); - pub NewAssetSymbol: BoundedVec = (*b"FRAC").to_vec().try_into().unwrap(); - pub NewAssetName: BoundedVec = (*b"Frac").to_vec().try_into().unwrap(); -} - -impl pallet_nft_fractionalization::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Deposit = AssetDeposit; - type Currency = Balances; - type NewAssetSymbol = NewAssetSymbol; - type NewAssetName = NewAssetName; - type StringLimit = AssetsStringLimit; - type NftCollectionId = ::CollectionId; - type NftId = ::ItemId; - type AssetBalance = ::Balance; - type AssetId = >::AssetId; - type Assets = Assets; - type Nfts = Nfts; - type PalletId = NftFractionalizationPalletId; - type WeightInfo = pallet_nft_fractionalization::weights::SubstrateWeight; - type RuntimeHoldReason = RuntimeHoldReason; - #[cfg(feature = "runtime-benchmarks")] - type BenchmarkHelper = (); -} - -parameter_types! { - pub NftsPalletFeatures: PalletFeatures = PalletFeatures::all_enabled(); - pub const NftsMaxDeadlineDuration: BlockNumber = 12 * 30 * DAYS; - // re-use the Uniques deposits - pub const NftsCollectionDeposit: Balance = UniquesCollectionDeposit::get(); - pub const NftsItemDeposit: Balance = UniquesItemDeposit::get(); - pub const NftsMetadataDepositBase: Balance = UniquesMetadataDepositBase::get(); - pub const NftsAttributeDepositBase: Balance = UniquesAttributeDepositBase::get(); - pub const NftsDepositPerByte: Balance = UniquesDepositPerByte::get(); -} - -impl pallet_nfts::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type CollectionId = u32; - type ItemId = u32; - type Currency = Balances; - type CreateOrigin = AsEnsureOriginWithArg>; - type ForceOrigin = AssetsForceOrigin; - type Locker = (); - type CollectionDeposit = NftsCollectionDeposit; - type ItemDeposit = NftsItemDeposit; - type MetadataDepositBase = NftsMetadataDepositBase; - type AttributeDepositBase = NftsAttributeDepositBase; - type DepositPerByte = NftsDepositPerByte; - type StringLimit = ConstU32<256>; - type KeyLimit = ConstU32<64>; - type ValueLimit = ConstU32<256>; - type ApprovalsLimit = ConstU32<20>; - type ItemAttributesApprovalsLimit = ConstU32<30>; - type MaxTips = ConstU32<10>; - type MaxDeadlineDuration = NftsMaxDeadlineDuration; - type MaxAttributesPerCall = ConstU32<10>; - type Features = NftsPalletFeatures; - type OffchainSignature = Signature; - type OffchainPublic = ::Signer; - type WeightInfo = weights::pallet_nfts::WeightInfo; - #[cfg(feature = "runtime-benchmarks")] - type Helper = (); -} - -// Create the runtime by composing the FRAME pallets that were previously configured. -construct_runtime!( - pub enum Runtime - { - // System support stuff. - System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, - ParachainSystem: cumulus_pallet_parachain_system::{ - Pallet, Call, Config, Storage, Inherent, Event, ValidateUnsigned, - } = 1, - // RandomnessCollectiveFlip = 2 removed - Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 3, - ParachainInfo: parachain_info::{Pallet, Storage, Config} = 4, - - // Monetary stuff. - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event} = 10, - TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event} = 11, - AssetTxPayment: pallet_asset_conversion_tx_payment::{Pallet, Event} = 13, - - // Collator support. the order of these 5 are important and shall not change. - Authorship: pallet_authorship::{Pallet, Storage} = 20, - CollatorSelection: pallet_collator_selection::{Pallet, Call, Storage, Event, Config} = 21, - Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 22, - Aura: pallet_aura::{Pallet, Storage, Config} = 23, - AuraExt: cumulus_pallet_aura_ext::{Pallet, Storage, Config} = 24, - - // XCM helpers. - XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event} = 30, - PolkadotXcm: pallet_xcm::{Pallet, Call, Storage, Event, Origin, Config} = 31, - CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 32, - // Temporary to migrate the remaining DMP messages: - DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 33, - MessageQueue: pallet_message_queue::{Pallet, Call, Storage, Event} = 34, - - // Handy utilities. - Utility: pallet_utility::{Pallet, Call, Event} = 40, - Multisig: pallet_multisig::{Pallet, Call, Storage, Event} = 41, - Proxy: pallet_proxy::{Pallet, Call, Storage, Event} = 42, - - // The main stage. - Assets: pallet_assets::::{Pallet, Call, Storage, Event} = 50, - Uniques: pallet_uniques::{Pallet, Call, Storage, Event} = 51, - Nfts: pallet_nfts::{Pallet, Call, Storage, Event} = 52, - ForeignAssets: pallet_assets::::{Pallet, Call, Storage, Event} = 53, - NftFractionalization: pallet_nft_fractionalization::{Pallet, Call, Storage, Event, HoldReason} = 54, - - PoolAssets: pallet_assets::::{Pallet, Call, Storage, Event} = 55, - AssetConversion: pallet_asset_conversion::{Pallet, Call, Storage, Event} = 56, - - #[cfg(feature = "state-trie-version-1")] - StateTrieMigration: pallet_state_trie_migration = 70, - } -); - -/// The address format for describing accounts. -pub type Address = sp_runtime::MultiAddress; -/// Block type as expected by this runtime. -pub type Block = generic::Block; -/// A Block signed with a Justification -pub type SignedBlock = generic::SignedBlock; -/// BlockId type as expected by this runtime. -pub type BlockId = generic::BlockId; -/// The SignedExtension to the basic transaction logic. -pub type SignedExtra = ( - frame_system::CheckNonZeroSender, - frame_system::CheckSpecVersion, - frame_system::CheckTxVersion, - frame_system::CheckGenesis, - frame_system::CheckEra, - frame_system::CheckNonce, - frame_system::CheckWeight, - pallet_asset_conversion_tx_payment::ChargeAssetTxPayment, -); -/// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = - generic::UncheckedExtrinsic; -/// Migrations to apply on runtime upgrade. -pub type Migrations = (pallet_collator_selection::migration::v1::MigrateToV1,); - -/// Executive: handles dispatch to the various modules. -pub type Executive = frame_executive::Executive< - Runtime, - Block, - frame_system::ChainContext, - Runtime, - AllPalletsWithSystem, - Migrations, ->; - -#[cfg(feature = "runtime-benchmarks")] -mod benches { - frame_benchmarking::define_benchmarks!( - [frame_system, SystemBench::] - [pallet_assets, Local] - [pallet_assets, Foreign] - [pallet_assets, Pool] - [pallet_asset_conversion, AssetConversion] - [pallet_balances, Balances] - [pallet_message_queue, MessageQueue] - [pallet_multisig, Multisig] - [pallet_nft_fractionalization, NftFractionalization] - [pallet_nfts, Nfts] - [pallet_proxy, Proxy] - [pallet_session, SessionBench::] - [pallet_uniques, Uniques] - [pallet_utility, Utility] - [pallet_timestamp, Timestamp] - [pallet_collator_selection, CollatorSelection] - [cumulus_pallet_parachain_system, ParachainSystem] - [cumulus_pallet_xcmp_queue, XcmpQueue] - [cumulus_pallet_dmp_queue, DmpQueue] - // XCM - [pallet_xcm, PalletXcmExtrinsicsBenchmark::] - // NOTE: Make sure you point to the individual modules below. - [pallet_xcm_benchmarks::fungible, XcmBalances] - [pallet_xcm_benchmarks::generic, XcmGeneric] - ); -} - -impl_runtime_apis! { - impl sp_consensus_aura::AuraApi for Runtime { - fn slot_duration() -> sp_consensus_aura::SlotDuration { - sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) - } - - fn authorities() -> Vec { - Aura::authorities().into_inner() - } - } - - impl sp_api::Core for Runtime { - fn version() -> RuntimeVersion { - VERSION - } - - fn execute_block(block: Block) { - Executive::execute_block(block) - } - - fn initialize_block(header: &::Header) { - Executive::initialize_block(header) - } - } - - impl sp_api::Metadata for Runtime { - fn metadata() -> OpaqueMetadata { - OpaqueMetadata::new(Runtime::metadata().into()) - } - - fn metadata_at_version(version: u32) -> Option { - Runtime::metadata_at_version(version) - } - - fn metadata_versions() -> sp_std::vec::Vec { - Runtime::metadata_versions() - } - } - - impl sp_block_builder::BlockBuilder for Runtime { - fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyExtrinsicResult { - Executive::apply_extrinsic(extrinsic) - } - - fn finalize_block() -> ::Header { - Executive::finalize_block() - } - - fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { - data.create_extrinsics() - } - - fn check_inherents( - block: Block, - data: sp_inherents::InherentData, - ) -> sp_inherents::CheckInherentsResult { - data.check_extrinsics(&block) - } - } - - impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { - fn validate_transaction( - source: TransactionSource, - tx: ::Extrinsic, - block_hash: ::Hash, - ) -> TransactionValidity { - Executive::validate_transaction(source, tx, block_hash) - } - } - - impl sp_offchain::OffchainWorkerApi for Runtime { - fn offchain_worker(header: &::Header) { - Executive::offchain_worker(header) - } - } - - impl sp_session::SessionKeys for Runtime { - fn generate_session_keys(seed: Option>) -> Vec { - SessionKeys::generate(seed) - } - - fn decode_session_keys( - encoded: Vec, - ) -> Option, KeyTypeId)>> { - SessionKeys::decode_into_raw_public_keys(&encoded) - } - } - - impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { - fn account_nonce(account: AccountId) -> Nonce { - System::account_nonce(account) - } - } - - impl pallet_asset_conversion::AssetConversionApi< - Block, - Balance, - u128, - Box, - > for Runtime - { - fn quote_price_exact_tokens_for_tokens(asset1: Box, asset2: Box, amount: u128, include_fee: bool) -> Option { - AssetConversion::quote_price_exact_tokens_for_tokens(asset1, asset2, amount, include_fee) - } - fn quote_price_tokens_for_exact_tokens(asset1: Box, asset2: Box, amount: u128, include_fee: bool) -> Option { - AssetConversion::quote_price_tokens_for_exact_tokens(asset1, asset2, amount, include_fee) - } - fn get_reserves(asset1: Box, asset2: Box) -> Option<(Balance, Balance)> { - AssetConversion::get_reserves(&asset1, &asset2).ok() - } - } - - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi for Runtime { - fn query_info( - uxt: ::Extrinsic, - len: u32, - ) -> pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo { - TransactionPayment::query_info(uxt, len) - } - fn query_fee_details( - uxt: ::Extrinsic, - len: u32, - ) -> pallet_transaction_payment::FeeDetails { - TransactionPayment::query_fee_details(uxt, len) - } - fn query_weight_to_fee(weight: Weight) -> Balance { - TransactionPayment::weight_to_fee(weight) - } - fn query_length_to_fee(length: u32) -> Balance { - TransactionPayment::length_to_fee(length) - } - } - - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi - for Runtime - { - fn query_call_info( - call: RuntimeCall, - len: u32, - ) -> pallet_transaction_payment::RuntimeDispatchInfo { - TransactionPayment::query_call_info(call, len) - } - fn query_call_fee_details( - call: RuntimeCall, - len: u32, - ) -> pallet_transaction_payment::FeeDetails { - TransactionPayment::query_call_fee_details(call, len) - } - fn query_weight_to_fee(weight: Weight) -> Balance { - TransactionPayment::weight_to_fee(weight) - } - fn query_length_to_fee(length: u32) -> Balance { - TransactionPayment::length_to_fee(length) - } - } - - impl assets_common::runtime_api::FungiblesApi< - Block, - AccountId, - > for Runtime - { - fn query_account_balances(account: AccountId) -> Result { - use assets_common::fungible_conversion::{convert, convert_balance}; - Ok([ - // collect pallet_balance - { - let balance = Balances::free_balance(account.clone()); - if balance > 0 { - vec![convert_balance::(balance)?] - } else { - vec![] - } - }, - // collect pallet_assets (TrustBackedAssets) - convert::<_, _, _, _, TrustBackedAssetsConvertedConcreteId>( - Assets::account_balances(account.clone()) - .iter() - .filter(|(_, balance)| balance > &0) - )?, - // collect pallet_assets (ForeignAssets) - convert::<_, _, _, _, ForeignAssetsConvertedConcreteId>( - ForeignAssets::account_balances(account.clone()) - .iter() - .filter(|(_, balance)| balance > &0) - )?, - // collect pallet_assets (PoolAssets) - convert::<_, _, _, _, PoolAssetsConvertedConcreteId>( - PoolAssets::account_balances(account) - .iter() - .filter(|(_, balance)| balance > &0) - )?, - // collect ... e.g. other tokens - ].concat().into()) - } - } - - impl cumulus_primitives_core::CollectCollationInfo for Runtime { - fn collect_collation_info(header: &::Header) -> cumulus_primitives_core::CollationInfo { - ParachainSystem::collect_collation_info(header) - } - } - - #[cfg(feature = "try-runtime")] - impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { - let weight = Executive::try_runtime_upgrade(checks).unwrap(); - (weight, RuntimeBlockWeights::get().max_block) - } - - fn execute_block( - block: Block, - state_root_check: bool, - signature_check: bool, - select: frame_try_runtime::TryStateSelect, - ) -> Weight { - // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to - // have a backtrace here. - Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() - } - } - - #[cfg(feature = "runtime-benchmarks")] - impl frame_benchmarking::Benchmark for Runtime { - fn benchmark_metadata(extra: bool) -> ( - 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; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; - - // 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::; - - // Benchmark files generated for `Assets/ForeignAssets` instances are by default - // `pallet_assets_assets.rs / pallet_assets_foreign_assets`, which is not really nice, - // so with this redefinition we can change names to nicer: - // `pallet_assets_local.rs / pallet_assets_foreign.rs`. - type Local = pallet_assets::Pallet::; - type Foreign = pallet_assets::Pallet::; - type Pool = pallet_assets::Pallet::; - - let mut list = Vec::::new(); - list_benchmarks!(list, extra); - - let storage_info = AllPalletsWithSystem::storage_info(); - (list, storage_info) - } - - fn dispatch_benchmark( - config: frame_benchmarking::BenchmarkConfig - ) -> Result, sp_runtime::RuntimeString> { - use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError}; - use sp_storage::TrackedStorageKey; - - use frame_system_benchmarking::Pallet as SystemBench; - impl frame_system_benchmarking::Config for Runtime { - fn setup_set_code_requirements(code: &sp_std::vec::Vec) -> Result<(), BenchmarkError> { - ParachainSystem::initialize_for_set_code_benchmark(code.len() as u32); - Ok(()) - } - - fn verify_set_code() { - System::assert_last_event(cumulus_pallet_parachain_system::Event::::ValidationFunctionStored.into()); - } - } - - use cumulus_pallet_session_benchmarking::Pallet as SessionBench; - impl cumulus_pallet_session_benchmarking::Config for Runtime {} - - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; - impl pallet_xcm::benchmarking::Config for Runtime { - fn reachable_dest() -> Option { - Some(Parent.into()) - } - - fn teleportable_asset_and_dest() -> Option<(MultiAsset, MultiLocation)> { - // Relay/native token can be teleported between AH and Relay. - Some(( - MultiAsset { - fun: Fungible(EXISTENTIAL_DEPOSIT), - id: Concrete(Parent.into()) - }, - Parent.into(), - )) - } - - fn reserve_transferable_asset_and_dest() -> Option<(MultiAsset, MultiLocation)> { - // AH can reserve transfer native token to some random parachain. - let random_para_id = 43211234; - ParachainSystem::open_outbound_hrmp_channel_for_benchmarks_or_tests( - random_para_id.into() - ); - Some(( - MultiAsset { - fun: Fungible(EXISTENTIAL_DEPOSIT), - id: Concrete(Parent.into()) - }, - ParentThen(Parachain(random_para_id).into()).into(), - )) - } - } - - use xcm::latest::prelude::*; - use xcm_config::{KsmLocation, MaxAssetsIntoHolding}; - use pallet_xcm_benchmarks::asset_instance_from; - - parameter_types! { - pub ExistentialDepositMultiAsset: Option = Some(( - KsmLocation::get(), - ExistentialDeposit::get() - ).into()); - } - - impl pallet_xcm_benchmarks::Config for Runtime { - type XcmConfig = xcm_config::XcmConfig; - type AccountIdConverter = xcm_config::LocationToAccountId; - type DeliveryHelper = cumulus_primitives_utility::ToParentDeliveryHelper< - xcm_config::XcmConfig, - ExistentialDepositMultiAsset, - xcm_config::PriceForParentDelivery, - >; - fn valid_destination() -> Result { - Ok(KsmLocation::get()) - } - fn worst_case_holding(depositable_count: u32) -> MultiAssets { - // A mix of fungible, non-fungible, and concrete assets. - let holding_non_fungibles = MaxAssetsIntoHolding::get() / 2 - depositable_count; - let holding_fungibles = holding_non_fungibles.saturating_sub(1); - 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), - } - }) - .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(UNITS), id: Concrete(KsmLocation::get()) }, - )); - pub const CheckedAccount: Option<(AccountId, xcm_builder::MintLocation)> = None; - pub const TrustedReserve: Option<(MultiLocation, MultiAsset)> = 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(UNITS), - } - } - } - - impl pallet_xcm_benchmarks::generic::Config for Runtime { - type TransactAsset = Balances; - type RuntimeCall = RuntimeCall; - - fn worst_case_response() -> (u64, Response) { - (0u64, Response::Version(Default::default())) - } - - fn worst_case_asset_exchange() -> Result<(MultiAssets, MultiAssets), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn universal_alias() -> Result<(MultiLocation, Junction), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn transact_origin_and_runtime_call() -> Result<(MultiLocation, RuntimeCall), BenchmarkError> { - Ok((KsmLocation::get(), frame_system::Call::remark_with_event { remark: vec![] }.into())) - } - - 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)) - } - - fn unlockable_asset() -> Result<(MultiLocation, MultiLocation, MultiAsset), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn export_message_origin_and_destination( - ) -> Result<(MultiLocation, NetworkId, InteriorMultiLocation), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn alias_origin() -> Result<(MultiLocation, MultiLocation), BenchmarkError> { - Err(BenchmarkError::Skip) - } - } - - type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; - type XcmGeneric = pallet_xcm_benchmarks::generic::Pallet::; - - type Local = pallet_assets::Pallet::; - type Foreign = pallet_assets::Pallet::; - type Pool = pallet_assets::Pallet::; - - let whitelist: Vec = vec![ - // Block Number - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec().into(), - // Total Issuance - hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80").to_vec().into(), - // Execution Phase - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a").to_vec().into(), - // Event Count - 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); - - Ok(batches) - } - } - - impl sp_genesis_builder::GenesisBuilder for Runtime { - fn create_default_config() -> Vec { - create_default_config::() - } - - fn build_config(config: Vec) -> sp_genesis_builder::Result { - build_config::(config) - } - } -} - -cumulus_pallet_parachain_system::register_validate_block! { - Runtime = Runtime, - BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::, -} - -#[cfg(feature = "state-trie-version-1")] -parameter_types! { - // The deposit configuration for the singed migration. Specially if you want to allow any signed account to do the migration (see `SignedFilter`, these deposits should be high) - pub const MigrationSignedDepositPerItem: Balance = CENTS; - pub const MigrationSignedDepositBase: Balance = 2_000 * CENTS; - pub const MigrationMaxKeyLen: u32 = 512; -} - -#[cfg(feature = "state-trie-version-1")] -impl pallet_state_trie_migration::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type SignedDepositPerItem = MigrationSignedDepositPerItem; - type SignedDepositBase = MigrationSignedDepositBase; - // An origin that can control the whole pallet: should be Root, or a part of your council. - type ControlOrigin = frame_system::EnsureSignedBy; - // specific account for the migration, can trigger the signed migrations. - type SignedFilter = frame_system::EnsureSignedBy; - - // Replace this with weight based on your runtime. - type WeightInfo = pallet_state_trie_migration::weights::SubstrateWeight; - - type MaxKeyLen = MigrationMaxKeyLen; -} - -#[cfg(feature = "state-trie-version-1")] -frame_support::ord_parameter_types! { - pub const MigController: AccountId = AccountId::from(hex_literal::hex!("8458ed39dc4b6f6c7255f7bc42be50c2967db126357c999d44e12ca7ac80dc52")); - pub const RootMigController: AccountId = AccountId::from(hex_literal::hex!("8458ed39dc4b6f6c7255f7bc42be50c2967db126357c999d44e12ca7ac80dc52")); -} - -#[cfg(feature = "state-trie-version-1")] -#[test] -fn ensure_key_ss58() { - use frame_support::traits::SortedMembers; - use sp_core::crypto::Ss58Codec; - let acc = - AccountId::from_ss58check("5F4EbSkZz18X36xhbsjvDNs6NuZ82HyYtq5UiJ1h9SBHJXZD").unwrap(); - //panic!("{:x?}", acc); - assert_eq!(acc, MigController::sorted_members()[0]); - let acc = - AccountId::from_ss58check("5F4EbSkZz18X36xhbsjvDNs6NuZ82HyYtq5UiJ1h9SBHJXZD").unwrap(); - assert_eq!(acc, RootMigController::sorted_members()[0]); - //panic!("{:x?}", acc); -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::{CENTS, MILLICENTS}; - use parachains_common::kusama::fee; - use sp_runtime::traits::Zero; - use sp_weights::WeightToFee; - - /// We can fit at least 1000 transfers in a block. - #[test] - fn sane_block_weight() { - use pallet_balances::WeightInfo; - let block = RuntimeBlockWeights::get().max_block; - let base = RuntimeBlockWeights::get().get(DispatchClass::Normal).base_extrinsic; - let transfer = - base + weights::pallet_balances::WeightInfo::::transfer_allow_death(); - - let fit = block.checked_div_per_component(&transfer).unwrap_or_default(); - assert!(fit >= 1000, "{} should be at least 1000", fit); - } - - /// The fee for one transfer is at most 1 CENT. - #[test] - fn sane_transfer_fee() { - use pallet_balances::WeightInfo; - let base = RuntimeBlockWeights::get().get(DispatchClass::Normal).base_extrinsic; - let transfer = - base + weights::pallet_balances::WeightInfo::::transfer_allow_death(); - - let fee: Balance = fee::WeightToFee::weight_to_fee(&transfer); - assert!(fee <= CENTS, "{} MILLICENTS should be at most 1000", fee / MILLICENTS); - } - - /// Weight is being charged for both dimensions. - #[test] - fn weight_charged_for_both_components() { - let fee: Balance = fee::WeightToFee::weight_to_fee(&Weight::from_parts(10_000, 0)); - assert!(!fee.is_zero(), "Charges for ref time"); - - let fee: Balance = fee::WeightToFee::weight_to_fee(&Weight::from_parts(0, 10_000)); - assert_eq!(fee, CENTS, "10kb maps to CENT"); - } - - /// Filling up a block by proof size is at most 30 times more expensive than ref time. - /// - /// This is just a sanity check. - #[test] - fn full_block_fee_ratio() { - let block = RuntimeBlockWeights::get().max_block; - let time_fee: Balance = - fee::WeightToFee::weight_to_fee(&Weight::from_parts(block.ref_time(), 0)); - let proof_fee: Balance = - fee::WeightToFee::weight_to_fee(&Weight::from_parts(0, block.proof_size())); - - let proof_o_time = proof_fee.checked_div(time_fee).unwrap_or_default(); - assert!(proof_o_time <= 30, "{} should be at most 30", proof_o_time); - let time_o_proof = time_fee.checked_div(proof_fee).unwrap_or_default(); - assert!(time_o_proof <= 30, "{} should be at most 30", time_o_proof); - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/block_weights.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/block_weights.rs deleted file mode 100644 index e7fdb2aae2a..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/block_weights.rs +++ /dev/null @@ -1,53 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, Weight}, - }; - - parameter_types! { - /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = - Weight::from_parts(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000), 0); - } - - #[cfg(test)] - mod test_weights { - use frame_support::weights::constants; - - /// Checks that the weight exists and is sane. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - let w = super::constants::BlockExecutionWeight::get(); - - // At least 100 µs. - assert!( - w.ref_time() >= 100u64 * constants::WEIGHT_REF_TIME_PER_MICROS, - "Weight should be at least 100 µs." - ); - // At most 50 ms. - assert!( - w.ref_time() <= 50u64 * constants::WEIGHT_REF_TIME_PER_MILLIS, - "Weight should be at most 50 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/cumulus_pallet_dmp_queue.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/cumulus_pallet_dmp_queue.rs deleted file mode 100644 index cc41dcd6cbb..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/cumulus_pallet_dmp_queue.rs +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (C) 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_dmp_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-10-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=cumulus_pallet_dmp_queue -// --chain=asset-hub-kusama-dev -// --header=./cumulus/file_header.txt -// --output=./cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_dmp_queue`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_dmp_queue::WeightInfo for WeightInfo { - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65696` - // Estimated: `69161` - // Minimum execution time: 124_651_000 picoseconds. - Weight::from_parts(127_857_000, 0) - .saturating_add(Weight::from_parts(0, 69161)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65659` - // Estimated: `69124` - // Minimum execution time: 65_684_000 picoseconds. - Weight::from_parts(68_039_000, 0) - .saturating_add(Weight::from_parts(0, 69124)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_overweight_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65726` - // Estimated: `69191` - // Minimum execution time: 117_657_000 picoseconds. - Weight::from_parts(122_035_000, 0) - .saturating_add(Weight::from_parts(0, 69191)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(6)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - fn on_idle_overweight_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65689` - // Estimated: `69154` - // Minimum execution time: 59_799_000 picoseconds. - Weight::from_parts(61_354_000, 0) - .saturating_add(Weight::from_parts(0, 69154)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/cumulus_pallet_parachain_system.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/cumulus_pallet_parachain_system.rs deleted file mode 100644 index f787aa32701..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/cumulus_pallet_parachain_system.rs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `cumulus_pallet_parachain_system` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `i9`, CPU: `13th Gen Intel(R) Core(TM) i9-13900K` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/polkadot-parachain -// benchmark -// pallet -// --chain -// statemint-dev -// --pallet -// cumulus_pallet_parachain_system -// --extrinsic -// * -// --execution -// wasm -// --wasm-execution -// compiled -// --output -// parachains/runtimes/assets/statemint/src/weights -// --steps -// 50 -// --repeat -// 20 - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::Weight}; -use sp_std::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_parachain_system`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_parachain_system::WeightInfo for WeightInfo { - /// Storage: ParachainSystem LastDmqMqcHead (r:1 w:1) - /// Proof Skipped: ParachainSystem LastDmqMqcHead (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ParachainSystem ReservedDmpWeightOverride (r:1 w:0) - /// Proof Skipped: ParachainSystem ReservedDmpWeightOverride (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: ParachainSystem ProcessedDownwardMessages (r:0 w:1) - /// Proof Skipped: ParachainSystem ProcessedDownwardMessages (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: MessageQueue Pages (r:0 w:16) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - /// The range of component `n` is `[0, 1000]`. - fn enqueue_inbound_downward_messages(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `12` - // Estimated: `8013` - // Minimum execution time: 1_660_000 picoseconds. - Weight::from_parts(1_720_000, 0) - .saturating_add(Weight::from_parts(0, 8013)) - // Standard Error: 28_418 - .saturating_add(Weight::from_parts(24_636_963, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/cumulus_pallet_xcmp_queue.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/cumulus_pallet_xcmp_queue.rs deleted file mode 100644 index e394e8b837a..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/cumulus_pallet_xcmp_queue.rs +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `cumulus_pallet_xcmp_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-09-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `Olivers-MacBook-Pro.local`, CPU: `` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/release/polkadot-parachain -// benchmark -// pallet -// --pallet -// cumulus-pallet-xcmp-queue -// --chain -// asset-hub-kusama-dev -// --output -// cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/cumulus_pallet_xcmp_queue.rs -// --extrinsic -// - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_xcmp_queue`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:1) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_config_with_u32() -> Weight { - // Proof Size summary in bytes: - // Measured: `76` - // Estimated: `1561` - // Minimum execution time: 6_000_000 picoseconds. - Weight::from_parts(6_000_000, 0) - .saturating_add(Weight::from_parts(0, 1561)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:0) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `XcmpQueue::InboundXcmpSuspended` (r:1 w:0) - /// Proof: `XcmpQueue::InboundXcmpSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn enqueue_xcmp_message() -> Weight { - // Proof Size summary in bytes: - // Measured: `118` - // Estimated: `3517` - // Minimum execution time: 15_000_000 picoseconds. - Weight::from_parts(16_000_000, 0) - .saturating_add(Weight::from_parts(0, 3517)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn suspend_channel() -> Weight { - // Proof Size summary in bytes: - // Measured: `76` - // Estimated: `1561` - // Minimum execution time: 3_000_000 picoseconds. - Weight::from_parts(3_000_000, 0) - .saturating_add(Weight::from_parts(0, 1561)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn resume_channel() -> Weight { - // Proof Size summary in bytes: - // Measured: `111` - // Estimated: `1596` - // Minimum execution time: 4_000_000 picoseconds. - Weight::from_parts(5_000_000, 0) - .saturating_add(Weight::from_parts(0, 1596)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn take_first_concatenated_xcm() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 44_000_000 picoseconds. - Weight::from_parts(45_000_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Storage: `XcmpQueue::InboundXcmpMessages` (r:1 w:1) - /// Proof: `XcmpQueue::InboundXcmpMessages` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:0) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::InboundXcmpSuspended` (r:1 w:0) - /// Proof: `XcmpQueue::InboundXcmpSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65747` - // Estimated: `69212` - // Minimum execution time: 62_000_000 picoseconds. - Weight::from_parts(66_000_000, 0) - .saturating_add(Weight::from_parts(0, 69212)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65710` - // Estimated: `69175` - // Minimum execution time: 42_000_000 picoseconds. - Weight::from_parts(43_000_000, 0) - .saturating_add(Weight::from_parts(0, 69175)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/extrinsic_weights.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/extrinsic_weights.rs deleted file mode 100644 index 1a4adb968bb..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/extrinsic_weights.rs +++ /dev/null @@ -1,53 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, Weight}, - }; - - parameter_types! { - /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = - Weight::from_parts(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000), 0); - } - - #[cfg(test)] - mod test_weights { - use frame_support::weights::constants; - - /// Checks that the weight exists and is sane. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - let w = super::constants::ExtrinsicBaseWeight::get(); - - // At least 10 µs. - assert!( - w.ref_time() >= 10u64 * constants::WEIGHT_REF_TIME_PER_MICROS, - "Weight should be at least 10 µs." - ); - // At most 1 ms. - assert!( - w.ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Weight should be at most 1 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/frame_system.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/frame_system.rs deleted file mode 100644 index 6304051e6cb..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/frame_system.rs +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `frame_system` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=frame_system -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `frame_system`. -pub struct WeightInfo(PhantomData); -impl frame_system::WeightInfo for WeightInfo { - /// The range of component `b` is `[0, 3932160]`. - fn remark(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_106_000 picoseconds. - Weight::from_parts(1_884_213, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 0 - .saturating_add(Weight::from_parts(388, 0).saturating_mul(b.into())) - } - /// The range of component `b` is `[0, 3932160]`. - fn remark_with_event(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_528_000 picoseconds. - Weight::from_parts(27_081_927, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 7 - .saturating_add(Weight::from_parts(1_730, 0).saturating_mul(b.into())) - } - /// Storage: `System::Digest` (r:1 w:1) - /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - /// Proof: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - fn set_heap_pages() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `1485` - // Minimum execution time: 3_882_000 picoseconds. - Weight::from_parts(4_149_000, 0) - .saturating_add(Weight::from_parts(0, 1485)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) - /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpgradeRestrictionSignal` (r:1 w:0) - /// Proof: `ParachainSystem::UpgradeRestrictionSignal` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingValidationCode` (r:1 w:1) - /// Proof: `ParachainSystem::PendingValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::NewValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::NewValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::DidSetValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::DidSetValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_code() -> Weight { - // Proof Size summary in bytes: - // Measured: `119` - // Estimated: `1604` - // Minimum execution time: 103_389_161_000 picoseconds. - Weight::from_parts(106_870_091_000, 0) - .saturating_add(Weight::from_parts(0, 1604)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn set_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_236_000 picoseconds. - Weight::from_parts(2_302_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 2_045 - .saturating_add(Weight::from_parts(763_456, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn kill_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_175_000 picoseconds. - Weight::from_parts(2_238_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 1_040 - .saturating_add(Weight::from_parts(571_397, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `p` is `[0, 1000]`. - fn kill_prefix(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `84 + p * (69 ±0)` - // Estimated: `80 + p * (70 ±0)` - // Minimum execution time: 3_843_000 picoseconds. - Weight::from_parts(3_947_000, 0) - .saturating_add(Weight::from_parts(0, 80)) - // Standard Error: 2_188 - .saturating_add(Weight::from_parts(1_212_360, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) - .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/mod.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/mod.rs deleted file mode 100644 index f04081a84fb..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/mod.rs +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod block_weights; -pub mod cumulus_pallet_dmp_queue; -pub mod cumulus_pallet_parachain_system; -pub mod cumulus_pallet_xcmp_queue; -pub mod extrinsic_weights; -pub mod frame_system; -pub mod pallet_asset_conversion; -pub mod pallet_assets_foreign; -pub mod pallet_assets_local; -pub mod pallet_assets_pool; -pub mod pallet_balances; -pub mod pallet_collator_selection; -pub mod pallet_message_queue; -pub mod pallet_multisig; -pub mod pallet_nft_fractionalization; -pub mod pallet_nfts; -pub mod pallet_proxy; -pub mod pallet_session; -pub mod pallet_timestamp; -pub mod pallet_uniques; -pub mod pallet_utility; -pub mod pallet_xcm; -pub mod paritydb_weights; -pub mod rocksdb_weights; -pub mod xcm; - -pub use block_weights::constants::BlockExecutionWeight; -pub use extrinsic_weights::constants::ExtrinsicBaseWeight; -pub use paritydb_weights::constants::ParityDbWeight; -pub use rocksdb_weights::constants::RocksDbWeight; diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_asset_conversion.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_asset_conversion.rs deleted file mode 100644 index 3fcf2f8f4ec..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_asset_conversion.rs +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_asset_conversion` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-26, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/cumulus/.git/.artifacts/bench.json -// --pallet=pallet_asset_conversion -// --chain=asset-hub-kusama-dev -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_asset_conversion`. -pub struct WeightInfo(PhantomData); -impl pallet_asset_conversion::WeightInfo for WeightInfo { - /// Storage: `AssetConversion::Pools` (r:1 w:1) - /// Proof: `AssetConversion::Pools` (`max_values`: None, `max_size`: Some(1224), added: 3699, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0x76a2c49709deec21d9c05f96c1f47351` (r:1 w:0) - /// Proof: UNKNOWN KEY `0x76a2c49709deec21d9c05f96c1f47351` (r:1 w:0) - /// Storage: `System::Account` (r:2 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `AssetConversion::NextPoolAssetId` (r:1 w:1) - /// Proof: `AssetConversion::NextPoolAssetId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Account` (r:1 w:1) - /// Proof: `PoolAssets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn create_pool() -> Weight { - // Proof Size summary in bytes: - // Measured: `480` - // Estimated: `6196` - // Minimum execution time: 88_484_000 picoseconds. - Weight::from_parts(92_964_000, 0) - .saturating_add(Weight::from_parts(0, 6196)) - .saturating_add(T::DbWeight::get().reads(9)) - .saturating_add(T::DbWeight::get().writes(7)) - } - /// Storage: `AssetConversion::Pools` (r:1 w:0) - /// Proof: `AssetConversion::Pools` (`max_values`: None, `max_size`: Some(1224), added: 3699, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Account` (r:2 w:2) - /// Proof: `PoolAssets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn add_liquidity() -> Weight { - // Proof Size summary in bytes: - // Measured: `1117` - // Estimated: `7404` - // Minimum execution time: 153_015_000 picoseconds. - Weight::from_parts(157_018_000, 0) - .saturating_add(Weight::from_parts(0, 7404)) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(7)) - } - /// Storage: `AssetConversion::Pools` (r:1 w:0) - /// Proof: `AssetConversion::Pools` (`max_values`: None, `max_size`: Some(1224), added: 3699, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0x2433d831722b1f4aeb1666953f1c0e77` (r:1 w:0) - /// Proof: UNKNOWN KEY `0x2433d831722b1f4aeb1666953f1c0e77` (r:1 w:0) - /// Storage: `PoolAssets::Account` (r:1 w:1) - /// Proof: `PoolAssets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn remove_liquidity() -> Weight { - // Proof Size summary in bytes: - // Measured: `1106` - // Estimated: `7404` - // Minimum execution time: 141_726_000 picoseconds. - Weight::from_parts(147_865_000, 0) - .saturating_add(Weight::from_parts(0, 7404)) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(6)) - } - /// Storage: `ForeignAssets::Asset` (r:2 w:2) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:4 w:4) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn swap_exact_tokens_for_tokens() -> Weight { - // Proof Size summary in bytes: - // Measured: `1148` - // Estimated: `13818` - // Minimum execution time: 168_619_000 picoseconds. - Weight::from_parts(174_283_000, 0) - .saturating_add(Weight::from_parts(0, 13818)) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(8)) - } - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:2 w:2) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:4 w:4) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - fn swap_tokens_for_exact_tokens() -> Weight { - // Proof Size summary in bytes: - // Measured: `1148` - // Estimated: `13818` - // Minimum execution time: 171_565_000 picoseconds. - Weight::from_parts(173_702_000, 0) - .saturating_add(Weight::from_parts(0, 13818)) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(8)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_assets_foreign.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_assets_foreign.rs deleted file mode 100644 index c2688d97905..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_assets_foreign.rs +++ /dev/null @@ -1,533 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_assets` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-06-20, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --execution=wasm -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/cumulus/.git/.artifacts/bench.json -// --pallet=pallet_assets -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_assets`. -pub struct WeightInfo(PhantomData); -impl pallet_assets::WeightInfo for WeightInfo { - /// Storage: `ParachainInfo::ParachainId` (r:1 w:0) - /// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn create() -> Weight { - // Proof Size summary in bytes: - // Measured: `107` - // Estimated: `4273` - // Minimum execution time: 30_485_000 picoseconds. - Weight::from_parts(31_007_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn force_create() -> Weight { - // Proof Size summary in bytes: - // Measured: `4` - // Estimated: `4273` - // Minimum execution time: 12_991_000 picoseconds. - Weight::from_parts(13_304_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn start_destroy() -> Weight { - // Proof Size summary in bytes: - // Measured: `276` - // Estimated: `4273` - // Minimum execution time: 15_689_000 picoseconds. - Weight::from_parts(16_063_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: ForeignAssets Asset (r:1 w:1) - /// Proof: ForeignAssets Asset (max_values: None, max_size: Some(808), added: 3283, mode: MaxEncodedLen) - /// Storage: ForeignAssets Account (r:1001 w:1000) - /// Proof: ForeignAssets Account (max_values: None, max_size: Some(732), added: 3207, mode: MaxEncodedLen) - /// Storage: System Account (r:1000 w:1000) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - /// The range of component `c` is `[0, 1000]`. - /// The range of component `c` is `[0, 1000]`. - fn destroy_accounts(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + c * (208 ±0)` - // Estimated: `4273 + c * (3207 ±0)` - // Minimum execution time: 18_533_000 picoseconds. - Weight::from_parts(18_791_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - // Standard Error: 5_059 - .saturating_add(Weight::from_parts(12_049_659, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(c.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(c.into()))) - .saturating_add(Weight::from_parts(0, 3207).saturating_mul(c.into())) - } - /// Storage: ForeignAssets Asset (r:1 w:1) - /// Proof: ForeignAssets Asset (max_values: None, max_size: Some(808), added: 3283, mode: MaxEncodedLen) - /// Storage: ForeignAssets Approvals (r:1001 w:1000) - /// Proof: ForeignAssets Approvals (max_values: None, max_size: Some(746), added: 3221, mode: MaxEncodedLen) - /// The range of component `a` is `[0, 1000]`. - /// The range of component `a` is `[0, 1000]`. - fn destroy_approvals(a: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `413 + a * (86 ±0)` - // Estimated: `4273 + a * (3221 ±0)` - // Minimum execution time: 20_028_000 picoseconds. - Weight::from_parts(20_148_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - // Standard Error: 3_401 - .saturating_add(Weight::from_parts(13_897_319, 0).saturating_mul(a.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) - .saturating_add(Weight::from_parts(0, 3221).saturating_mul(a.into())) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:0) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(738), added: 3213, mode: `MaxEncodedLen`) - fn finish_destroy() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `4273` - // Minimum execution time: 15_949_000 picoseconds. - Weight::from_parts(16_241_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - fn mint() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `4273` - // Minimum execution time: 27_156_000 picoseconds. - Weight::from_parts(28_182_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - fn burn() -> Weight { - // Proof Size summary in bytes: - // Measured: `350` - // Estimated: `4273` - // Minimum execution time: 33_503_000 picoseconds. - Weight::from_parts(33_860_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `350` - // Estimated: `7404` - // Minimum execution time: 45_065_000 picoseconds. - Weight::from_parts(45_856_000, 0) - .saturating_add(Weight::from_parts(0, 7404)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_keep_alive() -> Weight { - // Proof Size summary in bytes: - // Measured: `350` - // Estimated: `7404` - // Minimum execution time: 39_913_000 picoseconds. - Weight::from_parts(40_791_000, 0) - .saturating_add(Weight::from_parts(0, 7404)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `350` - // Estimated: `7404` - // Minimum execution time: 45_337_000 picoseconds. - Weight::from_parts(45_980_000, 0) - .saturating_add(Weight::from_parts(0, 7404)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - fn freeze() -> Weight { - // Proof Size summary in bytes: - // Measured: `350` - // Estimated: `4273` - // Minimum execution time: 19_012_000 picoseconds. - Weight::from_parts(19_326_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - fn thaw() -> Weight { - // Proof Size summary in bytes: - // Measured: `350` - // Estimated: `4273` - // Minimum execution time: 18_656_000 picoseconds. - Weight::from_parts(19_205_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn freeze_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `276` - // Estimated: `4273` - // Minimum execution time: 15_440_000 picoseconds. - Weight::from_parts(15_825_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn thaw_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `276` - // Estimated: `4273` - // Minimum execution time: 15_465_000 picoseconds. - Weight::from_parts(15_769_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:0) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(738), added: 3213, mode: `MaxEncodedLen`) - fn transfer_ownership() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `4273` - // Minimum execution time: 16_579_000 picoseconds. - Weight::from_parts(16_931_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn set_team() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `4273` - // Minimum execution time: 15_138_000 picoseconds. - Weight::from_parts(15_435_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: ForeignAssets Asset (r:1 w:0) - /// Proof: ForeignAssets Asset (max_values: None, max_size: Some(808), added: 3283, mode: MaxEncodedLen) - /// Storage: ForeignAssets Metadata (r:1 w:1) - /// Proof: ForeignAssets Metadata (max_values: None, max_size: Some(738), added: 3213, mode: MaxEncodedLen) - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - fn set_metadata(_n: u32, _s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `4273` - // Minimum execution time: 29_846_000 picoseconds. - Weight::from_parts(31_607_649, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:1) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(738), added: 3213, mode: `MaxEncodedLen`) - fn clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `406` - // Estimated: `4273` - // Minimum execution time: 30_582_000 picoseconds. - Weight::from_parts(31_008_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: ForeignAssets Asset (r:1 w:0) - /// Proof: ForeignAssets Asset (max_values: None, max_size: Some(808), added: 3283, mode: MaxEncodedLen) - /// Storage: ForeignAssets Metadata (r:1 w:1) - /// Proof: ForeignAssets Metadata (max_values: None, max_size: Some(738), added: 3213, mode: MaxEncodedLen) - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - /// 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 { - // Proof Size summary in bytes: - // Measured: `81` - // Estimated: `4273` - // Minimum execution time: 14_186_000 picoseconds. - Weight::from_parts(14_717_332, 0) - .saturating_add(Weight::from_parts(0, 4273)) - // Standard Error: 517 - .saturating_add(Weight::from_parts(2_595, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:1) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(738), added: 3213, mode: `MaxEncodedLen`) - fn force_clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `406` - // Estimated: `4273` - // Minimum execution time: 29_499_000 picoseconds. - Weight::from_parts(29_918_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn force_asset_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `4273` - // Minimum execution time: 13_815_000 picoseconds. - Weight::from_parts(14_138_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1 w:1) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(746), added: 3221, mode: `MaxEncodedLen`) - fn approve_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `276` - // Estimated: `4273` - // Minimum execution time: 33_029_000 picoseconds. - Weight::from_parts(33_524_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1 w:1) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(746), added: 3221, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_approved() -> Weight { - // Proof Size summary in bytes: - // Measured: `520` - // Estimated: `7404` - // Minimum execution time: 63_205_000 picoseconds. - Weight::from_parts(64_078_000, 0) - .saturating_add(Weight::from_parts(0, 7404)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1 w:1) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(746), added: 3221, mode: `MaxEncodedLen`) - fn cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `446` - // Estimated: `4273` - // Minimum execution time: 34_948_000 picoseconds. - Weight::from_parts(35_484_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1 w:1) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(746), added: 3221, mode: `MaxEncodedLen`) - fn force_cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `446` - // Estimated: `4273` - // Minimum execution time: 35_722_000 picoseconds. - Weight::from_parts(36_266_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn set_min_balance() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `4273` - // Minimum execution time: 15_855_000 picoseconds. - Weight::from_parts(16_182_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn touch() -> Weight { - // Proof Size summary in bytes: - // Measured: `345` - // Estimated: `4273` - // Minimum execution time: 34_984_000 picoseconds. - Weight::from_parts(35_512_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn touch_other() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `4273` - // Minimum execution time: 33_041_000 picoseconds. - Weight::from_parts(34_124_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn refund() -> Weight { - // Proof Size summary in bytes: - // Measured: `471` - // Estimated: `4273` - // Minimum execution time: 31_728_000 picoseconds. - Weight::from_parts(32_012_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn refund_other() -> Weight { - // Proof Size summary in bytes: - // Measured: `401` - // Estimated: `4273` - // Minimum execution time: 29_432_000 picoseconds. - Weight::from_parts(29_968_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - fn block() -> Weight { - // Proof Size summary in bytes: - // Measured: `350` - // Estimated: `4273` - // Minimum execution time: 18_827_000 picoseconds. - Weight::from_parts(19_172_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_assets_local.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_assets_local.rs deleted file mode 100644 index 957e33fcd9e..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_assets_local.rs +++ /dev/null @@ -1,530 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_assets` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_assets -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_assets`. -pub struct WeightInfo(PhantomData); -impl pallet_assets::WeightInfo for WeightInfo { - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn create() -> Weight { - // Proof Size summary in bytes: - // Measured: `109` - // Estimated: `3675` - // Minimum execution time: 26_510_000 picoseconds. - Weight::from_parts(27_332_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn force_create() -> Weight { - // Proof Size summary in bytes: - // Measured: `6` - // Estimated: `3675` - // Minimum execution time: 10_899_000 picoseconds. - Weight::from_parts(11_395_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn start_destroy() -> Weight { - // Proof Size summary in bytes: - // Measured: `277` - // Estimated: `3675` - // Minimum execution time: 13_593_000 picoseconds. - Weight::from_parts(14_108_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:1001 w:1000) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1000 w:1000) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `c` is `[0, 1000]`. - /// The range of component `c` is `[0, 1000]`. - fn destroy_accounts(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + c * (208 ±0)` - // Estimated: `3675 + c * (2609 ±0)` - // Minimum execution time: 16_216_000 picoseconds. - Weight::from_parts(16_636_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - // Standard Error: 9_346 - .saturating_add(Weight::from_parts(15_306_152, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(c.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(c.into()))) - .saturating_add(Weight::from_parts(0, 2609).saturating_mul(c.into())) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Approvals` (r:1001 w:1000) - /// Proof: `Assets::Approvals` (`max_values`: None, `max_size`: Some(148), added: 2623, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 1000]`. - /// The range of component `a` is `[0, 1000]`. - fn destroy_approvals(a: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `414 + a * (86 ±0)` - // Estimated: `3675 + a * (2623 ±0)` - // Minimum execution time: 16_745_000 picoseconds. - Weight::from_parts(17_247_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(Weight::from_parts(15_634_963, 0).saturating_mul(a.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(Weight::from_parts(0, 2623).saturating_mul(a.into())) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Metadata` (r:1 w:0) - /// Proof: `Assets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - fn finish_destroy() -> Weight { - // Proof Size summary in bytes: - // Measured: `243` - // Estimated: `3675` - // Minimum execution time: 13_650_000 picoseconds. - Weight::from_parts(14_721_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn mint() -> Weight { - // Proof Size summary in bytes: - // Measured: `243` - // Estimated: `3675` - // Minimum execution time: 24_121_000 picoseconds. - Weight::from_parts(25_023_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn burn() -> Weight { - // Proof Size summary in bytes: - // Measured: `351` - // Estimated: `3675` - // Minimum execution time: 31_414_000 picoseconds. - Weight::from_parts(32_235_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:2 w:2) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `351` - // Estimated: `6208` - // Minimum execution time: 43_114_000 picoseconds. - Weight::from_parts(44_106_000, 0) - .saturating_add(Weight::from_parts(0, 6208)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:2 w:2) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_keep_alive() -> Weight { - // Proof Size summary in bytes: - // Measured: `351` - // Estimated: `6208` - // Minimum execution time: 37_954_000 picoseconds. - Weight::from_parts(38_772_000, 0) - .saturating_add(Weight::from_parts(0, 6208)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:2 w:2) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `351` - // Estimated: `6208` - // Minimum execution time: 43_051_000 picoseconds. - Weight::from_parts(44_003_000, 0) - .saturating_add(Weight::from_parts(0, 6208)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Assets::Asset` (r:1 w:0) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn freeze() -> Weight { - // Proof Size summary in bytes: - // Measured: `351` - // Estimated: `3675` - // Minimum execution time: 17_048_000 picoseconds. - Weight::from_parts(17_614_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:0) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn thaw() -> Weight { - // Proof Size summary in bytes: - // Measured: `351` - // Estimated: `3675` - // Minimum execution time: 16_705_000 picoseconds. - Weight::from_parts(17_581_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn freeze_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `277` - // Estimated: `3675` - // Minimum execution time: 13_284_000 picoseconds. - Weight::from_parts(13_735_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn thaw_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `277` - // Estimated: `3675` - // Minimum execution time: 13_030_000 picoseconds. - Weight::from_parts(13_417_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Metadata` (r:1 w:0) - /// Proof: `Assets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - fn transfer_ownership() -> Weight { - // Proof Size summary in bytes: - // Measured: `243` - // Estimated: `3675` - // Minimum execution time: 14_174_000 picoseconds. - Weight::from_parts(14_660_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn set_team() -> Weight { - // Proof Size summary in bytes: - // Measured: `243` - // Estimated: `3675` - // Minimum execution time: 12_737_000 picoseconds. - Weight::from_parts(13_172_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:0) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Metadata` (r:1 w:1) - /// Proof: `Assets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - fn set_metadata(n: u32, s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `243` - // Estimated: `3675` - // Minimum execution time: 27_707_000 picoseconds. - Weight::from_parts(29_036_880, 0) - .saturating_add(Weight::from_parts(0, 3675)) - // Standard Error: 688 - .saturating_add(Weight::from_parts(2_426, 0).saturating_mul(n.into())) - // Standard Error: 688 - .saturating_add(Weight::from_parts(776, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:0) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Metadata` (r:1 w:1) - /// Proof: `Assets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - fn clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `407` - // Estimated: `3675` - // Minimum execution time: 28_514_000 picoseconds. - Weight::from_parts(29_216_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:0) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Metadata` (r:1 w:1) - /// Proof: `Assets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - /// 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 { - // Proof Size summary in bytes: - // Measured: `82` - // Estimated: `3675` - // Minimum execution time: 12_452_000 picoseconds. - Weight::from_parts(13_095_356, 0) - .saturating_add(Weight::from_parts(0, 3675)) - // Standard Error: 275 - .saturating_add(Weight::from_parts(826, 0).saturating_mul(n.into())) - // Standard Error: 275 - .saturating_add(Weight::from_parts(808, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:0) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Metadata` (r:1 w:1) - /// Proof: `Assets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - fn force_clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `407` - // Estimated: `3675` - // Minimum execution time: 28_181_000 picoseconds. - Weight::from_parts(29_050_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn force_asset_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `243` - // Estimated: `3675` - // Minimum execution time: 12_253_000 picoseconds. - Weight::from_parts(12_545_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Approvals` (r:1 w:1) - /// Proof: `Assets::Approvals` (`max_values`: None, `max_size`: Some(148), added: 2623, mode: `MaxEncodedLen`) - fn approve_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `277` - // Estimated: `3675` - // Minimum execution time: 31_084_000 picoseconds. - Weight::from_parts(32_052_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Approvals` (r:1 w:1) - /// Proof: `Assets::Approvals` (`max_values`: None, `max_size`: Some(148), added: 2623, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:2 w:2) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_approved() -> Weight { - // Proof Size summary in bytes: - // Measured: `521` - // Estimated: `6208` - // Minimum execution time: 61_756_000 picoseconds. - Weight::from_parts(62_740_000, 0) - .saturating_add(Weight::from_parts(0, 6208)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Approvals` (r:1 w:1) - /// Proof: `Assets::Approvals` (`max_values`: None, `max_size`: Some(148), added: 2623, mode: `MaxEncodedLen`) - fn cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `447` - // Estimated: `3675` - // Minimum execution time: 33_370_000 picoseconds. - Weight::from_parts(34_127_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Approvals` (r:1 w:1) - /// Proof: `Assets::Approvals` (`max_values`: None, `max_size`: Some(148), added: 2623, mode: `MaxEncodedLen`) - fn force_cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `447` - // Estimated: `3675` - // Minimum execution time: 33_753_000 picoseconds. - Weight::from_parts(34_613_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn set_min_balance() -> Weight { - // Proof Size summary in bytes: - // Measured: `243` - // Estimated: `3675` - // Minimum execution time: 13_508_000 picoseconds. - Weight::from_parts(13_997_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn touch() -> Weight { - // Proof Size summary in bytes: - // Measured: `346` - // Estimated: `3675` - // Minimum execution time: 32_578_000 picoseconds. - Weight::from_parts(33_675_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn touch_other() -> Weight { - // Proof Size summary in bytes: - // Measured: `243` - // Estimated: `3675` - // Minimum execution time: 30_768_000 picoseconds. - Weight::from_parts(31_710_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn refund() -> Weight { - // Proof Size summary in bytes: - // Measured: `472` - // Estimated: `3675` - // Minimum execution time: 30_028_000 picoseconds. - Weight::from_parts(30_793_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn refund_other() -> Weight { - // Proof Size summary in bytes: - // Measured: `402` - // Estimated: `3675` - // Minimum execution time: 28_354_000 picoseconds. - Weight::from_parts(29_097_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Assets::Asset` (r:1 w:0) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn block() -> Weight { - // Proof Size summary in bytes: - // Measured: `351` - // Estimated: `3675` - // Minimum execution time: 16_607_000 picoseconds. - Weight::from_parts(17_433_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_assets_pool.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_assets_pool.rs deleted file mode 100644 index e0b4ff36552..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_assets_pool.rs +++ /dev/null @@ -1,530 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_assets` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/cumulus/.git/.artifacts/bench.json -// --pallet=pallet_assets -// --chain=asset-hub-kusama-dev -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_assets`. -pub struct WeightInfo(PhantomData); -impl pallet_assets::WeightInfo for WeightInfo { - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn create() -> Weight { - // Proof Size summary in bytes: - // Measured: `42` - // Estimated: `3675` - // Minimum execution time: 11_591_000 picoseconds. - Weight::from_parts(11_901_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn force_create() -> Weight { - // Proof Size summary in bytes: - // Measured: `42` - // Estimated: `3675` - // Minimum execution time: 11_184_000 picoseconds. - Weight::from_parts(11_640_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn start_destroy() -> Weight { - // Proof Size summary in bytes: - // Measured: `314` - // Estimated: `3675` - // Minimum execution time: 13_809_000 picoseconds. - Weight::from_parts(14_226_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Account` (r:1001 w:1000) - /// Proof: `PoolAssets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1000 w:1000) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `c` is `[0, 1000]`. - /// The range of component `c` is `[0, 1000]`. - /// The range of component `c` is `[0, 1000]`. - fn destroy_accounts(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + c * (208 ±0)` - // Estimated: `3675 + c * (2609 ±0)` - // Minimum execution time: 16_439_000 picoseconds. - Weight::from_parts(16_743_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - // Standard Error: 4_792 - .saturating_add(Weight::from_parts(14_463_991, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(c.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(c.into()))) - .saturating_add(Weight::from_parts(0, 2609).saturating_mul(c.into())) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Approvals` (r:1001 w:1000) - /// Proof: `PoolAssets::Approvals` (`max_values`: None, `max_size`: Some(148), added: 2623, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 1000]`. - /// The range of component `a` is `[0, 1000]`. - /// The range of component `a` is `[0, 1000]`. - fn destroy_approvals(a: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `451 + a * (86 ±0)` - // Estimated: `3675 + a * (2623 ±0)` - // Minimum execution time: 17_218_000 picoseconds. - Weight::from_parts(17_585_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - // Standard Error: 2_056 - .saturating_add(Weight::from_parts(5_323_866, 0).saturating_mul(a.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) - .saturating_add(Weight::from_parts(0, 2623).saturating_mul(a.into())) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Metadata` (r:1 w:0) - /// Proof: `PoolAssets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - fn finish_destroy() -> Weight { - // Proof Size summary in bytes: - // Measured: `280` - // Estimated: `3675` - // Minimum execution time: 13_848_000 picoseconds. - Weight::from_parts(14_325_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Account` (r:1 w:1) - /// Proof: `PoolAssets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn mint() -> Weight { - // Proof Size summary in bytes: - // Measured: `280` - // Estimated: `3675` - // Minimum execution time: 24_904_000 picoseconds. - Weight::from_parts(25_607_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Account` (r:1 w:1) - /// Proof: `PoolAssets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn burn() -> Weight { - // Proof Size summary in bytes: - // Measured: `388` - // Estimated: `3675` - // Minimum execution time: 31_477_000 picoseconds. - Weight::from_parts(32_338_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Account` (r:2 w:2) - /// Proof: `PoolAssets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `388` - // Estimated: `6208` - // Minimum execution time: 42_994_000 picoseconds. - Weight::from_parts(44_041_000, 0) - .saturating_add(Weight::from_parts(0, 6208)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Account` (r:2 w:2) - /// Proof: `PoolAssets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_keep_alive() -> Weight { - // Proof Size summary in bytes: - // Measured: `388` - // Estimated: `6208` - // Minimum execution time: 37_551_000 picoseconds. - Weight::from_parts(38_648_000, 0) - .saturating_add(Weight::from_parts(0, 6208)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Account` (r:2 w:2) - /// Proof: `PoolAssets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `388` - // Estimated: `6208` - // Minimum execution time: 42_829_000 picoseconds. - Weight::from_parts(44_029_000, 0) - .saturating_add(Weight::from_parts(0, 6208)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:0) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Account` (r:1 w:1) - /// Proof: `PoolAssets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn freeze() -> Weight { - // Proof Size summary in bytes: - // Measured: `388` - // Estimated: `3675` - // Minimum execution time: 17_304_000 picoseconds. - Weight::from_parts(17_782_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:0) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Account` (r:1 w:1) - /// Proof: `PoolAssets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn thaw() -> Weight { - // Proof Size summary in bytes: - // Measured: `388` - // Estimated: `3675` - // Minimum execution time: 17_040_000 picoseconds. - Weight::from_parts(17_698_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn freeze_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `314` - // Estimated: `3675` - // Minimum execution time: 13_238_000 picoseconds. - Weight::from_parts(13_810_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn thaw_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `314` - // Estimated: `3675` - // Minimum execution time: 13_034_000 picoseconds. - Weight::from_parts(13_603_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Metadata` (r:1 w:0) - /// Proof: `PoolAssets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - fn transfer_ownership() -> Weight { - // Proof Size summary in bytes: - // Measured: `280` - // Estimated: `3675` - // Minimum execution time: 14_357_000 picoseconds. - Weight::from_parts(14_774_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn set_team() -> Weight { - // Proof Size summary in bytes: - // Measured: `280` - // Estimated: `3675` - // Minimum execution time: 13_040_000 picoseconds. - Weight::from_parts(13_616_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:0) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Metadata` (r:1 w:1) - /// Proof: `PoolAssets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - fn set_metadata(n: u32, s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `280` - // Estimated: `3675` - // Minimum execution time: 15_274_000 picoseconds. - Weight::from_parts(16_096_881, 0) - .saturating_add(Weight::from_parts(0, 3675)) - // Standard Error: 239 - .saturating_add(Weight::from_parts(1_631, 0).saturating_mul(n.into())) - // Standard Error: 239 - .saturating_add(Weight::from_parts(2_334, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:0) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Metadata` (r:1 w:1) - /// Proof: `PoolAssets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - fn clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `444` - // Estimated: `3675` - // Minimum execution time: 15_900_000 picoseconds. - Weight::from_parts(16_526_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:0) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Metadata` (r:1 w:1) - /// Proof: `PoolAssets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - /// 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 { - // Proof Size summary in bytes: - // Measured: `119` - // Estimated: `3675` - // Minimum execution time: 13_391_000 picoseconds. - Weight::from_parts(14_047_176, 0) - .saturating_add(Weight::from_parts(0, 3675)) - // Standard Error: 172 - .saturating_add(Weight::from_parts(2_617, 0).saturating_mul(n.into())) - // Standard Error: 172 - .saturating_add(Weight::from_parts(2_081, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:0) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Metadata` (r:1 w:1) - /// Proof: `PoolAssets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - fn force_clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `444` - // Estimated: `3675` - // Minimum execution time: 15_794_000 picoseconds. - Weight::from_parts(16_279_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn force_asset_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `280` - // Estimated: `3675` - // Minimum execution time: 12_538_000 picoseconds. - Weight::from_parts(13_080_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Approvals` (r:1 w:1) - /// Proof: `PoolAssets::Approvals` (`max_values`: None, `max_size`: Some(148), added: 2623, mode: `MaxEncodedLen`) - fn approve_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `314` - // Estimated: `3675` - // Minimum execution time: 18_991_000 picoseconds. - Weight::from_parts(19_812_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Approvals` (r:1 w:1) - /// Proof: `PoolAssets::Approvals` (`max_values`: None, `max_size`: Some(148), added: 2623, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Account` (r:2 w:2) - /// Proof: `PoolAssets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_approved() -> Weight { - // Proof Size summary in bytes: - // Measured: `558` - // Estimated: `6208` - // Minimum execution time: 50_336_000 picoseconds. - Weight::from_parts(51_441_000, 0) - .saturating_add(Weight::from_parts(0, 6208)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Approvals` (r:1 w:1) - /// Proof: `PoolAssets::Approvals` (`max_values`: None, `max_size`: Some(148), added: 2623, mode: `MaxEncodedLen`) - fn cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `484` - // Estimated: `3675` - // Minimum execution time: 21_195_000 picoseconds. - Weight::from_parts(21_946_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Approvals` (r:1 w:1) - /// Proof: `PoolAssets::Approvals` (`max_values`: None, `max_size`: Some(148), added: 2623, mode: `MaxEncodedLen`) - fn force_cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `484` - // Estimated: `3675` - // Minimum execution time: 21_568_000 picoseconds. - Weight::from_parts(22_366_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn set_min_balance() -> Weight { - // Proof Size summary in bytes: - // Measured: `280` - // Estimated: `3675` - // Minimum execution time: 13_690_000 picoseconds. - Weight::from_parts(14_086_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PoolAssets::Account` (r:1 w:1) - /// Proof: `PoolAssets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn touch() -> Weight { - // Proof Size summary in bytes: - // Measured: `280` - // Estimated: `3675` - // Minimum execution time: 18_240_000 picoseconds. - Weight::from_parts(19_000_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PoolAssets::Account` (r:1 w:1) - /// Proof: `PoolAssets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn touch_other() -> Weight { - // Proof Size summary in bytes: - // Measured: `280` - // Estimated: `3675` - // Minimum execution time: 18_469_000 picoseconds. - Weight::from_parts(19_040_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PoolAssets::Account` (r:1 w:1) - /// Proof: `PoolAssets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn refund() -> Weight { - // Proof Size summary in bytes: - // Measured: `406` - // Estimated: `3675` - // Minimum execution time: 14_633_000 picoseconds. - Weight::from_parts(15_296_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PoolAssets::Account` (r:1 w:1) - /// Proof: `PoolAssets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Asset` (r:1 w:1) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn refund_other() -> Weight { - // Proof Size summary in bytes: - // Measured: `439` - // Estimated: `3675` - // Minimum execution time: 14_751_000 picoseconds. - Weight::from_parts(15_312_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PoolAssets::Asset` (r:1 w:0) - /// Proof: `PoolAssets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `PoolAssets::Account` (r:1 w:1) - /// Proof: `PoolAssets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn block() -> Weight { - // Proof Size summary in bytes: - // Measured: `388` - // Estimated: `3675` - // Minimum execution time: 16_930_000 picoseconds. - Weight::from_parts(17_653_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_balances.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_balances.rs deleted file mode 100644 index 79c88f30580..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_balances.rs +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_balances` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_balances -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_balances`. -pub struct WeightInfo(PhantomData); -impl pallet_balances::WeightInfo for WeightInfo { - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_allow_death() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 55_040_000 picoseconds. - Weight::from_parts(56_106_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_keep_alive() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 41_342_000 picoseconds. - Weight::from_parts(41_890_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_set_balance_creating() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `3593` - // Minimum execution time: 14_723_000 picoseconds. - Weight::from_parts(15_182_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_set_balance_killing() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `3593` - // Minimum execution time: 22_073_000 picoseconds. - Weight::from_parts(22_638_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `6196` - // Minimum execution time: 57_265_000 picoseconds. - Weight::from_parts(58_222_000, 0) - .saturating_add(Weight::from_parts(0, 6196)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_all() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 51_485_000 picoseconds. - Weight::from_parts(52_003_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_unreserve() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `3593` - // Minimum execution time: 17_460_000 picoseconds. - Weight::from_parts(17_849_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:999 w:999) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `u` is `[1, 1000]`. - fn upgrade_accounts(u: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + u * (136 ±0)` - // Estimated: `990 + u * (2603 ±0)` - // Minimum execution time: 17_259_000 picoseconds. - Weight::from_parts(17_478_000, 0) - .saturating_add(Weight::from_parts(0, 990)) - // Standard Error: 16_756 - .saturating_add(Weight::from_parts(15_291_954, 0).saturating_mul(u.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(u.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(u.into()))) - .saturating_add(Weight::from_parts(0, 2603).saturating_mul(u.into())) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_collator_selection.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_collator_selection.rs deleted file mode 100644 index c686bd6134a..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_collator_selection.rs +++ /dev/null @@ -1,248 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_collator_selection` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_collator_selection -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_collator_selection`. -pub struct WeightInfo(PhantomData); -impl pallet_collator_selection::WeightInfo for WeightInfo { - /// Storage: `Session::NextKeys` (r:20 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `CollatorSelection::Invulnerables` (r:0 w:1) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 20]`. - fn set_invulnerables(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `163 + b * (79 ±0)` - // Estimated: `1154 + b * (2555 ±0)` - // Minimum execution time: 15_408_000 picoseconds. - Weight::from_parts(13_068_592, 0) - .saturating_add(Weight::from_parts(0, 1154)) - // Standard Error: 7_395 - .saturating_add(Weight::from_parts(3_219_916, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(Weight::from_parts(0, 2555).saturating_mul(b.into())) - } - /// Storage: `Session::NextKeys` (r:1 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:1) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Candidates` (r:1 w:1) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 19]`. - /// The range of component `c` is `[1, 99]`. - fn add_invulnerable(b: u32, c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `756 + b * (32 ±0) + c * (53 ±0)` - // Estimated: `6287 + b * (37 ±0) + c * (53 ±0)` - // Minimum execution time: 49_692_000 picoseconds. - Weight::from_parts(51_768_986, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 18_404 - .saturating_add(Weight::from_parts(55_676, 0).saturating_mul(b.into())) - // Standard Error: 3_488 - .saturating_add(Weight::from_parts(184_343, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - .saturating_add(Weight::from_parts(0, 37).saturating_mul(b.into())) - .saturating_add(Weight::from_parts(0, 53).saturating_mul(c.into())) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:0) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:1) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// The range of component `b` is `[5, 20]`. - fn remove_invulnerable(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `119 + b * (32 ±0)` - // Estimated: `6287` - // Minimum execution time: 16_486_000 picoseconds. - Weight::from_parts(16_646_017, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 3_230 - .saturating_add(Weight::from_parts(148_941, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `CollatorSelection::DesiredCandidates` (r:0 w:1) - /// Proof: `CollatorSelection::DesiredCandidates` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - fn set_desired_candidates() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_806_000 picoseconds. - Weight::from_parts(8_002_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `CollatorSelection::CandidacyBond` (r:0 w:1) - /// Proof: `CollatorSelection::CandidacyBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - fn set_candidacy_bond(_c: u32, _k: u32) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_937_000 picoseconds. - Weight::from_parts(8_161_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:1) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::DesiredCandidates` (r:1 w:0) - /// Proof: `CollatorSelection::DesiredCandidates` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `Session::NextKeys` (r:1 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `CollatorSelection::CandidacyBond` (r:1 w:0) - /// Proof: `CollatorSelection::CandidacyBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - /// The range of component `c` is `[1, 99]`. - fn register_as_candidate(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `736 + c * (52 ±0)` - // Estimated: `6287 + c * (54 ±0)` - // Minimum execution time: 42_805_000 picoseconds. - Weight::from_parts(45_979_502, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_336 - .saturating_add(Weight::from_parts(221_049, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(2)) - .saturating_add(Weight::from_parts(0, 54).saturating_mul(c.into())) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:1) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - /// The range of component `c` is `[4, 100]`. - fn leave_intent(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `306 + c * (50 ±0)` - // Estimated: `6287` - // Minimum execution time: 34_814_000 picoseconds. - Weight::from_parts(36_371_520, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_391 - .saturating_add(Weight::from_parts(201_700, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - fn update_bond(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `306 + c * (50 ±0)` - // Estimated: `6287` - // Minimum execution time: 34_814_000 picoseconds. - Weight::from_parts(36_371_520, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_391 - .saturating_add(Weight::from_parts(201_700, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - fn take_candidate_slot(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `306 + c * (50 ±0)` - // Estimated: `6287` - // Minimum execution time: 34_814_000 picoseconds. - Weight::from_parts(36_371_520, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_391 - .saturating_add(Weight::from_parts(201_700, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `System::BlockWeight` (r:1 w:1) - /// Proof: `System::BlockWeight` (`max_values`: Some(1), `max_size`: Some(48), added: 543, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - fn note_author() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `6196` - // Minimum execution time: 46_989_000 picoseconds. - Weight::from_parts(48_151_000, 0) - .saturating_add(Weight::from_parts(0, 6196)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:0) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:100 w:0) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `System::BlockWeight` (r:1 w:1) - /// Proof: `System::BlockWeight` (`max_values`: Some(1), `max_size`: Some(48), added: 543, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:97 w:97) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 100]`. - /// The range of component `c` is `[1, 100]`. - fn new_session(r: u32, c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `2243 + c * (97 ±0) + r * (112 ±0)` - // Estimated: `6287 + c * (2519 ±0) + r * (2603 ±0)` - // Minimum execution time: 17_547_000 picoseconds. - Weight::from_parts(17_854_000, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 370_637 - .saturating_add(Weight::from_parts(15_798_857, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) - .saturating_add(Weight::from_parts(0, 2519).saturating_mul(c.into())) - .saturating_add(Weight::from_parts(0, 2603).saturating_mul(r.into())) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_message_queue.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_message_queue.rs deleted file mode 100644 index 792b7d18b67..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_message_queue.rs +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_message_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-03-24, STEPS: `2`, REPEAT: `1`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `i9`, CPU: `13th Gen Intel(R) Core(TM) i9-13900K` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/polkadot-parachain -// benchmark -// pallet -// --chain -// statemint-dev -// --pallet -// pallet_message_queue -// --extrinsic -// * -// --execution -// wasm -// --wasm-execution -// compiled -// --output -// parachains/runtimes/assets/statemint/src/weights - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::Weight}; -use sp_std::marker::PhantomData; - -/// Weight functions for `pallet_message_queue`. -pub struct WeightInfo(PhantomData); -impl pallet_message_queue::WeightInfo for WeightInfo { - /// Storage: MessageQueue ServiceHead (r:1 w:0) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: MessageQueue BookStateFor (r:2 w:2) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn ready_ring_knit() -> Weight { - // Proof Size summary in bytes: - // Measured: `189` - // Estimated: `7534` - // Minimum execution time: 18_976_000 picoseconds. - Weight::from_parts(18_976_000, 0) - .saturating_add(Weight::from_parts(0, 7534)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:2 w:2) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - fn ready_ring_unknit() -> Weight { - // Proof Size summary in bytes: - // Measured: `184` - // Estimated: `7534` - // Minimum execution time: 12_686_000 picoseconds. - Weight::from_parts(12_686_000, 0) - .saturating_add(Weight::from_parts(0, 7534)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn service_queue_base() -> Weight { - // Proof Size summary in bytes: - // Measured: `6` - // Estimated: `3517` - // Minimum execution time: 4_951_000 picoseconds. - Weight::from_parts(4_951_000, 0) - .saturating_add(Weight::from_parts(0, 3517)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn service_page_base_completion() -> Weight { - // Proof Size summary in bytes: - // Measured: `72` - // Estimated: `69050` - // Minimum execution time: 6_023_000 picoseconds. - Weight::from_parts(6_023_000, 0) - .saturating_add(Weight::from_parts(0, 69050)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn service_page_base_no_completion() -> Weight { - // Proof Size summary in bytes: - // Measured: `72` - // Estimated: `69050` - // Minimum execution time: 6_901_000 picoseconds. - Weight::from_parts(6_901_000, 0) - .saturating_add(Weight::from_parts(0, 69050)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn service_page_item() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 58_503_000 picoseconds. - Weight::from_parts(58_503_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: MessageQueue BookStateFor (r:1 w:0) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn bump_service_head() -> Weight { - // Proof Size summary in bytes: - // Measured: `99` - // Estimated: `5007` - // Minimum execution time: 9_318_000 picoseconds. - Weight::from_parts(9_318_000, 0) - .saturating_add(Weight::from_parts(0, 5007)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn reap_page() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 52_228_000 picoseconds. - Weight::from_parts(52_228_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn execute_overweight_page_removed() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 59_617_000 picoseconds. - Weight::from_parts(59_617_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn execute_overweight_page_updated() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 69_681_000 picoseconds. - Weight::from_parts(69_681_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_multisig.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_multisig.rs deleted file mode 100644 index d2e0f0ec7f0..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_multisig.rs +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_multisig` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_multisig -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_multisig`. -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 { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 13_714_000 picoseconds. - Weight::from_parts(14_440_231, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 5 - .saturating_add(Weight::from_parts(598, 0).saturating_mul(z.into())) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_create(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `262 + s * (2 ±0)` - // Estimated: `6811` - // Minimum execution time: 44_768_000 picoseconds. - Weight::from_parts(33_662_218, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_633 - .saturating_add(Weight::from_parts(128_927, 0).saturating_mul(s.into())) - // Standard Error: 16 - .saturating_add(Weight::from_parts(1_543, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[3, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_approve(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `6811` - // Minimum execution time: 29_745_000 picoseconds. - Weight::from_parts(20_559_891, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 914 - .saturating_add(Weight::from_parts(103_601, 0).saturating_mul(s.into())) - // Standard Error: 8 - .saturating_add(Weight::from_parts(1_504, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_complete(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `385 + s * (33 ±0)` - // Estimated: `6811` - // Minimum execution time: 51_506_000 picoseconds. - Weight::from_parts(36_510_777, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 2_183 - .saturating_add(Weight::from_parts(183_764, 0).saturating_mul(s.into())) - // Standard Error: 21 - .saturating_add(Weight::from_parts(1_653, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_create(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `263 + s * (2 ±0)` - // Estimated: `6811` - // Minimum execution time: 31_072_000 picoseconds. - Weight::from_parts(32_408_621, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 913 - .saturating_add(Weight::from_parts(121_410, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_approve(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `6811` - // Minimum execution time: 18_301_000 picoseconds. - Weight::from_parts(18_223_547, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 747 - .saturating_add(Weight::from_parts(114_584, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn cancel_as_multi(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `454 + s * (1 ±0)` - // Estimated: `6811` - // Minimum execution time: 32_107_000 picoseconds. - Weight::from_parts(33_674_827, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_220 - .saturating_add(Weight::from_parts(122_011, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_nft_fractionalization.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_nft_fractionalization.rs deleted file mode 100644 index 4becc569514..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_nft_fractionalization.rs +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_nft_fractionalization` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_nft_fractionalization -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_nft_fractionalization`. -pub struct WeightInfo(PhantomData); -impl pallet_nft_fractionalization::WeightInfo for WeightInfo { - /// Storage: `Nfts::Item` (r:1 w:0) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Balances::Holds` (r:1 w:1) - /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:1 w:1) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Assets::Metadata` (r:1 w:1) - /// Proof: `Assets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - /// Storage: `NftFractionalization::NftToAsset` (r:0 w:1) - /// Proof: `NftFractionalization::NftToAsset` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) - fn fractionalize() -> Weight { - // Proof Size summary in bytes: - // Measured: `462` - // Estimated: `4326` - // Minimum execution time: 178_501_000 picoseconds. - Weight::from_parts(180_912_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(8)) - } - /// Storage: `NftFractionalization::NftToAsset` (r:1 w:1) - /// Proof: `NftFractionalization::NftToAsset` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:1 w:1) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:0) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Balances::Holds` (r:1 w:1) - /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Account` (r:0 w:1) - /// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemPriceOf` (r:0 w:1) - /// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - /// Storage: `Nfts::PendingSwapOf` (r:0 w:1) - /// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`) - fn unify() -> Weight { - // Proof Size summary in bytes: - // Measured: `1275` - // Estimated: `4326` - // Minimum execution time: 125_253_000 picoseconds. - Weight::from_parts(128_238_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(9)) - .saturating_add(T::DbWeight::get().writes(10)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_nfts.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_nfts.rs deleted file mode 100644 index 7a51830799a..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_nfts.rs +++ /dev/null @@ -1,772 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_nfts` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_nfts -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_nfts`. -pub struct WeightInfo(PhantomData); -impl pallet_nfts::WeightInfo for WeightInfo { - /// Storage: `Nfts::NextCollectionId` (r:1 w:1) - /// Proof: `Nfts::NextCollectionId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionRoleOf` (r:0 w:1) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:0 w:1) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionAccount` (r:0 w:1) - /// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - fn create() -> Weight { - // Proof Size summary in bytes: - // Measured: `179` - // Estimated: `3549` - // Minimum execution time: 39_124_000 picoseconds. - Weight::from_parts(39_975_000, 0) - .saturating_add(Weight::from_parts(0, 3549)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `Nfts::NextCollectionId` (r:1 w:1) - /// Proof: `Nfts::NextCollectionId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionRoleOf` (r:0 w:1) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:0 w:1) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionAccount` (r:0 w:1) - /// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - fn force_create() -> Weight { - // Proof Size summary in bytes: - // Measured: `76` - // Estimated: `3549` - // Minimum execution time: 23_444_000 picoseconds. - Weight::from_parts(23_857_000, 0) - .saturating_add(Weight::from_parts(0, 3549)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemMetadataOf` (r:1 w:0) - /// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(347), added: 2822, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:1) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:1001 w:1000) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1000 w:1000) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionMetadataOf` (r:0 w:1) - /// Proof: `Nfts::CollectionMetadataOf` (`max_values`: None, `max_size`: Some(294), added: 2769, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:0 w:1) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionAccount` (r:0 w:1) - /// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - /// The range of component `m` is `[0, 1000]`. - /// The range of component `c` is `[0, 1000]`. - /// The range of component `a` is `[0, 1000]`. - fn destroy(_m: u32, _c: u32, a: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `32204 + a * (366 ±0)` - // Estimated: `2523990 + a * (2954 ±0)` - // Minimum execution time: 1_224_365_000 picoseconds. - Weight::from_parts(1_281_136_346, 0) - .saturating_add(Weight::from_parts(0, 2523990)) - // Standard Error: 10_484 - .saturating_add(Weight::from_parts(6_910_740, 0).saturating_mul(a.into())) - .saturating_add(T::DbWeight::get().reads(1004)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) - .saturating_add(T::DbWeight::get().writes(1005)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) - .saturating_add(Weight::from_parts(0, 2954).saturating_mul(a.into())) - } - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:1) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Account` (r:0 w:1) - /// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - fn mint() -> Weight { - // Proof Size summary in bytes: - // Measured: `455` - // Estimated: `4326` - // Minimum execution time: 50_489_000 picoseconds. - Weight::from_parts(51_045_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:1) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Account` (r:0 w:1) - /// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - fn force_mint() -> Weight { - // Proof Size summary in bytes: - // Measured: `455` - // Estimated: `4326` - // Minimum execution time: 49_146_000 picoseconds. - Weight::from_parts(49_756_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Nfts::Attribute` (r:1 w:0) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:1) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemMetadataOf` (r:1 w:0) - /// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(347), added: 2822, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Account` (r:0 w:1) - /// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemPriceOf` (r:0 w:1) - /// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemAttributesApprovalsOf` (r:0 w:1) - /// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(1001), added: 3476, mode: `MaxEncodedLen`) - /// Storage: `Nfts::PendingSwapOf` (r:0 w:1) - /// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`) - fn burn() -> Weight { - // Proof Size summary in bytes: - // Measured: `564` - // Estimated: `4326` - // Minimum execution time: 56_059_000 picoseconds. - Weight::from_parts(57_162_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(7)) - } - /// Storage: `Nfts::Collection` (r:1 w:0) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:1 w:0) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:0) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Account` (r:0 w:2) - /// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemPriceOf` (r:0 w:1) - /// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - /// Storage: `Nfts::PendingSwapOf` (r:0 w:1) - /// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`) - fn transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `593` - // Estimated: `4326` - // Minimum execution time: 42_406_000 picoseconds. - Weight::from_parts(43_187_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `Nfts::Collection` (r:1 w:0) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Item` (r:5000 w:5000) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// The range of component `i` is `[0, 5000]`. - fn redeposit(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `763 + i * (108 ±0)` - // Estimated: `3549 + i * (3336 ±0)` - // Minimum execution time: 16_960_000 picoseconds. - Weight::from_parts(17_167_000, 0) - .saturating_add(Weight::from_parts(0, 3549)) - // Standard Error: 24_110 - .saturating_add(Weight::from_parts(18_046_970, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - .saturating_add(Weight::from_parts(0, 3336).saturating_mul(i.into())) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:1) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - fn lock_item_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `435` - // Estimated: `3534` - // Minimum execution time: 21_023_000 picoseconds. - Weight::from_parts(21_409_000, 0) - .saturating_add(Weight::from_parts(0, 3534)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:1) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - fn unlock_item_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `435` - // Estimated: `3534` - // Minimum execution time: 20_706_000 picoseconds. - Weight::from_parts(21_030_000, 0) - .saturating_add(Weight::from_parts(0, 3534)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Collection` (r:1 w:0) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:1) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - fn lock_collection() -> Weight { - // Proof Size summary in bytes: - // Measured: `340` - // Estimated: `3549` - // Minimum execution time: 17_449_000 picoseconds. - Weight::from_parts(17_804_000, 0) - .saturating_add(Weight::from_parts(0, 3549)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::OwnershipAcceptance` (r:1 w:1) - /// Proof: `Nfts::OwnershipAcceptance` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionAccount` (r:0 w:2) - /// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - fn transfer_ownership() -> Weight { - // Proof Size summary in bytes: - // Measured: `388` - // Estimated: `3549` - // Minimum execution time: 22_958_000 picoseconds. - Weight::from_parts(23_499_000, 0) - .saturating_add(Weight::from_parts(0, 3549)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionRoleOf` (r:2 w:4) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - fn set_team() -> Weight { - // Proof Size summary in bytes: - // Measured: `369` - // Estimated: `6078` - // Minimum execution time: 40_105_000 picoseconds. - Weight::from_parts(40_800_000, 0) - .saturating_add(Weight::from_parts(0, 6078)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionAccount` (r:0 w:2) - /// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - fn force_collection_owner() -> Weight { - // Proof Size summary in bytes: - // Measured: `311` - // Estimated: `3549` - // Minimum execution time: 17_832_000 picoseconds. - Weight::from_parts(18_297_000, 0) - .saturating_add(Weight::from_parts(0, 3549)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Nfts::Collection` (r:1 w:0) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:0 w:1) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - fn force_collection_config() -> Weight { - // Proof Size summary in bytes: - // Measured: `276` - // Estimated: `3549` - // Minimum execution time: 15_027_000 picoseconds. - Weight::from_parts(15_370_000, 0) - .saturating_add(Weight::from_parts(0, 3549)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:1) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - fn lock_item_properties() -> Weight { - // Proof Size summary in bytes: - // Measured: `435` - // Estimated: `3534` - // Minimum execution time: 19_912_000 picoseconds. - Weight::from_parts(20_258_000, 0) - .saturating_add(Weight::from_parts(0, 3534)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:0) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:1 w:1) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - fn set_attribute() -> Weight { - // Proof Size summary in bytes: - // Measured: `539` - // Estimated: `3944` - // Minimum execution time: 50_138_000 picoseconds. - Weight::from_parts(50_971_000, 0) - .saturating_add(Weight::from_parts(0, 3944)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:1 w:1) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - fn force_set_attribute() -> Weight { - // Proof Size summary in bytes: - // Measured: `344` - // Estimated: `3944` - // Minimum execution time: 26_385_000 picoseconds. - Weight::from_parts(27_086_000, 0) - .saturating_add(Weight::from_parts(0, 3944)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Nfts::Attribute` (r:1 w:1) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:0) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - fn clear_attribute() -> Weight { - // Proof Size summary in bytes: - // Measured: `983` - // Estimated: `3944` - // Minimum execution time: 45_687_000 picoseconds. - Weight::from_parts(47_107_000, 0) - .saturating_add(Weight::from_parts(0, 3944)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Nfts::Item` (r:1 w:0) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemAttributesApprovalsOf` (r:1 w:1) - /// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(1001), added: 3476, mode: `MaxEncodedLen`) - fn approve_item_attributes() -> Weight { - // Proof Size summary in bytes: - // Measured: `381` - // Estimated: `4466` - // Minimum execution time: 18_065_000 picoseconds. - Weight::from_parts(18_371_000, 0) - .saturating_add(Weight::from_parts(0, 4466)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Item` (r:1 w:0) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemAttributesApprovalsOf` (r:1 w:1) - /// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(1001), added: 3476, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:1001 w:1000) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 1000]`. - fn cancel_item_attributes_approval(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `760 + n * (398 ±0)` - // Estimated: `4466 + n * (2954 ±0)` - // Minimum execution time: 26_680_000 picoseconds. - Weight::from_parts(27_010_000, 0) - .saturating_add(Weight::from_parts(0, 4466)) - // Standard Error: 6_351 - .saturating_add(Weight::from_parts(6_584_290, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) - .saturating_add(T::DbWeight::get().writes(2)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) - .saturating_add(Weight::from_parts(0, 2954).saturating_mul(n.into())) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:0) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemMetadataOf` (r:1 w:1) - /// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(347), added: 2822, mode: `MaxEncodedLen`) - fn set_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `539` - // Estimated: `3812` - // Minimum execution time: 42_038_000 picoseconds. - Weight::from_parts(42_758_000, 0) - .saturating_add(Weight::from_parts(0, 3812)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemMetadataOf` (r:1 w:1) - /// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(347), added: 2822, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:0) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - fn clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `849` - // Estimated: `3812` - // Minimum execution time: 40_220_000 picoseconds. - Weight::from_parts(41_026_000, 0) - .saturating_add(Weight::from_parts(0, 3812)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionMetadataOf` (r:1 w:1) - /// Proof: `Nfts::CollectionMetadataOf` (`max_values`: None, `max_size`: Some(294), added: 2769, mode: `MaxEncodedLen`) - fn set_collection_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `398` - // Estimated: `3759` - // Minimum execution time: 38_135_000 picoseconds. - Weight::from_parts(38_561_000, 0) - .saturating_add(Weight::from_parts(0, 3759)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:0) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionMetadataOf` (r:1 w:1) - /// Proof: `Nfts::CollectionMetadataOf` (`max_values`: None, `max_size`: Some(294), added: 2769, mode: `MaxEncodedLen`) - fn clear_collection_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `716` - // Estimated: `3759` - // Minimum execution time: 37_583_000 picoseconds. - Weight::from_parts(38_215_000, 0) - .saturating_add(Weight::from_parts(0, 3759)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - fn approve_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `410` - // Estimated: `4326` - // Minimum execution time: 21_405_000 picoseconds. - Weight::from_parts(21_803_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - fn cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `418` - // Estimated: `4326` - // Minimum execution time: 18_713_000 picoseconds. - Weight::from_parts(19_185_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - fn clear_all_transfer_approvals() -> Weight { - // Proof Size summary in bytes: - // Measured: `418` - // Estimated: `4326` - // Minimum execution time: 17_803_000 picoseconds. - Weight::from_parts(18_270_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::OwnershipAcceptance` (r:1 w:1) - /// Proof: `Nfts::OwnershipAcceptance` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn set_accept_ownership() -> Weight { - // Proof Size summary in bytes: - // Measured: `76` - // Estimated: `3517` - // Minimum execution time: 15_982_000 picoseconds. - Weight::from_parts(16_700_000, 0) - .saturating_add(Weight::from_parts(0, 3517)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:1) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:0) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - fn set_collection_max_supply() -> Weight { - // Proof Size summary in bytes: - // Measured: `340` - // Estimated: `3549` - // Minimum execution time: 19_501_000 picoseconds. - Weight::from_parts(19_785_000, 0) - .saturating_add(Weight::from_parts(0, 3549)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:1) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - fn update_mint_settings() -> Weight { - // Proof Size summary in bytes: - // Measured: `323` - // Estimated: `3538` - // Minimum execution time: 18_914_000 picoseconds. - Weight::from_parts(19_292_000, 0) - .saturating_add(Weight::from_parts(0, 3538)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Item` (r:1 w:0) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:0) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemPriceOf` (r:0 w:1) - /// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - fn set_price() -> Weight { - // Proof Size summary in bytes: - // Measured: `518` - // Estimated: `4326` - // Minimum execution time: 24_625_000 picoseconds. - Weight::from_parts(25_257_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemPriceOf` (r:1 w:1) - /// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:0) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:1 w:0) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:0) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Account` (r:0 w:2) - /// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - /// Storage: `Nfts::PendingSwapOf` (r:0 w:1) - /// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`) - fn buy_item() -> Weight { - // Proof Size summary in bytes: - // Measured: `705` - // Estimated: `4326` - // Minimum execution time: 50_833_000 picoseconds. - Weight::from_parts(52_161_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// The range of component `n` is `[0, 10]`. - fn pay_tips(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_220_000 picoseconds. - Weight::from_parts(3_476_001, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 7_084 - .saturating_add(Weight::from_parts(3_844_820, 0).saturating_mul(n.into())) - } - /// Storage: `Nfts::Item` (r:2 w:0) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::PendingSwapOf` (r:0 w:1) - /// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`) - fn create_swap() -> Weight { - // Proof Size summary in bytes: - // Measured: `494` - // Estimated: `7662` - // Minimum execution time: 21_983_000 picoseconds. - Weight::from_parts(22_746_000, 0) - .saturating_add(Weight::from_parts(0, 7662)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::PendingSwapOf` (r:1 w:1) - /// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Item` (r:1 w:0) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - fn cancel_swap() -> Weight { - // Proof Size summary in bytes: - // Measured: `513` - // Estimated: `4326` - // Minimum execution time: 20_875_000 picoseconds. - Weight::from_parts(21_465_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Item` (r:2 w:2) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::PendingSwapOf` (r:1 w:2) - /// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:0) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:2 w:0) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:2 w:0) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Account` (r:0 w:4) - /// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemPriceOf` (r:0 w:2) - /// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - fn claim_swap() -> Weight { - // Proof Size summary in bytes: - // Measured: `834` - // Estimated: `7662` - // Minimum execution time: 84_771_000 picoseconds. - Weight::from_parts(86_078_000, 0) - .saturating_add(Weight::from_parts(0, 7662)) - .saturating_add(T::DbWeight::get().reads(9)) - .saturating_add(T::DbWeight::get().writes(10)) - } - /// Storage: `Nfts::CollectionRoleOf` (r:2 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:1) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:10 w:10) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemMetadataOf` (r:1 w:1) - /// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(347), added: 2822, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Account` (r:0 w:1) - /// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 10]`. - fn mint_pre_signed(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `558` - // Estimated: `6078 + n * (2954 ±0)` - // Minimum execution time: 143_265_000 picoseconds. - Weight::from_parts(150_978_773, 0) - .saturating_add(Weight::from_parts(0, 6078)) - // Standard Error: 49_443 - .saturating_add(Weight::from_parts(31_888_255, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) - .saturating_add(T::DbWeight::get().writes(6)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) - .saturating_add(Weight::from_parts(0, 2954).saturating_mul(n.into())) - } - /// Storage: `Nfts::Item` (r:1 w:0) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemAttributesApprovalsOf` (r:1 w:1) - /// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(1001), added: 3476, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:10 w:10) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 10]`. - fn set_attributes_pre_signed(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `588` - // Estimated: `4466 + n * (2954 ±0)` - // Minimum execution time: 83_754_000 picoseconds. - Weight::from_parts(96_685_026, 0) - .saturating_add(Weight::from_parts(0, 4466)) - // Standard Error: 72_592 - .saturating_add(Weight::from_parts(30_914_858, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) - .saturating_add(T::DbWeight::get().writes(2)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) - .saturating_add(Weight::from_parts(0, 2954).saturating_mul(n.into())) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_proxy.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_proxy.rs deleted file mode 100644 index 0cdffc653bc..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_proxy.rs +++ /dev/null @@ -1,225 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_proxy` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_proxy -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_proxy`. -pub struct WeightInfo(PhantomData); -impl pallet_proxy::WeightInfo for WeightInfo { - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `127 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 16_417_000 picoseconds. - Weight::from_parts(17_283_443, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 2_409 - .saturating_add(Weight::from_parts(32_123, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - } - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn proxy_announced(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `454 + a * (68 ±0) + p * (37 ±0)` - // Estimated: `5698` - // Minimum execution time: 37_572_000 picoseconds. - Weight::from_parts(37_045_756, 0) - .saturating_add(Weight::from_parts(0, 5698)) - // Standard Error: 2_896 - .saturating_add(Weight::from_parts(139_561, 0).saturating_mul(a.into())) - // Standard Error: 2_993 - .saturating_add(Weight::from_parts(73_270, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn remove_announcement(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `369 + a * (68 ±0)` - // Estimated: `5698` - // Minimum execution time: 24_066_000 picoseconds. - Weight::from_parts(24_711_403, 0) - .saturating_add(Weight::from_parts(0, 5698)) - // Standard Error: 1_626 - .saturating_add(Weight::from_parts(128_391, 0).saturating_mul(a.into())) - // Standard Error: 1_680 - .saturating_add(Weight::from_parts(23_124, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn reject_announcement(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `369 + a * (68 ±0)` - // Estimated: `5698` - // Minimum execution time: 24_162_000 picoseconds. - Weight::from_parts(23_928_058, 0) - .saturating_add(Weight::from_parts(0, 5698)) - // Standard Error: 2_072 - .saturating_add(Weight::from_parts(152_299, 0).saturating_mul(a.into())) - // Standard Error: 2_141 - .saturating_add(Weight::from_parts(39_775, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn announce(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `386 + a * (68 ±0) + p * (37 ±0)` - // Estimated: `5698` - // Minimum execution time: 33_858_000 picoseconds. - Weight::from_parts(33_568_059, 0) - .saturating_add(Weight::from_parts(0, 5698)) - // Standard Error: 1_816 - .saturating_add(Weight::from_parts(134_400, 0).saturating_mul(a.into())) - // Standard Error: 1_876 - .saturating_add(Weight::from_parts(57_028, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn add_proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `127 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 24_947_000 picoseconds. - Weight::from_parts(26_235_199, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 1_363 - .saturating_add(Weight::from_parts(41_435, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn remove_proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `127 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 25_186_000 picoseconds. - Weight::from_parts(26_823_133, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 2_259 - .saturating_add(Weight::from_parts(34_224, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn remove_proxies(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `127 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 22_156_000 picoseconds. - Weight::from_parts(23_304_060, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 1_738 - .saturating_add(Weight::from_parts(39_612, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn create_pure(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `139` - // Estimated: `4706` - // Minimum execution time: 26_914_000 picoseconds. - Weight::from_parts(28_009_062, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 1_978 - .saturating_add(Weight::from_parts(12_255, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[0, 30]`. - fn kill_pure(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `164 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 23_281_000 picoseconds. - Weight::from_parts(24_392_989, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 2_943 - .saturating_add(Weight::from_parts(30_287, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_session.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_session.rs deleted file mode 100644 index 73c3c06945d..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_session.rs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_session` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_session -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_session`. -pub struct WeightInfo(PhantomData); -impl pallet_session::WeightInfo for WeightInfo { - /// Storage: `Session::NextKeys` (r:1 w:1) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Session::KeyOwner` (r:1 w:1) - /// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn set_keys() -> Weight { - // Proof Size summary in bytes: - // Measured: `270` - // Estimated: `3735` - // Minimum execution time: 16_932_000 picoseconds. - Weight::from_parts(17_357_000, 0) - .saturating_add(Weight::from_parts(0, 3735)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Session::NextKeys` (r:1 w:1) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Session::KeyOwner` (r:0 w:1) - /// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn purge_keys() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `3707` - // Minimum execution time: 12_157_000 picoseconds. - Weight::from_parts(12_770_000, 0) - .saturating_add(Weight::from_parts(0, 3707)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_timestamp.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_timestamp.rs deleted file mode 100644 index e27289a49e9..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_timestamp.rs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_timestamp` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_timestamp -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_timestamp`. -pub struct WeightInfo(PhantomData); -impl pallet_timestamp::WeightInfo for WeightInfo { - /// Storage: `Timestamp::Now` (r:1 w:1) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `Aura::CurrentSlot` (r:1 w:0) - /// Proof: `Aura::CurrentSlot` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - fn set() -> Weight { - // Proof Size summary in bytes: - // Measured: `86` - // Estimated: `1493` - // Minimum execution time: 9_313_000 picoseconds. - Weight::from_parts(9_775_000, 0) - .saturating_add(Weight::from_parts(0, 1493)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn on_finalize() -> Weight { - // Proof Size summary in bytes: - // Measured: `57` - // Estimated: `0` - // Minimum execution time: 3_322_000 picoseconds. - Weight::from_parts(3_577_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_uniques.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_uniques.rs deleted file mode 100644 index 69d3e773afb..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_uniques.rs +++ /dev/null @@ -1,466 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_uniques` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_uniques -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_uniques`. -pub struct WeightInfo(PhantomData); -impl pallet_uniques::WeightInfo for WeightInfo { - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ClassAccount` (r:0 w:1) - /// Proof: `Uniques::ClassAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - fn create() -> Weight { - // Proof Size summary in bytes: - // Measured: `145` - // Estimated: `3643` - // Minimum execution time: 28_845_000 picoseconds. - Weight::from_parts(29_675_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ClassAccount` (r:0 w:1) - /// Proof: `Uniques::ClassAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - fn force_create() -> Weight { - // Proof Size summary in bytes: - // Measured: `42` - // Estimated: `3643` - // Minimum execution time: 13_492_000 picoseconds. - Weight::from_parts(14_049_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Asset` (r:1001 w:1000) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// Storage: `Uniques::InstanceMetadataOf` (r:1000 w:1000) - /// Proof: `Uniques::InstanceMetadataOf` (`max_values`: None, `max_size`: Some(187), added: 2662, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Attribute` (r:1000 w:1000) - /// Proof: `Uniques::Attribute` (`max_values`: None, `max_size`: Some(172), added: 2647, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ClassAccount` (r:0 w:1) - /// Proof: `Uniques::ClassAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ClassMetadataOf` (r:0 w:1) - /// Proof: `Uniques::ClassMetadataOf` (`max_values`: None, `max_size`: Some(167), added: 2642, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Account` (r:0 w:1000) - /// Proof: `Uniques::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - /// Storage: `Uniques::CollectionMaxSupply` (r:0 w:1) - /// Proof: `Uniques::CollectionMaxSupply` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 1000]`. - /// 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 { - // Proof Size summary in bytes: - // Measured: `257 + a * (107 ±0) + m * (56 ±0) + n * (76 ±0)` - // Estimated: `3643 + a * (2647 ±0) + m * (2662 ±0) + n * (2597 ±0)` - // Minimum execution time: 2_920_070_000 picoseconds. - Weight::from_parts(2_983_862_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - // Standard Error: 36_415 - .saturating_add(Weight::from_parts(7_589_778, 0).saturating_mul(n.into())) - // Standard Error: 36_415 - .saturating_add(Weight::from_parts(479_496, 0).saturating_mul(m.into())) - // Standard Error: 36_415 - .saturating_add(Weight::from_parts(562_056, 0).saturating_mul(a.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(m.into()))) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) - .saturating_add(T::DbWeight::get().writes(4)) - .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(m.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) - .saturating_add(Weight::from_parts(0, 2647).saturating_mul(a.into())) - .saturating_add(Weight::from_parts(0, 2662).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 2597).saturating_mul(n.into())) - } - /// Storage: `Uniques::Asset` (r:1 w:1) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::CollectionMaxSupply` (r:1 w:0) - /// Proof: `Uniques::CollectionMaxSupply` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Account` (r:0 w:1) - /// Proof: `Uniques::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - fn mint() -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `3643` - // Minimum execution time: 35_329_000 picoseconds. - Weight::from_parts(36_019_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Asset` (r:1 w:1) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Account` (r:0 w:1) - /// Proof: `Uniques::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ItemPriceOf` (r:0 w:1) - /// Proof: `Uniques::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - fn burn() -> Weight { - // Proof Size summary in bytes: - // Measured: `428` - // Estimated: `3643` - // Minimum execution time: 36_474_000 picoseconds. - Weight::from_parts(37_190_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Uniques::Class` (r:1 w:0) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Asset` (r:1 w:1) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Account` (r:0 w:2) - /// Proof: `Uniques::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ItemPriceOf` (r:0 w:1) - /// Proof: `Uniques::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - fn transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `428` - // Estimated: `3643` - // Minimum execution time: 26_786_000 picoseconds. - Weight::from_parts(27_400_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Asset` (r:5000 w:5000) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// The range of component `i` is `[0, 5000]`. - fn redeposit(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `738 + i * (76 ±0)` - // Estimated: `3643 + i * (2597 ±0)` - // Minimum execution time: 14_546_000 picoseconds. - Weight::from_parts(14_831_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - // Standard Error: 24_362 - .saturating_add(Weight::from_parts(17_972_938, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - .saturating_add(Weight::from_parts(0, 2597).saturating_mul(i.into())) - } - /// Storage: `Uniques::Asset` (r:1 w:1) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Class` (r:1 w:0) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - fn freeze() -> Weight { - // Proof Size summary in bytes: - // Measured: `428` - // Estimated: `3643` - // Minimum execution time: 18_919_000 picoseconds. - Weight::from_parts(19_547_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::Asset` (r:1 w:1) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Class` (r:1 w:0) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - fn thaw() -> Weight { - // Proof Size summary in bytes: - // Measured: `428` - // Estimated: `3643` - // Minimum execution time: 18_643_000 picoseconds. - Weight::from_parts(19_000_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - fn freeze_collection() -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `3643` - // Minimum execution time: 13_530_000 picoseconds. - Weight::from_parts(14_165_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - fn thaw_collection() -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `3643` - // Minimum execution time: 13_523_000 picoseconds. - Weight::from_parts(14_055_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::OwnershipAcceptance` (r:1 w:1) - /// Proof: `Uniques::OwnershipAcceptance` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ClassAccount` (r:0 w:2) - /// Proof: `Uniques::ClassAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - fn transfer_ownership() -> Weight { - // Proof Size summary in bytes: - // Measured: `356` - // Estimated: `3643` - // Minimum execution time: 22_131_000 picoseconds. - Weight::from_parts(22_628_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - fn set_team() -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `3643` - // Minimum execution time: 13_841_000 picoseconds. - Weight::from_parts(14_408_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ClassAccount` (r:0 w:1) - /// Proof: `Uniques::ClassAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - fn force_item_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `3643` - // Minimum execution time: 16_954_000 picoseconds. - Weight::from_parts(17_482_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::InstanceMetadataOf` (r:1 w:0) - /// Proof: `Uniques::InstanceMetadataOf` (`max_values`: None, `max_size`: Some(187), added: 2662, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Attribute` (r:1 w:1) - /// Proof: `Uniques::Attribute` (`max_values`: None, `max_size`: Some(172), added: 2647, mode: `MaxEncodedLen`) - fn set_attribute() -> Weight { - // Proof Size summary in bytes: - // Measured: `559` - // Estimated: `3652` - // Minimum execution time: 38_493_000 picoseconds. - Weight::from_parts(39_513_000, 0) - .saturating_add(Weight::from_parts(0, 3652)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::InstanceMetadataOf` (r:1 w:0) - /// Proof: `Uniques::InstanceMetadataOf` (`max_values`: None, `max_size`: Some(187), added: 2662, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Attribute` (r:1 w:1) - /// Proof: `Uniques::Attribute` (`max_values`: None, `max_size`: Some(172), added: 2647, mode: `MaxEncodedLen`) - fn clear_attribute() -> Weight { - // Proof Size summary in bytes: - // Measured: `756` - // Estimated: `3652` - // Minimum execution time: 37_918_000 picoseconds. - Weight::from_parts(38_666_000, 0) - .saturating_add(Weight::from_parts(0, 3652)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::InstanceMetadataOf` (r:1 w:1) - /// Proof: `Uniques::InstanceMetadataOf` (`max_values`: None, `max_size`: Some(187), added: 2662, mode: `MaxEncodedLen`) - fn set_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `348` - // Estimated: `3652` - // Minimum execution time: 29_810_000 picoseconds. - Weight::from_parts(30_363_000, 0) - .saturating_add(Weight::from_parts(0, 3652)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::InstanceMetadataOf` (r:1 w:1) - /// Proof: `Uniques::InstanceMetadataOf` (`max_values`: None, `max_size`: Some(187), added: 2662, mode: `MaxEncodedLen`) - fn clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `559` - // Estimated: `3652` - // Minimum execution time: 30_877_000 picoseconds. - Weight::from_parts(31_430_000, 0) - .saturating_add(Weight::from_parts(0, 3652)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ClassMetadataOf` (r:1 w:1) - /// Proof: `Uniques::ClassMetadataOf` (`max_values`: None, `max_size`: Some(167), added: 2642, mode: `MaxEncodedLen`) - fn set_collection_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `3643` - // Minimum execution time: 30_478_000 picoseconds. - Weight::from_parts(31_065_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Uniques::Class` (r:1 w:0) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ClassMetadataOf` (r:1 w:1) - /// Proof: `Uniques::ClassMetadataOf` (`max_values`: None, `max_size`: Some(167), added: 2642, mode: `MaxEncodedLen`) - fn clear_collection_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `473` - // Estimated: `3643` - // Minimum execution time: 29_582_000 picoseconds. - Weight::from_parts(30_160_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::Class` (r:1 w:0) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Asset` (r:1 w:1) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - fn approve_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `428` - // Estimated: `3643` - // Minimum execution time: 19_328_000 picoseconds. - Weight::from_parts(19_866_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::Class` (r:1 w:0) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Asset` (r:1 w:1) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - fn cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `461` - // Estimated: `3643` - // Minimum execution time: 19_131_000 picoseconds. - Weight::from_parts(19_569_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::OwnershipAcceptance` (r:1 w:1) - /// Proof: `Uniques::OwnershipAcceptance` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn set_accept_ownership() -> Weight { - // Proof Size summary in bytes: - // Measured: `42` - // Estimated: `3517` - // Minimum execution time: 15_212_000 picoseconds. - Weight::from_parts(15_691_000, 0) - .saturating_add(Weight::from_parts(0, 3517)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::CollectionMaxSupply` (r:1 w:1) - /// Proof: `Uniques::CollectionMaxSupply` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Class` (r:1 w:0) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - fn set_collection_max_supply() -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `3643` - // Minimum execution time: 16_290_000 picoseconds. - Weight::from_parts(16_654_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::Asset` (r:1 w:0) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ItemPriceOf` (r:0 w:1) - /// Proof: `Uniques::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - fn set_price() -> Weight { - // Proof Size summary in bytes: - // Measured: `259` - // Estimated: `3587` - // Minimum execution time: 16_095_000 picoseconds. - Weight::from_parts(16_555_000, 0) - .saturating_add(Weight::from_parts(0, 3587)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::Asset` (r:1 w:1) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ItemPriceOf` (r:1 w:1) - /// Proof: `Uniques::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Class` (r:1 w:0) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Account` (r:0 w:2) - /// Proof: `Uniques::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - fn buy_item() -> Weight { - // Proof Size summary in bytes: - // Measured: `540` - // Estimated: `3643` - // Minimum execution time: 35_506_000 picoseconds. - Weight::from_parts(36_305_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(4)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_utility.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_utility.rs deleted file mode 100644 index e6c3e1295ef..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_utility.rs +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_utility` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_utility -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_utility`. -pub struct WeightInfo(PhantomData); -impl pallet_utility::WeightInfo for WeightInfo { - /// The range of component `c` is `[0, 1000]`. - fn batch(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_103_000 picoseconds. - Weight::from_parts(7_226_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 2_732 - .saturating_add(Weight::from_parts(6_560_347, 0).saturating_mul(c.into())) - } - fn as_derivative() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 5_208_000 picoseconds. - Weight::from_parts(5_480_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// The range of component `c` is `[0, 1000]`. - fn batch_all(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_070_000 picoseconds. - Weight::from_parts(1_321_270, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 3_454 - .saturating_add(Weight::from_parts(6_864_640, 0).saturating_mul(c.into())) - } - fn dispatch_as() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 9_255_000 picoseconds. - Weight::from_parts(9_683_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// The range of component `c` is `[0, 1000]`. - fn force_batch(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_852_000 picoseconds. - Weight::from_parts(7_007_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 1_745 - .saturating_add(Weight::from_parts(6_562_902, 0).saturating_mul(c.into())) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_xcm.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_xcm.rs deleted file mode 100644 index 1e4a723e10f..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/pallet_xcm.rs +++ /dev/null @@ -1,324 +0,0 @@ -// Copyright (C) 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` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-11-10, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=pallet_xcm -// --chain=asset-hub-kusama-dev -// --header=./cumulus/file_header.txt -// --output=./cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_xcm`. -pub struct WeightInfo(PhantomData); -impl pallet_xcm::WeightInfo for WeightInfo { - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn send() -> Weight { - // Proof Size summary in bytes: - // Measured: `145` - // Estimated: `3610` - // Minimum execution time: 25_043_000 picoseconds. - Weight::from_parts(25_670_000, 0) - .saturating_add(Weight::from_parts(0, 3610)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ParachainInfo::ParachainId` (r:1 w:0) - /// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - fn teleport_assets() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `1489` - // Minimum execution time: 18_893_000 picoseconds. - Weight::from_parts(19_261_000, 0) - .saturating_add(Weight::from_parts(0, 1489)) - .saturating_add(T::DbWeight::get().reads(1)) - } - /// Storage: `ParachainInfo::ParachainId` (r:1 w:0) - /// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - fn reserve_transfer_assets() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `1489` - // Minimum execution time: 14_107_000 picoseconds. - Weight::from_parts(14_500_000, 0) - .saturating_add(Weight::from_parts(0, 1489)) - .saturating_add(T::DbWeight::get().reads(1)) - } - /// Storage: `Benchmark::Override` (r:0 w:0) - /// Proof: `Benchmark::Override` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn execute() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 18_446_744_073_709_551_000 picoseconds. - Weight::from_parts(18_446_744_073_709_551_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: `PolkadotXcm::SupportedVersion` (r:0 w:1) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_xcm_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_175_000 picoseconds. - Weight::from_parts(7_493_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:0 w:1) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn force_default_xcm_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_162_000 picoseconds. - Weight::from_parts(2_278_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_subscribe_version_notify() -> Weight { - // Proof Size summary in bytes: - // Measured: `145` - // Estimated: `3610` - // Minimum execution time: 29_144_000 picoseconds. - Weight::from_parts(30_134_000, 0) - .saturating_add(Weight::from_parts(0, 3610)) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_unsubscribe_version_notify() -> Weight { - // Proof Size summary in bytes: - // Measured: `363` - // Estimated: `3828` - // Minimum execution time: 31_522_000 picoseconds. - Weight::from_parts(32_679_000, 0) - .saturating_add(Weight::from_parts(0, 3828)) - .saturating_add(T::DbWeight::get().reads(7)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `PolkadotXcm::XcmExecutionSuspended` (r:0 w:1) - /// Proof: `PolkadotXcm::XcmExecutionSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn force_suspension() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_338_000 picoseconds. - Weight::from_parts(2_494_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PolkadotXcm::SupportedVersion` (r:4 w:2) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_supported_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `162` - // Estimated: `11052` - // Minimum execution time: 17_315_000 picoseconds. - Weight::from_parts(17_787_000, 0) - .saturating_add(Weight::from_parts(0, 11052)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_version_notifiers() -> Weight { - // Proof Size summary in bytes: - // Measured: `166` - // Estimated: `11056` - // Minimum execution time: 17_273_000 picoseconds. - Weight::from_parts(17_712_000, 0) - .saturating_add(Weight::from_parts(0, 11056)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:5 w:0) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn already_notified_target() -> Weight { - // Proof Size summary in bytes: - // Measured: `173` - // Estimated: `13538` - // Minimum execution time: 18_395_000 picoseconds. - Weight::from_parts(19_095_000, 0) - .saturating_add(Weight::from_parts(0, 13538)) - .saturating_add(T::DbWeight::get().reads(5)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:2 w:1) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn notify_current_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `212` - // Estimated: `6152` - // Minimum execution time: 27_343_000 picoseconds. - Weight::from_parts(28_068_000, 0) - .saturating_add(Weight::from_parts(0, 6152)) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:3 w:0) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn notify_target_migration_fail() -> Weight { - // Proof Size summary in bytes: - // Measured: `206` - // Estimated: `8621` - // Minimum execution time: 9_156_000 picoseconds. - Weight::from_parts(9_552_000, 0) - .saturating_add(Weight::from_parts(0, 8621)) - .saturating_add(T::DbWeight::get().reads(3)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_version_notify_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `173` - // Estimated: `11063` - // Minimum execution time: 17_454_000 picoseconds. - Weight::from_parts(17_831_000, 0) - .saturating_add(Weight::from_parts(0, 11063)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn migrate_and_notify_old_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `215` - // Estimated: `11105` - // Minimum execution time: 34_299_000 picoseconds. - Weight::from_parts(35_156_000, 0) - .saturating_add(Weight::from_parts(0, 11105)) - .saturating_add(T::DbWeight::get().reads(10)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn new_query() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `1588` - // Minimum execution time: 4_508_000 picoseconds. - Weight::from_parts(4_702_000, 0) - .saturating_add(Weight::from_parts(0, 1588)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::Queries` (r:1 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn take_response() -> Weight { - // Proof Size summary in bytes: - // Measured: `7740` - // Estimated: `11205` - // Minimum execution time: 26_557_000 picoseconds. - Weight::from_parts(26_980_000, 0) - .saturating_add(Weight::from_parts(0, 11205)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/paritydb_weights.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/paritydb_weights.rs deleted file mode 100644 index 25679703831..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/paritydb_weights.rs +++ /dev/null @@ -1,63 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, RuntimeDbWeight}, - }; - - parameter_types! { - /// `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_REF_TIME_PER_NANOS, - write: 50_000 * constants::WEIGHT_REF_TIME_PER_NANOS, - }; - } - - #[cfg(test)] - mod test_db_weights { - use super::constants::ParityDbWeight as W; - use frame_support::weights::constants; - - /// Checks that all weights exist and have sane values. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - // At least 1 µs. - assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Read weight should be at least 1 µs." - ); - assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Write weight should be at least 1 µs." - ); - // At most 1 ms. - assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Read weight should be at most 1 ms." - ); - assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Write weight should be at most 1 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/rocksdb_weights.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/rocksdb_weights.rs deleted file mode 100644 index 3dd817aa6f1..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/rocksdb_weights.rs +++ /dev/null @@ -1,63 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, RuntimeDbWeight}, - }; - - parameter_types! { - /// 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_REF_TIME_PER_NANOS, - write: 100_000 * constants::WEIGHT_REF_TIME_PER_NANOS, - }; - } - - #[cfg(test)] - mod test_db_weights { - use super::constants::RocksDbWeight as W; - use frame_support::weights::constants; - - /// Checks that all weights exist and have sane values. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - // At least 1 µs. - assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Read weight should be at least 1 µs." - ); - assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Write weight should be at least 1 µs." - ); - // At most 1 ms. - assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Read weight should be at most 1 ms." - ); - assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Write weight should be at most 1 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/xcm/mod.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/xcm/mod.rs deleted file mode 100644 index 405d7c72e55..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/xcm/mod.rs +++ /dev/null @@ -1,244 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -mod pallet_xcm_benchmarks_fungible; -mod pallet_xcm_benchmarks_generic; - -use crate::{xcm_config::MaxAssetsIntoHolding, 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::*, DoubleEncoded}; - -trait WeighMultiAssets { - fn weigh_multi_assets(&self, weight: Weight) -> Weight; -} - -const MAX_ASSETS: u64 = 100; - -impl WeighMultiAssets for MultiAssetFilter { - fn weigh_multi_assets(&self, weight: Weight) -> Weight { - match self { - Self::Definite(assets) => weight.saturating_mul(assets.inner().iter().count() as u64), - Self::Wild(asset) => match asset { - All => weight.saturating_mul(MAX_ASSETS), - AllOf { fun, .. } => match fun { - WildFungibility::Fungible => weight, - // Magic number 2 has to do with the fact that we could have up to 2 times - // MaxAssetsIntoHolding in the worst-case scenario. - WildFungibility::NonFungible => - weight.saturating_mul((MaxAssetsIntoHolding::get() * 2) as u64), - }, - AllCounted(count) => weight.saturating_mul(MAX_ASSETS.min(*count as u64)), - AllOfCounted { count, .. } => weight.saturating_mul(MAX_ASSETS.min(*count as u64)), - }, - } - } -} - -impl WeighMultiAssets for MultiAssets { - fn weigh_multi_assets(&self, weight: Weight) -> Weight { - weight.saturating_mul(self.inner().iter().count() as u64) - } -} - -pub struct AssetHubKusamaXcmWeight(core::marker::PhantomData); -impl XcmWeightInfo for AssetHubKusamaXcmWeight { - fn withdraw_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::withdraw_asset()) - } - fn reserve_asset_deposited(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::reserve_asset_deposited()) - } - fn receive_teleported_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::receive_teleported_asset()) - } - fn query_response( - _query_id: &u64, - _response: &Response, - _max_weight: &Weight, - _querier: &Option, - ) -> Weight { - XcmGeneric::::query_response() - } - fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::transfer_asset()) - } - fn transfer_reserve_asset( - assets: &MultiAssets, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::transfer_reserve_asset()) - } - fn transact( - _origin_type: &OriginKind, - _require_weight_at_most: &Weight, - _call: &DoubleEncoded, - ) -> Weight { - XcmGeneric::::transact() - } - fn hrmp_new_channel_open_request( - _sender: &u32, - _max_message_size: &u32, - _max_capacity: &u32, - ) -> Weight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn hrmp_channel_accepted(_recipient: &u32) -> Weight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> Weight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn clear_origin() -> Weight { - XcmGeneric::::clear_origin() - } - fn descend_origin(_who: &InteriorMultiLocation) -> Weight { - XcmGeneric::::descend_origin() - } - fn report_error(_query_response_info: &QueryResponseInfo) -> Weight { - XcmGeneric::::report_error() - } - - fn deposit_asset(assets: &MultiAssetFilter, _dest: &MultiLocation) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()) - } - fn deposit_reserve_asset( - assets: &MultiAssetFilter, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) - } - fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets, _maximal: &bool) -> Weight { - Weight::MAX - } - fn initiate_reserve_withdraw( - assets: &MultiAssetFilter, - _reserve: &MultiLocation, - _xcm: &Xcm<()>, - ) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::initiate_reserve_withdraw()) - } - fn initiate_teleport( - assets: &MultiAssetFilter, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()) - } - fn report_holding(_response_info: &QueryResponseInfo, _assets: &MultiAssetFilter) -> Weight { - XcmGeneric::::report_holding() - } - fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> Weight { - XcmGeneric::::buy_execution() - } - fn refund_surplus() -> Weight { - XcmGeneric::::refund_surplus() - } - fn set_error_handler(_xcm: &Xcm) -> Weight { - XcmGeneric::::set_error_handler() - } - fn set_appendix(_xcm: &Xcm) -> Weight { - XcmGeneric::::set_appendix() - } - fn clear_error() -> Weight { - XcmGeneric::::clear_error() - } - fn claim_asset(_assets: &MultiAssets, _ticket: &MultiLocation) -> Weight { - XcmGeneric::::claim_asset() - } - fn trap(_code: &u64) -> Weight { - XcmGeneric::::trap() - } - fn subscribe_version(_query_id: &QueryId, _max_response_weight: &Weight) -> Weight { - XcmGeneric::::subscribe_version() - } - fn unsubscribe_version() -> Weight { - XcmGeneric::::unsubscribe_version() - } - fn burn_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmGeneric::::burn_asset()) - } - fn expect_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmGeneric::::expect_asset()) - } - fn expect_origin(_origin: &Option) -> Weight { - XcmGeneric::::expect_origin() - } - fn expect_error(_error: &Option<(u32, XcmError)>) -> Weight { - XcmGeneric::::expect_error() - } - fn expect_transact_status(_transact_status: &MaybeErrorCode) -> Weight { - XcmGeneric::::expect_transact_status() - } - fn query_pallet(_module_name: &Vec, _response_info: &QueryResponseInfo) -> Weight { - XcmGeneric::::query_pallet() - } - fn expect_pallet( - _index: &u32, - _name: &Vec, - _module_name: &Vec, - _crate_major: &u32, - _min_crate_minor: &u32, - ) -> Weight { - XcmGeneric::::expect_pallet() - } - fn report_transact_status(_response_info: &QueryResponseInfo) -> Weight { - XcmGeneric::::report_transact_status() - } - fn clear_transact_status() -> Weight { - XcmGeneric::::clear_transact_status() - } - fn universal_origin(_: &Junction) -> Weight { - Weight::MAX - } - fn export_message(_: &NetworkId, _: &Junctions, _: &Xcm<()>) -> Weight { - Weight::MAX - } - fn lock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn unlock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn note_unlockable(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn request_unlock(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn set_fees_mode(_: &bool) -> Weight { - XcmGeneric::::set_fees_mode() - } - fn set_topic(_topic: &[u8; 32]) -> Weight { - XcmGeneric::::set_topic() - } - fn clear_topic() -> Weight { - XcmGeneric::::clear_topic() - } - fn alias_origin(_: &MultiLocation) -> Weight { - // XCM Executor does not currently support alias origin operations - Weight::MAX - } - fn unpaid_execution(_: &WeightLimit, _: &Option) -> Weight { - XcmGeneric::::unpaid_execution() - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs deleted file mode 100644 index e680c2d5c11..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_xcm_benchmarks::fungible` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-09-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-nbnwcyh-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: Compiled, CHAIN: Some("asset-hub-kusama-dev"), DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=pallet_xcm_benchmarks::fungible -// --chain=asset-hub-kusama-dev -// --header=./cumulus/file_header.txt -// --template=./cumulus/templates/xcm-bench-template.hbs -// --output=./cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/xcm/ - -#![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 `pallet_xcm_benchmarks::fungible`. -pub struct WeightInfo(PhantomData); -impl WeightInfo { - // Storage: `System::Account` (r:1 w:1) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - pub fn withdraw_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `101` - // Estimated: `3593` - // Minimum execution time: 25_602_000 picoseconds. - Weight::from_parts(26_312_000, 3593) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - // Storage: `System::Account` (r:2 w:2) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - pub fn transfer_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `101` - // Estimated: `6196` - // Minimum execution time: 51_173_000 picoseconds. - Weight::from_parts(52_221_000, 6196) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - // Storage: `System::Account` (r:2 w:2) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn transfer_reserve_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `246` - // Estimated: `6196` - // Minimum execution time: 74_651_000 picoseconds. - Weight::from_parts(76_500_000, 6196) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(4)) - } - // Storage: `Benchmark::Override` (r:0 w:0) - // Proof: `Benchmark::Override` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub fn reserve_asset_deposited() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 18_446_744_073_709_551_000 picoseconds. - Weight::from_parts(18_446_744_073_709_551_000, 0) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn initiate_reserve_withdraw() -> Weight { - // Proof Size summary in bytes: - // Measured: `145` - // Estimated: `3610` - // Minimum execution time: 458_666_000 picoseconds. - Weight::from_parts(470_470_000, 3610) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - pub fn receive_teleported_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_701_000 picoseconds. - Weight::from_parts(3_887_000, 0) - } - // Storage: `System::Account` (r:1 w:1) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - pub fn deposit_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 25_709_000 picoseconds. - Weight::from_parts(26_320_000, 3593) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - // Storage: `System::Account` (r:1 w:1) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn deposit_reserve_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `145` - // Estimated: `3610` - // Minimum execution time: 51_663_000 picoseconds. - Weight::from_parts(52_538_000, 3610) - .saturating_add(T::DbWeight::get().reads(7)) - .saturating_add(T::DbWeight::get().writes(3)) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn initiate_teleport() -> Weight { - // Proof Size summary in bytes: - // Measured: `145` - // Estimated: `3610` - // Minimum execution time: 31_972_000 picoseconds. - Weight::from_parts(32_834_000, 3610) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs deleted file mode 100644 index 9e8f3bfe75c..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ /dev/null @@ -1,328 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_xcm_benchmarks::generic` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("asset-hub-kusama-dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --template=./templates/xcm-bench-template.hbs -// --chain=asset-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_xcm_benchmarks::generic -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-kusama/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::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) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn report_holding() -> Weight { - // Proof Size summary in bytes: - // Measured: `109` - // Estimated: `3574` - // Minimum execution time: 432_196_000 picoseconds. - Weight::from_parts(438_017_000, 3574) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - pub fn buy_execution() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_223_000 picoseconds. - Weight::from_parts(4_412_000, 0) - } - // Storage: `PolkadotXcm::Queries` (r:1 w:0) - // Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub fn query_response() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `3568` - // Minimum execution time: 11_582_000 picoseconds. - Weight::from_parts(11_830_000, 3568) - .saturating_add(T::DbWeight::get().reads(1)) - } - pub fn transact() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 13_955_000 picoseconds. - Weight::from_parts(14_320_000, 0) - } - pub fn refund_surplus() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_423_000 picoseconds. - Weight::from_parts(4_709_000, 0) - } - pub fn set_error_handler() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_028_000 picoseconds. - Weight::from_parts(3_151_000, 0) - } - pub fn set_appendix() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_966_000 picoseconds. - Weight::from_parts(3_076_000, 0) - } - pub fn clear_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_971_000 picoseconds. - Weight::from_parts(3_119_000, 0) - } - pub fn descend_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_772_000 picoseconds. - Weight::from_parts(3_853_000, 0) - } - pub fn clear_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_940_000 picoseconds. - Weight::from_parts(3_050_000, 0) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn report_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `109` - // Estimated: `3574` - // Minimum execution time: 27_734_000 picoseconds. - Weight::from_parts(28_351_000, 3574) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - // Storage: `PolkadotXcm::AssetTraps` (r:1 w:1) - // Proof: `PolkadotXcm::AssetTraps` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub fn claim_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `160` - // Estimated: `3625` - // Minimum execution time: 16_456_000 picoseconds. - Weight::from_parts(16_846_000, 3625) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - pub fn trap() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_974_000 picoseconds. - Weight::from_parts(3_108_000, 0) - } - // Storage: `PolkadotXcm::VersionNotifyTargets` (r:1 w:1) - // Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn subscribe_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `109` - // Estimated: `3574` - // Minimum execution time: 29_823_000 picoseconds. - Weight::from_parts(30_776_000, 3574) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(3)) - } - // Storage: `PolkadotXcm::VersionNotifyTargets` (r:0 w:1) - // Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub fn unsubscribe_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_966_000 picoseconds. - Weight::from_parts(5_157_000, 0) - .saturating_add(T::DbWeight::get().writes(1)) - } - pub fn burn_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 141_875_000 picoseconds. - Weight::from_parts(144_925_000, 0) - } - pub fn expect_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 13_147_000 picoseconds. - Weight::from_parts(13_420_000, 0) - } - pub fn expect_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_050_000 picoseconds. - Weight::from_parts(3_161_000, 0) - } - pub fn expect_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_930_000 picoseconds. - Weight::from_parts(3_077_000, 0) - } - pub fn expect_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_188_000 picoseconds. - Weight::from_parts(3_299_000, 0) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn query_pallet() -> Weight { - // Proof Size summary in bytes: - // Measured: `109` - // Estimated: `3574` - // Minimum execution time: 31_678_000 picoseconds. - Weight::from_parts(32_462_000, 3574) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - pub fn expect_pallet() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 5_638_000 picoseconds. - Weight::from_parts(5_756_000, 0) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn report_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `109` - // Estimated: `3574` - // Minimum execution time: 27_556_000 picoseconds. - Weight::from_parts(28_240_000, 3574) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - pub fn clear_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_932_000 picoseconds. - Weight::from_parts(3_097_000, 0) - } - pub fn set_topic() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_860_000 picoseconds. - Weight::from_parts(2_957_000, 0) - } - pub fn clear_topic() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_886_000 picoseconds. - Weight::from_parts(3_015_000, 0) - } - pub fn set_fees_mode() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_874_000 picoseconds. - Weight::from_parts(3_060_000, 0) - } - pub fn unpaid_execution() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_029_000 picoseconds. - Weight::from_parts(3_158_000, 0) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/xcm_config.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/xcm_config.rs deleted file mode 100644 index 05262e07410..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/xcm_config.rs +++ /dev/null @@ -1,634 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use super::{ - AccountId, AllPalletsWithSystem, Assets, Authorship, Balance, Balances, ParachainInfo, - ParachainSystem, PolkadotXcm, PoolAssets, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, - TransactionByteFee, TrustBackedAssetsInstance, WeightToFee, XcmpQueue, -}; -use crate::{ForeignAssets, CENTS}; -use assets_common::{ - local_and_foreign_assets::MatchesLocalAndForeignAssetsMultiLocation, - matching::{FromSiblingParachain, IsForeignConcreteAsset}, -}; -use frame_support::{ - match_types, parameter_types, - traits::{ConstU32, Contains, Everything, Nothing, PalletInfoAccess}, -}; -use frame_system::EnsureRoot; -use pallet_xcm::XcmPassthrough; -use parachains_common::{ - impls::ToStakingPot, - xcm_config::{AssetFeeAsExistentialDepositMultiplier, ConcreteAssetFromSystem}, -}; -use polkadot_parachain_primitives::primitives::Sibling; -use polkadot_runtime_common::xcm_sender::ExponentialPrice; -use sp_runtime::traits::ConvertInto; -use xcm::latest::prelude::*; -use xcm_builder::{ - AccountId32Aliases, AllowExplicitUnpaidExecutionFrom, AllowKnownQueryResponses, - AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, CurrencyAdapter, - DenyReserveTransferToRelayChain, DenyThenTry, DescribeAllTerminal, DescribeFamily, - EnsureXcmOrigin, FungiblesAdapter, HashedDescription, IsConcrete, LocalMint, NoChecking, - ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, - SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, - SovereignSignedViaLocation, StartsWith, StartsWithExplicitGlobalConsensus, TakeWeightCredit, - TrailingSetTopicAsId, UsingComponents, WeightInfoBounds, WithComputedOrigin, WithUniqueTopic, -}; -use xcm_executor::{traits::WithOriginFilter, XcmExecutor}; - -#[cfg(feature = "runtime-benchmarks")] -use {cumulus_primitives_core::ParaId, sp_core::Get}; - -parameter_types! { - pub const KsmLocation: MultiLocation = MultiLocation::parent(); - pub const RelayNetwork: Option = Some(NetworkId::Kusama); - pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); - pub UniversalLocation: InteriorMultiLocation = - X2(GlobalConsensus(RelayNetwork::get().unwrap()), Parachain(ParachainInfo::parachain_id().into())); - pub UniversalLocationNetworkId: NetworkId = UniversalLocation::get().global_consensus().unwrap(); - pub TrustBackedAssetsPalletLocation: MultiLocation = - PalletInstance(::index() as u8).into(); - pub ForeignAssetsPalletLocation: MultiLocation = - PalletInstance(::index() as u8).into(); - pub PoolAssetsPalletLocation: MultiLocation = - PalletInstance(::index() as u8).into(); - pub CheckingAccount: AccountId = PolkadotXcm::check_account(); - pub const GovernanceLocation: MultiLocation = MultiLocation::parent(); - pub const FellowshipLocation: MultiLocation = MultiLocation::parent(); -} - -/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used -/// when determining ownership of accounts for asset transacting and when attempting to use XCM -/// `Transact` in order to determine the dispatch Origin. -pub type LocationToAccountId = ( - // The parent (Relay-chain) origin converts to the parent `AccountId`. - ParentIsPreset, - // Sibling parachain origins convert to AccountId via the `ParaId::into`. - SiblingParachainConvertsVia, - // Straight up local `AccountId32` origins just alias directly to `AccountId`. - AccountId32Aliases, - // Foreign locations alias into accounts according to a hash of their standard description. - HashedDescription>, -); - -/// Means for transacting the native currency on this chain. -pub type CurrencyTransactor = CurrencyAdapter< - // Use this currency: - Balances, - // Use this currency when it is a fungible asset matching the given location or name: - IsConcrete, - // Convert an XCM MultiLocation into a local account id: - LocationToAccountId, - // Our chain's account ID type (we can't get away without mentioning it explicitly): - AccountId, - // We don't track any teleports of `Balances`. - (), ->; - -/// `AssetId`/`Balance` converter for `PoolAssets`. -pub type TrustBackedAssetsConvertedConcreteId = - assets_common::TrustBackedAssetsConvertedConcreteId; - -/// Means for transacting assets besides the native currency on this chain. -pub type FungiblesTransactor = FungiblesAdapter< - // Use this fungibles implementation: - Assets, - // Use this currency when it is a fungible asset matching the given location or name: - TrustBackedAssetsConvertedConcreteId, - // Convert an XCM MultiLocation into a local account id: - LocationToAccountId, - // Our chain's account ID type (we can't get away without mentioning it explicitly): - AccountId, - // We only want to allow teleports of known assets. We use non-zero issuance as an indication - // that this asset is known. - LocalMint>, - // The account to use for tracking teleports. - CheckingAccount, ->; - -/// `AssetId/Balance` converter for `TrustBackedAssets` -pub type ForeignAssetsConvertedConcreteId = assets_common::ForeignAssetsConvertedConcreteId< - ( - // Ignore `TrustBackedAssets` explicitly - StartsWith, - // Ignore assets that start explicitly with our `GlobalConsensus(NetworkId)`, means: - // - foreign assets from our consensus should be: `MultiLocation {parents: 1, - // X*(Parachain(xyz), ..)}` - // - foreign assets outside our consensus with the same `GlobalConsensus(NetworkId)` won't - // be accepted here - StartsWithExplicitGlobalConsensus, - ), - Balance, ->; - -/// Means for transacting foreign assets from different global consensus. -pub type ForeignFungiblesTransactor = FungiblesAdapter< - // Use this fungibles implementation: - ForeignAssets, - // Use this currency when it is a fungible asset matching the given location or name: - ForeignAssetsConvertedConcreteId, - // Convert an XCM MultiLocation into a local account id: - LocationToAccountId, - // Our chain's account ID type (we can't get away without mentioning it explicitly): - AccountId, - // We dont need to check teleports here. - NoChecking, - // The account to use for tracking teleports. - CheckingAccount, ->; - -/// `AssetId`/`Balance` converter for `PoolAssets`. -pub type PoolAssetsConvertedConcreteId = - assets_common::PoolAssetsConvertedConcreteId; - -/// Means for transacting asset conversion pool assets on this chain. -pub type PoolFungiblesTransactor = FungiblesAdapter< - // Use this fungibles implementation: - PoolAssets, - // Use this currency when it is a fungible asset matching the given location or name: - PoolAssetsConvertedConcreteId, - // Convert an XCM MultiLocation into a local account id: - LocationToAccountId, - // Our chain's account ID type (we can't get away without mentioning it explicitly): - AccountId, - // We only want to allow teleports of known assets. We use non-zero issuance as an indication - // that this asset is known. - LocalMint>, - // The account to use for tracking teleports. - CheckingAccount, ->; - -/// Means for transacting assets on this chain. -pub type AssetTransactors = - (CurrencyTransactor, FungiblesTransactor, ForeignFungiblesTransactor, PoolFungiblesTransactor); - -/// Simple `MultiLocation` matcher for Local and Foreign asset `MultiLocation`. -pub struct LocalAndForeignAssetsMultiLocationMatcher; -impl MatchesLocalAndForeignAssetsMultiLocation for LocalAndForeignAssetsMultiLocationMatcher { - fn is_local(location: &MultiLocation) -> bool { - use assets_common::fungible_conversion::MatchesMultiLocation; - TrustBackedAssetsConvertedConcreteId::contains(location) - } - fn is_foreign(location: &MultiLocation) -> bool { - use assets_common::fungible_conversion::MatchesMultiLocation; - ForeignAssetsConvertedConcreteId::contains(location) - } -} -impl Contains for LocalAndForeignAssetsMultiLocationMatcher { - fn contains(location: &MultiLocation) -> bool { - Self::is_local(location) || Self::is_foreign(location) - } -} - -/// 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 -/// biases the kind of local `Origin` it will become. -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, - // Native converter for Relay-chain (Parent) location; will convert to a `Relay` origin when - // recognised. - RelayChainAsNative, - // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when - // recognised. - SiblingParachainAsNative, - // Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a - // transaction from the Root origin. - ParentAsSuperuser, - // Native signed account converter; this just converts an `AccountId32` origin into a normal - // `RuntimeOrigin::Signed` origin of the same 32-byte value. - SignedAccountId32AsNative, - // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. - XcmPassthrough, -); - -parameter_types! { - pub const MaxInstructions: u32 = 100; - pub const MaxAssetsIntoHolding: u32 = 64; - pub XcmAssetFeesReceiver: Option = Authorship::author(); -} - -match_types! { - pub type ParentOrParentsPlurality: impl Contains = { - MultiLocation { parents: 1, interior: Here } | - MultiLocation { parents: 1, interior: X1(Plurality { .. }) } - }; - pub type ParentOrSiblings: impl Contains = { - MultiLocation { parents: 1, interior: Here } | - MultiLocation { parents: 1, interior: X1(_) } - }; -} - -/// A call filter for the XCM Transact instruction. This is a temporary measure until we properly -/// account for proof size weights. -/// -/// Calls that are allowed through this filter must: -/// 1. Have a fixed weight; -/// 2. Cannot lead to another call being made; -/// 3. Have a defined proof size weight, e.g. no unbounded vecs in call parameters. -pub struct SafeCallFilter; -impl Contains for SafeCallFilter { - fn contains(call: &RuntimeCall) -> bool { - #[cfg(feature = "runtime-benchmarks")] - { - if matches!(call, RuntimeCall::System(frame_system::Call::remark_with_event { .. })) { - return true - } - } - - matches!( - call, - RuntimeCall::PolkadotXcm(pallet_xcm::Call::force_xcm_version { .. }) | - RuntimeCall::System( - frame_system::Call::set_heap_pages { .. } | - frame_system::Call::set_code { .. } | - frame_system::Call::set_code_without_checks { .. } | - frame_system::Call::kill_prefix { .. }, - ) | RuntimeCall::ParachainSystem(..) | - RuntimeCall::Timestamp(..) | - RuntimeCall::Balances(..) | - RuntimeCall::CollatorSelection( - pallet_collator_selection::Call::set_desired_candidates { .. } | - pallet_collator_selection::Call::set_candidacy_bond { .. } | - pallet_collator_selection::Call::register_as_candidate { .. } | - pallet_collator_selection::Call::leave_intent { .. } | - pallet_collator_selection::Call::set_invulnerables { .. } | - pallet_collator_selection::Call::add_invulnerable { .. } | - pallet_collator_selection::Call::remove_invulnerable { .. }, - ) | RuntimeCall::Session(pallet_session::Call::purge_keys { .. }) | - RuntimeCall::XcmpQueue(..) | - RuntimeCall::MessageQueue(..) | - RuntimeCall::Assets( - pallet_assets::Call::create { .. } | - pallet_assets::Call::force_create { .. } | - pallet_assets::Call::start_destroy { .. } | - pallet_assets::Call::destroy_accounts { .. } | - pallet_assets::Call::destroy_approvals { .. } | - pallet_assets::Call::finish_destroy { .. } | - pallet_assets::Call::block { .. } | - pallet_assets::Call::mint { .. } | - pallet_assets::Call::burn { .. } | - pallet_assets::Call::transfer { .. } | - pallet_assets::Call::transfer_keep_alive { .. } | - pallet_assets::Call::force_transfer { .. } | - pallet_assets::Call::freeze { .. } | - pallet_assets::Call::thaw { .. } | - pallet_assets::Call::freeze_asset { .. } | - pallet_assets::Call::thaw_asset { .. } | - pallet_assets::Call::transfer_ownership { .. } | - pallet_assets::Call::set_team { .. } | - pallet_assets::Call::set_metadata { .. } | - pallet_assets::Call::clear_metadata { .. } | - pallet_assets::Call::force_set_metadata { .. } | - pallet_assets::Call::force_clear_metadata { .. } | - pallet_assets::Call::force_asset_status { .. } | - pallet_assets::Call::approve_transfer { .. } | - pallet_assets::Call::cancel_approval { .. } | - pallet_assets::Call::force_cancel_approval { .. } | - pallet_assets::Call::transfer_approved { .. } | - pallet_assets::Call::touch { .. } | - pallet_assets::Call::touch_other { .. } | - pallet_assets::Call::refund { .. } | - pallet_assets::Call::refund_other { .. }, - ) | RuntimeCall::ForeignAssets( - pallet_assets::Call::create { .. } | - pallet_assets::Call::force_create { .. } | - pallet_assets::Call::start_destroy { .. } | - pallet_assets::Call::destroy_accounts { .. } | - pallet_assets::Call::destroy_approvals { .. } | - pallet_assets::Call::finish_destroy { .. } | - pallet_assets::Call::block { .. } | - pallet_assets::Call::mint { .. } | - pallet_assets::Call::burn { .. } | - pallet_assets::Call::transfer { .. } | - pallet_assets::Call::transfer_keep_alive { .. } | - pallet_assets::Call::force_transfer { .. } | - pallet_assets::Call::freeze { .. } | - pallet_assets::Call::thaw { .. } | - pallet_assets::Call::freeze_asset { .. } | - pallet_assets::Call::thaw_asset { .. } | - pallet_assets::Call::transfer_ownership { .. } | - pallet_assets::Call::set_team { .. } | - pallet_assets::Call::set_metadata { .. } | - pallet_assets::Call::clear_metadata { .. } | - pallet_assets::Call::force_set_metadata { .. } | - pallet_assets::Call::force_clear_metadata { .. } | - pallet_assets::Call::force_asset_status { .. } | - pallet_assets::Call::approve_transfer { .. } | - pallet_assets::Call::cancel_approval { .. } | - pallet_assets::Call::force_cancel_approval { .. } | - pallet_assets::Call::transfer_approved { .. } | - pallet_assets::Call::touch { .. } | - pallet_assets::Call::touch_other { .. } | - pallet_assets::Call::refund { .. } | - pallet_assets::Call::refund_other { .. }, - ) | RuntimeCall::PoolAssets( - pallet_assets::Call::force_create { .. } | - pallet_assets::Call::block { .. } | - pallet_assets::Call::burn { .. } | - pallet_assets::Call::transfer { .. } | - pallet_assets::Call::transfer_keep_alive { .. } | - pallet_assets::Call::force_transfer { .. } | - pallet_assets::Call::freeze { .. } | - pallet_assets::Call::thaw { .. } | - pallet_assets::Call::freeze_asset { .. } | - pallet_assets::Call::thaw_asset { .. } | - pallet_assets::Call::transfer_ownership { .. } | - pallet_assets::Call::set_team { .. } | - pallet_assets::Call::set_metadata { .. } | - pallet_assets::Call::clear_metadata { .. } | - pallet_assets::Call::force_set_metadata { .. } | - pallet_assets::Call::force_clear_metadata { .. } | - pallet_assets::Call::force_asset_status { .. } | - pallet_assets::Call::approve_transfer { .. } | - pallet_assets::Call::cancel_approval { .. } | - pallet_assets::Call::force_cancel_approval { .. } | - pallet_assets::Call::transfer_approved { .. } | - pallet_assets::Call::touch { .. } | - pallet_assets::Call::touch_other { .. } | - pallet_assets::Call::refund { .. } | - pallet_assets::Call::refund_other { .. }, - ) | RuntimeCall::AssetConversion( - pallet_asset_conversion::Call::create_pool { .. } | - pallet_asset_conversion::Call::add_liquidity { .. } | - pallet_asset_conversion::Call::remove_liquidity { .. } | - pallet_asset_conversion::Call::swap_tokens_for_exact_tokens { .. } | - pallet_asset_conversion::Call::swap_exact_tokens_for_tokens { .. }, - ) | RuntimeCall::NftFractionalization( - pallet_nft_fractionalization::Call::fractionalize { .. } | - pallet_nft_fractionalization::Call::unify { .. }, - ) | RuntimeCall::Nfts( - pallet_nfts::Call::create { .. } | - pallet_nfts::Call::force_create { .. } | - pallet_nfts::Call::destroy { .. } | - pallet_nfts::Call::mint { .. } | - pallet_nfts::Call::force_mint { .. } | - pallet_nfts::Call::burn { .. } | - pallet_nfts::Call::transfer { .. } | - pallet_nfts::Call::lock_item_transfer { .. } | - pallet_nfts::Call::unlock_item_transfer { .. } | - pallet_nfts::Call::lock_collection { .. } | - pallet_nfts::Call::transfer_ownership { .. } | - pallet_nfts::Call::set_team { .. } | - pallet_nfts::Call::force_collection_owner { .. } | - pallet_nfts::Call::force_collection_config { .. } | - pallet_nfts::Call::approve_transfer { .. } | - pallet_nfts::Call::cancel_approval { .. } | - pallet_nfts::Call::clear_all_transfer_approvals { .. } | - pallet_nfts::Call::lock_item_properties { .. } | - pallet_nfts::Call::set_attribute { .. } | - pallet_nfts::Call::force_set_attribute { .. } | - pallet_nfts::Call::clear_attribute { .. } | - pallet_nfts::Call::approve_item_attributes { .. } | - pallet_nfts::Call::cancel_item_attributes_approval { .. } | - pallet_nfts::Call::set_metadata { .. } | - pallet_nfts::Call::clear_metadata { .. } | - pallet_nfts::Call::set_collection_metadata { .. } | - pallet_nfts::Call::clear_collection_metadata { .. } | - pallet_nfts::Call::set_accept_ownership { .. } | - pallet_nfts::Call::set_collection_max_supply { .. } | - pallet_nfts::Call::update_mint_settings { .. } | - pallet_nfts::Call::set_price { .. } | - pallet_nfts::Call::buy_item { .. } | - pallet_nfts::Call::pay_tips { .. } | - pallet_nfts::Call::create_swap { .. } | - pallet_nfts::Call::cancel_swap { .. } | - pallet_nfts::Call::claim_swap { .. }, - ) | RuntimeCall::Uniques( - pallet_uniques::Call::create { .. } | - pallet_uniques::Call::force_create { .. } | - pallet_uniques::Call::destroy { .. } | - pallet_uniques::Call::mint { .. } | - pallet_uniques::Call::burn { .. } | - pallet_uniques::Call::transfer { .. } | - pallet_uniques::Call::freeze { .. } | - pallet_uniques::Call::thaw { .. } | - pallet_uniques::Call::freeze_collection { .. } | - pallet_uniques::Call::thaw_collection { .. } | - pallet_uniques::Call::transfer_ownership { .. } | - pallet_uniques::Call::set_team { .. } | - pallet_uniques::Call::approve_transfer { .. } | - pallet_uniques::Call::cancel_approval { .. } | - pallet_uniques::Call::force_item_status { .. } | - pallet_uniques::Call::set_attribute { .. } | - pallet_uniques::Call::clear_attribute { .. } | - pallet_uniques::Call::set_metadata { .. } | - pallet_uniques::Call::clear_metadata { .. } | - pallet_uniques::Call::set_collection_metadata { .. } | - pallet_uniques::Call::clear_collection_metadata { .. } | - pallet_uniques::Call::set_accept_ownership { .. } | - pallet_uniques::Call::set_collection_max_supply { .. } | - pallet_uniques::Call::set_price { .. } | - pallet_uniques::Call::buy_item { .. } - ) - ) - } -} - -pub type Barrier = TrailingSetTopicAsId< - DenyThenTry< - DenyReserveTransferToRelayChain, - ( - TakeWeightCredit, - // Expected responses are OK. - AllowKnownQueryResponses, - // Allow XCMs with some computed origins to pass through. - WithComputedOrigin< - ( - // If the message is one that immediately attempts to pay for execution, then - // allow it. - AllowTopLevelPaidExecutionFrom, - // Parent and its pluralities (i.e. governance bodies) get free execution. - AllowExplicitUnpaidExecutionFrom, - // Subscriptions for version tracking are OK. - AllowSubscriptionsFrom, - ), - UniversalLocation, - ConstU32<8>, - >, - ), - >, ->; - -pub type AssetFeeAsExistentialDepositMultiplierFeeCharger = AssetFeeAsExistentialDepositMultiplier< - Runtime, - WeightToFee, - pallet_assets::BalanceToAssetBalance, - TrustBackedAssetsInstance, ->; - -/// Cases where a remote origin is accepted as trusted Teleporter for a given asset: -/// -/// - KSM with the parent Relay Chain and sibling system parachains; and -/// - Sibling parachains' assets from where they originate (as `ForeignCreators`). -pub type TrustedTeleporters = ( - ConcreteAssetFromSystem, - IsForeignConcreteAsset>>, -); - -pub struct XcmConfig; -impl xcm_executor::Config for XcmConfig { - type RuntimeCall = RuntimeCall; - type XcmSender = XcmRouter; - type AssetTransactor = AssetTransactors; - type OriginConverter = XcmOriginToTransactDispatchOrigin; - // Asset Hub Kusama does not recognize a reserve location for any asset. This does not prevent - // Asset Hub acting _as_ a reserve location for KSM and assets created under `pallet-assets`. - // For KSM, users must use teleport where allowed (e.g. with the Relay Chain). - type IsReserve = (); - type IsTeleporter = TrustedTeleporters; - type UniversalLocation = UniversalLocation; - type Barrier = Barrier; - type Weigher = WeightInfoBounds< - crate::weights::xcm::AssetHubKusamaXcmWeight, - RuntimeCall, - MaxInstructions, - >; - type Trader = ( - UsingComponents>, - cumulus_primitives_utility::TakeFirstAssetTrader< - AccountId, - AssetFeeAsExistentialDepositMultiplierFeeCharger, - TrustBackedAssetsConvertedConcreteId, - Assets, - cumulus_primitives_utility::XcmFeesTo32ByteAccount< - FungiblesTransactor, - AccountId, - XcmAssetFeesReceiver, - >, - >, - ); - type ResponseHandler = PolkadotXcm; - type AssetTrap = PolkadotXcm; - type AssetClaims = PolkadotXcm; - type SubscriptionService = PolkadotXcm; - type PalletInstancesInfo = AllPalletsWithSystem; - type MaxAssetsIntoHolding = MaxAssetsIntoHolding; - type AssetLocker = (); - type AssetExchanger = (); - type FeeManager = (); - type MessageExporter = (); - type UniversalAliases = Nothing; - type CallDispatcher = WithOriginFilter; - type SafeCallFilter = SafeCallFilter; - type Aliasers = Nothing; -} - -/// Converts a local signed origin into an XCM multilocation. -/// Forms the basis for local origins sending/executing XCMs. -pub type LocalOriginToLocation = SignedToAccountId32; - -parameter_types! { - /// The asset ID for the asset that we use to pay for message delivery fees. - pub FeeAssetId: AssetId = Concrete(KsmLocation::get()); - /// The base fee for the message delivery fees. - pub const BaseDeliveryFee: u128 = CENTS.saturating_mul(3); -} - -pub type PriceForParentDelivery = - ExponentialPrice; - -/// The means for routing XCM messages which are not for local execution into the right message -/// queues. -pub type XcmRouter = WithUniqueTopic<( - // Two routers - use UMP to communicate with the relay chain: - cumulus_primitives_utility::ParentAsUmp, - // ..and XCMP to communicate with the sibling chains. - XcmpQueue, -)>; - -impl pallet_xcm::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - // We want to disallow users sending (arbitrary) XCMs from this chain. - type SendXcmOrigin = EnsureXcmOrigin; - type XcmRouter = XcmRouter; - // We support local origins dispatching XCM executions in principle... - type ExecuteXcmOrigin = EnsureXcmOrigin; - // ... but disallow generic XCM execution. As a result only teleports and reserve transfers are - // allowed. - type XcmExecuteFilter = Nothing; - type XcmExecutor = XcmExecutor; - type XcmTeleportFilter = Everything; - type XcmReserveTransferFilter = Everything; - type Weigher = WeightInfoBounds< - crate::weights::xcm::AssetHubKusamaXcmWeight, - RuntimeCall, - MaxInstructions, - >; - type UniversalLocation = UniversalLocation; - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - 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>; - type WeightInfo = crate::weights::pallet_xcm::WeightInfo; - type AdminOrigin = EnsureRoot; - type MaxRemoteLockConsumers = ConstU32<0>; - type RemoteLockConsumerIdentifier = (); -} - -impl cumulus_pallet_xcm::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type XcmExecutor = XcmExecutor; -} - -pub type ForeignCreatorsSovereignAccountOf = ( - SiblingParachainConvertsVia, - AccountId32Aliases, - ParentIsPreset, -); - -/// Simple conversion of `u32` into an `AssetId` for use in benchmarking. -pub struct XcmBenchmarkHelper; -#[cfg(feature = "runtime-benchmarks")] -impl pallet_assets::BenchmarkHelper for XcmBenchmarkHelper { - fn create_asset_id_parameter(id: u32) -> MultiLocation { - MultiLocation { parents: 1, interior: X1(Parachain(id)) } - } -} - -#[cfg(feature = "runtime-benchmarks")] -pub struct BenchmarkMultiLocationConverter { - _phantom: sp_std::marker::PhantomData, -} - -#[cfg(feature = "runtime-benchmarks")] -impl - pallet_asset_conversion::BenchmarkHelper> - for BenchmarkMultiLocationConverter -where - SelfParaId: Get, -{ - fn asset_id(asset_id: u32) -> MultiLocation { - MultiLocation { - parents: 1, - interior: X3( - Parachain(SelfParaId::get().into()), - PalletInstance(::index() as u8), - GeneralIndex(asset_id.into()), - ), - } - } - fn multiasset_id(asset_id: u32) -> sp_std::boxed::Box { - sp_std::boxed::Box::new(Self::asset_id(asset_id)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-kusama/tests/tests.rs b/cumulus/parachains/runtimes/assets/asset-hub-kusama/tests/tests.rs deleted file mode 100644 index cdd4290770f..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-kusama/tests/tests.rs +++ /dev/null @@ -1,658 +0,0 @@ -// This file is part of Cumulus. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Tests for the Statemine (Kusama Assets Hub) chain. - -use asset_hub_kusama_runtime::xcm_config::{ - AssetFeeAsExistentialDepositMultiplierFeeCharger, KsmLocation, LocationToAccountId, - TrustBackedAssetsPalletLocation, -}; -pub use asset_hub_kusama_runtime::{ - xcm_config::{CheckingAccount, ForeignCreatorsSovereignAccountOf, XcmConfig}, - AllPalletsWithoutSystem, AssetDeposit, Assets, Balances, ExistentialDeposit, ForeignAssets, - ForeignAssetsInstance, MetadataDepositBase, MetadataDepositPerByte, ParachainSystem, Runtime, - RuntimeCall, RuntimeEvent, SessionKeys, System, TrustBackedAssetsInstance, XcmpQueue, -}; -use asset_test_utils::{CollatorSessionKeys, ExtBuilder}; -use codec::{Decode, Encode}; -use cumulus_primitives_utility::ChargeWeightInFungibles; -use frame_support::{ - assert_noop, assert_ok, - traits::fungibles::InspectEnumerable, - weights::{Weight, WeightToFee as WeightToFeeT}, -}; -use parachains_common::{ - kusama::fee::WeightToFee, AccountId, AssetIdForTrustBackedAssets, AuraId, Balance, -}; -use sp_runtime::traits::MaybeEquivalence; -use xcm::latest::prelude::*; -use xcm_executor::traits::{Identity, JustTry, WeightTrader}; - -const ALICE: [u8; 32] = [1u8; 32]; -const SOME_ASSET_ADMIN: [u8; 32] = [5u8; 32]; - -type AssetIdForTrustBackedAssetsConvert = - assets_common::AssetIdForTrustBackedAssetsConvert; - -type RuntimeHelper = asset_test_utils::RuntimeHelper; - -fn collator_session_keys() -> CollatorSessionKeys { - CollatorSessionKeys::new( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::sr25519::Public::from_raw(ALICE)) }, - ) -} - -#[test] -fn test_asset_xcm_trader() { - ExtBuilder::::default() - .with_collators(vec![AccountId::from(ALICE)]) - .with_session_keys(vec![( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::sr25519::Public::from_raw(ALICE)) }, - )]) - .build() - .execute_with(|| { - // We need root origin to create a sufficient asset - let minimum_asset_balance = 3333333_u128; - let local_asset_id = 1; - assert_ok!(Assets::force_create( - RuntimeHelper::root_origin(), - local_asset_id.into(), - AccountId::from(ALICE).into(), - true, - minimum_asset_balance - )); - - // We first mint enough asset for the account to exist for assets - assert_ok!(Assets::mint( - RuntimeHelper::origin_of(AccountId::from(ALICE)), - local_asset_id.into(), - AccountId::from(ALICE).into(), - minimum_asset_balance - )); - - // get asset id as multilocation - let asset_multilocation = - AssetIdForTrustBackedAssetsConvert::convert_back(&local_asset_id).unwrap(); - - // Set Alice as block author, who will receive fees - RuntimeHelper::run_to_block(2, AccountId::from(ALICE)); - - // We are going to buy 4e9 weight - let bought = Weight::from_parts(4_000_000_000u64, 0); - - // Lets calculate amount needed - let asset_amount_needed = - AssetFeeAsExistentialDepositMultiplierFeeCharger::charge_weight_in_fungibles( - local_asset_id, - bought, - ) - .expect("failed to compute"); - - // Lets pay with: asset_amount_needed + asset_amount_extra - let asset_amount_extra = 100_u128; - let asset: MultiAsset = - (asset_multilocation, asset_amount_needed + asset_amount_extra).into(); - - let mut trader = ::Trader::new(); - let ctx = XcmContext { origin: None, message_id: XcmHash::default(), topic: None }; - - // Lets buy_weight and make sure buy_weight does not return an error - let unused_assets = trader.buy_weight(bought, asset.into(), &ctx).expect("Expected Ok"); - // Check whether a correct amount of unused assets is returned - assert_ok!( - unused_assets.ensure_contains(&(asset_multilocation, asset_amount_extra).into()) - ); - - // Drop trader - drop(trader); - - // Make sure author(Alice) has received the amount - assert_eq!( - Assets::balance(local_asset_id, AccountId::from(ALICE)), - minimum_asset_balance + asset_amount_needed - ); - - // We also need to ensure the total supply increased - assert_eq!( - Assets::total_supply(local_asset_id), - minimum_asset_balance + asset_amount_needed - ); - }); -} - -#[test] -fn test_asset_xcm_trader_with_refund() { - ExtBuilder::::default() - .with_collators(vec![AccountId::from(ALICE)]) - .with_session_keys(vec![( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::sr25519::Public::from_raw(ALICE)) }, - )]) - .build() - .execute_with(|| { - // We need root origin to create a sufficient asset - // We set existential deposit to be identical to the one for Balances first - assert_ok!(Assets::force_create( - RuntimeHelper::root_origin(), - 1.into(), - AccountId::from(ALICE).into(), - true, - ExistentialDeposit::get() - )); - - // We first mint enough asset for the account to exist for assets - assert_ok!(Assets::mint( - RuntimeHelper::origin_of(AccountId::from(ALICE)), - 1.into(), - AccountId::from(ALICE).into(), - ExistentialDeposit::get() - )); - - let mut trader = ::Trader::new(); - let ctx = XcmContext { origin: None, message_id: XcmHash::default(), topic: None }; - - // Set Alice as block author, who will receive fees - RuntimeHelper::run_to_block(2, AccountId::from(ALICE)); - - // We are going to buy 4e9 weight - let bought = Weight::from_parts(4_000_000_000u64, 0); - - let asset_multilocation = AssetIdForTrustBackedAssetsConvert::convert_back(&1).unwrap(); - - // lets calculate amount needed - let amount_bought = WeightToFee::weight_to_fee(&bought); - - let asset: MultiAsset = (asset_multilocation, amount_bought).into(); - - // Make sure buy_weight does not return an error - assert_ok!(trader.buy_weight(bought, asset.clone().into(), &ctx)); - - // Make sure again buy_weight does return an error - // This assert relies on the fact, that we use `TakeFirstAssetTrader` in `WeightTrader` - // tuple chain, which cannot be called twice - assert_noop!(trader.buy_weight(bought, asset.into(), &ctx), XcmError::TooExpensive); - - // We actually use half of the weight - let weight_used = bought / 2; - - // Make sure refurnd works. - let amount_refunded = WeightToFee::weight_to_fee(&(bought - weight_used)); - - assert_eq!( - trader.refund_weight(bought - weight_used, &ctx), - Some((asset_multilocation, amount_refunded).into()) - ); - - // Drop trader - drop(trader); - - // We only should have paid for half of the bought weight - let fees_paid = WeightToFee::weight_to_fee(&weight_used); - - assert_eq!( - Assets::balance(1, AccountId::from(ALICE)), - ExistentialDeposit::get() + fees_paid - ); - - // We also need to ensure the total supply increased - assert_eq!(Assets::total_supply(1), ExistentialDeposit::get() + fees_paid); - }); -} - -#[test] -fn test_asset_xcm_trader_refund_not_possible_since_amount_less_than_ed() { - ExtBuilder::::default() - .with_collators(vec![AccountId::from(ALICE)]) - .with_session_keys(vec![( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::sr25519::Public::from_raw(ALICE)) }, - )]) - .build() - .execute_with(|| { - // We need root origin to create a sufficient asset - // We set existential deposit to be identical to the one for Balances first - assert_ok!(Assets::force_create( - RuntimeHelper::root_origin(), - 1.into(), - AccountId::from(ALICE).into(), - true, - ExistentialDeposit::get() - )); - - let mut trader = ::Trader::new(); - let ctx = XcmContext { origin: None, message_id: XcmHash::default(), topic: None }; - - // Set Alice as block author, who will receive fees - RuntimeHelper::run_to_block(2, AccountId::from(ALICE)); - - // We are going to buy small amount - let bought = Weight::from_parts(500_000_000u64, 0); - - let asset_multilocation = AssetIdForTrustBackedAssetsConvert::convert_back(&1).unwrap(); - - let amount_bought = WeightToFee::weight_to_fee(&bought); - - assert!( - amount_bought < ExistentialDeposit::get(), - "we are testing what happens when the amount does not exceed ED" - ); - - let asset: MultiAsset = (asset_multilocation, amount_bought).into(); - - // Buy weight should return an error - assert_noop!(trader.buy_weight(bought, asset.into(), &ctx), XcmError::TooExpensive); - - // not credited since the ED is higher than this value - assert_eq!(Assets::balance(1, AccountId::from(ALICE)), 0); - - // We also need to ensure the total supply did not increase - assert_eq!(Assets::total_supply(1), 0); - }); -} - -#[test] -fn test_that_buying_ed_refund_does_not_refund() { - ExtBuilder::::default() - .with_collators(vec![AccountId::from(ALICE)]) - .with_session_keys(vec![( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::sr25519::Public::from_raw(ALICE)) }, - )]) - .build() - .execute_with(|| { - // We need root origin to create a sufficient asset - // We set existential deposit to be identical to the one for Balances first - assert_ok!(Assets::force_create( - RuntimeHelper::root_origin(), - 1.into(), - AccountId::from(ALICE).into(), - true, - ExistentialDeposit::get() - )); - - let mut trader = ::Trader::new(); - let ctx = XcmContext { origin: None, message_id: XcmHash::default(), topic: None }; - - // Set Alice as block author, who will receive fees - RuntimeHelper::run_to_block(2, AccountId::from(ALICE)); - - // We are gonna buy ED - let bought = Weight::from_parts(ExistentialDeposit::get().try_into().unwrap(), 0); - - let asset_multilocation = AssetIdForTrustBackedAssetsConvert::convert_back(&1).unwrap(); - - let amount_bought = WeightToFee::weight_to_fee(&bought); - - assert!( - amount_bought < ExistentialDeposit::get(), - "we are testing what happens when the amount does not exceed ED" - ); - - // We know we will have to buy at least ED, so lets make sure first it will - // fail with a payment of less than ED - let asset: MultiAsset = (asset_multilocation, amount_bought).into(); - assert_noop!(trader.buy_weight(bought, asset.into(), &ctx), XcmError::TooExpensive); - - // Now lets buy ED at least - let asset: MultiAsset = (asset_multilocation, ExistentialDeposit::get()).into(); - - // Buy weight should work - assert_ok!(trader.buy_weight(bought, asset.into(), &ctx)); - - // Should return None. We have a specific check making sure we dont go below ED for - // drop payment - assert_eq!(trader.refund_weight(bought, &ctx), None); - - // Drop trader - drop(trader); - - // Make sure author(Alice) has received the amount - assert_eq!(Assets::balance(1, AccountId::from(ALICE)), ExistentialDeposit::get()); - - // We also need to ensure the total supply increased - assert_eq!(Assets::total_supply(1), ExistentialDeposit::get()); - }); -} - -#[test] -fn test_asset_xcm_trader_not_possible_for_non_sufficient_assets() { - ExtBuilder::::default() - .with_collators(vec![AccountId::from(ALICE)]) - .with_session_keys(vec![( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::sr25519::Public::from_raw(ALICE)) }, - )]) - .build() - .execute_with(|| { - // Create a non-sufficient asset with specific existential deposit - let minimum_asset_balance = 1_000_000_u128; - assert_ok!(Assets::force_create( - RuntimeHelper::root_origin(), - 1.into(), - AccountId::from(ALICE).into(), - false, - minimum_asset_balance - )); - - // We first mint enough asset for the account to exist for assets - assert_ok!(Assets::mint( - RuntimeHelper::origin_of(AccountId::from(ALICE)), - 1.into(), - AccountId::from(ALICE).into(), - minimum_asset_balance - )); - - let mut trader = ::Trader::new(); - let ctx = XcmContext { origin: None, message_id: XcmHash::default(), topic: None }; - - // Set Alice as block author, who will receive fees - RuntimeHelper::run_to_block(2, AccountId::from(ALICE)); - - // We are going to buy 4e9 weight - let bought = Weight::from_parts(4_000_000_000u64, 0); - - // lets calculate amount needed - let asset_amount_needed = WeightToFee::weight_to_fee(&bought); - - let asset_multilocation = AssetIdForTrustBackedAssetsConvert::convert_back(&1).unwrap(); - - let asset: MultiAsset = (asset_multilocation, asset_amount_needed).into(); - - // Make sure again buy_weight does return an error - assert_noop!(trader.buy_weight(bought, asset.into(), &ctx), XcmError::TooExpensive); - - // Drop trader - drop(trader); - - // Make sure author(Alice) has NOT received the amount - assert_eq!(Assets::balance(1, AccountId::from(ALICE)), minimum_asset_balance); - - // We also need to ensure the total supply NOT increased - assert_eq!(Assets::total_supply(1), minimum_asset_balance); - }); -} - -#[test] -fn test_assets_balances_api_works() { - use assets_common::runtime_api::runtime_decl_for_fungibles_api::FungiblesApi; - - ExtBuilder::::default() - .with_collators(vec![AccountId::from(ALICE)]) - .with_session_keys(vec![( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::sr25519::Public::from_raw(ALICE)) }, - )]) - .build() - .execute_with(|| { - let local_asset_id = 1; - let foreign_asset_id_multilocation = - MultiLocation { parents: 1, interior: X2(Parachain(1234), GeneralIndex(12345)) }; - - // check before - assert_eq!(Assets::balance(local_asset_id, AccountId::from(ALICE)), 0); - assert_eq!( - ForeignAssets::balance(foreign_asset_id_multilocation, AccountId::from(ALICE)), - 0 - ); - assert_eq!(Balances::free_balance(AccountId::from(ALICE)), 0); - assert!(Runtime::query_account_balances(AccountId::from(ALICE)) - .unwrap() - .try_as::() - .unwrap() - .is_none()); - - // Drip some balance - use frame_support::traits::fungible::Mutate; - let some_currency = ExistentialDeposit::get(); - Balances::mint_into(&AccountId::from(ALICE), some_currency).unwrap(); - - // We need root origin to create a sufficient asset - let minimum_asset_balance = 3333333_u128; - assert_ok!(Assets::force_create( - RuntimeHelper::root_origin(), - local_asset_id.into(), - AccountId::from(ALICE).into(), - true, - minimum_asset_balance - )); - - // We first mint enough asset for the account to exist for assets - assert_ok!(Assets::mint( - RuntimeHelper::origin_of(AccountId::from(ALICE)), - local_asset_id.into(), - AccountId::from(ALICE).into(), - minimum_asset_balance - )); - - // create foreign asset - let foreign_asset_minimum_asset_balance = 3333333_u128; - assert_ok!(ForeignAssets::force_create( - RuntimeHelper::root_origin(), - foreign_asset_id_multilocation, - AccountId::from(SOME_ASSET_ADMIN).into(), - false, - foreign_asset_minimum_asset_balance - )); - - // We first mint enough asset for the account to exist for assets - assert_ok!(ForeignAssets::mint( - RuntimeHelper::origin_of(AccountId::from(SOME_ASSET_ADMIN)), - foreign_asset_id_multilocation, - AccountId::from(ALICE).into(), - 6 * foreign_asset_minimum_asset_balance - )); - - // check after - assert_eq!( - Assets::balance(local_asset_id, AccountId::from(ALICE)), - minimum_asset_balance - ); - assert_eq!( - ForeignAssets::balance(foreign_asset_id_multilocation, AccountId::from(ALICE)), - 6 * minimum_asset_balance - ); - assert_eq!(Balances::free_balance(AccountId::from(ALICE)), some_currency); - - let result: MultiAssets = Runtime::query_account_balances(AccountId::from(ALICE)) - .unwrap() - .try_into() - .unwrap(); - assert_eq!(result.len(), 3); - - // check currency - assert!(result.inner().iter().any(|asset| asset.eq( - &assets_common::fungible_conversion::convert_balance::( - some_currency - ) - .unwrap() - ))); - // check trusted asset - assert!(result.inner().iter().any(|asset| asset.eq(&( - AssetIdForTrustBackedAssetsConvert::convert_back(&local_asset_id).unwrap(), - minimum_asset_balance - ) - .into()))); - // check foreign asset - assert!(result.inner().iter().any(|asset| asset.eq(&( - Identity::convert_back(&foreign_asset_id_multilocation).unwrap(), - 6 * foreign_asset_minimum_asset_balance - ) - .into()))); - }); -} - -asset_test_utils::include_teleports_for_native_asset_works!( - Runtime, - AllPalletsWithoutSystem, - XcmConfig, - CheckingAccount, - WeightToFee, - ParachainSystem, - collator_session_keys(), - ExistentialDeposit::get(), - Box::new(|runtime_event_encoded: Vec| { - match RuntimeEvent::decode(&mut &runtime_event_encoded[..]) { - Ok(RuntimeEvent::PolkadotXcm(event)) => Some(event), - _ => None, - } - }), - 1000 -); - -asset_test_utils::include_teleports_for_foreign_assets_works!( - Runtime, - AllPalletsWithoutSystem, - XcmConfig, - CheckingAccount, - WeightToFee, - ParachainSystem, - ForeignCreatorsSovereignAccountOf, - ForeignAssetsInstance, - collator_session_keys(), - ExistentialDeposit::get(), - Box::new(|runtime_event_encoded: Vec| { - match RuntimeEvent::decode(&mut &runtime_event_encoded[..]) { - Ok(RuntimeEvent::PolkadotXcm(event)) => Some(event), - _ => None, - } - }), - Box::new(|runtime_event_encoded: Vec| { - match RuntimeEvent::decode(&mut &runtime_event_encoded[..]) { - Ok(RuntimeEvent::XcmpQueue(event)) => Some(event), - _ => None, - } - }) -); - -asset_test_utils::include_asset_transactor_transfer_with_local_consensus_currency_works!( - Runtime, - XcmConfig, - collator_session_keys(), - ExistentialDeposit::get(), - Box::new(|| { - assert!(Assets::asset_ids().collect::>().is_empty()); - assert!(ForeignAssets::asset_ids().collect::>().is_empty()); - }), - Box::new(|| { - assert!(Assets::asset_ids().collect::>().is_empty()); - assert!(ForeignAssets::asset_ids().collect::>().is_empty()); - }) -); - -asset_test_utils::include_asset_transactor_transfer_with_pallet_assets_instance_works!( - asset_transactor_transfer_with_trust_backed_assets_works, - Runtime, - XcmConfig, - TrustBackedAssetsInstance, - AssetIdForTrustBackedAssets, - AssetIdForTrustBackedAssetsConvert, - collator_session_keys(), - ExistentialDeposit::get(), - 12345, - Box::new(|| { - assert!(ForeignAssets::asset_ids().collect::>().is_empty()); - }), - Box::new(|| { - assert!(ForeignAssets::asset_ids().collect::>().is_empty()); - }) -); - -asset_test_utils::include_asset_transactor_transfer_with_pallet_assets_instance_works!( - asset_transactor_transfer_with_foreign_assets_works, - Runtime, - XcmConfig, - ForeignAssetsInstance, - MultiLocation, - JustTry, - collator_session_keys(), - ExistentialDeposit::get(), - MultiLocation { parents: 1, interior: X2(Parachain(1313), GeneralIndex(12345)) }, - Box::new(|| { - assert!(Assets::asset_ids().collect::>().is_empty()); - }), - Box::new(|| { - assert!(Assets::asset_ids().collect::>().is_empty()); - }) -); - -asset_test_utils::include_create_and_manage_foreign_assets_for_local_consensus_parachain_assets_works!( - Runtime, - XcmConfig, - WeightToFee, - ForeignCreatorsSovereignAccountOf, - ForeignAssetsInstance, - MultiLocation, - JustTry, - collator_session_keys(), - ExistentialDeposit::get(), - AssetDeposit::get(), - MetadataDepositBase::get(), - MetadataDepositPerByte::get(), - Box::new(|pallet_asset_call| RuntimeCall::ForeignAssets(pallet_asset_call).encode()), - Box::new(|runtime_event_encoded: Vec| { - match RuntimeEvent::decode(&mut &runtime_event_encoded[..]) { - Ok(RuntimeEvent::ForeignAssets(pallet_asset_event)) => Some(pallet_asset_event), - _ => None, - } - }), - Box::new(|| { - assert!(Assets::asset_ids().collect::>().is_empty()); - assert!(ForeignAssets::asset_ids().collect::>().is_empty()); - }), - Box::new(|| { - assert!(Assets::asset_ids().collect::>().is_empty()); - assert_eq!(ForeignAssets::asset_ids().collect::>().len(), 1); - }) -); - -#[test] -fn reserve_transfer_native_asset_to_non_teleport_para_works() { - asset_test_utils::test_cases::reserve_transfer_native_asset_to_non_teleport_para_works::< - Runtime, - AllPalletsWithoutSystem, - XcmConfig, - ParachainSystem, - XcmpQueue, - LocationToAccountId, - >( - collator_session_keys(), - ExistentialDeposit::get(), - AccountId::from(ALICE), - Box::new(|runtime_event_encoded: Vec| { - match RuntimeEvent::decode(&mut &runtime_event_encoded[..]) { - Ok(RuntimeEvent::PolkadotXcm(event)) => Some(event), - _ => None, - } - }), - Box::new(|runtime_event_encoded: Vec| { - match RuntimeEvent::decode(&mut &runtime_event_encoded[..]) { - Ok(RuntimeEvent::XcmpQueue(event)) => Some(event), - _ => None, - } - }), - WeightLimit::Unlimited, - ); -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/Cargo.toml b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/Cargo.toml deleted file mode 100644 index b5eff6b63af..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/Cargo.toml +++ /dev/null @@ -1,215 +0,0 @@ -[package] -name = "asset-hub-polkadot-runtime" -version = "0.9.420" -authors.workspace = true -edition.workspace = true -description = "Asset Hub Polkadot parachain runtime" -license = "Apache-2.0" - -[dependencies] -codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } -hex-literal = { version = "0.4.1", optional = true } -log = { version = "0.4.20", default-features = false } -scale-info = { version = "2.10.0", default-features = false, features = ["derive"] } -smallvec = "1.11.0" - -# Substrate -frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true} -frame-executive = { path = "../../../../../substrate/frame/executive", default-features = false} -frame-support = { path = "../../../../../substrate/frame/support", default-features = false} -frame-system = { path = "../../../../../substrate/frame/system", default-features = false} -frame-system-benchmarking = { path = "../../../../../substrate/frame/system/benchmarking", default-features = false, optional = true} -frame-system-rpc-runtime-api = { path = "../../../../../substrate/frame/system/rpc/runtime-api", default-features = false} -frame-try-runtime = { path = "../../../../../substrate/frame/try-runtime", default-features = false, optional = true} -pallet-asset-tx-payment = { path = "../../../../../substrate/frame/transaction-payment/asset-tx-payment", default-features = false } -pallet-assets = { path = "../../../../../substrate/frame/assets", default-features = false} -pallet-aura = { path = "../../../../../substrate/frame/aura", default-features = false} -pallet-authorship = { path = "../../../../../substrate/frame/authorship", default-features = false} -pallet-balances = { path = "../../../../../substrate/frame/balances", default-features = false} -pallet-multisig = { path = "../../../../../substrate/frame/multisig", default-features = false} -pallet-nfts = { path = "../../../../../substrate/frame/nfts", default-features = false} -pallet-nfts-runtime-api = { path = "../../../../../substrate/frame/nfts/runtime-api", default-features = false} -pallet-proxy = { path = "../../../../../substrate/frame/proxy", default-features = false} -pallet-session = { path = "../../../../../substrate/frame/session", default-features = false} -pallet-timestamp = { path = "../../../../../substrate/frame/timestamp", default-features = false} -pallet-transaction-payment = { path = "../../../../../substrate/frame/transaction-payment", default-features = false} -pallet-transaction-payment-rpc-runtime-api = { path = "../../../../../substrate/frame/transaction-payment/rpc/runtime-api", default-features = false} -pallet-uniques = { path = "../../../../../substrate/frame/uniques", default-features = false} -pallet-utility = { path = "../../../../../substrate/frame/utility", default-features = false} -sp-api = { path = "../../../../../substrate/primitives/api", default-features = false} -sp-block-builder = { path = "../../../../../substrate/primitives/block-builder", default-features = false} -sp-consensus-aura = { path = "../../../../../substrate/primitives/consensus/aura", default-features = false} -sp-core = { path = "../../../../../substrate/primitives/core", default-features = false} -sp-genesis-builder = { path = "../../../../../substrate/primitives/genesis-builder", default-features = false } -sp-inherents = { path = "../../../../../substrate/primitives/inherents", default-features = false} -sp-offchain = { path = "../../../../../substrate/primitives/offchain", default-features = false} -sp-runtime = { path = "../../../../../substrate/primitives/runtime", default-features = false} -sp-session = { path = "../../../../../substrate/primitives/session", default-features = false} -sp-std = { path = "../../../../../substrate/primitives/std", default-features = false} -sp-storage = { path = "../../../../../substrate/primitives/storage", default-features = false} -sp-transaction-pool = { path = "../../../../../substrate/primitives/transaction-pool", default-features = false} -sp-version = { path = "../../../../../substrate/primitives/version", default-features = false} -sp-weights = { path = "../../../../../substrate/primitives/weights", default-features = false} - -# Polkadot -pallet-xcm = { path = "../../../../../polkadot/xcm/pallet-xcm", default-features = false} -pallet-xcm-benchmarks = { path = "../../../../../polkadot/xcm/pallet-xcm-benchmarks", default-features = false, optional = true } -polkadot-core-primitives = { path = "../../../../../polkadot/core-primitives", default-features = false} -polkadot-parachain-primitives = { path = "../../../../../polkadot/parachain", default-features = false} -polkadot-runtime-common = { path = "../../../../../polkadot/runtime/common", default-features = false} -xcm = { package = "staging-xcm", path = "../../../../../polkadot/xcm", default-features = false} -xcm-builder = { package = "staging-xcm-builder", path = "../../../../../polkadot/xcm/xcm-builder", default-features = false} -xcm-executor = { package = "staging-xcm-executor", path = "../../../../../polkadot/xcm/xcm-executor", default-features = false} - -# Cumulus -cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } -pallet-message-queue = { path = "../../../../../substrate/frame/message-queue", default-features = false } -cumulus-pallet-dmp-queue = { path = "../../../../pallets/dmp-queue", default-features = false } -cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = ["parameterized-consensus-hook",] } -cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false} -cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } -cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } -cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } -cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } -pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } -parachain-info = { package = "staging-parachain-info", path = "../../../pallets/parachain-info", default-features = false } -parachains-common = { path = "../../../common", default-features = false } -assets-common = { path = "../common", default-features = false } - -[dev-dependencies] -hex-literal = "0.4.1" -asset-test-utils = { path = "../test-utils" } - -[build-dependencies] -substrate-wasm-builder = { path = "../../../../../substrate/utils/wasm-builder", optional = true } - -[features] -default = [ "std" ] -runtime-benchmarks = [ - "assets-common/runtime-benchmarks", - "cumulus-pallet-dmp-queue/runtime-benchmarks", - "cumulus-pallet-parachain-system/runtime-benchmarks", - "cumulus-pallet-session-benchmarking/runtime-benchmarks", - "cumulus-pallet-xcmp-queue/runtime-benchmarks", - "cumulus-primitives-core/runtime-benchmarks", - "cumulus-primitives-utility/runtime-benchmarks", - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system-benchmarking/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "hex-literal", - "pallet-asset-tx-payment/runtime-benchmarks", - "pallet-assets/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "pallet-collator-selection/runtime-benchmarks", - "pallet-message-queue/runtime-benchmarks", - "pallet-multisig/runtime-benchmarks", - "pallet-nfts/runtime-benchmarks", - "pallet-proxy/runtime-benchmarks", - "pallet-timestamp/runtime-benchmarks", - "pallet-uniques/runtime-benchmarks", - "pallet-utility/runtime-benchmarks", - "pallet-xcm-benchmarks/runtime-benchmarks", - "pallet-xcm/runtime-benchmarks", - "parachains-common/runtime-benchmarks", - "polkadot-parachain-primitives/runtime-benchmarks", - "polkadot-runtime-common/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "xcm-builder/runtime-benchmarks", - "xcm-executor/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-support/try-runtime", - "frame-system/try-runtime", - "frame-try-runtime/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-message-queue/try-runtime", - "pallet-multisig/try-runtime", - "pallet-nfts/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", - "polkadot-runtime-common/try-runtime", - "sp-runtime/try-runtime", -] -std = [ - "assets-common/std", - "codec/std", - "cumulus-pallet-aura-ext/std", - "cumulus-pallet-dmp-queue/std", - "cumulus-pallet-parachain-system/std", - "cumulus-pallet-session-benchmarking/std", - "cumulus-pallet-xcm/std", - "cumulus-pallet-xcmp-queue/std", - "cumulus-primitives-core/std", - "cumulus-primitives-utility/std", - "frame-benchmarking?/std", - "frame-executive/std", - "frame-support/std", - "frame-system-benchmarking?/std", - "frame-system-rpc-runtime-api/std", - "frame-system/std", - "frame-try-runtime?/std", - "log/std", - "pallet-asset-tx-payment/std", - "pallet-assets/std", - "pallet-aura/std", - "pallet-authorship/std", - "pallet-balances/std", - "pallet-collator-selection/std", - "pallet-message-queue/std", - "pallet-multisig/std", - "pallet-nfts-runtime-api/std", - "pallet-nfts/std", - "pallet-proxy/std", - "pallet-session/std", - "pallet-timestamp/std", - "pallet-transaction-payment-rpc-runtime-api/std", - "pallet-transaction-payment/std", - "pallet-uniques/std", - "pallet-utility/std", - "pallet-xcm-benchmarks?/std", - "pallet-xcm/std", - "parachain-info/std", - "parachains-common/std", - "polkadot-core-primitives/std", - "polkadot-parachain-primitives/std", - "polkadot-runtime-common/std", - "scale-info/std", - "sp-api/std", - "sp-block-builder/std", - "sp-consensus-aura/std", - "sp-core/std", - "sp-genesis-builder/std", - "sp-inherents/std", - "sp-offchain/std", - "sp-runtime/std", - "sp-session/std", - "sp-std/std", - "sp-storage/std", - "sp-transaction-pool/std", - "sp-version/std", - "sp-weights/std", - "substrate-wasm-builder", - "xcm-builder/std", - "xcm-executor/std", - "xcm/std", -] - -experimental = [ "pallet-aura/experimental" ] diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/build.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/build.rs deleted file mode 100644 index 60f8a125129..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/build.rs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#[cfg(feature = "std")] -fn main() { - substrate_wasm_builder::WasmBuilder::new() - .with_current_project() - .export_heap_base() - .import_memory() - .build() -} - -#[cfg(not(feature = "std"))] -fn main() {} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/lib.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/lib.rs deleted file mode 100644 index 78721b194d0..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/lib.rs +++ /dev/null @@ -1,1383 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! # Asset Hub Polkadot Runtime -//! -//! Asset Hub Polkadot is a parachain that provides an interface to create, manage, and use assets. -//! Assets may be fungible or non-fungible. -//! -//! ## Renaming -//! -//! This chain was originally known as "Statemint". You may see references to Statemint, Statemine, -//! and Westmint throughout the codebase. These are synonymous with "Asset Hub Polkadot, Kusama, and -//! Westend", respectively. -//! -//! ## Assets -//! -//! - Fungibles: Configuration of `pallet-assets`. -//! - Non-Fungibles (NFTs): Configuration of `pallet-uniques`. -//! -//! ## Other Functionality -//! -//! ### Native Balances -//! -//! Asset Hub Polkadot uses its parent DOT token as its native asset. -//! -//! ### Governance -//! -//! As a system parachain, Asset Hub defers its governance (namely, its `Root` origin), to its -//! Relay Chain parent, Polkadot. -//! -//! ### Collator Selection -//! -//! Asset Hub uses `pallet-collator-selection`, a simple first-come-first-served registration -//! system where collators can reserve a small bond to join the block producer set. There is no -//! slashing. -//! -//! ### XCM -//! -//! Because Asset Hub is fully under the control of the Relay Chain, it is meant to be a -//! `TrustedTeleporter`. It can also serve as a reserve location to other parachains for DOT as well -//! as other local assets. - -#![cfg_attr(not(feature = "std"), no_std)] -#![recursion_limit = "256"] - -// Make the WASM binary available. -#[cfg(feature = "std")] -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -mod weights; -pub mod xcm_config; - -use assets_common::{ - foreign_creators::ForeignCreators, matching::FromSiblingParachain, MultiLocationForAssetId, -}; -use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; -use cumulus_primitives_core::{AggregateMessageOrigin, ParaId}; -use polkadot_runtime_common::xcm_sender::NoPriceForMessageDelivery; -use sp_api::impl_runtime_apis; -use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; -use sp_runtime::{ - create_runtime_str, generic, impl_opaque_keys, - traits::{AccountIdLookup, BlakeTwo256, Block as BlockT, ConvertInto, Verify}, - transaction_validity::{TransactionSource, TransactionValidity}, - ApplyExtrinsicResult, Perbill, -}; - -use sp_std::prelude::*; -#[cfg(feature = "std")] -use sp_version::NativeVersion; -use sp_version::RuntimeVersion; - -use codec::{Decode, Encode, MaxEncodedLen}; -use frame_support::{ - construct_runtime, - dispatch::DispatchClass, - genesis_builder_helper::{build_config, create_default_config}, - parameter_types, - traits::{ - AsEnsureOriginWithArg, ConstBool, ConstU32, ConstU64, ConstU8, EitherOfDiverse, - InstanceFilter, TransformOrigin, - }, - weights::{ConstantMultiplier, Weight}, - PalletId, -}; -use frame_system::{ - limits::{BlockLength, BlockWeights}, - EnsureRoot, EnsureSigned, -}; -use pallet_nfts::PalletFeatures; -pub use parachains_common as common; -use parachains_common::{ - impls::{AssetsToBlockAuthor, DealWithFees}, - message_queue::*, - polkadot::{consensus::*, currency::*, fee::WeightToFee}, - AccountId, AssetHubPolkadotAuraId as AuraId, AssetIdForTrustBackedAssets, Balance, BlockNumber, - Hash, Header, Nonce, Signature, AVERAGE_ON_INITIALIZE_RATIO, DAYS, HOURS, MAXIMUM_BLOCK_WEIGHT, - NORMAL_DISPATCH_RATIO, SLOT_DURATION, -}; -use sp_runtime::RuntimeDebug; -use xcm_config::{ - DotLocation, FellowshipLocation, ForeignAssetsConvertedConcreteId, GovernanceLocation, - TrustBackedAssetsConvertedConcreteId, XcmOriginToTransactDispatchOrigin, -}; - -#[cfg(any(feature = "std", test))] -pub use sp_runtime::BuildStorage; - -// Polkadot imports -use pallet_xcm::{EnsureXcm, IsVoiceOfBody}; -use polkadot_runtime_common::{BlockHashCount, SlowAdjustingFeeUpdate}; -use xcm::latest::BodyId; - -use crate::xcm_config::ForeignCreatorsSovereignAccountOf; -use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight}; - -impl_opaque_keys! { - pub struct SessionKeys { - pub aura: Aura, - } -} - -#[sp_version::runtime_version] -pub const VERSION: RuntimeVersion = RuntimeVersion { - // Note: "statemint" is the legacy name for this chain. It has been renamed to - // "asset-hub-polkadot". Many wallets/tools depend on the `spec_name`, so it remains "statemint" - // for the time being. Wallets/tools should update to treat "asset-hub-polkadot" equally. - spec_name: create_runtime_str!("statemint"), - impl_name: create_runtime_str!("statemint"), - authoring_version: 1, - spec_version: 1_004_000, - impl_version: 0, - apis: RUNTIME_API_VERSIONS, - transaction_version: 13, - state_version: 0, -}; - -/// The version information used to identify this runtime when compiled natively. -#[cfg(feature = "std")] -pub fn native_version() -> NativeVersion { - NativeVersion { runtime_version: VERSION, can_author_with: Default::default() } -} - -parameter_types! { - pub const Version: RuntimeVersion = VERSION; - pub RuntimeBlockLength: BlockLength = - BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); - pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() - .base_block(BlockExecutionWeight::get()) - .for_class(DispatchClass::all(), |weights| { - weights.base_extrinsic = ExtrinsicBaseWeight::get(); - }) - .for_class(DispatchClass::Normal, |weights| { - weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); - }) - .for_class(DispatchClass::Operational, |weights| { - weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT); - // Operational transactions have some extra reserved space, so that they - // are included even if block reached `MAXIMUM_BLOCK_WEIGHT`. - weights.reserved = Some( - MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT - ); - }) - .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO) - .build_or_panic(); - pub const SS58Prefix: u8 = 0; -} - -// Configure FRAME pallets to include in runtime. -impl frame_system::Config for Runtime { - type BaseCallFilter = frame_support::traits::Everything; - type BlockWeights = RuntimeBlockWeights; - type BlockLength = RuntimeBlockLength; - type AccountId = AccountId; - type RuntimeCall = RuntimeCall; - type Lookup = AccountIdLookup; - type Nonce = Nonce; - type Hash = Hash; - type Hashing = BlakeTwo256; - type Block = Block; - type RuntimeEvent = RuntimeEvent; - type RuntimeOrigin = RuntimeOrigin; - type BlockHashCount = BlockHashCount; - type DbWeight = RocksDbWeight; - type Version = Version; - type PalletInfo = PalletInfo; - type OnNewAccount = (); - type OnKilledAccount = (); - type AccountData = pallet_balances::AccountData; - type SystemWeightInfo = weights::frame_system::WeightInfo; - type SS58Prefix = SS58Prefix; - type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode; - type MaxConsumers = frame_support::traits::ConstU32<16>; -} - -impl pallet_timestamp::Config for Runtime { - /// A timestamp: milliseconds since the unix epoch. - type Moment = u64; - type OnTimestampSet = Aura; - type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; - type WeightInfo = weights::pallet_timestamp::WeightInfo; -} - -impl pallet_authorship::Config for Runtime { - type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type EventHandler = (CollatorSelection,); -} - -parameter_types! { - pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; -} - -impl pallet_balances::Config for Runtime { - type MaxLocks = ConstU32<50>; - /// The type for recording an account's balance. - type Balance = Balance; - /// The ubiquitous event type. - type RuntimeEvent = RuntimeEvent; - type DustRemoval = (); - type ExistentialDeposit = ExistentialDeposit; - type AccountStore = System; - type WeightInfo = weights::pallet_balances::WeightInfo; - type MaxReserves = ConstU32<50>; - type ReserveIdentifier = [u8; 8]; - type RuntimeHoldReason = RuntimeHoldReason; - type RuntimeFreezeReason = RuntimeFreezeReason; - type FreezeIdentifier = (); - type MaxHolds = ConstU32<0>; - type MaxFreezes = ConstU32<0>; -} - -parameter_types! { - /// Relay Chain `TransactionByteFee` / 10 - pub const TransactionByteFee: Balance = MILLICENTS; -} - -impl pallet_transaction_payment::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type OnChargeTransaction = - pallet_transaction_payment::CurrencyAdapter>; - type WeightToFee = WeightToFee; - type LengthToFee = ConstantMultiplier; - type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; - type OperationalFeeMultiplier = ConstU8<5>; -} - -parameter_types! { - pub const AssetDeposit: Balance = 10 * UNITS; // 10 UNITS deposit to create fungible asset class - pub const AssetAccountDeposit: Balance = deposit(1, 16); - pub const ApprovalDeposit: Balance = EXISTENTIAL_DEPOSIT; - pub const AssetsStringLimit: u32 = 50; - /// Key = 32 bytes, Value = 36 bytes (32+1+1+1+1) - // https://github.com/paritytech/substrate/blob/069917b/frame/assets/src/lib.rs#L257L271 - pub const MetadataDepositBase: Balance = deposit(1, 68); - pub const MetadataDepositPerByte: Balance = deposit(0, 1); -} - -/// We allow root to execute privileged asset operations. -pub type AssetsForceOrigin = EnsureRoot; - -// Called "Trust Backed" assets because these are generally registered by some account, and users of -// the asset assume it has some claimed backing. The pallet is called `Assets` in -// `construct_runtime` to avoid breaking changes on storage reads. -pub type TrustBackedAssetsInstance = pallet_assets::Instance1; -type TrustBackedAssetsCall = pallet_assets::Call; -impl pallet_assets::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Balance = Balance; - type AssetId = AssetIdForTrustBackedAssets; - type AssetIdParameter = codec::Compact; - type Currency = Balances; - type CreateOrigin = AsEnsureOriginWithArg>; - type ForceOrigin = AssetsForceOrigin; - type AssetDeposit = AssetDeposit; - type MetadataDepositBase = MetadataDepositBase; - type MetadataDepositPerByte = MetadataDepositPerByte; - type ApprovalDeposit = ApprovalDeposit; - type StringLimit = AssetsStringLimit; - type Freezer = (); - type Extra = (); - type WeightInfo = weights::pallet_assets_local::WeightInfo; - type CallbackHandle = (); - type AssetAccountDeposit = AssetAccountDeposit; - type RemoveItemsLimit = frame_support::traits::ConstU32<1000>; - #[cfg(feature = "runtime-benchmarks")] - type BenchmarkHelper = (); -} - -parameter_types! { - // we just reuse the same deposits - pub const ForeignAssetsAssetDeposit: Balance = AssetDeposit::get(); - pub const ForeignAssetsAssetAccountDeposit: Balance = AssetAccountDeposit::get(); - pub const ForeignAssetsApprovalDeposit: Balance = ApprovalDeposit::get(); - pub const ForeignAssetsAssetsStringLimit: u32 = AssetsStringLimit::get(); - pub const ForeignAssetsMetadataDepositBase: Balance = MetadataDepositBase::get(); - pub const ForeignAssetsMetadataDepositPerByte: Balance = MetadataDepositPerByte::get(); -} - -/// Assets managed by some foreign location. Note: we do not declare a `ForeignAssetsCall` type, as -/// this type is used in proxy definitions. We assume that a foreign location would not want to set -/// an individual, local account as a proxy for the issuance of their assets. This issuance should -/// be managed by the foreign location's governance. -pub type ForeignAssetsInstance = pallet_assets::Instance2; -impl pallet_assets::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Balance = Balance; - type AssetId = MultiLocationForAssetId; - type AssetIdParameter = MultiLocationForAssetId; - type Currency = Balances; - type CreateOrigin = ForeignCreators< - (FromSiblingParachain>,), - ForeignCreatorsSovereignAccountOf, - AccountId, - >; - type ForceOrigin = AssetsForceOrigin; - type AssetDeposit = ForeignAssetsAssetDeposit; - type MetadataDepositBase = ForeignAssetsMetadataDepositBase; - type MetadataDepositPerByte = ForeignAssetsMetadataDepositPerByte; - type ApprovalDeposit = ForeignAssetsApprovalDeposit; - type StringLimit = ForeignAssetsAssetsStringLimit; - type Freezer = (); - type Extra = (); - type WeightInfo = weights::pallet_assets_foreign::WeightInfo; - type CallbackHandle = (); - type AssetAccountDeposit = ForeignAssetsAssetAccountDeposit; - type RemoveItemsLimit = frame_support::traits::ConstU32<1000>; - #[cfg(feature = "runtime-benchmarks")] - type BenchmarkHelper = xcm_config::XcmBenchmarkHelper; -} - -parameter_types! { - // One storage item; key size is 32; value is size 4+4+16+32 bytes = 56 bytes. - pub const DepositBase: Balance = deposit(1, 88); - // Additional storage item size of 32 bytes. - pub const DepositFactor: Balance = deposit(0, 32); - pub const MaxSignatories: u32 = 100; -} - -impl pallet_multisig::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type Currency = Balances; - type DepositBase = DepositBase; - type DepositFactor = DepositFactor; - type MaxSignatories = MaxSignatories; - type WeightInfo = weights::pallet_multisig::WeightInfo; -} - -impl pallet_utility::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type PalletsOrigin = OriginCaller; - type WeightInfo = weights::pallet_utility::WeightInfo; -} - -parameter_types! { - // One storage item; key size 32, value size 8; . - pub const ProxyDepositBase: Balance = deposit(1, 40); - // Additional storage item size of 33 bytes. - pub const ProxyDepositFactor: Balance = deposit(0, 33); - pub const MaxProxies: u16 = 32; - // One storage item; key size 32, value size 16 - pub const AnnouncementDepositBase: Balance = deposit(1, 48); - pub const AnnouncementDepositFactor: Balance = deposit(0, 66); - pub const MaxPending: u16 = 32; -} - -/// The type used to represent the kinds of proxying allowed. -#[derive( - Copy, - Clone, - Eq, - PartialEq, - Ord, - PartialOrd, - Encode, - Decode, - RuntimeDebug, - MaxEncodedLen, - scale_info::TypeInfo, -)] -pub enum ProxyType { - /// Fully permissioned proxy. Can execute any call on behalf of _proxied_. - Any, - /// Can execute any call that does not transfer funds or assets. - NonTransfer, - /// Proxy with the ability to reject time-delay proxy announcements. - CancelProxy, - /// Assets proxy. Can execute any call from `assets`, **including asset transfers**. - Assets, - /// Owner proxy. Can execute calls related to asset ownership. - AssetOwner, - /// Asset manager. Can execute calls related to asset management. - AssetManager, - /// Collator selection proxy. Can execute calls related to collator selection mechanism. - Collator, -} -impl Default for ProxyType { - fn default() -> Self { - Self::Any - } -} - -impl InstanceFilter for ProxyType { - fn filter(&self, c: &RuntimeCall) -> bool { - match self { - ProxyType::Any => true, - ProxyType::NonTransfer => !matches!( - c, - RuntimeCall::Balances { .. } | - RuntimeCall::Assets { .. } | - RuntimeCall::Nfts { .. } | - RuntimeCall::Uniques { .. } - ), - ProxyType::CancelProxy => matches!( - c, - RuntimeCall::Proxy(pallet_proxy::Call::reject_announcement { .. }) | - RuntimeCall::Utility { .. } | - RuntimeCall::Multisig { .. } - ), - ProxyType::Assets => { - matches!( - c, - RuntimeCall::Assets { .. } | - RuntimeCall::Utility { .. } | - RuntimeCall::Multisig { .. } | - RuntimeCall::Nfts { .. } | RuntimeCall::Uniques { .. } - ) - }, - ProxyType::AssetOwner => matches!( - c, - RuntimeCall::Assets(TrustBackedAssetsCall::create { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::start_destroy { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::destroy_accounts { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::destroy_approvals { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::finish_destroy { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::transfer_ownership { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::set_team { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::set_metadata { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::clear_metadata { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::set_min_balance { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::create { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::destroy { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::redeposit { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::transfer_ownership { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::set_team { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::set_collection_max_supply { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::lock_collection { .. }) | - 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, - RuntimeCall::Assets(TrustBackedAssetsCall::mint { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::burn { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::freeze { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::block { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::thaw { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::freeze_asset { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::thaw_asset { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::touch_other { .. }) | - RuntimeCall::Assets(TrustBackedAssetsCall::refund_other { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::force_mint { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::update_mint_settings { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::mint_pre_signed { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::set_attributes_pre_signed { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::lock_item_transfer { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::unlock_item_transfer { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::lock_item_properties { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::set_metadata { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::clear_metadata { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::set_collection_metadata { .. }) | - RuntimeCall::Nfts(pallet_nfts::Call::clear_collection_metadata { .. }) | - 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, - RuntimeCall::CollatorSelection { .. } | - RuntimeCall::Utility { .. } | - RuntimeCall::Multisig { .. } - ), - } - } - - fn is_superset(&self, o: &Self) -> bool { - match (self, o) { - (x, y) if x == y => true, - (ProxyType::Any, _) => true, - (_, ProxyType::Any) => false, - (ProxyType::Assets, ProxyType::AssetOwner) => true, - (ProxyType::Assets, ProxyType::AssetManager) => true, - (ProxyType::NonTransfer, ProxyType::Collator) => true, - _ => false, - } - } -} - -impl pallet_proxy::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type Currency = Balances; - type ProxyType = ProxyType; - type ProxyDepositBase = ProxyDepositBase; - type ProxyDepositFactor = ProxyDepositFactor; - type MaxProxies = MaxProxies; - type WeightInfo = weights::pallet_proxy::WeightInfo; - type MaxPending = MaxPending; - type CallHasher = BlakeTwo256; - type AnnouncementDepositBase = AnnouncementDepositBase; - type AnnouncementDepositFactor = AnnouncementDepositFactor; -} - -parameter_types! { - 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 { - type WeightInfo = weights::cumulus_pallet_parachain_system::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type OnSystemEvent = (); - type SelfParaId = parachain_info::Pallet; - type DmpQueue = frame_support::traits::EnqueueWithOrigin; - type ReservedDmpWeight = ReservedDmpWeight; - type OutboundXcmpMessageSource = XcmpQueue; - type XcmpMessageHandler = XcmpQueue; - type ReservedXcmpWeight = ReservedXcmpWeight; - type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; - type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< - Runtime, - RELAY_CHAIN_SLOT_DURATION_MILLIS, - BLOCK_PROCESSING_VELOCITY, - UNINCLUDED_SEGMENT_CAPACITY, - >; -} - -parameter_types! { - pub MessageQueueServiceWeight: Weight = Perbill::from_percent(35) * RuntimeBlockWeights::get().max_block; -} - -impl pallet_message_queue::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = weights::pallet_message_queue::WeightInfo; - #[cfg(feature = "runtime-benchmarks")] - type MessageProcessor = pallet_message_queue::mock_helpers::NoopMessageProcessor< - cumulus_primitives_core::AggregateMessageOrigin, - >; - #[cfg(not(feature = "runtime-benchmarks"))] - type MessageProcessor = xcm_builder::ProcessXcmMessage< - AggregateMessageOrigin, - xcm_executor::XcmExecutor, - RuntimeCall, - >; - type Size = u32; - // The XCMP queue pallet is only ever able to handle the `Sibling(ParaId)` origin: - type QueueChangeHandler = NarrowOriginToSibling; - type QueuePausedQuery = NarrowOriginToSibling; - type HeapSize = sp_core::ConstU32<{ 64 * 1024 }>; - type MaxStale = sp_core::ConstU32<8>; - type ServiceWeight = MessageQueueServiceWeight; -} - -impl parachain_info::Config for Runtime {} - -impl cumulus_pallet_aura_ext::Config for Runtime {} - -parameter_types! { - // Fellows pluralistic body. - pub const FellowsBodyId: BodyId = BodyId::Technical; -} - -impl cumulus_pallet_xcmp_queue::Config for Runtime { - type WeightInfo = weights::cumulus_pallet_xcmp_queue::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type ChannelInfo = ParachainSystem; - type VersionWrapper = PolkadotXcm; - // Enqueue XCMP messages from siblings for later processing. - type XcmpQueue = TransformOrigin; - type MaxInboundSuspended = sp_core::ConstU32<1_000>; - type ControllerOrigin = EitherOfDiverse< - EnsureRoot, - EnsureXcm>, - >; - type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; - type PriceForSiblingDelivery = NoPriceForMessageDelivery; -} - -parameter_types! { - pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; -} - -impl cumulus_pallet_dmp_queue::Config for Runtime { - type WeightInfo = weights::cumulus_pallet_dmp_queue::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type DmpSink = frame_support::traits::EnqueueWithOrigin; -} - -parameter_types! { - pub const Period: u32 = 6 * HOURS; - pub const Offset: u32 = 0; -} - -impl pallet_session::Config for Runtime { - 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; - type ShouldEndSession = pallet_session::PeriodicSessions; - type NextSessionRotation = pallet_session::PeriodicSessions; - type SessionManager = CollatorSelection; - // Essentially just Aura, but let's be pedantic. - type SessionHandler = ::KeyTypeIdProviders; - type Keys = SessionKeys; - type WeightInfo = weights::pallet_session::WeightInfo; -} - -impl pallet_aura::Config for Runtime { - type AuthorityId = AuraId; - type DisabledValidators = (); - type MaxAuthorities = ConstU32<100_000>; - type AllowMultipleBlocksPerSlot = ConstBool; - #[cfg(feature = "experimental")] - type SlotDuration = pallet_aura::MinimumPeriodTimesTwo; -} - -parameter_types! { - pub const PotId: PalletId = PalletId(*b"PotStake"); - pub const SessionLength: BlockNumber = 6 * HOURS; - // `StakingAdmin` pluralistic body. - pub const StakingAdminBodyId: BodyId = BodyId::Defense; -} - -/// We allow root and the `StakingAdmin` to execute privileged collator selection operations. -pub type CollatorSelectionUpdateOrigin = EitherOfDiverse< - EnsureRoot, - EnsureXcm>, ->; - -impl pallet_collator_selection::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type UpdateOrigin = CollatorSelectionUpdateOrigin; - type PotId = PotId; - type MaxCandidates = ConstU32<100>; - type MinEligibleCollators = ConstU32<4>; - type MaxInvulnerables = ConstU32<20>; - // should be a multiple of session or things will get inconsistent - type KickThreshold = Period; - type ValidatorId = ::AccountId; - type ValidatorIdOf = pallet_collator_selection::IdentityCollator; - type ValidatorRegistration = Session; - type WeightInfo = weights::pallet_collator_selection::WeightInfo; -} - -impl pallet_asset_tx_payment::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Fungibles = Assets; - type OnChargeAssetTransaction = pallet_asset_tx_payment::FungiblesAdapter< - pallet_assets::BalanceToAssetBalance< - Balances, - Runtime, - ConvertInto, - TrustBackedAssetsInstance, - >, - AssetsToBlockAuthor, - >; -} - -parameter_types! { - pub const UniquesCollectionDeposit: Balance = 10 * UNITS; // 10 UNIT deposit to create uniques class - pub const UniquesItemDeposit: Balance = UNITS / 100; // 1 / 100 UNIT deposit to create uniques instance - pub const UniquesMetadataDepositBase: Balance = deposit(1, 129); - pub const UniquesAttributeDepositBase: Balance = deposit(1, 0); - pub const UniquesDepositPerByte: Balance = deposit(0, 1); -} - -impl pallet_uniques::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type CollectionId = u32; - type ItemId = u32; - type Currency = Balances; - type ForceOrigin = AssetsForceOrigin; - type CollectionDeposit = UniquesCollectionDeposit; - type ItemDeposit = UniquesItemDeposit; - type MetadataDepositBase = UniquesMetadataDepositBase; - type AttributeDepositBase = UniquesAttributeDepositBase; - type DepositPerByte = UniquesDepositPerByte; - type StringLimit = ConstU32<128>; - type KeyLimit = ConstU32<32>; // Max 32 bytes per key - type ValueLimit = ConstU32<64>; // Max 64 bytes per value - type WeightInfo = weights::pallet_uniques::WeightInfo; - #[cfg(feature = "runtime-benchmarks")] - type Helper = (); - type CreateOrigin = AsEnsureOriginWithArg>; - type Locker = (); -} - -parameter_types! { - pub NftsPalletFeatures: PalletFeatures = PalletFeatures::all_enabled(); - pub const NftsMaxDeadlineDuration: BlockNumber = 12 * 30 * DAYS; - // re-use the Uniques deposits - pub const NftsCollectionDeposit: Balance = UniquesCollectionDeposit::get(); - pub const NftsItemDeposit: Balance = UniquesItemDeposit::get(); - pub const NftsMetadataDepositBase: Balance = UniquesMetadataDepositBase::get(); - pub const NftsAttributeDepositBase: Balance = UniquesAttributeDepositBase::get(); - pub const NftsDepositPerByte: Balance = UniquesDepositPerByte::get(); -} - -impl pallet_nfts::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type CollectionId = u32; - type ItemId = u32; - type Currency = Balances; - type CreateOrigin = AsEnsureOriginWithArg>; - type ForceOrigin = AssetsForceOrigin; - type Locker = (); - type CollectionDeposit = NftsCollectionDeposit; - type ItemDeposit = NftsItemDeposit; - type MetadataDepositBase = NftsMetadataDepositBase; - type AttributeDepositBase = NftsAttributeDepositBase; - type DepositPerByte = NftsDepositPerByte; - type StringLimit = ConstU32<256>; - type KeyLimit = ConstU32<64>; - type ValueLimit = ConstU32<256>; - type ApprovalsLimit = ConstU32<20>; - type ItemAttributesApprovalsLimit = ConstU32<30>; - type MaxTips = ConstU32<10>; - type MaxDeadlineDuration = NftsMaxDeadlineDuration; - type MaxAttributesPerCall = ConstU32<10>; - type Features = NftsPalletFeatures; - type OffchainSignature = Signature; - type OffchainPublic = ::Signer; - type WeightInfo = weights::pallet_nfts::WeightInfo; - #[cfg(feature = "runtime-benchmarks")] - type Helper = (); -} - -// Create the runtime by composing the FRAME pallets that were previously configured. -construct_runtime!( - pub enum Runtime - { - // System support stuff. - System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, - ParachainSystem: cumulus_pallet_parachain_system::{ - Pallet, Call, Config, Storage, Inherent, Event, ValidateUnsigned, - } = 1, - // RandomnessCollectiveFlip = 2 removed - Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 3, - ParachainInfo: parachain_info::{Pallet, Storage, Config} = 4, - - // Monetary stuff. - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event} = 10, - TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event} = 11, - AssetTxPayment: pallet_asset_tx_payment::{Pallet, Event} = 12, - - // Collator support. the order of these 5 are important and shall not change. - Authorship: pallet_authorship::{Pallet, Storage} = 20, - CollatorSelection: pallet_collator_selection::{Pallet, Call, Storage, Event, Config} = 21, - Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 22, - Aura: pallet_aura::{Pallet, Storage, Config} = 23, - AuraExt: cumulus_pallet_aura_ext::{Pallet, Storage, Config} = 24, - - // XCM helpers. - XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event} = 30, - PolkadotXcm: pallet_xcm::{Pallet, Call, Storage, Event, Origin, Config} = 31, - CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 32, - DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 33, - MessageQueue: pallet_message_queue::{Pallet, Call, Storage, Event} = 34, - - // Handy utilities. - Utility: pallet_utility::{Pallet, Call, Event} = 40, - Multisig: pallet_multisig::{Pallet, Call, Storage, Event} = 41, - Proxy: pallet_proxy::{Pallet, Call, Storage, Event} = 42, - - // The main stage. - Assets: pallet_assets::::{Pallet, Call, Storage, Event} = 50, - Uniques: pallet_uniques::{Pallet, Call, Storage, Event} = 51, - Nfts: pallet_nfts::{Pallet, Call, Storage, Event} = 52, - ForeignAssets: pallet_assets::::{Pallet, Call, Storage, Event} = 53, - } -); - -/// The address format for describing accounts. -pub type Address = sp_runtime::MultiAddress; -/// Block type as expected by this runtime. -pub type Block = generic::Block; -/// A Block signed with a Justification -pub type SignedBlock = generic::SignedBlock; -/// BlockId type as expected by this runtime. -pub type BlockId = generic::BlockId; -/// The SignedExtension to the basic transaction logic. -pub type SignedExtra = ( - frame_system::CheckNonZeroSender, - frame_system::CheckSpecVersion, - frame_system::CheckTxVersion, - frame_system::CheckGenesis, - frame_system::CheckEra, - frame_system::CheckNonce, - frame_system::CheckWeight, - pallet_asset_tx_payment::ChargeAssetTxPayment, -); -/// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = - generic::UncheckedExtrinsic; -/// Migrations to apply on runtime upgrade. -pub type Migrations = ( - // unreleased - pallet_collator_selection::migration::v1::MigrateToV1, -); - -/// Executive: handles dispatch to the various modules. -pub type Executive = frame_executive::Executive< - Runtime, - Block, - frame_system::ChainContext, - Runtime, - AllPalletsWithSystem, - Migrations, ->; - -#[cfg(feature = "runtime-benchmarks")] -mod benches { - frame_benchmarking::define_benchmarks!( - [frame_system, SystemBench::] - [pallet_assets, Local] - [pallet_assets, Foreign] - [pallet_balances, Balances] - [pallet_message_queue, MessageQueue] - [pallet_multisig, Multisig] - [pallet_nfts, Nfts] - [pallet_proxy, Proxy] - [pallet_session, SessionBench::] - [pallet_uniques, Uniques] - [pallet_utility, Utility] - [pallet_timestamp, Timestamp] - [pallet_collator_selection, CollatorSelection] - [cumulus_pallet_parachain_system, ParachainSystem] - [cumulus_pallet_xcmp_queue, XcmpQueue] - [cumulus_pallet_dmp_queue, DmpQueue] - // XCM - [pallet_xcm, PalletXcmExtrinsicsBenchmark::] - // NOTE: Make sure you point to the individual modules below. - [pallet_xcm_benchmarks::fungible, XcmBalances] - [pallet_xcm_benchmarks::generic, XcmGeneric] - ); -} - -impl_runtime_apis! { - impl sp_consensus_aura::AuraApi for Runtime { - fn slot_duration() -> sp_consensus_aura::SlotDuration { - sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) - } - - fn authorities() -> Vec { - Aura::authorities().into_inner() - } - } - - impl sp_api::Core for Runtime { - fn version() -> RuntimeVersion { - VERSION - } - - fn execute_block(block: Block) { - Executive::execute_block(block) - } - - fn initialize_block(header: &::Header) { - Executive::initialize_block(header) - } - } - - impl sp_api::Metadata for Runtime { - fn metadata() -> OpaqueMetadata { - OpaqueMetadata::new(Runtime::metadata().into()) - } - - fn metadata_at_version(version: u32) -> Option { - Runtime::metadata_at_version(version) - } - - fn metadata_versions() -> sp_std::vec::Vec { - Runtime::metadata_versions() - } - } - - impl sp_block_builder::BlockBuilder for Runtime { - fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyExtrinsicResult { - Executive::apply_extrinsic(extrinsic) - } - - fn finalize_block() -> ::Header { - Executive::finalize_block() - } - - fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { - data.create_extrinsics() - } - - fn check_inherents( - block: Block, - data: sp_inherents::InherentData, - ) -> sp_inherents::CheckInherentsResult { - data.check_extrinsics(&block) - } - } - - impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { - fn validate_transaction( - source: TransactionSource, - tx: ::Extrinsic, - block_hash: ::Hash, - ) -> TransactionValidity { - Executive::validate_transaction(source, tx, block_hash) - } - } - - impl sp_offchain::OffchainWorkerApi for Runtime { - fn offchain_worker(header: &::Header) { - Executive::offchain_worker(header) - } - } - - impl sp_session::SessionKeys for Runtime { - fn generate_session_keys(seed: Option>) -> Vec { - SessionKeys::generate(seed) - } - - fn decode_session_keys( - encoded: Vec, - ) -> Option, KeyTypeId)>> { - SessionKeys::decode_into_raw_public_keys(&encoded) - } - } - - impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { - fn account_nonce(account: AccountId) -> Nonce { - System::account_nonce(account) - } - } - - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi for Runtime { - fn query_info( - uxt: ::Extrinsic, - len: u32, - ) -> pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo { - TransactionPayment::query_info(uxt, len) - } - fn query_fee_details( - uxt: ::Extrinsic, - len: u32, - ) -> pallet_transaction_payment::FeeDetails { - TransactionPayment::query_fee_details(uxt, len) - } - fn query_weight_to_fee(weight: Weight) -> Balance { - TransactionPayment::weight_to_fee(weight) - } - fn query_length_to_fee(length: u32) -> Balance { - TransactionPayment::length_to_fee(length) - } - } - - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi - for Runtime - { - fn query_call_info( - call: RuntimeCall, - len: u32, - ) -> pallet_transaction_payment::RuntimeDispatchInfo { - TransactionPayment::query_call_info(call, len) - } - fn query_call_fee_details( - call: RuntimeCall, - len: u32, - ) -> pallet_transaction_payment::FeeDetails { - TransactionPayment::query_call_fee_details(call, len) - } - fn query_weight_to_fee(weight: Weight) -> Balance { - TransactionPayment::weight_to_fee(weight) - } - fn query_length_to_fee(length: u32) -> Balance { - TransactionPayment::length_to_fee(length) - } - } - - impl assets_common::runtime_api::FungiblesApi< - Block, - AccountId, - > for Runtime - { - fn query_account_balances(account: AccountId) -> Result { - use assets_common::fungible_conversion::{convert, convert_balance}; - Ok([ - // collect pallet_balance - { - let balance = Balances::free_balance(account.clone()); - if balance > 0 { - vec![convert_balance::(balance)?] - } else { - vec![] - } - }, - // collect pallet_assets (TrustBackedAssets) - convert::<_, _, _, _, TrustBackedAssetsConvertedConcreteId>( - Assets::account_balances(account.clone()) - .iter() - .filter(|(_, balance)| balance > &0) - )?, - // collect pallet_assets (ForeignAssets) - convert::<_, _, _, _, ForeignAssetsConvertedConcreteId>( - ForeignAssets::account_balances(account) - .iter() - .filter(|(_, balance)| balance > &0) - )?, - // collect ... e.g. other tokens - ].concat().into()) - } - } - - impl cumulus_primitives_core::CollectCollationInfo for Runtime { - fn collect_collation_info(header: &::Header) -> cumulus_primitives_core::CollationInfo { - ParachainSystem::collect_collation_info(header) - } - } - - #[cfg(feature = "try-runtime")] - impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { - let weight = Executive::try_runtime_upgrade(checks).unwrap(); - (weight, RuntimeBlockWeights::get().max_block) - } - - fn execute_block( - block: Block, - state_root_check: bool, - signature_check: bool, - select: frame_try_runtime::TryStateSelect, - ) -> Weight { - // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to - // have a backtrace here. - Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() - } - } - - #[cfg(feature = "runtime-benchmarks")] - impl frame_benchmarking::Benchmark for Runtime { - fn benchmark_metadata(extra: bool) -> ( - 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; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; - - // 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::; - - // Benchmark files generated for `Assets/ForeignAssets` instances are by default - // `pallet_assets_assets.rs / pallet_assets_foreign_assets`, which is not really nice, - // so with this redefinition we can change names to nicer: - // `pallet_assets_local.rs / pallet_assets_foreign.rs`. - type Local = pallet_assets::Pallet::; - type Foreign = pallet_assets::Pallet::; - - let mut list = Vec::::new(); - list_benchmarks!(list, extra); - - let storage_info = AllPalletsWithSystem::storage_info(); - (list, storage_info) - } - - fn dispatch_benchmark( - config: frame_benchmarking::BenchmarkConfig - ) -> Result, sp_runtime::RuntimeString> { - use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError}; - use sp_storage::TrackedStorageKey; - - use frame_system_benchmarking::Pallet as SystemBench; - impl frame_system_benchmarking::Config for Runtime { - fn setup_set_code_requirements(code: &sp_std::vec::Vec) -> Result<(), BenchmarkError> { - ParachainSystem::initialize_for_set_code_benchmark(code.len() as u32); - Ok(()) - } - - fn verify_set_code() { - System::assert_last_event(cumulus_pallet_parachain_system::Event::::ValidationFunctionStored.into()); - } - } - - use cumulus_pallet_session_benchmarking::Pallet as SessionBench; - impl cumulus_pallet_session_benchmarking::Config for Runtime {} - - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; - impl pallet_xcm::benchmarking::Config for Runtime { - fn reachable_dest() -> Option { - Some(Parent.into()) - } - - fn teleportable_asset_and_dest() -> Option<(MultiAsset, MultiLocation)> { - // Relay/native token can be teleported between AH and Relay. - Some(( - MultiAsset { - fun: Fungible(EXISTENTIAL_DEPOSIT), - id: Concrete(Parent.into()) - }, - Parent.into(), - )) - } - - fn reserve_transferable_asset_and_dest() -> Option<(MultiAsset, MultiLocation)> { - // AH can reserve transfer native token to some random parachain. - let random_para_id = 43211234; - ParachainSystem::open_outbound_hrmp_channel_for_benchmarks_or_tests( - random_para_id.into() - ); - Some(( - MultiAsset { - fun: Fungible(EXISTENTIAL_DEPOSIT), - id: Concrete(Parent.into()) - }, - ParentThen(Parachain(random_para_id).into()).into(), - )) - } - } - - use xcm::latest::prelude::*; - use xcm_config::{DotLocation, MaxAssetsIntoHolding}; - use pallet_xcm_benchmarks::asset_instance_from; - - parameter_types! { - pub ExistentialDepositMultiAsset: Option = Some(( - xcm_config::DotLocation::get(), - ExistentialDeposit::get() - ).into()); - } - - impl pallet_xcm_benchmarks::Config for Runtime { - type XcmConfig = xcm_config::XcmConfig; - type AccountIdConverter = xcm_config::LocationToAccountId; - type DeliveryHelper = cumulus_primitives_utility::ToParentDeliveryHelper< - xcm_config::XcmConfig, - ExistentialDepositMultiAsset, - xcm_config::PriceForParentDelivery, - >; - fn valid_destination() -> Result { - Ok(DotLocation::get()) - } - fn worst_case_holding(depositable_count: u32) -> MultiAssets { - // A mix of fungible, non-fungible, and concrete assets. - let holding_non_fungibles = MaxAssetsIntoHolding::get() / 2 - depositable_count; - let holding_fungibles = holding_non_fungibles - 1; - 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), - } - }) - .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(UNITS), id: Concrete(DotLocation::get()) }, - )); - pub const CheckedAccount: Option<(AccountId, xcm_builder::MintLocation)> = None; - pub const TrustedReserve: Option<(MultiLocation, MultiAsset)> = 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(UNITS), - } - } - } - - impl pallet_xcm_benchmarks::generic::Config for Runtime { - type TransactAsset = Balances; - type RuntimeCall = RuntimeCall; - - fn worst_case_response() -> (u64, Response) { - (0u64, Response::Version(Default::default())) - } - - fn worst_case_asset_exchange() -> Result<(MultiAssets, MultiAssets), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn universal_alias() -> Result<(MultiLocation, Junction), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn transact_origin_and_runtime_call() -> Result<(MultiLocation, RuntimeCall), BenchmarkError> { - Ok((DotLocation::get(), frame_system::Call::remark_with_event { remark: vec![] }.into())) - } - - 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)) - } - - fn unlockable_asset() -> Result<(MultiLocation, MultiLocation, MultiAsset), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn export_message_origin_and_destination( - ) -> Result<(MultiLocation, NetworkId, InteriorMultiLocation), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn alias_origin() -> Result<(MultiLocation, MultiLocation), BenchmarkError> { - Err(BenchmarkError::Skip) - } - } - - type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; - type XcmGeneric = pallet_xcm_benchmarks::generic::Pallet::; - - type Local = pallet_assets::Pallet::; - type Foreign = pallet_assets::Pallet::; - - let whitelist: Vec = vec![ - // Block Number - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec().into(), - // Total Issuance - hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80").to_vec().into(), - // Execution Phase - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a").to_vec().into(), - // Event Count - 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); - - Ok(batches) - } - } - - impl sp_genesis_builder::GenesisBuilder for Runtime { - fn create_default_config() -> Vec { - create_default_config::() - } - - fn build_config(config: Vec) -> sp_genesis_builder::Result { - build_config::(config) - } - } -} - -cumulus_pallet_parachain_system::register_validate_block! { - Runtime = Runtime, - BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::, -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::{CENTS, MILLICENTS}; - use parachains_common::polkadot::fee; - use sp_runtime::traits::Zero; - use sp_weights::WeightToFee; - - /// We can fit at least 1000 transfers in a block. - #[test] - fn sane_block_weight() { - use pallet_balances::WeightInfo; - let block = RuntimeBlockWeights::get().max_block; - let base = RuntimeBlockWeights::get().get(DispatchClass::Normal).base_extrinsic; - let transfer = - base + weights::pallet_balances::WeightInfo::::transfer_allow_death(); - - let fit = block.checked_div_per_component(&transfer).unwrap_or_default(); - assert!(fit >= 1000, "{} should be at least 1000", fit); - } - - /// The fee for one transfer is at most 1 CENT. - #[test] - fn sane_transfer_fee() { - use pallet_balances::WeightInfo; - let base = RuntimeBlockWeights::get().get(DispatchClass::Normal).base_extrinsic; - let transfer = - base + weights::pallet_balances::WeightInfo::::transfer_allow_death(); - - let fee: Balance = fee::WeightToFee::weight_to_fee(&transfer); - assert!(fee <= CENTS, "{} MILLICENTS should be at most 1000", fee / MILLICENTS); - } - - /// Weight is being charged for both dimensions. - #[test] - fn weight_charged_for_both_components() { - let fee: Balance = fee::WeightToFee::weight_to_fee(&Weight::from_parts(10_000, 0)); - assert!(!fee.is_zero(), "Charges for ref time"); - - let fee: Balance = fee::WeightToFee::weight_to_fee(&Weight::from_parts(0, 10_000)); - assert_eq!(fee, CENTS, "10kb maps to CENT"); - } - - /// Filling up a block by proof size is at most 30 times more expensive than ref time. - /// - /// This is just a sanity check. - #[test] - fn full_block_fee_ratio() { - let block = RuntimeBlockWeights::get().max_block; - let time_fee: Balance = - fee::WeightToFee::weight_to_fee(&Weight::from_parts(block.ref_time(), 0)); - let proof_fee: Balance = - fee::WeightToFee::weight_to_fee(&Weight::from_parts(0, block.proof_size())); - - let proof_o_time = proof_fee.checked_div(time_fee).unwrap_or_default(); - assert!(proof_o_time <= 30, "{} should be at most 30", proof_o_time); - let time_o_proof = time_fee.checked_div(proof_fee).unwrap_or_default(); - assert!(time_o_proof <= 30, "{} should be at most 30", time_o_proof); - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/block_weights.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/block_weights.rs deleted file mode 100644 index e7fdb2aae2a..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/block_weights.rs +++ /dev/null @@ -1,53 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, Weight}, - }; - - parameter_types! { - /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = - Weight::from_parts(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000), 0); - } - - #[cfg(test)] - mod test_weights { - use frame_support::weights::constants; - - /// Checks that the weight exists and is sane. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - let w = super::constants::BlockExecutionWeight::get(); - - // At least 100 µs. - assert!( - w.ref_time() >= 100u64 * constants::WEIGHT_REF_TIME_PER_MICROS, - "Weight should be at least 100 µs." - ); - // At most 50 ms. - assert!( - w.ref_time() <= 50u64 * constants::WEIGHT_REF_TIME_PER_MILLIS, - "Weight should be at most 50 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/cumulus_pallet_dmp_queue.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/cumulus_pallet_dmp_queue.rs deleted file mode 100644 index cc41dcd6cbb..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/cumulus_pallet_dmp_queue.rs +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (C) 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_dmp_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-10-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=cumulus_pallet_dmp_queue -// --chain=asset-hub-kusama-dev -// --header=./cumulus/file_header.txt -// --output=./cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_dmp_queue`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_dmp_queue::WeightInfo for WeightInfo { - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65696` - // Estimated: `69161` - // Minimum execution time: 124_651_000 picoseconds. - Weight::from_parts(127_857_000, 0) - .saturating_add(Weight::from_parts(0, 69161)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65659` - // Estimated: `69124` - // Minimum execution time: 65_684_000 picoseconds. - Weight::from_parts(68_039_000, 0) - .saturating_add(Weight::from_parts(0, 69124)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_overweight_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65726` - // Estimated: `69191` - // Minimum execution time: 117_657_000 picoseconds. - Weight::from_parts(122_035_000, 0) - .saturating_add(Weight::from_parts(0, 69191)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(6)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - fn on_idle_overweight_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65689` - // Estimated: `69154` - // Minimum execution time: 59_799_000 picoseconds. - Weight::from_parts(61_354_000, 0) - .saturating_add(Weight::from_parts(0, 69154)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/cumulus_pallet_parachain_system.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/cumulus_pallet_parachain_system.rs deleted file mode 100644 index 970534560c6..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/cumulus_pallet_parachain_system.rs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `cumulus_pallet_parachain_system` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `i9`, CPU: `13th Gen Intel(R) Core(TM) i9-13900K` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/polkadot-parachain -// benchmark -// pallet -// --chain -// westmint-dev -// --pallet -// cumulus_pallet_parachain_system -// --extrinsic -// * -// --execution -// wasm -// --wasm-execution -// compiled -// --output -// parachains/runtimes/assets/westmint/src/weights -// --steps -// 50 -// --repeat -// 20 - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::Weight}; -use sp_std::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_parachain_system`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_parachain_system::WeightInfo for WeightInfo { - /// Storage: ParachainSystem LastDmqMqcHead (r:1 w:1) - /// Proof Skipped: ParachainSystem LastDmqMqcHead (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ParachainSystem ReservedDmpWeightOverride (r:1 w:0) - /// Proof Skipped: ParachainSystem ReservedDmpWeightOverride (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: ParachainSystem ProcessedDownwardMessages (r:0 w:1) - /// Proof Skipped: ParachainSystem ProcessedDownwardMessages (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: MessageQueue Pages (r:0 w:16) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - /// The range of component `n` is `[0, 1000]`. - fn enqueue_inbound_downward_messages(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `12` - // Estimated: `8013` - // Minimum execution time: 1_638_000 picoseconds. - Weight::from_parts(1_690_000, 0) - .saturating_add(Weight::from_parts(0, 8013)) - // Standard Error: 22_873 - .saturating_add(Weight::from_parts(24_208_496, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs deleted file mode 100644 index 89c80d0be62..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `cumulus_pallet_xcmp_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-09-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `Olivers-MacBook-Pro.local`, CPU: `` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/release/polkadot-parachain -// benchmark -// pallet -// --pallet -// cumulus-pallet-xcmp-queue -// --chain -// asset-hub-polkadot-dev -// --output -// cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs -// --extrinsic -// - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_xcmp_queue`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:1) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_config_with_u32() -> Weight { - // Proof Size summary in bytes: - // Measured: `76` - // Estimated: `1561` - // Minimum execution time: 6_000_000 picoseconds. - Weight::from_parts(6_000_000, 0) - .saturating_add(Weight::from_parts(0, 1561)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:0) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `XcmpQueue::InboundXcmpSuspended` (r:1 w:0) - /// Proof: `XcmpQueue::InboundXcmpSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn enqueue_xcmp_message() -> Weight { - // Proof Size summary in bytes: - // Measured: `82` - // Estimated: `3517` - // Minimum execution time: 14_000_000 picoseconds. - Weight::from_parts(15_000_000, 0) - .saturating_add(Weight::from_parts(0, 3517)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn suspend_channel() -> Weight { - // Proof Size summary in bytes: - // Measured: `76` - // Estimated: `1561` - // Minimum execution time: 3_000_000 picoseconds. - Weight::from_parts(4_000_000, 0) - .saturating_add(Weight::from_parts(0, 1561)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn resume_channel() -> Weight { - // Proof Size summary in bytes: - // Measured: `111` - // Estimated: `1596` - // Minimum execution time: 4_000_000 picoseconds. - Weight::from_parts(5_000_000, 0) - .saturating_add(Weight::from_parts(0, 1596)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn take_first_concatenated_xcm() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 44_000_000 picoseconds. - Weight::from_parts(46_000_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Storage: `XcmpQueue::InboundXcmpMessages` (r:1 w:1) - /// Proof: `XcmpQueue::InboundXcmpMessages` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:0) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::InboundXcmpSuspended` (r:1 w:0) - /// Proof: `XcmpQueue::InboundXcmpSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65711` - // Estimated: `69176` - // Minimum execution time: 62_000_000 picoseconds. - Weight::from_parts(68_000_000, 0) - .saturating_add(Weight::from_parts(0, 69176)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65710` - // Estimated: `69175` - // Minimum execution time: 42_000_000 picoseconds. - Weight::from_parts(45_000_000, 0) - .saturating_add(Weight::from_parts(0, 69175)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/extrinsic_weights.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/extrinsic_weights.rs deleted file mode 100644 index 1a4adb968bb..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/extrinsic_weights.rs +++ /dev/null @@ -1,53 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, Weight}, - }; - - parameter_types! { - /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = - Weight::from_parts(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000), 0); - } - - #[cfg(test)] - mod test_weights { - use frame_support::weights::constants; - - /// Checks that the weight exists and is sane. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - let w = super::constants::ExtrinsicBaseWeight::get(); - - // At least 10 µs. - assert!( - w.ref_time() >= 10u64 * constants::WEIGHT_REF_TIME_PER_MICROS, - "Weight should be at least 10 µs." - ); - // At most 1 ms. - assert!( - w.ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Weight should be at most 1 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/frame_system.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/frame_system.rs deleted file mode 100644 index 0b988fd0f6f..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/frame_system.rs +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `frame_system` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=frame_system -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `frame_system`. -pub struct WeightInfo(PhantomData); -impl frame_system::WeightInfo for WeightInfo { - /// The range of component `b` is `[0, 3932160]`. - fn remark(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 1_956_000 picoseconds. - Weight::from_parts(3_441_280, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 0 - .saturating_add(Weight::from_parts(388, 0).saturating_mul(b.into())) - } - /// The range of component `b` is `[0, 3932160]`. - fn remark_with_event(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_267_000 picoseconds. - Weight::from_parts(7_462_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 3 - .saturating_add(Weight::from_parts(1_816, 0).saturating_mul(b.into())) - } - /// Storage: `System::Digest` (r:1 w:1) - /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - /// Proof: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - fn set_heap_pages() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `1485` - // Minimum execution time: 3_757_000 picoseconds. - Weight::from_parts(4_021_000, 0) - .saturating_add(Weight::from_parts(0, 1485)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) - /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpgradeRestrictionSignal` (r:1 w:0) - /// Proof: `ParachainSystem::UpgradeRestrictionSignal` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingValidationCode` (r:1 w:1) - /// Proof: `ParachainSystem::PendingValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::NewValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::NewValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::DidSetValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::DidSetValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_code() -> Weight { - // Proof Size summary in bytes: - // Measured: `119` - // Estimated: `1604` - // Minimum execution time: 97_958_650_000 picoseconds. - Weight::from_parts(102_129_539_000, 0) - .saturating_add(Weight::from_parts(0, 1604)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn set_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_327_000 picoseconds. - Weight::from_parts(2_511_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 2_186 - .saturating_add(Weight::from_parts(755_085, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn kill_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_114_000 picoseconds. - Weight::from_parts(2_177_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 1_174 - .saturating_add(Weight::from_parts(584_644, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `p` is `[0, 1000]`. - fn kill_prefix(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `84 + p * (69 ±0)` - // Estimated: `77 + p * (70 ±0)` - // Minimum execution time: 3_799_000 picoseconds. - Weight::from_parts(3_910_000, 0) - .saturating_add(Weight::from_parts(0, 77)) - // Standard Error: 1_968 - .saturating_add(Weight::from_parts(1_220_745, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) - .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/mod.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/mod.rs deleted file mode 100644 index 0823dcad88e..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/mod.rs +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod block_weights; -pub mod cumulus_pallet_dmp_queue; -pub mod cumulus_pallet_parachain_system; -pub mod cumulus_pallet_xcmp_queue; -pub mod extrinsic_weights; -pub mod frame_system; -pub mod pallet_assets_foreign; -pub mod pallet_assets_local; -pub mod pallet_balances; -pub mod pallet_collator_selection; -pub mod pallet_message_queue; -pub mod pallet_multisig; -pub mod pallet_nfts; -pub mod pallet_proxy; -pub mod pallet_session; -pub mod pallet_timestamp; -pub mod pallet_uniques; -pub mod pallet_utility; -pub mod pallet_xcm; -pub mod paritydb_weights; -pub mod rocksdb_weights; -pub mod xcm; - -pub use block_weights::constants::BlockExecutionWeight; -pub use extrinsic_weights::constants::ExtrinsicBaseWeight; -pub use paritydb_weights::constants::ParityDbWeight; -pub use rocksdb_weights::constants::RocksDbWeight; diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_assets_foreign.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_assets_foreign.rs deleted file mode 100644 index adb686c0afc..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_assets_foreign.rs +++ /dev/null @@ -1,532 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_assets` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_assets -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_assets`. -pub struct WeightInfo(PhantomData); -impl pallet_assets::WeightInfo for WeightInfo { - /// Storage: `ParachainInfo::ParachainId` (r:1 w:0) - /// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn create() -> Weight { - // Proof Size summary in bytes: - // Measured: `107` - // Estimated: `4273` - // Minimum execution time: 29_979_000 picoseconds. - Weight::from_parts(30_763_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn force_create() -> Weight { - // Proof Size summary in bytes: - // Measured: `4` - // Estimated: `4273` - // Minimum execution time: 12_255_000 picoseconds. - Weight::from_parts(12_614_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn start_destroy() -> Weight { - // Proof Size summary in bytes: - // Measured: `276` - // Estimated: `4273` - // Minimum execution time: 15_240_000 picoseconds. - Weight::from_parts(15_627_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1001 w:1000) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1000 w:1000) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `c` is `[0, 1000]`. - /// The range of component `c` is `[0, 1000]`. - fn destroy_accounts(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + c * (208 ±0)` - // Estimated: `4273 + c * (3207 ±0)` - // Minimum execution time: 17_814_000 picoseconds. - Weight::from_parts(18_006_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - // Standard Error: 10_358 - .saturating_add(Weight::from_parts(15_409_972, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(c.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(c.into()))) - .saturating_add(Weight::from_parts(0, 3207).saturating_mul(c.into())) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1001 w:1000) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(746), added: 3221, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 1000]`. - /// The range of component `a` is `[0, 1000]`. - fn destroy_approvals(a: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `413 + a * (86 ±0)` - // Estimated: `4273 + a * (3221 ±0)` - // Minimum execution time: 18_957_000 picoseconds. - Weight::from_parts(19_347_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - // Standard Error: 5_051 - .saturating_add(Weight::from_parts(15_416_931, 0).saturating_mul(a.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) - .saturating_add(Weight::from_parts(0, 3221).saturating_mul(a.into())) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:0) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(738), added: 3213, mode: `MaxEncodedLen`) - fn finish_destroy() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `4273` - // Minimum execution time: 15_409_000 picoseconds. - Weight::from_parts(15_835_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - fn mint() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `4273` - // Minimum execution time: 26_753_000 picoseconds. - Weight::from_parts(27_349_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - fn burn() -> Weight { - // Proof Size summary in bytes: - // Measured: `350` - // Estimated: `4273` - // Minimum execution time: 33_918_000 picoseconds. - Weight::from_parts(34_624_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `350` - // Estimated: `7404` - // Minimum execution time: 45_863_000 picoseconds. - Weight::from_parts(46_674_000, 0) - .saturating_add(Weight::from_parts(0, 7404)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_keep_alive() -> Weight { - // Proof Size summary in bytes: - // Measured: `350` - // Estimated: `7404` - // Minimum execution time: 40_592_000 picoseconds. - Weight::from_parts(41_582_000, 0) - .saturating_add(Weight::from_parts(0, 7404)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `350` - // Estimated: `7404` - // Minimum execution time: 46_170_000 picoseconds. - Weight::from_parts(46_880_000, 0) - .saturating_add(Weight::from_parts(0, 7404)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - fn freeze() -> Weight { - // Proof Size summary in bytes: - // Measured: `350` - // Estimated: `4273` - // Minimum execution time: 18_421_000 picoseconds. - Weight::from_parts(19_003_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - fn thaw() -> Weight { - // Proof Size summary in bytes: - // Measured: `350` - // Estimated: `4273` - // Minimum execution time: 18_009_000 picoseconds. - Weight::from_parts(18_683_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn freeze_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `276` - // Estimated: `4273` - // Minimum execution time: 14_702_000 picoseconds. - Weight::from_parts(15_118_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn thaw_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `276` - // Estimated: `4273` - // Minimum execution time: 14_329_000 picoseconds. - Weight::from_parts(14_857_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:0) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(738), added: 3213, mode: `MaxEncodedLen`) - fn transfer_ownership() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `4273` - // Minimum execution time: 15_776_000 picoseconds. - Weight::from_parts(16_337_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn set_team() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `4273` - // Minimum execution time: 14_290_000 picoseconds. - Weight::from_parts(14_655_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:1) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(738), added: 3213, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - fn set_metadata(_n: u32, s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `4273` - // Minimum execution time: 29_296_000 picoseconds. - Weight::from_parts(30_512_261, 0) - .saturating_add(Weight::from_parts(0, 4273)) - // Standard Error: 474 - .saturating_add(Weight::from_parts(530, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:1) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(738), added: 3213, mode: `MaxEncodedLen`) - fn clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `406` - // Estimated: `4273` - // Minimum execution time: 30_342_000 picoseconds. - Weight::from_parts(31_030_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:1) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(738), added: 3213, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - /// 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 { - // Proof Size summary in bytes: - // Measured: `81` - // Estimated: `4273` - // Minimum execution time: 13_574_000 picoseconds. - Weight::from_parts(14_181_016, 0) - .saturating_add(Weight::from_parts(0, 4273)) - // Standard Error: 262 - .saturating_add(Weight::from_parts(420, 0).saturating_mul(n.into())) - // Standard Error: 262 - .saturating_add(Weight::from_parts(1_118, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:1) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(738), added: 3213, mode: `MaxEncodedLen`) - fn force_clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `406` - // Estimated: `4273` - // Minimum execution time: 29_679_000 picoseconds. - Weight::from_parts(30_346_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn force_asset_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `4273` - // Minimum execution time: 13_334_000 picoseconds. - Weight::from_parts(13_827_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1 w:1) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(746), added: 3221, mode: `MaxEncodedLen`) - fn approve_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `276` - // Estimated: `4273` - // Minimum execution time: 32_648_000 picoseconds. - Weight::from_parts(33_555_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1 w:1) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(746), added: 3221, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_approved() -> Weight { - // Proof Size summary in bytes: - // Measured: `520` - // Estimated: `7404` - // Minimum execution time: 65_431_000 picoseconds. - Weight::from_parts(66_502_000, 0) - .saturating_add(Weight::from_parts(0, 7404)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1 w:1) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(746), added: 3221, mode: `MaxEncodedLen`) - fn cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `446` - // Estimated: `4273` - // Minimum execution time: 35_207_000 picoseconds. - Weight::from_parts(35_915_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1 w:1) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(746), added: 3221, mode: `MaxEncodedLen`) - fn force_cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `446` - // Estimated: `4273` - // Minimum execution time: 35_768_000 picoseconds. - Weight::from_parts(36_553_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn set_min_balance() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `4273` - // Minimum execution time: 15_108_000 picoseconds. - Weight::from_parts(15_556_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn touch() -> Weight { - // Proof Size summary in bytes: - // Measured: `345` - // Estimated: `4273` - // Minimum execution time: 34_373_000 picoseconds. - Weight::from_parts(35_200_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn touch_other() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `4273` - // Minimum execution time: 32_201_000 picoseconds. - Weight::from_parts(33_591_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn refund() -> Weight { - // Proof Size summary in bytes: - // Measured: `471` - // Estimated: `4273` - // Minimum execution time: 31_148_000 picoseconds. - Weight::from_parts(31_751_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - fn refund_other() -> Weight { - // Proof Size summary in bytes: - // Measured: `401` - // Estimated: `4273` - // Minimum execution time: 29_127_000 picoseconds. - Weight::from_parts(29_922_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) - fn block() -> Weight { - // Proof Size summary in bytes: - // Measured: `350` - // Estimated: `4273` - // Minimum execution time: 18_386_000 picoseconds. - Weight::from_parts(18_762_000, 0) - .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_assets_local.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_assets_local.rs deleted file mode 100644 index 810f5b57c45..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_assets_local.rs +++ /dev/null @@ -1,528 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_assets` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_assets -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_assets`. -pub struct WeightInfo(PhantomData); -impl pallet_assets::WeightInfo for WeightInfo { - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn create() -> Weight { - // Proof Size summary in bytes: - // Measured: `109` - // Estimated: `3675` - // Minimum execution time: 26_698_000 picoseconds. - Weight::from_parts(27_507_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn force_create() -> Weight { - // Proof Size summary in bytes: - // Measured: `6` - // Estimated: `3675` - // Minimum execution time: 10_833_000 picoseconds. - Weight::from_parts(11_314_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn start_destroy() -> Weight { - // Proof Size summary in bytes: - // Measured: `277` - // Estimated: `3675` - // Minimum execution time: 13_389_000 picoseconds. - Weight::from_parts(14_231_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:1001 w:1000) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1000 w:1000) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `c` is `[0, 1000]`. - /// The range of component `c` is `[0, 1000]`. - fn destroy_accounts(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + c * (208 ±0)` - // Estimated: `3675 + c * (2609 ±0)` - // Minimum execution time: 16_027_000 picoseconds. - Weight::from_parts(16_455_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - // Standard Error: 10_266 - .saturating_add(Weight::from_parts(15_263_742, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(c.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(c.into()))) - .saturating_add(Weight::from_parts(0, 2609).saturating_mul(c.into())) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Approvals` (r:1001 w:1000) - /// Proof: `Assets::Approvals` (`max_values`: None, `max_size`: Some(148), added: 2623, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 1000]`. - /// The range of component `a` is `[0, 1000]`. - fn destroy_approvals(a: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `414 + a * (86 ±0)` - // Estimated: `3675 + a * (2623 ±0)` - // Minimum execution time: 17_167_000 picoseconds. - Weight::from_parts(17_397_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - // Standard Error: 5_072 - .saturating_add(Weight::from_parts(15_429_203, 0).saturating_mul(a.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) - .saturating_add(Weight::from_parts(0, 2623).saturating_mul(a.into())) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Metadata` (r:1 w:0) - /// Proof: `Assets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - fn finish_destroy() -> Weight { - // Proof Size summary in bytes: - // Measured: `243` - // Estimated: `3675` - // Minimum execution time: 13_694_000 picoseconds. - Weight::from_parts(14_239_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn mint() -> Weight { - // Proof Size summary in bytes: - // Measured: `243` - // Estimated: `3675` - // Minimum execution time: 24_406_000 picoseconds. - Weight::from_parts(24_981_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn burn() -> Weight { - // Proof Size summary in bytes: - // Measured: `351` - // Estimated: `3675` - // Minimum execution time: 31_372_000 picoseconds. - Weight::from_parts(32_021_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:2 w:2) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `351` - // Estimated: `6208` - // Minimum execution time: 42_982_000 picoseconds. - Weight::from_parts(43_918_000, 0) - .saturating_add(Weight::from_parts(0, 6208)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:2 w:2) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_keep_alive() -> Weight { - // Proof Size summary in bytes: - // Measured: `351` - // Estimated: `6208` - // Minimum execution time: 37_161_000 picoseconds. - Weight::from_parts(38_756_000, 0) - .saturating_add(Weight::from_parts(0, 6208)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:2 w:2) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `351` - // Estimated: `6208` - // Minimum execution time: 43_141_000 picoseconds. - Weight::from_parts(44_187_000, 0) - .saturating_add(Weight::from_parts(0, 6208)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Assets::Asset` (r:1 w:0) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn freeze() -> Weight { - // Proof Size summary in bytes: - // Measured: `351` - // Estimated: `3675` - // Minimum execution time: 16_721_000 picoseconds. - Weight::from_parts(17_433_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:0) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn thaw() -> Weight { - // Proof Size summary in bytes: - // Measured: `351` - // Estimated: `3675` - // Minimum execution time: 16_623_000 picoseconds. - Weight::from_parts(17_110_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn freeze_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `277` - // Estimated: `3675` - // Minimum execution time: 13_079_000 picoseconds. - Weight::from_parts(13_700_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn thaw_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `277` - // Estimated: `3675` - // Minimum execution time: 13_026_000 picoseconds. - Weight::from_parts(13_444_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Metadata` (r:1 w:0) - /// Proof: `Assets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - fn transfer_ownership() -> Weight { - // Proof Size summary in bytes: - // Measured: `243` - // Estimated: `3675` - // Minimum execution time: 13_945_000 picoseconds. - Weight::from_parts(14_792_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn set_team() -> Weight { - // Proof Size summary in bytes: - // Measured: `243` - // Estimated: `3675` - // Minimum execution time: 12_800_000 picoseconds. - Weight::from_parts(13_183_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:0) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Metadata` (r:1 w:1) - /// Proof: `Assets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - fn set_metadata(_n: u32, s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `243` - // Estimated: `3675` - // Minimum execution time: 27_637_000 picoseconds. - Weight::from_parts(28_967_060, 0) - .saturating_add(Weight::from_parts(0, 3675)) - // Standard Error: 464 - .saturating_add(Weight::from_parts(572, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:0) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Metadata` (r:1 w:1) - /// Proof: `Assets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - fn clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `407` - // Estimated: `3675` - // Minimum execution time: 28_427_000 picoseconds. - Weight::from_parts(28_961_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:0) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Metadata` (r:1 w:1) - /// Proof: `Assets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - /// 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 { - // Proof Size summary in bytes: - // Measured: `82` - // Estimated: `3675` - // Minimum execution time: 12_251_000 picoseconds. - Weight::from_parts(12_928_907, 0) - .saturating_add(Weight::from_parts(0, 3675)) - // Standard Error: 244 - .saturating_add(Weight::from_parts(1_800, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:0) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Metadata` (r:1 w:1) - /// Proof: `Assets::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) - fn force_clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `407` - // Estimated: `3675` - // Minimum execution time: 28_263_000 picoseconds. - Weight::from_parts(29_165_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn force_asset_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `243` - // Estimated: `3675` - // Minimum execution time: 12_343_000 picoseconds. - Weight::from_parts(12_659_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Approvals` (r:1 w:1) - /// Proof: `Assets::Approvals` (`max_values`: None, `max_size`: Some(148), added: 2623, mode: `MaxEncodedLen`) - fn approve_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `277` - // Estimated: `3675` - // Minimum execution time: 31_113_000 picoseconds. - Weight::from_parts(31_798_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Approvals` (r:1 w:1) - /// Proof: `Assets::Approvals` (`max_values`: None, `max_size`: Some(148), added: 2623, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:2 w:2) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_approved() -> Weight { - // Proof Size summary in bytes: - // Measured: `521` - // Estimated: `6208` - // Minimum execution time: 61_428_000 picoseconds. - Weight::from_parts(62_707_000, 0) - .saturating_add(Weight::from_parts(0, 6208)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Approvals` (r:1 w:1) - /// Proof: `Assets::Approvals` (`max_values`: None, `max_size`: Some(148), added: 2623, mode: `MaxEncodedLen`) - fn cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `447` - // Estimated: `3675` - // Minimum execution time: 33_538_000 picoseconds. - Weight::from_parts(34_216_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Approvals` (r:1 w:1) - /// Proof: `Assets::Approvals` (`max_values`: None, `max_size`: Some(148), added: 2623, mode: `MaxEncodedLen`) - fn force_cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `447` - // Estimated: `3675` - // Minimum execution time: 33_870_000 picoseconds. - Weight::from_parts(34_709_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn set_min_balance() -> Weight { - // Proof Size summary in bytes: - // Measured: `243` - // Estimated: `3675` - // Minimum execution time: 13_358_000 picoseconds. - Weight::from_parts(13_735_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn touch() -> Weight { - // Proof Size summary in bytes: - // Measured: `346` - // Estimated: `3675` - // Minimum execution time: 32_159_000 picoseconds. - Weight::from_parts(32_998_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn touch_other() -> Weight { - // Proof Size summary in bytes: - // Measured: `243` - // Estimated: `3675` - // Minimum execution time: 30_709_000 picoseconds. - Weight::from_parts(31_486_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn refund() -> Weight { - // Proof Size summary in bytes: - // Measured: `472` - // Estimated: `3675` - // Minimum execution time: 29_557_000 picoseconds. - Weight::from_parts(30_510_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - /// Storage: `Assets::Asset` (r:1 w:1) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - fn refund_other() -> Weight { - // Proof Size summary in bytes: - // Measured: `402` - // Estimated: `3675` - // Minimum execution time: 28_027_000 picoseconds. - Weight::from_parts(28_865_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Assets::Asset` (r:1 w:0) - /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) - /// Storage: `Assets::Account` (r:1 w:1) - /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) - fn block() -> Weight { - // Proof Size summary in bytes: - // Measured: `351` - // Estimated: `3675` - // Minimum execution time: 16_758_000 picoseconds. - Weight::from_parts(17_280_000, 0) - .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_balances.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_balances.rs deleted file mode 100644 index 7c4501e6d88..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_balances.rs +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_balances` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_balances -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_balances`. -pub struct WeightInfo(PhantomData); -impl pallet_balances::WeightInfo for WeightInfo { - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_allow_death() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 56_173_000 picoseconds. - Weight::from_parts(57_097_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_keep_alive() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 41_470_000 picoseconds. - Weight::from_parts(42_051_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_set_balance_creating() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `3593` - // Minimum execution time: 14_771_000 picoseconds. - Weight::from_parts(15_125_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_set_balance_killing() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `3593` - // Minimum execution time: 22_210_000 picoseconds. - Weight::from_parts(22_712_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `6196` - // Minimum execution time: 57_475_000 picoseconds. - Weight::from_parts(58_343_000, 0) - .saturating_add(Weight::from_parts(0, 6196)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_all() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 52_139_000 picoseconds. - Weight::from_parts(52_601_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_unreserve() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `3593` - // Minimum execution time: 17_372_000 picoseconds. - Weight::from_parts(17_978_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:999 w:999) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `u` is `[1, 1000]`. - fn upgrade_accounts(u: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + u * (136 ±0)` - // Estimated: `990 + u * (2603 ±0)` - // Minimum execution time: 17_143_000 picoseconds. - Weight::from_parts(17_475_000, 0) - .saturating_add(Weight::from_parts(0, 990)) - // Standard Error: 16_909 - .saturating_add(Weight::from_parts(15_474_628, 0).saturating_mul(u.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(u.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(u.into()))) - .saturating_add(Weight::from_parts(0, 2603).saturating_mul(u.into())) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_collator_selection.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_collator_selection.rs deleted file mode 100644 index b3062984baf..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_collator_selection.rs +++ /dev/null @@ -1,246 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_collator_selection` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_collator_selection -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_collator_selection`. -pub struct WeightInfo(PhantomData); -impl pallet_collator_selection::WeightInfo for WeightInfo { - /// Storage: `Session::NextKeys` (r:20 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `CollatorSelection::Invulnerables` (r:0 w:1) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 20]`. - fn set_invulnerables(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `163 + b * (79 ±0)` - // Estimated: `1154 + b * (2555 ±0)` - // Minimum execution time: 14_882_000 picoseconds. - Weight::from_parts(12_290_529, 0) - .saturating_add(Weight::from_parts(0, 1154)) - // Standard Error: 6_842 - .saturating_add(Weight::from_parts(3_189_571, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(Weight::from_parts(0, 2555).saturating_mul(b.into())) - } - /// Storage: `Session::NextKeys` (r:1 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:1) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Candidates` (r:1 w:1) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 19]`. - /// The range of component `c` is `[1, 99]`. - fn add_invulnerable(b: u32, c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `756 + b * (32 ±0) + c * (53 ±0)` - // Estimated: `6287 + b * (37 ±0) + c * (53 ±0)` - // Minimum execution time: 48_113_000 picoseconds. - Weight::from_parts(49_767_909, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_725 - .saturating_add(Weight::from_parts(232_655, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - .saturating_add(Weight::from_parts(0, 37).saturating_mul(b.into())) - .saturating_add(Weight::from_parts(0, 53).saturating_mul(c.into())) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:0) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:1) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// The range of component `b` is `[5, 20]`. - fn remove_invulnerable(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `119 + b * (32 ±0)` - // Estimated: `6287` - // Minimum execution time: 16_228_000 picoseconds. - Weight::from_parts(16_351_387, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_953 - .saturating_add(Weight::from_parts(140_754, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `CollatorSelection::DesiredCandidates` (r:0 w:1) - /// Proof: `CollatorSelection::DesiredCandidates` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - fn set_desired_candidates() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_541_000 picoseconds. - Weight::from_parts(7_720_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `CollatorSelection::CandidacyBond` (r:0 w:1) - /// Proof: `CollatorSelection::CandidacyBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - fn set_candidacy_bond(_c: u32, _k: u32) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_402_000 picoseconds. - Weight::from_parts(7_729_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:1) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::DesiredCandidates` (r:1 w:0) - /// Proof: `CollatorSelection::DesiredCandidates` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `Session::NextKeys` (r:1 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `CollatorSelection::CandidacyBond` (r:1 w:0) - /// Proof: `CollatorSelection::CandidacyBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - /// The range of component `c` is `[1, 99]`. - fn register_as_candidate(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `736 + c * (52 ±0)` - // Estimated: `6287 + c * (54 ±0)` - // Minimum execution time: 41_874_000 picoseconds. - Weight::from_parts(45_654_015, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_317 - .saturating_add(Weight::from_parts(221_237, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(2)) - .saturating_add(Weight::from_parts(0, 54).saturating_mul(c.into())) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:1) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - /// The range of component `c` is `[4, 100]`. - fn leave_intent(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `306 + c * (50 ±0)` - // Estimated: `6287` - // Minimum execution time: 33_693_000 picoseconds. - Weight::from_parts(37_321_527, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 3_499 - .saturating_add(Weight::from_parts(182_068, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - fn update_bond(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `306 + c * (50 ±0)` - // Estimated: `6287` - // Minimum execution time: 34_814_000 picoseconds. - Weight::from_parts(36_371_520, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_391 - .saturating_add(Weight::from_parts(201_700, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - fn take_candidate_slot(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `306 + c * (50 ±0)` - // Estimated: `6287` - // Minimum execution time: 34_814_000 picoseconds. - Weight::from_parts(36_371_520, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_391 - .saturating_add(Weight::from_parts(201_700, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `System::BlockWeight` (r:1 w:1) - /// Proof: `System::BlockWeight` (`max_values`: Some(1), `max_size`: Some(48), added: 543, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - fn note_author() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `6196` - // Minimum execution time: 44_412_000 picoseconds. - Weight::from_parts(45_196_000, 0) - .saturating_add(Weight::from_parts(0, 6196)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:0) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:100 w:0) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `System::BlockWeight` (r:1 w:1) - /// Proof: `System::BlockWeight` (`max_values`: Some(1), `max_size`: Some(48), added: 543, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:97 w:97) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 100]`. - /// The range of component `c` is `[1, 100]`. - fn new_session(r: u32, c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `2243 + c * (97 ±0) + r * (112 ±0)` - // Estimated: `6287 + c * (2519 ±0) + r * (2603 ±0)` - // Minimum execution time: 17_360_000 picoseconds. - Weight::from_parts(17_599_000, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 350_829 - .saturating_add(Weight::from_parts(15_375_949, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) - .saturating_add(Weight::from_parts(0, 2519).saturating_mul(c.into())) - .saturating_add(Weight::from_parts(0, 2603).saturating_mul(r.into())) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_message_queue.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_message_queue.rs deleted file mode 100644 index a9f0cb07cfe..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_message_queue.rs +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_message_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-03-24, STEPS: `2`, REPEAT: `1`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `i9`, CPU: `13th Gen Intel(R) Core(TM) i9-13900K` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/polkadot-parachain -// benchmark -// pallet -// --chain -// westmint-dev -// --pallet -// pallet_message_queue -// --extrinsic -// * -// --execution -// wasm -// --wasm-execution -// compiled -// --output -// parachains/runtimes/assets/westmint/src/weights - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::Weight}; -use sp_std::marker::PhantomData; - -/// Weight functions for `pallet_message_queue`. -pub struct WeightInfo(PhantomData); -impl pallet_message_queue::WeightInfo for WeightInfo { - /// Storage: MessageQueue ServiceHead (r:1 w:0) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: MessageQueue BookStateFor (r:2 w:2) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn ready_ring_knit() -> Weight { - // Proof Size summary in bytes: - // Measured: `189` - // Estimated: `7534` - // Minimum execution time: 12_192_000 picoseconds. - Weight::from_parts(12_192_000, 0) - .saturating_add(Weight::from_parts(0, 7534)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:2 w:2) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - fn ready_ring_unknit() -> Weight { - // Proof Size summary in bytes: - // Measured: `184` - // Estimated: `7534` - // Minimum execution time: 10_447_000 picoseconds. - Weight::from_parts(10_447_000, 0) - .saturating_add(Weight::from_parts(0, 7534)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn service_queue_base() -> Weight { - // Proof Size summary in bytes: - // Measured: `6` - // Estimated: `3517` - // Minimum execution time: 4_851_000 picoseconds. - Weight::from_parts(4_851_000, 0) - .saturating_add(Weight::from_parts(0, 3517)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn service_page_base_completion() -> Weight { - // Proof Size summary in bytes: - // Measured: `72` - // Estimated: `69050` - // Minimum execution time: 6_342_000 picoseconds. - Weight::from_parts(6_342_000, 0) - .saturating_add(Weight::from_parts(0, 69050)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn service_page_base_no_completion() -> Weight { - // Proof Size summary in bytes: - // Measured: `72` - // Estimated: `69050` - // Minimum execution time: 6_199_000 picoseconds. - Weight::from_parts(6_199_000, 0) - .saturating_add(Weight::from_parts(0, 69050)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn service_page_item() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 58_612_000 picoseconds. - Weight::from_parts(58_612_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: MessageQueue BookStateFor (r:1 w:0) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn bump_service_head() -> Weight { - // Proof Size summary in bytes: - // Measured: `99` - // Estimated: `5007` - // Minimum execution time: 7_296_000 picoseconds. - Weight::from_parts(7_296_000, 0) - .saturating_add(Weight::from_parts(0, 5007)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn reap_page() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 48_345_000 picoseconds. - Weight::from_parts(48_345_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn execute_overweight_page_removed() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 56_441_000 picoseconds. - Weight::from_parts(56_441_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn execute_overweight_page_updated() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 70_858_000 picoseconds. - Weight::from_parts(70_858_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_multisig.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_multisig.rs deleted file mode 100644 index 0bb05511d7a..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_multisig.rs +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_multisig` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_multisig -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_multisig`. -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 { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 13_710_000 picoseconds. - Weight::from_parts(14_702_959, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 7 - .saturating_add(Weight::from_parts(568, 0).saturating_mul(z.into())) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_create(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `262 + s * (2 ±0)` - // Estimated: `6811` - // Minimum execution time: 45_518_000 picoseconds. - Weight::from_parts(35_243_068, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_634 - .saturating_add(Weight::from_parts(116_658, 0).saturating_mul(s.into())) - // Standard Error: 16 - .saturating_add(Weight::from_parts(1_444, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[3, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_approve(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `6811` - // Minimum execution time: 29_590_000 picoseconds. - Weight::from_parts(21_574_604, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_622 - .saturating_add(Weight::from_parts(95_669, 0).saturating_mul(s.into())) - // Standard Error: 15 - .saturating_add(Weight::from_parts(1_459, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_complete(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `385 + s * (33 ±0)` - // Estimated: `6811` - // Minimum execution time: 51_056_000 picoseconds. - Weight::from_parts(35_799_301, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_629 - .saturating_add(Weight::from_parts(183_343, 0).saturating_mul(s.into())) - // Standard Error: 15 - .saturating_add(Weight::from_parts(1_686, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_create(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `263 + s * (2 ±0)` - // Estimated: `6811` - // Minimum execution time: 30_910_000 picoseconds. - Weight::from_parts(32_413_023, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_346 - .saturating_add(Weight::from_parts(128_779, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_approve(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `6811` - // Minimum execution time: 17_926_000 picoseconds. - Weight::from_parts(18_477_305, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_367 - .saturating_add(Weight::from_parts(113_018, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn cancel_as_multi(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `454 + s * (1 ±0)` - // Estimated: `6811` - // Minimum execution time: 32_232_000 picoseconds. - Weight::from_parts(33_724_753, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_192 - .saturating_add(Weight::from_parts(121_574, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_nfts.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_nfts.rs deleted file mode 100644 index 842daf49f59..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_nfts.rs +++ /dev/null @@ -1,772 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_nfts` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_nfts -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_nfts`. -pub struct WeightInfo(PhantomData); -impl pallet_nfts::WeightInfo for WeightInfo { - /// Storage: `Nfts::NextCollectionId` (r:1 w:1) - /// Proof: `Nfts::NextCollectionId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionRoleOf` (r:0 w:1) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:0 w:1) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionAccount` (r:0 w:1) - /// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - fn create() -> Weight { - // Proof Size summary in bytes: - // Measured: `145` - // Estimated: `3549` - // Minimum execution time: 37_915_000 picoseconds. - Weight::from_parts(39_275_000, 0) - .saturating_add(Weight::from_parts(0, 3549)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `Nfts::NextCollectionId` (r:1 w:1) - /// Proof: `Nfts::NextCollectionId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionRoleOf` (r:0 w:1) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:0 w:1) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionAccount` (r:0 w:1) - /// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - fn force_create() -> Weight { - // Proof Size summary in bytes: - // Measured: `42` - // Estimated: `3549` - // Minimum execution time: 22_722_000 picoseconds. - Weight::from_parts(23_500_000, 0) - .saturating_add(Weight::from_parts(0, 3549)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemMetadataOf` (r:1 w:0) - /// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(347), added: 2822, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:1) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:1001 w:1000) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1000 w:1000) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionMetadataOf` (r:0 w:1) - /// Proof: `Nfts::CollectionMetadataOf` (`max_values`: None, `max_size`: Some(294), added: 2769, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:0 w:1) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionAccount` (r:0 w:1) - /// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - /// The range of component `m` is `[0, 1000]`. - /// The range of component `c` is `[0, 1000]`. - /// The range of component `a` is `[0, 1000]`. - fn destroy(_m: u32, _c: u32, a: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `32170 + a * (366 ±0)` - // Estimated: `2523990 + a * (2954 ±0)` - // Minimum execution time: 1_231_520_000 picoseconds. - Weight::from_parts(1_228_960_098, 0) - .saturating_add(Weight::from_parts(0, 2523990)) - // Standard Error: 8_836 - .saturating_add(Weight::from_parts(6_818_975, 0).saturating_mul(a.into())) - .saturating_add(T::DbWeight::get().reads(1004)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) - .saturating_add(T::DbWeight::get().writes(1005)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) - .saturating_add(Weight::from_parts(0, 2954).saturating_mul(a.into())) - } - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:1) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Account` (r:0 w:1) - /// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - fn mint() -> Weight { - // Proof Size summary in bytes: - // Measured: `421` - // Estimated: `4326` - // Minimum execution time: 48_581_000 picoseconds. - Weight::from_parts(50_020_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:1) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Account` (r:0 w:1) - /// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - fn force_mint() -> Weight { - // Proof Size summary in bytes: - // Measured: `421` - // Estimated: `4326` - // Minimum execution time: 47_171_000 picoseconds. - Weight::from_parts(48_084_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Nfts::Attribute` (r:1 w:0) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:1) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemMetadataOf` (r:1 w:0) - /// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(347), added: 2822, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Account` (r:0 w:1) - /// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemPriceOf` (r:0 w:1) - /// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemAttributesApprovalsOf` (r:0 w:1) - /// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(1001), added: 3476, mode: `MaxEncodedLen`) - /// Storage: `Nfts::PendingSwapOf` (r:0 w:1) - /// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`) - fn burn() -> Weight { - // Proof Size summary in bytes: - // Measured: `530` - // Estimated: `4326` - // Minimum execution time: 53_591_000 picoseconds. - Weight::from_parts(55_074_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(7)) - } - /// Storage: `Nfts::Collection` (r:1 w:0) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:1 w:0) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:0) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Account` (r:0 w:2) - /// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemPriceOf` (r:0 w:1) - /// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - /// Storage: `Nfts::PendingSwapOf` (r:0 w:1) - /// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`) - fn transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `559` - // Estimated: `4326` - // Minimum execution time: 40_935_000 picoseconds. - Weight::from_parts(41_835_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `Nfts::Collection` (r:1 w:0) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Item` (r:5000 w:5000) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// The range of component `i` is `[0, 5000]`. - fn redeposit(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `729 + i * (108 ±0)` - // Estimated: `3549 + i * (3336 ±0)` - // Minimum execution time: 16_543_000 picoseconds. - Weight::from_parts(16_769_000, 0) - .saturating_add(Weight::from_parts(0, 3549)) - // Standard Error: 23_638 - .saturating_add(Weight::from_parts(17_762_895, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - .saturating_add(Weight::from_parts(0, 3336).saturating_mul(i.into())) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:1) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - fn lock_item_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `401` - // Estimated: `3534` - // Minimum execution time: 20_446_000 picoseconds. - Weight::from_parts(20_740_000, 0) - .saturating_add(Weight::from_parts(0, 3534)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:1) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - fn unlock_item_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `401` - // Estimated: `3534` - // Minimum execution time: 20_088_000 picoseconds. - Weight::from_parts(20_627_000, 0) - .saturating_add(Weight::from_parts(0, 3534)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Collection` (r:1 w:0) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:1) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - fn lock_collection() -> Weight { - // Proof Size summary in bytes: - // Measured: `306` - // Estimated: `3549` - // Minimum execution time: 17_036_000 picoseconds. - Weight::from_parts(17_435_000, 0) - .saturating_add(Weight::from_parts(0, 3549)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::OwnershipAcceptance` (r:1 w:1) - /// Proof: `Nfts::OwnershipAcceptance` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionAccount` (r:0 w:2) - /// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - fn transfer_ownership() -> Weight { - // Proof Size summary in bytes: - // Measured: `354` - // Estimated: `3549` - // Minimum execution time: 22_528_000 picoseconds. - Weight::from_parts(23_047_000, 0) - .saturating_add(Weight::from_parts(0, 3549)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionRoleOf` (r:2 w:4) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - fn set_team() -> Weight { - // Proof Size summary in bytes: - // Measured: `335` - // Estimated: `6078` - // Minimum execution time: 38_473_000 picoseconds. - Weight::from_parts(39_353_000, 0) - .saturating_add(Weight::from_parts(0, 6078)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionAccount` (r:0 w:2) - /// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - fn force_collection_owner() -> Weight { - // Proof Size summary in bytes: - // Measured: `277` - // Estimated: `3549` - // Minimum execution time: 17_708_000 picoseconds. - Weight::from_parts(18_022_000, 0) - .saturating_add(Weight::from_parts(0, 3549)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Nfts::Collection` (r:1 w:0) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:0 w:1) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - fn force_collection_config() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `3549` - // Minimum execution time: 14_606_000 picoseconds. - Weight::from_parts(14_891_000, 0) - .saturating_add(Weight::from_parts(0, 3549)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:1) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - fn lock_item_properties() -> Weight { - // Proof Size summary in bytes: - // Measured: `401` - // Estimated: `3534` - // Minimum execution time: 19_492_000 picoseconds. - Weight::from_parts(19_919_000, 0) - .saturating_add(Weight::from_parts(0, 3534)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:0) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:1 w:1) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - fn set_attribute() -> Weight { - // Proof Size summary in bytes: - // Measured: `505` - // Estimated: `3944` - // Minimum execution time: 50_583_000 picoseconds. - Weight::from_parts(53_846_000, 0) - .saturating_add(Weight::from_parts(0, 3944)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:1 w:1) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - fn force_set_attribute() -> Weight { - // Proof Size summary in bytes: - // Measured: `310` - // Estimated: `3944` - // Minimum execution time: 25_937_000 picoseconds. - Weight::from_parts(26_540_000, 0) - .saturating_add(Weight::from_parts(0, 3944)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Nfts::Attribute` (r:1 w:1) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:0) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - fn clear_attribute() -> Weight { - // Proof Size summary in bytes: - // Measured: `949` - // Estimated: `3944` - // Minimum execution time: 45_738_000 picoseconds. - Weight::from_parts(46_468_000, 0) - .saturating_add(Weight::from_parts(0, 3944)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Nfts::Item` (r:1 w:0) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemAttributesApprovalsOf` (r:1 w:1) - /// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(1001), added: 3476, mode: `MaxEncodedLen`) - fn approve_item_attributes() -> Weight { - // Proof Size summary in bytes: - // Measured: `347` - // Estimated: `4466` - // Minimum execution time: 17_361_000 picoseconds. - Weight::from_parts(18_191_000, 0) - .saturating_add(Weight::from_parts(0, 4466)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Item` (r:1 w:0) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemAttributesApprovalsOf` (r:1 w:1) - /// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(1001), added: 3476, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:1001 w:1000) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 1000]`. - fn cancel_item_attributes_approval(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `726 + n * (398 ±0)` - // Estimated: `4466 + n * (2954 ±0)` - // Minimum execution time: 25_884_000 picoseconds. - Weight::from_parts(26_265_000, 0) - .saturating_add(Weight::from_parts(0, 4466)) - // Standard Error: 6_423 - .saturating_add(Weight::from_parts(6_507_369, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) - .saturating_add(T::DbWeight::get().writes(2)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) - .saturating_add(Weight::from_parts(0, 2954).saturating_mul(n.into())) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:0) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemMetadataOf` (r:1 w:1) - /// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(347), added: 2822, mode: `MaxEncodedLen`) - fn set_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `505` - // Estimated: `3812` - // Minimum execution time: 40_802_000 picoseconds. - Weight::from_parts(41_742_000, 0) - .saturating_add(Weight::from_parts(0, 3812)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemMetadataOf` (r:1 w:1) - /// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(347), added: 2822, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:0) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - fn clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `815` - // Estimated: `3812` - // Minimum execution time: 38_904_000 picoseconds. - Weight::from_parts(39_919_000, 0) - .saturating_add(Weight::from_parts(0, 3812)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionMetadataOf` (r:1 w:1) - /// Proof: `Nfts::CollectionMetadataOf` (`max_values`: None, `max_size`: Some(294), added: 2769, mode: `MaxEncodedLen`) - fn set_collection_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `364` - // Estimated: `3759` - // Minimum execution time: 37_012_000 picoseconds. - Weight::from_parts(37_632_000, 0) - .saturating_add(Weight::from_parts(0, 3759)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:0) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionMetadataOf` (r:1 w:1) - /// Proof: `Nfts::CollectionMetadataOf` (`max_values`: None, `max_size`: Some(294), added: 2769, mode: `MaxEncodedLen`) - fn clear_collection_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `682` - // Estimated: `3759` - // Minimum execution time: 36_243_000 picoseconds. - Weight::from_parts(37_313_000, 0) - .saturating_add(Weight::from_parts(0, 3759)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - fn approve_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `376` - // Estimated: `4326` - // Minimum execution time: 20_919_000 picoseconds. - Weight::from_parts(21_505_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - fn cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `384` - // Estimated: `4326` - // Minimum execution time: 18_943_000 picoseconds. - Weight::from_parts(19_969_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - fn clear_all_transfer_approvals() -> Weight { - // Proof Size summary in bytes: - // Measured: `384` - // Estimated: `4326` - // Minimum execution time: 17_320_000 picoseconds. - Weight::from_parts(18_071_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::OwnershipAcceptance` (r:1 w:1) - /// Proof: `Nfts::OwnershipAcceptance` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn set_accept_ownership() -> Weight { - // Proof Size summary in bytes: - // Measured: `42` - // Estimated: `3517` - // Minimum execution time: 14_934_000 picoseconds. - Weight::from_parts(15_422_000, 0) - .saturating_add(Weight::from_parts(0, 3517)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:1) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:0) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - fn set_collection_max_supply() -> Weight { - // Proof Size summary in bytes: - // Measured: `306` - // Estimated: `3549` - // Minimum execution time: 18_715_000 picoseconds. - Weight::from_parts(19_025_000, 0) - .saturating_add(Weight::from_parts(0, 3549)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::CollectionRoleOf` (r:1 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:1) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - fn update_mint_settings() -> Weight { - // Proof Size summary in bytes: - // Measured: `289` - // Estimated: `3538` - // Minimum execution time: 18_249_000 picoseconds. - Weight::from_parts(18_826_000, 0) - .saturating_add(Weight::from_parts(0, 3538)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Item` (r:1 w:0) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:0) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemPriceOf` (r:0 w:1) - /// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - fn set_price() -> Weight { - // Proof Size summary in bytes: - // Measured: `484` - // Estimated: `4326` - // Minimum execution time: 23_529_000 picoseconds. - Weight::from_parts(23_958_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemPriceOf` (r:1 w:1) - /// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:0) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:1 w:0) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:0) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Account` (r:0 w:2) - /// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - /// Storage: `Nfts::PendingSwapOf` (r:0 w:1) - /// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`) - fn buy_item() -> Weight { - // Proof Size summary in bytes: - // Measured: `671` - // Estimated: `4326` - // Minimum execution time: 50_885_000 picoseconds. - Weight::from_parts(52_157_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// The range of component `n` is `[0, 10]`. - fn pay_tips(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_258_000 picoseconds. - Weight::from_parts(3_342_691, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 6_268 - .saturating_add(Weight::from_parts(3_761_373, 0).saturating_mul(n.into())) - } - /// Storage: `Nfts::Item` (r:2 w:0) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::PendingSwapOf` (r:0 w:1) - /// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`) - fn create_swap() -> Weight { - // Proof Size summary in bytes: - // Measured: `460` - // Estimated: `7662` - // Minimum execution time: 21_220_000 picoseconds. - Weight::from_parts(21_654_000, 0) - .saturating_add(Weight::from_parts(0, 7662)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::PendingSwapOf` (r:1 w:1) - /// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Item` (r:1 w:0) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - fn cancel_swap() -> Weight { - // Proof Size summary in bytes: - // Measured: `479` - // Estimated: `4326` - // Minimum execution time: 20_430_000 picoseconds. - Weight::from_parts(21_038_000, 0) - .saturating_add(Weight::from_parts(0, 4326)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Nfts::Item` (r:2 w:2) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::PendingSwapOf` (r:1 w:2) - /// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:0) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:2 w:0) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:2 w:0) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Account` (r:0 w:4) - /// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemPriceOf` (r:0 w:2) - /// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - fn claim_swap() -> Weight { - // Proof Size summary in bytes: - // Measured: `800` - // Estimated: `7662` - // Minimum execution time: 83_344_000 picoseconds. - Weight::from_parts(84_898_000, 0) - .saturating_add(Weight::from_parts(0, 7662)) - .saturating_add(T::DbWeight::get().reads(9)) - .saturating_add(T::DbWeight::get().writes(10)) - } - /// Storage: `Nfts::CollectionRoleOf` (r:2 w:0) - /// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Item` (r:1 w:1) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemConfigOf` (r:1 w:1) - /// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:10 w:10) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemMetadataOf` (r:1 w:1) - /// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(347), added: 2822, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Account` (r:0 w:1) - /// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 10]`. - fn mint_pre_signed(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `524` - // Estimated: `6078 + n * (2954 ±0)` - // Minimum execution time: 143_435_000 picoseconds. - Weight::from_parts(151_744_537, 0) - .saturating_add(Weight::from_parts(0, 6078)) - // Standard Error: 44_459 - .saturating_add(Weight::from_parts(31_293_503, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) - .saturating_add(T::DbWeight::get().writes(6)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) - .saturating_add(Weight::from_parts(0, 2954).saturating_mul(n.into())) - } - /// Storage: `Nfts::Item` (r:1 w:0) - /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(861), added: 3336, mode: `MaxEncodedLen`) - /// Storage: `Nfts::ItemAttributesApprovalsOf` (r:1 w:1) - /// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(1001), added: 3476, mode: `MaxEncodedLen`) - /// Storage: `Nfts::CollectionConfigOf` (r:1 w:0) - /// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Collection` (r:1 w:1) - /// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) - /// Storage: `Nfts::Attribute` (r:10 w:10) - /// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(479), added: 2954, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 10]`. - fn set_attributes_pre_signed(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `554` - // Estimated: `4466 + n * (2954 ±0)` - // Minimum execution time: 84_627_000 picoseconds. - Weight::from_parts(96_076_065, 0) - .saturating_add(Weight::from_parts(0, 4466)) - // Standard Error: 62_058 - .saturating_add(Weight::from_parts(30_461_383, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) - .saturating_add(T::DbWeight::get().writes(2)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) - .saturating_add(Weight::from_parts(0, 2954).saturating_mul(n.into())) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_proxy.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_proxy.rs deleted file mode 100644 index b6121f2fca2..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_proxy.rs +++ /dev/null @@ -1,225 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_proxy` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_proxy -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_proxy`. -pub struct WeightInfo(PhantomData); -impl pallet_proxy::WeightInfo for WeightInfo { - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `127 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 16_130_000 picoseconds. - Weight::from_parts(16_649_312, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 761 - .saturating_add(Weight::from_parts(42_507, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - } - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn proxy_announced(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `454 + a * (68 ±0) + p * (37 ±0)` - // Estimated: `5698` - // Minimum execution time: 37_732_000 picoseconds. - Weight::from_parts(36_993_926, 0) - .saturating_add(Weight::from_parts(0, 5698)) - // Standard Error: 3_278 - .saturating_add(Weight::from_parts(144_955, 0).saturating_mul(a.into())) - // Standard Error: 3_387 - .saturating_add(Weight::from_parts(64_624, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn remove_announcement(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `369 + a * (68 ±0)` - // Estimated: `5698` - // Minimum execution time: 24_229_000 picoseconds. - Weight::from_parts(24_199_507, 0) - .saturating_add(Weight::from_parts(0, 5698)) - // Standard Error: 1_672 - .saturating_add(Weight::from_parts(124_324, 0).saturating_mul(a.into())) - // Standard Error: 1_727 - .saturating_add(Weight::from_parts(28_481, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn reject_announcement(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `369 + a * (68 ±0)` - // Estimated: `5698` - // Minimum execution time: 23_868_000 picoseconds. - Weight::from_parts(25_293_069, 0) - .saturating_add(Weight::from_parts(0, 5698)) - // Standard Error: 1_728 - .saturating_add(Weight::from_parts(114_080, 0).saturating_mul(a.into())) - // Standard Error: 1_786 - .saturating_add(Weight::from_parts(3_690, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn announce(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `386 + a * (68 ±0) + p * (37 ±0)` - // Estimated: `5698` - // Minimum execution time: 34_343_000 picoseconds. - Weight::from_parts(34_539_112, 0) - .saturating_add(Weight::from_parts(0, 5698)) - // Standard Error: 1_917 - .saturating_add(Weight::from_parts(117_360, 0).saturating_mul(a.into())) - // Standard Error: 1_981 - .saturating_add(Weight::from_parts(40_908, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn add_proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `127 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 25_506_000 picoseconds. - Weight::from_parts(26_350_920, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 2_950 - .saturating_add(Weight::from_parts(48_972, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn remove_proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `127 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 25_234_000 picoseconds. - Weight::from_parts(26_232_489, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 2_468 - .saturating_add(Weight::from_parts(48_955, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn remove_proxies(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `127 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 22_184_000 picoseconds. - Weight::from_parts(22_974_929, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 2_200 - .saturating_add(Weight::from_parts(45_741, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn create_pure(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `139` - // Estimated: `4706` - // Minimum execution time: 27_044_000 picoseconds. - Weight::from_parts(27_978_605, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 2_206 - .saturating_add(Weight::from_parts(13_736, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[0, 30]`. - fn kill_pure(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `164 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 22_770_000 picoseconds. - Weight::from_parts(23_441_470, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 1_959 - .saturating_add(Weight::from_parts(47_317, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_session.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_session.rs deleted file mode 100644 index 560322abeb3..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_session.rs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_session` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_session -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_session`. -pub struct WeightInfo(PhantomData); -impl pallet_session::WeightInfo for WeightInfo { - /// Storage: `Session::NextKeys` (r:1 w:1) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Session::KeyOwner` (r:1 w:1) - /// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn set_keys() -> Weight { - // Proof Size summary in bytes: - // Measured: `270` - // Estimated: `3735` - // Minimum execution time: 16_684_000 picoseconds. - Weight::from_parts(17_167_000, 0) - .saturating_add(Weight::from_parts(0, 3735)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Session::NextKeys` (r:1 w:1) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Session::KeyOwner` (r:0 w:1) - /// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn purge_keys() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `3707` - // Minimum execution time: 11_692_000 picoseconds. - Weight::from_parts(12_248_000, 0) - .saturating_add(Weight::from_parts(0, 3707)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_timestamp.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_timestamp.rs deleted file mode 100644 index 17b050c3e90..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_timestamp.rs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_timestamp` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_timestamp -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_timestamp`. -pub struct WeightInfo(PhantomData); -impl pallet_timestamp::WeightInfo for WeightInfo { - /// Storage: `Timestamp::Now` (r:1 w:1) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `Aura::CurrentSlot` (r:1 w:0) - /// Proof: `Aura::CurrentSlot` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - fn set() -> Weight { - // Proof Size summary in bytes: - // Measured: `86` - // Estimated: `1493` - // Minimum execution time: 9_214_000 picoseconds. - Weight::from_parts(9_535_000, 0) - .saturating_add(Weight::from_parts(0, 1493)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn on_finalize() -> Weight { - // Proof Size summary in bytes: - // Measured: `57` - // Estimated: `0` - // Minimum execution time: 3_269_000 picoseconds. - Weight::from_parts(3_458_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_uniques.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_uniques.rs deleted file mode 100644 index 5b13d56f5bb..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_uniques.rs +++ /dev/null @@ -1,466 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_uniques` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_uniques -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_uniques`. -pub struct WeightInfo(PhantomData); -impl pallet_uniques::WeightInfo for WeightInfo { - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ClassAccount` (r:0 w:1) - /// Proof: `Uniques::ClassAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - fn create() -> Weight { - // Proof Size summary in bytes: - // Measured: `145` - // Estimated: `3643` - // Minimum execution time: 29_513_000 picoseconds. - Weight::from_parts(30_346_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ClassAccount` (r:0 w:1) - /// Proof: `Uniques::ClassAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - fn force_create() -> Weight { - // Proof Size summary in bytes: - // Measured: `42` - // Estimated: `3643` - // Minimum execution time: 13_600_000 picoseconds. - Weight::from_parts(14_110_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Asset` (r:1001 w:1000) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// Storage: `Uniques::InstanceMetadataOf` (r:1000 w:1000) - /// Proof: `Uniques::InstanceMetadataOf` (`max_values`: None, `max_size`: Some(187), added: 2662, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Attribute` (r:1000 w:1000) - /// Proof: `Uniques::Attribute` (`max_values`: None, `max_size`: Some(172), added: 2647, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ClassAccount` (r:0 w:1) - /// Proof: `Uniques::ClassAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ClassMetadataOf` (r:0 w:1) - /// Proof: `Uniques::ClassMetadataOf` (`max_values`: None, `max_size`: Some(167), added: 2642, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Account` (r:0 w:1000) - /// Proof: `Uniques::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - /// Storage: `Uniques::CollectionMaxSupply` (r:0 w:1) - /// Proof: `Uniques::CollectionMaxSupply` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 1000]`. - /// 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 { - // Proof Size summary in bytes: - // Measured: `257 + a * (107 ±0) + m * (56 ±0) + n * (76 ±0)` - // Estimated: `3643 + a * (2647 ±0) + m * (2662 ±0) + n * (2597 ±0)` - // Minimum execution time: 2_945_869_000 picoseconds. - Weight::from_parts(3_037_917_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - // Standard Error: 35_850 - .saturating_add(Weight::from_parts(7_558_563, 0).saturating_mul(n.into())) - // Standard Error: 35_850 - .saturating_add(Weight::from_parts(501_089, 0).saturating_mul(m.into())) - // Standard Error: 35_850 - .saturating_add(Weight::from_parts(538_921, 0).saturating_mul(a.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(m.into()))) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) - .saturating_add(T::DbWeight::get().writes(4)) - .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(m.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) - .saturating_add(Weight::from_parts(0, 2647).saturating_mul(a.into())) - .saturating_add(Weight::from_parts(0, 2662).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 2597).saturating_mul(n.into())) - } - /// Storage: `Uniques::Asset` (r:1 w:1) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::CollectionMaxSupply` (r:1 w:0) - /// Proof: `Uniques::CollectionMaxSupply` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Account` (r:0 w:1) - /// Proof: `Uniques::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - fn mint() -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `3643` - // Minimum execution time: 36_225_000 picoseconds. - Weight::from_parts(36_858_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Asset` (r:1 w:1) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Account` (r:0 w:1) - /// Proof: `Uniques::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ItemPriceOf` (r:0 w:1) - /// Proof: `Uniques::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - fn burn() -> Weight { - // Proof Size summary in bytes: - // Measured: `428` - // Estimated: `3643` - // Minimum execution time: 37_021_000 picoseconds. - Weight::from_parts(37_749_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Uniques::Class` (r:1 w:0) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Asset` (r:1 w:1) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Account` (r:0 w:2) - /// Proof: `Uniques::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ItemPriceOf` (r:0 w:1) - /// Proof: `Uniques::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - fn transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `428` - // Estimated: `3643` - // Minimum execution time: 26_884_000 picoseconds. - Weight::from_parts(27_414_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Asset` (r:5000 w:5000) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// The range of component `i` is `[0, 5000]`. - fn redeposit(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `738 + i * (76 ±0)` - // Estimated: `3643 + i * (2597 ±0)` - // Minimum execution time: 14_797_000 picoseconds. - Weight::from_parts(14_943_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - // Standard Error: 25_250 - .saturating_add(Weight::from_parts(18_014_600, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - .saturating_add(Weight::from_parts(0, 2597).saturating_mul(i.into())) - } - /// Storage: `Uniques::Asset` (r:1 w:1) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Class` (r:1 w:0) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - fn freeze() -> Weight { - // Proof Size summary in bytes: - // Measured: `428` - // Estimated: `3643` - // Minimum execution time: 18_864_000 picoseconds. - Weight::from_parts(19_299_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::Asset` (r:1 w:1) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Class` (r:1 w:0) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - fn thaw() -> Weight { - // Proof Size summary in bytes: - // Measured: `428` - // Estimated: `3643` - // Minimum execution time: 18_530_000 picoseconds. - Weight::from_parts(19_230_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - fn freeze_collection() -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `3643` - // Minimum execution time: 13_807_000 picoseconds. - Weight::from_parts(14_270_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - fn thaw_collection() -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `3643` - // Minimum execution time: 13_657_000 picoseconds. - Weight::from_parts(14_059_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::OwnershipAcceptance` (r:1 w:1) - /// Proof: `Uniques::OwnershipAcceptance` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ClassAccount` (r:0 w:2) - /// Proof: `Uniques::ClassAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - fn transfer_ownership() -> Weight { - // Proof Size summary in bytes: - // Measured: `356` - // Estimated: `3643` - // Minimum execution time: 22_108_000 picoseconds. - Weight::from_parts(22_520_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - fn set_team() -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `3643` - // Minimum execution time: 14_128_000 picoseconds. - Weight::from_parts(14_481_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ClassAccount` (r:0 w:1) - /// Proof: `Uniques::ClassAccount` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - fn force_item_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `3643` - // Minimum execution time: 17_114_000 picoseconds. - Weight::from_parts(17_570_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::InstanceMetadataOf` (r:1 w:0) - /// Proof: `Uniques::InstanceMetadataOf` (`max_values`: None, `max_size`: Some(187), added: 2662, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Attribute` (r:1 w:1) - /// Proof: `Uniques::Attribute` (`max_values`: None, `max_size`: Some(172), added: 2647, mode: `MaxEncodedLen`) - fn set_attribute() -> Weight { - // Proof Size summary in bytes: - // Measured: `559` - // Estimated: `3652` - // Minimum execution time: 40_412_000 picoseconds. - Weight::from_parts(43_009_000, 0) - .saturating_add(Weight::from_parts(0, 3652)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::InstanceMetadataOf` (r:1 w:0) - /// Proof: `Uniques::InstanceMetadataOf` (`max_values`: None, `max_size`: Some(187), added: 2662, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Attribute` (r:1 w:1) - /// Proof: `Uniques::Attribute` (`max_values`: None, `max_size`: Some(172), added: 2647, mode: `MaxEncodedLen`) - fn clear_attribute() -> Weight { - // Proof Size summary in bytes: - // Measured: `756` - // Estimated: `3652` - // Minimum execution time: 38_044_000 picoseconds. - Weight::from_parts(38_871_000, 0) - .saturating_add(Weight::from_parts(0, 3652)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::InstanceMetadataOf` (r:1 w:1) - /// Proof: `Uniques::InstanceMetadataOf` (`max_values`: None, `max_size`: Some(187), added: 2662, mode: `MaxEncodedLen`) - fn set_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `348` - // Estimated: `3652` - // Minimum execution time: 30_016_000 picoseconds. - Weight::from_parts(30_723_000, 0) - .saturating_add(Weight::from_parts(0, 3652)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::InstanceMetadataOf` (r:1 w:1) - /// Proof: `Uniques::InstanceMetadataOf` (`max_values`: None, `max_size`: Some(187), added: 2662, mode: `MaxEncodedLen`) - fn clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `559` - // Estimated: `3652` - // Minimum execution time: 30_942_000 picoseconds. - Weight::from_parts(31_527_000, 0) - .saturating_add(Weight::from_parts(0, 3652)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Uniques::Class` (r:1 w:1) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ClassMetadataOf` (r:1 w:1) - /// Proof: `Uniques::ClassMetadataOf` (`max_values`: None, `max_size`: Some(167), added: 2642, mode: `MaxEncodedLen`) - fn set_collection_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `3643` - // Minimum execution time: 30_727_000 picoseconds. - Weight::from_parts(31_688_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Uniques::Class` (r:1 w:0) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ClassMetadataOf` (r:1 w:1) - /// Proof: `Uniques::ClassMetadataOf` (`max_values`: None, `max_size`: Some(167), added: 2642, mode: `MaxEncodedLen`) - fn clear_collection_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `473` - // Estimated: `3643` - // Minimum execution time: 29_844_000 picoseconds. - Weight::from_parts(30_403_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::Class` (r:1 w:0) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Asset` (r:1 w:1) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - fn approve_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `428` - // Estimated: `3643` - // Minimum execution time: 19_155_000 picoseconds. - Weight::from_parts(19_909_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::Class` (r:1 w:0) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Asset` (r:1 w:1) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - fn cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `461` - // Estimated: `3643` - // Minimum execution time: 19_163_000 picoseconds. - Weight::from_parts(19_804_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::OwnershipAcceptance` (r:1 w:1) - /// Proof: `Uniques::OwnershipAcceptance` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn set_accept_ownership() -> Weight { - // Proof Size summary in bytes: - // Measured: `42` - // Estimated: `3517` - // Minimum execution time: 15_413_000 picoseconds. - Weight::from_parts(15_762_000, 0) - .saturating_add(Weight::from_parts(0, 3517)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::CollectionMaxSupply` (r:1 w:1) - /// Proof: `Uniques::CollectionMaxSupply` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Class` (r:1 w:0) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - fn set_collection_max_supply() -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `3643` - // Minimum execution time: 16_477_000 picoseconds. - Weight::from_parts(16_811_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::Asset` (r:1 w:0) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ItemPriceOf` (r:0 w:1) - /// Proof: `Uniques::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - fn set_price() -> Weight { - // Proof Size summary in bytes: - // Measured: `259` - // Estimated: `3587` - // Minimum execution time: 16_415_000 picoseconds. - Weight::from_parts(16_906_000, 0) - .saturating_add(Weight::from_parts(0, 3587)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Uniques::Asset` (r:1 w:1) - /// Proof: `Uniques::Asset` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// Storage: `Uniques::ItemPriceOf` (r:1 w:1) - /// Proof: `Uniques::ItemPriceOf` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Class` (r:1 w:0) - /// Proof: `Uniques::Class` (`max_values`: None, `max_size`: Some(178), added: 2653, mode: `MaxEncodedLen`) - /// Storage: `Uniques::Account` (r:0 w:2) - /// Proof: `Uniques::Account` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) - fn buy_item() -> Weight { - // Proof Size summary in bytes: - // Measured: `540` - // Estimated: `3643` - // Minimum execution time: 35_814_000 picoseconds. - Weight::from_parts(36_569_000, 0) - .saturating_add(Weight::from_parts(0, 3643)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(4)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_utility.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_utility.rs deleted file mode 100644 index d028fb898a4..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_utility.rs +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_utility` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_utility -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_utility`. -pub struct WeightInfo(PhantomData); -impl pallet_utility::WeightInfo for WeightInfo { - /// The range of component `c` is `[0, 1000]`. - fn batch(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_918_000 picoseconds. - Weight::from_parts(2_421_521, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 3_252 - .saturating_add(Weight::from_parts(6_625_635, 0).saturating_mul(c.into())) - } - fn as_derivative() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 5_304_000 picoseconds. - Weight::from_parts(5_546_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// The range of component `c` is `[0, 1000]`. - fn batch_all(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_847_000 picoseconds. - Weight::from_parts(1_224_975, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 3_818 - .saturating_add(Weight::from_parts(6_891_149, 0).saturating_mul(c.into())) - } - fn dispatch_as() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 9_269_000 picoseconds. - Weight::from_parts(9_604_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// The range of component `c` is `[0, 1000]`. - fn force_batch(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_855_000 picoseconds. - Weight::from_parts(6_965_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 1_631 - .saturating_add(Weight::from_parts(6_545_496, 0).saturating_mul(c.into())) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_xcm.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_xcm.rs deleted file mode 100644 index 27867e278ed..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/pallet_xcm.rs +++ /dev/null @@ -1,324 +0,0 @@ -// Copyright (C) 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` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-11-10, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=pallet_xcm -// --chain=asset-hub-polkadot-dev -// --header=./cumulus/file_header.txt -// --output=./cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_xcm`. -pub struct WeightInfo(PhantomData); -impl pallet_xcm::WeightInfo for WeightInfo { - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn send() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3540` - // Minimum execution time: 25_203_000 picoseconds. - Weight::from_parts(25_927_000, 0) - .saturating_add(Weight::from_parts(0, 3540)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ParachainInfo::ParachainId` (r:1 w:0) - /// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - fn teleport_assets() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `1489` - // Minimum execution time: 20_113_000 picoseconds. - Weight::from_parts(20_439_000, 0) - .saturating_add(Weight::from_parts(0, 1489)) - .saturating_add(T::DbWeight::get().reads(1)) - } - /// Storage: `ParachainInfo::ParachainId` (r:1 w:0) - /// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - fn reserve_transfer_assets() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `1489` - // Minimum execution time: 14_959_000 picoseconds. - Weight::from_parts(15_264_000, 0) - .saturating_add(Weight::from_parts(0, 1489)) - .saturating_add(T::DbWeight::get().reads(1)) - } - /// Storage: `Benchmark::Override` (r:0 w:0) - /// Proof: `Benchmark::Override` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn execute() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 18_446_744_073_709_551_000 picoseconds. - Weight::from_parts(18_446_744_073_709_551_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: `PolkadotXcm::SupportedVersion` (r:0 w:1) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_xcm_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_399_000 picoseconds. - Weight::from_parts(7_674_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:0 w:1) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn force_default_xcm_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_388_000 picoseconds. - Weight::from_parts(2_522_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_subscribe_version_notify() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3540` - // Minimum execution time: 28_791_000 picoseconds. - Weight::from_parts(29_443_000, 0) - .saturating_add(Weight::from_parts(0, 3540)) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_unsubscribe_version_notify() -> Weight { - // Proof Size summary in bytes: - // Measured: `292` - // Estimated: `3757` - // Minimum execution time: 30_880_000 picoseconds. - Weight::from_parts(31_675_000, 0) - .saturating_add(Weight::from_parts(0, 3757)) - .saturating_add(T::DbWeight::get().reads(7)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `PolkadotXcm::XcmExecutionSuspended` (r:0 w:1) - /// Proof: `PolkadotXcm::XcmExecutionSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn force_suspension() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_365_000 picoseconds. - Weight::from_parts(2_550_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PolkadotXcm::SupportedVersion` (r:4 w:2) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_supported_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `129` - // Estimated: `11019` - // Minimum execution time: 17_185_000 picoseconds. - Weight::from_parts(17_680_000, 0) - .saturating_add(Weight::from_parts(0, 11019)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_version_notifiers() -> Weight { - // Proof Size summary in bytes: - // Measured: `133` - // Estimated: `11023` - // Minimum execution time: 16_974_000 picoseconds. - Weight::from_parts(17_660_000, 0) - .saturating_add(Weight::from_parts(0, 11023)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:5 w:0) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn already_notified_target() -> Weight { - // Proof Size summary in bytes: - // Measured: `140` - // Estimated: `13505` - // Minimum execution time: 18_536_000 picoseconds. - Weight::from_parts(19_292_000, 0) - .saturating_add(Weight::from_parts(0, 13505)) - .saturating_add(T::DbWeight::get().reads(5)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:2 w:1) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn notify_current_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `6082` - // Minimum execution time: 27_368_000 picoseconds. - Weight::from_parts(28_161_000, 0) - .saturating_add(Weight::from_parts(0, 6082)) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:3 w:0) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn notify_target_migration_fail() -> Weight { - // Proof Size summary in bytes: - // Measured: `172` - // Estimated: `8587` - // Minimum execution time: 9_553_000 picoseconds. - Weight::from_parts(9_899_000, 0) - .saturating_add(Weight::from_parts(0, 8587)) - .saturating_add(T::DbWeight::get().reads(3)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_version_notify_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `140` - // Estimated: `11030` - // Minimum execution time: 17_445_000 picoseconds. - Weight::from_parts(18_206_000, 0) - .saturating_add(Weight::from_parts(0, 11030)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn migrate_and_notify_old_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `146` - // Estimated: `11036` - // Minimum execution time: 34_200_000 picoseconds. - Weight::from_parts(35_198_000, 0) - .saturating_add(Weight::from_parts(0, 11036)) - .saturating_add(T::DbWeight::get().reads(10)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn new_query() -> Weight { - // Proof Size summary in bytes: - // Measured: `69` - // Estimated: `1554` - // Minimum execution time: 4_679_000 picoseconds. - Weight::from_parts(4_841_000, 0) - .saturating_add(Weight::from_parts(0, 1554)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::Queries` (r:1 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn take_response() -> Weight { - // Proof Size summary in bytes: - // Measured: `7706` - // Estimated: `11171` - // Minimum execution time: 27_281_000 picoseconds. - Weight::from_parts(27_694_000, 0) - .saturating_add(Weight::from_parts(0, 11171)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/paritydb_weights.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/paritydb_weights.rs deleted file mode 100644 index 25679703831..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/paritydb_weights.rs +++ /dev/null @@ -1,63 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, RuntimeDbWeight}, - }; - - parameter_types! { - /// `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_REF_TIME_PER_NANOS, - write: 50_000 * constants::WEIGHT_REF_TIME_PER_NANOS, - }; - } - - #[cfg(test)] - mod test_db_weights { - use super::constants::ParityDbWeight as W; - use frame_support::weights::constants; - - /// Checks that all weights exist and have sane values. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - // At least 1 µs. - assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Read weight should be at least 1 µs." - ); - assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Write weight should be at least 1 µs." - ); - // At most 1 ms. - assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Read weight should be at most 1 ms." - ); - assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Write weight should be at most 1 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/rocksdb_weights.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/rocksdb_weights.rs deleted file mode 100644 index 3dd817aa6f1..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/rocksdb_weights.rs +++ /dev/null @@ -1,63 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, RuntimeDbWeight}, - }; - - parameter_types! { - /// 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_REF_TIME_PER_NANOS, - write: 100_000 * constants::WEIGHT_REF_TIME_PER_NANOS, - }; - } - - #[cfg(test)] - mod test_db_weights { - use super::constants::RocksDbWeight as W; - use frame_support::weights::constants; - - /// Checks that all weights exist and have sane values. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - // At least 1 µs. - assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Read weight should be at least 1 µs." - ); - assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Write weight should be at least 1 µs." - ); - // At most 1 ms. - assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Read weight should be at most 1 ms." - ); - assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Write weight should be at most 1 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/xcm/mod.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/xcm/mod.rs deleted file mode 100644 index 44fcb91d688..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/xcm/mod.rs +++ /dev/null @@ -1,244 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -mod pallet_xcm_benchmarks_fungible; -mod pallet_xcm_benchmarks_generic; - -use crate::{xcm_config::MaxAssetsIntoHolding, 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::*, DoubleEncoded}; - -trait WeighMultiAssets { - fn weigh_multi_assets(&self, weight: Weight) -> Weight; -} - -const MAX_ASSETS: u64 = 100; - -impl WeighMultiAssets for MultiAssetFilter { - fn weigh_multi_assets(&self, weight: Weight) -> Weight { - match self { - Self::Definite(assets) => weight.saturating_mul(assets.inner().iter().count() as u64), - Self::Wild(asset) => match asset { - All => weight.saturating_mul(MAX_ASSETS), - AllOf { fun, .. } => match fun { - WildFungibility::Fungible => weight, - // Magic number 2 has to do with the fact that we could have up to 2 times - // MaxAssetsIntoHolding in the worst-case scenario. - WildFungibility::NonFungible => - weight.saturating_mul((MaxAssetsIntoHolding::get() * 2) as u64), - }, - AllCounted(count) => weight.saturating_mul(MAX_ASSETS.min(*count as u64)), - AllOfCounted { count, .. } => weight.saturating_mul(MAX_ASSETS.min(*count as u64)), - }, - } - } -} - -impl WeighMultiAssets for MultiAssets { - fn weigh_multi_assets(&self, weight: Weight) -> Weight { - weight.saturating_mul(self.inner().iter().count() as u64) - } -} - -pub struct AssetHubPolkadotXcmWeight(core::marker::PhantomData); -impl XcmWeightInfo for AssetHubPolkadotXcmWeight { - fn withdraw_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::withdraw_asset()) - } - fn reserve_asset_deposited(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::reserve_asset_deposited()) - } - fn receive_teleported_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::receive_teleported_asset()) - } - fn query_response( - _query_id: &u64, - _response: &Response, - _max_weight: &Weight, - _querier: &Option, - ) -> Weight { - XcmGeneric::::query_response() - } - fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::transfer_asset()) - } - fn transfer_reserve_asset( - assets: &MultiAssets, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::transfer_reserve_asset()) - } - fn transact( - _origin_type: &OriginKind, - _require_weight_at_most: &Weight, - _call: &DoubleEncoded, - ) -> Weight { - XcmGeneric::::transact() - } - fn hrmp_new_channel_open_request( - _sender: &u32, - _max_message_size: &u32, - _max_capacity: &u32, - ) -> Weight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn hrmp_channel_accepted(_recipient: &u32) -> Weight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> Weight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn clear_origin() -> Weight { - XcmGeneric::::clear_origin() - } - fn descend_origin(_who: &InteriorMultiLocation) -> Weight { - XcmGeneric::::descend_origin() - } - fn report_error(_query_response_info: &QueryResponseInfo) -> Weight { - XcmGeneric::::report_error() - } - - fn deposit_asset(assets: &MultiAssetFilter, _dest: &MultiLocation) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()) - } - fn deposit_reserve_asset( - assets: &MultiAssetFilter, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) - } - fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets, _maximal: &bool) -> Weight { - Weight::MAX - } - fn initiate_reserve_withdraw( - assets: &MultiAssetFilter, - _reserve: &MultiLocation, - _xcm: &Xcm<()>, - ) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::initiate_reserve_withdraw()) - } - fn initiate_teleport( - assets: &MultiAssetFilter, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()) - } - fn report_holding(_response_info: &QueryResponseInfo, _assets: &MultiAssetFilter) -> Weight { - XcmGeneric::::report_holding() - } - fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> Weight { - XcmGeneric::::buy_execution() - } - fn refund_surplus() -> Weight { - XcmGeneric::::refund_surplus() - } - fn set_error_handler(_xcm: &Xcm) -> Weight { - XcmGeneric::::set_error_handler() - } - fn set_appendix(_xcm: &Xcm) -> Weight { - XcmGeneric::::set_appendix() - } - fn clear_error() -> Weight { - XcmGeneric::::clear_error() - } - fn claim_asset(_assets: &MultiAssets, _ticket: &MultiLocation) -> Weight { - XcmGeneric::::claim_asset() - } - fn trap(_code: &u64) -> Weight { - XcmGeneric::::trap() - } - fn subscribe_version(_query_id: &QueryId, _max_response_weight: &Weight) -> Weight { - XcmGeneric::::subscribe_version() - } - fn unsubscribe_version() -> Weight { - XcmGeneric::::unsubscribe_version() - } - fn burn_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmGeneric::::burn_asset()) - } - fn expect_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmGeneric::::expect_asset()) - } - fn expect_origin(_origin: &Option) -> Weight { - XcmGeneric::::expect_origin() - } - fn expect_error(_error: &Option<(u32, XcmError)>) -> Weight { - XcmGeneric::::expect_error() - } - fn expect_transact_status(_transact_status: &MaybeErrorCode) -> Weight { - XcmGeneric::::expect_transact_status() - } - fn query_pallet(_module_name: &Vec, _response_info: &QueryResponseInfo) -> Weight { - XcmGeneric::::query_pallet() - } - fn expect_pallet( - _index: &u32, - _name: &Vec, - _module_name: &Vec, - _crate_major: &u32, - _min_crate_minor: &u32, - ) -> Weight { - XcmGeneric::::expect_pallet() - } - fn report_transact_status(_response_info: &QueryResponseInfo) -> Weight { - XcmGeneric::::report_transact_status() - } - fn clear_transact_status() -> Weight { - XcmGeneric::::clear_transact_status() - } - fn universal_origin(_: &Junction) -> Weight { - Weight::MAX - } - fn export_message(_: &NetworkId, _: &Junctions, _: &Xcm<()>) -> Weight { - Weight::MAX - } - fn lock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn unlock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn note_unlockable(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn request_unlock(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn set_fees_mode(_: &bool) -> Weight { - XcmGeneric::::set_fees_mode() - } - fn set_topic(_topic: &[u8; 32]) -> Weight { - XcmGeneric::::set_topic() - } - fn clear_topic() -> Weight { - XcmGeneric::::clear_topic() - } - fn alias_origin(_: &MultiLocation) -> Weight { - // XCM Executor does not currently support alias origin operations - Weight::MAX - } - fn unpaid_execution(_: &WeightLimit, _: &Option) -> Weight { - XcmGeneric::::unpaid_execution() - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs deleted file mode 100644 index 1036d4cbf00..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_xcm_benchmarks::fungible` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-09-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-nbnwcyh-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: Compiled, CHAIN: Some("asset-hub-polkadot-dev"), DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=pallet_xcm_benchmarks::fungible -// --chain=asset-hub-polkadot-dev -// --header=./cumulus/file_header.txt -// --template=./cumulus/templates/xcm-bench-template.hbs -// --output=./cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/xcm/ - -#![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 `pallet_xcm_benchmarks::fungible`. -pub struct WeightInfo(PhantomData); -impl WeightInfo { - // Storage: `System::Account` (r:1 w:1) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - pub fn withdraw_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `101` - // Estimated: `3593` - // Minimum execution time: 25_903_000 picoseconds. - Weight::from_parts(26_768_000, 3593) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - // Storage: `System::Account` (r:2 w:2) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - pub fn transfer_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `101` - // Estimated: `6196` - // Minimum execution time: 51_042_000 picoseconds. - Weight::from_parts(51_939_000, 6196) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - // Storage: `System::Account` (r:2 w:2) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn transfer_reserve_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `176` - // Estimated: `6196` - // Minimum execution time: 74_626_000 picoseconds. - Weight::from_parts(75_963_000, 6196) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(4)) - } - // Storage: `Benchmark::Override` (r:0 w:0) - // Proof: `Benchmark::Override` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub fn reserve_asset_deposited() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 18_446_744_073_709_551_000 picoseconds. - Weight::from_parts(18_446_744_073_709_551_000, 0) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn initiate_reserve_withdraw() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3540` - // Minimum execution time: 480_030_000 picoseconds. - Weight::from_parts(486_039_000, 3540) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - pub fn receive_teleported_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_936_000 picoseconds. - Weight::from_parts(4_033_000, 0) - } - // Storage: `System::Account` (r:1 w:1) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - pub fn deposit_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 26_274_000 picoseconds. - Weight::from_parts(26_609_000, 3593) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - // Storage: `System::Account` (r:1 w:1) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn deposit_reserve_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3593` - // Minimum execution time: 52_888_000 picoseconds. - Weight::from_parts(53_835_000, 3593) - .saturating_add(T::DbWeight::get().reads(7)) - .saturating_add(T::DbWeight::get().writes(3)) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn initiate_teleport() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3540` - // Minimum execution time: 33_395_000 picoseconds. - Weight::from_parts(33_827_000, 3540) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/xcm/pallet_xcm_benchmarks_generic.rs deleted file mode 100644 index 12ef504727e..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ /dev/null @@ -1,328 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_xcm_benchmarks::generic` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("asset-hub-polkadot-dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --template=./templates/xcm-bench-template.hbs -// --chain=asset-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_xcm_benchmarks::generic -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-polkadot/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::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) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn report_holding() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3540` - // Minimum execution time: 425_235_000 picoseconds. - Weight::from_parts(432_935_000, 3540) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - pub fn buy_execution() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_070_000 picoseconds. - Weight::from_parts(4_329_000, 0) - } - // Storage: `PolkadotXcm::Queries` (r:1 w:0) - // Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub fn query_response() -> Weight { - // Proof Size summary in bytes: - // Measured: `69` - // Estimated: `3534` - // Minimum execution time: 11_464_000 picoseconds. - Weight::from_parts(11_829_000, 3534) - .saturating_add(T::DbWeight::get().reads(1)) - } - pub fn transact() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 13_574_000 picoseconds. - Weight::from_parts(14_021_000, 0) - } - pub fn refund_surplus() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_276_000 picoseconds. - Weight::from_parts(4_479_000, 0) - } - pub fn set_error_handler() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_833_000 picoseconds. - Weight::from_parts(2_939_000, 0) - } - pub fn set_appendix() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_797_000 picoseconds. - Weight::from_parts(2_901_000, 0) - } - pub fn clear_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_855_000 picoseconds. - Weight::from_parts(2_961_000, 0) - } - pub fn descend_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_589_000 picoseconds. - Weight::from_parts(3_720_000, 0) - } - pub fn clear_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_786_000 picoseconds. - Weight::from_parts(2_889_000, 0) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn report_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3540` - // Minimum execution time: 25_740_000 picoseconds. - Weight::from_parts(26_355_000, 3540) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - // Storage: `PolkadotXcm::AssetTraps` (r:1 w:1) - // Proof: `PolkadotXcm::AssetTraps` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub fn claim_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `126` - // Estimated: `3591` - // Minimum execution time: 16_206_000 picoseconds. - Weight::from_parts(16_651_000, 3591) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - pub fn trap() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_819_000 picoseconds. - Weight::from_parts(2_944_000, 0) - } - // Storage: `PolkadotXcm::VersionNotifyTargets` (r:1 w:1) - // Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn subscribe_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3540` - // Minimum execution time: 28_216_000 picoseconds. - Weight::from_parts(28_878_000, 3540) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(3)) - } - // Storage: `PolkadotXcm::VersionNotifyTargets` (r:0 w:1) - // Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub fn unsubscribe_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_795_000 picoseconds. - Weight::from_parts(5_008_000, 0) - .saturating_add(T::DbWeight::get().writes(1)) - } - pub fn burn_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 135_205_000 picoseconds. - Weight::from_parts(140_623_000, 0) - } - pub fn expect_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 12_791_000 picoseconds. - Weight::from_parts(13_114_000, 0) - } - pub fn expect_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_000_000 picoseconds. - Weight::from_parts(3_091_000, 0) - } - pub fn expect_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_828_000 picoseconds. - Weight::from_parts(2_947_000, 0) - } - pub fn expect_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_980_000 picoseconds. - Weight::from_parts(3_123_000, 0) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn query_pallet() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3540` - // Minimum execution time: 29_672_000 picoseconds. - Weight::from_parts(30_318_000, 3540) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - pub fn expect_pallet() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 5_421_000 picoseconds. - Weight::from_parts(5_614_000, 0) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn report_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3540` - // Minimum execution time: 25_621_000 picoseconds. - Weight::from_parts(26_486_000, 3540) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - pub fn clear_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_873_000 picoseconds. - Weight::from_parts(2_973_000, 0) - } - pub fn set_topic() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_861_000 picoseconds. - Weight::from_parts(2_923_000, 0) - } - pub fn clear_topic() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_845_000 picoseconds. - Weight::from_parts(2_970_000, 0) - } - pub fn set_fees_mode() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_773_000 picoseconds. - Weight::from_parts(2_922_000, 0) - } - pub fn unpaid_execution() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_980_000 picoseconds. - Weight::from_parts(3_095_000, 0) - } -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/xcm_config.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/xcm_config.rs deleted file mode 100644 index b3c2ce4da76..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/src/xcm_config.rs +++ /dev/null @@ -1,546 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use super::{ - AccountId, AllPalletsWithSystem, Assets, Authorship, Balance, Balances, ForeignAssets, - ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, - TransactionByteFee, TrustBackedAssetsInstance, WeightToFee, XcmpQueue, CENTS, -}; -use assets_common::matching::{FromSiblingParachain, IsForeignConcreteAsset}; -use frame_support::{ - match_types, parameter_types, - traits::{ConstU32, Contains, Everything, Nothing, PalletInfoAccess}, -}; -use frame_system::EnsureRoot; -use pallet_xcm::XcmPassthrough; -use parachains_common::{ - impls::ToStakingPot, - xcm_config::{AssetFeeAsExistentialDepositMultiplier, ConcreteAssetFromSystem}, -}; -use polkadot_parachain_primitives::primitives::Sibling; -use polkadot_runtime_common::xcm_sender::ExponentialPrice; -use sp_runtime::traits::ConvertInto; -use xcm::latest::prelude::*; -use xcm_builder::{ - AccountId32Aliases, AllowExplicitUnpaidExecutionFrom, AllowKnownQueryResponses, - AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, CurrencyAdapter, - DenyReserveTransferToRelayChain, DenyThenTry, DescribeFamily, DescribePalletTerminal, - EnsureXcmOrigin, FungiblesAdapter, HashedDescription, IsConcrete, LocalMint, NoChecking, - ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, - SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, - SovereignSignedViaLocation, StartsWith, StartsWithExplicitGlobalConsensus, TakeWeightCredit, - TrailingSetTopicAsId, UsingComponents, WeightInfoBounds, WithComputedOrigin, WithUniqueTopic, -}; -use xcm_executor::{traits::WithOriginFilter, XcmExecutor}; - -parameter_types! { - pub const DotLocation: MultiLocation = MultiLocation::parent(); - pub const RelayNetwork: Option = Some(NetworkId::Polkadot); - pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); - pub UniversalLocation: InteriorMultiLocation = - X2(GlobalConsensus(RelayNetwork::get().unwrap()), Parachain(ParachainInfo::parachain_id().into())); - pub UniversalLocationNetworkId: NetworkId = UniversalLocation::get().global_consensus().unwrap(); - pub TrustBackedAssetsPalletLocation: MultiLocation = - PalletInstance(::index() as u8).into(); - pub CheckingAccount: AccountId = PolkadotXcm::check_account(); - pub FellowshipLocation: MultiLocation = MultiLocation::new(1, Parachain(1001)); - pub const GovernanceLocation: MultiLocation = MultiLocation::parent(); -} - -/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used -/// when determining ownership of accounts for asset transacting and when attempting to use XCM -/// `Transact` in order to determine the dispatch Origin. -pub type LocationToAccountId = ( - // The parent (Relay-chain) origin converts to the parent `AccountId`. - ParentIsPreset, - // Sibling parachain origins convert to AccountId via the `ParaId::into`. - SiblingParachainConvertsVia, - // Straight up local `AccountId32` origins just alias directly to `AccountId`. - AccountId32Aliases, - // Foreign chain account alias into local accounts according to a hash of their standard - // description. - HashedDescription>, -); - -/// Means for transacting the native currency on this chain. -pub type CurrencyTransactor = CurrencyAdapter< - // Use this currency: - Balances, - // Use this currency when it is a fungible asset matching the given location or name: - IsConcrete, - // Convert an XCM MultiLocation into a local account id: - LocationToAccountId, - // Our chain's account ID type (we can't get away without mentioning it explicitly): - AccountId, - // We don't track any teleports of `Balances`. - (), ->; - -/// `AssetId`/`Balance` converter for `TrustBackedAssets`. -pub type TrustBackedAssetsConvertedConcreteId = - assets_common::TrustBackedAssetsConvertedConcreteId; - -/// Means for transacting assets besides the native currency on this chain. -pub type FungiblesTransactor = FungiblesAdapter< - // Use this fungibles implementation: - Assets, - // Use this currency when it is a fungible asset matching the given location or name: - TrustBackedAssetsConvertedConcreteId, - // Convert an XCM MultiLocation into a local account id: - LocationToAccountId, - // Our chain's account ID type (we can't get away without mentioning it explicitly): - AccountId, - // We only want to allow teleports of known assets. We use non-zero issuance as an indication - // that this asset is known. - LocalMint>, - // The account to use for tracking teleports. - CheckingAccount, ->; - -/// `AssetId/Balance` converter for `TrustBackedAssets` -pub type ForeignAssetsConvertedConcreteId = assets_common::ForeignAssetsConvertedConcreteId< - ( - // Ignore `TrustBackedAssets` explicitly - StartsWith, - // Ignore assets that start explicitly with our `GlobalConsensus(NetworkId)`, means: - // - foreign assets from our consensus should be: `MultiLocation {parents: 1, - // X*(Parachain(xyz), ..)}` - // - foreign assets outside our consensus with the same `GlobalConsensus(NetworkId)` won't - // be accepted here - StartsWithExplicitGlobalConsensus, - ), - Balance, ->; - -/// Means for transacting foreign assets from different global consensus. -pub type ForeignFungiblesTransactor = FungiblesAdapter< - // Use this fungibles implementation: - ForeignAssets, - // Use this currency when it is a fungible asset matching the given location or name: - ForeignAssetsConvertedConcreteId, - // Convert an XCM MultiLocation into a local account id: - LocationToAccountId, - // Our chain's account ID type (we can't get away without mentioning it explicitly): - AccountId, - // We dont need to check teleports here. - NoChecking, - // The account to use for tracking teleports. - CheckingAccount, ->; - -/// Means for transacting assets on this chain. -pub type AssetTransactors = (CurrencyTransactor, FungiblesTransactor, ForeignFungiblesTransactor); - -/// 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 -/// biases the kind of local `Origin` it will become. -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, - // Native converter for Relay-chain (Parent) location; will convert to a `Relay` origin when - // recognised. - RelayChainAsNative, - // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when - // recognised. - SiblingParachainAsNative, - // Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a - // transaction from the Root origin. - ParentAsSuperuser, - // Native signed account converter; this just converts an `AccountId32` origin into a normal - // `RuntimeOrigin::Signed` origin of the same 32-byte value. - SignedAccountId32AsNative, - // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. - XcmPassthrough, -); - -parameter_types! { - pub const MaxInstructions: u32 = 100; - pub const MaxAssetsIntoHolding: u32 = 64; - pub XcmAssetFeesReceiver: Option = Authorship::author(); -} - -match_types! { - pub type ParentOrParentsPlurality: impl Contains = { - MultiLocation { parents: 1, interior: Here } | - MultiLocation { parents: 1, interior: X1(Plurality { .. }) } - }; - pub type ParentOrSiblings: impl Contains = { - MultiLocation { parents: 1, interior: Here } | - MultiLocation { parents: 1, interior: X1(_) } - }; - pub type FellowsPlurality: impl Contains = { - MultiLocation { parents: 1, interior: X2(Parachain(1001), Plurality { id: BodyId::Technical, ..}) } - }; - pub type FellowshipSalaryPallet: impl Contains = { - MultiLocation { parents: 1, interior: X2(Parachain(1001), PalletInstance(64)) } - }; - pub type AmbassadorSalaryPallet: impl Contains = { - MultiLocation { parents: 1, interior: X2(Parachain(1001), PalletInstance(74)) } - }; -} - -/// A call filter for the XCM Transact instruction. This is a temporary measure until we properly -/// account for proof size weights. -/// -/// Calls that are allowed through this filter must: -/// 1. Have a fixed weight; -/// 2. Cannot lead to another call being made; -/// 3. Have a defined proof size weight, e.g. no unbounded vecs in call parameters. -pub struct SafeCallFilter; -impl Contains for SafeCallFilter { - fn contains(call: &RuntimeCall) -> bool { - #[cfg(feature = "runtime-benchmarks")] - { - if matches!(call, RuntimeCall::System(frame_system::Call::remark_with_event { .. })) { - return true - } - } - - matches!( - call, - RuntimeCall::PolkadotXcm(pallet_xcm::Call::force_xcm_version { .. }) | - RuntimeCall::System( - frame_system::Call::set_heap_pages { .. } | - frame_system::Call::set_code { .. } | - frame_system::Call::set_code_without_checks { .. } | - frame_system::Call::kill_prefix { .. }, - ) | RuntimeCall::ParachainSystem(..) | - RuntimeCall::Timestamp(..) | - RuntimeCall::Balances(..) | - RuntimeCall::CollatorSelection( - pallet_collator_selection::Call::set_desired_candidates { .. } | - pallet_collator_selection::Call::set_candidacy_bond { .. } | - pallet_collator_selection::Call::register_as_candidate { .. } | - pallet_collator_selection::Call::leave_intent { .. } | - pallet_collator_selection::Call::set_invulnerables { .. } | - pallet_collator_selection::Call::add_invulnerable { .. } | - pallet_collator_selection::Call::remove_invulnerable { .. }, - ) | RuntimeCall::Session(pallet_session::Call::purge_keys { .. }) | - RuntimeCall::XcmpQueue(..) | - RuntimeCall::MessageQueue(..) | - RuntimeCall::Assets( - pallet_assets::Call::create { .. } | - pallet_assets::Call::force_create { .. } | - pallet_assets::Call::start_destroy { .. } | - pallet_assets::Call::destroy_accounts { .. } | - pallet_assets::Call::destroy_approvals { .. } | - pallet_assets::Call::finish_destroy { .. } | - pallet_assets::Call::mint { .. } | - pallet_assets::Call::burn { .. } | - pallet_assets::Call::transfer { .. } | - pallet_assets::Call::transfer_keep_alive { .. } | - pallet_assets::Call::force_transfer { .. } | - pallet_assets::Call::freeze { .. } | - pallet_assets::Call::thaw { .. } | - pallet_assets::Call::freeze_asset { .. } | - pallet_assets::Call::thaw_asset { .. } | - pallet_assets::Call::transfer_ownership { .. } | - pallet_assets::Call::set_team { .. } | - pallet_assets::Call::set_metadata { .. } | - pallet_assets::Call::clear_metadata { .. } | - pallet_assets::Call::force_set_metadata { .. } | - pallet_assets::Call::force_clear_metadata { .. } | - pallet_assets::Call::force_asset_status { .. } | - pallet_assets::Call::approve_transfer { .. } | - pallet_assets::Call::cancel_approval { .. } | - pallet_assets::Call::force_cancel_approval { .. } | - pallet_assets::Call::transfer_approved { .. } | - pallet_assets::Call::touch { .. } | - pallet_assets::Call::refund { .. }, - ) | RuntimeCall::ForeignAssets( - pallet_assets::Call::create { .. } | - pallet_assets::Call::force_create { .. } | - pallet_assets::Call::start_destroy { .. } | - pallet_assets::Call::destroy_accounts { .. } | - pallet_assets::Call::destroy_approvals { .. } | - pallet_assets::Call::finish_destroy { .. } | - pallet_assets::Call::mint { .. } | - pallet_assets::Call::burn { .. } | - pallet_assets::Call::transfer { .. } | - pallet_assets::Call::transfer_keep_alive { .. } | - pallet_assets::Call::force_transfer { .. } | - pallet_assets::Call::freeze { .. } | - pallet_assets::Call::thaw { .. } | - pallet_assets::Call::freeze_asset { .. } | - pallet_assets::Call::thaw_asset { .. } | - pallet_assets::Call::transfer_ownership { .. } | - pallet_assets::Call::set_team { .. } | - pallet_assets::Call::set_metadata { .. } | - pallet_assets::Call::clear_metadata { .. } | - pallet_assets::Call::force_set_metadata { .. } | - pallet_assets::Call::force_clear_metadata { .. } | - pallet_assets::Call::force_asset_status { .. } | - pallet_assets::Call::approve_transfer { .. } | - pallet_assets::Call::cancel_approval { .. } | - pallet_assets::Call::force_cancel_approval { .. } | - pallet_assets::Call::transfer_approved { .. } | - pallet_assets::Call::touch { .. } | - pallet_assets::Call::refund { .. }, - ) | RuntimeCall::Nfts( - pallet_nfts::Call::create { .. } | - pallet_nfts::Call::force_create { .. } | - pallet_nfts::Call::destroy { .. } | - pallet_nfts::Call::mint { .. } | - pallet_nfts::Call::force_mint { .. } | - pallet_nfts::Call::burn { .. } | - pallet_nfts::Call::transfer { .. } | - pallet_nfts::Call::lock_item_transfer { .. } | - pallet_nfts::Call::unlock_item_transfer { .. } | - pallet_nfts::Call::lock_collection { .. } | - pallet_nfts::Call::transfer_ownership { .. } | - pallet_nfts::Call::set_team { .. } | - pallet_nfts::Call::force_collection_owner { .. } | - pallet_nfts::Call::force_collection_config { .. } | - pallet_nfts::Call::approve_transfer { .. } | - pallet_nfts::Call::cancel_approval { .. } | - pallet_nfts::Call::clear_all_transfer_approvals { .. } | - pallet_nfts::Call::lock_item_properties { .. } | - pallet_nfts::Call::set_attribute { .. } | - pallet_nfts::Call::force_set_attribute { .. } | - pallet_nfts::Call::clear_attribute { .. } | - pallet_nfts::Call::approve_item_attributes { .. } | - pallet_nfts::Call::cancel_item_attributes_approval { .. } | - pallet_nfts::Call::set_metadata { .. } | - pallet_nfts::Call::clear_metadata { .. } | - pallet_nfts::Call::set_collection_metadata { .. } | - pallet_nfts::Call::clear_collection_metadata { .. } | - pallet_nfts::Call::set_accept_ownership { .. } | - pallet_nfts::Call::set_collection_max_supply { .. } | - pallet_nfts::Call::update_mint_settings { .. } | - pallet_nfts::Call::set_price { .. } | - pallet_nfts::Call::buy_item { .. } | - pallet_nfts::Call::pay_tips { .. } | - pallet_nfts::Call::create_swap { .. } | - pallet_nfts::Call::cancel_swap { .. } | - pallet_nfts::Call::claim_swap { .. }, - ) | RuntimeCall::Uniques( - pallet_uniques::Call::create { .. } | - pallet_uniques::Call::force_create { .. } | - pallet_uniques::Call::destroy { .. } | - pallet_uniques::Call::mint { .. } | - pallet_uniques::Call::burn { .. } | - pallet_uniques::Call::transfer { .. } | - pallet_uniques::Call::freeze { .. } | - pallet_uniques::Call::thaw { .. } | - pallet_uniques::Call::freeze_collection { .. } | - pallet_uniques::Call::thaw_collection { .. } | - pallet_uniques::Call::transfer_ownership { .. } | - pallet_uniques::Call::set_team { .. } | - pallet_uniques::Call::approve_transfer { .. } | - pallet_uniques::Call::cancel_approval { .. } | - pallet_uniques::Call::force_item_status { .. } | - pallet_uniques::Call::set_attribute { .. } | - pallet_uniques::Call::clear_attribute { .. } | - pallet_uniques::Call::set_metadata { .. } | - pallet_uniques::Call::clear_metadata { .. } | - pallet_uniques::Call::set_collection_metadata { .. } | - pallet_uniques::Call::clear_collection_metadata { .. } | - pallet_uniques::Call::set_accept_ownership { .. } | - pallet_uniques::Call::set_collection_max_supply { .. } | - pallet_uniques::Call::set_price { .. } | - pallet_uniques::Call::buy_item { .. } - ) - ) - } -} - -pub type Barrier = TrailingSetTopicAsId< - DenyThenTry< - DenyReserveTransferToRelayChain, - ( - TakeWeightCredit, - // Expected responses are OK. - AllowKnownQueryResponses, - // Allow XCMs with some computed origins to pass through. - WithComputedOrigin< - ( - // If the message is one that immediately attempts to pay for execution, then - // allow it. - AllowTopLevelPaidExecutionFrom, - // Parent, its pluralities (i.e. governance bodies), and the Fellows plurality - // get free execution. - AllowExplicitUnpaidExecutionFrom<( - ParentOrParentsPlurality, - FellowsPlurality, - FellowshipSalaryPallet, - AmbassadorSalaryPallet, - )>, - // Subscriptions for version tracking are OK. - AllowSubscriptionsFrom, - ), - UniversalLocation, - ConstU32<8>, - >, - ), - >, ->; - -pub type AssetFeeAsExistentialDepositMultiplierFeeCharger = AssetFeeAsExistentialDepositMultiplier< - Runtime, - WeightToFee, - pallet_assets::BalanceToAssetBalance, - TrustBackedAssetsInstance, ->; - -/// Cases where a remote origin is accepted as trusted Teleporter for a given asset: -/// -/// - DOT with the parent Relay Chain and sibling system parachains; and -/// - Sibling parachains' assets from where they originate (as `ForeignCreators`). -pub type TrustedTeleporters = ( - ConcreteAssetFromSystem, - IsForeignConcreteAsset>>, -); - -pub struct XcmConfig; -impl xcm_executor::Config for XcmConfig { - type RuntimeCall = RuntimeCall; - type XcmSender = XcmRouter; - type AssetTransactor = AssetTransactors; - type OriginConverter = XcmOriginToTransactDispatchOrigin; - // Asset Hub Polkadot does not recognize a reserve location for any asset. This does not prevent - // Asset Hub acting _as_ a reserve location for DOT and assets created under `pallet-assets`. - // For DOT, users must use teleport where allowed (e.g. with the Relay Chain). - type IsReserve = (); - type IsTeleporter = TrustedTeleporters; - type UniversalLocation = UniversalLocation; - type Barrier = Barrier; - type Weigher = WeightInfoBounds< - crate::weights::xcm::AssetHubPolkadotXcmWeight, - RuntimeCall, - MaxInstructions, - >; - type Trader = ( - UsingComponents>, - cumulus_primitives_utility::TakeFirstAssetTrader< - AccountId, - AssetFeeAsExistentialDepositMultiplierFeeCharger, - TrustBackedAssetsConvertedConcreteId, - Assets, - cumulus_primitives_utility::XcmFeesTo32ByteAccount< - FungiblesTransactor, - AccountId, - XcmAssetFeesReceiver, - >, - >, - ); - type ResponseHandler = PolkadotXcm; - type AssetTrap = PolkadotXcm; - type AssetClaims = PolkadotXcm; - type SubscriptionService = PolkadotXcm; - type PalletInstancesInfo = AllPalletsWithSystem; - type MaxAssetsIntoHolding = MaxAssetsIntoHolding; - type AssetLocker = (); - type AssetExchanger = (); - type FeeManager = (); - type MessageExporter = (); - type UniversalAliases = Nothing; - type CallDispatcher = WithOriginFilter; - type SafeCallFilter = SafeCallFilter; - type Aliasers = Nothing; -} - -/// Converts a local signed origin into an XCM multilocation. -/// Forms the basis for local origins sending/executing XCMs. -pub type LocalOriginToLocation = SignedToAccountId32; - -parameter_types! { - /// The asset ID for the asset that we use to pay for message delivery fees. - pub FeeAssetId: AssetId = Concrete(DotLocation::get()); - /// The base fee for the message delivery fees. - pub const BaseDeliveryFee: u128 = CENTS.saturating_mul(3); -} - -pub type PriceForParentDelivery = - ExponentialPrice; - -/// The means for routing XCM messages which are not for local execution into the right message -/// queues. -pub type XcmRouter = WithUniqueTopic<( - // Two routers - use UMP to communicate with the relay chain: - cumulus_primitives_utility::ParentAsUmp, - // ..and XCMP to communicate with the sibling chains. - XcmpQueue, -)>; - -impl pallet_xcm::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - // We want to disallow users sending (arbitrary) XCMs from this chain. - type SendXcmOrigin = EnsureXcmOrigin; - type XcmRouter = XcmRouter; - // We support local origins dispatching XCM executions in principle... - type ExecuteXcmOrigin = EnsureXcmOrigin; - // ... but disallow generic XCM execution. As a result only teleports and reserve transfers are - // allowed. - type XcmExecuteFilter = Nothing; - type XcmExecutor = XcmExecutor; - type XcmTeleportFilter = Everything; - type XcmReserveTransferFilter = Everything; - type Weigher = WeightInfoBounds< - crate::weights::xcm::AssetHubPolkadotXcmWeight, - RuntimeCall, - MaxInstructions, - >; - type UniversalLocation = UniversalLocation; - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - 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>; - type WeightInfo = crate::weights::pallet_xcm::WeightInfo; - type AdminOrigin = EnsureRoot; - type MaxRemoteLockConsumers = ConstU32<0>; - type RemoteLockConsumerIdentifier = (); -} - -impl cumulus_pallet_xcm::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type XcmExecutor = XcmExecutor; -} - -pub type ForeignCreatorsSovereignAccountOf = ( - SiblingParachainConvertsVia, - AccountId32Aliases, - ParentIsPreset, -); - -/// Simple conversion of `u32` into an `AssetId` for use in benchmarking. -pub struct XcmBenchmarkHelper; -#[cfg(feature = "runtime-benchmarks")] -impl pallet_assets::BenchmarkHelper for XcmBenchmarkHelper { - fn create_asset_id_parameter(id: u32) -> MultiLocation { - MultiLocation { parents: 1, interior: X1(Parachain(id)) } - } -} - -#[test] -fn foreign_pallet_has_correct_local_account() { - use sp_core::crypto::{Ss58AddressFormat, Ss58Codec}; - use xcm_executor::traits::ConvertLocation; - - const COLLECTIVES_PARAID: u32 = 1001; - const FELLOWSHIP_SALARY_PALLET_ID: u8 = 64; - let fellowship_salary = - (Parent, Parachain(COLLECTIVES_PARAID), PalletInstance(FELLOWSHIP_SALARY_PALLET_ID)); - let account = LocationToAccountId::convert_location(&fellowship_salary.into()).unwrap(); - let polkadot = Ss58AddressFormat::try_from("polkadot").unwrap(); - let address = Ss58Codec::to_ss58check_with_version(&account, polkadot); - assert_eq!(address, "13w7NdvSR1Af8xsQTArDtZmVvjE8XhWNdL4yed3iFHrUNCnS"); -} diff --git a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/tests/tests.rs b/cumulus/parachains/runtimes/assets/asset-hub-polkadot/tests/tests.rs deleted file mode 100644 index b7e44646ece..00000000000 --- a/cumulus/parachains/runtimes/assets/asset-hub-polkadot/tests/tests.rs +++ /dev/null @@ -1,683 +0,0 @@ -// This file is part of Cumulus. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Tests for the Statemint (Polkadot Assets Hub) chain. - -use asset_hub_polkadot_runtime::xcm_config::{ - AssetFeeAsExistentialDepositMultiplierFeeCharger, CheckingAccount, DotLocation, - ForeignCreatorsSovereignAccountOf, LocationToAccountId, TrustBackedAssetsPalletLocation, - XcmConfig, -}; -pub use asset_hub_polkadot_runtime::{ - AllPalletsWithoutSystem, AssetDeposit, Assets, Balances, ExistentialDeposit, ForeignAssets, - ForeignAssetsInstance, MetadataDepositBase, MetadataDepositPerByte, ParachainSystem, Runtime, - RuntimeCall, RuntimeEvent, SessionKeys, System, TrustBackedAssetsInstance, XcmpQueue, -}; -use asset_test_utils::{CollatorSessionKeys, ExtBuilder}; -use codec::{Decode, Encode}; -use cumulus_primitives_utility::ChargeWeightInFungibles; -use frame_support::{ - assert_noop, assert_ok, - traits::fungibles::InspectEnumerable, - weights::{Weight, WeightToFee as WeightToFeeT}, -}; -use parachains_common::{ - polkadot::fee::WeightToFee, AccountId, AssetHubPolkadotAuraId as AuraId, - AssetIdForTrustBackedAssets, Balance, -}; -use sp_runtime::traits::MaybeEquivalence; -use xcm::latest::prelude::*; -use xcm_executor::traits::{Identity, JustTry, WeightTrader}; - -const ALICE: [u8; 32] = [1u8; 32]; -const SOME_ASSET_ADMIN: [u8; 32] = [5u8; 32]; - -type AssetIdForTrustBackedAssetsConvert = - assets_common::AssetIdForTrustBackedAssetsConvert; - -type RuntimeHelper = asset_test_utils::RuntimeHelper; - -fn collator_session_keys() -> CollatorSessionKeys { - CollatorSessionKeys::new( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::ed25519::Public::from_raw(ALICE)) }, - ) -} - -#[test] -fn test_asset_xcm_trader() { - ExtBuilder::::default() - .with_collators(vec![AccountId::from(ALICE)]) - .with_session_keys(vec![( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::ed25519::Public::from_raw(ALICE)) }, - )]) - .build() - .execute_with(|| { - // We need root origin to create a sufficient asset - let minimum_asset_balance = 333333333_u128; - let local_asset_id = 1; - assert_ok!(Assets::force_create( - RuntimeHelper::root_origin(), - local_asset_id.into(), - AccountId::from(ALICE).into(), - true, - minimum_asset_balance - )); - - // We first mint enough asset for the account to exist for assets - assert_ok!(Assets::mint( - RuntimeHelper::origin_of(AccountId::from(ALICE)), - local_asset_id.into(), - AccountId::from(ALICE).into(), - minimum_asset_balance - )); - - // get asset id as multilocation - let asset_multilocation = - AssetIdForTrustBackedAssetsConvert::convert_back(&local_asset_id).unwrap(); - - // Set Alice as block author, who will receive fees - RuntimeHelper::run_to_block(2, AccountId::from(ALICE)); - - // We are going to buy 400e9 weight - // Because of the ED being higher in kusama's asset hub - // and not to complicate things, we use a little - // bit more of weight - let bought = Weight::from_parts(400_000_000_000u64, 0); - - // Lets calculate amount needed - let asset_amount_needed = - AssetFeeAsExistentialDepositMultiplierFeeCharger::charge_weight_in_fungibles( - local_asset_id, - bought, - ) - .expect("failed to compute"); - - // Lets pay with: asset_amount_needed + asset_amount_extra - let asset_amount_extra = 100_u128; - let asset: MultiAsset = - (asset_multilocation, asset_amount_needed + asset_amount_extra).into(); - - let mut trader = ::Trader::new(); - let ctx = XcmContext { origin: None, message_id: XcmHash::default(), topic: None }; - - // Lets buy_weight and make sure buy_weight does not return an error - let unused_assets = trader.buy_weight(bought, asset.into(), &ctx).expect("Expected Ok"); - // Check whether a correct amount of unused assets is returned - assert_ok!( - unused_assets.ensure_contains(&(asset_multilocation, asset_amount_extra).into()) - ); - - // Drop trader - drop(trader); - - // Make sure author(Alice) has received the amount - assert_eq!( - Assets::balance(local_asset_id, AccountId::from(ALICE)), - minimum_asset_balance + asset_amount_needed - ); - - // We also need to ensure the total supply increased - assert_eq!( - Assets::total_supply(local_asset_id), - minimum_asset_balance + asset_amount_needed - ); - }); -} - -#[test] -fn test_asset_xcm_trader_with_refund() { - ExtBuilder::::default() - .with_collators(vec![AccountId::from(ALICE)]) - .with_session_keys(vec![( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::ed25519::Public::from_raw(ALICE)) }, - )]) - .build() - .execute_with(|| { - // We need root origin to create a sufficient asset - // We set existential deposit to be identical to the one for Balances first - assert_ok!(Assets::force_create( - RuntimeHelper::root_origin(), - 1.into(), - AccountId::from(ALICE).into(), - true, - ExistentialDeposit::get() - )); - - // We first mint enough asset for the account to exist for assets - assert_ok!(Assets::mint( - RuntimeHelper::origin_of(AccountId::from(ALICE)), - 1.into(), - AccountId::from(ALICE).into(), - ExistentialDeposit::get() - )); - - let mut trader = ::Trader::new(); - let ctx = XcmContext { origin: None, message_id: XcmHash::default(), topic: None }; - - // Set Alice as block author, who will receive fees - RuntimeHelper::run_to_block(2, AccountId::from(ALICE)); - - // We are going to buy 400e9 weight - // Because of the ED being higher in kusama's asset hub - // and not to complicate things, we use a little - // bit more of weight - let bought = Weight::from_parts(400_000_000_000u64, 0); - - let asset_multilocation = AssetIdForTrustBackedAssetsConvert::convert_back(&1).unwrap(); - - // lets calculate amount needed - let amount_bought = WeightToFee::weight_to_fee(&bought); - - let asset: MultiAsset = (asset_multilocation, amount_bought).into(); - - // Make sure buy_weight does not return an error - assert_ok!(trader.buy_weight(bought, asset.clone().into(), &ctx)); - - // Make sure again buy_weight does return an error - // This assert relies on the fact, that we use `TakeFirstAssetTrader` in `WeightTrader` - // tuple chain, which cannot be called twice - assert_noop!(trader.buy_weight(bought, asset.into(), &ctx), XcmError::TooExpensive); - - // We actually use half of the weight - let weight_used = bought / 2; - - // Make sure refurnd works. - let amount_refunded = WeightToFee::weight_to_fee(&(bought - weight_used)); - - assert_eq!( - trader.refund_weight(bought - weight_used, &ctx), - Some((asset_multilocation, amount_refunded).into()) - ); - - // Drop trader - drop(trader); - - // We only should have paid for half of the bought weight - let fees_paid = WeightToFee::weight_to_fee(&weight_used); - - assert_eq!( - Assets::balance(1, AccountId::from(ALICE)), - ExistentialDeposit::get() + fees_paid - ); - - // We also need to ensure the total supply increased - assert_eq!(Assets::total_supply(1), ExistentialDeposit::get() + fees_paid); - }); -} - -#[test] -fn test_asset_xcm_trader_refund_not_possible_since_amount_less_than_ed() { - ExtBuilder::::default() - .with_collators(vec![AccountId::from(ALICE)]) - .with_session_keys(vec![( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::ed25519::Public::from_raw(ALICE)) }, - )]) - .build() - .execute_with(|| { - // We need root origin to create a sufficient asset - // We set existential deposit to be identical to the one for Balances first - assert_ok!(Assets::force_create( - RuntimeHelper::root_origin(), - 1.into(), - AccountId::from(ALICE).into(), - true, - ExistentialDeposit::get() - )); - - let mut trader = ::Trader::new(); - let ctx = XcmContext { origin: None, message_id: XcmHash::default(), topic: None }; - - // Set Alice as block author, who will receive fees - RuntimeHelper::run_to_block(2, AccountId::from(ALICE)); - - // We are going to buy 50e9 weight - // Because of the ED being higher in kusama's asset hub - // and not to complicate things, we use a little - // bit more of weight - let bought = Weight::from_parts(50_000_000_000u64, 0); - - let asset_multilocation = AssetIdForTrustBackedAssetsConvert::convert_back(&1).unwrap(); - - let amount_bought = WeightToFee::weight_to_fee(&bought); - - assert!( - amount_bought < ExistentialDeposit::get(), - "we are testing what happens when the amount does not exceed ED" - ); - - let asset: MultiAsset = (asset_multilocation, amount_bought).into(); - - // Buy weight should return an error - assert_noop!(trader.buy_weight(bought, asset.into(), &ctx), XcmError::TooExpensive); - - // not credited since the ED is higher than this value - assert_eq!(Assets::balance(1, AccountId::from(ALICE)), 0); - - // We also need to ensure the total supply did not increase - assert_eq!(Assets::total_supply(1), 0); - }); -} - -#[test] -fn test_that_buying_ed_refund_does_not_refund() { - ExtBuilder::::default() - .with_collators(vec![AccountId::from(ALICE)]) - .with_session_keys(vec![( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::ed25519::Public::from_raw(ALICE)) }, - )]) - .build() - .execute_with(|| { - // We need root origin to create a sufficient asset - // We set existential deposit to be identical to the one for Balances first - assert_ok!(Assets::force_create( - RuntimeHelper::root_origin(), - 1.into(), - AccountId::from(ALICE).into(), - true, - ExistentialDeposit::get() - )); - - let mut trader = ::Trader::new(); - let ctx = XcmContext { origin: None, message_id: XcmHash::default(), topic: None }; - - // Set Alice as block author, who will receive fees - RuntimeHelper::run_to_block(2, AccountId::from(ALICE)); - - // We are gonna buy ED - let bought = Weight::from_parts(ExistentialDeposit::get().try_into().unwrap(), 0); - - let asset_multilocation = AssetIdForTrustBackedAssetsConvert::convert_back(&1).unwrap(); - - let amount_bought = WeightToFee::weight_to_fee(&bought); - - assert!( - amount_bought < ExistentialDeposit::get(), - "we are testing what happens when the amount does not exceed ED" - ); - - // We know we will have to buy at least ED, so lets make sure first it will - // fail with a payment of less than ED - let asset: MultiAsset = (asset_multilocation, amount_bought).into(); - assert_noop!(trader.buy_weight(bought, asset.into(), &ctx), XcmError::TooExpensive); - - // Now lets buy ED at least - let asset: MultiAsset = (asset_multilocation, ExistentialDeposit::get()).into(); - - // Buy weight should work - assert_ok!(trader.buy_weight(bought, asset.into(), &ctx)); - - // Should return None. We have a specific check making sure we dont go below ED for - // drop payment - assert_eq!(trader.refund_weight(bought, &ctx), None); - - // Drop trader - drop(trader); - - // Make sure author(Alice) has received the amount - assert_eq!(Assets::balance(1, AccountId::from(ALICE)), ExistentialDeposit::get()); - - // We also need to ensure the total supply increased - assert_eq!(Assets::total_supply(1), ExistentialDeposit::get()); - }); -} - -#[test] -fn test_asset_xcm_trader_not_possible_for_non_sufficient_assets() { - ExtBuilder::::default() - .with_collators(vec![AccountId::from(ALICE)]) - .with_session_keys(vec![( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::ed25519::Public::from_raw(ALICE)) }, - )]) - .build() - .execute_with(|| { - // Create a non-sufficient asset - let minimum_asset_balance = 1_000_000_u128; - assert_ok!(Assets::force_create( - RuntimeHelper::root_origin(), - 1.into(), - AccountId::from(ALICE).into(), - false, - minimum_asset_balance - )); - - // We first mint enough asset for the account to exist for assets - assert_ok!(Assets::mint( - RuntimeHelper::origin_of(AccountId::from(ALICE)), - 1.into(), - AccountId::from(ALICE).into(), - minimum_asset_balance - )); - - let mut trader = ::Trader::new(); - let ctx = XcmContext { origin: None, message_id: XcmHash::default(), topic: None }; - - // Set Alice as block author, who will receive fees - RuntimeHelper::run_to_block(2, AccountId::from(ALICE)); - - // We are going to buy 400e9 weight - // Because of the ED being higher in kusama's asset hub - // and not to complicate things, we use a little - // bit more of weight - let bought = Weight::from_parts(400_000_000_000u64, 0); - - // lets calculate amount needed - let asset_amount_needed = WeightToFee::weight_to_fee(&bought); - - let asset_multilocation = AssetIdForTrustBackedAssetsConvert::convert_back(&1).unwrap(); - - let asset: MultiAsset = (asset_multilocation, asset_amount_needed).into(); - - // Make sure again buy_weight does return an error - assert_noop!(trader.buy_weight(bought, asset.into(), &ctx), XcmError::TooExpensive); - - // Drop trader - drop(trader); - - // Make sure author(Alice) has NOT received the amount - assert_eq!(Assets::balance(1, AccountId::from(ALICE)), minimum_asset_balance); - - // We also need to ensure the total supply NOT increased - assert_eq!(Assets::total_supply(1), minimum_asset_balance); - }); -} - -#[test] -fn test_assets_balances_api_works() { - use assets_common::runtime_api::runtime_decl_for_fungibles_api::FungiblesApi; - - ExtBuilder::::default() - .with_collators(vec![AccountId::from(ALICE)]) - .with_session_keys(vec![( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::ed25519::Public::from_raw(ALICE)) }, - )]) - .build() - .execute_with(|| { - let local_asset_id = 1; - let foreign_asset_id_multilocation = - MultiLocation { parents: 1, interior: X2(Parachain(1234), GeneralIndex(12345)) }; - - // check before - assert_eq!(Assets::balance(local_asset_id, AccountId::from(ALICE)), 0); - assert_eq!( - ForeignAssets::balance(foreign_asset_id_multilocation, AccountId::from(ALICE)), - 0 - ); - assert_eq!(Balances::free_balance(AccountId::from(ALICE)), 0); - assert!(Runtime::query_account_balances(AccountId::from(ALICE)) - .unwrap() - .try_as::() - .unwrap() - .is_none()); - - // Drip some balance - use frame_support::traits::fungible::Mutate; - let some_currency = ExistentialDeposit::get(); - Balances::mint_into(&AccountId::from(ALICE), some_currency).unwrap(); - - // We need root origin to create a sufficient asset - let minimum_asset_balance = 3333333_u128; - assert_ok!(Assets::force_create( - RuntimeHelper::root_origin(), - local_asset_id.into(), - AccountId::from(ALICE).into(), - true, - minimum_asset_balance - )); - - // We first mint enough asset for the account to exist for assets - assert_ok!(Assets::mint( - RuntimeHelper::origin_of(AccountId::from(ALICE)), - local_asset_id.into(), - AccountId::from(ALICE).into(), - minimum_asset_balance - )); - - // create foreign asset - let foreign_asset_minimum_asset_balance = 3333333_u128; - assert_ok!(ForeignAssets::force_create( - RuntimeHelper::root_origin(), - foreign_asset_id_multilocation, - AccountId::from(SOME_ASSET_ADMIN).into(), - false, - foreign_asset_minimum_asset_balance - )); - - // We first mint enough asset for the account to exist for assets - assert_ok!(ForeignAssets::mint( - RuntimeHelper::origin_of(AccountId::from(SOME_ASSET_ADMIN)), - foreign_asset_id_multilocation, - AccountId::from(ALICE).into(), - 6 * foreign_asset_minimum_asset_balance - )); - - // check after - assert_eq!( - Assets::balance(local_asset_id, AccountId::from(ALICE)), - minimum_asset_balance - ); - assert_eq!( - ForeignAssets::balance(foreign_asset_id_multilocation, AccountId::from(ALICE)), - 6 * minimum_asset_balance - ); - assert_eq!(Balances::free_balance(AccountId::from(ALICE)), some_currency); - - let result: MultiAssets = Runtime::query_account_balances(AccountId::from(ALICE)) - .unwrap() - .try_into() - .unwrap(); - assert_eq!(result.len(), 3); - - // check currency - assert!(result.inner().iter().any(|asset| asset.eq( - &assets_common::fungible_conversion::convert_balance::( - some_currency - ) - .unwrap() - ))); - // check trusted asset - assert!(result.inner().iter().any(|asset| asset.eq(&( - AssetIdForTrustBackedAssetsConvert::convert_back(&local_asset_id).unwrap(), - minimum_asset_balance - ) - .into()))); - // check foreign asset - assert!(result.inner().iter().any(|asset| asset.eq(&( - Identity::convert_back(&foreign_asset_id_multilocation).unwrap(), - 6 * foreign_asset_minimum_asset_balance - ) - .into()))); - }); -} - -asset_test_utils::include_teleports_for_native_asset_works!( - Runtime, - AllPalletsWithoutSystem, - XcmConfig, - CheckingAccount, - WeightToFee, - ParachainSystem, - collator_session_keys(), - ExistentialDeposit::get(), - Box::new(|runtime_event_encoded: Vec| { - match RuntimeEvent::decode(&mut &runtime_event_encoded[..]) { - Ok(RuntimeEvent::PolkadotXcm(event)) => Some(event), - _ => None, - } - }), - 1000 -); - -asset_test_utils::include_teleports_for_foreign_assets_works!( - Runtime, - AllPalletsWithoutSystem, - XcmConfig, - CheckingAccount, - WeightToFee, - ParachainSystem, - ForeignCreatorsSovereignAccountOf, - ForeignAssetsInstance, - asset_test_utils::CollatorSessionKeys::new( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::ed25519::Public::from_raw(ALICE)) } - ), - ExistentialDeposit::get(), - Box::new(|runtime_event_encoded: Vec| { - match RuntimeEvent::decode(&mut &runtime_event_encoded[..]) { - Ok(RuntimeEvent::PolkadotXcm(event)) => Some(event), - _ => None, - } - }), - Box::new(|runtime_event_encoded: Vec| { - match RuntimeEvent::decode(&mut &runtime_event_encoded[..]) { - Ok(RuntimeEvent::XcmpQueue(event)) => Some(event), - _ => None, - } - }) -); - -asset_test_utils::include_asset_transactor_transfer_with_local_consensus_currency_works!( - Runtime, - XcmConfig, - collator_session_keys(), - ExistentialDeposit::get(), - Box::new(|| { - assert!(Assets::asset_ids().collect::>().is_empty()); - assert!(ForeignAssets::asset_ids().collect::>().is_empty()); - }), - Box::new(|| { - assert!(Assets::asset_ids().collect::>().is_empty()); - assert!(ForeignAssets::asset_ids().collect::>().is_empty()); - }) -); - -asset_test_utils::include_asset_transactor_transfer_with_pallet_assets_instance_works!( - asset_transactor_transfer_with_trust_backed_assets_works, - Runtime, - XcmConfig, - TrustBackedAssetsInstance, - AssetIdForTrustBackedAssets, - AssetIdForTrustBackedAssetsConvert, - collator_session_keys(), - ExistentialDeposit::get(), - 12345, - Box::new(|| { - assert!(ForeignAssets::asset_ids().collect::>().is_empty()); - }), - Box::new(|| { - assert!(ForeignAssets::asset_ids().collect::>().is_empty()); - }) -); - -asset_test_utils::include_asset_transactor_transfer_with_pallet_assets_instance_works!( - asset_transactor_transfer_with_foreign_assets_works, - Runtime, - XcmConfig, - ForeignAssetsInstance, - MultiLocation, - JustTry, - asset_test_utils::CollatorSessionKeys::new( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::ed25519::Public::from_raw(ALICE)) } - ), - ExistentialDeposit::get(), - MultiLocation { parents: 1, interior: X2(Parachain(1313), GeneralIndex(12345)) }, - Box::new(|| { - assert!(Assets::asset_ids().collect::>().is_empty()); - }), - Box::new(|| { - assert!(Assets::asset_ids().collect::>().is_empty()); - }) -); - -asset_test_utils::include_create_and_manage_foreign_assets_for_local_consensus_parachain_assets_works!( - Runtime, - XcmConfig, - WeightToFee, - ForeignCreatorsSovereignAccountOf, - ForeignAssetsInstance, - MultiLocation, - JustTry, - asset_test_utils::CollatorSessionKeys::new( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::ed25519::Public::from_raw(ALICE)) } - ), - ExistentialDeposit::get(), - AssetDeposit::get(), - MetadataDepositBase::get(), - MetadataDepositPerByte::get(), - Box::new(|pallet_asset_call| RuntimeCall::ForeignAssets(pallet_asset_call).encode()), - Box::new(|runtime_event_encoded: Vec| { - match RuntimeEvent::decode(&mut &runtime_event_encoded[..]) { - Ok(RuntimeEvent::ForeignAssets(pallet_asset_event)) => Some(pallet_asset_event), - _ => None, - } - }), - Box::new(|| { - assert!(Assets::asset_ids().collect::>().is_empty()); - assert!(ForeignAssets::asset_ids().collect::>().is_empty()); - }), - Box::new(|| { - assert!(Assets::asset_ids().collect::>().is_empty()); - assert_eq!(ForeignAssets::asset_ids().collect::>().len(), 1); - }) -); - -#[test] -fn reserve_transfer_native_asset_to_non_teleport_para_works() { - asset_test_utils::test_cases::reserve_transfer_native_asset_to_non_teleport_para_works::< - Runtime, - AllPalletsWithoutSystem, - XcmConfig, - ParachainSystem, - XcmpQueue, - LocationToAccountId, - >( - collator_session_keys(), - ExistentialDeposit::get(), - AccountId::from(ALICE), - Box::new(|runtime_event_encoded: Vec| { - match RuntimeEvent::decode(&mut &runtime_event_encoded[..]) { - Ok(RuntimeEvent::PolkadotXcm(event)) => Some(event), - _ => None, - } - }), - Box::new(|runtime_event_encoded: Vec| { - match RuntimeEvent::decode(&mut &runtime_event_encoded[..]) { - Ok(RuntimeEvent::XcmpQueue(event)) => Some(event), - _ => None, - } - }), - WeightLimit::Unlimited, - ); -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/Cargo.toml b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/Cargo.toml deleted file mode 100644 index 2cd002b1c60..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/Cargo.toml +++ /dev/null @@ -1,192 +0,0 @@ -[package] -name = "bridge-hub-kusama-runtime" -version = "0.1.0" -authors.workspace = true -edition.workspace = true -description = "Kusama's BridgeHub parachain runtime" -license = "Apache-2.0" - -[build-dependencies] -substrate-wasm-builder = { path = "../../../../../substrate/utils/wasm-builder", optional = true } - -[dependencies] -codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -hex-literal = { version = "0.4.1" } -log = { version = "0.4.20", default-features = false } -scale-info = { version = "2.10.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.188", optional = true, features = ["derive"] } -smallvec = "1.11.0" - -# Substrate -frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true} -frame-executive = { path = "../../../../../substrate/frame/executive", default-features = false} -frame-support = { path = "../../../../../substrate/frame/support", default-features = false} -frame-system = { path = "../../../../../substrate/frame/system", default-features = false} -frame-system-benchmarking = { path = "../../../../../substrate/frame/system/benchmarking", default-features = false, optional = true} -frame-system-rpc-runtime-api = { path = "../../../../../substrate/frame/system/rpc/runtime-api", default-features = false} -frame-try-runtime = { path = "../../../../../substrate/frame/try-runtime", default-features = false, optional = true} -pallet-aura = { path = "../../../../../substrate/frame/aura", default-features = false} -pallet-authorship = { path = "../../../../../substrate/frame/authorship", default-features = false} -pallet-balances = { path = "../../../../../substrate/frame/balances", default-features = false} -pallet-multisig = { path = "../../../../../substrate/frame/multisig", default-features = false} -pallet-session = { path = "../../../../../substrate/frame/session", default-features = false} -pallet-timestamp = { path = "../../../../../substrate/frame/timestamp", default-features = false} -pallet-transaction-payment = { path = "../../../../../substrate/frame/transaction-payment", default-features = false} -pallet-transaction-payment-rpc-runtime-api = { path = "../../../../../substrate/frame/transaction-payment/rpc/runtime-api", default-features = false} -pallet-utility = { path = "../../../../../substrate/frame/utility", default-features = false} -sp-api = { path = "../../../../../substrate/primitives/api", default-features = false} -sp-block-builder = { path = "../../../../../substrate/primitives/block-builder", default-features = false} -sp-consensus-aura = { path = "../../../../../substrate/primitives/consensus/aura", default-features = false} -sp-core = { path = "../../../../../substrate/primitives/core", default-features = false} -sp-genesis-builder = { path = "../../../../../substrate/primitives/genesis-builder", default-features = false } -sp-inherents = { path = "../../../../../substrate/primitives/inherents", default-features = false} -sp-io = { path = "../../../../../substrate/primitives/io", default-features = false} -sp-offchain = { path = "../../../../../substrate/primitives/offchain", default-features = false} -sp-runtime = { path = "../../../../../substrate/primitives/runtime", default-features = false} -sp-session = { path = "../../../../../substrate/primitives/session", default-features = false} -sp-std = { path = "../../../../../substrate/primitives/std", default-features = false} -sp-storage = { path = "../../../../../substrate/primitives/storage", default-features = false} -sp-transaction-pool = { path = "../../../../../substrate/primitives/transaction-pool", default-features = false} -sp-version = { path = "../../../../../substrate/primitives/version", default-features = false} - -# Polkadot -pallet-xcm = { path = "../../../../../polkadot/xcm/pallet-xcm", default-features = false} -pallet-xcm-benchmarks = { path = "../../../../../polkadot/xcm/pallet-xcm-benchmarks", default-features = false, optional = true } -polkadot-core-primitives = { path = "../../../../../polkadot/core-primitives", default-features = false} -polkadot-parachain-primitives = { path = "../../../../../polkadot/parachain", default-features = false} -polkadot-runtime-common = { path = "../../../../../polkadot/runtime/common", default-features = false} -xcm = { package = "staging-xcm", path = "../../../../../polkadot/xcm", default-features = false} -xcm-builder = { package = "staging-xcm-builder", path = "../../../../../polkadot/xcm/xcm-builder", default-features = false} -xcm-executor = { package = "staging-xcm-executor", path = "../../../../../polkadot/xcm/xcm-executor", default-features = false} - -# Cumulus -cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } -pallet-message-queue = { path = "../../../../../substrate/frame/message-queue", default-features = false } -cumulus-pallet-dmp-queue = { path = "../../../../pallets/dmp-queue", default-features = false } -cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = ["parameterized-consensus-hook",] } -cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false} -cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } -cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } -cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } -cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } -pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } -parachain-info = { package = "staging-parachain-info", path = "../../../pallets/parachain-info", default-features = false } -parachains-common = { path = "../../../common", default-features = false } - -[dev-dependencies] -bridge-hub-test-utils = { path = "../test-utils" } - -[features] -default = [ "std" ] -std = [ - "codec/std", - "cumulus-pallet-aura-ext/std", - "cumulus-pallet-dmp-queue/std", - "cumulus-pallet-parachain-system/std", - "cumulus-pallet-session-benchmarking/std", - "cumulus-pallet-xcm/std", - "cumulus-pallet-xcmp-queue/std", - "cumulus-primitives-core/std", - "cumulus-primitives-utility/std", - "frame-benchmarking?/std", - "frame-executive/std", - "frame-support/std", - "frame-system-benchmarking?/std", - "frame-system-rpc-runtime-api/std", - "frame-system/std", - "frame-try-runtime?/std", - "log/std", - "pallet-aura/std", - "pallet-authorship/std", - "pallet-balances/std", - "pallet-collator-selection/std", - "pallet-message-queue/std", - "pallet-multisig/std", - "pallet-session/std", - "pallet-timestamp/std", - "pallet-transaction-payment-rpc-runtime-api/std", - "pallet-transaction-payment/std", - "pallet-utility/std", - "pallet-xcm-benchmarks?/std", - "pallet-xcm/std", - "parachain-info/std", - "parachains-common/std", - "polkadot-core-primitives/std", - "polkadot-parachain-primitives/std", - "polkadot-runtime-common/std", - "scale-info/std", - "serde", - "sp-api/std", - "sp-block-builder/std", - "sp-consensus-aura/std", - "sp-core/std", - "sp-genesis-builder/std", - "sp-inherents/std", - "sp-io/std", - "sp-offchain/std", - "sp-runtime/std", - "sp-session/std", - "sp-std/std", - "sp-storage/std", - "sp-transaction-pool/std", - "sp-version/std", - "substrate-wasm-builder", - "xcm-builder/std", - "xcm-executor/std", - "xcm/std", -] - -runtime-benchmarks = [ - "cumulus-pallet-dmp-queue/runtime-benchmarks", - "cumulus-pallet-parachain-system/runtime-benchmarks", - "cumulus-pallet-session-benchmarking/runtime-benchmarks", - "cumulus-pallet-xcmp-queue/runtime-benchmarks", - "cumulus-primitives-core/runtime-benchmarks", - "cumulus-primitives-utility/runtime-benchmarks", - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system-benchmarking/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "pallet-collator-selection/runtime-benchmarks", - "pallet-message-queue/runtime-benchmarks", - "pallet-multisig/runtime-benchmarks", - "pallet-timestamp/runtime-benchmarks", - "pallet-utility/runtime-benchmarks", - "pallet-xcm-benchmarks/runtime-benchmarks", - "pallet-xcm/runtime-benchmarks", - "parachains-common/runtime-benchmarks", - "polkadot-parachain-primitives/runtime-benchmarks", - "polkadot-runtime-common/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "xcm-builder/runtime-benchmarks", - "xcm-executor/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-support/try-runtime", - "frame-system/try-runtime", - "frame-try-runtime/try-runtime", - "pallet-aura/try-runtime", - "pallet-authorship/try-runtime", - "pallet-balances/try-runtime", - "pallet-collator-selection/try-runtime", - "pallet-message-queue/try-runtime", - "pallet-multisig/try-runtime", - "pallet-session/try-runtime", - "pallet-timestamp/try-runtime", - "pallet-transaction-payment/try-runtime", - "pallet-utility/try-runtime", - "pallet-xcm/try-runtime", - "parachain-info/try-runtime", - "polkadot-runtime-common/try-runtime", - "sp-runtime/try-runtime", -] - -experimental = [ "pallet-aura/experimental" ] diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/build.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/build.rs deleted file mode 100644 index 60f8a125129..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/build.rs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#[cfg(feature = "std")] -fn main() { - substrate_wasm_builder::WasmBuilder::new() - .with_current_project() - .export_heap_base() - .import_memory() - .build() -} - -#[cfg(not(feature = "std"))] -fn main() {} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs deleted file mode 100644 index a511791d347..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/lib.rs +++ /dev/null @@ -1,872 +0,0 @@ -// Copyright (C) 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 . - -#![cfg_attr(not(feature = "std"), no_std)] -// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. -#![recursion_limit = "256"] - -// Make the WASM binary available. -#[cfg(feature = "std")] -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -mod weights; -pub mod xcm_config; - -use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; -use polkadot_runtime_common::xcm_sender::NoPriceForMessageDelivery; -use sp_api::impl_runtime_apis; -use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; -use sp_runtime::{ - create_runtime_str, generic, impl_opaque_keys, - traits::{AccountIdLookup, BlakeTwo256, Block as BlockT}, - transaction_validity::{TransactionSource, TransactionValidity}, - ApplyExtrinsicResult, -}; - -use sp_std::prelude::*; -#[cfg(feature = "std")] -use sp_version::NativeVersion; -use sp_version::RuntimeVersion; - -use cumulus_primitives_core::{AggregateMessageOrigin, ParaId}; -use frame_support::{ - construct_runtime, - dispatch::DispatchClass, - genesis_builder_helper::{build_config, create_default_config}, - parameter_types, - traits::{ - ConstBool, ConstU32, ConstU64, ConstU8, EitherOfDiverse, Everything, TransformOrigin, - }, - weights::{ConstantMultiplier, Weight}, - PalletId, -}; -use frame_system::{ - limits::{BlockLength, BlockWeights}, - EnsureRoot, -}; -use pallet_xcm::{EnsureXcm, IsVoiceOfBody}; -pub use sp_consensus_aura::sr25519::AuthorityId as AuraId; -pub use sp_runtime::{MultiAddress, Perbill, Permill}; -use xcm_config::{FellowshipLocation, GovernanceLocation, XcmOriginToTransactDispatchOrigin}; - -#[cfg(any(feature = "std", test))] -pub use sp_runtime::BuildStorage; - -use polkadot_runtime_common::{BlockHashCount, SlowAdjustingFeeUpdate}; - -use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight}; - -use parachains_common::{ - impls::DealWithFees, - kusama::{consensus::*, currency::*, fee::WeightToFee}, - message_queue::{NarrowOriginToSibling, ParaIdToSibling}, - AccountId, Balance, BlockNumber, Hash, Header, Nonce, Signature, AVERAGE_ON_INITIALIZE_RATIO, - HOURS, MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, -}; - -// XCM Imports -use xcm::latest::prelude::BodyId; - -/// The address format for describing accounts. -pub type Address = MultiAddress; - -/// Block type as expected by this runtime. -pub type Block = generic::Block; - -/// A Block signed with a Justification -pub type SignedBlock = generic::SignedBlock; - -/// BlockId type as expected by this runtime. -pub type BlockId = generic::BlockId; - -/// The SignedExtension to the basic transaction logic. -pub type SignedExtra = ( - frame_system::CheckNonZeroSender, - frame_system::CheckSpecVersion, - frame_system::CheckTxVersion, - frame_system::CheckGenesis, - frame_system::CheckEra, - frame_system::CheckNonce, - frame_system::CheckWeight, - pallet_transaction_payment::ChargeTransactionPayment, -); - -/// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = - generic::UncheckedExtrinsic; - -/// Migrations to apply on runtime upgrade. -pub type Migrations = ( - // unreleased - pallet_collator_selection::migration::v1::MigrateToV1, -); - -/// Executive: handles dispatch to the various modules. -pub type Executive = frame_executive::Executive< - Runtime, - Block, - frame_system::ChainContext, - Runtime, - AllPalletsWithSystem, - Migrations, ->; - -impl_opaque_keys! { - pub struct SessionKeys { - pub aura: Aura, - } -} - -#[sp_version::runtime_version] -pub const VERSION: RuntimeVersion = RuntimeVersion { - spec_name: create_runtime_str!("bridge-hub-kusama"), - impl_name: create_runtime_str!("bridge-hub-kusama"), - authoring_version: 1, - spec_version: 1_004_000, - impl_version: 0, - apis: RUNTIME_API_VERSIONS, - transaction_version: 3, - state_version: 1, -}; - -/// The version information used to identify this runtime when compiled natively. -#[cfg(feature = "std")] -pub fn native_version() -> NativeVersion { - NativeVersion { runtime_version: VERSION, can_author_with: Default::default() } -} - -parameter_types! { - pub const Version: RuntimeVersion = VERSION; - pub RuntimeBlockLength: BlockLength = - BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); - pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() - .base_block(BlockExecutionWeight::get()) - .for_class(DispatchClass::all(), |weights| { - weights.base_extrinsic = ExtrinsicBaseWeight::get(); - }) - .for_class(DispatchClass::Normal, |weights| { - weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); - }) - .for_class(DispatchClass::Operational, |weights| { - weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT); - // Operational transactions have some extra reserved space, so that they - // are included even if block reached `MAXIMUM_BLOCK_WEIGHT`. - weights.reserved = Some( - MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT - ); - }) - .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO) - .build_or_panic(); - pub const SS58Prefix: u8 = 2; -} - -// Configure FRAME pallets to include in runtime. - -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 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. - type Nonce = Nonce; - /// The type for hashing blocks and tries. - type Hash = Hash; - /// The hashing algorithm used. - type Hashing = BlakeTwo256; - /// The block type. - type Block = Block; - /// The ubiquitous event type. - type RuntimeEvent = RuntimeEvent; - /// The ubiquitous origin type. - type RuntimeOrigin = RuntimeOrigin; - /// Maximum number of block number to block hash mappings to keep (oldest pruned first). - type BlockHashCount = BlockHashCount; - /// Runtime version. - type Version = Version; - /// Converts a module to an index of this module in the runtime. - type PalletInfo = PalletInfo; - /// The data to be stored in an account. - type AccountData = pallet_balances::AccountData; - /// What to do if a new account is created. - type OnNewAccount = (); - /// What to do if an account is fully reaped from the system. - type OnKilledAccount = (); - /// The weight of database operations that the runtime can invoke. - type DbWeight = RocksDbWeight; - /// The basic call filter to use in dispatchable. - type BaseCallFilter = Everything; - /// Weight information for the extrinsics of this pallet. - type SystemWeightInfo = weights::frame_system::WeightInfo; - /// Block & extrinsics weights: base values and limits. - type BlockWeights = RuntimeBlockWeights; - /// The maximum length of a block (in bytes). - type BlockLength = RuntimeBlockLength; - type SS58Prefix = SS58Prefix; - /// The action to take on a Runtime Upgrade - type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode; - type MaxConsumers = ConstU32<16>; -} - -impl pallet_timestamp::Config for Runtime { - /// A timestamp: milliseconds since the unix epoch. - type Moment = u64; - type OnTimestampSet = Aura; - type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; - type WeightInfo = weights::pallet_timestamp::WeightInfo; -} - -impl pallet_authorship::Config for Runtime { - type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type EventHandler = (CollatorSelection,); -} - -parameter_types! { - pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; -} - -impl pallet_balances::Config for Runtime { - /// The type for recording an account's balance. - type Balance = Balance; - type DustRemoval = (); - /// The ubiquitous event type. - type RuntimeEvent = RuntimeEvent; - type ExistentialDeposit = ExistentialDeposit; - type AccountStore = System; - type WeightInfo = weights::pallet_balances::WeightInfo; - type MaxLocks = ConstU32<50>; - type MaxReserves = ConstU32<50>; - type ReserveIdentifier = [u8; 8]; - type RuntimeHoldReason = RuntimeHoldReason; - type RuntimeFreezeReason = RuntimeFreezeReason; - type FreezeIdentifier = (); - type MaxHolds = ConstU32<0>; - type MaxFreezes = ConstU32<0>; -} - -parameter_types! { - /// Relay Chain `TransactionByteFee` / 10 - pub const TransactionByteFee: Balance = MILLICENTS; -} - -impl pallet_transaction_payment::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type OnChargeTransaction = - pallet_transaction_payment::CurrencyAdapter>; - type OperationalFeeMultiplier = ConstU8<5>; - type WeightToFee = WeightToFee; - type LengthToFee = ConstantMultiplier; - type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; -} - -parameter_types! { - 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 { - type WeightInfo = weights::cumulus_pallet_parachain_system::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type OnSystemEvent = (); - type SelfParaId = parachain_info::Pallet; - type OutboundXcmpMessageSource = XcmpQueue; - type DmpQueue = frame_support::traits::EnqueueWithOrigin; - type ReservedDmpWeight = ReservedDmpWeight; - type XcmpMessageHandler = XcmpQueue; - type ReservedXcmpWeight = ReservedXcmpWeight; - type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; - type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< - Runtime, - RELAY_CHAIN_SLOT_DURATION_MILLIS, - BLOCK_PROCESSING_VELOCITY, - UNINCLUDED_SEGMENT_CAPACITY, - >; -} - -impl parachain_info::Config for Runtime {} - -parameter_types! { - pub MessageQueueServiceWeight: Weight = Perbill::from_percent(35) * RuntimeBlockWeights::get().max_block; -} - -impl pallet_message_queue::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = weights::pallet_message_queue::WeightInfo; - #[cfg(feature = "runtime-benchmarks")] - type MessageProcessor = pallet_message_queue::mock_helpers::NoopMessageProcessor< - cumulus_primitives_core::AggregateMessageOrigin, - >; - #[cfg(not(feature = "runtime-benchmarks"))] - type MessageProcessor = xcm_builder::ProcessXcmMessage< - AggregateMessageOrigin, - xcm_executor::XcmExecutor, - RuntimeCall, - >; - type Size = u32; - // The XCMP queue pallet is only ever able to handle the `Sibling(ParaId)` origin: - type QueueChangeHandler = NarrowOriginToSibling; - type QueuePausedQuery = NarrowOriginToSibling; - type HeapSize = sp_core::ConstU32<{ 64 * 1024 }>; - type MaxStale = sp_core::ConstU32<8>; - type ServiceWeight = MessageQueueServiceWeight; -} - -impl cumulus_pallet_aura_ext::Config for Runtime {} - -parameter_types! { - // Fellows pluralistic body. - pub const FellowsBodyId: BodyId = BodyId::Technical; -} - -/// Privileged origin that represents Root or Fellows pluralistic body. -pub type RootOrFellows = EitherOfDiverse< - EnsureRoot, - EnsureXcm>, ->; - -impl cumulus_pallet_xcmp_queue::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type ChannelInfo = ParachainSystem; - type VersionWrapper = PolkadotXcm; - // Enqueue XCMP messages from siblings for later processing. - type XcmpQueue = TransformOrigin; - type MaxInboundSuspended = sp_core::ConstU32<1_000>; - type ControllerOrigin = RootOrFellows; - type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; - type WeightInfo = weights::cumulus_pallet_xcmp_queue::WeightInfo; - type PriceForSiblingDelivery = NoPriceForMessageDelivery; -} - -parameter_types! { - pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; -} - -impl cumulus_pallet_dmp_queue::Config for Runtime { - type WeightInfo = weights::cumulus_pallet_dmp_queue::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type DmpSink = frame_support::traits::EnqueueWithOrigin; -} - -pub const PERIOD: u32 = 6 * HOURS; -pub const OFFSET: u32 = 0; - -impl pallet_session::Config for Runtime { - 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; - type ShouldEndSession = pallet_session::PeriodicSessions, ConstU32>; - type NextSessionRotation = pallet_session::PeriodicSessions, ConstU32>; - type SessionManager = CollatorSelection; - // Essentially just Aura, but let's be pedantic. - type SessionHandler = ::KeyTypeIdProviders; - type Keys = SessionKeys; - type WeightInfo = weights::pallet_session::WeightInfo; -} - -impl pallet_aura::Config for Runtime { - type AuthorityId = AuraId; - type DisabledValidators = (); - type MaxAuthorities = ConstU32<100_000>; - type AllowMultipleBlocksPerSlot = ConstBool; - #[cfg(feature = "experimental")] - type SlotDuration = pallet_aura::MinimumPeriodTimesTwo; -} - -parameter_types! { - pub const PotId: PalletId = PalletId(*b"PotStake"); - pub const SessionLength: BlockNumber = 6 * HOURS; - // StakingAdmin pluralistic body. - pub const StakingAdminBodyId: BodyId = BodyId::Defense; -} - -/// We allow Root and the `StakingAdmin` to execute privileged collator selection operations. -pub type CollatorSelectionUpdateOrigin = EitherOfDiverse< - EnsureRoot, - EnsureXcm>, ->; - -impl pallet_collator_selection::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type UpdateOrigin = CollatorSelectionUpdateOrigin; - type PotId = PotId; - type MaxCandidates = ConstU32<100>; - type MinEligibleCollators = ConstU32<4>; - type MaxInvulnerables = ConstU32<20>; - // should be a multiple of session or things will get inconsistent - type KickThreshold = ConstU32; - type ValidatorId = ::AccountId; - type ValidatorIdOf = pallet_collator_selection::IdentityCollator; - type ValidatorRegistration = Session; - type WeightInfo = weights::pallet_collator_selection::WeightInfo; -} - -parameter_types! { - // One storage item; key size is 32; value is size 4+4+16+32 bytes = 56 bytes. - pub const DepositBase: Balance = deposit(1, 88); - // Additional storage item size of 32 bytes. - pub const DepositFactor: Balance = deposit(0, 32); -} - -impl pallet_multisig::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type Currency = Balances; - type DepositBase = DepositBase; - type DepositFactor = DepositFactor; - type MaxSignatories = ConstU32<100>; - type WeightInfo = weights::pallet_multisig::WeightInfo; -} - -impl pallet_utility::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type PalletsOrigin = OriginCaller; - type WeightInfo = weights::pallet_utility::WeightInfo; -} - -// Create the runtime by composing the FRAME pallets that were previously configured. -construct_runtime!( - pub enum Runtime - { - // System support stuff. - System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, - ParachainSystem: cumulus_pallet_parachain_system::{ - Pallet, Call, Config, Storage, Inherent, Event, ValidateUnsigned, - } = 1, - Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, - ParachainInfo: parachain_info::{Pallet, Storage, Config} = 3, - - // Monetary stuff. - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event} = 10, - TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event} = 11, - - // Collator support. The order of these 4 are important and shall not change. - Authorship: pallet_authorship::{Pallet, Storage} = 20, - CollatorSelection: pallet_collator_selection::{Pallet, Call, Storage, Event, Config} = 21, - Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 22, - Aura: pallet_aura::{Pallet, Storage, Config} = 23, - AuraExt: cumulus_pallet_aura_ext::{Pallet, Storage, Config} = 24, - - // XCM helpers. - XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event} = 30, - PolkadotXcm: pallet_xcm::{Pallet, Call, Event, Origin, Config} = 31, - CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 32, - DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 33, - MessageQueue: pallet_message_queue::{Pallet, Call, Storage, Event} = 34, - - // Handy utilities. - Utility: pallet_utility::{Pallet, Call, Event} = 40, - Multisig: pallet_multisig::{Pallet, Call, Storage, Event} = 41, - } -); - -#[cfg(feature = "runtime-benchmarks")] -mod benches { - frame_benchmarking::define_benchmarks!( - [frame_system, SystemBench::] - [pallet_balances, Balances] - [pallet_message_queue, MessageQueue] - [pallet_multisig, Multisig] - [pallet_session, SessionBench::] - [pallet_utility, Utility] - [pallet_timestamp, Timestamp] - [pallet_collator_selection, CollatorSelection] - [cumulus_pallet_xcmp_queue, XcmpQueue] - [cumulus_pallet_dmp_queue, DmpQueue] - // XCM - [pallet_xcm, PalletXcmExtrinsicsBenchmark::] - // NOTE: Make sure you point to the individual modules below. - [pallet_xcm_benchmarks::fungible, XcmBalances] - [pallet_xcm_benchmarks::generic, XcmGeneric] - ); -} - -impl_runtime_apis! { - impl sp_consensus_aura::AuraApi for Runtime { - fn slot_duration() -> sp_consensus_aura::SlotDuration { - sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) - } - - fn authorities() -> Vec { - Aura::authorities().into_inner() - } - } - - impl sp_api::Core for Runtime { - fn version() -> RuntimeVersion { - VERSION - } - - fn execute_block(block: Block) { - Executive::execute_block(block) - } - - fn initialize_block(header: &::Header) { - Executive::initialize_block(header) - } - } - - impl sp_api::Metadata for Runtime { - fn metadata() -> OpaqueMetadata { - OpaqueMetadata::new(Runtime::metadata().into()) - } - - fn metadata_at_version(version: u32) -> Option { - Runtime::metadata_at_version(version) - } - - fn metadata_versions() -> sp_std::vec::Vec { - Runtime::metadata_versions() - } - } - - impl sp_block_builder::BlockBuilder for Runtime { - fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyExtrinsicResult { - Executive::apply_extrinsic(extrinsic) - } - - fn finalize_block() -> ::Header { - Executive::finalize_block() - } - - fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { - data.create_extrinsics() - } - - fn check_inherents( - block: Block, - data: sp_inherents::InherentData, - ) -> sp_inherents::CheckInherentsResult { - data.check_extrinsics(&block) - } - } - - impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { - fn validate_transaction( - source: TransactionSource, - tx: ::Extrinsic, - block_hash: ::Hash, - ) -> TransactionValidity { - Executive::validate_transaction(source, tx, block_hash) - } - } - - impl sp_offchain::OffchainWorkerApi for Runtime { - fn offchain_worker(header: &::Header) { - Executive::offchain_worker(header) - } - } - - impl sp_session::SessionKeys for Runtime { - fn generate_session_keys(seed: Option>) -> Vec { - SessionKeys::generate(seed) - } - - fn decode_session_keys( - encoded: Vec, - ) -> Option, KeyTypeId)>> { - SessionKeys::decode_into_raw_public_keys(&encoded) - } - } - - impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { - fn account_nonce(account: AccountId) -> Nonce { - System::account_nonce(account) - } - } - - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi for Runtime { - fn query_info( - uxt: ::Extrinsic, - len: u32, - ) -> pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo { - TransactionPayment::query_info(uxt, len) - } - fn query_fee_details( - uxt: ::Extrinsic, - len: u32, - ) -> pallet_transaction_payment::FeeDetails { - TransactionPayment::query_fee_details(uxt, len) - } - fn query_weight_to_fee(weight: Weight) -> Balance { - TransactionPayment::weight_to_fee(weight) - } - fn query_length_to_fee(length: u32) -> Balance { - TransactionPayment::length_to_fee(length) - } - } - - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi - for Runtime - { - fn query_call_info( - call: RuntimeCall, - len: u32, - ) -> pallet_transaction_payment::RuntimeDispatchInfo { - TransactionPayment::query_call_info(call, len) - } - fn query_call_fee_details( - call: RuntimeCall, - len: u32, - ) -> pallet_transaction_payment::FeeDetails { - TransactionPayment::query_call_fee_details(call, len) - } - fn query_weight_to_fee(weight: Weight) -> Balance { - TransactionPayment::weight_to_fee(weight) - } - fn query_length_to_fee(length: u32) -> Balance { - TransactionPayment::length_to_fee(length) - } - } - - impl cumulus_primitives_core::CollectCollationInfo for Runtime { - fn collect_collation_info(header: &::Header) -> cumulus_primitives_core::CollationInfo { - ParachainSystem::collect_collation_info(header) - } - } - - #[cfg(feature = "try-runtime")] - impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { - let weight = Executive::try_runtime_upgrade(checks).unwrap(); - (weight, RuntimeBlockWeights::get().max_block) - } - - fn execute_block( - block: Block, - state_root_check: bool, - signature_check: bool, - select: frame_try_runtime::TryStateSelect, - ) -> Weight { - // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to - // have a backtrace here. - Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() - } - } - - #[cfg(feature = "runtime-benchmarks")] - impl frame_benchmarking::Benchmark for Runtime { - fn benchmark_metadata(extra: bool) -> ( - 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; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; - - // 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); - - let storage_info = AllPalletsWithSystem::storage_info(); - (list, storage_info) - } - - fn dispatch_benchmark( - config: frame_benchmarking::BenchmarkConfig - ) -> Result, sp_runtime::RuntimeString> { - use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError}; - use sp_storage::TrackedStorageKey; - - use frame_system_benchmarking::Pallet as SystemBench; - impl frame_system_benchmarking::Config for Runtime { - fn setup_set_code_requirements(code: &sp_std::vec::Vec) -> Result<(), BenchmarkError> { - ParachainSystem::initialize_for_set_code_benchmark(code.len() as u32); - Ok(()) - } - - fn verify_set_code() { - System::assert_last_event(cumulus_pallet_parachain_system::Event::::ValidationFunctionStored.into()); - } - } - - use cumulus_pallet_session_benchmarking::Pallet as SessionBench; - impl cumulus_pallet_session_benchmarking::Config for Runtime {} - - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; - impl pallet_xcm::benchmarking::Config for Runtime { - fn reachable_dest() -> Option { - Some(Parent.into()) - } - - fn teleportable_asset_and_dest() -> Option<(MultiAsset, MultiLocation)> { - // Relay/native token can be teleported between BH and Relay. - Some(( - MultiAsset { - fun: Fungible(EXISTENTIAL_DEPOSIT), - id: Concrete(Parent.into()) - }, - Parent.into(), - )) - } - - fn reserve_transferable_asset_and_dest() -> Option<(MultiAsset, MultiLocation)> { - // Reserve transfers are disabled on BH. - None - } - } - - use xcm::latest::prelude::*; - use xcm_config::KsmRelayLocation; - - parameter_types! { - pub ExistentialDepositMultiAsset: Option = Some(( - xcm_config::KsmRelayLocation::get(), - ExistentialDeposit::get() - ).into()); - } - - impl pallet_xcm_benchmarks::Config for Runtime { - type XcmConfig = xcm_config::XcmConfig; - type AccountIdConverter = xcm_config::LocationToAccountId; - type DeliveryHelper = cumulus_primitives_utility::ToParentDeliveryHelper< - xcm_config::XcmConfig, - ExistentialDepositMultiAsset, - xcm_config::PriceForParentDelivery, - >; - fn valid_destination() -> Result { - Ok(KsmRelayLocation::get()) - } - fn worst_case_holding(_depositable_count: u32) -> MultiAssets { - // just concrete assets according to relay chain. - let assets: Vec = vec![ - MultiAsset { - id: Concrete(KsmRelayLocation::get()), - fun: Fungible(1_000_000 * UNITS), - } - ]; - assets.into() - } - } - - parameter_types! { - pub const TrustedTeleporter: Option<(MultiLocation, MultiAsset)> = Some(( - KsmRelayLocation::get(), - MultiAsset { fun: Fungible(UNITS), id: Concrete(KsmRelayLocation::get()) }, - )); - pub const CheckedAccount: Option<(AccountId, xcm_builder::MintLocation)> = None; - pub const TrustedReserve: Option<(MultiLocation, MultiAsset)> = 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(KsmRelayLocation::get()), - fun: Fungible(UNITS), - } - } - } - - impl pallet_xcm_benchmarks::generic::Config for Runtime { - type TransactAsset = Balances; - type RuntimeCall = RuntimeCall; - - fn worst_case_response() -> (u64, Response) { - (0u64, Response::Version(Default::default())) - } - - fn worst_case_asset_exchange() -> Result<(MultiAssets, MultiAssets), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn universal_alias() -> Result<(MultiLocation, Junction), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn transact_origin_and_runtime_call() -> Result<(MultiLocation, RuntimeCall), BenchmarkError> { - Ok((KsmRelayLocation::get(), frame_system::Call::remark_with_event { remark: vec![] }.into())) - } - - fn subscribe_origin() -> Result { - Ok(KsmRelayLocation::get()) - } - - fn claimable_asset() -> Result<(MultiLocation, MultiLocation, MultiAssets), BenchmarkError> { - let origin = KsmRelayLocation::get(); - let assets: MultiAssets = (Concrete(KsmRelayLocation::get()), 1_000 * UNITS).into(); - let ticket = MultiLocation { parents: 0, interior: Here }; - Ok((origin, ticket, assets)) - } - - fn unlockable_asset() -> Result<(MultiLocation, MultiLocation, MultiAsset), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn export_message_origin_and_destination( - ) -> Result<(MultiLocation, NetworkId, InteriorMultiLocation), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn alias_origin() -> Result<(MultiLocation, MultiLocation), BenchmarkError> { - Err(BenchmarkError::Skip) - } - } - - 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(), - // Total Issuance - hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80").to_vec().into(), - // Execution Phase - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a").to_vec().into(), - // Event Count - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(), - // System Events - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(), - ]; - - let mut batches = Vec::::new(); - let params = (&config, &whitelist); - add_benchmarks!(params, batches); - - Ok(batches) - } - } - - impl sp_genesis_builder::GenesisBuilder for Runtime { - fn create_default_config() -> Vec { - create_default_config::() - } - - fn build_config(config: Vec) -> sp_genesis_builder::Result { - build_config::(config) - } - } -} - -cumulus_pallet_parachain_system::register_validate_block! { - Runtime = Runtime, - BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::, -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/block_weights.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/block_weights.rs deleted file mode 100644 index e7fdb2aae2a..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/block_weights.rs +++ /dev/null @@ -1,53 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, Weight}, - }; - - parameter_types! { - /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = - Weight::from_parts(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000), 0); - } - - #[cfg(test)] - mod test_weights { - use frame_support::weights::constants; - - /// Checks that the weight exists and is sane. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - let w = super::constants::BlockExecutionWeight::get(); - - // At least 100 µs. - assert!( - w.ref_time() >= 100u64 * constants::WEIGHT_REF_TIME_PER_MICROS, - "Weight should be at least 100 µs." - ); - // At most 50 ms. - assert!( - w.ref_time() <= 50u64 * constants::WEIGHT_REF_TIME_PER_MILLIS, - "Weight should be at most 50 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/cumulus_pallet_dmp_queue.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/cumulus_pallet_dmp_queue.rs deleted file mode 100644 index cc41dcd6cbb..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/cumulus_pallet_dmp_queue.rs +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (C) 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_dmp_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-10-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=cumulus_pallet_dmp_queue -// --chain=asset-hub-kusama-dev -// --header=./cumulus/file_header.txt -// --output=./cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_dmp_queue`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_dmp_queue::WeightInfo for WeightInfo { - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65696` - // Estimated: `69161` - // Minimum execution time: 124_651_000 picoseconds. - Weight::from_parts(127_857_000, 0) - .saturating_add(Weight::from_parts(0, 69161)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65659` - // Estimated: `69124` - // Minimum execution time: 65_684_000 picoseconds. - Weight::from_parts(68_039_000, 0) - .saturating_add(Weight::from_parts(0, 69124)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_overweight_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65726` - // Estimated: `69191` - // Minimum execution time: 117_657_000 picoseconds. - Weight::from_parts(122_035_000, 0) - .saturating_add(Weight::from_parts(0, 69191)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(6)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - fn on_idle_overweight_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65689` - // Estimated: `69154` - // Minimum execution time: 59_799_000 picoseconds. - Weight::from_parts(61_354_000, 0) - .saturating_add(Weight::from_parts(0, 69154)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/cumulus_pallet_parachain_system.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/cumulus_pallet_parachain_system.rs deleted file mode 100644 index a30a2ae8d4d..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/cumulus_pallet_parachain_system.rs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `cumulus_pallet_parachain_system` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `i9`, CPU: `13th Gen Intel(R) Core(TM) i9-13900K` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-kusama-dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/polkadot-parachain -// benchmark -// pallet -// --chain -// bridge-hub-kusama-dev -// --pallet -// cumulus_pallet_parachain_system -// --extrinsic -// * -// --execution -// wasm -// --wasm-execution -// compiled -// --output -// parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights -// --steps -// 50 -// --repeat -// 20 - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::Weight}; -use sp_std::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_parachain_system`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_parachain_system::WeightInfo for WeightInfo { - /// Storage: ParachainSystem LastDmqMqcHead (r:1 w:1) - /// Proof Skipped: ParachainSystem LastDmqMqcHead (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ParachainSystem ReservedDmpWeightOverride (r:1 w:0) - /// Proof Skipped: ParachainSystem ReservedDmpWeightOverride (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: ParachainSystem ProcessedDownwardMessages (r:0 w:1) - /// Proof Skipped: ParachainSystem ProcessedDownwardMessages (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: MessageQueue Pages (r:0 w:16) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - /// The range of component `n` is `[0, 1000]`. - fn enqueue_inbound_downward_messages(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `12` - // Estimated: `8013` - // Minimum execution time: 1_686_000 picoseconds. - Weight::from_parts(1_761_000, 0) - .saturating_add(Weight::from_parts(0, 8013)) - // Standard Error: 28_250 - .saturating_add(Weight::from_parts(24_261_433, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/cumulus_pallet_xcmp_queue.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/cumulus_pallet_xcmp_queue.rs deleted file mode 100644 index ffd311ceecd..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/cumulus_pallet_xcmp_queue.rs +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `cumulus_pallet_xcmp_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-09-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `Olivers-MacBook-Pro.local`, CPU: `` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/release/polkadot-parachain -// benchmark -// pallet -// --pallet -// cumulus-pallet-xcmp-queue -// --chain -// bridge-hub-kusama-dev -// --output -// cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/cumulus_pallet_xcmp_queue.rs -// --extrinsic -// - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_xcmp_queue`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:1) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_config_with_u32() -> Weight { - // Proof Size summary in bytes: - // Measured: `76` - // Estimated: `1561` - // Minimum execution time: 5_000_000 picoseconds. - Weight::from_parts(6_000_000, 0) - .saturating_add(Weight::from_parts(0, 1561)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:0) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `XcmpQueue::InboundXcmpSuspended` (r:1 w:0) - /// Proof: `XcmpQueue::InboundXcmpSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn enqueue_xcmp_message() -> Weight { - // Proof Size summary in bytes: - // Measured: `82` - // Estimated: `3517` - // Minimum execution time: 14_000_000 picoseconds. - Weight::from_parts(14_000_000, 0) - .saturating_add(Weight::from_parts(0, 3517)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn suspend_channel() -> Weight { - // Proof Size summary in bytes: - // Measured: `76` - // Estimated: `1561` - // Minimum execution time: 3_000_000 picoseconds. - Weight::from_parts(4_000_000, 0) - .saturating_add(Weight::from_parts(0, 1561)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn resume_channel() -> Weight { - // Proof Size summary in bytes: - // Measured: `111` - // Estimated: `1596` - // Minimum execution time: 4_000_000 picoseconds. - Weight::from_parts(5_000_000, 0) - .saturating_add(Weight::from_parts(0, 1596)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn take_first_concatenated_xcm() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 44_000_000 picoseconds. - Weight::from_parts(45_000_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Storage: `XcmpQueue::InboundXcmpMessages` (r:1 w:1) - /// Proof: `XcmpQueue::InboundXcmpMessages` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:0) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::InboundXcmpSuspended` (r:1 w:0) - /// Proof: `XcmpQueue::InboundXcmpSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65711` - // Estimated: `69176` - // Minimum execution time: 60_000_000 picoseconds. - Weight::from_parts(63_000_000, 0) - .saturating_add(Weight::from_parts(0, 69176)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65710` - // Estimated: `69175` - // Minimum execution time: 42_000_000 picoseconds. - Weight::from_parts(43_000_000, 0) - .saturating_add(Weight::from_parts(0, 69175)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/extrinsic_weights.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/extrinsic_weights.rs deleted file mode 100644 index 1a4adb968bb..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/extrinsic_weights.rs +++ /dev/null @@ -1,53 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, Weight}, - }; - - parameter_types! { - /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = - Weight::from_parts(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000), 0); - } - - #[cfg(test)] - mod test_weights { - use frame_support::weights::constants; - - /// Checks that the weight exists and is sane. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - let w = super::constants::ExtrinsicBaseWeight::get(); - - // At least 10 µs. - assert!( - w.ref_time() >= 10u64 * constants::WEIGHT_REF_TIME_PER_MICROS, - "Weight should be at least 10 µs." - ); - // At most 1 ms. - assert!( - w.ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Weight should be at most 1 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/frame_system.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/frame_system.rs deleted file mode 100644 index 6b9313cdaba..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/frame_system.rs +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `frame_system` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=bridge-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=frame_system -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `frame_system`. -pub struct WeightInfo(PhantomData); -impl frame_system::WeightInfo for WeightInfo { - /// The range of component `b` is `[0, 3932160]`. - fn remark(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 1_985_000 picoseconds. - Weight::from_parts(2_177_341, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 0 - .saturating_add(Weight::from_parts(386, 0).saturating_mul(b.into())) - } - /// The range of component `b` is `[0, 3932160]`. - fn remark_with_event(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_288_000 picoseconds. - Weight::from_parts(23_888_468, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 8 - .saturating_add(Weight::from_parts(1_718, 0).saturating_mul(b.into())) - } - /// Storage: `System::Digest` (r:1 w:1) - /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - /// Proof: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - fn set_heap_pages() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `1485` - // Minimum execution time: 3_700_000 picoseconds. - Weight::from_parts(3_867_000, 0) - .saturating_add(Weight::from_parts(0, 1485)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) - /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpgradeRestrictionSignal` (r:1 w:0) - /// Proof: `ParachainSystem::UpgradeRestrictionSignal` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingValidationCode` (r:1 w:1) - /// Proof: `ParachainSystem::PendingValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::NewValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::NewValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::DidSetValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::DidSetValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_code() -> Weight { - // Proof Size summary in bytes: - // Measured: `119` - // Estimated: `1604` - // Minimum execution time: 100_298_586_000 picoseconds. - Weight::from_parts(101_869_369_000, 0) - .saturating_add(Weight::from_parts(0, 1604)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn set_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_052_000 picoseconds. - Weight::from_parts(2_115_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 2_048 - .saturating_add(Weight::from_parts(755_436, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn kill_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_044_000 picoseconds. - Weight::from_parts(2_110_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 1_011 - .saturating_add(Weight::from_parts(569_993, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `p` is `[0, 1000]`. - fn kill_prefix(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `68 + p * (69 ±0)` - // Estimated: `66 + p * (70 ±0)` - // Minimum execution time: 3_741_000 picoseconds. - Weight::from_parts(3_838_000, 0) - .saturating_add(Weight::from_parts(0, 66)) - // Standard Error: 2_455 - .saturating_add(Weight::from_parts(1_216_154, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) - .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/mod.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/mod.rs deleted file mode 100644 index 36733d6d4a6..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/mod.rs +++ /dev/null @@ -1,41 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Expose the auto generated weight files. - -pub mod block_weights; -pub mod cumulus_pallet_dmp_queue; -pub mod cumulus_pallet_parachain_system; -pub mod cumulus_pallet_xcmp_queue; -pub mod extrinsic_weights; -pub mod frame_system; -pub mod pallet_balances; -pub mod pallet_collator_selection; -pub mod pallet_message_queue; -pub mod pallet_multisig; -pub mod pallet_session; -pub mod pallet_timestamp; -pub mod pallet_utility; -pub mod pallet_xcm; -pub mod paritydb_weights; -pub mod rocksdb_weights; -pub mod xcm; - -pub use block_weights::constants::BlockExecutionWeight; -pub use extrinsic_weights::constants::ExtrinsicBaseWeight; -pub use paritydb_weights::constants::ParityDbWeight; -pub use rocksdb_weights::constants::RocksDbWeight; diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_balances.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_balances.rs deleted file mode 100644 index 04ceb5bed75..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_balances.rs +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_balances` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=bridge-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_balances -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_balances`. -pub struct WeightInfo(PhantomData); -impl pallet_balances::WeightInfo for WeightInfo { - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_allow_death() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 55_163_000 picoseconds. - Weight::from_parts(56_056_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_keep_alive() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 40_829_000 picoseconds. - Weight::from_parts(42_182_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_set_balance_creating() -> Weight { - // Proof Size summary in bytes: - // Measured: `174` - // Estimated: `3593` - // Minimum execution time: 15_212_000 picoseconds. - Weight::from_parts(15_782_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_set_balance_killing() -> Weight { - // Proof Size summary in bytes: - // Measured: `174` - // Estimated: `3593` - // Minimum execution time: 22_866_000 picoseconds. - Weight::from_parts(23_452_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `6196` - // Minimum execution time: 57_047_000 picoseconds. - Weight::from_parts(58_536_000, 0) - .saturating_add(Weight::from_parts(0, 6196)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_all() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 51_622_000 picoseconds. - Weight::from_parts(52_912_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_unreserve() -> Weight { - // Proof Size summary in bytes: - // Measured: `174` - // Estimated: `3593` - // Minimum execution time: 17_723_000 picoseconds. - Weight::from_parts(18_383_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:999 w:999) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `u` is `[1, 1000]`. - fn upgrade_accounts(u: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + u * (136 ±0)` - // Estimated: `990 + u * (2603 ±0)` - // Minimum execution time: 17_089_000 picoseconds. - Weight::from_parts(17_379_000, 0) - .saturating_add(Weight::from_parts(0, 990)) - // Standard Error: 17_071 - .saturating_add(Weight::from_parts(15_647_341, 0).saturating_mul(u.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(u.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(u.into()))) - .saturating_add(Weight::from_parts(0, 2603).saturating_mul(u.into())) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_collator_selection.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_collator_selection.rs deleted file mode 100644 index 72d8ba4045a..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_collator_selection.rs +++ /dev/null @@ -1,248 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_collator_selection` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=bridge-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_collator_selection -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_collator_selection`. -pub struct WeightInfo(PhantomData); -impl pallet_collator_selection::WeightInfo for WeightInfo { - /// Storage: `Session::NextKeys` (r:20 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `CollatorSelection::Invulnerables` (r:0 w:1) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 20]`. - fn set_invulnerables(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `196 + b * (79 ±0)` - // Estimated: `1187 + b * (2555 ±0)` - // Minimum execution time: 14_329_000 picoseconds. - Weight::from_parts(11_605_842, 0) - .saturating_add(Weight::from_parts(0, 1187)) - // Standard Error: 4_784 - .saturating_add(Weight::from_parts(3_297_183, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(Weight::from_parts(0, 2555).saturating_mul(b.into())) - } - /// Storage: `Session::NextKeys` (r:1 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:1) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Candidates` (r:1 w:1) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 19]`. - /// The range of component `c` is `[1, 99]`. - fn add_invulnerable(b: u32, c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `757 + b * (32 ±0) + c * (53 ±0)` - // Estimated: `6287 + b * (37 ±0) + c * (53 ±0)` - // Minimum execution time: 47_110_000 picoseconds. - Weight::from_parts(45_234_418, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 14_452 - .saturating_add(Weight::from_parts(156_031, 0).saturating_mul(b.into())) - // Standard Error: 2_739 - .saturating_add(Weight::from_parts(216_162, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - .saturating_add(Weight::from_parts(0, 37).saturating_mul(b.into())) - .saturating_add(Weight::from_parts(0, 53).saturating_mul(c.into())) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:0) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:1) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// The range of component `b` is `[5, 20]`. - fn remove_invulnerable(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `82 + b * (32 ±0)` - // Estimated: `6287` - // Minimum execution time: 15_326_000 picoseconds. - Weight::from_parts(14_914_611, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_274 - .saturating_add(Weight::from_parts(201_234, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `CollatorSelection::DesiredCandidates` (r:0 w:1) - /// Proof: `CollatorSelection::DesiredCandidates` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - fn set_desired_candidates() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_288_000 picoseconds. - Weight::from_parts(7_472_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `CollatorSelection::CandidacyBond` (r:0 w:1) - /// Proof: `CollatorSelection::CandidacyBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - fn set_candidacy_bond(_c: u32, _k: u32) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_137_000 picoseconds. - Weight::from_parts(7_374_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:1) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::DesiredCandidates` (r:1 w:0) - /// Proof: `CollatorSelection::DesiredCandidates` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `Session::NextKeys` (r:1 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `CollatorSelection::CandidacyBond` (r:1 w:0) - /// Proof: `CollatorSelection::CandidacyBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - /// The range of component `c` is `[1, 99]`. - fn register_as_candidate(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `740 + c * (52 ±0)` - // Estimated: `6287 + c * (54 ±0)` - // Minimum execution time: 40_718_000 picoseconds. - Weight::from_parts(43_911_837, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 3_053 - .saturating_add(Weight::from_parts(229_337, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(2)) - .saturating_add(Weight::from_parts(0, 54).saturating_mul(c.into())) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:1) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - /// The range of component `c` is `[3, 100]`. - fn leave_intent(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `334 + c * (49 ±0)` - // Estimated: `6287` - // Minimum execution time: 32_953_000 picoseconds. - Weight::from_parts(34_817_275, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_476 - .saturating_add(Weight::from_parts(198_023, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - fn update_bond(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `306 + c * (50 ±0)` - // Estimated: `6287` - // Minimum execution time: 34_814_000 picoseconds. - Weight::from_parts(36_371_520, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_391 - .saturating_add(Weight::from_parts(201_700, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - fn take_candidate_slot(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `306 + c * (50 ±0)` - // Estimated: `6287` - // Minimum execution time: 34_814_000 picoseconds. - Weight::from_parts(36_371_520, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_391 - .saturating_add(Weight::from_parts(201_700, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `System::BlockWeight` (r:1 w:1) - /// Proof: `System::BlockWeight` (`max_values`: Some(1), `max_size`: Some(48), added: 543, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - fn note_author() -> Weight { - // Proof Size summary in bytes: - // Measured: `155` - // Estimated: `6196` - // Minimum execution time: 45_130_000 picoseconds. - Weight::from_parts(46_733_000, 0) - .saturating_add(Weight::from_parts(0, 6196)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:0) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:100 w:0) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `System::BlockWeight` (r:1 w:1) - /// Proof: `System::BlockWeight` (`max_values`: Some(1), `max_size`: Some(48), added: 543, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:97 w:97) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 100]`. - /// The range of component `c` is `[1, 100]`. - fn new_session(r: u32, c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `2263 + c * (97 ±0) + r * (115 ±0)` - // Estimated: `6287 + c * (2519 ±0) + r * (2603 ±0)` - // Minimum execution time: 16_690_000 picoseconds. - Weight::from_parts(17_188_000, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 345_320 - .saturating_add(Weight::from_parts(15_166_422, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) - .saturating_add(Weight::from_parts(0, 2519).saturating_mul(c.into())) - .saturating_add(Weight::from_parts(0, 2603).saturating_mul(r.into())) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_message_queue.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_message_queue.rs deleted file mode 100644 index c5a4235055d..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_message_queue.rs +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_message_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-03-24, STEPS: `2`, REPEAT: `1`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `i9`, CPU: `13th Gen Intel(R) Core(TM) i9-13900K` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-kusama-dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/polkadot-parachain -// benchmark -// pallet -// --chain -// bridge-hub-kusama-dev -// --pallet -// pallet_message_queue -// --extrinsic -// * -// --execution -// wasm -// --wasm-execution -// compiled -// --output -// parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::Weight}; -use sp_std::marker::PhantomData; - -/// Weight functions for `pallet_message_queue`. -pub struct WeightInfo(PhantomData); -impl pallet_message_queue::WeightInfo for WeightInfo { - /// Storage: MessageQueue ServiceHead (r:1 w:0) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: MessageQueue BookStateFor (r:2 w:2) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn ready_ring_knit() -> Weight { - // Proof Size summary in bytes: - // Measured: `189` - // Estimated: `7534` - // Minimum execution time: 11_692_000 picoseconds. - Weight::from_parts(11_692_000, 0) - .saturating_add(Weight::from_parts(0, 7534)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:2 w:2) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - fn ready_ring_unknit() -> Weight { - // Proof Size summary in bytes: - // Measured: `184` - // Estimated: `7534` - // Minimum execution time: 10_614_000 picoseconds. - Weight::from_parts(10_614_000, 0) - .saturating_add(Weight::from_parts(0, 7534)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn service_queue_base() -> Weight { - // Proof Size summary in bytes: - // Measured: `6` - // Estimated: `3517` - // Minimum execution time: 7_085_000 picoseconds. - Weight::from_parts(7_085_000, 0) - .saturating_add(Weight::from_parts(0, 3517)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn service_page_base_completion() -> Weight { - // Proof Size summary in bytes: - // Measured: `72` - // Estimated: `69050` - // Minimum execution time: 5_813_000 picoseconds. - Weight::from_parts(5_813_000, 0) - .saturating_add(Weight::from_parts(0, 69050)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn service_page_base_no_completion() -> Weight { - // Proof Size summary in bytes: - // Measured: `72` - // Estimated: `69050` - // Minimum execution time: 6_090_000 picoseconds. - Weight::from_parts(6_090_000, 0) - .saturating_add(Weight::from_parts(0, 69050)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn service_page_item() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 58_905_000 picoseconds. - Weight::from_parts(58_905_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: MessageQueue BookStateFor (r:1 w:0) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn bump_service_head() -> Weight { - // Proof Size summary in bytes: - // Measured: `99` - // Estimated: `5007` - // Minimum execution time: 6_501_000 picoseconds. - Weight::from_parts(6_501_000, 0) - .saturating_add(Weight::from_parts(0, 5007)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn reap_page() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 39_695_000 picoseconds. - Weight::from_parts(39_695_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn execute_overweight_page_removed() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 50_543_000 picoseconds. - Weight::from_parts(50_543_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn execute_overweight_page_updated() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 69_294_000 picoseconds. - Weight::from_parts(69_294_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_multisig.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_multisig.rs deleted file mode 100644 index f4135e975fb..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_multisig.rs +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_multisig` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=bridge-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_multisig -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_multisig`. -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 { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 13_602_000 picoseconds. - Weight::from_parts(14_565_036, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 8 - .saturating_add(Weight::from_parts(518, 0).saturating_mul(z.into())) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_create(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `263 + s * (2 ±0)` - // Estimated: `6811` - // Minimum execution time: 46_075_000 picoseconds. - Weight::from_parts(33_730_493, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_049 - .saturating_add(Weight::from_parts(134_211, 0).saturating_mul(s.into())) - // Standard Error: 10 - .saturating_add(Weight::from_parts(1_448, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[3, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_approve(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `6811` - // Minimum execution time: 29_389_000 picoseconds. - Weight::from_parts(19_639_583, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 976 - .saturating_add(Weight::from_parts(106_598, 0).saturating_mul(s.into())) - // Standard Error: 9 - .saturating_add(Weight::from_parts(1_457, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_complete(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `388 + s * (33 ±0)` - // Estimated: `6811` - // Minimum execution time: 50_438_000 picoseconds. - Weight::from_parts(36_195_308, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_689 - .saturating_add(Weight::from_parts(176_067, 0).saturating_mul(s.into())) - // Standard Error: 16 - .saturating_add(Weight::from_parts(1_545, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_create(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `263 + s * (2 ±0)` - // Estimated: `6811` - // Minimum execution time: 32_134_000 picoseconds. - Weight::from_parts(32_149_785, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_082 - .saturating_add(Weight::from_parts(145_390, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_approve(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `6811` - // Minimum execution time: 17_560_000 picoseconds. - Weight::from_parts(18_144_079, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 763 - .saturating_add(Weight::from_parts(114_298, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn cancel_as_multi(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `454 + s * (1 ±0)` - // Estimated: `6811` - // Minimum execution time: 32_360_000 picoseconds. - Weight::from_parts(33_566_579, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_314 - .saturating_add(Weight::from_parts(126_583, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_session.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_session.rs deleted file mode 100644 index f508e1daaef..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_session.rs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_session` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=bridge-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_session -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_session`. -pub struct WeightInfo(PhantomData); -impl pallet_session::WeightInfo for WeightInfo { - /// Storage: `Session::NextKeys` (r:1 w:1) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Session::KeyOwner` (r:1 w:1) - /// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn set_keys() -> Weight { - // Proof Size summary in bytes: - // Measured: `297` - // Estimated: `3762` - // Minimum execution time: 17_170_000 picoseconds. - Weight::from_parts(17_523_000, 0) - .saturating_add(Weight::from_parts(0, 3762)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Session::NextKeys` (r:1 w:1) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Session::KeyOwner` (r:0 w:1) - /// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn purge_keys() -> Weight { - // Proof Size summary in bytes: - // Measured: `279` - // Estimated: `3744` - // Minimum execution time: 13_273_000 picoseconds. - Weight::from_parts(14_200_000, 0) - .saturating_add(Weight::from_parts(0, 3744)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_timestamp.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_timestamp.rs deleted file mode 100644 index 6162b1d48c5..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_timestamp.rs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_timestamp` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=bridge-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_timestamp -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_timestamp`. -pub struct WeightInfo(PhantomData); -impl pallet_timestamp::WeightInfo for WeightInfo { - /// Storage: `Timestamp::Now` (r:1 w:1) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `Aura::CurrentSlot` (r:1 w:0) - /// Proof: `Aura::CurrentSlot` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - fn set() -> Weight { - // Proof Size summary in bytes: - // Measured: `49` - // Estimated: `1493` - // Minimum execution time: 7_794_000 picoseconds. - Weight::from_parts(8_075_000, 0) - .saturating_add(Weight::from_parts(0, 1493)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn on_finalize() -> Weight { - // Proof Size summary in bytes: - // Measured: `57` - // Estimated: `0` - // Minimum execution time: 3_338_000 picoseconds. - Weight::from_parts(3_471_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_utility.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_utility.rs deleted file mode 100644 index 93d0ea596e7..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_utility.rs +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_utility` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=bridge-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_utility -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_utility`. -pub struct WeightInfo(PhantomData); -impl pallet_utility::WeightInfo for WeightInfo { - /// The range of component `c` is `[0, 1000]`. - fn batch(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_641_000 picoseconds. - Weight::from_parts(7_103_558, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 1_172 - .saturating_add(Weight::from_parts(4_907_384, 0).saturating_mul(c.into())) - } - fn as_derivative() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_741_000 picoseconds. - Weight::from_parts(4_870_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// The range of component `c` is `[0, 1000]`. - fn batch_all(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_561_000 picoseconds. - Weight::from_parts(12_252_064, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 1_750 - .saturating_add(Weight::from_parts(5_193_404, 0).saturating_mul(c.into())) - } - fn dispatch_as() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 8_646_000 picoseconds. - Weight::from_parts(8_927_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// The range of component `c` is `[0, 1000]`. - fn force_batch(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_726_000 picoseconds. - Weight::from_parts(8_025_954, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 1_746 - .saturating_add(Weight::from_parts(4_936_537, 0).saturating_mul(c.into())) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_xcm.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_xcm.rs deleted file mode 100644 index 7f4c2026f2b..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/pallet_xcm.rs +++ /dev/null @@ -1,323 +0,0 @@ -// Copyright (C) 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` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-11-09, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=pallet_xcm -// --chain=bridge-hub-kusama-dev -// --header=./cumulus/file_header.txt -// --output=./cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_xcm`. -pub struct WeightInfo(PhantomData); -impl pallet_xcm::WeightInfo for WeightInfo { - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn send() -> Weight { - // Proof Size summary in bytes: - // Measured: `38` - // Estimated: `3503` - // Minimum execution time: 22_520_000 picoseconds. - Weight::from_parts(23_167_000, 0) - .saturating_add(Weight::from_parts(0, 3503)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ParachainInfo::ParachainId` (r:1 w:0) - /// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - fn teleport_assets() -> Weight { - // Proof Size summary in bytes: - // Measured: `32` - // Estimated: `1489` - // Minimum execution time: 19_639_000 picoseconds. - Weight::from_parts(20_230_000, 0) - .saturating_add(Weight::from_parts(0, 1489)) - .saturating_add(T::DbWeight::get().reads(1)) - } - /// Storage: `Benchmark::Override` (r:0 w:0) - /// Proof: `Benchmark::Override` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn reserve_transfer_assets() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 18_446_744_073_709_551_000 picoseconds. - Weight::from_parts(18_446_744_073_709_551_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: `Benchmark::Override` (r:0 w:0) - /// Proof: `Benchmark::Override` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn execute() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 18_446_744_073_709_551_000 picoseconds. - Weight::from_parts(18_446_744_073_709_551_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: `PolkadotXcm::SupportedVersion` (r:0 w:1) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_xcm_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_175_000 picoseconds. - Weight::from_parts(7_496_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:0 w:1) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn force_default_xcm_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_126_000 picoseconds. - Weight::from_parts(2_359_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_subscribe_version_notify() -> Weight { - // Proof Size summary in bytes: - // Measured: `38` - // Estimated: `3503` - // Minimum execution time: 27_229_000 picoseconds. - Weight::from_parts(27_673_000, 0) - .saturating_add(Weight::from_parts(0, 3503)) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_unsubscribe_version_notify() -> Weight { - // Proof Size summary in bytes: - // Measured: `255` - // Estimated: `3720` - // Minimum execution time: 29_812_000 picoseconds. - Weight::from_parts(30_649_000, 0) - .saturating_add(Weight::from_parts(0, 3720)) - .saturating_add(T::DbWeight::get().reads(7)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `PolkadotXcm::XcmExecutionSuspended` (r:0 w:1) - /// Proof: `PolkadotXcm::XcmExecutionSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn force_suspension() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_212_000 picoseconds. - Weight::from_parts(2_367_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PolkadotXcm::SupportedVersion` (r:4 w:2) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_supported_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `95` - // Estimated: `10985` - // Minimum execution time: 14_768_000 picoseconds. - Weight::from_parts(15_036_000, 0) - .saturating_add(Weight::from_parts(0, 10985)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_version_notifiers() -> Weight { - // Proof Size summary in bytes: - // Measured: `99` - // Estimated: `10989` - // Minimum execution time: 14_662_000 picoseconds. - Weight::from_parts(15_155_000, 0) - .saturating_add(Weight::from_parts(0, 10989)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:5 w:0) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn already_notified_target() -> Weight { - // Proof Size summary in bytes: - // Measured: `106` - // Estimated: `13471` - // Minimum execution time: 16_198_000 picoseconds. - Weight::from_parts(16_456_000, 0) - .saturating_add(Weight::from_parts(0, 13471)) - .saturating_add(T::DbWeight::get().reads(5)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:2 w:1) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn notify_current_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `106` - // Estimated: `6046` - // Minimum execution time: 25_825_000 picoseconds. - Weight::from_parts(26_744_000, 0) - .saturating_add(Weight::from_parts(0, 6046)) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:3 w:0) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn notify_target_migration_fail() -> Weight { - // Proof Size summary in bytes: - // Measured: `136` - // Estimated: `8551` - // Minimum execution time: 8_622_000 picoseconds. - Weight::from_parts(8_931_000, 0) - .saturating_add(Weight::from_parts(0, 8551)) - .saturating_add(T::DbWeight::get().reads(3)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_version_notify_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `106` - // Estimated: `10996` - // Minimum execution time: 15_397_000 picoseconds. - Weight::from_parts(15_650_000, 0) - .saturating_add(Weight::from_parts(0, 10996)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn migrate_and_notify_old_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `112` - // Estimated: `11002` - // Minimum execution time: 32_330_000 picoseconds. - Weight::from_parts(33_255_000, 0) - .saturating_add(Weight::from_parts(0, 11002)) - .saturating_add(T::DbWeight::get().reads(10)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn new_query() -> Weight { - // Proof Size summary in bytes: - // Measured: `32` - // Estimated: `1517` - // Minimum execution time: 4_142_000 picoseconds. - Weight::from_parts(4_308_000, 0) - .saturating_add(Weight::from_parts(0, 1517)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::Queries` (r:1 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn take_response() -> Weight { - // Proof Size summary in bytes: - // Measured: `7669` - // Estimated: `11134` - // Minimum execution time: 25_814_000 picoseconds. - Weight::from_parts(26_213_000, 0) - .saturating_add(Weight::from_parts(0, 11134)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/paritydb_weights.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/paritydb_weights.rs deleted file mode 100644 index 25679703831..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/paritydb_weights.rs +++ /dev/null @@ -1,63 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, RuntimeDbWeight}, - }; - - parameter_types! { - /// `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_REF_TIME_PER_NANOS, - write: 50_000 * constants::WEIGHT_REF_TIME_PER_NANOS, - }; - } - - #[cfg(test)] - mod test_db_weights { - use super::constants::ParityDbWeight as W; - use frame_support::weights::constants; - - /// Checks that all weights exist and have sane values. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - // At least 1 µs. - assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Read weight should be at least 1 µs." - ); - assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Write weight should be at least 1 µs." - ); - // At most 1 ms. - assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Read weight should be at most 1 ms." - ); - assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Write weight should be at most 1 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/rocksdb_weights.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/rocksdb_weights.rs deleted file mode 100644 index 3dd817aa6f1..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/rocksdb_weights.rs +++ /dev/null @@ -1,63 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, RuntimeDbWeight}, - }; - - parameter_types! { - /// 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_REF_TIME_PER_NANOS, - write: 100_000 * constants::WEIGHT_REF_TIME_PER_NANOS, - }; - } - - #[cfg(test)] - mod test_db_weights { - use super::constants::RocksDbWeight as W; - use frame_support::weights::constants; - - /// Checks that all weights exist and have sane values. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - // At least 1 µs. - assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Read weight should be at least 1 µs." - ); - assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Write weight should be at least 1 µs." - ); - // At most 1 ms. - assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Read weight should be at most 1 ms." - ); - assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Write weight should be at most 1 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/mod.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/mod.rs deleted file mode 100644 index 71732961d3d..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/mod.rs +++ /dev/null @@ -1,244 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -mod pallet_xcm_benchmarks_fungible; -mod pallet_xcm_benchmarks_generic; - -use crate::{xcm_config::MaxAssetsIntoHolding, 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::*, DoubleEncoded}; - -trait WeighMultiAssets { - fn weigh_multi_assets(&self, weight: Weight) -> Weight; -} - -const MAX_ASSETS: u64 = 100; - -impl WeighMultiAssets for MultiAssetFilter { - fn weigh_multi_assets(&self, weight: Weight) -> Weight { - match self { - Self::Definite(assets) => weight.saturating_mul(assets.inner().iter().count() as u64), - Self::Wild(asset) => match asset { - All => weight.saturating_mul(MAX_ASSETS), - AllOf { fun, .. } => match fun { - WildFungibility::Fungible => weight, - // Magic number 2 has to do with the fact that we could have up to 2 times - // MaxAssetsIntoHolding in the worst-case scenario. - WildFungibility::NonFungible => - weight.saturating_mul((MaxAssetsIntoHolding::get() * 2) as u64), - }, - AllCounted(count) => weight.saturating_mul(MAX_ASSETS.min(*count as u64)), - AllOfCounted { count, .. } => weight.saturating_mul(MAX_ASSETS.min(*count as u64)), - }, - } - } -} - -impl WeighMultiAssets for MultiAssets { - fn weigh_multi_assets(&self, weight: Weight) -> Weight { - weight.saturating_mul(self.inner().iter().count() as u64) - } -} - -pub struct BridgeHubKusamaXcmWeight(core::marker::PhantomData); -impl XcmWeightInfo for BridgeHubKusamaXcmWeight { - fn withdraw_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::withdraw_asset()) - } - fn reserve_asset_deposited(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::reserve_asset_deposited()) - } - fn receive_teleported_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::receive_teleported_asset()) - } - fn query_response( - _query_id: &u64, - _response: &Response, - _max_weight: &Weight, - _querier: &Option, - ) -> Weight { - XcmGeneric::::query_response() - } - fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::transfer_asset()) - } - fn transfer_reserve_asset( - assets: &MultiAssets, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::transfer_reserve_asset()) - } - fn transact( - _origin_type: &OriginKind, - _require_weight_at_most: &Weight, - _call: &DoubleEncoded, - ) -> Weight { - XcmGeneric::::transact() - } - fn hrmp_new_channel_open_request( - _sender: &u32, - _max_message_size: &u32, - _max_capacity: &u32, - ) -> Weight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn hrmp_channel_accepted(_recipient: &u32) -> Weight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> Weight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn clear_origin() -> Weight { - XcmGeneric::::clear_origin() - } - fn descend_origin(_who: &InteriorMultiLocation) -> Weight { - XcmGeneric::::descend_origin() - } - fn report_error(_query_response_info: &QueryResponseInfo) -> Weight { - XcmGeneric::::report_error() - } - - fn deposit_asset(assets: &MultiAssetFilter, _dest: &MultiLocation) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()) - } - fn deposit_reserve_asset( - assets: &MultiAssetFilter, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) - } - fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets, _maximal: &bool) -> Weight { - Weight::MAX - } - fn initiate_reserve_withdraw( - assets: &MultiAssetFilter, - _reserve: &MultiLocation, - _xcm: &Xcm<()>, - ) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::initiate_reserve_withdraw()) - } - fn initiate_teleport( - assets: &MultiAssetFilter, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()) - } - fn report_holding(_response_info: &QueryResponseInfo, _assets: &MultiAssetFilter) -> Weight { - XcmGeneric::::report_holding() - } - fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> Weight { - XcmGeneric::::buy_execution() - } - fn refund_surplus() -> Weight { - XcmGeneric::::refund_surplus() - } - fn set_error_handler(_xcm: &Xcm) -> Weight { - XcmGeneric::::set_error_handler() - } - fn set_appendix(_xcm: &Xcm) -> Weight { - XcmGeneric::::set_appendix() - } - fn clear_error() -> Weight { - XcmGeneric::::clear_error() - } - fn claim_asset(_assets: &MultiAssets, _ticket: &MultiLocation) -> Weight { - XcmGeneric::::claim_asset() - } - fn trap(_code: &u64) -> Weight { - XcmGeneric::::trap() - } - fn subscribe_version(_query_id: &QueryId, _max_response_weight: &Weight) -> Weight { - XcmGeneric::::subscribe_version() - } - fn unsubscribe_version() -> Weight { - XcmGeneric::::unsubscribe_version() - } - fn burn_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmGeneric::::burn_asset()) - } - fn expect_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmGeneric::::expect_asset()) - } - fn expect_origin(_origin: &Option) -> Weight { - XcmGeneric::::expect_origin() - } - fn expect_error(_error: &Option<(u32, XcmError)>) -> Weight { - XcmGeneric::::expect_error() - } - fn expect_transact_status(_transact_status: &MaybeErrorCode) -> Weight { - XcmGeneric::::expect_transact_status() - } - fn query_pallet(_module_name: &Vec, _response_info: &QueryResponseInfo) -> Weight { - XcmGeneric::::query_pallet() - } - fn expect_pallet( - _index: &u32, - _name: &Vec, - _module_name: &Vec, - _crate_major: &u32, - _min_crate_minor: &u32, - ) -> Weight { - XcmGeneric::::expect_pallet() - } - fn report_transact_status(_response_info: &QueryResponseInfo) -> Weight { - XcmGeneric::::report_transact_status() - } - fn clear_transact_status() -> Weight { - XcmGeneric::::clear_transact_status() - } - fn universal_origin(_: &Junction) -> Weight { - Weight::MAX - } - fn export_message(_: &NetworkId, _: &Junctions, _: &Xcm<()>) -> Weight { - Weight::MAX - } - fn lock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn unlock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn note_unlockable(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn request_unlock(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn set_fees_mode(_: &bool) -> Weight { - XcmGeneric::::set_fees_mode() - } - fn set_topic(_topic: &[u8; 32]) -> Weight { - XcmGeneric::::set_topic() - } - fn clear_topic() -> Weight { - XcmGeneric::::clear_topic() - } - fn alias_origin(_: &MultiLocation) -> Weight { - // XCM Executor does not currently support alias origin operations - Weight::MAX - } - fn unpaid_execution(_: &WeightLimit, _: &Option) -> Weight { - XcmGeneric::::unpaid_execution() - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs deleted file mode 100644 index ff3cb452a8a..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_xcm_benchmarks::fungible` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-09-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-nbnwcyh-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-kusama-dev"), DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=pallet_xcm_benchmarks::fungible -// --chain=bridge-hub-kusama-dev -// --header=./cumulus/file_header.txt -// --template=./cumulus/templates/xcm-bench-template.hbs -// --output=./cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/ - -#![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 `pallet_xcm_benchmarks::fungible`. -pub struct WeightInfo(PhantomData); -impl WeightInfo { - // Storage: `System::Account` (r:1 w:1) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - pub fn withdraw_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `101` - // Estimated: `3593` - // Minimum execution time: 25_447_000 picoseconds. - Weight::from_parts(25_810_000, 3593) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - // Storage: `System::Account` (r:2 w:2) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - pub fn transfer_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `153` - // Estimated: `6196` - // Minimum execution time: 53_908_000 picoseconds. - Weight::from_parts(54_568_000, 6196) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - // Storage: `System::Account` (r:2 w:2) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn transfer_reserve_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `223` - // Estimated: `6196` - // Minimum execution time: 79_923_000 picoseconds. - Weight::from_parts(80_790_000, 6196) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(4)) - } - // Storage: `Benchmark::Override` (r:0 w:0) - // Proof: `Benchmark::Override` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub fn reserve_asset_deposited() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 18_446_744_073_709_551_000 picoseconds. - Weight::from_parts(18_446_744_073_709_551_000, 0) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn initiate_reserve_withdraw() -> Weight { - // Proof Size summary in bytes: - // Measured: `70` - // Estimated: `3535` - // Minimum execution time: 31_923_000 picoseconds. - Weight::from_parts(32_499_000, 3535) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - pub fn receive_teleported_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_903_000 picoseconds. - Weight::from_parts(4_065_000, 0) - } - // Storage: `System::Account` (r:1 w:1) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - pub fn deposit_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `52` - // Estimated: `3593` - // Minimum execution time: 26_987_000 picoseconds. - Weight::from_parts(27_486_000, 3593) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - // Storage: `System::Account` (r:1 w:1) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn deposit_reserve_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `122` - // Estimated: `3593` - // Minimum execution time: 56_012_000 picoseconds. - Weight::from_parts(58_067_000, 3593) - .saturating_add(T::DbWeight::get().reads(7)) - .saturating_add(T::DbWeight::get().writes(3)) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn initiate_teleport() -> Weight { - // Proof Size summary in bytes: - // Measured: `70` - // Estimated: `3535` - // Minimum execution time: 32_350_000 picoseconds. - Weight::from_parts(33_403_000, 3535) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs deleted file mode 100644 index c5c14e6917e..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ /dev/null @@ -1,328 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_xcm_benchmarks::generic` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-kusama-dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --template=./templates/xcm-bench-template.hbs -// --chain=bridge-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_xcm_benchmarks::generic -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/bridge-hubs/bridge-hub-kusama/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::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) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn report_holding() -> Weight { - // Proof Size summary in bytes: - // Measured: `70` - // Estimated: `3535` - // Minimum execution time: 33_141_000 picoseconds. - Weight::from_parts(34_380_000, 3535) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - pub fn buy_execution() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_803_000 picoseconds. - Weight::from_parts(2_904_000, 0) - } - // Storage: `PolkadotXcm::Queries` (r:1 w:0) - // Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub fn query_response() -> Weight { - // Proof Size summary in bytes: - // Measured: `32` - // Estimated: `3497` - // Minimum execution time: 10_308_000 picoseconds. - Weight::from_parts(10_753_000, 3497) - .saturating_add(T::DbWeight::get().reads(1)) - } - pub fn transact() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 11_499_000 picoseconds. - Weight::from_parts(11_786_000, 0) - } - pub fn refund_surplus() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_102_000 picoseconds. - Weight::from_parts(3_161_000, 0) - } - pub fn set_error_handler() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_678_000 picoseconds. - Weight::from_parts(2_795_000, 0) - } - pub fn set_appendix() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_685_000 picoseconds. - Weight::from_parts(2_758_000, 0) - } - pub fn clear_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_590_000 picoseconds. - Weight::from_parts(2_754_000, 0) - } - pub fn descend_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_297_000 picoseconds. - Weight::from_parts(3_419_000, 0) - } - pub fn clear_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_606_000 picoseconds. - Weight::from_parts(2_717_000, 0) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn report_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `70` - // Estimated: `3535` - // Minimum execution time: 26_242_000 picoseconds. - Weight::from_parts(29_220_000, 3535) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - // Storage: `PolkadotXcm::AssetTraps` (r:1 w:1) - // Proof: `PolkadotXcm::AssetTraps` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub fn claim_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `90` - // Estimated: `3555` - // Minimum execution time: 14_106_000 picoseconds. - Weight::from_parts(14_535_000, 3555) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - pub fn trap() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_634_000 picoseconds. - Weight::from_parts(2_763_000, 0) - } - // Storage: `PolkadotXcm::VersionNotifyTargets` (r:1 w:1) - // Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn subscribe_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `38` - // Estimated: `3503` - // Minimum execution time: 27_802_000 picoseconds. - Weight::from_parts(28_495_000, 3503) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(3)) - } - // Storage: `PolkadotXcm::VersionNotifyTargets` (r:0 w:1) - // Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub fn unsubscribe_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_683_000 picoseconds. - Weight::from_parts(4_907_000, 0) - .saturating_add(T::DbWeight::get().writes(1)) - } - pub fn burn_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_941_000 picoseconds. - Weight::from_parts(4_080_000, 0) - } - pub fn expect_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_775_000 picoseconds. - Weight::from_parts(2_908_000, 0) - } - pub fn expect_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_743_000 picoseconds. - Weight::from_parts(2_863_000, 0) - } - pub fn expect_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_641_000 picoseconds. - Weight::from_parts(2_771_000, 0) - } - pub fn expect_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_838_000 picoseconds. - Weight::from_parts(2_950_000, 0) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn query_pallet() -> Weight { - // Proof Size summary in bytes: - // Measured: `70` - // Estimated: `3535` - // Minimum execution time: 29_284_000 picoseconds. - Weight::from_parts(29_867_000, 3535) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - pub fn expect_pallet() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_734_000 picoseconds. - Weight::from_parts(4_876_000, 0) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn report_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `70` - // Estimated: `3535` - // Minimum execution time: 26_154_000 picoseconds. - Weight::from_parts(26_851_000, 3535) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - pub fn clear_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_678_000 picoseconds. - Weight::from_parts(2_748_000, 0) - } - pub fn set_topic() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_585_000 picoseconds. - Weight::from_parts(2_697_000, 0) - } - pub fn clear_topic() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_576_000 picoseconds. - Weight::from_parts(2_701_000, 0) - } - pub fn set_fees_mode() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_597_000 picoseconds. - Weight::from_parts(2_735_000, 0) - } - pub fn unpaid_execution() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_744_000 picoseconds. - Weight::from_parts(2_809_000, 0) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/xcm_config.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/xcm_config.rs deleted file mode 100644 index b3703eee830..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/src/xcm_config.rs +++ /dev/null @@ -1,280 +0,0 @@ -// Copyright (C) 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 super::{ - AccountId, AllPalletsWithSystem, Balances, ParachainInfo, ParachainSystem, PolkadotXcm, - Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, TransactionByteFee, WeightToFee, XcmpQueue, - CENTS, -}; -use frame_support::{ - match_types, parameter_types, - traits::{ConstU32, Contains, Everything, Nothing}, -}; -use frame_system::EnsureRoot; -use pallet_xcm::XcmPassthrough; -use parachains_common::{impls::ToStakingPot, xcm_config::ConcreteAssetFromSystem}; -use polkadot_parachain_primitives::primitives::Sibling; -use polkadot_runtime_common::xcm_sender::ExponentialPrice; -use xcm::latest::prelude::*; -use xcm_builder::{ - AccountId32Aliases, AllowExplicitUnpaidExecutionFrom, AllowKnownQueryResponses, - AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, CurrencyAdapter, - DenyReserveTransferToRelayChain, DenyThenTry, EnsureXcmOrigin, IsConcrete, ParentAsSuperuser, - ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia, - SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, - TrailingSetTopicAsId, UsingComponents, WeightInfoBounds, WithComputedOrigin, WithUniqueTopic, -}; -use xcm_executor::{traits::WithOriginFilter, XcmExecutor}; - -parameter_types! { - pub const KsmRelayLocation: MultiLocation = MultiLocation::parent(); - pub const RelayNetwork: Option = Some(NetworkId::Kusama); - pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); - pub UniversalLocation: InteriorMultiLocation = - X2(GlobalConsensus(RelayNetwork::get().unwrap()), Parachain(ParachainInfo::parachain_id().into())); - pub const MaxInstructions: u32 = 100; - pub const MaxAssetsIntoHolding: u32 = 64; - pub const GovernanceLocation: MultiLocation = MultiLocation::parent(); - pub const FellowshipLocation: MultiLocation = MultiLocation::parent(); -} - -/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used -/// when determining ownership of accounts for asset transacting and when attempting to use XCM -/// `Transact` in order to determine the dispatch Origin. -pub type LocationToAccountId = ( - // The parent (Relay-chain) origin converts to the parent `AccountId`. - ParentIsPreset, - // Sibling parachain origins convert to AccountId via the `ParaId::into`. - SiblingParachainConvertsVia, - // Straight up local `AccountId32` origins just alias directly to `AccountId`. - AccountId32Aliases, -); - -/// Means for transacting the native currency on this chain. -pub type CurrencyTransactor = CurrencyAdapter< - // Use this currency: - Balances, - // Use this currency when it is a fungible asset matching the given location or name: - IsConcrete, - // Do a simple punn to convert an AccountId32 MultiLocation into a native chain account ID: - LocationToAccountId, - // Our chain's account ID type (we can't get away without mentioning it explicitly): - AccountId, - // We don't track any teleports of `Balances`. - (), ->; - -/// 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 -/// biases the kind of local `Origin` it will become. -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, - // Native converter for Relay-chain (Parent) location; will converts to a `Relay` origin when - // recognized. - RelayChainAsNative, - // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when - // recognized. - SiblingParachainAsNative, - // Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a - // transaction from the Root origin. - ParentAsSuperuser, - // Native signed account converter; this just converts an `AccountId32` origin into a normal - // `RuntimeOrigin::Signed` origin of the same 32-byte value. - SignedAccountId32AsNative, - // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. - XcmPassthrough, -); - -match_types! { - pub type ParentOrParentsPlurality: impl Contains = { - MultiLocation { parents: 1, interior: Here } | - MultiLocation { parents: 1, interior: X1(Plurality { .. }) } - }; - pub type ParentOrSiblings: impl Contains = { - MultiLocation { parents: 1, interior: Here } | - MultiLocation { parents: 1, interior: X1(_) } - }; -} -/// A call filter for the XCM Transact instruction. This is a temporary measure until we properly -/// account for proof size weights. -/// -/// Calls that are allowed through this filter must: -/// 1. Have a fixed weight; -/// 2. Cannot lead to another call being made; -/// 3. Have a defined proof size weight, e.g. no unbounded vecs in call parameters. -pub struct SafeCallFilter; -impl Contains for SafeCallFilter { - fn contains(call: &RuntimeCall) -> bool { - #[cfg(feature = "runtime-benchmarks")] - { - if matches!(call, RuntimeCall::System(frame_system::Call::remark_with_event { .. })) { - return true - } - } - - matches!( - call, - RuntimeCall::PolkadotXcm(pallet_xcm::Call::force_xcm_version { .. }) | - RuntimeCall::System( - frame_system::Call::set_heap_pages { .. } | - frame_system::Call::set_code { .. } | - frame_system::Call::set_code_without_checks { .. } | - frame_system::Call::kill_prefix { .. }, - ) | RuntimeCall::ParachainSystem(..) | - RuntimeCall::Timestamp(..) | - RuntimeCall::Balances(..) | - RuntimeCall::CollatorSelection( - pallet_collator_selection::Call::set_desired_candidates { .. } | - pallet_collator_selection::Call::set_candidacy_bond { .. } | - pallet_collator_selection::Call::register_as_candidate { .. } | - pallet_collator_selection::Call::leave_intent { .. } | - pallet_collator_selection::Call::set_invulnerables { .. } | - pallet_collator_selection::Call::add_invulnerable { .. } | - pallet_collator_selection::Call::remove_invulnerable { .. }, - ) | RuntimeCall::Session(pallet_session::Call::purge_keys { .. }) | - RuntimeCall::XcmpQueue(..) | - RuntimeCall::MessageQueue(..) - ) - } -} - -pub type Barrier = TrailingSetTopicAsId< - DenyThenTry< - DenyReserveTransferToRelayChain, - ( - // Allow local users to buy weight credit. - TakeWeightCredit, - // Expected responses are OK. - AllowKnownQueryResponses, - WithComputedOrigin< - ( - // If the message is one that immediately attempts to pay for execution, then - // allow it. - AllowTopLevelPaidExecutionFrom, - // Parent and its pluralities (i.e. governance bodies) get free execution. - AllowExplicitUnpaidExecutionFrom, - // Subscriptions for version tracking are OK. - AllowSubscriptionsFrom, - ), - UniversalLocation, - ConstU32<8>, - >, - ), - >, ->; - -/// Cases where a remote origin is accepted as trusted Teleporter for a given asset: -/// - KSM with the parent Relay Chain and sibling parachains. -pub type TrustedTeleporters = ConcreteAssetFromSystem; - -pub struct XcmConfig; -impl xcm_executor::Config for XcmConfig { - type RuntimeCall = RuntimeCall; - type XcmSender = XcmRouter; - type AssetTransactor = CurrencyTransactor; - type OriginConverter = XcmOriginToTransactDispatchOrigin; - // BridgeHub does not recognize a reserve location for any asset. Users must teleport KSM - // where allowed (e.g. with the Relay Chain). - type IsReserve = (); - type IsTeleporter = TrustedTeleporters; - type UniversalLocation = UniversalLocation; - type Barrier = Barrier; - type Weigher = WeightInfoBounds< - crate::weights::xcm::BridgeHubKusamaXcmWeight, - RuntimeCall, - MaxInstructions, - >; - type Trader = - UsingComponents>; - type ResponseHandler = PolkadotXcm; - type AssetTrap = PolkadotXcm; - type AssetClaims = PolkadotXcm; - type SubscriptionService = PolkadotXcm; - type PalletInstancesInfo = AllPalletsWithSystem; - type MaxAssetsIntoHolding = MaxAssetsIntoHolding; - type AssetLocker = (); - type AssetExchanger = (); - type FeeManager = (); - type MessageExporter = (); - type UniversalAliases = Nothing; - type CallDispatcher = WithOriginFilter; - type SafeCallFilter = SafeCallFilter; - type Aliasers = Nothing; -} - -/// Converts a local signed origin into an XCM multilocation. -/// Forms the basis for local origins sending/executing XCMs. -pub type LocalOriginToLocation = SignedToAccountId32; - -parameter_types! { - /// The asset ID for the asset that we use to pay for message delivery fees. - pub FeeAssetId: AssetId = Concrete(KsmRelayLocation::get()); - /// The base fee for the message delivery fees. - pub const BaseDeliveryFee: u128 = CENTS.saturating_mul(3); -} - -pub type PriceForParentDelivery = - ExponentialPrice; - -/// The means for routing XCM messages which are not for local execution into the right message -/// queues. -pub type XcmRouter = WithUniqueTopic<( - // Two routers - use UMP to communicate with the relay chain: - cumulus_primitives_utility::ParentAsUmp, - // ..and XCMP to communicate with the sibling chains. - XcmpQueue, -)>; - -impl pallet_xcm::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - // We want to disallow users sending (arbitrary) XCMs from this chain. - type SendXcmOrigin = EnsureXcmOrigin; - type XcmRouter = XcmRouter; - // We support local origins dispatching XCM executions in principle... - type ExecuteXcmOrigin = EnsureXcmOrigin; - // ... but disallow generic XCM execution. As a result only teleports are allowed. - type XcmExecuteFilter = Nothing; - type XcmExecutor = XcmExecutor; - type XcmTeleportFilter = Everything; - type XcmReserveTransferFilter = Nothing; // This parachain is not meant as a reserve location. - type Weigher = WeightInfoBounds< - crate::weights::xcm::BridgeHubKusamaXcmWeight, - RuntimeCall, - MaxInstructions, - >; - type UniversalLocation = UniversalLocation; - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - 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>; - type WeightInfo = crate::weights::pallet_xcm::WeightInfo; - type AdminOrigin = EnsureRoot; - type MaxRemoteLockConsumers = ConstU32<0>; - type RemoteLockConsumerIdentifier = (); -} - -impl cumulus_pallet_xcm::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type XcmExecutor = XcmExecutor; -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/tests/tests.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/tests/tests.rs deleted file mode 100644 index 36d8f0846af..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-kusama/tests/tests.rs +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (C) 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 . - -pub use bridge_hub_kusama_runtime::{ - xcm_config::XcmConfig, AllPalletsWithoutSystem, Balances, ExistentialDeposit, ParachainSystem, - PolkadotXcm, Runtime, RuntimeEvent, SessionKeys, -}; -use codec::Decode; -use frame_support::parameter_types; -use parachains_common::{kusama::fee::WeightToFee, AccountId, AuraId}; - -const ALICE: [u8; 32] = [1u8; 32]; - -parameter_types! { - pub CheckingAccount: AccountId = PolkadotXcm::check_account(); -} - -bridge_hub_test_utils::test_cases::include_teleports_for_native_asset_works!( - Runtime, - AllPalletsWithoutSystem, - XcmConfig, - CheckingAccount, - WeightToFee, - ParachainSystem, - bridge_hub_test_utils::CollatorSessionKeys::new( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::sr25519::Public::from_raw(ALICE)) } - ), - ExistentialDeposit::get(), - Box::new(|runtime_event_encoded: Vec| { - match RuntimeEvent::decode(&mut &runtime_event_encoded[..]) { - Ok(RuntimeEvent::PolkadotXcm(event)) => Some(event), - _ => None, - } - }), - 1002 -); diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/Cargo.toml b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/Cargo.toml deleted file mode 100644 index 3847a352e07..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/Cargo.toml +++ /dev/null @@ -1,192 +0,0 @@ -[package] -name = "bridge-hub-polkadot-runtime" -version = "0.1.0" -authors.workspace = true -edition.workspace = true -description = "Polkadot's BridgeHub parachain runtime" -license = "Apache-2.0" - -[build-dependencies] -substrate-wasm-builder = { path = "../../../../../substrate/utils/wasm-builder", optional = true } - -[dependencies] -codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -hex-literal = { version = "0.4.1" } -log = { version = "0.4.20", default-features = false } -scale-info = { version = "2.10.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.188", optional = true, features = ["derive"] } -smallvec = "1.11.0" - -# Substrate -frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true} -frame-executive = { path = "../../../../../substrate/frame/executive", default-features = false} -frame-support = { path = "../../../../../substrate/frame/support", default-features = false} -frame-system = { path = "../../../../../substrate/frame/system", default-features = false} -frame-system-benchmarking = { path = "../../../../../substrate/frame/system/benchmarking", default-features = false, optional = true} -frame-system-rpc-runtime-api = { path = "../../../../../substrate/frame/system/rpc/runtime-api", default-features = false} -frame-try-runtime = { path = "../../../../../substrate/frame/try-runtime", default-features = false, optional = true} -pallet-aura = { path = "../../../../../substrate/frame/aura", default-features = false} -pallet-authorship = { path = "../../../../../substrate/frame/authorship", default-features = false} -pallet-balances = { path = "../../../../../substrate/frame/balances", default-features = false} -pallet-message-queue = { path = "../../../../../substrate/frame/message-queue", default-features = false } -pallet-multisig = { path = "../../../../../substrate/frame/multisig", default-features = false} -pallet-session = { path = "../../../../../substrate/frame/session", default-features = false} -pallet-timestamp = { path = "../../../../../substrate/frame/timestamp", default-features = false} -pallet-transaction-payment = { path = "../../../../../substrate/frame/transaction-payment", default-features = false} -pallet-transaction-payment-rpc-runtime-api = { path = "../../../../../substrate/frame/transaction-payment/rpc/runtime-api", default-features = false} -pallet-utility = { path = "../../../../../substrate/frame/utility", default-features = false} -sp-api = { path = "../../../../../substrate/primitives/api", default-features = false} -sp-block-builder = { path = "../../../../../substrate/primitives/block-builder", default-features = false} -sp-consensus-aura = { path = "../../../../../substrate/primitives/consensus/aura", default-features = false} -sp-core = { path = "../../../../../substrate/primitives/core", default-features = false} -sp-genesis-builder = { path = "../../../../../substrate/primitives/genesis-builder", default-features = false } -sp-inherents = { path = "../../../../../substrate/primitives/inherents", default-features = false} -sp-io = { path = "../../../../../substrate/primitives/io", default-features = false} -sp-offchain = { path = "../../../../../substrate/primitives/offchain", default-features = false} -sp-runtime = { path = "../../../../../substrate/primitives/runtime", default-features = false} -sp-session = { path = "../../../../../substrate/primitives/session", default-features = false} -sp-std = { path = "../../../../../substrate/primitives/std", default-features = false} -sp-storage = { path = "../../../../../substrate/primitives/storage", default-features = false} -sp-transaction-pool = { path = "../../../../../substrate/primitives/transaction-pool", default-features = false} -sp-version = { path = "../../../../../substrate/primitives/version", default-features = false} - -# Polkadot -pallet-xcm = { path = "../../../../../polkadot/xcm/pallet-xcm", default-features = false} -pallet-xcm-benchmarks = { path = "../../../../../polkadot/xcm/pallet-xcm-benchmarks", default-features = false, optional = true } -polkadot-core-primitives = { path = "../../../../../polkadot/core-primitives", default-features = false} -polkadot-parachain-primitives = { path = "../../../../../polkadot/parachain", default-features = false} -polkadot-runtime-common = { path = "../../../../../polkadot/runtime/common", default-features = false} -xcm = { package = "staging-xcm", path = "../../../../../polkadot/xcm", default-features = false} -xcm-builder = { package = "staging-xcm-builder", path = "../../../../../polkadot/xcm/xcm-builder", default-features = false} -xcm-executor = { package = "staging-xcm-executor", path = "../../../../../polkadot/xcm/xcm-executor", default-features = false} - -# Cumulus -cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } -cumulus-pallet-dmp-queue = { path = "../../../../pallets/dmp-queue", default-features = false } -cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = ["parameterized-consensus-hook",] } -cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false} -cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } -cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } -cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } -cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } -pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } -parachain-info = { package = "staging-parachain-info", path = "../../../pallets/parachain-info", default-features = false } -parachains-common = { path = "../../../common", default-features = false } - -[dev-dependencies] -bridge-hub-test-utils = { path = "../test-utils" } - -[features] -default = [ "std" ] -std = [ - "codec/std", - "cumulus-pallet-aura-ext/std", - "cumulus-pallet-dmp-queue/std", - "cumulus-pallet-parachain-system/std", - "cumulus-pallet-session-benchmarking/std", - "cumulus-pallet-xcm/std", - "cumulus-pallet-xcmp-queue/std", - "cumulus-primitives-core/std", - "cumulus-primitives-utility/std", - "frame-benchmarking?/std", - "frame-executive/std", - "frame-support/std", - "frame-system-benchmarking?/std", - "frame-system-rpc-runtime-api/std", - "frame-system/std", - "frame-try-runtime?/std", - "log/std", - "pallet-aura/std", - "pallet-authorship/std", - "pallet-balances/std", - "pallet-collator-selection/std", - "pallet-message-queue/std", - "pallet-multisig/std", - "pallet-session/std", - "pallet-timestamp/std", - "pallet-transaction-payment-rpc-runtime-api/std", - "pallet-transaction-payment/std", - "pallet-utility/std", - "pallet-xcm-benchmarks?/std", - "pallet-xcm/std", - "parachain-info/std", - "parachains-common/std", - "polkadot-core-primitives/std", - "polkadot-parachain-primitives/std", - "polkadot-runtime-common/std", - "scale-info/std", - "serde", - "sp-api/std", - "sp-block-builder/std", - "sp-consensus-aura/std", - "sp-core/std", - "sp-genesis-builder/std", - "sp-inherents/std", - "sp-io/std", - "sp-offchain/std", - "sp-runtime/std", - "sp-session/std", - "sp-std/std", - "sp-storage/std", - "sp-transaction-pool/std", - "sp-version/std", - "substrate-wasm-builder", - "xcm-builder/std", - "xcm-executor/std", - "xcm/std", -] - -runtime-benchmarks = [ - "cumulus-pallet-dmp-queue/runtime-benchmarks", - "cumulus-pallet-parachain-system/runtime-benchmarks", - "cumulus-pallet-session-benchmarking/runtime-benchmarks", - "cumulus-pallet-xcmp-queue/runtime-benchmarks", - "cumulus-primitives-core/runtime-benchmarks", - "cumulus-primitives-utility/runtime-benchmarks", - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system-benchmarking/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "pallet-collator-selection/runtime-benchmarks", - "pallet-message-queue/runtime-benchmarks", - "pallet-multisig/runtime-benchmarks", - "pallet-timestamp/runtime-benchmarks", - "pallet-utility/runtime-benchmarks", - "pallet-xcm-benchmarks/runtime-benchmarks", - "pallet-xcm/runtime-benchmarks", - "parachains-common/runtime-benchmarks", - "polkadot-parachain-primitives/runtime-benchmarks", - "polkadot-runtime-common/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "xcm-builder/runtime-benchmarks", - "xcm-executor/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-support/try-runtime", - "frame-system/try-runtime", - "frame-try-runtime/try-runtime", - "pallet-aura/try-runtime", - "pallet-authorship/try-runtime", - "pallet-balances/try-runtime", - "pallet-collator-selection/try-runtime", - "pallet-message-queue/try-runtime", - "pallet-multisig/try-runtime", - "pallet-session/try-runtime", - "pallet-timestamp/try-runtime", - "pallet-transaction-payment/try-runtime", - "pallet-utility/try-runtime", - "pallet-xcm/try-runtime", - "parachain-info/try-runtime", - "polkadot-runtime-common/try-runtime", - "sp-runtime/try-runtime", -] - -experimental = [ "pallet-aura/experimental" ] diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/build.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/build.rs deleted file mode 100644 index 60f8a125129..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/build.rs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#[cfg(feature = "std")] -fn main() { - substrate_wasm_builder::WasmBuilder::new() - .with_current_project() - .export_heap_base() - .import_memory() - .build() -} - -#[cfg(not(feature = "std"))] -fn main() {} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/lib.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/lib.rs deleted file mode 100644 index e5c4f00f28e..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/lib.rs +++ /dev/null @@ -1,873 +0,0 @@ -// Copyright (C) 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 . - -#![cfg_attr(not(feature = "std"), no_std)] -// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. -#![recursion_limit = "256"] - -// Make the WASM binary available. -#[cfg(feature = "std")] -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -mod weights; -pub mod xcm_config; - -use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; -use polkadot_runtime_common::xcm_sender::NoPriceForMessageDelivery; -use sp_api::impl_runtime_apis; -use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; -use sp_runtime::{ - create_runtime_str, generic, impl_opaque_keys, - traits::{AccountIdLookup, BlakeTwo256, Block as BlockT}, - transaction_validity::{TransactionSource, TransactionValidity}, - ApplyExtrinsicResult, -}; - -use sp_std::prelude::*; -#[cfg(feature = "std")] -use sp_version::NativeVersion; -use sp_version::RuntimeVersion; - -use cumulus_primitives_core::{AggregateMessageOrigin, ParaId}; -use frame_support::{ - construct_runtime, - dispatch::DispatchClass, - genesis_builder_helper::{build_config, create_default_config}, - parameter_types, - traits::{ - ConstBool, ConstU32, ConstU64, ConstU8, EitherOfDiverse, Everything, TransformOrigin, - }, - weights::{ConstantMultiplier, Weight}, - PalletId, -}; -use frame_system::{ - limits::{BlockLength, BlockWeights}, - EnsureRoot, -}; -use pallet_xcm::{EnsureXcm, IsVoiceOfBody}; -pub use sp_consensus_aura::sr25519::AuthorityId as AuraId; -pub use sp_runtime::{MultiAddress, Perbill, Permill}; -use xcm_config::{FellowshipLocation, GovernanceLocation, XcmOriginToTransactDispatchOrigin}; - -#[cfg(any(feature = "std", test))] -pub use sp_runtime::BuildStorage; - -// Polkadot imports -use polkadot_runtime_common::{BlockHashCount, SlowAdjustingFeeUpdate}; - -use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight}; - -use parachains_common::{ - impls::DealWithFees, - message_queue::{NarrowOriginToSibling, ParaIdToSibling}, - polkadot::{consensus::*, currency::*, fee::WeightToFee}, - AccountId, Balance, BlockNumber, Hash, Header, Nonce, Signature, AVERAGE_ON_INITIALIZE_RATIO, - HOURS, MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, -}; -// XCM Imports -use xcm::latest::prelude::BodyId; - -/// The address format for describing accounts. -pub type Address = MultiAddress; - -/// Block type as expected by this runtime. -pub type Block = generic::Block; - -/// A Block signed with a Justification -pub type SignedBlock = generic::SignedBlock; - -/// BlockId type as expected by this runtime. -pub type BlockId = generic::BlockId; - -/// The SignedExtension to the basic transaction logic. -pub type SignedExtra = ( - frame_system::CheckNonZeroSender, - frame_system::CheckSpecVersion, - frame_system::CheckTxVersion, - frame_system::CheckGenesis, - frame_system::CheckEra, - frame_system::CheckNonce, - frame_system::CheckWeight, - pallet_transaction_payment::ChargeTransactionPayment, -); - -/// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = - generic::UncheckedExtrinsic; - -/// Migrations to apply on runtime upgrade. -pub type Migrations = ( - // unreleased - pallet_collator_selection::migration::v1::MigrateToV1, -); - -/// Executive: handles dispatch to the various modules. -pub type Executive = frame_executive::Executive< - Runtime, - Block, - frame_system::ChainContext, - Runtime, - AllPalletsWithSystem, - Migrations, ->; - -impl_opaque_keys! { - pub struct SessionKeys { - pub aura: Aura, - } -} - -#[sp_version::runtime_version] -pub const VERSION: RuntimeVersion = RuntimeVersion { - spec_name: create_runtime_str!("bridge-hub-polkadot"), - impl_name: create_runtime_str!("bridge-hub-polkadot"), - authoring_version: 1, - spec_version: 1_004_000, - impl_version: 0, - apis: RUNTIME_API_VERSIONS, - transaction_version: 2, - state_version: 1, -}; - -/// The version information used to identify this runtime when compiled natively. -#[cfg(feature = "std")] -pub fn native_version() -> NativeVersion { - NativeVersion { runtime_version: VERSION, can_author_with: Default::default() } -} - -parameter_types! { - pub const Version: RuntimeVersion = VERSION; - pub RuntimeBlockLength: BlockLength = - BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); - pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() - .base_block(BlockExecutionWeight::get()) - .for_class(DispatchClass::all(), |weights| { - weights.base_extrinsic = ExtrinsicBaseWeight::get(); - }) - .for_class(DispatchClass::Normal, |weights| { - weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); - }) - .for_class(DispatchClass::Operational, |weights| { - weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT); - // Operational transactions have some extra reserved space, so that they - // are included even if block reached `MAXIMUM_BLOCK_WEIGHT`. - weights.reserved = Some( - MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT - ); - }) - .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO) - .build_or_panic(); - pub const SS58Prefix: u8 = 0; -} - -// Configure FRAME pallets to include in runtime. - -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 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. - type Nonce = Nonce; - /// The type for hashing blocks and tries. - type Hash = Hash; - /// The hashing algorithm used. - type Hashing = BlakeTwo256; - /// The block type. - type Block = Block; - /// The ubiquitous event type. - type RuntimeEvent = RuntimeEvent; - /// The ubiquitous origin type. - type RuntimeOrigin = RuntimeOrigin; - /// Maximum number of block number to block hash mappings to keep (oldest pruned first). - type BlockHashCount = BlockHashCount; - /// Runtime version. - type Version = Version; - /// Converts a module to an index of this module in the runtime. - type PalletInfo = PalletInfo; - /// The data to be stored in an account. - type AccountData = pallet_balances::AccountData; - /// What to do if a new account is created. - type OnNewAccount = (); - /// What to do if an account is fully reaped from the system. - type OnKilledAccount = (); - /// The weight of database operations that the runtime can invoke. - type DbWeight = RocksDbWeight; - /// The basic call filter to use in dispatchable. - type BaseCallFilter = Everything; - /// Weight information for the extrinsics of this pallet. - type SystemWeightInfo = weights::frame_system::WeightInfo; - /// Block & extrinsics weights: base values and limits. - type BlockWeights = RuntimeBlockWeights; - /// The maximum length of a block (in bytes). - type BlockLength = RuntimeBlockLength; - type SS58Prefix = SS58Prefix; - /// The action to take on a Runtime Upgrade - type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode; - type MaxConsumers = ConstU32<16>; -} - -impl pallet_timestamp::Config for Runtime { - /// A timestamp: milliseconds since the unix epoch. - type Moment = u64; - type OnTimestampSet = Aura; - type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; - type WeightInfo = weights::pallet_timestamp::WeightInfo; -} - -impl pallet_authorship::Config for Runtime { - type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type EventHandler = (CollatorSelection,); -} - -parameter_types! { - pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; -} - -impl pallet_balances::Config for Runtime { - /// The type for recording an account's balance. - type Balance = Balance; - type DustRemoval = (); - /// The ubiquitous event type. - type RuntimeEvent = RuntimeEvent; - type ExistentialDeposit = ExistentialDeposit; - type AccountStore = System; - type WeightInfo = weights::pallet_balances::WeightInfo; - type MaxLocks = ConstU32<50>; - type MaxReserves = ConstU32<50>; - type ReserveIdentifier = [u8; 8]; - type RuntimeHoldReason = RuntimeHoldReason; - type RuntimeFreezeReason = RuntimeFreezeReason; - type FreezeIdentifier = (); - type MaxHolds = ConstU32<0>; - type MaxFreezes = ConstU32<0>; -} - -parameter_types! { - /// Relay Chain `TransactionByteFee` / 10 - pub const TransactionByteFee: Balance = MILLICENTS; -} - -impl pallet_transaction_payment::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type OnChargeTransaction = - pallet_transaction_payment::CurrencyAdapter>; - type OperationalFeeMultiplier = ConstU8<5>; - type WeightToFee = WeightToFee; - type LengthToFee = ConstantMultiplier; - type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; -} - -parameter_types! { - 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 { - type WeightInfo = weights::cumulus_pallet_parachain_system::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type OnSystemEvent = (); - type SelfParaId = parachain_info::Pallet; - type OutboundXcmpMessageSource = XcmpQueue; - type DmpQueue = frame_support::traits::EnqueueWithOrigin; - type ReservedDmpWeight = ReservedDmpWeight; - type XcmpMessageHandler = XcmpQueue; - type ReservedXcmpWeight = ReservedXcmpWeight; - type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; - type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< - Runtime, - RELAY_CHAIN_SLOT_DURATION_MILLIS, - BLOCK_PROCESSING_VELOCITY, - UNINCLUDED_SEGMENT_CAPACITY, - >; -} - -parameter_types! { - pub MessageQueueServiceWeight: Weight = Perbill::from_percent(35) * RuntimeBlockWeights::get().max_block; -} - -impl pallet_message_queue::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = weights::pallet_message_queue::WeightInfo; - #[cfg(feature = "runtime-benchmarks")] - type MessageProcessor = pallet_message_queue::mock_helpers::NoopMessageProcessor< - cumulus_primitives_core::AggregateMessageOrigin, - >; - #[cfg(not(feature = "runtime-benchmarks"))] - type MessageProcessor = xcm_builder::ProcessXcmMessage< - AggregateMessageOrigin, - xcm_executor::XcmExecutor, - RuntimeCall, - >; - type Size = u32; - // The XCMP queue pallet is only ever able to handle the `Sibling(ParaId)` origin: - type QueueChangeHandler = NarrowOriginToSibling; - type QueuePausedQuery = NarrowOriginToSibling; - type HeapSize = sp_core::ConstU32<{ 64 * 1024 }>; - type MaxStale = sp_core::ConstU32<8>; - type ServiceWeight = MessageQueueServiceWeight; -} - -impl parachain_info::Config for Runtime {} - -impl cumulus_pallet_aura_ext::Config for Runtime {} - -parameter_types! { - // Fellows pluralistic body. - pub const FellowsBodyId: BodyId = BodyId::Technical; -} - -/// Privileged origin that represents Root or Fellows. -pub type RootOrFellows = EitherOfDiverse< - EnsureRoot, - EnsureXcm>, ->; - -impl cumulus_pallet_xcmp_queue::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type ChannelInfo = ParachainSystem; - type VersionWrapper = PolkadotXcm; - // Enqueue XCMP messages from siblings for later processing. - type XcmpQueue = TransformOrigin; - type MaxInboundSuspended = sp_core::ConstU32<1_000>; - type ControllerOrigin = RootOrFellows; - type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; - type WeightInfo = weights::cumulus_pallet_xcmp_queue::WeightInfo; - type PriceForSiblingDelivery = NoPriceForMessageDelivery; -} - -parameter_types! { - pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; -} - -impl cumulus_pallet_dmp_queue::Config for Runtime { - type WeightInfo = weights::cumulus_pallet_dmp_queue::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type DmpSink = frame_support::traits::EnqueueWithOrigin; -} - -pub const PERIOD: u32 = 6 * HOURS; -pub const OFFSET: u32 = 0; - -impl pallet_session::Config for Runtime { - 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; - type ShouldEndSession = pallet_session::PeriodicSessions, ConstU32>; - type NextSessionRotation = pallet_session::PeriodicSessions, ConstU32>; - type SessionManager = CollatorSelection; - // Essentially just Aura, but let's be pedantic. - type SessionHandler = ::KeyTypeIdProviders; - type Keys = SessionKeys; - type WeightInfo = weights::pallet_session::WeightInfo; -} - -impl pallet_aura::Config for Runtime { - type AuthorityId = AuraId; - type DisabledValidators = (); - type MaxAuthorities = ConstU32<100_000>; - type AllowMultipleBlocksPerSlot = ConstBool; - #[cfg(feature = "experimental")] - type SlotDuration = pallet_aura::MinimumPeriodTimesTwo; -} - -parameter_types! { - pub const PotId: PalletId = PalletId(*b"PotStake"); - pub const SessionLength: BlockNumber = 6 * HOURS; - // StakingAdmin pluralistic body. - pub const StakingAdminBodyId: BodyId = BodyId::Defense; -} - -/// We allow root, the StakingAdmin to execute privileged collator selection operations. -pub type CollatorSelectionUpdateOrigin = EitherOfDiverse< - EnsureRoot, - EnsureXcm>, ->; - -impl pallet_collator_selection::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type UpdateOrigin = CollatorSelectionUpdateOrigin; - type PotId = PotId; - type MaxCandidates = ConstU32<100>; - type MinEligibleCollators = ConstU32<4>; - type MaxInvulnerables = ConstU32<20>; - // should be a multiple of session or things will get inconsistent - type KickThreshold = ConstU32; - type ValidatorId = ::AccountId; - type ValidatorIdOf = pallet_collator_selection::IdentityCollator; - type ValidatorRegistration = Session; - type WeightInfo = weights::pallet_collator_selection::WeightInfo; -} - -parameter_types! { - // One storage item; key size is 32; value is size 4+4+16+32 bytes = 56 bytes. - pub const DepositBase: Balance = deposit(1, 88); - // Additional storage item size of 32 bytes. - pub const DepositFactor: Balance = deposit(0, 32); -} - -impl pallet_multisig::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type Currency = Balances; - type DepositBase = DepositBase; - type DepositFactor = DepositFactor; - type MaxSignatories = ConstU32<100>; - type WeightInfo = weights::pallet_multisig::WeightInfo; -} - -impl pallet_utility::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type PalletsOrigin = OriginCaller; - type WeightInfo = weights::pallet_utility::WeightInfo; -} - -// Create the runtime by composing the FRAME pallets that were previously configured. -construct_runtime!( - pub enum Runtime - { - // System support stuff. - System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, - ParachainSystem: cumulus_pallet_parachain_system::{ - Pallet, Call, Config, Storage, Inherent, Event, ValidateUnsigned, - } = 1, - Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, - ParachainInfo: parachain_info::{Pallet, Storage, Config} = 3, - - // Monetary stuff. - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event} = 10, - TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event} = 11, - - // Collator support. The order of these 4 are important and shall not change. - Authorship: pallet_authorship::{Pallet, Storage} = 20, - CollatorSelection: pallet_collator_selection::{Pallet, Call, Storage, Event, Config} = 21, - Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 22, - Aura: pallet_aura::{Pallet, Storage, Config} = 23, - AuraExt: cumulus_pallet_aura_ext::{Pallet, Storage, Config} = 24, - - // XCM helpers. - XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event} = 30, - PolkadotXcm: pallet_xcm::{Pallet, Call, Event, Origin, Config} = 31, - CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 32, - DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 33, - MessageQueue: pallet_message_queue::{Pallet, Call, Storage, Event} = 34, - - // Handy utilities. - Utility: pallet_utility::{Pallet, Call, Event} = 40, - Multisig: pallet_multisig::{Pallet, Call, Storage, Event} = 41, - } -); - -#[cfg(feature = "runtime-benchmarks")] -mod benches { - frame_benchmarking::define_benchmarks!( - [frame_system, SystemBench::] - [pallet_balances, Balances] - [pallet_message_queue, MessageQueue] - [pallet_multisig, Multisig] - [pallet_session, SessionBench::] - [pallet_utility, Utility] - [pallet_timestamp, Timestamp] - [pallet_collator_selection, CollatorSelection] - [cumulus_pallet_parachain_system, ParachainSystem] - [cumulus_pallet_xcmp_queue, XcmpQueue] - [cumulus_pallet_dmp_queue, DmpQueue] - // XCM - [pallet_xcm, PalletXcmExtrinsicsBenchmark::] - // NOTE: Make sure you point to the individual modules below. - [pallet_xcm_benchmarks::fungible, XcmBalances] - [pallet_xcm_benchmarks::generic, XcmGeneric] - ); -} - -impl_runtime_apis! { - impl sp_consensus_aura::AuraApi for Runtime { - fn slot_duration() -> sp_consensus_aura::SlotDuration { - sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) - } - - fn authorities() -> Vec { - Aura::authorities().into_inner() - } - } - - impl sp_api::Core for Runtime { - fn version() -> RuntimeVersion { - VERSION - } - - fn execute_block(block: Block) { - Executive::execute_block(block) - } - - fn initialize_block(header: &::Header) { - Executive::initialize_block(header) - } - } - - impl sp_api::Metadata for Runtime { - fn metadata() -> OpaqueMetadata { - OpaqueMetadata::new(Runtime::metadata().into()) - } - - fn metadata_at_version(version: u32) -> Option { - Runtime::metadata_at_version(version) - } - - fn metadata_versions() -> sp_std::vec::Vec { - Runtime::metadata_versions() - } - } - - impl sp_block_builder::BlockBuilder for Runtime { - fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyExtrinsicResult { - Executive::apply_extrinsic(extrinsic) - } - - fn finalize_block() -> ::Header { - Executive::finalize_block() - } - - fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { - data.create_extrinsics() - } - - fn check_inherents( - block: Block, - data: sp_inherents::InherentData, - ) -> sp_inherents::CheckInherentsResult { - data.check_extrinsics(&block) - } - } - - impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { - fn validate_transaction( - source: TransactionSource, - tx: ::Extrinsic, - block_hash: ::Hash, - ) -> TransactionValidity { - Executive::validate_transaction(source, tx, block_hash) - } - } - - impl sp_offchain::OffchainWorkerApi for Runtime { - fn offchain_worker(header: &::Header) { - Executive::offchain_worker(header) - } - } - - impl sp_session::SessionKeys for Runtime { - fn generate_session_keys(seed: Option>) -> Vec { - SessionKeys::generate(seed) - } - - fn decode_session_keys( - encoded: Vec, - ) -> Option, KeyTypeId)>> { - SessionKeys::decode_into_raw_public_keys(&encoded) - } - } - - impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { - fn account_nonce(account: AccountId) -> Nonce { - System::account_nonce(account) - } - } - - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi for Runtime { - fn query_info( - uxt: ::Extrinsic, - len: u32, - ) -> pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo { - TransactionPayment::query_info(uxt, len) - } - fn query_fee_details( - uxt: ::Extrinsic, - len: u32, - ) -> pallet_transaction_payment::FeeDetails { - TransactionPayment::query_fee_details(uxt, len) - } - fn query_weight_to_fee(weight: Weight) -> Balance { - TransactionPayment::weight_to_fee(weight) - } - fn query_length_to_fee(length: u32) -> Balance { - TransactionPayment::length_to_fee(length) - } - } - - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi - for Runtime - { - fn query_call_info( - call: RuntimeCall, - len: u32, - ) -> pallet_transaction_payment::RuntimeDispatchInfo { - TransactionPayment::query_call_info(call, len) - } - fn query_call_fee_details( - call: RuntimeCall, - len: u32, - ) -> pallet_transaction_payment::FeeDetails { - TransactionPayment::query_call_fee_details(call, len) - } - fn query_weight_to_fee(weight: Weight) -> Balance { - TransactionPayment::weight_to_fee(weight) - } - fn query_length_to_fee(length: u32) -> Balance { - TransactionPayment::length_to_fee(length) - } - } - - impl cumulus_primitives_core::CollectCollationInfo for Runtime { - fn collect_collation_info(header: &::Header) -> cumulus_primitives_core::CollationInfo { - ParachainSystem::collect_collation_info(header) - } - } - - #[cfg(feature = "try-runtime")] - impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { - let weight = Executive::try_runtime_upgrade(checks).unwrap(); - (weight, RuntimeBlockWeights::get().max_block) - } - - fn execute_block( - block: Block, - state_root_check: bool, - signature_check: bool, - select: frame_try_runtime::TryStateSelect, - ) -> Weight { - // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to - // have a backtrace here. - Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() - } - } - - #[cfg(feature = "runtime-benchmarks")] - impl frame_benchmarking::Benchmark for Runtime { - fn benchmark_metadata(extra: bool) -> ( - 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; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; - - // 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); - - let storage_info = AllPalletsWithSystem::storage_info(); - (list, storage_info) - } - - fn dispatch_benchmark( - config: frame_benchmarking::BenchmarkConfig - ) -> Result, sp_runtime::RuntimeString> { - use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError}; - use sp_storage::TrackedStorageKey; - - use frame_system_benchmarking::Pallet as SystemBench; - impl frame_system_benchmarking::Config for Runtime { - fn setup_set_code_requirements(code: &sp_std::vec::Vec) -> Result<(), BenchmarkError> { - ParachainSystem::initialize_for_set_code_benchmark(code.len() as u32); - Ok(()) - } - - fn verify_set_code() { - System::assert_last_event(cumulus_pallet_parachain_system::Event::::ValidationFunctionStored.into()); - } - } - - use cumulus_pallet_session_benchmarking::Pallet as SessionBench; - impl cumulus_pallet_session_benchmarking::Config for Runtime {} - - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; - impl pallet_xcm::benchmarking::Config for Runtime { - fn reachable_dest() -> Option { - Some(Parent.into()) - } - - fn teleportable_asset_and_dest() -> Option<(MultiAsset, MultiLocation)> { - // Relay/native token can be teleported between BH and Relay. - Some(( - MultiAsset { - fun: Fungible(EXISTENTIAL_DEPOSIT), - id: Concrete(Parent.into()) - }, - Parent.into(), - )) - } - - fn reserve_transferable_asset_and_dest() -> Option<(MultiAsset, MultiLocation)> { - // Reserve transfers are disabled on BH. - None - } - } - - use xcm::latest::prelude::*; - use xcm_config::DotRelayLocation; - - parameter_types! { - pub ExistentialDepositMultiAsset: Option = Some(( - xcm_config::DotRelayLocation::get(), - ExistentialDeposit::get() - ).into()); - } - - impl pallet_xcm_benchmarks::Config for Runtime { - type XcmConfig = xcm_config::XcmConfig; - type AccountIdConverter = xcm_config::LocationToAccountId; - type DeliveryHelper = cumulus_primitives_utility::ToParentDeliveryHelper< - xcm_config::XcmConfig, - ExistentialDepositMultiAsset, - xcm_config::PriceForParentDelivery, - >; - fn valid_destination() -> Result { - Ok(DotRelayLocation::get()) - } - fn worst_case_holding(_depositable_count: u32) -> MultiAssets { - // just concrete assets according to relay chain. - let assets: Vec = vec![ - MultiAsset { - id: Concrete(DotRelayLocation::get()), - fun: Fungible(1_000_000 * UNITS), - } - ]; - assets.into() - } - } - - parameter_types! { - pub const TrustedTeleporter: Option<(MultiLocation, MultiAsset)> = Some(( - DotRelayLocation::get(), - MultiAsset { fun: Fungible(UNITS), id: Concrete(DotRelayLocation::get()) }, - )); - pub const CheckedAccount: Option<(AccountId, xcm_builder::MintLocation)> = None; - pub const TrustedReserve: Option<(MultiLocation, MultiAsset)> = 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(DotRelayLocation::get()), - fun: Fungible(UNITS), - } - } - } - - impl pallet_xcm_benchmarks::generic::Config for Runtime { - type TransactAsset = Balances; - type RuntimeCall = RuntimeCall; - - fn worst_case_response() -> (u64, Response) { - (0u64, Response::Version(Default::default())) - } - - fn worst_case_asset_exchange() -> Result<(MultiAssets, MultiAssets), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn universal_alias() -> Result<(MultiLocation, Junction), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn transact_origin_and_runtime_call() -> Result<(MultiLocation, RuntimeCall), BenchmarkError> { - Ok((DotRelayLocation::get(), frame_system::Call::remark_with_event { remark: vec![] }.into())) - } - - fn subscribe_origin() -> Result { - Ok(DotRelayLocation::get()) - } - - fn claimable_asset() -> Result<(MultiLocation, MultiLocation, MultiAssets), BenchmarkError> { - let origin = DotRelayLocation::get(); - let assets: MultiAssets = (Concrete(DotRelayLocation::get()), 1_000 * UNITS).into(); - let ticket = MultiLocation { parents: 0, interior: Here }; - Ok((origin, ticket, assets)) - } - - fn unlockable_asset() -> Result<(MultiLocation, MultiLocation, MultiAsset), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn export_message_origin_and_destination( - ) -> Result<(MultiLocation, NetworkId, InteriorMultiLocation), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn alias_origin() -> Result<(MultiLocation, MultiLocation), BenchmarkError> { - Err(BenchmarkError::Skip) - } - } - - 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(), - // Total Issuance - hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80").to_vec().into(), - // Execution Phase - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a").to_vec().into(), - // Event Count - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(), - // System Events - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(), - ]; - - let mut batches = Vec::::new(); - let params = (&config, &whitelist); - add_benchmarks!(params, batches); - - Ok(batches) - } - } - - impl sp_genesis_builder::GenesisBuilder for Runtime { - fn create_default_config() -> Vec { - create_default_config::() - } - - fn build_config(config: Vec) -> sp_genesis_builder::Result { - build_config::(config) - } - } -} - -cumulus_pallet_parachain_system::register_validate_block! { - Runtime = Runtime, - BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::, -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/block_weights.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/block_weights.rs deleted file mode 100644 index e7fdb2aae2a..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/block_weights.rs +++ /dev/null @@ -1,53 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, Weight}, - }; - - parameter_types! { - /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = - Weight::from_parts(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000), 0); - } - - #[cfg(test)] - mod test_weights { - use frame_support::weights::constants; - - /// Checks that the weight exists and is sane. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - let w = super::constants::BlockExecutionWeight::get(); - - // At least 100 µs. - assert!( - w.ref_time() >= 100u64 * constants::WEIGHT_REF_TIME_PER_MICROS, - "Weight should be at least 100 µs." - ); - // At most 50 ms. - assert!( - w.ref_time() <= 50u64 * constants::WEIGHT_REF_TIME_PER_MILLIS, - "Weight should be at most 50 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/cumulus_pallet_dmp_queue.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/cumulus_pallet_dmp_queue.rs deleted file mode 100644 index cc41dcd6cbb..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/cumulus_pallet_dmp_queue.rs +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (C) 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_dmp_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-10-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=cumulus_pallet_dmp_queue -// --chain=asset-hub-kusama-dev -// --header=./cumulus/file_header.txt -// --output=./cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_dmp_queue`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_dmp_queue::WeightInfo for WeightInfo { - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65696` - // Estimated: `69161` - // Minimum execution time: 124_651_000 picoseconds. - Weight::from_parts(127_857_000, 0) - .saturating_add(Weight::from_parts(0, 69161)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65659` - // Estimated: `69124` - // Minimum execution time: 65_684_000 picoseconds. - Weight::from_parts(68_039_000, 0) - .saturating_add(Weight::from_parts(0, 69124)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_overweight_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65726` - // Estimated: `69191` - // Minimum execution time: 117_657_000 picoseconds. - Weight::from_parts(122_035_000, 0) - .saturating_add(Weight::from_parts(0, 69191)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(6)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - fn on_idle_overweight_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65689` - // Estimated: `69154` - // Minimum execution time: 59_799_000 picoseconds. - Weight::from_parts(61_354_000, 0) - .saturating_add(Weight::from_parts(0, 69154)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/cumulus_pallet_parachain_system.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/cumulus_pallet_parachain_system.rs deleted file mode 100644 index 4b0cface146..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/cumulus_pallet_parachain_system.rs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `cumulus_pallet_parachain_system` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `i9`, CPU: `13th Gen Intel(R) Core(TM) i9-13900K` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-polkadot-dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/polkadot-parachain -// benchmark -// pallet -// --chain -// bridge-hub-polkadot-dev -// --pallet -// cumulus_pallet_parachain_system -// --extrinsic -// * -// --execution -// wasm -// --wasm-execution -// compiled -// --output -// parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights -// --steps -// 50 -// --repeat -// 20 - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::Weight}; -use sp_std::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_parachain_system`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_parachain_system::WeightInfo for WeightInfo { - /// Storage: ParachainSystem LastDmqMqcHead (r:1 w:1) - /// Proof Skipped: ParachainSystem LastDmqMqcHead (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ParachainSystem ReservedDmpWeightOverride (r:1 w:0) - /// Proof Skipped: ParachainSystem ReservedDmpWeightOverride (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: ParachainSystem ProcessedDownwardMessages (r:0 w:1) - /// Proof Skipped: ParachainSystem ProcessedDownwardMessages (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: MessageQueue Pages (r:0 w:16) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - /// The range of component `n` is `[0, 1000]`. - fn enqueue_inbound_downward_messages(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `12` - // Estimated: `8013` - // Minimum execution time: 1_686_000 picoseconds. - Weight::from_parts(1_729_000, 0) - .saturating_add(Weight::from_parts(0, 8013)) - // Standard Error: 19_565 - .saturating_add(Weight::from_parts(24_482_828, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs deleted file mode 100644 index ac6ad093faf..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `cumulus_pallet_xcmp_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-09-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `Olivers-MacBook-Pro.local`, CPU: `` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/release/polkadot-parachain -// benchmark -// pallet -// --pallet -// cumulus-pallet-xcmp-queue -// --chain -// bridge-hub-polkadot-dev -// --output -// cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs -// --extrinsic -// - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_xcmp_queue`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:1) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_config_with_u32() -> Weight { - // Proof Size summary in bytes: - // Measured: `76` - // Estimated: `1561` - // Minimum execution time: 6_000_000 picoseconds. - Weight::from_parts(6_000_000, 0) - .saturating_add(Weight::from_parts(0, 1561)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:0) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `XcmpQueue::InboundXcmpSuspended` (r:1 w:0) - /// Proof: `XcmpQueue::InboundXcmpSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn enqueue_xcmp_message() -> Weight { - // Proof Size summary in bytes: - // Measured: `82` - // Estimated: `3517` - // Minimum execution time: 15_000_000 picoseconds. - Weight::from_parts(15_000_000, 0) - .saturating_add(Weight::from_parts(0, 3517)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn suspend_channel() -> Weight { - // Proof Size summary in bytes: - // Measured: `76` - // Estimated: `1561` - // Minimum execution time: 3_000_000 picoseconds. - Weight::from_parts(4_000_000, 0) - .saturating_add(Weight::from_parts(0, 1561)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn resume_channel() -> Weight { - // Proof Size summary in bytes: - // Measured: `111` - // Estimated: `1596` - // Minimum execution time: 4_000_000 picoseconds. - Weight::from_parts(5_000_000, 0) - .saturating_add(Weight::from_parts(0, 1596)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn take_first_concatenated_xcm() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 44_000_000 picoseconds. - Weight::from_parts(45_000_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Storage: `XcmpQueue::InboundXcmpMessages` (r:1 w:1) - /// Proof: `XcmpQueue::InboundXcmpMessages` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:0) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::InboundXcmpSuspended` (r:1 w:0) - /// Proof: `XcmpQueue::InboundXcmpSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65711` - // Estimated: `69176` - // Minimum execution time: 61_000_000 picoseconds. - Weight::from_parts(64_000_000, 0) - .saturating_add(Weight::from_parts(0, 69176)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65710` - // Estimated: `69175` - // Minimum execution time: 42_000_000 picoseconds. - Weight::from_parts(44_000_000, 0) - .saturating_add(Weight::from_parts(0, 69175)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/extrinsic_weights.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/extrinsic_weights.rs deleted file mode 100644 index 1a4adb968bb..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/extrinsic_weights.rs +++ /dev/null @@ -1,53 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, Weight}, - }; - - parameter_types! { - /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = - Weight::from_parts(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000), 0); - } - - #[cfg(test)] - mod test_weights { - use frame_support::weights::constants; - - /// Checks that the weight exists and is sane. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - let w = super::constants::ExtrinsicBaseWeight::get(); - - // At least 10 µs. - assert!( - w.ref_time() >= 10u64 * constants::WEIGHT_REF_TIME_PER_MICROS, - "Weight should be at least 10 µs." - ); - // At most 1 ms. - assert!( - w.ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Weight should be at most 1 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/frame_system.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/frame_system.rs deleted file mode 100644 index 8676be67b2f..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/frame_system.rs +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `frame_system` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=bridge-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=frame_system -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `frame_system`. -pub struct WeightInfo(PhantomData); -impl frame_system::WeightInfo for WeightInfo { - /// The range of component `b` is `[0, 3932160]`. - fn remark(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_047_000 picoseconds. - Weight::from_parts(2_087_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 0 - .saturating_add(Weight::from_parts(390, 0).saturating_mul(b.into())) - } - /// The range of component `b` is `[0, 3932160]`. - fn remark_with_event(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_335_000 picoseconds. - Weight::from_parts(7_507_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 2 - .saturating_add(Weight::from_parts(1_751, 0).saturating_mul(b.into())) - } - /// Storage: `System::Digest` (r:1 w:1) - /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - /// Proof: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - fn set_heap_pages() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `1485` - // Minimum execution time: 3_673_000 picoseconds. - Weight::from_parts(3_953_000, 0) - .saturating_add(Weight::from_parts(0, 1485)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) - /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpgradeRestrictionSignal` (r:1 w:0) - /// Proof: `ParachainSystem::UpgradeRestrictionSignal` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingValidationCode` (r:1 w:1) - /// Proof: `ParachainSystem::PendingValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::NewValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::NewValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::DidSetValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::DidSetValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_code() -> Weight { - // Proof Size summary in bytes: - // Measured: `119` - // Estimated: `1604` - // Minimum execution time: 98_791_992_000 picoseconds. - Weight::from_parts(101_799_041_000, 0) - .saturating_add(Weight::from_parts(0, 1604)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn set_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_144_000 picoseconds. - Weight::from_parts(2_206_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 2_254 - .saturating_add(Weight::from_parts(740_881, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn kill_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_117_000 picoseconds. - Weight::from_parts(2_192_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 1_024 - .saturating_add(Weight::from_parts(558_397, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `p` is `[0, 1000]`. - fn kill_prefix(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `68 + p * (69 ±0)` - // Estimated: `66 + p * (70 ±0)` - // Minimum execution time: 3_907_000 picoseconds. - Weight::from_parts(4_050_000, 0) - .saturating_add(Weight::from_parts(0, 66)) - // Standard Error: 2_228 - .saturating_add(Weight::from_parts(1_212_760, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) - .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/mod.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/mod.rs deleted file mode 100644 index 36733d6d4a6..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/mod.rs +++ /dev/null @@ -1,41 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Expose the auto generated weight files. - -pub mod block_weights; -pub mod cumulus_pallet_dmp_queue; -pub mod cumulus_pallet_parachain_system; -pub mod cumulus_pallet_xcmp_queue; -pub mod extrinsic_weights; -pub mod frame_system; -pub mod pallet_balances; -pub mod pallet_collator_selection; -pub mod pallet_message_queue; -pub mod pallet_multisig; -pub mod pallet_session; -pub mod pallet_timestamp; -pub mod pallet_utility; -pub mod pallet_xcm; -pub mod paritydb_weights; -pub mod rocksdb_weights; -pub mod xcm; - -pub use block_weights::constants::BlockExecutionWeight; -pub use extrinsic_weights::constants::ExtrinsicBaseWeight; -pub use paritydb_weights::constants::ParityDbWeight; -pub use rocksdb_weights::constants::RocksDbWeight; diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_balances.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_balances.rs deleted file mode 100644 index b95ea83585f..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_balances.rs +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_balances` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=bridge-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_balances -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_balances`. -pub struct WeightInfo(PhantomData); -impl pallet_balances::WeightInfo for WeightInfo { - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_allow_death() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 54_518_000 picoseconds. - Weight::from_parts(55_244_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_keep_alive() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 40_152_000 picoseconds. - Weight::from_parts(41_084_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_set_balance_creating() -> Weight { - // Proof Size summary in bytes: - // Measured: `174` - // Estimated: `3593` - // Minimum execution time: 15_234_000 picoseconds. - Weight::from_parts(15_576_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_set_balance_killing() -> Weight { - // Proof Size summary in bytes: - // Measured: `174` - // Estimated: `3593` - // Minimum execution time: 22_173_000 picoseconds. - Weight::from_parts(22_964_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `6196` - // Minimum execution time: 56_636_000 picoseconds. - Weight::from_parts(57_316_000, 0) - .saturating_add(Weight::from_parts(0, 6196)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_all() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 50_829_000 picoseconds. - Weight::from_parts(51_264_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_unreserve() -> Weight { - // Proof Size summary in bytes: - // Measured: `174` - // Estimated: `3593` - // Minimum execution time: 17_887_000 picoseconds. - Weight::from_parts(18_365_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:999 w:999) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `u` is `[1, 1000]`. - fn upgrade_accounts(u: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + u * (136 ±0)` - // Estimated: `990 + u * (2603 ±0)` - // Minimum execution time: 16_754_000 picoseconds. - Weight::from_parts(17_237_000, 0) - .saturating_add(Weight::from_parts(0, 990)) - // Standard Error: 15_088 - .saturating_add(Weight::from_parts(15_392_959, 0).saturating_mul(u.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(u.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(u.into()))) - .saturating_add(Weight::from_parts(0, 2603).saturating_mul(u.into())) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_collator_selection.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_collator_selection.rs deleted file mode 100644 index f7c78f7db82..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_collator_selection.rs +++ /dev/null @@ -1,248 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_collator_selection` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=bridge-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_collator_selection -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_collator_selection`. -pub struct WeightInfo(PhantomData); -impl pallet_collator_selection::WeightInfo for WeightInfo { - /// Storage: `Session::NextKeys` (r:20 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `CollatorSelection::Invulnerables` (r:0 w:1) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 20]`. - fn set_invulnerables(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `196 + b * (79 ±0)` - // Estimated: `1187 + b * (2555 ±0)` - // Minimum execution time: 14_735_000 picoseconds. - Weight::from_parts(11_846_916, 0) - .saturating_add(Weight::from_parts(0, 1187)) - // Standard Error: 8_592 - .saturating_add(Weight::from_parts(3_270_517, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(Weight::from_parts(0, 2555).saturating_mul(b.into())) - } - /// Storage: `Session::NextKeys` (r:1 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:1) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Candidates` (r:1 w:1) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 19]`. - /// The range of component `c` is `[1, 99]`. - fn add_invulnerable(b: u32, c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `757 + b * (32 ±0) + c * (53 ±0)` - // Estimated: `6287 + b * (37 ±0) + c * (53 ±0)` - // Minimum execution time: 48_332_000 picoseconds. - Weight::from_parts(46_158_586, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 13_938 - .saturating_add(Weight::from_parts(174_493, 0).saturating_mul(b.into())) - // Standard Error: 2_642 - .saturating_add(Weight::from_parts(196_691, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - .saturating_add(Weight::from_parts(0, 37).saturating_mul(b.into())) - .saturating_add(Weight::from_parts(0, 53).saturating_mul(c.into())) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:0) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:1) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// The range of component `b` is `[5, 20]`. - fn remove_invulnerable(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `82 + b * (32 ±0)` - // Estimated: `6287` - // Minimum execution time: 15_323_000 picoseconds. - Weight::from_parts(15_016_873, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_970 - .saturating_add(Weight::from_parts(199_160, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `CollatorSelection::DesiredCandidates` (r:0 w:1) - /// Proof: `CollatorSelection::DesiredCandidates` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - fn set_desired_candidates() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_393_000 picoseconds. - Weight::from_parts(7_723_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `CollatorSelection::CandidacyBond` (r:0 w:1) - /// Proof: `CollatorSelection::CandidacyBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - fn set_candidacy_bond(_c: u32, _k: u32) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_426_000 picoseconds. - Weight::from_parts(7_783_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:1) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::DesiredCandidates` (r:1 w:0) - /// Proof: `CollatorSelection::DesiredCandidates` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `Session::NextKeys` (r:1 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `CollatorSelection::CandidacyBond` (r:1 w:0) - /// Proof: `CollatorSelection::CandidacyBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - /// The range of component `c` is `[1, 99]`. - fn register_as_candidate(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `740 + c * (52 ±0)` - // Estimated: `6287 + c * (54 ±0)` - // Minimum execution time: 41_040_000 picoseconds. - Weight::from_parts(43_902_200, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_360 - .saturating_add(Weight::from_parts(211_897, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(2)) - .saturating_add(Weight::from_parts(0, 54).saturating_mul(c.into())) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:1) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - /// The range of component `c` is `[3, 100]`. - fn leave_intent(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `334 + c * (49 ±0)` - // Estimated: `6287` - // Minimum execution time: 33_429_000 picoseconds. - Weight::from_parts(36_413_045, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_947 - .saturating_add(Weight::from_parts(177_461, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - fn update_bond(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `306 + c * (50 ±0)` - // Estimated: `6287` - // Minimum execution time: 34_814_000 picoseconds. - Weight::from_parts(36_371_520, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_391 - .saturating_add(Weight::from_parts(201_700, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - fn take_candidate_slot(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `306 + c * (50 ±0)` - // Estimated: `6287` - // Minimum execution time: 34_814_000 picoseconds. - Weight::from_parts(36_371_520, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_391 - .saturating_add(Weight::from_parts(201_700, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `System::BlockWeight` (r:1 w:1) - /// Proof: `System::BlockWeight` (`max_values`: Some(1), `max_size`: Some(48), added: 543, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - fn note_author() -> Weight { - // Proof Size summary in bytes: - // Measured: `155` - // Estimated: `6196` - // Minimum execution time: 45_300_000 picoseconds. - Weight::from_parts(46_280_000, 0) - .saturating_add(Weight::from_parts(0, 6196)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:0) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:100 w:0) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `System::BlockWeight` (r:1 w:1) - /// Proof: `System::BlockWeight` (`max_values`: Some(1), `max_size`: Some(48), added: 543, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:97 w:97) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 100]`. - /// The range of component `c` is `[1, 100]`. - fn new_session(r: u32, c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `2263 + c * (97 ±0) + r * (115 ±0)` - // Estimated: `6287 + c * (2519 ±0) + r * (2603 ±0)` - // Minimum execution time: 17_524_000 picoseconds. - Weight::from_parts(17_590_000, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 354_091 - .saturating_add(Weight::from_parts(15_829_767, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) - .saturating_add(Weight::from_parts(0, 2519).saturating_mul(c.into())) - .saturating_add(Weight::from_parts(0, 2603).saturating_mul(r.into())) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_message_queue.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_message_queue.rs deleted file mode 100644 index 38cc21cfad9..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_message_queue.rs +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_message_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-03-24, STEPS: `2`, REPEAT: `1`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `i9`, CPU: `13th Gen Intel(R) Core(TM) i9-13900K` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-polkadot-dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/polkadot-parachain -// benchmark -// pallet -// --chain -// bridge-hub-polkadot-dev -// --pallet -// pallet_message_queue -// --extrinsic -// * -// --execution -// wasm -// --wasm-execution -// compiled -// --output -// parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::Weight}; -use sp_std::marker::PhantomData; - -/// Weight functions for `pallet_message_queue`. -pub struct WeightInfo(PhantomData); -impl pallet_message_queue::WeightInfo for WeightInfo { - /// Storage: MessageQueue ServiceHead (r:1 w:0) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: MessageQueue BookStateFor (r:2 w:2) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn ready_ring_knit() -> Weight { - // Proof Size summary in bytes: - // Measured: `189` - // Estimated: `7534` - // Minimum execution time: 38_974_000 picoseconds. - Weight::from_parts(38_974_000, 0) - .saturating_add(Weight::from_parts(0, 7534)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:2 w:2) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - fn ready_ring_unknit() -> Weight { - // Proof Size summary in bytes: - // Measured: `184` - // Estimated: `7534` - // Minimum execution time: 11_194_000 picoseconds. - Weight::from_parts(11_194_000, 0) - .saturating_add(Weight::from_parts(0, 7534)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn service_queue_base() -> Weight { - // Proof Size summary in bytes: - // Measured: `6` - // Estimated: `3517` - // Minimum execution time: 5_196_000 picoseconds. - Weight::from_parts(5_196_000, 0) - .saturating_add(Weight::from_parts(0, 3517)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn service_page_base_completion() -> Weight { - // Proof Size summary in bytes: - // Measured: `72` - // Estimated: `69050` - // Minimum execution time: 6_408_000 picoseconds. - Weight::from_parts(6_408_000, 0) - .saturating_add(Weight::from_parts(0, 69050)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn service_page_base_no_completion() -> Weight { - // Proof Size summary in bytes: - // Measured: `72` - // Estimated: `69050` - // Minimum execution time: 6_354_000 picoseconds. - Weight::from_parts(6_354_000, 0) - .saturating_add(Weight::from_parts(0, 69050)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn service_page_item() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 63_855_000 picoseconds. - Weight::from_parts(63_855_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: MessageQueue BookStateFor (r:1 w:0) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn bump_service_head() -> Weight { - // Proof Size summary in bytes: - // Measured: `99` - // Estimated: `5007` - // Minimum execution time: 6_764_000 picoseconds. - Weight::from_parts(6_764_000, 0) - .saturating_add(Weight::from_parts(0, 5007)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn reap_page() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 40_293_000 picoseconds. - Weight::from_parts(40_293_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn execute_overweight_page_removed() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 50_903_000 picoseconds. - Weight::from_parts(50_903_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn execute_overweight_page_updated() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 96_657_000 picoseconds. - Weight::from_parts(96_657_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_multisig.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_multisig.rs deleted file mode 100644 index 44f3da351f6..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_multisig.rs +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_multisig` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=bridge-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_multisig -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_multisig`. -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 { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 13_284_000 picoseconds. - Weight::from_parts(14_761_699, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 7 - .saturating_add(Weight::from_parts(491, 0).saturating_mul(z.into())) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_create(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `263 + s * (2 ±0)` - // Estimated: `6811` - // Minimum execution time: 44_043_000 picoseconds. - Weight::from_parts(32_303_705, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_280 - .saturating_add(Weight::from_parts(133_233, 0).saturating_mul(s.into())) - // Standard Error: 12 - .saturating_add(Weight::from_parts(1_467, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[3, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_approve(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `6811` - // Minimum execution time: 28_494_000 picoseconds. - Weight::from_parts(19_053_318, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 791 - .saturating_add(Weight::from_parts(112_935, 0).saturating_mul(s.into())) - // Standard Error: 7 - .saturating_add(Weight::from_parts(1_427, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_complete(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `388 + s * (33 ±0)` - // Estimated: `6811` - // Minimum execution time: 49_505_000 picoseconds. - Weight::from_parts(36_407_515, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_595 - .saturating_add(Weight::from_parts(166_201, 0).saturating_mul(s.into())) - // Standard Error: 15 - .saturating_add(Weight::from_parts(1_481, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_create(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `263 + s * (2 ±0)` - // Estimated: `6811` - // Minimum execution time: 30_977_000 picoseconds. - Weight::from_parts(32_222_158, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_872 - .saturating_add(Weight::from_parts(125_197, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_approve(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `282` - // Estimated: `6811` - // Minimum execution time: 17_351_000 picoseconds. - Weight::from_parts(18_130_793, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 902 - .saturating_add(Weight::from_parts(109_485, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn cancel_as_multi(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `454 + s * (1 ±0)` - // Estimated: `6811` - // Minimum execution time: 31_554_000 picoseconds. - Weight::from_parts(33_116_785, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 882 - .saturating_add(Weight::from_parts(119_357, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_session.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_session.rs deleted file mode 100644 index 86ecc787e97..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_session.rs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_session` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=bridge-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_session -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_session`. -pub struct WeightInfo(PhantomData); -impl pallet_session::WeightInfo for WeightInfo { - /// Storage: `Session::NextKeys` (r:1 w:1) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Session::KeyOwner` (r:1 w:1) - /// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn set_keys() -> Weight { - // Proof Size summary in bytes: - // Measured: `297` - // Estimated: `3762` - // Minimum execution time: 16_905_000 picoseconds. - Weight::from_parts(17_310_000, 0) - .saturating_add(Weight::from_parts(0, 3762)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Session::NextKeys` (r:1 w:1) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Session::KeyOwner` (r:0 w:1) - /// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn purge_keys() -> Weight { - // Proof Size summary in bytes: - // Measured: `279` - // Estimated: `3744` - // Minimum execution time: 12_511_000 picoseconds. - Weight::from_parts(13_055_000, 0) - .saturating_add(Weight::from_parts(0, 3744)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_timestamp.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_timestamp.rs deleted file mode 100644 index a0984d72aac..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_timestamp.rs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_timestamp` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=bridge-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_timestamp -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_timestamp`. -pub struct WeightInfo(PhantomData); -impl pallet_timestamp::WeightInfo for WeightInfo { - /// Storage: `Timestamp::Now` (r:1 w:1) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `Aura::CurrentSlot` (r:1 w:0) - /// Proof: `Aura::CurrentSlot` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - fn set() -> Weight { - // Proof Size summary in bytes: - // Measured: `49` - // Estimated: `1493` - // Minimum execution time: 7_675_000 picoseconds. - Weight::from_parts(7_947_000, 0) - .saturating_add(Weight::from_parts(0, 1493)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn on_finalize() -> Weight { - // Proof Size summary in bytes: - // Measured: `57` - // Estimated: `0` - // Minimum execution time: 3_342_000 picoseconds. - Weight::from_parts(3_443_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_utility.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_utility.rs deleted file mode 100644 index 2f04094b347..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_utility.rs +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_utility` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=bridge-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_utility -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_utility`. -pub struct WeightInfo(PhantomData); -impl pallet_utility::WeightInfo for WeightInfo { - /// The range of component `c` is `[0, 1000]`. - fn batch(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_810_000 picoseconds. - Weight::from_parts(6_290_871, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 1_678 - .saturating_add(Weight::from_parts(5_193_419, 0).saturating_mul(c.into())) - } - fn as_derivative() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_753_000 picoseconds. - Weight::from_parts(4_890_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// The range of component `c` is `[0, 1000]`. - fn batch_all(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_873_000 picoseconds. - Weight::from_parts(9_780_422, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 2_035 - .saturating_add(Weight::from_parts(5_473_943, 0).saturating_mul(c.into())) - } - fn dispatch_as() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 8_443_000 picoseconds. - Weight::from_parts(8_904_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// The range of component `c` is `[0, 1000]`. - fn force_batch(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_820_000 picoseconds. - Weight::from_parts(8_206_355, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 1_327 - .saturating_add(Weight::from_parts(5_187_839, 0).saturating_mul(c.into())) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_xcm.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_xcm.rs deleted file mode 100644 index b73c009cbda..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/pallet_xcm.rs +++ /dev/null @@ -1,323 +0,0 @@ -// Copyright (C) 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` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-11-10, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("bridge-hub-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=pallet_xcm -// --chain=bridge-hub-polkadot-dev -// --header=./cumulus/file_header.txt -// --output=./cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_xcm`. -pub struct WeightInfo(PhantomData); -impl pallet_xcm::WeightInfo for WeightInfo { - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn send() -> Weight { - // Proof Size summary in bytes: - // Measured: `38` - // Estimated: `3503` - // Minimum execution time: 22_442_000 picoseconds. - Weight::from_parts(23_346_000, 0) - .saturating_add(Weight::from_parts(0, 3503)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ParachainInfo::ParachainId` (r:1 w:0) - /// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - fn teleport_assets() -> Weight { - // Proof Size summary in bytes: - // Measured: `32` - // Estimated: `1489` - // Minimum execution time: 19_655_000 picoseconds. - Weight::from_parts(20_086_000, 0) - .saturating_add(Weight::from_parts(0, 1489)) - .saturating_add(T::DbWeight::get().reads(1)) - } - /// Storage: `Benchmark::Override` (r:0 w:0) - /// Proof: `Benchmark::Override` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn reserve_transfer_assets() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 18_446_744_073_709_551_000 picoseconds. - Weight::from_parts(18_446_744_073_709_551_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: `Benchmark::Override` (r:0 w:0) - /// Proof: `Benchmark::Override` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn execute() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 18_446_744_073_709_551_000 picoseconds. - Weight::from_parts(18_446_744_073_709_551_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: `PolkadotXcm::SupportedVersion` (r:0 w:1) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_xcm_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_858_000 picoseconds. - Weight::from_parts(7_225_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:0 w:1) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn force_default_xcm_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_099_000 picoseconds. - Weight::from_parts(2_190_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_subscribe_version_notify() -> Weight { - // Proof Size summary in bytes: - // Measured: `38` - // Estimated: `3503` - // Minimum execution time: 27_073_000 picoseconds. - Weight::from_parts(27_584_000, 0) - .saturating_add(Weight::from_parts(0, 3503)) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_unsubscribe_version_notify() -> Weight { - // Proof Size summary in bytes: - // Measured: `255` - // Estimated: `3720` - // Minimum execution time: 29_949_000 picoseconds. - Weight::from_parts(30_760_000, 0) - .saturating_add(Weight::from_parts(0, 3720)) - .saturating_add(T::DbWeight::get().reads(7)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `PolkadotXcm::XcmExecutionSuspended` (r:0 w:1) - /// Proof: `PolkadotXcm::XcmExecutionSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn force_suspension() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_192_000 picoseconds. - Weight::from_parts(2_276_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PolkadotXcm::SupportedVersion` (r:4 w:2) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_supported_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `95` - // Estimated: `10985` - // Minimum execution time: 14_681_000 picoseconds. - Weight::from_parts(15_131_000, 0) - .saturating_add(Weight::from_parts(0, 10985)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_version_notifiers() -> Weight { - // Proof Size summary in bytes: - // Measured: `99` - // Estimated: `10989` - // Minimum execution time: 14_523_000 picoseconds. - Weight::from_parts(15_113_000, 0) - .saturating_add(Weight::from_parts(0, 10989)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:5 w:0) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn already_notified_target() -> Weight { - // Proof Size summary in bytes: - // Measured: `106` - // Estimated: `13471` - // Minimum execution time: 15_989_000 picoseconds. - Weight::from_parts(16_518_000, 0) - .saturating_add(Weight::from_parts(0, 13471)) - .saturating_add(T::DbWeight::get().reads(5)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:2 w:1) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn notify_current_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `106` - // Estimated: `6046` - // Minimum execution time: 25_127_000 picoseconds. - Weight::from_parts(25_773_000, 0) - .saturating_add(Weight::from_parts(0, 6046)) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:3 w:0) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn notify_target_migration_fail() -> Weight { - // Proof Size summary in bytes: - // Measured: `136` - // Estimated: `8551` - // Minimum execution time: 8_352_000 picoseconds. - Weight::from_parts(8_592_000, 0) - .saturating_add(Weight::from_parts(0, 8551)) - .saturating_add(T::DbWeight::get().reads(3)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_version_notify_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `106` - // Estimated: `10996` - // Minimum execution time: 14_658_000 picoseconds. - Weight::from_parts(15_345_000, 0) - .saturating_add(Weight::from_parts(0, 10996)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn migrate_and_notify_old_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `112` - // Estimated: `11002` - // Minimum execution time: 31_478_000 picoseconds. - Weight::from_parts(32_669_000, 0) - .saturating_add(Weight::from_parts(0, 11002)) - .saturating_add(T::DbWeight::get().reads(10)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn new_query() -> Weight { - // Proof Size summary in bytes: - // Measured: `32` - // Estimated: `1517` - // Minimum execution time: 4_066_000 picoseconds. - Weight::from_parts(4_267_000, 0) - .saturating_add(Weight::from_parts(0, 1517)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::Queries` (r:1 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn take_response() -> Weight { - // Proof Size summary in bytes: - // Measured: `7669` - // Estimated: `11134` - // Minimum execution time: 25_260_000 picoseconds. - Weight::from_parts(25_570_000, 0) - .saturating_add(Weight::from_parts(0, 11134)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/paritydb_weights.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/paritydb_weights.rs deleted file mode 100644 index 25679703831..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/paritydb_weights.rs +++ /dev/null @@ -1,63 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, RuntimeDbWeight}, - }; - - parameter_types! { - /// `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_REF_TIME_PER_NANOS, - write: 50_000 * constants::WEIGHT_REF_TIME_PER_NANOS, - }; - } - - #[cfg(test)] - mod test_db_weights { - use super::constants::ParityDbWeight as W; - use frame_support::weights::constants; - - /// Checks that all weights exist and have sane values. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - // At least 1 µs. - assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Read weight should be at least 1 µs." - ); - assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Write weight should be at least 1 µs." - ); - // At most 1 ms. - assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Read weight should be at most 1 ms." - ); - assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Write weight should be at most 1 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/rocksdb_weights.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/rocksdb_weights.rs deleted file mode 100644 index 3dd817aa6f1..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/rocksdb_weights.rs +++ /dev/null @@ -1,63 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, RuntimeDbWeight}, - }; - - parameter_types! { - /// 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_REF_TIME_PER_NANOS, - write: 100_000 * constants::WEIGHT_REF_TIME_PER_NANOS, - }; - } - - #[cfg(test)] - mod test_db_weights { - use super::constants::RocksDbWeight as W; - use frame_support::weights::constants; - - /// Checks that all weights exist and have sane values. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - // At least 1 µs. - assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Read weight should be at least 1 µs." - ); - assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Write weight should be at least 1 µs." - ); - // At most 1 ms. - assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Read weight should be at most 1 ms." - ); - assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Write weight should be at most 1 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/xcm/mod.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/xcm/mod.rs deleted file mode 100644 index 33a48f36812..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/xcm/mod.rs +++ /dev/null @@ -1,244 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -mod pallet_xcm_benchmarks_fungible; -mod pallet_xcm_benchmarks_generic; - -use crate::{xcm_config::MaxAssetsIntoHolding, 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::*, DoubleEncoded}; - -trait WeighMultiAssets { - fn weigh_multi_assets(&self, weight: Weight) -> Weight; -} - -const MAX_ASSETS: u64 = 100; - -impl WeighMultiAssets for MultiAssetFilter { - fn weigh_multi_assets(&self, weight: Weight) -> Weight { - match self { - Self::Definite(assets) => weight.saturating_mul(assets.inner().iter().count() as u64), - Self::Wild(asset) => match asset { - All => weight.saturating_mul(MAX_ASSETS), - AllOf { fun, .. } => match fun { - WildFungibility::Fungible => weight, - // Magic number 2 has to do with the fact that we could have up to 2 times - // MaxAssetsIntoHolding in the worst-case scenario. - WildFungibility::NonFungible => - weight.saturating_mul((MaxAssetsIntoHolding::get() * 2) as u64), - }, - AllCounted(count) => weight.saturating_mul(MAX_ASSETS.min(*count as u64)), - AllOfCounted { count, .. } => weight.saturating_mul(MAX_ASSETS.min(*count as u64)), - }, - } - } -} - -impl WeighMultiAssets for MultiAssets { - fn weigh_multi_assets(&self, weight: Weight) -> Weight { - weight.saturating_mul(self.inner().iter().count() as u64) - } -} - -pub struct BridgeHubPolkadotXcmWeight(core::marker::PhantomData); -impl XcmWeightInfo for BridgeHubPolkadotXcmWeight { - fn withdraw_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::withdraw_asset()) - } - fn reserve_asset_deposited(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::reserve_asset_deposited()) - } - fn receive_teleported_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::receive_teleported_asset()) - } - fn query_response( - _query_id: &u64, - _response: &Response, - _max_weight: &Weight, - _querier: &Option, - ) -> Weight { - XcmGeneric::::query_response() - } - fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::transfer_asset()) - } - fn transfer_reserve_asset( - assets: &MultiAssets, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::transfer_reserve_asset()) - } - fn transact( - _origin_type: &OriginKind, - _require_weight_at_most: &Weight, - _call: &DoubleEncoded, - ) -> Weight { - XcmGeneric::::transact() - } - fn hrmp_new_channel_open_request( - _sender: &u32, - _max_message_size: &u32, - _max_capacity: &u32, - ) -> Weight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn hrmp_channel_accepted(_recipient: &u32) -> Weight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> Weight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn clear_origin() -> Weight { - XcmGeneric::::clear_origin() - } - fn descend_origin(_who: &InteriorMultiLocation) -> Weight { - XcmGeneric::::descend_origin() - } - fn report_error(_query_response_info: &QueryResponseInfo) -> Weight { - XcmGeneric::::report_error() - } - - fn deposit_asset(assets: &MultiAssetFilter, _dest: &MultiLocation) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()) - } - fn deposit_reserve_asset( - assets: &MultiAssetFilter, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) - } - fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets, _maximal: &bool) -> Weight { - Weight::MAX - } - fn initiate_reserve_withdraw( - assets: &MultiAssetFilter, - _reserve: &MultiLocation, - _xcm: &Xcm<()>, - ) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::initiate_reserve_withdraw()) - } - fn initiate_teleport( - assets: &MultiAssetFilter, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> Weight { - assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()) - } - fn report_holding(_response_info: &QueryResponseInfo, _assets: &MultiAssetFilter) -> Weight { - XcmGeneric::::report_holding() - } - fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> Weight { - XcmGeneric::::buy_execution() - } - fn refund_surplus() -> Weight { - XcmGeneric::::refund_surplus() - } - fn set_error_handler(_xcm: &Xcm) -> Weight { - XcmGeneric::::set_error_handler() - } - fn set_appendix(_xcm: &Xcm) -> Weight { - XcmGeneric::::set_appendix() - } - fn clear_error() -> Weight { - XcmGeneric::::clear_error() - } - fn claim_asset(_assets: &MultiAssets, _ticket: &MultiLocation) -> Weight { - XcmGeneric::::claim_asset() - } - fn trap(_code: &u64) -> Weight { - XcmGeneric::::trap() - } - fn subscribe_version(_query_id: &QueryId, _max_response_weight: &Weight) -> Weight { - XcmGeneric::::subscribe_version() - } - fn unsubscribe_version() -> Weight { - XcmGeneric::::unsubscribe_version() - } - fn burn_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmGeneric::::burn_asset()) - } - fn expect_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmGeneric::::expect_asset()) - } - fn expect_origin(_origin: &Option) -> Weight { - XcmGeneric::::expect_origin() - } - fn expect_error(_error: &Option<(u32, XcmError)>) -> Weight { - XcmGeneric::::expect_error() - } - fn expect_transact_status(_transact_status: &MaybeErrorCode) -> Weight { - XcmGeneric::::expect_transact_status() - } - fn query_pallet(_module_name: &Vec, _response_info: &QueryResponseInfo) -> Weight { - XcmGeneric::::query_pallet() - } - fn expect_pallet( - _index: &u32, - _name: &Vec, - _module_name: &Vec, - _crate_major: &u32, - _min_crate_minor: &u32, - ) -> Weight { - XcmGeneric::::expect_pallet() - } - fn report_transact_status(_response_info: &QueryResponseInfo) -> Weight { - XcmGeneric::::report_transact_status() - } - fn clear_transact_status() -> Weight { - XcmGeneric::::clear_transact_status() - } - fn universal_origin(_: &Junction) -> Weight { - Weight::MAX - } - fn export_message(_: &NetworkId, _: &Junctions, _: &Xcm<()>) -> Weight { - Weight::MAX - } - fn lock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn unlock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn note_unlockable(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn request_unlock(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn set_fees_mode(_: &bool) -> Weight { - XcmGeneric::::set_fees_mode() - } - fn set_topic(_topic: &[u8; 32]) -> Weight { - XcmGeneric::::set_topic() - } - fn clear_topic() -> Weight { - XcmGeneric::::clear_topic() - } - fn alias_origin(_: &MultiLocation) -> Weight { - // XCM Executor does not currently support alias origin operations - Weight::MAX - } - fn unpaid_execution(_: &WeightLimit, _: &Option) -> Weight { - XcmGeneric::::unpaid_execution() - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs deleted file mode 100644 index 814c416bd4c..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_xcm_benchmarks::fungible` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-09-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-nbnwcyh-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-polkadot-dev"), DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=pallet_xcm_benchmarks::fungible -// --chain=bridge-hub-polkadot-dev -// --header=./cumulus/file_header.txt -// --template=./cumulus/templates/xcm-bench-template.hbs -// --output=./cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/xcm/ - -#![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 `pallet_xcm_benchmarks::fungible`. -pub struct WeightInfo(PhantomData); -impl WeightInfo { - // Storage: `System::Account` (r:1 w:1) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - pub fn withdraw_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `101` - // Estimated: `3593` - // Minimum execution time: 24_237_000 picoseconds. - Weight::from_parts(24_697_000, 3593) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - // Storage: `System::Account` (r:2 w:2) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - pub fn transfer_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `153` - // Estimated: `6196` - // Minimum execution time: 52_269_000 picoseconds. - Weight::from_parts(53_848_000, 6196) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - // Storage: `System::Account` (r:2 w:2) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn transfer_reserve_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `223` - // Estimated: `6196` - // Minimum execution time: 77_611_000 picoseconds. - Weight::from_parts(82_634_000, 6196) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(4)) - } - // Storage: `Benchmark::Override` (r:0 w:0) - // Proof: `Benchmark::Override` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub fn reserve_asset_deposited() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 18_446_744_073_709_551_000 picoseconds. - Weight::from_parts(18_446_744_073_709_551_000, 0) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn initiate_reserve_withdraw() -> Weight { - // Proof Size summary in bytes: - // Measured: `70` - // Estimated: `3535` - // Minimum execution time: 29_506_000 picoseconds. - Weight::from_parts(30_269_000, 3535) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - pub fn receive_teleported_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_541_000 picoseconds. - Weight::from_parts(3_629_000, 0) - } - // Storage: `System::Account` (r:1 w:1) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - pub fn deposit_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `52` - // Estimated: `3593` - // Minimum execution time: 25_651_000 picoseconds. - Weight::from_parts(26_078_000, 3593) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - // Storage: `System::Account` (r:1 w:1) - // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn deposit_reserve_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `122` - // Estimated: `3593` - // Minimum execution time: 52_050_000 picoseconds. - Weight::from_parts(53_293_000, 3593) - .saturating_add(T::DbWeight::get().reads(7)) - .saturating_add(T::DbWeight::get().writes(3)) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn initiate_teleport() -> Weight { - // Proof Size summary in bytes: - // Measured: `70` - // Estimated: `3535` - // Minimum execution time: 30_009_000 picoseconds. - Weight::from_parts(30_540_000, 3535) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/xcm/pallet_xcm_benchmarks_generic.rs deleted file mode 100644 index 9a039a6d63b..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ /dev/null @@ -1,328 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_xcm_benchmarks::generic` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("bridge-hub-polkadot-dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --template=./templates/xcm-bench-template.hbs -// --chain=bridge-hub-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_xcm_benchmarks::generic -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/bridge-hubs/bridge-hub-polkadot/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::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) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn report_holding() -> Weight { - // Proof Size summary in bytes: - // Measured: `70` - // Estimated: `3535` - // Minimum execution time: 30_923_000 picoseconds. - Weight::from_parts(31_653_000, 3535) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - pub fn buy_execution() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_837_000 picoseconds. - Weight::from_parts(2_932_000, 0) - } - // Storage: `PolkadotXcm::Queries` (r:1 w:0) - // Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub fn query_response() -> Weight { - // Proof Size summary in bytes: - // Measured: `32` - // Estimated: `3497` - // Minimum execution time: 10_319_000 picoseconds. - Weight::from_parts(10_614_000, 3497) - .saturating_add(T::DbWeight::get().reads(1)) - } - pub fn transact() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 11_466_000 picoseconds. - Weight::from_parts(12_005_000, 0) - } - pub fn refund_surplus() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_039_000 picoseconds. - Weight::from_parts(3_125_000, 0) - } - pub fn set_error_handler() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_655_000 picoseconds. - Weight::from_parts(2_717_000, 0) - } - pub fn set_appendix() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_655_000 picoseconds. - Weight::from_parts(2_695_000, 0) - } - pub fn clear_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_612_000 picoseconds. - Weight::from_parts(2_685_000, 0) - } - pub fn descend_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_286_000 picoseconds. - Weight::from_parts(3_425_000, 0) - } - pub fn clear_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_613_000 picoseconds. - Weight::from_parts(2_699_000, 0) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn report_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `70` - // Estimated: `3535` - // Minimum execution time: 24_616_000 picoseconds. - Weight::from_parts(25_147_000, 3535) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - // Storage: `PolkadotXcm::AssetTraps` (r:1 w:1) - // Proof: `PolkadotXcm::AssetTraps` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub fn claim_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `90` - // Estimated: `3555` - // Minimum execution time: 14_511_000 picoseconds. - Weight::from_parts(14_831_000, 3555) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - pub fn trap() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_640_000 picoseconds. - Weight::from_parts(2_702_000, 0) - } - // Storage: `PolkadotXcm::VersionNotifyTargets` (r:1 w:1) - // Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn subscribe_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `38` - // Estimated: `3503` - // Minimum execution time: 26_044_000 picoseconds. - Weight::from_parts(26_561_000, 3503) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(3)) - } - // Storage: `PolkadotXcm::VersionNotifyTargets` (r:0 w:1) - // Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub fn unsubscribe_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_568_000 picoseconds. - Weight::from_parts(4_764_000, 0) - .saturating_add(T::DbWeight::get().writes(1)) - } - pub fn burn_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_953_000 picoseconds. - Weight::from_parts(4_079_000, 0) - } - pub fn expect_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_793_000 picoseconds. - Weight::from_parts(2_914_000, 0) - } - pub fn expect_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_719_000 picoseconds. - Weight::from_parts(2_829_000, 0) - } - pub fn expect_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_710_000 picoseconds. - Weight::from_parts(2_824_000, 0) - } - pub fn expect_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_941_000 picoseconds. - Weight::from_parts(3_201_000, 0) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn query_pallet() -> Weight { - // Proof Size summary in bytes: - // Measured: `70` - // Estimated: `3535` - // Minimum execution time: 28_080_000 picoseconds. - Weight::from_parts(28_920_000, 3535) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - pub fn expect_pallet() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_752_000 picoseconds. - Weight::from_parts(4_982_000, 0) - } - // Storage: `ParachainInfo::ParachainId` (r:1 w:0) - // Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - // Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - // Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - // Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - // Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - // Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - // Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub fn report_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `70` - // Estimated: `3535` - // Minimum execution time: 24_810_000 picoseconds. - Weight::from_parts(25_270_000, 3535) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - pub fn clear_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_676_000 picoseconds. - Weight::from_parts(2_780_000, 0) - } - pub fn set_topic() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_624_000 picoseconds. - Weight::from_parts(2_710_000, 0) - } - pub fn clear_topic() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_611_000 picoseconds. - Weight::from_parts(2_707_000, 0) - } - pub fn set_fees_mode() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_653_000 picoseconds. - Weight::from_parts(2_740_000, 0) - } - pub fn unpaid_execution() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_821_000 picoseconds. - Weight::from_parts(2_874_000, 0) - } -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/xcm_config.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/xcm_config.rs deleted file mode 100644 index 61eee1c4c5a..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/xcm_config.rs +++ /dev/null @@ -1,284 +0,0 @@ -// Copyright (C) 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 super::{ - AccountId, AllPalletsWithSystem, Balances, ParachainInfo, ParachainSystem, PolkadotXcm, - Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, TransactionByteFee, WeightToFee, XcmpQueue, - CENTS, -}; -use frame_support::{ - match_types, parameter_types, - traits::{ConstU32, Contains, Everything, Nothing}, -}; -use frame_system::EnsureRoot; -use pallet_xcm::XcmPassthrough; -use parachains_common::{impls::ToStakingPot, xcm_config::ConcreteAssetFromSystem}; -use polkadot_parachain_primitives::primitives::Sibling; -use polkadot_runtime_common::xcm_sender::ExponentialPrice; -use xcm::latest::prelude::*; -use xcm_builder::{ - AccountId32Aliases, AllowExplicitUnpaidExecutionFrom, AllowKnownQueryResponses, - AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, CurrencyAdapter, - DenyReserveTransferToRelayChain, DenyThenTry, EnsureXcmOrigin, IsConcrete, ParentAsSuperuser, - ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia, - SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, - TrailingSetTopicAsId, UsingComponents, WeightInfoBounds, WithComputedOrigin, WithUniqueTopic, -}; -use xcm_executor::{traits::WithOriginFilter, XcmExecutor}; - -parameter_types! { - pub const DotRelayLocation: MultiLocation = MultiLocation::parent(); - pub const RelayNetwork: Option = Some(NetworkId::Polkadot); - pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); - pub UniversalLocation: InteriorMultiLocation = - X2(GlobalConsensus(RelayNetwork::get().unwrap()), Parachain(ParachainInfo::parachain_id().into())); - pub const MaxInstructions: u32 = 100; - pub const MaxAssetsIntoHolding: u32 = 64; - pub FellowshipLocation: MultiLocation = MultiLocation::new(1, Parachain(1001)); - pub const GovernanceLocation: MultiLocation = MultiLocation::parent(); -} - -/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used -/// when determining ownership of accounts for asset transacting and when attempting to use XCM -/// `Transact` in order to determine the dispatch Origin. -pub type LocationToAccountId = ( - // The parent (Relay-chain) origin converts to the parent `AccountId`. - ParentIsPreset, - // Sibling parachain origins convert to AccountId via the `ParaId::into`. - SiblingParachainConvertsVia, - // Straight up local `AccountId32` origins just alias directly to `AccountId`. - AccountId32Aliases, -); - -/// Means for transacting the native currency on this chain. -pub type CurrencyTransactor = CurrencyAdapter< - // Use this currency: - Balances, - // Use this currency when it is a fungible asset matching the given location or name: - IsConcrete, - // Do a simple punn to convert an AccountId32 MultiLocation into a native chain account ID: - LocationToAccountId, - // Our chain's account ID type (we can't get away without mentioning it explicitly): - AccountId, - // We don't track any teleports of `Balances`. - (), ->; - -/// 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 -/// biases the kind of local `Origin` it will become. -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, - // Native converter for Relay-chain (Parent) location; will converts to a `Relay` origin when - // recognized. - RelayChainAsNative, - // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when - // recognized. - SiblingParachainAsNative, - // Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a - // transaction from the Root origin. - ParentAsSuperuser, - // Native signed account converter; this just converts an `AccountId32` origin into a normal - // `RuntimeOrigin::Signed` origin of the same 32-byte value. - SignedAccountId32AsNative, - // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. - XcmPassthrough, -); - -match_types! { - pub type ParentOrParentsPlurality: impl Contains = { - MultiLocation { parents: 1, interior: Here } | - MultiLocation { parents: 1, interior: X1(Plurality { .. }) } - }; - pub type ParentOrSiblings: impl Contains = { - MultiLocation { parents: 1, interior: Here } | - MultiLocation { parents: 1, interior: X1(_) } - }; - pub type FellowsPlurality: impl Contains = { - MultiLocation { parents: 1, interior: X2(Parachain(1001), Plurality { id: BodyId::Technical, ..}) } - }; -} -/// A call filter for the XCM Transact instruction. This is a temporary measure until we properly -/// account for proof size weights. -/// -/// Calls that are allowed through this filter must: -/// 1. Have a fixed weight; -/// 2. Cannot lead to another call being made; -/// 3. Have a defined proof size weight, e.g. no unbounded vecs in call parameters. -pub struct SafeCallFilter; -impl Contains for SafeCallFilter { - fn contains(call: &RuntimeCall) -> bool { - #[cfg(feature = "runtime-benchmarks")] - { - if matches!(call, RuntimeCall::System(frame_system::Call::remark_with_event { .. })) { - return true - } - } - - matches!( - call, - RuntimeCall::PolkadotXcm(pallet_xcm::Call::force_xcm_version { .. }) | - RuntimeCall::System( - frame_system::Call::set_heap_pages { .. } | - frame_system::Call::set_code { .. } | - frame_system::Call::set_code_without_checks { .. } | - frame_system::Call::kill_prefix { .. }, - ) | RuntimeCall::ParachainSystem(..) | - RuntimeCall::Timestamp(..) | - RuntimeCall::Balances(..) | - RuntimeCall::CollatorSelection( - pallet_collator_selection::Call::set_desired_candidates { .. } | - pallet_collator_selection::Call::set_candidacy_bond { .. } | - pallet_collator_selection::Call::register_as_candidate { .. } | - pallet_collator_selection::Call::leave_intent { .. } | - pallet_collator_selection::Call::set_invulnerables { .. } | - pallet_collator_selection::Call::add_invulnerable { .. } | - pallet_collator_selection::Call::remove_invulnerable { .. }, - ) | RuntimeCall::Session(pallet_session::Call::purge_keys { .. }) | - RuntimeCall::XcmpQueue(..) | - RuntimeCall::MessageQueue(..) - ) - } -} - -pub type Barrier = TrailingSetTopicAsId< - DenyThenTry< - DenyReserveTransferToRelayChain, - ( - // Allow local users to buy weight credit. - TakeWeightCredit, - // Expected responses are OK. - AllowKnownQueryResponses, - WithComputedOrigin< - ( - // If the message is one that immediately attempts to pay for execution, then - // allow it. - AllowTopLevelPaidExecutionFrom, - // Parent, its pluralities (i.e. governance bodies), and the Fellows plurality - // get free execution. - AllowExplicitUnpaidExecutionFrom<(ParentOrParentsPlurality, FellowsPlurality)>, - // Subscriptions for version tracking are OK. - AllowSubscriptionsFrom, - ), - UniversalLocation, - ConstU32<8>, - >, - ), - >, ->; - -/// Cases where a remote origin is accepted as trusted Teleporter for a given asset: -/// - DOT with the parent Relay Chain and sibling parachains. -pub type TrustedTeleporters = ConcreteAssetFromSystem; - -pub struct XcmConfig; -impl xcm_executor::Config for XcmConfig { - type RuntimeCall = RuntimeCall; - type XcmSender = XcmRouter; - type AssetTransactor = CurrencyTransactor; - type OriginConverter = XcmOriginToTransactDispatchOrigin; - // BridgeHub 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 = TrustedTeleporters; - type UniversalLocation = UniversalLocation; - type Barrier = Barrier; - type Weigher = WeightInfoBounds< - crate::weights::xcm::BridgeHubPolkadotXcmWeight, - RuntimeCall, - MaxInstructions, - >; - type Trader = - UsingComponents>; - type ResponseHandler = PolkadotXcm; - type AssetTrap = PolkadotXcm; - type AssetClaims = PolkadotXcm; - type SubscriptionService = PolkadotXcm; - type PalletInstancesInfo = AllPalletsWithSystem; - type MaxAssetsIntoHolding = MaxAssetsIntoHolding; - type AssetLocker = (); - type AssetExchanger = (); - type FeeManager = (); - type MessageExporter = (); - type UniversalAliases = Nothing; - type CallDispatcher = WithOriginFilter; - type SafeCallFilter = SafeCallFilter; - type Aliasers = Nothing; -} - -/// Converts a local signed origin into an XCM multilocation. -/// Forms the basis for local origins sending/executing XCMs. -pub type LocalOriginToLocation = SignedToAccountId32; - -parameter_types! { - /// The asset ID for the asset that we use to pay for message delivery fees. - pub FeeAssetId: AssetId = Concrete(DotRelayLocation::get()); - /// The base fee for the message delivery fees. - pub const BaseDeliveryFee: u128 = CENTS.saturating_mul(3); -} - -pub type PriceForParentDelivery = - ExponentialPrice; - -/// The means for routing XCM messages which are not for local execution into the right message -/// queues. -pub type XcmRouter = WithUniqueTopic<( - // Two routers - use UMP to communicate with the relay chain: - cumulus_primitives_utility::ParentAsUmp, - // ..and XCMP to communicate with the sibling chains. - XcmpQueue, -)>; - -impl pallet_xcm::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - // We want to disallow users sending (arbitrary) XCMs from this chain. - type SendXcmOrigin = EnsureXcmOrigin; - type XcmRouter = XcmRouter; - // We support local origins dispatching XCM executions in principle... - type ExecuteXcmOrigin = EnsureXcmOrigin; - // ... but disallow generic XCM execution. As a result only teleports are allowed. - type XcmExecuteFilter = Nothing; - type XcmExecutor = XcmExecutor; - type XcmTeleportFilter = Everything; - type XcmReserveTransferFilter = Nothing; // This parachain is not meant as a reserve location. - type Weigher = WeightInfoBounds< - crate::weights::xcm::BridgeHubPolkadotXcmWeight, - RuntimeCall, - MaxInstructions, - >; - type UniversalLocation = UniversalLocation; - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - 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>; - type WeightInfo = crate::weights::pallet_xcm::WeightInfo; - type AdminOrigin = EnsureRoot; - type MaxRemoteLockConsumers = ConstU32<0>; - type RemoteLockConsumerIdentifier = (); -} - -impl cumulus_pallet_xcm::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type XcmExecutor = XcmExecutor; -} diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/tests/tests.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/tests/tests.rs deleted file mode 100644 index 3156a5fe68e..00000000000 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-polkadot/tests/tests.rs +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (C) 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 . - -pub use bridge_hub_polkadot_runtime::{ - xcm_config::XcmConfig, AllPalletsWithoutSystem, Balances, ExistentialDeposit, ParachainSystem, - PolkadotXcm, Runtime, RuntimeEvent, SessionKeys, -}; -use codec::Decode; -use frame_support::parameter_types; -use parachains_common::{polkadot::fee::WeightToFee, AccountId, AuraId}; - -const ALICE: [u8; 32] = [1u8; 32]; - -parameter_types! { - pub CheckingAccount: AccountId = PolkadotXcm::check_account(); -} - -bridge_hub_test_utils::test_cases::include_teleports_for_native_asset_works!( - Runtime, - AllPalletsWithoutSystem, - XcmConfig, - CheckingAccount, - WeightToFee, - ParachainSystem, - bridge_hub_test_utils::CollatorSessionKeys::new( - AccountId::from(ALICE), - AccountId::from(ALICE), - SessionKeys { aura: AuraId::from(sp_core::sr25519::Public::from_raw(ALICE)) } - ), - ExistentialDeposit::get(), - Box::new(|runtime_event_encoded: Vec| { - match RuntimeEvent::decode(&mut &runtime_event_encoded[..]) { - Ok(RuntimeEvent::PolkadotXcm(event)) => Some(event), - _ => None, - } - }), - 1002 -); diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml b/cumulus/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml deleted file mode 100644 index ca83b84cd8f..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml +++ /dev/null @@ -1,226 +0,0 @@ -[package] -name = "collectives-polkadot-runtime" -version = "1.0.0" -authors.workspace = true -edition.workspace = true -description = "Polkadot Collectives Parachain Runtime" -license = "Apache-2.0" - -[dependencies] -codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } -hex-literal = { version = "0.4.1" } -log = { version = "0.4.20", default-features = false } -scale-info = { version = "2.10.0", default-features = false, features = ["derive"] } -smallvec = "1.11.0" - -# Substrate -frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true} -frame-executive = { path = "../../../../../substrate/frame/executive", default-features = false} -frame-support = { path = "../../../../../substrate/frame/support", default-features = false} -frame-system = { path = "../../../../../substrate/frame/system", default-features = false} -frame-system-benchmarking = { path = "../../../../../substrate/frame/system/benchmarking", default-features = false, optional = true} -frame-system-rpc-runtime-api = { path = "../../../../../substrate/frame/system/rpc/runtime-api", default-features = false} -frame-try-runtime = { path = "../../../../../substrate/frame/try-runtime", default-features = false, optional = true} -pallet-alliance = { path = "../../../../../substrate/frame/alliance", default-features = false} -pallet-aura = { path = "../../../../../substrate/frame/aura", default-features = false} -pallet-authorship = { path = "../../../../../substrate/frame/authorship", default-features = false} -pallet-balances = { path = "../../../../../substrate/frame/balances", default-features = false} -pallet-collective = { path = "../../../../../substrate/frame/collective", default-features = false} -pallet-multisig = { path = "../../../../../substrate/frame/multisig", default-features = false} -pallet-preimage = { path = "../../../../../substrate/frame/preimage", default-features = false } -pallet-proxy = { path = "../../../../../substrate/frame/proxy", default-features = false} -pallet-scheduler = { path = "../../../../../substrate/frame/scheduler", default-features = false } -pallet-session = { path = "../../../../../substrate/frame/session", default-features = false} -pallet-timestamp = { path = "../../../../../substrate/frame/timestamp", default-features = false} -pallet-transaction-payment = { path = "../../../../../substrate/frame/transaction-payment", default-features = false} -pallet-transaction-payment-rpc-runtime-api = { path = "../../../../../substrate/frame/transaction-payment/rpc/runtime-api", default-features = false} -pallet-utility = { path = "../../../../../substrate/frame/utility", default-features = false} -pallet-referenda = { path = "../../../../../substrate/frame/referenda", default-features = false} -pallet-ranked-collective = { path = "../../../../../substrate/frame/ranked-collective", default-features = false} -pallet-core-fellowship = { path = "../../../../../substrate/frame/core-fellowship", default-features = false} -pallet-salary = { path = "../../../../../substrate/frame/salary", default-features = false} -sp-api = { path = "../../../../../substrate/primitives/api", default-features = false} -sp-arithmetic = { path = "../../../../../substrate/primitives/arithmetic", default-features = false } -sp-block-builder = { path = "../../../../../substrate/primitives/block-builder", default-features = false} -sp-consensus-aura = { path = "../../../../../substrate/primitives/consensus/aura", default-features = false} -sp-core = { path = "../../../../../substrate/primitives/core", default-features = false} -sp-genesis-builder = { path = "../../../../../substrate/primitives/genesis-builder", default-features = false } -sp-inherents = { path = "../../../../../substrate/primitives/inherents", default-features = false} -sp-offchain = { path = "../../../../../substrate/primitives/offchain", default-features = false} -sp-runtime = { path = "../../../../../substrate/primitives/runtime", default-features = false} -sp-session = { path = "../../../../../substrate/primitives/session", default-features = false} -sp-std = { path = "../../../../../substrate/primitives/std", default-features = false} -sp-storage = { path = "../../../../../substrate/primitives/storage", default-features = false} -sp-transaction-pool = { path = "../../../../../substrate/primitives/transaction-pool", default-features = false} -sp-version = { path = "../../../../../substrate/primitives/version", default-features = false} - -# Polkadot -pallet-xcm = { path = "../../../../../polkadot/xcm/pallet-xcm", default-features = false} -polkadot-core-primitives = { path = "../../../../../polkadot/core-primitives", default-features = false} -polkadot-parachain-primitives = { path = "../../../../../polkadot/parachain", default-features = false} -polkadot-runtime-common = { path = "../../../../../polkadot/runtime/common", default-features = false} -xcm = { package = "staging-xcm", path = "../../../../../polkadot/xcm", default-features = false} -xcm-builder = { package = "staging-xcm-builder", path = "../../../../../polkadot/xcm/xcm-builder", default-features = false} -xcm-executor = { package = "staging-xcm-executor", path = "../../../../../polkadot/xcm/xcm-executor", default-features = false} - -# Cumulus -cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } -pallet-message-queue = { path = "../../../../../substrate/frame/message-queue", default-features = false } -cumulus-pallet-dmp-queue = { path = "../../../../pallets/dmp-queue", default-features = false } -cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = ["parameterized-consensus-hook",] } -cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false} -cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } -cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } -cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } -cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } -pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } -pallet-collective-content = { path = "../../../pallets/collective-content", default-features = false } -parachain-info = { package = "staging-parachain-info", path = "../../../pallets/parachain-info", default-features = false } -parachains-common = { path = "../../../common", default-features = false } - -[build-dependencies] -substrate-wasm-builder = { path = "../../../../../substrate/utils/wasm-builder", optional = true } - -[dev-dependencies] -sp-io = { path = "../../../../../substrate/primitives/io", default-features = false} - -[features] -default = [ "std" ] -runtime-benchmarks = [ - "cumulus-pallet-dmp-queue/runtime-benchmarks", - "cumulus-pallet-parachain-system/runtime-benchmarks", - "cumulus-pallet-session-benchmarking/runtime-benchmarks", - "cumulus-pallet-xcmp-queue/runtime-benchmarks", - "cumulus-primitives-core/runtime-benchmarks", - "cumulus-primitives-utility/runtime-benchmarks", - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system-benchmarking/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "pallet-alliance/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "pallet-collator-selection/runtime-benchmarks", - "pallet-collective-content/runtime-benchmarks", - "pallet-collective/runtime-benchmarks", - "pallet-core-fellowship/runtime-benchmarks", - "pallet-message-queue/runtime-benchmarks", - "pallet-multisig/runtime-benchmarks", - "pallet-preimage/runtime-benchmarks", - "pallet-proxy/runtime-benchmarks", - "pallet-ranked-collective/runtime-benchmarks", - "pallet-referenda/runtime-benchmarks", - "pallet-salary/runtime-benchmarks", - "pallet-scheduler/runtime-benchmarks", - "pallet-timestamp/runtime-benchmarks", - "pallet-utility/runtime-benchmarks", - "pallet-xcm/runtime-benchmarks", - "parachains-common/runtime-benchmarks", - "polkadot-parachain-primitives/runtime-benchmarks", - "polkadot-runtime-common/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "xcm-builder/runtime-benchmarks", - "xcm-executor/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-support/try-runtime", - "frame-system/try-runtime", - "frame-try-runtime/try-runtime", - "pallet-alliance/try-runtime", - "pallet-aura/try-runtime", - "pallet-authorship/try-runtime", - "pallet-balances/try-runtime", - "pallet-collator-selection/try-runtime", - "pallet-collective-content/try-runtime", - "pallet-collective/try-runtime", - "pallet-core-fellowship/try-runtime", - "pallet-message-queue/try-runtime", - "pallet-multisig/try-runtime", - "pallet-preimage/try-runtime", - "pallet-proxy/try-runtime", - "pallet-ranked-collective/try-runtime", - "pallet-referenda/try-runtime", - "pallet-salary/try-runtime", - "pallet-scheduler/try-runtime", - "pallet-session/try-runtime", - "pallet-timestamp/try-runtime", - "pallet-transaction-payment/try-runtime", - "pallet-utility/try-runtime", - "pallet-xcm/try-runtime", - "parachain-info/try-runtime", - "polkadot-runtime-common/try-runtime", - "sp-runtime/try-runtime", -] -std = [ - "codec/std", - "cumulus-pallet-aura-ext/std", - "cumulus-pallet-dmp-queue/std", - "cumulus-pallet-parachain-system/std", - "cumulus-pallet-session-benchmarking/std", - "cumulus-pallet-xcm/std", - "cumulus-pallet-xcmp-queue/std", - "cumulus-primitives-core/std", - "cumulus-primitives-utility/std", - "frame-benchmarking?/std", - "frame-executive/std", - "frame-support/std", - "frame-system-benchmarking?/std", - "frame-system-rpc-runtime-api/std", - "frame-system/std", - "frame-try-runtime?/std", - "log/std", - "pallet-alliance/std", - "pallet-aura/std", - "pallet-authorship/std", - "pallet-balances/std", - "pallet-collator-selection/std", - "pallet-collective-content/std", - "pallet-collective/std", - "pallet-core-fellowship/std", - "pallet-message-queue/std", - "pallet-multisig/std", - "pallet-preimage/std", - "pallet-proxy/std", - "pallet-ranked-collective/std", - "pallet-referenda/std", - "pallet-salary/std", - "pallet-scheduler/std", - "pallet-session/std", - "pallet-timestamp/std", - "pallet-transaction-payment-rpc-runtime-api/std", - "pallet-transaction-payment/std", - "pallet-utility/std", - "pallet-xcm/std", - "parachain-info/std", - "parachains-common/std", - "polkadot-core-primitives/std", - "polkadot-parachain-primitives/std", - "polkadot-runtime-common/std", - "scale-info/std", - "sp-api/std", - "sp-arithmetic/std", - "sp-block-builder/std", - "sp-consensus-aura/std", - "sp-core/std", - "sp-genesis-builder/std", - "sp-inherents/std", - "sp-io/std", - "sp-offchain/std", - "sp-runtime/std", - "sp-session/std", - "sp-std/std", - "sp-storage/std", - "sp-transaction-pool/std", - "sp-version/std", - "substrate-wasm-builder", - "xcm-builder/std", - "xcm-executor/std", - "xcm/std", -] - -experimental = [ "pallet-aura/experimental" ] diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/build.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/build.rs deleted file mode 100644 index 60f8a125129..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/build.rs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#[cfg(feature = "std")] -fn main() { - substrate_wasm_builder::WasmBuilder::new() - .with_current_project() - .export_heap_base() - .import_memory() - .build() -} - -#[cfg(not(feature = "std"))] -fn main() {} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/ambassador/mod.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/ambassador/mod.rs deleted file mode 100644 index b055ffc8abf..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/ambassador/mod.rs +++ /dev/null @@ -1,255 +0,0 @@ -// Copyright (C) 2022 Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! The Ambassador Program. -//! -//! The module defines the following on-chain functionality of the Ambassador Program: -//! -//! - Managed set of program members, where every member has a [rank](ranks) -//! (via [AmbassadorCollective](pallet_ranked_collective)). -//! - Referendum functionality for the program members to propose, vote on, and execute -//! proposals on behalf of the members of a certain [rank](Origin) -//! (via [AmbassadorReferenda](pallet_referenda)). -//! - Managed content (charter, announcements) (via [pallet_collective_content]). -//! - Promotion and demotion periods, register of members' activity, and rank based salaries -//! (via [AmbassadorCore](pallet_core_fellowship)). -//! - Members' salaries (via [AmbassadorSalary](pallet_salary), requiring a member to be -//! imported or inducted into [AmbassadorCore](pallet_core_fellowship)). - -pub mod origins; -mod tracks; - -use super::*; -use crate::xcm_config::{DotAssetHub, FellowshipAdminBodyId}; -use frame_support::traits::{EitherOf, MapSuccess, TryMapSuccess}; -pub use origins::pallet_origins as pallet_ambassador_origins; -use origins::pallet_origins::{ - EnsureAmbassadorsVoice, EnsureAmbassadorsVoiceFrom, EnsureHeadAmbassadorsVoice, Origin, -}; -use parachains_common::polkadot::account; -use sp_core::ConstU128; -use sp_runtime::traits::{CheckedReduceBy, ConstU16, ConvertToValue, Replace}; -use xcm::prelude::*; -use xcm_builder::{AliasesIntoAccountId32, PayOverXcm}; - -/// The Ambassador Program's member ranks. -pub mod ranks { - use pallet_ranked_collective::Rank; - - #[allow(dead_code)] - pub const CANDIDATE: Rank = 0; - pub const AMBASSADOR_TIER_1: Rank = 1; - pub const AMBASSADOR_TIER_2: Rank = 2; - pub const SENIOR_AMBASSADOR_TIER_3: Rank = 3; - pub const SENIOR_AMBASSADOR_TIER_4: Rank = 4; - pub const HEAD_AMBASSADOR_TIER_5: Rank = 5; - pub const HEAD_AMBASSADOR_TIER_6: Rank = 6; - pub const HEAD_AMBASSADOR_TIER_7: Rank = 7; - pub const MASTER_AMBASSADOR_TIER_8: Rank = 8; - pub const MASTER_AMBASSADOR_TIER_9: Rank = 9; -} - -impl pallet_ambassador_origins::Config for Runtime {} - -pub type AmbassadorCollectiveInstance = pallet_ranked_collective::Instance2; - -/// Demotion is by any of: -/// - Root can promote arbitrarily. -/// - the FellowshipAdmin origin (i.e. token holder referendum); -/// - a senior members vote by the rank two above the current rank. -pub type DemoteOrigin = EitherOf< - frame_system::EnsureRootWithSuccess>, - EitherOf< - MapSuccess< - EnsureXcm>, - Replace>, - >, - TryMapSuccess< - EnsureAmbassadorsVoiceFrom>, - CheckedReduceBy>, - >, - >, ->; - -/// Promotion and approval (rank-retention) is by any of: -/// - Root can promote arbitrarily. -/// - the FellowshipAdmin origin (i.e. token holder referendum); -/// - a senior members vote by the rank two above the new/current rank. -/// - a member of rank `5` or above can add a candidate (rank `0`). -pub type PromoteOrigin = EitherOf< - DemoteOrigin, - TryMapSuccess< - pallet_ranked_collective::EnsureMember< - Runtime, - AmbassadorCollectiveInstance, - { ranks::HEAD_AMBASSADOR_TIER_5 }, - >, - Replace>, - >, ->; - -impl pallet_ranked_collective::Config for Runtime { - type WeightInfo = weights::pallet_ranked_collective_ambassador_collective::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type PromoteOrigin = PromoteOrigin; - type DemoteOrigin = DemoteOrigin; - type Polls = AmbassadorReferenda; - type MinRankOfClass = sp_runtime::traits::Identity; - type VoteWeight = pallet_ranked_collective::Linear; -} - -parameter_types! { - pub const AlarmInterval: BlockNumber = 1; - pub const SubmissionDeposit: Balance = 0; - pub const UndecidingTimeout: BlockNumber = 7 * DAYS; - // The Ambassador Referenda pallet account, used as a temporarily place to deposit a slashed imbalance before teleport to the treasury. - pub AmbassadorPalletAccount: AccountId = account::AMBASSADOR_REFERENDA_PALLET_ID.into_account_truncating(); -} - -pub type AmbassadorReferendaInstance = pallet_referenda::Instance2; - -impl pallet_referenda::Config for Runtime { - type WeightInfo = weights::pallet_referenda_ambassador_referenda::WeightInfo; - type RuntimeCall = RuntimeCall; - type RuntimeEvent = RuntimeEvent; - type Scheduler = Scheduler; - type Currency = Balances; - // A proposal can be submitted by a member of the Ambassador Program of - // [ranks::SENIOR_AMBASSADOR_TIER_3] rank or higher. - type SubmitOrigin = pallet_ranked_collective::EnsureMember< - Runtime, - AmbassadorCollectiveInstance, - { ranks::SENIOR_AMBASSADOR_TIER_3 }, - >; - type CancelOrigin = EitherOf, EnsureHeadAmbassadorsVoice>; - type KillOrigin = EitherOf, EnsureHeadAmbassadorsVoice>; - type Slash = ToParentTreasury; - type Votes = pallet_ranked_collective::Votes; - type Tally = pallet_ranked_collective::TallyOf; - type SubmissionDeposit = SubmissionDeposit; - type MaxQueued = ConstU32<20>; - type UndecidingTimeout = UndecidingTimeout; - type AlarmInterval = AlarmInterval; - type Tracks = tracks::TracksInfo; - type Preimages = Preimage; -} - -parameter_types! { - pub const AnnouncementLifetime: BlockNumber = 180 * DAYS; - pub const MaxAnnouncements: u32 = 50; -} - -pub type AmbassadorContentInstance = pallet_collective_content::Instance1; - -impl pallet_collective_content::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type CharterOrigin = EitherOf, EnsureHeadAmbassadorsVoice>; - type AnnouncementLifetime = AnnouncementLifetime; - // An announcement can be submitted by a Senior Ambassador member or an ambassador plurality - // voice taken via referendum. - type AnnouncementOrigin = EitherOfDiverse< - pallet_ranked_collective::EnsureMember< - Runtime, - AmbassadorCollectiveInstance, - { ranks::SENIOR_AMBASSADOR_TIER_3 }, - >, - EnsureAmbassadorsVoice, - >; - type MaxAnnouncements = MaxAnnouncements; - type WeightInfo = weights::pallet_collective_content::WeightInfo; -} - -pub type AmbassadorCoreInstance = pallet_core_fellowship::Instance2; - -impl pallet_core_fellowship::Config for Runtime { - type WeightInfo = weights::pallet_core_fellowship_ambassador_core::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type Members = pallet_ranked_collective::Pallet; - type Balance = Balance; - // Parameters are set by any of: - // - Root; - // - the FellowshipAdmin origin (i.e. token holder referendum); - // - a vote among all Head Ambassadors. - type ParamsOrigin = EitherOfDiverse< - EnsureXcm>, - EnsureHeadAmbassadorsVoice, - >; - // Induction (creating a candidate) is by any of: - // - Root; - // - the FellowshipAdmin origin (i.e. token holder referendum); - // - a single Head Ambassador; - // - a vote among all senior members. - type InductOrigin = EitherOfDiverse< - EnsureXcm>, - EitherOfDiverse< - pallet_ranked_collective::EnsureMember< - Runtime, - AmbassadorCollectiveInstance, - { ranks::HEAD_AMBASSADOR_TIER_5 }, - >, - EnsureAmbassadorsVoiceFrom>, - >, - >; - type ApproveOrigin = PromoteOrigin; - type PromoteOrigin = PromoteOrigin; - type EvidenceSize = ConstU32<65536>; -} - -pub type AmbassadorSalaryInstance = pallet_salary::Instance2; - -parameter_types! { - // The interior location on AssetHub for the paying account. This is the Ambassador Salary - // pallet instance (which sits at index 74). This sovereign account will need funding. - pub AmbassadorSalaryLocation: InteriorMultiLocation = PalletInstance(74).into(); -} - -/// [`PayOverXcm`] setup to pay the Ambassador salary on the AssetHub in DOT. -pub type AmbassadorSalaryPaymaster = PayOverXcm< - AmbassadorSalaryLocation, - crate::xcm_config::XcmRouter, - crate::PolkadotXcm, - ConstU32<{ 6 * HOURS }>, - AccountId, - (), - ConvertToValue, - AliasesIntoAccountId32<(), AccountId>, ->; - -impl pallet_salary::Config for Runtime { - type WeightInfo = weights::pallet_salary_ambassador_salary::WeightInfo; - type RuntimeEvent = RuntimeEvent; - - #[cfg(not(feature = "runtime-benchmarks"))] - type Paymaster = AmbassadorSalaryPaymaster; - #[cfg(feature = "runtime-benchmarks")] - type Paymaster = crate::impls::benchmarks::PayWithEnsure< - AmbassadorSalaryPaymaster, - crate::impls::benchmarks::OpenHrmpChannel>, - >; - type Members = pallet_ranked_collective::Pallet; - - #[cfg(not(feature = "runtime-benchmarks"))] - type Salary = pallet_core_fellowship::Pallet; - #[cfg(feature = "runtime-benchmarks")] - type Salary = frame_support::traits::tokens::ConvertRank< - crate::impls::benchmarks::RankToSalary, - >; - // 15 days to register for a salary payment. - type RegistrationPeriod = ConstU32<{ 15 * DAYS }>; - // 15 days to claim the salary payment. - type PayoutPeriod = ConstU32<{ 15 * DAYS }>; - // Total monthly salary budget. - type Budget = ConstU128<{ 10_000 * DOLLARS }>; -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/ambassador/origins.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/ambassador/origins.rs deleted file mode 100644 index 3ce8a6b9e5d..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/ambassador/origins.rs +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright (C) 2022 Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! The Ambassador Program's origins. - -#[frame_support::pallet] -pub mod pallet_origins { - use crate::ambassador::ranks; - use frame_support::pallet_prelude::*; - use pallet_ranked_collective::Rank; - - #[pallet::pallet] - pub struct Pallet(PhantomData); - - /// The pallet configuration trait. - #[pallet::config] - pub trait Config: frame_system::Config {} - - #[derive(PartialEq, Eq, Clone, MaxEncodedLen, Encode, Decode, TypeInfo, RuntimeDebug)] - #[pallet::origin] - pub enum Origin { - /// Plurality voice of the [ranks::AMBASSADOR_TIER_1] members or above given via - /// referendum. - Ambassadors, - /// Plurality voice of the [ranks::AMBASSADOR_TIER_2] members or above given via - /// referendum. - AmbassadorsTier2, - /// Plurality voice of the [ranks::SENIOR_AMBASSADOR_TIER_3] members or above given via - /// referendum. - SeniorAmbassadors, - /// Plurality voice of the [ranks::SENIOR_AMBASSADOR_TIER_4] members or above given via - /// referendum. - SeniorAmbassadorsTier4, - /// Plurality voice of the [ranks::HEAD_AMBASSADOR_TIER_5] members or above given via - /// referendum. - HeadAmbassadors, - /// Plurality voice of the [ranks::HEAD_AMBASSADOR_TIER_6] members or above given via - /// referendum. - HeadAmbassadorsTier6, - /// Plurality voice of the [ranks::HEAD_AMBASSADOR_TIER_7] members or above given via - /// referendum. - HeadAmbassadorsTier7, - /// Plurality voice of the [ranks::MASTER_AMBASSADOR_TIER_8] members or above given via - /// referendum. - MasterAmbassadors, - /// Plurality voice of the [ranks::MASTER_AMBASSADOR_TIER_9] members or above given via - /// referendum. - MasterAmbassadorsTier9, - } - - impl Origin { - /// Returns the rank that the origin `self` speaks for, or `None` if it doesn't speak for - /// any. - pub fn as_voice(&self) -> Option { - Some(match &self { - Origin::Ambassadors => ranks::AMBASSADOR_TIER_1, - Origin::AmbassadorsTier2 => ranks::AMBASSADOR_TIER_2, - Origin::SeniorAmbassadors => ranks::SENIOR_AMBASSADOR_TIER_3, - Origin::SeniorAmbassadorsTier4 => ranks::SENIOR_AMBASSADOR_TIER_4, - Origin::HeadAmbassadors => ranks::HEAD_AMBASSADOR_TIER_5, - Origin::HeadAmbassadorsTier6 => ranks::HEAD_AMBASSADOR_TIER_6, - Origin::HeadAmbassadorsTier7 => ranks::HEAD_AMBASSADOR_TIER_7, - Origin::MasterAmbassadors => ranks::MASTER_AMBASSADOR_TIER_8, - Origin::MasterAmbassadorsTier9 => ranks::MASTER_AMBASSADOR_TIER_9, - }) - } - } - - /// Implementation of the [EnsureOrigin] trait for the [Origin::HeadAmbassadors] origin. - pub struct EnsureHeadAmbassadorsVoice; - impl> + From> EnsureOrigin for EnsureHeadAmbassadorsVoice { - type Success = (); - fn try_origin(o: O) -> Result { - o.into().and_then(|o| match o { - Origin::HeadAmbassadors => Ok(()), - r => Err(O::from(r)), - }) - } - - #[cfg(feature = "runtime-benchmarks")] - fn try_successful_origin() -> Result { - Ok(O::from(Origin::HeadAmbassadors)) - } - } - - /// Implementation of the [EnsureOrigin] trait for the plurality voice [Origin]s - /// from a given rank `R` with the success result of the corresponding [Rank]. - pub struct EnsureAmbassadorsVoiceFrom(PhantomData); - impl, O: Into> + From> EnsureOrigin - for EnsureAmbassadorsVoiceFrom - { - type Success = Rank; - fn try_origin(o: O) -> Result { - o.into().and_then(|o| match Origin::as_voice(&o) { - Some(r) if r >= R::get() => Ok(r), - _ => Err(O::from(o)), - }) - } - - #[cfg(feature = "runtime-benchmarks")] - fn try_successful_origin() -> Result { - ranks::MASTER_AMBASSADOR_TIER_9 - .ge(&R::get()) - .then(|| O::from(Origin::MasterAmbassadorsTier9)) - .ok_or(()) - } - } - - /// Implementation of the [EnsureOrigin] trait for the plurality voice [Origin]s with the - /// success result of the corresponding [Rank]. - pub struct EnsureAmbassadorsVoice; - impl> + From> EnsureOrigin for EnsureAmbassadorsVoice { - type Success = Rank; - fn try_origin(o: O) -> Result { - o.into().and_then(|o| Origin::as_voice(&o).ok_or(O::from(o))) - } - - #[cfg(feature = "runtime-benchmarks")] - fn try_successful_origin() -> Result { - Ok(O::from(Origin::MasterAmbassadorsTier9)) - } - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/ambassador/tracks.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/ambassador/tracks.rs deleted file mode 100644 index 073d8e6ee36..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/ambassador/tracks.rs +++ /dev/null @@ -1,282 +0,0 @@ -// Copyright (C) 2022 Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! The Ambassador Program's referenda voting tracks. - -use super::Origin; -use crate::{Balance, BlockNumber, RuntimeOrigin, DAYS, DOLLARS, HOURS}; -use sp_runtime::Perbill; - -/// Referendum `TrackId` type. -pub type TrackId = u16; - -/// Referendum track IDs. -pub mod constants { - use super::TrackId; - - pub const AMBASSADOR_TIER_1: TrackId = 1; - pub const AMBASSADOR_TIER_2: TrackId = 2; - pub const SENIOR_AMBASSADOR_TIER_3: TrackId = 3; - pub const SENIOR_AMBASSADOR_TIER_4: TrackId = 4; - pub const HEAD_AMBASSADOR_TIER_5: TrackId = 5; - pub const HEAD_AMBASSADOR_TIER_6: TrackId = 6; - pub const HEAD_AMBASSADOR_TIER_7: TrackId = 7; - pub const MASTER_AMBASSADOR_TIER_8: TrackId = 8; - pub const MASTER_AMBASSADOR_TIER_9: TrackId = 9; -} - -/// The type implementing the [`pallet_referenda::TracksInfo`] trait for referenda pallet. -pub struct TracksInfo; - -/// Information on the voting tracks. -impl pallet_referenda::TracksInfo for TracksInfo { - type Id = TrackId; - - type RuntimeOrigin = ::PalletsOrigin; - - /// Return the array of available tracks and their information. - fn tracks() -> &'static [(Self::Id, pallet_referenda::TrackInfo)] { - static DATA: [(TrackId, pallet_referenda::TrackInfo); 9] = [ - ( - constants::AMBASSADOR_TIER_1, - pallet_referenda::TrackInfo { - name: "ambassador tier 1", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 24 * HOURS, - decision_period: 7 * DAYS, - confirm_period: 24 * HOURS, - min_enactment_period: 1 * HOURS, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(10), - ceil: Perbill::from_percent(50), - }, - }, - ), - ( - constants::AMBASSADOR_TIER_2, - pallet_referenda::TrackInfo { - name: "ambassador tier 2", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 24 * HOURS, - decision_period: 7 * DAYS, - confirm_period: 24 * HOURS, - min_enactment_period: 1 * HOURS, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(10), - ceil: Perbill::from_percent(50), - }, - }, - ), - ( - constants::SENIOR_AMBASSADOR_TIER_3, - pallet_referenda::TrackInfo { - name: "senior ambassador tier 3", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 24 * HOURS, - decision_period: 7 * DAYS, - confirm_period: 24 * HOURS, - min_enactment_period: 1 * HOURS, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(10), - ceil: Perbill::from_percent(50), - }, - }, - ), - ( - constants::SENIOR_AMBASSADOR_TIER_4, - pallet_referenda::TrackInfo { - name: "senior ambassador tier 4", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 24 * HOURS, - decision_period: 7 * DAYS, - confirm_period: 24 * HOURS, - min_enactment_period: 1 * HOURS, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(10), - ceil: Perbill::from_percent(50), - }, - }, - ), - ( - constants::HEAD_AMBASSADOR_TIER_5, - pallet_referenda::TrackInfo { - name: "head ambassador tier 5", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 24 * HOURS, - decision_period: 7 * DAYS, - confirm_period: 24 * HOURS, - min_enactment_period: 1 * HOURS, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(10), - ceil: Perbill::from_percent(50), - }, - }, - ), - ( - constants::HEAD_AMBASSADOR_TIER_6, - pallet_referenda::TrackInfo { - name: "head ambassador tier 6", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 24 * HOURS, - decision_period: 7 * DAYS, - confirm_period: 24 * HOURS, - min_enactment_period: 1 * HOURS, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(10), - ceil: Perbill::from_percent(50), - }, - }, - ), - ( - constants::HEAD_AMBASSADOR_TIER_7, - pallet_referenda::TrackInfo { - name: "head ambassador tier 7", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 24 * HOURS, - decision_period: 7 * DAYS, - confirm_period: 24 * HOURS, - min_enactment_period: 1 * HOURS, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(10), - ceil: Perbill::from_percent(50), - }, - }, - ), - ( - constants::MASTER_AMBASSADOR_TIER_8, - pallet_referenda::TrackInfo { - name: "master ambassador tier 8", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 24 * HOURS, - decision_period: 7 * DAYS, - confirm_period: 24 * HOURS, - min_enactment_period: 1 * HOURS, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(10), - ceil: Perbill::from_percent(50), - }, - }, - ), - ( - constants::MASTER_AMBASSADOR_TIER_9, - pallet_referenda::TrackInfo { - name: "master ambassador tier 9", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 24 * HOURS, - decision_period: 7 * DAYS, - confirm_period: 24 * HOURS, - min_enactment_period: 1 * HOURS, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(10), - ceil: Perbill::from_percent(50), - }, - }, - ), - ]; - &DATA[..] - } - - /// Determine the voting track for the given `origin`. - fn track_for(id: &Self::RuntimeOrigin) -> Result { - #[cfg(feature = "runtime-benchmarks")] - { - // For benchmarks, we enable a root origin. - // It is important that this is not available in production! - let root: Self::RuntimeOrigin = frame_system::RawOrigin::Root.into(); - if &root == id { - return Ok(constants::MASTER_AMBASSADOR_TIER_9) - } - } - - match Origin::try_from(id.clone()) { - Ok(Origin::Ambassadors) => Ok(constants::AMBASSADOR_TIER_1), - Ok(Origin::AmbassadorsTier2) => Ok(constants::AMBASSADOR_TIER_2), - Ok(Origin::SeniorAmbassadors) => Ok(constants::SENIOR_AMBASSADOR_TIER_3), - Ok(Origin::SeniorAmbassadorsTier4) => Ok(constants::SENIOR_AMBASSADOR_TIER_4), - Ok(Origin::HeadAmbassadors) => Ok(constants::HEAD_AMBASSADOR_TIER_5), - Ok(Origin::HeadAmbassadorsTier6) => Ok(constants::HEAD_AMBASSADOR_TIER_6), - Ok(Origin::HeadAmbassadorsTier7) => Ok(constants::HEAD_AMBASSADOR_TIER_7), - Ok(Origin::MasterAmbassadors) => Ok(constants::MASTER_AMBASSADOR_TIER_8), - Ok(Origin::MasterAmbassadorsTier9) => Ok(constants::MASTER_AMBASSADOR_TIER_9), - _ => Err(()), - } - } -} - -// implements [`frame_support::traits::Get`] for [`TracksInfo`] -pallet_referenda::impl_tracksinfo_get!(TracksInfo, Balance, BlockNumber); diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/fellowship/migration.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/fellowship/migration.rs deleted file mode 100644 index 9350d03a2c9..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/fellowship/migration.rs +++ /dev/null @@ -1,261 +0,0 @@ -// Copyright (C) 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 . - -//! Migrations. - -use frame_support::{pallet_prelude::*, traits::OnRuntimeUpgrade, weights::Weight}; -use log; - -/// Initial import of the Kusama Technical Fellowship. -pub(crate) mod import_kusama_fellowship { - use super::*; - use frame_support::{parameter_types, traits::RankedMembers}; - use pallet_ranked_collective::{Config, MemberCount, Pallet as RankedCollective, Rank}; - #[cfg(feature = "try-runtime")] - use sp_std::vec::Vec; - - const TARGET: &str = "runtime::migration::import_fellowship"; - - parameter_types! { - // The Fellowship addresses from Kusama state. - pub const FellowshipAddresses: [(Rank, [u8; 32]); 47] = [ - (6, hex_literal::hex!("f0673d30606ee26672707e4fd2bc8b58d3becb7aba2d5f60add64abb5fea4710"),), - (6, hex_literal::hex!("3c235e80e35082b668682531b9b062fda39a46edb94f884d9122d86885fd5f1b"),), - (6, hex_literal::hex!("7628a5be63c4d3c8dbb96c2904b1a9682e02831a1af836c7efc808020b92fa63"),), - (5, hex_literal::hex!("9c84f75e0b1b92f6b003bde6212a8b2c9b776f3720f942b33fed8709f103a268"),), - (5, hex_literal::hex!("bc64065524532ed9e805fb0d39a5c0199216b52871168e5e4d0ab612f8797d61"),), - (5, hex_literal::hex!("2e1884c53071526483b14004e894415f02b55fc2e2aef8e1df8ccf7ce5bd5570"),), - (5, hex_literal::hex!("5c5062779d44ea2ab0469e155b8cf3e004fce71b3b3d38263cd9fa9478f12f28"),), - (4, hex_literal::hex!("4adf51a47b72795366d52285e329229c836ea7bbfe139dbe8fa0700c4f86fc56"),), - (4, hex_literal::hex!("1c90e3dabd3fd0f6bc648045018f78fcee8fe24122c22d8d2a14e9905073d10f"),), - (4, hex_literal::hex!("8e851ed992228f2268ee8c614fe6075d3800060ae14098e0309413a0a81c4470"),), - (3, hex_literal::hex!("720d807d46b941703ffe0278e8b173dc6738c5af8af812ceffc90c69390bbf1f"),), - (3, hex_literal::hex!("c4965f7fe7be8174717a24ffddf684986d122c7e293ddf875cdf9700a07b6812"),), - (3, hex_literal::hex!("beae5bcad1a8c156291b7ddf46b38b0c61a6aaacebd57b21c75627bfe7f9ab71"),), - (3, hex_literal::hex!("ccd87fa65729f7bdaa8305581a7a499aa24c118e83f5714152c0e22617c6fc63"),), - (3, hex_literal::hex!("e0f0f94962fc0a8c1a0f0527dc8e592c67939c46c903b6016cc0a8515da0044d"),), - (3, hex_literal::hex!("984e16482c99cfad1436111e321a86d87d0fac203bf64538f888e45d793b5413"),), - (3, hex_literal::hex!("44a3efb5bfa9023d4ef27b7d31d76f531b4d7772b1679b7fb32b6263ac39100e"),), - (2, hex_literal::hex!("2eba9a39dbfdd5f3cba964355d45e27319f0271023c0353d97dc6df2401b0e3d"),), - (2, hex_literal::hex!("ba3e9b87792bcfcc237fa8181185b8883c77f3e24f45e4a92ab31d07a4703520"),), - (2, hex_literal::hex!("9e6eb74b0a6b39de36fb58d1fab20bc2b3fea96023ce5a47941c20480d99f92e"),), - (2, hex_literal::hex!("ee3d9d8c48ee88dce78fd7bafe3ce2052900eb465085b9324d4f5da26b145f2b"),), - (2, hex_literal::hex!("d8290537d6e31fe1ff165eaa62b63f6f3556dcc720b0d3a6d7eab96275617304"),), - (2, hex_literal::hex!("5a090c88f0438b46b451026597cee760a7bac9d396c9c7b529b68fb78aec5f43"),), - (2, hex_literal::hex!("18d30040a8245c5ff17afc9a8169d7d0771fe7ab4135a64a022c254117340720"),), - (1, hex_literal::hex!("b4f7f03bebc56ebe96bc52ea5ed3159d45a0ce3a8d7f082983c33ef133274747"),), - (1, hex_literal::hex!("caafae0aaa6333fcf4dc193146945fe8e4da74aa6c16d481eef0ca35b8279d73"),), - (1, hex_literal::hex!("a66e0f4e1a121cc83fddf3096e8ec8c9e9c85989f276e39e951fb0e4a5398763"),), - (1, hex_literal::hex!("f65f3cade8f68e8f34c6266b0d37e58a754059ca96816e964f98e17c79505073"),), - (1, hex_literal::hex!("8c232c91ef2a9983ba65c4b75bb86fcbae4d909900ea8aa06c3644ca1161db48"),), - (1, hex_literal::hex!("78e4813814891bd48bc745b79254a978833d41fbe0f387df93cd87eae2468926"),), - (1, hex_literal::hex!("d44824ac8d1edecca67639ca74d208bd2044a10e67c9677e288080191e3fec13"),), - (1, hex_literal::hex!("585e982d74da4f4290d20a73800cfd705cf59e1f5880aaee5506b5eaaf544f49"),), - (1, hex_literal::hex!("d851f44a6f0d0d2f3439a51f2f75f66f4ea1a8e6c33c32f9af75fc188afb7546"),), - (1, hex_literal::hex!("dca89b135d1a6aee0a498610a70eeaed056727c8a4d220da245842e540a54a74"),), - (1, hex_literal::hex!("aa91fc0201f26b713a018669bcd269babf25368eee2493323b1ce0190a178a27"),), - (1, hex_literal::hex!("dc20836f2e4b88c1858d1e3f918e7358043b4a8abcd2874e74d91d26c52eca2a"),), - (1, hex_literal::hex!("145d6c503d0cf97f4c7725ca773741bd02e1760bfb52e021af5a9f2de283012c"),), - (1, hex_literal::hex!("307183930b2264c5165f4a210a99520c5f1672b0413d57769fabc19e6866fb25"),), - (1, hex_literal::hex!("6201961514cf5ad87f1c4dd0c392ee28231f805f77975147bf2c33bd671b9822"),), - (1, hex_literal::hex!("c6f57237cd4abfbeed99171495fc784e45a9d5d2814d435de40de00991a73c06"),), - (1, hex_literal::hex!("c1df5c7e8ca56037450c58734326ebe34aec8f7d1928322a12164856365fea73"),), - (1, hex_literal::hex!("12c039004da5e1e846aae808277098c719cef1f4985aed00161a42ac4f0e002f"),), - (1, hex_literal::hex!("7460ac178015d2a7c289bb68ef9fdaac071596ab4425c276a0040aaac7055566"),), - (1, hex_literal::hex!("eec4bd650a277342ebba0954ac786df2623bd6a9d6d3e69b484482336c549f79"),), - (1, hex_literal::hex!("e287c7494655d636a846f5c3347ad2cb3c462a8d46e0832be70fcc0ab54ee62d"),), - (1, hex_literal::hex!("82bf733f44a840f0a5c1935a002d4e541d81298fad6d1da8124073485983860e"),), - (1, hex_literal::hex!("d5b89078eed9b9dfec5c7d8413bac0b720bad3bd4078c4d8c894325713192502"),), - ]; - } - - /// Implements `OnRuntimeUpgrade` trait. - pub struct Migration(PhantomData<(T, I)>); - - impl, I: 'static> OnRuntimeUpgrade for Migration - where - ::AccountId: From<[u8; 32]>, - { - #[cfg(feature = "try-runtime")] - fn pre_upgrade() -> Result, sp_runtime::TryRuntimeError> { - let onchain_version = RankedCollective::::on_chain_storage_version(); - ensure!(onchain_version == 0, "the storage version must be 0."); - let member_count = MemberCount::::get(0); - ensure!(member_count == 0, "the collective must be uninitialized."); - - Ok(Vec::new()) - } - - fn on_runtime_upgrade() -> Weight { - let current_version = RankedCollective::::current_storage_version(); - let onchain_version = RankedCollective::::on_chain_storage_version(); - let mut weight = T::DbWeight::get().reads(1); - log::info!( - target: TARGET, - "running migration with current storage version {:?} / onchain {:?}.", - current_version, - onchain_version - ); - if onchain_version != 0 { - log::warn!( - target: TARGET, - "unsupported storage version, skipping import_fellowship migration." - ); - return weight - } - let member_count = MemberCount::::get(0); - weight.saturating_accrue(T::DbWeight::get().reads(1)); - if member_count != 0 { - log::warn!( - target: TARGET, - "the collective already initialized, skipping import_fellowship migration." - ); - return weight - } - - for (rank, account_id32) in FellowshipAddresses::get() { - let who: T::AccountId = account_id32.into(); - let _ = as RankedMembers>::induct(&who); - for _ in 0..rank { - let _ = as RankedMembers>::promote(&who); - // 1 write to `IdToIndex` and `IndexToId` per member on each rank. - weight.saturating_accrue(T::DbWeight::get().writes(2)); - } - // 1 write to `IdToIndex` and `IndexToId` per member on each rank. - weight.saturating_accrue(T::DbWeight::get().writes(2)); - // 1 read and 1 write to `Members` and `MemberCount` per member. - weight.saturating_accrue(T::DbWeight::get().reads_writes(2, 2)); - } - weight - } - - #[cfg(feature = "try-runtime")] - fn post_upgrade(_state: Vec) -> Result<(), sp_runtime::TryRuntimeError> { - ensure!(MemberCount::::get(0) == 47, "invalid members count at rank 0."); - ensure!(MemberCount::::get(1) == 47, "invalid members count at rank 1."); - ensure!(MemberCount::::get(2) == 24, "invalid members count at rank 2."); - ensure!(MemberCount::::get(3) == 17, "invalid members count at rank 3."); - ensure!(MemberCount::::get(4) == 10, "invalid members count at rank 4."); - ensure!(MemberCount::::get(5) == 7, "invalid members count at rank 5."); - ensure!(MemberCount::::get(6) == 3, "invalid members count at rank 6."); - ensure!(MemberCount::::get(7) == 0, "invalid members count at rank 7."); - Ok(()) - } - } -} - -#[cfg(test)] -pub mod tests { - use super::import_kusama_fellowship::FellowshipAddresses; - use crate::{FellowshipCollectiveInstance as Fellowship, Runtime, System}; - use frame_support::traits::OnRuntimeUpgrade; - use pallet_ranked_collective::Rank; - use parachains_common::AccountId; - use sp_core::crypto::Ss58Codec; - use sp_runtime::{AccountId32, BuildStorage}; - - #[test] - fn check_fellowship_addresses() { - let fellowship_addresses = FellowshipAddresses::get(); - let kusama_fellowship_ss58: [(Rank, _); 47] = [ - (6, "16SDAKg9N6kKAbhgDyxBXdHEwpwHUHs2CNEiLNGeZV55qHna"), /* proof https://kusama.subscan.io/extrinsic/16832707-4 */ - (6, "12MrP337azmkTdfCUKe5XLnSQrbgEKqqfZ4PQC7CZTJKAWR3"), /* proof https://kusama.subscan.io/extrinsic/16967809-2 */ - (6, "FFFF3gBSSDFSvK2HBq4qgLH75DHqXWPHeCnR1BSksAMacBs"), - (5, "G7YVCdxZb8JLpAm9WMnJdNuojNT84AzU62zmvx5P1FMNtg2"), - (5, "15G1iXDLgFyfnJ51FKq1ts44TduMyUtekvzQi9my4hgYt2hs"), /* proof https://kusama.subscan.io/extrinsic/16917610-2 */ - (5, "Dcm1BqR4N7nHuV43TXdET7pNibt1Nzm42FggPHpxKRven53"), - (5, "1363HWTPzDrzAQ6ChFiMU6mP4b6jmQid2ae55JQcKtZnpLGv"), /* proof https://kusama.subscan.io/extrinsic/16961180-2 */ - (4, "EGVQCe73TpFyAZx5uKfE1222XfkT3BSKozjgcqzLBnc5eYo"), - (4, "1eTPAR2TuqLyidmPT9rMmuycHVm9s9czu78sePqg2KHMDrE"), /* proof https://kusama.subscan.io/extrinsic/16921712-3 */ - (4, "14DsLzVyTUTDMm2eP3czwPbH53KgqnQRp3CJJZS9GR7yxGDP"), /* proof https://kusama.subscan.io/extrinsic/16917519-2 */ - (3, "13aYUFHB3umoPoxBEAHSv451iR3RpsNi3t5yBZjX2trCtTp6"), /* proof https://kusama.subscan.io/extrinsic/16917832-3 */ - (3, "H25aCspunTUqAt4D1gC776vKZ8FX3MvQJ3Jde6qDXPQaFxk"), - (3, "GtLQoW4ZqcjExMPq6qB22bYc6NaX1yMzRuGWpSRiHqnzRb9"), - (3, "15db5ksZgmhWE9U8MDq4wLKUdFivLVBybztWV8nmaJvv3NU1"), /* proof https://kusama.subscan.io/extrinsic/16876631-2 */ - (3, "HfFpz4QUxfbocHudf8UU7cMgHqkHpf855Me5X846PZAsAYE"), - (3, "14ShUZUYUR35RBZW6uVVt1zXDxmSQddkeDdXf1JkMA6P721N"), /* proof https://kusama.subscan.io/extrinsic/16918890-8 */ - (3, "12YzxR5TvGzfMVZNnhAJ5Hwi5zExpRWMKv2MuMwZTrddvgoi"), /* proof https://kusama.subscan.io/extrinsic/16924324-3 */ - (2, "Ddb9puChKMHq4gM6o47E551wAmaNeu6kHngX1jzNNqAw782"), - (2, "15DCWHQknBjc5YPFoVj8Pn2KoqrqYywJJ95BYNYJ4Fj3NLqz"), /* proof https://kusama.subscan.io/extrinsic/16834952-2 */ - (2, "14ajTQdrtCA8wZmC4PgD8Y1B2Gy8L4Z3oi2fodxq9FehcFrM"), /* proof https://kusama.subscan.io/extrinsic/16944257-2 */ - (2, "HxhDbS3grLurk1dhDgPiuDaRowHY1xHCU8Vu8on3fdg85tx"), - (2, "HTk3eccL7WBkiyxz1gBcqQRghsJigoDMD7mnQaz1UAbMpQV"), - (2, "EcNWrSPSDcVBRymwr26kk4JVFg92PdoU5Xwp87W2FgFSt9c"), - (2, "D8sM6vKjWaeKy2zCPYWGkLLbWdUtWQrXBTQqr4dSYnVQo21"), - (1, "GfbnnEgRU94n9ed4RFZ6Z9dBAWs5obykigJSwXKU9hsT2uU"), - (1, "HA5NtttvyZsxo4wGxGoJJSMaWtdEFZAuGUMFHVWD7fgenPv"), - (1, "14mDeKZ7qp9hqBjjDg51c8BFrf9o69om8piSSRwj2fT5Yb1i"), /* proof https://kusama.subscan.io/extrinsic/16919020-4 */ - (1, "16a357f5Sxab3V2ne4emGQvqJaCLeYpTMx3TCjnQhmJQ71DX"), /* proof https://kusama.subscan.io/extrinsic/16836396-5 */ - (1, "14Ak9rrF6RKHHoLLRUYMnzcvvi1t8E1yAMa7tcmiwUfaqzYK"), /* proof https://kusama.subscan.io/extrinsic/16921990-3 */ - (1, "FJq9JpA9P7EXbmfsN9YiewJaDbQyL6vQyksGtJvzfbn6zf8"), - (1, "15oLanodWWweiZJSoDTEBtrX7oGfq6e8ct5y5E6fVRDPhUgj"), /* proof https://kusama.subscan.io/extrinsic/16876423-7 */ - (1, "EaBqDJJNsZmYdQ4xn1vomPJVNh7fjA6UztZeEjn7ZzdeT7V"), - (1, "HTxCvXKVvUZ7PQq175kCRRLu7XkGfTfErrdNXr1ZuuwVZWv"), - (1, "HZe91A6a1xqbKaw6ofx3GFepJjhVXHrwHEwn6YUDDFphpX9"), - (1, "GRy2P3kBEzSHCbmDJfquku1cyUyhZaAqojRcNE4A4U3MnLd"), - (1, "HYwiBo7Mcv7uUDg4MUoKm2fxzv4dMLAtmmNfzHV8qcQJpAE"), - (1, "1ThiBx5DDxFhoD9GY6tz5Fp4Y7Xn1xfLmDddcoFQghDvvjg"), /* proof https://kusama.subscan.io/extrinsic/16918130-2 */ - (1, "DfqY6XQUSETTszBQ1juocTcG9iiDoXhvq1CoVadBSUqTGJS"), - (1, "EnpgVWGGQVrFdSB2qeXRVdtccV6U5ZscNELBoERbkFD8Wi6"), - (1, "H5BuqCmucJhUUuvjAzPazeVwVCtUSXVQdc5Dnx2q5zD7rVn"), - (1, "GxX7S1pTDdeaGUjpEPPF2we6tgHDhbatFG25pVmVFtGHLH6"), - (1, "CzuUtvKhZNZBjyAXeYviaRXwrLhVrsupJ9PrWmdq7BJTjGR"), - (1, "FCunn2Rx8JqfT5g6noUKKazph4jLDba5rUee7o3ZmJ362Ju"), - (1, "HyPMjWRHCpJS7x2SZ2R6M2XG5ZiCiZag4U4r7gBHRsE5mTc"), - (1, "1682A5hxfiS1Kn1jrUnMYv14T9EuEnsgnBbujGfYbeEbSK3w"), /* proof https://kusama.subscan.io/extrinsic/16919077-2 */ - (1, "13xS6fK6MHjApLnjdX7TJYw1niZmiXasSN91bNtiXQjgEtNx"), /* proof https://kusama.subscan.io/extrinsic/16918212-7 */ - (1, "15qE2YAQCs5Y962RHE7RzNjQxU6Pei21nhkkSM9Sojq1hHps"), /* https://kusama.subscan.io/extrinsic/17352973-2 */ - ]; - - for (index, val) in kusama_fellowship_ss58.iter().enumerate() { - let account: AccountId32 = ::from_string(val.1).unwrap(); - let account32: [u8; 32] = account.clone().into(); - assert_eq!( - fellowship_addresses[index].0, kusama_fellowship_ss58[index].0, - "ranks must be equal." - ); - assert_eq!(fellowship_addresses[index].1, account32, "accounts must be equal."); - } - } - - #[test] - fn test_fellowship_import() { - use super::import_kusama_fellowship::Migration; - use pallet_ranked_collective::{IdToIndex, IndexToId, MemberCount, MemberRecord, Members}; - - let t = frame_system::GenesisConfig::::default().build_storage().unwrap(); - let mut ext = sp_io::TestExternalities::new(t); - ext.execute_with(|| System::set_block_number(1)); - ext.execute_with(|| { - assert_eq!(MemberCount::::get(0), 0); - Migration::::on_runtime_upgrade(); - assert_eq!(MemberCount::::get(0), 47); - assert_eq!(MemberCount::::get(6), 3); - assert_eq!(MemberCount::::get(7), 0); - for (rank, account_id32) in FellowshipAddresses::get() { - let who = ::AccountId::from(account_id32); - assert!(IdToIndex::::get(0, &who).is_some()); - assert!(IdToIndex::::get(rank + 1, &who).is_none()); - let index = IdToIndex::::get(rank, &who).unwrap(); - assert_eq!(IndexToId::::get(rank, index).unwrap(), who); - assert_eq!( - Members::::get(&who).unwrap(), - MemberRecord::new(rank) - ); - } - }); - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/fellowship/mod.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/fellowship/mod.rs deleted file mode 100644 index 2a2757ea5ce..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/fellowship/mod.rs +++ /dev/null @@ -1,239 +0,0 @@ -// Copyright (C) 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 . - -//! The Polkadot Technical Fellowship. - -pub(crate) mod migration; -mod origins; -mod tracks; -use crate::{ - impls::ToParentTreasury, - weights, - xcm_config::{FellowshipAdminBodyId, UsdtAssetHub}, - AccountId, Balance, Balances, FellowshipReferenda, GovernanceLocation, PolkadotTreasuryAccount, - Preimage, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, Scheduler, DAYS, -}; -use frame_support::{ - parameter_types, - traits::{EitherOf, EitherOfDiverse, MapSuccess, OriginTrait, TryWithMorphedArg}, -}; -use frame_system::EnsureRootWithSuccess; -pub use origins::{ - pallet_origins as pallet_fellowship_origins, Architects, EnsureCanPromoteTo, EnsureCanRetainAt, - EnsureFellowship, Fellows, Masters, Members, ToVoice, -}; -use pallet_ranked_collective::EnsureOfRank; -use pallet_xcm::{EnsureXcm, IsVoiceOfBody}; -use parachains_common::{polkadot::account, HOURS}; -use sp_core::{ConstU128, ConstU32}; -use sp_runtime::traits::{AccountIdConversion, ConstU16, ConvertToValue, Replace, TakeFirst}; -use xcm_builder::{AliasesIntoAccountId32, PayOverXcm}; - -#[cfg(feature = "runtime-benchmarks")] -use crate::impls::benchmarks::{OpenHrmpChannel, PayWithEnsure}; - -/// The Fellowship members' ranks. -pub mod ranks { - use pallet_ranked_collective::Rank; - - pub const DAN_1: Rank = 1; // aka Members. - pub const DAN_2: Rank = 2; - pub const DAN_3: Rank = 3; // aka Fellows. - pub const DAN_4: Rank = 4; // aka Architects. - pub const DAN_5: Rank = 5; - pub const DAN_6: Rank = 6; - pub const DAN_7: Rank = 7; // aka Masters. - pub const DAN_8: Rank = 8; - pub const DAN_9: Rank = 9; -} - -parameter_types! { - // Referenda pallet account, used to temporarily deposit slashed imbalance before teleporting. - pub ReferendaPalletAccount: AccountId = account::REFERENDA_PALLET_ID.into_account_truncating(); -} - -impl pallet_fellowship_origins::Config for Runtime {} - -pub type FellowshipReferendaInstance = pallet_referenda::Instance1; - -impl pallet_referenda::Config for Runtime { - type WeightInfo = weights::pallet_referenda_fellowship_referenda::WeightInfo; - type RuntimeCall = RuntimeCall; - type RuntimeEvent = RuntimeEvent; - type Scheduler = Scheduler; - type Currency = Balances; - // Fellows can submit proposals. - type SubmitOrigin = EitherOf< - pallet_ranked_collective::EnsureMember, - MapSuccess< - TryWithMorphedArg< - RuntimeOrigin, - ::PalletsOrigin, - ToVoice, - EnsureOfRank, - (AccountId, u16), - >, - TakeFirst, - >, - >; - type CancelOrigin = Architects; - type KillOrigin = Masters; - type Slash = ToParentTreasury; - type Votes = pallet_ranked_collective::Votes; - type Tally = pallet_ranked_collective::TallyOf; - type SubmissionDeposit = ConstU128<0>; - type MaxQueued = ConstU32<100>; - type UndecidingTimeout = ConstU32<{ 7 * DAYS }>; - type AlarmInterval = ConstU32<1>; - type Tracks = tracks::TracksInfo; - type Preimages = Preimage; -} - -pub type FellowshipCollectiveInstance = pallet_ranked_collective::Instance1; - -impl pallet_ranked_collective::Config for Runtime { - type WeightInfo = weights::pallet_ranked_collective_fellowship_collective::WeightInfo; - type RuntimeEvent = RuntimeEvent; - - #[cfg(not(feature = "runtime-benchmarks"))] - // Promotions and the induction of new members are serviced by `FellowshipCore` pallet instance. - type PromoteOrigin = frame_system::EnsureNever; - #[cfg(feature = "runtime-benchmarks")] - // The maximum value of `u16` set as a success value for the root to ensure the benchmarks will - // pass. - type PromoteOrigin = EnsureRootWithSuccess>; - - // Demotion is by any of: - // - Root can demote arbitrarily. - // - the FellowshipAdmin origin (i.e. token holder referendum); - // - // The maximum value of `u16` set as a success value for the root to ensure the benchmarks will - // pass. - type DemoteOrigin = EitherOf< - EnsureRootWithSuccess>, - MapSuccess< - EnsureXcm>, - Replace>, - >, - >; - type Polls = FellowshipReferenda; - type MinRankOfClass = tracks::MinRankOfClass; - type VoteWeight = pallet_ranked_collective::Geometric; -} - -pub type FellowshipCoreInstance = pallet_core_fellowship::Instance1; - -impl pallet_core_fellowship::Config for Runtime { - type WeightInfo = weights::pallet_core_fellowship_fellowship_core::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type Members = pallet_ranked_collective::Pallet; - type Balance = Balance; - // Parameters are set by any of: - // - Root; - // - the FellowshipAdmin origin (i.e. token holder referendum); - // - a vote among all Fellows. - type ParamsOrigin = EitherOfDiverse< - EnsureXcm>, - Fellows, - >; - // Induction (creating a candidate) is by any of: - // - Root; - // - the FellowshipAdmin origin (i.e. token holder referendum); - // - a single Fellow; - // - a vote among all Members. - type InductOrigin = EitherOfDiverse< - EnsureXcm>, - EitherOfDiverse< - pallet_ranked_collective::EnsureMember< - Runtime, - FellowshipCollectiveInstance, - { ranks::DAN_3 }, - >, - Members, - >, - >; - // Approval (rank-retention) of a Member's current rank is by any of: - // - Root; - // - the FellowshipAdmin origin (i.e. token holder referendum); - // - a vote by the rank two above the current rank for all retention up to the Master rank. - type ApproveOrigin = EitherOf< - MapSuccess< - EnsureXcm>, - Replace>, - >, - EnsureCanRetainAt, - >; - // Promotion is by any of: - // - Root can promote arbitrarily. - // - the FellowshipAdmin origin (i.e. token holder referendum); - // - a vote by the rank two above the new rank for all promotions up to the Master rank. - type PromoteOrigin = EitherOf< - MapSuccess< - EnsureXcm>, - Replace>, - >, - EnsureCanPromoteTo, - >; - type EvidenceSize = ConstU32<65536>; -} - -pub type FellowshipSalaryInstance = pallet_salary::Instance1; - -use xcm::prelude::*; - -parameter_types! { - // The interior location on AssetHub for the paying account. This is the Fellowship Salary - // pallet instance (which sits at index 64). This sovereign account will need funding. - pub Interior: InteriorMultiLocation = PalletInstance(64).into(); -} - -const USDT_UNITS: u128 = 1_000_000; - -/// [`PayOverXcm`] setup to pay the Fellowship salary on the AssetHub in USDT. -pub type FellowshipSalaryPaymaster = PayOverXcm< - Interior, - crate::xcm_config::XcmRouter, - crate::PolkadotXcm, - ConstU32<{ 6 * HOURS }>, - AccountId, - (), - ConvertToValue, - AliasesIntoAccountId32<(), AccountId>, ->; - -impl pallet_salary::Config for Runtime { - type WeightInfo = weights::pallet_salary_fellowship_salary::WeightInfo; - type RuntimeEvent = RuntimeEvent; - - #[cfg(not(feature = "runtime-benchmarks"))] - type Paymaster = FellowshipSalaryPaymaster; - #[cfg(feature = "runtime-benchmarks")] - type Paymaster = PayWithEnsure>>; - type Members = pallet_ranked_collective::Pallet; - - #[cfg(not(feature = "runtime-benchmarks"))] - type Salary = pallet_core_fellowship::Pallet; - #[cfg(feature = "runtime-benchmarks")] - type Salary = frame_support::traits::tokens::ConvertRank< - crate::impls::benchmarks::RankToSalary, - >; - // 15 days to register for a salary payment. - type RegistrationPeriod = ConstU32<{ 15 * DAYS }>; - // 15 days to claim the salary payment. - type PayoutPeriod = ConstU32<{ 15 * DAYS }>; - // Total monthly salary budget. - type Budget = ConstU128<{ 100_000 * USDT_UNITS }>; -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/fellowship/origins.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/fellowship/origins.rs deleted file mode 100644 index 5ed2c19f79e..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/fellowship/origins.rs +++ /dev/null @@ -1,247 +0,0 @@ -// Copyright (C) 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 . - -//! Fellowship custom origins. - -use super::ranks; -pub use pallet_origins::*; - -#[frame_support::pallet] -pub mod pallet_origins { - use super::ranks; - use frame_support::pallet_prelude::*; - use pallet_ranked_collective::Rank; - - #[pallet::config] - pub trait Config: frame_system::Config {} - - #[pallet::pallet] - pub struct Pallet(_); - - #[derive(PartialEq, Eq, Clone, MaxEncodedLen, Encode, Decode, TypeInfo, RuntimeDebug)] - #[pallet::origin] - pub enum Origin { - /// Origin aggregated through weighted votes of those with rank 1 or above; `Success` is 1. - /// Aka the "voice" of all Members. - Members, - /// Origin aggregated through weighted votes of those with rank 2 or above; `Success` is 2. - /// Aka the "voice" of members at least II Dan. - Fellowship2Dan, - /// Origin aggregated through weighted votes of those with rank 3 or above; `Success` is 3. - /// Aka the "voice" of all Fellows. - Fellows, - /// Origin aggregated through weighted votes of those with rank 4 or above; `Success` is 4. - /// Aka the "voice" of members at least IV Dan. - Architects, - /// Origin aggregated through weighted votes of those with rank 5 or above; `Success` is 5. - /// Aka the "voice" of members at least V Dan. - Fellowship5Dan, - /// Origin aggregated through weighted votes of those with rank 6 or above; `Success` is 6. - /// Aka the "voice" of members at least VI Dan. - Fellowship6Dan, - /// Origin aggregated through weighted votes of those with rank 7 or above; `Success` is 7. - /// Aka the "voice" of all Masters. - Masters, - /// Origin aggregated through weighted votes of those with rank 8 or above; `Success` is 8. - /// Aka the "voice" of members at least VIII Dan. - Fellowship8Dan, - /// Origin aggregated through weighted votes of those with rank 9 or above; `Success` is 9. - /// Aka the "voice" of members at least IX Dan. - Fellowship9Dan, - - /// Origin aggregated through weighted votes of those with rank 3 or above when voting on - /// a fortnight-long track; `Success` is 1. - RetainAt1Dan, - /// Origin aggregated through weighted votes of those with rank 4 or above when voting on - /// a fortnight-long track; `Success` is 2. - RetainAt2Dan, - /// Origin aggregated through weighted votes of those with rank 5 or above when voting on - /// a fortnight-long track; `Success` is 3. - RetainAt3Dan, - /// Origin aggregated through weighted votes of those with rank 6 or above when voting on - /// a fortnight-long track; `Success` is 4. - RetainAt4Dan, - /// Origin aggregated through weighted votes of those with rank 7 or above when voting on - /// a fortnight-long track; `Success` is 5. - RetainAt5Dan, - /// Origin aggregated through weighted votes of those with rank 8 or above when voting on - /// a fortnight-long track; `Success` is 6. - RetainAt6Dan, - - /// Origin aggregated through weighted votes of those with rank 3 or above when voting on - /// a month-long track; `Success` is 1. - PromoteTo1Dan, - /// Origin aggregated through weighted votes of those with rank 4 or above when voting on - /// a month-long track; `Success` is 2. - PromoteTo2Dan, - /// Origin aggregated through weighted votes of those with rank 5 or above when voting on - /// a month-long track; `Success` is 3. - PromoteTo3Dan, - /// Origin aggregated through weighted votes of those with rank 6 or above when voting on - /// a month-long track; `Success` is 4. - PromoteTo4Dan, - /// Origin aggregated through weighted votes of those with rank 7 or above when voting on - /// a month-long track; `Success` is 5. - PromoteTo5Dan, - /// Origin aggregated through weighted votes of those with rank 8 or above when voting on - /// a month-long track; `Success` is 6. - PromoteTo6Dan, - } - - impl Origin { - /// Returns the rank that the origin `self` speaks for, or `None` if it doesn't speak for - /// any. - /// - /// `Some` will be returned only for the first 9 elements of [Origin]. - pub fn as_voice(&self) -> Option { - Some(match &self { - Origin::Members => ranks::DAN_1, - Origin::Fellowship2Dan => ranks::DAN_2, - Origin::Fellows => ranks::DAN_3, - Origin::Architects => ranks::DAN_4, - Origin::Fellowship5Dan => ranks::DAN_5, - Origin::Fellowship6Dan => ranks::DAN_6, - Origin::Masters => ranks::DAN_7, - Origin::Fellowship8Dan => ranks::DAN_8, - Origin::Fellowship9Dan => ranks::DAN_9, - _ => return None, - }) - } - } - - /// A `TryMorph` implementation which is designed to convert an aggregate `RuntimeOrigin` - /// value into the Fellowship voice it represents if it is a Fellowship pallet origin an - /// appropriate variant. See also [Origin::as_voice]. - pub struct ToVoice; - impl<'a, O: 'a + TryInto<&'a Origin>> sp_runtime::traits::TryMorph for ToVoice { - type Outcome = pallet_ranked_collective::Rank; - fn try_morph(o: O) -> Result { - o.try_into().ok().and_then(Origin::as_voice).ok_or(()) - } - } - - macro_rules! decl_unit_ensures { - ( $name:ident: $success_type:ty = $success:expr ) => { - pub struct $name; - impl> + From> - EnsureOrigin for $name - { - type Success = $success_type; - fn try_origin(o: O) -> Result { - o.into().and_then(|o| match o { - Origin::$name => Ok($success), - r => Err(O::from(r)), - }) - } - #[cfg(feature = "runtime-benchmarks")] - fn try_successful_origin() -> Result { - Ok(O::from(Origin::$name)) - } - } - }; - ( $name:ident ) => { decl_unit_ensures! { $name : () = () } }; - ( $name:ident: $success_type:ty = $success:expr, $( $rest:tt )* ) => { - decl_unit_ensures! { $name: $success_type = $success } - decl_unit_ensures! { $( $rest )* } - }; - ( $name:ident, $( $rest:tt )* ) => { - decl_unit_ensures! { $name } - decl_unit_ensures! { $( $rest )* } - }; - () => {} - } - decl_unit_ensures!( - Members: Rank = ranks::DAN_1, - Fellows: Rank = ranks::DAN_3, - Architects: Rank = ranks::DAN_4, - Masters: Rank = ranks::DAN_7, - ); - - macro_rules! decl_ensure { - ( - $vis:vis type $name:ident: EnsureOrigin { - $( $item:ident = $success:expr, )* - } - ) => { - $vis struct $name; - impl> + From> - EnsureOrigin for $name - { - type Success = $success_type; - fn try_origin(o: O) -> Result { - o.into().and_then(|o| match o { - $( - Origin::$item => Ok($success), - )* - r => Err(O::from(r)), - }) - } - #[cfg(feature = "runtime-benchmarks")] - fn try_successful_origin() -> Result { - // By convention the more privileged origins go later, so for greatest chance - // of success, we want the last one. - let _result: Result = Err(()); - $( - let _result: Result = Ok(O::from(Origin::$item)); - )* - _result - } - } - } - } - - // Fellowship origin indicating weighted voting from at least the rank of `Success` on a - // week-long track. - decl_ensure! { - pub type EnsureFellowship: EnsureOrigin { - Members = ranks::DAN_1, - Fellowship2Dan = ranks::DAN_2, - Fellows = ranks::DAN_3, - Architects = ranks::DAN_4, - Fellowship5Dan = ranks::DAN_5, - Fellowship6Dan = ranks::DAN_6, - Masters = ranks::DAN_7, - Fellowship8Dan = ranks::DAN_8, - Fellowship9Dan = ranks::DAN_9, - } - } - - // Fellowship origin indicating weighted voting from at least the rank of `Success + 2` on - // a fortnight-long track; needed for Fellowship retention voting. - decl_ensure! { - pub type EnsureCanRetainAt: EnsureOrigin { - RetainAt1Dan = ranks::DAN_1, - RetainAt2Dan = ranks::DAN_2, - RetainAt3Dan = ranks::DAN_3, - RetainAt4Dan = ranks::DAN_4, - RetainAt5Dan = ranks::DAN_5, - RetainAt6Dan = ranks::DAN_6, - } - } - - // Fellowship origin indicating weighted voting from at least the rank of `Success + 2` on - // a month-long track; needed for Fellowship promotion voting. - decl_ensure! { - pub type EnsureCanPromoteTo: EnsureOrigin { - PromoteTo1Dan = ranks::DAN_1, - PromoteTo2Dan = ranks::DAN_2, - PromoteTo3Dan = ranks::DAN_3, - PromoteTo4Dan = ranks::DAN_4, - PromoteTo5Dan = ranks::DAN_5, - PromoteTo6Dan = ranks::DAN_6, - } - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/fellowship/tracks.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/fellowship/tracks.rs deleted file mode 100644 index f4ba4e05ec1..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/fellowship/tracks.rs +++ /dev/null @@ -1,532 +0,0 @@ -// Copyright (C) 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 . - -//! Track configurations for Fellowship. - -use crate::{Balance, BlockNumber, RuntimeOrigin, DAYS, DOLLARS, HOURS, MINUTES}; -use pallet_ranked_collective::Rank; -use sp_runtime::{traits::Convert, Perbill}; - -/// Referendum `TrackId` type. -pub type TrackId = u16; - -/// Referendum track IDs. -pub mod constants { - use super::TrackId; - - // Regular tracks (7 days) used for general operations. The required rank for voting is the - // same as that which is named (and also the track ID). - pub const MEMBERS: TrackId = 1; - pub const PROFICIENTS: TrackId = 2; - pub const FELLOWS: TrackId = 3; - pub const ARCHITECTS: TrackId = 4; - pub const ARCHITECTS_ADEPT: TrackId = 5; - pub const GRAND_ARCHITECTS: TrackId = 6; - pub const MASTERS: TrackId = 7; - pub const MASTERS_CONSTANT: TrackId = 8; - pub const GRAND_MASTERS: TrackId = 9; - - // Longer tracks (14 days) used for rank retention. These require a rank of two more than the - // grade at which they retain (as per the whitepaper). This works out as the track ID minus 8. - pub const RETAIN_AT_1DAN: TrackId = 11; - pub const RETAIN_AT_2DAN: TrackId = 12; - pub const RETAIN_AT_3DAN: TrackId = 13; - pub const RETAIN_AT_4DAN: TrackId = 14; - pub const RETAIN_AT_5DAN: TrackId = 15; - pub const RETAIN_AT_6DAN: TrackId = 16; - - // Longest tracks (30 days) used for promotions. These require a rank of two more than the - // grade to which they promote (as per the whitepaper). This works out as the track ID minus 18. - pub const PROMOTE_TO_1DAN: TrackId = 21; - pub const PROMOTE_TO_2DAN: TrackId = 22; - pub const PROMOTE_TO_3DAN: TrackId = 23; - pub const PROMOTE_TO_4DAN: TrackId = 24; - pub const PROMOTE_TO_5DAN: TrackId = 25; - pub const PROMOTE_TO_6DAN: TrackId = 26; -} - -/// Convert the track ID (defined above) into the minimum rank (i.e. fellowship Dan grade) required -/// to vote on the track. -pub struct MinRankOfClass; -impl Convert for MinRankOfClass { - fn convert(a: TrackId) -> Rank { - match a { - // Just a regular vote: the track ID is conveniently the same as the minimum rank. - regular @ 1..=9 => regular, - // A retention vote; the track ID turns out to be 8 more than the minimum required rank. - retention @ 11..=16 => retention - 8, - // A promotion vote; the track ID turns out to be 18 more than the minimum required - // rank. - promotion @ 21..=26 => promotion - 18, - _ => Rank::max_value(), - } - } -} - -const RETAIN_MAX_DECIDING: u32 = 25; -const RETAIN_DECISION_DEPOSIT: Balance = 5 * DOLLARS; -const RETAIN_PREPARE_PERIOD: BlockNumber = 0; -const RETAIN_DECISION_PERIOD: BlockNumber = 14 * DAYS; -const RETAIN_CONFIRM_PERIOD: BlockNumber = 1 * HOURS; -const RETAIN_MIN_ENACTMENT_PERIOD: BlockNumber = 0; -const RETAIN_MIN_APPROVAL: pallet_referenda::Curve = pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(60), - ceil: Perbill::from_percent(100), -}; -const RETAIN_MIN_SUPPORT: pallet_referenda::Curve = pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(10), - ceil: Perbill::from_percent(100), -}; - -const PROMOTE_MAX_DECIDING: u32 = 10; -const PROMOTE_DECISION_DEPOSIT: Balance = 5 * DOLLARS; -const PROMOTE_PREPARE_PERIOD: BlockNumber = 0; -const PROMOTE_DECISION_PERIOD: BlockNumber = 30 * DAYS; -const PROMOTE_CONFIRM_PERIOD: BlockNumber = 1 * HOURS; -const PROMOTE_MIN_ENACTMENT_PERIOD: BlockNumber = 0; -const PROMOTE_MIN_APPROVAL: pallet_referenda::Curve = pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(60), - ceil: Perbill::from_percent(100), -}; -const PROMOTE_MIN_SUPPORT: pallet_referenda::Curve = pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(10), - ceil: Perbill::from_percent(100), -}; - -pub struct TracksInfo; -impl pallet_referenda::TracksInfo for TracksInfo { - type Id = TrackId; - type RuntimeOrigin = ::PalletsOrigin; - fn tracks() -> &'static [(Self::Id, pallet_referenda::TrackInfo)] { - use constants as tracks; - static DATA: [(TrackId, pallet_referenda::TrackInfo); 21] = [ - ( - tracks::MEMBERS, - pallet_referenda::TrackInfo { - name: "members", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 30 * MINUTES, - decision_period: 7 * DAYS, - confirm_period: 30 * MINUTES, - min_enactment_period: 5 * MINUTES, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(0), - ceil: Perbill::from_percent(100), - }, - }, - ), - ( - tracks::PROFICIENTS, - pallet_referenda::TrackInfo { - name: "proficient members", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 30 * MINUTES, - decision_period: 7 * DAYS, - confirm_period: 30 * MINUTES, - min_enactment_period: 5 * MINUTES, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(0), - ceil: Perbill::from_percent(100), - }, - }, - ), - ( - tracks::FELLOWS, - pallet_referenda::TrackInfo { - name: "fellows", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 30 * MINUTES, - decision_period: 7 * DAYS, - confirm_period: 30 * MINUTES, - min_enactment_period: 5 * MINUTES, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(0), - ceil: Perbill::from_percent(100), - }, - }, - ), - ( - tracks::ARCHITECTS, - pallet_referenda::TrackInfo { - name: "architects", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 30 * MINUTES, - decision_period: 7 * DAYS, - confirm_period: 30 * MINUTES, - min_enactment_period: 5 * MINUTES, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(0), - ceil: Perbill::from_percent(100), - }, - }, - ), - ( - tracks::ARCHITECTS_ADEPT, - pallet_referenda::TrackInfo { - name: "architects adept", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 30 * MINUTES, - decision_period: 7 * DAYS, - confirm_period: 30 * MINUTES, - min_enactment_period: 5 * MINUTES, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(0), - ceil: Perbill::from_percent(100), - }, - }, - ), - ( - tracks::GRAND_ARCHITECTS, - pallet_referenda::TrackInfo { - name: "grand architects", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 30 * MINUTES, - decision_period: 7 * DAYS, - confirm_period: 30 * MINUTES, - min_enactment_period: 5 * MINUTES, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(0), - ceil: Perbill::from_percent(100), - }, - }, - ), - ( - tracks::MASTERS, - pallet_referenda::TrackInfo { - name: "masters", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 30 * MINUTES, - decision_period: 7 * DAYS, - confirm_period: 30 * MINUTES, - min_enactment_period: 5 * MINUTES, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(0), - ceil: Perbill::from_percent(100), - }, - }, - ), - ( - tracks::MASTERS_CONSTANT, - pallet_referenda::TrackInfo { - name: "masters constant", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 30 * MINUTES, - decision_period: 7 * DAYS, - confirm_period: 30 * MINUTES, - min_enactment_period: 5 * MINUTES, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(0), - ceil: Perbill::from_percent(100), - }, - }, - ), - ( - tracks::GRAND_MASTERS, - pallet_referenda::TrackInfo { - name: "grand masters", - max_deciding: 10, - decision_deposit: 5 * DOLLARS, - prepare_period: 30 * MINUTES, - decision_period: 7 * DAYS, - confirm_period: 30 * MINUTES, - min_enactment_period: 5 * MINUTES, - min_approval: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(50), - ceil: Perbill::from_percent(100), - }, - min_support: pallet_referenda::Curve::LinearDecreasing { - length: Perbill::from_percent(100), - floor: Perbill::from_percent(0), - ceil: Perbill::from_percent(100), - }, - }, - ), - ( - tracks::RETAIN_AT_1DAN, - pallet_referenda::TrackInfo { - name: "retain at I Dan", - max_deciding: RETAIN_MAX_DECIDING, - decision_deposit: RETAIN_DECISION_DEPOSIT, - prepare_period: RETAIN_PREPARE_PERIOD, - decision_period: RETAIN_DECISION_PERIOD, - confirm_period: RETAIN_CONFIRM_PERIOD, - min_enactment_period: RETAIN_MIN_ENACTMENT_PERIOD, - min_approval: RETAIN_MIN_APPROVAL, - min_support: RETAIN_MIN_SUPPORT, - }, - ), - ( - tracks::RETAIN_AT_2DAN, - pallet_referenda::TrackInfo { - name: "retain at II Dan", - max_deciding: RETAIN_MAX_DECIDING, - decision_deposit: RETAIN_DECISION_DEPOSIT, - prepare_period: RETAIN_PREPARE_PERIOD, - decision_period: RETAIN_DECISION_PERIOD, - confirm_period: RETAIN_CONFIRM_PERIOD, - min_enactment_period: RETAIN_MIN_ENACTMENT_PERIOD, - min_approval: RETAIN_MIN_APPROVAL, - min_support: RETAIN_MIN_SUPPORT, - }, - ), - ( - tracks::RETAIN_AT_3DAN, - pallet_referenda::TrackInfo { - name: "retain at III Dan", - max_deciding: RETAIN_MAX_DECIDING, - decision_deposit: RETAIN_DECISION_DEPOSIT, - prepare_period: RETAIN_PREPARE_PERIOD, - decision_period: RETAIN_DECISION_PERIOD, - confirm_period: RETAIN_CONFIRM_PERIOD, - min_enactment_period: RETAIN_MIN_ENACTMENT_PERIOD, - min_approval: RETAIN_MIN_APPROVAL, - min_support: RETAIN_MIN_SUPPORT, - }, - ), - ( - tracks::RETAIN_AT_4DAN, - pallet_referenda::TrackInfo { - name: "retain at IV Dan", - max_deciding: RETAIN_MAX_DECIDING, - decision_deposit: RETAIN_DECISION_DEPOSIT, - prepare_period: RETAIN_PREPARE_PERIOD, - decision_period: RETAIN_DECISION_PERIOD, - confirm_period: RETAIN_CONFIRM_PERIOD, - min_enactment_period: RETAIN_MIN_ENACTMENT_PERIOD, - min_approval: RETAIN_MIN_APPROVAL, - min_support: RETAIN_MIN_SUPPORT, - }, - ), - ( - tracks::RETAIN_AT_5DAN, - pallet_referenda::TrackInfo { - name: "retain at V Dan", - max_deciding: RETAIN_MAX_DECIDING, - decision_deposit: RETAIN_DECISION_DEPOSIT, - prepare_period: RETAIN_PREPARE_PERIOD, - decision_period: RETAIN_DECISION_PERIOD, - confirm_period: RETAIN_CONFIRM_PERIOD, - min_enactment_period: RETAIN_MIN_ENACTMENT_PERIOD, - min_approval: RETAIN_MIN_APPROVAL, - min_support: RETAIN_MIN_SUPPORT, - }, - ), - ( - tracks::RETAIN_AT_6DAN, - pallet_referenda::TrackInfo { - name: "retain at VI Dan", - max_deciding: RETAIN_MAX_DECIDING, - decision_deposit: RETAIN_DECISION_DEPOSIT, - prepare_period: RETAIN_PREPARE_PERIOD, - decision_period: RETAIN_DECISION_PERIOD, - confirm_period: RETAIN_CONFIRM_PERIOD, - min_enactment_period: RETAIN_MIN_ENACTMENT_PERIOD, - min_approval: RETAIN_MIN_APPROVAL, - min_support: RETAIN_MIN_SUPPORT, - }, - ), - ( - tracks::PROMOTE_TO_1DAN, - pallet_referenda::TrackInfo { - name: "promote to I Dan", - max_deciding: PROMOTE_MAX_DECIDING, - decision_deposit: PROMOTE_DECISION_DEPOSIT, - prepare_period: PROMOTE_PREPARE_PERIOD, - decision_period: PROMOTE_DECISION_PERIOD, - confirm_period: PROMOTE_CONFIRM_PERIOD, - min_enactment_period: PROMOTE_MIN_ENACTMENT_PERIOD, - min_approval: PROMOTE_MIN_APPROVAL, - min_support: PROMOTE_MIN_SUPPORT, - }, - ), - ( - tracks::PROMOTE_TO_2DAN, - pallet_referenda::TrackInfo { - name: "promote to II Dan", - max_deciding: PROMOTE_MAX_DECIDING, - decision_deposit: PROMOTE_DECISION_DEPOSIT, - prepare_period: PROMOTE_PREPARE_PERIOD, - decision_period: PROMOTE_DECISION_PERIOD, - confirm_period: PROMOTE_CONFIRM_PERIOD, - min_enactment_period: PROMOTE_MIN_ENACTMENT_PERIOD, - min_approval: PROMOTE_MIN_APPROVAL, - min_support: PROMOTE_MIN_SUPPORT, - }, - ), - ( - tracks::PROMOTE_TO_3DAN, - pallet_referenda::TrackInfo { - name: "promote to III Dan", - max_deciding: PROMOTE_MAX_DECIDING, - decision_deposit: PROMOTE_DECISION_DEPOSIT, - prepare_period: PROMOTE_PREPARE_PERIOD, - decision_period: PROMOTE_DECISION_PERIOD, - confirm_period: PROMOTE_CONFIRM_PERIOD, - min_enactment_period: PROMOTE_MIN_ENACTMENT_PERIOD, - min_approval: PROMOTE_MIN_APPROVAL, - min_support: PROMOTE_MIN_SUPPORT, - }, - ), - ( - tracks::PROMOTE_TO_4DAN, - pallet_referenda::TrackInfo { - name: "promote to IV Dan", - max_deciding: PROMOTE_MAX_DECIDING, - decision_deposit: PROMOTE_DECISION_DEPOSIT, - prepare_period: PROMOTE_PREPARE_PERIOD, - decision_period: PROMOTE_DECISION_PERIOD, - confirm_period: PROMOTE_CONFIRM_PERIOD, - min_enactment_period: PROMOTE_MIN_ENACTMENT_PERIOD, - min_approval: PROMOTE_MIN_APPROVAL, - min_support: PROMOTE_MIN_SUPPORT, - }, - ), - ( - tracks::PROMOTE_TO_5DAN, - pallet_referenda::TrackInfo { - name: "promote to V Dan", - max_deciding: PROMOTE_MAX_DECIDING, - decision_deposit: PROMOTE_DECISION_DEPOSIT, - prepare_period: PROMOTE_PREPARE_PERIOD, - decision_period: PROMOTE_DECISION_PERIOD, - confirm_period: PROMOTE_CONFIRM_PERIOD, - min_enactment_period: PROMOTE_MIN_ENACTMENT_PERIOD, - min_approval: PROMOTE_MIN_APPROVAL, - min_support: PROMOTE_MIN_SUPPORT, - }, - ), - ( - tracks::PROMOTE_TO_6DAN, - pallet_referenda::TrackInfo { - name: "promote to VI Dan", - max_deciding: PROMOTE_MAX_DECIDING, - decision_deposit: PROMOTE_DECISION_DEPOSIT, - prepare_period: PROMOTE_PREPARE_PERIOD, - decision_period: PROMOTE_DECISION_PERIOD, - confirm_period: PROMOTE_CONFIRM_PERIOD, - min_enactment_period: PROMOTE_MIN_ENACTMENT_PERIOD, - min_approval: PROMOTE_MIN_APPROVAL, - min_support: PROMOTE_MIN_SUPPORT, - }, - ), - ]; - &DATA[..] - } - fn track_for(id: &Self::RuntimeOrigin) -> Result { - use super::origins::Origin; - use constants as tracks; - - #[cfg(feature = "runtime-benchmarks")] - { - // For benchmarks, we enable a root origin. - // It is important that this is not available in production! - let root: Self::RuntimeOrigin = frame_system::RawOrigin::Root.into(); - if &root == id { - return Ok(tracks::GRAND_MASTERS) - } - } - - match Origin::try_from(id.clone()) { - Ok(Origin::Members) => Ok(tracks::MEMBERS), - Ok(Origin::Fellowship2Dan) => Ok(tracks::PROFICIENTS), - Ok(Origin::Fellows) => Ok(tracks::FELLOWS), - Ok(Origin::Architects) => Ok(tracks::ARCHITECTS), - Ok(Origin::Fellowship5Dan) => Ok(tracks::ARCHITECTS_ADEPT), - Ok(Origin::Fellowship6Dan) => Ok(tracks::GRAND_ARCHITECTS), - Ok(Origin::Masters) => Ok(tracks::MASTERS), - Ok(Origin::Fellowship8Dan) => Ok(tracks::MASTERS_CONSTANT), - Ok(Origin::Fellowship9Dan) => Ok(tracks::GRAND_MASTERS), - - Ok(Origin::RetainAt1Dan) => Ok(tracks::RETAIN_AT_1DAN), - Ok(Origin::RetainAt2Dan) => Ok(tracks::RETAIN_AT_2DAN), - Ok(Origin::RetainAt3Dan) => Ok(tracks::RETAIN_AT_3DAN), - Ok(Origin::RetainAt4Dan) => Ok(tracks::RETAIN_AT_4DAN), - Ok(Origin::RetainAt5Dan) => Ok(tracks::RETAIN_AT_5DAN), - Ok(Origin::RetainAt6Dan) => Ok(tracks::RETAIN_AT_6DAN), - - Ok(Origin::PromoteTo1Dan) => Ok(tracks::PROMOTE_TO_1DAN), - Ok(Origin::PromoteTo2Dan) => Ok(tracks::PROMOTE_TO_2DAN), - Ok(Origin::PromoteTo3Dan) => Ok(tracks::PROMOTE_TO_3DAN), - Ok(Origin::PromoteTo4Dan) => Ok(tracks::PROMOTE_TO_4DAN), - Ok(Origin::PromoteTo5Dan) => Ok(tracks::PROMOTE_TO_5DAN), - Ok(Origin::PromoteTo6Dan) => Ok(tracks::PROMOTE_TO_6DAN), - - _ => Err(()), - } - } -} -pallet_referenda::impl_tracksinfo_get!(TracksInfo, Balance, BlockNumber); diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs deleted file mode 100644 index 9f4c2a6a4c9..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs +++ /dev/null @@ -1,229 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use crate::OriginCaller; -use frame_support::{ - dispatch::DispatchResultWithPostInfo, - traits::{Currency, Get, Imbalance, OnUnbalanced, OriginTrait, PrivilegeCmp}, - weights::Weight, -}; -use log; -use pallet_alliance::{ProposalIndex, ProposalProvider}; -use parachains_common::impls::NegativeImbalance; -use sp_runtime::DispatchError; -use sp_std::{cmp::Ordering, marker::PhantomData, prelude::*}; -use xcm::latest::{Fungibility, Junction, Parent}; - -type AccountIdOf = ::AccountId; - -type ProposalOf = >::Proposal; - -type HashOf = ::Hash; - -/// Type alias to conveniently refer to the `Currency::Balance` associated type. -pub type BalanceOf = - as Currency<::AccountId>>::Balance; - -/// Implements `OnUnbalanced::on_unbalanced` to teleport slashed assets to relay chain treasury -/// account. -pub struct ToParentTreasury( - PhantomData<(TreasuryAccount, PalletAccount, T)>, -); - -impl OnUnbalanced> - for ToParentTreasury -where - T: pallet_balances::Config + pallet_xcm::Config + frame_system::Config, - <::RuntimeOrigin as OriginTrait>::AccountId: From>, - [u8; 32]: From<::AccountId>, - TreasuryAccount: Get>, - PalletAccount: Get>, - BalanceOf: Into, -{ - fn on_unbalanced(amount: NegativeImbalance) { - let amount = match amount.drop_zero() { - Ok(..) => return, - Err(amount) => amount, - }; - let imbalance = amount.peek(); - let pallet_acc: AccountIdOf = PalletAccount::get(); - let treasury_acc: AccountIdOf = TreasuryAccount::get(); - - >::resolve_creating(&pallet_acc, amount); - - let result = >::teleport_assets( - <::RuntimeOrigin>::signed(pallet_acc.into()), - Box::new(Parent.into()), - Box::new( - Junction::AccountId32 { network: None, id: treasury_acc.into() } - .into_location() - .into(), - ), - Box::new((Parent, imbalance).into()), - 0, - ); - - if let Err(err) = result { - log::warn!("Failed to teleport slashed assets: {:?}", err); - } - } -} - -/// Proposal provider for alliance pallet. -/// Adapter from collective pallet to alliance proposal provider trait. -pub struct AllianceProposalProvider(PhantomData<(T, I)>); - -impl ProposalProvider, HashOf, ProposalOf> - for AllianceProposalProvider -where - T: pallet_collective::Config + frame_system::Config, - I: 'static, -{ - fn propose_proposal( - who: AccountIdOf, - threshold: u32, - proposal: Box>, - length_bound: u32, - ) -> Result<(u32, u32), DispatchError> { - pallet_collective::Pallet::::do_propose_proposed( - who, - threshold, - proposal, - length_bound, - ) - } - - fn vote_proposal( - who: AccountIdOf, - proposal: HashOf, - index: ProposalIndex, - approve: bool, - ) -> Result { - pallet_collective::Pallet::::do_vote(who, proposal, index, approve) - } - - fn close_proposal( - proposal_hash: HashOf, - proposal_index: ProposalIndex, - proposal_weight_bound: Weight, - length_bound: u32, - ) -> DispatchResultWithPostInfo { - pallet_collective::Pallet::::do_close( - proposal_hash, - proposal_index, - proposal_weight_bound, - length_bound, - ) - } - - fn proposal_of(proposal_hash: HashOf) -> Option> { - pallet_collective::Pallet::::proposal_of(proposal_hash) - } -} - -/// Used to compare the privilege of an origin inside the scheduler. -pub struct EqualOrGreatestRootCmp; - -impl PrivilegeCmp for EqualOrGreatestRootCmp { - fn cmp_privilege(left: &OriginCaller, right: &OriginCaller) -> Option { - if left == right { - return Some(Ordering::Equal) - } - match (left, right) { - // Root is greater than anything. - (OriginCaller::system(frame_system::RawOrigin::Root), _) => Some(Ordering::Greater), - _ => None, - } - } -} - -#[cfg(feature = "runtime-benchmarks")] -pub mod benchmarks { - use super::*; - use crate::ParachainSystem; - use cumulus_primitives_core::{ChannelStatus, GetChannelInfo}; - use frame_support::traits::{ - fungible, - tokens::{Pay, PaymentStatus}, - }; - use pallet_ranked_collective::Rank; - use parachains_common::{AccountId, Balance}; - use sp_runtime::traits::Convert; - - /// Rank to salary conversion helper type. - pub struct RankToSalary(PhantomData); - impl Convert for RankToSalary - where - Fungible: fungible::Inspect, - { - fn convert(r: Rank) -> Balance { - Balance::from(r).saturating_mul(Fungible::minimum_balance()) - } - } - - /// Trait for setting up any prerequisites for successful execution of benchmarks. - pub trait EnsureSuccessful { - fn ensure_successful(); - } - - /// Implementation of the [`EnsureSuccessful`] trait which opens an HRMP channel between - /// the Collectives and a parachain with a given ID. - pub struct OpenHrmpChannel(PhantomData); - impl> EnsureSuccessful for OpenHrmpChannel { - fn ensure_successful() { - if let ChannelStatus::Closed = ParachainSystem::get_channel_status(I::get().into()) { - ParachainSystem::open_outbound_hrmp_channel_for_benchmarks_or_tests(I::get().into()) - } - } - } - - /// Type that wraps a type implementing the [`Pay`] trait to decorate its - /// [`Pay::ensure_successful`] function with a provided implementation of the - /// [`EnsureSuccessful`] trait. - pub struct PayWithEnsure(PhantomData<(O, E)>); - impl Pay for PayWithEnsure - where - O: Pay, - E: EnsureSuccessful, - { - type AssetKind = O::AssetKind; - type Balance = O::Balance; - type Beneficiary = O::Beneficiary; - type Error = O::Error; - type Id = O::Id; - - fn pay( - who: &Self::Beneficiary, - asset_kind: Self::AssetKind, - amount: Self::Balance, - ) -> Result { - O::pay(who, asset_kind, amount) - } - fn check_payment(id: Self::Id) -> PaymentStatus { - O::check_payment(id) - } - fn ensure_successful( - who: &Self::Beneficiary, - asset_kind: Self::AssetKind, - amount: Self::Balance, - ) { - E::ensure_successful(); - O::ensure_successful(who, asset_kind, amount) - } - fn ensure_concluded(id: Self::Id) { - O::ensure_concluded(id) - } - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs deleted file mode 100644 index 90c44f8bfc5..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs +++ /dev/null @@ -1,1031 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! # Collectives Parachain -//! -//! This parachain is for collectives that serve the Polkadot network. -//! Each collective is defined by a specialized (possibly instanced) pallet. -//! -//! ### Governance -//! -//! As a system parachain, Collectives defers its governance (namely, its `Root` origin), to -//! its Relay Chain parent, Polkadot. -//! -//! ### Collator Selection -//! -//! Collectives uses `pallet-collator-selection`, a simple first-come-first-served registration -//! system where collators can reserve a small bond to join the block producer set. There is no -//! slashing. Collective members are generally expected to run collators. - -#![cfg_attr(not(feature = "std"), no_std)] -#![recursion_limit = "256"] - -// Make the WASM binary available. -#[cfg(feature = "std")] -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -pub mod ambassador; -pub mod impls; -mod weights; -pub mod xcm_config; -// Fellowship configurations. -pub mod fellowship; -pub use ambassador::pallet_ambassador_origins; - -use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; -use fellowship::{ - migration::import_kusama_fellowship, pallet_fellowship_origins, Fellows, - FellowshipCollectiveInstance, -}; -use impls::{AllianceProposalProvider, EqualOrGreatestRootCmp, ToParentTreasury}; -use sp_api::impl_runtime_apis; -use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; -use sp_runtime::{ - create_runtime_str, generic, impl_opaque_keys, - traits::{AccountIdConversion, AccountIdLookup, BlakeTwo256, Block as BlockT}, - transaction_validity::{TransactionSource, TransactionValidity}, - ApplyExtrinsicResult, Perbill, -}; - -use sp_std::prelude::*; -#[cfg(feature = "std")] -use sp_version::NativeVersion; -use sp_version::RuntimeVersion; - -use codec::{Decode, Encode, MaxEncodedLen}; -use cumulus_primitives_core::{AggregateMessageOrigin, ParaId}; -use frame_support::{ - construct_runtime, - dispatch::DispatchClass, - genesis_builder_helper::{build_config, create_default_config}, - parameter_types, - traits::{ - fungible::HoldConsideration, ConstBool, ConstU16, ConstU32, ConstU64, ConstU8, - EitherOfDiverse, InstanceFilter, LinearStoragePrice, TransformOrigin, - }, - weights::{ConstantMultiplier, Weight}, - PalletId, -}; -use frame_system::{ - limits::{BlockLength, BlockWeights}, - EnsureRoot, -}; -pub use parachains_common as common; -use parachains_common::{ - impls::DealWithFees, - message_queue::*, - polkadot::{account::*, consensus::*, currency::*, fee::WeightToFee}, - AccountId, AuraId, Balance, BlockNumber, Hash, Header, Nonce, Signature, - AVERAGE_ON_INITIALIZE_RATIO, DAYS, HOURS, MAXIMUM_BLOCK_WEIGHT, MINUTES, NORMAL_DISPATCH_RATIO, - SLOT_DURATION, -}; -use sp_runtime::RuntimeDebug; -use xcm_config::{GovernanceLocation, XcmOriginToTransactDispatchOrigin}; - -#[cfg(any(feature = "std", test))] -pub use sp_runtime::BuildStorage; - -// Polkadot imports -use pallet_xcm::{EnsureXcm, IsVoiceOfBody}; -use polkadot_runtime_common::{BlockHashCount, SlowAdjustingFeeUpdate}; -use xcm::latest::{prelude::*, BodyId}; - -use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight}; - -impl_opaque_keys! { - pub struct SessionKeys { - pub aura: Aura, - } -} - -#[sp_version::runtime_version] -pub const VERSION: RuntimeVersion = RuntimeVersion { - spec_name: create_runtime_str!("collectives"), - impl_name: create_runtime_str!("collectives"), - authoring_version: 1, - spec_version: 1_004_000, - impl_version: 0, - apis: RUNTIME_API_VERSIONS, - transaction_version: 5, - state_version: 0, -}; - -/// The version information used to identify this runtime when compiled natively. -#[cfg(feature = "std")] -pub fn native_version() -> NativeVersion { - NativeVersion { runtime_version: VERSION, can_author_with: Default::default() } -} - -/// Privileged origin that represents Root or more than two thirds of the Alliance. -pub type RootOrAllianceTwoThirdsMajority = EitherOfDiverse< - EnsureRoot, - pallet_collective::EnsureProportionMoreThan, ->; - -parameter_types! { - pub const Version: RuntimeVersion = VERSION; - pub RuntimeBlockLength: BlockLength = - BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); - pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() - .base_block(BlockExecutionWeight::get()) - .for_class(DispatchClass::all(), |weights| { - weights.base_extrinsic = ExtrinsicBaseWeight::get(); - }) - .for_class(DispatchClass::Normal, |weights| { - weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); - }) - .for_class(DispatchClass::Operational, |weights| { - weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT); - // Operational transactions have some extra reserved space, so that they - // are included even if block reached `MAXIMUM_BLOCK_WEIGHT`. - weights.reserved = Some( - MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT - ); - }) - .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO) - .build_or_panic(); -} - -// Configure FRAME pallets to include in runtime. -impl frame_system::Config for Runtime { - type BaseCallFilter = frame_support::traits::Everything; - type BlockWeights = RuntimeBlockWeights; - type BlockLength = RuntimeBlockLength; - type AccountId = AccountId; - type RuntimeCall = RuntimeCall; - type Lookup = AccountIdLookup; - type Nonce = Nonce; - type Hash = Hash; - type Hashing = BlakeTwo256; - type Block = Block; - type RuntimeEvent = RuntimeEvent; - type RuntimeOrigin = RuntimeOrigin; - type BlockHashCount = BlockHashCount; - type DbWeight = RocksDbWeight; - type Version = Version; - type PalletInfo = PalletInfo; - type OnNewAccount = (); - type OnKilledAccount = (); - type AccountData = pallet_balances::AccountData; - type SystemWeightInfo = weights::frame_system::WeightInfo; - type SS58Prefix = ConstU16<0>; - type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode; - type MaxConsumers = frame_support::traits::ConstU32<16>; -} - -impl pallet_timestamp::Config for Runtime { - /// A timestamp: milliseconds since the unix epoch. - type Moment = u64; - type OnTimestampSet = Aura; - type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; - type WeightInfo = weights::pallet_timestamp::WeightInfo; -} - -impl pallet_authorship::Config for Runtime { - type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type EventHandler = (CollatorSelection,); -} - -parameter_types! { - pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; -} - -impl pallet_balances::Config for Runtime { - type MaxLocks = ConstU32<50>; - /// The type for recording an account's balance. - type Balance = Balance; - /// The ubiquitous event type. - type RuntimeEvent = RuntimeEvent; - type DustRemoval = (); - type ExistentialDeposit = ExistentialDeposit; - type AccountStore = System; - type WeightInfo = weights::pallet_balances::WeightInfo; - type MaxReserves = ConstU32<50>; - type ReserveIdentifier = [u8; 8]; - type RuntimeHoldReason = RuntimeHoldReason; - type RuntimeFreezeReason = RuntimeFreezeReason; - type FreezeIdentifier = (); - type MaxHolds = ConstU32<1>; - type MaxFreezes = ConstU32<0>; -} - -parameter_types! { - /// Relay Chain `TransactionByteFee` / 10 - pub const TransactionByteFee: Balance = MILLICENTS; -} - -impl pallet_transaction_payment::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type OnChargeTransaction = - pallet_transaction_payment::CurrencyAdapter>; - type WeightToFee = WeightToFee; - type LengthToFee = ConstantMultiplier; - type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; - type OperationalFeeMultiplier = ConstU8<5>; -} - -parameter_types! { - // One storage item; key size is 32; value is size 4+4+16+32 bytes = 56 bytes. - pub const DepositBase: Balance = deposit(1, 88); - // Additional storage item size of 32 bytes. - pub const DepositFactor: Balance = deposit(0, 32); -} - -impl pallet_multisig::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type Currency = Balances; - type DepositBase = DepositBase; - type DepositFactor = DepositFactor; - type MaxSignatories = ConstU32<100>; - type WeightInfo = weights::pallet_multisig::WeightInfo; -} - -impl pallet_utility::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type PalletsOrigin = OriginCaller; - type WeightInfo = weights::pallet_utility::WeightInfo; -} - -parameter_types! { - // One storage item; key size 32, value size 8; . - pub const ProxyDepositBase: Balance = deposit(1, 40); - // Additional storage item size of 33 bytes. - pub const ProxyDepositFactor: Balance = deposit(0, 33); - // One storage item; key size 32, value size 16 - pub const AnnouncementDepositBase: Balance = deposit(1, 48); - pub const AnnouncementDepositFactor: Balance = deposit(0, 66); -} - -/// The type used to represent the kinds of proxying allowed. -#[derive( - Copy, - Clone, - Eq, - PartialEq, - Ord, - PartialOrd, - Encode, - Decode, - RuntimeDebug, - MaxEncodedLen, - scale_info::TypeInfo, -)] -pub enum ProxyType { - /// Fully permissioned proxy. Can execute any call on behalf of _proxied_. - Any, - /// Can execute any call that does not transfer funds. - NonTransfer, - /// Proxy with the ability to reject time-delay proxy announcements. - CancelProxy, - /// Collator selection proxy. Can execute calls related to collator selection mechanism. - Collator, - /// Alliance proxy. Allows calls related to the Alliance. - Alliance, - /// Fellowship proxy. Allows calls related to the Fellowship. - Fellowship, - /// Ambassador proxy. Allows calls related to the Ambassador Program. - Ambassador, -} -impl Default for ProxyType { - fn default() -> Self { - Self::Any - } -} -impl InstanceFilter for ProxyType { - fn filter(&self, c: &RuntimeCall) -> bool { - match self { - ProxyType::Any => true, - ProxyType::NonTransfer => !matches!(c, RuntimeCall::Balances { .. }), - ProxyType::CancelProxy => matches!( - c, - RuntimeCall::Proxy(pallet_proxy::Call::reject_announcement { .. }) | - RuntimeCall::Utility { .. } | - RuntimeCall::Multisig { .. } - ), - ProxyType::Collator => matches!( - c, - RuntimeCall::CollatorSelection { .. } | - RuntimeCall::Utility { .. } | - RuntimeCall::Multisig { .. } - ), - ProxyType::Alliance => matches!( - c, - RuntimeCall::AllianceMotion { .. } | - RuntimeCall::Alliance { .. } | - RuntimeCall::Utility { .. } | - RuntimeCall::Multisig { .. } - ), - ProxyType::Fellowship => matches!( - c, - RuntimeCall::FellowshipCollective { .. } | - RuntimeCall::FellowshipReferenda { .. } | - RuntimeCall::FellowshipCore { .. } | - RuntimeCall::FellowshipSalary { .. } | - RuntimeCall::Utility { .. } | - RuntimeCall::Multisig { .. } - ), - ProxyType::Ambassador => matches!( - c, - RuntimeCall::AmbassadorCollective { .. } | - RuntimeCall::AmbassadorReferenda { .. } | - RuntimeCall::AmbassadorContent { .. } | - RuntimeCall::AmbassadorCore { .. } | - RuntimeCall::AmbassadorSalary { .. } | - RuntimeCall::Utility { .. } | - RuntimeCall::Multisig { .. } - ), - } - } - fn is_superset(&self, o: &Self) -> bool { - match (self, o) { - (x, y) if x == y => true, - (ProxyType::Any, _) => true, - (_, ProxyType::Any) => false, - (ProxyType::NonTransfer, _) => true, - _ => false, - } - } -} - -impl pallet_proxy::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type Currency = Balances; - type ProxyType = ProxyType; - type ProxyDepositBase = ProxyDepositBase; - type ProxyDepositFactor = ProxyDepositFactor; - type MaxProxies = ConstU32<32>; - type WeightInfo = weights::pallet_proxy::WeightInfo; - type MaxPending = ConstU32<32>; - type CallHasher = BlakeTwo256; - type AnnouncementDepositBase = AnnouncementDepositBase; - type AnnouncementDepositFactor = AnnouncementDepositFactor; -} - -parameter_types! { - 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 { - type WeightInfo = weights::cumulus_pallet_parachain_system::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type OnSystemEvent = (); - type SelfParaId = parachain_info::Pallet; - type DmpQueue = frame_support::traits::EnqueueWithOrigin; - type ReservedDmpWeight = ReservedDmpWeight; - type OutboundXcmpMessageSource = XcmpQueue; - type XcmpMessageHandler = XcmpQueue; - type ReservedXcmpWeight = ReservedXcmpWeight; - type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; - type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< - Runtime, - RELAY_CHAIN_SLOT_DURATION_MILLIS, - BLOCK_PROCESSING_VELOCITY, - UNINCLUDED_SEGMENT_CAPACITY, - >; -} - -impl parachain_info::Config for Runtime {} - -parameter_types! { - pub MessageQueueServiceWeight: Weight = Perbill::from_percent(35) * RuntimeBlockWeights::get().max_block; -} - -impl pallet_message_queue::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = weights::pallet_message_queue::WeightInfo; - #[cfg(feature = "runtime-benchmarks")] - type MessageProcessor = pallet_message_queue::mock_helpers::NoopMessageProcessor< - cumulus_primitives_core::AggregateMessageOrigin, - >; - #[cfg(not(feature = "runtime-benchmarks"))] - type MessageProcessor = xcm_builder::ProcessXcmMessage< - AggregateMessageOrigin, - xcm_executor::XcmExecutor, - RuntimeCall, - >; - type Size = u32; - // The XCMP queue pallet is only ever able to handle the `Sibling(ParaId)` origin: - type QueueChangeHandler = NarrowOriginToSibling; - type QueuePausedQuery = NarrowOriginToSibling; - type HeapSize = sp_core::ConstU32<{ 64 * 1024 }>; - type MaxStale = sp_core::ConstU32<8>; - type ServiceWeight = MessageQueueServiceWeight; -} - -impl cumulus_pallet_aura_ext::Config for Runtime {} - -parameter_types! { - /// The asset ID for the asset that we use to pay for message delivery fees. - pub FeeAssetId: AssetId = Concrete(xcm_config::DotLocation::get()); - /// The base fee for the message delivery fees. - pub const BaseDeliveryFee: u128 = CENTS.saturating_mul(3); -} - -pub type PriceForSiblingParachainDelivery = polkadot_runtime_common::xcm_sender::ExponentialPrice< - FeeAssetId, - BaseDeliveryFee, - TransactionByteFee, - XcmpQueue, ->; - -impl cumulus_pallet_xcmp_queue::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type ChannelInfo = ParachainSystem; - type VersionWrapper = PolkadotXcm; - // Enqueue XCMP messages from siblings for later processing. - type XcmpQueue = TransformOrigin; - type MaxInboundSuspended = sp_core::ConstU32<1_000>; - type ControllerOrigin = EitherOfDiverse, Fellows>; - type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; - type WeightInfo = weights::cumulus_pallet_xcmp_queue::WeightInfo; - type PriceForSiblingDelivery = - polkadot_runtime_common::xcm_sender::NoPriceForMessageDelivery; -} - -parameter_types! { - pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; -} - -impl cumulus_pallet_dmp_queue::Config for Runtime { - type WeightInfo = weights::cumulus_pallet_dmp_queue::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type DmpSink = frame_support::traits::EnqueueWithOrigin; -} - -pub const PERIOD: u32 = 6 * HOURS; -pub const OFFSET: u32 = 0; - -impl pallet_session::Config for Runtime { - 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; - type ShouldEndSession = pallet_session::PeriodicSessions, ConstU32>; - type NextSessionRotation = pallet_session::PeriodicSessions, ConstU32>; - type SessionManager = CollatorSelection; - // Essentially just Aura, but let's be pedantic. - type SessionHandler = ::KeyTypeIdProviders; - type Keys = SessionKeys; - type WeightInfo = weights::pallet_session::WeightInfo; -} - -impl pallet_aura::Config for Runtime { - type AuthorityId = AuraId; - type DisabledValidators = (); - type MaxAuthorities = ConstU32<100_000>; - type AllowMultipleBlocksPerSlot = ConstBool; - #[cfg(feature = "experimental")] - type SlotDuration = pallet_aura::MinimumPeriodTimesTwo; -} - -parameter_types! { - pub const PotId: PalletId = PalletId(*b"PotStake"); - pub const SessionLength: BlockNumber = 6 * HOURS; - // `StakingAdmin` pluralistic body. - pub const StakingAdminBodyId: BodyId = BodyId::Defense; -} - -/// We allow root and the `StakingAdmin` to execute privileged collator selection operations. -pub type CollatorSelectionUpdateOrigin = EitherOfDiverse< - EnsureRoot, - EnsureXcm>, ->; - -impl pallet_collator_selection::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type UpdateOrigin = CollatorSelectionUpdateOrigin; - type PotId = PotId; - type MaxCandidates = ConstU32<100>; - type MinEligibleCollators = ConstU32<4>; - type MaxInvulnerables = ConstU32<20>; - // should be a multiple of session or things will get inconsistent - type KickThreshold = ConstU32; - type ValidatorId = ::AccountId; - type ValidatorIdOf = pallet_collator_selection::IdentityCollator; - type ValidatorRegistration = Session; - type WeightInfo = weights::pallet_collator_selection::WeightInfo; -} - -pub const ALLIANCE_MOTION_DURATION: BlockNumber = 5 * DAYS; - -parameter_types! { - pub const AllianceMotionDuration: BlockNumber = ALLIANCE_MOTION_DURATION; - pub MaxProposalWeight: Weight = Perbill::from_percent(50) * RuntimeBlockWeights::get().max_block; -} -pub const ALLIANCE_MAX_PROPOSALS: u32 = 100; -pub const ALLIANCE_MAX_MEMBERS: u32 = 100; - -type AllianceCollective = pallet_collective::Instance1; -impl pallet_collective::Config for Runtime { - type RuntimeOrigin = RuntimeOrigin; - type Proposal = RuntimeCall; - type RuntimeEvent = RuntimeEvent; - type MotionDuration = AllianceMotionDuration; - type MaxProposals = ConstU32; - type MaxMembers = ConstU32; - type DefaultVote = pallet_collective::MoreThanMajorityThenPrimeDefaultVote; - type SetMembersOrigin = EnsureRoot; - type WeightInfo = weights::pallet_collective::WeightInfo; - type MaxProposalWeight = MaxProposalWeight; -} - -pub const MAX_FELLOWS: u32 = ALLIANCE_MAX_MEMBERS; -pub const MAX_ALLIES: u32 = 100; - -parameter_types! { - pub const AllyDeposit: Balance = 1_000 * UNITS; // 1,000 DOT bond to join as an Ally - // The Alliance pallet account, used as a temporary place to deposit a slashed imbalance - // before the teleport to the Treasury. - pub AlliancePalletAccount: AccountId = ALLIANCE_PALLET_ID.into_account_truncating(); - pub PolkadotTreasuryAccount: AccountId = POLKADOT_TREASURY_PALLET_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 { - type RuntimeEvent = RuntimeEvent; - type Proposal = RuntimeCall; - type AdminOrigin = RootOrAllianceTwoThirdsMajority; - type MembershipManager = RootOrAllianceTwoThirdsMajority; - type AnnouncementOrigin = RootOrAllianceTwoThirdsMajority; - type Currency = Balances; - 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; - type MaxFellows = ConstU32; - type MaxAllies = ConstU32; - type MaxUnscrupulousItems = ConstU32<100>; - type MaxWebsiteUrlLength = ConstU32<255>; - type MaxAnnouncementsCount = ConstU32<100>; - type MaxMembersCount = ConstU32; - type AllyDeposit = AllyDeposit; - type WeightInfo = weights::pallet_alliance::WeightInfo; -} - -parameter_types! { - pub MaximumSchedulerWeight: Weight = Perbill::from_percent(80) * RuntimeBlockWeights::get().max_block; -} - -#[cfg(not(feature = "runtime-benchmarks"))] -parameter_types! { - pub const MaxScheduledPerBlock: u32 = 50; -} - -#[cfg(feature = "runtime-benchmarks")] -parameter_types! { - pub const MaxScheduledPerBlock: u32 = 200; -} - -impl pallet_scheduler::Config for Runtime { - type RuntimeOrigin = RuntimeOrigin; - type RuntimeEvent = RuntimeEvent; - type PalletsOrigin = OriginCaller; - type RuntimeCall = RuntimeCall; - type MaximumWeight = MaximumSchedulerWeight; - type ScheduleOrigin = EnsureRoot; - type MaxScheduledPerBlock = MaxScheduledPerBlock; - type WeightInfo = weights::pallet_scheduler::WeightInfo; - type OriginPrivilegeCmp = EqualOrGreatestRootCmp; - type Preimages = Preimage; -} - -parameter_types! { - pub const PreimageBaseDeposit: Balance = deposit(2, 64); - pub const PreimageByteDeposit: Balance = deposit(0, 1); - pub const PreimageHoldReason: RuntimeHoldReason = RuntimeHoldReason::Preimage(pallet_preimage::HoldReason::Preimage); -} - -impl pallet_preimage::Config for Runtime { - type WeightInfo = weights::pallet_preimage::WeightInfo; - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type ManagerOrigin = EnsureRoot; - type Consideration = HoldConsideration< - AccountId, - Balances, - PreimageHoldReason, - LinearStoragePrice, - >; -} - -// Create the runtime by composing the FRAME pallets that were previously configured. -construct_runtime!( - pub enum Runtime - { - // System support stuff. - System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, - ParachainSystem: cumulus_pallet_parachain_system::{ - Pallet, Call, Config, Storage, Inherent, Event, ValidateUnsigned, - } = 1, - Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, - ParachainInfo: parachain_info::{Pallet, Storage, Config} = 3, - - // Monetary stuff. - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event} = 10, - TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event} = 11, - - // Collator support. the order of these 5 are important and shall not change. - Authorship: pallet_authorship::{Pallet, Storage} = 20, - CollatorSelection: pallet_collator_selection::{Pallet, Call, Storage, Event, Config} = 21, - Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 22, - Aura: pallet_aura::{Pallet, Storage, Config} = 23, - AuraExt: cumulus_pallet_aura_ext::{Pallet, Storage, Config} = 24, - - // XCM helpers. - XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event} = 30, - PolkadotXcm: pallet_xcm::{Pallet, Call, Storage, Event, Origin, Config} = 31, - CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 32, - DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 33, - MessageQueue: pallet_message_queue::{Pallet, Call, Storage, Event} = 34, - - // Handy utilities. - Utility: pallet_utility::{Pallet, Call, Event} = 40, - Multisig: pallet_multisig::{Pallet, Call, Storage, Event} = 41, - Proxy: pallet_proxy::{Pallet, Call, Storage, Event} = 42, - Preimage: pallet_preimage::{Pallet, Call, Storage, Event, HoldReason} = 43, - Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event} = 44, - - // The main stage. - - // The Alliance. - Alliance: pallet_alliance::{Pallet, Call, Storage, Event, Config} = 50, - AllianceMotion: pallet_collective::::{Pallet, Call, Storage, Origin, Event, Config} = 51, - - // The Fellowship. - // pub type FellowshipCollectiveInstance = pallet_ranked_collective::Instance1; - FellowshipCollective: pallet_ranked_collective::::{Pallet, Call, Storage, Event} = 60, - // pub type FellowshipReferendaInstance = pallet_referenda::Instance1; - FellowshipReferenda: pallet_referenda::::{Pallet, Call, Storage, Event} = 61, - FellowshipOrigins: pallet_fellowship_origins::{Origin} = 62, - // pub type FellowshipCoreInstance = pallet_core_fellowship::Instance1; - FellowshipCore: pallet_core_fellowship::::{Pallet, Call, Storage, Event} = 63, - // pub type FellowshipSalaryInstance = pallet_salary::Instance1; - FellowshipSalary: pallet_salary::::{Pallet, Call, Storage, Event} = 64, - - // Ambassador Program. - AmbassadorCollective: pallet_ranked_collective::::{Pallet, Call, Storage, Event} = 70, - AmbassadorReferenda: pallet_referenda::::{Pallet, Call, Storage, Event} = 71, - AmbassadorOrigins: pallet_ambassador_origins::{Origin} = 72, - AmbassadorCore: pallet_core_fellowship::::{Pallet, Call, Storage, Event} = 73, - AmbassadorSalary: pallet_salary::::{Pallet, Call, Storage, Event} = 74, - AmbassadorContent: pallet_collective_content::::{Pallet, Call, Storage, Event} = 75, - } -); - -/// The address format for describing accounts. -pub type Address = sp_runtime::MultiAddress; -/// Block type as expected by this runtime. -pub type Block = generic::Block; -/// A Block signed with a Justification -pub type SignedBlock = generic::SignedBlock; -/// BlockId type as expected by this runtime. -pub type BlockId = generic::BlockId; -/// The SignedExtension to the basic transaction logic. -pub type SignedExtra = ( - frame_system::CheckNonZeroSender, - frame_system::CheckSpecVersion, - frame_system::CheckTxVersion, - frame_system::CheckGenesis, - frame_system::CheckEra, - frame_system::CheckNonce, - frame_system::CheckWeight, -); -/// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = - generic::UncheckedExtrinsic; -/// All migrations executed on runtime upgrade as a nested tuple of types implementing -/// `OnRuntimeUpgrade`. Included migrations must be idempotent. -type Migrations = ( - // v9420 - import_kusama_fellowship::Migration, - // unreleased - pallet_collator_selection::migration::v1::MigrateToV1, -); - -/// Executive: handles dispatch to the various modules. -pub type Executive = frame_executive::Executive< - Runtime, - Block, - frame_system::ChainContext, - Runtime, - AllPalletsWithSystem, - Migrations, ->; - -#[cfg(feature = "runtime-benchmarks")] -mod benches { - frame_benchmarking::define_benchmarks!( - [frame_system, SystemBench::] - [pallet_balances, Balances] - [pallet_message_queue, MessageQueue] - [pallet_multisig, Multisig] - [pallet_proxy, Proxy] - [pallet_session, SessionBench::] - [pallet_utility, Utility] - [pallet_timestamp, Timestamp] - [pallet_collator_selection, CollatorSelection] - [cumulus_pallet_parachain_system, ParachainSystem] - [cumulus_pallet_xcmp_queue, XcmpQueue] - [cumulus_pallet_dmp_queue, DmpQueue] - [pallet_alliance, Alliance] - [pallet_collective, AllianceMotion] - [pallet_xcm, PalletXcmExtrinsicsBenchmark::] - [pallet_preimage, Preimage] - [pallet_scheduler, Scheduler] - [pallet_referenda, FellowshipReferenda] - [pallet_ranked_collective, FellowshipCollective] - [pallet_core_fellowship, FellowshipCore] - [pallet_salary, FellowshipSalary] - [pallet_referenda, AmbassadorReferenda] - [pallet_ranked_collective, AmbassadorCollective] - [pallet_collective_content, AmbassadorContent] - [pallet_core_fellowship, AmbassadorCore] - [pallet_salary, AmbassadorSalary] - ); -} - -impl_runtime_apis! { - impl sp_consensus_aura::AuraApi for Runtime { - fn slot_duration() -> sp_consensus_aura::SlotDuration { - sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) - } - - fn authorities() -> Vec { - Aura::authorities().into_inner() - } - } - - impl sp_api::Core for Runtime { - fn version() -> RuntimeVersion { - VERSION - } - - fn execute_block(block: Block) { - Executive::execute_block(block) - } - - fn initialize_block(header: &::Header) { - Executive::initialize_block(header) - } - } - - impl sp_api::Metadata for Runtime { - fn metadata() -> OpaqueMetadata { - OpaqueMetadata::new(Runtime::metadata().into()) - } - - fn metadata_at_version(version: u32) -> Option { - Runtime::metadata_at_version(version) - } - - fn metadata_versions() -> sp_std::vec::Vec { - Runtime::metadata_versions() - } - } - - impl sp_block_builder::BlockBuilder for Runtime { - fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyExtrinsicResult { - Executive::apply_extrinsic(extrinsic) - } - - fn finalize_block() -> ::Header { - Executive::finalize_block() - } - - fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { - data.create_extrinsics() - } - - fn check_inherents( - block: Block, - data: sp_inherents::InherentData, - ) -> sp_inherents::CheckInherentsResult { - data.check_extrinsics(&block) - } - } - - impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { - fn validate_transaction( - source: TransactionSource, - tx: ::Extrinsic, - block_hash: ::Hash, - ) -> TransactionValidity { - Executive::validate_transaction(source, tx, block_hash) - } - } - - impl sp_offchain::OffchainWorkerApi for Runtime { - fn offchain_worker(header: &::Header) { - Executive::offchain_worker(header) - } - } - - impl sp_session::SessionKeys for Runtime { - fn generate_session_keys(seed: Option>) -> Vec { - SessionKeys::generate(seed) - } - - fn decode_session_keys( - encoded: Vec, - ) -> Option, KeyTypeId)>> { - SessionKeys::decode_into_raw_public_keys(&encoded) - } - } - - impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { - fn account_nonce(account: AccountId) -> Nonce { - System::account_nonce(account) - } - } - - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi for Runtime { - fn query_info( - uxt: ::Extrinsic, - len: u32, - ) -> pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo { - TransactionPayment::query_info(uxt, len) - } - fn query_fee_details( - uxt: ::Extrinsic, - len: u32, - ) -> pallet_transaction_payment::FeeDetails { - TransactionPayment::query_fee_details(uxt, len) - } - fn query_weight_to_fee(weight: Weight) -> Balance { - TransactionPayment::weight_to_fee(weight) - } - fn query_length_to_fee(length: u32) -> Balance { - TransactionPayment::length_to_fee(length) - } - } - - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi - for Runtime - { - fn query_call_info( - call: RuntimeCall, - len: u32, - ) -> pallet_transaction_payment::RuntimeDispatchInfo { - TransactionPayment::query_call_info(call, len) - } - fn query_call_fee_details( - call: RuntimeCall, - len: u32, - ) -> pallet_transaction_payment::FeeDetails { - TransactionPayment::query_call_fee_details(call, len) - } - fn query_weight_to_fee(weight: Weight) -> Balance { - TransactionPayment::weight_to_fee(weight) - } - fn query_length_to_fee(length: u32) -> Balance { - TransactionPayment::length_to_fee(length) - } - } - - impl cumulus_primitives_core::CollectCollationInfo for Runtime { - fn collect_collation_info(header: &::Header) -> cumulus_primitives_core::CollationInfo { - ParachainSystem::collect_collation_info(header) - } - } - - #[cfg(feature = "try-runtime")] - impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { - let weight = Executive::try_runtime_upgrade(checks).unwrap(); - (weight, RuntimeBlockWeights::get().max_block) - } - - fn execute_block( - block: Block, - state_root_check: bool, - signature_check: bool, - select: frame_try_runtime::TryStateSelect, - ) -> Weight { - // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to - // have a backtrace here. - Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() - } - } - - #[cfg(feature = "runtime-benchmarks")] - impl frame_benchmarking::Benchmark for Runtime { - fn benchmark_metadata(extra: bool) -> ( - 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; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; - - let mut list = Vec::::new(); - list_benchmarks!(list, extra); - - let storage_info = AllPalletsWithSystem::storage_info(); - (list, storage_info) - } - - fn dispatch_benchmark( - config: frame_benchmarking::BenchmarkConfig - ) -> Result, sp_runtime::RuntimeString> { - use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError}; - use sp_storage::TrackedStorageKey; - - use frame_system_benchmarking::Pallet as SystemBench; - impl frame_system_benchmarking::Config for Runtime { - fn setup_set_code_requirements(code: &sp_std::vec::Vec) -> Result<(), BenchmarkError> { - ParachainSystem::initialize_for_set_code_benchmark(code.len() as u32); - Ok(()) - } - - fn verify_set_code() { - System::assert_last_event(cumulus_pallet_parachain_system::Event::::ValidationFunctionStored.into()); - } - } - - use cumulus_pallet_session_benchmarking::Pallet as SessionBench; - impl cumulus_pallet_session_benchmarking::Config for Runtime {} - - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; - impl pallet_xcm::benchmarking::Config for Runtime { - fn reachable_dest() -> Option { - Some(Parent.into()) - } - - fn teleportable_asset_and_dest() -> Option<(MultiAsset, MultiLocation)> { - // Relay/native token can be teleported between Collectives and Relay. - Some(( - MultiAsset { - fun: Fungible(EXISTENTIAL_DEPOSIT), - id: Concrete(Parent.into()) - }.into(), - Parent.into(), - )) - } - - fn reserve_transferable_asset_and_dest() -> Option<(MultiAsset, MultiLocation)> { - // Reserve transfers are disabled on Collectives. - None - } - } - - let whitelist: Vec = vec![ - // Block Number - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec().into(), - // Total Issuance - hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80").to_vec().into(), - // Execution Phase - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a").to_vec().into(), - // Event Count - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(), - // System Events - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").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) - } - } - - impl sp_genesis_builder::GenesisBuilder for Runtime { - fn create_default_config() -> Vec { - create_default_config::() - } - - fn build_config(config: Vec) -> sp_genesis_builder::Result { - build_config::(config) - } - } -} - -cumulus_pallet_parachain_system::register_validate_block! { - Runtime = Runtime, - BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::, -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs deleted file mode 100644 index e7fdb2aae2a..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs +++ /dev/null @@ -1,53 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, Weight}, - }; - - parameter_types! { - /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = - Weight::from_parts(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(5_000_000), 0); - } - - #[cfg(test)] - mod test_weights { - use frame_support::weights::constants; - - /// Checks that the weight exists and is sane. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - let w = super::constants::BlockExecutionWeight::get(); - - // At least 100 µs. - assert!( - w.ref_time() >= 100u64 * constants::WEIGHT_REF_TIME_PER_MICROS, - "Weight should be at least 100 µs." - ); - // At most 50 ms. - assert!( - w.ref_time() <= 50u64 * constants::WEIGHT_REF_TIME_PER_MILLIS, - "Weight should be at most 50 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_dmp_queue.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_dmp_queue.rs deleted file mode 100644 index cc41dcd6cbb..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_dmp_queue.rs +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (C) 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_dmp_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-10-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=cumulus_pallet_dmp_queue -// --chain=asset-hub-kusama-dev -// --header=./cumulus/file_header.txt -// --output=./cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_dmp_queue`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_dmp_queue::WeightInfo for WeightInfo { - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65696` - // Estimated: `69161` - // Minimum execution time: 124_651_000 picoseconds. - Weight::from_parts(127_857_000, 0) - .saturating_add(Weight::from_parts(0, 69161)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65659` - // Estimated: `69124` - // Minimum execution time: 65_684_000 picoseconds. - Weight::from_parts(68_039_000, 0) - .saturating_add(Weight::from_parts(0, 69124)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_overweight_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65726` - // Estimated: `69191` - // Minimum execution time: 117_657_000 picoseconds. - Weight::from_parts(122_035_000, 0) - .saturating_add(Weight::from_parts(0, 69191)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(6)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - fn on_idle_overweight_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65689` - // Estimated: `69154` - // Minimum execution time: 59_799_000 picoseconds. - Weight::from_parts(61_354_000, 0) - .saturating_add(Weight::from_parts(0, 69154)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_parachain_system.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_parachain_system.rs deleted file mode 100644 index 0b7a2fc21cd..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_parachain_system.rs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `cumulus_pallet_parachain_system` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `i9`, CPU: `13th Gen Intel(R) Core(TM) i9-13900K` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("collectives-polkadot-dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/polkadot-parachain -// benchmark -// pallet -// --chain -// collectives-polkadot-dev -// --pallet -// cumulus_pallet_parachain_system -// --extrinsic -// * -// --execution -// wasm -// --wasm-execution -// compiled -// --output -// parachains/runtimes/collectives/collectives-polkadot/src/weights -// --steps -// 50 -// --repeat -// 20 - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::Weight}; -use sp_std::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_parachain_system`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_parachain_system::WeightInfo for WeightInfo { - /// Storage: ParachainSystem LastDmqMqcHead (r:1 w:1) - /// Proof Skipped: ParachainSystem LastDmqMqcHead (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ParachainSystem ReservedDmpWeightOverride (r:1 w:0) - /// Proof Skipped: ParachainSystem ReservedDmpWeightOverride (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: ParachainSystem ProcessedDownwardMessages (r:0 w:1) - /// Proof Skipped: ParachainSystem ProcessedDownwardMessages (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: MessageQueue Pages (r:0 w:16) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - /// The range of component `n` is `[0, 1000]`. - fn enqueue_inbound_downward_messages(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `48` - // Estimated: `8121` - // Minimum execution time: 1_988_000 picoseconds. - Weight::from_parts(2_039_000, 0) - .saturating_add(Weight::from_parts(0, 8121)) - // Standard Error: 30_660 - .saturating_add(Weight::from_parts(24_419_204, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs deleted file mode 100644 index e68c075bffc..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `cumulus_pallet_xcmp_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-09-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `Olivers-MacBook-Pro.local`, CPU: `` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/release/polkadot-parachain -// benchmark -// pallet -// --pallet -// cumulus-pallet-xcmp-queue -// --chain -// collectives-polkadot-dev -// --output -// cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs -// --extrinsic -// - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_xcmp_queue`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:1) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_config_with_u32() -> Weight { - // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `1627` - // Minimum execution time: 5_000_000 picoseconds. - Weight::from_parts(6_000_000, 0) - .saturating_add(Weight::from_parts(0, 1627)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:0) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `XcmpQueue::InboundXcmpSuspended` (r:1 w:0) - /// Proof: `XcmpQueue::InboundXcmpSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn enqueue_xcmp_message() -> Weight { - // Proof Size summary in bytes: - // Measured: `148` - // Estimated: `3517` - // Minimum execution time: 14_000_000 picoseconds. - Weight::from_parts(14_000_000, 0) - .saturating_add(Weight::from_parts(0, 3517)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn suspend_channel() -> Weight { - // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `1627` - // Minimum execution time: 3_000_000 picoseconds. - Weight::from_parts(3_000_000, 0) - .saturating_add(Weight::from_parts(0, 1627)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn resume_channel() -> Weight { - // Proof Size summary in bytes: - // Measured: `177` - // Estimated: `1662` - // Minimum execution time: 4_000_000 picoseconds. - Weight::from_parts(5_000_000, 0) - .saturating_add(Weight::from_parts(0, 1662)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn take_first_concatenated_xcm() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 44_000_000 picoseconds. - Weight::from_parts(45_000_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Storage: `XcmpQueue::InboundXcmpMessages` (r:1 w:1) - /// Proof: `XcmpQueue::InboundXcmpMessages` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:0) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::InboundXcmpSuspended` (r:1 w:0) - /// Proof: `XcmpQueue::InboundXcmpSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65777` - // Estimated: `69242` - // Minimum execution time: 60_000_000 picoseconds. - Weight::from_parts(63_000_000, 0) - .saturating_add(Weight::from_parts(0, 69242)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65776` - // Estimated: `69241` - // Minimum execution time: 41_000_000 picoseconds. - Weight::from_parts(43_000_000, 0) - .saturating_add(Weight::from_parts(0, 69241)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs deleted file mode 100644 index 1a4adb968bb..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs +++ /dev/null @@ -1,53 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, Weight}, - }; - - parameter_types! { - /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = - Weight::from_parts(constants::WEIGHT_REF_TIME_PER_NANOS.saturating_mul(125_000), 0); - } - - #[cfg(test)] - mod test_weights { - use frame_support::weights::constants; - - /// Checks that the weight exists and is sane. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - let w = super::constants::ExtrinsicBaseWeight::get(); - - // At least 10 µs. - assert!( - w.ref_time() >= 10u64 * constants::WEIGHT_REF_TIME_PER_MICROS, - "Weight should be at least 10 µs." - ); - // At most 1 ms. - assert!( - w.ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Weight should be at most 1 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs deleted file mode 100644 index b6f1dc8dc08..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `frame_system` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=frame_system -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `frame_system`. -pub struct WeightInfo(PhantomData); -impl frame_system::WeightInfo for WeightInfo { - /// The range of component `b` is `[0, 3932160]`. - fn remark(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 1_926_000 picoseconds. - Weight::from_parts(1_929_666, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 0 - .saturating_add(Weight::from_parts(387, 0).saturating_mul(b.into())) - } - /// The range of component `b` is `[0, 3932160]`. - fn remark_with_event(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_221_000 picoseconds. - Weight::from_parts(34_449_539, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 7 - .saturating_add(Weight::from_parts(1_706, 0).saturating_mul(b.into())) - } - /// Storage: `System::Digest` (r:1 w:1) - /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - /// Proof: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - fn set_heap_pages() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `1485` - // Minimum execution time: 3_681_000 picoseconds. - Weight::from_parts(3_857_000, 0) - .saturating_add(Weight::from_parts(0, 1485)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) - /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpgradeRestrictionSignal` (r:1 w:0) - /// Proof: `ParachainSystem::UpgradeRestrictionSignal` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingValidationCode` (r:1 w:1) - /// Proof: `ParachainSystem::PendingValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::NewValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::NewValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::DidSetValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::DidSetValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_code() -> Weight { - // Proof Size summary in bytes: - // Measured: `156` - // Estimated: `1641` - // Minimum execution time: 101_899_621_000 picoseconds. - Weight::from_parts(106_377_672_000, 0) - .saturating_add(Weight::from_parts(0, 1641)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn set_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_039_000 picoseconds. - Weight::from_parts(2_094_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 2_124 - .saturating_add(Weight::from_parts(754_465, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn kill_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_103_000 picoseconds. - Weight::from_parts(2_182_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 1_031 - .saturating_add(Weight::from_parts(570_563, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `p` is `[0, 1000]`. - fn kill_prefix(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `82 + p * (69 ±0)` - // Estimated: `78 + p * (70 ±0)` - // Minimum execution time: 3_728_000 picoseconds. - Weight::from_parts(3_836_000, 0) - .saturating_add(Weight::from_parts(0, 78)) - // Standard Error: 1_802 - .saturating_add(Weight::from_parts(1_199_345, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) - .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/mod.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/mod.rs deleted file mode 100644 index 1d877fdbd2b..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/mod.rs +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod block_weights; -pub mod cumulus_pallet_dmp_queue; -pub mod cumulus_pallet_parachain_system; -pub mod cumulus_pallet_xcmp_queue; -pub mod extrinsic_weights; -pub mod frame_system; -pub mod pallet_alliance; -pub mod pallet_balances; -pub mod pallet_collator_selection; -pub mod pallet_collective; -pub mod pallet_collective_content; -pub mod pallet_core_fellowship_ambassador_core; -pub mod pallet_core_fellowship_fellowship_core; -pub mod pallet_message_queue; -pub mod pallet_multisig; -pub mod pallet_preimage; -pub mod pallet_proxy; -pub mod pallet_ranked_collective_ambassador_collective; -pub mod pallet_ranked_collective_fellowship_collective; -pub mod pallet_referenda_ambassador_referenda; -pub mod pallet_referenda_fellowship_referenda; -pub mod pallet_salary_ambassador_salary; -pub mod pallet_salary_fellowship_salary; -pub mod pallet_scheduler; -pub mod pallet_session; -pub mod pallet_timestamp; -pub mod pallet_utility; -pub mod pallet_xcm; -pub mod paritydb_weights; -pub mod rocksdb_weights; - -pub use block_weights::constants::BlockExecutionWeight; -pub use extrinsic_weights::constants::ExtrinsicBaseWeight; -pub use paritydb_weights::constants::ParityDbWeight; -pub use rocksdb_weights::constants::RocksDbWeight; diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs deleted file mode 100644 index d8ede609a67..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs +++ /dev/null @@ -1,494 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_alliance` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_alliance -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_alliance`. -pub struct WeightInfo(PhantomData); -impl pallet_alliance::WeightInfo for WeightInfo { - /// Storage: `Alliance::Members` (r:1 w:0) - /// Proof: `Alliance::Members` (`max_values`: None, `max_size`: Some(3211), added: 5686, mode: `MaxEncodedLen`) - /// Storage: `AllianceMotion::ProposalOf` (r:1 w:1) - /// Proof: `AllianceMotion::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Proposals` (r:1 w:1) - /// Proof: `AllianceMotion::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::ProposalCount` (r:1 w:1) - /// Proof: `AllianceMotion::ProposalCount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Voting` (r:0 w:1) - /// Proof: `AllianceMotion::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `b` is `[1, 1024]`. - /// The range of component `m` is `[2, 100]`. - /// The range of component `p` is `[1, 100]`. - fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `439 + m * (32 ±0) + p * (36 ±0)` - // Estimated: `6676 + m * (32 ±0) + p * (36 ±0)` - // Minimum execution time: 32_783_000 picoseconds. - Weight::from_parts(32_174_037, 0) - .saturating_add(Weight::from_parts(0, 6676)) - // Standard Error: 198 - .saturating_add(Weight::from_parts(1_220, 0).saturating_mul(b.into())) - // Standard Error: 2_074 - .saturating_add(Weight::from_parts(40_945, 0).saturating_mul(m.into())) - // Standard Error: 2_048 - .saturating_add(Weight::from_parts(181_087, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 36).saturating_mul(p.into())) - } - /// Storage: `Alliance::Members` (r:1 w:0) - /// Proof: `Alliance::Members` (`max_values`: None, `max_size`: Some(3211), added: 5686, mode: `MaxEncodedLen`) - /// Storage: `AllianceMotion::Voting` (r:1 w:1) - /// Proof: `AllianceMotion::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `m` is `[5, 100]`. - fn vote(m: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `868 + m * (64 ±0)` - // Estimated: `6676 + m * (64 ±0)` - // Minimum execution time: 28_520_000 picoseconds. - Weight::from_parts(29_661_024, 0) - .saturating_add(Weight::from_parts(0, 6676)) - // Standard Error: 2_336 - .saturating_add(Weight::from_parts(89_873, 0).saturating_mul(m.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into())) - } - /// Storage: `Alliance::Members` (r:1 w:0) - /// Proof: `Alliance::Members` (`max_values`: None, `max_size`: Some(3211), added: 5686, mode: `MaxEncodedLen`) - /// Storage: `AllianceMotion::Voting` (r:1 w:1) - /// Proof: `AllianceMotion::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Members` (r:1 w:0) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Proposals` (r:1 w:1) - /// Proof: `AllianceMotion::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::ProposalOf` (r:0 w:1) - /// Proof: `AllianceMotion::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `m` is `[4, 100]`. - /// The range of component `p` is `[1, 100]`. - fn close_early_disapproved(m: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `312 + m * (96 ±0) + p * (36 ±0)` - // Estimated: `6676 + m * (97 ±0) + p * (36 ±0)` - // Minimum execution time: 39_353_000 picoseconds. - Weight::from_parts(33_028_008, 0) - .saturating_add(Weight::from_parts(0, 6676)) - // Standard Error: 2_137 - .saturating_add(Weight::from_parts(90_946, 0).saturating_mul(m.into())) - // Standard Error: 2_084 - .saturating_add(Weight::from_parts(175_827, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - .saturating_add(Weight::from_parts(0, 97).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 36).saturating_mul(p.into())) - } - /// Storage: `Alliance::Members` (r:1 w:0) - /// Proof: `Alliance::Members` (`max_values`: None, `max_size`: Some(3211), added: 5686, mode: `MaxEncodedLen`) - /// Storage: `AllianceMotion::Voting` (r:1 w:1) - /// Proof: `AllianceMotion::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Members` (r:1 w:0) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::ProposalOf` (r:1 w:1) - /// Proof: `AllianceMotion::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Proposals` (r:1 w:1) - /// Proof: `AllianceMotion::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `b` is `[1, 1024]`. - /// The range of component `m` is `[4, 100]`. - /// The range of component `p` is `[1, 100]`. - fn close_early_approved(_b: u32, m: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `762 + m * (96 ±0) + p * (41 ±0)` - // Estimated: `6676 + m * (97 ±0) + p * (40 ±0)` - // Minimum execution time: 52_835_000 picoseconds. - Weight::from_parts(45_963_292, 0) - .saturating_add(Weight::from_parts(0, 6676)) - // Standard Error: 3_189 - .saturating_add(Weight::from_parts(111_627, 0).saturating_mul(m.into())) - // Standard Error: 3_109 - .saturating_add(Weight::from_parts(207_923, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(3)) - .saturating_add(Weight::from_parts(0, 97).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 40).saturating_mul(p.into())) - } - /// Storage: `Alliance::Members` (r:1 w:0) - /// Proof: `Alliance::Members` (`max_values`: None, `max_size`: Some(3211), added: 5686, mode: `MaxEncodedLen`) - /// Storage: `AllianceMotion::Voting` (r:1 w:1) - /// Proof: `AllianceMotion::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Members` (r:1 w:0) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Prime` (r:1 w:0) - /// Proof: `AllianceMotion::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::ProposalOf` (r:1 w:1) - /// Proof: `AllianceMotion::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Proposals` (r:1 w:1) - /// Proof: `AllianceMotion::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Alliance::Rule` (r:0 w:1) - /// Proof: `Alliance::Rule` (`max_values`: Some(1), `max_size`: Some(87), added: 582, mode: `MaxEncodedLen`) - /// The range of component `m` is `[2, 100]`. - /// The range of component `p` is `[1, 100]`. - fn close_disapproved(m: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `518 + m * (96 ±0) + p * (41 ±0)` - // Estimated: `6676 + m * (109 ±0) + p * (43 ±0)` - // Minimum execution time: 49_980_000 picoseconds. - Weight::from_parts(48_110_301, 0) - .saturating_add(Weight::from_parts(0, 6676)) - // Standard Error: 5_057 - .saturating_add(Weight::from_parts(169_065, 0).saturating_mul(m.into())) - // Standard Error: 4_995 - .saturating_add(Weight::from_parts(201_349, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(4)) - .saturating_add(Weight::from_parts(0, 109).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 43).saturating_mul(p.into())) - } - /// Storage: `Alliance::Members` (r:1 w:0) - /// Proof: `Alliance::Members` (`max_values`: None, `max_size`: Some(3211), added: 5686, mode: `MaxEncodedLen`) - /// Storage: `AllianceMotion::Voting` (r:1 w:1) - /// Proof: `AllianceMotion::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Members` (r:1 w:0) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Prime` (r:1 w:0) - /// Proof: `AllianceMotion::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Proposals` (r:1 w:1) - /// Proof: `AllianceMotion::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::ProposalOf` (r:0 w:1) - /// Proof: `AllianceMotion::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `b` is `[1, 1024]`. - /// The range of component `m` is `[5, 100]`. - /// The range of component `p` is `[1, 100]`. - fn close_approved(_b: u32, m: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `417 + m * (96 ±0) + p * (36 ±0)` - // Estimated: `6676 + m * (96 ±0) + p * (36 ±0)` - // Minimum execution time: 40_646_000 picoseconds. - Weight::from_parts(36_865_909, 0) - .saturating_add(Weight::from_parts(0, 6676)) - // Standard Error: 2_136 - .saturating_add(Weight::from_parts(74_341, 0).saturating_mul(m.into())) - // Standard Error: 2_059 - .saturating_add(Weight::from_parts(170_035, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(3)) - .saturating_add(Weight::from_parts(0, 96).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 36).saturating_mul(p.into())) - } - /// Storage: `Alliance::Members` (r:2 w:2) - /// Proof: `Alliance::Members` (`max_values`: None, `max_size`: Some(3211), added: 5686, mode: `MaxEncodedLen`) - /// Storage: `AllianceMotion::Members` (r:1 w:1) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `m` is `[1, 100]`. - /// The range of component `z` is `[0, 100]`. - fn init_members(m: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `12` - // Estimated: `12362` - // Minimum execution time: 29_710_000 picoseconds. - Weight::from_parts(17_762_170, 0) - .saturating_add(Weight::from_parts(0, 12362)) - // Standard Error: 1_652 - .saturating_add(Weight::from_parts(156_967, 0).saturating_mul(m.into())) - // Standard Error: 1_632 - .saturating_add(Weight::from_parts(130_352, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Alliance::Members` (r:2 w:2) - /// Proof: `Alliance::Members` (`max_values`: None, `max_size`: Some(3211), added: 5686, mode: `MaxEncodedLen`) - /// Storage: `AllianceMotion::Proposals` (r:1 w:0) - /// Proof: `AllianceMotion::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Alliance::DepositOf` (r:200 w:50) - /// Proof: `Alliance::DepositOf` (`max_values`: None, `max_size`: Some(64), added: 2539, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:50 w:50) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `AllianceMotion::Members` (r:0 w:1) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Prime` (r:0 w:1) - /// Proof: `AllianceMotion::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[1, 100]`. - /// The range of component `y` is `[0, 100]`. - /// The range of component `z` is `[0, 50]`. - fn disband(x: u32, y: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + x * (52 ±0) + y * (53 ±0) + z * (250 ±0)` - // Estimated: `12362 + x * (2539 ±0) + y * (2539 ±0) + z * (2603 ±1)` - // Minimum execution time: 294_258_000 picoseconds. - Weight::from_parts(295_116_000, 0) - .saturating_add(Weight::from_parts(0, 12362)) - // Standard Error: 23_663 - .saturating_add(Weight::from_parts(553_978, 0).saturating_mul(x.into())) - // Standard Error: 23_549 - .saturating_add(Weight::from_parts(567_024, 0).saturating_mul(y.into())) - // Standard Error: 47_055 - .saturating_add(Weight::from_parts(15_439_056, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(x.into()))) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(y.into()))) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(z.into()))) - .saturating_add(T::DbWeight::get().writes(4)) - .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(z.into()))) - .saturating_add(Weight::from_parts(0, 2539).saturating_mul(x.into())) - .saturating_add(Weight::from_parts(0, 2539).saturating_mul(y.into())) - .saturating_add(Weight::from_parts(0, 2603).saturating_mul(z.into())) - } - /// Storage: `Alliance::Rule` (r:0 w:1) - /// Proof: `Alliance::Rule` (`max_values`: Some(1), `max_size`: Some(87), added: 582, mode: `MaxEncodedLen`) - fn set_rule() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 8_538_000 picoseconds. - Weight::from_parts(8_752_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Alliance::Announcements` (r:1 w:1) - /// Proof: `Alliance::Announcements` (`max_values`: Some(1), `max_size`: Some(8702), added: 9197, mode: `MaxEncodedLen`) - fn announce() -> Weight { - // Proof Size summary in bytes: - // Measured: `76` - // Estimated: `10187` - // Minimum execution time: 11_213_000 picoseconds. - Weight::from_parts(11_792_000, 0) - .saturating_add(Weight::from_parts(0, 10187)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Alliance::Announcements` (r:1 w:1) - /// Proof: `Alliance::Announcements` (`max_values`: Some(1), `max_size`: Some(8702), added: 9197, mode: `MaxEncodedLen`) - fn remove_announcement() -> Weight { - // Proof Size summary in bytes: - // Measured: `149` - // Estimated: `10187` - // Minimum execution time: 12_477_000 picoseconds. - Weight::from_parts(12_942_000, 0) - .saturating_add(Weight::from_parts(0, 10187)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Alliance::Members` (r:3 w:1) - /// Proof: `Alliance::Members` (`max_values`: None, `max_size`: Some(3211), added: 5686, mode: `MaxEncodedLen`) - /// Storage: `Alliance::UnscrupulousAccounts` (r:1 w:0) - /// Proof: `Alliance::UnscrupulousAccounts` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Alliance::DepositOf` (r:0 w:1) - /// Proof: `Alliance::DepositOf` (`max_values`: None, `max_size`: Some(64), added: 2539, mode: `MaxEncodedLen`) - fn join_alliance() -> Weight { - // Proof Size summary in bytes: - // Measured: `294` - // Estimated: `18048` - // Minimum execution time: 41_517_000 picoseconds. - Weight::from_parts(42_433_000, 0) - .saturating_add(Weight::from_parts(0, 18048)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Alliance::Members` (r:3 w:1) - /// Proof: `Alliance::Members` (`max_values`: None, `max_size`: Some(3211), added: 5686, mode: `MaxEncodedLen`) - /// Storage: `Alliance::UnscrupulousAccounts` (r:1 w:0) - /// Proof: `Alliance::UnscrupulousAccounts` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - fn nominate_ally() -> Weight { - // Proof Size summary in bytes: - // Measured: `193` - // Estimated: `18048` - // Minimum execution time: 25_950_000 picoseconds. - Weight::from_parts(26_631_000, 0) - .saturating_add(Weight::from_parts(0, 18048)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Alliance::Members` (r:2 w:2) - /// Proof: `Alliance::Members` (`max_values`: None, `max_size`: Some(3211), added: 5686, mode: `MaxEncodedLen`) - /// Storage: `AllianceMotion::Proposals` (r:1 w:0) - /// Proof: `AllianceMotion::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Members` (r:0 w:1) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Prime` (r:0 w:1) - /// Proof: `AllianceMotion::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn elevate_ally() -> Weight { - // Proof Size summary in bytes: - // Measured: `236` - // Estimated: `12362` - // Minimum execution time: 24_470_000 picoseconds. - Weight::from_parts(25_222_000, 0) - .saturating_add(Weight::from_parts(0, 12362)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Alliance::Members` (r:4 w:2) - /// Proof: `Alliance::Members` (`max_values`: None, `max_size`: Some(3211), added: 5686, mode: `MaxEncodedLen`) - /// Storage: `AllianceMotion::Proposals` (r:1 w:0) - /// Proof: `AllianceMotion::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Members` (r:0 w:1) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Prime` (r:0 w:1) - /// Proof: `AllianceMotion::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Alliance::RetiringMembers` (r:0 w:1) - /// Proof: `Alliance::RetiringMembers` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn give_retirement_notice() -> Weight { - // Proof Size summary in bytes: - // Measured: `236` - // Estimated: `23734` - // Minimum execution time: 31_519_000 picoseconds. - Weight::from_parts(32_827_000, 0) - .saturating_add(Weight::from_parts(0, 23734)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `Alliance::RetiringMembers` (r:1 w:1) - /// Proof: `Alliance::RetiringMembers` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `Alliance::Members` (r:1 w:1) - /// Proof: `Alliance::Members` (`max_values`: None, `max_size`: Some(3211), added: 5686, mode: `MaxEncodedLen`) - /// Storage: `Alliance::DepositOf` (r:1 w:1) - /// Proof: `Alliance::DepositOf` (`max_values`: None, `max_size`: Some(64), added: 2539, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn retire() -> Weight { - // Proof Size summary in bytes: - // Measured: `517` - // Estimated: `6676` - // Minimum execution time: 38_799_000 picoseconds. - Weight::from_parts(39_634_000, 0) - .saturating_add(Weight::from_parts(0, 6676)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `Alliance::Members` (r:3 w:1) - /// Proof: `Alliance::Members` (`max_values`: None, `max_size`: Some(3211), added: 5686, mode: `MaxEncodedLen`) - /// Storage: `AllianceMotion::Proposals` (r:1 w:0) - /// Proof: `AllianceMotion::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Alliance::DepositOf` (r:1 w:1) - /// Proof: `Alliance::DepositOf` (`max_values`: None, `max_size`: Some(64), added: 2539, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ParachainInfo::ParachainId` (r:1 w:0) - /// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Members` (r:0 w:1) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Prime` (r:0 w:1) - /// Proof: `AllianceMotion::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn kick_member() -> Weight { - // Proof Size summary in bytes: - // Measured: `643` - // Estimated: `18048` - // Minimum execution time: 137_442_000 picoseconds. - Weight::from_parts(142_142_000, 0) - .saturating_add(Weight::from_parts(0, 18048)) - .saturating_add(T::DbWeight::get().reads(13)) - .saturating_add(T::DbWeight::get().writes(8)) - } - /// Storage: `Alliance::UnscrupulousAccounts` (r:1 w:1) - /// Proof: `Alliance::UnscrupulousAccounts` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// Storage: `Alliance::UnscrupulousWebsites` (r:1 w:1) - /// Proof: `Alliance::UnscrupulousWebsites` (`max_values`: Some(1), `max_size`: Some(25702), added: 26197, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 100]`. - /// The range of component `l` is `[0, 255]`. - fn add_unscrupulous_items(n: u32, l: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `76` - // Estimated: `27187` - // Minimum execution time: 7_189_000 picoseconds. - Weight::from_parts(7_387_000, 0) - .saturating_add(Weight::from_parts(0, 27187)) - // Standard Error: 3_417 - .saturating_add(Weight::from_parts(1_581_413, 0).saturating_mul(n.into())) - // Standard Error: 1_338 - .saturating_add(Weight::from_parts(67_739, 0).saturating_mul(l.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Alliance::UnscrupulousAccounts` (r:1 w:1) - /// Proof: `Alliance::UnscrupulousAccounts` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// Storage: `Alliance::UnscrupulousWebsites` (r:1 w:1) - /// Proof: `Alliance::UnscrupulousWebsites` (`max_values`: Some(1), `max_size`: Some(25702), added: 26197, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 100]`. - /// The range of component `l` is `[0, 255]`. - fn remove_unscrupulous_items(n: u32, l: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + l * (100 ±0) + n * (289 ±0)` - // Estimated: `27187` - // Minimum execution time: 7_201_000 picoseconds. - Weight::from_parts(7_325_000, 0) - .saturating_add(Weight::from_parts(0, 27187)) - // Standard Error: 183_302 - .saturating_add(Weight::from_parts(16_886_382, 0).saturating_mul(n.into())) - // Standard Error: 71_789 - .saturating_add(Weight::from_parts(352_937, 0).saturating_mul(l.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Alliance::Members` (r:3 w:2) - /// Proof: `Alliance::Members` (`max_values`: None, `max_size`: Some(3211), added: 5686, mode: `MaxEncodedLen`) - /// Storage: `AllianceMotion::Proposals` (r:1 w:0) - /// Proof: `AllianceMotion::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Members` (r:0 w:1) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Prime` (r:0 w:1) - /// Proof: `AllianceMotion::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn abdicate_fellow_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `236` - // Estimated: `18048` - // Minimum execution time: 29_653_000 picoseconds. - Weight::from_parts(30_365_000, 0) - .saturating_add(Weight::from_parts(0, 18048)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_balances.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_balances.rs deleted file mode 100644 index 6c1cf072257..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_balances.rs +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_balances` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_balances -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_balances`. -pub struct WeightInfo(PhantomData); -impl pallet_balances::WeightInfo for WeightInfo { - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_allow_death() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 55_696_000 picoseconds. - Weight::from_parts(56_582_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_keep_alive() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 40_885_000 picoseconds. - Weight::from_parts(41_993_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_set_balance_creating() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `3593` - // Minimum execution time: 14_565_000 picoseconds. - Weight::from_parts(15_080_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_set_balance_killing() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `3593` - // Minimum execution time: 22_158_000 picoseconds. - Weight::from_parts(22_715_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `6196` - // Minimum execution time: 57_957_000 picoseconds. - Weight::from_parts(58_618_000, 0) - .saturating_add(Weight::from_parts(0, 6196)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_all() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 52_018_000 picoseconds. - Weight::from_parts(52_795_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_unreserve() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `3593` - // Minimum execution time: 17_469_000 picoseconds. - Weight::from_parts(18_030_000, 0) - .saturating_add(Weight::from_parts(0, 3593)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `System::Account` (r:999 w:999) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `u` is `[1, 1000]`. - fn upgrade_accounts(u: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + u * (136 ±0)` - // Estimated: `990 + u * (2603 ±0)` - // Minimum execution time: 17_223_000 picoseconds. - Weight::from_parts(17_587_000, 0) - .saturating_add(Weight::from_parts(0, 990)) - // Standard Error: 16_201 - .saturating_add(Weight::from_parts(15_360_967, 0).saturating_mul(u.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(u.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(u.into()))) - .saturating_add(Weight::from_parts(0, 2603).saturating_mul(u.into())) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs deleted file mode 100644 index 03f3ff602a5..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs +++ /dev/null @@ -1,246 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_collator_selection` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_collator_selection -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_collator_selection`. -pub struct WeightInfo(PhantomData); -impl pallet_collator_selection::WeightInfo for WeightInfo { - /// Storage: `Session::NextKeys` (r:20 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `CollatorSelection::Invulnerables` (r:0 w:1) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 20]`. - fn set_invulnerables(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `163 + b * (79 ±0)` - // Estimated: `1154 + b * (2555 ±0)` - // Minimum execution time: 14_616_000 picoseconds. - Weight::from_parts(12_150_410, 0) - .saturating_add(Weight::from_parts(0, 1154)) - // Standard Error: 6_270 - .saturating_add(Weight::from_parts(3_256_932, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(Weight::from_parts(0, 2555).saturating_mul(b.into())) - } - /// Storage: `Session::NextKeys` (r:1 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:1) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Candidates` (r:1 w:1) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 19]`. - /// The range of component `c` is `[1, 99]`. - fn add_invulnerable(b: u32, c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `756 + b * (32 ±0) + c * (53 ±0)` - // Estimated: `6287 + b * (37 ±0) + c * (53 ±0)` - // Minimum execution time: 48_450_000 picoseconds. - Weight::from_parts(51_166_679, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_588 - .saturating_add(Weight::from_parts(167_219, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - .saturating_add(Weight::from_parts(0, 37).saturating_mul(b.into())) - .saturating_add(Weight::from_parts(0, 53).saturating_mul(c.into())) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:0) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:1) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// The range of component `b` is `[5, 20]`. - fn remove_invulnerable(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `119 + b * (32 ±0)` - // Estimated: `6287` - // Minimum execution time: 15_830_000 picoseconds. - Weight::from_parts(15_792_847, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 5_343 - .saturating_add(Weight::from_parts(167_955, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `CollatorSelection::DesiredCandidates` (r:0 w:1) - /// Proof: `CollatorSelection::DesiredCandidates` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - fn set_desired_candidates() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_424_000 picoseconds. - Weight::from_parts(7_767_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `CollatorSelection::CandidacyBond` (r:0 w:1) - /// Proof: `CollatorSelection::CandidacyBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - fn set_candidacy_bond(_c: u32, _k: u32) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_388_000 picoseconds. - Weight::from_parts(7_677_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:1) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::DesiredCandidates` (r:1 w:0) - /// Proof: `CollatorSelection::DesiredCandidates` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `Session::NextKeys` (r:1 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `CollatorSelection::CandidacyBond` (r:1 w:0) - /// Proof: `CollatorSelection::CandidacyBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - /// The range of component `c` is `[1, 99]`. - fn register_as_candidate(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `736 + c * (52 ±0)` - // Estimated: `6287 + c * (54 ±0)` - // Minimum execution time: 41_241_000 picoseconds. - Weight::from_parts(46_090_319, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_918 - .saturating_add(Weight::from_parts(161_140, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(2)) - .saturating_add(Weight::from_parts(0, 54).saturating_mul(c.into())) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:1) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - /// The range of component `c` is `[4, 100]`. - fn leave_intent(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `306 + c * (50 ±0)` - // Estimated: `6287` - // Minimum execution time: 34_221_000 picoseconds. - Weight::from_parts(36_183_872, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_766 - .saturating_add(Weight::from_parts(168_742, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - fn update_bond(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `306 + c * (50 ±0)` - // Estimated: `6287` - // Minimum execution time: 34_814_000 picoseconds. - Weight::from_parts(36_371_520, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_391 - .saturating_add(Weight::from_parts(201_700, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - fn take_candidate_slot(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `306 + c * (50 ±0)` - // Estimated: `6287` - // Minimum execution time: 34_814_000 picoseconds. - Weight::from_parts(36_371_520, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 2_391 - .saturating_add(Weight::from_parts(201_700, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `System::BlockWeight` (r:1 w:1) - /// Proof: `System::BlockWeight` (`max_values`: Some(1), `max_size`: Some(48), added: 543, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - fn note_author() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `6196` - // Minimum execution time: 43_910_000 picoseconds. - Weight::from_parts(44_796_000, 0) - .saturating_add(Weight::from_parts(0, 6196)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `CollatorSelection::Candidates` (r:1 w:0) - /// Proof: `CollatorSelection::Candidates` (`max_values`: Some(1), `max_size`: Some(4802), added: 5297, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::LastAuthoredBlock` (r:100 w:0) - /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) - /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) - /// Storage: `System::BlockWeight` (r:1 w:1) - /// Proof: `System::BlockWeight` (`max_values`: Some(1), `max_size`: Some(48), added: 543, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:97 w:97) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 100]`. - /// The range of component `c` is `[1, 100]`. - fn new_session(r: u32, c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `2243 + c * (97 ±0) + r * (112 ±0)` - // Estimated: `6287 + c * (2519 ±0) + r * (2603 ±0)` - // Minimum execution time: 17_092_000 picoseconds. - Weight::from_parts(17_635_000, 0) - .saturating_add(Weight::from_parts(0, 6287)) - // Standard Error: 351_635 - .saturating_add(Weight::from_parts(15_162_192, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) - .saturating_add(Weight::from_parts(0, 2519).saturating_mul(c.into())) - .saturating_add(Weight::from_parts(0, 2603).saturating_mul(r.into())) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collective.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collective.rs deleted file mode 100644 index 9133baa6120..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collective.rs +++ /dev/null @@ -1,304 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_collective` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_collective -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_collective`. -pub struct WeightInfo(PhantomData); -impl pallet_collective::WeightInfo for WeightInfo { - /// Storage: `AllianceMotion::Members` (r:1 w:1) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Proposals` (r:1 w:0) - /// Proof: `AllianceMotion::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Voting` (r:100 w:100) - /// Proof: `AllianceMotion::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Prime` (r:0 w:1) - /// Proof: `AllianceMotion::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `m` is `[0, 100]`. - /// The range of component `n` is `[0, 100]`. - /// The range of component `p` is `[0, 100]`. - fn set_members(m: u32, _n: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + m * (3232 ±0) + p * (3190 ±0)` - // Estimated: `15691 + m * (1967 ±23) + p * (4332 ±23)` - // Minimum execution time: 16_410_000 picoseconds. - Weight::from_parts(16_816_000, 0) - .saturating_add(Weight::from_parts(0, 15691)) - // Standard Error: 59_812 - .saturating_add(Weight::from_parts(4_516_537, 0).saturating_mul(m.into())) - // Standard Error: 59_812 - .saturating_add(Weight::from_parts(7_992_168, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) - .saturating_add(T::DbWeight::get().writes(2)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) - .saturating_add(Weight::from_parts(0, 1967).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 4332).saturating_mul(p.into())) - } - /// Storage: `AllianceMotion::Members` (r:1 w:0) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `b` is `[2, 1024]`. - /// The range of component `m` is `[1, 100]`. - fn execute(b: u32, m: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `32 + m * (32 ±0)` - // Estimated: `1518 + m * (32 ±0)` - // Minimum execution time: 14_418_000 picoseconds. - Weight::from_parts(13_588_617, 0) - .saturating_add(Weight::from_parts(0, 1518)) - // Standard Error: 21 - .saturating_add(Weight::from_parts(1_711, 0).saturating_mul(b.into())) - // Standard Error: 223 - .saturating_add(Weight::from_parts(13_836, 0).saturating_mul(m.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) - } - /// Storage: `AllianceMotion::Members` (r:1 w:0) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::ProposalOf` (r:1 w:0) - /// Proof: `AllianceMotion::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `b` is `[2, 1024]`. - /// The range of component `m` is `[1, 100]`. - fn propose_execute(b: u32, m: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `32 + m * (32 ±0)` - // Estimated: `3498 + m * (32 ±0)` - // Minimum execution time: 17_174_000 picoseconds. - Weight::from_parts(16_192_764, 0) - .saturating_add(Weight::from_parts(0, 3498)) - // Standard Error: 27 - .saturating_add(Weight::from_parts(1_672, 0).saturating_mul(b.into())) - // Standard Error: 280 - .saturating_add(Weight::from_parts(24_343, 0).saturating_mul(m.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) - } - /// Storage: `AllianceMotion::Members` (r:1 w:0) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::ProposalOf` (r:1 w:1) - /// Proof: `AllianceMotion::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Proposals` (r:1 w:1) - /// Proof: `AllianceMotion::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::ProposalCount` (r:1 w:1) - /// Proof: `AllianceMotion::ProposalCount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Voting` (r:0 w:1) - /// Proof: `AllianceMotion::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `b` is `[2, 1024]`. - /// The range of component `m` is `[2, 100]`. - /// The range of component `p` is `[1, 100]`. - fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `322 + m * (32 ±0) + p * (36 ±0)` - // Estimated: `3714 + m * (33 ±0) + p * (36 ±0)` - // Minimum execution time: 23_970_000 picoseconds. - Weight::from_parts(23_004_052, 0) - .saturating_add(Weight::from_parts(0, 3714)) - // Standard Error: 123 - .saturating_add(Weight::from_parts(2_728, 0).saturating_mul(b.into())) - // Standard Error: 1_291 - .saturating_add(Weight::from_parts(32_731, 0).saturating_mul(m.into())) - // Standard Error: 1_275 - .saturating_add(Weight::from_parts(199_537, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - .saturating_add(Weight::from_parts(0, 33).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 36).saturating_mul(p.into())) - } - /// Storage: `AllianceMotion::Members` (r:1 w:0) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Voting` (r:1 w:1) - /// Proof: `AllianceMotion::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `m` is `[5, 100]`. - fn vote(m: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `771 + m * (64 ±0)` - // Estimated: `4235 + m * (64 ±0)` - // Minimum execution time: 25_843_000 picoseconds. - Weight::from_parts(26_092_578, 0) - .saturating_add(Weight::from_parts(0, 4235)) - // Standard Error: 1_785 - .saturating_add(Weight::from_parts(67_298, 0).saturating_mul(m.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into())) - } - /// Storage: `AllianceMotion::Voting` (r:1 w:1) - /// Proof: `AllianceMotion::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Members` (r:1 w:0) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Proposals` (r:1 w:1) - /// Proof: `AllianceMotion::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::ProposalOf` (r:0 w:1) - /// Proof: `AllianceMotion::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `m` is `[4, 100]`. - /// The range of component `p` is `[1, 100]`. - fn close_early_disapproved(m: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `360 + m * (64 ±0) + p * (36 ±0)` - // Estimated: `3805 + m * (65 ±0) + p * (36 ±0)` - // Minimum execution time: 27_543_000 picoseconds. - Weight::from_parts(26_505_473, 0) - .saturating_add(Weight::from_parts(0, 3805)) - // Standard Error: 1_054 - .saturating_add(Weight::from_parts(35_295, 0).saturating_mul(m.into())) - // Standard Error: 1_028 - .saturating_add(Weight::from_parts(190_508, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - .saturating_add(Weight::from_parts(0, 65).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 36).saturating_mul(p.into())) - } - /// Storage: `AllianceMotion::Voting` (r:1 w:1) - /// Proof: `AllianceMotion::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Members` (r:1 w:0) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::ProposalOf` (r:1 w:1) - /// Proof: `AllianceMotion::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Proposals` (r:1 w:1) - /// Proof: `AllianceMotion::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `b` is `[2, 1024]`. - /// The range of component `m` is `[4, 100]`. - /// The range of component `p` is `[1, 100]`. - fn close_early_approved(b: u32, m: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `662 + b * (1 ±0) + m * (64 ±0) + p * (40 ±0)` - // Estimated: `3979 + b * (1 ±0) + m * (66 ±0) + p * (40 ±0)` - // Minimum execution time: 40_375_000 picoseconds. - Weight::from_parts(34_081_294, 0) - .saturating_add(Weight::from_parts(0, 3979)) - // Standard Error: 196 - .saturating_add(Weight::from_parts(3_796, 0).saturating_mul(b.into())) - // Standard Error: 2_072 - .saturating_add(Weight::from_parts(50_954, 0).saturating_mul(m.into())) - // Standard Error: 2_020 - .saturating_add(Weight::from_parts(246_000, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) - .saturating_add(Weight::from_parts(0, 66).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 40).saturating_mul(p.into())) - } - /// Storage: `AllianceMotion::Voting` (r:1 w:1) - /// Proof: `AllianceMotion::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Members` (r:1 w:0) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Prime` (r:1 w:0) - /// Proof: `AllianceMotion::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Proposals` (r:1 w:1) - /// Proof: `AllianceMotion::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::ProposalOf` (r:0 w:1) - /// Proof: `AllianceMotion::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `m` is `[4, 100]`. - /// The range of component `p` is `[1, 100]`. - fn close_disapproved(m: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `458 + m * (48 ±0) + p * (36 ±0)` - // Estimated: `3898 + m * (49 ±0) + p * (36 ±0)` - // Minimum execution time: 28_793_000 picoseconds. - Weight::from_parts(29_656_832, 0) - .saturating_add(Weight::from_parts(0, 3898)) - // Standard Error: 1_214 - .saturating_add(Weight::from_parts(22_148, 0).saturating_mul(m.into())) - // Standard Error: 1_184 - .saturating_add(Weight::from_parts(189_860, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - .saturating_add(Weight::from_parts(0, 49).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 36).saturating_mul(p.into())) - } - /// Storage: `AllianceMotion::Voting` (r:1 w:1) - /// Proof: `AllianceMotion::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Members` (r:1 w:0) - /// Proof: `AllianceMotion::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Prime` (r:1 w:0) - /// Proof: `AllianceMotion::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::ProposalOf` (r:1 w:1) - /// Proof: `AllianceMotion::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Proposals` (r:1 w:1) - /// Proof: `AllianceMotion::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `b` is `[2, 1024]`. - /// The range of component `m` is `[4, 100]`. - /// The range of component `p` is `[1, 100]`. - fn close_approved(b: u32, m: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `682 + b * (1 ±0) + m * (64 ±0) + p * (40 ±0)` - // Estimated: `3999 + b * (1 ±0) + m * (66 ±0) + p * (40 ±0)` - // Minimum execution time: 40_887_000 picoseconds. - Weight::from_parts(39_529_567, 0) - .saturating_add(Weight::from_parts(0, 3999)) - // Standard Error: 191 - .saturating_add(Weight::from_parts(2_802, 0).saturating_mul(b.into())) - // Standard Error: 2_021 - .saturating_add(Weight::from_parts(35_956, 0).saturating_mul(m.into())) - // Standard Error: 1_970 - .saturating_add(Weight::from_parts(235_154, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(3)) - .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) - .saturating_add(Weight::from_parts(0, 66).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 40).saturating_mul(p.into())) - } - /// Storage: `AllianceMotion::Proposals` (r:1 w:1) - /// Proof: `AllianceMotion::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::Voting` (r:0 w:1) - /// Proof: `AllianceMotion::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AllianceMotion::ProposalOf` (r:0 w:1) - /// Proof: `AllianceMotion::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `p` is `[1, 100]`. - fn disapprove_proposal(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `189 + p * (32 ±0)` - // Estimated: `1674 + p * (32 ±0)` - // Minimum execution time: 14_040_000 picoseconds. - Weight::from_parts(15_075_964, 0) - .saturating_add(Weight::from_parts(0, 1674)) - // Standard Error: 854 - .saturating_add(Weight::from_parts(159_597, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(3)) - .saturating_add(Weight::from_parts(0, 32).saturating_mul(p.into())) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collective_content.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collective_content.rs deleted file mode 100644 index 6be94db22db..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collective_content.rs +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_collective_content` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-08-18, STEPS: `10`, REPEAT: `3`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `cob`, CPU: `` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/debug/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --steps=10 -// --repeat=3 -// --pallet=pallet_collective_content -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_collective_content`. -pub struct WeightInfo(PhantomData); -impl pallet_collective_content::WeightInfo for WeightInfo { - /// Storage: `AmbassadorContent::Charter` (r:0 w:1) - /// Proof: `AmbassadorContent::Charter` (`max_values`: Some(1), `max_size`: Some(70), added: 565, mode: `MaxEncodedLen`) - fn set_charter() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 99_000_000 picoseconds. - Weight::from_parts(99_000_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `AmbassadorCollective::Members` (r:1 w:0) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorContent::AnnouncementsCount` (r:1 w:1) - /// Proof: `AmbassadorContent::AnnouncementsCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorContent::NextAnnouncementExpireAt` (r:1 w:1) - /// Proof: `AmbassadorContent::NextAnnouncementExpireAt` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorContent::Announcements` (r:0 w:1) - /// Proof: `AmbassadorContent::Announcements` (`max_values`: None, `max_size`: Some(90), added: 2565, mode: `MaxEncodedLen`) - fn announce() -> Weight { - // Proof Size summary in bytes: - // Measured: `285` - // Estimated: `3507` - // Minimum execution time: 273_000_000 picoseconds. - Weight::from_parts(278_000_000, 0) - .saturating_add(Weight::from_parts(0, 3507)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `AmbassadorCollective::Members` (r:1 w:0) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorContent::Announcements` (r:1 w:1) - /// Proof: `AmbassadorContent::Announcements` (`max_values`: None, `max_size`: Some(90), added: 2565, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorContent::AnnouncementsCount` (r:1 w:1) - /// Proof: `AmbassadorContent::AnnouncementsCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - fn remove_announcement() -> Weight { - // Proof Size summary in bytes: - // Measured: `450` - // Estimated: `3555` - // Minimum execution time: 326_000_000 picoseconds. - Weight::from_parts(338_000_000, 0) - .saturating_add(Weight::from_parts(0, 3555)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_core_fellowship_ambassador_core.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_core_fellowship_ambassador_core.rs deleted file mode 100644 index f40940a8b25..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_core_fellowship_ambassador_core.rs +++ /dev/null @@ -1,223 +0,0 @@ -// Copyright 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_core_fellowship` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-08-11, STEPS: `2`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `cob`, CPU: `` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/release/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_core_fellowship -// --extrinsic=* -// --steps=2 -// --repeat=2 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_core_fellowship`. -pub struct WeightInfo(PhantomData); -impl pallet_core_fellowship::WeightInfo for WeightInfo { - /// Storage: `AmbassadorCore::Params` (r:0 w:1) - /// Proof: `AmbassadorCore::Params` (`max_values`: Some(1), `max_size`: Some(364), added: 859, mode: `MaxEncodedLen`) - fn set_params() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 11_000_000 picoseconds. - Weight::from_parts(11_000_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `AmbassadorCore::Member` (r:1 w:1) - /// Proof: `AmbassadorCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::Members` (r:1 w:1) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCore::Params` (r:1 w:0) - /// Proof: `AmbassadorCore::Params` (`max_values`: Some(1), `max_size`: Some(364), added: 859, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:1) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::IdToIndex` (r:1 w:0) - /// Proof: `AmbassadorCollective::IdToIndex` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCore::MemberEvidence` (r:1 w:1) - /// Proof: `AmbassadorCore::MemberEvidence` (`max_values`: None, `max_size`: Some(65581), added: 68056, mode: `MaxEncodedLen`) - fn bump_offboard() -> Weight { - // Proof Size summary in bytes: - // Measured: `66011` - // Estimated: `69046` - // Minimum execution time: 96_000_000 picoseconds. - Weight::from_parts(111_000_000, 0) - .saturating_add(Weight::from_parts(0, 69046)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `AmbassadorCore::Member` (r:1 w:1) - /// Proof: `AmbassadorCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::Members` (r:1 w:1) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCore::Params` (r:1 w:0) - /// Proof: `AmbassadorCore::Params` (`max_values`: Some(1), `max_size`: Some(364), added: 859, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:1) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::IdToIndex` (r:1 w:0) - /// Proof: `AmbassadorCollective::IdToIndex` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCore::MemberEvidence` (r:1 w:1) - /// Proof: `AmbassadorCore::MemberEvidence` (`max_values`: None, `max_size`: Some(65581), added: 68056, mode: `MaxEncodedLen`) - fn bump_demote() -> Weight { - // Proof Size summary in bytes: - // Measured: `66121` - // Estimated: `69046` - // Minimum execution time: 99_000_000 picoseconds. - Weight::from_parts(116_000_000, 0) - .saturating_add(Weight::from_parts(0, 69046)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `AmbassadorCollective::Members` (r:1 w:0) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCore::Member` (r:1 w:1) - /// Proof: `AmbassadorCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - fn set_active() -> Weight { - // Proof Size summary in bytes: - // Measured: `360` - // Estimated: `3514` - // Minimum execution time: 21_000_000 picoseconds. - Weight::from_parts(22_000_000, 0) - .saturating_add(Weight::from_parts(0, 3514)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `AmbassadorCore::Member` (r:1 w:1) - /// Proof: `AmbassadorCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::Members` (r:1 w:1) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:1) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::IndexToId` (r:0 w:1) - /// Proof: `AmbassadorCollective::IndexToId` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::IdToIndex` (r:0 w:1) - /// Proof: `AmbassadorCollective::IdToIndex` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - fn induct() -> Weight { - // Proof Size summary in bytes: - // Measured: `118` - // Estimated: `3514` - // Minimum execution time: 36_000_000 picoseconds. - Weight::from_parts(36_000_000, 0) - .saturating_add(Weight::from_parts(0, 3514)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `AmbassadorCollective::Members` (r:1 w:1) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCore::Member` (r:1 w:1) - /// Proof: `AmbassadorCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCore::Params` (r:1 w:0) - /// Proof: `AmbassadorCore::Params` (`max_values`: Some(1), `max_size`: Some(364), added: 859, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:1) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCore::MemberEvidence` (r:1 w:1) - /// Proof: `AmbassadorCore::MemberEvidence` (`max_values`: None, `max_size`: Some(65581), added: 68056, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::IndexToId` (r:0 w:1) - /// Proof: `AmbassadorCollective::IndexToId` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::IdToIndex` (r:0 w:1) - /// Proof: `AmbassadorCollective::IdToIndex` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - fn promote() -> Weight { - // Proof Size summary in bytes: - // Measured: `65989` - // Estimated: `69046` - // Minimum execution time: 95_000_000 picoseconds. - Weight::from_parts(110_000_000, 0) - .saturating_add(Weight::from_parts(0, 69046)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(6)) - } - /// Storage: `AmbassadorCollective::Members` (r:1 w:0) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCore::Member` (r:1 w:1) - /// Proof: `AmbassadorCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCore::MemberEvidence` (r:0 w:1) - /// Proof: `AmbassadorCore::MemberEvidence` (`max_values`: None, `max_size`: Some(65581), added: 68056, mode: `MaxEncodedLen`) - fn offboard() -> Weight { - // Proof Size summary in bytes: - // Measured: `331` - // Estimated: `3514` - // Minimum execution time: 21_000_000 picoseconds. - Weight::from_parts(22_000_000, 0) - .saturating_add(Weight::from_parts(0, 3514)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `AmbassadorCore::Member` (r:1 w:1) - /// Proof: `AmbassadorCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::Members` (r:1 w:0) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - fn import() -> Weight { - // Proof Size summary in bytes: - // Measured: `285` - // Estimated: `3514` - // Minimum execution time: 20_000_000 picoseconds. - Weight::from_parts(21_000_000, 0) - .saturating_add(Weight::from_parts(0, 3514)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `AmbassadorCollective::Members` (r:1 w:0) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCore::Member` (r:1 w:1) - /// Proof: `AmbassadorCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCore::MemberEvidence` (r:1 w:1) - /// Proof: `AmbassadorCore::MemberEvidence` (`max_values`: None, `max_size`: Some(65581), added: 68056, mode: `MaxEncodedLen`) - fn approve() -> Weight { - // Proof Size summary in bytes: - // Measured: `65967` - // Estimated: `69046` - // Minimum execution time: 78_000_000 picoseconds. - Weight::from_parts(104_000_000, 0) - .saturating_add(Weight::from_parts(0, 69046)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `AmbassadorCore::Member` (r:1 w:0) - /// Proof: `AmbassadorCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCore::MemberEvidence` (r:1 w:1) - /// Proof: `AmbassadorCore::MemberEvidence` (`max_values`: None, `max_size`: Some(65581), added: 68056, mode: `MaxEncodedLen`) - fn submit_evidence() -> Weight { - // Proof Size summary in bytes: - // Measured: `151` - // Estimated: `69046` - // Minimum execution time: 43_000_000 picoseconds. - Weight::from_parts(44_000_000, 0) - .saturating_add(Weight::from_parts(0, 69046)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_core_fellowship_fellowship_core.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_core_fellowship_fellowship_core.rs deleted file mode 100644 index 471ee82ead7..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_core_fellowship_fellowship_core.rs +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_core_fellowship` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-08-11, STEPS: `2`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `cob`, CPU: `` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/release/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_core_fellowship -// --extrinsic=* -// --steps=2 -// --repeat=2 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_core_fellowship`. -pub struct WeightInfo(PhantomData); -impl pallet_core_fellowship::WeightInfo for WeightInfo { - /// Storage: `FellowshipCore::Params` (r:0 w:1) - /// Proof: `FellowshipCore::Params` (`max_values`: Some(1), `max_size`: Some(364), added: 859, mode: `MaxEncodedLen`) - fn set_params() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 11_000_000 picoseconds. - Weight::from_parts(12_000_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `FellowshipCore::Member` (r:1 w:1) - /// Proof: `FellowshipCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::Members` (r:1 w:1) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCore::Params` (r:1 w:0) - /// Proof: `FellowshipCore::Params` (`max_values`: Some(1), `max_size`: Some(364), added: 859, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:1) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::IdToIndex` (r:1 w:0) - /// Proof: `FellowshipCollective::IdToIndex` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCore::MemberEvidence` (r:1 w:1) - /// Proof: `FellowshipCore::MemberEvidence` (`max_values`: None, `max_size`: Some(65581), added: 68056, mode: `MaxEncodedLen`) - fn bump_offboard() -> Weight { - // Proof Size summary in bytes: - // Measured: `66144` - // Estimated: `69046` - // Minimum execution time: 109_000_000 picoseconds. - Weight::from_parts(125_000_000, 0) - .saturating_add(Weight::from_parts(0, 69046)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `FellowshipCore::Member` (r:1 w:1) - /// Proof: `FellowshipCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::Members` (r:1 w:1) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCore::Params` (r:1 w:0) - /// Proof: `FellowshipCore::Params` (`max_values`: Some(1), `max_size`: Some(364), added: 859, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:1) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::IdToIndex` (r:1 w:0) - /// Proof: `FellowshipCollective::IdToIndex` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCore::MemberEvidence` (r:1 w:1) - /// Proof: `FellowshipCore::MemberEvidence` (`max_values`: None, `max_size`: Some(65581), added: 68056, mode: `MaxEncodedLen`) - fn bump_demote() -> Weight { - // Proof Size summary in bytes: - // Measured: `66254` - // Estimated: `69046` - // Minimum execution time: 112_000_000 picoseconds. - Weight::from_parts(114_000_000, 0) - .saturating_add(Weight::from_parts(0, 69046)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `FellowshipCollective::Members` (r:1 w:0) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCore::Member` (r:1 w:1) - /// Proof: `FellowshipCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - fn set_active() -> Weight { - // Proof Size summary in bytes: - // Measured: `493` - // Estimated: `3514` - // Minimum execution time: 22_000_000 picoseconds. - Weight::from_parts(27_000_000, 0) - .saturating_add(Weight::from_parts(0, 3514)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `FellowshipCore::Member` (r:1 w:1) - /// Proof: `FellowshipCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::Members` (r:1 w:1) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:1) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::IndexToId` (r:0 w:1) - /// Proof: `FellowshipCollective::IndexToId` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::IdToIndex` (r:0 w:1) - /// Proof: `FellowshipCollective::IdToIndex` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - fn induct() -> Weight { - // Proof Size summary in bytes: - // Measured: `251` - // Estimated: `3514` - // Minimum execution time: 35_000_000 picoseconds. - Weight::from_parts(36_000_000, 0) - .saturating_add(Weight::from_parts(0, 3514)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `FellowshipCollective::Members` (r:1 w:1) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCore::Member` (r:1 w:1) - /// Proof: `FellowshipCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCore::Params` (r:1 w:0) - /// Proof: `FellowshipCore::Params` (`max_values`: Some(1), `max_size`: Some(364), added: 859, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:1) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCore::MemberEvidence` (r:1 w:1) - /// Proof: `FellowshipCore::MemberEvidence` (`max_values`: None, `max_size`: Some(65581), added: 68056, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::IndexToId` (r:0 w:1) - /// Proof: `FellowshipCollective::IndexToId` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::IdToIndex` (r:0 w:1) - /// Proof: `FellowshipCollective::IdToIndex` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - fn promote() -> Weight { - // Proof Size summary in bytes: - // Measured: `66122` - // Estimated: `69046` - // Minimum execution time: 97_000_000 picoseconds. - Weight::from_parts(129_000_000, 0) - .saturating_add(Weight::from_parts(0, 69046)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(6)) - } - /// Storage: `FellowshipCollective::Members` (r:1 w:0) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCore::Member` (r:1 w:1) - /// Proof: `FellowshipCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCore::MemberEvidence` (r:0 w:1) - /// Proof: `FellowshipCore::MemberEvidence` (`max_values`: None, `max_size`: Some(65581), added: 68056, mode: `MaxEncodedLen`) - fn offboard() -> Weight { - // Proof Size summary in bytes: - // Measured: `464` - // Estimated: `3514` - // Minimum execution time: 22_000_000 picoseconds. - Weight::from_parts(22_000_000, 0) - .saturating_add(Weight::from_parts(0, 3514)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `FellowshipCore::Member` (r:1 w:1) - /// Proof: `FellowshipCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::Members` (r:1 w:0) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - fn import() -> Weight { - // Proof Size summary in bytes: - // Measured: `418` - // Estimated: `3514` - // Minimum execution time: 20_000_000 picoseconds. - Weight::from_parts(24_000_000, 0) - .saturating_add(Weight::from_parts(0, 3514)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `FellowshipCollective::Members` (r:1 w:0) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCore::Member` (r:1 w:1) - /// Proof: `FellowshipCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCore::MemberEvidence` (r:1 w:1) - /// Proof: `FellowshipCore::MemberEvidence` (`max_values`: None, `max_size`: Some(65581), added: 68056, mode: `MaxEncodedLen`) - fn approve() -> Weight { - // Proof Size summary in bytes: - // Measured: `66100` - // Estimated: `69046` - // Minimum execution time: 89_000_000 picoseconds. - Weight::from_parts(119_000_000, 0) - .saturating_add(Weight::from_parts(0, 69046)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `FellowshipCore::Member` (r:1 w:0) - /// Proof: `FellowshipCore::Member` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCore::MemberEvidence` (r:1 w:1) - /// Proof: `FellowshipCore::MemberEvidence` (`max_values`: None, `max_size`: Some(65581), added: 68056, mode: `MaxEncodedLen`) - fn submit_evidence() -> Weight { - // Proof Size summary in bytes: - // Measured: `184` - // Estimated: `69046` - // Minimum execution time: 43_000_000 picoseconds. - Weight::from_parts(52_000_000, 0) - .saturating_add(Weight::from_parts(0, 69046)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_message_queue.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_message_queue.rs deleted file mode 100644 index 4bd71c4e7d4..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_message_queue.rs +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_message_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-03-24, STEPS: `2`, REPEAT: `1`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `i9`, CPU: `13th Gen Intel(R) Core(TM) i9-13900K` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("collectives-polkadot-dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/polkadot-parachain -// benchmark -// pallet -// --chain -// collectives-polkadot-dev -// --pallet -// pallet_message_queue -// --extrinsic -// * -// --execution -// wasm -// --wasm-execution -// compiled -// --output -// parachains/runtimes/collectives/collectives-polkadot/src/weights - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::Weight}; -use sp_std::marker::PhantomData; - -/// Weight functions for `pallet_message_queue`. -pub struct WeightInfo(PhantomData); -impl pallet_message_queue::WeightInfo for WeightInfo { - /// Storage: MessageQueue ServiceHead (r:1 w:0) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: MessageQueue BookStateFor (r:2 w:2) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn ready_ring_knit() -> Weight { - // Proof Size summary in bytes: - // Measured: `189` - // Estimated: `7534` - // Minimum execution time: 11_440_000 picoseconds. - Weight::from_parts(11_440_000, 0) - .saturating_add(Weight::from_parts(0, 7534)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:2 w:2) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - fn ready_ring_unknit() -> Weight { - // Proof Size summary in bytes: - // Measured: `184` - // Estimated: `7534` - // Minimum execution time: 11_077_000 picoseconds. - Weight::from_parts(11_077_000, 0) - .saturating_add(Weight::from_parts(0, 7534)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn service_queue_base() -> Weight { - // Proof Size summary in bytes: - // Measured: `6` - // Estimated: `3517` - // Minimum execution time: 3_977_000 picoseconds. - Weight::from_parts(3_977_000, 0) - .saturating_add(Weight::from_parts(0, 3517)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn service_page_base_completion() -> Weight { - // Proof Size summary in bytes: - // Measured: `72` - // Estimated: `69050` - // Minimum execution time: 4_831_000 picoseconds. - Weight::from_parts(4_831_000, 0) - .saturating_add(Weight::from_parts(0, 69050)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn service_page_base_no_completion() -> Weight { - // Proof Size summary in bytes: - // Measured: `72` - // Estimated: `69050` - // Minimum execution time: 5_192_000 picoseconds. - Weight::from_parts(5_192_000, 0) - .saturating_add(Weight::from_parts(0, 69050)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn service_page_item() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 58_750_000 picoseconds. - Weight::from_parts(58_750_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: MessageQueue BookStateFor (r:1 w:0) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn bump_service_head() -> Weight { - // Proof Size summary in bytes: - // Measured: `99` - // Estimated: `5007` - // Minimum execution time: 5_107_000 picoseconds. - Weight::from_parts(5_107_000, 0) - .saturating_add(Weight::from_parts(0, 5007)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn reap_page() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 46_814_000 picoseconds. - Weight::from_parts(46_814_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn execute_overweight_page_removed() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 52_510_000 picoseconds. - Weight::from_parts(52_510_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn execute_overweight_page_updated() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 71_930_000 picoseconds. - Weight::from_parts(71_930_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs deleted file mode 100644 index a7827b72009..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_multisig` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_multisig -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_multisig`. -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 { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 13_288_000 picoseconds. - Weight::from_parts(14_235_741, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 5 - .saturating_add(Weight::from_parts(500, 0).saturating_mul(z.into())) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_create(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `328 + s * (2 ±0)` - // Estimated: `6811` - // Minimum execution time: 44_865_000 picoseconds. - Weight::from_parts(33_468_056, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_513 - .saturating_add(Weight::from_parts(130_544, 0).saturating_mul(s.into())) - // Standard Error: 14 - .saturating_add(Weight::from_parts(1_422, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[3, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_approve(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `348` - // Estimated: `6811` - // Minimum execution time: 29_284_000 picoseconds. - Weight::from_parts(18_708_967, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 916 - .saturating_add(Weight::from_parts(119_202, 0).saturating_mul(s.into())) - // Standard Error: 8 - .saturating_add(Weight::from_parts(1_447, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_complete(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `451 + s * (33 ±0)` - // Estimated: `6811` - // Minimum execution time: 49_462_000 picoseconds. - Weight::from_parts(34_470_286, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_738 - .saturating_add(Weight::from_parts(178_227, 0).saturating_mul(s.into())) - // Standard Error: 17 - .saturating_add(Weight::from_parts(1_644, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_create(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `329 + s * (2 ±0)` - // Estimated: `6811` - // Minimum execution time: 30_749_000 picoseconds. - Weight::from_parts(31_841_438, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 1_033 - .saturating_add(Weight::from_parts(123_126, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_approve(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `348` - // Estimated: `6811` - // Minimum execution time: 17_436_000 picoseconds. - Weight::from_parts(18_036_002, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 829 - .saturating_add(Weight::from_parts(109_450, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn cancel_as_multi(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `520 + s * (1 ±0)` - // Estimated: `6811` - // Minimum execution time: 31_532_000 picoseconds. - Weight::from_parts(32_818_015, 0) - .saturating_add(Weight::from_parts(0, 6811)) - // Standard Error: 977 - .saturating_add(Weight::from_parts(123_121, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_preimage.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_preimage.rs deleted file mode 100644 index 9b45c875818..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_preimage.rs +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_preimage` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_preimage -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_preimage`. -pub struct WeightInfo(PhantomData); -impl pallet_preimage::WeightInfo for WeightInfo { - fn ensure_updated(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `193 + n * (91 ±0)` - // Estimated: `3593 + n * (2566 ±0)` - // Minimum execution time: 2_000_000 picoseconds. - Weight::from_parts(2_000_000, 3593) - // Standard Error: 13_720 - .saturating_add(Weight::from_parts(17_309_199, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) - .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) - .saturating_add(Weight::from_parts(0, 2566).saturating_mul(n.into())) - } - - /// Storage: `Preimage::StatusFor` (r:1 w:1) - /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) - /// Storage: `Preimage::PreimageFor` (r:0 w:1) - /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`) - /// The range of component `s` is `[0, 4194304]`. - fn note_preimage(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `177` - // Estimated: `3556` - // Minimum execution time: 29_323_000 picoseconds. - Weight::from_parts(29_793_000, 0) - .saturating_add(Weight::from_parts(0, 3556)) - // Standard Error: 5 - .saturating_add(Weight::from_parts(2_504, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Preimage::StatusFor` (r:1 w:1) - /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) - /// Storage: `Preimage::PreimageFor` (r:0 w:1) - /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`) - /// The range of component `s` is `[0, 4194304]`. - fn note_requested_preimage(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `140` - // Estimated: `3556` - // Minimum execution time: 15_581_000 picoseconds. - Weight::from_parts(15_659_000, 0) - .saturating_add(Weight::from_parts(0, 3556)) - // Standard Error: 4 - .saturating_add(Weight::from_parts(2_500, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Preimage::StatusFor` (r:1 w:1) - /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) - /// Storage: `Preimage::PreimageFor` (r:0 w:1) - /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`) - /// The range of component `s` is `[0, 4194304]`. - fn note_no_deposit_preimage(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `140` - // Estimated: `3556` - // Minimum execution time: 15_028_000 picoseconds. - Weight::from_parts(15_150_000, 0) - .saturating_add(Weight::from_parts(0, 3556)) - // Standard Error: 6 - .saturating_add(Weight::from_parts(2_560, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Preimage::StatusFor` (r:1 w:1) - /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) - /// Storage: `Preimage::PreimageFor` (r:0 w:1) - /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`) - fn unnote_preimage() -> Weight { - // Proof Size summary in bytes: - // Measured: `323` - // Estimated: `3556` - // Minimum execution time: 55_113_000 picoseconds. - Weight::from_parts(59_127_000, 0) - .saturating_add(Weight::from_parts(0, 3556)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Preimage::StatusFor` (r:1 w:1) - /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) - /// Storage: `Preimage::PreimageFor` (r:0 w:1) - /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`) - fn unnote_no_deposit_preimage() -> Weight { - // Proof Size summary in bytes: - // Measured: `178` - // Estimated: `3556` - // Minimum execution time: 38_033_000 picoseconds. - Weight::from_parts(41_203_000, 0) - .saturating_add(Weight::from_parts(0, 3556)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Preimage::StatusFor` (r:1 w:1) - /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) - fn request_preimage() -> Weight { - // Proof Size summary in bytes: - // Measured: `222` - // Estimated: `3556` - // Minimum execution time: 31_482_000 picoseconds. - Weight::from_parts(34_726_000, 0) - .saturating_add(Weight::from_parts(0, 3556)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Preimage::StatusFor` (r:1 w:1) - /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) - fn request_no_deposit_preimage() -> Weight { - // Proof Size summary in bytes: - // Measured: `178` - // Estimated: `3556` - // Minimum execution time: 20_724_000 picoseconds. - Weight::from_parts(22_928_000, 0) - .saturating_add(Weight::from_parts(0, 3556)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Preimage::StatusFor` (r:1 w:1) - /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) - fn request_unnoted_preimage() -> Weight { - // Proof Size summary in bytes: - // Measured: `76` - // Estimated: `3556` - // Minimum execution time: 27_015_000 picoseconds. - Weight::from_parts(29_240_000, 0) - .saturating_add(Weight::from_parts(0, 3556)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Preimage::StatusFor` (r:1 w:1) - /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) - fn request_requested_preimage() -> Weight { - // Proof Size summary in bytes: - // Measured: `140` - // Estimated: `3556` - // Minimum execution time: 10_712_000 picoseconds. - Weight::from_parts(11_317_000, 0) - .saturating_add(Weight::from_parts(0, 3556)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Preimage::StatusFor` (r:1 w:1) - /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) - /// Storage: `Preimage::PreimageFor` (r:0 w:1) - /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`) - fn unrequest_preimage() -> Weight { - // Proof Size summary in bytes: - // Measured: `178` - // Estimated: `3556` - // Minimum execution time: 34_528_000 picoseconds. - Weight::from_parts(35_982_000, 0) - .saturating_add(Weight::from_parts(0, 3556)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Preimage::StatusFor` (r:1 w:1) - /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) - fn unrequest_unnoted_preimage() -> Weight { - // Proof Size summary in bytes: - // Measured: `140` - // Estimated: `3556` - // Minimum execution time: 11_059_000 picoseconds. - Weight::from_parts(12_458_000, 0) - .saturating_add(Weight::from_parts(0, 3556)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Preimage::StatusFor` (r:1 w:1) - /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) - fn unrequest_multi_referenced_preimage() -> Weight { - // Proof Size summary in bytes: - // Measured: `140` - // Estimated: `3556` - // Minimum execution time: 11_502_000 picoseconds. - Weight::from_parts(12_180_000, 0) - .saturating_add(Weight::from_parts(0, 3556)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs deleted file mode 100644 index 59d9f912bf1..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs +++ /dev/null @@ -1,225 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_proxy` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_proxy -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_proxy`. -pub struct WeightInfo(PhantomData); -impl pallet_proxy::WeightInfo for WeightInfo { - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `127 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 15_597_000 picoseconds. - Weight::from_parts(16_231_993, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 1_665 - .saturating_add(Weight::from_parts(29_818, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - } - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn proxy_announced(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `454 + a * (68 ±0) + p * (37 ±0)` - // Estimated: `5698` - // Minimum execution time: 36_685_000 picoseconds. - Weight::from_parts(36_376_358, 0) - .saturating_add(Weight::from_parts(0, 5698)) - // Standard Error: 3_003 - .saturating_add(Weight::from_parts(133_776, 0).saturating_mul(a.into())) - // Standard Error: 3_103 - .saturating_add(Weight::from_parts(60_315, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn remove_announcement(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `369 + a * (68 ±0)` - // Estimated: `5698` - // Minimum execution time: 23_835_000 picoseconds. - Weight::from_parts(24_154_219, 0) - .saturating_add(Weight::from_parts(0, 5698)) - // Standard Error: 1_580 - .saturating_add(Weight::from_parts(125_884, 0).saturating_mul(a.into())) - // Standard Error: 1_632 - .saturating_add(Weight::from_parts(21_563, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn reject_announcement(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `369 + a * (68 ±0)` - // Estimated: `5698` - // Minimum execution time: 23_997_000 picoseconds. - Weight::from_parts(24_301_638, 0) - .saturating_add(Weight::from_parts(0, 5698)) - // Standard Error: 1_658 - .saturating_add(Weight::from_parts(133_005, 0).saturating_mul(a.into())) - // Standard Error: 1_713 - .saturating_add(Weight::from_parts(20_237, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn announce(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `386 + a * (68 ±0) + p * (37 ±0)` - // Estimated: `5698` - // Minimum execution time: 33_604_000 picoseconds. - Weight::from_parts(33_322_880, 0) - .saturating_add(Weight::from_parts(0, 5698)) - // Standard Error: 1_840 - .saturating_add(Weight::from_parts(114_037, 0).saturating_mul(a.into())) - // Standard Error: 1_901 - .saturating_add(Weight::from_parts(45_629, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn add_proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `127 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 24_634_000 picoseconds. - Weight::from_parts(25_509_118, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 2_278 - .saturating_add(Weight::from_parts(38_401, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn remove_proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `127 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 24_855_000 picoseconds. - Weight::from_parts(25_753_505, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 1_819 - .saturating_add(Weight::from_parts(44_357, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn remove_proxies(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `127 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 22_211_000 picoseconds. - Weight::from_parts(23_094_124, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 2_597 - .saturating_add(Weight::from_parts(36_725, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn create_pure(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `139` - // Estimated: `4706` - // Minimum execution time: 26_764_000 picoseconds. - Weight::from_parts(27_667_535, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 1_111 - .saturating_add(Weight::from_parts(3_422, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[0, 30]`. - fn kill_pure(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `164 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 22_632_000 picoseconds. - Weight::from_parts(23_678_772, 0) - .saturating_add(Weight::from_parts(0, 4706)) - // Standard Error: 2_136 - .saturating_add(Weight::from_parts(26_492, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_ranked_collective_ambassador_collective.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_ranked_collective_ambassador_collective.rs deleted file mode 100644 index a6372c4b89d..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_ranked_collective_ambassador_collective.rs +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright 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_ranked_collective` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-08-11, STEPS: `2`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `cob`, CPU: `` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/release/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_ranked_collective -// --extrinsic=* -// --steps=2 -// --repeat=2 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_ranked_collective`. -pub struct WeightInfo(PhantomData); -impl pallet_ranked_collective::WeightInfo for WeightInfo { - /// Storage: `AmbassadorCollective::Members` (r:1 w:1) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:1) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::IndexToId` (r:0 w:1) - /// Proof: `AmbassadorCollective::IndexToId` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::IdToIndex` (r:0 w:1) - /// Proof: `AmbassadorCollective::IdToIndex` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - fn add_member() -> Weight { - // Proof Size summary in bytes: - // Measured: `42` - // Estimated: `3507` - // Minimum execution time: 21_000_000 picoseconds. - Weight::from_parts(23_000_000, 0) - .saturating_add(Weight::from_parts(0, 3507)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `AmbassadorCollective::Members` (r:1 w:1) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:11 w:11) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::IdToIndex` (r:11 w:11) - /// Proof: `AmbassadorCollective::IdToIndex` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::IndexToId` (r:11 w:11) - /// Proof: `AmbassadorCollective::IndexToId` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// The range of component `r` is `[0, 10]`. - /// The range of component `r` is `[0, 10]`. - fn remove_member(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `508 + r * (281 ±0)` - // Estimated: `3519 + r * (2529 ±0)` - // Minimum execution time: 34_000_000 picoseconds. - Weight::from_parts(36_500_000, 0) - .saturating_add(Weight::from_parts(0, 3519)) - // Standard Error: 158_113 - .saturating_add(Weight::from_parts(16_000_000, 0).saturating_mul(r.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(r.into()))) - .saturating_add(T::DbWeight::get().writes(4)) - .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(r.into()))) - .saturating_add(Weight::from_parts(0, 2529).saturating_mul(r.into())) - } - /// Storage: `AmbassadorCollective::Members` (r:1 w:1) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:1) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::IndexToId` (r:0 w:1) - /// Proof: `AmbassadorCollective::IndexToId` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::IdToIndex` (r:0 w:1) - /// Proof: `AmbassadorCollective::IdToIndex` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// The range of component `r` is `[0, 10]`. - /// The range of component `r` is `[0, 10]`. - fn promote_member(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `210 + r * (17 ±0)` - // Estimated: `3507` - // Minimum execution time: 25_000_000 picoseconds. - Weight::from_parts(26_000_000, 0) - .saturating_add(Weight::from_parts(0, 3507)) - // Standard Error: 180_277 - .saturating_add(Weight::from_parts(650_000, 0).saturating_mul(r.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `AmbassadorCollective::Members` (r:1 w:1) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:1) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::IdToIndex` (r:1 w:1) - /// Proof: `AmbassadorCollective::IdToIndex` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::IndexToId` (r:1 w:1) - /// Proof: `AmbassadorCollective::IndexToId` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// The range of component `r` is `[0, 10]`. - /// The range of component `r` is `[0, 10]`. - fn demote_member(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `508 + r * (71 ±0)` - // Estimated: `3519` - // Minimum execution time: 34_000_000 picoseconds. - Weight::from_parts(36_500_000, 0) - .saturating_add(Weight::from_parts(0, 3519)) - // Standard Error: 335_410 - .saturating_add(Weight::from_parts(550_000, 0).saturating_mul(r.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `AmbassadorCollective::Members` (r:1 w:0) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::Voting` (r:1 w:1) - /// Proof: `AmbassadorCollective::Voting` (`max_values`: None, `max_size`: Some(65), added: 2540, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:2 w:2) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn vote() -> Weight { - // Proof Size summary in bytes: - // Measured: `566` - // Estimated: `317568` - // Minimum execution time: 57_000_000 picoseconds. - Weight::from_parts(60_000_000, 0) - .saturating_add(Weight::from_parts(0, 317568)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:0) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::VotingCleanup` (r:1 w:0) - /// Proof: `AmbassadorCollective::VotingCleanup` (`max_values`: None, `max_size`: Some(114), added: 2589, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::Voting` (r:100 w:100) - /// Proof: `AmbassadorCollective::Voting` (`max_values`: None, `max_size`: Some(65), added: 2540, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 100]`. - /// The range of component `n` is `[0, 100]`. - fn cleanup_poll(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `209 + n * (52 ±0)` - // Estimated: `4365 + n * (2550 ±0)` - // Minimum execution time: 18_000_000 picoseconds. - Weight::from_parts(18_500_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - // Standard Error: 11_180 - .saturating_add(Weight::from_parts(1_335_000, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) - .saturating_add(Weight::from_parts(0, 2550).saturating_mul(n.into())) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_ranked_collective_fellowship_collective.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_ranked_collective_fellowship_collective.rs deleted file mode 100644 index 9c773c56ac3..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_ranked_collective_fellowship_collective.rs +++ /dev/null @@ -1,176 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_ranked_collective` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-08-11, STEPS: `2`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `cob`, CPU: `` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/release/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_ranked_collective -// --extrinsic=* -// --steps=2 -// --repeat=2 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_ranked_collective`. -pub struct WeightInfo(PhantomData); -impl pallet_ranked_collective::WeightInfo for WeightInfo { - /// Storage: `FellowshipCollective::Members` (r:1 w:1) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:1) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::IndexToId` (r:0 w:1) - /// Proof: `FellowshipCollective::IndexToId` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::IdToIndex` (r:0 w:1) - /// Proof: `FellowshipCollective::IdToIndex` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - fn add_member() -> Weight { - // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `3507` - // Minimum execution time: 21_000_000 picoseconds. - Weight::from_parts(22_000_000, 0) - .saturating_add(Weight::from_parts(0, 3507)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `FellowshipCollective::Members` (r:1 w:1) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:11 w:11) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::IdToIndex` (r:11 w:11) - /// Proof: `FellowshipCollective::IdToIndex` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::IndexToId` (r:11 w:11) - /// Proof: `FellowshipCollective::IndexToId` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// The range of component `r` is `[0, 10]`. - /// The range of component `r` is `[0, 10]`. - fn remove_member(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `608 + r * (281 ±0)` - // Estimated: `3519 + r * (2529 ±0)` - // Minimum execution time: 35_000_000 picoseconds. - Weight::from_parts(36_500_000, 0) - .saturating_add(Weight::from_parts(0, 3519)) - // Standard Error: 254_950 - .saturating_add(Weight::from_parts(15_900_000, 0).saturating_mul(r.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(r.into()))) - .saturating_add(T::DbWeight::get().writes(4)) - .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(r.into()))) - .saturating_add(Weight::from_parts(0, 2529).saturating_mul(r.into())) - } - /// Storage: `FellowshipCollective::Members` (r:1 w:1) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:1) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::IndexToId` (r:0 w:1) - /// Proof: `FellowshipCollective::IndexToId` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::IdToIndex` (r:0 w:1) - /// Proof: `FellowshipCollective::IdToIndex` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// The range of component `r` is `[0, 10]`. - /// The range of component `r` is `[0, 10]`. - fn promote_member(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `310 + r * (17 ±0)` - // Estimated: `3507` - // Minimum execution time: 25_000_000 picoseconds. - Weight::from_parts(25_500_000, 0) - .saturating_add(Weight::from_parts(0, 3507)) - // Standard Error: 70_710 - .saturating_add(Weight::from_parts(400_000, 0).saturating_mul(r.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `FellowshipCollective::Members` (r:1 w:1) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:1) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::IdToIndex` (r:1 w:1) - /// Proof: `FellowshipCollective::IdToIndex` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::IndexToId` (r:1 w:1) - /// Proof: `FellowshipCollective::IndexToId` (`max_values`: None, `max_size`: Some(54), added: 2529, mode: `MaxEncodedLen`) - /// The range of component `r` is `[0, 10]`. - /// The range of component `r` is `[0, 10]`. - fn demote_member(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `608 + r * (71 ±0)` - // Estimated: `3519` - // Minimum execution time: 35_000_000 picoseconds. - Weight::from_parts(37_500_000, 0) - .saturating_add(Weight::from_parts(0, 3519)) - // Standard Error: 150_000 - .saturating_add(Weight::from_parts(350_000, 0).saturating_mul(r.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `FellowshipCollective::Members` (r:1 w:0) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::Voting` (r:1 w:1) - /// Proof: `FellowshipCollective::Voting` (`max_values`: None, `max_size`: Some(65), added: 2540, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:2 w:2) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn vote() -> Weight { - // Proof Size summary in bytes: - // Measured: `700` - // Estimated: `317568` - // Minimum execution time: 57_000_000 picoseconds. - Weight::from_parts(57_000_000, 0) - .saturating_add(Weight::from_parts(0, 317568)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:0) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::VotingCleanup` (r:1 w:0) - /// Proof: `FellowshipCollective::VotingCleanup` (`max_values`: None, `max_size`: Some(114), added: 2589, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::Voting` (r:100 w:100) - /// Proof: `FellowshipCollective::Voting` (`max_values`: None, `max_size`: Some(65), added: 2540, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 100]`. - /// The range of component `n` is `[0, 100]`. - fn cleanup_poll(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `343 + n * (52 ±0)` - // Estimated: `4365 + n * (2550 ±0)` - // Minimum execution time: 18_000_000 picoseconds. - Weight::from_parts(19_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - // Standard Error: 25_000 - .saturating_add(Weight::from_parts(1_395_000, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) - .saturating_add(Weight::from_parts(0, 2550).saturating_mul(n.into())) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_referenda_ambassador_referenda.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_referenda_ambassador_referenda.rs deleted file mode 100644 index fdc451c5d31..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_referenda_ambassador_referenda.rs +++ /dev/null @@ -1,536 +0,0 @@ -// Copyright 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_referenda` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-08-11, STEPS: `2`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `cob`, CPU: `` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/release/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_referenda -// --extrinsic=* -// --steps=2 -// --repeat=2 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_referenda`. -pub struct WeightInfo(PhantomData); -impl pallet_referenda::WeightInfo for WeightInfo { - /// Storage: `AmbassadorCollective::Members` (r:1 w:0) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::ReferendumCount` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:0 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - fn submit() -> Weight { - // Proof Size summary in bytes: - // Measured: `255` - // Estimated: `159279` - // Minimum execution time: 32_000_000 picoseconds. - Weight::from_parts(34_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:2 w:2) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn place_decision_deposit_preparing() -> Weight { - // Proof Size summary in bytes: - // Measured: `366` - // Estimated: `317568` - // Minimum execution time: 63_000_000 picoseconds. - Weight::from_parts(68_000_000, 0) - .saturating_add(Weight::from_parts(0, 317568)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::DecidingCount` (r:1 w:0) - /// Proof: `AmbassadorReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::TrackQueue` (r:1 w:1) - /// Proof: `AmbassadorReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(171), added: 2646, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn place_decision_deposit_queued() -> Weight { - // Proof Size summary in bytes: - // Measured: `1165` - // Estimated: `159279` - // Minimum execution time: 97_000_000 picoseconds. - Weight::from_parts(123_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::DecidingCount` (r:1 w:0) - /// Proof: `AmbassadorReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::TrackQueue` (r:1 w:1) - /// Proof: `AmbassadorReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(171), added: 2646, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn place_decision_deposit_not_queued() -> Weight { - // Proof Size summary in bytes: - // Measured: `1173` - // Estimated: `159279` - // Minimum execution time: 104_000_000 picoseconds. - Weight::from_parts(111_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::DecidingCount` (r:1 w:1) - /// Proof: `AmbassadorReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:0) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:2 w:2) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn place_decision_deposit_passing() -> Weight { - // Proof Size summary in bytes: - // Measured: `702` - // Estimated: `317568` - // Minimum execution time: 140_000_000 picoseconds. - Weight::from_parts(150_000_000, 0) - .saturating_add(Weight::from_parts(0, 317568)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::DecidingCount` (r:1 w:1) - /// Proof: `AmbassadorReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:0) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:2 w:2) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn place_decision_deposit_failing() -> Weight { - // Proof Size summary in bytes: - // Measured: `601` - // Estimated: `317568` - // Minimum execution time: 81_000_000 picoseconds. - Weight::from_parts(82_000_000, 0) - .saturating_add(Weight::from_parts(0, 317568)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - fn refund_decision_deposit() -> Weight { - // Proof Size summary in bytes: - // Measured: `317` - // Estimated: `4365` - // Minimum execution time: 38_000_000 picoseconds. - Weight::from_parts(38_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - fn refund_submission_deposit() -> Weight { - // Proof Size summary in bytes: - // Measured: `167` - // Estimated: `4365` - // Minimum execution time: 17_000_000 picoseconds. - Weight::from_parts(18_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:2 w:2) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn cancel() -> Weight { - // Proof Size summary in bytes: - // Measured: `311` - // Estimated: `317568` - // Minimum execution time: 44_000_000 picoseconds. - Weight::from_parts(45_000_000, 0) - .saturating_add(Weight::from_parts(0, 317568)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:2 w:2) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ParachainInfo::ParachainId` (r:1 w:0) - /// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AmbassadorReferenda::MetadataOf` (r:1 w:0) - /// Proof: `AmbassadorReferenda::MetadataOf` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn kill() -> Weight { - // Proof Size summary in bytes: - // Measured: `626` - // Estimated: `317568` - // Minimum execution time: 183_000_000 picoseconds. - Weight::from_parts(187_000_000, 0) - .saturating_add(Weight::from_parts(0, 317568)) - .saturating_add(T::DbWeight::get().reads(11)) - .saturating_add(T::DbWeight::get().writes(6)) - } - /// Storage: `AmbassadorReferenda::TrackQueue` (r:1 w:0) - /// Proof: `AmbassadorReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(171), added: 2646, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::DecidingCount` (r:1 w:1) - /// Proof: `AmbassadorReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - fn one_fewer_deciding_queue_empty() -> Weight { - // Proof Size summary in bytes: - // Measured: `140` - // Estimated: `3636` - // Minimum execution time: 12_000_000 picoseconds. - Weight::from_parts(12_000_000, 0) - .saturating_add(Weight::from_parts(0, 3636)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `AmbassadorReferenda::TrackQueue` (r:1 w:1) - /// Proof: `AmbassadorReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(171), added: 2646, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:0) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn one_fewer_deciding_failing() -> Weight { - // Proof Size summary in bytes: - // Measured: `1412` - // Estimated: `159279` - // Minimum execution time: 88_000_000 picoseconds. - Weight::from_parts(97_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `AmbassadorReferenda::TrackQueue` (r:1 w:1) - /// Proof: `AmbassadorReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(171), added: 2646, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:0) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn one_fewer_deciding_passing() -> Weight { - // Proof Size summary in bytes: - // Measured: `1412` - // Estimated: `159279` - // Minimum execution time: 87_000_000 picoseconds. - Weight::from_parts(92_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:0) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::TrackQueue` (r:1 w:1) - /// Proof: `AmbassadorReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(171), added: 2646, mode: `MaxEncodedLen`) - fn nudge_referendum_requeued_insertion() -> Weight { - // Proof Size summary in bytes: - // Measured: `935` - // Estimated: `4365` - // Minimum execution time: 43_000_000 picoseconds. - Weight::from_parts(46_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:0) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::TrackQueue` (r:1 w:1) - /// Proof: `AmbassadorReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(171), added: 2646, mode: `MaxEncodedLen`) - fn nudge_referendum_requeued_slide() -> Weight { - // Proof Size summary in bytes: - // Measured: `935` - // Estimated: `4365` - // Minimum execution time: 39_000_000 picoseconds. - Weight::from_parts(43_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::DecidingCount` (r:1 w:0) - /// Proof: `AmbassadorReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::TrackQueue` (r:1 w:1) - /// Proof: `AmbassadorReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(171), added: 2646, mode: `MaxEncodedLen`) - fn nudge_referendum_queued() -> Weight { - // Proof Size summary in bytes: - // Measured: `951` - // Estimated: `4365` - // Minimum execution time: 48_000_000 picoseconds. - Weight::from_parts(50_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::DecidingCount` (r:1 w:0) - /// Proof: `AmbassadorReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::TrackQueue` (r:1 w:1) - /// Proof: `AmbassadorReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(171), added: 2646, mode: `MaxEncodedLen`) - fn nudge_referendum_not_queued() -> Weight { - // Proof Size summary in bytes: - // Measured: `959` - // Estimated: `4365` - // Minimum execution time: 42_000_000 picoseconds. - Weight::from_parts(48_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_no_deposit() -> Weight { - // Proof Size summary in bytes: - // Measured: `263` - // Estimated: `159279` - // Minimum execution time: 28_000_000 picoseconds. - Weight::from_parts(30_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_preparing() -> Weight { - // Proof Size summary in bytes: - // Measured: `311` - // Estimated: `159279` - // Minimum execution time: 26_000_000 picoseconds. - Weight::from_parts(28_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - fn nudge_referendum_timed_out() -> Weight { - // Proof Size summary in bytes: - // Measured: `208` - // Estimated: `4365` - // Minimum execution time: 19_000_000 picoseconds. - Weight::from_parts(20_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::DecidingCount` (r:1 w:1) - /// Proof: `AmbassadorReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:0) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_begin_deciding_failing() -> Weight { - // Proof Size summary in bytes: - // Measured: `546` - // Estimated: `159279` - // Minimum execution time: 42_000_000 picoseconds. - Weight::from_parts(46_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::DecidingCount` (r:1 w:1) - /// Proof: `AmbassadorReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:0) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_begin_deciding_passing() -> Weight { - // Proof Size summary in bytes: - // Measured: `647` - // Estimated: `159279` - // Minimum execution time: 87_000_000 picoseconds. - Weight::from_parts(93_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:0) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_begin_confirming() -> Weight { - // Proof Size summary in bytes: - // Measured: `700` - // Estimated: `159279` - // Minimum execution time: 100_000_000 picoseconds. - Weight::from_parts(120_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:0) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_end_confirming() -> Weight { - // Proof Size summary in bytes: - // Measured: `683` - // Estimated: `159279` - // Minimum execution time: 90_000_000 picoseconds. - Weight::from_parts(100_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:0) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_continue_not_confirming() -> Weight { - // Proof Size summary in bytes: - // Measured: `700` - // Estimated: `159279` - // Minimum execution time: 77_000_000 picoseconds. - Weight::from_parts(82_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:0) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_continue_confirming() -> Weight { - // Proof Size summary in bytes: - // Measured: `704` - // Estimated: `159279` - // Minimum execution time: 68_000_000 picoseconds. - Weight::from_parts(77_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:0) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:2 w:2) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Lookup` (r:1 w:1) - /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - fn nudge_referendum_approved() -> Weight { - // Proof Size summary in bytes: - // Measured: `704` - // Estimated: `317568` - // Minimum execution time: 99_000_000 picoseconds. - Weight::from_parts(104_000_000, 0) - .saturating_add(Weight::from_parts(0, 317568)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::MemberCount` (r:1 w:0) - /// Proof: `AmbassadorCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_rejected() -> Weight { - // Proof Size summary in bytes: - // Measured: `700` - // Estimated: `159279` - // Minimum execution time: 87_000_000 picoseconds. - Weight::from_parts(100_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:0) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `Preimage::StatusFor` (r:1 w:0) - /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::MetadataOf` (r:0 w:1) - /// Proof: `AmbassadorReferenda::MetadataOf` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn set_some_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `419` - // Estimated: `4365` - // Minimum execution time: 23_000_000 picoseconds. - Weight::from_parts(25_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `AmbassadorReferenda::ReferendumInfoFor` (r:1 w:0) - /// Proof: `AmbassadorReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorReferenda::MetadataOf` (r:1 w:1) - /// Proof: `AmbassadorReferenda::MetadataOf` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `285` - // Estimated: `4365` - // Minimum execution time: 20_000_000 picoseconds. - Weight::from_parts(21_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_referenda_fellowship_referenda.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_referenda_fellowship_referenda.rs deleted file mode 100644 index 63f68833795..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_referenda_fellowship_referenda.rs +++ /dev/null @@ -1,535 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_referenda` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-08-11, STEPS: `2`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `cob`, CPU: `` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/release/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_referenda -// --extrinsic=* -// --steps=2 -// --repeat=2 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_referenda`. -pub struct WeightInfo(PhantomData); -impl pallet_referenda::WeightInfo for WeightInfo { - /// Storage: `FellowshipCollective::Members` (r:1 w:0) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::ReferendumCount` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:0 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - fn submit() -> Weight { - // Proof Size summary in bytes: - // Measured: `389` - // Estimated: `159279` - // Minimum execution time: 34_000_000 picoseconds. - Weight::from_parts(36_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:2 w:2) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn place_decision_deposit_preparing() -> Weight { - // Proof Size summary in bytes: - // Measured: `400` - // Estimated: `317568` - // Minimum execution time: 64_000_000 picoseconds. - Weight::from_parts(67_000_000, 0) - .saturating_add(Weight::from_parts(0, 317568)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::DecidingCount` (r:1 w:0) - /// Proof: `FellowshipReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::TrackQueue` (r:1 w:1) - /// Proof: `FellowshipReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(812), added: 3287, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn place_decision_deposit_queued() -> Weight { - // Proof Size summary in bytes: - // Measured: `2038` - // Estimated: `159279` - // Minimum execution time: 99_000_000 picoseconds. - Weight::from_parts(109_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::DecidingCount` (r:1 w:0) - /// Proof: `FellowshipReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::TrackQueue` (r:1 w:1) - /// Proof: `FellowshipReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(812), added: 3287, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn place_decision_deposit_not_queued() -> Weight { - // Proof Size summary in bytes: - // Measured: `2079` - // Estimated: `159279` - // Minimum execution time: 101_000_000 picoseconds. - Weight::from_parts(111_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::DecidingCount` (r:1 w:1) - /// Proof: `FellowshipReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:0) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:2 w:2) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn place_decision_deposit_passing() -> Weight { - // Proof Size summary in bytes: - // Measured: `836` - // Estimated: `317568` - // Minimum execution time: 135_000_000 picoseconds. - Weight::from_parts(153_000_000, 0) - .saturating_add(Weight::from_parts(0, 317568)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::DecidingCount` (r:1 w:1) - /// Proof: `FellowshipReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:0) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:2 w:2) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn place_decision_deposit_failing() -> Weight { - // Proof Size summary in bytes: - // Measured: `735` - // Estimated: `317568` - // Minimum execution time: 78_000_000 picoseconds. - Weight::from_parts(82_000_000, 0) - .saturating_add(Weight::from_parts(0, 317568)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - fn refund_decision_deposit() -> Weight { - // Proof Size summary in bytes: - // Measured: `351` - // Estimated: `4365` - // Minimum execution time: 38_000_000 picoseconds. - Weight::from_parts(39_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - fn refund_submission_deposit() -> Weight { - // Proof Size summary in bytes: - // Measured: `201` - // Estimated: `4365` - // Minimum execution time: 18_000_000 picoseconds. - Weight::from_parts(19_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:2 w:2) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn cancel() -> Weight { - // Proof Size summary in bytes: - // Measured: `345` - // Estimated: `317568` - // Minimum execution time: 45_000_000 picoseconds. - Weight::from_parts(46_000_000, 0) - .saturating_add(Weight::from_parts(0, 317568)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:2 w:2) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ParachainInfo::ParachainId` (r:1 w:0) - /// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `FellowshipReferenda::MetadataOf` (r:1 w:0) - /// Proof: `FellowshipReferenda::MetadataOf` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn kill() -> Weight { - // Proof Size summary in bytes: - // Measured: `587` - // Estimated: `317568` - // Minimum execution time: 185_000_000 picoseconds. - Weight::from_parts(196_000_000, 0) - .saturating_add(Weight::from_parts(0, 317568)) - .saturating_add(T::DbWeight::get().reads(11)) - .saturating_add(T::DbWeight::get().writes(6)) - } - /// Storage: `FellowshipReferenda::TrackQueue` (r:1 w:0) - /// Proof: `FellowshipReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(812), added: 3287, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::DecidingCount` (r:1 w:1) - /// Proof: `FellowshipReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - fn one_fewer_deciding_queue_empty() -> Weight { - // Proof Size summary in bytes: - // Measured: `174` - // Estimated: `4277` - // Minimum execution time: 12_000_000 picoseconds. - Weight::from_parts(15_000_000, 0) - .saturating_add(Weight::from_parts(0, 4277)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `FellowshipReferenda::TrackQueue` (r:1 w:1) - /// Proof: `FellowshipReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(812), added: 3287, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:0) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn one_fewer_deciding_failing() -> Weight { - // Proof Size summary in bytes: - // Measured: `2452` - // Estimated: `159279` - // Minimum execution time: 82_000_000 picoseconds. - Weight::from_parts(90_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `FellowshipReferenda::TrackQueue` (r:1 w:1) - /// Proof: `FellowshipReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(812), added: 3287, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:0) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn one_fewer_deciding_passing() -> Weight { - // Proof Size summary in bytes: - // Measured: `2452` - // Estimated: `159279` - // Minimum execution time: 91_000_000 picoseconds. - Weight::from_parts(99_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:0) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::TrackQueue` (r:1 w:1) - /// Proof: `FellowshipReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(812), added: 3287, mode: `MaxEncodedLen`) - fn nudge_referendum_requeued_insertion() -> Weight { - // Proof Size summary in bytes: - // Measured: `1841` - // Estimated: `4365` - // Minimum execution time: 41_000_000 picoseconds. - Weight::from_parts(44_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:0) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::TrackQueue` (r:1 w:1) - /// Proof: `FellowshipReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(812), added: 3287, mode: `MaxEncodedLen`) - fn nudge_referendum_requeued_slide() -> Weight { - // Proof Size summary in bytes: - // Measured: `1808` - // Estimated: `4365` - // Minimum execution time: 46_000_000 picoseconds. - Weight::from_parts(55_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::DecidingCount` (r:1 w:0) - /// Proof: `FellowshipReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::TrackQueue` (r:1 w:1) - /// Proof: `FellowshipReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(812), added: 3287, mode: `MaxEncodedLen`) - fn nudge_referendum_queued() -> Weight { - // Proof Size summary in bytes: - // Measured: `1824` - // Estimated: `4365` - // Minimum execution time: 49_000_000 picoseconds. - Weight::from_parts(53_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::DecidingCount` (r:1 w:0) - /// Proof: `FellowshipReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::TrackQueue` (r:1 w:1) - /// Proof: `FellowshipReferenda::TrackQueue` (`max_values`: None, `max_size`: Some(812), added: 3287, mode: `MaxEncodedLen`) - fn nudge_referendum_not_queued() -> Weight { - // Proof Size summary in bytes: - // Measured: `1865` - // Estimated: `4365` - // Minimum execution time: 51_000_000 picoseconds. - Weight::from_parts(54_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_no_deposit() -> Weight { - // Proof Size summary in bytes: - // Measured: `297` - // Estimated: `159279` - // Minimum execution time: 28_000_000 picoseconds. - Weight::from_parts(30_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_preparing() -> Weight { - // Proof Size summary in bytes: - // Measured: `345` - // Estimated: `159279` - // Minimum execution time: 28_000_000 picoseconds. - Weight::from_parts(29_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - fn nudge_referendum_timed_out() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `4365` - // Minimum execution time: 20_000_000 picoseconds. - Weight::from_parts(21_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::DecidingCount` (r:1 w:1) - /// Proof: `FellowshipReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:0) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_begin_deciding_failing() -> Weight { - // Proof Size summary in bytes: - // Measured: `680` - // Estimated: `159279` - // Minimum execution time: 42_000_000 picoseconds. - Weight::from_parts(47_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::DecidingCount` (r:1 w:1) - /// Proof: `FellowshipReferenda::DecidingCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:0) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_begin_deciding_passing() -> Weight { - // Proof Size summary in bytes: - // Measured: `781` - // Estimated: `159279` - // Minimum execution time: 90_000_000 picoseconds. - Weight::from_parts(95_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:0) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_begin_confirming() -> Weight { - // Proof Size summary in bytes: - // Measured: `834` - // Estimated: `159279` - // Minimum execution time: 84_000_000 picoseconds. - Weight::from_parts(93_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:0) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_end_confirming() -> Weight { - // Proof Size summary in bytes: - // Measured: `817` - // Estimated: `159279` - // Minimum execution time: 88_000_000 picoseconds. - Weight::from_parts(98_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:0) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_continue_not_confirming() -> Weight { - // Proof Size summary in bytes: - // Measured: `834` - // Estimated: `159279` - // Minimum execution time: 81_000_000 picoseconds. - Weight::from_parts(93_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:0) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_continue_confirming() -> Weight { - // Proof Size summary in bytes: - // Measured: `838` - // Estimated: `159279` - // Minimum execution time: 74_000_000 picoseconds. - Weight::from_parts(77_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:0) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:2 w:2) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Lookup` (r:1 w:1) - /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - fn nudge_referendum_approved() -> Weight { - // Proof Size summary in bytes: - // Measured: `838` - // Estimated: `317568` - // Minimum execution time: 105_000_000 picoseconds. - Weight::from_parts(123_000_000, 0) - .saturating_add(Weight::from_parts(0, 317568)) - .saturating_add(T::DbWeight::get().reads(5)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:1) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::MemberCount` (r:1 w:0) - /// Proof: `FellowshipCollective::MemberCount` (`max_values`: None, `max_size`: Some(14), added: 2489, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - fn nudge_referendum_rejected() -> Weight { - // Proof Size summary in bytes: - // Measured: `834` - // Estimated: `159279` - // Minimum execution time: 90_000_000 picoseconds. - Weight::from_parts(100_000_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:0) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `Preimage::StatusFor` (r:1 w:0) - /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::MetadataOf` (r:0 w:1) - /// Proof: `FellowshipReferenda::MetadataOf` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn set_some_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `453` - // Estimated: `4365` - // Minimum execution time: 24_000_000 picoseconds. - Weight::from_parts(24_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `FellowshipReferenda::ReferendumInfoFor` (r:1 w:0) - /// Proof: `FellowshipReferenda::ReferendumInfoFor` (`max_values`: None, `max_size`: Some(900), added: 3375, mode: `MaxEncodedLen`) - /// Storage: `FellowshipReferenda::MetadataOf` (r:1 w:1) - /// Proof: `FellowshipReferenda::MetadataOf` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `319` - // Estimated: `4365` - // Minimum execution time: 21_000_000 picoseconds. - Weight::from_parts(23_000_000, 0) - .saturating_add(Weight::from_parts(0, 4365)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_salary_ambassador_salary.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_salary_ambassador_salary.rs deleted file mode 100644 index 0522420f2f5..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_salary_ambassador_salary.rs +++ /dev/null @@ -1,190 +0,0 @@ -// Copyright 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_salary` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-08-11, STEPS: `2`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `cob`, CPU: `` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/release/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_salary -// --extrinsic=* -// --steps=2 -// --repeat=2 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_salary`. -pub struct WeightInfo(PhantomData); -impl pallet_salary::WeightInfo for WeightInfo { - /// Storage: `AmbassadorSalary::Status` (r:1 w:1) - /// Proof: `AmbassadorSalary::Status` (`max_values`: Some(1), `max_size`: Some(56), added: 551, mode: `MaxEncodedLen`) - fn init() -> Weight { - // Proof Size summary in bytes: - // Measured: `109` - // Estimated: `1541` - // Minimum execution time: 12_000_000 picoseconds. - Weight::from_parts(14_000_000, 0) - .saturating_add(Weight::from_parts(0, 1541)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `AmbassadorSalary::Status` (r:1 w:1) - /// Proof: `AmbassadorSalary::Status` (`max_values`: Some(1), `max_size`: Some(56), added: 551, mode: `MaxEncodedLen`) - fn bump() -> Weight { - // Proof Size summary in bytes: - // Measured: `191` - // Estimated: `1541` - // Minimum execution time: 15_000_000 picoseconds. - Weight::from_parts(16_000_000, 0) - .saturating_add(Weight::from_parts(0, 1541)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `AmbassadorSalary::Status` (r:1 w:0) - /// Proof: `AmbassadorSalary::Status` (`max_values`: Some(1), `max_size`: Some(56), added: 551, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::Members` (r:1 w:0) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorSalary::Claimant` (r:1 w:1) - /// Proof: `AmbassadorSalary::Claimant` (`max_values`: None, `max_size`: Some(86), added: 2561, mode: `MaxEncodedLen`) - fn induct() -> Weight { - // Proof Size summary in bytes: - // Measured: `400` - // Estimated: `3551` - // Minimum execution time: 23_000_000 picoseconds. - Weight::from_parts(23_000_000, 0) - .saturating_add(Weight::from_parts(0, 3551)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `AmbassadorCollective::Members` (r:1 w:0) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorSalary::Status` (r:1 w:1) - /// Proof: `AmbassadorSalary::Status` (`max_values`: Some(1), `max_size`: Some(56), added: 551, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorSalary::Claimant` (r:1 w:1) - /// Proof: `AmbassadorSalary::Claimant` (`max_values`: None, `max_size`: Some(86), added: 2561, mode: `MaxEncodedLen`) - fn register() -> Weight { - // Proof Size summary in bytes: - // Measured: `467` - // Estimated: `3551` - // Minimum execution time: 27_000_000 picoseconds. - Weight::from_parts(28_000_000, 0) - .saturating_add(Weight::from_parts(0, 3551)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `AmbassadorSalary::Status` (r:1 w:1) - /// Proof: `AmbassadorSalary::Status` (`max_values`: Some(1), `max_size`: Some(56), added: 551, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorSalary::Claimant` (r:1 w:1) - /// Proof: `AmbassadorSalary::Claimant` (`max_values`: None, `max_size`: Some(86), added: 2561, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::Members` (r:1 w:0) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `ParachainInfo::ParachainId` (r:1 w:0) - /// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::RelevantMessagingState` (r:1 w:0) - /// Proof: `ParachainSystem::RelevantMessagingState` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::OutboundXcmpMessages` (r:0 w:1) - /// Proof: `XcmpQueue::OutboundXcmpMessages` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn payout() -> Weight { - // Proof Size summary in bytes: - // Measured: `879` - // Estimated: `4344` - // Minimum execution time: 68_000_000 picoseconds. - Weight::from_parts(72_000_000, 0) - .saturating_add(Weight::from_parts(0, 4344)) - .saturating_add(T::DbWeight::get().reads(10)) - .saturating_add(T::DbWeight::get().writes(7)) - } - /// Storage: `AmbassadorSalary::Status` (r:1 w:1) - /// Proof: `AmbassadorSalary::Status` (`max_values`: Some(1), `max_size`: Some(56), added: 551, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorSalary::Claimant` (r:1 w:1) - /// Proof: `AmbassadorSalary::Claimant` (`max_values`: None, `max_size`: Some(86), added: 2561, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorCollective::Members` (r:1 w:0) - /// Proof: `AmbassadorCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `ParachainInfo::ParachainId` (r:1 w:0) - /// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::RelevantMessagingState` (r:1 w:0) - /// Proof: `ParachainSystem::RelevantMessagingState` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::OutboundXcmpMessages` (r:0 w:1) - /// Proof: `XcmpQueue::OutboundXcmpMessages` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn payout_other() -> Weight { - // Proof Size summary in bytes: - // Measured: `879` - // Estimated: `4344` - // Minimum execution time: 69_000_000 picoseconds. - Weight::from_parts(70_000_000, 0) - .saturating_add(Weight::from_parts(0, 4344)) - .saturating_add(T::DbWeight::get().reads(10)) - .saturating_add(T::DbWeight::get().writes(7)) - } - /// Storage: `AmbassadorSalary::Status` (r:1 w:1) - /// Proof: `AmbassadorSalary::Status` (`max_values`: Some(1), `max_size`: Some(56), added: 551, mode: `MaxEncodedLen`) - /// Storage: `AmbassadorSalary::Claimant` (r:1 w:1) - /// Proof: `AmbassadorSalary::Claimant` (`max_values`: None, `max_size`: Some(86), added: 2561, mode: `MaxEncodedLen`) - /// Storage: `PolkadotXcm::Queries` (r:1 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn check_payment() -> Weight { - // Proof Size summary in bytes: - // Measured: `479` - // Estimated: `3944` - // Minimum execution time: 27_000_000 picoseconds. - Weight::from_parts(28_000_000, 0) - .saturating_add(Weight::from_parts(0, 3944)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_salary_fellowship_salary.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_salary_fellowship_salary.rs deleted file mode 100644 index 37680b4e5df..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_salary_fellowship_salary.rs +++ /dev/null @@ -1,189 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_salary` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-08-11, STEPS: `2`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `cob`, CPU: `` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/release/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_salary -// --extrinsic=* -// --steps=2 -// --repeat=2 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_salary`. -pub struct WeightInfo(PhantomData); -impl pallet_salary::WeightInfo for WeightInfo { - /// Storage: `FellowshipSalary::Status` (r:1 w:1) - /// Proof: `FellowshipSalary::Status` (`max_values`: Some(1), `max_size`: Some(56), added: 551, mode: `MaxEncodedLen`) - fn init() -> Weight { - // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `1541` - // Minimum execution time: 13_000_000 picoseconds. - Weight::from_parts(17_000_000, 0) - .saturating_add(Weight::from_parts(0, 1541)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `FellowshipSalary::Status` (r:1 w:1) - /// Proof: `FellowshipSalary::Status` (`max_values`: Some(1), `max_size`: Some(56), added: 551, mode: `MaxEncodedLen`) - fn bump() -> Weight { - // Proof Size summary in bytes: - // Measured: `224` - // Estimated: `1541` - // Minimum execution time: 15_000_000 picoseconds. - Weight::from_parts(18_000_000, 0) - .saturating_add(Weight::from_parts(0, 1541)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `FellowshipSalary::Status` (r:1 w:0) - /// Proof: `FellowshipSalary::Status` (`max_values`: Some(1), `max_size`: Some(56), added: 551, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::Members` (r:1 w:0) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `FellowshipSalary::Claimant` (r:1 w:1) - /// Proof: `FellowshipSalary::Claimant` (`max_values`: None, `max_size`: Some(86), added: 2561, mode: `MaxEncodedLen`) - fn induct() -> Weight { - // Proof Size summary in bytes: - // Measured: `395` - // Estimated: `3551` - // Minimum execution time: 22_000_000 picoseconds. - Weight::from_parts(25_000_000, 0) - .saturating_add(Weight::from_parts(0, 3551)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `FellowshipCollective::Members` (r:1 w:0) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `FellowshipSalary::Status` (r:1 w:1) - /// Proof: `FellowshipSalary::Status` (`max_values`: Some(1), `max_size`: Some(56), added: 551, mode: `MaxEncodedLen`) - /// Storage: `FellowshipSalary::Claimant` (r:1 w:1) - /// Proof: `FellowshipSalary::Claimant` (`max_values`: None, `max_size`: Some(86), added: 2561, mode: `MaxEncodedLen`) - fn register() -> Weight { - // Proof Size summary in bytes: - // Measured: `462` - // Estimated: `3551` - // Minimum execution time: 26_000_000 picoseconds. - Weight::from_parts(29_000_000, 0) - .saturating_add(Weight::from_parts(0, 3551)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `FellowshipSalary::Status` (r:1 w:1) - /// Proof: `FellowshipSalary::Status` (`max_values`: Some(1), `max_size`: Some(56), added: 551, mode: `MaxEncodedLen`) - /// Storage: `FellowshipSalary::Claimant` (r:1 w:1) - /// Proof: `FellowshipSalary::Claimant` (`max_values`: None, `max_size`: Some(86), added: 2561, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::Members` (r:1 w:0) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `ParachainInfo::ParachainId` (r:1 w:0) - /// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::RelevantMessagingState` (r:1 w:0) - /// Proof: `ParachainSystem::RelevantMessagingState` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::OutboundXcmpMessages` (r:0 w:1) - /// Proof: `XcmpQueue::OutboundXcmpMessages` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn payout() -> Weight { - // Proof Size summary in bytes: - // Measured: `774` - // Estimated: `4239` - // Minimum execution time: 67_000_000 picoseconds. - Weight::from_parts(74_000_000, 0) - .saturating_add(Weight::from_parts(0, 4239)) - .saturating_add(T::DbWeight::get().reads(10)) - .saturating_add(T::DbWeight::get().writes(7)) - } - /// Storage: `FellowshipSalary::Status` (r:1 w:1) - /// Proof: `FellowshipSalary::Status` (`max_values`: Some(1), `max_size`: Some(56), added: 551, mode: `MaxEncodedLen`) - /// Storage: `FellowshipSalary::Claimant` (r:1 w:1) - /// Proof: `FellowshipSalary::Claimant` (`max_values`: None, `max_size`: Some(86), added: 2561, mode: `MaxEncodedLen`) - /// Storage: `FellowshipCollective::Members` (r:1 w:0) - /// Proof: `FellowshipCollective::Members` (`max_values`: None, `max_size`: Some(42), added: 2517, mode: `MaxEncodedLen`) - /// Storage: `ParachainInfo::ParachainId` (r:1 w:0) - /// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::RelevantMessagingState` (r:1 w:0) - /// Proof: `ParachainSystem::RelevantMessagingState` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::OutboundXcmpMessages` (r:0 w:1) - /// Proof: `XcmpQueue::OutboundXcmpMessages` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn payout_other() -> Weight { - // Proof Size summary in bytes: - // Measured: `774` - // Estimated: `4239` - // Minimum execution time: 66_000_000 picoseconds. - Weight::from_parts(71_000_000, 0) - .saturating_add(Weight::from_parts(0, 4239)) - .saturating_add(T::DbWeight::get().reads(10)) - .saturating_add(T::DbWeight::get().writes(7)) - } - /// Storage: `FellowshipSalary::Status` (r:1 w:1) - /// Proof: `FellowshipSalary::Status` (`max_values`: Some(1), `max_size`: Some(56), added: 551, mode: `MaxEncodedLen`) - /// Storage: `FellowshipSalary::Claimant` (r:1 w:1) - /// Proof: `FellowshipSalary::Claimant` (`max_values`: None, `max_size`: Some(86), added: 2561, mode: `MaxEncodedLen`) - /// Storage: `PolkadotXcm::Queries` (r:1 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn check_payment() -> Weight { - // Proof Size summary in bytes: - // Measured: `512` - // Estimated: `3977` - // Minimum execution time: 26_000_000 picoseconds. - Weight::from_parts(27_000_000, 0) - .saturating_add(Weight::from_parts(0, 3977)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_scheduler.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_scheduler.rs deleted file mode 100644 index cf5610df665..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_scheduler.rs +++ /dev/null @@ -1,206 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_scheduler` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_scheduler -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_scheduler`. -pub struct WeightInfo(PhantomData); -impl pallet_scheduler::WeightInfo for WeightInfo { - /// Storage: `Scheduler::IncompleteSince` (r:1 w:1) - /// Proof: `Scheduler::IncompleteSince` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - fn service_agendas_base() -> Weight { - // Proof Size summary in bytes: - // Measured: `31` - // Estimated: `1489` - // Minimum execution time: 3_441_000 picoseconds. - Weight::from_parts(3_604_000, 0) - .saturating_add(Weight::from_parts(0, 1489)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - /// The range of component `s` is `[0, 200]`. - fn service_agenda_base(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `77 + s * (177 ±0)` - // Estimated: `159279` - // Minimum execution time: 2_879_000 picoseconds. - Weight::from_parts(2_963_000, 0) - .saturating_add(Weight::from_parts(0, 159279)) - // Standard Error: 3_764 - .saturating_add(Weight::from_parts(909_557, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn service_task_base() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 5_172_000 picoseconds. - Weight::from_parts(5_294_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: `Preimage::PreimageFor` (r:1 w:1) - /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `Measured`) - /// Storage: `Preimage::StatusFor` (r:1 w:1) - /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) - /// The range of component `s` is `[128, 4194304]`. - fn service_task_fetched(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `213 + s * (1 ±0)` - // Estimated: `3678 + s * (1 ±0)` - // Minimum execution time: 19_704_000 picoseconds. - Weight::from_parts(19_903_000, 0) - .saturating_add(Weight::from_parts(0, 3678)) - // Standard Error: 5 - .saturating_add(Weight::from_parts(1_394, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - .saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into())) - } - /// Storage: `Scheduler::Lookup` (r:0 w:1) - /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - fn service_task_named() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_359_000 picoseconds. - Weight::from_parts(6_599_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn service_task_periodic() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 5_217_000 picoseconds. - Weight::from_parts(5_333_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - fn execute_dispatch_signed() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_406_000 picoseconds. - Weight::from_parts(2_541_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - fn execute_dispatch_unsigned() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_370_000 picoseconds. - Weight::from_parts(2_561_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - /// The range of component `s` is `[0, 199]`. - fn schedule(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `77 + s * (177 ±0)` - // Estimated: `159279` - // Minimum execution time: 11_784_000 picoseconds. - Weight::from_parts(5_574_404, 0) - .saturating_add(Weight::from_parts(0, 159279)) - // Standard Error: 7_217 - .saturating_add(Weight::from_parts(1_035_248, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Lookup` (r:0 w:1) - /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// The range of component `s` is `[1, 200]`. - fn cancel(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `77 + s * (177 ±0)` - // Estimated: `159279` - // Minimum execution time: 16_373_000 picoseconds. - Weight::from_parts(3_088_135, 0) - .saturating_add(Weight::from_parts(0, 159279)) - // Standard Error: 7_095 - .saturating_add(Weight::from_parts(1_745_270, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Scheduler::Lookup` (r:1 w:1) - /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - /// The range of component `s` is `[0, 199]`. - fn schedule_named(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `468 + s * (179 ±0)` - // Estimated: `159279` - // Minimum execution time: 14_822_000 picoseconds. - Weight::from_parts(9_591_402, 0) - .saturating_add(Weight::from_parts(0, 159279)) - // Standard Error: 7_151 - .saturating_add(Weight::from_parts(1_058_408, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Scheduler::Lookup` (r:1 w:1) - /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// Storage: `Scheduler::Agenda` (r:1 w:1) - /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`) - /// The range of component `s` is `[1, 200]`. - fn cancel_named(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `509 + s * (179 ±0)` - // Estimated: `159279` - // Minimum execution time: 18_541_000 picoseconds. - Weight::from_parts(6_522_239, 0) - .saturating_add(Weight::from_parts(0, 159279)) - // Standard Error: 8_349 - .saturating_add(Weight::from_parts(1_760_431, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_session.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_session.rs deleted file mode 100644 index 2ac0804df89..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_session.rs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_session` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_session -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_session`. -pub struct WeightInfo(PhantomData); -impl pallet_session::WeightInfo for WeightInfo { - /// Storage: `Session::NextKeys` (r:1 w:1) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Session::KeyOwner` (r:1 w:1) - /// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn set_keys() -> Weight { - // Proof Size summary in bytes: - // Measured: `270` - // Estimated: `3735` - // Minimum execution time: 16_663_000 picoseconds. - Weight::from_parts(17_246_000, 0) - .saturating_add(Weight::from_parts(0, 3735)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Session::NextKeys` (r:1 w:1) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Session::KeyOwner` (r:0 w:1) - /// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn purge_keys() -> Weight { - // Proof Size summary in bytes: - // Measured: `242` - // Estimated: `3707` - // Minimum execution time: 11_850_000 picoseconds. - Weight::from_parts(12_204_000, 0) - .saturating_add(Weight::from_parts(0, 3707)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_timestamp.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_timestamp.rs deleted file mode 100644 index ca06f43f92e..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_timestamp.rs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_timestamp` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_timestamp -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_timestamp`. -pub struct WeightInfo(PhantomData); -impl pallet_timestamp::WeightInfo for WeightInfo { - /// Storage: `Timestamp::Now` (r:1 w:1) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `Aura::CurrentSlot` (r:1 w:0) - /// Proof: `Aura::CurrentSlot` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - fn set() -> Weight { - // Proof Size summary in bytes: - // Measured: `49` - // Estimated: `1493` - // Minimum execution time: 7_863_000 picoseconds. - Weight::from_parts(8_183_000, 0) - .saturating_add(Weight::from_parts(0, 1493)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn on_finalize() -> Weight { - // Proof Size summary in bytes: - // Measured: `57` - // Estimated: `0` - // Minimum execution time: 3_460_000 picoseconds. - Weight::from_parts(3_577_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs deleted file mode 100644 index c60a79d91da..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_utility` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=collectives-polkadot-dev -// --wasm-execution=compiled -// --pallet=pallet_utility -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_utility`. -pub struct WeightInfo(PhantomData); -impl pallet_utility::WeightInfo for WeightInfo { - /// The range of component `c` is `[0, 1000]`. - fn batch(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_650_000 picoseconds. - Weight::from_parts(7_474_437, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 1_625 - .saturating_add(Weight::from_parts(4_996_146, 0).saturating_mul(c.into())) - } - fn as_derivative() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_612_000 picoseconds. - Weight::from_parts(4_774_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// The range of component `c` is `[0, 1000]`. - fn batch_all(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_744_000 picoseconds. - Weight::from_parts(10_889_913, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 1_281 - .saturating_add(Weight::from_parts(5_218_293, 0).saturating_mul(c.into())) - } - fn dispatch_as() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 8_673_000 picoseconds. - Weight::from_parts(8_980_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// The range of component `c` is `[0, 1000]`. - fn force_batch(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_744_000 picoseconds. - Weight::from_parts(7_801_721, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 1_395 - .saturating_add(Weight::from_parts(5_000_971, 0).saturating_mul(c.into())) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_xcm.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_xcm.rs deleted file mode 100644 index 57e50284147..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_xcm.rs +++ /dev/null @@ -1,323 +0,0 @@ -// Copyright (C) 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` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-11-10, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-yprdrvc7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024 - -// Executed Command: -// target/production/polkadot-parachain -// benchmark -// pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* -// --wasm-execution=compiled -// --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=pallet_xcm -// --chain=collectives-polkadot-dev -// --header=./cumulus/file_header.txt -// --output=./cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_xcm`. -pub struct WeightInfo(PhantomData); -impl pallet_xcm::WeightInfo for WeightInfo { - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn send() -> Weight { - // Proof Size summary in bytes: - // Measured: `145` - // Estimated: `3610` - // Minimum execution time: 25_050_000 picoseconds. - Weight::from_parts(26_382_000, 0) - .saturating_add(Weight::from_parts(0, 3610)) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ParachainInfo::ParachainId` (r:1 w:0) - /// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - fn teleport_assets() -> Weight { - // Proof Size summary in bytes: - // Measured: `69` - // Estimated: `1489` - // Minimum execution time: 21_625_000 picoseconds. - Weight::from_parts(22_076_000, 0) - .saturating_add(Weight::from_parts(0, 1489)) - .saturating_add(T::DbWeight::get().reads(1)) - } - /// Storage: `Benchmark::Override` (r:0 w:0) - /// Proof: `Benchmark::Override` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn reserve_transfer_assets() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 18_446_744_073_709_551_000 picoseconds. - Weight::from_parts(18_446_744_073_709_551_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: `Benchmark::Override` (r:0 w:0) - /// Proof: `Benchmark::Override` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn execute() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 18_446_744_073_709_551_000 picoseconds. - Weight::from_parts(18_446_744_073_709_551_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: `PolkadotXcm::SupportedVersion` (r:0 w:1) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_xcm_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_076_000 picoseconds. - Weight::from_parts(7_378_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:0 w:1) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn force_default_xcm_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_327_000 picoseconds. - Weight::from_parts(2_454_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_subscribe_version_notify() -> Weight { - // Proof Size summary in bytes: - // Measured: `145` - // Estimated: `3610` - // Minimum execution time: 29_080_000 picoseconds. - Weight::from_parts(29_886_000, 0) - .saturating_add(Weight::from_parts(0, 3610)) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(5)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_unsubscribe_version_notify() -> Weight { - // Proof Size summary in bytes: - // Measured: `363` - // Estimated: `3828` - // Minimum execution time: 30_746_000 picoseconds. - Weight::from_parts(31_631_000, 0) - .saturating_add(Weight::from_parts(0, 3828)) - .saturating_add(T::DbWeight::get().reads(7)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `PolkadotXcm::XcmExecutionSuspended` (r:0 w:1) - /// Proof: `PolkadotXcm::XcmExecutionSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn force_suspension() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_208_000 picoseconds. - Weight::from_parts(2_341_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `PolkadotXcm::SupportedVersion` (r:4 w:2) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_supported_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `162` - // Estimated: `11052` - // Minimum execution time: 16_239_000 picoseconds. - Weight::from_parts(16_881_000, 0) - .saturating_add(Weight::from_parts(0, 11052)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_version_notifiers() -> Weight { - // Proof Size summary in bytes: - // Measured: `166` - // Estimated: `11056` - // Minimum execution time: 16_711_000 picoseconds. - Weight::from_parts(16_944_000, 0) - .saturating_add(Weight::from_parts(0, 11056)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:5 w:0) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn already_notified_target() -> Weight { - // Proof Size summary in bytes: - // Measured: `173` - // Estimated: `13538` - // Minimum execution time: 18_142_000 picoseconds. - Weight::from_parts(18_470_000, 0) - .saturating_add(Weight::from_parts(0, 13538)) - .saturating_add(T::DbWeight::get().reads(5)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:2 w:1) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn notify_current_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `212` - // Estimated: `6152` - // Minimum execution time: 27_687_000 picoseconds. - Weight::from_parts(28_250_000, 0) - .saturating_add(Weight::from_parts(0, 6152)) - .saturating_add(T::DbWeight::get().reads(8)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:3 w:0) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn notify_target_migration_fail() -> Weight { - // Proof Size summary in bytes: - // Measured: `206` - // Estimated: `8621` - // Minimum execution time: 9_675_000 picoseconds. - Weight::from_parts(9_992_000, 0) - .saturating_add(Weight::from_parts(0, 8621)) - .saturating_add(T::DbWeight::get().reads(3)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_version_notify_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `173` - // Estimated: `11063` - // Minimum execution time: 16_597_000 picoseconds. - Weight::from_parts(17_248_000, 0) - .saturating_add(Weight::from_parts(0, 11063)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn migrate_and_notify_old_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `215` - // Estimated: `11105` - // Minimum execution time: 34_649_000 picoseconds. - Weight::from_parts(35_475_000, 0) - .saturating_add(Weight::from_parts(0, 11105)) - .saturating_add(T::DbWeight::get().reads(10)) - .saturating_add(T::DbWeight::get().writes(4)) - } - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn new_query() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `1588` - // Minimum execution time: 4_619_000 picoseconds. - Weight::from_parts(4_756_000, 0) - .saturating_add(Weight::from_parts(0, 1588)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `PolkadotXcm::Queries` (r:1 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn take_response() -> Weight { - // Proof Size summary in bytes: - // Measured: `7740` - // Estimated: `11205` - // Minimum execution time: 26_721_000 picoseconds. - Weight::from_parts(27_412_000, 0) - .saturating_add(Weight::from_parts(0, 11205)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/paritydb_weights.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/paritydb_weights.rs deleted file mode 100644 index 25679703831..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/paritydb_weights.rs +++ /dev/null @@ -1,63 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, RuntimeDbWeight}, - }; - - parameter_types! { - /// `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_REF_TIME_PER_NANOS, - write: 50_000 * constants::WEIGHT_REF_TIME_PER_NANOS, - }; - } - - #[cfg(test)] - mod test_db_weights { - use super::constants::ParityDbWeight as W; - use frame_support::weights::constants; - - /// Checks that all weights exist and have sane values. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - // At least 1 µs. - assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Read weight should be at least 1 µs." - ); - assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Write weight should be at least 1 µs." - ); - // At most 1 ms. - assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Read weight should be at most 1 ms." - ); - assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Write weight should be at most 1 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/rocksdb_weights.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/rocksdb_weights.rs deleted file mode 100644 index 3dd817aa6f1..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/weights/rocksdb_weights.rs +++ /dev/null @@ -1,63 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, RuntimeDbWeight}, - }; - - parameter_types! { - /// 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_REF_TIME_PER_NANOS, - write: 100_000 * constants::WEIGHT_REF_TIME_PER_NANOS, - }; - } - - #[cfg(test)] - mod test_db_weights { - use super::constants::RocksDbWeight as W; - use frame_support::weights::constants; - - /// Checks that all weights exist and have sane values. - // NOTE: If this test fails but you are sure that the generated values are fine, - // you can delete it. - #[test] - fn sane() { - // At least 1 µs. - assert!( - W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Read weight should be at least 1 µs." - ); - assert!( - W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, - "Write weight should be at least 1 µs." - ); - // At most 1 ms. - assert!( - W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Read weight should be at most 1 ms." - ); - assert!( - W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, - "Write weight should be at most 1 ms." - ); - } - } -} diff --git a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs b/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs deleted file mode 100644 index 71845650bd6..00000000000 --- a/cumulus/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs +++ /dev/null @@ -1,331 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use super::{ - AccountId, AllPalletsWithSystem, Balances, BaseDeliveryFee, FeeAssetId, Fellows, ParachainInfo, - ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, - TransactionByteFee, WeightToFee, XcmpQueue, -}; -use frame_support::{ - match_types, parameter_types, - traits::{ConstU32, Contains, Everything, Nothing}, - weights::Weight, -}; -use frame_system::EnsureRoot; -use pallet_xcm::XcmPassthrough; -use parachains_common::{impls::ToStakingPot, xcm_config::ConcreteAssetFromSystem}; -use polkadot_parachain_primitives::primitives::Sibling; -use polkadot_runtime_common::xcm_sender::ExponentialPrice; -use xcm::latest::prelude::*; -use xcm_builder::{ - AccountId32Aliases, AllowExplicitUnpaidExecutionFrom, AllowKnownQueryResponses, - AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, CurrencyAdapter, - DenyReserveTransferToRelayChain, DenyThenTry, EnsureXcmOrigin, FixedWeightBounds, IsConcrete, - LocatableAssetId, OriginToPluralityVoice, ParentAsSuperuser, ParentIsPreset, - RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia, - SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, - TrailingSetTopicAsId, UsingComponents, WithComputedOrigin, WithUniqueTopic, -}; -use xcm_executor::{traits::WithOriginFilter, XcmExecutor}; - -const FELLOWSHIP_ADMIN_INDEX: u32 = 1; - -parameter_types! { - pub const DotLocation: MultiLocation = MultiLocation::parent(); - pub const RelayNetwork: Option = Some(NetworkId::Polkadot); - pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); - pub UniversalLocation: InteriorMultiLocation = - X2(GlobalConsensus(RelayNetwork::get().unwrap()), Parachain(ParachainInfo::parachain_id().into())); - pub CheckingAccount: AccountId = PolkadotXcm::check_account(); - pub const GovernanceLocation: MultiLocation = MultiLocation::parent(); - pub const FellowshipAdminBodyId: BodyId = BodyId::Index(FELLOWSHIP_ADMIN_INDEX); - pub AssetHub: MultiLocation = (Parent, Parachain(1000)).into(); - pub AssetHubUsdtId: AssetId = (PalletInstance(50), GeneralIndex(1984)).into(); - pub UsdtAssetHub: LocatableAssetId = LocatableAssetId { - location: AssetHub::get(), - asset_id: AssetHubUsdtId::get(), - }; - pub DotAssetHub: LocatableAssetId = LocatableAssetId { - location: AssetHub::get(), - asset_id: DotLocation::get().into(), - }; -} - -/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used -/// when determining ownership of accounts for asset transacting and when attempting to use XCM -/// `Transact` in order to determine the dispatch Origin. -pub type LocationToAccountId = ( - // The parent (Relay-chain) origin converts to the parent `AccountId`. - ParentIsPreset, - // Sibling parachain origins convert to AccountId via the `ParaId::into`. - SiblingParachainConvertsVia, - // Straight up local `AccountId32` origins just alias directly to `AccountId`. - AccountId32Aliases, -); - -/// Means for transacting the native currency on this chain. -pub type CurrencyTransactor = CurrencyAdapter< - // Use this currency: - Balances, - // Use this currency when it is a fungible asset matching the given location or name: - IsConcrete, - // Convert an XCM MultiLocation into a local account id: - LocationToAccountId, - // Our chain's account ID type (we can't get away without mentioning it explicitly): - AccountId, - // We don't track any teleports of `Balances`. - (), ->; - -/// 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 -/// biases the kind of local `Origin` it will become. -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, - // Native converter for Relay-chain (Parent) location; will convert to a `Relay` origin when - // recognised. - RelayChainAsNative, - // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when - // recognised. - SiblingParachainAsNative, - // Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a - // transaction from the Root origin. - ParentAsSuperuser, - // Native signed account converter; this just converts an `AccountId32` origin into a normal - // `RuntimeOrigin::Signed` origin of the same 32-byte value. - SignedAccountId32AsNative, - // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. - XcmPassthrough, -); - -parameter_types! { - /// The amount of weight an XCM operation takes. This is a safe overestimate. - pub const BaseXcmWeight: Weight = Weight::from_parts(1_000_000_000, 1024); - /// A temporary weight value for each XCM instruction. - /// NOTE: This should be removed after we account for PoV weights. - pub const TempFixedXcmWeight: Weight = Weight::from_parts(1_000_000_000, 0); - pub const MaxInstructions: u32 = 100; - pub const MaxAssetsIntoHolding: u32 = 64; - // Fellows pluralistic body. - pub const FellowsBodyId: BodyId = BodyId::Technical; -} - -match_types! { - pub type ParentOrParentsPlurality: impl Contains = { - MultiLocation { parents: 1, interior: Here } | - MultiLocation { parents: 1, interior: X1(Plurality { .. }) } - }; - pub type ParentOrSiblings: impl Contains = { - MultiLocation { parents: 1, interior: Here } | - MultiLocation { parents: 1, interior: X1(_) } - }; -} - -/// A call filter for the XCM Transact instruction. This is a temporary measure until we properly -/// account for proof size weights. -/// -/// Calls that are allowed through this filter must: -/// 1. Have a fixed weight; -/// 2. Cannot lead to another call being made; -/// 3. Have a defined proof size weight, e.g. no unbounded vecs in call parameters. -pub struct SafeCallFilter; -impl Contains for SafeCallFilter { - fn contains(call: &RuntimeCall) -> bool { - #[cfg(feature = "runtime-benchmarks")] - { - if matches!(call, RuntimeCall::System(frame_system::Call::remark_with_event { .. })) { - return true - } - } - - matches!( - call, - RuntimeCall::System( - frame_system::Call::set_heap_pages { .. } | - frame_system::Call::set_code { .. } | - frame_system::Call::set_code_without_checks { .. } | - frame_system::Call::kill_prefix { .. }, - ) | RuntimeCall::ParachainSystem(..) | - RuntimeCall::Timestamp(..) | - RuntimeCall::Balances(..) | - RuntimeCall::CollatorSelection( - pallet_collator_selection::Call::set_desired_candidates { .. } | - pallet_collator_selection::Call::set_candidacy_bond { .. } | - pallet_collator_selection::Call::register_as_candidate { .. } | - pallet_collator_selection::Call::leave_intent { .. } | - pallet_collator_selection::Call::set_invulnerables { .. } | - pallet_collator_selection::Call::add_invulnerable { .. } | - pallet_collator_selection::Call::remove_invulnerable { .. }, - ) | RuntimeCall::Session(pallet_session::Call::purge_keys { .. }) | - RuntimeCall::PolkadotXcm(pallet_xcm::Call::force_xcm_version { .. }) | - RuntimeCall::XcmpQueue(..) | - RuntimeCall::MessageQueue(..) | - RuntimeCall::Alliance( - // `init_members` accepts unbounded vecs as arguments, - // but the call can be initiated only by root origin. - pallet_alliance::Call::init_members { .. } | - pallet_alliance::Call::vote { .. } | - pallet_alliance::Call::disband { .. } | - pallet_alliance::Call::set_rule { .. } | - pallet_alliance::Call::announce { .. } | - pallet_alliance::Call::remove_announcement { .. } | - pallet_alliance::Call::join_alliance { .. } | - pallet_alliance::Call::nominate_ally { .. } | - pallet_alliance::Call::elevate_ally { .. } | - pallet_alliance::Call::give_retirement_notice { .. } | - pallet_alliance::Call::retire { .. } | - pallet_alliance::Call::kick_member { .. } | - pallet_alliance::Call::close { .. } | - pallet_alliance::Call::abdicate_fellow_status { .. }, - ) | RuntimeCall::AllianceMotion( - pallet_collective::Call::vote { .. } | - pallet_collective::Call::disapprove_proposal { .. } | - pallet_collective::Call::close { .. }, - ) | RuntimeCall::FellowshipCollective( - pallet_ranked_collective::Call::add_member { .. } | - pallet_ranked_collective::Call::promote_member { .. } | - pallet_ranked_collective::Call::demote_member { .. } | - pallet_ranked_collective::Call::remove_member { .. }, - ) | RuntimeCall::FellowshipCore( - pallet_core_fellowship::Call::bump { .. } | - pallet_core_fellowship::Call::set_params { .. } | - pallet_core_fellowship::Call::set_active { .. } | - pallet_core_fellowship::Call::approve { .. } | - pallet_core_fellowship::Call::induct { .. } | - pallet_core_fellowship::Call::promote { .. } | - pallet_core_fellowship::Call::offboard { .. } | - pallet_core_fellowship::Call::submit_evidence { .. } | - pallet_core_fellowship::Call::import { .. }, - ) - ) - } -} - -pub type Barrier = TrailingSetTopicAsId< - DenyThenTry< - DenyReserveTransferToRelayChain, - ( - // Allow local users to buy weight credit. - TakeWeightCredit, - // Expected responses are OK. - AllowKnownQueryResponses, - // Allow XCMs with some computed origins to pass through. - WithComputedOrigin< - ( - // If the message is one that immediately attempts to pay for execution, then - // allow it. - AllowTopLevelPaidExecutionFrom, - // Parent and its pluralities (i.e. governance bodies) get free execution. - AllowExplicitUnpaidExecutionFrom, - // Subscriptions for version tracking are OK. - AllowSubscriptionsFrom, - ), - UniversalLocation, - ConstU32<8>, - >, - ), - >, ->; - -/// Cases where a remote origin is accepted as trusted Teleporter for a given asset: -/// - DOT with the parent Relay Chain and sibling parachains. -pub type TrustedTeleporters = ConcreteAssetFromSystem; - -pub struct XcmConfig; -impl xcm_executor::Config for XcmConfig { - type RuntimeCall = RuntimeCall; - type XcmSender = XcmRouter; - type AssetTransactor = CurrencyTransactor; - type OriginConverter = XcmOriginToTransactDispatchOrigin; - // 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 = TrustedTeleporters; - type UniversalLocation = UniversalLocation; - type Barrier = Barrier; - type Weigher = FixedWeightBounds; - type Trader = - UsingComponents>; - type ResponseHandler = PolkadotXcm; - type AssetTrap = PolkadotXcm; - type AssetClaims = PolkadotXcm; - type SubscriptionService = PolkadotXcm; - type PalletInstancesInfo = AllPalletsWithSystem; - type MaxAssetsIntoHolding = MaxAssetsIntoHolding; - type AssetLocker = (); - type AssetExchanger = (); - type FeeManager = (); - type MessageExporter = (); - type UniversalAliases = Nothing; - type CallDispatcher = WithOriginFilter; - type SafeCallFilter = SafeCallFilter; - type Aliasers = Nothing; -} - -/// Converts a local signed origin into an XCM multilocation. -/// Forms the basis for local origins sending/executing XCMs. -pub type LocalOriginToLocation = SignedToAccountId32; - -pub type PriceForParentDelivery = - ExponentialPrice; - -/// The means for routing XCM messages which are not for local execution into the right message -/// queues. -pub type XcmRouter = WithUniqueTopic<( - // Two routers - use UMP to communicate with the relay chain: - cumulus_primitives_utility::ParentAsUmp, - // ..and XCMP to communicate with the sibling chains. - XcmpQueue, -)>; - -/// Type to convert the Fellows origin to a Plurality `MultiLocation` value. -pub type FellowsToPlurality = OriginToPluralityVoice; - -impl pallet_xcm::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - // We only allow the Fellows to send messages. - type SendXcmOrigin = EnsureXcmOrigin; - type XcmRouter = XcmRouter; - // We support local origins dispatching XCM executions in principle... - type ExecuteXcmOrigin = EnsureXcmOrigin; - // ... but disallow generic XCM execution. As a result only teleports are allowed. - type XcmExecuteFilter = Nothing; - type XcmExecutor = XcmExecutor; - type XcmTeleportFilter = Everything; - type XcmReserveTransferFilter = Nothing; // This parachain is not meant as a reserve location. - type Weigher = FixedWeightBounds; - type UniversalLocation = UniversalLocation; - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - 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>; - type WeightInfo = crate::weights::pallet_xcm::WeightInfo; - type AdminOrigin = EnsureRoot; - type MaxRemoteLockConsumers = ConstU32<0>; - type RemoteLockConsumerIdentifier = (); -} - -impl cumulus_pallet_xcm::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type XcmExecutor = XcmExecutor; -} diff --git a/cumulus/parachains/runtimes/glutton/glutton-kusama/Cargo.toml b/cumulus/parachains/runtimes/glutton/glutton-kusama/Cargo.toml deleted file mode 100644 index 7f5feb1c880..00000000000 --- a/cumulus/parachains/runtimes/glutton/glutton-kusama/Cargo.toml +++ /dev/null @@ -1,138 +0,0 @@ -[package] -name = "glutton-runtime" -version = "1.0.0" -description = "Glutton parachain runtime." -authors.workspace = true -edition.workspace = true -license = "Apache-2.0" - -[dependencies] -codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -scale-info = { version = "2.10.0", default-features = false, features = ["derive"] } - -# Substrate -frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true} -frame-executive = { path = "../../../../../substrate/frame/executive", default-features = false} -frame-support = { path = "../../../../../substrate/frame/support", default-features = false} -frame-system = { path = "../../../../../substrate/frame/system", default-features = false} -frame-system-rpc-runtime-api = { path = "../../../../../substrate/frame/system/rpc/runtime-api", default-features = false} -frame-system-benchmarking = { path = "../../../../../substrate/frame/system/benchmarking", default-features = false, optional = true} -frame-try-runtime = { path = "../../../../../substrate/frame/try-runtime", default-features = false, optional = true} -pallet-aura = { path = "../../../../../substrate/frame/aura", default-features = false} -pallet-glutton = { path = "../../../../../substrate/frame/glutton", default-features = false, optional = true} -pallet-sudo = { path = "../../../../../substrate/frame/sudo", default-features = false, optional = true} -pallet-timestamp = { path = "../../../../../substrate/frame/timestamp", default-features = false } -sp-api = { path = "../../../../../substrate/primitives/api", default-features = false} -sp-block-builder = { path = "../../../../../substrate/primitives/block-builder", default-features = false} -sp-consensus-aura = { path = "../../../../../substrate/primitives/consensus/aura", default-features = false } -sp-core = { path = "../../../../../substrate/primitives/core", default-features = false} -sp-genesis-builder = { path = "../../../../../substrate/primitives/genesis-builder", default-features = false } -sp-inherents = { path = "../../../../../substrate/primitives/inherents", default-features = false} -pallet-message-queue = { path = "../../../../../substrate/frame/message-queue", default-features = false } -sp-offchain = { path = "../../../../../substrate/primitives/offchain", default-features = false} -sp-runtime = { path = "../../../../../substrate/primitives/runtime", default-features = false} -sp-session = { path = "../../../../../substrate/primitives/session", default-features = false} -sp-std = { path = "../../../../../substrate/primitives/std", default-features = false} -sp-storage = { path = "../../../../../substrate/primitives/storage", default-features = false} -sp-transaction-pool = { path = "../../../../../substrate/primitives/transaction-pool", default-features = false} -sp-version = { path = "../../../../../substrate/primitives/version", default-features = false} - -# Polkadot -xcm = { package = "staging-xcm", path = "../../../../../polkadot/xcm", default-features = false} -xcm-builder = { package = "staging-xcm-builder", path = "../../../../../polkadot/xcm/xcm-builder", default-features = false} -xcm-executor = { package = "staging-xcm-executor", path = "../../../../../polkadot/xcm/xcm-executor", default-features = false} - -# Cumulus -cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } -cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false, features = ["parameterized-consensus-hook",] } -cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } -cumulus-primitives-aura = { path = "../../../../primitives/aura", default-features = false } -cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } -cumulus-primitives-timestamp = { path = "../../../../primitives/timestamp", default-features = false } -parachain-info = { package = "staging-parachain-info", path = "../../../pallets/parachain-info", default-features = false } -parachains-common = { path = "../../../common", default-features = false } - -[build-dependencies] -substrate-wasm-builder = { path = "../../../../../substrate/utils/wasm-builder" } - -[features] -default = [ "std" ] -runtime-benchmarks = [ - "cumulus-pallet-parachain-system/runtime-benchmarks", - "cumulus-primitives-core/runtime-benchmarks", - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system-benchmarking/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "pallet-glutton/runtime-benchmarks", - "pallet-message-queue/runtime-benchmarks", - "pallet-sudo/runtime-benchmarks", - "pallet-timestamp/runtime-benchmarks", - "parachains-common/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "xcm-builder/runtime-benchmarks", - "xcm-executor/runtime-benchmarks", -] -std = [ - "codec/std", - "cumulus-pallet-aura-ext/std", - "cumulus-pallet-parachain-system/std", - "cumulus-pallet-xcm/std", - "cumulus-primitives-aura/std", - "cumulus-primitives-core/std", - "cumulus-primitives-timestamp/std", - "frame-benchmarking?/std", - "frame-executive/std", - "frame-support/std", - "frame-system-benchmarking?/std", - "frame-system-rpc-runtime-api/std", - "frame-system/std", - "frame-try-runtime?/std", - "pallet-aura/std", - "pallet-glutton/std", - "pallet-message-queue/std", - "pallet-sudo/std", - "pallet-timestamp/std", - "parachain-info/std", - "parachains-common/std", - "scale-info/std", - "sp-api/std", - "sp-block-builder/std", - "sp-consensus-aura/std", - "sp-core/std", - "sp-genesis-builder/std", - "sp-inherents/std", - "sp-offchain/std", - "sp-runtime/std", - "sp-session/std", - "sp-std/std", - "sp-storage/std", - "sp-transaction-pool/std", - "sp-version/std", - "xcm-builder/std", - "xcm-executor/std", - "xcm/std", -] -try-runtime = [ - "cumulus-pallet-aura-ext/try-runtime", - "cumulus-pallet-parachain-system/try-runtime", - "cumulus-pallet-xcm/try-runtime", - "frame-executive/try-runtime", - "frame-support/try-runtime", - "frame-system/try-runtime", - "frame-try-runtime/try-runtime", - "pallet-aura/try-runtime", - "pallet-glutton/try-runtime", - "pallet-message-queue/try-runtime", - "pallet-sudo/try-runtime", - "pallet-timestamp/try-runtime", - "parachain-info/try-runtime", - "sp-runtime/try-runtime", -] - -experimental = [ "pallet-aura/experimental" ] - -# A feature that should be enabled when the runtime should be built for on-chain -# deployment. This will disable stuff that shouldn't be part of the on-chain wasm -# to make it smaller like logging for example. -on-chain-release-build = [ "sp-api/disable-logging" ] diff --git a/cumulus/parachains/runtimes/glutton/glutton-kusama/build.rs b/cumulus/parachains/runtimes/glutton/glutton-kusama/build.rs deleted file mode 100644 index 1580e6f07be..00000000000 --- a/cumulus/parachains/runtimes/glutton/glutton-kusama/build.rs +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use substrate_wasm_builder::WasmBuilder; - -fn main() { - WasmBuilder::new() - .with_current_project() - .export_heap_base() - .import_memory() - .build() -} diff --git a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/lib.rs b/cumulus/parachains/runtimes/glutton/glutton-kusama/src/lib.rs deleted file mode 100644 index ef0734df25f..00000000000 --- a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/lib.rs +++ /dev/null @@ -1,528 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! # Glutton Runtime -//! -//! The purpose of the Glutton parachain is to do stress testing on the Kusama -//! network. -//! -//! There may be multiple instances of the Glutton parachain deployed and -//! connected to Kusama. -//! -//! These parachains are not holding any real value. Their purpose is to stress -//! test the network. -//! -//! ### Governance -//! -//! Glutton defers its governance (namely, its `Root` origin), to its Relay -//! Chain parent, Kusama. -//! -//! ### XCM -//! -//! Since the main goal of Glutton is solely stress testing, the parachain will -//! only be able receive XCM messages from Kusama via DMP. This way the Glutton -//! parachains will be able to listen for upgrades that are coming from the -//! Relay chain. - -#![cfg_attr(not(feature = "std"), no_std)] -#![recursion_limit = "256"] - -// Make the WASM binary available. -#[cfg(feature = "std")] -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -pub mod weights; -pub mod xcm_config; - -use cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases; -use sp_api::impl_runtime_apis; -pub use sp_consensus_aura::sr25519::AuthorityId as AuraId; -use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; -use sp_runtime::{ - create_runtime_str, generic, impl_opaque_keys, - traits::{AccountIdLookup, BlakeTwo256, Block as BlockT}, - transaction_validity::{TransactionSource, TransactionValidity}, - ApplyExtrinsicResult, -}; -use sp_std::prelude::*; -#[cfg(feature = "std")] -use sp_version::NativeVersion; -use sp_version::RuntimeVersion; - -use cumulus_primitives_core::AggregateMessageOrigin; -pub use frame_support::{ - construct_runtime, - dispatch::DispatchClass, - genesis_builder_helper::{build_config, create_default_config}, - parameter_types, - traits::{ - ConstBool, ConstU32, ConstU64, ConstU8, EitherOfDiverse, Everything, IsInVec, Randomness, - }, - weights::{ - constants::{ - BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_REF_TIME_PER_SECOND, - }, - IdentityFee, Weight, - }, - PalletId, StorageValue, -}; -use frame_system::{ - limits::{BlockLength, BlockWeights}, - EnsureRoot, -}; -use parachains_common::{AccountId, Signature}; -#[cfg(any(feature = "std", test))] -pub use sp_runtime::BuildStorage; -pub use sp_runtime::{Perbill, Permill}; - -impl_opaque_keys! { - pub struct SessionKeys { - pub aura: Aura, - } -} - -#[sp_version::runtime_version] -pub const VERSION: RuntimeVersion = RuntimeVersion { - spec_name: create_runtime_str!("glutton"), - impl_name: create_runtime_str!("glutton"), - authoring_version: 1, - spec_version: 1_004_000, - impl_version: 0, - apis: RUNTIME_API_VERSIONS, - transaction_version: 1, - state_version: 1, -}; - -/// The version information used to identify this runtime when compiled natively. -#[cfg(feature = "std")] -pub fn native_version() -> NativeVersion { - NativeVersion { runtime_version: VERSION, can_author_with: Default::default() } -} - -/// We assume that ~10% of the block weight is consumed by `on_initialize` handlers. -/// This is used to limit the maximal weight of a single extrinsic. -const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); -/// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used -/// by Operational extrinsics. -const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); -/// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts( - WEIGHT_REF_TIME_PER_SECOND.saturating_mul(2), - cumulus_primitives_core::relay_chain::MAX_POV_SIZE as u64, -); - -/// Maximum number of blocks simultaneously accepted by the Runtime, not yet included -/// into the relay chain. -const UNINCLUDED_SEGMENT_CAPACITY: u32 = 3; -/// How many parachain blocks are processed by the relay chain per parent. Limits the -/// number of blocks authored per slot. -const BLOCK_PROCESSING_VELOCITY: u32 = 2; -/// Relay chain slot duration, in milliseconds. -const RELAY_CHAIN_SLOT_DURATION_MILLIS: u32 = 6000; - -/// This determines the average expected block time that we are targeting. -/// Blocks will be produced at a minimum duration defined by `SLOT_DURATION`. -/// `SLOT_DURATION` is picked up by `pallet_timestamp` which is in turn picked -/// up by `pallet_aura` to implement `fn slot_duration()`. -/// -/// Change this to adjust the block time. -pub const MILLISECS_PER_BLOCK: u64 = 6000; -pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK; - -parameter_types! { - pub const BlockHashCount: BlockNumber = 4096; - pub const Version: RuntimeVersion = VERSION; - pub RuntimeBlockLength: BlockLength = - BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); - pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() - .base_block(BlockExecutionWeight::get()) - .for_class(DispatchClass::all(), |weights| { - weights.base_extrinsic = ExtrinsicBaseWeight::get(); - }) - .for_class(DispatchClass::Normal, |weights| { - weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); - }) - .for_class(DispatchClass::Operational, |weights| { - weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT); - // Operational transactions have some extra reserved space, so that they - // are included even if block reached `MAXIMUM_BLOCK_WEIGHT`. - weights.reserved = Some( - MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT - ); - }) - .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO) - .build_or_panic(); - pub const SS58Prefix: u8 = 2; -} - -impl frame_system::Config for Runtime { - type AccountId = AccountId; - type RuntimeCall = RuntimeCall; - type Lookup = AccountIdLookup; - type Nonce = Nonce; - type Hash = Hash; - type Hashing = BlakeTwo256; - type Block = Block; - type RuntimeEvent = RuntimeEvent; - type RuntimeOrigin = RuntimeOrigin; - type BlockHashCount = BlockHashCount; - type Version = Version; - type PalletInfo = PalletInfo; - type AccountData = (); - type OnNewAccount = (); - type OnKilledAccount = (); - type DbWeight = (); - type BaseCallFilter = frame_support::traits::Everything; - type SystemWeightInfo = (); - type BlockWeights = RuntimeBlockWeights; - type BlockLength = RuntimeBlockLength; - type SS58Prefix = SS58Prefix; - type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode; - type MaxConsumers = frame_support::traits::ConstU32<16>; -} - -parameter_types! { - // We do anything the parent chain tells us in this runtime. - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(2); - pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; -} - -type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< - Runtime, - RELAY_CHAIN_SLOT_DURATION_MILLIS, - BLOCK_PROCESSING_VELOCITY, - UNINCLUDED_SEGMENT_CAPACITY, ->; - -impl cumulus_pallet_parachain_system::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type OnSystemEvent = (); - type SelfParaId = parachain_info::Pallet; - type DmpQueue = frame_support::traits::EnqueueWithOrigin; - type OutboundXcmpMessageSource = (); - type ReservedDmpWeight = ReservedDmpWeight; - type XcmpMessageHandler = (); - type ReservedXcmpWeight = (); - type CheckAssociatedRelayNumber = RelayNumberMonotonicallyIncreases; - type ConsensusHook = ConsensusHook; - type WeightInfo = weights::cumulus_pallet_parachain_system::WeightInfo; -} - -parameter_types! { - pub MessageQueueServiceWeight: Weight = Perbill::from_percent(80) * - RuntimeBlockWeights::get().max_block; -} - -impl pallet_message_queue::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = weights::pallet_message_queue::WeightInfo; - #[cfg(feature = "runtime-benchmarks")] - type MessageProcessor = pallet_message_queue::mock_helpers::NoopMessageProcessor< - cumulus_primitives_core::AggregateMessageOrigin, - >; - #[cfg(not(feature = "runtime-benchmarks"))] - type MessageProcessor = xcm_builder::ProcessXcmMessage< - AggregateMessageOrigin, - xcm_executor::XcmExecutor, - RuntimeCall, - >; - type Size = u32; - type QueueChangeHandler = (); - type QueuePausedQuery = (); // No XCMP queue pallet deployed. - type HeapSize = sp_core::ConstU32<{ 64 * 1024 }>; - type MaxStale = sp_core::ConstU32<8>; - type ServiceWeight = MessageQueueServiceWeight; -} - -impl parachain_info::Config for Runtime {} - -impl cumulus_pallet_aura_ext::Config for Runtime {} - -impl pallet_timestamp::Config for Runtime { - type Moment = u64; - type OnTimestampSet = Aura; - #[cfg(feature = "experimental")] - type MinimumPeriod = ConstU64<0>; - #[cfg(not(feature = "experimental"))] - type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; - type WeightInfo = weights::pallet_timestamp::WeightInfo; -} - -impl pallet_aura::Config for Runtime { - type AuthorityId = AuraId; - type DisabledValidators = (); - type MaxAuthorities = ConstU32<100_000>; - type AllowMultipleBlocksPerSlot = ConstBool; - #[cfg(feature = "experimental")] - type SlotDuration = ConstU64; -} - -impl pallet_glutton::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = weights::pallet_glutton::WeightInfo; - type AdminOrigin = EnsureRoot; -} - -impl pallet_sudo::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type WeightInfo = (); -} - -construct_runtime! { - pub enum Runtime - { - System: frame_system::{Pallet, Call, Storage, Config, Event} = 0, - ParachainSystem: cumulus_pallet_parachain_system::{ - Pallet, Call, Config, Storage, Inherent, Event, ValidateUnsigned, - } = 1, - ParachainInfo: parachain_info::{Pallet, Storage, Config} = 2, - Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 3, - - // DMP handler. - CumulusXcm: cumulus_pallet_xcm::{Pallet, Call, Storage, Event, Origin} = 10, - MessageQueue: pallet_message_queue::{Pallet, Call, Storage, Event} = 11, - - // The main stage. - Glutton: pallet_glutton::{Pallet, Call, Storage, Event, Config} = 20, - - // Collator support - Aura: pallet_aura::{Pallet, Storage, Config} = 30, - AuraExt: cumulus_pallet_aura_ext::{Pallet, Storage, Config} = 31, - - // Sudo. - Sudo: pallet_sudo::{Pallet, Call, Storage, Event, Config} = 255, - } -} - -/// Index of a transaction in the chain. -pub type Nonce = u32; -/// A hash of some data used by the chain. -pub type Hash = sp_core::H256; -/// An index to a block. -pub type BlockNumber = u32; -/// The address format for describing accounts. -pub type Address = sp_runtime::MultiAddress; -/// Block header type as expected by this runtime. -pub type Header = generic::Header; -/// Block type as expected by this runtime. -pub type Block = generic::Block; -/// A Block signed with a Justification -pub type SignedBlock = generic::SignedBlock; -/// BlockId type as expected by this runtime. -pub type BlockId = generic::BlockId; -/// The SignedExtension to the basic transaction logic. -pub type SignedExtra = ( - pallet_sudo::CheckOnlySudoAccount, - frame_system::CheckNonZeroSender, - frame_system::CheckSpecVersion, - frame_system::CheckTxVersion, - frame_system::CheckGenesis, - frame_system::CheckEra, - frame_system::CheckNonce, -); -/// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = - generic::UncheckedExtrinsic; -/// Executive: handles dispatch to the various modules. -pub type Executive = frame_executive::Executive< - Runtime, - Block, - frame_system::ChainContext, - Runtime, - AllPalletsWithSystem, ->; - -#[cfg(feature = "runtime-benchmarks")] -#[macro_use] -extern crate frame_benchmarking; - -#[cfg(feature = "runtime-benchmarks")] -mod benches { - define_benchmarks!( - [frame_system, SystemBench::] - [pallet_glutton, Glutton] - ); -} - -impl_runtime_apis! { - impl sp_api::Core for Runtime { - fn version() -> RuntimeVersion { - VERSION - } - - fn execute_block(block: Block) { - Executive::execute_block(block) - } - - fn initialize_block(header: &::Header) { - Executive::initialize_block(header) - } - } - - impl sp_api::Metadata for Runtime { - fn metadata() -> OpaqueMetadata { - OpaqueMetadata::new(Runtime::metadata().into()) - } - - fn metadata_at_version(version: u32) -> Option { - Runtime::metadata_at_version(version) - } - - fn metadata_versions() -> sp_std::vec::Vec { - Runtime::metadata_versions() - } - } - - impl sp_consensus_aura::AuraApi for Runtime { - fn slot_duration() -> sp_consensus_aura::SlotDuration { - sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) - } - - fn authorities() -> Vec { - Aura::authorities().into_inner() - } - } - - impl cumulus_primitives_aura::AuraUnincludedSegmentApi for Runtime { - fn can_build_upon( - included_hash: ::Hash, - slot: cumulus_primitives_aura::Slot, - ) -> bool { - ConsensusHook::can_build_upon(included_hash, slot) - } - } - - impl sp_block_builder::BlockBuilder for Runtime { - fn apply_extrinsic( - extrinsic: ::Extrinsic, - ) -> ApplyExtrinsicResult { - Executive::apply_extrinsic(extrinsic) - } - - fn finalize_block() -> ::Header { - Executive::finalize_block() - } - - fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { - data.create_extrinsics() - } - - fn check_inherents(block: Block, data: sp_inherents::InherentData) -> sp_inherents::CheckInherentsResult { - data.check_extrinsics(&block) - } - } - - impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { - fn validate_transaction( - source: TransactionSource, - tx: ::Extrinsic, - block_hash: ::Hash, - ) -> TransactionValidity { - Executive::validate_transaction(source, tx, block_hash) - } - } - - impl sp_offchain::OffchainWorkerApi for Runtime { - fn offchain_worker(header: &::Header) { - Executive::offchain_worker(header) - } - } - - impl sp_session::SessionKeys for Runtime { - fn generate_session_keys(seed: Option>) -> Vec { - SessionKeys::generate(seed) - } - - fn decode_session_keys( - encoded: Vec, - ) -> Option, KeyTypeId)>> { - SessionKeys::decode_into_raw_public_keys(&encoded) - } - } - - impl cumulus_primitives_core::CollectCollationInfo for Runtime { - fn collect_collation_info(header: &::Header) -> cumulus_primitives_core::CollationInfo { - ParachainSystem::collect_collation_info(header) - } - } - - impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { - fn account_nonce(account: AccountId) -> Nonce { - System::account_nonce(account) - } - } - - #[cfg(feature = "runtime-benchmarks")] - impl frame_benchmarking::Benchmark for Runtime { - fn benchmark_metadata(extra: bool) -> ( - Vec, - Vec, - ) { - use frame_benchmarking::{Benchmarking, BenchmarkList}; - use frame_support::traits::StorageInfoTrait; - use frame_system_benchmarking::Pallet as SystemBench; - - let mut list = Vec::::new(); - list_benchmarks!(list, extra); - - let storage_info = AllPalletsWithSystem::storage_info(); - - (list, storage_info) - } - - fn dispatch_benchmark( - config: frame_benchmarking::BenchmarkConfig - ) -> Result, sp_runtime::RuntimeString> { - use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError}; - use sp_storage::TrackedStorageKey; - - use frame_system_benchmarking::Pallet as SystemBench; - impl frame_system_benchmarking::Config for Runtime { - fn setup_set_code_requirements(code: &sp_std::vec::Vec) -> Result<(), BenchmarkError> { - ParachainSystem::initialize_for_set_code_benchmark(code.len() as u32); - Ok(()) - } - - fn verify_set_code() { - System::assert_last_event(cumulus_pallet_parachain_system::Event::::ValidationFunctionStored.into()); - } - } - - use frame_support::traits::WhitelistedStorageKeys; - let whitelist: Vec = AllPalletsWithSystem::whitelisted_storage_keys(); - - let mut batches = Vec::::new(); - let params = (&config, &whitelist); - add_benchmarks!(params, batches); - Ok(batches) - } - } - - impl sp_genesis_builder::GenesisBuilder for Runtime { - fn create_default_config() -> Vec { - create_default_config::() - } - - fn build_config(config: Vec) -> sp_genesis_builder::Result { - build_config::(config) - } - } -} - -cumulus_pallet_parachain_system::register_validate_block! { - Runtime = Runtime, - BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::, -} diff --git a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/cumulus_pallet_parachain_system.rs b/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/cumulus_pallet_parachain_system.rs deleted file mode 100644 index f787aa32701..00000000000 --- a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/cumulus_pallet_parachain_system.rs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `cumulus_pallet_parachain_system` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `i9`, CPU: `13th Gen Intel(R) Core(TM) i9-13900K` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/polkadot-parachain -// benchmark -// pallet -// --chain -// statemint-dev -// --pallet -// cumulus_pallet_parachain_system -// --extrinsic -// * -// --execution -// wasm -// --wasm-execution -// compiled -// --output -// parachains/runtimes/assets/statemint/src/weights -// --steps -// 50 -// --repeat -// 20 - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::Weight}; -use sp_std::marker::PhantomData; - -/// Weight functions for `cumulus_pallet_parachain_system`. -pub struct WeightInfo(PhantomData); -impl cumulus_pallet_parachain_system::WeightInfo for WeightInfo { - /// Storage: ParachainSystem LastDmqMqcHead (r:1 w:1) - /// Proof Skipped: ParachainSystem LastDmqMqcHead (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ParachainSystem ReservedDmpWeightOverride (r:1 w:0) - /// Proof Skipped: ParachainSystem ReservedDmpWeightOverride (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: ParachainSystem ProcessedDownwardMessages (r:0 w:1) - /// Proof Skipped: ParachainSystem ProcessedDownwardMessages (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: MessageQueue Pages (r:0 w:16) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - /// The range of component `n` is `[0, 1000]`. - fn enqueue_inbound_downward_messages(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `12` - // Estimated: `8013` - // Minimum execution time: 1_660_000 picoseconds. - Weight::from_parts(1_720_000, 0) - .saturating_add(Weight::from_parts(0, 8013)) - // Standard Error: 28_418 - .saturating_add(Weight::from_parts(24_636_963, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(4)) - } -} diff --git a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/frame_system.rs b/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/frame_system.rs deleted file mode 100644 index cf7ef948fd6..00000000000 --- a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/frame_system.rs +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `frame_system` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("glutton-kusama-dev-1300")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=glutton-kusama-dev-1300 -// --wasm-execution=compiled -// --pallet=frame_system -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/glutton/glutton-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `frame_system`. -pub struct WeightInfo(PhantomData); -impl frame_system::WeightInfo for WeightInfo { - /// The range of component `b` is `[0, 3932160]`. - fn remark(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 1_717_000 picoseconds. - Weight::from_parts(1_782_325, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 0 - .saturating_add(Weight::from_parts(387, 0).saturating_mul(b.into())) - } - /// The range of component `b` is `[0, 3932160]`. - fn remark_with_event(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_089_000 picoseconds. - Weight::from_parts(6_353_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 2 - .saturating_add(Weight::from_parts(1_788, 0).saturating_mul(b.into())) - } - /// Storage: `System::Digest` (r:1 w:1) - /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - /// Proof: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - fn set_heap_pages() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `1485` - // Minimum execution time: 3_389_000 picoseconds. - Weight::from_parts(3_605_000, 0) - .saturating_add(Weight::from_parts(0, 1485)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) - /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpgradeRestrictionSignal` (r:1 w:0) - /// Proof: `ParachainSystem::UpgradeRestrictionSignal` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingValidationCode` (r:1 w:1) - /// Proof: `ParachainSystem::PendingValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::NewValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::NewValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::DidSetValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::DidSetValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_code() -> Weight { - // Proof Size summary in bytes: - // Measured: `119` - // Estimated: `1604` - // Minimum execution time: 97_701_839_000 picoseconds. - Weight::from_parts(100_104_315_000, 0) - .saturating_add(Weight::from_parts(0, 1604)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn set_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 1_638_000 picoseconds. - Weight::from_parts(1_726_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 1_886 - .saturating_add(Weight::from_parts(809_561, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn kill_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 1_569_000 picoseconds. - Weight::from_parts(1_690_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 963 - .saturating_add(Weight::from_parts(580_145, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `p` is `[0, 1000]`. - fn kill_prefix(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `52 + p * (69 ±0)` - // Estimated: `46 + p * (70 ±0)` - // Minimum execution time: 3_039_000 picoseconds. - Weight::from_parts(3_090_000, 0) - .saturating_add(Weight::from_parts(0, 46)) - // Standard Error: 2_007 - .saturating_add(Weight::from_parts(1_269_045, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) - .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) - } -} diff --git a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/mod.rs b/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/mod.rs deleted file mode 100644 index 47f9d1ee105..00000000000 --- a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/mod.rs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub mod cumulus_pallet_parachain_system; -pub mod pallet_glutton; -pub mod pallet_message_queue; -pub mod pallet_timestamp; diff --git a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/pallet_glutton.rs b/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/pallet_glutton.rs deleted file mode 100644 index e1b0c5bf232..00000000000 --- a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/pallet_glutton.rs +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_glutton` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("glutton-kusama-dev-1300")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=glutton-kusama-dev-1300 -// --wasm-execution=compiled -// --pallet=pallet_glutton -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/glutton/glutton-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_glutton`. -pub struct WeightInfo(PhantomData); -impl pallet_glutton::WeightInfo for WeightInfo { - /// Storage: `Glutton::TrashDataCount` (r:1 w:1) - /// Proof: `Glutton::TrashDataCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Glutton::TrashData` (r:0 w:1000) - /// Proof: `Glutton::TrashData` (`max_values`: Some(65000), `max_size`: Some(1036), added: 3016, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 1000]`. - fn initialize_pallet_grow(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `87` - // Estimated: `1489` - // Minimum execution time: 8_925_000 picoseconds. - Weight::from_parts(9_186_000, 0) - .saturating_add(Weight::from_parts(0, 1489)) - // Standard Error: 3_091 - .saturating_add(Weight::from_parts(9_666_196, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) - } - /// Storage: `Glutton::TrashDataCount` (r:1 w:1) - /// Proof: `Glutton::TrashDataCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Glutton::TrashData` (r:0 w:1000) - /// Proof: `Glutton::TrashData` (`max_values`: Some(65000), `max_size`: Some(1036), added: 3016, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 1000]`. - fn initialize_pallet_shrink(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `120` - // Estimated: `1489` - // Minimum execution time: 8_924_000 picoseconds. - Weight::from_parts(8_963_000, 0) - .saturating_add(Weight::from_parts(0, 1489)) - // Standard Error: 1_202 - .saturating_add(Weight::from_parts(1_139_080, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) - } - /// The range of component `i` is `[0, 100000]`. - fn waste_ref_time_iter(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 708_000 picoseconds. - Weight::from_parts(1_698_031, 0) - .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 12 - .saturating_add(Weight::from_parts(106_500, 0).saturating_mul(i.into())) - } - /// Storage: `Glutton::TrashData` (r:5000 w:0) - /// Proof: `Glutton::TrashData` (`max_values`: Some(65000), `max_size`: Some(1036), added: 3016, mode: `MaxEncodedLen`) - /// The range of component `i` is `[0, 5000]`. - fn waste_proof_size_some(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `119115 + i * (1022 ±0)` - // Estimated: `990 + i * (3016 ±0)` - // Minimum execution time: 698_000 picoseconds. - Weight::from_parts(970_000, 0) - .saturating_add(Weight::from_parts(0, 990)) - // Standard Error: 4_022 - .saturating_add(Weight::from_parts(6_320_519, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) - .saturating_add(Weight::from_parts(0, 3016).saturating_mul(i.into())) - } - /// Storage: `Glutton::Storage` (r:1 w:0) - /// Proof: `Glutton::Storage` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `Glutton::Compute` (r:1 w:0) - /// Proof: `Glutton::Compute` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `Glutton::TrashData` (r:1737 w:0) - /// Proof: `Glutton::TrashData` (`max_values`: Some(65000), `max_size`: Some(1036), added: 3016, mode: `MaxEncodedLen`) - fn on_idle_high_proof_waste() -> Weight { - // Proof Size summary in bytes: - // Measured: `1900498` - // Estimated: `5239782` - // Minimum execution time: 100_079_897_000 picoseconds. - Weight::from_parts(100_515_306_000, 0) - .saturating_add(Weight::from_parts(0, 5239782)) - .saturating_add(T::DbWeight::get().reads(1739)) - } - /// Storage: `Glutton::Storage` (r:1 w:0) - /// Proof: `Glutton::Storage` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `Glutton::Compute` (r:1 w:0) - /// Proof: `Glutton::Compute` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `Glutton::TrashData` (r:5 w:0) - /// Proof: `Glutton::TrashData` (`max_values`: Some(65000), `max_size`: Some(1036), added: 3016, mode: `MaxEncodedLen`) - fn on_idle_low_proof_waste() -> Weight { - // Proof Size summary in bytes: - // Measured: `9548` - // Estimated: `16070` - // Minimum execution time: 100_237_009_000 picoseconds. - Weight::from_parts(100_472_213_000, 0) - .saturating_add(Weight::from_parts(0, 16070)) - .saturating_add(T::DbWeight::get().reads(7)) - } - /// Storage: `Glutton::Storage` (r:1 w:0) - /// Proof: `Glutton::Storage` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `Glutton::Compute` (r:1 w:0) - /// Proof: `Glutton::Compute` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - fn empty_on_idle() -> Weight { - // Proof Size summary in bytes: - // Measured: `87` - // Estimated: `1493` - // Minimum execution time: 5_120_000 picoseconds. - Weight::from_parts(5_262_000, 0) - .saturating_add(Weight::from_parts(0, 1493)) - .saturating_add(T::DbWeight::get().reads(2)) - } - /// Storage: `Glutton::Compute` (r:0 w:1) - /// Proof: `Glutton::Compute` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - fn set_compute() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 5_947_000 picoseconds. - Weight::from_parts(6_171_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: `Glutton::Storage` (r:0 w:1) - /// Proof: `Glutton::Storage` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - fn set_storage() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 5_964_000 picoseconds. - Weight::from_parts(6_166_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } -} diff --git a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/pallet_message_queue.rs b/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/pallet_message_queue.rs deleted file mode 100644 index a9f0cb07cfe..00000000000 --- a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/pallet_message_queue.rs +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Autogenerated weights for `pallet_message_queue` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-03-24, STEPS: `2`, REPEAT: `1`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `i9`, CPU: `13th Gen Intel(R) Core(TM) i9-13900K` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/polkadot-parachain -// benchmark -// pallet -// --chain -// westmint-dev -// --pallet -// pallet_message_queue -// --extrinsic -// * -// --execution -// wasm -// --wasm-execution -// compiled -// --output -// parachains/runtimes/assets/westmint/src/weights - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::Weight}; -use sp_std::marker::PhantomData; - -/// Weight functions for `pallet_message_queue`. -pub struct WeightInfo(PhantomData); -impl pallet_message_queue::WeightInfo for WeightInfo { - /// Storage: MessageQueue ServiceHead (r:1 w:0) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: MessageQueue BookStateFor (r:2 w:2) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn ready_ring_knit() -> Weight { - // Proof Size summary in bytes: - // Measured: `189` - // Estimated: `7534` - // Minimum execution time: 12_192_000 picoseconds. - Weight::from_parts(12_192_000, 0) - .saturating_add(Weight::from_parts(0, 7534)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:2 w:2) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - fn ready_ring_unknit() -> Weight { - // Proof Size summary in bytes: - // Measured: `184` - // Estimated: `7534` - // Minimum execution time: 10_447_000 picoseconds. - Weight::from_parts(10_447_000, 0) - .saturating_add(Weight::from_parts(0, 7534)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn service_queue_base() -> Weight { - // Proof Size summary in bytes: - // Measured: `6` - // Estimated: `3517` - // Minimum execution time: 4_851_000 picoseconds. - Weight::from_parts(4_851_000, 0) - .saturating_add(Weight::from_parts(0, 3517)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn service_page_base_completion() -> Weight { - // Proof Size summary in bytes: - // Measured: `72` - // Estimated: `69050` - // Minimum execution time: 6_342_000 picoseconds. - Weight::from_parts(6_342_000, 0) - .saturating_add(Weight::from_parts(0, 69050)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn service_page_base_no_completion() -> Weight { - // Proof Size summary in bytes: - // Measured: `72` - // Estimated: `69050` - // Minimum execution time: 6_199_000 picoseconds. - Weight::from_parts(6_199_000, 0) - .saturating_add(Weight::from_parts(0, 69050)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn service_page_item() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 58_612_000 picoseconds. - Weight::from_parts(58_612_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } - /// Storage: MessageQueue ServiceHead (r:1 w:1) - /// Proof: MessageQueue ServiceHead (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) - /// Storage: MessageQueue BookStateFor (r:1 w:0) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - fn bump_service_head() -> Weight { - // Proof Size summary in bytes: - // Measured: `99` - // Estimated: `5007` - // Minimum execution time: 7_296_000 picoseconds. - Weight::from_parts(7_296_000, 0) - .saturating_add(Weight::from_parts(0, 5007)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn reap_page() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 48_345_000 picoseconds. - Weight::from_parts(48_345_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn execute_overweight_page_removed() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 56_441_000 picoseconds. - Weight::from_parts(56_441_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: MessageQueue BookStateFor (r:1 w:1) - /// Proof: MessageQueue BookStateFor (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) - /// Storage: MessageQueue Pages (r:1 w:1) - /// Proof: MessageQueue Pages (max_values: None, max_size: Some(65585), added: 68060, mode: MaxEncodedLen) - fn execute_overweight_page_updated() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `72567` - // Minimum execution time: 70_858_000 picoseconds. - Weight::from_parts(70_858_000, 0) - .saturating_add(Weight::from_parts(0, 72567)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(2)) - } -} diff --git a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/pallet_timestamp.rs b/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/pallet_timestamp.rs deleted file mode 100644 index 8edae065f1b..00000000000 --- a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/weights/pallet_timestamp.rs +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 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_timestamp` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-kusama-dev")`, DB CACHE: 1024 - -// Executed Command: -// ./target/production/polkadot-parachain -// benchmark -// pallet -// --chain=asset-hub-kusama-dev -// --wasm-execution=compiled -// --pallet=pallet_timestamp -// --no-storage-info -// --no-median-slopes -// --no-min-squares -// --extrinsic=* -// --steps=50 -// --repeat=20 -// --json -// --header=./file_header.txt -// --output=./parachains/runtimes/assets/asset-hub-kusama/src/weights/ - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] - -use frame_support::{traits::Get, weights::Weight}; -use core::marker::PhantomData; - -/// Weight functions for `pallet_timestamp`. -pub struct WeightInfo(PhantomData); -impl pallet_timestamp::WeightInfo for WeightInfo { - /// Storage: `Timestamp::Now` (r:1 w:1) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `Aura::CurrentSlot` (r:1 w:0) - /// Proof: `Aura::CurrentSlot` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - fn set() -> Weight { - // Proof Size summary in bytes: - // Measured: `86` - // Estimated: `1493` - // Minimum execution time: 9_313_000 picoseconds. - Weight::from_parts(9_775_000, 0) - .saturating_add(Weight::from_parts(0, 1493)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn on_finalize() -> Weight { - // Proof Size summary in bytes: - // Measured: `57` - // Estimated: `0` - // Minimum execution time: 3_322_000 picoseconds. - Weight::from_parts(3_577_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } -} diff --git a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/xcm_config.rs b/cumulus/parachains/runtimes/glutton/glutton-kusama/src/xcm_config.rs deleted file mode 100644 index fb7b78b79d2..00000000000 --- a/cumulus/parachains/runtimes/glutton/glutton-kusama/src/xcm_config.rs +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use super::{ - AccountId, AllPalletsWithSystem, ParachainInfo, Runtime, RuntimeCall, RuntimeEvent, - RuntimeOrigin, -}; -use frame_support::{ - match_types, parameter_types, - traits::{Everything, Nothing}, - weights::Weight, -}; -use xcm::latest::prelude::*; -use xcm_builder::{ - AllowExplicitUnpaidExecutionFrom, FixedWeightBounds, ParentAsSuperuser, ParentIsPreset, - SovereignSignedViaLocation, -}; - -parameter_types! { - pub const KusamaLocation: MultiLocation = MultiLocation::parent(); - pub const KusamaNetwork: Option = Some(NetworkId::Kusama); - pub UniversalLocation: InteriorMultiLocation = X1(Parachain(ParachainInfo::parachain_id().into())); -} - -/// 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 -/// bias the kind of local `Origin` it will become. -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, RuntimeOrigin>, - // Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a - // transaction from the Root origin. - ParentAsSuperuser, -); - -match_types! { - pub type JustTheParent: impl Contains = { MultiLocation { parents:1, interior: Here } }; -} - -parameter_types! { - // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. - pub UnitWeightCost: Weight = Weight::from_parts(1_000_000_000, 64 * 1024); - pub const MaxInstructions: u32 = 100; - pub const MaxAssetsIntoHolding: u32 = 64; -} - -pub struct XcmConfig; -impl xcm_executor::Config for XcmConfig { - type RuntimeCall = RuntimeCall; - type XcmSender = (); // sending XCM not supported - type AssetTransactor = (); // balances not supported - type OriginConverter = XcmOriginToTransactDispatchOrigin; - type IsReserve = (); // balances not supported - type IsTeleporter = (); // balances not supported - type UniversalLocation = UniversalLocation; - type Barrier = AllowExplicitUnpaidExecutionFrom; - 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 - type AssetClaims = (); // don't claim for now - type SubscriptionService = (); // don't handle subscriptions for now - type PalletInstancesInfo = AllPalletsWithSystem; - type MaxAssetsIntoHolding = MaxAssetsIntoHolding; - type AssetLocker = (); - type AssetExchanger = (); - type FeeManager = (); - type MessageExporter = (); - type UniversalAliases = Nothing; - type CallDispatcher = RuntimeCall; - type SafeCallFilter = Everything; - type Aliasers = Nothing; -} - -impl cumulus_pallet_xcm::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type XcmExecutor = xcm_executor::XcmExecutor; -} diff --git a/cumulus/polkadot-parachain/Cargo.toml b/cumulus/polkadot-parachain/Cargo.toml index e23a7aeb22b..a7fdfb5d6c9 100644 --- a/cumulus/polkadot-parachain/Cargo.toml +++ b/cumulus/polkadot-parachain/Cargo.toml @@ -25,18 +25,12 @@ serde_json = "1.0.108" rococo-parachain-runtime = { path = "../parachains/runtimes/testing/rococo-parachain" } shell-runtime = { path = "../parachains/runtimes/starters/shell" } glutton-westend-runtime = { path = "../parachains/runtimes/glutton/glutton-westend" } -glutton-runtime = { path = "../parachains/runtimes/glutton/glutton-kusama" } seedling-runtime = { path = "../parachains/runtimes/starters/seedling" } -asset-hub-polkadot-runtime = { path = "../parachains/runtimes/assets/asset-hub-polkadot" } -asset-hub-kusama-runtime = { path = "../parachains/runtimes/assets/asset-hub-kusama" } asset-hub-rococo-runtime = { path = "../parachains/runtimes/assets/asset-hub-rococo" } asset-hub-westend-runtime = { path = "../parachains/runtimes/assets/asset-hub-westend" } -collectives-polkadot-runtime = { path = "../parachains/runtimes/collectives/collectives-polkadot" } collectives-westend-runtime = { path = "../parachains/runtimes/collectives/collectives-westend" } contracts-rococo-runtime = { path = "../parachains/runtimes/contracts/contracts-rococo" } bridge-hub-rococo-runtime = { path = "../parachains/runtimes/bridge-hubs/bridge-hub-rococo" } -bridge-hub-kusama-runtime = { path = "../parachains/runtimes/bridge-hubs/bridge-hub-kusama" } -bridge-hub-polkadot-runtime = { path = "../parachains/runtimes/bridge-hubs/bridge-hub-polkadot" } bridge-hub-westend-runtime = { path = "../parachains/runtimes/bridge-hubs/bridge-hub-westend" } penpal-runtime = { path = "../parachains/runtimes/testing/penpal" } jsonrpsee = { version = "0.16.2", features = ["server"] } @@ -121,22 +115,16 @@ wait-timeout = "0.2" [features] default = [] runtime-benchmarks = [ - "asset-hub-kusama-runtime/runtime-benchmarks", - "asset-hub-polkadot-runtime/runtime-benchmarks", "asset-hub-rococo-runtime/runtime-benchmarks", "asset-hub-westend-runtime/runtime-benchmarks", - "bridge-hub-kusama-runtime/runtime-benchmarks", - "bridge-hub-polkadot-runtime/runtime-benchmarks", "bridge-hub-rococo-runtime/runtime-benchmarks", "bridge-hub-westend-runtime/runtime-benchmarks", - "collectives-polkadot-runtime/runtime-benchmarks", "collectives-westend-runtime/runtime-benchmarks", "contracts-rococo-runtime/runtime-benchmarks", "cumulus-primitives-core/runtime-benchmarks", "frame-benchmarking-cli/runtime-benchmarks", "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", - "glutton-runtime/runtime-benchmarks", "glutton-westend-runtime/runtime-benchmarks", "parachains-common/runtime-benchmarks", "penpal-runtime/runtime-benchmarks", @@ -148,20 +136,14 @@ runtime-benchmarks = [ "sp-runtime/runtime-benchmarks", ] try-runtime = [ - "asset-hub-kusama-runtime/try-runtime", - "asset-hub-polkadot-runtime/try-runtime", "asset-hub-rococo-runtime/try-runtime", "asset-hub-westend-runtime/try-runtime", - "bridge-hub-kusama-runtime/try-runtime", - "bridge-hub-polkadot-runtime/try-runtime", "bridge-hub-rococo-runtime/try-runtime", "bridge-hub-westend-runtime/try-runtime", - "collectives-polkadot-runtime/try-runtime", "collectives-westend-runtime/try-runtime", "contracts-rococo-runtime/try-runtime", "frame-support/try-runtime", "frame-try-runtime/try-runtime", - "glutton-runtime/try-runtime", "glutton-westend-runtime/try-runtime", "pallet-transaction-payment/try-runtime", "penpal-runtime/try-runtime", diff --git a/cumulus/polkadot-parachain/src/chain_spec/asset_hubs.rs b/cumulus/polkadot-parachain/src/chain_spec/asset_hubs.rs index 2988d6af0d1..f889e05a166 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/asset_hubs.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/asset_hubs.rs @@ -20,35 +20,15 @@ use crate::chain_spec::{ }; use cumulus_primitives_core::ParaId; use hex_literal::hex; -use parachains_common::{AccountId, AssetHubPolkadotAuraId, AuraId, Balance as AssetHubBalance}; +use parachains_common::{AccountId, AuraId, Balance as AssetHubBalance}; use sc_service::ChainType; use sp_core::{crypto::UncheckedInto, sr25519}; -const ASSET_HUB_POLKADOT_ED: AssetHubBalance = - parachains_common::polkadot::currency::EXISTENTIAL_DEPOSIT; -const ASSET_HUB_KUSAMA_ED: AssetHubBalance = - parachains_common::kusama::currency::EXISTENTIAL_DEPOSIT; const ASSET_HUB_WESTEND_ED: AssetHubBalance = parachains_common::westend::currency::EXISTENTIAL_DEPOSIT; const ASSET_HUB_ROCOCO_ED: AssetHubBalance = parachains_common::westend::currency::EXISTENTIAL_DEPOSIT; -/// Generate the session keys from individual elements. -/// -/// The input must be a tuple of individual keys (a single arg for now since we have just one key). -pub fn asset_hub_polkadot_session_keys( - keys: AssetHubPolkadotAuraId, -) -> asset_hub_polkadot_runtime::SessionKeys { - asset_hub_polkadot_runtime::SessionKeys { aura: keys } -} - -/// Generate the session keys from individual elements. -/// -/// The input must be a tuple of individual keys (a single arg for now since we have just one key). -pub fn asset_hub_kusama_session_keys(keys: AuraId) -> asset_hub_kusama_runtime::SessionKeys { - asset_hub_kusama_runtime::SessionKeys { aura: keys } -} - /// Generate the session keys from individual elements. /// /// The input must be a tuple of individual keys (a single arg for now since we have just one key). @@ -63,341 +43,6 @@ pub fn asset_hub_westend_session_keys(keys: AuraId) -> asset_hub_westend_runtime asset_hub_westend_runtime::SessionKeys { aura: keys } } -pub fn asset_hub_polkadot_development_config() -> GenericChainSpec { - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("ss58Format".into(), 0.into()); - properties.insert("tokenSymbol".into(), "DOT".into()); - properties.insert("tokenDecimals".into(), 10.into()); - - GenericChainSpec::builder( - asset_hub_polkadot_runtime::WASM_BINARY - .expect("WASM binary was not built, please build it!"), - Extensions { relay_chain: "polkadot-dev".into(), para_id: 1000 }, - ) - .with_name("Polkadot Asset Hub Development") - .with_id("asset-hub-polkadot-dev") - .with_chain_type(ChainType::Local) - .with_genesis_config_patch(asset_hub_polkadot_genesis( - // initial collators. - vec![( - get_account_id_from_seed::("Alice"), - get_collator_keys_from_seed::("Alice"), - )], - vec![ - get_account_id_from_seed::("Alice"), - get_account_id_from_seed::("Bob"), - get_account_id_from_seed::("Alice//stash"), - get_account_id_from_seed::("Bob//stash"), - ], - 1000.into(), - )) - .with_properties(properties) - .build() -} - -pub fn asset_hub_polkadot_local_config() -> GenericChainSpec { - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("ss58Format".into(), 0.into()); - properties.insert("tokenSymbol".into(), "DOT".into()); - properties.insert("tokenDecimals".into(), 10.into()); - - GenericChainSpec::builder( - asset_hub_polkadot_runtime::WASM_BINARY - .expect("WASM binary was not built, please build it!"), - Extensions { relay_chain: "polkadot-local".into(), para_id: 1000 }, - ) - .with_name("Polkadot Asset Hub Local") - .with_id("asset-hub-polkadot-local") - .with_chain_type(ChainType::Local) - .with_genesis_config_patch(asset_hub_polkadot_genesis( - // initial collators. - vec![ - ( - get_account_id_from_seed::("Alice"), - get_collator_keys_from_seed::("Alice"), - ), - ( - get_account_id_from_seed::("Bob"), - get_collator_keys_from_seed::("Bob"), - ), - ], - vec![ - get_account_id_from_seed::("Alice"), - get_account_id_from_seed::("Bob"), - get_account_id_from_seed::("Charlie"), - get_account_id_from_seed::("Dave"), - get_account_id_from_seed::("Eve"), - get_account_id_from_seed::("Ferdie"), - get_account_id_from_seed::("Alice//stash"), - get_account_id_from_seed::("Bob//stash"), - get_account_id_from_seed::("Charlie//stash"), - get_account_id_from_seed::("Dave//stash"), - get_account_id_from_seed::("Eve//stash"), - get_account_id_from_seed::("Ferdie//stash"), - ], - 1000.into(), - )) - .with_boot_nodes(Vec::new()) - .with_properties(properties) - .build() -} - -// Not used for syncing, but just to determine the genesis values set for the upgrade from shell. -pub fn asset_hub_polkadot_config() -> GenericChainSpec { - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("ss58Format".into(), 0.into()); - properties.insert("tokenSymbol".into(), "DOT".into()); - properties.insert("tokenDecimals".into(), 10.into()); - - GenericChainSpec::builder( - asset_hub_polkadot_runtime::WASM_BINARY - .expect("WASM binary was not built, please build it!"), - Extensions { relay_chain: "polkadot".into(), para_id: 1000 }, - ) - .with_name("Polkadot Asset Hub") - .with_id("asset-hub-polkadot") - .with_chain_type(ChainType::Live) - .with_genesis_config_patch(asset_hub_polkadot_genesis( - // initial collators. - vec![ - ( - hex!("4c3d674d2a01060f0ded218e5dcc6f90c1726f43df79885eb3e22d97a20d5421").into(), - hex!("4c3d674d2a01060f0ded218e5dcc6f90c1726f43df79885eb3e22d97a20d5421") - .unchecked_into(), - ), - ( - hex!("c7d7d38d16bc23c6321152c50306212dc22c0efc04a2e52b5cccfc31ab3d7811").into(), - hex!("c7d7d38d16bc23c6321152c50306212dc22c0efc04a2e52b5cccfc31ab3d7811") - .unchecked_into(), - ), - ( - hex!("c5c07ba203d7375675f5c1ebe70f0a5bb729ae57b48bcc877fcc2ab21309b762").into(), - hex!("c5c07ba203d7375675f5c1ebe70f0a5bb729ae57b48bcc877fcc2ab21309b762") - .unchecked_into(), - ), - ( - hex!("0b2d0013fb974794bd7aa452465b567d48ef70373fe231a637c1fb7c547e85b3").into(), - hex!("0b2d0013fb974794bd7aa452465b567d48ef70373fe231a637c1fb7c547e85b3") - .unchecked_into(), - ), - ], - vec![], - 1000u32.into(), - )) - .with_boot_nodes(vec![ - "/ip4/34.65.251.121/tcp/30334/p2p/12D3KooWG3GrM6XKMM4gp3cvemdwUvu96ziYoJmqmetLZBXE8bSa" - .parse() - .unwrap(), - "/ip4/34.65.35.228/tcp/30334/p2p/12D3KooWMRyTLrCEPcAQD6c4EnudL3vVzg9zji3whvsMYPUYevpq" - .parse() - .unwrap(), - "/ip4/34.83.247.146/tcp/30334/p2p/12D3KooWE4jFh5FpJDkWVZhnWtFnbSqRhdjvC7Dp9b8b3FTuubQC" - .parse() - .unwrap(), - "/ip4/104.199.117.230/tcp/30334/p2p/12D3KooWG9R8pVXKumVo2rdkeVD4j5PVhRTqmYgLHY3a4yPYgLqM" - .parse() - .unwrap(), - ]) - .with_properties(properties) - .build() -} - -fn asset_hub_polkadot_genesis( - invulnerables: Vec<(AccountId, AssetHubPolkadotAuraId)>, - endowed_accounts: Vec, - id: ParaId, -) -> serde_json::Value { - serde_json::json!( { - "balances": { - "balances": endowed_accounts - .iter() - .cloned() - .map(|k| (k, ASSET_HUB_POLKADOT_ED * 4096)) - .collect::>(), - }, - "parachainInfo": { - "parachainId": id, - }, - "collatorSelection": { - "invulnerables": invulnerables.iter().cloned().map(|(acc, _)| acc).collect::>(), - "candidacyBond": ASSET_HUB_POLKADOT_ED * 16, - }, - "session": { - "keys": invulnerables - .into_iter() - .map(|(acc, aura)| { - ( - acc.clone(), // account id - acc, // validator id - asset_hub_polkadot_session_keys(aura), // session keys - ) - }) - .collect::>(), - }, - "polkadotXcm": { - "safeXcmVersion": Some(SAFE_XCM_VERSION), - } - }) -} - -pub fn asset_hub_kusama_development_config() -> GenericChainSpec { - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("ss58Format".into(), 2.into()); - properties.insert("tokenSymbol".into(), "KSM".into()); - properties.insert("tokenDecimals".into(), 12.into()); - - GenericChainSpec::builder( - asset_hub_kusama_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), - Extensions { relay_chain: "kusama-dev".into(), para_id: 1000 }, - ) - .with_name("Kusama Asset Hub Development") - .with_id("asset-hub-kusama-dev") - .with_chain_type(ChainType::Local) - .with_genesis_config_patch(asset_hub_kusama_genesis( - // initial collators. - vec![( - get_account_id_from_seed::("Alice"), - get_collator_keys_from_seed::("Alice"), - )], - vec![ - get_account_id_from_seed::("Alice"), - get_account_id_from_seed::("Bob"), - get_account_id_from_seed::("Alice//stash"), - get_account_id_from_seed::("Bob//stash"), - ], - 1000.into(), - )) - .with_properties(properties) - .build() -} - -pub fn asset_hub_kusama_local_config() -> GenericChainSpec { - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("ss58Format".into(), 2.into()); - properties.insert("tokenSymbol".into(), "KSM".into()); - properties.insert("tokenDecimals".into(), 12.into()); - - GenericChainSpec::builder( - asset_hub_kusama_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), - Extensions { relay_chain: "kusama-local".into(), para_id: 1000 }, - ) - .with_name("Kusama Asset Hub Local") - .with_id("asset-hub-kusama-local") - .with_chain_type(ChainType::Local) - .with_genesis_config_patch(asset_hub_kusama_genesis( - // initial collators. - vec![ - ( - get_account_id_from_seed::("Alice"), - get_collator_keys_from_seed::("Alice"), - ), - ( - get_account_id_from_seed::("Bob"), - get_collator_keys_from_seed::("Bob"), - ), - ], - vec![ - get_account_id_from_seed::("Alice"), - get_account_id_from_seed::("Bob"), - get_account_id_from_seed::("Charlie"), - get_account_id_from_seed::("Dave"), - get_account_id_from_seed::("Eve"), - get_account_id_from_seed::("Ferdie"), - get_account_id_from_seed::("Alice//stash"), - get_account_id_from_seed::("Bob//stash"), - get_account_id_from_seed::("Charlie//stash"), - get_account_id_from_seed::("Dave//stash"), - get_account_id_from_seed::("Eve//stash"), - get_account_id_from_seed::("Ferdie//stash"), - ], - 1000.into(), - )) - .with_properties(properties) - .build() -} - -pub fn asset_hub_kusama_config() -> GenericChainSpec { - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("ss58Format".into(), 2.into()); - properties.insert("tokenSymbol".into(), "KSM".into()); - properties.insert("tokenDecimals".into(), 12.into()); - - GenericChainSpec::builder( - asset_hub_kusama_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), - Extensions { relay_chain: "kusama".into(), para_id: 1000 }, - ) - .with_name("Kusama Asset Hub") - .with_id("asset-hub-kusama") - .with_chain_type(ChainType::Live) - .with_genesis_config_patch(asset_hub_kusama_genesis( - // initial collators. - vec![ - ( - hex!("50673d59020488a4ffc9d8c6de3062a65977046e6990915617f85fef6d349730").into(), - hex!("50673d59020488a4ffc9d8c6de3062a65977046e6990915617f85fef6d349730") - .unchecked_into(), - ), - ( - hex!("fe8102dbc244e7ea2babd9f53236d67403b046154370da5c3ea99def0bd0747a").into(), - hex!("fe8102dbc244e7ea2babd9f53236d67403b046154370da5c3ea99def0bd0747a") - .unchecked_into(), - ), - ( - hex!("38144b5398e5d0da5ec936a3af23f5a96e782f676ab19d45f29075ee92eca76a").into(), - hex!("38144b5398e5d0da5ec936a3af23f5a96e782f676ab19d45f29075ee92eca76a") - .unchecked_into(), - ), - ( - hex!("3253947640e309120ae70fa458dcacb915e2ddd78f930f52bd3679ec63fc4415").into(), - hex!("3253947640e309120ae70fa458dcacb915e2ddd78f930f52bd3679ec63fc4415") - .unchecked_into(), - ), - ], - Vec::new(), - 1000.into(), - )) - .with_properties(properties) - .build() -} - -fn asset_hub_kusama_genesis( - invulnerables: Vec<(AccountId, AuraId)>, - endowed_accounts: Vec, - id: ParaId, -) -> serde_json::Value { - serde_json::json!( { - "balances": { - "balances": endowed_accounts - .iter() - .cloned() - .map(|k| (k, ASSET_HUB_KUSAMA_ED * 524_288)) - .collect::>(), - }, - "parachainInfo": { - "parachainId": id, - }, - "collatorSelection": { - "invulnerables": invulnerables.iter().cloned().map(|(acc, _)| acc).collect::>(), - "candidacyBond": ASSET_HUB_KUSAMA_ED * 16, - }, - "session": { - "keys": invulnerables - .into_iter() - .map(|(acc, aura)| { - ( - acc.clone(), // account id - acc, // validator id - asset_hub_kusama_session_keys(aura), // session keys - ) - }) - .collect::>(), - }, - "polkadotXcm": { - "safeXcmVersion": Some(SAFE_XCM_VERSION), - }, - }) -} - pub fn asset_hub_westend_development_config() -> GenericChainSpec { let mut properties = sc_chain_spec::Properties::new(); properties.insert("tokenSymbol".into(), "WND".into()); diff --git a/cumulus/polkadot-parachain/src/chain_spec/bridge_hubs.rs b/cumulus/polkadot-parachain/src/chain_spec/bridge_hubs.rs index 377ceb20e1e..8dab692c1cd 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/bridge_hubs.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/bridge_hubs.rs @@ -24,21 +24,14 @@ use std::str::FromStr; /// Collects all supported BridgeHub configurations #[derive(Debug, PartialEq)] pub enum BridgeHubRuntimeType { + Kusama, + Polkadot, + Rococo, RococoLocal, // used by benchmarks RococoDevelopment, - Kusama, - KusamaLocal, - // used by benchmarks - KusamaDevelopment, - - Polkadot, - PolkadotLocal, - // used by benchmarks - PolkadotDevelopment, - Westend, WestendLocal, // used by benchmarks @@ -51,12 +44,7 @@ impl FromStr for BridgeHubRuntimeType { fn from_str(value: &str) -> Result { match value { polkadot::BRIDGE_HUB_POLKADOT => Ok(BridgeHubRuntimeType::Polkadot), - polkadot::BRIDGE_HUB_POLKADOT_LOCAL => Ok(BridgeHubRuntimeType::PolkadotLocal), - polkadot::BRIDGE_HUB_POLKADOT_DEVELOPMENT => - Ok(BridgeHubRuntimeType::PolkadotDevelopment), kusama::BRIDGE_HUB_KUSAMA => Ok(BridgeHubRuntimeType::Kusama), - kusama::BRIDGE_HUB_KUSAMA_LOCAL => Ok(BridgeHubRuntimeType::KusamaLocal), - kusama::BRIDGE_HUB_KUSAMA_DEVELOPMENT => Ok(BridgeHubRuntimeType::KusamaDevelopment), westend::BRIDGE_HUB_WESTEND => Ok(BridgeHubRuntimeType::Westend), westend::BRIDGE_HUB_WESTEND_LOCAL => Ok(BridgeHubRuntimeType::WestendLocal), westend::BRIDGE_HUB_WESTEND_DEVELOPMENT => Ok(BridgeHubRuntimeType::WestendDevelopment), @@ -76,33 +64,9 @@ impl BridgeHubRuntimeType { BridgeHubRuntimeType::Polkadot => Ok(Box::new(GenericChainSpec::from_json_bytes( &include_bytes!("../../chain-specs/bridge-hub-polkadot.json")[..], )?)), - BridgeHubRuntimeType::PolkadotLocal => Ok(Box::new(polkadot::local_config( - polkadot::BRIDGE_HUB_POLKADOT_LOCAL, - "Polkadot BridgeHub Local", - "polkadot-local", - ParaId::new(1002), - ))), - BridgeHubRuntimeType::PolkadotDevelopment => Ok(Box::new(polkadot::local_config( - polkadot::BRIDGE_HUB_POLKADOT_DEVELOPMENT, - "Polkadot BridgeHub Development", - "polkadot-dev", - ParaId::new(1002), - ))), BridgeHubRuntimeType::Kusama => Ok(Box::new(GenericChainSpec::from_json_bytes( &include_bytes!("../../chain-specs/bridge-hub-kusama.json")[..], )?)), - BridgeHubRuntimeType::KusamaLocal => Ok(Box::new(kusama::local_config( - kusama::BRIDGE_HUB_KUSAMA_LOCAL, - "Kusama BridgeHub Local", - "kusama-local", - ParaId::new(1003), - ))), - BridgeHubRuntimeType::KusamaDevelopment => Ok(Box::new(kusama::local_config( - kusama::BRIDGE_HUB_KUSAMA_DEVELOPMENT, - "Kusama BridgeHub Development", - "kusama-dev", - ParaId::new(1003), - ))), BridgeHubRuntimeType::Westend => Ok(Box::new(GenericChainSpec::from_json_bytes( &include_bytes!("../../chain-specs/bridge-hub-westend.json")[..], )?)), @@ -273,109 +237,7 @@ pub mod rococo { /// Sub-module for Kusama setup pub mod kusama { - use super::{BridgeHubBalance, ParaId}; - use crate::chain_spec::{ - get_account_id_from_seed, get_collator_keys_from_seed, Extensions, GenericChainSpec, - SAFE_XCM_VERSION, - }; - use parachains_common::{AccountId, AuraId}; - use sc_chain_spec::ChainType; - use sp_core::sr25519; - pub(crate) const BRIDGE_HUB_KUSAMA: &str = "bridge-hub-kusama"; - pub(crate) const BRIDGE_HUB_KUSAMA_LOCAL: &str = "bridge-hub-kusama-local"; - pub(crate) const BRIDGE_HUB_KUSAMA_DEVELOPMENT: &str = "bridge-hub-kusama-dev"; - const BRIDGE_HUB_KUSAMA_ED: BridgeHubBalance = - parachains_common::kusama::currency::EXISTENTIAL_DEPOSIT; - - pub fn local_config( - id: &str, - chain_name: &str, - relay_chain: &str, - para_id: ParaId, - ) -> GenericChainSpec { - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("ss58Format".into(), 2.into()); - properties.insert("tokenSymbol".into(), "KSM".into()); - properties.insert("tokenDecimals".into(), 12.into()); - - GenericChainSpec::builder( - bridge_hub_kusama_runtime::WASM_BINARY - .expect("WASM binary was not built, please build it!"), - Extensions { relay_chain: relay_chain.to_string(), para_id: para_id.into() }, - ) - .with_name(chain_name) - .with_id(super::ensure_id(id).expect("invalid id")) - .with_chain_type(ChainType::Local) - .with_genesis_config_patch(genesis( - // initial collators. - vec![ - ( - get_account_id_from_seed::("Alice"), - get_collator_keys_from_seed::("Alice"), - ), - ( - get_account_id_from_seed::("Bob"), - get_collator_keys_from_seed::("Bob"), - ), - ], - vec![ - get_account_id_from_seed::("Alice"), - get_account_id_from_seed::("Bob"), - get_account_id_from_seed::("Charlie"), - get_account_id_from_seed::("Dave"), - get_account_id_from_seed::("Eve"), - get_account_id_from_seed::("Ferdie"), - get_account_id_from_seed::("Alice//stash"), - get_account_id_from_seed::("Bob//stash"), - get_account_id_from_seed::("Charlie//stash"), - get_account_id_from_seed::("Dave//stash"), - get_account_id_from_seed::("Eve//stash"), - get_account_id_from_seed::("Ferdie//stash"), - ], - para_id, - )) - .with_properties(properties) - .build() - } - - fn genesis( - invulnerables: Vec<(AccountId, AuraId)>, - endowed_accounts: Vec, - id: ParaId, - ) -> serde_json::Value { - serde_json::json!({ - "balances": { - "balances": endowed_accounts - .iter() - .cloned() - .map(|k| (k, BRIDGE_HUB_KUSAMA_ED * 524_288)) - .collect::>(), - }, - "parachainInfo": { - "parachainId": id, - }, - "collatorSelection": { - "invulnerables": invulnerables.iter().cloned().map(|(acc, _)| acc).collect::>(), - "candidacyBond": BRIDGE_HUB_KUSAMA_ED * 16, - }, - "session": { - "keys": invulnerables - .into_iter() - .map(|(acc, aura)| { - ( - acc.clone(), // account id - acc, // validator id - bridge_hub_kusama_runtime::SessionKeys { aura }, // session keys - ) - }) - .collect::>(), - }, - "polkadotXcm": { - "safeXcmVersion": Some(SAFE_XCM_VERSION), - } - }) - } } /// Sub-module for Westend setup. @@ -491,107 +353,5 @@ pub mod westend { /// Sub-module for Polkadot setup pub mod polkadot { - use super::{BridgeHubBalance, ParaId}; - use crate::chain_spec::{ - get_account_id_from_seed, get_collator_keys_from_seed, Extensions, GenericChainSpec, - SAFE_XCM_VERSION, - }; - use parachains_common::{AccountId, AuraId}; - use sc_chain_spec::ChainType; - use sp_core::sr25519; - pub(crate) const BRIDGE_HUB_POLKADOT: &str = "bridge-hub-polkadot"; - pub(crate) const BRIDGE_HUB_POLKADOT_LOCAL: &str = "bridge-hub-polkadot-local"; - pub(crate) const BRIDGE_HUB_POLKADOT_DEVELOPMENT: &str = "bridge-hub-polkadot-dev"; - const BRIDGE_HUB_POLKADOT_ED: BridgeHubBalance = - parachains_common::polkadot::currency::EXISTENTIAL_DEPOSIT; - - pub fn local_config( - id: &str, - chain_name: &str, - relay_chain: &str, - para_id: ParaId, - ) -> GenericChainSpec { - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("ss58Format".into(), 0.into()); - properties.insert("tokenSymbol".into(), "DOT".into()); - properties.insert("tokenDecimals".into(), 10.into()); - - GenericChainSpec::builder( - bridge_hub_polkadot_runtime::WASM_BINARY - .expect("WASM binary was not built, please build it!"), - Extensions { relay_chain: relay_chain.to_string(), para_id: para_id.into() }, - ) - .with_name(chain_name) - .with_id(super::ensure_id(id).expect("invalid id")) - .with_chain_type(ChainType::Local) - .with_genesis_config_patch(genesis( - // initial collators. - vec![ - ( - get_account_id_from_seed::("Alice"), - get_collator_keys_from_seed::("Alice"), - ), - ( - get_account_id_from_seed::("Bob"), - get_collator_keys_from_seed::("Bob"), - ), - ], - vec![ - get_account_id_from_seed::("Alice"), - get_account_id_from_seed::("Bob"), - get_account_id_from_seed::("Charlie"), - get_account_id_from_seed::("Dave"), - get_account_id_from_seed::("Eve"), - get_account_id_from_seed::("Ferdie"), - get_account_id_from_seed::("Alice//stash"), - get_account_id_from_seed::("Bob//stash"), - get_account_id_from_seed::("Charlie//stash"), - get_account_id_from_seed::("Dave//stash"), - get_account_id_from_seed::("Eve//stash"), - get_account_id_from_seed::("Ferdie//stash"), - ], - para_id, - )) - .with_properties(properties) - .build() - } - - fn genesis( - invulnerables: Vec<(AccountId, AuraId)>, - endowed_accounts: Vec, - id: ParaId, - ) -> serde_json::Value { - serde_json::json!({ - "balances": { - "balances": endowed_accounts - .iter() - .cloned() - .map(|k| (k, BRIDGE_HUB_POLKADOT_ED * 4096)) - .collect::>(), - }, - "parachainInfo": { - "parachainId": id, - }, - "collatorSelection": { - "invulnerables": invulnerables.iter().cloned().map(|(acc, _)| acc).collect::>(), - "candidacyBond": BRIDGE_HUB_POLKADOT_ED * 16, - }, - "session": { - "keys": invulnerables - .into_iter() - .map(|(acc, aura)| { - ( - acc.clone(), // account id - acc, // validator id - bridge_hub_polkadot_runtime::SessionKeys { aura }, // session keys - ) - }) - .collect::>(), - }, - "polkadotXcm": { - "safeXcmVersion": Some(SAFE_XCM_VERSION), - } - }) - } } diff --git a/cumulus/polkadot-parachain/src/chain_spec/collectives.rs b/cumulus/polkadot-parachain/src/chain_spec/collectives.rs index ac75a40ebde..dd67bf975f7 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/collectives.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/collectives.rs @@ -23,143 +23,9 @@ use parachains_common::{AccountId, AuraId, Balance as CollectivesBalance}; use sc_service::ChainType; use sp_core::sr25519; -const COLLECTIVES_POLKADOT_ED: CollectivesBalance = - parachains_common::polkadot::currency::EXISTENTIAL_DEPOSIT; const COLLECTIVES_WESTEND_ED: CollectivesBalance = parachains_common::westend::currency::EXISTENTIAL_DEPOSIT; -/// Generate the session keys from individual elements. -/// -/// The input must be a tuple of individual keys (a single arg for now since we have just one key). -pub fn collectives_polkadot_session_keys( - keys: AuraId, -) -> collectives_polkadot_runtime::SessionKeys { - collectives_polkadot_runtime::SessionKeys { aura: keys } -} - -pub fn collectives_polkadot_development_config() -> GenericChainSpec { - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("ss58Format".into(), 0.into()); - properties.insert("tokenSymbol".into(), "DOT".into()); - properties.insert("tokenDecimals".into(), 10.into()); - - GenericChainSpec::builder( - collectives_polkadot_runtime::WASM_BINARY - .expect("WASM binary was not built, please build it!"), - Extensions { relay_chain: "polkadot-dev".into(), para_id: 1002 }, - ) - .with_name("Polkadot Collectives Development") - .with_id("collectives_polkadot_dev") - .with_chain_type(ChainType::Local) - .with_genesis_config_patch(collectives_polkadot_genesis( - // initial collators. - vec![( - get_account_id_from_seed::("Alice"), - get_collator_keys_from_seed::("Alice"), - )], - vec![ - get_account_id_from_seed::("Alice"), - get_account_id_from_seed::("Bob"), - get_account_id_from_seed::("Alice//stash"), - get_account_id_from_seed::("Bob//stash"), - ], - // 1002 avoids a potential collision with Kusama-1001 (Encointer) should there ever - // be a collective para on Kusama. - 1002.into(), - )) - .with_boot_nodes(Vec::new()) - .with_properties(properties) - .build() -} - -/// Collectives Polkadot Local Config. -pub fn collectives_polkadot_local_config() -> GenericChainSpec { - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("ss58Format".into(), 0.into()); - properties.insert("tokenSymbol".into(), "DOT".into()); - properties.insert("tokenDecimals".into(), 10.into()); - - GenericChainSpec::builder( - collectives_polkadot_runtime::WASM_BINARY - .expect("WASM binary was not built, please build it!"), - Extensions { relay_chain: "polkadot-local".into(), para_id: 1002 }, - ) - .with_name("Polkadot Collectives Local") - .with_id("collectives_polkadot_local") - .with_chain_type(ChainType::Local) - .with_genesis_config_patch(collectives_polkadot_genesis( - // initial collators. - vec![ - ( - get_account_id_from_seed::("Alice"), - get_collator_keys_from_seed::("Alice"), - ), - ( - get_account_id_from_seed::("Bob"), - get_collator_keys_from_seed::("Bob"), - ), - ], - vec![ - get_account_id_from_seed::("Alice"), - get_account_id_from_seed::("Bob"), - get_account_id_from_seed::("Charlie"), - get_account_id_from_seed::("Dave"), - get_account_id_from_seed::("Eve"), - get_account_id_from_seed::("Ferdie"), - get_account_id_from_seed::("Alice//stash"), - get_account_id_from_seed::("Bob//stash"), - get_account_id_from_seed::("Charlie//stash"), - get_account_id_from_seed::("Dave//stash"), - get_account_id_from_seed::("Eve//stash"), - get_account_id_from_seed::("Ferdie//stash"), - ], - 1002.into(), - )) - .with_boot_nodes(Vec::new()) - .with_properties(properties) - .build() -} - -fn collectives_polkadot_genesis( - invulnerables: Vec<(AccountId, AuraId)>, - endowed_accounts: Vec, - id: ParaId, -) -> serde_json::Value { - serde_json::json!( { - "balances": { - "balances": endowed_accounts - .iter() - .cloned() - .map(|k| (k, COLLECTIVES_POLKADOT_ED * 4096)) - .collect::>(), - }, - "parachainInfo": { - "parachainId": id, - }, - "collatorSelection": { - "invulnerables": invulnerables.iter().cloned().map(|(acc, _)| acc).collect::>(), - "candidacyBond": COLLECTIVES_POLKADOT_ED * 16, - }, - "session": { - "keys": invulnerables - .into_iter() - .map(|(acc, aura)| { - ( - acc.clone(), // account id - acc, // validator id - collectives_polkadot_session_keys(aura), // session keys - ) - }) - .collect::>(), - }, - // no need to pass anything to aura, in fact it will panic if we do. Session will take care - // of this. - "polkadotXcm": { - "safeXcmVersion": Some(SAFE_XCM_VERSION), - }, - }) -} - /// Generate the session keys from individual elements. /// /// The input must be a tuple of individual keys (a single arg for now since we have just one key). diff --git a/cumulus/polkadot-parachain/src/chain_spec/glutton.rs b/cumulus/polkadot-parachain/src/chain_spec/glutton.rs index 8eced8d8f81..77a4123b13e 100644 --- a/cumulus/polkadot-parachain/src/chain_spec/glutton.rs +++ b/cumulus/polkadot-parachain/src/chain_spec/glutton.rs @@ -22,62 +22,6 @@ use sp_core::sr25519; use super::get_collator_keys_from_seed; -pub fn glutton_development_config(para_id: ParaId) -> GenericChainSpec { - GenericChainSpec::builder( - glutton_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), - Extensions { relay_chain: "kusama-dev".into(), para_id: para_id.into() }, - ) - .with_name("Glutton Development") - .with_id("glutton_dev") - .with_chain_type(ChainType::Local) - .with_genesis_config_patch(glutton_genesis( - para_id, - vec![get_collator_keys_from_seed::("Alice")], - )) - .build() -} - -pub fn glutton_local_config(para_id: ParaId) -> GenericChainSpec { - GenericChainSpec::builder( - glutton_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), - Extensions { relay_chain: "kusama-local".into(), para_id: para_id.into() }, - ) - .with_name("Glutton Local") - .with_id("glutton_local") - .with_chain_type(ChainType::Local) - .with_genesis_config_patch(glutton_genesis( - para_id, - vec![ - get_collator_keys_from_seed::("Alice"), - get_collator_keys_from_seed::("Bob"), - ], - )) - .build() -} - -pub fn glutton_config(para_id: ParaId) -> GenericChainSpec { - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("ss58Format".into(), 2.into()); - - GenericChainSpec::builder( - glutton_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), - Extensions { relay_chain: "kusama".into(), para_id: para_id.into() }, - ) - .with_name(format!("Glutton {}", para_id).as_str()) - .with_id(format!("glutton-kusama-{}", para_id).as_str()) - .with_chain_type(ChainType::Live) - .with_genesis_config_patch(glutton_genesis( - para_id, - vec![ - get_collator_keys_from_seed::("Alice"), - get_collator_keys_from_seed::("Bob"), - ], - )) - .with_protocol_id(format!("glutton-kusama-{}", para_id).as_str()) - .with_properties(properties) - .build() -} - fn glutton_genesis(parachain_id: ParaId, collators: Vec) -> serde_json::Value { serde_json::json!( { "parachainInfo": { diff --git a/cumulus/polkadot-parachain/src/command.rs b/cumulus/polkadot-parachain/src/command.rs index f966a5db8f3..98dcc2fea4a 100644 --- a/cumulus/polkadot-parachain/src/command.rs +++ b/cumulus/polkadot-parachain/src/command.rs @@ -144,27 +144,11 @@ fn load_spec(id: &str) -> std::result::Result, String> { "seedling" => Box::new(chain_spec::seedling::get_seedling_chain_spec()), // -- Asset Hub Polkadot - "asset-hub-polkadot-dev" | "statemint-dev" => - Box::new(chain_spec::asset_hubs::asset_hub_polkadot_development_config()), - "asset-hub-polkadot-local" | "statemint-local" => - Box::new(chain_spec::asset_hubs::asset_hub_polkadot_local_config()), - // the chain spec as used for generating the upgrade genesis values - "asset-hub-polkadot-genesis" | "statemint-genesis" => - Box::new(chain_spec::asset_hubs::asset_hub_polkadot_config()), - // the shell-based chain spec as used for syncing "asset-hub-polkadot" | "statemint" => Box::new(GenericChainSpec::from_json_bytes( &include_bytes!("../chain-specs/asset-hub-polkadot.json")[..], )?), // -- Asset Hub Kusama - "asset-hub-kusama-dev" | "statemine-dev" => - Box::new(chain_spec::asset_hubs::asset_hub_kusama_development_config()), - "asset-hub-kusama-local" | "statemine-local" => - Box::new(chain_spec::asset_hubs::asset_hub_kusama_local_config()), - // the chain spec as used for generating the upgrade genesis values - "asset-hub-kusama-genesis" | "statemine-genesis" => - Box::new(chain_spec::asset_hubs::asset_hub_kusama_config()), - // the shell-based chain spec as used for syncing "asset-hub-kusama" | "statemine" => Box::new(GenericChainSpec::from_json_bytes( &include_bytes!("../chain-specs/asset-hub-kusama.json")[..], )?), @@ -195,13 +179,11 @@ fn load_spec(id: &str) -> std::result::Result, String> { )?), // -- Polkadot Collectives - "collectives-polkadot-dev" => - Box::new(chain_spec::collectives::collectives_polkadot_development_config()), - "collectives-polkadot-local" => - Box::new(chain_spec::collectives::collectives_polkadot_local_config()), "collectives-polkadot" => Box::new(GenericChainSpec::from_json_bytes( &include_bytes!("../chain-specs/collectives-polkadot.json")[..], )?), + + // -- Westend Collectives "collectives-westend-dev" => Box::new(chain_spec::collectives::collectives_westend_development_config()), "collectives-westend-local" => @@ -229,14 +211,14 @@ fn load_spec(id: &str) -> std::result::Result, String> { .expect("invalid value") .load_config()?, - // -- Penpall - "penpal-kusama" => Box::new(chain_spec::penpal::get_penpal_chain_spec( + // -- Penpal + "penpal-rococo" => Box::new(chain_spec::penpal::get_penpal_chain_spec( para_id.expect("Must specify parachain id"), - "kusama-local", + "rococo-local", )), - "penpal-polkadot" => Box::new(chain_spec::penpal::get_penpal_chain_spec( + "penpal-westend" => Box::new(chain_spec::penpal::get_penpal_chain_spec( para_id.expect("Must specify parachain id"), - "polkadot-local", + "westend-local", )), // -- Glutton Westend @@ -251,18 +233,6 @@ fn load_spec(id: &str) -> std::result::Result, String> { para_id.expect("Must specify parachain id"), )), - // -- Glutton - "glutton-kusama-dev" => Box::new(chain_spec::glutton::glutton_development_config( - para_id.expect("Must specify parachain id"), - )), - "glutton-kusama-local" => Box::new(chain_spec::glutton::glutton_local_config( - para_id.expect("Must specify parachain id"), - )), - // the chain spec as used for generating the upgrade genesis values - "glutton-kusama-genesis" => Box::new(chain_spec::glutton::glutton_config( - para_id.expect("Must specify parachain id"), - )), - // -- Fallback (generic chainspec) "" => { log::warn!("No ChainSpec.id specified, so using default one, based on rococo-parachain runtime"); @@ -760,18 +730,14 @@ pub fn run() -> Result<()> { .map(|r| r.0) .map_err(Into::into), Runtime::BridgeHub(bridge_hub_runtime_type) => match bridge_hub_runtime_type { -chain_spec::bridge_hubs::BridgeHubRuntimeType::Polkadot | - chain_spec::bridge_hubs::BridgeHubRuntimeType::PolkadotLocal | - chain_spec::bridge_hubs::BridgeHubRuntimeType::PolkadotDevelopment => + chain_spec::bridge_hubs::BridgeHubRuntimeType::Polkadot => crate::service::start_generic_aura_node::< RuntimeApi, AuraId, >(config, polkadot_config, collator_options, id, hwbench) .await .map(|r| r.0), - chain_spec::bridge_hubs::BridgeHubRuntimeType::Kusama | - chain_spec::bridge_hubs::BridgeHubRuntimeType::KusamaLocal | - chain_spec::bridge_hubs::BridgeHubRuntimeType::KusamaDevelopment => + chain_spec::bridge_hubs::BridgeHubRuntimeType::Kusama => crate::service::start_generic_aura_node::< RuntimeApi, AuraId, @@ -1052,12 +1018,6 @@ mod tests { ); assert_eq!(Runtime::Default, path.runtime()); - let path = store_configuration( - &temp_dir, - Box::new(crate::chain_spec::asset_hubs::asset_hub_kusama_local_config()), - ); - assert_eq!(Runtime::AssetHubKusama, path.runtime()); - let path = store_configuration( &temp_dir, Box::new(crate::chain_spec::contracts::contracts_rococo_local_config()), diff --git a/cumulus/polkadot-parachain/src/service.rs b/cumulus/polkadot-parachain/src/service.rs index b0fca518201..6280d86e9f9 100644 --- a/cumulus/polkadot-parachain/src/service.rs +++ b/cumulus/polkadot-parachain/src/service.rs @@ -96,36 +96,6 @@ impl sc_executor::NativeExecutionDispatch for ShellRuntimeExecutor { } } -/// Native Asset Hub Polkadot (Statemint) executor instance. -pub struct AssetHubPolkadotRuntimeExecutor; - -impl sc_executor::NativeExecutionDispatch for AssetHubPolkadotRuntimeExecutor { - type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; - - fn dispatch(method: &str, data: &[u8]) -> Option> { - asset_hub_polkadot_runtime::api::dispatch(method, data) - } - - fn native_version() -> sc_executor::NativeVersion { - asset_hub_polkadot_runtime::native_version() - } -} - -/// Native Asset Hub Kusama (Statemine) executor instance. -pub struct AssetHubKusamaExecutor; - -impl sc_executor::NativeExecutionDispatch for AssetHubKusamaExecutor { - type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; - - fn dispatch(method: &str, data: &[u8]) -> Option> { - asset_hub_kusama_runtime::api::dispatch(method, data) - } - - fn native_version() -> sc_executor::NativeVersion { - asset_hub_kusama_runtime::native_version() - } -} - /// Native Asset Hub Westend (Westmint) executor instance. pub struct AssetHubWestendExecutor; @@ -141,21 +111,6 @@ impl sc_executor::NativeExecutionDispatch for AssetHubWestendExecutor { } } -/// Native Polkadot Collectives executor instance. -pub struct CollectivesPolkadotRuntimeExecutor; - -impl sc_executor::NativeExecutionDispatch for CollectivesPolkadotRuntimeExecutor { - type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; - - fn dispatch(method: &str, data: &[u8]) -> Option> { - collectives_polkadot_runtime::api::dispatch(method, data) - } - - fn native_version() -> sc_executor::NativeVersion { - collectives_polkadot_runtime::native_version() - } -} - /// Native Westend Collectives executor instance. pub struct CollectivesWestendRuntimeExecutor; @@ -171,36 +126,6 @@ impl sc_executor::NativeExecutionDispatch for CollectivesWestendRuntimeExecutor } } -/// Native BridgeHubPolkadot executor instance. -pub struct BridgeHubPolkadotRuntimeExecutor; - -impl sc_executor::NativeExecutionDispatch for BridgeHubPolkadotRuntimeExecutor { - type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; - - fn dispatch(method: &str, data: &[u8]) -> Option> { - bridge_hub_polkadot_runtime::api::dispatch(method, data) - } - - fn native_version() -> sc_executor::NativeVersion { - bridge_hub_polkadot_runtime::native_version() - } -} - -/// Native BridgeHubKusama executor instance. -pub struct BridgeHubKusamaRuntimeExecutor; - -impl sc_executor::NativeExecutionDispatch for BridgeHubKusamaRuntimeExecutor { - type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; - - fn dispatch(method: &str, data: &[u8]) -> Option> { - bridge_hub_kusama_runtime::api::dispatch(method, data) - } - - fn native_version() -> sc_executor::NativeVersion { - bridge_hub_kusama_runtime::native_version() - } -} - /// Native BridgeHubRococo executor instance. pub struct BridgeHubRococoRuntimeExecutor; @@ -246,21 +171,6 @@ impl sc_executor::NativeExecutionDispatch for GluttonWestendRuntimeExecutor { } } -/// Native Glutton executor instance. -pub struct GluttonRuntimeExecutor; - -impl sc_executor::NativeExecutionDispatch for GluttonRuntimeExecutor { - type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; - - fn dispatch(method: &str, data: &[u8]) -> Option> { - shell_runtime::api::dispatch(method, data) - } - - fn native_version() -> sc_executor::NativeVersion { - shell_runtime::native_version() - } -} - /// 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 diff --git a/cumulus/polkadot-parachain/tests/benchmark_storage_works.rs b/cumulus/polkadot-parachain/tests/benchmark_storage_works.rs index c2850b64e45..c554b5b3d6b 100644 --- a/cumulus/polkadot-parachain/tests/benchmark_storage_works.rs +++ b/cumulus/polkadot-parachain/tests/benchmark_storage_works.rs @@ -24,7 +24,7 @@ use std::{ use tempfile::tempdir; /// The runtimes that this command supports. -static RUNTIMES: [&str; 3] = ["asset-hub-westend", "asset-hub-kusama", "asset-hub-polkadot"]; +static RUNTIMES: [&str; 1] = ["asset-hub-westend"]; /// The `benchmark storage` command works for the dev runtimes. #[test] diff --git a/cumulus/scripts/benchmarks.sh b/cumulus/scripts/benchmarks.sh index 7da18d9440e..58b8419bf4a 100755 --- a/cumulus/scripts/benchmarks.sh +++ b/cumulus/scripts/benchmarks.sh @@ -6,16 +6,7 @@ repeat=${3:-20} __dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -${__dir}/benchmarks-ci.sh collectives collectives-polkadot target/$target $steps $repeat ${__dir}/benchmarks-ci.sh collectives collectives-westend target/$target $steps $repeat - -${__dir}/benchmarks-ci.sh assets asset-hub-kusama target/$target $steps $repeat -${__dir}/benchmarks-ci.sh assets asset-hub-polkadot target/$target $steps $repeat ${__dir}/benchmarks-ci.sh assets asset-hub-westend target/$target $steps $repeat - -${__dir}/benchmarks-ci.sh bridge-hubs bridge-hub-polkadot target/$target $steps $repeat -${__dir}/benchmarks-ci.sh bridge-hubs bridge-hub-kusama target/$target $steps $repeat ${__dir}/benchmarks-ci.sh bridge-hubs bridge-hub-rococo target/$target $steps $repeat - -${__dir}/benchmarks-ci.sh glutton glutton-kusama target/$target $steps $repeat ${__dir}/benchmarks-ci.sh glutton glutton-westend target/$target $steps $repeat diff --git a/cumulus/scripts/create_bridge_hub_kusama_spec.sh b/cumulus/scripts/create_bridge_hub_kusama_spec.sh deleted file mode 100755 index 813921b079a..00000000000 --- a/cumulus/scripts/create_bridge_hub_kusama_spec.sh +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env bash - -usage() { - echo Usage: - echo "$1 " - echo "$2 " - echo "e.g.: ./scripts/create_bridge_hub_kusama_spec.sh ./target/release/wbuild/bridge-hub-kusama-runtime/bridge_hub_kusama_runtime.compact.compressed.wasm 1002" - exit 1 -} - -if [ -z "$1" ]; then - usage -fi - -if [ -z "$2" ]; then - usage -fi - -set -e - -rt_path=$1 -para_id=$2 - -echo "Generating chain spec for runtime: $rt_path and para_id: $para_id" - -binary="./target/release/polkadot-parachain" - -# build the chain spec we'll manipulate -$binary build-spec --chain bridge-hub-kusama-dev > chain-spec-plain.json - -# convert runtime to hex -cat $rt_path | od -A n -v -t x1 | tr -d ' \n' > rt-hex.txt - -# replace the runtime in the spec with the given runtime and set some values to production -cat chain-spec-plain.json | jq --rawfile code rt-hex.txt '.genesis.runtime.system.code = ("0x" + $code)' \ - | jq '.name = "Kusama BridgeHub"' \ - | jq '.id = "bridge-hub-kusama"' \ - | jq '.chainType = "Live"' \ - | jq '.bootNodes = [ - "/dns/kusama-bridge-hub-collator-ew1-0.polkadot.io/tcp/30334/p2p/12D3KooWP2Gngt4tt2sz5BgDaAbMTxasPWk3V2Z99bQTmFcAorqa", - "/dns/kusama-bridge-hub-collator-ew1-1.polkadot.io/tcp/30334/p2p/12D3KooWMmL3FQuYmruBui1sbY4MwNmvicinrePi1Yq4QMRSYHoR", - "/dns/kusama-bridge-hub-collator-ue4-0.polkadot.io/tcp/30334/p2p/12D3KooWQpTocTck1tNBzMNTHJ3kSv4vzv8Yf9FpVkfGnungbez4", - "/dns/kusama-bridge-hub-collator-ue4-1.polkadot.io/tcp/30334/p2p/12D3KooWRgtJqKEaMi7hkU4VMiGhpHTJeL8N7JgL7d9gwooPv4eW", - - "/dns/kusama-bridge-hub-connect-ew1-0.polkadot.io/tcp/30334/p2p/12D3KooWPQQPivrqQ51kRTDc2R1mtqwKT4GGtk2rapkY4FrwHrEp", - "/dns/kusama-bridge-hub-connect-ew1-1.polkadot.io/tcp/30334/p2p/12D3KooWPcF9Yk4gYrMju9CyWCV69hAFXbYsnxCLogwLGu9QFTRn", - "/dns/kusama-bridge-hub-connect-ue4-0.polkadot.io/tcp/30334/p2p/12D3KooWMf1sVnJDTkKWtaThqvrgcSPLbfGXttSqbwhM2DJp9BUG", - "/dns/kusama-bridge-hub-connect-ue4-1.polkadot.io/tcp/30334/p2p/12D3KooWQaV7wMfNVKy2aMz4Lds3TTxgSDyZAUEnbAZMfD8rW3ow", - - "/dns/kusama-bridge-hub-connect-ew1-0.polkadot.io/tcp/443/wss/p2p/12D3KooWPQQPivrqQ51kRTDc2R1mtqwKT4GGtk2rapkY4FrwHrEp", - "/dns/kusama-bridge-hub-connect-ew1-1.polkadot.io/tcp/443/wss/p2p/12D3KooWPcF9Yk4gYrMju9CyWCV69hAFXbYsnxCLogwLGu9QFTRn", - "/dns/kusama-bridge-hub-connect-ue4-0.polkadot.io/tcp/443/wss/p2p/12D3KooWMf1sVnJDTkKWtaThqvrgcSPLbfGXttSqbwhM2DJp9BUG", - "/dns/kusama-bridge-hub-connect-ue4-1.polkadot.io/tcp/443/wss/p2p/12D3KooWQaV7wMfNVKy2aMz4Lds3TTxgSDyZAUEnbAZMfD8rW3ow" - - ]' \ - | jq '.relay_chain = "kusama"' \ - | jq --argjson para_id $para_id '.para_id = $para_id' \ - | jq --argjson para_id $para_id '.genesis.runtime.parachainInfo.parachainId = $para_id' \ - | jq '.genesis.runtime.balances.balances = []' \ - | jq '.genesis.runtime.collatorSelection.invulnerables = [ - "DQkekNBt8g6D7bPUEqhgfujADxzzfivr1qQZJkeGzAqnEzF", - "HbUc5qrLtKAZvasioiTSf1CunaN2SyEwvfsgMuYQjXA5sfk", - "JEe4NcVyuWFEwZe4WLfRtynDswyKgvLS8H8r4Wo9d3t61g1", - "FAe4DGhQHKTm35n5MgBFNBZvyEJcm7QAwgnVNQU8KXP2ixn" - ]' \ - | jq '.genesis.runtime.session.keys = [ - [ - "DQkekNBt8g6D7bPUEqhgfujADxzzfivr1qQZJkeGzAqnEzF", - "DQkekNBt8g6D7bPUEqhgfujADxzzfivr1qQZJkeGzAqnEzF", - { - "aura": "5E7AiV9ygGUcfdK3XVoJsew7fsu18uvKQHYhksE5PXDNfRL9" - } - ], - [ - "HbUc5qrLtKAZvasioiTSf1CunaN2SyEwvfsgMuYQjXA5sfk", - "HbUc5qrLtKAZvasioiTSf1CunaN2SyEwvfsgMuYQjXA5sfk", - { - "aura": "5CyXoMh8cA2MSk55JASpCfhCg44iSG5fBwmhvSfXUUS3uhPR" - } - ], - [ - "JEe4NcVyuWFEwZe4WLfRtynDswyKgvLS8H8r4Wo9d3t61g1", - "JEe4NcVyuWFEwZe4WLfRtynDswyKgvLS8H8r4Wo9d3t61g1", - { - "aura": "5Grj5pN52kKU61qK9qP5cf9ADuyowe2WVvYWxMNK1QqAM8qf" - } - ], - [ - "FAe4DGhQHKTm35n5MgBFNBZvyEJcm7QAwgnVNQU8KXP2ixn", - "FAe4DGhQHKTm35n5MgBFNBZvyEJcm7QAwgnVNQU8KXP2ixn", - { - "aura": "5EHTyftGjcHfe71VVuZqCeLbHNf4ptYzgdAMMyqpTNbs5Rrp" - } - ] - ]' \ - > edited-chain-spec-plain.json - -# build a raw spec -$binary build-spec --chain edited-chain-spec-plain.json --raw > chain-spec-raw.json -cp edited-chain-spec-plain.json bridge-hub-kusama-spec.json -cp chain-spec-raw.json ./parachains/chain-specs/bridge-hub-kusama.json -cp chain-spec-raw.json bridge-hub-kusama-spec-raw.json - -# build genesis data -$binary export-genesis-state --chain chain-spec-raw.json > bridge-hub-kusama-genesis-head-data - -# build genesis wasm -$binary export-genesis-wasm --chain chain-spec-raw.json > bridge-hub-kusama-wasm diff --git a/cumulus/scripts/create_bridge_hub_polkadot_spec.sh b/cumulus/scripts/create_bridge_hub_polkadot_spec.sh deleted file mode 100755 index 49bc9cee692..00000000000 --- a/cumulus/scripts/create_bridge_hub_polkadot_spec.sh +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env bash - -usage() { - echo Usage: - echo "$1 " - echo "$2 " - echo "e.g.: ./scripts/create_bridge_hub_polkadot_spec.sh ./target/release/wbuild/bridge-hub-polkadot-runtime/bridge_hub_polkadot_runtime.compact.compressed.wasm 1002" - exit 1 -} - -if [ -z "$1" ]; then - usage -fi - -if [ -z "$2" ]; then - usage -fi - -set -e - -rt_path=$1 -para_id=$2 - -echo "Generating chain spec for runtime: $rt_path and para_id: $para_id" - -binary="./target/release/polkadot-parachain" - -# build the chain spec we'll manipulate -$binary build-spec --chain bridge-hub-polkadot-dev > chain-spec-plain.json - -# convert runtime to hex -cat $rt_path | od -A n -v -t x1 | tr -d ' \n' > rt-hex.txt - -# replace the runtime in the spec with the given runtime and set some values to production -cat chain-spec-plain.json | jq --rawfile code rt-hex.txt '.genesis.runtime.system.code = ("0x" + $code)' \ - | jq '.name = "Polkadot BridgeHub"' \ - | jq '.id = "bridge-hub-polkadot"' \ - | jq '.chainType = "Live"' \ - | jq '.bootNodes = [ - "/dns/polkadot-bridge-hub-connect-a-0.polkadot.io/tcp/30334/p2p/12D3KooWAVQMhkXmc5ueSYasdsRWQbKus2YGZ6HDZUB4ViJMCxXy", - "/dns/polkadot-bridge-hub-connect-a-1.polkadot.io/tcp/30334/p2p/12D3KooWG4ypDHLKGCv4BZ6PuaGUwQHKAH6p2D6arR2uQ1eiR1T3", - "/dns/polkadot-bridge-hub-connect-b-0.polkadot.io/tcp/30334/p2p/12D3KooWCwGKxjpJXnx1mwXKvaxGQm769EM3b6Pg5vbU33wbhsNw", - "/dns/polkadot-bridge-hub-connect-b-1.polkadot.io/tcp/30334/p2p/12D3KooWLiSEdhriJUPdZKFtAjZrQncxN2ssEoDKVrt5mGM4Qu4J", - - "/dns/polkadot-bridge-hub-connect-a-0.polkadot.io/tcp/443/wss/p2p/12D3KooWAVQMhkXmc5ueSYasdsRWQbKus2YGZ6HDZUB4ViJMCxXy", - "/dns/polkadot-bridge-hub-connect-a-1.polkadot.io/tcp/443/wss/p2p/12D3KooWG4ypDHLKGCv4BZ6PuaGUwQHKAH6p2D6arR2uQ1eiR1T3", - "/dns/polkadot-bridge-hub-connect-b-0.polkadot.io/tcp/443/wss/p2p/12D3KooWCwGKxjpJXnx1mwXKvaxGQm769EM3b6Pg5vbU33wbhsNw", - "/dns/polkadot-bridge-hub-connect-b-1.polkadot.io/tcp/443/wss/p2p/12D3KooWLiSEdhriJUPdZKFtAjZrQncxN2ssEoDKVrt5mGM4Qu4J" - ]' \ - | jq '.relay_chain = "polkadot"' \ - | jq --argjson para_id $para_id '.para_id = $para_id' \ - | jq --argjson para_id $para_id '.genesis.runtime.parachainInfo.parachainId = $para_id' \ - | jq '.genesis.runtime.balances.balances = []' \ - | jq '.genesis.runtime.collatorSelection.invulnerables = [ - "134AK3RiMA97Fx9dLj1CvuLJUa8Yo93EeLA1TkP6CCGnWMSd", - "15dU8Tt7kde2diuHzijGbKGPU5K8BPzrFJfYFozvrS1DdE21", - "1vXMKM8SctM28AQw1wSpd7p9yCUWn1uhbbKSVTuznsw8Q2x", - "15mCQcaj3QP1UdxBF82JRd9v3riZJcVNVEmx8xkFp7DSYR4Y" - ]' \ - | jq '.genesis.runtime.session.keys = [ - [ - "134AK3RiMA97Fx9dLj1CvuLJUa8Yo93EeLA1TkP6CCGnWMSd", - "134AK3RiMA97Fx9dLj1CvuLJUa8Yo93EeLA1TkP6CCGnWMSd", - { - "aura": "5EX6AnyuSPEFQ7HAPjRgzqk1sxgh8cyacGimwJ16y1nJ2w7g" - } - ], - [ - "15dU8Tt7kde2diuHzijGbKGPU5K8BPzrFJfYFozvrS1DdE21", - "15dU8Tt7kde2diuHzijGbKGPU5K8BPzrFJfYFozvrS1DdE21", - { - "aura": "5DZN8UhaJftvKhMMARmJBwrwzuEDpoUzzBvvWMbFXYsJ4CmK" - } - ], - [ - "1vXMKM8SctM28AQw1wSpd7p9yCUWn1uhbbKSVTuznsw8Q2x", - "1vXMKM8SctM28AQw1wSpd7p9yCUWn1uhbbKSVTuznsw8Q2x", - { - "aura": "5FKsn83rXQQiw7HwoeYoLMoYS5GP9YVNHZiCHwA4DSwDcPVa" - } - ], - [ - "15mCQcaj3QP1UdxBF82JRd9v3riZJcVNVEmx8xkFp7DSYR4Y", - "15mCQcaj3QP1UdxBF82JRd9v3riZJcVNVEmx8xkFp7DSYR4Y", - { - "aura": "5DCg19ckcJz4m52Th4o1LcSRK3H7NsUcQsRbu7pTDM3mZ26v" - } - ] - ]' \ - > edited-chain-spec-plain.json - -# build a raw spec -$binary build-spec --chain edited-chain-spec-plain.json --raw > chain-spec-raw.json -cp edited-chain-spec-plain.json bridge-hub-polkadot-spec.json -cp chain-spec-raw.json ./parachains/chain-specs/bridge-hub-polkadot.json -cp chain-spec-raw.json bridge-hub-polkadot-spec-raw.json - -# build genesis data -$binary export-genesis-state --chain chain-spec-raw.json > bridge-hub-polkadot-genesis-head-data - -# build genesis wasm -$binary export-genesis-wasm --chain chain-spec-raw.json > bridge-hub-polkadot-wasm - -# cleanup -rm -f rt-hex.txt -rm -f chain-spec-plain.json -rm -f chain-spec-raw.json -rm -f edited-chain-spec-plain.json diff --git a/cumulus/scripts/create_glutton_spec.sh b/cumulus/scripts/create_glutton_spec.sh index c5158392f52..78aafda3bd0 100755 --- a/cumulus/scripts/create_glutton_spec.sh +++ b/cumulus/scripts/create_glutton_spec.sh @@ -55,7 +55,7 @@ for (( para_id=$from_para_id; para_id<=$to_para_id; para_id++ )); do fi # build the chain spec we'll manipulate - $binary_path build-spec --disable-default-bootnode --chain "glutton-kusama-genesis-$para_id" > "$output_para_dir/plain-glutton-$relay_chain-$para_id-spec.json" + $binary_path build-spec --disable-default-bootnode --chain "glutton-westend-genesis-$para_id" > "$output_para_dir/plain-glutton-$relay_chain-$para_id-spec.json" id="glutton-$relay_chain-$para_id" protocol_id="glutton-$relay_chain-$para_id" diff --git a/cumulus/scripts/parachains_integration_tests.sh b/cumulus/scripts/parachains_integration_tests.sh deleted file mode 100755 index 2a06b930e22..00000000000 --- a/cumulus/scripts/parachains_integration_tests.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash - -tests=( - asset-hub-kusama - asset-hub-polkadot -) - -rm -R logs &> /dev/null - -for t in ${tests[@]} -do - printf "\n🔍 Running $t tests...\n\n" - - mkdir -p logs/$t - - parachains-integration-tests \ - -m zombienet \ - -c ./parachains/integration-tests/$t/config.toml \ - -cl ./logs/$t/chains.log 2> /dev/null & - - parachains-integration-tests \ - -m test \ - -t ./parachains/integration-tests/$t \ - -tl ./logs/$t/tests.log & tests=$! - - wait $tests - - pkill -f polkadot - pkill -f parachain - - printf "\n🎉 $t integration tests finished! \n\n" -done diff --git a/cumulus/zombienet/examples/statemine_kusama_local_network.toml b/cumulus/zombienet/examples/asset_hub_westend_local_network.toml similarity index 71% rename from cumulus/zombienet/examples/statemine_kusama_local_network.toml rename to cumulus/zombienet/examples/asset_hub_westend_local_network.toml index 1f3debfb9d2..5b0ac1f17e8 100644 --- a/cumulus/zombienet/examples/statemine_kusama_local_network.toml +++ b/cumulus/zombienet/examples/asset_hub_westend_local_network.toml @@ -1,7 +1,7 @@ [relaychain] -default_command = "../polkadot/target/release/polkadot" +default_command = "../../target/release/polkadot" default_args = [ "-lparachain=debug" ] -chain = "kusama-local" +chain = "westend-local" [[relaychain.nodes]] name = "alice" @@ -21,47 +21,47 @@ chain = "kusama-local" [[parachains]] id = 1000 -chain = "asset-hub-kusama-local" +chain = "asset-hub-westend-local" cumulus_based = true # run alice as parachain collator [[parachains.collators]] name = "alice" validator = true - command = "./target/release/polkadot-parachain" + command = "../../target/release/polkadot-parachain" args = ["-lparachain=debug"] # run bob as parachain collator [[parachains.collators]] name = "bob" validator = true - command = "./target/release/polkadot-parachain" + command = "../../target/release/polkadot-parachain" args = ["-lparachain=debug"] # run charlie as parachain collator [[parachains.collators]] name = "charlie" validator = true - command = "./target/release/polkadot-parachain" + command = "../../target/release/polkadot-parachain" args = ["-lparachain=debug"] # run dave as parachain collator [[parachains.collators]] name = "dave" validator = true - command = "./target/release/polkadot-parachain" + command = "../../target/release/polkadot-parachain" args = ["-lparachain=debug"] # run eve as parachain collator [[parachains.collators]] name = "eve" validator = true - command = "./target/release/polkadot-parachain" + command = "../../target/release/polkadot-parachain" args = ["-lparachain=debug"] # run ferdie as parachain collator [[parachains.collators]] name = "ferdie" validator = true - command = "./target/release/polkadot-parachain" + command = "../../target/release/polkadot-parachain" args = ["-lparachain=debug"] diff --git a/cumulus/zombienet/examples/bridge_hub_kusama_local_network.toml b/cumulus/zombienet/examples/bridge_hub_kusama_local_network.toml deleted file mode 100644 index ae8ae07a75c..00000000000 --- a/cumulus/zombienet/examples/bridge_hub_kusama_local_network.toml +++ /dev/null @@ -1,67 +0,0 @@ -[relaychain] -default_command = "../polkadot/target/release/polkadot" -default_args = [ "-lparachain=debug" ] -chain = "kusama-local" - - [[relaychain.nodes]] - name = "alice" - validator = true - - [[relaychain.nodes]] - name = "bob" - validator = true - - [[relaychain.nodes]] - name = "charlie" - validator = true - - [[relaychain.nodes]] - name = "dave" - validator = true - -[[parachains]] -id = 1003 -chain = "bridge-hub-kusama-local" -cumulus_based = true - - # run alice as parachain collator - [[parachains.collators]] - name = "alice" - validator = true - command = "./target/release/polkadot-parachain" - args = ["-lparachain=debug"] - - # run bob as parachain collator - [[parachains.collators]] - name = "bob" - validator = true - command = "./target/release/polkadot-parachain" - args = ["-lparachain=debug"] - - # run charlie as parachain collator - [[parachains.collators]] - name = "charlie" - validator = true - command = "./target/release/polkadot-parachain" - args = ["-lparachain=debug"] - - # run dave as parachain collator - [[parachains.collators]] - name = "dave" - validator = true - command = "./target/release/polkadot-parachain" - args = ["-lparachain=debug"] - - # run eve as parachain collator - [[parachains.collators]] - name = "eve" - validator = true - command = "./target/release/polkadot-parachain" - args = ["-lparachain=debug"] - - # run ferdie as parachain collator - [[parachains.collators]] - name = "ferdie" - validator = true - command = "./target/release/polkadot-parachain" - args = ["-lparachain=debug"] diff --git a/cumulus/zombienet/examples/bridge_hub_polkadot_local_network.toml b/cumulus/zombienet/examples/bridge_hub_polkadot_local_network.toml deleted file mode 100644 index 564fece7cae..00000000000 --- a/cumulus/zombienet/examples/bridge_hub_polkadot_local_network.toml +++ /dev/null @@ -1,67 +0,0 @@ -[relaychain] -default_command = "../polkadot/target/release/polkadot" -default_args = [ "-lparachain=debug" ] -chain = "polkadot-local" - - [[relaychain.nodes]] - name = "alice" - validator = true - - [[relaychain.nodes]] - name = "bob" - validator = true - - [[relaychain.nodes]] - name = "charlie" - validator = true - - [[relaychain.nodes]] - name = "dave" - validator = true - -[[parachains]] -id = 1003 -chain = "bridge-hub-polkadot-local" -cumulus_based = true - - # run alice as parachain collator - [[parachains.collators]] - name = "alice" - validator = true - command = "./target/release/polkadot-parachain" - args = ["-lparachain=debug"] - - # run bob as parachain collator - [[parachains.collators]] - name = "bob" - validator = true - command = "./target/release/polkadot-parachain" - args = ["-lparachain=debug"] - - # run charlie as parachain collator - [[parachains.collators]] - name = "charlie" - validator = true - command = "./target/release/polkadot-parachain" - args = ["-lparachain=debug"] - - # run dave as parachain collator - [[parachains.collators]] - name = "dave" - validator = true - command = "./target/release/polkadot-parachain" - args = ["-lparachain=debug"] - - # run eve as parachain collator - [[parachains.collators]] - name = "eve" - validator = true - command = "./target/release/polkadot-parachain" - args = ["-lparachain=debug"] - - # run ferdie as parachain collator - [[parachains.collators]] - name = "ferdie" - validator = true - command = "./target/release/polkadot-parachain" - args = ["-lparachain=debug"] diff --git a/cumulus/zombienet/examples/small_network.toml b/cumulus/zombienet/examples/small_network.toml index 06ac0d0e5e7..ab726571230 100644 --- a/cumulus/zombienet/examples/small_network.toml +++ b/cumulus/zombienet/examples/small_network.toml @@ -14,7 +14,7 @@ chain = "rococo-local" [[parachains]] id = 2000 cumulus_based = true -chain = "asset-hub-kusama-local" +chain = "asset-hub-rococo-local" # run charlie as parachain collator [[parachains.collators]] -- GitLab From a5d14b4fc10cf207c4d5bc05cce3342940558b51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=B3nal=20Murray?= Date: Thu, 30 Nov 2023 11:20:38 +0000 Subject: [PATCH 101/102] Make chainspec script run for westend --- .../scripts/create_coretime_westend_spec.sh | 100 ++++++++++-------- 1 file changed, 53 insertions(+), 47 deletions(-) diff --git a/cumulus/scripts/create_coretime_westend_spec.sh b/cumulus/scripts/create_coretime_westend_spec.sh index ae942b97dcc..90996f4a74f 100755 --- a/cumulus/scripts/create_coretime_westend_spec.sh +++ b/cumulus/scripts/create_coretime_westend_spec.sh @@ -4,7 +4,7 @@ usage() { echo Usage: echo "$1 " echo "$2 " - echo "e.g.: ./scripts/create_coretime_westend_spec.sh ./target/release/wbuild/coretime-westend-runtime/coretime_westend_runtime.compact.compressed.wasm 1005" + echo "e.g.: ./cumulus/scripts/create_coretime_westend_spec.sh ./target/release/wbuild/coretime-westend-runtime/coretime_westend_runtime.compact.compressed.wasm 1005" exit 1 } @@ -23,7 +23,7 @@ para_id=$2 echo "Generating chain spec for runtime: $rt_path and para_id: $para_id" -binary="./target/release/westend-parachain" +binary="./target/release/polkadot-parachain" # build the chain spec we'll manipulate $binary build-spec --chain coretime-westend-dev > chain-spec-plain.json @@ -32,67 +32,67 @@ $binary build-spec --chain coretime-westend-dev > chain-spec-plain.json cat $rt_path | od -A n -v -t x1 | tr -d ' \n' > rt-hex.txt # replace the runtime in the spec with the given runtime and set some values to production -# TODO: Get bootNodes, invulnerables, and session keys https://github.com/paritytech/devops/issues/2725 -cat chain-spec-plain.json | jq --rawfile code rt-hex.txt '.genesis.runtime.system.code = ("0x" + $code)' \ +# Related issue for bootNodes, invulnerables, and session keys: https://github.com/paritytech/devops/issues/2725 +cat chain-spec-plain.json | jq --rawfile code rt-hex.txt '.genesis.runtimeGenesis.code = ("0x" + $code)' \ | jq '.name = "Westend Coretime"' \ | jq '.id = "coretime-westend"' \ | jq '.chainType = "Live"' \ | jq '.bootNodes = [ - "/dns/westend-coretime-collator-0.parity-testnet.parity.io/tcp/30333/p2p/12D3KooWP93Dzk8T7GWxyWw9jhLcz8Pksokk3R9vL2eEH337bNkT", - "/dns/westend-coretime-collator-1.parity-testnet.parity.io/tcp/30333/p2p/12D3KooWMh2imeAzsZKGQgm2cv6Uoep3GBYtwGfujt1bs5YfVzkH", - "/dns/westend-coretime-collator-2.parity-testnet.parity.io/tcp/30333/p2p/12D3KooWAys2hVpF7AN8hYGnu1T6XYFRGKeBFqD8q5LUcvWXRLg8", - "/dns/westend-coretime-collator-3.parity-testnet.parity.io/tcp/30333/p2p/12D3KooWSGgmiRryoi7A3qAmeYWgmVeGQkk66PrhDjJ6ZPP555as", - "/dns/westend-coretime-connect-0.polkadot.io/tcp/443/wss/p2p/12D3KooWP93Dzk8T7GWxyWw9jhLcz8Pksokk3R9vL2eEH337bNkT", - "/dns/westend-coretime-connect-1.polkadot.io/tcp/443/wss/p2p/12D3KooWMh2imeAzsZKGQgm2cv6Uoep3GBYtwGfujt1bs5YfVzkH", - "/dns/westend-coretime-connect-2.polkadot.io/tcp/443/wss/p2p/12D3KooWAys2hVpF7AN8hYGnu1T6XYFRGKeBFqD8q5LUcvWXRLg8", - "/dns/westend-coretime-connect-3.polkadot.io/tcp/443/wss/p2p/12D3KooWSGgmiRryoi7A3qAmeYWgmVeGQkk66PrhDjJ6ZPP555as", + "/dns/westend-coretime-collator-0.parity-testnet.parity.io/tcp/30333/p2p/12D3KooWP93Dzk8T7GWxyWw9jhLcz8Pksokk3R9vL2eEH337bNkT", + "/dns/westend-coretime-collator-1.parity-testnet.parity.io/tcp/30333/p2p/12D3KooWMh2imeAzsZKGQgm2cv6Uoep3GBYtwGfujt1bs5YfVzkH", + "/dns/westend-coretime-collator-2.parity-testnet.parity.io/tcp/30333/p2p/12D3KooWAys2hVpF7AN8hYGnu1T6XYFRGKeBFqD8q5LUcvWXRLg8", + "/dns/westend-coretime-collator-3.parity-testnet.parity.io/tcp/30333/p2p/12D3KooWSGgmiRryoi7A3qAmeYWgmVeGQkk66PrhDjJ6ZPP555as", + "/dns/westend-coretime-connect-0.polkadot.io/tcp/443/wss/p2p/12D3KooWP93Dzk8T7GWxyWw9jhLcz8Pksokk3R9vL2eEH337bNkT", + "/dns/westend-coretime-connect-1.polkadot.io/tcp/443/wss/p2p/12D3KooWMh2imeAzsZKGQgm2cv6Uoep3GBYtwGfujt1bs5YfVzkH", + "/dns/westend-coretime-connect-2.polkadot.io/tcp/443/wss/p2p/12D3KooWAys2hVpF7AN8hYGnu1T6XYFRGKeBFqD8q5LUcvWXRLg8", + "/dns/westend-coretime-connect-3.polkadot.io/tcp/443/wss/p2p/12D3KooWSGgmiRryoi7A3qAmeYWgmVeGQkk66PrhDjJ6ZPP555as", ]' \ | jq '.relay_chain = "westend"' \ | jq --argjson para_id $para_id '.para_id = $para_id' \ - | jq --argjson para_id $para_id '.genesis.runtime.parachainInfo.parachainId = $para_id' \ - | jq '.genesis.runtime.balances.balances = []' \ - | jq '.genesis.runtime.collatorSelection.invulnerables = [ + | jq --argjson para_id $para_id '.genesis.runtimeGenesis.patch.parachainInfo.parachainId = $para_id' \ + | jq '.genesis.runtimeGenesis.patch.balances.balances = []' \ + | jq '.genesis.runtimeGenesis.patch.collatorSelection.invulnerables = [ + "5GKXTtB7RG3mLJ2kT4AkDXoxvKCFDVUdwyRmeMEbX3gBwcGi", + "5DknBCD1h49nc8eqnm6XtHz3bMQm5hfMuGYcLenRfCmpnBJG", + "5D52g9Mt9jQnZn6hwYhv649QYqGwhjygxkpb6rm3FYzYHEs3", + "5Egx2B41PYj8uvuhkNJeucA54h6Xmi7ZH9wqrZLwj3CuvQKA" + ]' \ + | jq '.genesis.runtimeGenesis.patch.session.keys = [ + [ + "5GKXTtB7RG3mLJ2kT4AkDXoxvKCFDVUdwyRmeMEbX3gBwcGi", "5GKXTtB7RG3mLJ2kT4AkDXoxvKCFDVUdwyRmeMEbX3gBwcGi", + { + "aura": "0xbc3ea120d2991b75447b0b53cd8623970a0f6d98fa2701036c74d94e6b79252c" + } + ], + [ + "5DknBCD1h49nc8eqnm6XtHz3bMQm5hfMuGYcLenRfCmpnBJG", "5DknBCD1h49nc8eqnm6XtHz3bMQm5hfMuGYcLenRfCmpnBJG", + { + "aura": "0x4acc970c28713ec93bf925352d3023418fdf89933227e1e2fdae8481103dfe28" + } + ], + [ "5D52g9Mt9jQnZn6hwYhv649QYqGwhjygxkpb6rm3FYzYHEs3", - "5Egx2B41PYj8uvuhkNJeucA54h6Xmi7ZH9wqrZLwj3CuvQKA" - ]' \ - | jq '.genesis.runtime.session.keys = [ - [ - "5GKXTtB7RG3mLJ2kT4AkDXoxvKCFDVUdwyRmeMEbX3gBwcGi", - "5GKXTtB7RG3mLJ2kT4AkDXoxvKCFDVUdwyRmeMEbX3gBwcGi", - { - "aura": "0xbc3ea120d2991b75447b0b53cd8623970a0f6d98fa2701036c74d94e6b79252c" - } - ], - [ - "5DknBCD1h49nc8eqnm6XtHz3bMQm5hfMuGYcLenRfCmpnBJG", - "5DknBCD1h49nc8eqnm6XtHz3bMQm5hfMuGYcLenRfCmpnBJG", - { - "aura": "0x4acc970c28713ec93bf925352d3023418fdf89933227e1e2fdae8481103dfe28" - } - ], - [ - "5D52g9Mt9jQnZn6hwYhv649QYqGwhjygxkpb6rm3FYzYHEs3", - "5D52g9Mt9jQnZn6hwYhv649QYqGwhjygxkpb6rm3FYzYHEs3", - { - "aura": "0x2c7b95155708c10616b6f1a77a84f3d92c9a0272609ed24dbb7e6bdb81b53e76" - } - ], - [ - "5Egx2B41PYj8uvuhkNJeucA54h6Xmi7ZH9wqrZLwj3CuvQKA", - "5Egx2B41PYj8uvuhkNJeucA54h6Xmi7ZH9wqrZLwj3CuvQKA", - { - "aura": "0x741cfb39ec61bc76824ccec62d61670a80a890e0e21d58817f84040d3ec54474" - } - ] + "5D52g9Mt9jQnZn6hwYhv649QYqGwhjygxkpb6rm3FYzYHEs3", + { + "aura": "0x2c7b95155708c10616b6f1a77a84f3d92c9a0272609ed24dbb7e6bdb81b53e76" + } + ], + [ + "5Egx2B41PYj8uvuhkNJeucA54h6Xmi7ZH9wqrZLwj3CuvQKA", + "5Egx2B41PYj8uvuhkNJeucA54h6Xmi7ZH9wqrZLwj3CuvQKA", + { + "aura": "0x741cfb39ec61bc76824ccec62d61670a80a890e0e21d58817f84040d3ec54474" + } + ] ]' \ > edited-chain-spec-plain.json # build a raw spec $binary build-spec --chain edited-chain-spec-plain.json --raw > chain-spec-raw.json cp edited-chain-spec-plain.json coretime-westend-spec.json -cp chain-spec-raw.json ./parachains/chain-specs/coretime-westend.json +cp chain-spec-raw.json ./cumulus/parachains/chain-specs/coretime-westend.json cp chain-spec-raw.json coretime-westend-spec-raw.json # build genesis data @@ -100,3 +100,9 @@ $binary export-genesis-state --chain chain-spec-raw.json > coretime-westend-gene # build genesis wasm $binary export-genesis-wasm --chain chain-spec-raw.json > coretime-westend-wasm + +# cleanup +rm -f rt-hex.txt +rm -f chain-spec-plain.json +rm -f chain-spec-raw.json +rm -f edited-chain-spec-plain.json -- GitLab From eac13502e48762b8e9d378c934d2f96e949cfb37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=B3nal=20Murray?= Date: Thu, 30 Nov 2023 16:54:05 +0000 Subject: [PATCH 102/102] Regenerate coretime-rococo live chainspec --- cumulus/parachains/chain-specs/coretime-rococo.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cumulus/parachains/chain-specs/coretime-rococo.json b/cumulus/parachains/chain-specs/coretime-rococo.json index 88fd0ef8c96..39506095bfe 100644 --- a/cumulus/parachains/chain-specs/coretime-rococo.json +++ b/cumulus/parachains/chain-specs/coretime-rococo.json @@ -25,7 +25,7 @@ "0x15464cac3378d46f113cd5b7a4d71c844e7b9012096b41c4eb3aaf947f6ea429": "0x0100", "0x15464cac3378d46f113cd5b7a4d71c845579297f4dfb9609e7e4c2ebab9ce40a": "0x0802f40601439cb3765ef8e2a0a5770a78fdda8ea3675f0d4262ceac46fe9b8a38b25ca9a71a8570a05814e75eee9eab0757d2c98e91b24c1fa2e3eb75f7b26d4b", "0x15464cac3378d46f113cd5b7a4d71c84579f5a43435b04a98d64da0cefe18505": "0x50cd2d03000000000000000000000000", - "0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96": "0x000000000000", + "0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96": "0x00000000829e74677a0a0600", "0x26aa394eea5630e07c48ae0c9558cef74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", "0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01", "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", @@ -35,7 +35,7 @@ "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9d440d8395438d7269bad990f83715c2002f40601439cb3765ef8e2a0a5770a78fdda8ea3675f0d4262ceac46fe9b8a38": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x59933c636f726574696d652d726f636f636f", "0x3a63": "0x", - "0x3a636f6465": "0x52bc537646db8e0528b52ffd0058ac2904ce92052c125010284d291ddb022e54a28fd8ab325e0784a949212054d1b6242e0b79a46806227604ec7b0c1dbfb6676f0000003034f982f90160a1b3b957ebe220516b69f8bf7c0b5ff1ff2664efbdf7de5b4a99640a0513b610d510fe4970cacb75ac651477d3087e0f019b892f1035970f137986a5ccf30c8bec471edf3e80e7d99539df6111a36f3702bb89f376b19b346f1feab008a769fe4950fe2743cd3fcd4ac9a822b45dd49188afb90c39e0d79cc322dcae117c59ef18fbca71ee34393bd21fa94bcddf9cc322d59dfafb389c7784fd74ce8efe9c6b76e47691f09c8fdcae5184e77cd49cdb3586f09c3bcd69b71b05fbe99ae5e7ec98f4d43f096e965fb3fc1c2aa13fab8d9a3f9d5a6e97bcb45dd2373969f8ba4eab7d5bf9d28e2078e91fcbeed528829f563a8748ea4bfa6df9632d977c2cd5e60322cfae9c9940943fbafe0a987775533b906e926798c041f89d1aec262172cbc73f44762925f2cc4a9d1fb96717a99e6756e43c3bd84d7208bfc6a167671f7ca17c838f9b3eee26c9f2d93f1677133f3b7753fbc8fd2791909c41c541f83fc9e1a43e5dfa0c8bc8cb3208491faa76f1b74fcbed9af23b6ce7905e6e9753735884b66bca7001b16fa796687cfcdd2ebb2fc7a444f2b1b30fb6a3281d149f7bc4a41432a74b29654f776a39a7f79c734a9fb2dbb9efdb4ad24ebda5f71ddbe7857209c5c73e46fff68f31103fbe40e4764d191a2141269359f9d94dd3d9693749ae5ded4e3d2dd8aef60188e3d0b74ba73e72dffe197d121cea266e177bbb5137c96f4feaa65964524b85c74f89712f9d7b795b49a453974eaf94fc79a9bca3746af6d117ca9f7bc4a6944e7cfcec6314bffde3ba6944ea9182287d04bf8588d29548879a974adbb3b0416622d2c7e9dcae51fe74f66fda0ac4e9ec1c1ea1ed629f976b17bb537f0d4a4b1f642252a49f8fda9e8a10eb9ba0b4f3432a1aa8e7a9802b262245ca3e6a8397decea1122a93bd74a796211251f6d2c16ee26fe71089943d5b6e173bfbe80b253ef788b56c2ebe8f3908491f59bbf8b95dec1c16a1ed62776a4efab83fee8fa5449e59a1fa91fbea6237f1cc0ad557e7ba896756645f1dec26f9d5b987f06b1cfaea1f8b7d8cfed5b99ba88fe0b373dd349d9dbb493a3beda67676b19bf8d93944d23ecaa7ce2112eaed4ecd3eea85f2e71e3129a5958fa50f22cfcad87929fbe91f4b1f449e95b1f352f6d33f163bfb18a5ecdb3fb61205118a9d7f94b21fd9dbfb79566688972fbdc32452f6f38e52f6ec1f874ac4a73e2d15faf446c9aa9fce768c3d3b3391917a0b89f7f446b17efa9017f22357fdc8deee34d9f24fcb1c84fd93205b898208c5ce3f4ad98fecedfd3c2b33c4cb97de611229fb7947297bf68f4325e2539f960a7d7aa364d54f673bc69e9d99c848bd85c47b7aa3583f9defbc901fb9ea47f676a7c9967f5ae620ec5f836ca512a274f9cc16b0cb30ca7f3a8751e2cf9bd42ee94eedd44eedd44ecd96dbc5ce3efa4249d9738fd8947de7937444e9dc2e76063f1e224a67e7ee9621e1906184d7e3ca9de3c271b3b8575c2dae1377ceb573b1b8772e14368c4be7e2b951dc276e99bbe692b152380bd78a15c3feb17d2c1a96089b841d63cdb067583f360d5b8355c35e6173b054582b6c1d6b84b5c10e6199b055d829ac16d68e7761ddd8375609076497b0331bc7e5b0705c0d5b8645c28261c35831b68dc5c1c260f3f817760cdfe37e5c8ebbe05dfc079fc116e130f81bde8203e1315821dc8b656383b06bec11568dcbe069b80f0e8537e14458392c1c360647637b70262c0f76060bc6d7b068ac17cb82cfb9324b83ed6281b0676c1abbc7565933360b1bc8d37810f6051e45f03082c70f3c86e021040f353c7ce04186c7191e3df030c343061e34f000c303051e5696de587263a98da53496a6585a63498d253696fc2c55b1f4c4529e253e4b5a2c8d60898a253d4b562c6db1c4c5929ca53a4b7696eeb4e8b4ceb49e6855b1d467298ca53296be587262498a252f9254484a21894b120a492d24b190d42569852417925e48c221e986161cad3fad37926c480a9354431298241a9266489221298624185a6c248d49caa125472b8e2431492724999044955442d296242d495992b0245d49b292246b55b5c86895d1daa2f5456b8c96172d3ead2e5a7a5a5cb446d072a285a7c5446b89569c9614ad265a49b4dcb4a268f1d032d39aa125438b86560c2d145a30b45468add0e2d202d34aa1c5426b4bab849616c9463221cbb4b0b4ae20056a6541aa02c90ed21ca428908e402a83f405c90b920b485447641ca18104e8a88ca32f8ebc38eae248cf919da33a47501cc9397ae2c889a32b8e8a386a73e4e6e88823238e90385263c4c7a80c23338cc83042c3280d233f4667188d613402a32f8cbc30eac2480f1211466f8c66466e8ce0180d61d40352123b8a285a63c70f3bceecc861479a1d588ab0d8e1c30e1c765cd9616547961d6c76ac29e2532446519fa2318ac8d801445116455a145d51f4c50e238aaa283253d443119aa23345648a6a28025314a68887221b8ac414d15054a6d503d11f222688d8206a82a80da225c029402a88a2200282c807a21f88d21041c159d9aa88a420a282a88a6f097008d1cd5013437586e4686d0c4d211ae189199ac3b101a6117a415b63280a0f076f8c97032884a686d82674432c424462c88a23363630a2095b0d9b0d150ad105d617b1cb16e6c80d9105d6131d9fce0d211a846610da414806a11a84c220fd70abb8530c491164e588cda5424866bf0097b03768720c6dd1a1d17d71ff884d7871ba1cc01fba31ac325a1aa21022104e6214086899203e21aa1183687911a1108710e988735a59b44e68510d5561e4c327a7c5a6ea20aed091d1a5d1e9e9c0e8d4e8d8e8f6b45a38f2c3e2212c033c23fe009ad1b060dde02dc1f281d5030b4d0b0cd6195b86a546d746d7c551153c8238c273144537c6f6856826e388447054ab22be38435aacb6ac8208ff848090a6a83e7c4d885fba11f0d8611b4254a12ba333434c6107111d17ac26587eba3a4760d43047618432301008081c0198a70651d554215640acd2805a804408b920b211d7806ac035960c900d8f35229c221c8a6e402aa12887cf09ab82111b1f134b590c3de1437c3ad8399e13b78e0ba101b25d884a8041886f86a010679e0d4374bc323afa84471cf50991086ac3e80c7843e8a682d15146874577876543d826c80d9613476f8466745bb0e4b4f274b38e4ca743b74357a6eba123a2e3a15bd399e9ce0889e9a0e89c00b358eae27bc2888b4ecec6665b53d354331f144b677c517c4a747e5a62b4c2f8ec541c3a2d78a0f9e07c55b494e8d66821c1e3842230b8383c263838bc2638377850f130e18907b837908c00dd20b1914d8871bc1bee10434ef02861288f2787c80d0f365b12dc154e468486e8ccd686d3c26de1b270257058b81338138872201a438403910e4437109921e2a15b8193a3b3d2c93a153a2ddd0b9d0bdd97ae4bd742e7a563a1c3d295c005ea4ee0b0e8a838409d095d0a5d960e85ee0a37022e0b4e0b0e0f57d56de1e6e860e8b8702c702d705d362436373b6ad80166070d3b66d821c38e1876c0b0e3851d2eecf8b2c3cb8e1676b0b0a3cb8e1576a8b023851d5c76a0b0e3841d26eca0da51c2d1107587151aa4226a0fad222a99a335b43fda1b35898ac410152c3320101f0f1a1b3b86108fd0dc60e1d0f261e80f1212457bea0f758c1627a4a2f280b4e648895ac326e6a80d110596174b7bba3e4773ba2742235a70442e62124869587b8e9258120369c68a41bb62d54607e84383248306c6f6c2ca07b0cc119c1d6ebe3a466bacbc58e9e9e6a867343c5f0fe20b5a18ac12ac0c5d18ab2eac0beec4121847696c2d687742362c1982d808e96c441cc9b1e170444418454563e7f8a61079f8025531424c3815ac2c9d18a0184b66098d0a84fda29db123b05e68683e3c7605961824375d1ead076dcf77e69be35b74407472b0d2409a63e94fb5a1cba27b63c58668262462c90c242b2c2cad395d1c1d1c7e867da396b17aea0d968b8f4ee74538c7680bd0062437ba335c0f1215fec4d19a9a83ab3952a3058578820e306c14ce8675850711dd1f1d61209df0498124474b8b0e8f8806e90da43882d6f0293c0aa43f4870f81a394742219f905de40a520519854c4172a9229da8009405e4104ee4991044100229149068641111f00002461ee0800e9430208902907090800d82b8641d29070893050110000554b63a9f7c962c2b5dcfa7294d36b04484264f212c59f2c9090294a7254bbc204184e2ac849400e189931136d01282c31d70c20128519ea49a3c49f9608a93294f509e8ef8107af3c192281c8082e4c993280890fae0e9c9932808a040682644c8cd93274d3e78f2a40902920841aa03509e9e20c14f4f1c5812456a8954081d70f2f40126a1363ce5899326524f202c797ae2c00fa123380a07a038590202294f23442d7122c24b4179f200089a74e04246f0d30750a24059d264891311fee90328511a20056584281f7cf04a42458010e58327107808b1e1292078825a32650a089e924089e264ca942708582122f8034e4478294f5052a24c4089155ac34f524d4070f2a40995254f233c8de0000f4078ea40079a784081d0103c05ea83a7103e50c353a4a03c49790a018a131712028a130eb48482e00f9c4c81e2448a14094f4b40f04404119a2c91f204c2132723bca03e88f2e4952404044f41124ac34d962409fdc01e58d244aa09084da49e181024e443089c3c69e244ca09142744426818ea83284f36b0e4496a840f9e487812123ac352a2200014ea81a73c39917222254a08522334d1216486a1447122d544ca08202c918af264ca1227227c1329233c11cba7271b68220565040e2c91fae0498a1310a03859b2e4c8391f36314e9cf1e539f6f14c267b199b47da36c5368514416ef468db96b6a3a3a3a5664a2733adcdd5eb6eae75de6e5a2ba5b4d23a679d3da6e4ca5d6badb567d35a99a5949565ad953295b579ab5dbb2b4bae952bd7c94c274fcabd6acadc64eedaf4e36653ae9b411ce7ad26d7f64129a51ea59e365beb28ad1ad7b4b925d3deba5266ee898403ae5c65d7a61bd74dca5aebb7d5cabce29899b943ae2bad93723b982b0dbbd5b467ad746b4a67fd41bb27c7f1ec9e3ce76466e68ebbf29c2c5956ee669647688fa6dd7552592733cfeed9dc93d6d9dc5c79dcec82384dd328e5ba2b9ddd6caedba4ccb229777750a593e3b856dea8dc6a9d935639eb9474d24a299dcd7595b956e6eec9b5ced975cc1cc7711ce5e65cade66a3567775d37c7cdc971944e8e52ae5599bb523a6badccdcad565dadddcc757b759bdc362953ae398ea393724ca79c95d6ca711cc74c6b15eadadd46ba296d1fddd407379b99290752ae6be7ba6b0daa5514694f66e69a7694d6e6b848029899b7399967d3de36e6dedaebb992b5765dc7ea58dd751cc771b36577d7aceeba6e5e95952957bbe3bbd19eb4ebae5c392911408d8c8c8c36664ec9f33cefe571c89495b829ed2999c390b93b147984f3a5d6ac51cadc892c593b9c983b496765d5a6cc95d9636eeec1dd715d37e8664abb690d3bde7836ab6b3a35a0dc52abb35988990fc01fe56eca5c73cdd11fcd6d949bdcec66ad73564ae9b6d50e3b6c663600ede6dbdd5c6beda6dd5d6b9d9329f3ec666ed9b2d6da7532d755b7ed152d00f5922a91b9d1961cdd5a72d3ca4d996be5ada5ec5abbf6649e5232d7cc71de5cd9c9f5a45b37476750d3aae99094cec9511e3b86b89eb256c97537e7a494aeba694f4a69cf9e3d9b524929ed1d6148b749b9b96d73fad0d0d0505010d3c9dd94674be6e6e6ba6ba59456e6280d990019d049677773d3666696dcec51af9b07a5bdd44de7ec2dec195229b9b92b53ca943677774d59dc5472adb5caeea694ce6edadd73cee626c7751c37396e72b30ea994d6228ea394d25a376eabcd6a02000645ac597401008aa694b26edbc6aab4d6add60108a05a204195406e546e92b571b5d255d7da5ca552d25a7bab752584a393a3756e9456e6aa553ae7ec269d9332576b17d6dab46977776b3db74abb3233576bdf32ae1953073708a444f1c09307b48f2d78a2f2f46409094d3cc043892de84094274b3a00c549073a10e5c991e842243c8100c5c912284e9a84f001073810e55600c293942710a44459d28481009e9c48919a60004f9e38811212801f415c405c4440887e5030c1044244109e3809e18325524f4668c2812710982e68522221ca07a4969a301080eb1080054b04f004d5e4c9069674008a9310a63409c105d08349aa899427284f1d902201c802789a32e5498a081e88f2c112294f54a27cf02465499329207cf0b4c402a8260c0420c2074f53862471c009012cc000030180f0b4248a94082090f2410f294da4a6fc10a71cb5580051a2484182faa0c9069e3c8922650257932729482078825a2245c213942524a9a70e1ce9982235c509094f9ad4074da6406922456a8994130f78208a8b8805e084034f5244b842529a3c3df9a0258200e54904119a2c79ea40132951a4a648b6c0034bfcf42485034ba444916af24194274f9a20b1054f1e70220565042937030e488da04405cad314620b964089e2648a94272a4b48780a6189141427524458f2c114271e582245c2531215284fd30582d13c55a75a8b6d5392a7a6625353b1183735b5cd903535456733e129ca2426a7a67a6a3289c9a958339992b1a9a9c984a762302d56bb6f2a462793988c4dc526932919934ca6a6a6a6a6a6a662318d494c4ec9a9a966c2318f494c4e49263c2539263c3555631b139e9a8ac5289329c94c62528b552631c94c623216ebc98463b1588c32e158ac99c4644c32e19864a200ba4732b3f4c094261c4a3c1fe54349f738af5d8e9eb7cf1a16891a4325d3e5ad6191cf3f4d72afa264950cbdf3d0bb4e955ded5a6bf5d9790634f0b3f23f0e8f787ee461cb8b989feeb5422f5d7e3a07820e721d9291305c81522ab158ad254722b696944299260c95c2d02aad6aa8e49dd28aa5a3d5526a3bad96106d7991b7582228e5108ff98747ab65c3a0d90a7d8787fe85b675a69b5a5efd13754021b9e7425e476804c93daf6192e99e7f426037a89414865290804b0e8a8e84e59c834ba083e21da358a155ba5153df72694710b4f2935a2d776a25cb0f1669f94cb2fce0d7afe5b515ba9187d26ad68874ce9de6911de523858e648f8e2cbfd10e5b636857f5223bd96857f5ce86d68eb00fb223ec85ec085bd91136ffcc3f5fbdc6d04d6de7ab4f36baa9f3ea9f067a96fffbbcdb42321dcaa96fce2107da996e0abdfa1786a177e8d2aebca4f132f352c78b1e2f7ef8f3a8fce5a0bbe717e61ef835f4ef03c3d09dfa03b7ce57def9cab536ddb4f2eadf6ab55a791e4b044129483cef73ce3dcf73ee8e1f68596305e3597ef159ab55e8d2c32bcfb4abbabbf548a832e57efd5e99bbb5d6f24b725eeb793673f35f8356a2d1fcaba094eed45ea884c3223c4ba1cc33bdbc5a9b7655ef9001dd7b77fc406be0568645409f22e1a5bb95bec55f30f729580e5ffac85ed665334f195f642fbf59b6f8cb9dbb23fd5c8b92ef9c7328a7b49d7b76fa674712be730e19e0face9ddaf3ec1c2b98afaeb5e93aedaa5e47f0ab4cf3b57ad79169aa54f375e8ab8beefcd5e519af0eb606ee95861e58779fa107eeb0eb7ead6bb3e71e5333d6ea1f658c463fd9b9c4f9e9143c12fb4d8afabc23921126850ae7da95a2aef9487f9cfa3a9210c5e339e750496dce4083755e2adcdd6c75669762a2785431ede2190e3fbd6768c405e6470c00f82241171f5c7a50dd9f2eb3d89f2e65fed3613c7e3a094b3f5d4ae9a78b90f4d39fb47e7a08483f1d84a39fcec4e8a76360c74fa740d14ff780e8a77730f4d317a0e3a77320f4d31310f4d39dc49f6e00d64fcf60f5d32f087fba10f0a703f97ebacbfbe93eba9feedc4f4fda7eba91f6d387ea4f17e94f07e74fe78cf4cfdb4a22bf5d7e3be5d94be71922f197fe55d72c57d7c6a98dedd32bbb9d61121795fad2394cd2557d6c939c982648cfb319d52731c0593ef97453525252d24c5a4af26f824949eed4a2b8b4b4e49f0445bbb4e41d165962d915cbaefe78629e3a92b373b2009bc42357aee4df0a7c7e3a921dfb5bce4c44c8b31ca90717b1e5427e942d776a6622167cfbe781483db8889a0bf9b19f732f4cd2f2b13f94dffe71688400cf1c848bb56b7634127bcdc65eda96b3ec88e4ed9f172ae9d79cf323dae56eeca5e5ec285d7ae8acd987d32a17d9802e6c40750d04c3222b67597ed1f27f1ca0aae44a4a4a4a558987f3507225251e4a4a49bef2a4d5ea936390ec28bfe573c957beb412f2493eb6bc5d0b8d4c6fc94ff295d191d26af6515aad562babd4abdb4ab2c3957c872b8dad7484a4e35b7d4ab5cb4a49e95352b21fa8e44ab795c4c83f37f2cfbf242b857e9223b58634352ce79001f235ef3b72961f39cb3f96fd3cc972ff79442b579a12fbd58647bed2caf28745be24f23577ea24cb2fbd6b5924779a4896ffc86e76da45ddc86a69da457d87ad5cec087bcf8eb01f3535302e7296175dee4fbba8b3ae14d32e4a649988f3c70dcf86e7a9737f862c13b17fd4d4686a9efa66a79b2a171d9689287fac5d9eba96a69b584efd9b7cba2928c8f33c4cf2e33d3edde439fdba5b8ee71d16f1bce3749374511445e7d0a945ff3803dd9ce028c7bce8332c22bab4fc41965f864a985ebc1da75dd4bfae939dd3ced9fa177b4d5aa7fefc630c7461f3419e675da8643fe479d6450e0b72bee979c6421716d86001cf98577a9eb590e55ba8f349cfb316d4fc27046efef1f7811c7277843de7d28ee24bb796ca5f1694f6c2ac4f792f6e0c38cebf0fb4965fd252d738d9f907825dc741fd34db92ce1ffb5612ce353fc2cd3e4f5dba26ef087be9b197611169a5faa56fa112a6cf59fe39eb562eedfa9cfab785497efc17fad7a00c9148e75c86483497a14bed72bbe495ea077de400854556fe71c8bae3d4b35cb323f79a4b1b5a294842e71c899087ceddc4dd510a12ce831c89e89c8777d45ce872bb42e76e0aba6394fcd0b93b72bb34175916bc51539a0d2dffca46c9ff3e0f2d3ff87d1e2671fd775b493cefdcbb934fbba8778e3472809eba07a69bba2bc5205d40d4fc0217b880281f6a737eea1b1213118a73fe71f66939484c44e994bb72b323882f25be76c950f90bd66ac4447183ec3545f9bc9901ceab0a0860b1970f2f41c86b8b90171ae9954b37cd3edd241fccf38fd3cfb79ca7de737a4c3e3d5a4e6bd06394639eba2c733bce95635a83ebd4917a7011650ccf3f724f9d76534b733254feb2ce2ded7a205aef974f9d5b03ebd4a535921548af16898148af2192a09f4e430fae5b9fa1076ebdc30e7a5c713249976107f77293493a871dd8cb9349ba47634a1d803f524c37753e6f8f144429e6a93327bd73793b9796f3a4d39cfcde2741cf5670da9527db41e7b08877c988ad69ce71ee795c874a5cef49f72ce89add34cd3d5bafe6f9073a17bae7d3720edacf9d26f739edd83fcb1f56675fd9514af577f58f3f06a50dbdb3ad24d33b9f5d06ec26a9f31dab7f2e2f19d1a7adfe7108de11f6a0275a2a7f89cead817861532ce7c6c073183706d34525ae776acfb24bfb3968db45cb2f964503fa276d7847fad241cb79b6864634973eade79fe5dc697a9c53779a1d7f5ba97ef9d53b2c525db3a3545777eada838b28c53cff7429e6b9c754c7c0d64ed8218dab9b3030e58c9fc9626fb56915b23ccbb6e7590a7c9e7946f1389206c47e9ea550e7d9c5af376f3bd2cd52f96b03b7edc2369faae00e1cd96bdbf8a3b80cb8fe93a014334af5cf243f7e3a19ce9dba2d8745aa9b3feffa097bea6d394be52f0ee4a8fca5b97647aa0177619c4f6dce8d4153404ffd6bb02d3b67f9c5a192f9edf446cdaaaaaaaa1f633f7db3dc188c3cbb81eaa5fac574134f254c3faf14d3376a9bea586ded8c8ffbe3fe3e066313e9e32622cfb8a8f9fa3c4301cf73d0379d7d8c5ce7dbbf6965f48eb1a73eed28679d162266d04dec4932ce0c8b8846dd34babe7d1422a49bfadb33e8212e93c964af76a71ee2af760eba69014c643e2b496cf3ed43dd24bfc55c8c4c9e43239ce7d9bf09d23414ac632aa8854562d840cd003d845f2870d164addc3d56ec2c26c29739c8f4e62214067114e2d419f8f976216c7cfb05dd24e51be0b94edd6347d2cbddf981af0162bb589f9c80c8a102624fe995320145f044c0921987b9bd41f60e17107b28be5153cf3eb64bbe328913ec3ccf4e50434fa0fa493f192e20f6dcae917eecb5fbcdb0486d50ab6ee911f91ad74d2d23f235d72ebff46ae5b30f7aa1c4315f03a0a4edb182946ce4e309804fff63f59d4eabd63ebd65a47dfad45c56879a9a73ddd4af81efd44e1d9352caf97802e2c73a610f5d404c5eae5dd4a97fac05444d3d65f9f46ee0e39e734e6fa7744e3a9f3e0eb41ffb1885fcf4ef8edc4b295d3abb097a8a88fd63d24f13ea24f9e8a61108906ea23eddbb290c7f74fd1cc2cd4429e5ba09aa9d6b9774e9dc4368334d67a777e49e6710b78b7da4cfddc43313ca3c3b65e77a08bfd8396c23ed944e17d24750b529c14f097ca4954f22219310251551ce204a298308e4932f88abe75909735e3aafce3c756d08c791c95eecb2ff9cfd63d16ed29c1dcbb37fcc4456fe7d31d05796390878c72faaffc877c7fecfa583769c7a50fe6a9c32f59f53f79c9948e72b0eb2bae3e7d343ef2c7390f08ea04f7e69a3b6aaaaaa404f1db463cc887cea4efd597ecf42d14b45bee648fa359f6112ea7dc7d8b7f37f2eed0c8d68bef2cfb690bc0c8f80ce1c44bad3746ad046c9aae77c655be191cdbb3bcaefdcb3a37ccf3fcd8ef2350f9d864aa883eed41f6340e459096d9ebae61f7f0d727824f4ef8ef4bfd954b85ff9eaca10097dcdbf8fc3d51d63bf72d052e11ef4cf8ef23f672602de11f427449e39c8e79f3bcdcf4eff24f8d9e91cae6ed47ccd8b681eda514b425d8b23bbf29fe7ec323c22ab1ebccc41c6ef46c9aaffbc3a871cf07f971948e7d3b3fc9d952ee320d5373bb6b73b75ac93da95cfe7102d2c77e7cdb514b9e641dab51cf9ca03305d8b09d28dbc02e73944cbd18509f944722d3cfc73766e0ed12244cb0e3f7276a339444bd18515398be54741ceb25ee4b0a20b0bf2e1470e2b72d059ae655e18c7b97861a26fd361f3c2b86b827418e74b1ee4a1b38b738816efc23ceff6efe8c2ae6f3dfc87f7e6470e6b3fbab05a5dbc30cf45871df9e75aa8235dd8d0900b5dd8f4eec23ab79fc3ac7f1736a7c33e6fb90e5174f0c26a75efc2e68529b9e7e274d161a08b17567538ac3a934be030d125b8b0a12127ba3022df365fbab0a12527da885c02876d2ec1852d7573c9619d8f6b824bc785e97022226fe92022badec3f37c49c9f33eafb34447454153dcbaf38a26f7115596ad60734741ace6ec264ed1db88be0a161d1571961554bdae9b9fb81105816251071e056dcdb5c7b2956856a2a3c9fd9840fc9a653fa7204802efc70f1d47dfec98981cd6cec4d415155d77899cbbc009267098e7134c60b78de5d79940cf99aacbe530ebae1f2e8e4524faf5098e827c02a7c061454e011393c33e679280c9297058577ffcf8ac5f77552277f58f1f3f2670d8e6135cd88f1f41d329904002258781aed4f975a62557ea5144813339ecc8995c2e00b80417e6f21e123893c33cefe130f1fa701d3afac8afff5052f21e4b4bde72a51eaee4b02057e2fc87037118cb814821494e81c3584e81f4e13d2870200e2bf21e0ee39cc99594743d89c9931c663d493aecf32497a0d5f21e4b17a674614adec35b4bde7218e82de9b0ea12b8cb61a2bb24007e386cf31f1706801f7e2f0c00beb4e42e874dbf0eeb1cc8854d3081fbb8b0d685b55c870e4fba3024246f5d5892ebd0e12d871179ebc2905a8ee430f03a3193741f4e410f50c8952e0ce9c2905cc941d0afc33cbf1726d4c3afc3be2b02334917720a1ce65d1298493a051736c13541327d2ec185799e0f5dd8907f12f8e7b0ee52e0bb30eff3a40bf31cec1c7498bd1d3093f42487115d0e9849baebc27e1039002eec5ed87509acfbb8b01eeef7c2988c2c70cca9aa618d16a85e768a12be4811071a336899e2a5c5bad3d1e59849babd30bf5e749999a4f3b83c99d897948e3ce9c25a468e7461b1238428a30e9e1dccd039e27514a3e14a162cc0c1020e3c36bc8e1c16748d9849fad185195d9e4c15dcd1f5ec30d6159949fa8ecb4d26f62287cd1b0233492fba30a26b827c6909f2a10b63b98e6b82909796e9421716b472d685c574203307191dfeb061461aafc95af81122071668f803078e9796e92c878937036692cebab0d5e5c914803b66f0ecb0ed0a6126e9e1359a4cecb0be4c98493a7861df35c1f5d2a2b977610620a2cd193fb051859f1e5edd35c15f5a78bc71630837596c89a38c9796f6cd61dc753193f4edc2b4cb9329c81d853c3bac5e6726e9f48a93899d3d36a7983a48d52767f8a17649a376c93234fc5014fd240e222fb74b5a79843f4a563d3b872107690b7290f669c5fc48bf65f82991675b66cf5e9f675bbefcd84dd3dbc3193ecfb6a4e1333eea94cba8f9a176f1a5ed6ae7304a567db51c07698fc9679757449ec962a0cf3191eaed1d13e16faf96b720b05ddcaed1e8a5cbe7990e6f7ea85dd2a995cf964a39db92a54f77f76c33a7cfe973cee9d4c7c48096187ee4fae7f34c8becbd9bdaa98f1188f7922c5d9e6758f6fcc8fae9143ccfb0b0f98fc53e6837c57e6c97cece49a0e46d25a12f9dbe7412643299ec9b52e710c948c253a7370a4a3affb8bd749945b2b8b6ed734a19475f75ed8e20b7376564e4ded6cf45f0febb50bc71eaa9f7d8fe44baf1f542f1dae91d3de7bcf77a987d7dcf3f0ab6f6dee5768df4b53a436f825eadb765055a77deb665059a7f53d27669ddceb31e3a09cfbeefe804f216549d67cfb31e64cf6fbe2f6d97a675dcf6d3373b3e01bfd65a8476b2aef021d99c526a37ea5be79d775844e3a8c8dfa8ddfceb760ec2500ce05cf3ee528e523b52979d7f9c94923a27a594ced1764e4ae95c77cd35d72e5bb394655bb46d8b3ab51c386d2ebf0625ed285925450a14010993e738f6cd8e9c7fd46777a544b11f99eca5849ef339a5c0e79488e05929511b7c7310ea52da7b9d95e2b9949664c977ce236a83971c84d2ee3203a11e1aa9ae5d6a39ce4ab05d4aa197e3e4c6c6acfe4dff6458ad8cf3faa67f5fec3939b673d3cede7cf68d82b1cfa651536e1e95b4f9c7b58b730e8d6cdb76b95ddc9d769c4e45fc275466e547cea3364056aa9e0ad741516fff7cbb9c05478ebb9b8f9c477159ae58792954b4974e65fb29b1dfdc696e5673cef2b31d35ef4649404fa5faa9b790c8599176cdcacd356f4ba539efafce458d536ed6377669a1e4ddec6cee8ed2d93747327f9c127b23fcf442cd0bc5deecd2d7f88692c46ef29fcfce4ded1232c75745ecd00c9ef7209f74f6318a554426d26e7c2c249c73ce1d3b77ce9d7bce6c3d2b761c15f91c27af7f12d41cf4e47f9e0bf9cea5e4fcf3404d4bc2f977599dcb507a11a7dfee7e9c1d39efdcbb63ec3de99d3bcdfe3eafe3b897ded94d6320ed95329036425f76763603691f151073f39281b42b20e6e69981b4771e7756b6204e24625bfecd0679cd26b58b393b5697bed996bc51f2b59b1447267b0a5e73f3d52e288850d57ffc58f9f99f988814214f863dc661b874e6abdd2c5b82bc34a7d2f1e2d24d434ffdc95717f2e3d08f0c8603f895457349258e920b184f1dc62e4ea636c01061031169f4c8642fcde5a7c9680f2ae4700507245e59b6047949a7d2f162cfb2a55f9b5369f092ae592a0d5e30341e4887753099a8cb3a30341e6cae5d98d364a2be5d181a0f349717e69389ba7685f0649acda48f5c87dd28c10932666461a60b2a7ab020f22be6c21c24c28479832788355efc621f8578e032d94b72e9a61f4fbb74d31b3e798238998a3e2223128f3aa5533f5d7ef174d4a86f178a7647cd9f4c20fc7cbd9a8ff36a3e2d9d155eab3e4efd287d567f1203f31b14a6d3e5ab8f21786dbb5078cf570dca01b2ccbede3a6592a8e00e9c3b9260468e99334f06c63ec5aaaaaa02f3eac8c89452d0e18b18291288f9418e4c4a04def3646415dc8123a372802c3312644ca7cb8b7d0cc1d72bbce7d55d19ef79b18fb0af77943eb982916765f6bc947c32b2a22d80c032864cf6e20b639f8212e6062cac0092c95edc956519a9cb5104766aa77728810aeebca9924050175bec10084b55d56be8d17c95eb74e00105ba69e33c4ffd933e5c40843c75d76647771f9b65ea14901550f7a05dd43be8600e71aeb384ebf80762d0c87a9efae83f7baec618b78580490822902065758daf56b19b38677726b221a15efdabf6abcee191ead4ab7441f34f367f14e4b008d720b15dd23bd7ee18fb3a64ab1da5a5227fa4229f52ff9a25375d550f4afaf4f9493dfd34db42c27bfefb5a1f8748363eff5d96158cfd55e334d93c572c2ba83ea97d023e75a77641946ed42ef6a176b1e6da85d27c3a3fbfd84d429ebdb342debd21cd3dce398ce23e898388ed62dfac7310be7c29bd2328d2405f75f631727eb68823379b75d3e6d4b938cec9e926cea98fdc9ca7fe8d49f3123ccfc698f0df1c53abed8048a773cec599b58bfac82da03a7739393200dc6c0ee1ba341375cacd362056e7665c9776517f12eb6d216999eca74fc9640f7547a2a742eb7449c273b8f97a9f546f71c05f39af2ff5606401f829171699deff4d500b05373b725d9e725d6401faa9735fae3c752e866e9a4ffd93b3e55cb56db593a1dae0d5b9fc6ae56fb6d5deaace332e715af542805f9df36c8c95e7d918d923995f7d7ebd53643091ead4b93a73c8e7d4393c73887c51e7f4cc212ba7cef19105e09cfaa779abfa07e6fc07a0f8956d5597af7e7db655af0338df225f9fbb7c55db01e89c1d3f10c56b4eff9b2d79d2d518fb56079eb736a73fbfe580d05bdbed20bc58b8ea4fe7f4fbe53bf57cd06291afefb6b41bc5aa7a325417bc3ac7c20af4da225f9d67e164329977b16c555555fd1c36912e3b8b8474cecf738f292d567be3e293fec99894187cecf2caa4d4569772ab55f3e95badf5d36c92bc81b697eab44894ac7aeada4da2d4caa7dd557cd2392622ef98267ea85dd33926329dc5480ed297dbc54d298198ec5f9d72fae47c6a3e359f9e01a74d9f9acf39bd26b54beb30b45aae419a4bcd5bd4e5f7b7680d9ad7ed26b54bbb94e3202c9fdaa6e26ba74ca459d2291391374a5675e5201c6b29b17c5c9d3211cdd92b139117b4abc6f042e6085601c1a41ee27975033011e7209c5707d24d62bbb8ce9b89731f3d846b266e6c813d64a89938af33326cfc78c1576f3111f9d53b9bd42ecea70b4eed9c4fd7f39cb74b9721e7adadb56dceb3325d9e6765bcfc50bb38d7acfcee26b58bdb6ce520ec1c520ec2f259c66a4f349ffcef9361116fb3a157ff3e6b24f623e8dee6bc393b68c7cd67192e4f394868c4b68776f3ceca6fe7380f2577478eb3fdb9fc26f74d90b30ddecfbf09b2059dc3231ee8de4741ceb67378e40bc1ce65184542962b56641f357e408e39aa7e0ad729f3e584679f12fbee8ee0078e24fcc780f08e24fce7205fd06b68c47bf7dc697211f04279463ce71b05fb71bef7df85e2bc7de4b8ce9da653c73e4995f8584aa43e45ec1f857c25b3e747a3af197453f50bba69e9ab01bebae8b556e719946f1499757c5c877ad0f33d6383d29973d081dbf9cdbdfac655ff4df329e2fc3183dfc870f991f1fc66e4d44d23c7c1e69b1ba09b96e2fce6dc4d3c7ee439dcaeea4e9df4b5ddec482a7eeb37ea269eed50a725cf95d84dd3371fea26eadbe66037b56fce3eb60bc57e3a10f36a46dbd541162d55b6d052a78b9626b6d8f3e2c9a4e5a708c2cb1c3e70bcf1e6c593a99d3b086c17bd2e97749e43b89946f1bd9f673af0790a8e6275da2e44c6f909fee832c090f91ac19796e32d48bb60bbea059f673ae4797a87da2579f6dc235665fff9b835873894c444e4b7833af4f97623337ec6f4f922d276b1740e9a224a36935bfae9493ea946ec1f9e676d6ef8b6e17966c495773dcf8a08028914163f3fc6da683f8ec00213cfce926ac409e77936849f97719e676ace3c90e79910766478c48b42cf473179f6239e9f301f35b5fa51ca8b2d8c6cf851aa8c0d9f173f4aa1e045fd710a16435060449d1fa7b0a9f3ec9c4c4665b2e7aa6797ffb1fcb95d7043f5f5ce4bff5851f2a97fd4567a4729c324d3fb8e70da3c35425d7eb563ac95a4de79eaf5ce8f53624fbd7a14575555d931f65ddb24f1e7eddbaf77be2d8f97e111ff766aa910c92bd549fcdbe7d751b2aacedb42227dfa11e9f34a7dff86cd4bf5d73bb653913f3df6f6a7b5df52dfb3c7aaec373e2252f61e1321e23d3b73015856409dc544788e219a949a939b381c847a489f0be0e4060e57c04fefd8779c7a2afd1d90225f7a37e4891f08f2cc4d0c1fc57a2a9c260bc03fc7fe51134194fec9308ad892e9741c191689a23219eba16c6a1e6d0fcb02483e799ebda5270b4065cffe6de00c8d709e8de3384e6b8e9b92e3b8ea5a49d7ecacc87ccf331dc0fc50d2c7730801a8d66cc112a88939febc40c8b204161ec0a431470f2f76da2e49db9d5abba3bfe61cd720daae3b4acd97def950377ddbb779de1db7cda78bdde4f9f46fb3f23f191e517adaaece37a9f99e7fb259ce95e4ff2cbfab9b808c492f7d7a5237c93b6a5e7dfa37a5d42c7f67b90da4eacba16f12ecc83d735c8368e8a35dd337f7766db79dda517e9464d7acd4946111bef58aed6a70c83fa99bfca7036122f3a78ff764cd8179c89c7c4729fb499d2d15faecd422119f7d4e76bed318d07127a2f4918ea2d8cee9f0e5dbc121274e3d3bcac7dd54ddd2e76ea23ebabeba8f337f9f67399c90430e6d72f033416a47cddb69c880e97de9bc50a253aaaf4c416aa1daa9d790013d5f1c1a93be5ea8e9eda3cfae3994f063d257ffea46df064adbcf2175a7e6e9a3f8d5ab83b200fcd5e795b2008d8422b1e09983489f3e7c933ac7f966801a1cec7cfb7426e279e7345c4075ea3454d23e9d5a21ef4df7a4373d707a3e4107a7cbd088e7f3b3d2bd71ba740d9c6192be5538d7b42df2c579952df2a5695e45f3cd29c079158e029c6f4ee584e19379afca5fe7a74bef7398e65b364713de30637140aceeb9e6d4591ee4f206b966b170ae79b553deab3a3391cdb53be5bd34677107549dd76ae5abb368a236f831f637a4b150bcff1cb448bcff563e4323d285401f2dd493cf410fbd410be5f3d09da6901d631f249dc572d182cee102e465dd11c41fa94c267de54efdb16478839eb7cf333162e0f0e57d3ccf6ef083c398d62a0cb790033fdbfa56b6f585350cc324a1df90e5b53089d78176b17017167b7977cbe6f255c9506de0fddce9eb8569d5b74ebb53f56261690e9be25cbb54fed29cca5fdd9de22e95bfeadd42b5c14b4bec55bdfaa6f577a12210abdefae894c8c14412ea6d7d5eab4b795b5fbd31313fab73d841bd3c99b829adb92d3e2641e419173edfb31d66cfcf8105e8a6eea69e2c9fa2c04b9440e8534346a11b191d79a8856e145ad0bf06a9ec9cfda315e4af430ac0aabc5a1ef44bb440152407bd8ae8482e430f901cbcb0958bd57e9f0c2db0722267d92a2b67799085ad3cc8450b5bb9e81c5a40871fb953135918cb793868612b0763ffb9e75f83d5ca176d90870e631d5d98e8210f5b05060b5df4ebfd12b2556030905f2c0b83b92f7990ad62bd8a7b9525874d5549722127729891c38a1c36e4e285ad3c587990734801d1755c58ecc572a746b230f962dd6a2db0aa1e74ab881e14a6ce1f3dcfc2e8f98fc3229b570bc5fbea9b45e27db581cb4f9761006d20871638f220076de82b5be5c857be8516d01174612b27726622168081cec3612b17720e3dd0e1e1851d39b8b2fc12b25540d7e13c6c151d7ee444b60a0cf423dfec18fb1a5200741db74ae83abc861e1cf9ca8d2c2c741d77aaca0ee7e1a16bd60247beba554067f9c72105c08b458783ceba53de2bc8433be5bd446622f58e429e0cd5cac13be5bd406f0fb22c176d285fd28e47a4734e43098817067a78b7ac1c8d76a19e54df5cf3206726f2dd51c86feedd517afb74a786525d93587478d085c957eb56b91786e4b020e7e19de51cb45874380fdf616146bec36d98630398ffa4968298673a5db414c4bce6f5e987993d4ff112047134a229c4c0e58f0d796ce8630320315cc48011730604ab6d713749f79acbf77ee3f3bc67e3f39acfefe71009ef39409619f5028dec35df5efb6f0556dbaaced956bd485ef3eeb9e710490577e0c83e4472802cb3d7e87459398f0b932f98bd3c4487398f25f14e2579e84a772a09cde6a2139df0d2832c95bf82bc65a9fc053acb4eb19cc891ee14e84441778ae52c0f5d8785c55e4777cbeaa289dae0a14696158c3cfb42f5d2abf3cb9791a5f2178c836161c1a8fc35057ae83a7c878515dd29107422874d0939d1a5f2d7ca872e95bf74dc29a14be52ff06e09ba5836780539e8e1c5c21a79f645f6f24ad197de854a788a97d703229d1f2b9934ff84ebbcc7c43c0782be72ea3c8738f52d94c0ca592ece215858beba5441178de6b11775edd60bb5dd08c45e62bf564ea7440e26653291049ec964b7557de55bfcb572cd47115ebbadba72e923939f4358b74ae8a053e76401e4f52f94008faad72a74d067e801e8ab0b5b39b80ac1a91d31ae4522bcc87ebaa7cdbe7a2df8f9e95e0b7a3ec680a4a0e6a0d350c974cf69c8c108e24b69a5c4dffcf33a342285bc05cfa1e7758cbde4bc8601ddb45d7101159a163c06d8846890e3ba0b3824ba08a083354e28f1a58b394630860446b8d902861a75aef8a28dd7945e8343bea04768dbe6dc36b1298b91fca10cbd81e341ceeccf9aaa4347670c9d33221d309a51053580824d87419c5911afa58ca619606adc18e01528e680620e405fc891faa2092b981063081c5af0ded0689627d0600107ce982a3738e081d3061159e4796d54e6868e3f6c7e2bfa4d5342843602751923041064c881a68a2ab870d3a74e106ba888e23707df706a06d19c13d67001a44318458c208a3d3aec50c4ac8d355fb099c20d37cce8a15345c73ccc2865ae9b33052f95cd2c0e9f6fd3a556230e4cadb56aa19a4cccd5da69a12364a7be76e832371dbf6ddbb691319b4ccc7d03b8e2ab2164828d3172b0a3842c0e9f09fa4c71449e367488b8d386f762c10f1c68681a154141d40135b0424c1565ea160ed9b66ddbb67ef5c0860732aa8354d4ba49e13485c9a6d65a6bad5d261373a0c785d32a521aaa5a97c4706307308810d3c21715c8c3c6171a7c68b3c6163c7c3c3c6af460433412878cb098558e5e2187e88e180ca6e81205519738e8002a0c2113b509fa0da0abc8808c00a8ec9c79610ad91577aa10c20a1a9ab0336be28a166ee494b1462c073b668080b3c4107120515740c18d0e388cc17367cd95d7d85083c703f2087142992eeaf481c10068e46c41a14f163367e028b103521af4636200ac32661a80b112e2062a346b8c4073c51c72d499228a2ebec873841f4dd3344d9bc3cd6b4db0c4d823469f8d93e384223466e0cf93268f18f5490e2366484386134058d942091db4a000c5171a8078d53779f46c676cdbb679e1a73a79f1471c12cd7870a8d9b63f706cdb155f0d211368344dd38490c351383c74d1b591e29e61cd0dac1cf1c96cf8b6cd4a99df3603d40d875a6b7572220dc80192e38f192e2e0071c61b7abe768087404fac81a7ea8e112f336aad1a06424b543d5f9d066551d55039c1a999a2ded194a8dab66ddbab29a24131139b10b5ea62b546d54771a85ea3396ab49fa369e29d32412934215e808776175c41e55a164ccc6f23cd1b2974338e1b56b2480385999f05b429e10c1c4fc461a2cf1b2f746fd890f45b9f6ddb9c6e5b6f6f64e9ba703331103536dd1a6286fca4994ccc4d2e528d34af061b71a3a1d65acf00d4a191a5eb006d74b05c1032314465083f71093cf505d98cad89e307300089315b030514635cf862853e61b29421f60dcc451a39847bd5a754073d94ca3613052e3c6cb5725f6badf595c31f2b73b40370f50d1b7368d0c40e42883184194e3881065721070b3d6824b1851b67c8e8179732705248139eb1cd38dbb609d901a3ea8c13e8c831c30a77920801270c3062e013030d6fbc30a10195e1c6706d88a1347292b0c35db0441749841fa31a488b21b57e74344dd3ea741d184038387146862c7ed0f346d5030887364ad480c4132b8ce1b36ddbb66d3db0b9204e171898a0303ca15d309434649454849fa4409a13146954d034add65a9de4e001394f89989b1afacc70264f0c33ac11438d34b2c07065c6039e57dde8ec10448c15021032a1bd17530c049081e50a1b18aacce499b283172f5efc9903e84b114d84516689ff84d9c1071f9af8a18b4061824853c64a185ebef0f262a20b1318538c1c3a0354c426b5276a70c5da2c41e68a382f6031441615e0ec5075c58a2f46e880041a7df6986131d6b03943873865b821470c0d9e3779dcfcc0474c095ff4bf4005c82b1ac1194ea880668a1fb468416323d00b5ed059f3020a709690e3352fca80df421d20bed65a6bad27783dc8483147871fa6d0432626c31556b84431840b2ec000070e0c3cba989aa6695aa5e2ba6c777c6211741488cebc3301fd51a38a169028210831e19811cc09020a1e6048f3d266805e7350d3c3c38af6d3e9cec8a4f08898d58af4b5d65a41ae0632438712b5d6baddc962dbb66d9b43359998a32ce7b7d56fdb76c144436be3888b4fe90c33587e40e18d2d584ca086191876cec881059e3975e81c3bad2dd4748170e8dad0aaba7400d89ae081c60526e07841030e25c450618a3f51c87cb03283e38aafaa06a211906047052e5af2d020860a584ad8218e9816bc70e1062b696c56fe709e1e65b6405d804188556d687df8063d7072684113e3eb623323064dd3b457101c2de20a1eaa963023c60b3b70bee8794d8d112c0d0c33f09441460e39b678695a84b1fa318e986283a3155fb47083a68623d81023091a68a81233c6183f481194c5a4bcd980c78c23ea84316189d80a68a020c6883f6f8a98c30a98edcf1e222c66142f78ad1f5e58630c246640230e2b5c30010740459879e18538b8991c57f0bcf0b491828a2b3321ded0a9624e15471811850b38bcb66dbbe3da167e37a8e038a1c50a81b8f0e123070cdeb385102ab4a0c2963d76deb8310b024386a02b98a040f3021161ae40210c3001a86a810a3c737e70838524b4b082875a6badaf14ca6c57acc0c9a2c2d75a1bd0c5962e5460018b9c246229bc00854c0d2a339418038e963c4276500842830f17a9840d1970dd56dd8f4c262be1a575af699aa68551a699380dc7469c19c9f130eab8c2c0d34c5c3378a7aeb556026cdbb66d5ac884d330ac923a35cc00478a126498610b318002fd11c28d982d6d58a882070a5eea0614d26471c30a59621002501c6baca0896344a097d6e5358d4e9ed7a80842d4344dd3344dd3b0fce1680b56e0f182658526d690424b1baa65c64cf0e0450c3ca40106182b2f6d0a31e4cb0c1e3a36bca6c1e9c18ad70c50f447ce64626e83389210228c163228b1e5351abd16c76c88891c60d4d0c162031673bceac00148e336d85831410d13e6b0d24664e1083f6d6430e20915e8502a7e73508a1ac65f33ea21fc4a6107275ec8220732da98117313870d465c11461a31644c47ec33d5852e30d479cd29c828cca47ca8d3e6893b799c30824b97904b0d60d00f545a9411c315553b44c1642587ea4268a8e690e899696166420b69c250c15a8c31461760e29421c61726d8d0374cb4993364d48498de36ed052e98a3dc9a2ee2b66d1b78806bd42e2a059b5a5dab435f2ec4f0029fd79c6a9ab6c748884c26c352c7c033869e31f88846701ca143091c7e0b7fdb1c9c1b01c4ad8d2fe9c7d75a6bad55a6c4d75a99f840162e43c410c88d1c149070d105864026bc99e38a97cc4c0de4031443f38e48e4831cc9d17689f026cc135690b9c1073a6b88d0f3c49535270cf1da9c5fe8f29b53197edb9ea020e5402ac4cc331c78d9c10a1faa5478e30e1727f8f066cd162b2d6c7927c2c867e1cf111239a4c1b3670e9a386ee05ee081737d3163431774bcac40c34b93233560801254239053051554ccfa004a630d0a3674a1068dad092657b8e06605395e4ac052b4c78b1ce0a471a288385bc844520b5bbe08220d99335208d3c30f62e8e0c5135cb82ce1118de0053e4290e186051738b08206082d37b831858c883d66c4a97a6257faacd0050a81c27039a10b1ac47c75b08a2f67c841c5668a265e4ab01d1ff464f913450c52c45085e8b0e085971ccca802f3aab3aa3b5fab1e3c5f797c85a342d103a820235010745420438c9136a648a38a18bc50d5792333a37b43c615c3c2268a38776230c30d181174f182cd1a21e2b8d0c44b83d3c41ba2d766b552aed65a6badb5ca40aed65aab062037870cd5fae6083e5fe7d75a6bad43d487862897300a24be70486c0c176bce94e162c51929b09d1cd858a30d3f49a001c6145e1457cc0dca10bf0f1e96438e3a395891049e12c6c042dbe3c71301183a2d98a1b342185e6800c6f612c327e6c58927661033051a71800107073e1e973420156bb861218933806082880384d1b9a669af699aa6bd0b6926137fa7699a864183219b4851069a18b8ac6181cd125ac098b1060b62d28861801a9658ce103fb0c0439b1c8c9059d0041778f41891c6105ce01821c46b6714a08c78e545c734130f7152e34c33f18befd41d17079547a44281868539575230230c8ec287302cc0b182853b5ac0d1056846138985e9c3c41c26acc085ca0b903c33b410a6872fc6d0010e2a0e8e2e1b01ea996fdbc4dfb66ddb86c4764de95913478f1727ba34c15b7031c61266b08471428d1e661c6b6c198846e20ff1ac756028430526d818b1049720a480a18920daa491d509946583a386700873d49d9ae71051bb5068ccacc061430c19f8c48048a24c0e37a4c0821e375edb1c347efb2d100abf89bf35fdb65d5164a764f00522f7f47ddbb68d73df5cdc7cc8a8f5dbb66d1b1936dd15d9d2c21478fcd87161074e4326a78434e63853c40b7e548801034ee440910a3f929b43869a893ad55e471b1fbe98d5a1cac2e7351afde6e21ca281163048f16605289cb8f3dadec060e637a7dd447f7b93820edffde6de4d17fce6ae6eaabe39901e22ca64322baf4df3a17625693e0ebd51bba86b37a95d43de0d9fc9c45f2bf74349ec836a92567d9c6b4e37d73417bb69f4a14e722692e4e33567cd6e30889a4bcef21c92b4068c3c615071a1a58bd768f49a8b73087781058b2da8b0618a31b27869ceb33f73bce660377dafb977d3005e73d71c425f9a0bb9e3930cbe5eb05dd4371744fe910ee15e546c3272d4c8192367a4cf7264d09e6772bcbc2953c36ccfb37fcfb3372d74cfb3372650e639e7642cb2ea8586e7b4cc4164b703f97623b640ba2904761fdfce72bebf7b18f54b880b3de79c939bd24a99c8b33263b6f8a15916dc3de673227e7332477994f87c93dad550bcc922958840ecd55e65ba96794bd8e0d5de77aaa5cb01b0f38a2da0f4c78fd27b1412ab9c8ff48e1d7fe16c39af96da11f6d4eb04c2cf8bbb32a6d385fad8fdfcf1cea1057ebcac62c8101558d429b52dcd390b15f7e2a8b8d7e66cc7290f5af6e2bcb35b32786d2d2452ccd7abdd0e36e7f7407c719a76a3585f2f19cef9ce0b71a7f99cdd2c4fa691fbdadd6548186aa9e88bfab41e882f3abd85c4fb79a3584f863adfe1c9d42d6da0614e0680a96156c90ac20c01f3314f679ece77640d9f2c41642da26c97e449017bdb28f9301993bd81fcaf790ed97c14b5edf2649ace93896eaef9f4e68ab42cd0b9e61e70be715eaf079d6b1786a67a777d324d291e68ce5d983899a6537f00bf8c2653d5a6f7e2d7e6a3f8935f9ae517b5a3ebed0b993d71f8e4d3f189f7d3a9f7b37ff38ed4eb25a3390d8ff093a1f2179ae9334cd23dbd63073f67f72dff8eb13102cf4c8489f0f7ecfe42c11735457e77a1a4772e849a1f5b8ae420d5a5b88fe22ad03dcfbf2a7bd4bc7a67d93fc600755088380f7e5d05bba7832ec324a077fe5150864736ff3a0b3a0d93702e5d5ee62072ecdbf967c7eea8701f3503c99e7db3a3948c69b2c9f8b88948c5b4f90a441cf7e16212c2b57d7eac524aa949969ab37429ed59be8f6eaa52d8a5b4244bbe5d6b67d9971988bce39450d325a55d3890024ce49eaf41007acda70bf9ca72be0621e747215f5d1d50a09b46a3052cd51f39cf57774d2a4305c4dccc23d3a5f4b0c8f44f04af39ac4a95296eaa33d23eb9bb633b1477c7e9eca3a669b7cab7f37b37754f97da4d22bdbd7a9238344b03e8355b5fec26d6bcce1128d07358c540d8352bab9e43190361776acdb6ccca4befe987e3f3b13c74f621a36efadc87ab9b34ff341b7bcf86ced9d87fdfe7f974d0b638ef3cecf3d4bd3c4fbdf334f207916769dabce65f9a334f3df48f03354bfdfb6252b363f5e95d67eb27c1faf9831feb73a85692cdab6fdb6a4bc26ddb6afb38ff3acff93bef1ae1bcf30eaa7a7741e73ab0f3b4500975ef42551fa94f89bde6355442bd031d4a53427dbba3e6e0ed9cbf0ed42ccbcedec26c817c6561f916660b34972fa7095aef46c1a6b358965f9ee51f6351334977a142a7457a7411431f3f9f1d26a1feb976c7d0bfdbfa7cf3f0b6becb79be715b126ee3ba3b6afef907e5f97747f9a3e6a0a799f3d43f3b82deea9c5bdd3552fdf3ef829f77fe5de620374a5675eedf1d3d07ede7afc9e7e4d30b46033cbfd8392bcfbe1292c1948c790d9af07137f17764f6902c9e674133fdeb2ccfbabf0627d859d6132e80864a26bffaabdc3f15105be1392542d84f039c9ef3192669d66ffec9ba1aa7ba34074ecf798747a07cd41412f079fcd6a10262363c672426e6a398c85eadc62931af31031939970a88b9d15cfac6811e7747c9afaf033dcbafcef2ab4324eddaf5c6a9f781cb6bdea2f59e77e47e4e6e9776c7192aa13e1f6a7ae5dfee08462f65f4da650e32a1a44ba7b6956404c1b7b7d69a0c0d1b68c6d4a941ecf28bc8967e08aea8083d3333333333b37311291c77991f4f9b3988b6b9c6ee3191ed729b4bdfae74ef65756e9796b6ab3525deb37b4abeeb7190de362b65dfce1ca4dbcad72bfe10fbcd27bf88d2bf8fa51022157b00f4d2d9c747edfd2a3fd9e102406f2b1db4507da45dbafc589a11797686cb7bde2eddc879ef41ffbe09caf008e79d437dee79de0a39f4b6fde10652e6202cafde76e52c3bb68fa291f6959176d19da6685b49da57debebab695c4fb76effb227190d99bf71cc2afe96d59beda4225de838ec444a6d750498b834c072f92943d8747a48c4c903bb5388704ddc9ba23f79a43b57b3eb6f302626e3ccfa93fdade2192760f6ac541a6b338c8943de520138a4865563eecbef0b29c394817b27cd5d971fee7abcfa5b45f8556ca8a05ba53b3405f85a0777694ff01f96ee79eb7e567ae41db15dba5ddfbf50ead7aa3e1935f7a68e3bf88f579d6831fe6201274cf39595e59f98e243cb79532795708c33004fdf3300cc3d0d947d859beeffbbeeffb3e671fdf1c5dd7759c6fde755dd739fbe8dcd8b66ddbb66d43c376d8567e3b871ca472edaa2eabb39532917ead1e329122cd44f87c1d13293299c8051f8340dc36ff58d3e79c73cec9736a1cdb2991673dd4f9ea54d3ec116df3d681c562ad3c74d03f67b1582c569eeffb3cef9cf3cdbfeffb3e2a3e66666696dc1bc8413697764ad4bc8edc6f9b834ca47df39089f06fded6c736b95dc847a57e94d38f12a9f48fa2741d1c9bfca8b4e955ca33999a4461d0213443234d0248f31540303024140b87e381a8ab3a14000d84b04a5044934643a12c87510cc3300cc4200c0300000018400c62ca59a405d951812c43610a283dcb69e66e709eb4a73d6709260865697b0a187161d004a502dc2f94ef94c1f22d3973112a6e2bddbc5bfbdc3471c67928682a4c201a4df0428286cc840b311eed779f3baaf13694172b02c4b529cd5bce2783e6dc29416902018a19c45c515732f1efd5b716166b4d735d31360bfad71eb277aaab0f261ca714f2ad84babd6a920d2ab0450b28533806c87cbeb4bbfbd41c2870343f35e113fe315bed8ab5708f7ee4c9789bc856baa2a42aed3cf2e7327c254752193006112f7f61f5e8fc9377778b7843d31e24015a023f463c90477e71447ae0cc679472f9d0b4a381a43c131fd21a6b88b92305fba530ea9943f6efc0853457e2308896e4047394e25773243f91905103c9c5bb35ebeaaf3a2eb6412e039180a56e80fb2996d7f6ea09746f04c316c246d325ed69b8ce58d16c03f16db52d17648f0c01b4d7f795953aa3f3fbb919e4fa011a0637e9fa9c73fd48bd242e599e846b516fe31ca0f721e2a30f9674663fa9e8b42f2fa33ad32b70d2755b2c87984771a96fec84e862041d325e2306e269cdeeefc334aa705a3801ced171299d2bcd123a68f8b15d6bd143c02314f26a0033938e1dc30a4a20906d49b3d663aab50b98f568c5f298a6d5618c5bf9a32f3d8ae191ffb0474c5f229766523405c397805d80ba8e693224a9f61a76a5d0e50c028adac3dc4d72e12ad3810c1bcba36f968a622f04369a38f35226024b324b7012634445cc345aa55142676b3918aaada9c7278196422591ea7550d22e05c4e8417545378fe8805d177d5fecd20f9b12a538e166e83b10c2ae519adf64d00b9c29d19d5329a0dc2019769f72c1765aa2a5e0dc36a64d905499aa32b0a22d99c7e56cdb21feb919851634aa73c5d595cfa569469c7b577e5ee38f592bfbc238c122ac2d5a474c6799a03a68a318fd4d5f8a02676015d658cf5ef9aec16757d9639b346b221a48123ae1d65c3ed3fe78f005fdb8bcb89dd965ec464e364a3570f9682c9ef62707d122c31cf8a6f1a743a7ca0247c0a76ad065a4fbf0cb7399068f84114a67286717e475203451312f36ec6aca4785fe42a93676639ae38e54013e5f161189f6efa2cb3034bd0edd0677067d1840b8fdf98d78c33527140e12c66d51b69c3a4bc407b49d184989a11a42b946f3cb9c1eb8685d59b8e791fcd03b8d735bed825de321178c3d49c7fd2d779fdfc8a4cba6ca866931626e9a31e6efb6f8863986044817e94ffe38738e53a5e8089a1e6a9094074b4425b777467f17226b67d876e227c00d97613e5b3d34464bd99cc1e94abe2b2f853f3b4c9608be38a917264c3da07eb82c1139109081997e3d0190b07ddd89c9404c440f9583dac87bbb2c24ec3049d940fef1b789897ab9836fec477c8feca83d8db683345d631fa0961bc151fc034525ed45ff6aecf4a1bba2befad8be44ef67992d2763b149b694b8560516f3f84aca1e47693151cc1cd5b89054b4401e88dbe271af7ddf0096e5549b3494dcfcd9e12a75a7d00a8d48b143fce2e320466f354a1df23169fdb0430df730d342ad6c527d21460010fd916b339288e68af077f9da0709c4a178a1c2323f22060a5476875d485918340936492dfda28e8f43143ce723cd768bd01bd5d2f3b35e0f1e9ab0323087cd88b164c56e60d3cfe6c3f49ba016f03612fd050ee7bdea3cec95ab8bdc371e35facdd46bca94e9d255758a54e75c93f1f2eb434b7c7472e004155c3f8dd645c152f8a1953edad359464803c5af92a18673e31888cca4bc21d13821ed6b0ced21fe4943fa0c7db806170da54b69e040f0a9fb19820a0a8e4ad2b9e890a095d679be30e093d01796f091f9caed1279b10b8a623d96ad4169baa163b819f19f58fab0954f858bf239cd2570b3351d07f00cc03485a2e942467e7514f1187f235f019611393b79d3fbf5b82c8fd835c68059e8fedf3543784144a9762d9f71202b0153210bc57bcd0f22a7c6c71c648cf9ff51a11d0b2dac6eb69d9a7d2dd63071757ee5f3042365b2cb0d9134854dee36c85bbc0f33719ee7a40a937471a1c82902738c1892b0974d3c2008d617201ffda82eeb66011c2089f610fbc6451db9f0794fd8283c4cd809d7218663850ce0a10298f7c4a091f2c00fb67cc6b50e9abe75c3aed6972b392bb633c988a6865a6019741659e1756183a4f3172956a191d63b5415e4b01ddf67beb8d2e0227abf036285bf740c4a2f3d02076badd96003626214c7c53ef9bedb9866106ee49ad5ff40c07552cc02763dc491d50f2a37350298e303b8b479ade56670d810a2713effa557afe22cb9d0f33ec10d3fae09884fa080b7f479f57faecbaded480b72747324b3e225c693a4d352dcc820e81454b9b84ab17ab30d7b0a68103c5ac8757e8f568775d96ebba17d44dfd75d146a8dd4751fe6960e3f5d63273b73a7d61fe31c30c2c3a83f108fe95cae54765a4ab1cee572e959fbbd7138432fc5b8ea8acbd7b3cfd99fc7769e0e4164dca16636ed7efcb9512a9504b51f284f2edc669c01d8905af9ec968205e6e834563ed00ba19b2c9d8fdc6ba9b297fcbef5e32941cd16bfe90adc0ef614e502c6b7daeac8c318ffbd59aa0ea96644b1d874b452a1529cfe3c888c25362c234a3e7372f889666242ba72a0571c0f5a8b65849db19fc10e377a2c0662887040b6d04524d1436654c304f31cc9aeb1130ece33430eeced1d09886be496179b8511e8f6686c2189b5d01f0c1c38fed189d49afc22984a4e0c736053b1aadd9b17afe3c8fa1bdb6a93d9630e5a25c441353d1021aa2f0ccceb422c4ac09776842fdb688fbe95ba36f33fbab026c5b9c62b6f0452a826b8be58dca2fb617e0c8d593804a40a29f617d7fb29cbbacdb183ead4a3aafb944a7e3bc9e412e8519ade5b1a455a958b10fa35beb62265ba0fe548617e7ba1d8db7c05e8d21eaf8c7da4be4055ff7f1ba451343a16c463e365ee0c1461832ea8c5eaeb2520c57d1e07c1f4702189210269d4d6d6109b31749f06b45fedf950733058631a4d756787b4f6136fb4a00adc89c1106ff8051fc8621d131f98dd659a6b8641b39f20944d0be40ab1384ef9e714cf34880d9ff833d0801409bbc8654076c031bb1cc7e4afa2b19136635404a2ba359a8d72a2fd880e8f022f5d7edcf72dfd167f5c42f4dfd7c6710cdac92571770c13c4ea601a7b59b9400e4bc9ed90c4fd481c1be40f499876107fa5d1711324f41ee402417e896f6c5cd4abce01631aea94066524264d717b560dd090081f0e7e586d813dfbffe3a0d6177da388fdda0b33996d050e880f65ec703a17249aea028d1ff3815e45b5dff9c411847553142ca6773630682abe182b9e3581b14bf17896f830f47b64562ea0986f24fa07d252e7830169a5b4dc0a27c6e827f5e91d19e3029c99d6f925e80fbd2caa23593b4c932be0791c628d6bff1182ba93c22431910592351ad8ce212d7eb82ce6bf3c7c519f53ccd98aeaa85b5f5904c12242b9ac2a0b0784fb5c037e684b22920d04af715e31abd5eb1bb8f64174146f8cf04dc04d8adddca851f200e24e244b62f6099f435028ceef8d86d70a2221f46e6c93228ea877412fb0072df50bcd259ef834832efc4662b7c79c9cf6f146c3d90eba95ec8ab88299bd35a5fb4d55dd5a596481fc04ac829576cd95e8196e8e188bd84a28fd9aae719c4ab2a23370539d2b00f0ebadc506b375bfb4b0593b4777e90cdb3ad0a6e1e7cdec88d06341a21b7dc40766154929a870fa5dc9cfe3e6c430e2005d2a5670f545bf1451f19f14d1709cddc2118897006eb9caee42589905b65b5e833ffe3aa3ae0f5e783134becb8a6dd9f814d58b396f9648bb3bd356f092d64f9ccce730249337c7fdf9c50f3fcc8322168b50f4f4bc3c6301b177e55804aa206c456cd06b44f1cee8c8e8811291cd8a44f192198254fd2fd8d80b932e4498f8ac6d708682397d02856c30f059a46100cadd7691a388067140c9f4e064e882412db74b1b51bc67d2e56ac216f667547add099f123d93491454763b770cae2aeaaf48afdf424b1418153b31d30022582cce5f289388793930581e0d5fe59706de6188d3425a4781afa72f7eddc8700c347b48333a6df00c9b360d6acda7d26cd18904d032f3e3a6967597e3ab1947d1a73dea13144bf09ab1752dfecd3d8ef2323b7bd191d1851e699be6102e93ebc56192e38ea1cbcfce2993d0a15f98d48e967456524c0193b99245c825f3e04b7c9c2265f7a4bc0921cbfa2176efd15eb4b14bb2e199e682fabc7c1a387c85ce11044f1c70aa57289eab7235675284c8b3d62ed80b7acfc692ee4b93ae3bb304fbfe5f0633d54f63726eb524a66a257e556d11d5c40924ae5a6bb57e82ae1a0620875d91d4365d64ccd35330d6237fae341a773d2864028c0d9d581680d9084663e417ffe88e6d154270e8c754439751d269882e0168bda8bc20d48b6484132aa3913a8174013bd2caf1ac9c6a65b881081a7846b329a62fc4ff2c874df5464370ef0058ea4bf20ed143fc279a83512cdc767ebea8786008665a95ca87fc9e7c0263994818c88bc08df903cbdf7c20a0ea2bf2c18f967d7086fec7cbbd1b54339435f6412691da8da834eb98452736ddfafc204d99f040fee4a7d7c0c0a2084ffba198c1a1a4d304cb6748a4f6e43c4eb8b9318ce1c195341a64cab9c17b92455934d40542b13c330fc624925c6d501ae754ba91070421695e16a157deb06992f9e2c9f3f206d5718c286b4d03485b65ade871d8bc158faa47c7d411e53c7ad957e75a6e922fc13c05957e087a51aca56545afcf0fad3557522d6a8a9c46900b975154799f2bdb30084a596c18d5744ebe1baeef30abeb0c2e756b346554d661b919101548c05d6a495ff2de01f060adff5bc415bcd59ba5057cb3f6201cc0ab03eaba01d495e623a0677c4d9857bf126906e14591cf1394a25e5309d0cca5d9fda7f32ff94e668ca2dbea60b09724af01e599f569f2fb124feb571bc25fddb9579f4485acf9f12a715f27a844243e82078625ce9c606d2d8009394c41bcf17d2a917cd31fafbf649d4095a7aee86468e3ae84cf323a1991da052a2a6885f8d5e8338934c44b203aee652052b0c056f5ef10568a9ffcfd40f03bb1eb2c965b71b99017f4a8393e3c921e2d14a5551bde5c9549cbb433e806e2a695c94d978a959c4206b280259756ab276bc90b3225b5d2d813e31fea17f613fdb8bdefd8b1e7189971d31f4daa28046012130510c9500976a055c892f6d765ffc592f5cd0b344b5a324c11b60ac9c25c4f96072d6f078e68cccc7e6d99dd99ceb3e374a528b5e0e74bfd6adf0924b7fe273873418f02b1d67efa0bab8c156d8d75d3a3fa45a1ec3eaee72d45d1030fd68cfd585773d1a6a4c0c189e26af0dc7341db51264a2be47acff826508fc2ceea6ea9a38fb4f0f526bd029dcb84c1966b1893070d68da1ffa9c92b818736e7d2c36a5ac265fb9eb58155ea986ca078288fe12e7794dd48d93245f4b86519b8c4351349905d18d4259e2ee63779c4ddc15fceb66e013996f085fcc36aa1ae3b350af63873633ce4506842bbfc96e27c8ff3c6721b22a785a4c49af3a22830d3cc63c8a8cd08240659963748ec16fa953601d8c90262520def04e0c127b09bcb933ff76be74e85f6cd4625dbcd222722011016e60c4b66d5bab154b822d687d48820e8897f41ba9014ff21c225750f628116581276189e2610c4fa979941fef3dbfce5d11e728e7981e84e657335fa5ab8f3237d1b248170db730d1acb5556e94b95a1cb0647fd8f80f87b723708ba200e9f56b60b3476987bc0ffcaead17a175fdc95e1b252c2742cc29e914a9f2a96eed888a41026642e62663f681106b5a02d74426dd2672587dbe721c7914414d47f14cfd13c90c6ea5231c7124b7c6d2446d196985ae97078c18f9159968015821b3fca7220e4e78995e9ef9de6667383c985edb8c77db47a3cdba06616e59561daea9a322447a1ae2e8c6448ababeeb227c1e87d355fbf8dbd9717057e0a7c5feed0ae3bed6b9864e8fdcdab6737c594b0ac0daf8227c3fcb6a9385d5062dc59d196b2a500e97542060a2ba949150b22c1d8d08c0a6dd4db7522ae92e11ad289e07d91561a57033857440df16ab1633c70085683f5dc1cba9396b03843f812cc595851fb0a79a76269a38968b93d5c47c491a9b9035e6e8658604bd37212351cd44da9449990a1717f282a4ee2274646213ee6b8c20659eec3c1877ddad661a297475db7747800137c89965aed3ae8e8c9422081dd1d0d5a2f1093b06d3df216c7868c2b1e46dffa45b4f7a9126936b13c594d608a2bb211efb9a31466737497d20a6e1bb91592346772ca9e60d49374c228e4de0ab3512ade43c087a7a4657865318aee9803ccb19fcdf8d7019b956b208fc48b5f86c710a8c668c7c216a85a97a70f39a0438f0646a4c4ba48423adc69812bebe105cef05cbf0708fe3ba27ecc194a3c0850ad907afaf8e477b9998e783c2047c7c2760333c4c2e8681b2e11747879e80d43c721fe793c7b462eea4fd5c883b579b226df5407648e8c5df437fab765f3ac501daf0dd33da0790fef7848182809c703b7462426e42f15852c1e3880f433aee38c584155d666a42978a368714930a7f477469ceaec0147ddb7db1e3b5793e98d0f06091eec304d0e4191b1fd02837129b749b829edd8dacb875dd08e5a98817f4bb5c192055e5010293a35b0a29f8c63b2121f04b37585e63d0e34ab8cca257f9aa9901fd4e05d2419b392f50e8878ad01bb71fc7585a4f3927a28d512ae55afd695a0fc4276a25f17fe491515c05716640fd5b63aa90a1520a89205f9c75e7c03bda5ff56582015d2768d3f050346ddc53275cfd864fa4cdf6d1b2e9bdf04acb10b6e7963288562ecd294b1fabdef9bdd50834109b38d6a210f150cbe467c24258b1d13f32d1180ad6adac88bbd9a4a64a96d49fbc807fa8677017a8887842a07bb1c28deac2b8af640de7b75824a32918a7f7432ea9700b3296716a23abb323f20aac9ec3581fc9b002a6b8228da1be641ea3f49806d93819a7c161c0da0653aeb4a30f2f2ba43105949c9902f5f8600fd7d87b104fb825b1df6ee5dd2ab3272ef38738065777392025fe77ea47ecd7902a65536349cc8acd954150b1dd97c45e5767cc2f638449f427fcd4df8cb2ed86510aa0a0f8377ca5839fdd60e2cc5f33c5173c413c5ac72d9c767fc3f36b242ee7248e07a4322ca51784c34b2d10da4faa6ae4762a9ebad30dce9414a6859858b0a5407f836accd0e198365747bfac32426406399b683bdd91880f69522b93ecdf724508160fe885a38e7af10dea24a912a3053e293f236190f170072d40904513a29c4c7d700faf48220e972cd1b140e08c844b5d983c6874c90a0763ea967e498ac76eb4dc38ef5bf42c1b0fd3b5f0d2ec96565060701d6f12001276f60eb7294500fa3681ad083a6e2e2ac16f4e78e1b5ea2aa27004928d6eaa6ca91884f5b49f310999804e5ccfba60d6303a7c796db86cf6f7b369f8ae495c5a24f21f77af652d20da78019a8c1fe29ad727f30951a0e30e47b0ca29c86d48ecb7834d01414505649618b70c44cd74f24ef90f8c918876a87c7749184fe43046d1ab41c6d25139572bc59bbbf8025948976d1dd6c4ef29138002b126f60ff94ea08aacfa013ee23138f94a189ac0f8077f3eb4e0544e0299d3247f53b453ce14e546d1f14c5539731bf6cfaaf544d580047b9434fd024a629bc4900fe1504e76c4a4069f67f57b0d1476323aab7789c3aab73b03ca0f78841ac8a95a4069141272bf6d8c991968a60905696213ba81a916c6ead8fd912ac9498763bc78b424781d4f9686fd5508ae14af64092c83d865c4c254d7e76746e65445ee584965be2e18fb20a933090ec92f52d02014a4a454e9b187fe6da6f4c2851f26a3c6f1c485c684f49a5a7f69c262ba24b3a9694f6e419e81eec4732bca8d9056ab0978607a14b72a5ee7e0e27962e5cc45bd67cf2d2458379941da289ce672ef3bfc4f19b709c47bbaea365a7f8b71ce154c18c3b1b1b387c420a325075e439054f548934bbf0a679b1ba12ed857a859e9951163f3f775ef4dd0dfe0e00417cf8cd3d476580d5253dd2b347580f669903af00c34165e1a29f6532e5e6bf18259fb12404b870599998f767cbe3e4cd2fc9aa7ccd79c69b7870d7e75c068931652125b103011c4468d17c4be5da9162ff43d998e9cf6c94f8d21522095e8532563ae4d9065e7a9b1e0d25312911197deab3a6d458e6304137fde820823392aad310e28866ca2a8033e14061d0f3ab0b80d4e9098c88968f0bc055d0354e8a65a6bce3f3e5c6d841f9c2d44c72b6eaf414663f732d044739830ebff5f37c2025d89c2413c49f8a19fb7d6bce9308308bf906f987ec61fde9f648b9b0e9bbbe834b0b8e50f6f2ec01a29bfc0b5e820ff8a53b07da6b5d96883ef33714bf607f8e51e815e2a2ab0c87b09e4a2b60070cf8712e12c93cb2f02c63ad9f2583d13b448b9d7423932f52f751d9224735bb97d160c1c7f497ac9bc488e241cecc4e1588072202d54ac3751a617c3019a319c2f278a45d94d3afbb19799c2ac10f03b8bc9a6c224e484d5f5a8da3954993709c3e8db71a0bd2f7af813883e14ad138e45133b21b7a31f7ea3cb06ae7b5204c96d3d9cbefd2e04d790eb23d0e1cf9095b0cd0a525d64f20233877c14db514882c1dcd0c1358d94f825ee5ab4ee41a6f7c3fc53308b926d896b5f936ac1771135b4ddeadaaea73f90f241c2e21853e43840e4bbb5d11dea7ec279051d13cf7ca9dcc72e9d1d4cf3611613fa44ca796e07d03419b7a98e8e848dc236b969e75377240a8511830053058d30862543075c1c596358c1ec55a21e9741d89dec813aaecb7b1cf5a86f1afce1154c708e6ed831903aed78d173bc72279143f409400706332a06fdb24551b597aaf98429b6b846734ab9a20c2d7d42ff46068159a1ce16f110b725d6d6ac1b26826fb99b08736f66043b97ace0bb18ae3593946febd92dc9505bb3702c623a16564ea769f1c807f7af56573fc57a8057d595a0b7f471bc472023de1c1ebc325c289966bc37fee44b433688d1e3410879712f9c3413c97dbbd110b701d6de0f39de150412360a449f724d75f46581369015dc4ffaccf752797805f5719a4803660a16a0ed6590f85482a5fa770572ed14085dc30c3acff2bf20d8d8766592467b9fa9e72d6dbe3d255fb90c3394d27663a8d6594a4f7d500de12300bc0bc6c785b867fbdd7e7e3b69d95e724b8e21e3a59d236add5617c56d5531c82e1ee28d3ad8ebb27c0867a91dc7c6da5bd0517c4f6a06416c25cbcaf530d53148d31f287b956e0655c11ddc6005ab1e250f9c1e89cba694b3c4d68f9f13bcce6f1f74dffdbb13cb5e3013545f0b634c75dc1c6d548ae4b58cae0c4efae5cea0366dbe36f17f8602120f7d92b90b8174ce918cba12a0e1c2f69d1c907d230621db95efad214ec70b04eb3862daac333e13944536c6a07078700484f095aff5bbb0ea5f7557e2d506b5261d863a4579bbcb74cc34075093d04c5f69cc1bfedcbee808956f82a9a408d71c7e64944c2604e9cef3777138c49354627d48c60ecfc51af40c64cb7b581bc542dc57d73685e406e8461a2da49d055f11b1d2df7fc961a2889f97318928db09d003ca282ca42007316bd643fa67d3ba5d8294d6917d2f7dc3513dc3feec0c7e30517ef46af5f42a47d74bcf1c4b228d7d8db2022bf108d4fac2b3250d2772a9dfafe0a21f1710793419a90b292bbcc4316c1081756f68af9cf854e45a911db6aaec6077be596a39cafce97be164d0c6106b43e1c9b1469e593f242c15560a699adde2b1fb6d63883677e19465b2bd6fe35c9a273469c121627fbbd0bc8217a0553ebb9028c3c83965bdea60a183444dc9ec56b4c87a245ea73cd2a76bcf931d14d463e174e4a80eb1a5c23cd91167e5899688b62c7e7ff50932531737ed9d3af907cd2100b624f80580510be8921d4bbb30936ea5ed45e4dfcc0550097d6a290a59cfb549f472c1854a85c557ae4a1d26255285a5edfff24da551226de228ee417c0997fff81eea7022e12782464a33d9caec8db61709712f9376569a629b530c402455415d500d438bdb45c40e49b3332244d7b82cbd3d079502b695c8a329d491eab0abcb2cb075023d0b8fc0e292457667dc52049eca8561004797d6b6ff31f43095bb17d027ce3bb38a54a1adac8814b22c009383d285286e76d94fb4ec7da85856d19fddc8ea314a360e84d9cb5ca126129df3a92d101c7bf4cf47f388f5ec2142cf2898a4ea4965a6223d0daa3d850731fc187e170b10570b01ee24c0a316094fbd3d0162810269e84997250d330ceaba146b95564068fe4fe0e23f29bb7fdc3dd2106840209238be8ed23496fd1d8a4d28b4474cc682365ac08627a46a66691ea07644b93bfc8d3c68d52e2d1e864cdb7c76216698b05c7b3a482b233b74139a99cfe42c5f2e1cdf95875f2dc6418107b4529aa84a118f4e6044d9e9237015f608a93ae735683f568cf691271feec90d2fedd57c3efa6c269c8d12a12f2fcba2c00d99d86844980b7512cab6a76790bec442764c4221af44a148974284ff8078b1ccdeb9b57c88dfcda1e99af4eb9bc7697813a64cd37402acb9ea97d037394d281400da6b45e90e41c391cb4ce924a094ee78da39c5b7700793da487e18d5b8cbff33581842190120e3afeba96fb04a7ad113508ff4c36a68f19185e3c318b4dd22698c3b10637f1ca3c759765cdee1be182dadba3da393013578ae0bc713bf562a93dd1915f414c509345a4e52400f7b7cec7b21f238ddf5ecd834a6d33c4b91f40b5d7e6a31fae0fd816db8667649b467320903b56b83ac7851c946d1735c8911c516aca54615681e7657d32c65a3ea49307f5ef2676365e9265ba60336ec56dbfa03d79402a206489209854442082d5f609575b209ec2876cb9b9eed39128b6d37a62050a99eae0895b4bd0d9bbbc1ce2915ea4e2e5e7b90847d9a363c8aecbc8b79698f4d0adf475abf3cedd243b4c2d3bc22865ce6ec4697af097a5948e47fe6da2b03fde8124b2c31fbbd7c79a94310101d54cd45a8afbb0f51cb243c8bce93a437a0c3b7e5c9fa8be579d22ad244b8a92da8eb04a8559a2b14bf8b24b96e1c21effa0f145ae1462139c82597cc4836f9660db12eba8b9e105233ad350520905ea68cb3189cb46368aaf5e40f2cf531216eceaeb16e54000ddd8dbdf258c42c24780ab34c04d5dbc3837584f1deeda1d6dae77f162f5e62f1a81746b497b90213f0786129de2d0092ad4a6d016f6b305b52267515b76dea12099d997f8ab4b7ce18e7e0ea5b120a52ac1464712d9c2384b8d42889156463e1600a4f4fbb1206da921a09e5ddf5668fc895ea432fed296969f74510a02c1075ccb3a574523503b31d260f314363428c7abe2773805345493e827956cc7cbf439539ac78472d1aeb8298a8efe091c7e2540aba044122f2a27e66df7e14c4313f964fbe81802165010af3322bd079264943de1da4389ad7c21b47d8e671fe8165f97e5e264133d97a61305808293ce83567463f300d4bbff8e8d198dba295efa7602f9c4e199ba7cb9b441f049c66c0c45b32384a5c77017e13b1a8bf4e983d372b03542dba1390848750e77f0c628575a44e0561e1de1a37354c2535478a546b94e548f986a84c3f93d4a2bb84597891ddce59135eed01fe6799509b36dc76b3f966d67e4ac9c15265b1ecea6990d00efc9248290ee8abb60281023505fffd8859d17889b8118af84f0e45465ca32fdce9d02a1d86223eb3db0d173b656b665dbd4cb09d2fab84af72fbccf699c5a191142bbe19a3fd652cad719ad2f026675caf0c5729f5d40865abc4e9c31a80b38c164867e2ff0b48e9c936e0aa94b1c66df8897bbb7784206af09d88d19bbf0988cce03fdfcc55ebf965997ebfacbe9e829a67ec67918a163f8960acf758893d35cf6629363f4fed6dca831d183d8f8077fd9f6266030c7fa19b330691afd6ab81581c2e36eb0d76c19701fca8c2cd1030e303b1360a72e1b8b27e2052d08ee87a949d70371770fcffa31efe2e1912dae403e2c5dd403662dd75702acb871854ef0ba01af762a3c505aa6cde3428ab90bd7c15babb2e104ca5e97fcf35fb2b6b613f1e5cb209abab601f8599b8a97a9ae4d1c09ec3f4579951207dfff2045b306e7054bf1e1b77d0f0c1e6dff068f18a2ea6001aa228c0aba08000a3ef46b932594b5ea1009ced844f58d81fd05ca6a6b1710eb3595d00f7d7f487678022219e01a882ff56fdda2112b67d6100de6ff6fb9889baf44fc86b2968365284470bb5c90a11d16875e161a1eb6d6a10b5786ad0a143e0c73296e698afd822efac9d3b49a7eef781b4beb4431cafdf1bab97c405272ee3c88630e45810d30d64a03bca19edb5d7b438d43ec82920fd13eb780280c36ee1073f8d4c5b53eaf1a2b0d03d0b587bdf3ce052af4802ba787f6d2ce3dc637ad77422c4139fbae261ad7d55e715e6f8944d551bc674d0880e9c969fbca10e9966cc858743bf1f7690ba2fed56b6ac7e56ef54cf71f0a46d6090d6dcea9855a1e59d5ca57c6e81d6aefa2f10cab6ee4b271e4a193335296bdeb555f8fb494af02a790861ed0ae23467002772ce5d5c9167f153a51815f3cca6f8c6a4e64e50f8963db303124b9aa520b8dbb8b40b106397774bf81438cbbc87afe503aff1550bd2826b6ffb58ad33330e447e082cdd432030ca57741a7548fc77ba12ec48a986b35e22c4ec05a8ccbcff0210f0aad4fa48495d2e528e60a28305310d2ee8ee81c75aea29afced3c04d7b29f7a3bd566a9f589c438740548a4696eacfca06cba532430971e21daacf4a01d8a80103bdeb90797fe64a944421db161338a22c0160ef61df2d46645e194a573813b7296bdd4acc9b4a4d706cc51372517d43d1bae1b730f3fbe3469cbd81b2190c1d4a99880ef0e00613af1b422b4ea8b1e9a72970ebd551162deee52828301dab38b4e39d230e4f247d92c109c183e0a1ac367bd4aef422b0d2f15b628edfbe9f1a20415ef3518a8b6cd8a7075f952067e572a91864daa7cda691685b4247b0a80c28ad2deaca0e075453bc88d7987d3aa878a69fb247b490c6e0e315d466c5523e8cc39c3fbb37d4d78fa5287d5c16ee639d6d3c2c13532e0d6256dca3a863ffc3622576b69cbe4a0d37045a72fa5f95e9cb6b102bb8851bf61d74aeaf91b46b972f0638f549045c4a48d3361378f5089761d609b0848593562f21bd8c64978cdef65232933364feb85da609147b12470e95ccba6c53a897a8968c1a3b832bceda3eb561c14c7b024c9d0b71e9a5ff656edaf670baed02bc67a029da963ad0037225daf81d22a152dcfcb05722bc3fba6b1829b13e0bdbecb67d8bc0b365b193eb78c8b400144f41cffed3106c66c6294c16489aff12344d9bb46bb7d5fd8996d86f0fec2fdaa6a575b8593d5f9acb6e20198c6af8c139c3bbce56ad53c293ad6e4a5eb46e42718c33c863f006de987421b9480da1588a48bd470403acab0d50c61df114776982dc2da89964bb84c8289e0494097764b3408165b3cb31c4dbb42f67ed3f47883b0a0dd60615272d405170d8e6f980358a85a66cb4cddb80369fd4149eade6eafbc587b2fe9ffcc11ac4aa0338501ec04fbe7452f14fba35f7606df3a7bd30536f8e2e0670e5ef610e15c48bd704869bd3cc12538eb4a90b00291de29bed88c45fe45884903a9ff4cdcce379a39bffc787e1c25d32cb1586352e83690e0a825229e334018a4587634d01618b7a60eb1d2584d8a53ab38964ec6f9adc446836204d36b6d509346d571f14f56eb8840b8c848ef1b00e8c5362688d03b049f06a2f32b9b8c6823227333b56185a691d72a4942eb25c0bae9c9fea9f35a9bec4533a87eeda61e2c82428a44f810c3f85c8cdd0cb7b6e79f15d8d87bbc3854e1b4dc5fbfff4aa59d52144a6b8849d86dd59d28e3f75a1b109eefff5335f92cff6677bc275e792212c8c577cdbf1bc80186a2340195d051c362ffe0d0df7cf58f926a10ed73e2cf540b2ea838180306a3862aba5ef1a93eb8974037d1e4191b9dbf65834da8a928b4bc43c104029d0e41fa3df2c12d0d76b7e19221a9e5a6bef54690c3476056bcd39e0bc319a54fa90361944b41422df17dfc033e2752ed29f8f77c3249aef3f76f9af656ad3dbff62422bf32e2e6f797ebda16ff585bc417f978dc78eb7c924b456fc65b7ff13e05d808610bb709640c279bf323e714114207245c10a67186ddc5a5cd4c02e1b3845ea43e42f4a1659334fd3e0b0e2aaac070e30c4a001e85e782660c46c0b48fd960337ce1f26ad842707058d540ed545c18ae775c108e08c006a58e8f8eeee234f2af89999625f4400ff118aace77be98a0641d71760c12c1159af23f77bfd785e7b38dded3a3e1d2180842d9506cea44a2be0d5d112917f8b60c13856fef3d206a6c8b80dfaf75c84f4f8eca6eacd292f6dcd9f30df574cd77d638dde9e547cb886d7594c0a6e3c0f3d812330de35ab490fb475b03a484a05a5c054ff9abbf4560fd8a1c59d099704d6e3e426b615253dd5a4b11a2a442526191f1f28f1374343503e47552ca95be25b9184126e4ac4f725bd50c5a6aa61fc8dfd7132a710573de5ae22804948e345864d6f7e0bceffc78ea7bbf31c24360488d4dfe968aaad4e5e77fae22908f1490d891f4e1f6e9b7f80bea714cd6901d0eca490093e47481e0071a59fc3641688cbfe00dda0ebb3f7715085d9f0713f4dbf1d04f26212da1c4978ab925cae01481047408903a4a46977948c19060a856d8bc0cf9a5f4906fb4c33ca15b48cdf37b94470ae689b1c3578f01e712f6e7eb762bed40487a73c1c6ef8cda269c3be6f0c34346e2218b97ef0e59128db21f5a6e3b7bc500325c29030046497d020886831c28893098066839009c8cd7fcbd0cc00ff36d31b9c87b775962ed467366a5ff5ccc2522183cc3ee5f82245e907e2693f32d45c114ff43f044e42141e7a90a4824455d0931bdffe51f8717be41e6af98cf049a09febb30289844d7b3ae01139f5749ba923c37956e9407eab9ae63973530ad71cdcaf31501ff21369ead542006c74d018c2db10f08cb9ba0b9daeb358bd88779b3d058264c94dbc5e6e0721792bea9177f6821ef769d71eaee5c99e11483d22ec7ecec99c6637515a2a1e5ed6359209c8aab8efaa6be57c06078ccd646bba1f92276e744a893491a29645cf4e4ec87913cb9fb402b442631c20b162986a0e04365db35c055c49d2aee21ae2a94ab718b3cc9738d31b09f5a14868081431675d6ec190f7abc602dfa8985583c2fc564e80bf4e554dc3959e7bed132fb97e0661a3b9e1b0c0462d09528ac5aff45d8d01f9d3f62387caf750b2030f9d94bcf452b23acd467231c6716ebfdb973987183e6a13e6236903995e010c46d94422865653bf923e24360814f7c5b0a189bdb4397fc090a3e2cd64b28b8027126931f67c2ddb994fbdb53cda9f3f55a2902a0676775681b3c4bbc36caf4d4376ea05bc465b01c5cb7fe81715af3d3ac800e71bf69603dbb09626ed090619db8fa3105aa6323602f1f41f333ca44b6d91e02c1661d61d279041776d6cdf569dc8476905c157af85f750c79318bcb432200e8784716d9c93bd22eb62872625de5357d99c110171b7608a56d5a9dc2cb2daec7df65121151945df59a88402938a84418f3611c5ccb7b07d5bcf96a495c3ad7537bc52dba82395bf79526021e5723254829fb93161aadd0a46a27922a1c89a1428f03f2c2b50a8148538800adcde6a204c4ce29eb85ef395a4512d5d6b016c7951ea5a4a420dd004baa5c3ee3de908482415ba60f2256b46f7ec1221a8b34d0b93d92da8a675b3c730139a56fcb9b2880107e779d38415e6f7d6a6799a4e00a7074ab19da11719153a114627ffeadfbf0be3d449a26d2209068e74de998c5b501ca1e9bdc0527f92f6fb252f6197f84ef6a1e2df2937ab5ad5ab30ac26f85e759ae42ee8b5b5a1edbf12c5428da929726eb3319932f6833e000513b9e55bf3960481a72db154e56819da01ca8fbf56ea552909b30b672d744fc3b10906c85526d37a920125bfdd6b0ad7212928ea2197611f61acf4deac7b1f3be57760ef071c15b99451ffe2aca4c54cfb1b77f5ef63bc07d8b98a043bcb6a91df3df1528445fe7b69c368495f33d8d63701651a3d431deb8586fbdf58398d0da8eb9ba7eaa1a8fd481d3d639b6f43b9de50885daf74464e80c43d8a7d134df41dc6a35af194b2392d7b38721a86d4650b3c5a07bd2b4bfa5c6febea466c31883dbafd2a6aaa2b7a3f5736b6472f880eeb10a71889c5061ba716dff5a7bf5535ae10cec74227d3a09e290ad83df377c3fc4ebee5b571e2e15f9ef30ac3a04d2002f365a64171b993892e15c88423dff1bb4f83ee8d4ceddff76155b25a6a0b3a60011dffbd656f9e0665f9e99c1c06af76f7ec5e169927858ae8ea832211313c2cc21d8904b1620904449a3c0207fdda5ca437c78ebb3407ab6e829ed5b9588c6dc9d79bb614bc4c3ae5bb4f535ebc79f774988b684af84bc1692abf9a8d4770ab1f34bde66274a6339f9f236d17ee8c0021731eac295c91e9f1cb718831986c1c851c7914735df5581cc67580587ed0947a6307ab2eed2b9063fbeafcf9c781abbd6ba907c038cf1d0ef9b7440768e5389059695c2f2db1bd179375163cd49192f02c1a28f58f917472900bc7d94f2c9b04550adb43cb9a196fcce6153a5b97cd666165b07439eee54e67330842a3d677a6cb6be09b339b965621f73a455f0b7a659d30ec84416f64a80c7a66bc254b5ae638cff640c02c4b8d9d5752712024b4120e060cb016047923f1c9a71c2797bb77791df1f3723a4dd5f21581b62a144f329382cdd4bc1e6172314060d2136618386d1af91ca67b5dd866e5b3a9e64ef04897736fb6f4210d00d77643e1556b523f4ba3c38c6f7edecb060b000e117a84cd84517ddecdf0fd4cf6bbc1ab517b375278bc3d2198bdb49826a95cb4dfbb3f8d9bfa170c01484571495b1731d3d37fe5052e923a288230c69b8c57ee16635aad63be63ef94c321ea00006db9496d3395fa47bc06d15d8e4769f6512af26d00ab83f48d1db1c17ae7a9aebb2991b58291af0b617a826d9302deb2958f287a8ae83ae8716a0f822d16cac70c47af5dfa2f406fd2f21a96d42493e369742fe74c40ea7447e6a9586bb182ed39c21c7f8c4881922e7414006efa048e9af6c7a8fdc32e53a73822c6ffc82cfe5a4d5379f26819480f47bfd66238fd978be4fdda6e07b1a94380c1d215c41f32ad6acf307bf84af97949d235af03d0ab9b78c9f88440d55d053ef8d5188059689edce975040d84d8d96cd168a58e4c42492752788208a26485a7bb3615dd05fe24b0382c6c4673521814e0ef408225015b66582cc180da1a15d86da802d37ab19f94301884f9c30458559148b89db027fb09b393103548d3bbeb0396a5d65091bdf860852dced16cb0358b153808d3587160216fa60a4685458f6d430696b31c7c17bcfb86cdc595ef91fa1e48e4f421b259c61cb5f07366d8f317cfe0f90644a417c129f599cb793b18c900740a736c6f965ae0c82e8007d136bb137458167ff4c03585e7ee98f38bdb841cda0b396ea79fbf09565873448457f27819b9862a7bb8d62e97060b6a930c0d343884a8f35b6917008e0531ab747203706efdb9e796a44c194188a6ea28bb16384300375855a41a9865c2dddec9eab00ca0656c8ba4048a149c6d7143dd70e4ddd39688cb08e12b6c9c6587a6966a1c4d0c0454ab83795a4a719b5e8e8ac984728e139bfae30135627566cc986f8b1a10be2ff5a08652fca0b522c49e762002692ec1c84ff489773a0c5247dec16fc91236d6717e10d8df82c70a415a358d179cc3a2502943ac78d7964ae23809be2b84ebc30ecf3248ca34fa51909d84fb253185a360df3e453fa926568e1265e57288e54d6786af914f4aa07bc0477812c819a41f2b5add075d914f35942dc59114ee50f1ff09a38da273a90453a0665c3771db4ce4c4151a6cb5f60d064628818223734e7deb20f743e296bfa0f91e606d9cf41d5722219eef7e83b20abd12825ae3a363bd2fcbc35cf91e50ba431c4344aeb77440b24b2445a99524829f7daeb3cd64d38799a229ac792981f014c8987101ba2e44734609190817de801a446ba2c80ff7774d52de628162c90e21e01276a0159c8978964e8dca8754a11c9548d2ae98d452b4cf0a32d7adc2a157a12cc62dc309ed44379d00b58e98d823146e014560e10100ed64e0d19d5ef2979e9269eee04782336530eb2852a85e10fb048c93fceccbf279220d2e3d1b8f7c912ff9ba7d23d4bb75fb7676a7123bae6a03e95f90120fe6b8266f5ee70a98070772cafb507a1337f6d91f920b77cfbc25d3d11572f76174a08198012868ef6596b6c1e78a1d69e979d3c9e6946104d6b6dfe9d7c440076e729f1f1b2895d261b3e8d18a7852b84890f895e06e2b2c96acc43edc3f8ced10374f60355ed9e5f74d13346bca540d854782ae207363653f05bd2cdf1be7b1667ed1cfebe4012dc845f7171f4c0678b4653c9e399a662aadc681ae03aa3e91ae979b091d1f7dd8cc56ac97fc0a81ddfea4c3a46f4c5acbc0c6526c62717167f06a2e2d50e79621967539f39cc3a0ff052d2fd5306181a8bcfc5cf4e1099079602c371957ed0805547d4de6eb89c5013575539e0c56d8d5a05fe30a4403edef8a01b2370cdee658ad7e40117ba6dcd053485081c1a2ee9a5e7d5e461e7fdb068fb253b40e3e410b014b9d6b7af9f5091a82c1e0fd1abae87c650da1c372875a2dd87d53232130a9bf86974f9f41231818de5dab0bce47d6303c2ceea8a9a5d93735100a967ad778f93732c638fd363ce2ae227af0044fac60cd21cde5fed55cc569b2aeafe397da4f812b55c73d9c0bd1f9d10c4cff54f0b84bfe1cde348f9abd18807ac3dd4fb6102eb638ded3a3194e8c5c6be5a9902492f6be9ff564bef6349a772c5c9443da2439f76bfbb922e5a9eda5567c0ad62d58652523963825ceb569fc98177617c6bcbf70b39e11256914e16ff3eda85bfbe973a627b7601740b003b7a7d3596d0acef5bd4f55f04d639a1df3d3067f6c0d96ac981b63345b7ca7f8160d11d0b49df4b85cdf840a34e33ad1b2ddfd047650af550cd54dc8d456e9c3bf43f16420a3f032bb9e8d52abf1604d26e15e2c4d37f57af08bb4f02528472a9907c77b8e9be5bd3fb00b6b314a6964ca47eeba3e64b7a83fa87ee07cdc98036cffe4f6fd608623155eefd2c840cf3dee971a92f6facf4672806d78ed58fb7fb8fd4f026e1bf5508d8a6bc244d1307f0b7bd290bebdb2b656bace8beb75296ddf609f2bb80080f504a0823b3ecde05aeee5244d00349008b723930700c086b5db9bac176d1059c0d5638c8ab662e751e1b072c87883980cacd4b3b9a2faac9fd73c6224a4d55f2f2d2cdbd5c4084072e32ee86043ae99dd61553fbb2b428d0bc67d1ef30af1fe43a63ded16a156ecae98697a0107a0a2b24f4e0790b58892da1c9e6a573d8b7dbf52ee87d097afef1ae9f573b91e28b63e7d5a31f0a051b0ff27d89fd79a063d757a5443bc5ee3e1a9aeb93496ea943c00c8851eb96aa085ec48b941c64e8dc66c75d7457304ab3df75b5e106f318eca6fb8691bc7361a1736675e25e42780e48b4eb360a0d1640d7c1305d4fed1f2742c0f8510fcd5138a6e00b3ff5de598b4e1e00a82074e4c0a6508646bc7471ed60122222d6cd3dbd0b4efb0aa73503510b3e91499983c68b4d88b09aa01140bb553d3f2c50a501f72aa66c4d6054b4a2fa7f4e5527bf6874521696412692043ddec81595b4448040a6db4a8e3f849af0f22b81b28c63821f32495de08627329385972c34640f3eb913958fd9f9c7fbe1133b95350a669bbb5d21efee8053308a054d414f05e902bad0d1783f5897e6c9b2df389031b70bca6d03d9f830d42ab98d5a8b2b04b081dd0d285de9fdb7938ee8e876f9dae8b1996333b71b455b450336c096c52c38ea9389e7b52350e6a7dbbada4c950cc16eee21f24bc808a3e0d76e00ce0151ab88395784d641598bd439c584e1631bf17944a3afa30d75bd9f0eda8b8bef442b36387388e266c3cd61494c72052f87fb279a1e85aef347ca0a5daa20d83d43685e8ff53ad8d636d6b9114c14d555cdc8b85fe928af8a647c60a7b2dd7cd478b9b2e52d878f0a244490028440133210ca05ca846a511886e4a111808598037370f8a5b3a5ddb5442ea4314899bf8d1f1f54799933c4858a56ccbe05dc6fcc11d80227c82d535a6a9d00483a24efd3cd176429ae3193dc1eed44f1b01263ed090881464c713061670b78313e65625e632e09840f4cae4539bd630b5e175436773c8c21b88e8142f850714770bf4737181bf477bfe527d23ff06a11827e0e703ba6d320115a588371055d3735e40d92475f04d448c0932dfa4d81184f6c7e97e247b76c76c7a08e81fbbba53e4f922b763b68dfefe0c163897008c24c9ad4a6d0e80937b82aaa3663253d56a7e8bd248f2a73b408557a407f75bd373f5ef03678baae75ed6bd3bcc6b59b22ed0856a8746592c6acd4c8bcac2e8f691776e9e64ac8ef4006ffa81f7bb62f358716e129e82c0e9c1ebe09f3f784ffd5a01bb841b46d387974f7116cc984fb2f6dcec74da9dfc75d001a865882ab2d2fe92f4f4d2440348825e2644ff1fd5ae53ecfb9925dcb9fb9ad4414982a9937984068f79a27ca5013497e8558743f5c907247417fc4171c50bab408a06039759529bd47be49b269122dda0eccf6f80a7c1f6f866efc6c00d42e4256c8497aed102a1a7ae8a05aeb2efa0b9b5ab2abeb602379e5a126e74897e1c498d4581c9fbb6c791c78767069d5196dfbdf2fa8bf9d6675089f3cf8c07e6952103f91c3d36ddd542a3b11e01614d1adfaa3d10a8ca0c689c56d4f27045f12df2e6e38ae9889d10023ce2ff7ef002536a0cb60ca5471144ada1203f1654d374b741f213e0cc93402a2afb5e34ddacfa13d62661572b5cef8d467bacce6d7f707470fc8145527e987c171f1eed58954d57d7a82525883612bc9d30b9122dfd6fa50f1b950e0e80cf26c3a4046a78ece880e9077bb53f1debe2219181e129036f463aed9746c80440f4897a6ba191e275abdecf39253fa0d10692efb4d8baaa2671de19e752784e508ca4b17b50b507b3d730fba8ba68b39b76469f4fd853fcc83f55cf3f90f008330fda6d277345f599b6fdd1fdf7810b0a3eb7b54b9620d115b281819c85246461a7c608d376773bfd3d0c074bff481feefcdd8fce6fe6056ce869fae8420682e049d01387a876807467c84d8564fd1025daf5ce6ab05ec5005f8975048c447232a0306d318f2d399e14322818adb4439ddbe6dc3e402cf1cbe50e3990d56c377a90475745fdf06c25d3e7088c14ec3f83a7dda5dc4f81dbd21cbfaec7c2e218a674f9cc06cd23817488e2e0d2958520e9000306516f136d7aadf6a8aadd1b662cdb7e9b2b19b0024910f5817717900fdeefd398364133eedabae4d27d1c42edcab3c0f53d7931fb4cfe381a8088516f05ee5768fc2f6c257208548c7f10b21b711968043c5f86615d82f4f50a445d028a039a6b5a40ca59261dedab0798c2150cf529856726b86e126fd9996549793e85fc2e9ac0f6d696134080d7addeb0ced535f25a7d338cd1ef80ea16d47b9aa2ceb5edcaf32b4d56617e0940d8cbc3310e7c808f36d972efbda594724b9976fb07860607064a9adc44e51802e54949958f129419a834513844d5d074a413d2c5c50b4e9ba81b3531543bb28880420c54b058516108113019641033044ad666d5c30616b84220d30547ca8f142413ee065a17a594564da2ed7a94de1c3c6e649bb1e4c58c286a78b839d4748872a7784128716e188ee1caea18d359209bb9b0c4052315c3a822d541c4db2e77cd6899c192441b8c2aee9801762aaca6b82d355083aba839af683d7da0065a5d20c03b5a341d4a3c1a76549459da66a11c7fb163e9bb5c68258ad0b1d283983a604e556b8e74d941a60c1c1b4e6445c6500d3932a4c80e3e7851400b061f7072ccc8a2b145080a2522409be1438ad3901848504a6285aa8d16ae2b1a0e2e10012322bbd036a91752a20a6126285505d4607a2e7ea0d56a2950a38728466458f2050c129d1f4194a029b3c523cabd5298814cd69b311068ea210e1a1d4e40b880a5cc89138ef874130e0dce13a594524aed055857b38bf3ea9a72e88609646aa4b9d2c149033e64a141070d1925512cfc30c45efd30d3596bad0f5b945a6badb54f328c89f31bb62cd89189e20aca45356f4d9235a754c9dba9d8aab14035c342e109051f78e61790189a2d43656df725ce85f29485ca5a6ba726d166adb596d381878da85a6bad24d0bab7d6dada24daaeb5560c3f8e8690cd12362290215d5ef8c10911119eb0a161466c5438528384263ef4786185587bc1b554562a54811a704f6adca0934754134a29a555c50d0930614dd19a12f6c446c60e636280f24215902c879a4b535e03dec8a162a3c60731236c5d749ee28899f2c2940b5657b074ad416c0dacfa31a9aa22658b3e5de05f3c4892e608992c136e68a9606263052866d4a819c181ec908585053a478670c911536b63858e1c3522bce0b909be013442a64ca1a1a38a8892147af00213668c0c4fb384ac39b9acb596d64569016e9001072e24fcb8b1e3c59e6918ee16382e300141c79429535f2ffc47130a6620aded429fd4625326e440068c1b302bec9065c710333474a090a52bbc92e5071f5aa6ba6461199628958998d1b3e46acac40a6a40f524bf1f2bf4643085290626910958c8e5ca52bd22f5233ae5ed07ab1180d812a1498e1f6460fda8ea5ac23564a92a022f61ebb1a56628089114e0fcf0444b102e3ed4c9814a182c565a585c24bc0712d14d959b2b37596eb6dcd4dc74b901932064794f9624786bb8a22aacb6e494d7010333e0be90db384f82f03542b6e66b4d98d4814507960ead998d2a6e8c0a1ab38738387471d3472985207608c32aa18e923452d8c0a0830f2d526a4a0843c4a3d65a6b9368bb9793a3a5ab1c33b53a199144db92ee8553941975aa5241f015a2a2d07c52f0f9e9a41334759870a9b3438809127881053a5eb4847ce192b95347ab72920174221a02a7235350763029c262cd142eac223e9abc20a604091760a14c9d178e00a1c2030d50605041cacb54952fa775545ea2209941b5c391365978a06136a29c80c089073466c4bca03bfc04dac603aceb28f014c31c356f9eb8f0f08387ae3f4cd8512242264a13166e00e385c37590a864c2385b0e2603389961e98a9a30da119a030b06599cb4d15204051a435ed81c57cd094415ccc8e14390375ada3051923a13020a55c280f968c242a3048e2b9b80599998a5562f0c52b4aa686189f3c175165cc599f30a0c609d055555346b6b66209b5d512ace3009f484298f078c465d7489a38424c895b018b8d818f36506323b5e3c74a276b8f2f5840cd80c3e82044a56b054c8e104adae3663605892f5e582901a6136cc50739b2e9bab8d8bf605861a727061d2fa72e2924307c044030427375260e18cdf00d7f44c3b8644c88429871f33c26c40b3e540a506b5428d2e2d3374889824112a6f462b3e52abf547932b5e50b482c50a96952a75b665eb29d42bcdf8c2c34d901a3b4c29f3012f265d62f042abf2a48586ec22dc1e4f3c500e031f7494ac4043628403233d8c6972da020488a8eb210c612d4928a77360d22189e754a785206a9430a3c80e4474b218b121448c8e175e50ae3a9a521b5bb5d60ad6754b71745d0262cc096a830f994f8e17b66426688eb1f2e0d8363824d1d6a30d9438b31750176c70b2e50c08bc4001c143831d2bf018d3431d1374f01a52d65afb62298ad22a83b60f822d5191ba22beac96acc00cc6d45a6bbd5c172b567670996383141c9cc042d02684119ab45027cb0d0701c94e5547c1b826ae46d4034010a2c5454acd0c0f1b66a88d1aaee0cc0c513cbc40434a98d398d5cfa987284c4e4b6ca06d3a8889c12a0c952c6ec2bc19f21914d4ab46d258ea5ed060121d80264acc131e39d054b1a29155820b6bac3859b3c3070a2f7ce952fa9b1aa65a6b7592aab5670d551a2d285521b811c309659a6c8c80c4c796901f7588586b2dd524daae0715640a9928a71aacccd952d384c8569c245f7e0013fba1164110d38232530a4733d8a29a734a9c2e032a51f4de4ec519a62bc4e1504da2edaa99d66e99535b9832d19b0d3841090e67a4c8411264031f4c765812f5440a173ad2da31336badb5374049a28dbab86166d5c8a1e1a910f309c15a681877ca506a1422c91398a750360353a3974b160635e812e552c5955aec461819ea98c0a500c05310535d5a689876284989f3254c0d210409628915162223e6f8d45a6bad95009787301ee67cd570b243c65a7bc19c5a457e0398ca4009f68a9aef82843a418ef88025e50d18305349b8a401424a0e12422028a5b4098cb3f5ab3e36f8d459d2b572ba4797053f42c094524ac1cbe609141ada15161515be34417684a9c16107352a803340f9e4c8e19a7832504a29d324daee94a6cf05f6e91b01c1d908c89e512abb2995a62f6b4640aa11947825628957e29511103f517d6a3f3e024c266595a471a1876badf4472459bf5a69a59ba4f629ce5bd234fd24a9fdcb48fef2f163fcd5ffbefa5bd2a4e71dc308f0b4f40ff151ecf1737285f4af9bae2fdd5ffa630cc3f1c8c9a13ac6fef6bcc458be649238b0b423924cbef89f946f650fbd2b163312f8322b75780bfc5594f2c7cafe0794b49cb7a8b778b36b19f83204c86a16da79faf865762159cca2e7e9d940be2f8049aec05f5fe2f016d6440e714b1afd2d691a7f6cc4f848f69e917cdc8effc7c79f3e96f6f1917c249b65ef49e92febc95be4e9308c4f56c5c69dd1480e710f8e2ee410f72c447f8937f8b4f41187967ff151cc5f1cbf97a3f77120b518e3ec5f7fd3c75682b12c996611de3794ef39c64c23ddaff74310016116eac0ec42fe2c623189b81745fc9a1b4de41063ccb4ff8e31d37fc1b72cf07352c698e92a7580ffbd64923abcc5a6bfaf18c62769230b23cb42732c3457b3d4e127e896a537134a3ddef35545bfdeacb84c7599a351e8cdaa0b96e612a505a037ab2ba79a0675ecafac6690d216e8cd0a0b4c5b6155e921bd59613d692bac2cfd69e79ea8f85bf7df6f7afbfb81de83bfc915e06feec999345d923597793b4680a71de3a3a0f79e932be4a6a74bf9dc138861486ffc308c993d983dbf7fe7f7d087c7a09ffdf87ccfeffcf779c63ffd3d7f6fcaf7fcbdf92ee68cfd07da3711ee528ac0722f00e72d75ec49e42d7ddcdc9396fe9ee5c7b6678fbd4baab7ccbb2ac9f8c0e7fe80d6fe9c11bdeb2721f97fa0e5b8e70653dbfa783ece9b1ce2a0f4ae3903536fd7362371780122a4b6bf93e4be7a7b79734fba7e92d4d2ebf1bc49279d54becf1eafe7b7acd57bbddfb622cfc3ae67bfefcf6fd16712d198fc69edcb2c34e2eb7b8f62167950e243fc038d1f0abd6c8887830dde391ad7c35bc89f589ac82126492d9fb4f741630c1fc55e6624f9411fc6c6edde7b308948fcbe5ae8375924f463fecf5f22ef2be797f0269eb107bda78f624a4f7e89bc652d049af2eb87f8ae824639c28e169043f45988d2fdc4e67a1c05c9173182ef63fd3e68dcb4d0b83f2873343954bf08c524a21f22ef3bcbfb02e52dfee42d8679cf7cf29ec9f2fe9ebc5ff3e43db493f79028da8b4577779b91ee7b2ffaf016536ed9a565de49dc176462474c3ef832c8c40e3189ea5846c26fdf03ddf33c0eece37caf286e45db4624dfdf31079ef8386f4fa2fabe9885baaf6f1fc52cca4fdf03faf4b7bd6d49f0fbf3ef9989df62042f4176da24a2bf3f827b4d8862cedb24da33bdb79af6be7e10c769fce16f59d3369bc821ee24aaf1d707bfe2237f249cb73fc50b00b5bfd3ece3a79eb70694b4f7b1076dde499cf66a4e9bcd448d37a27d35ce3b896aefeb7334b9c287b7d834f81c8601724ffa1bbdd18309c821fa7764215e39e49fb699f3e1276a76113db8172a58d8a49973c2539a8d4d0835e870a262e58b959413766a7370a881030e6e8b93252323c749b4d65e30a7562d1f4a297d53d5bdb9eade6475dd054836b0383a66383223c7902a62b4f8f0150228348ec0c0029147f148d8b2d6daaae276792a2433e132c606292a3f56b812f5248217212cd02027085d1f5cc18d48a920c3fc511a4104a722468840e100460125549dc93242102c2456379080d24555455d895e06a27c336b523baac7931b458224b9e181385ec63c2181014c083810e992f89312617e10534b22c5640689197488a040a6080f325aa64c611e94f66850228b91223310d19105c56683106aa0e1050e159013aab2789c8c10e705fb5d35950a37a4ab488d5a35d0a1324d6e049a5804870971c2dab0e14284e386a6385fbeb4e4b8d2d584a784aeb320005aea9a1a6b70c8239f9b2c20294d756a584342121b2dd4b092e2550385adaa15463089d1205e28e556704a9eb0b6fccd96b5b684d5cf108f3389b6dbc254214a280f630290b01f5670b374e4ca8f5a9432527208f3254ea38ac6552c0a93f765e9821a644d2ddd99d41c24354431555c2713219b8970a126134175dc9a9d4576cc13a4912d2f1a4cd9072607314dd0c8b932c649059ae8c015029034522564910a80ae4aa43610a48c1c6c4355e776e5dca60238a98a4e452856166a0f58528b520d9000822a3d5a786363e9c59ee930203c614b68dc5026cc11af31584a78e149383003b16ed9c0c27080769b928957ea765fe686386272d8788106101b2364a103040e0c6aa4a4d11509a594365d8197524ae90c3184609c08890d58d83c45e9f00448085ed2acb13143095a5552b5d6ca3489b6bbb509efc1ac134cf03f9bd57adf524081ee5e94cda9bbb73c2377dffeceb86d15385217c6de69b3c83722fffadbb662db86f6500be35408a99d285d3bed79c7a0606f67b4fdee392b6f11bb1f3efe0ef07356f82b8681392ce0c8396df41e72a8be37fa93ae4ed3f566ceca4fd89a91bc4a8493a0f335e597acb28181f2c12dabec4d4bd3044822fa337b15ed492af3c7e514952a2086e1deccdb2cda767ecf3e3bfe3c9ed9cef7e67bde4baaf99e9d5b8839dd437838857e5aa1396e5945fbcf99dd3352f8b1f73c29abdcf547a409fa145595cf10928ab7b0a094557c3603a9e73fff7370f6fbcedef3a617c5e7f79d3e472f6f8fa23d0b057d7def7f16b99844f4453c96f1cce9537285f7f22595ac226515edfd8ffd99debb00fa4d0209bd88f7a61481f1d17ca4f92fa76311797b1410945f3fa38f2ee410fda0b10072887e381e606649c54f50e9f9161ffdbcfd3afa8718c19f63fdfe67dcf40c68dce0cfb8f9147d9caf28a9b80d251579bdf06b46f2dec64030f41cf462797b1449c586797b14ff9f451eac785d7513b069699b39cea368f0eb46df0349455249e2a2d4241559c54501aaaa249599cfb2c8ee4cb76466dda84eaaba87ef6eef922a6bcce58dea92744bac9459a137c61e1ced6360166dd6001b569231ebeca83c70ce1b85a7f00465207ecffb9fbca55777f7f0d7ea8edf9b54ca4e76547a775f397ce77752dd94c519a9e297f3bbfa6eed27c96e89ee7edb8a38b011d1066c4518980cd83090bdcd3d537e67fdadf5f949d0972411ed92f8887f5a5925b76c44f469ad5fab7df99d949c7327c9dd2d89e123199396674efdd86e3e9004e796592565aedf4d499bbf0cd4fd4f9e535f77a64b22b37c46a925b7e4109559dd775247b1f7be1b3d7c70c43de306f5f6a52d4a0e616016c92a0e6c4552b6a4a99455b36856c92d5bd1dc72460445d11dec926c353d7fc7d86addfdfabb4adc65a4fb31c08bf3cdfb1a9136774962f7ccf6aa59e44b73cb56e4226c44747b0d9459b3080393887e97046f35ed1ffbfa1ff8fb1ad1df872303b60af0df580e5d846ddbf2a559d4808d086f595b6d7b4dd3c74097c45bb8fd307749fc44c5d608fd1b255724f9be6e8967479925b56496ccea92cc1057a057711c28625fadf40bbf8f7ea1e3f0a6f0fbf2761cdc177e1ffee7e0f68da133398ecd811af426f1a57b93e3b09bf85bf872dca2920cbb3993f5a7704402776cde4adabedcc277a6d069a1ddc948e1833cdee42decd71d29653cb2bca50e1f87aef96e367c309460f6a6b066219e9f4562cfe3facee4381c87fe5e04c507c11e973dbf390dbef79cf49e8cbd8a387ad3f38c1184e3d07b9333893ba2377dd9bf2f1c37a7a9b86fec8261ecc35816eac459f4d37a5390891c8e7f73da7ef85c581fe7cd696ff2266f721c1fc1bf37a1d8711e1a14d4fc92b5d935bfbeb8ee15c5d96c7a49599b5ef30b4ad666979c60d36b7e69d9e35f3140ef37579d7166d7049b5fd36b7ec500b9bec0e935bbe6d7fc9231402ea8e935bd6697bd5cd38beb2b0618038c01c600b9a6d7f48a01c600b9a6d7f48a01724daff935bd78a4119611940ff8464f31f97536bb9e8d80e0239e2a811841c9151846f53c0cc3bfee6563ecebd8fd37f27ccfe87dadf46912d5af5fadb2fe37c5a34b9fbefc24bf6f7e9fac7d6ff4f425c93922e1ade7fbde5dd666dee450d4d723ab5bfac8b2cf3682d2f5a5cc154b59a594723e7e59b3d7d5f7aebe1b49e9dd7d924492ff81aea3fcfceb368ad2bbf3aaecf9be9b6e04a5bbe73ccff3bc9991eacb1532cff3bcf77bb7222f6b12590e6a16f2f9ee3d512afc097aa05abfd69735b9c27b7fa3276f51dfeb4e92db084a7bcf23e2231efc311ecf5afb3628ef59086beb773c9eec1efcd0b3f7587a6caccfd36d6f04c45b482f834079cfdceb771fe67d2d88618046587514afe4907d9f51c49243f6e72866c921fb2cc46a65578d9e8e78fefb6e94ef62cac6d8f78cf8797864cdfea654dabe97358b44a649647fdf2d7a5e96b6ff8e8fae8ebd1d3d3091691689529388fecccb7b268a3233ed8ca1e50aad1110283dbffbf23797fbddb946402cde1e98a62f4acd224a3589e8cf66a29494a66f04240685d2fe964b637b2d7e4b9ff4e6b48dc5a0505cba3ea50abff3df376e51d626cd7e7b4649dfaefb0cfa696f28a793b7b03f437ce1ec5dce660f3d7d7a76f2ef396538a7928cf95ffd6694def59b1cfebeefe57c9af3abbfc3d943d7bfd65afc09e524a971469a1fe624a93f5b64ed6cce8c67eff3bf203bb350900b21112366de73daff7ed2bcc5fc6fce4da287b60f24bf9f19697ef8591ed9cf4f27fb91c8d6e22f6f07bfa7df8fc822f297771215ca184f2ce1389de61d0f307f6f5573d2b4cf0f31e29f8db1f7b1820f0434b3acfddcee45f9fd74badbb6c5ef33d2f7f643ff6e0e3fb1f35c8c17dfd085dda8fea6d3f7619e4e7ea2369dbc058681670f1705984eb52007ca41d68d4bc5f6a1d7755d47bbdafd76bb4e4aefd64a9f7afffd065568fadfcd495223f906f3fdadfb72924c21ddc63a14dea2f354600478fe317c04faa6bb2d858a10c3703972184647bf4f5492f1010ab955dd11e9abb5767f1f85b7a87f59e8ddf39dbcff895fe577954754a13b79eb9753dcceabb5be778fa2937254a177cfd3df2ab4f7e0f7d8fb14413d5982f8a83e12f8e10580ba7e0a0d781886b771a5e0ee1dc1d9e123f0bba7a35747ea29629b9629fc44f89f0db3d07dfade83e3a653e0b18239c59753f809fa9ef7293c15dc732944d1633d7af8943d2c1790d7fdf61f681fb43d53367d66eca7fcf93d79765efc9977d20cf20e3c8d73f5b0331c837e9b5d2519b603b9a2661dec4ea139fd76b915ba26ae1097f6399b79c700edf439e79c734e3b7d8e5b5492511d6c72d8dadaf52e8b4dfc76aeeb5cd65a69adb514636bad4d9a775b11bfab1ef19b9228f172c3e07fbe6f188c18e49f3ec79d348522f897a003afc97b9deb3a97b6a1bb95e0434c00d809ce69012081ece169fc448d608c60e83d8dd7f40c4d8ce0e791e7c771e77f14bfc4f8f324c6d88f187d5ec4287ba1b1e767387e1f14d4010d9181dc33d0ed1cc86f46ea5e02791ab97181dfbddb5634019891e45bec17e7ed13c8ec69fc04d0dbec235016f2442abf7a369143fcf1a1da5f56b57fcfb86d15f0ec8cbe55e02f8e72abc03f36725b052edf3ed2c5f69fd6bfef69bc85c5d9d374e06940d0b9e4f87288be374670a9a79960dc22a059ce68a104695f6d4e6ddf196bbf1af5a4f4c7d3fbd07c35b9c29b1f86e181ffe1393d2f8cc9335e2cfcd078b1d0c7e7ab698fe79bbfddf3d05d498657ffbef4ae3f2249ef39ec7967bc85f771a1f116f32bf6be9aae6f6db6d6e2cf419edfce64f1bda1e765a11eefbf33de9cfbab69fbe018c347e17b460a43bb33a3642e7fb097b783f2674679d23d1f59d487615890f6a1914f3da38492511f9aef8c96e0cfd8685f8ef57b10d43b2378c5f0be8bd2c30f8dcf0a862f3106318831fed0604e3b93d340f9348bee24a2ffa1c11ffbed4cda82bf71f8749ba3778c6d8ef69874fdfba1f9d0f889fa168379731f1a0cc37e35f924a1e4937cfad04cf1f8cf5598e5c26258aa74f5c13bcf711c97b7bd7ff3b6d902fd7d4eaeb0d63e8745ae701876e4300cff3ef942e3cedb513e3802dd0f113442847d122fb10162798bba7ade332eefd736ef0974e538251931cb7d8ccbb2e07fa039d97f4a3a3676c0555dd9980c14b2320ee4844a70e3e6b0684b228bc8fbe98cc87bf6260805f7dbc6715cb61fdb1c67392e9691a6b57973dcb845cd4925191f7440735273597acb4f9248dc7fa02d37efedc03fb6b9abcbbdbfbc9f378745cb1f1a43eca0d0f7fdfefcfb7766a4df49731be335b2e85cbdd9aa74fdbdadd19785d6a108c524aabf371bf4fd6dc34068c7a0e0eea419e34204710072f36d1612f1f2ef3b6dc47fbfcd2e14c79f6dc0bd7dfb1dc815f7fdb92a6f613f16e3b06c0e8bbe0f045aa00fefecc7bc2710ff7389da3d8911991b7139c9337249f6313ee21e29c6d9e76ee6aceccfec8bf643fb9dcd23e47f5f18d0e8a38b18bdc7e84f72a83e0bd172d25669fb161f013df872e4dec5141a773e68ecf91023cfcb46d9034d208efbc371cfba718b2310973b904328eadfd8ef99fc3d81de28f4f6db5f3bfabce3a3b93389ead7f7d913fcccfb67b1bc67d5e77f46a1efc1dfb4ff761ff7ce7ffb58798b33974bfc9a85fd1ced439afbed35b4674b81c6bf6350e01f9b1a6724efef7b2ce63f2397af5c317d7c64019739a864ec975639a814924a0000800033170000300c088784a3619e2a52f70114800e61a64e5650300e462381380a8310860118064010000010046118848148886422d706354100b56fda9cad943b9dd2ba51aaffe238b396023bf1e972595241ea5c5a2d85d9498d17d8c03928179b97993496fae4717d50515ea91341d518bd63a552773a0fa2ef1e9c3754a54d509bcb124cd3b0ab4042ed6cd26d9675cc00baac2258b728f894a315d3a656cfe6f80d87f047512dbf47675d59047472d96d3425e329c580b6e118c0de88b08ac2f46d9f00fdac2387fbddfd7abca11a21eb204a3c42098d19091bd151972ec243652cbe94901d447245ce83b04b016152bc0017ce5730af119770804e37d9c33e200c2f11da2e86b91e0b903d099296c7c05af7bae158f57cd0b432476690bdc16485948651b7ff44e539adbcbd852314627d7f9e5ac15600b890ee757e9c507d9eeabee3d8a8bc982be08440bd26a91382cec8b20bf3ed2220872cc738623ddb2e89e335349dfbb11782e4adfe269a3af3b816b40d0286dbc1cddccdd96b332f971de8ffd01962ef4585470f8663a390957ea3b0023715c8ec6c841cb5668a703c1831c72de64d04ea6372001d992ec10dd8d08c54237718da33b75009557f05ff901acbbc47fdd0ad53796318fcf79962983cd480625be6510743f8f060282692a0960c2134768d06da3e139ec172d1b7907fab9dd6cea0e86630d66380b6e9df5bf96b3b6b67f065fabc4ee31c163a73b960471f42b72fba9195e7fb7c1b5c6a92f457603c406738a61373301e1ffe131400153162be9b5a926ea4e68d1d29f52562b78b53a859062cb1e32afc95258e5b4b388552b4a07b0fc901b69aad366bdd1fecdee242e062515d6321a5396ee24b8d510c6c4d13d645caef8c63592be35cd2698e7d07942e729e2715b87480f8f4ddd58d0a43d3ac9b8e46306f747e636cf6a8b5207d4982f222e82894379bcd7c34d1f33c8e79c73eb99c26d7838b28fd76761f54e379c08bc7bf0bf417d900701e0fdc448ee0916d0a22e40e64ec6ae535bb21b8dff1bbfe462bc72ba6c29c7cb60f9840522236987bdb3c8b79065a3c08fc19a6e49bd847e070c6c388113a71cf05809ee1556a00d97859f790783b95a1a14b0f04352fde3c54ec6c919c205eef409467219cedf40a21405c587e12b8cb17d6e4484a464a58e4275442f04a21ce4d1eb286b0ea336c9658813827a8405abbc7bb31dcfccd15a4b91c7c868f305080246d6249822011de5c6fa11e6ef06f2a50380cff27a4be94d463ce35691fe9b8dc949515ceba20f634a8bc778a4d89454a12fde5be5cfe311f74021fb5da9003c4523f640ff803998a231e25e62e1ecf8a014820805ace81c21731dbdb5d69b9b8336c32f60e54a50cf17606e0b5c6021a4887946ca3e1ff27740a2476428cb7e58027d60a642c3afd2b62b8ad4469e0ee390f0a03a851c5fabd56266f35a0fbf847c44a1d6a1be17aabbc2b63575b30b2e9070a23f98523fa77a04a0214827dca641059d525f0e46538d4babf717d3089fce0a5f50d68ae0376070ba921906ae00a759d1d7f0f17096a54b3941f49c704ab850524f0b324de4639a331a6d166fcfb7f7c111929b84650d69e6d97ac05313feba0c747497001e118528c88bb00c144b18a36a9c2a586a89ecca3d345972f354d3a6c1ea61d5924605c33b674c5fa9b6bba54e52e471f614b08d6502d9c50fdc281fb91122265bc753b9cd1c3fa867c0607e3643f9ca9677cfe915dce5f2a3f42ab26bfaf7e21453781e9f2ef8638b924f5abb5379386b2c499d5c037bb5d1a132026e763dfb44092cc2517bf19de9a82574da705d87bd37c86472d113111702c81dbd0f3b3ba5fd9db90c4975e759c6f4359724c042a13535f73955c4a6649fe2be31206370739e01b4e3bbc3870d3f4e78fd04c4c7462b568871f4a7944dbb11d137a993d07712521a0fda10a178d5e98e9c805c35e518187e58a29f2e75298efe1391568582e82a2a2daa81268924f928a3bf3483f0101de2ca9f535f4720d73296daac2da957447935d36c3c7d290f47223b46505f09fee630a15347924266fe160a514d034329822b0e1926eea5ed9d69085e4f770ad4dd2a86c3aa6279f95308ed19efe092be22eb30c08bd4149da3169e227d3cedb3847b234bb304839975147bfc962a00cb0b2db7a669c7b266fac0422ee11d69631ec0d7b2bc5fe10224b47c901c65cb40be4feb766d663bc4f14e8675cab8d27a3cd64f3ac31865fb262d197194735fe2b8e16e83b0ab999ced9c4fea1717b0ed4d14a82ac9a204d44100c6b13fdf818847597ab525889545fe3630166f088f67ea1dc8785bd0d0b780e642692ae3c712b6007f6f265b15cc234c1ac3e6e17881bad9b60c3c024801c5b37add7ced956234ef5cbe2e66498e51606a5d4e4a52e6e568c40f0b3c6f4bcc56c8bc91519bf0edaaf542357e3b069e4d44a4d233e78d273a1530c1ba77f2b5f97de0817f68459379d46901ac80dd3c7acbf4a62dc322c3c6f117d3a7d07f5e39f216b927d16b57e76cf02ecf30fba5b3d1cbead55ad982864149fe6c2264d25cfad5a91cef55a41cbdddbef4a90cb859535658378e7cc554bf49a7ca1c62fc5ec2bc95eb33fbc6c36ac60c474062695e2719079c413a83ab80e4e0890820796ef9693af21a41b8192158813cf23057d4cf0800b59dba19e59f203745461d814a80c45fef338357b5b09912296d61b173e1dad6df14a64d68184a6fd2b3f9d93e1c5c90c10e81c7b287520970b8c9237d29309806d52a42456b3e31e3d9bf511730fad6d658f053d4a256df264af575d803c1e68033db8749731f9e9245de263c2ca9ca19a85b0fae669c33b37a41f3fb4729bd0e2507c10550bf377e57ed926616c682d95615b8afb7b9e14f808820f1930810b3e87c97622d7fff319fc6a40b6633f419f51f03e41b61b1a5648ce87dca6dde8d453c0b64b4395fa015165ebf134e2ff55f2a7b5ae08a8d5a09c596ef5acd9bf41b4e0e750275f3dcb448b7893da0aab9f0fe8787aea03cbf05990a15a7f6b6d72752d6a95705a7ab3e9163736b3a8f5b7ff624bf933d7d822cba129c665a28527fe8a66bab1242af05b26e38eaefe321eb9d4e907de3a11b55cf985fdead7ce8c4d9822b433a5b85fa772908f25fd13f45c969bd7d243c27afe2970a94eb71d843625825072cba64114642ce8e486d736c99ee1ef9ea93496ff08e2bb77c19f2d1ca90db4feeaf87fbcbc7897629863ffa2a7db9790cdd18ea838390cc92422c188bacaafe3335c9117d388c86d648c988565c0ea18038f69ca5bba28ea3f24af677d12c19064cb3d0d51f38f5ef7f598088c5178af626c34da7313820cb743ae829d8fbe708497ec76b7b4597946b81d406199bc6ae5846f6d0d38be2ecded772dd0f978bb5e3260e961fc3f6f8bc624c2eae82172a8dfe617a234592d330079941299a77ced3a48c225e03086749e44791ef0fb024b8bf0f0e20bf504c6feebb4a496fa9775a468824300ab8af286640dc76ff93980ecf74428cb6b4fb579fc68c9401d480d08df70f56f93251060a459e27a5dd456081415184c987873d641403d2a544107b7296d0800d7f3b6496dbe3356c5e89364b621805d56597dc674246cd56c48a51dfbc998ba009ce4a56391a5d6246291d621637b2582765ce37b33fcd6f9f082bce2b0691cc4e0bfd106e40fba6d4b3d2d1a67f42bc7b14b811795e6f2af76c02638e369dedcefc47a04428adbaa6722f2f84089a3967446070ee6337d810eac6289fcdf034023e2acff9beb04e719c046d77482edfadf064fdc25e584bd676f8c9578d3d1dd15f5e558349a3e60132d00fd8c5ac77936a92859c8a0be2d6abfa11618e54d25ebf4858da31302f6ecee8c85f4d6e93318e5a39a37e61814649cd3fca50cb77c6c94650c570d742803e01e2bb272b7063f810e6364a9ce262cf7569a769972d4fbf0c1bd11ce6efaf0b519cf90c04590f37c49607a55295ce3edf950ce0ac5332127fb97e90a38fa5577907c482d6ce67719fb3559c48be439ccc447a40b8c7245d29dbc39674da8c2f8dbbd95009dc68045aa3bcb60cddc5345b40f30342e40e47c53445818a1068e0c79867a8e3423d946a6d856168659e474f13046734eb6a98dfc29256156614bce8b88e315fb882f0a2417fb2612cc8bec4e00a1a0ab46fd194bd4712c77a535bf60ba43ad6003ed93ce2f3ab2333ccb3f0c6c7d2f7f899a867239a8c13860d552870d084bbb28dfdeb899ba3720fe894351a56f0181ceb2ff91f50360236cf8fbce44bba8428db2379cbf07e02fbf71780d72d4789139dfade2a4a099f4bfaa92840b9359b1cc0a9ff1349a6829c8573e48201dc335ae5f0380bab7c298e31990b25f2d07577037b4484cc088425648175511c32081e67293ee92c7ad5c6fcab1baf3bcb6803759a9b32847ecbf006664de751d32f578f4342c3c676197d943581e5bcb28c4b6ca6ee6a5593d753f2579fe1f1ab5b0aea76b828202505a4d7c48ed31f2b2661c08b41c4fa80d08ecbf7857b32f42041e27d69a601652075fbfd88817cd8f5ff57c21fe25c2055b6c40df2ed94a1129811756449d1062f436484d15ed346420b3b87fc8265558771133b8b0db2d165bf47c0d37dc911098beda47a87369cefe514118bc08886419be11b748b213966e2fcc1d5abc68182ed576e801822e9e6b3d88d3d35dfe932c507e98dc27485e21b813d68d1a9fae01e79a7dc6b115b859ee1f24923974b85611b4169b133000e4918d47e1981f66991f4234276bc3bb2804ff2a77cacb24a256c856daa8c4cd891c6f48d986d4c11ef803a593e05b5d4d98e52762c0f14c971217d03ee59368c6afa3b3c20b72b477385336cf1dfbfe7a01e9219b42c71d5ee9b0bc1994d2f76cd14181924ff0da7b89391e1f96ae852e730af924064427c45f519de3b0e252e881130ac19186052bd032946bde2791dc77220f9ab19a027ad136f0513f9a4280550fb30fe3c348d0eb80d1b53a5ef2670a53362c5ea2ce05311619c0c38a6160c9c30560d5ff99b9cc1cc86729108624053135e081fb0374068a65e530a2373acb575ae0612ef9b18d1413097e457226afa55f88b745893527d74bfb29a0f0eeef979c0a73c0996c5a4ae57e19d877fd92fd6c9f0e9a6ea3294c76516e47d879349eced8a8c809dcdab0a3b2998f6f17a910f68551810cefbd923c7ac09b381f62d4926f2340bf5b51868b3d42ac20588f63d13159e503caf8964e3f6de95b01c82ef5be0e1f812b5f16e726e7aeb437f8aef09f7eb5925bcc8444593b5cc636147d90ca46d4262bcc5f3be9b0017c0e59d58f79b36d6c9bdcaa504ed8551f4ce00ba9f306ff2c463b06c9f9ad4b8f630040d4823e7569a7bdbf07dd38d5d935f5a1e46201e94f99715b433039976f99b2e4818136b7384cac7d8bb4f3f2fc8d88a682d00fef5e8f7900fd334b886a42010367ce762e1e30294419116d41bd7593d1a0ac02effba543f17082329ad9949931e5093507b48d83ac2e2f294bfb54806e0d5f22ec9ea5fed980dc6761efb52278e6ec3bfa4496d25da072a7e5a58a7403919163a457531a15c45ed34f163f9daea50bedc0e0628f80787794a3c8d107fb6b84695d0433943cbac94e179047fec99b4475f7149c98bf0a54fa843a6c5abba5458d99d27149365eb574c22abb94fb538d1b3a7962278977893e5cd7fdce3ba3f1b14ffa98d8251aff8ebdd6adea143b576c281462fcb8f6e6caa6a8edb4d81a72d86256fd3a0b3d5c049c8ce361116644267012e6445c48c647dc7a5c9b2d007cb54476373851fdb31fa767702275315ebbf522377e2700415549603980640dd342ab65bb8e1383c14c494c73e57ffcc18e26c5114b93dc5622f6319c8933ee315fa4253b7229ed7b00fa71b2e1454f3165b67a3e5c821cd490f62fd4297a24020cfd6ced15f9a9a0558f300aa38df93ed25c80c3da730f228df2da3a55c591631e8739342253c79267504a51bbd8fa7d563a9befdb109d20b36741903b2b7c92bb79feddaac105869f8a9c58cf4373bea26eafb05585630b40a87e51dd0d7522e5c20761efeb505dd1619e4da77900d19d7a9e67e859b6b82bc025b6e0dbcca5aaf4d3135e07c79d1c8b8b5250c64bc48ea573a2ad71538e4996d194ef300b952cac69375abfbb140b497ba2cfa3d216ecd62d8d150681cc49b5866d6a17b49465409ee13d37f7b32ce79a9f99b007062fa9d5e7a9595e3bcb6760bc91dda72c5189343087144cf826a97cf4d453df901f817b76a25ba15e2182b161367080c1c94099362de8ba0e07a8cd53300d1e1ec873a20516d5b6e8c5cd56329319953bb4de4508eae3d729b7b0a308bf400cb2d27c8b14d81838b773ac5958a359aeba154aa5bc52ef8036bac05f266139f4f030737a3a3744b6f7aa4343b81c31d4ab5ecfbbf700f3e7896487fa1c7951ac8c7ea377878fb269a7b8860cae7267b2560691f1b875b3d388eca5e2c2b3a0c733fa465e66d8dc79e0cc4c0a29351a9251ece83081cc51e29b3b0dce67d2aca37c4907c4691c258dfbf34355a9772b83be7d06e022bc33696152d260e2ce86e94b5516335246aa41a55993fa3bc4760ed884eca75283dd5740bc75c376b48db1bda8262d5c131803d58f90d6a95f92e79a53b4a9cb120317710a38aeae5171d7107d58385e8acd1e114b10265ca5d935690ed9682972c0752fd25db2d1abf08b97465c4b263704c82f65331a513e98db13a01ec7dd7c6a1a026ae3a329a3cdfb20c3d1ef868652dcd0e213cc71e97f7eeb00c6df4847bc7b1730153585322e370e471f55d6f77b86353739334605c6c07b21322b92a1d11cb0dca7c6e0656ff252a7e1ea4dcae84fce5506908503a640a2c7c616724d09eab3aeb63c17bdec50d9da0e0eddab0ce53eabdbc5911d4d093c74cd2b399aab8b03e78538c8c2330d0da080c462643a9a96101901a4e5bab82d32d10fa639c643ef3c60e455d89c85c8de39a2db181462f074afdf5ce67c3888c9d9d7293a6dc1bc114bb88d43a7cbcc611144b8da818f3a5eab92a184c3ef4e98c3010a913aeb7e0af177939bc597e0a74e851e84a26cea28b3bb9dfd2e168673c713a7e6925fa230c48b98e61672cc3632001996d5abccd64df363abf474903874461898e03cd8175d40166a89395347efb2f85eea3436465347df4ed9af770306ed25e21a1ee4ce0cd9dd2e08a19c8c1f063ae643144273709fb83f4102c0d4896592b88d14776e39855051919e36f61891fe11e72ff64f94d69618c9052dd008670bc5c85963a947a5b2c38e8c506b49857b46409b4ce7557f38b1df8a250f8a37746c6818fcb3f2e727c7b9ee3da7cea18eb578c41fd464f640dfdd5c0305582d47f12889297213ea89192729d2bff1de6f46b855ea4c9deaaad7ba6934007be338d6cb6e45b53479a2e8145ad1c2faa3ead1d2c8d2d1e40091969089e556e0b38b6459ecc0b014683d0e94e3186f3461f1324c501089aca537e6a56c1b5f010a112455d9d379dc40c8776230e3f9b27f1b318169a1283f2d3b301e204cefe1270cdb8dbee0bd5cc19b12323dd01ba4439718ec95a9184d9b0e27f69a41488a7d34eec68a475bf7fff457f82af0c0bdcd0fce0c63ad83c5a39a3d0094c2057a0740b713b0f61e359b8d46da019476cdebab26e2f5591320e9fc38861a7882827e5a51c47fcaa20e4f5ba1672ea76ac3f840a209a332ef9a6f01c7314899f6b4ec8423b973d4e0332d911ab175573c27d5c2096b4e4d34bd3f33528def03e3063f90d3f8ec588f6969a6aebe84f43aad8af4b857a9be528bc445004c51b9a3b0918709dd4f47c5328c789fc28cdf9e20dcf885cd0b3443b268bdd63b68f62211474450160d3dba38b12bd186b3997529e8dc474382dad9a7dc1c110eabad4663a32b20d9f2c90111ee05252ce7beac3ef265471ade8c2d755b1dbec5881968120f81497bb3db2e85c7278d9444c9dfbb9c2ef2ffe789d8d658069fee09a23fbe1ac17b6b9eb6ca112f076e4c52088a517bde30a137edfd4e69e64843e68bba83cbcde6fda8734a536bc5d2a6d2e66314448c71cd014f9635a0e44c931618b3baff4e6389b515e5011456c45fd4603c2339d307ff4a67cbcc32bd633a345cc64330710d3b7c0d579a1ddef99339875a0b56efd002d6b38fb4f099ec2f8a59b99450dc4803b9bbf0c56b276217f7869c1655242e6df66198b242784f09a723092a24a59e1252160ab81397f1056d6a002d709d6c8af4b34e96462df1d7e28c1d6cb949dc6a4abf95e6dd27201171a69b7a634aafa52064fc22eaeec4378403e72896199fff8a6d69ea06341dce4896e6d8c1b84f311d803f88da5a79ebf8fc140787a5ee67a653f036d91627a5a25f3c3ef50c27c119cf0646e1c217bcd8efbdf4adaad4da04628d99044185c01bfe3035ac426d84b50dbf970bb6a8a5715ac5d22522eee596e309a35de7c5edd8d32cf7e9803e47fc6199d250205b2dbc0c4779645927c36838f586c6903733ed0bc74032dbad9b4f03780dcff317bda47c5dc6e7de312de2e4d7ed8ca43b740fa78b1064368127683a93f45595f8cafafa053a3c388959bef0317b742fd8f6f1cd9d72e6b9ae96b4c3ba83e6998e88265c412396f57670f64b19ce07d163d3609a35e9ca1c899a89ba0ab6f82622cd0a41f876d0e168692c10c014ee40c43a80353242b21855f37fed4b398a6aebd1e4e38adf817ecb6d4c690bed2797d1783ca50cafe20af35090de4960ad9eb9176ad5f75b44d69e8a2bf515e747bd054368c4a6c174b3f4b82ed91892c3aafc2258c8ec160c7fa598312aff756b48cfdf425a3e5145f417feb375c8a85aa721cc4e635c9183bc55deb531ee818c5baf20f5ea2f88db45418d317c2d78299c845d1deed9c88cb05b9084c1ebaeb809f5f5bde8fb724ee02c93c7e4355ab98597e14984f552f7a223717f3a7aa73597c3c0ee065605e7eccc5de1a92a5fbece4f2c3e57fd8a2a35c7f4c0c98adcd75b05eb17735e6d2d5a254cd8a193bd897cbeeaa327e01594452efc62b4527a8688908415f4ee65a86a5460332d400a7d2f7a866eec174a3ca28f754c8c774508ee90e94977984136f522264d180d53b31c0608f987283dea4b8ed14dd2a126786eed657a20978d4cd3915d211b961dab6acac3b3bfe6fc71f00a8bf40060c176b934dc081ef41298800c8951364a9a174cce074e7c3a5798d741fba5680eddfc48de7677ba422e0c2022bb087d6559a2225ca4259b0e6793c3adc812406168516c54e587fcda708c3c0ac8931827db352a2d7a33be803d448b39f808fe864bc79066c6ac779c4428e09b27857532e621b018bd1b40e62a8e4bd2d999c9ebac97925b6d77f9ea4d5ed6377edfe71fcb4540ae1c68332ee845b60bdddb6964ab9153c757b182fd8e6e712f5766683a36d6187d55b16ef4ccaf8a78dde9b76668f6d1d13b7eeaaeb38b07e8a17c2c2e2c8fea63277e5966364501d45bf984eccddb36a43b0d0554cbc69145bdc28ebb8fd724722aa2de85b452884be84febfbf7e2d8da71de54274002dcc69fe39a09d31f6a3c24c4d200a02b5e6a9374f588b376343982aca1fc986d001fac35ee60745682c1a9c2fb06ecfe6e6e5dfc98b6d2a6c547df883837f5df2ecdffbf30ba5dd9c02b2c247a3db41e2f779ca646d3e3f22a9c71b4423b96dd30a82d4305b9589ee04c7f845d1b689e1f4f0b49cc397110da875b6f49d36b1c3058ac9d6a641f844b6ca162ca15d172de40a65347b95aefde55f436668724612078aae11007c5d2b8b2e6f6bca731d130684c343a5a78652509488ca5b481045be0114a34816480888c9ae1f38b09336a474a09c2b72044c84a8668a1540ac8ffc5fa0380d2f19fd4614a891e3b1dad4990b1a1ed8651eb952a0b9aa5e77db491ccd19bc2be7f190782e2194b0c2dc7a43ebcc9f89149039216622bd2acf6b1458ebc624123ca5e2ba8ba3817886c3170dd35c8548438e72c78817a9bd0f84fa4acc376df3f962aa61ea66855ab8f500f063b6dde8d6a71979c34c5d6118dcde9fd9d6334885cf7f93e2e18f7ef72ef403647735c168ec605553b3774c708d7bbae182d7d12ae8002748c8d8c76cd06d55afae16344665907cd6f8347c9984b08696bbf61fb0ebc393e4d52c88ce9548afa4c099f02d73be3646ce85480925a150d98841e2a85ff6628dd80f3599da71ccaa2741ab7d6e076d0152d825ce15501a1ef068a43fb5f20151bbfa1d1d4ab9b5afcc09a7c30788d5f9f317469fea996e9a2a71c80595931ada0081267e48b90054352cc09e7d1ba0ccfb08dfff9b40afc23461f674e94533fe0b960876bc60dffd18838d81a1757a285684862bb31f5c0699c7a282a8ee9069b2cbcc322183f000237ed5145f1983e2e14a073524c5e8cf428d8a559e5ac1ab2908431fec5f9010a45aca63153faf87630a4c9f1c7ed8cc823160dd5142e9ffb228d0077b2c2c46225750102a030037492a9a4713c5582f1ca4fffbbccab0e70571f56a0a18a74cb8e1d74ad11aa0efc4d612dadd3824469595ec3a257083c1073a4fdbbcfdf1220c5dc2a338a39be301c80c671ccc74955ba366b56de5e83fbcb38147e3f1b939ae2084edd75af91e782a4fa10fed66943e4d102951c21ae42de283236bbbe06272d4a1a935bcce0dbbdc41c84ea53c5a2fe1f22705f7caeda5139459327cb349e48983072ac8014b46893688111e67598fbc61497b537e7b6acc0e9e56d4a44c7de7b2c720a546f5c71d95ac0270a654254956a655506701c8fcb67d7c2709d9252fa56727805c12981d517c28234e72e84c8a021156adcd758865b7aa93012444d21c6ccc9050391faf8f8ab8b052bd9d1cb6cdd998cb41841728a79f7992dcdd0c1cad8efc0ae4dbe3e3066c76252deb14ea52b273ff3684c041aefac9150deb83e5cc742310d03841cca4bb83497bc0206a3cf0e0184993dff0f20c4b2f298194d29520fb30bd2093d934b5497dd452ae14fd52fe4342488e61bfea48d0dff84ef27c2a33a1051bf82aead0e097d200dcf81a3847ab152a9e592c648909f695427f19fa89d2320ab650a535dfb38fbbdd04d0691f3b41c1759919947c4bb82fe5d4cd38564b27ae11a5438ae2f87b9fabf5b41aac8a5a63589d9cf85dca93915db92948285431a1925addd09968a34ee22169b1d2194d5c928f15c098ff5e296b470ee1493894a045dc5cd0ed9ae61f306de87ef7b96a0ce704954407ea0b0d6d745ac7fea05d9cfe9a011de7fe586580a2ee4f4f7dd680090cb0f39fdc98c228e666962d2603fb5947df2a9b17a8dca0ae1cc1f99947490521acb86e479e366db1ea8214a18c2e6da26bca549ed0c6f2ff30ac9f704a0208167b2444cb0cb4dcf219b243f374d2008a4736911be5ed361ccb1e50d4c724374a8e160fae1d9da2831cc4ed01012dcb79b33131ec4b28832c2dc508c88b4eb9e67daa91a0fac643708cd83280d8b2dc158a115b6db235e0510bbc1f3beddf5e1f95ddbeef29531be1bbddca63e2d8c3ae95256e90a70269c977b504e258526826e66d65a9b4d6e02d6de092018d1aca58f986fa1247aa036def8ae4e82560ad189899f1d3f11b966277dc44a3770d20b60b3d893f387940aec51dff81c586e3158b4616684db36bc1b20cecfda879ba30957c9432b80b0a708a3c621c3da00e1376fc3d528712e81ab86041f50a20a6da58c8fa91d8160f3f1273f5b0c2adb10b113e5f11d80cb4ed8979e7afb25955e67a9b1f6b963649c9fe6f89c20ca4a5dcf243bc024cb66bb1a4d3efae8629c3b8e0ee870789ced2a4e0ee16682b30012d5b9c557f164fd9ce8eb187ea64bf0549a7cd02e0633d94f2fc27d971c41068667a5761439397a4c0288e968df260cfe64ecc00cc442cce07e054916b35fae39ab3e1409258b24aea4c801eb8fd21277307f192396e735e4e3e40ee5a5f556b3a5ceb20ccb27262de722e9684cd388b2d3dec0618e92ed860b1e533886999f1d73f8bc74ebf54559e3a0b9581d8c9c2142d06ab4dd60841ff10b58d254ef3aaabefbc01902c062acd3602bb2909a6361e08d7b6d23de5f5afeb6fdb9a421be63397c1542ec5d2efe19365dad3e010a41924acede8f6f0a886ddb1b075017b3208a9a4d399a5d1a006105ece41d50dce9792258956c48aad8824cdc458a7815f2c9aec70c767d865aa7554ffd1ba12be1a1bccc4dbe9b10a5d96d8770396c6664e4da368771e8234b12125d7dedfa91e1c3c20e1215cd6bd120b16875fe3acf2061c6c6b0e9f5bc3d427120a122036546fc96a577d24cccb23e716b6adbafa23e4cc409ea5ada3c1fc62dd88a84eb10ba12b57a1a3624c3c61355c231421b81716a718e55826b1c9a0d02a74059b74688e241685439e29b6e10950ca9c48fc79754cd85de64d261f86f570fe884d110df57aa717ce7835f43236bcfdad47f0ed6fc4b6069e8998b895f8260700ed10f930c14da403bcfc92eccd08045ae6f92f29f1731ef4b167a3f468db06ff72bf16ec68585591d7a1397b96e25d7eea2d1c38a0ef22a2c69c0d8bf13c95aabda4e1183bd96098fb86cadbedc1872101020f71befbeca85b539ed494324a0a721df1cb3b24f60065e28c8d40679f48fd9e19ae7d800c93115361f182bcfd8dff9affeeafe7c412acd9e86be60c36adca14ddd589b3ab9ded52f552332cd62798ea6e584ed077dbcdee614ef3f9e52d3a62503bb7bdc1628e30c64658e6cf69155f2db9a9a2a2b71050e2b7e98bfd5ef21c11609702991ff012615054fd244817b29a56c1158fe14a3e575ef47d535407fe37e9b3fd5702eb64c98d1b6af199577fcd386d93f5655972dd5f63ded8ff8ce0501973ff8f81366386fb60cfb30f8ea371f8da0e623b5fb5ed5c86a1eb1719568dccd20578542d6920135ecb7e5c429a5de875fe9e0874d224874aec50c14c3bc293b015bb69f70118bff5817a1e7fdda9c384cc368344f2be6498ed03300703e97e469c472827af89836575b0e9051919d9816d2914f262d28eba5e203102b0dafd56f218e9e625ece6ce41c07cbc30842520725e337076e8c95f1b17d27cc3bf344be861556579065ba64da233c490efae84010c45dcc24678c667d22940deb9a6e960559da471050a304a528035aaa94d4d28ebf1192e67129f623f632a637ce90ac9b40819bb7cb14098fd540acec06ac22938713e1245c97b6cd7e6aa060e8aae769e0b7fc4d69ee8327337265a42d13792c8a81b18cd36e8ee76a72b68a08c6ca3f201af03b4faffbc72d96a36794929527251e77dc1c8b5dbeb373414563a22b324a6b6151161138f8835e91763dcee378784ed75df4a8fce595d745c91c64776f6b0bf40ccde1cd3809c5a4650d8f267a14552f032c3a3f37b39c1cfabd1310b1a5bc7805d6c23427442a29016531ddb2bdf269fdefd7ed9c2b1a10b9e74655b320a825e80eb4c9e143f973a76dfa3e349abb26a991fff5a587817a5d1cae33af10e714930e6eae0a673e7eff533c910af8f96b2658bded13d189a07990c5b98993743e31b5d6eff8170d62754ce0c9f16b3ab852253b30861fcc50da9b4bc4e321c93ab963efa3e4bc3fb7d2c29f78a7abcf7b346501e0379491684773ff163a8629438fe95db732a2816dbec7f46459dbd72d23a82aca8d94106ef78c7853a00e2d671bb78a42793416941550ac083af366895ac60216123c67a1819bc0fdc8c338642cf48ceb1574e2fca85a669374e183726d19d8149e6180dca89a5835ebf4160832ca96f647851b4a616566fd4cc5504dd7d960fb7f8d90ea4e1b97479f44c30b72aa63ae93083af0c416307afcf6100a4d4fff7d4c0e83b3b0f3e89dbc26764a6f22e5cffd5f2246981543c70a7ea8cf11a9238b0986e52cdd68850cda26a97818d17882125bcf493f0bc82c31c7336a715ae3dac73515c2a57da9dcdf3ea32351202d1e8e9194a0c9aa88778f25d22d534c2e493a98310863fbd2b3a38530b7dce3510d96fc714a41aa7c7d29a8939fa2f118cb6b1dd198debf84e4b21242cabd9f338a285f3bc92b263a7b64b3843c319f6e5298202f46a31515fb7463ab71a2261d9163036861e90fabd159aa9dfeb2eb997c8dee2c4a91683d74d486277a72e7784e9849b3e34b93c662e00b743c10b42a02d4bb59eca5190a14129ce6e9469d363ddcbaf30262df3c865d17cfe1066e060147751b9eb26d4adea49e8082d177d13aa76c71c809ba6595debc7cf6cf8122edf65c2e0d2370bdc72f76cbc129661a12b7a3c64584ba1100de4c90f227e2672b33d14be037843108cf8d1ad8c532189db96b4d182e79b5d05f610a7e7796c2c7e031b29d9af515d02e5a6749e49f483488cc4187c526492d2c64c0211e5d49062c7dab7a091e6462883756fd4277af470ba64d19225d6d4005772d63f6597ec2e39190e6164fe66b0a8edbab24e1f8b9af809432a9c7c94b99fe918dfe237169c0008c8c1f6b1759f719681f2a1d01a07603e85fd8500b2fe7d745527cb26d302dbf6ee3e54219adaf155b54a3f00fbfe921dcb6790452292c3955f147851859dc606d5671abfff4efebb455c9015da1ce469e6e336468299c64f308db13fc1bec094bcf9ee97f03248c4c76ee240fc54c24cf33178e14ff80b143c4a92a6c02468b7cb20c79032fc63eefea818566abd58ae25fe2a4b87da5f089d0bb516d7d2f02dd8bac6d4e180214073ff01e0f912a98cd9fa29b767d6218ab486c5294c7c44e1621801b2df08942241178491ccee72e675ab28d101300312ecdf7a0c9d23e90fb726f2efe1e18110245a7b227d0ab28a9e0723b44b1a6c87eda9ab9c51791b5b1ae0ea562eac6e2c70464c3d1fb7842169bbfdfb4202fad6b96d78c809451f170686cc4450f08b00a9c755bd24cd4de2424119677adb0d9b587dfe3a98545666017abe33872d64036ade9369bc81588940cd8d48eaf62f183747edf5c3b23960bb166885c9ba9feccf017ed26949ef4be145fa25604fa511690da8016f244c834841e720c94fb7dde54b2192b77f951dbe3e0e3a79e389cd21a5b047ccd2eef0ff5b4c4fe8b3888eba466f5582f20680358989b80a1ffa4a1b2c3e0bc2f533da1a4b146b9722a6253273a9f67d50fd594177d02377431284fedb91d05b2cfba03b88dd245b38b9ad10f7075500592ff7c5ac1c80257076ef45f73c1aee8943866ee6a88d67050daa736defce925e281c47f73c02c2f2ef7ed565238f8db2b1079d1983c02db541497b187b628da0da5d669daa5aedd491ed51d2c268c5a38728974227331336d96d0ec8430e53a2b6502ad86443cbe14a6cb36b2657a08e573e517ca13bbab7bdb2c840cc2771886b3df47fcafeb8c7f9656585c37690f2384e2875786f9cce4186e12611159bf0c2256ca2eb69287cd547e93673f54b355d62499850b64e9e1d1a5ee70836f9087d80a4ad4ffc254cc007562ab1b808871ba63fb200289f41865a013a435fad34836015b9ccd81f0d134f8350b6b291ac58d136b912b7f3d4a8b17bd50fe63590282c95736255df9f69dd32c5a46c7bed98a116adcf5837644c8a147662e59f0c5c90fceaf2863994371554dc165d0dd013a0cc1ec44bbac5bec9c60b9c7beadc4dea3aa6725b698e2bad998ca28081dba8fc6878822e02bb009b6253c799e6176d29ccf2733e172923b53c518f434092f153b31523b0d187348e5625cc687101398246faa74c2f04deb79ec930b41bf59251467b685946fd4f41ccaf2b79251d58ddb58c308c21042d91c8f0a121229ce8c6e302c6f8d2ae2efaabf08ea88b58f2bb34f95cc12038953ae620ab3f49365556b2a0fe9c896c2e77a663d5f61834e3a58ab9f0a21baa71712a0712fa93d58b2859c9751c4470f9888e921f4fc162d3765ac294ff5319598788a6c7a3187249322d6e77d8ac768e5d8cae8a2899bbef1caff25dc1c811efea99af63899237e54ac92a6302176bdbac98696d6dce367909a0fd743d8d84d934689d1626946bd9c67dd18fac5da4bb2f632484288f4c86ee5b402abd8ffa203101ada02a5341270297609a6d9804bb5f15fcd72ceee468628b838a53a5fe182365972c1659acf21273bfa2dba7cb48733bb1218f5d197cbd3d8067c1ca725762018dca854d8ca862cd2831df59e0934da35f5bbea35aead5d5bc8b24f15405b85e8e131d0c670b68af87f140a5d8e24bef24eae9646316022db8ea99e27ab5cf6f879e6b1b6327203b5e0139fbf195bc856005e5da72df0eef74bb0f75d881679e0cc571b511bb3c0437ce69be900eb7ee14e0993143b33d96772840a2103bb5bd537ecbc1758bc6429721b82355a002feaa3fe5fe22ea031d843306d58da6b3563dc491403440447da3cbac244f8be8d205a8c8b6d11d71348b87d14e002617f09772af86a5e441536e860c22b9b01c0c734731d899d8145561f56074f5bd2b75eb7a37be7f56900475feb00ec7002fd744df07d31ca45fa24fde9eb5427f64c924f39c14feef20dd11d94a485b5eacb9924a125dc4ef8f2bb5db3146ee03c14113db95f3532418468b406c10f22a6d5df9b505e8ad3c6f5c6a2dd2cdf496dbaed8e3af3ffee9342491587a141692a910685804bc6bbf31a97fea096949d5a630083c771a4f050a06911cc04feb26610a98744f9cd78eb1280926b91e2ba242af67c527873cea8ebc7144c5363d6aa49f095242a177f49abe3dd8d4070920a9d2238a325cf70c29e4238bb8bddb3a7f228a5a834a7a80848d884edac8a15315d14662856696730bd4621a14efb4a2b2ce50209ff7de8d76dfc70dd0bd8c6dd7dc4771ca3d6dd4309d5f9f8b73ff159ebb373aebb35e7d0b861ac5ff8c2b034904317c09a749853d27cae22cd10b2d140f5421ab67818ac214526e50fae92bea36424157bf176ea24c4b93d1688597a915baeb0d92827af63de9a9d20da326eacf82a8dbf6b2ea5f521b5091653460de219421ba48eb48c28ed4649a8030be442a22e069f10c9d9666c3d1b69e96fa6e4e63e535b76c1a0957e6e01056b830a792c3a2515f9aba9629046b62b12abdae4c1178a5e2279b4f4e001e13451048ad8403901d5a1386351be72f8a078efe130dca2116825ca1e07fb4bebbd27947042d33e4e3108a593403cac83b1b58d0253a438a02f03eb8b6b02f25f1e477d748a0d50db4d42fc3e04ae4b8524c904d0fdbde9fde664184819744b9d0a8aa0bc0a47ac4c8306c770f2aaefc00d06b3731aef384acdfb503f2c127b2904d7b35a1f72260e3c40259e9453b92cea4f62d60efff87c661e115fbb08b78e7796e436ee4c92ad96dca947b9ccbf46a05d3ae2111e25c2ac31482a22fc73329c946c5b9c303441ca2a1d928768b1457ca1f3012afc7a603513685cb1980504ff52dcbdcd40d8cc5d0120dedfcfd474f27f74a87e375e21fcfb0e04939a51348172e1621d4c4b006762be885c74b76c24e398f53d015ab09b394ae152186663dd3cb0b60476df23d984f62658e991f7013c3d032aa932845930561aa5036dad1f6ea00bb64f5951dc1f73a466c34ad02b7ea1f203641154392d586f8078667acf05171b158f16c8a3637cbc4ea39665ae0084ba7702d6d347a434802d7783f28abd8a27d82c918410b9f7965bca24934c01b1071b0842080f9f5ff9eff9e19b4a3f7a9af36cf6ee921efe7b766461a5f76e471547d6d1471947ef64c5790fedc891ea838e08883d8f7a5c6fd33eb218a966fa68f3b237e37c26cde5a5667d7caab93c8f7c6475f4363d35675d34efd494f4475a36bd53f23369bd9c6fd333a39aec143d3923d5dfbb3a363aac459ef5e1e98c7a1405d58ce750e598c9a1ca319323c767ee84f674a320d0d2a699b134fed65b9efd88f497263fcbac7afdc724bdcdbb7ccc7adda6b34b23696ee443b2eb471afd6497939e7a733339a6bb9e64efa366412dbec66b42676935ac7791fcdb45d1d5e80fa1cbc9c60af3e5e39fe4e9e5db90bf82c69c92f5a2e2dbd04e5aea7a178d39152b0c45d05973a0f577a31f38ee318b3ea4ef4168c5710fad5ff5729617c508bd8b7abaa8e74a0c656b5eea7da3d1448d4617f5c046a38b6013351a5dd4d368408886c3e1df03562fa535f67d465907db874251dae37a5eeafd853d651dce07f617850cd9fa1e1e09061efaf67a0b55aab05eda83fcc7bc86e46c0dfb627d514aeca3f5ccd725afeba55529cbbca899ecbbae474a4a51f6fe66dddfcd3e95757f555dd46838a8536a97220b2e7125afa793386b551eebd521819f5d58731a8e7cb8d15bfcd2facbba3e85d5ebd6355f32cb77cb1527ab1c5fca7a1d5e15073e7f7f8f82c08a131f5aee6ecb7acb31ededbd6ad5dbaef93b17dbe2c0b45e719c0f571dc63e77487a15d3a9e788b0a157d7df69ad1a4384e5887048d811e18eb023c221714440c8d05fda1b63d35388be874239248e08fec19a8482ec79136c0b9681bca862b337611367f296b4126b5936be1e5b5f92deac3b7af8717eaca867e1af5ce12fb5f1f2addb7f99482e43509539159f5318895371c8dbd09853a667fad1f427d3bf98480fdf45d61c68257cef3a2ac1bfdeadac38a62adf4defb35e1311b4a48a637a69aa38d6432b61a56f6403b4966994b9c96d32994ca6e83edef7a71717e7937965f352efad6839cbaad789e0a887ab9ac563bd244d137f8acdf3510f57af8e35456f1a93730b25b121b326ed3a6b7a37eae1b585d8ae6cfcfb7f2b1b75c84bbdb7f1a67a512b7c7cf554af5ca1f24bc5ca2f657df6a5f7e2f297e9b187f5c6589bc743acf883e42c634fd286bc7fa957ca4b5fbda8180bbd53f0a73c59086361f6f04b4f35d2bb9d77e5a5aff4258db4c5a0a966de4a76cafdf3734f1aa9f01de170b80eb4622df22c842e7daae2923073776f8fffde876859ed9ff5b348b0e5f5978e112b7b15ffe060d6c8b2e6abae8cbe4d8f30ecadd25ff5e6dca6f57ae09fa4716fa37a67cde9ace6703b72381c97b4ea756f754a0e52614a08a7908b8de918911869d4d8937e0a8d4852ce47923f1ac908ff8de49424947d3d6ad41c9a4373680eed60c4514208e1c3b9d6fbfb601d7c8610be6c2bbe0b9b524a29a594d8e7344ef64c92727e660593b5c82365d9b79c3d312bc2ef513f399ff4236dd611699246ef522b7ff45c5b623fff7da65db25eeb7ae42c274de398254973cee9240de75e0fdf876b4e12c959ef705e96e9ef8c953972381cf367894422916649c3193d5312a9549aa497b7693afa2ffd75795aef8c9da64ae1d3977a3da0735de846eb2dd59c9eef3fd272381c33c362bd57cde170480be6803587c3e17552177f50d231026716388b26d1249a4373c8a463a48f4ca199c5e4a69f42a65964caee246a24a54662fafb8e94b4ecfa0ba9cd4c59f6143587e6d01c9a437348f650b104b00ce48512eb0512eb506019a88b356c56a2f3f9fd8d7eb6f2afcfb24cc788052d35702ef691317768c9b7b49b113976dd5ed08eaccfb2d27b96b155d27048cfd6b9c9bde45fb26cdaa45d1f786403a9f4d8e5d41db91d842d994ad5a9c9043da07329ad59bd44a6e5d9c3276995dd8886cc66f562573d59d91587e3d49b8b3a246769c9de7bab758c58d1b2dad231c29635b37477f72cb22c6b12b56559127bab447a7dbd0b2f7bea33cb3ea3d928fb996573ceccf4d973bdf4a5fbf4a5ece54b7f2a75e9fb5f5c4af5922a1194bd3ea6ba565959c32e2473680e95fafa792f7bef3d1d2357bcde15df9fc6d692f2521d2356debb86032dcbdd7a7ffee42c8d7e5a987fa9f42452894422d12fbd7c5ba4694dcfedf22f2e265aaaac8d6a56eb699a5a6af9811add0ebb0b263fd0d24591cd6119a80b28d775c5773ddba8719167af0a473e5e737373b3fb18dfeb22cfba977fafe7e7abafebaa57f6d7ffc08912ab5747c6d38c36b07c125dcfdaa53a46fac814ba669649844da2d1937a5ecabad2caf9d9bfef1eebe5ec1e6b7dfb58df7d89f4dff6b156e92dd35ff552fad79ba8bd9edfca65c7f4f2badea4c9a71aaaa471a7ae5a65e57ed2a891c05004cd2a1194b5b08fffb0ab91a0e6d01c9a433ea3b676007d863f63e61a758c38abf8fdd9a8e11431e2b4cb3fb15e07af19db31c608431134d69cb651e2bc7ad59cbefefd39dc0e0b46af391c8ece9c53e142880b294b6cfbcb9cf6831e3b00cb405cfcc08a358065a01f34b192e56756243feb1a4e1123563e5bd66ea60674e166427cdde6f47595dfc7510fd9433e8fd805eb311e49fa2baf6f9eb772475eaa4995e7ce396b6989ed7747decae5fb653d625b3e9d963ef7caf42e1a77ca44aa5393f54e094311d4aa44588bcd9e0443117454b39f3fae0e4ee61e7b975bf84f561cf75610f716fbab6f096deb48e6de94974488ced17d49e0eb571d0b8f8f7849e6a8c773996b8d85671b2f015c2ad9bb411beb8965de4b139c7670564edafe7df22164a753b7434d0ae33b18b5138cbb7b18d4dde5434b56fe0cce1a74ac8f82789d3e92191072d4e3848281442687e1240c27734a0578508523f6fe35c4c66c8eae6b34eb858f7d46ad110d4ec3052cc434bfa475bd202f697dbf55798036561c5869956f8bd0065f8aa0f320aa5c42d8564308617cd78af860e1b430be83f1ace90297b39dc381c2fa981139055108e97338b08f6d2d2de30d7ea9c81b0581f6facc41c7fd4859c55806deccc2f70fd8d8e3fa7f2b66b78319076661e57a79b0f13d08666988d092270328b1051a7eb2ec56f83bf48f0efd23f47718c4ebab6fcb1607c505b11014979540c466d8f897957031c14258184ec2602117b44497388a7eee87b09f7b78f773ae47c62ccfc7ba7b94f1b7690782dab0efc963f294bc240f89f51784f56f2dbd7a3fbd467d6b3c9f32decf5bf57c3fd9fbb9decfb6d9fb7e542abb86bd748d156cacef0816c443f27c5a0a28473c9f98253679d1e231915d5255ba74f4772351ada4f123a212a272a459a8ac5e8a511dacf58e5aebafeb05eb4454369c84e144724065bd62ed4dd8e0c17e7c2ee605f66305cb01e685ca250ad80f63d1c110d88f0d1e1be0d05e03f59b8a14ad9441a0529e7ea3f56e2a7b394845aab76634dfdef056a7fa8242b9d43a842fbef8b2de87c04bbb6f2f07bd95b114ad3b1e52c32840546fb0de77ce39e7e2b756c4071fae157127e6d30906c6573e5c0f4f306050f8f7848215e6d2a280cff21d7c59e1730f87b08e4840dd5fc91b740b2b1be9ea30de394e8302dc7a6ca884d03669c7c058c76a36316ae485aa81b7e6250deecd6d2d6c81060d361de95c8b257fba0ba260cd2cef825a364db37a51181c62fd23b4a265d51c48c30b1042d5037af8fe6085900c0a1ff26645ebd298b7f82e35d9dbb3fe56841a5b0bc29af368e02d5bdcf228d61b41fae1f7c3cac3b35efd19e1f034ad6f2ff5503fd81e5de2842240184ec270d4a34286c9807636457c39b3d8f799f70603ca9ecdf7376261fdbd5e22d1c7ce21ea7ffd87d728858d7f2316f67d8f7cc05868aa01753bb81e4d83eccddd6125127dac2f096a62fda5e591d71b4138107dacf7c633cb6ba2bbbbbb65e0918147061e1990c8704406237480c42161470450c6909e9ae6ede8b176f4481f6cefe8b1ee0fb3ccffbd1d49ac733b785cdb91c473cbb50e9aa78d28c92735ec9fc6fd99f4a15dd47c5a46d27eb025fd7c1e39c0fd4995f4fe8e546f00614bfa1f6c49f506f638a48f8f551878e88d20a48f4faab2371d6bd36ea4616ff3dc673af6d288a01c6b3a996b2b195b3dccccc4e8d1bfad6a03e770385c8d89e1790e683f2ac7e9cde480ca495539084ad2a324c9249a44efb3a0a0695d589452a69b434fa0f864f5a282a4309562c51c9a4356045d1dc9c8dc91a671efdede4326d49b9509f566c1eecbbda2de0afb177d5eeabdbb161f6a0e473fd462bdce7d6b37b362fd5d7ca7f91587c3ab5bd2db6362dfcf5ba15056bef72b68d35e19d161676767e76688bfc9ae38033823957b73df23fa60e3d57157d07e97de9b634df6e69ed5110aecf9f2276e42a1f79d509ceba1bd6fe7378d958d267457874733bb6a8e130ae68482e1270e6b6640e3df138c3ba1ce7ecc16836aa6691cfb1c0e4756b3e7f13131e4c854392eac96749b3999c49223ceb923aeb247e132cbc129e8753d0e0aeb9a1984d65b0eda3cb8844993254c9ab04f140e614604a5a0f15d2f61d2e4894f13287a7a943069f2c427bb920941d8b344498f1226d995cc8ac5aea7c792f23d753db2bee99664579660c938e6be1ffbde25b9aec75a4aac555987939f59955d065606dfaace69407dbe11db18501cf93083d7cc9ce5267cf83ccaaccb41cbadac73e839abf68fd6539a4afff4142acd6ec980ad5b5691755fe46dd9e23e34beb3d735f9c9de6c2a4de331a0ce3d7c0b4ad348290e074df3e3ec9d430e87ac44f6ea006901c67d38704d9a8681b4d8c2be774f1c94c92359d9e1b853c8fa5fe736c024980b3f96bf232e5c56fddb3f28eb5d93b77adf04e54de690c3e1efe77a42f620159ff26caccda3c6be197e77e7c77a67b2b7e277ccb8ba73e613daf73966c5f11cd7676cfc1c0e478c905533f1790e9e890e2154718e99172147adb3795d4a6d76f653cb620f96939e7430970181688868886888688868488810115192cb562e0bdd9c37244448c810919021222142428688920c09c94cdacb8fb2921631ed9e1caee14d78595a0d5764ad17e2841cd1088e62c5a2e92fe9adf897c64436be7c4c65f5e6bcec9f95aeaf677f3774c191054bd00dc17a1d918d119b276b3de688581d18c6627f89b893f58a93c1793d497bc2c5e5b37a4fd68adae8238580e95ffe8d7a5896f5362f8bb3a4c5b79e70799bceac39d2e2630f30fdcba49acb97b4d1679866bd1bc54ad29ea0d8ec14f6d6f53cfa713df698764f16fb176da4c9deb077d166a7aec73e73f34533bd8b1644145148eb9fa06f693d4c9a77cafd489b28988fa19576ca110d110d110d110d110dbda90a21285b40a102650a941f28388022a537bf4e8abda587d6dfd15bfeef255e9fd1c73ed6582bfe4bbd2a6bd56bbd7c2b977f2f59bec59c6944a6cd4c95692dc58a6515e7aa5caf6a84d5ebd0f655b3eaa2381cb05e51a44471948479e7165efdf4747d111fac43586f0e0f6e71b2779712454a142951a444911205cadf1a3bafcace2845528a6e8db551652e0a9428528aa2488112454a51141745533decaa66b050f9aefcb7574a8922258a942852a2488922546ad390bb8b2f7e8cff1ed4624412854008bdb210478443f2227c427a7b4f989ea43d71e46f4c9f4debb352841042f85e883b02ab43d2db9bd8bb877706da0c4c63f3fd32e826c8da34d5227393ccb2e87f2346f835bd7a3fef6d6a1092819fcb6af8ce108aec9d9910d1113b842af6b215fb5e917d11fad634eff216570515f64e77ff1fce3a8a6e5f63fbafca723f0e4d33796bcaa9feedad549ceab7e1d45bb91b7e2035dcd034923767e6ad7fecd5c13aebae3e01d39bacdca9f7b3035390ede03e47daf851bb4103bff56d5fdb88e4ba6e40af2ac991dea00e4d033fa707234d833d7c1554cddf01733dbd596b58d662b1208aec4b317c2a51f45190379d9d1d495137778300dfa85e0adec02aa853525d92dee09f9050f7d725b1f039064229b2087f071753f4c3b81dfdee87bc150ca7dc4bf99c0dcb53848004fbeaa54bec85716913eded060e6cbf571f6dfd99074460acb01df7312a1e4df318880c22cb42b67daa80b1415c423b3b3b3b37513050185cd83b635d184c5670cfdd5c06230812906841d2c8a20549a309bdb11dd234f79443d35c17ebde4d09e28ab5ee33d0344e8ab5010bf9d079f6fd8f675f0d82041e1d97cc09597e6ee0e85d838187521bd39bfbde9c9b8218818a7b762fdd8e37c401d01522cb4057c090c132d0951e3396d84b6d0309e10890193dfd53f058441323ff9ebdbd9a057d7b7d020106416a341104922b37fddb5b016088213298204a43cb0f3744f0c11313385105266419a3e688118c80093f306146096e5a5546c63197579702ecfb6bb23cc0c1a98cfa5069af531f6ab18e7e6632ecfb3bb2fc420fe0d4fb0bbbdec032ef4960d07ef7ef46b7c46e0a72849edeb8c43a542cf3fe3de5550138f5be85165c5c307b317b49f679c5c1320f0681fec5217180c494206cd9c11752dcbccfe1ad1ad0c514400475a1250a146e3222bc884217543481288b9bf742deeac50b202ea2d8e088101537ef39cbab81b3fd1c73555adbcc7776767696dcf4b30d090016801dbd510feed19365dcc328f436773b275d1dcb2ce3aa4081275258820c279e00858a0b7a70461658a4e08111cf76949465202c2ab02428d6e5d02d5989d4d853f7f30f43d8fed9fdaa536f6e5e56848e12806520212d2ce664fec8f622fcbccc12af541c2d1626aa87ce532a664e7ba76aa686076a9e6eec50b60c2484234259ec64c1fc7961bc80d5783950b2842b713560420a77f1a8805ac1d3e29ef8a0967062f0704c601d30f1b6144189c392802554c0a3e491e1965071421fe18325dc107aa024e322947fb4f05893e59f292c792b1d0bd6bde315e5175ed9dcf098b1bf3c6e58f7580eb427149604a527149118cb63a63757f384ba65a02a2bb0332be72e9784edf7206efa6777bd44622c654b7be5374ec6d029f796b645184c05f4daccd034ceba075243d3dcbf28dbd4761524ec5b9bb66954af6e8c8046cb40554e6039082e71fa6775482b99c6b8220e30e48fff862a96bfe6adfc86f931154cb9712f7be5767676768edcb8e7a699793b63fb59f6a35a65a5e551abac4d3b2c52768052794408dc69d84a49e94559ae17f897b41f337c41a4c559f18d7b1d773c3877839fed0d1fce72d3a671cfecdeb957a9745a5b9de778782bf89c02817dfff8066aee864736488bf3fab52bc11602f70ab8bb1d6e8763c671df77bf08ec7bd76e3b67435b9cd72478ceb4b7c7efcccc3d04840ea13fc481efbdc7e22e38a1fdfe38fe1ecceb7fffa03bf47e569c373f53102314f5c6f6ba871f2bfcd99b9f7a73da9bdf691da66950939e3cc2eb52e87e1d9b95d8bd1e3ebc52abe3ee03d4fa8b37c6181dcc29e3faf89257f22d4b635ab29726b5ecadeae2bb58dd097add3ed86e8b652234d65fa84986f0e5b7bd96e6d5396859ccd43a8859f80ddf7b6ba9113959e8ca70fff8752f20f30bddc36f58656f9d19319fab4c03ffbae7de5c704271dc3be7b875451815c0faa7ac6bd6e5d502af5028d661bd0d8f2b28212fd88b9a288b425d3f5cc5be26c232ef2310757fb98abbf31178988e4c7182873fc1a117105a980920b6a40888a5f1c4cb927e2f88e6eeae7a152722ccbf33d665ac0bc03a00ac531bbcbae1c43a620f3542b8a187b77ae10549638d8165de8f64e8a9c685490f8ef01aeb4b7842f5c22476ec28a3702b5a113609e6bb11a0b85610d483f6c3ed84823146b7b047ac93b20ef8a85310eaad62e2a9b7182550ef2dc6f6f62cacce321e020b2147e7600cdc9c4898f454c4a4aebbc9177309d95700cabf74f50c2b8c4a8e7c3c1bab44958aa072af103e1cd1103f70b1e91aaab767238cd14f258892755c0fff621d18911906e3c862c6382ccb87b631ead8cb8ad08230462b3a3d813be74e38bc22832d9e78e9c28227947b899ad4c98745fc7482f1c2f797231aac8f6f8d82c0879f59a31e32cac68195ca20a8833e5b2004137c542e5ff43812984f860141fd79f40300ee039b9881f5779fb80379ce804df8d8b813000babffcc115c9f010f0f8800048f75ccc7079042c93a721e196dadca2c633dbf34e2f13d2162b4ac1a1f1239e94906be3329846e0d26b2ce45d62d0b3da06fa8ccd39c2797c5ba2bb2eeae8af577416fd53c2f45e5adb0f77ae76908939e7ae379d793cd13ebfdf754ec454979c0bbc1aa137aa9f7d91150ae68d2935bc379808e48b78675df8155bc8ff4fabb8f6818057108218e57ba03a783f5e164639f60e0e90403239d2802162e4614ed22c6783d7ce896f4f8b1f200adf7b6042ccb85d00b082d0c09bc028b2b2096e507e8f008d14706cdc4173fa876c75620274b79eba176bdf788d5b12cc618e7cc30ad6d562a62fd9dc4b0ec03d67b481e6c5ef47737c184dcdd90b5224e5229a135c3389d41fd83ac5767e7bc1d09cbaa17968d262dbdf5cd3a48dfdbb46284916acc32f04b9a6319f824ad5906fe487396813f3566990c3e06ff82b0070b466845cb82ef60841c987e4409207af6367b7b3a27ebad5dd9ceb1939865fc123955495d4a4a295facc3b1a44172520eefb9bbbbe61872aa47b66d58c796eb262010d69cd664c24e9e24588b91a6096247cbb66ddbf6ee6655db4bd9b8825e6e424e0f908c183609e36592ce9bcbe239e79c7beebba1fb1b107a7777777777773f74d7dffddded9c73a31e8e65d859579f88dcfd1d5b3e2288c1857c2ba6458c5827df12dab97b1d045ae8f83d52d7677dc77f684ef50ae3545f1fac6beb5a4bcf793a5da6d2db28093c6adcdda5aca919290102d1cedbb9eeee768cc3df717743774fc084b64dc503080ed8166c65fbd922a80a0b41c7b6681a309ae66266d8206c0b777715d81d9cbd9be567bd6e99137ab129f63d36a5695c85c1a83cc7848ce0e204dd218410d2d49ccea0b7c6be139c88280e5755c30dee04ac83b1b8e24131316cde2b2ee28a5c0a8d42fd6f9b4a555363551750970274871042a86a37ea018928a4015af859bbe7463a04166ad0bee783855a5b7ffd1c1793ff8482012206bd7e67c75e7c551ae5ed44c4f6ec7f4e7a8eed7f8e61528023e051c38fa9bc8d8a7c405eaa67f210417708218440b60cd1eeeef2b77a05206582985c936258866f2a60fb1ab1ddae6ff89d0addfddeb3dc14fad97a7d96f9f79d26965459bd1f224dc3414c7148aa64d1e28ef0cca002c253208490556f65d51950402f4fb1132069412f579972790c214326c03ad82ae261c3c386874df3b0e161b3840c20d4340d5b9665455f657fe96f42405e4ae351c305f59aac5d861d96c70cb6ff3dff1c696560191d3e7a48042cc072afd9493532fcb0fd0f88ca01b14d4572ca7d0e5e690f125e574dd3706c4983f88c5dcf3aecfb1a8743470d9d7aeeee32fd627b03d659eeeec238fa64db866d1ceb7c05dbd73a7713cbb4cb0c07acfb136ffd9816c410f486b900d705db8f6203f4d7c07fafba6d6f4d10cc71936255993aa0eaf7edea13525a55964024afebd2a446bd9f16b7a31d42e751e38f612ef632157e762b76292a0c70a9f70cc4e1782fa06e474f9e2bce70b0e1730bdfe479023bd7ed1af2643e5973edeefeba488f27e2e3f06890c11febdc9ffb63cd3d00de686caf2be8852d804bdcc316b00e7fe763dd73bdb0894d82bd29eb34b6593b9b24cbf0b34e853cbd3110f1792481be89d5880f37fc520c7fde1419650d10a5b1440a86d47032c406be9832052ea0a8421645e06705649457fc434611904c018b10654c71c38fe2d504ccb0a245183a30c3890b6ef899f925f3b38ded2e599e220494167c8690c4b30831c99690a1a5858052ca814977ff8f67dbbd840208099440e184ca962af424512209104157cad0b243463423fe9c9186bbe2c7951d4041cacf4f0d5810022c4d7ec0c412140031832e201830074e3ba38a0dbe40628a2494dc4d85650957d8fe970248081d3c918226600c41044903fe7901c5377865e3e405032a0605f350d67d0ceac7f694cc8a1a64d613d4a3606c9e8502db2b98d980ccd09b7bf7aee50f4ed87e02cea0a455673aa57a18946c54db1b63db0a7b6ba8c5c015266388d10414aa18bad1b1828a2629f89942111167dc5c1596316cf7a3b058e91fd463d1c2669681b0fca082b0260cb1f05fbdd7f3e5702e76f6582fca422d075a767fa5bc251fcbdfef5aa98918d4bd8ea679ffcea573e21ef5c17cc12ae8fd5401c2b288b1c40ba6115878a850220a46905204256c60650c244d3cc10c2ba89c81c4b660990a51967e3bb01d5ba3a56c9b38d5cf23ca320d4479ccf4f677e614c408527aebf74a7fa0af3e710387d2962d5bb6dcc037125f043fc08ff586042c11c4b76a1437a49d3711f6b8815f0a6241bf8ba0289810032386f0c10f373a4fb0f8820a28bec8a20a106eba0709213051021a60c0e006044448e288a033a8e0d172f3f3faa591bdecba67a7042a7bebf96a490aca9f590612e2b157da39057ba512a8b3fe3f5c1612251db374cf58a83cb9410ca80021095a3012b0283a410b9c3439c38a1b1c2ce18b0752839c02b0f7f4b65f1ac10c2decc929a1041f239e44010537b8b954270752a2a084114553188219370f87a6e9151d02e4ad502f656f60dfdb340d4f51630afb7e86a6c9b8c8be9f4f3b55a131bd6d54087a63acfb985eb91bf731340d9be163db76ab600a328ef91b837d4f05c80d15c821a7460b53115223cb1a6ec7618d3b018f1a08215cd500a4b7f73e06857f5554ecfbacc8dba22548efd8ba037c997e34c4229638ac8e37f7aafed7ffdedfeb0ef077c891d6310ef73928eb66fa5de3a19db3938a3c0b2bb38ccaa99ae6513979a209e4b3a5f18dd4f8c621747777772335e654cb9bc6a4e0418f670c277ec6b88114b00560f1c4084e800115500883aff0600b2850610b1242595c964d96dd1bc1eddeddddad316fd03da2293c414041606279079681cab8627d6c97467f49241da5476da1ba29cb9a65fa37b38c59fed3f3f3681a1b343750cfc2f30b99a157a867e297e7bf5887cb73ccf11bdf7d7b0b2e38e75c0b2ee0c8f797ae8375ee2dd83c1b3bf472d00d439ac6bf5f87a65901072115c8400e4d83fa7e224dc3c2b7bdf1a73ffdf5a7eb7af8f4749d1ecacb597943c39141a4069f4aedba3f490df2d5c9f11b371a6241bf7fc85bcda8b102295021c4105170e2a63f87b7d2b1e20941acd1840a4510618b9bee7e37b8f0375a78b69e59cab742ddf0565b75a15ee9f5d27a51d70b4e43694e496ffd2c686e496ffd2b688e0992defa6df49f3417446ffd2f1a0e2cd3efa2458065fa4d62d87e3a86ed2f494b22c3f68fcab0fd3308b63fd3ac58c7d3a97e0b70b3161e38e1e70835b6cfb05d6fe8ad7fc4047aa56df85c76d51b40d85eff83edf53a3ddc796930f050a032c4b0f179e4de5b9a8e755aceb3f13dd46c9ef33b1f5215224fe409126309d8ce174de0892c7821843490f0810e92e0e203413138d2c41742f03ce10619370d0fd1e2706f8eeeec300c590d8ceac4fcd3377e8c755687f5fc1b9c3a37fc30fc9bb359f6cf3457c7c2518f2bc6473db2e9b6b1cf7e76767698d0607f5dd775c5f4b0ea0d8b55d69e753964556c7cccca0df2a522ac8212a919e82dfe0909ede72c3d08b2aedd4757d0eb3500e98dc67dba2d62c4cadeda039eada8242c184ba314aaa211040020006315002030100c0643c2f1a85c17a4dc0314800d8eb24a5a469448c320477118640c22c81862082184100284cc14cd4c19d614cee1afaaf993e301327ad97115c2f4c8e3cae1a580f86e59b3ebc7bb384b08631a07bfa558fa4c8cbca373f83d7ab53435d539597b40f6a7abbf02fad716546bea67cc32bf955a3790f1d4c721d2663f01d0f335ff07d0442617015dbb4105dd7938a28ce582c6951a1a51158d833d1acf401af7116ab5191f8c05e9fe355996b9850c01f85a016e21e0efa99918b7df4f6d4f0f51e90ecc87648ec3b24dff4e305e7357e1878b29d79d244ef74489349fee1c3425d0ddada0a8bf660b7a71af147896febd455fdb0ab17fdd7602f9a96fe4ee173eb6fb0ae5b303b1bb4ff0d9ce7d0bf502902822a7ec9d7152c8f037a9c8265b081d3d394deefde22c1bff8398a44e511ecf4b4870d96ef42ff52fc86e3a100eb1903ae400c74dc05909253247257cbe20c626d57bc30427a0a9847f4b3b8fc8de143284db78dd61c8a21edd48105df13ba4170d290b85ab44de6f0054d811a670ec441f71301c6d9bcb5f357471ff080cdf2aaec88c913ae7d371d42a1c0c549d78ac55a068f78527d659f0878a8bc0192fbb460ebc89c2269ca970951288a6ee62008d83d6b1b82db1631a982199c4499ffd418cb2792277e37d2c52f3ece50a715af4867c16c713bb2eb151c7b20294e979315f7d10bf21921da5cd8324f7e289097af4d0e1f1f2a2524df0a65538e11f74f3eebc9e84843a50d756dc45f16a7e971093a288eb877e0e49ab22a026779dcca98fd50cd7221b5718281d22e999d7855a9809c3a56219651eb1ca059c1716d9c979a24eecd483100af8177b0530cfccfdde8d6731d16848f17f0ca6cab8e8678f5e1b71cae55a1d94c6c3a7ce8d27035347265df5f09591fc9a9dbf65826a24cf645009bf3181cce448cf05abcceed1274022539f861191d95d3d1fd468bd9ab6937113c1490a95676de07a569e2a588ceb2f5b51900de0d3ab3bfe53b1b4479f1ea33b5c682ff3d07b4804f66f50026944c81c6f79ad0df2fa2c5408da95702a7e3b37415b2fa84f6ace75a21f139dbddde77123f52dccfe77e403a506f908bdfc480449ef3baccf420fb3df3dcf8e8b813f0549549ca9a149e04f8240a60f67038a949681dbd2d90b7b41972d4a932abe63337e9cc85d27695901cba74b61079025068cc9a2ac595cead4e24812585fc99e7ece883a57925a39d697036f7f9c94cd6acea62fb44ab2f513307d69604d8ffe8ba196375a9a8d463d62ea595876914487fd07b7b28c2a916227d0b6eb7b026159f4ab151f038574c332d46de55de86945dfe74187bf692e57a49051e92487e44dcf615cf4eac2b6274ae922725f8341965a55a58f4877b704dc8386824e168909c8a1d158bd735d120a691ee710db70f55fb658319ae70a5f3cfa208b89da4357396ac289c237b23fce0908f2f49170108254c21481c006d510ed5b1f5d820bd3bf5cd90dc96ee36f02f7e67c5d4592f50faf6e5deb9c0f1a67cecb80b68ce8fe115c2ebc4920963af9221065962dfbf1bd5c9f9d6ccbb28ed58ff35af03667b334edd0a351abe55494d141c2720ab0725f57169cf492b810400dfc7b58cf37f772839c158c398a4ca41e35cd2c2685a0c8442816f9e477e3fa3b88e3210241405b278d4cb733be05b12f5fbaf4fc1f98379d2b665a0c43a8337f6e1612b6309f57de9a8820b2726c952764fa9ec8a4cb509ef5bd09e226d5962462cc987b1f5d7d0f3258279f54c8b31bf17ab387f1dadaa92cd6940bad2e1a791a35a117902c6c6e8d480c2f87e4f2e8c53af72722aa0219b7754e3dca84576678aa33afed64396e2970043b0f8d1e49344eb9eea6a65ef9df862909ae40429087488139b57f831b4185d10d82502078dd0a7848acb6c7ba40cf9efb5d3cc7bc3602d3b7650df132840bca19670f7c166ca96c40428ac828b503f97498e616ec4f06257eff8966299ad52643a2af86c36a14b6c9d6f5885e7964670db9cd80e5d6dc1e67b94b735ab78c0756d36fd4a2704d41a88fa9a9e65b023c7d045a6c4a59b35d7d3bf13f82203c720d0190928b39f0f52b5909e51dad388e4fb7a6289475b984bc6002db14e797447db3b3ed0fcafb5af7f988a96ae9b8e7e6d35a7e1eac54c108da1afb27d747e574badf60268f61bdd27a25001a554827c6d8d657b90e0ddd3aadac136fc70f33f82500e902891ff019060fe8797a593197fa2dfb189f27bd16cc38116f2cb6da16b84dfadae2e18d74d23147c2027ac02822488df6b14cc5935afa82d7398f1793bccfb5ba9c17e9615229d4caa841870f004767c08f9a4aa23f769874f98f2bd1b886104e211872a805e743db54f4b04aa3a374e283b73721b45bcea2338bf0cbb55ddb8fc5a67b592cf858ab2b0b7ca27c606162bb74fc824a45298932a1a4184b456440ba1339828060805e3a58b3a8c39a2a3b208d574e870e41dbaa4e3495c7bb471e82e21c048b51d2e1019f2516fafb0e5e3e0f48f75bf43bf93c6acae22d5be42011def7560bee3107ba800a4674f7bc7938974abd7478c96ba4ca32e6208f76fb0b9771a8911fa45a9775661a9a455fc3c85279684e9b4454ee975a76e21b84239a53f245c6fedb5136f381a0663511100e0a178e265f520b65e9741b6f442d0e73f48573bbb415143ec9bff3678724da65b1951544d12f5568a5acf9c453a80c8461ceb2cde69b019883231d5d649e7d3b1c70daaedb2c47166a15b40e4750a11edf1c1963bf9f9bf1ede36dc20cbbea19194c5fdc17a5af46b00c7197517a505fa2454fb21dfb924b614d54d8a99700c05a0f11bf39e7117fa2511c1b2651f50a046a36c3fac1dda813ea84c370d17ecd858b1c9d9c8bd568ca98bd4eafbf02f6bc6f4d022d496b68bd6927b0b6c6330e7678ed0d33bc1681cd4c476a76e0c15a09af53e425e53a43087090cc54ecc50e9ffc7e98a4f76bd97789edcc0103982975bb4325d5e34b47f661ecde23bc41d3bd436be8c33a3e5d647b955182b25b48732475bb0f461ce52b33d22399e62ea1fd5c5e209039f3a97c24670636a92a649e8eafd8fd539cefd5678eefe8f0725e0dd3ce889ea5617c3399126590577f7b143967f628edd3d506284cd6d2da278eccf67d27cfccaa929c987549d96bb72b48c81bc8f1cec77a4349fec79590344104d94def57a458c75528cf59acc02381957c75ce538e48cb9d7839cdecf05dd746f67c11afce498bf682ecb62942103d10a43b0c22c83aa000f23597714b62b5761274bbb444a504ce17ae5f085eb7267f761ff567a0ab6ea53305d77fbbbbef9be121bb8fbe23d4c94e089023c0c4aa3ef5517d19b625f56c696c1924f976f66bb9b624e95d5be3d23b23d4f8176cce19ed7512813922008c4c8960a0f62817e961b72a2a96abfced3855e6863059c5d8363f94f513df7fe66654cf8ea071e820466aff140dab5b150b0eaccc1a04aa25d069df84e9443284f74f411ce3951f777b01dcc3d5fcbf563fc25a73849689062ea9cccfa0ef248c9307ff3974eacaab7d9ecbc6baae161551aee4dab587fbef488906ef8ba9ff78505a15b74fc2b0d6d6ab96123cb81e200b374f8ff832ce07e7a4eb638a9042f98fdf9e44e8220f15f3b12f9109026d23f4c7bb4ea4d9162b63c952c88ef2a692ced20460549c60b67e409764573be168e07d682d2aa4fd6c1d2d113b7dd387e1b6add311e434766298c74fe58d51d1da120cb32783ec83da94345932e04dae4f1bc783167b2c45311b74dbf94d650f09c05c016f9afb57b98631de0f7edc8fc3e12b2aec1fac85b97742e5bb99462a98ba705bc41b9554778579f104b0a866b2bfd8155fb47fdf5fba46dd939e1e3b7da32fe3d9dd7518a9311301f8e548d5ac5269880e7ae903fa17f86171dba976029310dc0a3e163c20a4f80a98c6a260d8d468f32f4de311a3f4b7d33129f00437da99a628487a0049c8fa89ca251a1e29f1fbd539606ad4f3995f03cde6b52975bad4e4435beea6200022eed03f40c4283f267d1469434ec6c1124f08c062831fd1e6e2fe9e39c653e85758cb0f929b0fad1c25b9150e59f69edc62e16e40d81680c02095b5e11e5608f5d4b35236182a7543a876ac524e26c0332b04fa03cb1de4a839edab8051f49da2177384e918952e0ab376e3eabe98c2683b9d933048c244b214038053a53d65231d715bed19178b1c8c79ab91a19e5676a651daed398873f13cc0c2c02896db2b6a79f0d760fd69b6e61bf179787a4e28ecf86ab8b6e2f08913eed251d5a150ff8f4e16f347bb2e45992b9d2bfe2bf73f066fd0049862c479c2e54b33e8a0e733a14364ba9492af9129b6c69ca4d5aa51cebda0b059fd1109961ea5f2cfd973c38104df217e272ac16d3281a445fe22252a454d3e514e0a81518ec83e688479c2cc2cfdcefbc94742ab90a4c0e31f4517379f23a2adcfd06aa76251713d13e5a395785d74425720c35dd76955d6ecb70eb2789b95f5bef51cccea47c5a35169859cb0cc0072626e7695a507f4ed1fdb96484b168f97b7c62dec71493a087bde7464d83885fe18a545bc070471ebc6c4283887e7ad37b75f201f15ecd185f356225d7d0515e55995a5325b7c162e134a88bd717a0b5364da018ba42a5d32d52911a6bf53125947616e36162fc3a256257109add6f2de0462cd229f1d1ef603628ac8eb25ad597a13bdb7f2c9eb433e8568084b2321fb00a5cf7b64650e827c28ee00715d8e39033f7c2a9474da7143b98f6f32a359d295daff197ad15ca5d5ccfce612e108bd23fdcb84a78418f0bb7a04b03b85b81c925ee8f0c328d0668f7f2651ce68ecc29ffb0b912aa1a88e46038915c5002456873b083efa77e6db8765f804db181fd9b9678a9050c334591d929a4201fce6b743b66cd1812f94e5a9d1c8f8086720ab4b6ad1c4281e2f7866e566e8cd62031544d10fb0789fbe2b14c14ca39dc8343a980193a2d45214140712fb1aca2437d1257439e3fb40276a95be6de646f527729d1c9c73e9242fc572cddbbbe047241c8e3b7d8928bb74507079b6cb12fb2411e727b16147c0c9fcba603955df76a91ee453c7a65451aebaeed19dc4e327834bb7ab39ae81cd2139da228c82dd559f128009e3818abe0156f1795546f5b6353326086f3baf6df6cc6bf712bd9880097ebcb1fbb1d4358b0ae2565c57c132dc1d6d5a12550bc46386b29a2ce5afdd3fe2a9d3e1351df8311edf11d66139a12409813ae428faf3b9ea8bd9f489c1f1ad75351a5f79ed03ca45aac056af924dc20b07cf5ee29b8ca0cb84f991a8056e57b211841ea25396c5f452861007cadec7ed5249b9e178c7a1c99f9db9f65f65c66c2a0674b0c86c2726a1b493893b196faab55a0f9879d2a2917531e9682e744627ff38632c0521148567125aa0c254c1e13a1ad4ba1bd090fd3526f22d61cade0cfb9cb754a233f9b690128495a259690cfef2c5a0cf1c8f9fea6e1b12099f5f87615d55ab0db425fe0f80300e63208925baec7990009a60ddc276f52c44945d85a5394ce80c710da12d14eef0ae74217a6557e31ab5cecba0b453bc743f1383ee58943f857a7dfcba3a3dc4a1a2865cd71cb92b68f8e590cbf629790cee2ec0c9eb4fa4291e2b55a871639d41d7ee79ed782b01a0b3b76ce438d13ed3fb27b2130a1471f0050ba72345143d79b1cfa971cc7aee315429b998f21146e30447fba39d4b0adc0d4fc877fbeaa148b517e562ef91ab3d0a69760f2f7059c6c972cd044cc96b394cff97d890d73ac39e9466bec84b7cf5213689299e821ea895ff71163106d75894a1573ec771679cc99b7b872c645fc38a97c4696b5518d3120c4e73de36bf24d1c25b667ddf6f8d7803031539085144190f6c185b0e62d1686af0eb6868800923dba5a020c750394d8ade249fcd5c415f6ec18d5da1e49a2e4c3ec12aaa69a557a0ac82cddf71e4649b4502f4787634c682ed60465610497010392803c190a3b492e3d5d0791123b12c5adb797fa63b12e2a7234e910bc040d356b1a09f2cf84a064df23977bb78eace1386aed511ea72544fc40ecea1f3e48a44165592b2dc9f309208a977b29f2bfc27a71bf7bb10193d60348b04dce0b2a0ef1cc6be40f85bc6db6ea24445fcf45411e0f91233526d6ad3986e61eb304636a7e2648be821510d9000423191bedb267248664413742d892792909a1f57d597ed0f778185dbcc6736862879a605b1ae5d0d3547ea118635094858f1da90421af9d4964a42fb734a7151b35ae3eeb2447beeeb5518eb9ccc0537b2091cf519f484e0867e27b02fcad4f941a5b8be460612c85a60770df4971a96d59f199f8cfd967210e42647e3102c013eacf9a14897873f655c902acf7289e0ae796352c43e6767e523ba79b6ef05469c1fc22a54d8a5245428a30b0cd54aeddcfd33b5e97d588dbd73020589f41ebe721c0877a7c941d64c958549f5da053b7f7ce4680e46e50cd7e725f90396cb4e6be39c1d8f35d1b1a642310e0f43358372713d53a7f4f5d595853595d0e3dfaa8e478d23ea819b4f5fb31ffc1c910687eec49884f20d69e4c6fe1ce0e587ef1cd02699a03c5eae189bca943b4e087ad0eac4c8873cfe612f17939e429e3a346bc02b5345170d97dd95e1da11e99d41a79f90d0e9cdb159351fbccfd6ad185cf78db80c9ed899222e9604bf00ae318a9317a4e2e23b4d25cf0df6d0839959b4cabdfe081b3835962c262fa08b8862e5ac1d45a31ac5a5e5e01bd370f58a7f4e7baf71bfe8f3f8aecd58d2eda77819ab92889cf17b1c9a076537f40076c316908438282dae52b1807d43038ed8851bd115162330f6cadfe8185691a2a3191ca8b068a24890b12aa22a5528275aa7ede705e35a7fbcfb46628727706f14d975951755f09a41e3bcdd18ea671a8dc9fb0882678a9bced60f406e6b9e9096589ff803c86eaab020f210685826a6c3ca89a05024322973c4ac1766d6376d76212f733941af82447c347edf72e6fd6989a86323047b9cf6b8e92007c315aead8c64c6db2650344221006d3e8a3d332f61b77fe182028d108258cdd26d4efa473ad729213bc514be7839a105d17230fc7be6344a1e23f8a5c436cc78cac90e2812f28a3c3936842dc753c19536f78c5b012262d8ca997abf3cb14f2cbae99941b8163e31f87e264b687891370f4871eada1f13ff121b5764eb5ad15bee0c9e7f65da45233d1035b1bbb9e5d8890b5cfbbfe1f80cbf392f0d9f8e0fd4b2f597f534efc221a00c19e4e698f5232759bac7c518526ff290dbffd0a93cd6155ff13c4bbadb0fe985927bf44bf93293aa0cda3daa59a04b26e86f815865b8246962722ddac69c157ded5f9f12ed489e59f25dfafa61ca459a15d995a4f2ed67bdb59b75b121d3eca1ec50ad74e54567bbc4db717e352cab8c324841e1a9c62a66a411688db171c1d8e38c32abee8e314d5801ca1293e4433a7685014e0cb2b6c75ef8d562b41ecdf0185fb8ca28f5d07bd07fdc59979d21f4eae2b9abe9116682ca1df590f23b94f19787ccf37d84de9d039e0e76a9ab0251fa53a556c8ffa1defd83fd9ecab0cd5153f0297f2e47f2ecaaf5047a4adfa55e20e25fc280d7e33addd50eb07c220864e7b900045c620d1d0115a5707fcdac37c13a5bf0f988fe6e0f7e420f7583d5cd8c4754fb69b5279cab371d98eb7e073447571cbf91a30bf91fa6ab3b429458bbe78d74b717c9ebf3f0b94237ab07a01a0dd55008fbf66550ca47529be7ff58ef86f0e4c0218be38582ff0559087d1fa2efde014bc3e38df1c7ef77631eac7a11443e7991c25ef855a4e7efea2d829be3a86b8e1f14fcc5a7e1f5b8427f1501a4d734ff663f14f095f9f1052a0faae184bcab8133f39234baa5c13f5662392d89f41c109d58b66dcd6111091bce528c27e253042aebc58c44984c517800b4b1cd3de30ab37ff816ef426aec14c97b3a051e2267ef2db3219d9f418f81481cceb32918015bd92d43dc11a2066558a6235189185af9b391baec45825684f47c31db482d79335b41c1b182933d10bc55a9dfd68cd1517e3b0a491785c72bb26890a45fec573f75e8f8ae599f128153450e77e947e5049921bf93e5c01ced9fdcd9df01f915ae1a33110e0da14e2aab865c3742d92ead4eda7076a46c089056a72f4b2f4e859263d6e3a037272c5e3cb7a5442eb6f3d4c682673a1622cad4f3dfcd7b185cf1be9507d64e8b0581fb21844baf39d1daf955ee9a591ecc72ae75181eb9bccc44e810fbe0ae287b0526b2d7f7aacf421a3da32cfa46177e9584dbec58de026dcc4e5cea68f8432cb64fcf79a5c306a98f982cc11deec244ced30adce37279e29c424e4f6960f4c6560aa1adb4cb0611ce65f7293847c26864047c30f833b60c274e8b3e8caa17dd550703309a35876c6811a585a3e89306f7e8e8caefcf2de807792e2237ee0d3426cca7cca25e8ee7e8dc6dce5a6108bc0443d7edc2e58e8c471c6139cf686928cd0fe3a4228cb949c40589a3073479c67078ef834809bf707d275a42f056db7f1c9d70d8be00ccd74345fcd726ed8081ce60e08b6d46a124560f9457cab01da2265247290f338df04d20739ebc800be8a5e02a874f3d8cb9772086d00c29300b0155ddcdbeb9b47ac85b5206b53f1d6b2ae001e0705bea189e2bfdb0f882e449dda2924d6149a6b91419ec277152ff7a22700a35bd6c4acacc18408d72a7f8b9375392103304d2abc06c3abfa82f20b4a25b00ee3f97a42a0f9b4fcf813b71c4a18477398201cfa68a388afa9f1fcf3a41793ab27bbed3a147c17d5f38894a0a3a2e74bc93687b9d820b0a4fb2370caff0a57a18f2e352ffc725a865701b8658e7261b57305001b686bd4f20226af209d3d9ecfbbec4bc2aa9f02efacdf1c5535df5527deefb88b36d8c580a0cd0750687e7ab70fee42719b1860e73bb930d0dbefd0d01a5e010699852939d5d15b80ba5f79cdf5db0d0baa57b0938754552db03a2956496871c2c41b0c02990dee8fed9ef30ed12005b1dd7688c0e38706a226a8363267af0f461dc57160d4d28252e6827517ae5b23c99df37b113d4152d78dca75c42cc2c8ac591e39532624a2003ef221a404fa62e55569419f24425affbd9a16641fe26e7619315373450f11d5813b571e263915eb6fd41a854e8979aa2c12d94e3b6fb8a14696b0ad3bde5c8e22d8eacc78b3eaacffb3ff172b8820cb28aba8919d2a4092881c9e9ff9f157169447ab5aa3a25c0198d258ba4ec0b953ee72776328f3133ffb8af05f206b6a66a36f84dd1156c339e9edfbfc53f199777fd620931d7b8e98b954380a8241087a28695736fc8208d1f7aa570386a9d85efabf669653d6d5fef8f55deec26dc31bd626221d5520b94436349685c13c1160d6e163d9c2bd3c2f7bf3b0a5ab158709b25270e72661769e1f08ed0fd2d360bd737e5a072973be60a3608a72d34173f331a6ee2a78f98f71e8d69a2bd0391469beab9563fd851004cdca425691c527eae545ebe976a13a64dbe1870dd1734bb2d4c99e9cf9f0d48cea4e55ffe05b02ad52cd34ba90e635793ba3468ddd2647e3dcbfe911616b765f4febfbd2e77e4a9ca2c50de51e5649b3509b18e5c5cd71082771746b31bc9bf461d117b7d2030d3cd1815b1ce3af782ec26d8b6ff0b3aa57ac3211372f751a4263d016f67dd7c0ded478b18731778ae01375dc15b54175b66df531d8ed7e50bf9dc3751bf14c1f20e37df288b8443bd3a888864f0f103d80fca2a13130a83cdcd4583b3f63418a3f7b60a98be886a819a69ced481a9f93a8b9c40b484c63ccb77b21bb8228076a5a7177c2eeec91d81bda339de4a1f68ef699d4069672868f7684c1343b87b3573814f9889563cf492186d017f2aa880dd9c51b952c035ecf350a4eded946d987506dcf30189c006b0644044681f92882aecb30bb37b83202c70c7a916dc741a102950060fc7b790ac358a8e5c659d19227e708e31356deef1521d07cc45108e0ebaa1527b5c3606fae4beb69622c525bcd43b7c83b4747e18cb896a39b95da3c91384844f46f79fce4550f6262da0c4bef90e33d1d3a713a0164735ffe1212f128fdc53c201ddc41168ae09ad28076d1db2bd94e0c7f92170458ed12dd0fde77bf86590c8e7187726f7cff80b7b6b73762352a8c94a3dbe0820231422cce5103e768bd22c6041e90ddf222b766a6dad7e2b141445fdcbac8e058434a8f6a1b5e8617755df15b065cbb538368f08d53f6a43e04e6f76230dca1d8fad0be92773728e9b4021625fdd00cbdc94bc75d6d648c6b0802dd035831a89bba243f084ade64d1eb17c5a053f8e948e4cd9f4575a11c80d59248fa35175e5ee44dbe34d3b9bef524d6877fdb87a91e7b989f026508fdacdfdf56b107c020bbb2a8122367e6612ebd1113984d642b7836ac80a59b88fda8eb40ddbdf3b08e479f7b328df7b778d8e6310c8e90b7264df704d8faf8d14636e15f8b50d0fe4821380fe8c71440dfbc7896c3de6ab3a768f62b82e0a1157329676f81ed496f34815c3897270f493ab48b16b773545810737ed3c9cf1e5d402e4abe2d25ecc55bd49c7d7660504893aa93593df26ad74e94c2be5055d0b0d99c03fc5e94984b3f592127dbc815098c8b0f414457d39ce2ea02cbe3d002b80c45f50419e3dae73fbe2e8451549f5455bf7c49900434a61335e8b7b8eacefe1266138cdd26c96212b0640e72191b4d86a155e173e8ab84400b269dba6d9eaf2f37f215c2677fb97a82b17fb49e207ad5b9ae9b18cfdfb6763a13c7e1a61cc9561db04db1b8a64a0b1691a8716c87440b5c203b2d80a1726faf6c2b4fe3f363810353b1b7c8eda1e4ec19cd7fcc87a5e5d55c2dd529434b9db0a6f4a584636873e0aec21cc8f3495b0a5951b81d78a2b554a65c5a018c292300e111454f22eeb5180f241f1c535dc4714adaf546ba8597590bf9a12fe61f1b444a6d22777aec39e89b3e4f9991030912a187a12b7ab062a3c62038adc49d3bcb8d914f8a535700e33e17196feb96a0749a995e759b820d9ecdd95fd8fa959d8e78c771fdb4c285ed67954b2a0abb93c907ccbf0988f9970d266b41450f80bbf75b2ff31448c7cd2658b032731a9c5ddfe62003756256a8f7e56a67ae5235252374793578b11be8124bf0ac8d490b1d4afb8d6490f33880cdc1b07311cf51f1408b8fe787ef403e7b2e8819ddfc0d040bb721057a04d101779e8760e4729cb08eab080f9338b9fb4777d00e1f7575c1f92da4fb7d2752dfc11a93c9df58162c0cf0b173c36399ef3df4a627e223010f7bd668920c1fcc5bff1a8842a4595f2710260aadcfb044f4094e689458c1cfca87d7104867eabd17635bff81f686e54e5a59e438c9c2ac0fdfcb0ab400aa53521fcf89296976b3daa866bebe8a8f4cffe0418b3e34d482f646822b170eb2205a259caa627cd3cc61111547c683cc775c6484dfebe2672113bf308e38a920ef8d2175d1c195792d7aa7ed986f578284ad1ce72b62fd2591265ac16ad5dbbf8acf90228ef8b8cc6320f560bfd6804249e96bba39bae901f539d79250e2efae1c43c926e2c3f37b526804e5d127463520af56ff9afb01e6eb726eb5ed5f6d20641341096e6347d337b1bb874a309de06871768e82ce2a12ba3ad5c22a0f8a1f70501629b8f107218266b332fdd7c4895fdc5a0038ed01b981ac09f22c8afc7ead2e26474e176f4ac4c6a5ed228a4ed87f092b04a00a08e0ecb875638e3c843c6ff9fe62d40d9190d3fad83cb64744f0e7f0a353e3addf5824536c616c254625de99a877cf26351516223d3f2469100d08f956f1ac8eeabeebf02fa7c1ad93fb4398899f4201ca6844ec7133a84e833e63cf33447104be837d1e2f33f804e4aa01263ce59d74b14690f6c7e0cd252192c6d6515096a5e4c55d0e378c707a97d90281f095ab30cfe9c9d6557ac8856ce4b3886a4ccf8743a91da0e11acb56cbba62ad99debf62b7048fcc62a2a606366884ec9732eec8c4bf60ce9dd64eeb84e50b9086979ca58ee2375d0afb6f3488e8df9c6af4c8a2bec12744d3b321cc5f667707d7bf724e3deeb47b1510e651b29c4043dfc859f539309c73c70adaa09dcbb8128b90d3145c2769acf258c446a01424d93ee2f82a4aabfc20063321b3d4ec00c9b54f49919d4cbb64b59e0ccc7b9b990456d8da0b57a3dfee40cfea8309d6c2a001e2d8f453b93544f87097bfcfbef11457b5c7892a089365b6a7b5ca6928fed0e14955203bb63bbd83458f170b1d8cf0a298affdccc357baeb5b47fb1d29495b61a612df0da83c12990314cf20594a3b2304e8fc4d525401098959eaac9b8ecf129040d4f33001f7f0b75cb1600f607074cf5da61c257a61fd2aa55ee01b2c417930e64e9a92b7596647ba86b1900ae4110845fa2153c8437a50950a22922a1f3ec54a20bd465a731441a08ceecefbe8a61f04286d281299a6cf5c77ed7b84cbe12f5c14bb940b9c90f5a88bf2ed264d266d8dfd11a966dadc2e845bd1253086f0af3bf983fbac95081b385ea63b0a6df0b56bc6713bcce694514f71d47b64b09616f5bd876dd1ebe01b6190881dd5c5f035890226edb59ed173a804aaa1229667b27416621a9a97140c452433b1507154ab721aaf1a230a595b182101af8275e00b5a116551cfa68fa7f37a7e943d0dd1821980fdd394460a7d8cd708b43d477260c22a60c118e6bc0f77697211bf30f254dfdac0939cde5071b107d5b7c97346c4e5acffd921c8241ae4730ae2b8445c42659ba9f9357535fe1456c8dcc59dfe012ac06d387d66dfc4de07c0f3119d675a8610d36f480b041d5165a8f2839dcad2e5005b18c3a838ded54f3e2d0924c89173617fb5304dd89e31606dd8b66d79f17d5c6ec0d0e17d70397305ae9686e52ef808c875f0c718218ccd97d0f4609404a75efe46fe134b521c4209632b4501f51d0445b84393a61962bd5a3a823baa1d0861d2d72b6c3e8ce05909d6130e45d0e3739d6617248b63ec0a8d83d56b40653a4c51895a15da274651ab518d2bfaee42eab8dd28420296b9e0f22ed7fe18d1b6b7aa0c1427566c714fe8b03ea62a401ea04a9f8e7f34abd57c547d00b0f047f0d33d15144f243b879008f4c32944f2bd53d40f1cfe4623d552a9bde37952d13cdc31a4bc18c665fd0faa56bf0716f706f37d8b2226a4e183c23c54e507c66f7093193bd903ae77e0641f50c32745318eebd510e0d143c3dd271f9fa9eb3d73b4e834cb4c2aa8348a54c2b6dc399f4d2fb20b0e921c6cb404b32082c924fb6c9cd4a1dbcdecea337683b71595b0f8b7736fd35e90c2a9d5f2fd830c4c1108990ca8f39988e50ab738a83598a05356acb3397c701fc9b368fee0cb7e3f22369d6c723ecd56915af4a8fae3d77a3660960ab2ef861490acc7b992be5bdf3bc4ee69f46a01f221ad80c217b70caf75d76c148e900bf56348844c26171380687c8c7b2ec62652855c3c92ed4c61edac56eec27691f159d65b77b4b794f3d9cca8c53aed4f8264938de3434644fc295539119333f3631fc933931be165523d7987bcd2fdaff6470d3320baea52e0fb8b84336e7740e10ef75797f37d54277cbbc20d8eafe0c04ec660020b089a637e8eae284ebffdb32395165ad0e8e3e58ba40f1f4944f0ef7a7d5151be6800de2c3b94fffd9458b4b541ff116aa56a13c8292a46e2ab14f936ad55a848fa4019ac074050845142b20be91a6f465191c6255efd49bf5c17705d98a49d20e9ebbafcf862542911982f6a25a0a21d2feccb30947d7e7a5104456183b3c99a3ec3d55c2a2942f49fc4b4b304e97d0193579b87999c3200237d70742071d3a76c25fc2a83f64e089e0027859ea7e235aa0fd9a412bb069ff9d5ea3b2884959fa4bd47429ded9802ea65a993aab684b7d8dc12a6a1816f14056b724f613ef51760ffa160304554649dcde281d793d9c22092cc49f184453dd36a61dc409a28b81c4f84dedc67adee49f9d3432cd45ab8c249378194198f5d2f547c42111a2e72c3015f8c7623b381cb74e83a83840a7a595d6b117c6cdd1b1ed783f70bcabd0fade2dffc34bf4b8b10c9d60ca00d17308c8627d6dc7d12eff08e368ae4dbb0e541fe00764e80d7c9d3ccc501be6c224e0eb5369868841e581c1f39ffb006f78d0084cf8dc880424d7165fbd5dfaf683c0ed37be6b2f5a8cb5f7dae42b9d0856a22391082325c9816f866799c648630bd2376284bfac22628e285e69c02a0db32c22f9773037c32d0293ee6e2998543a1bb19cefd4c5486736bd3393ae5e28aaf5339c7cc9b7462d35594434b081beca33711d5d12c56f6aeb874504f88b05591f1d5d2b1fa20baf46ab8eee122519d08c36c281b5ea7e9e78cfa0d1b77fd70356be70276d22fab0c61b27aa5333eee4d2625c22664d28f7a0122e0c7c794b60a822156caf404bcf214a24600f0ab6ad4a3dfdcc550c351c30f0523eaa8c814432998eeab30a9644c4adeaa51dbd34404e2024a8805e6e13b3276632f60548678c751e641328c37298fa02a20b5adb90c4ad371bcd5ea5234c664f22d72ca24611e4f2dc3a3de7157d5ecc8f89ac028adde69d5c00d0eb0d87b8a1eaad2949e568a2e116db31efaeb7fafee512ee690f37110247929ee379e419ddbe874ceac735105bbdb3ee0c1bbb394572b7d477d0faa05bc28fe025f5a77ed8aa3bef781f77ee60cb7362ee547466263b834aa9e17cf9096b301e2abc2e5158bd4d5ebed1fe4186e0ca262883cef928b6a4e8f7f4435d0678012ef94fa165ca818d608286c13c652ca8d97a42106dd5ddbc3cae7c5f80395c03491058aaf786bc9a6b41cbde07d4831ccfe1e841eca6afc14ff215287cd4e70adbf7f314330ffa25817722bf2ee8ce7396beb10367f5f8f99f2011465d1c95551a274013a745670afa4fdf09530480b64268bf1ec0afd404e7248adb21f9368478717cbc589c0bfb413682bbdf63502cc410b5e4c637477deba641e1f7375efa6073101df2b82bc822feb95721ff11f1e9b6471d044740dca3871b0fdb92ababa8c60e3565d66a85e5db45a39bfb2e40617f781a1836da74937da51fce45373acd264d9561005ea708a94826c0ebd9f7849a90e1c3f8ad7ec8f4b9a64b6a223ec62c17e5bf3c0a41128fb7b89a42c52cb1e5a125f82f0a760494f5918f99d03d7d0cf4d72d4a95c6ff63550ddc6c021ff794cbe17900694df242581f098a5608d0d605f635de32c4471ddb97ce240f7a756fcce028a5688589843ce15322af7d321bd096586572450060bcfe74fe132b222d44f9fb2d06ee185bee47e8d79c9ed46c58b27344364d7007ed9f0987b8d6d3d26bc57897717fca4afe0fe81131299f9e1640120fddbb71eb8e2762cd06c5b2d48f840013e5af7a4c64d03b8cfc173a79c4192267cbd71863df8bc523e112a131752bc85dcf494415d69c780ec261150a8b3413c23b377c39a44d8f4651d4a484b86b02207e845b44eba60dd56fbaa8398e6ab8ebfcc15b6b73cb9c44e1510d6972b80455e9782a3e8a2c5795659a465d40f5907a3f446d883264844f01fa449503d911d3f537b10d99e1e408794ac2cba6f9ec01f74291a804dd0cf8d8abbb1bc03093050922945639809389b44114bb35994be1dfd70ee34c813e9032d4a37adb14dc0edc802a08e2660b9a83d6a7a70fa6b69b9093eed8b2ce3d75c36dc4c2d304f1244f44a4ab119b284556d82cda87c3adedf151f22f260a25823a753da5e7e0dc3380cc0d8ae76e484c7fb802daabe09eebac4cfad30380cc15f276ed42fe7822f08fd9d4429db7613ac170557a2a0f53f858a660bf471bd8aa3492b242ce23853c6985b950977a0f38924b622f170e61afb631088406a8b0aa390250202fb5ec728226854574ea4b5dfaa2dd69370063bc5fdef92b836bc3f7c98842419015277beb35b7cf44dc875e826993168432fa4e8400afdeeb63376a3429d94394d7cc46f58b0d481e4b12d61cb20aaf74c3378d60ba059acdc917a348818d068f88f4541d60ecd1538952ec277ffcce0a66452c684b6ac40d273e72c43d89b1ba995cc8390ccc5dc23c0cec5eb799bb69f6991cfc2f6066e07b1802c820e35172e7bdb7931aa294d1c93df624d84fe4793ac98b6ad34f6aa5a6d9fe25634fc34658f12b02f0d1808bb9a157d65355e88610f3db7209a201c16ee4459d874a8a3cd2e24606fefd348a936e396d4947281acb9ccb28300c4ec2d07c818d127236d13f6326ccd6212a4b6303fac2e774c1509c12faaedf5925a7b58abacb17ac547c9b95ef4a24132d2120b6d77fa6450a42404e43f44884bc082c2304abe5b22471d35c7a361e002e0525d7fc57ffa27439ac90258e78cbc53a374304238dcba8c57cc0e2f8a43e4b9b8d712f195c76037820a9faef09ed03f7cb3604497350488339c50eb87774371e62af10f0aff4baf650a4914749a92fb2fd7347f8b5a92bf807cf014a9573470baa348248c1f1ae1783cafc065d43a8ae473494dac49c7649206993d7ee9874de4c4613fe49fe5d54ff1273e2d580c636a0e60c85d80ea0d6e8506b5c9ae90537608ee84c1c1b2571f09aa3934c68370032cec18655495459b83ca94749b2d191d21bf76454c2211b9d493606bf68b9a1808932a0934cf387bb50c9445fac6ce01789d089c80fd628f8dd382a02e3a4485e5993757e73c1755c21257454329d2fca6820fd86704b3aa3c2d42566ecbe2882571279ad99742f7f384e3a63db5a2a138383a5233e84d33b9d21c294c4d03cf7884fd3a76f947d726a860b4593ef0a395c7d5b90716f94770cec4a18115c56830d49c231edfa7ce10a9367f949c50a606bc6b0afd8eb82eabdf2a72a3b241ce79c4f81fbe39b2b94900036dfe18ad0244ed325526288a01ac64104455cd24707e085128ceb24292efd02b7767a97ba71935bd4ae1b2205fb0b7b28a4177c492496e9c1e318a955abb9cba3502a5c8759a52c84b79362b8ed0605c37741cd4eb680e50a8f9a5470d6fe11620541f054e06289b839426f5d07d74017bfeb8587f0361be931608d0a2ab8b9e8d9f858726d4d15f8dfedba1c44b67007fd67213e3647dd1935aa0866e074d1732ff5eb7f0d2381327dba359548acb57c047f5c0a13599b2190e22f0d224f1029e96973f084b14e89b6f6703f09e1ac212540840a0d8a4b3c042648266b81693927fbde60a73265bc59b491e2e3d188ae1c80f77ec38d9b2690ee2138d49b78bb19ef8534e817ffc9766e917feb8a488ba670d37a73164d88e58ddf364b9d39e64a1363a879675e3ee6fcedb0628e532d5aa0f0ae3bece0a22df6506ae90f802a5946716ec29361305c21554b92b4fd6b1f68c02a7fa59a29e4cd10edf547c0d2238b435bb426ec10c5b2adc552c15813088284b47ed23db9c7d05e6214aff20cdf8a336dd7cece1a6ccb631d1c82ab84276ea230698f4dcb70e9de7a418989cbef667c4d7175c6759d67dff23dd667ae1dd7a00c1cea6392aa0906603d97c8cbe923115e8e15b02022b6e5b7575d5bf61cd521a80838baa66ce2ddcd37c9285c5622f2790743e045e2081998f343483e86af26761476a3dd99bc4d0192481993009818c3a9c3d244a326a562ec3971c41111777ec9fe12704622bbd27505cda4c6894cd70947bca168760df9f32c6fe32aed9fdedb1f406fc62eaf6dc1ffbaf78f5e470161588332113178415f42fb8db716904292d01f9c4d2fd8ddf0ff769c80894a886cae471998d2768cf3bf474bb6e3513aa062a7a87d21ea9e8d5870200db3710119cc9e6d11b32bad7a2b562b8e73e269c352e4bf4332aadf3cbacdf18e726ff56ea494dc64c7db1b7935ca43ccd73b76307a1a47225e865f9e13ad83de158e6ff2768c592b653795cfec5808a776a85b691129b2f5d509b5ab9a05e16de9d8cd476f59fd14da2744dbcb6cd50ef779585012207dada80574504719ae8df55940929c4a76d3e870abbb5cd456c76fa95831722ec5452527102ccd45f043c748da2f371e270e48abdf4ed8e299482d63b83837c5d787b1ddffac1091f846f36503c60cdb72b8150d87c45bc623d09e6d05ff37788970fd89505ce2994bd206b2073063ef02678fc6c61c8be7edd90edbfdb377a9edc76efa1c43d2b8dbbf681c54ac0841bef6a686812b57d4b96486be4b06f716965a221e483c5c2933b8fd970d6e7696731eb311e3fa2fe9eed85ee00096ce69d345c9802efb3e8d24395606684f8b1cacbb499a23ea65d541456726e0e0e1e2e370e5e5895fbf01e1d24b22ec37f6748fcdf32aacad056e88dc9f8f6e31915b63fa927b28039fd32317ea2665135f2cbec3b21ae84abe72f9139d7b73981b26f0fbb5b40fa4a2641d65d799a551eceb4c8bab99ae7ef55c6ad772520cb7cb31f71c3deb50b9f4c9e3ec06455709ee636c698d789db4bcf609fcb2c9f891bad113c82ed7ea33d96253176e7b9746292afbcbeda1f2801c70dfd9c2a9f9d2a5e9002935805e9b65418d1f77c67ac8c66d14888ab494ad016620d323066be59947391fe92a636a693644cbd167afd68ebac0d147536299c23a288a9d239cfa210620ee97e32929f62b4846d48d6ef77d4b26eeeb820c1e8d4f95491a19541eab45d34cf1a8e86723655d4edf471f730078638f2d472813695f857af85558d0e3b3f644ca82ca0a29ac7d347cd65dd1aacb2ce278d298e5206ff2c4e97a79ddbcc3d99e2683370419f03eea19856a552d128f01b1db59aad6b636a97935a00a87aa12893f19dca878447a26a0a1db9881a3f5a39689a630ccfc40d6db187701f1f620c766b6c5808efca03415015ca9fbb1e84f4c7c337fde850948920a3d317570a4fb8e8e5bd9932ef4255e49ac701f09d9f23800cdf6589138ea4f7a5035b87bcd44d0e4e4427fb44960adab7d03025a77a6f91b851874dddf4003e3426770bfcbaebb8e472fa9b600c69612e8679f927fbfd3fea24eda59ce51e43a849ed30c9690c4c96cd449cebb574a9758546312b6cb2e8112b576f531b996715d184deca978fcf10a174e1de0c49983042d3c186eb2ad642eae8a5ff693e2ce9c218252102b5d5cc9305432ccd7fc64d2c6a514ffc66406941ab4f85fbab00acc27cf902ac94896e09a9896479c287d04720482d4eb8d53b89f4e2422755f82930015ed04e629112630f998e35210393507593336ed3cbf84c7c212c36256f7091e8faddd022ddb648dae87026165b2c6a18b3ef6c38b9157c1b345ef303cdf2e9b91c51de1b5e535ddbef6f59d8dc5d46ac6bfa57592f813ae5019bbc8ff35881c9ab93344fa71ff5c2862ad3cb040c05e998ae8a248f46a2f8b4ed684bb6f9b1a54cc5307963da868b79e1e26cb4cfbfce7b3e0c2b69ecf1579309ade3dcf16e242838238d2d21718b184753bc26c9f1c6b5b04922cc777bb6081af3e1ebf7c8632a031842e7b2a72783f44c3f76844bf2a170b48c34ba214a934feb7ee94c9c4066621a4cd512326807d8a858c710c298f56f110ee71e20f7655f95dd3aae33558fb33af9985c357b86f03ad81e26e7c4eeb1ed06c588688dbfb6dfb115d56bee664e7d5dba5e2b9d7c536745c57d214b980b5f0d90d2064bc3851ab81bc32f3312e2d433ca9fda99664c0b274ce2e4ef57013d4b543eee3f51e0b460e87dfb8c156971d0be8fc4a3cfbd162e2de1f71e0a9c4a9fa7dfa7af2918d5bf637c90576ad95bde41a17daaa483a5ada71a893fa4040f60b2eb08d2cfdc281f2e328016695684868a524ae5480601291920161b62631c18c9fc5a770c173129e58fbccf8d42726ac033813376b2a9da0d43c6d000237563cee6cdd0e3c39e070fcc6dccfd04385c4625234355e6ad059c9308764cfa9778e4b91d404925f1cb10d25ba7f5c64661167c337f75c8083a887e96d55a324f0f74489461ddc162ea98009e1f98e126ea110f5d22016bd13e7dc4bb0692d32f0079ab7af058b462bb6cbd8ace8551eb40d828d00619c1aa6e0a7d5ad42b9242447d2b3bf7edb731b64977276e30102372b6f57eb15de4db9d0e14e8343d615d6bb9f4ef0f74061ebf715b89a057addfe5c6b1508efa4755ccb76699828ca98a4cc3fcefdcf103899af3694d78c47604a38349cdb69b72f84b6ed35679dd9ed75ec00c10dba62d8660c26e10a7245e51c66e37d5839c672773615f7c953ad9210e0b1f4da90293a65686c9219b482e5ec83ba492b436ff3bad3c2ccd1793fe17c2a432f8c1c5643e33bf5c4ad82a3587ca134376bdb3fae9c1cad303efdac1ddf024cb3d3207f521b584ca3f582bb9f41cead08db9be7e805f48b0aad0333e1488f2fbd456b6aa5d9117103b108a1bec7e4b73f247a17201a85cdff77cc36fe1e0be1bc4711dc75127dc313e2d8d038ea0f4c9099a28bd4839ff2ecb803e2c3a65ac8c0771f9d54228b4131203e389066b18a3a9b89c5f2854955b4222750de4a50268283b91df8910162ea22cb697ff2ab484106c0a18d177a89baff60b423796b9419438b9d736fa4eab4df0e9469aed9ce154b72cf33f678926c337ff125dbe04be6cadb4a93743f019c5956e4145bece4a9f10208071eaa90730ed43c669ab00f6d05cf433defea51d78461ee480ba1bd862ed258146a992d3add18c001729036c8f810f26354232515fe71d31adfd74309701a10152680bba4997eec0130f4a7537b8dae4e7c7c42fdb97d6374936a96436ccb9ffa47d575c9b14f531cae154407876459c4918b05bb594097f811a8089314310b9fa599bada78142c50b9115544dec43ac6358d45252641048b0eef25039b519a1163183b474287fe194c7555a8e73f63dd7bd0fe35d182991d53e9df9a649479d814c7497694b87f9241b1cf5636223c4a1f93b1316769a9ace4688734fae464ff4f2f7bbc1f442ecf869cf1ea1d25c3568095733cbfac0e437ac6367dd25c3508110f9b6b01031f4ca003fc11a1b452f555dd4f2fed0fda58f1522620fd7e8e79266135267a6b2c2db4ac557e58195f4153e805eb634b62e1378c8dd079bff0372b89e72377edbd7028790dc383cf9e06feaff50233b698be946c4f2c35df5d86485db1b6855a36f143800241dcb6d14923846cc51b82f10e892efbd0b701d7a6a0a59bca02d57dd572b5ee755092b7adbb93870e5bb7bff29530f2fe007686702b0674ccd740640697e0ba9f22b6cc0909ba51fe5c1643845d3950b99064d3f029f65385c9bed057b9e8689f93000f96757be7e7e9009ba3044b1052241044ad7c5a9c95dc21d602f1aeb4eda8325245e99338b03617102df052c502c7ad934dfca03e26f7a7a356c8063c90adc94918ad935001472154db2a9a45cfc6d3370b36479655791acb3d70834e1cd33f392d3dcffa9b1093735c0e581a30543d2e9085bd0fcc193aedbc0f0be8893db391623147ee0e2fa8b6295be0438e4c082a68b46c68a516a5bbd19c78dcc497cca87ac28d3ee973323a5f99289029e52c3e55e6e30876abaf76c5b5867de2b07c8e02a5f94c4df4ac10fa19c430a9fa699e72851931cd52b4eb79b84ee4cced63bfd2558ed001a01c22f31e4fe54bd90c0ea0ce49e34d90341e5bc8906a96f7732bb834f2beb0e6de77f6c1fa6c56c91fb08514b5818d3fe24541509a81bd1e5e5886ae600bfa341abe53b08b7c224a561337026acb0328fc5d197ee3aaf5f19307119445f5677674a600a383175255415bcfc82d816d077065efc0c6987cb59e14c37fca6e05864b5dfdd37ebe5b22d07b0ba224512a2a5d5c3889109b0bef0edb8e5031dcca8a716ab449e139bceaaf3c5355a1b1ab365b0c10196496495c156cd12fca41ca604b7ff4b5f290451ab8cdaf420cd111e327008cdc23cef7f0969f4c6eae55b5c6b256e7df318bf70cbdf6198b6fe394451d8a8c500a1340df36aa0ed792f248261ac693d127c768cca18741cc177d016b2615090e29af1d5d99b4a6b8490f5fa57552d6f55af4542f7cab90ea1d787729383fc7eb8ca40e26734d75884c15a8da18a70933015de844201cd5ece3b3f5e4b1413f954ebce49ea29848fcb7292abc91ba2cdd8e8b7545442b7c787c336b4fcce3a9925faf8a0033b755690eed8e28ea579fada946aef7416ca5fbdaf4efe885614c6f65b63d4be2bb3cc730ed183398f47423095e8a85e64aec2cd825c78704c5f4d92b29042be82a40eebb768ca78ace2fdc0630e94d22a0d663627f12cf72174972c57a57c247483dde45bdf9d47e57789785a4557664bf17a2b5e52ef80333f0aeaf2b89af59691dfc72c687d7bb2a888f77909e0d29dd542f44ef0aa8785bd9bc3a08bb732cd8451f7ed7d0cfc03483b5801ca4345f6741c612ab0c2bf9e86b329f1c177cd4f8c8326382571edda4aa83a8ea996727d107eeea679d815a54daf2a9fae13c9c6a3038e9f5d2e972a0e0fcbeae1833fc69ced80a5a4e4ed275f16c33790916632c199055e170d9e002e5dd1256856fc9db14a441bb44f1bfd04c0f2c94d2b83863d056da3d172c1ab43f250926a4bf88ac8ff63b20264fce2d50f7553aa1b13e849082466bd53de8b40dc49868593aa6023268e8e19fbabfd09d1c2eb6cdf314b8775b904b5bf8d84e624fb06e90b6d0db8ed5d65c77e61e9b16e418a411499763547e1d1ab516c17aa4dfe1b37e320cc56cfbf802373da66eac6123eead872035d8fb515ad455b801f8e40e72f28f94b3de46aae145563cc2a4968736a333abbd3c4a664769d96e452f8ab8421e8de9cc68103f31e2e15d1370d4832ee67cafbbfae5019684ed446ab81f26cef6f1c8e8edaa4e4d04e5f75978d5cd7d8a888be65205e4771f5196059e1d882107c80ff703760ac6ac3b04acda794a62f2e7ce1819d881ab9d5770f03e2ad3dc8334a0f76ca9ce0ae70c389dc6574ba624283f04420c1ef8741839a629ce5b3bbe07fb528e4155a00cfd5bb2852c28883e4549b3a6c183e792e575066f8b52de530e9e955fdcd304b101b9397a8b09cef1046a98d21fed5219c29409284d0b7fc52214e6beb333c145dc0148933891ed8fb57e044320c05aebf63dde993940a0b5b202dde4a307202632e2d8f1b99b6caddf8a66c6bcae687de123274e4cf6bfeaf6688a1de2fa792f093a61c323689383649f3b0266b97f396db4ff975fc08a8461c21cda0cfeaa671ca6ad2e3ac144deb22cc7e74679b014331c9c73a859ec4882ec90ae838cea83c567d0516a0d858ea4b16b1b2dbb2e84fcd377927b02140b5d889e22fa5c6e38ac8256198a51991ca109790c8d1d127c9a75c0202ab32fdeafc104287fb3091ca51560a2b6d5b38c79f45dbd1f862082e2ab893ec66a309440dab55154d57abcc8a58207ab5283d5c4bcda8eaabd7c038202e46009ccb16ab7424771a937ba31c14eb073a04003f0c5cad563aecd21d58069ecb4520b6361bda681720c554bdeda3e72102a09c918a5ffb27829a8ddce0da5a5d18aff9ea372042462a5c457043f8766cc8e563e8a39633e1e1af4c7cf242040b7397c94bd5a9c1880751e7858027a2dd55bd4837115d90ac691261f5b3d1940c09472a9ea1851de173f89ea2dbb2c05e0c80dba174c10b0d3c00b74094aee025fc3934751ce46c4b2562776b9b77167059b6624a9779937c0850e2b29a5524c4435f80e84b1648b0dff0c4abc18d745370e19e9322e92128f3501cbc44d6651c739c1a7031f9fb16cace2fb17bd312bf287ee07d721df461cd9d2a802c6b0316a9ba0c784d18342904f8cdab37620634a24edec3ab131592f71f370629c35ec766c9671d18fb9f57dd432506dc848858bf008eec140b6b921b66af343fd60cc5c89d419306d8322bc5d77ec87c0c05c46dc5a14b2ad1668484a8aedfbcdd16a4825d13ee885b93a792dc68b0873c09b037b5e8a778c57c2fcf046c8c4d5f95dec2bfbf8e1772b0a20ff696e134cebf0bcb1e10630d7f8a8dbb07cea8624320ef1d036e054a7195343c85032d726e6ee7a31d157a0f17cc7af7b2668785be3b219d0e62ae4622c79f902df5be3482a22d0823c9ba61fb33b8bf7051d7d9ee158c4cd6c2e555d1f3b56e8a8b83dcfee9a59d8a88eb67660a3ce6ba861c7e0793ed39817cf63636d19abff376f86784f029f3232f75fa337f358aff2c702a7a1cbb4fa089fe5d80ce83c249960cf0ab06f42d2a3fd3c9d393ddc309de7efd7b281467c6a8629a593b3c4eb2f5a366b812158d49a6b4029c3db65046f94fe013156b2f6b02c9c3a801c00763cd4888590916c8be5a77ca317e09a7a3350bf82d249a72ae8901b12005c07afbc07ae23c5cac7066e34cd1e46f6fb891731533f74bc2ee50b943527491c58190c9ba8dd727da40fb0c1f1de201699cdf2c8604cc9900a6436d401b56270a0d404548004ee624e3f2fac0670d82741ce82db02db2c9c53b6adf09342802f7677595138724ea2cbc87dc59faf1744f8c83ab95f40947cd825f1fe008b215c0e5a61a031f5068b9db3db34fb01e75946a779e431d2ad7240bdc9b02d0e5f13e38c5d0932f08fa04585997995e99c9a9598061a13531deb085df9d6d36df38eb951c3d00d3ae3a53afe4bdea3140c60261816f00b9c00680a5de5a4a11ba48ccd8901c3dd7fb874c7ad02b4a99043eb4590eec60da967ac602256df7715932dbc4e14101871d8044e5c901af36ef53e13a3d7141e28d9ae558c726e1f18ba72ff88fac2f3b7862341640e48b2aadfe1e589836645b2c863d4aa4b6663618bdc5943180bd40cbe6d92aad9748655d5b31d25c8b0bae7624bffa20d62522118388304bc3d0b59e1fb7b5a9d92ba68376068caa1fff3b930665205d8d006569964b34c624d3965545f52c49413407a20e9578b44fe32436d08001bb432d42f81e774b3d2c2a970f70fef000d11f28fbb2d1301e0397fef5b4068e031b36fad0adcceb20d1031d6ed60da236e70e73c5af0da87691dcfc186729b4549b12be091473d46da2409657e34420fd25b95395a142f2125901774cc7a7fb547ea363b8e7a52c39a1b3a63bf476334aeb7d4a83c569c09ea4d1f6c092516765bfca17a2561b453646258a0942185cf2accc85911f663d51aca12b0f117bd04f20d27f6832f01b1af1c49caff604424e7679696c01a989bd50caafa957a5b234acfccb4e3981f7b1bbe5ff7af492b73c6d7010163ba555a091106f2093ee916e1e5bf739d4a85b4a98a6d8a82e51934230d87185f70e8306a6f6adcd9e84a6e8ffb089c0b14f55f2b65ab39e8b06c0d345784f0ee3aa9b8fb4c92fd8808f289092d4b0dab0b2a0ba9cbd2d2e837fba6ac487aee396ad526aa267c5fb03feb56840f21d081fe1f777cd878292cb8fb52e89c161888d21d1abd19b1b29552ca8f7308703b0aa8e82ab05edda0699f681e6c61a0eb2c512ce809a8ab391cc63e2fdaf909089d4b6ad6d11b0dac95048e09c4f90c572090ba9a0ea511e2f52640ca68e863035349d087037b824737efde465e74e7040c7e09d2d80eb583e2fe4fbfaa1d03c1e49f6b292773d157f08eb2f41fe7ae8ebc224019e73e04efdd079a68d2dade6d4deebd654a2905760cdb0cb00c440d931f031d692b093afaa848d0d1070c841d48384dfd5e55ea54a9a3ca71859ced9139e8163099cc1fe6a1ec89f26898dca2fafb90e12b083fff56117a96c331b9a34a29b7ca771166408944a186c9d60c74fc6f9f15290f07b5b887f46e63f2e5ce76ebc6e43b8d13da1ef91c0e14aa63a2bf7f39680679614d41f9594b0cc061567b0e8953c51e5507a8fddd72ae0cd4c51790edfd37b17f33aa72e8b7560c94a340d58ddbed3d6cc167db0a71d04ddd9e85b43d91cffa5d491469dbe6b3b450ff7e7f9fa55e2c61e376e3849a0545a626a9ba8d6424249ffd34159fb57e927e94bc3212d2c8bdcd0bb5e4a87e8eea19ec89cf1c755243699fe5b2034349712631eaf8795c9ef0a08e8d54fdf7a98efdc4c67feca5a6d2edb35c9e78a9bca5ba963a7e524a9942c79c695c2826224ad0ad38dffaf1a75d2e46e3523e7ffefd35bf3dedc816ea2de49a300a292a6ac11aaf15beb6d7f146349cf0b589afedbb4f7935585c4f6fde2504e75bbf8512c0f9d67b2d21e8c8afed5fbf34679a6fe24b0239aff327e4f897e882eb73bc8ee8821521aecff12edc7cce2fcd4cc3fcf90c47358ca382cc97046e3ee787b83ec70b75a8c44a4a14d2fad62bb9799ce7a522f337cf15ba3c068019e8d2ac6cff4abdeb8d68af949844c8cdbb26b034d8e8caf123cccafca5e57037e1d25c5b8e90933ce69f132e5874f32247452145217194c7fc536898ab40e4060ded1f174a8aaf20f2b7dfb63a87132ead35aeb0fdb842f7e30af3533faea0fa7105efc715be1f57007f5c81f52bacde6b1c9c70690c02b111c79a56b8b41517ca66dae70c47711096a7e2482b2b5cf5702995d76d3f1de0d98dc84c1ef377b9e80fcf6e442606d330269fb1998ef9339aea4c47dda4baf7138ee201dd440e83bf8c1c55fd5b32d091a1be40d59a94116d9b33582c9d57f517398867f36d83fd0d94fdddddbd4b3f578f5d9dc35972eb1cb559dfde0a0dba7ad54acc02f9d47658efd34a5c5508732a1e21fdd056cf64d28e8e983ccd7b2632daf7e0b3c4a318380dcd8a7c2693b6fafeef54f3e8d9ce3a7d546e0c27374863b664b4000c32483891828d289aff060ef90498a67aa15e9ac3b6a77f15c636d60f86bb091843a81dc23843c09880daefa9c4f7d80e281aca10e82898873b0debe51efda5339acd71a14f55b29cb0a0587036507f5690333f699f171059c3a47ccd8f88d2d682cff82711f79c6802ae2f201c27beba5fa3ba557e09edf3a22690b3a5c9a7ae1dd7f6e202d100b033076c4cbecb7573e3d5d11385b62ff4b7e989f3c262cee13cb2f6c39e835ab55bd6b07e17bf610de43dd6dff4264dcbfa7ffa1fd6c40613effbaeeba3ebdb4639c8ab2b300bb45a64edaf7d46121871ef72ee37f163a14175d49530ea62f22b9ad0a0f2f73908ac2c064ca22c27a5c1fc3691ded4d79a80ab7cbdece761eede92fd38abc9b958e2b87d4a22efad56e320e905069e898063f22591c7e492d161c91cd91d96b25055b825d35c5b2f4aff73128dadc9338e63fce3de80569afccd0421ff16b7d66a484935241a6ab3366bb3366bb336b9e631f9251411d5963838be25755fb564c992d592055a153c267f67ab45f08c9b305fe9d907dc441d553a3feed491975e3f3297baf3236351e5330efc52a582cf3e108976c46d7148c7a44e8b71bd7c143848c7cbd7c0029120e773fce260fb15f7ac1f3707ddd31f55f36b7edc31526ff3e3a7fa9b1f970cef5b6048f03dce8f6bc6ac527e0478b65b0207e9102551fbb8c46dd8aa8eebc5870090445575ab18d354a32c109222b637628190b0a4c8e7231608490d12a9b779f93c658190dc2c10925612dfe3bc7c5e5a20242430aa39446e7bf873c4dd1e7ff938616a7bfc5be1dc1eff9bb0db1e7f9b900bb7edf1a7a10c3dec90f9bb909fdb265361265ed279f9b466ce39a70e27f1939c561de1b1d0a03b75bfb342bf369729ae58e145063bc8c284d6ffe3b39e3798e890032a5eb0822468fd0febee667ec2e377efdf5fb1c8fe541f8254c4415efd59e3920341dde5e30cd7639b38caaa7721acf273e17a8cc5f1bb16393b3b3b73efeeeeeeeeeece8945d2dd57be419b8e784c2ef9bc826ccfcf1cb4553e7b6189593deb7ffec8601ef4be0b891cf1d94ae45ac7e44b97df02821e7110139e193118a6b2622c202f7de2382b3755eaa5a6c4d1f59442c3e473219186c90781a0a32c95a294a36c4caa9cca6ff3b8140b0dca92fdf88cf5e050d1ea1704a2c20bf516be808cdc6f2f020e1a99034958d54ee4a5ed91cfdd407b035f12f0ef3fc1bfc55777423f4b7c75463466f298ac7997c7e45b11c27afa5454624508fd1a5109654996e8028bc863f2595df7f33b1105f115a4fbf9532c32bffbad1284c01487882f58e5a10526df411346ee219f1345c03de43708814d34c23de46f2ff3d9eae5ff2c105351c0ce38095e92f1d228e3a551c64ba38c9746192f8db295c84b1e93bf91415f1a2921e1822e5890e972258926cf6841041a54b4bc4089286a481b17193331165e622ab449d5aa383ad6d3abbeae53795dd7755dd785aaff42242fd44e15a65868509bbacfe54755fb7daccef4834ea8cc67d3a70cdc1a7c18ed8282247c47e033791a285ae16ad78563ab769f0ac7564d7dbf1cf4fd76e298f268edba50be2ae43ed53583ddefce9d3e6bb58b740b43bf0af513f5cbfa7f584f5e7359a2aa7c4f474a9904fb79990b465f4abae24285b4cf2b08f7fc2c16e9e786f86cbb88835a553e4b2e543b03b1aad35a4050690227fe24d191abfc927b3004b66f2130f92d1635cc73572dea972dbbdf670b34647be4cb4fedcc021b93fff3134208b15818ead031d654f97c035a82080dbb49134589f86cd3648152234d174a4f9cd02411654445392d45c1033568f28be40f89f2e6ce78cb33b296aa7c6fe6bf1eaeafeafe0a0ddaefbfe242e5bb7cb6bff2b2403e55fef499bf9c55ca16450fa7c7a45c9941b76eb396a0bce579f11bd1b67ff1bbcc63ddd3ed3921dc77a292ddc46d135dd85c1ee38d6645e421be828845600dabfbd4cd6b4455ff2221b5a315173af2537da9de88f6c4415c70d0c7415e07d53ee0fb7318aab440aba5faf31995587454f3ad37a2ddfcf83f76adfae384a9100c8f34ccbf15da840c15de84aee99a5374e1e63b28bca052a32d8da978cc0af84bb3f202027eea4191b3806211c6d2300781a05e38e813c729377f0293698115359a0b2fdcfc8df88215ef6fde9fade0204f7c01115f41be22de7f22124f5341f1f5bd5105b5e0a0ad5df79d38769f7aa3eab4230de3d23e2c34ccb1e0208ff319118fad8a9352c03dfcb9f0ebc93df8c1b0b907ff4dd8ea04f08342d0916b45c0ffdedffbc26e7e11702cc2fdc7fd73e11c524141b9d630e7bea7a82f7080699f71cdd430fcbd066ea5f92fc8491c0cebc60e6aa0019a29dca04118012073c41b5bbc00072fac684559a9e46fdd58dc8243298ee3388ef3be07c19a1245f0554e2cf2fdf494b4aaacf3bdefbdf0fb54f8f29e7bf0490a38a8135f403c4d9a9a7a4f93060c49d042ade6852400dffb2d010844a9e7bc90682bb8b5ee55237b60588384d3d41558b91f3faf723faa56a8dc8f2becf68cacca3db8decdf3ec46941df3defb2f1cbfeab13ec5fdc74f389195dec12196c849613869e6060eb43cd10229675c5931ae90c282268e8468412d051cb42b71543d3dd23eaabff99af7f76ac29bb0267c716f44bb095f9c587414f3371253fd5f51d0a5d9bc1521375ff335a2122b426ade46545273233ed53c009cd0a5ddfcd26cfe26e47e69563c25b49715ea35f54b8bc1d3a4a15929c24100898b2f20a99fe17accf3b6c1a2f5d84f1495e8a361fbad21e8b8617828b40f070249bd278ecc3df81d7f699813710f8a740bca60447e6a987f8b091d55ef7df72327b58fcfe77e708f9408c43df6a7c800eeb1b286eda3c03d1bd59156ce88c6715cab8625f013943f8bf1e7277f0643a3568d43c3ac06081a4b9c6c29597277774b310d8edb3629398edb36c9719b945cb76ddc264e9974d2a714884da544a26d93736edb26e7b6b99cbb3ddb6f929b17b6b53bc77d5dd7d3dddf4dca6ddbb6adc1205e39147854e12e6caa54e2a8a472539435cc8b1ae6ee79db75599f1b63963b3b3c3c3c78d47d49449568d7c932ba9999db6bc024b4588851e18892f65906c350c4708d9bb0122f0d21d23e23338102986ece904e8ff9bf4f717935d0719f8a44102293c1783075152cb268e6eeee6696eb2b16a7742fd4bc846763fc3cdae717c672e3ba2efc16c6cf857361fc9b4ca1b6ab45ab4c714ac6212527a5e4388ee3b6d06b091de3a42f8cbf4381ac9c097ce352b07140ba96847b1666f5ede1b87617e47aaf787bf86b77f5b14938e4b66dddd649b92d8c3f554f50fb3713baad9b2d741b9702ee3df7e6952ba982da73fa2c87c44eeb931b9bae223628a89e411354bffd0606d9004fe568ca95fa4013ba5741732215a7247324a3c8eeb99d51ae553d7bebf9db4eeeb76ed1231a03ad224494c3d79485170e431b3a70e0dd2286206eb6c4b0840f3351be9019228a1d6c38810c9c44d9c1931334e0418c34d80bcf4fc36a9b9161b730c3844ccd51774b992feae87a4a75c1f2ddfd6dbf77e6aadbc6beb5c4e5a873dc37e56e59bcd60235d7a980be1f3fa834003d751f677d650282789fd8c2f1c4856d2d239ff4e91f0b7261db6ecc4a8abc97f9edfba8942e7dbae39ce3c66d7bdab09e52befc167bdb24d7bdc775dd772747aebf9dc12a93e447759185adfed02bbbb2bd1c68fba7a40c9b3d2c6202af5350c0bdaa2e2844d66a42b856a37142b689c689d363453d06f5c155ad44bd46e8bab33d2ebe80c8973fd76d94463e3240365e405c7c01f9aa8b467ed469e4476b885eb142a21af9521ed3a92ac681fceffbe8d6da5c4cb25516648d814a29a7775178dbb6cda5f8f2dfa923d7179071ab12a74ad148ab6699737ea3cea42e1661b1bd5bdce2e73abf77ae6e2ec5213fc29bbb527e4f397777859ac968ae0574943500b5ff039c2a1facf2379f1f29be8ab6f7a902a8fd83e4ff28b7e4774bc9bf6dcf7d5f6bab122cc168dc2a8bb38d6ef61ff9e7964a899f2847d9b1d4e17a39a3f2bb2e3842f3bb14deaecfca85f1fcb66d3b7293524ad726f6d3edb99f5bc33896d2b91c7c939b38bf75edfbf6e3fedc906e911569c3bcb5a30ab904858dad71b6c217d76a5d3b0dfe1af61e7eedb3f29b4bd051d6fe915f7efcfc73abc9e7e4d619d3bae7875b1b2cc1e8d3a09b946f543f0dcabb74016b44c1e928a384fcfa0ae682e2d4dd5286873acab494a1c10ceaf5e08d28f7425775b7b021465b61e389c3d09bba5bd890420836989a60238a182754b0b1c459406ba2e0a05f9806827a349081723310838b47415b75b7acc1a4c41a5164a0b4ee96359c54416dd2f417947bc3afa0730d7782aacc9030502f8c315132c821ca8a1968692ca2b04431eda451487574d960d24927654daf63d5cd6cf91037471e194ffdf1d1b0266e784941fa400a0e3a51a8ecc8a6193de0a043f623f3f13304989719473ab8a434e9c8661971e490fdc87cfcd45cc75ca3861c239a5c367882130496209a72d032acd8a18504528e6c969105871bd98fccc70f9426285e7068194cdc6053049856195076a88912755386131be80f3665d080c45a6aaa41b33a43d9a80134a2c69a32327440c337e9fc28119388a88e6d5d513166f0847802bfb0415584d297450da923b07854cc3097a2544fe4d0099152824342cc8c42c3360495ee89546ae2c898e106ffa1699bb2389af4a4f3a34724c9590689796abfeca77f94551fe2cf93cc67334c1937b8b6a6660542c9635ba7b85cd33faba47154adeb5421cfd36f4eeadaea6e5103cc6c2a801adfd4f9ce6445bca5bc8f5fd5039d1f0f1aa80d1b3c6ed0af8c2ef4ab4147d19a18b80ed483814ca22c26fa060a167185ca21a40f9453ea218718be30f1a71ef017747b83d1a0738d1a50af0c6fa2291b740e5f685777cb0cb2a8a3cc9fd054dd2d33e0b293a6c693a7c29dd015eea43855d6dda206521d5d9c166f64ae7aacfa78aae75fa5d5e3ba8fc37daadefc387c8550574bf552aa8f439bea791f87b37adfc7a18fea817435591ffd386c55afe6e3d0553d9b8f4359f56e3e0ef74bf55adbe4c2f9387c0111479dcaa29156dd8619552fe7e370b9540ffcbc8edba411b3f3f05a7164a1ee7bc86a83f28646bebacfaed33adc5d32c7b63912a76b4dff91f2865543d0fd699236aa1a8f7ece027905067533f70892d2473a6d184ce6ae9f5f0d75cfa6466573e3ee2db93b3b1cffb81cb9e5f8ba2a945fba7677ddddfd47cae93a3a5cf4933e33a8997b08c96ddba9f2a5437da4e49753964b4a296155eece4b47872b470e4e6b67b5dc637f6686b736dc41cd3d6a6a5396fce46a93524ae9aa929b5ff7556e9b379fb747ba542db3a852a5be946a4eeffbdd6e05ddc755e6b9057573738f9d712f45cae242c99a523afd467767d930177b3d9b6f4129f97d571cf797d748abeed78043fba3cdd751a1eeeebe37abd1a8ba66b8a92edd9fbda66e3345d9e3b046ee2e0557ac1f65df2f65852bf00b79635b8fa0a6fa7bde07cad4569d675108078840f5674ea88b523395da5490e214c78c84d3549cedf1670ea7486aaabc54eaf58194cc49d5f8f39429cff3a60adce101bfd00bc184eacfa9e754e1b63db60e05d579615b77b539c8b9b95a436bb6c74d08aa3f7bbcb16dfbadf16d61fe2c398e377fe6c8a0db3603337b9ef781e0e7c98e70a5fa55839752791fb8624937aade073b6e767c00c27fd2874cd6e3831d30880bde5fb3f30a4511002327cdef2722c441fc0000cfecf2b01f2f9d1d1008ad45780200f280c1740220800f0a8a08c7faeb00cfb8b6e3b5d6729277c962ec824aedd7a162b8a6430003f8963889756066b14b82328f0ef089881900ecdb055a7addd47dcf892a95c259012cf68d34c963bde3e224a51801be25a2362771d2eeb033221eebef206affd8c9a2f68f3c5df058c0c6fa8718a18ef5b7145de00f25a84780aed3e10283b8e05d00ae8aae1c609011d4501e3d5fdb708ffe05e913ca9f0ac31c39609011d4d01e037c9379c8c13140d78ddb73bf38601030880ab6225bd7434aa11f71d0edc7268f641f183f7efcf8b10dd8d99c2291f9e37e51778bad4235678ad2242248d01046f95c0e08647b7f1c7068d3f186b73c1eb7cbeda6f60bcdd9d4fd7ea1bb9a144da9823c35b9dfdec31e92fbe5aa4cc1949ce49855deeaf7fb11f6a3ac7e9e7cea7d605de60ffc7681beeed616b95c944af945a9540a5c7d40fefe1a81abb3f32e4c4a29572c55ddffa84eddb749fd7eaaaa4ca062d12fa7eeafbaca9ec7791eadf9543c9bbe33ef9727b64ca4f29cdff3a5e8de83fb5dae7229a8f25d89ace9aaf30b6dc355feb947e8cdd75c99b7a647680be79bedc3fc2e7fd9c3f12afdd737a7abd780cadfad5e0c34c7b70bd473ee2c9512651deb1100aa1f5fde8f37de9c2a2ae31e5328ff28f35a37363594b5023f4f959a1db7496fbe59edf64871a3badea124e584aab37aac4da38ccab37215d59f5ff60344e53afe188242981553f98f58b1aae39a414a6a1fee49f72343e1672a672a57a9fcec85b1e8d93631ff8e0ca632e00d1d8e00838d2774c084b6699a20c30b0e71b4204a17da489bd6cb9e199989b190015353a99fe0506a76649218ea361e6990f1e92a6502d26041f5ef095553ccc5c1cfed7db49d37d143d61974fc6af7bb6cf18f5f6591323824bffe8f328be35637716e976159b94aae9c24bf16145e502c63706039a16105972a7f050ec9d69532557e51e5831d48ca411843689142250b4d56651362aca0011294195c41930f5bf9725251bd505146199c1174dcd9a97cc694da2ffbbd9696336410ab7c1538245b5d7420e6832a3f6544438d0a94285c8006aae9051b08b10217d8c0822837a07559036acea5420745d4fe4e8b305b44d58218838725489adce0890b0c78f0f2022e5538ae0162c6a8fd1b38d434a0e30e8bd952c32a5f8243727e5f0a4f825862891b78e04108da48ab110baab4c04a1925386a5e68923de6446607df8e87031d772a4b1d34ad724a1caa440356299fc8026d953cb7fa10c08c29aafc2819def6b28649c9d58de5c5d54faa7c8ff97dc67a259fd53c2fa9e031ee9142c3e4f6c86ff5407f54f94438b0b39a0a6c4cfe1912b67aa5c0ce64fe034695b5c867236c4c5a51c7a5a2caa3655f39090b946441205aa024dceff60059a0245df880054a327f740559a024290094b04049543c1058a0245e0022b040493e0198b04049c01fc0080b9464f53bb667c9f6c010720cdb23bf0bf9687be4cf9065d81ef9a990996c8f7c55c8336c8f7cefa3a1ca07b986092ced4886f5187d193869156e0db7ba8b5cdb1e595daa40a461ad1ba8ff8ff6e17771877b6ccfe2ba85af205cc4d530b985ece7a7612d6b98fc6998946de20fd77cb64300f2554fd0916be30e99cf88b4eca77df68891b8d630988b0707ed700fb9fd64b9bcb092c7246b67bbbc84257292c76a5c3bd23049847b4856ad41252979fd19e1add84bb1583975dfeb180928b5c6c6fc6b0eda7e9f0d0eda9e1f4dcfc0f71e0cf9491208046df940474e6a2941fbbbe7259f79e24bbec74e76c6511b4b5a20165f527c49e07bf08578bffa4f546245c8f79ea8c4ca38c5f3bcf7c41758ef02fdef955811429f8a4abe073f897730cbec8c8f3ae61c47f55f81e13ad7848237d0719bdc8afcd583ef0f0027ab7ffabdd752a2231f75ff0298240e6a1d38e809076de22b0877eecf4f2a2de8c8475ca5af7096554d09357703fdde7b465aa0d4fb330debc362188d85f9abc4232fec9ac79cd1584653c5b40fbfb130ffae53e4a8edf1b97d415949e4a4fe4e3cd23013c41740086ca212eee1ef33effd891688cf00d919bfb131ff9f9f104288c5c250878e5a2381a6792247914179c99fa924297952940c994ac39c93b887bf5077cdbf91a2ceccfebee0f197432b2e548883ba2a5f84f6592422c9fe2ea73e9d43a161c4d4880ce5cf3a43c77d62e2bc1a8ea9a666c9520dc77405cb992cdd5f0dc75453b33658aae198ae60d901962c0ef640b9890449680749f0afa911b73585a6be4585822370cf4d4012ba3a5109b5f6c9f9f6bc57e5e48417e08caa8b23d723fda47d46f6ae2d43d3183e7364d34a3d6b5aff26fd89bfec1637b8d47e0ee3080b0d0ef593165a68586f0efad3f005843e7da3ea6dfd395844161c4f601a96d4ec31949751ddc491997db56dee79b83d05826eef6d2157155cb092e37544155e27e8fceb5fa212239a8ed8aef7d0abe7cbed39ef35c7257259d09dffe073885fceb3946f3dce77dd8672c4f9031d394968c88f505f00042ee2c042d311855ca889c2121a06a561cd4c1deb9f37e238a94d8d18a661fda941b9876266190414435068581735ac9b0137b0c10b271e6121dcfa1135ac9faf14f98ca1e6a420d443c18a8eb4d03ebb02a11ad68c8549e77582508327fc7c8342763cd1768832678db382e2b75e92c83aeed32853614dc8eb754425ecc6529a26da4b8479acf399225fe942666a986f7517687db8972ebe82d4ad8e2e54210cc5621a3686091dc24c4c740d86e2a87e3ed3cf50afdf7182d02f78c26b87a8e415054d479409592bde88d244d379a1f674c2a57d102a510275054c8da6f33ba19214f4400adaeb3ddea03686ea193301c562b69bf4d393da676af751edee4d7a51bf90fe216d78a9fdf441b8341d7777064fd8966ca1bd7e41214ec415546a349dd7f97ed84eb8b457a813ba3cd6aeda4cae7e286f9504edf7983b8e739ff3bd39e79ca3919690fb9cb1da2188a1944f05158734ac5ff2659562d10b6958ff53b8b19efd0aa8fdbf3d5be8d7fe22ef1fe2933934bce5196b9e6abfd31215cf13a289d5445960175168d8d7b0f9b27aaa075fe14bc88b6b68cc3cd15e6f44d3095f4274fe83ff4054c213039ace1bd13c1df0fbbb9f3212126b0bf5dfda3838dfdfd7f9cfefc2c93de4b770dec1a1d99aad972123b5707e71de93dfc4f172909093d43e499d8a835a9f84d4848346ee27f7c0799cf7182461be6c184e87b371d2e41efead50c53dfc1b1cc16b97e373c21cae90cf9841f2f6d9da683adf151174acd9a2369af671340d83a1e982fa8f6ce60ca329e24fab5546d3b0de52ab2e321baa26ca66d8e8262ca6d647edc3611ad62f32141beeb5fe7e0179aa2e32187e5289a1fdccd43e235351fb7b34d2aa35ffd43eabefe72fed43bf594b36dffd4cc50255c15e16a8fb7e8ec10271dfcf562cd0150bd4fa7ec6628170be9fb358a09cef672d1628c7f7f3160be4fad6218e4655c77b28c3247226d97eb7a70b9374cf7949e6eff6b4c224ad4f82f3bb3d3961929cf7cf1126c9f1bb3dae3089eb777b845c47c87a0f572fb7e6a838e1d656275937e1cb5fbebc26945d1f3552d76640bb1b1e50d0296b25c546aa31a1e0a75ec859e09a42b24d2be0c10bed75044d272755a505858e5d6b257ff1450222eefd895c1c3b514851fb48f14502a24982164a0042953ea534ac5b4a7b9b19b413b965034dfd2b54c2059106982a684a5ed8d06cbf5b9ca0e93c6703dd4422dca37f5c3144b88709fdd4b0960019f4fb5ba9863484b797e28bb60c8d0c6998931168dca855afbf57a884c534e9418df67a9d5089a8034de73dd7ceb70e10bebfb1ecf891b684a0cee1f74b91e08effe08780f03b61f8921ffed23efce0ff4fd8f950740184dff9175db0220484df791776fc07bf346f85060dff7f45bbd654fa7ba93bfcb0a9f4d28e07e1bbe6b3afb9beabf4267696be521b8410e6b11d61cb07e18d682f292611b2e3411095ec1027b0b41f8ff51bd146d82f6d67876845fed23ed8e41b554f869c85b134ac77ec107ba9977a494ac3fa9b4a2f352c8794f6692a1b32169f2dad77024deba3867523895deb25ffb16b45471f3496dabf233653ed7f05114dc0b5a9340c2cea2596a713fe6082b6e2425fa192461a82861c682fc8fc7b898352b5bf8be020314438c8c507708f7e22eed12c27aa0207f9f78f3ce3a5fe657641ed2f427a622f37c801189a4ef85c681e8324a4a92e768d7bb40a0deb259f350c1ceb6f23ad54fb4776810eb46b58a266b62f5d6ba6c6d24b4da5661ab91a0064bce5f196b79f945db76ddbb66d1cb775eeb4a4561550774b184bd55b16e83ad5a2602fa6368fdaef711f83432454e164448df68d41c11d68ea17bc40eac11ca82a5c9aabbed08e13536d430ccec841ad1d832370bf75e2c8bdbf916aa4e5e194f9d4675314a163fd2d6b4b8430aa3803cb1869ccd8e20724aa80c187333ec06186d6ff30d98349b90daaaaeb54b362086a53d7a98645e2e05463c29d505ad7a94684ecf2e3549d71c3868e062f343cd16848b9cedca04e25da9cdf6a9ffef9ae39e79cb486311d5b331ddb1ad0746ceb51c7b6ff0c163ad06c0043c5d31917243d9db142036d06a4335398d098289d8162c3151a52968e6d1d27edd9c412e3515f245df1c50c3b75b780d9d2248df0c6ada66ae5d1b0fd58ed19f9c7fe5710aefe6215404ab6eca7bb613cf68f9e92cd523e4b71024e93796c5f41b8f2346c3fac01a81c72751b9c61ee3ca4bbac7fba4afec4a0fcfdc023d7bb03e3e5f0ad94eeee2ee6ddef87751fbae95b1cdc6cc139ef96ddec3ac35ed8f65c0ab8ea9d772263f196677c293b556aaac2a2e9b137a6949b6f4a64cb4d6e5fe5980bbbbae49c1377fbaea519ef553254859d7adfbad981452d38dc3f95fad4a7c0202a1867955deb93dbabbc3991a6befe3630880a4629ce4fa9b95d365ba671c124953a17d6bf8da6cbe4e121ebd93ed56a351968fd3f4fd49e75fc3104856ea79a0eb5c18ec1ec6e21524c81e68989328ac8d24b4a7411868997a52e683c7ab6c3b555bb9dda11a08e3cb5ebc114b57b4a9343ed9e76ef4aa276ff69c4d4ae837153d011f630df941374fc1a50c7169a2c260fa4548e0767aa6b6eb28e3bf254b9857cfaa5ca3894a812cd922ae19001266bb5ea2e9b4af7c41ff12d78c618624f57ab21a6f68b405482906eeef1c69599858ef38d25150193bef7c053a942efe626491e8343e6ab4ee85ee6b1d433113e4212a139b05268ea53a927ead9d4414da5526f5030a9d4ee6eab29e0cbbae242474602bf077f69a9d7099d0bde77bfb4d4135920aea9e7c002719f7a56e24f3d8bca0231a0a6be033c9b1b4b3d3d63d9a8a95f8643b63da9efc00527b0d14011e6b1d41794db3ef55fe885d3635c4a2c426bdb139d50c3ba677048045e20ef87f8e7ea399188c7846ccf892a78ac7b23da4837d50ffbf90e194bc3ba8e3d916b4d2b5f09394bc3baf756212ba5f144eda77f1ad6fdd6ee3f38e81033987286b685320828685f19da0975acfbd95d5702cc052bfd9c087b9fbd4ee09418d138f169dd532168eac3aeb65cf17b6595c865418d6846b4fe71eb9eab477cb67df744b84e8cacdf37a87a2f7c7d6212138634acfbd493e0efbdac5b5d3088bf27ca7677bda6eee0d07bdf61917e20a97f01e9adf61b4910488b9fdc1e7e098e206b7b15720ee7ab42f9334524c202f1d1f674dffdd0ce58868d75dfedece0e08060f79f1ad41fa447d06e763727a52ed77723ac7aedfe69ddff749d0a0debbe45220deb7ed6aeebb8c99be20d41bb7b08ca43493a2111884a60212d1003aafb0cd630973f29118884a60c7dfc68d8eb84efc1074517acccff44ea3177f9ec7502f8df7fa20b9fbf148148a86110e87f0591af20b3a67ed6942882b1859afa6d621048aaaa5e2516790551c957893c29115642c35c84a24e803f17266181d62aaaffd0f670a19fad5f8a2f7f7c4e4ab709e64f692ef4c3c73641a59aeb0154ef0b35ac7dfc7dc6bd5c2e7cedcb3c7cad4b884e171703da3f42e8fbaf6d12b5ab67bc43d2ce8e3cea8c2b553e0f59cfb897fff363c9a6cb1960aafca29e354dfed6bb5dd080aaf23fd9658c52955880781a34d5bb8c69a22e540fdef22c7551eebe25658f4695c557f746b5133708dacfa1a71295e8bec7dcdbdd9911f5a5bb15320485334ff6cbeeeeaab65a81cfb59eed19493e5b19a9ba8caf74d3963658e9a98e2c85a930d30adc2d6d24557f1f3b18bf3acae4f68f28db0d85a0d0b0edf35439de737e4ae1fa8805071d69eddf6f9042a1b28ef9cf49a9ac61db1894913e3568f77de1918619512185866d2d78435010856c2c281963865573d37aa7922235590da1ac9a9b16f519276dada112055148c37c8c1cc272b1ce50212834cc9df5b4e6fd19c9e66d4269a47de4832d9b158bd6c87cc6484ab4b695156e95a1d755b8f5c7a50b14e9b861c097df5c837ecd210c188430e387278e58838a1a68904617259aa0f9736d7ef72f21396fa53fe78d6839c25711cee3884a9886f34634cf433e62246e8233435e0a594ac8541a56a56139e1d270c2a579dd44ae31a13fb21add1f65f5c9a671c078cb438da023dd9e39d816befc9fd6e1cbc51164fda91c135a42ab46b91850fefdf971b3163b99f3cedd3b6e63fb5232171ea7527dd77d9293de8faa4f3dacfa065141553d178eb022aa9ffc5e7f012dd45b47e1adcf3649a371216fcc7f0bdd6b6a3fad71f09683e4d6750b797bb8b7d756e2adcfb82e506a759ffaac93a18eeaaa3980ccba853915a77621b7315f8d4940205386adea719f0c6faa4df5e627c39aeaa53e19d2eaa93e19b2aaf7adaaf77d3204ab077e32fcaab7fa64e8558ff5c95055bd1a19a6aa57f3c97056cfe69361c755aff5c970ab1ece274359bd9c4f865ebd1c9f0cbb7aaeefe5ca9183a3a3b392a23f376f02369dd93e2f7796b5daefb17cfeadb640dcf3370b2a8fbea43215344b6694c62485a9dc486154fefed2b3ae79acb6404f6233d52dea98624165a28e73890c6a6d7bfab7b0a332460969840faa14534cdbd33fad701fd4aef9acfbd2b1fe3090c2248da9fd9d99dadfa1a152fba9e2d44dec9e80a0fce356abfdee2eb02ff38e665a2010bc5b55e366e866759df46ef14112ba1a71cc50585499407b1c65fde8a2212b5c51a3bae09cef1a69ea476ffe9e7bd5077b25bcc44a9cc44867d0448959a805b34ffbe5c7f5f23f951b65ccc3c589a34bae4ff7330c9128a9d353306e48b63076532b4579e1a533fb34c22af7485aa8dd8f2f20e96a27676f1cf72bfbe797dd365f5f77b93e53ebee9edab9bbff4971dcdf9e5b7172bbfd8abbe26c9814ab4b36bcd9f6e30e37ebe6ef6fccbf0bb95bbebfec662ebcadac77a3669ab79d055667c35875bd1c1901850903de7ec851e83a4969c2ff710f3d54de9e152fe0710f659ca0d4fd52d7a9082f15a7f5fb44465a753e38c5b1bbaeebba23b59b485ea8e08784ebf753d62283e244c155aa381581a5c6ea3a15d184849a6771fc51d943e6495d9519cbc6fa9a2833c7719c8d0dc72ce435e16804276c85b408faea7e3dc612475af7a956a3bd3ab188b1786c7b6ef2d8f62e832f5c70a9d1567f04850bbe485982075ac061c482197c3033650b246c20c6aa13755c6cd0af89723ff2d2abe659cf5586af9a974fdf93b5cffcf77ee32a75e3691fcfe6b7e7e1f1e7f913ef6d6c6c54403a4c5575aa70ecdebb71a3ca42d71bd175e01ede0b3933f15479185769d8f64980507188053eeb1b8db4b8ca2ef98cb3746cfb8d0b95ba2d3196ed0cfa5b1763c0d0c30d6cd8f0440adaf63f3ee32183143b8082c5942d86a06dffdbc3b65fedf03dc83800bfb08432dbf645448eb08082112143525001ecbe13e936dfebc2f65424a83c71ecde045c5546fdaab0bfeb5c0ddbbea5067d9990d7f1f8d13e9d2879603e364eb4010d6bf7e7feb689e39c734e576d9fda5c156e9d45fc73523ac4b7ea3d03b2a0f99c9f9a2a71160d1122e2aca0fe2a9518bad8a0e3fcedc79f9cc88208420b246b024225ac061159c0d05ef8907e6842b322df7bff18c064b03478177a3098e80203218030d302272858810ea094a8418c120f68fe0f9353a25c8952c5b91892ba68a2814bd0233e2bea27f1257f0a1d5949a6e4ace44b61eac84a4b6178db0243d729ca983ab252d456a72861aacf96f6f4f474242a2a6a464515f98ceed22799ff9c94ca7cc63f6ccc3f4a12ce2cf04fe6b3a5fdd058697bfc3d044b3411c60922b290a1069a97b0851b579ce9a10da417d0fc8fb4c0e07f330c1d67f529dc764c4c32244586d2307f12b6b2520e14e51f59a92935c6f833d6efafacf3f765ea65dd9e7b6d630bfcd58fb0fafafe7db40f4b94c97cc6d33c5c50fe51c6b30a611deb07cd107de1f4c24fcb54a5a618445dc803c6a3032122d90f6d69112292fd285126ea5b1295fd3c6cdbe18747ed975ba5ae9d5c653e33c1890aa41c9caa3022e900482081841251e4e006135affc3b636e8cbc697fdc0b61bfc833076658ee9aecce5eeee2d777787dc65ef2eefee6eb76a950f1c6ecfbe38e79cebebebeb3fdb67746f91a1fb5b0d947feafe0a09ae0ab992fba2bdebbc98c165286aa0faf3b66d3b86556e20acde75ccd28b1998b9ccf685db6370e994522ab76d738f617377339c7cb95050f06da6e4d72958c82c3e373b198e6295dbd65c900d4c10c86fdfec6cfa6c8a473ad6efc31e18eca537cacb11b00d2a3bae97b81a74ebac4a7ddeb37960712cfdb0c4524d0b75d57522428c13b4e60b22b204d1dd4d42501d759d8830a23a116183d2b2006967d7a9b84d7a7744cc49e75193ae968ac30957e5cc54a3c9b64453c7851092c6e485c30284476d4d3069eac3fc68152e55b0e8d8d671d2219e30b1e414830d3b58f1e2b19d507a87282e60e080c95057dd2d6054a10330ae489994a5eb5f06fb71c964b8c2fa56fcc1e4cad2128207d57d882aaabfe89a620831406cd1f4c40f43d86471220d323ebc81c45ca4e1a5a60921b63040f50fcbbc40079437bc7870c8295d2735a2d0e1a630401dbf20cc4c2857547f10c021a764a208778043527e33082cd581c041f5ff001c72ca9d21650634406411e66979e0648a2382c832c606279a0cc6f090a3e7ee5005008144f57fad5106a706d5fd755606689c59a99c98499affc0440174b8bee0ef1f98d48ed5ee7e972b8a0c30074ce906d53f071c72d7983170820e50dd958ca8febb46f56f8143eea249d1220733382903c68ad10a9c606a628b217cc892037e2af385b6c8a03852b8fb4044f597eeee7f030ef977f1b576785863013d2c51fb5d3ecc50fb6d7e8ba738b8c4404b0d604e0823449aa62635bc88630b3249d46c0d3824d98ada3fa9eb61cbc394da4f3f30c6cc920e41800943060d60238c1f70d06446183168be43b42043430eacf2ef348c5d2fb069edf0f0f0f1240b0d78e0a1f653d7c36443fd03c6378302d491870e4d8450db49873176803d7152fb57e050cb88b811c3115d303df9a1062322c8d0c20d186c71828c2534ff2ca2665881e090fc5a3b3cb3da3fa9eb9dc45161389cf1650d2829533805411ba99f81c31a4a4d7469c285e658542f6344755775f9eeeeee0ee431981718ae3afab0410e50d47e9ae4a4f6bb3ea94aed873941aafd322763e01046ed1f1f5158e8e8ee767f8a4314d57fcb54ff492b175f5afcb53edaea7e6e7881cfa3324590c122cc13504e5455d4104287a61fe0c08206e68a2818acb42cd88489eaa3c918372c515d4b839a2c3e3bc69dda3578f1850d569c6cb8a28994da2f61ee437e544fe38cea38d5dddd87f8ccd51e0e63eab8622a6fa5b1a77a67e4a9230f2f90a06aeb80062c353c7142aaa1f6b74c0c308a68a28a1750c0b03690a2069823c448e1c408da13f96c88c7f8d98a315e6abf08dddd62cb0c3ac25c52d0d1c553b5547fe93304517d86325c32a0e3375ba85aadc684c6756cedd880c79152ed97ed747446eda75b6abf4b862eaa139326ead792ac00ca24e499d47e1698054a406d211beb9f40d0226afff217256a77b3fb54ddab42242fd41412aea90799a02327adbe5f9c587444a5362f4551f374f52b5189959704565ff34256dc2b11b27a2a2a59892c9ab4b4d5af441e8389339000228623b51a4df66094152fa2784152ad465b9a1513a8aa771f3814047cef3fef8d7c55e5c9fac9c671f450a8dcab503916601c1225238fdabd97fa86fc39074b30aadc176ef52412afa94f814329919b305227f29118f43934941ab6fd9b13eacf13a6881b443191024c0d464c615029c3c5091430cce04200dc40bd090e71bf4b9cc44a4c5f7f4314d9eafe929248fbf48c9930110931e204c3985e30b561185365d7d59f84ae0e01274ada6cf096675c97e2735c102fe2122481d3d4c92f9f047e29fea8531ce5736f54e5d73fa45f88086a0d6f7994bc109445134d342bfedbbf8ff7bbfa774aae46bf8e32a17ea27ed98f142e57a86c81841631f8c2c80a171aac54514394141bfa5d2a7c21c5082859b890f2450267c430c1e28d359a24b5c083279a6080832c74e04506ae40428a3350bc80520354827a5b38bd8441a646eb276ae8411c2c886a028a1aa05c00832ed090410b1452c840bff60f3254a9d168bf6b76f12d33a80a14bbd47c77f7d5cfd9adbe2674fe2ac78829502431e68b9a1663d800890c176390be8c012e51224f0f839241753658b2348cdf466c100a1d3ba9af3453e74c269035e5b4e4a96e535da72549d55b25749d607852d7098623b1aed312a84a2485f69936cf6fa47dfcd9a32a7f832370b51353f898090bc6e2b3d6b34dcb0c6a23b6c214cce4708202996f23f2958631772f205c27da6cb5bf391907461c65817242038608543831d1450c197ad881c32c900c0b04a667bcf43d3f7f691fefa9742109fd1aa16b273216dbc3cfc4d4957fd94be5ef70a6d011c9919a128bacde7ff5ab1f79a9738d2cd09f73ce396d42246bf3d3463481ac541c8fd422ddcf17ead408dd8f47eaac796ab336e1362c258e42dd8d54644156d6af7ec12196a8c24a2412a61085befc5ff357a40d6b69a165acac310330513e448991848b20d014a1c30a84c8a10b854024e8f8c36b9941fdc123e853c7f8e77ca22e7e52833e2d172aa0f841882fb4182306254b9c2083a58718cee0a02ba16737cf9fd3061d8dfca82cb86844c482953a96c2918675e24606043378238b34b4e0a0046c09286208e206a71bca48a163fc63988f2a3f3bb8fd82446a5f17a4a8255a9a74e9e2148318242f58c61c79c14f478c740a4da461cc2151fe14c84c41c614358eba7ca1b11964b2787206065c8e4882c6cf4f0cc691709aeae2e6066da627a2d4b0418736c4181d31c3951e08416629cd92023401a526a50569ec808d33ced02284113e383d01e388cf3cb0822a5448518383082934b6a2ca1831c800220a89071a3f1115bac9a673c0e12dcfd84c3aaf135ee047d0f11b2becea20095d59df8d209ff51e7f3ac2f9acb0abacf79af333dcbe0be5b342af0ce533222a78acdfa7858671d4afd404a7f1a8044c37954d8e32c5664600000000e314002028100c890583d16834d0b5dd0714800c8bac4a6a4e160ab42c47510a196388210400000688c008cc148d0940018c502d1ab0c03b07469491c088082821f754075229153f1d788b9330a34836822967100374734d4bd9c233491a63a85c69466c83cd793da60ed45c53067b130ea75b4378557882d9d85c3763b08703b36f1534542c8b73daf749058123d2c5925d780987bd171e8cfd354d2f9b869be6874aef8f29237affe8bce912a3845ed3305876b85c387dfac485ab1e92f5d822ec2cac5363965645f4567112dc95a0e428345ac9cfcb64d5854aa001fce56e7b495373333942fcce161343f401a3a620b6bc867aaabdd6fdcd4e8990ee68aeac5e53adc00a971cbc10a0ebc0073b6b89c98bb7197b25dfe09013b83ad3637ebf32e6309c33632c2e4eefba7f60ed98afd194ea2f379ae52e3249c3c0fbbab3eb795f13a0c04a6d0be73953a3c14ede17a7ab9c313d59075fd6b2c4fc78c1c97e5901b3510726d079eea8679e2a8c8e9e98808a6d7038d7b9f18836b9eea126ecda3e8034fac88d6c2901ac0812d3a2c7d43a215d732e3ea9495267e0f48f3a12396368bc7be1deb761ea5d92e5c6c6463a686e31c525191b10c1ae7c52a899e3f2374c665990e8d5bf6c1d771b597df19079ea699e20bf9c793a42cb56afa1955b47850e42be5610b2d2830b10600d17ee9502f193699329967377bf8bcaa66bc9d3e3eeefb0f476055a3b4e4d2e386cb3d21789a71c1cdc30ed5dd142cc13a3c1d1681a2b75412cc34966218a415728669136e907a517aa49e2c812033f5074f7c299d4cd8d32696b369d238c55fc92d1f911672ed64d27dd3e7dcd0e8789f2ef8333d529e92b8fb8976374b2b805b38a86ccf397f4bc09b7f9945311dec6f75b8750e559699cefaf59b7e8ff4009df843ed3fa6423b0ca2837c3703db27d6ba78195824ef3f25865c67d4b0cbc6c2b6fbb42e485808bdd9e31d65aade16fa879bc97ee368eae83d53a9e98ebaad46964fc045b1be3fef3ccecebb5e503c6de66042a80790a78cc3d92b92d28f0d99a815398669f950bae54217c72688847687379e56b45bce66cd4f3eae7ba6b4fccc1067a07f5ecca0b8b52e929f7d6ff926ebe04bf48f27f8e2b6e049edb54f7068961b0cd845b36a220ef2957cf7af75f0c0c3d23c99d84c47191fdc6af79b0ae53e054afc322d71edce34a58b002615cb55bbbc9724f457b53e6e61bafdcc6fa01b16eccb262ce21115445191fc6a11a3bbf1b2c5b4b75a78be180dbf1a6bd77cc44e3b1e7f960f7d14b9fb04bf065167d4219c2d3167108a1268053e50824a5c9034afbb4451048bcef85c039c7602fb40165e37ba6c0f4580a52bbd90d95a116e5ca68c1f7fa2ddbdfe3d4e4b3983631c2cc9367638b7809d28ad7813e35208a728dda71b5b45ee7cfef9c246b1d51e2f7b3c5f405f3bdadd950fe591fb0eb8a67a4a400055c1183d0ef6cd8c4833be1a8e75ffed294d1843def7f5c876e1eae5bb4048be9000959707e73f5e36d5b464f40c518b8741596fa6e426779b70ce5dd412df022489aa1e315b09a78e5c9426c6a5133086bf3f449a8bc10760a0762ae84840d5da360da91b8c6d84fae69d55870db168a9a3a282fdafceafd134bf26e64c133805a8857e1f7a61bab1ac0fe32e59e106208547a725c1c065d0e45454b3a2721c8c4b2186a8f4f04b0d885766c40c90061690a0450abf2608d243945db57d52b9f9e527394cf7d47f3790ffcf44e57a4f6ec94b8548edee42336f7407254cb40808b398a6cef5f309b886aa193e0f25f2c1688b32ded201326889f4b604d7b2a9d394eb4a10354e24ab20b48588e16c2d015674045852299b23b9ee5def2a28e1c39d760f3d1e31204324283599ee14da28bd0adb4c5d6e0665e1123a36b522a47817415b938cd6c7a1c23c474fac3d1dbf093b096af09edda70f853a3c33fc4925e6eb8296e4fb2547339b0be1892bb04c76a9b1443351466b5eea62dde440ac42faf9506fbcf2acd170106aa8b0634d130e96c681262ac884b09c171cf4a65829d64b1232eae60139fc8a2a0808daf8979cab41587b67312a2fb27fe05d4e93a7dcf6318e0ce6f2042270902a6f9525146c554d1baec361ce0ab31746233af9d2bc4f1d9629aaf8a3b0e0b5f6dc32a19f589752e934ba3d6074cdb1dda5b9379680e9eb01ec21db24d5d7b66b2a1754c776589517ba0be0eedbb724b4f560f5c1301156043bfa9249a5430b6e416e512b632dffcdae12d8de402945def49dcdc92e83aed0bfd5ae36ace1f9ef6ceec81d4a572595736028552eb4babe3242a7906241cfa8d131831747abda9dff3a981873fde2a33be29307018cf667fbf4692c2cd99ce55b3e00da5951a5429bccc6c00d66c70fcb24858db33a253cb16b22d4c5563b568f4776dc07441cb7a305a8c9baeb084e643ca543c7eb4e93488ceedfda3ba97b2112b04215ff42aca964aa158c7d84401247a1e15b653bb710185b0d1deecf74577feb3d86c5d13e0764a02ac2b10b8ce675e8f53311c1ffbbb05bf8ddc296b37e87e01a965c2f3d097c565dc47453214dcd6d76d72cd04472950eb18136b2f5f28678c4b9418031748e3681bfc368e0d1b102aff2070f9be06321fd9969e914ecb52aa65457f54193321bb2ee0a6b8aad643c195740e96daed1da41dca104b52ecdab83664e354a5b22d897a95bbd7554080f85093582539867b3a1cf734b8d3c967fc6841f845611682d79f61500038eedcd71a7763590a207621c6baff6f7ed2b56a659ce076732476e80465cc5cea1b2e1544e2fa21adac29d8cc27519b2d614ca3ac6fbe98241cc12d88afea4606e614b1f187f31c9a41120214d5906a4dc21abad40288f77bdb3e99e1087532a873aa0adc28582b3f42c3685d0d9c5cf3eee6849fe73e449829336a27dad6dc9ab6e6a21a7d0df15d0bda8bee4df8f2a61f4bf2c2e14d4d6958027c57c3c4b52d38184f5a35de6f557303a531d2e11fcf66bde23d38fda3b7f37331ea10017f15151e7fef1c6ee56d7ae580d749605252d7bb243d3e4b2524291c3e6b553ae2937c8660985f2e6a64695c07d34af88505fa392e31f6bc6e18a36a54c0508ef0f944d3119a04a23f6209769ac4de1b14ef3f4c69941913befe8485703b50aa5d6667065da82cb92abf34f2c0d97dd8f0cac03e9042a3bbb5da0d4935c5a3b5a35da5df8f259bc3312b8cf252e615778ccfc01eb1c1e6c6337c433efdd3f3036558e09957de6fa49f9575510a2fb2d2455b684b6677cfb6297e712fa5c00296c8370ea194a37df4d48364420929da24f6219ea5aa81f23112e4ee5b9bef410a1f07b6e30d8ada54a6d81447197f5108214b9b3fdf4b262add2e2e0391cc0509cdffad0e2d7a69bad702ee3bda44ba295ae0cd5eee0303d962280f1245e92aa4106cc78a0dd6fad5bcd028a466ac13e211048c723210d43c50e05f5d831111cf60c19701584c75d39ac1126c0608d5c874edd3b5d692fc7fcc52702500f804003517772f56e6f800ad5a4539f46728dc6e2982812eaa2177f143ebe33b12eb56b2fb8e50693e408f5f0ae43f20658eee34452b72900b3ebb6c5a4486827bd85256c46ace6e684f5b572d0a249babc843ef31f46559d0d74dbf0b282e608d2e99159443646ea3dc9fc143b7b935df09176440269e0d743b8a04a7008c613121b836b1c6a7e67f1904e5d1c6c5653acd3040c299fc83daac80ffd90f3fb8397b00770e82acf819a8f4c472fcbf036f5522bc81f0e087193cd9566653e415656fdc4b4f3bd5d0cb4aebb8154670f2fee45249eee03b2a85d2ee9086be7666b7de55d07d0452cda2555706b283425c84b3225ef2114674f442955f8b5b1c5d59053c35f59611a78fe9211a302119a573493066c8460a8f0c55e7aa7d1e40fc8960ffe13e384304253638d4151c2da2c4d7e9fa8c558cf67f6b60563e018b854c2a46662408f81d5461cd12243207e6e4b02eb1c0cfe68dfdc9c74b15eb1f21be1ac9a8c57aa5b60dd17162e02f1d3188a299f39876ae62e28f2c130811ed37f24dad29bf3f39c1384bc1d21ea55f1e60c4557651aced6210d7d04f7254b60b9963101a0ad78aef0fd5070425977023e89f4c7c7c0f418833f1b95b70c15ef710b91a9ab009028f715f1aaf9210c0206b5dba14e910b8c031503b150d0ea8afd84e9bfd9690d7c375b30a2a93608ed79accaac8cc7b40ccf3c62799f668312b1f9679e07074f3520cbd556167d555d59e43d55daa5cf7867ab254c5643919b0aada6686257ec5cd036e51a11303ddf858cda4a266361b78aa1c692b562324c6e2bb9516ab5cf5ad7ec84c45f9c01f06976253d480b36746945e811e71f5524723bd3e57cda6a6f4082f6416ba638a8b0b1d119a14dc186f55a67a44d6f621fb2047849a32ca61e9c9bca4c45e328bf20b84c825cf675929d2e5bd4e91b16626ee1f539f0b252510e831328b4c33b6ebbd538dabfb04b81adcf9342d366dae109be19b0391abbdbd717d8f8739ec7de4cad59f89c615204fc7b52a89003565c739eccdd14031d7a73e7c6b6b7f676ff11e70e56c9c223ecc1bf3ba58c6af08366a1ba2cbe5b0376eb98992bffe7affcdf239f4ee75e30003e333e6875c9223fb9e384d0c0deb94a12d6fdbe3013ec1a1b17b841b0069a1ed3945d54a256d9cca7a211997ae48fa1a7afebe670cbd221a19e423eada99559b6fc5c98ba1f60ba9e2abee26acf3c27dae2626784ba785f1557e9392bd35fbbc676a63fc6ae1cb5eeb7b12ad6da6a18082b9d4229073b17a5c3699532e470681d7cb00229241d151774f584dba469df43471bddd9f798c355cc8a073d0a7f7d178a69e83cacf8eaf8f4daf89361e00f193710e7ebff0f4aa05e5fd0f2ac70e1d8172b3c8e3fec7e932dc402d64e6267a22cd71f6f0e6284e21047ff30096da279c00a32e591e7399c01f4397ccc51c42243e23218350a66925a2a99865ebe6ad84bcbc8de4383fbf03fc7fe0d7cd450d74ac90782135fd9b1e26e714ec8d3f816208a3c86ac03067ccb894808a050015b19aab37b0c69eccc188f728f97dfd0503a1865c30eabc52bbe37005ee0ce91f2e77067223a54cd350e42ef7d06ec1f87f52a3fd2009606d8dc0d1b143f6832fe372b9d00d5511be0b2c5a0dca1e082ec17cefa2eb08b506e77175ee004b108829c4d77f0dc93ccc948e39f8af30662fe89c21b05532d03702e4258613e805a18e80d7c3feb737b54c036aa00ae04cd3103e73bac0d9cfc1270705678468f012ea96ce0dcea7b2122fa5959f6994d2a9d7a08b6f98d92ff6146b517aa04f12ed6be473c3166c5bfaa8e94cf4db8afcc378124ce6e3c4f76d6eaafb34f14dc84a470aa3a6ea4d6ff29ba0727671af8776db3b3f2da0b225360896f2eb0fdb4a8b723f4effefe6af02ae6399547de4a3eba7ee325cf8bc1b9837c47d2b1f158b72031364baa550dcb5514b169470e457275ea079b8d4800754916a8d0c030edaf547953cfbedb5942c71e74660d00f41fb9736dbcb04c49cfa10ae4236f4fe9adbcb65c4ccf32f8e788f22903fe6d517786959ebcb684cd62f37eb4814007b992a4617d5fe0a5f580cf015b8f2836f67e19faf6e7f678fb60a9c004ea35cfd309d8ffa4094ae1ef5b9827149da861efc98331f7c799094b5d0efc5b2b93e06ea830c0bae47cb018eb0d78bbb88484231f1ae1639be00c63f0d310f37e845e71194cb73469b51008a822312cf277c13fc6d341a5ee66a89e5075c14925c7efc63d00630b50e0d7c7cb11b9f8071ca8136650c80131ab13a37d1bb85e27bafbc0d33c3437b0f67e56436ef32c5cb9b7bec83bec0ff63d87c9090520de5487700557e78059ebe937a2879237204454906289b242c0baf1d6d752db6768b2dd2c1879b86486fda1432042c59836f25823d444548bf8bf90e828f9a655620aaea5c633fd58f81396ce74a17b5073f205010cbad74c0a774a033c9814702bdce9711f4223bd78943c2adbe8497a4ece8d97be088350d9f8a311fd00d3d9a00e1333b914263b24243ad8745c9cac781137e82f41832533c6cb415a198d0313c342c98888670c3d2bbf6fb98125260a9588eb69830ad27f0570ecdf7b3566e3394023188df41703fbb55a536e49b5fa80d8fa70b2682581c7bc104d1370c39b81b610523c8f67ef4d40101151e7c9a70309766300600f05d8bae09fa48bce25a408464ae8b0a357f23cb8bcc300247c4cb0ba3e28fa6adc89d27a19286e0b81f09e9a9d54a2db94d89c5cfae5cb38b464cf1e22d93a63a1dacb171528500bd1c0f98653b2d312a07313743808490e46c26ef7b0ac5b9bfd12edc2081c59cb6a3b1ec6098099cc1cae2770d4a84e611594fb94efc15680939a209eb6aa278807299de2bc79002b5418a5a336ddd32ca40863d932233652dc36314680c6bc396211402f819b2bc3f3b78af2b53c962b019215c104510f04055b1be15e69f9ced6b2d302e06712c2191299bc773f8aa427656ab3cb3636b343a6d705366cc1302cc206ece87beb7634d2104cec74c3c837244ac1e07d77c073346aaff07e6ff8442d73267c8c5168299162c7747bae8cf8223623994cbbe42000e98f3cf216eeeb0a173e521ef99ff9e13f616038e90d5a7e83f1536f260909d0857ffc2ed3e1442daa715acce833588fa26caed64a8d4d1b860560ef45bc10f6fc324f167ff1abf0c2c32c925a7f0dc07fd5a5eba9613f3591bfb903b1e84051f50d7383be7cb460d7a32922dfa74aee121adb71e869aecf413ed3b758c1840bfcda88e99b48ef2d8236c92b1e000bc30c2620adfb24d7fece33b032d0aa91290a78e45c0d7808a413d0b93baf6dfd89e5b793e92ed8a40c94bdf51d1c0f110c1647fc0d10ecc24c44e71d60c16ea9b5f8c63f92a7f3581e5d3072aed007c9ce7626b9a899234482f0554bd11ca2898ca5b6ea6d2900484deadfc1590702c314ccc583983e15f0f0ce8c8f916884cdcd77a25401d035a6f31ddd284b15580e93a358fe1f31657711958e7f23d34fcc2a0eb040bd5dd99272bc7f73f415f1e5c246e80c3f95fc81356137d72c91716bd19467f8fa26118ab4f58f30c57cbcdaa6513485a3e11a2479d23bb04a040c3c375c24b53fb43b4eb05f7da6defa701955dd2299c75b527fb53b48adce61a306712962fb641671843f582b19b6d3f871d98cda86f32e3da61b4034f612e0e5ffb0f5859d7c06e8ed40c8a3a05ca5d869e0481b6c6345509e353c8e494714b409ad548cdc5e10f40051c76a0a93452a8f89211f6a87c5839a3e85f422e25652b57e9aff49e2ad7d22a3f00ddb1aaee88ac9e2d38f13e5dbf8fa2a6d3c2ae2819870e7e53c90c79e74d5953692798dedd68f222a0a44e0831cd139199d9444a330c3cd489cf32b1164f7698f24ee590e6cf863b765ad868f6d68d246f8aa5525fb78302b5b5cf9c896b9adbf8603611aa78d728b502975a80addac876b28c7cec01f9d9ff5019f730914c283c128cf2a1948b2de0ff234af5c19a6eab55c396a5d652c8d56fd73b3a0e876515ae1c6a5f86b5ac1dd732dd25eb14f663d6522a44b15232b499153699261ca3849170b668e743568d2860fcf4816a17374a2df7234563e853b277148dc068a77a189dcfc232e579dd6153b6113da43434e92f3d726bdc0667c8998e27240206485d551f337cfb8d5d8af32537805e1fd393eab15ee8e06b67f298e9ac0e3eb497af0c247599d8011a62f97a367746546c3e056d396fe1e43facef0397514781bacaa81b9fb9b22838a496b730997891ec064717015d200f46754f66d490e45c3f1095522af68c89e40e7c85b782c0252c172c5b10607442b55e3ccbd45c157e4871a50f6ed993614490f92dc77c492576f083b0238ff5e5d2435494e10f14031f0681e52ceb9bd61b7ad23cdad43704d37678c1a14254837889871f3931660827a422b05c4c97b337381ede63e893d7ba755bc344b6b492b7bc044ed828d7e4df4fabf7924fab9065f90ca70d01fef42ead039ee6039bda69c3ef5694e05b9df14a0d3fd72fc447771b45ae524633c79c0348968d88386183a66672a2e9b040d200f8ff00fa68f43c0930c289dd0ff7436bd092af9548baa5b3524d45e040da315855dc369ccbd23735244b984b0b017f884ff5a022d67a046509fa50deaafddef83281e8bbc1ac2719c4048bcc523335f41c5887e800e22a71602a805aa8a68f04078420bbf6520a1ca77cdc6637643e88971749475d05e3a568b26da3cf2b6f45651efbd399020d86e6261c70f2955a8abee7f9640f4bd9f3b1ecf4ddf1ed7b0329203c459eeefb972ae8338ce64105af4d857b65802cf5e4150b4dfa49825413c0e463ca110a2f3d2e294b056351d061bde72e988bc6f4e1907631cc1bdecea019d70876f3f516960b912a9d481c0d53fdb608a8632b6669f512e92d44d24e94bd37d6452acac90bca869c6aa74c245eed9748efd20abdff773ba8a8ffc33e32f2d7bb019386e0471dfffcc01bf2028fb6509c62afd9e18b07dc36c2ba5835a18ab8cb59543189060a368a6e90efac2c8f76130a19876bd001226051f460164839f9b1e3ed597dc91894f8f320a944994b36e3d2575d9636874c669e9b429229cf1049b603942575969681634689d9a93d9c29c013001652b9c31ce3142fcda5b46fb23273cc4473ed6f7680bec6004976a57e69af5379154be8656347d476933a0406a9c62f9cba4c19a37844a38d644d8258318eb4343f11e4a27182127c35dc328d338a38ecebbb3e51353e58d50176cbd1553dfc9deae2cfc85a006ab21645945178d2101c8d18d13e3b6aba4cafada25c73a528ab9f4dc5c2e0ce92f3d78ea59fbc329103290e5466fd89d9695078ef4a346ed50f948b100c0bd6a6d2334090a05f048b63236a41e53ef3818aa9de3ed5e486289497d9e0168a3e6a8c2635114f957a4fce641a497d421ca126e6a0945fd34a5102b19a5600b616bb9ea237b4db95c150e73bff82354a13c550acbe3fe10d5da35d2927381c43679620f885e8217180584c4464ae266b6ab398eb008a841e120085c2e293186937109c34c380083f88dfc91fe7fecc8ecebfd2c78eba88f0b4daaa31bfc110b0336d73072c6dc116d80aec9df7128fe8bdda2585d50d7990e52c4ea1c43581e781f06e96bc04ff9f70680eb1442d2034438ee61ee18a0e0469c891b2fab18d39f96bff199bcd53fa496dca3b20dda4ba9189011242c3d48c8825ddc1f4aa13c1388b15fa95735ef1ea2476ac5b6adec1eb18205196b892df77f2f04fde71e3c3a6c2caeaac27cb53d26f46b3e8a10c9c8c1c69c28f2b4ae44275dc94cf89954ad6325e841051e5bd5d13910939d83d12dc8f6312185d0a3b424580f0cbcb2c55ba1bcb69e589b0a4b4a8a5338177b12b02eb2ca17c332657c3750c9b07149ab88344fc9a46435fd06ca4205592de866a3e54a69b03a4e6a2fec6695f6eda020296180009afac6f6c0341a4f7510c35d1672111e2dbf53552a06eb461ba39b7336f762a5be840c8f180eac886c66835434756baef299fe9a301b2bc71dee1d466ddf23cb84dd217fe7a37cec96de216825cfa8642570def4d8d331d352488267bbd4e027f01ae8a8e5283a2a5ab5e0805aa9cfc6214401caa3aecfc7112debe45b4c1299170f175a4ac761298705c89112f328de76aa80e68ac42efac35c7dbd8b1b6144c7a0896c56eb09e16093c1e2b2966efc1b985605d1fccfd17ae8b6012b67f3814dc705a2dba81eab5c4f98468b236618a2e535076c2f9558209e0947a422dd7245ca80370dc25fabba3cbd04ea907de7482fe2d506b5520485e8a81f369dac08a6d194b68857d1126b0cf078d37c0735d125996fd6fbf772d765c798f684bf36ab6254f7f717a361b7af63d207bc215dfe2451a00f1706cf64d26a150873f6320e9e91a7cd31dbeaf7a294850b129993cc140b87904cce79d32e9186236d587f2a59d58f37bd92ee48db14d05b92d382a9c44a408530b6e56d157a523af9001dba99b5820db839c6dc7a742958dbbde582688431baffa7888e8cade3a10ddfb46dd53af803d7ba49c04f97bf51fda33a01d8076f6f1db2e3eea549b36f4d12a59c76fe20c7afc924072ef8286fd00830c44b84bf21523700b40e79a26dff43c1339c2a7c8bab6d892841e4a054864c573d982f64a24b2b8f6de25f5cbb81ece602ce3e175991410bebaa52247d287a5aceb003dfcafebeadaead7c2115416bc005780cdbe943c26ae809d488ad6a0fdefb45ce52a8725f486d0c49fa65d1b5f9c36639a0579f71c300148e65461d34fdb5160653501392e64a89f63776132bc82ea46ef3be257fe8f7f05d0a51c3b0e6b508df2f0dccd56962e82f3ec4c3e1e09fb881aa4a8b14fc93b5700cc86ddf725b166935436c038ee725e104f2679565b2d43b478515972830f080df135438ee383a4d85bd1ff84c41a48365766a8333b5649a9f2c4ccb81aab35b6a08d20f3af6eeae8d3f6838ccce487f652877330efd3671b67edc8c22d213fcbb45f2635822dd788b5747fe9e0ad2dafdccf0eddd4c33b02dd1ebad3769ee53ffffdc812fb96a8c4ebca892eead392745d30fa1b381514cb00e8a21672781f134324ec24eacb890a0aef68bb023cb314f74a5d9097d6017aff81a38f6916c039d53225f607f070977c501eb0b459b3df2ab6eaee4bfbe729f129e84f8ea1bdbdcaa4e439387164d3a151e89e353340a9868f105af126975d14e8b59a43be020fc47c41a1349d5bd6a704b0ea7a0665938e8e2aabf83fa10f2690e66812111f4575a04ea3edcd11c71c8c8bbb7fb96a9e7fc96c3fc5f189f98016d33203460e1e72986775e02e79ebc59e4b00d28b06a5f5806f6ffdbab0b31615e5a838ca7d79e5095c100a5aca5620ba0bf34c464105846014871b20487795608348685963170412db0a0496a908668205307a59a81c9671a9678497a0729684271e50ff3b0afca558adfa7bfa250ab2804b26ca7cb312b4c641d18a42bc185218b96ebabcb9ff1de7c176d339ab48b501520046e47c3f81462848edab132b6a6b2d0263b0a596e886fe63b05381bd1914843b04cc0ca335c649d80ef8e55cc8bada418ff20d30745ed180d2f228bcd0f7441a2e883267f946fe1f620efa07cc3444dba26c5dd9894db3d7eae57f6eb9fce26d2b825ecabb599a4da65c6bc62ca65e8c13e8b604c8db8e481e7aa0d03a6c170c2270db0fcec1df0fb4e2bde2b4dc4e243103b844b8a0438021d051b8731c7ff7013090f262e8475e3d073012c7a597f3dea9202af50b4fe917ca198bc9f10b8d93e526f4ed0cf0f38101c259dc8ab725004f7abfcb6981b93248c61a991b8e22fc4c262ca08921a40086b99e5b6708c502eb5fb75a5a7f0de102e3a0516674f5045a5bbef094cec90fd725bcfd3fd06efa499b5b2ee6e60073879eda35efae42d13f752723d30624ad7722079fd78021c607f1fb44ceb623dc43318e711e3635a6a5c2990c6c0ef4c60dc468284ee71172ea9eb6dd206457001a3e310b44024191c386c7c5f4adae18166a187bae23804e5fa09c7f6833d20a613dd38d730b3d5d1e88a337fb21c85048216cda2f0a255b28a4716d2413e8a7e8d8d835f80f5f902f3dbe16ccc6c68250a4c6045d0781118068d1858878fc5669a36307e342bd8ab3018335b1b6405f155a9dea41eee9e13282f02158b4cde81f0c385bcd1b76ade29738e7dc6326cff74d84d676623a0c744d4420dc32306daf065f557c888cb6546106302180557187c3a120880ffc1b96ab57854dc1b13ebeb38d9408ad8030cdd99f9730da0690de88e061a66968e464d71d948b51b7260a1b2a9e59cc5b43f616063d1e5045b4cd190d91a98f448c899016166958af97f8e582b197f2a15e620fcf19b4f6e037329180f2035a6023428d263ba8a8940ca2d65a5bf1ea74843070e290aa2ca50c4117b7c222a00e614c6fc53e7fb3727541e59cf3a1674362d5d5a45b43cb390a9a6f18875d1a2634a6cac5b865f05a01335697771bb14a53c3c962336dd75d263ba9b09f530998054e8341eeb7beb3bcf46802fd028a5fde032811b20346705bc2e362b544313ca3aa07f3d64b343223ce003a2d16f656fff59e1ff433cf0e3e387ff0d3adf0cc5efd14d90b14a212481cf15d4f9a64635345d78ab9c977940b418bf07d6a70a8d39d4436aa2bc12e35e6cc9add015b8c507db3c74e57bc3d89eb08c9d44c2bbd15380127b965f7c60548fda8df99ff32c08ff8a177a2530e9c678a465e2cf497bc9034f340c03f3ae66209f051ac3517426f4b75b0ae65f3cfdcd0f39ec775953fd764735a49821dd7c18594437a1f1ddb45b953ce630a87aced501ab857e8f95e5fe39f82097866e73f38eaee38613eb8ea2061e56b0d77bbd734e0f1ccd668352c1902a48866c007dd24dbae2dc9f86b27988640974f4c0f7b850e0570f6d48df7a0648b5324fdf2d1e01f25c1c90e0fb82800c64c00dd837503b930b93670839196f1cfad32b15b13267b955cdb96b5a927e13e2c771fe5bc4b3c2962c7f5310242249029bfa540b8f3b5c32229a29800f03064901a1dd7dd35be9bf5d5056ea4b52a7909de94dd54e8112a52e6482530d0d9a81e4e1639a7cb1a03ac1caa970fa9a93035ac1cf9745b0de582c2ed100e399b374dfd06c3097586a4551de41449e883c01cf524dbe6137266d5331f85ad4f9f445dc6dec97588b74d29bed2aa801625de4ebaab726819780ae76a3e81a06b08d04b6020e1d6ad81ff552afd4a10f3e441f20c72591e5cc89e4959b86396ce8491995c33c440b82b3749254a3dc8ee5cf6423b50e4e4e58f132285580ae0085133297712a2356a0552c0ccbca0c96638bdaffd13ab8095f99a8302e4f1bf73c4629e886357b15aeb9e8a5cce794d754091d81c6776e4a0619269e4cb43df74ba42ae0dfd8d154a745da65edb17b8238481c6b223a3c3fa0159b552d009a99a6e63d4ed3b77f68964bc7bf28568f54860fa0686ad9080dea23032c77b86e6e459528e48cd3d404bb49f4e09704014764824cf82e297d4a24a688e8d89e18885a10d363f537317766964e771cbfe89437711f35da397e9c4402394a576e8ee79c30a6365b45da01c43cbb66c93ed7be1d4c8ebad3e89a831c31bd4b546e203b2a0665ad034928d582dd04ed8ea6337532864c81c873db262d935343e70b108a7237505b752a582424ca4f92b3555a5c2e60bc2ec621e1f0f4e00bb17ab409bda42c08de1e07484f181b057161a18aae444af0d88040b628f54191a81f1155de13218a96ac2c1022fc00abbf56950d9690f14c75bfda83e7d6c3b393025b347e562c7063bd278207f27cba7fc921333635622e864ede3fbcd7db1ef3d2333eb4d184edc83875e3d67e679eed4934ad1478b476e97b474eca970c9319f2887b0c13ce3539e257d5feaae090f5089a0e1e7ff7449f6960b41d65e3a0a20f9aa6d67ddd920c0855a238783ab4938d8bd5b8a333ebf74da1c63b80cc2808679471e3e73f17e6bfaa7dca78eaa7fc6411ea3dc6464841dafb60a4590af1e69b2626fdfbaa19e138a06f4f22244de97026ecd38a846843c12d8119c5b153c627a1903b902582bf27c433c88b803f448b012ddcf20ef87275c8ba989a3cd6f14a8593279c8ed39c966e3086acc1132872e2825c798857f808d284ab4fd8a016d702615fdb734833938bac7fc9389dce2ce6366d9eb2a3a5d57bd136be75dd911f17b9b2eb6c7909d6a5f4c22dc12fa70d7da35384fc0ce1a5797b6120a4312b72ac8fa9478c6889f32cc62ca6c9f512aa0070df3e8f99a930c57cd576237288d01bab082ae0107b0c9de73d36745aa79cff7e0115ec8d5b17a9818b2f7c4d5b8bdaf08a2ebeaf0f2ec47ab778f4c10661de880c67bf86eaa93c2b85be111a5301d8abe70884d9c1c69cb73d2c5341387793c334e1141f5f00b94af6a5f8ffa7c8036bfb208d25d77cc12fa6aac940c23a81e5329ceb45781e61641f7b2ddb267751c1bc56e1756de2c1b866b36eb6cfcff082385339437d9697a00c64c71dbd7bf7031bf0840fb973ecd0c0731477146ecd02ce78730ae54cb46caabf27e99a371df06839f114e7fe9513387ca363edf6a4c468f0af3992cda08ea5c7b5513c2d790f1a6f205e64390e9830e16a3a705dcdfb72b3961d95196bd303e91ad962801a2f68a0531f2b167c4923c659bcf8db3d566c25ea311033a4378e9385e3c9468583e97ae05fb85d8333a8da3a8e9fba69762636cd40e6244e0c1d89bc54cdf91c6acbfcc963419091f9d3e4e6469903838033925dd053988ad900814375a12ff097970f9cdd26c59d2f8ab33fe0e25af74101de79a96c7e20dee3d56664079c461083b6541ab5558b13baf5fdfca1a4923d89dd189dacba1ca418eefeca0d4b926fcd11a8a3615dd1be0d10c92b71da6fff8d52fad7088e7e2b97442ca71ff9a26053a0c7a9e88cc3e7b06cca76c85bdc24562e2717243aff91e386163b3f1c4e3c88862374fef5a15ad17262f6b98890ef9cea9f7b09d232cf4c8418589c95cbcb08189f4492ce22e50a7dbacddf0740fa3465ce3e916ffa010a3fb9f548c20161bdf2c2d38bf4bfddec78a1ca2005f29f157445aca1c949821e2042e24e724aa4ce59e26b3c5c09e41bcef2b9d73b17a04eadd9ab6d66986cdb3dc1efe7356bfed49113c9105e2a1366fb6aafcb199b8c8bbb9f78450b4e7f7dd4e6255120adaba9e7a41e622e254b7aa8335594a87b1b1e6d12df314afa23a88355d53e0698dae01b5ab8efba4e92859187473b023e1554b08e13e1edb3a57d69d87218f7f18340230d7fa5166b4b2725e30c183cb2bea2cfe3b53f6bedf37cab2793230b4c35889e1224aca297ea6d782e46c4945f15b91f633bdfbc84d799e977a755dffbaedffbf6df8e2181706640840f91249c156ab181472a254cd066e6e455ded2d2278331fcf1eb171e75c9647732a30eaceddcdbda8f519cc1eed7737233953bcff14e5915f7c0d535d6bbfe22317aa5c47806606e8ba34232b9b681327d251941a79f52c3035c8fc298681e20a4f14f138a8e75feaf2f06ebdc5a609c5e28f987a0690db17b98e95729d66ad016ff53cfcc2cfc47a8665ef50e054aa9877431d272c86818f5261580684d61b0f2113a60e0c18c5095b2ad74993d6894366124b6569d8e3a3d7a4f9307b198a4c2e12d65dfaa7c2fcb1d00c6bc19b320641e7c9bb3201944ad6dc9962b53167ee56df69482508101a56e59dd0fe1acf44a54b9739af33638955731b5851d299b4aabdda07bf8bdea73c2bc8987d69585021e23c331976bda0f515c0351a2ab6ad95d9638401c03aa85c704241e983d39f8cc4c4b09000fb920858d42639acbf0492739065f6d1071f144537a95e8a459aaa6e1f765a08b336ee31b99eb1e6d1d94abff341d68bd1329a80620f72e9963a730b3f20d4b866177459097fe31a7071eacc07f93317db05a5160f4eb3eeb93e513095ced43ec82182084231216b6094606ba4b82d35155ccd10d241e7da794c9d3c3d8ceb10006b26dad94ebb0defca2e9c4d53e2957d9669d1e0a2bbd817a9bdb5731a1a1382bebf3a650cc1ea72acbf7eaa67932d9661669a95d8a6b9b2c196eeceb690cfb7459c05ad634ffafc3ef174b206a0a76d9e72594cb7666d11e4914109dd40098055f4cb7db5a74cc78886107a7f0b3eb23c2bd854359ceeaecec5bdb869027f7836093dc063062200a1cdb98847141c21ebfc71726f3ad9201dd831f788c009e6182beafb05dc14d21af81c1acc3a39e7c1f2b463bd3f339de05ed5034b01d9f72ab54523938e23718bfd3cb155f444e0ff8328435a001b3fd34c634e7f4a7a1ee5cdfcffcbdfb1ad047f66b3624bab261919b6f2566bfd340e247bfd4d4aaef216eda7d06746407cafe04ae45428ae3d44f6e6780255595eb6217703928ab1f86fead99f01a84a133aefc8decaef6539f054d3c7cad9502c8041a455b4f3a1416fd07d3bdb3995cc427605fa9425c754619aef06a7bd7f559ccf408ac1ef4d68845953aaad9dd97ab74bf48e3d0d61482d1c4590bc90a61b2d888be8cdccaee6cc3aeaa4202b744578872bb6a7b997555295d3eb8b35234f0619c93400a8460c37a8edc0e737c0f5b8013e35c63750783580d5aa9a48489a5b17eea580b15f8ef260f6060c024d47b018d31d4bb848c076bb8658476629b53e8345f35063769eeff2efad90add4e7b0babeaac9e3aafee706df2f00f959d1e768249447da5129aee0846102869eddbfc95be71cb846efca0047b8750065433d0946c5e99a6e7a06e7a59e5d9594cfb3fdc2e3eaf5940845044e57fbf914b33769a033e12859240c887b3cf9552c5f9ad829253a2b3601a5cf893cdd0b684d3caa5307eaa9b940785658de34f8e80664668ab4ea376a24bf03f5642f5c2b12bed195b9a277b7660e04f91fff4c6913686f9303000ca7d0e822d36f5600020e20aeeedf0f4830c674cfe835bee020f2d6bd8085b290a5c5acfc877416eed32ef19b73d086cb495087c3a28187449991e82016cc39c2e624282ad54ea0745ac645cba4f1d7d73eafc77c4ad6ad994ebbdb040ff80c9c67b5da895806643f5f9700760363d60c25ce6e3ddd4b880f1f42f17dc1805fbce2c08627ec841cb16f1aa8677f6f886d9aa8b99ff4d0bd87177c10c2a8e2b56ed68912dde4a324cff638b09c13bb912c725d0a9c5f4496e5d10361699f9cbf02c7f90b969baf43c69d2e964be4a6c48948d1a7873009a778c94fed28d99b72ca0629f936348eaa64a4e80fe3b78ab33d4044642dbc8b0e59858cb7ca00f7e6148f4db4a88424dfebb124752d02b45bb720ff91bdebc79d895e92b1bd64b0a11c90f2183e130c2b3acf5ea9967faf7162db0440be0d2bd4a3bc7e7c8d1365f6352612c9af31cb7382345f889c28779c77a245ced74a2f697afdaf91fe77d28ea48d35aada26e51e610ae8910eb011b6ec1b9cc620ef5ed2a01bfc1e589480cee7f2af322aa3d99fc6f7d22d3e81253ca0d62b16ce49095d95f4feeb05b4899a1fe1c41512ce59bec21748d8e8fbc11610e8878305302a69441ea9e4525b686a9a1817ba26439d5934d9bd4df35527747f63158281f18af9977ce9daacd446696af3466084aedddf892c66c981c0cf72b6c00d76c9be32198b3718b5ae21913c888be662a7bf77a5de930c420ce8a2c06f90844a6799b72b9ea228a16235436b8ef1aed0bd8605aaca516f391c38cd33c6e852c1d2fb127d05095b35121309ab2be7d3ae134f86b6ad9861452b9ac18e1b4a68fe9b574490e4846e1ca51e38fa20688bfbf97d53504817c6376b7277580f953b6d6d5e3d098aecd4ab73d4f3b3be85900a605382f8a790404a3f1c4bf0f56c017e9077032aa39668c04804d33c5e8671c80c42b5c7a578da62af750e2b441bb5eba2d1abe46d852c6ff20bfce1ed5cd4c766d8c868a3f79177b2fb104c9f1d3038eb5c5053a29bce6b9fb5044fb2e29cf1a101187c2f1637846d9294a3d7a780c1c3a3e055009c26e3ee193a20d525c817ac76db3f0422a67765d6c4b235d0067f33acea23942e7a566312f6811f4f8740548a100c59fe238f75b3354efa1ffc60c9ad1b07a4274f04476f94ba94d3109ec704524bad2693b70c72f6077652583d41a759054efca8fdc1aa8a694a617a6ad85ec95871756a853aa91632631dbca701f225c5819a05f6f17d0247cf1a2615d16849c0d165a041958f9411a3324a3af195c2e614b9d5b09e0fc1eaf0009c754b980b8a8c9afebaa89745849306446229da483a73ed8896b508ea19d5e63643cc48a053cac055a59d3ae9f6c4fd36d5ab3b68cb62c84b301ada94195f8fa43767c369882b530190d563a8a6074d4c111bbc69096d70d0ea771ee75fd6e0658a752a623b1e846661f6591dc574e3b9551b6257be0cacdb17de0b9decee1e1c20372244c8042fbcff724489e0fc78e6b28378e94a3c0f95f45e84594918657d09c908daf041fb82e78d5384d53b66c52a04def0e8f1071bc56eb949196c4cae3edd36fbf14b9e262666def69f78dff8c0baf49bc0b048565e91d159360dd57aecaa9b8ef2e7ce76d176a6820d148b343d43d1e32a4d21930308e0232ed66f44db0ce20cf20b4fb6e1e892392d2ce786acb359a48950e19f75aef9a00bbd88a45edc8b67be99ce93f5e47b815072adda37b720f76ee6812226cb1bf43ee0cca65a8eb4a4ccccc1b097516507bec96ebc27e064a87ea27b64081efd9a4eaedadbb5b00019468ef97009136ce3ae358bd1f8d92922f032d23bbc87baf7cf24bbe8d62f3a19390d42ebc8ec206ddb29909501909d02f26575097f2741cf44f66372606b2f65e7a787c9209f08ca495ef23541b1cf6ce739aa4868e2f16be7da4c947099195e3ce2c68dc964ce66f7aeb832b2a4a9598598efd5f3db0097f76b95c8a2f3914ef7662d7a5e03533b6912c4f8dd2d84f2dd8f4dfae13042e86a4ddfd10d1256c4fdbd4ae711107755c7de4ad5fb45347fa6f137856f559c2c294539c645b3a87dec2f9509e64bb4ce4795a6a25942d163bf99199a84e7e9934ec7a6c6856260049398078950e489d427116a891a749aaa6c56405ec76b5a264efe95f2b2af13d10734dddf76b69dd4fab25081a97282fccc4b2d7067b272d4600c1367a46383453540da0084761d576f02bfef74754ce9f878fd67574b13d89511ec8936c2e9d2c74f21fcb2bfc999720b9c8978aaf7c9dbae227edea3d53c008387c57abb44b72435d458df1656a5fe2b767783a677c8a11f48b270ddb5831ce96253db071400d80aeec173a55b15948f084d9a2e46b1190ae049c0d463d5510db1d2890c8932a32dc850cc458249b7d8f3d8f9b6a349d41325325e1bb7e2e770797c184a089059eb39cda8dd3105e57140a2508b72f7eff6f9ef42ea5c4049def5e01cfe33e0394e92564c03d8e0891b6ca5eb56a11d31084273ef4069c2c40cff35819214418accf7efa9ef19583894b1afa10af6708ee179cd584c49d7611bacc82e2533da253dfcea9a2caedef154494e3201fbdf8bec2b3d0786c71e09a7ab90cacb02a439ce395eb69579354d44d196842b2035e28a3819cec00f24201cc23189e26940e102fbc9e7841a939554a1658aa02a205eec8971831a79b1eea0f0705b007d3715622a6cc312b2b43d977bfa833a6d2e4823e32ecb94c65bfa91a7efe35498e75c2c377d1056014c4d4c9915d198f3d9132f28d5868eaaf6e35b8ad3305ec0f5e0ec47108e353ab20643518e4439cf51a9642d1567f563c67e7532cfb6b3af6a9fe468561a41ee82cae5dbe152dc381222b79957dacc9c8a2ea7a0fb654ed90e1274e5d434ddf3d27bbd6f1598632fecdad345313c897fce4f6777e854b4afc8cdc3459c8887852031ae050d12bf59dce2929cdb039a0d597fbb105908f8d5b745811043c8144106f9582d411e2db0270e8f48c6653af3bf308dc5683ecc780d7b414a8d24fc02810bd1b40a6737a962dbd6d7a0b9452c3594f3c9f8423ee0822a19fa5a3d8d442712d94232703b34756d47c435972c294a61ae606db6d77976e87df7da8c85ad228fcf347e2f41624e3339982dc2a70f66de857b96e6698dd866ccb969ce6b151a1fc535e15d2eec2bfd6cf2adfe251cb1d68243464d69dfb51d64e31676d84fe3c4272cff93d6b28b0fcf574a3d955eeb642cfc72e9de60cffe658bef9d2cc457fa3a8dda2615247676ee4d37e3cf61fe491866ac552b8f04785fe86331a66298e81676ef43767c75470bf94c1f932aee05f791776fbbab057caf8f09c60d276d16a52fa796ef72cf2465f11f6d294bebf78e70d40184d2d0ebed466c351bd90ba066d54213c8e4ffc777f24cf62e0bf1adee26ad7b817da7c624efb200dfe86ed2ba2ed8577dbdbd5b3009c151fcc2d47da127d3625f908b4f759b44755fb8cfd5c4645bfa8f64aadbecfeddab320d9e84ea217299bc68e2e7677652ebd42ed09b2b1909de4d9c3e5ef454268bbefb8da217ceba4a4fd08ed23c76f5cc22152b3ba625c6b4b2bbd082551f9e587b4e413790dd606b68f6122b2d8c5dc767ad49678a2e948700fcbcc7c7e1c210872e16a0bc213cb501f66ec533095fc8e1dfa881a1e8b5cb54ce9ba326557d9f23a3c11d8fec26e6d9a4376a1ecb86fcc221511b8af9d0557fdeb4c44af01f63fec4384a020832ea208f3abc1cb68f453fc6cb78d4b062ee14efb09409ed299a9c87b7e05e701338c0b825c1a81ba3d9af4ab04d98b68997c2c7de84c1bf644469e9cb02616faad8a7362f1c8c4115fb058d6c24771914f8e5938ba1fcb0be30aa8bdd08508129a2aa0358dfbfb1b4da4e401c970958f7243c0a65bad430218ebebb0390f5ae5884bc632c7a4bbcd5d6724a9998b70e00cacff92791a584e582f942890eb4f33975fa9e095c2fd5431b4bee56eff1ca057c84d973baf0016a99b3d4ae7c6fc8d90a99b4e54847837fbe2cdc3b5108492f9ce6c017fdce221c9445706def5af3f6db7ccd1185ec3bd001d4cb2635b4d211100809b62f058bb2d527c858cc5c15901bcf5e26d3c88f825797394f6782af75bf8e97ada084897f6e8c4c68698f5de76290da045abb552c6eac02b0057d2b8a0a241148c4833c8f7ee5103d7ebd9a42574333e46b0f084c46973484e12b0e32b5e994a970af32615bc54a273e2c155ad386736e63f9801233aa51c230e79bf3d4768068d3f7e2b4e24e2dd5e8445be57d6e4aabbdf0ea1c029a6bcc37f48b54a2f6ac3c88924f7a086843a37fa9fe2b0d99d9d992a404e4aaff23036df88fcdb73adcf238a316c55a4d7aac30d7ab9624cfe85ab51aa6b2c39897ec2661e29fa252535bdb5c258a608d3b00570f97d71f74297a1c125d9dd49f288f1eae8032827388c321e18b141f817168f3afa8a4d715a406e060ecc52719ad37c03b1b88989d630c3568dd363be015701383f60edaa709cef16fa694a0447b105a70bb5e7796698c7502e3e083d5edda703be2ef8264353cd0fd63953db4139c86f288acefe9519622d8b0c4a35b3bbf4323f90d8587b45a780ba446135fd65018df96311eb09116f651fd1a77697fdd10508f75f0a72a1cc4a7500d31099a3bc8552ab21778083121f476bd18b95e3c057c3082c118772ec3b130df12ad8441ff225815b03a206edce84415c130081ff60feb639d422ca45707d9a7bab0011b59d13fb3b4270a2e50b1e013e80dee68f4976a0c5403da009d020174887d5c72827e7bac682634a5e20bb651c4930fa62c16a839d03dc54e0157fc5d1faf15495c0094170d26ef9c5c010dd27f160f9d21ede2710cf6a5694f91b8422b334a0278ada8c4d7b1d9dc931ff7dfd5b062060cce59b3b7017895c904e409e57f3c5a0c6bd6add2064043ef6ac754bfe495a432dd0d6ea5598b54a5cc9ef1f5d4a799098d5fc9c004f62f30e2ecad82d1293189fb0fedc26aacda103993f12fa054e0cf50b62394983e787cd223077fb952ed2b97cee21217b88d9e2b65be5f3e612da69ff3d7533cecdb26864c4ff1f04038302a7ab31772adc00f9b5069bec3d554c46d5da22ecc4acbe837a8c4971031d1b441b363e8ae09f5c6ca7b6d52028378d183606096b9a762c013d6f8f6e413ee4759af8d72416d7962ef78f4d7b9648c8bb7162eaaf44f39f74f66b59898e285bd0f06dc36470e369f199e1e19cfd3a26e8cb01d1f35430120a9eb8d8b9d60d980854b4bbcccdd593455bd31b4c0702c5916988f6391bbb5c4868519861fc64ee79c8244aee72bac44b96c2ef108096e5808109c4b85ac0bb399fd1e2f4b02e58cc8058a3add3fce833ef56e6b9c8a96994a94cc7cbedc20f98f6ccebf2470ca8929f68cb00b76489b58ad5a25e20dd7a561d744c0cb4ebd16b556ce9de2b29745a6d552b77adee351009148f37363fe6b699c030e40b2bab5f07651c575b50704f407e4260689a646430a2e1b5e9c4e0f7e675dfcb9bc58e883c8d43ee41b0b3d99a3ba3f5c71cc6cfa1a7b6f44d92996ecd7f2d414a15dacb9d84e23bb2250ecf99fd2e6c4026954a5453b360141da25849599a3baaf74f70b8f35832657b314f5a277f62f910dc68aba88c88072ba03610991d28ff054e24889db07482d6133eb773694f01fbd46bacb45b6498a86fc90ed10d0d2adb468b5e2b48a90787e1bcb2cdb9791cac3bb45ece8161c663bf5f44d0590c2b306ad2639e388b01229930ff45eb255dbbf592ef1551ab2d0cc8b24cb81fb88a9d8b23d47c973875ef84540819717784f5079696bdaa37f13ff531bd2319946fd2f9df1212c3fa67e7f005fefb00b23dddd9cc0e2860147f80895cb06f1bb2a7d49ec8958f308a0150a810f9a6325b657b04470de0173c9db3412ea318ae1476b568ebc6493c3b259e1c03994b6adaebebab57bcd87779b319ea3bc2788f37df9df7c6d87bacc323e1bf066a89b42b8d9a7df99d108ce588a4f1dbc8eb1088e81ed27e1b935c990b70a0ed3eea539480488045f862d12b7c9ec4b7687a6092c0cebc6195f9c313109063340984190e62a6e21f3267d4bfd6edb7d11095ae0f4d88ca96d954f5badc8003f61c4f188ce02ad46c8cb72f8ced0abd56fd8795db37796eeeaea4131b853a0d53d2bd6028c6b037ab5d30c211c93cef0c192269c10b26d3c55360a314b2047e01d89347b94e8a46166a36273423064273ca032d19b9e29da263cf5a8b36cf1e5261958d7876f5ba0eac9c22f2e9c648ed8186cab1031a1253c67406e3a35202784a48b98b7f03bd2717029a557bd4d8251495b2ab411a4141d1f4c867c638e2b5e44b26c5d542752cfd3c6a11a7a2920c49b49057f08845d2ba2968cf48a5ed1add48859f009af75c6a9953f1f3088032e42f10702e3623950c5d54472eaef69b94434b3789ecc750d58ddb735234c97cdb590c7702f102a41ca4c0654848c2a1384254aa39f0aa58a01c2a575cbf8a1dcae859931069d1fcf0c508303a0f6a6a742ebc19c6736850b2d7f4e47540a39ed930f211c3e51c2fc9d4ca71b2272d3d2f50de583faccbca03ccd632e71a491e194abb8821bf2d0bfbf51a96095edcbe18a8d3572d284437835699dcbe97ccd238ac029e77527e5a9fb086060e9803e10a650b651b7684bcf5cc51a7143c3fbd5354e6f6599237117e23a7ed1ce75cb4a10656717677486f0c486c37302c40a5b9b0b05aabda54442058f68d8eee40504cefe631536fc84172fd15a980aa6fcdc1e52a10b0b45ec61c39e2bd11e49b912192d14e488bddab528a6f4b1b1eeb283c33b6357f3db025ce83315ea7feca438c7e127f6e70a9be655dc9153d819b67a52575d4003e6d56fd08df9bd45c24e0fe4073beab74e84c25732a4b4fe446c687a5ec8ffd19dfe2f4b9decf18fb5e4d7375c7a32d2794d90b5e7b7564460c4d342a2c76da84c47424139a46a9f7ccc26d85aab373a76ba7d0696bd584c3c853f41bb4ea8f7861e368c8efc7f0bb018bd4838fee7a17b79047f0250c14db6cda6f38571377d6596e31eab151fbeb305a505dba5666e48926b78d10c2ad0f62ed9796061b27e71e2514848c53b0c455433d6f702b5e6c805c48d65b0e1c0296d207a7c8ecc0e1068ad53f4afa3d6751e2ba4f657b736e5afdbfa26abf7a074b2708990889aabf79832006a1c2ecd186c91a4f1da64218255f3514dc66f21a93278db43bd5afd4a334cc8be0190cd60fc2cb53c7bfe2add051a3e1f849472362c50ba4af023664a86c86ff3641ec4d61547d2e9a79e9533e5d0a459838077c7fd20e9faa0d2c9555172084e478338df58fa56ecc1bd1930c340f30cb44d53de1b168b3201e2a3ab97d3536ab4c5b24f8c8a8985a021a4ad40a4961a3018d1ce786d126ea40232276abb1441536a500e77f81f7680793a16a5c9787c214bc78d1bccd51e57b011c18e9274a8c308ba1047455c290b244f513cb74cc691b9191a78aa6ece767ebeb07b282c5532fd486a9b3c2f8070b5485c5768c872b7918c1f2f1b6b3b147efad4ca1907d996cf48463718697c23b5da0dce2b839ab162d8ea282f12f6036f1e58064c335a8b971b8a2b7ad822c29001abec6f245193efe20e4c11738a5ca105abe579d4488b8334b42953721c35c7326810971cdd99046dd3fa302e28b15a0236da0c38280fdc81f6605429efdc4b3b72d9e71a9f1af49de49ff5f2be7703a91cfc3684a9c16ef0faffba262f5988bb31ad9dda17af314f81a1b7686f4280e0c1401d53461a534a77d399c421b3e1d1fbba6e1f002d715dbdcdb2dad43321b542b5e028ba78c16e58915ab5d6c72a407d7070289c95b4e6c00550ce39b897ad74982d2acd53307c6a8ed8e1bc81226c92b8ac39cef349b4b719c1fc679663275b2a0c13e802dd89c1cf5412f856241b18a1dfa0fd7ce2836bedfcb8874d9ca87654c68822150000552b91d481b72bfdc284f7ffa6088de8b3ad252ccd47bdeca2c48206bb842972f078713d83a313499258877739ca4eb29e24d6da62d91c13812d7ec12c39b70598b413169a8659c5c333109a866214b10943406e80ba040486e4a4840b511653a05fafe8e623221721a88707e63b9a6a645c0a431998fe02050c55adba59299877d6a6416a6e2ab73df49e7f7d5338881bb62abaa1df22eca12a5abae7e75d4f8351623248923fe299229c08fafde0d0410db2dfeb23a0873c75c7931821198de92f47189623896e8b02f42c60d14800028acc4d57d5b492b20f889fbd100371f6763290eb48c324391eb230f7465eb8b76028e0bad7deb454bb3273ccc7e2754ee019957ac1e85132f03426bb10a88584461cdb739cf615fdf46221cd90a0bcf039cc67a620bc1693c96cac2732cc208b1191d2ed72023481c6789032b0c2732b49dc0874036bcd6f9181a6a120112360aba3b8e6339fbe7584d0bc310769dc155808b5540516951cdb750fac4d55daba4419e816b2102df3938870f1b7f9b5675e958a0cb048123e9c61a8861244ae32b81d9aa9de82f8afd17e9f51ebc964d733008d578ea26a65aee385cf1379dc41ad278c9fa1ed26e307197d670451a0379c2e7cc4ee7602625fe85256a04a7f82e3e4b250aff33980209b81c6c63a58e75dc27179ff39113e0e64ae9994fbb3b10cfc8bbdd28fefad4022afe640736e7717d7eba72b264ebc53fba4ed532088cd0e2df39a8aa86fe557f3f3301befe58ff0579ddc489df0674b032fc7ae7a0cc092efeea3fc2a4f6c8415c222da07425c5657e015db720b40d910840a4a0c60c131bf2fb8d50adac5b4b168820a2deda4fd9070bd73ff93b18ebc8fa3bcc431484b38383388ef8f24e377f0ca264df5b766be0516f7ece3eb73b0fd241fff717fbbb6ea26ec338f986fa503088922fa27a0b8352460868f40f31a790939c1b1aad971608fd68ae25b2529a904da22c45f3184c3859f61aba8a888244aa6c079a44b242d19613c8172aa9477d509c771665d0dd7991a1d400102d6c8db286673c13676ff27e9c92f4767c53572a4177bb0b6d82b6c17b2e7d41b10b4976c2f871829505fa5b244fb489599e7c798e7d2a0d1cf12e329e5812ee9fd1c83bd370389d7a1c70ef2e1ede9daf7ba910bc5c25304369076493ecd673d1e4d8afa499030b7bb73963a650ce19dbc8c8cb14c6b022fa02c2bf1cc63ac49e6eeb3402f5655e81d692d60460717a3285283f5238b1972c11ec3289256648fb156a15331bbbc2ef32ccfc75dff139b3003ffd4ab2701c7e255eefa4c0d32e1323c7257c6a26732286c997268124dac0397d327ace3565fef576d7d9d98ae5398143cc8aab0036c18392739b58f500c1b30b939567f391f4b5402e40fa034c286921040293d608b8ba132f5730c771c13d32e20ca2c53ef225e438f091763b43e0e9d76d12f48839afb88329d58e8533b5c768a012eaeb4a7c4cc1b5779920c90be9ab95c21282b0de951a806b5c211ea8d661e26f5389b492a52e7c4682499105f22e27dd62219b3438cda145a6ce2485a54eba0249718102250b52186e649c0d6dc20af0d2c4adebe7d407e2c4bfce815bcbb04ae875a5da734bad453644eaef67d0705a0a5444c539e7d712eda8edabf1f9576544d3a3a943406738bbb0946e93229ef0a667e82ea4a322c0838f77e788bb40bc889423d303ed1e10624e3e220393ee3273314a61d0232f51acbd00c39331a7a3b20c649d3dcb5d4dbe8602a070b5718561ea07e6a949b451a7c7300b1f760c9707e5c0d97c8cb2c5aebff9a6e33131f84363a0a74a1e6f18fc14391f9e7345ccc618c53e2c80cdcf4dbcd1914c6b9e17ae3b2cc63459207baa8c1788a444c092d91cb35a107cf6a408f696dd4e9f3f41b0610a270ebbe18803d850169ead01bc0481b192c66e4c912ceef7f5c87d4474a3d43a7bce8cad32a951715d48ab3586ddaca5b7eabc3e9d90d9dd744cc6fb2feedfef6071a62a916eab699ac808abb7b9f13e5c482d0cb62c6febb5098f95e2ed8a5c6827dfb08c68fc62b1d04b569deb1a5862ef05afee0c8ac69e50275bb560bcf9085cb14828a06db2e6761b870dea176c016ef2590cf4885ab489477d37325a3a1afd6b1d8b9bd28cc172240aaaa81dde68ccca91c7986f74641602140b9afc0a79ecccef036fe1410927a038234ba1731cea3608ff4b281caced2ae9ce313fa500a6434a2aed138122a6b2393ef62bb496d468fce4eae26537a97d9949a0bbafba4b567d48d4ac6e64bfdfabebf95767b91a65fbf45df8f6343ec4a28ac1f22eaf84b26686cb34de3f47a4a549eeae95713467358181dd203a026ca45bd41d06407dfd6abcd39e7d535560c11af41663cd81b6c3ad662ecfb79764b126ef58b060a93a5418ef837c228a12dcdd074e8c0756724d462f7c0fb6753caaab5722570d9c442cdb9b2093c4548d2e57c7ce9a953481e972dab0e02da467e193e77da1cd576f42e644ffabaaa1756bc0809ffa052998b76d78efb65f322015da85847051cbab823b4f3f70183350f010a498f212587352aa6eb507c397ee9d5db09ad1669c3ccd1a47b29d5b9f725a209fc2f6bf1b384ccff6ea67eb2a22aa951ba2b6cdea6f21927d80d7f936b1b886196b52ad2b66aa3407248676274e3412e69076ed66026101f4c2991249e9347ed12a069a79c026d00ad8d84e10c3090ae09df02ece89765cc9c071b0ed4888903a7730560eb6c4e33290f80db83932b084a85812a7e6352b30f2c098b9a145f52e6f41bb72c292d50e15e4c57a046012832be14d098faec69300dcf76017c50e09ebad4f81086f35f71d8eba19422921f42524b14cff53d6b5f7146b421f9c78c329c03bfd238ee7f554171efafd17e244085ced80adf1a3cd6d4569d1eb65244031dd41b0a6274b98ae5cfa59628f09cddea7da0fdd44f0bdd7dd8c0e9d48a2587e97cde2e88b50ffbfc82952f877b1af699f55218aa8b00b38ffaf0da69696ae7e6717794b597d05465d912decb73148f2e6a23ef67cec7f737205f72398c69c18ded88dc8732ef1dfbdb09e1687ed5f640ef242b0903546341959be87587a87a28b21c44b1c54628fed445eb166347d45e0aaf274270dac85881fceda8d47bad00a53116b8e8a47839c8853e9f06628b997f9ba92065007cab5c636006fc450106e01830bfe9745ee7e8d8d01117a1683b30453d41954b0a6e8fe38e2c2a201f3293f6da274ce20edf589dd88d949ff193cbe8515af5a62e2940b18870be3251908f35f4585c005fc78e7106c6a1f9bdfe9e346252528252179259665655b862e5934e6c7a62039f11dba6adb8e465665dc0424b67b182bd60c0cb1fc6923c9d522035d9c5b26b2853bbbcdcd687abf2b81e94edc0edef75e2db916a5153b404be19e57082e082286cc29821392db75bfb35f1b8dfcd595b71393062c21cefd9fec94e36119a5a059bfdcf6a132d3f9d455b86d7054089de211fd173f7741f66ac71e26b666ffa3c4e129b4e8eaafce49521538a4a5988fd64085d6f56595513f7524d498bf4ea79357a23967de86a3c58218ca93886f1a70eadb8bbc53b664ae8390371eaff88549e12fb253775dc466d9cb70de64175f89e8866e48c47bb7d136679ada02ace70149053776ef1604aced59e082cdbcf810cb0598bbf176627b604ffe1a02a1b10e42e85b21e87022093254ccc56f32cfcd9466ed64e97791935ad9287db946e3db6662e7a002036a6a8b88b299bc93bd07ed7ee0c7e23cd4d2299764c7076f1948244b2181f754f7f00f25307d33dea37eba23f6edccd5582195ff0705eb5549aa59649905e3154eaf43852f5da9ae5f3f49939abb9b7a8d263ee491982dcc26c7947cdf9badd557a4dff25e48a58a04a94d67a1c609d06812c364de5ea112194b60801f7e568378743af16779d6c35e547091e1c29f4f5befd4f402ddd5326a8854a44d02e2dea67fd75c2b377e38c9d11907c6cba24dddd77c92d5a101555a6bada4d97aa62c35dbd3c3aef108694c8404b1a51c95fa96d221e69e3b4008929dada9f9323555ad239d31d1e456829a983c4d6eabf56f350cf069234f482bfa6c469c39402a4c8f482b01cd5a9bb499b18812c176812e5d324977e27c8c7a54d9b5709eb89fbfb2068e27afff84b391b39ea5f851847de5ede9c3b8e227bad40481943526c1ffe4b25a074883a50298d907de107e34d73dac17101bf062118500e0b6df81b4d56e04681c068b49e3a3696f6a5b29a6551c1e35a612aaf55d1173d3deabc674c03318609549b1b3458b91bda2dd15e6acb247e3166440ac630662d6aa6838b3da0c4e003583aaadd66c82e9706a92277e5053b215b4a9342f4bd8b94a76e809b32869f0207a509985c130b0f0f2b0bbe036da3a7ace084889e22900c6098d8c0fd3781253ab8dfbaf41fe1c9cbbf44dbf9a098940a1e0dab97b172b02be251b644f16ff3d45ce9c94fd70dcd8d26fc8116a498bd1f4c7d55dd223b6532013d6d7589749a5e8fee25fc4cf73faa2c9d1ab0bb11c8ceecb7ffe642f89d153315e7b337e3ffe3fb0c080479e20ef8ca8c5e29b4843ed3f6a9bfa86ce479e15c074275ac1bd5b8c8cb1c9156c966043fd121a796eecc56e821b5a5197ffe4e44c4b3c27701a4ea4971e49926e49d236cbfe81b95514169e56abb91a2ba48d2ae50298d9c2292d0b39b72bbf698de18b4b884482118fc93933e37833994a9519b4eb076c2a0f947364f6c4b4fc6793d71893d213412e23213177ae4917af851bb9d2d23565e7c6e1a72596e43b5fc150d3212e036e29513fc17ceaee1cc8ce80018d0e16f1d19c593170115079277443c7387bbf5425d97d72de03ed7717f85d9568e6d33e50fed06c95c101d6e814f08221e933523e5c8de92411232d0bed0a27ee9fccd092e5944d4ee8c5390783b56945e05052c481dcad1694a921565856932499b10c6607ecaac60e9bc76f2053a761a23be6cc78717714f7810669791dab2370c32484f3075eb4669b4c839a4602356d1db296b363dd2efe0672a6139b9cdf192fa6752d049b09428cd71b4935d123550cadb0b68e5774588022bd5cce10e98788544b8304d50110d6ba397fd71024f0468bb024603c12cd85a371bc0631124605ae09780584c2ad574490127aafcbd673de15085e537596412d27b23e85532c1545230795af9ef7c25eefe452b89788c2fc38f13649c8ed5f7b8a60b1a5c95870a734734a8ffab6d28b9479ca00924cc9a059f9789ec9b60af4ac380f967238710e6963640384a5f556d1e8f11a0148514f39d701c6b883c17e0742b964bd1995be37c70014e51c324012460d643ecd9b919ff85085702603c7cc49971c608211b290b3a8d3621ceddc762eb17b95c660f0b8d10dcd59950dba060458d26fb8b42467804c5340ff0379dc861ba6aaafcfa56b6540f17edc2a8beefab7eadbe7433ccc878bc2ae892d3bfc6e0291ed56f5aa6216dd2566d42b74071418d949013f028a92af80e1f9638d6f3e5b2b505dd19e0c2de0c2d36757e957904a141b7d9e347a0a162a56fb5469e45a64d3dcd02ac4740184c0f6939f474a70b29d9f1664135556897fd7efc2714086d60379e150025b8c8acb958915ee0d14d83548fdd557325fbe9c19750301711136cea6e963b4f72fa8cd2f9ddb5a183656f38db0b021dc368d39079d3e0366daa9767db7f1f2235a6154999dd2b2b1eeff88cd64ea992bfe4d73b0c627170b41c7747bbab30067f5d60be24b1629f582b5144481a3c20243621d3db11acd92f93e3a4bd2a0d9db39c6e1e6bb7e7498c269df1ef0edf081853233538c4fea364f9b21038ac22b144b8cfbb365b02420d47ef1a8dc363c8b2fc00f933a4f056fa18a68499f159c657ccdac91ca41178b1fa8b2ed54e831eae1ff63089eb0412088086895907cabfb7b5a89528129b0b10ed13b61c6d2c374c9e6b5bc0afa8c51c03512d8a9339cbf67b031b75d4a19c9959bd70d727ff75532f5b21112ef2c5c1fe74c8957ec142b5dbdabb86abf34309c0bd0d6e4a64f63d2384d9fdf9dfd751ab58200e21ca0dcce576ee3c3564c58cc9cdf37657b33059a8685eb5e15039e0285f8a055b95cc7f26d668e03a48637e296845ff6aa53ea762f58631d5cea680054b6d2bd8343651ac88915c92e83c20d0a4c8c45383419f8f7388e4124ce887e4b97fc3fc2f14fe7ce9a0f822db9f46eda85e65c5415e2c11f56e26d8c56e6a762c5d959cb985585de02563088871983b27d954dcd6912c333007d4aea691ed3dc2c60dc1ae5ff7698eaf28f4bd2e095e81b1761d3532942caeced053b87a027bfa24959c3a7aa6dfb013bff57591126ea037689fbbe7e4d599077981ed0d14cfa3b0652e974c5410db5477874a9b699c15e4f944d43ed7e92625343c3e24c623ed0f230120aac44f65f7e70f1e588b835e5ab14ccd8ddbb74ae8d97854f6aa381ce7c6f402dd135328085695cab532a1c63e1bdbd5164fba8341a41bda61ead9d7f2a3783861e798b05655e7a1b5d62aab9623a38475e5b1953565b27cddf2f8719683d57c480033f4c1d7c4b8ea79b4e594f98c6219e35c0c00b5a3170f8c452c97a95e612892bfa7ec7e0e38df9568a0f8a4e88ebc25c9a952696b5685d2a63af42e61c136c33bdcb40e0a456721afd5da9705fc1e11f5ead20a06a72d34b5d241d68cbfa81587f9e0c3916b04241d36fc36ff65cabb4e59b6e3c31990a92786c789637a93c011cc5efccf1842d7db1170968ffb7ba64044434ad4272030c1475c58d87eee11249689af6649f62c439a77e36a056766001047c6657bd9cf747fa14e416bd149c6d80b812b9baa6cba540c7e8e2184a099cccc6694771198ba9aa9604dd73920cddc396aba59178c8c919c409677cc96b600be314acee6b25c2ba6decb21986b031fb1d61fa45b96bab0f56bab4859f2b1272a2097303d971b78914412f2d4d85e51ca4616714ea98920a47e18fe69962e7b2cfe29653c671f26ed40ff9fe4135b3295f5bb8fbb6de60911c78709bff83374f6cffcb76302049b914f872bcfbbf7e395451ea6eee3d3f2312066fb7e5e7fc67d64b0e2e40f834ee2aa8be50756803446b22a027eab5331917fdb72be8270ce8d8a057bdefadab6ca71854d85279b7e53fc389c22458987b0c2cd6c822f2c72e3958daa17fbe8c5ce27e6acb420106b6aeadbcb190e24a3505f85cc18fc098a5350ae6e9e4f7a25e76dc3d51da12f23bb2165ae253914d36350b5a8fef7af5ca03b03f3cf2fdec10c073d5110b59b4ee50f330b864ac2ae99d563bb3537ad1a175071dea5a2082419e05d8b8395a242ee54e7311c851c5a333b7fd0128058b7c243542c633b3b51c6190e2f143aa75e859c502fa69df5aba50da5b9dd2b814abf348a0e6b7045c177fadfe54d5995be11df58cc4576ce96ce7e8fdc3aca2b84cb8fcc8205b671c8cc115e21494db251d56add8c153936fe66f04caa8fdffde2eb95c00857c3dd7ca0a4f201ebe35fb4762717ffb4140065a59ba8230e6bde617a354672554d052e950f1629c911bab00573ff6a49d9d5aa0e96b43d7b235f6897152273d53e0b9bb4af9e6675a53fa8686575522b1e7229ea1054f14ff5d913f05b1342bac13bf6da83289461cc7755b9e8e3c46cc47de7d8e14e85c19de63b0fcec6061d59a644e9a5939aef56167d897e87a3eca58e2444d148ce4f614f5b88ea28d903e124942831011db7a993307d9f3cfc0d662927c36402a10e69cc9cac4cabee96bd86bce9584e452a950b9d30d993cfedbf07dd9324a5e0cf5adeda87f492aacc40de14063d477a3efd91a472776dcab14ceca1f064ef9029f055e2658142ac2487160839145b29fcceb03a232e30419de5ce56007e50f9e8ebfbec2aa3f51f7d7dd124ce4de2cc2532acdff380013722deece813a862d99192355311b38ed31e5a42a0b2d6781f2bf0acf5351516c9e5a7a8d25266608236e51bf6c86af5695004169932f25f94662f801ee4b73842850a9e56de4c54de91419be503477627743e94cfabab630b920145b722bf2d89896c05d5d251a3a0b088719e05e330a975a5ee144bd1043b2d1a45f8f211fc4288c5b78d22197cd619dd019b8fb37032aa083c76ea4edfcc5f0151ebb8a595bdb7be41a61fc45e8e582375628b5d66cf66de4f540d254d1d3d95697adc32b36493fe269e7f900b27fc137a2b8154b5b45324190e4f6bc89ade026ebc5aa976fb5a5a1607db292bf089b2924f4e56ee9bac82329d367a0db1afa0ebc36140adf325d2275acb7c31d1ef1c7fa89af826700216d3a8a0ddd8920b455a160e1c0b9b867b44cba60371d3c4415dbf4d9e57099be7d8a00ecee43211980614cb33bd3b0ece65ab8e4f22edd3a324d770132a417afe38313497872fdb53ac97db9bccb7dd16f1fc6e926313827c4355ee0c4db6b18b07572fb1e72e81de59bd3c923bb8a2f87798a5f0edbed710d855e122a6db63c687098c420edab16805d487b3341d0405b243c8473c2ab2864e7eaa89f9d44a58f97afaf998d8c51ad608aba2908abc2b4614981c42a520626b7c54c95858c040b24a5bf94d8175afa94373dc0d7947c4c77a19f1eecf016f65be995c7473c11eee7d7aa738238ad6b31fb292131a95268d4175cf72c42f7b551b82ce0f288301f46acca6c59c28a579d90a92cd4d61e7edc7453922029ea6b840307ff5632f797cf06827969ab5aa7689216c5249b50db2c3812d2e8ea571b2d0499eb0726405541a4e6961f3c6ca814f02f7d396516606dc4d2fc6439aea3fa212aa3a43c60dff5d6ff7e3e6ede77c74ff68e6529a2ca8ab3a5e8707925a1d12c5a8055ff8ff663e48e4248c436d5fae965d1d716adffa1a66280c32d21363a250726ee7e40468b12a9e827d9726653a6a83dbb99a93a7f1989b5a5113a5b8179f11f951ebb4edf7f8044987ba343248d12bd94170bac3b6e4521b2de29490d55ddb71d89596fe94b1b2c7db0b14644f0c90aa0278779cec39ecdd6a001631bbf5543d99256b105f0204066a3726967c798192b12ca3fef1921c6038be4b7a5f42755f836e41ef4a652abdbf656d19ef2e6e885c58fc8290a6e4a39f4d693ca42782c97945d155b7a99eea0d7b972584fc3068fb4ef0b42b698df67c2d4a3908728ed0373d8a1aac55cab76b69ed57621860b3bc200b736562540151728d8cfb937df77ad5b355a7cb5c6808f59f9881d265245f28179052fafc44080a229df1aed663af829f46f379ba86848485e35d994e4f51905aeb8770d3e442fc595c3727ab4e3eab4c53ad10790e1a650b251aadcbecb70a2697d20345d2514f6eb3ad20ddb01d224b8e679940942b990aa08e9a16c0a559344a860beaf4932f7e4bc744e973bd001a30351851fc4d1415a9a5eec4d356117f27c8eda8f993a4c1cd95b8cd136b14198b0b8559a25cb0f5db716c520f73b8c8fd5bd9ad0805dd2eec20030e33668d90d75e4b08c3469ba00ec9f352607eb47671a283e60d21b1f5ce686368377b4308f370a36a6d42bf8943789ea5d719cd186f48936990cb111758fa2c4951af9e9d5af83720e7343d64a3975639c1a56136f867b7538c54f00fb3d39b95a5f4ac3fbd01f8c6fccd87d859a25f0c9675d19502edfbd85e92ca03e469033aaff6895920181aa7036e8383c15833f3092949dd7d644928c4618e4c2a3ecee29d46276d1f1200303bdf29601292847bbfbed40f0a008f0fc1a05f8efdf70a26d47f0a60222bc2ebce07e17dd080d646e0dbcab7b6e5de726f29654a29c40856088d08d77e3740302850805eae6a2a5cbe2cdf0dd00b880910131e57f5142e5fd177538567c9121f57f518976fe8bba9e233654a90ab3ae8f2f5be9b2a4156acc05cd5625cbedc77530506058a8eab5a0a97aff6dd54d1316264c7551dc6e52bbf9b2a3b4a94fcb8aa812e5ffadd54f9a142c5e5aaae72f96edf4d15d791232f5775142edfeebba9f262c2a4c7550dc6e53bbf9b2a3d4e9cc85cd5b2cb377e3755644040375562aeea2f2edffe6eaac4fcc4f7a64a14aee95b258a472b920c2337d45aabc6c9d1743497abb82f4b31c6921b6a57aebf7644dbb9be844f15eed29e5c7f6d8afb6b48f0ca5f11e56f7ac20ae1c504a56281ba0f352bd7bfd2f8d48bb167dc70b8bbe24a63d15c94faeb75a9acad9569ad008401b8541657ae85488321d73f64b92195f9149ef197de0446658157da0d8cf2af4218d77f822d7fc2f51782c30f3c5cd78400e27a12516ea8e1b88a9b1c317315374902caf5d782b8aa3d9f172a6ce8ddd07db4abbd70613bb08777dfc7fdc757cc02bafe0c93830d35f9f5b5565cb1cff9f10b7fe0dc38a3a17de8e062e8023d7a76afb4153fc9dc0ee2537e7cfc54adb021c9673583e29c5def20242ca8cc511e7a32ed8a9ffcb720adeb3f83e24a0b7294ff6c0605dd96fbf8c9dfa7f8c9bd216ce83ed73fd45a2f739fb8b23e5cd0650100f98661874d455413e85021840a65f010a1a2e47a1226425018c20a3d3dd440085538c20b4db3119e7cae3f75b9dc64278a243113a5497a7041b2852d490e14c70e09ec08c114dbb688326a1ce5221048a2e860c789ce1228acd084040b245d00e0091c4616479a3ca9220942a0820d6897b271e3bbdc6447e776979becf4f0e2ad0b3d39e54639ba8021747c8a50c1c51447cc408b4ac505498430a588273c5380028b821d894d356cdcb0410413405b2cd9d1a1092dbcd821020408264034c10421403ad88000979b24f9e2b25c6e92c4671ea9d455cccf9ba6bdb471e5bf81137420f287bb07410aea186f28433cd3ef79326a37ece1dd2eba4177ef8e3a9e673a87e4e4276944cd77e1657efc5cbe96fb437c8eccf1398225e017b2b0b6925c253d533bc95534a4314511649ee1255336a90713b607e9b694b207e9ca1e63769b73280c434929edc0f07439eeb9af2f9dd374354db311d531d288aaf5650539a29820b51fc449c3e4a708c6f0d07ec6e580e2940c7a7e8a241ba927639c120037001787b34c944c54e6d20bdd9c7ea5f4265ddb755ca85d7ed1658d51fc5ac7b977d33418dc81a8badcc508b0e06eb6bbd93e6a577af705b2b53bd12d1a1b8eed6719ad9f3c19631595935d6b12643ec9eee5d70e9438309f242769dc7cdad7739cd4b81965279916a1c506b1ed5c04c97da51cf7f20b2df771ce1aaa00f7f169280231b8db73be7da4313e178a400ce8262d0d57493e795a0864cfc7e5baa6f1d74237f272a0a44de3bfb56c4fa952e4861b41cb2792f43a8651996de23bf30c4dc3affdc0f6f38d1ab7f1b6d13435fc94f2d37c7fca2bf90e4ef9c1e0203df9891f0aed514e6da333d4d0f39f6048d5b0d136ddf3d7dc689bf826161118b280b342208d28ffed0619a62100076e0437990e74df33cd7c0df4c08d34667c1a778a80326a7efd4c23b09c4b2a4081c42dc1fb0116b6e083117eb6e881091117d7a80b204118a9e2ca158c00818b221120f20327807104900e86f08189171fa4682e1270456c071d28f10208295384423e60c1d69c1d4439b646676b0d98c744d4447c29a594b1597ec7691f9ff26ada88e29f1f4754f4e8048eeba1dbf1801e7a420c9ba2b312b23d700b28a2f3e1068f8bdb0c1cf745a8f2a0ebe107b5abb26d86244c5c7f2a32c206f5a083a4b4071ee2115cb7cd109e52fedf637a9377b949921b986274072ed7cb0912579058e109225a7844bc60e99f2c48d1c416bed0c20e557e688244e9145e8e601f806387044c6f2a5d6e92e406536c93a2040388d08ee06ad880762d6204a18b326a9c090346c2c8a942116050686208191d0ed77d0b1c3818228827aa109941b13d07a6fc64c34f359c88cef5edba0d1bd0ee866cf3481e29ca255d6e82a4c7ebd180502b738d33c7183f00ccfea4f22a1cf107be9b8fb76abe354791834d837ff1fe30cf656f5d7e9f6d448278c775f93db539c3c4606954f267b2f6f46f2395da816303a1243c228a5577b03fed3d93917e6f68bcc6a022e3e2b1747331c6207e0b65903009e2a0f57cac76b9091220dc54f4c1c95b4907b529630d57b5ca9f014878248fbbdc04890b0724d890e4dec3c68defd786786f5a8e3c01a2878ddb5a7c4765dc091cf714acdcf7dc7352a8a7a67488ec89215f5cb75b676a82840898cb4d90e05c7bb9c911b31b9a625c8c7886a5e5197e4a81c0486024785139aea2f3f51199d80112583970142578d0e356704d6945591092c4a660559985173dcca6173fb662882e7058fed110c2aa9a173f1f1e8421e88007d60f2f08302f7ca496b07eb8f8b022287d01fdb913380cc187e51f028058957af16b171258bc58fec93c61552ee80b9dae0a302b603588123e2cff629cc0aa9e173f47c2074a7458fec92c8155435efc7a07071f1e967f9606ac2af2fc63289a60c5cf87b6c513980feb476479c7d05f59a02842082d967fd50aac6aa370f2446ce4c58fa5a8415010cbbf1a18abb6b888422037014628a1c5f28f593fbc23129565aaf69166382187ca9dad699af63afc6a21236c98ba534bb96a03020b286eb8938b1bd6b8f3494dd8f0effc6963371a11978d51fa696e1cc3200d7e796580988d07f0e840f334e10937bc71e714ec737dee64b5f6ae9a445c777677cbd0043422ae8fbe872a20433434f857d3de3fd49ea5379bbeebd0404ac1938c9f26f851e098bf637e2aceefc4b0dce4c894abfd0c6dd05ed3bac531a18a8ee0eeeeec2766b622c618634fa55ec371babb0f912a0743e9eeeea0d63ea546d7669432ce769d4a5df5de5354aa84ff6cf18cbbbb3b333337126ac82fa5942c65bcc2349d4e1f55367cf20fa589729f0d25a13bd87e93e90d90812bfd59738ffb3846696fc3aabbfdc8c6a67de89abc0163f44e3441efb4ee7ae316686410bd0b90fb86d9e21a1ec904830d4a25b65f9334f8fc0880175ed066db166794b63135cd2cae6ceca58c5ed92c66149ef18f1f8a674c6d2303d3a4ae011ae572c35325c2fe8c94e372669123b75fdbb9fd5b6df1389a3e75e78709b81cc3e57f99b5cd044d4d33b331f066d128fff074b9dbf5f0b0774a588f8b58f99ad6ad694fd8b0e4834fdbbcc89a2666b3e815023af4c8a40734886e835589ac6b1110d04bae5725aebf57235cfff04576eb0ecff8d7998d2f3fac3bd7bf0beaacb86ae6dcfe706aa39b2a417ee23b7faefffc715519770367f45897cb47f0815d1c9e338b4c23d3554521903b7578a6bf94439d15ab23f90668ae6761ecb9fef2e557cd8bdc145604a4b6f1169541624319d8c9634a76c04f8eea2edaa67378ca44c3654ebe4abd749438020e7e60851511c850e92182171c2b53234e507424f28c6c7651e802c90ea2c04fde367de3d3a0b9456519937777fcbee89e8446d411ae8ace8a33b83182137cd0e485e5e66206d73924337bacfff7f4300d93497392b571f626b54d879e57ca2c74e0be90927a5c57bd10d33099bc2a7292b5b56391b3372d6e415e8bf3739ee938596d3728136454bb0d8814d33099342759bb85f2c3786b38faa15ffecea392fbd8e5ea243327cbe8ccdc9c0eaf03cb4d967072b9cb4d9620c2e5264b345982e77293255c975fbbdc64099df6c0a6836fca3f7f3fc566eda967b5944bb11e15364a6db6179b179b5c704fb9ce9be244bf7ba3df81da77f439eef976dd5370f3f984947cae40fc240f8a0da9f41367a94cf915916e5f5f1d9c833fbecd914a2db6d77efb6d1b593fb1dc3e3a3ffb8982f2a9f6dbf6dd5793c2cf508ebeee4920db20fd299e0071e5d2df9e5a8e7a7e7af9d46b1bde9e03b7a7f4f94a0048b881b281eab37495c94ff599aa9278cf8572b80680b0bccd03eb8738d0e4a7fa4790b9f543d2ad54c6553a180657715fff54bf86ab74d4fafef1bd716b5d2248adefb14c054bc0b106d2ee558408e1a1871d761842640b4284f0d083e7dcee6bd77536a2188757299d8572cf71ef1cd83e7eea7c09d7f8771cd854be461cec8fa4b4387c64ad7df94d30a4579bf6fb6d0ff153d7397eea50e0a7ce063f7522f05337023f75de9776b061ea763524e5d754fcd47d6d1e62ab6b539bdad4a6dfc8f23ad83f3cd37d8988e5de3f4cfd705ffdf8a9a059be505e1f1bbe56e27d2153b9dd8b84b40ff26b9ede29c376df3f9d35759f72950eb671a34677476ec79dceed42d938aeea1e07d7f4edbe87742f025f4956f7c4ed9ef9437e72bb4ecaed18e876566ed7c1baefbeebdec61018526a6d94e9c012784ea8093bec406408cb84fd73e9572e41921f1c63f5401b7d388cbee579dcf882d885c1e8b9e5f3018435e23102471fbf18b4aeec1fc94ffbd1870390568f2b0727c80c6e68b168a075c04f14047ea28fe30135fc44bdc3c2765f1262e983db13bbf5b5bf7d220bb27c879e59c0dee1d82e0ac23538ae62a14fbf760ff6dbefd47ede0d6c1e9ea15fe2c17acff2dbd30729cb27fdc4fd0c12ca1b769090d2dfb9f4bd8ff3538d4b5f2484873efdf875eb7b819fe87753b0f49b27526b4da60f4f3a28a58f0257696fe5873e95820739977e0d5f49167dfa1ba0dfa5a84b9fc31b973ab9942ae1a232142c417b55a8ddecdd60b70d9565bc4ac04ff10138d689fc287382a1868d1b727e48bddbd24f2ee3a728bff0bf08f6a31313c7229218638cfd31b63b13623b1362db30638c31f6c7d8ce846e2831c61863fb125231c618637b1636628c31ca538c31c6d8be04528c31c6d89e852976b7c71863ec8fb1ddfd65949273842f82e448f9f99132933950089949d178da154342e391f2d33df8a7c322892cb2a031f59204163c48dd18e13831e286742dba1ee6a2890e5d8f1234cdb65aad2891c797580244e4916243b421fab08c034ae2039649b161a3ad56cb86ed34030a1496f43869e1619104163ce8e1d170950d927b645b9142dc8087b6121d0993a79d78c20893470a290621a07c41b261f6fc56ab15c564002c92c8c264837babd56ad9e03e32be942d79680fe5f0774100436c3f5fe7507f0b6ab377ede750f41c6a58af33839269e8219e63a363a3f382db14880c392190dbef5d51394789264aacdc1a71eef6821bdf9dd638a3cba679f98575ca8dfe517e7b3109ee78459d6d6cd3c4e796db9743dc72717837099ee459e618764ca3fc12c81e24097a96a485140cb5e75178823bc31e8daefdc83c271813c31c2319534a8d35e679431f57cacbacb2a17da1e94a8dc7f60bb803b848c6a8eca6cb949999556b832cbb1aa80e86de4bae7c5d09c220f3a203478172f973e038e227b6c16f8ef81e1341706adbfb17c328087b5cf72f24dd29b53ee2276e25971f87bf3481bf54031b7a90cb5f0ac2baa772fe065be7c509366c2697bfa4635352ecdcd07d54dc040925d7dfa73c0f82d0b8dc64c7094958b9dc24092a37e4c4b8fe58b84aa8dc99cb4d942cb951eca013c50c8644b1434ea80de182ae7b8cdd1524f9c969f8c961a81b74fd2513d9533722d89ef432894e96f0dc9deb2f8fdc38bb4206cfbc5461430fbafe2f31ebe3a72b7ef2d8ba54d830e20419e2248a9219cfd7f47c619e6f6909952353a0002d996285f47c5d9e6fcbf31dc1ee0dd0eb8a7caef7508c28a172848913a02897d3b9f2e76e7ca7ecde54895d2818e8faff36045b04fb240a572e95b92aa43f40aeaa4182ae3ffda1e22a6ec28322a1fb384edbf08d2b66a9f8c615b376e28a795eb1c75547a8cfa613c455fc81e1e67a30a44302008634f60218d2280000c34d090d30dc5e3160b85db9ee0218d2d6f5bf09a3e5aad6c2e53be3bb09a31524481838aeea2b97afe9bb0903278c21610ce9715567e1f285f96e807a9c3889b9aab170f996be1ba05894283bae6a322edf97ef06684789121e57f5ecf2257d37403c4b96fcb8aaaf70f9ba7c37403f54a8b85cd556b87c5bbe1b20d791233eaeea2a5cbea3ef06c867ca1498abdacae5ed73db66c4c5c88a9117158aebdfa3980e2c374d8c1d3744d3508ee3a4651142c422254b28be2cbde480f4f2f2422366bb8175212626e6530591037ada57634fd42aa0a857b4913a9bfdf77df1f572f5ecc06e870c238037e5004631d9680c5e55326e20e3ba8783039bf2d34c6600031800bb76e8aa66a1ce441ad72cb8caf4d2cbd191f3b31c4f089ef1ff18afc8f586f821c76b793bde0e3c9c1c4fc7d321c2eae019d72dc922ca3f889666d79f07a6654a45548fd727ea935a4595d2b2fbc5c4553a52366cc446b1ea2402b527ee983d1160d508881caf4e7846b21ff134e81ac57c4663b880001a4da1513e02834f0e8e7c22cabfa535c2c2e8e7fa28681474fdbb08dbb3a372c7d8dddd1de5ecae2e57bd47a63298e2db08e04d2e0061c351ce4da572a610b76711476aa61cb9464824f84dc32324bdd27e04c42807890bc6c3e11932ba75dbc613c234fe1e0fd73f04afcf4655f04c8e51ac884df9a9a7f6ecb8e12a580a7371fd7946d92d7b4a393b24bf3fbf72a6463cae9dd79ddcbd11432a88510ea3fc53b58767fc59aad8fe06b51f6c5892cd78463c75c6357d2b19de0dec0961ef87eb8f804a4343a3b522ca5faef257b28489138e415b400d4ffb6e78c076b82c378d02628821067f1b35f1eb2b8327bffa04cf3814d58aeb30245cffda936347b1c8a3180b59cd18a70d2fca1825682314b70df4f183b5c59af3692d0d876746b1ee1946468c5c6c04ebd8514ed3f8a378da26fef68a2b4a5d738806d8c08e5c3939d7488eab64c41199c7cba1965167917978ea959e1d2418411843c0277f1e3ccb610ad467043b4800029edae3537b76c415938057a32a183592c2638c7e78368a0561472e3f8d62a3d8281663d5715538725d97abe237c08b1f5775ae60c3da000f8727bf1b9e81002fc1c3612bbcd6f577d9e1830d473c239ed192d1cb67d8de65c44f3a7ef251ac242bb13cadc5504657ec9872141b393102424b56e4ee76051b967eaebf8f78fc0a56c5308ab92a35ca192d699a0b386b8319e5c4d5c8b5cdaffef0c455eda2635055291556839ca851e0a9b1b0f6986efd81a95c549f9c916bcbb91e513dd747aebfb5c7876bb8e00ac6f520d1ad810deb6c16575527a2fc5d74a7cebc9ceb56d8b0ce6e9d5d7fadd57add9061a318c38ec894045d9f4b662e3039434821064b0ed7d4b8fe5dff778f9b942f250f1ce87368074b5057efe66eeea69f4376d3d14d951dea27ed23e8bf514a29c769dfd4f1939118796090d1342d4a39040bfbdc6f1beef2f3932a3c97e3ca6b83610a0699b087e9c6971c37293729372937f91c6afa197016057dfc60d10fa434c62b9565c28dadd05260947f91368294e327ae51b5cb4fac94c7f0e923aa48ff133cd3c3332f9e69281a35031278e2e6852fdc7e1758d5d1ab293fcd50a381aeff8957aa46b58ba644376c97e8d6bad58fb2f525a9d7e4aac6f11856350fcf03ab98fdbd85c00a6907ca5644499ceb1f723eb07f452ff031c4ec05468e748b65043dfce4420471556a042ebb810ef8c9b5184d9e8ddd1b681d9f0dd4919b3cbb83dec06e2dff1d517257d338afc1e019ff2834167a0a3b3127a788ebc864c58fafa6996e7f7cbb87c57b714d4f3fc1ab06638c27d767311a34201bf69449650be910dd065b16c56e3f5f0594e3388eca64da565d5ad646c470fd3dc5279721236cd82eae91d7ff729325466ee442393a7edc959234e3091b6e3e5c7f15782847d4b456810ebe49bacf80b33ad0c70f56d7ae7675f7d7174f269381a98645942cae7a47d623bb80b33a6f4233f553ff0603a9e73ac908d7bf46e6c8e0ccf113d7b95cc52e3f5c6380eb751a29727f167195fce98a820d69385b67ea18f153ebe8e8e8c448ea894f6a955ffb5c7e8fe2532e7ff4f128547e6241726a1b9594466faa6d94a35c575d9ef4bce8ed7157bd90488a44d15bc41e87442c29ef131d1129b9fc2c3b472ebfb54b2eff88a745b6b444ef169f59b932b3e241bc1504730205e6244aaca775ba481b699d2ed2473ac7a9005dfe28a3622508046de3f27b8dcbe18dcb35d849aab67b8c524e4d6a5af4d6da6394724e6d93db16bd3739356ddb28e53ad975d1bbdb28c7755dad5e488642d13bd455cf0b854422162bad8dde36e4350b8bd776d42d2ed2c5257abbf017527ee152c96318933499a2b7a9b6782e211d7d4994e4f5f712d2f1e27529a4a3af6518090313bd61a828e6860379d35ea828e686defe155c8ff9891f01a51dae999f852b5ca183115be42481add841174f6a20e5154487f6c82359bc174c53db688c5c28879453086eca94296de369d1f3b6539cafc9c45594e368dd91b19b519b51da2682a4a6d140e61959c4c66d9bb384f34206f7329bd23625214c83056dfebfccaeffcbcf0b15576d75a71a7155e8e1b86a88ab726a111d57693b946ea6d36bcab853b528a526a3f6a178467a4678a9185e68d404494de32fb2177af52285087a5292da664e691a595cbdcc224a0abd7a29237ee8979b536ca65cffef84e299ca22858da161bbfddc0df9a5452c8b14b6def0744f5c23baa7ba83f9d3e5704dbf7fc705ab66143ffd68c1277f1beb7ef8ba1f2d3a2a338aab3a2eb8fb61fecc1f9e619112bb4b5c15f40deb8eb3f8f08cff8b61e90fcf78835d0ecfe0dc28e794b1b21c40e6c4276fe155dd61947fe56e8c9e8dd998abb607e2c412222fd8112f296671f5801f7e3004224a624888b0fce74f5c0121421435705521a70b22bc60f94f595c6d404a1640689161058a292cff0ecd2a6c387fa2945adc445ef7ccea2f346931d4d74fdb68601502374884eb1fce2eae579eeb1f9e5675c7597587dac05e99b94ad3f1d7583c8e2baf667eff8867e81810bedcc049b1ba0f616ebf69860b6cc3aaedbb9f56ef63d64cd29d7c069c677595b6c05ead2aa19fb3e697c47b1ccaf2626af0d13d10168f9ff8765fe5794594d79e88f2f7be0a8b28e7ae4cd221b1f2a5f4d81e453137b1c17003b7bd8f593244c3016e83d5c381edbe7ed4e49cb3c8c711d5cd1d7b6414b509ce28b297d94b199d8ffd39630c21bdfd6137e14ec215d7df9bd99063a22b580643d3bd1cd25183fcf4d5eb3bae8a5c137178c657d1c918bc8a42d8492a85427ddf8c19a3b083224ed8a11c118c3d63d856bf28b5d6cea025e9c79754867aac16b558e4423abc6df3b6aedbb66ddb364e8b3ce28a999959d655162d6e1b0b685f74f2a71ff62b0a61ae61fa8315c2148bc07125b6621057cdee6eab456edbba6debb66ddbb66de3b408e5f6cf58b75aada9437fb4285d3c9ec9f11f3e28a2fc434f58d1db0f234ed00b053e5fb737ed15a5cb5abb5b3bd96fea3811b9e0c98fb7f895655793c762c54a17bc76714daf629138c4516e1385300f3ce31fb611ad135745f08a7bfb2cefcf8cc404597c7846f4b1cdc123f4385c4a0305c00b7dfea202ab1cc0271c7e2231695162e38a4744f9db68fd8a3b8055be053ef99f76d0a82d18f12bae6a211805cf813cb124ae6f4944df32f4d65be76b96b56f411f2c1f027d68414e1061fd8861b07ab03d10566d2f94c486c07e4554f744943fcbd7b088e2a208ea97c73cc635cde9c0c6b733b061c471b2454f2cd2367d87f829469c508feda0ebdbcf2ac054ee84e938aee34c923385b85008f4f183157a1c1e71220ec745948e36796637e6b82a6c5112798c5cff382416017946b9fd2d3cd5676882c25ebef425d047e95f40ea934a85f487c658dad6da310aa9d55afa625a1ee681b05ebe98ee4d0f8455fb8eaeb3b0c41d16164a69cb5743e961401f305ffaeeabe1e54d15e6ebd9e7ad981a663ccccf007b16c33dcccff8199ce94d305ce869ccd46232b59860dec56b31996044dc738fc343192ecf94b6a730114f1879d0953e6651a730988bc3fc98724c3ec4621ef35844b9c7e28a52d3bfc74a25d0c756e50a4cb07ef8112a4160f5603e1056e83fd753a953e8b2eba1fb445026e3e9e6c0b06edb0c69df272e9443fb394320ae5b822f04e2ba520630efa304d20008cbf42f6f2afdc72b6782434fa9d7211dedc4c27c3e64c0041c3c61c13c95f1bcfc8c9707c29af138bcf4c5d4508aa9a6cf5b9fe34494e95d00bde5c2c77c3135d0f898a7013a4e0c18c3bd0ba0eff070337e06e83a26d05d95932234f3180da2326a85f3585c519808e6310aa3300af3d88c19262e0a1b5299c7b62536f41f5771ef3e2eef33bee5492037e3731695c5d526a32c2d2ea34de6799bccdb64de269bd132c3f42ede8754d6326386a93ab1615bee27cf6c8f238e603e1688714487d51f5feb127da1f50f7da1f7943e03ce2afde9fa4be9635687e6cb8fb7520c8f9752a9f4d2a512e8e307ab244ba59752a9f4229399281017272da156961b95466529453137f2863fae7f479609a443c2faa4331b7a9767d3f0bb5b662f897748ec9c5ec8c7fab349763d3ccddf2961597ab48875b0d24d9bb5939ab66d94f27327ee3a967a25cfb4a679a11c24306c7d4b2ad9c056a6cc79933cca7677f79f9e8266966e09d6c1d0ebaa1712f5260a815cca42fd529ed9384ee3a68c9cb7177313ba29e82df8ec1729c004c18841a9b526d3ff094679e67499e2aa7ee7895da73be4fc80e5c3e57fb8911c8860f5607e685b44dd211fd86802feb925881770d6cb97482552a9f430a5d2c33ce98ba9c1f4a43791604a51480a8b2b4aad3599fe4f27d8b67d6509c3863fffdd6b246c94d4e3400a83718dbdfe30395cd300af0617d2bb3c1056cb175343cbbfb43c1056257d3dfbbe981a4a4ffa12d8b318faa42ffdcb175303ccbf3c0ce82f600cfd12e8ae884251d002ce7af917d07340d7a1b0908fab68cb7b1a73950a6ca0d7be3f85c5d5cbfbd3285c28c7080cfbf2cbe7acb8135794d2b84377e2ce277a8e69e2d39d68daa974e7ba952cd2dbaf05f476bf435f5e4861eb843dbb2e43eb700dfd5086907f38978f592ddb8bbe900a74f0eddee533e02c970f7d2a80792ddbbb7ccce2508fedce7756d7c5f068e9de5d5c1e8733485d3ed9830b30abc559d1e5fb2671017dfc60b5801c5111a4300a8b316803621d4608177e4295497dc9e85527eaab59f5f35e7e49ea8b6b5805dca945b9d5577562034ddd7554344a9a5ceb645d73989dac6d524de35f5f39f4aa3a91aafdf9944d30e6cc899e416d33c998330b13c649e1847d710d6f3ea7cfb9756bda0eb60ed651d151d13587cb1d2cae6a8b3bd9b6755d954ed651d1c118e55f5f2dd7bf3271a1c5350db8feb508bc9ab0198be24e2da0f080c595057eb4b81ebb9e8a28d1e5a4e08c60b50f535ba434525a5fdd9b11172d8232097dccd23eee5297959ae6c216260f7dcc7259199bd57da1cf21c5ea5e5485e005f86b5f7515c1331e43587370fdbb4ac4ad3bb1eea04f04b848ba50e87396f7c5d4e063861eacf0c3f21e08ab7a5f27eb8222ea8b09819d2ca6eb175383e8eb8bc02e088ce90f811c513a3c621aecc0da022b0e1785adad17e7c4ca0f3bd9f5e75e36acaffa5200cded02dc0ec06d81bddb872db73fc536f3fb6178d5c15c58c5d96cdfc328be0fd802c60ab8b0b89ab00976b009eb606107a3cf5d575fb006eb2bae2a6d6d3634a10cd7bfb67c5a2d9ceb36fcc46a018de1511f08eb07ab555f362e8da921b2baef9ba4f64c27aed2eaabbeb62d6af2555ff595dac02bae2c4dd9fa4a4969617ef2a744d8097355585f507cc2aeff4b6b9a7e172610ea06e0a9ac84485974639552caf0c4751b2c36c4b0e1d409636453f4a96935c6b86d26534c099565a604659a460601326d73e354ba2113ab112a378fcb33fea51b6d6301a6f167f11538826c3879ce398b736a5a94dd72ced99cf5b6c9f8b3b689e027002c5cb79b9539b03cd32782e1d459c2a4f670552acb84303d950a2752748f68146514abb35114868575b6456dcad770d05a383471fd473cb527c2f4c4559dd5fa0f13b9e40491ca1905d1ab1112983795625c2e20725c2e575c8d785c40f0fc00ea95999c9c050576449640bdd2a358448dc618054d61040667310ae21abf5444a200188d214380d4a6d61af1f4049967b4569dd532a202bcb6a93d4db323a26a19bda240587bfc8702019f7ca8448d7645450c95a20119000800023315002020100c08c4c2c17840cf74d11e14000c7f9e48644a1a0ac44110c3280862208388618610020831001063a86aaa02008150ff5b95449b00ac481faa7e1bee92008019fbef9018c2131232164ad5a9f9553a87efd2c47babc8c4552939db321d0de8cbd270bc7753e41388273f491861de496c61f2960b6846a4e87f16ee55134ef9097f5a58fe32bf34a0587090754bee0f93cd698a72c4bc325b0ed4c416cdb9120caf7d9335408692493fccf966e440e1c12fea70df3c8fb53d1212ceb124acc4fad3b705d62f80e629282b0fbf512aa9ef3b84b37e0fbcbdc4cc9cfc060e8cc7646c6695b66570406b18f38eee4536cfbe8b33f241cc5167fb8356132920d499ebbfaecbea1d0897047d891a408b3e0069d9178340fe88738a584f6427270a5d461a2430cb6ceb033ab0f34ecd64fee0332e335269450996b2fdd5fdbde4d23fd7a319acb29bc72be98028db280c5b0e3b90e3c76c9f2c4473e846ffdab85f856589f6ecbf3d1fae373a63b3ce19a2ed1d5f931cd883df2abfe65b8c132b95e1c724c4ad5258a8cf16365ba800768c9402a400f0e43495cb4d4e76e5cd438d0d6233efe79d155ea0b24934364e3225cac647eadbcd8442205513cda8142d5e4e872249447ffd57623ba41d013e7aa69d5580d7e5c9e0f3c799e08ac657b3d98e9ee8eab5c910f63ab2ee2f0aa14ec513d531fe958d8e80c84cc0f16aa8782db6f2abc0dac1c43ff420f33b1d3a1e64ff0d222d3863da38de2c81ff13f874c16ab3e42d1e5a03d244deeb12733c67a82ea435ac56c41d36a4805702f4e110a80396e0d6f4402bf802f9e2f9888a260f24f9495100c50f4f2e2bcb9c0a75cb6b433086c70e7f5453cbaeca8443091ea01b71209ab0c95c9f53b87bed36ca323f3dbbe00dda7a1ae051949b5b6d9fde59d89342ba661327df09634cf6c3481985f05b0a32831ee712d1ec118794486947325feeec802824758b206138bca4c4347f2fd1303dbddb09fb492b3c2eb00e3a1a6562a4d814b419a6337ffd87a4fef20226e613cf6fa4caade1b40660f0a13fc8fa38978a03ab18fef0b01102e7edb5867b12f04a204afb79faadcc5f4da0735d7e1638dfc5234755a2df5a97f7007e22b5c2156af3eea102da83a54c5a07a5e394a9a0c1bc39ee08ea61daf6b645f9b770a772ddf3500452100396c7a1a834efd0c1df2c73297a8f410144c4b3bc086fd1403658dd73dd1892f900a53ab4ad34dce86d317ac4bf5f51f9992b1f8d7010d9a747a5fbe02ecad45d1a09fa92b217179137b8fa50738248421dad0b32f329d16241db7661aee526a1013868591cd8291911c55fda9464d803c8a3fb714bd5f049928cb230ac045a8ecc27a59971d7a01488f1f2816598376e93924fa0c372679e5ba5c7d73c605accdb6785f2259e6bfef4736242ea85f14d32db504cddc35ce49ee4e3f722e9607c9ed7af6fe94cfa909baac147f0d957d14e7d02198e52c17edc8f09ebb8508f070388686f0297252e948ee4f9184dfb0bc7192582dd8f19000ec2659f90b77c8859b60c962f0c5683b7e68dba4e6a316067d726d0558bec4afd85cf465ce4d3f0e66575c49ce4ab6065013e562e1e1853db4dd370bdd54d90622ae65e0903e074de6e98b202e9ce1aa821e23d10dbb8c7e53fbd8d3d175d88f813226f71879412d2a822107004330c67277636d1078316a5f21fa4567cbce9f1114c8f8a84ef6e5b23ba2210cc2470b9f80ef511c12f72e65765173071534d6e405a42d705db1c21b222c133541d11c21b4ba1f5764a8c6bb34f19b2488c0dc1b4a8a567546238c3bbff0a3455810e8ad6afb7d2307927d41485c799a248ea60b7cd85bf1d94708ecfb6e725c9f39965a0546138c012581a6179f4a96a6bd0ea40726ac40c9c327ee33addf8a57f341771854b11ac8600dc1c0b27d495c0ea1b4a43fe92bf50455c1a875d95ed8469d7b96bae1e283272e8a9efe05ad944985bff6ef6e7fbe0fac450d34204b6763bea939658051e19cb3546fe8b3aa9dc2cb70fffbbcf555190fb30327c0da8766f6501d4c154a69e9b2320132b98aaa661c90fb0cbda9976b3ace59f972ba000cea02c91e91f70e913940d4120aef7b72ce73ce5090136695cc9bba0a3a5bf3278a789dcea7ddebaf4e7b0486766318d62480f4ce670818a41329466e2e5b75e80ca6c046e854340b86b7907befc57c0b5fdc6439388f3c8faa4dff627ca26a70722cf3bdb722c20387de1563ed03510cb356c447b32df1c013f10a64ddc96d55b9634a82206fba14662f807e4ffc60928b516916dd19372a32ac9ce4af5b0a44831257789afa839227262742357ca3037d8420fbcfdfa0f764bd41a145438aab7c44c88fcd30a5d4d6e9f3b10fda07d0edf39e1b80d7b2ba8fe8e36626b9c9500d78c0253cd41086372e25eeb64fadda00671d7b099f2fce92384a8709a3df1b878efee5c49c13df319a27626ae0117a000279b85b61cf282d92cf03bceca81551bd1aa667d14da9ad88e7642f212d0f948b4458c96d7d1907b224e4469616f5fe70a0a276511ae2a1a5253c31cb3bd6cf8ac826124482eb784a6c3c8a5cdddfb0200951add0b35b969e54c9ce2ac6403c97da4507e606f5b042694086847c89823b43a42440ac935671de1de910e2dfabed047505a3bc90cf8f63965ed2325bbe5174ac9274473d316f57308f790de2ee82fa01a23f5516988b20a5c934c7a3f21f1d9069fbe1e92b105ce440fdb828680b343440a2c700bfc54d3713646fae89b70fae2f8ab6cf01eb80333cda05f197a4e8a6e241d211bf416c221e562f06a536b8cf61b0d7f831055099b60653672c673419a54d04b8fad5dbc3a359d7408dfb8986a94c21fa49b7bac75245621fd54465f58c230ee9b8b4df5795b916a71a1721948a8fe6ec480fbe4c4328c2f09f46d9d6192b4bdebdeaf2f0dc3f89463289bf3a6b019d4b4ab64a4b44a13659223e22839deea01403861140952640d89a44e88509ce1d8cbd69dc97049a869436f9c5c6584c06535072643cb62e8b12e0f4a296caa146cfb41f7f0ba82990669d8381227a3059a8c748248901c7953ec31ae70f38808883391d5c3b9bf5a509243bd1ac945baceba580e9d1e082dcb181d9595ce07ea04eb323c0ee6c9bcf8be5fc89e6760a9fe8cd53f1f9e01d38826076e7f4bf20ec7c0843d179cc5c4e43caef9a9df91e3a9281f6ebb3c76619d870c7701b0feb148d5ea6c56ea2e05a10d9ac3f885070bb7beb4e49e6b37449f34fc31d0d61dca461c5cb61fab542d284f83d0a0648042a2c255ab91778c5387ea708257c3536ac3317c82f7d944373186c24d72460a5478470c3ee018eb616dec95ae9a643270a852a4d27bbaa6356f4e7b091165baf87c71c464b0bb395ac417db0e39bacbffdcf865a86dd5fe09c0d05f97560fbf62eb0574a0ff9273f108d361a9a787da6f88155cacdb4eadf4700d516a49a6924154037d9c888a5bc3753df9db428e556f0de5ee84c8f7c45f0d48209dd7ca60470d2b5a0a045713b653fed00a6ad171bf35bbb660670ae34e9af7895878c49af7d7828c6fd13fdf778feba428677a57548210d8726ee92a7af6f728640c0608691d186104b67b5c996de8b26f84fd360019d521eb7ad6add2865bcdfd080a3d40de21156f72d8fb35c821f135f3b1dd1b4074d098aa82215e2cb5113f3d6cbe74b9020352f902a14ebfff0472ff5ca16f5cc95a139ce0830f9a51db78680b0d3d6140c9c560c043a50680de57dbcec3b78c170454ef236cec5470d9efa4fce8e648965abd03a19f0dda87834b80599991099281665ad9efdf0f3e321e8f254a42f8c53d333b31ffd51532e076e11eab2002e56d312d790e12194bfb9460f0043b908684a30f0518e0d3549c11a803ee5a4755ab529ce6877842c10bd2e2fcf5b5980683c684528f99c9592b3c08f19f57aff23d34209d08746d8702e959cb8023a7850ffd71dbca80ca7b67e216f1893cafe1906a00fad1cf514270642c58a20ba2212123474bf0431783e1cd10d266d9cd2f1b3b39d34f3420fd409a068030e2b419031d25ccc885afa163798810b790e5b5810c65a4fc8f221fe4a198e94bd4c4ac6bb362e545e3a521a3e6a8155c34039b0ff4b4a36a2e6c4175bc5873aeed6a77289d555e3a9fe26647d3d86bf81bfce6b54d4d0ce0c8690639bb40b2270aff6af0c107a6fc11275dea1fa3916372be63d273d64c753004e57baec774ab9c906b84f640e2cb1e622edaafde2924391bd1be7e3b9611449e26b77975b9d8631dd79bb26e68fec4d048495cb01e390fe45f2c6754472b32b6ad17abb3e1a3feaeb8246e394d9e3df3a142850410a384c5d2c4ba8047e49086f85f6f132f06e50f491ff89c98f8207d6257407375c361c95653f103f5bea540581fccf0bd42ed220e4325373efe8e9ec97b33c4b9e8e904ac383c872da55638d8ac286eff1f562896fbe0236e856e800081092c1084111d454cd011ce548ac4fd9d748dde178cdaa4fd15d5b2143015ed37c73485d8eac15712e2387cb35d227a9881c1bdd8f87e1ac64c34861f768935f422bb90fcf8f545579602a1b10b4799f0b88afb40c35e4712d9ca1a905a1fdb3b52b51471640290146380b3e9a48ddbe523f143b167d59028a86be60703dbbb2cd3ed6ffe53264a16fc674ce0b9609cfa56d149467062bfb69689bd85027965ec7a9abfeb6fa9bf9d74c628b6bf46d9be040b5c6cfd9134958df69463038d843583689950b08698b8f6ae2662efefddc97f03f838401df2e0b43e47b6712f676240275e10c7f0c8668ce57b4a9c70b90e73f55db0a80084f03ce5c8ae3ae6e75954bb064cb6b19bf5b83924cacf6e96b3b7e3fdcbccf31a4f14fb1f68d7fdd5f2d9d22286b343d2a5c8d93193dcb8b5a5e0b1a12100eba9e51fa71daacc0a9617ef83afa3f17d31137f15108a5b89af4fa210093cbc8e89babd574f7227dbb8b76c681dd18e90146f7cfac21d509502398e3523ed675237866e6278db17bbdaabe6f3deefc26440fa2a04306d89cd2c3d77db084953c774c0ad89ac3d0373876d4a95f0d8fd27fe83669e1a28369034b97548e4582f20498d103d55a75dd8fa01942511b54b8be58f5ccd9bf72ef5ffe6e214bb42e3f8928f53b002a46f44db230223a5feefe8fcd88df08cf12334644b08be99e2b0bf63caec6a483f6759a178ad2045e7f6138c9fcf47d0500cb82b071b0867fec3e62e47f3d76df1b0773522728b025c22560e0b2b30e30da165a89242e24401ed20ce331d36d32eec6d6b1b338cc2caad12c9065e819267cba5b89febb9c9da1891711917e8be1974db84f189cb68f016f96beee7d94289e35f02535987f7dc236b1d65e6feba2f7b47143d434b2c32ebd919ee41ab9ff28988fadc40047902cc08fdfdd82e5cf76b5ea6f76c661481071151a13ac9d9d9a4f36bbb28d1a1fa2b98c60b520f29ede1399121a6498be0a651f5bc4ad78bbac9d88bb49bb6f2f00b2a8d31071e3bc029c04ddbf1db8d2526e18b36cd2d291192bddb42346d0ffdc2295323ee025bda4795edb3439ffa090f58482db8fb3855a0c2b14e80b51cebe1c7ed405a52e65ed6d02eefa4cc4436c9d8a67e606c04759798a88da64eb803534348af58880b176d434ea5d05ca4f4ddec50ad494bc792e14b67c8d2a26ab533ca825e74d64e6f452bf075058e41a0193dafe002ffe54c85a2af355600f6eb68813913e47aaa4f67fdec63a1cdb98a3f498004f978114809347938e9200d0717ba88de63b45f821bc5126fb2864c04ba9ccf668478063454da59bc9300a2f14cd11acb0c1970aa8f912078466cdd11e5ef48515c0d05bf2df4ef8c8541a434776a009e62e10bf0240f6912e1efd8dacf0c527fecb98dd58a89ac3d1e3443e3b053441e979b43dfc20a67a4dcf6c83fab322bf5a6c75b43c9cda84073ac9d6013173c198286430d2206474bcd63a40a93f58955f452b1e7a3a04b4d8b0ff49170d73d2166b6ec4707831a6dc2f5959737406cddd3cc0645f7bcb697fa6dca4b86c2af6ed60f70746de36ff3db9d7976d6342c3cdc629ab0a070184559c90d5d28d953db427ccac2cd49a0fb11227d9d2223dd527b7ac6a58425472f66db8ec6910eb629a5065d8cce4be3a19c37f362a8bcd8f20b2759c858245372aea7767235d74a4eae643ca9922544ae8393933f9b977995cd08d145421f98c305f1b99c225b27569d10429a8385356ae22a82893384d6eda80320f04fc9be3b8c150393ba23265807e6667ef45fbb249e98d19a410c8f33871e5b212a87f361fcd52ca8b327bae4b38791d90c1df1e3946bea629da592c37a43fc97e75dc5dca4e966f476637a4bcc93220e1d95336a75d2b2b820d2e26bd11b98e20cb39415cf306281fdf9b07c1d23c2342b0259bd7cacf4b569289f0f2787eac48654431cab0709eb130cebe220f0b263390b633ed6f0b5dbc75809a4d04945ffd73e1f2e6a87b909944c3a76d5e8eca3fbac82e15e7103d43c190bbe588df35a9b57476d4342b9e4781f53733b82134fc515b812fd7798b3424988257c1ccecd13579883260f7b187a047e4466307a347cb60749e052cd58d393eb988199bc5c064b165d86a15b36354f4647b801e762c54525062d25f100544524c4a234ada3989f3ea632a2d0b5f11c0007f8c537806c2437970593020badb78d96264c7fcd3c3012f33eb8ee1024d8893eebe43a42e06d70d5138b5c484d2c5ec4b0819e33e3c06e6af57259a2c085cc323b70b91c7e90f504978b7213180fa0374b364d31e176c45a709ca51ed1e572f144629b599ff34717d9ab87f9d2e05d143a41056f4435b26826a572c5fa7a88cfb50c612b12610c64ce40a7014435c2932bf68a69c239504eeff104fc48c1a0205f6da5d3fd60e38f6742446c5cdc9ea35a0a9875336d6577396cb6a808338f292c03cd411f66b0bf95c96e8430b77365be209f3a414473c6f078127ecf04afcf0f277ce6d2b9bae2d7b3db8552752cbbb2854fbac1e63cd5828636c2325bc14cc4dd796cd547b46533d33100b0fa01fa4afc7b85c8d0c17ba23eb80f029d7f620d9c7168acd13259dc90b3b76f6b04484d67cc3250ffa132036769c8628a092dd34d3cef15a1d332514b2407f2723d58c62c3d0fe04e16b5b6ee26188e393981038f4733b0e273a519c57655e29f4b6602936f4a1dfb5a5144872d31a31512750a315a8980e05dfdeb5803fa281951822722d40eada580371609b1586ad2f85942dd1a21b18ccfbcde03e05de18b8927924260330718e81ba1064650f252295231f01c546e847071190dc074fe714f4d71289543bd3abd9a6b822dda04134bd684d718a5392a3cc7c5b4130bc5703fa3acbd432f12f7bab0c0ff968047420034bc469683ec33359a92da72cc8a7a84916014583000f447be8b81a1ce7ec48ab118aaeb29f35a7c567ffbe3b5a46a73674424802abb0e3882b426f747045b27363373a7b52492cae1d9d8c5afaa399e5a13f8c8975ccefb0f64e2961aee1ebbe108ab7d95dbb4027daf6ff00cb068558aab38a3933262e2e3de42174cdac09faed024fc32653e5085b59067c791f8e53d3b9c09e313f47d236b74d97108c807c5bce5707467fad5bddfbdc14e22040833257f964120404c8ce13f395bd82ec903704e80febc35530dc0c002c0a42db54d6c07b847005a46216fa6f3f5829d1d1d8b569eaa4683d7068d0634b939a4263f33092dd436b968eb107b69e8624cbba01250812ef84c252a5394a0f9eea44c9361bb2ee2a981fa33a24ce2a4d0ce4de596192eb49adce0344f0b1aaab99b2cfb7afd7142dca23dafdac4de295ad1f8d9d3ec902df346fa45fce139f5ac8dc8ddbbedbd56d50b8138d168bc470ad98c0ce472dab4c39fc97d04cd9bc368961c3475fdebfdc45ff2722ceb8590fc4fbeea21c511f4c217ab9af87b7a011bb0d0e50a5d3f4ed5db06b5dc5e327eb5fab409b5bab486dba88dd0f4a9c6413553a550e44b7c5101d158666743473383fd703e06ad105ae838446e41ecaec1a40ecf5a0ce71a3528afcd66c2f0c4f1e401edd764d44ac1dadaf5b382659efad1a9526479a896b47c289b28c6257c593d1150ba5f48a23f59e67122bb9afb679d5821b8f478f86b37c4ad045d7628b9e0792b84c42b2f74403f3ff52dde2483ffd212c1f041e1b7b67b43e432150b8ef57612b1caa622539066e6024a33bf64825ce6785c6e9e2abbb5a21cbe02f0ee9f431ccf856b278fe6cf15ba41cba13e2af6f72817a7a0a323c28ace48e1294ceb8b7626fc4975509abd2f1138413a3a869ecf0936c669b5144c2a1a46f7f6aeb93faf4884ef958b10305711edf726900846132bda7f990162922e29baecdb2d66a45d983e613dc612ec3c36acad7b32df78796406ed37aceae9d0583bd4e915c024aed33539d8a956effe6f62076ee68e61e60122163f331fdec94b83664475263ebdbe589f5d4d5c8ecb2e4c2c4f2c26f6bd29bb86e68bfd5cf19bcc18058e0e3c11a87f30fa64bb5ef79fc3ae732744dd2d9766a96524bbf9bd6a725e73a377b335a03fce15e2d3ecae2049b3cde4e41bf2e8cac672acb3992c08d2f718ee2b7406bee53694be64e5fd849ea6244e2c304beab133b175dcec3e9e642c5c1e237d56a52b55e53d02e3793b7dc392f9f511a2a12de991ef87d90385b62ae4b324d9128aee52b197586317984eba4253a409728449eee54c26f99bc009161c75b9014d8dc9e14cdab24cd0068b4a2dbb8cf3ba50754112ab29993d78abe6ff9507b507b588006882d333be4316bed0d405315c5b3e82eda6050f3bd4848bf12886f8864c62dfe260e3857e0d95c388bd2d5755861e7e3ad8a3781dc99c0066366e0fa580f8d5bf0e40c59368a9567b2d1abac4760e8acf5cf0ed0e966f0d3f0feddd383c9e3b5684d4db686645aed56660e14d7b7d50a0a5d0f2ca0dfa109f331469cccb3bd537b51f43eb2db6266d0bd666b4bb9ec74944b169ab57441626c2d2530db9675b5e9b1c3971134032851dfb49e55208f7684ce7c7d420c323b8be5f679136700a5dc4a489e2037cf41e8af93e097684822b84751cead21824c6368f0b9c7602b1304297219a5257a36091279f778f198372cea7f4e13ac79ba74fc26f01e5331a4bb8dc821cfc9c994bc12d2f406c0ca683524ae14aa606656e817f19ea9b7660742c6c30e47967a19b6984d1ade8500e049aa36d4ac982e1834432a01fe9dc335f14f2e9a292941b07a4a66f86fc25da0d4ce3a726417fc772a5060aa1aae072421b44666dc8ea8e83c8e87da7caecbd6e115c3220f95ae221b812ab88cdc2cb327b67821806ee1e0d54704a7608fc892de7d4cc00b759c12ffd440b73f2870482ccc303d07ea2653cfe3d43d85ae95054d56cb3d8c441425e15f4ab2111c38282048ed4c9f69649a8efbe9ecae3b983f39bf297ea9f97836160fdde9e83d7194b990d76fbc040fc61659746a316edd8b11323d3bc07a65b4ab79db0279d229b4fd6491c15cd4aa3ae648ebefee6160b079b2232408418b7f92d612a52b0ed5e46034c4692ba07d89c025878405be22a2c95c0361d35aa729ac1627663ba76095ec413e0440cd4bee46bcf8524d9df5a1653d09158c74084a3ca81148bf1d412b382d5ee9c106bf72f203585229fc8d6c2fd11fac982b9457eb1ea274e4588fbc574e117ea426c8652f2961b06fa37e73e83c5d2629520f52709b9bc0fa30d88b5fadad3cea680ea2d88a8d2b98fa14cdc8ec2fa0475237b88affc3e18c20848790002e10d8e242f844f9b8bdf7264ceaa63723b483a7614d9727e913343b45c1c267e7b13e134047ac4f53b288a4a943b1090c4c48efaba87ba38812bff4ea20cc152226c48b592fe8eb2040622e5c7443fdd09dc00919342de752cdbc8540f6b9dd3dc90fc92ec31b09a7e662a3a662a0a14611b4996e12d32a4867cc12cdd06ba3e14dd70590d2962daf1f407a729ff369c099c296e1197dbf061fe1c61830e3fc0273a587fd72f6442ca4086cdde70b08b130c077b4bae3d99ce3c281a6cf32ea03daec11e468df08c22c2185d3284c9f164a568de02431c330f2a5a52db0595143bfd0652d68909425e9f9e21c490c20784ea7716ec2772003d8a8ad8a6e8ba85143df6eebe6e641af7d95f5069c1603806e2a153435420e73ab13fc81452d5af0f9d8208dc5b0b16d1db70a65ef6920824a3b8ce91660f8ebe91cc9e339210297d34c065e3840a85bca1660eb040220136756d6475295fc74689d5575699c5556e50f869c0027305b4330e74be5e7c3218f8e8b350680f20ea2fd0a61dd5c1c09bbb8f0c0ab8a6d0e79ddd966c8507ac50d75c3f4a08c5f9034ba231da691daf790c2360a47f91f452b1919a42fd588e224bae5c95057ca44b76be726cd679eae47769985619fdcaa0c1eed293ce780493ed2fa5ec6d7caad4e960d500d4efeab2c4d959e184610350fd6ffeedb2dae1973f5f02161a597efbb4b190c37ec46368be0ba7bda810fe7a1b003b5a4354c6f9a44fc59fd3c755ed8eeb507b204963147e48c30c6bee207c6e41ad1f59e1757095a80a881710917a3cdd516d9b5ca0829adffa29aa1824e3c8583102acf7dcf19d9c8b329a3153db14d0de9229d985a3e1eb7663da53a8171aea5de1675b3347f69840b71d0084b9a7592441b1801ac89234d4ed8b597f71f86a1143f26d418fde8dbe22f93eaad3b3987c5454eda4ca190b55ecbeed00b32dd0fc102bb1df73fa09fb47d5a7c8fc11a9f5f07c5c1a019f4e33771581e0b2d873d5683d64780e79486947a338bef317655fb9c64469dad3d1fffddd15c4dcecaf0ee0fc1887279cb7dd3b02f68a77f0f18227307d707ce93dff3952fed00c4aadb3229e8c3b88df81b9cd3e17b19526beaf9f6c747e9d713f9108ba2e7db9d70a89c42730c4ecfb7008223a9e6a37d2254515d4549165c7e429ff487e71ccafcd79977cf3b4d78daa7272b5d54aa4c0481a6773df4ec8cb8c6fa1cc03601427b864773fe3c2c0ab93b1f9657372781ffbb5cf8f65a5c211cb2263c29af5cbcd4c7bda3e70b35206352ee6fe1679bd57a4f6446519a99b8ab9b6d125ddb58db847cb7c7c485845017037be88aa5d0b84337493fc7a284eed14dba68735b1d64632c5315715dfda663dc43a6e8bea1896c6fe191193df3199fab4c290b9a698049ada07a61d093c6c56428cb418fd70041685b6144594d36baac36ed0320b515aa0aeb7d4d95b9c5f4269d4ea4b352c28aebc209a81f2c4e7c3c7c438660db4fb391d10eedcb7d7a238db41ee1c956dfc510795a4319aaa22a238a43be08c96c30cee3a49affedeefc4bea20869ccde94bc63eaa316a215d465a9bc20f62300d545c1ea18368cf850f1af01ad3daa3429dd6b932fae9872d2522b5ca850d32a27c0ddc41f8a65416a0829871538c9a7399205a21ebb14820e65c148ee4a454988abbfc1a4ee9ac2121b11d10b0ed7a956acf0f71ca1857c44acdb713f07110d3b14c6daedf8a784b80984a27fcf406887a5d641af638dcbbc2ab4e06ae407774d00b2c54c7fe79723c86ff40e5ae4216c6df6a6e70359591513a59c9ca63e2f44159a0fe5d9c1d3a2e9b2b661cef0e5d8d09bf7d3a5e55c70f10d1744a68d8c29a90a63890cc43b418d79592d9d0d39454728e226de2099170730a80501002d76dcb89ae205b228eef1c959e7357f508d8240efe1143980569266796e1381a6339020c314c35e9fcccf2f05e8e68975898a0878f72402a0a0acea0d3868ad2da6d73a7bc5e0b6f665bd7e2ca6b88557e8fd9b506edcfefd3506189f0ac232006d71d001f9f38a28ab2017202022993aa072ba88327f74059dab44a2e24c5083495d87a002815943204c853d8099e363de0e59fbad704167c11408243ef38d261541312a1001793e1b477cd8bd7c65e5d4a78395780f631fc335af6460e12e6d14c2311f70fca9508dd571c06e316953855d4cdd155af42903e813b06f04d710856a4e8cc01699744fa8ad49d31320c98b187f7c0b0dc9e221da0c3aeecfd35e62c14299d236d1f850cb24f78312350226f9a0ca4bd7a73232aa26f1a19649ee07256a044c529e21799368cc40332b0e594200862e350c4789c9a63c4b20dec0880ba3efa33497e69021fb63dd1092a9afe9b372b9e46b6d95b54cad142c3932dbbf3a7409d57544b24c48b03dac8800a57dcf847aa0bb22c647ed17bf07b11e2753a9e1ce3aea8fb9ef1fb2083b7fbba78992d6a8944bb601051d5990186534e8dd8ea601a24dfaf7cbb8126e9dacd15604c55060060f488c87c6e461ecd5d9d4659472a4ba0edeacb2b5f7078506acaebd3fad2a376e5cb64c2eadae87d30597804b9343db594b6c284869eab33a68c890da661b1581eca42abd475a344f51a758bdd9dfab9c887912b1fe5854761912b66d44ecf1e6ed95554b1a9b4a766ebcb90e8ddec812d2c1b5d0d9dbcdde4ac85633669e5fa7aaccfcc947c577b5e35bf297be0466bd656ee0536a53fd79338f77dac1a7c74093a35c80205dc4b301eb6353e74f149a2a5202914bf07f048c24fb6d3faaf54433b81440682cd3b486e4268bc675007c4e72ca1daae2b27771db7e6ee7356ec4f7eb75023888a21447ddf914d4af860a2395f37f095d75b1989d0b20e154bd59a48a257e5ca1c69862eaae26a5108c0137a1759c4fb4434d3de4377bfa42e8b202936f9834c497382c0e013c3eed84f0954da30de7e95443dd71730126e8c3dc602aa3c5430c414d4ec26ec71b17d83cdf07ea95a113b00782e5d74929f643fcb432a94ef36d6e99f71d9739fbbf2cbedeaa3b71cdd4c6c90b249a38b0dceb3b2989f027018b0d63c1b93ecf7b83a5204094a71bcd4553d373c2e70bfd89454ec1646a5b16b5aeb51c489f9e9e8c6d4f3bb0066b6c6197f3e456a6d5833381789273116f2cffb2d054f0a9d195aaebd173c6e7444ab82b8759a558eccc48ac83a6a5b0b8b486a819003a4e1c30e6c8a71d1fcb027e6104a3358fa23080518eded7740fa8b5b22c4122b696e2c26750e1044350fa0519b9ca3906284f110f2bea99640205738030ad1002fe1574ee00daccf3c01d9fa081a548de6b2a75d640bc61973ccaa9cae11e6dc4f90cb1580de74700cef0c00f2ed57e61104eb082e74fe639234b350ab06e088bf8fa4c595ff648c129f1a89bb343d0cf5a0a37a50600aec8a380ec06503f87a737870a8c806b14e5ea5873ff3990c2fd8da534a48b05463adba12d23b93248397b660e42d91c0089e54fa3af79b1f72f92f0bb753f0b31fe16ae213719e853f4358379eadd505cb2246da185288e0c375a596485c2a879067df2e7496ff377ddd902b2ee893b4dabd5401a1e76d310d0fe2e2e5a8950d0b309249a9bd5ef33c671a45177ee630fe8919ccb815d91592fe1176b097bdffbf5633ee26832246fd47740aaa28f2a0437de3e32a46e7eaf0bdd97cee56b968e9e4b93c145f02bd253113a50b9ddcb2d36b650a6fe88cd471443f6c9a7b256fd0887d02f4aa9322448d72cb7e59fdb2ea50ffc760e9721195da74ff79811ec77185cf33b75ea313b067b273a73dba2318ab3e0e232240c78718d9ca0b3d15906b45b49a7d0a0d0c32ac783ba6597a62f5922919e2051bcc6c6d6862cf1ede648380007c0ff3b3658fca119003471c9cc0e5a85d3da1fb06589f79d544e32c7316e962902dcf1e542e6e9b983d8251a151962955b67e40acc680330d28e02b40dd9c3c9dbfcc64378d674b33b384535682e67fdbed2306b735495374614905fa1550262716a2f3ff723cf512ad91c4cbc141f17f27146a1886e98a1c535ec89dfada4a0d31ed4026124440bfcb37bd95f76b3afded3cdf7aa87a8693e762a4b1cebb2ced68d6f0ee83f71d52b9b649015eca3a950230e6c9fb99620189db6986a438073fef8c151d894660507d025364a346d7c8a793ddd730368f2e1ea36d604f6fc1c8e5893a1ab2d8ddd93ee985aa587c8e1b992af45553b1b70794cf981c00a8128aa27d4db64254614647bc09172894319d8c4c6d04aa28a6dfa0c39c7ca4bb30adcaa48eb0fb682c86dc62a8ddb4465a0761e7ce804a436aa92f36b172d3d71e7c77c8ae52b7b78a26f4bdb2d56080680e05ef5c90cb7261f4f83c9e8bddadbcc0dc6f36f83ebf30f66ccb304ddfd5f6645a10d0c0add382c65a927b4e78a1108484219835a0a4768222d9d69c08cd8ceec81e393201c836335fe127a0a26fc4c2a5994222487287fc757f832c34bde5b4524186f746b869043b245739b70cd70a9f70421063a304720e9a90d04c8a2147e06c9455cb21c2cf302c8183291080d6e2ef78ce1289e06aaed13cbd7c9ee94edcffc8e00731af5466bd6ca8f383ca7e47471fd6653f3345bcd84d77f6546584ce22dc396ecb16e9b7e2d3b66ff2a20cd459be8930b048e98894912cbc4d4b75e302e6799263f54db7e9b16876fa90718bbced7976690fd1e2034af125003ea140c1d12b7f7e03c493b688c2b7f03c74cd4e3a63579620046b10417942038ec2a19d2b51823d96f54e808cc46dbcea890ee3a4a52d67b40d238019ea2302c445fa715cb3cdf627db9712a3744796291624c254e31765f985a9fcb983aa3cde51dfc03c9a869f5b089d77ab4d60b78e6370023cf7e086bacee106e4e538f317c6b62b7b75b93b2b8c94502f34967b1f04c30f432dbb7f7402166eff0ca7287139c59816b53ff983e1dd2f7e4f61b0902a84d8a5e9b2ffd6bc5517e0e56750a0d0642d69fe3c59592f9a794bc23168e92f66626e2edfa4025223657467df910a561a49841d24df8628c8d57e6919c0e885ba280165f244be57cb43ffe135c5dedd05e33779056fd154b70372b8023ee2909d62769b674286150549c5c6402cb55714fb1d46fe93f8929bba074f2aafbc996fa63f2a48a8ea8eb94e685eef124f4bf30b45baa91d3d9d30ab45e09d7cfdc2f8d80814b567a7604afd5d3b8d833fd53c3651dd47b23568a321947eb2b266394b2b0af66cb42eae825649ce4f8aa450077543d92814b9afb11a8d2328010487c1ae9397ea3270a458f6498831814049905a520615628478d7b5aef508f2e3319431a466e2a9eec90468f1999d02c4822e97ae9b9dbe53682e62b900b796b1d458deaafba8f6d40cf3532865e01dd6a79c07808e813677d9aa0654cc79fb8f37457310712e083c44c6d0850234df67471d6584be7eb667a81506d143ddd292fcc891a070db4d162b796dee2617b025b0be0a8d4b9b8293d64a90f0dfad2074413b48b952ad470e4e6e5d069b25d4ed6b7e8fa45429707991958833adc3bb39bfb3fce4442e91e754ee691ba2c7f47ced1822f7a8040bc9753a162103939234aaa0033ec116831eacc67c0805fd858d6ef6c4033ba0ceb7c636f79639c9aef9c7476e4d3191a922541419bd24ddbde699aaf4ef2bf804abe57a15efc7a79477e37e72d301def360cdd1b52576ae54f9cde8df2bf0aaaa20a7f063e4650ed72acd0adbc9fa02c5ed482285674fcc8eefc0bd8cab71b84823405fd682d91bb114ce65da92a406dcc9574aba549c1c7422963a4716e26e9933b66cba72e6e6baf2915686228fe4af8bd863d1efcc942a93d49232a431e0a5833d0a3cbd1a4ff756a97e70e6242482fc7d532511b87c93f74551551d750f0a1686c5d89e329194c2013ec6837b2d60fb6a53d10d9aa7162405e1440ba2c27906580c9919e2b207d2fc6f72b90ec73b800b4f5fc1ece14900fdff20262ce3c1d325297523ced343a3a2a6f54aec3ad1d7fb5e0b1a32e45b2aa0d0cbe8ebf80e36c44634427dce8965b67494fc18e1b1f679637f7deda754678a97f6e66fdc3ae956014206c6714dbf50f4f28daf8b8f3d957e5293ac1065a0b4d83d4e88eb67d07a3ade4522c506c2c3ab22d7a05a9dd9f3789d2fd9183474cb07feacfd905bda7ceb53188c40c063bdcf0e664e5164eddad996603fbf0c58f23981b195e09c678460efb035327efe22dff14fea4f130074422edefcb10eaf9824fcedd536410787fca53c5cf2d3296267345a83be8b4e76ecded1b7ab1463ba0138eaa3a1a23c60904fdc7ed784c48854c0d210083281b6169d52380f6e0ac4a5469a85de0a1bf1e3a33badef0b434950d528d70fe180d4575b77bc5ab4714fd047ad1cb3fde7b44e826a2a3a1174cf9e7bdb7087d22e87d7bc4853d919cf3033079e15dc98f56ddb76efce200e5e1776201e222fb1aaf3ed8009b15f442d92a5fcda15a2c175d985313756aa11a6355aebcd7004d55c5ac5ccda3aacfab81ecbfbfc6a6782ca06a92eac73e1ab7f8ae263a23cbce201576351fdacba39a79c9771bddaa8971be0db35846e10a5e4b2b0002754bbb5829e4c92c656cce348d0a8efa3f681e27d4754882f7ae40372011d72ce2dd98b6c9c31695eb2357625a51a16515625f10bfc5cf7542374e1fe448093dfe645fa5fa61e04028b18d84fc897dcd1d6ce2715dce0c109236e845bbe844eb442b1f29b0092a36a8ddd60124b23098683e0b02d77ca6d46c5c454377b0384277255e0fafa8e64447782e1161b3751374d415dfb92ce2c9f4b3c1dc78240a2f2a8ccfe7146da8e348d435f77dd667ec1219ca676dccf4a372c398a415baed8889c6ff43e5110da0230143967f289f55e0e73999d4be1e17a69971484dbee1f8c926145729b5753d8dba09313f55005185313d248629645c7ea231aac69d6c4aaa8b6c0d8a4d2f71ecc5835e1f4a5548e8a9fcbcfbb4e8fc1ad4db9bc8daa5200f59d5fbfd2c1408a91b09dc570aaa2ca1f48eeb54e89f845661c997c00fd1219880f3327f817bc2be660d9b19460c25a308f39196e19a40aed7775ec79ec78bc4724982ae1287398154d7d24b82bf1aaadcab1ed45f0da7b8bf38e1676423fa8e5fecf8b4bcf8d9931b8695b1c87b0986a54e8fb6da70616f080ce515eab601987e4589da122617884e9779eaeb3b5d8fa3bf923e2b5d58893857ebc7048d7529d1cb510ceec24569605243af9649996b18fb23e2e4f0914725be8007930078d5d4ad93e81d21a072ea8d8acb832935997a3896df2d0b60399519f72228278873f39efa20887c3c6ee82bff0cae4c145b072fb877510ae42669b699417f2441a715602b41d3b9ca342f5bdf8b7edcc4cc0da4384f511ef82444b634d5e1fc1289f751896749b8dfe5e2e51b56b52daaa5ca73e6103d3c5569750acdcd7607638815da2219a94161a43576d4697a51f19295f28e8e45f24934bcfeb4fb9c748095667667be15889bc79490043ab99926ee10b878a5b78de7fcf1b1e2f3ed9e86e36c23aad6ddaac70c4a21ccfc484bd343dc644c1468bbc9904d178302e54a33376ac59928801f242faeac78e85c2a25b072edcebe6a12278d30a50a12398ab29c10a56a1504422a525156b2499f0667e5850f8299c842ab83b4fef856d872f59f9f34a8f3136890d7e21dd630e2b94c4ab26ea3fe1134190bc184b1eb9b16a6d199ba6e6e1e22bd446a1269722dca756ef61b1991fa654712720aab002eea0315cec0ffcdc02e12561b1b602a6aec56e02c98ce01aaf991e46959b22251d580e51e747cfa3624617739fb1885dbb61c563a5e101b089296c2cbdc1101724dcc116e14d719d95e6356fc25344cb4b407755c918735dab722e021da1578a5f5efe4a4a3b59f9804ba80e89afd1fac51518414326bb30a8cbed1371adb02059a542b436bc056dd8bae93a7d3f92af715cf494a71ee864683063690791430140474a306eb971d0753f5429974d4c8259a55b000c4db313ff680ae57127ce0a627a340fc222cff12f5db4a8dc162d733a5d89701db4e42fce44412cc32e94504bdc23a1fa5d6c002562f55fd4b7a5de6eb869757ee5504f1fc49b4c9af2b9d7e2b0790fba990fc1ff1d03d46c30f4d0bd0939bb2d43b14cb8726b7d0992cc62249f98da764b7b4214d976cbd032a19dae340a39d3307cccdcf879b7bfdd25a0de310f8f160e75e8127fdf4ba5eeb878e3ae20e6d8b5e7eda40a4d410a9c4a356bd8bc195d18f4b2a929b0f2773730071954b0d8ab834525a66436e8f9cc348487273a760046d974b0d8a95562d8557bc07d7fa5aa2b2bcdd16d381eb960cea5a637bf3f391e5e2028ded36267f2367144ee709a848d5472b861ea713a9fea10af604abe5b741e332b3ed134b1b82b699f7687bec9df096fad45ddaf29634d85a9e6ea92c5fd1c3e84a1674a7384683f6a44385c07ebf149f27bb7037484b9cd92e39d9941b6b35ea6a135b0e5dfda9250eba4522d2ffc8bc9b266cb9f0f413ca5c1d00df0f31cc7ce42ef5b4afa46fe01f1856fa0f0aba2f2282990d4fd22f16580baa9fa0cc80d7248ffc8a28887732a1aae4ade265e126affffd6afef1de71a2730a7c704f47d8a60ba1432a76b8d3a2d416a50623ecc12c6974edd250d3df192e0a702c1afc5802c5ea7574639fb25ebfa71ef30dd2bffe5906350b2acee6e5d0c69dc2356197360c5af0185aa0022ba281a7da836bccd89e6e21c92581050cfe545a9fb885d5e702fe5dbf98ea58fceb68bf1a3ba2ef76a208e0ee68fca06dbe83467c229303088a806c82cb4686d50a882441a8bebfe78c24a1dfb75e8add20ae87df39b9e4591ff09081a4757368cf93baeadda21b9d4c6b0db655b01ef687b5c24e0bc4f6dbe21b8711088495648eb7025bf91a2129d484bd1d4d1fd3338af71801ab2140b06642208ebd01347fcd9ed7af84ab4ea7033db37b9d332b5866cc4e089c0a02e469e0077842449477d1591a19422f0791cba363378b784091369180c4aa4a7795b3840a87b046134d0b16986a7d90cc5498cdf6327c148890dfba05dd8ae1c4f292798f6850de68b21803a11228955d8b8b0ed4b879f50a600d34fe6d9441ff022c92b06b223b514b3e235079931c08b5dab63e0a052aeea0e6fc9c9767f5fdc3a4daeafd4f0e6052186c6a209457815e34eeed994cd2f2115bed0ee123a4b148f01c2f213ea90d1853c25cef7b636234e8db5a5d3da84ab1d74f2bc947b1ddc19afd086109df901c4a0f592059ebd5a14a57b9364c6724585e1c4bc92c708d7c99e4c81281f78620cff0d3540e959e68ed20ce65959377c42e05aadef164f27e18b18329829577d5252c5c106e365e6915113b29c068c202e4a4c6bf12d2d16266e62acc7b1a206de9c96f1b8f4562c9dea4df7f697d512d2d2164feeccece241bb4d3a8cce57781a4129e3368f45c5f5fcc2ec29f0b337a61081f57c80b7a61559d56a5aece04c9cf97da582dc8e7e3c97de235342ce1f78df54b929d57d37a7142400113092abe2d34f4a0493f0cea1a0ef16770edc434a1ae0debe015d9d943a4023186a7c3b9272d32f92a9ff3025437627a9a4147c59eb23f93aed3a45c166671580e190f4ad84a407b9ea9be5f0aca5afc50f27e6f4ca8ca1ab81b078adf402d99205955514d1aa7d215c19cf0c5a2ac9d17ac95a951e3e98cab186ae0f2691a3b792bbc296efe0ac74d375ea72c381f5bfb7865bf6c93856f85729b47568003ed78468b28b139a34a2dcf760cd0eeb7f1f957441f5e8515a4f96ee91f8e3a1e697c66b238588395f5b4e3d4c3ca62bb641245459f1f1e4163513ded00279ef6e7b443c0e1976952665b753948f68b555814f18c82946203657998a4598c801950b8ad30808088f344911ba47f4a38559ef37ba1160d0ff8be65b0da20d8c0639243858a590954cacae64c86377b0860d8672f0603fca6d8ab88c0ee2f8634f6d2599bcd4a6684cc5058e34afee90a3325c1a6201e2bd072c193e0f9db3188ab583e490961e44a7c259eca0d90e8a284b8358b073200ce3cd833eb878a2d662335354cc616b734980908ea04541551720c11d05a71fcb97c3204a197616f249efc211f5119266e88581e13349591c98c89acb266168f40a38ab33cea7da25b7d5bda007abd4644eb3d47ba9487c81e09c4b9fdd50508267d5367435109d2d61b829e7873869f8f4a65368f1310f83c9ce597f860a7fb0dceec7447706b055e3273dabaab4f83a03fcffeb0ffd312d0dd0f94d397327bd62308637d36590ab1c3c91237d3bca7b7c555dfc0d1ed5545f008bbf5afe5b5915320d3747f422b4f66deb705ee1ea456be4d7d23bcf73dddb12f4b1fbeb25f7df579e91b83b5efcf6e7dd93d985a3c9bfacaf1ee5bba65df8d1e7ca5fff5e5f1d2571e66df9eedfa4eece02b852f5f6e2de34b55272fc5364412e27a2c2f18c0dd6cc9abbeea04eaef2e0d570bb0d91cea7ed010281d9ee629b7dda291fbb9bca40052375196dded432c40cf478f4684d9460d69190a69eace836954cab3927628f354e89a84c198e4a09564c0505a89fb3258365805e0eb25aa2e98411d62816591dfae58aa89903625e2a4826b67f89c3738f94c587ad61601308acec1c4a15337db177ac4da05acb4150a373ba1442aeeb9207e672e12e7202cec9159af404fab105d3eb670564a122528afa6b156b327e617da6132b4c525d1d2c6b7940a24cff55875804afb5cf1e50740938cd42bbd682af2a5a5da760ee4c1d1d80c7451f0db9eee05af01ea84569757f2be19e153e0906bb3f2d4e57ad842cfa9e17ff80dc17983d5be7e10497f439d365f2064b860f30564895c37afdedf2e8826229926bec06fc0a0641e053d80c1f89367934f7bdf20d1c11a4a07b9acf063f1b51c251db55df3df1fe8703a884a4598112622ea418a15d1d483be1cd38cef7825ae8c947992df0547cc189520c6c8dcdee61123e5f7ccc1a3c69d0cb11ceca6618482a6337794f19e6aba1e61ce053436cdf7191ed64241d84310b4e742d437600919eecc5cce2fb4cda84f4b8a83e6aac4ee4d2648e330c9c31aa20e076a4b70bde9488ff8c9a2bd8d383e8018c1c87b89669641a9d3325cb805700b6cbcd681671fb98f46542f2c66d00b701259ad0cfa1398c7da1dad925f6139b062ee1c1c2fb2a539a8883ed53d7a7668ab88e75030a80c802448b2829f8a27aa710c62150497100264bdd27708a6fdbc7869543ec94dface0502e08e9f538ccd26502539b6974ca27b89a919d95cd424cc0a0e8721c0e896946c8fa78236ee7ce24b8ae46c25304bd18103d8f4193e5da4699fdf6722170a0ed8bc27ae8300d01e419c0eac12161af63a15ab27025827a57fc6551e95c9146b7ddff3010b65635f673404fa674a6e829075ed3e57d6dede2d260a2c41732828f19f02faab790d0ef67d8cb70b1392a78b3233a314ab328e09a9e835c0cb071e4c65a22dd97cb1335c3f965933fe7cbcc8d4634c585d5941f1281c892e8907c733512d197e329f7960c95b0d61401655e5054367eb66efad7ec6416d5a9ac81892267a1b1507e124ff243e0da7bf7a7f6201908accd811d67d276554a9e376ce9e2cad3ee92b226c3d6323acb1ca2b3a74627cde4b30b0e82acdaee9487857bfb636d937c4c3a0a349176e11a5b3aa4672e905a6bd9e92d6c1a467b0c2e7f73654f68b25db0543d94cebefe52ac411fed9e3c675206e614790f3349bca77c14548fcbf0dfb0f090743fc68a537cd62770f026c632e10292535add075851635a3469baca83ac31512e300953d659d2782c219b87c97c1e80839fe8aea9472f4a0f83c930fd24ee579fa39dc1c2d3a361de70eb44a43e0e0624ac1fb3b1bebd4c557e7ab3d775fe6f960493040b8075bbcc7ec0e2eb239b3e6c48f1e16050ba79aa0089e85ecf67921e7ff17f95088ea3753199d0b94770b55de1fc015a1f9e2fb59c8a237c56a9d6be3f91d30901252a9479f18f14f8922a5e16207a21ea85e52aba67a9761cf7d798c2204d98aa1d77f324ce785dd464a553de88eaf8fe1e468cc7fd052724f541fa5492eeb014ef7f523659e523347d985e5dc6535b5a746545cf3545a90fcfcdf34802cc71e9d6461c78888f02e69446afa50ab2c2453afa76fba7e6e12264ca2926b1044858144b5ea29f7e75f8a625b77af99a0407474602225bf95640009913f359509c98faafa313840e0c5f51b57f61f5808f26e14cfb889cafc332c400a2dba43934ea672dff02b615abc1570bb9dd82d808f3205a4666ee784ca02794a8c506fad571c30703f04c86bba9274b78df0851cd433902c209a6a3e2457e87267a45458a55db5c5f1c2c7146568f4f3d14d590a6917aab09a15fb0d9224aa04f74ceecf82c6349b8cb30e9f2b36e0882b75df3b07307cd88c942ddf8a225de7dbbc0451b6d89e17610494f324fbc4db4b39b9b96652e3a6b951f431b2cc101e85f2072ada81047d8e212697d39f4b3d72d10989c9fe833242e2732f39b4dbdd9408148192d530a68d45bab6ecc43f866bd138c9f41866df64abb70cb52046513d1e7938812fe7482340b261baa2ad35396ecb28da1a9a9df5d60b24be90d2407b2153cf7952c4632a38f2194cae0e4b5a1bc8b98e3c6c13f5d3f0d20f2c4dc250f12fb65109cc97c49ffd3b46f55d9936021fc102c003b1818ae2eb3313a65980ebd4d59105bd4877f1890bfefadb03998c42e179a5de3c64a148693865bf0699f3363fceea2c42637478f27db933526ed38090ca5516777f35bea86f768ced3dd537f1ce4722d901c5c45d3246845a2de59bd4611509dda8ab88142dc5d82450b86e15df0d957d47174a4571f156a14a9dc2c3aa07ea84c73b1b082a5cddb67591f7c6228e2049774479b1b9876129680a4a8c39b20812222cbce7480d0e288aec086671e20897ae76cd2c8893411c28c9db39a66d86615244bf7928ba36c9c73f0ee78f3465cb7c72182d619dd436bcc60d4cfe8113db26b2e50567af1e00de67bc83311e1e6bae0ab1707d15aa84830ce82e7a25f3b198de9c1e52bdf9e4c514f993cf234567cb1e434b0402015b2978c19adcb913e8bc8a08d8123c4d1ace806e26db0b90fe2cc2eb0b4a0349b65e2185b8a08ca783e85a41af4783850006508a12d504d443cb4011ce4448e1283ec14be4ab3cd94f68fcb44524edf102d8fba06520ad9af0f3500bb76500fca49b7051f480857e0008a86bf1bc5c4a1ec4db97354f6b9f7f11851ffd0ccd4efa90fe17d34f2afd487e80f3467a2caa589058ca4c8b36d48d967b32c6e3f26804bb6149d10b5c8f128b0bac01930eb7078fa2436eb657ecc39254b0da0e96fc79139ce28aae18c558f5e04ac61527ded836abd9ca332f890edf46e4c0edd8b92bb6c9984d6607eca6f9ee0ba1b8cf005c6c72b4d32623920464f28d64c71d71ad74a63e5597338d75191aa8926419a5eb30cb4c37079480ab7b228cbd1ffc637188d31e07d4ce08c889e7d60b0bab7e702e3ba1357124d964fa4243a22de03d110deeca9b1779abc1cf88a2d9e7750265367722a1b60c82ecc0c93d531b6b54c5622787324a4cd2208eeb2aec729bda2a50f39a4307a8cee0058342109bed65f5e036d02423bb010f4f4d08a70c07471c160055fee68c4466c836ec4ebe4fca0cc979d200dbc9335f76ae74c6e374fa1265c25106ca770bd057bd68f46963043a7ebb645a9113c596a68cc48d1a770ea8067c2304e146a3536190751f315c62c58335a0caf4145cfb31e61e019e3d59ab17861270035fc0e28b612cacc43ece4156d66bfc7d0a15685db671a5a35e7793acb373cd4b50a8279468c626455ff0669f872f983852566092c25c1ee41e5289a75f8147759b729c8b8301564f5e86f3ab4a3c54b64915da80b753065953e38bb2d30634ef5ac7da417036cd12b69f7e087c333e1c7360121edf6c46a876960f07e91fe44938ba0a2e3fd2f0f48ffc0d25b0f4d5745a7520150fcc8df449966a10a946de1f8356d6338176b10ed57c52b15b7f704d503b6c0c0d01bb8ac0346dad15be3d48247af08d35dd7f33a22e02907c046e8e4f41fd5b02a73e432b76057ea2f4813ead7f95f13afac14b1097fc0ac5e27dbf31b9e75731e207774a8fd57c27850c0832e9c5781fbd9906aab4d68cccfe1168568875ef370613f4cb1dd71085599acbf87c36ee7e949b5011046a4f38b291c8725d62057f4e202c4b04326752e2f48512272a10c736393a0d91e36f42677d5fe2db7be8276cf637d52797976d419a6085f23b078ab91d7b6dd2f88f0468579687552385e38483d38c9bd5be9b1565c22556cd0fe10c53663b8e040546bb8f54309398ed000593ee69f83fe31f27fc28037d733854523c629485d439a163f01772cd6f322810f2c514dae6ceac0ac6f5da510d8dd554ca621069d381b3866b1c1a6aa9dc4e024a781be864b1700d4a27b8a3748e3b8ce1ba8aa4829b44bb2a4af3fcfa89aac630fd64d00d372f784d4a0ed1d63b4735225c82399134650ca839efc11366b2d16340296dd3f95ce5b733bece4a81632f19c03d376a0f4ddb5a2b93ace388d9e1e64bc17d2d6d524722153ccfac2819ba35b3c56efc3690a1bdc215b0e8c258b4b454315961476553e6cc1b3cc84d36b5a310fc9e32227139770a1747c82094199c483eda185c61e0f36189ced314ead29bed6f516a469987594eedf45cea873ec963a9130209e58b50ec93047c0aea614101f6f856d65cb8dec82835df26386a48f12c07dae5585c4bd75e9b3182e2fcc4d0ac7c84caec2833fbb9ae8526cd4cb102aef8628a80788bc15810cd71836f91486eadad0fa858a9b2cc037f66ddf451262fb1c6fa2a42e07cba23533dcb661adb268bebd1ce2d5cee3a96459e5992b258a260fb846838ea51212f98a2be7be1864acabaf7a9256b748521ae83ef3da0bff6a303aab5bf8544207d4123e33eb2315d5593f8834666c9418073ceda6d423887adbaefaf9429752479bd89aef4f29b4f0d2cdccc89fd41cc987cf564ed5fbf66af3c3e4ce07e11a82d790e47d54d51da78c0f2ef253982c898035be1e7a1043b2582b0d946748207be97ca917b833aa49243ebc39d0172fc905f9578d15969701ba43428f10565e83b067e41f4e5a70f20c01034ff8108786b918711751ca3fc1951223ae53113267ea713326cb2cea506ddbf531214b52cd3a62e8e1a5d20930e06091a38cb7ffc7e365d5ee3b3ef6773b4584e26fc25de7054dd38015fbfa253d1fc522bde2c4347899434da83ffdc6298da355b3e6380adef8704f4a65e1a379d301d5519348564d8a60af51d766df07f4c2b17bf8e7eb549fba1f7244932967354e9d9193ea23466377211a7843da87c367fd8022ccdbebd062e25690de70193a7c9c857d3be1cb10269309ca3a913288739494682ac97f03941a3be31f5ae13e2e056f225632f1944f21dfb26e9f471bf56bdfb45e19cedbf5f1e63caa700c008aa232856a5b8ae158cba9857412100bd68f2db0a7a151ec67300fbfdca666f1579e82ca0b84e01458d80b02c0477b7828f17bfaac85f8e450903b750892fc9fcef19909ba93b0e8b11c3fe3da1f36329df2b44310128e5cb84f9d07d6205af1e0335781e7e523ed86b8dc8552ccccfdd8602a7f289c0d72dc6f2900c4bda34920975042962e0eefbc1303bfccbf47631053802387c378b6eaf8f5f525b98fcc447ac26ab9754d93fbc259a1d63b0f96c6880584bf8ff15e8d6a560c940ca72d83e85b6fcc968ca1ca3d4c67704dbe0510e30f652dfeb5126527d5db327578bfc95a9f794127d09d0bd168f78f8ecc5a1d761c9ee7ee2ce78850fa62adf494324bf0b743852054392bcf698008682f5124b99e16fc6d0d1d014150bb5307ef8548ce4a4caffd5d42ef4fd93b80d2433c05a8322088e40f0dda8ef28fa65d06fb8919efc10ca3c3a3e76ac1ba52f57ce2c91b8b4e0e122c193c63e399eafcad53db4a3eee87a1cac15d63142fbb2967715f2efce887f043efbec31d15e864bf6ac31020c4bf770c73b1cceb25186c327dc61866e3d4f1442db45e1d6c956c7022f9e2e2f0adfb8fefa0acbab7b9a032c570b33f51dfc93049dc92efe1ffffd6663992ddde7a52512392a923797bc6a1fe863e0f7a74fd008fef4d581bd1f8bac06b46e0960291918b34a16bf00e14507a0162354f85c3a5e51daa91ab39c4c63edcca273ad6f1ed9060302a6536db3bb7eb12a455c1a4ec3061e86b77fc5f4bd97c640728999f8e95d493b85cb66868a645c282f37d46a08c3c1a40d0155cb5028589698be31f32c51e670398fec99f5b1eaca873d574fd179c9b94490e80a7698805c3e9b42058ae7e632565d473afc69f6127bda2b3d48e57e6338445440bfa7dfa49b9a89e672f60a3d4feaf79db52e34ced37a106a26c3c5d3adda822215b923418b7bd843c2fee9b70a76779d8cee3bc28aa7867f5972e18e10762fccfa90976a374e993535e0fd66a61d6676a7109eb425ea35aab90b90a60bd5e89be79eca35ac48c3582c14b61c8cf0c9fcba6f0eb6a5c9a3c102c4ee53f1b28d2e86fc30c5cfccf0b478a9cc3c42853d01edc50b11deb0975bd33bec522e42e30bb1420aa875e0c2d7a46e4a9c2ba06d5d1d207fe417f783f13a09824aae1c8db33f78050628bf5e2a712fff1c2f5d89f706f3ebcc3cd7e5f7789d261aee8958959c3fd1cd2461f81be5e8571e8335a6a906826ce276f63cd6d1c0e6dfb173614cb975c1b7a7801c01f8e88ec0684c331792f36f2693bc7a8576a82d2551361e0a3e672227bad57ef4170f7a6db0ffd379c2a30cfe21853d1873e815bae4c9d70d70a2d8f6288bb95725d6ba82b2a851eaaddd1e4bcdee8b8490a97e8fec4d3ecf461a71c33cbdb6b1894bb36d917cda5579d816aebcb69700badf0d637a7e6d5160f2a2bb2da4b890c5a8d81b37a584d666841a694ec3a9c79bbea0772c4cd1785c8c524e59934ca4c08418fd07371eab2c148611de4a6966a60d1640a37416a27205f79448795b7565f2380b52083714c68f84eb64fcb2f85e128a83ba6941bb99a39185471363e0eebbd07fe2b8546746341f04aa4f73a85b30d815a903e989ecb2f71b9cc40b176f7f6411359371af71f569d949a32a6b29caaabc674e7a2684d58f05c8db8d8453af1fa7630b603fcc95eb4af1c151bade4d401e2a929591ffd8eb0498e35a3302b164efbdb7dc524a99640aef0acb0aff09d47750f765bea81bbacb5f350af8f30685135b4c81851b4c4109dc148cb8c0092b8260f204916cde8bb148c6492965d751da7df245b19c178eebe66be16fc9b7c49784fc99abd0e7ea162f8f9febdb71d528898bafb91ae578ca6f8c92681a4a7c3af4078c8a00fed0df80c35078c36866a652b2a5c5b498160369a150ada14fd36808d790e851c19b89b410c9465f0e9a6e016284e334349426e1a325e69428c0d3a5ac91435044a48d347d34c080018352182193d378cb8ff0243c67028165388a72765cf4f757e82e17bdc0a316d3a85822fb8b72bac51f3663b285684913b27f779a524a2de67226eef2970673150f18236fe1aeeaaeaa69a21c118e2889abb42444b02344af1a64f9a3c8c5855feb3be203f155a13454e790150f23813d8f23180c23297ae54b9cc9880a878d640e83960f2d6846edf00345bf3d27e0b1674078f85a5feb6b7dad537e01061860083d8c049679fc5c94b2789fab6d2ce9d52889d1121f9391eb838d7068f0389af9860049016bb1b6e1ae6ea1a257bea453feaec5dca5c5c60d23816d1e3f57f65192f91fd220bf527034ca71d1ff1382e50d5138b8e89f3d2df0d82e77c9d034168f85e5a3a150278094d3d03cc2014733a111cd1138f42a7f81d0ab842a7f01fc28f9cd123d8c7f2d975cc3b5c0a30bfe6ee62af41214812aa012b0cc112578814f121940c18929aa107e8030d3620b2642607034339a49a552f5d6aa699a369a19d1cc558b0094b678a1afe52aa771518956795468d1df9bb92844d208aff0a8d02a5116decc5522998bfeee922999ab4633a22cc6d14c0681a4bb68463879823f6de325fbffd71ab9e64a035c6c81c5131938c18a2758fea3d75c75204a0ea680842d78824084e53fc299abe6020a45fcc0041649087101cb7f943357324186e88114289ce0f95901cbbf8bf1642ec9adc333933d8fa39c118eab5a27093cd97f9464a4a4bf1ded84191f0d307c5a5a286d39b94638db1278fc5a231c2dd6694dd0629accf3710f8aabac8605ad0b6d8beb43762d368a65ff5112239c11931e2d192da1c5426065cdd0086784436f482b4028f4e1c81b33fc92f89418f1e0bbf95aa1afd5e52851028fa3efe5aa51e68c705cd9b75046653e0f01147c564b2f285c913440721500b9b2226fd490340220570ba8917d85daaae301356c49e30172b5819637eebd96d6aea67b419d2b1c66ea0572b50199fa4ede789134fcebcfdc805cd52dbc542feacf0b6a3a1dde8d9728747c38a0d90dba3bb0f6c546f6ff5280c77e693ab62d08e749cfb360b7826e6975355be86ce48dae064dc3bf638111fe9f09f0f8dfacda4bf9aea25ac8073c6bad805c400d79c3024dc3bf01725465ffef0478ec97cc0143e895fd6b6db9d8d53481c7fad3d57c11a82c0ee09043dba83329aea2d287c64277f1843ca6b2fc31957198a9ae6605dd11d9bb1a641fbb18641ce6aa5616a55ab86559d3d58c3219e308c08b6e92462f452f555ebebbda067ef9b3a66d845efe94b58dd2834a160779be26ab90e75fdfc9f337aef3be2381fe2390f49d081c7da7028abec3a0ca7721107f570243dfd96ab5bb719d47bf0482dec115edc79e0204a2ee8f1207d603812e540104c6e07ef41d10783a420bf2fccef340208c8c459e4f02fd41a0297ff3bb5bfa9b4b4f1a813cba45be0894ad996bd64c59b7c8ffbc9622cb1ac82eb22f992b18671370ba45d691dc5e9d6c247b29a90eba11132ec5c9fdfd5abfedaffdb47f8e9880e5b7bb7b68c404dc7d7bf3bfd975d09a7801869e951e548f0b3d317a4e3d307a4c3d30c4d063ea29f5907a463da21e959e18be47a507f7847a403d5fcf833d5f8fd7d3f5703d60d8c3f56c3db72794d1737bb41e192c3d5a0f0b007a001080395d9682489fb45aed6e5ce77da01056118d4825138c530c175030c4f03c30f0bcc0b3c283e271812706cf89e7419e130f0c1e134f8987c433e201439e118f88478507f3847842193c211e10cfc7e3f1c860e1f1783a1e8e8705003c1ccfc6038000f06c3c0110008f00c439bdaea484f449abd5eec675de070a6115d1885432c138c57001b5f282ac35437156502ec438c130c110c3caac695598cc54228d44358647b9ab356b547008d4cafedf832ec81a3b73d7e7757696fd39308c51a3b966dca685324ef2fb5d086f8d0c1618b9371c190da53c6e2ca62c4308dca32460f914a76d046003d112102e34dc572dbbd3c942817b3ccd79929a36ed9c761239cde9c284f5c9a1772600c38393d1aa1b2d592f43919b40ab64f4e760f2f1240dd09c56052f326e780aa4f4a1457f2edc61a6fc45130b668aa65b80280247a05b7834c14f038c6f5bad55ca8f07e7938394d57a1c376b0ef2460d33d05934143ac683e3717380c7f681f9a8e6c3541a561bdbed74744e3a670d13490ba4f8226723daf77701ac853348e69300897cf93d0aa483e7cb47d997c9361ca5b456bacf5984ae59464cafecf66c957208a9caf2460d7d340d77e994c740a09d9bd0ac6da8e6ca45e2dc572c6350107a003d56f9d0839cc01267ae7a40d223f42adf037ed0f7107a1594fc1ea0c7df43e543df1f4a8611003dfe1bc21b544289236970b5920a3bc821240de80a18cf4b2a99606837379cdf64018f92e626f48de201face3d24144b2881c5f2bfe1425bc74582da17e3b96e74ceedde7beffdfeb6578c9b9b1b2c6fe48dbcb9b9c1a1cb4c3dcb0d1625b8cd6badb5f28bb9ff4950cecb4d507dda6d5bb775dbd66ddf1fa51bc541764ae72de27a8944f7f18330e85d50827c70e71bfe903947e3ae535151b957ab748301c361944c265311d70bbc3f86d925b3f802f08f33a48d1020c05a7083f1aec347a877b3db467d481ade646403cacd46b5fbb6734b3a411501bdea1bb288a4e1b3d1456ab7fb3af7bccff3be0fbf0f79c3fb68a8804bb2d4c9b2a1e4d0a048f6aee3ae46433ef2bb17bcb9ddfb82875f82466844160e7ba666054380f37ded8652c817236f9490375207bd8356cdffbade34913d1ceb0cb2bc99d5c5a2b42b63efb52bde8abd2bdfc538044202167e18bf3737f762b086865e1acc461076a673a0dcf8ec38c9713581c5644f66385fdc1c497283d335723c96bea4d38b335c5e7294d41c4ff9fbe7e4d04bdbcee47433edc77ab3ddaf4e6cb42da4c1f3a67d8dd5244dea8daf641035d55561ae32e5d651a2e5dbd55aae1a2b1736446a1157c925344dd390c0ada3044ef5688021d39cab7272f175d06e48ea56ba45fed5be6a6f55e6a3ec586f48be0ae2b21942b203d1e2810db29bb2ebf02048962c7fabcd7a538fb8ca9bc8fec9191ae13c17eb8da7fceb4dbd31327fac37d9b997ef79cab5d7c23b7ad2c75b674680bd248f1b6e902b798386349a86ff0168f40b0a1dddc3a3bfe8c9040d4df6d761c209a90adc426042e63193fd7b5480a623705f0b518eeb11e6ea8633cd04194b7ba97d0f200598b1eedf1075fa7a05fe1304b48859b1e46648106820d3c41660d032c20f9e5812a47e2f021ee02009222d238c68a29d806333db011382900514b0bc8b28bc60892944c0000533967f05e66a0620603b6859610b2744c103399cd2db301e525eae8aae59469146451844922906da81a65bac56db70cb0018ec56784fccf1141e33dfa45142859c696756b8f49037c898d4400f0ae50f48935490b339c4a4f9403a27cd1c62863092c61ca2258cbce153760841bb5ea55b70b7f88740de009b8648a65c86bb87a460bc421a518c79dc78d9a1c7e5e152fc46abfc0ab87b760529d861d86198e7caed47d00ddd5920530e448bfe335b2e83ecaf852129b8e651b6ac9d9ac679212958e6116f212958fb117bf6888ba0493367aeeada46bb723ae53f45f6a7c9a941e774ce6ce22b1ea2d313ecc4ef3ce22b39d329ff9b042bf19dec2f9be855365d0ba26b9631942381cae25a3936ad5e6d0ee6f14a2ee60b79a439b9595d5937875ba2b99cb651ffc449c131e9cb2dc921183541d72c17042eed2f78df8640c47b818f000f665d1f9cebb1ab7498df4fb203fa899c7ff2d5369b9999f161c6cb0c4782904796ecb09c2af2e89293248f38daf5cacea253622535cb974d2e66b37a6caf8540b4df426c7f0bef4c4dd110b004812bd7e740ed37d0f6e05efb999a970766fae05cb93e7d57e950ffdb7141c9ba3385a574f756018d23c8d33da79620481292504411382d68c18b0822289d75d239279d4f20010551446169a59456aa43af6082264d2cad94d24a75788214a1084992fc50292678e20922445e2b52fd01d3973fc11d519c601b1e578d326e513be417d9beb44eac9539b136dc11c5898b9d79da797862b2284f5cec5cabb532173bef8882a9b723ca9393135fe1588c870786774489f1b8d8190531a07487564dabb5d2ba53354d239d5cacb5d6afd64a69adb456edde9ed5d24a29ad54c7955b47094a94e004ce7b64b9757a606d84dc3a3c36b9da5077f75cf9edbb068babfce688a7e6370e67080a515f92799d72bec50662d2123c3393355782a24f5134f424d973b04852a5b4fc66becc992f5b2a58c0a36c7548c043a6484a2de854b6e48d6c4999cf412d30c2089fc6e9da670ca5b55aab69f71ad96e38aeeb3cef84bbe5a3dfa51d914ceb902c1f04aae996d017d3c929f98be15c389d8a0ad7836738d624a3d11743ca51926b122f9564a982503b6c9eef79862305f26844227d315f8cc973e132819b4914285974022c4308ccb9b2cbc51d513cc629468c18304ca5183148a31831628862a8e01831620800d4dd621dc0653aca5491d6c0652a80bc23ca4f4bafe18e283f2e76de1165967d4794d98e28b3bc430a3ba24c71b1f30e290471b1f30e29ccfcf8aaf38e28525c25a3489965ffa240d91165471497ca1538980b73afecdc0b5f59e5c5978369334924d1f281cf14ad7be7ca873811126d65f7e6aca76f862717dbbb79ce90888b435c74af1992bd5dd5ae6aafb93f7a8df51a23e03a279d4fe79cd5daa63d3de533a4aded062f7801ce1147e4c4648ecef465e7b9ea25bd86996728e3b9d8e30f6f29fda9cbee6e92d35a61a6f76ce9b2657777b7b7ac4e1429d23262e4c70739a34ce7031bf7ac0cb52f4347992aa0d0f0e4a2f42e0fb07fffe9842d783202b63f62db94c25c94a13f98e5d6e9c14d9e8f73ebf4c026ff40263f07504aa256d34e3933b9757c7093e79f72ebf4602677f3baf875d7a07df1c5175bc834a4d33ed1b574b9d8eed3e5af9c247226b716723f8ccb4ce92ed915d9bf6b97971761489065fad768b9f31bc6a3c7571f6019de7fd90d62504ab975623fc82518006624d38ec9454522d18f9e65a4f42290e6b24a0f33571e132090c7c408444d914bb4e3033c8e6c5072822527a0877109f628bde8492010d28f4a3c24b067ca496f027243510844f4253bc3a2262ee2976109e630c09309c45ce051f4f3c50017b92a3874fa8a7c30f8f195e93d130c8f2553cc7d7bee3f224c2f2ce037d5d4b8cae5297f9570bce30d8523068523fec2cf6309168e62e892b712cce47ac96309667299aec063a948e9066d83be7f09077265aa194b48c8920f72c909592242f62e4591635364c8ad132b4136b9da86cdfea625fec5686faa99abd2bdf824e6b10413f368aac9464ca61dd31060736522824cf99ba4f0a3c5cc0a1f534f49668a2296dde482d1041e4b458adc984cafecefa61d93cb455316f0e77ec2e6268f239bcf0558fe5704a64248282b995c58e07164d35131a3c2c788e9413b92bed7a0a61f829122b93381251e4fb9c986259814fc265847bb042bc146458c6c4c2e00fc0db1007f96f97b3efe1ecc8b9996f4ca5a9889898d99a4c82f131523224636360afbb258e0b163f7a9c0ad3305ac64449d7482e48cc935054e36b9e6aa04f3d45751935b678a9a1872ebf4ccf2c866ae4c3ba626adecaf5385139d2a789ef8814826406e22703185fc44124af26872bd64d9fb099c58f637ed989a7830910733997c607385af0733c93c982834b96e0ff0e8c1601334b21915312a42aeba61f2060d45aea631571568910b46a967efbdd7d225b27cfbaa01ec885896d9978dc246217bb28dbc41c312ac69d8d75c79b02ec1e49743e66ddb3691ada1216a72b90ac67b06130d00e0429444d4121119d98c5a231bd18d8a0f690b3c7a47b27fe7d9e4c7248f48f6212eba17f3602e06c1a3c9e582b96a82374d9c7845b2efbc5cc5638ab9ca93754fb2bff7e5b02fdf2bc1da86253d018f255909ca4783e712ac725132a26dc8b02445b77c39be5c8235018f231b23f05882b9aaca6049111f3212f258e2c9fedf167834955c266972995ce24b019b602e8a40d308347d303c8e6c4cae207934b94c262b308afb7e92b71f4dae22f0fdf963091653829562239bb912c1463636a08b8bfe1b58c3045be0d1e47200ea05878bfea2262e8a9278ea67ae44443ce5af84a6c88fe806e748f617b9e64a65a6f2836944ae2caac9229f2cb231c1fc4d3193cbf4f239a79d56f437384b643d98c9657249596779ecd82bc794b84f91d94e8e1dc9fe16c74996b3f92427d79f236e69dcd6b8b5c9a36d510060c7f1440d37e36633e671b3b9f27280b2d72d2f179b74de7efb396738caa7f2ebf6b2a35f0c95f22f585fe18f9ab72f3c8c04d67ef4e816561812f0e7919bcd7434dc8cfb79e520b011fa469353b63fd62364d74023f635b0e6fe7694f20c4517fd3112581345f10878fef83958c419178e779b9d76b6ec1f2387de3bb959e57c3828dc131741e3f5fec71328bc2e979bfda8ddf53012b86623de5bd04817d23ccb0b3f2bd640ca52bae8a19baeb3b6c3335c7d713397570266f7fe2fb6b6144c96b87033ae0b6ed63634207ce0b090bdabd5f386d870336e365da8d95c0507a12cf415f95a232554fd151165915b9ca15192114eb39ad5ac11465e2de1888b35c21925f16c27f517f810ae10cd0b685c6dc37dc75d9a169a15d25daed2621e15bcd9684673e23bd9bf0b3d0d58c1911423d8e8d52d2324c894ff48a66931aa22fb8f5c239c11ac6db8173f2e9279f1f31249e1257a22d222f4310d3f0ebd066b38bca156b7dc744b15c9445acce40d1aca97480bb91afde06ed32d40fc206bb2bce131681a2920a20830e8748fc2779c08128ad07f4290a9efe68345f115c1f5e1b8e035ce084773f219a1c5e6d76ab0654f1452fbe996d087424d4633bf9fb6e153be641652267d64136d56f992b9eaa3c9a2555f10fd6958084293923f1a57695db4a86541a6345009b2fffc6a3cc812435aa8f97d43a028f6dade7fe4f3d94b9ac9a39feca359f627b9008f209afc09116a34241d719a9056d06b3f73354ae2a91d9a919299eb6a09857c896433a5c5be2550785498d2050b426fb598161b2571198ca8886422d95723bdf066f2e547744bf757e32aaf417b0e644a52e1449126584048a041a961e127818cc207acd06ba13747333c08811840052c202490818543242839430200b042211294fc9ec94ec0524a291b34c1f69b916449d6a84966d2a2ff097a90ccb048b01111632141d5303f8f5e5aec33a2555f0b3e6f36539a933cc2f96a5c255f2d689584e25b3283e27bb9ea932cc992b3ec211099c4cc8c8c45022f0533169251e65bb38f2e0cc7642b9f6bd37e3a8c04def2a8fd683f1a167ca05a8c0650d6c2118e15b0168a6222d92867a61c148ee2bf178e272ec4361cc527371c5da08c7082c0e3a8482ee2aa51243b32ba71d5f62b2029ccb40d916ce443af444d18cd8864a399198c0406e551fbe981c31eff335343e0f17315c96a4883fc96c60eb12d7bc455adc3e4278f360985a5208f5eed664fec208fd626d797923cda22b996f2686f72b538b9da9c5cff6ab6d6ea2eaf4e9147b9f31dce888bae59dafd0dd47a6c313cee6d56785d94b0ae7edb4c63b96fae16647eb32cf7f36fe07e863d20e9717ffb1e3c44d1b7376c3ddc1045bfe7fe7beeb7b0593d747fbf870fbcf37a21aac7f6a3bca92e18c15d88ea71dfffbeccf19a1a6f4925b2bec4a95e93ebf3b8b57e0f7943e6aaa36ee09da9ce4171ca1b5fbd80f3923c3eb97e3bc955ba72ad12966b2c57abaa3866a838c4b9f29f5fdd4544d72ca336d3d755a4dc5f02aa51eda985b968bf14c48b8e0ab86a032b0e98195c459f470f57d12ac545bbf9d42927147d7f1956a5212a02f3fd7bccf7100812fa40fc6778ea110299cf85b8bfc55086259fbaaa82158a8b9654c3eae3a2fd50093c5a984fcff9f23073354394f6dd735fca63adc916a5857f4317723fc39ea997f9e30b07e299b2efa00b46b0bf8e9b2d0c666536481b57c9950b2760d987e9286a58cdea26ccf080064f2c2ca324d0ac20f765a6eca3503cb89740b3b8f006235ca863a6ecdbaf53e48d57f561d94731819b5580234270828bd5ac1b44a8a0e704438a8c2fd9ce94fd098a3365ffa26e4883e7fbe2ab9519181b5ca50157b5ce106eb2b5b6b39635f62cdbbf5af571d5f83fae1a6b5428aef225b2fd3a7315fd20649f6c9dc8639d926d0d57d5f79f6f5f9be19cc054d8a422fa7eee89bbe785b2e903e3af58f5bcdb5323d61871907e86cb4bbb7cc7e60ecb3075917bcf3992b91ffdbd02dfcf4514674abe7c293d2ff4262e72ef1c0aee49e47a843cf0ca7336b828738eb8aac339cd1510187f9a7e733327bf983bbfbe8f539e5fccacf5bbff3d8944a2afc36f4fdd2b78bdf4fd795ee97bff8290409904ecd177f28be9b411e8a13c8f07363333e3038b7b792467c75534732f61b3cc719cce14ae73edac208f5289ce4fa679944d32277932279d64ee3dd5781d0899f31c343b8c7b2f83147191f3fb32f976d25351791188f297c91e8e328b6ee6b8f71d7ff9caf4dc77926bb978adc0fede6f2fb9ef3e4f046a8f417f9114e229ee258d8bdc775f8c0ce222f7a42eb03fe8e5eb4eee432f023bab74dec00643dcfb0cda86f7dc7b11f2c6f6dc83c09172bf812e034983ab421e6591cc79a1c7a05bb82fb5008f32882c92b997415c459f7bc9bd14a2dabe939c2492b9efbceffefbbce97d5e7887907a82ccb24aee278238c9620c2ac09606fa6ddd863cb8d81eeb82b7ad490558e64669df0fa2b41ffb27370d28ed6bb67f515abf75ebd6bfbb3daca166fb9607171bd31998949ec541368949979462f3402745d91829df7bb08427d377d7922699beefd059a6cfb29af736067af53253f4ef13dc311186bbfbf4190a1e258c8b82477924d3e7ae803bed6d0c42605b811c78780d9419033868c0c70e3ffa356d2691d972955f87b93c08e8429c4636e389397902c555d646ca56f697475c6595347195f6b325b3c449625d3b369c445cb471913a387a1f6a167191fe918ce3aace9992a5cf64f956becc95dbcc14fdd309634a29a5f49d80651972eb384144eea414e229fa454e1dc372c8bd17e3d349b44f9b788afe9393133c797aba7dfb2ecec6fc386d6408813b96c769336de6ca65133657eef2147d98cb4b74fdcfa90b47172c5e177e8dd326d32ff5004f4a9fbedbe468ad22498838116f1dc19152b4afdf2ef93e53c31f3945c8ad3cd98663efc0cc596e1932578a86d0d9078294fe626e16586697fd8047cf89202e939e846205be43b26c6205dede64837da75be49762ce93e56b3fc4795c157327439eb48df9ab4ec9efbe7be52257bdea9eb2656317c9f4fde648a635741f2d73e1289d90e56f528664f99aec079765b932c355aaf92c3656c2b4cf396b95d2655264b339e350a63f71556729fe33a74f9796051c74d8606d0e1ad879f1c0e8111c25393694ba0672f8b183932ab08c7a4ea97d1445d1b0869a797071867352596b95757a62055cf497b7abdc5f4dabaffd7c1d34ed87e7dafdfc62b610a5dd150eb5725c88aae1e3502b483d555175fbfb1aaa86fd93699e35e48107174b4ac063cb2a0e73a5c353fea8eac3457f0dd00f07aaa3a34fdf65aebc907a6a3e0e252064f7247a98b4f22c2a473afacda2a3244b25e4d659f2c4855e97aec5595f6ab8e845648b0299112269a60672f8b183dbc0030315a033f8d73c437924860adc127ff294e5a3e653d40c6ba8d465bb664b66745c321d2764b963093d8cdf186ae698431e51f5e7fb3865ed876719a2aa0b48fa38d12f66932fdd857a4aca47c99f0f0ab56f577d214a6a5fc36f876794a67d312ed9e7db97efe2ef1e4ed2b66994d2cf017a1de8d70785326a30bd2f9327387a9a06a2534a6ffbb9bdb619097d0d89cee2aafbc5dcf0c52508769929fd90d210f59aad216a865e266507d8e0623faa86ca43e2a85041840919109ee4d6018290fc925b07084772d75fccc502f7cd02771e3dc81630a52496bf58e0ce520bf5ef13b07f887e40e6520ffe1ef43ebcacbd58c5ef6af543a06c22776e8047315725ae9550384a9a7ca9af3c4fd5bf1f02f3fd7655cbc324ee594060fff6dafc62340ef4dc77e02813d37d2743a1d0e7e81c0a51f87508bd867ffb91bf07811e87409f4cfe401f5ef6c2bf20cce4dac5b67fafd61266a1707797c95f0c97dbc5edbab8c93c5740bc6fab5d9761fb4dfb39edfb38a134ed356b6905479939e70c51ddeb301fe70ee7f9df3a4aa66499ac81dbf6d63e078eeda22693b74b5f032d95b16e712ae526e72627942d932072724fc9cd048857ee42f61b94b95d05b2b75dc40fc277a6a40cf7e9f7238fa8fba06f1741e1284393bff771ca205088ba610d35dfff6484e42fe4ced5e7ea83e8078e13e4b419fa50901ce242616bdf2873bbd0eb303ff4fe32f982a3d7b251de0781d7c5fbddf7e7c9640ff4e1e5ee82e32d22d3cadac3cc4db6c49c5b20cceb048fa44c719db34e5ad335cb7865787beee7fb7b4b707f8749a71557794f29ad5efd62ee6392abbea7a7bc92bd1f3fd30f3ffdb6237994c9a08fe9b410a5a3b3f6393a6b214ae5750865d46095ef5e26ffc8f5b18a68431894c915f4e1e5d02d923f10f85f286d5c6c69a3699ad5ba7b033d1966ff15b8617edc1b86382ca56f2d28f3ca0c5759faa4138bd8496bfb5d35e8ae138cfde5a50293a607f16232442c37132172f28899087123c357de2b7045d1975cdfc5552e2e5656f832f8f7b57638feb036c4d1efb232c355f349fd5d6b28d3b0990cf145ee6f47285f6a84ee52d175cd325659d68c7446bce79e7b1956fd3b57dd5c7d2eba769a29ed3fb0b23aebd92f66bb3d5793f512bba83928b3ca0f6e56b3ec57d75c71af75af7d85559e1aa33e6dc341d34bdbe83295a55cb5f9dd709aa97a039ea9daa37b507867aa7e7f3dbcff4220dc7b218c83f7869cf69df69d7b9a0c2f33a53d8c5f25e015070641b2fd0fcf42727f7e31244f694fbf180fb18b241735ce65e4e4a2a6b9ba2508787cc95a7565edb5df5e7bcd87c5c9b7bada46e38001e512302605225005c4603b7d219fd31081b5bf5f291804ff0fcfc221122952f96c90f93cb4f227c65fc6e62a019da2bf449629d55e5c8079e4101b222d7973c4936860a76d5b0e2c0e59d0d7a17c199adc75ddb63d07d22f86fb224b29e587dc3b70ec29b90b49f78eb31714edc70003ea3828253821522b752aadd4e4a5b57a7736b2bed7afb5ce7046b7d42f0dc1f49dc5c5ff86e9a0eb52124c5d941ae83550f4334e8484baee8b117df7c5807eca6d4a5f9129c8eba7777ed775f28bd146efa0dcbe985188d2e617237ad701da00f2f86670917eef7cf7dd45ee7d9cb2c6838bdcd74f87bf0ef3edfbfcdfc059233defe5fc76cc4e363750870e6879fbceb3035ae72f66cecb796077c39634ee4b70fe0527f7bec3fb3f7d311e90df7d17c37bf9fdc4df5f07e4d51e668a9e0e5f855e861038f4f865c84333a8ac006f2f63260fe2f75466fcf4e9634c9212f4d241534ac9713f41f99cbb94dc77f58bf140f7f2cb417374f4e98c6dc60b0c5fd097cffd0c3a6ce0e12a8e96588027a539648299198309b0ff4b775843fd481e107d35d47cbb11d85904d227e0eebd17fd8a040621fd0fcf228548eebbb07dfdae7e31b57a2e5ed4e8fb1bca8a7b9504a26e8883f5e22211235066910835e221a4f5254fd18fde8797370e46146eda6b0fb6e8a21350f2dc00bfbcf2abba2aa77f469e3fca2459eb154fcdbfdfe09c2bcfe2aafaa0d0cf7711fdec4420e843607df97d3fbdf9c5d490e8438fc151e6defb393adf10357a1deed7bf5f7ff4dfcbe46e1138026f8b4095ef6f93c99b4a8323c5a0179238597b18ff40bf1ec7694dafc0dacfafdc6b9ab6f2b2b26de1c8b2f2f2a2e35eadb56e4d93b2af89ee7eb3dce4dc4c27a13cad77c11c9def0d43dd12aa17f43d539762d0a49ee7e3943daf56cff33e47672f447daf83f7febde4b8ceebb80e94c91ce8c3cb5bf817ac12c78576d14d9fe0f4b773ba6cdc24865cbdbe53ecd560ead22576d1c5eaa20fe964bdbe435fedf53b380fafb9da617a38eb76b073a65db2e6f60cdf9c7c5ea24be631573b786abe168e5786b667a51e609fd597600dfad33e8ca59bcd99536bfa33fd4313037363207596a024b7ce128eb8e4d6a962ca4dce4d1f21d3d50c4fd1077df77de1080aef0c1769e7ee1b7a1bfdedb52f669be1353a1a3c6fe18c6ea15f12024fdad229fa32600574df8f328f3332fd2df43d53db6fa1765d86efedd72ed6dadbf7ddf771faeeb5daf77ddff713b46ddf757f2fe8e3bebf4e2677a00f2f73bf81d7e2dc21464b6aee771ef8028edf6f610d17454fdd6f9ffa3f8af95e6fa45914daf0040cfad06ff7bbff1eff066edbab3ce97d7859f438b80aff7d0de4e0aad1df2781eda24a88dac21a6ade7e0ba51217450e9421041efdf6f83b3047e7ee3bed8bc1233bc2a3efe12a70f471caf8e91783435417d65073f75dc8838bde5317bdcd03bb7751f4fdede8c251f88d4f72f1ba32f7181c59f27d4cfac20657795e2871ee69e50accc170dcb675bfe580838b57ccf7c5171dae92b9e3bec60caedab8bf3fc305074c0776deb690e35c460d9edf4c86f82294e7df4fde28745d520253d4c9c32ddce1a96befe8cb492995f31641e627eda5cc6f0fd23e439dc8a0f8cc9d174f2bc9b3bfe5e2ec0e5d880fa9a172485717f2338434bd6557d03d16d8eb9a65ec59eeefa49433491022bd7aadb3449120abd3adad2e35c2192ec27039128ebc50c72ef7f71072bbd3934c4a7143849f3c364c34575cd421c22cf7e37e924fee39e7a45efd62e85b1bc325a568bdc060796cd80b726c595bfbd2be24e51a7e27abbbcbafeefe2115c8184f707f679984dc3ab059a6b986a7f94e6e1dd82bf7bbbce49e73ce9675b64b0d49de1678a4a3579f4e1b35a4dd3223f70c5f99666ac0d85081230cc9ddedf25a4780e5231cc9234b3bc96dabea5974723709a36aa054863f8f3372e3e89596021f17fcec2cc1441256ff0cbdfa27ae889980892a6e9cb0fa5bb977824491c7193d4369a17aadd483bd2a75777799579cc505878e286a3c9828a94fbb62edea93b1b8e0d0610499075ba90143135ba9103c4a29a5a1917eeff03db532c202ee7e99165d8cbffcaeb91ad9e448bf5c4a52f70eb97fe426658d9ef097a3b6d5dadae666d208449c25df6a6d59aced5c3ae4f3e8e12bee7180a1c9939ce5fff0d564c9dfae5da9b1e4b3d6beb07c99fbb52fbcc8fd16d4b49659036905c71f14bb28bb114796387cb5cd66e081811c6238500c8123cb1a2892c863f3146126a59ccd226578729125cb2fba4943402a30c95e4f5a797ee74237048fa73c6dda067dcdd923d89c7316a1489edf13479eb427f5e6f7e835adad7982ae596ea6f4efcbb0e8571ffbdaf7b04090c8b087f63704a28528791f880d51527b1996dd3a26e699a22028f8c5025564fa5dc0a0906963d12df46bb8a8d98ed558a5a9a85afd34a33cc82035997e53aa1a5d605c35d6c0415f5c6ad4997bf5a295e98d91477c6bacc63c45eb934c9ffb691bfe94baba9a24f4944c612e524a690d327daed536ead35995527fea14971ea222e079fe40bef7c2b007e8bdf74220de83b698ab9c4829abcc9149944829abc75c25a35032fdea9a3057d5584d42abea125aa44f5d994a49bfca96285ff3c05b9770fa1a934fdfcb48da6775102543ebb96b9e7bad42b7d0cd73cef3ce73909425c87d32ec3ccf3f4f82754aa6a00681aa946ea1efd2c3ee1619be8b54b6bc6f167d79f37de86f00813e14f680a487f7a0d0f700faeffb667d17cf14fd3a0345c11e587f668a3e089ccd5ca44bb0cc9ebdff7e4ce554dba85d74cb003cd325b60499fe6823d39a854c7f3c40a6b36ea10fe32c75e649c9b5a8940fbe8bf45d80d59f1afa96484ea6b648a69426d32199526a6f32fdeab2e5aa912553fa2c5deb7a08d635cbd8e1e4fa72f56d9d7ba06f0c022dcd4cd54f404dbe3946eece7a25e8b69b25d256e2042171ec4ccd0d4263e32a22d7fb91d405f154fdd1e336558b798676e64a01d79f1b69e646c1cd64c72777d6d3aa0f58a148b0ce2c583fb0fe78aa7ee742b8a44ac9f53b9ab621bf7637b9c266aa95450bc955e662ad9dcd8f5c12b9fad7aacdaf6f85b8eafef7322cfb1d01d07fdf03f45f0804897c20df83401f9261d970fce1e32a28bec2f6ef5c7d6fc7a6a209fe54bae6bfc4914a1240938021125043030cede3aa99af9a55bfc264aeaa3e5eb368558d4277e178eb14d98623a5828a56e642fbdb0cdbd528b4caced8af5f7d5c255bb45f6972c5f98a15e4ee7a16246921779b37cb1de75970c484dc759e7c559124f7ab8a2cb2055132ecc0dcc24c9e4f23ab72e74969c28c2da2236b926dd801201904a6fc03670b8aa0c85dc8b3a01784dc61cf8222242f2b6290b527e5fb9dc8b320a782acbd05ef77ed75dc466a10c8ffcb12ec971525c896c60ac93587cd15943db4415cacf57bd08f317804f91ef409b0d1094840aedf30aee20526f9d02df5ebbbd0abee12e4fa35461eedccc98231b287a365818a4d41ae31729de996fa2a5e60ec627d5037048f76c66adfcd6837d93e87d3364a396cee161bcb16f4ae9df1d50a2ca4b9a8842cd666414d95a219110000a000b314002028100c874482d17834902469fb14000b90a24666461d8cb320c8611032c610638c5100040004044646d30a50477779970532e9898a085fe9cdc46fc0d4888fcae9010666030042290b8cf6c165b5abd044e3b859675b2e3344b9ffcb160c3569ba56ea2e3c8fa6979e0e0c673e94d7d7373c1a54bb432c083beb4b84f62c325f8e6d3744445a9ae00d506297ac701da1112e4879fe20efb4a3427acff7fdf78cb90c4816d3024838b6c5c6398c18c5bb29682bc77cb264b643593ea2b8c4b44d67da1cf9a715ed18dc1c78abeb96cf3c5e10c5eaf0e040093c4dae1c6e3a278b99bd4c6717eed2a38cce9f17536ead1863d78d67032b2b1d25c199bd9351e8fcd82e03a8f1a2e8561337f1fc7e642673c99c394c3a197492fb37848b91221c9b3c8ba909f4d204125638785a9a7c7dc5221c35370d089cb182406883b314866509b974a15ec3fd79c79be843c58c3ba857a5cd974f1e9cb8571e1b84f0519f752eaf73cbf208543683aa30e48ecce13e0fe283b3397e2a2a18124c064fd2e0d91c19fd51e49979fc3257306baf797c43a65451933ff2c52451b6b463eda6549a04d206161c4a6b76197924e81ea41756e3f92280e9cd8f3081357fd009b3e17048a4a4dcb76b9801e17c3d49e7f6cf4941c2e19595544c5d79ca8b59737fa599bb091f3c80b3e486fd939ef8b9993310c0ccd6f979512a2bd6fff145f141c413717738cabe4a6c22768bda6418727b3d01711416344047dc1e841f02d492df6f5742e87bbba28879cc5a0e82746015c61100db794bea24e1036caf46b0903138c43cfe56ad3eb686ff4d1f926bbdb27367641f103596693d2318cca6419ce2f2b71fd4661a46a4d6a707dedc34d03f4f711da9171043ff77d7cb030cf09ead62639115305dda99cdf7dbbc0c609c693faca949194c9bfb4dbb5b58c1278195990bfc1da30e6475bc75924520ed832a6582b7beab14a222523388ed990a3165f958c7ae967202553ddd3f42f086bd48948245497700be43d5a70ac59240a08f9131669c92a0e740d6292260697580fad337ec1b26727fa7de0bfa1d2ea71cd330278ed179e991c2fdb04a3c4aca6c78107cee580133f4faf26158de428e97c1ae2ba219d5b537f4b98eea2c1b6c753f8dfeba286c1174e61c739981444e731d735a727c3deca68f132570f6c317123bd4ce76af2577192d370b8ef0403eca2b017fc041e513e00a5b9bde830244118de423531803daac91f3190480a1cdfa66975d34dcb68fe4364443805b98d0eaaf8b8ef04371810d8870218d526780b659d3f5ef5fc8f5ddc7fd5a0558062393cd260a7578b486d05fec8c8d2173ace8caec3102b1acad6e11aa16158406d848c1c973a31ceb71e499e4f9e2fc3ca76aa15f459f2b908211d8f516124d1818d3bd73d61d560f67b5fd61cc33e97e697d44610b06c58bdf2e75432f2a0d40518501cc4693eac904060caf9b03f74d19903f63d6df7edf3d62d750257f043c30e0d6798517cc2ccca7e3f71a103463b3295403048b90db67a2405b2a8300955f7820907db3854e5a81a7b56625c91d7a8378da075f9767e4f865cd26a11d4a5ed7c663db09cbe02a184fe49a1ef780fe05b9efba1f943fc534b0a59ab01ef980274a5fb7d25feb4e370e137eff7acccdf10300e244a1622597a5779c0ad3906318eb3ded2795bb198037d4e4a5a0a3725c0cd623d2b408578e9c38e33dd14c21e98f0b12a76184539b63ac0c112c26af2d2d5381562ec2b3620e8b9a9cf102111be8cf060436455f8aaa3ef1687219200333d1cd991acdb75183e7fe941584c2bf7122b7622bdc281366c84180f75c4a5a0d4bee0f0ea05e11c421c433877445a071579741872018e4b7743a99ed80b959e0a5909d94e1c3b1b7de832863103f9308e3fcf07039c681e03c83d19b282b402023a7511322e554ad89c39bc41bb0cb567e2fe8b055c978488eab411b4b9cb096889593846a899daa9600206108a8ffd82ae4a81f63e1238204ca1b9924b408b325749f85908b0d41ef4d0a7b912f3ba67c380f2650a65b53f713226a6af44a73e09267738f1bb1033a1e7a1e2afb652133d5730f42a56b4dde38536467e61eaa7803d95530708e6a61bcc1b3d687d2db42073532a1fc17ca4abc610aa0df5ac3adde520015f03b22c0e992c47db4af65624786f6f6240f0205aedf31525ad0d03cd70a20ff1cc996256f7f1c46ccf90de8f90fac8626aca5bece5de0587f2de2f5047423e24492ccb3f93e939d2621a5b619d75ee642ec07eba0a05a8031dd427509788bfe9360e97c5d5daafcd5b9fd0b0bdddbc68d38d63744b97068c851f05125002cf13dd6f78bdb0dbc1b0008dd148f1bc1219552d86d0d5608071c4a9fe3bfce89dd28c80864ddbf357d4bc26b85a8f10b2c4c64b808c3332ab795d050b3a5ec219ace57a2a3ec585cfd436e63a2d8362805ba95baaaacf53eaf830a198498064ac6535cfd54295bed2f882508ea8d59b0749e747a7a77cff7095073f6a1633a180201e27a73f6130abc6a0af0518095d102cdb25aa4921321ca0f48d4bdc7b541334845ab363d4c84258db11a072ae0ef4991ca8fd9d8f20f1719ca07bd7d2933d23881bfb07313b587286170c09e3312a069cf323a28872a60ecd8d4c3b8358527aa202885ea11a7ec289a07054cdc4714ce57ca793055d70fcfdddc6881045bb61c57ff6ac0bb6ea49399576a5a9d085a4a16656133c66f8aa5fb482fb16818bb3ef880f9febee52dde4ca7c6c9a3008c79562fa51823ef9a770caf19f7b11b1ee175dcfb2cf4a17e7b10d999272af870d41f697839cbb4062b4da3dc747a1a997d01d61c2e30ec6d4eb188c50b090df540939530bf8177a90ca0c92c660a3b80947010b0035830e6796241a7c714be3a7e60b23508582b1de0a0591fd8ec775010b901dcc947c700fed5f66881fac12d3b59fe350bb24010363be94280857a18b10b32088e5a3bc2f3492368bde35ecf5b43af20eb429e79c2dc956dbd0c427722afc0ca92009eb83b04ac44d0436eb3814752c502339967b9cd6e23e8f53013b4f8b56f1006b0a4220489fd80d6f14d971c8e903b227de133c196a7ca4d36273fb3c21c8aff0e16f92e08b7c725eb60b55f5bfec79b0978c4675d452d5cfaa9a21270b907c4367176d13008bae68d4d12b8a0ddbce48d0f02a88be7d2bf66b59b295088dfeb782965112e901643bab6438833e9bfcccc72abda99b967d7fab583a932ae178dad5c3b311ad4ea895fb6f05aaa7e32155e5ea4611df1c5455f96afacee9cb77f2f87ab7c823ccf02491b25561854aa7645a2c274d7446fc42543fbd32db5cdbce35f0074eba3eb552b3079c6d975ac652cfdb37ce1d471ab9c0f0bc201711dd18cc21e289e76e364fe89ef48519d51703fa8e39d9fac6875e3391830a2ae305151c98c92d48e6be77a1ffc00beaeb057d9adad6e08df3c60478d1f11cbfd4a94c275f8999f9f5cd78b19e52dafb16bf5fba9340c2c2e624289fa96005846116a3b4d4f79fc6937165a14d156def79cfaa46b16db1166c4d270c89958158ac2ceca9e925ca9318fcbb4b806d33a75e3731d5734518efc643cae73efa4536f9389089b3e2f54c65cf14fa04e31b51f420dd9530b9c9f234af197d3ab5b0f786852c33021ff168d80cdbb8d81d4551482e689c1cfa915dc6c1b81e36adbbc5288ce046d9a5a30adca64be5c242b2603a25446b95b7d9680e9fd28d25484c34e2493e9a89e2516305d47b3a1acb1cf5bea8161164750086d31434ee482d615020f2947a7b54be838476ab1b71e5eb609d660a41a20b0c07e306fe5bda1e9fbca84a19bf130962f51047c0d81c9003fbf42eae5f969ea0cbb0904e71cdd57e9f2c0c2746cc32e22a2e0345ba135af77c6bcf8a40c9986445fe82397eeb5380d215788158fcbc3713cbe943d8e54f4419190866bf350d93dad66777749bdcc85797d11c2dd8314300d27a4f92c67ba7a5d973b0ab82af95b3ded9557e52e7c5f8f98cb82bdc834a2ee529840c81f23ebfc64b8d7cb01d9ed95c521bb6ad956c513ef88303c9cff4bdcd0b5cd5d9d1eb0957962be26a0ed562acca869eb19ec3a6e800c16036301377d55452e758abe76201031e9ede9d7d904e5d78c34bb5a4108617dc76a76cdc5495bd921669c69a6be966191db3c71cfc108f1d90394e7a485d53c08f2306c6ea4ae6739770414425989d297fe44f00bfd622a26e523f0823f82af5aeb179bb494c757f3ada6aad3d5468dfbf83457b15ced0b5a7b723dc94af2e20ebc3437f0a5190d4b71b289a7bfb473a06bd7fd708e6d53484df3184c213f7505b11cf0c490e1533ef0828fc4359115149f9dc7373b2bba227c129060f4987e0ea14a8154e15d5f4af6604e12e44566f8bdfa0ed8a305e80c6293f0a13dd8b0c1bd3d8c00198032a81089a549a01fcd493391397359c30d1a2bd4bcf52efa36a2a2865177c7eccc064f86fdc5ce2c868578e33e410ebbc8b7702211e396605d903ddc6c4a108f2902fb137334c614a419bc03738aedb1b874a5d0b11a9dbe1453ac5271101ad68286b1d84d9f436ef00736216583725cb8a25d8858ee67cc594c2b5960b24096a2fb0ffcd9872d3910a261bbe6a12f42fa276608512571189a52d0ce63a7eaa7ff50a8d5b1ec21f87400b233ec807cedecd4e650026b9145f7bcd03980f6788da23ba829050d7314715aea0d387fe6b1288431dfd0161b8b32de3d60102bac01920bb86cbca0c81a1103c7ccdd33d0b6e943f5db51a2f611df7e0a167ad910c333e0fa00874d95e13b51a70b63e863ab2d5adf543d6c9ed5ee34c59a8fb291c46182676458733f8b84dba5c4650eeb69b18fe1d3d782c58425aea6bedfbe183eb08edc6620ca9fbeed7bf015b6ec07541d449bbe07a66345529909f3ed37ce70b256ed819b9f56db1b0ab45e82acc5eb42d071981c4596db5996a21ea2af0b5b5bd1153c7d615427e32ecd33a989bcc91e414da8b8026498696dd2ae36a0ead5e4a7316818a46355d62ba512696e5f6a78c8493d4021e71d4b5095a05b05abad64eef2b645e5608cb2427ba02eb9b13bfd815ef441bf247313cdea5ad6ffe2a3e65e9ff585d3693a59b4a0222e0902f8f4468bdbf0b7900eed03c73411c62e0611f7722934580c8a729e9ef1cc261f3cc89e09bd46552748e20119a4a40652d95865fbdae6ae7412f3546645678c7112ccef02d2e2842e0409c63ed45daf27b4f2be9798359fa1fd3c9e5821585703c035da8e99bebdfb09fffc21aea7fe21e17985bd966fd7f4f44178f08f5a926720ebb544ff365583c6b92ddf1987fc9cafe5c3531192f9dcd601dd88b83456f80637618f830d979ae285df2b4f482ebb006d403ba4de1e6ed4347cb221f0cac2fc9ab1ebe0f4d3cb6d456acd021ab611bce7fe8f69285f0fa0714b174e5a07665cb1c86c4ca93977d3d85ebd730902043309d717f520e627ddcda0955d092fb25cf0129c44f7b9aa96393ae3a782be4eb2195c02d07047f9a0a5fcc40e663e610d8c95267d4b96c13bdf2f71b9dd967b58edaa584a2895ecb2fea154264732971ad5b0a2d4994955f6d2129b34433035c047fa9fb9c0878dc7ec193a006ec2fce9e5364777696cf5aaaf9c6bf392cfb2765381dc8a37ef3e7859f7208b89a472e44294874d842fe78064e27c4b56d3c68e9249826db6519417e5d12c5bc07e04f1dd6117bfa111b8c11049a190419469bd4e442cefa0249c3393f8f25d137e73cfc9d08effa1463da5b7def2db5815e0db922cf5eeabd97b942ab917cf1e0c69c4fb049ff24fcb45753ea604fe071e8aaac428e86d9ce54e2c67fab976d76c34391c316b983963c29945326bcfbc5f9599a8df93ba39047be5f123eb2af6dd1501233ee2b638e04240dbf4d035b4d5c5af4dfd2788b2099e92fff220a3eb0bd062acbd655e883d9f0c27fb5843965724c0c9890e58aed2c09e9ca8fb88c452bf858b8d1fd33a308d174a91d1590fa0d574cf6111c3c08903703120fb46d213b81e4e9240a42a926513ee436f95600b8375cb5e173b889d356e76cbebb04c8bfe7b04524363a5c24b973b8b4dbb2aaf8229e41ccf9829b75a0e155b3e6fcf01cdffe88b37485f6e8eb18cb436751d648ce3d2390c4eb341f9f2eeb8c6f67c3255c3df94979e249a6f105f11a8c1d318bfe5cd09bba00afccd13e8fff8196f4f551925d9aede8341615a4d5840ec82e46bf41c323e123a505788ba0fd7882dd19a1268552fb013c033722dee4dace68ebeb687846f5ba7a3f093e2d9259278dd0f7d465967c20bcb2c02328767a9857d77b5c42c3b2eb111ee544a8d504bbc8ef28756214684fa4077ba6c97234260d5f70c80c5364a9e9911025bf971ff4a5a6bbc23ffa12bd2773d669235088dd0d507ebe42e50082395edeea6835b47281dd2b3d92e3ffefc2a54ea71b1716dcf288dd0555532b136c5ef8e3c00c53e99766493ede8bdb652a13042f3055c706e67115a6a886a4def88b2c685aac55e4ace8a909be6f446d222e47a474b7c5aa3a29ca7a74748af80c5828d29210f79413efe70debd31cbe4ed39af6f8122b4055ad02db3fdf5c783dc552f8322813edb8b8a60294672380b470102987e12d50bc7623be5f31b3cc1e6b8d345ab81a4bd3b511a129c41bf3372f9d10821430995b9a09bf05c397896117f9ebd038223f49d45895c904167cc3fbe22071b67e11dffaf55fad73d83a220a2aae23da55415e51f26bc8c5b20e78def904a25527227f83b4a7ba7fe867844af4b64fdc2e927da272c014cfeb00f7e1afb50aee76aea6522495d9feb338a65f7ce5304dd843d291d71fc14e48195ec0e839087a37f125dbdd72a27fcddfac51b2105f1854e14f058544ec72abae697ddbf2d5cada4f1e06e2d48aca78147c8f8e3fcfae824ceef50697f58da1771957f700834a79a56957482b9d1770065bf961a0f708b63d6e56c30d63d1db5ccfbb47c32bbb3697c423bd21359291ffc0b0f1b2cfe7718e7f82a1b4b896343c9e8152eddece58db3579180c2baa8a0f3ea7ede6286ce235a08ca4fc28ad9ac9b51f4e8f25a1a4d6681980e8e817a59b81048299a5e7606b9db489a302e1daf257631cff427faebe9d55d72f3532267c2f91693e9b8c1126019421f7033c468e2ed0bea0a15b0e0d3ce6f416eff406a326f94401da66cf84f9eede67778c41d596533ed8efb0a9912c6d98d33445de449b451d9b85bbf30b24a4b62ff428b57d3dc7bdb0e0c65e6b1fd87f1106485c6da62dcbb131071e90b08952872067ed2359c3f2362b21b154b8678504443871af6bc39bf179c3b15b64f46a3572d41edd9cf8e1215dada5945b9422e6d88b61b6414520d9d2dd56ab0d7916f041fdc4b46f918032eca0047bf034baa0fcba1ea5d7ff1f132ace0d11318dd2244daec3115816f282a5053fefae59d707348e86653d1acf4f988cbe3e0b5cc8ab04d70e6049c8c3e5053d9dabc849a1a4670e90deea7ae6db0ec53db367d28b560f57763fa002e990d0a23fe3b874c9634c7ba279336d5a2a1bcb3dc45eadc28a49012acdc95147450c65d13ab899f60bcf256dff206921371d45aa07bd1cc487b8d2e08b0591466325da05589b3be2a3785b9ca81a22b7699407ec3f49ae6c47ef2cabae1d0fa9158e0678aa68da8715bd0aa3603003410da8647b281e73c70f1046e90248150a541dc7facf9cc63db87742ef2a6ac9f97787eef8f5989cbd4f9749bccc226976e59a85bd0f8a44972e6a4aea9ba6ed4f2486876c089cade89c6af9a0600368769a2c380182faebd2f4367a0eea4f6cb2d0cf04b77abc9ba3e2d1010a73ed320c8f3d1c599d6e6da06dd01b9b368cc496e7f4dd58b99849a4938d719f48979a3836cc5dd28fd29da4c11c06b6b51d8a296bfa0482a6c51f5c1b0541a4ae7ab4e9360fd270956d9eed552d49d0fb5464227489ed1faaeefe9d3c6f4a53d21389ecaa572b506bb5ce7953de159827f0f8d34a47b76899fb00be91a23611b1b7421180a6c15e252d9717430356b839eb65abd6e2587c1efa71d0b3076ee1c19ab0044598358a5b1861921b7d62761afb877e87c4e21fd0eaf2a75d907e165e2edb529b0678fbc114a6c6e711b74fc6610ea416afaaa2104d9f16b096d7c981a606158f9b402d6f3f76f26fc45b0212dcfde94ce3ad1755ee7afa2a204909a3c516645fe9e3f343c8e99f25251e930eeeb43729b0b4f5f5a3576306a5d3e849fa23eb4674bb4b3cf3c490d98dbbd6bccde6b05f8fabb7366478a20f1edbead106658b0b7ba8065a56980ed7d743c20e1bb934c8b63db941baab1eea21960a78a461197ad609d3e0bad918211a822127a217927c59ae2bd5ffc4211c2b0f485636a8622b2e63ee5bd110f8676964abbd8fc9584f5cda5fec253c9d7d3b144a54ab7aa532e98bc74bd46ef5224c07870a9a197538af798f842e6d6d449642907c2876a61c1a243f619f7c952ce37400cfa07606bbe8538b79f1e1465ce9e5c3f453007c40741d0025ac10041e9885e0907889ec48c69c591e16192a72907457427e90e59d4666f8e8d88458a05554884b01ed0866c299d9ed543f291da262ef9d060b57bf451413cb93b2587ebc1b740a4e39258ea6ec44c9c9272a8b7f401800b33f87c2dcbaee13e26be6de7a094d18e4abdb1965afd4cec1144bba08ec413490113e248291ae559eb1a38d40e25c58510826d9ea246f94c5be6d780e9bfb889964a11d825a9ebde8ec9743c98a4aa09ad2581c6c19ae167bcb3a64dcf167e734c047a54a52179730e3199ea488f10887bbbbdfea1350a5443ab3b63655e204946d97bf809bd515e43a276a019343bad1135bc43861726fb9bc5f3e88a49bd56dae792baa2370791d055505f18206a91b7b01c058444a246f9b69287d27ac3848bb00cb09b4fa304c3a05f6b5c95ab82f4f772b5110f3c6ff257dac8eeefb822da98173f928a8f9911ff2b5df1c05cd8b9b3c7ea92e95d888878c71e4383672150a3e02f4eee0b0fa92be25772c9c3d995ce1a3122c7b444757077a1c21ed6477de604ce594a333e09a1b81490107f806d034ecb80e7a574ef3d074948b3e3097a014a28b814b8aa39e0a26c3691b265061a4425811c7cd8ad8d9892d9cb72a72b9cadaa4c76509a8af5e7d988d79bf9e59a6095940fabb43b2bd9fb5585980a2ec9bfd49cad9c43c2c730358d31a556a652678285a6c786bfa6a4e850b7d37383073101fbc4862b972f7d4381b573c528c827c15bb814f44fe20a5482d6d2045520ddfa72e3e9c942b79b55ec9c4f718907368a6de26b90b39eeae22173cd4588f61b5ad3db7df955a4078f1b2e63a63be4ea556188a4bce84a770d89259a06f46b48c92f0ce06d4fd9201145b4e16b84481d4e8b05d5ea74d1a27cd22facbb1193e7260e0875b01d85793250a8297376fc7c3e4b4c6f832f0c47944838f38a2f51f213e30b58ced445991670598b2a31b42d7747625d3473b39e02dd101164e879b123dc61012283bc9c99ce30a719d36a0bab79b99b7aea6072e74feb045fbd713ecb509018263d73ce68e382e99bfdd8544abdc3b47b08664f8430aeda0b9561796f53e0d60cc3ec953f3b4c51b3f8a21cd33306807cfdeb7e91b82a49899d08a7adf76bb5995ee99b5b2c3f5ed9f726028fd845a3754b6a6637da3435eaaa37a64117bcf58df679092e420a7983e9ef1c3626bea3253e5114f0218eb0277e4cbcb31f46a7d290449003944865087fd29455af2e95bb6c2c7447cb73e3310878d7f528b504eb9997755b98d9c389f36bdf53d89e6b9475155bf4bf4ab80c756dbb9601046b21815bc46efa1835d0c107bacedf7046b98846e514cb67f255ff1d6fb7ff64dc415165048f5416532a55461f843c7a761e808a13624fa8b0350f2f40e9f5473c4089d7812269dcfdc942b73d1121cef7e13b163996697c5ebb2d88e792d008bc065c56da2918474b2566dab66acafba4cb05cc20524f84b59bed7aa0cdeb84fe03e4a3466732af067cf2f4d5b8512fd63849b015bd49c9c47e51f95da3606db3e5c339660a4af72ce7a1cb485be853b8e737adbf2f858c85ed0ae50a306a36466a161b935faef8860b915425fdb66f3b6daede50827a04618347f39f3bc37c78d366dda0313710a630af0bcb25adbd999807be1485377c88a278ee81145f6edf3ccd459775c74044dd33609d8e89eb36d4cbd0c72260e74c593f4dd4444a4304eb492a9da67c0f13fa53c250df4470005e2b80c2418f390580431bd8d8ffe8bd9eb16288bd35d3250d0592bb08dad4c06263cb5d501fc0b53b0fb7b55231c3dec32e7342c8d96e6d5c4db688b3e4b1f52505e1e2f4c055fa04d12e85a9ed4d4dd205e0302846bfbcf727f1b73903b338831f1166a0eb59b9f59c0cf1752a9d3e29254b8f6dc33685904a07b8d85c0050df280e832a270fde410d7eb5cc022c20b95b66ee1f40798a46d1e1ae9034b7a916e7166c8dc8155dc011eee49d88cd753082bf7ac9ae78e643dc3de3eb78805dfc6e010e7d2cf25f7619e7040e4d1aa5b3063ebabb3fce13d1913aa198ff441b5561e1138bfbaf1ef1df3696be173c28ba89c7761ca5841f1d416f151a99186e4bcbed7e03da890a5381cd07af894a6c26f5cac921d564e9ce055486011d295e5086ff251d1b4378d9a62966ab630c39c7cf8aea727e60ab007a0aaa4e222c4edde2841a031aa082d405f75f225d33e5e2d16cc5144aed091129eae29d487c78de76d1cd8c696dfe487e09df9e6ee020c8713f5948998086c0992af662f4e8fb019c51e6cef23810f64442c1e78f4e6eb90b32fc168ba8f8c00ab7ee68ffada8741dc0b7121b28be9d18b69b18a2e7fd67e3e2fb6bf6e92163a0fc4b09f6c52f4701ab81c4fd6fa20e86fb24379901fa45857f99c539f795aa106cdda4fe01dd0d5a198f1156ad649dd0b70d13a0be2f0dbb1e696494103cc4970950b209c766e3d3dc6e170a9fba7e7954ea5710558346d3f984c7462241c7c6f558adfdfc0adad01cc34f7956c6aa04fba103aca5df9fb18fe0b880c79928b51e04382d602676973a6579d2cfcc235eea894590f6a2da97ab8441432facf6f0f7fa7db858a1a3debec0458d157925da9df9b44ed8598f92846c41b28eb387dc1a8873265e794897ff98262c5fabfe0f74448ed4ae84ea6a9f031e1fd2651b683cfd5e9e555fbffda4d93fcc1a25feb75ea637fcd900bc99026fe32d1bbf289cf570c199144899de4f2830eda5f021e014495c03155e80dd9b1be0ca4cfd12062634a0b6f662d8509d660dabb71a477db3eb9d553830c8a2e0f3e1e2e7e03520ddeaf3610a78f30f63eecac7904a4cc37c9d498cb7b9bb6b9a23d116d74de5c0881d08d1f9c833ac85b57e9fdcce8f5222b321063b37cd59d5fa57d564a84d4b127d460c02c8d42bf3c203539b8ca6dc6d8e37ecc6ff1060c90e811e50e1ef9f76c57482fdc4cbf89e9e19cddcbe8665f949c7f7a1e4233046f5fa109e11cea3ec29a579631531d7fa3bc7149626144778b0699f45b7645188c71f5f6a1611b2e5f1a92c070609e387987000d606b2a1933f5ac4352570c43be6f28043db3e16bb9b18c427192ad31e1b0479cfc76ebfe3f1cf6a33d1a24e7190f691a705f05509c2e3ebca00a2776a68b7ac2805c2538d8064d822f0c099561ebfc617c6c1e0d679442c9b181bbff7024f20e4fbc3b865e87f7f6c3d73ba48147aeb88398a7237052823a9e63be4e9f28bc8f3a7456784ee683899dccb04328dff08d2a236075c2850b7a410c120aa210537ed51e8efda2e020515ad1ef0b7c128e4b04b1c0bd314fd57240c10da87cc6201bccfe6c23c55a548a4f73f56d6898dea2101afeb3ac15ab7040a89ef61079304f89357089f430aa347e3c2c24652be4487db87741846a54cb23e9bf4e356d14136825c36f12631708f6b2d6b452ff555b700cdc53cda66ed68a04f6931f4346a41221b8630a60d16e75bd1bc1a68a65f44531f72bb7aa2efe80a18a023ac518716337ef725dca70a2db7d12b1596cbd12498ebf83fb6734f82ea594bb3758825913c1211d5bbd487986f8c29355e11e616551f6c62a5d20e42096250188998f0ed8fa070f204190a3a8fe281ec581d401cf88dd268fd1214eaf78905d3042ae52a3fa1fba2d833bd4bb718d2588bcfa6bf20a310b424dccf773f1521f1c2570b7842b5599c0be2060a3d8002f04fe89a859f7726e176b983393c309a10af3d16c47f89c8c67df8e0832923c5fc09b4a16c26ba5acaae20d6779d02c45293d7a812844b350c3ae066c7c3d284afe05f8e871fd93e13c598bd01e7af3682bef79e496e782a703b57e9664b22930cc48bc1a8a768c88822589350729f71e0d4799547f0fce0af195d856d2964e4a1075f237d797ba2178bf5f1f86d3893215b3051d47d91c811476070ea102ed537201a40638ce482bcd1fd08d68bdf5430611f4dbf60235f5b57d2f1d56ebc21b86af6e1b6c1d0ae56cae66d0e9fe32408381e68056ea6b61c09978f498bf7e3125201037a9aaf2cde8135954d09d0f5d8e0208c3c2f75e53580c6b52d57c8d9390aa1eb93341093ff268fe239d595b92a395ec412bf5d1d80b84a61f846b63ad0d8a25acc81fb4258916a7e6b50f1f9e7957d80afe74b0b32f5106a4ec9bfc94b1cd1ca4d095ed23f79133734ded25d04f91910fdbe0f2961d7a9d1b42851a4501bb4541febbea9de7996d9b1e54fce6d387dc5ebac84d96d032a09dded12c1c71f5ffc1e30926ffd27edb91c5c67123b7b6c62a19cce82aaa96b3c1c4477f33a55ff87406a23f6b8990367d0971da87de64bdddb541b5c167cac4cc6aa2266099b5d9f0f5d2037b2c3c3475e2d36431392f945c68cbd8d365589c1da2ff19082f975cfe249a726970f4406ca53f316a1fc34ccb88f020e1da2494de03df66f7f15672af1d63cff0d36e4e8cf3becb9df14a2b260fd7cd5b0d6f368854db0eea380f81b57d2977f891fcc1f495767f95c17b23335eaab50fedc756ebe1770cf2669ebe490acdb9224eba24294dfc5a7680eb0842419846a6a8531558f2f36cb000d7d86b4f7a429cbb02b56c567fc949a8a5b49a9f4c2a0dc9294c77549f612b47880190e972a21145a1753b4cb423966cc28fa70f95fb249e41f2239d3b0dc2b90f951fbf1c0bc41d2286983bc5db6ee92d56a09ff042ee368a61890d0e5291adcdb0737ac641cb99ba88b120aa2b0d1751fdf191e4b0127b43aa5f16e09e41c9d5954511475728a230cd8e63d24f51b7127362656dbf8ff2bcaf2ae66f4b0b5d5f62613dbbd5b083f011e0abe23b2e0cb3e82ab47579faa3b7f3f37ef3d87f54f4fec4881613d37ea4710b3092070e7e078ca8f02d1da3bb692a66db3610b6d00f4caf15b7c867342ff277de2d38f4951b180e0ae6d62d5188933b4a564c4b76efe604bd91a363077ca5637e1e1971c4550b33025cedd15f10261132231507b969571d505a93ec0743b3d5bdf00b38caa1f31cbe1567bc269e6b9a8290d1d5a8260b8a43f73bba07246f1bc75d588fe1245ffadfa6e9eed11a582711cb8d739bc582522a8705d6d0a4fdd324ce6f520901c8faff339ee27b21050f324afb28a03060f8a126d80186882cb27ef74c77b910778a2f54c7a9ed2a579a84c00aded7a21255de1e5aaf4cfad2b42241b94b48184afaf0dd65d039ae05294d513c5f2ae3650af93805e01e63e6722c9b95c54f9ee86ba8fa9655374bf939a28024f904b5f73db948afc61d16b80b0136b518379617b73fe919c935e9a93604440ec3341a280bddff36e7e97c7a911b259029033df0be921750307150cda46c119b383c61e34aa8a4c19470729b87f254dd35cdd0e671076f820987ad91cad3ca0e1ac979f4549916624d4bd77fb6966f2b991a2a1b994dd15c23ff580a13025588599f117ce4e8634c8994ae1f2d5bbcd976c64685f898ed24ab71e80fb264bc234e2581bef17afab4d6d4cf981fcdbf9487610ee1f646ea6de35f48f2e94fc21ca883d3dc9e5bced7df730edf6f7bc208887ab5e89330d732ca0b6ded3e798a2728c047e05f0f38de2b7b68b21ff2d2278a4577ff81abb3cb26b1c41b0acc5622c7ed67fdb5d0efdf38c7519cdaa6e0a6b97a2025ffbe05904052401cfb9230e549e1a376231eee4cfa0f682222a9c3449eb8b1d8ac878499d5fff26f243c5bd078f362677d831d96f109b92284b663a67ecee1900fbc201dcf0323a7043448d1962709aed73c3522157ba6004dae7aee81143bb8a5e4d7ebc08aaf69be63ebceb95a5688457ac186bef3c849b3a469ad83c91feae8507564c108370844f09bb4474b52bc49ccb3ea9e1a43b21a660440062287c9d088655c30c413f4b4efe04fefea25bd907eb9d48be9fda188f9af0b144f7cf418d4bd6f500dbfd211ec9c7e5865ba1013315c5895248bb2b5dad58c1fa52b77acdfa13bcc69e1faacce883566f52ad97dfa8a45c5135553791c38c21a4eaea4a5f4de4dd2622df22e61e0f14e43616f30ebaa67b2e897c88200f5eef613f540412a4f41d71f0a826ba05c1e5079e6f2967d80b7e9aed52c3d2f0b2932623b2f21d09e59c2ca9970cb03c3d8a92457c0162f192e072712a394261808ef07ddb157fc21a70f86f632ef5407fcf570e786f76f0d73a367968fffa0a8425332d5b0e9f6ad74f2cb7e54e68b658ed1f470c61c4a57ff229f0668492d97bda1cd9a21e1b7870b91edf5a80e6726c4fa3a3390f5b430b3f75062dc7968bf717bc52e0fb5b35f649d7074b8a9128b61fe6a68bc89cce43b33024920d4e0bd3b89942554fe55c924bb574187dc17025552d8fab6b3ab07a3216fb20e827ec94a3f67c7c6dde788fb19000dde510c75bb0221bfdec519639705d54238a2e76178df25a7fd6d13379b4ca0ccc28b83e8e594339bc479475370cbec70bb8f0f5b32ead868a79e94720720f5ee2a562cd9af08146cb33efcb04a2cea1a1787511deef7662ad98d4bde76660e1e791bdfd143fb1c60bb2c1256f01b1ee6855b675750c3714dbeb3c69c82f674c79d6216d1c0411e6fd5c2890c8e6b04006b625c1ba90ae49b7b69258ebc3f080afa5925e4a8d8640515e0b08679900b34c531616a914d9314d8b116a7b9596f84f6d5987855259c8fd09e0168616937093ddac1c031643e566381cbb25539fd28cc42325b2e5f79acb3e52f7c7f0f00c6383ef4419ed7645480d8c6ba410125af392c1d9a829cb1e7baf6b01c731ac54d1816d01385959d44da2a6c6820278c290612696d2093173390ef1536440be60025ad86e8e1fb7a41c9977ac7af02780775bfddd290ff3c125f77bb53c19de964c59503397f691264e0e5218e17cf1832ebfe638b9031621227eb8c5bb534ab400f29398746723ae13fb6fa12164209203d00cc23eef2b723368206120eff9550df68f406f0f0df7fa607320540f421121a3350bc9e70ea44d683cb8f3970dd3628c17417f43c29670087e88ec286204abae21aa5d548146f8ed10dd70c24588285193ec61373c7aeafb6b0be97540c2c2f8d48b92642e9e414c811405a027182e0c24eb119e252facec215c0f45bf6ed0a6228324a05a81d34630b564c787028027a3947cc8a0fa19831a0fd219ec36f1998761e6c7d05f4316c36d9f14f70c61253a5a4359b4f40dcee4bbe11ce5fe6592ec46015756a17f1d0994d69ff5100a4a34692c2da7acd511974d80b7a6d043fb0e121983882ac0520fe5597a9f6755f13243caba0f6ae6e1841c2cc230e3c739e4bddbc9d191ecaef17d8ec317d708db0c0928e66f3b10d14b901ee9961574445689ca6159095edaaafcc4d31521f42d78a986632f18ba6b091bcba94388bd9d4f3176c0d786d3e347ca28e8d56d22b48f07baa7e32836ed4d16030e900f5225134fa57a611dcdec20887ea71649257bc9a1b0861ab781cdab9b9e8b8e08e5b2df473a4db444b613e8dd8804bcab8d8587083e8ec43a469d476a29d91ebdcc5c551a77d634268db4a426974099d4b44486ec63d56b8ff4464dca281dedfd1f436201aa940dd858ca4bec00ba50b0e10de7a8fb78b800141d144b13e16ffa966e19c28596d83a68ca65eaf4534c6e3ce5be425f976e64e20befa56274de56dc4b7efc74dc28e8753ef8747a2bb3aed56bfd96e3d32e64e200e6011c7ff420b8ac821288249f6b119ea1dc3ce55e854ec76f343a6e785327a7540591e4e32ac4332c6e9f72bf8a5e07371aadd971a74e46a90a44cac7d588cf10374fb94f41afe30683dcabeb56412fca8bdfa7dc57e8e9f80d4c58f47e2656d70d85f42a1c1488506a1b71df816293a4c2b0d9f81cebcbf7fbf3eeb02de7952633ff2d5ed1228e2718c1d52225effbda191137597cfc676a624dd9c05629179b9f576a937c990fe1782323e57c37ef8d1bbcea9e5fc25bba4aa154b10b1e4f8a38d4a8619351bc38eb53632e1544a4a17ca45618d40aff1e422c83476acb8b42db7aeb07d961a9794fa9375df1a9bb6729572f25be32eb0e1473c0067d3cf522caf6cb337bf0a7667208b01d2c0172d8926beda9b979278826800616bd56a12fb622f508e848b876526040cc1afdb4d0d26bf7e3b62b000b07bed7c32057a06651ab8f18ac108a983ba1533f422a5d930c1bf9843299b16d5f6cf5d1028aef2c7b10077f3282198ecafa584371a7db1d361c18e1fb4cd4b3049fc6c2540104f1448e0136c88fe5d252eb11a0059c60a4fdbac87a37d80ff81dc95e613e03220f10cf9a6b3eae21e14af4245ed8aea58c61fded4052a741c9c27c73831713530ab8cf4480761c5508540f39877610166d3de026924261758507734e0890b611a4c32932f577a2d3a1dc80d2b860defde55c2f197bb874c2db09cfdddbe25093e2a917a1d4f7a3ce44a9b3360b66fa9385a056054394a24ed48ace62d04fa7f00affee00d70619fd0da3beaa8d89147764b7d63dc55e7486ddc067b136a8279b6cfc07a2752abaaa61b17aa04e36b5025da6b6ce6ccfbbcae52da028cfd64f94f02efea4d41b2fc62d4c85e164a2c7163b931d4d681830df293958a7a2608a02a060f679129ce283c3762e06c9f0096a685b656ac0a77960f26d3f7502b0705cd5ad75cef8a258a7d1c8a1925a67ea00c90cc32dca382ba262293553a523d50f13418d8641c5b64d6728a5f196516c76adc11dd47619bd0a6bd7a7002d57a549e6de7a241758fd1515cdf02bcb4609fb4dcc8d3e10570ba13f0a330599577eca4595690c56bfcfa9f9ae77edaa38cb07bc51fed21c337be35c717b0ae4bfe16274dd504cafc2c7072324fef7b89d7c0cf337779901140e2dad6eede21262b025b0828e33e0b28ab2148b63f02d238a72f614f1ef5f2530d35af08f1db68f0cb806290bd902f68f9bf45498a2f82508041a774af548ea042ad14b2bbf924e86f79df9a43a4ee4cfcb15e51b886ec0e757b1323580b7810a01007ca56dec7aa440aa2d1b801b5142cbe48afd8f425030eff8e13ac2f98efa97629a571a0065e59390836f6cc28c8a7600667b68d9d0973f4ea401c2fb5a0bbe342d2b23c270d95f6fbc0ccdc05bc45c23ba3f8a5840db18e4393531f3c9fb886884787601b369a74c8cf686132ca610da0b786f19858b84dd83cb9b7c300c1b0c6b3582d10b9e9697ae8976c54605cd3086a1f03bb91f45f1f99856f06555b170e4fd68ac7ee53f369619be58a6e23ad993336351e722af9c044cdd88c6e575d1a6cd1a5c88f487010de5e5a412e9796232c06d21d58a0292cc56f912a9917a13d2514825939afcde69065644fb0853a00e26bb6312241b14945eccfff67bd630e130e8febaddc1acffeb9b370efedd86aa18afa6d1b876333a74d3734f934c22ccf84976cdaa7d965de5869d6131795be7a65d88f1f178bbb86430717a4790f72f5743824b71bd50dc4820cda44e8518034d691a756c57dcadbd3c969154b879f173a85fd66e500025fe982e22be2ef0f61bac1ba25511889598a04d4b402e4423c789f9ecf0703814618bb6c07405ba912d4ba5522109b67c3efb051c5b133ec9014eb622e2b743ef2370096b01c9aade98bd70213ba3492ab6ee1b45f64a9867c1d2641acb7dc9069053c6e93f591243606834d1aff81d6d739776c1c1c8d2fefc38db3b42fed808428a250d36b0870543bce5673f183da0829cf02110d1617711d7e3b4c242b765d882eb693ee911881c4a8c18f10d47dba52108052960b0ad00fcab21cd24f06c9e9bf1a2652e3ab2a4b6760bf744c9d2098b6c9b7bf04d6625ee65d9d71b293edb4ec77c1f74342f3cc3b515a65f84a5f9bc48e1475ea0396bd01f305d5b1723989600c54c1a42ee330472c97e171194fa98db7954a6865a32a20cbddb088a627022d677a62ff3f3c0fa7fa89ad99a4ef5945564b7181730996d08d0d402bc7469d1b7685ee49a1f34de69f608108b83a000c50824f2348656bb492158c240b5792fdb875ead41f1f092ea7a9158a3989f0ee44e59a1db9d79af69c6bc19223347d25680106eef26582b56c846d8560922eca7717b2699c6b1abfc53b79762bdf2c157e70d05f6225c95905d0c7705304434d5c8cb3e56102ef8b7b1e6f7eba6a36059886c6d7edd920fa401c21d610c1836cdef9b0440e1b86475fa6ef6d6b4c0e49c607cba44fbff4e89a98a6df6a42394c33e8ade0dab1adcc68f47f3065a70de40deec5f4f99dee3e39d51e79c98bafa25121f67845055c29c53efe491a68a686e0ee89ca839db877fde106fe8c179e82d93fc379469242a0ae29c8c329da4093354d101965b50cc79010ca723faa8a347815ef2c1a77353917a15662a3895ccfbe6679d18aea0ab8bb5d382b94780fcac3db9c5848d9adbb6ef9cfbd0a14f2b0dd15c4f62bb67ca9beef1a53a357eb89a924e7d6338634c21f08c243201072a358f90c0e393b189e48293a801286d0572ea520b719d2715b48b45140270fc4fcfd1f11a3d5836174c1df2f70ba9628d31a9265972a1d4c40fd683c6009a1601de5f806af7b6dff54e031c6f0f4ea958b154ff05d0c866ac056a0aca6aea5a13fee2fdfa978872ac050b299657dfb3002d55440d841e189d12414486081055d37c5be2e6030ddbdd211461dd35235d43900d42509af93ed642b2117af7e05ec6b288110161ac56d1cc96d9098796c1510a537ebdb391a2676eee6fd4a50223cfab72ddf3a93497e103311b10443395661f497ba9f262303f88976718c7cf21f80ae6ed51783f0660037ca834893cde84b3dc99cd20ec058b250f5a1672d381207c49204afa3c2830c83f6865379c3fc739e0e3c6f8438d26c8187fc848024f94a92b0c7105fa0a764bf59e1bb9cb80275fe18160de5f8b062d365ecd78245b0b6565a9ee8824a2f290abbb9a64caa103c33a4197fcae1b257aaf50552724e2bfb008f1ade3fb93127ba4533fd53c6328998bf31bbd60461d1199b04669731445b29744976bc90a4c270fbbc5b789a4829bda59ec04147804a0fe5fbe2cf1ae1b82d9ee798fdd468f30c52c64fea367976230d74fc0a0746b45751e1ad0f3c167e3d152098d35280a72d00228a581606ef0ca2b05998a0dd109d7c0c253e2ee2d04e80541fe0e68ad79422032a2ef187cd80cd3b748d2ffd1e11ff53f316a3e074dd1c5ccf1f3e6c0208939c2ddaec7e738a110c17fa8ffa062a1f0c6078215dab9e74a66593b8648784a4c8d1620fd5a40913122152b8370bfefa93dfb03fd008fab644835abce8a2c522d25eb5e88a5ae66ae7a64f2d3a3f3e5b7fa42a68cfc16b3172e0fc7185b2bf8d9f713b6bb46a8c15b9a1d23f456f9f02624b5b1bd17633508e93d6a5f012523053049060144838962c461f07169d5388ea900eddf91dac2b46dc822cfe3122ac1f5ba44efa76f3b5324468f7031b0e36e40eab611acf93e3f4102d662b3382cb7b69edd890c6d184dab2b290ae3656b5fb95118f34d9d31b2f29f376993b4b3c3d8924999c558ac4f9eb72301aa5e7492753be66935f7c7ea6a2978c01aa1cd15922267d00b39f1c2b6b0c86016c1472981ac082cfbc60cf23d03118ec694dd3308ef00eacae7da6bd329f01ba18017612616143e1fc6ae57320a0ec39ea3094336f249927a05ed0887258c065e4eaf2c05700b0fe37cd068c7b1c320ef98454bf30083822147d9d2a7d903019ca2b1dc51eb11185017ebe10730ed91d42c94a79a6a2f1aae00b215b36ee7d5ff154e8ab55b0ae5af2597d440e67f16f9c534e92a7025ec985802f20587d13a1a880c05ef200175f22ab2b2da96758d757ef8066b7caa91ebdde630a02ea9f7a6c14bb06700283e655b70d81e81e0b009e8e11c1bd79895c6c348b3aaa9df4320ea525324cccb1574c7a837d069c5181b86f739c35bcb506052d380f879023ce01dd1fc0ed0106739aacc2638d1e29ac74af856339f2363256966b273e4399846c791ecc24110b45b12467be58e386f2a658db8b37075be1e8578c811c6407a94cc59ccc545ba7c53a092910ad8d9086e396a48c29d87799e10763273b4c9210933531749ff02313bcc918ddc255299d097a1350a035dc83ddbc520ae6f2fa90293a32659292253305340c7b928f5c5886e52a17f505e9d4a1b9db45a015ae87b5d7ca9f7a4175660f308322527d62b0c425c883482edcd57a34e6ecf07d270b7528ea54d3a57c473e363f8908f4c22a6a10ba71d6a314f7b35b4634b85f1eb19b67994f4030968677d19a816737da876a7584b9a102be0edb375150c9a84d50c171cefb2243e00fdde37064929a6346c74244bf7217c005f728aa32acf82b2302f9e12cc2539bc20288ce735c89285e2624c348454f9280e1f4769793a4d7233af510bd905f6c16543a98e1b8486ca0a9391362795ca3f0c92c61da2de2d4c7a283be7d3dd6be271592ee4c0933fb58c73f1ac39b9c73641920659c259c6e79920d15196fdf65d5abad3d208b4d5a040df030fa9cd0dfe45b06c383f86e9e70d79119f212cc653526df9fe0966bdafe2096529c248f5eb0531afe922c5a83f65413f3e4e0a2161d0c35d3d44650d079193ac6f553dff809241b486cca2bec2b96f11c91e80803b3dbcb6809117cf4a58ed6dbb0dd4b7af30c9138fba6d957f13b19f29b27b18958ac26ffea7f9b72385104b48107212c9ac16770a2a720d34e964c9bce078c59f91c7b7b039a9b899907d2c1081ec7ac4c8aa03cb40ba563611ed49c200ef8191053da5dae34dc4daa84e8c2ccee1ffacc11bd661503973a6d432b55a00b75d9fdde58a602e9883b95dc130457fc67842992764cf8d40e9542774c0025058987ea5ba7a368a9bd5ee94de894632e6bd98c411f72708625f7fcc8b86059617ed3b94b45b95ee381f2af0bc3f6aea48300331c98502f588861b9f9276b03dbca250c5a19ae902d3886b05733c462dd6e8dc4fc583b52a8b5fa6a916b343da3c6b3f956fcd4884b14e7ef740775348db6287a25fd322bc55a5080fe3aab6027a8839be20872511b12d379efd95a83cd783659db6f0aa4e0da28aafd730b5be20633959701f0470d9e230c7bb16b94e8317cb94c47957629a15efd338e65fdc0448a4f8c258060a632460f5ffe068e6acbc41d5f4c4090b21281e03320de03dc08ed3873c6f93a64f3c69bdda093a739b94e7bef2bb3e9bb4c7c1abe81e34b39673b6291fd798096c74802c6114f87d923d99e418094a8f350f3ff900a10071c0084261585f864bd1c4e10df8c57921010a4d47a4a027a686c01e886c2aec29ae25895da6d8a65d13160118d494369327c09be46474cb3fdeeb3774eff93fd6713930fe54c5279750770ad4b5fa8a773adc0e8901bf32ed97c2f0c7872c77909170acb40e04d8ae0dc2240a70e3a4bf13a0620d21aea212aa2283496cdf0ca67af6cbdca67b5e8e5629ec3889959886a12cddf605587982dd5d00eaa9b86586c142bdbd6b2ddf20841908939b199d14fa79151d38b146136fd1808756ea312dc2d413980e7edced0272282a03f82aaaa8e30ec088cbcc5db51fcda49da6cf59e3b7189f66da268c6ce1adfeb57ad6b214a0d18e6c5f84d4509d7125958ef39a0564f0f86accd73748f5a1b9598345781b42c01200a33214a331cf8d60b3db454c8a900fb6b742d3adef486198552c1f3d6d4b37f34a5ded179513b67a253bb39a6bb56c070935607972f7507408d195c8c4411e84e9a78d3f7b2105c214ca0af5534c705181d00a131befbb68b91270e8a01e3dafa68a10d6b41cd7304bf7111956415ed1c80a396651a01eeed93e4be1b70bccbb732e12d9ec01531285247e4f2fea1a3185c504a15bafcc91f64267923223dbf667e94b40fb39a884840a0a66ac28db243d0ab10146dcb96188e09b2114b30809c149555e25e9d9b3904f62289ef716a496817f7e8e6a830c13abd6d2532aae0dcf5dddb0f2cfc047e60357041f40677f52875e5a1e941ea5a5e08968895f0d3d5be7f969e4cd2ccf45a6793a4f5ddfdb2685334fb12a18cc7b9caaa0147a1b4c1eef4e1c15552895c110b535b6fd82a303072e58670fb50044e527d4e30a043a108da4ae8158fba8166b31400e170e8238f0336bc1d187c3bb8265eb08c59a974d8306bf9c9418cb2cf3431ac42ed93f9eefdd1e73ba9a4a4ba158c47148e06f1a5c11f63787d4e1d31747ebda2b1f149c1b0bd06a06147f91abc37f9caa4ec2c1048817f1b777e9de182f2461ec9a819680d36bce83f94b0c0b43b9d053b01798a640b23d7c2f71844764c7aa1226980e431d8409f3158a50822f6ced18ba8f33fd65440f77a0f845b3f164058d07379652a29ca30aa5dc2c248116cd889634003bf83c095bc93d92a9123936932a327849523513d802a60eebec6982aaf559b06230c00687851236612e679b0def2ea75693896ca9773c2939a52b86d37ef88434997a9811e10f333dcedec4a607d4a1445c8fea18fd2d579433f7224bf4027ac6ea31ea88f01ffed6c3762c3a72069a575b383de3d13aa2d981feb2d55ab4ddb09a38d0e09a5d7ae80564e447ccfe1b55adfd7c4068f77c125b4fa4de055b196976bc431acb118450e529f9b7a4bc46d6948d56508d1613050b40263da858292b8097d343fd350e5384a67d24b445b7b1522c845adfdb72e1df7376be8a941e3259b05363b109593568d7d903957831d85c413e340e38251bf3e44532d4217e0845da772fa6d766cdf864596fe4d90f1bc1522a98e17f66b1975b11ea96dec0720fe063c0c31b543b027c3a3361b5c41ed6ecbe0996b92bca709fea84a5ada58cd62c888b6a4e5d4e38dff42f5033968633f22fe11b076544ba0d33696d4504d658dd2e66083239cdee50ea478b86fd507064015e513f6eb98420a683b86df498428f9b8a6e65d876332230272b102c175daeff6b89f0bec3f033e13ce8f48784688a8a8d1e854fa6ea619dbd3b593681144fe63c8b2d6dd760d4fa29cf1e99b2f369c73872c4e102e64e3e066703e2457308b0ae0e23dc58dbca881d0669681841e0f289a6d2671b356b35d47403c1d63efc39998a3cf56e3e83d4655a5195e08615d21b1971c0556e5be1abee73cf99618410706f227c9631e11be3d9528a4ee557ba52ea15d1ae45e4ab59c33b1a14ad02a4fa42c68ba2d7278560bf5480298986889148e9c4010f855e596710e9e1f3e6b8dec92d9fc69c59dbc4155f3b6cca51d424f98a871525bafc6e3f0b8319a0d05889f29bf4733604954c59c034ddb1ea321b5894d4b5002ce35efa8c109802833bb7a4f2d87b849a48928697d294c192b1b90d45824244b76e7a56eb3e88e793025cd85c370e8e44e3c98b65fa6d439d33a0d18e97381da147166d16ec1b7281878a1152ab041a1d934517836d97c8c18404309b7ad8e1c9409797ad1566a3df5b345c4d67afe23994aaa2ee0593c2dfc26c93ae50bf0abe25d1a54dd8238070efc53d6c5b154840b7a323e5ea054eb4c5a12339e16f77b3c3e0b1c1775d66ceb909c028b518045de9a131e9ef28c6958ff0827774b5f5ab4bc51232110be6c32dfb5d20e4917eda8cdc20198d787b26afa16bcbca7099acb10ea874dbc9ffc96218da65a25396e9a621b31bfa7fe5bab9df70d1fdacdb4fb4631410f5c5d6bc9f07f1fdc5d3a78b76e53913313483f2c979a1f8a241949625b5e335bcb9a20a794f63aa7632f3a665563ce3b59b0eefd63af9152f7470f959a9a454328a89d808155e71d85b1b530c6cccf77bd405648de8554cc62a9c476deaef99971561cc2aee943177490eabcc623c595ef22fcbb6734a8f213c893c5d23e97e0bb18e0c376d257299d2f2e8e0b74274e5cade95cf2faf6202ffb03655ed703b4f3be9fdafba4f80138d56871059b13e226769ab2324983ac2b4aec131e7390abbd9025a7d186ae7b684903159bfba60848f8914bf7ae7b2c17eb8ba04f13d85e65b9a0f4210e9df2e85426a56a0c5514500546a2bf53aba43d9614060cbea90183036ada2020fd1ae99a45e80de6fbe9ed46da40a0d99015aa7ce149d2221b51610fc5394c2176a44e5256a13df259ac13a90d0d978207e9a7eec5f044801120b9ce947673ba352ca1b2cb1c3cf535c259e7c57472b3e4338f2d468bbdb33192456e8b47dd18128e4f52791a9dbfdbd6ded23112ff6e5ce7c789706a1b87ad875f616bea0b493664bd659cdb42f21200cc40ea08808d16a2730b6292056c0cb28d40c2143b1dae01cc4a7a1e6ec1f12d4ce44dfe8b90d4c809b00fd89c7b5d3ca553f3ae1a67c2464afbdcd849608ecbff6d7b3def81e3cf64adacd71058392272015396c7054467210533834ca4d4dfe0668d666f2c67aa1f21917b5576b6dea01f0061caf123b05b45e2f8aaebc32e928748dd6f9be48ac7501b39423bba7a108a359272826d081681d90535b534b608ffb0f483606e82f3cf48fe5321f0afcb98f725cd148ce5057075dfedbc14ff2ae6edf82aa5b50ffc3a6f209cac495a50bb0e56cdea7ec0a5642156beb52b1a171dda179c87da90825f32e4cdbbd5d27d258f89e4ce49b1755953e3f259657ea55e0278b48f39806f15de503bfd71d315864f7957af801fa50aa624b818228d0fbb110df20827d09c7b8cca6d82f9a4257e2a9e05df9f679365e7ba0a8155138263bf82bdf38301677457148d285ef4077338530aec422d1c828582ad1d3415b0d957256db9447a3e1bdeaa8d40e35c89c8325c4cbadd2f19f0ff6490d584fb31e232a0f30cd0d9f3aa3c55800d73f691f2f76db15d9e52473d8b8fc4cdfe40b6d38eb95bfb4599b1d689a29b89fc505b1521339724e23e28a5f79a5a550da6ff0deaf2900018b897d2cb347098cc22c775cf8581898bff04903897b7ccb1bb664f8cb8834ddd43f24efc5173a3f36a890c38997056286f9cc878e761fd0a2a6414f8f10457bf035a21a2559fa84247ffb30dc96847074eac14115ea392384e24fb0c06664c264520497bbfcc7a939ca84cf99b638b40152eaca149fada3fe835d24b6c75de97e7c7fbee70aea5727844eecca57d5d35f4aea33f2a92a7fbbaa548874547f60991a734cbb6438f2c11050c228995eb5d0315f59082b422004fd8b1f0e747a89f9400ec9be7e061762aac0ef99e4420e132ca556a5d46660320a2fb43e4d44d02c41e8483bf5fd50e25f174d094cc58f7d0acf6379b845462f82571492c0ee75bb4462e2a0f1356246e3cb47a9e11c162b8bd85470d187ae0431d87740e793ec702c4285fe31069a0e2b1a3531a20f28e6c17d9cd2bb552871715f1f98dc89bdf1a7c45c1e013c2a1574f820c79d87f49d3b7c7b4997109fee4845da36ef82bca3bd13c9071c828d3eb5c205427fea48da0af18404a528c4c4768af81eecc234d7594a8f54705b69ff193c44fc86b58472eb06bdadcbd98d273265e7d99392e520200332874194ed63d327c03bd5b016a49caa405045301822a89a19dd453568761d71d84294088f7dbe8ac3bcb6cd36d5c4e3df3dd584b8f9ffeb89d0be6f6c3058231cb4bec94d498dabf06eb80e624f72aa5774468742570bd585e64ceb285f57b53a612c79dadcf5492c0bdb5559e9c0168732b81d4f7db72567f0413e4f92a91a9fabaa80ee3df5b8db21f1754dffae17388e1d0d479b701760d8d18401509e3c283a752a60ee71448c873a609e035501ea3df5af1a28e87a93d0ea1f158b9ff866414eda913dc6726ae9362421cf71c10bb667444e23f85f0f64674e6dca3f57b85221d64cf50815046a2ec2f46b962c00dab2ca53dadf4896becb04215a4d6ff1a99d438b6807675dec60c5ed96b8490c78a38962aa1339c94a372ac049f910414dcb5754bd785108d3a8fd9889f7cca4976a836913876cdf3a09de8fe5ed65d02c853b2f38ed90b28d6fc0b66976721e7eb9f9352d585acc28bf8f848ae0e3ac792eb6f03f687f001007c521a7a429167d6069c00a29f50ad9235696c15d792c4ae639640c1d6318f8d39f24f6c1adcb8f9a11ca12002d5a9912a6905d8be6d1b82c0335b4a10a8e9f7e63ad49ecbc75ab19ee2b3ed6d4cb4c9706d9c819b7f66d50158d17cc44b94265c547b78d694cb011bc7d3eab3dabdcfba24f6c1f42d7c9922d707a1c9619282f0334c3bf27e2f499353f08e9adbf05d587b858daf34b0aa9cccfd9e8528119b16e0f8cff3881dc331406f3a5271217288e81a949d1e6f82151c84a8cdb3280861112cf9f0d37f019bcb0a0f190434f9bc9c30a24d8238a58030f911300d51e04bcb1b7af779369c8f967d1520b4cb7386604590d56b89ab24a5e7fcf7a3a3529761199a65cb9c0ae6318649f6e58aa9f37cb500d1c862d9cbac949130b1d738c2875efe2f6bc3bd02d45e4d2cf67cb12a01102364cfb8ad482aae6e77060265ce21bc811ac20fd5cf3d7e8dfaacb32fba80ee73e9c344c82b217ec36b23976e179849f01fdb2022e7742eab2bc050a8dbbc7f4817833814141baa14b621bb70449ac29c70a39849e04a3792d52ae0bb68956e899e4469860760f46ded6984131548a4fbbea9353a43c50de02c540b07a14b474a82342da3faba7abc90aafde0037f9d6614049ee4a3acb9019926da567274d0c7573c5188031b4e4ce73f39fcc634420812fa9300440c27ecaf13b65b4bc68f346e380f2a4a53944bda2b5ac591696a92be03db45014400b15e1b3d0e189f7408d64d3bcde6a2b2a92d44243f193d0b20218eda146cb3a61392136d54c8a3e4009f85d718411655ba293b015c0965928a7aad717c27613c3dd187b42bccac1f8c519fafb84503f8abc8b86f55bb773b8e1ffa6448c2c854c5010d16c1e9a0cffe5f29bd6b3bc33344e8ec029bd1375710fc4cf4e3046a0fd901103024b668437ca1ca219e1d6e705a5d6293a3368ca84d3b89efbe131af7bdc2aeacc375f8ed36b49fac72682a8c745ea6a88d7ef271918ec4612cc97310f076c622fc2224b179cc8d55281084f45530a107a0e207a8d09541edc08bc4b077454170a63bfbd8b2608d2f1a9b8891faaf55610c605391a3b42f37321838cdda084410f0e379d9041654f281f37e452ec089231f54874832352087684e5f74206854df6998d2e54b604f270422ac122f3f9801e153b61f3b9a0d4260bba3940828491f5e9282d8525f3e95c0b27912ad70b7054994a15228fab6fbec3ca4800cdb118114070ca062231becaa828ce53312442930d2b506343d62ff143955e1542b820856053403e0f4851d8153433e9c1e10607d208ec0cc9ef822c2a7b2119263d136e76402281ad807c5d91a3b0c87c6ed147c1d690bc0e482232253e1bd043632f44be3758c56421774f481030a43e59a5a0b2c93e8567dbe44ea995a5cd519737a99d9a0d9d1c75caa8c6f36328c4a103be922941e4a33045c27aa94e11105ea51309cc4f354b828b7d7b4343b2d0f50bf0594baf20c8482cd7c90a55455d3a729c83b552266aa299c83c516c278e95b0ad09c0cf2e7dc32020b37a3d2bc29011e5b572136762e1447336f11d93522a2c807fb7be41883c173f58eeffbfc6e1b3a2138d270a766273e8811deff626b17676c8c8c6b70b1987c78a79e2499c08040d90e65dfbc8fee16ff4db72946fac8c5ec70f313d89789508367513c47ac95ff98aeaaf7608a216f6e3ca34c807007ad56affde5e37356b8188ca2153fc067ae94bcec203e63e9b8329e42b06eedf49718c308561e46391ac369e67b98ef99348a9c193e3637db665aea7c559b6ecc6f4bff10c5980183b2456b0e96b58401e76a952169c7ea528c96cad4be0b85b0e7546e3c5f23e6d0521f033679982fada9089cfad410584a2c4577aa58e18d90aff08236d3c7c25293ef43b7d6a90ad7a25d60dbeb71d8e66466fd3a84e43eb1817ec08de88812749988470abe3a27006d82fb9d00add02120a86b2816c38451729a5d95908ebe3fcfdf5f1979eb429bc0ce2e1eee020a3cda703aaae29b37a3ec2eec5252e76e33276cbd14d8b431d493a25f778ae32166594ef92ee687d7a247ef1b4d7d3b72c4b815a745ebc082ccf60047e8afef7e37fd113050ef99f9b4d2c1bfafa05089eee5209bc6f1e18aeb1ef32942d73f0a851bb2b6dccd16764ca00fb0183bbf2aec7909ccdcd798ebb85bad3d921ed66efb17bcc855e31bf6673904e7f1e4998d91f8617b86f9e4355194db4701ce7dd4fc9a01995ba740bca665803908162e8973cfeb75848c66923d2a548fba31ff53f6fbe066966a9241fd88dbd667479682724b1858e1ad50aee1f27da48bb2da353b50957c100a5e04851eafe263932c4f8dadd50c676f68e475924aa429e098cd27665e8c06dd6d14ccf76a0ea741b0837a98c36320b0d15acb2b4328bdea64466d9ad1540668e592c83881fe241f48d2663144f7ea3f51ed06c927776394c821be81aefba807681721db43eab6c11939b73b9402fcbe665c30a12eecefa2d207fa879ccdf782623b28002fc6fc1a5f43e0774a7811c8d3776c4a1dcd75781a0c918c1c2e5d016017d6b3c20c3e096cf2fa79096b1304c8275f5fecc9a4c62970c868e91789dcb75868adaa9702acd6c5dc8d6d8e80877bec9801f1b86e8da95e31d080fcd41a54d027573dbcdbbedc055d4297484d49cf3d93bd6ef2a97a0d22b842a7a6d28635d830fe16c53d5bbaaa433865b56bc2a2128fe0bea9dcb08685a41c8ce9c73f9390ac5ef16624d22bd9cd66f77ba773bff3a5623895b2ba4cf3bf5fb79cb76d33f227bc7e9921caab5c071ea23561b9d2f93cdaa55ce69c09afade4edb16642d6ef5280edc5a9cb530a9ac9a2e355a444b30820f0275e8dae3ba1d0877d63a0f552152db10d56a884cebb4b09715a72da56df09f36d8306a45996f4372b64a45b1626685789384f5989e9c010c1e6bbc5ec8be304983043d32d603003569167a9ad9ee7f09b07fda6413b6f8ebbfd182a94646196dca60ffb53a027bdf75575b330bead7a5cdc7cc45144a84f05a2d4af2d1dec7485caf0930225fdd12a1103c94217d9445c5e17a71ca5759bf34c8feadd58aa859fd8fcd6ab3bec00ee07736787811705beb3e70b9d43609be320bcff43ac07b75970252f0d02a22426ccd07a667c3bf453e07df4d6c11911552146360abd1d3cfa32100d6268c82a4efb8751be1e7f0ddcbae4afb95498d61ece5ae23711dd7cbf41d915c6adb8fd701cff22a003c49a3e6ca94a22a375476eba873d5345cb2ea75cc760d80aca5e76cb744e1628644831bca4037777f0bac8f610cd19187c207724071b8ee8b15e37d27ad487c2b9256ac3862d97352bc652b879e83c22f26d88e42e1a92b20ab4aa195728ac0308d7a31dd7ce87bd127d2585b78a58d1f9c51326348528262de6a026c1cad473e19f1cbaa1faa5179bbd025ea84f0f93702419427621777e5437f85fca06d13001a29a4d971806915ab49ced88feb7c9e24ee414a382701b2350f9da7be8deb82ed7d49de0a5bd0c991ee9f61521a0568f8228f831149426601701f24ac4a734767b0c2ac8937da4620e7961dc07a286403db98ebfd3ec7b45cf1644aca0419a0f81f83bffdd53b0ac984c4bb5373bfc942b7352224088a94014fac8e3649bddf61cf2d2e01d891fd19baa58d124c8d2f25f82778c43810a1c855b31dc2b23301c7d46619cbf5b4e78dab830b3f5252addcba1c3aa26ce0cb6e66d9c6763f82dd3548e58260c1869d1d0446c076cc60ec8b1a3846e0b0c1a2f0197427601775110b1cb3dce56448040d0e9b38b87b376dff066b561c5d73731f65cd30f15a8cb2810976f40bbaa3025bc2fd5d7ff6fbea77a5fd355cffd56e1142b22c2495569afa41a7926a70b59860b0cd03b655c64184150b07e8ea001fc58e4b970c7662e4dcad6aa948ca7008c9ba2f884b253831af0c0526693ff68103364ed670ddd909d48e3594609ec095d133e36d8d90b31cb9a43a7602d20198eeab4d7c9bbea192804dbd681ac12e1aac7d0523670113296acfbf415d1b20674c7bae80eea3c44b0ea9d4d4cb99c1c18037e9565f80da193b1385f9eb8b7861bdf338f95b0f2156695f0c37adbcab50158698b28777c09829122200fe521a6aa1a4886e882de1c01ab614984dcc1e20f661b6218af24cb6c0528cc0d7686edf5101d0c59d8481c7d1b09df40e49a428affd00186ece0f561fb351e333dfbf64b61c362624e5153c71db6c4b11e6f0ab90ebcc2a8ee130041a8fcb5a2283e320075a66428571ccf3953596edb358c02f56a0350a83007b5d04270e9c282c0d00fb4f0f7b3c14b9d7f2c208abb0e4924f218118129f541d3c4f0f9cd529951e335aeb14d6e5a377fd17733f06bedfa26ae83cbb3583fe9175450c39d45dea63cab199ce3243a11aefa20cd6affb4ca20194e69add1abafc97dead6387af83fcf0d44f8fba4cd63c9d2fd90f305345b3e89f43a9d2674b74ccf787cd3d19eb53894c4cbe93d46ca8061c466cdcbb10da4cbbf0cf904553e916ae0327bc6156e9f3e4f24739685d1c403824ba01e491609d59a8361310184d37171d40f7cddf530cec2c52360dbbad7fab394d539b0e1416bc8497841604cb90b16c4d5e5e1e7f275f1d5e96c59d3ad1734addb0259fc117166cae63a50ddc5020168303fa17270af4bde0eaa995ecc571606ac40223f0052f8ed415d70ca3996221159a7dc1e44dd9e471346a723f15947855fceb8bf9977dea5fee7a207e6435c0c61875b1eacbff2f76d49767cb025fc59a1866158a43231b6b568c9b11254207eb2fa1eaa5a60839d5d5542d339bc7703e5e681ea49563cb6cfdf576952b00f6f6c50d42c398d4f585baf3406f043cdde37f6a6b8b0129d6cacd4f640147d1868b0c939a1b463b546a0e533e280af1f157815621498d488b876b35b0a7f8c0a42bf4e5cf6cb6b0147ab1bbb34feb9228a33cc4bf89194dd105dfa864046d6c020b4a194a251d7dfba7865ec88466ff809aa9c9d295c9cbaaeeede0b8790a9fec962ae798c1b2e0de51a2c3824ed22bcb5a32e8dc7dc3d1bf1eac4539b64694ce2521e7acdda30ec010c173bf91de8328b12204b91141b204e9180dfe4dbfa29cfcc22689df942aa11e482d02e759f6dcf73f280bd6625a0f7206632aecd40e453a9466c3977e003d694d7b95fdaf2253a359248e3aa2e1482e6dfca12a4e74e2d0e93ec5681804f939ad4828623dad9fcee4fa8a2992cf29c93e704455b850c081ee1cb47163a5a14fa54e6691a5d4193092b23ec1c28f67e762a375b0cc7c2ca7738035bc136989510cd1b012a568d849b601abd07bac0107d4fac4fb39c768b1796073487360bf04eb060a320fc8256375dc2802a20c9dc4ab6027d494a4d5e81001860a788fae67052a469acf1c166ec30ce4ac5d16fd3655a94941103002b374a8463faa96eb1f06e95de2bdb1dd9da5fb0d7611aba5d9c6658436e25737366ec5d729e7e4dba06ad3fbdf5ad7476ce5947054cfc03e6a50130596e5dcbe388fe235e4b011bafc5c7ec746a0e0d8aeb6226cc437aec0eef7408e4e9651fea00e43396f6eb02824c097b935a92ddb25b0b6313c3a3d0026288223e163dd82a800c81f4fccd23a7d9194e016a004a990de6242aad172123827c2f1ce844351482a8830f9a07951a00ee6584bd9e340281cc4da332de569e9ee48425c750d747d14892ebc1f9ae21ab8ad94927ee6e847dcc0b821daaa84528f120f859a07796e080684e4a6aa9e5090cc8808037ec47d903a35fd3af6d4aa17bd779f12d45344915b1cfed6d8cb9e3e6db39960e3d62f5e7870ea321c2b6bead8df25f7b3c81519e70c5e79ca29f7182715e7d0408a8eb4ec43d3a484981030082723ec9d2c96ff6c7ff14827b2c843fb0db8c1f92f1b9b04054c0204ba328fa5572050334a070a11091a13442b31d9899694f975a5d72c8638b901c184d5754cbde40acb75f02cb012b6eb0598d69deac68afcb8d9937d060845f27f6cbd87922753a8ffedc57dd768b6e4132209d95bee2df79652269902df09a70ae00af2a34c92273a59de89f2558cc1e5b90a31869e9b9eab10638d97440c442a714ff42893786c71c39af4913b63871c5c62afe814038a8a2dac208ac55ed163945a74d9224bec1599624812a8edb842d44712a87b884802ad987a08137b456f232709d44c4c4f63baa9a99d9c22924c923cd1931880c5124aafe829acd0494492270609aa490d267d248ad1a6f9c5366f9da669459a1899c1c9113d4c41c3092c5ea87cd1858a2bd2e450c69c82093107786d8bd734ad833a964e19511ee7398b9129de3e630943e58da872d9e7731623525acb4665536253629bb24de91308915fe38fe84256318a6d66295f88af82e8d1c9b337812a02854d6f02f52b95715656bb9ea710d63397f39c45c995d573162348b172ebf677a9ebc46d881bb2fe1593c8326796b1fda574a28f852f212b455f624e4542999095d8a52ca1634fc111da253d480867b07b626ec84adb9196c52ccb3cd49cfa1015c8879253017e712e032bbd58b0390b3857cd586c3affe6594e054fe04781955eb5ba56c156fc2d883bc1d0e7794bc2665110e06de1f19a70655c54d0d2a0f6a0dd950200d41b37a91f6c5077dce89c657263ccd498112546bed4c2d8cedeb69cb48b361cb07ceeaaceb729560ec71f1d7c8fb7d7b3e286d573e286b5bb5bdb7b6f638c25c418411bc50d2b953f3fbecd7ee7b9c801549f8a9e803e0cd4a3534acfab5dfc5069eeb66d55f2b073518281617e047348981f46308784ee2348a4fb225fe4ede470c6083691ee04f389b426cd58e35adfb28d9de536af3e753bef6c479765c72d88cbd149d669354623eab6b4714c7096c95aaef36c13dc4a2205c515e3118bc58e3050f506639898c41311631077b8e1dbb9957c7b53bbcca4ae93ab42a3d2b4a1144a5bd5a05113630cc3baa99b34ac24fab6ccb24e391935e72beba17629a9208d51b9ecfd9ab5c6bec9aee9d9371d86d6d3d8f4562ce601ea91f031f74c9e73b213a5e158e33b5ff3ebc09ae6323dfaa81175428994e0a646cdd3de48ad16d56070d9434a3bd249297fd937bd3e924e523ea942069916314a5905457fb68c318b51bb4d7ea4d5ba577e1ef8e91f95320675cc59c36d4a299d63a49466cc34504edfcf1268f3a879b4f2d16752b49151f5059b832e49e982174a8839a27cb83d6d4edbcc40d4117bb8393df7b8605209dbbe7ed5ef049a679bd3e6d49a1fe513c050bff90775185acfdcb33949a08d7928dd9c422ea67aba39318d1c254a03993b4e39277f2866949326d4b159199496355e30a1f19dbd0a1e15bed5f8c3abc29e26cad10657ebd66a8930dfdbb545a6a57c98248969e468aaf5de56cbdde5b25634d44f3ab3d79a5d346bc17b2464dad76fa906d6268add9de6894db00c746f25896007c0a7dd7390cf015c3cfe3df3a8358261f7d04c3ac9c734dfc536bc5abb7b6dabc5b9cbe59f8201d7c43d76705fa5c71c6366781a1e37a99a6213a3c140db06ba8c72c436befa2c81aa7f3bea8cdb280fd55914b7a1aa86ca286aa264c704503a95b2c691d25434b72849517a4c6fb3db67abd76dbe7930cfb359d3b93945238e309f7aa6020e267e8c33b349688b305f80e7299674f83030229e4cbda0939ee7ec75a075ef9313d890883faa5b90e30febf2dba27c951b12f1878ce1abcb6f93326b473d2113a86f3bf96d52da255fd0de5af9755438a1991e17765fe5a213ae762de3ca20dd3146e70883092dcf58c090f930b28c11a67178c612469730f7a889ba99ba9061299eb15c89f2578c9eb14061f4612c8a6177912d134e6020de09dc73c7b53b1fe8b80f198df8d9198c57c2884632f714b14ac5607452d4ae185d4151c7777c7ca075dd4d797ec130feedda3559290fd2cfdccd197552df0ecaebb82f088420237c269c70c68d3fe3117766ca38e79c354c25e37293a967744eb089bea87eddd7aec80cde2b5df32f932c6fc87ad66957eb8e1bfaf0018209961de48eeef3017ffc9ced78fb0f37fef49ccca5734ee6f4a96b1958027d1aaf7cccf2ed512966f9ce808852a474bb14a6db710acb364fd83871a7a5d439f4f1d46543e81f8ee0bdb5ba0d218476d138a422ba36ce6e369010071c805358cece2cb771c962b17cb542fff056551e379cf879b00416552a2eddc4d1542d1e7ef3c5eac17880392d9ced8b4ada45bd38d4e4aabc7a0fbddfdc78cb370fd602736ec012e8dff80d1843bbacd39ccd87a85cf34de59aaba64754b77dd3eb87e396bd38c4ddafc6a23ecf5717748148e5b6aa5437d6aa5456e541fac6aa6cb45775557e418e3faec74fe5f70b2d9830be8aaf0769b91282f2ebd113b2721b577d2cb79fbcd93c88c479d4b7f38d70020a2ab42b045f8152ef2eeb3a45a138b72af005ed512f78d58d9d4479f48b42a1fc7ed151b7efbd8ef220cdea62dd8109a15dd4adf484d077a15d74e576f5a93c0ec5a118b2d309567e3d1176dae50959f975d4d76a17d56917adb1351edeb7605c61840672a17928939375410600a4b92b8f4a8a56284ee545de5bad56ab95db955b5fb9f51aefbcc8c7ef5e47a16a3e8eaaabfa8afc4d711e3947719d8dd1e87e4dee7439bb7864d33649b48f3d849eb14451f4ec36763d90843b4f7de7526ff54ff4d945ec620844d103bbf843f93bb473b0d17907cc8f88b229bad2513f5dc874578c4ab8ad86a5ed68cedab77345e376eeb98db3bcc6ad8d8d8dab7ce544babf7e020a29ac6cc012e8dbb80dd8b5cb3aab5d1e2cb91c8b85e2b86af385c0fa58be3991d6db80392cb004fa2c678131b46bf320b246f585f76d6d97d6e2315ef3da2e3bdb655960f5b0c56f5bfd8372ebd635dfe99f946beef16db774fae7bae6bff39aebb5cb72edb2fcba4aa5e238ce85f073608e8d0fe1acdb38ca8b3c0c5fe32c96db70ac1ad657e46b56d7b7ab72f50f5f301aa5aaa3ac6fce71d672b6fb5863dc1aa4d66ddbac05c314daa59dd02eade5d2763ed0711f3e5bad1a38849bb82e2c7f706d3c3ed1b6721be4f6fba05ddbb655df6a7783b3d9cd3d5f7d61e72bbfb1716b6b707c8510d8f856e3ecc170ba765d67b5ebfae7c1926be3d66fbcfb84f0773736d2e6c60685ae73cfbb71e9c16ec09caef3cef32cb8e180dcae1bb7016bbbeccafb58eddabce60bef5fbfd9ecb699d03f77b6eb7a5b90f6cdefd74971dbede63e7cfac7f3cd3fe81f956f9ebbcb47ffacbcc6439f1b0f3ff8cdc3a0df5637bef9eac6575ef38545be06c7877838365f08c3dbf8cd17c6bf719ccfde7c2c67cfe6e62bf236ac95db5550fff00a8c4646d6bbce9b5ee781ad4f67b3d6f3bacdaddd3677058dd03f9d6f5d08fd637df8fc58dfacdd52d14ab1e4a5915843d994a6b545815cf5c0da1a1a1a1aaa3dd44312a8d67be5049bc08091d243d113d2df5fbf6d0f36a797e973cee8c5cb9c337af1e2c54b90da7467189f32af63dccce7752f7b94e7d3aeccd9efd7b156c093e7edca32183cf0cea1f68e997751ff14d14afa87dfeba32709d4433d53ee69289b022b4a3b416cf73c580f35507c71d75ffc2aad8a86fb7dfc78fbae6abe39393939390e8207cbf19eef808e29be03678007eb40a552a9542a954aa572201e4ca543c6ebf8023c984e9d62567384f12b0ff2602b200fd63dd5f1739ef1d37dc74703cd17cf41c3cf0ef329f4cfcaa7abc061e670f273aa8ae668e26794e2800fa352ffe4f8f4c865c62e3fc17c078c50b264c51127aed0e18c1a58b1440deef842092aaf2247c610f34513434572207985bcc4c38d30469a74818311a357c84ab1e99ca3c4e7e4e4e4f88f07cb7195b7545e55733479952bc083a956abd56ab55aad562bffc083ad94e4073ef28ba7a7efbc764f707ce709f0601d023cd86cf2e7e0898ae7c00fe0c138e0c183070f1eeec383078f272bcfe3a9069fefdcc7837575cea7197efa0f0f36dd001e8c47502b4cd1b7bcc783b5cc187a140ae5de3f2b47f98e0f5418238f429981f214fa47e5285701d5a15028d4911737a640e3460f77a05210051d4648397ce1431594037dc832a308019861c577eec383752d95ca5bfd03c2ab5466fcf02a2f800753f914291ffc4125e3063ffd1afdf496bbcae8f2938c1c7e3a013cd80cb2838b2f4624a151038b995519bf3a5283cc115a984429038cd78a8c25bf721e0fb672970743e19c117b1c1f8007c3a92c6fb1582c96fbb0bcb2ae1bcfaac1779d0bc0837501f060d3773c182be82689bf710f3cd84d657d0d195fe3de3f9dd7f84e4d8dfb3450248ac56235bc6abc4a200d90d14492274b98f1428957cd15286c7084112970307a85f76be0e8e16ba6cecf1e1ffaf80f7e3a8720f07cc859dc40e3a7cf69c6c84f335fbc91c44f2c6fdcf1d37d827ef8e941ceb0f1d3410f36973ae730e8bbce39642f404a69b8e1031a5ccec0f20a5ddfb9cf77ce1d337dd7357de70ec6771e248cefe2f861099432669831a3c3ab73a38beffcf3601dbb07ab0902f336ce34781befe1c16cc428f1528ef1d27d47ba8f14e3e5254a8a21a5afc0615ca0c14b3e13c6877148d64889650c959712cc87516902792c169be12559d2cb4b33418c1143468915245e928b2a9a1c79638b173460f90493931a4d4f2091d286146324c7154c4d3c79e365268c932fc0b062ca97579424d43083290b2b54be3ccb27cb01e0c158130cf6f939a77b173fe7f40e3cd854b2c1d78861e36b5cc783d5d42e62712c511212038a225ee1fdd50a8c5f799540252081c50c4860814510655e2b31627ee5391e6cc5c1ab9ca3789573e0c154597cc8fa4ee7bb9cef3abf597c27c6c91932f8ce7978b0ce0c2bb6486289962f312250dba3be7894570914012388b861061874f962c40b7506128ff2960743398e07934dd739cc5fbff160f70ea3f73c6f799e8772cf4b83c67b355e7ff13c05cf55f03c77818bf7545e7bf1eacbf368343dcfbb3d397c3106124d8cf1028357c84a296c81c5091a50e1e2c989d78223c83821e2488914223c6709548030e0484a33c5cc1662bc7c9ee9f839679618113fdda615b2c2f85087e78e2d2fbd95c6863b8ebcebbace3baff1609d078fb2038e47f9ca83a1605ecaf9884ff9f560a929debef5e2ad759fa032de8290820a9eb576f8f0f6cc1ab6c8a2ac85e30c115492b4d001c992977596403c5cc80023658d2649c4e0155e250ef9e96d8ca169e3513efb87003054095dba3892c3186844a1c62bbc3fe70d7e7a95401d1431c3d01c5a580125cb6b86b1c2e33d345bde73cf83794d926aa872831762d0f19a5d147152d4c50928b6984185112f890693776880f8cead07eb2ae7c1ac01d4d0e239df3c18e7fdd6e537779fcd83a8f80d84e662f31424507d6dbe42fff036e637af1288a5d022471873dc4087239abc4034395c593a930698375ee1fd2d45c48513514459ea61069b1d4dceb07107131d9630da9cd5d0e137358218006cd62d3b2fcbd8f2328d272f5df360b2e5c136a787511973d2aee82304519048101fb52b4ecf8c3b79584d1e5608f870358d56d368358d56abd50a0969b522ca3e5cbdf1e18ae7f870c5683e5c85aba1ef55b83afa5ead946419952ca3e2f950259d54d249259d542a958a4b034d21551355a80a554a3e5485aaa16f954aa5f4e57eb9ae0f2f98e6891e5e320fe69ef9f60bc40d6f788b3ebc4bdf7e996e970be686f9760eefd0f70defd1f70d6fd2f755925352724a0afc3025915212292591522930a930df9ee2d24072a979a22fa5ba7c7bea49f7614ae8db394cc5213e4cf1f0612a4c0d7da752612ae93ba5247940491e50df8728344ea8a76f4709554109a18c7c8842a150a81035f48d0a5147df2869c493463cffd093429e14f2ce7cbb67c5130a3d24cff3bcd03bfaf6a294e11f65d27c7768be9dc8bc5377e6db3b2c9d90101f7611e9c32eecbaae6beac26ee8bb0bbba3ef2eec92be3b2dfc434b9a6fdb4bb6976c2f596b2d97066a300dc676f9762b948515b2677c68436b437bf46dad524fe17a0ad7fa9043e29038248ef382133242e2388e6b6a1ef847f390e67b33da8cb6707bfaf62dd6dbb66ddbb6d9c13fec48f35dd1448fd58ed55a86f66115f361e5323eac4b7c586bad611dfaae613dfaae614dfaae67f08f33d27c6b63b4315aa83d7dbb164be3fb434d288e0f35a3b8c3871a12131f6a9aa685dad0b7166a47df5aa8257d6b4a5864118b2ccc9832a68c29c67d986559966559d3f7136ac79334df340a8d42a3500a260c50bc426354e83b890f69488fbe691417f00f3bd27c4f34dfce4eb139c1cc30df3eb934502c8a45b3cbb7cf26b56738c9f870ce19cea4efa96402fe5126cd379a6f17a4d3b73b3d7dbb8c091921c9a56f974c52ca26203e9463241918ffb0434b03913c4efff41d369830dfde5c1a4805303d1f19d0c33fa287d10ea724bebd8580f8b08dc21efa6e17300328ff88dedcce4ddff545e583f8302299f9301ac558bb0c2c98107dbeda43d03f4c0396273f427b6defa066a521aea7650a7d742fcb0da5d3473aa8fb8e0f1f9a650ca6972e65e52e90f809a3416f0399c50d25d247ef9cdc501a7df41be586f32f941bf6d247ef7ab861237d744ac50ddb8d9b6a72c338e6a36754a277506e38a377465cd41cf7e9ba2081a651f3449f915237c63cf5104630813a0a2a50aed3883f9c461fc34ca379944272c3193d45c3cdccb828306e381ff5c5edd84f25193aa2976e6d10a51833a6b540424292502425254da6a5251a4503cdceb42c2dc51ded0926a61ba585e4492e259fa528ddd6a4a6ad5a31b2475d6ce9e969daee86e8865deca5d72b97b7a881d43f61a7e42592f44e49ff845d2cd60df50f53237a24a59c44a9241b951b7dceeed41937a3e2b67bb0e4cae820f7f08bbd0bf48b8232bce0d584c46a39081d919e83c2942102c10594a7988382f4e953822c8bbc72d0c10ea4974c755ca4b4dc707efb4087d39857338581c6d18bbdf20cbd380c0e2f29a828cc050b174db68b57ab1a20a404a48d899781f44c4571c32a8bc49665e68b99524a6bbbe69c534a2991c8962d9b126d2c29cd28cd289d734eb9fd6d4509833887b7a6b85cd9374a145f4a29bbbbdb0a38bbee18639cd9b665db468798f03c7daec23cedeeb44a8b69950130adc240b40a133191952f559fc440a6c7da6a4d276657e6ad62f2d54976dda69304a2b5de1b4e2711a2b3f7020c8a7514e4cb861bcfb412d21a3e3a25925cd210f7c426ed0933c77699399d9383bedc53f3cc3df4abe2869cd177ca08b5c4406c2ac0afcce747872450e61588af0c64c9237548cdc9ddb2c833cf599bfee95b1ed91681be4dc1a67c8e3ad88eb1014bd3a62851fff09c4037cb11a49f31a6b1bc13522aa75c20b2d18415995397617a46c1174423cc4099d32748bd044c9efa10ed90e4691a03231b6b170cee92ea2914b7558dd219ab2665ab3d49a02eb958de096f2c0a03a1ee858164be512bf3cb7336c4297149dc52bbdab92b922410c7b4d43f5cd315fcc399c12e2ea93b41c8fae6ed09f93847525fd6392609c48d69ea1feec90cfee1ea60578ff96212e669e7bec8840fd0ce8d91403e9227c6b83af8271ef1e1c6c4a2d844013d70104c6236168bc53ac6648c4920ab596dc658ff544d9b960903596f8f496c768346b3ec2db735b5920d7d1d7c8cc5e40afe55dec63a5593b8d1431b6bad392d3c0ed576cd39e79431ee9954ce39e7f429e4e6a553a794cac0f42c915cc9ec3ce71482f3126ca676d12e994b29a59452d21863dcd2dcbcd43429651747da388a3d65bd2d326782707e82b4298cd3332d3297a8236a57174da2a6693426766fbee5cc420862a464e4a4816411d1983b898ea897ad351dc8c1b8c2f8900962a5087a22e0bc04a953bbe899e669efac8825275f14a4c42713faf6d085461e69455479449d4015f7f465726377e68970f3f5c9c88d1e66513836eae6a7a41aceb36b1f0acd7342bbda5d8a1b6651fa474a03c9229a471e4d38846a8bce0d299b22a5cc98dd7bd0085e3965ad9aacfd13d9c5b22d51a42ee79c96483e05eda452b2ab5d51e5e4469f51de2525734cb3a334cbb4ba69950da1edc9064f7d68b9443d1a83cca34652a95d4d6170e3b66ddb92b8556d498c9c11cd0aa9d54dab47b638a592942c592ac5153efa8c4ed953dcbc290f6517059984f9dbb66d37c8a8fd56b51bb634b4ab1503347181d0ae23370c9243ed7aea9f9bcd91d41797317dff6460645eda95c9f16569f8005993e4f1d23f9953bb3230f8277ba3c9667254f12d9558626120ada88f582bbae2bbe803adc887630290f8bc980f106a4814d09e354920e905f3741a4ed5cc49b61ce35eea91e04f925bb5f09284fb9993046ae6a1de3273ea9fd6b28ef32c0d03c9c1505a9b869a60e41eeada0b6a2bb991873e94379f1171524943d2b864db9dbe792548cf32cdab07d3b4a9cd39840a7136c618638c340619b55946e744d3d3ce39678c31c6d84d544aa2ef294cfd63f352fa94724e604a77094ef6a6cb30cdd30e064c9830643ebcd2cf7c78bfa5a3f9f0ca1bc16e9a5f33f5cf4dc79644138ae5199449cde90e94ce63dd38cb597008e793f3a91fb494df540af2a4cf531ae29cf72b85b17e4e0aaa607e0587644e33a79e06fa007d401f52d625ec87c5d6c586d1e4626c4b168c4d15515c21268a2666482197dccc30471d77d00087912201301d610323c6d8610a335209006ac061064a6e60071c4d4640812d4d4e9081c408a618dcc0676aa882892b3978e1e2b4052f8d004b1b673069710308298c6c809264041d47461c917486852f48d0c50c5c9ec032c61b5fd490012aa6101184121bc0218604208c6004623c41c3081247c0400d3934802aa64451441464f0408649b0f3061c556e0025882a492060250a241a762883e50b111ce1818e34b4a4b1810a3348aa90912e383c152d2193640d262a49507810a3060d1b3043050d64e0441839e8a00226aedc61032536bec421f40dcdc0c5105fd488628611f01c47bcc4c1248b0f61908e4800882c8aee6023e90654904004431cf560030d5ee878320357e1e4062788c4288a828a2190781222090e5824a1853402471d57aa80b2c5881d906c4f80f1b4841296a23064ac8813669250d15206951e8820419a2f70682a43471769a66823a9490c09308a78c242034a88356d81220aa2a43277b89e9c51420b186fdc01650442a29c89411a55ac4819634711223172705187105a8cd440418a2f5b0851868820c440c3633cc161d4848e22b24041b95c76d6b81f9c948952e60b154bd411e58a3688d2ccd004174d90208e26b2a082490649eaf0828e224f90b1f285490c32547c60e1037616010940e811d8393e74fd0f23426c418614559ababc428ff305c247e7e835ba1d489e2cc1b2c4890faf18b5d8ec08045cc1e35971655d40206e74eeee6e3b6ef4eeeeae417777777783e174ea3d00f0c3149c0d844d77844dc5b86c8dee6e9418377a777773372071d96d6ca587a151acc6731a4fc65b3ae7f73318bec0410d37ebe2f2b7a4e861e867ea1fc1cf88cb5ee4a947427f6881ac8b9f55baecf4d3e22d673b0f95ba9139144b913272d973e27f524a29a59460e50c35c6658f4ed99151a87f41fb0643131eb5c43decdfbf2016e99e4f967786ee7ccea2840d3297b332995c8b45a88c0f5d4c42b68bb94592524aa9c580dbe343e917c48e4e3132107abdb8e1ccb7f7cc9ebd8d48890c448b3edb2303991e10ddc8406405f88d25bc941173439529ca7831f3c4ccf380e84606e279407465e51aab566bcfac52142a94e1db7b0656ba9cc18dcf58c850f29d95cb6ec58cc1c40c342f49aa2a9cb83558e27a4b3471d953cf596e20e2c3fa505cf6ec39cb0d3f74119b4cd573961b94f41d534e76a5767138a59c3d775a767777f7e742bb9e38cbb22cebf69008eb99c6b833e463473a5f6670ce96eccae4466fdfc1de201463b441157f9a254bd94090c0b0da298b9129bca62c4347596a20a392cd6598992b7bb304590acb3b2922ee8dde8aced16b74fea60d73d9e91397db1584891b7ef0eca82d2e4a8beb1fdd0713275564f16283135908bda2b724d003c2585263c9141da4f0f28a6896182a63093bca58f212c015295b9e70c20a35d07845ef8fbf9fb3d480c3a36470d92776065193295703422a71bb2750249945464aa60d3430e3c30da41198ab0121c5b8dd937ee3d62a52e87256660e5d84833c9270dc9550cb716b13e9c598ee8e2f4a1d6b382c4d7bceb2c4860f778cd87b6b18284854ba57e7b25a55abb56970b38f71dcdaa473b81a10b3c9ed9eb8716b1519c6b558621777cba279b8da7316a1323a8bab7ace2294461ce3d6265adc2d892b37f5128d9b7d787d348fab47b82dcfa2c48b0f5d4c144b907b902bd55650d052d3d7aae4eef4355683bed6c4bed2c00c9846fc233a4f182479fe402ccd1b64b4540182e9b5ed00854c0e52ea70e2ca2b1e3147a5e720a050028269082e6c788591e9f949151c8cb4688124885718bd90e128b8c5f01acfcedc629f377c78e206a3316a10e2e235820412400e478c64a16389088e175b31f4831c661825f1439357931666a06125e90e25432ff628c440e6730b413f2473196270a17f5a8d674fa17f3a8d670fc2ee62bf8c148bc576e033fd43a3522c1653f20ae3931a693a56cbdd78ea1eba7c3cfd20c848114f2be5f294bb7879ea2bf840c6c6433e433dc271c7d31b3aa4e4c6c35864f4d4e3910f4f63114fa38491091a972297a72d4a3d363d89791a868787710c99a7f4e9a9776ce9a90ded2125454e9e7a1fd1f0d4bb88a7b4a53c65e229f55662e3e9879d25c7c35ee2f2b4bb78a9e2298a52e7b0c93ca5fdf4d4b9e8552a1fc183a9caf0f0abd56ae5ae1ebe5ab931f4ab6e3566a5e3ab956ae5bc5af94a4951d1173200e28827a8acd80d3994ae20530310669e58b98af52a4ee3439d57a9d0f8f08332545e05c6abbcb251c3abd838f3aa36c27895ca7d9c8478950bf160aa201d1d1d9d3248bc8e8be0c174bc8773c86afa50e77bf8ecd1638d2ddf834c13df630d24dfc3611eac47081e6cf5f31dc891f41d38043c5807f5e673d0f81cf7fe51798eefe4e4e414b9f203134c5fb058ea12c62b67065e609901146b3c8941916388cf5935e043d6af747e1547d1af562bbf50fc2a8ea75ff9cb83ad5ca552a954fe1e4c15c483e5d02183efbceb3adff1d13f3adeb90f1d6d7c77d385e93a57a1eba0ebbaaecbf1ae0340d7755dd7c33b8f5c3aefbaaeebba3ab4bcbbfb033c98f7e8d1a3470f778007eb01803a68780078033c18006aae90223dbb9c9352211dbc92762fa59452da31a594669fedbad85130c440d29567bf34e979724acf9b9dd6cab6d1f20d2a2cf238aaa76008829f1ebb256b4e4ab399c9ce2273e0454fc87cc1016d3c0cd4e3b35742f714d49e82a1093f41a667eb43a54adbe6947a2d22e811e7d1fa4481941ef50f4da244f00f85228a4ca25078583bdb3c738a54a9ac54691e611040781abf6779f4e2653dca2758b352a5be89fae27bf5b0856a759ffdb6fa853c888020a994ce4a33882629599c6f3c31934e89b066e419eba034c6e9db27dff28f074b6ee729dfbada75dcaed81bb7b565209c457997ebbef81715dfb35cca37201be759ef94a3bc735b3d5867d983a5c0f8f68bce450743fad11381ba269db25e4e4aa99c3215b333eadbd454f2e9ac316ea8498f4438251a3d0a96c0646041f23282d13f52d35c73e767ab76de74ce6de6c1b85abbead372adf68c88eb7b7e9cb2c1aea5142f48294491565024326102176e1818260c5d1144ba2e30acf0f20c0cf4a5c3605b4099d8e832c61d2cefc8c0f411491019639725872b5d43fabad38748af5e39b7dc1756306cafbe351816e1b6f881f54eb1ac806b2391afde7918c35beb1c198072cfade774c3f82db07e566b5131c618638c317ac7b1be7e610ad13defbcbdd3dcf3bc460670ee79f4605e8344baefba38e22d985382b4600bac1f12c190f5824ce3f41c4884327d5802d54d710f45799de5b8877a5882ca3dd44bb08157887c8d3e91a3c88c1c456676421f484a5f9f03ad0539dfdc6e1a1c373e573d48cfa871fcba6d4aaf32a2a2e3b6902155d50e37e49818884e8624e4001fab872a233443f2f908e628714f1c3714404ce90510fbe698b8a739a61c251f485ca469e2914e7b13edb487de8a4164f80886f5d35943c73be7c0b075c1e9e3e50742bba48eb3c29da7418e805850ea9e910549e491684ce431ade2e1b2dae56124ea8e4a1a1bb18f6f532c561389493a2caf94322806fab1f0b1c6dcf8b43b0616fa278228300cf2f8c9c54f2cf40f77b93588c562446a4b725ce87acee7b92020973cdd1e9f829c7cc6b89a9ce92ec5eac51a704f3babcb0df92956836f8f413ef1133f752094547bf3805e6f57f050ea207a66c1ae3373e35b0fa790ea994b4f08c707baed2b8e87d27b75dc163825a72f4bc1905312d2c147257ef3309382529d8f200e12f70cddce898144eff854049f8f32486f3848dfde815d0736d2326ced1fe906047ea69ae2447db314f4151990b9f41046989f139d4fe89f9c085a991a4a4102752eb949a7c53dd2b96fc7a336450401041e0c14847918487ce92e09e4b9840003753e57bc744feba23bcb11c0b0455df3164f704e9e297aa56903674683fc63949ca6f94a73550ae575617d2dd332d73c11e28d6076c12d0b0e673ee425ceb2e4e91b07a36f3781dba50c9fb9a5a8b80094d7f1f8a9a2350805863e1e18babaca6115c282cfb2183ef3203dc3fab569c8547958571edeaf44883cf58c81bc503d6e5ec339cbba8db7730ce485ce6f80bce0390eca5b29e7719d838d7b326fe7e0ab3c5a5f86f3d19b6fdab0beae892b30bc5ec77ddbc73daae943a64b7e56987d7b76bd5ddb7e7a0ac80b7363202f4caef3766bbdbd43fdf452ed286f4f319017987bb42ccbdcfb24f764de7d937b32b71fe59eccb92fe39eccb74fe39ecceb57b92773eddbb88747a472d41feaa1e6b5b2a6795641ae337a06c220399a99196b99966552ba563516b23e51f3ca40d52ddf944b9e4fc60c9c4e43223e7cbb89ce5a0966b2bb1c63048974bfd35a264fe6c9cc3ce764661e43a99d1d831acbb53073a6ac392705dbc9764bd8a49956398eb39e57bb54aa753d9694b75dab952bc6c8b2b1b9b98937edfd1d3f9b1b1c1b1c1c1c56cd0a0747757170705238280f07076700dc0d523625a59c534e3925cb96a8704824636deac68eb99b9bdb87ceacceeee83247aeb5ab9753825b9d17bd3bc21cf9aa561eac39b20a8eee68027744774bd9b2653759a49a217d3b47e5763ce2a44c9132e57252bafb3233f7e426712f87c46d6f10dae597d51eacbb555f2c77caa61849275a564f9a69502a146676ce76adebb1646666ee881b63ebb294ac5a75359e6b767facae3fee8f99a3f74730c4c0237d0dcbc683ddd8dcdcdcb06a563737aa7b737393ba41793737370340c9d81561a34bf0c6c81971190ce78ba03d3358b9673a7fc033f4a1349b599dae751aa744adb5ab37cad671472ea7c40d2bd7aacf1d71d93b0f367dba47e96d39aae38e5c5b533b29d7f484e8f855a9562b0f26919e45d03e73f648c83ef3c11db99973cdaa46756b52a89a9a9a9a8c078ab96775c446289c1131822c634c5294e5c38e0817b11cfbe72d429cf9a01f2e6f1122cc871d6f11a2e9798b104c1fbab60881c573cf5b84c0f2d1bb0a6c2182680b114ab60c81e643de32c41bdf600b42d772108f5ccec2848908e546ef7802cbcc0d60666656348372e6a1967df5903efb64201c754679ec805867d48cb049a7945e67b9ad6a9947427d2fca219865ffd039a5d75835aaf5cce8a449fa8da8459f518b119cd2b5216e63f42640a53f6159856d73cd35cd27bdfdb379d4be50dbbc1232dfbc7a2468be81a174cdad9455468f04094e0dbc60d5a6675e091e09349b34a354daa085202241655a0852018581be512b071e30b9d96c61e78748efa6e64476be7edd14733567ffd940f3a582f811045bd8f90c1c3245e81bac57c7e5974438a5af705ceaed141c22c13aa4c13a83b52cbb3f2bb3674fca2ff44089c931b9d165c71c12620e09f42583f389c5e146ea1f953874644a29a574524a29954394523aa7f420dd028a0365eec132eba6cd39b724455a4eba2599554a39a5cfcc667366339b99071cd0b4a61bbde553174c30c6219ae4ca2199a412d5b8d98034b52a4534daa40fd701b8a73df35e88efe393697501dcd3de0bf183986cf5dbf17c6a21459468a4cd6f7a30ca648b1647513af8ec48d6ca36cad111f5e17ed912e54882292f655c1edcd3ea3ab29da809d2cd7651cad151ff582936ca54e3ce281469bb421467d2c754ea4ca0b3ace5a4dac7ba9d955fe4aaf467599c6fb52e7a19389f1ec155c96c9665d994292b470c654964dc18599b2809d2593bc945dc308bd9a1189055628786aef4e847fa6e4c96575ce3c6e52c464bcf598c92fe5bfdc3598c8ebe5dc7af7cfb4ece099bf3a3d0b117e7b787b8563f212441af0dd4bc7a1059bf8c87825ed5b94f08497d551f0a7a6d6ee7a4e0b6e2362fb35a26fd635b3b2df3fa691e44caef058e725df426a03d0a522f682fc12114d4326781e697b31cce3c7a390c9ea0f12b717bb676446c39a9d7ac55e79c73ce4ae5469773ce39e7b684d526d775ce69ded98eb3ddb60dad5ab85f49a85f69d7759d120dec1768d97796d3662cf679e0a5c739a76c5b5299c6cc4c6ca39aa8946cf794490d15c2110000000ad314402028140e88c542a158340d5449f90114800f7e9448684e1a8ba45912e430848c31841862080000009119208c542000164f29fc68e8ffd7ff82346aaf0fbe6a18806aee0e0b60f9fcd1be7d9064b8fd75fefe4b49a5d6940f7b8035712bf64c1027a264b90f96092f62ab290fc51811e04427ece3a86769edda9a3cd713bfef970ff622c083d68855f0a4cd14a7b0201d1405ea7272c2f0300d71edd8f88f16e98a3baae24b0be5cb9207d8019e23208f7a25ffafe63782a3086017540d10c47f493dd7a5b1b326853771af234c60224e59a3e9cee515e672407a3440c425110a9cf95f9ce3e668a20114c66a1d19446fce1cb74e9bc2b15e11d95830f27884a0890296c26f629cfa68b4d2be5ce247943166f11702e1402119f80d1a1a5ea415e728910520affd81e05bb579cf1d0311d18477f2a2dd2a8f198d30772bd25726f06f1c2a53845706842803ce031e6986204798eb7a6f469a70c6b1ccc67361cc658f92007359c8eb8367fd224bdcef56a9f1087a3068f6a1e2de42239d60abe28e349e4ef96b43ef7d2b7379eff58f3a9dab8218c89a7ba6c95a03c04242eb35c272169b67ff2e416d2404e0c13c4e62c289e2e6a9c6b6689919cab03d741490cdad5a68d185940f1c8aaefca4e10ea2298392ec23b69112d17ad9be2b54233054d85d63ac0482f49eae85825b29d4514c9e022e3e4ef4fb6bc222ee2b54f6f817aced9269fa2e1420d5d1b05472d0c705852e30af7c7404cc7948be5d1e468fb99f9c5285890384521bb9d2b843bf278a514c78a1959c8c4260ddd1ecbf41c8087fd2836d38c40e04026f83bacb210f8bf65643882a7412bfd068072d12958702061288b7d5c0748dc503a886764d960e80f2492d1e006caf7ea478b26ce7edc28ad4ca2f29cc1175e7948676f0a090b83648feb1dcf5a17531c4f3ad0f7b6ee5d731d76673e228cba9fb23c81a89c30d6b4104205ed13717e81663e869006f85f5aa4ae69e61f252689c7a24311cb18c40826de45c55ebd59e994f3f7d2ccf6033be63c8e15ba0a539dae1a4794bc97a8c5cab65d383241a739d2a4ac45e20252b4c778d7e121b2f9b1544c3bec83f3566339efb8f688dcc8007f0384671e304298cecf108a5f37f94aa7641a7b0770216bf7ae7f57c2cd3ad977853dc35bd9ca09b0e1ddeda5ab5eb0c9ebbf834794205eb019967bb3a0aa40c12c10e0e9e667bf81b4735adcf7c64f8130ae66623a837adcc8b297ebe79e152cc5c56a5819d61181f64ba2d5c963f99b8bfcc256dd0261f5fe36c97af52fb4c460e45245d473efdafb0c297dcd80a761b3da04d90af4f495a6edd2ddcc2a03c8792dc5c21f49108e605a2648099f07bc3a1705601d4c8af6be8490bfb9513188afb5f11b3b4a2f904fbcb49f8a3377b17420b845154fab5499ff810082e99a39c3cbf9d4359465a7291a5fa053a8ef43b9e70b2a403e980ae24aede5357a71634236fdc73565a4f06749fd874a24a3794059a1b46ec2dd5fbc92b1cfc4e295e482451684c6e6958f26fb58ffb362cc817c56805783d55933d065cc834999ff9a30cfaaec12d198fb24973e35663182bf2741baec44362968ca4be92ca2bfa4680739636ab80a80ff04a8ab0215b3fb37cdf2c4e6c0be7976924136c05e632648f30b826e0e49f6329f7d6d3f445f657bcffd2484425f507a629e8eb347944c02dd00c31e18b816ee933d08fac820cc899e180fc86e2e1bad11b7a6d5779a852f774aa2cf048c15f9e30ad8350d583c064acf4e02690eaaa942e8e5e7996e2bce041e3a39dad61eac4dff8a5f1ec4b0fbdb614939763a5be04902844d70cda21feca8c9be5eb22471273328515c2d5cdcef5f961e1eff976d0bec962ecb40bd94f684a04265b09452f9dfe73fe53f9c438eaddda4157e565b0bde6e6e183b4f13f09266cabcdf5766a79fa853314749b0bcb593a0338da8326270f86180a92c70f1505648038dc7e63e012333a31d9b703af2768b2107655b245fcdc0a85849b37cdce57ba4c562abad56e072d3d3501d319273bc9ee0a9fbc0bf705b61e6620788a3f5073b7af14d5eec21ced625602b67ae8035c5eafd4bad051175bcfbedd78b3d9e3e9312bf43f6cd0e30aaf8220f6694c504aa3938ba45e16b85077a143d2ab03c68ebd0141a857cb9befefd6cdbedf7e06b7ae6327efaad96bad9312ce8369b7a8b70757e13e37d06dd6c43bdac00b9230798d77b496b02ac353ace695563ded6d5e6ee012a6dbb121fcb3419075d327df6706e9ecd6465349dfb97975fb4ccea3532063ec4332c452bbc677df1a2437298d02aecc916196838d07af7798c7963e2bd8131e898e7d949e1c0728cdfddd330ee12a1d9236102a0f123c0d0e863ab9b3be2dc567fdd1d3946436be5f479b5b880b7426950745c919a8bba3488e6a88b6133d80c63e8e9c4e03acc46647d4967b2366ff612ee96987b08506ef0567f5c40dac157476d7e928503c05817f34207cb0af346ddc25ad730c683e6ace2f0e3907ef94fe7781eb233933f753fd69da65df409e60cd85b765954cdd965d6ebd37898f1168df00cc9853391cc26ef823d4068b170bf414be3d7d7bb53c2c031be68983f88a24ce5093ee828b37be5444f75d1cd92c238ab36f6be11c0c27540e36a000f0c0b33b16766c58a2d4264dc692ec58ec63dd64f80391426434a338bca43cf654447617cafe9609e03397441d0319a1100199aee12d8d2b4b7e3d163c3773b35b2de987a4b8af86ee9b3b43c6058a1f4382384aa4ded6bab0476c23d334fad901e966009ac11749fd4240ae08015b66b246e15916bb7926179b7bac224fbac99bd21633adf9cfa04282b45f5a4de0e1e09ebefb22d0c496fe4409b36a12e82c80ce01666004ba7079145d0527fa4c2c3ccd3f7a889d2ee3b0e5853ede4d67e01604827ed50babc6aa841f0033ae85422bac12dd54bb1478c43d40e9681608e27a67290745e1428da0812e276cf24c9e9b9f98e86a5ed91fd5137681bf032629f1cc5394895ea875ea9713e96937c3fe5a4ebb89ae907aefd22f3ade78ff945b6d642a783e0708fe68ddd35523b861358d9ca390f41a417bb492ec7e67cf3586b2df46d2c8fe4ed10cf14adcfc40552d2523e94e111531ffe5c0bf7841833611d733323d744f12d2adbfd02dffca55650d6245a3a50224e77d554721a38beb3d7d5731dfca86d3e7c82c712108ff2bce920a28d81149ea7ba9c0f6660f6cc43598fd4afad62e9b9b4b2fd9315226d96b0770512a2412737f01e300214f085e9bd220657587fad1e7a0b8b8d614b56646e8f1379322a77fc6de12eff519dc967e7d8ca7a943448f2de73c0a0a03e37cde148e88dca9c11664f914ff9192f40282e848cca1c2b678f5dad898412c38c1a0b15db5509cce0afb56e3e64fdf2855824ae310965b00e8a9f0c83577953591c4bff3348c8f063125b26411b29602299571fa67ef19470d2a845da096a96948afcd9868ba944a8352f9ae3821badbef3edb3cc10da88f5a0e1244eea19e6de3910320477f539f0f984c4ab87deac334ffc1e3049b1d2f258ad7e10d73a79f4d3981a7556dcf613302a701dcfeed9141b16c1df8442f2d2c8e8a93f416e31130d0bdc3c4d0fa166d5292dae6d0193c0be1499a033572b21a6e4ced22925df2c5bf41164be797d72db6985537938d5a9ab2122cd65d816b08ce2e02f6eaa29182d174eec85503716946bb70aa75b4ea9e5794ec01f10f85ca0e64208afae555d88c6b1c1dc731e11773bdc247359e37f7f84b7b63ae8bff2e3fbe7ef53fae1a257579267793129077c3fe3b97a4ead07852b76895de5a7646ccb6a502f7b31b953e3ab90d661e1e274b977ad614ca901f450da3a5904228ae8392e177c2d0615d5d0187bdb3c4726ec67768584c91ba173aef1566278dfac0a17526cf38d839a6fc5c3a4d63b40b90bf4b547da8f8f835f480caceb161a3a721f4ff4eeac783d2a966ea982fe8826d98e1a29eda991f76d5a33af70cd6153cfd24f92e524c1ac5ed5fde85038b585f4cb6933b555e7c4497dfc1ed41e36f4d2db6f321e2b6a17e5ddca39a5c270fa7e0c2f298b199679582ffd16a87292921a6d95a54b16fa4ff0614e232c5c14ecf9cb19e0e32dfad09881361d182a0d38a7d26f5dea41410ca577fc17378991b4bdd172203f587335134f47fcd640a258f20999437102c7874d507cf1de5110dcd2a0e5d97e66020ac37f888d2d6d39b8089c18563321ff9d4844603ecd3e62d952ed7d4383a8437a443f70730085c093563271e5fd0963fcb9e31b251e823376ff0098dae15664584eb065ec92612aeacd6a9a7ebd1bafd9a94c7bc80e68511040cb1a39be370f5925ba4982e2f7775468b6390752aa88065117d479ac399c77ed0833b383c4e412d30936f1924618bb7ef21a410710aaf899e55185314ba5ce4733fc6326421185d2d464176bc92ceaee60efe40dd9bb7eb657a008c1fb92fbaf5d5cbfcc7b8777577ad48f5aad67eef78b95a32a2de1837f1e2a819798b2a321f070526427bbd0c5d929d568e6aa310c83458856f4fa62e17eb1ee37bbde0a1c6e49f644599efc9fe0cf98ef35d48a1d9c09242468f8deda98b41c4e197037d844239fe36211c526bb87b5ab3399d64cd0e5421d30782f445df449c8b605021a9fa49a52260469c357fcc4f4d5abc282552782db763b494d6d5bfceadb39a48d3fee110e61fa1566d64f6338c8899ccac03b69b93c9ec8ca42355d550f5211e8cb3eceb69cc408d7ba7fbd747569c3a4602db47ac98c7543252b24fc2c0cb01f09068eca2dc1135206311777830cae0f376d7befadd935b3998ade3922275f8b5b595bee806a6401471fd11491fbbb708ec2c5ac9a05d39b6879aafab6ae8eb522f6dcf3b95abd607b5fbae75d60a639ba104f0cd6180ac9841ac0c50dcd91c0507f99251904c273ee3e3301d60ebd5d0f343623cb7bf5d45f29b648dda0207127c97d37120beb7c82aefd0ef6862fcc48bbde82e9fa1c0dcd97de5eba2bd1c3bac7e35eb89f260d510d9d0690ec005a2748f858572b24db37118f8a1f6e848ec2777c544587bea4dc299a64e1743264b76a1f1567276772fc37b29dde4a268bc1488b01c03a6d76f34012468ae2dfd4dc1a1a95603240f449ccd99acacee5696d87e28e2b8e9d0a0a03501a0469a24dd4fbf0182b4c00afcb17e11cb1b31b6e44c3110c1286570c59acd677c4c573e670e27a2910a3c5c968876484b1ddc9926c294f59574be4cdfbdb86f2352cb3cdd0b6da33a1cb9108a73db68f4541f092562573ab5461d1677fae80ca4d5d4f11a5261b50b53dc990e728bf12bf6809cda53059084f015d8bbad7b53cf93e3247d13eef8102fcb4f1c2ceeb56693fddade7e5965e75efcacc5f639f5108ab3703f224d7d56a7fd4e0df3eba8b24c2a5d827f2b581d94d7e300cfa1abd29f990ce6fe3b06f14006790fe57ff80bfaa2fdf6454675e54d8c5dfbca01d8392b95e312025f09fddb91f2f1ffad4bdb2730470715afd80f4c1bb2d64ab1f57426b178a172ae0cf691ef16aae37956d6ff8451db978e32df18310499623adc2a9e5f3b342a966b4e35cf6cac11c4422dd92806ecfd1d68075dfc895862a55dcedb466fcc695cd29ab876ac09d61df06df4058420d7a58fd4130738fa66146452e398b5da0f063ff8d45b04d2408f329d61045ee32292b5fa0d7eb5952300b7e3df23914e48f475d2402d3df8bc5d2458d8d8cd8e862e7264e14b5f08d00e08d7ffee16625333f7ac7efa903434d21cdcf782ffa38e0846113ba900092358133a932d3ec6909fc3d9429f8b35003074ba9f17f135b66a3d62b18dafd0b256a504f99a70026dfde6db6ba4b79fb57f60ba3136d5508f36779c4d755ff54105e8532af507697a24eaa544e8d3b08776fa45544b8d02284ca51929bbb02ed4981e5a59a3f3c0b3a5f04c99e9b5e46e2fcffa408f0113109fe1ea8d319774107576e14a580523eb4b911ac1fd3c419b6bf7737ce42615a371eb595fa267b00c7c76f1a112604537170ae0f81f96e513da9849f83dca62bd1f7997fa3f192ccacc944e3e694132b983016e2d52bba5e7118bde9704511f3c3ee1c1e18fceeb38aa862e07da411c94bbd1920154828e0870570eaa45d9b2311987cc7c97026086ab0d762835f72f0d6fc263a46c60006070199bf90cc006c1c48e89f598acf7cbb50698d6731ea87160f5a13b68a76ed19c4281f28bc0e99b0803606199aa71b4a0b61ddfe75dcfbaff6d4bcc872384cb814fbd7f04b4ce1e14f548d1fb2e70dee9a008a4a8e7dd46ac47456db5d09d774db220659024e0911d1cdaad7b08b629502ae6cb0c6988b0da6f3561c72b54a64a8f2ac5b4599a438181a109dd647959741392ff63439151760d926ed97a76df23b719ce31578c9a83329bb05b46f271ea3e3f07a5a5f075000051d96619ff0790de6234aa0affffd970d1d1d132fbf8ce4d3690163a9f5b2fb30b772388a45a3c72a74d6d7a77ce8b2532737e08f0df7830438c55669aae1aad3f028a20ba6944eeaa6f23607493759680a801063e4a8414ebb4c10dad5cff4916ba905261a97260d4ad4a98a36db5a6e264f6642f255fddf93a41370cfb95b3445c27432df20558f119093d15268b7ba1d5a2304020f88ce17ef04285b5694afd4de3d4797914b04d3a94e4496e508cb5f030eaf73cf99cae91b02a75c1e03102c8923be4f26447ab12d2551de59305c10da686d3207a86457d9459a56a50d58a9cf667578476b2e79fa030c3823171ebf4ec89ad3f1cf79a3fd000289e2d26a1e9228fff7c687af98ed476c8c3a90c437a7386cb37c6bdb4fd19060c10fae142ed6f7bb18e3e7b1d47207bdf7a21a0e826ba827f292ba86ca4af634d5f45c188d0eaaee18b93c7d568135053737a7aabb981052eb27d3ec40287e53c081b1c1c2fd1f2fab308fd8ed1c78ddc14194fe0309b43e70c98294577340938e057bd6a8b03aaf77f01392071f3a93bde719f4d227d2aa4480744d01843bfc3d8cc9fd734fb28f335e8da253bb590d365306f34a03353ddfe07ae87833863a59071873422a8eac6168fb07d488e38b1992fbf66145d4cc6f50291c8877f3eeda366f79c18b8bcbd699109937d4b862ee467d844ba53ea48c123d142929f76e5b89b944320e81e03ba51df827cb1e200a104e6ebc140dfcf2920222af2c7053ebeb4cf86aa1566e004796a91ed74ef27523f29548a82311a97041e39f0326b17b196ebcb92deeae2715fbce89d3357ff5759fc08edb61b681810ec93374b532b7830b59c7660132ed65a2fc9feb32bb6b16c64feea7b385dacd4108a552269d6c2278b34ab2b95d8e5356ba042249344b26cc7681c1cd8372e40d27644d7ec854a44ec4a6393eb880c69c6d7fac8b54e9e3b7479f24cdf2502a69e48af7f2a3ff106b4af3d9d824071c2e768de335a013f9b7d6a40c3deb661dac94e67b1c686e58615826397037565662b6b52fb2ce78540af594b2c38953e4f47e05043c7e3f4eca38d13a6a9472f57a3642a2fff69b1e17283f97745c518d764e5698cdb9b8c97e56c5ac8e780d8f80a8b5a0cacf9350e9ed311b8284cc5d08a2ed0f703493bc3d2aaaa17a45b21260abe37b6df56035bd5c98f06ba20559921efa8c5ea9de1c22013197eab07dc31db95459cd2dfc93a22a1eb9784c12bfaf1cc7dc97b7349f9f1f6f0b8198b81bd00643062c2ed702784ae02beca9f663916b6fe598776907d5fe126986b8000f74acc391c608b0fca68b0bc8eed6145ecb7b6c8d19ba81cf8208ac4d8d3fec6f41bbdce6405800dfdfdce039c2e9bd619d2abe38864893264e8cc387c8422af4042353a37f0cc7c5009a8f96ebff1e1b9d28e4c71d203def0f9e4f26989d0dc4895cab1b5134d97a94415060f5e5f97d48415060d2c817d7b41aa3edde850958a78d65f1dfae8ecb4d9ea2214ce6edfc440a04c8af0d380352b2c4300c212413fa90fef117c99f21ecd9e0a9badd6e5abada29cf467b21079a220b95fbb66295762d7a133b62e164db16ad1376e73242c0fde404b81a86567708b7db0f9e123c7dd5f424be0a16aa06da3ba184d5b8deb913c4970f06e864364d7f4b7297954733b0173b1148b478cc65298f50e126200ffde8c53dc7481efdfcd0c83f62576a9c48313d0c7f187b25f05a351bd1e53d27f81dd28604cb47c2c741e0059ed66860cde9c091929dab52377d5cac90c1ef8d24f6ecf05effb8606eb8ee45e06842559caec5dba4db83e5089b17280f10dcae1480994e59d28159cc4609d803e68742224899a883d4546b10c93e18638ff93df984db2ee3d788d8913298a3db606cb79ba3d026629a47d57ce05625162698d2c8213d228be4cfad471da5ba0df7ee913b84783e1c664cff5bd8f43ddd77895ef826de8a4519997a724fa70531762c2dcb337b59336b95427993adc913bea868842b114d18c3f65db446a5efa39829f1d448c7669e077247ee346aef487978b040bb299f3e69e8d9a0210a547a9db09f6e8c929d9ea87ce4dfd6376773e0d1ceaeb030a15233b7df0d4a30f4f83c29b3a4280e983cd28cdb4503a09db174ed706c6a710d95018df433b9481a61e43573288b795a0bdd504315c87906cf081755e7c9b420cdf22168411d309451bceb475368711afa460b846e9deedb10aa68175200d37c548d065d5b18d541b7af3e2cd2835abb311b7ef59e4743bca82633c32ca2b39e69a8616c92e97d1128b511e269897304d09fb5c1ee0af389b5e9e1f9ae2a04c786196820c3bb6474d08f49348338cfcda351c4cdab18c82d256c38669ab5cd529630b32dad0f8a5535fa655284814283ee2a09121e8cdc1dccdef4a2cf33d2a4d602e7786c730107a44355f27df7f829da61a5679a0deec6b4de608a92c6f3bef06315dfdb1e40759d31e54c46f77f996f9b46bdc26d20a5d69ad0d8d41620222fab206d1b55cca2e231876332e2062add4843fc770331ec73625a35673cefc520c7122df18ca286e7bc3d5c155c9b00195eafe425496906c9034fafb0b055471bbb01b0ded2124ee6acd2dd7e1d2243bcaef4ebd527f630a55d0e8353b31026729a41e3a06af2e11d17a74c69cb91c93f2da5272b4c23e71567476395227e26903976d1ba9cd0ec5c6976eea2284aa8993880ffca6938f68a4693e3996922e02e4aa2e37e95ee0eb7f44e30918d36207eb294319fbb3361d2d9c417f61ab53a058b3dad05230cbe9762d68049be099e55e2378ef5355c2727ad312dd352f475e097a5b5154f717cc95499c080192c93b17f9789c82435e4a501d9aafcfffa9b346b08b3a6f01372db1119f34a85052f1bb5f4993d9e9a490e4620f0dedaf03b9a0a93714c9e61d2ca2387ec4352579dd2cfe0911e2d9c83efa082870307a7e424c41ab153f3d68e33c1f150607ad32ba340ae0a49d5461c72dfc1dad48dfec00c098c45c291f9a8fbd97e273ec6ace478e9936c9c64ee9519af60f977dc588b46ac84144171158d2ac8e73d240aff0b71cf7e5f2e56cfc1b7ff0658702503668cb93e6405365c75b3c02fd6f76b5e6035d0fa8265a6abb8896838c63b6f07ca9ec6debb5434103a58091f4678a21f40463f90e39f912b09a90bc157abb5ef9afacf21d9b870412ef79c9084c311c57a77c52bc7cdc0fb905abbbdf101b30d76fc51344a08da839f6751b62f572220703144dc94ce6ca6b3ae4423fe1a007ff00ec964b499423e8c115a74fe8d1d29c2474c96ccd826ac0f6ccdc54a3933059c61ea97097a8def110a11384576b6883b2dc7c545c682904372314ee53b788377cc7f63e764e02c4b371de1cdf9bc0c9b2d416bf410e648fcd35b56a0920541e38baa51ebc1a0d698ed6e91978f119e1fbe2142b345cf0dd6cb65056fb28232612e81b00bfeb16898326f407921ce865043ea5d41ae88ac713b64e5e8b04b2409fe197d66bd966711dddd833fe56510fadbe183012f4f224d4a63c94abd3be787a525bd97f42d24420c3a6554e520db29f966e26b77f30f5a4ccc6bf8bb0abecff13d653a0509c5af6a3f20978bcbb0c50a342fd285e907d8dcc69dfec4e4685f527ae303314b81ff1f4f6bb86154683dc3255d88e02cc7137e56ee207d59cb3d2648ece0b6bb39ba4aea3072eb786a470f76348bc6876f1a3d7a12e096cc61cf05391de2195c5da18bf8e5151badb1ddcb77ebba8dfeae2974c7cac220fc86df3966b9ac7a780616582734e6e46f2af6ab94198af87e30821e14671e327090acb6dea1c9a6dd26f3c61a91668ad9bae9955fe8169e128a4c3f27c0763b07f66fab6cca61c7d46788c714adc61b0b06b3a5a990c100c9963cc3a8d52c882f159da7de1d25e47d27fbef8ccc8b14756af4e6aa7ed5c44044d4e6f82255f20310a9b2a2a9f606f3e92f4ce258e8922a03d5645add6a37d0e3c6cdca419c5b1ebf637c35af91fb7d8095777f0bc2007d0f594306bedfdd0c2d21fd5ac98262d17bf4f5fd11ee9fe0a9834d169674b14c5a1f6be484a1415eed7bcda53a03b2b8d29e7f88c48dd1c6cec029d19c251599f77d4c7be7559538d9a60647052e369b69b5591be3a239dd174eac14c3edfa2ffe67ecc646fe288a4b344b812f16c4b267d5b37061450e3f221a009ff8a7c33d2cd221161f6e5e98d2b68a8f2269aaca31dd3a90bd58f34b0bb97f4c24397a696954eef00c91d78dff79bd62cc72429a386f0ab5c18ab233e1ec65d29dc13090ffe937c6dab96f602de948cc23f94f4b0527225f45771d2fb7e324e82e8941952f6834854f322b6add4d4feef6f145c6e7b83b40257d5c075c195a25aa717f5057878093867a37cfa88567ccdbf5245e701273499f07087a612c162c4dc6811dc8c1c85dcd7562b0764fca8fa22eb6083dd8d1714cbb15dbf7bbd7d53152bc075b57a02b8998ccf5db793bbe6390f084c08c8fcceecd28866f7c65d3881dd14b01b2ba3578123b32537bd2b94aeb807955493ff9a2247cae47ac149f94495fc6f8386ebb975e317f985653b8470f88f3fda46b5cc10b710479e538115a0c31dc5c915e84fbe8898afb60a8eb7859d4c9e4a4cdecf78213d582d7364bdf8a96719ebf2e61d146621e2ce7c5a7d4ed09ac0fc8dc0718337aa034ec959202f8766fdf9498afc70d96d669f84a8321b99c861123de3ddd3bd8f343df58af2409d6768ea598c19157f457d61397d423397cb72b838a5a0124cf40e70ed6a5eac28fae45f14b32c036ca62a44fca040be83cd297d074c766004442443f3192545fc42807cae8017f388e05f3f4757d7d4ff9418a8398399198d9c0f156554ab148c41e1116da50a1e479993096d99a7550d32d91cbcef324e88d937b818f740b5220863156691625629c1d515d8c2e5c534802c4ed0c0184136f5486909c5827d47cb36bde965417342077471eacc8d083717bc232341912deec0c4758667aded861c6b1008b2f923f7f59a08776db599aa85943a46f404460d21b5c5310276631c14d81499638c3a52bc9f536855718eaced981018accb4d919ed09a0e67af032856990083e64c2bf033ca083c302e31417fc27054d5cc348922e1b5c5ec06b29b5640fbdc263b0739faefab3bf9e2ee74148a0b0a2649f4cbefe0558d56d558e200b385b0fea740600cee983eee60b4888a5ba70451c3c915c87b6234a2dbc7dbf27d75b99f04f0ae131266df5e3838d78b2fd2208ed9878b264d01fcf1dcf6ef08d2fe515033c044d2137e9947510076ce2729830a286c65fe68b45e9ef6b5e57b815b76bbedb63bfe58840b94dc54087cf333be0c2e6506a8bb0c1b658cdd2e5902b0dd8d33f22b8d8a27663cafa9fec5d9ea2e3593032095799115d8a126050e11ee8d9768e7b29ada6dc698a70a83dbd61640f0b15c1855b2e7b14e884dd8554ac1ace6a8b459ae82db6e3544c666bd9ba21ded26a15dc8029e4086efacea32c9f65c49cd37a04bf8c134f7bf24efc9ec35c84dfc09829ac0c416f9f0082f866abc5b9d79ff17ce56176131f4c6de12aafb6c3a2da268fc85ad0fe44b98dd16957860a83629909793d4c523f3e153eaa17ba080d464fe79783f075e00383c82ee8dde481437ffe6a2437f7c7de091c61b502c0f73de2a8a4d3aaf0ac73fc6581a41fec7fd40c601cbeff379ac2476ddd3fb40dd67fd9184a12c844fdcc8049a018b125bedb1b26f653e0c5acf44abf719f9bcd4f63f2717512a18a16f59839f7f229b7e98d23e70332b45d43e9d291b6c9e89808cf9147e995d9b3b573e9f6c23fc57e8d82512e09f9fc8df42d441b1a4ff5f15f6980fab3e7266c05b02a7bc55a00e30acc21371d6799715dfeb6682bc5589d5bc3f5a1b37508930213dd975b2a64a5ef32ca8df0abaa4aba58ddcee27e0a217ed0b41b3d4f0a35ea25b67e7ef84eba0f8b19187aea89a044f2182dc3a955058cb655c8ee2d1fe7248def4e4d9c2bc108e91592a524a549477147d6e5da050cfbb4aa9efbeb9a80a53eb55e265843cb9e49daf30112e13f23fadc5ba9ccff7145e44f76fcc977e8d9f14aeb73e1e3f33b8965caca37306a19ef54993390b223807d095f196851d01e038e47036848ff9bdb28bed176337fcadf6155da87963e82fc3bc1b0bb8757abc3edff2e71dd60558c5397fbfe22b38a5cc113b4327a355969944b150b4163ccd8e2e6749e1a5ce53d9a681e6d7a82eef2e11f1cb91b9991d9220b3a3c97b386fb5bf3c13978bcfacda42ae3740a598b578c570ebd2331dd11646635ba5f0b43ab4f85b49588c291deb523d2fdbe9411d2191b933150df56c403e4352b84f00683296f933d37d62b446664eecab1dfecebf26387c4006a8e2690285ca6090834459103a6d130b847e4660df38acdac0e88c8f6ee517f8075cfef3332382d6b3507b25c2014f9b535bfe12b01430c19a446aaf53b42c3a2fc0b01a22c3082ca0ee5223ddd1886cb0e1ccc294e4eb6a289212d91205b134cb7824775ba1160a4a410b43898ec88a7ed23dac3b76bee90166733d9cad206fc03ad37c5cc8c422fb66c2b1009afc31a883a8d3fcdb9c9739c10ad864a9d6224b416ed7558d7447a375184c17753531c3963eb12cceda0d55e52c3376f964bbae4af284c663cd7edcb0e0b6311a64a9ee02cdd33e7ca4a04c63512298dd11d77de005e77a357e573f61dcbe2f79760f74466025601d8cdd6041e41069b301ce5c906ad82fd133da63a30b76efa1cc8ec131fc6c5b6b7af01cc743423b95762da6920dab52df1da296e402c22b562b8075d5c7b900aa2bdacaec04959c409038c7a56583b62eafd533ac47b6549ceb58fc11a26c8a098549d859a65d138148ce400b333fc9c1569347ec8e28a389b1a823cff8b1a737849bf65c0bb1e57cc9e2a1babf566b9b072087acc605961aabd9a3a3acacdfba12677990a1844c856fd1bc7783368ff8d45488e2865972e98def0b71456e9f3981b56725f71117b996989fc668b7aa3ab0310179e1138b8470e6c40e5676676310f5702e688e32226deafd2f384cdb4e9c1e82d561665b1941f35a827c3712b7534857bdbc364c717aa84b483e222e40a49a5719daf60c5d8bf084eac5e7d4b709efdf18aaafd41c68a748099202523b9514335fa1b91d1deb58cda96fa9af8a0a433c6a7917b02b3296a7c7e712bf9c22d80fa43d794d48e804cdd4664759c204021df48f8d322bd3974fc6aa7fe260863269fc095ba429cd1579b61260f510b17b76c3a9f49feb2f15c8eebf6b34e381bac56ec6d165c8249f82d04544943c06f2314571a86df22d973422d95487717e6b6174e4d402b47036f83b8d435ad88b6a89c23954333a5f741406487c08cfa14e8e80bf28960b14d5007ce296434f49438df60606f248dabdd7b886e1343803a558abd4e92a406f08ac1a197fa1f7e0de6336f0dfeb37073c3814983e41cb5c39244106c46f57a1716dcef93c1f518bc6159df9303eb2aa1b72c9246b1dd3b587904ed67259e3ddf942b65ba6c28c760f16aa3e0234da674b2fac299772e568a2ccc050e104fa9bb329959a63627311a9c751d69ba311b2f1276d714eeba516d5929c28d4db2c4058572d700ec23631683883f1a5a4ab77e8696c3d2c3d5205efd5c9ed83b17c64bea155e210f3222b4634cc0b1ba55c9c1dd36252d0571532e19ad85ac6782ba9d188ea7e2e62befd8a1830345bdcbf4817feb9e09615121bcccc74468242f587f826ec8dbb9aebdf7fcc83bccb614f12f97092f89174fdc64227e1cf1cf55d190260c34465d02d3e46cbc25c355f3d2b6f9dd23bab5d7d05715fd219f21761c0bc14feef70380905e81fec4e51006c2063de1d29ba01e51ea003029ee17ada4a40b5a0268f02806805b397347f5c18441be2415248b266af51502aa782ec0e4a0a5aa1f2a5472954e89ed508aac35028f73c826c640d828607bea3d022f1553da011e2d6ec55971ce2ab91729c2dec729d05ee70eb1fdbc3ec1c2b18e1b84165a9d8cbdf60f36df37edbac438f97a3dcdf7eddc7927a665e6fa2de32567b8bb0a83e33a12cf80f7aa66f6e51db30fb1a6b280a3154de7975cdca51c4bf2d2dab8300eab22eba48cd744dd50284171c8eabe340e578e94213a91befc86ecc2fbe464ab0c270116805c78580891e62974d8a6c4a6a7db6d29ae12a0170c251aef821a0ec29a9a73ccaaea1af5d45cd04c94e32f14f708a588423fbff5ec18760293b515c8d633eb1d493b41c3b07e7e3663b301db2afaa808f781b50ba5d79698ccf61d1778883804381b7afbdb794336d9757e9be5b3f4acb7e77b6d81405e88dc99663a604333161c1ce956b421a3a10e7d1e1382e3b42e939a93d5288d40a2b010d1ab7039d733b20573f24fba95514c157e3629fe95176aa8483566e0aeb91080335c69ba8cf5f9c49fdef8ca00cd120c130258deaa4031748a73752555c11672488b72d222e46014aac8ca717b0adb6019fa929e91bb54f6e460b3574e0206a6180e73f443b1b3a392fafed0862d522104f3f0a849d084024fac78a22797b75388ee8ebaf49d43f5afc5df20a58e21facb105403a93196a283d67fc87f1fe9369d486393902df649953836439d14ea05010bc934e20e30a38d08a6c2eeb10401837e0cf467014f5d8b14a4bf36bff8bc8e8a3b8a6deaad091b7a93c416d6a359655a3573120fd25597271fbfd7440fb61d1b699bdf8c2b6f269c268936592e4c1d4a48ac2c6f0d356b1f0d401f09bc9769317dbaeb94ca4e44460a7804949d6a509c5e8474a009f39b11111ee1301bb8da67f6c731168348ed237c14a181c2f2e7eec7780f4ef62f06dcd9310899b98088ceb63cda4dfd01b73c58f1b60404bc16892216943893d860206022d48e432670e5a09bcd13a7eb6e816c54bd43728eb07fc06b5c9fef12dd584cd16a9031533b8e0506910eedbe9543967b510bdd0c83bfabf7e3658ce7982ea4805ec126d7fb6ff941ab4500ef9785de24aceb972eddcc530b40eb0c3fb6132781c72ba9cd14d1047ad2d35aab8d2d6b92561cd5a5c8f7289bd3d156f485dfffa56a930301aba2f234966ec1cadbfad15f90e0c93543fef3050105e222aec012aa13e3ee5fa9add727d4acb5c7f3cda5c7fce71c134af5110f6618ed01be10ead3e932ca2d738591960da33cb5488bc1d05e60572af358c9b24adb509c8a69c20ba8fd0985edf58663bf48a1e9efcaefda41526b5cf097279fb1a408470e6a5f51750cb1cb11eed3c2abb62ec066fb1eaa50d23ed0b0130343eea8bac7e29b967f185a4f791035175ffa813d53ac1f68f00c25261aa9620de66b839a4b14c7f38caa1893062e2d96e842cbf446633461369eef9989031afb7c1aa8f1203113d0dae85f9512039e3e59b320b7ac7c57802f9c1eb86685152efcc1040c34746c80f8f9d0645b86fe9ddc46f7ccceb074d5c23ff8a0124aec58d0f9b61dbea9ab79a06651656c466ab32cc0da887841d04e7e676ca6e9bd8d0c44f78c25e653175ada6bedc83c045634813d467ea3f309bc3b78dbdb3831bb334869d0b039c67aa815ae7223cccd8924a2c2f288e75d99e1d183cdc950e6659010cdba7e162438d29e1a11112c7075a8577a7acf318255ff31f87fdddab6998cade5286d7eb26ffd7ce8d2ab7b16dd038d342d758ea7fe3c8a62c6fe454dc10a62a05be3a4091b0f2d89e5be4af71c19bdd6e68a94a8024ade173ef9bb07a364589f243d515cae3f9a5c36c5c9a30e97dd9f0514753b57f9f90feb6cd5515507c3c68cb3450a6cec3b9de700b50fa037bdb0ae3c724a29e66de505b3232477befce706e9046f8fddfa092070f360aed66d40f46f5e1a53cc787db8576dbde0b6020daf996e15542d9e3d6689655afcc8faf2759ddf0e352d6a931af7bf3348d6a902737edc7ae599139487365db0489ab3e6e532e31837b013562746654eb96abc57712ecac917187dec697072241feb76fb3ea64a59cd749e70b565f6683e3b28b0facb311459962ea470f91fcf2348268d898388dee8b35fe72d9309060c0fe418ddc10a597444894833ad3ab7b7521596ddd62d0ff2d646dc3d34c49f65efd0d27ac4745af7927d22a9fa1bbd1c384aff598974f728919ed99826d338556c68c634d7c3136cca5c4b52e87ea7261317328369f338d28f3ddad52156d6856b44f856a4c7b6021ac9eb67ce32e8c414188965543def9147c51d09a48b936b6392e6e747209b2457d4ed647b131581d56197ba93e9f925b869db88f3219b64443b149c8006e8107137e6bf080905cbf7b69d36055873520f5c6d6e3f63d1c145c986a6b351e9c14ab16ac25d19c6aad280a045c2152da648af6e698caf516cb132f4262405bd2f14ff9cd400b409b31a4c0630c43498d00ad64a188057c352110d3a5be6edcc61a05ef48f50fb46857afd3d03a6e4188584dcfb375da9859037be96d8ba8ac47c03b945cec39219c3753042ca0055af449a485c6e809abca51c8007e317e6f32ef13be16a40494187bad17550a14dfafe82c22bb45ee5da870a297d16ea9d765afb45c945a07273705935e20f78678919a2dc7588c5d7491175af00ddb7306639aed6e80ae9601ee83a52974e3e05245b8d10b80ac01d55e89654aa4b00757ef9691413f5c4e99152cc281aa78e76662edf8875f553c52f9ecbc9d3c72fa8bd4f362a200d2b0c6f82441a834f1683abaa29bf4e7c9c539f54daa0c9c588cdcbb7f1bc3725e4f0679305c3833818b60445cc299f5ba62e460f49ddd9ecba118488cc70f8a403a917dfd100132c8033986834bd620c4d932358e3a889a5734ba6dad0e7ad36ac42ab7777aa57f46c16b656ceb775471074c658652ae3b5c078f265ae1d3d13a7ec679add0c1f184504711236c07d002f75a0c79e6926997463ba0e1014a4eab215df2037666cd4b093462b64bfe750bf035872efbfcb4098b63cb1c45c2159fbb295b4fc3cc41cecf609c27e8376d68f9d5053105eb536454a65653360ba5e9e9070f793d5648573c706141b3f7d29cc3326942f552a4912452f30d8faaa0bf46951527144fe6c65e021159d17417c46990c83089ea19254cf7940550ecb153b828a2741f49e97cb27bd64a7f6c86e24595d883410cee2c8c8f13026fd29ff7469944730fa8ec5f4326c9ac209fb4601fe7108fc0644a8349aa79367538d9f57e65aea0660fa46705ae44336a82736d830be4b5d7b7a57a8ee74dd373cf0e369336a4113964c6c8efe5816742f5d6e0b8a878e02ffc56b08ac6daa419abf4de6ace9e045e1ac18481164dff31c6c8390e2d8a26bbc18b6101ddc49bbafdac5de06f36ec47029eef35a7d1055e52d0356ed242f77ef3410b13bb2055aaad902918c86532f165d5a43874e1ed2f9fb628eeea04ee3137266b26c46be9616663324a7eb115ac08bc49ac2ca13a09437dd676e29091c6c93581338368fb9041cd9640d81875e3e8c1ebe6a6190cf6ed80fbea8cb8c955daf0d5cc351f507c0bd38890e6a685cc336d604d74ddb8cecdff93942420ec298c8966c4c4e8a2b58afae45f6cd3a95c5959fd698fa9265b297d922180696e6061ba038f2ba6a9a7c3910a0d075502ddfdc1abb262584a12f5cb89737bac941bce77e8724739b777f45d9bc3fc6b17ddd7272e855e535e5f83fb0d40f9bfe697d5ceaae329f4335a5b8f8e73f9a71b46332244ca289d27af768765a7128277a55f6b87d00f61a5fd4d688c61ea05d121ad0c2c94acb588d083f03cbba0b95e51948e2d8180095cd8bcbefee9dc2fa60bde4bb50b9f2ec64262ce7fdbc8f1f4e4ebd9124a900c0dc3901eed976e76aee5643c011f5903fb7b5d6fc7c6f9955976bb882373aa9a19daab16818bec7238f510d6b130476f75abe55fcfe2b5bfbc3434f7aff52ba4b89613f225a53213b056bfc5ce18bf5597aa26fd297412127d3025aaab88fc23274a04f9890818cfc0f6e1d565e868e6a224d3d4cdb35e5c18dd813b254c523ee417542faa9e47dd762e6e00b549aad875540c8d610969db8d25b27bc08f4a95e56a808cf3136efee542509da9ee01f8c8c40e0b1d532d729095ad820261b0bb67d380ef24491421aad56ad3bab92bd96ce3dca669815e6fdfde3853310168a4b9b98b2a9d24f17b0af9fd52f1b77aaff786b399c355c9668751c8fb6945d181a6480540533f05b00b40530348fba5046ec0e7e1469d623f7ef6e56a68510d9a8aa4999198a5a4b3df126c9f9259b58cb5de0b40138c9c054a93f97bcb41c676cc729f63ad8099aa9258cc50c092b0be1e1cadf78f1a8562e03fa4bb277c541085c2ce5a43f175552394d2ef4e8cb2cff9aca3c435045132c9f744ea0cbd91bd92d9313cbc855d78d14c66a8a9aa04643089704d4eeeec17410ae433f4f82a119407bab0afa9a0fb46fc1e4a39450e5779b1e27bc45817f01adc87e31bc94f8164f35cf90978d262875ea2a09db6e1db904ae1459f6116c4e5b70e6464b6df46bd0e32d38299dda88798de0273d35b819d41912b2ca0b590f1cfea0695ffd1ad425f50dccf21b7e26680babc7f618d3a7c1a8da298dc7a2ac109465636894f6a6d5a1ee9ac005c990bf1499b1df7a35e26ff2d9a8efe6de905af224fba50573afe7e27a1c1540cab2df551b40a8261b6843d7a2bc0df741ec3b5ef6958dbf78dde971a9cd3c2164c5857a0329ee21028736b0f01e2e13964fc884e7ed3f444ba6954a6c2ad95ab3bc4b7d5214cd5b24aaaa873b0a62283affc3ca5fb059e22edf08b4dca545bcb95dfa8c0f7a437aa32865fef6449f78ce434aeab8892a513f7c8e297b31120e6acfc2a0fd7604e2cc7e33cac890afe8a26829bead36e16df992b9a3d3c02634e6894b14d42d1ae3d7314fec14a5adf0312e0e6db7628496e3fe36e544eb8aefc259c9ff9669f1d52ebd018528190cf22712776d57a601c565bb3eb8e53f8a83cee2f4e74d409fe0f4673882f7f1671ba31e1e184165e5ad5ef25a1c84f0a1d32541132504d2365fcf4f6f20487a30dfaff37f5de0d1e16f95902f0519693499c21d70177ca59d328e5747aca2c44d112c77c68590785d11ff0d7457af70b4da2928a3a2a41e537ea20400226af0d43fd706c6adaf02fc25511c45776701501bd99209261a0ef9ea6c5fd2135207625768a6b6c1b76675cedfe35a2d1e644442bb8a591b534052f18deae8ad244e49179f25b2bb262e07dcc69e10f0416767dfd23753d14b02e95bc13e1120807aaccea211f38a3e175a1f00e7661ccdaa3a7d84ce1953aa0559f589fcc861472d8aa649ba570d3826db018c8b139744b3ad86dbbb5f8f7636aee242345d2f69cb73716688e951168a71df29a46d256677aa475f064a496bf12b5a55f59d23d20d1f6b02ec99faee3ceeb2816eef18145897ad3e5004de3cac2952c991448ee9dfd799d443b8dcaac4b2d9a3149ad02875abaf4398a9ce61cada163b4db60e5fc7ac00aea85441ea954cb510565cf9ad180bf9cc875940fd64267d38dc43439d32b7e7a7b5d559b9071989ce64eaa207fbbe7a7b9a62a81af160cc0db45ec754839323c9dba536cc3a8744c9d6545c5c9961a935000209900a69f7e9cd5aa64dc758592b95b280ca642852cf9bd066b0c638760e342501216ebf9d5572b8720f8af6823fde015d8fd670e788999360826706fce5a4075c6804419cbaa6aaecfd6aec0156ace4b14b73c016a71df1ba85100e507c591273fdaf2dff7681d87d8a105a2598df620a9a3c369fe566a698e53700415c9d6dfa1f3461ff3c49d358bab6ac1db15ce41c9c4f6ec0bb8cf8ccd417d2943d0d3217de16b69a683590f4f934142803974ea00398b8a578c71a8f10d47fc1695ffcc09c0253b168cdd86bf78e19d839dbe23f09177e29a954b36a6070e86ebcef4f98aa3b1d57a22eff3054c69120416103912217574ed8b3a342c0c202a4cd42ee39c4c4750c03043ab43ea1e79c8cba3c52b3a3ae485fa76000182725012c438e703e5b41720448b9496d6dd2f443f4a4babb8904c8c64228d3a04bef3f901839ff8fde01ebc083e35b064c541a623390beec1161c817a70fa12dde79d7f2906bc47c6bd58d35ebbf9cdb10f6d3cad16ec919147063629c1ec10a9665ff5a3689a18002f6aa2ad4f753722169f7f9004701a9de9360d752020ff6b69cebab134a89a6df01ef807352cef8f5ae710ed61d3877c56228063c116a8e18ace44e333770f1ff68b4ed2443c9423cdd9259a3cecac4b73caa0c17006c914208f98f612a42782a1ba6dc7960f54cb947679c8ab5de7e01fb2cb8b1cac1da7dc2f774f9f45b6cf9142326da9e18fcd4cbd1a9537e71d544caa68af42b7c00a1746b18213e740c77f157d4601503ad3adf47bf550147aa18a3fa7a1833570789911cdb91ead288d2a0ef8b2b712e1b764131045fea1f15e1ffda56e891981df31056e8bf4fea02705aa21d86d6cbe64e250ac38fe22d295aed46b80a9e488516f4399375c94634a018c99a9aa791bcd9d92d1220cb399389279f8ed1c43641c9aa4da06fe901ea990f89b82c96e06f1b4c0640806379e104920ceae47193c6a0e10faa12a8190178b1f91f51ac9d13afef79c311ee3b305b8e153145eed12005079e28cfddea58c7c540d5fb2be9a0f358a27017e7ce500f95d212bd8921698c0046cb89d7ddd55b3272ab60166403c4af6bdb6ef5065995ec0d3516a53ebedd66a30a09c0ec800814abdf4109483989c025fecdb4e5c60961f4847d897fd6c5e17208619ee5f4808e6a8893d94dd8f6d75435b4950e8613d9a494aed22246acfbd5f6d1ea6fccbbe55e2015c39eb9931b834c0a1005c0e22ae39448e7064666fa1e57eef51effb5f5f3d26757182fa671c080e750b73a5ce8daff689e995fefa13b2c236c92ed712743de49e3acabca27032a545d3d44e4d6e44c3e1d0b50bf826e3e1cb56e34f8c23893098542fa65d0e25c8e36ecd2543f1b3e8c7a55414f15f22da4222c1b082e092f3bf1ce8e8f4e86ea0b52e4e1b2cccaef8188a77e408c38a6b9db283c5e62d532574f2eaf04e79255931b374511335f294d6372330e40db64590448ffb4db772ae28e414e584096c5008542ca0b6b24ff4cc16e768bba2b7eb15bb403355f2b71017a826c3ae84ff74e8a4c15f4983d963aa803c6671b7773eed894dd0cb1d851e18e090e02ab9bc1e2e5978eb8610e678bfa4a79781b55100b5ae63d818675279673412b25a4dbe495e938199b1d451ca380fec37458a8818599facf27ee485cbe5d9047263fac102bc21da2ac05c17bd4ffac898f97fdbe18b269de11a4dc11f985acc2b08c2bfee0e72118b66b564dec62cab2a049e78fab0825065770f9923cf206703234615056011686289478f38eaa753249ac55245061689fefc4276e16fc52d534d07c338c071a43aec8feee2d336da68c25c7a3ab69da91c4a78db5443064a12e4e82297a4887c3c9cdc543cae9430b01a5414ad6c11d74efa64262b95727a012d8c84e2bf6982b9fcb01f05140930144d1225fe0852068c187a63891991a6112d51052a5e804e46eb75d332085ac0fe6657c0aeb8c8a03510138e2030d37c8d5460b467038a11723a23c34d6719e8d9132bd789ba5e034e5292cd2f7cfa464e662dbde2c36b48c970c6f25f9b5d279bdb7924f2ce6544fbab450d61fd85f5a7383c2046bccc02782fe0c898cc577d0dd454e78966b1e0f3c4960a23e273e79ab288e839ad23ebd6342859e9e219304a14041c7b520ba0ff872ab7df4f867dbe17518375e8870584304d1a2ab1915920c9a2253fbc4aac7ae31a6bfe3bf8289c39ab050f8d0a404de438d4008e7c92043508dfe05b13329afcc222ac58e71dcc1989ce71c3887eb372b121d8b98a8d7c7c62d3a9236f001efb0bf7486a072deb0586486b7d906ba7916b63569a47b1f23eeda1f29a27ae09cbdbb3e609068723a45836e67620c0edef78b816397ce788aa37a382bc3bff71e0ea7a8a5381713398acfca9917ce5e5fa9a055880f833b9b849cffc33c66e3261e84b83c58dd883cd82d7c25eeb67f849277cd96394875643667fd7252f3a6a1a9490b8b007a891a642dc1f17c7806725acfacf8103d6b13ff3dfcc1c535baa7c7694bbe7afa6f760f6f2e25a1741905b87f3eac92e134a11544e898abead315d6c48bb0cd0ce659d856ab4d8be4f3ad6e89bca11e564776cb872b2de4e1027b6f5bf6268c75510222e23b4ffc5466cac8b4965f7307337f1a5acb081c3ae6348453dcd911520dfe1c7f37f13efabbe5b41471059d949f7ff99705646766d0d22b03d9d0e22fc7fc1118866d0532c93346b5667f1e19bfcdedab00613c583a511cd6e290718b5b1e03dabfebefdcdb2848880f1d4677a613451549dded809b4ae1a37c97300f5b14a5c0502c4849182f7b09c70b7f97eb1d881822bf9759c214be194582705a68684773e1585d5dc9dfb5eb2438490e69d4bc8ba824f32d270630094d38ffd155030ba14deb9d6967851e9bfcd5d40855419148790b5f7dfa57a7454940631546bbffca85a1c7cb504873a08eec8fa3cab4b95e14410e8982823acea2598d0442d2b2b52ef0a945d000435a712b9ebcb83c5857609224c4f85c8b5a16cdb61cdc70cc3e2cb49bdb0f8d8b08d2629292d1c1824c4505cb0c0b2de099139a7e00c45f3a7d103d0e5b79b79b051928a9716ffc305a9f1538d7ca737a17d8172eb2f8c91346c7494f507c83addfa14ea85a4034f87cb0b55b182bd0677323ec4fd5fedca3c98437145c7774d51e9ee6e0619c5b92d0faf091aa287eba56befd9d68af153e901faa1a732b6bca317802e5de8ab76b37a31794a11b42decdbc5a7546c74f9ac2e250227dfe9e51ad3e8e0da9e9bcb715878d975d19b29ca5b553fc819446dfa5142da36f690d5d219e069ac8533c025453c27e4784447895bc3a1cee2e25245da0ebd90cb7b4d48d77290252aee1fe9b733a5d9326d7845567c45c42999a7c5eea887a0c11949fd4e383fb3304ca7096a383561e778ea86547655586fe2eb33150a076720d71688a7c74b55203a84654b0f19be8b977ace46f2bfd03562f885e974a2ccc41375a959bebf24c30d0067e642d87d4ce68a362c150144ffa6193ba7049bf7a72b2bd6c29140f415a71cb913debec9d68ddd697ef0746fba33cb15fa5d4a06d52d80bf87dfc0fa42ce13a8500f7185626c18de573f161e21069b8bbaaf86a0e48e90469b847f95e8be5450265f3ac956b806ef16c4b19010ce439b5804dfd42d0c64811eea8385d9e297c08de336db5bb84e61050b18d7306e6e7803d6771ecc5c313e08a3f427e72f907ea53207740e4606504c5b5bca2243ba5031cc9314a441944f1bde63a9824c6a848502a92a7c21d208ce1c80f0b925bdeb2d4d86571002150038a1ebfefd87af8fddaa0e27025f92676744c362b0a857979ab99f24d7fc9ecf6eedbad3ec1c289481680e52b2c5f93339b59d685da88be9923f1b1670c1fd24a0cff7fb383e3224e603bc394202be80ec5181d20b4a9c658479feda50a6780cdd3cca52651319311870be6708a0b998a33110d3ec4582331e24b89e0424d8f30f3dc051b872a39e99559673f28ac2bea6b6de103ccf31be3d82ac1488d59ca115a9328de01a255f2cc99e906247237e461e249209ca09fcd8e8b674546397395fb107bf6545c52008afb064aae7b4ffdb5dcd9aa451b05767a325198a50f4f2bf2821a7b4188c0f25143f35a158e43506e9246430ea1442670f559b052830c7b7bb2d3578677bc45117b9143e3a4ed359877c89fcf60ca4940349b39edf4b21329268f9dfc58c9168266112ebf378e8a401ca0bcc856c963560377a4e87559a3ab63b49625df19e41e23c32a0ce5d5a41f184476245654694d8dcef281b654dc44681b52bbfc59b2b0ac9246274e988621dfff030ecb2d99361783a7d0b977b113d90585a52202062a7ee496687d65753e362ceabb596c8410cfa8c5349d9c3703f4e6d388fe8c31dc3a779fe7518d4d63c5a88919fdaed18710ade41ac0e4929580b5c17670718c3d3c30b7455d811254a9fc6409af8be6877197937ddf3ab8f82f44544c94acff96c0ad2047574221ca24b0823afdd56345b0fe553c6b600dd907b41a75c74121e0e56500edcc1c2479dd7ed0f68acbbc556c0f2d2e5f79f42ea8fa9e6c581c8e5768771ef80a2e7eabe72a7a87d11d5cd33878c86a8e3bf26820d5d81deee1f25d5bbfb14293dc8b3c620bbf3eddb7044a84345f388e0996560652afb9060798cbcf200c8a7695a04d173cbbf84cbeb5abe75a37394b151ce2241f8828108e7fd2bc424ae99841058bcf1b31bb6f760df5b83eb62b80ed7fb76962b006dfcf5b8ce1fb5c11126a6f85d3d8307867aa291d2a33a909f2b43c9a51f3b13987ff735543b1cef8f4748013f1200b00ad074932cd6aed43b565b4f5b02bdf13bfde1c1448ca837fb6b4c969c000e61e3bcc8824a185066177b6f348b7655c2461c029e7b2a874bca2ebe622ea80e60eb6d3ad98a2c01d7242aa2825220004cb508e5f31e19edb8dbd0354252c716e1a7dd8486de377c0b9d83a6145ffe04744dae34c1d8f3eb2d03e0c2424c396760cc5b55ec9dcd566a458dc98b6828f06a51743238a14c27894c469b40705c3b3fd1470e25e045504bf38bd0305eec901f883378ca18a13323be6db9e7892b3fd3b4840eabffcb22f24f50cfc402cf62213bb5306c7521f94d99175113bbd7d6f7ade95769651b32706da6f2940cfef7a4bd8beedbee4a02b344709efd5841599c19d3ff6fe87cbca47481cb45d3e3e67be71ece226403222609eed5c9157fd84a9e425c95fa77de2a595d01257beef2d7fa57d00e9538391579f43c36cb96deb39215c53dae338c4688a411672d94d18ef02838103383d6e3a247efeefb3771ba7f53dbf6ffd70d13d28dfe96966f4be7fd54250c74bbdd9c1d2814cd8a0c23a3bdce2701a659e6795212403708c1d6637f651838a21e28304b406b08e7670f7c18a817811cb7dd48e3d108be0158f7e45face2b78bcef995df0319b75735d50eb05e6d99a8dccca2bbbafee50083bdddd09f1b81c01786a9db84a8fe23e8624a5f806f00511d48288c1228fa5c7a694e3303b0a42716203103dcaceb77c22997f174bce55a1c81f04d6ca5745e2ba2bfa7196ffe3c2573739c6a4f8df01bc9565bae3a077942580011c817d3f518e94f76c64a908182485947a60412338fd7f1c35c65e701cb70481606704c00d72b3e6607e6973299ec54e1de6308ec2a7d5009da392239d93f88910d63160bef737a716c622750f9da68cd27a876bf003adcfe45e6ac236262bd31d18180b8e334846c9e6c8cab020ce8da7a2a7a967bc2728b191277b44e3fdc6a1e6015bcaa2f5a4f33450698703e1338cd1745921225fca0a731b6f09040fecb119aaf74d8200c46442dd7b2a4452a3bfd9b5589fd334844309033caa03ef235722d82213e33dbdc033cd9e57003e936777368ec2c8dba4e3549de9252015f86a89657bbbe2fa1cc079357850635e2c4c1fceadc7fd84c06ff513a2c868d1239c7d28a040dca34bf5a269f9dee7c99fb3f69f6867cdd2d46a66b58a5abc17b0dfa5752a7809a35b61e57bb5429de4a83f6d9019e977c061f36beced55f46e26c304ceea211d93c966577e3e7cdc08b0fd6b28f87401e71d053fcab2018acc6070c5be8ee8b3dcf220146a325cf57369e721d99a595d290c83641d8e50f64a64752cffb26ca251a8e36dcb2e1c8dd82182e6b33446dd27f32eb92cd91deb0fdd3cc165b77064824a75e07fbc745673a41dcc11de43946fe668a84845e8a5563b176be3cd7fc6007715f3321092fd4133e768411f30b01c682ab44fb05a4030c571a40a9352358b1ddafb05be9784622d57e24e7a723cf48ae466a6b7123c932f97af0f0746511e35b4cd7b66cebe716eda668cf3a753d429601debe71ea9d09cf8fe1a67676551297f72921861b82557d15b4ff584fb6512430435cd2fc9a7fcadb9cbb220923d5d33822ffe7124bd952df247e2b90e043db97ddbeabf4c2ed97ed2bf9ed7577f7ecb3c5d3eb4f82d1668c1138c8e0009fc1a7dd8540360b7c861da176797bb0b153e42cc8b8a4946639c2b3cd4016c3305a70d6f8283301ac0bcf2c76f33a916112ad808f27cf425e43da8c95d10abaedd1c306fbaf67b396fcd12c6ec72ee38e762f6c08679e67ac9e9e652cd4e851f90692048723c5a9734c2393aed458ba81996aa9d4101bc4f544b4b8767b0074de6aef796565144e7a238844548ffc8c43b28f0503e492744960b6ff9eb3f526ee27da8acadc53b8cec92895708643f06b11084f3e5d8cd4c4bbe47153e8f565309727ebeb0933d9c0e3bd074e8192388d7b34ede60b3970d8a311a7266ca625d43b640a87c88209e43b86ba64f16449ce153ec0977df8f8a3257a57e1f33268450df686bd7b4634f342bdc784c7607f28a305c634c7e1f244805c23d04f6fe53d77c5c77b29470d0a6d598873f6d7397952db6c57e143dad09f50dc7cec9ec2d2c994b45121780dff9b19ed22e11acc4f68f153d20f264519588db2039d4f46bb1c132f8a7cf4e079dce115d98255749cb3bd4ec35c384e972e39cc9ef2fc017cd849fefea678d53025f5100fb87b31674711d4d0a0dcbfb3a0400c7c22c8c7679854aba591823bc5593ab3bd04a76d07b43bffc53c4f586a5920d5cefe3b7cca69c3e4fae0ba61d743dd1f4e638c5bb6801203210a19d0134b69849d789bbaf75e0bd7c59e4bb34436bedd7501535ceb35dcc96cdc27a947c14abbaa8d7c65c83180df93102c4f9c4b0fda879583c0b81efff521210daaef651ff954d66181a89cd7e4cd5c5862217e560ae3a204ada3e9f1676a007605d46b968f6c878c0e5d90570f87fe14c6af24544cdeeef8c9a95b38f4ae60f80ef4a68151dadc6e9e61ba53f843b3a5b90d8f0ffc945e5c44a40c0281182227730a5e2b0344d01f5fdb5b826f6a9dd6a8884f0f5751d9d857c013af632c8cb08d52145813f98943bf49bfee44968c9f5e484a3165bca28d31a36fdd69dffc7523843ed4fef56d92865b0de04b9d0e6e55778607da8ca2d8964f03fa41514f33aa8292d2cec3682c2f016674f9f6202514999eb97e15572abea8443eefddf6ed3108305804af458185288522888abae6c197e237bdc0945ce3e0f451067163ee1700c13bb5828d94fa9ea8bf54a9bb84ef5f25c69f4728bc65d2abaabc5dbce5a90d06eac3d9442bb2b4778f0ee87f200c40c47e91ced766bc2b816c1241fede5f81dec7533f31bd6a62b75a3438c86b2851c55ca18a2d7eddc43820f4c214788702d14837aac94809f5290b6ebe30ff42491dd389b7932e153832acf1b154ad95e23b3ebee9cc2d164958aa3a2820804b4a07962386cb4948d86c0e9a236409919e3b7dd00b4b297128f44ecf0476d8e2c962dfcc8694c50bc1fc5ea27cc33b9fe362dc02e24d013a7beb56a193d30741ee3e4c3b3c88d27a0e79b02eb86039f60b455658a4434a76422f4dc29529b07b0924e8d73cd485c7b456acbc0c4ab6a4b73c31786998c0bca428ff8649f89f10046b2bd98d73fd7a2c695f7ae85b6f2226dcb38d29367ec1d5afa96085c1c95426c2a7bc3b290b1f8fd87de266b5ae999744b4cf023077a428f7784c106f7dbf59c9dacde627b5e8ce24e7ee1a53fab45bbdcea83bcecde457eb3caecf3297d91c601d799aaacc2db63b5426b7514f27ac8a01703310ea831ae1971540cc9945542a770e8a5f23348fddd7a157cb50b1db3247c332a82404ffbcb62c7643ea0a1843318be49866773cba641cac6ecb622686a39087f209cc4b2ace12fe696f2555d47e06a014c97fb4dacacc547659b4d3eabf4820e574010a30aca284aa041ead6abc0b758b8889115639f41eace53d32df23a357c870632464400d0c61e3fb58b0ef2859bb352a09a5bc6c7663909101c7d5e43f768e7e8d819a5edbba0bd2947d9599e99c6857a1640b911655d020cfa2dbcf06dbb067ad232dc26dab346540c7510a72802c016f345961ed51657b3c5b9aa79282362e9b1c1ffe23f4108c3702ad69dd0f924f31a07190532c1e93c53491911a4d2c13e3a315c1f7408f8fc77d438924786eef000f73f7edefe9a9e97765f575f76b42b1d545dae6e8b55064e90852adfffa0c3c783142e2773f040c31adfcc3d082acd4fed0dcc3e4763185033996d3aedb0da34f31068f93c75e614ac4689583238bce0c262c33ecde07049f32d857e9be9b42f2747f1b727cdf89318102673e42c52701d375d877c67f177fb4ec14250622ea9fe6e1469fbd0148d666ec6f6fdd3008495a8eacda55fe06ce939f2a7b3a9eeaf19c954bee736a60fe895630bbb036c2a098b3b10641be2ebab536910784d384474c5da157088f83fb524eb2774ed56c8ee76e1be689b43d5c39aef81cfd881882b5115a9baee50bed1ffe4d6e9c605b3208c6d1eaaec79b45aebead82cf5faf7cf53cb5fb74f1ad763987d87a37af1bd15c0d4d16075c6d90bf9237218a12bef141d9b0fcdc1c37e13e5d6aa1ed28511f84c882cbd240dee27cf7fc964273ed700e1619722908ee5f567a89208517b899bef9e9be99e8897c7f61f888c635d089f131c5b15a1f276f775f6105ff39214e7aed5fd616986e6dd1662779ceb06bf978fc14c009afecc841805c354ef0187aeb12d16eabdef398ab4e9d4e2916a2a4266fbd2242e5b5bc823ef99392450a55e11d9b6914058811d6b2326a7ee04e07ce5a4b73ffbe18866f04b1b1dae03108eba86ae72a8deb1417c8b786a2c2d0c8d3abd1b404d50c0bcd48ade5dbfbac0d2c14bbbd2601a0bcae506d270ad7a7fe9df86a9eabf4d54dc13a7b226ba3827bf173b7f860a2e3db54cf8eb72fe61bbd6515447d705780d8e3e2af57c6771123c19d2c6589fcecc354a791b4796283c80b8107bfa58d8056bd67ad47a9ebb2d3eb4cfdf2ac4a9c4ca31f2aa66950aa5338c1649159de243e7a1bc0ed823bfadb3d824b3ba2b7dac8b0cdbf84931a07e58056056696b69b20a795e4582e2d349dcfc65ffa738ca155041a9c39834ce6f5aa363f97d788dd147083c205e41dac3fdbd9b43c4814e954e8a8f0a27bd0b4baf43d1a33d19ec3611dd36e8b8b757faeb5ab1b4875c50df0a1a1c4486b84c39ba1938a2fd2ab2fe6c297e4a1fa6d0bb99939ed8ed4fb2ee792d2047b43c686203e7fb62a07078a00f4c74acc38fdfd9c9dafcb199419cc9693ad0a7fa943858e96c667d5f87dbcff30b4a440f52b131caef2f031b4ad39f02eb4d3c3401f1c97bc13da54439a112db2a55cab71893d8e4679c417558dbb89afe74740e4f8b190aa6352232f0185a732e788f2968deb7e3c2b37c102d9e10187cd6285eada30611c1a8e344cd75576c7d6acc195e2556f8cc81620ba62d2c29b8af3c4cb5d13b025d566800ade34e31390b21a6276de9bfa40d6ce35c24c0f895d3a6d6a20806fde946fccd6e42385c188de54b3c9b288379a2446ccbd2d148dad5b494c485456e3bca2550d7bbf8babd0f7683cf3625678d4839d3936493089649061f9c6304fc8d0bd631812fbe144335f8b3c726418f3557d68d6efe1117d8676bd68712fc8f06f91b357c74d1d1956d97f8ae90dac30d74b7a92b54a00c7d9605e9758e71986c3ef1b9f67e8c0ac0cf7bbb9e7e67063461c65b814083f8a213bb8171ed21e22f4e5a584cecd34ccda51cbb0c6c9d4155e0da1364f87c47e74dde3cabe73c091d56c573208d4515e921fdbc1f5e71852061909f9a38c7d2c56ca61a2c3a7ccea8b077a4f47792e87740fd01078e9556a8f949d0a8f3602eb500207359fe3ca5d5b911825d6cbe451c204d1c263100901586078c665e1bd267a610a55e54afe905054514460975d0935c028ff3c0ae77a6582c5ee8b7bd46953385615999a81f805cb67c053149250439b036fa2033d5eff0a2f9e16e6c673dd2d4db8b8b1f050008db21390106396212892b12f1baf280b0885ea281ede709a0da18d47f1075ba41fab80f0c512dd8d172f5f3813e705f235b5f1085452d513d56e9869b51e8d4dddec9db3a4f66a9184b770aa31ed2aba5453e783d71ac9281f8440683997564f915588454aa4c1b56e77f1812bae92bd78599d365e202fa9ef3916ebe0e7ff3fc9ef35108cf15fa1d661395caea2a8934dfa02eac77ba373cca27ba3c9b6c7eab7268b78bd8469cb3752ea9311338a4b14709d9fb024b3f00ed3dbf2b91431d9d21f4328f26f64bf69c0312e60fc549f05b0b098e43f08396e807d0e0778c06ac6af8fce5033fb3d14c27348d012d17d22d8837941519fc96d991d1c5c230487208589577246b9e7d1ce5611ab27d570708e0d12c076eed99b6608d5fbd72c2c897459b798364a54857b092d46a3a818e72780ef0ba1a0e314f6146024d4ffd35a943c2275dfbfd5d7f0b634b5f349c90eab2f7be45161b99308d8601821357d39be2237019f6fe77c09c26f28995aee8a2bec72e2c785893a6bb9b1c28e9614394d302a2704a2783fefacf7f23310fda886e43ef5caa7cd5e83621cf7f74fc05237ec33efaf80e09aaecf99ea02b56e05f87a0f00685b2fef5ddfbe485d61cfdc491d4eaa0365e44903d3ed9425372adf678565185d1123ba8d512f16928ec6407d9b788817c85d229fcc544ba357db432a2f5581a8d0fcb84ca556d33662225e15bff42412f819e8b6bf85e4dae084027193fb44d0765c7b3340b65baf97a09379689bb9f9dbb6bb3b0c12c57cd3b089ccd7951054558b062e2b798b43cc588a45c6a84a4aecee03aae466945a30da55a503b9899b91977cd4c4ed2073e24ec29e9cbfd40f388e034ac2880774b72a64333058dab4c52f171fc40c066cacc12cd8c0933b3143cf91da689801cbab290be34cc9d88bfa9e9d1ae7d1979bec2df7967b4b29934c01c008110954094974c8f13bc8018454f348b91d429ebab59b87b38615ce0619258a9c13b35e129b65ddadd152fd2a77acf3522248b164089eefa9001ee8cbae18f785f1f8c0cf1ae82ff179f25247c84faf9c0dd5af2a8774d22d9d5f28e49f435ac3e4c1a31d08fdeefc74885178c5cf326d846514ed4dc883e1e5985f4ee965b18df6cc40db10a37cfcb638d33e39ebc3ed18037f77d614c32e973a94c7dcd9c94053daf37b46efd83d79caa0a7cb9c348e7018b2f1cd4445a87477c766a2228a728083971ae5141886cd6cce2f9418d6c3859d5e6acda80f3d60d5b18f8f183a9d7c038ff1f018f685f2e4e4f412b77a9d5e3bbd6059360476aaebc4e29a7812a12d0f252b465f9c4ccc05a3decb470f044110e459b72c931ec566e42e6aba3e98f3da24146e9c1fcfbf6aad58fd1eeb82b511b33a94cbc13c9a9e60811c0f24caa051829b438ec77cf330871c94db113f6c5a20c787343c102ec7470fb92fccf19c4fd7647e2b7988e37a68fa8de53798df00f0dbad61d9b62fe4dc3a8b97e299bc15988f21cb77d14b1ebff8859c4f2df417be9d530016254a942f9e5e6ebdf9d502399e7e40e6f7d1dca641f0d0b6615e3de99967aa7673a2c9974eb5fd4e5d689a376bd0dc032f7d7a9ff6d5cc3b7d9df2ce21ef057522e26e33343d9651f5b7566d5ff4695485c82a8a14e3369f8437ecf068a8dfa0b37d598cd74669528c12a90a5146953146ad557d695b08c99ad2a719b566b4831b6a455a9134b52aba5bcb45eee5d46047e9d193ee19a0a7c198133f1dd03428a7fcb423cd28bc4641218eeb62df18e6318855da11186c23ccabace99ea70b0f21cf3eaf9f431fd2a42029bf305eb3936852ed3ceac33f3f298b5346ada241307804223fa7cf287e06b1cc9c1ec621fad11e1af4d70e4d0ac1951ed224d408389d98bf8e68cfcf8f65041a5267147d36cdb72bfb422dbeb4d7bc66641826c1df5ebe86a6afd895a9769f3f651ff6a1c21f8ff18caf5f0d749082d6a39e759082272eea7d9a604893f956eb9c00cb488f44bec8d3a094beb2852bfd4656ed8bd47b5e1d3f7e3bc49f51a21cfdec0cd09f5ac8b98302fac52722b8e1e9ba2946d771b99833db22752e02b2730e239489face9b9b179f88e009b53a341d9f0ed78161a817a12f9a80821b75707143c913c62735dc3a58874f1309390294ce2f4211c193b9536de0b3812825fd5c78604eb16f861f9646223b6c808756d5c8a3635335d71bbdb6efe69ba1621bf042d6e2313084916abdf7747207411a9a1c3932a40c29c34096652e3ca64b9f9f0b8ff84028d8607422956508061a6cbf4bae8e76cc411b28548371c36cc8befac51e222fa7f4d3c9c71209e71746cf7aa74e49edbbb541e92b5ab8e1f4782327e6d503d21eb178b5ffe5b9d4d040a2b7f7145e6b75cd8b57b393933bb6cda76f1fbbbdb6cb4acb8c79fba5df9c759352da214c128a8f1b6868b09b521d38228d3452e0c765f2a353d70c5d70b87c186f887f79a60f2f932bb6dba9f639a7c909d205e5922303f381441d32478371deb4f4a6635f06e6f30764baa441ddf4e5f4ba1c334d8ce6a039dd69caba703b1e78e1dd61031f63e62627d30a79beb1c0e981644e4383eecd10e33543a4a1c1f66efa71f4aed7b78197ee8e99675eb32cdb61d66013254a949f9f4b0d3fbf6981d30391de5c8e6446b169d2393d87d35f5eb106a7890ab75591b4b2708797b20bd78a5cffac768d6d695ee462d2a7db361b0d360f7f6d1147a79aa6c188b2b1b1dd39a7fc688eb8a1cdb70ff56019867b59197134e8297393a512572a49e1ba945cc897f8baee8dd4fc2f0ff382cc1aaebcf45aaf2b7e5f983736fffa7048a1df3571cd8f4ec91a1c9d92fec406eae5cb4b3f9d6a0dafccc1d1299387e6ad63d8cc265619dc7688d7bc245ff332559fadb25e736a6530db2173066b905f3366cf7878cc23f6cd198f90c0a10736eac6c2ede6dc647d45a07af1343149bff062d8c4e694489cac7043366ac7a1bf08f4708fa8177e7a69d9263bb7275c97e84272f4744f7b13e1be49b9a54865a454dacd9973019b8757d57ad831fc8833ed996f54fe88d12d3339b2f6f338fa8d1e6bdcbe4885df48edf4980714b60fe166c3d337779ffa74daee739ce4a4f397c3a9861a426881109e529f4f3f1847dcd83d0d7655d23d54888a21fae9f0152d17ebfcd9c692843b7d72d1078e2102c5e6e1d5e51c84a3a8e45b285211812807e19be8c34d1a79e9fdc4cb2fccc1b7a11b180706a95f9f0f96a15f98031ffd94d1c3a88475e316023b3793c97bb99c37cd8464e2769c1af492c4cc31bfb2ab5ed3efdb19b5ea98bbe6986759867d4d6d98df7424588b79a518c7c7b06f7ad4af9e3a744f7da335668179b57968ed17d7857321cf7dd6d9f9f276f473ec2cdd38cf8507e725e7de725ec8e9f0a5d35ffa386f477f63dae54426e8f996672213b0de6edbe67d733b30ce0b75f881e4d0ce3975eeb3403bf58dcbb9381df99a739c8e752dc80ef34b4044074240797e7ecd3f209a7339d42b977349cd374cebd7bcf99b17a3fc90af1e77beba36abfd3a762904c16bae795c5966bb928b97154c2f2fcdafcb355e6d2bce2fdf7855f2cb395e757e798957d72fef7895e2975f5ea9f8e529bc5af1cb55620cd5af2fccc1f4975f5ddcf85fd5997eb9e4962c439d9b2c43bd442f96a17e3196a19ea2b2f2a5642c43bd5dc5bb5d896319e9256f6319e99c67b58c65a46b993755e28c942a517ed1437b767c06c5fac465299bf6d09d2729b0edfd1063c70c48d92e515043ede844d71dbfb39fcb1e6f5ac8fdef80b8394fe8010a104959f0cc25dcc30d11408ff955bff0f2963ab8d3815cce12c3b010c3bc669857ecba7cfa4563945351fbb44ff7ece014c485828db1bbbb63125878623b7b7d4734a7991eddcaa0397f15e854f4d8a4c9504e05acb8211be1c01fd7304ee4fa197b914828e4b12cd301fbecc44945448e371b1173f6b00a14dd70638e4ec3f362a3fa297a76b9bc3c7ebafdf62d045b011b5bca6fb24c7bc496dc762b399d892d914b2eaac1d825e93ba40d1c3c522f3f1e9e59a63f971df5d979fa58212fe7649e610e26f6fa1b6285d0d0e046215d7f011d5083dc3df1b1dbe7d9bb08d9019f3111ebb39927ad72a95bfc36c3e295e9339f01e215fdcc679078653ff302b47815e333bf7ab03b99db9ecc35a4ec72cbb4236b2e5f9b0075cdad6b485d139564ae25f1b4caa755f433b7455ac54428400a71441612493edcb413f07c687b3e4b22e84354667f3eb3accf2a4e68813ef3cd6a36453657646ed36a557be636463647364d6c906c925ab525f1a10d13147c68b305121fa27e3eb47972820f717c6853f4d9111ff210cf678c85cf4a3fa087393a1dc2aa4a77587e4e8dd560db22ae36e775511fda608392db71713a47323f8271d22dd3396927946551470bfae84f749decd380a4cb0d12a77afc23f5e30104191537d4807ca6925e82160424533d831b3dd4805e2bb28c0a41a4c73a2b2ee74283e561bc75e121eb04be729e7ce676f85715226e487d3cb3735be25e1e6a418f79c762d790c01f8da519d1807c5a8a640d8d2632a58455314d60b0250a56c51c754b508b90ac29852dadc75a861e73cc4b5d4c13b04803e9b16a9df3aed7620e34e864c4abea585684c78e801e731bb7c8e504d12146f92325dfa1fe91ce3b2bae0dfdf6bbe9ceeba93825236e7b4b39391d98af2e277396655976f145afadb3e26a9fb9c5b69217b345a7b098a398a306b12d1ac4903c0b34925a156a48349eb4ea488fe3943c73d232949ad0409aa9e91d6ba5655ac2c4321959c9a263519e0f693499d48757986b43b04afb69d087579927c120e621e5a13e4122e636f3402d09278f39e6da4fabc02e18c41ca3d184461396c1588f851a52cc11cb60347c5806739fc2c53cf302d0846530e7ec0b41241eab1ff8c33218abc98348a52d2ca34218a497de5971551ee687570478e9f3f3b2d44ae9c22db55eba96050c120c2ee7988d7b2b37cc2b659a9c58a97af7200b0d2e8dac917ef9e534dcc89af6cba1748df5cbbb1f5ecdfc55b51f975ff35ba8cb2f2f2db921b77cdc70618ef99535d2313fc99ae998cf16af601e730ad42af9988d8a3d76f94dd7cbb1cf47835787c4025bb7e9c58d2e3f9c37c40cfd8c324e5383b35fe297882e4c135e15a0541476ace934b7552912cfd815f9ae880f0f87064bf17369e78fb471f0414323697ed26031c64869a49146fad3b11af43a23b6035408ca928796f6036d2bc40dbb225d9156b577ac063ba078d31dab03a2b103ea58f1815ac51dab33d2aa9849f620f47388ded4dba932e831af637546bc0ea80b977ad8b18e689f0f1fae845b3b56c79235b73b96ce35d5b8bc5a16b73df498ce05e00e29a5c4a4d3569c1e6358c7ea989831421d13315474ac56c54c01d305e661ccd08e17925a845e84e607d304fb5a845e16b18cec0f89dffbc10d4d41a7239691ac1d9661078bc025ac3201999030283d04aff817e450674252e4815ad521c1a5252f6421e8258d98a1972e5ff029dce9713f2c23b1af54c432d23bd64beaf3d243ede7258ddfa47145839246eba35164a25104b6b02c58db59b646dcb0fed0b383db9d1295f3d220531ae9c9512f0dbe5499e2e9c33645947ce4c4368535827637a5d688183df64a6ec94c78f98d1b34dd786b69cc91b35f5e54a60797cac6738d67d7b2b8e1f6b555a9671af99a42edb68b9d6c1d39592c2975269d73ead08b524aafebba2e8cd3c15ebaedb6a21bcea0af4747cfd247faf4101252644556c8add65654391bb0d72146e1d872d20baba5f97d970f9651217b71f48d63f9c888cb59139ad761070c1237734d730b6ed7769575ce38a7f7cf2f74c05bbf690914b54ad6f8ead363aa4fefc790f7a3080a53d3acb6dd6bd61aab95f6e7deceabff68c91aead57f18c99acbabff386ad2c5f7d5edd51ee3741ee394887e2ce155e6a8960138c19d5e22eabccb8f50bfded1a3675e2ae295e6378264aafae5dd109229197668bc0c3b37821a86ead10b6f78df425ffdba31f4d56f1cd1ef06904cd5f006d0d716a32c07378c398a3992351127a649032eef5c720da07ebf1f433255bdf37e14c9546d313221b9eda8a11c94298a7ba34726e9c60eaf38af7e6308af329749baf173835579d55ffd07d18f225913ebc9593269f224b8ac0fd907ac0734e1957f751b8eb8d343f601ebab2de2eac87cc1aa1b400dd61b48649ec82cf1d56558bcb22e811b4896407403a85512c00177453486f86a3f1a3e1018b25d911137ec8a74607e258965aa5bcd990b23d4d057cd8379ba9992f8311463e821350249bc820180123e8ce1a32ccc90c157b753c6ce4d93432d465f31ce1671773aa608ac420d758c11afac576756a1aa60b07a18c3e46382f8ea313dbcd23ce6c86b69b14c755415dca2c557af8e1a6a554b16dc32e4ab5b0f638ef8e88baf1e73f4d55b33b5ac17a3a57d2d3b2c634dadaf4eb91d317ff4d537aec657cf04f054e8ab875dd1d71623002ca155c48d325686c532322c5e95bcba0c529d513c1310e96be98b804fe1d61212cb542ef5f50b69be7aa80d7d75497481f4f06ac65726455ffdc790ac69ed0b02b24c751d1b6fbf239d9f6aadfe83883ab93f8abe1f439f29883bc45e1cb520e110747ff58e40def8880002ba4474c19f170d08a046b489ebd0117f6e5f8ecf34e4863c2b0d37b752212e15e2d2b4dff40c158a1b72ac7e79370dce8f4f43abf827dd9921a41fe6e051b833f80aeeb7c5e48a7dd36f68155715e6f4f2264e74f8c9731243e96fbb6607b94c99114ef1334d051041e3e2a366ad55b7d57b2a4e9659af9ee66120abce81cc0b10b3efaf9e4ea4c7d01d6390fe1dfa8f5426007d584f605437c9ddd03b38f5cabc9e8a73a47a281d73e676b0d70dfce5d8c7d77501d9a17f7e19907f8403d557befa4dcb8f7da2c032abe6941d433f9020f177687696cceccc714b206826b74dceda209bd79171388f71b06df326f75da0270e256eab96f378381c6b2586b31560dbbc2432cadcbc24d546b581025357e5ecb6794968b4c65c7085655412ea1c371c4a3d403f88db4b3a8feca5e3d0cd7a915397d3edbb52feba40ca4bcf65019c6f8e03b7390e4e83e7eac04999739317822304a7ebf578366799d268087175e0a4df41fee58cc33c00aceed83cc6b12078594301982b659f8df5ba2e29abef503f5a2f09955248d6340b13d82cc9e5d30be2f3e341bf65f6454e651ae09165927e1ee699c7930da07708798ad35e08821a562233b7e4317776b039b124d894dffcb18c4a323d26c17c7a4130e7315f73db51def031a75c034f331ef581508c1f879e243ae47820e00bc1b1a1a7b9f578acff1017087e7afc2e6cce9f1d333e136219ea571728e6f48ba794a6c8214fbdb5e89a8eb5c3ab56570465e8899093a0a7b4037a4ab51f9b4df14510addae361454f84806626940483f98e256b30269d6adf02c849d0934e088332f43c45b447bb3ecc68d22b5e1da589a5320421231f6e42459e970811f990f212211f9e7b5e2283240658468529d637b31a748ecfdf72c4397b125cc37d2d5b48263ea84a99c52bb22c61cc4d329ad4428f64aa5b8e86b8616a27c593eae9944faa88d44faa486a274ced8040dd7274ed5c962de2db5b8eec8f96c50d2d11cd0e61151501834d029eef21340faf1d6a35cf1a1dc91a6b7f9a14d916e75956db276c90120b646d6aa7c1144f833d67aaa7c14eed34d8a99dd48e6d39ea9ab805a496262d4f5ab52383080bcab7fd29e2bb256909221fcae0912143c6cfb763f6a755213d4aeda476e851ab5a051f6e4d8700e2c396a3efe9561bb282ac61cb136c1197899268f211e6db4bb1b829d8d68682a47c6990adb06de5dc7a6ed29b1c56a3db68378ee3228d31de7b37f9223d95146e85a39452e92cd2830183cb891123c6882cdb0a8ccd146363e14e2ca7d3c9b4a2723aa5dcd3e9d49d4adce974bae80b39682e8446cd484c50162333336b51b37372391d9406b11cea9d155776491d941afaa977771ac45c6a8d6e02ea9ad884cfcecece101ccc4d4154988a303769d12a2642a2c9632d414c1e33f97c887a53eb31faa1c9e8318a139a8e1e8baab00ab52aa43e43ad6a612d4429f8b0e58ac78a7c88a237dd718165e8a938161ca2a327078ef5f0f6f098775058c7e472287f8b924ed1af25086b09c2b89c16255d9249a85561976452f244cb601d73139029a85549bc62b6da4fa9a84382551dabfb61a22b525ad23161026235cc12805a825a8224cc51340165b4038a1d922ea925287a2d402c837987e489c71c6b71229a804c402c93f4d88ff64331a09f184054c804541f0bebc98865308f099a5d5ac284f4dd94522a67f49ba6916a61d4602b887b79485b71baa4a61f5e0de0db2913daa22d1aa7a444aaa2182b15ae34214d1ecba870c6ceb7c7219669e752cc6fcfbd9d3d234f39b1d2f49beedecacd94c40d69112d8a31c4ef39b1a3e8754d4a4497a5878548c700f18ae6fbee502a3ad535699593aea1463ad5dea68e0ad11f8f16e98ebaa36e8b296b18674efa236b5c7c54af1f0f1107fb84e0ccaa84a30e49d6b4446185259ec0848a254280d3de25c91a212c3842cb082d1154c1852670dabba3f6ae09f6dd16b3497724851bdeb03bfa193b17163e9fb9e5ce8a7b3566baae2357909cf9b1777f3657486e47fc20399a4f6761b118e99a9798cf7e3eb33e97f320a63207c267998d11862ce133bf6c8a58e6e886a015d7657a7c971dd7cfcfa6a8c1ccfb559e7d224d2e07f50485844a6a30a3d7d55971e7aa74799d15b7e5f9880aaeb569d98bb345dcae63f18a85572ade4dcf0d11ef4647d7d83049718dcd124e653a74e0c061c3060af5f2f221686394691a0dd82de186e06736344d86dbe954e5f269a79df3aa37ad031e81b14e74430d09c633d7902e9fe1319eb9f59135ee99b708f10aa6468cd0679ac77833423295f9e5cdccf06682642a739f19fa6c0648a6329f1ef8336cb77556dc693f171e3fbf1087d7be1916162e8ccf70189fe1e10c4bd6a0903a9599822e3788426a708667d392a9cc617cd814c954e6d58bdb2adee267b4a96957061af94c83f2992de2b318355538c3b2915d33ac568528a4cbe321051f24d4135e4dcf1c95745f739415388617af07914e654ebfebba5a0d16f08cf5e9d530c232fd1386cf124cdfb8b7d3c564e24c3264c8f09b660b638391b57515afdf52ebf76d8ab5282c7c864255816b7af4a05641ab20e6ec4d0ff1aaf4299a871ad1a768459fe25aeb53ba9d4f71a34fe9987c8a738c94949414154f4971189ce8867c4acaa7b8e47252b44d4321699a575ea5b8e619af585c83716d866b2fae69282cbce633bc2a53d561bc174f83c1891a2c1829273e7318409f653558a82496f1814292a9cc3d1e500f5741282532ed0b96c93ce5d3905826f3cbc33ec55a05d91f198e787521a5b2195ffc600a1f3afacc7b1481634029c1334c7a18a19638c267a8150cc12b8a72d2230856a1ba6030432161afe236452ce32db9d4ad47198e6c028478655741cc831e198e68b80afacb431492cd1296d109d25fa3468d1a4f5aa57d2e97f316375caccf70b629e2d575d9cf65012f1ee30d80f119df0766388cc77c1f4872c30c87f10fc4f88b334e785bb266c6c7f3830dce8bf7441c18cf9c654dccd713715e6c8a4e36451ede8b424279eee2e305074673954701000028d476facb350fe665f2ab7852c6cf5b1945deb2f8bc756d28c6d048de3acb0eaf52deb2f0bc7566969eb7916b34244e656ef9b52a70cd0c6b86b585cfdc577041969daf6fe7545151b9b62b25252525c559341b2c3e6349a136469672527a5d18566b961dd19ec8d180acdd366ece592a4d6dce39e7b43f77fa9d739ab4a07bf98dbcb43aafebbaaecb8ba1c59831e68c31e7bcbcff32995858606c732ae16a6e52c2a5bee2767a35806ab0e60c2b6311facc396489e233d77c688609aed190a49dd4d3e1bf6ea727c3ad77593c97cb3bf252593c7e0be38a71c5b02a291b0b4b8a0a8c52c9cad83c97d3cb897331add0ade4d676475efca65554ae5f1f7222154f83d9c5e5d430d260e6476ab06a00f520725d3d7c5ad5c367ce0985f6737acd7ad8e9f5f0993a3d887c3d7ca0f8208d946299ec0359269bd99c74272c40169fcd7c91cd54e1b319230cc3139ff91236db66133d7cac672ee372d3d19d1eda1459efdc7474add7c3a7f37af458e1f65bb75ef29bd6be6009e295f6996b48bc8a9fd9f4806b543b9d62d54e0f22ad2a79e63d7c7af4b4aaf3cc6bd400027a1b2c6c8a3895f9f4a9e2d3ad8a5703c8abc16a30738cc955f1b006ebb3cb557c7ad7bda88691565ddf9117cfbc06500d964d0fb8c6873a9579661384cfbcf3ead760750d2095ebde901b320f7a3ef315dfdcda9006fd7493e6d2a6083c4012af6478d6e2272943fbc2b90afacc598c3e44217de6307ce649ab521c07103ef3b063c001049ec976f02135facc63c0e0c4671eaa607082c1cc698b77b2290a126378e18c139ff9e585335f7ce630bc7026e9336731ad7caa9e063357ed3498b996c50d553b9fb9ca8ba7782ed7d4e0d590863eabf7c59b9dc2bc2b59ae65bb3cec71dc19435f7f7276c650d7faabd3a204976b43bce2fe722a24ebd087b4e82f19fce520f6a18674ed7cf596dcf6cb2bbad717da20650e7e16592c93b97371dbc319563ea8a08f9274610b82a20847050c883ebc910806547cecb890d2c2158ca003a1274ca02286870822a6f0822872c0833365c7e8d1c1e8f784449b422229399248a064ad278e9842230093265830852d106501278ee00a455cfcb0040f789490734a1939421179280ccc0eafa427b9510a6109fa885e60f44c24c5931fc033911455bcbd482c23bd06dd506b0dd15abc8a2ebdb11872592c237d7a5d8b652ccb9d705958bc9a5e43da42ba482fa3b84b0489435eba0c593fdcf9be7046c12d161dd80a058ddddd85dddd2dbbbbbbbb042d83b6c11570209390e2063733d080002994d87bf22898f01bd06d4141238d55c40805884933c432eafa5edac6b747010880575ce32fb1e79c4df38355c2cca0b8e1fd8d575e90f828b861d4221a757b83118a0bf5667a89cf445120494182e79e89a4d819b242e4a9c2c472d22ca223a8407404134b94044ab7205ef43aea81868686865e568165d4fc3133e7539323aef12153cd34394c7c5ff8d2f0c61bd801899ff8982d5a030478a8569a4a834939e7fc5aca1a20f0d329909d8b899daf9b0e5383d14f33eee460a22e1a0a8c14039fe843fbcd09be3d023160c51d19512ef84c0483263018c2d02584c835c67692d774a2c981a3c168a4416142a99140938306c715508090847ad12971e4d0d1dd4d53d449f8c166da643c1321810289133fe4f0b4c6afce6dc61a6374e7e6e5607ada9d9da69661dc9aa75bab03a9619d18cdcfad2bcf2fac5a8d7db99cd3e5ac3090817f602070f8701980fd0721241983f8c3e32385264469d1183272cfbe2a562ba6c495cf44489ab8fd4c84c4c84567df08051af68289ef7b1a7253f021d8f2010715dfceed750b189cd0ceb509b22ef1031e205561081741d0820f706e3bb7571e9470c1174340f1044a12b8902c1b1029020cb098c1d11025705e48620a466012c58b2e620004738d3da7067d868706552cf1851437f0e2861adc200a5cd881159690000a174220957871a2fb3025b42fcca1bbb18682740d41b9c265d3ce3ddf3dc405137c639121a1020e2449df2ecf444888f0d7331192a20f4f2d4d08d65621ddb637c693645e54a853f2a34a1a9c507c948a062555d2e08b4683902a79e9343e79c574ebbeae2b887a1b61b52009c90ecc49b6f41cd25d3a289d3372437fe9b2a68168e140c0ce4baac4c6cb9e0f99e82517bd347ae934522542ad8a44b8e6f54c38b8e00685131d32818f9c41965e58d4899ec782cb1ebf93e6dddfb6e8d5b75ccd3e7e3ee1f4ce667b7d29a594fa4a897af436fab17d7b63165230a4efb140723bc04983e2d799107ffe2850e85e1397ddb2c9344d29dfda6f3e588e0da3a3b3b449aecc2096abd0eee7f9e753aecbccccb64241a594524a9daeb4831bbd629425533f25e69e06d9398d3ed120aba6046a90e5db260497c3aee5e046d75470518cce59bfb0624127fac32976cb1a976140548cfa3cfb7ced2a63f794029daa642c535966ae30b9d1b9562cf35ca6644d567b585c1e410bd280a694524a5694b2c430584c2b3162a4bcfcc2097ca98865d80ba0246c29352abd7d9c648aa794524a177621cf9fb72efb8c4ffff9f3285c211f4a9fb163fce60d7a1af4dd9e47e1b6b7b6066b83617c171e2e35e8b5a1e879146ef4d68d1ebfb9fdb816a5942b482ca594b3ca89f19c4ca59452ce0b1bc1a5d794524a39e7ca169203574a1757ec29ebb41da042509652b67e6a3fdce87393524a29e777e59c734e29e79c73ca39e79c71e5089a64de360eb45e3ab3a77871a3730e57d04bb7426c0dca0a0595524a3a3dca1b53a8020aa53ea03c00227e7c82dd6166666666668e1c99259d01a594524a299d73ce49299d73ce39b9cc722b324e326266783402205335aecbb3a1f98c9817181700c8d02905bf5c5a629c646edc9033720657c2e072e4cc1559865e3403a0745e1e83db01f3334964194a1d069773492a99254b4925950490221081a5e24601248b89ae70760673ce3971d099f2841bfd72760697d219e09052c2206970a9733994b333b83247c2605b80004216524ac99297484ee299779a80999999999999299df289ab6251ce2428765db2af6019657b629bbd3adbb1b8b4b8cc70d40b3664302c7e343ed48c86008fa3c167c0c4bc80344eb4d0e2061c7a30d0e4080351b82fdc8d11d745066de168ea0008606370670c026c3ae697a3c18b0b38b6d913061ba45fee7235d5b8b8110765664a6138d1803d27ce0adde9d163703973002a69ba316098585670482965cd36a91139f2d39670a3ab70360697d294ae66cbb131afa20c2e2d7139b4e36c0cee9c3647898bacd3097ab0647acd15ab15377cf92551687db8b9b8dc4e3de1ce706329a3939d18c4ab1d20e97208ab62929452ca5604fab0f6f08e87b5b6c02ae63a84c1f68c23e59f29a364b9d313b373dac65462bc6cd27e1422bf19e3d360b0c880f1b1b884366a7cf40d5d53bdffda72c89afab987bcc53733c972d41c2e532b53b8aecb57625668a8d0a800c03e002c01804506e9744a5d4800b617269d71065197febdb0e9d01d6ec9152e674e9e72f204b3208e5c990ae2824a5650299912009554ca0b1ba535b6d92a29690efdb42dae90d49c3e678daec6665f70e79452705c8e8c02b05a665b3046b642111be4eede02ab11bb6a46a51268ecd83d3c654de34cb9938528b4e0a7875ae0c3c43d252db93098d04a9cf8c14ce2969e899c18924f3881a463e00411b28a6bea421fb9319ed05d5c1620704107460012a202d0124c001aa2b57055a24c20ee8a93c8c51126510ba2235a08e172cf44477680c411187871240a258e001d6125613ed45aefbd2ef56ae1e7240420195e94208651528b0f5400630841a717a08085492b4691139890200483a69ec087959b2308b1303102951ba31f134d6562480a4d0e1a1c3988d0b32205135c152610e9b46892622482d2cfcdc111dc4d127cba2886d86e98f4949810c2de000188ab342bf8d1eaaddbc5e2088b2657881b23ec10ad6008099e90e006093e5c0871d31a5a820f3742682df9b921424b0644dc1421c8053d375914552331084a824045a7f8c37a9740c2c88d164fdc199a40226a62072ff860d6cd060af4c1bdcf444dc8e0a34ba22658f2e8ce78266a628816d797d048dc982a2491dbd20227dc9467221620f1c3022298dc18cf4446b6f0d1bb87db3d131971f21dc56d328391a3f8272347a83c131d41859fcf444688f8f044a7607d53896d93ba833df2449df6703ca2f633b362544433ba212da2f342bfd9a3fd007d87da8fc6ead931e335d60b7e2a085a880f690f3b15225ede4dbdfb0289af496149ee875772a6141531444488e30982f29d02b43d4969d96e3944ee14391102a23308e65358b2a6b5e8543b13a0f6f6272943df29d7fcba253f70458c23a6fde8c050cfb64aa9941ea393a8b48dd565410c15d100000020085314002020140e0a0523a1783c9e69caec0314000b8498446c541a4cc324887114c518638c31c61060000142066888661b1000abbaa045159958a999d0eba58b35efde8be29424f4e953e5742afc37b492e80fabe86c00e644fd081eedd71a8d85286efb64bc57a2691de6afe09d6c0fdbf32db1bb6d4a0861e28c2845cd0f606fcafe357239b249299dc9f8a8482baad576421a62acdca9ea1f034ec969ca6d5f5c78988aaedcf627afe833287c1e72e9099c034d6ce23adac26790751afbd1938c388e8d2a7455c306582f55b66639970ae63fe33ac571018e52f394c43ce9c25f2eeca809a099799c03c3b69b3da71c95f8fbcf72a91e9ac29f106a1da285eb0697b5bf2033413973f49a0addcf05213f853d14420ab323be3d5d342f648297f0aca978ab47da59c16105128b99d23e8fb1f03e4c04eec9a23d39fba40d94877e6343a982c33f9b2f049c7b45a76dcf239b8eca0c3354f43aae120f2ab82edc2f299b3852222294cc0f181a3f66b8443d40bb82480c9b84ca919c037540600f58488d5e0acb03f3363b9f43860d82f4d381819bfe0887dcc03c4d3f364cea9158b670a0a809abf7d491557b037002d5df3ba38ac7188dc7662b2f88b17129ea07854dc857e900c8228eb92dae4024b633d43c20bb143ced632f575324d1c2525c82ff060df2711c7167bbe9e3a3e55ec447a7b4b2576907122d754c3b2259354a15108c48de7778b2dfeb4dcd0a63c6d9c7d3ff3a8bff4b600f52f2dcefa4ac7081b45cc4b80261d9b4e5b43c692a98530bd3f52ab5b6ec3215be0cc6554a4c37e9bd6387206f303f06f0f0113a1e7fcde272cb522d8888b51c1e9ed9ef680e78429b5970e99bfbb30d811a1d216d46c1021a2c24cafed505bda19e2c1d3b6145d945a351fb6ae70faa2289e58528977950794297aaed29b67859121a160325c3c3353abb172a9e563e3d405ae7a76fb8eaf014d8a0f846325c86c2e7fa2df6fe860f8f3ac7be610f0b554d076c8272cdc50475e89be9c6c3ac745cdd3329b01edfb52b09268d2b1aafefaca2ad18372b86611c7c5927db930b9a9330ad27c3a665c8fc7487a3ac242b82a4af6a4850a498dd8bcb6cd89dc41bd775734e60172e7a29291fe2e1d50793902b894d6b6c693e730a0a0c349218583b815010cdddaba04c3f7acb46722ab5bc81e92e70bfb1d2dace9b3d53388de8713dd728f266ad61087df216a846b2a324a1c8774b7474e8fc1cbc9c9a7e73a12e1a8f829b1cc4e3e88dc27e0a278cd6d7e38a48eca9b58b8df4f07daddb38caa98e48757ad808e56d6d809fb28408fc07447bae064eb6e3ba544bd10a778d425c174828cb7f6d23ced44f9c65fe82ef707398379b6f6f7fbcfec9381e8bd68dbbd2ae077e1c7b6b834b9f2cf603e1092f8d3af935a3132a6ea3c1a1f077dbdaf666d18fa5c6e68730516aab5891248e3eb6deb56ec16831aceecfeb23d1ed8701c5a4597b4520f5d8d140f87b91528c42565dd5f45abf0ed4a419bf17395785049d199d5d64b2a15c1ba682a97812c5ed6f6456e65db07dc5ac9a5f4a2865d5c9a78d6b01d3046e60ffa57aa9758358cbc4511700ccf304f78014b5758f6832b218a598468b8eceed9521738e1dd615cbc26f98bdaa1b606b048f71ff6a41a67e30cc46dcde410b55da39bf1c065393d2f2f08f490129d49fccba362cbb5629d733cb4a490fbc91a9d17d1e592bc09db812fdedbf014be2d092c602f9ceba1e0978de81e0c82e95a1c4b54d7b9aa51cd8c92cda1ce084f0919d8f21515676fe7cf164957a229e07036f6e8fe86a09f0f6610b60638117eafb638d00dedb62fe34e274ef986cb44b352be1b29a9ba0ec1d480cb59984e5a16921165f02006776914595055e66b41f6fc191b344873d2e52ff4949a20b72d5c62936699a19db6575161a48cef54b26eadeef57e48dbb41184ac6900dd2cb1fd4134064a604a5682ade4374c5ff7a22473afc1467953822ba06f4ddce94b74604d351f5c592436e923d2c72a797bdc58f01538df2de41b5b24e8beffc57812268145c8caab1c0de30d72b222df534098ea695201208dee43c2dcf6247ba0cada5c6648a118a799e0819a380b546755560c906962c8d51990e520be2200c96f917168a484efe747dd81cde9ad1cb86e923c937a33f41ab027c96dffaf761f8892a50e1ade9d70ed10c5eaa0b96c951ec47639d3dfa298d4a4b8980d613c5c9b0024f04fd8925ba5d2aaaaf78d286c392c85d11bc327870096e6302a4caec6d3a8c9d6e79ef94d76109e0c0820b2ef81f73f41425cd41eebbaf2b100c3fd51263f568de1e634da4ce76bf6528f8e4c4e46bc4b43209f60a4496ce3decf9f9438bd4f17ffe50e1ddbfcebee90424eb7a1e2389fe298e9eef90e1854ef22010d1754ba9d3d38bc282b3d6d83f0ca26a860e0c0ad81d0e87fe6d888b0810901e93800c3fdc9ba7f03a5f19e16e8fe04d72c59813523f60a33ac48c52d67273138ddef3029c1545c3c718f0d1c89ccb71f128341f365b37b78f3440280cd90c13bae901359c9ee56890097b3355a2beacfa3ad7b239524e2a78c8901d3fc85f0e1835e5e8bc5ab263aacad681cb897dda544da2230639e84ab4afc474f1926db42d3f5159b2778eaefb93593d8800b9d534977488940acc65c4af88c8d4c4d65f8f397b5e8a64d8fab3caa85b9c7232f5b2290b118e16d5acf1b34d5d158939d0e39ae13ca6cd3c14eaf156667f4cae89a8d6e146aba9ef2851fa65254c9a95088508a0326582493b55c9732d9f19cbabf291c048342908b627f028af9f1556dd370dadfb21270fdd9a011e032b51f855385647648e6bbde098e63be87b27aa4dd6ec2341e83b15095a93f609881984f804baf2698316743ca42d2aa0d5c8bef54ead3fc9d5233f696d47a9e3592f0447d37f5ed397447fe05aaab7b20a5d5317a153a98da00b2479abdeb738b7f11a814eefe1d3deb945f0638038e1bc6b04dfdf4363946ba9a9e1ae356b61c3bdc018c984b04c88d01553dd277b50c7e930c4a31f547c6faf03b0d9c880057b03f81aee8796e9eaa8a23ff321afd93dccf051950b49fb3380b66738099acbd42e0947f8d65e85f6e4ad872dc37147326b4ee040f4474b572e12f77734d1310d00ebb350fd59c158d798bb46171fb9cf3024a2c10bff633b29a29252a7b67758173cc7703fbd3b40fa8c46706856b4faf70f2525a4faa6a8661b49ebe5848a8f5cecef5371af0be7085da0c418c1721ba3d873fa507cd47bbf5fcc98bc9c2eed03bfad20095851b709da390ba1d274947c466315ffb60557573125403bd59d3f22db62d0486602187b9f2c624e5cab65a5fb81569a0283b2d1b434bfcbc94a48129d33ec597c5916a60f84ca1938d6867bd9b1818ea366d355c31ac6c9698427b57429992e1bafaceb2afa3bad93974d154873594c04a0d4e8334bdd587ea8c58f0d9c090feaf145cbf8b984d657948f3b597ffa06f782b9461f5c77ecf851918b24565089a6d068ded2fe03335c00e88095c49d2de76530ddad172f37601a24117e7d13818c9a616aed2adf95ef9c66cd5cd7abd32ba137cb65241cef5f4ae9421b864a8a0d945e9a107932f1895e3ea92291e834fd2842badf48a216166fbc9f31fbcd79bb5522e3ab649a11c144756caff85aa04420ef6fdd176029295e43da5af93cf4e4dca415091d892d4ad4e1cdbacee950713f8503ffb2a4e051f81411f928d93759168549f22d2e0da2c317fd5756683baa2b09a11cfb6ba7886cd0aafeadfb04f8c78d59b188ca48721f0bd68bf76c551cbf127b437d585c57163fd007f449d73badfa248f08032644d08dbf57e1c5f50031b66b7e0de46ec58673627c28f26ca04243e55f83e9f62ab898a84cb32bc7ac29f2bad3c3e73e47d1bcf6299d058bb46e46433d977129d9df4c9e2c2f748f0e41a6c338450abb98fc10921d8e28122903323226c277358e83a2f025cc4f991005449f62f73b21ac2ce908d80b44f9c7389605b14ebb8b5b5bd4656b823028f7ed6e6a26832292de7771e306824d3a7c6030931d2123410014c943efdb57f7a96387c33bfc6096c31eb5a3b04cc22dac0a7b9a9db328ab88307a9ded5956eaac14e359bf62a98465f0038d153c974e9ac650d87b577736d7c211cda09b53009435d6755d4da189716ed98b7590c0d5f0bb8875d41f9d7f5ab1a6d927fbc7ad89c70608b78eb09f6a916a4ad1e9e7f4f44f834baaf0f86759b775e025a6b54f7c2311b3cfb3260f5f23de7d2ce7afb7d903d84ec24a15a2d123ed4f0e14af74effa3556ab1c8d72a4fcd9326c44c29dab6a32ba42ea38213a19b721b624f4185dbbc589566fe5810c0fd09f8f1f15b755065cb4266e1494937ece2ee8bf62d8aa092963d39e29e64144737401f81228c266a8e09f64930fe492c8488c08b47e48511a2d9a3b70afdfc0794bb881093a465f8692000bb4182c92769d223dcefcd98aa1a21b797a632381fde1d96d754a83a103bfbfbaee406968d6cfed826ca3620b85a06909b9aa826e9e0b871ceee00b9dbffbd244a60ff45328c26503d2f9410ccaa0f70dd41f1b4aa28fbef636eb5a38261e763ec2758673a31e5abc36c059987ff9c48a2bcf973a6e79107ce6a3a0fc6220678db9bcd54c93bd0c8c403efbe3951befde657294dcb5ebcde548f4766e5e499580332b875d97b9fd99830c29e99547905180dd5196e948e5fcc101ce15f95a3847fd87bc0baac1d43b1c7eb9699f70be41824a6943659659fea0a59ced95b0f1607d5af3f9a58a05cdf2a79d6e0b5f0b57077e4cafc7fb73e065ee07e2808657ef6cc22d7e90d26da6bc1b21306234860ac0f8dcae4007804c010d1de62acbc092e7375b2e5877b0b5074ac3d160c10715d723bb4d37f49feadc0b9e28ef6db8c95ebac1d40f9496e0916a96cdf1514c0dd8842a18ae5427913fc1940e1f60f980c612e1325d32c8d1781252aa6a60cc634a12c20f81d19a57df19171ce803c26ca92e0748396103b767856c88759248f1b68527383d1df4ff11d7e2956b81f98e0b17a50ca9037097b3d2f092cd1d305138261aa6ef1529e7299f28c8b731cb7bab8734641895fccaa5b7d13792e9cb2cf55af2d7bb009f58170e0d392a5f9d7e8a169313b0abe9fc2bae6ee49a0f2bcc0d8134afc284cb92eafd9c56549bf89b25ab37221009af564c59f9ddeda2f2344f615a7e09ad2e2b2279b12474556b681ebaa6c5a99cf6f129a9d0a626c47d6944d9649c5bc5c78b30b839479d092660433ee758255bef56d5c00ce6d45c773a0a7dce7eb6576ddf62a78607eb28e71aadd5ce385368c5613913bf9e5174d360b0cded465d655b534efd7dba82cc39fe215110f0fad2b03ffeac80f02ae5259007da5c17bdb6575394cc3e21b7cf4d5b5327fa1cf4d00f44b946197dca3483d03ca7849536064196100b44e54ef600c8d3550fc63332d4823a2648119b93b669cd484791a1b8c77b89d172d4636328c5d08361bd42f26eac21d19c61d2bfcd481d2578f53e35e95a36e5f6642388201284daa5868bbb16009adaa4984b1b5642840d2274987082e3dd656fbc09c04754e8c91dbf67aa9fd23314a4909134535961eca4251629045a6a136e30151b7501d451e0997b74c32161eedc1b5f14f22534b34850c5fad912f3bff16f20415ca07049a934e1e4a5cf7706af1b151995638a7aa38149059f6072f612a873ec3082873c1d842420300d9a3ae2551e35e88a29b4935a38c086e515cb099bc4446ae041401f604c5dfc8a94dfb0978b9f0274766d528784d5f264db5dfa2442929a3e2c618e5d7fb906fe1bb4fd00810120ae29aed3b8271beaf9ccfbe1486dc20e255d55f5ff849e42f8263a5e6b6f85254e320f521875be9f0f5925d91df913bfec9dd27026f449d918f1d4a21356d32c5b9a3060bc1f799895909b00a3e1ddee0cf6831513a03866ad3531732622cdcac8fa61921b03e0ba1872f0653430d4b2c9f2936cc8204c376b36e449b0439383ee2ad92de99b2a5f0fb00d73576ed8d150d2d5cd66086d503514767b61f829cf75023ec596726c6e5097dbfbf0b1f90ac58277f8a5a09ecbc49e6c7f5ad3e629420afd6f6116b07ae5f5092f450189530f85b085ba32495edbfa36ada0e3b7b75213aecc86002611019c952e215a7f403720024b3c89a1900dda925a753d25060566176d5dce8ee1c22f419a2a8380b253474407c5414620654b6cc6b4ee11204376e593a3408d532e99686dfb611968a9de74525cc77c1888f9bd1c24b24650951c17cb929b83c412648f3d1347e6522379658cf8cc835106bb00abe4a5b975a2fff8c045f68a3e294d592e4f23c280edfdf0dd803fba7fc43866636c2290136a13246c3a38f1cbf6d1a50d23b35b2dcfb5d394b7d07df53fc690fc692409485be978a1d39bfc4e6c343ee20b743a5449dd47f2dfbe4f7e5cca90442f8ce004e4e2a83988facc2e007a5e59aaa4fa290ca09273612ee01b7e68e383052efd3af6c89548e5ad881a757579c898e592884d81cf78ef1f517f2fe78cd737e1896c3d46528c0048ca3e92f4839f0c2c5e74ab1d4799c2b72209af867c24e983893fee239f6eb66c4c35a80fad274fdaa9db190dceb91699f88c5b7f41d3e117dd5d05638392c9e98745237d031e08f7fc521d036e350502702a013a4b906ed86e45f37dc4f07f7b2146e01e10fb0a725f023025ea92f351055f9d2842fc04fded784d120d8bc3c503b43a4562947adc3a6a9b95c73c3b9d959b1593e5e411da52b154ef6fed65e4f656d0a12aaa402168b96424dbe9f608f11c80c67c913f01f4df144878080f6cb8f68d4f016345b86d7cee8b7f77aaa6fe056ebeeaecfb97bf108b1657c9891627b6ade2830d0af76a01cfcf2f64cf73af2e1a3feb865831c04696113ef6b99270a3fdc596e18fc370151ce5bf16f89cc986ab86d11c4ab760780fc6e3c708b41c24b226688124bc90ea393e0b9b91c9d5d602122498a6f9c5e5ee844c6d1fc39fee17f0acf9db6046587737e24d021b03ed98153dc63ab125eebc4b696a9b84aadb1e3a6cf7f3969abeb05ff8a2c6aef9e0c7f8e265f085758249028292fed448c9bb4ba24e465a46e4ba90862eb9c18d6e3266b28616b5137b630df200bd5feb08b9c178831b86c367f0d0dc330ff2814f96ff7e4cbe35f6e9efb4056614fc4ae81298556f104d1d6eb9848d57ef63e2ba109331b4c2232fe7dbe7b7d14cb58683a0ee47ecddef035b544368e58268980402bd366b790dc0e2e6f4359ee983adf841b730627580fc999788d15d3599831c32947d2825f4af74197e9461e5626083920dffd9fb784404ae4644615a578d93832dffae25da5e071a534681ae4513c3089936ad35328e882980f05f9c51c9f410c87c5e0012758eac583dd33f7afec6e03a6eec44dce5831a5408f4f313dd48ae06a0b65e0ce072ecd4dc4ae333180930d241a9870aebdd908b9f8a26c767de004137e8700d310f5ea8548058679c8939fbe407291c68e84f436555bb4f01d04afcca87b86462001ed577b1ab8e85bf8ce3d7c3098e67242f64f0475028a097379505c7bd2a17b65a3c5453cf499c2a57eb66904349342f6dd2c16929dcc3497aac4b3830ecfa7d9d86f070846667cca19c1e6b0375bc9495756f3730679469300906e2b70b16d6954bf12e6ba5eb12e1cac85bae401776a56b88b0ff493dd8036deb334f0f8036fc196f62eb6d251e6588ae656fe557c58709a2ebfa0c5134e9e580608cbcbf80aea92c859f0b2f79fbdb3bdde0b8b092202b0b6982b6d449a60c7d065fb38129a4b105944b9e5acc525b9d980dcaeb0d8af8130a30bc6c9ae0814555811376bf46237b9fba987d8a16261dab363d9ea164fe098a64d50191a1cbcb25f030d827c81294ccc8f54a62fe86428de016ae2245412481a61704bde8b29c3e5b513b4379552b7fcd3b6fc5633358514f4b03e3e83ebc1b7a927a1ca443d781465257b426fae431fa5ab829bc418ac625d4679f90e21ee9a54bc8221f84ba24fd578c6eab8e309f5c527e132c7cbb40ea2a4191c4b4e59bf77afe7fc1297e84d161186c46c0bdcecc5695a37bfdea6ecd5b3dce87c0d1b3a4aa5bcc376a7598d5d3958ddd3a0a9f087c8f1fa20b20fa5defb024ec2c77c52559bf1f1cc044c134fac97755fdbfe47546a0d41b8d4591a141f6aa8ba5e68204f15b41be0ee40a813df25b1ed64955c92d1b306d7305e9056ab6fd7b25a63510ac7341f396c9fe551b89c51380c172e9808a3b2666c406e0c4a00c508a7c48644479b2eb681a557b7eedb0193ac74a2f3487b61ed76df139b3530c2ee0664ce72cd8448a7242306d0ff2127d01d50350b32d7742fb65725dbe1a9487acad291af72c9561cb669dc72b03bf545e16ca9cab863eee4e3a4d134bb9251154da65af2e6b1badfa579cded1b0f1114462ff076049be909572c96386330b3185836e266f114f2fd00e1e51218f1f56d19e1778dc200b5834561d46c1d5c94d02f1d0f6f5c3fce9e11e78e8289acc7128acdce117c244e0fe849b671533682c1de64d8f40cb036e4bf699047859e8de7171ccf747e7ad0e93340537255a4a4da8f9c4357aa7d8f44bfe1a777ff588591ec15439c8fae5667254c3da4f0d08124c5588f2df448a68dcc8051258be0f7c5415edf96db4f035cf21b949ebdd797ee127b1904320ddac4b3ed28501b7da02daf32dc7383c076ef8734ef6eb4c003d51b35d457b346e57bdbd01ba29c013715864f442270afa6c2136a47051e5498853230487dbe5b8e8773fbde31aa5b19fefebabf44a99f3801a9b9e01e8e4504f90ffeac15b81ff5d72f76aed71634aeb8b260138ade865dc4c77853ec77dda1cbe4a4f554449b2568fc8a4c7517fd64fdbb22ee924836ad3ba1ba217e226cc39ecee7073868a90adce4596972b9e25292db7e96a39ce6c34f257931c3bc4696937b172f18763576f824eafed426153882473d76ce8990d0b0aac6e208e6680ae3cedf53cab618d961f8b57d2d0f76950ee2892d8c45fe885807a2844df6b59b9a63cd163ba5e82a4f745a4933965e3b3ef73a98fd0695c8db4642acdf8fee73c75699ed26ec59279a2d7e0ffd727f1d21bcf9823af8b40254d66136265282c68bcee4f14b91c891d4a9c3d204595d4d17a63acbb757d61c3a60ec2a7732552ab8c69b010bfc7bf0e63727d272ead9579f969904cce2a5e9b7f190873751174d3f88dc22c0f07070967fb4ea2d5a466ea21b33c4df25714a28f9d132a32de9f2d80556579797ebeb13b477df5f3ac0277667df5ffac2277dafaf2f7590577defae2e759c5ee7cf5e5ff59c577f7c514a0d7719f98eea24d29161efb2047ed544ee634bc9db8f89205c033232ad7744f4269b52f9151ed60614e6bbaaf153a2ff4776304f3b21820caf05f0aab8c245f9f49b4439a3644130ac0e707c352070482d2048259407eacaa7b199e7ad1fe95356ecfff600d4d5ff1e66ea2d1e114c0dce676221e85b45f18b331d15fb20de21bdb68dafbea8b761dec5ddd5246c5514d03586508567af67ecdc26cb8c4c9eea4fd8d39ef96e662aa23148b112cf496f7b537e8eaa6fe81495347ff6772818de295ff48e9cbdd523df2dfb837cd441306e8c33d135df03b884d46529aa7fe621f0c442199c840f30aca8ea3f02ce426f1f9c5a9b089689a59f697c187a8a1b530bd874099dd2d2cd062c2579c47fa658832d5587a2c08467faeaff1304e44de6bac91d4578a98d082284d083d183acc114da25a1a49e62809855b2b84062369d70f652b4a056dbb7c327802c0a87f3bb4d66404b9d348b8818f1bd5dc6b72635c1b40b185865ba5948adc16bc98060762625267ad239e734769c8b6a5e793c02b0aab830c69f8600be328cc6caba677d249184dea2e7d2881d02c9023f5f4e653c62aaf2faa82b0cf0bbb652ff0a7c95206326dc65291b2e9393d5f0b9edfd9f3fb62f75c6b19247da0710568f4ecef79dc52364d16dacf73c3da983b64925a6f4b06767fa321c7e9faeeff916bb1aa1ef4c614d6fb7fd2c4f6a33c03b7359cbf17024743f537f0e11ed3296395cd81c3cc69b326f75c9d26c502ff5c215eaaa5cdda00c989ed30004bf0e5a177a29445d8bf8d10ad3358e02409acb8eacfba88cc41e2afd0bfb646bdfd090ef00579bd02e2ef21b2992d0d68cedeb8c424ea39c828e544cc6f9e8426e7eb81dca8474932f738ebadc9c228970e2f594b9a2ef605f21bcbad56899bfde19dc7557dab36da98b5dee3c8653b63d00cbd6cd48ae4a737c4c383b0960ab59a2c764843b89a2044b188b6e0f6eed1402d7fbec0f429bdfc3e3328ddddfb54c4965530ee90df9510e35f6d64606ff5b960b6346a3f4ffd7abd01e13caa4e1ee80799786e3633c11e85af9324ebf05a4d1e1d927204c08ea9054e64953562f1298d584a352ab7c841dfded0b68eedf0d54b80f2def586311ef4592ddeaa27564740b188e3684cf427e8a117501d044e4d76949b97b0e00c0f48a7aeb1755acceec4855e7e41afa30347222c765969e7a139eb88c22b44d8dc9449ae5f9d4df959b5d96ba3cc19268bd6cb3193ccfa46027ba3bdd679727a4a112922158706673769d6b5754cd27459893a7144773589835dc446b02d3db60f2ce66161eaca0c3533644ace2010b2e736f71ad96bee022351f9fc571294acf79b8f5fd09a5e99637804197617654cd9ca1f01a378732ed1ea0e2e82c7be033426da880cb3f0110c073b26920eda340fc7a7703625aae7024c4954ee1c0da71604336f5dff7553102938816af4e4dacbc68c26f8891f9e4cdde36ef9b7c8740a14903f7a3970ca52771e55269510a104b1990d1721ab4897da9090f7d05d41372fa0975494380d6ef6e4b75829bc6757b7a10e2b108ae7d54b91c2f63c5825c26f08d67fb492ac4d977da8809180673f5eb618c6b943243a3d7cb18d7092ad83cc842400ebb612408ff692544c7b2cc417f7bc691785e8b7f95b8e6130a003b47718fa87d029d2c4b4e69fffee9f58e7fe8648e9653ffb8f7ffa045811f8fb04a289bf2e7e9c2a38c34b2b66c146a68b4206803e87b1ca719da48126250141494397bfaa32820187e735e9d996db09188e0fd1e08b281b343cdd446f0974987c00aab3c06f110796bc4ae434a3a4d51aa779c31626039b2fd61604afbf4f8383a177cd5b07a4684f1a78d7c018382ca79d39bd4992f5bdf9d7c02b4b230f133bed273f140a593d45cd4aebfe47b2946bc7163ae83a89fb4a9846c17986989a4e04974c40dafae14e2edf2315e4f7ad87076cc85a5cd7179d38ca58dfac50607100f5395cb71b112cd2c0f0f4be1255e4002676905d3ad60e69a61528e0809469e7a9fd9251a0f62dc18f9002ee43cc6ef4bd58883a56a73682c0a42a293024c48a21c889afda1efb59acfb076a64b214325b859d025bf40f919e2722108a451583052d90b551fbbf8a9baba7acba4b40951e6b0c9d9571c460c201b72879e311c1ea9a8082acb102348116a440fc810202a1f6e065f99102aa9cc730a0e020295e021f2a8982bda29920844f604278f73cda400173689315a85b6c8e9d61a62f315ec80d303663dec915b9bc558fb879c523afa662821b585f6b4077a80404ff0cef065882ae98c1e258015e85411b0ca4254955313ccf951372234102a195a5135450dd71b1f61b1eec6cec34ae70f83b87c42304ca62bf8d0fada039cf7642bc2f1f8be5e0428aa5a60dedde3e40f93675759b02aa139d2bab738276410b63af45282102bb438ee9cfaea3d60667614374b69cd975f9db7a6489748ec73099304e0bd558f499e91224361e4ef84713fd6753444bedbf354b969c1b90c0c7232a27da1a1edc77c0ddbffe001496d71423a1e9d6e8d2702d9e90c901ef74667ffbe728477c481dd0b37fc2fa0005c52da4fd875bee4da1e3a568f623a77cc6b4b9ccbfed2f58406c73ab16c519f168a869c5a2c7825cf5886cfbad5708cd626059830728432477f650542228b6feda1e4080bf2921256a091835421ed56e90bcdda6c8e9b13c2bcf1674281371bdf997d1bfa3f5970f3a05da07e8b93fde16126c5bbf6095073b2602bed6d95191759664ac146e79d3e9378e272cb34041cadf38cb5f70538f78f4a293cfbeb8390573111abb2a3abf7d980b8076b4631d61b941fcb9d60081792d40db0dfb8c0cd61e34f1d1461d6f184127010c71b7ab90170170862a9ec7faae119bfb106508ca7fa7e54bd264fd0c26c0770ad93cd638b7a432e9e0d1574dc1d359d48175a4f6900d4a4db2e804b2cbc6632e50aa4c79fe6fb379a4ec8ab8ad37f4740c3eaa90a6e537beebd6ef274091fda4a966019ae14a39510c7bb1a754ff4faeb1e66d9f9ebee790c8ffa952778bc0c26f668492242b981792b00ba8beb415aaf4f2c36424c2b83530c51d693bd9252e246f662020a2b9437203272cc7d03876608cdf27705f078fb8efcdefd4556352948f47c0d4abea73e79cc258ea7c90ef3eb04cf889fd4f605ec0934802558d255083aa138efb1e70109a0f08bcf845c5a2283e621916de67f0e27ea96eac0ab05181e14601458e391b94e19d4ccf9a2b015efe08783b6c523afa13dddce301320f9c71e943f220f8ce99213669e8086b539c2fe8bd82899a2f61ab79452b23bbab8a048ce2e225c6d62cc38fbedf0afd22a745824804aaa1ca4e3aef70315c6cd72542c625bd44bcd183cab3f50e83db5b2d0b293e534a338fa5c74bd8393d4c798ea4c915b723008c8fbdc9043016870fa027c190252ca44604f741fee85d70aeb709168c4b4310b88a094fc1c98e84d862bda425793c8dff5fda090821ae88d8a30e5929230be9abb226c253cce7e64fe5d8ed669c934add9e285a56a9e034c6b2e4816b648db40cd0e75be7743341bd2d3c94a475e116190fe5b78c898ba03629ef8e85490f4886b3c672047b6f7aae5871ffece2e38307c44ce1e23de6ee8fc11d3289a9591f5e703592a17707f6db5edea65665cfe40045af20aed3e0edaf017e69b6f76df0e5dbe6832d08f2e19cbd5e85a1ceb0703b209f97ad7a8882f7e022d6b963e34be3862d88d9c4b481e7677ad26930fd325563517173659fb593abaeec005b073ee9a5cd039fad7b1e0672bf54e1bcd8864d690d0b710ea57f58aeb85ee88a1d039e742e5623659db6c536950c15d88845195dff2892f96e5ec676c7bc3ac62100baf20d501a82d22e356a374e64cdb75421fdb5d275d15f62d5bb2c6ea3ba89ced6563ed94d5a1fb99164c72f6a80d9824a510007164b809ceeec2c020d4beef4adf63a737842f86205ad1436937a77468ed1ed3ff53434b2a66bc31329ef0a5cf48da47a887d0d95236f357a57412ae6008a8ee37eea9763c04350657ee6f0b91b040e9209cf3b72193b28446221e2d1107a40379e75ba85b3acae8399daf3e5fb5d56b67436a54033f6388fef2a1794a58b6f090a20c9eb05993c2279d7d74c72bdc09b01e5fbbbc07d59b9cdebc4a8ac6c0b80e77e76139e89e98bb0d14952aae1ad03dfa69d944566218672a2a3437c4535ed93ca956fde88f4ed711f32f96ef0030def19448c82ebf1ae79be654ddf528f6323d20b37b30d3866abe73355e7d3342f4f0ff306b56e6576132b16ebdc980ced6818728cd6f3ba1984f4c3236b8bf8af73841a6e137f09ba708e8e6dcb07b409ba30d9f395e34a592b6c6b377dec490c667f8199a96ac4c83dcbaa24ed7c066192fd4136b30ce78381c55e672dafbf845b36b926cd31b33c3019d0d7e8b69b6c07d4ba2f91e828cdfcf8a411d1b8488f254a372b721caa514227b7ce3b0ec0f499cb5596920c0e9704e10b6cbb6a0f39fc89a67418f6f21b6390955665155ba8524fd3296cd97e1831abddfa3dc0a2289135541c5ef0b503d847324786a1723f36a4b4e36f33715edc5fb11f707032d8a8ad560be6d83ed9c1b7a8fc09767e472979614e7fd9f20726d14e1370e8690dfed1fe2ea498b2d7a5e4082547d0009ed3b1bd1ca68df874c6469e3534ceeb6776fcc486023792d5f430d558fb947742aa9cfb04fc32323c2e3671c0b9f39cea50abcb74dd787e07ea33f79c08a291d5bf153a739f52d363d87129d8acda460960d7bf7e808d3b300523930365bab02cc5deb8639b00842a3923390cd86dfa8b8292e5d0386601e873329ee74e13ec4dc8a204f2dee6a29755311abd81abcc18f7b8aee313113c645802b865d39fed80d835f652ff2148db3b9a87ce6b06f0992fac78c5753bc16720643422cb435c5b9a0a21e4f2fc26a71d24d236edf518efeca2f457e32ecec01e0a7c98f9283ffc9d2256879e794df7ff0fae945dd991fd98d8f03759b5a57c7b53485d64ca00f5a711401dd4c78771bc3d389d0ce8bb41070f3f9886d20f1e8e9bb75a9e48997c6e08441462eb730a5afc5b97c06aa1a1141d9f8ccfda886b16ad17223be130793423a880a4b653032007219131aefd87eb512e870876be161f5be585024cbdc7558c8c39b118352a12f9a6f98e53a9aa3cfc34a7430af3d31cbe0262a9d7a159b84b25598d6aaad4a582adae4df1e24a1055c0cd6100271232425ce9140fde51dd9bb9158f1d8a2bb50aeb924d983da7fb1de0669fa88cd158ae486a9f9e4fdb78c1033f6528a91b74a6315a7ca32047374f54c874cffa9b80d9304078dcb6b8d2570f2ab815270a3c40d8cbf28fee3d6602fa07a9027d785d203a0f8dc3ae053650d6321166534edad5bb59c2eab627dc660d373a36bfa8025ffda8e2c954997cc10cdaf9ca9b3999cb23f8a2863f8c7210927f2890d28e00a64f1ffe9024a9e24705ad182dcd59c48cd0dbd3767417413b6fd802ccacaa025134bc7bde4d1091f71fbdaad294eeebfa924bdf3e61b385fc4d78f22659b15dd245a183319907a4b51b0c6c6c47f3cc47ce43ee04d9501eae5cc34eba6a00352c30590ead639771f0846f6de95b9962fd593ce5ebec96c6414e64bef5d879764e7dbdc8dc17dc7b14c623392afc2ade411ac0ad4f1dfeb22d14a0d83e2ff1fe2057e962cab15d78fa3da5a5b1bc3c2f1601733c9cdb2ad30dd480bf48c53009f676922cfa01417ba41a6c4237ef04096fa7c0e6f3468d2eea3e743d6c8c98b42224c1565884f5475863a8215200841518363fd85442e3e9a7fc3b75fb54d4cf8d4ffad6a537e3b86ee26573546cb09019d741fcba28344311f471db45c02e52fbb4e928f77ec7200d1b687b849051667989fcf96092e9ae2528b2f12081bb56b6233381af3541a28baf37957e3b7db2af9fa7c76c0d7ea87618001135fb261d62c04a5feec1e479e0cdcecd4108590b3a21d4d1671aef145fa7975351ebf72aacda87dab6cad7e5d364cf69efd773e574bc598b9f173449911efd2902df84b49fcf7606913d8c7ef00d1370ddd9201a0849c26804cb77176cd7ffd9bb62ead61d192b7e5793971c625f7c9581fce6722d0b68dae5e83205f92bb8ddad5934135b197b230fa17900893508be2c0b4951821ea4dc062ffea96dc731af0ebb9e8a8e44800868a62bb7a4e94d803f3f8d50ed8b75c63102dd91b66de7ea8b5614491b0f7c9cf8a56a1be8f05c0d344f2f229c99b14d55431b20309c106792a1a5d2d323c801281727586c52bbe7cc4e6d1360a620a57dfd185618c636cd70530efa3dba377fd3b503e7a502a270baf7d05030283af27c0c3ae574ca2720b795cb4f68cebe83cac3f8ef982151276b13f70cb06adc98c719255285f3cdd15a1c7d6e0dc245981d04d19ee10de3b1efec96624b415366b634114588e90103e49d99ad772cbca55085b79a5378b3bf989ef04680f2c413dc4d9f16c42e6a8de42bf3fbb0c3a1ead96856a5e80f35a884668dfc4c1f9ff0d279fc8e0c8996ba4d0b1cb6f75860d8069ce10d8a90e59caddf71ed3ce0087c45e606efcbe344f7cf23353c1970664ab334035816f80520a95deacf71a77f52f7a76cffe5f5465e4b9dc87b876373fd314735d135109eec85557fe50204990a1ece74d997a033d750479f5bdc2e58295a4e03469a01d87a25f7c89037da481ae0942903cf16c7d3534cc5c989e06833d114442720e15e22fda52204df1e8f2d3f0acaa14559ef43702f1085b86700ef8060d39403b3f42195b226e8b020c7480501661418abcc64c41c5ce7f62e1144b83c74dc496efd8f06b3a086464cdd4426d29258043bad912205326a1f5cfd8b524e9081b9076c83d0570f9d0e5a6d7b84510931d44ee62402530a029b6236d6dbc826148876caa4addc3ba821a6a9b67e3f04093bd2a118889f2495009ec379fb0bfa6b506ce7ebf5b12ebb08fd98d956bcb91b35564018b8852c10f168f0598e624a891b57d8705240c4060b9c7038aadf19f5fc66c71407ea63b868fbcba53ca3381f7e83fa5dc0bba660bdf7504805aaa9f4414db3ddb95f5b31d82072335c24e890d0e110ca0ab2fc97e9ab4bedfd05f3ca080eb07c87524ad1086c9d35a59ee452deea486e54f3343ebb50914c82024ebdf69d1854304ce0d612a50b43e16a360d1ffbad04667fc7f867e73e847f19cc0ebafe02bd865c40f9c1d0ec9e1cb89f95c8c333302e50c6ac01616a5ca057ee4540f38007baab5b7841a1706c2b7ae5fca0d4f2e3df9344043f500a48076db0396119b6883caf7f20d771627b9449429b1a90b55a5329c9fcbcd973f8367e2d1658785a0383c7ea31661d25c590df067c2e862c59fabd8e313fba9bce83fbdfbea8eaa1c94a7c0cfbcd2af5942774ae988649eb48c30b5715dc32e9e74342b167c1485ae1d78fe357b496c347d5f8bf5fbdaa15c88d42a77a32bbd60d403f2d91becedb473486799cb1a6392d4fcc81338689e3ed6913b66307a6ce17a3c7094cff6a952fc0640afaf8d70702cb6a4dd4b4c2711a63780027540afe2975e90251cb5a8229581206de44e4dc50050d9e778a19275c18b6c0f0bc5511e184536a8650c4fb7a813d4c98fe0b188d08ce841de00e88c0ef5880875ec125341ea5de167134bb4572370a8bae807797319e0d8946c93b428366816230e3aaf68b18cc0cb870a69d1f7cf21d7249a55373493880de7765fc485a349338c154eea1d1e1c309745970abb0cf793eaba381475d9a130a4d2e10233815ac1560169282e8a674aba2696ebd8e28b6078777a3c004b5286c7abe5b01d4a62050347b006e9e5d2eed25d5ec7681e733c797ceb9eb7096ac1cf86be581ea16125ea18eaed1779c082557cd13d7c314d4b165c041c5562ed9e829110e6a30b95b0fc60d8009b312728322388b6a6e2e066661494db430aea8890f74f3814f0224e50a452c885576006cca8a4e941074339b0e84bb2cd9b33cc022afa223e2b79a6fd91b78c57d784c8ff6dc06d35a77951faf07fbb3a47bdccf36e4ff6da37beb84d13605eb2adda6245325b9d0902046f40e0c39f518b0fc36fa0acd01fe1d65c5f17bab8364cb85183800e96e1700e0e88f08040f5f6d0c4fa6e8e0c24ae21f71614e9c0d17a558ccf4e22a509338c057c8c1079a3023406a744cce7bc12b13b67822663cde2bc26dd74c2d700fb01fdcc7d4b7204b5fbc65393f3de1dfae4b70d58b4445e3d2379503fd3af6650e76c7f348c604edc3a3e3d4dc46f0bdc0053d4d47c4b9b187a6e656948e331b510b9d83cad97f30f2ec98a942837ba3cc0df1c1c58d224cb2a846609dd5a1203150414b8d2b8242c2b0f57b462639d52a3936ca0e9914f7baf951559bb0a5392c84747669b06528eeb29f188ec168397104d24562aca23c4331811d5ac516e8e62b98158894027db3e24a105f61fe005ad166ddfc80f3f83942e4968d3e229376e5032a7e3f33bcf1281f21908b5c4dd2cb6e00e55b0c7d33d6cc186f07f9e67db289585d40c02aa79cec48ac1f5f406ef9a3ef8ad54bf9d33ffc202fd2788054122bddfc4d19f0a463146498d4897e31090bc5ddc120b8830295857168753745ff2e8cd71d3b0d57ff0684ff9856c93e9e15e5a9b802eeffbe07c6b613d39fb7da7de5fe1178230e28fb0f3a81e6b3edfd78255e8646ad11780d90c81e1ce4b52460dbde9584fd51455345f3767985d9b89b437bcd7962504fd1ebba8db76e9f9f459520706e56fbc3f90681fe605cc8354701f673d7d3d75452eb56a0ac9619063004b2006c42cd33faf8b47662971673e69926756c91499a09a21a18fe0add86409b254f424df95ddc5194536368edde12bbe01688d10a844715496111415da04475cb3e5cd03495c8ecb0e8078979d8aa5f0add2b35b6d369c2260c044b4d581dc5a8711f1a38acbe4c914644167c21330afd3b3fc7bce216ed6652f85fe826bb49664b79665ab9d31d6052e849d4ba5245895c26875d6250d013997cf2d6be1ee33c1b07241037f941c0a0a5fe1167efc5be26389ee0ba5bbf865b81e784c8647b58dac1e8bb59ab88a96576e7b1320c81384c10ca1cc6913e7abc34b3c25c491dd300a4e8b2c120ed571f59d0132d851b96b70b3a22c04adc741e9d8c2a38c61d3458035f182c5b0fd945009b18b221d75a31b0d6476f156483a169c6d7ef8b0c760743c9a7fbb1397457f53db7ffaa8829046e1b841b7de0231ce7254798740eb93bb5944e07f4e09c10841d9e90ea85060bbd3e9cfcc7a57b4727921d8c1228cb91798f75dc55aee17e98b425ab8810f1ce062b11f4fbe100d5e89ac9416f0df8e42885bdbb789c369cdc85a65be0f95dbb28d47da5473e943a8ebd123f1e181a473ecfc4b0390e96884eda9bc161c16fcc8d8898c2f624048523b56cd865a411342f63890d60d94544521bcaf0a7c480617e2373a715e611c421364cf685e52df4a7436ba0ca403af6b6a18fbeae423a92a867bc978b91244ce2d8481983b9225f2518b44ff565e57ad25515b6fd11aecc843698d2691c2b70c80287295c1e37cc96ffd3711f353b3bd0f552cb10293a841f4abcc121593370a97143fad4d68a5d7f1f46c00b9f7bb6fa67a4f5f719cd1c192b3a8f868903241ee87fd77eb0850cf834ec214ce28780665a2860eb5a0cf1703958b895a0375b71a66b94114c5d1fed8a876cff1bc4bc31200427b6b8fdb2a294484b97d39225d5a70af3b9b1e3e3f651b57fccfda0b5c0d92de7d80b25441b5f5fff5cf3c97c316ae5a352aec3c1faaaab3291aa5dc48054bd8c28e367f6d8b6cfcc927238c05f91535c215b3305832be8dd0b01c8abcd1eebee5531f8af02e3aba488df111915d63dd5d22a2466d6b2e93d2fa94a1858656ee34d0517fd491e3a0678b8c7ae39e52faed11280a1224bb5fc2703e72f98bf6670137069099c24cc30b8d862a18d705d520a5290a051c8d312342e9ea7434311e1b4f4ce863a38df81748a79393e7b963840f48000b14f94477a4003e80087cd87face96734f2d4d67603913c849deb39103df5d2954090a9233112798edaf4f4e2ea5bc30a94726c10e8e4a79f62c88c2b2f621c98ebe385bdf730befa35afb5de05f4f7d2ab3e559d0fddeb0c808c459660e56b0fa63dbead73c416910bbcce2aeb169dbcaa48d2da06611847272befbddb8b8484570625857af28def6b38810774abde3413ca1833090b26f6018e2eeb25a654ed14ab8c3d944173c0383d60e1f99fd90d33d3d73a2640a501fd8eb04df205e40911337a941b18de1792b9bc38b9701625500eebd590486f1808eca6a827edb66e0bcaed39cba77f4098c8e72b27198c515d29d24a30adf18b399dfe18ef8cc6c5519623318c06b5ad2dc9bc3997facde4ad27206101e6562bd7bd5fe4294a83096099633ece21d11836a11f14a203ecedfb81c0375e41bf1732c81f34bbf6965040a9344c3ee40587e22c65503a8bfb18394d096909414c52fea3802a4caeaa19187e06251fff8512dcc505209df68f345df9111ac7c85af1e730e2d758977b2419e3586fbd59be3d85da60220315bd9e35cacf0de6709638d756efb6ac64404c954f9440a11aaf67151e35c7d7da3893bc781c488ff11783944227908dde1a3f991f19e351b642275cef744dbc33e0f4793a61235895156c964928848eb8cde18000a55f8d24d646d74710fa8d6b19f4897ca21f8616169394323fcf853fc12bb7696f8b8659ba9d4a2e4f4f8ee2bb23d422f4747846c732724c27a3a495f65622bbb4951e06d27498ab6dec4107c5a3573694f6ff21f25b496e519c010e228c3c0bd8c8a251f86c677907ca3fd1c54210e504a002bf4d26c312cc38947dfaed8dde324e109924196104e4f01d136fb65dfbb5a2916d2c34b5687833ba0d9fd3761a0839a4ffe8c171a16eca5006eb57055cf8a0ec01ae8c0d8f9cdefc03f15924eed1613f0ca8eab0d334c4b627dba247ef55f32265d3710bfdb49a478a11519f5cba8d77b1c356669e8e453bd8c8ab930c62a0d0f93004110e91437c79a7dd08cd6ed852de64097c5da8f9c2595d1d24d153cb22fe90b832d1b080797b857402aaa320038b7bdf8bd6e2b708e3f4a2edd94d1be85e80a63c672a4605c50c6e6471c9d57193aa3ff76d8e7eb20bba81a32b0dc0ea5f7996dfbba724c61f39aef321bb0807a4edaf6d932fdb175ddbe5b7a5ea0813ddf3ea33e0667ebc24964ea66070f14a7f8793e28bb52dd0f3e7c2c6d47a1ebb2797b39d5599a6792d6ba4a231b267d6c58b57530314903050f462161a84b8a6bc8e2ecf35f02c44b0a288ba429ae487ddf87cda58c4bcbae41391149329b12a5a6a7723772d042334b5aff9b5c683e88cf49013d43d98c3c09d64b75dd305c6a2bc6834775383efbaab8453f82eb5b4628644fce82e1267f6040d4656f68046786728dd7526b338b400535ee3d6ef8481eab45fdc6b99f04554bf3066427aa8b52569d66d5d7f1cfc0f59374c956ab0792893c4053867b76b2f4d103fa5d0262bdf89cd22a1b9871381d8aefd198d48a2b24d31356f78eb8361c6a713d2d4048db007fd6074454b4929843c009bb8d8b6b91551662c879644788d6bc61aee606e23eaa7e14f47a81058f74a577699249aa274e4d939e9b84619be5237a768a6034359a10478bdb8c438327b4709fb016c9d021c369b56a9c7b7427ba418f14211fdf73df9d082a8c3244461601433b482536add0a4fb579c4181f980df997c3232ca5678601352e34896134c93080c36412c7e26e07db85c31a9cc99baa8600cb8ea8fb63c9f02446a9b712772aaf09bcd8cedf9d1639d08dc02b7592d0f0068561b832d728ec16fb4a34929262eba676e33397656b8095ef7db44c4aa68bf3e9d3998f41caeb9cd80a99b0aa524652abe08a3d399c1187811ca64b4d4c35174b104f95cc4a1b720440bf1179f156d2e892d346a72a03a65c8f7d9cd34e2231931bfbd2bc2d0168a81f88c72784fdffc918917b746b66dff5749437bcf97f5d7eea6b30583327ac600b32bdb2f34cc2a60ab5a80bdab1ca5b1898ced0099d1732aded3c3ee66aff9cc8d53d3216ecf7ba0ea1404b7336e2176cad5437cae1154bcc4c7ed7b8674c0dc3315055abbab7bfa8eb13ba0c3a80ca168008bd5a159afd49b09c94a9d02cdd9a7092ab67b466b4b0159419bc12b02e7ebbc74eba4dd31bcc7bc7dde35f8130e80337beb526d9bfba67c33f23a8a249bcb465d669cb99d993dd161c59049ab63c61bf59899c2fc1f377bbd44e160c6825ab54594965c6c88c6955c205b9347cf6278579c3fb723fb7a94259abb4f811006b34790a47979904b5e0a1a0175ae4415b1328aea2f94d97a8dc8a5685e302b5ad52fd6623abc28fc9aedcc7d397fed4cccd75912db2d3e89243604eb2733998f32967fe822ea0e1329a3c3cc40edd4907b7af1afc540cdfd32e8c5322fd22e1f0ac867fc32204c8d530cf6840d4a1ccef2a260018dbcdc18db576cd7ad807ea72ffbd593ae9811c30503b19213e9ba54cc829995898a4c2ecf415e66b0c0018286a761e30bba5cf72c8a670cd0e8d354677c1e82977573f4faee9ab0ab864447bd5fe12170d77c91d023c35dfae63a588560b9e91feb66f0ff2a1454f7dc3944baa4310bdd7a6c77259b53085b5d86a7b0c770fbe43765a01d24b624ce70141509257bfae804cae1224e3b9fa9a60b07e3351bdea3fe5dee9c799e5fe9420a50b191d2b5d19cfe55b36b4c94829022d584dde10d2959d54828721b7eafe822feb1905ba166b52e16e1cd14282a3a0343c75c03f90aff471a73c00bdde6533a7ec940c8d250a17c924bc0145c98e98ef235218b15eba860c8f259944d726fb453607982a6c8f3922464f2fa1aaecf5c492c7c4dd213712acaafe56e7dca89541090294b069201aba0e025c43ccba04f580799ecbbdd9bd056200caeb186d45e36d13f9b2a089a9e5c533588ec76b95450e9e24370965a83630f103577b6af142188e46c10564460a8d2c19ece413cb99fec398c0086497d62d9646387a9ce8a6aac0ca1d1eedb20e0b54cc2e430c01f66f4ca6e8c7dd9c8d919d63b753e54cd71b1ba4c17c08ed27bd0bc581ff0c6476fe04af57dfbd1f76c63f1fdcad152775a12c5ecfe63363a74050935d87c97be6ff5693dec8778f6611dde14189235bfc662c341534ae5118d45b8d3121ad910c2ed39f1c477f3fca18a7d21f6cb20b863bbcd31aaa73fe49446b10cb04b27dbb0b89d378f8eabd5c4dac862ec1e038a069f0081b8682200ac9b28d6132b4ee509499c57de9238c4542db4e271bbcd057aade88a0fce729740bbe25dbd18a57c44510081528ca63e15f3f50c1604a8fa56983780546eeb28214fe70f507f4def05376b0ca9dfffe3dce2adfe182e30e6c2f4793c49f3e1ab22edc510ec89abd789b2641f21da5748a7f147a793a0615494a75ed481376f36a150629979ffecbf8a56247b7501386c081873b4d4695dfdb43d2c518f5338146c49ed2c95e82d077c666bc9d10aceccd0c766ace4556c3881b34a6793d3156f1cf535a042bf0a3db4375c8a304a6021820bbda9ec58bb5bb1e4974064ea7458e3b43027f4f87bec0e50ada710fe5352bc0954bdbb08deb90a794a1702f1afa386d39942750bfbd11d625591c4b45141c08103d06b2ab0261cebbf45da0f6c80e3c20ef16e5ed285d86117708e0bf947443c584b53312b118c0bfe186160d1518a6c9a7ef4ebc5aebe793fd901269db9f620cbfa72a2b7fb4f12586bc4d20daa2c093f2e89fc72462a67694dfa6cd884a3bdba4cfdfd3f26d1e6f09b06b03d4fa8dce8930c4df5e00510118d17c01ab9a55f3218165b593a824993a505254b61787d280e199332437435c9802f26f08d2b122f571fbed4952c3ce07b9e9f537dd205ba7d4d6032dd4735b6ef2f985aa1090e74563a4efddea05b1fd288b2fda59b7594366ce11fbb01f5d07f412ab716bab8630794b1c082b4c4f1f022351862e92e74698bc953a7add582da47baa7c441d49923ffa07ef10d899245602b3d3bd9787957e1ddd4baf059240759af3bc048f10eb5b75d76c7ff24457860d3a60865289671346c51fbc2ecd91673d9e6ab9b28f38513c3f82b29b9b3bb5c3725493bf3bc260e714960689d10f83311fd6f19fb4939ca72841ba2748e9934d5f7b95064167f6076fcff254160740acb75e3f4d549858b7f2328eb681d626a335229cce4f5ae19bf47f207e1cc4ae5f5dc7289518c39a08747c653934fac55831f4363a4defd6469991081b78d0329c8b79a320f2bf1964068a7a0ba54bfe29f5de53f7a26dff589762160a47c8a8536cb2ed172bfac36d5940e2bda3d8eea6f9c3476f0652dce8e2d05c6e1cd03b69acb73d704c7991a757cd6d7d790bf1aca6da32e057d184dde78350cf60993e5dbed13d228b3404a4380be2bf7a3dfea70cf3ee193a54e315a8080d225f50f77e314f1d30fb675d5e33a96f179cec22bc63bb38f200e4a5f6bc5d8fd80d300b1bcdd76bce354eca079ec7b285327a6808a79e4935b4b2ac6013f77c1045513076242f848859301b11d6dd2d8cc50324690b0bbd9dca7e75b519c5eba1cb85fde6ca7d0ae58dddae52bd76b61cb73b826bccd478dd8a2c3da3a8c706ebcc42464e6aaae6f21b2ad86a54ee0428a3332d58d0c0b538d302dfc027257e30115f3c735e9c8d2db105d7d9f96dbdece764cc600716e9e49084e7902897696b18d1be4a36dea6808851134fff683130b3c578b2e125f2d076f5ae314bbc23339dc035e0d7f7a70d81ee40dd7ed4cea3ec830c294aa9dfb622b3acaebdd362c0a729311f9e65634637b9eff8fec790e263b4ba0985570a9d4b274e5f5d44b2fd0f673e65595472fa1bddf47b448f4388fc476e653e84ee8035dac301681adcac5d25f436245ce89a577f56262481ccbbaca6cfa489c99a36f53d8795a57b364412b850f5149cbdb0894cc0ed5e090564df9f66b9cf3f38a1d4f69035c238958485f28586ab023242fd729ee294e4296a1358ac626b2afa7bcae8afff58026d713c18b7d53df425ebe4563091e210e037f9858780ec33ab823c4a272bb76ab0cec1c4f1bfa86902a571de260914642563878f3f8d89252f25a33e7c4e326f02b03471d2c75e0ef02b026c26aa36817b903e579a2bc2d41521f3b1462bf1f34f9d8d1f5476aa8416b3fdb78bf66979a31d73d1f3e53a1a957069609063ec44b1277e391b8f9349a0a30e60437ff9ad2f016b8e9aa7b720b2827b28f2ae593ab74c3c3037016f31ed74fa07b85a352b7c14280bba9d1077421ab4a3c719d15c1342045fbb2f2afdac7c16ff524f984415921bb2e391fbe12c7e87fbf000d84b4886cf67e00971b2b38bc1d33a71622e50a38ce7c5019a4f7bd2ef3a83510d31e1803021db3508461e84402fd5ca0dd1ab6c97422056c919eb75cda441af86895b9ff325dbac502c8e9ef8a0324356366fa4f9b5ebbc61c0fc9874f12640bfc0f2944b80a0046573405fb094113fe3460aacdcc22b6df8a78ff832bf6218a8abcfafcf3d4732cec79397f725c9010612c924ae922fadc4c542b33b9a15679f3209380e2e5dcfcffedbf4f2a4d774b104b21c3a56da9f2e7d6c3a13ad0ebafc6528716e75ccd324318887568bc684501b3851dd2901da752e3f82ead770b624a410d6d6e1498dfeabc5451e59703abebc1c192c7e410e0b29dbfa86f03099be81d743c484d14d06d8a57ee58a4caf2772ac990363a6fce503b400f5e782429124bfd26d16ca1befe5775b0971dad4401c102a2bc86b107a5dbdccfec6b1d3a6ddedc8ae0021fc5122b3b72c0faa6090d1b77f5fe63fad7ad2c6eb58370769d130028167fd95c156762383af22157c4fc648e50cbb80e8ead87e6962486a945cbf1764dd5b0b53a57a4a817c310c53f84df610d7467cdf3d34c28d8c58309eb9cd5ff1d9d2d4b75e6911854c44d0191224b42bd9318020692fb0b74c4f665985da223e3b28148a25a3321e45906ef684455b338a6259d5f4dbc8d7d954d4aa2aca6c678059003275d10abc0b32c3b8413d125774ab926e8927d255255047420c5904e7d0686c8a1d2d9b020f11ba545838cfbc2d1dc62bc6b17ab47b5c1237a0c711440b4e34d939c12523638ca968b17d661bb572be8b5d9807fb9e304128fff2026ebd9aa092f85056014f538329272f79aff015dba881c4ca0837bff2d549483a64c2cd4b4666a6bd21cfe82ae83c38850e620a1ce753fd90ea1db50984ce299f315124bb31f00d05480bfcf4a87c12ad90bb0c09b9605c0568c962b1aa8eb169b14fb26ae772b9f12acef48e9d6d7a6d1808655d8cbea83976bfe5c00cdc110f7c4ffec05cdabaa2f2c4f4c70a64fc1ca234cc1ddf3f50bc4feb40307e990731cfa1b34609af410fc380000a819223884c8cb7050c3bf6ad36d0e17bd016a1aa5163460889e79519cbdd4e3aa4296a20d289e93f4dd88ba356c786db0f7c744d76b8ec83a248398057582642c15336239e57726a2b0af68c36bad091fba2572188caf187fe917d310b4ab08c1702e8bb0a935162c4575f6c2c40ead7a63ffda8409c3d5e3100d27266f3d48337b9770f064b63d6f2ccb94f7730797e91330e852bb4fb10f580c9b4681b2ea38fcf216358810bcb6b6e96a94649024cbf540909ea7af067d8e98ab60f92a3246dd17170ad4a1f599feeb5c4179a8f1b8f914e1d005c3dad288f7f07b07808795e4f695562cc4f23b02ee5a3d318be67b693667334cc45f408185514254f606b3292657068a586eeb0758ab18e2d22e4255fbf986c7ce456f13d0a0b449b79de50a45d1bf1e8c9a5bd18f9fa18c5866d3a793065121923ec59d28acdc2dea7f096b6fcab81459b0d5ce55d419e069f5886a820cd8b8ed81a8ea08e46845b0a46581eef902824da809ba659faf30f62793c107176356889b767e90c92c00909263c8b1e18a1381ea228c58e19f9c3c1bd51ab29890eb0abacb146a818477ab2b028da020359f744c37931c293461a67466c0960e2ead19b5198cb24939318344b43087d86c8fec2654c9028ab882c3e698c8f1234d9d7df66518137c71e3062c3307bb08cf672ac933da682d4c7254265a46a23531f61b68042eb3d80102796f0e0fd217ce8614aa9c59e3242bb772abc7e70e4181cf9a12a8adede2587a57794f4d9ab2f410ba0e0320b694ea000e05607bad490cbe4292cbc6e66b70d265bedbe4ca4d6e70ecbaa93c0c8f5b283d9a8d2e9756d0ebcc9632c4af8ddbc285c3fd9007a6bd74aac2aa13ff6f3bd70dc7b2b29151bd09f65e093ca8b01b9891898b29b4eee013205d9d05380a6e4b0e8e49414b9581e4ac86d4eceb594a8bd4cf6fe33fc2dd1964896612827649f5d567deb9f7bb7c9288779a6829d9f25fc1a48cdcb81e930ee1019f8b86dbe4552cfbf925fb55f500fd417041e4c151a85d18c076132f9b9929ed58babe805542393047b26746685a0fffa2e3cf817fb8b84821fe376beb70b4bd0192c7702f8a01a56a62002d12cc0e1841982a7d53d73aa507b8137793027432738817616919f0d122f43c8d9c4020ec21c1b238913085f97e55405215a3abf53c09be642ea8a83fcaaa033da7972d153d1217c6960b9a1504f8eea9c1c20dd36ea98342df4b97e460bc984498b2a96af7ab97744df24c2a455d207b619a97046b64c9951720b2067c434bf694dbf18fbb6ba3e1afeff28026d8ba9a2b1b8e88fa8621d5d9f65d55d76b15575feb6f2cef80699c09c56a4ed8af7a1a658c7d0a2d7aa1981ea6985d309688f29a28b66ca3e376b47f8abd8f51687a4496f44beedb14e1971f3dbc07e03c8bf903931541859b325b8ffc905ca00025672326dcfb9ae3da3d9f90bebdfe8754cde911a964f66c64a6d2ff70ee1826718ccd4b00d059fc5c56ce5e008ac0e976d100f7651a9cf71ada814068384c8741dea8bba007c9490a3e00e69202098635bc8054d488fdd87cfb492444ec35505fb04775c916ece2170d84c5de7f834aea9360487154b089a59bed238f91b43bb0a1d1a940126408407ebfed24ffd872732f9aca3d86a13725c466943125007fe0f83c1ffd1f38801cc0cc18b6ed97923250b431e6c9840e07f4af9c2f248718c0d2e909a8231ff94c17f471b40d8424ad84c316ed1ba788c125b4c21ce6fcd7511cc50ed4546f6a28ab8979a828cc30b37f558bb1cebaa71b9c604b9158d13b0a71a4c3f0eed76201e15406fc728470ad3e72383c21374fcc4c80417cc63a04c6dd0a717ccd88ccba9c08a24a8264fdc047578b6c93ae1e33b2a1bc6805c2dcefb898b93c0dbcc1b6ba0f15a32fc7a227f19e2d4d180b4db447a7ab2ee421ceb067a279d881800811cc4f9db54d9114c9cefe0975323cb25e6f7d73e877d219d3e08333111427da5018fbc2288483584654ba05e30ae147e4aa4fa863582ad47f41f11b8bfba1414e919a444b80be8240ad558abca9b7e73b6bb2b5cb555adeab4074e66d5e67cded31717d9630450a0a9fdbc0c8f1b9b609845c18bf45d10a63c964c2c9c47fca8becf30172204b7d01de1d30487435b282a21ce47f2ade22b3045958c31aa41e515a5af8e91bd0ce55d3b1555850400c472c295eb312df746b82a5852bd2e9fcc21e3e971cabb7e09a913ac23add351524bd44116eaba340a1685be6b298df33084a2788a1decc3f1adbcae08602fad9714ce4de05e14cc00d147a6db573ccb280d23288b0bd32c88fa800b2fc6e7b232b821526a229b48d4e436512c4bc8444468bb23a87563e439c1dd4a7e12ca560558f9c8a95eda5402106c16b6595010cd1888792c35640ca20061d2f92f4521b75586e253ab172b01d6ae0d530971ae3538a1170581a4dde0b6ad312dde71244201748a8dd192dbe31239b0d8dcc45bc6c67f15ed037e68e72566afe69095ef4d2a7e9185f302366185b52eb1c2bd9aacf63913f0632fd63d92559c5e778c8af0c006f1c598d02c7f81435588426c197912b10eb5a01e089d6bb64b39e41a82ea6cf38d20b8b1573ef0517c4cf6ccb3a79595e4872f7c952fc766d3f7c74b1a03a028d349af65f0da5e79abce061cba4f06163609da89a8702a654eae20aea15988b9d08a72b27aa36586b1b849c39320b2e35a25f77e0d5b852211847f135f76674041ee055c4e8fcb2a6ca962480309a336e40217e530f8c4dba3a7e89a9d8afaad64eb003b4e160c390b44b36f0452bd8a8a8722d0c8e011dfe624be888b5724eb9ab22838254e0310c7a27b5de2606bf0ca309836911dea0e5fe23f1276f916dbd61979581d240365c63ec722189f75eb36f65437d4f9b499da6fe6986e7fb354b7cec79532e6c103f1b34992b3076da982d0b3ed04c34b5eb73bb2b0ae8820125ac44715392ca5dec95f124656a1ad8da3a10db98329395b62ac0da9b027c927845b45095c18ab8f3f1f911c610cd1d248b1d7017ca63e861faec65f6f912d84c92b44acf9f2e4a239b5888b39dc2a93db6a2c738e7e585e284b5ac400147ecca72473c04d8988293feb94a7660fa306cd34440e43b45e798d99e0b37362b4a00baa0df3f82495aeed8e49ffefa5322b754f943a7112eb6198d469f73b743a4e20ec1c5a5e545e280c9323a738ca88e018ef24dc6649ab486c42b2528c3de415cab3052285725903d2d4a780762d29d5c5925dcee1b09fa5e690518e7536e2f6d4909e94e41c026fd17a429d2832f0982f19a756180a97ed8ac36aa1e86876af4c5a30dfbe2d9fbd30eff52e603dc0118e7e5fdf640c41680952f73c2ba81e89b0d994eca34ecfffd25b335319d344eb35ac595e9ac4a55e860e3d510e189d730e5c337705b39321439010a7a0ad24ff23d2f6d08dc6a104cc182d299b33fac7aff647f4cc2e32a5d8546dce4a9f5a8a1edf40a145f330f41ba84050d01ac72079a53a87807f2f2e8b3b1744249a4096c74c33825ac2ac045021ec081fa71fb3f94252245350377f46476eb6d89ada0edd0077f091d89fe54912fc9fa6da7ce7dc82d406ae4847f586423dba5e419ba72c4aae2affd764403c416d2e9e1e7251d8a5c003d2a4eafaea3db48a12246cc29590755d9a264a3a9d29c17a2c84034ae201f3960894489d89914b5d75b2fbcfabef0257f7a4a1993856447fa0411a6f1204e28f24e00113a32a71a0c3551fab9643f016f9c226973266d28a7e199ec48e2d296861a3519efbcfad5cbf3b8679a468bb2679b1afed74244424ea15284d9733275eca437e370e11bcacd7b65d473e884509921a0a4eae332360289890ab0ab83e8fe979f2a32db5452f1d69b32a234431c58479a6e24cf8bad07f0798f5f1a984089dce1e59c3169fb4fb9a61717684acc1155ea32b4309c4e19d5733f0a231f3f0b286791982e458bdca2bf441bcb078e077258901b2c5e376f5d306b3a43c85942c098912d71c1534835c3d0b6e6f539e75386ffbff8071d342a40579ae86dddcf054f59242faebf54ae3c75212723b1b5cb400076d1c603b67da4e26d09a4d109c252473790095960a6c8f2254cd10e961e4974337261c68eaa40e9091f399f0bf3c813e48ae4f878c4df249a80075d3112596b4b8b4f0751cc9fc72d7898d72aeede584acaa11a5e054cd7e6b845370238388553a1197124a7e95faf2cad7bd7f6476efdd0e1aded5299c9c0410ec3278b68c28be41beb9c0a978b03887b11aeea62988f11ef6402f6c0fbb56ead8157becbf860c524f3ab5c0ffde47fa12ea8840afe166e3d34b3fc72923be1759516eefb6088ce02b7ce77641e70d0cf36908c485f556e540c6810651a4b110aeef22334d10d3655ccb1938c7f66cef1d026caaf4a76fd76836f393e49b3ed42858f7d9b30e64ffa70b5e05e1dd99868b24d31428267108bf2c8bbe875a68904a6ddb0320258243d18c166b4d52cc4e49dce25f72d2540baedeee7e76a6b730e859300b6a1f9a2000cfd90948649d0d87e90c3a251ea42c8cfe3aa2826413a8dade90f643b6e05f870a38eb8539a935904b6d98c91bf160acb765853de55c9db9e04d66447f944eea014071c5f6ec8a8064df05e5ee8398d935def8e60255b0186c4f379451ab48faf5a28d4ef8f2be6ebd62eedd8423202e147d653b2db1c96df3c7794f502b3dab309b40af739da8bd37b011be98eea7378e3ff7e1723262d3f6bc46ac91235b5fef9121d69ac20a35de0c36745f38d2c4aa6109a471e5013c2bec797384268cf783038086196e920ca6b10faf154e9025c10fa0705014e0461149c0658b51025808f0dbb6ef3fbcbc5e5e4e9d2396a3807eed02c0fff42731ae918cd9dffa75052ca468a3056e94184ceabcfab095f5c1dc39e0f1d88660c40fd7b7ab40f45e4ef00d67c5ce31f2c073ff90fda3b6c875012ebedd3217789345e8a9af861449fa75d6f2a65faa5965229f819944a3f11c239a0d6be30e1692cafd860c54aafc52491413521c0c53f7a93e85dfe995159eb2af50d547421c680786810074e808fc590b724ef6a01cea46bc335c09ad51c190f01a71b37467d6e025075772b007147654068409383979e23dc5cde9ad23f96f0e491e5733be408a1d5f98bb9d0fa8ce98fa59afbacf1d7e0d7980f4eed02e5369bec9bc3e4fe5e0f72b5ff7dbdba2deff171045f1521fe438cfcd60faf686264bb00c0cbd76b79df68fbecc43e003c27c4a8c30ddc2b2cc9953b5b5868c820100ec00ff881800760ea14eccf2ebda7bc5a4c759d07084bd24966cf44fffff92c8bad85ca00b7cffca3bc079f7b7d68e5e948144bbaff1df03fe706348d59dd12e9d5e92bfbb4aaa03a305e5f545c4c282ceed5a444d0ce0c95ad7227b9bda6d355ba70d72cfef0fa5803f12769fd4c2fa0569c20b5355a234488fced327c747355090e73f1c80280e463542c57fa2f71762346317d7347ee66b60526479974370cb9fb31b7163873c67da6d9638a6e0cc7b20a46cb4676b052d0e45399a7ea9b22b63f55737e84bd7e705d0d50922da67c165d8c64b703a07b0c0a18c90cff40cf31566c21cee6dc9cd1c695069ad387eac1ddbff958577bf37121544323d6bf02c02a131e4ccab6d8560e4794c59fc8b0887f4604e9ee46d3402d3a9cf1203de86d002479d6ae1b73e7c0dd6a2997200c7480a8d008dea94d2d6514fa0c52882256af83f739c94aa49252fc7b37ec479436717848f22fc05599242c0732a269ccf6d018115eb6b9698e55ecb13f36acaea65c8b052d850a5c8a66e6c68449b47fc78ae0d5bf4d7aaf394195912aa078d5ce8a5372195d553c0a6bd489cd7ce9803476d7feceac3ac3456cdb344000141c20470fc270992570ee7bdd333a2447412e45a549f5656ba89969ce43a0c0914e08ae70fcc42054cc913c5ea74b41bd3998a2310f1be945fd23e3158c079297590140b7ff4f0e87ea2f45178a371b96311075de9cb6a2ddf5df8e7acf723278928e9aad004ef536f19170de2705fece7fececd9e8780d9a2daab4a64f90684d9bf8808691d661f257c1c32aaf8272a607890dd32e155c6d70d1953ed6e8f6610c52337d238faaee83fccd804c24e3a3d1aef25cb7d69a63da1e71cd2c2c7a042aad9bbe561058ca381d68bdbf83140021144157058cd00da369a85742b651314ea208052c44ea648c93a8008889ff73d48d162ec9fae11a714b398503b5f061a131445c09008cfdc736fb4727564c364bd0de6d6def2d654a4906c20bfc0b9c0b6149513a602f223389a02e7d0655688ead185dae93bef44b192ef558fdcad3a3ce0ac25a4d5fc599d3971cc771e24c8f6db22593efd2af3cc355d5cd2d2bcee5fadc739be862d0fd6a05dd68b77d3d8425dde64637de689d37de5f6c3a7630bd71a811f28c2843bdd55255e3a04e9e62a843587e2f03e5a75c36173d1d5f7cce3979e6cc49a58425f53c1e8425e5cf6daee984238d46d2f98a765de7d1a7e27f7118e5f86b1c55bad89d4eb7925eef7a14bdfb93bb83434e1b081e09ba1b55f1f5bb892a15b6ef826e90f76b84dcd342ee3df6d932e506ae492cf976f7d7089f16524709b1712b084bda9569edc8ade36e19e45b6595f6ebe8570619000e993db6e97adecec9d090bec0e3c145d8df2c2e3f26a6580cc3191c559c6917da149de9b13d15ced4465da432fa83576b654148290b6a120bb8b84f9f93a7d6283ee72c4294353cfaad5e8db7479c265b3cfd1c864fc3c3d3ea1fbf9e5b78b5b2b63945da71a514085d9dc9700255b96dfa37f58d1b0b2ad6f9c39af53133337331e66f9a38c7effb3e11f6032dea6ac6edb2bb2417738735125734e624969c4c8c492c39a23062c90d7142b7cb8e9b71f9e18253aa1960ec2b1a4324c4cd64664d03733127bf304262b8a16f0c470446915d504a51aca9f8d54ecca85818cdeafe2a37b796697182457ed0461541484215628009c13b8daa381a337bc293396a6f6feff772f4e6ef9eac52a169d1d0ec31e1faa455c961fb29aed3a2da2d2712d29db48ab0ac37b8fecccc73932955704d25e037ae0c9b586133c7bfdf65e05b76431d3734d4248f1751965997a39897a122a3231a52ac596527d4ac92a312e390bc795356292d96754a0e7772b99ebaf3cbefb6d865e1dd11f01b3387ce668e3fdb1a9b39a88aa562695247ac66a9b3daa5225931a656a9b58aa51a555af552bf5430ac32ac56ea50ada274036fde943eb8a32a4a51444d7e4a28196a0bea08e5650b2cb584fa525f5b964011c5b684714bd46c8bd02d515d503454edfa53eed452b34a546a0c8aa8851a25255f1aead35012c22a8422aadd9c9296d94442d85f86628992b5904588226251491caa71c2849915546a9ca87162a2887ce56faa22f4afa139995af2957f2a1586a9a51ada75d8973a6ad7fd45199871fd99534ba2d75f6ac9c91ad95cf917bd66b09ad8ad7162e6785953e3c4f5192e664e6aa9c93ac4e3258587100f2b57c8ae1f61a1352d40482d5dff5e5448b9258f9816da2d7954b96ec22d790c5d771eb2eb5f291f35abac51e2a28b173173c4b66bb8983dfdfea8d9d33e5e38a478f3a6cca95dca9d66b2393f4b7b648e9bddf5b6af5613b358d2c9e3ce1c7796dd13fe7c19232e939c81f98846e823e6a3e664141c9fe3e9fb481a85c6a4516914d3acede98f4b39b0d96373a90dd2a536605c6ad3c51dc38c435c34ae8f29665cfaa1e591c4cca13f0373928712bca24f79943331c8714b1e443342979eee0c8c07d1cc210a4f2f1f5c260bf56a1fb3d9f33dbd618ef475b8f44bb18d4b5f549a3ddea372309b3de052b34e4f7f66cc8e978cbda2a373e9d8b613bfe9ab8c3df189b9d6efee04ab0e8efb505b84a692823a2c0f2cbda23c887a1cc2034b8f94e37810f54897668e1536b46695334b365d9a6532ea04e898d91ccd9874d8ae57fea857b366887abc81a27440e5c0fa98cd1ceac3e8d2a73eb8cc913eb599d9cc6c3cce0148df6b90660efd672324b2b399433d5154ea717ac9c84eafd7458243bc81df70e1f89fb6e1d2190618977e7394be9763c7c561a78bab1c5739ce6626038b34572b57b73771a75a4f75b35fc1223647220f598fd4c7d1a5399eb35770ccfc951cf5396edb38ce07cda68b4b7fb33912b919d18613d95ed1f1a62da18dcc491c4fdfa6c8491d4fe91435b5d9c311551e444ee678fa3c64b3a7fb1cf6061a5e2e1c44976e5fce2c5d9a439cbee270d80af395e9f2579b53033b25e4cd9bb272330ec2895c632c668f8bec03eebd51c712fbd0cca19cc8335f51d397e39dd1efba9033d1f777ebb111f67bf4277d77df448ff55865c2a0ef1e6b9272cd633ee4441e73a1581a5ef7cd596bad73d6a63e334458ce0c69f5e823e2209c5ff2dcaec5930dc21774546451c8bb570fdad1acb53c1c9d54f20e73929578c5df753ceb6cc77ce5afc4ff5329f68ec9206c210ee249fc23e664f79ec6ccf12f4fae860baebf2771905ac43ffcfd3d8dd953b5cc1cffce06b7e45c8debdfd96d68c8c96d89b922e21f556491daa8b8ce9575a6c5f57243bafe65778450588b38c826c6fca165f66c64cc1c7ff732737a1096dbe6e5fa6f435d1786a9df86b6a1ebefcf499824939981f98389308f3059f5ddb8fc4aa58e3386703da190ff2707d9b8c7e2961ca50925330786a476754a65ccf78810aabaf0f947fe308514ce1b4641edf2a3c025c2d9ece9eb24f74d55405be72be6ac0a888302e2983db6a82232b5580349e542c77df7d3a572e1f4a63789336c7ffae92ac16ebbc445950a3a6ebf8edb4efad61697b4166b205db7538b35a4dcb64d74a85cf86638fdf7d3d559950bdb0cdc8349bce7441510677a6e138b929c4ebf892aa0edbbdf3eb165be8222dc38c566847fcb9ecd2c7e98c1165d7a30c618595cfc8de46450105f9831858d1ed82062c9c5dfb33eea5a6deac69de1ebcef84f1afff861f6b0c83898398d0ac25ebd601d5cf6c15f55f69af970bb4e11f3555f1932c2d25f2f27e9125d7a1169d8ccd9fea76bcc49210ee2c5ec71c12479077375c4415c6424fe219e74740840001f3e542a1d3a6847085d76cbbf74e9f67b941edb61feea51071242e71286776a21b474cb6e26b53d1d9926b2e0ae4d64255f7511c2fed25f4b346c84fce50cad8b79134878e2e9a69452ef2a9e1c870a6a24f94fd63501074861e000c61a4bbcd1230a2988a0a28a0e5400012e11961d26ccec695205e4fd27aa803e99ff3ec885fa209a0ac803835cfc28db47bee209daee4a8823134658ea94385605048262e82b7eab020241d1fb2097cc1261198ebee2ffecfb8a1f754458fe658779941e65fef25793b38b315c2ee5723f2d32afcadfa8861cdc091641dd1ed3237731c66d2531bd34a4c3e4107698a0276c00061852b8b832841b2efe244e3e1162881f10e1c312530cb9f87ff88df0cb8811ea38f9c3e452cf8891f6dbdf7ffa9eb1e1c2a7377df7e9f4d3a6f61c27a9cb4f6d1ae3cd9beeeb42282613c775737ffa1fe74e22bf926850a381145d782e951d97d461947a9c57e6cea337882e27963add15110d150db9951932c2695424e6962e748bc2b81629b77421d850cca9348bb198465aaab895cbefb026a7dba011cae024bc7d8422cc1ffc622ebf9e4c11e6f243399dbcca7dfd4cdbd6d7c471a08f58c87d5764ced1f41e353d5864ce9cee4da24d0ec2ae9ff4c8df601131cdea9318cae4c02342f8bd0c52e84d8e03a120d2bf3d6743c04b7749fff61e0d3022a8db62660ebf3784b09c4b627e767e523a62c15da0c8479e2dbbb04c957f3bb1ec2326bce4ff591eeba4c76934c5ec0af1eb7b3245d1e587e242a69297ac0c24e06b1265383d91d3f5be7bcf94637a9358f6d7a0db5564c24b978a737a1527513057fc3584395c9e7279ba98ff890f893e6343e84217a7c7f96d84f3655f873858ba5c6998e2da083b3145c3146d661e0a1b08a82f61f3e7f022ece728ce4797495e72f5d2f51c704fc1224d65b6ae9a3899ad5c128a4be87bd7bd40c6a24ede07765dcb5c094314f87927ce543b274cf565aac851af51beee90f09a1b2cd2ed514f2854327b9c8f441f3c84b3f64cf3c9b5d6b9937bb83d3f0333084b79dae3fde93eeae1444ed47561984a15b1140ed254a4dc7e0fb432dd475438481bf18fe6beecdb3257d88512a1d0e0921169cc5742fd45b294679139961e898c388827317ff4f71262d9b76ca3db3fd344c85f3a111f39e9ae12a4ae9354bbe61b77db2c9d79cd89f14c765e6a32c2b70e31718fd3f335f16952a16ef30fba26cbb65472b9e4b69c7f67832e5b27957e7126bc702ee9e10b1710810763be5cf1021b6a1005e1082c679c317f26c00be7fcd49c3f7f724411c08b0ec9cef0684fe01025470f35d8f8218d1baa105d114629f20209f684971d74f7447dd197134a3259ec896e065ede00f3c5128090a484296ce0e215245104176ff420e4c5121c194a4dbc711a7202066470dd927c840dc0b3155b816723ac009e8bb0147896811d9f87ec049e636057cf30b0499e5f6055cf55ac049e5d6007f04c8475e179084b8067211b8167212cce731016e8b90536e7998a85c033103685e71f6c0bcf53ec8fe79865e1d907abf3dc8345f2cc832dc0b314fb80e71dac019e75b00e78cec1ee3cc36c039e5960799e57608f3ce360813c47b12b3cdf6059cf3658063cd760c9e79755e1836ceb69b0467e067b8087628bbc0a6ccfa7c0127914d820ffc40ef913589f378115f225b008782776014f029b8097c1ba7e045601dfc4de47c1febc5bd4052d017c155b11b1155604cf55d8103c6fb12078a6c23279d662973c4f61cbe722fb81671ad8189ea5b01e789e81edc07316cb81e7282c0c4f636b9ea1b01b787ec2da6799d5c0b313567c6ec266e09909ebe3198b55f2bc84bd7956c262e039090b8067227b81e72b3600cf48580b3c1f6105f06cc5bef06c841d9f8bb0157896815d3d0f590a3cc7c0aa9e616027f0fc023b80e72a36c9b30b2c019e89b012781ec2e23c0b59179e85b039cf41d8083cb7c0a6f04cc5023d03617f3cff6021f03cc5ea3cc76c0bcf3ed8023cf7605978e6c11ae0598a45f2bc83dd79d6c13ee03907cbf30cb30e78668105f2bc02db80671c2ceb398a3df27c83259f6db02b3cd7605bcf2fcb800fb207781aac0a3f83ed7928d6c8abc006f914d8228f02ebf34f2c913f8145c09bc00ef912d804bc132be4496015f032d805fc08eccf37b1ae47c1de07ed6a25a5c75ec5c415cc4798b0dca1952bd8fd21d43f5ef64714fb6367e63e6adeef63e6240adfefe3c807920f9a93345f7766b74f3e6af7c7501761d9c34af9e37545f02178103c93efdf517272c9f7ef2c39597e3fcfcbc90f7c3f0fccc918be9f27e6a407be9f47c8c90e7c3fcf90931cf87e1e222761f87e1e99931bf87e9e222735f0fd3c332733f0fd3c474e2af97e1e9a9318f87e1e24272ff0fd3c35272df0fd3c494ebef0fd3c4a4e56e0fb79969ca4c0f70379393981ef07027332c9f70389392981ef0722e4a40bdf0f64c8c9087c3f10222781be1f88cc49087c3f9022275bf87e20332759f87e20474e22f97e2034271ff0fd40909c74c0f703a939d980ef0792e4e491ef07a2e4e40adf0f64c949067c3febe5a40adfcf823969e4fb5931278b7c3f4bc84922dfcf1a7272c8f7b3889c14f2fd2c99930bf87e569193aeef67cd9cbcdfcf3a72f2e7fb59342715f0fd2c242713f0fdac9a9308f87e5692933edfcf527232c8f7b3969cecf97ef2e5e401be9f8439d9fa7e32e624f9fda49093acef27879c04f2fd2491933cdf4fca9cdcf97eb2c849037c3f3973b200df4f1e39a9f3fd24cdc91fdf4f223999c2f793352773be9f4c7212e7fb49252709f0fde4929303705205fe0a3ad77f7f0be6e4eafb5b3127c7ef6f09392980ef6f0d391980ef6f11390980ef6fc99cbcf9fe5691933ebebf357352fcfed6518bd6c34a0fa20e85779b7777b088ca5ff5412ecf6b01d009a08bc0eed07690766a3b493b4a3b4b3c2f1e184f8c47886788878847c653c433e339e2a1f120f1d478927894789680bc80c080c4800801190242044406a408c80cc811101a1024203520494094802cb15e2c182bc612620db188583256116bc63a62d15848ac1a2b89a5c45a225f248c8c9142e4104944cac82272461e91341289ac9149a412b9d482b5622da1d6508ba8256b15b566ada316ed8aeadfc23a974a6cbd7c05da9aebf52702db431602dba30804b6c78c89ed71b4c4f6a095b607d2076c8f5a0cb64792076c0fa50ed81e4b1cb0aa170c5605db8055c53460554219b0aa212556458401ab925dc0aa8a2c6055b317aceaa8025645a38055214dc0aa6a49ac2a490256a5e482552d45c0d2bc802c0d0c029626d682a51162c1d20c21b134440fb0343207589aa206589ad9114b73b482a5a131c0d220a960696a462c4d52114ba344c4d22c0db1352f21b606b6005b1373d91aa16b6b867e6c0d91026c8d2c01b6a60801b666e6636b8e82d81a5a8fad413a80ada9b56c0d696b58b60688b5e1b1363bd6c600d6a600d646c7dafcb03629589b1c6b33f3553f8eb52180b5a1f9aa7f00d666656d466b23006bb314008b02002c0a3716051f1605215ff58b1685215ff55b8b428d8da2fa1b6878b96afee78ef7bd8d19134883a24d6de6f40e8d459b0568166df680dfdf7acd9e9adbff6484e58a6887864394833473fa696c0f146c0f1bdb03e6ab7eb73d847aec15d1edd22608b7dfb3a5cd0f6effe9c70ead35e6f673b63c00ec361643dc1f4336970711126199826c2905999329c876be348b7e2a05d9ce971dda9784d06f99c20976ba183cc19e607f9081c5cbbbe694702a42a8fa12a584523a25b5907c754a6a9b1a1a954d0d8d4a09e1fc1ad6a367f365e72a9b1a1a15df283df6cc528f638ac88014e0f127882aa0135ef5aa13c4cc7ac86eb74dedcb08fd962d590ba9c7d60976ba1a043ab97afc0489d8dcd66be67447f4cfd07cd9a9669666966ac41d5aaffa69ba4e159e20cedea1ed84993d6f84f3963b21e5e932fe3d80d8d7c90524c957bd43bb36749960a7abbe11fe2d77683b3527574f146981e50c2238d1c5d5bf93e4649357134a1c6104850e8ee0eadfa1ed2061a19444d04c27a1c26188d299fedd24b710c56dd6dda394860ea2dd41d8810d9eb811ef34929de10311d3216eea32d9b4d7ebd50217b3e734d76faee34cda2d797cae77b97ebfcc3005b81ec58bb3952d8cd8c28deb1fa6b88872fd9f0ba4eb3f1eb5e0faeb1c255dffd64fd1f537d20517d71f0919d73f89922e9070fd63f0e1ba9117615cff2751ae3fbf60b0eb4635f872fdb94b14d79f6db003b79cab1161941c7752b0085ca41441c6d1982a9c035b98c8e20b11b2988571b91f21043464f873673086e0c4f51762c41fa849ea9a3dfc91edea0e91ba393b27559b6aeb9729c31c3fbffcf0a7ceedf7779a8c0dc1af4b351d3a36a5ee37988e6f61ba74882e5cd1217a6d93b221358bb7574db25084467cb5bd5b5a57f6eb765f32516855db07b9bce6abcd3b4599816bba98e0576909a74b89afba7f284c00f9cb3c142680c0f787c20410eac1ef80fac3ee1b48e65b84f223ba080514a1e8f8aa7b9438735aa9e37251b5fd7481a2ea7b4775ef634a385d2daa3e51c5823ff82ec87c4f174a546d62931ebb07959818430b15b1d7cbf5c457b50cda54f224ef5ec632cc61dd3d687b5c095540e077f75eab4b75698339182a6b1677ef485d5dbadd7391d37cd5bd4a8504f52d4c970b5750a2d77cd5755df74cc4b2ce6935c957ddcbd8aa743ba76def9a379db8848b79320f06253387bb7e0bede2a30e89affcbb8732ddebec6655fda60f72cd2355770fb4bd0885891681ba3789503a28d357652bc8350449ca57fe1d115211876bba38b1f395972997c75fd7f9ca9fda164c46217faddb8bfe3aa5db36aea0824b7fc910be66cd0ca173a4946641b1f8c10777c6c774a5f98cad52e7e92f53b77b0b19a4ee34da2287abe34e232d8ca0053772a1c51a4468e103d7c24b0fdd14d9a605154370b1a50a83d0843b8db438620a2d80701da33142d0d9d1aea6d3466bf8e044be9a9d176164c6e537c328075d78e8e1e56da1e34371e552fe9c1d6f66c2ef9ba13172428907dddd7d3275dc467ad7719daf2af5399bbbbd2e8bc73d46481bd0bd2e1d42376eab1eed9c349dc054bfebbf7ddc56c55fc19c1e5444d192134484d18610602a2eb6b8a1051969d8f08330742b2bb8fe42f89bf5d3212cdf88e8867e4af0e64d79e57405f66e7224c2a6f32978b235d6ab5a633dd62b1d951e6b95d263dde174455856a12b8568072ba7efaa74024e42437587d9336fddb60dccacddb6a111d667269bec6e5e0f61ad5fa55c29cdda6667ea3a91898aeb4dac38f0e60d7b73ce3999a7b3f53f25113233377102a559af264d3e97184caf8c10d2c9d5961082b925875902e38951a3dde9a30bf5e6397b8a37c7b9b331ea90c14da08637aec0218a1952587195e1ed2b59d4a0b1718650182e37620844dc7e21468ef42be9eee600dc72e63aebba1bd9904597ebcefda56f79c3e5890b80dbdf7119e3f66301451639f458c178fce5dfe92ed23973e66c37c96a16d664d5db5f9160b77fb6d3665a7a4646cf86ba477b7bfb4cd521daecd971fbbf7617d42ea208e7371957dc6974c5ecce6feff2b3beeb6ad7df4cc8f43bfad34ad01c35685ac123b78a2a154a7aebc75e832ab4fbe599c32e8e33873f0a6fa9af9ff6f8f59774497f37c3f432e1a5dbfd52e4e812f71399800fe8eeecd1f4dbab56e87efb0e554bc26bb1ce664ed607dac4590722a945bea2b612d171276a76b710463948baf4dd35bbc71d4102ee9c39f47305350ddcfcba93525aab4eca88b0fb72341262e448cbdbe4b469530a7eefcda4c26f135e06fc1c329fe33da73707038272fc4fa3fea73dc7f13fbd63c70e4a73d832bc39e88cd5f113ac5547f834fc1cb66c72c3ff711ca28c05adedec57ff24ba4ebf505f090c313471f2a459549cb93bf854848cfbbe0e043f7008cba05060f8753870a0c0a0cc40d52e6a0a2a96e57eb9fcf334733e1d9dbaf8897642a2b79c9c43c7a783d2d3d089a8c7ee1ae4aa42be6ace06b93a35c21245e4b5abdcabd0109622a3461175b95daddcaeb2db754bad95b24a94152c6c5510428c65e544d42cbf3dc7afc794cbff4d167d6676953ba2ec9072f999e31eb1cb3fe9644d567dfe1d5c2ef34ce24781431885998fb32a200e8a18e4f27698ba106542c7a1644ef83a8edb64c0d4c7d92097b78135c8e555ee51556e0f314d5d50306e7fb9e3965386c646273473da74f465ed844c476cfd3573180487505ed9d769e864a55743272b30cc9c9e606e0b5569567d2b1b0cb5ab42f3972054ed070ea136e4c1c39b070f1e3c284f1e1e67a70b25cbd9013b337b28d46c96894d7f3a516f293c06cc694b25777eada659ef26d2203ebe136432dc8d38f9b15aceee4cd9390b33f3a8d36413f754ad27ee4f94524abb07dff4419719b4f3e35acb664b28f774ea289bc45187d6ea94520e0761a5a5cee8d4e977eff5ea54eadd0abcae9b3a2f084b1df75793ba89e5f4f225ddedcbee6ee1ddb6ed73581c36b45d6b5249afea6f4f63cd0a820a7d25cfadaf04861898bc9004a8591f19fef334c92f9f2619e6ef642872cc57f5c350a4ef39f74e1830eff7cd20bbdd075db71cfbcba07e8245fc4d41d784fa5ec6964dbbdf73dfff38f8d5aeabf5e9f67de0fb895a1fb190f27754e6f569872d977a62ca88b0fc6ef995ad538b8a6578794bf515cd42bf6ae1207ceb16ef7f7afcc299666d4ff3379c532f3f56f75eb51fc7ccbc3dfff632d576cbd4da5d27984af5d8a3cec83d4e8ff4f9eaf4486be5be1cb9eeaee2f69ec9ea8c38e3f61b1d7174b8ae3fe7ac99b2cc39574cd2afb3d25bbf2fc2f2e6d69b11c76b7d3bc4472ca43fbfeb912fd79b0e95de4eef6de090eab563c0bc1e655b9fb9abd75bbcff2c38e4e37e893ff7a70fbadd1d67276802bd6fdbd9b2c9f5fec73fef6fddc4cae120a4decd9cdac3070fdd9b687d8a815bdff4db647df6865c0e75dbbec4b17d699af4fa73b65e8f399a34c96faeb64f8966e9cebb4d1c187fa9319866755eaacfb01be62beef962a937b85bfd4cdfef4ab3e77bf5f6746effa58fb93433334f419317aff96aeb1e51a8dced4fbed4abadc5da0d2739a7579053f2164595e9c532c589e971fb86c18ad4fb89aed4e3f6d496e0dd3e54039ca42bf96aa3bf5100dced75b72f6bee26963beef61e0d677adcde959c6c18afb64fa5c270fbe938fc75b6ed9d6b1807f1dfbe7798acd36fdf3e4c12f51b8a94f9f204146ef7250ab76cd8dd1e65b9b9eafe647d8edd8fee656cf75d83ce81439c23f2977bae038738c739f7133489f4661397541a68c59b261c3cb4a3abd6a53e2ce67199f9c5a8326fc0e09099d0769b6550c7717c3dd630fc8dbd8bd7efa158085b60b0887b74524a296dee64fc6344688faca3e3fcbdd16d04fc068a8596aff85bd42b9db965ebf2d74548e4b481454ea7dbcd1c228c240a0e3874be9a1c58c4ce1c7e3b733a138a0815718c0c160943164c6011ae053fd121f4bdafbfeffb3e9e9d0c2d729a7c3ac9d4078b6ce2e98e80df2841e5ad0c31a48c210ae3e5cb9d466184b9e19d46617cb91e8a366b268715fa33cde3e3e1a45af57bf45217b46517443d8a2e46616cb9dc81ed7ffaf97989e66445f2153f1252ad96c42585b1585218f584c2b2c5f4e84b3d7a2bcd1c77a40774941ebda4b02a569aafd608cb8e026b9894edd5ed5b98337520476996176eacd4a37f52d9b4a62935cb6b2f485f1a4c277598667def7d3a9d4ea79797ce9abaae3b79a7d3e9743a0d79f2a4c72ac2929338a959e51473c3346bded32741e9d19f9f88496a2fcc894deb2feda591fc9d3c81e2a79a376fca6ee2e449777de34ca693a95666a60d7222d7d808dd7db30cc6e9186139c3dcee29b05c7a279359fb9888878a08cbeff5722c777e67a51b3229514d582edb2f2ce718f69e239326b307c9ccc16992877ad543e50ff90c19cdba1c797167a41d55c292634331a1994ad52350994e2a3d2284289481b65a941f4cd79af50307612a97ad97f2ae4b4dd7b94ee59641def5fb8b54b6258572e773d664db64bb9fe00cbad33ae9dbb1924b6985c1d71062b9254d0f7e85d3288c2a37062f605f603b886836f0e109757cde9b66cd4b5da60bf5f00baf7de6444558a66e7b65d7332f73d16e022ede203aea6274d465c64188b1c5050ea28a2c977fca78f3f6f04167f7001697d03fdd25b3a7d4099a5faa70baf327154b1a2ebfa567d0af76851f64707903cae5254c2698cbfd564e2330bc5c27bc84c9fc22f645ecce3fdd2f62beb14bf1e60d175918f172f97f3759f4ddbfebb50d6a2d1da4dbcfe303b4b1b03d8764baead7214c315280c9a10b98d0942bab1d663df8414a125d96506d68d4f5ebb4fa69525a84df6fc4fb75bcbfe5342ba6a5559270e9a8816164c4432de448b36895245cf48d504f621a79bb2c0d0ca159d9ab739053c39e28cd908a50180b63db057f68562593746dcc550250ac59e5f41252699613d19292bc404d42e68af2e51bd2aeebb61aaddbaabd19bbcbccec6475d5bc685b2ad7638846b4d52fb4216ebbf49f38d9b5d6aa42d2df22147605b97c08a18eafe87718f3158fda98c68299d9c916475f6d949995a46a489c5f6f86854bb6329b3d1e60d88a3b8dbe38baf43e6962e5d27732c6e4a459fcb5d6dab511fa8426dc404a18abb5d630d62c166f8cc226a8a2d983804b3f0953d6212c2792516bc74bcc1cc3dce2b97d8f1b39339b556294615f10dd92a95c4a79e85226baf4b7ca2abf1b8357b972cb0f895bce302091a022f4b2a88210623d4e1d2795cca44b5f8726f1d5c68249ce304a2e68638b34a418f23249aba5071af850831640f1858b92497c451fe9d222dc4d5291103ea53410110652982b5ca461c5451f90064d0b2c0a163c88e1a2df84fe932a4900351096d0032257ca49ffca3a57bc79534e2c9458b603b584f06ff7fd336376bc9a2583fad30da17bddcb882a3b8f40c40f5ea058065dd0c73bb344a4f59a3ddfecf1bee9d7435623b3a9a540e996dd33a9b10ba2ec15135e15c40650cc645e10963bb4ee7768cd2a6f5ed704db234baffabb4eec21ab63f090d900092d356031f222034246942186174ff4d08407c6205c11350b8bac59def7afb234cb9fde304a1e46a9471f351f60f8e31bd08e32f0b4a966a8a7f21e0882a095b9a8fb59025c1ceff1a7b22910d9d57ddd1c297c620ab21e556fb393049eb61ddf3fb3b4e3abcf2ced64d9c9b25304aa1eb479b0e64110042ba54eaa1ea7bf1d2f3b483b9f1aa15fa1f9148866cff7bd93c5dd99a520cb419a3de0ff78b576b2d899cdf490e9f8a566d1664e83e2cd4b00af51b682396923aac2d05730ef90084b1f350f431fb52484dd973bb41d33b6a44fd46077684bf4891a6eb92a7748b9fd3842947fa09da0e5ebd92ba9777b45b503761bf6aed43368fba6304b41d6630a597aec073d4b6b10ceeb29188136852df3e70e6d87d62cf7d22c1452b3646cd80aae82b73015ac85a7e022a6014bc133e02c1c0543c1326e82b1b0124cc448b0152e828718065c858960210e82a9f00f1ce31e580aebf0fd4078051c856de0170d5052f0c4044e646882c20848508213a040053304710d7c03e3c02ce01c7807e6817de0290c04b78085e021d805fc028e01cb808de023f80a27c14b7c7f0bc94966e2fb5b3527d989ef6f2539c94f7c7f4ba9b5e412ba795d53ec963d7666a48f9a7bee2e73bdeab5b9cecac9586143f0362060b2a4fc400c1ee8000760788ec26ee0190aab81e7276ccdb3cc66e0d9096b9f9bb04a9e99b0e233168b81e725ac8f6725ec059e93b037cf44d602cf572c009e91b02f7c311fc4e00c177f8a99f6f0fc237f98a2f3779873ce39648c9e3dcff898bf723bcc84094b4abb9bdacfdda5c0b9e1aec7899a1214c54b0c8238e20b2d51dcb006972e5b0411fbc20a987641cf9e9c15518584fe01eeeafe74c89fd2d9813779429ccbb767cfed8926715c8c8305ffecee6666e6342a539e2ae250eff7ee7f2a6e59843cb58a3c9e2d4f8e7379e8e3f0e8f034cbf33cef4b9ceb7d6d4d31f4de13cb93e5c1e99199eb35755caa7178a39476d04d3187f47feb9db367b2f8e77c3ac3fed4ec6a5cfa7b7cdbbfaf1a264c09e7cb5ce9925e271dd4840d591401e3620d20aa7025400b0c0831c0b84288365cfc93bf5b1af9532098b5b93f1dc2c99fe29f5478f3a67caf5b451921fc903ff54678e39ca408f947272e76217f8a7ff277ac0457e7ab69f4f34327debc51f56c71ba425ff1f3b7f87fe498a7e2bf993f7ffe383f9c9f9a3f6fe64daf98e41b35c2d4ec84505706fa755d18a652ffe37422c4547a6c8e09356b3295effbc4273df28c8f58c64557727c13ff6f46e79661ea5d6cd6c13b9ec1ff9ef97b10fc0ffc8fc19f1301e1345a5abafe38dea3325706ea57067acbd0080943771ab9918500771ab901bb2c73f284ef1d2f3b41dc4022f441ab92f9ef552ba09e9f279826de752a1672bc8e7721c7eb105d98f91de2f45527964138de3f879d41c2cd2d964c742e8ef71a80e31d09ea4f5606875581ff3d8ee7ac0a7cbe9c4ca8e3733c057488d357a6cf215260faaafb5ec6f205ad8f58b83d7be2951c7fea6e27e61059e664c7b2f0fbc7fe30250385bb53662f3a5f744cef753adc92ede973f437fa5408e1b76de00a3a2e65d659615bb23d5784dfb85d155546e6ad5f64de2a7662b9d5dfaccf6e2178f3868686a67998e3ac9099118e398e135b3d2a89a1a6240693183acdccf12f696852a497baa7ff2c574a3f9ad9d3ef5f33c90cd468c2991e5798679c6eebf4ebc8c06e2903bb9c9218e6acfbb83479a2c43f86ae4b2999396e8409eadcfe6a99e8dc2b26f1c7bb1b3ad9b968adc91325319c7ef8c2b0c5ef11073838a3937a4b1204d1ef0bbf6f967f132177cb6fdb4ea753c9bd093e88abef71b71a3ffd46fa75fa5b63b49704688a467abc62c2d1a1f59b30d1b94bfa757c426e857eee75ecb311fe8d7f3838383833c7df0b9b084f0d36a0892bb992e5de43c2a08a02a6f7440a743f7d5537c6714b1c9c9c498e60aefc4da65be2843844646e159b18219c8109a0d3773f83f7a69fe1f4ddf31f219c8189fe194ceffd0cdd9ffe552a6c5fbf8aa52a75697af4ca25e5dfe44913617d174cefbd0bdd9fbe8a2c98de7b20d37b7ff221ecaf1549d735115224b7c512894e6f2592cb44e7d2efae746fb2d3dfc94e44f223921efd690c6bf2a4365804b710eecefcee2dda5f1e8452766c09cb6757ff973ab3f91489906f49678fcced671ebb53532417b5dd75ab734f96be5e2e939d5ecc7a107bb9dab5d98d872137c24fe17c89420b10611421841b18d93206083230238b10525cfd4afa63e8e7186d6a469bda24026509cbe905e84dad73b7cdff66a43ec3306c22a477b3e1ec91e917809610963a3ace3e04c95dd2cf44e608e1e9bdc56e9dbbe574aae620fc1f7f23fe3afead8dc80ba7c7b77c80c748847ecbeff2ec91b9cc24065cd49488000411d270f1b79c240019536c59c2166a084de10a7ae28d2bae10618a2f6092a0c60abc7001451b3aa0e1858b26d473a442dc0fb68411ebba2f82d59ac3adb0462af228328e881b8a359859c7e58729d58cd857ebb17eadb5d65a6badb576ad936e5d6bad445164528a62b3af169bb40b69469e99c7d169f9708c4b838a5036bbf55b232c5bb7b6e9eb9038c7d05715a7c7aefb2b295fd5f77408cb71e51d8e0add4d9a3d4558a071b72953dcfa2ea5496e56347bf8eb3bac591b9794a586a572b42adccca9786d60712b976d0a38b34958908e5a94519a39f53b26b89acbcd9c04a9f4aa7e95232b342c48b782596ab7825b926e2d39a55bbfc1180e22d8eaf0d710dcfeba89e086d75b4e864a3f476008d3b231c454da18626e39bfdc5abb75722186984a7b05d46d9f754bf09a6bb94e337ba60f1eeac569f5b8bd8b3c9bf5d9bee4d97eabdbb6753e9be56929b9fc3c3e3c3e3e5e5aed05a8bbbd792e1bdd80edbd25647b2afef468647bff25fe427a6c179b7f7a343267f3a7d83d7b8aa511fbe32fe4a7a773de9be83376c7c024e6eeeede2dc49bc8bbbdbbbd691e8d85a6ef3ed5a39de9b1fb0986ac626e05504aa918d8a594c68a404fb32224811681ce2fdcb14bffa951118e2e2da229a6fc333dd215668ffced62183ac53189df9714f6b3d32af318e50637ffe440eb46c7a7f5d3f2f969fdb47e7e5a3e2d9fd64feb87677c1c9c16ce8f0f8e109c56ab256bb5a60fed7efe36d61e5d9c73ce39e79c73f20cc308c39b37cd9466a6c74721818d27825e3989d3575e7bf073a4474fd2a35311e8052f495e007ac1cb0ba9542af50250122f49805e007a0189101f234f5e5ea24881e2c4cb8c980b242609bf94881103e42595f2e2657a410abf1e5d296c2338ad1ffa63849b71428c6c3f468c18f9113213f263a4d21f233eb539bb1e0393d8acbb79f6531362844e9e4ce9cf6c4684a559c7cda0e3ea534aeb53da0939b26dcfef6d4c8d083942af0b3952c51f9c969190234690b490d4cb9345ebd73b8dc4d460b489e1388eeb6e9f6e6f6fefaebb3b8e86b29a10fcad118e3c3edd73f511d2fd2f61167df311e223a4595474a74ea7c96485fcf8f0ff08a16c621f212c8a2d9c1b9d1c6eee17235fbebce0e3d3c7e7562566ce681d1f21dd2fa4c723fde534ea37d2a3f726e408e55f42bf5994522aa4ad9169d44768b79023fdc3220f4ef526464e9e4069168b4c60e8b18750585223214a478c28218141c85cb91112c2b8542cc3ed0830606040c2ec8d0dc7797ac53da5dcd35f42bfd5a353d1f9797af4e9d1d9a759ec9d776e7d785a3dfa736df0b47898f2f870e20ba2ce08d4238f77ac926802e1fa778083f4fbf3e0222ca797eb3c2f342b492b695619f3e7992bffc93373a71111c05c2af25437da1b327d54d5cbe2e7df3449610d8ce0c30d8a94903283279870b10e6850c6196a5c5186155ef4807fe40ff95365cc32906c40420c14650851832b00542439414411a2d061062efe70c8ec9105217f8b552adc16bf69c2316fbdcc5fe89ceeeeddcecdda3c14fd1367ebb73d3df77926e74cfd15f117a9d8f5aa9fc532e4deb3df7ba6afe2e9c31953fdd32632f9895df568425efdabf9b9b3f439dbcfb5a55d775c77c5d420f79fba62fa2ad25ea53e22dd47dd69aff7e120ece3936a9fcbdfe1eb0b2da5e486d1183313bc59651806d15d7e9aafa584fcf8f8dc328470c41449f8604a9218172b21098d2dc0b8a2ca4bca0b8958101b4031eb3fc241faf947278fcc15bff31ccbd9c5daf00f7e264d403b985de657ed87d925864474cb09e6321963a698cb4cbdf9758ca2c080bbfc38cc34186d80901ce94010557cc086183b642106112e36806154e5882c62ae58b502e74ea33280b8214c8c01c828e15c77cf705ba55dc60fdf0ccd8f3b8dcab842074238987521487d918c688863ceb01efb49931e9144c121080821a49401b3e1085476706d220eb38b0f408821e183591a43b8aaa8c457778a5b8e45b79c331adc72224971cba934835b322c8b47714b2e42c2195b5439f241105d5ce5df2e8306604cc1410b35a6b8cad61668fca00404128ec0bcc0454504489164444d8d24c478e1723186284518e38d1da208c2085750162aacd882ca161a0c418cab64a1fb011e8040421469204d4172952c83e2b611c8e0c2c690162e63885c4155f8a00b0f6d6899410fac7031e9e20b26c4f802073c1ce16a2e6455983125094af870c674038d25b4d8900317589a70f52b71320826060f534c7184971de8c0d5ffc4c9a02b40b092c60ecae072050c57a7600c26a00082962178a0840bc9d0123020a018828c255737cfb81878f4eb771df54caff2bc13c91aea42ce3e1e145dff92e49d4c6c3289aa15fa9abe485fd304b7e740caddd7588343542a50daed7e038bf0eddee39a636e721c47439932e89ffb2827251ea071bbb3aa1568a5bd3c5b9e6697abbffde96e56b5427daf34703391d74bb7fb8d977cdfd71f8db00c6f552304dffb34c2ef3d6ea77533c980df5d90fef867e7ad606a6cf6ccd4afb5faa6598d0d79fd1391d73fc5ea9f84bc3e9dcd1e13689dcc6ce6d4f77a1096b59635e6ddef2748040001a5d5a8d4ccb486512c19a2191000000008023314000028100c078442c150281c976ba30e14800d8da850684e97cac31c87610a1963002104808000c00880c8cca44100e101d5713de0ebdd9a8dcd29e39705977e166979941b3b00d9b8f3a18e521f2a57c9a316108086b9df3e1dd1296f347ae291cb9971853a21cd95c024ac7c13c9bf834b78af184f8adf596bdfb1e9fcdcbc95f833919b825711ba0d66d59e0b9d3b80694c6cffcfbb7abe7176f247e00b448c1bfb92f728e15aa61503b001d1df117d47902b39bb405b3eefd7a3de485a08ae4307815f650260a1053d647d610002a34eac5f20acd400973fcfeb5a79267381ec20741a77f518b8c48c5efdc2b14c3920b5de7726bee301726672bc6f03d06c6afbcc6b1d26f38a6924a2820cbf000b760c1fac1770928e2769becb9b1352c6c29b576c83fdec59cdb9f0055dfa6f81076aa2c74cbb214cee06e9ec48ec596bd383ed528284002533b70bcd7ac4c8df808493e900204afa8c386a09ce47d8d651a6b61c3a4cf42ba7ee8670bce1e8866a223748566ae9c94a45459e0eb2daea3f482e08b0dd18dde270811bb19481beac3f25f7c22290508b353ba67683817b2f7572962313fc7b91406c24e353d72dd4a8e4d291a8c460cf5210ecbcce9840632f98b2f79fd185b2de2857b57e61fca8718f0c4f264a4077d4bc51da955cf7bcd6b7bdb34289905e918e28cb03f2c0df8a143a79fcfcc2611434b1356b653b462ad6e161ebaf9329b5855fa864c35e4a46402a2c4ca9f2075f84004d463d3e20948b338d4ef45f83d08db9229cb72a35e1b532414a249b38c538efc31d8278df45a094670f81a685fa27ca01742adc3fbd751f9a408690986ab570b0fe38a3adf981dc3d943db48421eaea09d5a7aef14d6f908071c7f4a61338809a620ea6870e1a115fb85c2e215cd037ab68fab57aab6a93d6316cb35666469320006780616ccb5a0b83b9beaf0ad145d242f1350e07210624294a4a558efd945c48067477f3c7dc21f5ffbacb7dd83a214c76acd0379124fa26bdc3b4d0f38cf4abcd7022830b40349c1d96d749d0acafc3afad15155029fdb319c8176bd7cd28f761a0ade09225035ae6becd277ab408d8f19f741bf94f36519a13eb4480117043b7e2f662610157e26817f0c7c2ab9918170ae4da60ae8f61b1111f63cb1d1aa71a5ed4d545659e76ef6a426c9b2919546985a7beecf1f9193e0490beec7e939600bf90b34276b4052818bfa6e34e47ac62bbd303208e061a1665cfced488bf136ed8320bb9106e84303eda577dca58494d5fbccdd221c32a0834b2796ae98c50606cb2b0ae82f13e618a11e6516ddbfa3d7003ffc43ac5ff7ce9262f023ab7b1fe61056a568cd08e048ac8b7090c9cb0474b01aeea9a6fd4047981050d988d07ca3ae16c1b1e6f881604a034273cdbf6f219773c9b0295f912306404d46329b656886e84bf7338c036f61eca941a8378d94f100ae66b5e0a1bc62e44b6616b7ca9623c98a27f368f0f76c14dbadf1ff0457dc59716687436e323c56b033817140cce8f960a98910ee9922f8a455e46a73e6407c481321ea0b510d394fa8f6580af16f421b21b39383e70794c540ee83f8e62dba38f6203ce0b312d25db650a9d71c1f2b47b715c81f60cbe8df8de298e97cd41718ff1018633ea800bbed74ea8d963faaecbfebf089c3bd89fcd6e1e6d3abc3b1f2e09fd9c27b332704892a1f859b96187fc3f93765d523bfe67e4da111ca847f69ccbfc50e7833d492dd123c6191fe0dbf2af6a7f0f76aaf5fc6fad2ebcbe6d5754e50130b9e7f28789344076bc6f8aa20bef4902a3707963c1b8c31d586c4fff6c591d8c733e710ef5f5af9677fd5075b1d8f7f4e03ce60306e0363b695548dba9b05919c839a7046a780d27dd80808b6420d71462661b0b713b42e27e01e7a59ec0d9186eca6056b892fc29f9f48324352eab60740c1610b83654ed66b7f146fb7c24857b08c4c6bd4173ee2e3fed4b262ae1c41917d5a09703fa7b25c138dbf85cb686577739e3df9ed640c307b8d6868415580a1581b448589047359bb1081e0c2cbf73da81daa16604da7db544bbda11882bbf33105b1d75af8d07c02cddc7d60207a9896aba0c7a87a6cccdb6ab02bdb4bc8b44afc50967c6f0343835168f88106d429fdbff225f6b58273f1ee058d24026a009ee6f310ad952ee8ff3864728c7b25afcd977540475f303c0e03e01fe3f614d441370412fdda3c9b408989cf60a3291379acbf9d5a5cc1c07e6728896b83d65be5bde8b7ef2bb7eed415ba9006faf9ba2ee1162ba9ceb3104cf5e5e286cff2248003b7adda7825bbb63b430cbf55d2b3e0317a0881068a0a9956892718bacd9e2cf272577ebdb9eba11979e4c26d954e2285bcf5829ad9702780f3e1fe0876cf5f1b983d8a814688d40b489f64574c3fd0eb18cc3323bd016fbfc5fc157a13dc80c531883bb15c65ac4850f2186cc4d42943e2cdbc19d047ffa21a9940edd1e9af3879bf43540173effadafb35721e29e674c3ba1b364fd3f136cde9981fa36f36b0e44790105e1aeef3d445fd885c381e746d01f2bb1f0536cdcc5f6c69005f9f69857ff3341fb4b112db4a5d29cf2f93de58c5fbd79679f289019e80267a0ba67d6b68a9148c2b3d30b7cabfb998f2963cc9c998963e4621b3f2db5a94bd2f9038121c24ec0e42208ffdcf364349540eac80240c118e80db478a8fc940539c1c6f71e051105702dcbaecb007e553d0244c46adc4af18d2688652f8f3e9aa181b871f61b70d38e5a683b18281fa660e34cef642bc079a9460218de9c7f2a2f717c12c02482bf2327a30c0365b581a056ce0fae1d16481fe5871c9bc6569d85ca6c3fd164df5233584627a5474f665830c5997372cb71867fe654f14bea9c9f99739067f126efb1dd938c8745d24a3562daf2ce5ef3fbe59b98a131bed6d7b366288fd908b9deda4b492bfbd26797387b6674d19a2e8d0106764d0ac678bac5182c6c86fcb6372b3d671d70eb6943854629cf8fb6800e5d89574e5a2d4f07a5db3dc31312446ac0096989b1b5e164352fa89f3d8ea0e6afa65c7f9513a532a5961af7ee676d1d1bdf11557b97302af757cb8c59ad04ce313cedc0bc151328b8961bcb8818ed6418b20c26575775b12a1cfcc6f0d46f1dcf054971b06900c9b1a9850057ebec7a98fbbd8b907b4f571cd3d36b1f450006c42fdfb41f59a196166fa91d880be3196518a595da4a7e965a4b5b81c3410ac58fb91cad60a423e7f8dff1bd01b655b784509a74776cd60dc846e26b4aa9f5b70bc577acd516f1f40e72b92066bd78193032709a7c05eea216f11572b15a66b29c98fe5a04638c09b74107bfd61ec287aa1b7af726c2d69ae8072626932404960f0c4faa922c7e31d0f3516f9ac13f4804754b4c87b83189c9617cf56fc6b17317b176d2bf342c9d127864e79d1a131405f792d2845d3c5ecfe8e3c100bb6e7d3beab8a6ff4ffefb8252a5f696059f04190a313c1a5fbc590fbd6e594c7a712a9050c58822325dbc66c7b55d80ebff89c24484615f14c10f370e986dd104f53659b1389a96a1a335982a766687eb16246d04c5dfcce9a19545c32dd1ead27834b72b6c7db3904a97b3e9a87926fd54218af22b6eefd70823919af0c40d9034303d9bc9aa06ce56492f9dd194cec02d0ba251c151a87e9271986bc0031a98d3e35c21a5989608c2369e712307cb16631ee9cdc6674157bdd11c063486ea88e1331d28004a0af7c7008fdab260f83476bee2cde22a74a8196f592b1f5e2eeb49d031253e31f70a5b3a621b8cf5b693c616a13c6a52adccfc1863194d76729698c8ca812791f1f7cd081e19f7a57b94a6b945f2583faa82e87f9bb4a2b3451a8b947d5d3e7ba12b4cf3bdb78891613875c5e177bfa51348e3bffe0e4f9301e7aae5d85c9d5ff27d1868a297887952aa859cee36a8cc21f91cd3931496d25214394493de0bdb93ca3c331a295cc3b7f3fbebe2d968b8b8f60cf5a4e2026b2f8932ef5a02d8218a1966b43aad699164bade73f1adcde3d4934f87bc4c81c3bef290eb895c08ed3bb38421a80847361387d4feb8bff534fb233d0eee13a226b042a62f7643a5406b085bde5a72c70c3a9d9a1395060fe1f631632654cd956b0692b06628fcde0824a14146bc791806f280bc4e98ceebc1bd5791e59990571a4dcc28674857b4f7698a256234697e3a86117d384c82df3aae0bbe996497fe1a18880f48d11957ec2851bb794e43bfefd265e7d2a61e007bb23ac9f0c9153f6d564e3a4695a63da3f90d10d469d42549159d0583113921b61040c174efaddd49dbb87ae753bfd8762715e9ace4508d93c6290dafd24c82fc6306ec3f07efbd62ce5cf9bc22deadd22616105ed41faccc99590d13b71e83b741afe3fa1420d95dc01846379cd432eaf5645b5c84a97ec12b25edc40680d3060b8ffe69bc72df31145646b6eb0c8ffbbcbeb919fe8472f127918a0336dcc7049cdcd0eb514637873b0407fd384b75ae721c57a29c467209c1eabe29349a39d433ea559e3e84e7e73357b75232ee8dd00d8db644ce1c7c715b30f888c309eb9946151f947c6f5eb8400f8a4db259d4ee36b35dc869a2c04826aa2163e16c00a66edcd85d5a73d41a298a81d10a872fa4453f3e2d7a2b177256ff67a17a7a92ff2e40681a0dc9d7e04971834d849b37000731c423c4977eb298c6024d64468c3d647b9fcb725dd1b4e914b8919b9726e8bb14a2e3455d7026ba84e4be0c1e0699cff6f2080c1f288df72ccd352a68166d38b2fc837bc01f4ed832d32fbe95e75a2cde452b8d657a4a6cdb02135cd15875ee616fcd9031f569e1c4c19c4b35aad8a98395bf32d597624f565835bcd870bbd94f23dec86f2d5972f43037403ad863310e3bd6288ba90c0a85925be96411518af4fc37e58df74f44fe38d30dfb5194ecab3b024fed7d43d6fa3652cf732376c865531d65d2a11970b14e6dea46e1c4f0244c625551c4be2aaadbabc87fe041f90770afaecacabb7c7c5194d4604b2e77a9b0a5167565e60fcb15dfb2e72ebff53276c3dc8f864693eb952fe65ab65473abf4d0c8f30ba67a9eb99feb5828a2b5b1add6ef8221d5cd079e1c84282e6cd55b054e6cfe2f8da6d6e96caba30d9b96fc63153bf8d8dc4b59b7c593a122e0a5ff3cb823c14a84ec483d9f62680aca8e46cc29756cace5e187397c083ce8b9539ae96b1744504431d8156d5b9c4923125298bed4528ac21ea06c43e0e6245f3a22d0d568d279be5b5b73103bcf4fca4e54800f2e1800d049fc138b040dfcb0f9e2cc207e491555141fdce1c62c564da653e05099928a1db15b18abf73da03cd8a07b17524d4ea972802e091b7f3e4b1a735a187d0048441363b3ed307d8b5c2399a5b446a9bfcb8dd1fc09b5e51461944b239bb7419ec1311a3f557899cd718b4f686687ed18b574d01ebd42e45925e29dca1294a6b2795182f8ccd60c5954b88a681c4a58514b93f8e9de23fad223c6532139ab508f903ec6afac076b7201933bcc1110219d1919623148403a8579422a4e94cab2321c5909658213d0fa607cf4fa21413daab4bc746427b6091fa5848491d280a2cb159c4eadc9f0a5f38bbdbfb19987816f61b62e9bb1f17730e40f1ecd751c3151017be3587336c4950aecc9c9635d69143f4184629ad8bd4ab673b65fef3415e341a66008fed14e6a4d19680e02731a3c7be10a80c597683981841532f7ef6ba385c6d87dd8b140ec377cfb8cbaa87b04644a95272001ee52057ba344478a15f9c507727440b7c1612dbf06ed4a323c5d3fedf2e37c88647c580746ca8bb0281f354ad54cc47d393eac67cf335f531044af954dcd2d5d35017c590878295e228cd638a0e69908ad01f2099d0764648ec6194e9538aded703ee665e5fe3661294d9850372c3f9dcf4e949c17da0f96dd265cd294b2cecab08580018fcf2bd3b5d95be330557e5da851ed909c00a48e4f664cb0c1f15e74988fc3fb3dbe04c8c07732e7a79fc7aa1e369887ef04754dac22cf4fad82c1d8733142cbd9b061b7c99d4b894309325540ff3b8f632f2c4ad1b35635e104001f8012a2ca5a071580dd936cf48861bcd63f24f5c26808c920e4d5fd60c3cea77fd0f30584cb206f82afb6db74ac68b733d0cafb19cbdbdd3c664911839235db91ca91e894335ab08f8b2620204f79d27b348c2dfde0cfa87fc0bbeed87a1f9cdea4c6bc0beadcffae862685d2dd7d51d906c9ef4dc9c2fadea44ba9aabbe71b7e70d89935b1dfac279f2dcb213c6bc0482c70622de51537e3d21e3c4397121603e45aa86d62b37985fce31a33aa5bf0094d4be971464840897628b9c8bb86af8081958bad735cee075a1c29abc0d5c58c7f56480feed5cd8b5565c1e3b5cd8d66c11eafe414e92df8d7e1265636c6b1a90617f23aef0a6eb78ae8e85fabd54382e892f1f883429eea0886c6b9db29aef9bcc5fba5660f9c676b9ad41771a112447919409cb2f2b1d188d6dd8df48dd7aa1c6ea182eeaf439143bf1f4c1e075b80810cb35ef6e9fe0539d90edc4f7b648df656c54fe6b5f85c5549a9bd4bd794734875db7ff35d9fae6eeb67bbbaf2dadd781502b2548dded16ee5be4143e6e5964aeff6b81d23fdd48fddfd695e4b21d6deb479200041f72ef56c5dcc97060ecfc9222d7c749320794251685eee104a688e8cda5fdf5c89c4692284e584b8312c9ec0b3fa5bdf9af84e45c9fbe67aab38ae412e3583c93dc7518c14c7ab089a17ca4802b5288a69539cae747b303447710605203e97f5147842b6546919509c3a3e5e5e517948e900141e2799f56fe7bc0ef60bb71998d919aa9b28d33610c3948fef0a9ebf0676fc84e6a619bab47d189f63089939b7767192eb0363ada54fd3a1bc058f5c70a8a160ea30c36e45b0975175d478f8e0a26a5b1fe3b3f5315deb445d2f16b338de219134926d4bf6a578279658cb25f31cc889ce6a61a30c5546481821bb83650a837296a3cce0bb78b267af3b6151ec130e4c66b5650f4ac244b599f13d6b6eaea6c3dad0791a17343e95a2ccff3df82141a8e5683c68e8325c4a58a8a05973cacc5e83e9d87b551c30490d6e3d669591b6c622596d2cf253f807c0c410c4f7984170b8619217103e400ccd835aa34f69f29e2fafba0561e7416e581c2eef95c62c56ef5c9a54b216e84de0d93591cf83eaf43ee222f26409915492234d042563ebe84c1b09a1b057bdb8b8f7aae25a7e90d5b10cd76ba46d6d83bdfb782804067d981762143db46d98b0c3a4c0166b669362b7c090799cf50da6f2dfa62966955357f296da2eec6022f7b9653bf578c4ea6abd023d54d1f145be48c93f082b4760e0f232d51cdb96e9ed7740ccebb212b816402de790c6ebd902fee74e05872191c9c94e128aaf45fea24d036794a7e49adfe3b485274e35ba0c316f7c48cfc3f4ef8e1381d7727f1fa2d792ef3cddcb5c621b93835fa35f0b8e2a683f45cac7f518c3e38c3784c598aa15379beed9bfd661ea3a9ae287585f2743d42126a88ed7eb0b7d1c2f5aa9420d1f6ebf6f2ffa50de657af1c0979e3a8317d8ecac3bb4b02fdd784249eaea3adfa9a91dd66e2f821e75c7b57d7a746e6b3fc7f0fef23f970be6660b0533a55f6a45dc92c773ce79f6b92df1627ba099e448442ec97eca851d60fcd41f136da8bf0855769454a399afc1402e1105b37adb9e4e730d3c3b75d81fee11b284cca5bdae1449b210efad87ed96a3f2675b65654e0d77c47f9a0375fb7e2b92b3b6c4f38aa16515c30762895ad3ed1444525e4fe251013b1bbfd824ab84f3c1fd1d68627a8ae17b216a294389306aa97635295682a24f7761e470536658161efb8d99c6bedaa04811c59967e7fdbf738df47b68f582b33748a147180ab0487f5803051d095d3defc15960fbd69176f6b8da9a0909c04405f06c9dce9438ab03d9f7b982596a31ec47c27b34c1a068d036d350ebf0df6534f3e78c8f45663e87ada74ad4fbf4b08d7de21c1cc55b1312d4cc115e44c08babcfab10ba323b5ec59f7dd6f78d8dc6a8e43ef067f69281116f7d48f7d75a47c2fb7504f41faa885f29310932114ecbffbaaa504f7f2d7419954f505ba51c69a9dad589b35ceb520412bc2826ad91da97492964bec284e9d7d59233ce38a0611086d53b08b473f2b2924fc4b572054b0acc3f69c2aa6465274d48fd39fc7581ba8a800729cc246b32f9571e08dd00c218d1d2ba182b6a61e6baea523746a8ff4c1e31ace34b9ac42e66db9e2e0a32f173619bb7f6506eb994aef90cf02c7fbf8a8605d1afa044b46fc29725e4f93f13c9091dd7a779d69fb4f14399b3d06483db6369d9d07cc3317c844c1d67ba886990c0dfdb298d6fe1dab12b95969fd49e8f96840ca8ab5c36d6a911889c07e7d406adcf25b6bf4b51b204d638e622fbd36543f4ed57da941ec206445687354a21bc1734bdd63f5d88c6d85a6ccb090217a0c0122e3342458d44d1106bf7f71f3119467a208ff5c3f81144acbd8c9415088e94258bcbcfe5f0adea7127070049b8d3eb25f66958caba8b6525a11e4ee666f134294d4deab0a60f460e8fc17b46d80d301d0f784270d2bc8618e642109971a3dc3db2cc92dede4386f3858c3522392569f8952a2581b35586f08b08d617a58efbbefa26d202082cce328b420fdf9598168519996c0b700cfeb8b16e7d2699f9c4867e43fdd70a5273b66ee436545f9171ba4c06472e814a9028df95f59c628b11d36bf9a4db346fa0bd2a26c510015c87b8d63d7b9ac112c921f9a5859001adac4a7eea03b4271eaed9213d8bbbb3ee1f759c130f71d07530329242fff914c1b1bcd275c67223e166b40be28b2082b78d1c912cb3a84c7f13019000c120b7332bfd48bab1126f44dc532975042160632c96e6eeaae70dd0e1894f6f71df64aa86239c88be0dc5c82f13b8b4521784ddc5ae6baa1afc2e71404b293918c5b2362d88bb48fbe9fc6912206c4ec41db10d103457fd2e4547ec3c920d4183b895eb0582902d8960cb4a2db3f2380bcff0970170e08e6865e7ce7e85a56ba11d2b1ed498e123f06e99c8cda8f9878d044b854a9494cdcb1321cfaae5389881ada6c3c95a9cbb6cbea0b89b38db1648bbd4453911f4e51a144a6a2c67a7f83b845cd78343bfa38c33c9b11dff139ace37a50ba92246803de1971382e11c79eafd3e0fca1474836e8d661e794a68a1e810508e0c01fea6c58421b5f265dc55baaa878435d125ac1eb5c98a5ad11950ea5873bd0c76651b819e73022e5f7515ea2c725daf72512b0ddc9ba527ff4ed31d2fadea8b905b0c1f3e2056c4a57f891963279da75cc5963493bfd3bc0006233e6869983e2555913e2c51b5df96eb09f7eda98616cd295d0c697b4f6c3869a0ea8d231af20dc314a050818a91c13b861b2c8ac9558fc2de78d79bdac576a7a89c749236ada5981014597174831167c150819d250e38f68135d48048466e9d52c5619fe48ed612c7d6510a43ec0c5bd82d7972a4ae46537b2619e234e68f6464bcc2741a41bef7c054333583ab3128c42a761387d1ee21aa2b7fe6ff059bc3e1358896c664eedb700d15bc1cc5a0dc4fa371a5772e0fbd9401383cc01cced80b76aebcd178bb5a42d4ce692cdf6ebc5dc6c490a6d548263f5caec7b6a6c13e3125babe20b1853850f59a1b68ee50fd352b5dfc1d775cfcecf3fce374f965f3178d317eebb8de0ae746557a91708593227bc9f2e15ee37e9e8692961896d394aaa55338b929529a8039466009ef4bbab930ed5fdcb2635119380c1262223e4af5e3fef913b49fcc32bff04f5169e261fe147744dd577bbfd4d3451e57a33d9e4364bd754b144fe86dc3c9c2cc1b90c696ff208e3124db7971d1b1c1542793d087028797879f60835e30da08054156df767eff73cbfd780e8cdfa3d9fb6d1b513760b7ff83a3e8df022f7f6c8c8fb2febfdf5fbb780457bf4563c9954cbd1f54d1e304c6dc308f6cebaba735b639e762ad58638e7a1e464ff8a8f3042b7c91d0a2af06d550127d71f1f4cd377e5eea85b7e88a2e7bb17b0bf397c59c4a3fa1ed9c2de154b41357cd31579db5da975ea02bf58328b161a1450a662de9c38a29e0bb2e9735c2ae6d387388894f30d594402405e6142df2725d84229ba5119fc7f7ebd6422b49e165ed62976035ed51c80ac6f68a3291f3c4063a8558153a86290a58f11fe3c6d089aeabdb41db070104661139f0d4a93501bc72ca84b1266bb2d55447d9281f8ff0a5eabef18787aba00aece081c4c8b0f54c2951dd9f144828591e1a1ee80286e74d7e6dd41cc4ef192f272d6d9258cf90b3743c020b2d89b0e2ec61bb5930bb891ae4322f9c0fb853a2da5efc3e04929ec0e3d5c5c27139479e85d2850b686642e04ca5e7ef269d0428423398379f00310d782373d9731e538ba2e883571d287a25db0f07d6c503ddda52601f5fbad8ba002ac2bf5675d73fce3b6ef4298f3b598992784a4a80963078ee712772bf5fa325284a82f4895247fa52c5deb54449b02e6a20047e36505ed48275d08232d88a0eeb69d78dbfbd358e20f33abda8ecb7b770fc4d10fd75cd4ccf6528ce9a6f3ba9397c526dbc2591d10ac228891c4ac5e6dff2e0ed9ba7d71fc76b18d54eca05a03fd8cb450828c06afca5c0acdccbe50548cf1ec583b10d45adc3841e9755f79b076f9482e732043e3299baaa6fbb75d3a650e7e5ba2ad3a8e747882344317e7fe8282614f1053b80b266a4829f0262726c96b0420f90a1f4e7063d4fdc28cee59d9b8449f9724909694f460f0fca33df9ac2675e6cee9ca2b328d70cd270177a95a17b5d4e810fce14dbbddb023937a1b2da4181e4f91a953cdc607d5fdd1cbc8f9389e60c3e346f94849b57ebdb54276f5b21aa3d8489c5d36039076227a54b8d0a49e6807f07f00157dffe361bfe27885718c675c2f5f2f4b82ebf29ed456880926266fc7f79033247537af3d580289742349108a1b1a1299aa934e0b1bf3ad28d0c5ebacdf4f3d5f36c35baac93ca4f1d47a02f068267489ad5ff5077fe16560d8973fad9bf6bd119824496d9872a35113478af9a446e864aa979fb369197acc2d069aec054a0f97bcc638b409850d498ed699808f6dcc9e1eba4ad1f41e9eb996e8be61f5405973d30167638bd56b4ae53439935a33426d1749d965219cbee4ccdb178717ce90433c28510d8ff40612c6a3b553974f6a86bba6c9770dc5e14a835ecf3c8b390cd841458918066a6945f7bea0a557358dd97aa24a41425a81fa52f00db245cbc9d42a3d109765c3af1f9d41a8ade721862d55bc0f1f0683c68082c9a1c68de1631275a11c4208457fbc5145597a3d7242867a44600c9f941fa37def53f9b2151a1cd49299f1357e5c98d3d75a6af66274b666d60c2205609e961b62a1dc54bd301be6303ae03aa49710ba83486a7faa252979e83687f9959d80356e287e9a00d01a4d322ff6d1650a99d089d90008e17621c7e24957e2c085406d0098310615f73e1104bd73988ea3b60a77033812f3b92405f9984fd15ee82a4247b39ef8927a75b4ccf541c7c8a1b31f505939d3098870cd1c15d36ca2cea934b0e270f0d6a2f5a0ef9fc5b0a111bcc0b0b016d3d59f1ab26d88344c8776ae7829f10a47c1a146f44482c74d51cecf164d06a6552486782dc132b9103ee0cf6c89a6723ac73a1cfee678d473a7aa0b05a977614e1e679cbc02a54822be0d2c452abc0e9664c246f12aa3641dc666a30a9e878369f965130e184914e25a0a264d79bd6c27124176d10c959e546da90a3a7c9bea7973cda18a9d55b23436d8564dd9dc6e82c930516bdeb9c9b605f94f677ec488b4cb46f94f6f92d672b0c99647f94b71fa1ab3f631e00ec1a2d72cc438c9adb29f4a98073079a2281ea20bf83c1c6b8848e6cd9ddd594a121b6e43f96f1fa0dab25e46dfcf6345e67a889108b8ea9531912fca55b7688a771e1bc7356c9288a02982d1b547ace174009c08e59dedcf1a81c5b415702ce84409db3c7064f9c5919a8357e78475807ff12909f4ed348132c37fafed3ebe022da1a7a9b5d19b6f1039a5bebb00cdcf3bb72ceddfcad7c309be3d3e74c2c4248182ea1829f7051b7d14d7e9e1616f9461de01b1631ee283350d5fcbbb63f4aa1e66e51b85979f836bac5eda55c981b97ad16e7f6858a638404bdbbbe8f20ec702af66e90a11691f452c48efa68d7d8136e569eb657348b24fc95a207a7f6ae14b056089539917b38c2c52252b4465550dfe2ecd90773a0cf26e22ea598eb9f05605b19e85e3329050baba2889843395620f3c45f1e4c6e1749f898573bbf0db009d099affaf9b452e786f1822fb9fe318f3ee24ff0d3413ff328697306fb8869d0cdff23e15034fb4aa409c8d8187904aaf3db1eb0ff03794b05831c0b741c0ff3eb1d519208814aafc45a99fd4a33436ed7bcb357d5f615889f0ce929b423c9f8282a061ea81a0c943cb0034354e5300e27e088bedee396f2c41bf98941483ef4343770a184224ae0914c3ca69a06a907944cc78783c3f36521fd876e5468d17a2b1d149d430ca3aa8ad73da25b890dc02ab71acdfe12ab71ca389528b11b3672c77c4eb89a839551cb148c06dbeb197414b0364f86e6d01c9eeaadc68ba74a0790c5fb6a0fe5e76da8c9554fe0313423cdbf1ef26ae2d1a7926f5f685783b8345723e600903ce47c0390eb3ea39c112eb5a9e6a23114d5d5a8adc6d28f5140b9d468b917cc9ec718f5f36298c696a65ca14eb1912d3bec4c59835cafaf2611db0554eaa56f47267fe358525f8b2a44942fb9a1ed2cccd3db306ed7a7dcde3107020c39aa260b1414222b7f6b8744ec9273153ec390ccee0724737eebc2dc4c72105a4a1e60423c1add0ed7d9edb59394c74fa0809ccda4bbb3c23ee58e43da5e15f582e6df872dc19d6cbb20e80657991b99b06b0e1bda4dfcae5801f550b1f07cbad14572d6fa5cfed8e6520473fad5b2e5b119d7e422ff3c04a29bd3c150c962d713e7c08475bdc7ddfec47e30314de10b69f98762de6270060f530dd92cc0b832a3709e057859ed94990649dda76a0cb3bc7130235e7a44ed782b8f3fe79cdd224cdc0e10929446dcf441b20f35fb094c949d67bd67b03c29c64d863c361017bfad1c3498573a8872e076420245717a5a5a50bae61d44bbe7203676021057d82fd4a44a1fbe83bf1adec9f018922d212fb97af051bff04719cb5d1057fd0fecc34425673570dbe5d37eebf85f769a376c77aa41370c5bc1ba01d016125d70f097657232d80fb1a169cf1c32fbb128d6e7036081f318e6fefd428eca6cc641558640fc9eeea3fc59fc3a0268ba5f4f83e22c0061cf576e0a003500f30c2f4ee6393e9b8df3b8eeda046ee42d29a0945410dca5ec7d479ec22415f2f10f0d4fd241db381dcfdb1f34f22de45dd937afc204dec2127432fdcd9e929af179c0eccbc569e1219176da519a943ffbacc52745c931ec570e4b11a20b98ffb20484d65ecdc46c132548fb449aafbec524d6ddba03d1f113200b67293672b86d829d53147710ccb96b745ad30dfa5d498c61629e63f5157703d0a2b74d21395e7540d1c1a79ce0bdfdcdfeb48ce7d0011528227b25ca88a77b138d9a51a84249a0d26a57c7c9641411807a4592590992223eed37860b0e143d73d12ee4241a4be69aa2877ee59cb35a00f08ea310bce73fb469f31a5555a8f117b0a91d31667b6b89a6389410c9248fe5d4eec9a6f21d4c04d11e42fae5bc956d6570d51396fdcb30789b76fbb3610ba1247893ccaedf3c7c1e29f683d329286d884f62be6daa367228bb8a006434b2be25e3a9b4c1da28683554125bf4184ce0eae040a4d9e43434dc330875b599d17447115f85c5fca3e900f80c0bd93f63858a837026948fca03467382d3405d8406242068a1d23691bc1cb44f275f7f851a9c970d96a0a165da4576dcaad9f2385217365c1744d1341dad4526a2b7603f1ad09d6dacff904186656bfbc0cb3fb0e07e6010e32e9ac830eee5d18570626f8cc96baf4048323cf16c407b3249fab638d82faba8445ea9aed391bba17926eafc81500c56b9be5fb2f44a17a5378494983e14251a85782031c1c88f1e9241c884bd2e415cacf414b96721a5d2479a25aca48f4442777dedf1c1df24200323bb8930d360047c33190c611104df6f3078f5eaf72e81e82d890bf3b3b9e5f38b64e102a4fca104b716024e37fed531041533de7da1e6c9c1bdcba123d30749295bd55712fcd8e9e51b8d8db40ab26656c9299deb0b09baef24bdd427f68c5d123972a9629a494dde32488581ae8f0ec50b678c62ff6e55b6786c041b7a2f3f71575a3169163ca5e73d2fdb48b48b1ef760e0c494694ed2a34e148a878fcb99ac40e1f58f128b911dd6d88e8dc8e139302eba703ac8f3c68075bde57967c0c8a1886d63119922a93941e9bf87d8c98c755cbe9c9a38296e83d7ac720c447fd6b305be79a487c166aa6a8dbaf3a60409fedbb1bccab1c9449c819333452218b74397ca47e8b55f7b8b8e321ea5405cb7b90ab2284c3a0fbde6470209eaedc344d887426318375396854eb7a6d75d6d4213bd8ae0926d8c905068c242198673b8e1cd1698754b677c819e17a903bb09c86fafdf1182620707b805d43e2dfa61d8118c4319730a8b216d7f47fb9b1d07e7a8f88fd9933dae65ec590458f5528682f783388d952bbd54c961b7793080dddebf9cb6a7c883ba65e1f7bc4b8b09257e1b228d58889f8f15911e0ce517aa2a1a3f860ac8725f86d4e5eb4b7c0e13bdbb8aec862765d46ce5c9b771c21c0c1b5484580d91c8bcf4210a0cd0ccfb0fee0681fbf959f2b589760e0a4ee63111f03f84ee564163a040ec97a21c9218d714a3e7a0283d778dc56a9209fe64e25e31cbe6608679a995875a4a6fc345e02695ccb4a69897ae946f8be97644955d1d2af2b20e6e23eb496e544eec1dd5647962719c3079930acf79761197bc23981c20f6d0978b37e12cf6e9800de5c814c18ce38fd8090de24c3b3bbcb46a89263855ff9adc5e83c86fa8f49e552d02dfbed7eb57d2a0050d0465632c28b5d724a66519982283f9c8b1d84c1afccea3ba81e8b434aec89fa5ea65ea6e5ae33a068f232bd164b2f1cc3ace7495e50cd9ceea1849e9e8198f3a57e88228169235fab74fa9827d0ac0363ff32a474d2115f462fafc13f9711fb556c2b752ac9e4307d92350f163bdcfe2f1bf170a04df55d6c400224516fc86a35d9686f87d26682539d31f407888ab3e98c5b147c53dd8bd6fc615699ddd5b5bf468dabf094ebea4f04130a1b94c6bded75121d7a99ca596fc82fd4e4c8434e5bcf65130ef0ef77419215cf116458a9f2b1c7e6f9cdcfe2aca6b63c12f4a8b15eea0a049d208b083b44d25b006fd53d820b7a4137ea38cd4df8c0d31b70a52f695a28ea04de174c90427d9b58a874d1376328a55a89b80956bf5e2fae73cad04137b2153634ccb61912936373d7612199037851e473dc5a8dadcb448e9fb84005a63f30329dddf7a901624d40d9d103467c98a9f6b5d845c84bd7924191a93843b42db0d921d8b2f0e79d6b39f2b6b4ffd4245330ad8462d6c3631ed01a2270e204e2ba011891f99242bb6c951f7fd0ac7484f035685dc3a81316736603f7d290361461247600a5c65813e09737bd44ca018efc5a945b8bc11e8a9a8233c2d571503d41facdf778e83cb8c43b9ae40bf332cd29424a0271b2e8544551f4cc84154b989848b01c0b457209151f4815c4bf03d1cdfbd1aca027b201c8017573d68dc8bafd75447ec4e07b42351a1918d904cd93b0ad78fa7c9e856aa163c630b5f93faf2265b8431e4dee19bdb2b7cbf4d53862956e7d7d4fccc3cde693c3253296252efa138c7aa103288ef365f2f887129657c1d8d11b712d06889ac7eb7fa4579a34b02568ce597ca183724964293036a4aab2a9b9c9b060fd6ef204f3631ec0eed7bf730bae44ad7f15f9a1bf7a64fd8c54aa0124acba0d5c514800a47421b5f0c24f389bffdcc06603654f1bbc70f9309ec5eb1216e2daf25d251a5bd5f849d67c7a1d46983a1388e8a3cfbb9a7c9c45f42b44f5788873b81767697502cbfd31a50502e0cc55508b20a47d41b534e6afa20a09dcdfc2aa263c916d1fcb94b7e10cb1793e0b8eafd60af6454471025c8082fa93e64d569ac27efba282891b7de2393ea2971e8cf8598cc6e09d52d5116dc2e022f83579c2c1dccaa219921232a646c56a1a8a0b56f93409b8a08c9f9efec12bde5b97309042d43bcacee053bd9e148c52c4c5aeba208dd898fdb0fa6e3d4615658eb60593255331b818fc0163beae0adc33ff20be415262cf8e2ad6e9c239c15bd4ffabfb1767723f2c1499cf084d2e89b9fc99f8b691b86a9c5f63498f28b692aabcceaa3e849738b1e98bfd2ef32bc4ffb7609b3ae0220d51a7d302a279b4003f3f4b144219083603c7abfa201860816e379c81d31208942766ed779c45f1e207c456a9a63c4eb504075e4be8ef33a81c1aaadbb2f9d5d2765d27031858048c71d9341befe21ad7c6bc913425d68096bd82398c5ff300df9670c00ecd4dcdd62e8d45f18251340606c208c22cb3ca3f6127c698f07db8974c3f5ec7f573e1a3f484f2103376d474ee47346580b7ee5cf691fabb4e7180cf42a1ebe7c186be0cace99bde0407e5f1535e57e213514237e9fbba100930f553aebeafedaca065d5b56b44a2dcb54cc2ccd91e6cded00d33c895aa606c7efacf7b5bbceb4bb5476a9394d28b4bde039bf02f1e8dade23e402bf5230dd352124f0b3565f8787068f353da68519a014c4dac64384f266a0834e27b68a0257ed858a67404338e7066362572b16e2672154530c1b153c796465bf07815d79ba119f2868dbf6fcedc1f4214230008bbac5ca3b8f9b89a7f66d7ba47a390810f7ea195f9c37c53ee44786bc0b5ab7528fea27d588b0b4c1cb073c9008d8a0f02a42947199414292d76b281a76324f09527e151c7bf0ddd4446fb9fcbfbdcdb67672df65e3d4400b3d815111f94761c0f1a2aca592ab41ffc82ef9b3edfc611676a3f308d1a08a8a07e8f1b02c6cefcdd8ad21cd7504727a360a4a821b5a47f4ac2762d47acd5e04d968c2d4dc5c2a5c5f8e96f26e86a39854692bb3b26c5001fb2e5d9c1ff3cfc9ae24e8a6301cd7fd055124f9df013c42e7c44e975ae1619585cc09b89b892dd2036e7811801f73a2d71fe9fbb81241bccf113ce6481fc18e029ceb566e220b2e4ddc87dc1020063a55a9d504ee7840aa229c7d584d5b763e1c398884c4ca9860b0d74e5c66d72bf35593313b586473d54642f0f2ad0dbdbb4bc13f542cece62f28b20a46fd8f373d0d0c1835a943899107dd8cf875cada8674444b7d3e119cf89412b36ca548d5c0d48ed7f7351c6f7017c58b2c09c0f6a97096bac790d548d776f112ba17f540620b50ecf3d43be5d15fe410d87370fee7ecb92a3e4c8837c22c4e866116c99cab7815d3b27533afdbee453191ce4adae08655e5eb970d27765d3e5d7d5e4d669a6d1e86eb031cba0ce7d3aeb5c460362f32054d4bd17fa279e5bfb7af73ae4c3712bcd13a462b4702149bf6b7216ffdc179c7ae9767ae159bbb19977823ea638ddbc0993dc003d8ef8986b7fc8f4402aca3bc24a6f27c72943124376a816bd8605ff6cb6bbf7ae73f128a5e436b4d1f4131fb3a522b7f27d4b9a490c072740908505039afd1ece55dc1cd314772c7c818b7469aa1e30a948d415eedbc195a68dd12a243fce55405b81af4371c077b0a1e4a806c772174d9f5adc8f7a4c26c8b79821125a99d0c402cda89974619cb1297cd0c2e9f562ec366634f92f307a245f99f3b8cf37f0800a7299548d6679c3f8f74d2c2575819e8ea4fa9e5a2c61903fd2d3c03ad3b096fb7ea41d50dae45875b9822d1033faf430f3dd0129f58766e0b48690a9977a7a524256611032c5710c4c33d740f52fd32a958dbb2b434f44775cc3e3136213e8b0ada8e758a01ee08c92c91b6811a9b040364ef3976295117f1c4cf706ac0f97fce21344a8d58e9e81d4572d275bb1bea95a40c72b03fd31707de4580c8a65ffc3ce7e687bb5640cba4f3b53071b570c095f3968f11d9d02c2aaf435d311001d3e6ac8c139f8a95641ac23c140ac5a606ee7df854caa1ad248531ebc4f8d8acd1bfaa2ea40e25e428347dae8701304096009f954dfd69a9582640f932991d22d82a5b63996058d3b5bef8f3f1f13127da5a85c159a0594c0cc01a6a3af324c1cd3092d08c4552bf615a3d5ac5e97098131c6960273e240fee272540200c023bb2a97d592b0a046262dc2e7e508f0601b968a379849572ae2d3a13fa052f95376e4ffa2c2ccf43a5940f355df9f7959783df84b372c0bdff347c259d725753b22874d69dddcdc7275557e4138d9df9d2305f562a05a7f35f69d941626173f622c5607302d021f0bb866716ad994738744dd7995bdcb26b5e7f4071abe5b32d33e90e554393b868f3c865d9a851faf4157d241bb8312b5e761a47165b9e986c52d1aaa257e9414e137907933eb80930590d9a4c5b4dde8aa4f81e56a44635a5cd4631e454d3a8528199147242025220fa7e56a646a544a312388fe6682097285e1a4a4bfa627ddaa111af548da3922832a2922cce8b1b666603887a45eff5492afcedabfbe9ab336f8c7f1785b0fee69cbfcf155a437e82397c33dc70f5f94f234d93f561baec5edb3ead4cd5729d59d07d02f044886375470a3e4e32d76d86ca056207447258e588a3de8605cb821d81db28a534aa0088912f8c98c0084d5e4b6acbb1b01c3e94dca425091991605579fca864724120bd53fdce487c40007fc4bb3b9d033e4052ab5ca05816b9c8a62a1bd3d88c2ab3dfd48936315b4eff0e4df0b345b06a55e531cf7244e0d29dc85e9a20e55688770c4192d030be9fccd4354e18821e669c9f30fd1f0cede965684d34b5d770e23b7d6930c5e6d34d1fc1f1dec811915c122049fa137f57108de7b03d077bdb2562ea61bbd2f2fd79d890e73ad0b8adf521a2f4143ee688aead55dc922838b239a33b519dfa5aea5d638198a3a5f12f2fbc4d76fb64570ccfa02cc6b80603f52e61fe104504feea9ffac4cab5c6a6fd0907210081524b4e0dcdff858c5eb556427ea8182ca65181d9f8bee3dc5126167c7066aa3925a74ba691bfb95a10c35674047ae34eeeab05e87f1dc4c614d0221b620865439bc32f6328184836aa9497763129f77a18162215b163866779ab1a474e39a055cbe39690640e89551de0f780d88bd6777b84c15638e0474b19815ec593a732b5731dbeaa7b173c9f5c2abbec91d006565240e6a1673d9a71a77cae70b0a03f7da3d726e2744ffd6f104f44cf62362f8db35e9a517cf5d7b28159b1b8aa0fbedf02ee5cfb7da959d8251f6b1ee5099606e5c03d7fa0c73a2c51954deeea44e579cac279dd8c2848da2694b954e2622ef310245b87097335a195630985ac0c81f8ab7461997439b38f210e32a07c187741510ba48146e6c1a3b7aa1b906add1f149c6bef2835f7375b194ad8681e82951624f9cc7bd3d9d84d90b0f77fd52f6eea0c40d080c1c5edb48fd36231444d692015c2c9a0e5cb434ac20011442c2a388238e346e1340a26c26ca4f67862a3008472cf2ecd1256c2baf740180a11f260ac32aae61484320ec6b6c7f4c4c86a2f7581b4964d113797c3d15c8f62547fb43068c0ca7ff14b6f587c1143df0b234e5b68f41f04f2b364d6ed50cdbda0d3b167b2e062e301c85f4985baf4043ad93cee4c62622faa4e069dbd1630037a4b37b5e1994a69c1af4b033e1fa3e94ba3c30cf82b6447d775b201ea93f425d89422de4bf1f8717b7939051a6d8097d5f42fd8b8f5582cd33c5d8ba83ff7d443b34e4a06b73c6c8d7551dce14a3eeb5bb9a145adec76468cd793fdfac19d89021d32696a76cf2087d45c4868736e4cdab89e95b181da16e0761720dc75978e1be7d7a2547efcb0db07f3905df0e576e8bbb2b01afbd8fc9626c9724ae394dde3fa62b28cd9d08b08d9e7063d72dc3beaf92ed7d7b2ab73290c32cbfb59fd330efb6f724600672b59361fabd3fb9203f8a6b2551d5543076b52cd6de9b99e90896cb6b3f59e71efa890b813101fe6be1b6daaed9be20f82665eb25ea017d801c832a4ca743e5c6523b0b45f39e28bfcca946e18f98ce6c95e1259a14473ca01e6ff7789af53589e45d86c5c9611d748700ac1e8bb21d1534f797d1529b0e84899ca05dd10c5bd9bddf43bd1a1853eeb754a3a107940bb31741fa89c02287d112f4b7de6db9f46ed27337c945695779979ae1c9ed35e8a442f40e76536e1e5e4eea272bbfc5e5df448979f998bce72f94f71d11c5c3eff16ed73cb4fb645256cf9f55af4482d3f9716ddd1f2ffcea249b37ca62cda26cb4f1a8bcac4f2fbb0e81d587ef22bba78e5bfbba2495cf9dcb7a2955653b9b3c2035881f15566c92a63af09bf1eeda94af6c42ef93f3aebadcaaa004195e998ca09968aaea2f219a8e8d753bece294a34e53f98a2ca4bf99452d463951f5515dd51e51353d18754be72549482caff3c45b59cf2b9404d515bb7590aa42312ed954ba4201a2ee614c7c9288b0310cdb62fae103f6503ebe80f03950e3252690c7059e7b586bcbde1df207fd90b9e3db484a9c01329c678b7813e8bca76d468ace19cca0d939b92ee0693559736385700cd1a66ed21b30c7218553ee7093edcca7130e447de84295060be4ce4999dac4b0e879d43cfb24dda6aef3a57539036c5f40ffe6b5011917b9b623118cf6adf6b9feb80969251642424a93082d835a190235191ca26dd0511c26991b76ee95aded7742635af706b27746ff22c91da5a8841261a606c16a39ed1a3b62fe09a4ff469dc066430df30fbdfb2a9aba32a2e517438f85d6043900fffffadd70f70bfd4da61cdd85e86b8bbbf51f48d8a1cd66714fa4a5788f1be82bda01587bbd905fd28a8e05d77412fe4f460be4bb41b725d80db69ec295505dd6d16e3485e8ee374437b2093c73a9d85fc11eb503de7874fcdcba522aeff3bbc16974edc3e447eae4afd50e8d4dd03e295c5553e467cde15fc5e5854d523c2959b0bfe476a5615fe5cb8a9d03fa2948a8bbe47f60cd5ff4aa8a8d83b622b81fb7e45d48c95ffb610a8df17a134a54cc965ea56cd4e00f30127a6ebb1f8669a241ccec993d447c9511904fa8480188e4965d92f6b3efae98cd5ba76c6c402808d7d286da3bcd0214b95d4cc5b7b9736826a6f26a656cfc71f06f602e1cd32299e25aaadc22e023fe3ff041ca81ff9943dde1696f99c584922da909f38d52be02fd41549f2a75fc4fad5782363b5d542a44c849637f869d4d2c79482e939864197610ba0193f8a0d18d82f9410a0dd56c37ce57992c9d5230ec78e2cea037869f2eb551c61a6d21b6ef5ea7180968a44e1c442d9d05330b9294a7c4385923deb3b49d5f0b18aee20274d279cf8bb4828e95aa330f056c694a04519139385d2118506ca4b098259b31581b83e54d15b8a8f3d64c7b36e3088cf7b14cc096b51d03f225afa8a273fa653a264a14213c969211e312b62d244fb16bb78ced174aa8de15f251ceddb31a01b60be7d03b3c7a66d6886b262acae4aebafba5ca634ca14486c7c2e43a51cd72f749b11ab3c11d308fd8b2be0a6ff655cedd50f570676d693e1f4daa28122e591f7d082e4c3842e5412723fce6d17ff96baf73a1879bacf1360e631c2749c780cec81936704fcfe20100df025df4e925e283e5b130310eb63565c920ba969dc28ff2812e37a095f0adaec4e9fcdc3c3696865d66ad590122e55c40150c2bcfd5aefe6f0065d5bfeacf861e2bbe01a541c04016f2a610a46120e6a564894d84dcce19c9c660a6e18dfb72258742df0bc2c25b70efa8aad88e8c40a7bfa0924e5d00273821eb02bbd9792de053878f57ea7d4921675eab9a5f24859d2a273362231a19b721dc5689c78f44f64777c2af6191ade0b8fc6b5adb97208fe735020d1234e7fbe837bac4087448deb2a7a054a9636d348d95f6f1419b8d978a5a8ac43e099cd83d057675fca08918f4fe9a87d38ece1290d8fc385bb89745843a2ede3d3148d1484f1905ea678efb96e3af584ab878a6d4cf5c8f8501de231fbe55bd289fa63464bd8bf7b9d848bf115975690c61af5b1af05c6277eda75489b70f8d6fdf9d4705d20e1800cab05ae49142dcf8e1e533bd444d7a0aaa2627c9729635d108f533c5d8a7083b204116ebfb93356b715c596bec9e06a54b81b2f8c875e7f8089d8bdcf847e9228bae3a55371e0ab071d9c5ad910290e8832b32c0ebe7ae43091f96533b0548ff72a08df8a17f5da6d29b30b709591e5bfe44cb514b1f1f4d5b3166eebe2f8647dceb6bd8211da664e8eb36e5505e6b8e0eece5413f5f66e370c4f2b0018ca1dd8397d7c10101fee78d4de3ed68a3728877e86062153b8064d436ce07e9a305cc92c018efd655d5f3225a1d7409869c50d67de699229fe6c36fe837b8e716ba653463428b6b395201db6749250762b8688293b1947c082b0096be919770bc1cb94a4f626e74694ac8b40b1b58248d6b81106c6ded3c523973e15362691933b97c2a9dae30af0bc58ba4434027cd047c1d545ef56f843db3e4109da6b3e5e149219540f619cb7ec3e2897e9ca0b31a17850eb499c0b8d054795ae4ca9104433a9060be4dadbd652302f1346f287f7a1146b031a1f73e437c3001fd2da41d3ff21b8416348ac2e83a677ab845ed07423b92ae587fbb4e34d965588f253021365ac5563635db5c005fa940886842c81571d72501fac2845015c3396b26512c4aede92c394ffc04dfe236e75683ee7d09dd710c56b6964a4a38f271c2b4596807fa0bd69ebd631fe03fd133108c530a14e16e0d977b5122a597545d69f3d999f1db9c3c059681c15c066fa317939d1dbf6a2545fbd4255bd81275dd802f58c5d46e18d35979b5cbbd8021ea48fee2a006f6053124eafe2950b04793d6889ca35d86e4e9b5422019ec8521da364648dab8f443a962a6efebc4aed77f48856714bae17fb107b80f3073c932b95b2b25c7034d12c01dcbc43af02ed4b1301717a7aba463c0448d9a079157a280e609a73aff341577f79aef991eba5861d304418ba3e06642b49d7cc82fa8c815be4c5d36c18bab67f7a9e6c1c902cc2dcd0ad7ff956e98a27e12ac51ef4139f339253aaad1c52432919bef0edf1a0084c4a4d1df7515db9df6ceadb5ecc606efb55ac969f4a8a043231cce65a77ea3b2a4fcabf556701122a79bf449731068f0b77b27c474b7d8f58d92823a46e9b876c67d01325629b5c4a7d05976f0270a66cba3d9e7df6e5b0b3bb361b319534c595099bfbbc15a4ae2e3502828b97031caadb9a2571daf56a0c6aec53691d8290237765f435f8e65d176b731d6a88b3d10404faf6f48146f052682a51650ad351c9227800be8ea541570ae229378b4f0167205672aaeb7a65c5524e7890e9de4aa36e4ccbe13c3fd979849e56aee0f07bb2dc46027595d64b49c857d23c54ebc984310585917c299254302b993b9f0a1ff6200d2e9c57a14ed94eaf53b412e12ee4cb3c8ef1037fc6e3e361d0e8ab3f22aa6e222f96cec581c1c4ba53286bc0bb96eac6c6ea6e6de46604cf67e37f4d83d401e88db49c36a2c109986d384a1d7ef15b87a2548a683af713eb1ae30c0fa93a8b490f86efa00e2efe11cc316ba43f3aa514f1a13f861a431fa5ad0319fc6267a144e7c3dfe41c14cf0a3f6c25d0df25aeeb9c5e6e190804bde1b5dea88cab6ce61bc1bd9e1dc5b1d4a6ffb89c431c234b3f1405445aebf8d10be2c21d873526810445502311014eef53cc7b448274da179e123ee070069898c9bcd3e2afba6b485e28eb046ccfbfc65213e64e124c29235ba25056de0f0e0fd4b9c26ee79a2e71cc9321959d01809e7f68880513bb7887fc3b0ff7739641175c27813d4206d89dc408ce203e66f9402ac68d4997042a5f3e3ad054591cc1ae3897e03132c7f74033f8c0d417c144b8cdb0082df3171fa6bddb2e1531c200f268a8903cb6431cd16412322da13d26d6bfcec65b2899d81c24659a761a20513b560eb8fb358fff093535cf8190002a5ebd21de26489c0c8dd91f93ca45dd249a5b853546f51d0627a0cdc8cd0385c3563a022458e2103da0f3ec15f1be54e08eddc6e2284daf940f903789e26ca933e849fc664eb78db71ebc4cec61f6b1cc542b96cb63dbde8a0926f34e274e340d8efa588bb257dc3fe6170fd671212db8cbf4f5309423c7379b2cf27fdc608696b9b78918d1e4d4f14818232b8b2779f3cf2fb086539b9383a29ced8c5953a15132c4a3c03933b8425c8e0e9de7068213dba739a84a72f8b2d35c8de051ec27686c7b3ec6a9aa1106018dc30de2596f18c9cb5b396c93f6afe0bf3071ea060252479cfcb153ae9c3aa35782ebfd27e764859f656ffe8438cb782f19d338c1a3e24cd9a38ba7f174c05c529b570211921c4acea5200853a2581dc777b3f5c51b9897a26b8fdbed73c969b883aebb423e85d39de9682232afb4d6f8080496d47cbf5a9c51379c66977942af7de518fe5749ceed9142fcc757213d70e592588e9831831aef713cb5e3d8e38f5931a723393c0d2c5b23a740931ca8c4e7aa8815414152450878a4386a47f086e48465541109704c24c53fb16c0b636a8d7cca02dca4067a5d8dd45963fd674faaf8eb427ae0590cd6ca8b6bee01b02229eded87d6594c02c41246129c0826d7e1e40941add5fda622a82578686e2b60e5a5b51b0a8d489fca3ba41593e26db486cb968324f2bbe50cae801d43537b51d5af1166ff0cb194ffbd5a260dc78c0b371ee9b8430302a179a60def4bc335d89345b93d9a846a31056a18df8d17232067186bfbebe7b11c54ed5e88f7ca1510ccd7469857ed2d988514cc82dd86996470238c3b5b2c8249680c3b517c7563e912cf8616e68b81ae4c80e81db0849d10b99d21968c03904acbcdffbb6e816fcda547f03f7c09bb3104be83925295b9c63e912b4122c10ef98504cdc3af305f5696a998417dd08cf791c7c2ba5ac652b60caf3b9d6c34366a0ea46cf066cbd01bf9bbd5226d338c62c92debc4087de6215bfedd0c3b535a58c88861b2c558573f6f39a91685ddaf49641439972a34417c8d8469433cac1b90281066884932741047756203e3fc90478480f7f98a2412d7c4e9ee7ba0d909454688bbba8e23ad9bae28beb470fbd3d73e6454f1a5ad96b7c8e75c49cda02f5a49cfccc726c93eaf96e026535b9d165f3422517ab0275941e00b63272585111664a9ef694aa06304518baf3ea2fd7f5758b13aa35a520b16d3db1c51e8f577814a0073af33e98d64667c795a08020c556852e57afd11222accd7b2f5e74eac0789e9cd44faee0220d9871007050478f791365270d2be3468d97341b3ad76f05cdc9d8469c072403a44c7054147aed88f0c9989f7aca3178908b3cbe842e8c8cd5849cbfff04d7ba4d091d9e8c60b3705d861e1a59251226881587cf0ad8c8decdb1248e65a8389b0a057f2afc1881287755ac409b3c2bc022ad5928c909c458ab7b2898a8097e5e1e62c5fbfa8cc3f226ebb9c43de0dac84b7cb917ea8babd1104fdfffb32008cec89bb5048eeee58a607bc816944fc0c39d8456aa036db79517a09c402a698fdc796f658ece7864ac8052b99b64d0007b43b7ec7af32d57a50b9f7f751546a4e7684620383cec158b044991dce77a69c5dc312dd83c83bc1e6ab37a23a4dd18c2533c9b8fa76a90ba899c8ad9a4474d4a9218b4d714e04f2c0203f96df6b3159970b19d0f29ada67c9886bb3e949e7b194a29235ee76603ae61fda0a7525497582c988e9becacf371ca531ba745862796fe34dda6f5c3b898216977612f25b80c9b4288c38a24cf1c9d5b4816bf3fa59c82b2e76a52a48403867a755782906c8ac5d8b03ce267bc2c7357b19243bd460506639a43fc3b2e1f0ed050943628a1e08283daecefa4a0a0039bcc40ec258d1f7a6aae0ab0f7970706029ae582bc692f6ac78050a0d726d24c94e8aa17a3b3d9573d026004a3f529353e3a386f84856ed12442a9ae90fb6cdb9a63cd75e1de87054267da9daf934ddd549fa1b31549005ef72b83d1038d17e87b9bd3ac1ff3819fc0d71c62051b9e4b2d9acc94f396ed647e6b2287c6d05b4382d670f4e7667f713092dafd7bd4419741509985f40e29468752a02b1994506f14dde38e1201edd267ac4763422aa405c35ca1359dbf7846a3d2e496c9d149b107187acf4d6c09c3ad635d0620a49bbd9b14a47f08ebb17a8b60095fe93572bd07d4d7933fd84c85ba236ef9a78d660bce0dde2a0627e7c928c092b905b86e169a07932df6748b4ebfc3aeb108e61807ea1fab0465927708273a0c28895982f414be556744ffa0455e8636ade41f39b491d4fa5b641dced3a6e4501d8437227bbf944741471d16567ba0a8bdee20e9ff1a088e5b7c00f48a43c4dcd64e1d66106aa31c084b38676a6377a4303fa71541b3b30a0d56c5420124575f0b0cf5932c82e2c83564c680fc63fc08aa62c13273be731ec60584e54674148bbe28d8a614516dd29281074ac2aa1c89e4f747b397af768b06117e96dcf1cf9b9069bcd20f104b6e48ad8d3229b3f313b2321011ffc2ab64076ee37ea51259f9b45e175719b79d9f33768a63bd7e8bc06eaa8f2ac63193f6aaa1b28f57910acbe73f8006ee5eecafe7d5506044fe9bb255f6a903b718090489ae8b1309c4e239c40044ca2b7870c10a84ac978abd8e2049a20a2656b4bffd4e4a824d2874f0da81a18255ae0c0eaa023b160b06c34156250c99af71ec5e625f209187522511914c2cc40c81ca77c37492299c4128065a1ffa8b884b4939784ced6c60f174b79111aaf6aa538033a5ad5600637896609402569d7725486e03d13f97f85e4dbc8814223a63c240b0166f7008410c97bc2742946ef032152db1fe2f7505d6aaa0b50cb6b7946904163ff3e9b2da6bc549cd46f08d701517805b3a401a25f909c58010ce0ca8aa459a4eeb475cce4c205ad96c064b3a72f9e02051703b80c254f9ed8f7042345eaf705eff996de63e41f940cbfe06a3c51e1413aa30ea302a4ee895ec7e24ce01c744261952a42405c62a25ea018619264aedd1ae670b7ea1fc2d109abe1b9aeaab4c76247e1a4f4caecd56634285088e0ea3f414d84984560f48ca35b65ce48a3eba393b0e7dfd644b19ce42a4fc752e122330fd9bdd348c975ac091dd701ef94f799ebd3f2a048e96543003a44739e9771266a5c3c5b5fc84029859e57ac2e680faf6a8af31047cc7f823bae73a01cfb6269c974728c2b8e8e352e62f44e073ea508377dd14a19b9650e5e2cc625c61a84827e715dbab6d8d42c101f679499996aec0cac0c61e163309db3aa8e33fc2ad627767878df8a1d0a05ffc133e9eb7e2ffb5972f0a5ab81a508b3bd1a3a5f2e2e05ef47d6c8bc4ff556c7fba1fa20154e6e5baf1f23f8a23c8481ef0aa5229be012406e78e0d0270ae18481f09f02de1d524da048c3cf2df60edab0d784304baf9a09fad10677e7fd8cf341383a549af9d3411ef97686c67b3e164e058373599aa7c38670d2b162001f49b4283d259b6f26f40e8981daa215c5a64804fd550e2f4d966d682f1a33e0955266049db9682dd7d4ab2b2b654a94558b46f2abf9507a0d6b87d02cdb18d975144593b79335788402bdf5a123497363e01fd2a0995ddfd048d8dc4c58f3d86cdca0186936ec9c8a34fd121d5b6128a1161efc8344a50e1910fc74ece2e768dd1c0c2cf8df6ba05b20650d032b8090d1c487a515f5ab28cd5357668e6c4789c7f40add5974852eaf50e82fd466205f330ef48cc01241900b28233e519cbe0cccd8110e8fe9f929dfd902ede802a6d82327978e6774bacac1a095ab0d9bf622621ec6bfdd1158109c11534e7e5781be45db92c213ccc811e1b1eda9e551e0a878b99ea15cb9162c6bbba8df6acb13df687ce8cde4b47032180f0d63ae3bfdb299154dd3867b7c32eea3f931d29d95032af5fffa8039e1057e6776897795dece352e41dca96fbf5d205e69b0e4545f34d1574fab1618b527ff5b1ac82b27a367ea12a369c2916f26bba010633eb1e4bcbdbecc3e8ca9db6fec0f67df7bd9e5d05abb7f84039f2419cebc27b425720b8678acbd0a1b45e1b38708cb25de9cbeb036c4eaaf1178379a6fcfc4c58f3734fed297d8431ab482d9f4e6e84c57923e15307525b1a8475cf781b4623d4ae5639a804d14ceb6efd718f95382b332c12d9bfdfc957237337bc041f67ec6edec35ca0f1f3f56c34cad669e3e01da0c914123238627292a8568070294c00846cbe190018279015339fd2f156470a89a8f3fa081c5796a662013bb28dbaf2a2e94343ee18e25dd0fb66d4c995daf37ac6683f2f962438ca235426ca6cd2c49f1a7ed90fe40aec5227ade0bf63a6a39e8fa77528d013f81d1c986be68fee7ab892b39ce0eca6ba2f20f095668fe4031373a375f2133a9985ebffd375842bc06d0b120ad044d0b6a5d4a89cfd2bd04fecea77bbbc14b4402a30dae1e823759618a910b28e063d17469f74cdc34a7b2b0e5effc8594400b16038d00280f858c44791c54a4b04721742103f39d602a948b4ec7b16c6ad3a23c3c39af09a760f2bc6391c62ac973139f7de229082dd06b0038a178e7a1b0a9402aaab3a8913c9091b03ba7f09cc9445fd80ecc51bdc559d1844287b5c0e5d27fde2148a9318cc3490e688e63211f749a7c9b6ea1ebc09f0bec624b6c088b48f7c7ecb6b62ec3d2d3da6c234f97c02beac0a879af284b7c56dd5053b463c004f17226c824b86d21db85478a69222eac65b1e9444c3975a82f853dbb0c09dd047964dd79e5395176fb2bc5c0deb67c498cb029210636f87f02b8f5feba3b4a0c60558452d0339d96bf3e21f22dd7635a8031fd83a1421ac390c9aa14fb91ca8c9d7443147200e2e364021ba671eff512bb02013b246e516637552fa38a9ecb2cde08accf049ae99ad0717ae61717188b228cf3e6617f74cf59788d2b50554078894eae29a15122ba1442d039152cdd0123dc88e0e1469ba637ba45c92456a70bcd44c244e9162ed3d6a8b33a2de37224f43b64eded08e0b647e78092755e3e5265c4010dab9357011eb08d5c93b2e7976e8071e080ebe30b7f46923f67a5b0df32254d07e02ab9866e201767283db54c1c9f5a2df34576dce2dea5242df9e7a1b864ef7a38d8b677c00400c68d801b8ca5745c2d0fc846e45d2f2255c8bfbc26737327dd6c5e0949d622831e86c0beb86cad06829dde9dbb5954a6cbdade44f3527568f99240d57e8140bc5056b906e7ca41c717aead67b01057a072b9aeaf489ac77eff81bae6209e1c2996291297ea5ee1744e6263a5903adec3cf83cda9cfa1bc374377c7e6b6f1a4a07c68d5aeabd973c1458b8c519da3b9e9e957ac9002f00bd5e285c20d3ff5fe143e8f5473adec4ff1e827d7f3f879c4cf341fce340dea4cb36ef4d55b9f0cab7e815e64982c2d2317ccad76af6a4b3fecef8bff3f44ec3d55f1c15e430efed14768e2430bbbb1ec0f2636390cfdddb299be89962f58c05a93ee3274d19f9658d4cdd0c1e32a0161859651ac5c1005159c3774d2fa9eb9e1ede0d9c891ac03408943a9857ea32f2832d89d3f9b34b16980439d255db6ede727a9bbe837edbc8f2166a31a913f389613417e2692bc9cc78cb78694cdd0198b16f0a4602c9abbf1754e8516028bcc822182fc3c6a3091ac55f5f6cec6cac41a9f509997606f5f1669362881cc99791eac742e6b14c8830903f71a5e34e526b63b875b8927a202a27e7db7f89eda580871f447281e5cd2a30814a9e4d6bc45f247b17543597f14c89b8471135653b495b155ebadcbf79f830003a846c5c358abc341a8fc6ec4ab98b2e5d9de963541809704648e7b9580691823a03804aa9f6399254fa7e73c766e6bb919e63fee1212ebae9d7eb37a46650d82b31a24634f9485d541b84d8184f5e7826c764d781d842daafb90e1356f060d2e7f1932b4b9a290956c56bc974fab4b7e1f049d7dde48a6c980c1c252d012aac0184633a0bb8d7872853435373d3bc473bea98aafdaa6d888c57679432b2e8a502cbad0eb1a0e978305cf254164bc1a5eb57809cb1de489488901d5a097cd3ef6f16fba9dca45603724df33ff2db1b40f297a6afe0dba8c61517c6fbcba4e360195b2b8c59916f4c2d2c4eaa5e9af2992d219544d61fa082a6024552583ec9affb9f673338059abf793aaf211918e20aba4cd47f1516a0f99183da194f3a12f061e8fdf1a14c387109dcd558a18657f268af482adb71a70a17fe5013c39500501040dd6a8e65eea2cddccf2fb9d2c5f3de8fa2dbcd222b502c80bb1dba4d8dad0a57b5f7469e6bb53ea4c1e4cbf7250a5f249ae3d9a388cd8d6cf74726aa88c013f925129b1c7aa0c437bc9f2e145e599846b06deca99efaae6edad5c5c779954e7b3ffcc6372cd9bd424cafb89575690f1a3b5ca711aca2c01303f05b8609ba7dc0e86b631ca0b55b7d8ab2695b1ac4801b2e02e72d1b6adf3598130cba9e26126516afa84a6327146dd04c49aa553192d0d7d2f7a4b01ada1d81d55d9665b5ffb97f39381d0e4949f1d79dd02ef9216bc93dc0c624d9f46ea4cb0decfa55733c3adead9ef26788df189351c0896592eb071545ac8c03d0e97b086e418f42b6c7707cdac2cfb638555ac8603a14a150921d663c28cfa874d7c0927391a5a52bbac2d8c28c98cfc0828d1fcf30073aa7e039a35908e5f5075a09525a99f3637c1db4ac4a264085d87f4fbeebeca9b74f60c75904e4d4f75bb04b82869c772ed4c18813ddca2035fa8e23de46ed2fdeab6268dd9a7434330557e7dde35238291119276ab54455de5d094433e4557c1be57a1c2488bb672d21a2dfe2025ada057cd67fd6bfac47e61c76f6432fef1b2aedab73d0276b4e4c1072d54361353f949fc6c8d58b3494eea58a4ddae9771f3e36bbd18819bc6250630ea8b80f66c2252b94efc9b24dad63db8a2b3854678115827084238dd3ed1bc15a5342727f4e197ab32011dbbbea0283fd1193ed89bc40889a505932f3edd64bbeb609a6bcf57a90fd2748700022fb7edef36d5695a7d26c0448ad26f9e98390c3c872464a2c62833f3744f46085ddee6b58d1506d429711157e4446ca2d09d12aa7e42072791abb20cade0f05557d65ece274b0ca3113d40242609c78835cc04daab5d5fe4fb981bcb416e73d9b356c671e0448a72ad9fc83e67748633e9032edd01c1d26f3c5a0e14568935a614c3abe886dac9dfd09157f0f6df98e4c31f9c0fa446afb289f11f815abb76d69d4a5f1f07e1b51c5d40ee6196a4c08daa39a6a32cdd807f20fcc8daa3fd1114b95c7db146a9413d271d0946487c14a64a3dd302deeb1b612baf72431ca378e1cc721246209a133592c145fb19958305f838b0920ac37e31bba64919277568be5000d1a438093c1d42961c3fc31d93db03b1beb0ea522632f74ee3029b922dac2a66d6ebc0064120f7610980d22532232da0fa6298ab74e7c487c3ed261d029c50141de52b14d7723a14c8a081dd4aa347127e68950e96f67cdefae6ee5a0bb5f8ab65294d58412a04cae30080b75eb0e8714fae496a92b9131bbafc3a8c11331d98317a86522f4f9d7135600eb8cd3f63c0690602faee9dcde7c5c24ad344e1cad2dd68822bc5008ba022fec17883b716fb7619f4a14dc44ae8c24256861324571c3d2f27284d07b815a9db0a4cd894b52280b3022899e707fd3e92607adf71b66538786b722aa76280f67cd3393115d6ae307cf8660f4fc20c3e102c933d042e0dc78e0a77a27a18e4a6a8a941ec2c19216ce931e4e66502aea0ab608dba130f50488161907c3b797746d8ffc00fb5b6aa8e28f8a6160b10c626b6377a173cb028fad98965282c47f8414c928016fb6b58d4c9aa99bb07eab180150ae0e0fd47f00bf0f16260f7213ff78e65d00c6e583874214e6a1fdedc9c042cc9e60a4ae47b726498da165b19460011e2aa9ae251350367b9b3f0eb79c710d0254dd7cbda134f3aa71714160e65d3555b721940e14bec41023b330168f8dc6c13be41156db3eb9f6873e4147f89945b36662bc473c610cb9635024b7153e86581b036b6495a99a084a26e4a91b41819e938c6e2b9b9f1e9743b2b14486312a072064eb0599d7f36143026723d6854efc5c0e0402240d9384df4559fb0dff821c112ec37b00752ca979bed8f7de411fd2f0edd50ba4162d0a0fe17dd1809c704cf123ea9107f2d44bbe31eb924c1004115c31118aa5ce3621c2884cac39f111399431af3ba849647358c4400cad45aa1e6836a6931d9f6ef70549a459d5b2e100d13b9d7de880350e08ecefa39272ba67dc1a3e2023c608773d5dc167e3309d1f251288ebbe8441870712b78e503837d664c2d0f79b4aeaa0b18f2f6cf64b793ca809395426baefa0488979acd8d055ace42ade2f2289c875e93b70ab647b6296f22f18deff6e641326b5bb0516f1a2d4f225609aca760d5362a5271c03cc70a38b017072d11d0183e4443d40faeff6aae330ee1ca44476b04235cc73b131d1b8e09ce3d119ecd56433a61d26fcbc16226f614790c22f19bab3add03ef3b257503ba04bfdffc365b212151ac5901412c48c66d0232754a6296c7607b8e9dc58099694babc7cb13446998ad58841814b52d8bc1178ef63ea4ceecd5e53aedae0a4b14382bcb10c487c00550cb976401a9f19d339b212dd58f5985ff1ef74cb1da1d865cab74e443822c2634324232028fbd5610db30b13f05ad0d40cd17d61c9432dd6be2420630cbb18bacb636be9375a738b12bbdfb1954163f520a9beaa2910dc5503817b4a6a8600865d12282e12f845266c2b2dc5e23dcadcf16d54a94342ce40affce7dd8bd3ef7e661221af2c81705dfd92d6d23e7d8b1a689c89252a1f709eb432b4921f6e6ead1cce4885f4500a6200e537206002c79ccf8a657205c4f064528327127c68490bdadbbb886d4e40c23bd762f7eb22efaa1403ddb0727db2f0e2d48f7cb08f52b1fb7bb64e9c57425472f5c515a7e969a60e8de3a769877b5bf26b18a37f453d8870211244bf2c2e0d7897a407f370d05d536e84aaf09d0a2a2694860f89ca641c6dd10070c3d527d3a34d70c20e48c06da40285800cef0bed88841609ddffedee49d0d5c0c3afdd1573123f2f82b8960191082b1c22e25c792e68d293964d1d2304e3923345f7e5b7234e53cc92639d973085b6627a0b3020684a3c35b8b3af3ef16610c685362f1881dae0393ec570e355727f13311bef4924b78e1ea72a8fb4df28c6f90e352d3696fc63939a2c8b3f73876d14c2a44f917b34d8eec5d1060bad9dfb1f4a2933f1a812cc99209e18e69eb1e5d7a91eaad70f83277663bf252882e89ae02dab754bcc2b3cd732b3d2c3410c09be8b016c04eba4470e0dd3850aa0fd3054185b193b40630667940d990eadd3b055c721170e48b086d2afc07fa1bc8c00f2c4de6d3ee781422ed470438365ec304c919980761ff02290143d3ff1e6c1c7f0389fc5ddc8e263cafd742ece46999040cdfc6adb20b715cd47f3c2679e5151a38d839cac020de43b6d4582f8bdd214eadaae30bf63d0b59f900e5012e2323c9dc665bbcc086e749dba264274fafb16b9c1707c76cd120568f410d545fa3432467da9b9e2a831c5931a5740515ffd8d3d5ec0c01c19f7200430b0e1f6b5d604cffa68f4851cab9be152991d60175a9c12ab46321d142b5faa1ea88b9cfc6ab3b72d2027d928e56e83c45cf9bd654250ec5114775afc8bd2d60481cd830638f1960ae45ec76b13e7bfbf2d586838e2ca82e6e6b837e62a5b2ba5e89055307f74ab795665cdc8ac30f206d6f8c12ef74e8ab025d836f2d76ae64b3463e258ce00bb5b75e4bd93a2aff6466ce7c25047dabfd0494055462ac3b3e759867e25b3b530b1d1c48f299c4e8646757e44609658abc538b7a72cbba3261e06fc3eeabcaa1488870d1df1f17ffda744782c7044f1057304fbb4c438f0a61bf73e4bee37c3948a7260978e34ecfc78dd329c39b04f5f54a4dcc915a04902cf2224ca1772c5f94989eed3c4a5f6e8a541452db0590219146d5e4efd3b4a5826bd0a040e806b6f5b8521d0ffdaf1c199d70d944d0817b2293cb110ac4d475b7ebd8164330b10fc963e3d0a58a7230a1faf894236f736845e43895836da2d0adc0dc4b87b14b828485bc079ecfa2883e8b5d3cf0837d16c89a2cf8c24291169796212bb1b2224f4ef1718e0a7c6451e85aa1aedaa20eb6b2ebd09696bb7cc75256fc74d4a3e6b70f2c105bab45a719f883f9a6444e8903561a17ddc2c0f04e59da2f2d8fd634c791ac733d98ce9dc2d831243423043a6b13ad5b305656a531aa3272a0b3d23d5271016ab6ea1edcf6dc2d497bfe72c619756d856a114b6dcf398744ba00d8ced047f6e57d1ec7781e05c41bd8fa9830140b0af4845fa7a06cfe5c5ecb65031b229b902df7de72932db7dc524a2903020b3e0b6a0a5d14b12f556462044374d35133b8c39828658732dfa18d1e6cfa5c05cba65c20b1a9107e367ddc220d1a9b8c491b05a8043be6ea630b22740184a4334490032b22a8220d2a39d800458a5648b32b155474a08219f450839f292dcdc3500a68c892060898b46cb2101ed446559bd895899a6cd70b6740882dca212bd2b0e9164957a81391fe026335a262847d53a06d2c5c3bf3715bed88db6a0008e59e6bcf0ace7a13fcec4bafc76dc6cd790f5f371d3866d9527c1852ca02e36206dd4e410441f462d632220de20be2102a1f2209e2b581da5c5ab3d0254bd4c60ad1a08bc9de9cc843278839e2be40ec4b7599b0471cedf13249e6ccad4073e6228937ee4300e4a8208838ee2f593b2c59eef0726b26fc18cedc4a25cedcc763db0adc9e9a2323cf58ed3397600109a6b4309de9cc558a4c8c60a875af69186f3ae69423b61dfe4e992c2cf554ea29ed83c20f2dab7f3da44afbfa443ab3a2970e69928fb4818c1f9028c205c20e5a4eb21f69699b4f8c72021ea8a0e5238396839693ee32d8293f2d2728fcd00a5546d7d1ac41c5997b20c25ac6be7508fbde5f4df25602890b68ce9b24374a2e2648e2f7b0deb06fdd61dfb0feb0ef3119f9a82ad56b87cf997987ecfdd3e1cd99aa624bae4c0fe9116794afdfa388224e5c326b50bfbf94cc9ad3ef2b9568537fe8cccdb0cc4b896903845e4ca68a8a2cc528bc9008af26158d7d81f67d9c57924d97e28dfbfa436da8175972d87708fb5e4360b6aca6477406e47616258755891e6d7a1471a288363771e6feea4b8ff67dc662df1b2afbcea53c89e8cc50192e60af4b74a62acda5b98425cf1d7e5edb8ec86155eaa13dacf9e00920911d71d34cd6bd8eb63591e5a7d2bed71ed26c94be4db61d275d87406d6b1af640d39e53a68d4ca233690e511bb94467664d52957b7356a9fe393487b40a3459e02593a8cdc5a42a25dd9bb34af5b35834f75752f6f0951cc6a40c1691db48c431fd2ed199fb7b739229eeb9446d649cb97e7fb3ec7b5f442ac51bf77389dad49f39737f6fceaa3d97f6bd66d23548d79fc9ba376543b906d59f5903346b4cbfda95191039cf10decc9a680484a27d5fabcc9aedf7350c9963fed624fbdef40dac403fdcd674fd8937eeb7a21c56a5b0feecfbaa247f6f55ea11abececfb31c1898c32c452ca8bd68a25cbc715a40e2f985d03b107c87df5b4a6df50f608a13d521bedd21e86f0aa78f4061a16745a6bada5d3ea5abda045518b1a902002083e70010a7ea0456404a1821e8218438b162411246704c35e954e4c0154ae9845f8c37747232a5384004915a578a249114638a172c6126a44c9c2688b207850e403168421ba84e5e20651f41045163640e1840484b0a4c90f5ed083234c61c30cc20ddc0d8cc650c55c2687870a1da0a2082446905283d01040c0c20a10579461831484000b9532f6a43698414062c3b83167eacc0495a59a51b181aa888a105498a890b21db42e8b1ce7bce69c734e3a638c318b2c5f2bfd266bce5964c778e30b4cd212c8c81851114a1265f637599b8a529d5482308ce22f4649a908072d62b0431a21648d88aa43d680f8c18a12501d5861c30af2b5a39115405bbeb69492accdae4ae78c37b7ecbaa391d208bad03220725de90091ef64c5d595fb6e70d71a750644ae45eae6894a9b4eca241bbaa6ac33eb4196a7954e4aa566f1d08ed95096a73c178db741d45aaf6bb8d60dbb4158d0a6e3da380c4b02e2ea55afebdab21f727ded32862501e51398b2eb61584d023ad54d270b82ac155bec5a0cb3c1da70efcd5419134cc8a421d12e2d846a1c5386b9b1b5d70f92cdb482ad8cad0c6c055b99d735b12873b01efe864647a53287cc71edf8189509cb1c755f1821f146dd321f32bd149239e88eff32c636a9852cc956461c54e610c2bd3eef83da5c5a85296be4c3f8c59e3a542842c65a0d57e68831dea895ce2c045a94a1292833ce89e1e0c99c138b31c6d8b377e27970943842bbefa3c411566bad4d8c428875428e036e8c8e90ecc4ae6c820c2c5b5e7504285bde180cc3b09c19357dc4fbaa37675dc1bca855afe48fb4b0cf4bafa4f601d4ba2e041c426762963db3dfc7c98f7a7b1f273e4e7edc5fff813dd33eacaa7d22bde6af8e74262a3db6b0ebb185e9953caa7a457f2fbda27a3581ebd87f54fa7aaa7f5c3ed78fb462cbea950f3aa33464dec89c73d62aba90464c967c12b524ba109dfcbd334e5003377b27fe324a63c91662cb8732882d1fb7244a238c1d99d8d1280da2ad45ade2a8bf2eb2dd56102246061171341da3250ff10612398c4a3d1187bbbc90eca109376f2da6e24cbccce2ef63fca6c3bce3b10eef1168c20e6f040b3e823c374384e0420cd1851862fed932a6a0e40a66a9d90805d20e42864cdaf2aa56d5c4118cb63c2bcb0f14fa5aabf0d95a5c210a81699514020c407451450fd4f0010c20f4d0418a1db288e2054064b4e4696eaa441764f923838618f951abbe3f2e9ffa4b1f693dcc7bcacf1c7a336f6e56b56ea8e4e779d59cf315a4f1c6909cf5085a94f9bac8537523078084f8451c09c699f8997b8098801d2f55a7bf9ac8dff1395e151f2fad7b8232c688e48288d547192a0f7e59c62ca3d9351a4d32d152891a5949e48e90f1b97b970e6f3775a8c2b1c8d3f9de2ee74da5e23496a149f3d0ecd463c77e5da35b9e822b08e0739f00fe04b6473a13370fcdc6b46ab2bec99a453e80e4f0d830b8874c13c3018f9b1dbf2de510ef7ab325cf0d152d12c9d1480d281b6747a334d0d85a6733fd4dab6f36a29be52f1a99c573b3b1ef60363206c66d6798daf734fcaadc3c3754882ca367d0145d34685402f1f1827c25a412b3268c483e668de91e4509e3c809a57d1405caa6ef890ac831488e466750b1b36bd73023db761f3f80ac7c745f4520b6baaf5c3875ff018366281745099ca4f182263f3fadd3bd3bf991dfbdd33e4e5610e87efa8fee27ede364deee9ef6e9348bced067dd3dbc9d8eadd5d43974e6fa41fe16800e74d0828819c678410e8e0499c068ca11bc48d22407cd627cb99d076f13066190fbc2346118ca207bbeb0e75992884f68636fb247dd1911ba33b9e9b8cf402b6fc252beaa703669da614cdfae4db0d66a6ddcd19e7d03eb7edd729b1b68ba49de5ff7a65b306eed3a47fc040d31f2c3c7e5c642f69efa09e28d61c7e476b9e970726330ecd93c7867a6eb4cbd71f3353b3d91fc017d268bcad57c5dcd473184d0bf40ef0388057ff800423fc4c8f460604fcf9996875661b228adf8970e53d8d7ad13567b68adb5da3cde3e3769c496f29268d66c97e791c323165d051e185fbb0557d94d8f5bc3f8612cc2dca5f7f0e68779638c75c85d7b04573b0359c878e4a8703d1dde7cd9fc2670073ffb0559b88f7ac7f42b391d9abddd4e3fb27952186244c80ba60c7e1aa7f34b87dc59b87636bcedc09a2785bde9f03a0c72e3d36b3fb2693d06eb4de07559c96154126299c825e090c99216e4d1cfc00b3d467a78323067861811f282102373469e2585822e31b20f20393c9e28210f4589c99242d154a4236a13941da8ae2113146a93e93b6b427905cd1a19c473096d7ab9c894c64dc21574811ca3108268b3768c228824b656afa11d24ec0c29de903711cd1ab925dd5a885b6caad2c24be83ec0743c29d39f6be3c0f5abe751bc211f792e21b267da04e5c696094a6882b2e5af27f21714f96be822eab022e8554bb0228734da09b3a6e21b394f30234a29e5c4562e6b317cefa6c3949467c49b0a32bd966526533599e83449539438688c37e89c535f170e72bcb4ac3dd7ae5564aaf52a7201032654c0c5953386f8914095294d041511021b9468c9c77badccf9137e335992c6f813262b851b143011d413b69c3f61b252982c7902119f7d5337dd34d28942bc11a75ee96c7b6a1ebcb36a0d23046b64d44f0f2d90059a352da7f7d30653a233f45c8bae3f4ad9e94c614a9b3e8391517ae73bea271d7e3f7d0d2576dcdfe3d6e33bea84d271b2bc8884145e5336bdc90285f5d69f4d8f81e1175aa04d794c9bd8aa2d8a5d49355129b5b4524a29ad94524a29b5945a5a29a5d4524a29b594524a29a5d4524a69a594565ac113b594524aafeba295d24a29a594d201fc92262229e7c45a6c474c9d69a517bde8452f4ae975d1eba234f5b216bb2e5bed1dfabeac52c2be2fabe8bd98282646f5255546a3958c5d9b13e7a44d6fc256b286f17644be8e2f4d2396cdd4829c55e730b6926f27d3b16cec6d47ccced9f328add55a6b2dad94926084160fd6cc5df1d10d4ab69c624fc9e4c22c662f4cdecc84d9eb37ab2e6fa6fd6a9a764d26936949d3804cd9f50110a6440ea59224254bbec99a404fdca221aa24490993a9e485d8336b2e765d56959954e011b2268ba5c4aa325386adb519febcc83ae40e60e43026c91df00e1107ac9315850029230949902a40266be21a64f9fb8a240799ac396782582cd64c9a364a963f419549a4d41268c8ccc00b3c3dd86d5894d60b6fdab5b9914018db881f6dfcbcc8a104b2c01719288c40c8c00b168838114f560de00b19d042b6c89f52ce8012be410e259004923193258154aafb9bed1ac52e846e585fd337c8be2e31ec850c08b122cbfc429bcca84ceb04bd915630e44961dfd38bddfb78efc5ae9617c37e59355e4cb0dfa4c07abc5a857ad990f19461017910f95fc84110136f44f97ca9e9261d33e7b45a5efbba64a68d0a3146d1880148419cf0f10308036a7442a3f84321e2d0df080340424c451b6a23909b9474203326456a0110ab978db9f96ef61121e43026d5083912716e0db746d655af7ad56b08b7022640c10f47f0a0c4082ed0451241549070f244184c88c87470cfa8a2423a42952e90992c8d66b2e66f266b3e3e854823637f6d2cd463af1b0b16086536ddb95e7b5c9386e6304664f90a65d208a9292642e020881aaa308195cb8c232230e183192851a590721588588283156881822594243084141858d1030f3900d1aab5d6fadd20cf98c344c3a6b30a0e791ed79afdf5932565e61443bb75ca084ef92f8c4ae394f389ea4e7935d655b523662f4d2f8d5435bf103a0e37c61c5316e9a95b889f950bb2755db62e1d845bd7339d895fd1cbbdd2e9367db785f0c0a5afa494a2612fb5bf8ed969a9b5b656d575a9305956e7d4227b6d12c9a42c2491d22422e2484d8350c21739ac4295064455a80a55a12a54854ef77a393fca273e892811fda143d01ffa437f8e6f9a9c0dacb59f431107bbbdcc426d52106baa0d91656f3b4d959eb350cbe9d086ccb2eda349db6cafc6740d8a37ec2f25562ec490df3d1e25292d5d893812f4f11ec30cdd3dbd7221c7e03d3fb67cba7b3a6f3e3a0d3a59c57d31f18416d123fa8442b1d65a6b5f186244fec8202974f3e42687870f2042eecdaadbb368648eef67c7cf8813e912edc023ad1a147194ece9154bb36c4b952a4e436699ceb22ccbb24cd334cd052a18605a9425506848d84c842906605c487032a82c14e03daf8a535022382853638534d9350a82f441aa799afb794ca35d3369acab952cf7d5980e69acbe74d5e1a9ce62c9097586c6cd2067da69adbf2a11b9e764a24599b00aed7a4d49892ed12b344bfda941f48712451cfa7afa436d868835148bc8aaaf97a64fe84c0d9faf0d1b3ba43ff75e2c67ab525d4954f29c4932c7d4f4c9cc821e4193e28dfa24327d9225cbfc994153682e9943474748494a4b57e492d83af2044a515c7a618811f923856e6e7278f80022a4842ff2247a9255af67d13ca136475af5136912d10985c650555f85e4c454a04599503ed9188838548712c99639a4964011c78cc28a56188d5288366ecc8e17d33758ab62b5f728cb871289103a331faaac0ef3d55208b5914071663ec992122642a84d6c2d218937a634a209923dffcd90e30e6593fd049b1713adc8f1106ab3aacf1e5bd78d509b55d52b086037dd85fb4cc790fddea46370f223fb353d86fbd8bae075349446196aace00aa12b5ad76fa8cd919f2058e0c51148d8204a95d645430e5dd0008a2747523481a30546b4e0091eb8a08a25adeb72f381bd89f8f03ba0c87d03ca2666eb82e16e22d81a6afc6ccb41d93913d373561fb428a3c51c30dc8d9d621a6a332f758ec4616f7f8a3853b7e20d7b1a6a83355351071aa133f699da703a87ced86ff7e29c3595ca74cb626d3d84ced8e74cae284f6e06f9da71d1205f8f2debc31e887d8e3d0f7b4de630cd56f622cfdb7b64ceca45cd0e4bcc20c6143176a022074538c196441050b4408a1db060813679906362e66db0624eab6a09a9851f2ed68881100bcea021461c0ca1ab52a54807587091c3131ae8540128d39a6a43cf13e6375971d39193a02fa009628a21f8100231989481e54641841f441ea8a08c1da4800a226a70410b093227040d13340a0842184342209d218327e8d110b2b01ba0420a1294c088293df881cc9c999f32ac4a33835a2305e20a1136ddf4b7041dcca04817204863062a27c8610728c628c2470223f46085510d588ca8a8dba8f3410625108114308e5af0c418484e694059c10a6c50c416559e40a12910c307dcb31ba75863d34d338ad5eccab24c87577f5687f7d261aeba456d642b9e081290d184072e7430831a6544b162c316a5e0608b3082c812c6173d105151119501002960c00dc1c4f7bce108132c45437852449531965801018a19f4c0083f4c7e68113dc11151418d681ea3ba32720a34809008d8d1e88c30d01812e348124353cc30c28618a401849088132975028c2944f4d0440f4a4338c10a865af1565c5b734e1a7c0165dfd8d1c88b22b611183f3bbcd117598cc0306287df6034d9ac791b9a11ae144916e6aebf78509baa571188ad7afbf9032780a8218c210cd1ba01aeb462ab4a1f3e78d0998b0834376781216547233094306147232f92ec471c8a13bfe70681d8b217e242225b4e629c913fe48f8eb335657e54976451f2922c0679a2406fb07446163088967c40ad646d47a325a4a5a32520dee52d723082ed497769b65002df7c71fea13371881dca78f2030e692009dda006529019415bfc04a191c5ca0e684049e221cbd2133a9811832c4b9a90408d1f1e723863c9280834081de16697325c7450c415483ba4b172455105c115508e7045139732343a67ddd35a6b6dad71caae29d45a2bbdb9aab527546b6dadf5abd34866d2db49a9ae19982c7aaf4a4529a594462628b87faf4a35a727a508b70db0a39eaf97b5d6394f67748a58016ca98bac66cfb5eb5d551d791a6377919e6baf9eed09e26bdf1426eb0c29a5a4f13557b53a9e40eba437c1862c8fdd3ca4610a3bf29837c6061b321bcad15613264bd618e9a94e61b2e23733a2a4d7ea6531d3766f4a150353028eb3e6a2d6746b8ccc0e6d802faa1895aa25e5126342c5b4ed17cdec35e1ff970f39d572f23ed49773c7e51230ec58bd6866afc98c8c69131759ee0baa007663e42ecac9597decf2306d3aaedeb615acce93852f96e16f3a2878515b5473ac0ad70f72c56c1136e9a416bb266de3b84dc7d5d55aabbdb086d5ac66af9aa661afc758bd3499dfb4e52dab16bb260d97715db4ea7f9b4c5a7663542aacabd5ab16bb260d9791b12db2c459f69a1dd3b2d70fec1be5e4321e181817129db93d5a6b116a6e98ce79cd01a30849e58c9874528b5d93c6e1aedb74d867acb211ca8431d16a275c3bb280ecab46d6bd46f6f5287d2c96c1dbaf71d8c3a736dde3593c228d3487d29c7093420e0dcb744d17596d12b2b5cb6bdb95ed9b691a8e72729b8ef1c635615316a352dd8cb72332b5e9381b3207dd9feab3267bbc0cab0379d099e923e73b23df2064792dbb22eb5e2b23ebfeee7ba9c30f5c2ed3f15a7b69277cda74d8e3e05d447374d04b8aedde14668dddf15add5e50b7eca21086b694516c0a305a220126e56fecc28a9d636355b6add763f8edebfabd02970e85ec9e2be7a22c78124db5facae5f82f304775f7b40e4c9debbac35cfce58bbf966f186076ca7bd79d03c36f8ee3b8936ec0919dea9edfbd050cbfc7bbfcd4819dcb7366e79d4bdd7b0786427677bbb5c03d7fdfc3bcbbefa16a77dfb30e7b2e8f0347f64977c084fde950c8cef7de855fe7720f0cbda73a97777ac7e527bd03f3ee39f30333187abae7da2e9ad361cfb5611e8f7ae96056aa5fef74885f5e542a15778d5375e7bcee9caaf3384ed3348de3388ee3927497bbebba0ff4c050c8f65226a4b20e4d28a1041248888959ad60605e5e542a1797969654eafb50a8d3c9f372ee3a8edb368c35cd64ca3217179dcad8e6be7a78edfc18715cae5ae9d06eee2f8779d1a1ddf92dd8ce2add721730c61b2d3aac9b7b0ae4cea1ee3db2b20ef107c67ba0bd4e5dd7755cd7e950eeeedc33e89de67b3afcce73e76e7bf87d5d484fa52ff25b620443db003b464972656b5d9e35f743643df648a36dc0917defb15ffd21bb3e14b2c3f89eba67ce9c51920075127322c872cb16e496376049d264df2bd905d831ca0d475bd3be1e9a525db5dde52d303ba763ed04a2ee8159fe04659ffe4274c3927d7a15d0a68fd1413deb9048de30ac36f77cbbf5c03fe9f0740f0cb3a7579d6ec091cd9ddee93a59f9dde31bb05d3b81a76fcf99a77baf766b01757cbadd5af09edfe955038eecee391f73e0c8d674074cd89df64e7bd76996a6599d0e876c7cfc53d8dd9e7e6d3ce4de8ec1101fa50130828c758fed27bdb35dd33b2f3ff5d47d7ade749c2c55dd2f8f8701c3ba5b4e3716e44f9f9bce8bae93a5d2bf7ed2a18b8e93d5f23a592db985ac43b9532da40e8632ec2cdfbbe6813a74676f213cdd13b2316d21cc3fddd374a77418c3ce7ef5a03bcb3f0dd95887d77be8ce1ed6c9f232fdfd9a19f8799e0e7be8cebc7b200046907ba87713d823bd9ebab3efd03811e4150b729f2ef7e9596f9f7aa523b30e4d5b8b924469dbd8314a1224f68ea663daa7a8fd0691bf516e08daf75a06c3213b7ff5fc3875f718f06e2fdffb0a8c73c6dbeae9726341fef4ab43eda713c8c9ad01474ee0dc271dca7d3af70e443d83f81e48bbefe4e377c7cff7de1de53d879ec0b93d30c4c7cefdc423eed5e93bdef34fdef33d5d276b7bd69dce93b5e9cccde91d2dc4baa76e4ddfc7bc3330ee21d7cf2682adb1c61a57760f4d6d79d5e4621045044449a2ccb024eb4810f890e7e5d012a12d3f67d09e2f576429858045d296b2631458281105162dc0a2c9963902516c38c28ea2222645a5784509a30b9c2ded3e01ba7215d1b0028c44c3143408a19a103d29d2114388e86ae12a72882db1912dec58134bc5644d5bc54e6be58da2105061e5ac82b47454452251316be612b5b98e86867e604be80cb6e4c2b1c3982c0cb5e3dd3700454144474b48d71e5d396bb559acc8a145da18766c09b5c19ed019ec1806656338298776696361cc9a2bb3466eec16cbaca12ccc7de5a43803c34aaf7b59299385fd82f628c388b2ec1e239a3657097b8229811d615430c1a6604598140c094bc29436f6ec529bc5e8e7284868d684b6cac66c962458f60bca5b231d31848ea4cc9a896493aad826b3e6d608f9f9c442299a35564b251594417406fb054a0a1ad191da0e699fc9c2aec8a11dc26eb358347e80ec905cd263c467b2ecb456a6906c20b272462c318b54d26364d6c81f1924959820af90e2be4893853dc3966420c664b208f01314c67c064aeedb2ffed5d80f9dc1bee9b8fdd07e41bb64b3d019d33599b26b08c91353762d12b6c466b14b17b4d7c0eb16095b326b98fcd8a559638f61071244c80b43668d8dc0d5d2b45c4267301639b45936768c68d64c0c099b65d6508dfd0255e0e90c762d9cb12fdb7adbca3873af81f717786dd8982cecb32b6be5926913832487a411128a349a35314a0d53364624e50772c9c64c519098812141dad80ee5d1c69036762b31a25913e227b326cc50664da82a9a35a10dcc885923afa06287788718d1c668b0434c898df5608798d1c66ccc1a7b6a731dfba4d8953a65b4a8971845e18716f58952a0b06186960c180e3468dd8982fc351a230645b464b051a8686139b0524394960cd81439b4301d270ae1cd9ef8de98dd950bfa62cff4cd95569d01912f1d8342a8a2d8d53eb1091b5c91a22503b5325913052aab941910991a65aaf1154a7678776823ca0f963daf7979118f1355f14605af5b8315986102294bd4ab262106d1c5b02655667065e0eac7d53733ca955e823a2c96c317b6bd7c467fa4a549300375c8a3dad72b0d78f5eac7bd19b8fa91dd7493f6c9a1b79e880cb145446e7a9919e52b8bbb82775f2a6fe7a6a46951cb2773d25bb17b252633212426a5d43489492925969894524a29a5941293524a29e5764496527a12c32426a59418663169a5b4524a29a594326e0d988af6ced4176372138116bf9cff7dcfdf73ea39f59c7a76794ea9724e652f6b39e72f7f5ffe72ce39e79cfa722a95ff7d7a954aadbeeffbf7e52f7f19bcffeecda7dbf22f955d5cf25329bd727159a5f25df42a957a2ad5025e574018e44e69074c5606e5ce5fce5bd672bef9cba99caf6d786e3a324d45a13efa0f8c51f5b865d397fa322da54265aca5befb7d4fb9d4966a7f61eca2b1964fefe47f4fe9303fd57539dfa7b47bff3de79c737edcdff79cfab4efa92fe79c334dbedc7ae47fd7728afb076e4f815c7e0a8c93d5fd03ef6475c7b326eb10efee79e7a33c1d11d7ab99b28bd9abb6c8941a3f3f5b6647a335a66c2914c82273117278f7ad44ca56a88d3492b2e5b3187967c61b728ab692c38b25cf1a19f2b036cdd4823bf53d72db63df31dd3ee2dcd30720e264a7d732904887ddb44d5b0ffbcbfeba9ed90bc220779d7bda4bc68b03aa32140d2d0bb558c4a2adc7aca5966a3232ad1107fbfc1571ee77e889747bcf28eaae600561909b6a4d842c97e6757142cc1fa19f252abfd8f321b591457549e298a75ac79d73ca259943c61bf3e19c50ec4929a5b4c889685367926c371d34835bde95b594f1434a93481cf4676863c7be44b39ef79c5e924649648e1871988e938cb1e9b51463c4b9970423d25b844d352d8be20dfa54926c1fca2b4e2e3c5244ee5016c922595465cac642b7ab964b459b8655464ab950862d949d80068ba7edb49d3e3a657f9f367d5bdadfab0c49f62783d0fe4c4464d8a87f60489156306d1a8fc99a325997d2a65fc388fd1d85420529a28012d23efd8b020845bbe5dfb58b6f1256aa71f1f18136c802c51bf4684c16459dbeeccfdb5fe6237e3ae4616dd4af295b8f4f5f5550fa5ad258f24e8fdc1a4bde41bd47eeef28b026a94193a58b90c3cb3827bdb8fa335974ae70ed38599f8e993554c74c91ed8fbeb24c16459d4e2d7c47a1f4ea14370a5ca13214ea28148afbc9df29eaa6a36c7cc4197a93094f9153471d53c2aacc9aeff4d852c46901e5c6bc883844e4951de38db085efa7935eb59cc0d5e9d7f9dea25727cd026b9f7ed23293454f29f0ba02c220f7496b1daedb8eebf53158782496fd7d3dc8dfa763266b8dbc3f94bec2982cfafd032d0df106901a79d67c8fbf3faab3f6f738e9bf6b18bf78fb7b8cfbfb5adfe5a6e37b06c3b9f3af30ae2bb306a5e7bd0cbabc82deafa569135b18757a3abd352347f94163f7cc8d7a686f8122cea4626f0fa7112e602877fef7c39dbe0a519b4d87f7a443164aff98f4cfb5515a07f626d0fe6cfbcc0710aa055c61ff1e5b2ee00ad32b08b83c75175afee918beb73ca56370f2e37bcb6348dde5b175427da91617b0f581b1850263eb647ff50ffaed18886d0bded0197b0eb4ef406bef8191dad8ca5c6cd1d0199b449689992c6b635610a8c7ff518ff50a7b6c453af3837e55458e3d0f7b1afb1bfbb84120b680ea69878fd8b9ed2022459c3981a220e2284a2965d6ace62338c4c86449a42bf26788111f1289883c77906c5d070ac1025ad783640b7bbeb4cf91968f931f98f6910189278a58f9b039a04115adeb39f387113a23b58f217426890c44fb98ac2f493e8d4a87f9027da64d4c12b720811656221731486a41941f76a005522b464c6346b22598110aa535925a9acc9ccca0d492213a41831bc6c0b468c9f015d1a23a4e1462941c4e40d48a56083959d2d22aa660dc01942b9eb4240f326812d49a200d122dcd62f10a2e7410d49a608c0d2d19a69443c423e4f0aa589f0cce31c7e1d2c4fa919127d675d3486fd0a6c7efb084e866f72ed1562ef8c82f9eb44ccfde23f70456f206b8d2f231c09596f6ec7247192d9f95552630c6191d96366bc7283a2cb1b5e89363941d82768ca243967d63c7283ae8b0e7bd88ed7befbd3fb263bcf1318a0e2288489132d1e69d35e1f578451b58156f9451d638a568b127c7283884c105e5b8431bdb5eee180507ab6132468c670d78b13b7314e9a9750786bbe5d50316919f262ff25f22ce4a673e7b11d37f79fb986fd6ec98b28a8488c39d880c962322f73481dbdf1ab88012f67c09256c6d16ad413106e5cfd640b9c436812b1d05ec790528606b11d375d74d23036dea9df869bae918c7ddaccbb409e4e1bad8633eea9df95b4d971adbb18f3bc31bdf0dbc97b760dcdcd53c3d7bee10e1f48a05c943f77cdc6a0e55d36196bf8e995ef54e7c7d7dcebcaedff94ccf603403e5be369d9937ec02c399bdfe7aa4a7b7dfeab314a2cfa12609ce9bc090a767471a66dcc27c7cfcd643dbabaa75a66a8743262c5abcae9b640efceb9a263718f6ec3bb9d7aa735d3b07eeb8b4bdf6c2b63abc8f72d70b6e4b57b8c7ae83f544cc2471d47b7b250e9d6c476675ec0e7bccf6ec3a8f653501cd50aae5bbea2e2b0fcc19f738bde380dcf81db7c27a5504757c9d2b711c833a1ca7b1d6c1e7f0b938591a18e2f99d9bddbdd7d3bb0eeb15f793c6cf3b9c5e15d17eba4e9438429f9d1f258ed3a3763a9d4ea00e77d43570077714777ac627303c9df4f74eef7ce7f40e0f3e691ebc3f179816179796969696eed4b578a7ae4ba552a9aeebbaae1bf22eb7e7755d0cc65d0eedec4f9e77bd5fcf93db0eb975a8e769ae03e9b62a827abeced73dff034fd732a8f33d1f05ee78d6d9918ff1dc9d0edddcbd5511efdd75aec4b1fda4a3c4117e3aa777f7c01d275d379d6e47f77cadcb1a4fd676737c4ee2120a9a3516fba5ef155e42990e3d700503af249365af0e28ed309ee712ea0105a796b73cf50fbf3bc6208c0bfd8d15d3df5831ccb30e313e87ef69ce3b0c186a8f7ff98641ef05dfc330ef8ef16aeba1ddeb36ade3758fdb0357767ea8bd1cc67bb9a7775ebee91d97833cf985d32e8f57b9b4a4724665fc8eeb5026930977dde9743ae59c73ce28c8b22ccbb22ccb3aec096d7c9a65d92514b44d4bf625d41179e0ca257409e12a6e2f6bbf7b6796b305c2f3fd0a937bb34c75d47618efdd3d6f83c10430fc36c779cfcff7ce7d6fd19ef2c0efebbc9067e777f77ed252da3fbda33da577b6773c1fcfb7356e7b3c0c6a7bc12a140a638cb18b8b8b0b936f7fa9bcb9e7bc4a7dc5f3ddef7edcdddbc36f7f1fcfb74509ebc3da03a3b7462e2973608213beea289896afebe17dfb764f6fb905e396ec7de3de797af3f1d91dc6f8c330a8ef84429d4ea7d3c9043d7454723bc2b8a66767186369d7eeed0b26399958926526130c26743f9d7a78f0bd3d3d3c98072fc9b22ccbb22ccb3c149765d8083672d5e46c806d2e86f5c0ea9ce9e1c13d3cf89af24a09b2cc645a692fdb3b8d07a356dab63a6aa5f5a07a503d3d3d2b8d07af5647e99d171ecc83f70aeb9007b7bca8522e2d2da9542a95fabeef2b41966559966559867b7687426519c61b7b1863aceac134988c9a853c1bcbb2ec73db61fad5a6df9007c836e9107bd4b6532cc3dfc03a677a68bf261de69df17c94872b5182b14c759309e6302f6f59a1de1df57c0d05ba3c83de4cddfbdc7a7447a19ec1f0db397fcfd73ed07b0a945b931f885ae18402bfbb8021eaf129f0fb9e5fbfef9ccbbd0f057aa9a3c04e7340eed4e3eeeeeda434119d3859a8775f617b200aa5439eed3da543d4d7dd45036004f9ab5b8fed9fded99ed23bdcbfa3409eafd33cdfde6078becdb57c1c0cfef54f872f2d2d9ea74dd8c3df73e7fd7bc6debf2edfcb2a954a95f173cef91ad823b349495ec98dbaa7b95f9b0ef62eefe11d8cca1eb7940e8fecd43b30fc76b7bf53de60ce312e2e3a6cf9f7d3697b17ff81f62da86f4f7dd24d07f54ccfadc7679cd863ce4481f31a0aec50dd33f8fd04a6be4de7f4fcef393305ce8cda7ebba3c0b935bae9c4c9dae17d93c57d6e3a596673eff40e0e37cdf36dacb3bc4d60dc19eb86e7e321df2cbb43327a4d43f65587d43c87a0d1e15ed4b3ef99cb5d60def2d40b8731d8a9543132ab775b3ec71d63bc699d93f634f7eed8fb0ae61a077a30cf99d9c3dbf339301cb2b9dbad05fcced32bed5987ab1ea77b8f7b48b8d2b44eb7876cce837906c3fc2deb9ebabd7730f7f40ecc35bda3eaa93bbf03434ef7d40da3b1eaf12f2995cbd7924a7ddf87afe10fe30f63140a85c218638c75e03a301c6243c24f5d784900e39cc1c7787bc779186330cc1b7b18ff6562336476bd76310c6f0c8b188865ecea116463b7f51a766134665fbf3a545d33d7e3d623088f4c101e19282ef4a23ddb548739febee27e7a77ed04b6bc03bd9cffb9dc6bb977ea913aeaa7776028b3bbdce52e77f9e177a7572d5a27a5515dbe0b189eb2eaa8ac7aceccdcbb9607d9f9766ba1bbf71be6d349af52e774b8ea81fae97107095729ad83f27690edfd94552daa67bda37ae6910939cd23b355faf12b9cbf4dfbf5ac43188cbb4ed3b44ef3384fe3bc97979797ee9ee7799e27942f777ed75dbeeb7246e9f048281364734f81df9de7d24d96177ebb53792a1de6dd4d568b4e815e4b8b0ebfc78071ce743a8ce740fb0f0c7964763e3e2ae7ccf5c839e7938c4e97b38e0c8f4c3c0ac223b361902fb30341b5e0bdbdbc2aa67da6cf945270c832979bc2bb5ffef2a8fab7d2f2350d4c3d831dc75dfce1773a2452370c24ec9677b75b0fee5aea5a4a37e0c86ed1debd6fcff7bcc79f9ed21ec0e9cc5d03edd6425e35e0c8dedee9f01c078e6c4f77c084bde9eedcb96ba1b77160c871ba3b7dd33ba7a7f40eccb9e74c0fec0935dd33f769ae3e0ee605f5eb9c0e55dfd775da84ba0965ea502613a79932ca643275cf9aa97331691713e862e2de75a6ae33fd7af76bea4c261c34fed42b9d735c36f176847be6b6e3cf4d0791b9bb6cd3e1dcdbbf73600643233ba7dee23d05ce1d72809e8e3ac77120fe66ff9d7efab613f6cc2bcbc06ddbce81de3348b97b3a876610db629c2c7c4ed7c9c2daa5ce62be3e68ec1eb989113321fbbaf7bff3c6a8e9eca2d74ca529a8244c98499b54325534102000007315000020140a0744429158304f4455d40114800e81a0446c52170a845190c328ca20440c31c000020880998191a1d14800ae141543ad76a77509b981a8027fa09710933732079c786e4930c011557e32d0c9ff2dd189e770efcdd88f9796a379ba9ee97e591168ffbf6460b6b42539c70be70462e9dd18016f8cb64a406dba851c1261a9377d41f508535f379626462e85a5ae39c55f907179b1c3700969b8ff73beed2b637508c5096493074d648d66a4fa77879b898b8d7a558d8fd0d5e74850d19efbdabdab5dbac0efa3c1de56003b0c45f7cd70881114d5079b25885888fd91f39d72e31048b506110c40441bef621c42c539a4952e95d04cd24eed8662c877eea98088c741dd15b53c9efa2ccceeaf30daeb301083adf522b62d802c38ff222331faec4c3a6f679740821508d9c4f5a044593d9d7120fbe2dc277a1e96b24f6d1e5667ba2120d969fd2022c62d55d49136278c984263c6f3ccbee076accf0e944af87c6356c0c0f5335ff0b8dbd94b59c6b7f24fa0e7c1e8bc048edba081657967ceddc2f0855b5421f8956972e3a904751cb47cc1d4f049d234a1c625c096e0ae7c4be202005c8c0d2f95ac41ccfef06d07dad5fddee8cb67b67a7e35852dea7922851e93f9dafd8a91d9fb99f0d8bdeefec431f4f46972311d6a5af5001707282750662a4ca880eb783c5199a37dbc3b5f8d5220e306bc48f1a49b1e7b142604f92b701814a2992a655f27c920ea4c507c94d49a818d64eb163ce428b91ed74afc37da51512a6dfe16f0f997844830b6c69521edd4d037bbbb20b0afe5cf15fa9f1f334098804aaff9135dbcebbf7af86f7c859d7cd3cafd4c1fca48342bbde344858c460ce909ced6e44ed771378213b3a3525b4ea655f3f4dfafa4a8cdab30f6bd5cb55b7a696aa6eed843132d83b1f4d8da3c8b0773da00ead096bf29ed848ab000797ed1961946a5bac1f0f6414f8a1d285e2efc6867f8577569b1ac8f6d8c03c835dc17bdbdb9d96b89a80379bfff32215a9b4006f4e67769fe3b884b7063b0ae378784bb3474d2871dd0354a46a5ed72b778a3f910153370b4a971d6cda436c37038ebe30c9fffcdc7910f76c0afb0c8bfd7df230db8c306367032069dcff30a5e001a7fc8c69fe7fe0db109934107c0f8d2ac5f6ddaeb2b096c9c319b1ecd066bb9a985da54c85997a3c525846ed37459e652613c2a478b431e2dd010a47182d3daa58a74a197870158b2d283e924f80bdfcd949f722dd3433f1c0df71b596246312bbfc29670482f6f843ded5c5ed31426e6e682e4f97d960401f67e824579dae4434bd8268acc365d6df709ca6b5fcae5d395ad88272e94f5b9026dcce0b404dc886be992a2f4ae95da66359a721b4f09600120293865f4a47b056b50d77379013417b1758e3a1a7670c096256289f510b624e52e004ec8c9c1bee309f3ec27bd07ab0b7ede29fc241fd86773df5fef0b5cc9f8445e1ffb9b99dd910c0c0a57a6ee9f0624125e990bea6ec25e594eaf60cb37f3da467ac51b4614b9dace89f7c6c897d4c8a5013864974d0d83b1afab531679e9d9de756dce11dbb123a60263c82bbbd261d5e7602162bd64b3453e56c37c24963647c8fdaca18349b5bdbad06d2f1801d14e9730d601e131fef9cf83ff3544a0acaa9e0021ea3ff94d198b7e8d7b5f48cb23e12b0ea145f72146b3153bbb0cee5478ab395371ac117865c3862cacb18321f67603a48d33aa52735126cc84749ef0dfe80fb19f66d84f9d077f1e00837aea65594098fb89adcc31b6cdac7103f06ef5f3372836e77400c6925cfe544a455cd113cf54dddc4b720711692b1f17750915dea400d9f96707c9729623f8a524c8fe1c49d0a5cbe97c32010836dd886ef0108902334c84fbbc1bfc37f30fd57e1605cebdac8b402cecefcae4769bb33c9bb8bef5b2ea2a6d8b4028de936c92520bbd4a1e1e29501afb1266ee241b4f08bf769970fc0f12bdbbf4d1ab13f22623d38d0f26877462eb5072175ac4c95d333ebad50ec8c3a1bfbd9149bb0372fad4a66d82bd3770d86dfa16240fb3f700b33c474c2545a4ccb2014a4c91d3be5f478d45f22485a32259d49379105fc6aacf4699ca13e5f4780bdef435b5002ff1267a3223cc9a3a1dfcc02926486b5e82ed29acd9d1f5eb85b93e1fb6bc425cbeca46b482c82f7356e2ebfe1844e546b191008d80d52549e0976d2f1df430bd4d680ff4c5ea50c53eab219871b999bbdc26f9838b18f94a4fe7431c1c435d35dde986c18262387ee844014cb4f51171240cfe8783ee5f2b6685c4df2d63bc34446a349a383a3c62c5a0584984c6594dc944af43c107e511c191256a55917df8413891dba855c1fa3a272e84c90014418e5ed0379fade4ab704d732df65ee82d6a6a9b9fd0f422078712adc5e710a4fa37b6b18d51977769a609441854507d34c55ff5c27c1887d774a31f7949182b25341b0398bc20096907f682a479f89942b3e55167729029d25092b4fb90538e84352fb808c4a95080fc8b09b7b10dd47a26ddf7112230011ec100c3c31b8752c01ee365260c968d118944491d4203761e7771e565f5b0a80fe5a47acfe4e167832a4551b66b8f0ca5a7f3c1d9ba621858085dd600661acdeae55f45f4791684e1a9a21e22573a0a52eb6a659441be76f18eb8a86bd8ba8ab14e129a193d7265d4e3be55292a7d026f4503065993fbb97020da5d9af61135e0202bb6d0560464fd634004869a8cf27023f282e28be88cb2ef58094eeeb38becaecf99fecbf96e87e4690e0c1a9783ac7b8f4a0706ab5cfd20a6085d96c705f977ca1fc2ec336a849919dcf52827ffdcc57cdbad837ddbd69dcb6420551c38dc1c5a01cbd19333b4b0f4ac9df296c998bfcea4c06e26fa6a19140b6d80492a0574eb6c7ddff64a2708068ec519fe6abb10e96de8e2b699f80364ec62524d20db3119659f39186c31fd651642d4797f0a6f3038f344c7be81e0789cddac344f8ed7fa823a565e88f4b5c5e51cfda58e53fc2614a62c291f642a5f2df6c13226b31ebf9a13eedcef2d1da76c73813c00d9031ce5ae19855ad5a5fe50454d87818c84387cb279e9bc41c0c85a6cc85970290868cddd20186a06e3987f3e32acde4486e204de7cac95ec8ca70c0d9f05aa2f92e725e214e7572bf586e71b4267fd0038eb68c209fa7d6503932e0ca67ef39f753dcbf047e54ec80b1a00075e7effc14d38ea94c4ca67619799f0c33a0b7e650458fb2504cf35b154e8e3d3f72a45f5f79bf6df077fb7a1abd194b3125a568392243284003f052c7344b948d28f1b1cba594625e61c58d506354f7190e60a636958b06cdb3ad016d685067e7165a04d1d4e6c40f9f5fbb37f1594c6209c2982e5c95ca584cc933d0100047e79dcbe28f2a8554624d9e7fd40e19a0edaaf0c19f1834e5f90469749da91848d07c98cb1b710a2b12f51a929434c0c9ac4e51c7c3cd8e825b910beace3012655a53ba8a50ccce63b60471c50d5f9a0628e852d08d88552df2889dc37c0dc6e3e60290471e3f9a03921a35c784e85dfb34f948a9d417ae4f160a584990ed9a21c7b9ff9e03fb3a151460e0cac82024236a960bd71a2646e0dcbc4e6dbd98ba00abca871e580b88468724b85fc983da1d8e06920304b609962578769ccbcf0c43e930314527d1aed60bb388f1e503f139250b1d9fed3eccf2c788e67c80e4a9185c65f41108bf6fffb6fe6584b96f72aadecc8448d0b77f7a33d74a3e8c56aac1535c6b28d24625ce0238125fee3ea10bf36626eb7822d7b278424d1ed9d56fd8de47aef3436d83a664e22802b1cef046a29e8013384b2dda44960a5136fbc9a1b73fe008e859ee318191830cdec1c897511475fd4b6bbeefdc0f8e333b207d6f50313b21220f0fce4886e7bc1748a0b61673dc1729af90b53b61067bf9d71849b66cced169cd5f71abdc51a411fa39b77bd32e0347333996632bb925293b1e0b24fa1addb05529db744e9186512d3eda651455247163714e8c07e7fe74350bc68e369deeb5f9945d1acef3cab5836550df47f486681bb8e1f1c84f8d4162f902e533c7e8cc7418494ce5f51ca0ecfd376b683e0ab73724fa91d45dbf1dad27d7c6896cb5849a0f39973e8a2ed392511b6d83eb97d14c8c6ad6d07b76caab5839a86050b8ea6a200d40fc31e022375cea7c68e5d0d74ab2f0c85d67aa3560bc8b4e8c161b6e9969a7952fedf4c51927c02bcf489d53f5a6cb89d514313a9e53835c03cb6f357dda94988e9c656c62a0dc24f9f178f5de5239df6dbc07dc6015c91f3a9216dead4b5efd1ce7979195bf8f9fbea59fa03be092cc212e13cb4cd9a26308c1232c3d777eb315105b13cee11a738bb9ad4b7f3670835046b04ad4ae7e7c90c815db7c1d5ffcea722093c5343df9a5e3afe3fa20717f0f035d9a117933b8849696e1f6ed570e3acf9c1dfbf1ae26fd4b30836afc705eb1066e8300f027a058c10b84c1c34f22f9901c32c07097dca9874cae7e2258b10c1631051a7cc1a36873b1d04165c1222d545057615abccd2140a4f54e2bcbd49c8eee76172fb7a1a3519baab36fc7b6d059942a1b8b152cc8a07a5641fc57813e6472e1a927c3bbc8ff60ede410591117b2e57aa1dc3abf122712520a9a87ff22d1ac0527cc9f7f2d9dd88f45327bc12ae552c04683ec4ad169c448d11500d40524243552e966185a4656c36dca708b799309004f8c66de97aad4ac6222a461756d230740fc8f93bc6b955390735588095cb45e793dcf886802be8059e2fac11c48ee4f068e35129fea3f0b7dd3afad999f3f612a3763e4ea613c32c0068aab00cf44c31aec1d8f2fe3ce41ace9cf2597263c363ed13f91e672d204eea9d3fbceec43e95e0ef080a009c770e7ae21e6bf414f23e67430fb4482541e844ad9ded44ba4eecb91ae1332a39d36f0c9f5514f4734904dadedce0a89f18fcbbda1ea1f2a9c143f6277f879e3e2762b69288d2c62a351b1a740cd1e62503552d897d1474e05611e6f27b2935ad78a2b52693badfd40f9edb1ee2de786450869d44c8f7d0d4e2d5522ad2a26dc028f5cdcd003acdb1a4bad6e01ae7ad4e262e0833a2e3210e5cac9c0607d25c09699460d57f63bae3f97012dc509415bd01f4c49236600863e371603031cf069a8f71eb788ba57b6198787b08ba3a529d0ea2ecad2b2a256ccf88170e59e019a6d32f385912c892aa2f09cc853995fa865f4878775ed469231073983cd716d86528e9fe3656d93a36a74d26ac428c9891904c5118a77989bc5e4702b30eb8c4ed1c8e0a481847ca8e1388800ef76667764cc1256208a2d58384fa399dfc41514dd7effe1fc403b353334b454824d9efd5f3ea399461fe47b5ee27ab5611009b85f5accedc40855cd1e71de837f2d77c0ceb156de3d9ed1d88fbb8f3caa8bc38dd855b738f4fd47a5e385c410573fe38c46dd9648791dea6dc053e887c393253b4e0219f28e017502464a0bcc10f7af123ad6e10316cefdba4c7281588dd3e54982b450fd910aa49a408b01e751ddaef0e0d9f4468137195caeef162fb5c9795f448014395cd230c8e270f0cfdc6712b55c3647d07e2fefdf859577474ff814c4129784d5a1cfa5434f23d8a3679c4f4299eca5c413dd1caa643aee3133a755078e2b23d15be98fd5684419688b5a0dbc57a28acb45485c15458074a70c0fdfb573ac79ac989c943cd8bb4396e2c4257f98c0a0c2c65ae905e0657324a87ff92926c8d4e4eed00969831a18c64af0d395ab52b19138036f87242e5448c03129b98c9a3cd59b3e7b67658f2fa1642e5a2bbbcf8002cb219167c8acbf3b07e7dafab5ec74f499e66795e305a00c6c11debbdd075ac69e177428f2188946fd9a124eda5c32d8313002fa33a65c5f66209fc8c783fc1b6cb7bacd7cfbc8f8691baeb1c9fcf4efa5f04c0279ace67c786b30825d62626419117902160472c6dd2ba90f60e5c42c1a019da4469f29d035f89650884fc5965130c8d65968bfed35e084b7b0000e9837e9adf008eb7aeb0a36eeb527b68ffaa1b50c5dae37723af9e3a864ce33abaa72f7cb44b9225bc0a06dde8e92a2970b76e85d06d05104cf69ed3d5bd7dff92566dfe5b637799090ffc93843b3539c2e70e49343a05e6ce3fe1baea015aa21959eac0f976d45290bd74900030e56f134b5dea411d145da38e245b58828e769d45c4a53bb5dfcd0274492508a11e2380c964522555f94813a6c90f86e91d0f466862f8a137979e6d8a2642166d4c338bd0e14ebd38856e425fe86cc8029e0501426e7374262b2a05d3218bdf12d1b5eeb4ab643fc8ef1056ac85b805e37769d946a760632b5c367b8453e0e53f946b9ec00711c239c47e909a8f8fe0b61d8f665aefb6e3910ffb97903c5fc35b3b1e105815691149c06990ce5288854a45bc443bc27bf7766894dee4b68374be596bb0193ce6b32ad9139483c8f598df70ff814f90f59a646dc0ef7c86dfadbdbced00875d20a8abb9b40d5cd40f95706e4712d0a7d20d19484e4084001a22c260e388426a4967852e723b048c4cc18534433d5d892a0c015cd751a486e345563749a933512efa173ecad945f160b6d573aeac9ec256f11e0e21ef7dd3ff4713e2897b51334de7ae27c9754498bdad5b250682f60f271c26e06bff21c951d5732e384ea4474dbd1c7f2f267b49e212fafe0b71edb9b1af1161a3b660d1a4e1499751cfa59b9772d9a3598777dcee5f3243545b4ddc585f4aa8d6887c4024f4b2a4fdb28a3e7300b0bce9294e44c5faa0e21f797292406d7b8bc8e7e2cd7ef6e15157ac0a1e1f2ad3901e7548c805ae988430e4a0c7ae7426c89e0d627978926e9df1c04d7e0df81cc0ed442887aff3d1bed1fc14fae1a095e94ab0f111ed63142d2517e3704ac4ec3887f549018d32a743db2cdb12d65ad7e11a982691ad44cae54a90073c51904c446d9f6d457d4d4d59b438e32c615091e81fd9edf6bf94e73658b581c85ebe61716f31f161dc349a984ea5b2a04974e5a998dc49fb99671b97eaa50ea1ba362e51e24aeb812f25107b83aed6de20792c36bcb6f59acf886bd7b9fd5e593e137cabd1958b5e54ad640ec80f62cc0d55faa3aa6ad0fa78e8e9fdc28bf64573ea7da06be8c6a54dc4c3a30a9296f63accd3090cabd4f35600f2640ec2793ce17e2dc7fdc2cb229aeedd0d22891f0af1f4276c87e26384ed2a7c54a85dcb4710d875e938013b971e2774c7826384ef2a7444e8dd654714dc45e978013b95e42ffe33f97f0b99e730207d558056e19a2433d842729b84daedffe96e30449024988648e8ee7ba049417d9445ef65e4187316b6b32e42b8acde9b4776fb53d3a860049e8287a0039c5a760e307c0b1da3ffdae095dfadb2b705e304bd050ef831f0671d892fd6b76dd47bfc83810fa04d8f092227f39ef035c17aae5994e24190bf70930593d005264d50f8ae63d096d82405243bbfc3ef3c8170def85db6aff4c1d6ae412b6bef2dae56981fcfd7c00e529117d2c27dd095792f9cc2b04770d6cc8418ced5768cc4e7cc41cf0dadd5f2d0f22a9f29a996680721608ed46efa7473f5851616064b0d2e112d5c4303e2d3153158e9c0f65e733534c362871514a622f46ba05b3d051562929b645918ab985129b1b4519fe082e648a7c4a29893c117c45267e045168a49cd58ba26311468ed62129d5443044bbac11a17afa924d904b96b0075fe20871547f20c48d4e479282716f8ce2be996ee2b0b751f46056acd770ed6007eac1de88d0ab3e876f622f58c5effe3e1daa36a52da21bab543f7ab0ce75298a77bac7ea3ce5ba3ed01fe233b37c85a3f6dad87454a41752bb4a97c1e624f8aea84df674ba2b7baedbd3ac4f86fde95039a4243cef1319a1c2b039b433715a8afc8e3649809ef8244c3a59cb7315a00b53762ba0342cb3c79cb24ea58abafd4c62005794c3d3f3ad50b1f6561be5809c1cd9473093865c5c7f35ea486e8a431bc372656066f12478fdf10a309eac0cba6c53863d1c45ccd952180c54b5d57efd20ac590af32fc7a19dd93205ed173803e571d60046ab3f7d8b056a455659a4bce0aacd5d300437fad15d4f3190aa8cb3a45a353426d3e803b155b588752383eaafe259a1c64f4b60d92787ee516e4aa25f99ad8667fd98540e1b79efc8509a98025091eb1b71e08d91aa2e18f53591072ca657600a712eb3cba2c4399bb7b5bdca0f520fcdf938ab3dc61b43cd9ddd5bf411c77122d3cf07cbe6b5e2260a63364d69afee70ec64f6b1a50100d6dd9aab77b4d861c31b2ddf44b0d34dc3be45b27f0d5f4bb21345bd3856d28701c54d9c11f550c727df124fc1524fd2c25d9210dd6db5c77522c10121a1d55a150cd1d6e18fe294b6aa3671f1d8816861c3876d8445b0d51d67de1075bd6a9212859a6eeabe9253acd8ec43058b00bc330725c475028553d55c4861e73af6b0827231a19a007904bae6f452f7c579ed2eefad8501b881b944b7893e2a174bd8d8e16ff57cb0bcec09f7ad546d1bf2f87261f9c2942ba1b901417996887b7a38d84d8c4d84a533351eaa74471acf1894804cadc85a29db7e11b7b2c27073478c845b92f7d6db825e453491e65807c9c06da31f930433c994d9e2d2246af84d52353f91107398d7524c4defccdd21d9e2c61557e42286d668980c070cba2c3935351944a841b96e0bba1c42ac31aefba82f5b73aba03f538480f7e20ff8e3732ebbc086dbc2199c8b4ac071fa8d245215dab486a35f37dedee2e788b55fb3064a7380b0a59d27e444b93820548d25f1a26289106e9efe9e902a04086f82cf85e02a0cabc3ac83731674741e2f26edfc935e7f6a099d266835545b943f9994079c00325ad03a9cbf79f5f998fea73d6df67d10725103165175957b53487229e2773ab9be5d114d9ed74cd232c890d1d192fd02ad276285d3867799c86c2cd11a3fb1ee83482c62b9545300cf80c6a7492b04718a64cc4654caf00e582bf8a44ffce05e43470359f2f8ce84b910a23d6f0a5e7d215c458285b4ae76e2ed515343a793b0a425985a3a3d546854e908dfea84bddbdb40b62945fab2cdc38aa3972906be3a697524f3c6d80e7f225e289442efeddc5142a0e7893373b99178f9ed45aa075206d175a5bae4768a24edcb6eb76cda97eb8ae9b8f33ecd3858a4932dcc74cc3f1c1070c15006382443cf442af5c970fb7dc371193030d3d6fe485bee4c06740f959710d82cdcafc99775758826b6f7aab357d26f6f09eb4702be7b095256a65375a39c30f66e573d2afca25d930fc2a9198bf6f22d1397ab1117740521c02a393d7cde4b981a8506c5dc26682f6ba3dfd713cdde311a8044b183bff958972427997e5c3f5730569a21b89b10c34656f40714c1daf268f1e13749cb20de9ef164e5b0b98dc17c4d2c86eb0ae1b8a9d8910539c1fa88ba8f653e4c304400f3f57387b2460fb79fe75ebf29a0830eb59565238728bc32ff6df41a74b3ab9422b330ca58512ea794c6fc151b3f072e681dd23e0ade9118fac3071f7d7d1eb35ca0b0da9d725d63abc1bbb57da17b97d77dc453b3b6865c729a984a7c34b95d2f9f4a1ed9e5c002fa331303c346025d66b8c9ab8a64c2c1bf7dbed3ed03dca0311db485a28bdf10fb47b7572c3a738d78b91bfcae9bce1855e387c209865b46d4abe04fbe94d847a179658f5b9b2b4abeb9d39af776a63d5295975debd277e9331ec2e2f6f7414dbcbe7f08af0dc39cd91224b22837303cc27e29297ad4e64ce371307ed44b21417b0de6d4e98b20c7e7d9520fe934f62ff5ade2fc09cbe33aefda0f62d31b725db7636a4727b8ea9674fd59677e5808c954b1cf1e07f88a9ba85dc82363fe21ae6d09016c9fac395c969ad8675ebb9f7e14e8affdee7dc8e0e960fe8e18165d11dc0f11b6a607594f84afcd45c6ebfc408ca28bc9048c9f4a94c11709e0f2b6d50f96b9d0be60410dd7e3451f94ab41e818986c81c4412a305a289723e8ce02f2b1308ff09f7feb978f4b509e1898990c7e62c650145baa1293c8749b842544ce272dab3706b3731cd4a28df382e8fd72b5ab470a4eb39e38bf56f643aa5e63cbad6b2625aa44ec9edf031ba1191c9d0e44b0914300e98863159bc19ea0e53aaf7cd98c285650df953ffc02113c58f1133bb26c2c23e3ca58e89abd054512a8026319870be843f4857da3ca800d764642d638aae16efcac2cc71c68d9c1fd6d6a3ac5abd231d57bafaf372fa264a6ae251f0825a150a7c600e1c6386050d571277017125dde7641a7af2ca9bac601b4774bfedf4b2221f6401b44218b749f997dccc31bc66829568dd22db0e42c74cf0bc4f00caaeba13d0f6eff068830c5aa17949264a7279fb100f2b2889b61bc35590833e69272b5db09cbc8e9f09a698189bf52e117bbd74ba1a005744f48036e943ad194e10eb51b65911de10161bfaad4ca33218786f94be426cc9eb7819a673e9fd3326171ed459c6cfc34399db84af1b6b7552694855a66243e1e2ff84952fd1b2a961a15b8a9685492c7970e20a628951d1a08f3b0611ccab425e47faac5d82ffa41b5eaddf57b5498d4771524729aff9b6a63acc67694259658e7161f3c9b08a851b5349b3ed4b82be454aecdefcf6f9354cbd76bf4298b56b4aa8b9c5b256f468aace89a5b86030ecccce04a93f44b22458b319626e1191ba39c27b47314e0cbc32d84b14e370437e0ab15bf20483a24b0a5601bb55f2d6521c88077be08c43b17e0d471770a254249443a841e57f50acc975cb3f713dc0026db32f06d4fcd5a437a888c12b46613cf13ea7bf577d6b3b2765a9eb388f6cc40294eea6f363c3d3d17d44868c18c4515b131561f3d5cd1ed78fa0b4d7271aab7b1d7c2666d5fd417fc04ccf04f59622cfe59af0be1d168875e7033227c45b9d1905486c23cf045e85a77fe0bb709b9175f1d925b85687e1e7f34670b9ed7df890f7459eb54f94c7b4ecafcf137de2ddbbf4b3b42c1dc7234b12b909766f529f924037b0e68ae1ccacea52ea0b924731407a73fbc8d0a80ffa18b697177e6d793f50c0ed926f38f85593a495230add0f240f1024d04d84709420685c9cdb9bc40ac9eda8f66c2464bcd49d0cd52a860c9a8a110072237a90c1db2258c64b4cf3066fcea15e190d7b2d7596a28c9846472e51b881cdc9b838927abec86c488432167f6c86bc671a48104f95e7b90832b6fa97a45d133112e93dbad3a7d8eed0210377073e8a0ff21cabed5e8094233652a817b0637254bb461fa49efb92500163e2962415f491ca9716f851bd063a9d3e3ad4a8560b34cd772ce9e15526d68afcf47a40d7d9ea1ff3baf26ed4bc995996ae2f035a23c3eadda40df2f544ead4c1d310bab3657228d3b4d1a6334fa72f3bf478cc1ee56d5f549ba82c7446149a29a2ed3b8dda4f00e25060cc4709d870dc1551420541ead7395e8e478ef515dc46f6565f9c2884a0e133e79a8d3e3e369a33d98ee59c384ce508d7515c57f02f7087fe18a14ddd2e542e43e9980adac1cd82bed10859280eadd1467d06f639d966d094c2018259d6563335f4cb98cc31903b841b99fc33ffe4ef82105bc965a6ee1321d4c96aa220f2e1a9b3f4f5d44ae734e90a60eedd26e4144e8789d3877686f5f5dbebd031195b2dd00e8307ef037ba6040c9770c7805122c80ab8ab1ab286214e766dc930ea5200cff964e0d9b4d985467e3a26f5079490842b2c4721739fd01d9dd055ef43f2cece79b60038fa5ab4b721eb00b36064441e2602acfb00b5e442f55d61ae509ac2fb0cd9e3992d7f2b17c4000928a68c4531257231e85014d206356458bf128a225a268d7be5330187f0e5f32c7bd53a8972a2587fdf8b5e6d4191d90e14bfa1105b7946cc5811f89329e02fa6c4129ae47372566768018c7f525d6a4a7b177553de8cdf648c17b0173212c9c9740df91b72b4ba86ee7ef200b13403ab8adfdad3cbc79e9105a442a4d69f80734089544b9a3c02264313e74beb45fcb6a09aaa2419b5d555cbd2f0c9da7cc3d09b85c9b8c420bba1fa4d10f1d9285389846806a9b3928ae088bcd32b739c80ae11e5198456177909fe7331f74eb4c9fb54dc84578a0f6025d02b317ff59f0283f94b1dff8d6d1c48e42d8596934b75ca5a2058aea9cddde41eff27434deb25a70e19cbdaf7aa3198b810bd5af793bb0785d1a07d1efc9730783b9d43ed99e419cd62ed4001b702ac11d7b9ff24eee20fa225ae22d121cc5bb543047cdd83c041849ab285ce2dc962f59ba48375fdf86efc66bdce3c0c16b614faff1875d3507449641ce73282a8a86aeef2f8c2a8d74c1844e4cb25f0b9c7023425c087788e74908cdbb2a86f5d710ef290a46e39283c46b211596dc5a43943226596aca6e24fc8d5bdafd97f9abe9e8c55b3b6cbb66d42418622e29acc28629d65aabc006ea47249b0fd49dcb597dff671531175e157761546022d060c676730edc5411de645612cb38b9f231cf2154afd87a427e78b8b9b94623494ff0dc735eda0a110249404a00a5a42eda254025b8a8aafc6cc18f801c7d4c96d76c1873beae222608987c520bc7328b68c60f43f0682cbe6ccf0496df9324a73015d55218198716509d611c25768c45de25a6b39857a40cbf63ca483c290e0f4d8f5d6b0a268806afb3ad3ec23ea6eeab8e012fe9ec644067fd38eabacf3754be6766c75acdee70534b07fc5c85179448cd782336870941dddcd8b9980cbb1600220338109d4bf1641f5fa912295a61635dc909018615efd07f04b9fc49e70132d76f0b692569a08fc04117904995680f19a83bbe15ee4a1033810052ef0dd630cc054d6c74f40d36f92358d750594c9caf7a3bdfcd76955cbf77a05853538b44d858ca3028700e68e903dc589dc8603c885cb78c82f27c41f80dca52e99bef779b477da2b59c91269414758e69d53c582606059b0df2966d0c700dd16d27904739c3fb40501dd38475a8f8c5e56b47c621e2bc0ead40116c6b008fd488b4a18ae39a802195b37ca92378c02d1fce4e5170fb84d6d98ab5cf98d8e3b66438f12464fc054cd46c1180553e9308c4fb05fb568e33162df444cb019694b28448c14c27ea70719b6f2d372a19f9135fa81d31c74ca1231ef597f5ea80aaa6b0027216be9b71b6a453d1ebb96c902e4fa74a99a7e8dc3a398023ca7c5d2b4cc8731b5c0a437b329b4bfc212a534ea19777e9e41ec6398d54f5247a6b1eac600fb3ec0fb7287439565d7cf974a7c3a4d01b685c2712b51f4cd412769efe51b231e42da35ab1ff643f48a23fe5f41a5b3f1a5243b409c6ec28a71f74be9d2bdd72d365cb86918d368d5741306768e70820ec54186c7843050de2c119899cb20d67abbc72f150d67f3195ebb7413067eb7ad08aa352186aa6bedc05dff066efbad4e1c3dd07f61930909fbfae13f73d38d23704307b30677ea064b3260751b351bfc151c90fa28e38621ea4c0e140ccf917b82232807a049d67aa54004f2b66aade8ed57f08a926f61e3862956a63a306d6a23101fff1129dfcd7687daa2c1a27e58560855afd03ff1654e0da14df3cb9edbfb066a700511d11050823796a9f98685a25d64b117402530832b41bbcc31adcaf65ac325014776b09b2d891caa0aa67177cffd7d811aba401c39ca6e21901ab400198648b37f8b164e7b305a2ee19e5eea8e197d1cc97a078f15d33cd4288c8677a658670b6b7748e35b5433de12184c1ef2711cabf68103c34317f221fd95b4bcd5579530828a3db1e6c2413981dee79345b66730fa5a0558b325f4572ece5d5507250c3dd74e20041ca34c12a065b0029cbda44b48e9d38ebc8bdc97d21e5d24952f8d89109946d8c13f8de12dbe2cf0cfc612bdaeb3568588ea7a5d507ad09f6d3c81dca5b80f3bcd3d1b82595cf48fd128969a77208f62e9fbfb871104fd34cae3d33e70a447c12ebbf2072658083d1e13d643f4818c93ad41fc351481f20a1b7d0e0fa663099ca9e5863f15dcd13e1f44400efc9f75ddaab994a75cb8c5d80d19b84b417544c0ab220bfa1757cfd8ff3941663c6e0a117720926c8047dd1eb88546304b9901782191f6d92ec529ffa6ffe8c28a1644a10699070ea0c3fa3fb330b9341431dcb9cd221b5c88767c90c664226cd47817bd38da3a5541d46bd8413b1afd86994042735c51a43cf8d6b24a2d014d2ebc1a868e053035fe0b783464ab5444722c5e8a1d26550e94ece2d6c39bcc5e49cb242c0bcabf95d0c2ddc42307846eb567ee2926f3504aa3c3c8f14b9ede89bc04fa1307be869a6db9b2aa0a12dd504e88de4c9f90c61ff93a71b81ddc736eb26463c15711288e754b987ea019dac90addec6be228b5f37b3680f04a7a1c12da086b922958e9a54405202db06ea036f98ba7ea935aa5d8ae44c976094b01900ccd050337a7cd809af6804754118e3002633597db15f6a768a4091fe802c50f432123f0dfb53c731ae4453ce8495d6db0bdf71d6a79c914b4de7217311b30b4a5e72bf79898bae702e2f60073af58138c74e7af2a9341035f7f319971084e840ad86c1461d1fcfee8301c4f6c3ce81ee01d311bb3ad3bb47c0d2e92399fcd6d5218e0699eb9e08203f517f0bb534d099cf3908bd9f9ff46decbf0c448f7893ac6ab8c9d889783b535f20b18230d13d990068dc7c88de4f838b7c9fab40fdd10a35f7986de609d577560d65a9dda701c46d9542e39c0fa60ce091ea324d7bda4f012f2f50aa30d49cc19cfec7cc4733a90ea42907b43a3bd75bddc26eadd1f5fbfd22115118a416bba454c4e778c646ea77505bdd90cead25963f021452a398f7aa2a454ae3222bcca60a389c966a4e403d9ce08d69c7b7e4bae5bab623c9bfda5f12c33ca109ef027d35ce49633f81321daf7df10fcc92cccf6b850368f573d58da8a676fc2cd3a70c7a5a1d36dbf9bde55cfc75b656d0653611fd0ce13ad4940405093fc51c7951081651b54d8b08b564cee2c1284f4313fc4ccf1fbe2d0ee043c8230b0920439f33b65347f70880d2f9d3523f95a8c0f1ec5b42bc08abeb3c694720812a2e6199ccd1e18ca5393967a93e7dc56d0d022760fb69a65adecc1609686406692646abd9314a839a51eca3cfaf14df3c61c29d9aa34c482b059a9104f4b1585e0d7adac09d970302f808ac48524e2abdc5a46a91b5ffb731485e0d4b5620489f99b1dad823a65024520213977d0d44a4f05a75ace67dcf222ee4ddb09b03e1b57b3735be0581abf7d6087fe5baf6cb6947c1298d3c4bf82c914e13d97ab729d62bd454b21a4fc6d1f82e1cc64506dd381d6125cd1d7706eb6b3eddb5b55e0bae8b7b4e4803a52f8f62eb29b4961bbee37521c5e9a1e0c537d57f18f3b69bb668f908864801c8a879f93f6e804c98c4c8b47d2b0415702bae061f5e3928503eadb4104dcf4af6165c41134fd91ead5a06e4a0651ca082ba126726d4a00c72a13ca666cf9e3931778c1d1e3311cda4d25cc005988a92460b8ff70eff7b52cfd705178972c146631a7887203e2896696a1d580c356c260d0784a7c89a32e91dd3c26ae6be0c2d25eb9a6b83793d7decfde68541d2f6b91773d4ecee3e375d14d61ac07afd5886db28aa4f81a95052e1940f8d5c34253a6baae30985d0ca7ccea41b017ffb0133cf2939cfdb0c399ab552b4f9f2e93accfff47911957536419e66d0d211f8dd93222a9226f5a617af35a4ba5cc480c1cd144d658699cafa500108436e38f17a55202499faf3b528454d9dc6c2837c48411d67da228e1ea052f57c746ac042d93ecad7e51fb1f8e57dc1a9b9860546072bd98b1a5d79b3dd9d989b9f60d55117f5629baa0848ae93453e3c374db66ffa5967529f62ec7f747438f1d85fe53923538c572c4950c93b4a1033a5a5512840ece93e80e128d361f325eb5111e7a6b8bab0ad98ad4c73b877bc3f8b07d69637bd1259e2c5f6c57e4dc9b69f4ec525edf54a2b4c2ebc420fa665050583ff24839bdd92dce64b27da6b4fd22bf437be47ff3ab2a98cc17a7f581bbe45803bf365b846d3a6ffd191914554829e1d1d6454d396c5e603aa814d90884d4b15859bfc416f08af9a36646247372721ee5e6b6c8385e1309e683960d972b99367764eaa519db02d14bd0e62ac130568884aa99b8a3d858240de1d72af72c22b5f0715d20b2dc8a500c4c6f5e758e156a58b67aa5c8f32ed20347bd103561bbbfc47795bfa5f622d084c843fac9bd7824245ba92ae1cfdc6c71419ee02e0e003dbf9abd667cc3bcc292276071a6d7f5961568d6b98fb942937bba8977f324bc39f198549fee2e86115cb705b34c6fafbdd2f3a7b22e5dd6b21f6137362f20b3ebc3cc624c0f139501be942fccbcea485da109921514a9a9be08e8b225dd99645d6b2d12295f2de9d69982d3df581398ad52f9695d6a1a8107b92ddca0ea88e2bb52eb4092b93d7f29d6d5db41f0244f36d158080520e5ec49ec42ad39f613d6c69371fd2ec1c3e241e24b558cb44411f27e8154435a46728c917ce207845cba4782f8fb4f5de858dd28f83498d4ef69f50dd40e76059e31a6a3248dd55de486c8297ea7fd2e16ab61e960b5383d8d7a9a148517134574fb57d894d2306c62d1f4ca4a639bf9f50ab346d65acb5a4778ced3e4552f4d9b7fc00f5165859cc941d74cf095f707fd8e2481f03005d476d4ecbb1df2c39f867c01d9475a2ae429902429a52b2d3cb96fb4d039138d721b48b136691830259c0dd267449af19aba4fa574c8ae1fe97564ac2432b490ea2a7d89cb4ab70d6732f9ec8070c329f52e947f1814e54738556f05846ac7e1731f4bc39ba45f07514baa0995eee7247c82e9bab8e8c84fec2945b4b5cc32fe7437ba543ded50c8f920a0fd129201d48f4c00ed1d5723e292004c5be54de8305a834ecc120ec6ba3d258dba107fc14e4b7543f6b56d440fce65a9d45264c92b6e95da24f09d8ea9a03f14af11b225d0931a43fb2be050334b74124d30367c5a2dd6f66ea813728e25f0e37be0475bcba33482f94d63967a8b643986c6d31d70a757c609dca77eaf8e56b5085148eabf9693c78b86e05a74a7c6cd84aeb5a4e3838655313d007fe12d06f6226029ccb6374e15c683a1d60d560b1bfe54f55f43d276e923227925793f70532dca4739a1518ca032716e47c35b2ee167d0f246a4d9fc6bc34e02b94c6786064b42d00062c2da59908a6a182d8952bb9661aa45210639f681f0df12a3e648cf2d43b00c4b34df702f210980d03131a05a1426efcaa03758168fb6444f863960555911e3bf52e58910f8e799933b9b8a5fac55316e80697e12e509c17be2e649715ade5014bb82ebc02d66c24643551db059a1931a1080dfdd597ea50986ffdf99ccd2e28bb7ab97d698a54620ffe9fa6a15f49c63e90d3c2a97c99c13a9cd61c9871942bed5fdf82a6d7c000f3841961024012191e52e5eec6798f45b6eb178b0b410c4d040c0372b209b6c742a380de3dbd3ed0db8dccb0865519929992059c072b73a9a7725e4c5357635bc4bd99865cb1554603deb49678e994e94200104bae709c5e17c8eb85f8647219ae73ef7c0babd5353e87847915f294ce73353c570a23b4613aa15e9794e8c2f5a94c1b1247fc47da5846c0e9a128f8c5f302643742dbd7e3171c04d8a6c731865ea6a1d89cb1fb419e0e72b0f319265289209bc08a3cce992906a63a7ffc59587041d66b46fcc05ea4820cc7c105e5c392f573665c3d03a26b62ed22fd21cfbaa0629194a46dc0a8e410c451122c6333ac729564e6042da45aaf46150aedb8290be70a3429ff4a11ccd258bac94caf4fd6933f18986733c6aebc8b236c6cf4894c0472b013430c98cf7a3bdfa2baa4e7ddd54068018b721897575378d87083e2453f03f44caa30d871b6192f2ab0968b07a0881ecac03357eee31fbf9c1b069831a54a07c2e01faf4a5d66e64b027c4264030218cf86b5102e10f67ed21b012a3149c86f58a77140187912267afe86618cda2f1a93c2cff976f62041cde0f918bc76475f5fedbf18e609c1e31daca3684d9a1b6bb8479beee76fc1bcd1c3c7182e10a0496aa73a2db15d9ed40a904403e156bbc9846448d9fb8f1b9cb511252d850bea33a2537fa40ce84d501b7d237a1c4b1958a14f3bf9aed12ed6ac0e8a17edd36589e9515151288cac440d46f6567f0e65929adae4ba3a3075d33481c182c4d3f79a1edf840d8326b88cc4ffced4a0edc94f190b9c0f89b99dac965a63549ca30f8249ace07890945cc597536dc68bdc9abaeab4f31974d672e9b9bd3f994b2d743c61870e3938b49e101b038ee9601220366008bf0e78cfe170ab09a6276c8385be9607625af32cabaecf1457c1d038b4b2236295967c82b60e01571de90e2835bb6360de888ff0d2f84823a94a19a1f9f56968ceb4aeec0c482e248a208509339f16c4461336d928bab211415a647f951b8dab66b6e828c11cf246a17ae11fcc149217f4a1409b664c54d0a9092a8943c718357a4aeb91fcf0cc2b4bcce39e8b290667ee771b761d752bc10d81d9d3b29566380fd50e594c96a2920f369dcffb2932de67e0eb91c215abe4af31c9b9782b6fb8a8a548342c07e866d505d5526ec0b40554624add25ccd859f07550e94eb1f704c359c150ff2f12d7ffb17aee594d1e57fdccb9da85d291a8e01ebba138ce364e592da6e363602e9a3f1cad61c391498a20fd1a469192a0952993dd064e7125c4fec07ffe87725e27444f6d8fea7d20e488401995e2d2fb44356dbc4f535f792154d77174cf90e8a1df44fe4b5d8780f0e7a0590c50189cd64810e0b56df12f69762ccde3c87453c1f248aea60f51b0482acbce9348a0394aef6cd501bc3de7fb054b86b6c3873c59007e2007b03c0fb27c30b38b8a0efe11a4b6e240781fbbe08ae526f7eb5576b14589971b4b959b4794e1df80ca43af7e47989dd3e78d92b6622efe150b85a53ee00bd84b4d0754df41b9371c37bc53d93d1a3d213951f56509537d724b09d0db0ab300553098b49e5b2620d4a36c52aae348a5adcd2822d9cc00b5bc55d65e4e9f7aa8267eab3a3e613f3f695ccbb127fab3aaaa0ae4e61cf15e8e3677929fdfdfa10bdece681b394f05b34998b97f581358814908a236526d918b25ae82e33a7281fdbea589fcfe7ededda49975a6d74359e0392445a311250c513fe0af91c2ab6fd970c2c19a73e724120a03adfec17ad992d143aa31da88dd5538e77e33b79a7ff131d5e5f3a67727312024f6cd6748b40145b9814baa75e1d7528c8fbab06ef59e87ea8defc116baf6dfacb64373bcf97a6c2ac0255d54fee9033d638e66a47a46162b25d3409a4698b9fad31de5703d84ad8ca6c08a4dbee186cab90a5b6f5cc4e1ebbc65dd6b7a2cedf56cbcef885acad12f78dc4ffe56b9e5904810940afc3eab08e31439af91675996392179e8185d35392316f1c8668ac162aef4c9ce2e55791c9c1221415a93335c5db826c0c0737bbed352dc94703e1c430740abf3dd179838e69d21f731b30330e470fc699c202c6d83d46a367bba3ade452ba0ad9fb877f2c41eff0f730b86b01c29e335c3058e116f2dbc6207f7cddfbceea2b22ff0e29d2dd6c6f1bbb58699bfec705806785330e0ab365cf9f950217fc49a4922bf72c07d756938ac6551f609ef83a4912843c16f701a666e94e25a94a5882cddd393157dccb007422f918310b2c1c22fa815c2a7abdc43b685b0da4977ac273c8125d0e683a41b922e09b3d4e27192477f95f3228b841027ad4564c9eccc85f6d2023676f2ae78fdb54bb3b0c96f519b52404af37ef315ddd3164b6625437b8bd147ddc2715184a2504a5362ab8840f71e00b52fc0829d10cf95f620a6f3d7f46d484109489c588574786895716d71a86cd8d68d281f8459dda952b8ae727ada2532fb15b73a363dc1d8aed349b8a729f1e87bed361a1ecb5d5414279e38beefc8a4fa15ae18260022a7f28e99eb088507c226ade123e16375e33b3d92aac545ab84f8a75255524ab7293918a361d95ee2cfaccb5d569d441bc820625ad1a658eb2b32398924160b34304472cca3aef0797c5ae2fc9b2ee4555b32d6ff4b6b3c072b3858e687cdccd8332fc2c9e5e066a21c9faf8d256ede890cd8ab6738230c4c961fa97fe9c7fa0526d5be393712e8d1c42d5049df868a6e5cc9cfa60b790fd099a89c95cc20f06ba3546b7f2a2e69dbf9ada3cb88ec64d3d4c7ee2be92b25f2012be5a5c284f3a38f442ffec0c5a08a2ee3311a6eead7e4de635bce0b572e3346c04847988762ec1477bd3b1e27dbd81de1b57c30fe238de335de679fbeeaf4373343cba0ddfa780a678bd41a65fafc1c1b47efc905767cb4788d7bb5857198706816f0efd6cb6300f62eb2f19609174672e5f42489b7479bbb72a0b79c99deac1725872a32fbf16c17ac98da27e09203dd29db97e09202dd2e52ddeaa2c64c9adcae0725e72a7afaf61a44172a7a829614883744f2b08ed45a6480444d398ff25b467efd3733fc67f73d60bca83629d4c7929bfd61c896b4ba746abdb3e274db1afa95ee670e56ded3a97fd769657bbfcff2c07266cb816fbef3e58de2983d324fa2df9ea26d261a347de9c1344addb67921f04ee620c00f86fa84236d36ee3093e0d57f16a0e11613743d9767e2dc1fd0235609fe300348c3adb025a100178927e285e5d10e362ef9d0b0569ef1bac7607322734cfb8dbe93a37c0d6d0136774611c2b15256002712ca89583dd63b215bf08f7419ac1e34533317a928a2d2d911edd6478b6b69ece4f0192c4f6b5a1baef6fcaf5f0adf02a8f8e402a03337bd9344b5338e8e092fe28a9276c2eb42217dc7239e8c76faf3570584201f61e32b42453962f523396d927e3ace4c82f863a242e6946a5f6971d9c7af9f034005de61c1ac7c1797a934a76e0a8db4834df4d99e69d5b47cc0b725119a6716a301850144059dbe18c01f64ecd8cfdaeb0cf167820b83b55ba7c476d62c8dea371e49f84defd376c996c444d67a11cb667a554b8a59ee8297ecb37031a34358c9b0358a5d409627fac88d70d45f0cbcda0f3854eebe31f07c6fa87a37b7775eef1fb6e46c42ae9a526fd0ee8df904b2b8afc8cff29ad873338934a5773a3774adc8396f5e708f5044d22c714c6099a109f062f420fb3b6472610cea680973b5e957bdb4068e68658452e8ba0f68ae06acd85701f07044f0cb043fe437ff1942ab05a044d1a88b454aa633ca3d55f8fbf489621ad2f7ba73e713b976db8bab6d4cb00ddc8e82684e94b2d5a30be3947652b1ad14c4ad1a43d6440b25d825499aa5ea3f0cdfe4d21e7a61165131ffbe651d160e890cfadc7622f57cb1c0333a01e5d93fd061fcf024cfd01a7fb9ef1ac1d36f981225667c14a35e9200c41c4ac3693e302e5e16edcf7ffa07579137c04d0d2045b69e918d3f31d6318c763a1160e6d28f0d6a84f4f2db2583469aac34c6e95052c40030282845b5f413a1e5b13c80d41973e8a9e66faeca402970d584680a1f58f0c7d3277619dcb6f86d561aaa7981936a9de339b8ca56a4a5864156fa1fc82ead298d624ae49eb2845b2ececcaa04651661e40a90912319f83019b6fa8ace50c2af8c7daa3c4a74219d88e797a03e764cb302bb1dde472b95d9833b276e91b37e81020ec55d23dbc22fec161d724de3aaea1f5825b464c0c15bad9f64d2f37879aee3ba71f8eda2d08c1308cbde756315a8ef4b40b3b410bf4da5d46e1dc0fcac2942c78e54e2c17535b2281ce2d20aac0501f41e22e1ff93be2256896afc3225ae2626391ba355d69474845c391e5dbeee2075922bdc14e6a65ad810d689c0cbeb40811942da49385ed789ce8f01de89487bee2834b62f94660baa12d0b4d80c98733bef364602014eaa0c31ba3330e0e8a692ddc3e08d6dba6a081a60a8af8cecb22cb4ae3eacd6256b786cda1762230d663ad41b293f6c3e452c9ce6bcb2aecfd93531bc0a47ba51dd896889dd7038eefb8480f515ba8586436c75f0ca5b48890d81ea0b6cc8e0d6d0efc1b370a582098db121a0a9da06ff786b2b71dbf062287d649e19bab6d2fe4c28063429f84b2f88fdbc6795569f33ab0cc5106a1e51078e6b52a3a957fb1b883019fa1c1a99ffce368851ec0c17ac0b838811c2966fe38ce66babcb192dd01236e478d00a472146a4ba0e1a45dfa07966d21607120d6f6ad0564ba3464a0834c86bca429f5e3bb822db1849652cda10e4bcd2d1f3efcaa637f09e776b994628151f98f0b634fc67258818f2ee5752c906876131b7ae75ad751380a6e22908e4e603bc812486130940c76f4aad1ecf9f64390b61e6e4970ccc212c9850edaeab9a03bd7e47c7086f658751988efcba8e62fa60f507db9f9ebeb7e28e4de592f33f045bb1e6df3394618c3877d696cb7df5118201db0d5979c74ea207e0898f2897f4bae3bab94ec00aa2aa60f9151a975750f8e30b9a8561383f6f8fac2d43c5fefd182dafb06e9b8809980f62d38a0fcb8f2db3d06b004c20defa6a4ee1475ad53cf751055b6a2aa3f7c35ba83d3620a9a4f14bccb764889c1458892747865c94ad8dec85f03ccb32ddd4a5a04f98a7b8b3b9f721911a16bf644e494eba0dc369f2514adbf56513724df687ee8028bde786f57fc72ba42fa9764bf7dc502f144116b6a4ba414b550c999ae299b9c3183a4e73ef3c802a1e7bbaf123f06e6e5d2e47a3692bc841132aeaa8686016bbe3988719f42f2ebd1f7400d54761782c69e3d80c1397b673b2b19fc7189656dfe03d5e381174ef04aa4a33b2e832c5944f933768eb9358144a80933336a3654c6f9748cfce890f814eab5071bdf8b899cf4634dc75f55099bd29d2fab28cfb949941651a7f48f8851ea3c86b213d143d2d36bdd74b76610c98b9b9f144ac9e5c1a60dc7fee21fc89ab4951772d4d22951817be738daa68038a9fa0bea927d884024deceb1cc68e997bbd1cf11a8887fae9219e1cd521385070cd9b43355db9a7502022a3d0288f05b7f0eb84e70347837772dc29b8260556d86b0cc63ef80e5c3d82b9c092a15ed444ae6497c9b6e48c92d7e44863114072b1f30d27b8e50a5db31bdbc01868d44b721255bd0b32019c8042a6dcd94225b1d5406916959be8523b4d1279b828dc467eec9b996a8f3669a7dbadb819dec3659eb64a1b7147385cb62801ee1ed5491191eaba716dfe280374e7bddbda00e4ec5360cdf8290f61e975ee403df74d327ca745a53105663a41449679ac0c60fd018b3ba54a53d287ac7ef5836da2f32af7b80feeba474977f30721d75535926697b53608d71984267cebea3a7c4074831978ab6364ba075dfdf8743fd4ad28df58747dce8054c7b042252a7f3e7cc1f6fd4e9cfc95137353de510b34bba1f106972e2adbd367293e77802615e6b438e9940b696774ad61245f604d8cd670601d314048cb0611ede49dab1337808f3d13eb68fd82426cc96af09a878e3228bb06ec0c2a26e6ce9e00998a72b710f8522ab6ce5d8e21811a00cac08f388013b05b2d5d63331d8a732c6064ad37b6cb374d5926c9d768006226dad09624496ee56a24da2aeb03f3c4e2bc820da4ba4bf72cd24dc335c969e3be80a58fe42479f23ca68ee4c068dc6005c628735601903b96e9b9c9fe5c6ac43c798e736aad29a4e1430d1c9f0591c55978352aceb8d4b0ae745b462e84940b90c8d25b6f39b8c826741885e5e8ac27fac2c5f107f1e3dbc98e330c67a074bfb81e4500a267f04f494b7e62916ca70630560350e14684d7e634d2b96d06dabc602a23e2b3bae840a6b97819259da16d36e2a3d9e6c53cb2d45f62574667812c1ba879e315e09ac240176c1b361c62964dddbe0415d4c6d9477d1159d4c5fb802f1190d6d2aa82074b0e8d5696284322113fa1bb9b837781805b4c38c6a734e1709b5675479c228c4084cb31553454063eead5a575cbb472c815d34e709df57b3cad266aca0ffe1ee5761a7b9253c1927f5a722939683285c59d26eb232668e75ea928cc32dae6dc7955cb11973bc8c2b3018f1dea21fe379b2c991b29410301dfa6247110e1fcf90eaaba514ef3ad2fccd004aaa00cade4ee32e32d920a377c87a8d6cf9f3bf4e67184a1b54a47476b4256b305a62015ea6f22d702266b01a6a5838cffe2d97c3965f80bfcdbb37df263f527dde831cc60a84422a45a0e63e9c0d6edd037f139fdaaea18c01461aec46c0f5a02e49575db1fdcb3ef1cbb2beecce26f61dc6aebcf81520bfe212cfe367ac7d63316363279566dd008d7c99f34a0c36a09594e2da249f81e8a6694c4d4734d44670098236920e6778bd3f634f2a4d89fcb0644a8a1314ab333008e489478a4ad0284fe08e618056bc56decdd7d15738426ccecad56552b6832a0fdb8d9e3276859eef9c141244ddfaf44e8dee2e064edf06cfada1833479cf48755bbbbf83244f05ebe14325874f3c85a895e7530ed5c9762bfb52adeb249e9fb8e491798b2c2c2518b65008376ecab93e90d45db71e7b5c8bec850f14df9e60ea06e7f8bec12341738afa4ea9cfedbe512775ad5c23d4cb562c90ebf9578a91ae3dd5edf604a66d047ad2934ad408a907dfdd334daee253f833f395be4dc446f2a14ba15a016ff6d852c538c98270dd897a492ad3bab3f21fd19ffcfd172db8e9a16b83df0e7099671e39d54d54dcbcd7061a42829f9da9484c6cedf10af2432744a7b87ff549227a119d88fcf4222266c0c98474096fe0353c4feab1a67e02270bde635bd3096cb63742305d689aa460b8e5a0aae53bea07450e3d5627b1f54020624f472a52cf8fb95b579fec0c80c08996932366545314d11e1185343e57277c0c2693968bc166d10de620548b81a1edae145b99bc2f6d854adf4f3ec40780aeba57a6c9df0ab1ec2e12c7662c2c533821c1c34669b0fa2f26ea3d20ea0e47e6e38caf3b44253ab01d8070f94b36c407a38d98f7868f4c8c6beb79739b97fd6e1c93b350be22ca623547c5ab237a14e422aae0695410d6566d2463afda222e66eaef26a2c53d8d35c34dda56276dabfcb20e165ca832dfa0623dc86f34991c51802e1499a921f5375c42e93ffc0b001d522fb24cb461a6152adf962e2dc6696fb040888ca2dded642aac9925d8365225171f38ac62a729c52197807ceb809a7266a18d15f6e0eac82e20748a280399ea50a7022d47441015443dcc4e8f5687e1f1101b2414cb8f310bb0cfbd2a45b5fc47bae7f9e37f83e50f3eda5bba34b8a53f3e42d7087997b108103d401570c59fd8eb758008d6435e31ffe141de006a721efc6bfcefabcc68a5176137a72c192732d28378df2d16fdfff622a0f71790fe5490fdc8bd487d049f8a2f045964490520b4c26986046f5150cd69e64d5f81f2783eef578dbfe2d63ac887960eea927df94e083af3e2a614bc381d1d04304e45129bbf0431bd43d00fb29c25e22d0afb0e186252a09f25a19f504d5b5d7c50a7c7e0ab462f898326a74446d015fe70b394c9b424d165c89a03d148bdd2be4fcb8789eff3ec10700c280599cd365ba106d123edc26fef165f57b50f4644c56fdf30581fd48e25085d161885e3c25138af0a92840865bb089d3bed24ea90bbbf4d103c31f1553bb1b2ead388ca3c748266182e97dccb0d9d6a8fcb1f7e348178937ee04128df00ef9c0917e3e5201eb01f1997b553fe83fdcd8324c163dd240dba53b00598aa6c3b444af1fedb009ac37f08912de70f3f8140e59068fa7c5778b7d746dd3feee4cf4b09cefe73f232d2803470a0ce4d79bb95c06ca978ed4a31cdc983c8ba5c48ca8ecc8148db5b740387bcd1d75c2e94bf5e681af8c82c2fb9d32fa3b29d744e3e60bfa2a923a29fafc777a23110730e728ad6827510e1b125d26b58db1cd3d6fb0480dfd18f632360fbc5520e42001903e11816c2f20fe28d8fa90341cf06aefa24f7a0c1007a9a29789eff7ed3d97ce5ec5d63fea28f4c7b00d2a56a73d0b38b543d715b6cd2a57891cea334f3538bbb92375bc0f8f3976d1c47d45f8d6cfd264b1ba0c3ee77fe9a889178eb232b4e2d57d1ca5f5af1f2d59698c47ea9f6c2d7e3230064585fc5cdada12822d78e31fc6d6e7591f1c065e1e886197e5145175d17555fb6dbd1134149bd1e5684f58ab81799d70b5fb632f7f0a55be58fae2d66cfd6accf5d4f830d5ebe16d693a92a1a3e4493bee039b90dea0404af88fc4f402ab84155388a7399229afb352c52b3af738998717448f31054b8bcf6fbed49628ae31024d97e9a8e5be31e710d0d4aad2c7369d3c7c1262c10f8d834c6691b62fa9820c968264681c9f0d564091ace294eb9c27168429d94a7266b3700e7f7eed449c6a21580e3834434db849d91a299bcbd0bb5224a1f13bb699e63dcbcc6b9dfabe8460e431dd19b33d4fbedd5f5f4bfb8ff2f96a5ea8d2cc0c511371081d5d7f53fc20fbdac40cecb10d3dc62da9cef580dacf0842b6f71b7a083a1eab57dd8cc0dde33c2c24f779671047d1fac1e9af87ea8f96c60790a2db540ea77fbdc4ccd7ee4bf10d46065d04c3302da3f3fdad5a15cec9cd8b4762a13756665f049a63ddcec8988013a79b4ed0ffd6d284bf171b00228a23e3d04302c3f8bf62542c92f7c198eca0201da5679333ecd2947b1346da58428de848d0819954a50a40d19bf673e97efbdc06bf09f22ed4a3b42d520ef2110081b5ae40f4e0d541b0109a4200a0b4d9466a4e826ef76023adc9154d2e91bcdaaa679503051d650abb39a8330d9f2f565f6fdfa1c3c103ff8d41816595172b315b505048a0c7978f7bbd17fdf0498e1a5753ecfe58c46782c9a3e5f5f7d3ad7105baf825b32fff926061cdc6ba04053edb1d889a24a15a01c827248173f2d77568ae6b1e48dbe408974a2f7d20d0ee80a90ec581088c6c6aa98c0ff9717616844a52494f96a26a659c0a046d32b40d80ee8d320f9065add323e1caf05c7425035da23df0facb79fc00c37860e54f10742dde27b0ecda5060cf4cd9f050646a6c1961761e79322076f6f734ea73fa8693264077c36894795cf55872a8be54183b1a7b2ff858d28212a3281343071218f8562c935c77673581cde11af71e321aa696522775e54704474197c68c8b6127e2a9a74b8369bc528ca4a3f9ac8300639620e6801b540f74d38ac8a86a812581c48b08b76720690107297b4dc020003cccead1e2980e4f431f83161a21aba418169aa600a7f960d908814d8d3d3384d0e9ba49367983b5f4a1b7663127bee4621ed39dd5b8b281eda684b08b155a97d5f03ec8725053139257273087300b41b68a098b9c9120d37ea690a24ae4edf9cd35b9416218de365cc647550ca42695e1538fe1f13f1ed058952f82b22cb332ba629fb50b62ad894abfff081865a25d0878851b3ac3595298a03fc783b3e09e06e8a3f205abf2dad4cfc4cc30b81d6f92368cd77d3a009d5b1aa03d0a32fd4fe2392e3ae048e7e647a5439bd3d11ba3ace06b2a8d68303d7fba9126177aecb2f0bc9b2d2ec04201ce7def3d87a98cb360a9001b91dc3e523c7ad48b77247a0b1cbc8b1a50f8c87a6a8f29ab78663192b198d0d355207d438e6e58ede773e9864a184b4fdb2a343c857f1207a2380faaa8e792646a4526258f70a3402ac0fd52d1b53bcf90fa0f6ab7dea1a739e4c29946789436b358c68c3d92ba4ba6bf545d117035baba7673f46aa5cc6007e423fa398ac3c9b27cbc751160dee8903a511c838948aabb5be64fa48427a9820b5949f9a89e063edb9eabf258347fa204448c63bee17d26b582e34c6f8380362df86133ece7e21279b5a26f2f49a67753ff3d4dc901a00926daa55163f39176c4451b901fabd5f01381338d27dbfd0522d684980a266d509a820ef2eaea21552fbb8690a0edd9e34b8275b50af10b12431a8951786478e75a0bfb2b7e76025d49b3d66995f6ebc43a8976bcfb887dd45e12182eaeaa6407c53c5090026a1d8456fef00261dfc98ec8bb6c0122d8f18f721a6a17de81e788a6fa662771bb0179f333abd55126bd125910819bfaa372436fd4e0acd66d18bf800011728127e8b2aa2740f28945ef9018aa819409cda184d110f9eb72b74f865a070a0a272a019b9b46bb41fa5dbc5ca8df80e0e1fef2c69f10ab00d560a21b299cee144dbd1fba8bc6ae8295515719aca74db0a1820969f3606c06fdc215ddb49f0fbac3b18e4953e7daf525409b4af8a1cc50671f828764096cfd5f69a7ed1f9fe6f68277b760903a6848e4acd1c33f3116f7bfe007f41caf335e0a16497eaa6f82041d03c499aad22968042e8c43667f1e23bdc7ac822ca306e1db754fc75eef8d329c267332dd16f871e2c463217c50410e988c00473505e10f1e69a6dbf3dfcb0d361532bc82807c7b0dbf6e4bba32c4a8b13a55804f1ec6927d4d2a91e84fbef8373a1bceb828da13b4f732716ed4160326e2e79846ae8e3cda2ded60d3b441466ecb625fb65ffbf2b64ca6e37f82bec8397ee4c64484722c4b9ca7894c3eb08dbb8ea178ad2fbf77cdf687d2900108e90a88cbe01883e0bca8012fabe8db3ee51a1985be3ff74620326da30d700669c5d29bb73cfa9f357e7c8c3fe1bbfe9d6e1c512deb318b1034e655bd80943ada855f99a083466dd4964ad0f3abfc00c7b40fe3264e2edcba0aac7e8bdccb586885a8ecb66951d7c8888e985fc821ed44f2626ba898262c9cfe113187466a3a07bff248f4bf6f6e2aa12559a038f7b3b22da66b1b711a1ed794611f47ea350b47aaeb5d9c043d71d7c897cf60c1d4ace4f1e369bbd950679fc4f73e4ff0f25aec5f86da636bd8cd1b55ebb21e63980acfa64f20533c07832a083ba0680b52311ae5004650db62cddbbc48b41b8b9883ed141956997998a56b788d90332b0018673aa7acd9a3ea7533edd978b2742074dc8d084d6be9517c7dc03d2094406d6ef9a954b5d955c2ca577d9717c914a4cf92205954bd32d32f1667b0a899aa30cd402cdae5215b0bc793d75d1636185664f8bf44c743f0ed79411a5e1328948efba3c8722e2c22deb74e302d72fadc5103f1e0b0875822481586661d7080609efe1117cd806f76dbe9a2d4e94ff3f9c434765af79a9b40ec708c00d7bd078a9a3c68f4770cec790764473e98619c397018e3996e7a572c51635bd7341ae80f556a20135b8c41d0548bfe7bf017e199e26c27088050dc0ba14cccfdea2ca44b6cdcfe0adc313f6aacd9eb42811a1018754cbdcfe57003f2e228f4e8cc38dffda768f1d05c33ca77323df09e2dd6508845683557a8dbd2598244830e23104107dc2a66ac7b14c024a87a9e12d6730dbd45b26c39c444f18c97ee99f343ba01340ff29537d25e341dba7b0639efe3ef846c3ee4d178051132a25fa45cf880cb7e099dac563d7a0c77a828f15774fd9ad5ba465aa65922685a332eca83fd665627d1127b043c3581cf947849a65e0a8b557a253d6c87265dde8947079d3e89435d2ce5f20011509c6a4fc3baaa0315b266a6d270145b592338bba492f1ae6d820e81629a9aba964ba88e2119bdbfaa59423544662c476be5bd852f427642259a91c0d8f22551794d22d1e1386bff1c0184719be151bfe0a277c46106d9bfd69c18642d3955af73304316d1daaa7a76c6dc66c4ced336c5766c55efcab010f1770044ee400f8157f86cd750bc21e652d2f9ff2d15ca7eb891469978fc513124c08ead89af5dbfc689b61f98bfdfcd56e185087d476dccf503f211964e8e8406585124b5d716ef0c535e5517bcc3c0927af8fbe469522e3a636d600f74f2b795e0b30cef8cd5b13c16b415ef49e301766b1d9d71c6de4bdb8c2aa0e73950d0ad392d8de719ab8ade946176007af2cb43c0682a25bc5d77281ea0635a759a32c45088fef8bf75322e74f6f52a19fa50fb5adce60e8ef1b96f481ee79a0f246015856aceb27c92302dc9a4df4dd8ce70224c81e97d58523b6a6b0d8e41f6e54a0907fa70bdc8a7bb2d611813b377c5a685a9776ee0ad3fd4ac9c7215bd5ba3e65100783f509950d2f5039cc74120d7078c7f824e4f5bd74c443f637996c6b16e1d62c15838b3a463b700d13301e4ad03e732e800541b68192af3322f98e07f568114b6148491034732681c56bf6a518d42ce618a90c5a0a196e4e41b1b73b5bd924798849d9201121e738faf294b7e315d6ccc6d11c49ebd7989afae29b39998286bbec1cb7279c540fd3c37abd99dbf8acd8185b834651ff852b1b0a031c1f01cc0fb5ff2e7ac0dca99e2bee6f2f40ea226f7b3db090f12b88027b6b28e60be67e09b0386cb519b0f66cfc643994f4426b03597aacb143af09740f0a7dd51636290a222a077945f8316fbb4aff5ae08dd9fa686382b462679f4088ceb0966910f508e8714d055c03a68c4bfaa837b61ff03563bcefe7942b686b744f96ee9ab2ec1a0a4ac8429d36b8d6ce2031d30546ea443a14053fe4236b942aaf85d359a8f230f1e46fe0745262cfa3d96b120fd504c07f59e26d37fdb548c4e07ce2df5726777df20d37bf550e806e674f32a3f6a9ff1af97fc74fcd2ca9b635d89f50848b7935b14b489ea11c197af9df159227663f1c7e2ae19630d2065b805638d04f61addc631ca0fc5eaedfa6bad211912588fde8e9ec6f9b1ce97b4760f36de7b63d184df978a20abcc1a960dff12c7725bd76f52401534bf9862a9baa043994601a9aacf2a34a3fcec35611d760ad6287572066803a50e0576d5b8d2f9063b7311c4cc6a939f9a8d82e5bcfce0fbe3279d9fe8da4ea32e988b2dc76a224ddd5ebc4fa4ae4086b105b3915e596990209e8a6edcd62e04503138a5463a8349fa54f579c0ba976e06a1ae51b125e5d8c3527fa463048ba289396901421c763706db5876f51b0053278bf0549cd3805b7501e15139a4b51b6b494e4529035ef9cf941264f00ff4cda569b6bfa5cdb597d85fb0c33654c7eefc6c10492c052166215f84817d7bdcf88484d289cf5f852333b409c61e87eefe0503e552700832dbd589f2ad2c05cef0038a96c0105f3b5a4ea61fed672db3cc775a5bfd2a68e2d866e0b011f15a444037d6590e65ce9c27f15d8e35504d21d651232445fe60a92f93e761b6d8ecd8814873e6b5fc585ac0e284c89b29284ae9281fbb464985f0e438e20b85c79bcc98812b186e2009290351752156187ff65880b77445c323f411a62c55adc0c51f566a7e46c5354465c3f5e2d989001422faa2d8c6f6602745acd9a45acaffafa003e077d9e3c6b278d863085e54b102f35b7433f63c3a40f19e547efc3b1bd7144dd143c23ee437b2b6746d5bd1ddaadd7021ae0867e19944546b62a08c2b2916344d366ca8a2286b50a3bc4f97b8f7de36ca4dcf07644713815a086de8e142d683a0f640bc7f40410dce8282598f0987033df74353ebb42a50e996a2af2ea2707bbdb49204c659a4550f1ec30f440a99ce1d0f1d2b303af65a930de8020e49540b4c8f6656f578220c0b42e54e6c72671e337fc6aee88d9228e3d10b9ab2a42773941650d3583c5ef7688a72b066bec07313a5a0bf0e75db955de1a1376c74258966c0e248de315d8c0f99c8f0cd49ad717181942ea750b3565a3652e38484f0342cb75cff46e1b094e877b1043d1d26e1f7ca1f0122da753ef4ab6a1082f91972e1d4fbc846c26b1dd2a1dc95bb516b42ae2af169f0c930cab5e6d7acb710e9015201fec6dbcc90afb5dba9c68a413f75dc0d8a4e8b220c0007205b3beb86d10e3d3d04cd40a7808144c49116a3cc3f2ad4bbe43f2a18c3f845b841d605c7e737298e39cdc31278bb0036613693753931579ec00ff03b9c788b103d0170f78167c14f06a624e52206e621d5d4416038ae9161b8184644f8b55d03d2e878e890ca43bf86bad11da3db774291b8d7c3602f00fa34b763c5bc7a2852f2e527341088ef832b106c5e79afa210c4d9325781ed7ad2fcd5f3981b8bb9679027e70761aa8c1104dd2e28491779e274d2b1692381e8e28f5f4d510624319ca40a47dd2eb65587c52e9dd42cca0c44188fbe6a30dafb745d974aceaf802ba3af5f7e6f23855fa8e923f91c2f28e9c9299047f069b2841a852a445e4c5a48a56b1b27ca1628bd199cc059c4f950da0f54c7221a6076e323e5f16223849c58ef7d4ea19eec13202f412040a44afa85b2056b24a07c673b9ab5c4c7389c5a496ae86acc803beb991c724772aa78460568d420f97cb7ec3c073403f70cb01c787230026ae069853e2f8f0732f25ccc8eaefc352e614fcfaecd345ac9d47e7474412b2b7dc5bee2d654a5206810a6f0a5a0ae2ea3118d3236aef428fa8c57c0a9e3ce124e66756ab1819508ae26797efc17f7a17fed3cb3f9dde25dc81f993cbef9c1e879fec1145213048173c5fd347080c57c5644aa6979e0b5294c9800be6f4be89ff0a9139eaab8e8c7fbbbba831b09687d055ccbbf7cd50477b1ff84f52b010b943cbf5514572874dae0f83dfc0fc8f03e9c8843098ea5b1ee6f229ed57efd27e15ee0ccddf398552d47e862efc31e10e4cf8c9d3fbe0fe14f20cf1dce7de47f7a73f853cde77777a3aa87f51bd4bcba7601a0c2da00ba8025feaa3b49e578f66559591999313f7b9ffe17df7a2a6a33d8f9e1e7841a04ffee97bc4a0fbdebbee7b2fdff3fe14eec0e0adfa3b9e106fd515641eb29239e67deffdbd9581dd053f97955f37fcd2d3dd324436a7024e2f71dce8d629c47196d7b4cd3cbd0a7d9384d336a730ebd1acecf3fcfee137df0cbf164e1df2f4bbabdf795cccde03b1b7b25a059e3f13e8fa6db1014bf1f4d2d371cd2cf3f736080bcd3c0f36defb6cf519cc673f8bfce6e54faf1ac2934ace7e43b9504839fbedd248510a25596a91654c074ce4f65c388133ef81df4fefabd3d381cde07ffa19fabdb7014ef14e995fbdf4bebaed00c18eecb396963ce2e48ccb239765c0a7bc851f70c1f65f658271e48efbd92340decc18e66bc4c1b9e17cc91cd9ab8ee011683f44fb1be670b37a973364fbaf863a33df9fa4602de6651e06f3ab9f40a8a3ce7ebee40e3b8526d1d53ad418d2762eb9a37ef61690372090adec3329042db20fc81cd9a3c6c0ddc2ccd3fc8fef6bfcf4746c60211bd9d7a0a94a60ec24c44c30132fe7d39999f95e7af5e4f1f47b3f03f20c69cfe37ff23fbd16bafabd9701f1af40d4c7802d0f03a65e0576ff02ba3c07ba204518ace5f1c3528ffa0dfc744eef82144f9e1457a014f30b28451d186c86ee5d1e066b7918fed3c3520f43bdf72fd13583b26f71e9a691d7f39aaff99a393981a77f13b9f464dd7244672dc6f6272772e006da66697f6a02cbacb997a303dbc2affe0ef735746d3cbca5f1e8af7260fdfbb9b67067a886aeedafa6fd8e26b5173b20309639eab7ea7b163d3274f57bb8e3bfd3df43f4797cf9fe52865f0bf4ebfbe8f7908767e8933c2fe7ac55ccc799fff359f3bb882ccb28a534ab43e6df9679be0e209ee4d9462dbb8fda664a994df493bef55167119639e466041e6d23b913dd2bcb9fdf9c178766196392257be749d9276d9aec4d656733c43247e7e1c702fd64eec9feb5091efe3dfc6bfc7158afd72b06a6d74b6ca3d78b6671593207fdb153d8e400e8b3648f38a928c31314dc2f7350fffed112d1390c0abae17b8eab55db7c99dea840ea07a9aff3a3de801c10b2a394ebcb5aa5955c2baaf67c9ab6712b72ad8f592bfc62d5e0541d6fd5af5f531fa7fed767d5eb0de1c9b9605f7b1eeefd86c73e67bda5bde4c02d945a9086e50ef94c491012901bc934c182480c7280240b21b1c990f2430e48a061240848c47e37f223f9e1090a96cfa383f80ded5f1ae552ae4c5a38e2a8e1782377168e34585599ba5107d5315f8280589a524a29637ebc1f46128747df9fde087e486f35fda849deeafff95cdc77df853b191756266fb5e7437aeba7e74387fb0db4deb2bfd9505a5bb3a05a83fac6c5e889918c0551947bcc9ce4ee8c785892c7ac08064b79cca46419953a65b5e18efd6e0b77b631fb79d1af4c1976432e5c796b32d5a2dab936a5bce4469fcb521f6fb59d404c7ee347deea37c22b377a6762f21b29be7c32203772a2ac280bca843623a434ab9b9039fa27e851e600daa8066e943165dd42c5f486c03b29983c583162491c9a9f82c944153abcc4a10f02d303f667f8659f5b36e014815127fb9cd31ff573d4c9a777f0031dd8800884df7d99713eee65de747cf76dbe614d100f85728c57ab71fefd0e056a2fd4accd6e4e0dc76b4047c0bb61cd06764d4820fd415245701e3f5093e937dfe6f93aae1f353ef9c3f8474db3babf5e012488ce8f55e705a63772084a1cf02c634940b96b3ab9d44310dde4b30647caf7f946eba8d2df1fa45fe787e7f92b789e38e669764c58ec8653283980ec3f8259a264cb5f4efa936667649d8135adf2a9a19ffd6938ca1c5ec20f7e57720f470264af9139fc39100448b35ce5e3d24af6a738744461314589948925a6e43597da46c67668caf3e715f1a2acac44c85eca28662861c58b244eeca0b4fd50a4684a118cc802090a0dcce43728349183103780c11934f011a73f6952828c2f966a3086386f00c6174e5e4b3cd0a00371f6041d010422d2984108578e20ce7925093c976a56bf4adc84c717aa959a96c9a7ce3d075e2a679e9e7c7f3baf284929c70f482dbbfecaf595d484c474b4d4464a4a464b474c484daff7618d3519a7d62a41fada4ef69fee5e8ecb1f64195ba294a5374f486019344a25d50f78944b4b9464195b62240f20cb98122bf9cac492e76751b5008f724949e69847e029e437d6623c339fec83ccb776ca25a5a4151296529b4a53e9b5a994e768b3a382405f4a1bcaca810e4c46383183339a20a0082a90e1054130c1628ac904161b9e188144069f2a380b2b5bdc00840d84e043959b06c8d0d42dd90015bc9a257ffe7cd67cbc7295c5311f76204425064858101329c579664c6240609c90650c0644c837cb18101449594a0d07a79b48c2c55c8196553a571d53f2ca3359c69690e45596312022b0e0c094048c7cefb46dd392d6a740e42cd7189a08c34a964fabdc715f8659ae357725a0b9fb0bea70843c0254eefef650be3e44be54887c6b937cb3ae876cbd15c24a37dfb6adb76d6edb966ddbb66ddacc69ec6192efc7807ec81c38cae77ef22663402fff9e3cca99d357f91e68e98dda7b7feac163fbedbd3d0a9cc251fef6db95473b1c79696badd7bffacb1f6ba5e0b879607b67224b8963dcbe9f7a12d8de1db0dd7094cf3d07f63b097ab27f666519b4e7ce8c8bb9044ba79e69231422c82006153479a28c02e4000d2b4444a028a28ad85e452cc992fd2f066cb38c25516aea1acaa042a9612ce842499c4b961c3982d8e00d29442e7e608411c406a5920cd30819465052a2c82848bc59e7e0d53a077770a4345124a680da1024ca3ec0d869566e373658d22436288b58af29b2fc64b81b59b024568a1559583a60a0dd182545a161aab203104c3f4558160d389613d7c88c2333bc302a42113390603ad8585668552801db82e650f2411e592e68d285d611d19f1e8240820506468a221959510358113816ac450609688aa02a92d8669292840a0b065ecbcb5f498e887e64186223524299a228318952059327a8ee6eda94bacc8f526714b3210dee15bbe105311b96a6776d93e51985520064b97e33411d99dff8cb9aec7bf88dac913b3a677f6a923b6cb2ff6abe7013d2290cdc5f6099eb4fb9637b39c264f9e38966b632189797e20d5dddefb47c177e9c06da22f97a67c1ce1ba8e9c0b4bc7bf777e8777f4317ccb7843bfe30bf8136db894af25c3eee71c40efcb810650545a57f4451c9202ed2365c914cdba67db26c9b4c3b75917c39504b7df718487d177e1603f83f1b7e2d740ff3aeee61c29d21fb3ba89670e7048199edbb20c596f7745a9e03b3ccb56896d3e9de05297621cf907d1efaddfb9851d0808a0813f2f87bcfa33950cb30efa20f137e9ccbffe3c2af059787791f2e0f13f20cb960bee5796254af0a7960bee5a558f38501bf110c61a1b3f63aaa1fc10a32ab1ee63f9d9898cf07cc6f35de0a3c88f8597e6373a4881c80a0a2881211a2cf20772c855b79c20b25eeeeeee2e5788b0992ca0e1020ab4823a22cb96f90fb6d114be47ebc2aa28bdcff462091fb59332892fb6b70666094fb79247902464eefc04d1b4c899ec8eed60a14512c208f3a6490032b2683266244c4888a348e9734a4850ab9dff372daa332d4044deeefc840924d9b4ba3383942f6e730abb68d0e159ef842c8ebe137ab7a5b60655271d2b75e0e9d4e88341b3861c109b93fb33f488227d2104a647f2a83214c59f283124d35280181449316338ca103b16d0fbfe9d19e456e317e909b08bc9ad36808a01c6657e92863caf790944e01640fc3aa988801d18edc9dea9910c24996311b8af27899c8f371641913e295afd1518dbce192dcf64aaa6c1256c2216faa91b7e65b22d99a2f93fc66e492c24e5252d2c011329521d317831302feb497634ba30c6ca5b6d24956f0277d7eab91dfd822646b3e0d8e9ac873de20498a471929c912c91c5128d7d43773064af76504e832691b191302caf3fee479238f5c539e3728cfd989e325caf3a9b711a11fa21b8a7230d2e168072425496d33b6154ab0ca0453db8c5a963c7f8e96884c8457099a4fa0dc98a2238f33c8ca152c58e4715e91c78946c68f7f6be25e962829cfd7b2b48dd6645f5a93d6a435694df6657dec8fd6648366d0249a4533680a55266a78d418dde7c68c286745d5e8285758db8c15a8fad49feae3337ff2ac4079fa54222b9a74df853ade9a5f42112cc5ee5bf3af8852e47e944a3ebae7c24f87fbfb5df83553b3662771a092b609f21b5be4adf9b385f2c42b4bf433c86fa42844546494fb284f4be4ad596b35aa473b0879814907b9a33f046d147e30ecc8a61ce48e107c405ec994e9f5ca34fce60b76253728afe4d70d3e467cfae7e78669a46dbe09d42c25cd9a6f89f29c6f8dec91252aba46ffe4ca1b72cef9f273375fc610032f8af4600622c4b084d82274841528fda005484a88f2f14a06f595fbe77c1b29a41f06206d23c34fa284e40e1db97d03f206876c202aa60f8e18724b31039781030c060c808a2872dfe4bef26622bd82bc624d7c72e398464d80f2d865d93461ed12477b95242521300009d21930804c21f74be944ee973bb2d75eebe1add93fe32ccaad9469da5b2da3f5e5bde970ad58b992e553a5b6321b4b27354bbe579a552db31bdd36efb9552db3da66396db3dc76b96ebb5c77bdee84a22894f7445daf3b79a813ee504e3011ca49969fc250b2fc96a2dc2f341ad62f34da48fb34214da18234c54ad2d10c523299cca0a9643a994213a8b16461c28246935c52c18d5c852c9fca29177728ec93e5a78ca45a5a72aa50be35d3346bb78d9bd76e1c776fd779b7f3bcd30985c2299a4a79cfd40985712ad5d2e2a2a22a95f754a55a5c5c54aa971718d50b0c4c4ccc6a253367646668be1a34366a90d0f3bbaec1cf5b61e6fb750dd2782bd0740dd6f05698d906b561c37bdab0a78f852d1c77f2ac614f2309e47b2bd4c8f7a56b503e4c4c0763258df1aae00e3bdce0ccccf7cdaf6b70e488b27c19eec99c1c51b366d1cccc0c9d99f19e9933f3bb6b6f70c49997a3516f4d9b7266a4d26778801dec9c78e61ad992355e239ff042499ee1886bb2fc1e3ce4f79032ca45f900fb9c281fe0fe59adc8dd77093f18953f54d6ba7e06ce7cb993770ac79d7c3a514f029dbd504acf859e1d88620842922786aae0423c81381c3b0f1c5fc8f13efbb8e7421ee015f7de8154b2381872f64ed33637e4ec965514e4e6b66dcbb2ec7d08b7fd8ac696a033c76d9bf5d74056f855f09c9d82dc5eb8a239f3ace9b833a7af3096ae66dbc279f8f7e8ee9632e0b1e7290d89ac7f0fc7d136cfc3bf874b96b12092b2f7051e6b6a6a280fff1ed91557eaa0f987a51f9490e65f1c430dc5dddfef2eae39d1d04fafe41ae299ef64228515630225cfc9c427cbd80f4df926cb980f63e429012b6d1d6bfdacff85eae5d04a6bedf672ba3e8f9e1d143c76d97cd5a435e0514a91e73ffd17da72b65fd4c84aa5ee8583544ab9fe48633fa39d6d1d8196b570045e4ed62e654baeb7a61eb2f480653e0c0ed8072b1927e603953ce7fc74a4b72a37ea64d67b4beb78c053763f6d8dac3a706a9a5503ab35de9acd9aafd1d4c9c333bf59752bc491047ea1ced781c343eee8f662a620652f9d68c0e33c92e7fb6f52caa6424d414c404bf34749c968e908a9e9594635524af974db64d3550d777f3e8f1e35383552d6e44aa5fc0b4a6d67c875b7dfb92fbd9502a69e202d1c75b2fc8c28b7e8ee6551419522de303f2ac4b4c8925b0b1cfa14b4050dbd05acb5eea6ae8222773f6601cc4d7c5eccc2ef160d1d83463a0d4c2b8a8394d466c12b1d2a9a22fc427701669783b51d36021effdf228159b94e16cc14a4910c521cf0b88069c5c0e32af73713cfa4ac3d903736cc4078458cec7f6737a70dff06eb2673d22dff27164acea4fc90393c53cab2f44d164433246f79108dd20bd62c9fd36f3225974e0482fce63325bfe98e8c708ab2d710d164419e2965a721cdcb935e190d2728f0ec798fb8bbb774cf1e8e3fba8fee0e144ec8a394524a13fc461edddd9d9650c30cd4de92b0d9e06a5c9aeef3664e32a8158e49c1b4bcb8bba8542e2f2d30a918bc42c99c66bcafa3b935381b1b09f635300b6b09f4869bd0274c143a144e30e1460921f824d8a841f3cdc8ac62582715176038c93259c6c030ca4639eb57fe743a9a15a5947ef459f777bc7f6f65eff57c8f48c3212eedb1b7b2f0f4234ea55ffd1fdeca6a38c4d5fd7d17a4a813eef408bf4bca59e8859f0efecf65df7bf186432168a27d93fb52fc6aa803dbbed3e9c29d296ecf7d8f38ca231ded6f7fdd3682b22ccb32277282c919d90f1049f23881848094c7c924673dab17b5cde842446d23a308e12767ef4fb2a25a6b0d61d885da46c69688c8d9bb93b621e1abd782afee6d4ff7dffcfba9bf1ef8c28ff16ba103693f45ed86b12c41f905cff453e150fd0efc5cd6837c4cd1fe149dc889ba97f753ef03f30cb9bac73cf8ef0dd2acec53a0107029cbb2cc67be9a95658d0abf5391b7b2bf3de2bd60077e8fb8f3cdfbaeeeef7be1ce0da78fb7b2dfe9e8a7640efa5c185a6fd1f972a3db33bb8b62da97f3b5f721df863cdbcbd7429e21178fc4e1818323f6e7e1d7c27cf9aef9f2fd65b833e4a14bbe16ee6c2fc3cf77e4cfb0477cd69f3eff1766feeabbb4cf9f3fcf107d9ef9daf30c65a1cbbe7c1eedf3f0ab610bf3b577cdd7c2d025df3e8f0d75fc8405889d46da81c8fffca5387f767777cf97dfb5b719aebc3192f05305cb1e70511e574879926024cf27c148db34ca0825a54a87cd6a42267561061551106108442c90484a86681a820a8a9041120ef036f29b29a28e4aa801a38262b0282494126a0985844a22e127e85aa047ac7f9222f3ab9392dc61d30a250178f8f93c7436d887ab66adb078f79d482d9d84341f45a56d6694d9040a0955e437b49daa5a80e7fd7c703fa3fa014bd03ff7154e0394dc98b1279cccd4ec395b16a1a0b48ddb9067b7d73d8ff615e8da67dbdb0a48149466cd9b81da7c5a410aca89324215ade48fa8a2adc7bb9be1a25a862c058f92e926d717e27dfd1924ffaf3dc5f0275ddc77cf71cf63bffbee67e8e2d1ec77efb2df859fdc9eeb3aeda4f588570361342dfc66cc5cc5e8c8cce0afa9af2e5f5fbeb6a07e42b1c193df1df268169311a3d5c7fc0c2803b1288e328d4d79010dc20be31ee4fe56005353a6945a2cadbc91a2e3139e58c2e2ef7e50ddeffd3c35de6b0d9aa7b84ecf46e7655f8bcc0abbccc4681a1a1b4a6bda6c78dffd074ad1fb13d861dc3d7e0f77ff81536c017968fe7b17906788a7c6a3381b9aa655adb6ecb6ad8624e8c9da102efceafbf047bd8ffeef6f077edb93f03da2077e5bf72efcdd6fdf85a72721dca1f9d3dbf81ef1deed5e6e86c80920988ee6bcdc76d436320a6a4adbcc2873dbb6ed6b01bff72efc5eb833c4bd8d70a746f86def5ce83a7d17eed084dfe68f7a57fff7fddf9fdee53fb0e567c0979701552b10e6e55d5e033f1d8c57a9877918ece5612e8fff14835b5c542f302911a758b0d3778f5127afab526cdb2d4897488de8bd0f16fbe5cf2fc12acfb0098c8815e713c16283d86f603e35a23f112c7a4f7f45fb7d9b407aa07e74fc46668969e6e8a8870e10217ef3f25495249b22d02cfa3a3d9a4595d4e7d1587a68a8ff56332f33f31d2823f3decfc8c47cdb8c0c2845b026f40400804c8f6c0f9d0c0479e1484962914cb2c96aa8a525bfd1a16349c7920e1ddcffc6c28f07c82932fdd9e388fbca7d0d73ecf4867c5ba83323f31accc73cece53f141832077d0d4435a1c2f0504b282064fa12b52473d4995ffd0f99a7f9aa53e365409efeee67409e9997f98a5303ece12dfa342b507a4b051d47f467c0a1ed65401e7fef6fada0cdab8f79d7ea63565f4357cc7fe14e7fccf3e8d57f60cccf80decb809dbff75be8eaef3cdfd3cb7d15d8d2a9b0e89c504cb2e9e5d38369a9594b5ab73cb156635ac1164b6110d182498b1ab6007a02072d806ca084112d8a72a400714b7d8417bc8e7041134c96b11b7cf0c39537463ca794e0289ffa1cbb4aa9873fb8b653d1340e4d871ce856bf55e5117b0b6779c572a0bb628d42086820ebd995325129964527ee4243c20923b2fbdf2530cd3b41030ad99ff372bcbb3bc9a8bb9be218592c9aa7c99ea93f8ef243f6284068e249f6b7acaebb00151ece70820a1f56508409d80007415c51041ca804390f7e1004c5c96367342445e7ee41f8f1d9e5d681110c89ee3a77f7328cb277d9dda90d2680725bbcc50c5af0821610b9424574eaee5e650c1edcdda9dbc00c124e46c08269962f7ca059fd2a1fdc001efdf2fb4179c3231c5bb99d0019047e1302d9ea39831569c821dca6611020cdeafed9ed33b8f2c69d0f0079b3851fb8b1a1ec5601c61dd9b1e09ae5116f04337740e6f09f5e1099c3ff74041ee5510f7729a53cc239a3da57439d20def2af4a609d1ecd72b7f266cad694a93c5a57e2ca075de6988fc3e50c2c7fbc5183a57c29e5cb7c677e0694a237034af1bfe79bbf23b333f39dd8512521f461a00f847e102ae37936597e991210bfb1f1f483c0e037aaa7304f25d34b90c68120409a45959e6c40bc4537a7f9ef6dd07c077edf7b4ff3bdbc8ac6554cf0ec4e53d23420415e3082e70d9952ad4eecd336e3e3178651fc9a73ce08f4141a81291b4e05c28539f6c7c0340fa179c857431d1aedb79787d18036fe036bfc0ce82f03c20044eed0327d945010eabd8d77796fc3dffb1ababaaf11eef477de7f60f72b508affd605bcbf025b3e064c3d0c88ff0544bd0a3ca51ea5752fbdace56130fcb0d3777f03451fa728d00c02c25219a154d5a3758a886e7e8b0d583e0ff7f379b66fb901f30cf9f3cce79e47fe369f7bd774c9f9dccf207ffbac6dbd812c6f9dc2c056cbeaa6c3bb167c09c994aba669d66a60d79af69bbf7d1ffd5bc8b3f10cf1d8f7fb1c177aab9ec098f6fd67d8be753cfc68f8d190d2d0b57d6beda3d12259bedbf7770d69bfe3aeedd32cf86959900dc43ad65bb556c9447db874287b2256f4603e3862afc466893d6f6044704498f7b1228d84f9d1cb12e6c75496304ffd6615f3326c423375629e47b3582726b9c326f753bad5383d7d1e7ed33d7d1d207e23f39e3c7a1ccda221ab592c345295e5ad1a530394e29fc0f63cf7fa6ba05e9bb8b94cbf63d5caea9b126a54e8e1a2724aa64999663623ea282bd1475da14a73ce79e4aa4c51472a557d295d80bb2573d09f200e00668b7e83a73cb20e3016205396cc415f75246704f587d4bf61cea7853aeefd24e8c9d9f3681a10a67e8f7ad8cc777f1df4bec1d373204eb3e8a3c6c09e475666c91da74c619ee67dc03c4df8551f31ded3bc0fef694ecfe3344f13f2348f6ef90e4cfd07aa7e0674f915885f067c790bba20c54fc77b17a4e8bd8f53467da014674029ca6c2f0f83a91ed6f2dec35c1e96fad3c7805ff630e0973dea6da6fd3d815e0b7d014f3d2fb1823ec016bc479d9e07f59ebd5df63a5d7d1744508a1a0bcc402d0735a559f4cbbe46f4c02f0b75908e58a8a3961edb2d4a57dee0acf6f77d64cf853cdc677fc3ec87b0d0797e4fafc3a63f7bda9ff33af716fcfcef6fef837b1bf2d8e77ee32ad540ca81f4031cb822998ad09c66a6a0d979fd7adf7961f7ded256cdd2fe0406f69067a83e8f3f777f72eff22ffbeebdffcbc2af85ce15da3b616896f66dff22077e5ba8b3f296f6dace0bcdd2b2642fc2dddd6da4a494da664977774a29ad3508b764f5d229f5eaee9e69d65beeee01e9f2749b1471eab4488d218a22456a9d9b09b65cb72a45387b46a6a98003c3d1bc1c7f6a5fd2086c9904b2d77ed3b21e3a6aec36848de3017761b783759a76390f8c013bd9cb49eb02157028a51198aea386d68c728171b05835abd40b7ce3db06265f85afed9c6d9ed2d9cd5aed06d7620933280dd8cb32b604961e3097656c895ec20a1a5a5a6a8df858176389a31906c659c696285a8248d3b8ac5297162fe193c75526c30a63cbc44865d26c0d9223d462db6116086556061b9c48b5353e58d216db0efb60f1c9e283065ed928749845ac14b98263424039b282a3bc02a46ec93c5a9cb3c4cbe255cd3206c57658d42076a48c242f2619b8cb3276040b21c48e48d153e0982c63478a7c086cb38c1d214a039fb28c1df1c1b3e02ccbd8112539505a5aacca34cb18949f3cae56f01bed5583a38c6529ca2fc879c16c827476b74b71a5945282ef4f29a5a17b7ba5dddddddd2da594282cbabb5bb3a1bbbb352be4ec0e65fd69d6fc9bfa2dca3481659662410c2bc55fb1308f90a93793fa94521d32474db3e6bffd31a3ef01fa1ed6f0a3b99bc61f7c1bda515a336bb3af6f7ff5d606145ddbd4b620685fe691da70d536a0c0b659b8595e16caaee94865b37af26b67b0f2b48d247fa2d10deb97633794fec95dd436f70f90c726ca632bc9fd0dd436320685486e9c275c894e233588dcdddd536808b96d7391c77934a7fc38a9e47e399578e897e36cb2fdb305174a74410611727006176988a334f2000da0fc000d2798ae281a6553ee16238b21744882880f9610c739258c335e42481246ccc864cafd029f2298d1e4c88c1d8821361936506982059329ac204d092277df758f9540caddaf6090bbff1a8491bbe7bc9c8e9542374d4fa1411a990333f7d6cbe1ac60294586a63cb6141a3cc9dbdf0cc08a282fd1be94165751b483ac7dfd57466b91925cab6c294958d191dd16c1e34a0a52be81a538339b4c94f182939c09935022fbcb58a6205673d5c592108a21b183ec1f83c900e26507cca4e28834b2ff4b092a50eae10a1c8c84c84115636451d40326a8787285163e2d7d639521718410d9fd554848481cb18409135004df446dc03359c6bed8228f35379abec841d21251be10a2055fec406bf882061c605596312f8840c48b2b48bca0220d2f9c18c2baf0a00b0c04d4c283297e5041295b63831b4e16db0ee7b0846bac0c7e8090e400e4538308a424c61223a41d76502289b80407a3218e88303002b241cce127a604bbe1a8c988a803d3d28f88c3cf0e70109524c5b8307281b8431006b38cf510c4c78422da52f22405a74e497207ce0ead254119ecc980229a47b8060646cabd8c19b2671849003e08820f62b9bfaa544c48529daac32aaab27165e90a0e72af54465784c86ea9c063778335b560758144762c7af0d303265762c8fe93a594c5c78a1c1061c20c1f178ce810050d6750514517a2bb7b0f80e083e7c30320e496d2a9b628416d238f9c50d294684cb2bf7deee5dbed7d68bf69dfb3bdebfef69486ae7e2edcd9e981e1e84790a61e4b474b32c9b53d97faed6988fae8067eb4fbc37e9e8f3a8e87faedbb30e55db8c37214cb3ef777256edb73ef637b2ee41972a19e7b9ed46fef8307f5dc63c0fbee3f9a023f1a72e0fc0dc4dff23de26916b9f8a8c29d29045424e4e302a40151cee7452884891967d1fcd4ef0ced0cb9e66fef730915eecc246e0b7766b81d6d49dc9c4d9a90b7befa56fb7e1fff2965e124cb10825e2ff1f42df7effdd3bbee9f7c845cf75bc29dbe610b01dd1fdbe7369090fb2c35f92c356931a026f4b22d7513f7eea3fa4ef296ffe3df1972b9fcfd9da2ecefb300b1e5f438dc1972e13f853baab08f9276da252432c59650034a8d5d940abffa3da24674f45244855f05f2fb53bc9f7afc43ae53ea5da84f01b9508fc31d07f22221216ff96fa0d0f6a3036d9b100f177ede77de77a1f496bf8fac2989184b961cbd5ea21fa5c0a745eebbf0a3ef45d9bf0422588a49494750683842073ab8c2853c29085f9705ea437dbce5ff7d3a4b3837b9a12f79cb474fcafe3348380130a32ca3c82315da7e8adb03796b7b0a94fdf33145eea7c8bd8fbee456c4b8e1254ab1a3a18e06e42d7f2d68f4a6ec9f3165f7d75e9a4fc69435717f94fda32155ca96b2ff4899b2d3235ae42da74552602972e2cc232d42a21de3047e020a920ac830030632d802870c8e1019418c1b40312276133270d185112da0e436219fb28c69b1022705c8f2b496063ca28480c749eda4ae69d4474d0355aa0e6b59e78f854fc5650f7bbaf956ded89fe1e88e513c5aa569da6761a7a2aab6a161afa81105686a43bd89649dc2fc6effa9ea4e8571901d534e05dbf6fd53d2b0e3de6be5c2ee5768544debb477d7a80a3838b68ef8dda96a7543baab90bdcbd48b56a8ffd6357f9ab9a665b44a89650ef964a07ecab8b66d64563130b6fe9c347c51b9b4a430eae47597dbac9655ea3d673a05b3c7db03ba2a23e059bd3969966c6ba77585337b86cd34bb71b7f34e289c6a715155d9aa9504dadf17989895cccc4753c306090f8625dc30e104145a28b04e34a432477d595190d11dfa591177769acd7c93e2f546215f3f215f6ac28dbc8138b366e012f2d5c27c2d98eff6f97224e47b6de4dbd5c8d7a3c9f7f4e58b9ac917a76c8cca8652b6fcc563c166bf2f30312b9999afb334356c90f09d05c312b27c6f9870020a2d1458ac938734f3f70c09e5d6ab055799d7046bd65bb229a594524a29b5a01429a514a6a394d2cd522d43e2dab699a93e93e5cbe4eb9d83ab1c03935f5af4bd9104b959b00eaaf2b59d832ef96e9d832d3995efed1cc41995efe994efa973d0cb17d539d8e58b3b076fbea9ce412e5f1707b77c5d3a076dbeaaeea57330abf9c6740e3ae8f9ca7434313032dfccc9432a73d0a728c8fd2c4abddbb7c07e03b3bfbd7c29bf2757db362ced847cad09f946e6a8e782145545e04ac8f786f97660bedee77b22215f948d7c718a26df962f5f97997c5532f9beacf28589c9370626bf640baa40c816bad42432335f4bbe34a97c6be07c6da0f225e194ef7bf9825dbee1cdb7042edf1b5bbe2674db3d01852c5f568be60b00cf370038ba0d94222b07ab6a4fe9d768443a0dec59c66ee86295652cc9514da6d3ca928780e933e7533145124d1e7160e1a4042ca4c8c2872cb258995273230026d1f6cf21b6177aa081088b1e8ec080ca08daa68ac6e60a2257649184d475082843089f3e94522a2d2b8976d50542e0ac0737c8d0c26ba86266c19914f38a279a0646b308d81671812d1110f09665cc8a2633f48006ce76e818dcc0022b8ca061c50c4e066e09c21460cc2c78d043152ba49042a80a1463602dcb5815a32a455a0c9d0d5ab07981748d3062bf78713f1cd1be50da624034645e04d9580c3854308e3429596a58fa79c1529214296cf842488a12487cc024c5490bc0f0a9f2f32d2eb0463dc0a92c6348b2b89104e32c6348a29882048abf7097650c091115d825cb1892254f2039b202acca3276c31959b655ea8df35862b28c014d61c38d6561ba2a976ef15463549fbcee36b7b5d57a849d55ea38de3ebbbbdbb6b5ab95ecee17954b4b0abf9c0060c6c5b4ea78ab5b47b3640ef93bd2483c81ff09e8a7fc93a10e0da5b732cb5bf225df59c17c653dd1d93dddf6c8fd61594aa594554ab0d699b96314cb5bf233b052ea12a97f5a70209134db4eb5cdcbb1bf39e79abd5c56e9e58c582dab54f323ee725c0e8adc7bbb6ab5acd223cdfa74cdceb79ae77939f63d3fb9662f97557a392356cb2af5a39aa15cb397ab34bb9c115a2bb5d991d52ad5fc0885f272eca31cbb662f97557a392356cb2ad5fc084391d2b35a3d2fc7dfa3275a9ddbac96715b0d5ead965d0ac509b56d5ac0b24a2bcdeaf67605842dcc807dfb280f0222e81f49a1c08f5333abda77d7cbb1ee5a974aa55a9c070e0e0e7592f272b24f59175a9ddbb4cc725b0d99a6659c85c2ab966d140a97ee5da88a56e736ab65dc568357ab651b8542e5ce7910f0afbfa9aeb8f2066da799b66d1ba701f991e4b79b41eee944b6889037dc73a1904e22b7101793cebdb7abad6ddb58c079f3ee3b6f85cef4a7dce14f837e5ef769e7511090a59ee79d9c070e0e8ef572ea7b1aaa7574a8300640cb594ba6308dcc01682f64fab0fe3323f3c76a42c21a8ed38869faa0bc1cfa286f85ce2e77b8bd35bfaa3f6a79fe78ab53103207c0d1f0a45944cdea59d442660a73480ea0df6802e54944954c357b389ddc00cfb79ab5739b482e41f0ed65d72d870dd9ef2782c5ed7d7b2258e47e6edb74f74de679f47597d9b9b74b986953f9ea3df57e7af798f7eb28776f777fdab4873fbdb793d99ebbe0f62990fb1538b9c7bf7143b2ff6a08d684ee5afd6a6d77776f77777777d7e4cb1c3e843e0966eedefc39b7618f23b74a11e65ffe04caac02a5a70343fdc905bc1f03b6a8726df0d3f128f8e96cef837301538f51edfe1ea834e294df1eee9eeac91af5c4526a041493d2450b151606970c3b65ce2aa4c8939baf86b5913ce77c1115cd25262a44c8f7e97dcecbb91b1521f2f6d6cbd964b6966a546491b5cfbc1ccddee4b1cb09a042c9145ce0025449ba8143870a590a34b2ff0a698aecff3b8841f667bdb27f8d8c4df14376299c649f51d0a00aa07ce76686114e62ad95b2c42aa10319be4c5f4be28accd6607653bac8f4690e7ef01178b4b953d1dcc03189e451870a994a99924749e58acc22d1a891c709cb7432c9228fd3090ee84b20327dfa16af9e7514834c1f87470f9d1b2491e9ff00f245a61f444819993e0c50a4f142c38728d3d80d6690e94fa0a01c70f0834c03a4f6a884cc7755492b95a21900000010009315003020100e874422913898278a30d90314800c789a4274549a8ba35992e3208a41c8206208010010020c21337044dc00fd808e5cb7f2275fec86e53432d03daacc0564eac720d5c773649e6afbe91999645b47d60eb2687508f8b566704cd4a2c1c222660a85297411d39a701a60e2c0312346a1bbd400977cfd00f20774fbb0edd2c986b6b7c7efcea154a107a0e5c61a0f03525b1dfd6cf0eabfb590aac7d3d7b4ce7204e85afa3b6fbfafac8bc8fa617ba0eab55f023ef116000492176609d9b48de5908029b2be0709dcc998d79e4738ddb638e4e15e3b1e11ab5ff8f7e6ad3e030edc760e569b17030de2eb27a6f985bd84c38af4ff757938e2ca1dcb6d702fafdb72bcd7f5308a2ba9ded7f5f0882ba8bed4f5708a2ba3fe066fb6e47167f8330dca057be5f44bd41075ab569ee389b5a1f62e8a2e5ed5eeb5b6432676c2422a863f188eea4deb5b99994826417b8587281a5168809e815e72706f01dc69da0edd2548e437e00e773a025e4f0744112868f326074e967fae0c40edc594c10fc29b388c8686f26d9e02d9067e50e28a9a4d49c234fd661357dfd28f6e87877b4ebc404597eb5b08ba945871672e4af15896d7301404fb67947e57f5e868f99c626e91d35a7aa56aee6ae339432728a5a1ab7405922c03f477079a288559225428725ca01956b317bb08fb00bbaaaabcc3123be877c93b91686ec034974791660e6b3dd29752dfda1e655d809c15321a1d509fbaaf16caccea69a43a11a97d3d287533ac5dbd82ecf80ba6edc7718d82a99481a31512cae2daa82e484a58f64c08ec5ac8dd313bbf243f7005831f2b3b1ff2c91540b07dda904fa4d765d93704f8e402dcc4a20e490dda5d33a2d1c6731a819f4c80cc3625c41c53f8b09d2531aecdff959b24aa5ddb78bc4c3ba998368e462429c7269e11516346ccad6d2d863a3529a77901e4634cb9e59f68ae15a599168a66684c916234bf457a5ea4eb33471105675fd2ec2d70b2fd9e3df9d760bc0986f3852205b7182e1d59d5e30d45b02a981b10879b4ce4b7b445deb735725e5458c1ea2b560a5599bee9277a225be78e957d1168718b4b9d32c8a3036e2a51a011ef50efa7946bbda2b0c7cc14b236c74726966fa7cd66158a889e289ae51fb582af81b2d47bc05192b83b84deef47bfa5d8438fcf6fe8c293737edbc7f11f17511262079741c972c215e9f62facf8b308e2c0376675d398ebdc5cae4ae87268d4f2ed43bd7b71394e7be7d9a085e422b898fac4d13f5cd9bf83722fbc5a3e52aa57b11c80effa6cf9caca8fc0fb30c1957d23d99254016f95331dac1ca9177eb349d38ac9330885fb4fe5ab102cb1a51e7d10df16d82ee0549ff0090c7f99cff99b723656b46fae594e4a2c67fe9658449c2d13126a1eddbef1f36f0f052f55bd186f5ecfd99a6c3c2ed8feca1f3aaae1fec020d1696aad8922e89e48ac57a8a9b4b83e18a9a480d3adda3d9f4cb7c2c4203b2751b9bf4b69018844781700d79137d4aed71b7503ca38d1399ee0dc3f9bb5f003ddb1ec7a3ab7958bf18c7710eeab9333adc006aa0967f8437df9e3646080620c5bfc7127fc9c52badc7c66bd1f273081ca9dd98a92ca96860d7c1ad4515e1f176617dd2bca70f423c12d4f93c611aa4970fb88e4681c232d3ce22f45551eabc10a54fb8f615366cda31f7d1187b54249b1bb1e880a384ead6eac73c358177d70494cb761da9850f0844d27ac1fa8b2a2d87df812d22fc3dc9c217ef0d929cd54ae2993692c8506205e909880d0c49ba1c50de27d2c0b00ab3ecfea0414e300c84fda8c85f33abddfd52ed56191b50e1980550c8862850155ec3b43c5a306d5a0babb677ddfd189c4587a0bae546b4ac26ac9e6232b642403b542132bb68c5be858d84fffa940ad886ecbfa2d7f39e1ae72051b3855b4e43af5071892e2b911dfde9981318160ae3d42ee8213b4ca8dcb2607a6e3baa5b80b02b728ba93eda67cdae64f99e3b9994be146f38665e896da4d232bb6753134cf15ff24a871a71a61440b10ed4b035bf14eff6a7ccfb49c88d15931245174fa9bd2a5c5cea31b5f3e4b5d2a116322555943e645da4ad4f74fadac81287e9bce121b9a6cc8918451e5e574144f2e87c8961cca6d60f9c7c785f28514e37b9ebd885f6792bafb97d158b026ecbe62c7ef9c53aadc2b1f3a6faa531f0edfb6f5bef5135aebf3d4ef6c14e2e496ff71d05016280e8f0a28964c7a34b1f0e42807ed46d9a672685cb440c11d5a89890349530f4026378a1985d5ff35404d591f7199fb9409f536c34637c7f3b7d89bb857769455e37363e744ddb5b81e58f7a1dea69f8a1ce58462a337bb626dd4fb63e027212d496a57f10549dc0364a3a34aa3a079da0f154d87863381ef0f880725476be83b7d93c5e34123ca01f2fb7626cd1f11b944b72d9ce4660b12a98c01f23550cb163bdb69154f79b6f2d73a6f63be926f92dabc54f908be2968abe7c157b16802126881b327866979c22edd283a38aae8fc030ddec39f7fa96b2ff95db458d1b675f947f39a1fa858040146e98a2816e0bda4ef147d88b2650036216bc37768c0b96315af0362a9abf42cc39fce918b071687b245b4d035006f37205f9e613797b1a677768f372cb4425ffd4da1c2f0eb6953e4e276915889873f495d93bbb5052d88d65c36144beb9cdf48e6bb39d81ceeeda199a4152a5a99fda293a46c037e4c39e356157e77ce5a84d678b571273d04d7fc04e1420784ba20c077868ccb3b6d75e264e33fd13980fe659405fd53e217d64627dc3183749dc5e49e03e4c02d940278cb15d759682d50c112e216f4606aa12890a4d295c34a4c96c905bbc5878b297b1532fe8d0d6c3bdabe644e3758c9aef5c9211633f18e5d7845ca8a80fab208439f2a9d0b8664e6658ad7c735b89136d8ccb1c23ac9aaa59ad043dd50e5faa84dad540fba5195f4b136b5b21eea862ad5076dd6ad74d6bd24e296964820e6be7a591f7d6a01d7cfc64c3c8888b44692c2cab4641a242b0c3b51b44c5cf682547f6b4bdd01f3de47c1fe1a7d75e7acf2b0876d4105641927fad8c76d7d848118766f619396da6c4b494ba48ca04da494c48217d0f2013d888ae08211f390490c1c1993f1cd92418f52818fea44501dcf870e3277f2b50aaf99c13f71d6cc9fb67337112b034fcaedb31857a1c57c183645d1412d9efe480a82ad3b830a86ae76468eaa05b92ef1d2b95eb2671ced041af3bcff8c6db0115c0c2e2fe1218f1a5416f3243a57741c396b11b9c46249f39e4616cbfa73b0880d7af8231c7314a3ca8ba7002c9dfeb63bdea44e36b3a3bd244bd54208012c3669fc4513aa3ba44251e73b0962991ce24ac4e3487a4c5b8d005889549242e4a9407205bb7db038792cc13ab4d4b56db4dbd248a791cb182721380cbd755c73ba29b4f31bd9b1fd7d40301f66c51edc6f4e492cc0fcb485d94ecdf580969f4a1f4ccfc19ef38e5dc352c509a90813e6efdc2c123a6bd5839b816cf258ff56b6c90e6e416b529dddf1c0783ee05c0f9bc48d748a98f4a64cfa4a0dc99382488e908324245bab0722490a20004f2dfbb7c9aedf4cbf65cceeaf15d3449c554b83e40a2bd190ff2db17c4f9e94c1bd354e4825b1be29532b9348543c89f81ad3b00ccc6dd202906b03dc72509bc6eb539c0a756baa2db80894aefeee6febfdb1ad5b65c227244696732106eb7c6dd59514b91fcbc00221411cf2b5162a97775179cc83f4b8873c57a45fcd90ea5eaa7e11221bc3dd890a44ee1cbaabeb4b20c505bc4b02cbbe0faa8085e882a64cdb51c84297a53fbf4969b32e69aeb23a46c5d376c2238aa12313df13eb714062a56f711e9fe387fa5758b32a6adba9903b4c6e96d94e9fff4a8061a21dc9f26665780af8ac701ad9abc7d92941dfbcae9fb769fd1f4298450195b8e014a90d79031dd33e2448b6d49dde6ce6ed867089b05787d2c65c2f2139ae2b9412b89569061f37e426d29fd0662d8029399262aec3389ac6cfe82121c0d109958412d504afbc64aaf17166b3eb82db884da246c5fb09a0d2a2305f82cfc0d09b82101b1d435c73236da36fd9b41822ff18b2b19fc239ad36a6cb7fd593b0d69116a46e732c63e09a710da16dc6cd805b1e4bcc72b30b617aa4c248ba346e1b125a293ca37645398485914f1ba2537925b3492f9d9d81e599c0aa6a89486fda3250f01afbb7155004cd9c256ebe9d1d680cfcfed51ad4c1bb6135ac1b63775e110401c061130ca0be7da76f2d46df0da0cbd16fa1605dfb25cf301de19d1a65cfa054adc471a765cfba4bdb38a32212a5dbb8c06f08d8ae4beff15d6df88bada368ed8ad577b2bf2646eb43b952f2bc0d72d1a912da47929b7f71532461e9d2f8d5fa166de9f050e810a61b0a0ee7ade2966e561777109d24715e45d0c7ec0c7d82040b506cd6eeb0e366ab5bbe1dcb5e5343e20c763086723eab079a61f41c2aea9714f5ec6770fb16559dfd1aa4efd25cdd5b0c94e8423f62a8a71e0cd25f2153e724b531095d24775e964f862551580152dc5ee1162904a0186bf63508528a4489c6a3a0f461c5dd38344b99c0e4308d6b68d83ea97703836cd844019e59d79fdc76a9d46773594a598a47bb72ad067f9d50c9c5520a975054c435acc4885923176c36a20cadfeb886cc73541e15787c9d6d324182df163ab5b83cbb90630974d55baa22bd977fe88d133066754bbfed01d7aeaa0247d0ce328a95400fde69f0582b4695ff7bfdeffdbf7ae104af591d7a7fd02b1e8a3d4b47ff8f7bdb338051631d0a21aeb102b025aa59ce43ab8ac5736fe4aa0c0376578e14606b14eb47454719d59b43fcebf15fef4f4fbf37d87bb44e7bbdd136a07655a5799d104c9029f74205c8cd560843abea66425405922b8239807246e30d478b00026fa4dc7ce092f1eea0d7d17ca1a4fa5f34299a9f39f66bc3828e62f57cedab76d0d90516f96219d55df8c039bae667518c61861f0a1b39017c921928f80702595d0defe7db66c0dd1a29f614d2b4144a954027aae9a04705c654b4eea057b2fd96cd216f898ed62de19b89c6959a2d099be33f569ee78e403f4409b3c0a780eb57029316c524c60f84331c2cbfba7356ccc78bfb6d4cac283d9e2aa8ef466716cd010d7a94f6c8cbbb92d34a9d71ad5e9530facd1cd5844af5a2d66ab25a69d6ad12f8f1d40310d12639cc2d6fc4602dc1c9bbdc11e50d2913aad444d91ae63be001690a32abfb461e9c8731929844f55c40913dc9c04e4104b2673d97452b08fb165133ddc9211b641dab05b59c691a9bbe4ca0fb78f265ea067abe3872af95377baff6ad80406e859a9730e80e9f21112e28bdc1cfbd704163943948a0ca545085e4b0cc091363e2de3701b569b17ae157482b5cc152a6fa26e8c414ac16462ec63aadf2d88f7e3511be89191620f43150a0ea7cf46f815238a8ac8dcf7e089c8a12a4910d6728662f848ecc0c9f141b7991a0995bdbba55a19b03e45afd76bed14864bc2c58ddd5457a259d2106cc512034109c628183d3291d5f829908e21cab3486aa72ae26236a5d10b23d967ba9d75502758166db722d3d2ad31669a47cdc5cd7e6038a2c0d611983cf4ace3f0670183a25e24b90190bb6719d91fc73b81f84b88701d919a34e11ec5e9a8de63f2a2ed692a2be66379251699c94d96e7ad3d39484bf18317399973551d7e7cc349cca5e452ac5cd743c2991357bdb6bfe42bec21dd667daf702a7d9f8ba6ec4f12cd6fa26896a6672dc22ee08697181169b4d3f36cec22c8381e1dea092b3e480e0f5d47f9205de0a1507c5f68de8e25c7e8a24cac0c0b2532c92433b57229cb51853f5f6859e52842a9570d6381e5d589d97e2491ba49f2538357b8742246eb90dab396d9dad8bf8bc7917cc8ba2d0274aaa63857825ff6e9553e06d141b80c06af4a273ebf54015608d6dc6147e28b627091748c12e6eafd10b20555fbd828147626d8212a7f870ff6bb4ae2d94cea47d6838644da25ea058b6ac496f65b4e582f6c3aa269d91139bdadab0f23a73bf9454daafceeb7c9bba26b26f38b7ed4af6bde03933bc967a0b329f54c48f3fb543ef8f063f953c1f64d877aaa9eebeeafe5f6b1b4586afd124d7150fc983a16236da386d137bd96b2cb399287851a530b07be77a4edc267152c059bd5d33a66a36809c4002a473f3d2ba08758d392d42b0958f2442f5155f978d965242f0143a5b6237686ee55a3d17124fa1e9f9ba0cdd06c7475816e0a79b02cab411bd239a5bab419e9c80030021e1075f247ea9cc44393461b36c63768dfc4e98c3209e9889d10c87beba0c3bfc4f0151749ab583a4f46174a6dd421e95c279a1aea5d172f0a6e7f4cb687858a7a25022ff49295bb7ce373274c2b107a5418de8298726a11c9a24396f9563c7a1b073e2fd3ef901b7e1c2e6841329d8225fd8787d6bdc31196904f53b834ba8c0e1127a0305239c82480330cbdc3838bafce17ecdd6472348f4f2050bc0e73b9fa290129af2e979a0c1416a72e5f3d5bb4a67a96790115dd679d13ad8ba5961cb971ca2ac721aecd1495198c412022f3ebee34eab2aad0a427c9cac7342205b2ee0b48d41a169d3528340d384749f8eb92c35539fe74dc3e3cc47d0f34179a96ced3df0823c6d0bc00e4332b5929584f0ed30222484517aef63036b1096e20124e9ef40bc5c7cfe6c92d881c44d1139eb686ab57899a6164815fd97d9d576dce0758964817cda50f1e169a735e2a6c61e5ead96cc2b72285b325dd79f1bb97e8b50cb37f70f6d2613d34f7a72db09ca3d1883ef80b50deccf8a5f0add2f22185c786c399769d33297f6703430d9e782d5715a5b27ef280b25d5e476077b163217922174853d50977b37e3e9df2ec4bfa4d88eb4efa0fdf09c3704efd8d614286c0278a2800317324242cc18324f466aac1ab477debb2ce53eff6f7e16ee8d55dd8020c3cb2dedf83d264186671c12299115fffb513ea274187e8ff27df39e449059d1595b0c9c7dec5e2dff68d1002e445071985a0a60e3e4b2fb0fc8d29ebd9570a8f567916fcf35836f214fddd5cff6457fdd75c120084c093258115c6cce4044e08173af6fd8ae84e10d1fd9e650f1aac1acc2d32a8b0c87100974c61960d6aa5c5c4d75cca3b422f594db1811a2e4bab8400e8be23015af665c46006d88e5f35e45583d726db6167cd0101425106f0d22797eafa70b3f19c4cfd42109541d26e1503401149bddac56b1524b6ff61171ef3bc18e6b6ad08a10822dd4a42f3c7c8e3b4ac54f3a44859ce9170f4da660660fcf0d46a646f776c2e27207acbbf8ff4097cf4b8d3c640a2d02159082016a74fe42c608f20ea67c1ce1d24eabe76bc09754ccdbf08d14427888d9843f51c7f7c891867cb1bfed4e221daaef41bb379aa7cf6a662f2d6babda520b5996ae456fd1900ef4c229d7041872d93458badb6cb05683522777f693ca81e89ad34465739644a5b33aaf2286ac2a10cc6ee0105d672527cb0343b6410252865b53210438591a7aaf7cab16223d335469aab8a2e91ed15ffc76e4ced0eab01c696cd52531c186616ed2f8a3568459d9d4a2cc55491e44b9f0cd684b8bcff6f2b758882ec67e6a5bc99d17dcce29cdee4bed9745ce539644be85764fe28308a4bf71eada6840b3ab397739e4012e7e4778bd56f4da78a4de0148418d8581a676b879e834160b3235a7632b4a6f8e1f34c305103c7e60535a6a67761956f8c3818c79a911dc059846ccebd4976606e05302226afe1044e0ac6dd6f0f1f49d223e1ae542f30010c8cee6d40b38ad713b61a0448b5fd3c950bb13d3a9c27bf11688c054ef70303d63b338cf0496aa54aa210a7f99780cadc703443ea124e21821c1446355f301cbaf0c7da8775cfc18662d2e17931c5e33064287853739460e14e053c0b99b05da61509fc7bd9f5393f09990027ca7a961d58ff4c28be2626b0005cb6280e10c02e374b6af542bed7ea1fc148725f2ef3c8781181ada0dd04cd3da670138330d5669979bfbb14e41f6f2361ab0961dbf2c01d04cf0d9fbc47e73df87d2a5d32cffbe7e9b119e650ba52d9b15a26f26a1574b6122ded28423fa27b4712d07b202be13dc89c06a01ed3893e9bee55113c40385442a0e083920d9db0f752952c97ec062815341a987e3a975a56a8cc2f94e3baa543de56e52b43a1929a10d4710f7157cf208c3e5428339b59a2eeb0a3db46015c5d17ed51cc1108eb541fa24a528f768add65ea35c5894f3f76f17e1e6f11bfefed224a63d19126fc5e7025b06de1a442d4c2d8ca82496fc03cd5029f5d45a4b23286f6fd48dfe22eef0dfc33e88af51eb271c551267f34217412c62c52b42d607f527a1780755df0050a9d327dad9ba0b9f8da1f9b3f8f80fdd5d2137f65def80de147ab3f65c3071600c665ce77d7ae7570b3badc32a0f6bfb5cce8d091243c393f293012d46d33546ca75887c3c7e30968e7cbf0d23fabdc0ed3202caffab8afc53aa86ab1411b42a1f547f5562c7aa78e0bb09fdaaa56097ba5e55e79abb09b4c4632b511648afd211ec43c6c1db04436757bfa257c5d7f1a6aede005389da3fcaf4bfe80b7de53fbaa529bf80ababa420ee0ba4fa7aaaa75561c0b7aca731895f8b6316c5290058153a369fa161d4f901b9f6dc075ee0ad7076e3181756dc1083758bdb9e7baf6d2473db712b54250db6a8f085d4d002eb66d16e46680caba9c57bb8aa0f72db97627dccd5b1fca6c67f38cd988e6968d3209ea6a1c13b73442c6081e418752c60dbf17d7a981cd32c108b0cf023a90d36b1b7b300f74c818d17575b9ae12413fd129b1fb7c4ad9c339c0fe87ca14978f910c2f9d57c37a4e4cd4422940771316f8ebe72f0e0aead008c6c316861cab278726d63b55855d7caa3da11fadaa754ca8490737f245e1b13389d9e3b27a7899fd290c6b18590061962851edbb3318f50bf2cc8010d9789fa5d2fbfdbbae0d909e0229900ea707ee3d32b3dfc5dd618bd29b8201180081624680c31aaa4f4d92a48f96d9a74f85561e89df98b847f259a58cfe4ddd974115f12e93f39a42fc789e59c1064a4eef240790914a653c103c751462ce2127f2c221a41d8dd68f932f3db87d2c5ada17c1a5f9caba13285da0f76bab4f7bdddd3be444ff2f5fd0deb8f2724d99e1d468b707e30d073c6dde58ffdd1fafc49c7a7eb83324f955b5132ee88f7d63810ffbdaac23f40d69361a11617e1b70a2f2d085aedab4caf287fd0bf3740f8dfb70e5e620e349bf96b63a061b3cc12f8dffdf5fd9585c657e32e180f6ffa2fd4036c074cfa355b257205d5ffba1e3eb982ea7b5d0e9b5c49f55357872d5740cf0a8561c740c43c75283a8a460a0f7e5c393ea58ef6ad781aa9bff36d8599343cee6d0536f6f76d6a59fa74d17b4b500390c9a451d1294e1129a383b7ae041bd22fc150c9d0a95727a13966a7b29fdc7a0d265a00f96871fe0a5efbd2f995bf2b7f5678b44536cf69f681b88c35d4fc47355953a455754a4c7b78335bc3ff4a6a097748f9ccb7b3406821a4aff77e58555c6a3589cc5c162aa2a03456171c95a479aba202f6a63efc52b221ed50776475227537979eb5245df898d33e72dadde2ca73da55e7fed771ba17ac5c061cb03e7c886e32adaa9ed4a4203ba84fab54282218b9d5baa363b08253ee146939a2214dd7515105c2c18bdc7e4c7e2232e54eca02f529235cc362b6c730f5926593421eb278483c6600e3b38a232c618a43748d76d3983578c09f8b2eb83dd3202836084c2427267e957d0b99858ca3ac0519b2859070237e0c5cac84c7f8a7a1bbb005a7dab00baa5b44b5cec14d39f67545531d4f037039f7db9a62a895ca8d00b78a739d5cb022b393c63b492636c5e19a0a41c728786247f48ed31ca6640552609b7aac48d52171be1e077fce7330d5a5728107051748da417470007cee97486d618950dee4996d129d0683d7d51c50c70e85b4e66a4843d1a8662e0b84bd8b602016fed561dca70e39ec3f8c397f5a0eb8e99f5f774aad9682fa454852409bcb8be00e4b9f4d548c09c68d038d037c3f920597cd200d3a30977ea3e444157fb56a7e19445eedcc8169de659e6bebb8167fce7025a81dcd507ad8f7f61429e217727ee112bb76501a87a5ae7c9d85398f9703d69f11b59639d374ecc18981461e82609777f56c40fefa237fe908352b237444be98c915e9ab7b48428022b3c6691ad8ca357f6234bd96eab595b6c90d018b377a01388637cab38164257580bf6bc8578d2aa5b625daba1c174c1b4e6944b6ea1fd24d244c1f8afbc24f3bc3f05a85dbf3d5bdca0d8213fdb33558e40fd5992b8785b090adf038ceb0861de5a97b4d450ab3aef1e9e6565231dc29f489d779050f30f14bbdbcc2b62d020163cac9f76492dcf3b0d6a5fa6f66d1789ccda9ddd93cfb66962adc5ba1b71b255d6c1722ddb64cb1030500f1e26a48f383b6576b7c2e3a0656fdebf0a964dacf5d73aac97b9f72bd4ec525646d0efd08141d10195e0d0e3086798700ff96025b419131a627595e2d4a6b551832b56128e1e83d67cc3351eea256ed9201926c7501596c5dd7e45c4a4406bd50091c132579842c651206e0fa91d4c12105417cc7090fb082219e3bc2342ce67b7349f4dcd5eeaaafb8e8533e246713ae35311b88a936774d44f9d6ef11cb16ac615c52f2f163d66c19666647d81c4df356826ce123960410a92515a519c9a06e9850633d3db1f226530d103aa6c4de4a095a6a14f2c03b5cb95ac2b9fb31cf853b4b9184412137a48761839b9cb7bf049d15e9af5f82354277a6778906df3c4469e919c6bbfa2dc3fd06fc348a1ea07bd081747de2a4268d36ee7904f630f473557912dc5d1f255deeff53a39f1902012d8f25ff41884d8d9720254c4477ac5c450f1c74b64920cf12412af135b536c4f76e85318763d041e2cb2fe0da371940fff5e0d1ae04bb0398781fb1beba0659184f4b5e6958215169bb001a2cfd358c8deb03983183a47eef27914cc097e015038862d011c0d12e974abd99b4ff2c6e5c9d8bf8bf4531d1d718bea2e9215da0277163fdb6cbe3de6fc40e1ec31215a9cb2e7a3e7cdcd027db9227099fe6528a4345286d928a166be0bddb56457048575b1ecfdf1a51d1f3541f623bd1ec45d3f8985961aa3e1a30c5e652c3bcf0aa88641151427682dae16c80cc75049d3a4134af18cec30b2cf724cdadbec03aadb0e20d6375c29248930905bdf3ff2ad37384953d29cede57f3c9132c70701d07449a26cf9bb02b1f0423e8c64b062982fbfce66b2df60de9a7c5ecf7b33d3037de8fe4eea2e552d0f3096c01cb6548d3283c3cd239f2f46b361a2051070067bcbca5bb647983bd7adfb7438f61a812225265509c00f708235305b6664b69c1e31e6f10a0e4f162d1d3e67cf4104dd61723ff550ec995bcfa5eaaa6b20d63826c967b7b3aed6da76cbd7766b343039e16916328ad201e62fa6b6de0f3b4fe06c8bb3d80ed9aa14b3427a53bc361a3ec632ca4c35bda1c02ff71f00ed69cdeedd1205d2eda236f5099b07de1592e7a48c455609d1d487d2bb6ffd8b39c9f1170a2886b7c46fe9f6cf1de0ff01ee85c8f248bd8909c4f2a4f39b1f3721555043af0311e9748fb9c3fcd11acc84a89c5f1c8b7556ee606ff7c5267a4ac759c3e68d48fbd4a48456fd94126ddd7569b2d9f2aa14826f9953ab4c7a78f362a85856952695712bd1be82c999d90a9f0098549085feaeb1a95e835149535a3447a1a6af44f260a89f3223461d8f74b8c147a0ae1dd8e2634f4948ce56836e10723fde30731223ff8da72e83a50fa6f74bfdb980dc7cd4aee2d1a2314116fa8ada041a2e07881a41c0d2c6636a56edc6db21481ad64fd6c3a19c1a425b442095f128cc168c392dd6ff734a206e3b40b4f6796db39f9ec74ffb0b6453bced906d059fcce8ea8d31a4248db39be063b185988cee4c4700cf9ef4bd758357e1d71c34bc4eb88f3d971cc6eb3e8d549a2714e90dea86e918312a78fedcafbd94548302befb55ac41cdb566e92024c7bb5b3647bb113c3df994084a6bdf2b5e112cd87be0791bd7296af4258cfaf3c5537ea95d51600b32e18e83e48793b4a3db3afcd824aae54a0e4c30bdb13bc38f58c3ef3e4bbd3b33de9d956bb07e1aa448d383dfb99ea9c848c4485456214b2708e93490aa8f4ecff9a0f606af7624bcf0c6d6688e5089e64b4684a66e5d2c8dea40a43b39e21157e23758825b8724c39994b288065e13da040890ed35622720a033a544ce93c3fd96c97ab20d1b6747f892704a6ea3fc04bff9d4c8b92fbbbc42d94ea46d0103ab7c7955e9dae7a3241eb211630b481b9ea91382f7201b8f875532d3fa6023b5ef9476f7cebea381b5ef59176c5a69a17f525778e1ab77b486bd12bfa2217cd1d0fe4431d61f5f3bb2536699a67472219f0438f1cc4185e8eae832f6e70362cc46670822fae3d6f10aad828b65a55917bfbf631c5aef1b00cc1ba4ebd8bfe1d33fe540cecc41235b56fbcdbb5cdc202036a087698941d0d0ebc4e5b445daa972e84ff88d3df9bab5cbbd64221f3bd997c87ddee31fb151b744bfd68dac9f28eaee9fe2d961ecad9fa1800b89545020ee473efd56c41164e913a4f91da3fca4c2e446d5cc4da47c6e0a270a7b48b2c85174be1af2fa1c00c602d87469f7bd738947fc5abbe9096bc89747e7245cea06dba9b3f12bebddd166777e8145adc7544aa2f6d133724545203fd5fef33815586eafb1bf5ef152c2c1b3952847da893f7af231c1ba9e54c0c1f010bf0c7c554130a915c07aa43a9b391c795ba244d3e89fe84ea5052a617dbdd2110edf640e70413cb1e284eb279af8246247181e470292e249ae89023470c202069412d17a44a6c0d82c764b8294e9bb324027839fd006a900214088feba4395f19971dd468cf75571bead57f67ddf039a7b8cb392162b844fc854b3921fb39371326b197e69a54d79337e46866e8b0ea38f40b3cc0ffb87f1373f83a2ee78e253e1cc0cc9f0a2eec2a856d60105c2c02f5385e95bf191348e5c4aa040c3523b4d208ff2802ead3fa5f7a24afcd9c1401f24d3ffc4284aa875c69a2d23571db711e1cde63604c0ee11f7f86512d9c8be1fd09ff85dd68c810c885c6201f7f6e776de36ec93e77e6bd07992de5ac8ec35b3d6ebab303f68732e883414768a447d1e6f3ec30acfa0ae3ea57e028e4066ba4ad5907642109cb205752ddb20f11a6787851a7054c077baa5e4502abc67325bb0ed40a5ca77af7e49bfa7514923ef5c5ea17ce70647086384534349000307bc531c33054f0ca3c1f87ba3b3396e5b24711624c3b93edcfec4d59c7b9bfbf921582c53e9a4ca49557604691746b10cdd059bea2d991625b401f88655254305c05e43bb36415a5939f64f7fba89846cc3800280f658628f2619453191249fa1aefe28a92c64419eb8fa0cdc27cc693a7153c44d110299fdbc4f0edfc23c976d16040e9ad5cfb4cc22c009373e4e83eb5609871776f9e147dc136a446f62f12bdd22e662dff7702786dccc674e8c728befa8f3172cb821fd01df418b12d59e9349bb153a727f96ba66432506f5ec15dfd8125096f2037d7d031a05dae977a59677bf68e31010eb4eeb5849ee6e86a123c9bd15b4177e29686cebdccc9ba46555bc1d593aa0832f0ea78469397fe8247b49c45c8955dd48c1a37df7b41d3b32ea8b2e0ba68b9d78aa803847b98d733f6b5bfaee0df9be8a4d861e4a76206c2f0b7d3ee11fe43c4a57cc0784ff56ba54f95b5432e85636915e80a17215dbabc418348b897236d685b00d91145c5b804d0b7b1a9e8d71cbe5b3b58718c7e2cd6f278b283d5e0ea1aea983786d8baedb72afcc76c9053dcda13d889b82650a37a9f7099e90ca851f1fbb18aa55cd96ef0ca54a868277b4fc18c6d1de669c407cf387a610de86d39e0350801efb6ecd8c318de9109c18f311c0fe0fb7e531220a24352e67e69b3eef7e3de973e70cc919f96639b08e9ed69d89b6b3cd36b40353dc806c861e5a6691e84328bf402040d7c6681e766c7455836bb07b380da18d0809b6140b789f524f71814e0740b023caa5d90438ce3b4307247dcb0040001189c8d1d0c31957299a3b41f212e0da55fb6a7db8fe5ff20d37b4d0f70fd61cfaae2be2d4bfd2d26eb2c63806c269f73f953e64bd6e1304ff971d5b81c53a3eafbc51431ac7c304d3f1f03b64f1527bb6babf59bbc69ade66e7665beb00021fe6da6ebc8a8d9083e1f4e7da780f380a480a2f020a52a74b2b3b7c748084da5e1f01e3622a414e71c3e890c2a4dc4966a275754ebb27df5f144c208dbdf85f46794adfafa4fba6c03a125cabcb77cba4860997b59bdd8653c8d70e1939722967a0e1f4d432bbf02601d2485b500f18f17e5f4c5d64403fe095e5a4fa493594ce8da56f44c1cac22ac1977ec0046fe3d92715d2cad715f9d4e43ae1a087b6a0e8f0491bb8a20e7e9adb9c2b1529ac895dd09f3384f3b3f319c4cc23eb287eaa3cde75522907afb8fcbee88d1fc2c29d0c3515246e5a01902904f84cf88a7a2bd8adb7d03a743818f03a791386a09445721ef36d0a01d108965fb360622c501b16e3773f602acdb35e4e28068d6d57b5e66fef9212c25047429cf2ba54888a55b53247bf180bb2ee4fe9584d0700597e21b37a309cca180337c9b4fe47305feed9a83b8042ce59bb5a26e81c5a70100930591ee8e990979e0c3e5ff6d68e09670edbdf5b5422c17f95458b47fe54838c19a835116fbd8cc128e57bcc9bf4478e15290643b2925099cf32a7b0a15557a7a03083da3651639454344a733c1aff98280708ac4af818ec082388864ac14fcc80b0d3defda759c72472a0136b225f30b5e5a8836d13a46c5b7da6eaa260d086abc90dcb13b7933c40c5865d2df5d16a76e6020dad726040a1483b851e21b9f13eb096b9be76bc539e84e83612a017a7f51fca27dc2dea9e6994819f683640bb57150750b0d3145c0a14067df60205cd0d8fd5c3dd03cf457ec208de4c8c72735306734313b610f21798190e75014e260707ffbe204eb02fced33d64278f1903fd338b8922345f409357dad76c1261cc95856b11f6663ba2cfc91af60c64cc93970afca069c7f528a1e0be23b2b1035318257c27abdae814c9c552c6f1c64f1a10edc88e7f881beaf37701852e58c4cee41ff01f55adce87c214394d28c7a4e886831792c4f99cc341366a659572180de9e45722c0211fe17283d7d2e6abe182a4c0fdc81a6fe3d8e88c280b11d124e2c0956c925cb7ccf879793b51988e6e69d918c78706897d57febed03d76117104d48c2a2c586225acb817d0570b76bfa42f53ab5f4d4eb352882362a487a5b616d049bfc038bafd446307641a527ed054d212a1df50e60097d5d4b3021ddec5a03ea171dbd3621d90482aaeb61752183411e08e8544a2661400045ef24e66d9c73ded190aed588ab0a6ef80618f17d04fe6295091199114b5ea7ab01a90b99fcbf3adc89931730de0a03781d9b7a2c5218e0f9a040ed5ef7c0cb818ef84d802efd0ab0f44d605b8cddef87075c05a718b3555a06653cf82ad02a23a4f7db59b3783882baad4e5be5e644a943a55ca497848c0e7a2819a46cde9b769d470cc9320e93473a75c905345b61cae4451b073cf0e34d47de024578fa220d135f23208e06bfd318a1560edee1fe033ab8c93b6e6450d261948063d203e84483d66e6948860a7a8334b3243b7d744605b171b1f15b5d40535299fa2219501a0d21b8c65b6c55b710fbd0396e5665f4a71343d5009d70aeb270a4e00fe5f64b95e7dfbb16f2d7eb0c43fc505b1be0b90d5db421aa3da3535890e8cb4eb547bbdd65b4abeecbd623eec23b80733dbe668df89b5110508c8511a7993a75005350596d0d46b58ebe486c151b0c035391f87d39c308a88b5c1c713bc82a71148beab830626007c74e1155a05de60904d78388eaa510f502513896b77dbf63ce942033621e39f63e3b3d7268914b460c0e8da8dfb010316e467290fc45de79f06a384149be830aaad14ce70a9b1ed5a69958d41e295a417c1a2816b3f0822d1c06499f5598e434d5c42fe5d161f64f35183a7589214eaede3aa4d0cb9e5da25f117e25eca3fae13ff76f3a1f4f431ec92ff43a4fb123179bca4e282b37d68e20cc11c3b3fe8a0bc1d43425a012a73aeb1b4143f75dd2b4474d5852ebd1e9f4b8842374590c4b1c9e59f90da3cba63cead7288d89c42971915a0ffd71ba50a74f55853ccc206fefd167def4f6a1cf617c641c56a3876d1132a5b5cf6f2a4a3a55f81042762a72530280d43edadb4a10d7144905f360a427e436afad7b43389c3e6df481e95d3c49ff9d6ffb5051ae7502608b012650cf5ed06efb1fa82e5ffac2eea48fca0769bee205beb28aa16c95e84279d2afc8dfc2bee8c0cfc4f67753a2ed12c64adc72316869c8451eb059eb9533e4d558970a5726a24c013b919c1e1988f8ab1438817aee0c962c1001686c925be9cffc3f279085580b8afa9ac18c0d73b75e0370e248d94ac9452a435765b2dca598f95606f8825a202d04067f395530dd5339c5a6648ec1c989d83ad60b032428dd0b25a267fbda445aec62c1d147ce2db09eb44e3d008880af2369fb784505c2ec2e9b9ac324def0039b3d695e6f57d5e70560f58a46762276338d5df3827c039411fce387858cfd9f45e754d8ffcdb7ed7d54bfd813719d1eb761ed1627881dddfb2442d40ba5fde47842602baf325a071357ac4701f6d667442baec2ddf794ddf101e70fb7476f63c6783f992b9b92cbe418090d0cf5c611db38fa3b044b1ab90fa730c5019dcda33567e005a347178c10cb5e91d50e89f73ca399e0494e6a049fb6f1fbd604b002ced212f44f7a881618e480df6556f7b52b853a0b50dd5b4de26fe8fdaa710304d12d0370ed84ce1c72f815980f532bf86ca20f935f9aacb5c9a3ecbc7f6a86d6119c08665695a28157d29c703a6a9ff3b48b2152cdd475eb07b4a0d40778527b1e050b774601f570f2d9f7082c8eb70d09d92ce50dbc6bd6dee09c3f2c28d753e7021fc62c5b57cbd5829b7d24ceb6c27437d155175813654e845c03bc11383ef3358cfd5491b0c1c0a79661856bceb1fe58262a1da9b45906dd5dfd326b2d0bccca857a1aa2b33abcf5445d976459b11f571784f2dd638fecd1b78fa9dd9f6fc732d9ce29b424dd0bb3ab542fec993a6b6ee37118476b890604a1dcd05c0a924e7903a19bd5d19f86d399f98c33c71d0f6e10b51c089dbdc48404238eff6cefd05d2be4f4d4ac5b8cce401b0f46f4e89db4ab71a3738ecfed3543e3ac01eaa7f0052927a52523d6248eb2721ca7c850360ef91be7a1ed9aa6219ee01ac028a36376af35fb6b34a85a925c61682386101c585eb4115e38d74f5704ca221b244faaeae2e7b6821617c489119b56ca1f5814cdd8315cd173c8820174f3ca7e3406b136ce6b208fb9112d2a2370dd1a08788e6e68722d4464ae58d08e6f444bf004462c254119cbf414848e15ddf280161dc5c7d4a8be705bd71b1780c4e5b7256445a4f254596eeaf4b70935a659499602d630b19e6691484494841235b6eb58f40dad4dfc12da49b3d3532a19918cd2ac50a5396ac32ea7b6c81cf472cff2958b8e357b862a51f332dd2db491bbd5e8900143b998b9d481227e8252827c6987d1294819e15d67a9e5a1aa7be5c19bfb54e53f082a092212c51010d2785ea6d83ac17cfc20296cdd8061a08565112ac057fbe6ee95d9d90da5f04924e43b51d545c042a8e60e601840d88c23ec897a31e7bee8b161b53e5990d6cb8506f9dcbc45fd76192525000ff52576256d1391443836f3138d72dbd1c08669ba1f22399feb5dfe96cd5bf89346e1b2a53ac0fc821505cc61a929a7770a8455b3c0cbf1c92965211c7824b9489d847a74a547d49f1b53b3338ec8080a12e3c031a249914bbaf66c0c014cb27905d3dafc7f4c11fbb1b115d12f9151a681432a11f6ab5aa3e82cd77743d01a94be4d245434f63324e33dfe8801b6d3c19ff27c1e6d64ebc80a43c1e743ec839b74d17879eaea7e166daa2eb8530beb0ed8a05e78b443d74148fd29966ffdd0b908320ff5535111fd3f882f66003cced544a975855ddf811bad68f628e636d5a688c38f130964f89f67415538450f3c9e373522ed08c53b4e864f7320eee659a71777233d87790526263fbfd9a2c04a8f5575fb70e89b376d4a1ccc0bb30cfb6003963190a6a986b9db2dc347d968fad53f90c7fac1c6de4c98ea34599e487d547bc86400b5e825939d5e44403b9d78aec2637bfb39cfede37d0a3f99a048861ef79c301aca4e9a7a3efc641ca2be91b12ae9247c58a16abadf52dbd39749093b684223cc4b46b136977b6048c55a431e33d8c122c3e2260af58b88ec7a4cf36990980ea0ccb17c98f72c52624906ff2cd294c0d72e55832ffde3e784ca22b7d286f19f3fd6811808e9e1cb526a9b3bee2d8329b20ba9665784af95734de544c475160a3fdcc9c9ad3a015d68d993efcf5d67c96f15ec4873020d07c16988975940b898dd94c33eece36aebc921850bd39b3cf0e258bc3d7a5329a10675cd96061d6afd8654d4343a66aa0eea171cf0c74fc7f4fae96f8d62cfce113de86483f26f7ae7c4ffdb69bafebbdb6ea1b9b2b047b28bbc5ea14513544957d35b7765bf657066e2697aadf7185f995ae0f0915caf753f4c219427bf72f2708e6fbfe23218358f6cf679c90c2c5fa6e7eac0c82f861f605a3a00aadb677aa1bbe226e3ae740167a07f2b1ab0d40002baea92cbd16c1d0a619ccad4dc5b5bb1e698a904f2e67d4764185046b44445f0c8ec0f305c6770a6118b6aa1548fcd93f89f85014cc8e4a76ea3cc7649140b13165c926a172cf0fbaa0c7fb51d72d8a8fffa84ca73b8fd55883787c556e0250cff8080c7b76e959439647abba3fdcc62fc27c3a1673041634b6027f5b27509ae6a6a8aa93e6f03eed4f80b1cb548236c0cf329760dec09fc8f94ff1c824ff0a9715c0d05bcabf182a84951283da4c07de9fcd7f442520568b436a58cb3e584a20ac8686e4a9967eb09a514d08853278d5b0b78afed81548982889c010d5e96d7e040a00448043f00f66af7367ca7ef206a0e09736f271041aa744fc7682cc6af435a5a03ea5b542168cdd98f2da6a377a86653e8948de0f2a4e87c65e17ef50b446cbaa85c3c585dea00d19c83058a97a3bc4340945dd53fc91d9cf0006ab46c25f17a38f5932afe247a9fbc57e59b2b69f0ae1be713ecfff7cf9887899de58e36c586d5502acc3c0a590da535be3e53b8065e7eae54ba705ff5e980202ec04b6e35959792621026f23404a9415f8cba569d88dffb812a7b066a35f13f9a23bd92d7dcc7ca619fb4da7d3b74a43c87d24ab263de918950393592c03cc5df6ffba34186885a9cc898e77f5e52dca15035e8f28272ffe4e98f3c61cd8ff7f471eae4040f9daabbbd6de1aec16f7db74633861b112689dec187ec9f58265ad2a4a0a93cad3b786b678af93a9c2e214ce722cc2ecaa209d8f1a652cea08645670d172145262516188f19ce6608a1583574accde37fde83667aa4656390cd8134da569baf02dcd36a8bdc2d0b9e7a69bcdd9f8d87b31b6011bbbed25c0457f52039be0cac7b0da2f14eeb60ee09ed789b7c40c3ffd7a67a2004b3299feb2d3d1e10159436965770c77b825a4e3c90015dae1d817324cece8250aa4287f77e3e2c870569ec404851aa31a80b346877183ca8f3586b1a83eae5c7f50087132bb455dfc6ad37911638815c6a19016f9de9def74083a73c2be5520b3c0a34c6769ba09c07b9a3afc430cc78817731403310fb0cc5ed803c5118e8376b4fb12768cc009df00f967e833102b98ac739300156f3276aba276ac860ea35efe95f04ba2b07bc5b19d5d60bf4f213bbe5550c946ecd1481ae428ceb469bddaf20f3337076356111e332cb703f5d793f8f67b067514f1a90ad67005f2470fbd3ceea21910dc8828490cf065f1c80f4a1c53964b66de7d246ae9715dfe94f64d6fd6fbae2efc430901de9a6a3ee110a190b06dcf8e6b1b7ff223db6ff33e8b5c21d5341b066e47dd0e5ed077c09689659023eed5ceed84eaa569cd6800fe7671f398a8e91e2bf160c0c66a3304ca67a9fa9fedc447971c50d469833d27fd7b57857ded4068a96467c6daa81a4fa8245bb5a449ecc6ee586e1b3af73e8a9cc797440b5d383f63024bb575d19be4dcc5de284a79288bec908d74e4b292759729abae7f8c4301651354e35879ce71de916532729fbf38bb730927bbbce4d5192a7bedc04101714297dccc0a9ca32f154f5209c0193567d1f6423836c9b012ba56c2a10bcac7807e38d07392692c45aafe75dbc15330c8ee5f2a560d35bc42a2f2ab21d0b7c88d5529ead63a868013247e72bd1e6d7550903944e80d32e76ba7b31ceda80620f1cdf19e7e738a6720b5b1c9e5356c3bf98230dc330b4cfe61163e998ff66604398c8b095c3aa0b649f53eac71e8c08bae9514c9b7cd15e76478da1211660aaadcbce36f5612032ff1154dba7994f15f7e992d81a19285e679759c48cb49676b9ddc7aa0f2e73cb2f77b4df8dc0e59b329a9448fb3f0683ae2e961e738a54680276103bc36e101d5dabcd740f5d961891d0b5abf70fe296899acf328c7eeadc10798fefab6ffad195883b191be9e58fc94cc93992a82760c852096240a499741645ca3f210691d112ae82f9fe8159fe1fa37aa6d2483935e803f2554e7785857bafb8a03aa9e59e4531cb46a25258e036cd57db40a85b54b5aa8b4223a742be9e527297853b5516ba327fc48534db57796d5b8276bb797a6e110a5ec2169c33f91c552a9d12966c3b6ef8b23c123ddeaa0b5106e52e40baf97ee050a0d25172e2e32787b9d3da9489ba13c1d0ad53c87e6b5f85353d79cdc820adaa11881b6aac0525f2bb3af3ea43be3fa3c497624a74cc3e01183fe8ecf65938c46537c77999b4066850c9b7a84fd162e22c5fffe33cf6dadd96435de5734e4f94d523e0f75c2f912f6e4a54fd02250490ad520702c1628f4321b3c4daaec49ef52d5da4a9d6c4ff11a8f3d7a53d7e9c6c80fe32dceaa56abf353c7005a322679b6596fc8705893021fcc624d9d0407a597784de62dcdf39fcdbd5bc0f17031ed9ec1f94e073b4756201e3eb66945bca37300d7cd12b594dd7035c73de8a2c3fe96aa3b4cffd1dda35ee74a7f45ced87a88d53f8fc98460b1e82ae454e6098f861161760e82825d6a6f4927f25415f99bad5764957766bdbce516f801ca45df54139ba97e5260610b767c497635aff69a42d5bbd9e10fa774a305c8c91256c86d8d821a97df1f3eb50d8f0f18e3f39730b35a2a96b9cb6d99a875018da4d14a90fe93f9110010b9b58c4dbce26bbda24b365ac710546cc892d0e83ea292eae5f7706b941f728aaea327a82bd83579a143d320c1557a64f72eff04756d91051515802119a064751548958afa9f43aa965bc53df69b55847e3dad49a7456a622ad4bbde9d87007542928f04f1d8ddfea776b80ecaec8b7fc29521c67c65f718941296c446abf0541dee3eed81b695320b2e14554c2c31cc0890115d6f93f2eb6752fb934dfdad6166538b07e2d5c574b029141fbba50c6ed704fb43fc435b2eba21cab31002d59381330cb876cf23df66cbb9d4a9166bf7e7a52273d702b6832c2261ab82238efa24eb1584a37155b019b9743358a32cad69a58c9e842eae81fea1876d6aff13cc495ec1732f70196bf40bc8c92178ca5c3fbf3dc8832e5cc364cd0857ed9edd8015b5bd50cdd74a561b3d74c385421fec113f65cd8fec73a8933d60fa875aaeb22571e93e58c6d8c1b7e3497c0431a89494e4ed0187cc38f6132cae03abd332f246e334d2ccd6c500c9bccc3dd7b3aa3dc863fb2774797649984a90b6a097d1602357839dc243b56055cd828aabd18fdd6434ee43990ca1366ae2423ae8a2ab813e7d2aba7e99bd3ac2ae5c9ed0c4198b14037a7faf976ae98d2e57401a13b4ad96749ccf113d11e5c552262a178666c98da46a9cdaaad022a863c790ac6e3ca68b317f18175a955a7de6fb46f2b55f4b43d454fb4799a3f38b64a7ea787bd641f8ad1500e81c102cce8455cdba71ed7e660d4bec8f6816c99bc0b69e2de6694b55745cb2d987ece58d5242ac472a7a8a4688d0e6873a8127572232b0fa38edc0742cde6c285560a5d0e03934b5303e01909531283918bc183feaf304c70cb0878697424fbcaed93495f3fb9f3d9555a5189b8a6846e16c51b1038cc4d11e7160a775a41f6d976834b1b50f0b9ecbc5b3074c69551288ed48d403cb147d6131c11b3e6afb82f22606b6c0e703546550a62c527d65642a7489867a286d27c496a267c1a0ce6e53555b0d9189a07ef5480cf6ef8bcbca70a6676c3f3e69d6af0d9f0e1bdb4ff67fd14da6862135a6e7044bad5458b6c2338b7902e2986a9f24cfb56c3ee76e83ebdb71abedb43fbecd9eaf0dd0fdda7e756c2ef7e789f3d5b19b6fbc3fbf6dc4ad8dd0edfb7772b1718f675fa19019be02736fbf10daef2efe5b5bc368d5892848375eea5b61762032eb497487981056c54781d1c992a260ca908f79ad6731ce14eba98f78e709d13cd5ae86266748c715d1881e95fe5ed49ef620821a07a3cb5a686f4872bbac325955839d7ba49b950f504057f19cc03d42cdfd85552f7d56d5544356c857fa84dd34a7409556f21ddb862ca267270fb1fff026ec1d1707571183f9db0b5fd069b9ccbcb57b78ad0fff3968076fe7cc273ad4eb5cc055926679586676e596addef5c0fe2713153ddb4aa98d5c1824a88994a2a0458acf01d3670aab6f34fc51301fb2c6501f5ace8139e1555c20cf875aeea62010d91a9aabbd748a78cb507affc3373810decaa0d1438b9598b09dcc6b04c54c229fdbca75691b1f14e6fde173924ac1c4f04f45cbc73e78039fb47a5f1c73b0684cc6489e9589e3754cf0a8be15ad8799c07b15e3f2a9dcaa36edb0b7e241e2d663ec43d18aeb41209885e664abcc53a19e2010ac116cdcdb33293fd2ce3480a1f7fc0101dc534ffee7554bc678b48aae7214845fb76a17fde1af46e86fb941a0156b3e96257ec800cd5017f2c8d47e42b2e16e05a7b1bcfbe51d7950423a5721829e66df86395bcd1658d295c7941b3221503704ad36e202fdcb252f2f8a0d913e2f93514da086924180528626f6822432d2afac56e974563bea0ad94fd96e6da2aabce8899f22206508b0096d5e2582d50199a8e377e1516b5ee6b12233d18abc0f4f8ed01c07141361820855e8ea53b28979e3e68c17ad7fad5602e80742f675a89a9b7d499040e8af045c518e25653cae0cb5f52e5f55ddc0a2b86e99a340c35b0079cfa5b4824109cbaf01aa3ac9bc0abf21bef8f51124f5623dab4968709a1d6a37248476bd0e333595e274489362ef8ed6d4306ba432973aa2622e298941e81e6950f4588e64f457ca28b5855a80fbb73f5216a9e59f268e57dc83042028b0a302c03f74e4bd568c53c7b41be1cb0258d6a2f2dfa4991980a8f9b30379aca64263896a15c2c62f747470f0eb6ee2c240f2c4a6c649fcdb319d2193704a56dbfd5a9cf241e4a54a1ffef506227a72c8b0e9c1ea62d291012565db244385bc2ead076e84807a194cbcafb8864e51e7665863925975a0baf81a0fc370b244d20304e382df509a7143f1df8140b5bd4db05532c4e4077bdb4d4a7787b04cadc95df1a65081d17c4531ace41ebf4d1ee727159295b8350a309f54faa3777ea7f69227f05d384cccd935ebfc403fcb43b9c71f5c64b6cd17ab0d1e304d76347c5652a3ac9712e29365c4a9ed1bb1205e62e728710cff1c1d2880245410110acde68f365ab244695ac5a1aa2c0b8b3f16d49518411ffceafcf2dcb388ad024e3229f1351f4d39c5aabfc2e5da87d80396a0611584beb560f07aeca7de60036ce2c4478e5350fa7e7118c73a382acc771b5e118c037409914cc79deaf5d68e79d66f486902220fa5e88a1612b478f131686c4cba261bf5a448a7fcba892e15936142d755c67d297b23c94f71cd58a9558e0d750b983473af53a0ea60d52ef9539d4d278c6fb91f6239c18d15ae483a18c9495178a7fca61fe9ab355ea8203639ee343d052a705b44c62ad39f5b0e8664aca77c2a270e4681212bdd5ab699ae96c750fef5cf2a7d80aced4978850e75f886a343f5fe2c2ddcd512d29dda0007724efeb58a1b6027c098046b25d3d8a4686c00bae1483d1f03a46945bc87aee0254dff4f73f82aec6623f5f51cc195876be1b91f83898ad3dbcfde73bb8afdfddeb7c2a90f88e12d2b661f7a8f624b26e43105f5cdc1b58348a9031af3a5993c2ed0a164f9c438cb612a03cc25e10ffd67ab40961c9c49a91fe9c22ff10ffaf3a0edfe38ad269107d6038f074a868269d46a61c921c8232e86d53a0b25058492253306de9817e4b79b1dc780a96f2fd4c317df98d6612b1bc90dc7e07acc2494706cd4fe87884878404f6d12fa45df59f86b1e85f5a90236d2ee45badb83848d0d6abd0d833a6bef394b4e32a5c4e294a2e4ff8925022a0e38459d657d471edf3837275b3836f844190f4f25d61c230e013a8f62527d10f26e5df16198cdf4b04e9f40be70f1b234291924c035d0eae32850c2bb9e75445e11a2656cf931bea829a2211147b7ea2872f275d676181137e01912796e89b9e2cebed81404b6d29eb88a2a5e2df3f28f9f78b25ee1bd7e74625abeabdad85c89c9099b1095404cbc8292eabedb9017586f6687b4048d2a3d616ec24d2ccb0e31a6ad684b3021ab68af8df7b34ccf9339bc7d330c59092da03c4a59ac8ccd2b5e73cc8eac12c98aa10dabcf0e2e0ec12173b83e901abc5ed7bfdcbfa0c800477b3b6a0a1db19b5fc5e9297bbf55833a83e5efdf3793fa3dfafca4f64218b26d63831338bc7e25f0a4ea97cd1cd2191e0a293373de9f31760de95141bc489103715fc6074f497216c822aae85c27c3bfdc2842f01c22df66088c16b431fbb4b5d01fbdda95e0d515c95a1e8689fdc14dca10353db818cfd7b3588200598afa2b7d661c691e6646aa0e72db06b5ca06fe0f2b9249a6d3241591f6be07c69a20b48643eebae48118ba58f000083df3992e2487a87412363939eb35212ad891e4a2e25f518c01acf10389be921c4f95a5a7966e79f2ef5cba58108887407a5f631dda66642b7f3eda552e405490517422a5064f19b105b3dadce8505cbfe1ab16ad50310c67d208de3dcb078752562b5fd525d3db0da66cfdc6c9bf6120923b35d6af67687e4516aa790a2b394a5bf2c21d9ae40fef26d778d6d3ed76ca6d16f1bfdaea324d78024973728acfeac9ddf82b74bdc5d56cd895587a86c364daaf44f6e7886b5925672d21fe667daaf5b61cb1711d4d399ced9dcc49bba80419600cd5d94ad7175ac10844904b681ac5aa8506bc393e4bfac019be8f27d99170d594682c76961c15ee04d8a1e514645fd55aafa6bfdfdd7b09cbfc6dec6db4ceecd71dc5d9be3e571988862f09f5f70bca3e9b9ad740434817106227996d834cef8a3128388427617d0e53f286d4e768976ddf6079f4d5a82094733978872bc0a30d510da721292bb79a86577335db01836fe0d752c9f9f28d3bc9386330fef95c3edcf092f4e8675b0dde4e793560284374b7b36f77e768ef166bec1dcb4b93a10f114a28d35aa74c2978cd22ac1d6a192e6d340131503223d7f2f88721216c5262865a2bfd0d5ec62ffe5592976349a544673d3704281e0253e6dd3be6de50b987a2c119fc8ac222e8e1fc44c075564d1d32a7a5b5590ab9a6f5aec6f5796f6ef88a01ca58473fe52e9a7d6d7cacc82491a37a97a00499590749d593dd95b958da6129d14e79c1aeb353873a3cc19f3a9b3af4d8a62e340a048c5d73113fcf44ddc3640d7753c01a14c05151885cf532be4a372e878c21c9e4c30dff59d8cec9dca6cbb6182349090113af8013d11bf615324784773542951da3f20340ac24b9432f039db9d6a3b04bba1aa40334c25c9be911be451a1d621e8317c65e809ac6e4cc3eb282179eb781e4fb4fde05cc75c0be88090c132df7950610ea1b08426bba2fc4d0e860905e8daa1b64526c20035b8dff7b06d4b26d6f0852da7e8e742fb359074b08eb0c2929ee94c2e6b054728810171f0a25b9ed40892e36f36ed60c397d0a204c9167c6cd2c5c90872f7292ef0f582c37861b3d580b1d682929eb35208d6ffff031c35336923a5e850a4098bedde23f5e71017940d8e0b0a3a60f5372e787ffc0a59be1ced2a19df6d10c666c9e9935a2dcd69887198f2798d6528c0fa22b5989c7ff6f2a8fb2ef09ce4f3f3e61a4747a1c647a5c38b35c3745949e80b83599382be7cb22c8a0f9317affe5b48c55c66055c48591ccf39fb537a8044f9c1454004c89dc67fef64ce7c954cb7342b70eaf61810058d4d66a322fa3b4914d9720ff0a6c66f300bb52edbe27e40ce1157283799cb4c33362938adc814b74d8302bb09a8b3106d507a9568349fad879f1e10224d127851a0c3fe9d08fd1ff6f5b43448122e5a59b83961cf46b2a0645b89a55e4208f306b98eab886314bd7894d0879f73e3be557181de85584d2038eae7e9102b35249d75de1db66cd1004fb59a48b33320f5d76d383f7e29843e96248ca3431e5191f058aad766e0e4fe9121ffa3b23f95ded94a9923596c2768587b1e7173c3654c59b59b1c2420fa88ac54204a8a182d55ca3900a32fb527a038ec25a967f12d4b57b128161f73e3e23b6c0e116adff5234db94b1d6ab83e8551088e2c3eba684b47f9c24202f28f6141c1d957ddc3158b51f20739dd64cc58e896f8f88dfb331d017963bed3fd3b2007d7c48b41f56909d3153b848bc5d24ae41e0105600f454c686748e928e4f6d657dc348a95e6f87a7d4c13e403278801ecf3fc824aacf85b955b3cee0c8ee7ea80d61b86127a018108ac26d2e645b1f27a2d003b5873e0802edab7b095565a228e759e7081eac91ac5b890caba8282bb4e41ac666d209bd9719e3250609d4603887ce25dd835938c031a65b185fc4e4802d8154ed9312c3b17a9657de2347becd5e18e914ad9cc86c5423e4656cf3a4c14f866c4573cf1202c46b0252d420f164966a8599f2d59ad5a06f797c1b46b6057cce710316926b06633584764c8937572e966604e36dd7b0a4ddbf6e67373b4c15f089d04cb215cb09638f0374439fe50407ce640a0f8047b7ab38aef364b8dfea43b443a8cea9ef79bb3042086025c0ca4b40209e192272dcc8536ed570c0c38e93ae56ee0b3c68129369076f56f82df163610bf200179d0068b45f95a510b20410bbd68a111fb85f8ebd63dada542fbd5367fd2d959c90831e91a4a9d8620a67038669898d1eb8f416637835a6a60a60c8d173b1a7724e5ee055e610b4fb3ad85a7fb5887ce8b609ce87f93754b5907ec990238cd27934750848035209106db0c795a2049ef13b50e4bcb1b261b18bd367a3122c5433ec49ab8e72af39608fcce93513c2f7e1632ff4d7f6be1bf2265076b9a6583a2bcfb4f67681fbe9790a3cf1276e6503fcb9d4ca07197169ef9ed5072326cf1800c898789285f885ec193727cc17170361642ab801477362fa10b752d6b60831b6f3d103d389162eb295d4dfd2ef10ad89d3504468389fef75b1a6a171eca8f97721aa5233cdd380efd0214ab137f98a871a1f3bafaa8a55f368c82c138f6b920020a3b0d49f4ac9ba8f7a7e3b8d8262f1ed7e1e74f2b2e5c85250b61f0d68194e2f3babb45f0882f8a7561e3517f1b9aa7512ac00e3d56c57d240cea86500484bd0693905132773920934850964bcdaa8ddbbf679caa44665e5a5455adbf258a34cdf92c5abb56eb11158313f2403f9dd1b94006bbf102cc82518a44ffc88997efd7cb7a5ef8e1872dd0bb8dff191532463f85892026c2cf3ca41bc14c69c2afa188d0167d4d87a542e6950af5ef78bd48878a115d199bc05d9e4203308528bcb45cc6177c2ceb60edcf41bc15f4d72b452af83c49177433f42772841d7cae99ce5c046489511b8752182080e71b60ad26cad4169683f240f87238e17643d183a21208970c2f3933727d04fc4b9d2069af2946dc0a409410f9017a31b42e45cafa5caf41bce02c3ac36209a5ad3488eaa7c73399316a4f67024abeb87ec13119b6bee58623aac2f9946993b2f26ba80db88b4aaa35cce5324462715fefd91a1f035736fbad528cc2c97f91e50d84003f144dcae7fc77c330d2791b1d8fcb12e45dca184e37552f78c4f760aa255a731614cd58da012975b949c9089b0386f6cd600411070c4cf21be4b8f6724a0cf6fd22e24687998c523399c6b819e2a73a42607afc2d923d128cff3339cc89356163d0dd991bce2da52bb1726561d201a22a8d7007b1dace0d331e2c68f0e3e57efa07210b5e827aaa97993920493818cb2aadec36c175478084aedcb18b42712506b131c56ac7ccd217281f4ac6746bf2c1499e09ac4e83469a460a371ef6af229ba10aad584991a2d0bae3d023f824e1defe999e771674c70bfed6b47af944cf0eba8897772f20b29395a16d9440a223fec0ea4b2f47114d4405a78ccaec43189cdde4788adaa49e22f73f7a33c05d5fcd296de37d0ef186374e76a213cb2a19fcd1576aa85c49a5ce4402e863118c2b559179b3b8dca38d04a37603b156766598fd65a103d33f1231918d7c121651a5dcf737f2be9f31e4a9b329241f5e18cf7df824127c12e6db95c6be4915982ae9cf254fb952171183195833155ba1e968038495f1329dace22d884ed2347512482aed981cd4cba3d6c7a4ccdc9f3387f1eb2023d1ec84584bb8d23ea013059304f64c4f6d2fd440608fdc859374d592947c97ff728fa22957cb6836cb6b817e8dc891fa3672a0085a51a5259c95249488f5143f695fa62bff780c1587b412ed000e16e6eedc795b2aa87f565fac31b46bd53946ee306a10e95825caea1dbc2cf6ea205dfec670a5e7b4be2394718bd670a25589d307edb41bd866f49ff968e8650a98d7fb718bd9ef3ea27cb569a9cf0a11f34f0661390ed27b53705aadbb848dacaa87d069a59a910df64781e9798bfffd87735d3e4b5f7e074580bcd2424a2ad8c1f2f7a2a97deb8d44156d1c704798555296f2c286c3eabaa9b2e90368dcf48dc6762c824a1c3b107004cb89c46065c653b305224ca66f3cc4600af22447f59d3ba2a39043b85c525abeeeaa250e350542bd7136ed62e3bed6d813cae2214688fe431fde4241f90377f9300b2955668f8d63beb7c29d80f4cce010af0d333e3667227ed10e5ab05760a38e12f5e95f9ecf957dab1545d8a075ae4677400f78c38f25537c09fd09f46483359a454bd0c25f30a900f7e24240f4e81439836cedc3f63f3240b4003ec01bf667be9704bb3fd05236da6cd6cd6a90ae2ef11755401e82019193e504deea27c49ec3619e9337f2e1a811199444995f0ff589b704a85f32c2a2f177f276c017db6a6d60d1133b82b24382a0931b8f9a087674c628ef7ac789a78497c1461b25eb5186555587ab9c3b84418e7f2302c1b8ad55a1586e3b48b918f0cf777c5c39b9f881ff5b2edb2f2b6ba75e31e4d9a0b6bb5bc0d26475562400f424db2ffd86e61ff264602cb2e4c94562fd15f3f8da329faec49f414a3c2b2ca3d11eebd83ab763d3b25c77d9f15a8ff5ad2408ba29ea2ea4a99964d7bda449f3338fd3cf3af331f91570fa75488c9d2292beb988dcbb21545ba0bb10dc9678c024d836a5c4730a57fbc6d2c2790794f3674832a463c7e8b08567390b805b597ee10519de576e34564ec51ad63698dbe6e3e4b4baf66eb87cd8a467a63f754034a838b0612050ba7d82d65bdd4202f870cd11b359b7118fcee4c9b8db3bd22f656bac64781dddea556d24e2d39b00c462999c04c8f3834a8ec85ad01c7fa50bc536ce4a368bb8eb297daabb90aa3628871ac8099c84e755caf893b44f6f26b3b112b804d50aadef4f12677a161c8ba06e053e075384dae4b7da3fcf3c7e011efeff47f0b63a2902dfc71e1a19712850b66a7143e2d05f7977b4137a81668d0ee24bbebff8b158bb0a47af696c4cd0d56c8306b159177ce5c4a38905b303d27bfeb8a7b1c31c149c8222d9b5daedbe7e48ceb5d82b35998caa1a9cdf394c9a1a16cf2b943f0cbc2824a520459993472496ffb8428b167ac7d54acd6f38fb00c245b0c9d778a7b176631140fb4b0c9eebd7e14bcb72267db24cb31cc89ea9c3a30438f1384ad73795e900fab701c08133c1c13c355b70120f8c59f6a9f8be63eb445f71ef6593ba32dbae4ca4668b05693811288741d10264d7712523082a50cd2a15763a91767a1234446a2d80b177c0a0cc42af602210616aeb2af42ab3e92ee90341b2c56f8aa2c6ea3c2d7a8e833189a8aa1b3328fddf03c04019b8ebd932092acc5f9b2e3fcacffc6b25d216d2858e5655a7cb4b42f8920f5269152ccfbc383ed0d1cfef1c405434430ca4fc6657d15d066b51e1bc086d143fa248438e5d4527e3a40a99003d657c187c3e58a86ce4e1eb94ecc0ac9905f5ff62733532568330a5974617ed19c1232af3c3192396de34a1b3c333d9c6049c60a3025edc2ffc7b03b9697d2d005843f5773842ecac5a2d95adcb4ea9075829ed00b71e34e280aee8820182377a7ae54c0445f34504c869b401d41f401036183f59a08371e80fef03b04544c865706b7d882cd4d872d0c405416c453c1d1f9071826964bd02394b2944b2e3ef72cd1506ead37a7d8523b5f6fba416f072b296046c62dc2b77e8bd93e9d7596b575d592942fce07b4d3ba28683322b55068e478410e84d21a8fb1151e253086aa8649877dd18819e348b3ba5c43806665f448618720c7cec39065e11991d6824518da3a5907c24c8139b96428e634b41053bc84b48570667fd47134d73ab30fb40d1f801de0e3c1fb8ef52842eff7600c68b3b6054ee610f7b89d4c68e6fcd471e01f9d6036f177bfeb798607fc92fe4a259fd3fc65544b65958eda3232d32af58e466ddb03f8779c02e837cec1ad6d879e6811a1a345d34bd968ba967cdf854b96c63d9033c1f0952c4680f00e3bb0750ad071581ba29f67b52107063810d32050c1581b80926c0aef3c309d4b88c1390167213c657dd4f839ab705511e0c5c53ecfc3b8ab65c83dfe7e3a8eea630632d629a9e24062b2449c0b4b03ac0b3ff47a9c53dfcc46402270c6c7c2fb85a267d6f3ad3778a8e2f7fc9c710f77f9a9ad4656c82379e4b5033ddece398174c26f53e1d43867452c839c83dd69bbc923fd61c660a6b09d5d815b8539541b85497d36941035b7c4b8b1894304ae4a74d2a6a80d2a1b603063ba07bb35f9d55ce5ed6919d5ca1e822468add1902d56d01373609d9d11d61733fe0106fb575ac8ec8025ce1973575b687a829acf24e4d1bc40e7b5487d6ff15e3ca971335244a918df95eeac963870cbaeb47ab54ccd7440c6bf0f2121c5844cdf9553d33bd92de34829bb9216eee1b8dcfa7c19631402d42c736fd5a6e43e628a557240c3152e678a8f06bec917159a1c5f5ce6fc269b8c0ed497fc774f56c5d6beb8fe6da0cec25a1a9828e76728f4cb90d87f56e17d80892b5aee7237795af71a78b1d15a17a3d4c898325f67f8c61323272a92fe372a312699dfbc20c00bdd42593bcf618bc84cc537d289316af41e40923d812b3a134d704f4a303dabebe8b5820d23a4a0726d7dbf8db49d87be375d81f26e387852ed3b49dc364728ec70d589b4ae218432b5571624550847a3006590100045857707b932600f5ff76d65c923b108419cd5e584187b3c6da2f09d95bee2da59432a52403bf084708d5086b10a1a60821aaa0c162232a8ba02ad22c42ffb3f7410ec2df1bc641f8230facbd9db5cfa7016098800c305a38a1c414167feaf9a054708225299e70b1d285c5378831c6f67edc6329c618d144b931c618638c1c63fc18e353bdc73d8a628cb18c1b638c31468e31c61863f48eb1638cb1bbbbbb63b7dff8188b10ffbb0776a9a986bbc72975b8bba78174dddddddd25740821749f5287bb7b1a43d7dddddd25841042777787efee304287eeee9445e8eb2b7a830e111a4a394a684ce128eaf3d1e520dd4b3123fb5e89cf2053b5d416ece9a299cb5f86399a711f136aab7d6cea50945a94a57b9e971ea4c9e17615ca6593d119256e57a79c69ddae5ab1a95a2ed7a3cbb021090f0863114383a5d181749deb30a4db8f5ab2efbbdaba6c068b531e919c1be4be87479108436211e493fbbec3942e56e6be3fa9c06263eec358849c29457dd6666be2665031c392a122d1425618b1641801081e7460c1f7ad09b75832bc2416e48cf013d8600a4b86206fb0510328b4348525038f0d67ae7414389071c611ab09cf40c418960cfe84e9a3261e7cd1c119966f950a566f7cbb555f05fa74a439beb621e74435e8f6c9bee46450498059f29925b9a18c357f08b284de2b40073fb226f7a486134b7eb37efaa79bd5ef512b727a927baf009d8dfd5df420840fbec7692fbe17dff3db97d143e2ee1fbccf4b97a2fbe27bef7a417d37c6185f8cf06464fd4df7752142889b4130eafb35f2bd7e7a06958f512aa594b293b2fff5334be93cbd3b291bbb2da50d0bbabbfbc484bd1e23e2850d3fa4945232b794524a6f8ecf2f254a4a29a5ec62cd7d1fe57befbd876de9e6194ae00be02a89dcbb2d5cc19ee7766f071f244313fa14e32e4ee80910d6f543382cfa1d8562796e87ba70435d9c1963fcc85d81ff74702377e575af8de7ed7ddc2410048b2d6f744d2ebc5202195e1544acc7b55e1544acd38d5c075197ff6914785510b1986bf23ee53ba84bbf25f404088b7f0887f5849e348bfe900258fcd736a400166da2821b91e4bae8334df2944c5df320e4c263fc31fdbdc7e8eeeeddef7f62c2bea71eb9de82dee7e58a2c2e7c18df833246086912750d6de341d83ed418c511d90aac18163ee423eabbd0ffa5103925f131df628431c22e46e82eff6dfeb2c98d2dbdf0600cb7731d785c177f3cfa63378931ccb8dd3b63c25ecd7622eededb16e7d729a79431c238542fed1e2e1ed0ebff1137ca2476ff382b8685ef6f0b2772e3471d26246cff43f9e376f28c181ff62a42a7c1db61e4a5074574f3d11ea8db0f96ff6595a590f1c1528ecfc135c9f1290ec7e7f4101723564e2a95fa14d724f5284e950485fa2016b7d12db6ed37c9458f8d07846d5584e5e7b1edd83223ec86c4042d2ce7d83ce58c74d94c22fbf44d8c64871e1104dc7eb662e511b1bf8695f565438620c1d5ea73e8f88ebe7c1d5b8e94fbca8b648f63f3da76f35987b355d780243391f7e68d37deb8e1b88a8ddd388807a41f73c2769c0529882eddd3b195db4847dde359b4ef672d948378444a7817beea353652791aaf6d0c8589867ad55d5fff13c742bdeaa76942f084981a1491c60db468f148f0f0248b932934a0e0a4a63ef6acc444defa90aebbbb674ce4cd9e42f8ee635cc9bf381292bb928f7177fabe615aad4018c724defadbbbace5e23b39ce62c6fecd229d045df1410b2c761062cd0f5130400509344b3dc0410e4144466a9f574598a532a264e127b2dc8ec1dce6314f54819e8585ba47a5022395008c16618c66c8411968b07a034cb0c08c0f465bd850c3ea67a47efed28f957ac134b482ced6029917b618bcb0a7a09bd691620c2857052f63085dfe244ce6cc0f09958cfae326f078894a365661fd99fa8eef9c566055ef715cd83a86557a9c13e647a282ecc23e6e47a33e1f5d9fb9fcd47d72706c4e5abd3e72aa24717e4c7d104bc707b1767c100b840f62fd07b1b80f62f9f82056003e88b5fa20d68ee4d741dd5853f63228c707b1541fc4e2f141ac1e1fc4da3e8815c207b100f0412c01bcdfd92c0dec6a7b016c292f6c0000d085f5b1fd6c436a60b90dc9b6992086fd6d851e9b0a3ab0206c2ff80e3f8fad052cf8776cdcf21d7ed516830e6cf7d230518e8d87c2b0a98d8b706c3ce5c8569d1c9d9c37bf00a2f4c5fcc14a1a140e0a2733b2b9d9188bcdc6465c6cc758f8e8b4315235633b3e3269268d6f37959243e987284557b4145a4677f71756aa60d88ebf6017765d45dcb48ab8c6cc8d97a8b01d8fd9e2f7f3b792fb3494b7d350cce020fc0da5a1b44f8ea2eec9d2473c64516aa4b6d246ada59de82e971fba52f7742d34a67b3a36e3720f75182fc1afb31940f03904a28ed22b26eaf8cc653e93a60110047b4b238b5aad560a88a4931adcfe9b48d46ab57090429d88b9fd36b1d5c37402c6edb7b0a8d56a459942644ed2b8fd2748d46ab5a62441758801e6c3edd7ce30979ac4edcf965aad16952a2e19dcfeea58cc30b71f3bd36ab550d00524e3f65f4bad56eb06f8c57ca2c6eda7547c073642b77f3652abd5ca016bc1ed9746ad566b07a19b236e7fc4410afd72fbe10d3d6858dc7e272ae202e3f6b70fad969693097c70fb3905b9ce85941816de8c66ed93b1fa515d86a2dcfe0779f0509f24622a65f6f032219a26f1b01870e5e25715130bd8c59b5fb0cd0e7ef06e84984ad17a7857111dfb5fe43acedfff43b26198a9439773c86cad0a32b76f90830b8a13d30a19a1f7b8cfcb185ac6a892f550b40311143b3881502c0e1a5250f9a281b0d97d5ea888692e36e73e2f54b6ac41058915589dfbbc50a17206952116a059339dc78c93db093073c36ded3e2f62a4994ff8621f1253b479ba84f624218c91d9dddddd7dc6a611bb309b1c52363a659f1d638c51b6bbbb5fd4dd9d5e35064a5790e7b93c6fa7833c2066ec75b299f4523769da110fd8d89ba9653873325f607b548e8e6b9976c40336164756e3cf544f906780e743bf391411463d8a0b94508e2bab971666e6e8ecf6057bdd42f85eb070babb33aff07ee97bc142d804ba7b8cee64d470d16b2e559ed4755f0152b8fe6f07be8d7f756a13e18cbc5d20c20bbfb3d7c603368f482441cc793bfdf3db078f0f2a7c04494910dd0b07dfca239b9bf628ad84be2a6d8b1c20d4fb9292b081ea7fbaa2b8d0b1f1e5712de1abe3ab4eb69934205466bdc81ede97643406f5db7c10ac068463d3b2dbe48253e7767a4cb31ca3396dbca4e6d9dc979484123db6f93c361c0de886e3a537706a08d9dc6c1696de97e4c4876bdaf85e3773b3d1a101e5d8f8da6c5cc60d3bbf070ead08df1c5f75b47143c8a12de19bb26becfcf93eb4c99db0b0af2de176f280481e39114b96aacaa4d00322ffba816533f2555a91bebcb471995ec95759b139cf3d6c649195b7a60877eb576cbb364b35a009028fbf9e07083c5446eaf356f97aca3b9eafefa8a63799b86cd259379ec2557a2555414c59c2d7f475d6af216418f4e75eb9a9dafaeab8a977753618e0ed7849e2bc7b63e47aecf26726bea947c49459adc39eb20a9bf5da96f86d7231d8d9bccae6a499ea9226f748f6d7f5304e65047ba698b53485ebb3ec5b88e2a41e91d403822383b13aad17d3eb3a7da77d67fa0efbfabca94e9a099b7ce5c8b4ed74857d494610ddae71b8b2c86be3625b5cecb3ade3a64eff7aca75cc956ed7d7ab56ae13c1c5e8cf142e0e724db4a349f002e6401c3870704c46e7751ec757d78070b0a0b321c0763c44a663324cd43d9ec6ed67356530df28f0a1e07c6b40281b1c38361d9d1c1d98e9e0c8791c3a3a3aafcad1813832f8390f235f2143767c5f606cf7f7bffef7d13dd96b6fea39d9b7b9799cef27a17b50df6390b84f0c5e59e89e9cef9c6f1ccfb7b523382e0eae1381ceffb84e0a39dc0a2ca4365662301b7fe12e1b2339c147ac65e32c8c6d6c85a110c5e03e3cc5773a4d14c3f63ff4b1fd4c1e116e419dc676a0e68b16a225d23c1ec2cb5c6da0794b45542ec2f2db9c619e3feddcf21d7ff7f1e7dd1d0393e91d6e3111e592f48effe47eca14298089769451620ec9cd109651f4dd873bc76decbb1cb7b3b97d39f77c47f6f3f399dc4f3719dbac4423bf124a0956ea500f8a2f9ef8b091eff87be42007450ed2b846fedc8d9a8d8afce8e0bb80215d197ad67cdfb9d2a8cfc7833c1fe790743eb7f9f9fc5b5d394ea0609ad1cc2eba5412392bd44290d90461203be4d6f534ef3bf72dd79f91ae12770821644a9de7fa102488b480177ba86fcbede23d12f4041446de96938c178680fb9ea7001f44034c49f3737ed007f53d225a56dfc3debb9a76b77c2fc2f77abaee7edbdeddfcde7bef02a239c6f7e27b113a84cfe63c7f5cdcf99eb9032d81ad960a2e13ed088e2bb94e0477c277d7f186ed983b9d12fa7561d7c5c58ddd75f44d7571453015ed574dd9314218a1ca883f7c8f5fdd23d77c3191d33afed65c085dfa307522b8909b6c4866d8b4bbf329a337a517a5a7d36bffe7ed1effd129a3bfe67cf37fe8ef19c0d489802f8e37a8fcaf59c22825f6d845274b7777eff62aa9c7109b1de54fd951ca6e536117e59640530aaa7deac70b7b65c5a27a7080b3ac927df74968c3f49f26a01372a729d610baaf5eff9318fb5e25c56271caccd459e0ceafaf29a44e23e5cdd4050921e31ab5f5de196eaa76d864ebaebfe8940e6143e723ce418ac5ca1af42da7f83546e6c8fe4d28bf6af2ab20c7e7ccef4fb9fb213f6b285cccefa7df07517633f26976c2818561721d1781cf6a14b9ddae954080d70f55fefa6d1dbcaf535d2aaa9aef55f1f59226b77b89dbee792f259084dbfba79570e4ba506a29786bfdd1afe63eb2ec524f60a8a00fc6955e5cfe7b4ae447c951788322b396ea59ca77dc7dea3f273368226bd6d326f0581a5782ec1feba7abb6651b5fd41190f201b83dd9c0d699b156826c025f068c953dc70724c95e5631b3e7ebf9faa7152100e5b80ec9bdb4146287e4d2af5806a564fe69e9570a97da39257b1096bf5e5564a8c7342030f6ddc7eac7aa5a1635a0c93f279cf5c2fe8e3e63f355d77c55cf57d10921c3e78d2fd48ec42cdb8ce8af9baadfb5220f8c22cf4b11025c6c722f4be0818fad514f5558f84c5ffea5dc8fc338826a4257551f3001be7c06bc5b5fc29f3e9dc2d8f8486accb86eddf52e60b7ce125e184b500173eb3fed8417c61254a6b815835a0ad8bd30d752a0afb9c4b09752568935815d47bf9b7f3db6a9a07c555451f9aa29b13a27cf97f308c57c896604bb1589e430eeaf14e8cfef7ecdddfcb7f19d3cad54ea0850f5ef907df6cfe74bd584dcb3db545585c1575df05514324f5ee22c8f400e6a19083a4325e380d03e8331be0a0899655b10da677000ddfb3244eb32f12b5b8b9620827200260d27647c292221fbd618108481474266a45f703f203910f468a2491999e9b34c7e346d2a9999186abfa9b4ec55357b1596bdeaca4cefc6254dae34c95fe2577e763a596195640f95d0efe0cfa77519d7f1cd9ac49701636947e203a8a890034c184b500113c61253585e0515367bff7e2ef2c0b830fcd594642693e9a10664bab68eafefb0efe4c74d55b922980a5349ae08a6e22b9ab6254daef651d35446b2a73433825d1387e46adcedb2c732c6b64efe05ffa729e51b84b1fc41c5be6258455d78ebab807d5f663074e795d5fad8bb0684d5f7ad63ed664dea33355704bbaac715c11abbfc80f8ab4c9c7c7ff7c7a9a4bfc42ffdca46e0cfaf9dd58fda91f995eb4e0fdf03a2fd7b404c5fb7fa31ebeac37f5dfdeb2fad4895ffe34f09e55447e6c39f1c644ee35866d56cdcfed74ffb536680e16858608b1b3750a9010da44062f51953ec608c2e94e8411759b0fa53655609b8fd8f82a1c694fbbca881668afbbca881e5a2bac7538f08fd0e25bb08978872fddf272961749d63d21704a9dbc5d06ab52e93d4e99a6efd2ebbef3bedbe0703137a61883f1f1007f280f8c3cd2fe43abff03b7a39eb976f472fbf83a92f8931975f9212adcb1c13bfef5f011eedfeeed5ca77f8ad85dcfb0eb3a21a6b6ff7907e9e4fd01522353cb8a08aa51cd260f19bf07c829e480a3cdb8fd5cdcde36c2ad3b3caf4ef66ff4365b2e17e7a85c2a5fd6046095923a627c104eec7cc7c1f0fb29b726021d7adee03727db65d0fc8f5bc410e727ddd2407b9e8eb6cd866cac1760f09fee0101fdef8102e8053450e5edf7e8461ff2251e1c70454eb78a9cf4717a3f46a4afbf034f5994a2f62e995bf98255ae95551affc21c528455a4a0bdbc5a2a2eee1a8a557fe3ef1a877b868b4c576112922b94f1cea1d7f8f43fe366b6c1787aecc8f43dd03a5dba7598fe3853ef32571ddcadd78f05072c29eb96d735f97c34e794488b4f076fa9b526bb9caed44f770e9c17d51704973af2b2f4a08dbb1d27daa57b1929299baf192f64624c9b83297a4be5633a55a6b78a1d562f1f84e1b1102ecb251af927298720d705f1251995b3dc3908c882e8451184aaf86dab5232ec48f4bdead4ae463ccbcf111d2451f7e66c6f226390807e9a10fc1f4aa4bafbe3063e9f285af308bd0f18d4a2007e1ef1512c941f8e1c6375bc3761c74e35f098385b5dc46017292836c471a10738c04957863243ebac2caeff888951e73988ec9edf8e3c7ecca9f5ff9c87d2ac75d1a5e3e6224ee128652977e36d3cf4a5c2b2d591ebaa2828f516a9fa746193ed33dac46cb500b11d9c066180da7e9560ff150d209cedc241b8cb80a504a0bfbd31c664caffa9963a55e6529b02ab83d83936508e9e8cb11162e69a8e8f673bf34baf2f9ab55129fd91d1e194117af3f2090ebd895f0b766c40695911883b01d7452ca94e79c73c638e7d3af93ce78cda7dc9b7ee7fb5532390a1f91e73ed873ef195119511d81add685f78b08f9ee883edddddddddddd7d46778f3146f8e4bb7c38cfb0fdf1fa7724b80edf6b0d68ca2d7a0cba3fbd64a6d654f7c86f4e65c4e37b54d06dee75d210d1b54ae437678f70d97dcfef356b4746107b1e11befcf00189ef452530f5257a8c7045e4a40827646c264003a1bb8452c6216738e94917371aba5d56938808e276424ca0e6a66584492600934444eb76062184b0d5baac1981ad19ae7f4782f78ef085cf28ec48c5332ac4ecdbfc7b9b8dbe9d67db0f63b8b49afa9e367eabec23096ead5fe56b779389fbe97ab5cdf456f06f3a705b5e7713c6690f08ccb8ce04c395cfdb845d5ca77de0367d2b9835bd3006534326dc7b76a4208470065b928eb2805c686184f00c19c1490ebab000f2a021b95185238001445074a8c18a13c0a08c2d3e18f900268927ce4c11c262858e36352788d70d28f06b0b0c90a2d00d9710134e0813c6c91429a59a45007090828b3360a0258a28de1a2c44e0d045088c0d3558810301b421e404422148442864fea01e996a48baa0a8418b10f6f143820927501a40215c6e3f4d7d0a755f9293222ebc2fc9c9959452452346860fa1195c86d118c111165dbcd1040f50ec3044131eaeec40c50c70f801881f3ca956bcc801cc1063b4600d04c68c499ac18c0f5e7260c30623462052c4045640430d67c84459830559a4e810850bd62cf990664d1051186be0a08d1fbc4c19c30814c2d8c1280b1a3c4c4103326cf821ca501b2bb082085fc367681cf40d8e90411541d4e089307e6062e9a9d9011616fc00032e4b38a1c6fb62840b5272e0c2840c9e4881d2e3c6992c5b4431860cd4f0010a7290430d5c6a880249a8c90c5d209104123e206303476304f343e8dfee0e3b4218a1131542c826e8eefe1eb1b9b477d6d9fbe3ce047277c3ebdf4464cd316448bbbb3b7a84ff1e9dcb4468ce38087bb7477b3b722f420e061d6f25627cef638c31ba808aeeee6160e788c2a6baef3c524b6de6f569990fb3fa2de45a083e388233176642f67f1cbabb0b91c8f90c3a1b4a3999c4cb33c2de624a09618c714208a19c30ba18909999df0e08b90c9559142ab3d0a232e8ed6be05b81b39149bc30ebd5905ecd3967f6f27afa7c30ca655dea4e3939dbabe76ee19528971206783926f1c2a01b85a09352b11da4c2993b8ccd450a6f7cd511be205cee3e1e173e11e5cbc7bd0c0523bfe432ba5988e27f198affa7e57b165c06c576996f928ba7decc41ded7f77a249410327737f71749351c3171c4446b074208217477f7d7cfdddddd3d6521849ce589b14e5ac00970d2c3eda7192afbfb9284d65cecbe24a1348ea061868844851817e203a1db5b6e7881900c955df725d1a0c5133d618cb8f41025e90a3133065bacc092d4c410186894b864e03a7034682eca4d6e2ae9a2c60c5a9c8102a4338da60b9d3238c8ad2b01f795e9de97a7b4c43f71fb7fbcdc4ea2a18adb4fbdbc31744ff725d1602589862a1814dd143ae3800628638cb0a419aa70ffeca6e4789dd2157625cd90a5e3842faf8d6eddce2f197296b3e621925a4730a80283211d37d2bc608a162c067063ca7d5ed658b9dd535283e6b62edf2566e61f2a2049d2ab24970d6cf7c85c7ee64792a47db8c5e26e09691f66f1d3323b2eb7ba112e2f39963e89b19c7acc9a09bb4e27ed8f2cbde9e9f1ef79ba8707ce8380cab67f7f42f7d8fcfb4cfe49db2e660ccba2be9cc744518856a79b9fb621fc4f5ff18102c057fad836bfc776857bba5d09e1b3ed0a00feb72b3e9e4708bf01e041f0a184e4dda64e863bafa6c5bc2f075c66c99201c06606a501a1bab03e361c8e976c5a51d3340d4912a5186f95ae0169434618c2d18413be74fc2101298431406ae6e9743aadc0c2d209cad3e9745afd58457a3a9d4e2a5460cc755da7d39f4e3c4278b88dcbf48efca901dd706f6839fc0293335e533b52516bc10533d7657a1f6fc34b6ed42c875b42a6a77db1ad6fbd66d3acd618439339af8beb44704db4661ab42849e7ac75d334ceb631336db363ec4b120a735f521243976fa5b3a5fccc6ada6774e32128bd92f2ab89d27a5193f65003d228bd2e7a5dd7454d7f994c947a7c31b649e3ec9adb438f0826b5c97c5d4b9cf9a49930b661a6da76c94cdbae7f5af6d3d7f5d37266735331923c8db137f58874ac6d598f1bd5d697fba7c10064ff037cb1ffe9ccf43f3dff69af7bdc3becab0a9bf4aaf5e99c946218bda624c2b4f9a693949a85e9a6569b294545653d7afc4f5f401608e7eb9b3620d4d7b95931d594711ba7f11df9ace43a7f85fbca3d23c9971dbdb14e29ee137389610d55ad186b6f6efea7b5fb929210e25e39fea74f5252568c95f705d97b44f8d9f0e0bd93fdf7cfb3d3696ea72cb26dd5abd3e6c3725f02bdb24b039a5fb1ecb4cd6fedf4f3b4cdb7dbbba787a6cc94d9af31b3db3b6d568cb5979682b6d2802cf76a4ced940995b94f03b299667f9a324db30fc552955bbbde07c51251bd15339934fb34fb6aca309c9bbffe06e726cb324dab5996dd64369afd4bbba9b6cbee29bbc94e16c3c149153d1d29784e758f1728667e1c52f33d2aa77dafdb5459bde89c4f9b9aca88a45fe7039af3e936c6762c9fce8dc6b7064529bd7e5ea79f8f6d2aab65556297e99f62a7ebe95f5cc7f3b258f42acea89590e3a7a17624c7c538d39bdef426ca9db2b0efe54524fbc795eb826ec6a5966ed7e3c67fd7f51253d13729c5ea779b4acbea252763f4318c9b1c350d01990ba7196364ea7b57cd424e2130f75d6cebc694d0bf7ea240fffa274d596632994c736654bb7e6ed7d7d73d4e69ada6cc945dcf48dde666fa4a81dec70f6c95ad014d2e56d25c7ead7b665cece9a62ad25793f4f94afab4142a37394a8134d37d4942532ead3932b5233589d0525d030a81c84eca5d1b6b5329a5973565a6cc9eea5ffc9e3d5fcf68ed4b69462ba55f5154dbfada6ccfd963199c3fe73465a6ecf4d79fb01831eef4a7d30943ba5d107e1deb3465a6ec5d3caa1b40bb85850f3fa7678cbea9e412bf734687eeb3be945f6936bdfd7b63ce5c7e8d183f5f4c3b82e332572b7c405a03820f0867efdba9fb9c3ee775f9d5bd6bcb0553fa7bb357641d8f90941068aeff0ecf2caa7b1e927fed860c090369b85d76ed152b787421f4c75cac180a215ab71ff534f0542bb0ed0f01f6fdf3f2c690db2e2a5f613bfa70062b4bb7612bbb5ed268b925a855c7e33f511d21e0603b26cd29e11805e794704afa210a4a9ccb7a526199d3e1b91089bc8d27a584104209fd3dee9df1de7bcf05d485f4597fefd15e3999fafabdf79e0f2301a91267232897af51951b51881c4d42420df76bd397242b5ade883283152bf725598972bb056cef4e171cdd97e4022cb75b250561e6ae7ef008691fea80afa1c7991fbdb34ac24eee25976a6c0b1b3f047c3b4e31abc7d429582e915b6b90f670a3dad6c970b52c6b08b38ceb34c9943125cc85e05ddaba5dfd9802118debb07778746b67dc31c58ad0f78030767149417cb9f069521063aef6d8565fdb8c10b9587d0ab522f4a1ea08a4d957ae6b8debf8d6ae7e47bf6ef3df23a2c4052217e33a40e4628f713060945efccf4194231b3504f58b14682cb7ec4b3ac2e8b6b865f92350df7db0720c9ae872f303072ad300290ade0285e513086152194b14dbf72501e104116aa81cc0effbb2831a35e87d5fa484b1f982dd97544319406469024b13433c47987384f6e95174e1853f205df80f4258a68c2963ea6115322cf83b20479a867d5a1258854c1532aca725e92b5e20a5c5ea7e6e11f10394187489412b470836766031d870f2029bbacf4b1a1e0c91268b2bd274e129c202bdc0418dd0bd23c452bbbbbb69d6bd453a2f3825d65ddfad59d5a2a904c9aee5081f94bef85014ddb88115a5c80ca2221d966e60a9e04c111fa65036c248eae18ca96605bbc011f283876dd0733b1f558eb8fed0935a80c5f51eb0ac7aa6990ba760a64d792ebcb20c0a5ed3676431255101f6f060c4f5bf68501238ecc0092a64f0448d379e587ae26809a1367260a5de28630635c709dbadae4c41118b9fa7f955701fd96ab55a452ccaad16cbccf587fe94a658075f985a3252902d441ce180071d9a9862b6a1821d5a70850a29de48b9914699bb4aad208b2146c3eda41d720842c5fc08d3625a4cdfee87142d58a080055e4c79011514dc9744c58adb3c9a16b6cbee0f325a7879597423a800caed2415589114a5881538b9fdab15482125089b830e4a47668ed080e04ab7230bfaeb1352af302ac6f2c729eee380c882dcf31d35b66f87615abae755cc0843c2be6046d891121996145564bb79adbddc69f6ddf3245702f8a4843c7986fc6a3e22483cd0c9c12e31111824ef6e079767dea123078b8eff348fd2cc4dbd7b5d51844399f7cc649767cd45156dafb4285647ce16b6cbac58beef6de5acf6fbec4b789f7dd0bd36cfb6da4f73df98f4c5380370902b51f45ed1deba8fc6d9d423d13e6a6191f4abd0ff6382b6fd6cdecf33e457b531321475b98b33d159f12976bda084a47b5447e21731e91e5f73e3570ca314a6a84502ffca4dbce156be13fd87f84efc6e75e3908bc4abdd6efee6a2d845e9d54511c5ae142cf1755d97cdcd66bf56f9c5d26f9caf5f2196512ccbb02996328ae94014314c6219c5b20ccb42458e1c98153fa3181916e2d78961d897c017d350c05e55045ed3abb20fbad965c1b4f1101ba990dc3cf63c573eb12d702bf40ad54a72b3f1508cbf42fc16e2bff7b424376fb926aa19b06efe69494728b558365770be02562ce9f0e5baae8b330cc9a8855ec56beba4d1bd1e3bc2662ef42a5eb1d8e36cf60d35d16e0ca577e25b5a6116e97b552d22922f4924e06ff34f9300cc69420a24d6e9ad17676e206a9bea5a14e180055e4c260d90cdf52a8ac5f6795c10315194f85ca57b8ada276689cf46dd7373e3b396f88cd414bb5688cf424cba01e9c677a17bf808e34ee855bcd9aa6694c5f21067c2099804e0db674d029ec4e62dd724738265f3ac25b9f913d724015bba20b16e6eb6d3db6cf6a10684c1ebe39f1074b18f3d570f16ffdae063d90ec2f84018a2cc0de1be2435d0dc7e8fa61fac92eb99f3d12b4ec955ab89c9bd9e25a49737fa7053c29f5d25b84c02185ed0e5eebaf4f927571f8bf0b80ef2e97ac822647fbd64112c11edafbf2a0a080bbf93a02cdd01dc9704458b86c2cdd7dfbafa560ccb0f7f9ab7ec6b08f8f2dbcca69a7e85ee69329472dc242859d8cb1b4337a65afbd62fa16fe5cdb65a2d9e5ec1ef562ad3d77f37db54a6ecc6663737d9184a37363393655956dd3520aed089be2d46510c151add7e21cccc3e7cc0cf703ecb3eeb9e9bcf76d46cf311c6663e5038fdcd9bb622a6cc064795837a26389bed952a872bd23707e785b1020bfd2dbc0b2fc4d03eceeacf41e1ac7ef0d850e6f60b494241ebf6110e0e0e4eb6f16632713fbdbae16e02a177a8d44c3855412a159188000000005315000018100c8644229148248c6465950f14000f7c9c4a6c4a16caa35912c3300a42c618030801861000082104a199a2d9001450753ba148db40a9fec81a931fe6776a77078797f25bef41c94eaf0309362ee909b05468c7f23e80bd8ebfd69feb4c9b2fdbcc03685b5e91583a7ea3dc6cf68140138d4b904f1579468acb105de39bbee69aba21bde8f16a03ef0e8ab86d8772d19783bf80b2b6e5a70030d3cf8bb621b72bcc8923d1e8937df111e6ef4e8d04cc3a70807335f920853ae0be417b3fdf32e2552f4bbf2531a566adc8227ee6ed15aa4b59804279064c856ea26fcb83f962a8b180e117804c5728c3e2cda3a1cf528a3fc1fdbd6c8f8a2da4ac2059d19e3685a4868e7e86f9ffb80ebe855fcd402d8c38f1d60efd1821a152a2bd8e314978546db0f63e6bc4d67f0b4f91a6fabf46a22814675ad0b465ddce5c7f2ae375913dff00181f6dc08fd40093ab91004c9fed4a3fb74e7e8d29e234edc170496f8a8ca7083ad668fd9d716911a001b11ea726e1a9150b75df07b221fef7e248924a40ad197bab73603afcf5b45032e4b748b5b78cf2df841dceb634d224ccd5674122af67dd5afc13e328948f521cb377f87a518e2cca4b151a4e2b7c544908eeb98117641ea18bf2983809003fc345b6bd87003f049ce84f0b8c6dd5e11fa8d923c0645dc4bc522864d88f1fcca74027aab02569b49c8095701f84ee7e6e7e989dcfc3e2524f451c163abccb2ab83937b216292b02b2c1bc5f9c1bb642e32e964d991b2a7ac6f209dc6531206dc6ac302466e3a6b16d3052ad317120bac87fb5ca8ef80318ae3291bca35adc51fab794a0fca81c2afbf808a16ab0ebedb8be94aef383c8a643446ad777368aea17b5f6e59b4ebc1e735cdf17ace118cc8c1e81f85dd4e9612f59710131e7db57a8e64aaf2531d8ee89a360e0facf4a339510e60fc7c47cf0e0b06061194fd8631a0665e09b7b20567f3a70fe0e6b2562512071d1e83f6e447792db65a809d511f0e4d64381a9c65017b338645cd61c08694893d0f7efc7a4e42993a516294b7dd400f8a9cfc09bf19c65e6991a3f68227bede5efbf02ce22dd955bd2cde695c5f1ee5924c14ebea24cdffe27ef097cd5a257b19849b7d1b499a0ed289f6c74c45bef5d8d64b02786c8d003974b6148d77ed3cc8c440edbf54a225ed6a30ee904bc16f908c6f19ac1cd39c3d3998b1b538f5042248d449094220d8138340f340e4d9feb254d23f552508d7ae7f67e6bd2441d2e3b8235249a7b5ce94dd63148a739aa6145eb6d0debb5660d7f787a9853bb18cbe9ec86ebd79b931842b7600de3d28605b766a3bef363714eeee829fa35cb17b31de45e535e7559e90f9bab56a64000385143bdec695b20b61778efff6ec593cc1b68782d52079bff5ac016550e53d98ad95990838066b770b6b5279e4c7ce6a2ff4df6b072b5daf5234278ae0f4fbf35d80abaf8ff0b0453d6a4f0886c5cefc9db9eeab9022ddcf92d3fb0270148e46b720c93f89f1aaae3e7d2b9392f7403f1c6e5925b94a87e2ee3d9bfa373235816784d54f0073c8c4e6e83989f1d2382bd7da4c95afd59304790360c7c83f28fd6182d60c178bef7735d02f8e02da73cc68ec01a1fd4e60dd9d41c6f5c2250c0e9b8aaac0bc3cdb14a9d6534501adb0954dd7749f8f0753e593c5e87c087e60c6b9cd1a30a1cd8189fb947e3499ac4a1c39a4e792c44845dd61acff34f3b0b5326815f5e79f6ee6f3ffb3cc2817ffb50a51b8e1c79c823bf33d365466283df54e70b121f29afb797a20e4b116c161ec110c220703f01850699cc924ec1b00d590e8b81f18c81449c0ed618856708f58ebdbf5d15874e91aedc8f44bf30af3c8d6514dc438e1b77f562b8793daf966b8dbb2789d8527782965422fc6e36878c0ea91b13513f29cad5b50cdfc05aba579194808cf1501ab20195746768a1d75fabb7672c58256fa6f028dc4dd6916d7407096cd0886dc1d3866717fcd8aaefe730fd58ad04d77be4cbcfbd73d945dcee2ef62812b847483f2b890d6e1ec450b9dfc9cf88ed2877f81fb3ddad2073cbb8ee7ffca44356549d1c9e3523b7a1fbfeeb3fb6edd34187d10da59dd71b5606d34a899481e98dc4e662e0df42deda5a58b7436d72339d1cc7b23fe2589bb6ede2424688ab317d13e9c3864d88543f00350097989dda28a406f68ea893a9ade594a4367bb97ec78f4fb594cd9f8db15cf66322bfddbbe4ad7df097fda034041509f09724085fdaadd840db9e0af6a53492c1f9a5cf1ce6987ee8980f1a0aa980619e39b8548dd9b056376b28ba2c9940903369e009e66d4953e4d5d8b0eb12e64efb766a8f3db6017493f03071af0f1c1f40786681c921d32107d58081643a0f4aa43e190c5fa86c5f9ef952e86548690a1bdedc7ac029c50e386d855b8e8a7b764967b101522680377c748fa631d12c8147a69abbb03f64d673422070462ccc49ade589997462b3d671cc3a652b0699a49e846edbd71d091a9bca1392f5b332ca6a227665d63a921eb769b47ad7c988969a6fd25e8ac902602234237a81a93d53515c5c4f03519d684262819ebec984390302177cb3b7e11fcfc0c83f2813711f3ff2bac780cb5fdfbcad0252775db95dd56e3790d23825641f9ae41158d4aa756155f3c6557f7eee54dfab63320a9d8626e4c8603a8e0e1b20738eb887d6aa40760e7d30e10ee4aac2f8e07861682b52dbb8039c5d13e5c017ee294ede543ccf0f07d09a38fc11b3326a065fc13561872a61b0c5cf87018ef282857cd99f0c5fa03be4555185835daee80921e14892688982b8d6581248d23c2ac58d5417cb6140e2c1c38f02af883fa2b89feb4316e8aa9d58aa93697d4ae5e96021b215bb31dc2a79dd39cf413f52069bc298136b390910b26562126a0c9815a9d7802455c4ba5e3e16a8301b6bdba1b4b4971b64b70b7073362de0d07b343e66cb41ee2ab75d8594d2db1c3f79abe417256c08b8fee3b0a1c00e678e0771d3304a7d81a75c2da05628a561f7ae65e1aa9151330f2e74029b9fca09d6521ca066528ad7912caa2024e02b6073a67d3a2b6c97ec387b4da124a307f443e6e931823da73e64b33780ff5d33f4216f3fb25813b20a15533d76e3ee3dc2ff9f58cff0cff25f968a2e985dfdecab568dcee5ff2727bf101146d1a4df9fc8265ab6baee3bceb285ad2cb2811afa27646bcc5ea7b21151b6cb3ac1279fdde1188cd663304c8634c92dcf935ef6d9a5c0bc0440d3b9897ed93e40530ea30e0fd7af2335e06fecbe15952769c9a3a164b5980d92473e65ec02600fe5287b77ab037d3a4dca21d268810506fa1359c15cb49c5fe8600ff532a5327e668644f0b399e76654450d29e438a302f2f06549644b9f6e58e317e65b7c5b5deec03e99fb851464f12ee805402efe266cbd2baf6fd7a9911f777b14b99f95550fad22ec225a3089639d423cd66556c9458d04ac08637d45a18b565203b68a6042f3eefa5e4d8376ed3cf6ed74828bb0f61869a513a90f769808b88ad891c6bb3476bbca8b5a4d0c864216d906aec3c62dbaf5d27c1c6148cefb189a66df63669f715b397953119ff235fa27e724960d033a4003114d024d38a644f054ddf71aa427103c39b260dda3fd2472c03330d0b857f0cbcdfe716377d6bf529e77cd8370078e91009685ab5a5c41931a88a574fb52964f808abe2e4deffeeefd279971c96cbd2182661c739e9eab62133ed3df52c351a4eb901de5bab635d1e7fc6f83273decaa8314670cf002439949c6057c82e5f906abc512c79db5aecc72d9166c303f2bcd73c18ef589713be5808cd9e877edfac7530ed7088861a94d0b7059139dd81c1401162ac8b42dc721733c24a8bca3213f31de8e15a17858f215ade7ab3e762654d31c472da176d77cbb68bf689d38f43a95af35983b2c8351b0791cf37a653f3a1f8550f6f1a2af0a1b1410e0d26e005c734a39e0f4058d003fc091498b1f4084eb7405646593c14c91119bc3059a78056765b3072821431638205c4b38bb53ff629adbfe46f2d4b2816874d2dc0301a1a6953345e7ddeb0a7f28c3dd45a17bd97355689f8c59c0c7785858e54ba5b6b243cefc29e06ce994de260a967f7b9bc69d714ace20c2fd68a50706cf8953413ff045dd897e7d5e24f461aec8e545a285cd17ada564ed785f25cd8bdca31879da80ed42d13364f4f9eb940d583750f4c6c94e599d2a65d1b6264564ca811236534eb48053a39e37e3dc81fd8d56a68b4e9cdb9ae0e831f0a20a3540350cb477f5d07e30092f69be04adead1033f4b74f5c00bafee67c8d4305bae39af8ddf9b105f3e42e0a1ac4db269489a47fe8d4ae0170bbba33e50f52f14a05c1420e67f3b917bee7a9c52bb1e69683f7fd53a1852d357a76718fee2d5fbe962132874605c22b9fabb4e413ffe7cc158b17f58b6230f0540cfb5a2c44034eb075e92f44df8c8a6a5fc0f79c38df2bbb0c7cdf03c63a222442c8e27431b35392e082f957c4b2ead274be1940d3c8b26f323485a652b7e64e971b7db01f7f414cf9d5bb66c344ac1881fdf3757279b19089a9651fcfc42af7ded219133778e77d22e95d5016c99544fc0995b67eaca4d2ac1e0049272b71a4c0e09099ca85bd5da7221cbb7cb101caa56e0a56ff9d9c2190589cb6c965267421c3de107edca7f01004912c1a130fb4d1cf8baed0995ca3920f3c8872b80a9e1fadaa4816557efb6c7c1a3b2a403c36f9a76911ebe255c930402ae81b7b7dc9a9a914350a5ee4822e69536947640190345fbd525ea3f32d4553828a11f43277f88e1cddaac232337c20a725aae5a84d899ce163dd396ffd356531cbb6922db512316bcacedc5dcceae60e3151a91bdd8f15f2f26465af7c98a1e3a25ae118258c0bc889f0974117258741eb18a8d92dc108ad8db4d92672a05e513b13479a13198556e2426908d069f9c8917f9d66dd63516bdd9b3ffffe9fa0f204960d931374cc01d5b0fce3b93315a12aaa66db2715365bf1955d15d007c699690d03f9b15c1b6ceb2c388dcbb429eeb06e590b1bb66e0533b8055b899b595b3ba68fd846e28d6198d72dca699b797b030a2b5e2bd7dea1187280de9385472ab686c6e07a82745cdbb506956ef7450df9560a02a9c7a5afb7dcbb501c0a6a7ad16ea521a7a7ce0dd89b0421518c3e6701a2371041c082a0ae8ab6355cca5c262f1ea2f34d51db42aa99c6765c332f102d7f02ce8fd4b6e8ee52668dabaea8c57b20fcd4e743506a049c3d8f6a984817b3ecc5458e95a62144178db0235a62a9d29992a9d12843c6d70938e6c7fac217f6650602b39a5b29383d52ea0f063c5d53d6a28e0b7156fdb92b9b583c44b5a93d72b3569777c1c5a629e0ef9d783f3d264a0d5d8096f8db530960be81993ec9458c831f41e2f83b2135c5e6ebe1b574fbdb09b37dbfe6ecd4042c4f5924afc2455f7b00912d4fef60cb7f68cd164089550e1960167c62716bf77a7c727d345bd793fc29118c0f4e911a69b4432d49f1365106ff312df0d90d42472265d28cfb8616a98c6e8ad61ce112f34ecb1502a22683ce7c2d240611bbc5dc0f9435a180b0aef6d9eb739886532a217baa81ab93cbad85df0fdea166beae58b7c614f4fc6536f618e0990af54b52af9bb4c2f535dfafb613552742f5dd510439e97c58baf6eaf25d7cdfd989f6468ea158ebf90048084d6abc2d5e12e48c635dbfa4e9136591592a0b5b45b9d64f70a7ed0920734a50cb2e079535618eb11f0c99815fcfe0c29f22d1b8484a21d046e606a84f53f953a16fd3454b81b2ae4b4ba0aa212a87aeae6bfc173d2e32aa67f4ed5683023c41a80c4c02c8210178aad72f5cc54b93d628faa5d0fd6a77ad2c3d788eba6e5c8d5fe9db4a0dd165f77770cd6d0af6a3a7826b2b0cbe6e3fd96bab9df388e1ef9947d999de67bc513acd3e2c3876ccc4b6b8fbc39ae8c9f5f0c4b1637214c404bc2725c5042a52e17cb934038d2e45df9883b8a3f076545c104cacdf8373cd4c2492f9fbcfc7991e4ce6963845f24f6cf2a52b0d226536cb162b0b8b561fbaa8bd589d4122b91b0b9d55697802a05c914e4fa9c0ee7f5e9138bdf1780c20d690ffc13fabd76aa4df47b043b856813d02a367741ca1d9f0dc714af3e821a6b5d41180d1c665e0e577bf1808fa2a1bef7811651efb9b045859677bf2f5aa7e1fd3b6f1330c3d08c10bc47d4951f832acb6eaddcffc266317962108f151c8702917223efd4c598a3a7c99a51251480d8e845e0e6a5d3ba149f35634b3d724ac318bf1def22b46386237934290361cd147094c5e304b64801e7004b4f8dd05f9db75be785bec3f40ab29a78952c779e035603aa9c44998e18b54d3289fc2c376d1c33baf6d4cb750456a9682e26e6f59025866c8bfd543c3be847d300882e918bc56303926866f4e87044d9f4e706e8ae08f53e2211eedf7a02b4b7fb9151d2929725bac223022cdbd3fe674bf7dcb183361bdc6f29800325d8639cdd5c772d9ede920a9b57c3825c73c83f6836b08243ec2df004be45a36ab6f9d9862de4a838c785c618454603999e467994cf621765bbd3f57160cdaca45a8fd86a728d4e4b4b0768ae8120ebd41527d348cdc1c04545225cf878f3fc83f703541bbe811de0dd068b89c5f9c5bb768ce9ef08b1a50a3d1d8150efd0f5381b03d508c5d8b3eb9c864490b3c3d9309e66fa8e03507f47c32e9e875f5215d217675906a8b6a9609b857aad96614b9e29d4b9decc5badb14b861cf1278d861347d2368c3522c1c2dca59574fe182d23323804bd3c662d51211bec8a80cda55069024ec1d017c6821ac7f8cfa0425b503459233d99a775252bdc8306b10f5bb662b3c25e4cbe64e7d9907d125fb9ac9c35aa1b12ae6cda18c58aa3e4d484e741086ddaed4688321200f64ecac28bb9e2f8d9125c5a9b76285b61022359c2e137d63b4f34ad0b7442adec76df96800abe981feb7dfe4250cb14ee14154c9392db18165bcb0a21f55cac04f2bfca7320d45d909a6dd75b5f8db44b7f3039439040924384712a9e2f427f4121f1e55d496e69941451a1852465048e52b21be5e110f324c3abcf6a85b42a45974e0f7ff7310a1ad7879a994bbffd26cbbd8fbd7ea5b4d6f111a7ea9035c97f076943c07fabce2ad9366e60983dd2dc019320ec197ba33880330c5ce5af3599749896078ba568d037100da57252cd1be955911bf39704398a511aee4f96c9a7d4616dd037fd0e1f824a7ff6f0a2eeb89a4a50ca20ad6bce0c71c05f25b6087dcce8abc9b38295683af9f0fc91e32f2c6f62dd343187e43aa8237901b3ccd48f42cfba6c8a370c46b97c18c59fbe6bd48d727522ecc5830137cd9ac4d66ed7a87d21379b8b256213fedb0c27e4d4baefd9543881f7b3076ec778a4d8f986b4c7b6090d628e5cc8bb1c98e2972f005c481cc4f61c3794f3c8f9a3ac8a11fed1f5d0f6e9a84ed2e4da8ddf1f663f679dc81c0b9faa9a1d09eee9d85c7f949518d33e44b503f84ac5b305a7e86ff63681478bb9fbc900a339b26b74bafd688b9da1424cbdde2f46519b38056b807f7dd718d02360e5e06329fe5a5b0c43d619ad88307b3561e465c44d53992cb1a0694f0f76b9ecbc2934753cbfb04ea8d5c25134dbc1a1d929946b4331bc21e6007d2541290d250883ea6aada8c4ea2ba68c3eb18f73260f6c1a0a76e00b344e40156a4ece9309ed8f77d397f842c2f5606c253faa2437ecfe801d32b80a5cb80a832a7dcaf77dc003865e6420030e091bc75e6c6557d1f0406d824d66fbd964b22d1d2800ca8d588ba94f9aa293e2e88e8e8c2ece6e7e50e6e93c164f95c53060cb06dd3f15040a4cf680941a8ed178fe73f193b133cd666fa507c9c14712f5ad44fd68a2fe7da216593c81a21758a1962ec29ecf12d26998fbfdb2fea6a38d39b938b2f9f6b1f5a9a461b15801ea908f20fa298b338556b9ce3ec2990aea73efc4ad84b42ddfe74b5df2f7b1ade7c08084720eaf68ffa2165638d1c2392105fb6a67e68427f75757f0ccfd4de73a45c7cba485c032b5a134f64d5af6adfdf78d947e87fb06285407a11e52836d0f545fee28cf4d2687dea0e07039a5365982a7a8b1aee03531029eb62409ffa20dc5295ed232675c826ce2f8b38a1839d57d01bcfb7203dcc61ff71f29280ac0ac807d5837b6602e3bf0f4b32b5e1a710286c49346f776356074f1c8a8a972cd75df6c4ecfd504734672e871beaffc36e2df1c5a930256920a47178c68693df72adcdf4b280405a64eefd29a87ecabc2a7a9b398cb3ba376c3c82c8d7c45dd06c211ab32fb4fd93ab8385f6ef971ae40146810913a4ea9b2dff0887d6171630da345744b61ac9dd91ed1c85e0d0172bf92a07b15022893c9a4f81ca961b1e4d41d4428381520fbf6c1c8d85fcdc405d78ae4b87b11678c4e728d30a5b75ec16154ee58b3abf51fc445967a9009cc219fe6e049b2d9d147c6ae2e4225c0dfb8483e5bf7e88a8efc440cdf569e6e0c58c08e16e50c406f433693299ee399d282381d1e383659598e000adab95d236928760eb517d26afc2e3e8a99d65e204cd65b1f68754d3a64b04f03614631e57a16fc17c35d60338f83e60bf8bd6aab2f0b687366511672052f64472f8a0321641153920ff7f1de3892ccaaba781d5e87aa2aa56a0f2e40af499534c830ad6490015fde070a9c8e1e1fb1ac4cb077c165a6e84e55f9fdca267dd524308311ed97c7b03d9ddfd19a9d81ec05b83622efeb86e014866614d956cb595a10704032aa4fc0290cda808ca096ada162f6fb9a1dc91563624bafca924d2c9a25fe14b76532d924555f9b6698a4c072d6532fa84beb7dcf01acb0561fd53f4f15d902b2271cd20ff54ac6db00a82120722f95e56fedda4a3b2d6c07e8d0639132284a7e2928aa4eeb5e26a0dde1275adb4bb7ab4de325cb29391449d8afd95c88b717934f89350b4c1f9dfbd2fea2d16baede119e3a51d688ff1b2e2d548af33554406e098a4fa1791dea3669f82a0db799afb3cc2df8b290f23ae8804d1892767c3421c2e158ad79213442c6dfd124bbf313666a433faf707c0d5390fd663441827eafa038f988ffd9f49ecea2e4590cd210e92527c3e5f34592a547447a9cda9680c4de4de9631a2b18b294843bdd25c608c675402e4dd946e730b311f5917b09f2b8ba23b3efe2bb621978e703c8c7f890105d81cc434b99ec78cbbdf90cb5381fd1a1d68c1de32b5c4de9c039b5eefe5fe009cd0feee7a5fa30e5e30d2487dd04705397cb2743a95ec1d9f1995cbac18e4a69dc00c1a4e2519a8d2b09a9c763aecd10ceb8dfca82352ef0f11353b8319223eeb44abc04c0ebe885569c1d4d9b71e944eaad76fec4eccbb065300bf4dec3936d3efc92b6fba6ab8e986063fadde3e9c338f53169cd40ce782a4240c28c6006d0c01ce663c5c1f334847c0b1a13021132b3995243ed3ca1bd024480b3d5a195c6952101c1b2100a1b04a90fe6caca787c6d1b5072a46a104c81b3656f74b1222560db96f396ab82f5b74d0726d876652374a0cf9d8f98b3558b6901440e891dc47e72cc2052c1bad22da2e2fda64598791c5f721ddd6c7e79daa707d6adf917e326a20bc858ed8e54800e71b92ffc23d40f7164add5d45361e671bac6a71d2c16c8b9e2b45a67a479643bd9ec691c60c9c9541359bc411baf5105f2c43bac56ae8c713c8a7cb9358d3c22eb46f6045b1497022a6a7a152555b2b4607ac61c659d58f0a9816b94d4642dff04b9d549a49a638f2047d53b59d2a173148d4172a4251580f4d47ff35fb068f5c8db1f90131d5860b7d83365b2778979ba144252ba0682a94a9f919864dcc8cdbb2eaf2b59cff0556d291d69d34a8e66a29e5bc63c400477ab9cd24fae747f36378dfbc04402e87c0c86fdd194c3588646b391f535ff971fad44f273dbdf4e811c6a28ea06cc531d62012c6764d95ead83ac1f6da8a116e346f26810ceca1f518bd4289fdeb8bad278ee10b2b7009e51638e997e1ae2e5c7f9b301f541158cd8d42caa505344c940a02ce3668afdeabc090c8511dafff4f8fe327eee2177224684e8469f58e54d9271a535c24fb0b3320377da1c05e7f21484e6d123d9eaf9fb8ed9f2b8ef375e9d80e61be1483884bbe7125b0a569281b8971c718c660206040c2f78627d60d082a55ec3a73c85140a9908ada4e946ece7fa184a4a971d1eec9b2bb5cd09ef35c98ec7f22fa22f4db1dd42ab8178cbef300ac8bc2b1ca88e97426c906cecc77db9d73a2f529d2348acb7b7a15e1666cab3d0e8c05c0ae064f4b66c6fa64ec2ec2ca5f49965cb49d129d22760d7358b2c9fb91cad6fd0114b04f4adbc203af96ca2595bd646a02658376208e4a06dea0fbbc88ace489b13a79449160cf20935b1e5b54f3a78c4cb33682d5f7d17a61b5bb2a2a4c78a85a1a26feb768237895e873ffd67b280b7796e2065f4c3e6dd3b6745473850d9661cb8cd24a7cd4df9b793a511e3efeac3ea39a5afe8a9dbc8a02ae87cef9807b3dd9b3ca1eccebf35c9c3c99de0ce12792f3a32ebd607cb02798ab6319fbb85288c7d9594a74eece539ae3a46c42730c938194bf826ce9d7d210ab911332d26be9d9cd67d4e6a3280b391000f4dfcdb6e32244462a9ad0e961aa007498c5de4fdc8ef24cf567eca8edcb4231332aac1b4082e1393dba52d8f20959135b84ccb162e0e3af3e993d1d1e53731a48944a9cc932dbf1443588c1e107f193c00c69674aa80fa5f31c4e322929ff40d2f9b786b004800240bae8cf603b768fb18276d7dc7e8eaac7af55365b2ddec07c7829621e14f07518e52ab39fabca7e2a26943ad3a8ccf7048d81500acd2eb194330db078a950cbf675c0edb48dc61e81e3e8f8f8724d018053e02af5cf96130fb511e833abaf125e510d4603b889c7bacc8db93093f40afd258140912f7f40816b923a5c60a648145526be4a8c6ca4a91207146773451def10152198168a276b84bf277bbcd3a93a69c559bb0d0c4016ee618eb66c5e20735fda51d71d0c90018e0737048ec5d4071b21a6581a2ec9fa2229a2e97ae01c65a3d96ac01a6030731af11152cfe9a8235a279d49b75e84dbdf2632ec618a99b6d321fc8e8655d9b4874e8e2689118810d11acff99caaf21475de875014bdd809562417180aa8b21ec5f7e61b5b0d35d08d895d2598058b59b1780c4599aa742d81355489b0ae51d4e5625f9767a6edf23af0c8ec7cc34e008c7380a1942660b87bd0019bac236418696e28e708452730f8d1b126fd526faf9f35331fa308534d33bf1ee329b5a89851eac5bd4d6ce4ea836109e59160ad86b62bfd9a6e26eff6c61a24b02d591f513d55ac1f5a256a1142c01b9ef8fe2c1521749d6f86a25bdb6d28259c59adf4ea1dffaddf08c24acb3a03adce974484a8514ca8a24992b39e49bec56af454e4b4d803fe3b5ad0c9b7c61f0e3454c66cad6957ac88d71d910cde0b856babd2a2d90659f4205e58a50341b6c6cefda1ffa84014dd626436bea99a9c0bb09f27f28056167c7fd6af1609e8afa06cad1e454bcae7d5ed45fd8ff881330479a0dcb78dfe39d02109844ff1dcb8eced6715ba90c1b738059d04f44101ec1768952122b9810724340dc98d8ab0d7cc1541a66e187276651ffd2d4d00cff0626437d44909a991ee04c82f364f6eec73a5d6d40be3952cd3467252258136c09c698cf466c8352d1cfda0822a4c4532eeae5f6e88ed924986cdd819f1009ad26b29aaee493ed4729370611db4052437fb6d5b82d1d091162d48a48a8cd76da0bd38aa74cb38ce52dc7815f9c9e698058ec816678cb928bbc673cc773311b39a0e9355fa1ca0020241173a0f68316bd052390a1ef7bdc564a6c2ac53ae3dcef6aa38bd53c1dbf759e6084a1caffad297440235b8ee061b84a861a54f6365435b5d7eddf04874fb6b05e7058f7c19b0f8073cfbc9274ae47d9898b23d4af18813b9aed66b5ed0d27b6c5a3d8a21dea4b6c8dc1aa9c05004996eeaf429107058ee0fd5298b2062673c83ce6dda50c2119c73f0da175d21b8c6e952673c7582323d86df17d0632b62f9b3e0bb3d9308e80f089f44e868f70ec35571da7a7051346e68b417888ae3b14dda5a2fbc130039f5472b5a85412c58d3f1f6f4b373cf867c0a03869579a1b19dad0e2be59e05c0bf3e811b249e6c2a831f656fb2fbccc4ffd6198a4d51224332227153fbfc0a79a2427321c9f038c41deeaa844adecbce82955b05c169b28032ec31075621430b3ff9b856dbe97025cccd8e2288964e023dc23475eb97d7846a4f615741777a3a9a5904e7a1d842f764363088605563cbea4f8aac3bbf71b5349e35e513a4649241c29fb0fe5a06b214a93437973a948ad3506f04c0faadab2683f477cc5bff499f3bced49605ba4ce28e3e4e8ddee04660e05b592547d0eb8770a36edac94cbd2005fd6b23ab6f9bf98761631ad121e696150f964188022998c5c8056f6b20d0e85c1e47c5777e34344931bb19bb1a492ccf7a3de308b9842fc003a093e51f05057a39013c8d80c22fac2f40eba71260911e887c41ddd9f6e16b554d1a942f18e60941248ba283279c18817b44512694b73c723d6374918bb431b207aed98d3ed7e078d8ff592304f31d050feea0a3b625d7168dfbe6115bb7cac82d1d8277bdde9a3d44cdb0676b86c1d9dea63810f857061150c075481aaa7f748a6ed644fe9288f1f461b0a309402c20315ddd5d7215af1e92a4041052804144ba9e08016f32785c930eae1ac580958aa2ab5ff6e076e68a251329ea26c579cd696a5a86bf03b0ee905f3d9070e3603cdecc2239e8630ba744dafbc0b65df86eab0ee2ef0fa6b6ad097f8d15d9fdb008c3b4120786a3c91ab62c8fee26129bf4c210ec1a093cdab35b82c17a4d92ccbe7216948d6967bd06e73155b63ef101ee43273918ca627a1e8b25ae3d670e90441101f89a16852ea3fd5d3b70245f76cf90870e35fbd07ceb911f20e658e70dbe731b06f89610439f7a085c39d8c270139f7288521ba22f4db331909ed0e6c4cf3be24c6862e4fd6709d0d3bff18e6fdf9398d0e694660f7e96d028dad5cdb87626917effad537358aec3dbfc81c006a4e8d52bd84c5d212d99a4b8044947baae97c40e5f8cf43a2e4d63910e26ecfa1302ca4f5ae2201c83d530ad3d769ed146ce19683c385bbe5fd184fc5d56d1400498ec14ad91c7245fc82bd471c8cc04592e39e6504e4167da5542d2d4b64ca92cbc89d16df037f1e94eb11baf82db48bb1883ab6113e9dd4cabd0ae0f6e775a5883ade3d46faddcf1254a90c184b03b9b44a4519757180bdee3366c67a8ccf37a3efce3ba969c398692e73e00d497b910efaaf0269cf3b9bdc696af0af439c97b769fc113e5efac5ea819e91b398c75a57f18a84f75f3a70e72558cefc26a9d8701c6eab9a3b5f2ee22cbd9d2e70986179998b1cd73b55596cb80a6919336a71a86aaa81afa3868e7278a56a953c1e291f7f74226c57a0825119cb0d21f91eb80a103815b10131294212b7763eb58f886807a0844f1106ed86907a02d8772578fae49691ec006d0cc09e2ada8d91a3c9f22322fc466784ac47239fce5956a0e4946565b2287c30ae2812bc8c9f1803987a04f1471e7de2a386ef9e833a6e342df11b22866d77701e00ead7d6797d2cab9447a65bd8feaeb3c02ba338a0bde84820ab07476d2daace0a69c6b69ba7f05d625d03a845b8a22464635ac1b367cf3a9b93245e99e727bab7a3992dd10a0c4714092dd0101853426bbe7eb8e43be14170626910d5872702ff89fc3aebe382ef9dad6dbd8a5db68ea6a523b7053cdb4269e88346d56123860b82244e05d3762fdb67958ef0afb7de5436ba4a17f3fbd7ea2bd979c850583e49fd2e93b84bb7cfcef0a88837d6ad97af25fcffb1498a2a4ab60f025b18b4231b4a76d28acdf3004ef657f0da70df38a75cf4e633aacfd9ddccfe17198ffe09e670e94e79bfc5526b2f05cce1f95280f51c340695bb025942780e7cae7de063670613d53486564182a9c813c2511b301e75a30dade08aa0ea47dde316caf04bf528149609909f7b15c7b4bf7126b3602b1ede8b18869d7141a674b1d16f904101b0deb9aff3f9b1c80daaf901f70768c3619f99dd6747b484f6894b98a9ccf63e613c8eb3144a3b61c0ebeaf3199e4941fb2a952272a0b005ec51a0ad07fc844c3b910451a6100a96a88a7b9a409897c00ed56a60666a3b199628ad9934c1db5b84733fa4f72eccf23e602ed0165e7cc35fefa65f098e0bfc4eb7f7938a26e35872bcc352334ea270b2bb13b4a5b3ad87563e18b1631f10a20596042293782f98a5050ed53c9dc0b2603307ac30f8b967b06d51fe8ced5648b33de19ac048e138ad38bb2cff87866bc9161d0690aff8a3b8f1d46e55ca9b549c0921edea1af3f372a9fb6e89f0a996a00dddf894b15c41df3b485081ff79a12d3a84cac7801b9d51957fe79427b6f8adecf34bba115d3e8c02f95098391d549416b997af9ad9c74972f19e9dd4134b15aad81c521b7be00c4fce850a15591bcabffc918e201c74d06d2fe14da74f8821aa53aa3067a78396831c5286e2c6f0d70d7d70a0f30e87feb3fa1a558e6c3845e7888fef084de9eff348b1c643c6794c7f551d067bdec27263bc1721e5aef9a3910dbd7c1ba274dd3d3b008361caf4c941204e0d43f26a2b78810c6bd45842e2a5d04eb2d298cd0b306ee11978974918381e99e2373e0a0363a0ae3ef01802737b72666610a3ce67a7553fabee6e4f892c1765b89300d8ffe5849d90b711a45fb16895ffebcba799680a59dc7adc4e5705ea8409c52ccfc064ef40538cfdd2c7dd0625afa8fc9f548ec94b4cf6e99e35887cfa1d0a51e13174f25a03f895c7ccf63bb872ac902ea5485eec65e531700f2e6a650bfe4588f687feed08fec32bb812d67b8402d2f73805a3a0460e42f584fd0c97f835979159cf282562e769a64724adc90169f5eb1ee31040da6bf9162e8fe6c6b458288b9c2b5792674e40c8f8edc0a161a971de85635552286888af4e899d95090c97825d2c873c8c9b199988e610a9117c6c0ee9a260725c4223c752e01a6f0bfd52018169838cc7da8dff300d669825f6a1f1c1209fd749c597d3785687b46b3f2634603c42182f7b73f09d88e9344a7c6442022b4d78be56b9a5406e2366f64a818a4bd0f521de819c937c7e584bb6b27a9d986bb9c6eb50f5d4b0562bb504900b0b40a212e365a281c02ad099864b2eea5069553c81db5d26a0a694948bcad88faa0b01489ee2f0d8b7cf198b7bb03f4a83cbc1b84dedc4e5d23727ed888e631cf8f8667a2bb3a5150474931872afa6020a08037fece07d533e53a590d033d61cae0418ffe8511840238507e0ac095747a87c33c0f50b27808fe4028ec9d58272a3a8ae56033f1526c313d9db0d758513b61e81af82bd48be2167d2764284099c5637a1ae5dcbebf4aee998f58a129ae723392f7c3dc22c3912d067c4aa9d34e91b52fa26d549b8f2ef24ac9fc2ed078a5569e1f787a96c7fd8003d2621258adea8567ff6ce798e70256531a3e25a6d83e813617b1494b72db259ee9c1f4333ae35192b14369f2ee3c4effc3d2865954d36d31152d26544f2e2e9fae26216ff33180d537122efc6ff743f3745fb56642ee13e5d182a2fc748c6b54adbc21fabe0844400ebbaaabee392b30b7f74f0f2ea080629bfdef9e84d8b4c6e5632ebe8152935bb8134f04cbf898a33d862396d364966ba3f9dde21ee391bdc27d1dc17ce3bca21a57119221151994d727a3ff9dd02a56ab5a7128c3d2d9ab3115e0a9fd9f8345f9476cce880432c90f7c86d327273bceee41be47fa43348e53962ad3c14053f93e90979289e9e52b099976aa49a3054d4ba18cb0bea84fef72f635a0c202bd9e9a0302bbb861324f6b8956faad72b0ef162b0c64c404ee9a0dd460bfa69ecc30ad4016099a32bae3623404a92c417b424af2621fd36048d95c298da45c7737f2393407643a9e969f330bd00d43bc32257f3ae3b34cc99808632decae2505b9daa9622973ac7fa6d3abbd12960cda33b46bd3b175f79239176207f16168f6106b1ceb1110c3fdb059955043f32b279b17d201191b345b1794d42069d17ddc2b5fb1437ece5ff734eda77f57da1132f2855b3375b062dd0e91bebbb7d2c9c0f61562c38004b98989aa0f5076d36c030bbe0771a516d90ba5a57048b7183a752f4a10463b225744bdcb6ad797bf544638a9660e6e3cd0a702d05816c79d43034b4c94322f28ef89fa5f2580aa53c4c3514c767c5193687b097b26788800387d0dd23fb5af3e1e5f0b2be2dcbff945c671dfb2b7bcd2b3ac087fb9b0ef632bda518e1ad5c19f957e4fd0271a824e0e30a9daffeb7e7e4efcb926330549e978179574e09bb6f11339d3fbb2b3e4d577e372528b91af608b562f49697f8692e10f85c9521b19e4e67ed0ac6fd77251818ac2ebd142a2558693ebd0502bc2b09a485ea3ef3c891b501185e409ec79b56fd532974d9b9e1dee742df60be3274232ef52f8aa09505a20204d1b134146aae22b6ffbdda96f6667242e0356806557fdaaec361934b242cf4c45a403020a9ff3caa624c419f8368b9b96f5f2df5465330294dd75ff8c75b93170529aa7be41c7257138a349f41965f42f783968d38d2b5b4b0c4eb6c0fe540b74f9c55286c14b08c75950206850996db417c640467a91e9ecec5b3098651a07443b992c5bf649126f3f9fc45804a015e614ea05e0538885b822a287ec83221b397d1ed34776b45159b79abeabd59c258899ecaa4a63763e522fd4b7ef666669203060043d6c8f3b1f015a3f030a141af3e1c6564ac9a20dfa9b0ef4580b553bb505c8363e091f032cbdfcb8d0dd1a5460ab5403b338b33f5d466d4d2f41d0f4d938087d3674f2d611ccddfbcf87fd0c2999fa7682b968e683a9d22d8450048652b892c7f4a72074b93393d2cd37e968127a559a8ffcff38e52aeee44d5762be88f06991704ab7cc30a5a4844a3b1632a5ffb856ffbc5cf4293fc2531bc28fd5428dd4a0a18d9a6ef265fe8d24e8bc7359e437fe152a21135037b5a68ea2b442e733f37883f56aeac2f5384ecf82964ba2d1ecbf036eb3ffbdd1cc0defa11857944a60fa904633bb7d72825c2b32f828a652060a4155927ccaf584910f4ad53b62dffeec57b9ec1210de5dd4bf81763e193b77ba102001e1485aec2d4c0564c1d1f0aed94e28c1b8222ab6a61c735f02cf74674e49b7359ee3b6965eaf6d8c882b2aa645e26fe0628089207451e40378b11f00c3b29fb75017869f6fc5f4722a35110e4970a639da8c2e57e52bbad166909c11e7f491a6fb13b178b75a83433c682c31f6d7322d01f25cccc1060086b8cfb4505460e73dc5baea041b40b7b9a364854726fc101c56e2fb44c0e54e5945a1d942fcf9702704800c7a056ca4587e0428964139fceeea0ea9b4076293a9b47f4591ea745b070a17bea2fb4eeda1fe1f5ee99088b90ec7550b207435e19cff92dcdd6250dc55c6c6e4f563b67aaf4a421ff0a98a8006f0113d0cb3d65516fe560eba35f57d45aaa7c8db1e388177056da799a3afaf67c7109ca672855284399a8d091f28356f5c93ae785e12dad45716327e1b01ce499cd263c203a1a08967b2621bb02f33bf02190c49207386a60384968e0043a38130663357547cea12e17858644a262d831a8df2c1f8177083478c8c50af2cf686fc9ae6f63f15d40ce15d4a9df24cc650bd53226111b98c30ffdfbfb8f836d07fde32cea8250208e38adc4d7c158ac16a0f1bbcfb75676e083f4388ce208c04037b7446e07e4a2905cd8599baa4537a25977f1dc1708b8d213010bbb51395a8dafc492c41ed7fde5d58fe9f66e0d0ea03af0aca02a1c45d6589365a75e1de4f351577d15d86d839668a5ba2484f4ce78a1b7f2ef0edd13c90a35260486a8dd47468d7324b573fb34236f1603886c216890e12ef349f70cc3f747ee7fb5e16f9fc5e1315ae2fa6d3339ba550a3e85011d1fc3803f5c19783f6bc6dc5ea06f93ed87ff05f7a85ca5cc09bbf212ae09663b1c6e96a590e8cae5103baf4aba099f6fd5ec6549aa3f9bbc9229d4b27d3de07945bb8e878589dc326687012667f2f76a14399be5df0d7aa65a5e2026f3a9543b40d8721049a8d1a5a4e5047221b2d5ebbb11daae30925ce15c33ef256980e0749d3155281a4504166e00766f68d5396d9f5c29f1b7ade51f9d1b04c83629478a989f3e882c17990aeb4c5e04e502960958e94240cb4c03ed3239a71efbf26185191ac23968188fbdf44f2eb4f1bcb0ec3114a06e6a817056d92a246ca616825ddbac2a684061b6f7632c82bb6c54d60ac72a9f9d0a9a665eddd59bc14e5862b28e96232eae6efab0ed3b4035ecec1cc289944b0a87764d9edb04440a971ce2c37e886ea158b0c4e159558155b6da5aba9d8c40bef354bacbd3ff2e10faf4fc8ef89b0ebcdc3f1fb0367d2e96b7e6e3d815c0851de526d2c136138b96738aae2bac39f37669691f8761669fe7794b16c4d2333f6546fddc886558278decf2b836b8bf3bea9e84369d40a1168316a737bf3ef0e55ff963f99efc347f298ad2ea65975de43565f42585b06fedb19049df1af223aab42dff440c8f1696ecd87c61d97c396b202e1c542ff36d96fcb3948e993922470629ce7f9a125c67b63574ce234e517dda058d17e51a6b0bf3f566a909a8eb8a4c5a71f895d30ba03bebc86c75922348a98a0a2b3c4bbba3065e5c541e2235104ed6cd25e04fe48899ba3dd426210c9fbc8d11758af7d42d9924483acf810d1a3f76e515105e19d3f909210a671f6cf56a4300cb68e3f6a06392b5c82339d42dbac90245d43b9818de0a15c5c126fc5bbf6113567b76855414caaa5e19aa06e285b7f9086978a35232273fb01ab823d21529aefa51a7fbcff6b9dadbac726c210d660cfde7dc8235b6c17e2d861de06716ebc1382a25fda7102d688ce20e10df8209bb35c574d75a6b7eda00309c3051cb7f9b328b38ef9b7b2d9452a7a4961a8043dea7ba52924c36a12ef4635e07ebaff8d0123d244c013960d82259789246a4e533760f35d802389f8cf68ac03685cfa4d1f42628c11d894bd4db8fb64d4a68efff45a69809f641f4174d1bd46e25c400304ee0ff535653646c6cf9a28a154080ce6a9325852aed861856e802582c65b48ac61552ad5c666eb6e6cd1fbfa42b5485873fb65538ec883f1bfd71c4362765ebd91b506671618e9a91b3983bc800c9d16ab957f69a0e130b8b44772654635a2c816950aeead237999c72912826d7e3ba3e923ff5a26b757f33527f7c7252afb4194f46a1d3163504829da735e4125e40dfc14b08f649a2bf6622e2835e8465b75dc5cf25c9c3cb98664e8ac77cb082112119aeb70bdd75a7ef69d337042e6dd7b956e6351c51cca40a0b5987640e06286ab0154be3db4605743f2d3e963f1bdce963a1297a6a4d6f645a822e982812af10c9313ed3482d6434afe173b0e3cac89cc0dc0d4b0875300081e4a0594b1ec752194f9a5478b59d96736f6722fe05941a6adc7b5f9e038b9e17995052d97ecce1fb94d6f0c242d1a46267d1fba9a6865880c61cb257383d183e4a3366570efa37afcb92c686322489a14bfa445a63fb970f84c89b72b9c43237724db36e3e0c2872f75abb8396c67a255337b110594a975f0cf1d5dfc57ea87c3af8432beda1ace613ccd49a8185e1ff654a226405f7198997fa5dc599888d46befa051c207f6e14a2bcccafacd40170f49f69f43c75de9533527a0c1f9830032ac1347bb00c8a202de1eff3fdfbc731157b2995654056e7e740845fe1b0a1081f585b5b42ef7f08708af1831802e7819d4bf8963e94c9dc9042ce0aed2d4c2a70b3f9c5884bba656314db839f96085a2e693e76813e5aa8e1342dd3fa7de35f975dfd5bc007201ed15e35ee6222bd40018ff625f4dd64695b18988418d9110aafbf1f5907072f90426086489318ca3f739a46e255ce970ba5263a405e83993426bb2efb0c6f744d88f96daa0037f42f5e986c010fdca7098b005b5dc6a6aeaa048e836ad5c234401d4ae8cbfd0ebf145700fa2a68ebc95ace1e0865a544b546b8b7331d714f9b5515a94c1002f5f0584a0a2a2eb0c9113d9e50f19be6a35e1b202bcda02d654e25a4cfc04206aa0ccd0a1a2c3d4103f3ba061b9ac29de92fd049d7d014a2010d7d7d917307677c987e492e9037507d22865eca06f64800416d88453c3632344b5b3467e049ba09585780591db08c60573718c8c28a2f6c5c225013db49916e0aad8eaa2ac7ce48657dd64fc1d586ee17f8a674e5ec68a72c824d16dc5c6f296ce308f29aa129f33d784cad0501638c52e1a311602dbf883f44d150f25ed629a1ed71835ae9763bfe2687d557b04e4748a71833001bc84a8685b814f59624956f2af9eb415aa03e267b0297ab95edd842118c9e1179d6aef3d80917d0498ab350993583438e2c69ee63686139de639e735f692aeb13e689c108664920d31fa000ddc25ccd87447c14c9dbeff222e89578e4ab2a9b6db01ae9773a7ab876ada0510cbd6afdd0de936ab89d17a4128e2bd1d5e93841f0d1d76d193fc1cb0b2d2b029179819da100805e64cebe2808629f42681321e0f904d64c83bdba749203ed4ad95dba291dd1b76c5c14e483d0ea2ab680414c0814088039c0a4e83eab7c22262bf3a6583c19ab98504dfccb94d792b4e9357a2688810e40738da1e7860ff0a82df84ca6c6ddc30339a8c948e1e84edb1ba9d60a60920c5bbeac9e4acaa261b67116b1092e0006c991fef619cb842b06a37906f6abd39ef924428007a48633e9950b0d852425d4015624f8f968e3c057e23484835d885226e0072fd042b7e87fe16be52997c94cd206d05a2702a1a34ea051011e9aa622a8e0435498a915e02f1d79d285c767121deb29f39a0c7f49b2c24395229af78e71733a97212d302e409204f1826d13285748207b5cdd4b00721c4711b16ddec095bf50de7f74b75b3d84e26c3c9dcc5e9d506b84c11a199a380548e65ebae2be25f603cdf0287c813141db6712ac7c13af8810b4fd701e3a69cdfccb2688c442b281963fae21dec994ae5b6758ff5d3a2f2237eacdc0c2a7a5a20c8737a884838c23e44bc44f8514c96584c031044d020695e0fbde9ef780534f7e751d14cc27a38352c70d754b957b71a23a9ebdc0bcb4313dc08868f55c6ee69a4ab6c765d0088ef81fd085c3e0317f3e074511c68eeef582dae7538f1801b335b1d6a23f3e9b1c8edebedcac2b8f3d0303d6829dffebb70ff8335ffb37556c2a30f720c394cb970a3e2eb7ba5794622d1f97d1698fa051a6c0191f50f10213eb7812ff2cd9cd9a44e0d599f611ccb6f6e7205dffd06f65c6a788c4d8eebf728f9853e4b707530cf03cda87262f56ede883ae3a53c2b2fe2c7bed8651aa5c43fb1d3c8dec3923d4942ef0772018f037a521a02b4276a5d4deeff9965ac94956a08a1662e31ff2f61839b6457220008c89cb9103acd15ae19116e1304a663f54c06b2ae9654e40832583a88988407084f5a91e9e75018ba27b958a04b9a4cf256efc75212260dff0c912a10171a08848fd834338e4721a9e41e31a97e72e9581d95bb5041e05d0f87a324737bc908dd20261b6da82184fb480cfd9a05c239fbb3fe0b3c13cdc9597a0567ad674ed4770b7ef639b372f7f562773aaffb6932fad300093da07ba6541b0ccd6503ba4b1feafba51bc3e78c6bcfb0c16459520c2ca37fa6a2cca8d5b18eac2c525fbe7af24062f39f48098d0774ad35b45cc5142e57041634b48713598e3a5d82c12b5610ba974a5ef4507c343ef3728562b81bf128b3a552e6057970397bc975d6e8b8d4f9d536eea38eb8c88405cf4f9af9685bfa3b3e20f3bde00425f0edbc97ad53958ef21f49bde6a030dda3d75d1f5a1356cef59d16abf4b8e90daef8b5513588c1c3cb3ede5b36a8622cb8993225a44bc3790230c1c6a50cfad8e5106ea03d762806cf14e3a8bb3f2cd1d7497a4b7e989302b65c22648239614222aa082d63c94bb9ec732124fe5ece60a1e5f37f9e4afb91f32d39a31f3ff91a6c6f3dda6eb769a7b3ce865056746b31283b9b884c2f48fa726e916d17fe3cef01a8ec82025f3a11097119b95df77372bb2992222d3f7644d72cd109aa1d6a6f5fc7622f125c2a1bd17feeb69e104a37222f18448cfeef58018cc90264dfdd1ac5a3e9ac25e811d8a6215c5330a4bd6432344eba1b72d21738b51cbe96a3e5c66dbc0b7a24ec6bf71f3ab985034f1050f94b742abfefdcd4cea74495ababd22560bd5d50b07dbf7b445c60fbbb92df06b4a70707ae565bd24486a9862952722ea33f1eabf90ac570f0e507a41487f051d6afac9077cd3be037720b64b67839da9d8969caf59a686eeff8ea30e068fcd0e6c299a8c2728706d1e2192e6cf5b66711b8adf3ade314ec59f6500851e5b6ca7a9996035d2b86c7182438630589e4e999a72bc3279fa019f7efc7a646226a0f32f0e3df2c46a3b436196f0d810241efbc1f8df60f8d8e9391240b7922c9ab373bca6d40ad603e35123a90710fa567f321283bbf2d1d8b4fa8e643d619aa0fabd5bc10ba443d009d373437eee2a7daeb5cce5d447d69060489901cea9bd156a833b50a7e08bf4e1d30ff1078cd46358207ec2972988e75afb41c9143b8819fd164f60631d1036e4e4734c21f1539cb9d88d86ea103ea6377dae639b07e0cdabe41e7ff9106431d3ecd99277ad7a35e76ffe08a46c69a0eda689f387bedbae48de5976ce15f757af377d7f5dde2263cb753744f7131ea8289816fb1acc34092d897529ceff26fbc24a8f97eb27d927a3bd9e86410e2ef751472fc198aad0fee3632873c066d9ea6879837520bfe1afa9e9bc659716ea4746a59db067c3f007b5ce8d95adc1e00d8d0d8cd45f64ee5be5338799475c7eb564dcbab94b5d2237506e19873a4a4691b1114e2100ee27f7c2735024f3df0f94d5020e5a46ec2fa034a6d27073cf3d9c7cf9dc73e76084411bbf22ff55a9d8614c85a74acd8732a747278a943d6ecdb47ca877685ac7cf493c1eaf37fd1c2adcc4e134625108247f021011d5447fa730e61ae536d144aff4c4c1ab8070193233729f2ab61af45fad5fead904146460a159d0f9a71f7387f03c91f2fb664499e75ee979497322d8f5641926c5a63af526faa8a6c9e553212993ef93c6ec59e2dbb7f912d2d972519b61596d9afd0715bee588b152710610333e41575542de4b25abce391488dcccc53dbfd30e0572fcf5c43b872751191d21fc34a40db03fa2129519068a92b2fdf7efb3f981bca11ff04d0c1181a06e69a7a9963602e779037f720f6fd05990dba204162386a3dffabc0224b0d51ecabe028c75521d73bfe5153c0ffedd06912f98a90067cd4cfc1ad3310c47768928e45fd8dca0c56028d0bceee7b6316d85bb086c8b2f58158da5124fc6dfe2a8b1ea85b0f8f75f13cbc14d84e8455a86cd9c8b2189067d5fb89308e0a33338794c4240021c2cbac67c6b7f07ab2d656114ad985bf93ebc03afe8ec7ccfed78f96abebf683fb11dcee5936418019bb2a822ece814890109d9d9a8b4b7f7df2ce24535cc4d4bd3c35c86797822a97feb4bf2765790cca21d57b5c7fa0ac4b67a0cad8b924009801654ec0e77d8d760d8b30dcb4fb46f3d3c0404deb9a9e999c1401234f46f8e5aafb803a992a94159baffb0a8fa9d50ace620fb4424b14eb160f0905bf8da404e962d29611afdd18278beb285c18bf9998230a44418958980a02a380c0d1536c6c1a00f79bf237cc8ab5968831f452f049ad9a1a9f85e52ea182a611f6a41dcf0a9cbdc70206467ae76d5e480383ebed8f09c02ab1c5a7f160eb37efc31220f1405f6014b083b1d4dcea1ccab873e985453ef9dea88f04f46f72f59bcba89ca1005715771de11b1d9975888f883a08677dcc0b64384f28878a32ab0c20074a644ac0714309e8b6093030540da780c426e8bcbb351a57b89b8a1d055d33b2fb4bf08ebc2475549721dee924ed05b9dad0b1f3893d557a2aebef7de62576946535dbc57ab47e5dc6f23bf9a215cc8b327621852eed94cb4aea6437276f132ca656d0f5ce06921e4c69b8a2c75946f29565451e34474010a02ef6d850fa1a38ac180c000336e53ec666d8adf9b1610200f2acbf96c5c9a4290692328804514b7543c6c40d1d7e9252be53e974c3fd025a915e674e2222810429e5f7797dabcbb4228e01d11a55231cc815bedc26f3e6e75978e5ca1d65c3887cb8a0fd8aaebe19bef63bb7ed34c11da722e4f96be1dd36e65e5bc3124560f518315416d70532374a7fe6a31401cdd6b8a1fdc7dc0f7c1c7d1c3d705935f63c9c92ed21cf16ce3c2e77a0a6a7af82906d4fec7a500015c2c234c1b649b0798171454084c2c67e92f62a6bd00b4181c571e673a2ef319339d8900cbd593293b62019201b9ae93f017ef90e801b97a300c8eeb7e580419e6ff7bd8469a07ebe2674d54ccae6768e9d38193a1a8621291793be1a0d5bb7143043ab5f0b781da13492c58f451d933aef2c3f47ee98355fdcb6afb1d41ed85c501a95c4524555c496ed55e996768f504ee3ff7390034036ac5052693eeb66f7031f03761d1e8815cc9b8a5eea906d597e5c07f57807077c1c124429b2d1c578715410b4be493e06dde30dec05355e9105bee125833880d0457818fcca01be422c639371af964ae605a66fb85e270c7af301a43464f7c8b06b0ce359ee80fda821b14a52b7a77bd3cb6a11c9af2881b34a11848ba7d32c3625b0c03fbf20618850d7f73c05f6b000a5c5cb7641c6bea45341ca209f70af1861ce8abdd64aa79998fc1dea3bf4a6670e64f1a79ae73c640c268b42f20a08e58da89223cc2c5c89002aaa001c0abe4d13bd6abadaa6bad66c6ac00ddd909347fafd3082549690572c8bd4eb65c30a0bdad8dda0e87cf02ddc2206d8486ff5f532d9259e2faf088ecfc91997ab3ce59cae978e1e48be68f917f4012825b683a67250621b82703faebfb34fb75ce0a4375810d2f8d6d05d055c24039e3c8d662d5f13ba4de2f1caec0c769974b80c8ea57260ed16cb04537bda0635755c1b50300f224c0f01f1a8a5fb3175b883045e556b8f3cfc3d6a2e60d5b886bc198c430e9e1771c92c2e861f40b3d5ee3e2cb4e4b29a20773f0f51d0208deb9c491da2afb193397decfa17b699ab1556a35c80c90d340cfa5d0f4e30bc0d6deae1b8f09c10d6819077f8178b042b0cc9a30e3d519c0f884e39c532401893038b49001cf39c4a3a58babcd6cd210034bf782c4379bba08e563268786f62129e8a810e83939094b43cc6a61253a6e859129a548ad2acfbd9009d62e74e630b288d683cc404ebcdf47011be38f089ab04f484fc9f8e843ce75460180f7569954214f0acb5ef0c1649fea1c398710fc7ac11a17d4ccd7b09c2f5b0ec6fdb8d0dbe0d2ae6f83aa4364ffa4c8fb3cf4c28720751ffb7a0667d2722f236caefaf8e4d27ea1b25d8611b8bcb545b2e33d4c5db29eade0e7603520926910a0a2998bbb303767a0768108f515e023b8e36ddb025276e3a2d666ffdee2c321f90e3406078cf83e6706cd55a08496affea24e3e7f0148729c2338bcf370af6ca396c4c06ed1e1ea2433de0d8c3ddb8581b1d603d6a76ee77b5990b30366f79512e0524ada440e8350ff9c0a528c95fe8d3ccce76bf715452b7864ca8e9eeabf81c0d882c0b159a76b3abaa09610cccad16b4e7453a617ce61c424edf13f8d1e4d5960d152b7ff2a1bfcf805808bcf62201aae70df3310d57d6542ee941cd8eafd672b493d6552d280ee04761077f34046f3e9ab55ac89bbf083765bc790648e7f8b5ce15ac2e2af8456b5d77b9a23dd6f669da0ee0a02dacd1c65452a40c7fa85674bf013d98bbd7283ef2c9101ac21e76cdaa27de3f8654985dcac183d324060cb880223756e5e5d279c222420e288825c9ca909bfffd3ee7a36577e05c2afece344479be81ec940b9f66431f47eb3c2a623e2022bfc4680c49caf70931febc8f6acc1255ada1ab5efc81b73a1b0be215c347595dffb84df09f826183e5e94ab451b1ae1176728319760702f0cb1881ad379845ff39b5cc039c76ac7382293d20ca350159fed0772970bbae6b4597961ee2550277682cb26f14947df15feb00dd2156e6a868cb22776d7e20d2643cdec5cf36774b5bf3749d37017ab8223d70c6861a619af2b87b461bf9d5e80048147bcfc6af14216cf9b11656748d20ad065f1845d26951601ca18b98c2d76e6278a93ba139119f49ef76bc35e6afc4b5ea8172fda949b11e0b2667cb8e075d18b5a3de0cbb4e0e1bd5dec59130474502fb8fcf3b7133e8e8f8c69f2b5f73be1f3a6e122fe25c0848976144a8fec86b6c3a7d386562310a239a71865e0a1939dff3e1503a5429be5deea99ac51be9903877a4ba30134b9482898e11812228b3580860062054632952135d8d4aab37802337a41ea2c5cd68171c14050e3659794b14401c5e7541400263fc2d5913f75747052466fb907da2b445a32c9d9f71688ffb80829c9757cdec0ffdb1ced7d3590098706650d5c4f860293237b8d98228a87f9c362f39d16b732302e6240759e42e0f6458e534074fb22cb9798c0f389cb4f34558da117958a8d40e17f6eb64bcbfe7f60356d9faf30f26c869557c416ea9e13b1c005de0ed880595c13bcd7cd1392570029e2a70d022c459c52e75829edb7a448530fe3a0f249e5b40a35910e8e3e0456dd66a7605d4c01c81f1b7a2667979352035a2604044f3e24b730ab13cc8b1651f79f1160e47d17871739925c3d9103324145b4f7a06395aed2d62cb8bf9a0561e992bc1093cffa71e70178d0126f08c1ff87e5693ed61b1901a0ced708a2cdd9718cea51f29f8d23c42bc2a9b880be78484df6dbbaf0a04e49b3cc03efe5347f3fe0f8245b66b3a49818d11e08c85d933d93e88aab6a3f3efb90467332e0c873227bb679764e94b02fc13fd3f64b1806e768a1f270f6e6e078487863f2ab803726db164ef4cc6663492f74872dc2ec1194a2ba61acc09c9b310bdae6ab400c60df9d6873a341be66870cd80986c5d34591020881662e59831cf472367a24afec0b39c12204dc16890c88362da49f3d1f1915438d6543c87389b476cd360a1bc5d62d2b98c71d4aca36b489412ffc4e3c19d86d7088d0b9b1998a9ea40f796ee37d3b0678813637e27dd7b01272f98a0b12d836e0bbb6e1ba8436b25a048a6b35cce5079893b57538086dac8993a35a6c0fc4cbb7047374f7580d010e48caac36d0d128372c389b09d54bd513ecc8c6344f30a16f84f3e336b189d90ef5091a76c9db0f488c799ab80caa645ad64350bcfde0f28ef4093dd5b3c0761b285cbc15c65180f0eef386f320883b5c45eae8a5417c664182ab8b24106795abf4a815599656838f5a8cc318a558943231b7e648d581694d7d60a9ae13bb1ecc3f87089e3e823fa2a00edd482b75e2cd7b3cb69c20b8d9478d1af69f1b8668177782d4084b5f4b093da36626813b86dac6d4a0b32fed94fb2889e086dfe7d56a1bd78ecd44d6b0236ef69cd38b78d8200d3b33c902d7b8bd9f4b452d6b100d1b3dc707a205016a2a2db141aa1f07c9d55345629f416b43aad1135868632e34903b9fa6a3eb91c227fb74e7dbbb6e4dfa340e71ff9dcbee511683ad692a927c24440c75a9564376a9464376170643745546c375554343c4627b62d90e5d85c1705dd5c8e0565cc08a36d35d6d0cd1bd980c9375ed772dad867337bc236b0888fe9a125ae7260f93c9c81274408cf1f9d2162a8f9295164941595865d0d9f09f4a654d8fd8ecd8a7f74899490da336506275623f5f808056fa77c6465fa00a3cba50ed084ed11ebbe8487bf4a0bd59cebc0b70c0cbbd20fe9f997508f4a4589be039cfc64477898a02a4b551d55f01c7a1510c49e41124fee618acb12a8ca45513a99471d38ddceb4de34a703c41e3e6894ba343c3ac58703c53aca6b806463a0c6f9f98e4f3716a9623ed20bdbec9df52e1de388def2776e58e52909d0a0222b91da924b6f41023ede59bec6a2180afbaf274ca7b926261027c794209f844cd66eeb38da1b2c32474789cf367b3ea49edc862a671bcf9b6ccf7d79a40f068d46c14bcbef38aea8e605146b062724a824f67208108c51bf8b0714cf4c3c5e83f4096881baf059993fe86342ed710422685bbccb43358aae2c5c4a47f338beb6101c4d6dc99242d1bc19d4637803fd0e2ba73d2f23ea8afc429ecc8afcd72a843e35ce3e22a84973d194bd1b6067a2d612420a390e33b22fc2f59d03bf9d95d432a916bcd0d61174cf200d8c3e568e236b76bb89e62b1c2f758794512cd922f18a3dab7e7170704610759265f3660fb035142b2f58899c40d6f325469c4746633b401acc2f568e129bab4f964683608eb1e46bb87295479973ceeb28cc9f886097451038e52e930bbfe803d406204049830d2361ecf6556c267ff16c9d25fe110cf7b2dea3a6998e9c479326b456f942f28a5e3cca129f8862f454199334ef7328566a0c0c1844b817abd09235ac9b914f600a44c7fa81dcfcc2ee08844a3088e9e8f39c51a0ae4b58a27bd0571f1825e4546ab952d0b196b0cdd2bc6900d16f7910908aa48d1a51c059d789141430899c9c73d20a4bd124ca19b0efeb5b3a627110e82d7ff43c1fe604b68fd06d2022717e4d38c01de450ca099410e73275a5325945b301bfb9f0be4fb01c78d5bf8e6c11ddbe1b1399b504c7c4500b5fe8719ee20715140a8c188a5022a033c8cda071c072c0512a13ad2ff4e6c40a109623aca0f073f017df933e7fa3290df1514aa7b813c202c64f46a4237bd51887b5b079b204b9149b696f1f9ba6aabfb1991b6b9d1a1f93caa1815a1e685cd730baf70364598acd6bd22bd692acc260edc3665c8c4c34e9767c8893b02d879e500a49978e79b75a21d768f191a1e5bb119704f5b8eaf9ba6bd19904c807c3b7f75c1e31f4480cfdf63ef911586ec9eefe9ab7445b8ec587c9fdf0cd7ff946f393665bf3a5d099e83ddb425773c6f8d2e541fbd668fa962b13c8543ab16a4bf5e4fd934c4277ea3072b6407b1a2f00d2f6ddc095263fb35ab35445e6ea5bd14b5e859a78e2a7094051238a71ac8a8c29b895c5b5b351449f3636e0a7145dbda156e7fbe958b3c1e0cc7b40a2abf5e50a678a4fba0a8e52283da77d889d69ec859f8751d98fde8d915955f0e77d4e94d3be3b49ab31fd0d69e2a0763050f77b3c265731cd4f5ca7374c9add80748471bf31e4741d562688361cf763ae7629ee4df87f710d9410fb20dc4e502da48ae735a401a594d0755510234b62d89cbe863295702f0735bfb6d9a00ae9f54a41f605bdc32fc3a87b37170f9a5413dd0fe3edac6a17487fe9296cb2dc82650e428e4e16cad6199f9fd6c2b4cbc356b5d0ad242dadeddb694724b99920cce0642072607ed93fa42ef9e7cacc917da6bfac2eb95bed0fbfb7df1088b1cc62336b3389b73cecf308d7c1236f11b46f976c91877975c859e772f8ecbda7bdba77ddaa77ddcd53ef24d1e059f5c3246e53de92ee92ee92e194b71457f9bfaf0a2644cc6a87c2e94f259b92a7d784d1e9649882bfc352c9580d379b97b9cdbc555188b2e61b8328692bff259129971b179deb86a65d665a2171b5e3aef3b77dd8c93ec7d94eb1c4974e98ec691c8cb7986c196ec37f95466f2ede7471cf46f8dfee40b6dea0b2fea6bb54ca257f89b604904cb2544d0df854c2e5472a1eb42135f209904197379c4919c521cbdc1c9e124010a8ae5ac6a943d694452d53853a412d97f246361cda18cc92bb87841670bc555bc2028687aadb5d639fb720e9e3cefde5ae7fcb91345e21b9e43cfa3c20d27a5de3d67776b34dba8d52cedeeae953a6193b6beecea0a754a6badb556997dc59e4b1cfb168769490133e9e54bf92b2d41f76b7190462c9b526634cb32fa13d3704f43484e9212b73370c5410edb9f24dcb00b7c14b27967e400678dbeee91ab2af4a041ffee217a2f7ba29f5f0ff965f802350fa24b77836ed8ad9ee611655a6618882239ec2864ffb65f6ba534cb36916629a594528bba6eaa5252d951babd6a13695656d50c2efbd9cd4f25837e679a65d66a9a7d6b4ddcadee93fe66c2cd29a516f60fb27fc6f26fa99c57bbd6ee39ab6669364555b48944d409997e95b576d7a6b57bd6fa8519701d9cab5e10fdab91f9376926a59c1f9ea65f2477d22c8b2b5396c1be94af654fe58a6a6f1db42f35edc12cb3cfdedaec6d0d4b331d70cebe6be57f663bacb55279376badad6143ffcc3a481da41e7dfa2e6866dd294de26a54fbae83d45a2b73ccdc039ab596be887a995a4a3fc561ecd38f5f68356b6b464547840801092018b1c507cc7758fe4cbf85a80359f4a2dfdabf70e5860f9d370dd797527e5643da903324397bfad9679d0ef8923298303c9125e9c3932c491f61e8cbfba167795f7e955fa869d9cbcb4597ec5141b8f33b87364820e37ea6870a4499a932fd8885c3b438d87de9b377d17df6256c1decbeeb6efae189ecf6a57747d88dce219775dcf6cdf93eddb39f73667386c333ca8e72e4d693b8a2cfb21789be3a658e997ba0a38c99f155f69a080bb7ff22b9dda25f384cfd4cfb6c38338eceee1d124074e6bc4150f6b947dc002887f365731d36397b1d46e4f9376672f63aa24b8dec53c938409e7f803c638c2e67c8fe373ec7ef8639cafe37ee28fb8f4ee41875f492ec38cce101b7c9eef26b7a49ae11df0f90fd6f44588edf3797e46dbabb572db457da33fc0642a2b8898e006293fd45bf8d4847006995a2c9e49439580e5f2877b9189fedcf001dfc5a2c8e1a5216e11717383480071b1ab869f970f1c08618d93a7c4384c8b7533763be7fe1d7793b319959174d5d36c3bf699d280a0043d1d7e2a0f4ba1bc40d57b29f37b2b7cf61cf5a47f3c5b822ec66f88b9eeb667420d76f7118d18cf9a2afeb66cc0ffc48dd0c12d5c19fd674b62a8ee2b055b8cd5327629cc8f5ab399127a5b825c5c3c20d57bc1837d7b4d0e79a0eca936e9be43a7a6d2535e1302657430fb52e462f09a70e7e43969d0cbf214fd93e4718f08c83e6f9333ebf185d7a45a85b6206fd97f43519f6926c9764edfb4adf6252a6dfcc797e35a4dc3ce8a73931834a8aca048a7792429d4c4ca54b1a75dc26d26ca55974718f2ed25e4f7ed1a1d0b21bc88e2bd3f78b55ad1b3b9a5111f7d4f7881bbeb87809e34b8c3d7eca8a839de9d7a2c44a9edf3b98227323c2320ecf35ad244f991b386ccede079ae74b8a9de21b72f6d5c4254bf2fc26091c1ccd39bb6777cfe9ce79d16507b77e7f9cd7b3a3744e2ad26ccde8cc7e3e8dec5a3559b5fa0ab02f393c2571637ea1f33da65976243339b739c34cb3359b22d1261275d36e4a9b5239538cc20c7c221fd5e0a515ae0c62eb16fd9bdbf7bc4d959c92210dbd65b6947e38737cfa12ec16f45d7e165712953ba5f66758c615fd85f5dd7a063a28edf752bf835133b5d47e2d23f59c356703e8026c79a13cf89668a82d68f05989c4200dc47a18fa8187a6d1302f0dfa37180a20fbdb00d0d02d5620e1dd0e80ad21fb872d3900d7c8ede1c300f0208118246dba2c6cee320880993fa7eccea8674f5559cf2ca355b355665936b32cc3d9941248500e49d93b18282899ca2550426c3f94396ab9de29800d28f242640241039ffc806ed1ef1f816ee14a92b5772badf5646e1832b030d42b4ef8207bcfc1418fa971259f244f64f9b6b18c605ca17d8c2bc2fe898383fed1502971fbbbf1597ecdb18b11805c139794216731c22fcbb73770d0acbd0f36d7dc90b5afb1cf1cbb04b4ec6478b6df4bcb466134c04120dc78c4ce7cc04bc6218723767ab2ffc42f608b14aefc10ecce021d8c4ddbbe666a1f0e94ac3d75a1ddc9b0b9663e066ad81f7d0dfb729bdb7cfadbdbdfec57a3cd37999c4a28144afe098734c21fc20e8433598e3ee6ed2fde46a42f1c7df2b72ddbfeb72c47b62f7178b3b43fdcc4322c61a51e089ccadaa18395fae217da2565a8e91831d7d49c7d942fc261c330c189ecdbd0f1b25fa37da8818c0325771f4a2bbf1aed439a7aab3d7d6b4399a25f4df7ed0891fa1d3976e8f893939313ed63ac21ec40a69ffad8d1f07ec65327a9542a954aa552a9542ae57d31d690faae5cf5a38adcfe9046a6a99393939393939313efe4e4e4e4e4e4e4c4fb769c7c8ed4b723c6954ca552a9542af541b060a5be1d275f8cab50c72bd34ff43173fd31b684a2e7be86bf4a8696e5dba81987d48122e76adf4b72685f4475a84b962c09830cedb3df4eeabddbc911632c22a4cd3313c10890dc6f87e426021584e0a040a8235ba0662a6394e927ddc6c6c6e653cda02f9f4a05e0e85c3f1b35d30f87ccd937c36e947f42db7c19ab5c75bc724f3cff6be4871ac8a3af894bf2cefd1073df8c9b280171e72757dc731f634bd85f734fc3e6efaba12f9feb8e0191954d1c76dfe8bda3a11144b34a5f7a1aa70f88d3ffa08375fa8dced75e45faffd8c55091484fd23ece1af9e1e871c8bcb381d3c76c699c3e207ec8b1c4882870010c6320c312d6e977e8609dbe1d265f1a7d35f2e773f43b1cea7865ee8b58655fbee87b07ed3703ccf5774e6f8273340b88b884753f1c14d6e913e2f43b72ecd0f1a552a9e4c995ff96fd292221f79ff08e1c2e4654a10641e04212860062955ec74e133e20861bb4c0061e4882753a9d4e44cc6f48ee3f7da822d75f7e429cb076fc20c4096b478e53a9542a954aa59249a9542a954aa50f8205abf4ede040117ea0021f4c410b2e78b14cdef43b72ecc8c0112000e9820b8ea0c11758a5cf71fa76dcbfb9b9c161c13a3d0ec83afd0d8ec73a3d8e659dfe86346463e3b180a84a6e82005940c832d8b04e1f040bd6e9db517a939c290c21a80540b0821096fb2af4aeafac0a7ea084114c81074a08c1f22fe1e83a7edc207133c410255488b1466e52c4d6cdf937d6d16168e8860b427ec0a011a2134170e2a0b5c4124358829105d02c4189b88a39c6958dd99fde6dbf7557c3699aa6752f12fd863b5a91125c8769ea6bf57b3a39d9cd2ec6e0b87863f4dd779cc51c50294e268cb69839ae34ea386d64bba3e138db1cc7715e4a8b5ed4c1e0706239ebb88fe371573a183150f2f65b89eb70678ee37e76349cad23ecb59b81923751b5b1db8a9e1be19839238664fb755bd936edbb8be1f94fa42e06ca0c946c3f5912993854a7699a964aa1a4e0c026872b506040c4eb009e276352dd9fc4762546a3eff08b1733db871186b29ce53a6fd4f356ab8c93fe66b3cc4bf1acad9d8be8d21d8d8be842ff099c6f76e3be6dfb583848bfc696a31d9447f966fc04e7e02bfa5e2492e9df2adc90c50befd107061755082039668beb6834dab619df529b1c7123ceb957823261a3a51c8fc059226f97abf8f4f686888b6242ec76523fe39ded68665ee4d26f1a97c2cd3ae19dd47b18e759de9fe09b209ee57d38cf4a7d38c8951546288c8383f67eec48df8c83f40518b4eb841c3b1a12cade2644c19551b4ea6f264ae01cc933f5dda168d5afbfc56c1462206f1f0e0ed29917a6d7c01610b59d4ea3118a13fdca73bf69a98d234596a95a1c73adb56e1b0b526793c3188518f41909c213708008398ca4ad4a81ccfea425dc704576514713b3c43bdcd78ea6b3c497c80d5770ef3793a39dedca95646d9f25c56eccfda1b5597ca940b028d3dca8e3ecf5c297e9c29969c8156d316242b4a2491a75a2ee16596bad5649af611afb221c23665ba390b516938034d7b46dd3b66dd36466459ca643c9bb57e865aa770ab700d779727e384ce83cb987bebb3ca659f4dd077df79c86e91134489f7e8b203609a20b7d13ee5683f45be8be777ffbfcc7bb0fd791c2ed0fdd47a65f4d179031fd8af125145f42af52cbe87c37fb1af6a8cd264d54abb5b65afb1a675f45b2af1ad9577576ab9bb63daa5437fcb46e1685bb72b35b9d11a58bf1a33b186e71cd7188071846903714b76d6f6dd5360dabb851a7695a156d5fb51296b9bb18710cb97ade48db9344a83ffdc961fa471d0dea8b4ed8322e33f96d7224bcfd56b91aa56d6b6df78a24fd8c1461ed51f874c2dc466a51e712d71d4ded3775f5232571fbb7bb5913ce9eba70edd7e76a3a932e75dd13ae7634b5df7634b5b76c669d599f7814ea9841a593366d4abb53642bea364baaa5ef2ec60b0f008960cc31829594d3e272a6897b8e34ea4aaf7dc9542291365bd2417bd18bba17751cd791dee21891a6feb661ed69c8988ed158addfddf6758b79d370b71cac892025e1ce177098ee85a40f51467bea59da23e815f43b9c5fb12c82e82284824c9f3611de0c327d4b5d90e957a1ce892e940a37ec574ea63c51a633a91b75256e13caa11b216fbf0ce16286ded39d2478f122f561844296910911892c1f468cc16126b6f05e3e2bc2687f43963159aec852c5896c22c5f42057de627bf91e6548efe285145ccc04afbaf122a32ff42246ba2f742348b8cf7b5d1def7575bc97f69984280a08ca15eb3c3dad2d5c0bd01d0027f1cc149b30a1e406c74195ea07504ce5bdbc1e98832d64082a8b3e95cdffa4f0892efd2a41547a1c66de1fded5f15edecb61a6c3d8202bb82c456269f18e893fc1de2b65c20be2093991b7cfeb11c10ddf07a7b07d1f1993c1827203e5ec55036709c049ec03e0e284e124ee883b6bdaed31c77024dc349fe0e80490abe8f1f8aa7111d92bdb9ff59bd5168093589537194e6213b9e29d93b727287c5b54bc93fa11b62e368cffbfa3f1781cec9ff34538b8b37a3ddeebeaf8e086eff3400e33edac3f67e5b61bb8194e62935cf14eca5bbca37a14ac82a97ce4aa531e85719ea552c55440aa1e958dea4685a3cac9b0aa95a978a0e2a102a2faa1f2513fecbc97e7e30df1889ce816e0acd47baf2863bf5fe5ea9131aaef5701f118944b9efccbaa788278427e486e50450405a42aa2d2037a3e3226c5905ce520c2b0e0b8c71361584210c17eef856f11f1eec4553f4b0822cc95010b8ec35c1d078b8832a7efbf388832a6efbf445c2051a6f4fdf70651e67effb54194a9c17545999d14433286a575691065baefbf338832dcf7df1f5146065166fbfe3bc48dc1d5893294a59562a80d80f33cb95f58271f5e1de4fefbf2039c643e04085f89a03f62e72809b99f9444ee7725e4fe4b24f7979690fb4d9890fb4d4dc8fd27a0dc52e2474274e9e7f023115d7e62b93d53fc45882e46882e47c03f649e708c2e3b382f2c9437e11d1c162c942f5d941fd527611c178797ebb783f285ff84dc1fc4cb4721f7bf129100fd5b4647d9d7acc21ff3791f944bc69892f8aadfa424f7dfe446b972603c7c4c7c98fc00cafd267466e860a4f2fc4c423db82198c3f7c9a25c99b05be6241ee58a77543f527d2c2db93a924530548f5ca160df2357fd1efece2563502eb9ea6f94cbf5af13432794bccddff8203e4fee7198cf4104fbfb3b988cf91c20ffc3f37179e4ee60b9bd1caa7447547ab00aac25635484f8aa5f6548eeef607839fb1ee78570b5ed8f90420cb908b1458aa15ee11365eaf7b3f0f098d4f7b3b452582588affa513a1ad1a7d2d383abd293fbdf67c8c79e88c3843644b06c4f861ca6ff4489c7a0f0e1abfe22458c184182c493e410e5ca4a5c490e51aedc8fea60a03227bd4e866b1fe967d85e57d6434b31b48216a418427534f4515d8c299382caa20f450f07fbffe786defba86ca74e8667f6dfc42b777875b2164b2b2b41eeefec04396469e5fe8dc5bde0267ec1b174dcd6b282e2c3d93c49c590dea451cac7a263e236bab0f96fdd426e8f28c322cfa71165aa16b54c23baccef3e7015a092214395e53e55f731935e4756cdb8317355b8a1edae09458b24bffe0e07ac32bd0f595699be17396055f73cccef613e8df93bccbfd84b3129c3a531495f68ed0dafe8e36f2fba6181975c237ecbf8d40945b0422bf3d0a37bf0649f2bc85e842a04c9fe0f306275bc6d1cf4e64a41dcb07bdc0021972c6175f1fd7b01fe1121a3955fbfe5f7e7b0a9c96163f17c896f74e67405467f0d73d8641f6ceee73e1b2bb97ffb8a55336eeebfb95b8eb49ff107e4edb7f6bc6d580ba7779c5f9823679c1d648cb5f77a5e7b8adc5225bfd8e0125bec1057f8f77731c67251c673773fe1f6d75acb70c3cee9f8754eb71ac7ec838143ccfdddc1d091e33033cb4147fe623655f3edfc66802f9d2b0b16cea2e317da4cbf695c843664fa328b2eb3ce1e7f4bdcc6e1449229387b469ff40b73e4f87d5eb83b3896d5f512dabd0d0ed3e260ff0ebef2b7f65a2030a360704355fdf899aa7e33c0f92006fbeb74ba1dcc9c792f1c9c197d2b371b39bb40ce6a72a4645b77882fc20db8f97ef06107d117e6779069d3d27eaab49f378dc3a347f6713f1ce645f3784c64e5d0ae0692e70b8a73a0387c39585a43caf6531c26259b13c7a491c6180d1e2eb03560870748a0871c72f0c1b31c5e20e1c61739bcc08186fae039cb4e5e4af5a176a7256ef879fe0ac8e2e32c8a0637b42dfac156fb6f1143f2fd18a3f7eeb72d4e1961b9f48533df1fc9e0c648e0f46d04f5a18d53367d7c09d8fad9ec64a0fe7ea10955fa5ac231e3d110b77e1861dccb9f71ce843bbff82cc29f512693974da6f78ec664515f68effdc29bbbd21763cc4c5cd55a24f7937e8b1040924fef418a00127347459c6964fac2cea8920f9e515fef17dac8d784c35336a19e763a9c4aa61aa6cfc62993be2be198b36e469b7e469a608cdebfc3364eb5d65aeb9be01afea4e770e8cf91de6424835b5f7efdd2cd25cd98be19a3277d113e32ea4fb0e0d6afe18ffad0fff4f24d5fff84a383f151f8b3b5a552e967475332e1cf3d2e57ea74a06fca4cd8f4d1844fc4e09a4cdff46e863fe965375532487f9f64f25bec4e5fa8a3b3e94b38a441fdc521ea8371b93f6193bfd1c1d24719a61fbda974497814ad862d70caa18d6ce394fb6d7ffd6a44a16e886d257beebbe95b87a9e15f7ff459f6233992a4bfdd684926fd6665a6d25d24d35fd856c3a1fd4cc72bc73f728a7ee4fc91f347ce1f397fe4fcf93ccff3544cf923a7f623e78f9c3f72fec8f9834245454565861327fe31fe504c1428a4370af047ce1f397fe4fc91f3670563fca140b1b29222058b8aa94285f456014ef923e78f9c3f72fea4007fe4fc91f38785450508ae5634d0008096d9d222bd5bc0297fe4fc5101fe802b998418638c31c618638c31c618638c31c618638c31c618638c31c6582c168bc562b1582c168bc562b1582c168bc5188bc562b11863b1582cc6582c16632c161bc2b91c316e186c71a5e5cca8cc68b5d46aa24dc47523d236e246b7643281f90819e203231283090d2551322494dd643642263638d91f759393fd5338273cb2bfd742992828d21bc5a6872748cf4b08ec258f482312893c228364122924835a3d78f8e8d1faa1d3daa64ff6f729c487647fe9e3a0877312c9fe59cc419fa515dc70ba1da970336cdbb6896c5cc75dfef21e8709c17c624041f265e3311b1b1b1b1b070a3a2234a4bd5eafd7eb65636363636373a2542a95529c8486dcc671bc05f3890105c16030180cd66ab55aad960c7ab9ceebf57abddcf5f21e87b98f9530180c066bb55aadd6ebf57abd5e9f4aa5b8d20a6e0a1358fb74ac81825aad56abd5924142414141436ee338def21e150683c160b056abd56ab564900c924132480661558a8aca0c339c38f1184b6f6cea96edd13aede2010683c160b0965cc15aad56abd53eb1060a3a0283c1603058abd56ab5e46c9d38f1187f1f0a142b29668a14d23b4589874da86da6104cae40f0dff3eeed1efeea1e180c06834d188a0fc5ca4a8a142c2c2ac00982d21bbc2f96c585e908f1008252c81eb9425e1c7a9bebfd14b2d7fb2924a7d0ca8a2bfbb3fc70b0b10a970aaef18d097631409eecbf7ad13069a0417ad3203f52f6cf74e40a9497c5479f8f4032268b85f66a5f78b358a613d3017398e964b1304b31b2f6de1891b82c9dc71c06a5519bad27b0e38304b6fb3bcd2db460db3e5cc9dc3de5f8a197f2793e8b9b9173185b7f7e27a386192fb5a3c96c678ef36ec64b9e36b3a28e866af34f620df3379c8a35cc17e1f6ec73b1390781d0221adcfe96dc7e2ec63f6d61db4a3cdddddd3dddc6d81de3a429359bd44e4e27c7afa753d0b596b3d795927244f6c8f1b7e85c682d77bb13c5c1bdde9778ae0573fc6ec9637497524a193d8efa61a4e4fe502fa01d3d5fcd2b5c2eab15670e335f089fb57e444c197b4e97ee6eed4744967dcd42150555f4ab426eff8cec25644002205be7dcf89bbb8c73caafa5943b5b1ce2e3fa7163135424484f0f1e4984624380b8706e8c04c182f8e831948448eca525ba20c978f477b434b121405c1367de18098205913e648fa12444622f209ee338478c0881b54efb50321481229152086e7f2fd1a514820bda90e34b771b1cac45b8e1cc32120bb6b8128e6cb2673ea6111e99a67dd8ea799a86b821c723a8480e270fbf5e07c995b32cf805751723cbdf9290e3d1c3633a21b9e2e1301d14723cb27f272485b2839f7fc644567f2823283fce3a674c1b09b99b85dba3ac2b121bfd52cea5bfb59c19dd7ee2ed290e5732bd1e9599ca958cb1450fbd427ed8997b5a0ac12d7dd4c747bede4e6d0fdd62c57ab75b397257bac58b5e215f4e21618e7c2fe0a07cf045d634d1872e4b20b8f39ddb9058f9b43e57ffe69a21618b2b218b4e8fdb9b11414bb20ff1bd1c45309ff8d225633a57eae34b988c31f1f1650f1983f2f1a58e8cf1bef34104fb43c923c7972588305d179413bb584c0793ab96c7f7221ee430223f7243441d4522ec07f12cd46d49d2634eca3967968d7ea34068475303a3fbadd66aadd5344dd4d14cd1b6d1d4c09899ebbad9dd683422712611dc3073e57ed2bdb7549adfbf9948a65167323131994c2613cda6ec9f95e3646794c429528aabb81b9c1c95e7e5bed5528e94699ced781cec1e07db7b45970672b048ae73e6bbc2496c52f1518999e898b8547a547a7a04193982c4c11699ac40c6ae8e8e0b080f919ca15cbda2edfcfec7f99e2843471d27bf9b1c663c992bbaf45b5c831ba06c90adc9243a8950a839edc9a61244aaf44c951e1a95202a3dd9835cc53baaa01c5e9fdb73610fbb3ad7a5d3f3360edee0e4b41cec0ff23c781ecf73b34a4f8f0a4cc54765880a111566e1c1d262710141a17874a2cc899222d2c826d250ae7832a4f23839f20bbd4891d08d18117d54a547a527ebf1b273e4b9e1d5d1f9017455a060139789c96432995026a88949d4c5b8ab7375ae4baeeebd2a3d306b123225f118d58df7326204099224a22ff424ae44dee49b1c5e1def2573727875bc972784abe2541dcdf6aa2ec6ccf5fb0427a22f1c885070259e1b004ee2cee29d14550a500e51403e31940bf5eaf16039df7a1edf4308107c04c9add223557aa44a8f4a506e159854e9912b9f9883ad4244a58897e9f73819ad2c2660695991d6a4174e62ce2594644809ca440d6e7e74301e39deab2788900c05a7f08935d81a725a3c62403d309f2144e86ad5d1885ec331e20c009c97786ee8bddcb38c8255ae975ce99838620289092113494c0c397882719e85923130a1a40bea3eec804637f7c5130475751c26fbe1302297c3642a1bd52bcad0ef9a62a8548c988b7a5aaa9a910008005315003028140a884342b150240c7541940f14000a849444604a9d4ae3812887511807198310300a0040082000884103336615e56eee4dced36a837528c1dad6e8ba2233b30e96d56eeada8221130ec0abf394b06f1fc7d065b0b71d048b495c8fadbcf54bc68f529ab5b5d13505864c1c885fe22b42df917641cc03ab2d06527199b9d8fbdaec9a0533130e84f56ae4da8229930ec82d72d501228695165feb4b56cebfcc137a98b7c04350d485e8566eed32e38794c8ac0b160efc359466b532e4dcb83677b5c890a90362ab1c69b5af45844474c6cf3119c649e5d61e7173f202877533a52fbb2b8bd5448e5ed16c6047dd45e97b976b0021c7d2c97d2a411db0a2fc0db1946f1653fe8db1d27f2ab6bea998f537882d7c93d8f299c5946f163b7d55b1eb9b8aadff444cf84f62ca3f8b51be5accf44fc5d6772aa6fe89d8e19bc42a1f1e78af6ad56c1589beca25eaae66125d89333d930f91d81a7751772d4374e5d6ec55e95e67885cad2d44a07db812f83bf5d4dfa2626b2e91aed4ccf5c52b1dabbb9241c44a6255fb1bebd5ac45d1b9d0d37f3a86e5ea412d05d2ac7e566ae8f943d37c6e4e26c130013f76d27a68a44ab83550a02c1d71a50f49ea13a8e718bd6f9ba6661ed14c98c3b34b0a27d483ad05e74c7f738a9aa6b153cadef142dc3f101781fa3d3b2231b495f18c18fa0b27aea8248378ffce444480e6b29e11e3ad00c58bc70062fd9f19810836a20541c7c4f56a347ca3110d4d88f4e5a322f73363c411b5312b841b8383a61adeac88fa393b82b19ae9ffd418b0fae875384ae8568a9ff92e69e2bbbfb822fd7193916a2a49eba8dfea8bb17630dd245300d5aced603491054f6a0755b23efc30e2f9d595795a5ca1d7ff98697f45c60789c4c7afaef39753d44f759954da2ad7785281deee4f83d1b0d9c9372bb358750e3b366a0c7a08becdc413907276b770690fba725a693351be9d21080b71fef4324454dd3ef1173bb431b08f41d5face550af814a9e1095d01d221b16c19a48cef15dcc29c01052bc9e6a4e7ae128fcdf69a6d551b6ffe1fb7968d6c30473ee95028f7f64f86624f36b868caf9af49f3c2fe833090d8f00020ba7b0f33c6da93c4c10beea6aab1ddb0f4a86003b630b00ac3dbba83c98e577de32c68fd976bbe30ae3439485194cbd15f9d75aa14ee0666de189847ca57943e9500764f27dc7eaf07603469a36aded0123167ac97c843d91a9946752f90094d2db9025960cf5c676b6e12568da91daaf68b2266abc61236b6b4a25636a388c7ca4ddb4ac1a729f8c103fb66f795f5899fb274dffda1a80b22b8027d693b4479b4db44217b67c69702f8abf05e322bcd690806834e91c7992607528eca382677b1869e1e647dbbb71c8f9caf4942f7c8706fb9ce746d4ad3be1598688aea4ce8b928726aecd741be2941d03227e377f3f2fdf7503ea91012fdba5457f70a21b6d3564247c5670ba8497d7389b6f966558e5fe4ebf5502c0dc9b63d553f8719658ae0b5085b35c73233d04fc3c114a3c0111304b7febdd5af7abde5cf62bb2c5b186a2d90a2705d4c306c7d7b04e4632cd4e1157e861d0abb573371b262c041c02cbd753825ea8a1b32d31134ece7a02408dd32818ae93fec870b3e35c8e324f61f7000a7c176bb9a7aac1977fd3f25e0dba012f60d862e3e56f1ead4ef9d0315de666241d77f99b51dfe3aae69ed3894132f08ae71fe6b3b9a674344aa78e860e759c3dde989daaf6c7e778361b8f02f647499cdcacc751e7b31bfb4fcb2d877815993d96d00d64af220feb7ba729109ee0c2901cc9fb47effd3e69fea1dfb8711d92faca34378b9bed6475d342a8aaae7d18acf20ecfc0c6448932b8d2f674e8a5e3729f74d74578b95b9d30827f36beb07ea8efb71032d697490c24447addf48aea503ba6dc414f1d889e6c9c7ea7906b219d5f7e0defecaa2806d41fbe63f80e7c1f21d095a37234e6133ed8aeff34f041df58362ea26bbff6230b90fc0ce0f999c11a39f02062ebaf9c7adef77f3bc416f44a402f0de4c6084959dcc083a7112f1077679789eeefd6a79da07f013dc49083d030f6b5cab4da009d6f1ac692b3877a903bc2a82dccee79abac61c5bf5d9891b5698348f1d44daef1008b2d6295c1c9e9c03c2c9b9b4c681b4ed157ee75ad0da6761072145dbc31dc4b90b34dee4a9f89b60ad4232905ae9d5497ee7bbb365ac730b5140fd11a72153363def9ad2654e99aef14b6f88a171b26d474874d0056b40482e76fc928812c7cec10cf9ab85cbefa44911befc4b501e070ab98c6fd46bc56ef0d2bde91a2f49b5dc28c95143184a2f8a51ebc0a8059e42b072912422bf5dbe13ea78c3b8f1b1489550b54e3e6ef4935c6b546643e63e38ec89ba58bb24e31a0642ff4fbaa11e79f7882ee4cf0715586dada0ea2b3ad4e7e8f9683a7856cfa05556a9079c781168702c03ad117760b2ead6be042a931c38fda015b71a2d7602e7c72e242113163a0ccbb42314b61cbf11a492516dba42a290984c5c657b07e64ea45a8b8050d942540a4af65c0b876d1d36f1e80246e2a17b7cfb049094f32b6b63a7d227fae71e2cda4f51fbd6e668c1550ac7e40b2fb1f134b28d0195544d08ce71c0a0076d0393c59e123443651c61328c2d3f29b5d297beab7ad1c8b7d68f73cce7646ef7114c2e145fbdcf60fd25de37db11fe62fa2a02b0d1e141a6fdc21cfcc34de82d312d08f5c2048b9fea51d3133a921cfb90a12547327585a69147feb5cbd6631715852d92a3673329b3f76563148739c7708b459a9371c3affa33e252ac69a0270c703af37563de98fc4a7af6f5905e55ab929c457810c862911e4f14b080e98e51715ff2fde1d006d3e103bb19e0fe3ae90970fd91188fb4938e5014778d2b0670df360c7e0402742b6407372680054ae77173c5d2f9be177f8793d89c49332ba011aacd2eba5d4e560bf86d803f2782f2b873b8c33b80f89609022420d9ee5fa659bac0fbfeffc6b0d7ccfd25df9c304401ffefbbefbfee77feeb6f0adddf6c9553e33e56911058b9c61c5681a98b16ae95ebe719301a69b7f69e5b6d38dcf25975f0f6450f7a0885720b6e3962566a1df867502e1937c03bd82523ea4bdde08fd604849219c90c1af0b42b7823118343aca98e6cb83172b08d6a4f07fb89c4d0866619225f19f5254f2aa11766197a20cf8490905eb1b0df3d153d6c70229a72140554ba69942598c5cb176919ac2f17fc2f0b857648fb5b0700baae7b3659bf16ff2addcb8829c08fa6b46b62fff077ab3df1146831e64f346abbcd9154fc90ab2fe601c3e69cb6cf290181aa00d3423e8dfb15f3175dc3a705ed70399ea9858e619fee29d02fed0f914a1c12e1e95d2f3dd267f94b69f469f28f890847887126d5119250b99a891db066c11fc11badc03738f44563c2b1bc8c92e8a79a8e769599930b2a0b1b11901f3a54838fcb2a415a4044d607ea839dc61a1dbfb2f88d105aaf06ed3661d272e3d7b8b7d1c7c1dca75e0a8e2e2123421db3538c2d1808f51c881a06dd929bd5d24a146de55e0e633d05a9b83f027a049c1df775e873125c13538c877484e1809673d0d7177ae8e31917ee088b4e63bffeca0195042c57c5f93e364105c94802e2d286b1f0846577605ccb4317c73c2acbabc868aeceee5046f00622f2a6d4ec18d2716f4126c38c7a9d421de51d94e49a57b33b247ad95cbe46795c2ce03b2095211133bc5c23eda845a4a02ba8b77c076cfec7bfc968aede68c466dd428fe4bd5757ca8ea18e7a010432a7591b760a39aaf7bd7e693b7588d6fbe9dd5e558c38eb2279965dc198c872e14329eceae89ad3228dde2ba9a3c8e250e9352a2a06a320eba6b9960aa55d11f0839d6b37e0b3aed78a1c058a037db059ce61a2a5785042495f60c2209ad71d829e23a96102e47dcf042511544269584eb5c7e903025a3328d50e20c26ec8abb322c8455b1828a806113d499c7d6b2bf2422e3438cd19bb83952eb8523a4242561ad1481e1e88c7c05d9b737d5a5418299303689a5047f795a442538ddc51a49f734bfec9034ac8dc22e463aebd0295da675286e7c6e56e41fbf65f1ed4ffb72248a8ceb2e2bb17d4fc886d2ba8d3ae96b2adf0c602f567ee5bc70592942666a18d69e5e042db3ac0c01d8159853ebb68de934e9f38c8711f3b182dfd46751d22e46989dabe6d0180d559a05f785cbdcf967a243832d1a11866a9a8a21139fbde7a38942ef63bf78f058b3d8763492011c37e82d9e48fe4957d4db99dce22069031f291a4012ebdb86126e222e0371aac59f017f8a022317d435066670a1ace1fc63b32f0770ec73a309581e0450bbf47180ce382e25a950a3d6244066263105aaed6c1cd05aeab28841aacd4dd98beaa01cda858c9cb96228453b9dcbd1365357d95408c7950413ec92308c0417727815dfadc00bc752b505545cc7fed26b787e7583d25e47d0ea72a62953c0808e8d6a7e708d97320bfd718ff41f9abd0c84f3981c6a7ff13809c2e9e1e999f2ddf3d317a33103b27b5737cfe6f9b161f17da9c48a3f6495a2ba2b13644b414aa801800756636d487aed45175674b11b3d77d3534e83940d895e167782935a8d218b7e6a00e510df78240daa4c52b5db383a841f0228e326d043784c3806fd2079e7d1459d2310bdec7f5737364b31d7387d45cb0233771a0c6e0fbb5cd96e943aed687e2e8f9c865182bc4a5de80a61d99d284516358d9c4c0ce650b6f827493a923edbb968bcfb8b8698f5879755d160a3045e0d281f4fb240b6c625ac27768484d77e9564ec44918349a7ffc34689cdf13170777a95f45b522ff2743e65403f1a8277a4c91aed1cf8e88cc7117ad92e81632534282498cd49806caff4c1def6d106fc90985b8264612e21549d7acc2c199752a2b3d1345084b1141705cf77f27fd249a51ae7cc3a43c2cc9ca14614f094b31b6a1ddb41ec1273d2160125a3639152d3c77fe11b5f340cf80c82fdcca7446b7988fdbaec8e3e2320c665612a715f9702c3deab3b8844e5de6c645a2014eb98acea88aa07fa56ac79a3bc2bd1ab2fb6b004de9c95725838a4ec819dff9c91bfe0398e8f152064f227625028cf75619cb1127231393f2e5c417bcc795a652ccb2014b56925d02d5ac20ed6611d3cf4b725cb4e09d8017e1257c9c50e1fe979e31318b5a599a7a3045935219bc49126ffa7529302b1ada9ce0db932f2d2ba6898a39ca42adde4afcd7855e86e88008876f44ad73083c95db59a130d2388e88a43f9e8443434a7b73254a73e8deacdc42de3c60e3557591f409824a66d8e04f946ae83f237ccca427193fb0842624b028ec42ab012debcacefd472703f301e6c4d555dff2d008d3078c99c5333d70a9d1427fd59520ef57efe05ac67094b19acb22856b26d9028089e4ec6112f05a5abf2ed2cece29e40322dba1081bc46efd2b261ed618442a95e188137ac35018a87f843e88646fb056148d2f7cba48cd655758246445ded428d8cab45e3b796d1dec3a63da25b5082649855de7f14d4128f4ca446fd31033eb511a34413194e0de7698e8d34cc9de44fc791aeaff84209932c7605a2b59dd292212fc65ba296ef8c5a2c40cbcc19bd1fd6eb48f376a9a8d25c2c783d8b9264d0e6a2c2de222e60b99c3d753ee1e16c217da304c9c050d5ecbebcc79f27e174eddbd0c533b80c60ac43af1cf23e022a82994f4b1f58854499a2aad0abc1138f55566118938e5e8c70222873dc581abf8e2c6edbc24c3a85377e8386e5d252230bd713fc037919e51e36897a63cffc82a105498f74b7667326e5e9046d42531c149a1cc140e82bdacb8a303f2ddf0a24b38a02924da0956fa8f92bce947998684c3cb0b769440fee21bff60bf83ce8f9870bd1c1903e0555c812adc7898709f5648c113cd30080bd5b22e9368739311f8f5d9ef51c90d9f23dfec7b3f0c185ade008abc18fe4d4bfbc43ee794b239ea83c0bd80b79e8b534ddbe752bffe9c10b0fcf1b90d164e23f267ab70ae73ef4872e873eff61cba9a05ae122aa18a9983aecaade3d7bed7fcfdcf0f67fd0d62b05592620473dc4b93066bd2148f1714f136106d62eeb20ac547a2bb3f495bb9b412678825f975622213bc41266dc6c1ed4f646b3233df85514a0f26c9855ea6dca425c37efc8a2392964498ee57e595501b7a02532e701b597ab9d6d08860bc99ec74f2bad5f45928f53510d41c928f01f7e660dd65525a830a81b643139b28253a8a2b50a2e6ac3bd381e2b30a31a28b7c5b30c974d81f6b0c0bfca2fbec67b218e559fa3f62bf017fe8f54d1e349cd0b64600d15355ccd2a8bd8f2deb13f1f0855c878baf91a81d089033def0a858b36c3405ab2cfa4d51aadf5efe327732669a857e73842b0580dae87271b066eaf826d87cc87a3ac45d59fc286a23a16cc26357e8022dcf4c463ae5acbb586dbe769a0402f0e1ad37c79d7ea6872a43bdfc5d16c9073cbf0c34b619e2a98bcaedaa174f3aaf42950cc55348f1802d8639f927864003c2c292fe21c15a5431829de7a30ae2340f0c7429492ae6c3b29cbdf5225624e3059efb252628a8878c4c500b3db79cd56a2004ab14f6356f53d54cca7e2272451e678e86f5d048c63367459c9d4d4da95d9bc2d621504468cd0966140ccc2b754ef26c517fa3ba0296146ec89e442e024c0caa06838c0122f9bb5efc167c17953fb44e3ca515eb66c642373500be5541f069451f935edbea3a7e931fc29385b3e422e8a1c4335d21365bb680ac6b45fdca84e38a9b6daddb6a8f9c7a9914c541fd1893b7500eb3638463aca26f53fde22cd816c4df9f3b466890c9206f610b256b78c18cbdb6d4e3ee68a997bcc5b9db802a45bdfdf33e0fdebc2584712fb0b393feee1f854520433c703c58036657e63d5bc669067b1e17a7f631d05828656a7c0607979e2f1633164e0ea59180f9640f1dae497e7ccdf4d01bae2b54344839544cc9ad08361def01c85aba7d6aa46fa58267e2755bdba1da3ad4cc9aafb7cb8cc4c8ca2066e2012c5483f8f115f8f8b3f1122591580e08202dbc60194b1ffc7ae3e137699a21ee64bf49abf9042ec55b458ae5e81af35d4154a11e0503cf51f591c3e10bc3d64ebddd28a04b68f3d354c396f5a41f19261f07816db8bf53e807dcf8bad63eb6ea086b8b946e56f585f9d7176a46e1df1c8ed2319a4cc786f3742a37383d7d25517226baa72d53a0187aaef601dd9e69f3a09c30102eec309ca7f8a0913488b213aae25fb8119f3086c39dd515bfbd2ff4bc1f99c674f1d538f58ddb78c9786c376742651d1437d65441d7d79e6d3d5feb07b5e0cd4b77deb1fad56bf9dca9a3700623b89f3d954354a9ecae2a4efd04bb0dbe5796b16d3dc3ff38e022ec7203e489181c96a9c3afe567d11f472cf8be12b133687c8b87dc62de729c769b9d9d9e7c04af6bb2bf8360508ec17aa7b1836374afa28196451c53c82826c1c96855e049971a069160d4fd45836f56dbfeef55d6aea8c21bc79a2e3ca4581f61b7ea7c5e8734febac42ee75d47605d262a234d47ab7f583eefaeced26c842aa39790fabaf6da02dee60b14e3c5f741d26aeb7a893d45bc49a312d230260df486559b071f60d2f21ae980800f46a3f51434a34fb93c4f23d187ecd1ef59b6092050f019c87710194d54bf92bed817d8cb29abc593f0a4904f591d8ff84f7e723efdc0e098fb585b42bb9a2ed0e65754218a836635dcaf050c51dd81fe725e400e914d6e7a5dd266ee0a7aae1e5057707a65a0ea2f5dc632aaebb6284a65efda69f491adb15ff3776ba0df67cca6d2687cc3c5403f3c2300d5d0639416223d72817d45a148b487ec91546298b066a92a7ee0048b6e10d7878480a013d21b326f8129c5f829fc97a5c95e4c2acafb64a07186da8412db682552f90b8a08f662445b7282a85c82bc2ac2de42a62e699607514eea8abd5ebcebe657ffefb3c8c344ec8660a160de4363a3a340a84b2a478e81d067ffa5ebc1ac29d31a4fbae55feeb99c5a999a9c59bfb21708a5f7d5664c8f1d84c0743095d8bbc734638cc7ff291e991f77e1ef3e6fa2706fb6f624401ae396c5425fc00322f0680a6203ca4bc2c051fbb58098cbc0cd9dc7a753735ad9feeaf8fcd8dd88133d1a1ed8c7a0b5301337a172b683c31022c3b9e4214e3f9973b173aa578d37b6ca0a92ebc714b933f188c6e751a8c56813591e7b0afb188bd06b67dfb6b9bd6df79cc0ac1ef7ae852b2b2b981915d604a5b6564e33028730d39b45ff53262a5870bfe342afd90ae941fe5bd55732aa149aad608420b8667bdc3c0c1231c2aac90777673bd4b4433480e8e15f459df1686d7b8486d7ee3ca01edd6438d319a382e61e15d8b75808e1d91293f108037c80efba5835a2650c572605dc2ae99a36f0b2fdf8ee7d0af0c74c7539e115baececa85688d79d0e403a8dd19d1eb13b755e49a2ef23d614f16415f11704c3cc26c2a0da032f721ffa92bc41a27d53773394d61e729ccc053eb460e33be83588efc271caf3944a23fb6c9401c29264815d935cd6d6bab68b553229b2026b5681b525b35285458880da247ea3ab993638b16fa60d2f8c3bfa220295aa8332d225dc17be341ea2eb479eb027ef4273c5daa5958b3084195a348c6cc6d5a0ed0b8ae63725682d69da23798509c544401d33e4baabf19aca88e2db22431d139d81567e9c3e10215417d52447fc3e8c21b87ffd7bc87a8068df8a74eae6e2cee15190f29cf102065a6a3a7b8a0b3c3e52644bbc80a87aac3d6b74ae0142c020e446018d999e1b45a099c9ac1b991ee10736c534f8dc001c689da3eb8a48d547d0ebc164308ff9ffae32e5a311cb26c3089761b909c12705154eb96e067a11dbfb9c9432f279f900479711527944838bade3ce6ef863f83307d42129c306d77edca45e309b780604df46122c24f18e3b72d77f2284fc96c108a225c5b5471353583a2f3477162f400bd552f0d385666ccbe28e46010e1634c537c9948d06bd505832e59eba024922f12bff050d575a0c943c275334290e22a34a96640b2f0178523b7a063005a8f4012a7c171d2c2efcaab0eb08b9f3ec52df25b7e658980fc4454d72ce19591b5e5f7c247b8a49e713290300ae092ccbf7c02de806617f5a51dd03b158a71f807d4561800c350c0ae721456386c5f9094bfc300e02425a7cec4fa07f72467eac3a2fe9f9815d9d10be779ed8f12068ce16657d3c38044afeeb38f2ef73d75741cd67e72e2f82fe88af0c7df3d245b256ecb546ea55d5ebad25a8de82db512b6db2564fca62add90369bd1f0a11606542ef56d59d98adf80eec5385533aad489c6f048de13ae41925d87e649252630c8b8e9c3ab883ff7167eb1f807009197de576526c4ceb6672492a6fb0f186281cf410e833f99ece8346197282a7b4c489df8fb1db2099bddad97bf4555beccce540ea482d4062d50624fb88260d7d9222b4b1a0dd9e5a48b2121c0c409967089cfcf238ec7ce497a4201248d06a683b577cc2c4cc350d4bdc99f940b00f4ab3b1b5229d45057fdd22693eed144a24c31d19a6c1f4799d76801e5e15ea6d43085b63df80dfb910044b398bd16418c2184ffb687fddf15e9825adcf3ba0375fa961a0d3da4db187188fc4fba61a84f2df831118be9cca8e2aff98154a2217d2729b9c42cedb4ff83468e5b5d7f2f3226843df7c188ca38b3e5e35d9d57276d4ea1cdc5f17a2d4cd3d1d8e9fcf671203eb0969bcda4d30cf29e57f58d70c6fe8eaa9ac57bf687db1e4b9c1ff1ec3c68c10ff720c418883891f068326571cc435c5f639819d67bd6f68003912aefc229a3f94595a359475ece02debfe207d369f7996a5fd8371a9d95b2d686ffb76227c4fb336278a3e4756806f0305f4d5c180bdf84487a32b5fdf5b285ffc43c0668be071a82d78843e5d3b182fd6f62fa979fc7745ea4f1e80169f68173e11afdd9df42c579f70806bdbe6b62b3d742bec38b1e77c88737ec15fee69927ccb8c4c80f89197a5f9ddfa1d08005a8d7bc3d44335a97a3f437db5c22d9121ff531f4ccfc69169653b6e18fcadf172d3aa64ebd2d68d9ae75e8f5fbda1a8f91ebd1db75a7c97531ecb51d761050ef40c8b0891b8f7f67d467a4d013390822c411d185318b1ee3dc790ee0b5fdb00c2424c7f39e08bcc9d80d505501f5c31f8a16ebdbf298e43ea0159ddd40d3843880a851d7061ac1c55813bf8336342300d83632c3a5dd323e5352eaf18cd376d76ed1ef230721bbcd79d623e17e0db9e9c16dc3b6f90b6db861b9a124405b742d134c2caf029676dc74613dea6ae0a2f6ed6c53f35056ef59e2b760ad0c274c1ae115958994b8e6a1bc1f8a390912908a4269fc56358b67a476730491f1e891c2eb78c1a7fa214c52ff36a711d8f7611aa58aff23f77f10181bfd0dd5993e96715438a8c5d2608a58ab9f06c97f3ad4eac723eaff48aa5f263920faedcd8c8581a84d86e159e2a35f9e412ddcd32e10f6a4359949c94ca811cdf1569557a04ca1d7f708efba72e792f820bdab5d8e4c6e036e434e2a70f1cba6ef7c598485337ee70d31eb433f50e19ccd4e927f8fcec010d260c3c51622c8125336a1e90dac6ac20d1c75278ad33675bdd19581b20b2751150a936da92299095640d3b4bcc48be70e1dee0971cab7e21d52a6ca4fadc54540944e2a28110f58f5671b221da64f5c4cf55bae83ea22a75d4728cc5cfe43e1a901a96f3bf6ed58ea7f71194b7027b39166c1350d9feba35550086f8ff5b8421fb4a382cada9c51cc5eeb6617fda2d14d341cd4219e9efaa9dab18ee83200720a563b996f02b351f54c504895c3c984ae336196a7c1418fee4fc4c578e3975fdc9d241340fc1000c53b56ff646621855bac161f382a8f2d70401224cd0abc2b20f86f78a36aac0077dbcca56da8f964143cd993e960dc888430177e923aa22a07371a5b4d41afba9502178a81396fdf188b0e8737537242981f6ce404c88096fa3922b918ad41346f7798b41460ce465dabd679cbf1e83a81628d782efa625f18f2208ce230bf6385696463a0f118072094e047776425b93b3fb60399afbd8abd1a416d8e8095b33f265b2a0839f07ee8a07160682efc1fbe329e7f58903edf0bd94c47ecd561fa7f27c01ea352a3ed89328d4d1154043287b67d9e5c0a3c00a417aeb8dca4ed259c6f81307207b568c17a7507cd85f4e9e033c254ff78742cb45f4d93fd05752a96783d13e70170f0c5fec17f0282abed048e9b2f263d37a1ffd36ce43ff504bc30b6eb772f39d1ed777e58831cfebac3400bb54389ede12972f314fe7dd4afa3bcab165a3ca82af9e2a8502dd22bb13ec69e6d42f95801493937a0d6b7b2a328c481ee4bfa2e1d0d8ec349b7306d4114825be4417a8fb0c074140848e1eb114f40a6d5aaa9e8c9657c25f345e957959ef2ccb4788d52ee9370435a6de7d088208bb07665f8abb87c024962f07f7cdc8f09f683f6768522dbc55214c21521aba38cf3f86e2fc4366e6a22634d06844588bf0bfc256f60cb155848b6eaafc4351f5d9c06892cc7a3480e6738122bebcc05c4f697fd0221a529782cc4cac1042c63ce46c3f2a32f7f40b20f110d100af0a1e7e75723d2aec634197954324b305c430aaa035240a7d17addcfb160720e152d213fda5573e9979cca478aafdce845fb0afa0f17c64943805c0f24dc0c4a85450c17c2521f933edaba3f2d698348bf7b8553189e03e2e41a23ce7c8598cb93cb08da0d80a3f9023765750b11a56912f6da1432274e752242fed4e0f16a68023829a15e09c5c06a31e2fb319b5af48d43f0c2cc0b56605e4e62d9f83f469a542232ed4fc8bd6fdce7dd1d7215861cf65c37b82145a331c2eb69d55a050514799b9dc93c9db6cd6b0bfbba944debd70cd6a88ede76e8b07d44c1525a8e92d4263c3308aa26809ec43e39f03db48d7dbbca0091688cb2e23f0e5111cd24d054e07b0c53451106f1e2f0be80ac58ad9b3613935e2cea04e9e255733caad26e7983ddf896658274650056140e8ab9a871159a525142fdc38cada39947b5bf7b26363cce5978cd20401bd917a387738a030f70992fdff5cd80680a74d72fa4aa18fd06afe9972ad1430cb88c6ba383fbd52dfcc7c3fcb9a327ed2b7c2ad907c56f945160b6ed0f2374625c3a5d2cad8779c688620ed286fb8a36161a67205c18937cae729f33b8b160055a28056d7abe1dc98a44681530f0daba36f1195f84c4597a8c53634dd9a9702c0e137597f12fdbf18ff37c9950e401079a65a7143840257b5830c4f280d02134ef46f8f2f8d2c305c856a20378304027fa9d4e022f60787e88003b5edcb83d101a97d633c11124f3e42f3c50643f8c1ec36888189c4fe5809edc2072e3d651964363e61bcec0d4f56fc788064277e3807c85a4ba4051064dd7711064d4da668896adc978fe2d25f5e4964761b3ea9a8a882f749fc7d6afb8ef2584e9a7bdc9e8884c54aae66f23d25eb043c15a7f60c5a464a82cd5332cc5089a9f0eb6dd1e9bd33457c1757be9715d185a98e11c0b4ee834bd42d7ef49c88069e7e4311efe5e6757921a43a7bb798e21ef0ca6addd7732d82a2e3ff8eed5a34eebd89ce4b1872879c04b2a0185ab8380f111cfdc507c26cd95c931f689c5d97735e68eef24cfdfefc8f2670dab18a22e784441161244f4a42ddff967a6e2012b65aea2f9561b3f1c74ae3b2ab655332db299c2c279aedb1a2860afdd1faf25f930786eb85cc338859d1a379545cf033bc28e1ef61c22749aef2b430d6d3377a56b9bfd2a439d0138c1110fa70bdc20eb427c3f55a553563585d5a2f348bcef6e6d43aca0ee749e345936889f697c802b21cbd3c279752c334d5c6e2d7edf5575ffe4d689384f3b91cdbfd22f6185ace42b4acaed1aca071125f66026988a89f7b3139686ec3a51d477f01cbd3fd2c1175a38aa5f52db08b9221bf0110458737538deaf73e24d5b0f7ea784cd04f93f92b897a237b4b7d039dd97cc7aba385fda8ee9fc861920fd415d564eee8877e73ce941bf029cb6eb1d2c682aafbd7e47cb26168e5d9ead7e30b7382337ac1095a9e6febd3ab135dbb923230960ffc08a5ac2c1f533c2527b3e52633717414757d008d4a324f3a8290c8a41af70fb83440d8381c9c772d66af946eada4a290a8bf6a227068365076a85886f7edf1777246709fdcf723117a37f2e93bbb64bd39809fb433e1c46b67fe06d2f712df249c570b1b525483dbcf69473cd43ce9b37ee26837f2c3cfbc248913f72b5729919b47224512e9331c83f854917fdcaed3c0d3e2689769d36d87685d74403171aa5e311873de79d5a9913e73faf7cef12dbd27e4161e458e1612968b2dcca9f31f8dbb3bb924cf980c3097f2dd073fa6d56cfc8bd7155138d9d13e36502792486308881608d85af2e5670dcc222b2ae5acf40ebe6f1e8f1575a9050f1cd8677ea9ad597f6e46988a055632a34e3fb01884bc2b89ea1ccb263a8b50170003da5013fdc92780262ca5b8132d1adf188b8ff3ab176bf5098a6b3af945b1b8292b3cc7a1c26c3d7172d1b00d5177966836a64d7da15474f783d40e4be55cab5b16ad009f72e6ed2990a3504d9a02951301bb0ff0e644d171c962af8d29d359a4366129efeb0caf5c5b3c1070d8c6ccb9f51aadb70c3a1083899d54846362423f46ffd6d128f68b188d7e450fa01ab22d6e31e63618e152dd3dc2ac817757a1a8130d883bbb3ae5c509802dd9916dd5c08b35d5c6b54f0bce85d0c2e186b70f04a7341027fea7ac2606a4528d22c30c10e152ede9e954a5a124dac4c863187d1883528ba91de1e1375903f1b3905b126f36d1d8803a2087a4c25fadfd5e2cbc8c477be660e87d88d8fd4f069e8c0b1d5043e8a7aeeec8d6f516891a9a7c16c6db3d68cb3a587a8430cf28341838d2d30e8e62eed1da01fd0490d388b0391b354e38a62787b26384a5308ef2603890e6844effc5123a28e6c9c7a31a0b25a68ea3d49cdfc060f69694bb4d3decc0f30dffe3a5a25c30e0ab4103d38cbf54c0af63d089930a4638ebbb6ee270b08b1d04562853a082063d87607c285d0632df5c1292a420ef8df38a55fa5a3d7ff3fbf2270d3b52c0fa1c63599b9e056b39923a41d7a173e54491385f60d3d3381e7f5be0efa6c3d101a1abe9c3ccc0af6cdf860e82d2eabadbbb5844f66649271b4060ec22790d6ba83a47c5d9e3fda81a21b9f3bc57faac127ae1743b7e13da11ad51ab846256277f20e85de1f42725502b43e57d437037228bc247bc76983f2e04f584f8cb6dba2fe7f739f4bcbe61880443050b7efab58dd7b769318a76a4b9fadd4dda3a6757d621d36fb3e6d085692e07dfb73beef0e79395fac3157128e1ad815ca1380e36b1adf56585d252456e5f28e27da00805d34189d5d2013a2eb2be84bfa29103b809dc698416588e17bdb0a7deecd5024ed42da60243b9db26c3243234a64f18be3ce7ea793c1cc77616fb0535e6ee6bce6bb17d9bf65ce5ba931760921e4abe65572b38d5009ea31a90afb1d36e93042d3acb77936c93c54b0d02e77686875f708fc8e3515c9133a9b9ea9f30515431f5f00f94456f23af36a81b58373b74e6f5dfb1edaa569806ac63e3c99446a69455d3904ebdde01ae3a515f7831ab23832f8ae1c5299fb4fc1c39ffaa66a400d5c449872690eaa83140f4bb12a73ab34e6f75bff08ad1be65a8001a7dee710000fed11aeca16e5974f3e704a05a8ac7ca699dbd440967b6e69235c8faf804a88206d93285c236076c9ed1cd47407a4d227ab14d4de26f56e5720a29f62d8b366421a4b69dc78d54a2e47694e6d437857ce48804d0bd02e2f5e2743ce2d0d487b69b21d0c161717e57f37825870fb98728e2817a9b580c44971c393c0265298197a26a8e980c4d7529321a14c7dc65726135281ebceadb0bebf9f2c663c5055f9825bb739127d58de84ca47a422eeb8532dea4be15751866729b73db5d4ecebc89e7e60e0432f32cc4b5203488131818c2cfbb7e5abf7466c7b69a681a527673275ddfc36763063dc463c8f679ecd0ed014ecad9d5d9b165cfb258abf9a816865bb51e2a1cba02aaeb63d6cee6fbceb8bba9261483ad6e1da55e7ab1b5c5c833d1a85a01f2f65172df7105783cc2b58e2cb05465ad227584f35d9b3869b0b04fce7b3332effcca10db7d915281da10ba8e858ecf0bbec094426eb650e6d58774a64a4d9b8c4dae9176a12ba162422b377146f6f551a69934074e4dae32f45a083a10b7a123ed2a879579bb2634a93ec6dace71efcb52e377b12bbad3d8c903a8eb29e5356a8707ac7726adbf5c451e4c13349261217bf45c4cf13a488d5c7e3116f9523bb21519d18f9cc4d15de292f399915b6027ab3febaa73d83bda1949228e8e3dcea4328365b83e406c2ccb2ae9efeda852e8085c90cd3e458828a9fb18df5c0abb1a7fab7400f3c2a104a88ec99d1f11be1fc9de3e98a2041f705feac96e2a01b26b9088d716529d24f27dd64a4df21f679b3a024121ce0c5a7c8528d71c8f9ba5f2350a03a8ae916aa15871e51e89beb82aa364d78a51b3e20f0691f147fc0889ee4fd00ccf1740411b7297be17a1ca91626e762d027c36e8b588ded55f1fe994776f22c4a651f5149337e20c2646b8fb7dd3b5c4c13ac4aff5407c3a5eb025f14815b1b1d4406c19e335d03bfacb54fb4981a3c18aad190d4b7a11f482f1c664c794a5b437f9e498d733a756070a55257c22c003a2d1da8b574cb5c0d0c9cc61d1f489a05a3ad393a2d2a920ef0669b6cb2eb9b66f8ca48c08d3fc5381cd42d8e35b97800c45c60b909cdb0d7112792d60ca58e1e067020c66c259cd5a0a50089a0144e36bc54051ab444fe86acd49e439608966c8a67cf8ef88d681d3c424e5e2aa412f298f066bd2f1489da4b6f0a7daeaffc28510e588171e44f4b18e475a415154eb8fcf540b1ffabdec4e4356104e9158a6995e3e3e4a23e95b3ba8918dd7d7f45d1d0286c7dc090e65c98d7a5683d4d38dadbbee8aa02a1696d91e2114d647c312bff7e8d14b4ae34c528397658a8b8136e1d62618b4ba8bae011d056b751e3222d43affaa9cce8557c842d8a5256e37176844c6ba6abd1627440a92ae664bf73e3a5fbe0f80472c4475a34a6b80d537ac24f9b172d6805b6c55f099cbbcfcd608f47a95257c7345fb45c29330580de58741678e540b4d603d5e43afcac53d669a59651d88372605d4fe10d0f3299ec98c7e4a7ed9b6f8d79fea136d40627468d509d94787cf6b3b862a0fa60ef109ca423b1090c05a4847b3a4471de7301e7a5224dc0bcf3f4d49d605d1311a5eea6c6353c01416e44d61c0b92850d4a978fce6879422c5316f6b95e3100dd6d0b4f8a0c730d70b9d08ca0a7d404802646ac58ba43ea2d45f47a5f7b3228ebfbcff8bb0676234f3e7be4fb3fa716d6d56dd00dfe7c4211b9b37d6d0a428ba5c5b12424400acb1cb9537850c8c0aa8e4d79f6d92f0051e2f84ae7113448f114e80fcfc1b6d5d7c8cfd972ba29c2d5f2b325298b903124b23ea8ce00113ce3e11a105cb3834bd02f6adfa388dce8193152a4decf4fc3a7545fb004fec196710811cbf818712ebb1fa247805816b766175103b06341a42967b8d639670a615d221f2bb5a941a2216384abe3ea5e927bfdd0ed291740244704c4f55e30c7680973c7707cca314e4caa503d14d29f42f4fe89c846a031fd027fd77c096f7c331ad80bc3f4bf18828a8ae9b0d48d9ae8e2a57bc5017d909e60355456f407fada3c72382556f924d0e907eb230e23cba40a1bd51bd13a61c8a77590cbbcae72bf5f8f46fbc29e57e82fdde1d8a9cbc4bb77c18b6288abeebe0b450bbfd4cd755f5d5ddb5d4e430d4fe35267f03442bcb2d81a8bf51a55c0447db6b2534c8785ae0b13d56bf2dfe34b51c87a57c2dc0ef81cc309b24ecf5aa1d19757a51b515a7006a3e7d6a4e39c81fd99f3ea0770a9ba9e3049d1764b15dc3a6c6050c8dbaea907f2aa29b4b4272003d869a37a4a2ecd1fe809301c8ab07eacfd19582bbcedb4c812a6b1870c09d429c4f0aa3fc5c989f7eb53b1a825c1fbc03c7b3cec3f54ec22556fe4c098fc85be51f9d00774b2a686f97baad2acbc28c310d7c8c6b444d598aaf112c47dd0de4d53f54640c54e888878bda6581b42ab41d23783285db9a9d7554b6a49a771ada69d21b751488020151af69a85adc1cbe8d55d91f3a160a4612edf5bbe35eb0ab5769d7bdbd6554cc54097c2243e1d7bef80406000fdb72b83fae813b63a7afb5d31891f249d4f8d7bc0c399bd9158462f14e969274b72e3d3bb5a81a2bf04cbadf65f7b78c9e7f170a8bb5a121aac5ac933d21190e86934d72a5308da5c777888f66e2f6d80058b9b06b5b88a5887842a1af38068992e9df3947f7f69f54381ce9c6e117a3dc2c34646a9adad6a92281659f5e8009165f437da5455b644382f9e050792f29d5abdb5913a0a51d6e7de46e807a1bad6dfebcda377fdb2c9fc5769c56032c546ead6d5f1eff1637637ff41f0071ff0749d7e5b7bf8136c8f48dc583a69e5f303915f423a32b2272d97b9cde82af27bd1afe58757b86f7e6f6e6a6744d66e5ced1ac0f849666c69d993af3e345f86a47e5c6a900919c62565f11f5a66e0eae7c1455c6de5ab1deb2d08d43284dfa11251cfb72b83997c2dd5ea5172e0deb67b09bc03bb844128a8ea2fd3fc6dc9123633424b1da60e9bcdeeca464e28fe6317a54c71b2bcf0e62bb488ef3d6394261dc79e282d3c1186ef70877d2e4b526c42dd075764389b8ac2d21fd9414e307eee6d18c1d09651f3f44ae1fe0734c4d46c47dc6fb02d890d523427818f26da38f5a0ef4a23d505eb49c8694015aa366c4332bea985c07157a2ef46b33923b776d45b85b92b650fb11b1b2b38401fdedd3316d11d2a1776af40e8fec02b2ed4721a4c58c488a6b5a77fa9a7a11b00a4e206aa969a45291eb4d89384126508a1f6da7280ec05b0a2588a1b22a8329c0f364fe2f26341f0aa23294b080f80acda76d03b95f875c5f501db14935647f3783c025fcff6f810f66e7532860c1ecc7c382f6821f7ae373f529265c615a73817f3983fd8d3acbd83c561d86e685456bb16cf91872ed5acde3c24704786f9ad9ec78a77e5e8f00cd1e01276971b4bd06e4dfd3773dc3bc8edcd06c9f91f08bd1e2e0d7c0e4a2452aad753f2b569515bc595814c4e89a01b7690db1d3aa0336dfaa437650d60981b5bc6378581f1e3cdf2a41d7c511cc1c9ff6bb1260fbbd21991fc9d69840aa0e938746ca937d78339b8d0c4acf52641538cb67b5e64ebf9bbc7316173c7bda23c1fb42a48459bd5ff012fb1877706861686408014f6e2e1a47b5199ae52303cb43517be13be590252e9aafe206f4de27c319b22bb7726d183e42719a8c6331bc175e49dbe2ee556a272736d5fbcfcce6d82242f62195d35edc8f969d55db5d187fbd75a090948431f9f988e04a77da77f00a20c7fc5b691131ca416963639a39e4884d534168f403813dc4d130b182837b70758c470417bbcd7e53931fe2c9db0a94709f56337f850163998b1c009aab072749d3d704b2cd45c2597952712e3ca2e6023be7d559c1326e209e66158b26fd5b17fd803ab0efc9c5263dc490e76fb266b6aec406295ad5d9c67fe46861c3c42d009d26ad40669a05c854ce5225b29c6a8bb6d7577d568388943368e5b4c1a5b6e4fb34e86a41f7413336830a1199abbd1b9eb3384a0cc0baccc7e687285dc6725b9812099ad6cc5a2c363f1bc3b53e20621d0c031a665b4c1f7302808dca099c6cfc9bfc214a7beb3db52cb5af90264552c7f5d71cc2a575d2843c370351bb36722beba0d0209522cc7ba7a3540b22d379723487107d908f02410cd54f5c7866f0a2dfb53a5654972cfc4d0949a5a01e341c21bd89d894b46007a8507b7867f0920d5b9e92e9068632641132916d3e6681d89185f60d52423d565172b7235f7bcd4761dd381b6615d8fe5576c12979c97ac1d182251f7bd1ebbb0f65f1e116eef3819ad8fbfe8928d908f1d454c22da65dde617fe78f8d43d0416bcc4899f8e123e2639491674069db6d506a36a7d1cd3f68e9bcb26f60f10ff45afb044b528a2dfd48c6e07b2e1fd536cdcc508446f6db71441f49d15ebaa02b0322bd79547e072980e2ce09aa3177f0e54ef1b40f5fc09d5545e87160bbdf14fc2a422d029840c8891adbbcee2119db61ffadb75b4112b2238afcf746b4c707aad7a6fdc4e659117994477b44bdb353d1ac87c74ac7d00332aacfb92952facc24af699f95e6e82be6952f92558edeca7bd2061cd19ee0d80f96d0cb042a915542b33fa4c54fadb340e933043b2f53fde69d06bdc0c9a3a22b5814c48780aab756702b184579b9564a3aac4ff63518ef6e7b40d44f18a5dbfab87d4025c885ccbe5b455c7d6fcd493b2b8884a9c3153afe8ce4a955ce0b39ef92410d323ac398b3fefd909e6110cbe789c17c40f59b2ab92fe3f221a66f18fb7e655ab5355cdb87eefd928cda092ee49636e164cc795f6f4737aa296bd9d11a582f6ee1a3fa3992cf18e94686b5087c198c779b0cfc9c02bcf9a2266f270a1e52e7185912b87719e56b956bff51cedb68a291fd987a1c1ff9894d179eb1dc2e4b6c252314aa555d17fc64969105c4d86014a6144aedff93f8451b61f7f273f4acc876d460c1fa9acb876a7b44ccfad0f3f77557429ac5f4c350f633caf21f5b283dfa46d481cffcb22a093b9c09ed37b822b23ffdfadd69bcec7cd9a323faf47bd41cd3f05f40f5d594fb9b29c98f3414dbab8cf2433666b63da66d8736cf5badb8f6660c197481bfecd49408e43077e139cb9e3a0fca1a744515ca392efc82be7b47b4838d5c5a9ffb9db762e0a1012c60569486b560431eaa05a800413fa397406c9f367b96027c43df6925c54d1f8458ed3ce800f5dca4cd6e2a4f2b5034c6f168d081146f0888618508a5c9166a2b3d01efa7481e684286a55778cba588a25d86a7e7291dd41d5f40389d9d52e7c057e37fd1f421b511323545426ec5b13239434484636b3e6e613df08d08bcdda1b30faca543b13ebbeb5b8501a09b5e42541b4a10303b44ab2664c504d70cc583583d96f5641c82aa2ccf9a553d0334836ed752265f2833ce15d00841e42ac23e5cd4a1a9b61c04bf5259ef6e822cd06909a2599550b2080c0e5638670b491eb8f95895cc2b0990ce2abc27e9d225173e933fb06bd9b4e21cce75049bd1e038ebb81f274c050ad5d31c3a8343715aece2baed44911aa6c659730f73e33598ddc5eb7a9a20a26a6afdd7b6a13991e76f2080279330031fd7019f97c7a68e7e8fb71bdf6de14745e4e2014b0cfd9e65bbfcd061f5548dc6d1ac2b7da19c1769efcb2166331c73334c47ae0f98df8698f729087348c8bbcb03e0989710b5967ab001f0a707210a268400034a3dc6551c16b6b4a643ef841764bf8a518d3f67b3f8ae89de429cee709775f63c0228b000b2f56e536a4cb3702223f3e195985c4278c71e7544d5d7cd1163db72ca1bc9340e434047b87ed368fcbc1e2eba9469f1c9f983a99edd1846ed0a1ed4c8f1ee572726be8fb5a98dedcb74900832c5bcfe7bb180dba710eb8da833e9536e0a9ff2e866681c968f6010b8935337e911228ac45b009790d14494e02d5fff1382219d326ab73e2f29c4dbb1b8bcdc1fc198a711a2e9349bf6a5f1a9b2ee39c0d537387fff76ae6d468edac1ad0c003475b001f6447f7ef471b39ea17029ce0bc8f2024ed69e93e3619c544196722bc2105ec52049ed8628e4cd391351ae182360e868bad0e646f7d683ca0281d99acd6c9917036cd3bb003687b96e3aae8acd690ea9a20f452b7b378a4646b0081a23115b012a0cd37dd2f7e4b8f2ed537c3032602cc3f7c2aa48eaa8327923d8be650262f97006cde440d0bb26e504ccc9aa2273bef832b01f0a3bf6e553ded1d82d84242db358a6ce1700aeb77124abf4837bf35876f6ed75c7520ea5a02707fe4850e67ebc6aa94789338157db721c0fbceeb11c620f14d93ca95b09088100237aafd4079b6aa8570163ca7fd4a389b033f814bdffe343a39a1d747707c409baef4ea142a3e22b62442566981edec6cd6bd75cb0651ac994c22e9933fe4ccc8be6bd024c28d836d235cfedc241dbdbc494f279c47ea3c09011cc75aaa548ca78bd47a9d9b6cbc4030aa654fa9b2a74f5a8bdfac8cea8831425ea29d412009ff01e9a61921d95597b81628d41fcca222be00933caf134cfb743fc5f89ac6d7a12a7fbd29b8fd8c7a099cba480ee185f419e3d63eec51b28420a4c6eedac6598e84c2e82ebd040baee2abea5920211ed82e3e669d94e5b84692eb28aa27275a403ca1b0d323b0e55fdede46e40797dedd4f4dc88b7ef02bc5ce0b1b0720c70633dee9e5fae76ccae79cc9f636ee7fcf00f263a4e14e64622297900c35493dd1b8fe05c205e966f37314ad7c0f2fd1b383fa66375444342621973c83c1dd8ab2606b38a831908e58f6cadfae4d46a62525adb977841d0614ea6bf283fc9db3c6034189c67dc3045da0ec50bebe4e19c173ee74bd8bf0450467ffcf2ef44d1962753b33ede9a9c9fdd1009b00d018c8b88fa5485bca081a600d96a993cb6889d973c0ba893a1928f90b2c39e681dc494085b148c242005f409013f73e5ee1865c41c61e1108f78cae004d9390fbf9b363d7ec52cf719ce3adf88201148041c267920054f753d3b89dc7c0e81eec4d428b0efc3b9d5dd7a756d64bf81d8f606259c76b3d3f6de4d8f9db932621ccae485a838eec9606410c04c2481e818cc71c83c465e00efce37b13eff7999942784bd13c3540c78e19653f5f46b90cd8d3acb7926546e54a9553325ea948289a83055e8bf3322291522840d5353102c09594855893d681a465661f395ea82228d7ba0281d1bcd210d9dba84e13a55a1c2adddff20d631c58f3a73c9d421e9b126a49ad80e299d3b628955df0d86a92874c4f1324ef3f4841830485237f6b7d41a0906f371d6e3f2322f49cb498a31573362c7058b86b12800250e88631b1eed9fd92650356f3f236df48cb15f664ac6643aac8ae3bba5864f19e14533d3f8d0062ef564accc487e13c215b4b313fd016c8ffb815e7fd92ef8043f61f52a124048b2ac3975e750b20dc14946cafbb969f4440fe8d9763c40aea1bae52ad081a2a492cfed0dc85b577badc5bffe5683fbac157f3720bdee78d047055cd90558be7da1f43ada64b1b8245a38edb966d7393b994f8d5ccda25ba75ff68f6f31ac4264c64c1e74adae033222b4c1752654b21881d4dac0cc624fdeb92168bc67a17a1504296bacde19d7d407f34e39c9cfe622602bb7bf026495c9c4332e30e736414f2bd5332e5f7d56feb365c3fe156a73b230a0e3ef23ae8cce792395a6ab13c9fc818c37a4a592180b89c08165d7e74182f35294f00132b11b53533e5f66e1190328c885214de7f92d0ee1971cd8c2527928917c14f3e14f7be83c364ebcfb1e8877242dbf7a1f80a13dc7fb919d001066b7bc4bdc92dfd84f6ed7eb1bcb80c9b9d6689a83b00709be16c2e4d4ec4992872b9b5be672b32b22af8f8023834d67d7d68a353c87e95689fc4aab1d80a593518f876f3c57b3047827e632808d8eb977e7a28f02d495021796e05de9f5f2a15c5c47dd37b48fafbd3c6c29c4cee4f79f0d5bd208d5ce546bda44331e315bea466957612473002d413854b19c72bdea0e407b46bca86ffdb3956b3be0a901ffc7ed6182ecb982a78f4936f6657a21c5f7d77e95c539f4363cae2c1e5670578cd371612b522b65c95a9cfb9be59e7c785e885be7a03a458921bfacdc93b830d8ac7ddc280640b5a8c7845a88369e7b7f8951b50f8797ea2f11991307747a71c1b162e49a3e30357a8f2188f676adba949feef57e64d9f7709e81157efca4cce566a442a299f45e4f640461035a957e855b409651550719b22515a2825b3981d4c674f44646e52d3f721fcc401bb815cba24c4ff5d0b711ef98c06a184c9e620aac389e13720411084e9075542ce26052641821cdd768f3cf2689fc5e04f5c1dafaff25fbb7fff69752a624654e084c0864085d70166041a7c0619e3e6ca88061304f1f363859b08122bbebe4c3c626bb7fe863b9030af9fe9d0393f2f461e382ae0297f2f46143029a057ed1851fd8bbc213d8c404e7814352f41370e8d644e01633f02ae0913c7de8e004b99c36caa383587e1a628a3b4a79d2c110271c2884c909593062082044d1840facb088c20f4e80029d1170c104b8beb8c0a5e9a25163061a3474ab7f3e4886ebad233ef1cc70849089c11433c0ad94a71c840b948001153c8080042878c00527e4fa61b74a724d22d7273de5248218c85aa67ce4400b208a8f1ce4e4008bec79fac8810e13e13ddddd6b8e4a1d8939e7f49c565b5d68bb102e44bb0be1427875215c88eaee42d8eb3bbcd697fa526d7da92ff6d697fa725f3e9ef7715c571a292933d4a8d1ee28ff3190248539519baf7577253eeaf5c76fb5b6ce797dceda5e9d73ce3965dc3dacf67e400ffcbed0046590ebfe280a827b61d3091239ee567dc7a08cc3028b53155eab0812b8d65a2b89add65aafb5f6acb5d65a2705b28f15072a280f90ccd92feaa9ba98f35edbe233ef1d9913f400755b9e28c0d36b5c35ff46838828d97b491e081a85605867b38c4321161185b0776979d24ea2eb3224403a4235cb4ed81d97eeee0efadc731089d0dd7d57e99c715d8433342716b7c6327fceb8bb5bf7d14c2ccf596badd57df4044cdd92bc681409754fb93b6abaa744a3ceefacd3fb3ef553759024d9ce0f4429b542b750e08d36e92a1a339088144192640f4932069f4bd0a1e3542d5db1732587143a603a6e3082352164369bcd66b30a6b420703b3eeee6e2d755beff5281cc67a38c3992a0cec52daeeee5e6bedea3318d8136eefd5519dd624aa8e9824606060606060dc6b113c1dde2e0a9821341a8d46a37d92d0c1fca07d3d1dcc123a68a04307a383d1c158a1a3095450b15305139690a3420949d04102cc1447c8314211a4c0214249d35a8511a6b6de13c62050821284800b120420c0602790bb7bbd9f0f6cc57b0822ece77e3e3018af3666ab6e4f302b465e6badd5bdefbd5e85cc66b3d96ce6b65687b13c567881f15a6badeed67eeee76377f6c56b3833f90bccadb9575b6badd5fdd65b671e7acf17982bd8fbf9c0bcba9be05298ebc0042f2f2f2f2f2fd5d65ba3e0b05c477f1ef57e5fddd597fb1942a3d16834da3581155e76d7bd7e4ce0e17bdffb7cae155e3eb40a01a683b5155ea8155ea6155efc0796520a8be2e37d9426e1038d509a04d08f1b143e9eb8f1c1c8094cbf07361e60faa31d60faa32630fd910da63fd201a63fca01a63fc201a63faa3949f989c90e108b5cbec01b982efad2aaa62ff4057b1e8d714147c706d424dbec18a3f2290b4fe51903495d3568342acf3fa958006db574b6e3dbf1d1be59057bbabd56eb5eadbd7576dbfb2ef8854421d18854328db4282169dced96eb9cce3979913d77b5ad6b5ca5a36bfec553d374ad6b238c163d68b411cb637b47cf50627c3b627cb4dc1f23c637fb6e1f90ef16ca64789fd54921f727b6ac633177f7102772cb81e98b2c21ce0803468825c4417981f4cd763daed2d163d2339b2a42747476764a1a56920af168977681418e7874ba540a154385777239ab4379352ad50a06186258519d9c1c121206ab0bbf59f3b48e0269b2ff466fd6ad4deb5ad7bad6b5ced6b48ee2bc08519cc80c061842dc8c19219610c7dddd6d98830380c82c8610e7e1783ade8eecc66675a70c82813158dd0cabfb444aa333afc6d34d159b7689ec6855bf8ecece4e78b2a3c8ece422c483d666843034bb4801ec490200ac948fc6c06462334dca5228a52f4dc204201480a5e20e3ae87ab8c00f4d6e0014c0007aacceea8a20815488470e288a124038a2c134acced610c7f3ed8802d3704364268213d9d12e50c8370b71df2cc47db310f7cd42dc3743813da8108bd83cddd3ba10870b71daf5edf86609f86636d0a01162a956065b3d1befc60362755667751e63755e4d12f7db416bd23a4988c5672009d590219421c4726508e14865fbd85da0f73f7da2d5b94a886877764893fd24a11a4eb21d6d4fca8b100f5207d96a570d1376d520405823fc767c33abfb66b9dfea429c10a70b713004a0b76dac607ec515388170684efe643a3a6ed764fb90bccbf796ed0d72f9627eaf5c11f7a4bd52cbe5c7a545fe761f1750ada7a0603b4d8eb5a4473f19dbb579cce61faeda8cbe49bb2bc6b3a9e24266b3d96ce6b3d957b34ed8bcd0f390524a29f5da394db6bd3d5a4593d172bfcb7ca65db7e6d2c83c9dcce6518013a5e6345ee3b526fbba782843af6dd63e1cff70df17fb6c9f4cbbc21d1feeda3edcb57db86bfb70d7f6e1aeedc3dd39fb70f4da6a5fecda42dc25a24d4df69ceeee3e76ed5c93567765d30a6955bf1d22e4c50e8979c9f3cac4e43b2393a7ccf6ccbc582e7dd653c4ecd6463438ccf349eced9c3655dc757574767648279df41aade3f55afd5bf30fc45219cc30b9fc72df58eed2631e8b71e0fb8f9f60bc76a1d89793ebbe098e6870aac6e432656aa75d9a56390187bb4b9b2a43daf5bdb4aa5f476767878747c8add1727fc6cfe5abf96c3e1aa7d1e47ea775ab47bb2ecdad49716bf8b305019c28a5bbcf39e754b9aed66955ff0e8f102f877e6df28ed3633c363acc83b9cc65a490f1d9a59547ad73ce3953d91fbbeb9b9e5ffb9f885de55d9146933454c349f6d1091f1e27cfd1b45339446957ea24c5891e81ea7024037f91671198d65c7c5aa4461c94c3f44b941113987e0c30fd110c30fd1e98fee80598fec80598fea805983e0dd31ff1c074c4029397ab1023e1680598fe0e17e1480598fe68094c7f94024c7f34c3f4474a60fa231460faa9ba034942f01a97e7f72ccfff5c3bbf7a3f490898fefceeeec67d6a73ce39e79c73ce39e79c73ce39e79c73ce39e79c73ce39e79c271f0a8542a18cea41bc8241bc8282780de23588d7205e83780d22964aa552e90555d977603843b24f1c9cec371f31b99c383cd9cb89d3931d67975d0a97ec7f6d6d81b5c474abae20fbbcc2266abae30a2439470e3b1c3162e26ed1fa948eb57a93cc630cb07f09c232fde98e801e680e650dc632056732cd029c28a5c996bd6ecd39ffbe7c39530ee98e5c86619d3a504d949b2a55a4c6456a6a63493767f8972235d96dcdd65c97fbd22d3ba2eccf9d2f37555c78189a4617933204c9dcf5194537adf2bfa327bac90e9285e6d7da54a93da6f720fb97a1ec5f7b643af2507329baf96c7386bf15c51fb8531914697386bf78c3a58b9ed46caad02a835cbae8c92ed2483dd91f356b933d53c594fd49bb92cdc52cb5cb4e4bf2e8320438517e092de012c7f229d5ad4a471c33b77f4a8dcf886366fa0e0445c7d03471301d6b7836cadb31d9ec2f81a902667791fdaf10f8736963e015b8b4b15a4f415282a4c4886644637bb23f580b10f321f2bc270a200b0b200bc330f45ee4813e2b12434fc51001604d529bf3042e6d6ce2bf4f5f44b43b35eec2a3cd098d393539a74281fdedcde92dfb835646e6a1904844a40c22248a5e84814f16c96468b6b39a8d59d98ca5f5e85668b4b250b4334dfaac5b324dba6867768768694d7af5b0db99abfcb16865aef298070599bc43f56c4fa83f1ac48af7f5e70d2fb7d65973a6ca48ae6f69b5ece519aab57ca3fd73fa78e30ff7f473c57b181fc0f73f230fd0bf40620d57f97fe20d51bc23e92a9b049c4393fe7534e9c0f4ed9764ce802d3715b8ded0ad1bba853200edb7b9e6cefe3db6777d014de9eeeeee4b4b9316aeb9326901c61a9c904d72661f6b706266b2662eeb284f9a325534c4321a82fbe983720807f53103d986eae8fe9c3f5bb78a228650854cbf4e2fe74ce9a738718bd9d96a59ccd3872d8607437840448be50eb97f3aa103cb04c8d3099d59760236d202ee5c7a9e3e7ab0cb65d7e6ce6976e4d26dcaaed5e84c1f369c4cbf69ba45db26d3a7ff430f2ebbd69341230340e1d6e4cc658f1b984f5d689aa45d3376d973e4910306f3ebd35a05a6345403cd93a59f0e3155f48fa0ffa283414f0d9ac8f4055483cbae75ad5b257da12f5365031b70175da14f5de80bfdb6d1ef5bd7ba86fa6705e0442965983128a54e92bbe951a2d94a1d9753557071ea12b9bc3a2b99bb4e725c756fc8a1245392e51b6b7266964f66769c9cc8b89fc49abc5f9ec8728e1eb41df99ee4ac64377c253399d1bcdad1ad369999b9bf7f9ac89abceed14aca8df4c8882900b9d56da44f724e72350528c895a45c69e63d96255abecf827a55cf8aa8977d9227197fc0200870d750924b2f622b597faf5cf4e4fb2694c9b492b58bb59aad7aac6a56374fd0564056b2556d65b3b2e59b92cb956c85cbf74d9f935c598ae9ba55be889de874ab7930cb6598cb93f284c744967940e17002c204e7aafba79f2b5644e1f0c2246745f4042641f5d71f228815d49388a87e921f2288157b9273925372927317aa471403eca7be3f35fe00831e5fa82f197fa88f1a51fd7305f53f90bc1d518d12df55f77b251341015b925bbe5f4d6cf93e1326b21e683ea199ccf235e991ef4af6045c966cf94b935abe6f92b3230a071410248ffab94262a27317ea657fa8230a87faa94f8d40ace040329aa046135cbd650be684b35c5edb0daf1cba1504ea454232925c3e88952a9268aeba562481a41bf71649404838124eb766c669f282debf45d3ad5b936413493722e9865b01454a3152ce55f73129875b2cc15c483b1712ace4428291d9f4a45c8f9a7a53daa91e921b1dea4dcae5fb4a9076251777a5fe7e09d6ad167f9f94eb96a94f422fca81cb939b7c29ad35cdaa66bacf7634b99ab1f6decfc7f3be8fc74d93ac1bc8068261180aad7aac6a2bda9c219a11855856b3991d2c1a564d6dce1009593d5858b5262f8b3667dc2cf0e871886555832106834c9397d6e4fd518865d5a3c9fbf9ac68ab5a939324ba60e1b8105940583853e84264e17058409abcac5b93d7641a1969b16a116259cd9abca2956cceb88f12512f14ea83584989a8572af541acccd08b8464ac117a91bc1d7fb04f32a6b8ea3ee9095cae64255969e6aa1b4a312c30e9cb526c3573d5fd2aae68aebaf469f4742b887c3f9f3289344e6a179fd4f27dda82b6684161a841218322465b98a80c301962ba555140a3c75d34725c75dff368e4d0c869f2be4924b3c7033c7f408127973472f27d1a3ddd2a6580e14a72ba7557321960d974f22bd954a13e9ee4a4643a9e0001d9b28fed2691cc27b86e8d8ce50e3727b76e7dfefe094ee9a65be54ae6327a666834bb9a6e853e72f2fd92ad74eb1193af64dd2a4f724e72ba85aaa12483b339e3bef733df5fcd74ab9e60d6ad70076dd56355eb16f8f75734dd6a1c883c50d24a569e72b992e5fbb81413d1e8c9f743a41cc925df07c5923423d5f2cd815403d23a536546b2b9cb5bb94faac121d148b79c5c5edb3796a458066fa18ccce5c9a3e532255f1b29a75ba39cbbe68aae677792b9ebfee8769ae54b3bd570f98e74f29d395bbe9f91f64822f688c200cd763767dc2ce47b92231ae2fe8b3f7d0e4ddebfa1c9fbe5cce5e4dbe3aedd5499f9ba0daebaff417d3ea558bb5e94643b4ab5920d4e59bac997885c86201f24518ae5ebc3099e5c9668f22dd5946ca55bbeffa16dcbdd70b86e95d3766fee4c2ec38b837bff86fb2f44afdabf32dc20485d0305e04401bf8f070fd1cbf8be4fe4b4ca283bfcf9fb22ef795f63866e855adf7b1507fbe087c4fa89de143d31c42051247a2d8387052ec9fca4f7e027a69af41e448120e849ef53b297bd7f756bfaa0a647f63c1ad9f340cf03419f6793bdfe1e97ead248e82d78b4c2008dc0ada3e4d251ec0e4a0002541bb183228ad8c1103d83415bb8d1c41474b8b861c3b4d160430d835624d18411ae1d9b88e20893df6007384dccc08180719e3e9a58821201bbc8d347134654217028212960d05b6b43320fb8d91c763e45d64d344434d6d059f4da8d7a705c23cb63d3d3ad911ed9df012e22dbb28186048076361c012e57b25a415bcbe15f50251d814380fb495f42e5d1b7fba95a9acd56eb0db1802db316594bcc559e83527b2fa5376c2db06e5519ad5ba197b5c4b4665a662d3bba55c7965887c41699262b6d996999b5c044fd617dd07f22d07ade07661b39209ebf8d1d1b2c1a9d37daf3b38006f6e7b0d65a6befb5d75e7bbff9d279e55e371e1c82be41b1dcc1d6582011d51f8eac5a93fe3de24fcd02cb764dfa6a48f62c2ec903b85cc97e40e1500202d55ffa912ffd5c19917e40e13042f5c8a3c58fdef4a39f2b24f1953322be70af5bcb10de401980baa010405d728f36e4ce98087c3a81764fa67cb080cb79852c3be9efe8d342045d5a06ff9158037a05b40b82653397493f0ae130faef0697bad5bb6c6b9169d78dded971b3313806d895d2086601d72f6d8f8909b864ddec6daab4bb5a665ae5ae1658abfc7166406437311b188d8bf7c8ceeac93bb2b913d3c1c161fd98add78f49fa6cbd8080473851d1c325b9ac391018ce6ea16aa6029760cd036b6148420283868076f757b207503b22218149a28d4dd5ac62c680f48503ddea878ea00b68c712852eabb2583716ebc61a92e292f202f35262b27fbde038821bc189444458ac1b0b488fac28e0d08b6c5461236722ad6421b5d366a30ad0ca6625c32b19f8b2b2c9fe1714855636eef74d3ad96793ab9cbc92ad6e5638f0658553bfc7aab6a2e13102eddc351a5b629a2497fd3f229624f7ba4d959bfd1f309b2ae1e84936af1ff41a7fe6fbcb66ed7b1153d5ff01af04b8453db6c4ea87632e7f63b98385653bae662bd98811f824d391075a4ff3082920330d364000455b6c6d453d87509ce94b4bcccc8e0cac0625ec44c4eac594b0cbabd9aab69281763464fb5a650dfd7dd0ce0ab87e5bb17348dc01b4030d01f312d88aac28ecb1383b90b5213bae76ac7ac856334d8e35dca7d4152d3163e99df4dcaf9ef4647f1c6211b1f6d32204187f0b196ca3c746ae55d3669b2ab4a93282a37bac80cda8877bdb35324b808eec2f81169becafc3efe0ea15ff5b73854df6163542f667d174ab6db7023515b0b9dd6f15025068150b43a69c1b3d58847317e9fd0793f40f9f757bb08a379344713aca8d181b3977b1686e2327024ccb1f91cfe7fd59b46ef500d9a60a28374e907edde6eb07d3d5029b44c8fe95d4015cae649e07b27ec0ba79a0961b3f6d5f7afe461ee805432d37eeeb7a3e10d62418d3a4bb4b934e830d09981902ddea113404b46bb243383eb9be071bb5c066219831ab58b78ac8fd6e6926211864f164b20ab86491fda5e770e48196612e413b160f9e38b93225d30682c3c9e956ebe4583b2c1d8fd2cfcc83f4fe2c1e560f4b086bc71ad2add08863669794971458b7eac863f4fe2931dd42f508be808634591a5b625ae54f0a77bb182e315cf0ec16c9c884f7044cfad1e346230a07d38f7e3402512ae5b80bf51afd401a51389080183de9e7cae88358a1231c4a23681a419bab46f4c1d18894d3f98b8b0b2ca723517aa34997d1e32ed2d30777ee1a75c7320d6332ad3546e67573d70d57b90dec7115fdd208da76997e699c3d96e0ad25d60273953f68dbdafaf5f84fd056d66d35e33f59b76edd4aa4686424c482e929c4f2fdfd56a955d15b9107ea1fbaa2b125d61223b6c09a044d803ba5dde5f9880bf004b84b1e76153883bfc732c525d31f38b13c7f108136803c7f0c41487e91a3bb7677b7c028d5b538ebccd467a67347367766cab933fbe41618cde5b4d1d037a64acdfe228485585a629a6c91c93c7f94016cee903c4988a53e8ac5f6dfaf4d1aa07319442ac4c2ea7104be3127288be92a8d2c9cabfc49582497a01de881ec0f9ed0422c2cd62d2646642563896189b50b5b9abb6c78355c93bba7ad0342c8fd1597d35dfaeebee54ca103d37633c975ac3d73460e6c9b818323243769341a5f4070d94946e072da5a0898b6dc2ed3fbaf66e24ae62a1f917eae66c8b6ab59934e43abfcaf98002bae644d7a1d6f34d1f5c9d7ebd62410927862d19c954a9d4e2f4431c4f2dd6804608066917dc019bf08fecf53100eef2bf8e1dbbf8dc5d92d17a74cef57b1dce194fbef0bd7a4bf80dc768838f58921b1c484bc31034151e0b23e61324f5e144523cc70bafbcd5da5f17573d2c8ba65168c6ee908626b921078e62ed06cd9a8629245cc968d5c4bcc5d245a76bc63a38adcef0fdabd8d5cf7d720b6ec762c2dcdc63a9c992ad45e61a7906d0e3d020afd1831422c9f97415f08325da591848d30a9c8be92ad64d4698d2455aad52cfbab6473b29898aed208bab8ca9f845937188172c9a265dfcd1945d8c8817619346d3674dd5a657f1b3ced7addbcd2462e7b0a480bb7ee1d9e6e89481c2129a211c7cc558a1729607564e16496ce94228615125938d6cd536834e99f32d2e072259bd954abb0ce1e492f58e6ad22cbae3273957e8e5a62da551a5fb87034e2e4b27f69ba02abb8642fc1998a4bbb5e405a05d6a149c5a594e7eb36ce00cffc3c70490337126fb96b6a34702b1860886192305c71bc7093247d1ea37fdddce5e1e04e3886192418ec80996ea16accf0ba4d1593036439eca6adc68c70467fb744f2acd5cb046e8981d5dc9ca1438d985f87cb19458da98a03d8f82bc0ff003540b2cf50ce286af2128270852c97f316052e2534b678b3156b37080096c70aa7bbeecafccff3670a8908fa80db9ce134875d00021062f9900ca07f64022f008ccde4a8f5866e65dd4ad6ed75cbe9967dd12ba75f407038ddb29f7bed74cb8e2f9c487ce134395f40c497ce2bd7e488f4ca91c457ce487ce15eb76fda5a6053a5bebf0042357c98c8de873b309058ee606b292196fec6556ed20e8944b08f48d5964c232d5cdccfe905092a556272f2a2f78d305062c800bd40aa56200c31cc00002b65a65cd4bdaf5bbb0a607be174742f212f01aad2cbf44b0fe3d3e99f2461c020202b795ae2b65cf2b371c99788bea4e4e754f172c997fc0cb194dc681311c6115ef8033c337591ff023982180bece17b88e5df6bb400a9b7ef33982a34982d186fbd3c82554cbe3ce5919f253ff230449f64c9a7c43959256f72924b9e144bfe05b1e4a9984b4cfe46a3c412f5a91825283e80b093459ebe0d288265c89021e3c688f13250506e6a2c69a623939292921a5a80c8978c3ed06c3296f44516488d4f3f32dd82f1f63fb276bdf0f65dbccdede84631f5826ad7a47d19221d12436c176c475508b2c25425a6ad92a07a20db2f53aa4bcd515d52a9ea92aa2ea977f98c52513ef50e034689589b2c29f9cfd5a5bad4970ac3d1d9649c4d96a07ca8993e06445efc05883c1d7da035885abce5e9e95689901c1f5322ed4111a9904ff8dd128d65ea45226f1f24d91a2c307e0f34c3f8d43862814bcf194518a2eb904217f982cae6f9d5c55daad13a61aaec5b9b858cc442ec85510ad9da1c65d92f9b093557f29e57f2258fe333ad61899bfc88051e2d20fa1e6816790b780f34bb4e93f6a74d3d4f93f6f46597883398883572ee98936d6a1cb3c0f44baa8bce55b6f4f2a8f4a4779d5bd3a746fb37bc443c79513c35699f442c6926c926a3cd612c30fd932f6dae43b9a942b3ae5b276fdff2748bbe7871ca2f7ef68b17eb4b93f6a9058572f63d93b1f47049eec4e61eb457d005947cc9e7ba65f2f6ed4eb774536566fb37848092a79f2a11ab0f34a7c612f51e4a9c99049fc472deb410cbd388c8c3c72496b56473d93e492c4d23b1acb9ac2ed93e167ba059644c3569ff646934493f14539aa4ef357779f64376eb631b7b05091220e1816e8b73557f8833e15238945987d8171b93a7cbe4f995a75d358773d7b7fb76381ceedbe1be212019500c0ee825f7fb10904bea443d9c93e7b9cbc66aee646363ae6f36d9fe2f8106b4755404f6c692e276aeea07b97cbb6ff7eddc5573f5ff74c2385777ea902aa4f23c90bad32d5ad67108fe8c95da199b6bb28fc076a6e6724ce626d36ef5d3a0434c0d87ee666cbd03eb817321b26a3355da00aa6c3f32de0daf6e7dde699016e594b221f8b8acaced07262ba603cb84267c516cccd6589b26fbbd0fe8714e40b037432c8677bdabbaa7cac6c6d2cee4b6321f6bade0c9f387153ab9fc7656d4b25bea3f43d429b5b156f57b1ec6a7d33f395201bf0f357f1e0322f933967601fe9fd1079a2d60bf079a7db435ed9ab6d2d956049abd909d9894a450242f4e2e5a8c984aa4111611854210f4791f215ef0e7daea4d43b730ca62ce3aab334376393834358f790c8fee76b3a367ed324427a7864686c67a7698406c40a193bad5413f69099d08d064f9fbfa2309b0fc7d9ebdb69abb284fab9afc4fe7377e6b979df94db73ecf6ffcc6d23e5f46f9d76c6d8da75db66d8d7ea3ad399026bbe6b7269be25a79c2b6666b7ed364bfdfd4f4e44fbfa559c0f7b5d6adcfd74c15047c5fbf2afa409bfc8c9f589e3082f0e8e70920c9041f386960ef3fff830940f2fcb1849e5cfe8f25dc6450c47377532a9c4ec50f9b2c00aedfa926bb3ff77f1e9d0a10a49f8fe77d20100cdda7cf396728c432e79c22774f8ddc6beeeeeede353679fe88c93432d202340570d2c0f469fe680d4f1f3f7ae4ef3f7b5fbe28473ab8caebcf0db17c5a0777d5f0f0acf4837104fe9e86583e5ff510d561aa74f69ec6505905a6abc6e751193a639bc22d7b5e076e93de53b1a549ef3bc4f28d1068d2fbe9a3b049ef6d0d07c7e9a01a9f108eff1efc78dfafc354f1ecfd0e1f1ee19bdaf39e4c19672a7bdea3642f063ae30248478067797e126a798e3df4247f4c81936f9e3fa60092e78f296cf2fc2fcf1f53d4f2fc31c52c97e4fc314509a688c9749c407f0eb5d2b7e30f3f04f1c4afb4d39f2310f3e9db110818bce6d311f540d09f2bf5e78a154550c0654a6e3acb8e019afb3fcfda5431f14844600b9b336453e5e6d51a0b028f89cc03cda50782ec5f45d16dce70f1071834fb456636b3666d0c3ed524b5aecff5be867f523055c2c12e64176d069bfaec2a1acd196da1f08115d9c58f0998d60ee072bdd1a5a69fe353dc736b6bb2fe8811371cd7449a7d3c7d8e4286c890f8aeaa1f8a275755fba0a7284ac75f02d71f774ca754b7ae8f38264df1aad74ffdbc56af95c4f1c1b9863373067d774d2ca4cc902bad8dccf5e692cb1ab97e6eab96e14ca65f6feadb9c6ef99fc0c6239716275716e4d2eae4fa57b4a02f08088eb2c0934c01274a8e1123f08c004829a594fa9c73ce399930cbf64190ade6fd8d01fedcdd436bc9266d0da7875ca22fb14b84fa208b883ac8168a6cdf1a0187c620d9dab628a40f605ad3aee9b2dbaed0dba7b46e7dde3eb54f6b34ddf2b73552487777bff6fb6fb4f576d1e79ae84cab2ca5b218ae4f696869957dcbd328b6514063488ca16bcc20de68d2d268d23e0ad9a4b5b6db3e4ab65476675e7b3cc0d9ad59ab8bd06a0327ca58695ae5ef39ad34d961319b63756aee48435dc84239528ca4cb657721f348baecefe53cdd57fb684231928ea473d1830470a29430d45a6bad75babbbbfb87ae1438da98976f0cb6f73fa29b6ed5bf2fbadd596badb77ec54d15ef2bf8151441a2e7aaeac9f2c541be5f7e3dc8d7c66a30f95207706063ee3abdb4eada58eed38bf78d3cd45c9e5e4a2ea248fc813f2d8a70317253a5ffca106bf9f6b8d2cd19f7adc09f2f53b57cbfe4e5a66a53c594efa76aee97b8dcffdcbd326af215e1f20de128c92515065b6d8f0632a0010c6811161831ec3846af5d69adb5ce94a8d440769cd190d110120c098604438221c15c61abb5ce39c3dadaf73ee8dfdf90069eeda8640c3727490b99a18100000010001315003028140c86c482f178384b925cb50f14800c779e44705a9b4ba320c77118c520640c3286006008018618324333421c00285e81aa929eee07cd070074da0882146395b32ce29694e7839801be86d2e38240b4dd2301e805615e1170ef63ac4eca7b029ef3078ba2a3cefe0bae2d5bdfbb1953a0c525a48c606f772877544d8c4ff9c102c437e715294d75856674454b566b3da6134e4e47ed3f0e4e01c9c91485ecff83c2be499cc027ffb9e8bb629076466f2b332050c1b14fcc82ea01a7eef3c5bb3eb22c0dff563e7017270e29cd3cd6b05be45d99f61f96aa055c5023d393d7c8877c00698f8e5bb0d21a09ac9904a11b89ec63edd356d1ec0fe22e8ca59a15c42c15dea13a9667f66559a5b0e450157675f4337a46c72bbf32541b0afb49a9fe0a9e930004ceadfac2750c5c603f6a1e448fe0d5b9508de21d4e728c2a08c33a618039d5bce4cf70788382df12ffa9e493bb0165eb974986d5ccbf20e6b311556ac3df46d2e8b1f3dd8afe62ecf66d442bbfa83c6b6bbc98b6ae1b4d47fecc8fa5d2deb384eb52a11b9b40161f6e7f25ac5cad4f8cc70d9afff1d887d702bafc6a3eca0dcbcc0ea8166c5ccfeb325e8d007894f70c3c0bf9972571990d06e8eee7e396a0d92e4aef02f1ab335a70c8e97097f8742135705d86b68cb2600799a1f1e2a504ec8cf75295938505636a258c4c273c7b6e0e517e9174ba6ae011986fe6a36bfe5cf062b30ffc3acebb1614dddae79f417887b598ff466c79bdf719bebda83eac36012b0b2c62e9569c3aaf62214291dd77d01c50f8976b329bc7c0de2b04b2100208b226b93e6a5501657b823867e7bef9dd00c55064fab52c712a45e0b4c15257a1bfa2a3858aa7560f2c6c8b2014d947a137e7159f4c6f30d5bc272704d847d3393ca5e79116cd575ad2be155fdb3ca5a81b61c726185ea7c9b770edb562269801a46a1ed555b4f4e7e54a3db3aa78e8c4429427b35bcb3cf0141f02104e2c0e006274194a0a2af09db55b95d085efc981a5def87c07538144e898b87452abdd3ec28f4046f1bf6f20acd9b2f4d61401c6d8f201addc8a609eedf1423ee8442d0340570710552b3be114cb60630e5a04f14cd40a79253718d6c316d1722715d540ab2ea9eec73bb62bf1a453c9c3b1399910feb9b5ee79bee60fa626bcaedda000f4543ba98fb41259f9c04d3ae4d8c56d807012e51bed2ebd56a8f1470bfed34def233af9dabd70ab8526fb9f8621feafc532268a18e647700ecc1f0fdb82d25586f8f3bf77279ed8389030ff38d402d99738cf8c30c8edb370a54a120c79760ecf435bb83c906dae6db4dcd34ecdf01f2300700c7c37403718f06855c9f08443b157bd5c60b917cb0c184ad0d2b58009dcb13301ee7bf16b2869a8a0fc930a3762f846b0b92d13c86db9b6756a8b6e1af8845404b5316a5bb93bf3b36cc2c45f311424fba917dacc5f81f0a5951d793e90a85dc4a22dcfe3bd6f23084341562627a8cef50785a5a87915afedfaf6e65ff1cba67cee0bd1e85378b20d25b12ef3f9e51e0d4daaecc14572dc58d2566aa9bf74293c1426ac6ad6e9812f27e8c1151a558cdf11a262733900efe48b4087315beb3937653ba345ee7cb35e3f2d40ee2c1cdb78cd0fea06c04fe591da0d6cadc7ea14cd59a2392d22a903e580e900945a430d4981910067b3c0f84a9fc34343dd908e4e5d67450e58f610e84ef1913d414151025dc55d3044372247b34ae3a281365930c3d5911291e824b273cf519753e9aba7ec73a39a778504ddb5c53105d347f6017c6ad57067eee66093b2d25e6dc348c239bcc42fda9e40c34807590cb991652c8917aee581e4204d931099019f92fa074ed11eec4d7072b955341ad3e9f29aae57e963df901c04e2fde166c46c9d0690d0b2b3056c1a1d8593649e45456586939348c72c33db98e1d739dc51b89c546716dc611d9b6674c678383486de487b3441ed88bca3779a742d003a6af4e075a69eb344093bcd4f9bbe16239c3aa4925121f90f83094ca95ee48679989b8141d9bb155c4c034db547861157887dc94da2a6bc5bcf613805acddf41fae10457f0658dd8fbe48728f2e86611cd0b0feb6ce45ac7caca88384f830bbb0645ad564f1f5010d265d863a705c8a5f32cc6b9b441d2e2707950e8b0eae60bba3239fa3d24e24f16527fb098d6d9bdb71d86b5e3356e752b8d8dddecc9b58f6764f4216845ea086b8bd8b9a2c61053ad55cd5a2f93771216e86057641bf31875092310c16bd5b56273b997ea1be3d5328cdaa6512a5beeb0cc228e19f383c549334cfd2cf1aa99cbd72a7ac4f8db020004de306e2caeeddf55d77add7bcc6f5affbda6bbfc6b5ae75adeb5ef31a7f4af5ecedebbbf63aafff4bf4f5360df077601a60d33bafb9beebae53af6703cc316e427acf3a486f5a29a81d4b8333a00d60431b59d9c903b6654a2a6b2aa0ed1e4c0714c3e3f203ad861ea506b4f127efe11c338f74ea217c3584ea40934ca8c4f495614e1f44a395f45c06d506087cc16fa0a8bcf4c051c8f610d853a20295418af254f907a0d48c9df65c012b8effd2c31d3a8244c11747c4469b683bff3830f4798d3ab851789b10a42288d8fc0b126eeb3ada63031e5431532c01d88c508cb640318a90b2b179afcfc427e0ae7683790af41e0f7313e115831450fa5cd0836d30044a4c450373415722761fb498a2700954580ff873a455d62fb6391fbc13e49bf0cb1832de2ad2732eb23ef7e501934982d433b557da1f63afc2f9ab0b24b0e615ff024704391d74de983dd9b2076dd5ef33cc12f7c40a94e83f2b357e312642a7bc0a9abf6828351806648ddbe3c9089c092abeeab855cce56702af1e7cb670d4a55e7a8dab6896c86c704ab9b2f36768887db1ac19fb0897a36992bad91c94bacb86de9f12d44427483f728e75a01849b1e6d622d0bc095e23527e77b39ba01ac3bb94ff14adb971ff960e90b89a72efb59098b22ed5ca0a8f7ba49eca1044cb8557a96c138881cc28678a32b1695f24248a3c3426e877a821c1078dcdc9b8234e235c322b5c6c16ff455eac726ba05ebd95fc4abbff8ce97055ce83ec38076b82832c6388a5d5003c7a6d0f963dea943e614ee41c599541eae0c3fae01587cd8bbf2e472de97af2c12a3fd72b068ebe936239b277f704088781fd72e5e019c9487c70563b245a298581c3491586e275419a4908299351a06ce107afb839437172fd725a2ade5ec6c7b2f9e884d0e1e1a96e73859aba50df27f20f4630f06a23a2d98904679e43aba879a68fe64b7999dc494466ee5d495cf7dd4c0203b7169fc90c3cac3baad8d8ff66bdc13c55bff398fbea01afcafc0ff2b101c4560038e146523d89a5ef088bfb78f4c89b018786bd21f3707147907113ebe154daa1541cd05ea7525072b7d625d286a7faf956e5869779c2438b7b37313032e69e3b91ba507d2dcf738b1c82bf2811b9eda87dfe8f389af8ec1199c46a53aafb119b8ddf3bedd37b4294a3eac187127cb3279e053bbdc0f786104c8447e49ea414bbb4beccdf9319551ea4c89862ff00bcbc928bd841c8acb4d9f8ab00ad998d33a5ae4319aa0a3dbaaf8817bff18750739450a505144ebf96d4fb03daa14089c95d14d4537b1407cef3ceec9264e5008bed0c04e8bbda3a87ab12f3b1f018d7643fc5039a7d09a7de93632c70a872b97e71436802ebfec96e66bb847096078fe2be6a2a89d8a640fcc9a5d33dc7b7dec84052069b72a7b6a37e82541b0f1c835ea4f36b78d0de0f4fb244b5745d0071d146877d01f6a05c82d9672235a5e033a3201a25385e5854cc8581aca80f46d033be44c9ec2eec557fa11c59522eb26f896e9efff0b205c31132ee51ef104f82781ad37c1213a5e0551426e0420c7c95222ac3198afe330d9e057c6d81c37b6bb8a42d7be4b38f265d8f35f18ff5ff7a2850f98e57f1a976f04e397de83d1b0e94d062095996ef91837ee7081081839e9ef8085143891bc92a4405eec6924d6e0f02153f249c99e911905c78b8cbff91eb29746a5b318141d93fe2647e49427bff2b7307fc08ac556183e7e439d7239767e751690d0e38b5dca5e3789d388241751b8aa8908810a7635dce82c748eb73687998209c58a14e6238bf6b3026e0d4297f16bdfbb124e4712283f34a06878132b88a0ba114a9a3a7c9ff32da3e25e6dcf536e4ae41119cd62ac99fc3616e9853d049b1fc414882fba9703cd9a5e17ba10a1a074a046b9d8bbb2099cb30c339b94ed14904ff7d3baa0087be5f13687a28c85a48d336e034bcc4bdeedaa8988d604d63a88dcd39318d0f231776281c42d5dc21bc96e43410fabdb71eda480769ce364f9dcb63740206f6b698b525b848b14bbac8ccb4040d1b5db9f909ca1d2ce3b10bb63ef0692cea5ca8b12a329816d38866275f1fd8f7893f5b8e800b247ef1cdc521670b7a796ba437038be70f79d0ef21c36294b9e2cc68a56791e1ce2317d75edaa625fb018df96b5a00fb6b2fec65afbeb934a1bae1f7999d30493d452c46557fcf296d225ce0e34f5db9fb967df3bad58bc8cfce6d066d40e6a68bebf2c679b74555e6bdb5e0f39a22c852278d7befe006e60004114af93d34a39993d55ca428428632fdb5618ec6135c70af53d7ef39d37717e40f34d3a1e50b81dd50cd4b282109191e91567c0727315ea87776cb84defc9c79e8da4418623ff43534412fc8f8fd6b07a8504b8bb8e62ca8a6ace730cb118f01591f554bb89c088d8e5cd53327762762e545531dcaba1c3f07afe570020321b83a6b8a9a8ad11361f3e6a1bc558b3bd2236eec224ced52947a59e947c09981ccb021667e4a084b7e0467e8681c562a98d96a34c922268492678bb4a51afa3ae98261c236b858787d56a8504ca7bdc6ec882c0a4626502c11ca555813d93af77c8075bd4693a3ab284e468e448d31e16cab0b6cf6f1769d07e3899fbccad9ebd86afef15088ab6d57fc7abb5ecabe2057044cafdfbea8e6caff0d4a0b4801641cb4d22f3091ac8c6949ef36a02d0860deb7e34c6b88fc7317a321acd1a030ffbba99cb391aa40afc46b75f60993c49058fb8d18e17f035b32924eff0575b11844c695756c066c550dbedcb44667a60ae929e7be329d6d82889a92870471696f5fb45325d3917125cd3a5588c970837bef3c10c68ead3a9de035e929ab1833a8a35ce7fe80d452305276016e6147520291cd846b2d74960a6bab1c07a26df2840f41a548c644e3b26a320c96ede0ad6bbb11557673ef1fa6b0c01e3364a84d4d31dc27180bab8dffaa4a03e85a03d14216a30494e057150df069797b8a808cd0b001310f4ba85e6050a5e408d1a4f4974a4c9ec1d634cfcacccbb5989a2a4d76c83ab7a32ba432400c74585b2dd9da99799359df78795a932902e05e05a85a92915b342be32a14bc0337f5cb65efb2e0152e7cb235885448c1ffa96630c7aaae2b47ba64679642bf5e5dbb71b83e92b56749881c9e0d8a07b7f7c447833ac715b0870810bdf8e8c0d10d43d49bf91409f97246a40ab2aca58b07de90a57eb20ef3e750967f291a99b930104dcaa100b74b371df66ade2f588c1845187d57371d1dcc7b096b17bb77b7033fb0185a8751d9256508f3adf16efae4a408a3411d802e12213974ddcf29825e82e9861edc3e7ac09df344bfbbe5a9cc9ed99461f4bf77c6503f85433a1e09f3543911b548e89e9030735fbcd060731deb6f8c0332480b9b5f0abf1ee36af3dd83e15c96bda18bce3f7b479c8379f3e023aad119c12d30e40739046798a37247d934ad71bd35b7d1538998a571c0bf2e317a80285370ab7b18c4877a387b83fcb3ba82b352f0d0529ac169be0bcd25609159f4c2295a1c12bee02ed3e8cd2f80c801aae5fb85964eafbba1ef503010549e04c852b5db94ecc1e7d0deb4d64facb1732ff4100c01b731fc77811ba4008e4a826c35734577a7b1e9838fea6d81bdb9a3a14c0b89a35aaf0c8ce823febf7faa0c68d1db0fe114b303a8e0cf166c9ae16bb000ff82284e2c7997e6781aae0ace67f866dc9c4b74d0949ac01f610dfa3ed129b3bce382c6fbcbc2fe34a970b80d4cbfd02b103e720028407e0be7b7b4f99cbe27f4f3f12c0e902c9578023844f942cb9c935493f875fdc4f259626ea03ea35111a6689321cea58f376a1995dabb6f5cb782893f1ba78251b58c82814b9952d209be89357cd96518d4edf0c4b97038cb4023041053ce48307f70da521c6d534a26f34b75ccb73f56f6b69f14a3e4b8808e4d9651b535b1e046b9eebfebfa0715df6c6efcaf18848b156dcf046369a3ed977668d3fffa400dc44a962539245b5011056879a474367cb63f82bd42bf9aec5d5533220abd34d9dc2dbdbd9a66187666b90ed49fcc2023d2e6722f5a92279681b57c4d5b5bcbaf11f4d10a05cc387048d763211e7b38e977a44d584457fe402bc220458b561132e2ed6fdd1715da0635525d7f469968ce61206116410a3734d62011e0fe082e70631529ff0661e33aa741cc902a7c1bb97382828bbd62f1bc21cc6a3029f9eb108b11f95749a010742854963ea9012830b541e4f228241cf0b462f05c46bff1a5285c4b5921a63c5547e9ed587c50902e13563326b5183420174cbaaeb7099a2ece46a14e2693c6813edfbb1a9782ac98c23319ea5455a883c5c21bcaa983ab852d8ca9743744971f0f2c82ded1bcefbf13c7cbc5cde84263c1970263330b33198f6d3b35da5dcf086bf5078541e9b359de038cc2e21226b5fbd9ecbd98d92a44b2c00c7a4a34b04dc6692f0fa544bf0087405557c6dccbd87fd103c061cc46652ade79cb59fcd0aa226d8cee357ec4611406e9df3ea2951b81ecf33ec2db18a0282b3f9e35bad27323b7cc9e3bce0af062d3b5769375ee2e85817ac32124820758bde87d6e91d5dfa692b2768a36a0e06732dec7074e00c8e67e397021ef6418137df57f240101dafd86f5d988b21600538ad76a3b02bbb6055caeb4ed9c0b7d0a941de29c77510940c700f3173ed954110020426cf5633fd1a50056ecb16e01af6ec4edbcb3054b63be551a191e153cc634e520d3207f9d545b9ddb4edc33957ba7cb6b93c4a9d2c47485948cc14d5186db325486d84ebbee41ee089d49f86d6a435cf55e0d8034a5f9519227841916c83a4f2f5e0f23f99426a23a46c926a8dab3aed6d5cdf05d0d42511bbf24ad0aa71dcdd6fe3578433e41f1ac116ae07d07c6ca5a2c985b6e67edcbdb371ea6e794e4b2b97bf98486053ad8a2e0989e86e3410a33bc3f65c24fff3e3876197d08a2796d3daff086a38df3b553138e6ed886a9846e5d3ffae001c10dd456ba25e04335b86a4bbde39bacb1715483f927130e4aaf5af525621bbc4377a8980d5ad206b2a082e852f40f3287717b9eaa32a7fe353dfe26147d38c0b70969f4b53c30ee93bf7082daacb7cb6ba19d309e7c264ae4fda3362e63e59db42e178274a35da110cbdcca3c84f5610c5d40cad5cb41179c3a18c2dfda1a7464082f3ab7b0cf1cd5ba08c10f039a910a96c8ffb3020dcdc4159d59146358a9b0dec9aa612062b042fd4e455cd6c70186e36baa3cea34cc4671d7f0f88ed57a22ea8d03cada8a8317c885ac16b04dfc32b26e73779109f4e848bc42dbeb813c9a961d61886bdf38310503b0d6cd2093c796fd0f9b15c5b7c1fdfe0507b0531a84bc1105bd97784764b4e7f26ead6378a463f747a666c125cc8215742023021e62f3f3cf836fab66646b152e75aaa1b1dce42ba9f05187326ca0b6183e0eabc3aeac7916823bc60cbe1d552d942c04a398ef2a81f77d727414003312c778c69bd5dc2f39ab163e23a7e7d55ade2a6b0b017610bbe73594f8f0662cc5b215030f7ac6c8d37af16acb4b280ce08d4288391913f03cd8e47dfcaec992be381414b4320fd3c7147d72e62e4a675dee8f638b0fb53a066421196ba6927d8b94788be9028c6a15ca4abda6205dc9f4592e428ea2d1133c0c1e2f3a4667a136a1f2fe5e4a57baf4240fdcd2b95675b3f60f8f3c4615e3c436219841617e27dbc503ff75047e2904639ea3d20729506f74ba1f7260564c45d412acc0d17a043bbc2d4aa14e6130319508706e10e69b9e7ead4cb3df361f267b579750057d29a26491f86d7c887f8861e2adcfd07d8ba9c34ce9ebc24191014414c3b4a5e985367a8a59972da6814caa40c1c64d0a0c72f83660b387f4460758c4334fb9bf697cb7b55cb274a7a0d473e091f0a01434434a993f965a1d9601e663f2d828e674ccbd40ab2ad7319c58eed12d311ff2260c352cb0f35cc14ac3ff194eb53cd5e9e39eea97b879f154d4932d4010a015c47da6a2189cb427f1a2ad2105a867c8eb136574b93bcb6e3a30e561a3da9ae3b910c1101edb7a4081530df7d4e39a66fa96c7c374f80f7e205f9cd29e32f835d3c35c39ebd7dea405f99981077b999fd04667dd4e3a8dd39ee614219416114354577adf5f204b5ad758c7805c21c94dbcd6c08dce8d657e6f9804281f827cbed524c6cdef4f7a4da606b6cb7fd72eed609b7c01ad8730477ec86bdcd6b7ba2e3afa081cb59ff1d90579692d0f12d8a604984e116ba66cc92999dfc6704bd885ac78a40fa4cc43eb74710ba06fc5edc843639e12e57170acdd788bcbfa3cd276ef9af578015b5f6e5153603a418018f3143ec2d7c84729d94cebd1cb7dcd023d6a33109d72656435d3ccb690f4961651f1c91406ee101cad6975c2b8b12daa5f5f4b2b4e2a4c7e4c850460997e75990aadde566168d3b1fc6140877695d96024e79556e35232274a41b51e90e0861ec2dd998a2636f899a34efbda40808a3a1993a1b566c83640ffdc19cb753edabd331e0bfca82424d7b55c0afe003c40c79db08f7142cc9455a67a452f5d8f6419191a0707f47645c31f3727dbac8b6ae9ead8e2e6f60597e63fa981a6b70b9fa9a7681cd56f176596735ca54dd61c58f43cd4b4dcd8eb02b77925aeafb3130f5bd885f9a8e2b870f3a8298505bf5209514c373e64600bbe2e5f5949c74155cc5b8e00b3729b18afc5b0c1f5b9274984a5025508637a3826553a445c4a31aaf6c5f27a4a2c81e88895812c3d469a2cc49827356620527791de9e6c2261742752726d8104be3c69c5d04d5c2eff3331512e98c510e3cf48fa42524a307a6992dab29697382cc8966f77eba3d3ce48b81407629d842532075041d946693b8d83d28282901349856d5669a63ba3741eb8da3e7995c728b2100d64e62a6123ed97b0ed1b649813dfea73688f2d98ca00c3f34958ad5f2ed938ef1f31a95dcc8c2891f36d4f8a13209fa0a18d029506c7f204d035e9119f285b6a44e351a2d7493a675105bea48b3ff1d55793f84b167c5abc0f7fe62aaf8efe6d20975ae8cc058ed9fb3f84b80cac3eadbf50ecb8932d4d81c07aa5ae99c5708af52a57a500d5ebf8448d55f45903a23af6e342b1e0740089b867d2183ac3816bf115dc34ae693e98d28807c3c462a22798962983bd72c1d2bf9623e32691a5f5d82b953ac9ae29359195a96046a72306282f77a330aa73c1dd2fe8831eebc086b74153ed87d3040ac4a46d6797e423dd1b8f3eabaf4d76a78af3eb4373dc80ae41f5f1978a413049e4e21445162eec882309ba90dc66941b9b4075a696b08336b3bd41a85894000bfe45b26cfaf3d7d435649d75f547b576b7e6513906cd69fa0f1ecec3edf0ca9a9eb34301ea00a34a45d5af680c98531c4bc1eb4c028fbedfc36d762c4211cfe3c5337e3ed72412e76c766e61722cfb1c94f26ca88c1aefcc4bfcb203d79637590a6d2f892d8f7a2a606a24b1a23900d82910e524886b93c29c23ab810d2f1d32094e7dcca175b6c6cf5e99d54ea33df9fcccd44427d6155c6049ded19ed0733e18fdd44345b03c92c8d0fbd91b933ed3c0dbaf2c3619088fd42e982b0a94a6321e2898d13e8c9c8e53f6bf1a7b1b33c918541367f6fda65b2a64459849ae498b6ac06b8024088c72d76b91ac47660108434a67b4052dc8354c8967e522c8fce2123840e0c07a6438d43f532a9e4b22033fa8d7540c936ade3b5f2c3b8696e27a9fd6b33c3e2ba360fb3e9a7929fd482df02882eaddb5125162fdb7f7ec4abc4b892a203d32cebccd03d4d4f86d46e9d4a41e6b4226e2dd9b8fa7cce1c18afc3dc46d1f7b52dd6f080930d0635fe69db408ae54f731dcb5989882e238fdbb996510872e7a4fe94c7a199fe0d8d14aa733f0cdf38c4bc6e8682d56818b060e0a0445bc37ce767f6408dae0dfb19049ddb0a070c31bb29168f7d2ebbe0b20ea5c81bf7279c35342c8e747a841ac260122898136a44b8d8e0f75c11ce0cc8ef7b5609baa5035ed89f682f70918f92c12520ccaaaed94196ed626878668d6c37d00f069e223fc26b88200cd3fe2f3b63e1a0c8ad1ccb583b9f03915e920205218ba6e6692d690e0b3ed4aecf8d8c8d8f951c8f979820090af1ac1359870e0eb515c436400e52354e91b3e68507e35604be362593ae80f02082b85b6be03450dae7ffc886d39a6e8d3d8fa80e842e3674a70af782e74d7734a2eb58e842d0a4dc3dc8a6684558b4a5c8193da110dc6ea2aa8a4f07798e65ab704c9a8b7c77832798c635f9c807bf18ddb7e25716ca27259b572f54a7e0e2008063092eca8856d50822b0fef26fb42c2427ea5898b8ecac157294e412578ab34987ecda0f8e08f0523dab3d1ad290229ba21b5002433793afe4584a62593d9ada19c5d5a87225ede6b55c9fc46d7ddc2885a91399c46de0e5cca98cfc500f87731ec19bfbe32db23f3108fe6431e0411b13eb1147a3187810b0ff27b293007028c1a34f0f88939bea29a22c328026d6c6075bd155f5f47be60c7786af67d82e76e7c186456a51e498741172491a433c07c86a528d37342b361d46ddf110c8403be923931f34bf6b06db890178cd7fa9c1ea4a245037a3cba260bb9fa5314dee9f1c33ac168de89038db6735365dc1c5a7fa034f45db0d96ff1b04c38389ebdc3edd1c73d88e3214bfc7b3c1c2c5efa4838100b1325229c321c837612b04d46c3946390c7e226ff2dbfa981f71c82bc28500f2010cd6ab99e802b23d3099f13243e708e77c4b4ec1408a980080a7914ef6b51bd581942e7795a156d3c8f8e32953e443eb0e570750c2bfbc7d40403734b0eb1d4312fc8f471297a9c195943155ef3349bac3408657dda496481dec9cc45a89ba0437a681683be222d7d6e0983ad8b64f2fdbe9a25d8b4e059f529281ed1c1280b8c7c597d26f10cfdf4b6982356105e4a6f33763c9392588f194b5ace762cea5a58a1e43557e5e46ad55488546384d0a5ab690e96b7e5f61c49008c7b9890dae743e1b29c4db09e048e41cd499f9dd58468dd70b40419125cc381e80b360e26f294692c5ac86ffe2e403c74b3f50414e02a9c8c837fa368756a330b22c2bb8eae1d88a109289f83cc0fd307a5251a0dc441b328498df4b85405559021fb15431acc8f2fcfc681f830e93b411d4514411424c7f43f0fee2670f32bc5ed30ab69215c66db7506aaa01fb1b5640992cd8522f27d88715c192bd571d0ff4f041c25b3c049d99845d4a74ca608f037591f99ff37a5f0f77aa8fa6f52be834233c663176ca7fb9ba5eaf2987d743dcb8b8e168a809b0bfcc07a10571584a09cb804adf3fc019b2fef77e8af358e02e52be2a7f13b1df2d5d676e18ec1d684fb3a473154ef5b0907100cd33a0c019b466c414c26e17d457c5926691f5056fb21110ac98701bac4e2989f2182a9cf3f8f8a06bb349a2fcf682f60ae5d337a432765077bf8e564cf2868169f4383c71fdf6ac14e99d5bb75f2e5069b04e5d7aa8d1068755d0525d241387474345341430e70f3e0474418c590fdeb6367e9ea1761521afb8194f9019daa5aaf6cea0a0990d30c5f2d2ad9fa24196aef1896f43146947a902cdebcae5c64729aec62eeef24d5e361395a227310bed1c098d703c824addcb868daddb01c464a57dea62d31c7ac9709414603ca6bbd42044bac7db797d258e6576bace3b7363874b613c3cd914a06a980d884573889a6a40ec1d5b70d4dc995cfc8477ca684459867383ed4c8db8d828c2e1c33c6b986b92562494204e8220e9138e6782587e1ea5ec93d5920d4ff8af92b89a3e8e2990b962c5ca1baf17b063f87da34dbcacd5c9f182d52d9d8d7d118eaea205dbd18fa7d1e64e1c7e4660b7861157887810036aa2ee0c7dc3fcaa41a5d61ed68a89d885658c1b237a8ee174d210201c5e06c7a1fa8b5ad91333e1f2cb421c8a4afd60a92449ab42e96d71210961647f2045897d2bf1251a4bb53b2a426c2c904c6094ca494a0e64823145a8bd6a9e6990908bec34681fdf5251b31634bf4014842ae7d8772ab5128ae163121275a7f8b0c7594414e6f15e207b338d507992b5c03bf3b082afd9db271a83375b897dd89ee50bd1fabd9ff01a2f46f2c9924f29f17a91f2c006e681270d570a779410ffd77d3f29a11b12c09eb66c1647033ab4c3c6e0a059da4515a0d3f4c0e41aeb01e711266d92886ef60c9d6ff6ca26af157ca9c6f2ef1725e8cdb25694a900acac9fb0c39e99b8791a085ac63eaab18000070a69f743a1fe0cb300564dd669ea14e6bf485b6af1342122afbda0efcb18037d41b988474dca73db2aff71e4112843a034d50583698d723b814bd7ccfc45ea363600d53f7fbe345fe1d0fc44bde1140549129da4c4dea138e19a30fdf753ed4989acdb0ffacccd45da029e24f9c431b43b042ef33da24239c9dc6fe0479a090bc6e4fff59e750aea738101a11026306534eeca3ae63fe047ac89519da68f682cefca0794770b7166d2300dca2f3f9837957e77abc112926d7bf2a309eddc808c075f93db68192290547a64772363c9d919e0c5020b297482fc7b99cb0a1e710e3f78d161e9e2cf2b46167276fd4fd14fb77e621f0ce72dc2032e65e93b0b57feb3456acdfca3badfcc7f40bba24375e020da933cc1ba390db422b5e45b70b5ce22400107e77237418735fe53aabb7827c5363f00c879f47c5b4fc2df6d01199d8f521c4db827118291c7056c5cd7fe61a47284b46a9a770c1abdedc0176f13d0a562af87230581ea9163d1fbdeac7cb3f3c3b06b415ca1b45928d41a0a82db6604060804c16bef24bc74454a8ee3d4cff7b48abf703a7f5ad3690a2981fa7ecd278b227d09183cc86e469c4a2debc05ca435344749e6d39366858eccc8948964e641823909ca2c89e2f22edc71bc8761bc15b2bb2f6509f055fb61ea940bf78ae34c9e088f88d589ca63c5074a37893948424ab74c7da1ec6914ccd261c0178311789366f472d322874637ed9b83cf363c6c09a0b2d808d76e3b458276b59f3fd770644269cc79426a58c5f04441a95177249449609c7cd5ab2b76f05f874f73858068c37c090b5858a52fb6c3f113792063162cbdd07d0e87d8f5d7b220739847ffdfda7c8a1f26e9efe5973b1c37ea8c7eee57eeb3e2f69f37f3634a889f6073168a2b031c74555703528bd4b7c20b62b74e0c93813f73f50a6c2a726d7a70e4dda39b52ed6e134a44a94257ab5c3a5e7d131e4f70ae69aa87d58cb51a96a9d5ebcde70c7c0e3ea54d2970a7a0a3e69f2862c1a4ee2c0087f1447579ffe574624172fbdd6f1d8aa8da2742acd1dd0bf5525d9a358ef52fbfd029d0b3306d4ceb8e860931dd4bcc16a22c80420de40f054289c97a52a50d1f4591f3f7873e6ad47980e8316169d6a0679c40696111529030b20927d060e9a7028dde7eb07f9458b9c83e8e30844eaa1def4fecd4801031b27078e54497f2db3813594005b632ebef9197038c56a87679141845c469e14320900d6d61120c79c357dac4c8c02608bec2ff4cfb660864bb47524c7613f8ffb6836c9fe93b597637cd38477a8a7b90488da42af1abb768f8bb38d0588b61a77ae1976e86ec2600bbd68a13ab08cebcd712a44ada5df4d86398df3883aa056f9240a9933c97b7454c497044c3fa9bcff2d8514050193d233a852acc58c6556052a3c3693f5af97999ab1e5492a086dbf84ee41609c06af5263ae8acb1a4f5f72172b2c9e06955c78d0c21a82721b92144a53a81d96b8d10fa008a5519ad8bb2b3c1c254921a897757f9f1a7b63e843f4b36c8f1e7810a969b982759ee0e503431233d057fe95f43ba758ddd6426608accd9c4580a1a2b1fb34119b630e810fc644f217f69755c81fdd0f62d43adb418f00829e2aa966287c8bb210fb686b2050812bdaf879d2c3bc3ca05d95384f1c070af250bda2f899f49122870681137d79da33873107f23f1d77dfa3177af22256dd2f5d1fa628c1339a223ab91428df0057e557c860f2e4ec1c72bf04a1af584a2208883600bd5204fc811e1c9262735d610924a77aacb0ed906e3f25e2b6af9e9e1fc06070f9ca28b32dc36ef3eb037fb8ca93ae278c7acf6e798128fe50c5f0b55b12d405c3bfb065106f9b3a53686fafc4aaece25b5c0f8b835bcf1f26bfdc4fe1a84b38c98272aa10aa043bb9bc8900d3c5abc1ee6ba01851c81bb67e718d87203d492fbbd295f4bea629d25b3035833ea640c3b87b8916aae0132aabb68e57156aa7d517f9b3536f7a97e5fb60cd4f22321c23430f4250b72d00854671ff41bdab3f01a0daf531a7f88baa14338bbaf34282e9559e52715bee4805f969392439f2c3ff129c9fee92b2ce05ae8e900d27fac139dfb1d67b364deea4c8199e86a4dca5aadb227a196058085fbcaf937e3079c4ab3a4dc96df4f0e06894bdfe28ac258df9b8c2eb5626cf0bad5e008d63aea102a83fe1f18bfdff22d5254391c107987feaa44fb23290126f6432b520843dc1f9161b284de09bfa7575eee929841970e83766fd3a3a3e8e9b6d921a71705a1f540f8592cf90451529e8bd229edaa65c506434cccc0abb2dacd446598dc7288923d584fa53b60738acfa344732d5995b10039ea2b996bf06007e5e3c4db76f366c6ca46b98b894a2dae460b6d1066deb42a72c27ceeba77a17ffe98f81419fb721877f719958a60912b4f0692fbc3af16f48bd2b4af1141dad18988e44074bbf1d0b7f7c6c88c8c968b2f49b8baa046de5c6bf15e9141f3358148f1405706499d1b7650372ea1ce39d440c084307c141401f47278a57eabe8bf62ac90ed7e1611f93c2a69614fbd40c33577fbd2d0afafe01f3fa542b31a160127582257820946e1ba7bc0b12ad584023e88a434c7c9656cc59f0894db6500f3565055f95cbf44212b0f3d910b421babe0f22d091385e3be2756d972bdc0027f9c1010b2501b8693545607f0751af5f48285d12a348701abf140ebe5e0474049cf70bbec6c861109680e7a41a1c5c8b863d002e513c37c4d82dd13a496e181e63219b8b123d04a440c76c0888b6f843bb75277684a934d0d03185e50f87fe551f372a9f0e34028b50704dcd42dadaef79b669c0f46ae81736e6b5f2117d64f15d48c6ead377ed63fd6e05e6f2d6a758728157356ebd79278052d465ff998776202544b6e5e57363a03198931e174fcfa279353941cad5e0c7acb160f22e4fe13c9b3ad5d21ff82cad7133fd909e5f1e56bb208beae487cceb51d9514228c77a30378cad699f0712424c58a027050e6333f188f8fe35b354564e2c823ddc2edb14bb87e32c639483231577d6b43dc2ce9abb27d33b8f66b13af7b47256b3546fc1b852598beb4b6db0434b5109f33910abcf22b553d3f9538b02c1e003acaa2f5980add14b8e821249c2f9083ab19e8413abfb296d3eaa42176ac6441a69363334372848abb125afe992b53f92d463bfc04171cb5f0cde0420c3f58e39c79d1be540fcd8ec0c8fb4c2edd1c8e9e824bd5db4ca5ec5942eea8248302e1aa51f2a85263aa087e3bc12fac0d2151b4667504601c65703061a8cf4c36c482dae0f128c782018156b47c9672402f194d4d9e80ae7e2a29dc5d9ebdb60e23735a2e4a5bdda9c2f20f574b7f860dff54bdfb69bac9880e32d37d978f646c6bbeb8552ef28aaf082a76a0bc469fabe4d85a51e4e710fd31e600258f4d2af65335142a15fbf8327d20b0a5aafc668fdb371ed9666d078dbaae6b58f922207c7ee8c7d7a21a75c6410b62dbf003cfa35c56318f7001299a79a475abf6abeffd60eb049bce43295ab693443734f0242b1c9a28c92333017306dee215355820ee107cd2163f7227e5d44bbf23dc21970d91b10a17104f8e7e0a3f4c73ee0b2198a8597472e6ef1771d6f02744639f6a8aa3749f178aa64befa597cf151bd73ef87e9091b83492fb13fda6f79ff09cd9da00babf707e7c9daab2638b0a2b1017806007527468fc83f45601c38bc7cc69231827fe912d68a47a0bcf878fd220225c4026ac3fcb9af82ab1bf883cfcb54aa39bb418844839ddc9b7084fc83027f05b85f54a884254edaca1f38c975913f62e66ef31200e3ba9f45b2ed40a20d1aa9a1e2558388a3594a242f9b0028b4f1169390a76daa9b97994da5b175623a6c76691f997d52749974db3ce823849be1bc12612f85dddb62c99a35b1b8a17a114a483e2ab8f6a620b34b0c63b8458d8b2946297be5183b39207ba1aed165c5eb55a473b0cc62df862ee4fee4c478bd12d3a4855fc57b80e0192f5b1a72ab7a717b9a2dc4806209141c756bbfc9eca2cda159fa4066989daeb4ea5e902ed05e0c5ca56aa1b95347e2588ea2288a947c20736113e7b40cf9e9e95c8ec9fe6bcf2ad7400e15836c435061a71e08d62a0f195ef249d2be2a7ac44e9cffad84b386600f40700aa9df2d9cf36918920a70730346dea5e6f8420948b1d8d0e87ea4edaf45a89aab6bd08d26181adee0bb8d7d65ab443c968e792cbbf958668fec640057030eaa44284df28a0cc21c0a2c4bdebedd000e6b27b17503b07c0548566eae6a022bb84c4e81969b6029e425daa1ab18d72cf45700f86b80b93b4d04cb238f938308bb826c6fe4bc398f6f470bd1c27d617fc8bf300f9107e1888cd4851fcfc93d1d11e6d67ce00775aba466086a7aa6ab52b102328166dc2500ae3ce6bfc3d7dfa2b851fd7f2401fce299bb280c2786a2a837c8652e4e29e3e25d56cd40979a9cf52da08419bd2cfdeac70c47c3822e51ffa0e45fca221cc43317526b4828026d04cf3cb050caf7e40100d8419d4a4cf2b0ece40590fabad89f42a00ecea2d810691c80d929659d3a73bea72faa7d68797e8ac916d18b19eb144d784947929aefea9e9db3cdf046143349ea636f3259322b57485a059cef5e43f75672d3ee236fa617d354743e2a7a377b8017983dd0ea548b0c522b701c722946bcfe92220bb7f9020e57f7316f8812fc39f91313825ce2c76f7cffedf0781f3b60fe59025a691dbc2b8f7b910367bdc9f61d9c32ac53b5d8ceb214186d83ebcf2b2826e4b91b0166ca234491d2499cb84dba9c6bc53403fc7b724c10bd476ea4308454ec5f71ab1f7d70aed57db61d00808252a9acc44a4e28c37df1b191be0ff25724ecd718183d208737d564c51dfa982996f6e99349d059f3b21cb1e12414d9f7d357de740eddd9ba14eda7ae87bd9da3a984ee23cd73bbb9545170e6f94ab2e3e72efce466cf48f7d67cc6106233fea4303ef76dd8af913705a7292adf1f74af6f4eb2e473dc19cf7c1bbfc74fda9f79ed372e487091130e56aee4e7f466eca32cf96d550662450c9ebc0fae1312c234dc669896c8115feb69d69dd5e54395a4c6a5e01261e888e5b2af1df227acff230efe7fd3c0593a30cba9e7cfa9763f3af790198dcbd5f0e6e0c1b8a5d3f0f7a8d2a96368f31d9245e92369e54f4db8e80902094babe5a17635444bf5e0e1a4f17ccce67c7e53f5bf8a3d8a78afc2ea3fd3f077fa4d9dc138f5999e94b94ec3230cbe9fc44f61c0de0b3f587c61e83f792eb23bfa7c91a01aa296954e591390fb0e7622cd7fb91aad702d421a6db1fb9e51a626c23549b655bcaa12d81ef8a777a833204f428dee4a6640e87223860e4d27a9cd535a4d7ddcb16d2baa00ce07e297a5d6b7d43bbd9399f076ce8f7e12cf9a4397b504dab3942a8e32eae16f29a159eebc36420fc7ec1bf9ced41fe9dd04ecb8728d190d50f6e9f9742fb0a3f2f64224e2f6b63a3ec286d5b219395918bcd8ce89c4b1b8a9fc38774c9f5f307f5d8486ca65c1a78685ee06bdd2b92f60596c2641621c45d1390a5c523e67265e7d634f417559c064f749f206c513605fe23819e2f49a6e99b88916e1529ac3e1a215bbeac16e3c802b2681c15b3bd1ab8073d7eb75dca6de08ff468ce4f280aba31cb03cc3839947a51d03ce25af861a044bdcace6986d7339e5fb9c0589091c94ba3c84d1f323f4af221a695e51901042d3e0f4c85da4d2b444e9a6802cf4aef317c08c4c6f8a058d996183e049fd524802b3702243f1bea444b6186989b7b915081390cfbd0703f24f42acf572ad9d9d4d4661f5b7ffb54722bb599622c4c132c55d8b407111221252d4762665831ab9f6b8c2f90294d67567e997ff6e8c633469822a815f7a1045a69310bb92a4859d4952b4b27a6f68d3436d08ced1b342a6223648499550b6b1b7c21b078544ac465e27f23d9bbc5cb87541aff08475c14b00686e69aff1580bee6ba477453a5e00b8f1ec1407aac85c9dea37f9b88747d3541b11d10028a9b0d8bd22c86990686e3d79b89a4332374d8327bc7f44b3b416d557ef0225fc1be4b67342b379e78421e47b296ce7da5790d5357997f150e06e10d420054b1b8be49730d7986d359ab67174024bb10a3841a6860be231db9442781a42c770e113fbb5c370fd1933110c6376c7fb6dff42448b42e1ee1303b8e7ef0d126d9dbe7933003a0ad6c31963868eddec3322628e18333cc9f137858a71daa93e88deb57f0b2040b23940fa290071497d3d6a618d7f5fdd4cde86404238715ea72880f2a1b357434d3d0657e62141cd110dbeb94e83111b8a1a0053a43cf44ad4d53106ccc513083f9f2051c1a305c28da22068109156657d02be4bcd9532222dddd39503121501f02b0dc832512e459d96f2f53971e01e89b5e3e657c3575e684ed11d22df141501ee81c2ff3a1e2913769d4bb30a1829b78c60444001225e0667ef9dfcf3a99e89313b3e61180d133b7831741a537a0a66bbdf3368a7b127678313960aa6c0448716406766cf3bd9c7580ee334c6cce8c4702c46c9fc9921794cb0990ae30a1ed741f68b595f88d5f45aaf8671d67463b13a7347dbc4aa9dbe1eefba076678ce557def979215368f37a66802f77a7e96360bdc0a007a68eca3f61024db6f8c6f032d010a1dd06d03fffb80a4b79b2192135ae001a34a8079d05895004328e6e1ca055c6ba602cc5cc03905b0e703ec6404fcc344900dca10c7c8eceed104ac00587745eba210b4fe9062322d1a3fa8af2e59ebc4b0afca7480b90b5f61afc297535a323caecf8057296cdf7501948f0fb67f6668a6c0bc96277d97b921737a75247a78076a2dced62a89f91d24936fee584f281cc889f279ea0e05f2e9b2eb25f2fa725b7077283557a029ff3d1c08105ab89b527006d117dd7900144f72ef55da02fa3adde303bd2becb10ceb8db8aa925185a053c47d7d153c845f86d822cb107c03fe0cbd213c4667f541375eb680c21dd04b0bc2dc5755ee843ab132781051fb92ee4362696936ed81c7c4f25a58929c34ce2853060042f4f708276d3a5b63f3ec1c51245ae8d7376a0091ccb0ec6fb970b8984d0763448f8aef4d92df4eafcf731bb6eca11352dbd3a0cf1346e643a4ba460c10135d9f35207dbf55f541fbf414075d47163837612d8aeb09315d760542219f8d606dc8944ae5b52782ac56a4541a3c136c7f61e3503b5220d359aa9ad94d5368191bc7c3e97985049e66e857fdc5f4d815d14cc049d80adce7de17cd58adfcf5a1f46d0a02f663993eb092989ac9a24ea510e532afc2a36bda2037f0e98649c54252fdf25d78fc9e85e4797e89481ae8bc8b62c5d6114af3e5584b163665e2706ebe2c56ab236fe27844155b01dc8ebaeb23d71d34d5a3773676c6cb9256705d66de274a95ae9b989c88e29000609978becf0a6a38b1c4233cad91a51161f0e7e241da20b2014c87ad82070d16b264a82e74a362e87298b7ea3d044f543144099117d3067b38191df94ac0a03cd6d70924424ed56bf239c5902db74a3391b62dd31506b27f61ae47fc095071ee18e2a21f3c32c96cfec01a71852529bf737ca364dcb3e947e9a9ba20b4d4a49b9bb8675c5cc7affc97df12e28aacc780e332b1d024f072d9dd314f193559a7b9bde9dcb0fdb0587e6553011b92a5c2346f8b16e769491625ca45181a34638303d01d66749617a9f4a8270ffac977e317ea6384f31b15e2ecd1ac407d2ce3226587b0c379ff4d925f9c8849f3a0be80717d77679e60df0a62b87ece9322bdcdecd3a02b85253bfdf9f8cb7e68cd0ed528f1d8185418ecd99f4878232218ecbb31c4284c2e3de113456d1d90db0eae4e507eb280b901bdcea85d744d03f7908a2dd6cb377eed700fbb7108988b4abd96a0ab504e51cfad46701b9fd6134fd501583d0b149e9b3528d7e31c041fcbe2e94ae74ca3634a3aec545616a3e570408808dc01e1bfbc2389f462077c41180c7c9f62dffd6e785d9176042537772083445fb331bf58b4164a4b0c252ed3f8bf3ff60097f839b1d8afbcc62a3f311bc4c0db46db655f8b5426a888ad3a4a89c3c4f0e4c04f125b6a5fbbeec9052b1ab1ee9dc922690e3f8821f6e9fe040871b1ed0c5374dfeed453788b48895fed144ced13ff377f237aab2df0219f68020dc367db99e3cbd580c0a9298eaea8e96ba571e6cabc2111bfbe12b7caba18c3c43f9a4e1503fb6517723a9c77f650ac9532907891cfe87da9e43d15422f5d83706105db60a04a1740bb2d7e4f313d39d853941423328c4f13143847eb0782c6de4c1f1d96487d3ba6160ee2c82a084c601d44c439b0de2a61f506f1a34ed1934fac07c1ded059888a83148db65ed1b615ac755a326bd62d1cdc6d48b96d6f2db70f67e9ce8996ab0da1ca4a4083c4e0452f984b772cb5bbc5f64fee36e811a148b6dbdf5dc7143139f1abebd1104cd1881012256e56e7755d83477cbfd7828b52c4f3fd246dac92bba3f589e3cb244bbedb366c94808344c97e7cbcb2bb4b8c7f8f2538576a933bd87cead7bffba5a385534bdd5437ae8ad94c086522ca5252c19a5247cbc34408ce9855c27bc97084bcec5b2a519aa2ee32967a51ece6949b53bac70a0d80bd5cf72fbf951581e410b84395db29383280be1ee47d3da6ac2fcb4c5092910b187ae6df7e9003c9c822aa1c5036ca45bf3322efad1905eac5c27f8483902a6b4329c863d2230249544c7c0441724becb040ba585f5da925c4b2d8db1ab1bfdaadbb1f2b00fd724b57ed0c44bf692741ff83bc16f591f14bc1e9f1f6a1ba8e4883af66ef10211d60c7d38ad232b3752818cd164e2ca722c5489aca4648626f422fd878ebbd613d610927f47ae98396999ec465ed28e0d3d6d68eaf70446fbdf7b23ac3088b70a3094710ddb09fe37de299ee51f8fcd6dcbe893cac74488911c166ccd1ed9e281d267d8a651fbd3982d59de4cdb6bf396dd795eb49a309456420c0fe0a7cf69f5e70a14dddb69013e1f1e1de33be50e01a33bde833ef0da49c2da3cb53585e015deee061c778ed650a7482ed51148ea76d854e3cb2b84d140f33f31720915d264fb2d78a44187637490f6cbcf5762b841c3dd71b8414d1af9f1efc91682e9168400508bd3ef94c02a1377d6b584681c31447bf5061d48a7ff6465ab6aab5e118871ab531dfdfe1fa9ed596de1167dfb9b44ea39ecb46316522409d977dfca378a4f8a107d1c8a9ee17db39dd1b447fa3e5e5739f23de0c243460d76efb8f10e1aad12964a04f9ef75fea42f59277587c14b0f7e8056af7380427ba78aa01a1e16726baa8d2f97e923656c9dbd1dac9f165e2e279145b7984038c684f2399a7a9eeb6d39452d80df65b64f9d6aa94666b7a0be5676a43d06c426d6b97dd6e3e6941026faca3904ca2069145d773c3780c193c69df4f994292f4998df8777f29522917dd85b814454b577d3729b39d10cb7a746b5ea61789aa48775ec3c56c46960d6b6790305560fe69e19fa12a2c79690954ce6c8803a15e65a6c2919e489b70431721c03b66db0139d44e2ac982ab3db1d968cef4f8a9cd6e0949b3160547291a652fdf903fe0dd62e09e7d981f2bb88d029bb143c648dc81aeab8df98650a0445c670c8a6d1fea1427efee4cdd29bccb926916141ea4926a46c6c6c734228d16f6f2469f3fb16e075866311134a0c77be9f30fba68dcb998076a9a9b6b80fe8444fd4af15205ec7006c0f6568b071da99f278a49525457d4b17c54bf312f854ebac8b274a28c7169e95bae2f6475530ccd75d45f6719b553345095842c6f3d1199bd8092c6ac2ef31b0abe839fc13da910d6aca26e30d8f4e9915f7a2b268e10905f0952943e0f29d15ba603cebc1e0999dd1d64bdf2443f0eba46848b1b9f7d1173449c4d264b76a48a1a5fbbcbbfc7934946ed09d485349e9d5f9c320251f73c7b426c3693912b98e93ef43bbf09f7664a4fc57d792366f5b941248e1751493180562e0cdc29c8dcd7438b2f8cb5ec007062c21c0fd79d1cd6894a9d1f022c7753b7f570b874e43498ace5f70c10e680626c33484279110172589293361915aa594adc7965cf0b948f7ea9948755b7a367855aa618cb553afca1b4919d9328b2717f2ccca08019f009cca6986740c08b68f75c68995b2cf461be218041a0ced67114f815c78ffb648001944cde9d259dde3e349c4cae9d25e2ece551b419e72288fb0be5376d2a763c1be71cbb4bf91c7337c7f6084506eb69f0d25581670543ba6610ed23562bf0bda569f6a6d2a3a8de8cfae7012f3e080bd485005196f50f9fe74f465b003dc9c5a02adc39b4e4fa67a99ac6ad26d88fa87ee74c0a5676e735ddc29bbac0d8519967c59ccb8563d4f626e46e01ade7b116d97b4a3ed6665fb6888bee0c03b86ea35999924132156b6109e94e40b3136c6d0c334330f535362033550ee3c9f7c2cfd6b861a9ea81bfc18c9ac2c27ff9bbea95e682b020ad6454edef95b1c8a80cf413edf45f9598c2d5753972aaf3dc3d7f082971c5ac502819b71241134490d261f67b7dda6c73ae2ccde8938bdae3a0a04dce89380f66866f68f9e09df99c5334047e7c3ead7ece4e193b3691415df516659253171ee511d9e583737fe0d3e764f6dbec665ed5151f1f5c4a2bdebb3ac7134d8ecb662e32337c976c2d65778a5ffbfa6dc3a2f8533c0cd1a5f9ef96108decac96a0bf138d2e9c3edeace831d382eeef8444301f813bdce031843fc8f2862fbf2f00787eb5ce274ecdc4c5487ed04e9d5e1b7d7c67fe694bd75cd00046da1785fb85366cb3c5aa1574e1b25d5ecbfa4b76e50f9f21c1649664c0ca438683c2b9d80e9d6918ceff483195b5dd3992e0ca78a818476fb7309292ccc17185ace589d8c3fb2807797eec0f82978fd43d5641ce23d6947c75b613f67762170e35d605254392c35de5bcf90db0410eb17540dee4b894301c903937fe1aa160eaf38b4a9ee60719c4b1b1e9efbcb005fb722876ce8aff4cac43b5c7103eeb8025c2eed3e9ba533d145a9f67c86f090064913fd4ffa8a140a0a6fd2effb9de3b7f68f75143bea561ed0235c094ffafcbd360decd9acc0669c767a3c54c4cab792b5d4f6db4636622ae11c330777aa74e81976489396271915ecbe869aa39286a9b9fe386cd02f5028a619039b3e51faabda4bd9a073a3fbaf9dd3195548cd82d48d8270b4897ec4c26a84e269caee679e5d8123b32913dc98a9268aa41ced7480d399e228c9a7b779ff34ade35b450844ae58895d254a66f45b1864956becdccaf22a60b7c81ee76b0f8d8050226e394e086c1e4f77d6bd2a33a5a89403eb8dced062e65b535d3bddc6b3a9dfbcde410a52cd113273816490fd518652afb05a42663f5e8d301c8a324505fbdbcd81021bffd2e15cae300a02e1a5312df1e57a421b18d06ddeddf8e466f3c50dd64aab2fb4c7f65e5490382c7b7074246eb919579374a4138e60a2b377dd22fa7cfe73516a5f7fc74f0a2a39ddfbb3252583e77ad6b1685c56b27217660b59927bdc7cf24a61d68f2ce0f7e97eb57ada78b65ad39f0ff481cd93e9ab0b1bc2918b176d6d0554e5f038483e2e6e118e71e21afba8d11ac86467c3e2e7ba42b48355796e901f4de929b607def70fc3d4c0779383383172b8789939954051efa1acb816ef39d36f01103a44d5300177955df54cc0d9f8009ca734bdc7c229dff7791f91ae9c37f4e680b99c13f0d688f01b285894bcd64e28a64ca39115f5cd41b587670160b8bd0392de166221a587d7464ca4d3bb762f3a501a1e18068868fd0e39bab46be2b429a9c68f22c197d2b55f0ddba52f0c887f3edab37911de56e12f9557aebbe29ca2aad0debc6723c3a06cc32a2345cf05e9a153a0fd347a137a63c20ae1c9a5ffa83671db5158961aaa1157cc5da61c0b1b3398b06d182fb6e488f0e1cbd14b80823cab0c64b3e9d8e6c8fa9e95eb70acbabee760b4250502c7fce7fe6bca7404a0a77286f46764b22e2dcf546c1ad31ded903e00e58b824ff30888c6c22a1c0344eaf22f0184549a1cf88b0e8b808b5d39a65c5a4541b4ea04b17ba5d43150872145dab3a3a0de88ef8dace23f3a2620651e016b29446be8eb7857c828a6453cd7da15cfb98480ea337f4d89ac05bb8f13f7f20efd8a4f1a5abf94c0a0c14a6308e9c9376955987ecb2b778123908a3a07474759a4b77a74532588d4a47948efe100ca56e3d07bc449f61a8b494d1350906c3de8ff57cb2d8829deb72d2d7cc23bec6c1fab16f7fd16d10a99be897be82b05d7bed1b99f0e2578da7a08598235270d4719cef1184128a78a648cde2f895dce887db282bb47cfc770645338f10ab60d59549ce8bbf599d03b0dce8af1e9f8dd383c041eb2986a7d10da0e0bc2f7dbb533822e67d887319a2172c5e1244c640f3c6cadec8ce833bc30f862035009bedadcd5d90c91bc35a3bfe2102c14ff8b039bd1cc036bd787b4018df3b31047d1ed948882e5870daf555d07181a220f5224f40de06490014d4e661997416e15bb1906616a833a515c450b2cd2fb917ae6411a28829a3d8263759e6095c9243c70851948d235910b6f819dcdc26b95bc9040d7cce9b1804886a21d1fd1cbba08c817bb998df53b2099449b8ac05ea9dcd4c40de122272f7600b4a88e405e805e6605079041577c6fc5e466c42895e7a35919acaac4a8f383ce695124b68de7da0a3a2a7ad1684434a26b7ad15363dd9a81a6191126b243c1f7546669f2e24014e8c2b312edbf22a6bfbc5a2e6823b5444bf237cf0a67b8a1bda8d926e3ec1c70e20a0e90e53b0ae77f9a22af1a19bc5a2515aa6a16d3c170a94a7fce789afc4fa5d77a24710319cce441932683b445d254ff599387b609bba5c7e633c09e43c44c7843826113967104b22c895e26ee27595093e1416468be399ca2cea3905b9ccb80124a1e56494e1ce68255363c1216387e46824e848e90dfebe39e79c54eb9f04329c826c0f85365205543aa61811a33ecf9d1d5974549f4a0e15b6542c790b2fc6a60bb893deef3109d3b00294bed44b20989066f347cc6a1522d2a185e80a33824b1c14b68d7213159331249386417b72407e401278aa48325801e9f1d34b8506d2ad7deaf6d3344a1673190607ce95753c136e8cbae22ff5d524c26795656166833d07d7fff83cd88a15bcb3e8347ee3de08e28b3f9b7968c4b586f519ba8abd046514495fba2de8f9c7c6c1d101c18b12fb7d0721a298e4790e2e0dcdbb209cffe0501e9151e7685f5fdcab0672c1cbc43b7459a0c61228fe321140b9e7199ad12dd83968261df9caca203c6039ddd001de9e8b68552330568724bd1a7c1955691c92c6645cf49a8f4b866ba1ac840d48ac4ec84edc911d95ca052c7434f8fb791b952078ecbe46a2d22d023e7044925c40b5dc27f30d94356e70e51180f6e899463cd8c98196ae1dc9ca210ff82a52a1b77f6b3a25c358fce6c923acb1b756c6abcca1263f2599876792a3e6444f770ae81df9f5589c4eba68a84d12f277e7b5b9cd039f830d090ba076a5edaa357fcb618b16c60878d4341d44f099b5faed45e6a490f5588a57055b1ca4687dd5bb5678c36e3efe015306560532a5201b906f1113e0377171c3ccf4bafb8c9fb9800121e6c62ca90b1f0b20e9c34e62465f578c2d2aa56d4061eb46779d166130d88d9b3f142b4b339d9fd43749c7526ffd45477b065c194685445585fa4fc1ee81c17fd48665fd6b494f24b460ed9a950198bc62d8cc3ea7b2838f9d06a3c8f73de18fd4716e401bfe7fb2341504820b2b38084a6cbaf08903b49af289e2e9bf72c7a5e419c9699c1c63aa2a2d93b768fe2771bf28010c8057863b87100dec57fd7090b4581768b2093002a000c01a8b51e2558a3b8487df824ea254c0b0336cc1e8cc05183434f89d6a2e85b99124c6e5fd9c85a2c78c8cd4ffc3389c87e94fd7e6046bb855601006e9ea002d030ce89cf74c7df1d8bdf000b4e3867897cc84dd531b83b81a1cd06be0915a1426c6e632d6797ac8ea4608f48dc87a3569a23d1ab5d7bca7853c0e1eacdf22ee8d02a13c0a1c8f1a03bd07b25493f0e084ff235bb8f2d6b4abeb14f74d5807706dcaba2853d438f24c83e8e986c6d85ae9c4cd34368a3d4aa76e65c3846e2b6d7c631be7e84389c96d359cd0a5525537693847df4acf6ebbd1045d949ab949c32afa547272db8d7374aa74ee66344ce815956cc3f4a4cd69812f977fa2aebdd979e3a799a50e9c3f6610a261b7f35771c8e7f34db753cafb25269a961ad1e920ef76b1d3bcdc8c1e0779c238b766e78d9feed27b803da40b036a1a566d5b30d61da703cd2aa7f19696963ea8996f4b3eaffad87c71163790c7b73a93fbd0f6df719392552b8b4346c38d3bf400e287031818d4abef7425448544495d1fe1a17240fc4756fee35ef80f5a3b1b95bc60235bee2db79432c924037506e006e80639e61894a085bc89425770c590c58ebc8989218b9d2c6f04d2ba654b9b6da74e268e3e5ec94939fa31dd2d87858ca6047d7c665e93fb77e239a22f47f6afe47a8301695f7f3302d7ec2bf7d7a34012e50435b9a74948955d5128d9e94edec93eea84f24815f751a0fad11f25f04ff6696f3665d55b69beb0ac0a37d684592c538d9b349525473fbcbf1a37b7caf22f04f15beddb2a776b783bd4a8e13dd95e7b6edbb6ed39afb5d7913721c6271d7cc2b8458766d59d3c2fadac296f58f7c3cad2be39eee33e1a6a9873663d9c861a6a0f512589624ced37af5944ae6a9d2132fd185fd86d9144728b8c65aa031178f2bcbebebfdcd2a93aa2627cd476e44b8ef161e589712d5759f46b0f339e4a26b6084e92e98c0fab924cab93c66f3510e4738ccffeb6c76d1f0cfd9cf6fd3d5cfb195ed839468cbfceb5e462bcc66dd535aaacaad304df172bc68d92e9e3af498d2f9237f25fafd7ebf58201034604c3c7514583a669af6953e368d136bfaaf9bf8f7e784f43bf903d7d09c41dfdf427106f664ced617e86e711d43ef3a6a6695a0c2f8cf1998647241a200d274d4dd3b40f87cef36de0fee57bc83bca6abeb324b220166abca9e34d979c2241faa0278746a466b9b48e0e3accf8f9338166d01c623a994930c9f46768df9e103a5ff3357966cf37354ec6879525470ac01cf72f447547e371d564d5089137dc176632c81bfcf4afcb57f3443acff8ecfb96807bc81a6fbaa68ecbe49120a62f89a25f2a01b62ff333f3b5ef9f796a6386c8321f5626997e585fb9f264fa1f1785268bfb6ce0f0db305d530777ad2e1f12fcb29fe149988c225144cde3f5ab7726abe6d361beb6bce4cda44537bba7373d2dda325aa479ff323c203434ffda7f5d5df2e69f7edd892e911447514583e6f990e0f7f5f0bcc9d3936259eefb6fca7c5859e17cd5222e183062aa0b86a67d618c2f7d0f8fe1c54ce3c53ce3e1138c17de96eea9accadabc7056d6f442fa25efc523d2197f3248903e0d4e5dbed01265fa40b80f4b4c3f094af71b5cc5c25798e75cfc65c1df853f8c3bac428972ebd337fdccbede4024f37af4c1907d3f9098b36fbf8188bc217dfdb622aab0a3ea77577c13729d42aedf99b5d9df2c6257751dced534fa7e28b3b63dc16484bcfe16b76f4a6f9c4c2693e9c3a1f3e90bb3efcf86ec4993d20ccbf7628e2fe80b0aba41a007055d8eeb57f66c943de925c1c7c0056ead24afa148b07eca550d93a8fadf75b58388c0a9ef2df2a6bfa88574226f42218ec2323bd631c17288cea1f5ec8432f37022e81fa900f5f0c8fe517cb8910c3ce48893e3665950fd86722de7b1bea2d577f7ef58dca113e335d550eb4b07cdefa02a508a1a16e52514b3b82b9d9ac0bc4bc788741e7d1778dde0bf7d167015cc97d5d7bc29c41fc845d22ce1fe8db71f875df839ca7c7f480e314455e7a8fbf7635401011c42bef77eb4f7de2c6b2f67ef83293966c9510a13b17c7b64a7043bf3ec9743823452fb33db2fdc216712bc6f5f4e52989892431ef93e7d1ef7e6be0f7923ff3e90db45543ff7dd4e2677d7e5fb32c6db7db6a3dd3e8c4240e20ecff7659037fef766df77f836cb0a37d684192cd319120d0c29473ffe6fcf90684e207eeb335f68834a39ba50a61fc270a01d0ee4aa1a4f5fba5c55e3a3b1d0a23ec4a82fe62847758c79c667be23e82a54f7a61728af5f680ca47f833e8dd12c997e7b9d1d88e62b8b071a9395256f48a7ef5d7ee6fbe56995f9a7f999afbf2b49d565859999999fc922414af3edcdd07c30f4cffccc377b38a9ad8837dfbb7c488f9029bd42e6438a450ca550c8740aa41a9ece9399f7e15735629ee6492f5882323e4ecbe15327f335b4ba4c9998976aa70463467a9294376462626262be99ff6c98f953cf2cdd949b32312f3360cdf0a993a9c9b81f7ea5f3909a191289f42fdf344ffa70e83cf3a72b12a41e9337335f48fae87b157943e34cc021f879279a498313c17e972913f33253c38b514713f06b78ae5f817f3326b0639120edbe1e4f4e8547ee7781e50882611c8a1135f371e68b12243de94f39661c7d45389cb9a54ca9925fb6c03d854a0e692c4a99e2937b073d439b8e7ecc7c4e25369d2e23e967267de10ed95d48314f63fd7d8c1fce5f97bf27793f62be9404499f53c127fb823f4a999225878e25e658e44de854b2c89b10d442de847e458b17d158f7a135953a97930465fc8bd7a4c67f3446a433cde755ae80ae9a2e47d1c7dd67fa424cbff4d5f8669c8abc0927eb4a97ab3a4ae9cc17b3174e8232de5fc6ec054b308926355832a320369c4ea51798d1067eccb72e2ef509c44d3de24823185cb8186de0c7f6190bddfd85d4ba54f9fef7d2ac33f6d1c30918a54d1ab1d03dcadd0a5afa68528a7df828ba37f3b46c7396af7319e5b2cc93798e525925e19b7df663c691f6f917c56a59fb418bdfa3ed7235a769397c1a72bab773559eef5a118e1b6de0873f059f5adbf74a8eba07e40ee1fe11a97e76946f0eeea8659253e2cae940a71cc8f4155776cbd8bd49cdedcbd92f65ad349bd635b9b5ffdc2e697e560537d684188c36764eeba878b36cfa749f3c389d4cd3bdddddddbddbdd5feea72127a7d43d273a9d45e85a616c80915e7d4651136ba5330637d6cc39e79c549b39da0073dadc66d64acb69d6698e5984006b3b40c05a8e52ace44c1fb0e728c58a1230cd510a1554c83226858a29f80022434d08a6a8b8a2518105ee7097a3142aa6642e472954c0f05014d7ba4a1e41046cc5c3ca3d1e5657fad0b3ea15c8c0b5baf3c706b0d5a555e859dd1a832c4d70492723285a5d9b8410b1a0462228b6badb93a2d50b9814ad2e5744088656a31e60f0b312c00e94a2551ba18910442be9c51cb1ba980441abb8832a6c005b492fc608ab5be2dc6b2244c05a75932b42ab6e4115b155c3a4f0b3ea274a60ad2e0b32706287d5c160ad6e8cec1833658a0d58abfb02092a0401f62226e68955cc13acd595911d6598a8b293a5288acfeac24882091584629e8031444cbf4c91954c11d6cabd18d6eacec88e3393341f460a3a2bf77a0925aa78026b75637a0b9f2d624c7aa28d7b3133f8df273131c42bb9294f4c8c36acd524cdc73932a507b0d5ed1e5c51a56815a50efa72af63900514432be9c53cb1ba339c7b1dc5119fd5a5e1dc6b265808ad6e0cce3d8a8512b0d57d09d3410f3f5e1f31021341a92456fe7d9c7b788b2db0aca417e382d595c1b9b743579982b54394a265e867e52fbd1d648aacfcab91f1792f2306cd8c0c193264d0e9b267c414497a71c543ef20e53d42c52b47293bf0c961a720cba791a3942a581e9f6ab842c5e394423020c18621039cd500f77f3280c0314a6e970441f9f2475970d8ae8e7f8bf2f436d039fe96ec4558ab28bb1761457e7cacdcd9a57084c02e48c03d5f7e572596c3ae0033474c59197c2aa2e3aa38c961976aecd3050b0e39295c9cfcf824d37158072438c4150b4c04289a924b5f3e8de5eeee988d11a15957ecb418885922b158d42207e9042b87b2d4c16a20af43d8af6cbd8e5f4cd39fc1d2afe361c5037694f44f0a4926b24fc2565a141c3651dc119f284a26ea2a37c42a72fc36d0f1a311387e924833010e65900c9250b8a12a844c8e295e05c0711c87a416a21cc6a1d0635b244b15e35f3fa33fff013fb167a9edb29f9fbd05bce802598a60259f06e92e213142ec3320aeec171df58026f6b380a3e44ebf4024b5384b62a9b24806b0074e18876600224355e2620dc12787d2c54a81cef48189e11e2c6591c4c21181e72b49b491d3c572948d2b29349465285d93c592a06b0173fadce0ea50f9923d31c0a1cd1c132c5912b4f2e5c29243f9cae1dc6180af7ac85151b07cc99a30d006e52bcc9f08ebd8130312947f0a0287d65afb4519cb8688ccc7274c8370685de5c37d50893f259df1017e856f221d0b440648f4313fec6a3a9988a593624a0ebb02748eee93609c94049fc061d72ada84ca74614ac696a9094514a47849a01f7913ce279cc89bf933b3792347cd90eade71d869b7049260501038c4594a0187f3e77f5c2593002909ca52aa20cb1f2d40d2156d9ac85154e0a90326330a9f1c369350fafc349376d24c646efcd780a91c3836d6481df23324b0e6040ea5cf8f0cb7040e4fa74e02cd263c525972c82373f3a7bbbb230fcf4712ecdfe97b1e1d63e0c3b8300f196af0707af890372dc4bf1c12942f3d750487299ccfa280c3ae938951d7d4420849ccefceb22ccbb2ac7b724474903ae4bc5ae070b29c7575b2972ea9e32575c8e75ed809d889e43b962e2a423994aea9737b70886f20220a71c762f10b1b4b88bb2887b87e3ee428f9534767bab8f9d242860a8f0fbfa23f3d4eead0219f068165f622168b75e4a59186e22773f3a7b9ae48bce8014b0ebb4ee609ee076314585d510e9be5ac2c1fb35c5287fc18217c92a07cd1030e3b192370d82cad07386c96b3a4099a480e73c61863a4f423a243137018b588fd326a8183b093c3a845d8577ccea7b4d65aeb0c879c327dbfc2f272f0742012050efb8a1657b048d5735d4449707b156b42f9c261bbb876750ea50e1524d2256fe60fb7032c5931fdf1e5eb8805824f0eadbf0fbf9a9fba213f1f32481df24955706843a045a2220bbbbad7f7803ea9ec23e747a2620e7198d40c4179d2efc3afea4b1df2710ebe114e5082f2290ff0cf4f9de089292f5be0e804957c5d749ac562b158ab27fe54c456fe9237f725862c3d128c218b1d0936278b7c023972741883ff4938d1c4949a7941e01694a516733c69305db6161b28704e3aa7efe4800927535091a1a393854e163a3a3eed76355aaf6b7369aed68a6054a8569a858e10ad75ead4d3d4a9b4d2a71e985d8ea0b71eebeaa1a1c95908707740c7e572752e60828067cd6cca7ed7d1397dc706a939335b3d8995ae4cbaaa740139d00bde3677afd73e9637db5f8ff68c82d8df7e8e7e6c9aa6435f49a21063aa66753221d493653509149273f799c15c26b9810b97d9ead3ba325775b9132a65144e7474747474749a523a6b9645ccfcbb4e68565aed64823ad188bc08759fb63aa19f7dd83a4ba0b06cbb1a96681382dbaead5d388e92427a0c2173512a5b274e25e8987c80fb4d4ce0b6a937b29452099eb33f5a02dc59a8075278608a82fb97d88112301de400072628b8ff062cd8e04577bb6a600ac2fd3498810c924022063000321d81fb8d009fd8e86e1d93135311a617985c60fa313531b500f79b887021e5ee820032282e60964065f9e18bdcaea86a9e215e3c3c115bfb5da784052b5041cdacb6c19a4e6f6a8e4477b7900d14080492eee51455db90cc10e828693f4804796e806c43ae1232b40de5afa28aa121ca12e2a8971141f94343360af1aec3d85110901a07b2db889a2f833e8ea8295fd62f5699442183b6a0d56ab55a353362c4486b451446855a4a7c7acb5b52e8ee09ee3ce847e8ee9a75c967543467320a5aad56cb8811235d134d4c5a53f5bb0e08f94310468c18e9e10507c144b36fb5562b08dbce83268260020bc28d183162e4490b9eb45aad56ab35690edb2e029f19f5599bc89e6844d35bad297cfaac9482737aab25a1702e9834ba5b6f4faed7d146d3b2ef99dcd8888b11d28888334247d06ab55aad962905a625376aad95ce5a3b956fe54c28300d613a81c9042625a61e53094c24308dc0c46312c214842989e96542d2dd464c474c4098764c3f988c988a985ca696c90793084c3aa61c5308babb65eac1c4ba8215aab0850a5b509901bd361f575d1b386201b00228a68415a417108cf4f27a75fbbb6e657ad560d442fb4805b668c2463eb6c84745dd840d14681a72ad868b4f965a919d2e3eb668c2b4a2f9c31c923c5b0c6b5c546d428ea291e3c9654cc94dc8554084b62a5b1579136e44d888108584a696ce55401c25df62dc75ff600e3b2052086db1d98364cdc80dd44030d902d1c6044564e52023ca8c72dfec64ec96a359998e8704bf9ace01b5965960ee79a67ddc413fc62144ef3bdb0404b526440a6bad8852211a85c236982ff9fcb2bba98e9cd149f3b7c4c8d65554656fe4c060f60ffce1c1dc4ab8b1262c1565f9a94c9333bb016925158c8a4a3eb6563a93e9572a5ac18c8c75954fdae1548fa0739182398dfce583aef24f4646460a0e79c8e4f08517e28e082b0207b98ad68f190d7288a2a9ecbb2e4a1afb01f763d80b567a450ab429715f9b12f7e53ebc60974a77e80b74a771c88fb4478292a7bbb3de986c4cb61f495ff5eb10b68767a75fa0498438f27ac28db1492a17593717641f372d98c9103e940427c8f1a992f802e5691cb2c7e5c755d4e5274bdae302c5058abc095d6ee07283b823e6cd053d9b96ecd3847a98501f3a04e5e917a8127a024a02da437bb20b6cbac0c4ea0f8a3b7ad220873da23c3d5a0e84c8f16992f88206a571c851136a302a8265559ba2096951a0f40b9a12da125a0eb2fca8c15e3013cb9134173d6b12639c40b2089714dd5e9b068b36b608ea92cac9c949e5e4e4d4501e9d54e5c8912307fc226fe4c69a903494a51c8a3b22a78446a40d49947c6d480a0eb528a1b6445e82d483d4862289a511695486b42851e48d90546954b421d250f549c15e718703418939f4b5ca9a7755cdbf8f1274ceead5546a447f285010140aa33e01c832fe645dcd0a0aa4c5a28d7c5b44479b2ddbbc991ce54d66330c44a1c02418c5a34223187064ff68901080c077d40674253581ecef5299090e6dab3a17f6532641aaa405f74729e07e9b1bb97b61359f1400b9e38e6e2fc2d0d95fe6ce71f4a3bb1405dc5f8202ee2f6981fb9f80fb63c909b8bfd48452518909a52c4a5894b29496505202ee2f5d0153c2c24229092524948e50ba523242a908b8bf6405ee8fa518ee2f5581fb63c90aee2f5181fb4b55707f8908b8df7236956f0e8a2b4d511a02ee2f1195a4c0fda5285ae04a42c0c195a8e0fe12143800a9148e166c6e00c0060aac4163466ac64ccb4b135eb0c0eeee9ecdeafea2b367b4713f9d4c27af4e90ff315e9c80fb63474d876cadb474cf26cd82524a29a5b745b92728897e94d6ee276a77ef64f1e736e7b41c3e0d39b920695ab669d335c9c97087bc6da31f1937e79c6e676d5bbf29bfec8f47fef978228a4bef6843e96d715a913927c9c565f483be0b9e4e857abc30c1070c5b9e5f8f2cb8f14be9deaf47c3523d9c8095baef0502f766f3e68df23d9d606a4e96c32e4c0145c80ec58a106e80dd09471f4064c0dd5f1fe0214c859c9c9c9c9c9c56ab15452b8a562b46df708c53ab415259a7c391a820291d1d5752f393524ae99448e4d084cbc59303209e7044beb6b0811214f4a0a80811405708400916222949a06031c18e2492b033042b64e96109ec0a5470318f906245cab4c2c40a0d72121c6c62b9728506f74679c37d38da3ebc1fd6cb35d71d8e48a41f91bef73a6b1cf7dabdbfdd6abf2160eebfd7dd9170630e78be472958b81a8a13696d9f943efd5c3832e5e0fc15cd6af5b2a75ecde853fa95fef4117d39a259dbd6b6becda146de3c224a098872683b99afa95db392d7acbecbaeb62fb35996bd0b67a5fd75ce69b542dbaee43a4f4a29c745795333f53c9a270f4190e987a3cd76bff98539e4f936aeb4aa81ceb9f9d940bf6abf03f57156bf6c49a7eac578563f178e4c3938bf7a36b35fbdac3e29d69f597dcdd6cfea8763b202370c267f89318e54705f76dffe30cb7552581b4102f1030398e92f81fb9b7ed35e6ee3b1a4e86283ff7cc1a31924cbbed45c489f339bf6c630cd938b4ec290737ad3bb34247851dcf4ae8d6ca16f1546425a90383ac54901b86091bc74dc78df1f61c54bc599623366d0a04183068d199fb7239c4fddbd525a51281b366cd8b081fabc0fc3f9ee3c06c07dcf7c09e002c400463080f6885980991c347bf4c8b905e0820b2eb8e082006ad0c8e11e75441d5147d41175c41c71468d0cfce30007001281740cdca90a312019c000084000021080000390417ae4ccc9b03200ee3100e763f423faf8b1f1e086814bc00180a0226e056c3c8d801964069941669019642260da401df1f60806704d299d21c6e8930b3d4f59c399a9677917c05d0670f3c6a90ab2011c04463f66e0a203389b518cff3470f608dc23f721eef401dcf4421ab8ecb58761957d2e1c997270beab5b657f23c059175e654fc38783e7261dc8de7a2ebbcabe85d10c93c5b219cdd02cd62afb6c4e600235d4102f05e69c1470e72820a9e42183b631665e27a533c618638c99b4edae45f74c0a6d4a77ce1ea1db12ace55e826dee2538cbfdd7b96d09aedb124c732fc1336f4bb0ff80fb670e5fb439e7cce69c737a73ce39e7a473ce397bce39e7aca79309a7e79c178969ce39a7c499d3a672b482e7dc9a521a638cfeb95c11637354d2604a0298e3f7747777cf90e0fe28e93c71b162bb246bdd9e7e392a86eeeed688685b903631de881100d4463df24265475ea03d5263d38c3059a161a262468c31464e867b8d32998d47beeea953cf1d07b12dc132889729c1f819921859cbd2984a33a78f32a798183977777f61ad11d403f408edc218238c172e6260c0b89fb6dc197ac4dd7d13a21483e6e563f4e08f3613bb7c1e375fa4cf2584bb7badcfb95b2366d0a801a262fcae008836ac11d403f4080500678da073ce1b5cd6c28d4d55707b0b3612470ba31ff13de501ba1dc131fa11df638ab4230699d5badbb55dce25b6dd638cb3fcea42228de27dd9524bd0b639ab98556876bb55f09c3a17077743b3dc289bd974d96c449a5387e432944961c54a7796168e49e98d5a1f6727d5dddd6aa1b81a0eb1006f9ab51e8bd4e872dbba1b653dfabd77d3ec3604504fea75237322283b97375e0e3734cbbb0e63b791e903b2cb88a25ba638b896f31251b456e09b35ab4ea7cd6a8bb6668bb65ab4455b8d434ebcf16f48b55f479bcc6a73ce398ae1eb7aa7ebe97e449314942022390d39d9ac4e0aa2deeb5ee097142b762baa24eb3b2236c9d24856277520c9c21dc462b9aa87baeebfa964dddc9908f025b55c2810cc0aba85dcb9ecce55a91f292a5cba4d9c4ef877c238e68d9972948c82f3430aa438aa8d1c29cf914ae5a070409139e5e809c6456bda76b9d188bb9b36850b16a6ad19f5e9cd9cb54ecd8008cd20446788074ed5c991d249d90c441bf918a0487ccee96274436c444d804f261816ba1775c28c82643fbdf0cbdeb318b2f70c6718182eb94d25987c6364b286a570b499d328880da7d3662ac9cc38d5a6b559753c5f36d2c86506860647b624cbeb5ee097148d41e9636a2dc65dd7d9149b0b89868b71c7858951eb88cbe48b20dc963027109563e869d19243e421aab6ed6b92822ec1e8c34642fab05b246b31f775f7db1a28ec580399a480c10167fa210bd36630f1059aad77010bc486f40803de0c42866aa081485acf470f1980f0a05e0e38d8ecff8178e31f1109ca1ba8951de546ca4a5edc31a3ab3630ffd04ec249a1bc17da69c849b359a5a88933da116d56e91ca5402fc7176d76cc556d2dee5803d5c86103d500725507224a7e0f4145604994b48f145bf62f876823df24c5d5481726df1c172ec61d1bc94a175b7ef003775ab1b5df754b4c413001c134c4040c1374d62c9e97a8c40c5bca61ca6824008020282316000020100806c442e17018c56920c90714800f668e42725a3a188792244761100541104341c6104280210819828c3254c50136c6147bd90a028610191e697d243cb39edc4c7cbb32c85dec4e5e619b96f2d99f7478fe95ceba285e40d833289fcb853101457640a257578aceea9a162f42397a2662481aaba698669b154d004060a1a5a0da91d67ace48fdce3c5ee1c212432bbe3bbbc5da99ea789840499567978234dcdb48227fdcd22d6a93479c247cd84c584a3cd9b21d168ff946bbde3678f99fb63fd5150b755c718bec66adec7a12c701f5290b422e17a972ecc7721c4f26680de5205a19f3b909301d655b622815a2f712f470d0616734f068b950041c057607c530dbd08ad62c63cf4239c4b0c12851cef52d7bd2fc5d057930f2644abbb8cf0117489affdd443e12eae6ad6f4794d246f456a6938144f51fab436fb42e1cebd56cc440374a0bd8de397dbffac29b9f1f778b2c7713d6742e1ebdcf363f8c76434d98ac9639d98b929f940c191ad18e2c5edb8ec4036c3bb1bdafff2baf4ee79776d7fc8a9d3a1b65d232d5d6897ca368f78b21d2951462584a749e5aca645da9292e211e4303661ca3acffc447dbac09f815142f9ce9ac124118cbfc12786682650417d757882276bfdb8964cc0e1f951a222f9a6f1c25faff3bba4f9e94ef593486ed1f918b66bdfdbc15b7fd570878f467160db7da41daa332d2a1be9e3958e76186668c4212a18da601526938ab3df9840350cc356ac41ded269359f3745a8e01194c1ab349db46768033d7a249fa4af33dcd049795871dc623680342656b750d52eebcda772e6b1e4bb1d2587f5dd677fa62192df352aa5e8c332f782cdeeb74e626d3735dfbc97ed3aa2f625beb27e63ff902a4ba3913225c94aa0f760ff8c34570911c77e414bbe3c21b7187551ee0b31c2ec753600b942a2e397f294994c588025b70c92d841883314cd88fdce87df153db06ecf4cea2254ba30cd9562bfaca23ba26662b4c8ec0e349ccc0093b1c3cd1b151d436689ec110b8484115e5c01ac0459f914e1a49f7c8f379f245356df1d3a2bfb97da08ada14f2320486d62e9c883e4c91a8584870e1796be0faa54468a4032e0bb41aee9ead7722750ddb7859a0cac0920643b04a9903991f8321d05529a1fd80105c5646408bca866b72387196bc4584d53c4d9060ca7162a7d396c0f469f9ea3abbc182d442234b16b3535895b5a7d9d4a2a382af4a72a335b05c06ad54815659a9522aa26ff811447c8c3e9ddc1aa32dfc34b776490cbaf249f1268e2301662ce976fc00f06500877bda0936e85b160d843a79bf7fd4d35ec149196d51fb89c79cfee262250f9157bc58b0930082c3581470a36a765e01417f5d906644c6c33392b936b97a84094618b6dd6e038b1326cf933ca493569c6f6c34ed31e27413b32030a148606c8bc0d1f30854a09d17b8da96b1ac390265f8c676b115edce089f3eea12c2d4dfc9261c70dba59a3f57cb004f60918ca400891b89a6fef005530dac2173bab7e6b00f226749cd767ab3fc8ab4b8a20f28501f71c786865c09d5fbf8aaa8ce1d737b47261d2498d04cbaffb83505bcb450e6d647724a97ccb843bb7397998da11e28f65ed5e9539e92e1bb4757cbd3f60d681d3b2d02f2adc70d656cd0f7fe95629659afb17d32da6ded71a967cd22dbd224b034b95d607d2eb6938262fe774417a544a2c95204c48fb840c1b2959a2884f5fdd211494c5a772e63f63223da499e0f2868538f829a90afb36f95ef8a47076f216407c7a12d670929f08a42f4355350fa3609dd19f014a9ae90b49f63b1b167554bff6488fbcc6722c5c78b972a6ee6635a2730046b7138d0cc5fea613c71ccdc74bb61a8076d73a8bb114bc75576bbaefae818d76e3c9db75c465c6d25662f6ee6475a4b38443b1ca4963512a8eac969941f757dc1104b2303a21c18bb7fb64b12038e72471b3b8633ea8eb40cec613c7c8dda34253b762b4952e1ad9052757ab44ab80a80ae9855c5da2f494df7c8185456d4b49bf4bdd5b182935ab2297db8a3e84fc6eb5818df5c1c2458fdf384e14c0493168c42231544968a2d32dbe35b250e458c311b0caae63a272782ac93725f234ba42b703763cd94db8ceadd846f95e8160b12114274b4ef18c455bbcd8ccc5f03b9a35ae9035b14b1833b2e9a2e02effd00770cfd508b60932bbc6834cef34365c41735f44b2c32f351ad25949065971918df9b008c635838e12ef21c57a23354ac2ba51e35e01441d5bb93cebfa60ffbb81cb61d40458ae6a9ae64a874a2985e9968a22e4a384f0ec462b1ba0ee4d8d5d1974a1c4a73d2c56d3d4bb43ab3fc9901d6d2e64621c37b051340b9da903c1ad7c8c1e2fea141247250152a407f6f9fd329ebe0d69169e4b568e23c4db59599dafa62aec8854417d74ee00d9eef045e99f356e4e72d6573326ecd54efe7670aed70b351583c050c2f2fc2ede0db1ee6be099c112f7324187deb91227e6ff4e1cb386d62de7b3671358320888d0e3a130df67c5fa9c77402cc586054cd9948d8ec2b6e16b56f4e00fdae0467f420535a97326430727835773ce4e3b4d2103a0bffff4618fddc475e3118be2a90c424e46a1f86b69d10da5d55ec09787ede48d3f80e11f6913c86572eeb9c870624f0e3a1bc641eada3e7e3651e1be94aca56e5ac1970aaa70c992191a3305965b76306fc77e00693fe52892d156fc5fcd4e6a4ed22137900d09d59da3d89f8337398fe8d25a68d80c16a1c740b104c13ce3f34c8956af3ae3df8c69acec9d8c44c1f5f16e1e3788c05c09881a62dc781d6e4d2e627d13e7de1f903060538a58ca9333dc618a0f27fe9407494a85beac06b351051a680522ce378ef165cc2349869c920c0b5ba1b7f379842197811a4a78708f0e0bff04b5ddf1604f7c4c4a92efa548903e7f38e39814d67d68ce5bfcf88956cd5d275a88a27bb254fafbfdac366b129fea3cef8faaa35c0e732b6077dae372633a0c3d83e2b1d618ecfa345b339c1e8ee68dc3f32a44fecd7f95cd6431928bf291f77f067ae093c68b0bf053e569e092a807e1f008f1a5adb837e3a2fac473f7cf42cc9dc89cbea3350d05fecb98b8e9c5d18d2318c422ece8357aebfd36900a2647f4373d4115aca42cb051ad6d4212480fe0e9f83309a96f8b2b22c168dd0f0f129999e8860769408726fe5d90779e90a99029d0e4d92bb027626052807cfa9fed6473aed9718f75860c2d6d5fc8a433e57e74b50396d031a8c26bd7ff8679a331cd6f1abd14d2e3ae73933d0adeb45e344eeab1894362f6bdebe264be2f38dbed232af2820f75f2a847a791b72f5c2546504dd8f446e21b0e187ac06cf2ffd4718159289747b743823927589908f6a6ca2521a2bd070cbcaf0c920bbd262f99db17bea2cae40290a692241febfcce61369a179a3b8416652a61ba81d2a63ac39f065bae9b174a99cf51de2cfb6df64bbbebe5746469aaa2e8b66ff9bc276357e0dbfa37e39136c9286f6fa91635337f1e38c35116287e780e2957a79489f2bcfdb3a577623a32cbf5732767ff604a5bb8350f30da51915dd755c5750ceaae9be610552e1c098556ed0049f8892e0ae0cdff0b818b7103ed9d13ca0e0cd2ca46c7f7e2d5f292dacbf3a873ab518e4f27b019b1d40b98c9d819bd378bef7c2b795e0f11cc1f34011fb2c501913128a25a4dd9420cbec8de2fd0cb71ed448f68e99e87b0351e751ae180ef3ba88a11d6c72610444d1638e34ea1c967ac5c8aca0ca5fb4e3b9a755c292ce2528699cb11f24ad0cef4450baac0a345d7c5817423c854768913cbffb534e2ce11a8c7a9066b0ac51888bcf87d264a1e0efd9edda34a55c771a43dda6f0d5edd4e5795e4fd6e48d4f3488e57c84f7b5c1b5e2958b6c80cf03e142a2dff7ac434448a65568e6fd6a951b0806e8997d2237884f02a0e04d82fd56b2214030bef2d4854dd132d29c3234bcde7384ad9be6f027d61167892fe6991ffb750c60e5a5fab1f04570a5d7cc57176497932057907c29318d59cd861c2709e71efda4d4485ebca2eaab2764636819b0442554c2931a0907f193794041b9d07dcf7151e011421c8ab029525d81574dde1040d377fc9c063d0ee7bd51541afc95946a7d57f5028a4c6c31ff785008d3520f00c2b3d33834ed9a72012e8457e2feaa66860c0cb13265100c0216710296250522a041c4302f36758bb4e3db1bf336e19a91b6947357007992b96c0b36395a2f398530a89765b0bb0e7bef1eaa810449edb0debaafcaabe04be6b72042fde19358eb2be8e7361119ea8597dd9dbc6a7d7eb6531e2692180d62e5cc0f11fc36864640b16032032838d1cd8bbf7777c0828f8b22199c387e3c87fac1d630b3abf70ef63619e8897f737b6c9d174c1633e26a5e174c14b72b9a58f4832ca9af48ea31b2863afec53727c11a605c4143fc47e4f6a36c1dfd00b1c0f4d5e9745ceb4ee6648913f43a797ef61645bd29e5dd2843c39d777b8212bfc69bc8ef96ef88e0dcabc81ef78703e481ad2f200c7a0b32e263ad03b23e48bd9ed2d8fdc95a4edc36572d07ba37240138aff23753afb4eaddf1db42e68587da4812122fc7328f5c23c1bab78fc4ef6b0d31ba7218b5182d861172e97eee68ba8a2c275b3b78428c281bfd628b87d8f3c0b0060300b0535b94861128e17a5a24e2f82e293c0f59be3e7df98fa4ab0e3b3c8346f96fab85ba391f077d05f1faf462910a8aaa493acbc11aa17cf742e1b9a98dd3094c75afa8cb0c4b5f2c6cc601efb8ca7a374de41831499f1a765b582945a048648e3f1c27b22338ed15e6485d60a3740ae732e92ccb32de7d4c273cbe4b5e66a4a4e8a37eae6ac93c58f1e6360df1f2f2ffffde293ce4a68dd7d5ee268f0078373ec2836a0c454b265e3d19f140dbaee883a58ce9bb0018eceba3a5ed74398f66a1dd9b5aa2fc70bc7f2cfa0a5c6428ac05088078b1f48256e57d56f306c4bd3399f8019a12743f33f8cf7ee20183c498e71ba90139524069a2f1dcbf02fce2e9afc6ffa4a354922f9866337cf2012ada46f864c10a1ad6da3b423e88cf30545ba53857324d0a95c71f180644dafcdb036e78dfe7367530761b1f402aa07547f98a76897a0d5284d22be4e9392aa40d23e720a550a141f6d0f054cacf192298108f4ee618e6c151852b64dc7441248615a8dd857c86c08a6293c65a5ee75e64c47ff0e4ab2aec4b33384a817a7bd879e8212a2cffae34c34419858366a425888c341bc62fed9927bdd54ca834d023b66411b814db8e34db32b75389278b06d9f7bafdd4f50cd79005aa8fa699418c9552ef1438a2f8f160502d41ecd107787617d2e0732e1f6de9eaadb4b08835a7001e8c5465354f1d4b3955463e3b4ee49a19547304fa931e2cb9e447b0f25527741e5916bb82a8a46292aa59645fe183cfab3ae9cf16bf7cc65648b0fda625e933d7041dfcf08d1fa006e0a4c028dc800eaff9ffe3288588432b2a83e9eb7f06f6bcaba27ba5fee9dbe281556194f506edb424653cc0b62ecee5b71a126d2f0e9e4e52096505de0edb2b3799936f026265bad2f362fc09304c96b4ffb41327eb74d58948af564f47879d8876416cce0827442e3f4fdc0e491e40399affe0cc0b38540007ab56515049a2fca0104bd979528840b4bd3750f14d21644ea38b1e14ad293dff6c6bbb7d4e9f76324e9b08088ed586e9e819888482aca8cfa9f37908646add03b64b30148e790f2925deb80ed07708e3ead259a7608e45f4a410358cfb21fb51e961879988c13df2cb49fc213a383038c851098698f0623e7b0c3493459047d6a19d9c5e1cab1f6c7248aa7a1c762bf0d01d809e9bb8f64483f8ff69aba5affecf4a4d686890aaf82da9ae080f9eccc2ea38c2ca4c66da1a332ced239a810a72c11921fe567587c984a7dac95fead76723653616e758bdb10f831ef43eaffbe8d73e572e3d849698009dc9c52c4eabd145aa12d226d0f2858c5ebbde6234bd31f7f454213eca4989a0e16207874f929c104df2e2028c63556b9594f6c198fa464e93b21d3e25ee2f1a9117abb0970f9a7e9556cf0dbc6d93416fa35db84b42e178ff635a5a9164c60432a44838c440a8577e915db75c73fc9fb0a33de60383bc8f551c82eac26e123022f55c266c4b4211a54f415c4750d56f0f621c148ab5d42c840e6d8890d34a6e088d1c5cb95f6e774878028d49ece93dde0c66de03df309130793896ea695b9607f37efcaf1acb8cdaa4ca8db87d6f7ff958a6fb8a242f382af3e6f80b4bf4d388e25850ead40eac5aca0cb24818e280599cd959c19c2c03a2100f157ef53b67e4870d4723544db8a44c1be72ff62fd40abc05394b489a918a7110aa5a5990ab39256f9c3ace4005eee55f14d44064b424198a2b8044b6b19933b2933b042f1e0721266b3642e089b0719a8d0b06d28691ec2ad9f089fa8183c260a52ca0a7111da41e5a4214ce6252275fd9e8879784a4af1d8e2020284b5b4ca58b2d64fb9e49cd9f3e4ed92f0186ce236afb8be73e44e8867cdf6cff80237663d8c490b66f8d52a175339dd82e5470f19a1c59bb680c258c6ac011a127decfa5ab631021edbec1a19fe9e0cbb378dcb429626f6d96c472c95b863e251692033e44deb653a2c5d8cdb6b372c1fb666fdb4f30333b26ee71efced6cc108309457faf75d1258b3eca011d183ab75af6075b1f9654d6cd6dcd360f7fe4061338c4fdff89c02d5ab28807adecc6c0d449b6b4f13366755720f749e49bd110246e87a87957136ed8a4b83b2e805f8b413e8d1fa5b568e32f11a2fbf75ed31bfe13c6c1cd51fc19069f983eae90b8c06daf0984bec07f7b54438b943053856eb8b2d6891e82732246d8f3016aeea91c62fb1168cbb9dde0881f5dc2b262286f1ed16302704e99e80f240788f00af37d64824471d909f718a373fb09869017adca4433371ce592751be930693f1663a51e8147fc7d8727eb4be88922dd01e4879ee198d144e6e36f5c85e64f46e6a8d344c7d588690ff363981de1c9f4b3c414194455e3795338968488c7b05441bd11e2ad9c2324c939e231fec486e5361a9560f07d6b4b9de7320e877f254da63837e644431fba29696a5a42320d59827bdaf4125a4cbda7c91c6c8b05860172972ce4cfe88baeac2a739ad7f66a243263163fd770391ac509b299252ffd66c140afbd9bf88b66413db100c2200485c5acf040e992240df1355c45323b0dbecc11bcf96d65a1d8e640d1c8b4e8e0e19b4be890858e903e69c72e758e2b33301b3c222262f908bcbacc068007804be19cf4c9c47df203385e66e50419c063703de36432bc6c463ce50e6da89018021841ef2054d8c0fca087fb36917513a1b46e3a1ac553dd4c692ca1e0cec262d3cd62c5395fa1efa182a43e68e1aa870d2170670f7186692202eef10273e91bf8ed16e10d8c44b9c80af4f25dcfa27487ea644c505c8d293a27f4a20f907448e7898e46fa3caedf7f6e08e51fa030e432d6cb5c63eb306c1d90205b7fd535bf57ed6a8a53a9a2d85bccd8a9214d16ad84331256c0a88391ccc4344582427e3372b5d5389c42c03c99eefe428af148da9a1228ca0fe62e6a25a98e79c2df01ce7a6bca32037d5ca793f2fe0b3c1999d8e84f6b6e19443c0a20b1685c782aa3113ee0c7506e48af631bb4b7fa92f829df665572213a8b9f91838c09d6bbcb57911a5b12cbdef23ea492bfb96b6dcd275981c805631104318d009762b71c4997c62654615f62133786936b21a39360703ca653be744220677fc7847e6f25fd77f55f55df13bd553ef3096fa224b1ea3bfc39d1d1f965269440a44b72c519475de27961234517d332a770e7d18ba7f4fa0eb59c4b39cccb9bf62dcc9843091ce616065cd003913f24e9cb6e81c9b25b22a05efc3ad04ba0a3ac9b49a91b0edc21596c50e2217da9f754cc532c2d63f1d832c6c9653c5210189ea5f665f04f53ffe236b339434e387cd638dc00f08aec9d483fc3eb0acfb80f39ea1e4b5985714c604e8f425a743976580a24ff6aea54c8ab59bb041bfd110ed882f93e7746676c148c506c1ac5c74d323e49468d3dbc02cd100f022917234b47ed7067971b90f70b87cc0bdf08e98a67dcc7f9fe0062e3471a9364a446d4fd5ae1ef00423217ae4ae21376ba6c3b6bfd717be31479811e45e20ad6fb7d90f3ae600547a9edbde03c606f9ba1c195b6e6e227f849c2104ef07ab131143ae97e3dee20260cce3101687ec449aa96bc8966552699fd640c3a1407978f1e156239c4491fc9b4a17da705fa1b5fbe1563ba14b8237e38227d3df0f04341e65e001be00f6dcd0295501935f90349b65a0a1b4b3d7669d8b7ed50ed058d94e30d14648b95f0b3b2fe97ffcb4e15fa661977de1d13cfb7b02a727b88090c31647f8642d02667423f55d87dcabc43b78daa0040650a10b181e6d0dddd4988a647a18ffff44f6e1bc105fc6c0ac442c1c4579910f7d037897264999a711f13e219c97f68120a4afab853e9f227ef3ac8a2cf4ba21efe6cc45c23a8fc3886a0df6af7bbb678190923ad4081f964dbc747a2ca74654bc72fa678f1f70a6b7209e1fcb9264b0351ec6d230ab6651366f2ff901fa43f3788adc2e4287f0aa2ec7c1b0037eaa0eed77810c39761a7bcd63a000eb87aaa0f5c1596cadc9843e4b9cacb5adbe45ee78c7119bb23d822f25e70cb37f571620cbe937e7b6cecde1748af150eb0929fd2cae5b5715d5a4c9326c5f3ab18060feed05b17913bafb2f0e46c59831eb809a3a14d6e8d2b801114e76c81c598ad242ebfe785fc354f0ddcafa3516a409e24d3fc281bb9272a92b69caee9acbab6aa503cf83b5d33dd6d37ec0a56e18fe315ee6db774a505e57793b1968f765088774d537744405e40731850f59acafc0461dbc4d83582b77d267eddf685826ee8c6c4530a5a98f5d1709d1123f7283c0cf7341c414e768675c9f526098714d20731be0fde8570a9e4715adcd839dccd8083e9525291b228a4bc8d975306675120a99b9aba49c455db64c290c56d7bcca377138e238297d9bb5196257a43d8086659c9f55b56f1a2c5a1fe359c712368ef86229ed05bab7e177ef2b56084a38471d8bb71a041a661191b77c842dd4a48ed530263ce39337d6e2e9bd0419cfd8089a545c587b494b960490a89379751d1c93d5769053afb4a4e2bc34651e7e8d33e5c4151cf26400faca01cb844a04b53ce360d955c470837964f7a5d56d5d32b20f8125354418d3c2971c957c18b04164aab802adbbb586393a2348fb4d24a8cb6954ebd3152651c242d543cf137de27fbfb135dc3af77156a5b4d0c40e0e0b174a2e877bfd186bd1a54ef92e2582ffe34297add9b07abb2c50527290298279ac5d4291ef9865a1a8d4ffb063cdc173f0b0e78ac0b30e2fd09abd513f731ad6756c04b018d31aabcff78bca398accc2193848637c23f0d9faa17e37fd805c58df426c5001e82a8aa528c7ee45ba6fd78eb92bb79b770f4ce58941f2a2e4836a6a614497fd263836a35eead5e8f647d903fb56656a3e0b0cbb0a11526cd29cf7dcafdc22f1f1f5e4f424f379a39428d5338475ab6e348ffae003f553e8b763f0d9b1791874a11b142e3b878845b0cbffdd60865aa7efd3f2d393f3503240c352f00e837fba818483778fb5094076e8fd955ec0abcb2a48ae737a63ca388b5c60088e2ede47672646d221c54786e4e815e5ab8c9a736b6793782810101b09e39db2fb2c9b8fbe4dae2a66b9650dac5fa41de5903cf20ab9050e6021d5903dd7b26a0cad27e9486586dc85697d0ea40be4846445770e2e71d53085b223927c97b8fa96fca49e6fc403e30a206abfadbaaf1248926f4e5da0fac784acb8840b8f6ef42f9fd480669cf737df5a2538ac4152bfd8d08f67ec78d7048f4562b53de8ca72e9a922003c82f053d8f3c164cfbab85cb80f095a5e01f8b8d38b2e7bd0823bd18de98c68c1bef3841aa6378fdc6a6e0cdeddc8953ecddcd8d14fcbd36172c6757962e784b586927f3aadaf71c0e0c627f676f0d7c7e3ed41cc4c378247a504eb508bd994966b1b90e8b32244c972f2cc9eb0c59265735b0a53ab2f2609bb1fa4ac826a584d28d878be40e6bbb987915e54ca1156bc2af270c9137dc1d6fddd0b9958e55a63b7b6800e981844095c9d973e3c1e29d8a391a20940e44b853b5aae3f8daf77c59c347e513569b62b2638949df3fc4350925f57370c92fa923856484285b5c775303f8469c96da30cab3d149cda544b889948702570cbfb1325b39b90d990a636242e79b88040188f09d70fecb0b8346ac7e24054ceda8d22b27bb369433b6a4c2db59c7b93eab4a2644ef50d991156aab3cfcd3359e95a57c4a7edd1550c5156e6ec1e8663e25b1147681ccacc2d70b4f1377e1b17169dd4efba57a6c14ac2971004b4ecec744c5bb200cb71452ad48d232e2fbb04af18888e81784e15698f81b66f823fad5c886ba9869a8a987656fd62214507778f4b7ca92134543cf8df8d9b15bc29fe89d020c8210fad4a24f5b6ffb75189674c5b71d96d11e7bafecc18ac40bc5586605accdfc1e965a70df4ea8aa1b9d175c70aadd411c3c2460efbadc3f11a1ec43011f762a4f761bf4b3aa300ce7bf1ac05c8cb064d5b2402cb79184de25622f348380c951016a71ebabe980d4666237498b7328281c6b4c0d60a02a22337743a449a9cafe6376e6f989d3ae59555577b5862da86bb4e63a102b9a6695bb16f69a1bf20004d977a480c1676ce6b70f9fd56df9723116da1fc9080f03c70dce0fd7627523587daaf80f0a31feefd0019cf3534ac28a8393f17216cc36f4854600605197bb5e7a859bd25f7a6e2696341be140247980464463500380fbed8ab87f9253a76a2753e3e6f6dd7194bd4c01dcb32c8d41487f5fa5becf9626092d89edcc97b793e71d93e824ac579eb19688c25a55d10673440e1807afff5fc512c7a84ad8a99603b05ededb39bfa72450e08682d40212452a4b319505b20b78b59f59962b80cab268b11a8cae4b09dfdf3c1a6322fa5f0ebda02d595747e9d0972604c0275b6222f0bd48d8963cb22b0aae78a15f3c534c7934043f26187a3eeccbc56667222d2d0e36d82e2100ec0791c4345acb71862e705a97ad2a55155b8ea1b6ca5bb303804626350d33463f24b58a884b1fbd31bcc26d2bfe0bebe1ea6c0256d8d2d9ab71682741f971f1893cc2631fbcc85b965671f1c99971388a2e3b0a175434a905bf27932fdbdcfe9635feac7a14434a65097b37f88337e0a2f190e3b5c9d2aaa817964f206b8192992ad743e7774264d65e630c6227010d4741606f52d155bea43761905ba9ded1cd6c6d8090a26a235aae374b0d3877749be0e1e44b96ff59b6a5d769894612c29aad657311ecd7f8678d9b584016023fb48df033421e99d44271d2ac5825e26dfb0b32c35c0a62126d4ad623f0ff80995d1238df8e98d7f0287dfbd8c8f76c9a9fa81b1b235280f9590ec10538491d5b1cee5f412cf6e2a70805630b1ab577b8242b4b38afdbd68794eac6f901281adbddf1575a85e727a6e30fe9c59896c5ef27774e816ae90d2e0de7442fd8f280295d0be81c58ba5394bd2e6792615ba0935e16aa5d036e3d8dca1f96f4f71429369ef71217498769bcfd668c0a57f09685545d70e865641ee523c9259f4383264aef76806de11c26c244a9f292e6da52b003124c588811ebbd659f175a23a11cfdaf20dce60ebfcc86b7dd95a17dd6052ee0770a381280389d1738225e0a7c8d728dbcca11a70507731d245a04cce5fe446754ba556a388b69d0c2e55832b02e7aaedfcd86bd2336d9057a5bece4a3b4011546481599a8321f11324474ebed2a02ead4ee9341dd33a458184a30eb5c58144c9a14bb6c3672422a494fcd349d9a6ce5074ab30d24b6fb681a902bc3e3d81f733915ca8349f1c10c91e974d3e25158cebd492f41515c0fd5b480d54de37a4a54ddb0e49b1de7ee558a0f3215e52c8f6270d19b50692ffced55d1f2249c0f8ed240dff8a1dc06993123b8b430ab5898a40b7313c42c9f0d1ba55ffa8d7cb235eddd6a3519701b85a013ce53ea14e3171eb5e55d0b14fe6ca35ec219d226807fc74ff918138af7d59d2c9e453ec1a572b178751aef672ed927fd72ad7569e613be80e329c7cc11525edfdb1249d23921bfb65d5d0d6e201d02ddc1d70004f443457145370e1bec50f2a5147490f4bd1044c8accb4332b894aee0ab83b86d44c5fa222e6a248a835451db372e06c349573ad84d3434f29faf5d562337d941654600a1dcd385a562cd1074d5c6df1a73f19cb3180647e5ba36bb12a42a59ae52fda006341f241c4cca7fa33d708b9f749648dda0c0393e0f4413f12f345ac675821bda5ca8836a3c33a928ee16317980e9c12d361235d2780d8a0f45ebe84cd3aa152df08c17df7bc3cafe5104f78a5dce5c7e6157782a860cb11f0fb7bb5d91c8f2b75e26f23e045f042f93016cefbc162f485a041b3c366004961c00dec2ca2f01bccfdc882f14ca3abe6acde8a120fd15bb03ffb8981718c83dbfbf013e7e04dc82a7da88f7889b07e4efdd455b018e2745549383a436b13f2e6cbf9f4341ce617293c134679dc0b022900686545c033fd1dc1375f12c47a950b2a380b41c01147250595638ca176df3a273044b21a6beec0f82db496db8064e412f6fb6563dabddaacadbaed5526ab52ec33cfd8c499602ea48b8fa6d810df66e15d51a7b49cd2a942ebac7de38220deade67661837b40f02f9981bdfb6bddca08dc92af5d334784e65a096041d5327a8f7ccc8b0ce34700b7de249edb5cef31043d1f4e8816f5b46216f390cbea112b02e53b03b42e96bc9820bc936e651998371c3f51f768278d4e682ab613d952f9393d23d7ceb8ef6e59458133e6832acd35edec07868a1122f4a47a26ef64d0ea31aeee324759054c1387aa2d571fa5286ad0999252540d9b37a82206b7915a6d063a97857b4657e3f99d18fa4bf00f7b3c3edc2d1d891a111c20b37fb89a744eeb4bc8560deffeadf7536e021fedc46053e7a3c41eea97b1335d338047dab40fa1a15073a8e8750e32105c914d11a93c2762848753edccc7007a90470a20f81761d7b2d659b8f18e75c9912ae33b1134a640f5ad58c601a78f842696e051b0469096f6e547027cca1333b59f87bc40c3912a332be380d541533cc8e4a955f21fd2e431a2488eb7fb70460d8fcd369f150f3824f342ae15533508156af3bbca416e6ccba0616734f8b628e7a585e8299f730a891f6d6762fd2e7215043408c3674adf020c1a5d2ccb150cf8a5a9bcbfc584e5642ae2a8d808466f18972b014646c35eaacca55820c18f1861d2fc1fcca9883af177a3042d4343c471b4d1d8451e4714ee6517832b1e588c180c13b283f4d5136399f924b8dc574149ea824ac8f785d626249e453af14e00d602450ea35cbbd732f5d7742e46636fb4f33488b5b8f4b92c20da15fa5831a60daeeb8038cc71b9bbc4a60f43dc91f3cfc18267671fbff8a27b202af77aabe2ed2c8e529c93b4636ab307d3eb9980652853e939ac7d3c6de1f877685491d2bc1e6945d3fc498b913b77032f7b3ede814276b6ac26849eeab38d945c8ec75e9db7dfc278d1e70c8b1b9d7bd1d1a01486c31dda2d77692c98bb5cbf4a77b804d7c2a60e34ecebde51efffe0cb94445499f8cdb2cb9ebc8ea838564546d360149e71843809e044999fd15e46ab31cd4031ba4dbad65e8a66954c78d3a5c4a5d40b9d2d16cb1e58c19781f02ecfb84816e81740063072174b6c6f9c73de717d9c1ab1918fb5cf400beeaf880daf4cb4755ac61cd7a038da83a180006b64ce66eb644a2def218eb78fb570a85029181bb68b7295c0b90e43a91ed32173639ac59ed578b271e74ced7f861ee6e659316710e403f3cdaf0482d71dd9cb0088c472a53777127f97aac9b320996c4208f75047ec8141cc6814ade74b912e687938dee5bd3a8eaefe06a35f5bf20cbda69f0abe7a0a2c776b2e8b001ee03ffc6a66129592edb8ec336b628d48182f3821a3afd5fb2a57e755aeab4f2d497ac2218df0cf3f2139391a230b9bd040745776cb9f105dd4204321444e7bc77835dd9d2e06ce914b6ca0fa3b2a902ffbdfc460c931711a990308434b419fc15a33552f1d3fec435d67a7df232b77527117f05dfef2ba3a1642b53c208dfcd305da7d9ef02e531054e8711ff27d81274ac62492f201de2155ac8428cc367e59c8e94e7705638ad1c9407cb690fced22eb71cc1bdd8c6490ab1a2c2ff20f605f5fce0dfb4f18feb1baa79faa83d01936b7766b72211993d1c18fe96b071c05fd0e3b894a683807f43e458c6c4aa41e68d2ee0bdc9f850c2bba9daf7636e3bc6de39101554f877096f6b990e0bfc193b9d06463874459a102f95a4bb3496d34fb9f48eace7f8e62bbad020e33213a1455e0a1ebfe549302f56cd58a553129ab4e8d364e4b397bed6dac02a6865dd077a9fac78fe624bdcfc53ccbccc232b4755ae2d131a415ed7999c25ba099e1ddbcaad3d9b9ec41cea1b5881cc43180847cd5ab91057adbbad8d6344eb95f82a84e67f225b19d2778829c0d979868c7572263600b7bd3bd3eec1609f6304827b3f90273469a0e54524a611301fb61d58fa004b945b5fd34a5d5dbbf57d31eff02ded4ad777e0ccb454a1f6a573e3d779def874f0adb72555b7de6d4db7b3b439a6cfceaa173de5cdea5b5d6ce949450fac2782e0c521031abc708235aa5eff4b96bd1df905db905a5c11b189428ade5af14e0c778187521990f7ba449126e5fc528bb32c83eb0a187d01a27f88df470345b999be8037f912a8c2ab6c9a6c6054f4b799f4b5647286fed1b0d328aaa93cb8f2dbe3e80b502d388b45a96b0f2c99d577cc22cbc05e81625ac878dbbcf539e5fa6eee7f0632eeb0c3e74f90648bd7fd446441335588451735f49ab9529ee918d9bc4c4731340a93f37015ca922dab548b3e151d1c6f12f68ca14cdfb33d4dc4b06658f1cd21e0ee8297442036c2aa80117857a2ff1e35fe97b8791449ecab476365219fb71a23f059b89c5d72eda683b593446d07e464cc6fcbb678065a1326f40316c5eb55ab92bfd9cf3ca97418dd5916968925a1b42f2d2bda9257f7c82654536cee7e2490b762e1928da04e62fe42be2facc768164c8ab4b8aba48d7181e5f57baa0a24bdc06762e1fbd791d28575e8cb361c972ef11c09e956282ff029444059acce8002755bb0575dcfb3ed1c0d1619a89dc4379947f73c9a0fab1fb4d4c32b7f9497f3612ba079a9375d2418c0bf9e5497ee5dd90e2c09581ec7ebf01cf5cd18d31d52b276b7fcf8e33067c6ae46d4b093c711bd90e74e1b29c5db3c9cbb57773b479975e0ed4cbca98b316f2496780510fbf41049ae1488d95fe2455a939978777d74f88c118d5935da27617963540d6755415dba98a0033989211f992b3817a213954437edd310742aafbfa124cbfa75a74ddfee34c4d67a24c0c62abfe7b44009ab59f875d4354a5c1034f24b55ff8d4ed4f033c050e07e7bc55f509fb6e587dc1a0de08c46e382db87a10b446e29cf0dcd32b7f74c995777b26f6cbd4f415bbc890ec7e4482ccf5863d3a152f0182cf4074099b0241cd4545b288197d0b57412bcf19aa99f9fe47216167e1541076ef14c649b854090a6931bf6e8a4aa94566bc7d1b642e91604b06546ac98ab4069a0c0df1c3b2554471391db1a02f4cf12211262bb7d136888d2eb3a25ced0ff8626947e7c45579a7a86e3a8f56e0f799ee6bf8000f941683f9a7a779cd2c0ea032927ae50a4988216021fb4db9b5f1366ccb89f2d5e365830a57b0eef18f879d9b174260388a2079475e6c7cc3a836ccbb77a2891c3e829028109d09e20bb43c4d2db6386825e3f08f640c2c718de082f5b6cf75b2096255a8a9f1390e2436152dbc5b3b2dfb4e7c614daf88f79f9a2fb11e459c35e640e6dbfb66b6139d5f520fd328c59a52d8a47003391cb094be7cae0575bd0969d92a0ee50dde112414f649ffa03e1e351311ebc7792a71bb41ec4de62e9f2d01544c0b3ceb56007a3cba33d8a241d24775d98abee609df3168505f3d2de4379041be57577a0060482fe085d52f26aca19798583a15b1f055467d104acceebc43113280ebb179e78240aa96f55bec297789b152b95fad7cf26c629fc75db1e9f348c9505cb8b7ff4139da6c2909e3f4fbe77ef67311bbbe25be2f464d008fa4d68fe4f82a4d14595cbfdfbf90f2caa3bb8e0f02e9916adb9f3cf62f31fb173950af388d99be433541b4573a5c353dfd8ecbfac33ba4743f2cf908133ebc0da6f6ad1188a08ee663d603428c758eff877eee00bf49e95b786ad0f505ee8f637fed339a7a6fedb1f1102feae94149b52a52c60c6c97e87eadb292771af5a0ee7bff75b78336184d9a47426a8946d2762247f7164f48e5d5172c8f9cd0254f87d60291b2e1affcbe6bf3975c9b248d4b2bda7b4f9a3220554975cbcf435197529648f09cb898d2f90484013d1de26164429d25944ab87069ee6036d87bca8419454c9305cb101e3e281d70856723afb6fab76ba2c68fb1decf2cdafdae1d99dbcf17624d27c40f3135f7201d5d06e070562b039608efbb2c5a8a7d66d761e9484900659909971981135d38e90ef66e604bd6ca3683246ba683ae84934b9e3e425c00f65eb1b4e742d3a22df4e83d582389e16f48728c02088563053124fc865073ea2697153a4c035c821684e95b391fe6282848e6161068c0bd9b542aeb4306fc465a09a9634b7927afe578554938cf1f6fa6772f7fc94d6b76cb466a2a8960d10e211c865fb5c72a4a9bd6c88ec7bb7198be41f526c6c619f7a82314187716c46508b3125c88721eccb4e7e8621fff47c4811dd30a4f4c49950d2148d88bdd2cd1ca6106f1c2a01634f1188b0782e57648f5a38930cd61166f9bf34f090d0286fcf2a26894ba2727d966526ff2061a39ea21c4f6bffe0966b63405812116e45147d20206e9e5c2b519c1a33224e0cc7e524f6d4449408e205c9268a67fc06c53a37a99db2c4020b02edba48fcfa45b9e172740a49fc861a1f27c5e71f74c4d9d002d61496aee8699e5c39ed5f8cdd7a66f19c6a8dcab791cf60a22eb7b1a07e513654c9873297f3f5cecc0ec4917601551a8405797758807a9c3d042fe4f9c109032c88c1e887a8465e945d11e7061a36f9d72979100b30790c9012ba87c546a156be880862e02d532b167cc0f9b369de0ca7e1588cd96fa0e7e77c9ae0bf112fcf5cb57fa567d6d19837e86f7a14305c767d118c3ec0501e3f9821f1bd116fc16eb954ccaefda3d482c2854a7201c5cc936799bf28623a3e2e1d66ceb298e5f06d582ebc919552ac29623a6e547140bee846e9d2444dd648f09084f1728bfaa116df31ecff7264ed3c8ea0fbc2301ef4a476ae536b8b2d4ade14f499b48c3f8dfb9e30ac40cdf0072f19d048ab31d295a259822bc58bae169d664eab8a98c103bee22412340c47fd8bb2b939cd3209be00fc1a48700daad74bc1fbeb0962b493ddb8e592e5a42b2c44443fffeabbaa283125dd82b947e8be300943678660138695f23a4efc86a2c35fc1e5f1acc0e87a0caf098feafa9032eb186eef7f4025f28f046b562090f7f67d9a98fdc170ace32c2e519acb18039d2172a2c9ffd5312888c5133d200c30d3e75f24119b2f465706bb161c3ed0757465d81f116744b6c62ec6be9ab0500b39ae695312e4fcc8d20402e55c353ce369289470e11d9e2c8812e279540a55dedc2fac23ddbc2ace4c9731aa31a695aded3e45c21fbdc874f5790f1d690ba338a0c44770f846a10b85e23bc8a093e06ee8a77cd2a3590675ee4c2468526311db0aac669ec561c0b90febe9f80b837efc97bb82166a8357ecef032531b55d0568d0959dbbbda41a6e8e63e0ecc1ff71fc2630c7f56ad46abf25899900a5e84b2c3b5b76c1cbf9b82c20a3230ae8791075d78a930f1bc803a60850dbdcfc8a14447ce42654156dabac40cbe00aa1d88433a84203438d267b2086be7ec49c42640254f2245f0ca97a3586f4ca354c7a92f0beef84bab9c4c51fe0585898c43ccb232861be8a29fbf647191dcc8afaadaaa50fc149b1693f344bd97bab83f032456047b06ef47c63e50402d5c1436d9c47f4aa3e6d288765b229b09d5a8d0fc4d50490bd158fd820b3d477ff3e3a8ed7aba3dbee45020acbd8397ca3325e69396fa71cf3510228b938a67d0a80bafc9d3a50fda729dada14c2d36b48dc68f2fc83ba46b693202c6ef963a648aa4f5ff9fffc348dacf646f272519b48ce5bbdd84b09e6186c382a8049ec8dd3f9ce92977672caa725751043951df83ae0c34845207043fae6ee5202516711f9ec3807c86594c5f6e0200f046717895f1e4a1235a4a516bbb12a4ab90916c2fd8c050314fe4c206897d4c11c7e418bedfedc5bf93e1e69837db94630c1a29912cb0a62010242239f8b7659d3911a3ae789d0ec30d10843f7cd435e930231c318f038f7800c088198f2c41d83c70d3852d2c7806d73cf719a83c622c370d4c64993cbffa6f43a1efb4fb4c399b94e7483f7380957b01bb31a9c3a438b8a699cd20c6b9c4b6d6bd2a106f1371107f09cb4bfc4c3fa90630b04e608ee42e5f485e3721ebd1d6a10373194d5720423b53d3689f055f3cc3dc59f2a7d4c2db802eeee0536c6e31d74c3158e5a1a56c6f9b4f82d76179b5e26adb36ae22b26804876d344a6f618dd946744feaf17be8c19113074a4f4c25370d4a885c7f78bde1a8cd38e051e70625a5001fc28f9712eec88116a5cd104f54fb977d24b59f8cec2714932da06f0227a1e85761dd328fadfb19a9059249fdf8e9a60987854c1e358f844c0739208c4c920bd7987ed21927e189239ecb9a2053369ae891e17b94b5a35e5107f6b34d4fc6b5d8159736e2db5880b78328427c122d40c2fb1e620635735b1541140486033c8336616c52690a49226429b312f2fa8a8fb2a801d20e90aad445d72527f18f65bbc256db5d1bb557c115ee4d086023fa655b4accf44db64f663e9749ef446479b2043fb79814eb05c76de607ec056f64d370c9c4205ccda55cf9f937a85b93567692a77b062a1e8417c0fcad5b3e2f1d040a68f80e16c5d96dab80fb3e848e09f373eee4a04bdd8c2cd4ab35a56c9c50fd7dbc601e39d856dc0822d9318e6ee6a2e27f2a2107d7a49386ded48d4f4e5d0d465200090a1d0e4579a8b8cc2ad6d00fe5e4e285c5801964d4ff4272be55bcc439f3ca006f7dcf2b37e7fa6cfe64852c490f5548645ea70bcc887fd27c324a32fff7e9a50b7d567a5edfa209f71653c00215d0180a4edd1f3476e1a702074663cbed097d362e39722933a043c1d7c23140608fb575447e4cf6b672b5e4f94178c1eb502261dfcdc96bbd7e28991c73fddad5a2b464e9beecd4f9b5280c3b77ccd6a856ba02ea054b934e1140228d3409d4a10ee2651b5eaa3b2b19880ad3370de913bb600d3bb8ff83dc13cb5d83ffea2bb006358e27c58b58c19cdea70b4ac69d5b6728dd918156002792e0e6b2e0f19bd7768c5d7cca88cde84697ee591f62513251dc46df7841cf1f47e3cd7ac243697bebd1dac2f4638ef16fd63ce628422a520f37c2e77b347e1ee035a9deea0d5470dd4401acb4cb5fc5b84e802c2c07db4bd066bf008d7b3db89f16c948e736826d49e8cbb97a704852084d78a2b1595b2063958bdc6dd1e4a39f2f9537ec2d6b12b3a0926c044bb3a9e7cd443e3cf7c23605fbc807333ee384d6613f042d0cda13c1dc869f951f20ce1564bea30893410b31fda9ee8d2b7034a892b04e53b30873dcde64928863b734f033aa5fb9450e1de08dd880dd8916949484046a458c0bb79fa9ec765d8027a46d7c2c4af98c5477be04ee6acc7b2780444d9974e978b8ca4ed7e730d99eaebc0a17d82569a69763aa58537ca3f60da3674767a2e3835d3a0e3e1cac7d92b74ede07267f692fcf72559de98ac45f6a2929e9bfdf9cc0dc6631c55da7acd4e6a4f152186701efe97790609441de7dbbff98dc45e222a884c0c5467b40ef70931ed21035a0d2fbefd242020e8da8b95301860df4aee6aedefb75615cf09a2cbff4d7bef986095d20909b34f22942f99ebd2b9fd008acfe7b2eb3ca05f00e221a0ebf9a53c73b10179e6463b8ea1b35bf8aec45c80d4de1b71cd13813083e56576afb69147904f900a8824005b237e00a659f03162595e0da1b3bf02444b86c999e0f6406dcb04cb251d23afe94fded98e201603e3d6fcfae97ae519b652f47b464182645a99a6f65563b092ac11cd609502a796681d19cb9a664a39351324a80081dee0fb90f72e64a39d962f20edc70e7cd237bf7b772018fe99922499d83f3ac0f0588c1bbe3379035c89741a4301a04aab16c1579fb59597b3e07882e21f2b6dd05bc344ea22e1168143bd33360d585cfd3107aa64f7827f8a83c68d221d163dbc3fc60b1b407906466b272eac31c3411f1818c09f3bd60c3c41840759a4e006bfb3694c798d59f4736ce089ad31f21ad012cb9e15e8af149da16926edb15682fd9a1ed2386fa4a795f00bef1b7761d89974e24b55eb0a20077d661ff7df709ebfd212e2b1866b4993c8f1f172dac034a8237bbf5a0975d41d39a6e2c2db6bed3138dc629b4b164ad4bedeb087b22f4c77418fd3afed17bd6605b7e36df06017a45866f2dbe3611907b5b4a8343df80ce5443aeb10e147af01adcc444f4bad37638115fc4460de50d569a927f73ed5d97edce606fcb594b718d8f234a5a9a2b6fd07df2be3ae2f628a693209182f18ea7ab009f8ac3f5a3fcc3c1980e8d2b5c364971c78678eeb7b0e22289a55aea55c9da59e289d6a85514d7277affc64367f36fed1c6826d0d88a30b816a2c718bbb932f1e40330482872886a84d7b78189851156c3c01db6f5cf395d6878cc2dea0831119ede8b9741496d1877aabd7b38020dac493e541531688d435ad8db9cba16df5cc7f8382a9e2f30f7058f22938ab2238a7a58eb1706f948e90921d42802c113a37a322ec756080f762764db1b93a6982e98057cccd73aa2f3b53a6a16b14fca695201cc4fccadb4bc1f13d418a7e773e960880b840a4a8806a19598095fb15bd93df6cf61a0afc6fd985e3725fce7e78f3e9a144e0808fc6c87b64add1000215ae66cac3e368f116428127c12ad0c7904b6bb434c14bcab86fe1dbf54920df0afb4cc9650568442e94d7a2681d4beff2f894d8500f7df92325a52971d1665b430249889bc775b1d7f1b2764267a3d29e1430b8e34337916abc0a5c6f9ed737f8d0304958584230ca879e2c7fa1e585699d63071c40784b100ddb7a81e0bde65e100dcf9ce20e17144c3ff7e6193b8ba13534f0d7147d84172a035becd28fcf42cdcf64022b9911da39dfdfab9cf4add9f97b36eb005ae37684c0522a50d87d494df90fab838dfaca6e072a523aeda7824fe154b31fd8292d8983c9ee6ce22e4bec7100632b4282f953a04acafaa7ab38126cee2165998e729540b1fd370c85f560770a830ef21cf956bde71c2c6f069cda8d5f9b10dd0a2d3b5cc340c9918476e2e01808860cd75b64aaf394bbbc891d6ca4411df40d2a31d70031dc0a6838fe28eb4314c6f05e7956ea7b91a943efb1ced417fd426fb754aa9fb2bf52e030065c9098632116965aeeb438222ed6ea0fae7fab7ed07f709f50166b0ad5131288ec4e09f4cfccfeb26de88964ec39cb2a13bfe78d2067f79600e10ec492bf534384be7c69f4c99a2594be024c175e189e25cdca68083909bfb7569f1d1f37429266b6de64c4eefdabe16696a99df1b349c4a1aa9254d8e8c1d8792b01c0ae0bd815740620eb6576db3978bfb79a5c83510b413efdb60ee87e55b7545e66df8599a50e65709c231304f669d94fc3345dc228209fff4d10703fd366ceb325f0706ddf5d3627dd389c608f0d816296ac37458bfc63098d61fbec10056599c0f36405212b3d6dbc6543847ccb25cd26d10b9ad9c3e5aa3206b57ab1a9884acdae6b292af970bc3fd9f072e19d8b29ed299165e02eb58c8462d0025a4b37bf26f485577936acfa5ff6195b09efb6c13d8d1107b2c0ca46aec30dd8bd854f14f19d3ee95f464c42a12ac996453656b3b8cac1bf96b5e2833378e73f275a909750ffdb9d4de5d5d974c0f34578f572b14ec80bc4953185c3111c78b8974b9befdbc486764da45438581eed3d62d454071c016bcc4892e10c63469b4a4aec9faed76157dee61f7ea822e90166539c5a13ad2ba944b1be91aa35849316886ca3561363ac40aeaa85092f57c130ed9da4ecd32d22a3317da3d9e37c9f9e96e1ee0b3bbbda61350cca4116f8beac0742263e106fd905313d00a65d64eabfbb8680209540543e6bbc3529f8f0ff36585216924a67e13d6110185a1c19be5898832daa708e4236455e224181159daef9f46fd755ce09f9a10736e12620373a403999d3f21e1c459868a2317a3c3d79499c4260d9759076b80989716032cf2cd97d2ba6f14f14e52c89a528d617338c475cfd2c32150c16d55bf475980e29596862cdf27823c5bc253962e9f4f269024081d9b73ebd252f1ff49423ed2e66f2042171863885ad44e420ee2bff3463d846981e235f95ae2289a94702bcce38864aea98a3d2116e0e9dc67dfaf27a4d28fa62f29a4a69a802ab6714561c54b97b60eec25d95c96b728e0c64ec2af6a86a6a57b01b6f07bfc405cd5c9be7b6ae041de2572a49c17b1d8de470cd2ed554dd9d17bc485154b406b72b03805eb0051e4704f4e0514dd98d8e1a2b4f988e7cecb3f2a8fc020c33f5581d80c619a14e564a8f56c983bf7a69648bdaf5a8176e3b0bbe016568874a219c6a130bb5b16a44f3798153e5310d263b610c8cd02900a2cfd6173984a89e21ea0a14e81541311f1dd924fc8af3f490ca19b1b489ededf64a708bdce637c4d7610845aac1675a21d71df2332209441d897622cc444cc0e3b1179ada519c62e671db3d4655882baa50d130e099004c899c7bde029c2210266e0622328186a15241312f07266a65306437aef1ab2d2874935cc985347cd28d29ce9e4a2ee1caaa03ef87f82de235b905bfd879de45a7bff5999f0086127c0c148276b48db5137e7f33afaea5333310f5903f793ccbd8dc07c0e77970ae3cf337d974931fc62c8fff0d657397954ea72992f3ad38c02dc8689c36b6f58bb6544364209faf30f47c8e63e35f42c6f3084c76beca9463e7b5c5779ca33ebec6603ba6e3fa86727d91b09a82f6176f9e40a819502ff7be374d510c34f197970f9792c950149a17659186ee45cd98bd0231d478c0dfa542a516f006ec7a64fd785343617fcd17e9d481b5f3c9ed6f9103ee2a2cfeb0783ee71278d73a980e1b8be0c91d9889c5e5d7c726bdf1bb3400f40fa028c6fbbc08f14ec7e74eb2656aedcaada5970969fe5463e8cc8ee4cdafb4ca7ec0d80dce360f1bbb22c87f23db1e5978ca19d1b5ba4d1605b302a80f1d7508ab63945b61412150e2c56ffdc17d513943fee5ec8c7ed5df0d10ef48cf442104b083548ac11ea0a81b35fa5ba0451e354712096ad84d74b69c9aec4afa4650111e2bb35b45790e7d9e0d1b35173c192e661aa99f16210ba437e7489edbed87ef00d569e162f04938cc745610382d365423d4987699c7bc98df28d408ba35025821f911b18dc3ea43c38ee559c0c625cdfa24a626c2b83a5bf6bc1fac0c04f226622c9798ffb1e2dbfada6fa572e33ab19810c448b2323e4453ef6307cb052419525bbcee981c202fdd73052bc3c8c1b684ce3e94cf1d434cb929966010cb00566215353143bd2432de999138c62a2dd91e826431c2a74b3d3d8734163951ac365d15333a13c5dbb6972d1bfa4a7d91090e79074e360caca6578d20c1540038e2301305951815009091556f16ef6b1bd9c429b7af3b2e2fb8e78c0bb435ab7da1f4de6e969116ef59885935dd978c5d9e7d5bf8ae19209b62a15bd3d8562fb5e0da1858cb7d78b89c4b7589bfee12d8d90d43acb66a8195ef810a8dfb058023ef530fa5062728ec1e451300d1e1ee89b7b6ce1d0ee58449152a794edaf65550e66d48cfa9fa473eed724ebc48f5dc7e35524215ff47c85e69cb2488240bf5075e537c64a5a98662d9050a162fa90b686fd7eb85469b7087eacd1213125f3dc97ec0e4c46aa94fbb8c3fe0c0fb03eec31f50880a0f79ab86658da91bf282f35ba4742167b65c5fd650eb10130f15c907a91a688086f60995dfefc4335760fdb74e53b17829db45fc68ace26f2b7af2c312136f593e5f303f67434bf2722bd93cf670123d543a2394d9ecb4429f22bcd6abc2cb934822587808050e5a9bcc21d2a039ef29b4a12daac123ad11ea40db86df1d31a7a8033f2ca607ef068436a30edcd00033479e26c66c90ef60b1508e61dcbe55acec461aa2a2656fd7386b4698abc03724372e73290bf8f35301c3fa220c017a3b9e3f42e9a79883e29d15168d29517a28fa4218d93124405445b4748df21f43e51b6c3c3abcd7644923264e52651e36bf202ccb27a5f86cbb2411fd6a1b73cea339e993a60a648ae4cec167153923411a87876a40b857099536c2873c5348d1c2cb0c353da0af9f36c661998718593ec5000a225ad484b9c0d07fed44b35be7dcf9b3537b8ae8cd91c629eeda34a813d3d62711c0380c70e4a0c0df671cb33a722f64ab9a3105ac46197194e1942ff3bf374ea6d11e1abd0dd1821906bc8e6aad2e5ef815f9106e57f0eb622edfae3042210fbd870a3efb885eb99fdbe2155e5a1ecc12c8f3758dc26269e9d646df1c3b56933d3944b33c5a8ed4932b7984f38a32e474c86f36937b6fa36ebb0aee93d79d5c71c4b327d157108ca18144ba9d20cfcc7110e3eb5f0f4f127d1ce52238a29ad4e1fc9b96c49918c5f71d3a3e533285c427e81884db644e1c926eb2ef59ba160e864d521603f51d00fe0b03b1fb53f3cfdc221b707d270b4b0c89e572f288d5a995e0506be45b6f9a4ba757e71d9053c38684a8aff6a8c778aac4f6b7f2fe6fff0feb6e9ab4bd20f7ff54bda184a6f1a05509358bf0d9b3b7eae4a801bf0f43cf8ec2f5be52b2e16837a932489c40caef762b7105e39988cbea470fcc1ebcbc660e9e723a1b121531fa62f6180e6b12cdd1cf3f89d5f247695ffc253cd821c15bcec4658f2e6d59d93f0582257afa94861d91961880e6199a1abb00546b6ab01d01a45f037a548e7c5e30d45d4d07051e66b8b9f22226fd40b9f9940f7fb6ddc16e38d6a1bd4443bbdc54b952eda40a3aa089cdc42263b84f7a220f0c767bc62d18c8fb1c50f12a536c506fb9621916fddfa8f64bec5e9e07551fefe3e55bdb6d6def2da54c4906fd0777070108dd30b59927b816e2ea89b7f4428b79c9c1d8007304834445ae95cb01c9f978c9b5606cb7a627fd53324177ca29334f326bec999de7793b85b2db4a229ccccaa79c13eec6f422964f68c6f2c49de2d30d77a371a544a3d783a2510bd4eb59b4c035e1598bd78cf872de4e9a8723ba107acae264ce49981bd5296de51329b9744244d3799eb7db098ed689870a9210203e7adc882e2c4475441fb41d2d042d29799a5079da2aec06e74475ca2a74a784a2073966ec999da29842bddcb060ba4991c1191521a56ea0a4bfab3ce59e4a42d9fa672544db5c4e0e7317eec49d4f6c2eb1678946ec61529b117b9298faa747899424378ff51c5992fd659878723c3814aeca7a5a4819f13ca58aaa8ce74aea06a71492c778a820657f150a9742e180a0703e50b81ed9df0585db91fd6150385a3ecff28910fd531671c44a083cf6cc7027cee5843b712e16b98e62795618d33f8b1bdb99fd5d3736e28dea26145f38b816a10b00a14ba4403729d1c8f5a08bc54d0042574a34ba79d4cdf8b954325c4e35b71377bb9d4f6c4cb7d3e572b1c0ddcef3898de97442cae156270fd82c4fdced3c9fd8984e970ecae5fa4227714eb71377bb9d4f6c4cb713e7743b71b7dbf9c4c6743b714ee789bb9de7131bd389733a4fdced3c9fd8984e8c7339b9a864acce13773bcf2736a6d3eb2e0c108b598d5fc0474c96766219c13222264b4c9618cd5ab14e5828e977078dd99c93fe2c92aacc456f9ee22097a7ac98a77f81d01f7b63708d8ab4fc151a150b659679e084caec93ec1aa1307fd32e65fa56c95d629364faf6088dad1ee65f881e4c7df83a1e6885cdd30769b7bbb535f7aa64dcefca74339f51cddb7b36517284881098ae0695f2fbe1f26372281afd5fb1e789eac478c48462b39e2d4eba13ee96138d826a5ec70774f3b62708d9bf470bddf16f89afa3045af137549aa03c41a33a2eaeb879b1c479403545d8d441aa4915d6cf4244d241ca1e05868111c51b31e8e6757c40afd75102e1fc4826216be492905c82b9009bc168b0192a7669b50723c26593144b26a801fc71c4720a75e13f8a2514da83737256617e339637eae28896845c42d6423209b90473013683cd00a3557269c9855c2297c8257209469457f5085758eb080606a6a63ec459c20902e77cc9f0127a11bd5ad0a299914181af229c2070ce970c2fa1570b5e442d9c9306e79cc13965704e14ce09e29caf223086c5aaa9b0c6c484e0a7669e66824033a3e981268966892608156fee90dfc23427f55833419879a299d1f44093441304cd920a9a598b66464333a399d1cc84d0cc68ceec2f82ac18eec9a864b0bcb01c014c851eab88a59261656c2eca25af106bb00f8a46ae5054e1e2c0d9e5bf999999d4ca56030585d5e0ea4cce67b0ec90dfc2d8956bf2f2f64070e39a6e5467a6a97f7aa0cc3cc13483f3580f0fa464ff5453f622daca5603c50c96995cb8b2d5954db5b2e1956d655bd9a4501d3b9637aaf347d8c4323232bc7761b5b51d8a46e283a2d1f829d1a8460caa81f53a3ea01278534c3105500d2ae0c039fc2abee45eb0bc3cc118a1b0fe8669981acc124af6cfbcb9437eb71a77c32c8db6515c3139ecae3c1b16a69cf3580f0f28d953d423f4f254653d40608c10c12055594f0f98253d3c606a1eebd971ee64f3e5496634c96cbe3ca15ec097a7d4cbd3cb13ce66795bcab80a83197b3a5b365d1065c789a514b18442139a955bcaa79c53d9e4246b2c6f2fe4f3c6d9512b5783cb4e53f334aa116ceebe1a891f8a46a338fa4cae779ac828aa800367fb1e142f36aa53835bd9ce6cba282aafd01dff175d10b970892e845c04b9b8c16299a5cc519d1257369558b2ff4cae7f4a28a594995c37963721d85cd95e2a11aeae6ce1d863ab30b74e56ec53ed0811214066ab962bac71fd4aec39a23a4454c7d5238416e51e1fb4a7071dca6e337252d4a447c993d00d672396b90a7bf96254328c5c2b56a86418b97e4558c59b41d1c8f529d7bbd8a09a7a27e73114ce492c34867a827a36ed5395a172d50895a56ca0304f1da5929cbc4b682c8564876cd9a7546d852b97834fecb1f53ce93963c49ea5a6fee9714277504ff40881f3584f134a7a0f11d9df4435657f18b167c6f394abb29e1e36f4b440614878b6a4923cc6a3a5a7b673243b91ec5f47f385b480647f8ccaf5f8c85ede52b5d5d84373e56e628eeaf8cae6125d20abb3e0560d8b5c6fc45225964e4efabbc43227964f15e62c150376f23796a20d9bad1a1bf1c646bcc109479537ba72afb0a6858d686733d1a8e6c30f0340c5c882850db65d0d0b16369d8db5ae2757ae26d54337801c944e58e389d6c91a2f7b5fe8a48d48815684a291cda75cb9182cf876b354652e6ad52c6f3767ee96c1991999db5def2ffeeb7532322c958c1a5c0dce5edb3dce763726060606e6e5c595736551c958bd166c96ae5cf62f731e3357b6ecb7269cc79c3c66dea8484e2deda189d15a6ec3c87936a594d2dabddd8e6ec7bd0d037b2fa640d5360b28760a04daa6be72a00ea2fea8469c678c467db8d6eaee2e042950b2496b2b30428a10eeae93dddddd07f863923b6285a40ca122e5052d4899213321e58516a208a19e208a952848ccf0c2ac1f6e8043248e43722530ebc712517acc10c50435080681d04e30ea0a9425b2bbbbbbbb7b109421b289a10481b34051924d8ca118c9eeeeeeeeee9d049421d9c4de04c505dfe88d506830b0780025c806ac92e2058ca7dc30cdd9c412176e483e031c66aa740bd25a6e3eb289996e3c30c64ab71658363f9a375e64fb9b98e5630b8a2598b289970cb104926ce21e9630d26109166413f7d3123060284a48914dec4389df5863ab0f5df28a3adadd3f8346957d18b7966c3738c3654d438d460927e0683aca4d9d72777777e9bdf75291e61c99f67ffdb63fd58feaefeeeeee06b222cda8569551a0ee19dd13485f1c81e6eea90bcec5c9a5a9e6d294fd63605cc3355cc3b55c0b3dad98e04c6594ba08c5f02635fd39728fdda802fd7b87be19b5560dd7700de744eceeee3a603bd66cee3671026d1b26d0f8beafa1c09f5065df68c2d750e3fef735ee7f35ee7b230be4f53bd65877eb49e03a96e04faa572a0d40c12f0de7aea1dddd626561d137bffe1f6a344917b948b0f7368a5c9a4654698fde48494a7e8f6ecb3103b2516514e8469f2810d8aab2a3ecdf727f6aa33ddd5debfc1af9be63351e98d13d7dfa1e58e10337998e66fd6eaca14fbf3f9693ad3b05dff104987e3751db0201ead980c66c614067c159dadafb52c9b0a1de75dd5d6bedbdf7569b976a049baee1096a3f6b876dd29f9229e8a54f29a55ebdb5525a29a5b4a25c608287d0115a2761a0ddcd872a428f3e4ebae9739f5e7befb597f6a5975a4abb7677f70efd7ea731dadd17065a9f8a94be7f099d43bf9c1772ba1e712cc871772727a594d21c3320d327d3b27edf42b6c70f7ff8fb4cc05ff87d21fe70d382bcfef8beaf3372d66857a45e65fb44a88c5297270a8327d76fa46ea2e448ae9ee7f9505113439ed7556eb1bb889335a9919cac170936a1bfc3e5aa0252ae482eeb1eb34e62d2a7c73a57aac4c493aef5509b82a84a4d48d9ec27b9da92a8d5146ac5377a620926881b70b23ead320aa403be16e3b3d211cf30fd94116cdad85c22301d593a88d4ee6efbf5c3b8d5fa16516ea108e0dc8d435dc6ad275bbc99aa2460ab12521fbd90f0046e6c2478469535508bf5312a10e5c1fccbcccb3cadb2d6639ab17ff450d3321ec156b98c4d446334716b5c22b349975a993ecda830d701d791c503c99ec069ac95a6e4fedf5a6b6d133694a5969c9c9c9c18bce070739e4f0c9f18a28ffb8810c3bbddf5897179726e269cb0811b36a6f0f1c1e124cbd2a71f85eeab4fedaed65a7b0a5c96650e6579d623baaeabb57e4df878576bed7e1f17635cc1d6fa88e064f5f1afb5bd73ea3c4ed69c9c6abf5a7f6bbbfab5565b6b6d22dbd1c74e29cb2aab4c95a64441e9404609e5c28bfd7ed9379bcd663520fa56f4b91faeffdfd2916b2de87e67adb5d65a6badb5b6bb79addff563b803f20db1f8dca34b966f7e5f3a59561f8fd5aed656053bd1c7499ed2f2f8d4d267cc71f2be4ab0f6cd55eeeffac75a5b964a5380946515a529b4172a46f8b811d929d03f3c3c3c9f110fcf0eaf9c1c9e1c1eef284f4e999353f254cfe1797a7acccc29c163261522c773949a7092931383d2a7561f2763f874dfb1ee765d17c3498f61bbb64f8c56f103f6b1c55840edae3e3e3e4d4ce17367b039df294d39b23b7c345b9aa98c2e01a208a21c68d8a2031f00f99f4065396830e286292f388160650740359c741aa28d0af3ee10702d3defef48c3bb82e9e9d9f098d7799ee78d9d6883468db33e8d1a36dc93f5e71c939e34d3c7a7cafa695098ffa784a3e54a249bf4ecda7effd8d184deb97f7fa4307accc0d7d4a32a0a0469063f2fb4d67a35a4fda342f838be1c3efdb0ccf7e9f70e1afb9cbc2025efa780630516661dd4421486c5f77daa2c07d0fd18556681aeeaefd3a8e1b1eeefdba030ba0948a5a254f2bd1703147665a84ca03af76f0eb8d6b62b3347ee6c0e2990d8412b340b220e27af0915767750f2febdd9b18554b76e0c554d4dfbbe5ab60f76f87d18d768598ea052029bfd641190cbf6d63edc7a729b7dfcb5b0ed5a855994126c7a36aa0cf5f64da83290acb27efaa8cccb551885f13d497eabf5b885e5de3b5e1cb0499f6454a61fd00f08befc7defaa28d8a467fe541dddf68dde03aa63df3e58c35cb55eaed288b2fd7eaa32b755f2c3a77eb2b8f56eab658b1aab902a095cdfdf6c9adbeca75049f2bfd57a8bb3ed0f7c32c379d1658471bdd0cc905a88302b8646a6501f804c1fb378fa2de80fcad63baefa1785b172b95c2ed7e972b99c5c314c4c6189b813e774e270381c5034c2f92bf6e0a84ecf969ea79e5c853939e94cb6f316e47a1d1fd0d84385ee384e8bc58f3c78e20489ec31425e2c469b6b2ccf22f18b4e701483c60000e05b0c41ba0195444a41e66625002b4c124c48e7873d032096455003f803402c8fa02efc5b88a513da637332378ee5893bc921e40d241239844c22a52073b012f050412293c8a427935ec8248f4c8209e9fcb0a3ce8fd74b453d8853c35982b3f472e1357bd15e33d4ac50d19251bd88c8a3944783b304a71683b3f472e1357bcdf0a2798c474b6de70849e485b480a870965e44e411799451e079d2dc5e4010f52c5e392c334f46906a4b6cdedca9799334bf8569966a9854a74733f3446384068966094dcd66e6a966e669c5ccd3cc13103cf344b394fd5f354caa1aa6ec7fa3a179015328702ccf93e676a36221d6603f251a8920ccbfccd86698669648adce9a2935b799a69929281063176ec6a9bf27278dad7f7a9c2c210493c77a9a1061cb4e8b599d355366a6cc34a15627b83a57a7cbea5c9dab9308aae384ee3c71d2e973cae7f942f342730345a3d7a744a3168f0aaa81a63e8bd70beee589971c8c0d304730493048bed501a8fa85a85a80300c4303f0f4c4643e2fc2d6bf06f021bef847045015ae522b95ea41d583aa300c433075000414a096b424f4a8d00360c90ef6fde79474f0eb2f83ac1df312851f822e2b98971e9775695745483d36bb4298fe07aec4afc2fc35b311aaae2336a9dfed5d897786caed2a540ce8f2377e54a7a44e08e0ba69aaa2694e531854f4157d6915d64f445454d43769080aa305ce0b07d5f2fe5f2a19de0a14eabf6f45cd28113b89ab8cbefd54d49a5aefecfb8f6401b311c00a153a2d02ecd04f09814ddbc9e4eeff9eb50436fb517d2385a392f17d2d5a749d8b02c0241d091942a9902149484384242175435c4495f92f2d48d2f2e01630584fe39716ebe55ba8fab1702c0c8fa805801dc000c29a4131f503f47154546deac725928594c250dd1e9748c88744bf45ab7ed47f43289ff07b1152183fa008a1f598f50384d665d6431001e1f778059ad306e816bf0ac3f756b1bef7ac1b467d8cfa89f7755432bc8fa7f2e41817e723ce4c6739a806ef55ef526f914c2f937c44bf9fd945a4f53dd1c8e555620952b84715d6df89494c56e29d5d2120b079932a5575a34e10d8bc4572b227de2327fb4720b37d01e44ebcb32087f92de2757654c1722802b90242ebb23babde36f79b77b60380162f1c02e8e40cc0460030b25cf93401762301212d596bc18fe145d93e5118fdf67ba9b550991755d8d96387b790adbd656bfd96ed8fe0d879adca3a1aee56cb5e546bb5b51be41edda24e28d7087cbea32dd225e55a813eb00aee928a78cc26f1587f4837a4154321c8e56eb75a0d0929064bea5d5c640a4381a14ba5b8f0fbba7168f8b3a53adeb7720caa9329ac3e75929b470739191304ecf655bd1c9d5b1a80f4be844eb2de0cb34db6693d071a48931d94e46e54a64d7648cafd2e3a319b59c1d140d610a2123b1cfdc8b4c90e3cb28933dd2128d32649b264b3459b24a1925f326d92c4a6811cd81f1c0a993c498a11558a10d68a1045d6ca0ee091db19510de9ee0d562ff0ba219f9520566080b24c5686b095a02a5bc02a4e5f180509d5f7832a74610a9d7c3655727097fa7195a42a43b26d0112aef2c3b27ebc54e1f145e901f3c5804060d550576460969009a9c4fc8086c6299752a22265640538a426a4591b28341ba79bd393242726b57e27d50d9f142e3ce566c83bfd701a6a9a130f2cda254c347e4f6ca185415e4e3e5a3cc1a4e20166d452e8a41f95a9d2134b3686890cc32421ce54e989214ffc786248c512d813417608ad19dce7840d14a2fb694576e9594603480269806b4a4e04c92cc8099d18f232557282c76f51a292a372b3655f31024c9570454a54ce6e010166a4d829c35a8f3629f05f41a59f041e88b219f240cbb4090fb39c25d3263b34d1263b2491539936d981887c44f187b40992224d9004c9993641f223f7bbd82ac05ea64d90a420b7d804a51ef6876aa918217047a3ee4570d292a006fbdd77ee91070bfefcf5c9fab87eab56f3cb30f029abba80caf054738aa287232c9802c9052840705212031a50a93b24999273c9610217eca8c92084040c66a04ccc3024040a1f49d8a006dc19a1303cdf2b5572a085c889081339263e245390f06848a65001111c113b8610e4d4482ce1e1440d529064a3ae43b6d6fe8c07e4780190232848828a133a70e2ed2da59de0f0629fc4459c3405252f00a208232036d081122ba0618814356842a201882353802020072337204890c30b3810614902e98827162001a40855b23c53682f31bba4731c69f1410dc895285a70d526896008141d447a300410422e121a78c96f35f8a6e7478798e202ca5a6bedf7297b535dca4ba13e0b7447ca7259db18a89529fa8973c80f4404f1000a20542358c26c23e0c41020ac80090ea27079fad2e73aae035460a801530f29a0614b0e567a6e183a721291010f31f89f228a1494408b93154cd183e200e5e618624488861a30890106b7f0c280f397435c83d202433a5c00228a221dcca0167102ebc1d10f31f850441040d823d881aa4e1122a8d40006447030058fbd4109c401440a86a8d2e31604f7b90f2506883881f42408226eb052ed0d789021051233177eb005c811df2b8503365f5666816a57171c31031818e1b4440d4440668bba2572801c663c804a29fac109809054e58a0a80ec93df65b2c391a3196a41c0bdc004905966eb07e81d6cf0ec630c2811e408238048a143940fb7bef43a437f535b837e4fb64b319bed63fba4b516bb804d96533143334777a6d55b2d8ced874ebabbe3b8f97bfcee8b2adc8ca36fa6aafab7a3f57af7c81a715b6b6b6565bf77a4d6fae41ba95a1d6d25aaa6cda6cdee1ef546519dfeb0adbfac813eaad3ef6282a279337532cc5445dab7550cb30a36dfb84819ecaadfa65d3782f905d53b7437c35cbf6bad375235240ff5f9904daaf4cae9a79d02ea83a19bc81b9b280903a88e23a1f422ff87af4d4e085d25c3bedbafaa113cd73fc1a69efe09295499eae9af5065600bb5f0c232bb37aad0d97cb9882bf10436aa0aa81e1c47300a8540aa17b24041e0ebf8809aba407d283690abc077a0ee03474a5da050dfd820ea7de02193407d689f517d7cca1285a226463d5592bfef7aa82a12a892d448a9ced7e538f9a23afe4d50ee29c1e24169cc10babd9bb5c301cd8201f73700851b1bb86553c9e3b1d4b7304f57828d1a35b7aacc67e96b7eb21bcb3bb2c2d2e6ea1090ba3ce14fbd771feac1fb80193170cd9d48b3ea75603b86b3d9f79ee78d66fd6fec26c05a653980bcaf638d1d7300f5acc2ead7e88029d07fe73d0b3590155659a8a1c6f7a89185d6e7c382971a3b8f027563cdfdd4e70022bd0a788ffa1adda746166af002389b6dcbf77e8f4354e73ee809614bfffdb67d5f77d24d6a9af962a16956d9dc36eabdb4bbb76dffe2c9f73365c243906cb6baeec50458cc9ddb67303cdcfb339cbc7f93c897897cabe41b45be13a0b05b83eadcfb1dc46397470b798c36e4320a746f7b5fb380fb4c16d0fddf8721df7b6907519dfb9e657a6024232b4b1dc707280c1f7769514a6df446736290cbeb782097b18695fb6ae5abf1039ee7799ee7bdca86ea882ca8cef7e1d693b63228cf9cacbfe5c9c92a7a114ff224607768a32c49f2bf55ebe8456c5d731226c31b656ee0493c86f2242789c028f4df78d488bff74614beef8ab8ecf384c034dfd1939cfcbe90aabaee5e54977aef4137717446c151b84ede22383a5fea499cf4224e56bfd2ddd5cfc1daf7bbfba98fe1630dea51b8df8f1a7168b826359270bfff7ee7c89e85c88b7892c73c8b93495ce64f0eab5f7d7cca9224ff5b2d5c3de7647d9915d40f298a22b947a09966f693f318f218558a82c88f8a7c48367271193de7b9a756bfd9b8c67d6771cadddba2d55aabe7ea076a2d5b55e663beb7dc7d62dc701cfdd3997e8e4f95f9152db9b690eb7f7547aedde839aa535fa607b6df153be9b8866e538b3aecee0e1d269300cb2910a5ba2b0fca66d8890e84eaf4bb885de464901642ecb36d8deb949b30dfbd8509bd2b18e66936c308c08c2c6feca1b069ac2b2da74eebba116c18b27dda3ffe66c790dd7650b6d643823b18988719a993b6da6ec9ba8edeb1b4d16566c044415cc86334fb586e322eeb63288cd4db6f183a86fe41bdfd1260de4546f3abb73fc365336f9f86c7546fbf86c7c2b76fc363e0bfe0b7ff5b5a59a8d3a6568681f9ec23d497198f3251ee8ff9913b977b080e4273ce3453ee5739093a511d140d994650f3e89fd28ee0de683a90dce20f276b118cafac64b965076b7daf56fad9239dacefb5d61360e10fb46984676185d950f3b0412e9b4d24d6d4a8353cd695f575b3027c05c4e1e4fd9c7c4b87ddf78680a9521444f47e5793c2a5674ec1a3f1611aa8f1bb3868e56ecca13a57a607f69ed9202343b7cd89054c957cb094a9d295a56cb60cb95ec121bb4a8688022af5e07f1fab858ab0c9caf5c10ad2a8a9114cb572eafb692af52e22f82a115c40eaab13fdd339f5552523e594cdd603ae4cf5f54997b97c7dfcf5df652f5fdd5f25deead475350445f3339812cdce20f85f8e8c124570943f11c7cdde589de89d9b23f7774580e4f8faeeeeee4a75ecbff8945827d9ca5c50982d43255cdf867d13368083851aef6967bf6bca540285f5377d595e96055f6bf851fab9ede31ecd5657067cae3fbc88e1058f172fc2a6304a780ba384a10e1a2d061e2e1403cd859a9aa2dc6c4469b2d14d41493c89ebe0498de43a3452124fa2034503d4d157f415e9484acaa1480e4949fd4210a804c814f4a3829fa1fc43fba1fd10e900a9c7eedbf6bc77a779a8cff32129b290e031f4cebdd57964f77f5babadd4c5c5fbb57efdbcbfee82caa4a41c8ae4d04940947cd841930f4b28c86df98264f3467883de504350475f118a06a821a821281b566badb5d59b9aa88c42ad80cf806ed7d61dacd5565b6db5d5d65abde92d027cf1c20b4242400d04ee68df40775fb5b5f3bc07c080a5871a4d092d563a108512494c5002244ab074c4d75d5b4b9f128a1c1457b2ffa704058e26c1e1f716a02c000fcf099ce63ca8c7e034a70131fd5eef5e6bafed1fa2aefeb4f83394fb87d64f5511f85101f5be3f7e6f8bd6fb3d465f45bfa891b279e30ad917b4173c5e08bd88e105ed05ed46d842d9bc41b7803790095402bc8137fba08c0cd81fec76af35db0ef414f90354a7bf91e2a030dc5338288cce5d8293369cace1a4eda194a555fbd669f63df575f4a114cd073651fe343f558a8228dbc7f1bdbd4fb37d195bc3635445c59aef7baa1445502eeb8bd661f57db25296dc37e68c76ac2a1c54a7913c2772bc27a23e8f992858fbf7bfcfbb117ede5f9aa234f5a19a507fc128bd43df1b69ef7c7fc5bee56b3b4aefdcf73e5baf9b9cbcd6f3be13bb559d278a2350fa21b16152520e45680e9d94c4040a11aca594520a850822f4f014f4140474a11e134dca641f47cdf66bd7ddef5eafddbb58bf13edfbadefdebd8bcd2347d7fdad6ebdb63e80b40a365926c0fd2278ccfac7aa12ab94aca123addf505a006726684aededa8d3d20463595d48d221e79a386ce7d03f3427f5b0a92024b1d13c9a47bfd04236fa051ecdc34af3a8b1427cc4af8d7ec1a6009bad04506a3f2bd87b0045bf390976c0cb2be47eda2a12bc7cbf0e758f668e085414f40e7d91f68edf9c4441eff4af5087ea9093393ae065fa566c6b7343d9da388903fe9f716dfce63114f40fcd433994017f1db193292dd87c6702d2a030c05ce3f849dcdff201f6834de9f831e0e6cf4586a5b4bbed97c3fb03207db9acbef9c1da46617dbf02088660cb0300866068493004c30e06869f00c0100cbf06c3540a0cc30e0c51601882a10b2b0c6542164d4bc58a1a1b16ae9b9f819181116562469c570b00048084096066003243e4e884604a1586a12a0512e0650787a8fa85a85a866118baf0d511918f1f45437c6118a050a8046d7826b564684600000000d3150000201008058462b158908679aea80f14000d738c4c6e4e9b8ae4c124886118848c41c01843082106184360a6a4660402e2cdd080c5496f40e78ab28af1e958b9e9793ee6db43d90fb8d3ee6a6e12caa021e052fa98894c73d4354cc83c0497687cfc88faf673a1035d94a4e9fa192e8b75886772b50d8ab4420205e1a2eec9d07e87ea9d0319a7e7b65d18994ed7e4af0c5e2bb6d93df4b7f5be396b3764b69964ab7f9475acccee84b8712f618e9bcb538495b60399dbc14d8400313011d0424b543bb8480c99f1fa0ad62e0a6eee7a650842103086850b7c0f62fa443bdd1d41f6d34965edd3755007c46c82f888ec8fd94637c2c8ea022ef2e2b29baef9c7304943daa15aaaf07cda9a21f9f752b7361b964bbc78352042a26f250997b443c77ea9307743b0be55efba19e0baaac12960e4dfcc04f326abbf11acab8e586d875d0623c3e77b47c43024632fd2c8b5839823dd0c8895641c6ba671c462c13570f6c20ebd899a2b1a490da57eb11f35cb8982e79541b3781499aa3ab7c27a5b83c595bde56a65b981ead791752d74e37cdc9cf303189820639e25af955c4f9e104186a95d3f9ddaacf54046a0e0115fb515f21c32ffefa77646baa17488d73eb44cdf5d2e552281446a53bd566ce60cb4b799c308e084e516993d411dc011020807f36a4542e91d53d8ee437dcd3503baa020ad9acbad4ed5f514cc583b1da9220cd07f609c296253aeea7e0b17b0fba4ef6da528a5ed96485355cbda2228be87a62378715e825924f1f8ea3b88d4626509fc3d2d325028ada85a07a9503f55b3b57a0a405060a47073dda68acaa888bc3df33e30ec22dcefb4230ac32a07ab8a45c66f4c08004f898ac8a65c67e0c350813e6c6836bf923511603e4b195d6f2db7aa8f8341a96484a2db44a622c30582c90570f244a2d162c5eb1be9eda03d8cec13b39d73b390a6e6bc0e5f151f5b9a40f8336b712ee0e6302117c04c37ba4a668b1ad43c9e64ec082334885291fd07384397a4e08ea6780491c77ceae88c044e61eb42f8f974eb087c292cca9fda6a15a209d251399175c5a640110e624de4df54a5e911b5d3074969dbe97174dddeef6720d2dc2c7711043b03d1e6b1e6dd99fbcc9355849439ce39f150d62863d9a500b2f71a04b69f4cc7e674fcec3f83fd6849d528adce7b12a97588bc5665708bf62a4647103f9bfb0bb857cb1ec82378badcc02704e4cf5c6b2adc0d1ddfec4c8e9e4e9ca583d1b6a3d9bc90ab3d81f1f9fb39c688904beda20b510775b6ab66bdfded4badde97cd52255f8612bce0f5df960237f0c058bc9735d5ab884c9f738b7d9811be9db288fe93f4d68c9f91face3f1b021c0eace96e03371c79841057c0c2d585224242c965ce453a706fa66b5836cf7816b5b4bfc52c219721c53726e0a760c3467fdddce76de5a564c0b8a640c0c7d43c15747a1ed19eb7dd9906b906b732ae636f43a6d612a5dcd96496fc9c093b0343602c0d9776c2955c7dbd453a628d7cde83e59d87a81fd6be5a980542bb3730a87a82014fad3d71836a487cbdfc958ca993b74e3c3cbbf0b4581e392a30c713ef8bba743130b8b35580b9ea045a9589005f6adb2d194a42aeb0eecb4416a1b1c6d0965c578bb6510f341f9691843d8e6c2b05a6db328df2d62c00367cc7209dc4c2586c2fb00c53aae64005c26cad277bca8d8be7fb8b736c5911d330b05a4ef4a7190676e1959ac581193867288340d48c95f83532f327e2ba4201d5fb87ef97554bc03914ad8242c1049d9a931e88fdf64e3c5bc5e8b9408921dd5ec603436f766e57ef1a83384997378281670250d982e6f2fc0064a867e79ab82e4f3e6950e9e18db21042ccebda4d308b53179f309baf9e92f24b2e10ea0a801c30f9f0f353738d72402b7abf7968943aafa22f487f8d34b5c5ce822b08b98536330d5c7d1eee08ff4bb7d607ddafab67df8e1b64f50513064266e6912cb35aeb85f0f1fbf48a5c675c8b45cd061730824b655eee7a9b2a091ce44a30b9b8dabd0bba3679b640f5eec9d0c1db9069a8ce4233ab39279048a546ba61f08893f971a4f5bf20b99598f24a4e69c63e12b0190f3fb299f4558e2eeeb630334b85e9dd07dc3c8dfc3a4953aec57ce482399da5cafc307b3706f753b54160c6ecb43fff9586de85a102dd479237b414be301118a8e65be9173a11af2226f395a82d938e1665506714788489e12b8cd3f1c382fefade968589d9236d591e1dfe71d60360635a309a5b3e4a5658a8e04e4c21b7ca74b7fed7fc9193535d7271893235a45ae991ce65f60534294bc48835dd6f3dd23d71517eb660604698eb02086c93f455d402bf4197e976c70623d0e58573d7dcddb9d7d1ef150ca351eb151c0d5fbe4e9570643fb4572648bc10df69860a78407c1277425f42d5a2d6816d799f99926461e5c66789d99cdb320759fe01f75a16ae9c010ac411e84e246330d7831cbea4b9d1afdc8ee9f087272a0e11443954e20584ec70ac4d5d10c50eb9ed3717a0f63b8d4dff50f0207aea1e6fbbcb4e37c3a6114edb6ba90dc0a5bc2e17b4d517c05930b3e8ee0dc767e40c5f1bb0b96b1e91bbb18379d86ccd8b0e2bae53565f1f24445c5b590cc2bcfaff60fafc056d31ac704e7a3741b5ca43cb43fe7a89a775df33b5ba30679dad5acafe7e1aba83a64ee49bcc38dfaa4a02dc8c841ef8cc4b354c4fbae56c5ef4c51d1b2693b348d705544cb063d3cbe38cb81b13e119e8770149c4b9dad073e39859356e4b7f160e2198be652045249812150ae78a1907b53831995b4a317b6effc35221fcd533762d046cdff792cd659103e3fb0652dab8470012ccc5488458ed749aa14100782d3bc7ac0b1b2d5a650f4f9e213fa743383208c298740f7e6082bc2f585848b40143cd01942d11acd21da3ed41c75a094e750ba3542d6de450e0c00b6522c9ced0c8f44f4b7aa28fad3f0ddb48f7ed74108b494aa33c4d6203c5a233b76b901cc393ab9761367d604cf36248890300751aa6e3e756076f41dd28f4059154d6d64c470a0c2c3447617aa6c679c8740026108a78eb023bc4481b610e8eb069e0aec9c9e2e2d04886ce034a7f386de8e809a6fe5205e6884e70dc2b2e96d53ab435eeb67f111b4ee43650ce63723b3b6dd1c70656bcdc3b5253b4fe339571e1d2d9ce5b5277c97fd43c8ae965791d901031390a60279c6de17d749f41b7583e074e66fac2f2a1b91ba253c738a15d72cd56c05685dff63c80ed732dac02b565b590bb9460014c75018f44b919295dcff2511c1e1985ad76710c4017071a5ba177ed890e18b83a2f0b1c78ebcf6a466eb474ada50514fde41451c666c30396eb89e8ee492e8a77b1808216ded69f530433304601f36d6dfcd04dada8b16a10b410cc1ef9568b53c4b748ed813d2a70d90fe929a3cd677c958ea24d48772c8c82c511461d26734ea130c5cceb90992579600e408b130a18476251b5fdc54cae98a529aad012a2032f85b45d98907a308db7ba4585092c9881b52aecc26e2db8379cec0f75e4c84edac0d484d88f5aff551351339d90901f73aee307f72a3f38a786941d40fde37217ce01caf983b4a6485ccff5f8d047d2648a547866027a4eaa17de2067dc65b814f7e9f444735c5424a2c30a70b666ef3354f1032c5acf1cabda5b09671b6d171670554135f3e6c5489200d812528a918f8883e22520683018b0561f9d206f004adfa5da396ea0568960e335b33ca79f549d50a9f20d18977413020da3a2764b2b2307e48a1b49670096c3949b06069d574c9977c6e3abb9feb68307a76e6060f3153a1eec018050cd0246fc42503afc81067620677506391a25104a3b30419d67cb244d09feca5e23b9183311b08a4b7c19f6daf0eda0a7264130483bf593d25fde2736900e8dcdea94a7d6c6950c3d0d6ace05b9c13202fc9438b576b0398099f594fbb0e823d2aa4c60cf6ec84be3521fe344ae59945ac87f373f10444824427cb89c27aac24776c3323102250e1d90236f807dbd6a5d3402a9fa6074f1a0008b2155e0eddf280f67794e0e792d79fe419a6d058497ae4e00418cc08d75291f7b2daf258856c289a91434de1157c388d43b49b09b5386d2b85de656fb84b7f4a89ebac8309e57bf8a714319ad7d5e9d321fac8cb8027a738ff0b5a4b490befbe6dfa546a3582de83ebef34aa1852b8caecee98c1280f3debbde28c27bab39f81343f5de43c66b025a58514ccdd3b9fdb93b988651df65e461addebb95ac28318a88182de4421b147921515be42b0734811580653d58337b085f4b1e2da4e7bea91f4f4a44f43aa177dcab30a16c27297423d3745090dea38934b187f058ca0842f4caf59d5993bc5a889504adc77baf05b4b0527101dddc877b0768b4ed1b32545aae61dc4006722502291325057443f0f1bc149c7b08cce93dbae3125242fa1f13c2390de5e6e76a618c42f7ae7a8580881b240174937541d88cb3d07ebad7525284f496fb0e33915e11c650e8bc3feaf30a4ea168e802ea5616da3aff594da46de62ae54378f9d14861bda7027d34ed2eea4b241c1994182723ad15defa3f9d0475b03d3d4a5ab0df15a3c934623694ffc4fd447f27ca2d7a1f8909217e549d16f17ba787c7d6056e99cb0229552047a10d5c3fe71d2903749bece5675d5ef77b00defb6c79b0842731e1547e90322d41a2d285f0432da2a938a9e373b8f294ac78d7fd663538bd26d6e595b4a16ee7f9dbf83c33f22cb7ec74922748075aea18ba93651d5d4d71176cbbe79d011ba19b2876bc38a855619581432e63f3b5b49b18d9da211041efb952d0dc37c8fe9e8cc0ccf70069a0a81f04e4398825b96c102593ff94f818efa4b26914bec21b468d3d81b5e145bce18d86ef0d56be4ed2f92d7847ccecf8dfc1911095e2ceba18adf85df72937bc518fb41eb053fb79444c5068ef8c8e0413a69cef28e1c3ff34fca15eed57dc5b9324264c100c265a991f8422e66a6a5d5c68775038637076166e480fb7a4183eb53e014b6a3fb1d4e23bf7236e6765bf576a7acfefb3fb1b9e4e86310508a03d17b8da26e6e08dd528c41ed7a026a8683604d6500904c8c266672a4232e18072f59fb00165b9608b11e2cc0df90520c7d58f1b97ef30d4b81d4f2cb1fb82d3d1746b01672cdbc9e7cd9a56d222eb50508c15c6f8a40d16d0853e61532f008b407b95e1d74d7ae3d44053cfb1769b5e052efc3ab4dcec10f7127f20746b0141071f200c286404ebc9c5456ce39017d1e2b9b366ab4d0853f40c718fca280b86d88721e7dfb1e53288cfde9baec1e26c40d2e4005904c4c2c4fe59cd8b91507be56dfa8194fd09b84325b4d98a6a62fafec8e5f6506b9ed2df014738bf026742eed3205427b2fc13bc3365c25c9ebdc424e1d3653a80ee07d58faa52226f1c076b52f0686238767be5aca095902c634c7bb505ebea25e81994440e33fad42e8ad357cbba9cbffb1c302210509dc2d787ec7d312166cc349644612024ef23e487c4993843332fb0a5c402f400c2211a0365decd8d5c0c095b464b8c17f8a551d869f0d5be53bdf9c19332f400d1c9e4b93f0d29c983258a8e3f91458caa9ed5c498781ab2cca429fc1dd57b88ca561df9c8b851d17d748f24ae2dd199bc81e3f2a8bc0bd09256d9ae39e0a4007b66deab23f30f6a3fea46677c3be9816dccc7bb5ab78cfd09b83b33355dc65eac985563137e50ff5132f2e05fd925e57c73a997e90d1a86444f04deb21a153950ccdef4e7fb063fb610b4e539f50508f2f9cf0a22a65ca278d1771a790132d4026c9fa191195c14d754e0e19e4243bbefe13143fea666244819152b58634e9614240d9426406460cb22c50ce4af0277ab00a8675be9b6e53eefd8bd2ecf16d19e5c033d156ce7aa3a55675461b76bb8f41258b1295374651cb29a4c174660a0097246c958605f802ccc422924f02d363caf4f3d69721c93272faa40256802b6e5575567c12a71aec940e100d2d22fa18ca5e60a86aa4fa6941a7ffcf56ddb29db4c7396f049ee51907af9f22d62ae4ad15cd4d2bba0491b9e752c9eacacf5d51b0e7a89a7bba9f5a3ea949ec9f238bef0ac6c146ba16600419e87ec5ea68283a24ba8311a67bbbb3b4febc8b21e1449fd2c967f98ec42e556bdbb359e9622bd797431e54a1c41cd856c8830213ece372a73e1ed301ddedf481ae6314e588d59008b973e4276e4a52fc981c69b09048187fed1376704739d95336a347f5541b4cca516f92e089610583b223f10c64446d8af34ae39ea55b64cdeb1ce377ef2decd75bc5c68c8683a5aef1ded82f0d1a69b7bf02996306e2f98ccc4a4177cb4d1f9ffc48e4c5a3a45261a5e8541367c5f86643a62e598e6f1b2b092f6c8a1a85377579803d2e4a64a0c5b00e0eaff8f7f6a1de5ae5fed30ca2ab4a992b9857b1a97f2808298821bf0699474283ab817edac535496d1e0f75d059b80316b377a31fbffaeb1bf7f3f90ce02a3784e8b0b941ce3d711e775778d0051465365e67ef2538d140cdd07e5354d37af8638cb9af0b5dacdc858ef0088a6c839daac8ecaf6211942b8b701432bfb068ab627a4e89ab851393f897eb30a697eb818c20c11ea45ee6a99ed5048136b0416168e773a1d9eff4d18fea5af81ebff0924c6848a4a0e4b8a9576de70bc7cd5c6fb14c915447f62c300b019072914dbc0456a4feabd557bd8e68b3af314aaab13855be1c20ee75f1b3b38a775acb34c7eb58e481dd671bc7e057f07e2de75e012115ac0b1815f9627d1aa49dbc7eddbd5098fa1eb45a6c134d129019535d194043417641b79bda899ec5c02630e3fc8e2a3cbe5bee8e369713c724d70d0bfe7ea79cd6da01c8124c99c699cb8185bba016a6a3d669da9468468edabe2424d7703d47bc6fb7bb4a22e2760060d8b5afc582c396867ea6f4c777e05eeb0b6bb472a8d2ddb6f7471c2383cb3dd0fc1bbd673856890f913143a0a1cff284368b08fe5167864029483b27ca69176f20771244a34846fbf79712862d0ed20f5c19b63578751470b5fe63eeeefc68fca27f44969b1898e82652b266f5323c07d6bf27dc78a7eb14fb9e5fb1d5b5dcf21aab88ed8de41cd8817f876d6ce715d540ef65e643950bcc1d6dea1d22354600b7cd4e062957bf3b8b7f039ba6ae417dbc27f10e9e1513736afb40d706d4055e00eeb1db872d7183a54602b68fb50c99dc053c334cbda22dd3d2277ca96c29848f64f57eda3ed286cc28f2fa5245aa999ca24dbf3ef099a32f2af835fbfd6af7422d426568b5cf36b691bf86d4821cfb946c54fd8c66ddf84ff3076f3fa9d793d85214ba09a70d5ecb5923227a77a1191bfa59b5a35f9691f7319bdce00f009b71fa834fb10cc069f94dbd8374345755297bc3da22f91b2caf87abdf9e6b1a2987e63c4808a238edb5cc5f04096274cdd80d59b48de1cd59bbd1c10da91d6cb8d10fa8a66466dce9bd3e1b2d95e06670ccf49a739e7674a6b86b48b2b4c90b75c25b05112abba714735bb2a15c64356a0bf0e5d6e3b290112db3236eedf431fb87b24e1d47bae24cd2f278adb7372836d2a0b8697d0a16c1672f3525e95d3c1ad483c6a2088ba5ec9050aca9342b701e6c6c44a661f0d56d6e4b2167bdc0bbfe7a135f44edd5372cbccd5e41e5d18776c4d6a5c19fa0e7609de1d4e70b12ef8c4d54444b9b807f8129d8b459bb0401945d746a937e93224fd628f62a8901e9f09dc46ae032499d7540426635d854cdbcad5ad7a7bdad64ba08fa6437bf639dad7b46a6d59a8724f455ae8efdf5931036844c5ece455d3abd159579e48fa133c07e55820e7e21ee65cecaa5418999f0f67eec06a15a3a3abc73a6fb3fde9ee74e72a869ab8d8ce7323ab45efec5bd0cc94a41f6e38d1bf14f7f5391caf9471c068352de9fe09de7cf5269fdcbdbc54da96466242a5f229ffa7263810b416800e125a7abf14a552beebf6b0714dcb511c0be2298002ad6f96d40285429e22868d40a84905ce921e1ada01abf6f910bc8b3a81d799f954c580937eb9e6d674f81211bf68856a969588116ca036b1106247322dfe291131cd2a952d2c7698e06f5ecbcde14a16ad4abb84be4e3d7903c555fc80dd5fc6817338078e7410c39e2e8d13381dd0889109f36d09f2378bab4299db28897e70cbd446afebdc70dc70005f64b308b42e14ab2358f88fc058759bd2fb71ab8087ae36cec0b6cac42eb9c9fd95d9dbd9cc7fad917cab7ba4b2f26a059f67de6f3e24309ec4d3e2b9358ed9122cf49a71c62dd358c972870371387e4876e1f1c82063f2da0f20035e061b4da01742da6a60bcef2932c14c5a00f25a503660927722abc376dd3bb0d365f1df50df49af2e1000b0519d9e572bd7cc5e235dc486ea064995e4b90ba546e60ad3c6f163fbd681ac4e1a0482e80db7a2d463b0a0a330cec4da60258e197c80d2882f30db3904c6336aa481ef621e0f196490df0b41f63d207bad477bb46979122c23bf4805febf7ac03ca2d0232a7b84cf474c589e3c8e7153e4d199a1c5b58aa516c09e88649021f1edc8ef8dccda5548e8dc8bb8cf9a0d170fbdac2561e27b7b41aa28d7228222857e6fd93ff97bc5fd97db02ead4fbf1d9728f0982e747e6ecde99dd3278770be0effee194e39000b235163a13d1e46d79fd1de4250fba7b17ff5981bb9cc2956685c9c54d532b93750cf1a393843b320de2ab22db0204bba9c3af194ded3a87842df4b58349be17415536bf355f47f59676d25b828dad1831f64e8e087c410d3a871b8b37529e7408faec545a5ba8da3c9f5f6619de1c70d0dd30228a06d16e078b12ddaa453558ce3b78de592f5b3092b842c10ee27180fef938875a94ada18822ce26d64d7dc1b88704b00e7293f105804f9b3b7ec776c3af6ed570ce8ebffd0afddc0038f43c60a5f946781d93dc7fc182267bed8bd6cf238ef2058555518b3947552b44799b182e6c51709f8da146c9b40a1e1c4435e2af9a0bdafa12ad33665ab21513bfd4f516b0f1d263b53da13c1dbd3f03d21157f319966d49d2f271bd7ba48e22adc2a46298e7ff1fcd7123061cc0dd16795a769408c940e4f530f462b7294420db2eebdf665ee198a3f22d40c38049df4701b5b568e20d1ace07bf58a343010aa72191175a5f0031e4ca4d1b45551c9c57e3e31613bc54570783458f89a12fd222d7167b0fc469dec2b7b332d5a70bf6a97957da080ff3361d4b06e7bcf4476c914549bdd1d10bf749453cc44dbcf43dd7aab6b25cb082039c8582594776601b4819dfa1b7eee4995931f2fe47371e00cc93f5819ee40d05499261d17e0623db158f24274e7271e8abfce44245eb08e85153251e59f7a8d5f96ff613fa78438303c846ea249587eed1cf46e814b3eac8eb544ca867db13c07f30c790d2415eb8d95021f660b39806485cfb7a4159bde175b362d822df8301042b99fa5db4785ccc77f9206047cb20366a3a8ce68880eafc5740a170d470a03ad2f0b63c7dd362263dfd23cee0581c6ecc8d5db64dd9a38ff80033b6b73d6bbb5c66de80583af6c751b81ab82dc1dd88d5d6a830435a76ac109d4ae91054022f4471160347846805aca3f89a484875c5bfea6d5ddf38ec3e1fc612dafd694648a931ca1f535320203d7ea8c81d1a2918ad0d2be7de3439099a7d07e856f99a8446ce17bdf8928953f301dd9f61eb8db1782e4193239a88c126e0391c52912c50b2482414fafb257b2e0eefbc2cbbe209e774514b7e3b27e34d829b62be01203dc413679809abc90633be1354924ccdddce292f8bebece532c48772c6e14a7f91ad4ef861c5c30e9383eaeb0b976464e3857bd20f166ec73a7608d9f86e6a2aae24db85d036e285d18fedf79c26c477ce5e793fb7cf94b89cfed912cab1c16f912328e6f00b00aab7f2f66c8b28960f2d4ab655d0213e096d9400587e96615f60904c2695af673721dad96df2a5044afd0fb93f82146a42a90fc4487cc32f34fc338d7bcffd6d9918c11e35c05270ea0e3856f4e891133316878b1a55d00c9732f6831e20f0703bc8e8d4a3191e3a7651577d3a0ad075b43513d391889e08759c0b47db01fd5ef2c4c3d519d0ddcc80cd4ed88635ee6bc79a370fbf581fd8219f3cc56108a4749b7164bbb82de72853795477f0c5b54e719bb617f739f2cb25b8e6447257430e7ede4e2769519ba5ab8e72d63605304939d730e33620ab35bd436a97d8bf8b81cb7d55c1051dcc2a5e1c1898953881a0c5cab85157888f6848a78988af4ed98a09d8d37d8924c9731173e0748e04a704ba87bf2e24e5ec7933fcac0dd3c5c7964ea938385b74da74b43ace6631cfbcdf2d7529d3a6bd042eef690d924077e308989e20eb59b4ee21f54cbed1faeae8230c7bedc25e20b231642181358eec90d7c9bd99a2abe10a8de493787a65ebe971764ee2848fac4dd1a5d4815a74e39d5978d08d62a4d75860b7b7a5134c5eb5b5f8fac281397127846efe62bddeab9b502c7954b492470d5d85bd0f10b2bb417faf1200af3b6c367a91aa9594eea5348d6c66de231690ccaf829a47e001a63b0e80736d1e54ec9c5284fe0cf93451d21e3d12ce5e1145820245783a3fc076356e4bd690184e4c7302407afe1e6ec6ec4ed67ec5e59636bc0174cfb85f4d6595d62223bc52d9a69a5d23730cd641e7d67c11da315a49f3d540435898595d5c0372cef6db6375cc0a324db6c7241b7ec8de1683f8c19903a623b7fb7897c4aee5b2207963296c014107ef2796a02d62dc1782ea5d1600632f66b03a563c24c2aa63c2c2f1e24a5d5e2ff96b83e51cca8401638abf83d2c65153909637c5dc873bda32d600d1bf8d93aa97e19eb89ceca2159eb27a9d151023006d22d9046705e7b25cd6e52206aa71eb2a8e7c0b4c903bf844fa60aea6a780866ab746777727670e7d3f198f315941f673e1979a23262fb84279527dcac4615f06d8a6317a25f086e0196d218bfbfa3c5c172e08e1d3acd74f06afbb9368fca60219d702cff7cdf47850fa5c17e6ab46cc76f4fa6def28566f1f53e23c4efd766ce7712c2d2de01bee0b4c222d8d5d23bd9252fcd262eb2c38885fa6eddd8e470c69385857147bde0b6da5645b5ac0e295189aff081c42b060252098d9dd31b3c276004f91d216811d936bda74402533e1690f77573a2540afcd2cafb4a9ca1a2647c0e91e06fcd6b3fb5275751210800ba173efd6f9b6f4ade5b1241746b22a8b75b700bb7be33dda7caf355e8d5d69fb53bd8579bc223ae4e0cb35ec60ff2ef1d6d25ad8229d76cdbc9c0d5db0d66c72e593668254acdb1dc7d0adab6b7db56185577fd333edf9560c41f8b0d0f2a8b7bc0ecc1256accf629ec5078b783da554bf953211a6df4293de7d02315d8f83f38a5f054076a06de6b6b631ff7b4d40d36bbfce78634fa5e6ad6c9856e64421a57458409d32cbb7594cc46ca7c12b33396b9f724a83738c4ae23f8be1898179536e772158859527a4a589efd55a4725d88ceaaab2b1b0d40db4ffc15dd863fe0acca81c3da172fde8fbca495f66a209a5acb8be50f88f0516b86a915c61e37c534baf5bf1914c523e87146d7653dacbcd8483d342e4150a8991450e9e1348096327da5c8192b3d397018bcf148f1b2b6391f68638a875dedceacc529642f11a7de9fe7904bd9c5f8515f269c10ea20af54c70c17fdf8565360b5972b2dd06de09ba9990260f9e98c949ae0c966c240faa4cdf5879dd80044299a9988f10e8b4b1167ea751b57576fc31243ee6557bd2e6f600101f845707f74a01a57237f0842b92274adfbccf79b59a1cc5b6225c9806550cb684679c8738b8d2419e6206b08e601127aade11146a0ac355620db3961d63caf70067fa6d98a59ee783741a63459b6a291b6152b8e4780cb507d3c4c603da0a6b7a1ac5289a2b721983fa66be70b058c9b0a820d9f0f62a7151c98acca20853ab1d08b0fc44eda134fc508d69413f0414314291c50796c2cb8672b425286d283831bb86112d47a815546648292c3f34c215f3e83ce8c16c02611afb59166543db01f3a42fa30db5cd320e2e3950555c28f503751006d0655c13a85836304b31b2155ccf53e11e33a4016d844ae78c5119664d9f80524184f980d1d11940acb5050d34684203445fe14eaf5d492614f5bd5af706fb6d4ff795660c6731214d3d69b7c5dda1488623e2fabe32a86a1d7ea8e1da17836ba3eba07453d9b557c40c24b088c14762867b2a28766ad5b17b1e3c64946da27c90e2265625a83ad44fb1aaa086a0aeab2bfb328c9a2090af9c361b8d53452c3c55b7336c35c8a0dcd913908962174875ad3250657d2489c5e5b676805b6def2a98fad0f096ef49d162008eee5a8adf5edd26bd5bbcf2dc887a12ab47f0682c0b7dcd51c2c0525d7a2f753623cbd8e69056f9c928f4d1bcd01407a50149346a2bdf7915b97ee755eb2f332a3b2611542e745803feae043386c9ba297956bd52ffd686cce2013eee669d7d999949d04a9b0eff5a02c8bc285dbb04ce7527e4ac3b26b01501c7f1dee976743d79f301952e52baf61a9b10a8f4f273587bc738aebdb7cd42a7307f0881192d209731890b05565b0b03cba80573c4d4e9e967e30530d58a0f7ea99b8e59d9008e00f679f4155a530285a12785002eb1a756d5a022c96a9cfc2e2244f85272b978a42f62e8cd52ed12773f884d1db4ffb0fec4b1d867eb96fb4a28f4edf635e0da62bb2367c66190308e75d4a16a026f1cb60b2bdfdaecd97993fadb4c87a362e4c6818c6e6aa81d92eea0b74072f22d7d2f4850ac3268b90915a0cbb6880fd9f5ce7025c9a1c2000539aebf9f3d6f602f3fa6a07ce1ba2c246f410bd390db6eb8c968d0e6314b8da4e756034b8db73681e08b5b5fd0e2881882c383b46d09d1f5b03268c141d4f996c63f2d222e5c00fe230effbb6c20e7d7715a1bd6cd6a7f6735fce100a7c350519e024156f994bb3ae1326e1e00c9f4cd827a9bc8e0bb7bd01eef392d3ad2f52480ef708e7b0ef864942d8e98430e4ab54314c8f81bbfc35b06258b89261172b01198f7cabecffbe6d9c444c3e0f947e4fe10e301aec54db404048b5bd20dacc50427d493252271c436e7c21c828bad7fa431c775638d78b95a374457ad25f2918b127f33daa977b8183e35cc4d9b4e4478f59645891083c074f7fd8868b6f8b07ef7b5da8c91b696d842e65a50fe6e18174d362917beca49849d39cdefef2aa95710b5065f343787b732caa3c4d82555a502bb54aeb30eb5ca851b42a0b92c3222a7df4f3122c9067ee7c16726aefaae213631b6d2db9cd011e33675630bf6853688ea195421296a144c1759400b8297e401a49f40934b07eb088c9773483f414591388fc513083793fea72d79e908ebcd33f35fe95929928328c91d263c831bcdbde1cac3c91228b2a885f85fe529cdf0d21e5c48162f575fd0b873ad563affde7d93a7d0c020d3b4cf8f6e8add1501385d87fba1dce4ad45f0ac996783ebf5b098115e063d1ee40f76ce8a3775235f25d45ac87d70e0fec30c389e1cf0f2733a633b6012afd15824f8cc449f4eaee76d44c27ad632c3b46fad4f95b7af46a5ee66e172411f4736fc52aae6ebd4f9035dbee8f3f1918daa5bbdc20b4f7b76eee19be15f855f2ce5689b73a90c47d5f080192d1167efea647a88aa0b31d7426fae730df78e72c37a1b64c7085fdb83ea1a99815d597f20acaa98e7616c6c6747132f81e4936efd1ca1feb0a3af55407ea2576fc77ce6d452f49c0d500fb6fd4ca2303f25bbf1ce02095fd9930592e919689d899a6b5467dd0977e219b8bdc41ef60805287b60f4eaf64cec381d580d19159eb12045b31827415f3ecee3a9dcd0a9c3909fb9154dd4107f9fb61e007d14fdb83c35216264f4bd9fcba13a86e2ca5e2bfd4a4dbc5ecc9b026b8ad0e22c9b9cb9ec5ef77c1b4d151284a99c38be9e65d7c2c0154ded8b08a4b2ce5eb02daa4dbd545c1ec5647dd4773a57adb59db0a28eb6ef7b861475fbfd91fc567c777fae2322f6353fc4aa8ce1acb6038b9533be31a4f24bdfdeaf91a2d36aac8a02109de6272dd985a2c7ddce389f81fa3a7d6d2524907feaf796e6ba9d0d9e45b3aaa3e03a298916f98ee556e7d6909f9d2ca26331ad1b5840f3cdb5e75ad86399955594fa7d01c27d2152b9cc2ba87dfdca5342f762b272b4b42701b61d695716945709cc859d8c7d76b9641343a8fddc0ab6d70327d078df44b69c920b01d1848f263c2406042734f861668a29956b5595af3e16b2193847bde69a9b7c795cd7391e5dcc1157bb2f0d71bb2dcf5eb005b682bf88113d9ab6344b9fe666028c641388a91d0ab69878c169c219e4ed12fa4d5f2b323def1bbfe5bb86f730092e533b7217bfa012685a9a673656a57509100db1eae6b9a25d6b4a3cdf5578b327c113cc9aeed289a4e2c55c04186ce61364c65abed57937df81f89a7c9391ff064c1fb4541c627c12a94787f2b0f71f1357c38c6366a35f52da97e18c46edd6c39d8003bd165958eef7fa95943bf98bc299ee2b0afa4169e0cfcc73ef8172fadbb6f506d18a97c451cff6b5ad5fd88ea04ed494f3e6aa1d0e6f21089e8e63165cf32defd5468d9810c70d55049936041d040a64309d0a9a003153567216e4e1164a8043378e8125a04b0996726d94cf1d72e503631b7d557c0753a82ed004be69b25450f26c9c28b4f8b8408c578eb1242c6b4d1e06dce305272272f5c9a8aaa3a6c96158b68cba76483c05454a82f29d017f1a355ec6b0db7c5b929ddea5a1ac463d15c6d31e9c83f4fc806587565126b9e40d14c5388a36d2f80a66555bd186e27550f9e03771774c804e5c6d6f1f919a22034cb43252a2efb3239e6bce3bc434d6fd43c8bc9db0c6d65f3e6149ea7674e18c6efa9dd116b9671e0fc499405cf87153fccd830a990e7851c63679025697351b9f2304f14d351bc642aadcde0bccb115f7594add1de496b501858d5c34b02b765bf4b08defdc9da2f6bcad020a43fa1c439424bd14a0cfe783ad080d0b0fbf68a1be8f0966504475f8cbeea50d725d2a419c6507029b508db484fec06472ca453053fec96ee90635d4f3a620f37907be545f7410e879baf71edf02144f4e41cc2b36d3bac190e97fe31b40503c7e8bebfe3ebb8b4349cac0ae766c908c25e68dd34aa02a06891a6edca61c80d7a0dfa3338d35551db474e92dc79b97329758994aa57957aea2a95c27f592af5fa926133854bd66cc73c2f1434e26d9a22e35abd8c4d9cbca47e4e2d593a70b01f5c2c12774b0201baa22e9756f6ee0952032900e4416f1e24c5d101e8cf90a69aaa3da88cf5c2400ab302ccb1eaa36866d13286cce931f33b0e81b0a5f4a5360b936c58f7685decc8fe820aa0cc6b47124b3352ab4b836d893555ba7bd97a9a328bc6ae535c12fc9e313d7b1981589e42b6ae85bfb5315743bf8bd29c3a3295e1d1a5f869a0f766cbf08357e30cb7bb1f609120b30c5339db53c2ebe88f4a4a5a053ec38cba227eedd2bf23bf1ab3396867242c9fd2445ae68e313939bc0a7b65c8c58991137f1f2a0cc8d457fc8ab752bc220f2e643870fe05d9811a6e4121c124e16aab427b7e62ca9301fbc81a51534a3db25b17d3fc987be5677a3acb55d48a62c8f170e31ed26cb9076abb3965ae4b573252ddcaddec021de3f1a52f9dc4079ab92d90e9c69663184a94b0d3138badb48375f85c0345c82ee86559077ea14eb1352b77c076fd7f94e91d15a704a759b71a44c798b8c1bdabe02484287435601d4432bc9bea50897601358e47107b53082702b24d113bbc113a5367e5225fada7079dd1c0085b7c9d9e15898cdf8709b711b6fc14daaaeee999aa7344a88ce5ab14e0a4d1e735ce10e9ad37d4ca08466174cd007e024a8501b449e62f2e7c15df6bb0556df11ac6f9c36d051a7d17aaeb67734db60d70c7db000826812a5b6f8b7ac524f607de14f3d961d51061553e35260c458b8ebe12c50d90f5798b2640e1f1a3e14c6618638874d991c7c1f35a37ffe18b42f7502ae3028fc75a34ff24f3ece88e8404310b266caf21dea271d9b4c1303793f27748546170b90ed109cf3164b71c7c356b34f26f5c686a948148e5401857d5e861b173bc08da7840aed9a6cf0664ec8ef15b6aef4afc8ad28ec1d31cd3ba70da18bb21211a54d3d00c70b52a56fefca8284ce62adb5f32bef437388801a2554d21d6beff91435666fa66c8203becd4250c499379f2bb86c2e983b4b7741e26ef17cdacf9a6a605631e24b9ca09978ff66583a7971a2c7dd8f96026ba0f801a455948a1b31724b33ead2f95b74d32b0925ddbae06e735535d094670380a258835421954bad080da5d8c4cdf4ce1c6783d9d119b485b91478df7aebe279671397018d4eee8b80faa6a9faa51edb255c9dd5708424ed1244bcfca108975fc9064dafa570af6bc2be8a4aa89062eeed8c28114bc2e65a36e89b6628d4b1e2667e51dea69a406836c773dee48816935468628539d0c676ce55d862c9dd25ab2d6d76d5188234d08d9b11c61a30e8ea4c56a77bf7d9886b463dc3ca6b55271dccdf02dc5cf9d7ab791212206054392ab7dfb8dd46cb56391c0093c9ff7c3c41d8bb14aa172b8c01c74a2cfd229c967020254bac8e4eca1979894c1ff0c557a9c98ae109d9a1caccba1a4fab0b9aeabb2ef5fd0299bc11f4e7e202e9aa409126b6fd8268814421505a246a331adf49119ea29d9a15087691cfcbb2ac33657613b908723a61d00ba721c7604cc2e3844707e2f5c1e1f901230e8fe77562372ade817a2b3246c1757101230c943dbef1e0ec15455f9c46f8369338ad37bb60752a0dace0883f874fa0e84b4a1425ac9ac3336044541ef45e57bdb07e30f8bb28d5f633c31ac1a1d5a3c7fa5bd663e1232266ae43b1b0b8b17d199e9089d80d1cc1696451f8a96fafd321c0b9de1fd2c07c015309aded1f180c0d29a024231aaadb06410acee0437fcc4b24807a0c9fa0070906ccc2185bf784562c081d7771500a3094e544a68950e3243112ee0d6e8ddb669928730239f5d9b65f1ef4f2971909e82d8b6c4ba85c69834b5a68ec1ebf8820683903563bc9fb2b0456218be18915c250af4304e6854ad11645cd0705480d548f28e9173132df94fedb03668ee07f4609e292386063a17652d6a78cc6e6cf7a89aa69cf209af930219675a104b7eb4058119bae4668752cb929b29a283f342884f037b276a24670242cecd98237963cfa49169763ba883535456af2761e03cfead1b8b24b74d9e994cfbdc993bf87a9a312867c9163a1ea3c525b415767ff95ab3bac3ea203d11a7f910a1b184fd7a51c0c3705ad0d205930558252151fe9b13c13fbb25f375cc5d845896aba990d19ae928f43ddad0bfb93b9f81d49805a75214aa7d2ddcd3043ce42c305587e15b7a2067adfd987d7e1b66219b765fd67cc104b7c80b126288044dc6a44015bb01bbede77b695ea5d2ff515f23a63f4b58a64a1f012d75c2f63aef475cca2e454cb8912fd61b81df323815895be2acd95d614470f0092a9b9ca848e6c9ef951c83ba1e531296cd07a30cebe9ad8a5053b96644dcedc656f557e39731db33dd975f8dcdad3ae1c8627ec322dad4696a5dcf5c4d50adbb2d09e0c058024a68f45bbf830389d9111f3d0056ac00778fb848d6534a5c0d7b66fb960e2a02d3b5a72a62abca42a24d170353741713d05b51f7cb995588c4f6d85402bdf7d50fa34d9150757404888a4543956e339df7097628ff0ea91d9c045f38e8730b84811b215fdd773c26c494be53355fec400afdf21c92543bbea19adc22fbba43b10477d9304107c30785ace066ba744aac80a3d56d3554591a9d9d4aa46a788404bad5d95d674d351ef5722037471337f04edbf33c29b97a0b39d5d34324ae7a5b9673df6457d3a121be4722f7c5d89d146d352bd40d16e7a721aba051da66a5716f6650ced7aa6523d4afd98759635e9ebb3692df4ba4fc4887ab0c553c8db368c4e5f76347662aed5a53917091123199a3f781373a33db1477265450b591b753b290489993fb6580e929b4f74f9104024ad294a33d70175123e2f28de60326467b2423b1087f8628a406f1222f8a67f53008b620a1b2032dd13b253c5a7795b93a8f4f55e629209c6eec57c69e27ec19a698057b3a5ec8cbab3052960c13690226927e07c144a2e772afdc3b2a95206ea654996aeb4179b3b23b8655e87324768715b6c318506fecfc05c1674414aa276be750798f5dad409049cd51ac57cac9622ccf9a2b685f605853de0cf5866ac0cacbbae6d61da84940a1ce21e465432c9914d216a67bb66558028cd29ba09f7e5494cf481a74e758174725d7d42487b7716c3491f4dc2a731593218a0a954de67424138c01a5bcc74abe21d2b4d4b182131afe4ee4449150a9c1e9e7263ab00176fd46d359ded0e8b4062a74d87804be0ba9cd689f83b242a4729f5aca3417445cbd7575e4ca30ef6529b8996166898d60595b652f690cd83d892a007cb5ce82486eb0283dcb415ee78330e88806b7ef6c813c1c42250186ab6318f1b219508fd698d840beffca9d20b9240c4d7190f8063c034250b715fe42d325cd6781d707efb280832faa2ae7be70233e9450a72c4795bfc154ab988e409df49c10784c818c049768ef643f6819ffa131b087d84d7cec57ce1cec6712eddf2d9b2151ce57631e658c4296988206e39d5de5d98d794112d5ebb409961b49044d232dfbba838cc85ad8f561fefbe3117eb723b1418523a82500f99fbdaf2f15f7a88599d979227b9ad18710e87b68e7573294efa4ded469d769c8bb4aadeafab894cb694bbdaf6c5804e901f0ccdbdc5ffdabe1aa767a8a2989c0baa822595e8787a85c5647f9ca35dc2e83f3bf158799ca215a77c1b508607f8bc2d8a50e209f0b7c738126b4e45f67d9bdf2141dfd3e965445afb5442a984027f699c00952922570c73af8b815b8fe5fefac85a447680504cbd43c2da0279550ccbfe2c268c2ff22da62ad9ffd93f3aaca7e8c261d1c50845cead6a186cf9a817ce5288ec9e635cafb7a1b9d9c6b321605086baef20d3629c0a541396549cf21af3471e310657e604a0af3afe46a360eb057d43c325f84c5b8ccdf5ccc61072e9ebaa1ab420ae942af1460b3da785d6874f170fe18920d295dd0ca1304a10f343ab6129016b61fa90cddbf95ab06d726d93dd82585dc61be745edd30b64eb7bcaf92da73dd332a69de5fd94363e6248c5a55289e68fdc7ffc117418a2a8824fd5c7bb7fb0ad59ce659c177b53310b89555405fc76161c35bda35c2edeb429e3419e41c73ecad3b0224c203a8d034e75c6968afb597d8301c3504f7506194988679412f9642e162521eabac613864c93ff327e703c2e61e9ea4c8300ecf03fd81cc972161b6ce6efc2a25103ede3efbb400df693957158ab349f2c1cbe11e02e118372d2b13ecfd8f6eac0700b759fddfc84bcefaa5c293b929e18ea9173d4b553bc22d4b857d35af7ea122b9b170ddac389c92acc9c89f4c2dbd4b7c75e026ae7c093a29f5ce350b72d1acd910f8646058b60b006596c43e452543aa6e810416b01a18c80f7a8b91e8e4ba2b8c87f492b2680efc7bd95ac0f2a18d8a1ab1806cb938dc41489a2c7c07ed51145d718e5582b895186d29be9fafe31b69f04fc9bd06ae9ddcb4a71b150acc44e351b8722b67200403a48350864486c740eb2919198d2f0f96e1372ef58f0385d6bcde05eb71c7791abf4e737a52864630dc9ffbfc1e7680c9faa8d6dc672e93def8226157c9ba44f97e4eeeb49b9d0a5ede19b88ee4c607c060121a389c7108793a35c3a5866b46cdeff65899a473841b5e1af89f2ed331d9424246317a5caf9065dadb1ac27f128ac55795602932a56a77d02db8431ec63dd2d0914e68d0155e7ac077d12efb1432bbb01e0e277f87ba2a7a7eee838b0b3011172c496ac9aae816ba83a5275e5c9d90b1fdaf9c45c41472126d42eb0455beb07239115529f1c0ecbbcb057004a3884ec56c223ec0ce400f76072c0cd6e8b2c33439ef63a4ae21a72a0d653f1c082da8007388d6720413c1bf2ff20a68a94d66b1e41a38d58b9dd19360f02ad246872baab332cce63cb6bdcf96b4c63816ba283111114cf766c0b69364b0ca978fd4fd6f289f1b68a0c55f8dbb0051a6f9eda088e2e18b679596b90e78b428c3efb22af9bfc0fe04aa77c5f86afebbb13ee020ec93310f42022f101a90077dc2922d97e672b1f295bcf0e7499659304df6ede25998f4fd119f3b4f7525e80227491c696590421a9089f28a4414580288a4b08fdb1dccd13ea64506448ef416781901192f1e1ec64918fa7833277fee6c649833d226d93a4dac9bce654eddca18b882f56dd3ee9c118ab76f68b550cfe6ed2d4d90b348ec23da1baa689f34f81b86c342d717cb717dc52b09a239b27de302d351cd0e712f0755f15ebff65b40cd277c99c894d109b463a342e497812291de598a44d58bab47ca26407da0c8a6fe5f04db944473946b3f6229d129cad14593e94ed2cc1b8e1336325b0de5dd9359a5d6dd112d801ea24cde3069f66eeec9dc2002480c761583bb11a409d871f19a04aa5fa06c39cde5ae90507d5b626cd78927d42ea4cfc84c16a0b6ec2c1c766d35920838eb873c894fb95f108329923b7a1637d374782040466fdbd74bc9aa5797c30320700d388c67bb5869ad2a33d5ecef505867e4062391c40ac3d065977eb5018ca770c4054fae79100ea7574d054b52da0c1a0c10b0ad41593b7693c44273bf4b4de083d54f12c5bd8a8af93198da2115e59402983921ee6e2ca4f16815808b7610534c917096da603df6776936249c92f871111d478715946091954c0db8e4dc755e6ccec371b05f6f52b596e1eb4c691b39c526139ab91c408c36355950697526db32fe45b2a2c8c759b152e8d9951c41f6cc86945ee3a70407cc84e10f03d45471e482371ea834bb04ad19b599e2b22758ab1aff4d02c02ce3709d3229b298756480a7a19b15425e1f1b2121b2392b4259b944656172ea819bdb5eceaee3f4b70037d30c219e2726264199efb1a43a2563cb8d84fe449b64fe99047b45b9d716fbf0fe6af31768be25bee22ca819f70f8a9da45066c217b95488486430441cf03f2613ec652bd55771c45c570860204b5d11c569168a6c25d888a994ae6df630db3192d57cde3fb9de0fa72376c952f6355311a5a151b226c868388229127ecc50895d2ddce675e6f05311141ae1dc71ef2433235055a042283426490b17c39cb3eb0c2d8646ab2f7bac4b0602c509e63e93c048e861db207d0416b85029942897f2823bb2687e189cc82981b014c5b8663cb2aefbfba9c69e219845075ea9e94d5e4347c4ea944ac854f998042a433093fc1caffa17798f4b09d06861f4014173ad2064d3c09cbc6f00c06cc3b238b3431e96524a0537b70b5c486c2e01c42d4041dd8002e881acfe8719f8d51201f2e122466b33d66fa55b41db05416b94818b8cfc40cb42eae0fa55321ade0ab876e3dc63dccad11c56e3567412e23431e58c8a1e69ebc402d4cd0b17f60efc40f963ee12be0b0b858cc901929412d2ffa460568dabed71e1d17062d098f7c2286d714e2976d7d4769c1485d4ab922d82ca523c68b593ebeab08a6d5f89e6a40229f9b8f3e0a88880e2bb0c616090b9a0bb9434f74814761bc6a72c29fc51bb4cbf93bf498720974d156d356a3defb95e40b76e32a75047b6aef9167663a6fb639a22814d91e882be895ba2da43de72ccfaa640c32d21b107d960585245b4194a612c828314a89e01a422913df471470e6508c829984f85736fca4ed308c0fc41f0ab1fc1f0aea1604c131a022fd40194a7a622e2adefb37b008f9fb1e293c36d5758939e13245f65de5cf2df079b619fba8143c3bddce3b97083e7536d6ae3145784879e3806beb82841249fe5323306993af0e6381097b0df4148808eebb8bee04f3a43759c2550d88ca00753eed6f3a4f28c52df66fb387d9b9ee1fe0916fd6e28736db283babe6bd15ea8848d808349b0d9c433cb309f967481948f6a74527e88af8a83a776ba4792989aaf8a8ca41f55114c44450b6ed232790ab369f861e4ef9bcb9189af1912349a762fe07c04aa8e5e0518aa859c8320d87853a6a193043ed4e560619a547a45193fe9b3dd4d1f0ebee6be0aafe3ccad4081348cf3bb7b907e392013f1893576847f3a331151844f182c05eea9f638372411da91e353bf7f4964b69694ed055a11ebcafb6b9ce3581b3bbb6ee980c8dd6f86fdb5335e279522a1cedc180ee92fed5b8574b302a2248cb4e11d96a2451a7d993f715b624c698c9554096f97a26c11f934c107c7233610609cee460707db6627f35ee565bf5293543a28f16d004b0c6c425e7cf679e4c80213c7395f6c65fc298a8e8ad0506e6b148d3f005e68553dd04c34654a48235527bc1ab6e5a00e757da08825bb148541c83ee749ae80131dc471abc87d507471c8864b9177e5386701d5de4a38b01900610aff9615cb46d30567144b2db8aff827b7ce29494ce6358bdf80db209cb4d8dc9054426c418f0213e9d03853a4008360cd641500f02e1026047f829c03f125973c5ea5fe4be550988645f812c7b3164011183db28ef947d88ce69e776dbba2adfc90eef0c67b9cc92747b7d09d75313ebf2440ed382ac372e2457060f1d72e82f1308ff1def8621404dfa247178bc22874049d8c5273ec72b5c454ca32d04f068eae2cd6826bdddc927010cbef39299690e41cba1aaeee47e8df8fb5c66848a20099894e3062be96221909f14b8e46388e1109c0992e14f8b222552efed88244d45dc26a06faf8966f8826fc67fa81c125444152c18802b4906e8c94b5acb8912c25de4125251b19bbca15a330accb93bae9e3d6bf52ff7665cc036858e9a1eaa432ec04f09d5bcc97b28211e812258ae09d094af9628a18ee914f0cbc690c5532d80d6c2511f40702c1bce18c5cd5a8371436818648a89b5a2fcf7f22e0c2ae70e9cf95ead58674ee31c80564dccb9db5382a03584419b9d90c9ba223d9c6110e3d3301e62fd956397cc9adfba6b884dbc1810b6612bb194a6fa06c2403b8a4c1f6393cdf371848c2d23ea9a8d8853917c92f48b063e3527251c96398381ba2f813c6a5be4ebd420fb38cdc040c6bd8a4b60ba39b5a88996e064afdd340c04eaaa72c7c666c4f932f1950fcdb2527ccf51740fb069be7229bd1d8a30f3070cfb994bb10d240fc39598de15dad618ad1a8aa5f336c97f36a4a6870e530540c9cc29f58d11991166d09b64326226ffe12be39118691794de44c46227ab833326fa7cbc2d6024d4470c34648125d780ce6d874ab781e3447eaa158b7f3e236df9f9cf086e0bc5983b56db27ab6371e65f7eacfc1e638d576152db9f314521b7ef546cb634f3a9db136b24a30b03632a91cab7749937022cae951dfc9ba6006927e12d85570324c3abdb23878d734d0c1ecc5d9f5f7bfa51fcc5ac47102749f1b0ee71a5b11ff78ed8f3a24e0004197c13874da06da7e731a8f2a506ecb8d70301185fa51c438df4cff4064f71307c8dc9aba82cb1bf92550efe68f69e9d1c136a668214b90a75ef016be85c8f52b6ff933c90edf43191be2032fcb575bac331bef740231b0b145cc95d1650144d9bd3876626e1d7cb50965838d7d844953fef11dd1bfb706b2ecf2333a652f1f73505cf53cdff6d5fa803a23c4567e4f409595248f0f7759a5a0a221cc6b413573c4fc65421e0f0a068432ff161b917f266d03944c7129e07835b9b8635f693e465d646458b3c0d659ae7d954ad2bb0d3e3203fd73386e77963d651352f334ed623ed9ea47dcb32952c07cbc67d4f9249ecc0dbfe4cf24b8bfc0651d337d9657825f0436d5faf8a7520bc71717cadc7fc487ef5c33c21f672207dc9d18422afe0c807523095a01d1c062c617e104aef5a507214ee3a7463195b71dceccd4f9b69816e8168172b2ff4b5034a177d652566c72b961da7200e1a465365b724addec4f011039b70f054cd0667018e2d4553b23b7cd08c87c40d74f501f02bb5ee49347e27f6141fb4aa43dacda03296ca00ee9ada325ab805e273afc2a3c48bd2d31f7d23f2892317704874485e58640184cd77845a7be8a1cd203c3b1f336820819af2e8f15039a27dae63b4c4e42e7cf161a3868907238a0244cb7012707fdc2e14bc89b9e6bd377976929921a73b980b90a7fd95b0353bb8591bdfb90ace3485b1218dbf67d92ea501b0001f7ccc05cb915ef1aa5485f89646a614ac8ca3e8093f6d632900f0d767e5d40342a48450342f60ac332e4cbd8408394043904dfe1f239c8f60b808282057a4c26d7bff85eb0b79378b001e30172aa15435e8529bc082f1fcd6548951fa445a1a903a32ee3cebc03e452109332f5aba19e060bda8146c99a0682e5055963b877c1dc9a49b42a9c4bce9c5c7acf5e2f4d734393e6810fe3592c1270776f8ca2380081400045eeb7fd7ce098b46f75e405f855f611e3b0b799fda0e922399149ba343e6ba46ced93fb64ab729e8662195a4f9944fcfa63872a41e8374e9f645332c5901db5779830ce30b067dfc96ee7d06c22afd865fdf4a64b23bc2f47d1fe1c9378a7022b53840223d81956c2ec8b94f55ad3b15ab0b268f4b23781c3ab155c607494c6e6f14935f503138a8d4fc0d8991ca9e9f150e5e47b34fda3452756468c50fca18da8c4b22cca20335cca936cacfe4a4c02978ebef2c17d1489d4b8e0ad0eed8fa4cde5a256f803b665137db9084a0a2f9ae624d1f51c4f208dbba5d699d165e32aa7b7b2058e6d7508fb198c971fdd43610d3c0b237ae17eb83737c6b921ec624e3bf25a54622cd2ab177cb5a5adf8d10b7b5268b562011c55e7c4d19c4617a21909eba0ea241682903a708dd889d7bf69a48f91436d019456adebe911025d3b839bc8a8727d56394443cb7a4a16e102020ad5980135d72033dc5e7e251edfb724c363bc12e1d8009c40d19a99e08cbf2c1d612e828e90a80680777a5204ad0e008fe371c428de015d2329cb281bb95d455e9a13066b4613101e08e9b6d1b555dbe4037ae2b97f79c22fa17ed90f18e3c294617f669d03b083930c015e1a616ec2b40ad01349b13786f7de5d8312bc15f9f98e3be5f0fae2e7c0ba29be05b710a1337d97018bae23dae99da28f84b9cb0f6987a5e9c222d5120a34139c305ce0a0b67d07392cbec44368e2c639b6f00c4697d62057557cbea7099c9f435634e694de7ffa38d427ca5ab7818edb7295cc311e88e2b6ee4d5c2a164dd20c2000ca11320a366ffa0b5a2c18185023ecc7667a1dbc6d7787b1106ef63385b8ecd39386410a5ea92cea760e4af85e06226defdd4808478fd1fb1a73b313cb6c7a717382e255137052c3ee8cec84c24cba7b27398cf062c0febc04fee77158d8ec41307bd17e0cd19a7253b8f39b5febf7f0d1c129fc88a7c42f6f7c653c82f3d309ef28965f4de4f116eaa929ea7647e4c480a2f4f6cf2922a9c9d4c612898c191a9aa2572d65c4e2746239f1731cd93a6a2e8f2b5834a2acc13454138366d1e2c680e999af09a827903de2ad3842d10ba70fba2a9db72218dc3cedbe357122e2c248c35728817351343c1a852ef426847f2a896281436e182c70969003828945a5a538909b4f198deb3bd08213b4d100f914d2a2f131f72e292103cdc53d09436f6226026527a79c09a06fdd96c235737281704846200c0f7134f61b6614d05a7607ea1670d2bef33f74d2153480c9bbb7267879aa0e5e1fa1993226840782964fe029a91a9538bae595150f8b56ae6bc3cc4767ba941afabf817a040e0cbfaed792a51af03a2eb67235b669e3d958248265e7cfc2ce547b63e79e260e2614dbbf32eab5ef816b4148179c1c110e56b5cbed12b68686004243d9c99abb2b6b30269d80401534789ef82da763c3eda83416d13568050221c4a9f3aedc5bf7f71f698191ac9f9d2d9078ae974a59f26e274376f342d6128501fa0a4bc273a3ba38f134a23e9083d3b2ff116c2a80144d7011c77821aa2fb7689cf99834ac66db208a54526f7ea03fd8b0eef65e35e874e2b17c81d2ab2477e5c40131c242d438fd35f6b26263d4a40b05ae86b99a8699d286c221091ae321a8389705ddc1824103a56fce913b81ddb6aa42bd898393f7ff204aeee751810d801aa7f5a3ebcc50225f48177b17e5ee6598c74c7831fa8cbfdfd9e6ed62e3a3101779914f175dcacf40a3eee48ea2650c1c9e4539964ff18ed48d54a55744f02976a41d0d034f3d438009941cb7aa274fb816ecbb618f52bce79f1d233dfb26f74a2b949b82af30992fced9f39d24f0a384cc31b5344af57b2f6480fb53eba7c4322663392b57d88debb36e39874edc1101dec53104be616d1fd80ddd7c6a7b4a681190dce4cca26386744585af84bd22aa627f67e236e56f51b238f2bab4fcca87971fc4890792426f342d40e2667d098c98122228fc4e5b059bdbbf3efcbe65dc81eafe542248858d681f11c3ea356ab866674b07a40046ef04ef74b24c724f9068c574a195bd25dd5b1229de5ab450e20ab0ba303affb29535d68076d515a61bbbb93c3d10af9cd1e681024c2a81b0104f4c00e4c48e548c86f7b3c1c380f302493946f9f2c67e0491bb90abf2d0023e7dd4b9949137843a052d8acb3cdfff3be21933db69a824b57f69e180308e1f8e55c714d07b295aece0f649feb23e532a74ed57d2a648a912c0f6ed02ea1f9c4253be89c3aa92c833f3610b8ca41f623474c7d3ac7cd193d4c712215f5bd8404b0f2d8d94432d6254652d0b095e929e8145728a72185a828ce37353719b07970f096bf5c1dde6a24c3c3736700bb04606992e593914720a2b5ba4dc137616737010281bb288a0216eecd8bdb704303aba6f4d22596785c5a0d8c4945ebe6b38751c8f7d3199cea76a013d5478143e4f2ecb7e668fa45d145fc124d022bd588e7f7cc66dcb15f4a0c7c4009e4586b5060c4007bd08f7bb4cef4a14f3f2bf5017d2c01ca31130b4483c4e546f9f72ac4516d512c711cf5be514d8fc57fb3d904b116e978be388b9889fe75db53901b3b95075ae55b4179e8072a3bca3912c60a7306712d21baf88b4e2a8cc9500c918f1cf4a4832b9ed88deefac8adaba9d12763b4d7578b5e71bf0c2f644c5b24a145c50d083c4d94e535590a86123332cf79ec595a2366daf2bac2b1192557b31d4aeeae4198104d755b5b6166c0fb5578acc329d258f7b745892a93a59e42cab0f61f0988f8a3890e0267f55a52c62826d306213eab99cafec6c6f94ee260825e984e6274340cbb28d2782d08415e85ffde68f97b7c2b143ba2efaf555b7f02e5a6d6f1a4daa98b8c7973bef10f2da8d2f49894cd34153005a031b228ea9071e9f0353a4d66716500a685cdbd3d95208eb875970c63d200ca63763fab6a4bf97bb06f2fc5643fc1d6c5748ff4310ff8b016a53213e54c89ab2854e8a7e409f1544590ea7fc9f4bd878fd4d60c2dacc9dc12ab0be464b238ff3a449bae4c2c33103121f5b21b037631ee02c10e841c41e1dac311f39dd87bfade95018a4905747c4e426a9954003208bd5ca2639054d4b882fc9ee35937600446557b17b17cfa5ed87a83a9e4b9f69b5459d3f4bdf5417c03943b03da82da7f56305e514d07b97b35f1f9338e6ab8417b29131bbc5879691a60c419c34719ab8f71f4056de133ee3df4eed77016c54c21e9a34edd00ba34a0c6bd0ee8c6a6f12077f36bb999a251d7b40ddd76b7bdf7de524a29659232a8079007e1072ecb9bf6d09e21f0d31b5f191d088bce501a5ae363737f3de9a2cc9ac84c5a36a2652095c919d61403b0851ee58f03711ddf711e5f91a4dfb6d14bc2ed4fe14612b208b38b98c5c8636aa274336d9b961eff561a19c1d8a9c43ff2780487da0f17f1a63f806938b2fd8a15781b4ff6412adb96b6b6fd5138d23d4e977e176b6d711be0a9622c51ace651ab0f13efc147c70d38fbdb92c4cd9c41f0747211a4a98ac700d20fb3ad290a565ab5d52e9f52ea53cea8d9c4ca2f2770f5b9da7233290ec770b480bdd9f986d6ff863eb6b425e8d9fe2e944e2770357fe5b6e7a1bd6f3f6938cad854cb58fad8f856a9f39c4195a7060ed8b2ab9d325f245484bc4434315753aad0f0157f171bb4a3fe54c4e1634b8df2e2cfd591dbdc572f870f39f5286e4d93215779bcf9eec9301c45b0656c6d6e3de8de746d62a6e0d7c25165e74ca56335b4dc7035dd0c797073773f3f670d72349c8c0ec011041a39996de79c537aa7471ab6de9b3d5a200fda5dde5dd7e5ee5b96982bef46d77203e42b31fb5c68a3d32e2410a5e42aab4149c357f08fdedaafc32d37dde3cf397b9ee779331c7f1c41d0e6bac7da6feeda5bd8c36e4db72c3153f0bbd0ccd55c1dd01de690724ffa7452224839df2b4e08b68dc6892868b67c3932837c9850a3c5c546a91231cb30836e70850ecc51c857f54cc7ee7e8742a92c980138a670bfe19fa01ebd82242819b1eb1fb16b7e6dba77237ba88de8f6d548541d23d88210b6d0da56f398efaff2024e86d9c50afacf3a03aeb342e703ca11d75501acbf829328b554e97b350848dfc70a83a7a2afdc4fed9af3cf5402e4767fec3fef5f715bca3377ad61b5734b938a4393fae236a97286c4e16f028335feaaf38bbb6ea94517a5acba05f2a0391c0dcd4ed156d9b2892904d953f8b17fcb26a000b27df314fdbe0b49af5dfcb7c7e79735e71f613d4ecdd3b1edece5c8cf3d2777f66edc53c945fa28f03e87bd1b976aefe2577b17fa85728f6abaaea3337325b7ffa4a13b9b0b3b175de700dcf4e863577daba63dfec982b91aa7f560b8ade9c982ecddd07c8f930533c5fa3f4e8262e92b5989d6fe2d9f502266736ef2e28fdf1fbff6f6399cbb1a3ef674e0c71e16025751451545fb0999205b3e21b3b379d8f209999a9d5f7015555441051066fe07fcd2886edfeabddc6d6f7808844d9ba0fb8189fcd6c3915feeceafc3d69b7f6e9317dffe486cc0c796dbc53d98fbae47ffebcfe36a93fbf6edb6ba3221b99cbbdbd5bae5bbc97df9dc775c0955dacec9dce2a27b37a4ccdb50eecabdf64fa4e0c6bd1b138729076037763ba33e7f29739f4d603a6d72dfeefcdc1dabc9d53aecce8ff54f1c805377d9c5e91987aba28b15dfa7fbd670b1d2d895868b95c6ce21830062c71012486e29db150565e80c524a29e50838897272c15bf792da35e70e942cdabbfdc01142d4c727efa53ed62656eb10b77dab5d5cd41f983b676d23ff0f6dd3368d353bed0670749cd1e24816fcf4dd0792457b1ef6b30d61f2d7fcb5661cc40e24a6d3b848f3ecbc8e461f5b5701d6af6f23e7d38bdbe737d9b40ef1be0c457cb3c90c6076204c701265bc18cf1855dd5706411d237523bf999e8589851370b8d9a5373d77da2690c3daf56f11f93bd9ee7eeb7e7b288066bbf4db48fe9986d99eff5101b42516b674828a99cd85ddd46b00bf3d7add4dc92275188ea57fe1c285098ac9f4a31f2139b128f9d3e9598463c989249cdbc4831919f92d947b84c5080b93c9646251e2c1989e450cd9a2a46405090b16b7ba989d66c4c3f1f7f51ac0911f7df595116d8244dda5ffc0b74bbfeded4ba6771917f1933c98d29b3412738ffc0a0fc7882e4dc982b510387a8d0edd7d9d4e208839fc23187f47859f8df187e1fe84a97f7f7c85c22a9064911bff0a4f47fdfb2b90987b851e57fcc8d720be326ed5a77bfc15f474cc34c0b610f9bbcf7bd9be7be9a172a86ac67230fe4ebb011cbde3f80a8fed4b9285c5e3771c481612d3e3e7b6f0f424e107be4df2a6703c6912ed7930a5df4abf3de71d4928378b506e53386eef352ee2dfdeb48548b05cc4bf8d23dc0c0e00dbcff07070a991ef31b749fb8c8b237a2c7d69e46922b58687b346bc468655e32b638947e9471ebf37f29df7521ae9a19b9205070fa771117f8fb97dc645fcf7a52652858e021c5d6663fc8e83bfd71ebfb77c85c7d7793af28be729a91dddcf5bfe1c63df13d3beefe1dce9d108957def18c07b5be09c3f772e140cc7fc85635562e37771195fa18f1fbfe3aa844ce177c10c367e0f571c6c3c635546cec09ad3375be82d17ada6fd66f41b51d698b5dbe43e36b95a87b869ecf93436b827c638e7bc3fdfd8cb8676dd34e6ca1a961e19af8deaa4ea52503e0daf4f6bcfd0cea1aa29f3947f1eba393767c7f6983d894d33b5d3745400e7964f98e1668f758755775ebf77b67f65555665b98b5f1f2ec48a206208d312e0bdee52daae4a17c0387db6fdd9e3a20d6267cfe4b101c82367d859c39aefacc9f295a947ff1c05e863cbb96ba6cdcfdbb22f8d7d65a0f6bddfd9bf5f738f8b3348918a8a28f24c9ec9c3e3a2a906a0063860c4113dec4b19eb39e4763d848bf64d2f00ed103676f84a06c2fe5395fc3ba550852d6c3bc330797846465883ec06fd1ffb4e634b19fb3d653f6b20692ca901df3567668c8b52cad329534a29a5140683c9241572cba2f15d5435613465df67cc9cb1730632653f242fdce05e4a168df7f5825ca96f477ecc7bc58f6001482edacbdd2609709c38b36620b5eae4b868715ccc19d4a33ff72ed4e73661a3dde384f5b02d2e7e610d1781d8b7d64340d634cddd3f87a4e1f81618c18ddd72d5c7de74a5c14cc98f6badb556b7b19ddb701ce638aed63ae66e7695d223e81155d35e87aa1e1ac261b794336a0db6f51ae93290dee837d8d6bba17d8baf80ae6978d87205d07fa451a3c5c51a9a411b1b72d16ade8d29e4a225d9f5a5f742b267900482c1ca007ac79202678ff2c5658ee39ca31c8ce39ec303e8219535f01496a6c76dcef2947deb3d2a2aa28835acc66b62db7a4d0dc0928babe48e7f4951b369b478f5e4aad2937efc6dc5028cfca8e2362e96f2c89f569c3c2ac009ba4fe725349f0c13720437cd52455f7e9bc7a429f93af5b384c2266d17a7a9367072fb464199a29c31a79433dcb93a5d521fb00b60cd9d949a765f6e6ddbde4e1b4e9a6dcb5bbed7354be56bbfadbd9a66b7b5d2de9b4dfaa38832ece4b817bc3bcfe3388f7b17ef38dc79a17dfbf8ca7729b1afccb9a5b437ccef2b33f4196a73c636cc9e115bf82bb0f64a794b27b9ed763dbd996fc08154a5c723f6f632d4fe66ecb5d65a6bad9acefa08acbdd65a6bad95524a29a5b48e22c84a4899920fee0da4aafa94527aeffd14d4f8e1be1224b07fa2a9a9848f1fae56e23eadef520a40fe25819401903d8c3ef6287fdb7efb1aca1fae8eb9b7bd997036348184e550a1c44fd016e2c0c40f24a05fdddddddddddd6bad9f821a3f54ad04d54c6cda84d3ae413741f62e0a93935f9b0047bafdc752e984a218eba8cf7d8eea634f6ef6f09db50f33c5bfd0ba2e736d17e462b555d868a1d7388d8c43011ce9cf2a248bdc5466c64401f4ff16be00289b08d2041582e8cf18ae6816b570f79e939a8bb988637ccc983dba4ce831e12c7a81e38cd9b468d39735cf18c92235cd5a77f74d7bad7e0eb19eb49bf40d2db4ee81f0bdfc1d200f405a6bad55fbd29caf7dc6d13e6baf0961aee6d6b41faaaf54431b9eaadd17bad0547d171b39678cdf7bfca3bf9bbdb3da1770f525cab63eccd5dcf6d4b9b50f52ed73ccd7b4f63eb666ab0d7decb0876fac7d9829f45de8a5b169b817f9f06b7007e0083e7ed763e9f1dcf825ae2a6ff43e0a6d78ca6d0031e9a4718ee33e87dc9c36e99e877deebb8d25f7ddce7ab260a6502fac9ef2e1bc4ec16b5e9f7200fe80e288dae66fa1cfbc60aee6aca1d23fdf2a55daa6614baa060ff8638dedb9034b34565fb306e9c9c191898901edb8583644433e417ee4ccc804c55e3b37ac19d18fcf5691e113e4474e50ecb53323faf101f2c36764413cafd99a374533d30f38b5e987d60a0568395a69a523957925756c474ba8b54a59abac33f3e49cb3a6892ece8ae2a2cbd8f6e7bd7aec41e526e5c6936d6dc2de6bebab3661795c9c364f29b5acbb4a85e4bdf256a17aed107baf950db1970add2b746dad5b1a4c3f60cb4dcb4dcb122dac96255a6e5a6e6438ce8405d0e4038e1945a5d6586b7165dd8b6f65d94a036bab4dada934b0b6b26ce836071ccaf400c74929e75ce1b8e9d3bdca19f25564bca4b67c8e8ea29d180ab05a943b7d34a594dbe917d400db14fc3de7772ffd0984dcfe031e4854e7526a3a671eaa4f2461b365135b3e11e3b339d312e0147271cf153d00472c3365c6ae8ee0d41d969971558ed154c532b21ca3aa2924cbb1ed429dae79c80d707083146fe09e724fb9a7f8393880f329ee38edfe7c931bc0f13736f19e7e7e13efbdc398c39a7ed1c54d66927dfc28781b5342d0e7389317fa9cb83d12736f5ac60eb754bf01bc2f51b0e62197e87e763fa514a0bf9ca48d08b46f7a0338faf9da9b8cb40e713ff77faf7e4e6612ca45edfffea38892859b5bfa98daf7ad27c4fc6e7b68c2cdefb409a775889b7b4e8b1ca7e50eafee5bbf01ebda04951a804d40c18aa1de4416010bc672c29650b07a5847d8774b2858ac3db5fc415295f6a34a8d968d3b6ed3f20e29da2e8ba0ce1facd316d47c0277ff99f34bcf624de3cf61c5f86b381fd7b776d66a6ba536d3ce3a1d45ddd66a2b9dee0329fe099c5e6b50ea4e234bfa329f9800e7535895b5524ac7ccc160536ab56a43dfb7863c4c5bd610dc52d294f48448dda1a087f7b0f43969827db5acf36ba17d2ed39a6dabfd6bf373d4e6e69cef638c65074e47b14de0a45c5dbff4ce9495b6d6d699622da572c668ff5efa72c68ff5afadd24e27430f9312ba59a3f8e1b11687b8e53d8ba0caa9c6bfc4ee071c678c4b15125bb2a318074253f655a40f891e658f7c9d40952ce64cb57dda731a79ba4768cfd59ba67accb4453921974be2285e36091fd98c06a13d2daa9aaedbda5ab435a25dc8895cb43f12fa108cf0370d43532132655f4791432dc5b6af93d8f67b6433296440ee7297bb680bb75a6ee32bb2c6652ee44398c77b8cd86ee090fe4858b2e12b365cc4d28d386dfc2d2edab002887f6c71d136c6bc3dc9e25fbc94a0c9f6e21d888b166bef0606e22e1755d196d3d60f38ca1735005b00317a9511bb59202aa2891ec537e9f1493fa2c7d3c8532ff498f7a6a55439104fd91ff5f4a034b67191d2f49c4e797bba374d715cb432196d4d310387191a5fc974643399684a436d424a6576447f1b95d1d61470a033f6b7c73fd296101df29592b74f89e88c16f98a3c3dc9dbaff6690f5505158657ab5fce089a39cf93f82c737b48a57825aabeb8b77a08c305eef6e78ce130701265fc7cf6a4d55e9cb58debbcd1f75a315232b1203995b430419db878e1ff9b0bbb4c3dafd7f346be02be949c8a0796eb34621ad4455396fecc14bba2b099625db0b9fa5e19846d0bce2e876666ab5142a67cafd6772ad8f6bf178661180672958c18ddf31076385dcbc5980eec72f20f58d5f972f8ef8bf11f0783c1601fca7fdc6cf6c1f88f73b95cae4fffc7fdfc7ce17f1cebfbbeefffe37474be17ff6db3d96cf6b9f88fb3e16cbe93ff36180c06fbdebf8d88e833f96f73b95caeafc57fdbcfcf57f2dfc6fabeeff4dfa6a3f391fca7cd66dfec63f1df66f37da6ff34180c06fb4aff694444dfc87f9acbe5727d2bfed37e668afdf948ff69acafc5fabe4fe7d374be0c83c160445f26fac0fffe085fd1fe7b23240bf79fcce5fa7e87abb28ba6eccff72f72957f58600beb7b19aecaac8ffea7f3cdbed937fbbedfb2cef7e1d9f7659bef8be1ddf872201abb18d8c74803f8a1c06630186cb6ed8730469a73fd702ecec5b97eb6fd0fbde7589c0ec7e2581c8bd3d9f65fbce85ccc389bd96c66dfc509878211c160b01393adc5e6fad95c9b6b73fd6cfba812edb4b1369d8db5b13696ceb66f42925968b3cde69bfd6cb3d9f65b9870498369441a6cd36030a26dbf64e4aed05cda8fe6d25c9a4bfbd9f64fa43480768f3888c6d2743496c6d2589aceb6cf81e1f7f3f47d9f1e4735353022180c46b4ed83dc6b241cc7b9f24f76655776e5d0374743fa1e0b9a595927b3322bb3b2ceb64fe96713052986715fd8e574382ece74325ed8c5c8191d0dec665b1bfc856ddfd4038e799667b9c8553b7cc571158e91c38f5547871febce1e7d6df98af8a3af38902b4c84f263d5c11e7dbd912c307ef435c65538a7ced4e46c3b7a29e40af7f44c31932c1ac85578662668468808e62be116e40ae3e074e147b2bc70b9eaca642f598fcc47c7575046902b2c73042092c5c58f9edab8eaf6f4d09b1e9c9e1f7bf4b4c6574e7ef4d40572758382280cf6e8298d64311972d5cdc999e5d0981c215f390991abcbc3434426595a0471d59df999010adaa31229c8d5c5c179628fde79240bc98fac4c0644e62afde87d07727565bc077bf4de922c2c7ef42ee32adbd3e3343d6e337a8ff115131572658382aa28922c233157d99c1c59ced0688517e4caf2f080012659483baeb233333c7626c8cf1efd744d24c895c599291627097bf45347b2803ffac9725595c9666bb4c9608f7ec640aeac4c0f57d59ea29e2035ecd17740ae6ad01cfd11bec2fde88d902c5406c67246bfc3553587a6ecf350618ffe45ae2acf4cb13fd3329a090208c9827f34eab047bf472e1bd11d43ae2a0e8a64a93ffaec2a3a1afd94ab2a3353ec8f464fe2dd18bdb688619848078d6139680c8ba1310c45136dfb304c6800bfc7b8270763dcb3ed8fe85188317e8cf18a171eea62d9bd98e4a23bb9f7a2eebda00977ba37e779b6fdafc55672672ece9d39dd993b3322d14a325949e6c9aeccb6efb1c8a69ea0514fa9c7ebb1df8de01536c7f2e4e4e4f06cfb1ce97e7606e7c793a7c713a8ed0cceb6bf8176ab322bf3e92aabb22ab332dbbe8606b0ee1107a93d413d3d3d41db3ea74d3b92d9762493c3939393437148bfcb947ab33a835367ea0c0eeb672d0657eb09e9a083f792da33bcdb434fd68154c83d32c894ca72569147e49941cef0b417339d01a4403983e08c170bbd204fe629fba3180ae42b9906f9f68466d906cff00ccfb24d49fe6c7c85e5aa1d3ca12059174e19e10ca24f65549567b4cacc15573467b2998c2baa327b73ee09c9b8683fcfa8aa9b299aab2e099962dfb6b69de5599e6ddba1808bc3b6bf753172867dd319c0fae3f792a017fb5edbe220be327ab11f5f193b0f7d631f1ace212fe605b92af5f63d216fc823f215df42bba98baabc184dfdcc153853ec77313465df8bb9622efa13c31aa59ef3a8c452bc1c782ab2edc8be766f5d37e9db95751ec2918ca7ec73e1a88ba12a2fe629fb31315e17038e40483d7efca3195f913ea9cc76447fee104e98a7eccbb09f0a4fe1bb8a37e4c5e8672fe6c5c04ec655944553315d69ec589462adf282bc4e7bf4dd7e280e8222c4ba5c34dbb20a5b3a31c5cd9e426883fb7adf79df8dbef3fedec730ef3bfcd7fbdb62f4a1d5dab9e79c8fb6376990d23ad2e3cbda691f6ff26e6822709c5bb301240279f4989b07e7c2a4e44442622a95bc17319f7c730d9a0d9d1ebb4ec7b7efe65efa9e9ee759afb39d75a1db86f9a4ebc271feae236a97767599f56884ca18ba1ff16e7438ec6ef19f1e0fe6409265f4f4b95138b7874188ee3d4f9b8c461ec97be97ea4bdf7340dcfd33582f80a7df7f1151eef3dbed2793aa6f7f7a72784f777e4bde0bf1dee9e03eb9bf2497deeb917a3ff46ef5d8cbbff7e34f260bcefbcefbac7de1d7523efebb8efba30572ff4ad63f4f2ed3b72f1ea7b2c818f42ba47a15e0328b3bb01b49f0d5fe1f1b54816d2d327c0073ef03f12fe8bff7ee1fd159814cafd7d9a4738e21f3de7e9f0fefee6bd14c9b624b2a51353146d2e874ecef04c5ee8ce46a8ecb9eb731db7695d67479c67cd479f1e4bb0b1be2147afad74349a606717bb51f75ea7f3d6d2324e19b60e4ed41a5e53d0dc6ddbbc17bfd87fe44c01a44f73a620483b2fc7efbb3d952cf73def46d6dd952b584a6e628cb90d6f2678d326f8b10d2d3d0584ee6ff73cee5b1d245c6dd32e6675a1df78eabace887fd3912c13099285dbd9f4396e7b5c9fb3130701844759af00e904bb2970280d45c6d5b4458a142952a4489122458a142952a4489122458a142952a4489122458a6840364579fc587f18feff9f9c3c0af525257f3abdc9f4a5d293480f82ef79df75af699ff3d7fad64aa9b23ca03553ae70cb716baef0ebd59adc372253d364cffad2c10b22c7e8a494b2099f57f679cd559e29dc2747a438492a0a6ec38b149e9c0e4e5431b3473ce42bbe229d8843904d3fffe02a62367d2c4431d10ce9ae5e15d2400630802f8062810a50209c802e4202117808c020e2010e3869808b2118b00094025eec80494089102d82d08180d38b09103970986eb0b071801f4a9bc4c5000520116045cb8a051cc0480dd58a27001f0240a38751f7a9a40060c60e3cc8d0b69c1275c82106276a200318b880052a408109142181084080880738a001433060010ad80193002182d08180172072e0b861e3003f6c17031480002d2b9601d450ad088046007ce8412505003364f0b0434ad42187182818638c31c62f6150308ef1281f0345631c04259c1b07f1814216835121468c9eec13c3183fc63b7830583f7e8d73ea8fea83ca5377aa4e0502c6da374a0a7ff8584666268916ab06056118b3d36ab576c4582c280cb48848680cff402e42df3074d8d9792901e6d3c3849313570e2cd6cd0c747ee0d40085b26911fa7e01f47abd80621011cda2a89989614349c9108a8fcf4f15848280ae703a056111fa3681f1e3079020f4bc5c43309972f4cc0c8d123837362af04d02f47abd80c2a0201919626643662091623bad566be75f2f9e264ca09f204fd8f13df2e2e6a6650317909c1b781ecbc54c16c936d8d0c8c837f8fe4e7e7e60581892c5b4a0693e19266795ab426346109e96141972c67c170f7de348558d0cfc587f60e0c7aa73010fdf87b080ebf7af31524544057eac3314f8b1d64cc0bd4711ee4f81a44a0412f8910645e0472a04013f799f3644b80b97544dd6037ea42f07fc487b1ae03e7586707f6a2355d3c5801fe9cd027ea4380af092f7f9b3c35b0c49d584c1fce8b304fc486384709f44417810a99a331d3ffa0f027e74a0177fef711b207ef42778240b8b1ca972568e1f1d088e1fdd75c34befae63e347ef81cb4895bb0ef0a3d3fcf0a3db6c27bdfb8fcb8fb38a22c9b22226550e33c08f5356801fe71001fc279013b5f88e54f96cf5e3e461f971061980ff74519b99426bf84f1dc9327affc9922aca52fd385b2b3fce1c01d070aad343aa680f3fca221f02a0e2df01b9a23fdffb1f2159b6941fa50c003fcad88cdf21a98c17b9a2443385a67e943c3bfcd8c2830ca9a2b320240bf7e28f3a7c0e988522592e96d15475ef86674063a0c60586982b1c64013d3a1154952b00a3c004748fb9c2b122f4e85b045485b304f49823a021a06de60a031161c3a22adc7a00cb01ac06b074e60aef0ca147df388601ae05b814e0fa992b7cb3438f7e6330b004c084d0e389fe249aab5b14841e9dde174dd1d7a11130672fda66ae2e1010362caabaad1c2c1cac1b2c9db9ba3b36745c5475630ee0fac1b55d73756f660a7d173dba8dd194016005801180be13cd95b52dee33aab2d6529db9b22bcde2b301f8ac868d4aaf6801681a3a9bda187b33536054556334453457b568a6d00f801e4f3eb87a70a9e8143d9e4000e8119c2143136dfa744655f5c59aab0a545b37735577660a7d1ee86c073d4bcd443dba0e7a3cc96428fa66d3e7b24fd05cd1998f8f0f9d056dfa9c0ec3300cc3d0c397303a0c515e3f8a0ec30fc3d0478773873e3f745605a120a02b5038a0a004c93896730cc6ffffff8761f861f82d3c98f01fc6870f23fcffffff01239cfb7f000942cfcb358430d43042dffa05f47abd805c9c9c9c9c9c9c9cfcffff9f9478307f7212fe7ff87a9c27272ec2b94fc24a5395d8f371ea4db5a92af8d7b8b5d36ab5765ea05028140a853a393939419d3c981314eaffe4ff04857a140a15f4229c1b152423438d990d99e1e424f622f4ed2206dfe0181c8363f04d8b92929292929212140af52854c94b185449c9c9a3fea4a4a4a4e43577c98ba709403f419e8042e958512c162b32399d4ea7d3e9545252f22525a7973025a713ea4b1e55723afde9743209e73e85b4456de00292436f5052a2678b17d0ebf502626132994c2693e9743afde9643279302793a9e44f5f723299de6432cd4cb3a236509a379c4efab6765aadd60e49a9542a954a2593c9f42653a9e4c1984aa5d39bfe642a95be542afd908473977e60581892c5b46032f99084be5984beb91b736f6eccbd59412291482412a9542a7da9447a095322914c5f7a5389447a1289048404448789203c3b45289574ac28168b158d802008822048229148e04b181208969ef425921ee7063508827383a1af20c75bcef21690487a24f4bde205f47abd80469ee7799ee78120f820e8bd84013d8ff4e09340ed799e6c6e4f262453449406b0b5d36ab576beaeebbaaeeb3ccf7bcfeb5ec2785d07bef7a0a7c7d9753c5f3877c7d3038518cc270a9ef7fa42dfa3181b636f364dd3344dd3baaefbaed35ec2749ae67df75ea7c7a969136767eacc1f3ae83a1d2b8ac562455cce39e79c354dd3f24b182de7eeb5ef66ce45b968c648c19a3573660acdf7f6027abd5e40b7d65a6bad39e7cfb9be84c9b5663dce5a2590dc0291505017e48c16556159dd99abec736ab5b0b5d65a6bab7d0953adb59686a551a3873d9ffaf4e0a100a8c81993874e86c2329aa2376701abd478f9f8b8bbbb4f33f87b305667c744367d9310e82ff39976cf4789d914cf36c55980810270144f22e8b369f6a129bba5dd70ae01be4e3def93ad0acb3c4557d200529c9f7da8ea00d9fa8461532ac0364de9a687001fbbbaa501030520966dfaa3097c60604e2efc08911121428408112244881021424488102142860c193264c8902143860c1932448810214284082972820aa10dd2bce57f276750e9e2d3d349527f1f7fd5ea22a3664a7d7f0205437bbace62ee02389f767b8a61cfb7723581664a7d16fbf34d50802638f2d4630fbcfd25ccd4593479d16369d3136ca300cd552853ea079ed7a8048cd9ea82dea91909000000f315000028100c878322a15018886a547c0714800d7a9e4662561a8bc4498e4219c418c49402861004000006040060840a038ce89fa0e7c37a4ed4e3837a4ed0fb819e27d6fba1de1d707c1bea3d819e0ff43e41ef87f59ca8f707f59ca0f703bd4eacf743bd27d6e343bd27d0f3819e8f5c6f33add5843bacf4e57a50233356d29eeed5c170d5279fd27a89d4993e4980247f2733cf3f89c55342ff2316a02df8c2296708ee50959c3805bec47e64cbe1874cfbae831730b85d6f7abab3f31cc9107796e8713224bab38588943cde26c0f7c8207a3ba10c7131d309958d6280cb472c532e4df8e083a62b543203570faa5aacbe29572457a946a03480ea9b33e0d4cc75911d9140dea3e60c9039d4f451f3694bf2c3bc5b51b2dfff0b56326844fdc2274b21966c53d4523cc9f280951e445c0f0c648f4a73693ff83122af530d798c349bebd750fd01fbdad7f722f71fb5992115e6be9e892f7313beaf6c042bcd4fed9d2a09944b55e2c67bfcab26fe5b2a2e0228d79354d215c78a22399038be857aa12f30fe379c763082e9a4900952579c75f2d21b443711698a9d988c9ced4ddab68f5dcba4c73a5eb4cd2a1b663b49859ddc22cefc7fde976d11b2607b543489a2e07f1e2f55b2f2413630222c6b9f6983a3c362f5896e304ad816dfd3064687c5ea0bdd6084b02d3ea70d8c089bd507ba8148615b7c4f1a1c15168b4f64f3cad5d9a9435ceb97d72cd8ac19cf2e9271990e02957a088368d07899dade7706fbdf7b0ffddffbddf7d35ffae3c4dd139d4036194cf4a4b2ca6402269729a3273a810c3299e8096595c1844c2e53664f7012596430c1e67acf3dfbedbd7ffffded07f5eaaabf7e3debd5319faf5f77fd75d4aba73ef0ed4336eb7b197928ca6077545867d6c8f3d357ea7d6b88d48f11286f69f2e93aa2891faabe4d61826f9641a09121b7fe899c6b2c720f733533a7b9f7af3022225079ff83916ba215618a612c720ad6c6264e267642543cd2da28d4e8b6ad4cd0cbfc3b57a4e3881fa3698a48377ddf836b19d4f80b3a4dc6749d74b3e1c3b374640b39e15be6b29adb3da16064fa701b6d622cd74a3a6e00a8e9cefd34c48c7487c45726d25d431772235a9ac2c3eab7104c7cf1b60cb64e5299719daf4ec66ac94d6b6b193aaefc2a6791793bd9c6aa17c14b4e76bfb916726ef2c5f4ca49db78ae7529486ba909f70b563ace26b54447815c93e7bcbe1f97c1d02763bd96ea8c4c574aa2055e42ce7f1e39fe68fbd229839e8536dcf1aae6c9f43a3f3c4b75968e93be652f666e4edeb0ab973288cfe68dbbbea23141f78e5e175424a4b749a30542ae7ffb41eccd5232e176c1ba8eb3e416d12891d5f29ccff7e33218bac9d8adb909296542a19b0f06999302b6c8fb2b845c0b8f4cbc341c6eb6944cb85fb0aae32cb945344a64b53cf7bb0f8b4564f021859ccbe534d2462d5d5ac8b96c63f9736cb3053e5c191cd602c4b05a8c9d7fb7a6486eb0d4a051638de55df2fcd9025f87fdedf30d68b9fc00f3163585ca0761bf4bb8147307ae5fc46a0d7960404393e048b985ea074673cc7f97cb4d409ed5a3c6cdc6d0258e8540bcc67460e910ac633a941a67cd998c40778ce135bb2c3660a07acab8d9d8bbc4711288cab0185409a4e8d762b91eb17c7909ff5715013501578ea6ec6173a4aea3f2f5672828241aaabc0634fde583857ebcc9ba8dcadfdbf325f9874288e96c3fd6f1a1eb172cb25415f115a0fda8158b05f2fddf329f1e317a80097b471591b405c85f32450e18d84e66cf1a86bd203c51f24497403115ccfb1361cc6b8ecb8f3e72180b83a8c04662c0a1e7c733c2a0fe1d22630073266a9ea3221c5480c1419efa621c8161c2977ccafacce544ac218cfc03fd54b07755ca53fdad581f24ff64aa9672bbd8cfc8df00fa83566a6911747010179a9163e637b026460f70821effe48cdad029e687425c70dfc0686244076fae4871c1930f778e0f76e20b85b06d805a9e487d28ad2c168a3bcea4dfe50080fb2b634adc0f152295affed7e3a34c518bb46722c8a0d0d00ad66e81ca97c6436ce87b3b60ff0fe8ee758a61616ba30702d5c1a179d98a098432f8de895a22c8b8876c5a72cc090aaac1946638a50683432d3d77755b2056201c7e88c3cde788bf1a54cbf6593e2309074ae5d3be0895323bc7ac384a08e79dbc141451199c5b1098c78586891878e7423065c420a57597284583e317a9ba4b1c8fea8f832b06feb21c7317c9c12463417bf8c20c792b3d75b000741e9160b7a9b2b9b928e4c0358902efab692272a96a51d4017a2e3610b3af32066d40c43bc574278b1f0c3886d641ce4695ba9bb3e4a9315e4b70f37e02b7e91476f58cce87185ebbfc7c604b3c009deed6a73834363933c93abcef890d61261f9a389cb8e2b381454c0b7fcd7ed4fc1d4647a03d893cfdcb3f270366153b16454607408a79525d60d513f976ef293d0748bb9846e6e2add108066f028175837f17566e56b067a6b8df75b6fb7be2e6eb12e6ff6278e31d7a3d9d3287ebf3a2907279c1656f09dda1439fed8fa2d6dd8b7800cc585937d5b77ff780a27495241a1e898499ee62509d0ed5e09841d449a468ca8572ca40e39388332f132b32f039bd602ec27b89f28fc4d51c7138f07d133456f2bbbe179c07af859b4c36b15b30ad99ae566babdad147dde5c8ed0cfc42d0cf92ef6c38eab8099ec188389cb880eeba6a2d57164bb94551c74bb8341fdb1ebc04af572db5b62eaf7a1112aba0c1f3dc7545113f54bd9160b62e14cae38fd6e11fa8341bd7a94fbc0684ec163ef58c62a8ce65318d9a28b84683a591d240d1ed088e228b47fc3112c0041a66f68245b183758928a43987d3f989678f34e8e49a4a009d8753c3c5fbe8e79a5ce55e7a50bfcab7966a90bfaecfa3e310217e54920d9ff3d65617233904b3198843a44894edff970e0294066d30f84d5d858963590d20778a06252c4feab65ebf0e561f7744b913f5408e0ce3447c57df481b938902efae5951f0ca4bc9f11d5f3fd690bd1e1779d3e2fe63e5f31527a27e1c2a0088dddc3dfc02b51da53eb185c5fdba50415f5436960c5a2eeaa86f4de2fd537edea681ced75545e86c1edb3dbc641e564a5eb55f467d2108964483a7d7efadaa602d77104c5b75907c55c40d301ff6330aeeee593e5819aff3293976f7eb8f1576afe3521e5accefafe633ea0d2cf4b475fb719ef72e51448755372458787fe362dfa1a1fb4f2ab053cc49263045c7820f317bddaef2d0457dc66c0255db97fe8dfa830bbcdadc7e38174a8581c879948e025973efdd9bd8fa57598fc274d5958cd5fdfa6f9539cbbc9c47910153e56593eee286d34969e2d436c95c9c065600c69e52b60b9cb21a60a0272f1ed58ee15ee4d7e1ef63496cc4469a0b6c05ea31da283ea8aa6cbccef7576becdee7f5bc8878fe1f98409d0cd26fa3f8009a40f9c67589a35d225280a65546616253c6a330e0e226d12b965637358982e90dd8877ab52783838959b393e4a62608ab74ac1db767abfc5d8ca53cab983e3bb8286da6513f5f5500c445494b9150ff969667b63b4ad181ea9b7446e0b30b2d5a80e822cb78b8b878607927be048eb3dd27349a5000c347ab8bb7dcf76a084c20b294de7c2b7928318125ae475b3369240a49db1183ec5a2178c7e8f48f155188fb2b717319eec14ea3512404bfa07ede94f570263f8a102a951db7f3fa6b0d31fb75310f252ee82c3090701109515d36792a23b9407ed690ae63540ba761097abe3082261b8abb6086507aa07fb84001139908b38ae02749ea7f98cc494079755e18ccd06934a65f9df03438ea5e78e029ed2c26845cf545b615687dddb26034117291b8fe8b5fb930ba00c565d68d711484785e788b341bc112fee907220462b73b44b08e0dd72e1d18b112e2583cfeb56ae214808c0736272c0016ec406d0c354ed807fc82dad3e6ec95913463b74c84a9f695defdbe666a89923e7147eec776b84bd88895250ae2f5388f84effd1571997c395a86004b12a7e3a9aedaab975f2ed99bdda76f2b434b25ddb85357692736f632949c171bd3f8d370edca12a5464fd5db98dc4d50093ef1989005372c580c82e067ce8a52eef944b98530c7d9c5592ffe8a32e43e0b49ba09528d45489f15c366771f359c3ccd5b186c021dde0275c4c813ae52344ecab3375758cd8f9135f10cfbf266a7746cb282ce8e824d72acbce0c9eb0fba06ee0bce5a031cd7087902b9816a38130666fc99a263bb8d357e0f57c3e1a67f1c900072e3b2897112ddd8d65c1f0873ce77ca73e2183a095035d482e210dffe10f8cb463a112618a831291a15fed8982d403d770ae0081dc2d4d19f5388b0ee1f190ae2d37f7c2797757da333cfe7da76088aa0462d2a8bcc80e9d3f6290be2318983a0359ba71dbca0115d66a58143febd0de0d41b898c934902b0046465e31c53492357b91bc6e0b4843a9e728079500cc9edd35bcc2c10cf2707f52a96d11842d38b3a7756085d173b83f839ba4a690d176d0fa0cde6762b9a36088c45956d1b733999e463a08399d6d96a4a4aa61731d584e22faf0b4885e9e5837e377a4dc27123630bc644c42e88891c5b182b724c614c849813b121a0cf71fa3ba62f52fa8f43be2076e498c2d8c8310b6323c416c48a882d1c13197b62ec08e873447fc4e94b4b3fc17a2948bd69bafc4e54da9ba2cf843d71c1dbcff60e15036629cca28368c4a22c1be21032f33215f7594aca0a08a8ca799051d6fcea1d599f024648cfd116c5542cd86ea4989c98b7626a0080bbacb1c8f2a7c1a1f7ccb590e94fa7710f863e0163ad5911731b007f89301bc2ba6d8e3ea46300f0b047d0e3b9ac238f309f8688f71131a56ab99e897e992064a0256340c018c20964db4fcc8224f14686fc08ee90617fd2c0f8f5c5eadd7cdb8266dfc0615a11ce716247a72211e9c21e44b57b84fa05fafb8a698d2de6a2653e844c39a0d1b83fbcbbf7ded0650646660df850dea8c46708e0e6421145c22608edf46b79ce665e8c2c1db8cc1b464ba8e5544642528c3d4094bd6241ae64c10ae74683fba8f629fb8276f5ab92352dd2a1a264ef96fdeef177aa2afde48e1a6be2586a3074c27c73481725beefe17e1c4acfddf275d18da82fae0b072dedd184af31632aa2dff5b0874c64262680b6c6a8c058cee1f4361e08ec64768a7948391138d2352db53362996a7e410c7d80793e5a3fcd7054601b6d0c777d6ab52b19cd21c9746488840224908f7d07b2ace536e8d31a106368517260dac2a978de74fd2dae101a7c0762e10c2bbba77fdeeaaf17bc466066468c85e237d10506b5060d78c8c6e1d6a0d5c15cebba71f5f6fd3bdfbfffe63b6fde7affedbd51b3bc97f84dc356cf0fc2a697567ae9d39a265dbad3a69d3e4b6790968e053565d7a0f101a82701c8f1a3927e544b04e30124d638119e000a70188a030529cf4f5066f1e68c40d8faa79fc2b902613a098275050b155372a67c7dad31608fb10cd1cb2e3a52ccbdd9c14f09dbc0334f7863e06fd0289fcc4c3c7b1b408af93c15e7137d995a522760dc1120e108c968194c9e8b3def64b91a55906301c05a44bb995637ce68100a32d8061566cf3029e87d6392ee994dc5a43bf4392added33f101f8d7e0a541bb7d613bc80fa7283a4fafcf2b8e02940d9bad8fbd5605aa498194335d6bae5fd235b6ee1cb2adddd25cc85911d23d530c49329174140a462d2da6b999145f85cc780e1bacccd2eee0ea5c4747881651438d8b5a71a62ac142dd9fb1abd8dcd92b1e91797c531c387e91a0b763a2c254a6fffd1ff9c36ffdcbc72f80a902fc5dfc7d85a94cfee70ff2afdffcc787df005325fe3bf85b6bb7012b884a22276872fce10f25840ea64ac82f61ed12a6b2c43f7fd0bffca63f1af21e98da68ce7fcbc1147cf9f30ffad76ff63f649862f678673c98e2f1bf93d53798ca14fff987fffc53ff7ed38b30553e7f23bc2f4c65713e4dc666937edf1cc265172234e97d8429befb1be17d83a92cfebf01a65806df28567dffb5ab34c3007043e7af1c4cd9a3bf3e8a7fb37dbf41aa4798ca1eff73f36d3055f44b3ad2a2b039faad1cff8bed5782a9e2365b083d83a95c3c58f00d2dd1fa8425bcd45e223a71344c017e605e14d0a7112f48c702d75f34f8286e29159c40e403c08857036398fada0260a9a50a1cdd6290ac67f15d81a9720bf0e882a9c9693fd4600f085321c41cdc2c5c4b8e0b1817a610e804dcf9f20b6642d3169882f7d781614ab425aee07ba6e95eef69bc06b3c5f0d51a6ddf706161eabfea3a1e051da5809dd5596ed044f4fa447705329ea50afe7ebda6fe274d4690b69b9a520061a85bbd3adcf41270753fdb846ce401426956b373892694c0d22c73f93c8a0017830f565a6d184bfbb05c9ee0c4d541890b17068c9b06cc9e8dc6613df11865a090fb3559fca137c52b1362854ff86cbc6d918c212607587d418a1ce98623f98706f298cefb2046efb3c395d7ba014ae8b56e47a741c4a007148698a296c3a63a9f808be75adc474f7fc0145a512f23393636c9cf258a6c1bb671e35d7c0d952315497e082de2f97395f8b890f0639ea5bc1c32ca20eacdceeeb4fe12371b2767390576d5855790eeb50f91c2a35ee997905adbbaf3ac0791eb6b0a14fc20d187da6e8f907e28d476f6a763250b6dd80f4195f85e68d3099f1729c15200e5d9c810257d1cffca07ca3e3d08c1388d0cf29444c1cd96449a051442687c860b1be8cacd7003a52966bdaeaa24d7e0150db4d6db49010fbc0b530db648a6f679fce0a65074ba95240e2afe35c25b47c067913c56bb78f7efe9c69c036f7ff658352b98bff01d723bb1fe3caa124637a7b4da478e1b10e0ad858e6f928d0dee0da70074d29f8da5ddabfd5700ceb05bd30baa5942f70383c475722bd86fd01f5b193407330b3b08232b3f3eab256b8f2cdc76f974c1bfe228e87c818a057c8a322671a195b1470dbd8a46ee7f860586237b5604bcfbaa9f39d9f93ac2ffe11dc8fb3f59c38fd0388200e761b50382074ed348997ea4080d72638c0dfd67e1cbcc4f6563341de8c8c652198dd6c9500e9ea813db7410d6831a2cb56645182ad4082cdd8a104d685964228ae33e471758c41c71e1bf725cecad41dba9bc62bbd6118d6df6097aec7f2cd252665dc60ceddbee77df48e3fc587f80170e636d5da162fecd796053ff5d304851a6750857372719412ec167c29214d62f025fb92b93aec02b9562d221b96f2549a36dc587087f03d2afc6c5c9ca50d0cac355957cda62bafebf7f2088b9f5f37dcb36ee85eff72439bd59070ee29c7db491f92fd5146f156b3f414a3cb525393069329bae8b2e0263211661c6fafa451c45c4b82e6a19bce8e4dbfe83494af35329b5f3b87b37d37baaed1ecf9d853e8d9c8eb1c40f6af206350b4a7c903df42ccf2136bf3012176bcb289b26182b0b5a84d5537eea5099053fe1608721267006b73d8e1f4fb4e7fa4f49fca000db98871c6aa20e5b55c38feac1036b6b15c1316c1a7d241b1da546a71b1bc930cf1a23da8d867991bd6fd5ac0fa75153c04537244e4ac636380eb4849b7611660ca52190519b2aab9b7fc637d405d71c3916048c7e6eabcf5354ae2b9c44e982e8148b9486775f1378320ad52e6e14808778fcfed0020a05810566dcf90d0191a71f36a5c5abf8e2090226453e95dddfb04411198801318de189f1653109c2f1580931657cea9b6e580e939c998f92d94520e4af055cbb974e97f32497406a5332ca49ccc4d434514302a15468b85efd7712865d1a2c7d3d021a66564730b09805bce09a88037a5a3e42bb80205d4988f16479de670a0171607e7c5063c7aa39e838883fd6cfcba8f6401ba731dc4d3677171575cef750ccd8084064723ee456b844d05b1a8a3e833d071eb19b8f7633919e23084b4971309488aaef1230505ae2406ef608927cf3ceb211010408d484a2a0abe549f3ce33237e5da998d22d34e5181aba4a8145ae8a87d89798ddf9dca5b7aecce725239735d46a354a831dcdeb85db03da79df85e594b7143aaed8ee21c6232a919e16f36d0658a19ba6b360665853922d3889894601797341e99775c0527702076a94e73f396acd68160cd180dc5495d05f51d93075a3ce3cc96c2506ee25b1770a25537189c1d7515b05a84407347176dd7746e2ff330ee6d8dad94027d6ab97c5a9409a452398f67a624a9966de663083652fa4891dbf62d1734c51cd6f6f5f99cdf316688b6ec8a7f78f031a68b470f529bad2a8ec9fa6939a2dd225a080d5462ce5c4f241f94d5a4c5b3884b25f956c8aec0773b102a2632de2257380b5aab50fd80e97a82a53e3a579f88bcb8414f8b1a10f6432dd9a00c984b5028a183268af9da781542ebca43487af8fed8e6e545ef2bb9cc16f2ceedf2f9311cf67b4bad7bfa36312fa62ced88108ecf48629500aa5980d53d08022d0e435b28af620668e95381a58f4e0da381141a1a8b0d510b64301c1f290a41e8c909044938389811942b50bb11d089b15ec32c7e90e6ef7348aa9f450cd189020c4ca0933fcd943e811c00acd813cf1248c1788bc5281f00d46c4a2890703815477b8af065f6efb610d4e2c39d5cbb8910df87efdaed73fab23aa92323a2c51c1b88a12ea328a4944e4fe74cedef69a43510079bd1f578a32526fe5e9b1f4ce692f00e380e4ae7c6ba516ca9d95e1b157a4f394b7e2af9a5047d5d7920b52bf4c48bd7f82f881358a6345baafe31efa6e7682129e7334d0b439c3def0806bf15d8e625d8f316a134033abaedcae052121f5819da404f7d8636e590e7bcaa7a754825a00cfd2b6d3dab182e36c24eee10ecd4fecfb9045b527241033cb0c4b2894e1a94cd5f0a467b85966bcc97762b9f4408c675b410e736e5d1d7b122baea1287c7bf62617ea758e956d716002498545dfc4b5e0e6171a3656836b2d0845cccd02049cd9d0a109102a1e7aa00e825f579a2ae803302d00e519b0026ed92020be2a1c0ef72d47e887af1799866b5903d66a29de1f21ff49b13d482ae2fedb48150bd12959c2c33bf36db2a6972337fea5171679858ceb651a578d6bbaaf1c1f19c29e0e2854d5e4d37156787289245175b9e80e5f15cd5e6b5a52827009ad197235d6628e3f4d4184eb726aa1d11854ea6782d83d7254dbddf0ced8d267e684e11912f9d353b9c608c68eadbc6954eb6fd3e347fef534430cf98d8adf4b3f1e48bc4a11e2eaa6c5d0577242c6d09b163d9ab4ce6f8bfa2b0b8df6bd85a312eb9be268389f34c4e5038666ecf08d00aa2ac7ad026a7d2257b51990190a9125c7cab4b4f69d2adbb52d5f3954dab0b84c91ed2533ad6375819a925e67391e3da6e2b8902e4cd868baa8cb939096088d577501b571c0831996632c1c27523c9960caa3c1c6e16ea08269362bf3dcba72c2344bf9ac4e653c68b39ccb7506833b8d72ab03ecdd427b3d76b2a99ef62a03a85536fe491bea8997eb096fcec429181e5b6d315693c12848e4f8514d2ea0d65e82d45dd071d238655fcb522e197a0a9dbb15190be4a992009b351ccd0a76637f6d84b57043ffd2f4d4fdbb21be42de54a982b8b2dff6db3a7b8d5510371561e2ef93761b86e0cdbe7bf52f4faef061abf86a69fa410db0d904a15a7a39e6f068a0a84fba1704e8ca35d699afb2ea66625899377d538b552ad77933c5180cedb2ad16ac77bc366ccaa07ece45ace4769b6d9b3d70dc12056266d20b64969afcf0dd5c6242029b5ae1a329359b34a6d83611246a61453273ca22770dcaabbfa0a4202f69d2e95fdc9547f79acb115bdf7681b2b1e60bd87d78eb884caa195daa376c8b64f85256f2403712cdc06ceee15ff2a51436d43ece13afed95a57a1c76a6d7125026406200e95803738141a9514e4062da1152f81cc3fc453dd8669d51469ea10ea4956459e38deb6df22c74daf503c48f4da8664d6f0a6bbe5e286ddeae6a982acaed54bcf8f73504372c2d06178f0822dac70df45f101bcbd5844f62987c1a6ff1c0effd9327689522b54e8827823f53c53048f3c1ae73a57eb2c2756ab50d7a66716de96f98f5710d29c2ec5a11975882214c21d18ffa1d0c999395089ed309f3cb3a1158d22cbc9e3e41a03d7da1788408d9b9a4480b2e6e1044114d5f08cb67779c4b7aec81c369ac037340c6bb2279a3a660c8c49e53a1b4f1ce4b6a956980a5c97582ea8791c43894758d39a28015ae44c022dd6d85a920d7440c17566fbbcf337e497985fe071b16e2a60c93ae61fdfee9796d6349e718d0c8f2432295927a0d6dc0f2fcdc4eea222d17072951fb937b657288a47f63555a9f72396e29b4911292ed1c86cf9b165b0e489da74b5d12bd68b0c9ace4e1c7fc6516e8fdc9f77fcfff6e3ff190ae76984eeb58536aab2061f4e888b8c99dfd84e9eb75c748347b3a8c6d144792e096ecfb1c8ef28998260366156048dc751ce637c4a724ce5478a7c910ab0fbf84598e5762b021b1aca40480b86350751e2b3794c285e3d8a8220785886769dafd8b3f06717934b6d927a87f8e4818c840a70e065221b16287afa6240ede58ed766bf090c811509589b7e9770a78ccc663806ca36f5434a36e108d646e830eed4df000035c0601aa970c6cf8845658e8e4502663f65020d8f1daf60ffd210201b7abac458305b8aa488b58999749f0af359aa9d89f274986427e169924fa87fac5c472ef8c6fd79d05967b7d11a7506c38901ef55918fffb8d98fa971c6070cb5499f2ebae25f161443de4d72a3354250d3795e5d1ee8b47929318fa5e5277854dcc098be622268b7fc1c4b623cdb1c0ab59f9593984a98fb656b608d1bd9fb4a7c0205d76308fac3d7511eeda5f8fbca5f33de810d517d2a8bf7addb878a1fe0cde982864fb7eecf08f35df8388f5012c653ffcd8e17349b5ac735272264ffaad0a9694274d4e65098dc11e4507cc9c1349d8431a48d4b9b1c1b3a9276cd2954f5f59bc79894edaa1828aaf942f77cec2e110cb12428c31e98fe554982848cc09f2e4d7ac3a12ab4405a0a6bce6460b03b71a605a5ef33e523af723a869c8fa309436d98b018356afa1e0ae17f6c11e4ce073d6184d81aafec1dbbe59a3a4396307e7febe5ccd2430b7f3b1fa6bb07b1a8ea7df1ebf36748fa46d43b01ec6929e4b43a307311d5e14f56f81e5fda89fea2930c11f3488a4a7c35a6ebfadc40cd995a23b2b8ba710f515f894775250222b0567d69c90925d19c5a505ad522c818b5629f610d9c85329a7d5415f6208f6a2d24c6378acb04a09d3b01c1c59f69bfa43cbe3ae1e6c457c5b532644518f9f8068bdde04395f0ca9c822bf8d1d2bfdcf8efe08b5f257a3340ae706812b1084984c418a52c630803a0713cfa858b7267aca94d40dc9633a68808db8f5be46ee412512cfd4e9c8e2c1ac90c3579d0504631d82e910739246470721ae210a48202712b6127e0924133defdcf0e883e597e9cfbb1a4589c78a6abaeae2c3696f336327f334c98c673cd7b22a50e2c4c073fcbb4342c6f9f879e40426301cb51e4f093dcaf9dba9555abaca569cdf1323ba6288a46c085116d6d3a5e2a69a904375d9654204b467eb0e1cb27e0412efa35a91776a4b540e4310f0438dca4f5eda6e738c5b77e1f9f5f8225f53c77fe2f6fcd5c8ff11ff2132f54f8216a215bfd060a76b9c9c2d412e45485a286fff44c163f8c00aadf44b468faf2408bd185e34f37fb8ecb611a6d769bf7fc332c0b52eec6f9e1f0c6422b340490432132b29ab3c65417fbf7a1a9b845605ffef024876e65c736fd33713ad2ef1a33b8e13a6957cdf4312e350e815bcf595d411642e08a970928c041e6880fe5e2ae1991e8394989bab1ccdddcc03829eb31b77a0421056cd25f82a2df9f03890b19bb7bb8300430e95e8c82f62349f91dc297a0c993948311c496ce98d1814ae37ddd2a95a4d1b61c03c0002cf9293e176d0d4451723ace27fc72df7da5de1252d29c1d8f103f7843e547c1e8e8a46d153cbf97659a914198278affd06c069765cb873e407be45fa537beb8c2d6fe41f86e15d1d69c25609bb21c5471389090829aa344e81068f3e52e6973b10f4b53fd43512689557054d6b4847f791e2f082aaef9c7ce4a79d0a2ff79d29ae2a0330e5a6ac8e2936782b5eeaac3e5ae9736fa9166c3c8fe05f4165b0c3214f25645ff559b99f70bcec27c38ddfd472d843631a827200ce472a03e234a1a9f9e9054bb8b6f38a1062ee68dc7d4b748040121f4d47f9a3c4f6b063f890756938f87a3a1e96620c3fc4924340d850f5821daf1717ac42ee0e1ffed2487a844afb3e23f8fa9898e1cd195a248bbd75aeffa8ea1873b59061960b494c0eb5121ce7932ef735064d547867ea88d8b4aa1f283d76ee2a3f86d55871525c3147401ccf682d75a2c6c135e1625f32575fc8107e6a56172b774c3edecb7ffa4b9627269579580c31e478643d292630f15d0367847be0d37a303183d82ebfda82f2536cb44f264f5960611a93a8add92497be56f7e5aff53c7a6fb06dd2871f72f583e213bf504139aa218cb980e2a2c85206d37a085d92db7418393207953960276c5e342b7a9aa8d2381700825b232d6032bf71ace0c41cbeadf84c02b1b48d726e15baf5fab997536ccdc737d063bfbda0f5bdaa5525c4dd98ba6e3a5da38ccb0a7966adf1d3fc79c4d5561bc612892fde694a4c01d4aefd35e33aac9861fcd383824710bdc66abdb4e315543e9fb64c8f2134aecbd6148321ac81bc7998fe4b6ea2bea4431886a6711c6a36797fd55a1a529ba074d05b04049984806558c05c424b827ddceff288ec31614eac9d72ef2170939e8a21b974216fb13308e283f27b9fa812b594b9598ccea3e3eef4adf156358452a45973c254f35596ee3b1cca71d00760017fb1ca839dd49a17f0ac274c807cfe98aea677e6980184846611961eff553c4aa27fd7f3e05a7cefe00dd4101ba6646131719b0d49c43a861bdb4577f516865471161e77a82b9a3f3eb932bec1f4d4ee05129078fba62ff5cf411c4c12c7d4533922a35131dbd0807d7cec0388905bd428d987b955024bb8fca0aec0b9c331ed4d6883a1edf90be386077cb1aac2035ac4685195ce7503d04dae0df9fb28a421812c5147ac92c005db6d45969906fef7f93b124f07b09d5a1df52193b7021c0cde3f835e5c0e619bcad514cd2d3e5a9ffdcf563a758faa09e3193ae05e0fef3e03436956fb771c8ecbdc872cb22937b8b2c9a3fca4dc3b5b9b15f98d3c0f23dd09332c1ca7b6a0ab5515552ed61f456beb80a0cb1305eb16314b642e8a53c1b9131142988ea68064add1a868032e89f726eabfe2e722059d5e8bc167e8fc05bd1eca8071b6a44bcfb3a55ee7584c7febe9671901a5889082095fbef77fc85e2f93f4aa214367a4888fdac39d74ddb4b318fabeab1c1a4d40f51fdf3d0a1b23a417a97215f9180af35475d66cf7dc67d2575c2187a18ce3188bebca1df93f8e28800c179ed0bf4bb987c5f65008dd6851606e1c99188e8bc2b1a29b5826914a59ad80e0e38f210408a2dda84d406a386fd932ff49cf86c519a780c93ff6157e0033263cfb4477fbc05d14f769ea96ec6c8792255ec72714b741e84253401af3afc4894d8a69e6d4bb4b69951cd8139a423ed07f7c918ba93e25ec740e49d9634d6de608a3e4a2e73590ac32736b361df520601e6a8f0cc1eb14f57ee205ee3fa9c1f34e9903300ed5bdd8f6e458a8a0a89573071b64a93c36de9689404a197d46ede63dcdf3e6c785f28adec848a879d84c2ab072aec9624bf1ce114325b64458310b3d4fc13bf3eec094c4a50b1d00bd703f173196243033eac200b9807ca9b46e10c75c04cd96ccbb280da6c9cfdfe752e87181973b06d8ec4a997e082ba8ee49bf8bdf38a7c6848d18f101e1acd37cdb068cc1c2e269a58e3f474bee30509b2837af95545f4e748348a62c323eb0f47f83e839c2a5c5470a3894385a4972925fa7f335bb8e9651299e9e0157c13201f86e98a13ce0de925062ffc866df02a1dd099bc6ea83ae2b1b4a18481cafc1a2f53ba6e9c807de66673f6f5d2d22fcaac9b91747fbc4e7987569404a9f3742dcb2db659334629e53f0172d5196e4a3a83983ebffe43e7604e02473d93eea823678a883423500ea41a11f089501d0060c75506806403d30d403a13300dae087ce50b475481002828483ce9c7e2a61e75cccd1c66a02d2dd3b670be978ce9bd804d04d409d9fe7fc36b56c4d933400aa31901b034d379ff3ad50aa09480d81cee3d052ba3297599ce0714b87cbde6b491eb839442bc0eed25c8faccaf719e2183abfcf276a90c60fcac01012432504bdb7b9010ffc6de50620150c89e8d57ae8a28bb0e3b5f9d7c7090975c4c204041cb295be6efe2f0303aed00dd7da2e50cc0c3eec3f384606bdb8e1419e2edcc60b66ad71b1ba1311d01d154691438e77508eea69e403db9fe3f9666c46ee9d84eecb90d3bad2b94da06e4844962dc9dd1c02fc4c8a4a8aca3b09b106cd2f074b4ef7ce357e55e242767d7f026f0fc69c23cd3fbfc6feabe63a76681026f4eb675a59581157b548025fe60f8af4a9d99a9426c4e64e817e1fca56ee765986254eb3e4c76b2257b2c6812787cf365376f660c28440cffe52819f78934cf631fedfffb561db52ef756df15e115b4993e8727748eb0ff071f84729eacf25b362a3431839e73e7368bed9a7defea3ff0af6d54442adacfe3c1c77a1df13c3f62f2073d2cc1131615a0a11990e86d1adf79f19831319e2eaaaa4789f3473861efc779bb97f507db7957ea1cfc282ec2a662aeb7abc0d8100357b7e578898c44edfb97635c76d0279f3fff34802dc8e77b33c4c051cdc8776faf025a3eba3d2fc893a60a7d05a153b7dee474eaf674d92f4c0d896d56fe7494c35258733c3ff39da1ce485a6ec906dcb62e7432a560140cc15007f132064885d32db1e0f683547aa3c3a22ea1dd4e9e65beda876553e08653136ffbe2fa34152825b71e87c13856ec122eb8bb541da313baa34dcf8497dcd25dff63479b8b5cce8b396f75e9be896f34d4678eef89d922688ec1d5f7c340c9f2296e3dcafc053943da523ca400481e326343498aebd198ded9ad5d7e6f299e69df41bef4e84b5b86261509ddb3c1a567a711a18735a403ea8ec1bbfc520f760f909c55143df7646de8c749c1cb7f445e013fb9396647fd253c3a796c3106e651e17082d785f835db6ed21dcca1db330ee2e745d01e99a80d44e288d9952618ed8f0c11301171e49102e2fe45a6828bea9ca3e5a7c8553eb99130016fc739876ed3b0a407021f2ccb8b5e4d798727a1bf7bc0a59be34f620d11b9ac10197885c8da8da7928483dd51fd2ffe713b8bb04584cb3c9b8a4f25d8f20ddb3e279d025a2232a570e51b918554b4810701f39dacc453efd908b32ae1d3f3f3444e57a8e3b68e7ec849717767671beb4de2765a53c2b07a9d5016cbbf2fd254c5474ef94259565f69e2213bb610d5573bd12babed2622dd5137d6f0fc34d2e5105b476f8409b4db54597f89eb536ca80a2d4cb936882939e674072f26d46db1e00ea0ab5e562b5fb171b542d1909a6d6485f5fa4c742f0695cbda5d4567bcbbc55b828d2e841d88321e8cf07d76fffec87e9bc3999ff76c8bdc4a36163ee75e32bb5b6fe2d926422ad62a864c7424f0b455ad85b431b66f6f77f692e44d19983d55882a840b7bf942cd6a1d8dad7f9bb34771c5f3f703d9a14b806e914485aa895f7aa590ab29dab62eaabb952ff73e4bc71c9fc7f067021298c4d2382f203e578362c9b63176245a479761ed3576bee5fb97a9a270b81c38daeebac8da6945f2d94011a97716ecc1e4f87c16c462742a43a3ac41f7200aed7893dda1dc447836c34b29c4b036a13f92447a40dede41111785108a17a27ffccc491d7a8bb77c214af1d87323f4303f2e28e11011472e0f963a1eb3b2728dd6a04935555ce2e10a8b6df9603cc2d526d15a88c267f70a61cc7e546f3e45a039a6f2c1e477bc3651d98a2d0ddc57267c5ffbc14e55d4ca383effe52e80b3e8a8c535326f1ff5e71cf51271d39104e85524338736d2bf3972bc3759ff93ba5258f8f0e18953d6adb0ff2a42912ab66d8f040ea4a16d68d728980e6a75e841c0efbb07aec7b1fd32cc58af562e5be8454f24ccccf32178d43fbe2c9598d1c669db4b6bddff5a3e013e6b2995343af922f4df45229bae46ce6a572fe1148c107352a6c2faa3a40ecce75ce7b49daa208d08008d95f2b751e2255af946c1e611c82be1c9820478a797cf86a8a066e8b046e17db480c597dd3143021780ac0815222f9b20b1524ab844997bfab166a6a6f3fd01ad454b591252f8a0f34166a6ac3722d94b058f02d5e728ec53ad3ca03f6a1a663bfbc1f9e18a70e3f2c6d061a9eb66a6a7cd085f0bdd531b312b43f1b99bb1b19fec017b81d5f0e417fc775c4795a03d471033250fcce6fef7b3a0f979e5d7e549c066863b7f269e903ea11a1ce63702a3740cad895c14c165d738c07b96110d282c928bcd13f6fe765783ee51fb429afddbc0a9446439e9b725452a038ee8271aa867c7d9c239900a3e7e8b8847a1de2df50110fab204229dce81b3019e406b73969a87bc7589ff2e82f39179e287805214039fe748630e174750579bbbdc437bef4d30d519132e349b1102752bb99d403104d2d5a55391048fe370404871223ad0d2e5c20730d0710d5c7495c5bdf1d05d224e3a5ef2be6250494979076398a01c84bdcf1268d16b921a965f051a26db77f01f069d014f4ab715b36bd9a33140e02415469f3f935008a67585e678f2e8905f5575eae718ecbf58af3eb1ca5dd02b5e1c168d27e24d8941b82f92d401a3edb72b8cd20c79e2964b928bf9342b8a9f953df474d9edf037f791309d0200ca626a0ab176daa7a3539be22d42c7e321f8fbccca464636abae5da1d8f915e08524af8e1af60f72f7e64da4a6b495b91d9770178cd61a22fdc697b9335dd75c2efc6b9dff456ca9a9bc16416026f96be9e8c173dc930131e3034cef545e1fc0ad3f6688d115e2964376be0303f178f01726b3af0684e77d40449af1329639e19d2996c0caf5ccae6e5de9eaeb517e962e6381a62d614ec566f36d6a88858d80f63f1beeae92845ba08345e4b868f55fccfe7409c5bb04302b9bc5de6d52a2d4262ed2ff63b8c72875c32b2539750cfea0f7d8ebfa487e1d09098ada5c0ee57e333113a7c8335b75d3195c68802986dbb522f952c2263a10221e429612850a28b3149a9874301626a44754837e5419bef333a6577ee9a4d494afb760f5ce740162889edb7fff693404475769aa81a0690ae7e2c357b1ccb9065ef166300bb17a9dc4d7bbeed166f095df7b716fa3230a774abfc739e3cd61d12335f226fbf40f8e0a37898818c02006f05e64bf417b71a0045b962d9750bd04cd5726e5371533cb1353751e88e1cfad5864b675ed59045cc850935705b0a375af0d1ff61a9532e9767aaa0414821bd1100cd2e56723c2439f018ec291cce12c3faea0da2c9f6295941ba20c5fa12abb91c75cf2e666f5627560516c533607003fcd78f540470b73cac67c48e666d493c53cf0413cbe1b62e07b3f60df4dde896575fe27427b779bc815424726f8f30f2ea164cf66a608f5d0935c58c79b64605bc370f2f2b0548a2880e19f1ef6e252e80c62cca3069b3e0bbe7a1b66e86db85e0c1c653c7901577a88f14feaf15aa20551567ae9d270af2d502f1d4e645b0a9626ffcb105b05fbdd4ae0628b7ce2453dee46a303a338e7228b150bba4843f3c537cbe59ed5a077a699e9727f05f4f1f640d645b49add9f052d8df533a5773a85255f4e28a903718fbcab8059bafba73b41544bdea223ab7ac4362093534749d9dba1da1f1052927694fe56edacfcac32fd8ce5941ed10dddf2459499565a1d5949197b5302ec1d03cfb395860e7a247555fc276f709d648dc51d4f2c256f2a6019e81399f65f8ce8724cedea8058a035a7b702018a6cab65d2271c16860a92a59a31a825b548055898742496d46e373880d100e347bed2448c3260dd2db355f1bd98c3bf560a00d5a939fb53adb6362ca1c10ed4c1d7b850a8414542cfc013115fe5c470611498ae9c8d36e56f3338d158f4596760dd52f4671c445eb32797f1728a57495f5728b6beaf48ddcbcf5dbbab1c2e8088fc0bd5cafad689b07908643ecd5963a02c347755d2b77f908af317bb78254ea980e7355b02075829a5121dbe5dcdcdc6d3c90b1fa1788ed1c4aefd86c80cb11d86c0eb6450540808ca6b60461ec4be53f180f89b7e35783e67611262ab75eb6ba15fec8a5a0cdfb32b0e8f7e05bca16e24800cffa67bb066049e639792d6d3063fcd9ecb277b1aa4ced7aabbca501805a54c5e750dbcfbddada9985f9a2393571f13a2e782b09305a67f25e662a980b133a11a8c2780231044658b0f76422312367c18d2fa041aa066c107199e98d0b82cfa1c6b5fdbabcbbf99ce5863eaf5e1e29eda621c272a212368a4b78bedc379e5ecefb8ecb725139504c3ee07308b48c947a00331d64d7442ff1752e8e6444e2d18995d6f5a2d4b57649b291fb2f5000ffe018b2888013e1238068a79e0e4381e88575b262165d52e81ae74dda810eec2cac4ce3cfc17091e1e0a7341294ef12e6504a82775d35de78decfc82a248cca1a78330b16fb6a255863cc41e01b0e3cd715be8c7d26f7d8a73cc8f69e06bfc26c2188c6a2d95d33ca2dcf20b18e5c54de13c62036bc51cb57688a0077091504c15ea54acad63822858351a2361793cced1b260c76f9a535445a09c2e9a001f9064722916bce96f3f34bd1af4707e3e9f2a7d3e2e91fcc980e89f97cf9770fb8427ecb95938185a18ea98da20c4be87e9997ba58ec6ae6c50959ce15d10086a14fd6d4b005d15ba523763c177b61e68918f244f9229bd211e4eb383cbd0cff341778602e21fb95ac2ed66c26c4073ec70d679bf5c09bb4cf8052361d52edcc24f08dce5dc417e6186536ceda85ddb42af646ff5a9ba6f4f300d303dabddb84d905b117a2467cb65a5dc4115121585a845673ba84c9730358ddfce057683b691a7853bfa603c0619d736b715a1f80ee8b5c68dfc21b3faa7ac1f4e35ea51f509fcaf25515cc3387d03c0e04307dc944332e57be98b886385e0039828b53584b363f900c9ddcac8c74cdb13b6ed8c47e25d181ea2e9a8c53b5709c3ee19ea75676985475facb0e4286c6fd5efd469f82a75caf52f2c772368f07f36e3d6805d88edd6af6c4d43a8f9e739a7934208ef348eaceeaf3705a6c8eb701d473644d6ed916f85329ff0455234960ebf660cf7c4f1e53031fe92dc6dea275f3010665a0cf89676a7ee60491a6acbcff7c85ccf7a6adf7c171213a60a7c8c2987e4fe84f8e96c497c18c3ead8cf2403dc45358c5069a6e3c712294654834565ab09922f0bc80cec1f5ea80245932108a5e34d6045834342dae04d8f883db7668e7a2fa9a59f0a2d4089ec622e2d148ca3879c13cab9d0dfec6c16837142d85d47d008ffc0d340e970bc6d62c5d6e8fc55d20396558db0b86384d440e094b18d954a2215f84d09e68e683766da4c2344bd04daa10a151fb112d25d0442fe13bcb797ae47fa06aae9250a1a5056da4f77673211a1a62d5a30b4c285ff4f1985ade919b61ce66cf07b1a97a3329e72f1e9c4a350c2b0f50e69d91faa902a3e65ea3693c5b5aef63fb8c77e3c883a7c328c610e63f127e805221a61ea608c6767ef42251e52542b6dfe10cf402824067a9c46170f9881ba448f08166accafe2bbc2d5fbd033021cee92b6d8aabd231f2ad14bf538b420f5d73b8bb3f1edab9296fc6db90046f8002e229b75e19ea6cced9fa97d1581ad28171c15252856a66d3c7d0d0703515aa1c7180eb3398ce50ae6f6a39797c03ac53fd4c275637bb3fc0976d6e30cbdabf2539965514f871a51d06d095676973d5b760417ae1c5f96c9258f15427de5d6e0f49933aaa62a6601a4adc22b6e5ccaa09293c69a4558160da5707a0001f676395dd57ac63017a05fa5506d8ce7effbe436fbe036804b397a505ff563e5202a0070fe5f1086451c085d877cbcd882d92fd23714d803eb0c7d3fc747b5df0bcf0c76374977e2ecc91955331ea19838e5de5d5c20f5f4d80959272ea142fea40a27c147d93e472e529a4617e455f1460cabb721078786c0cbf75424cb3e53e374536aff56e72d44343a7ad614a004511b9a9f373ac26c248013c615dcc240cd36dd8d05bbbf68dbf4a39643b7b430352ecafd7f744e056c4a58d699b21f8ef2a7c9627d59ac0f59a5415ed7d89b4dffb37056957f042412eead515776bd870ab10887441e0efdf2447833ec971dc7336c8b5e23b8bbc0491772d5a18f95ed1adb61609cedc75367dba3217d34b8f44434b8cfca48217ec9ee8b3872ad7da41598d64ca6743ea6734390eae1fbd5ccc1c69734a88b2452dc7619d3ffd3e879ff40c1f34739431e009b8840a0c2e388e9c65c563d4ab5f4384c45aa19f6cc340351027dfe966e8d8880117fa017c6d192c5605990a33c44379c002cfb3dd14d3e6269251f5f6a58bbccdb405d42ed064f3624870da780bdefb9c25cc46918ac6b6133df82ed5563ed653bc6cb44167c68cd13790705cc7cebb8d15ab3849c83326cc644945cb6701f16a6e984bcd1037874590790b041618144a3edb855d2353ed66e3b97fc95d53ad7b784c78563142b58a4b76524a3ff7cf886b898886f982676ce679909fcb7c673d575abebc019f7f0409476c8e0c3c8efca3c3bc16f369c8bde7112370c42365e2eec101d895121a6ea3fa95660bb0b35ed24f5534ca6338390c75bf10b975a3abe2c9167e8499761240acb118daecb856557cf93a54abc01a945f32fddce0a190f0a2965eab8b38bbc416f7423f9766e46fdf3ce9eecf52f6180bc1fabeb0634bd36c28c530aedc9062a7064f89559742b900658050ff0a3d3eb406238f522bf5cb82ca1c55883955077b111ba2d3cab9b688476fdde3f1eca23c922eae89c217cf8fb95fc6f8d78ca9ad0642b10660afe9bf2ed62c5afe12850414cc786b69efc1e6e76cd97370d01eaa0f4a12ff97bd8535c82f090bb3345ae69f4809ac9ccc05c2f565d0b4495e0ccefb54460ef24303fae55683a16c1254e161352bc767d6e44e2bd782c03e051dd94dd7fdd2358650ac6705a128f3313e91a7c4ee5d3ff679cb976102d409a88440b3e5cf5149c0c2d00efbbb5b2df0b059cf94529f40763a32c66b23eb10bbbf3f78292edf02d87a3bccb35308888042f440776c9ad2b186df687c8e6bddd42648d19789d1ff3bfde601102e6723bf96f1f12ed2756037e9bf2a4d1448f51233696c3fe8ff908293de4f27635a4670f6a391c2be37244ddcf22e23c764203e2a89c359834063d7c10234fb52b38acb4153501999093c9bef26461a1f3bd55b091b82ebb7d977e17732b3b4eb789ad30a996637da9d5f6b3e63f93fce90d7f4116403bf642383498188b609405d686929450e580e86b88c0785b411cafa9bde76d4c0e4a83d0d4163c05afff763d58fe391407d1bbcb7301867e3407f3617027075ef5c461b877b7cebab3b292daa6c7226883d9646496108110a06c89ff468387f66c7128ba96374b60e1bd560b7a2dad095bda07a48763b2fed1833c9fa9c583549b0d88d5ac1f6522791dc0467f278acdc5a29970b89cefa83574f0af3124a11dda2855fda0d96d437c44d23f29b2ce78c0af9f41cdc315a216da6d79b799029891ca7798c96857c3ed8402bb82b502f2a68e3e6d80cc5e94b42d20f6273090102a2fe90e1c1f81ae699fba598be731c50e099ad18799c8132da8575538db8db8924c96d1789df40db4a5ce4222732d40c67eed690d0b4ab664744dd5616d0dec913575ab74fccd30d027ae81f38723707b316b658133637d74ae027163f990135cfc0fd4e9c8a47408d5d8478f11d629a612c7c51e4c1620bcbb17fb45ffe8c5b86a878cba4c8f5009a5daa74f5ca2ff2a11137460f807c9792ef98ca0c497e17e5624af0c7122b058be5e15e8ad91ba7ed80715336877ff410ea2c1f54d3ad141735d280eea3eeff0646a0268a3ac645e8be63e4220c858316561114e119c89c05750dc5f4d738be18a9c9bdcbf384a950f87b130afff17939309adda87c21d81a2f04405bcc62799c142e00302ed4fa8766f22da1205b38618e21efccc05e629eee7d0c4c4ec8f16a4ae23ee5e42db2faa99e0ca02dc946381a96c3deb96df9aea638683f2cb6691e290888b84db00b8497379e297331b7218541e91c0aa9d3141d8c5fac125bd34e66ba4a97d3d7f32acd5b44b773e24b3daa8af41f693e2444eff97e40d27f1b6fe3d13866ba175b84e651958fc64753e4cb783b38533be25d7a686b76b216ca814189eaf6685ee4fd39cc4b7ab3fa843f0e4cd5b610096c2f40ba46af5b86e597f8a00b4b56dbe97298ddd932f68883583105ac1b5faf2d3f285a5449116ff64bb7ec43860e2d701140886f010c85be152dfcbd839aede00a032a33dae21d3fff5d516263ae045316d2481304de5d79ad40238709825fb06d90d9dbe1da5445f7d5b897d7151a8430c0749530c7f70e2eb03cf155172cbb37132a71e72d9986de27fefe91fe841415839210e7c91f59aca8f0250e7d709378e5a62b590bbfafb527a225a6d252e99b3f37e70ce87aa7644018cf419b3b88b6c71c7f9c6d8dcb1b011b535682743ce75f2b048458b3ecb9263f10561a5ad1c8cfbbc677f31949892f817e2bbea37ac4908793b6f924f0063f66252707487c9714bd7f94a58900d62b8209acad09452d07b64b0068349e6c408ea50cdcf9a0a25b745bc2bffb9ba22675cab84aa4ee648f56b83c7700a2137055f7bc7fcba76a61edcfaceecda27c6a9a87c85cf3a65b9ff1fbf82e263551682aa6ca31846514521b2f52bd3103854f6b45a159a1bdc214cf4f441844baf2c92f5f027093470485bd2dfc733dca7de8b06f5ea0029d01f1aee826686f381da359aa0dad430cd48a5f675e9eee6a32c8daa0fe12871676661cb655342dcad58ae7d3b8d8d3ef24f0c2d49115257d65dac00e1e2fef5fc65186c6c7ec71ce110e02df9c71318ddf83a209f9114498bf5fa799e822cf3c1ceae7e3eb977c1a76b3da1ec92399c4ea8de4a79e12d9ec50dfd206aaebc398adca3b85e0c993c36ff9acc6f6f3ae9afe8dc6824a1d28a136231ed4b913303740c6d5d20102aa20211f30efe3d7f2343935bcf55b3fba6f68de4442dcdf0921f614b6e1cc3c30bb5c81c605d55bd35f8fce213131a51fcb81fffffa40680cb2dc015659b3c847ff106b6ddc7da849a09e4f2073850ac8fbddc5fb5d196cda17ea82895c51730c7e9b36b560789e029ba104d754f5333f8b28303980837689f00f744880cccab873d06029ef1309334c6aa30a982e5d0fcd238c4d127a4476f3c968dd53599593e93215ccff2628810aecf046d11e8f427e0b7d365e8efd8019f2a4cf20e88cf0420052b131c33555dd090b2914dbc825482315b97fe171a1bf20221d17ac74dc066b704eadadb8b26a19930041965b0517573c658ae1e14df8a88a81bee640ce2c3e43f41cd685d08a42591d4c96b524d7fdc0cb01273ba4817796e61c1a6afe840416a6e608ab63790fc7c75861796e89e824070e4bdb8178a478d5457ebda74e33b91c87e01d5b0b624574754843aaf5a0eaa4628c12fd05b861acbcde77d606f3dea1e726cd7bb0c3ee1944f039f5b673c7915c3897ea39c4962325c66dca00c8df920f30c78fad68f4c259e9b5a6de5fc21a4142926f9069b9b9fda8b2d2fc309117429323abb16c4b7ffbe679b2f0949d8963831597f890496d4b2d20e0da1c425254027a8d55a850d5cc5d28cd0ea8aff03be5f1e916cd53f037bf2b19e57b72df354a34e2f8dfe2c96f927f5af3dc5e306db09e8e8c31c39bbb228dd579106290cfe051edc178b04bdc8b80d683cacb49e84dc6a4413fc7130f10406ce788c6ef18933a578632407b57745aa9a89fc27041cbb85a9cb3d6d36c1bfe638db80b0dd07db58fd0341382155b4c6a216acc1fdd04bd6d24dbc83de1861bf22b4b5029e8785d9f0b1e24dbeee7f3315bd7a1dbe55ca06933f633dde966e7e7c99f013ded76f97f561e1890b709c4522147b593377fb4b99cb509ed357c4be060739f62398bda334660b9d24cc432da2d5ce993ad89922a472d24e1a555745bc9eaaac5be669dc5ae76be55441f461d58f65c6dfa03ae1ca0d73fe00f4618910bb795ad5e6a7404a3c65da3190551b865f743b5ec1c4df77622989fd5dfd68df2e1eedc79d11a3e423611d54d64f42b7f826685c81250def41253484a34ac224c5e56160204f47eac4ca4c28fbf3d3d802263cf0d20976489df6ae3ba9705f051c56e86aa0bf6e8ba465d60b298d70ce09a2f95b9baf7f645223edf0b800e8c41354f41fa02b913b0206164790d5997bbfea69f765ae8b87ab08c42d29fa96210921d61eda4d9cb56eca99bd751f5d569cb87d1e89441af66eb1f479e2920b0d2edba3f0787142832b01c99abf9ba2ff690eb9363be0b727ba9b5a8e32069ea81a6cf5c6e556c8086500ba403cfa1b0d886f44ca50152a285546b52006030b7ad88cd8d34348b9c445b127a1e2490fc1a62da374fca8bd80da593408241edc4f067ddd8e3a3dbc3359604762f9c53620849cc99a9af8d92d7d106113baeb092467275dc88edd24a9ab040560736157b3da74409a268a2fd597d120f7d141d89bbc2299ca5240ab55bbec3645ab44bd62c67d18cae4a0a3a7375eae46447c382ec130edf5165934d2f55f3d4438e8f7d9a4a3020ee3ea2ea1db100388014e4212d1d8280fca73e9a883339847cb0d9e49c08b43bc7933440b83e93dfa7c3696cc037353c56128672d50d1b609d0a88c9275df67c215fbafc6ca082af7af0b49af50d5bef7521df6a756e6e172c4654bc8b08277321541ebbefa49558f6fbb677f8cef75afe63ae2a55f81074431585aee856da6dffc5710e22f1c48a06596477e0eb762db1051002bd4812a4d31d7684f3a07ca214dacdfd5f2a4291dea1a0a748af9bb5913356a95d9c4b55be988b9cb64d7a1a211e6d01c250e73b23c832d04841e5547051ebb98cd68f9665708aa9d83f95d8c05a4a4665f0ff9f3cc071ddb149c1f79410b7da51252a136cbd523444d53d0d003937ce06e581322b028ac8bad1c4373421ddd183ff1720b1a1ffb504f2066f34b4d01b536e344f51b836b05414053277332c490b117c69b9ea392bcfa6d3c606763203b9baf4402849428b6e19821f85f7c80b98d85fd06dbae24367fa5fa688df71e86692fa733b8e4ee593a79abb5286d7312aed0c055ecf0cc1f9ff25a6c4c6fe65d301056692110eb7c53c6205818135b4afcc56601dff7b6b1bd4ae8a06005f6afd6d60bedde192627a15b180be0650d119cada07addf5b5b0c1907145081c6999e290f8b1486e917ec9b246c3af0baaa9bd441f9d3cd185e691e7da3b48ade57cf3217cdc7892082b70534cc253615d2ece5109180c908e41cf972ccf428a034e87d783b75f73c093233e88db361d0815406dd3369504f660cc2435ca223f6fe6cf333b9bb566b8ce7c94690e99c68e68cad9a71830bfc1d4875a1b83d0224d402ea4f02725e5054556d3a99227effd82e0c2c8ad3e860067670954e7b40f978c20764740feb83091f9cf08131b8b7962285f9e5b5b031e4840074626fa6240013836f860e6fd0ec9df5c7202aeecc373366b2988eb3ecd0d5bf9b888890dd6def2df70eeb06d506470759e3f4af87ad846c33da54b0b74d9bae8ea888037b9f881ca00f21338acf5b2df3d430d7f33ad1b4422cd98fe0e9444cb14781650b962e51e47de1bd9eb7f531c99262c3d1bf264fc334ccec993cd3c77ea5c584ac2502e383c2a4cdd21a689688c29aa5599a05c3b21bde934d65fbb410bbb7ddc88ee5f0be1cda275dfa932d9245b2b469d4b4a627db5b9a783dd1c11734321e8d88268b58ce1e1ed9c6f8d11a2c3c79a613b30ab3a7e2e943550df268f0a5411bf3347f5c2c4bb6cfee9cf3daccd9b9b9c9f632e64c452fc698239bcabc33fb7d36a7b5599f5bb46cd06ce6824789d849d3a609a29938b68fdedb2009133c1ecbda9316c39241b6568b8b1c638caff164b544927dbce581789a3c9364a2c15f205a816782d01a818c534efcf3807892118888ba37310181ece556a389a0b9afa3cb7dcc9edb54b2f7e7690d5a1e2d04e3b32c954b0b8f26d907910124db8730c01ed99e524a29a592d2fa2b29fda2e0dde3bcc264fb0aa46d8d68c6135283582d6d936d85f17444b548b6b1c6d69f2db356dbb32f7c41c3b025c48ab18260cbc2962a96ec2f6c852096ec376c89c0e2d1e00b1137cf4fc6c63c593d9a644f73897837393bd9a2583fb2add1790b1165b33df5a989a899db6a99247bd1c8942f1402258f88a079bb8e2e6fbfcf381c7088d1a0c4a141191b6cdb7487888561df540645b4c22309a90ab27db8e57e8d27aa8248b258445997c6fd3a17f3c5836cfcc37ec6d220f694e65ecf3b8d7675301b0e8dcba44669ac48d4d817d69ca3fb7aa57d0d04c58610aa2037f2c7c74cefb8ac6c7a5cdc302adbef4784ccd9adad4676ed990b4ca37fb1d562b9a89a64ff8b3caf7e5aab6cdf300dd6af81c8172c9758b23fe1dd214776ed77d5402e86c1604697f6c8f62d20b97daf7a0025b7e7302df940182b322d2a2230682eb61afde5d8bec6c9bebec16c68eed1bdf6eda0b3e7a64da3db386d9a3c0d334fda0d79272294c364fbc9334f309ad49771653c1a1191479e9c6158344f564b93eceff53c910d3151b6f27dd0feba1b0ef9cd8f0899efe735687f4f31306fadc5c3f50e1758a10a4e3831e3c4bc2e25cbe9331393215e46836812fd55455026a982f72e829dca9d49a2b7db453a1ece5c591142082adf5fbb34a83d9c2b323411554f9fd5597b48a6dfb61ee6b95adf37e6b93a2ba5379e5a26d2647a152fb87839e4e5c396716990caaf7964b18613c8acf178bc70f6e4e80f21f3f570ea4c9f90cae4da3e53b573e9b4492bc213519c1311d579efba6b38f4be50629bca75c5acdd3448e5677477cec4992b2c4dba59690226fe043a7d16f18469901e84279026b54c6f3bcc9bebbb72dad4537b8b8b4c3cd972f5f5ce72db6166d05ba777da54419f8c8c37052f87cfd4a15f135e387b62c501668da6a68be8e0d8cc34d845ec106f0795401a44c9142696e87bbc1cf343c8dc947eb2b42987fc4a9b5a3e1051dab96b1587dca77ddea6d2975afcec6990ca4f9ff9cd1f1e2f6c9f9e4c4f3f7bda340a5b06f4c101e6f9336b2691364124d1afe0be20d3d320d3370e32fd0cd845327dd3b6e91aad5ddaa492f23acd97904ce90f7da5d7b05cc90e44d25b98bcb464b67770cbf4ccce3c75c570176970026953784d9888c24e3f5d1051dae95c651d5df64b4a29731c5d0fefef27df1293e933da747423cb9658a22fd22699799a3013c613cd2f147508d2eb3d417a270c486d83945eba12a387e681871ca31b7346c53ce84004efab2b47411663d3b881e853010c583fca8b6c3db32cfbeb80e3c98749b2be73030d2129d35a318d5f8d7a7a0cab0d629f31273084458f1d7bc41986314aa746634cd93556ec34631fa594523a73a5f43109237e58b715685328ca16066ef560b77e423f31ec66d8f5851ab4aca73c7a8bda2dac40887c76bd298e808c9c03f49167118732baedadfb1049f1d9638cf1da63dca287e12bb5f9c6a07738bca1b779388c216791c8c81712612164e4f9dd062957a0c12a57a1f93a3bf4c120bb5c4d2f8b187b96659987e3b52ccb3cdccfe495f2ddf1d8674c89c37ef789c3fe8440c9f1dc313cc2e1e5786ffb8c96311248aeff21731bee9c71387c719fcd3ba381f0b0d2a4fa7b3d6f058c8f0fc11c4a1b2832260b89439c2044ba60273b2e725690c4d86286c587223e5182171f8644dfc9d7054fae823488e7698df86923d6a072d5a620713e1b45ac3f1c28324b1fe629c54b1e5e9248e429be927b493e2f66f2b646e90d65e48b43be8ff774a311a36abdd10627a6b6ca68db6af7350463a6396c3d8079de7befbdf133c72fc4008d8f49acc0e430fa103fabeb111f3394524a2965824e4a29a5734e1894524ae9a49452fa4929dd814729a59452ca440f50c238c30021b9fe87c653a38d935879c92198935851e57a5a0fd6bf8821258a2c4315e024c94b09d6596bac8ff3e1057968534475ce7442134d34d144134d3411031ab61ab6345c354ca56a662134efd376c06074ddb90236aa5c4f4a8ef0e24944d55aab7d58cad53eb421d75014ebabb58e79da7563b6574c0cf9d6adc6ccd96d688fbdb71a5427d32f44c942a0642f5bb8cbb2472c61efb285391f2e5b78b3d9b285b595962d9c4d972c5b18dbc1b285af992b5bf8b68f9b2d6c7fac9b1aa4660b53a98a25ccc2330b114bd867b48d89124bd82dee128de250a74f09a02e087848597c78387f540e90808f7e08f8eec3a7f259aa037c719242962ad7efd0ae6302997b48f2ebd985e98a0669b06e34ae6b74bd050738c5a3ebdde975307b27f10ee61d348774354f07f8644c93ea43df2a86ae62e80af485ffba6f95eb4952e0d163bfa148bb43d0acdddfdfdb7b6b77d009840245e409737d0899af7d239bbcd15ff8525c812a3af196902bd8a47e7b75d25818f8e2cc857665dbd36caf8f1b2d45b0049d263adab53715d91da3bba77f9a25d3df1b512e16cb2ba6e407620a454910c412ad71f3fca4cb8e17c6c8328819776e8f56b934900e92e9b52445bc3006951f585d12647a824c5990e9ad228e60891b8d6892a5273b09237a1a049952158f0665a5a05083a0ac5fac2051bf4ea041f9565d345de8821173e3b4ace3b46d661dd69de3de6db5d6abe68b290fd5c1b99dac5dd0b86cebba2de3322ee334ae0b1ca76d1b97711cc7655cc771dd2feee3b8ece29e3dec9e6ddb33eedda5719b26effbf57692ab5cad15ab189761da980e89a85824a4442a77efaffb8e6a5a77efa5dc374d7ece6bd7ba1d97712f3aed97bbb7f3ba7b75ddfde57de175df59749b5376995669e5288661e7302ec3b4b3eea7ddcdb23eb58ecbb8acd3b84cd338141b42a882dcc81f1f33bde3b2b2993eb447a74d6be3b80dd74b5c9f617a9287b2aeeb3a142320ef22098da0e840ded5751f11dce489286d3a317ba60fe5415f287d82d3382ed3b0cd593737eec2d850d9e7af887a0163bbe7384ddb384dd3348d8ba8eceb4044712b4a9fe0b86cab5dc8368ddbb88cdb66d6695dd83a4ed3ba2dcbb26ccbb66dcbb2eecab62bfbd65d57a6691cf74cc356e6365933599fe09e71995662df6d294a34aee3ea374cafe19a333c84cc389eebbb1ec20852ce67134b39e59413748417efef27599eddec5eccf32e91e8bbc9d62b8bfd5822bdd7f372d859d2289bebfa512a6473aae69c73ce39e79c73ce39e79c9fa1830d1e7c68539d170708f449ca1e7b9d8c54dce4a21425240f5dfe459b468e02e47526eef23a28a04df4f45d93735391d3068baf388b4f8706a58d06e5e7dcb1e21306a605a605c66a9fda277dd7777dd7cb219efd8db4c5357c9d6216d839bcbdc3dc3ddc1d84bda3c0a08f60140fe19193e0d04b4a2ec2296e82452bb08e0cacc0cc7b3d917d766927b8c547f8e42af0e82658c5332cf3875960f05d05e8084feeb4bd6eedc35efd61cf20db9a26d95fcfeb9aac6bb210ccd917364b06e6153866ed7b66a26302d9af4d45fb9cda4db4152b5ae0b6b9c16181e70f9826d94b08445244d1b66d7f989077c89cadc0575b71f3c908abc08d632fc2add33b5d04374ffb34d83f73a5417b0f4f163c5ba64b832a1ef3a547833e3e3c7f34c95ec313c80e5d835d47ded2bcc8f6a1d4c9963e62201aec77bf29a574eb92152f943a459ac83a6daa6f1db9238bd4afef1c75280932fa249a247b7b6b8a28e149b659fbc56e6392ac85ba525bc4b867d9b90bd36ccc13b5d1b919c7756b40b6305553c8946993b576da643bc33993eda76ada83bf48e4795395ed230df77d54fbc2635f8669361b8eecd8b34d237293c9f9d327cba5b2b4b5f547b63743d9b2ebdd2b23cbb2dfecde7bef9d2db797b8bdc4ed256e2f715fe3a9978824fbfb186dd27e6f766d53e1b2ac3bf78efb6296691787312ee832597e7aba88975dd3bc4bfbdae6da70647753b9b0374e83f6dddddddddddd6d371a7decd7d23e2fed317d66cfe4d94ec2052fb45a5421c8f6964bb55a3aa2220eec97d2444a24eb3a14b307458f06e99ce77e61587ffbb48ebdb137d6bfe6aff5bbfd6ebfd9bb5ed2ed9966844e9621c7248c88c9db6f127cb23cc5dc2d4c9f4529efb6cde6b117c593e48931ba7f533167136f2afde130e7d55d93bbde1f8b0dc7ecbeb0fbf6159bcafc95d960c3768394694f8d2771d7349106ad8d79ea1889fb05b164dfb85d1053ec2b6e0ef7863b060d8306d230b16429ed161b0ef9c9160cc35e542d2b9307c318864d9ec93379260fc602b3cee17accc56a910183c7fda2e061df76b85f887ddb3eaf1341f3bc8e2ecf5bdb25b647f0fad9a38c9cdf9ca4aabbe5e5fe4da53f1cb2046ba4cc24d9d38c8088096e72e40e8a0d2154416ee48f8f99de7159d94c1fda83c32b361a9664999f6c09b14b1719a9027f91c8f3a44aaaa44aaa32a96a2b93a30d47dffac2ee0b6566350ed74fabe51dfac831ac431281033ef62e62cafed8e398ba2b2f224a747b30a24c6e8f1251a3139616d97e454c5d167b9398ba2df62431755dec413175552711b5e2f6a2885271fb901751a02da62e8f9852edaf98ba2ff635a66e0f1953f225a6449477fb1b5111c5e2f8bda9586ae9279d3074db1e230c303cc61862788c32c8f01853a9c788030e8f510002788c0318c0632400011ee38c198f31e7c798430e8fb10005788c3ae840e331d2a8f1186becf01877788c366cdc30000e1ec0879d7b788c371ea3011e238ec7c8c3c1f77012ce30dce2d7750d5befb0c66192a3c05c0a1c32f9091e7dc50a8c59bc071cca971e2f3c542e2d2c77e5c7a787a7c88e4e0ece8d0d919a213f78b13ca83d1aac25477832c6a299a42a7144365e4daed79531f5a5c191f61db487f6e100b376edab33f7ba96aaf3b4cbaad7b2549da75d56b56eadd5aa34950604e7bc74f072eb4b24554b06ec41ae3810d1c07b419659810c5b5f6a8f368d2ccbba3e985004ca98181e36cbf6b035d0270bb656254fad16cfac973888a87a798398b22e3225a248afb7a27b59180e1e7c585f2c1e1799aa3c648ac7c3ba5832f314db525919194be65ecfcb68ced47ac03c601cd800f806b68177c0e165c9f535300dac032e00ce01673c0313000f000b00871627d7e3805358061c038601877648ae3fc89607b9be41bc43ce80435a835cff0287f406b9be84439a835c0f001cd21de4fa141c521fe47a1838a443723d0d38a442c8f501c0211d42aeaf0187b408b93e060e291272bd0d38a44ac8f5261cd22572fd0987d409b95e06be0187b4895c8fc2217522d7bbc021bd4248b310522e84d588b06aa07620d70fe4fa22f24ff3593cec9b188c6fae3c64ca52f1c8f5f50331656b6a40e01251590762ca1221e28196886aa18198b236361cc8f5b5be1a1153b62291ebc58598b238384ffc4494958598b239395bf08928ed0a31657574b0d013519d1331657776ac906b1331658b14a1429188e2a010539687470ab99eee44148ad75327d427e47aaa135123afa74bc494f59129f5d687895c434a8829fb838498ba2b4588a9cb328498ba2d371165135126afa3ff3061250999e5082d44c8f5540831755d86c4d455c9141fec20a6eecbc9eb8ad7d3998852f17a2a1351257751421584cc2309da83cce2f594063988a0947c912935a60631655532a50689a89baa2f32a59eea20531ce46a835c9fa9c032bc04ab3808975cec9d05becf30e92d7036c30c2f5e944a0000404a0a0c1834d0108000d450438c1836d860329d4e3264dc7003ca05ca0bdfb702cbf013bcc2048f2ec2264f81450fe11428f0c8398ce224987b8749aee1ee16d6307c9d05a66f81b143c0de129961064b55f3e2450d915289880d00006073939272830303064e0e0d34e4e80420003a3b35d4b05324468c223c36d8c0d36332f5f89c7e7ad8f647c665fce4fabb72c36f6041b5b8704151bdf01dc5e2a205c525bfa0fa7ef15f2f5f5ab0c02f7f8b87cd42555fe8c39aed5be0e370cbf6187f3824c9f62f60141caec8f62e7088b33d0a872eb2fd0d58060e4bd9fe84431ab2bd098736647b1b707843b68f81430164fb1a70187790ed0380c3e8836c4f030ee3906c0f03875108d93e05877108d91e00388c45c8f6251c462464fb17389c018771896c6f63c9dec33796ec41588b25fb12ecc592bd0a1c8a257b19b02896ec57e09358b23fc18f25fb114689257b130cc692bd08bf8825fb1418460c19b1648f02e3104bf61c9e114bf62458071b3cc492bd857d50402cd96398013fc4923d0903114b36524ab71b334f2099dd68643112bc0986d74b99888ae1f5720711b595208e209a32999a382a19e4dad2827853307154b9da6736a3b78f997e21a5d652108fe8b1d3c78061b8343cd276729d3a9445e658aa79afa7bae8477ffdfab5f540af81f5da77fdfa648e1019447b3d5d4594f77a3a8388ea5e698cccd6a672ef85e9bbeb5d1366f47d55f088a0598794313215336673eaa6429f691a76840da745f0f85e229a979c92631247fcc899a765965a49fb09f0d8c4c64a95008f4526f19a309154b3cf17c453272192ea5f7861341a19e94c3e94e1c9105959aad1fc0e6af19896907f5af0ac2a4794d6264971a8903e556092ea39d045365e4dae5f78eb4b7df1bc1724723298631248c4e42c768c927261112ff364a926c9aa26a97ef4d902bfe0a2e4610c39ec9bbe414157570d2917723d25324f13e521f83da439f90f65dc90ae663d79280a3d175f7851bef0bef085def7851efe42d1bf50545f26786f5fc0d90293c99db6aa79923788a4fa91aa25d7abf8c2ab64c480840f21d72156b503959058aacf6eeaab8ccb9b45f4e3d52a759eb8913ef8644c09121e3d0c122d1925c7248ed0c937892378e498b5ee3ad52a59f1649036ddd7ebf5f406ad838a83182353b7874ca9afab23b412b5f6a0f43494313d64d99c5f38e7f446178fe8edc8fa7dcec83ac0378bcc9e14d425f470e4f7d91d09dd5f1b8d7b3f6f74ef51581fb996892845098a7943d3a2f4f677c34129b5381c9de4b7c1dba41e32256bb6ef91bd2f140245db76c8ac833757d4ac4ec35d961ae634bc6958d370a6614cc397866ff31dde308915bc50de3ea42bbab2b0eb2211f65d1f5d5df76b9caf6d1a9c3b30d1a3493b30f1a3c139633871e60f15bc2ba43ce869bbfc14d2a619c4c698e88b3ced417d50154454f667584787e150fb42495bf29d2d978abacc559026b5cc9fb67933719a445794b6dcef8aa8ecf2130951deb7b8c824044dd575819fdba9cdcdf6ad5639601a24e181371f73487f641951f187bd2e6f4c9bae2054c8bd8d77331b64bb41ca14a7c11d54e2dcc89b589239ecaa4d39e6576dba42228a5e7ee620a2a68eee1787d6174a6ecef8a341392d0c0532052fa43c421a0406c8fca12bf3669e9a89489297c2b582b7852c6f9090a741561327cb4957a21a6f46dab4e966db684cec7226cbb07f482923853418d3a07ce7cc930c4124c95f17e44d13295bc8778da4f9ab8237ada51f1152e6ebcb3135fbdd9b3ec51ce4e7f54c46c664194a992cdb14f3bdf7e2d0e0a4f31788bbe3f178736e2af3de89dd8a19e3e1462a8431f2c442964f64c9812c1f8a241049f2f6634083157bdd684ca041ad4189e1d10d9a7d52154b7224cb8b3e914399678c06e7e5d6c335e7753fe3ce39ef9c1068d3e8c6cd3594b9fe0044106d8a2fb878f289dcf5280d6a0fe94a8eb0ab220f7a83889239c07c6830bb86ad1f32455e0a8928ecf74a2979a454c91479ad7f64f91ac9dd877c7d1cc64011396c1812db3150440e9b54c99410f275a944ee8ce19a7c7d6111ab1c0a1189640b6c8f79fab07ddb2f7c5d60254fbb69a0881ce224f5877f886ffc03cd994568ed02080b0b0b07585838c0c281961623a874e9201aac9f2d91cae6688d2f16a1b1b949473772a432da33c9f49b90e5d0e3618ccc98a40af22249aa7bbcb857b114c4e6c6e66c6a57b34232326260ac6ad77520d03bd03bd03bfb2e140a9d3e1bd14227a9f142a1ac572bd067ef841e3614727deb84b44d25f4ae73ba6cc3110a854077fa782ba296a6aad6b693689886f68ede2b52420a21a6d410913c0d820e7a56a2d136812448fa9cbabbbb73be297861fb085dcfa30191e0993313938c04085e2869244d2c91685eb78f226d42c133c15f24f23c9979a73745f3137c21913431470921d834a9be8848c7ab2458d2c4d2caf33c4f0621b3b3359ff65142f2d0351089d63e403e201f900fe8a012684404cda0ebe832e87bfc68e8b741d043376e3b80be50e8dd170addeb790dd6d00782a1e4a1e1288346d24c99d5a409e7900cfae2af4d05f44e26a2220ed047dfddbdfbc2b8531282d139393932116573fde49933355e48742233a2699806e8abeeddb350d32096ea7b06312546b49a990d229640d66c2ecc40067df4541251a07b2fc132923acdbb890908d43dbcb2047507e1184b5d771d5deebe786c53b1bda22192557d23796025db0def29b4a913a471b2145a878998a739bd19a482a66abacc969d068b002153bd044bae323dcd446c42ae245f971ce1459988b2e69d3cdef411ade45abd2923c2c935d6e44a5b46cacd29a381963ea0871edb04fac23b827b152446d2605963e52e08b1542f87c494fa19f52da4bda3884e724c9a06ebccf749c19369d3a86bd3a8fb507c61e3746dea55104daa972e51878647d2f058ad56abb8a990724b9a1aca2164bba9844e69644d4b22a15312922fcc41f2216466a27b7d2f1153ddeb088a53af262927a240af6f9d36795ff54a94937f566e08d3128d04d7ec91bc7ec63cf5aa49484e7292933c0473084f9906eb27056f7e39423b86f0342cb3fc69d3fd46f7daebe87e24df0e3a67be293302a2c061d4092296ea2d9602147a55258f96159f558f1f1e10918c1492ab4c8ad932a6a81c779ab9ed83402cd5cb2c67220afb6a5cdf10325b1fa0d621268b28738a4e4587b1efec9ab96968b7aabbbbbbbbbbbbbbbbbbbbbbbbbbbf15dd3249b5b68f5ca71da93011a52821098da000791db769197659f86a27677132f18ef993374c4b1883da39e7b4e6b4b229a2a27b59fcaec830764da33a32b092ed4f70c3d4dfebd5ca42844d309e3077c6131244d4e2e1bc42ae334daabf9e2712f5ccbf70d29c3cec997f2dc84458e61627df3615d1e935d1e9b7c862a4c264f6f0d1a47a1a517687cc27a29e939b3fc1d7e2a669b07e84bba6de04b74d83f522dc37b87170e7b44e08f74e91e6e99ef6e99fb9325966cb9caac9034f8c678ff9a3f6cc06bcf970c2b44b9ba60b60ec5d90eb1b03314f10e8f7d4aeb7d9b5f5d0330dd2acea0cb2b5ef091371586b3fd952fb72c3d16d595f6859d6498b64588c3082a5933df445a2d6449e265b904594f0fac8fd4c920cf156b15463624c4ca947f14e54f6c28891b9c9b1546d5511a49664632c52eb1f1053960792074c647b201c1053f6073f44548bdb3720a6ec902149c8f60c8828ecf60b8847c8f60a88a8ebf6088844c8f63ef41095c8f63c449496b23731a5dadb88a8eef6346212d95e878822b97d8e3dc8f633228abbbd000890ed71882814b7bf2195ed6544d4c8ed6d3865fb181115ba3d0d35647b181195a22725db9762caf6f8cc90ed4931650399afa8548c77a5490d19a2810000005000131500003014088583a2e170208b63756e0f14800d83b450664e9c08b42cc761c81863083180000000000000000091e1040034a8d1ccb5df0617248fd3f197d7a192cf455bf7fa0e373cca63a12d3015ba28526ffa9747bda2de4eb222fb3e631d61d35c8936c4cbf190e6102fd858bf4bb28d1779a10bb54f5d5b04063eba0641d039e6c32e6c12ce494c6fcb23ebbfd18125a1720cbd7a8f210a6039aa9e519f3c4ca5f883e9d3db5f774423d5588271f69e2972aadea53bc109584cf660c61cb66a4b057ae436882a0208cba578b1c67c32ecf47c8b03843cc690f4cc369db1150e89d41ed68f953dada21e4b4670ac93476c994fde8d21dda7aaa4072f307ab86c75f2aaf6de936aecb03381fab628341c08d59e2b9268a99d37dcc32134072cb5ff040fb87bb4963e91af0bf01cf38c7cc8169bb1d4303196d9d33d321a44af1a79803d9b0f252622d3619a1733b6f7a89d86fa833008d3b50da4fa66a960f0eb2086daee0740d4557818f534b35461105368c81bcf97367d794c7550822c318cb91b9312038695238562962a61586cca03808bf92da56bf507600a99405a2563c4dc6beacb8ee1807c0a17b41a091d6e08c091ce684f4004293306c9d57578ea37a3db301eb9c7ed673544a776dbbed29480744babbe75090cce87aec0942264cd048faa6257214bad8797ca1ad2ab1775dcfa05697dd3a7a79118fc2acc04825bea6c757560bdb0471cdd0bc013299010528ec147da3535cb2247769b8c280af948b128d676e979825d3870658af93b341ba4a92c3781a4c522d01a8d8087f8fc8ddb921a133cab43c00ed93a92035e99d470ff2f2a2814f14edf31843166f7f651536a555202753a1a30eccdd92874411f794795f1c706b608f265c04415007d1841fbb9e38d92fb888cd0db551c6456d230a9582a7b481c3c0efb2afe535b66562c9596dfbee39f6c6c17b227085abab3931ca02aa8b60a630370c5ebbd98b52ff73d7fb326563c7c0b27810a63893e970e04339089eccef52af7afd7daf76a86376555a83962c34a81f458c90fc5326323719e9657622d0d5351cb78dd45ecd7826e8c9021972b895519dedacd4aba08e0668c18d77372b1279311a8cd7392310d9f9fb27a781f09059c85d2effe9e5e7b6c602a7c579e1558ddb89243bfa1fad43e5699f5ab853cf87da9eed354d86ffe4b05a3970cdc111d34efe4980c7c1dba8352083ba166b44c4e046dc8385e292fe32cf952f6225726e641c12b5b8e3de56249c76de1a50673d7ff5de728398f1f3e279f091f7efb79d05f169d4e02fac0d9bf3ac47185ab3eb1544d8a0f39b1ce17e2fbdebe46ff298e7719753d411d935323e9f9f08e88d4a4423a4561952fe10c474b81cd347b2f35c3743d13cc1b90cfa1ebc4528e5cc8cd152350978271529d40922d466a23fea142dd4124de8912dac9e5769f46870be39f270d0ac2a5f838869b4941551879cfcb97a0dd76a8c96c70ccff057930b13aeb34b58519db17ce1f953ccaf76f069db8a41cfae3f22d952dd7f2f75a1c751dcf474bd63526cae3d3123fc146428756d3b981c3419a586c8c027b32aa788ec398be159b6a367a8878b196d46d1cdc632f6172637de549c58c0acfb64c2901e002341427c5dab800342449314fe9875088140302fa19679aef27b46adc628e9964b6892db3bd235050ed1a6ed832b399821ac7bc963950e565946203d69e7cce68b8f02ca17ab2804fa4ec48f890c4ab9fd2a879878f0ddd34f418e298337a851acd40466689cbf68c6835cafb28d85b44dc7fa478dd2c300ddc8dab00be08cf921344fe5ce6a7b3333974318de652f4469b50f06df69b86cbeb60885cff4f3efe778de345e6da2940b374181b002a0640c1971128aae6148080f067a13e682300652943de4d0be41fa3e23ddb7a1dcf5e3adacb6bbd96746fe56f306eafa06f646edca7d0632cea91fc7348f227d1cdc9cafe0ed5b70e3a521f75908c9951328444a749b2b21ed0b2c621fdc96fbee51b8fc53bef2752de906937ec1b406c87c410ba7ddfd2c631ae37f37a68a80a01b1557e620d1078ccd56fc480e841bc2c5823cc8df87935d34c4d5b50e3662fca349db9f8bb51e261e111389a1249adc3941793807b6d134f5ca8423870c55fb7168f9e59b562806b28e11483d65b82a350f83dd47b231729b69cdff8a844315d87bd6bd04c1d49ec2a47e0a87d8704cbea2fe177644aea8df4a1836636b7f39e39ddbb48d9f46eb63292a72ebd6d639278989c56463c5fc78428461867d56e65c0e81047f0ba8c03e1db8f9847acd2ddc37ea34688b02564ec5a41ba2ac209990863f1d96c2ab6fd1908ac889b3436ad6b3d1326c20185f17d114cb041a1a3ce21e6abec5b62d9c39376c4914b1cf269cf6a62d80412d04d251ecd05e15a08af4a772dbd706452db4ad87c839164af6a31a493ace432a6bfa2b0e2d75492d5ba0b88e3e907fde1ff20f39fa03f6db22d3d7e493166a8556a1d6c5c630c80c7e099bf6c2f0ffd277437a00a24c4de262e2e097f5a7e9fffa57377eed7ff11223089ddd142a2727996c68e8cac12acb30f98d86cdee316e081a6444efe61b3beca20fd7bd0aec334c48c70b0524b01c0b22d6a74115b42f1e945884e113c159479f7c0f31d20d44ef2a14958aa204e1ce289e1c4589d790141de02fdb78720a850d329c48a0cc871e9302ef465f098d509ef2be60896f00160d22f8f3adc9b1ab64d974e03bded021a5f2a23e0ff3349225b2057e1374aebbfc4c9adbf0be494d86e21e2081f96b3c66aa35f7e6bc1cc476b0bc3cf487b0a8257c2ccc3af0463085d84aa442f0e36d99fbfb9edb358c383427e750ead21772b1b39f83a5433b4bf7f926f43f2f0746dc42242228704ed6fab6324a92d8817f2f80693bdbccde3dbd99f664866a0e3e2d532c3529d9db6ddec0efa2b2e334e5945d4ac3371843ae04a76c31499062a762d8511abedcd68a90765ea61ead4c197287c152b2ae3a6e0ff021778c18c21761cd93b68f28a951bc6675261e28d8e3b6f213bbbae19dd97111b58fc2c7e96d1810dfc7517edfd0edeefed6d29f71121dd80be86c8406b04916e604354662a3ae1aa4c7cfdfc28b4853c62bbbd6929645050e3b7291fa4665e90e508fbe427069d48babd26b87ffb86a3b227439568e5a6ad873b14ea7836c272d32d6a841a7a0df2992afd1c786911b0acd4d2e4524ad6839504df685727bcf5e20467db7810793ec0d8501a2dbe2ea7fd04e7a8b943fa9b70fd299140fa4888756a4dccc7b829abd2a5c8dfe6a7002e7e2e31d8745289afae5f0edd5df00c9456d58bfde26d5e5440bfabd9a051263269562430522a1fc64415a0a9c13eaf0bf61b3dbbc9b6545d40782881deb80884903103bdf453172efcd201abfece38c7f2d53ac34eacc4e7fc2b3c1a4ec659c37efd2b1b0087e951244c6444b16363db5891469d0ea31da1e2f42a2a27eb5d6f46e6911310710a3c00cbbca8c7fdc453fb1bac50ee94a82c0311c062f612df439cbc125c142f080bacc48cf0ac64790df4f0f164f25ac218ec4453d46eb7e7b1d3fd59196e24e64ca659e1df3cbe4aa84ec2f468d89f2642fde8a967ec34a5d578a624c7b845adda992774237cd3faa564a0600d069c8d03d1d2582d5ac317fe42c86a16830f60d1970409f4a7263bba8c3514e58245ab4b4651f1bc443ebf06827e95db3d200f361281d4a60793271518f57f63e11322dd32d41d91c1d8341dd55af4990b26216a28712e7c7796bb8f4c8a52dfd90e4f7cc711c31e481aa358dc693e6b4c3aab862b14fc738534e399ca9f391e9c4426d00d7f886992e0306456796bbc4222197d69413311893b0ac7a7bcd447e46eb8c490b6ffea8e8b80950cb002e02b46e9f9c0c72e1861ac20fec96527356cba5c0e222312f17ffc1fe845f3f978552153e19fea23a889f9c92f3cc232db515be376f903517a0a51a88ce181f5de007d20a867a28e0b482067137255743a7564748371a91f306b5eb671d4433b9fae21f8c112472f4bf842daa2b09d5a43aad4afd271818bc7e83f1768e73f2c89dee4a412091d095325a62daf4856930d6a41bbd1f356874cec674daf4c8d6005e9750a3abe4289d7987ea1712e52ef05eb1bf3ac53bb8e28078f4565594b7bcac404810733d44f417fc0e81f65f669c2191740b77c32f0485b31a9eb9e634e4be7d50c2b2cae097e7cd4baa7372ee5d23fb9cee24c5c5b25338e7680ccf2f804ce043d66185ac37e8539fb2284de3fd83aa84836751e05d7f593f65157d08429394b0591c40f63faa5a21ad709a6ce2e789123a4d71a3b8a3cffb1a78c915b570f14c86a78927bf87a5075491431a542c814c17806cae723ad042956a45a3e9b070c49c977c365ae851f0008335b6f0bf8098bde8c06903051fc45c55783938adbe8b3c6bf3a616b4f47e9fc61149025a91ebcd3d102777d817a9aed4b528a95e6811ac6a4f5c89feddd42e15a278525ed3352600dcb265e7891a1c297f948b1e3e435d6b40edc64e80c08011d4300ea953d6e89677a0006ccb55ba81e96cc05024b4e73a9d01bafe41efea4d593072d4f82a99c3a3eeb88f88b03244686d9fe0df22af5243d7428b3ed35eba713af0a01e8293621679f4025513863c6a1f53adaf2de4ef8c0a0c7e60b029dbd852385608761628e673675b3298c169141ea6b033da918e726d1b70d2fde19c1490ab5c0a3e61deadd4805634059335f66729479890b5c73cd9b9d6b284152d4bccfcf5c48b55ffefee85679db51df7d2eae374d7d23ea06ac6c8c52bca1c35c1c853dd5c3a8ad6ea42bb9bc67f9295f79cb53ef76572e95fcdd9d658d8dd37de475bf83d45d68a2d2855074bb573f012d108f50234fd129e2d4f1c4b1d51800b295f9ce3e21532882581454e5ca48da00628fbae9d7c6ace9d52f21a78a90d9f889e2b21fb637fc28a22ec2804bfb643ade20e6705e4e1c7279e94938d5a37869eea4e89ed1517bb76dd292cb21580cb77fd30102ec7138086594d7d4a574a04d60a1e5d6aae80bbc6da95de58a6f7115762205eb0abaf86716bacfe1e42182c77a7dfcdb2168785da5fe04a68d109d883051e0ed1037c41508f91530a485825e36b1f36702d7e0e7c7689fb26dceffc81ccc657e35741156b636798db6791639995070e8239d4ab722330be1e8de469d4f92a3f8a07c33f72e76100254d3f4eb66daf4c474010063995dd07118519248608b00d80de66dce62d88bfb5f59b4c0767a1d1e892768636f4d17ca0c7a553c6640ba4d33bec168316ad2c34ca79e547c8911f2123b7baf5786bc425fe8fa5259262ca70759df31bf4e3ce2f685ab595ac32afe2b56ac70f4b4602bb5d538a694fbd8f066491bc7f34a9a7030cb96f436bb9946de6b6cad2a344c2474ee6d125322af76d1236c4d116472db137bd50067a39845b8766ddfec4e40c1bd9bba3c9594381039b35558067d2757ed086629fa9962ccfaed6354cf62b5e3e5a38bd80352d1e9d149cfc8e75e8b718c8c14b26b1b8ede775700872fadbd2a8becdd26218c26a5da5ddb776f8e2ba1bda7ef8eba9e586d2383d508cc01df3d6b069575f0741fedaaa4d1ef7cff83d4484ca95edeb909bdf72bc6dfb6acb40d0add29bff8ee9349dad789ede3cddf378506855ce91d1982681f42ba27cba790030ff90c313c445ba3fa9b9fbbadcb97468d4efb53308de0ea903022a6de566f7e951721f702de23fcc30b873001d9ed4cf4da3139f17479745cad78c639b6d710398257f620cd6beb5fa11a0775cccb2a3df3647bd2d95992a71a25257236c730ae88f7455f49b977995f3954cf01da8f514c1aba7a640436e9ee90e0220633e397f9f206c42507619b7fd0419a13d6c30bab5f82ea084e220a69f1681d08017808d6b2d89603025c036e05d321e917d1888502f1e0fd57668b0d0ba00d057f18a416d1d812a4eba06facc6304f4c312bcdd5eef35656a089a87a4f75dd219201219a8c2e1e4865059e74f49f61fd7c5462e56fe928f40bd156474b37452c05a920d75baedd03d94a275195c4c91bc132507fbae26882a3798a3c365ac16b8e1afac0ea91ac517dbed6b1efb07c4c85e5ed3b9274a14474358f242524115ddd23a98449444efc482a6112919340924a91f3c84948a43ba743e0020d81a7eac4f71623b17591054edb85475a63857f84d29b19a85244b5c01254c38dbe1462b42702f6b33c997c74d869df618bd6b87521ee86728d05a2e1f24b843ed8d9c919212fbb5b9d0ead2abed81316acde8ecce24f146aea38a002b7bdf9fce82d04001b9253c4e545d7fd810f00e53fd9cc81464532314d33e2272d33e04c4936da8b04c5d98a816e75c68a4f87e35dcabc5d60c5bb6810ce2d9aa8649b7b8c79e94c6432397db4b554103aa9ddeb37e22322f7f9004a6c9b9c166eff5c5d93b1f2c2f4535824f4ead2b98e50e894ec6d8c2cf0bc8a09452ff4a532a5d068684b81bfa09142b73f530a6d44b6147803192974ea31a5707368e96ca32f35f02c33d3206338b8fa1268e0624ee1560e3fa290409668b18a4001b9eabac97de05c24530ac4d6b863e3d9489e03c0a698967b710c2e030a2fee2e51b89ac9203b6c104c7f8abef9d31068f3bac40f52477e2a74fb3bfdd1511de860c1d6d37f853c6077b114a6c289fb257ba301185242d9d318bb28eda51a46117096a87ca5f81c8a532b426dca352005b7de5c174321248e6c95ba54950c8c02cd5ea2c70751e0d23cccb15edad89411bdb0851b843b940b542eb29ee719d421329fb54330c63d02e290b88b639532196384080f54101519b5e7e92f07cdc6b522c1d3f54022db1da13ff4bf1dba78930d5d4a163e5395657d54a775238a084d8816268bf2eff43fed07cbd94d6667fa4c212a2d08358969591d8c443eb01d8168dbe4e8bfb1c99684ac09d5bc02a6d2afa654906cbf8b4b4802f6f3147b5c9152bd09d89f52413ddcf4843f21c6095b01a99834355cb754e7cf6a7b4a3a8c8e912c3d7255713f8c9520087a8aa490b2d761896a5bababb6a13d48bd5e24a075b2500f3e8eb3d44bd849aa57fb9852c9b68b9b4fd03286ab882ec63cd738d00dbb00130aa31d3eb502c7fade1f8329f976570bb201a91f049fb6f7a0df3946da96caede024f56a6ad616240253bf181a047b80c4fca7c661431ed3ed7da6a7c9520fde0664510b850d16b36d4ab868c283e5d744d428d79fee10f5f43592fb933eb720594da7936101bf73c8dc7c48663610973f12ef9780d3a8acf688b021ddda28adf8c0c3dc9ac16f5dab56bedb5377a3aa32898c894e607f053d2126b18313a132f3a74299555b93616eb18fe59ba5615f0527cd95573ccb12f043e5b128a1ce80b4a242e9110fc8360e004e6f8c4454bcc7a7517c2c59958459f8b9825813a6325ca2d958942b50427b219d0d152924c76504bb915d2f1bc18e0d816d21bbc2ed5ac09574ffcb5d244e1d6fecc4c45abdd8b26291641ebecd6a812aee3cbd0642772bea3c22d04889a873c28668195e8292746db02a4bb555faf52342feadc2b5e9efa60b91676bf426aae58a706cc8cab5e12d5133e2d8fb354f46c7287cdbf0d7d78a9a150dc7dff596321aadd6e5af5fc2549647765760dadbba861176df127dc353158a7a613ec33f05bc11cffcc7eea1039c5fc4c68a4e4c35624ec1c126da85bf621261cd54f876ed9aadc1086b83a8c9bc284f61ccd1fa0beea95e866d95add9a2195483c8a6a55b58565411100af7f59bc23233e835fd7ef743e3816666226359df3697f4ed6ecb2b143f4402e06c8ff6800751fd6aeefb9a522c8b81ae7e87e2cb1a06a59fe62661628b16637ca147e706302e33b3328c17adec5d92ba432ec16f6919106cbfc13f963a2878c2a88972e39272b6f88d6d7df2b93e1af4d4f723c43dc0f3f400e58da1c618afd974c0e5c7a3c01697615ad0328651cd8eb3c114b832671af3bfbb7089974f7cea833e1dac1d2912e3f8f64df5dc5f40f563a8f02199d17780063247f29d7fa368097f6e1f711358199a8ef61bf86708a3fd768465f147fb763b1e003c5ccf93f77d6b238816745579f1b0c20e200ec3cea5eebfe841b09eb2357358feb50e1b94a09246f1d7450927b7da5215372e323319d1230c2918b1fd251c1423b0f1c917ec6fd664f5f21ed12cfaa8dfd28831a9e23c828abde68c11f5685cfb4457932ed64dc594e66b58540c682e5f9f4821acd5a209e6e7db5693a54297e4284713c4be6c88cd3f51e3d6df9c5efeb5e2f70af7117d42c5f8f5b6b5207553820da7081f696b8ea5a91396feebd26417253ae00a57ca711933daf8ba9b4b02561ebb7461ddb94de1804c339dd97b865490f30d0896bf116a0da92566a311893c7f673e28327770433d43d73017762a41f206f1f1047be68ac1c4fb1500aa69561dea8a53288e643683a92f515effbcd297f7232b04bd2ad1ddd106446dcc40f5eff012fad8a9a1738d0eb598e26d0befac089f931f862279e069a649c740fddcbb5b30ce0cd888ed3a5278c366f196acb02eeeb075be0896907ebfb2017b24bdebcc5ff9089c3afbefb83490d5329beee7c1f5227b5df07ecf97d03baebd2977d64fdc623b26943df237b0e62c96b1126e767716cbc8c8522332bb78ef63910c988919ab43e7badfa2f84c964af407b1cee4606e241b6a841ee18ea77550b50af3324be5e29bf2113910d1e87699b63d295430da14c28cde3324ea4218703e92bb0ba61006878c7a1c30f72934c88ed2a21ebb1ad77689c145299db1e77664906644ad269782fb7086fa8676db46d721c4dc879de09461d7b8c777624b1a0f7dbac4938ba618ef33e954d2b03198f6ce53ee604d30cd2aa2b65ca226588e3a79e5ad1810d148f9ea2c23787413a05d36f2792aaa0ec153980154504011801500a84490b5b4056061226c18f5d6f04ec138eea265663029c1f30c759a34adc4c65997e712fad820e864d40426198f8fc7ad8b3f3b0374282d206b602c6c90967e2fe740175de00e757930c32848417eeb9559c42bd88335225e845866a49a00945bfca6311efbc69d1cefbd26df8050a87a6dae9dcd0485c7730d29b3fa19f5f2902a31b7ad99e53d90f88aeae7b74047002eaf84d3e8c8be42e2d01be591a75ead2dbc3bd0edaaabd5983a5bcb0d2289c0965414b42ebfd6010929e36ac86957d47e1eb58a5ce85a3d4822527ea83db801bf8a6b7857736457e21c82affadc5cd125f2efd34957a20056d0aca8a21aa6d363b902ac39d4dd718ca1130116db6fd648e231ec2594b6ab58d5152b6155d30ea501285bf494cf5162a6128e565a949513ba789449ea5f2659c1d491d0fc87a8abef12e6a3d68ad0d559443161a3f1612789c76f1a7779228f03beb26622271ccc747991ca67965672f158a0f1c213d20f398aeaf808e819cd7d978358a55c84dbcb55824cef9d5439bf10124f1e03bf270738aa4056b9787b3e2fb48b44281340c07a58af7346f8393aa0550997fbcffdf2d058ab12bdc36adbf3c18c91c395cd6201d8ea88fc688703b045ecc27dd67fec11c066448b2d8b895e16d5b4eca3c4eadca385cc5b907fa31d53a6482f445cbad5b00c02ed3136c90ddd4eb92dcc3f9b2ef766d41617a90321af03d421aa2f925da74e9eaeb116641b1576290d8e96acc562b5bcf188689616eec12bb3baefbb0dc8438b36157021aa0598da38cbee9fcfeed42d5302c6347d686b085130ceea87100600c3e3ab0d8403d15ebb3d0f50665bd985d7929df9f46184d392ff1a46cba74a92860991ec128819cb3895dc54804e860af012311bc70d553af5886490b6d48e08874d39b81f0f0729f9abd76da1e743aed6c826e948aaebf15ba460b1273866e8cafb452dcd8254c82153857b44b2b70d3687aad84c3ff31873ec441a5790727bb8be870b8ed7b5b83804498287572ddea82047e82c5a193f1136f34ad6e5819546194a4222e5bc7f5441a81959ec3579a546c73d879204dd4bebd9cd8ca1710b82aa18d0754302b90d81c5c979bd2e867362cd374f291582afeb216a095cdd3010b0bb8d42249bcd1a870d1832897a7407d5c53b2107bcab5582438d3a88cc499d4c1145bb341beb9a3b8f7766338d0c87d84c9711537f075e82e4fc9f8238f482de4f17e3ea7ac51cea07caa2b0373764d126a1ada6b61dcec1906299190589ea893f26fb5cd8ca720707e0b0679380bc716efddd0565a6e186ddb1b4aa3dfd6e23c0d2ea9ad10b39226b97b601340feb12ff4a8196a985e4d8a31719e4ccc74b25619344f3f261c1c9243369b906ffb31620b71813b7c12ea23acad1936ab64a1d996567a38ce4850c45fce035440a3ba62130121921149d4090df7b0810a58eeb477c45cf87bd53d3c3b75ee2e1aa9a9f86d12e7363ccc92a5e17163ed80fe4b0168ee9838efa78d5f464a67d6a2dbab9062509ad9f36071c97d9f52c2d4f64b2e03976873cd262687f2c0af484ae3e5895f7bcd2c59d8d422678c4dfc6f803653bdc1787819fd4a54461a55f7bb661956d687808ff307622060f71c52e8a982ed5092a730d89735606144638a199d54b3bce805926fa1632fe5706a0096f32fe19638fa5b1f3ad5aba1ba0fd286918c6224f64cb26799d5ab7c1b62ba8f750208e89cc2c339591025c8733a062870c6992f833441a2b09decc4bb69f01ea980cf108b54ab2cd8e1427db0a62fb0a945587e8abf9d9fc53814e5746fcc2be921435e8c0be4b14b5695f7f0214d5655effba1335b4bafee5260a52fc9014ac98a781b994828b73a4652383f7207b0acd3c98af75ff6bb733025c3b7fa73d99eb83874b738f5cfad2cf5fbd4a11ac0cf36645f15424eb72a5f56c4a67537eed1c6dd235328b7d653412e2651a314516b942f8bd970599c06434a096161d8e7d7b8699595b34e2bb4683113d56040defab91eec9fe48ab6c76fa75f09719f4fb776633c78448418723550179696b8bc7c425f699acfbd4e28fdd0b25b925a099105a2ad478a69258cb1d4207ca458636c5f38f788603c43b8dab41201980beefdab716a79ca3089b2c59811f74838b0f906efedb9010dfe4e5bfce6592e6fa30ab3e23fd03edb2760a710e29203b1f8a46f6db3e5792830c2b5ca48926532bb8bf472b1aad30cd97b4a108b0c4de7e4362515002647145d30997b856324f99c3a13d26a523acfbaf0a155c66d0ed164a911ea895f9fe3ca5ccdb277789a5de8e0c69a95644c38efa7e1c693191dad5e9470d1c5cf6f29d4e7da1b93e83b0c05f42d9e31c9d69e0fe0eb46a30e9b2be787c83f93b7ee9190334177a969afe9b4691e74fbf65d553438e904c255fc03f69d376daa97f0b5f4499747029a8282bb4cc75594a6d14b7b6c378845b792db74fae51eb23865c12289637bacb659df770ee13b66d3e914e5477b33fe86137a38bd8fb02715ad9bdc5cc052add06507b52b6eeaf025dba87e06e6e600d73e0eecce38d745d4e2f9b005bcbe5a5635a5672e1eed568ff1aa66f5feb5037d4866108078bc2d641eb6a2868519d4a34559fd1ac074cf3dedff446be1247bb7b9ac6f34f4bd0a156dbfd20276cf8ab5b2f655e3fca9adcfd5e4492484c8443b1f8cccad4119a4c179bacf3e7ce80e5f31e2141344a01eec2e6321241f86a5db95a579519239b840a370757d9e4c96c1240ad18c3e35a7d08026b173566225c9a7e2a53a1329af6f8e35a980a363c86dc72f5ff10bdb5345c2ab2317cd23a745926b63b5908e2b1beade5f0f044e9c559a7a4de1773ca1f3c42503fa03be75335cc92c5a16bb7e485f0c64796603a7e5adc12aaeae3c7b6e2fc74e1f9800a50a03543bf5537d57dd405c1ec8bbd39b516fb6d94b96a606800616d913d859ecddd5e1b121e8d2a105acc7c4de6fe49ba57bf7af82e78c78006212a7da90e72e11d9061e95bcab8f4ccee059c4dfd5e0ebd35d44b5cd4f3149f00748911d274c9eccba41c89aecf4841360c72e5222acf297dca3196c0801edf5770fc6ac661f12999cad4616b445af6057a3eb736c135d78db5cfd4c3eb40ccac97cc652ea3ae1abacff6a63856e8c4e81705395e6892567a53c3dfb65e4f6f54661ce996e288f46eaf8bfdb6a4ba71c8f40751b78d1b6d0f9279ec3f71d686b0320e0560acf37f1ea39125376e2db45969f2f9605cc938281572fc35ae9666df9e93f4e92e9482a348372b8b1b50d7812af1e2464d7e48f40d5d4d20e8dbfc17e317377e5c2a11ba89c43ce2fcf977b92f8c562359dbf61bac485a8ce0307b5cb6b8df039db8a1d1a108816547bb880228f96a0763c0f13634b748251968838ebc608d5a1f9c594cdf3968e35866cb8c2f2b4840c4e8d147d9303c69247e8db3b3a16b17e4b78ffcc8196e734db2a44c8a62375e1a0d27be6270ae08b516369637be34f4f75abab52bfd79a1143d7eb815ce0705ef17684af10fa61179580bc0288822f8e693aea3a19f890a4be3852f4e42db883769fcc6471a3fafceb3f075836b9c0f89c6bb8cc4b02bbd33608541c9bbf98ca3bb4ec1f95ec541469e4a34867446a4f1fecb85cc8937786210a0e62acbfb2ed8d98dd87f7f370f3f898676f4aacda59b7f6ec6817cc7839cd6fffbb6f24f9c095f1d34e22d30260f77fe6c05560a115b0b0d2dae2371eb161a8797d2481c81dc05e08bc00d445ea7745327b3733c9a62b4195a796f2e6b6849886f9931681678de4c8857e9566d6f874019c97d92815652f4f9d6778ccac4c387a12f383b8672755cf9f2eeb61763185b065ac344699a66ba42e1aac5f85dfad0396e8264bbc3b816447a56a4fb6e4ce0ba1eb7f1006a30ba9e97c6a1f332746b1f3f764e6ea87c43eec2857b90345bf05f0b0a8d6e1068ffb5dd2bd26d627222520a8f25f88373e69f53304c72f583dc957b4b666f8fd118ede5eafefe51f08596ec41ef59cd60033c31729d1c106192c09f7a971dc760171e5898990a4b961dc42b690c7b230a06f5a05823bc321e7f51fd8262757dfbd9931fe04b049b59e8fbb6211ca026c05fed3c50d4dfcbc11d30294348f6606fa8ef29cfacb228323a06c5a945a1530d1e5af38cdd707b2fad43545fc63654c6a030362690b07f862da4daacfd726c4a39e7726ed3720a5cad5b1f625554b1c7771bbba92fd6b3e6b5182a1cfc3eb573c994b6a35a0509839c664b4464a1145bce9026452200de04136d52a5a32e7757c4749b3114ea41bdafb9a55a8de8d6c58ffc6236ad7b8282855223043ad9d009020c3d921563376ecfebe17771455b8be8dcd61268cb9d4846fe7d961e07f70e9365cfae7e346621a8fefed7a77bc5ed4eff1790ac108939bfe7d924efe625f750cec54c1375401e167c215dccc089505d102ea4aae2713f923464dbf294dbb2c56e77ce4d19515d0ef5aa04805c7280cb2108db6aea01c2e73b95ce84c1b54e6834c42c9f7308890b309bdbbd380cfa0444b8489039f320e0f74fe8f2f724cc870da2dc3fdab263f2acd695208fdfe8917dd67f0d0981b0eb55a4c2d484ce3a016b1e4d6fdbae9f271755f47d4392e7536c11d997910cc5e296ba487f761212854cd5666012c38aa2e0cfd7541ebf0a76cb472e64f5683009e220eb99189b7147531d24234ea4fb8113f3efea57d5d193b29394d0464fab1566dfba00eeadeeaf5048b848d08175ec944a91c731db8090dbc10692fc53592c5b7e2bb49b8f2a93a6e1e29cfd6c375c2af2ef83a9cfbdd2505257bb318149d772e2f3a103271dd78af303346beab7457b165a0572c4b9e875169dfdf7aaae6582f99134d4f5ebdd38a4dc8cddaf7e9bcd0220f207bf111c69061449b91b9a042080dcbe476b6a6f4bf3d8483b77395fc9b51d402f0bbf887dac21d8d88b023217b7bf01ab68a8bc1debe3f84a1ecf90cc0070cad783161b52ff2b204eca816620c95fb3b56ad1e258821c1eace89f1d972695bfae4224c182931f9fc5f06b11aef6031665b9b0648364eee39704d72fd8448d35c34097c1268b089ae7ac5b037a708dc22dbe8739281c53c958367223cd83fd42d2b321eca791ac1781d4319f20a82714378d750bdb4acf4bc337ec42e44b23b16e80ad0bf5323cdac9541242fe53f7a5dd0270b433845535a036ea07161878233d6ce15413e641a5b96ac0f33b11ae2b4dd092c3e082c667cf2558f2e145161c9a2729542eeab0049b65f9b00079882c338a05c899c332e10dcb1f248ae932c26e9c81905b9656ee2c4fbb894b8e20685b6c4441eb688e5dcf59a6c5d091fb14da4d40d17eed8ca5a3863e2537a2adb058b5a57a54250b972b04e543b4cd2bdb1e0ff8679925a5639cdfa7f4ac3e5bd3a14d1d8732f7410abbb928b38132376a03ee9ca9aa2545b9e52fe5ed08f86dfc690ab521293a9e7917a519c204f5314710d68543f511603295c19aeccc710a7be617390046f2d6ef94a5867959a8bc278bda84575c867c390a34a5703904694a107a8d0d27188082d1a52e1e81401d97447355c56dd1403bf3b41ee7a13c37f60d12f2e231807cba2447d3e49d9e4f412e565ea52e1f4f3bf3b7bc94d48e67af6ca8b47aef24b11dbd357dea12a7c7fe88ba402f2b2741622df6ce17a74f5eae36f98f2f69ac16976775cb1553cd435cdcda07cc3cadda536c9f2c696b8285e0832cfea1f4d23aefc220b6f10c31249f1ab79a4adecff5b1707217b62470943f5f294226ad3fcbed5b14fce7032be24ae7008054b76aca200ffc23d3d89e4d56c660cf20fefb5bc9d5a71637fa31f8df046da15a36bfc25dd792048713134f689201a1e102e146c41a5785b09a5ccb023c7e408a51c863ea1815039a34e7534c1ac38a0cd2294886c3c85d37cc872bf153118f869bfea2eb85960fbaad0ce9329a9499e24d979e5ff74b20cc276d478c6a0094e80f9169312142506d4ff3189caca116656778db13655f1a53b19528feda9e720447e8474798dec08d0cabe8c949c1b4734bbc4b4f12680d25f2b406740253034c037492a5abf5eeb200b809c066a77f9ab727085112a8bdad58352e02816f0599048a664b6b36088e1f5d51ab71a15342168bd79654c32e8544bd2246e59da24b051a75e77be4516c2816192576df77227c008d606a410d63145822cb6dbbaee25922510285f36fa60922225a17a014527773dd7d41167cb404346aa257aa2a6444a680cb9e19464433bcf91fbfcc33aae1cb521a2811c855988ae9cdc2e1e3462ce0c535d2cbb463cf003aa21b52b1ea389f8205d31a78413becb20d78e08a7261cdfa9260ea90ab3bd16d4cd7c7f49cf8dd38ecf0747dc94544eda9919fdc4efe814ee9877a98bb553d63407c02f7b10ea98f579079835e6698d9d6d00bc83c0c93b7940f86b43aff87b1032eb9eed086da70b61d13f23b3ac1eae082043c4cad356458535100216030270cfd02faeac53988ae78e706a70948fa7d6671bbe1bb4c57fcc01c394adbeb0fe583b6c8287750a50b686316f4f3d9bc68df315875bbaa1e429e183a3539c41cd1dc5a31684befb5e7d90ec4231957c05c3c265238554cf8a6ce901eb44b94fb0180b8e550dc32444535b1e4579c324a3d781d1f1073237af22bdb8214730b7421ed887b7bce4ad4c20c932852fb25cf77d2b1094c992b3d02ae5677223c7cf00f7d0bd3152da411b3e23a1d64858aee064cba147642db71a038aba4c34ba3c31795d2a66b049625a76b18a6bd700ac4e3cf1efe119a4f2e955e252bf3d3cf2c05aed6a58156a444d12fe7cff8b3bf4167283f3ebfc5c0e8c33b650bd025af4167423a5ccafe9099f3a3c4594474d2dbc8a6e049a2dfc3d92e70379c64ea780b3a22b88584c159f0c240af6696821c9b1644ba62096ae258da1ab2dd4d87da5046ca032f79f8c4c54a0d544d0d670e78ab93ff05c8eabf6bb9f9ac43e4efbc02772b70844d80099fc7925b8ffeb7af5319fb686f94842b7afb2d8ccebe934c156bf2966e9e8c11cbf421db8da6b14cb79965814aba4290eda448e4c33b8a53e41454e89f92174704e3be54b8ec6fe41b3f53a2582ca5409649c0d46561986f650b858125dcaf7671f8dc78183c8b6add5476cdd8b3526725353eb35e25a89495a4ca60fee70d858f6971c220b0e6e9c2c1902d8413ad745a15fc4938f7fd24e4889080e3cfdb8338987e400c695be3737eba7c54bd10af858e34c6367455fa01d1881a672ff106c65d5e91bc9e64937ee450593a51b47c249d0304b6b6308397ccbfc0df8a6c3b3e6b68e84741c0fc076366c8a724ed5cb460664ed3b3f76c6d7d5b7ca98918ba34aa071878c5caf1e50a5cd5818cfbc9001cbea3dcdf1ddec6af05bbdd8e665a33f746d440459e0eef50066f63569ce8ac5214fbddf5cae6238fa2ba42c198214a0b0e109d208164f65764740e7ebc4e89724fd514e3bdbcfa772196b7b4db977f47f75093b2d92b88fcb4eafb80b83171ed25c438a9af3839ccb50cd451e1835e4ecee975890dde61421317ed36a8ac6ba067ab6b19573fdcd4a6bcdc488706da95174ed26c9b5c0e4af11808fd115292ab25b25de44a22837716fd1ae22631a9a200f5a3415dc9301aca0d0981814c8a49a8384a6920cb2724169d6f2e0559a0dfdfc73ea349107ad55821562c2d90d7360ba92e223fff8848a18299173f87180fd9702c8b22899a07234f0e0853de01fc8996fdb30a875d4388085c14ee9a50800d62d116b312da84a80619e6e7ea77a17664e27033b95fa351bb21ce852a571b59122a9c8ce657943175c1117a584a9377661a35239d32ac6cbb16f3671bb72389034b65fd2e0ef33c92c6056c1933967c522bea7a0bfe8501c52e724825da13ebcee7e7b02df62adc6b632e225e401635385ecfb92cef800a4483de2dc958cd99d6f5e174b38f3828b8ed9034d8a1d84caa103e6cd0565917178b960d8975801b6d1c7c7bdb3996443b35e7455ad1a1b0d565a038e737e202275186eda550dc6a352675db9649e9b93432e7d412c8576c752171c268520103e65bc4d103cf5ef395cdffb5113edcf6fda72352d47512cd6b70a4f87bdf18744bb40f6fc3ee2633493d7e48c99e6e2ce168e374f99d9d8862e924b9388d252da6ffbb9faa12195b2cd5c20dc77604864f4c8894aa8dcd7b4c3fdf04217e292d0b3ecafbbf84174df0100a3f6c1335d7d4bf19d35d3d7c4a104a107ce92c0aff99b0d9d46889a6350f60c60264ddf6f850c78e2544fb154a67918e59f78edfd859c9f66190a4001d56df98e686c830a2304e5a39be6b1c1feb1877dc33f0c8b39f461eadabd22e2e13490c412701761a97728b84136b63165466bc63a6ec1b1cc0a550621ef4250562222a4410b4c9d2a4ef450d913f84656245227abe0d4c4cd2878f861839734b2e6b2a94f08d272c2eef2b60f695531351039aedc6c031a121807423fe6043507f383fa782aff83730fd80094dfcca0354b73186b8ed5cc8ef228898e440d2fd561b07caa4e4e03f9aa4a62f16edfc17eb4d3cdf79f43e3363bc50b7affe69a442e4fc0a8ca323439850c44cbe83f66af1844ef338bae5cf05fb4d4269ed81fd3654f317e77c53eb7afde7e9afb3431b401bf8729b1b219904aeee912854fe124c1314cc2e99b7c573db17b757e20ceefc8d0165ce8654d8133ab6a7ca3f386249587798abcaca68fd50dae8dcf25627b825e8d2c6169cf4a9f97d2b4ba02c64d8dd4410036df4271af5a7d247534728550292a8350ee02b18ea884b7113dbb9a8541a2f2faac4100d5932918696e94fd1f81b117ad6c0bd6bf4b402870f02e9ee6ed4c88836c0234db77eb62d828ba59f9182c2fee878747ee5fc67cf4f930535a242ed691c7dde6888a4674e8d136389ecd4ddda09cd848f6b86ec4892cd22fdc83912d72caa0d3a2faaa1bf975d0564b12d69049c4ebd23d1cb49d904cec9300066003f02bf83129f099d84bc25aa05e741133c6a79d1d3945cb4d0b9a1da21a57ac9ef38425062e283b2cadcb646f423a9da8f35767e68c3619fbd8016b2f0c8ad2d0c7ba9371febfeb8b700ff90c64789c7cf1621e73df46276c78e1b6a2c582cbc6bf5c13babaa4a6751c7966ffee51984bfc96286e4793ab81d832be2428e4164662642372b73325f7f264f1d1c23f523bcfaf376ffaa26c094c9a58e5471a457da72b2f1dbd340c44acaa8ee47127b0e786178aba58b69ac1c9589f56ceae624484d69ffbbd4691432a2b80b05e69e127171c69249939d75d216a43f0618af182be0005499bf346251e114a59c703c94676a9e2eb8a2bdeb01cd72661628f435db3faad57c9fe4fe203fc4a3b82169a861afb5f1f66167e7c7822580c402a7366666ac11cadda780b97ca7209217829297afa9411833c8e8871db23ae716573644b85f63f75f1ee79d1c3e361b078ecc74a4ced65d6e5773f6a98863879cb13be08c0cc3ae3464aba98ee26a53dc1f5919b8214f3ad4f2bb0f18dd7fd449cfd9ba065e5de3eee5389b873b1c930f67fd1f6a605b30cd4e6b96bb4e611abfee64ac8b59e5a996d3647b979d30faab7ee8fe9659e5fd7ba84d15a97f1c5bd4730872033d7b0771c327b63cbd10a95e9b36027ffdc279b63ee3f505de3e8dc2b5b6d6e70412f8d23046f774915766bb10fe13d4af1adfd04142e14cbfc76649a8a267dd2575469bc41dee6c8303b53dd402eb0b1425f6f38ba2d318ae80a59626c07f4d15905a18dff02f1510367d0d4a19c5fc7fabce3cfc7b1a933cb4aca36404e2b21c50aeafe595cea17175ce447be409812e0228d160203ff3144183c7d704536803bbd65fd0fcb5c48107098ee02b748159326d20dd2ac6e7315e0d1ba2bc9b47405e6a42f6bf79834331d6ce508eed57c4a62dca4bc650371d0500e9221d514615a123c55393e8e75bfac623219dcb5f5971fc6f08e9e71c44901833636a82c446481711880644481ffc18d8292f6f50877ad29c59896e95be0beb0a129d4ea0469ab5dfb42817845b7841fe0101e64eb8237667e4842caa9c952f772d1e05b7724108efb498804f687f50cc4f18f6c32513b74680eb6a1ee3cbd864fd0f88330c698bacb18a863803c81b4490971b52ae331f5feb14821c027d64b9b1de9678c229970489d781dc401a9b0b6b30822bb4de83c9dbbbce272c4386c186572b503251c3050a703bbb5f5b215f69ea73898a0a59e83fd2767ccaff0e65d2bed7922875e077dfce668f4ad4c84c1014d13c920a7a9e8324181c936c21d0c02d0edf4de20bbd9852fda1e2d06111917a859bc028ef64cc40b778d270548fe987cac58a231afe4fdbedd7ef08a83f0b292f242e1f0034949de866a5541c2379ec47150c83c24c5d67075925b887e88a89063b1bdd021b57943ab84fb565115456310df96dec8e04a639901997b54f3b0e5045d8bc22b6efd1c74de74a5584a0d83984b4f14abccb39cb619c54cf425cc43704d703896184f2b46b82f685001e6703c5af84978804e2045123b3d72128f53e4543e25e830d73663990ca3fd78c1a7e014d8288ff1cd60ce3c3d25c6596a248a0ea14a451876dd97c3b9ba7581a9d1adc1b7a3d99c6d2ce736cc992cb4081ea9893ee1b44833539afc0305a40d28208312130cc2323d60e4fe2185c118b592d43e3a888f8002e8346408813a4403c66c9da0be66148ed95f061da4d3d562e21e3339e329e5221946d404916989163102f28466accaac192fd764ab6d375ac56294552449667db02df840e747d3c293fbf959d033393acda7657004301a26951b87821b15f32c656f4c79f579858306254b4218eabe11577821a3fb1b1fe834b752b9d28c6a1bcdabc4cd5330d9675c186f95aaf79a265cc295d50b663eb2d122989436c21b127d1dc88748ced9c0138cd201d9c25ee09bcb9776781d20295b42d8275612595a5c4ceaa1be3fe7e5bf08b12bc180269e6cd34d0e329465384fcff29fe14d81c5fe231fd431088834f9cbb88949a11a3a98a50e135ca1072171e4f5938f16593055654f86efc0004b8ef08afa76c28d342392e936823bbdd023444a2f561d75a6ef66cac77d739c4c710f28c8329f986b069fe6ac0697b5625c4967199af9040ae42d7fda1b72fdaec71efa6d46cf12b7c5d6b7308baa28bf927df2dcfe66898a7f964dab1af4e5603c8629930f24bb60b300107ea5e0253c65650b5e9338278cb3a4635215de456765ea2ce3decdd0b4078f0dae91875d508eecf8514f0aa38df1e30eeb92b9ae1e683463cc6bea9f256df78641faed039a328fcdf799f7a5f52df09383837238efa6bb55bd4095ec6520caac69b046a1654bd37892e1454d86f1231d3ab6eebec1350eae8f59ebd4e4cfbad76c3ac426347df09fa0128dd54241deaa860f7c57667c7436c5f5cb06e8f871ba78f87e1dd0c68ab5643508ab1d350147d51146f5a700489a387ef63824894b3a22581fdefcbb821af191dacc9c2f6c4798f93c8f1baacd3c4e5f9098fffbecb65f61d9281f9cd1adf6a6532db7885b8937b2b084fc99827d97d5fb2e925d466ccec814d0396bea619ecf00be25b46e84a61613fd831cef37a07c20d9c87d513f7f8b70d76d8c39692ae9302666420034a061a7848d60967d8a34081e727af8862241e495f4e5345c02014e35cd06aa4c99f025c7df8acf7fb3078ea944931c5a6a3a8e9f418f24bc9569ec7d4a8c3384810ca4590344ce5ac67be02c3e90a7981821671fa26533ed88ad3a061795749b7d4c4a8444385b2f5a8c4d5734c1f733d33f0003e6b33e893babe2b717897f2ca1087822a1da3405d7d1c3e3bb2d04a6c0bb3f631e72ecca45d20c664ef7aebce8cd51b50dc7d2f0d0d9ecea63e0a7841760b5ebb4aeb819d6509e2091fd65095f4367aa224e57b81b930c9196c6a45a0968bc76b5b9567f6c740f95592b10514c75eb1cb344e3f544d538823695a5ef77a6072081a9785419e8033ac2848773f836554c4fdc3b3ba0108b44a57a1ae7da33d986145c70370dc3f119083dfae5e1c803e634c3c76ea991e73c8400a80984cb0458507860babec1afa5424a7d20b1ead4c789829f159e9b2f6f29f02a4b205941b9dd4feef79a84ca0734f92caa21da70c2c89c7f3d3d451a9a993987e26b02448b190ef7fb97ca923c88d09f53243757fde7dc3d28ba64bf7c09234dae2ee8b1e8455c089f0b9c5ad27e28f96c0923484eb1167c61084c07de25d20f8c23fe563ea0b2592ca3f6da5e933cb3659cadcca0e43000bb61b5892270fbb85ee9b1885afdaa1d45258d66790f73b8da99b173b021bb35ad9f9be5cf363655083abc5bc9ee061b65022728d5d2ba8e4512180021ec4c533ab987780f31a319d7bf8417957559e5f728b8c76782e0932c60fa07147f0e0b884b4fc8c90a642d1be427e200ef37261c09d28c8d24ca0b69bc2a2a871bf530807cca70e184711bf99296c82ed57e7c53dd7349f7bd5094ca51869195944928b682aa75cac7ef203f9dce3b0bf7eb6600cf896f274f092b73816fa05dfe358707a595cd97233b25b7e646c0e54813b36d599d0c40d3b6d51d84e505c82d43b47390a8eaa7b76dc1d4d749174d101211d71d831f6e00102ee8b5e09d251ca9c8cde158da661f8e5eaf1732773d857e975be1c916cab120fb8c9ea8fb9484a1791c5eccfcc68f2ea24ba9ed1527659d17734ea3d33c773d1859cf72112b7fdd4c2c0cc9fd58c17d7c6f580064d5292018256498448d90d0af352a7cccc9d65509c066cc573c4901d7acb0be3e09b1492453a6422e41bef7e878e90297105e5c75f664414b1915d65f0c1c62b5b58a07d899dbe4a3e55a13089994cc982f42ab14e86954cde8938defb8e052509c7d503bc59242c4ab8c0cd07050e6c557e9442bee61967392cdd1bc597dd874d353eb590ac9bf75cbbc63451dfdf070923dcd5910a69efe415e7afdfefd922a1b36e0160bad72ffa31b19bb54699fccd2203a0e73e43f4646c1349db136064f05cd3d03cc7f7e820fde690b79dcbab53113d6e44c626ad19e77c8b565e11d67f847e9e67c7a2e87b2cff20b8276ee051ff4d72a142bc46560824cb9e321b10a570d88bbcd49561e91726f441a5a0b7f0cc8e9151291287184f8b9e77c79dc7549a92fa1d6472f579812a434e0057206e8f1e16229b85880cb459eb15d974ec8f791ef90e62403361a544d2b29f905c6756e0bde369254c6fb0d83b222b5b50b2dee5c0491919af51cf5ccd3ef0af004e9b9e00da64caf87b102392751e9525c997d0ee604fbbcade439f122ffb256257a18d071538b424c4dc882f526869646412e893e5f0e2ba3fd5f636d8cb09bdf8602f27ecd507bd9cb8c723f6178f241c030a0d86675930543a4a07010f6b7b138ed7a4b5c8d0077998236149c479f6395fa56922422491f8b5fb87bcc54ae30864aba655d8d7bd8a09d071cc0be04a02a29baaa8b95d162b5489811d72b17ec408249cb59290bdf726724b99524a322a06ec05c306906a43b2eab4db6fba4b5605a62808c5691d8b0fed8d92860dfd63cabb6d406ce06cbfca8fced033a01067e357291ad9e673046b26d84e770f6f1ccfe96da8fb6876996936eef6845fda713dfd09b4e37a2de553b7cb73fde99799763e473676f17b9867df86ca7dc5dffab7ce9bd4ae075b1a8c763e54e3f770e51918d6106b8835c47a06f61d23356cd850c83e6fdc6a5f38515fa637707c7cec6f3a6786b6819fe36ba8b837a1665e10b2cf300839936581777ae388bd0deeb40139bd8d379db09fe18477e339daad9ee6a09de41c586f4dbbd5b0877fd34cf9739c404dff5af5af737a608d0c4be53c881932a03379af0d888ddf3e72fc349cf6cbc5ec6d745f6db8d08da4dda4ddeae6eb0c65cd79c96deeee623f3d88c7ecc5bd9ebeebf18e613d51ec31ecdff6c2f51a9dbfd16ebb1e58e54f7aa3f4f1afbfe91c4a51f8eebb958eef66cd77b2a24057e86ba4d4415f43887df4ba6fba288475a3a70bbe0781fde9b50b7bd30625acd8c7efa407315467c800b320bca807b12a4427389886083f41604e60546fea6b9d40a80675a903a8afb5e4cb93aad57ef95f2a02ea6b0951a942482aabbe160f5c6af66498af25c4a466757f83e6bf971737f399a64d999772fb8c766bda866055d26d03627a7f97d9efbedcf5ed47469fe9b34cd2cee5bb674f44be67bfd3190ff63654f958ca55fd2e5916fc97871f9327189a9e36a8ee4b49ddf99df2f0632f3f835ab7b4f3baddacf2f2396283cc3a12d495ddf5cef1c8b7a12ed775cdaa962d4724fb5ea1da5d45ba76bbc1d071959fbadaf41df6feb4dba0f7cc860e1ea689fa7718ede19aa1dedf85c8df8ceb96690fd7d3cbdfed056cab8af630bda1fa4cc82f91055a16f633baddea2f1377e2d9c7dee4fbd7bb746a326d6f1b10f93c0e835625ed40906d3f342bab629d69fa2c25f3a86da74d3325ecb37ff53433b3a725cbc245b3aeda773dddf5f4d3284fa9d35e90bf4eb599d30cbd81fdf59c8e1d664fd7fdaea7abe9afd74eda4fee71be71271a3720fb3c30687557fef6da13d1b4f7ed87e618279915bfc4e94c995d3376668a6d25b92237f0984b6b49968aed4ba0e5cfcf4f097c740fcb7bf182383ca13b15d5ab83a9ee5eb35a1283d6922d2af392252a565f6b8913eda6c1bc7f1aa871ae42688a8cd0a5664bea894e4f5721334fb4f8a1061dffdd92b9c6d936edb73242be00fddb7873800feb906981338b6ce71ce9e33de48c9444254298a010483990a20940486283a41a474358e2491458984ca184282a590200aa8ba1e44708c742d5fd050d256474029a3610151e78f5eed55f6ad3dd83f8b7406956d3fd25126a56dd23fdd5ca7d890f7777ef9bfe2d5aacb468286829315a25535a4a88aaa9be961221b8467d2d253f9d545f0be88baaaaaf0584455da7c26d93f95a404feaa9be16101075abaf050454f73d62f5b59234a1eeb39856922ebc555821820364ef5b49baa855bc52205b1718cdfdf7d9695b8f47922655a6be960e5124076a6a57531f8c9cce0d8f2ab5dfafefaddb40784c66ed6cf9eda3ff86719e4e8548481fbb108ada3ffd1ace6316fc5412f3d54ecb711fabb16a76bf2081c417607c3146163928a295840595dfc7408216587210540617527cac3ed6d74a124506d0dddd2174777777777777777777775f2d69327180ddeeb06177bbb77bbbb77b77b7e7f07058a06ea638ac18f0c1f5c2613077410a8399bd7849823b989d56e17f73fc1c63fcb779f767cc954accecececcc92253bb364c9ce2c59b2334b96ec4e7f80aa5336524b8d654825aca5ccb8547ece76e0dedece5743a94e351a3a4c4c8bf7907461829a9a2573ff71adf97bfcf8f1cb72f4d885addccc751cc4df340566f112be8948de7bfe78308fe76c809b6700661ecc838bec41f81e7c7077a94c69165a1672c208e3c8d5ea7a238c137fb52b234624c9a49c4f4707eeaab3a9fbafe32a7c5f6a90a9bb5924a1a576ef4b8feadf3d98e55a4c97e1c1d6793b9cdfd2f076f8fba772989d4ef5f5f6400704b081c7026b6b782bc4f7959cfe3a29dcf08092e5be720154c741cc6456bc61567cf19d712a4b8b71caf076c4f834c6cc4eaba545c238bc418f81d7050d9ca393810b3c16625815e2c7f83322adcec7106f56f11f0e6af4094ba58794954aceac087f85c23882118a50042c8ad0f2af1252e527598e9aab35b6f6bfbf47dd59ab6ab73faa4af46fc76b48539b8610ac803f7d6c13afb6b1c55c2e5f909c78619ceebc6fba8328017a364fe8d9bc1ae9cfd0b3794194387936af1ffee060ba45166676a8eaf595f143c3b492885237a98b1a280c9cceffac7ab34541b60e65fd3e55e39aeb66a873b1ab51ccf24895a0cac1b7a87d8a070185ea78ecc0d11545e3ad7fe49c931a3f15fc797381abbb4354e7b060c7824fb4bd161646bb55068196b2a3519b5b8a7a3be663f54b7facd7d5507d6a9599699123d5ff6d340666418059f05f5244227b3559ce8dfeeb91e0b0637c48d98fff986ff4337d36fd6f2b6ffd4457e474903e642a9c51e16f0f01f0533798ce2c9593a900a0f771d1c736b0b556923d86d24a0115d613594290b22255c551174248d103304147ecc00a5f02184a5c314454c40d5508e1e3fda341631c9f62c2efbcf6635d3faea53d5bdc2d8fbf7ff9f929b3337fd3a1ec71c786974cece8d1bb617b777b5721a32576f4e8dbb0bdbbbd8992b8db5710325f31ba3f776ff7f8e07befbdf7de7b910a43767f980c43860d9d9fbfd78fa163117a77d4425bb88ec5fd8a105eee2b930c74082fbfe005a14787ee0edd08477208d7b7b7802e99a5f18fa68159a5895ac5085f49bac72fafdf39106c7530fea33985577401f26a911df3de8e86d0a34377872e839691a194bda66d9bdcb8addaf42b89ecf1985af51f785d7223f781ad175f97345ad2a5c68f5b23d3896aedba20848ed2a23bf4ab053febdd32cc62e6e7fef8ed2efb40f8fa2def2e539f3ed9153920af5edd5c17ace82de373d518c7636bdeebdb318a3b74bf5a0642785d10ae4308e52f2a73d9303a7477e85ad800fe0079357ee6f0b90c116649e85906a1975ed3fc336d76f7736f5473cf5f97a372f3e3f7de7bafff22e2a78340622d3e29237db4b7c5dfe16ebb1ae310507d2d20925a4020551484690d0dd5d70a22a9050416de6017d9abf9ddedeeee5ef6225505de18c2efcf4bdb0b9d1ea92a47dedeefbb3ebc6b82b5a12368eeefee8be0a6c6d2ef7549e68b2fe67ddcbb4a0b0391a5175da5a298f23bed880eef6397ec01f6fdb523142e5f9d8f4c4531df738747f090a572f5b57880620230268dc8d2a5cff989cd4a4b650a8ad494c9733dacddd7ecaf2f61a76c3fe33a9fb76543bc5eb42145ad684c8c139fc3275e7508532c98f1b7a25aa3494d995bbbaf7bddf0d0a94b5685cea7c5c350778b07a1da29bc0da326588bf49831d4fda1c3bf2e4aa5d36d4b543c183fd2eeff11e10659813fa0c788b364831e0c1991488964de24f399767d768a4014d51af5b5806852b3d6a0136fd243cc64892c10c57e1fc2ef3668abcbeff71784f4f4db4feeb14d677af84d57c70ef3d11eaedb7718ddbffabd6e9447d2edfa4ea317ac9147fef64b79fa61dd2853589b6ed0f3cc854cd24eab317e26f371a7b3d6a236bb55d5662637f36f7321a3db4cbc64b8f91b977d3639671bb99b0bd74b4de39e73926d50ab23d47ddcbbfab3a17d36de9470cadc9da78bdf6f83c7cfdcfd33eecb046549fbeb2a5da5ab7495aedfe9abf43dcc83fdab7b6d19bd2e4d2b65d9eff086617fcdedb5ef4ebf955826db5e662b99e8b6f1ccb0dfdeb4d14ecb4ad7f36325fa2edad513472f80086282549968a9db437dad1facd4ecf46efcfb484d3e47e263d82f507cccdfc4f174a5876f438d5be2a2c7eba37f0f5758ba3aaf322faf17b66abb24cb4e8f994c587c9309fb1de2d9fe61759a2886617f2ad2d5d4d95079f6b7c77e87ff4fdfcdfca43650f0bd8b5186f6702dcd1926da81c0a79ba13d5cb1773245ecfd376e97ccac62b42b498a8a28662da4dafa4cbe98f0610a33fc1ef6c18b0f463f44a906a8afe5431866fe8d7f83bff16fbcc176c1a77bb43fc6edfd16b72d6eefb7b8bddfba1de2f1ae7163ecf82dd4d9771bddb68d8319ddb487df71e489b4dbace3cf68a25be94f1cede94aa944691b5f507a782224a66627e7efe1caf5c0a506a0be560f3e38a907a8afd5c3979abdcc2f2240d7fbda1c4f91238ffdb7dbf7be5bdac3f1d2a2cc77f139cb997f5d1bf6a69f3d7de236cae9d86146dad3357ed7d39cd11eae1102e97c789a765ca2f225659efd28643f069d73fad572316a8dd86637f59d54adcceff01a318e7605cb66592b5b24b3caa9f129d597be06b75e16e98739f859cbc8404a8229758370c6a34cdb032b4ae667c87ccba098252343913a6786899d7e6c9ff59b5e87d0cc1e52e7faed96cdc8a923ccaec7068901e7bd4934549d72378a3525526180bcbadfaa9fb9affa99fcd9ca6fb9103ecc2ecdc6aedc52f6b4abf3f9ac77f9a3e4fa2fcea76eec87fd636b1fb488805262544ccc94182833d50428a48373d9265c34d495361a33bbedd2465da484bbde24cb4e2a292a292a29a9325265a49800534cd0a413cd7efe1ebbafe61135a99d0e0ff120845b831621846f081520f19344d00e495734d12efe0c91d273e935770a4b5875ba4b3620fe19911fcc1435c3d17c87aaed00373d2e5a244264632a0952d619dff534cfe01edb6495f79d0b913839feb0cc9ba2e210ee6eaa08b3d3a0d6f5a88b62e6a073a047e5d9ef819b65aa05b353215ebe1ae6afb441b2b3a1c6eb038f59524a2022422e4af4bcb9481d15208c20100915f980072a4f073f40288150114a786104a803ccc1c713463b380223891c92e0e31d0511c697284648c21244f8e86e8e00d33a628cd6115faa106a21e1a475441276c90bb8b48e8862944a9ad23202a9658496961148c080e9d25a4117605a4ebea4925a4734691991d45ac195ccb5e4d4d470359fa9a44c20359c94cc48f698679d65d9639c1319fcc90b33e443468e2c12098dac8661d48398053d88714a237837f8f6e080fd8cf326cc725834873099cbd1c7efcfd967331fbe112441d3c89111c037b24d16ca0d4a52df6d0fd977fbe485c1b299fd7258863d969a73fe183922c6d43e7ec74753eba00ae9ef3051cd330e7fbf9473f211db1cd5f8528d2fd5582c87911817f36c084aaf587255a23ea462c1f42fc1dddd92d48ae673cfb0ab66060a3366ccf82b43a1a69630ed336c7ee9b378491d28e8901786611815c156a75de94bcfb32f9395380a4fa1418174708c250bdbc0cf2ea11293a0a021cfa979c8458c7302e348a7e2561c4a94cb372b0df950132734d8aebe7b61765f06f58b0428c848e7f84ff65ba2c9e8556a8239498531e5e3f81330171a629c136c30c1f1dd3601a2599edd23d95be1d8886de0a7bee3a30adf83803a07d76dcd618459b0f49fdd789a3772647f1689eca6eadf53357127cc82bead91ce2132b7a78ee34ff8ce876e28fdd6f8d2471b35be54d27ee67370af9ec04dd40dee31cb0657835b714435afe252345e986e3583fbc055bb77a445ac86aec637f15d4b0e06c0182d2758524328c24bd1508d3ea6c6d72a224b8dbf5de29716114665b48898d26a72a5d5648a4a0a7752e5cf5e1bb5116c2d5d5263b820a95830357935dc7e2cd222f17b610f42455a24ef2429b29497596a357152462b05417b446b0831b52302a78e5a555f6b882b5c07c4aac4f8c435538434f5501a62074c468c105f5a4280a169f5b584c0c1e644ab67b3393b2b1f8e918e55cd8ae669be66274813429cc8a0625a48c10728f0820b0d4e30459603182146972054d1f24407204c32a898d5cbc9c40c66708226c63821740d292188a431436cc1c1c72585887a05a05e52aed44b47bd98b01344ca8f2625a85ef5e2225a91d16998b5aad909b27a56aabe9610469288ecc9dd473191c4c44f7ddb51ac41a7ea1cc1745d1caf2b8a0fea75455152afeb9f7178d4a06345ab59b1cda6b6e8086182aaa3bed69017a805f4f8be1790b758b41c21f90a9b790c913eb681ec4aa02899a2a4488951178144c2ea1f7d38f7685e01f82faeb28eca8fe32180575dcc1e3b916950dc632788ce569dca31e8d40f92c4e8d93c2ccf66a5e51dbdfd87d462b257c3bcfd98586f3f66dcf038cdd869dd0d717cb71096eab3f276f477daaac663015ba124ff7b6e10e7f4e8ef78743b50a84f6f70bc96323352df420b3d5ae8b1d34287a1a18a97cce9b44e7ab8cecce4bc164c14f53a39bed3a95e80ea36355ecefeacde1fbe154e78ffb82ce078f77fefc1d2a162fa77374078e8587935fe7596837639ea099c90b7a31f07d78055a19f86bbf15c0c9b0b5c6d5019de8efe1517440773f558de0abc463d5234bedd7be0acdeffbdb8fdf09fcea9f9ae41b37ffda75fa96ab82040509ecdab3ab82040539ecdab940b0254f46c5ecd388e0b0264f46c5e65ae5b551577f5a7381a5c272bea2625c57cf59a3113a39767f3929ecdab406194fc4c23669de81631ab9fcb2fd21e31abc7cd4d0f202ccfe6697936af021d0121a550397b1fe27ffd45794cef1455b930ab33132d127f48d76c91f6c8018cd3f58000911e3d7a24414ae22549529230de0e6106a33f16ff0e6bdc7baceb670933859f67f380a4d01c7a364180580fe77a4fa166bdb3163d2c450fcbab5bd4ef71511bcb1a75d60fa788488ff954aca8585551c16095c50a0aa4ca2a2eb37b592a776fbf3a57503a074b114327af07f1770ad6c383488b09bd1dfcab2a6f87fc27b1f776481c18ed7c4c9c2cf9aab54160a705c691484f20921766213de17dde264809d074071646b5690a2c56897b8fe55de22012ec02bf681c4c6a1bfe8b83612207c530cba636855e88340e76611b88b4532a7f0791a8700eecc236fcfc8ee4db10546d5f6501dfdbe136d5399db621ba699b5689e51254575639ac90ac7058956075c3ea473546d50455192a312a26a896a052822a8c8a0c55125463ac5a2a302a24a88ea032822a49550415115462a8bea886a012822a082a2fab2c54405085a1fa81aa8bca072a30543d5021a98ca6c6ac9d5dff7e18e9f3fe011daeb2487a3464efbdf7e4a640f5452f333373e3e0a4dac2bbddfd53df8dca8b093d4ad79c5c2a2f6637a5d424149517b393aa2dbbaaa3b9af6d99ddac3fe47bfba6ccce3c6666e6ad21330607746ad0a10107746a6a543570af5169a951b55835b2844185d5da02adb8c205f00833e222ae132d4ac4295eb46a5acccc3d859da0f2434ff142dad0f16f83413280db9fdb29249654bb2194018457119cb2565c61059c822539f11a1a14b3b8d091251d9d7f3a93a05835b2840185b35c0c0d21cce80b8c0698d116980b301adca8788019bd1e60a103664443287a657ebe65866155e8fda4e4cda4ba23a9396dc46168d7d0585a6bac217c7913a646da4036e83aa8d9092a3e744c8a50a496c4ac3a9ace1a773eb58b57bcd3184c276afc2e5e511bd2a964cefa82844e1dc6486b8853d6891628f286107eca8138a53ab3ba0699849c4e15282d88a28a0e66bcba66fd5511637dd02a2b6eaa1ce5a0aaa2e6d9a8af55c58a1aeb6b55293ad25159a9611cd6634159d252e862a85dc32252fb6b64d8389a9f41e3563419c838d48a86da8faaa1b6363d505b5edbfa0e4c2a00cab8e2091d943064d425024349495370b10432c23092f349fe15bfac6fbb0963e10f15306209a02fc0a0024a193ede0e7e308610c8904244113e525be693ab03cdd7ac7e08468059228b1834a1c4c70a0f52ae34b9a225090751a0d8a218e9803e3c39a1600bb27a560ba04424401994fd94a218238a2e59a2e862eb0166eef48a719ea65bcdcd76335ae4aa59b64f5f96ed974a57a26052a3a6690fe47aed7d6ab7d4328c36d73d2e46a4f3f24ad6d569fa34378cd3cfe3cc822932267ca95df186b51419537b9f44930e9543c3365ea2529b33be105437f3a8f7a93b1c0592caa3be16145d5ea031e369bc4fe595f2baaeab64a4625cf692c69c3f839bc1321307b3d558f3e713a973c670a4a789d9bd2e1e0ddbbbacaf66a03bebed4791a537805cf34d1ccbfcdbd6d4c35586bb779b3110916106c639bda94b9dac1a27b19932c2cd0e047a388071968744ea1f9d59ecfb98c5592a09533e7cf575353bb3580de06e2d28ae64aed131937fe507fc5bfb5e303925a2d3974e6f547b5649bbed342b5fb777dfa8b795edbd7332cb5197a41603c4c40957bfc238ae85719c0be3b817c601c3385c5bcaf63abc0f29eedb90f84e3baaedf682766d527e00c873df7e14e9316354e8b2dfed791b42829a6ddfbfd16e1b12a94459c4866b1be2d9cb4c6e43ba8859282a37d50a66d754acc46d88d32e629608b65e507451f94ffb92fffa1d2eb26d659f4393bf7f2441f5b7a38b98fd4dc50afc9144d93231f765568a29aef0980001b2ecb9903dc6a25ae23defb24a89c92a2596b9b3a12e95227b35ae5a020887fdc57535f5f99d051a5685fd6e6bf6974a8939af160b8aeaacf19d765b6df9246bf6446b783b96d54269d37837d584c9cf9db6d35b25f745833fabd3157a8197961361ea6b3511a6d5849714118e8eb060693551d46a028ac622e07a7d91de17aeed1b6ec4875af480a4c26f6f1564a5c67200c951252d92633717a4dc65816fc8e4639f6d119aa09f34f8d837577a8c03b2632a26b70d06c82da05b4095b4c802aafc6c6abd187777a44320f5e9850bc4d0dc53add95d1daa7677f75be18ad785c5f57ffda5d5b0502b9a78dddc909ac117cc2c08ff6d313b0dbabb6b73bbc86076b3fa7408176ab193b71fa92ce6ea6b58da445dd7eeb5718b9444d85ff1792e7a430885dc434929a59452ca52a974c357b084a82b66f7ddecbc86c5387279198a9154057005cb12549600aaac65b2905d992764afc6df0bb4989dac3d7f65814ed100fe11998a41bf15960b9aaac1dc7f37d9d460d06944b2b7a58ca6eff0e37e4016a160219a52b3d588f899126d4c65d1420862e63221355512f3b594b862e549984eca9e0a8959a5d65202a8faa33867fbf128c3272263217eabf71b3f52fb65dbd38057973e6d859c98485a1669be9d9ca8642e5655bd7468080000040103150000281008068422b1402898288238fc14000c8a9c446a489a48435190a32808829052ca18428001000460446648c646006a27dd0a8fa0e928153b825e73a7741390c518e9194ffe5ba837b03e0e24b9fa72b36f0af811b63fc610510cd003e83e8216322f89d16c35d808d466e5ca341397e147266861b78a61792364603280f4e097022e3ea152e23562bd48a954cd392c48bea0fd965899130f3c28216a70273727d44d41f59f487eb9a82b01c17a50008d3f4ba78e0f3161abeff255adf178672ac9304091e42acaa605ebc1ef27d9d0e897814228a9d7bb5bb00c286d0461c35acdbdf1489fb73075e5c47029190156e7353ed4097407d459c308f31a010ad3f44245fedef0cd01b36f59253ccbd1aec03600d07989197302fd4e471007f77c03111e79310f7711a4c3f12f57969e849e99e2b5765990c6a23fd39ba8eff512c387cca5f18cae5a60ef51706ef3435c86505f78f5321b84291293205a98067043b075b035c2389769be98256810ba47695220edbb7d0a90c244608226bed1000b6a93715800be1fd72f83573c26e4e49d808af8861681129ed0bb06b5ec2fadc005d6edf60565860308705a43e39679ad58a0618082be60f5fa44065bd23925d1d3062a1b2f35ccb5c3438812edc3dc46df0cdbeb0649950c915a5e4a321433eec376eb42135c08a8551665f47daac312c4a0d2f46c7d6c12d1d7c29c097af084803772dc5290d9f7fea09fddf736a09f133dd12d290fc01a78af4ceb0aa8adc84f5ed2af89d795acb257b693a42bedf26892edb950e34951b14f8cd55b55b4a41d8f14b71c095d25275c58c4329d285688489413e92157190ff4c0ea06df477beb9d59b6ae4b790f000b074776677c9b2f6ae93283b090b3ecd09a99d490a5a7f441eaf6b1a966ba3bcc3e4631e065fb2d8ccaa55777f534c6e01206d9d898773455c3e84075208f3fe72c61b6c9df605d69e715112dae9bd73e547ee6a8bf4b9ad0ca6b44a53d647be71bf3affb5d30a9d3220705d3bcebb953215d326a133575a3113be17f441fa7fe2ff183d87f2d7e00fb2f69e957507a640ed90321bc18af9a6db5cc9bc69b8e0b48f576a9c8956bb3287d13de3e3bc65037de9ca4db3238fece15397b27b6ee73a4af3ccacc3547757aec6aa6eae4d202cd76bbd1380ab973ec14fbb554f28ecd6cbcc6f8ecacd1e21ed30d71d02d4da700e843b5ccc4f88ca31ea00bf6d70f3c940afa5f9798118f7cbc8b330dcdae004fc8fad796afa8f8ae8838fa38448d195128a1db1e1c493cf10752b64b8c7e01d684614703867d6b4d644167369fd2719fe594f1860d81c29f044890b66bb7726bae33b5b14cd031721f1bf474b1b5cd5f83ccd1b6082c63a2742abdbc2096942b699d553f4abff94c43b01f1c47d5b3ced30f883b8807549c90dcfffe6992a01312d0d73f85fb0668e9303403ddf98cea6ddbdaff9c437f35d0976e95ffee52ec7450014d78bf6fdd95f853c63e9038262bc54dd0572adc7e7287b827caf6838b8a315c935b2552f44d0f0944a25ad1c431fcc0d8b8e5286df15569c8d5cf34801a94534a863e52edada7c35a7eee220f73d8352c0447f2c3434abfca6fc880b4e7a0a02d23c04a8384586314601dfaaccff80148a9466656898671f56fba7153409e41414bc2acc4a506f6c6a703e872ee40244c837a3dd6dde894ee02df28fbd82e8473581388e6dc7a096b91c753da7b57841b3716d0ecc31e7185196e72811e55abc21554d773423ccae6e1668d3265a032aab0bb3bd3e0e1d14e4a3557d18e6f9970110c649befec991bd7a3c4a93a09115e4a84171561a1171934a66b116c68d9e7dbe53f54d6c31417d873612f96a3dab36456ac4bc377e973ca0eb61274ae59dffaae5d3ba2f9f3d95fd30e662a336a1f70c91c8a8f78208186fd33a23be8a874f378e3a9eada2dcb78a4779ac6060bc8e079dcd2bfd2ab272f62a1694d0dd6c1bcb298cd5eb35f9fa28532c89b88be4ee2c36103c5fce3bca27ab40c2ba127aad4edcb0004b29306b8a652d20911febc416abe51ddeaf0cba11399a7352bb9274c990953b69d4ef31ff40bde4053f7499cf43fe7fb41adfeb1ae1c0c1fef81fbe6665cd1004e3a6da30b8739ccfb25c7cdaab9430c59a693f88623a16bd4b47692725b85e56a3c061e95e3a3e2524d78482a3b7cb55ddd796658ea91598c6bb6ca67665b08d655d99ca3acc3eaeefe8b9850abf59061dd1d87e069adba13e66f1fd2d99eeed6885ced1d95928302a72383bf9a9c0ba68a14b23f8b836f53841c813445f70706723a2bea027cbc40abb8ce6a499e75f075c85256444e700091b5c5578ca4a931c08ff3339d99a54321b7a9f14b7773793f00f4792b7050e700f04b7f462f8daea08549de61932ec7d1480f23145a8f37825dcb19957196b26eb10afbb82345977dc5a3abbd44d431a560fc9139d6b9606e1a3e38ee6c286e2b378f78563098ccf14640f6d1c1a42c3b3671fb027d57cf08b3fee2f2d761e87e415f1778d59e9e9031d5949549325845565b422c956a537875eaac7895c148750f63122e76ab3303b977e5ca2d0aa3a7d9386b2c7d29d642e7ae902b83ec05e95f393aca33f6c6c89afebacf3069844f2e471e7afef7be8820bfbd4f3522c0f91f3d870347985092693cb075786c42951e63970444c3788205fdc5da936523652df278b5c725d58e93a83de4f424a72a69d53938c98e695a74be270334513f8f49581c132a09d6e79ec1704c48ccf0c627a1e02389da3165f57e65f45c93d25c315c42798068159b5df20d28450952bb2b56b3f8472df6a75a4c02b1813734aee4f2d33717f1e6dcb1e3d3ba787c58f75d7c7757c4653c8f07058181315ded0a71d4d1549db044395839bd866bf8230044be5a6738c718486f67fbd331560c4d36b4a040b19d3b893dcbb1177a4748d2466c7d101bcac59ff8a47b04d8d3b6e02605149f28eaa86dadfeac6ee624c786b0775cdcb66ec061eec114cd2bc115e6124abb6df9242a6809f12afb8a20775ce50e2b8d0ba5b42d79313c5d0b873b65318e3e99f8d0a8fac3a802453fe8b58951b80458d7ca443233d7a6851a792f7b063a6b3a250359f7d1c64f53c45b2bf553e78a9f9d018dd0b36bf75398673d28cb7e7c0ec8f49d0173a40b19f97ad1ae16b34511fa23a91c4c667ad6e955f05e566f1fe8d37fc80345a278feb1aaf006d94ee0302d1c3aacdd2aa4ccc819b97aa4adfb9f3f11295a7036d3bf022db318d485ed6b7467204dcb4d04f1904bc6b28208043d6bd8b57812ae5f7b0b827fb003983b3052332ce7251eaa1e405b3b90ab6734388d77cb9b12f6886a44a69edb1f6434e7c61e9d097cfc5923d367b74226fb7590dbcfc753b570013122fc617253ba75cbf9626ee5642590dc07710d679eb5a0ad7c3d90fb87d5b6a17a13182704e4a4d8d0c153de1aefd3352efb5962a8f40f7550f06147b06318b8a59f03f02d5b95f122d4625085d3953d16c19f0023cccc35bd230afba87c3fbd1bc54e3ee2d3e764d09cd8d882cda9d3fb5f0fd574906a62023db444c4ce47ddefebc6e042fb551fe82cb1b6d69e66b900475f103db1154ee5bc2a79937004db93fe95f539f3310a0653d35489ff333ef82a309677657cbdb853b9bfa30662e306096d3d67eb36e556eeeee107671f7ebc683b76b7370f9e8f00b7d2cd35d768bf3bf7a7ae1d29565f01a1ef234987d21b68b03aed04338b004a249343077bbdd10d8bba2520b1bee743daae43c363e7b57fb230ed3ba9abfefc9f8096577fd9b511489562120f424e6691d1cc2c231cc8bdfbe64b6adcf65e1fe6b16292d60e4bcb5c4bb8e7eba75e01219ce51b9b0f5d668d0231eb98fa60b50cbdc12c1dc1b8f15211560272679b25e97b30ac71687f502ca69119dc514a95136e2303e222d3c157f7e5cc2334bfe7135d2d48467e08fe543f8cef83b6737a45e15295b98269c949907273a97a37b84eab9badf5b1e8dac067bee6fd81525a4ca977e1b78aa9723706a8ef1f287d2079c06536230279d041ebccb148ca9901c6c4912e3d6c5ddc4428774dd0012441935c967670d48cc653efa6b0f29969e6989dbba7ea75139d11ada680162b96eec821cc5e1cdce858a52efa3e28eb7351aeada344ac2f7f73b375a9c4ea70227aee156b56d3a198d3400929b8511486a3e5296cb2c0ca676c22dd9f97b426d0583136d7a05c6f9a1b6342a92dae2cfc9a28324774cfbb51fa036fac240c7cbe611bd62046e8b0421eb45207b540101766b71ee7df125eb720e8ab5418d5fc523da6350a2945ac32c74be93746af60b506d9109477f2106bdcd4af37022b28e2950a2810e7fcfa4ee22257f5ab38fc265ebae182617d36ee1beaace846b9cb166e4208ae0eb9c87a1e2eebc633a10b0d907963a3206afa9733cb1c60cace665ead847bc8d16ecfe7c31a5fab411066963eb0beb78e017404c8a62cd9d76c39701924b59fad6152d686ff9dd2726080a263bb38fdd90a9be8353ecc0e4f2b873053dcd58fc9e6d4f74f46a787fe8f5ce709ebac7a1b43779d54cb9cf7f8118c8fb84eb2255a6f8e70cbab29ea15d57c04b5d9475747722f1d24084867fd4739bd0029774b3a49fce7e6f7cf1bab2a8ea52b8e1aad4ee7ee8aa20a9be128d4b1ca3e232e63e98b4c4bb0607212321645a23eb4d7ffcae8e5d71f6824fa217294f2420a8fbe55c057a7244c14e9b8980e1577b03887453aaca88345392ed241c51d2dca61b18e15eb68518e5991c401f827c838ba60748a51242101d1082a9a00d1098a42a0a804884a4034024521487402a2102c9a20a21310cd1690a3042e353d2d34459f5f54d178bfcf74cf915ffd61f40262c93cf3d8a39d723d7b264013a256015801b6bebe5f68d708ac3cf915d301e963635af6299742ccfc5734072c5178780d51ec08ed1e260eb365abe56d578a0967e8301d2a1467b011cf1bea3756b026b97168341d8e38d3ecb1e90a65036228fe92a4b3241cd4c8f8071091141cc686ef6b25602943f5598e1abee00ae37660a410c91807c49057b22f86eef5b2eccb2ddfe0994b63ad8e41da90e526df869517fe48c7c6e945859782ee534974c01132e5fdb05e21ab3bf8d0f70d3f6c5bb1198968ca02fd88ad3c0d1feea3d5cad785432f5aa67d65fa9a15264e985c72882c4ae1458074569fed44c2f5a09bbd0b9199198eb424cb6991c76c8036392a4daa2dee8ad717fe9f86654858460387c4b41acfd850c3a444a9552c3424d932aaa98fe2b3c7097d39d6f649bfb86c6d66fdf0c470adbf838a801a305353a4f230ea5aa5730ab4db1079dd88d20824c2935098aa8015839970b15d1955bd6a9afd66a025a4f2e1d8fc4e151c8d3ef20c20925b3c608f0161724f15cf1450c60a94a15a996f443bcc3e605713b78b4af16508daabf7687320e45f2ae28fcd64f7a4af3bcb005d0d6c25b8b5c92c56d33a128ae89fcefb540d4e9bcfd2eddc72a11e86798e1365efcdfd68a6c678e5506685f7cf04cdc9639b0f890e3f6ec172a706d7324755817c3bfb8f8b80842eb544590796e6461b6b2f75b53e871da488a8c84101e86c9b3d44337c8186935daac66a0ea2fb2d16207c07c58c2cf83c3c71d09c5191090d65644ed21c01ffb8442b843fdc1ab0d080945be8e67bc01d272dc1080905887ec7b96864ffa97db227ab7d66f5f13a0a886b2991edb3f761c7aa821ae009f58f140372d7dc77cca4071299bbaa2652beff05794d529bd9984ccefda0e721d985c830fcc7904e96539ef789164e5ee5678a05716840eb2daed3d7dbcb7f679bbe413cec8257c44bdfe36419cf9ab9018ce7378cd1a999c0eb312f927b17da0ded3e9ea7b330103d3f975f44104dad4a52c538e795a5e905b79391ec3be857c749adc6b150fc2525e71a050193b0a95abd7bd66bc7807bcd41db02cda319232f349d7a75d5ed33f927c357394f25be11294bb1fdc51ce3ade98c0e6d4611f632be2387bfe94d3d8cd3344dde8378ea1d3fee2a55f26ae4ce644ac6b77e8894874dabae41b4d95a83f801c6661e6d5889873b54f583173bf28b32222d72170d41eedcf4abd5ec94dc50fd738fabe19003e5dc952b44940233d1baff3199ba59cb8e9b61075a5b2a41811501b2c84e4bd2e4450d27469acd1f2ec5ab0dd1e51da8a3d781404332cbb4ca94623ea9582a063f5d176479a1a44d5a451468ad339e1013a6c300d088a32ed0845951f7525e3c02535d088894884f233d7904a70c43a5feb3a27b9dd3f66015e911e569ea6e01b118b779a7b7943fe2b30bb67b962c14a5cad178eca0de0d8467b80282dbb9b363989deba845af597df3fd515b02eb876a440e362a5697f7d3ea5e917379d087fb5bc3885d3d04d13338976f5ceb19a45b25e55d16eb35c1e4f55c02e639678bfc5887c27ca13e1db8c6059953430e0019f8593641d18e5e30368f6f1432fab34c4161930274a974b77f3e26c4444a61cb62cb82b47a364e040c8e8ef7f05f3a95d030bbe49412dd7c29109193cbcc878c3a416f0b224c3b9b448ded9fa1fdfb14a7135998dd342b959d351137d592e0abc7f5ebcd36fa82b8a2e02d86529378887fc60e83c0d4d3e27f39b38f0a912349da44f102c2a1ecd002da29c879e2adc56a9dc9db57e0211fd2c233f8e8e43227e93b55b290968129be7b78566f6a9e273f8800290dba3564b47aca1983bda86aef8870b68fce19b6e196ca99061117c23599c981c1364a7f43cd455f45bcf2c79ec3d02f6609b431caff9ca771bf10d8ec0f4aff7ab97a0a43ef7de7c39591ab18c4826ca8fe0327c431a72741fcd353a2af4c2b8a32ea934c4ff21c307e5c2c1c33e5459188fcaabd1f6b2c2721acf651678cd628f0cbaeb6ce4236b3810c9cda99002e8dc713fef24ec3a6d871b476153fa0d61961fe573af9effb0f6f5d6082969b2f5dca789010ba987734f8ce19f6b418141c07266612e0f7144aefb9f4e01229f2ccc75a460bac6d9a9b5b8ce5895fe9523384edf3e6aba8e480fe01e9fbb2180204105246137d51134e10fd0aca89c1acb34b862f7c91aa88ee398c70e411644d51d7fce42c9cc881916478c2f94209af54132210cf4b165e98188b6c7943870b777acc7a94442289836fc752ff8bb54055e12aea47740360858b9d178ef5ce1e6244b56e4042b565a4a5a0eb788bca656103820ee25458b429240d224d5ce3a34a7510491bedd49d11e6d8c964bcfd6f4565017b54d842cb3553871a609c9cf17ae4b6fc63ad4a61e5c0a2e904e7cde3296707988722435d7a3248a206313804a1f5c3926d030afba5bf74b002805db9aa2f869689ced625bc650c4c19c9b80790eebd01fd32874f2c74af32cf700905e9a23c21e8d1ed9a7a6db6c7cc57ee4c72b3827bdd59b7b5cf6a175be7360f9bb3755c5a0a0f56e67287328cbf59db3ddd7348de636a515888f76dbe20277187b30e1c336fe90c5a0c71d2fda0fbbead2bcc31c447692ac1efebb3026de322c690e6fdf8e95a1f4d77d4568becea591c85dbd3c2730c3ba5b03e3109c6d84ebc6df9a488c99b52f2d68a41b706e6f76e66f0e420f9084f223f3b57e46261c62b491770499a90e2e79c0f3c5f862c896b3f6a2ebeede1ce9185736a1f106ed851bdd1c949712f245dc77772ba4aac1e84bf084d0aefc961810a9b595443121f34da8f97c5e38272825398e4604a3dccd6120f40f3769c38b5ef99aec260bf2ca7eb3f22b5f7f895189d87f41cfb012bce070ca735a12ba695b1a48fa7ca673a712b84ab020956fb12feb174982085e2030d985aadc045fb4b314dfea42c4c9027a9a4e78473775851daf6cf712ee0a621e477391794ceebb680efbd74e9f349059d8b8a301dd8cbec1fe9fd5145ec88e3eac225c61957d3769e805c44e5460c154cb5ea3259ce91c19e3078fdcbe7e61aad090940c46aa62d0da4cbc285acb6db93557e5fc87549aa4558814251ac248af78f1fb2b246e11651a9251ce9bfdc98133ab40a6e3b6059ff9c9c7b31ff36ecd96de0a2cc1359c121e8001e581cf81f5c3061fefebd050f586f59a0405c611702748fb467329a460a85a4171bea0b11907e652cf46c8facd95d6e8df2d53db71ae2db6d4e1af3b3abdc1ae4af6b8e1ac6b7cb9c34e6b34bb99946091fd04f1047ba5ef51f457959a0f3d9554e8de4af7b8e1ae2dbdddc34e4b3abdc1ae557d75c35c6b7dbdc69c8efeb9273046971ce4d99b80496061433539d5c10a9ecf6206ac61276436496e5ec2162b6e5ec40d4ac25ec43cc0ccb0dbb1771332e65271d88e09646110afa9db7459d6cbf81c85773603753aed8426d50c8aaccbebbb145bed0dbfa69f54163f652827e93886042f0d10b53e3275b6e6e5b6d4be8a9541860f7e10c42ece52ee2503d067234a13868c591b9a4f8f0b34f33d1ae67c9b3a0af9f0e004b57b02a3817754ed2de9f96f1e779c14eaf8fe9800a85bdc1473b1bc9844681763be878fe95884a97d48bd82b4203c3ae103973ae82ba2655ed42b1371497c29eabcdd7f0bb5ee3b29e1b68195e56600e405093d10e8f7e07b99337c2860a124e47219bfd233fc5e514c68b0c70f73dc92ae26f3f91c1e76849c4ea42004071a17b21809e3f9e63e3e0e995d66d3949b6fdc960899b719de195cad83fbf29884024d8e069786728aa8a43909eb9b2ddedc67858111ae4efbaa7695a8042506af8bf927ee69a94b70b2548f3795adfb7ab0dce8aec4954425e5f01d9b2bae3a45dad24e39ea568cb6cd68ad09456049577fdf3c21dea07d9ecfa7a3e99012fd14d40d306051572b613f83d1f1d673a5403bb16396adb4b5380eff0f77cfc24d7b83dd6d8061f3d4696562f5545cd32270303c9a7f7236b4c44aedc1ed42ff1e10bd00116577f9f3cbc2ca549d81ad38708642f33a9069509a7cfe56abbc52c47d4889269803dd88068dfef32a543bd23b60f5b173d52d39acc0f1f05d4f0e28c69ca151d8e132aa551bad004bacf4607222aa0fc1458df9d7f088aa5656dea0a5512a32433a48526b747db39ae12f586415af5cb4c48c8ff145ca0beb7a7e2d07d6842dfe41bd7e86b7599a555000f8c058199ce04b0e2c02a1d1773b4f6532c5ac7685123d85d57a8cb844d8013c8ec2bd9b428641123083340c53d536b6c809054089811eca3d62e32a3cff86144eb173f00b8883f18daf29a1b5c8355fc27120e1a79366586c6936da15bde1a2cf4ff30f9e7323154a89c445b8335f1e6c5d46002b879b4c2a6674ab947cd19611467593cec71ad815721fe1d58c3ac3e033d4adb17ee9895641afbbbbe7b4aa10e81f923811023ddeb861620438547cc5da80cdfc83e7c562df0b41459539f3ab015b537ff03c53d595a815dab722e8f59ec2d18228f53e72bb99c7e39106c162bf102c171450751149695c94be85074dc3be0279010a6c7db2f078f67a17d01ffdc5f8e163b6d208140804edfb523e14830a1cc773d8edc2fc7fb67a999d1d20bbc4ae6de69a67b373dd5127f39da3aba76613690f67dc38be090fd058b802f4b98968418e8dd8e8c7b36b0f0dba794d8a67f8fa245a17d03abee539994549aa24d92716bcb107e6214b9b5360955dffe72d40afe0f84c9dedb4bcf158dbaeca2895e2f7f166a252c2e215b1e02ad3cf11cc03c7ce343ac854fe0f61811105b43a71e470fa53fc3c6edd7e1ef20d148c90df9fa69d4512026887c9fc8cce5a3bdcaad8c3d93944b5dd9c44e0dfd4ec928447d4b900ed20803cc219d3279d8028d9933fa7d23a6dd8dcfe30143aef5326e19e649fc9688fcf67426ca11599d280bcc51e8d9f13c1dc37a3b43553f43f15bc3485b608e660a3eed32b217e5d19a69493d129230d94d78b62407e698999d08b4181e156f7d5c551ac998cd5097ddbe1f3ee8f3189e84e1babc0158f386f7751b49d60765fd22927c7c57b81f2f7548648c73638acb9ca989cc5d09ade195067357ba873f1252f3e142b214dcf86476de6062887e27135711e6f3c75142439d9dd79c539902e21ebde85d56b5aace2eed534283debbffdb7983a8ceb313f2c6830434f8944c04b75c9663fb86126bdd62466f685a534872cc2a15dccf3a5952f6b95b687cbc1ef80a373b9d81445305c58ccc9ad8cac378411a04e92bdcb94ca19509150a2da33721507cb0df95212707de55c7b4369d0179666e6759382c349843564a2ccccde904d9ac66a11fac1fa0393711e548d14a1ba27fad8b0098ae02eef0aa7eb4969aeb93901f1c70722cffd97fc5b424e638af52f6919e11a5e469275a08c0554148cd32260f921ac58236db74f533226e92477f2d7a3c7d4346b93452122d70721484223fbe40245d3f39c02ab42512dc400fa9f37375f0cdc397825228da004e8edde7b28fe0a6af4e2b93500127c7ebcd661892ba945f214ef2258efda8a1836a242cf731318b67b0e218619f508d0cedfc993a402214723839b647d6c6b0583562d8a13bb77d25d64a37e33839d0c5ffe240f405c734a2800e1ae526b853d7ec9163f0ce88e52ad55c99e1484609f89a8eb164c220120c6bc90a3447dd0972a7ecf373b051eee291e7e4a86e1f29c8dda3df05747ebaf4aa491c967dbc57e45d3a566d3026bd202a602eba8c65a9c72af4f23b5271193a0a46ae6b53721d30e65dde09974e8ec565da08edd5470d268883707493220fc57da90c5038437d35f65db849f627568e27671220bed011146f3d044fd1619ad8c0d00977f4a45b3930794f4e0587b510f896a9ac96d67fab7d650dea804a0d2e077de0ad1c4b87fbe08794e7b4650be0d4eb5478c9a90b5b78b6cc1bf9736472c8215bfc7b338e77687e0d7f743200243198e69e4015fe18759a8d3146d93b10ff6766412b47c5048e6a790ce258bfd026988028ce0ed4be209c3350c95f59e2502615a99986b16ffe0b61d5ff0a49580eb9f7ce55b01cb8712ef3d6337c388dd2c85caf40288fd616fab6365dc8ce6678c91e2a35163dba8dcc428869083bcbef98356658af50138b3546887b478ef05ac097f95560588ed7306180b12e9e6528c2b31c540fce7070c741a06b3121b2fdfacaf0e992419b991ae81d6faf018f2a5864a12f8d6f77ba72e04a6f0870a88a764f1d22ac244a6093fd64214c0ca7e1524a75f4d3a25cd3aa56c5de0f89669584039a21b9e8131df476204e3f842fb4b3c130e10d30e317c34d3da5fc6283c8e48098330024212d7e75212f39f622773173b2b4c605fa4d399d6fdadf124e714272eadb2511dd275cc34db4f8cc849269d7e03966b7c89bbfe8d88ebc79a647c753619f3bbc24c84a2bb1518d2b72057035ccc66f4952bf69294c345e92dc7324bc3efc7b2e5ad313ebc5997513aadeb4e473eddda433bb0c49e655a9dea84b0f13e7cbfa5cd8beda62df87399a8a39b87c4b32509e09a80dfeda29812aa147d2310778779af81bb94b82992edf45af6dbc6554d3553d9cc3393e12d0d564762d739e13bb8a683e7021cc41fb6f1b3367bad083a2e9c1ed4ceaebbbc34098bb2e8248519753a444ed3c2fd5962943cc52986718514c3fc883c63b82671f1cede8d141ab50fa6625591de294a46be8381a472311f251d67045018bda6f68b6966fbd3f396c42bbf9e11151aa45544cf0310ef2005696d0fdf196136a0dd2251baf64b02db2ff599bad4cd7c44b1d9740ade898dd6ca32b794ad669d6340335137f12a38c0e2dba3387e0280a8457e5c51b95375c467deaa07e84c4d1aa52c499324db4bd63fd80e64ce6e64c548428fc5ab4b38318c586cf9900f651751caa0aa2ed17cbf624e3519143102150d895fe44ba5e91350bf8f28de580d7f698a2e19a5ae182eac614669ffbb194ab30cae568b35045d097a1008fbb59a87843635e7daaf6219ebd54fd53a8c2c4e14159faffd9f3477a966085ca4ac8317aea0ec62aa0620758dcf6b601449c0a189ce626342a0b9520705dfcd8c7bf62f3048f895d65dba41befe4dc12e5e86ce810fa38aaeaf48f5307f2155d202ac3cfe82162b73a5e9032816613fc1d1ad70bfa8cbe542d9460a98cb66b3d43d2163409f5f6754ef33715c4b8237258036ffa6d6de39cdc36950905d3b20c7f531c37351360c53bc20fc632afec7f9088cbccc4ba51db00167e02eaafd0a52d86339177db9451622543c5daf9d698a056684da92b14abe5df44368d02a57802973f9e4d92294283c74f03c0f9559e2a5af28571167ebcfe1565210131a0946e029e5f32adcd854d0a97f5d1674b5b5ce6c2ceb00c33b132edcc6ef509b6a8da134123883fea84806a688d8b3cd0397dea32cf5435ae8f800a3885a810fe24724f46475cee233203971481587e36f552ed60141303ff3aa1932880d4d161a54f784fcce13d9cf3fa83e64613ff3ce0a11a9e070a663152c3508e1240b58b01be686f29fd4312e111af1d7431f3a4d482623c4501274aede06e82a0cc1a342820fb89b4abe6971ec3a43cae8df00a3a13a49961618c96d271100d221348bf5b5592ab74c5191559b83db97464ac0b25fdf18d2b8774989bb11bf4fb49d6606e5b91f7a2a511ae7f86f574809ca66a18f9a88d83e62ba06ee1da98c7103e12dbc44141d52ecdb01350dcc018bf5d06d537760e44f78bfb633f0553cd54755b0348c69a749f21c586eaa1981132f34c01a6179c5cc13d2fb3bbce78f8584de7e17f5fe8b64074122407ae91dd5505784379053d0d4add2243cc4b4819dcaa9a21de54a16e95b3506c18b7920f06e3ccea29b503dcf9c786e7bab3e4dce53f409e2d28fc99176c6ce106909c65ca0accfeb1e6094758656fa2d278afc2382fccdca123633c95dd52e00f11226642a87dfbf79204d2e5e6391f842acc3317bcb5cc22a494b7932d35e05c5cf9053ff3eb1c1842e3e7e729921dc93d9489085d28ca884957eb094a121441895e9480529eae9af29d2797785a9a3b94744335ea9a81b5f1b9c52eb01172cbcc0aec077a18544962d86bf1e08071acfc45b37ff5c44e278c5ccae16e310a829e2107e64b44c807f680aeee29fe0e954ced498e3349b1b3c9ebd12a372d6df0d4f797c849d819c899d7b2161e3ba0fc2d704c3a30ef9e39a931cbfd1efa01c3481fe4dc133decf54c07ee805b1d3cef7ea7853e029a97348f4eba2e501516a581d60b03e2ed24c4c6aa4a6642566b65dab43a88d2db89ebae0322da1acc7d4d6f868c3f72154ca7ca3818c18639007a125dc2b480f244e3d95c3a0b66dded3aa160261ba128d112ed30db63d8b0a1567623ff7ae4481eb98947fe62c1a06d38a3c9158581edd710ada087cf046b8fb6e3a3813e5aeb6f421fa26e21274a4905ca8ffff418c9305136a3c76882c0e3c6982ba9c3f89e0dd12c42b810cdf179238f7e493974dba71786b2ec0614ce7a7f683e4d9a09e2ce346a3fd65932755beff308c6946b68f127b8ee491ee85453ab0e26e093c88caf6956f372ff8c029bd41641e786e1caf836b2886fa10a93fe5119998a235e29278ed5fac20d2243c68173c8288da012abd29f59c7d32d341f9352ec58e6a4d1e40847e80f2c7b50406200e36ffed8ac8c50fa8e99dfc70ab3db6743c0b6e1a88d556d555fbf4373e28a62236d13cff6d049adc3e5fd943417bb9eef5258d330a291c033a9ddf7172a8e5831fe3579ecc9a1a66ef26ba1f14c97a8caa3132ab93e1b60c9674c9cb9e96c17db69d88a6f930f60fd72c8f1b6e3b507a20172c6d4c26063682b21d8771a9b07a00cd206a1d06f6e4eacbce8940d189820d3eeeebdfac86ecbcd5497f17f4f0067cc59a085e8639f1e23f52e742c139cb81cea6eab3ddbc02a7ed5a43a86eef6252f5f503e5c294aa71842e25af21503d96c0e872b1c9268f71e80e13cf5c910d872d668113f8df1c68e53adabf1d00bb4ead22869d8014185b45e991d318702d082937d02730414c9c53f846c51590701cf965d60cd53209ba3eea8df203bfb5c3f3efdfa3040c31053dffa179b13d63556b65048a30389cce4e8fd58a79089e710b00b9317905a6e04446f9937678cd49a4d8dc80adc52441cc9d03c878aa03f126a0a54600e5b13000087e3d2a641caf12cc940bbd351850ba970c533f047889301a01fc925be32876779b77e0409452519eaff80bfe3f7a45bd091bf328f736c32b678695f824bc20c139d8182adb1cf39182a6e2ee58b091ab74229201f43274a2b1db03009f17505ddcc53136d9c22539157a6a43b5b852a1e8fb2750bbf5fd36e5ac8a420d021eed650a82a70e36cb57dd3c6b36c23b985876a1bb37a4eea16f499f38bedb59eba240bcc36ca14035a792ca73417ca08dce0d5749e22b02590b923980cc80d3f8c164df8a74be5b0c8829b402b5dc673687da82726e93ecf68530e19951d723aa09de68e754c839ffc945bf36878141c42c620d36229b1222dd764d58163caa0833c90ddf6fa778a5f6b75da63a8b3c9a01c5f22bc86e280c3bc3d515ec285265f05a3840a02f0ea7c04976d8cebb242a05f1e4ad41cbf5b210cc8453b34e7ec0e0a6b43e704fa22045ec7dd1264eb7fe26db5c72e6d9b187a951475f77a2bc7650262d395bcc2f8b256fd6d6cf19255650e632f0f35546a8bf24afbdecb859198bfec414f3559dee0092e8cf7b8205206958eb312a20a267d83ec088b60794d20b9957aeca89b6a60d75093011d132174b967aa4e964beb2864341056540f2344e5cdcd0dae3464b89948ef1fee81eceaf925e2f407c79d52fb968eb603a05d88396910b9fff4d696fec077373df4a179293b57341e29c09a146fe1af6cf7f76b703b84db8b2ddcdc2a12ffb26e32ae5cf3aa8b1958a36881fbede75b67b6aaf496bda0029a590fece289dcb0158ca33810bfe0be5c193c895a922b6c23c8cace3f9ca48bfb426e3542415ef34dc413a548899341a72b5e369222703230f6f29e85bebdc1954829f08c8e79ced9fa79ace3460c6990690ee42fa3a2bd0be2f5788febfae0d1ec98dfb08620da6b9cd4d8f4d7cbf24ac4d51504ac432aebb250f097908c56523b00414f16dd02fe866f23db0d122c22466addbc6e6f7f4df80a247af5866c403f1a2244e43c02f24576649930fd236fe88014326923ee13505c26e235c5a13858523b7e0ab2429012871fcd0d2497ddd185c698699c079f2494699591c94546de177871a1113de5acb7acf1820f2b1405c55222519b9bf8895ee115d7987cbc5a3575549e60c895df29c9e47d65f45fa28c488eddd548fc70aa71019049c2143b8e1d94c5f6144f8d25f20e273ba65aee96dfe22c0f48c520aa0de4752a59512aff40d10aed2f67a9e394ec5cbed50ba7afeefb04a309929b20be5bf6243d7106e1056708df27334d3908318cd2fc78ab13d1b81c7e146e270d3ea81dd070b8aa43dc4e3646a09652e2c7a6efe0f33e5d007270f48d989f71a9d8b6c9395c32726b61656a5fcfc45cc09b2dcd0a09fbf270db9d8d75a0a2e83267667aaf1abaeea83f87a0de3a9ffde235be8e386c22eac5ef828cefa0e35163af5e425d2acc3b37b1d191a7d51ebb25c5ac0f06eb45cec4d7375b635c0fcb45c041233cae4442010b85364a10e1afbd474425088b0053f1f6c41674141dad9b32b77c2b8450f818142a6b2dd05b5f4d4884dacb6212c2de53f0d17b0585eafb3432ce130e63d2f9ccc7d1bb7a55681f88fea3cdec4037e475bab0ddccc33d9da2c69dd90c5d111103a243f127121b1d30f5fbd61ecb145e045361dd0846b36537cb7358924b8219fae86c8290fc75fe5e294963c20f2530d7dacaf76636897117ea513ad657a105b09ed885a0c4b6c548fb4095705f2448c45809f3fd2120111913648930134d690bf81cf725d25fc4581aa4519ab9f2db89bd07bfc39e951fab8f7a520fb34c458bca54560013979aff1e1fdc6bccc5bc2fbd3024e55e96707ff38b20e1d671c88bcfcd344a3428edfc51024253da27aa3749045158d205e71eccc5a43a415dafde9f0c54eede6a7730836dbac1a30d199aebb4638d5faa6bece9a53d17320b175d39128b970da288b06f4a9b1d1ac3af1208cd2d33a07bd8f4130da94a56e737809194548c7c2f73e6053f3acf13adfaf90dd779c3002d1950dc33018181f1dc55f28a70d4b986f50b660764663e5370354ef68108e89afb45b51eaf8a3c914f9af614361cea625e7c87d90b8bf823b697488b2efca8cfcc719f08174826af5ca2b1f0d07aaa9ac1db1e6b0109d3751e379543197d4e0e71795a988b90817db33df11f24bb8392d4a69ea09cf9028921b027e8e905ba595d585bce5df961a4584f80e123e68f39c53200bacaa1f6cc0d5e426e4f0384abee57efa4acb29ec71bc8eabd18c472e96d13e4d81fbd87cd30403bb58306e1055441deac99a941291dea037641dc1352cfa642d6890b9dd4fc5b2be7ffd23040485c87bc8fad6ab9a8d7cab04e3d5d4873b1c3193186eed6a872a09f620f6a3d1cfe1a036eb8b657b56fd45908334223246d8ab7ca62bb93a1db176582c3681ce7a7c5ff2d9beaee45426dd8232f3a41aaacc0f0a247fee63a4af280490d69aee5ce326d7c99deea6ef37631d63011755c00fdac3fd7227f7f49ac6f3431acc436e88a168423258d7eed8c4b6756ecd14594d36ce2a4448228df0acf24d39ccc85916f495578f51fea44e047e766bce0e03a8ff29ceea2360c5becc7bafce75775860137bcd321610c6ec208fa6b17f7b157c0c7df72c4692ebb12c571bb005fddb72bf9102aa0508dc137dbaa8c3cb15bebdc2eb13c4dc92e46e115593365842c7cbbaf9145418aa225d7c21dd7215eea813c488393d35ae7a09a9be281e2a3c48f059cd2708e8916f4f5345c9a859420a531c82b464d0aa384a291a379b7297fd29b5339da2cf86bae4c00ac634dc128de9c798a7846deb42b5e777fe9586b4a94aae792873c934dedf3a037a84de164e762a6dc54dc389502afea7448a75278ff972bdfe541577d23868ed75a57212849d037823521bd6d0b27995a048385ee343d6ba1b35cfc21cda83eec793612004d3e14723bafe5c142a410ed84ced8424fe8cef44a858884024ff2b48f486cf4be862dc8c5fd1511ca0d932543797bbf828dfd1d663d14fbaded79a31385a78c8072b95b018ac6ac0911962a1c8a528ff6ee8d958ef08efb3cf12ee1e258705e4a96c89ba8114d543c0c6be50126eaebc6d8623953c21c3b45e94d265397e6b71503fe25710ce6f970814c181d16e63ff8d9f56546af78e70bcebfd3e0db1017e2b1b6e8de06c7b9a86845d0d220c7b50ca75d4ce913d12d5a7178b6957d0bea3852dc887e93f622cc079689d46a48fe749d86f05f0667e84356c748f6380b88e660896607167cc7997ccac8df5a01f4ba1a0ca7a237a3222687c2da36dc1a6eab6141c5ad05665f56a438826ce10e4965eb0417867833e8591bd87e02dc5b6c655deb327c378a3720c2db12a38fa0027e772648a3d45b72e4e989cf02d881b9d20f0a6d49c18c4c2a49634991f4cc7911fc659f62e96fc735d8a40e528bd0332ce2e80267baa995903cb5159f81f4ba19a834d945651273102b8505485258bec1033d74e103546ac604b49215aa968a6e2d036f0e24236d70daec99aae68254d679e02fe6987ea56b8853ca84d2fdd3168de7dc578e1ae09ea6b77803354e2b2bdc663eb7841c9315936e7e1e53eb75911fd1d2450c5f1e82cda85d8adc08e7c4a2fa305ee825d8bdea16eba0fb29c09b8d15550633c4c9e96f29937b8751c250fab94b8a0bcace814b6f4a1d7c65302ce458ade6beee837ceafaf102e50140d6c3b45b7c533453c3a67e443ab019b5fda71a0273f53110f3b73761dd6531d1167b6c1d920691f55969065f60533117bd6db78805d63eb1a3bd4940844a82d999c39e572012dd35f8be246c665c79cfa0828ad97ccd1ce17f995976b7316d3dae4025661347938eb32996dd89b16c61225281caaf34dcc4dff4c82b06560ab631b0b6d5143e88cd4e4a1116fb882de784c8e5e2a077617904b28cdfc848fdd1e244e805759b42137ba487928c1ca5e230285a76e355320b24d4c49293685365a29ab7ab08199d72e7b86432f36a4d93259c988037b629ea0c794608e69d6e3c53aaec713e473d9fda820aac6ec058a3a3d3cd05211ba530becb7dd8d1aea29bc1b9bd2282b34dce80ae873efd7806326393c71f593d112da19a0a41dbef7c352c81d366dabf5e5da4f79ab937ba7cbeec20f159144430b3d584e713abeb6be1cc9c507a37c9a2ddbb87f58efcf253d971d95570c525b3ad31d063fffbe91d6bb8a9036c42cba73bf5bc1e78faf113d598eb4fa6670d9ff5847fd0123e19dfdf3797b679d49e8ba0e9624e1970ca53d0e9c5aba46a163bbdde38e9d19798c991c32f7ba2bf6ac65f239a5af56716d6244f67775075f560be880c242579396dc818ba49ecc5be74511e509363ea060fa0d6ecad959ff982534250965a5beec0d57c06de4209019d08c19b609bf399665298779b9f91cd5f2452a6d928e28fdf2708202615392b03371674a6cb3fc854209362027e94d4a56d7035c0d735d9f2d781b7a13ff0871c55e8ded8c81eced5282755b2abbca85ab591cd117a5df813d3599d7ab3074c9d99576d2f696a1582ffc2633262afe7535741811a02ed205165922a2e24504196ab26b1d9af8ec0d542eb3dde9075bd90c54f230e887da690b3c053ad14cf0bcff6b3d3805d2cab4aed005670dd1aaa6e82a411144ba22683b8b6b65db8191366ff5139ec6238285a13f1309172783a7c88e1d2a28057b1506916e20005cb910b376238a801dd1d7f1e32714276fa1ea8e8b2f1a95172a38aa846d86c854524c543168e550711ea7b747be71af27c093d8c707c806192851c84bed5a9aea7bea332b0e888d88b60b6b1e639a9c5875880084b57352cfbc4df2fe69e24d92de3465f89e9e9c93102e798e56de7340fb171fa117d68d3db612d8c9a8885ccf31d6c08d242a7bb58bf1edd56593907b51e912431614ad1c9edb3f7e82a3ebc8e7b779010b1f2a31609f136dffd41e17afffc45c58e8bf480bea44e77fe6a5626e007670f2924bd9e382b24ee8ac5e828dd900d1f79436839817450703de5b2270e82a4813162d44e9cdc04c9b932e312b55c2ebac689dd72ea2d942f0a801adf294e019601e03a4fa40c20e061165309d8dda220b6b70759ab3301e5c615d40279809d22bd60c967aea8304e37884a9d4ae77d01698181ed5028f1935dcbe6e155db1d63f0964cf46d4a601f2d01a42224d1e1713548ba97a471152b30c860ed88eb1ce45e21a13cbba9e808d07b6ac344fed79a264b6cb7ab244a8fcc34530b41dfe5f7df6558a2187ce0b77de78b8b380e7ef9f921aca6aadff8065ecf597ef77f8b445da9fcf1f75d8193770fc68475d540b0dea20023096c0f74cf7abc4216521afb172060d28942f14318cc7e57e1512b1845063023e33b4be1329b327c5835226c262b181af05057006d2b74f7f830f82e8882f5e2102d1b0cd92bee9d7077c37cdf8058e4872d2845f3d7acebf99341c38b2405081ab29e816f5f8dca8bb913d7302cbbfe041395f656c67f8fca8984435f7e0166eb86c93d57fb4329473db451c34f34ec99ccdf11f9c74313daf68fa36b7b7803a26b1e67bc8875e2ccf4da565141639f3b793078fa7fca239ab6d7ec8dea7e2bcf53eaeb3cc8f4c5c159c93ad040a3b527f245cae3306691e37d9e89f223cd22aa53723991cb6810df8de1605209c21af0a868c1d3e05a44d44a71a124a2372c8ab5c0e3c32947de78e85ea8835ffbb30ac21ab3a14db32a7d42319df9466f188ef228e468b1ee9a0c5e4b0df596bdd85d6a8c8b0e3cf5dc130bada52c94e9337518e7eb4b28456c3314c5e541d1f286e33d4be11d63d602fa28b05a64fb04b3992041337fbf05c78944e8ec87b67ef7418e44d74285ed386a6db50d288a8423fe7176f07268fa39f58669ecbccd3c4c47a2c52a9d14aa04a006108a51030b013ef43b6e22cef6d1169c1febb81c5c4dc50d0a6e9fa641d0cdae42a882cbab02230d989357f1647d67ff82b9adab220abd0f0c5b262902a32e96b3ee77ccdc8c25df16000deb0b428562a29bd9d6c4db1216ce1bf390b802dc8ccba369b8a3856820fcaf8e9d415536f3f6f72d4e828da44cd34f50cd70cb3cc359f5074dda5ef19b46351f4a58916c9401ede166a3175a69adc79fe21d5087cb7e77b7b1e70afff06b457d1bffcda740f5ad97dbe681397c0b2c317363198f035246c6586e9569db11f01d9e073eb7c71595e0b9d6c53ee77d65b06118be341703fd594165f7e3abd0f2547929c8549ead535ef23fa3ff1724c7a99550c5c8ae262ad35bf4c02a57032cdc55311e6df911d72062e22de15dddce09e3f1ec47b0132e0ffc1b86943e95d662425148210d022f64df5439f784bb2e11559b6afc9e387d9e90d2442298d048b8c1e78dd1380f2d80888d53fe882c8815b4c2d81d6c7f9ddc621d9843927797fe888708dec9a760298b8e4ec23d0ea698a74e0c0e753d348acc70f1770ac75ad4a701876ee1b8012175160069fb27c571aad3e7477f30ee70e487c1e2501bbd2cd013feff479b10d0061721c965a558c88466118ef6f6c9b670d0dbff1be653a372f1d6e10bf37a1764b898734434e83e44f207d36985dffc46e52420ff1e941d306755d40eb8edde923de7aadd51a220d1184e4c06d52360495677179ca99cf2b95ae77e59a2e5edaba27833ba9b59564f34ac80346fd7493ddfb1add016d62f7983cb5fff30cfe6d121ddad56b6b058bb8e2c6989c3d92b98af2c490bbfd53e06bb9aa5c60384545cd68b7a81e2a1d15a3729628caa46bc8469c43e72081c5948d88696d1352ff83f4239d9901a7c8df14bfcdac80280466b98a09498355cc9c19e35481f8332f5dc4c32e6a0826b41e585e86f0bef38f1de36b35187fec9ef451f7e2567f807197d4c2e4d28637f27a2a782af1ca50ca28d3855c9d3812b5e87de1b7d6d4e4344daea1017b7700d215cdb53766b50da573cc9e70c1bdcddffe6da376179e4bbd3c5622d0fb8791c71ec879d6f11d36b5a4c7e8ad0af6f5c8c82130e4797e87606be5a9d92b3d9a0a802b56cd2ec2a6c6cbacd1623a37c920b3734335d530bb51354243dbd1de42444d255793080c6be0baae34b16b4ce72e13b378e5128906c939ff8d020a7a16b6b75461da8d79efc462dbc4af9c3627ff4ae7e13ee4e73d41a96e48bcab208d6fc9f93a8d458861bbfa6fef9950b1180aea2c17be88e2459804957cfa6caacbfc0cb159f408de5b1a4cd736010abd4a21e110cc72463a5ec5c72e464bb825076456b15bc1dff7c0dc5a36a8daf5a99743bbc04c0ddbbe874e702f5f54af90df91d19b0523e5bfda14eca3aa2c20d1c1d0151c0724c0ac34aea4383ef51fad908f3d83255c8c56961c9351517b89fe4cc44348db0f205f319940b77191734aa338be6a2d5cf91815234868b4e538c2ee77d5ba75c926c2e066a1f2475a6004c5edae57d63874c7323dd8caa21fa854cdbc830f8b4c6d891ad317300c3b7749cf83c94063700c471af758267eef6b89fdeb7ca108c150d1a5b78d1db743636f92bc85885e0bc0a5bee349ef6881af4fc4a9528dcef9a4e30c486210c3bc5c499449ab0ce2b76ff60288d364dfe03a7280dd117bb943fdf30330a9075961b6dad92236f0cf53f9d1ca9e094cec55c16c7d80e1a3e00614b590344d43cc44135fe677f7719c98d19527faf12db512012ddb28669888f9001091124227c38d9b1f54fccd8000f878127860ac63aa81274449cb71c64df4dff5ae1e26f039fd6a173cb7abc55cc02f6a44845a634cd5bfdc0b0a21434444dd2e84629d47272d75693e858d4537331646167360071a9d4a320fcbd61c519cb957e87eef37753c63e47e14100547b5f0a7aed5946af1f15004962ad4c4d83cc230903003caf18fd534299f11534d008e5a342c7b69c2a86efe22b4d667fb74146c4ffb711835f423b301995827ed84473198dce5450d4657ee018fd80fc9f798e084e92b6b65bc863f0f05563f4de1ee5bea5ba1304007b14198e181735497cc0cef790b836a881222c016686429d15588e3542293eb2ffdb7be30b9fa8e818cba14afa35bfb67f91735b4287caa73b12b2c84ed76b7590f37c282d086c0d0aa8b7e6e17624e280626adc35971817909e76c69880afc10f861430e5303ed1f2c50f5acacced1337fd118c2094fb653743a29d4da4f68e96fe71f98f54bbcb82021f03e5963a755eaba4eef8e389ead75795955b92502cbb5b0bf77ea6f3adcdb3e9f2e37867604c4a773aa0f1b07f66ca0b105f78804fd6046be00b5d95f780cf43dad834207f262c0a40d97a43b6d8593b9bad84be378722e8892fbf1c8e24be28377ff8546809249d843c66621d2910f3c5363177a7dee3b906943abf86c6163fe666d7ce5e83cd991b9ccd96e8dd8ed5e6168c882d80bf45482976df39d3a07e040d926d22435420a66c4e1a1f06125210e520f13102c36a599a1e210765487ab83adbef17cdccd2799c1c1784e1973f4b85a62a1d944c5cc0f81b8323b2c67a5ebc67be4a2a7bbd177385b0093e4fbc4f13e0c4a6fabb30cc1c94bc15a6d327dc79bbc8cc26a2c175f099d0e653e7806923acb71c26f004b3a839eea84a896ceef8e4f0737d1190ace3864ede28a201cd9c1523501ec28e9eb2badecf41a0541deccc8510ab4d5b0ec86426ab0c2f2868ecf5d797dbed60e472d6bf5163cde6d10fa043b78d65eabc87a38c4d73a9c86d801ab4428fcded40b75438a4411508e3e8b5a09dbf69b54a62447e26056ab9a92831ead73b01a8135193ebfe51ea20f30e2cf616c899a2a282e75fd45c781f448700f3d9020acf4e57b10595f0195bcce24cb9ccefb22b1dd4733f68dd384d603a2008f587ece0fd0e74f24f344bac8f5b08fcdf3d0332496011caa782bdc4454cc111a62552a1b93e846dc6f127927a1623eb38ad6b7430bd2600b79ca19a2818b1cd68ec7522b884cb04df3919a842cdd8ce1d00a7eafe4aab659563902b585338d8947b90820ef89d80ee603e44cc3d3eff9d8a8c5d730e462018cc058180905b7777caa876d0d3fae93f075041a443793517f85e07c9ccacae056d71e6b605a9ae772eb2ff3321201ff6e116fcd748360f4608c2d6f97a7c673e411178b37f34a0348c260277b79e1ca6eadf1a5e38ae4a1552c1d1e74363f8b2c262d0dbeb7bc7b6ddc550d9bd851a4f38e806eb963385ca22dd75c2f3439bdb689504c532eeb28d51de02a583066e31ce9c0f8a2f74ee52321b227c8c1bbb992bbd59cc7cb83f36124489e449042628d254fe68ae337e9aa3a3058085b6a141295f429606a170bf94acc6b8912ae1d1ed2255f73d8dd5882b6a0a751bc39f5192d9f9426f38ee47790cde67d6020da2f91b5224238068b2eee0f8187f248195916484c942285290a39957b046d651e1043a15a5952e39b913e6145512d3f2ddf27dc7603f52cac058d61924402f70558296f7b3ae2f942814cc3143f7b2626bfdc298f6cb81d1a5f29d20f0751a7660650142d9e563ff079798a8a9aaec23e7797ed96f68d0d0ab3c62c42679e31dd7e0830d3ca059551cfa0d698650b53bb19bde8b8668f37807366b519d7322b187834f8a98febc766e63d092306b9427b056307aecd4d19673fd7204b5a6e7f217b06d59aefd88e4014446615688376b0df2f51f224d4ca54a887acd443cfac61d884a0ea0b94790ebc2d41218dbb2d3ad4e0ba6fa4aa1fc00aaff3b98f59296b00ce795496f096ee3a8a170d1ecd2a6b5a093c8744d3f9580f649766fd8cb512f6f7713f5374c1326d471f633ce2d802fdeab031b076c372eb97a7243f8a528d1f3824eb0fdc57862fb748625296c5de2d9e2da355d75c97fb169329f3ee6f6e376bd7b8c5fc186e47d3642ff366450009a0746ce200349273d00a11c6ea559d9f4ee22f69b91573c9bf362f5c326e26346ce270960f4588e42daad4657c8133c28cae06c45c8f7e894bc096874dfe251b689c7f57bf0138be15f711bebd775d147b3a401271dc8ebd00b831a32438e3d1ddf65bfdc0d4f8fd0bd051389bc4cf8c5d17014493515c1a56d3415ee8c0c1e27a74fa3010fda0ee62851427239c750cc504cb8699ca7291076181554ccd0c2f2a4554f2e83c38ff9311234a99940621090a94e6066e840b0864c54320c90042201a4b8079aa84f07e42c7dc6800bec81297460486b1f09a73e803b907b38c4c44ba98f67fa66920224560bfe03ed4894afa3b629af7aee46d616148fe2e3c49ff86438d5e112d2bac1fcd0756f1f15bbf9f31e031028990eb74ccf6b7686864813aeec33b13e8661009b9daed3e5aec4847c164434a4d91e703a7b58ab432fec813a6bdc70df4466316d972434133d04de3751ed04b954e52b96bea3f945701152c5abfd9f1136c79a6fb72ff5859162348a149d488d165be9832fe5653887514195b5b9401199cf59d8fa7c506238de55e4000973e423562088aace60acb2e531dbc490529a3231c27b3e52c0038156402e75d9de9cd24e0b2e8ac09c9cd1e7f7aae88ac0c1ea74903c5594c89464bfef31a6cf98ca85c44b4bad0561629725f421ca84934a38fb98cb58c660d849bf2ca81cbca510aec5f8d29697ba7fa6f7c6a5327d81a93bfbca38226f84dfb8cff36c92b3d4fb58674057ff6532fdbe473ea9a85c1e7cfdf4187f241820308b74a9e564532f23aa48c214c451d86f3a8024666e1ed21949f391b6ed161cbe0d9b2662fbdaa3bea6e286435313368f0a809ebdd7f0f1cb917499fa4e0eb27b21e74ea800d5ddc0aa3ef6dbc7f95f48890d07bbbea2b04d63877a9f32ceb987706b3939c7a4f9e72ef7f3517af26fb2634f1da2e4a1987f4b58b8550fba11093fc51a80e89980cca48a81a04b07fd7c0adae66fe5cd9be644d2f478fedcdd1bdd87aab5e80e526fb14cf89bf8dbb3482bbea3aca99fa96bd432e1aec808a690afb27520b99fe564f40bb4c16cf4c4db927efd861db09df4cc818ef0980e63f95b3deceff8dc6e1c5bba8dbdc9e832e1b4c3f958103a6b0fe06430360fbd0d1306bc89cdcc73a244f99d327fcdf9b26115b9524e8073b3ad9fef26da177c47d5a26935631024b62013aafc2753d0a80cc8040be4b22dccb82421696925515039ffc6ffc60453a24b6f9502b1d5842f06d830e63e1ea4a382c1003bf84f6192b69864dbea1776b28a817f5a8d79e9fa6a90a794d70073a368e249808d8c7e2ce999699c23be696ded91b0486c22cdabd1880912a24b18f9e04490833535eb3d557795c75e5c59c0584d79eb518cbd5154b1d600b7a187ccc8a30b8b20a808d48124b8296666821a9e32f2a93fc89f154b86446bf6e344b89fcfda98240c106580a61f78df3251cc633d8b186d37f83b22beba5630dae3a478a7fdfe7deefc5b2ad03ab793b4753a473380b5ce122560d7ef417fa6bed4f378b8cc952f94ea62743288f685026daf2e97fdf9855694170d8d863477f286fb73dda67c4d557c8a58c7ed312fff5c4747164319b47ece0950a24ee6a5b97b09a7f6ab8238d3a0174a9c7f9bc5b7cafcb3919c7d52e1613a353e492a8daba505cacdb4b8efc30aa5ea7cefd0eadcf3b50f6b022186be54e5737cf67110e2744a0ff6f3a5a22c7ab0c1fc7ffe7c2af8b324e83f7fd44d2afbd61a4f007dfa01ae7a83105e90ce909f1f1848eb015632e81e6edc14d21c118328179adee0d0214c586966fdf86cc1495de63e3301fcb11fa7cafd7efd65deed9766edd90720dd1e1c75110492c2f1ac86fc3080e94679cf81993f672cad5e662c6f177e07e2f4b1e590b27981fa263500d209f5e364298ab3e9d21ccfdc8760266546715c64c1ecdf60d65b9c66554df92ccfe6dd1d410af0d78e8a9220b0970b12c94f0066e43bb0b25316f9ebbae1b6315e5918b01b5ca938b8e9dd49b4a06c40ff95acc929de3f32aec8c541e50fdd19aab1e044a31a3e4335eb741e09e7b1caed51b2a698b8b80829802625dd048493b7d2c3f5965eb7752e4f9c2219df67e2b08aae109766768bd408548932beedd3c6808de7147ac882cf363e03ebfe5f6fd0b19931c5017ed5f185aa308ae930c9041502e6fe1ac0a5f04b74c78c25bbe62e2afc829b36d5599f0de6307ba491abe8548da6e49942d01fa98a4b1c1b2a3a374e3e109cf7879df12fd5e904011cb4b0776849ef392d5dbd296c857d73e647e77d6e28d6abb58208cca387b6218e786cc122d23e31ab94a67d64b84e91213927293d486e5d8d6fee0be3e4683822ac19a89af850a3bd0e28398bb186588d1d52336a5de9a65c47a8b999a54f62302724c89f82caa5aef4be7a5f320ee883720d14409e2a5968a038b069cf5fe881ee05e45e5062e8eb55d1c84f44b162b854388f90a73b0259ebc8eb077252cea6266de21c803c9d8cd093ed5fc62d68c04ee621262b31cee7b3cbe5fc0b2764b1cb84a41bbbe203010c0c028a3ab5405e504cc24a07b642afe9313cbc01f251523bf09ba0f63756686879cfb95dcd296c1a9b3d1a5be3b975392cf906105b3ee12deabc8c0c2b7070990243f8919d1290568c83529702175088f9a4ee53426e448a6758d692bdc9de5b4a9992940101040504fa034b76805803673aa067af18a01528e5c3922317ff8287bd4bacf4791435b0b159a18b2d79afb59182e7a3b612ce25dfe051b3a4404b7491574124fd483af28113577ec8f43e7002ea6ae1977d7aba1223cd074ec8ac134f1f3871855d51139274a309147b9452999ec73d14bcecb2e15d1e2c7b94975d54ecdd3ccb3d36a893241f634851481ef8214e9e7c8c358942729a55cad1e4262bbd6d4aee496b0d2f59e9f3439a3be53adda37b749bae0e97e9ea7097bab52c3756c54d1336297cf1d1011d5614d9c14214c2881f4f54118444442c8acc46e112a5c0ac0e3c4c64a214a189a2c3ccc7189293d407ba30a45d6b9dd33b27524a996de7446e762735b7b19acb4fe663678057587ea4c20031e5085382244da2e0e8a2b490418545a18a92c28c455800640354112aa63411257a000a124a5b647062e205860485755101d1604ac0aebca6adaa2015715058c294a014b1bad26a49b182a6b5344dd3b4d6aa69ae8cf0f16a70581f63483b7cb8e2c35609ba9bc41c638c4edd05c286cc2c75ac66f68200bc9c590b5e0ed17a39b32fc097de556f35b3df6a667d35b315bc04c0cb99a5e0e5cce2bc5ccdec042f67f6e6e5ccb25eceec7d39b32b173739d868f372666b5ece6c8b97ab9965f17266695e7ab7f256336b5fceeccccbd5cccabc9c59d5cb99f55633dba55ece2cf77266b79733abbd9cd9fad23bd07be1b53c0bbc0078175ce092699f73ca6800d7770dcaa95ed447bffde2a4c79ea5b2bd78f0bfef346ff3b82ee5f547c1779dd71fce779ea7f2fabb61dd958bb7f9187364bb8dea83ed654d8bef6c3a175e7f347646e6bb1bef3b9c8e02007407bef0fa9bdfb5bcfefa3b0b3c97d79f14408e4ba6c10c26cdc9696699d91586ee063960b68773ce192f10c5dca6bb448fdca619e38f189d9caed3955da7d5ec62c97265b29be566b9b22c6177777b322bbd636c4f46c3a2458dcdb5d7c8955dd975ba21092bbd1f707bbb58f8851297e81a718bac92b8b35b64a681eace6e915be5165182ad60b01f30180c068309c16aad55a9c26055a2c6b8bb83a9523dbbf5ebd610e1e07cad9ce2ec068089a4f3edebbaaf7eda17c20c0f6e9e8220fc60ebcd4bede3d979c1d840752fcb3867ea73758ec79c0b45ba51ec943c2e911bbb43565bae0c37862be40e5d186e900be4feb82f5c17eed26de10a5d1fb7c7e571775c1d9785dbd4d47497eed2c5e10eb19adda49b749bdca3cbe436dda6eb748b56b36b7471b84ed7e926dd2156b3dbe43eb94f6ed27d72936ed26dba4db7e9e2b84937e9365d1cee75ea8a907866e94b1bacf4f932073b9f7d35b3fdd76835b3fc5788e8ab9995bf9ad9f8d2afd36d729be2ce0644ee0e5787bb248271ee99e3b8e90ceeb487157cc855f031be6678e9b64d6b7b4796f33eec6247024632fbb8b1bbc345ba4e623a442df9b08118d452546bb15aaf26861e5040923841096303052274e881829629235882d22085d63dc391a62a643784000a105bc0208de100932d41001123dc096249ca5292c471a136bf5aecfc185b5a6232a90c4b4b9672e8262891fd78a347084c2dd68e60a266b8f24491a41774c408ef0b51c42dd5b049a60a10d1c20c53c8763802488c16020699251d3c74cc53ba14f49476e42245111a720489628b92c8e5294a918f20a8157a0001132f8c94f001144a90420788f87861d662885b644e17b03cbda0828f181456e8d20d1e18ba210c134350884195624fa9104e9eba47893ca5745e9e9d4d08259743412949a3dc942a4581d1a0128ee9b1d2d18d26362521efe2634c4905991629414100f1f9d0e77f7c9e6a75ce2adf457cd321ce432bc8e330b8a508f1ddbe5d26b6deba6378a54879be1f635272f8161f6352867674b155e53637cfd65a5b4dd80a1211d9e10a0c399e7a8811deaf4e5c9068e14717283962d45aa90c5f6b65c26e31a6fdf882c8098da53d222165ec4ec1908877071beabc1cc000a206f1658dd1fbfc83d9c92e19e2c425eb497776491c16903d572336fed4a310c73797f4a74fd0603cfa144cd62697864b74a75ca75bc3ade1366db933dc222ed32de22ed939bf0e6ad94011034a6de674f1170b15d2c556e81d3d7b27aff0eb6a7128d797c83ca6c1c8f4ccccbcf325b4434c576cd843524afa855f95a86917eea16e147544c720dd80edf8ca547f54591d529f86e867f3f5a95f9c11676444d4af6e0ce7b0df30daf1ec48cf479e3dc9b353b0134384d1738ccd2e7ec6eeaa85739e388e4bc2af1ed2439e8c7b6ef4b62b774af7eceeee36fad89d92d980e1045eba912b963b7455af4a441733750ef7542dece29e22e65c110bc05e99ba5625624f43115d3d45d4723c3bbba6427c55288f55d301c501a8e71bf3c6c4f1ec138833d0608839ec6ce4d9fb8a06a3699a361b4c8ba160fac571150cf7d4ca7d415b0ccefb8af89a82db38aac934b869bd835f0deba0468a1ab433fd903d737349c2603e9b6f30fdd234200d6807d62f2d4c50b22fcfcc458de92e3296694093bbcbe1889318105c6240f0d085c6a0a36d2450d4a0fd050fdb402cab626503c91bdd3de21e718fb8471c5d2bd7cab572addca7fb84e43addd855b231f6c353ec0726bf526cec4997e71f8e623f20a9a2778ea1297db84d246fdb029c7c71a2254a102b4081c5624eb4cc6606e79626fa85f3bb29ce39e79c94520a8674524aa90c7aea0105bf6f132b7d5239e39c9de23173742bb39c537a4673ce39c1273292f56065d4a64c534a67a444cfaf549298329a3132e92e1366669e471f3dba16bd46a7337af365424373e25e01b576666e5af7c8e88adebc4da1e09cb38d3e724c6a74da84524a2b9326e5c764e54e9367a01af451f0ac7d0cf8e93d13ce41d2eb74952a01302186bd40e89c76ad86943cbce41e936a3b7ab05010f788420cd32a07c16010466f3e2c166c83947b48024ca712e8a7b465d81a05e9b694caa38c21b98f3b60e73ce08f8b915f32de79d4346f718fe67d1fb7d91ace49bd10b2d5bb03ae1b8cadd5ed4ba59cbf59bfd0f6b4cbfe44c0dab1010c0e64dc20ee21c4c2c16301f58b99dda9984351576690293485e650f509c618238d3827c5a999d323065104160e2b9d524ae9ecadbaacb5d64867f48eac1bacf49a1ba2133b2e569126bbbbbbbbbb273d61b28a5ab6c7da8c568e3a5b8ae038345507d3594593849fac1b35e6cfad7aa8699a56a367a7845524e5f458a002151be2466c0a538d6666660e92c25281c583a502aba804927bd23ac3d26161ec73524ab7e92daf15368257d8086a32a109cf4262a5d3a4ee3e05b96180618def9f278104d647c61458376017d7963a3fbff05e9e9efdedb579dcb6cdd9259b6fbc5813fa35038a691004192e9baa8bf5c08062689d60b7046a13d8c50ab244dc936b4e4ab7ceebbc6a531c8d9f4fba7da571f29c32521c76f9a44c9822cc47d642fc04126adc77764d97099a17d6549da8b4f114b4b26ab0ec5d18c570547a19c47ac16e1eda54d4735173ee2b617e477fa212067ce40842cc53f9759e13c5c8384b97aa73ce3947f0097dda03b9aff57293cc02623d67679651cda45ce60b5d3b4fc11266282365c19fd6014e400ab38451ea9b23f83c05694c70033d19399f3a0ad0a7d12a8fbb5d07c2e0ef84ef2209df79b8f351d5010752a7007d87010101dd8821bda31b18bae3b0db5b850d757476787e7c7ec63767df807b52965d5de732f6bb9cd3751db8398cf6ad82a0c7323c3570c5fc5c0160c161f673bb3d5691e5add65a59456087355a2edd287c286f716a0de56b75ad8221057f7cbe66825e4f51c2532ee85104102b5948f064c469042da6642087de60a3872d4952e8628590952d52c806f0101584122723a2a0c1068f2049628c28e2082b1b5872caf2d43d23299c886896d83c757a4ae99cf30614343c4105ca072e2da4928880880b3021545069a262c66985151270d32cf8186bc2f2361f634db00abb5f6cb87d74761d7e21e04625e68915dc22158f5d1bbb2cb51f885f7eb8c7b277a4a497cc340d350135ddb0410a12684f74525ccbf4c4c6347b161f634c4a301c2ea547e99bf42b6d4829992ca005880e28548c841953644306a8284441603aaac4000198cc6e1cc0904183a7a461c8e88e45b178442bd7bb698f16337cbbd732babb99967c37d393efee6e2a050ff308a078f6ada5a394c492d226c4ad3637707e9bfb04755e368fdda01573a473ed21e71ec7391872a0c795ce19e3a711d1892e335c5992849724988eb89a50f2840c5e6088220c94183840841156c484d01aa050c1e889943205b4a7016ea0b7d47551f6524a0902bb68ad524a29b708f5943d8a691b649aa6693e3e2debaf9a9a161f8b2fd592d1f0aca18b2dd611cb40140c62352139e6b728d32ae8b10ca3699ae6511b2176791a9a6f1ec62eafc9a83c162924411ec3c643d7b7f05067876722b1719a16df8d179b5a39fb4ebf5cd4384d0b7716dfc46197e6d27cf5b9384773175fe4946ba75f35ae7ed9f885c18102429821c2c6391ae7681ef8b060aaa5f3b1f3379aefc68bed9c732b6534296fe8da79b9f9d7982c82b9699f179b724e6a9de65ee7b255600933dc7ebc6fdf36d0e3209452da03851863574a7974d885001f9fad470a56ba8c89f8b02beee830cfc723d91059ac9be00330869b87a004bbf912940e4ef08117ceefdcf379cf6d7cb7a954bea9c08df3ba5a232cf40d94c1ae38396057a495e79ccc2ef9632a647c64b5e0f33146181183584329b5335a3e7e5a4f5dceaee8ded6b18458e934d4f9e83a17095691ce14d66fb7eb49541a8a4a3f6bbc4e062b03567af3f49cd322206a20bf132206214fcfe474f8358373a48f982f60a22290a48bad1a7ee9b0c62a62c316e7ed16877ba8b7fbfca8e2c01f6fba8abac863553e5f2a805f12d6391cb743064d8c1ce73186e73c7c7df4c87998414a6666c7f39087e328c7717e031555aa4eb5719c941cc7518eb5827c6284f41b37394e6a1a4dfd6ebc58cd2f1596873018e927bf6d7b4e86918e863be7542a16c146a6999dfb29effb01e29ce39c3503c739e73344e09c1b2289a8732e95b847e59c739c07fe44996a7ef7cda75fe4384ee939e738ce638b0369484ea6b6785e84113520216220bd6686c7bacbdc4f3e6f3e9ba5c1fad070eb53ceaa03e020855902841997774e4af5c997f96ebc5866e1edaed8c57ef9b0886c18953890b1fdc42e9ff2cddb773aaff33cf0c7e753deaa03b038d2e4c2a752205497193dc39a0e0ff6d5753caedebaf526ca7a358aea375036944372887b349647b82641323d847eb538a7fab6d5d90aef8d17dbfaba83732acb880de3d3d0570f618608dc635487864822ee39c25b953c5b1103e61b2f96593658e92d1d1f7ec518d5b7d6d75bddf66b3a6c2952ef6e496ba4947ed1b93aeda0e7a4a0f300791f7f868811a766e64029a534c6186b584256fa95aebb5bd2b6a28badfa4d07fa0b3ec6aa3c7d15a62a446f25c9b33ec6ac087dd71e3d32897a080fbda67d057f3cc842210bd51afc12acc11df9d5a282a18c6b9bd378add56bba16de2ab733cea2ce70f335154843d2f0c050c60886f2883e07d260d718a4219dbe068220952048c190853ed5dd1d481a81af11d02a38c2fd09d2903edb2757117aff181be2c70793fda884503306316433340000a315000018100c094422814828ccd26c123f14800968883a6c502e168722a150144b5114043110c43010022008024190414a29a824a5002aa9ea66bb45fcd5868fc9cd492d04703cec3f5b972c4083f96e7e22f0bfcadd8369654368f2008f9e6ff6a6e310e663e0e9a5b7c0947f306dcf0c7edee7ac27adf973a28feacd0400d3c869ea48f08150a002862ad93d06ebb66add609d6eb2e65162e108016078837839115d889f73332e0f832759846aa3d8edcbf93808fab2a233ce8579726d448b4445fca2c26694d56cfaeb9a8eb8e65504e465a5517809df48e0b938e496132797a1b77875afddf552c3fc8bb82565f23c50b70f300ff51f3c18c139d4eb977e4ecc63aa03aa235cfac7302d0f390a013e94baebce337d9a6cca892d5e74dd196f7d6a41729aa3c149bb5ba821b5649e3ab6769ab3ebf5ce0f797dbf67762beab04b8363f4cda5e839c0d46878944005ed24d6f1511a0e276047a133bf818589942a10dff2bb580bc95581069653ba826df9ad5e3dc4fba6807eafd64f1ffc29f3f9e2d6de592a56db4a7225034667d3bf7a31d613cf0a745d3443ed142758905f92dcd0a17c95d7d277d3faf66208d1a8df9f7f1ef64d730b066b637fe435ec96840009df0dbb3792b5913c0e9c3963bb7f8983f3db62a10fc1fe1446aba2c7b82c3992573ae4e462331947223a5a7d3c4190071294ea77bf4849406642b9f2104ebb93c0b9a3b545cd3545bb0c59b2e413ee120f7a34c6bf2e1da9e60f7179a4d3daf54024ee313b9d5530bf0677164f49e654985f93d3af41b36bfdb4107b6d29fc84cb216fe7b73d307a6753b7ec1f2abaee3182503a609f897662516955a4da68644a68466185515a4d622613ebdd86a5f56184318e43fb5b5b7fd47d5816f7a4eb250d5eee3a304e90061b51a092692b53206d93a9566670bf45bdb6485e09d7f08216947c38bde87baebee8b89837e4083e27a38bdf065a041149c476c251183f173d192ec70ccf2efc9a0f104a431787c851a4dfe79aa455b9b3cb460a0138826f722f432691ae774b5af90bea6f3cad3a2249a3c5984732b186f83e4c16391470fb7e2df9afbeeff07819880d12ecd44cdc42efa04cd2ca0b1cabf308bcb2623f6ed03d9d79ce6a0190f4cfbd2841622df93a29258d722e7500817f3518c97e60e8e7e69ef91188547801c0547aebba505373f5608143d02ee1059eaded51120094b250438e0a0604ed8dd959387a18e0fb7426cdbccece2f9833cc95b9d9a025182c1c0dcbc09ff2753d9784a280494754036f1d33f136283de7b8460d56f67c6275dce9b0c8bdd72521db46c88325709a5b0ba75d99556cc090a8f1502c79bb65ab6485f8d2106341cc42bfa1551e8f2824448c385ba139503826cdcbc51a989052671c1ef92a88aad78da0bc76ba14ed47981c9eb167340205c0f94053134f437cf5e70f1ba6f6ede7470011f50c53ba605dced51011da09af387022cf8501f9e4475ecdd2fa8e4074bcc72f9542392ba828a9cc0a2b533d45a28641f643b202366682ca0f5bd3a705ad3816c872a8e5e9af6f8c843440bfb3dbf7bd9a3370285b80f119ac0360b62837a9f6293fb5f9d5adb80a88c8a1e4a3bc9aff8154218229f89d28a8500955cc3e979efe49616a1955a3783586daa9ec3ca367dbdb5026e2011803260b5de02f8be306f059e22d051b667a73809579626dbe61016c3ef1f03ec33af05bc9ee84f69f09321189f48e2106a26b04007c94289303b389b1c7e108cf4d19a877115b83244bc7267c3a3274eecc5063461714c5961132a9be126ed96921111d55e67f42f4b9bf272897eb421579d0207cb084b48c849c61ebc8ed5f3b0542d10b025849d7983ae6a30fed3956e8904b38a3bcf68ddcbeb266f34356d1101163ef02d3b80785022b1d0de4ed95965aa408b1295768b24d018879330612262983e19429c418858a4c2d9ca262c14a3bfece1098dee9c4cbb7b5b9ca518656c9c3b4f14d22c4a8460383148731ad18c3ce7191a7256c1a414355eb87b0196fc3991c5160a87a68280c10f04182e81facca467af9e11c87178012d25e76e116747fe95c510285ab3b814eaec0775e176d2a49aa20b1ee3d545d5ee0849a24dc090c577e30264a3ea5f9ee141a2b8823f493ef54220d7a7a5e9eef2f8ddcb513ab95f5066ed8a72909999b83db26b554d28db01827e0a76c6746707fe82eb11c148181a7f498defe207aa37fb9280ba94fc75f760bf9fd62f4b4d98ca7e6f9360e6f46721967d52434c5692e11003f934fe938ede8cbb3150ecf9a5f35da55caa7a946ee8f75cd17154063e206b739f73da24ccfa836b0f1c3e8d7774cc6aaeab2c0183899514846c3070a894640186233021a7479b8052072ec3afd0a982cd9733e926e0e9ffe5e9f8364eeb134ddb9e498e90a1a0014aa5e7029af9a3c47f16f284761eec64596c26009d6dc243cedc36caf0f529e20aa2b04c8be85d2b3cc4c9c78fcd99804bfbc4dd223b512d35e57c8b09f11c5398e792b1c68c17a5f64de430ef10f17631ead34338f7bdff38ab8a2832e71392df02d4a892caed139777bb0f7f13460eba11b0a6bce4e25b90b4182b6cf7194f604596dae2b75ae57f6f17fd66bb2210a0f8ed961352ac9932f46eb4cc6c4704f4d2d41a29e171fc4a845942f1aac9212759d43036bde0698856f22403782c0f8b1ba65d32bdf0b5108c9aa3e39653391e64cd20751f4ec3752b3e05d3326a0cf428daef02528ca59bc97b2eb473af4c592585406b8f1215800fdad49f92da582920333365bcf2c9158f9a492f6d9b4bed79022169f51053d3eca6616208496289ded74542811c8a84ba0ca88e46086e64a31645e2adb4c1beac4d193452974230d0a6e5ce8b9037ae500be55b04d98932d63000f54ea65159d911ec0ae0e70b44321f0626ab78c249a2e40f37a095b8b2c86f47423bb73fa66b591fc0d87027f6718be9239dd76a58cb09c8355deda7d8aba2e9c09436349f2173c0954edb1891a6d08fee4a7e24989a4931a3d795ac7970883087501eff7265c136fe03811fd7515bd978bacca4f2044fe902f8ff4de8c3b8d8c4cc8e1da35f32bd312a3bcb3b4bfe11836358e4c04fd3b2ce65ebc8b3d7e419d8942cab6b5830f997ce76f44134bddd5499d7d66e1cb221c9ee6ecf5ab5d7b7f8ce18f2b2d14264ffee249088ad2a4bf7edc9ae722b461fb1681d7ceb60a8e3c5cab6b9c96e544bb1b3c4aad2df88173425beab9093b43db0ff4f43d67d725070135be129a9793d93bfc9fe81c1ef4332bcc91240a5d28e657ba28620b3e4a8bf1b907e43b3d8c9dd9ada3fbccb1155e9d0da8b0c1c64372093757c33e826cfadf06ad1535cda82e046489f246115e4e802cbc798762917b02933c81dfdd80d13bc0faa8627213f9a06cc71725df7ba037cab91fb5a6385d100a82f043fdf587ff07e17495c595450bd7852021d0eeb71cdf51b6c82385d97da4d6c6d40eb4cb59c2c8f4a18da061f38aeb200ef7b6d4a54e0738f09a05c658df960539d10e4d856996654cad0fc1d9538f6343125be41a2579f94902451c2500ffee71683dee443b7466aeb0bd8483b36a3f480c991f368f52e0b79aa65d8fae37ca96b72f58bd603e4bbc4f187515498c5e3e08eb4ecda92a67b5ab3ab0266d40c8c05b1f529bb1440194589699fcda663d8f2ff03111554eddb0034e61dacb33d69201970784cff0337baae18b52294c75abafdcd6e9f31b357d85e2e5d9078c44b5ad0e3ab1e30ece8ddd0aa419b7c191be3585d5ee3fb1fb527911f21b18e52acb2263b08ae2c2b73809977317bbb8dbc8b3a878a7ad6d0be4a509ddf9becff8d6d8b279be48de3cab8a5a2aedab8cd5a925985461b22f3ef410c938eaed2a1ab1a165f09378f56eaf23ad00544c97ed533e12e13b4ecb36e401ff85c6c2c1de222ac4093a072aee753f38e41f6175adc0129d2a93690e6f95492bae8a814c928f71f8a2b35d92c3cfd5c41baa7b5c5e8f921ae33d30f53c5db91b1366c0ea02300e0f1350df6244a511eb281f170e31ab734b782dd84f3723628ab10a893dfa04bb4afc572a05bed205a19301ef5166a57b9a8f3c8011c55c37bd9f1aaf195f08db991fa3a7a46fe5c83e65d06e44ae36972f81956cdbbd61270ca8bbcce622e4c7d816b1a49e0fe1359996f95fcbcff4d892f1d384d2177788f834f8e0d131eb43287e4a5087921965f3c2a6fdb4e952206a5ba2d2f998954b24721c44e54fc509c34f75bc51354b6341e98eb87159c281da03bfbdb0d2395e822e4d85b1007d9c6b298155cee8b52b0cd4212524405bf4a641381db067810600166c46f42d7fc113428ab3ec88cf5388238a49d51114142cf76d61a18b67160f8a55f7fec4de3527ca22764a05a69f52db41d4e334ce5c24f6dcf8bca59f372c7d33640c23e1d2727c5663c08f8f8a8d7a7f261e9698c065d061ceb443dd44d391293a90eaa0a81113ed67a2fbcfd18ddc0e41eda6923dcf22fb8fc601fa95170a42476f1f52df09b58e0435c724729ac8a1cb5c3e23e6028ae1c90e673dfab98f7f818451a9b19b99abd735cfa003118a8d45a982310d15ab0fab44e4912ba5d01766a0e7bd86b2ad8eff44f6100729919aeaaa1b8e4947cb884b82e038ebc6e4d32069faeddeb4539d30ecdcbc862ee23b3988cc121063a7bd3799444416b31ffbd4b8bf02fe32669e3f92228e0270078ec339f7e580403a29ee16dbce68c65c8713a93a2815f4721445df5aa25071945ec0383566cae4793a2734424af742c922e15a82126e27f0d7b7898840211462b0b322957204a0f6851087d9b2a3c30e900b1f5d931a3defe201f2ae400658beb7ea71e1cdb7549f06c710ddf55bb8aa22e5529fab3b1d74df190b42f30138165e4e3a9029d207e662483602b499b8017bf89e939aeb174417bcee48e69dcf22321f1a9f47175e84df7c045d1763eeec7fdd7ab0a42f2c637cca07aa8e2c57319c652223c8baac12e96e3efa53c4b26b6f450e9a5f81de9f53595a96f904ef5f6da3aa51ebc3cdfbd0930c35e900180de637c8ead2edeecfd79da579e6f0e6fd0d6738cc0a37cd0fd56054d4c66a8ecc3dbff8ae0b3ff1cbb2987a5322745c6a8ebe2c0a7b86387faa384d15f24050ffcf7a7af5aaf548b033f290e43475a229c819e7e8c06cd62fd89e391508ae3a8550e9747432e5e486816299804b0d89c52646f912c777999f8b54370f815761733e3ee8411ba8e18c6e0c181eff74b0675183c60cfba7ca4397203294d62380a52250a6af8c07f8d2fb9a7881d9314c38c548c32537f118e6b867abc185d63afda080c5338da07ddfb775440ec84ccf06840549e38939381abad35b0d9a5527cc695282d88c42ef7e3e917275403c6a7933257dcaf70b6a3d8d4163a9c05f6f327a588d19fa436c50678dfb773f3ffa5ab9d479a944876e09b73ec94f9ebf06637655a5e7b288685a37696fb68fb28355e5f628cba40680e1c0c844f051867c447bef01d08683e870519799e0eab82adec9129c0d42224ef6344953cac96d4f2625961f28615d396f0d925680f1e2c05007d2d154453ae65984db42e419fb8bc63b31ba01fa11094890081055f85e364e737174a9bcd59c9008f4d05e8d25dcef300312bdc7d490797dca9039b6efddfd816cdf078dbf8d15e20c2f773557b95e773ffc067af72671a5822549b346030cb6d89b55524a8dfbacc0882dca40346358f277c78e8e6cae0240b282f9a7eb41cdc56ef444f6e3004eaeaab3b9aa9843b43af0cc8a55c69d97d577ab7694e01bf2afcacbceb56a5dbfe7ce04c395ae4dfea2507c142e6779af8745612973b04defdf02c033aff5970a08c3dccc577630daa63003ab7f54ff37418955de5b0a520ef409867491bdecffd461103d801bdbea9c4e3d29d47ae23317c5c972ba1e5d6dc00b40e050b586dfbac55c2ce97079c36a122f1a3e4ce0f1e1de101066f1d06c1059636ae90a77095355cb32a01dabaf41773fcd5149708ea42a5f5156b4df75e3166beb9cdb902282760df470ca120602f60f7a1feeb84c211a1780583c651d4f025ca56aad8df0d1c22f985577fd0d932e8a5bb9d8be1260c17cec5374c6165b997b45107b9d5f545fab04e431aeaa640fc1b0c2dc9b8484832f22ecb9457cf6394c9b6473520c55e52c3a6ead6de759ed205d13c92d364e0f35e01636354aca5935f3cec732515cd6db7eb86d8564d3e0fe8ccfdcb36fad1e7f92ae5c28b56e6ba8b1b0957fc6c153cda087aea04a1d45ac5d834f0551dfca33a09a974b1d0b3bba826485cb7fc2836814c9037c69ba4055ad11634a9191f3a006fa3858b3dd67de610a31d85260dfd933924c6c782a0d64425b995b5888bff6cbc0e030dae6772fcebfc412023e5f7b544b5807656fdb73e41d92cd2988a6e3baf957be37eceaea9a33a317b43b52c2188cc06520cd8bc87b5af46d5362479ff92d0c4b6ab4b026fe924d5dea1d2076c5c5e99c96f584d2518ede5bec5b9ba66ab01f7e4487d5fddefa4efe6b4c7c0afbec4f5710a87b34feaeb78054f8e861696852032ea120d9a122b349a958b88133f5cccc04e173f2c0546fb349c3adec3a6401398280d8e7acd2cfecbbfa2cc040aae6af40168922ccde6ed6fc8f0a00a1f96c6036660d2b059a8241491a691d7205f8403e391040f762d1481715b4999978077be49bec51fa8999a5944c414ad658560822dbe04ef37c1138c9f0a2b5e00ef0b14befdd2c07771152145624a50ff4b307fd52b39126079835ab28657ce336867841c66dedb2dd316dc731bcb0d312b6c86364c08bdc6582f9e3175c596fb109b6b921e233e5df78f6221b71d528dd4553b141d5186575598b5591e4f1cfeca32512bbbd7ab394a29e43c44c27d09e364b8a034b0e634a69a860fce73e7b844352da4b46f0ae9eea9618cb4432dd0d92b6351b09f9631e59f27182f485dee91956630f6066465e9f7ecefc20c113ed9c87869b58ab7d0c118e1f1772753fae5f276261351ae3f478d3fc5657b5bce322ace9cfbdfdc15c44e6833bf002db0d48bca4e9a7d5d25a0d824a08413a8e4217826f07357f0d2a33cbe499f04c9d6d567deeeac43aba83fe3430160a3daf2e4d018d5b10be612c0026e0c1286b36ac6b238a23d0c7917298c720c19082c87550f4755c226aabb98b7bea74870e833000d3e9aa67f0b7cb58742c944960219aad11e5e242c989754301c6943dfdfb3964eaf00a3d17e8dcaf455cbffe70aeb47e1d83d7312cc7feef99554e31185b224061b3e88bebee518ff3580087417a69c3e723c88ff4c02ee9733c7780b104e97f32cb03978104acea5b79151b2206fc3539879b3777d1f62bf546c755023b0b6128324c50940b310e303b85d6257bd82e7e79c9cebd5a01484d9a8133adfba231f0bc6802fe39be1651c02a9a0c2e2761313da9d107709d0cf93b373a733b59cdfc8d72e3169a591b717611543faf31b0e22639a5c3671b947a1bb49f7ecc1590e64bae3304f24f8bb9a9b5651d635c0ff726168a1e7c342a1c59946b44317bf99632ddebb7520d57b32784d42c7ff7f2965668f29e0911ec10fe2058ab56135ff6e443f7f86ac5512be621eb1149ac81db56c7101e2bedcee88bed44cbbd6c603a1dd4df1dd29a4c1c7198c4016dc85fa95a0c2a31b58b8924263d1d6831f10d1e3c0fef375ac4383967f39a9b00c9abe50d2556df8e7f92f5d2f2a5caf8ec2583c1f68c49a87e2205f9ac63f334b3544d4260770321a865eaa09f730f25779957dee8cc190b6b19b672c1b4a8d6a053ace36a09564b1cc17e0cc9437cc81e87a0fb05b55b2c2ea8c06c014e7c97a723ad409882f4aa09d11c3b2a68dea48f25ef4a0f4aec63097c17bacbd9677abef00672079c9425b2b5e975d53350af01e8c21d80257e5cc116a40b2f967d97a4e09cd50aa410382e53f1c845b18abc34f16a8866958e41e41cacb053d20d0036bfc19228d99091c653cccb0c23afe09e644f64e460d02a4affedc23b7791287bab76f23a18df5aa6cc855b014590bb699af0912b8e1f2e8695c1083827dad3807287b4f67275e1335c53347ceaa369c263e950cf7da80309d782439cf00ff5eed860a1e845df855dfad47fbc630f086ad8137d2f522587ed566a8f6a54bd56f3304913be7a86dc403adc94290319e0c70049aa7a4a616c3f61470b80c96c49346cc91ee5b3f781281e6873b272c51a92119e5007c974921da7516c6d7052e10be06a221ac5519715fb05cd4b95835febb14612367ddf03005fde565ec5aa54695bb0a609e1e192f7e8ec30f0552b1b4d32c0cd549901a85cc81ab96f006a5ab314528de6c792435a64518a4c6b9c38b8417ba9ee8f4ad41f0693892e5d974c5b25e1f4284ea36ed1a6e7661290f26729f2cbbd381a6601f61bc52c82f9fb54142ac5f268c19d4c3b5cb4c762b4bdef8a2f61d13733a0829641eeeb28ae22c686d2b6e613f3bcd683a8d38650827e8f13684c19eda235e4fa2baa12079d92c3e65d8411d558c8ff769649521630bc935920ddd2ee789f7f048b17abe384fb50e74c33d0ecd0d54b751457143f0973c2e80c8e89362c248cbd26d1e5d4fde7afad47777da23503a55c033dbdb3416cc811c96b1e31af0549a47e62339542b7fabd4903d81b64df04ea8e7d93ae95cd7ba59b2c5187d54c32597a849d5fa0cabc000955ecb469f2d175b5bffa346d469b6ca677d4983d34060c2ae496d92ba2f992bc1760e309392755185a47d247d713e16c70b092834aad41ba99eefa8b3228bd2f1ba7cfe6911b8ac45da142eea24d43b76f33a43f28bd727f8daacc916935fdcdf803b1e7889f3fa55230f95b67b367fc6df59157a22b3eaa608e657ceb467ff5fe02bdbc3ede589d4a32a63c5a366106b172693f29cf6f60e2975536d48b316cce9be7c45be2b9f934630fcdb1bef9dcf2914f92ed574a50baf48f22cfc25bd50466cdca4b70e4bfcc14aa05b844f2253a54fa06d3e66970654c329b67933ea8ea375a6ac795c169a786b86c2ea6462d37ecd739adea1894f07b4b4c4888b6b7c4fe64eab13b806287ed7caf1dac0a3980ba6cdac772074263e61caaa95ee83744b30d41a65d594d4d88e4dac267efa54d38f5fe03e77be58e8212675edf6416ac1861b0e4a4060cc3529a0235a9e38c4af539f8d3223366e052941346e24a9e7018f2e4a3ee88490a7ee4b0dcad7dbef47c037f96cf35e59353ce6666ee9e18da24caf44d0aad31920b85ad5637923e9ce53ec6a03bb925aed5976c5c6832608b383f576858d4040cd27f6dca454ac4782a7eb05537f8f01c60877b252e74fb7c1034982fd9c04364f697567d1a4cb9fcdbbfa7156bd9934b4205c4d412017c7bb1800eeb406bc79bf09a312f141949f4f4c03b54c94161663427d4eb72499c8583978c1c7c7f75f97ca2a86d047ccd9909a196ac828be10e517cd915d50d32bc081dee657e7b591e157e33f5abf5256cb0eebb6d669f97c9e751aa5551f432dbb6969e457016a358fdf36f9917429ea26db521c89a3997b3e63621065f543d81bf7816253377ce063eff8cf13a35399eaf9e92c50e6987eff40fdbc3454c1f1c85eae5aa2fa724e90c3ec55f55cf2c6023769a5015d7b4623e1b53dd62ed55dcc3753c3c801ac27fc03a49456b5c82f09acea5593eb5f9c76c47b0571d68e53eccb6e0dd6772bf7cc13cc85443d8664e269b228e280683fd67086a7a45e6c64c52ee8bd0178a2834cb72572837a8358420d76306cc4bc420d3db69540799261e49926c5d1244c23854210cfc6f7f150fef28a254ef6d356c94415b927b9cc9dfdcf60718992d89804ef99f02416e5d9fccb30a212c64afb5ca8d0604b22c40a88cdf2ca73c42aab25436cca92717159b332f1ac0a1adcaa0c55f4bc143dc4f131a4aa541a95c9252e4df447bed3cc1c0732e34e4263eb36f8db4b350ab1f11c5fc61fc61089b0e749090dae91c8b6bccf534bfe7e060054cd07340420c68fcd411e2c99b164eedd7ed641db29d8a0fdda232e464689bfb5c3e45f64d07a461eb851ef73c181b4587d0ee658ee28cde2c5bd2d20b828396c48f4d1bcc1e003853fbd578092bc36949ba553d8e31434b5fc8a9c5383f296a43e4023132d352d26ca89e6965978260c23e3db8857bbc1b9e757ea078dec49d6adbc9d031dd8be45bbf2b7a004e3d5ba190ceef0098d6a1fe501623ace6296397560d421e07c7e7bee77a234e8c4f81d82da0b6125432cf7fd351d70394391ed7442ac24ebe6e56188fdf9d93a3f20b3a55f748eada5edfc09566677683f59fcb5ab5d9b5243ff69f317dfe91d46dd1806e3daea897a4cba1cbf371528b12a6bc8f276c0910a6367740a7730b3e925b642f12768a9442b2c55a163fb7ad1be74405dc1eccd56c1c2cf628cf2499bf0669fcfe73ddef771645ae0f7a06fc7440f0cfd123f5ad253516b2c4738cfc95c78759110e65acfbc28efc83c5d297d4d207ed874ed5835fbf9e16ce917c8d096408eacd54dc3ef8d5f2267b26270d306a38d41690563666f48e61ee053b9b1c1047cb8f4189492149e5b80c38f83faf3514bbb62d1aabc370bbeb64ee417b7256e713e9034aed7b2c8e94645138603f7c31bd9171021b160e6d6192dcf0789e90195d5c7aa6e1462f63be49df001fd45d550884fa7f92eba1df2877baf28f1e579a3bca24fc031a3508a69a0c6f8feecdf0158ae17ec653689ee5c7fc84d1c790f96e48f89c1ce5ea8ff3d877c7f3f20da8f4809d31b3d4ee3f9cf2ed3e7c5dc66fcc28d882c143698e68680ae60241ff169c3e9aeb099ecd5c6fbf4704de59d55fd09ee2161f72c0d38751a73d75afbd9c896848661fd73f26c1f4afc865104f64764588ae1c66071dbc29393e73fc26ce2f77cf916bcd333d0afeb856cc835010edb5504a81ae5efdbbe4d19163ff4372b84f99b2f95a4099cd803b49fc342276d4ea539ac72787364fdd87c7eef8f840d86141dd40c06f14ba1dee3cd7bb2ea741f4a47017980707f03d667d4630f3cdea7e4c037b4cf8786aed8f659ae6b29bc8c76196f2ce77a4358df0d43b4e320c54a734979649d27eff72103416f5e21c5b58e492d6b90fb29f0c687ec5b2620e3d795159ec3e3d64935a9d8604a7d90c77f59f854ce3b2a31620ba1eac58b43cd0e21734b444662a7965112b67349fa2d04cc3c5558660ccbcc290ca3700fe514865ad245616051fff941d493bf0f1f8312dd677f172bde7f4b05c48c067aa0e3f42cd334789b2dda0f426ab0a62f295021745632a996c1cd7a96d998126096eed317c65f5f5e75e0332c6abc349c9c89db3a1f4f75d05efe812bb24bc157d4155cea92e2bc3ac68e23d0ab604cb8b8030abd9e6a88b07f956a5656321ed30434023c558cbc9966d236576c13128c5faeb4809796f69d244460dbf36f99ff22edd9a02c98235db963fbc7e34d1afd4a16063743f64abce461aef7d0e3ddcdf777ef980b83e9ed4c35f5bc4cff0220920a60a22f7c77310a94c158d6c6774ea01138d963ec80592c79b1f22dbe5a7900a4db9467a2eaf90002bb51bb9a26e44d4cb2c223d9516a5c4480a522023b0ccbb24ea487544ee4a665a6ab43dde055147aa3372adf9b4c4d8a99dc815b121522aa13fbb6cee380f4124319510d99f8c4e6bc07bbc0591472a6764afda6a5749fa2c6169bfa204c1b97df22bcf705a0ef0a893fd0ec3286c833411ae932ba18e06aad0204f6828f5a1364d74fd12ff906a3796546b790fd54fe661bbf2b0a38a9b2b2f8a2e5c9e3e10838ce53dbcd981d644b07dc79ac746dbd3ec2abd606f9208ea42a2e86f127d0598f6bfbb3a96c8ef908c9220d637bb5ac967ae2d12c44b4fff32a277413cacfef9e8405e54d2ac1a01c3253883834e8140253dfbc4072b42b3fac61cc87dab89b8258e567e0b775f18e3a82b7035fb7dc756697c9cd0131ba0d07caba32405ab1751993ea1a1842f35f288feb6bd1b97971277e778970bfd79b23e02559884684a43674e1eb4924bb60800c210e2926499244444a8dbc8d21508f78b46532573e2dbf1c916955a3ed3614894e65b57e0281ba7015b42a0c6392989ae92b14c8c282481643522a09de854a274933ce2530942ab09ef5c9dc445febfc020e87de45b12347818e935d4c78ee2b61930c33b52de327cb6335a34c044d4f4a63e2bf4d37615b6951d2cd58b9b8df8df2efc0911c785f7871c1b7f4364843bd065f92425b93c2a9d27bba9e04d54dac1c4f090c4785835ca30cbaa8297f0ef161306bb8f3a6c562b545a7d33596a52637ac7bf55de01eb5831c7776487a0f8c3310f5e486434aecf059084626601af84f54bb142e6e063c227f47fc30e497b2d311a8bdee6ef1abbb93d03b8e79828f0b25cd9b3153c254d6a12dbcdace8ae6bf6e72bf4110dbcaf046d08daae06028959dafdbce7bf330a336256916ec39afb78d4bb68aa6567a62cd6bc6a6801e9387911689895c5b58b172166b3f934776c30c5417442b991a47cca28922bb67c341fef229cc5aed9674fed878ba671c18d04930f35ff4dd24c2972784735bcb44f09ded0ea61ed8528e26138cbd663676dea760c26de36d5001e508919a03539fe21589b9ae934e561611c6b5db86e11afb218cefa46a8925436cafb11bd2f854b99dc1f3ecca1ad15954ce08d32083f0a5c0902cdd46ab73d27534a94168706d9d0143e1a002bf960e7ad2452abdd35ed9eb1473173b4d6e88f0377a434c86280f09327eb05e56972bf89d478ee52630148a58c1492ffb219e8bcb11f5178c4a583ae90f48231bf180b79a54bd011917ea23acf93380b6ef05b39b431b934cec2a9847a33b3431dd45f11a38416e4c9a43bc52a2f0ac2a2844ae3b99fdf929d5c7b040026d50a536c8a78081a28a21924cd51064d86913c401031a9695482f479e888249336a62052a57d31fb9bb4ea0a39a9afffc17f0d977aae3111b8884c45882641724de80b23984027ce4e6e2fb3d7c5559190d770190142ddad929a445b04ad5c4f79b631acaf4e81a9bdbfcffc8544211741300304c410c65b5b7d07c51dbd83e224139853759aca081d619bf1c8a2965c82c1c734a71adf93380e378f7c014ee6bf4790057e890132d1a9fe1ef380598c73e9cc0baacef585ca72eee7c0e0928b0e45bd0a20b4de148e190b61f9e492e1a404317304dc0e246b50bb82aed603da08c44f487bc0458e240c09445123291d64a8a19802bf26bb40c726444bb4118b062c1ab168c0a21e592c012f761b3219ce480205ae25ea90a5230bc7c8b2e0dc938d0366c1200114989e284396d48165c1391edb0d21242e3060d998853ab22c389762832004ed620396bb9165c9790b5b05f12a483d001bc0c501420a27d4ea701be4dbd8ed384208cb27f533ff5b77a281e4f3777e3062275de4803a729d9fd4657e4192a6083ad34d7654ff75478d8331b294fa56db87bf8bddbec5c1664ec238aa135bf68a4405823af7b1f153a6687e8adc9603519f6450690b0a21cb6c0c5940d3b323199ae51e8f3c81c56ab5c63f2f65d06aa1d863d19ec7d7259bd001828fee88f5c7849cc5c47351b7e45ebc17ec54caf33ce9ba91358636a84112873764fa7215a0584e33163cfb5c709e74f7ecc9a3d0dc6f37ea3110a25c1b31e73aa1d6dd757b4c59d7c236fbc20550e0fcc84354586734608b34fba10bad9f871b945998f94601bf3ac162791b4ad33e7a314564028660afcb98dfa10cc598500043ca1168af986c794688f7ee24f26c1a0c32f52c000ff6ae95e649a42e3a70a55274921d4cb0026301700d8325712e4b15e6e68d2f77992ad9f653c4e9265e8f851fa96d0cdb29bb4c52ffb78ab62d71ad3361e5a97001c4f29215d7be1ccdd8766d3041512a82ac7b30fb4caf0f1cba8b00125c9dc0de584adeff0be9075a8364585ae57940431745a050a10c436b6d845a43aa89f2b4c6d0c7876e66bc7a5b60a714bbc3875416233d9a0eeda6b91d73e6ff5a1c243b70380a49085936f732827c7a42256f914fbd9c5028de03eb22dda24cda883e08b9866a4268e46d49d34591dc15450711e649de1c306e9add5e6ddcc11bbefadd0164e3fce2d4e14ce75ab7de477fdfd20f9d0c8e9761827c3b820728c17ee71bfd802b36f654befc49de36fa81650a24e858703c64fd872836138c1a3dd2e7081cf91fea50653817bf245fbc791dfa3c705d43e35bbad2b7191fcf713d4faea5a90bd013bf917d53b1a2511c4a510d58e613393ee1baa58d0d07816befdde4fddccd4012d87b5e9c9c527622b92e2bfdebf021409aba5c7256d4b6e5a71f0e9a9befd3020280ef38814d4bfe4798f01332c5fba6638a1525eb775cad8ab883321a40ffc2b21d758edfbb3aec74ec1336730cf3291d56e110725639810303f81871bb4c1c0e13fbef6a24dc4c07a723508e325ca383e6bc8068dedb58823a8d22a91a3085b69524046b284c493dcc72a6b9711d6bdfc1040b324b7e1f9f695832e3bd996a97129b743309dbc52aadf04d267211098bfa1c9b146fb740d73df8ae41f5a8b9d2f9f3f36c648eb033fdb6b8077e1d2450c5284ac9be6d8196440883170cbc5a009105db040f45f38715caa4dd1d0a39a2eaac9ec6ca59a4fb8d79b1b12c754f465871acc4c3f4248bb5fcc26abbee48163643563796fa01e4d7ba7bdc4ab844fbc160c456c3a2c67f3de4e325e64eb4020029445c5746e95663ab44b68de77580bbd0c58fed7c429989c4023baa2ea3202953a80996494fb3a2239cb2dce74ae8051420f3ca62871369b13aa0894166d9bb76ad9c7654850bf5f6c8512f9d6fe70829a1e6fecfb6e9317edf11eaaf8e1627b2ca5a90b842874c59c4b09d36e62ff31266a3a0dc1e127e86413e1ad75c01fca1896d64f9bd708c88866859b7f3a5b9cfce635953201f608396251ffc77bb0ef03458ed93caf6c7fa8e9b548e8b2227d5f76a9c6374c7b78d11baa18cc7fa0e02f628b90f2ad2af03aa8f32f7c1e624ea650e73bca0524123a9f7dfe0ad09a1657f9abb19828bb90833caa800830d0700cdde9f8d6bc88fe8de9be19af3cde080fb6668524f970291aa9718b4ad6bb93c9ad5c840e9caa9035602af14b207ce707fc119bc73759163d52bde61f2b13bc6a64105e5160ac4d49a213455746e9a489ca67704ad9d4740d3320dab7711551d5d91b44cc3425407c46c1c43acd1d19a8932650ec79ca1a0952b17a7bd3c1b3206bb544a84dff517a42d6ab9163bf95f240841f63266fdfe861c9a330c34e2c530af2b14056f5eb5058e59c9454cc3139f84492a1c08332451d0ac0d91732e90e858fa63e04f8c78ea8475fc868377948ead5204f57b2a39bf6dc1b20945f422d089fe1eaa8065c697f520a6cc417e62b39482f503fa88400a5d170d7f150ab29ba3457cdfe555bef66a72327e7b10e4b20418a6f20ab3e940dfb3603d73974e9fb89e656b9c25535fb3981142425f2b8194217fce545755ee7fd6386435e71d21cf142d60eb47c799349a8ebc944f45e0287aed150e8717ef08c2cc36b6ddccfdd0d36efa0f7cb34487e96b526d79a4ac0efba726c16ed6fcc75ad35ce0020fae820f272ca2371e31b811426b3abb073c5c00d9d49ec333ab152d75172e5ff50cbe80810d92de14f7038fc00be58330b1b92fa777d2ef27b2c9dd89aceb53e3ef36d12a8327ef2cd131c832ee9ad4826dd3781a5b1d4a88acbd918615fdc3956743b55ee118310d45428e3039861fbe044d99d373bf0f98e25fc125e04c1007a018bd107b67f705cda11091653f516de279d1b015127f78940e83c6200e5ea2336b3f3baa64ac3c2babd39c0d9a7d6eeae794f4a184bdd3c63d979cb4799afbcd47ca8513051396457ec71ce702b92e1dc70b9768a2c115c30badc2354e0cc10ec5e85db596901f730dc44327177b7f86702c2b78a83891cffc313cb5d2c30771a5aef78e1bda37b87380b2e6395b2c7fb4891f4201380283b622a09f5851497054aaa2c977cd2830ef0da699298f27f9d844223ab76aebe1b1e8b4bb128de7ada299e7ddc964563de06bf6e7929715283e8d33b966e7cdc36472357b53cc20a455019e26ab99d3945fec449c802620426c8402550d08f6978305c58783d8a853e59ab083cc0f876f139b383f08fba0cdc9d6049874bf1990dd1c1eb09f7dfa4908a0e4c0d0ddbb931af9950b1c661449d43622b9ecf454c11a4a849c57a05486034f7a39921489e109a010215d1a0d103fef9a7b48193639dd4ecc6092f242b1c37344f6f1411610e14b9c108123611f3c960365ba9005561230ec83e42f8c7c2fc007ade9aac4593596bca81c504e95dbe626af2faa812df1c31db7fb91eca6824232310e6dab89331dfe904528c7636cc9b2880b11c88ca0ce4891c7e449c3391eb047b7b36aba480c0891b46b019d3f44a70add240f627f98ad3d630e27b29217e9ff2ad365477be480940a82081e6462338388d02d29e1b6295a488b81b96281c83659673c65a7d93275d216c4fe3356a0a12b315132399ba512bd779bc68c46834c5aaaf1918c9345591c0177ef655613f41138c4d464618d7b9be2a56843b2e66ebd1c2d38f40c0a5fe9ba19a04c881050bc725eee12d251e2d270f826f4ac224778147688faf52493654d52bc4e30fa4451e7a4edcaf6e4fab21634886faf913094cb7850b151c490454ac439a3569b7e007ad44dba9ae775a0ec0a90620204df09fb0f1a84b82d160a6eb10a71b8970b703658216017f310fe2794f08827db7aecb6d14b70fb3f2bc5a99a4290903361c446a51f4ca22433b58c852bca6703bd2854773c5aeb9e4e64793b54e6fcd6c144540aa813654d6cacebe9c95d902e7741d385f35e9162f7364dd9d2bc15f36b9830ea9a0883416d2357b5e398cc2ffa55aeef3e216bd4bd540d5a6911bbcd608907cd037008e77f4943bb132e502f1ac934f009262dec6ad916c9fc8bdc9d2ba2cd8b957a723f907d2631a6e8f1c3be77025280ceff4c197a3a36ade1aaf70ec290c9141482e2e8ee46e61f1e7a36b5d7d9670e028019f9e937258bf10351cb0f7942570f1c0888115d4adebb8ac83982774263c32f2707b643e8777be97ac8ffe54c0ad0970aa882a7ac1d0ea5129b3b376a2de99e0b0b4f22d9233c1d950bcd98e05584fc21489c1a7f4440a838e261d0adf06c7f545414c8511c793217f20236470129a74d4c16e14a6db78d4c3ce3554b97425bc1b62aa99b77d81d0e22b843a10defe1d955e9bb2b6ad5078b9cd9ccfad186ac276bed6a35004018872fa713110b569c68bdba297e89033606b72308850c9f74a89ef144c443ff26dc06a73e87d9f7bc52000715e1c87d8e74bc11c449ddb3836e36646577516ad860634d7a9a1986f88b2e5c9fd8c781c684c7652c7a8161be10720bbbaef14077ce0cbc39f9a57ebcf9c041d565d60a55a19d6533e6e0c4797f135dc3ce1220dfbc30f4419551e4721bf3e1cf2ba485107865e01ca4bbdd88bf64b585e42dbe2f1c03ec905d9149dbf40818605d9007a0b0e106306c143be2ec92d6ce31698d950c798a001e56f7a28babb29d16a54f34377cc40016c1921ab630c73e21b6ab6812377041aaf3f43ff1ba97bd24c25ae3fc26d2c806a80e1d34f2d5d014ed6c1945a2e8a924d968419799b7af3c68000fc0364558b054cf30a7a7e7e4cac0d963f02cb0b077a09442d96a6a0841209c2b8d659d35cea600da6fd695caa5cbc8da063497036aae7a8b5b304e4a4e07bbf3f2a467a3bcf3e7010a4c34a6f91ca2e8a45ce5bb6df37575d5e7decec81a56a20a3804dd7a76a98726f51000eacc8f009014a183880eed2bbde3cc27fcd0bdd8c6e5650a4946d837c84b6b5beebde596524a29654d0973081d083a357d6e44bc5a448430ee6cc576ee902d901050901016b48b9a02c310292b60819424b01872b148016593740c6ce86af580c612fd896f373063a963e0020af40a2395c620c89297073492280c4cad589302abea193218427fac68aa35721b0805203550d4207930a42649cd105f3deb6ab19a2a568d0fb4560c2464c59277e0cb8a1ade3ac12929ded32dc1f9138c4a6b8abc27b397a794d279512e22fb758712162dccaa1c811540aa38a22f3724c4002b5ca042133624c480d584c925d68329a9152d3c85d17980828e1da5d4a788046a81e5920f85662ed830039a29b820a18411b11046021329e8a1871252488221160259c1249ab182859f8e1d664592df84c8ebe4258d1355a85002ceabf923bd8a2027c05a4174fc70f572f5e374c6e9890f574e8d98d02a818a27cea8f9ca615bc116af09834d3455de5ab962798bd70f5d65fec4c76992e60fdec034b52fcd97b79ee78b0c44c797b1570b1833d020d11f96cffc914e051b2ad47cc8a2c18d508f9b574eac4521343eac48f38218c624a1822c3a54b1c412303eb08172c51462f00f6f7aa83833e68c1713b278625df0e4de1bf486862ceebd6fa29cb1c214c4834d059193aa0939dc24caec60a58812a4c9c148dc42060a2d4770e161c90467926c6758d8b13eac202755225b34f661f99920a8378e8625f48632a1ab191f70cc68d14166a6746d1420850a362a62109090191caad09b37570a2639a906d9e2b52b561b8d3f2a4981e4c3a09e357afba824059116303d830f6129541cad0fcb6b7d53afa86d14f0668aa6af750a2abed63765a424e1888580829a984c7865d1a40491571615b7e0c357520f75c803364d3c7cc86a9a9245130e40b2684ae1511f959a681f0249a173ad5378b956629937659e7e7a1926beeb7922c11ad9160d63126c128e414042535c91828b19153a332840512bde68a1520309aa44f1a48a216221ab090e65909861628924ccfca8668460a9c29b5bc64b93104d69924ac081ae0365cac4ba51d697794175404f53192194aca4753acba74c91285a48faf192a28c15202f29caf4f0a3bea4a86564f8eda35299163e04aa54bcf89a7973a1b8f216f3277abc1d07e2ad4651e4e3978f5bca7cac5e9c57cc0b770926307faf983061c284b9d1b2ea10122ab0200a3242e810263add60c4131126707892e606261ec01d9866e09858e832137b838b68f67c89b3e78b9ebbe78b8e3efbd9cb4d296d526b5d22a5b5d6ee39048b77a3f56088c6844913e0211a3189a9045cad4d54f0e58920b5265f70f8f0839b2d38441183955875228d9bafa8af54bed65a6b5de2ab1352d45aef12113baf172f8c1ed269ef4dbad6daf8316e00c13a4b3fde60d11feb9eb556dbce4629e59c34e84fdcd2c498ad0d191d7698624c13222ed0c0056864c0023764c2bc714208ea04113a53b6d547a526b078efa3521367e698e93d5caa501857d22e983964497a2150189b57a7adf920c6b07519abe00dfad3e37a055d20d41ed86b6cf3099b37f0adbed96ab1573ff2717d73bc7d5cefe163db346f4261589f3e1540c1dc9032ca4ba781e0d70542f51be99c4d40285026121a0f7b29282f677695a73c7e392e4e0fd5f53e1cd5279170ae4cc2b93a3c1ee3c98eea73cff350724ba42a90db188cd352d30eea9fb7e1f8e631f6798e1ccfd93daeb7f21c9c1cd7733cc70a74555ff92ce65170c774108eb27b9e72108eb47fdef98ea21c29c79ea37394c778c2e5b8aef21b4054be65df5cb55dd6795c76dfd8d991fee86cda4abaeabe11e90f9d4b6a110ff945451fc4d8e61fc498ca8b72b840e83ce5a9dd23b6798eeb77f7f8543e23e2f8754f7e2078393e97af02b1a63fd27140d7f4cd67b10a86b3c907310624e59dd32c3f103cef7c7e393e4f798e9c43ef3964bba8a3fc033318e94f07bae8bec16dd6866d73df00a23fd2a5cf623e54b33a71152fced76b4cad2f321188474ba5b5064d5854a2614a991da8c082254d975a98a5342e60e28a286d3818fce8895308d55a2bd3129f99cae4581d8432ec45c629092f2968fe4897d3ba5ec6ef084db76631a530354baf34851114442689a745623468c2a86442a33e2a91a9b580613256de7e5422c3c387b01a70e0aa7850aecdc1e650e4c8182990946973c40c4410e102132e3b38b152db82c4ba69a196528b0357c57302ca75e2861e31af16649abcfea844c6489bfb414a4e2c515aa2214aecead1f17a06ec20a126c81009d2938c10bd848eaf5bc07ca2106482f8bcc8d07e8b0e977ab4e82862e7317b2ab78c3a766a63e420a47f9ff3ea7787d23d1fa2d6b724798cd35c82cacf25a2fcfcd7cf299dc7ecab7760119521f314cd79bc1f91b52e5d461dfbf6c5c8dbf5b62fc62681992492519751b7a0ac7acd1386a4110399e9c9e1f5ead1a1d6570f5252e6ee8a95f1d6e6b7df2cd26fdbc64daf2d01e4f147a5258ee4a4ca82183743c4ac0122e68b989a97f379be70d54ab9955779999491c240f1e12b4cd2874003f83088012fc1d4e89cbb2749e77c5402537bb9e4d10893b1e2e0098beed1241a8d4682588e0d34a909794b4a2851e5df566a71903dc08ccce27e7229263293246964bca4c8faf2c4172f2f15e0c5f9a5ca165819a207165c91b4e78a97205f7c30a16eef89f265cad32f50887c8141c8972527d060394c838f4a5ed87889e243a06d8548849010ab045a162a6bc0302d11b324c9608a14b42bd83c754183bb5c615570c3084bb49c10833748283c31637245520a487a90c10c30e832a68b13320aa11b7a6ec81f95bc88c142be5e5c4e985e8820f24a0af2aa34580ef332e54320fba64b12125b7a86f002a4042f24f8f1aa3d57bcb4f0f5a392972594cad7e079ccb2f448e991427b70b85d92f87b7b6ea821e90ff0510909238fe3b456e290e5797e11983dc622dcf830ba0ed6d36ed2264ebcc786245cae70a1b2a5e9b18e733ccef9b7e33dceca2be92a30aff25c53da5205cc115b9e7a5e91a0c1a35cfbfd6cac5ca5c2496d97b723307b94ca533b3b3e345760b85aad44982aadbd50074b84d58ee76c01a0a057dbc68eabb66cc7bd2dcbaed260b8da3a58bfb371322b7f3c3d2c160f0f0fcf8a67a5a3a3a3d3630312342e5e3456618cb1ca3d9574bc05ca63f752e00a0c45f8558e766977699de3caf9d13bcc9ef215a883f52acf8ec2f868c55aad5cfbeaa8fab0824460a5c2e8354a2c7a98e8b07e94d4e90e775037aa2ea2b877d4975146db3db7dd9f609843d6a4d5de2da7e96121d5b3820e336a7e3457cf76975bad745d51cf1336eb87f957f3c506ea7611d11e285afaecc8b0dce83053b7181813129450641489743d945028cae506db3763e5d95120f521da036a678138ce03fe0ea823a17c50565448872c21ece1061f0add9c0baa2255e11d6ee024b7cd1e3fd41114ea080a815ee551c6b9e7128dec404827b16a54caad23e83dce33d0dfec6d9ebdbce5fad7db15cd07ec061bc060ee2c96e737e8511eea087abce180726b107f3350be7d36f2a35c42a1302490123f2f1d7ce93bd41184519e7fbba2911b5caf686407d109ac1d28a3482409058d8f741f52a8bd7faca19065c8037daca500e651b0f206f8582b82b4f4f93b9f4b1ed78c40a9a9e0545321a9a6c2929a0a5b9a1eab70dc93484b920a8f57c71406cb9998f49244626a42d260a89766474b1269a903659ffb781c31963a1dd30ae55f4eb7c3f99fe7ec703e4a677bf5b08758625cb70ce59f63b9343b5a92484b6a50489dcba5ee0c6ae5a16ceaf2e65f4edde1b7b75a515b4eedf0b7255368545d3a1269a9ebc21ddf5c775f289976b6aeb8e3018d6a4aef5052e92a13d35cf281924907c5b4a45760f61c30e513e4710ab21c839b0f510d6a8934613838aefa248e941fca7198b6ceebaae791c2508175630a83c2c0c1d9aece37d72e996407d8b74fef5a79c0487f6a2a9454989824125313938a0a255a5fbef4a0a5676f81d161febccaab5a91253522503e7e148a273425d03203262a2851634a105140b1a469090bb15a6b45a07cb55892d0b057ea638d48095f3fd6883871c28b1e5f5edcfae77417a2c5702d3aeda7031169e1a70731e0e7122d3d46205b6c9bc5364a29a517744db7b10d74cd4d23f6b8d6efa56ea90679489f94d2ea3c2a8dd563f48bc06c16a3e02c5602a70ff5d7139abed64a00e4ab4bfaf51e47523e88b1e9d7238dd8637a8c79f4fa944e7f6aa43f3fd55d2c884599751e76834083972e6f00a13e670c5e9c2fac8dd66ed8c31ef6b0473d8f77cb383ab9b9711b9d75ce8ed23943f99e73de7160886bdd32ea35de14269355104072aead7412e0634d081321436c96ad73e9bf5e65ab36f19cb865a526e4074e7afa39e79c5a77dbb5951e510bf286550bb2a6859616fd49580b4e49638f8fc3d5cb3ecfde941d7f44d9f10e65547ed8bd0c7e8e4122d9e63263d9e69d7b136f18cc2ebfcd3328b31983f1ebb7f9076e9ec1cea97f1c17632d4891284eacfc62dc18c36e6e37c757cbcf868cb2e667dd8244db75d9f50d9459a7dff5f8592ba3becaf2c6a035c495161140bc5a4000f1722580a8954048cd04134c407dac01c142b66aaf570d8893905715ca2b1fd5c71a10263e7c25d136db15f84d56fa71a6fbc1fde8a27f0c81fad143ce31a26ba2465353a395d02a62888607110a19182186044c1411c39514b871a287266c881cf1c304abdf6a3f9efca6fa8d8819b0bc2fae129cbc12a6ec125478ade18181ce7ec18e500b5442db0d5f8d042b08b582c02d2c34580ee3f9580352e47b3ed680e8c0da923ad312e28856102e3c3dcd8f4a4f5960f1a4129d42a58975a34f4bde40796afafb7788960e4f50fee7a3d2d30f4f3c5420f52907e6a980a03d57401316bd35458799fae674afecc6134675ace68bd03acdab9594f2f5caf384ad5661f69151e38a1d6fdb4554ef7e7d68dfe69f5e04bbb5b645454a99650e425606efa3d29b25d363073be41bcd9ff3230777c77c1bd69f4efdd2c7f62392341a51c595d21636056b74314fc8c2c8cfb0858f4f25374e7eda2b1fe6fa6608d00c6d5dd6a832a75bda5d837af53a3faf12551aedebb695843901f9f4f76b49d1f3431f1fd941fce9357220b99f15cb744a5d462150c37c217fb6a49c2ed350eb928ef218f3c0542a3b6af74079d61e633d3cff1c84cef5e7751e987294e34839caa5a3f69114b9519ef751f6d476c994e3f0529d7ffb28e59d1fe1b8e7b3d82c163f9de802bb4bba67d025f70e1cd93566e97d7414f52c86034a099fa43c95f2d4f6d163c8b5e36c20fa439d66c75bebada70270087404b56fc4a4cfb38771cb2c96c159ac067d493bfa00fda11e02fda19e77a422a03fd4777c106322d01fea451fc418ca3f88b12f7b2869393acd97b28934d2644993f9d2bf947b5e05e526a1089449f487fafc76e048396a1f1da11cb52512fda1fe418c0141a53c9449289f5e41198b6550c6e227f72abac03bd4c1a2aeead26e57dd356a0872cb36710d2d19641092e1d54a41de960a3aacb9d69a6f9d4e8596be45d35d91a20be973626935c115cb96916ae55dad72842895ad265a7aacb5d68a5b4d628cd145048254185cb76b2b9db5565a7748e9846165c51ba63fd1d64a71b473d7b971a99256262d26b4c524c618638dad23ad23ad23ad23ad23ad23ad232d26ad232d245a7aeb48eb888e2f5de31869bcb5b66aadb5d65a6bad75b5ca59558d6ba52c68e934c668239eac5ab75aa99cb4d66aadb52d26b5563f7aba75a4a8a0e52484244ef0830a351308f9b1f304930c412061e9e1ca0c9cfe7a6ecd4029a594524a29a594d2d85a4147a5364b4a6db6504a698c944a17fd32f7de7b63f4f0de7b6f8c1ede7bef8d2d253a2ab549623384cd16253660ac8d37c67baf087edb57ca8ce6d38db10fcd3beb0966b0d4c6a99582354f2d1734fda8b4c6cd9a27d65c212b0d72cba8eb099b2c1f15b4b3e26a75c6e98c1aa7336ed6d05aadbd77c315633a25aed9debb6d1873376f18735cd779b9e64ca7cc38735de779397f60baece5fc7d28548a464659415df9e9a9a494959fae75969f8e535355958a4ea99a3e8dcc223389915964b630878c591af3c4d298334d6024928c22a9482419455a915524143792e64602913437b2881c2202ba258c593c3927a5b55a3929add5dabbd56da3536ed5debb6d18735ded3a3a65b7618eeb3acfcb9d97f3f7a150a90f954a698d83a352e5ac563a3a3b3b3cacca62d12959389e2a5330f419f257df0cf9de2a5356d8e2276cc266ddac099bd479fcacb562d021abd622073a3f23025c58e365cd9524a5169318636c400b0618660b86edda4ac3b80506182c17aff5029ead17b66b2b9dad1702b6cbcf1a636a56dfaa22c104e963d2f42f14124f2ad1384a7494898224d44d7dc26eb957b62a180ab7c448e7c653e26585a6cc65497e3e35d496280bc0d400297b849e41ac5024b2b4d5f25389d3cf89a38a13b2773c69430d3525576a4aac3ccec79a121b644d490b2ffd024a8a7c114f4fe0e65f55cf18d2ee5c5b4ee85c3190912c2c9f6d93b4dfb6558b49b37c42d83620c207dc48041b4bd2a278f148c7da09ac7cac25a97d023ed69228796b6b6d51a1af53d08856995b30d0a1be812387ec40be9d6e932479cd8217a76c07953b7c4dc880b6ad31189048524ac924659c4e734eb7423f519dce5434d58986b3373b6b63d67387ab8f3e7987af167f770884ebbd1768ca2a468775d65add3d6de7c4605883fe62cebbab23e8b95dd10cd1ed5aa0181873f3152bb6156fb95d49e79c734ee976ce19639c71d20231819a5a1220352462829cea9958d154a7ead475deedd845a1bb57181dbe7eaa873058c7a29df5ce259264a20e980e985e5fde7455807a0a88099f9b301db5675fdf0b3bbfb9734e227d57fffa10ddba59cb78f1e5a1b7c3d77bfe18e3cf6dca6d0ec67987fe2d323a6cf1d6396f01a472ab72eb0cc8aec201b57fce9e42811b83a1e7d471dea1e7d7657c9a34d378d79fd89c3e0a153de0e9e9cd7b1ec1302e097d3833f294db23087d48e3e99665976da1d04799c3bc432129713e50088c9d03c5e89c630a23b5670cf17f3bcc19c7ea04925aea7a518ceb5c9106ba1b5f9d827857d05afac3b77ef6c25397119b781eb3b7b6ca5777d5a84bfe7a955dd77115185e572181f2d5b92dc72b387b6f66cf6374919d03c3d9731904436ba352b7b38f1fe5787c0676ca51ce23c29ecab17f377ce6fc3e88311f1ff087cb83c818f7cde05838a4ceeae17cb31ff7d9b8ee11619fa1721bd543ca39b75d353c3c445bee720f8ccf7d7973970f4d6c9d05ca743c7e0677b07cc7eb0159a08deadc0eaf6bb7fbf321ca0316c927ba9ee33b2e5007947d393b9c7df80981295086da9f4b46bc42f3acb5d9b3d9bd1d5eb6ee591e92f3b82c3f19d8ab5bb0730ade1c5d60c7bb4e980e7a7eac2101f3d2a34ff7c24ac323978ce83f34e557240220259080f631c2a25f3052207e8c2dea5730a431e8ec2720bd6e5974ba8b8e3ea45daa4f98c69a7541fb74bec0dcdd58d5525dc14e046f4475b0ec17a3c378bbf4eb7440f6e811539f5fe78b961911728490414c7f584cbca404e3b7c8e80dd41c17084104599d4aa83367cf4345f9aaa8e8496f873a5e9ffde3e6d7bd043fdfc0221f2f5dbefca4cbad63a0c3a826648530bd75464797497e4afd5d87bfcbdf759e9a9fe71c186ea3fa77c30164c2a04163c4d113869df40fbe8206e9ec798cf345768ec371cebd0ee4289d13a8ab8f03c23c2f056effa1feb3afbddaeafce39cfb627cdc07d6ef3e09cc9edbdd5743a6c0fa1d9802292a05ceffb69c02e5520a0556dc840e2b75adda2a10cf1fcebfecd3a35f8c6d56a35ae3014f4f4f9f3be7c0fab5ab915e3394524a29956ec31851232a068a3a5b501855a30a46e62a5a4c29a5941e02e568dd78c16464971e020d512af4390402c2586b20cb62e11dbac3604039e6cf746bad508e29b4cf84cd2a3c6997f06c11d66d87f4252fb8d2219006aad6b26618234b68ecd35fd5a749bb24cd25659d1396716cfa0d86de40bbc30f54a76e54dfced95a4287f837595fc012a49efcea4382a1beb2221f6f3d3e0563bed2bab432aa53599e330c4e79fd8a513a72c07209ea57f66b446bc4a75a7da4af70b6d618f3e4ece8a87a7ce52ced5f0fc8c2d831c63d607c16589f67476795a3f2940f511c10e5f68bf1a5be94a7507e511f58df4ebfa0d5c192364dfd5b6b7ebdf23c646117000a3a5553a84a5f7bfd6ac4a7a7a7a7183aaf58d1c8ce99921489acfaed3a97327fa094345e4a1f71e9f35624dfeb76c7b9e5c0f8db08af97e56fa5d179c2b40c2d343a7cbd601357697b3c3d3dd5ea8f9eb49614dbe6d487aae7c8018f1651084f3d6e3941597561892207a8c8817c28bfb9ab86f4cde50ea9affc557d967cedc890e7bca2dcf36c969dabdce22f06ca3b30945d8ec7e8a2f3158872da812bb7110365c3730fe7b9e5ecbd1d56af20eac60f199b7df711715e6528e77c058628ef3c070c517e5d0586b309a09c9b3d8a6873ea2f1ced140cbf4fc6c59f8dcdf1dde1cc46750fe59e9cdf0cec36365ff95d6d570dcf51ee39cac1f81c47b7ca5f377ec818f51cd7f96c6c9c537f3d1912230242ecd775529e0386aa1dcede48e2803294cbd7a0ec732eb5754014d8ed4c73e4404a15e8583b5285f290afbf08cc7ec0c9f29ba1bf18d52b51a5d1e8c78f483f96b4c78ef315c9a7df51149d68b43752bde7d428bf67e3038f77143de06774c1b9d1fd1d9d1b5d1b2178609106450f78195d7078c7d882db61f51b03571a43d56f0dba65f7bd034d980b29633e7d1f729633bf2b97da265f51eef456b565dffcd60faf534a294da241f7abf3c58d2faf53fe62dc2f460fa8fdae84288cc872b57c3c521800b81e009f9f0ca73b84fddde1066fddf3bc9ca5e7ece32f0fa5eeb9cbccb3655e8fe7f36ae0d7e367a36787f3a76bb0c379a50760871b2c016087b0303e3b742ead1db2b0b8f6f51859fbde0c660faf873a823c9f7e3345cd8ea40c7b8428379a325abd6dcbd27355f3a88df26447b9e761e7db0eabd3a37c3ad00fb865931186108d1bded7bb1dcb2c2d85f92d72f90dcb6f765b8010fdb11e2260873a82b60c6ebff27de7ed6a39ca3797503afca574dc7788a85f1b676407d765cea18fa33cac4ebff92adf95a3aeef70830fa393063b8405600360bbe6a6d35d3e1be51afcbe19d465738732d34b77c863b6ed5cd7b99ebafe5dc777bb7608f428efbc26bf02033e342be89a2e6946dbdf2d8b31771109dbcf1dce84fceb188b31bb252d46d9bcf41a6e3f6b443634e60b1a473889b0f882c6114f222cbeac09a0888e6c3e7e188f783a051036599e4e8005925a8cb6608a992d606850819616c418c083153438a8e9e264436c36c3932c9eccb0460d1555c4221721498e68938689095c62948512c41c09220c1b302fc4a80351181a0071c50e3f8809d2c64c8c2ee1344586232cac09824d8cfa108511634d700e5e9c5ebc447aa98f66d55a6badb5b2340b76c490239668ea822b0921212530160ab91851c510579088020a0bb8d10203123a7491418c161734a179c3848b6bcb567bc19a325fb8acb2fe58d382464b5385cd1ff9d2c2f4e1ab0a11516c4bbce0054d5964303b81124ec4e002251eae20d1f2820650c4a0c58a15f4304498153cb9bebcb40cd1a2240b16140cc18282129654f1d2f3036aa62e2456b5d231408c503b9034429642df2c4846fc50cb12c502b20b085d71162f5f3fd6b2247d587f3e9193ca2429a594725223f942c4bad1229ec01203a729342065310326375dae11487f537f99664b8ae8c1861780d801cb1697955a116abe001f6b469cf0f763cd881f2d109249bfb9c7ae47e729f7c01e5270743bd29fcd53de637e2e3baf8ea3f33abd736ee3c84ef791f4ec9fa35c0047f4d59afe6c1eeac9e338da79dc8fa4e0d891d23dc721dddb4752a4731b07cb53fb28e5ac7d83fe6c721f01519e8db38f86e8cfa681f691d39fcd773605b3a3c0af7ae7382ae747daab731b07f5bc8fe407ba3df791a45123475270489ffb88762405c774b98f3e9f3b04fab3b9ab80723cc6e2d2dc743cc6e4b6f218c33ae091941bab7d2463da713c07ece179e72ab087141cde964de8cfe69df7f0acde5c0042f4ee7124e58318b37e3dc6baddc37a8c8512e937f7640a8c7d79baac25d5b6bc17679ca827ae1bd73f88b1eb20c8987d6da9199ddb0e4e3488882135fcf6b1a6e405054a34a52b4a463e864c47f4eb4e3fb942f8f2f1d8741a12881cd0cffe81eeef1e21ba24ea46e89e1291e4e794e9a0511231a4ca112a9314dac73dada4515c535c3ab8a858170e4ab870108a2e1e8484b60dcb99ea002117121692ad8fb521929efb581bc2cd0a431819628c104b6faf9c79eb41d6bd94f4191fc4987497711f49b9213dbadc473226dd93df0d209b635705e806815680fae638e8f4213246f7d10f199bce6d20411e10a33e44c6a6e33a2b6a888240ac03d11feb52701c49d94752ae1f49c7211def23b97d4b0f75a44bd5871a9631b59a14ae15504921ca90d7144286135eae1caa6b87ef634d882e425c09c24b2d882c8f3fd682b8a23fd682a062012f4e4f1e21ada5d4523a6bad75ce3a279d35cf49b1dc407aa493d638abad71ce09c68f775222eab7f372a5b4465a6bacb5d6188be8db68a98c3df79e5eb70dcf85504a29a9d33331c618638c31c638b97871663a9ba6ec20946e548df06f6e54bf93219f5ecae7dca3149c17537c3bebf2eb7c61ade790da3a37979b755d2bebb4f23efdb693a86049371a7c58f27abed8bcbb77dbeeb66ddbddacd72cefb66d59be47b4651c3337a0b866dbdd2fec5c5633c735d19c4f9957415c6bad1b83f5573c1f2a6f202be5e91aceacd068cf8322d168b4dff68e1aedab1b755be64744d7d03e8c49b4af7b476e405d7e2bb901f52883df7c68e2aa135d50d7caa3abc841e774f30dd4ab1a5d4ede40170d3c4ffdc6e8e282f475563b1d387fd539751d4db39d4b76d7855d9e8bebdc65bb2bab77d5bf1a445b92931fd6bcfc6cccac18a13d8fd90f48b4efbc7e326815da5724dad75d44d7d0bedba82c37a0336859a1bc2a87ae72583dad917ae4aa7cf6aaefa6b1d69ad39dd6dad39fce1a85031566e06374e1b9275571ad5d57bbae7aeec98ef3bbe5a03b5f757bde7bafe5be18b7e643edb3d7f9a2de5aed47e4f9f43c7a2086417732cf55f51763eb7095de79055d1e67b1bb24fe0b161d7dcdd6731ef39e879d57afdb21eebcd67c58f3dee63670886e07937894522ce7101f864cfa476fe746411787b74b699d7b2271bde07a41cfe9438b70d0a5444f9f0ba88ea901e2919c493a83e2f4e4898f38ab1a01a027bc38b5f4587b92e55d78d1e30b169d92a04643119bc48739094da269f5b588262dbcf554f5cc797cd7f5e8ae459eba4e94d7f1cfa94f2b9fe33c4e7dd2e0e6c15086720572e07dd2c253cf6952e48531567ab606dd561ee23cfe66e818391bce630ff07820c779bcfbe40a74f5f0f339037ffe7d5f0d1dffbcbb1b28c371ea32d433b4db9c9c4d797688f39da37e85e3819755c7f9c07960e1862460e003114d6231fea47cbb2197a29e0243ee43eb385b070cb9ef3aeef19d9f04b80fb91921f81c72df85e0bb1d56afae7d887e3be4de6a504665d643f01e18da17a2fce6758729b7beb5f0d9b595cf7e5fc8f2db96e547b4f9e79e0ec8f20aeef807ca76fc8bd10587e317dc3e1bdbfd6454d7cea5bc0343eb5eca793ce53ceed9afc6607905b37fa0ecba2ce51ff68e73cf7e366828ab5e5de577bb585bc6ec51ee22d24979eaba0e9871cb79401d1ef07aaedee316bc5b96dd7ae5acaf7c887a33f35420c65ab347f98f1e0f12230264ac07c42c59f6f839a02cbb87b3855c35b2a73c7b6a6f598ec0ec071f1198d94f02b31f667cf5e87b705e411fcfcd9e723e6be7b9d17dce3d2ebbd1fda2ed637491ca3d8a3478ee87f77c3cee3608586fc49a3ddea1f5cdfa95b13910953a68ee63cdc9d2d38d256bea373517b230e182958fb5142c3d8c8fb5144079a0a0da0c507e7ef9397fa64bd7117d44c75a0a8cc090b17864ba8479f99a13353f692cccb985eb889659b2e039a9f97cac3989e204054e88bc3ed66428d3e2634d8616047dacc92064f5b116430c1cf0b116c30e31b010c39036a833790909d4951c725ca8c180a4874dab09d7c75a932b5289667dac3589d272a520b278767456392a1ebc18572fbcf831bcf8188698f424dccfd544538fb4bed3176d4f82ea4b79f423e1e6c8c10eb9f4246454e46087a47dd1035e3a8d263f222d7d92c1d6e3eb9934410195f76697da4fdba5c6a037a8944d96653d0b11d588040000006315000020100a87040281502c1c886aacfa14000b889c40684e1749434910c3308881188641c618628821c0186414293a51072aa40c1dca5a50b039151cc4983078ff5fc39716d159bffec924f2321b75cec055a678a63343b1155e29b28a0559d0edbd580eee8d709d829e5c652f7af5b041deb838b1d72bb4b74afe93367bbc771c3b09583e79f5828eb48af4abb1c81bf367723e692b52979a323245221ed3c301778a22a2f5cbaa9334aacff71181eba7936cdf9e5b4bb055c71006a96199102b5bceef3c6341e8cb0b0737e8193eab3c2e63cae9608a7c38c5c5701180609ff364de7038603d6a8cee25dd880ef4aef58461e6943f69df0f4450ec49a978ffc0d12268ef8cf8407cecb6cb198916a7ba589af03396ef3cac7023e1dc8c140abb4c1bb805c1e6b253c412fc2496bf8f8257d7f1a7e9e9e552e1d80fa50717fcb533f4eb1d5522b17fd111a97061fc4c9686c3f3846af9759a6bda40904ffc2c9b34a8895094acfea3ea5c2aebf3a7d18a2a20a344a87acaa3a6e9d9a2872877a4890cc692cd3e688e5196f4ab7d904664e78d2a4097670c56afd0989da07f63a7142b10f6520339e3e88ac476a081c2c16f100e7348da28bdbbe09b3bcce9b717a55b8be49b7a953e709f5c41c7a2fb8ce560212c74a635892c1277e7971b1f1e6c96621209771ceda8ffa24c8860a9a5601d21f8cc943f176385a024f17318566af0880ec4c90f84f0d2eedbffd69fcf520a3a0a008b9218b0bce16a8ac66b6b8561075e5ea68583845842d32cceef4a47b8eee55467562b525e99e661c0cbe4a8d61c3ddbfee40c07309fb8adcbd9eeea47f2837f36de43831751d950532a16cb6821a24ef217d3abdbd843e627a513d97a06e01e0485db54a8efec953790df2a36b0c34f33b6be29d0571fb477db0c9aa25879bff010c23912d95bdb3c495174872eea7be0cf650248d48bbab73cd753febc7f0d5eef07e61921cc480ea7266ce952ffa928d026a240cd79d82c3da4772634f9b7ea8f565fe2f81aa904f1b1ae85d0fac0f06821f740a36a0ee96112fbd53afe3524ab8cab601df5be6795a97300168bc6d2222088838eba561044579919745e9e6cba305c1cf6c2064ab9a622a803c3da454c36a01baaa52a8e9fed1faa349a83eb9ab9345138d6fa7e4a74f79a19a53e43ff36a67c8f120fbcea55fb906b5775486b67d8207c8104954fca78510fa275fe39f23976b5691e63a5f70f45668402560203b93e51b80ba492d47d9f23cf87439c7df382853425e64184c439035a2a83e5652b1c77c7d936fb35816709b40bb300f770c83c323c3344487941d0e67ffd1c79919d9aebe8fdb9d8f42f7aafe046cd331318dc0e031fbea1f307edecf7b399816b22f6a3ca310a841f8579afef0a653f23245445d6bcda2165c82b0026ed10e86f35cb14a77fc16426b0423a5b3bbff1f0322fac09f270028c1472ba7ff6fec610f7c4cd151402e432b4ba385013f05a81454da9d29a80318192e1886c1a6e088ce04e5a59fd905d8f97d8103c65f4289c1fa064f5bef4f12d1ae50e4c32a12e8702fae591e137e658c73d6e7a4208f087bbac2a87ca8fd927004e208df032eac9cb001e54c519a490348f197b4fecb27a4a2ed1bc9ac43ab91b013a2ff63bc11a301003d5b8d8cb23f54ad56b197233239ba00bbc84b7d88598b12cd8e8d704b2a372993bc00fcc11085be69a01178cd308501e5c4092f68b4c6d20101931d828f0d42aed0d8938b5cd3edd6dc94150b554358e429d36001c30a4270d256c680c872d95d559625ff8f9eb7e322f1398e0ab4cf7bc86e7fa8d62b0716876018f80cb87f058b7694a3a39d4834fd3d97b0c27dabbb9ed75e2fd6e68ad40689640f64f374733acdf3a641abb9b027b784e2fdbea026ff4b2707fcde1fd849c49a0864c026183c78898a1efbb306efe90640063f92220bbad95f5cea77038cc0b0e1161dc8403ab156cda629a2cbf76f1a7d7c940f4ce14d5763bb1be2d8ab1596912c6fb3eb8d58fe8349a30ebd1906e6654fb5c35a427d3ed632c08828b0985689564779b01f040ef324d654182808a5e0d4bc6bf6e22a0c4e467c9bf9b2376d1c73d527cbfdb0503dcb3cc5d5b3e17511143a85d16bd3ef659dbd652ce1b4462bb8d3142b503f93088b3525ca4ed093767260c9c70675a534f664850943eb2bbece5ba54b8801d7efb9f9106017a3cb472117b403d6b4b88a16313be153545fe5001bdeac1416519eee87c81101bf2e2d57d26ab5bbd0673500a378f02d4249cf459c0934afabaa8a6450ed27ebfe4c12ca7657b19bd54e385baa126decb60b9bd3fa0114172dd08f071cf374c3272518f13874cf7c82329fc9657a5e8b514c4f11dfa201b215f1ad402f37e150deb6264a81cb1f06d99fd7957496617fb3b1c854c8cee828e000507f0f67cd1d16fe222bcc531b136ed4f588b798e9af0707f31ef8b9b3402a955419c7e20699387b9c55c50198f929ea14781c038a5f7c396e51e82641aa681b40edace0c5da21ba9a08bbdfa53c74d5c6381bd510b199d5b457c8810c41a814c93a16873a0822404c303601d275877dbd83dcf6ec53205e088713825a25ca6e23de70ce15f9299b6f76cec27a58fe960d23c62e0839895c79baccbd2726d7d5eaef457673ca840a3d3f3eb73d301ec3a216b15796f0f4da165cdcc6876b830c310fe54907c592e647566402db7d2d02683646cf781bdfd49108d48cbc2f11d587204671cc6b97326966777b8cf02f98b753405778cabf5f29d8aac705342ed421c8ecdc2e5ae8c531dbdb7f2e8149a90e3c2d243b3f1c89c29fb156e5edfab1a0555045191b06b8d09204e0975ab4d4b0825c97abf344c8f8d0ba592966be122678f147a04665077502646c2eefc934d8a25fdc18dd1c0d6a6d6644a89d5e05760cc78486c310242d71d129fa7240bf829803094dddf51115b56e967c8a9e04b4c58376d68245410c226c220508efd84b36ce4d12d89a7f537edfc42541fab4c30c848d02fe03fe8b274ba763c655c01988c4f8c8489333bed9c6cf0e9adb11ba9b8b7322d265241ec281c149bf006036c12e4e70b4e9af89169c9478df4bb86b42365efe74838fcaa0045936a60b41d263da1f22c152c8c3419817072a4cca6d77198e1ccb8391b37e763e06cac1c1d277038dee54da05ccb332e92c8dbc0900dd8491470ff035b0a2f3d0562201851829426b84e4ee12e9567bb238f26a3007193c629f83b2e3ce032ccedc106273da2d681e1af63cd8a5f27985da2a2a21d99154433153310053528e816cad37de68c6df23b06cddfa5e913e1c6bfda9830f11c0c661c576541c6cbfdf234913be05fbe8c8537ee9bc933e40b2751ef0e1ff57f8718ced07db638356c580520d063dac26b7e616d33efa8605baa771aa9689a47a9cb2e31a2d345b598251f638d5051926b325502491d6afd519d0c4051016b4db4bf41f39878987ba1d8c263a487703de499f7eb9df554126777987120c234d086bc6ec03006014bb46f296925588b308d6021ca287feef770970448e2528c0d1697e746383c4a99d1d595318290e4680590144a39fc89d20a75e44467d1242b3b7720772ac937a7fdde74648f9ed6d4fccaede679a0087098c6d089682646dc45a6b106c5fc3fa908c91a672b248f3401ac06478ece07f3cd439b9641eabd4f8cdf7db23b071b286d46e260d73fda609159c390ea030ce39e63eeb7263d0cfabcd58786edf010f3cc88305389dc0e3d9851682d1e31483c6a422ea2acd5885e143fdcc4d37d5c181ac67c94290f42e4954ef9ceb19cbec18578d2a0380e37c0ba67922134a0bd299ec9e7cf0958082e798a4f72a74839bdb6929429b3e2e446fdf24d0cef49fa6aa1afdaec6a318165c8b5bc5de2a8ecae6b0104be9dac24abc937aad9bc34048945bc5b4114162932e0097d462fe28e0ad790681b3f542b4537eaebe952d8eb8251c7ec3859bcc5c19e3b1e947e81b67c9c89a2af36736b98ca11d9c851445afda5c6707694449861fb90d8607c142a2c5f0259844dfd2f9b334937778465f753929a8b96b0bcde39cfedef72aa1e43ab6d06174a3c02da29109248b53a0880842f4d05ff43b9e4342105ce5cecd74d4a3de2f2aa9b3cba085c04a60e4f07adcea6fc7ad521ab2103f52229a03fa64baa1bcf49fab1064d0ddbbdae5af250e5c1a0fe84116417224af77430bb866ead24fb773a546c4e76aae7acc0a503a08c8b4bba01f5f7da2ce0383895de9d29b4022f6a91ca791419f190ce8c3d8eb254d389bf8291c9ada01f3b60c7f9e0be3afe746d890ccd9351a80c18d683b00ce7f2b9f41ca9ebf0a3168a4585c101fe1cc91e131e68e64057c33f1ffc24d4c1e5c6b7a2847a82fb30f57b95dd759345f0a0314abe0938a044ec67f18762d0caf179d277ed88616acd4608269abe992452f35f04e29fcede6e731707f1d9fd7eddb9092fc5bc294145b33667627d5713f7c8b9f47445b45ddcba04b16181df666e83b66e8641cb5db392a3ea9ccfcc96ff06c38ebfdfb3e249af1233538dee08c761f498cc4a64f75371c78329304357857f10bcb5d58ad22217df30bb4f299377de99d8e015db7660bf6799eb70facc173b00a2e32ebd1406da11cdd8d6e35ea429b51ea3af2e8f9ec861e9e3b633f2d284f561eaa1ada939332fb47c271407595773fd8ec7db50bf71696362a323e13d50f1f142530972b3f1b9167f3155ef900bc3c9377aaaa641c00f28bc47e4437ed17104f623842037431f78c52a4c27137b0fa29599d67a17143d230f8a62d9cb8a20f68ae552d11cbe3da98ebc756fb0bbdb1c1b5848454b8a4db7b05404cec4a0dca4e46bf1431fd8b883dce8e96f225fc66254d4288066ce90ba40ae7fca8d4629013d18142522df4d57386af1c7511870a8234c7b0cffd156c0fac517ee240c853ad2fb365de22003f331f5430e47601093e6161a246b06ac49f002b9eca4dccd18a12a0dc74373ccc7b21260cca39010806f35fa595fe70be40c87fa52c48885de0ba830c1e27f5e480b02a2d55bc5100e5bfe1c59dd14a738ca03a637090fe143d3f64d2f20fc13d5f8cf4ba3a12ae4554bd04e2e6cf28ed6cc7e49a7f03c7e1814cd539081b2380e14f27f9e36bb3985bd9730eba88c1c4821bf46c960ba03f81f918a73cbd9827ebdf641a377af1cf0c5a502ea91973745d7a7db6aed9321c636a883d77f9cee3d213e81d96cdea873a4f2ecd2afc12f85644d9e6d33b4c84261c1dc6e794c3cae4a4dd28e1ccf5956b4ddb5ce63dbce880fe16ad4ad2515f4df5802b16b887b9dcfc2b67885d6e74ac253300fb65bf5d30a2d620cefad72ff6020544a0a785b2097c518fa7a0873d66eda732f94ae37bf9fd25dac39afbd990c039e752a634d42efca0bdd4439af7dbea004420260f09432f67710d10baf53590e2a38cba9ed9ef4b42e6b377f48dd937b298bc49d15157aff09b11a7d760f299dc051535bd2c541d18b77b1c4a3414d4f38d6f42440a6cb6b753d49f0cc056c684f1299049290bb142b9b717013b2b27db8a8bb9efa3f98417cd950629b70a50fb5389e19a15af36e2c5c476d221a20331ab799af69bba44c65c970e4f3f1b209033ccdadef3ea665bb304c702c4594a6023cdd9b22908c3a6871188c3580a529d5a36f0040da2209e43b7b18257a059a88d28e02604561d03e57fbbc2555067a6a32304f6e2a8d47a051c4b1e2c2e20814df622d0ef695e298f6ec57ced736409c301dfa5a5547efb80dad203c866fa186cb0a9d5da9152f5b50453be609746f621b2e31b7b5d8f200fef4cb27337792e057db51d85d0a83aa55f3b94e7e01aef84f620602df280ebd04da979ce2302a51f65ab5816fe5afe127a91a6c0385489ca1d493ebff843d95808a31f0f56547797e9146d4850f08b3e1d914f56fce95fc8841d168fd46c6f45b46f67a6e32d823d51725518a85f14884dcbedec4ebfc6c4bce54f0cec2e5a0d0553bc59baab02ce42b1bf1cbb93c65164f24ee25d5a0b8589729432f1016517013e8487539795c3aa9fee0e1c955386fc850d7f661c181636cd3f0e84a38a6de5eaa89f5188107c807f93535532d334ad029f5c6d7dd560e4e8162eee37b0cf7789da48e1096cfce3633b854cbc9791ef6cc3379af2c8a666423019c358feccfe70b5b316bfee1c25c44ebb84ee8864b2e3e80239599e09dd5e68c10768c9bcb5aa10c9d0b4c4dabe6182b33dd20daca5453d1fb0cb2956fc0c823b1e8e97b8bddc715c9c50ccdb124793eed870c2956cdec49da228d92bba51d01ce8c784b09e7647948fe74a4f4f818e6b007f14dc8edc3047c24045f09c567c2e523a1f94f08be12acbd3221f0bb2e8c1fed468883b3ae56ea2f21b90be9884467801f1995c633b9e8b6620c838bce79bca05199e645ee1d13cd4fe07f31a6e1527437b103c0d91fe75c1a528afe649a84016950b95636a20b4866fa089c1669bafb7fc40c65d5aaf1e114e0ec22ab5907eae3f5431d07d42880f76b505499474227094410d5b78a4151e50afa4e3c6b9d9320f6339fc8073da9719231c350bcf458c1ca5207c5c09e42cde2907aff7de08017aebc3bd7400d43b15c1a0f2b91ee4f1ab5664dd85326d30f3990864f52221569fe9e61555a58f6e6132f45e2f826832b4d0d5b3a1ab0b4fd5d28a71fcb62f64ac1fa6440018f114102b690754c2601acc67c991983f56cbf4af7ab8b3d13aabc5c7394c59180e9f575e131c838dcc6a3812dddcc3bc20883f589a7a22331787918781f30a7e9095888eeb6e747b061f649ee4b352c02d27fd9813d54bf9da69d70933f53c6c633adc1b401d8c2cda015462e4a4c03450ec4e160b10f9f543443efa756b5185129de833ccf909df541983e38e1bea44a64a340fc049c536e1fe74877611a95d9b2aea877120ea38c16c6f004cb4a179de39d43ceee9a4c7e86aebbd88b589758cb8bcd1529710f7d0019038c5d4c5d4c837e081fcb68d8e84393dc1aa0c0d7e923c80e27e7fcafc1c91e1de88dabe66f54ba16d46854b96b978fa9deb80a54c05ff99e69dac03d1b5729d50630c570670b8416641d0b901674e8a81e50daf3b3c1481bd53ad64ff5be2ee78f29e1d0af9cc8299a1632a18caa77877453ab18474078762d11a2668f8f2d29a2b620f9615a692c280b3c2f1dfc1892f001f2a4476df58da99a4b1b867ed1b128964bb8f771c7f48fd7b8149995f54167d9f2737a42b1bb65a0aa87097eecd6624384b582f52a02932e51bef4e12719cb79b5f74838e808123279e7c64e141ba869d42828d0109b256229981166e4ad240438bfa874c87fd860939e8ab5b4bef4d629cd97d6c9ec2ade1d955e0d4a6acd9d80203c58d3920fe67eea34e7dd3e24140067caaba671e08c8806cd21aff887fb40c45265f1ddb9ab45b80f519358fcc6d98b5388a50a01bae1903187bd38cee15c5f6cdec7422c741f0371b0a946b81e247229c60de41090eb97c645e0df4d902860910287a967dc08d9771cba525628d5b18d35b6a1dd5e90414acf836a6850e935435ac41fe74b61dad358cfef64965fed422a30db26b632d450128800f03c82a9c91d0f4a6546967440a0b3a7bd7bd8c59ee4f95037cde34261a19ab1c41f32d756ea4339df25c83ea28ac9e2e8ab3399c5721924b3653401cff86dbbecdf733f8471039749eac320cca95c233e3bd97ad47054bae8398169a828136672998c0c1e7778ee3814154c8c9fc354dbd039477d0902003a43fa213e4141cb9e4c683bc8e6c63cd10db2a90b41792529b00a623075e2a8eb7158a9b2087cbfde0dbea8c02fc0178761041ae210e665b7a8133a3db84af478004bd6e59026c1558369e5b5bb0bcbb047d8f80b99e8e1ba1cb6fccece48d2d509889ffe880740a332400b682a6494390813bda5129cf51ea0126be239be0c1408c1212fad4e630794dd9e0bd3fff5023e186d93ba2e40efd864295309a5fa67dadbb6d85030a9f54b21a0847abc423dfd48382b2c268d0ca0c45cc181d2408ca0f144ff5150e0302de58ea38b4be0a08a6e893ef1759e12d88dc37cbc2db9b215e4cf955f65a27a50bd39ce276d3a0ad02210f85ead13fe7ee9ccffc14a74849671c8a6a8f7b7319e7ab43204cba7e237f5fd8953dc28bb7354bbc0b17bb2f77dd7aa8e891434dc49991612d173166ac1611146b737d7d76bc25d26734203a4d4fd96b94d12840a3fde6a656793ccd2f4dd37eea67adf20fec413b4f7bc05c4d5824d42bb7bdcbd2de6239f5c993c53ccbad2836cad0a3828d9de57951b8af95202694c4b92f697e048390917d57fca837d7435be52995ef8ee2b785ca68ec2f831851235f293ea631cecbef304473699ed74a776f3d5f825f56efde3ea8e5d5c2d9d2b7ba388a202eb521a104445d5156e646ef90f8cdbb1ded4b51328bd5475b3764bee257f2a99d9db6a70b58747e7cea065ad732ca97e229dcbb4f2e2ed037779dfbc3f124a663f4c8448db38980ba33c2d5a280c279f944e560219b47515b1ea01c103220699478c157ce6c901a5697ea669e12994787c8975e81da7141a064f5523c844574ec36200e6b073adb31106c442416dd040930f42d10189404ce782cf085c1dbc0fcceea34e18a71566445e6df78cb4858c3f8a8a17f68336473b3389b7f35165f4f7c9ba12c398550eb7902976420b776c7953c38c01689f42b5447e071f5e725a911d59a04c92212ee93076384ac65472ae0294fdb5c216d1d735da721a77e20af165f381cfc08261e35a2cdf8862a4c60e2f3e020d418ae0de916f9c5ba9218d8b962dda043ea776a7da230e489973f94050154ca0039f658b2d5aa35c6e5e1bfc64a59920b86ff206c479c926708fec06e8869d44f19bf8729d46d0cd849b6afc843e9d0a82832448c091f3479bcfcde73b5358da00a65c911223a5f21a613be100adec8d3a703487a8c739a6a9376a32ce7f08b4f2f50eb757d40615c9c236c6c929ff01b7d245e4ee29527cfd71b2370d3632998d5c56ac9bf43a818819c12ca6206b154b4c2310ebf97be9a5c806118c520875d974630bb117667e4149022c00193c3411925350ea79b3ade070752e67e3f8044df6033d3bc736d20956783a12c6f9b466aad39d93f1d60f9d65a0c93f6cfe738ea18933a32e1bfe316b3167f7aec0e020bc7ff84702f2e9251e43fadf9c3e8949af26477ebb4966af1c08a106999d280bd7cd8d6260ca0f40494a97ce5da26576a90361fdffc4d1e514c80100816a3fe628205945c140eefef5a72158969068159dda5c239c498740e29c5f7cb742759f2157a9874f2994fe7610bf9555f30caef714312304f922cf2ec6b9aec5ea52ec8545146a0d4b271f0949816e623f4841542f2305c2a882a8f33933b8c8d24062bd32a50cfdff3f365bfa46e1eb37cc20197b9d14ee1c3cc992af868566444908400769a555e1cd3330bc8920153e53b756533736606a555402b5bfaf91364da3991f8ce38432f750e80adb0fa196f4a550be6a4e6b4b38d2830cee5da463d18e0c0cfb4f8880f763481baafa6dc18eadb5124c3cb5d0ced13b334e57c6111c2caf2bdbb82a9baa96387047fd8edbe45081e2024eb8e554ed78e00a363eb6f18d9d84a352f9264f0c34de7b1ba7fcd77ac5d7ae631cd33b8c646123b899ea76c4481e56bf3d4ab475811ca875543fac082989b7744b17240edbdfc33071faa892eed06aa8851d1780ba258452deafce6c8d79c6d54f8661653fcab5987d9e256248211bad1f197a838074bb8b35b1ca58e7c92a14c8659e1e1b345de833e210773bcecf7526bdb6cdfc73454c07aeb0b840aa36f4885c2db9ccd6b84a15899053e594f26397ac37e881902e1b2df8c72e5dbbc7d520c852e9c955099ed5edd8115778c6c68ae6764cc36db728aafe7dbe5a1e141dbd15040431e81d4808121998389650f298f1dc3c8140c9cf404c0c0ce2bb04da20702105990bb9d3ed5de24500a3a056b707336fc3b81baa13fe80c8e8b0d0933910c61ac9ab9d80121f9ffd1dd79d11580cc5e3e83e42b16b102389424ce511c6e183cb1b1f395e5a87cf5b72971b7357cda41e54184f586722f557145875fcecf2d298ba9c90a48591fd0e31a15e10d22e9a355801a386a088c05cf506c8ef11a5a8d589a8ed33d85f560d502d71a002cdfe70336342de3da07c88d70d99262426bb740969158352c30c730fb5e66047672fc238540a5527e73c90e2ee1e224fb892205b81c5c6ce41cfcead9e3366f85c675e075e1cd2038219644a7a26384960c91b5032ac1883806462c1f817f9c83df0299e430d6099fa22233c2e9f983992ae9508854bd7254ee02af6d2ec01fbeeb5111ddbe5c6db5053aace73cbeeb1c4d81239596d574f98b47da94a3c01d65a678468fc3d9df37eb01a4bf259c37dff92c3a835bb237a9eca6be492147111beba4c127590bdde3c878103bd55eada1bd960478d22068f2ff9ae5915a278c14445a9828821f2995da61f58bd82f8b6268f68882d3f86402305d745a50e487324be97c4f0f24cce24a6b47cbb31bfdbd638e5ccf021ba59d648c9fd8627f3635df8899788f04af55702093a8d8b27fa6ff272c023711e676e053711eccc053f6cec04b13e5de85bcb533f91db07352a90a1ad9007ec6a2ecd726a03777b38586d56665a003a6a400cc5b17a56df9998406b5933ea023d6dd442c069a4f05904b2acb042fa03313c1494edcec33a7db69d605518d821dd85cd6a4a5c043d72ab8712937bf16bde9085ce142e491b807920a5b93f5e85a683db74306f84cd4e52e8750164afd22516a50f9b7c7ea2518e4ec0647b5b182c2aabdd8448f8d03be1b7fde90e0ca3d0969e8f29b418b180eb2af2384934b09fca51efbcbc0e923c776fca0cbdbf9911a5ea5479823afda0bcaa50e7bb8237cfb970dd59b344806968c3907445a15d3920108f2be407aec850749418da3a74b9440b2f80aa5bba37b7660f3bc6a9a237977824169636987fa06c5bde94466e8835868ec1a485c4aa01d8eb4897a11e2526b00b94ce098abab0c94276ee3a3495032d0de5bd2625d26a4525bdad0955672a6e537f804764c1ad5291906d59869b667b9ae901f4ae59b075abeaabd271e165fc395df2635ba089700d0d0fc9653155e1fbccdb40c80037197260d806dcf470cd86f2cc48b414eadab64d452cad3751905c685e161c48e815b5a8e2d0ab496d02f72652e24fd47405bbb24e0186a91a4187cdd6d9d167a7ddf3b1e0591c037dc26000753150a1b8660632f6f46da6eff313cc6e56f30248da6b3922e642c66d5a891e193a15e901416284209b7124f1fc5c7ce09a07174c38fc8cd0c6c61d64ed9b93f984f963348e27e020e58ecc4619ed4f0ad8913dede0f7f89bf6cfb11ca5cac6dfe8caabce708133f7c485959d6bf83f9ed0421f3112b7c8cdddcfc4b7d6a7e84c32a62dff312e7533093dfde566c247c9a553068b5d5003a817040f73d56dc3eb59733ddf1c23ef7ec9a5372e1e405cd42d4e58ba9c57d96f5cf90509102cfb6ae2e132b9ae715938c41a4853b0f3debbe6d39cd2a64d35b2048d98ef47dd6561b4260fa00126f3590ff77ea40bac70a3fcfac24b89471e8e9d8d3f1ff663deef6e082f933b40cabbd435818f98997f14eeff848610d79bebd0c1e6317395fdc9f773da50cb0a1b1b2a1236ec52cf75499df212353c1eea558504e44b3d823c242b1f88fff4acf1cbf84d093494f7d0658a9eb4f9125737aca6465bb9ddcd50da91337c513bcf84b43c50c6464aec80e0f23dbabe4bdfd62e5328ae3c7e5be2015e4b55422e8dbcc96f2f701899318471e8202f82756d2d644fcc4293e4de58ae221d1998ab0cc17f899d236e5cb6bf88e39730a3633b0f31390854d94629ee7a56f484515882a6c945ae41c10f537e659dd1584edf22247d235b04759de052986ac7544862419ff29d1f2dbe738d486ac35a37728b98c42f85d2c205e37349221ba1592e083651af6afe3aecb9752f4491ab4de9a9f55a68eb99f343cff94ba24908b0203be07e621b33945f3767da25dfbdb388e5bb07fdc9dac290e0e71e0db333846e03d28edbda81299d8160a07741e4e5083fd6d46377ea8144ae07841f35839c63e6e22e3d0501b61c66a3e75aa28e59182d7cdfa942e83e0c283b62c441b3054c6b8d5d6b071152c1d6a2896ad61637568e79351a2bbb04f17c9048adc8ead239f7cb2691b3fa7791eab97f009747eb02c116cabec026eda7eec7177c4fc92f4ca8d8a81e4667e88073f3f90c6a0a17a16d885d32c2da3a8898f885a5b7212835e5a1e6d8aee5cc932faa05446cca4c3f3c15e132dd00bfb30fe2b597f63ef12a3eb5e23f482fe248160228e1d3167f4717d62a88a4d594c227eebd66c2da57b08150fef8916df0a2ce46c7d8bd36f8af24abf17f26599df49a0a56fe438ec1098fe5c5e6007f105c176a622f4450703121a5e75c2fc9a316db4b29b2d5db4d4dd4b35f3d0aade3b52c5b7f7e9ae40c3db8ebf2e287008d5e29bab7d5fd674288ae82cba4349cf4f46f62aca11b9500f92b2970ec8a46f3c01643b405caafd16cd112519528b07e3dfa77e09ac7857cc0ad93783785bf0ad7f1f7a097849ff7dee9f9f48602e15ee616a965abdeda605c5a3604c9a93435a353c0c6543c973998aa9b00e3f0d4b9f3b4404417914c7ccc616dea00c6fbc2606821cd3bbf9e97a9e1e11a3d6cbaa52811b6d841b24eea73161e8d94a8049016941bf8b05a6f4d53b8564b98c58836ed916d6ff197c31cef95ff42261707d2cde8ceaa0bfff896ef931bf0412fe320435dabe0ef1248ab83bbe22c32b84e7d5ad9ee78e07512ef04acf73a7c1192716b72e1797eb8ac39830db21856f634980d2797270eedd7a40bd122ba0d14dbeca30d098bc7811531070c3af5a9d6cfdff8a38803281fdd24270a87ea4161faffc8386379af177730e82466bdf2c54f4ef6aa2ff75fc83de22a51a7ea317c9b0085a8ff9ea816de5db4fcfa5be96af6b8156a101db604becc721941ec2640bdef7dd0be15af155fcba84f7c85c0671f03bc27e938636db2e2136506a0aae86dd18619c4d4c9fb97266722ce26aea314e22d0d39459a2d978d53faca6f491359d2ec1c6288ce0c5fad0cf276e64011bf37c01b5dc12d37c671af5ce3db2bda071448e31ce87307e793f641bc2e179cf70d8c4d9d76181e47166072c76772ebd36a6ae834c2ade7b5e38fa9e7d2155c68e476c69aeedd8344c171a0202dc5caea74d3470fc33198fc01ca0159445a643a0d0c41876ff350c806bc0e060ecc64d2ec807d434a1f30c45f9bf30f842ee84eca1c4e3fd7e891d0522bcf4f76160c3ee76346873e8db307e74f1158599c87f257f63cda373cb8cb3a0cd235ac09d574e6d96067b8ef8554ea099e29491e158214c3fb36cdcfb3f760f97d426c6e2f08cfc8bbf482731c0588c20c068c7e061ec2deb3dcc31bf0428e63c8d75059cd270a4b70a8a4ac1870d997ff0aac90905304753b01c96473c3512aa5ba3309761eb3c8d35ad18731bb7c8d39fb5289146a44f85cc960cfd8818bdce08239d4d2a9530d70d2359337707ee475ea610af644080a0f3b247150a401a2166fc09886d927be04e680f5c1626e22c2b3c480e30ae49faccb40ebefdd646b5a1d374b553d2170155ff133b4b22a2003d96ca7b4e61dab508c4ab13c22bf9e604602b08f17c44b8ed3bf23b5650e0325a8541c6c3a05478b63d5dc7671221e360f8cc9258502345c47c4965d19ea7dd1f376795297e56e6c2c9df3d42eff7b127e85851740c87c40370dc9cb11100e230f7418b1452d877d93b485a4af94756118dd0fcf378ec2836848c1d9e32ff73f603e33c2ea48353506f3685ab5cb7bce8e40085e0bd6df09cc8bb31ffd1b27651b4e49864fcb751fbc923cd14db3f9229e1e48042827be0df7d4446592e9d74fa80207a31d7084afb561d489dd2d2644ea3748931b2c32e2abb06fbfe59803918ef3f432b79daa5538bbb512944bd8b50b85ebe50af63bc342b6e6914117fb6f2a99a4d731d5bac35f0dfbfd91e5d8ed12cf8ddbf153c6e2c05af30e4169071f42caed845b0c6aeedc6f3b63b75a18df6eab014bcb590bc40acb39771d44756d26027b129a4398cdd1c0663f1fc819e1178ea38516222734ae2f0b557c3f060cab04a238d3653edebe42f192337b9fa9bf85dff25ab36b44f88d33aa676c4076769cfcce6e44b768644421745c29b30d7a0532cf0957ff9fcd0a24c93eb8894272c6ade09e3a1a88c594f23289ef0c2699c6c29c281410c66df4ce0fa510889c5b6b6640543b2439772dd9a451ed87947f10a1998f4ddffda1c02a37a89ff65182dda332e4c23ae5f010a930a6aa1c297b43919e4f48522de6b01f8dcefc17947fe31d4a4fa3d19c294ac986e39d958e1577c73b8ae2e44ca124057700fd101e2b41c94bcb440141d247521d161f2e34bb335311d2031ea9831f025b17158b05229714ed8b2c38a1cd908e519d860e22b0820226288f617c2a03fda10b3e9f4e620598c03a6a69c2a28c7165c89d8a7ee1a8d753b50390f0944c905988b843f22f5b57a359f3c01d1032d3133f2d0c3edb312771429c13da96d84b56fb4f8841f207bb86f8e49d7b206972b44ef4f3d2cc31fb090d84e3b8fb8fb8a75ad78a7bcf3c24c4cd293a68f29e860b70d0e4449bcfe4e4544050c09e1cf77cc9d12ce59bdcd879216269ef6d9fc959a7cd0cdc999c44d9486500e1c56672e8473167f8183339c9f5196f7ea2ba2c93834a9fc08585c6647262ad3c500c90c939c2cdb60bf18fc9b15e2549ecc631477b7d9228c5ad3239d9d825138a5464e7bbe70cc2c1619bd1dc6f39e11d04741ea49d4b66c6f5014c0e84a77d41b931258cb2f1029fdf4b4e72b256600ebce414803a34eb5a84c1fa40b3a577d773d92587a996eab4339393135757591bb99d30073354677db444ed25c0b1e42c73d524cd92138928cb186af8623b969c7f51e70512377d4a8e09dd298b98494b961c48971882f3f36140bae4c82c1d6de792b3924cf752dd628231979c89e9f1e0b4e605af20fbe74c4e6e2667d26c40b544e2280d045581b4a4595c794a12e0925390a9ec7d9c3c079a56bcdde1d8507e386ec9a9d39beaa5e7a1cb9ae37ee23c1cbfef92d3bc8ec328502a255ab25928087125a7c05ee8c9f6b9c47451a313e9bf8934397ae22c3b912c3e366a3a654a0ec2c0ca5a36aff3d62739b6a92889a8cf808d069b991c5ba3fd126e0974f524471b60bf28da70c971fb664dc52d1ec999e21a135b30920ebd44ed6f9fa82a6a941c5419b274a2e4f07c6802dec49a9fe404e6c406f50dbe5906f66ad13e6c54f25ce4454af27d80c9d3cc455510e062e233a2240248bf90a6409a84fb18e1068c0202f61a665488931cf045db2ffed77280ddc7d88aef462fa88f451d9b8ac0c50b0400a3e55a49fbd39096c853c7fa040414b08dfae4182b482ad95b534f6dcb1df0e0d80830071d0a70470fc8ed009fbb4c1beb222b3de2ab80365fd460a51ed1c878501dec8259dd30421d2cbaf290039e94088848072f1a8889a35ab01f3b3781219f948e0bb01a7b1ea6ce587daf90f70dcb655b2be7f1513113720ac288932c34aadc4035f9122aef504c8043c2b687a5af12ddecdd4bfe382f759f8e4aef600bb1ccf037e44c50366b0880c0d7db02898942e53f4c4112ec9fb0e6741ba567430bd84fd904d65652bc04959713c165b54c972ddf883aa7427cd0115d4c67f965d03d94fa5e5184c35b9260bbc1528dd796fc7cfce36481534de476aa7ba4c1d7b5675ef105aeb44a8b40adf588a03f4588f5531435e5a6948946b38dab0e30cfd7c5e1b5be4d000894c1898337b0374155aa8b768084d46c9d976ad90b64b89054b6d87e5c850de508f61e552be8d21a014900a886df04d2d85416e0b1f9112a5cd576716c70fff113456b31b3b35e8182cd0c0505624a267bfc4c8de3fff43c2daced626666d89428278669004e7c9eb6a8bc794a5a2cab70955c022181360e32f2546a1167d19480b92ac2214cfa4c31cd57d000e5072d586472c332495c9aa44c9f6988f5e4abbaa1a65c897e98f9883091224fc83c8e168aeda4a7be2103fd2e38510cdd51019c9fae0918017a00aae81187d83ffe21dbc6b538d747980021f130d6f9281f686d162248b347af3955c08704309f8e039f1dbfa9a756dbe885a80e8fae93fd6e741a3c34fe10e20d9b0a066ad88772828e37dc45b6cc08853dba483f47f2c658ddaf1096aabdd0cea544f0510aca3a485fdb92901cb5ef9b19268412d0606455051063120beb1dc0b326819d20e36832b6e64d902d22d191a14c8b85db92f832a3b0d495e58dfa480a0f6400f4be12fbebe1de911dd0b2b685f5a352f9e2324bd8d1e0aebf7f6bd6e0b7a98ca737754078f1aba9ff1e89d8a0b7034695a4865b4c5ef541eb209a199b8f61a87cd1f439f0f6e6b65df7ab5ed0dc3890a73c863fa421c956346a6b6d3ace2b1f26195a824a58054d03ef3b343141fb4184aa553e5d2ba348e45bbeb41b5e50fac097f6a91d1a7f54226d25208230f9d1045e1a2c586e31ebba0e418087f022d78826bd6c5e2a2e9066326504d3aa4bb6eb0ef2fcd99ab2d654df6f9f9170bf6d8db78f7082f6de8db376790394e388ae99894ef44bc8a91253cbe8849d125b21031cb49a66c483009c2cd390b0712a808273e0e4ff6d7d1b54688cd44b9d8cf25b70aabdd66732ac824d1c0dd19b978011268ae81df6cf61cf33a203f49e7fcee4a369d093a0bdcf754114c4d698fb89a4e91303747e29b87caa82be591fa714774a0d65897773462473027a3d80c4bd905d70cd385908cfd90068cdc0df626c5a67fd3852e7f5b681f6d385f1c0bfdb1cce00ccd23d19d906c0640b8cf7b1620df877310a64c272502c828907e860ebceee91d8a243c77d5b146ba3f311ff623d9074ecc58c85e2c148c944efc8105929b65cf4d4704d8dab270bbaa2b2174caae63a6aadaeca52ac00e7e890c010680e5f07c7028cc1ca31ca46fca6224e9cb8705a86a1580c2dc375f602564f65886599b41c04dfe778835c94ece8e74f77204da8a88383ed9f82e0383e1a04e13059874c15d316935cdd4021b82472d07c2684ba789f80a53d8c76d9a966765270591e629e0939998d11efc9d31700192691126634fb1039d42ffa921cbdcbd2cd094cbd95a4faf80b08b8c72c59d7ff845ff2094c52beef012137a1abcc4f7460355bd5ab253998850979c73e360b41b2401392beb4eac27e6355501a3537dd64423f55eeaaab7f665498e6af150b346770ef517e143b57d2be27d49fc26a8660c1708b93114368435403f0e8550525975ccf2e1a2bd3444e35bfc1c2f58f920b626fc582d9339516104e50c73156330968f13729d62760e8416a57d5063535627389e522cdcc21b0863ac4bc34d55b88fc008b4f5ad56b159e8664730cf9bef95acf8a93dcff2c450544ad97f246c8b1147a9c42d5d456b833613839807b20d7d6e7a707d808e990e5e9a0014728e5064c0e3b45af76f6283a7fe797842cda971403b7498a1c7fa21effff9dc7ed39bdecece19bd88b8e38d714d7ab5542d1f311252351f6c7f9b43c5f0968b13b1779fdc48cc53b6ee9684cfa12340d36c1ec0451e3f38f5b0d199b663132b83c49202692956b4bc1bf8d18f8f54a408677cec061d0220ccb2f250c687ca9cca0edfcec31c18997c71d6c981006288ba01ab8eba8079aff42894273f324aadc68a81c476d1868c7ca90f119e345304cb0e98e3e9b7161ffe794098e2477b50477812c78091c1a352a2b25eb62fc30ff47e52f50733b7d0ef1084fa6f723b18c73ba3f21db268a49ecb8afc58c2fe4c9a80fb36abc10beeb727525c152f88a706bb504263b454ffcc26eb643c4e32c2fc2d2c8871bf77ea40f091f2f3ad02114529e72f57045bc060119f852f6e4c851e9cfc94dd7161c37387694091005e73675f65f35cbbad64f0df1149bb9472b3b0664bf05cf101b413aed18609a3fdd6c5d3fe09a4af94e4879541c710a90d1a7a953e9ccc3e5916f581eb29819539b91a292b790b523982fde89933c25982ef5e8881e6343919b031453c5203bd8da7eb096fbfd27c1daeb701026976ae098ea8623026f24b73f53a655aa74946238668510af66d1dfd1c4d63047907ae2fb8e697848a0f0a86dc10aabd9f196ea1bcdce18867dffdb156b076ca6b9cb5b307b9947420b950b74e134e0d2a2f0ee9e9ea1ddf7f04fac28f025ad3fca37e399377926ef2c6fdddd310293c7a8e3422bbea9cb3db394adfdfe9b54eb838c0ca2dcf6b1b18d9ad7492f6ebb799cfb5a7f102ff642e88e9844515202c599d5bb6365a158cffd5ca41db3c25d01ca559c0be102b7b9d7917351427008606c65ef4af67ca22b1f7f75cfac6b852786ccfb11000d5df7fe0f4d0c335732eaa83807f93ac7216c21a648700ecd658521c49552546091ae20cc07cd3d4bca40da4e4e0d8903b48f44121c2b9223f8aa2053b461081826c3f29e1f23ec06c93c1514ea56067d2afa61db7b1c677c12540c24881a5bc38f4d37aacc914402323a2919c08b4fc1ac9ea460aa3be8d45e3c8f2e5e7eee9ef3e1626e1e9dd923301ae38ba41d252a48619e25c7ba08b23ed021d0f2fee51755129a43e2cb4cd9cf360c9d43c11017dd2119c8b11d4326b8ab190f22ffa111a1a1cf0d13c03ab977bb0dea3a753b4acc53829f4bc2057df066a603845b1005bd2c4c150ed1a95a070e115b1c029cd994ef88d5e74a7a041d10c0fc0a0c41680b5690057a7962c6da57967b821f2aed0bc2943d2fb39634c0b1a78ab5370016ee836ea394851bd199ae28ba0ed8152ec82decb9b82fc32053cce359953f0bf8f7a50fcb7030fa86783c9e3037e4d0f1007ca93d7875ecf752203a341202eced03351e545d229f7e9847a877ddf41023471ada2f7a3c5d34ba0894f3894701e40d1ce8feaf595972460d1bfa78e290caad8842182d86d48ba14772d5f0b59496b47d81c0a35cb53766213b641362bc386ccfafce87a72031a4c60b13df8f7a9419b0c82fd5272c17164357af6f9c6dd558f1eaf9bedb82b8587985a4df246be5b7fe097081e393a8b3154b0ced16255a3751e2479e9c03b069c60b510632365e03ff18f89ee07226cddc8171e233b83251b7b2e1560d0e8033cb76e00e16a33bdd9f153a933350836d4dacf753e714eae8cc872a44c30fd4355681ddc672d857674412f77100eb4c554320dcfc24ddcea484740927f5529abde57493b4e82fa4ced20d87eb7e021e36e7d027d727ee8c157a46dc32a49f88c591cc60069f4e4da8165bb44c7fff12b940a477ecb0b7091d90ba55dfb9aab270ef0367926e99b20cd4216594a3e6f0aa7e7ba602571bd3ef2082e8fbaf0d2f0c849d895552cafa3e1346cfbaf914125d4566204143fa26f9e190a39b4cb10aca8bd9ef178a89636c3ff0a57c02f66a585f12d4a8c76b6f3f0b153e61a8b4be6c28f113df3d3a098df0e3b4c6de6b5ef354a894d7319c85e7fd1cf880fafcadf052a8f721d2d43b0c8636c96f76af69f50679398b68a4e2694e18dda315816de8279f28d084bc47636268503c1d12a98901ddce9f347bd4aa50cd0cd1f78450b0960d181e7152663fa27b130040817e3b2ce722e9f6d4b08f9bcca71ea40e664424cf03c6fb2e225c5b3ee1c10135e62dda8a89f225ead61692b671849c15fb07f6b116000cdfde225612e88e7cbae163757cac18e4edaec5c03ed027ea598d89e304edec06d8f2619828c055943cf70b0168a991fd029b4ef2bf01309c4021f24c1e5390ef07bdf7930d6ff4b75bef4b58fda6d6cfdc7b68ccbda243ab9dbaaa9281f8a7c2706ce6d12bdd37937a255c5b1823f0d4ac955fe77ba4f3705b5f9798be01020b41cfeef1dfdcbac23797e9fd6fc585025896ea61fb9a4b988a116c3cea147682af09430c9ebbff8fda94f11c079814b1747419168ca517392af6d248e026caa53c861d4ca4fa4124e03a7190f28068a713125b87fccb4fef8462363b3d4111425e69759a73436c9a7de65019494fae250905216a117b92c21346a2af798fa833ba50cd0fd6b0fbab4898e0d0b0669c517b1c0d9af1daada0593b85ab84bfac0a0dbeb0004a7938c0539c7f4339e73ecf5c73bd279a6f0eb1b1757c92363904cf7cdf5534d8ec199bf46ead94b27d17b808cb0acf21757b7b19b36f67de3bd5f281c70fa672baee7ffc0d5588f78633106a7c67d18bbdf92b5b58523936c69951a6482dc1de582dbf60583dab8e6405b2e1bd0606bb3d5e12ded99f3b53266323eca63ac66b5a7be360b6391cd098823990c95341d888c38908d68081d150083a20d4b70fcecf24ebc766e5be39aa4ba1897c921e5c614eb8c54bf135970b639923351c50d90325ca273e2443229aec36ba2fe46288c1916be762be1d1e65f5d727ad337e064adb86a37ebe353e42d658d625c9a351b38b4d06b583e738bf0b00d008fb18a6813d808a5107a8517632f78e16ba15c09b55cf8e945bdcec80d461366a541c48f55b529d1260774898c06c485f8768d3fb72c326505490a881fe71e44a1121171881438a881a52a4acdc8fef802adb4f61642b2b83f82f6036062010736953b373b0d42dc1c47106ba050afc4f244210417d29b26115a305d8190661ccef5a29a6a80773f91d20de16fad88f8c58615e2fe08b89a2c0b4e5c213b00ee0080f3ed231d3f0a90a446bddbee8c792aba7526a1e5f89b8a6b2116952e2cd428de0cf97fa24135d3029a511255f4d1bdb9c90a7eece7e37296e405d844d06c1205f46468b591201a9eb7f3f08a046152dfc965dbedba3007aac108265ea07bae3badc5d6290a1422bc3087053edf45d7d05a0838a20488a7fa01bb7e7ee12828c153462df28c6d8dadd00d3189935102600b8f3e66920b95976cb7ebc215a6c274b70cc50918a05d5e0114e903008e437cfd79cb72040503887ee152461bf5d2ae0c201eeccfe31b9d70e56304e9ddc934fa94a1f2cd04b55938b02ec824625760d7e36e91f680901347a367c5ed20b7f9a454a92652430edc0fd09be9760e8936b3d1b8afefac775b6b1e20d844121980275545788a71d3abc52e6b19cbc2303cab96f5d25efbbc827acba3b324091df13dee88f7f6a3956d01ee4af1909e1c21e4c80067cae942c48d77fca993866b7dcf4cd76c3041be7274116f4603c4c808b961fa2eca58dcd9b26711fca37c45672258e6bc93e59cfc2c405364a0fa86b4d1c7dca45a9ceebc405160145d1adecc62b7faa0387c6be01f58c032a0674c4b51247fb66723c60d5294ebcf5f3324dec9e67b6de1ab61f4f6d088544664536ca059c9a4af85a921e76048b5ba1270a2d85507e752ca8b6211b31a91b0ff48f6f3f7d4d4ab991bb94e122a92dea02f357c9af039405a4d160648ca6649942a46a963242108ea2d4ba572aa3182bc53f11b334b01489cf77c7dfb1c70b58d47b68b1e8886012fa353881ba6baf3825a6a31064acb63d7c67cfec4693042f424cea786d486076a3aa734ec75c2b812dad3bc73436626ef5575e33c778e2d905dca94441779a6c608091758a7919579be05c4a76869e44b36fa3f3b490b6b8705d697e8a4f65504c8a655b21186146416448bbcf2a4877c8a6e01f2aa11b30a9a8bdaa779534673baadad78d4c65fd52750b5a2b11386556348610bd473c3f6911a2318881414d31984a1698a00ca0a1dd98024aa99cd3aceb5f58ca620bf29526d11fec77c939bd6f5baa78ffe6c02d080411e8a40641bf6577b019a571a47477f476d2e3bb7fd10aff33e05db8ef84f54632669a6fadcca3b24ff989a1843eebbfbf773dc48f61fbb5922f3c0591b4165955521bccfd0e0edc01f439d4b13e435e63ffd2508a82cd46de02b130c443761dd758e0e6dc61310b91a7999af1117a24d8efb0508dd10873a60bcd4c1bef759f6b3d27034ae3ea007080fceba0e910339c07bcf047d45a17e3924105403fc132b0ea32bc80e7b060f9f5a28ff612952036536cada85471c0c82b7a363bb4b5648ab28dc8dbf820d440f103245de490467e3ac1fe5bb26d416692fe3b5c9209938173fb2303842fa5b98cabe80525e5b4e7a017ab68e854d362dd9a0bd6ead3022044f145b97502e59bed3bc2305b15815bc7085122f16211a24fe398e4e9f1af124598a0e20888f6db914fd7ec167a4f255580ec6a80ede67d000854f064e0c639aa29e6fe06f717b200970ac204b78a9c446cb9b739f5b4426c544e0caae1d32271645d93ee84408164195f83f04e9da06757af21a09d005a64afaca7dc3e4dd5372237554b2ccadc46cb5c55b096962b880c26db85376e3d62c3d8a6d144a3a13143b3c6e0410387bf483960abc472460bbff04e0060be9b0dc9df5ff59511afdca6ced5a449933d3a7395b9013e51829eef0711c1c185cb01f0bb64806728e7f99777ec69440cd0575face21d398522ca25fa974fde6f383a894dc10c5ca2814bfe95d35b73a334a24afb65cb12c80ec8de07e34fb1b05e6a17b8e2f9968115a089ebd5ce809e49eb7ed8591ac3855eca893e17fc6ade2997b925100fb4a40e61718ae587b8b7142a05a377ac8ad2a247204bbcb8b4e42facaa42ff83f9ef87ce600cf8c8a142e074942042545e222500dee17b09e9de4c1234d61842d3a358bee8bc2a6c1c1ae699d034c499cba7c4a2bc0a911b8ae18a1fe35f875e148b4398d7d3cb5b21d6d1c96299b34771716d31fec5d1e2ebeb5df4b51f538fe043817042372dfc4f454de4a152573a60004543efb91df1a0fe621f2208d5ff6c81d1a5156a0058adc8c513c20a0b310c10df5de57d412816ec320fce8b8effb89555caa6c8b4959456827a44ae8d68ed0db190ae8d67f8015941d6542b43bbcae7cdbb56dc0472d6bbc3b2f163b57ec8724e04c44f321c040f9ab851e37506ef57aea597f9068413571e498bcee59058265990f79a09895b2c183f5c406fe520701d285dc87a5cbd2ad85230c436a45cb87230690ed7366e85cb50ac9bd091824cc9e220cbee08b7ac89e8550e20224d2bf48b754501e65bfc86a5df14144c8724e553dc893b4497c2f89264a036a43532c70dce675c9100e3d090d1029e95bebc52ed3c18da1d63d8a20b092cc06f605ff27e223c7d017575f5ef57e96443940c1b6480b11f0a5478a5c4085a231c041ebcedddec044d449e2e4a6ad33215713a9cf6ee445cf549bcf655b3297c71269e9e59bc3ccc437afe03543d5bb13bd67cac2c3d9027dad9194174d0770a042e8a48113d4dcaba7b76e8c02eabfcbe21655e6ef06530b43a6d97373ef2e992bbe552ddde630c93e4d76ff61dbc57dcc03b320236fe088ba503603a2f5870a5e1841b2423eaa4ab91ce02173107923d1d16cf8fc5f67c547e9e0d3d1414e59a99a953ae5a7246e64e81d73ec720850ce1e7414170124a671ae055fc119057336f5e094bfa04a20f84bfceed0e68d4ee9b4f3609292c41d9a8eeef39d168c0af2bee28c983ad54c31de0081d42af1c4823e98bc5f3a812d4b3404affd1c6a4452644fccaabba4f75b193be08ee97d8a93df2e695ee4c5ca47b3c8878268abdc8eb29f04c284d32736fbfa6118cae5f00e8631fc44e35f0bdeca33a6e8eac99ee9f13fc36bc27782e61f5ae8ce8fcf4b2487945f8c315a6e8f72d3e31516d276b91dc2f8b735e7c7adc7700c8d760665e7cdab477f65024287e040b35e23543d23192575b2a89ab6f443c2fb70f8bfbb48dc1ede05f1685f82cabe1876701b1105c305dcedb57157219a0df867e084dff073f060f4592105ce3c4c23c0a90d25d2a753301ff3dc4780a1e107dd2b2cf1f0d2328a412060f9f732fc800539fc462f734a07019a06344f0f9f22793f1d7a2e00c3223dfec6b2406763bf46085f854f9277b21ab4f7e5db33136a1f67c2ee56a988c44247ff7779ccc76860bbdce55cca45ca2fb09012b0649005a12f86002526628908b6f165bad644315295a1c35cb0c0811a4b15b289598b47cb750a19a74e22da003a1b3c2a00582b07ff316a3f2e705f7542ea31042458ca982d823bd8ba2b77fbfb8feb87c4381edbddb0c0344d7149e4b6b9c2cb65b114a44a3d956b8bf293e2aab9496822c8287254254aa8914be91b196bc3859a234ae093aa7870be074164cd6757a0d3e94c942064fe4154df8203280b1c99a8ac8a6dc47146cef01cf08e8591398d5302b4eb291dd3309cab664537eeb220f044bd42560bb022978d0c0d2f1f1b324a3e01b9650b09b347841d3045fd9c19286c887c812e801b85f299cf80a328349f48ac302123f4e5f09109bea6b124ae0e6566a339001f3b552a8086d10249d51c910c052363f720996edcc2f0674121e3409f48e5d7f8535e49898f9fb351924f60c6f7e3aeb666c284b8c7436573f22aaec33d2ca1eef2ec01806f2e6b4789ad6bd6e5606fb0400b06975fb3b45ea3d3e1168853bd69d8504b31487ba03bf9db51b076eabd5541a37a3b3bb07391aad52ef64c714c56509aa64e84a750d478ab8403f9b066d0b9977fc43e4c364cdd43168c6623649833bd75803c50edce71e7a8cc078dd09a61cedf76a010809af955472a62f8472a482a9ce8377a7f33455ffd9b191317b7c2b73dfaddd0abacc05ec888adcc106cf9df435a3458525756d581d22abfe6f73bc1736e1bed081acdcd83e99da83400e24ff371ba93d89f6f9ebd5871d9cee4bea20710c972f1d1d912b44898b46762163bed713516631d3aa424be074f492ebc724776a77c1c93d0bfc92fc23d13defffa831beca76913497de4487e4cbc4383b2849720ebc77458ff0254a81e17d1cd15b282c0a7a3f632ff7e1fa349a3058e4d2e6f0b576adeeafe3a4bbb0c9aa0b78a2eba062f99f419f723bac39b6eb56f270e04ee139bdd35ebb6bdfc15625ee22b51e3c8e3e1a5b857418cd92b2865d7f24c3dae3de89bbf08ea971c46279da5b085c9af214a75cec10a3a81075d19a422463072f771083ac1aab2954b070a636384e3bcb199cb85752702a12b925ad9458c4f4ad6a1c18888a1bd03177292d91509f617d98a04555ecdd1cd800a3b5a730a9ce3e237f72850a3d263863c9f8558bd5ae6545f09e8ff11f709ba29ccdd51cad82a12728faf83a7a4b5793b342254f7f77b9ff98bc1531177e417fc53114b341965f19b12d4dab9bc6e9e232820f005c6a7215ae0b95326454dfc540918ac078c0f4153025ff6b7b94495381892d1fffc1ee708786e41d4a44880ff02ef46f5258b0ae6378a0050438a446ae0c6b15970642e4118b7d8d81109772b612671a6cd6d574deaff861393f9d7b353940145585d850b14a24cd9a1a0ae946c262d80af7e3b30d9bd7356ec0825cc41645b24363b829ec4aefbecae3fad891bab80ffff07700f359c37095a5b15526e84c196375971b9c93e02806241ce77fb371e598d8b6d2d2bd815ceb09c1cd217f0271e006c4be3c454ac9730df451f5d7ea6d914d6212f620baa21e27aacfd2f47ccf0fd1e9b9c912eb4b14c69045166a64860bd53182676319009c337b350f882d0b086034b2ca4fa89de053f90ba3ea2dd91525ea07e63c93c32088d1f6bd96501f3db85d7c35cfd9bd235d1b05e71d519aa3e53de554f653a3412b04624c4b5c28d0afc425e01d91486d31dc82ce687b9cc4d391e625c1a4f1c2805165ba115dfa1548f6d5ee280647295f53c10ee30870121dbb864c61df088bdcbc5c593e36eaaedb43bc2d6e4192b5cc056d7500d8c6bae9eb135c8c030f542b255291172afbd38bbd3103948000f9119bf854af54c3a985f5dad3373f621f534cdaa01c6b53f8fb66dc246d12d9113c423ee2bdd58902befec2870ab0d8a6bce1e9411f155808e852cb216132b2c727a912f36b49a81baccd034bfd69998778f286b1e35b580734e124eea445967014ade979ffe433a309a6f0cdb4ce92132eb4295a4d905efc6a97b5c8aa2c89b1566dfdec1f9734feed3a57b686a8273bd20b34902edfb2ebde5abc6f21a4d0f55105d426f025f7454684b580633172cd61529966ca06be46017088a6fcf409eea03b03e23408f80bd154a12931a0616c30fe9fa4ef5706f7b4855fc9cb3ee68c863a8025c5ebed058def753ede4d3e49404592de9e4fa32c9f2c203456d98cabbc3dd553b4555a0f9fdd1efee6ed05ff1874053cf0cb078e8322a562d8fdfa42647d2ac4b5e5e48bc3b24c613ecc7f08204ef7049e818c394f9503259799bc9a92ebff1e059d9600e1f9da4658a7a846b8710a7be5bc29cd80a1338c6be966684468b757885304b7cfb7ba38b47bcf9f4acfa504f1304f5374d44ba7949146310454d49d04e281d4a69e8d288acfcce3e6d145c3bb7aaa91ca3587ae54ec1e49ef2da0d95b44e797bb0ccce8bb035397ec30b2c3d70c677ab2b14f98afe0dd3e2516df57e87bf9d31ed01bcd0f838288d8fdf7629f1089658a0d1861099751cc58288f7c765aab05d986c64a9879ef200bbb869fb5fc82b0b3a96e76f3f5e624e1b881aaeee984d2046c12573274258d27b126dc17d29d57cede810640cdcce5ef4e8fcda4d6566ca07c725de1d68568e8aae9c2fff8f222bb10659e286a9f08a88d23c988edb7a5332af0b28e505495d45ce26fddf8370a83e8df5a4a48a950d5e9f8d65b555c49535546dc47bd8568af959126866004b9c9524fa179abc1c83a3f70be215ff14767f45c2098c1cec0285e82337a0e8f778a9df1053c4bd1cc156077145e81f8820438524ea844072e4ca41d7ce8877742c4d6ac8118b1ec94adcb2380d453f48366a62a1e9d24233bb0432b2bc19990e1ce2ee44e1cd513ad779cc0d46aa3db1a8f9a0d59777e4d56e16fde8ae76e29a336407f775506e41161eddd5e73aff2298ef7757adee84cf267acfdafd33212fd5b6a26195bc87f4b2495912a43bab30623ce030f46c25d621ac487c70093fd72772a4887f313ddbbb42728e915133f7bbd668f79d76e8fa1c91c57b8371bce559ac324d8466f20db820cd5811095974aa5db2a5a5fb99d04971dea9393f098beed46532a485738e8ff8b942f22828dac1779229c2f80333d65ed3aa77f797a79f4a82486233f5ed6f097d1e5576271ee1800da275ffe47947e0233cfceaa0b5129e6cc6ac6d6345945e1e6c4fd044e13c4717eee29d48a43794810c15dbd579380bc8dbf46af19e99d8813bb234530bf46afcefbc9f55a8f14074f4ab30276c44c6655ec3dc32b55d6a5f4c09c563ff3be3ecc539075e9918e551d333eb93b421bf6a54431257c620b26da22eafba0060ab5e582ba3fb3577a5f7d7ce9b4a594261da9b99018a09a432470e5852f2e59bf2114f875d2d95b9163296296fd16fb7570e6ffcce1b0705b1bb9ec476d56061e8741e276fb7c61658074a2278b5570f81bd43f7fe3065f1e41b3b4b74d73ef6fba2badef9aa4db121a327e30fd0499c7be7ddc741543be19001cc01a630fb1e59e0d2187e70e5994a0cc96a414e1f8f6419ac6b10cc88dc1a367e9f68a782f6cef1ffca91920365cf1b8b8f84cb326f1f56a2a86d73f9857348a433563b68e83ff310dae91ef4c03f0bba0a6d7f3221b35c648065ef5aa2759fd4878ddda8a6e164460d44db97187aa6e22e1317a92d18d8ff1978a8af5551ccd205f3eeccb8033bea1237c899edd7bf6db18221c7096ed711a0415143ada09f6537dd8483bb70e866962a01b0226d3b80f550008048fa5de54cca639b84a8750cebaaa44812d3e83b8c594b661cdf4a326c0efb40ac6d8e5cbb37f27cf0988b959741165ac93458a54edbd9bad3a8ba87ce790a143524e8074d137230f7800febc05c629909e577af7cd63047c44d82bcb8e5523b1f92a7363bc6b12898174b402f8333512f371b910376625ab411dd7e4b14450105b776337486f92a66399318e8a666f4ba3c03d8db3c8c3025bf2b966cd430e49f133899f590a20b5c5aa8c1604e6a8c8ea0fc5051e219c5a1215a1285101b6cca27107174c386ba090b0137d487d2f46f7244c7250e975e9db5d76e190c4f7009e81b114519b9edb372497a97f9b8eb59a774da979df90d09eb0e6ab30387fd2755f0c8649163705f2138ac5a0d140fd1eb33d120320d09b88f5cfd71f2c69953a1edd7d431add61da942717246f7ad9a3852816af2e0e906e6641049d3ea7296092dac013345c38ec9e33582333790b670efe824971f22c65cafd30d080091be1a0e98ff16254aa8d04c70643f54ede18020c920859c87b49f91c44ddef6dc7217ffd7e23e228c530a37be641edb9a432de92edf724f911a1bca03dde6533a339030c3567eb05dd5d67a10763f09d26611031c816b22c8dd806e134d81f31cb570793f1ba063eecbd6c52e9e867cdae62f545827e1674af6901f05df8180dc97398a7edff9008f666cedb9e5380eafdc5015a8483bc04efefaef7cf0739325c7ce78dfd11e85886688fe72ee660bbe03599b316631ef83972a5543a4df8613112e669fd7797888284afab5fbd8cfa9261a5a1cffb5aa963d5147d5827fcb6a9ab45052061affed2e576a7a1cbafa8e07567585dc4013f8c8cc8391287946560798da2567a845d0dfb1dbe3fe2735f91dd4eb897e97a1cf341e17895607d37071456eb495a84e07a9d957263126dbf4360861c5001a0702ca769ec40d4c03ce3fac59b17a5532da03b8a282284935a6278438a3fb2d3ee989863b84b4f7095e298bc12a2d2d042f07a5c0e2092a2a4f2f32fff6ed80e3b3e155cc901ea50bd495c404a59a7395e4f7082d0b08075ad4a7e2c4d46c80127c00ec44a1e33152f721d6730800c9c25a3c8f6a433b6456826ee1c828d0bea9c61fb1ef1b68d79922571ef0bf30f51a0cd89daa483308360a78d7190df4b7637111122a5940143047e04e304e38afb6d1abc6e222c4b0af0f69723afb5e007c38ba7f9e2bf6e677b908b24f9a7b9e6569dde91e48bd0cb9dde91cfbede919f5323d9311c316b6e2fe6db6ca1c9498e35ae567b7489dbf8ebbfada6dee99df275f966a8d36014d26714d127ced930870ae16d3eaaa1913512c08e332b81aa078da01e92fbc7f61aeb1d0c8c47daaacc5ac43a7eb1ca7a9bd3f15bd0f18be5a48f2001c7072823e0401d3f5e4b1d04a1c9f5fa61c8f291cdbd4e1ace62aff5f99013183e0b6a0db20ff0fd0820c5901471394c923892046b1b0c553efe905328fecf48c3300c4354efc27fbdd361c35bb387214f28ea8df29ea27283dc7574c61c1e4d8ecb91903bf924ab3758633df021a7f06bb530246ba1f8614886e4c89af8dda2ec9094a545eb0e186a393760f7cc7a20ea07b01dac21f87acb3840d7a8debd5acc48cdd3c47942500c5fbf6e84dcf79390fb7e7629bfdef9af723a0e14608c1df880c43b9addc029c06d4c929c6756031f720a5950ef4c7dc1fe4dea9071dd8424b9adeff67bfb36bcc3d3b70d7fd83c7ab7bf074de22d8fadefe7e9b18017220347526e903b06be7f43c93906cb1c3ee4a4b701f4ff64cdde78ce189427c760298aa6f86d6ed569c35bb38b1a7c0dea6df2f0879cf66b16258ac46d7c83dc6b24c760cf5dd4a6a875e0f01c09b98b2f7e16d9a5f145e83cf221a7fde3e7eec320b00f287ed81fad14f99053665bfc08525fa0dfa7cce3189e0b10c1711c33d6b71093183a3073a477b89b584a7aee3a68f979b48f48d41f97510b680862ecbd730e063c3f7eb19e7ace5125b8397e2c9a6f1655c76fd6110a3a7eb3863a3e3530757aa7c386b768df24e4ae5fea055ad7ec9208aef8d562a6798f8a32f321279c1fdfb406f56f8d75d7bdc459eb9bd699835fcece3aeba0e1a6ce18cfda27e79c2fc0cb9d3b0882a0d6381167f210cc2cf99a8d8e1a1d355987dcd42b4eef76665bb3e7c7856118aec93a6bf6d6634a1c82e6da47d48f5bd083fde2efb303f045b6d561189a0059bea59859c2844a272ccbc50da3252b27233e1b36a8ce6ab0b8a1555576a6072b478806abd7f5932f56128b12ebb06488404cdde581902b2b845cb9a2e34c2e87255482600e04c3f0ac875771407c458eb88edf2b31610e2b295f961a47287459f1838d9622235ae8e2159408c62670a178b97af1048c95333a235740ae3274fc5e25f578af863afe5bc7af5559d7af55586fc9d7cad78d463104b7ce2fd68e33101120d374343d3fce4fe6cf4dc1a0c95411535892a72f67806ccca032f20123cb0e1d23f06309f4b8d135e5298aea0c9cde1537891698a8241f5882c6313e2939c45a96950f5f925e76fcfa9a9ee7c8250ded1bda67c76f9617b288f5fc66e1ca75fc6661411f61ea395780a54191d733f6eddcf1997d36b6e57d8d6d7b6e3fb2edee345f64db5ca9d9fdfbfde08efda38ff6ce7e1ec9b6bc9eddee735cb32d678146e8cd8541e4a08e7b9b7f03cdd5770aa7ccfaf28b417808ca4139450e1ab1518c5d0c60a0e02ea41f426ab820c6e504c65508a2243fc158996c434fcc63f8eb09053d33b705178781a027c5ddf55474793104851c6e97cbf698dc2e2932aaa878f1a56468c9068d2e2c541922c40d9793204d485c0d800e38b28b3ca5976cbd17a8c2b0142957ecfd4e6893854abec2697256043dcc25cac56c82b470c95c30bc27c6057b4b4532105c2584a3e47a5bdcdce386875e963bc675c18c4be60b2c08d13bc35a2c5c2b17c7f132402fa71da0975970a1b867cf85fc04898952d20d1b665844b4b102d3c174d5462aca5210ec25efe8c17125e845c15b64b2935c86a7b83d266fcab86e5c01f4c6b82b541a17832d7131ecf4ce4c99812507615f12284a26e4305d5c3c36e45e713116982eac223da45c79f2c2660c11ac364bb250b86103a2821bd7a727e6d5d0c35bd0b84d5c2ebf077a715c0c7a296422d7ec01310913f3658d142f62348258f55e232ca61f5b503f9ad08cb8b79e5515178d9bb550e9e9e117c4dc2335d9085fe53755dccc431445910445511445a61a1ac6cb0d2b44414854806628750993864ad2168d2d35ba28fa0862c55d53f68a5c1d1989cbe5aaa027c3fd300cdf0c3f0cc3d0d41a338a4a3b2e7e4b7210865a5c3d7c53ecd1c330c438dc6f2954d94706bd310912332c3ea2fcaed894dac030eb92a40535626b4617451e4b5aee93fb138e01e8d5783199718ba8f7b20a4e2efef2c59da087969bf09afcd5069f51a540a818638c31c619638c31c618e7cf3f3948af269098f75489751674adcdc071dc7bdc7befbdf7188262071338d6bb4cb477da10224c20050601be7e10f64ff97a341b5f7f894f921cc71cb4d7912d41ef528036fc7eb04b689fcd6631bd0b51e890c47d193efd08bec56f080cba477f43f0fb75d0fe617fefb094ceb7df792810def2bcadc4fe5973afe1f793d83f3bbbdf5fc2fe99e0b704b5a79d031b76d37ffb6d4e615c73f9358e81514489f09cf6e9f0fbcb0e6b9b83cab0cd3eb489934f420125f2265770e5b80e6c1bb228c63eb2a299e3b08a00a10225a408d29061cd293ce557e75f5936cb686b6eefe4df4d20c12a4204ba35efc84af64e7e76cd3ebc777e7d404d519d311e31ddaf6f121a02da472cb2aa72a6e38ebf14c59c7366c50e26f0da7b78f45bfedbfcfdb92cfbf64ffa5b7cbd3f8b99e9fb49b02778e2a33f78cbc3d363012f8fb159ec5cb399a012cc1479087fc85f5b730ab9cc0c4deff2a72bba66a26cd633d65a6bad51b43d7d4411e29ed17afe32bdcb25645405ae33095d6b0ec441e754e1b01425fe1026905592fb67c869cc9f7d3ed024f60f89dd93439f274284ddfeb9817cefe40fd7dbbadb3bf94d1eb9747bf1c6e64488803fe4d7eb063650a9b556087ae72366fe5956008348813fe4c75a3c7ccb3b7cbbe3855042fb988fea3cfef25cc9128be3f837ae4e7e4ba2df6e8ff50faa77f467d090aaa2ba62bd9363d315eb1d0e6c4b767247f66c56d7c9e7ecf8e6089e6b7b634ff03af9a6c996d0bb2f3dac1dd6fdf37a47bf880619b15837635771027a97a53868710bfb30c6186350c418638c31c6a11882bb4729fe28ee300cc3102cc307cbf2c3707c9489dbbec566ddac7d0e9ffc665d697284495f7041052d2859551628690a4b623cad581a728f9c20a6c648f5a14688c61b313569143134ca179586569ae60aca840a4512959231a2be50018dda71058554ca988c946a8c858a021a4a852c5d41a6052f2e2ea52ca89594192cf4387286290deb91b26043bd91e6e84c1a1768e0a0526c522e332a1330d4c7255561a51ebd5e9ca4442b5871525df840bbe040af4c5075a0793186260835f302189ad40a98a72e681a16942aaa8d276b94a42d88a44380a84a7a2a54123ae64c9191332b5070939e30969a89417f5e50235958aca83ba6d22a26478aa84b82c0d19162d540c3ccc440cd0ca54aced4226b5a1883f443bf6cbd58da44a9c26b4d5ce035a85406d39992dac3b105092d5394fa2823942e3943e390a94665521f18caa60bcd82e556a545a6d2a828750528358809ed5242c3e0485920a55a648ad424648454a4b32cb274aacc1630f4ab0b758275a32aed32953e8942ab40a93198d2204a6f70a840905221638a9ac608a935ce5228b2b74c0f30345d2a0b58285515ea662a4512951e81524f60526528a54938502f24f48a5851ea464c486d71a6b220439f9409039616759161a149aad21d5356516a0e28364c6919a5d4041c4948e89898221862849ace5424646a0a659a80a560ba52292c7546953b95c289728242db30a94c4aa9118e940a92da244c91983042e9d2195a860cc5e264991f27c1521b5d926441c1c265ca94d49425681323a918304cbdc5be5f018c8f7ff20593a3ef07f7defb7f1f5eb0212e6a9b470c92c6d108d6a248040b6a119619816246fbab8bd197ef4bea080c496f7b7c269aacd31991717e2d15995f3d18a5fe7a61d3e2ea126f73e8197f3a1245af1f45a17ef1f54aa23185ffca5efcc48c74562c742089dcefbef0e86d8fef9cf265247f2dbd5fbdafa49edfafa1b3e3d7ab2cecf5e2f27abda4bc9e48af1f350c1dbf5e4936afa15f5aff95f5fcfec47e5cfa67b571fc94b8787f4d463a29f0e7040617993a6e0969102acfc4a14daef8b8166b3a1ce5b85c9510d7d2d516aef4740c1f3b7ebf48e93cbb1c8ea33a123cc7e5c897265f86f476e7435362fde1fde5f82575fcfe867a4ba275fc7e31d35bf3fd12f6654baec175f09b7dec3a98c5efafa9e3f7a7a4e7c71048bd6062ea95911c473248869b3164ce8891919aed307b3281c70b53468c5a637d1cb5cafa381251a17019c20397c3e5505c0ec5e550f045688c3b6e671c8977c78958ef301c4d50d74e0d400e4e0e36680b6ba5589627a9771a430766c6f40e73b9d1f1b941c6bbfc19ef4e0e4a70b35025d6a95a1c34c9ac37fbd34300fca32b617630839e5fb5c2db9e1e1eb8e6d77ab3b4726a15ef09d16addcbc506b9c54334b48a83666a902d697a9ac6c1749de921ce962addd6f1bbc94a12933adca08933b3d6b81c7e9b33984d93c463d30bc78ceb52033c7ff96e796a7ab704e900aa56783c2924c953a3a853a2129a343f2f3ba27e2b884d1ec2bcde2e442ec62851b1743961e22c21594c274cd5898e8723800d2b6270aa139d0f30183f84924c79e395d640d3a40c13a61848564c4178bd9c5e0693e462357030162d2eda5b21cd87cb98b961582e2ecdd0abb2e282240284ce6e9071bd4abf0c205115610a3b0b821ab1e54314b284a5b68eb8190c44efccc565305c07bc5c5dcf8c0d7785abd3fbe1168000bdefe12b6c88b8345c0ebd01f4f054972ba6f684b85962b81f7a3c5ef4084ca0ac701d490560cece3967b186a206d4c5136607d9d24bae20ffde556698f945dabe3c6f5fdebe5c6dabb94d920120f837f6f6e0dfd8f076bbdd5ebcbdf83796d4bb7c6e507eedcfd5f62276ce75720581caacbbf033c90cdbbf1ee6949ac8fc65731c6da619a67d6c63796a6003cbf7509627500afde34fff88429fab890dbf81aeb106adb386af9cc1f859eb73c3cd0ceb39c3ad1c75d65a6f789d6d369b3966db6f337f3903db9fa698386ed0667eddccb02efec88ee31ef778634dd8327cab8dc671cc5a2f60437e1bdbe25efc719b3fdb6986d9ccb03e3ee71bfec6470caf9ff6cf7e39df597318590862709be6b07fbfe6d7e8c03e91e3ec99b4e6553fdd783c3fe6f935ace6eb36d73716734ef2734ecef9cc31bff016cddbebd3644dd87efcf376b39d36f32b5790f363ce9984d6ea27db68d44f76b41975d1fc3a59f32ba789cc2f33acd44ffa88de85fac9fcda3f0e6954f8fa774c2548cb51efe9988a8a5fa7124415478958373beeb5d053bfa0632a2bcc3a95152f95153ba8ace0026fb63f45510c7f35a1c552144331d4e1f8e1c9b6faa8878f42f75cb226cef3344bf1cb561f69cdb6996d73cee981adebfcb793839c3f1fd43e58e7ac419612d79c2735b4bc03a5c8fa359136ca7a5c4de07e03fa3c89f48f3ae9e4eca865e40cce175138d080916d75c7bd03227416376060338b331ff7ed899c073891d5c1a0d9cfa0417f3ec5713c3f0797d3e6f31dd8903ffc538fe5c9817e13238b7b9bd6b80cb553833267c5b0865845e81df83c5e769db551ce8b1faef9f95abe5e43dbe798e14892e7c9668c35b97f6e99932772dd04f9e2dffe7663756a1f7e7ef0645bb2cbc819881f7e5ef3b72772e593a7f9238fc7b62772a30580cab27cf1d4a0e485d03b9027629f0633a0d6dff216ed3ad7db103d441699c4d9d175bb333155993b06e1fc1e48ca3131089db3117c85c73312c575428dcbc5f1a070c5e04119b7d6905b6f342ce14161b7b6b6be68c0800785cce53e4d4a6d2aad05a2b4252cd28cb8c8e57e97c623fd9176032593862486e06639cf7daee317edacbb50621d8e725c6e1cc7d46ba389217134231e825b739e7bb42abddd35e974684f5ed8d08620d5d07a18912ca0e5402ba271f686c6d91aa2b3332ccec4b438fbb938eb3204f2e472bf6b63e5ec4c088b12d4f980fcda932cc9927b87418cb0c31ff2a31fd46a0f3402bf4e37a23a1d8af6bcc50fcd1e3ecf5171f1c30d68a050ef19259c570b7ed3c6ba7ee1e4e83a3f50ce24a471a585fdb0af8403f04f02f6665b9e8dbbb0af04082178253e00210414a7bb056d8cf4ddf1db86484f03a4a73c7a2953d20a6d8a541e6d56a05cdca06fc6d42731e9172f5b59aa0956521c53691c26a89622a80b4152341d4735d032363160b01952719cd55893f6c6a44c7e6ad1166a86250d8a12d5442502a52a0981e2913aa580aa299b812a296ba10ea501294bd59431f3b5664beac487658afaa3052948d2ab26144c491d7223d5424623254246a41a89a312b5495d9c41d1c25415ba54215760a86449a12f247931a4ec878e1c5e90d2af353084d6a850550490b8a8044bdb515aa78a6a0028f3160020200808858362711807b24c98e40314000a65b83a4e3a2e12cfe48010464110c3000c03400c800000002008c02000c46088297a407f9a36bc05f7f4858638011cca8d8577e04c327dfdeff82d99eae66dd8f424a213f0fcd6fc2568f51cfd332b8b80aa1bacb0429e093156e3cc302eb0720851d39674f492913b23c8ee09944281c828651859fa0a3461b46864420cd995c76e4d945645e1a511c55b73fb8579242eb27b8e9ab587e6345d21d250a410900084d46b3fcab90890ea5b00969712125ecb981121a5e88abc24507079d9a5097ffa478014b196fd9c9a86fba2c9360a9e3b0f97ae6a17e592a44a9b49658ef4ebccc9284435bcaeda5c033def318ff6e70e1cd3006794062ac0aedb6d3576402f7f6186004022fd7e44cf420511e63a383b56c1aeb9edaaed853cc000b7ca18ece680a47fb01cec16dc7eed0d2660c8c5435b0a6e118497d21b4ca31595a923c16df6d343996b7f24001624686b50829ec60a5d6c9742a4b0e6c6aa8f32389c9b45e9da51ced9816ae3c2a319e4696398456ae3e44c77f90b8dc9366aa053814b56aa68216caae98ba678bb315f495de2eacfdc5d8427b49033158c2b3b1ea0719bf8e6f02dc3143545c9628b98948561ef2a2f8900a90506789d8cbc996c274318611c34c295733c16d265ff7088a4c5bb4c471f7a8571fc8945e1d807ce4492634d6ce41fa511a4db1166d80f6d6a1f92854fd43ef73aebfdecf781b8452e4b4cb0fbdf1176b32efe617ab59caa476fa139fd2955dca02c3d1ecee6669116ec8b8e22b1d5d541e4f6b09cbe0ae359a607cf05ae4d0ed2074d0bc6c4569cdb3447e92a8938e6374d923a1f596521092c8c059d29825d48838991768a33fd1582a11be5bf1a20891f30cb5cc0f3d510c1571e579a35236a3073c5bc88460b974fed2882f97309a3b67df490c7fdba56af604c8e60e61a31e343b2105f9ab572ec7b336ac0b2bd90108a15d96926fa7e9950327306aa9579c77926e469a1b01e6c9ec6a874409e885fc9177dd28eb13b6f4776a67fe843393b2c0b62802e6b3cd18310583fe18c993f6039e40b75ecf8d998e72da5327fba141cbe817f4464f71b2afeb8090c3fe7840bf54139249250c10067dd42a0e3902c84e62c4513f61dac957476058d49da562d177f99c7c878f329c6e3e67aa8cef8ca186a4675884ec4af5a55e441c5eb9908951352bfe59067111fcd151ba5ce47f381c089b01f8ae4c55535132a72d29ca3ec34fa375611524fd0dba8e81db725f53cbabe1498dd4d5507ef3ddb0146402a1c221bff22e5f75c6b0da258c70f724754f3812e08a565103800402bd27979378de94f71f980d63c05c234d4c8c0773267a4e6d5cc955783238c85bf4874e18e14bd15e87a16c39a377947ef2596623e5efbb59a6e0ffbc70e92aa8397af9550e92e32dca5f8b490f9ede7f7ceb2c9613bf95b3996b309cd28281466b42fba38dac17863a0281cbd5681cdd614e3f54e13957ecb350227c0615b18da40137b72fe6e2394c183ae081e16ebb87feb1540024dffe50c1e2389a5aa90974f45ee5e6dedc537ecb15297d9d661a5e8db1c24a9f4ffa304271f51659eeb0c7a7b7bcb05821641ea3f7f7e14f72d3d3bd171409117e9ff57f7c981bb00600f532853c969a3cafb94110261d12b89dbdb1152fff5f5283743047740bf82895d4be861868c0a354fc2d48415db33a167409fbb2c05b93ca3757215a482bbb28752f02309625b74600fac2a994d0965f1a0cc2fbf2638cf17b4db1d5db5706c830b356bdc60b43638a6076bfc590524f4a0ff5be2d9e4337053f03d8209a22a8a4482c949d64a027cd33f868253de57e09c143c7d840354d4274070fe6a5270f679c653609b49154ff24d82436e119ee16c1e84366266a65640e41aa408de72cc2ec9e923c88d409b738f1b67cb1f439184e4907f1342777d89a22935d198166b9255757fa0de45b1f0457c4823d3bc6e40e7d56f9b4972082330eca18e69ce7584aaf62f810a82b78aa64f736152c589504d665221f272a36d25e1801d889c104f874f02a0887fc5060fd1828c8ae093a2ac200697478f51295015056aa2fb185964a7a656cf4518c3c91b4fce7c1176a8b637a572b67f27514ca77a1b841aa8339191cd0cfb71603e45592c157b2036acff3bd663016e4c21d6950c008e664609c9ae00e6b0b0e0eccacac14589f21109354222ba5f6aeb9c98cf36b18fd63534025403781eaea6c39698feabf606284e4b1d49a9c367664ef96813283271d2ad9631873ac5a30a814c5cacf838e1eaaa99038efad70a8fd493bdd6cfc4d3452c8aaaaa9eae9068ec466354b2d01c4c22c982076ec7a7a0dc9e27d1a7aae581dea7173133e349fe8c0152f5e234e3b4c3bad62a8c651922d8263a40596ec24b63fc55386ba411ebb0f3fe014bfba922c00b21e11a872e087ad0129ea8b9fffe3e9da0fc7d40e5fffd5abaeea0536fee856f74a6722ee6405df22c45e47eedf51840119a3b303731dbb2714768a80cfaac3f6fc04d75f1d0bd88c98f18a2b528c2dbb5f119129abbae8a845154b1dad3436b062089c44e4fa4d92bc640e14dc8de8eb1db4986b2cb7543ca216dca97ba5033c108da4da80926e23519ffb4c3baf84a92a3a291af646b96b504b1430aff4664acf425f253ac92c021dc4cd951e4284b4ed643626396f4b9768610097245813b0e50d9a976cd3e1d1262647ca61e37fbecca6e945f089be2e3f57670d86252a6d759cad649d03e800626be58b24c5d0f02a9da8ca9086627ceb58cad798df9c05fc2e4064a9cd38d7a6ab4508989ff39acb7a2b684b3bf4c76da83efbe9536bda4e2651a585b96a84613dafe17a407a5db4ebf242b66902548b96078b54cb8570f7941dac240bde522c0f717fbfa85d14b32eb5bdfd6a9d8923d503f7619ecff779018fcf25330c2be794d336cbd7153d7788e2f2e84deb3996b274fc6d16ee221ecda0c03fd51467cb1e901a6160e3e921617368c59c4023a4a0d1034653563049cf4a0bd5b7496b6019aad38f44cd72db5406ab53944199009459aaca9ccc3b3fb741782bcce2c50142c65e80e7b5e7cc904c805a0b37f32f0a1f23767923b82bf600922d3a9b5b2b08ce3f23fc7094ae43bd3ad7a80e47ece98e1ad692e467f44bfd45ec8d9658cf9fc170daf74c6c02f774aa0fbc7d4538c4537436ccdbe7541f0aa0c1d5e36cf92309f54d2b319d3104dff5d54c13fb49473d69b21af7c8ecba139ba8a475a37dde7ddd8fc7d0b263c6a68615fc7f50741185b83342c9d3612e013db05ec562f781ebc1a0f1677bd09ca28e61ef3776ace86354700d51a8bf635f4acd12da8e2bda9f85d51914e8de75c2095d3702177ee4c6524d9c22e5214fcad487acea27e619b4bb12d1b2eefb25b9f1a288ec09b16588a1da186d043bb7af8ba0e70aa7c91d937eb5ca13bbc4274f5e2e925024ec60db97ee2d508d80d0e79824ed0a81e72aa54c46694fd1718d1f602a55b1935116b516b146f98ae5c1430f125e7313789b2b81895b1ea2d75b210ca1ba449cca55127a8b11894af0facee25f83244c376da901b3045eca33e59140bcc300c4df4309219b9a7c281f0a29742d6514e888193271183eb10a71badf06a6437e82ce65d24740fe20dd1048005a74dee24e01a946b0604f5868607a1657c03c16cd1d811ff652153f216011cc34730d1fc14b3273584016af6528a9cd2a441a27283e004fe9a1c09ef4b92e1b5846305585cf514e414a274d406c4314cab59d1c210aa35afb15871a0f0e6540874096da62e1ba88279524547bdab21adeb06046dcd551681f4331729a39bada0dda78d51a2e7332a813e88282d0e247865f6b045c0bece229176e674619d1dce68a88b8ec68ef30e599a4e5c52c1ee5651b90e1c0caf7d42f16afacb20de8c68d89226db6061623498491af4902401a98d8865b12c13aaa3468d0b079d96962a1d031488eb99136de99b94558d5e1611b217581c032fb26a8a761a53823be6368bf8a015418b575945be8a8111f9638679dc138aa95da7a5a54ac7809222c16380b8ec316776e4460084c9bd14b2ca2b6055c83102e3753b560d6da78a0602aef8ca09de3b65a40f04445b8d05415ae7665488e17ba3249657162694559ebc04f10ea94190e959c34bf41c8602bb3951dc79b3c8d7c704871024c04982caf76203f827edd448aa1efd0633a2dc1c41134a4c14c6f2ff7b91ab9f2f9578f997ac9fb3a5e4afaf54f7a80489f5d70a9ffa467b57be2a85f12df7ca38aee5fab074dcb018feb7c8e5f107c19f8f954f0c968e97df4c818e703b67c81c2c191765162e2fb6a1c3604b1b88568d7f19768d242205a3a8a67e91aff2b27c9651dfdd77ad3f455f73f672e399fc91f93d395f136739799889fc03ca6bd0f8453d559ecfc6cf44e776223e4d2e76e7f4656763af96e81c143c03d34efbb23fcb90a98eec09343ee8ad3014ae16884a3c45712f4dc55b020287716e37fc610c881a9fc3b61bfe9a47146046aa57896ff46411b0067727996b72837803f597ffe7981cc5075587da113488ddab79fd98037f561153b14f446e69ff609032bc977ab6879aa2dbf020ba68b52d7b98d0b2af7618dd4369b0b56a8b16ac05c424f65878219a1401bc1a2ae7c1bd54acab783750527c9d6efdaa9e03566ff27a8869798fe235b1d1e56d42ee9c5566807c426150e190ed143983793aeaef4163a0f64ece9687a0b809b2b349b4172ead08a25d9859e627ff3e14d4b66527f34cfa606f404662e9ff5708440190ef52d2467584817834ec049686720897e42d6590d194a619361e8181180b28e0cd0ec101c92b4e884eed218854be7c0c182804af3124ea1db78f5e8ec8f019db074b98c8020d06c22601cb1da67c6d606620fd730cb4a534b60eeb84daebcf602577b327abaaae057fea4e3807b939505bda7bda5826b37eb1ba2f901058d4441bc02be500744ba10e6a4a76e5bd8a41abcb59005c1036496a683e628a955a75dafedae8db8206a1e61e411dfaf7d1c274125c565685131fd90c498faafe6ddf87a2318d956052c576af8090d24296443ae02a10abaa4ac50cb217621fb8282d39672bdfdfc6df788e44a03395cbc0e2fe09e27f7fe6e76cb11217f9fccbe8ca4f63865a57e7504cc37cc56b0d3f2f47a51712ba4d6160ca1650b50554c1c2aa77b8dab60aee2f1225a726fb5adcdf503265eb53bc4fd62ba60c0b09da250392a9a5c62f2f853b7709210f00dd1709885fd5fcbdb34c9794763a81091b00489d1285ef8c19583b8488bbabb5aa4c155ddcd954cf92bc7e7ae1c487514e19e8a229d14fbfaa3ecb0eadc659478c48bb69a17ab676991b625dfc58ec963bf97459b92ae5bec248025e11ad5dbdc3ee0021e4a108fa29bcab4e3ace9fa2b212c13125f0ebf229af824c93d844be881a1d6f0deda3e1e8bfcf12403a956aaef5c82f272b8c1bf50f059ba119066168acac186013ba013322f94a7ca38ce50947fba3260c665d50bd70cd424c3922e9d7f643af2b85bb3d79a96d59c2447d72a302e9a8a87422d07466cda5705840445c93c0a03668901bbe94a029bdd0d01ef2658888e1ff09ea7f8b8c8e1d04a175bc2183cfbb7ba6dba8667f6ecb5fd6445f90ec6d943d67306be03e8b1e30a7d0f338ad7b2c9b5fe75b6c593085b4d6b2ece6db27f4600758507fad8df80ef501d4bc23d74f55ca3602a227c20b728cc1f2c20cd771a5868aa7029b1eb19aa485fcbfbd48c4b5146a2f996a7a28bb7be593c07138e1758885d62d8451c0a81f0082456fa4fdb82ce5da11ef513c3fdd8a56f57d6b17ccfb4bf1b52b254814c0347208a55a055f7d1a559b3764507da82cefa5957964b261853bb337591e9977952ecc9fcaf046281fafaa96689a376ea2be4834e33fd0ee2472307aaf03433e6fb6a925814f013855a1e64ff7357db3a138fbf2b6a23655dbbed20ba4f7d62f50c4fac11b00742f6bc38a8aad9d66c88277e31875d228aa80c175950e0d685aeff7972638bdf7f0593536883c0c025701530a2046a0064fc9ff913c926967495fb81019123a0e09cf852b8d7acf8e66b53619a1d1ad25bccec572a45f58277ecef1159429f1412c0df96b9b2a10d25f8f69a7886d8cff816081f9996bc2819b95b00b31318a8a70ba0a3456a7fec418429f89e88d2bc046a6e2fa9be098a3e2c4a8fa41b9817d223236eb2a11843a334a36c521b49dd94ed2e100b321730ed18ab3921011c4b35b417174385a6fb02bc790ffcc5b16e1006dd16c428a1b8adb10a99c65972039a8d49a75045dbb226219211a2c02a2f1e8e725ac3614d0e0d0f424c71c62ca31929b454c8edf0896357b5e19f29e894f36e3086d7a762081c2e1b3eeccea894867f62c3bc231429895a408219cf98d8445cf7c5d80d598b1647f1b2268b34e899084b31b04cd915d8e11ac59fb05fcafd9c088c86c56a544ac752609393c8762d9339d12d78610f3d9046588a16b6ee2ec28a59e1ccbd6ce4a42821066760285a3b301ac38ac53b31bce5938f4fd70decac28d171a2bf9b7c1f40d95aeb36412cbae8be41202d1068b03dd1b82fccce62d4320b31914b1b4b35b24d01b42b833df17f13933761091d0d9b0d4387039141c371cc6e118699d555784b8671627edab4c4b522ecf2d258ae3cc0249de41720a4cdee5a31f96562e7f4286f971b9803677b627dd0678438e83d0468b1ba98dd341aa1c12ad1e1111cd544a25c78e43fbc67239c46fcfbc4344b866f122e34873ec72d0727468bb08e746d80d96dd10a4382b9984c831567e9680e473289b23205c333245acdf59a0846c43086a3663114dcaac57446433cb945f0e9a1bd636d0b4c7827a033a37c4b267d39511d74c6c32cb71e80db1fbd962cad8a4d9ea8a20ddd95302cae13df14c4a0a1bb88d8a1bbbd910e9ccea4bef0684718cc8672e2882d466ed92149abaa86643c87ff6403462432c712681f0425b07b38695c2c8635600224276562ed68da59bae4c3f7a381a759c20373d48911b661c87e7106d319b2c11419ad995ee8d3087ec8de21b2c6c6c4af30429c6d7d2b7709e01ca8c23d31c21ba334bb608919c4d47c2ea9acd29a2416707a4ce91cfa1e4d8bcc15c8ef0dbb31c12ae0d91f9acb0d472e038141c9a3776d96073b8387c1c108e23368cc631729925472e3860d95466d2b4bf38299e75c5e003d49997f57510076399c2795809b63aeb8744043d5b152d07fd360481cc3c9314e618b9ccbaac08629d214b1e4d5f9adb10129e397c113b9bb93211b9ce9265de0d606b6ed5390f2350aa66ee98de6aa54c5aa641c2d094df055908d3da8eada49243ecdbcc3544e4370b969de118829ef5b108929aa921b438e26f88159d7d2401710ce23a2b2b570ee51b9a3676da6071c0bb2d3757b314399ea6d73a0a5496d0fe199ab51ca16a6f6d650f0c09c9d721cb379241719141800ebc4e628d76c7cb45d8fc4caf70bf21043ceb581922334b2ad73640c1e13cb7b3d5821a9a90b144013fb304cb0230372a4dcbc50cba12d97ab5748fb8ae8877dff1ee209c73e3e67e59dcfb81c55a9e3bf9fc7b6cdab448df121612d778df0732d2066e82521aab81a03343b841d966f8d6393a0516bd7ba7725ce9e35f836544a70dd1408daeed78b17f8816447ed593793f1bbc3ad3af49602acb22168f6ea292468a0cb76ec7cdf3b02f4f182813592097a58e51e12b48365a1bec0df08c3c24848aba588923f50c4da68746e77e0b07c0f6c996bcb9b9636a19e19c7550399a7ca64c2e1b0a1baad910c99ded4b9703d486cc3796dd62e7627328c6c2b2c16f436060f3ee972b1d95ed2550676b496a3886fc66cf44a31c6209663e212208b37b41b7d179a3fd0617c7fed246ee40aa9f2146f3a811537284fa597c30e759364c4940e8c7614aa9c67d527c5826ae29c3028fc981a941096009f86b2029c2b7a6b816eef58c59ff3394f9943754e10c484593561064bad981835205b4245386a7b11a1ca1fb58eafc97ce7e1391b329d3992f16bccd6cb26dbdfb2bf9a2c33a33387487de6c3488ba2861a860213f4f80a5edf9233112a0f675b9604e2d15fad386fa439338d214216fdf42d595c5f1faad15e9c534e0349d03098b025647874082133921c7652d2465c659e88c1f4754f1ccb6905bda65104d31273f771dccd4d14c5db39cbdb063ca9ae683a08cae058c2920dc0cab65110685cd25fd12d78a8e29579b2f42e03e53d520d98a47706c3877b97d1625f54ea0f3f9f496a4ce2d101115f47ec849256ff84afb7b6ea6e5a1ba3ebe5a1ba505f6ffeb13ab943730b8ad848366f0649f91d5e0db5fcf8b9d57d209e908c59e8f7c71a423762ad2d185ac8b2497f89bb832d005a932a440e411ead28ec8edb2063913734b90f97403f5ada216e16ac9b08a77471de36c709dfc7e8d56595cc5cfc3086cd20d4337a967a71c2b582834fcc7ed98151de8a89db1f30c6f64e344eda31a1f4c87b3089d0daf970930957bfe02872ceacc58245289c6b7188b5ac460b83a3d3c5c9ded25b94ada1b0f8b6826a7f64e950ddbc9df2598e1526349f8473d305ef286b9e62330c164322a8210d320e7f142b73690c3d60b4c85581c24263cc0d4a28a54989941e63ebe318891f5a7a8c01cf41207545b1d8f0b109348ceab1bff0120bacea03d3bd540dbc100378202448aeb1fd55d44a3ff8542efa75e139095cc5cd043a306494dba83c75a0f0fc7b351929fa4bb4b5e0bd7bb4baa88c5f5922f000afadfba38d1e13a01509c58d752e6165866c01670bb1de6391e48a13b72e01d49311c8a4c2dd7b4fca8ca8ad650ff6f2bec42cf9f3b525532aea4d74ee317cce44a21252b08b750b618da0e19b045e5402e4133071f400c5f7472a24cd16bc46c72ca842e5fa279a024f541e729ec8456de2bedb52cf9c8a9072895d002ba842a7a7f6fa71062629469188565fd114a054fdaca5d35193cf8247bd09502e5050087b7eaac646424194fa60ee25b409ba0d6038f303e68b1f4fa814a3c8d7ec79196cadc518ac985443212f4a42fea21f5a38727f39b93684a18073e25f42cabb9802e4b538506cef66cdb310a8647d2974048b3f1c5024c5f110fe2765444794fd19e3f307de743e65108505cb12b2d6d7781782bf31a890d2dcd2221b172ac73f86aefa74286f795230f836a5860b17387419ca0d6bf27339bdb7fd06bb81271f2e5a23a1f8583cd8b0f65f20e70e3849c7dfd7ab6d2d06a3985944505542680ecc3c7c9d5da45452d805cfdbe6907d66d74e46d38fa49a1d3eecad964550de018aeb737b5e556171afe4ef413c4824c78ed20e222520a489411c2eb2fc568b2218d8c895473a11025db41aa29ad21caa269e7fe8a990118379056120f65dc6e6ba205123e22a9f3de08f89c7dad3a5db23388a4a442c7646a96528cafcb68eb75bc4dbec9dfe02018031d736cb5720c8d298baa079053268bada4aef4bdfff215a8c11b2e0917f5d67e98f84a0421df64dae61a039b92510e0ee87ffd36d758230a827326e07842c1162903424ed915dee610dc963cef3222de441e29d4b7c13ab041767aa576283e0b9d30b617e093766779f3af9f6e42658e03269466666db73e6b5fb8193a0ecfbe7d7976f1eca607263d050241349bed73663c30b490e52ecd8432a9ff0355b84c6b593c39356f1991216a07ebc21c6923705bb21653dcc87f2673bc80c9d1927e824b94c0c0a1cc489785df82ec21339fdc8580199b299dddcb6be24e00212f2e516a6902bf0a05a63559f28147a41be0aa58640aaff67e1917ce9a9a1df608565c093d69f200aeee59612a270f5ab63936d4634d74bae66cd1a78a3774f7b66c148e8d8eb26d18d70a74538f1f2bc4565ec43935522bed551dd53e205f4466ebd8d3f7b882a80a35ffd36caf6fbeb069e2c3ac89b172a109928f312f42b5c33eee9833a36b05947a455fa1e7f135fb450bb799da096171a42cee42fdb7a95041a5a1f8c4bcb70fe47438dbe69e927c8e258b3397c807cd8ea1225593881a32f693ca210e47f8e04bb852300a4cf12a0787d0f955e5da152ff236e419c38b4247de63a068c0c842004ea89b64080b3768bd56020ae2023f83b6af07daf9172207f766a256318ed54209f7ad23c7cbbea9de3102b89ebaea1ab9848207fa50b285c85722aa36a5d814073c46d557237139be965aa3eec8812da2ecddc62bdf25ee9a5b69af8e5adb2283960868ec403b443ad854cd74654b3fcbefe2c1a6949cc5081bc522d68f80d7446b9cd1960c36d10d32bd8eddd3a3b987b2b9f3d2b61c43fab6ebe9ae99907d4d21763b48582813435d6053544b8c00082f0f044772096dd2764d967425dcaa978fefed9ac2eb437a4ba9c1b85abdacd0a3467c4ec42bc47b5a9a42a5e62fa8805f9cbb2829e5581c54e994e46498452a156e62b9a28103065b8225192ac5644033e2e1ac908f1eda162a2d485442d85187ada46b8a8b4e89bfd1f1bc1261e7b91b3e055c6531b40d0b87695aa1df94ba05161963a391fa8ab487110dd4635aa14271d32eef41c88d3dc2c94fe69320b965646f640bee25f0987f7f1c82a1d45d829675fa58e900745c0dfc846bc11272799c3b919e3af300d496472ba61db559d8205c8322fbb0a6b4f37a40c3f894f0b8a1a26dd21274fba73bedc88b608ffefabf268bf29f9aea052ae4dbd039603485a8736d04b86a9ef892671f66ecccf542b92f33e68b94849b716a9dcc8a913ae96d49f7901daf7c8e496f3cd001386dfd665cb43028491e32f1d343fd62bb0cb423bbf7e6928725be5673d96406f4cb7828643436c1c92788fcb9582d11e55ec0eade03bba3270fd4767a95a43a0fe9a9b4c43c879f6300cf84004404fb5a84fa892566775b4e27529763b729815b22b117456a2eafada075b106a724ade556bebdfabad7e19ebcc38f2de709575a8f728dccd668893861c00cf0e880e17714123a94c29027f1985a39824f8aa2fd31f56d4b24120b7e3c7c43385022f4ec31ae449f3c2d331d11ead53fc902ecd6865e8ce940670084fbeebe1a0f3ce00c2c47cc96693913507225afb3355d8e56b65abcd0d9c5b6493fe4a84dc20e78a3c39fcd1c31a1d003f498df204c9679286776b3969d01443d0dba79823a0b68173b69a9b9353b1da2ccecdc4789d216e88126d37775511220857c5062026bce8256c3f1a533b81957cb27b3535aabb144d5827253607fbe7c8d1511c30cc6372a3420d0d5214fd6187184a8bec8b6678317737f81d767320556aeaece5fc2fa397975a50b5c304cc26c92348ab5b9af3875e652c9400f16e56e9f4cd7fd5db8ccfefe16cdce074ae032f40a1930af109dbdd5118b261696288ac9d4addd3606348fa552804f779120cd29a676b202dcb89b6ee197306fae1b6641dee1873dec18322f4378f6dc305b546b415bda5950c020c2731ad75b6e388c44ef7e3aa834a314a52dc44425b31375f1bdc0413a4e8fdfcd60c3340dbe39b6618be4fd8561b2e4d900005f414ec15ac99c4a02f0245f44fa7e66b3349bb6755a25d109032f5d5377f31fd3e89a62226c23b2b85958475bc97bf07aed1e76169c834e85e66dc8c4c07889031a76c30f533446eea0f466c065d860432573e55d9544a38ab7d32a078932bbac15c10d81ba4da28804d6a48a0c1866d9f40d6cf012bfc98e86860c8597e4defe26dc373678a16d0be3520463c67731474133fec4628baed07eb34323d504e887fb7f949f62e1ad090e37c10d530f6619ac0f6455a98d09c53ca787b79aea7c3ba31c6e54f8a0880912ecf5b60de5d381cb685c9830b96bc6c671c49783fed59c0e7305dda49c954881a5a56abd100c6e8418e0a0f078a758802cf3b51a33c1fb65bc213a804f80885210dc7fd5e042418487ef97343bb095d8d70e4a30be1b7070b28bcbcccdcaf14345ecd5691b75125891b1c36bbdd6a0370f2ae890b603c7bc05633daace776207dfb955c4c27508c2866a375652a6936eb89065fb6e142aa6eaf04498f46dd648c24e07083495d04c3a8e51601446ddb47396163d5089aa6d5c8ba4e36633a6adda910b65931594ea99e8a2d2a4f654e7b4b5d3381df1e025cd6fff6120fbbcf042d0787754edee6d8353339be1f970fcf5da2d8a850e4e9a70a54a29c38e1185b84e7e7602ca2389f8f29b958670ca7bbc6f0aa9c1e59226c6ca6009cd811e8868438125107237be301dc71207f071336c38a907da252bc6ae2b454a45cb4752ce7c3e068053c04b14ee52475ba9a98b3efd169c396e6936a787eac7cd4c044f8251ab6c432602446830fd1442960e6913784ab37a196469c3b3c519520eb8f12599ac8e8bdffc57e39591cb0df79d656e647fe9a3d55246d2657d25bf252241afbfdf5ec546cf5432f85d6137b5cc16d55736c09d39d23a512e52bdb62a17da418f4692c777d71f328993b2dc29b921ea38b51cc7b2d2535cfc34f19411df496eac7e16be24270f43c382a50cb937845c799b9b51a65e61415e49fd0a4be6309370f31c61e694f71f5f1dd7c56710712de7352ca91f41625d8443734ee1bc5b5dab74b9d58c61c669d3e0fc0b0352cae87a577ec2e64e344a2fe6b5d958b19f20f2e00b3780f9411237417251c687e45ba1f101af1c93c3adae6e178f8a4953196e033fded1e523e599c5ae26240b832bf698558be82686122afe4ca9ed56c8701ca731871c8cc65cc3c11e9e2b25cbc6fe85a0e7f970c864e4a4d508865714a653d14052e9800c0c7225ec3e724bb6a3aa2091d6d0fae8f588b595e200e836a1811497888e0a69419a7f2cd2b76204445284ef7af2e0f054154c3aa1459ba310b817d4785c86d68425f4ed4335130a40fc0f9ca1125d84f06ceb21bbe2e965893017a1a0a6dfbbfd2ad141174f86a3933faad8b228686a701e22b5f8a364a6ce842ea42317e55080f961d84487ca8d7f14418bc854768247ce9928c5e0abbcad2e13713bfee80b1fdea08fbf945a008dd397dce406743390302733cb57fe9db14ed3c563cde92f3fa4d42b920051519874093bc2e2cf67499bf74824d833995c2b141b278d43e89e8bdb73570be94e28b5cdfb3a24b12c6c7da0495d929eb088df5fb3be52646684831db6aef8539577326b3cac8098c774b2cc92e1eaed4edd89ee58c0a3840282ce5fe282f023aa41262909998d29017223b57f91bb258a279531874127729bc6d9b87f291bd1c80ca1b5a33f50c0acce26e18e08ec7b413951d7720a0b9096012e91dc3748d6c6bffee33fff597e5deebe49d2d8cc0065160b27caa251a8e0709eb9487d6a4ec31447b0425167fe6d69e9ea88377ca8d0de1a7c50276920f202acea07fa5f40c18e389ccfb3647f77856c09df6358a7ea27bacb8285d2e908ef60a108dee71b70544149481aa5c4a6b5e130b5efd0022f37caeee8c0c52b0743812020ff30a2385b75c0225e58e852c136fb869233160a62ed3f43881d927d2c52f69bf11aff8872ef0b7598a0331480f769d9a6be656142a4bb81653562d9d27357d1b320c845199c2077982ba6fab4e084da8fbd92e7acefa434861d1fe886ef51bfb9346009b0209a88bd954ea7d2014e5239f5bdccb248fabdbad951d645752b791ff230edcddb1c144e0cfcc411dce0950e6269f31f78c2805fcb185d0003658c69877274bb15d7189b8399080cbd2f739df7732f31532735e855bb282c29fb71a05785d9c4861863bbf62987610b6a21ffd50b3950a676b78bb3f7b4454213e7d6289e253f7193436e3b8f458009d2da5c3bf47416111c12ced2d4885cc84089767116450e9218abfbfec140fdd3d2c150bc6d782effd4e128a9f9e8d339b11e43e160168a6281cec732cc9d7e715b301ce46baa964b07bf81d16c1f27b0fb5a8942fef194a0020aef59675c304e42930eeea0793fc8ae1559db3af5d62b60ce1b80eb41a4f13ad17a8132ef5275d70edb434e50c98a9cce5eeaee5670d60805401838842a20aa5b6907ff4514fb3cf7f1f5de3520556c9a92991640886c42f6de7b4b29a54c49caaa068f06fd05d73be482dce762681c556bc551ef54aadfb750b40c2364a644b1a5cc4d06da09a04002440c525dae304aeaa1866a6679233c494a15e25c92a0b810e7f26e84db242dd95a1a66d20d7506a9494972adf37a49327ff40c2b1c3584a0020c1621a088f171554484290551fc20926b7dfc8329d7ffc0bc77a1de5f8f6815582521136688d10e4b84f4e041c895252a2b41a8d0e08bb7a481b870ad17d8172f48a4aca04011a4ca0d495451244999a71e00b05348ac0c1b68b8322226882523281a4c507489f292c30e59de082621ce65c96c82a5987ed86817265b99d02658aad68228a931006d0a1dae78c92207160e8000629ba2e5052780d8281c34d47a7431e284142878c062880e5b966862a2a826e40a792509fd71255b6badb5964b130c56a0c4d41247608c8e386286d41722866069a2cb8d831abce6de2427f9fe10e296cb054d6498ac80820a33434755115684f13205c4290339c265b7f406a838aaa1c5862c281a13a89161410b4888c961cb0f26f902d9e15a2d217d6276a08b11207a08e344920dc9892958b011a5051b3f6c963be9bdf7c28cc27ba9df1be68435d2a97d1ad22950342431244b550bb8f0b0c4661525088d2b2fb52422f3857cefa50f732194390c3b151079992c6420f1001221c8ca328f2b44e9ee9e73ceeed9dd05688d329838a72c8724d410b2ca6d484ed1845c424a960f66c897314b4491534bb294fa22af4091420c21a5bc7cc1623e31a046872f1e80f1e0855a6f6b24fa818814e2ca00aec4a6c8f24524766888b5a085d195978f9d234227c81e8a58c82af4cfdc20036a728be307b2509fd608021e5e3d7ebe64e95965b925cbae3586c07693c8f21d1cb23c1c94d51f5966f9125c80dd81b56429f3254a9d52ead49d5277a7943a9d575a63761664f92e5a9641598a720e40fe4d8a22e50707d0a6745f474919828816684d7a90578a802a228a0e42f0281242136c85a0a20faa6c23e4fb1727f040b342c3b2fab0f5f0625563f8c480b1c3c4a7aa861425bbbbfbb7c3e4f670caae2c6b3dae64354d1e68563cc801f421d75a84c600365cb0a10b1463ca8491b1430a2b4844bdb0c4c8103d7cd01e40a07ac0f0e594f9fc895756aeb522013a416b7d0955e3a125d7eac3c387dccab2c6c3890705860de20789058f2796b29eae245164810073044511254d5049a209261e4b3b70086d6d2789ad2159c10c5ba8d04264476d0713193e720c3144952044c430c6b3acedb0c107df09e282055140e560459514463c5aa2e4c8a28a133d24cdba9a0c3f5e4f3b426eb2aced40ca5f96b51d37947694768cd464c8aae998d56428ba614c71678f1b5190bbc7b2673efec28ed53828039cb68a9d233b4b55eef7edbedf2f4de8afee18a148a1fc16e9ef0c09479a69900e51bf7d146817caa0ce84fb27a0807eff9241de5398943d9f312c01f9bac89296314c96c917a643f441eeffe0037719664531e4c83eb85a2b2e8e76a708b65d9b21756d368b522ba538b97edff0159247e6d14594c38a76a7478893e506f2fce88793a7f70a7678e8d849c14e0e9f5dd43b39a26a58c38154bb81a3890b312ec6c8fea24232f3e50b9cad72d7600893bb6535189eb2cccab266e329d7c0aa1126cf8c39ba1343389f0ed11f5568ac813cea4c10da82429da833c511748cfba8c8717fe54e0be1ccdc571df9dc4b1df9f73bf955478a0cc0ca34731c0772b21492f3e7d30eb67323ec5efef71cf832f69923e818f797f3c28ed5dc7dc7fd54c7eabbc022f49182a7d36dcda617b97ed3e7d5cf73d0077c8a411004412110fcc984bfb026070310c8f53e303a766107004101a08bac9072df82750f7e07187dbcbf5d277a1dc77dfd8e7bdb1c37a93c25ec8e0be17d99c717f25fc436e81fab018eb696ebd70007c694725cebe0b2d99ae36e5f7a058a7dcc814010a17fbca5144df02942c7ea4f09d50010daba38d22cc59ae940301a068c9da270fc4618f9e6503a1d84b6346a474cb5a3a35a8d2c59d66a38d56af8e82fd77ed9306c425bfa754e1796e4fe69e98e0ca109f7db281c69c8cdd914ca9a8d2799fbab018ef0bee5febe0da63b0d80c2cc5c28836887fd83427bcde14bfe80dc5750a6c38918dff72c48f44d1002f7debfd49bf3a2701f0515709e7200f655c8c952f650908856908816154d19b344d5ad28778c422aef0d5e97dd13dbc77e5fc7246dbe046506c1792867b4c468c9417811eb6f90a813bf8eb9a5ef228bd0c5cf07c3c20babc921138e2f32a5f7a98d91e78bfed9202f4084f975fd1c6c80cc3add77f8ebe3b73dbb75dfab9376ebd2a0cae397696d0656a61fe668300b310565b567b7dcbf7ac56b770a0ad55a6bfd5baf8c3c61e337aa902df774ac26543109effb03385fc2cde37c7d1cd1042ac8114d70c1e3bc0972fee66584d042e88d84dddbfc9c114f9834ef7d8b272d680e74c1cc8ffe93f3afb781d91cd9cc1c08e71bb75e7a4b898cb5943f9529bcf55f00c392677e0e4ccada64a6697e8f2d9e728f611e5db7dca0cd516e0125b7b0b5b071a0364dd8589bb2ad4afa2b53ff4c19b3df8f03c392c7fe4d85b1108e3b52e47eff89f304e94b3aa7f43025bbb873f370f068f862dc674671297994b4e1bcfc3174cd5c405c472ea48e751783e4e9c7817535244fbf0b88fce966c85823f54f57d4b118ba1c1d8eee460743f74267a33b924136dfdfd53872a05ad4b9d0197534ba195d0b1d0b5d910caaee3ada31763d727f37eb0f6ebedf0b71de85f3af191189cd0a61b64f035b21275b11098e58b9489e2264acb9c858dfd430b9eb12b9bf527507fdb5c881a4dbc06a5495923dfd34b0da45f65423ea94ece90f61d58bece977c1ea17d9038682b0fac1aa16d9d3efc1ea1658e5227baaad62a944c89e22644fdfc781552e92a7ff0656c1489ebe158c0ca3aacd81a6ac45360acb20579b03755dedaa2d7777ef8f5d51834337cb97f58ad65b4c8a5a2f45d815e59eef52aa696f07afdf7349ffcec9698ef36f29f12b09479afb6796912728d4af71c8c5500c658f94d1747f135111066b50f6c27fdf08d41901fffd12f0ed44cc89d84159289b44539cb267be14db5593c71831aaac45022e018b31c418ce6341d97cf917249a22bda0cc93f9824335b9bb7d7c38507c2061e71377b2bb16a5a2d509c12c93514065d4be4a78ef2f6598c7396534fb4b89a5a44e415a9dc8c377bd51ebc19fa0ce08e1bbbe84502ca105ca6436fbdbec59264590d972dfcdfb75ce3927046ce8519e3fd2eeee765076dd9fb8bb3ba5945259ad8dd448597eadd582326ae7d37ccaf2ad95f91d25569e57fc212127ebecc17e48c87d97bdf73a6bf17ba20e51b6d6737d0e127d4cf9c7582c85a10c327e590636837c456fa82d0aa80caf3f1a454553d40047489b6a0639020e54c75ae4ff59e6d17fac45d5052cbb8899e46e9ab77f7470cecdcbf76e604092a7df069600c9d38fdd4747fe7020633d64337d6f5298cd4436fb27400681dfffc123e0003228fc7e03c8a0d7f70779208368be3f860caaf97e2019c47dff8f0ceabebf03181c148000ef4011701f1984dfe900473e21d8fc28ab7c60f3d9054372e413c24d8c106ec2d7cdd7704f035b21ccdccfc056c8c99c88e446c4cef3921dccf766add9264f9c0e22e040fdb65c43d3e5f9335e9eff0a5b60e8f983dd492bccd6dbf2bf8161e7719e4bd3d8098fbe476124dc309c2009f6eb832558118b7896c92e510685c9ece1567b0ab22efbcb3a0a2b93db61286819de9d84b357539a1252842acb5a115b1e6796459c9ce4111761ca4590f24871cdb25644479e5e6446adbcefa144236b5add309d05caa50c71426b4384e05a1bc2c3fe0ea59b52983cff1bb2a43495e763297ba4078284b246248c6759234295658d882d6759232204112a24d48a14e5f193352257d55ed1d6da5a6bfd30164f4081028a96315c7078204916282550c034d1e19a42869213236cb042090e50dc40e384873156441c014594db825a6badb57e984937917a556de009135898d470048a0fdf4d0549aa2c4519a38231ad1b124c81224f5196fc80451539582033a5480a0d35f8f00316340b2946a8c10a4b98db0d1ba00840658b0e58c6f898e2898d828a5769420a7b7f1784b34c42b4bc8098acb5495e0859e285a49f6219e2020748469025c70da329204ce49851830627251990e041444ed91031c38f2b2b9a5051d4830f2a275d7248e20a0a214a6aadb5d65a6bbd5ab8586f5ca3d65a3f5ca3549a1f31831c754da492b2a2a6ad15797962a30a2b2d53531ce12235458b12478056fe34886b6d1019b2c5a19d4b0d8ee309265a644a0d241b379e2013c31626564172984a811523803481d609fb77cc4cba4b78500f324a9acc922c7171c052145c5e90c1ca8f3154bc4a139c0f4ed810040e48626c00c0939122783c5d7d31227283fc785571699f419b3123ab4a19166a7e3091a2410587292a354c2049628124dd256c3c4062697e04fd92c311248618b234c5940b946ca07d91c207284380ecc04ae0aa207c183912a584952ead178ce0010b2cac267e60f1238b30566c4058b18a626a8a25111c4d99b1c3132c20513fae6c12356ef3f1448e2a4f74f8e1060e43f8b0828394a6221b1023209092ae2f58f1fe2a85e4892e61c43cc16246c6a740b9e1f88146153e0019d34262e27850414841192048a680caa10a89054b530d3524c6e480438894961c53a3549a1f319992542c15a0ec73bd1307525937280b3bc6496eb6d36a2fd7aa2295e2d959eef787124e138e3a466f74eca184a31f655aa33a666f73cee9802b6f55b4ee6efa5d4573f72a1aa5749cb35ae71195908f3e994e0961724a88391d229cebe35cc531857c9f1385349885f365c7a638e445b207b7386493ab1f1ddde42ab6ad63549cdf334ec9b33fcc59e32eea58eb35d23f77d99cc5b9fe9ca0bf15a156ea97045c0216739cc779e45b0bbab5d5d69fd3bba03f2882ccd5adac4e6b5d10a8383be626d7a22f337d8015a374e89b20cad94eab37add1f75eebc12fa1057edebdf75e9dfa15bf7d1cbb5fe79c1302e0d35355d59327b35d8abb3b9d94d25aab9d4747f68e322a4a8aa5d6e2e7c614b2fdeeb9ce26e31fb2b1c936198b16d658f75eaebfa57abb692965e8f23b4b03c90d6cf2bb380ad1a7b39d567b31d7791fd87285af199a1a9b1b9c9c0b5a8c4255d4913df31da653450c64cfcc40f6cc77b1237be657a7e6e987c259c2a91a26572ba73c7656ee1f37c8b7be6aac1fe296fbef968721a459d68cdce0a10815228439619865cd8852c74d09ab08b3c222b3194594a05d2c27040f43bcc0848fa8295d2410387e185d11254a105110e1b257571d546c455893e31303861336d46852e371c3989a15544b34a2d49260c2c88a67a970c107460c17708caf06039b4e95908af04a714284c88f3c331006869ad2d4bd975ec5f86a302002431e5fd0c8bce5b042ef2a2cca63ac8b2d6c5bfb71549b01e9abd8910a6f160c26c21b668a700788700c77c084e1c518638cef5fe57c4d6929eb645953ea218359d6949ce431566b7c0d5fc3d7405fca395d8d71532923a2b4976eecbc365a3d2aa63ee54f8c18f0c9cb2063d80b7c72a0d70cf894e9eb46ff7f7cddb81b77d5316a3bcbed28ec9872b5b35eedac773f0cde0f835cab7371adcee585dfcb0bbf1738d3a2f1f9669696e4f9344cae5ecaf36b422779be4d53a6add4b1f958575958574da38b6e4f4e504f4e596cb4893477cca4893477cc5987f12a19e6ea66011879ca49c5d94e6bf59eb59dd6fad16aef672fc6dfc55ce77ddef779cfefebbcef035bae96cbe53d5dad0f04875aaef0738143e16be63533e33d677040194dce05a0cca685ce8d8e8ef7d479814330503634f30c6f6c6e6ebce70dbe00b7c614327d6cedf4d668020c846a9e7ef0a9634f1d03a19e5eb799a2fe19ebeb76f57ad12719542ba5ee8f153a082e41219cdcb68e4deed6b1beea182c5391c3baf95ee0d3ebe63c374adced966fb287e6d4409dc56964655d5d595971b7a93c72b71baca91f4d085011e3642ab6cd6737b70eaed0dc6a3db22f59e098a238319585eec9f332c8dd9303b5b09ca7bf8f5a371a4e4c6ea63cb6b05a372bd2b46e7e247b6437b983ea9e3af6d4b186ea58ebf694fb5d45fd73bb6a61b5b26490c43437214ddd474fbec3580847d71012d82aac16cee75ab47a944b60cbf2b9273288e392f1df6e568f38b1459b6577dccd46ca248ff5e86dad2ea59e793a44f2ebcba4bfe792f9d79791e7ecf6ef93d1af44b487a8f49e94d6af39ee1cd7b5d65aa7c4adc698484657d8c9f5bdc3a7a08c5611267b2a28b33a23dcb75f02f7f8af35e22c28ab32f20565544acc755de7715ce7245c31460ce7e1baeae5e478255c5b3f8eabf54f98659ca8bf7a95525a9b5611635026a5d781fdde9d5f187e2009f7ed0796702d088a20737da7efd196b8455f36c1a12e852ed3775997ab78c22c5326eb10cd972ff33038c4655062b08a3357710c41a6628bb443183ccfe58143b6df5f4878fbbdc7b25926773fd22829a594927b92bb7fce39e7ecaadcfddddded61a42a77a7f789525ab16ab5a3653ae18f84f8b9ef820cb8f97b0fb74619f98af771bef761dfe3fcd5efefa27cec8e72d7a8dce2287354a622096c9903b5493610f62657c573da4445b5a4a9a85ca8bbdb673e137250c8bd6934a1db4da84ea5a924646df89784f3a56c3421d36f51824e9b8632c82dda9d1b827f9f8b8a395db739a7eb4645cfe97a42c6dae57f03cb791cd805f54913196baac9a9b01ab4b3b9aafaa732f513f2a72a31caf99b37bae071fe7bd7f72e90841650240f8fac051419ebb7b121bd47197966e6a5d4a99ff33242b881e9545167849b0fb5aa56d5aa5a55671df39f8ae4df30c89fab43c6fcfdce3a76919cc71fe330ccc9f1bfb1fbd4345b75d459ffb86668d5402510e9abc282947d86a956cd28bd6e57c7ccd29df5cf0c918b74693bee93dbc494af5206b98a3436d9e3ff52d82a82f3ab02022665a4fe0167909fd58e197803a4f1657d57550ef4ba6a1eff57d68d46c5ba91fd771c659f49cafea39d651fef53f66ff175eb98ff0f118e1d52f6a7301792ecf1974f1dd21711ceafd36b943e276fecdc3546fd1d1c8a5909e429c2686ee506854ea8df27b4282a2aca525461be8dcd2850daa20e11c5409ed279becb9dcd6c972eb75b972e27cc3246525252adc5a9574a6dadd55a6bb58463b796db8d46d312820eb899bec7495c9d78365b4d2b29d1ccbce62c945454ae5696ff59c61432cdb265d64fd206aa699e694121da36cc3539f68242947a38fd13f2ea39f466bd0ea3cdd3ff64c2b1c65a31ec9faeced98142ce39954154f650eec322968f87d4b8c1e505298eb4b880048d2b5ad842431195b0b3ac1dc9e2081634b82c6b34e4f0417ab9c1ca14135792c6e8f82086263ab8445166062592663809899b346e928d7c9fc670011f81ca2eb2ac1d993a72836db652df9c46e7ac4aaafe96916152214c0a2615ca29b6ad5a7945b3a9d34a6bed76827aaa596c1514c2ea916661615aeda54b4adc489f9ca09eb2d8eec594eb2af53cef3d0f365224ba2389228d74892a79de47c156a5aeaa30565557b719ed96435088d297df904d9a1a1b6a63e33d6dbc6f8e2ec59ff8d7d1ee4168a79a5d0947dad4721ee89aa9b9b9e0d371017b51f357628da7acdad64b7849e8a4a5f8b4938ffc79d54078664929e5cf9b5303cdd9849a59e654982cadb2fc4993933693e6d2129a139a942cff020d34b1557895934523cb9bfc39b340ffd89ffa2c3950a174dae05fd8806cced32f67dff77ddf275f3fe2fee9b4c9fb57e86a81ee713634271a8d46ab99ed98cd66331aa79ae99a9a9a9a8a8a68141515156d0073413f0b50492a49459b7ddff77d9f8f8fad26fbf8f8784ec5b95aa0d770eed1d09c684ef368b419d03d0ebfbe2627dee44ddee44dded4f3bda873369bcd6634cff33ccfb3c0c7f90cbb5ae0e72fcc8534271a8dc6d1bcd98ed96c369b7918a7722aa7722aa71240007866f2a4d168341ac7711cc7cd66b3d90c37ed829f7bae4b6f98a339d168341a6db663369bcd6603e899b71bc618634c29a5944e9a8f38749a47a3dd9b7df0738f6b594c3b9a138d46a3d17cbe017c7f25545252521229a594d279bbcddbed6a9cf366a752f7fd75a92a55a5aab4411e2b48e98d5e79f4c6d11ba6b74b6f96de08f011a00005f8268c03a68e7100a3839f0e7e7ebce70f6e5bec3fa795b81ff1185ea5dcdf4d180a7494365bfebe9a1a0c3078f1228f5569830d40e8db3607aa535161a8acaafa968505e62a561b9770620ecce1acc06d87ea0890208ee838320407c79122184b648e18352d51598ab2148509638478ea1104113030c8282ae2861d4fbc40e649c73daa2d2501f4448a881a8aa0b224ca08c98626be2cd123c7935ba3054b52b7d0a37215c5bb12c5d212259696969cec381165044b680408234e46a6188162a4c988d5920d2359401a2627960d25b58a68f851db60dcc6b81bcb1bab7d7c890365299a3a0a33b3cafd7d95fbb3daa3013ebd0ef836fd26e3e40bebb260378463bd7559b7abfea11294d1561194a723827f7d99bbcb6a6afa934dc5b0ce976e65cf75bf350c31e672729c075b27aad83d0cebbb4c66fffa5e5d0612f55399f40b0e61b08a3a441cd729f1e48bd167b9dfdeeb79d7bbde187bfbd5fb1d6e7294d0132f88df13a9f27def7ade7bdd7f584f55554f8eb0f2bd3fe79c73f653be3f7677b757a47cdfdd9d56e57b9f525a9f547baf27be0f1eec7d6881e29842065b8f5ddf7a07895c6254bedfb2c91e78c5d132e57b3d2adfd104b6cc016f9a4edd67de0c4fd80de1187a072c2dabe58d1d9f24a544b24a2c9265f221ee4389fc711d32d64cfde3b38e0d71211ec4931c880cfae13338920cf261911cc836790fe7e13b5c87cbe029f0990c9a69b248bee434e47e579a79852e9b9a6b682c876fe7b5c0efc636d9a63cf30a5d34dbd4d0580edfce6b81ae70e6157a76d9d4d05c3c037b75e7d035730bfcbc8ec3f7a6d2cf385657b9b368e4b6316662a57a1dc23196671d1361d8dfe7ae117272a88c62af821acc42da324aa9e7ba0198c7a8c4ad1636b1746870000400044316002028140c0a0402913047a328d5640f14000b6a8c486a5a3412c662a12c48711083310cc618020c2000184080018649a5370a5632a644d9207b2eedb1aab1a70eaa04ff3963a19286e99621c36c4042f03f0af78eeead3bc5deac40d0a237dd1f2b1a31899469ab3502f4475ba992ff11aa6b5b7f424a21953d00b778e89fcf15e00e11a81fd6a181323495e27204a06d4f4c8c657e635e3749b68b80318759979a1afc8a8a89990a06aa98c23a0746655606e4fa065bab301e4700bdd81e4178dbb823ae75dbedd64845dfb44e72a62f40131f285239ee5f09499c09822bb7273e2bdb7e7a272da02ee6447e908fdf89d0cd55069119c8833af2df3cd5e6472ae657c25d4c43a848f6a59c3afdaa0457d63fa61a9618cac2cdc8b1f7fb79767148db6d88123d444b53fa831a23035665b31d4e1118fa7d295b062dd85b62d5fd833b159f4a535119b472646575d89f7ba5cc06c7aa77b02c2c99dcc5409db27b6be7870f26ede142e7513c6084e295d0d2f84efa1bf29a937682dc04d4b8f3820c961c8677f1000acf21319f1db17d9c3c1065e382086af00eec621b20e43c17b59b5aad6f4769b29579109f4b86e6843efdc3b676c571e0a359d2466ca856babd87ca9bee13521d229d87653b4df5d671967899f98f67a08076c7d9f47e29313a5d59497706e84f65343cbcefd1af97b5cba32a410c1312a00dd22d4de94a0ad33d425d53f84628d31d70b45002ac8f917ffe08b806bbd07a984b2995a7c1305fa63d32a8f460d6cb6b532244ba02a51c991517de83d1c8bd022659c8c348c49456ed035a263cfa36754f94f22c36b8d214a03401d6a9bff1de0a9472c7d2d4906c57a205923abe1bc5a2c741bc69a66695a70338a4c14bbd7130fe059261aaebb9349548b10943e80498f7f240d1b3315a654351994725c6544f3f497baa5563665172ae61eceb801cc1d7d743247805b4dca68befff0a21cae5a16d7949ba3e2d5f297668c1aac3c8c5454104d8d22e47abb23b15c67bfb243af0fa8c7440d311040de64735f047822ba230f804feb6df059c6e00d202462f5f8b824875a3ce7fe7128fb20d51e4fe16fa509974239ae6c69af49906fd840f2859eab2125dacbce664bdb1c7bbe3b54d59437b72971645a45e19ef5abcc1b4070f4a71b23ab0250b7c80deb2f905ab035c629926dd1e4db350af81735e6a8262d7f1e582c0aabf84ebd02b42352ffc6d36a4f615e1c84ddfc5335b1e82fae5ce1a6ab4e5c02d7a97ac80547d86a6eda3b11b56a836b31d2714acd2262be8f6534862e89396b01b31725b435f6a81b0c1fd033e160a006cd97f804c01a49f87b6926ee91124a5a83494a26423c8be77273a60797a7c83922e82cf416849bfff92da2f9269206580db5750e016d354b8dcf0f2b5fb6288f4e8fdaccffcee14a123a06a39fddaf5a6af5bb6ffcf47037c110f1e00eab25fbd3158380f5195d0e5ae34e9406253d1ee39dd084ae7b09e9a9da0e7850af6c584d00c09865d7268f5cb3f325efd1695348533934c9eaa22ab2aee6b11efda72ba7281c27cfd69208321bbb11e46aa8e21acd61386553d61b02992e7d82bd33374ced9dc1f3d1ee2b0be4859050395071f36cd70ecfaf9589e38a594e4faf3297be3a84dbf934fc77db959d0a336139e9a08c29587354334c4fb0fa58f26c0df8b3135e00495389ba717f660fa652a59ba24bc413814e0ffc571526f8d6c92f29e20d9c603a2bbeaec4e5b32edd79278cb1d6ff81489c3800329c27f2b49373bc002ae46b194855335a3e3b01f6bd19b9ac841b70574d2df53e6dfa96c001bce7d596e6bc5876ee38639435a182f33450f1d094f0040cdecbd45b1699e46c58bf282abc84d7a5918c40ba5af715813284cb5902e99d91dad0a4b60660b071fe99807e9b027a8af3b456b6e1c5c48385284d9749411c25141ce8156f6a5126092cc705e01aaaca48740bdc3b50d2671679ed4e633db2a1e44dbf5f2243ca09086a76315c69a680f04b67a462c9613dd4bcc89ae4e8c85cb24458bf30de24600dd8388be327d6085b48c31a0a1acf46b0a9d44565f1869313c0b7da36cfc69d8a0fb6784dbf1583a3cd4c4e667f1e6e61d711cf389b141b115cff42629c2de7966bfa483555205500caf5c368836935ccf4e13d1a48b046e80a2a8d69c62f092b3413a95481575d4665eac996fb5680e978c46c424c8e4982f056ec9c27ae1594ee026897d53c3f965ea33300eeac6eb2a320ef4c821c4f9adfff41b3cd019616f3741a39507862a0630fa6363351a5ce71c4b6e3559b67bf08dfa252c190f08007c08ddb84968688bb4abf094dace2af619dda83b5c7318e85238ac0f66b0b10f18c366c958260fc8e041b0ec3812ea6061a4732d5196685c3dc4bce02064ea173c49a9b0dea6a8cbd3003e30bedb134578f72cfdd6d4da1ab08923081eab9e07418df6ef1494c9eadf4e2b0bf1e605fb02c46a2d9f33de472a38264e078ad2634b4b7e4324ea8d871b2d7296b3652644836699d6c5e789d0e657702d6f14d5c1e7f7c9c893fa41c31ed657a3830bd745837fc56b228a4adb8053be2bada9d4065369c8eb3a3aa35bd26be5bb55dfd6309f9b1de96fa81d9c6f48ccccd1dc74a98249104a5828ebd1a1a6b19c10e3eda23d5908a816fc69b50e173e44c1cc7b8f0ebbf113fd9f3f860687a65bc2078d99fa1120ff0ec1a921ef65c4de1d6bfa9d35ef245864d4cf2258dbe0948c5ac676876969fad821818f50abc7597562e1a5b8ea9dd4d930231e142cbf4ee680ff753841d523176f99b1d6ee914ca5e5125cb660d05c044246145159a885bfb908c4391f7696bb2a12e5ec86cea51abbb9e55a54572a6a835556cb280adca308454cd394074ba38501a3d80f634611637baea948039a726cec18bbb28035b54d89d8b2c648fd4846936349f5462cddb855e1f7fcfdca6a1d83343186116ccf1b2cfb99106e5d74a70ca56e91d7385ffc311c2e87f5a6ee736d42107646bfcb0eb0537bea74b7af20d9c493dfb029575f2415587f8e15582696389693acfdbba3f308c6e122ea3b19f28da1afbe8cb8eaca4342a7afb426a51ea2d050090d15d585687359d3ce9c0374d1c6268850fdcb8e95b69a106b4340a27b5dab0991d24cabb7b0ea40cabb50a46bb4d388af991cb3fdded8109d01bb301cc1c167b7ad207d3781d4e1f15eda28ddbefc15ef8af44d33e92385cc6e2a14674b7f8225b11ed662ede7ce6f6e49f8e8c87fbb26df12c203c967a3f781def800dca5b8718944f1db4a9f4780c0f8b72f1f9956c8ab8749d4313437990130b13ea10af068323d1b7d66089ac856602d6431ea07dc73465eb3ee8b3c5bfc48bfa20035497a3121f08f7c7c67a7edb38c86586597d298c47d1a6592e5991c1c251bcf417a4647b3c43b064aebe68f3b181bec5daf30d5bb2e898b0b92e188acd9daba2c56e85cecb5a39151144db22966bb6c5b8ea5dce58112505c3252a43f35547586891ce7e4fc92d56aa92c02d7dd26a5bf6b7406e0592a891962b76aa1953b79285f90fa64bd9b906c1bffbbc7c8af9ca529e56862c7f9430042729aa87ddf85d6ab46b64c8fad3cd9bd53bdc74c81098eeeba5fd6caafb20772002f68103b3318a0fc51d6e3a7c9cfdd64aaf07b4d02be3ddf279e43d6ba9dbd9ed16a67acf98b64ed9486469d35769856c9369f5d06a45f922b5a1cca1ac8d220701f3d9c6af4ac796c913e1d6b9f7d6450dff1c0d17c0ebe6f853528dc16c859cf54c9a0433b0482c4ec11d2b1c5626660ba0967ff7217426e757fcc13a9572b6157815d17de920e9754759d0e92e800fab96f72f14c24e6161756ead073d64085a5b80c284b47d398c0e98ad15f37c7507869d4bf41d494aec1cabe3ed0a185b6067450cd04fe7368391bfb395421f6ef8de163ad678ad47f05dd8462d2230a3903e14071982906e67390ae8aa3f679a04f5e25962513692da06d45d777e721ca015c65c201426e4bc4b6466cabdec2902f15e61f7edf735c3eefcfe171cdd129de18619688f5bf65a043fe65e2564982579998b88786c1e8f4f293dc25e8c19af6520fe373f7f91c0cfd3bdced93ab96a5597f07c195a755f9c083f4da7d7f35af79bb57c5d282fbae10a11bc26774afcbf50a21d60110ae9d44f467c625ee810db842dd38f00aa835f048fa96252363fb7bd53d94f3136d639f003516e4d9f7e80aa844d49078882b10403ce61c024e71850f21ccbff28aa76b30e6342660b3f01361eac9d3a5fbd0ff7ff036b1a407d4e32a8e9d44155edeaa652355f3a62fbb9f82640e5d412d51e144d69bff6d0690f991fb10f648a6b10d7663ca7cd0e04cd208a620204e2e887ad1022d1a3927cf15ffad6b434a462c501a38b08fff957715ebb57177746352d1820f6e3a90f28a85baf2f54b8e4db2ba81f3d2da75cb3afceadd96a2aaa2b055b5cad9b1a7a1bfbc43841faabc6b1043688892204f9a82069467fda0e0ccd68c0f94ad77f76dd9589fd6c98d4095d782f89256237ec95cbf1d21f6fba3fe05cee60672cd895ca163cd6f67d4a6268b7b2e5a8ecc56e0cb9ec6fdc58df84a20f0f87011877a79ecb10f967756cb1f0d0314283108ac598fb2eb68b3d7b4492be7c147e48abb649f34f424e95d443a8f277b280dfd7d24921a1a99160a461b966950ab596bc56af093417f9f0069a15e76a524830891545f1a0da87ec08512f182f6976cd09bc81211913660fa6203899f474d5e4484b21fae5870e0cee510af69de42cdac8aadd683e0f033cd620b4ed30d068dace58a1fafad7ceae658d109d5a19364fe96548d6d256217cace367282f31144efa39cb185eaa860e72945046154e72077a14c8d3980fc6917ffa8b25ecbbe2d85e8dda292f7f2f17e50936237ecbfcce52fd862e77d8c6da1c60e56eeb462f0b1dffae6a4e867a1f6b1f1267c3f820120649f74c3ea99a98a93359acae8a1ec7910b2efe99df9f3da7d6c2510059660382226244beaaab7b5dec40968743530d9b1d5867d142696a8910e137960d647459b652e8b59774e9921af798501f29888c03690083c3b10ef02bfed74ecfa10443535f1a3ac3863ddf91040e8180a9db7814fd4bdca8dabbce1bef233aeeeeafc052a87404619445d41090c64d6d2dcd51bb07d627ef976384b502958a2414989bb1abb0b2383f9093134195ecdc6a5adbbda843fd81a05b2fade68459a84bcabf1922000e1a638b5414128243a46f9ee6a924b6d6f8fc151d72eca8f5d00babb7a1ab67e84f5c9daab6fc60b11168dc742b342e35bae5169ba580fd988555c1ad8f4ed76049f797c31f57c4706be1a800958937781987b3fb16e7d494db0fe61c794dd1ec81290a07f42acf6afd8d67c2f462a88443b1a0234d31fb7d45b1f690f2d79dfbe8e7daa0d42c3725f9518fe4883ee28c4cef19648fc6c2c31cf0899d6bdf6438411c80862665b993218f807a35bfcf0a21fcd0d3a0847dd83e11b3024ab51979c1be9a5222ef5c8ec0ed50b9d5d0a6ed0543dde9a2af2b34ea8700910a3bbc87717ea93668d0f5d813e61386cb6bcf91147027d1ad78ef1abebe30f81e397ffb80c1f1d8d3009ef0f176441c280bf7ecd48914f0c659ea05ad8557ae6e3621bb8b9b29447ff58fd34ffe056cdb3cd7921bacefdb5ae867d6acdd5e61f9aed14c83325b66723163447d28e78fe31fceb7d889670b1452d801c0980b4724038fc322388b1e31efe60bac6b4181b946678b67991ae81ce479e526c8f88abb9af41452c4ad0f13c74c6dd0eeb298ba443d69b4078e6048b4b002c1171fda9259d9f6dae96d4dec731eda2713baf46192469b4bfd21d475418094237cd232e61af2a3286e6a381a0390fc3efa6df6ac89e153914073a3b827f02c073331f6c41d4fc1e6961eb63446ec96163164f92ae5e0a9fc346265974b298ebe9f4d93993090bf6de51a9de17be4e341fac65ffd7581de0f9ab6ad662df04e7bed824489b244e61e06c72025dd0d110fa5a461727ec0ed55e185913c86e12090aaf62556d51b39cbd2a0f14279588c2aa238a1552eebbe983d89006d2c89cc7b333ac29191568d3054340289bcff42f2dac0000d528807c3e4583c3ca9f7007a33cc4d4206f162a06c05291e3a8c79cd69b5b6269b31962f870fa2be370a07c01734d8463d1762576ebec08a985f718a21460d730808ac10b2f2de6fc35873299c708bbf9bd9142ac300d5e00eb37c31082ba3621ec17f3d1ef2e6d66bcc0288d02ace02ee394d88d0919a2b4194002cd86ca2a64b595596f98ed8493cff602d175286bad01d1f96a47dc77554ce07c4c9730cba0f64836f3d05f763aa174328d4e5c38f0b95e93845d5be894e3d72d5ae3d251c0b1252c16379661822ce93bdbabfbd53bc7dcedcb700256b8c36c9d4a9ef725183628ba537cc32d175e4541cf30f06c385a38befccfae0b5a5968bc3d8f9ebcb8c6ecf8ed7fd7326ab00372ed762b8d702f70b10fa376932351af367ea93eaba39127b98204b9b7e6489a20ef23b154b0b20bb9d8545814611378d465d6a70a67e6b0d5716bac63bef2e58cf1b162a9aecef0ad7eb867246bce473bcb2c9256bb126a3ccac006bf69aae5e3fee8ada55b6b62f67e352f878dee118d3b568de3eef184bc6b3b8d4e14589ccef06695617b34a020d91b23e61f870deb3ecda293687842d6a2c7219b419303741d0d8d8a8e835319ee9f99ce73593374ad9de58fb6dbb5e968b8b2e9d2a7474c37d66906ba792e139e177c978c30288ea9fdff005828c83409b516a7a15c2d2da61ae00efe61622195157e55a14dc7ee7479cbe81f8cd2b3efdef7e9756585251af1400e63be48d3f344e652082eb73a37441b488c640b666ab82b4b96bd2d51c53aca904aec40cfc1c983b019d82cd6c675ba93d79cd30508a023eb55bd86b8befdc37fa355e5d810cbdf132ed58583916ef788760e23b96b1e99489e971bb8f067784023336ff137c9e150f437c6198b522577b844258ddf6f3c36f79866faaf0e67633467adbaacc696ee4a785ee4a01884221f7cea1399c11f215977e6b2ac21b48cfb35489526a6c35e20a0bfeec6ad0f78622cb83b40a3c17c118e8c77327d23cf8941188dccba7a0a69df870a9b68b017a5939fc4ec3d459830fc16d871b2c1ecb06cf49bc5114dd9dc42dfeffc7f56f6778ba1d5dd8a620ca46ec4d6ed8e0e573f981a29d8d470157db3e76fe9b9e9bd09b9133053186d75f3a2f518741dd8d8ba07dc472bf069893ce76ea135ef72958bfeec5a6c53ad4294582b66e0563d24ab8875b58a94986f1d34cd82413347670b485bcd105d683362e15b01f9c23335a65972260b34c51b61bf8e79c031b397b658e0351f5c0387dcb3d2aa737bd4d04d20fca91cb55171cbc109ae6d1d09fb157b838805ee9456d2406cf8314f696032ed9879ba23f369c7ccd31d994f3b669eeec87cdab161e6f4284139e5a2d520604b2ad42f2c9881fbafae0dd12cd66eb726003c2b0e462f3c9ec08e252300a45e49f425c4a79c9eb276b8aa767a08e75e10a01a3aabce0846d68e62269a8b8cafbad34f30b34c441727c6171a861672b99981b057dc16baf78e268d1840e03b76a43a33c5caeb872fd38316ec62b0db44454b79fcd75069f079cb668044f77bd1e14cefdeb7f0d04bb6344782b82da0b54203f448a08309d8a96b3b3ac5528793b817ca171db1e914cc602d7b45990119c84ed9e18251d1ee4829461b250e19990e9cbec566103d73a69d9fe569269ddd3ca22109e3ac07dc4941f29b9f74645db5d050341932bb5bef0235a4a2036a88dde7ccabb26e44b353458aad46e52eeba57511a81c114dcd1cef242e0b7c56665f2faaacbb8e0209a3ded491f9bbbcd394ebc2436c7690fe8d080eabe2931c4ca0e19c037d8bf19ce314589788826de76cc5e76cee62c1ba385b332888a3f96fa2841535465959f566ec46f4ac411e422efac3a1accfd84152b63e5da0e29facd216231d05433c071258596d856e4d121c5c6501e2443621f6bb79e6d29ff9c99572f6943d9ab98285f46fa90b46d417dd3646fbc46b67e9b9931f74f9b940066c5d3135df6353e3b7ecb3304960a76094a6ed16be8568d19f1f2c93f4f891fd030992ccc60678cf4205624ac2c24a68bec9c1b720186a27540cf24180289ce52364198a423a49168de06bd74e0a8b2e54bb2471ddb722eba577335970624ab3e59768049c3cd5b8f24ac9406e20af9e5339fb34c1213a3ef946f4803da2390c1825028dfe0df000e914edb88101cfce196fb4fe805f8230dcecd69f632c7eea8b64a7dbfb5b9d4a3240f283d03843fd4f754cbf2a83d39e6e0e4d19c472ac88e463fb47377d586003789220c32a410abb7551949d2a4d608a79e59fc33f94194da65c6b56ef693ef621abf12c7f9a80ab843aee1db4e132b4fd701574ab96c85ab0616bf1464ca48b8dc244638317dc40c13743b780913dc8eb340ac481dd565817d6ca4688f8abf49690f7e9434c3c9c848f912907370094f563ec3c226fc7f9e5727342431e2ce60fc1d0df2f307b23ca6ffeaf4c2ca9eaf3f19fecff736d1a9c5aae6e72c600b96a244854b3f1535d41c17c1ffdbaf49d496f110936182e80fc610840b4c7d10b233e82767697fd8eec76b04904e2d2da5ac9c6b6d0b4ba282ec23ae3d77a7b69376acdaafdb295648272f0daa1fb6a194d48118b41eef207081d5cddac1a2bdb7daa41011f1d80f162884a82f570a10de80d991b476d970586971b47a81b6a6db0c57d66ade7f19e41c19200fd24e815f211264863c01f4395a3a099dc249430fbc74c0039395353191c2c6e086c9ce81aae7459f55fbcac004022385c5242b31bb3c47a14725b511776557389abb2dfa4b8d89b47a115ac11f190a6f419f1c6cc0e04fff9186bb34207844d18ce48f4768d86afe24c79e982adbf765d119c6979686cb60b02999633d8f7861ef3b27fb8086cfccfcaa131a3be734aa4a3bc9bd72ce9b464509003d4b3b0520f8d80905960d774267e4b18e89866e6c29dc920a71018454b8ee345a25096e05bfcd8d7bada34f16eebc1e1e2e2faf50994e1458c5dae6f3f5876475b5da6920c69e1a331a639a9948b7415645ba383920ed3bc9f14f9979d2ed35911b209918e308de842fae2c71f11ab2489db720c7c35a8dbd9cf8a36a52f3ef3585b2cb328d55635864d047ebe99c02280a694804eb93f96b2e2e7a6b580929561c18db8ac7371a3182844940d2eb26deae176d30022c3cc3ae6557f3300ab8c6392ac7195fe32dbbd2588f9edbbe478d7ed7f60fafaf3a8106ea97b1faef6af292e2822fb0301a8091b6a01e639a3289100604b308a90d41e6617195374ec4093f19dbe1f46c238d7d1ce59144a3a200a00a396da0855d4306cd902a236b50b9477c3e5d3567f0355cfd98b3bed2cf5b79c7f311dd8dd561de966af1f5f33c6f8fe30aa606298231963694ef198b07503b0cf75ca31dc9465bba232f2a13f28c9ab1210dad476ab61b1a5090d24507d242c0ee3086678acf35f1cdc6db07426c03b30015669ae3f1baf8d6482da7271aea72986eb13db7896f8154ebe42173bb97b8673e6cac41084c5d2ef7b8e9eea2642076c40f1fa1c3ed9aa5b4027a16ba8bba5db115857c440938ed0724548662f66f3fd8057fa64fb44920293c25a604c34a529575a8df3d2168872596099dafc0771224bce9233f5ffd869384e1ed864370e6a4a23d766d803a02e7f90ab5960bce0db9ab117dcbeb6c91f20c2e942986ca0b4a4176725d539703291360d2c4c1a1bfd8fc581b54300bca303d1210040d20964a51091c663ea706aac0f4081a3d340790b2b7ab76c466fae24409ce8b28e56afe3656074eb0c594344e2159a8d5e38e87778beb639c71e1ab0bada090e0260bc29cf9e2bb5a5fd7ac05a6cda64d9d42bda315ad64f2315e555c030e118a6b05da23fd690a42dac7649314cf2645b6fa31d4d3a0a735854d2bf76cbfc6ec4a07ef630284ed46442190c3cb515cccf94d6acbbb8fd66919aa6fe9b62d6d249d9b19fdc62a4f1c5cbf4eb6beba4cf198a194534caadb46b1deb5d063f0bf00040acd199dd3b24de96ae31b7dbbe53e0cf06592393b2c01996fc98f0ae14f1ddae21849e1431412f2007b2e75325afe9ea109053cd5d2e039ef25a121c059103379efda701d32e1d4ab08b6dc26e6ce0c691cbd30eca111b496b8c6cbf8ee29a8d4525eb9561705e8fa7240a2c00df1c5cf8e8097d03a55d0aeb6cd7af7a40c456a40b55d460279703cbf97461fb7de65f6275538d099750e72f6cbba28b167ae99ae8307545138135151dd2f9eb756cd8e0331d46c568d9ab0b7ea75c392b883a578f3178171a45e90c3d64548d09b6c068b8e000550940424953372fe6622e472432e82965677e05411a37e6f8b2813c3773a8a223062fac1b70a25816e04bdcaad049dbd2ee4e86d751e5cb021475ef3507121b29f7bd755e21f77c698ef7712c53f0757cbaf01effda0b97ba28bca7b81a6b1624267d74ce8bf460e40de0eca1e51e29dc8259c9f0d482bccf0a153a25ec1226a4f2e9076d04ebadfe1123237e753fb0a3fb4d14a40210557a450c5aa138b1b89dff733b908d10e8af30150f0f449d5704fcafeeb98cae337e178424a180d291801aabaae5e8114a868ba9c66d0193e8bffab12a3398ea44063219e38386b77e8751a58a562282206554273410a3a1110116b12cb1cf0f382461cc02890f62ac7c18fb27acfbfc5dedea0f546d42514daecede90708e55f25fb3accd49da86a5cb175221ce8b91bd25441116d6c2ab126ddbdd0836a1d1070e1e83666401ed5cc9fd022a933437637f3647e932bfa1df4ad8b89427e81e7467542e0565c4a6d11250f9155dd2614bb2fab8ec95980f63a717bb6afa61bce47da60a66d759dce6fda2f75bf265f325063620c0c6da2b6c3e35d08680ab2de58f8200c48c9995b262694bb950678a5a8b9e64108eca82ccf4aa70dde9cee62e4aa4e02d5894d9bc4436a8852239b46360920d0c69d20245d07c674c397d1c20866e0daf0f021c8bb685124e9a9954542825dfad088ea0ab0d31296b053518b86dce1c2b6ebc69a8b7359cb6272603d1e5577b54ab127fb755702d6792429be12ce1731557f2931bcc0d207cce9e986d384ff87af3eb55a18eb05cdb55b4e017468184992784765200da92a0d99714556aa5d7c09758c47a25db0fd7fe0f1d9103c29e8e4238bf0248a56b1599e051d25f77ec227362425761f2290bc1d7169d38ff5a5e92b9417afcd695ec0e9d28c0cce60ed01fb596d19e8f1ec89f958420d1aea2c3d56f46572debe3ab2be65897127d4a66683061d5ac40271a3bd01a5bb9be2f33203ad878de5a188aa8ba9043e79969172a522aa36a53748ad58b18fb65e575afb09c4340be9305da0c984dd1a52eb0c97d95d42f1bb104e2df9571b53c2f383a3d81326093c4d5439030f3970b0ca350b4ebce80852c6abc942e327df939450a2f95fc1c7a586ed9abbfad8787ea59b9c05b20544e23d862162e3a2fb598ea7519e6d64b085b26cde17927ec88d5c27c87c301033b78dfa1f696e285a20e60d36bdcf4b8b8272210533f9efbd420093ae46832135f5e7641b8aef881a2c0188961cc648766229c94ceb87ea2cf665ee55ee9acff85f4081540e6d4184fba1acb86fba920ab25120c6d70128f8b4c4f9d6453b778cbe480369fbd1b51a5ab09858934713f3bd5535c00ab01ec5842c38eb30532c79ec2387e8e1b816fdb6713ffa2c1b104f0ec2dcfc298f340ab055e6c3fed022c114207b243976cac2da5968d850443e7165acb1c2399fe6d71a6e2595b49773d3847e3ed4926f298aad1f7920d35d7def976ccf426174bd7f72b6b4b006e4f6260c264857218bc9c6fbaeec242732e3915600f698845aaf58391832d872b8cd0744909f9db9ec17fa35ebadfbb205a1043a3459f0a46e0018ba8410f576f5c93fa81b032a4995b3e3e246983d04095ddd8027888ddb71f267e840bfe5871b7ab584aab70ae2a464115559b8ad848a9e8e82364c5c54c88b0a1e8492890bc1d88c38adbac88d5852200afd9d95ded60f827da0459819c099870ae1395268a18a1b74727517455565c0e8753e7b29c13910cb808e542e39189d42de3996c4e3ab74bd075a2eb6cf6e5a91915c9715c0250cb7b9b0d324aa069d679a18bb09e27523fad108185a13dfd3ee8a95f6c1304ef41c022fb8087d69aa174ba6c701441301ee9e27ea5735f0f17beb83e89b1d057e3e7ea6d89d8fd027a9a540631bc645217bc78e980885f296b0efeed572327c06f461ba256cd595273632426ca4d2042e6d6cfb455cb249f50cc4fb6c5fe09200697a0b546eb54a2f3b12609bd258d8e2853db1ba0e029716774d78cddd47cffd0fc3f902c97ee291e49161329e93bb3025eec0bf7401927b25a7ff28b8aa44d5ff4251bafb81c0cfb3e2efacdefc09bffe984aa491ab10451cc99b763fcd6d2ccaa12b79b8b11d2cddb0a9c085dd5623459c63bf23d17e85f47316c143eba0e6d819cdc46fd57521253ace6202bef551693cf080bc5e12473ccda88ec22da67e454e9a8c07ae77ff297f964eb16c918dd3233ff02ebacb571eb05a6faa4ec2a651d34ea5ab8491f26ff5b4211776dba9986f2ef840c73abf51e0422ecdc0ebb5e9e4d8b96990e6867e25e49d21283599ec1bf3d754d9d60958d0ade0092e60190e538fc247d84c7020cd26a3695c0dbf83050a6a91a0a05748db2d99ffa67d941cf23fc7424c84544cdf821d0c96db8665105dfcfc62e42f2418ca37ea6b2a1b341ef8a5fd3927552d5436b8518aae88721848121833fcca1723ed21ce80737258ad2036788bb6b709d49510f20f37de34add174546bc97de12e60c624d58e08633333a52ee909de78eba0013b791cbe6b4505580e969e60dd6292f94100524eba327e15fc8a7d247998e3c5e7bcae4ae01c1e4613208bdb51e4cba9230447542830c5b19b15694c1b12cd9d3263178219e07aa2272068d253e1835ecaf00dd0edf09e92e3d9ac810043043099d72c336c593b8a9e042647f691b9b9adba4eb85613cc8b9318d3cfb716d02db68a24237cb36a39ea0b786f5f3bc59ed8d341f046b9e5060bfef9a9d10d309a7e0345f47d7035bef7a0a6dfe451e94124fb12b1bcbd3f97ae26e17b2ca72e008aa763dc5f010c0e4cea14c382bee8e1f7613e8300daba44fb0ce78bf1728e57b87b07fb75944a64e456e65220cbfe2d2f92469daac20598c615e208e58e05562760a88f7aa209ece95f2574b0ddfd80cee866d4237b4b50aeaf8bb054808af2a01a2d878a3480ad6e49f7815f99a9b4d39f35d95b7d26ec3a35d556a06f3e24fca50db0f100d0dc8cb7961d57bdb13f883278d6cd1fe14e96b40e41e46db025320a2e2fa43d0e8a9015a0b2d47428a61a15343b7303a60a03180ce27bfb59521fdb04187b1313e7604457dad930a25d708961aa6eb52b402bf1726bff48d54a346e3d475fbe1167a541b64f7e263df43286b911256242136cb9125e82e65c4c3294d9e4023c4a79211c8e21d716fea734c954f8f8b4b1af5b49d16576fc6c9ac0b0b6d8afcab365bf75eb489ee641001a0aedb47c6d9113d9236be97c88a4ec3b68c434550936a6d2bcf85e23f98f5ca29f26133ce20e9efdcc0c77a71d5d32f67c9c7ea9979ae06be71e6a42e32490179e23e23b58134a1a2c6d100e49ba85d402cd96bf97404d1c70a26fdd669532f91a9892edb2711ab91f085cc984f657ba43148ecaf04b1cbd4ea37d402e1500f3e036a3bd234bcd46ced3caa30fb5216428c9ce4d040daa15f1ec496ef803eb8648c1e2ef2329afa3b68aeb9026c62004d5fcb2da9240658941da96edfd14b19478997110d543d146277d932e2ec686a4ea047d52ebc5d196c37ca770071d3b67653222d0135769a35544acdba5fc297c4c29c8fb321f95940e28dc3f6aeed8a66a29e045cdaf28aa5fadd969d0704bc910d4822f1e1254abeef7c8de4b2973ecd0274ef9338e70254a37b6bb897b8a13d46f6c3fc306bc100e667d0fe42d121b3255d3b4b785852e8ac6cb23aaea558d8534357af96ef6c0523aaf28393cde800ee44f24e8c6e347d3c40b194a09cc08a1b5285c5ed74be2ddc674c94ab07a6cb141ef71720b4cf9b39e7a6063feca45f9b36716834d5a526b1c5bf22e07b9a2d2766d9493903342320a232835414234a1397e5139ae3c871a482b73d0ca445aa54ebee321eb0e03eef3b035f724165114f0a014af2ca70b47489ebc7b22eeadd366a7b15c83576aa0494cf141380007a84d9eb1f07280dd98fd9be5c702f8d95b45a94a5a767dbca92b6204200f73adeb578a479ac5da916e8a573ca5cc79aa26e16ceeb6c1dccbdd720cabb6abd9492b1348dd118521039740ceea6d75024a8c231b8a9b06a153648d692fc251e9142b969869f945095daf1c7bd3567c812a69e4dcb8e88c60f5f755335d1ecc9aefe0380d7bd5736f98e0f79abdbc95166eaf6258b707b2bd54b0d891f7f3b85727b09e8914c49746ff33f1c9b4b00cbc5d6af23b5be14845ddfc9ca40a9cc8065954fccf9420a818976a636bd062c8b891f5bfb317d9f049646f9df10a145e132d924b3cc60c73e1478d1337f83542a37b1b86aeedb87359ccbb1a76bd995c4568678a6b10db896f1b2fa384df4a3d37d283f0c3b418a68f655e334a2f79d643e8e4a953653de715d2733d889139ce5bae2dfb37ca03526cda1e0d776b2e372b6bb34ea23ddba520f2e6939f6b54bb6f1c31e8532c9dad593b1558cb847063d7dd94347493540a021773642d030b7a5ce7b1e77b92092aa602c1b9f1a2eeeae86c4e7e5565fd6ea9bff2287258cec7620b1604e79769eace44619572fd9f49209052983878eb93a83e9dd57e8e6dd9ba474a94e0ab734094a313f9829a90286584e5445ea64a8782eb404e5777e9b084714d357015025fbb8f2cb5e926f2347dda5d870cf00b31299793d95f3f828ebaa1f8d9c1a7f20f89759962c119a91a1a4de79f58834f9d0412ca13dd3c9e72ee7407bbe54a45febc54c9eae324d9c7b012b811ed13e19b12514677cef91800fa8d5939b395b9558c76b30ae2e6a5ec5661a36285d1f7114bcf8361bc8115cfa495dbbd09643f5d62fb37b9383ba89c39ef5ac931f6b0b183c608dbed456c23d2e023dc032cfa875ae2894dad82a747257d1f1b27bab9889b5724554e9c3cd3e988709bf5084f74de91d68cd2ab8126d869ec704f3c81ba73010fb76d367994b8b66728463dec4ae79de13d0488e4db0fe0f9f44ec33686c9026318f83c287498352bf21292e6b54bd941fa469d25cdff88fcb66e7c77ec7ba4406a7035134267dbd20b825e6d3b2b6dd0723b2021b34b61e215985669a8687aeef6ee4b04237c6631292acf42627062345fd0a8195dddba17f11f0c56523e04869d4f011508b8e9bded5914a5142291b72f4bc36bd6c9af6815b5f6c21673b305ab21a38de5b26aa3576ec7f4cef33132ea993043a54cecb53e4f948847e7ce5eb65299dbee8a5981d578c5c0233a79d3c8d315b03f1a054670ad726fbbb59ee4c41692c78ebc613913bd6cc75137cd181c08f5f5c51d2cb3c0345717925322b5e7066fd2cb4d1d7ee40224c786330d77a5963206d1279131c8dce70cd056685429c8cfc71609b64e6d0a8b326551d97cb388792d90149932d6a0fa40e1544b2885921243c74f94e2b88fd1234ae1be1badc04f52b120cedcc5fb86b5b98219f7e8b70374116a8595095a087af2aebcd971940f105eb5bc61f1111c8c992da034081fe0f59460ae9597ee9b892c2783286497eb98b8b78083461076406f35203a18a8bb0407ef1115eb42f82dd44665511ec68b0c1265903bf96a9e1390ee13e6cd00c78cccb6b4a2e9586d6ebefcaeebfd35bb1666e9c8a3a0c935c01a44d62f076e6fb1123eec870d39b2354bc62050c701adac924e0fe0a371d1fe84cf6fba2827b17f8c35e191b6100afc3d06256396a081fd4ac097c01e7e1075a7ecb40ddfa86ae9c312c60f7395988566db2b5b6179711c86eec967e79cc3b45088a61365016bd72c34742afd750e857de42c641a485a2dc6281c2ffe76f71ee54328060fb40d1839f15196458340bc457cee0e376d76e21a7e4eb761c2b330c6b1265eb219af07063b7b5e7403ca2fe2b9ab19dec8498f3f15ac8bea665edc7a1f6c2f72bc94672c244b7e5299cad5d16777b95d295bc72a1b900acc88e57b737c9086ece62c84f1a75623eb2f826eb3920b89a7a7dde6ee7d8b4d88e160ce722fe0e7708a3533d15c2ed8eda0b00c4617c39998c5b042f103311699fa64fc8acb452efba70a1c8b0ef6d3bb0af4c69e4711b64c973551c3195c0edd4c0040c4a5c3d10503a2d1673f148946d99bd603776bd78cd4d7dc041742a3c40c7d6141f3730e1ebdded24293ba1b426f1971fa1dc57f86aba68b31813bc518034ccdbc0a9316a22e1370f021971a31a079c8e98950a62d165c435e456dfe24116f28966ca8f5a482750e4c98df115469319290edff2f685329b35f411278249de734d577dbf0111c0f5dce78dc355dfc9fce88f6378b21ac8b899221ace4586cc42c717b209c8de2cf125dce4cb3224464a48d0c52f2835f5b23764819285d06502e21a4f25d34a1e6792641c257165ca663a2728eb797fe07f67f367e5f77faf97d903bc053f83abdb730be494951e81a20ab56903f7c4e12dd0d5251d9a94145d4e068270c43bb1dac5b5ac54c6db05dec47cce806220b83f268cc34ea61fc76657006734e636e8ac3d841dbf0571c9def84c695b0e2a0ac17c3c81735bcc21e7e6372199edafff94122b93a056886d9f3834c853fbddeb55da5d32572b1515e5b51e7a4ab87c00c6c5c899ac39eace46a671a4a4c3e78d252bf03effd934b11c569557e8e1e015cb94f0fee0c0778111afc0c67b2f5f2095313e44f2aaca3b213cb5d65caa116c05eb24f5be1ad057ac61eda09a52c3447860f11a1e1e1fa0d3b14b6c200e5affa687540a8812b5116a16308a5da77a72ac73af0dce6643a12912ee91800e4a69e0473ec33dd116f683c8566d90708fd232dc83f205f78a2b411975513454448a704d5f2d45351c1f0107695a994cc80826144fc3753e16ba61503eedaf3a2f80b4acfc224f5f0aad2157732c039fafcb5bb45fa4ad9af60cfda9e3647c008fbf8d46e9cd0e9a6d36ea3170550b4cbb25a73f919da46f839c2e0a4b185c862d81cfdbf82e7ec4bf83027d87de4659f578e27d5986bfef198687f419698448e6261ac5ac2b556499e7986b0f1664abf3b09a78178f42e4865668755774f0c25237a8399bf8bf3c01238b8d8fda859b6cc89178066d113a8f7d6ad4fb91c99ce27c73a8bb9725b528365fd73cad6b95cc650e16aaebecd3270873388e7632c6c8adfe1f4fb3d230ce17358c7c3af54aa082aea6611051d4ff75cf1ef6ae57715c51c88e6507d1bf56fa2636c6e76a85e92510fded3c7f1c4d7d9f8c427d2e641c859312fcb3336e974affb0f84406d9908f2a19e59f908631ac8a070def0cb1bc04ab3dbf0f1a8d56f0025c03a151bf47ba86af91dd74099d212df10471a3602315c2cc8760bbf23ffd57ae33cbfd4e85d4304dd7ce8c31cb453831f97767f95336e263ffdfc2912a7dcc758488352d251ce9a75364d5dcba2a6fba9d5bead80a9eea0d70ed260a25a2d6b1f225f8cb6db59f2371345fc26be9d93ae5f618ab6a4ae9f3af5120cadd7ba203446e31755cd850fb50a0007ae5df3f712369da46db465f134ed16b05bbfc34fce21ceac5fc83abe487da4c65669cd76095fb4961a807a9cd5c5859d0e696528908e9734a321c95406c50773adf5a3b5edcc4d99ed0733e8aace4f99b55b54d04d5f2f408a2f9e8aedd41d703e17a1ae65ac01bfa1121cf6c385cce7508578205c9096ec394b601bf0a40e50a0a64a72f87e3f31b8d48458f358a500129b96b65cece36d52e2f3ab0450e7a7a1536e6043b328555d97eda0223268b927ba2543034151ed7d9b51266f80d55852c4f6a7628c74992616d55a57d37b72b543e0b1c150a10075d01c26cf929fed6fb1558fdbe04818002fa166fac8af1984521f9288471c9462de182ec8656adffd933a3bd45cf13f7b4d7a7f980fd84d3417071448d3296115247d28c21933d8b1d6a126c396e69bf9d780a3e16c63e2079e3b2073ea95562bfdcb63e8f14635faa275e598dfed837509931768aec177adfb712e419fe55f7c342a8c832d8d8c1ee2e043970bc81385041d9460d520fe2ac6856965161836b3857891a43a973ef9b48584ed3e5048d1dc9b51ba1d323b651b50379086a7f96b3cc0ce52413ee3f2153b4b3e73e88d895ab12257500c9eaadd6e6fd49d8bec3b052305d6f6811b965629f46e59d6f06f0bdeecd1b4d87e35f8a8150ac7dc7e9ba8131b51fc4592b6621cf11a8cb0ecb4e28b59657535d2ee882540ceb0a6116b871fccb9974b4a34f36129b560bcf6c50b7304aa1783d83e82c8beb21bc4aad240e84babd485be2d84d9c01e0e4ebec2a2bfb4a2c79470f3e79678464e47d95a50d63f7b007a4f11cf8175b5511e6d30f39f7ec9a42855f535c3dd9159179d916f2667e29a8765752170f96df85fa7989cae91e7d7b478681e370c578fb84dd4320247e15f1c3f9b5f039dc57a330ae5768add02aaa1315688b68863aa631dbc711d9d5bcbe58027b52230078da79b71eb55a7ffd65947d1cf2effc219d415f0535812ac2c38594c33434d0d161b85267752ccb8b247d5dd93a6fc130735db071181fb5222dff9bd09ee801bc18103a342b41bdc59a05d261a84f4c82ae902c0acd895ab9362a702bd4301fba0da34b8eef56497760b0a5050abe1cf92c3b126f9a0f7cb6aaad8a4b57559b3c7a4108bc53ad7b3b4eec199787ea15042e9d4a4513b68d73648420c3a120fd094f7ab4b4455cc368304a3db0e8cf43329e299ebae14443d9c31a339164aec21c9b7380b617ddbac6914c60bd19b109842564029cc831b05cfbbbeea1b276331f5e854c733ad6073fb7a11c2e4fd367a061462570863bafd091a62452917493433d6e097655a654c70b3a5a5917eac8365c37cd8beac2c10643725fd615d08da86118a2af78b97780e60f7d8c894916c854b01bc0c0dda155ffec26425e6924a0abe6d1f9170ca88cf78335129bf4c0775f4708d6dd4dcb0e1b1185309554efdca611fc32aeadba6afee491898f73e8a971b0d5c88aeeb31a162438205fa0b5ba82cbc2aa0745356d8f7b1db60d5f860a30c1c1d22f55727718fda34a194252283b9eb7bf42d6921f7604ed3afc380780f960e8f8d3b6a9b1149d65e74785dd67201cbbc781f82865ea515207420d8d158e539b57f69c13a1c7c71e80edb6d370fc620a1b8633ba49ec33ae6354d609269583fab05e2f440d43153a7ffe27a2ac651388df3fbdf03149c370507754744f4a81ecf774543bceaded6d4b298360e5604813d88cd68742f3b34af7e1a6cfed5c60489030bfce47ab346a20ddbe335769104557ed55b06239708ed934e7640e4dc8d70269095f4acfe924a9f309dac277fc3ee64d4c86f52cafbec9c00f89dbd3f00121c9cee916a303a7a63bde005197d2567f580aa51d4c28f6dc1e08b56cc09f62d6afbad159e2820deb7911c72a4e4439b0461c449238fb00ca8715ca70aab97a41c0c261834bd585514552c77d9ab7920d7c9dd94f111951431dbd25ddf281df4aeeb62b74f89d6c1369068e3b32845488cda7efc2f552df8050b450039f69417c3029f791c53c079fe77a4c780a422c01918981c2393824c4a58677f543415a9b79b122a11db5746ed4ce5a2edb9e555c804a7405fe82bec3997b3275084c6845797eac35a54a8d73040751495e6887760ac86080eba8a6e0f8a48eb8a5bd1528f4ffe947ba9f5d5cdc33daeda4cf2021d503b7167f085bcd09e8389c3f6ff37b5fb3de204808477e5b9572d0a121cef7970b3ea2c8d7a23f583b619b8eeb24fe0b033327f176438bae24498464394489be0d4a5a0297d5cfff20efd56aff3d32e72d43497853c9ac8b00509cd9ef36ad2c6e3760ac1737b37a82a797796c0a3f92bd4b557750a0c71777374b936456cb5db2c5143858af01e22ad4ab529ef219ba935aadd0a92e25b738bb6edfffd7e3c1ab88d1133b37ed88abe059d5e6599f7f94ea8fc7caa6d1d5fadf356de3ec96c2a4f20fbc495ea8ef60fc92a83e688d09fdd0458ca13b8f02d67ac32f2c698ff13af09aec0558ad52cdc44eea2fc3e45f2ce32c8bd2bd49c0600986cdafdc625a476a1fd80bbb8507a5790c20fb8c8b52093107970aa11f3b86ad83a4ae66677b8081374c7526542bda721d169f8018160a872f1df9bd98ebd6497f9af5b83a9553a45603a341ab7709236d4b10208488a2bab9e1cd2e75ba21e36dceab0759166656df6bdc178348a03a01e80ee815cf802cc711fed727a1bf462f6540fe865aedaeada8fc59685be142aeff76d9f43c04fa4003934749585bbf7d00292f47224f750e02c021e6db4aa710386e127ede55ac8bab190972733fdd9f5c15093e02c857271977e66403db94fae3aad9e64ca3f0c2535cb2df9396cfa0f1b6069f35ee19b395e57409fd27729bd16cbcf24cb953232e81519bc4fca2488fb187432f8b04270b9d4a425c0b9f801655f469bd8b3f319078409c595ed418be5b5f7b8685e2222b602a5e4053d08a2ae22a210dfc5df350bd702c0bafb446bb48c487222592a60e5c7e1c44325f7a7079d09f2860b496200037de3ed5a12402b7722112d7fde04cf5c5127d51edaebedc5b991338c814bbd7c88e3d0c503c393ae88bd2f161ecdf268b1994cc56fbc664d3d83ce91779c6ba90cd5b9a199721d91e66f466e5aaee2e34ff0e775c2448a358999c3d036a67d67c5c30141aa70d1225071b4caf43deaf0cf61cdce600495dc86f2b8a8c6b63927001c4b24d95d389d5be0c864b4a15c971ece897050e0e06c10060f4e2f96029c85d19ee94e753188b2d8d41988cf1c03f5a63372196882412d9ddddbd03b4070508a70733c6faa233dc7befcd15cad864b4d24a2bcd3efc610f08a692c2b37a7bba4cbe279217208ef43d81a8b18111634f2052c6630af0f17b00b4017de3f71af3868c6f0e4d23f90068632681637c5bc3f8b6ccdb7cdb713c6fba37e7d0bc01672c096863fa00e20c79f6a70fa00d18973e9d803684006160bca6e6d6489cfa704a8ffe8ccd3861bcf93306e3c99f3109e3c59f4e4022e83f920d880c58802dd5380c8c77bf26d378299f49f98cc7c4a46c2a26f5798e9b0ad0288b79d38a37afcc78b6d545c3b8e61eca5fa4cf7827a419cf3434e3e9f72ebaf319af7befa237bc32e395debbe894ef19e3f863be7d828f71ee65bc2fe5edba03e54daf73cf23bc64426c53d7a64795555f35c9b662412d4cd7d359a7cf69633164a784184dd0019c2bbfb716707efa0b7148a3a0b9d7e34efb497bd1344dd3346db7305d5f838eafb5e790a6d2f6f26d9c8f317ddba77dda8b1f638c31729137f4945b3ec8bd5ecf1bf3356948c7fa95f57ce9f9d1184d77c57ce6f385b1d63232ee385b6bcb5fcfbeeec7a5e86d935a2fdd26419d4c88c7d9876d52174bca70c6a6397a79ddfa4dbd1e7fa69ba7448f60bade7ac6d8abb7c33af652e9abdbc75717087df5ed821fbe7ebbe49a678d47c7ef7480248ed67ae9d1e3a7fdc01c5c5f186b0d5ffbe6777d9936fd99b670daa5d7a8df9ec0638f1b86d863fd4189936376da90e73c13172ec49fc21e5dcf21b1679de2d313af39bd0275a26b0ea978e91bea60d7522f277ed717a422f5048c6b8a975e5ff306078334a437f17ae2a57351bc740e89082f1d7f9c1190dedacf3671f1c44bce08c6153fd3161ef43ec5707e6b3fa7d84be7b8481ad581e01e5d440628cea0af48befae68abcac127f728bc499aeaf1bcd511e624e5891d1efcd070e1c4330c63163460fa52398e1d9a0c3821bf0b083e4a40b1e70b93d13d041082a3ef00c09a2a202203d4e7ebe906264034c620522b064f0c510222f8070845811115efc40832c5d441d80708445142fbaa082061dccc45efa1627adb3da0b21b51767d526d58b33cdbeb02ea52f2fc8657e332d6f2e9c6d31c60823a4315a9b653b3c2f3d03e979e91b4f91975e62491cb9c3f1487d750d358132e42a7ab978a4b8eb596ef194e5a4e5a5cf13d2e9089eb438259d8e22eba708d00f2ba8c57a191555317ad1172b2fb197972d2f5abc7079d9f2920464e785c228e59c94e66ca3916af89907638cdccb09b144f1d0e7510c82c8432d7621891eba7c419d4cc2b078883d1e79e8b105752e94591223454c0e3045a92d523ea09cb893fa9ed9899fcc92976ea578e975c6e4f012672fdf305a6a8b99f2e1a54b8c72e2a5634ca78c1db95c2e97cbb5b3b3b3b3b3a34da7d3cb0b2a756db699414be32f79a9a5d0397445a52d4a3e48af59b64c4bb4143a87976ebb2259daa2e4836c09b9865e46afd7ebf57ab15c4327d7c975729d5c27d7c9f5b2c1546a8330306683367e864fdf098e677b92abc83bc4205e3ad59238275efae4785ebadc9ec4afb98abc43d216b92379583f2fd7d0e9e874743a3a1d9d60369acc8b4c092642172f3d8b2fadca4bd799172fbdcb94bcf48889f0328a5d39427abd5eafd78bc562b158ac0dc636835997c866216138b24a97e8a5cfd81a9fcd227e64c59fd812720dbd5eafd7eb05e3e6da1e5e5a89171ed91e6cb5128249233a5212aab505d5729c9724fcd22f492f492f492f5128140a8542a1e0876a491ce93738c81476d778fad520a8d6bcd17a8972bd440dbd44bd5e1abdf47cb3c1b8107fcfec5022ea37b3037396a0a3ef999d9733310ff800456f7da548136080034b09fd4317413b10fd831442424ff31026442434445df1484ed6942f9ac4a5c616172e7ac318172e4cd0a2454bde3e8e264bbe9262abdb30063d1b4e0228183534b2b459108366466696760b6e64626052b4b45de0b5b461f06c69bfe0bba51dc347c71fb38c0f97a2531dd8c41a493367a84cfd62f0c382daf90903464de6b20575683c7a4c823a331e5dbe623cfa3c823a301e33af9e79a9cf1b57eab4c94fd877cd3ce9271bcfd2ab6ebd1a1f7ef3adb7f8e911466f61c3f93615fd7419632aaa29f93ee5f0d3a74c0e349def93143f9dce9ca498d15ee3345e751b6fbf2c9131f9ce2d7c710986e387517fc0bc8db7732be669a2bf68319883d276608e53a139cdadf12ce0c516cc893ee3c52498135dc6932f98133dc69b3029d48bb7b5267efac933c5233b62b125d19e44b2d46866fdabb1dcea625027cb722bb7ec87aa891a123b497649d4a97567d3254cd4fa6346318f604eb4a9a1f16664629ec683a99eb1fc36cc911a1019cee07c7ed0398fba220b7342ff5172c19c3967b73385de28540cea705ef1e933df3449342d983353ad3782dea9d64fbf6979348eda813ad567ea3b8d26e9698efc748c8a693b9b2e49d5e92347ca93e18c4d6da82bd61c491a3967e48bca24c91a2363cb42df3430f53052979d828dc0a22ad4156f918f9e03c78c02a0b0005874e483b64230f888922e6333038505bc64cd1bb0e48b06f924d51e847a62cbda00f60397875b1ec6ee0f48bff5cb1f8ef0f807293efaa5925d8a9d9b29361af510f6c312bf716e588f1f9d8ba9037fca4863ba27c40c970db03ea73ba410d65a6b851e9538b2c69494480619fc862f0f32e483900f3afc30846afdf40ca18d0c7166f4fa03dac0d6f4131ef1bc0d1067fafc016dc82887b8b8b410d2f2f3d3a515b90375621f8caf3bd49f8a143f5e70083884601ca349865e7f40d798c86880afb850ac0d35081488e925ee08e648e758dd9693608ef4dc8239274ddb3182ceb6401d182887d95129cf84a08e06e3f80ad4c9621cf3401d2ce37708ea5c09e5a5cfb845823a96a6ba0c4235b271ba05ea4c973b500786c73951f05ae6f8daead433c6592986e38fa1f98461e3b9106bbc0d9bd8f1c88e586c4914e3ed4904c6db338a14dd527fbc782e44d8443c8285242212c5263ff90332318f26111abc744c74857c610125291eb1e1a5d726826001981381e860c48c0becc1b4f4980d51d7479d0ec11caab17ac870c6e754680eca496987610e755a77e0eea31287078438db84031d723ba0c4c191df79a7610ef52d854add8339d02d002448106e478439944b21d372ce32ed7217c03169d0ac71b4e32ed079de7ce3304063eb3a9377ae713bb4377d399b3a0c73708dcf1cd517d09eb96d738ec380f43c2394b8a4bb1dda775fdeb6c8ed3869cfb81d54c35733f9c9d4390a5e7fb073fc5de9f32a748fe8392617f3342fbb5efde6177b28c387296a4e329cb153493f3d07480f613900728087302262af93a0cef57924dfec53e8fb438b49ed47fd5171b5475c88d371ed329fd26fd71f2f658d04a45fbf1f7cdd823933c6604e6ee9a4540bead04c2765fa76f96dfd77e6f8b31a0960cf3cfb7adcafeeecc01cf9d1549295c2abd0d40a6dbd462e056babd0d3230fe8a3c69824c7d88a33c4274514795be8e8db4c8e525e471881af9797457c524491a7458411d18a4453860c050d013d840df5fc7d081b0a92832d19c89e12a40ebc99cca651be0429e50e46a0b8c18a1b60e972244510c51757f8d08420407a7448099bc1cf4b7963f052ca19a80d051c0b2082061246440d5e3af9e2b57841e831c64869a4917a174b720c503e8617a5430f779a0079ea933a9d3d2f39ebbdf7de7be7adf75e49abbdd45e9ce5bb519c69196bd9a89637eed372de28e5e806847a2520252b91a70aa532ee402bd20af529812492a75e8f606c46d20c2d70b4508f2fc8a2a73e5710a1c42a25804091a73e55883dd4ab0572c4a3a72e8bc82c3e7eb0402d3e5adb07eba5473927a535ca3929add5d26aedbd1867d76656b379d3ec66395bea38db759bd57ab326d3664fbb064d5198986bbd1d4396b7de4b16149e3a0ae9adb70bf0d453a9cd7a7b014f1d2686a497d6e3db7b633882dfac314553ec28d7c24912a29323396196a0d53269c24a41a162e00d08cca29b4973e058808fbe893179fd8645a828980cfd46d9d428006682c4ef027837d01b3ff46ea0a1cbcfc77b8cd2654665cd0af3bfdd01e9831c3dcbec2127a796714e8f537eeeb2cf524a09e32351056e008803194a9893212be41059a613a1e8db1052aa931f1b3d5f2732e08c8b4c4b8266a9c825216c39c6a1de833501a2090fba090e26265d946879d9844045cf29d810446043cc10b3314146bb62267b085b928506e6216cc912354b9ec096fc00237a8eb184e7f706736571e33202cc05049712a987302655c8803181027a30d710e8c184c022005ef48b43f68e20792c7184e8f96d0353c2c5063e8429e1420221a0c4083fa0032b5fd82b7c8b9b2e302553502545784a29a505c0b1914aa4b099a1044b6c8993212202983904200b0d00c8a1027c4140059f2107193f3e9f139f1a3c2732f43817436e9250430c2a84c010828f4dcc861a2845689a0091c34c131e7a646a131c7c6298746131a922064ca0e8710213402cf210a5957452fae518c28a1c66b2d02003853ef5400e212507181bfa39159a3e840d61c44f217a50475e8620c23a0d31838f89093dfa8a1aba2c434a4b18e19ec4605bf2030cf2921f1cb42c629019e1060c041cae12432c931954970d8850d7101da61058504a29a57466b9415221b03c754a29a596098cc91126335cdc1b7ce0c08412242e908872840f0a1f1d422e3e5464f17a02c886206a441e2001818292d690ec22a209254450d0a2bb8730253204415b2e5b8028f9190216faf41096048a1e68d343581225b2e81ddcbcf47d084b1225c99320f8212c4912c5226608b1c48173ce193f6824089e8c071f6c84863b93f8f058194f32830db50b2ab118020115b6d0f25b06091210fb109684493e12b32d344aa6060e149e103223c8fd9ae0911b4aa36e7c80a4ca7f486033cc0842331c1bca0609117ecf78d91a90e030c38421113264092c5810494264641c07490b4911af3d842171fdae7177a0c0945479f8bd20a343006c30cf2dd38d4e3abd4d4f8ca1ccb298d5521d80c4895c0a26885f34a1cbbf403d7ef43689c349209571295ccfb81d03b8d1b4a9d152758ddb3180a7d7a717e3af07b1b441c303077b58d2b0fa5a3869a97e359fe489e9128237c39c73ce19257de954084fe0f066989182208ede000f6141b8328df55873cc1adfcab84157af2868fd86de42757151e4f2646802c34116180eacc070c023d3a3e45b2e799c67af8bbe6df9cd639080b822b44528e9a7d3ad73cbb1b079a9e4b9e45dd6ce79dbe4d02330e35cc9d30eb90ac49ff192eb4fc60dbae4d9e9e6a5925b8e02d9bb1a936fdfaee111bbbc76f8ddb76b4cdf8ed8e5f5b7770b62bf39fc16c4bef392496fdede36ed1d0b33aebf1e33ce7d3d627cf31cd2e4b5505dbb34e3f98b71e8325b0ccc4e957c2b6ddbe9743a6d9e0c1bb779f40d16440b86032db6ec99e7e81910469f79d6dff6f1da24e3065d7253a9e471be79590ae2774eb915e4771e390944ef3cfb76f60e723c22c703967cf3b4cfcdf5b6ede07c57d7e72f73a8ff7abbba760b6275e7690ae20aa9773d94e123266e4fd45775e170a5da436d695b2e7d5588fbe0a4c1aa43b2f6006d5423a0501daa4658edcba6d7166af0bb3e60a8d3abaf8ad4efafd7c304304ca79066af7e205dfdfc84d76775bdd53e2ce3067dbfd923fb66f589bf1ed1ebb7a3d3f9a1641669124aaa978a653d6f5bb6633cc6af46f192e6bb1cc7a3a4c23e2a96b4c1a570352e05fc41cd519ef6eb699ebd529ca653ccb9bb5b05d483f3183e6255d7dddc3987ba9d7329d4b7e5739efab68cde56b1fe3a74fce57c638cf98b79deeb0306ac5dc72aa0df1abede9e8fbf7bcd33f6ac2af25bc3f8db2ad66bee58529752ae10fdeeb823ca63cc5f4dca35977eafdfeb2a1e69433a76554f5c5dc739dffd82dc2ad64bcdf128f9fd7a5ce7bce358d8a2d430ccb7bd84bf1d39ecbbd301e3ab695c0a9beaa63aafdb725de5134fd05cd5538adaa707e3d48b51f1684486bcbd72b4458e478c4e07226f91de9a4a26ce4db1c47949e5336f4cf7f8b55073ecaeca87cbbadde9f03609a9a3e1f9e89d6f1ee3c17870761c8d139def7af4d675c7f3d84b9fca47e5a3e251f9a8585d92c4b1ae795dd625bded92543ea896963148a997e908211e001d8174c4d0f3a0e709f010b6831f557efbead1574630248abc021ec260581e86e4711ec260403e431068088341f9fcdbeae7f1e7d2b662695a8d310e3d8d3c12d0381e35be62ad8cac7e342e851ab1c7f04a5e6b1c8627bdba32eb31a917984d9bb4d65aec55732bccdf3c5b9b59cfb009e6f7a8ceb1a039ae3673cc8490d1911b524ab9c5ea31fb58881ebf424aebb76feab73d7a5bbf0f18aa6799af8a54cf56419f3d86af114646bffa6a8bbeed15500623c7581989ab0cc6565988f16df9d96f563f6f5f7cd73a847a0caf5fe66d9ef3b73272e3d8a5c7cd39ef5cdbd46faf103916a2575fb15645e2aabacdaadd2fc8bdfa79e9355b0feb352f6964606c1c855dc6ecb8ba9687409beaba7a579dab384a8c8d6abc1b4f43d1afea5b0fe1ea99632f7a8e19c32b390cef6d3ced6996b7315cb1aa6bded08ebe98afba60bed4575da8efa5baa48deaa7bc32625ba80e3909588f1fae9ec925c7c3be76346f74beb1d68eac76f4d433cf53df382e4f5e0df6acc66d327d35aebf1d356bdea857260deab8fb36d6f9db3256b39eeecc63bd85eaaa2ecd4b5ee5e1786cf937af57a610138e24e9f0b412b9f2d4bfdd425d1989ab2d7f2b23f184ea9aaf582b23ab9f4c0f491c281287fad5437a686524f59a49428652051b009bd084580f3f887285062a220a41e494d55a2b44d7a0a95cb1d6da22bdf515ba0bdda38b5c4ac83bbed4ea9434ba88ee434acf7b5b9d05d64d4f69a5b63ecc096ededa1898067cce321b5f3f9cfa4d29c5913fda8f71fe003e4f29e3d44ad1bf87dc0e8d4a023c0ec0e3c79fb34d7adf676d931e44e2739e53c2ac95a64ff9cbedd0bcc758daac523c658428903ea8b45d10294104650a8b4809518b4807222244425e5ebcb4d8324ce8571422229444a29624d26112112112e2c54b8b17168aabc8d7948fd92bca471cacb5339460438664035e822612628da81637a181cab8b54a84cc1c2a5869adb5d65a2ef48d177acbc8c838ceabe7758317d0ef1ab169a4bd1a38e60dcd6194719539e41c4812175c7841bbf002fecc37cf5ed4816bad52c7440111e23a523001d333fdf5dc832748b79e0c88239df3040069481afb84bf0169480754df8e1d429d14aef17a14e644ba23662fd381755c1d196fd9b33a72b665afeac8da963daa23e72d7b5347deeea6952c9c34380f6bfd1973ded491b58df3a48e9c2394999668092569482e056e4ac8d112e7693ab6cccdcf5dd6114a4d4bd4b5cf9e96787af921eeb49b9d1e4b6c8397934977256ecb5a163d2aa52b715bd6327c6da53e90af238a282a6a15b18a76b83c8451d1f25b3f8ce2a36f54ae50b1f21046a5e8b7f7904a94d79a441a04a3f283a9f06c89760ad234c2f6c4ad56369ec203b94d297a089bd2e4e114243fe5488d293ff406d9abe2f445345d2179407a0823baf20f61443f2052e29585c8888888088a0db287a4842805e96152ae30f1474c4b448da8529a58294aae141f789002f41026a5e7f74358942fa26cf9e8388b82f49b4621c247a7724af68e10650851a000c0435894a1284221b04207443a18d28111111dc081e302658143c8bc4045c04056dc28688004942bb1250c41c3b415cda3ad95181028b11a5e3028ae0d4a0b4a0edb1016283d7333828b166a041623ac7c3422866598745a8c7115dd440846001911031a8c9852047d0938702021870af75221e33c64994ee450e1892c24a609115678e143105ba658c013506c008a8225d4e2c109e5e189439143850f87102c23e33846089189695a2aa62ee594d55a7b842754f49322de5a6beda782c4895a73ddec2088e88991214f6ac032c4842586b41c31d4035ce9944fb03cd1e2899621d4ac3061a0e72cc54f6ffa3d2a75165437bd7cc9d540875ff1a4919a7be6a79e3e28a574477c1cbdaf5961d7f96d003cdcf1efbd587e4f7f18c05720d77aa6504a98d2f49869fc3689538087383f391e345366e7cdcb6a4c397f7041e72ddfcf240d21ae03875440a4367b38bc247356a8037f353b34397f7ef2b3075fdef6d803a2e5281590e4ba0b299079084fd8a98f91a3344288333fad659e8c1bf4747fea0e653c9813b39ff4ebfc60cd744a7c6dcc4a28789bdfadb4596428a394d711d06ba06d11488ae0f251ca68e9a84dcb6fb72902cbef19bfb7212cbf71f4c045776a80f826490c78302587247041650a9f26b628b1a324df4b57b7b8ca2b9a4c4ca825d4ba127dd79611cc99f283d5fbe9dac18b07ead8879e693e22bd359ec72ed6bc5179260de92cd6cf4fab558584607af280f19e91f61724a8533d7643433027ba6b3c1f69e5f15056f460031bd820856f072b8e709b97f2e665d7b9e4db09a2fe76d09b77be79e77af39c376f2b6dbae4a64d7be7dbe6a5eedbdfb783de1ffcce4d9e639a36ce4bf96ba1dbbe1e9c674e6b7d24856f876f876f870913371cf4204b0f9ab47eee45faf9b9f6e743fa89fdfc080a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a32eabe1a0cc19a40fa0cd6c41558133d99c9b5936b9e92f19819cf5e177de3f29bc36841c5b030c1e527135afc9c73c63beee79bf13627e333323348351c12f72121217132339f8c1bf4a6bd9bf97ac0f8d642fd91f93e18871ef302933aa15e5e4ea7d3e96432994c5f0d7a10d4c49658951fa49fcd4b25dff87fbe9fefe7fbf9f941fa696559c104b14bb72376714df14cc1cd47d8c149430370d2705adf04b14b855e79a44f1e50052a81249004924012480249200adc39e79c93524a29adb5d66aadb5f75e8c81e40724e7e476ecd066f874f87e2a95d65e8c7ddcb7feb2ca4a63fc20bd51522975b9fb36afe459fa8c53f3a014771e0ff85d5787588e87fc8a72930779f1935baee6022837b906509f065e3ece4f7eb1f51cb2d35ebd5b417f10e67c5f11cd7d7bf3a839e43cc7fc6d47dd3177c4ca0373a69f583f3f87fcf418a80f4ece2e72f4ee9b4152526421757424a5bc73ce6929a53529a9d6d86ad9b9612cf6cde09b818e0e33b8829c5e3f69bf3a3d4b79999059ae2643aed50fa5ab222b23b11cb25a711d115919219293d41f2aa957fa414aadbd75deb84e1d63ea19a592c613a457cf7e3baa7a9e7aac43dfcb56286ef4d33f9696be51322a9f9880e8d3270c95d2ba7d449676bc510f6b312aad0c492eecbb3619ca20a5216620bcd5a0778d6120ba47e6355fed0a96a32c48da8a957d2b2345465570151e5a69a07505c4132baa022416b37205cb91b481b320491b78652476454bcc0a969511bc62e19511975e19c15d6438e327569e79a3e4532762cf1fde84c47ce3a73f1bf4ae2efd05d13db0d77cb32dd758b76ffb805c8e55c583bf1cb37e35a80a491c244142d2868644dab090d6b87d42685515f98668eb0a42f205d1d1552b945791b461246d682a9f7842f65598d1ebeb90b4b16b1597b4016146433fbd36a950543ef184f8a978b4cc96387a1de30f575a639991b476a39b43ae6e9bab7822758ee3eaacd596dcd6686354d5a9e251f5f8a858756e31c62dd65a6bdcb6ad7eddd0a471bdc4f9ae40fcbd8e3afa5bbdfead9fca47da706def74c97d46d0d5b7e68af1f40575a65fef60d59ba2faee60f5fae6d38bf190e3b1792d1d411debd7394f060e1a4ef1d371f4e9651a75b9feeefaf3d1b79b7f419d9bbf9e63d217ccb91e3dbc499cebddeb12fd75d7df2a843ada88688c423247b40ed7eb1078c3deecf7f32420fa480b9216ab1f7d94b44567c1a28f8ad047b9e6756d9c3548daedcebc915d9dddf97ae5abfe6a7e5cb8cbae527671d9857dcbaeaf5752482fcde7b76f34edd6bcbe1e217df50fcbd1574f51f1d5b3ad8f6a74b03b9e540242a552a9542a956aaa5473ba4aa52a954a2a1654d6773db2afaf6e552a954aa5524d558f8a47e5a362a97ce654f14c95cf8deb6b100d44daf0ea7a47da70dd236ddcad626dd13c9ad571a92a9f22aedb6284a65e5b1f83a301a26687f3eeae54fcb62f9a9f187fb786c557bfdecc2b1b7d75eda576268d9a35df3440a084604edd353b5ffd834257dfdd96af34de4ef1a08048b16688be227df4a952a9542a954aa552ddb8369985903d7f40740f7bf4330f614b147dfd6dd6eb73babe7e79c418298d8c1b58f05deb5db15646563f39e6f6b13212295cfdac58d47348cde83b829ef3f5d1573f2b23180ba7eae16a75ce6e1aa7711aa7711bc61ac7719b6fb6fab6f97e81ea6dfbb4dd02c693cb9847e5a3f251f9a87c387979d8acacb5d6e9d2ebb1af538fa1de5aa534c1fc6b33cd35cf999372c55a15919cd723c312c6ce69a59c1d4b0e73dadc64deb0e612fbf4ac7d147ffbdae7a25d42379d73ce5ace1e63bdd87354b1543e5aab78f4f59c73be5a67dda958b476ddb7abf6170f4e3f7970d2e83e2d73ebb96a3bf4f9dbdc96553e2a9f5a593709b0259ac096e08129b10556254b871d3ae5388eab5b73eb31681c57b16b4e23e3062ddb9cd37e29a57415d4a364f27b39d7d735e72fc8a73b86ef115928f9fd34e734b5731fbb769c535f192971d987ba2b23f10414bd336452ded58fbcd7debb0a92f7ca7befbdab2029e58a25574017ca7baf951acd5a76574650d565ab48e2ca9c707a5558492055b1f2087808abd29a733a379d9bce4dce629f1e7cae723b7c3ca6d42fc771aeea99773af57ad4f937de4be9a458c5e2384e060e167393478ffbed985dc7945ed7d74d5fe9e3b62ddfab7ddb87ca07b561195854c58a31eaf701039e9862870fbdad028a58c5d2542c8cf1c9b1e3cd33edd84df386c9b19f3c8ee7bb6e739f49cf9b799ae72fd35ec8b2e92a1f958fca073aab242d0f1255900892104e7f413e845e12405e000f61482461f40978084ba2c8079f93a8840db656390bd19000000010004316000030140e88c342a120c8d144d06c0714800c7190485c4e321949c4510ca3288ce110831423800042000084184354330500e3bb0a46b0e22e95c8fe68bbccbc8009ea5b2f7844c037bbbef9999522061296d8d891838d7234a1525e827bba7762c6dfa7ba52dcbc77ec16fdbb5ef23c4b0b43b626afba92eed670ff14625a602ce83c71c1b7b9e7f0aa2d4e38ae00dcc7fddc57c8d39ef35d1c0cc473428c47651beefff9f052aee4a83061470dce08bed710c8eec4b61c5006ad1998dcbbe992d90d6b6a6ae7fcc91d7496d6659af07dffd5b2813ac88cf813a0e803fc6425facf1ee10e8b66043209a7ff3e56cc3ff603cce6d6fd61aab9d0da95f72accac3eb34ba0118a3960b03e6802cb37d56cb94cd94e2fcafa9775c0dcb86eb7e07c8ee1c81dbf2aafa696e6caaf873aceafa2d2057099b032560825e2fcf2992d840f897cb732a71f6c6a0475597e481488990b379b9c5ffa1e2202184b35b3f32bf15d7a529f7ec9312c4deff09d9d3b9d99dee14899c4c1f66be730c69d7e75e2b3c4d270a650048004fe9241be7da1a04bfb752ad4e56b748d79db1ba7f142ee82183dcbd2ca8c4aac44d258df0eda2fa027bb5f97790c7fe1be62f90b956462d57360aa4cd2591a02ebb00264c66c4acc6090c3bace42c07d896edeb08c75ccfb0ad876d66b57ed2c955cd7dbb0748909c3228a15d51f3caae06b359fd356d3bcaac1dd72566eb070dacfcda1dd5c1eaaf06d35c953057c9670da9be53184626ee1c092cc7d002d9e87ef4ceb10e53a500692562605aebfa681c4b6b49172ce525b0ea7a342f88278143ee7ce0dabfb308eaadfdaea8655cbab9e677da94c87ce284f6e54d74e59d8275b3bdac33905ae62b14e0b308d076417ffca70a3bae40d87a24488291c690be946a5f758ecd9623ef14644dc2b95f42309f3c52f04436eb1333f6ee770ab4ea56a16805515bf6e54e78d28a4e0744eeea2ae60ec51e1cdbdb239180539bb227be4be31cdb43ec22b8d4a1aeb058c53dbbfef175206e8f6c55c3906551016f80067c83ee8ced4d03b1e75fcd40233aaa91b9eb74d3029391c6434426bf8d5b831c9e7acf9a6153aaa43abc7ee9250f195ebd564a6eb05ed5646c5e560c364bbd599e268729c3e5f11b2625797e287f3e3c000a9863e773b3c98d516d2428e125a238b42a30bfdab2e026f2012d18ce57c55c0d510fe7c253261a5306d090f55486d9ec33ccbeb2bd341e1a912734e1971b32c9fb1cc8db139bc0541571c9d4c9e39ae9536c57614e61c66cd18e9def22ffde18feb232f515fa3fa1931ec5d6e8db041aff2b44d2021bddc13436fb827db39d91efb31fbbe2806e0ba76bd188b264ae9d020b806b09b530439bc61a468d4eb9f23db9d69b0c8a1cdc65e9869dbb0d50e96a580bcafe6f21d3dca1c1314876e637b56c4dcd113da0222c1c9823d8273dcb66c02d1d73c2f60abd0f19114c9dc6fcfed4ffed08497f317b466b63a13457e16f52ae2ab1a0fc60624f23ddc5a10c64ca7a766fe3ffa72a7ef23649ce777196c8c7336c98a9fe0a10a9983ace1e8a17823c836f9fb7165b6bfecfda907b40c67dca75152559ba0a071db127517882fd89d89198109baa7d8d47c876d20bab62828045252603153017acdfce02c4c0dc8c3594341d7e5222f0448f76c9d70c2c6b1b362f07bf3750d30e8b7f26698ef7ee891413fb235948735e0fc7b5c46a35484bfd849819ef2758b63fe3e464adde069d30b76af2cb62b48fcb8d662ba5adc684b35a12417adb1bdb14680b9f6e8a047a0214901ecc8acebc5f990be9aa8b8e708abc8903685c23dff1b22acc132f4c5f21f02bc79436c6e1eb44844fda3730724332c6686cf69d4c1ab0afc9035f342ef9fc59d9719a116f229c500914d077603b5ccc43d0b0caa34a9490e4ea3adcc408725833a47ab2acb9a9419bc7ce77ee979c4a2c4492cf8b5c9333474fa5eba35133b02cdc172487ce083aee77b8d1f6ff49037efa16d31997816a08ce6af45de8ee5cadb7b13993558dac8f8049b70ccb692a6b8b49b23e7ee4c50893580e7a4084f56239761253801f8e3da6a48d585c56a94d84731f9220ad81189fa220a1edd1dae13ff03acbc4e4f3e242788b45ba334c36a52a3c26ac161855c19bf0916f8b94889422c581df0ebf894ab35ad5299b066a922a3bbad8f20c177f28281e040db20ae4ac64260fe8f888e904b05c2d40da92b805abf2066d022447cf4b9fb5dbfe097846366ac49ded8b482c051aa3b3e51d5f846d7d85a0e8d4ee49f962cfcfbd6f6ed5bdf0e3f95ca5859df974350139c25739e38a25d9d37491840ea2e7cbdb4e5a07ad920bf68dc55f84c5e26b5181aa771351b529c2400f3d20c07377a69c2feeb48b8cd4c17486783a1b5d8179a173770a9531916082b8bce60686b142651daee23ebf40df5488763599bce622c524be556d0e2577f2659d6faf84a30a0a3829465c0a8d9b70411b4689e2658e2e379a549bf40bc01557bf8355af51f32666ba535230903579030f6473481b1b24fea85db4c38df4a0e04d792d7e3ce8b3231126324ef0baa06c468d9596c153a6e5d45c7f5fcc2c84a5a1a1aa4995de43de919d2105ed61131dc0f95ccc05e1eca648832f3afae12f84d29ed2b390136d7a9582132e77cdc615e7e46337aa6efb58d39c87e9ac7cf2cb92da4d38124bb26dece122f85a1182a790bd53281b605d2eda5e24c1eaeca1b9bf46834d0a782103ba3074e7c6f916bae863e052a4dca94f4a21e51458958f57deef37162fc16e25d1e9202930aae4a67364fbe1c604e984062e1d5b30b4fda307ccb3e6349f07518c0ddfceb9aea0c197c9e598134444d26c32b74f136ffd08309ee1dbdde90237f043437b1b017afcff8a6008f0e8527a5a4cb16288f2f1290b63dea72f52a0b320ed5d9ab9a240163d0c03d5bb636bbab6a0781419f3e497d660605d668ff64511f11d0e779dce46b71da94ef6d81bcf9ae3d33c3623744f648218150481e257dc6cf6357b88a63ee9e2d8bd5a59dc351e519cdcaacdc665e4ce2e6d6156fa40f472bbce41e80f30adfa938e240d4a2cf604ed6b3126fd770c509e48121e45b01f1322978d36a78821a1e9c58aae52dc1668f06d8c45ebc338464e6c75607d3db7f317bee87588530d25c6d25eef800e29aeba57f7936fee2d53ec982296e1f1ae6af3ce749b446e94392ea0603f137aeeecfafb68f92243639323fae71688402e09eb5d086b7a684248aab1bcc88eef8ae3d4ab2701a12fe69e914c735883c69ee57e4f5e5479da5e6e99946dbc6e66338c44eb2272aa6a9ce1180b49d3110acfa46c4161bd7f3f281271652853a43f19939c32d77cf8764485dcb53036f5d105880fa0d3c51536e09b7f3e0b1b73c2140aa464f3f4ba0928db74d548ac9801e32d7306d955a5476255daa6449ad44e38d66402c2bd8fd65aa348894b92b451ef3821aee7a20ff1b9148d27a15a5ef3747cc2625a5bcbe465c40128c0caf94d0da638e9c3ee6d8ffa7ba0ae7976c134d3e198da57112595c76fb5e899ba829ca9ef1b1aee90283dacaba7702941da909d3acfc353e7f120e873e39827400dd8d9dac003f03474ecd407e96553ceaf6aaa00303220bdba63a68df5f4198db62dcf8a75f81c26ac16585a82c06c3020550fa1c3956e3b83cbd82b8ce38eda0627dcbbe4abd31e321dbaf9a32081c8765f3eaeb14aa6c5e5b164be42bd2f9bdadbcdfab16c49f8e568ff467fc8955966234185f2b8611b856227ba38a4607ad5f388615b561062d5b95b5a73f8345fc9a0c90d397a2e0da9e1be666e18f095cd45bfc9dc2301436d9c84cc8ddc1df13935b372e0b35e7d639d9efcf58920e509037266a08a86435fd6f66eee1ff5a5a17ceba4cea1af528e9c1ae979f9fe9205fdac3958d735993d99a70a9234cb0b4fc5916ec597078e348bcffbc74c7c4837d9df32d3f73ac40b772340cc082c2c2b65519b8372ce85d8b0c91ee5fa59c88d9028d6d283c2a7368eaf90753b83b6c96e4cb83cc53607358cad55321e173441c76f817f78f43f8cb6414d026a5410f79a19758987cbe98d43528c54ee0e6227c3620d730795290d0eb8d351706937277cd5cff7546208273f7c1774baf280d327952731e8c223a1736462f341e0104a6d423208b1a0e35d0d146cab34219c720893a5a6eef86d729b6678bba9029c38d86f253fb8aca8a6b30a9318296349564d285f5a5499f7bc2b5c48cc6f3f82a00014322ac6476cb70559fc8365e1c26447c54c8bcea463f181a0d629a9269b3b84a16073f665d824fd1a0d01653de0d0e98eea85b3a24f6ed4c3c8762703e6196a927b2455e32018fc4b6908f2345416b8721be216be64f054a280d49c7c8cd7ef50e736c0567990db1702f0d6ae92e96ac62bf850d5f7dd893f2233824803036aaf04cfe87db72e341391f165ffd6cd3b8c2a4e7189c82d203c24c44b200dba4e046b4f05f59030c5f9c4b64e7dea65db6263f350fdc6236a039f3ea04e41a347256cfbcb47f6509444cc2f4d2be85da8155d466beffd4cd52c1e037ddfd76afc34eda502c61c4f7f4d2900e8aab715544de24a9a0ea45598df6556d8f4ac23fbd5aa4c4d1ca943f73e282e0fd773b08357669d560fc9acdaa7d3f43b6fa262c11cfdbccd747976a43edc00aa04f56ed4bda69ff65e6e5ff3b0f514556edf132eff4c1890307dfff5911fdf190abafc7d4b77ddb8f3b4d18adfd08d9ccf0c3cb8a27b9683c010c412cf69f97f8e941db878659f98cde73b7a2483bba18ab961bd94926e06600594ac908a2f33440e624a6dd52f006922a96a05fb74e48b19011f8c2a50a1a229ab7075702d1ec310df561ba30edb48cbc93dc5f04d1dcfd1ede41ee87b6294f88248ec78410c1659ae313cb00f8f9dc85d2cd3d195d18c02d86275337e522bdf2b6164ec971871ee07e0fba7c9431ef94ac5fd84a4d0a171e67f9727972c8719e05461871235e9061c956815124e27d7e746a46b1c65e0459eec103d374af83610c1a4e268e26dfa5c6e49912244547cbddf0c6d423c5da57dc6c9b2f3846387e9a0d8f0026ba934c816e7e47c01434e6c3c248181fce44c79212a60fd90dbc614abe3c221696d36b4fef6b5f6824c98e5f8683b7262b2f269e565f207870a18871bd655089818ec5a8984d7adc3dbda1a15ad10df0f999b23e67305bc8f4c12223509137e8a0806dc94d463f49772a66115b4ea117ea05ee7c3fbfa5b94139783e42433f583cbaa43852129a4683d7bd0d2d0191426110bc400908420d7d5eaed96713f407017aee06eb92c78c241fea117e0ed91be08ce7af807dbc5cbd200816f99bdd81a119c82a7bd04306788f7e2a568383000f8b4fdd3d3d53282af419b26af96c8e4af843c00dcc9c51729737579ef6f08a6c20b8c14c5b80f7c88fbee7f2bcf298ddecad23b83f1a3ccab82bb48cb7b49f28cba90c1662969c82e4a7519315b95d38b562deaca6ea40d1bb01923ddd8c85a1a3b78ab9f4fdff68ff29542adcc24a1950ae87916b262bfe2e7f4b210ec13193e939116854a564bcca6f7ce898e1c0196b1f967e4213e7c83eb784211f33176d64a4dff9d90f2c0f6acba69fb44e214f07f6c022d05b1e6a8edfe6885f214967b04586062a787ad2172e658f2218045dceadfae6f55f1663966557ed040e36594a905d1b5ad77f391ffda94566fa0c6148013e77ad92aa2974715083b8c3cfd8350380698a6a40143b69ab96b8ca0c92b8bfc40784b8152a7717786f2f3e9b56b22433e65b0c86a983988fb6251079101742456616598c16c4006c3818fd35d1af4d934dc37a131475c6c0a39cf5fcd9191726f4bca504cd2cc017fbc306eae917fac92a32d79069aa3ee9b40d7a00b195210a7bf091ad8fdf0436f3f332332b02f575f8123050b56ff9a9b9ac69c3144e28b7b62f1108951ccf009b9cec973ec929a49acbe5d982f84652ceb99a0a1500147f95b76935c6515e8fcda0630ad8dda8fbd64079fb841a61f6feb68cab18a517fbbf88e24cf2446caf64b2c2ca1a48e1221763a9a7274515e48f1d146b2c007a5d78db4e8241a6c21b264878eee6d7586bcb5284473539120ae0da0101d67199e532221955eb73ac7e08f69b0e4c8487e471f680cbee5fbd27c52d2bf50a527c404b19f111a43a40ea27d5dcfbfcb34c892f92ff201996d093eaf2940e8e152d1c098b91d5e7cde34ceaa20365b28969b5985b580ce60c389751893ebce4ee9fbd529db12a4636c0b4a73aab4893c4c8960da30410dda3230665bcaa294309e171258d56823fb013fe8ba0f2474200335f469a95f2cbd737f25337e72670e594f18216a6ae4b00b23a1e61edd1ecfcbc298885b7d7f84e8c3fa9cb08c83195c3688ab143a01f220d002e797aad2d420146d09a95c70c1ff34acdb4f5c205b17d803d1d390bd8dda8dc424340987b40061a5ccdacb8ca33008ecd4136f993c396357c6dd11a83a4c504abbefd89c77724dc6091ed9bf86a56072c325dfd46111dc2f81c19c51a4e5b389834332cdac755da1abd11beb6bcb94a95c66a5ad4afcf429c75583d4420091e09ed9ec506c6fbc764ab3a455527ce7184adc7e65db05c4aadb462fcd4dbadc2198f9669b1cd559c8f068e6d80f4661b645d7cba04bfde84a64b173222755dc7ce68421c4a8bef5da95f4b36fd44ac536d40f09978e216f05b092a564d80a9908ead8ea7ba92572a4c5510117528edf18dcecf14b8829728b7e77eff011b1759b39d44c77726f672ac4df505c6cccb31b3b0c3cd647bd94a70ad80f6a4fbddc1448b47f4334b53af0bf05b00580d2fdf87cf1dce3d65f66369e1389f51de251e74d5ee6a55c8c33133479b8296bceac048436b31f355bb65c392391bafa80e61ff3195fb4e7a128d328e94781ec140c35d733d1f766e5dbbbdd765e9fd587aa70f201388c2b9b1fe43280f43ec9efe6a51de7da0f467207fdc7a7ebdff78fd9910c43e0a63341330ef63f1ec961b795d108176faac33d60a376d082c4047a34c7e6652df1c4bb85c144bc563dcc6a2c5a787ef12ba28db24ede58095d1159061cd8cd2fc5d1bef18a71863eb07edcbb284df0c4928034d91f9deb7ed92f53c51c24c99fde97e6d857405da00dbcf3c6c509cd1de0014c211ef70d13d02ab4a5e2f12862946ac1bcb0315f112827dcfc2d9e10548311aafee78ae3b4f4158fc2dcb6b382a2b5abeef80a872ce0eb713e5ec0d8759dd1d4fec2e3ed3ea57e74b248d2cd6ed4ded4eff3b56f21338631f01efd6d447f2e399b5b25c4d3beadf7a63ef2ea6adaca508e68b3e0a5670671907eb6cef03f6b6c423f85daf5e787d9160a5db968069079899e5827f71eafab17bb4e7e6ed503e285f5428167e749a0e491a4c99165eccf4ad09d9f79fa9e91dcc6697c88af8112f95ac605bb2499f9f76285f0b5c505010317d979b8ad5623d4430c491ac119f5b48c08c0807fdec16dcfeb4f6b4c2b529a22eedfee8525c8c4e866da16231cbb7133fd347df27092092f2186d1776ed5d07d16941f83cbb068e85ecefeca7e7856b717a3ceb0bc5659b7d858a9f867c6109f1be0406c4cda0653095cc46a3470badbf97e6e371e9b48364664aef7c439a7001adfa38d4e3b145dc2921aa59f6c8f64324d1f2c426bad13b673bb0389e0de0b1dd25b632d589d35996996d1ad94bcc0e3b08403ac94bdc5cb6a4de372bafae77853f9250c8b22ce703062aa2366e9ff462bbe35215f64c07e7180c52345d46dd29ef4a7b2bb9672d8ad53e9d49fbb67e7824f3b184a9a30953876550d642680c3b1ea980189e70aa2c5e0bd91c372e267f91dbbf70fd8205673f1379a412d4f8e5f9c578f2c810d91fc923355084e924e11eb0de65fd786429f2980af1c8baa744126f52409953f16783cedaa072d223a17f77a4cc8b475d7acdf2965dbc845402e46c57fa58d6eb483e8d2387a990871947c69c5a41827b5931cf22894792bf5c2b85d9ae50f28ebdb2d2948934ed8f3b86aa18877815b15283a2a1226079e8dbb48518aee0e3d353b4d02bb3b0609f35f8837802fd000fb39e7179fa3798319ef1b81e8ed9cc23dd6a0590f596ff39f578f92f668c725f77daebe917652a63c8164997c3b8f4e230633472c87a754535c1089588ded3d26a11a4e6b203ad322614998a9c590686259c7788e4c1819b31b15476b7cb0f375a1c9ec669a0425d05843f0688b6fe9786e34fb54752a5b1817347802547d72bb162eac8ad1405c0078c70db47f9913139dee712b91ebfe62460ab3ecb300d171b7035a91ed04ee7d2e33a5d80e1f5c9586ce8d8318ca64be8b0f0807300c427e862a0825023b092ae4959f88e6b739d6178109665b8f9f2834ce23e5b81007f18d638b6510c650439c64b638801288b263c55dc01901a3536e20e470640a18e71b0152878d87202edfb7a2215f4f2d4db45806ef9e363fb3bdd1680275ec73b65dfed0ebe5ea32dcd0eddda80f72b71fc6e360e482607341e6783ba77bebc66c10ce63e3673c22add22c8c91c0bfacb824dbddc0ecb6c5930e1084efb78ac49199c0d2353397c98f8990af604c3394c1b28b736a7b1d29f130f67c308bd2cf02fe5af5df0b78cbcd9107f9c025d91219c427192b6a7578631a3a1926bf4e5a2c323095c7e9b7dbc5caaa1f8d7dc383a4776c088eab74a8165224388e0da30a30549d3ffa9e1899fb5d9b5a9e1e2272dfcf843c09149ae57b1b63acf7d9fcda7a8e3c248b12a2b296139bd95f6928a020b2491148bb0a8f136bcffef441c6339ae5243c95cf59f1c335f1b35cb2569297b427c3232318f5a8740a1ba5d7061a5aa0334daea7551d17e9124ca3b8549431178e16a21bb04d59d1b873f0bf8bf88ca48d0276d03138adc9bcf83c431fc3a6e0c9bae454cc60b2ca84a2bda8fc0adce226c250e3d0f2023b6c0250c1d1e9cf515e62ea83f72e6388150785f93571443985870a4d894369bd9fe16f90fc13d3926e9e77b49b99c240967d5ac0197b18d66f1cfddfb5e453944159ec899993ab7bee2b71d7cb1557d79da3bd0b886d61371c87331b89f70272415fa39febeb7c2eb2a314ee1f9ee1616ceadbd42e981bdcf75ddaf151bbcd8df3e234ed68b8412e96ea2efd02879266d375375ca57964ed6b28ae27ee514117e9afaeb5b6d885a69c60ccddcba8e4e1ae692257586e8d7ead0bed3650953b39a34cc4bc6e3078f02c2c1de83c29179fe9639d1c8e7e715a93c0809b255a9fb2eaadf8bfa76b77ea7645ae1d45ce2f79c354c1d65c24037783cfa3fdcb11d2e4dfcd4ad4c78bab29c5dbcb7de102513ce810f9930908f443aa8f07e8611fc1ef485e199238dde708b91313fbc400cf065842b8f6aa728c9c8059dda8fbf73864cc2deab9f03063572a3096232e000457d477c818862c288eadbdbe373d2807d052567f610340441ceacf2b481eff6781a791fdee94edd21509b4711e818653eb60c66d9e972d433b03a3d912a1bcf2f259a681c15404a64223b84b0090fb41f7307f90e8841777a92d84760fd8d4ac0eb6280195889983cda79a4b98f9c4e735b88f1de1467e18dbf558217ffcbbe71053b43a8f3e21e7caa98503ed8a3dceace93dcd750edced3f4d8a9d99ed2693c2cb323c3d5b4659280459a5ec9d0bebe60d3a69bcff9cc1d9ba6e324d585c3d2eb8c4da70401a26b98014e6f18e4e6fe9b39a03e8b770134bb0d40625ac3c89e3487b4108cd2ad6d000bb5811b8cf7752bb14fcfefd1b19fce5c2b09a7354c78f5570a90a6450daf7dda2319518978f1e4c44f80f9d326639632c3904519a5bbea71bf1fab98d057a9ef1ebfc716b01ffa2a7fd7f77f4d3ec8e41dcb9ffe054db8707cfc82894946ef73694d80359f7dec9eb107e8d91b5340bd3c8b4dfb640dab4ef3e090f7fa138a26f9b81d66de76c77d32f71d508c5bd38abfb6555251f73025c7f2651b9773176d14d07480ee3cbc2e7d6ab41c1351652ca328e57196e6433a4bfb525304477e5e0fde7fcac97a8997bca2c72416d404ceffcac101562fb3d230510e8a498734469786a874050642a6d36f9cb4193d545cf6051e9d9f07c2029a3667971b05117adba7af1a9850178537350b2ce801ff62b221f805b869a4bb80de0ee708c9c768ede2a76d40451344bf321e2e9a40f159886c0a3108eb2c97a95e63b3a6e5842b5c67c6b92653317995585b932944dbf0e95e4f4b569980d1e5a41fd0b9852b7ff4e596e4f2756034916602f1b9d28c13f73b6f8f6560d412c1815a62a11003d68c70db3ea7808e0f50ded6d1df60c1d225050d64de8f574930cc7a333bb440f04f18b86a8e431f70b5c9e2ce96f76e66b7801a057ffb62049233d909bd502f841cf7cdd62dfd33b66197c9a587fc9fabc3735f57641a99e02795070ede362985855cb01ca7f3551b6b209963b6d89b913b2fec4536a96d6f68c09dbae3b7da85c5180e2f430232e7e334c62b788cc3d87d5f66c7a920c020a1ceefa611c8a6f4ee85f64e3310ca3e345e556657ee5f4ccc74e4ce55ef62214b88c142b26926098f314ec4264e1a9c53db0144631838434b141700ee98e19f3750ac29ba8bbf05fabdc5f39b74b2cc52bdfd191a8ab3c66ca28346975dae37489e09c466ea9dc5a0cb34b5f50ed7e8dc0ed716b394cda75c98a631b72506d85a312169d3ce1bae640f224dcb94821a44155db4284589b2c4ecd04b1198cdbd327dfd001ea4311a00c55de834dbd826ec594baf51d4a8468936da68a28e32ba05dfef6084f3380a103a0fe0036fd832549a829ab619aa26604d5b86aa2950d3b641c504dc6ccb50310d6ad836a89a801a6d19aaa6a04d5bc64a1350c37643d514b421b4bc11f459ae5a8dd79e82dc780cf057de0300ef38882d7b84c1487fc83258f591905c9c2a6842e686c42d2483767a62519fa248e5a028ee89a32ba380b5e24698ee1004d749761a0ffe19247baf9990dfd1130155103bf0af7dc493dbce85be16b979c071a7a8d7b201f3d077f22e00d325edd160975a2fd171865772147de5db5e4dd028d0c3f4f2142f39f899c4c8b0b2a26e72644f24ce74689e5efc037cc6794056f80910409db28b86cb22ff91029e98900772fa34c514f25760dca06fcae76c5d166d9a46a5d1e05a2f7c9696c4ad43f9b7e550846a396c46858accca1f111a674095a90fc9f20b4991bde1289afa44eee35ae887ebf7f60080466a1818baccbca3be88e6834349dcb1500398110dab9998274dd0b77fd912251fa424ce403e9597e3d67251ce6c02e5a71111bb1cf745573906747eda02f495528cb95507a34d3214e61b8227ab66730e1eff673d0ad28142ef4fbca8e805db9b80d76a06016aab6e20b209bc065bf5a5658c035e974eb3e18e13d40c91f86bcc2008264e10a4392d9a4f7ce594382a296af4076a8138ef3492dddd8954231dce29a74bb5f568eb216e27bcaf3213809b0c8d8dc7eafa300f15321e3cf8befb994f1c017a749c52c1f2ded7edf5854b1eb63680361d406e286f0cb4aeb5684e8ba2b0ee48533c65aaa48027ddcae19759275c2b31f9a75b05492b2e2b5d07382c6a45d59ba7cd6a6e8068317d936d718e63ccf6aac788e5d10c29a6b93623d4cbf9f5ec5c43b61fe1a4314b04b14561c87d52e8b1ba6fd6090f45a6c1b5005836f498de2dd73de347cd4940abdd1f9429d87ff6d7285bba761f2687de60a30fd1c177656d0950ed19119fb6ff5e0e4d09aa1ed82d20a1925edaea05882dbb3110a30e4d5f35619664bd14737d1b03e734e2c70c6dc12069f17458d8450c5b23ea6712f01b8ed8498b40600b84b71658fc7d74b35f895efa0124e3484b1ee94e6b1369adc8fc4e44411bb88abff869290528aebf24ec10c22b0e2a8dd4adc8d6189292e584fb2a66526306cd3dd7a1f5da74796f544c18978cdfc87950d6919b5c711aea37932a8a96f877c82931278d217e85e245b8c791fcd4a02a95ab41e0c027e2d46f19525a0d71d000d0281025d636da7d78a7b4bea91fe40c50f58d343f8ac24229750120d15f82f2d741548c2ecdae648bcdbecaf1f941e508f22b41b3fb52ebb00ea9eb9760e1e2d10e66ae9852d13c3c154b1c842ae0de417e5c063af0f77224a527b25592e61635e7373ef8a6494a9fe2b4b422c2b4621941502549266fa42f38565a11210984e32057b10362414b246312561000122b86c2f5ce31b9981167360b04c2c05d7ca4804e7ed15c3fc2b677b05fa1efc10909ea2b20e7a6d55c4c69888f0d8fb04ef81567cc9f7f088fdf6049c3de69ff3b99396ae0c812fb62b086c00127f245c0bc042ff017b7749622c270591b56571b1ef77571bf441ecb8bc2e771c19f3d1736a6a42cef4fae6e2e5a64a2fc3ed0cb44355472d8b6fe8e46730c83706888258c8d275ec0e86610292aebf3437c06013d998e4444627358e4cc5f64ca7732b1e54a0b0baf284e4ce5a12118d616d602405255b24dde60286566099b2a5e88bae90f8bb14f8359ca661e0e5f618715e77e68b40c790408ce01af4ef341cd6b23874bcd139682b91c2b0a1ea507bc82f3e84491f6f83f6fba0ae1713ccea108527e280c6ff1d8b0bc3a113a8fae8a7fd2a010516084bbb961b10dc901af539381e287efd0000401d23bf47a597c5d1d3f9793701cbb36422c1f5f9bb28d8644f34532392eeb37e0135b04d4e2b6169403ca7fd6b57dfad7d6cb7d26f78a7e6134f13b20408a18fc27210bcac8b1d0448e93394da9883cbf92a1fbb85048c7a16d01333c28deb7b2636482d5db62362548abd0e413fb5c65287878403fb06ca73814f4d834d4743d9fabb16d0746f4233052fb9585aae741e2d3a896785eaa0ed87abf45de4ab6dd7b2d8000d402d2102a1bf3c684fdcbac8fcbe966083a500ecce5b0e64b46e568f767580f8c951b215748d795d1cec31abe37a1898b4a564b0575a597ab51c0b7086ffef395acc1848c0a2f9410028c03182eed84ba6a271ec626229d295ae9a1634518e8b30551bf3ee27a894c7528f36e892e4cd50a705abf6feaba690487dbc00d063b852a6721773713144914014a5e8c69299f753253e038166a480b4be30186c8eb3904f67f90e426099ee8c9ead90c11a36580f9e2942354cc4436dd10bf85cf84ab752b558f3cad4f74cd7f3c7494e214f14ad7b6f57b34145dbaa99fb7626c6e14f7e401ee48134c6dec72c6da3e758261f917a588a608138aa485a6c413139ceebe7acd0678281ff065131c51422b4209e4a3227b6d0a0cce2416451454be1f3990668281ccc265b7c8c0b04f26266aed6dbe0c1734c60db0134e708d99608dc69608b88983d09e98faa85e9605200729cecadd1fda4ec710f5bee388b9547f95cd93cc513fe36cc37533c6ae9063c67465255a95d2fdef58533b877d49cb66cdf86878ea8866ace6c2be9a9fc2d8ddfa9a509645af9255a3bbfba87b3b910a4cdf90034ffd13b63e0ae6fddfb2f692bd6422487e880262fb87721a46915a52990fceade875f6b8757998cbf60885385a189f50ad30307d8640ff7a146676dd8cb662fbd82070ffca0478f5130cd2fdd78039b4c06029f5427424f528c0068219c88b3abf5400ad2e50916504a9d0c12d9d71638174cd3283bce56ce900d44e9b62fab82669687d636c030e4b332fcb0325e7bbf62e18ca8b0a8136610844eac331fa63d6641b233b1faac64d97049052e1254b6c10766c09b2d14c00b0486032c1b12326807c7ac5230ad294c73d9120ec343499dc585351716b206dccb13985f2eb8b5899c9f9f300afca2f60ae5ed611211ec56358189e1a4edcbd4c03b74445464c2807d527436b1575f62b268373b01e1845f3a6ef310af8c2a02c896ad4c1789fb3a7bb00677368327562cc7a6d1b3bfe2acc8d3d59c1d9a213527f98221c761db453b2e9360ddb1d3f446a0137baa977c45bd36f0d08f414ff8cb84ac917da8600ff88901ef397a0adf5856cba6bb7a15c267fdafc4e98d0cebc2769a070f8eaab9bc362cbbdba748c4a65da068b00beae1fa2a0d4dc55b351f56b863218e038d727062d0f6c8a32e4330d181cfe68119171c10870d78abc3101ed5d1ccf76a3ed7ee12ba60ceb9403c4d1364f3eac628000746cac1635eaa92779c0e6a513c19f4dc96414b094c1fc55d2dd6e44a43a9f0df8e4920d7fb15753dd032d5fa6712305a8ef24e5595303f22a1908fa3383e635b4c702ff34b91da89f746e637efb6ce6753210b123813c79643b439493401456b7fdd5077a8334ba82492e07e9dcd9435d756eb966c82951056f34e580f4059ed5eff2bb0c7e5e0af9d041cdf64507f7a1b21872a4ee088c69094200f70c2ab4033eb53b66b35f784a083eb77e0363cb8a3b193a0ee6e77d290c7f008ed1000b9d019fb156ba01bf2385b82bbd8d10a26fdbf7705d15a1305f5f6a6211e43354acc25c6d829ff3cbbbc83f9a00c03d919fc1a0c728fe172dde242aafd304af725f351ab04076f04ed10cc0147690b628acae284028280199dc4c71b68c8f7565b5540bd041b2ce6b9f015d73703128fa6693fc7bedc90b954478d81fd36ce0fd77e10573ff4617e1d7d200a6484179ce15093cd1c63b29c91d68f4a8066c843a086e1f06fa25a641c1ffce9b89b71d4d615f022d780034bfbf0478a1f5a486c1c086ed2c51e47e4950de842b7475869349b0f8e80701106bffe382905e6ba32a4e2603af6fa2c5379d413262e9e226ed5bf6010146dac2a032107ef10b20ccc4489a8a27101cee19e70d64021c53e9fe62c3ddb1ec708c51a746135beb1c2f3f9a2b120d07982b03e95a998c04e280114fd343cceb1a86bce2219693ccd9e4c8001d0cccc8bff2fed198084d40c91b4103aca1e1706d664ec83c537d562edfb68cff0c3eb5b8b0f31a0a05692a3c6263cbbb650fc602a879669eaae113ea0a4c8165dd17ca9ac6e217bc24dacf85734304fc915615edd2501681a247605549a98e8f3e5d6a5633339b71da7fbd32140be15bf74458d6e059aff2e28b2563288de143ecdc3955408f1c17d0d4665c3160dc6a3573e60db43a6be0e4457c44731793ed8fe63a44dfc9ae4030956c4d1d5e9dba14b0c06445435239eccce7691684ee189bc33a0efe5b5f7a30a2bc54c4a5e6c068e1bbc89a1b798796d10b2b0294442b6f31b7b1d411c844236d0771bc449582d955f89ad50f0f82bb5cb52e5a627d3d6b3720520da05eb6628a2aa0112522b85bcba788f45118207b6267b42d45610577a46b4c06edbce80e7149cae38064624f2fdf9ff1550b0903c7babd4bc0610029105880c65720d24fab5ce482cb89922211a75b01197a178583640655aba2ea3558ba72dc9b61ee424454b18da53591ea642766e5f1f99345c19a89518be540452cd8b8e6c60e506e510e8288ada025a94110e1ace624da150e3c786646e0aa3bba72c1189118e2c0ec39daef49fca0c9f26ff6df9b43217657c7109044155c0b25186cb80f63d9e3df61e5659d58086fa9c3e39928e7c848ff480b66049403960b93cb97170e5f5f7e609436df4dc6d5db3bbbbd3b85be219015be1bbf4320376f2df5dca392c1c155090ec276713bda7e2ba0b673384454e96c2d61a85f662b1bb10c346894794523beb2fc4069a82f491a434640cb79fc8ae69c8baa2234086981a011a90766fe32e01b4a7ca53c63b10c6334a5f933eb5e499504afa01c769748916349eeeea44e5c74014364d737cfe75be572d7271134f56d1dede5daaca875a68d21754fd781e12393fd9845c0fe147493f3fc68ceea7e69ed291008bab0eb02b78e565c720271b2d8ed743ad8847a165dca62ef5b37176a1b223cf31220c28bbcc9606f9e692ed629268ea775aadba68d8ceba79948b06adc93af678dfd5ee96e58cedb5f851a342030ec0d263fa17ba40bffc4113ccd7c949c1c40b37aa1c65109320b1eb31cab188058ba510399a4dfb317db60e3d65c446cebcc58f7c94aaa85b0044eb14f20343f997d0231a82aac6a211561351f9c9512b1c9cfcaef85d09f61b5490563a0f4a0e2a74c3903ebf8eb0674aca200523e875881b5f6b8eedb214ba6919552aa45726d3659842da632b2463346bfdd01c8be8b48a4b4ce8471009296bf96c31ef0b536112d7b24a567eb60db8fc1dca4b5f0fbd0f3357a8b43c13dafd7ff665102723fba41dff189d0061527a5e2a2c5aaa57b94f8221ae978cdb8f606485ed4aa2f76d0ff7afd3d0e0da8a3cb92859ec51e8bd25b4a707709eb52af5545bb4353ce99e10533392595713a8c92064551ad99983774db724fadeb91a81ec92d09c20469367ba39e11a7603391aae00a1a115993b55a5bce9fd1a9762b8f71b25a4bae6def3d42e4450dc117cdccca1c2ac2206c43fccc2d5257e2f2b4a372b90c3b0b449f61a04e9e03e223ce5d71c5d8143d3f3877596e53d67cb0bb128e9ad7a006d96e03d1ad13f73255938285ac4c755363362c51c33931931c518e65456b28dc2590cadc6aed7e7ed17165cf821a16b2b21f02696657762a0c8246364252d76f19436408c5dbaa928c102cd428d2faa39b4d4443d89cf4f6d28a4281b88043a4c1d612be9f77a16a74ae65f3b3115156397f67698229c0789a5ba8e66acf425339d50f83514da99646704e83a1d85d67e42c1d47cb7b9fbe28f70f2d9d22e243391c100b99b851a3b7e88251a3afc5d7b64cfb42db0689d2047ab8d63a909e6600af47047c09e66ea1764f6f42443401d11ab79954fcc6a0c2389c0501cb59cb8171644d3341fa1cd5705ea040a097c2ebdeb142121f54dcb4dc84a8fa8c359e27c03e557171a2828780af1864074d0daa6f9387874ce0e1a3a2e60464423ab31015435de3068737c23241786e5994d34655c287db82a62e07dbffc937fa6b6039411867661a29b8449f4dd52ffdccf94206cea3e15b8d9d88e743007b3b12a96d72f81de6b5dcb3e0d14105d7488585c6c0eefb17bf2a2bd6fbf83ffdefb5aeb0164441d3ace78c56d6027db3ddd368a16f3fe42289b80f79ce4bbd143b24eb0dcd1fb1788338376cf07a4873108c3dd399f7c40da8f5eb4e420907942476a7c7f4cc04017ab35dd6258e4203369ce11ec4c0ddf0dd91079f5d12c2f7a4be7529f2db4fb6953474f6c62edc992c3ac049d6311a043ffea4f5e82480a41214e51dc0374e6e32385a32dea4754f4873cd64c63b663d902d88020a20490cb7b420f4014d464f5f4d48cb2cd31253b6e3d362c6748997e9b8b49c315de2659971d267db97a58eabc02eb60ea62e839e7c2dfa0225cb6922b25dbca6c86a8f3b63ad80a954a02987abc7fa98875db92597c6fc8c95be95424f692351dc7cff85f429db5217a84019eaab2620b2450bad0bb0d1f4d09fcec01b5a269354c2497edd2220797dc463613317ef7a76f1e39dfcd3e7a7b46f9843a0b4389a4a831e99bde3c13876d3528b3752f752c505c7ebefa2284e495eb1da857c00dc66a4874c7c3d3e98d416b2d3a08c8ce3a88bece92843e638ea2a6b1a274bf6f8a48bac69284be678ea2a6b3aca91759cba929d0e65641d67ba96995693a85cf99b88e9dacf2273e7b1944dd246890ec9cae5b0e89076000b861a7b0bf085672516f5d7a34ee4577667e79c778b7ec7593c472750a9e4a03e8f4f7ff68f04a916aaa3fd0574071ef1f62c552b6a8be6b536e44fb91c67c9e87d4d55c2f2064b6525fbfa5059d92bb8e3881431ebfbba674eb59ec86d46ad7c26bb9a8da2ff8ed9142816654b64bc0dbfe270fe72e855d1ba48a626e655e6722370802af5059f2b2b900c8d5611ad1d866f45b909e07e8fed332c1ca786df9d5397e7310b4acf6e8cb96331ce6803450f8935de0b5350e2e8e7c1d060f33c3e059aaa5e1c54dc6e13ec6a812fb8cb6767168186bd486621f5acb3a712e3094d5c8dca53e5dd87861a3b0e3608b88bf67b6c2bfa7213f945fec90a1a4824c63569fb08188e5dfb648f969ac0324676007dcf0bfacc722ee1ab4df6a4eda7c0833fa6c194c15d22e22b11c944835c2893deb096cade2a8d3ef47baf58ad12f7cd3f24b3ee3ea052d1cb489345fe5ae0cf327b548ea485ff2a1266d743344411f0582ba634e007f2a943e528d38059028a2985b587d429fe492b95dd1dc3e179592ec7b0d965d6651438d0e273f9cc486ac6c0c01b47dbed2b1542537800e0ad838e376269c3881bdddabd4f57797cbd3edc342f0539f0c4a4b08e19321e3240781970eef70965dd82eca781ff25b4787cb91aa04691acf819e88f09671850f90c9af3a9d5a02f6cccbcc1fe4992a30d2edc46f0033bb35dfc9a7731c89835d0547eb0a86f5abf01b6f2bf164a2663b5111e974b24d52f9b9500239029601365105e57af84919660eac2e2151c3cd156328319298071a697c9be2b299f2bb7f9509b500ba649a2203b171f8b7b541e526d7f919c21390d8d1a1710a029f2a2632f8a92c1fe9a9de0976e2e8cbe53f839d87d32d94ddaee84fd0569eef88c42b81c9bdc98258cda905db16d217d9151b2d96cc11381bad1e20c744f124af343d1414a83e64f2895bea532b6c1587b1408e6530abc624d04f224757ecea1bd99bf400d90b9f20f92c4aedefa642b8a7dda49656ede3173499676336e6a7534f0ee4693514cb1855799a417309ad64cff698c567e8ae93338f26061e46d157994ef1a2b345ebd59ea05e4b07466aa8ad702c4945b884b66586c99911741f4ca21aa28e5454156abbd0a59c780d303050251962f89fd198e50555219b36bfc48b34e58c8568b1d1051ef0873bb61a2a02b8dc3ed2d88ed420b4e12b10927c1204d897bbf9c6f6adaafaf3fe17fea5a2cc6307c6f0ec52e93826e75a4a0a3bda408b7f56bfc137951d2779a2ac0bc4edc4d387da4d52b71dad622ed40418cea8581c84492bf200c9881577e1406202639d73912a0d5f342adbea8de6eb1680306c1217bfa862d856b136a4128d694f5491d04a0e4ff2bc531d573aeaa1b72ae536c7400fb850fe18ecf8100044ee135fb23ad76e85f559dde3c75908420c776d166af4c1a1114490d43c54f961afe372ad65da25c1355fab7cf4322befffbba1c81b8b116e59fd92ce50705c392f5ea6a39081cd4734c24e01a83de25f1e72b879bc0bde093c6c003c7a3337769d853f853c7d90a3866fa2a1a8357389fae9fe8a8cff829de0a57022f407a94536d92e6b46ada51db2cbdb56ba37c91d8b5f06d9d655ef59e91c94d7f26a6e245852505454b3b89bdd99be7707d359b30a0a77caecb76cce2cf732aff8013c05aad1f05a36c00908bc655cf0dd3a7c90b63d925d4a71f12e61d69c3465e08e7d09db5fec2182043dfae97eff22ec5c237a46354b9b5dfebbd86605b38c8d45149fe912a12bbf1bc2124c1dc1d6050090ff008141c4538c675de63f8e09dc0c08a9ba65ddfcc120269ffb91fc234a3e67e1bafecb64634d7cbd12c30d97cec4065f9aac0742883e7d0369b7d707e95e48a2928729f4007d04c31d0982937a883c4a1196afb108c35103ec4e94da53c8d7c64f640d670b69147c2ead7cbc98283dc382c6e091cff7a03dab58b8c792d34a052c16ce66e13313a3293047a882de4442e6290d556e2983040033d4028078ff63b2f73e6f00f5e1086f695c358fe06f227fa835f662d71171cd680edb6d59028ba2bc3c412034a6072a91ef60ace65f8e3c4b89a653b910404543d83b9d5e36089a7cf0ef4ff3cd65fcb18931759e4260a26dd44ed557a431058c4afc7aa0e11bdd63ea7ad3bb6adcca1cc237f79d112bd5c7aeaafe2ed4b7219e12361d147cf11b81cd8a2a2e23d9c8eac2e5fe9b5e1d66e373022be0d063a0b7befac001cd865da0bdc6209527e40499a0f0846575c56847208e9bf64fe79d3f8b7f0a1c3b25d3545adf4a4f389bca1895b6967c4843745db61274622920821890ec5981044bf91ecec36829da3a2475f85342363a929a33acd82effb334eda1483683bf33ec97c3cf8425c2a19c51d1132396314ba8376d9680ab0839a8d987337edafca769ba3e861715cd461483cea7aad846204fd42968b0225b503c13a2e4fd117061b5d6e418af34905450078102b9fa6b4a5e6ab4da6a40cedf2aede92af587b93cb557127c781ebdf748a07a4a33cb59fe820860010f3a81bcede2ff85b52a5df8c98b56cd65e9682e5b4eb6992c1195e3d20c16aa1fa1e276de5d93666cf1365f7153c932c376e8c3a2181304feceaf50150b1ae1473a29c245644032e9fd599abfbf00070f02683d4ebd31e431b561a611b3cd10b357ead612a372825cd3ee82e67888e0ca828a701e58ae6fe7977dee16006c09cd1bf4300f8868287f200de7ca7b418a5164bc1db4398f88bff7081a086afb4ba7b63b74d3dae1aa5364495e37055e2d225ec73f713403c708800632302553636111e4f6ee47c24e29a660b8c949e64242e192f2326c3387a9922871be8e82e31617a19effb55d8cebd16cf001a2b64bed792ae42c7a28c1941cf9f025eb25b8403036f20f98e1cad3bf5dcd08328ace53645ab79a621401f252a48a92b2b282dbc4c6334ef4c30f512eccd8bbd2238c6160cd49318267de2696a7c796aaa65b172e7480f95dacaa988adb923575c289901c6d178fc2d805d584f521d5e145812846c18944120064bdc13a872923d5162b768e2905d30bd184a0961d8fee275bcae114971254b9103384fbedf19e057a4067c95c158baa2719d31c074ae1c84c26014c8b9c7ec62a703c226c3c56d2cbc6dfe7cd70cbc7f2e63746cf8ccf438270f2a50a6e26a1815b6fbfeb55d8e8457886bac2ffd82caf93f66a36ccafc4fdc28e0f388dd0bbc2ac097c376bba12092b5299d4653a4fa6aea859933609e21617f58ca724b0c8da71f212ef9ec8718a664ac5881221ee4c7dd63c777b60009a44e9f699edae03bea33f7b4b40e2df41bcfeea010c2f4e911a20ced535262031fb8e8426e2a398a1984e051142d95764638b726c3d142fb3697dac3619ea3ede0fc939f5dc578b3e3443ea3c8920614154cc69aab626f5961560b2361292a5b46866859980cc295661a4c3ec841386008222641c1453f7bd295b8eb807798cf6b7b3c8eaf62e380a80f08697140ab10f5181228e1d04c74430400b1e5cbf7ed852cc154c786d3a274e1021203f13b7ccb8596799364a1cf99e30c6149fdff9f6087ab93f62540ab14ed3e3254b4866b59183abb0586774e018171d2420ce7a13c8dda611060a745022b5ccbc49014190af64642a07ba7cee97c30862dbba17170fe23ec4f3a8b97964fef5768c80fe101a04bf68bc85412120698fdfc38fa34aa52d6bddcad18d2cce82ff5d6e3dfc6965cf8e1888468ad803f8f095ed32b19952618669d9371d5d78d538e10cc86500c26d9de1210e832c30d2892957c640f72038cf2ba6ece275357984a577136cb434409958441b7b451093f82541af403f026261915969b8783c31078b6aed23e6f2e6d46f3237cb75dbf0d2dbf62c3272e348b424662130ff253201a7b3b0afbc986460d60db5eabe2ac18c2cef083bcb62ada247f76339a5812cfe4677986902ab86cfe93597a8c3a5246d3e4abe4728f6c4292bc931a06505cbb13c57ccad31954ff0542631ae8b54a57e886b9edf6cb7c468b855a8a0033430f01880a37025874d4441db8d10a205fe1990f038fa2e3d31535204529a2cdf6fb4f5150adb382d0019092c22c322d72a95bf69a9ff03ce50f1c2dd8fc773a455835ffa622481031bdd94280f49eb70f91dfc4c0d2ad9f66c94e37916ebf50ab1f82ce153cf0d629bc5cd22e30fc21f7a9b741f8814580df7b9a40373f5314f970acf4a4149496caf40c1da70098b4f73375dbd94193a11d5871a6c4ae23bc4517dd3d230e6320a11fccef3e4db09bff53cbfc51e93420bcd04f9ee8edf2e004a6427f3c34b839bed615ad6a84b89dc57febd7629bf5b0adc741dda03d2471027bf71404e1a8d197f567a7d66588750f371475d91207b9e1bbfe692a1cf33f59c8243c6d6510e58882458002826ee4a02cb7c4b14b8c86f540e4bd06f17a3c15b3f71e39be4b4c88609b6fa1234874faffe55f72cfdcef13ab7ccf5c0cacc9bc6fb33c9bf39939383b098bf56d3e585b287d265a79b5446e9c020505680bae8fee245a82b048e58a3f287651b79455153d81c8004d75d5506a5c102c0d5c56dd17f67a1483ab71d4a1beec8dc6350ca60fc12c73dc3d0b8d27e46b16324a9bfd74ac56aae2a7598ee570c0b107d32de56377e0b6c33acc0cc7be20d8bacc8bc9659acd4e2080a0fa9287bff5065b2ea95f9beb4084f66a18fa783b3449e7bc9261537dd26934f7b81dbde979b74cdb93ab4d88045739c87b4ba09b5ada55dc4946779b5cadbdff9c0f964482866b135ff82012328750da40d3a9aa793f7de8306a1843f17a3dbd9ef578b9a0ab0466ddc529f7403debd2f7f4fe92113458965c14dd417752fda289ed67ac4ef214ce5797e5aeba4c534ac0d22354f70e8368dabce242e3bdd4f00df9699bede8fde3d048f6b8d96d7634f829222e42b9d06f91d189bc238b1834b7332886c9456202af627fbd1ea3dc13b28318576db48a65f2ca06bc1efcd1a76e03d7997db8a6c07445b5c4445447b1d63238684759ab804156a357e5baaa0a0e8cb4147c0d622b01f0c58c1ce890781b2aee0b3921e02c627ada600df47a420671484cf5054221e2a9fdd99456c06a83ca468842dcb40216a210c4fdf622bb74940cb2801771f8e28848ca91f59c54113d1f9b1827345b5b25e018afde778307d558507d3467c260545aca44e134b9401bac27d25623b1e666d9f98a11d2efdc2a76fd89cdb2fd974aed64b26d501279b12316b02f770a08fb6623b414eef59e05eaf13756886dfbca8c0c7592b81db5e09516da37c3de06957861d143de245b7e5a51302a1d61e8d2307d4aa45e4229d966814abcc4266442a0633cd2ab13d1082745f131b318eb4319235b9c1683905930adbf3e922288ee54cb7372e1cff4c186c90ac470a12b60dc47c346e67c52ec811768279969293039f6538f037862b7da15d1328f63e3c71b85113d63f09c01028ae989baedab3ee871bf619e2af1ab43e7b05945ee9f9a983660e96d03d8f1a8679ab08d90a7dd316b478e78b297273e0c435d36cc2bf18237b344af2e388d5db3d848823a2a6cf532cd800468f4244cbf622a30493fe0a353cfc4cb9fb74b23052963f30dde18a4041c0dc1f958a6750f8cc52f90ca1cdb3d85fd27eea716986e7e43afde5019dbece7be3223435c346e436fc89c6afb9a375b85e5e6164eb1dc6855398f51c7cab73429028214dc30500a963acec223d371f8d0483ace3e421e9868dffec1d269f8ca9f20bc184b292e8d1046078ff1a6a2980bf15eddf65f56935fb6f069267abbd0d76c2ce21611d22531d37ba5949c237636a14249d801f3648ba2329a1dba447e4930cd5cf227dd14ffb0ab720ed6b137b3c8eedd60d5e19f4cd32aaf6db71b03281430a8ca7a440ffc68ed60cde028d011905002f12b2105d4edeeb1de71d7146b3e172e40981356a7c8fb5b2bdc4a84f1c45ce5545392fd3151dc8f01e70d68e8c4ec301e0a11d5f72240c93334fcad60d04281bc211d02e03fa41b0ea372fb7bee36d434afcd7829c07ff97063ae272c3b8673f2a22d4d94c4f0352b9f3abc6024593f417c355f50ead89ad617f0b1cee6795c2e7753d4091e74491bc3720600dd0ec4cad0030d77fff07c07b491e3eff16bbb35da303d3c5ab1d7062a273e8247689253019b02ee270626eef2e351da0b1281670ecca2e6d314c818cd8b642061ecebe8e1a0a65fa129240f7200ac9dd3ff4e244d23de4dd75a9c9deced3ac935575c118b6ee8c5513b8b5d91f4597c4acecbb33dd1262de77a949e775aabb775f9743988dfda86855ba723a6531ee1204c4774c930c9b0744a91473e7c23bee80fb52b7bb42677d114a0512a82524e03bead3982792d2de43de0f2d24095f98a0607ec06e0037b77e0f9151222c696d0d1c4f78d10cae513ea3fc729d850b8c71082e1e130e5229adc15047d1fca07988dc41ffe3e38f49a7d24a7c9b79422514242832b147dd14b430178b035a1fd40801b26c8c98415ee2e65a05cd8580c779f7034a8656bbead0af7dc36101f51a5a8e9b9491a5bf048171e4f525a42996c15fddf0f255a62e9ab0ea19ace2bd9ed12f944ef1b9a463535cc2cb963b03e74af1ba81ea953d2a1f7fab98ed0950b669b65d2b47c8642994ed0beb41846a85b5c07aa97b8cab0ac320a604869fdaada1a3551c68e3ce04e8546cd28253b707fd327cdb986273f9e59746c0b43fdb2c15b3a9a5b6b2c314c7d63f81baded7ddab92089033ab96c3609ec43c117293ac0aa24fae1a933e7014a109df1db47160c403fd65e6cf11c102d1ca21d532e2c8c7206576d17c347810c403f2a78120ded92c39a4fefe354251ab295f0c381157d9537a1f4c8f07cf47f568844305a0d10bda0038f99f5afccf469bd363c427c80610442b69137dd46e2e1463647194ce5bdbbc56c1841a11ee2e89c8f2a452fc2cc8caa4685640bc152c695be50103db1a9609c2181fa2a8ebca53cb9d09eacdae835336aee0f52d0a2f640ad3029706d70532970eeea34a588dc07546f882b1dd548670a6bcbd6d8286bd4ad8a02f976ada801a9461f92f94de2bf5874e5691681ba4346f7df8d166507ee34abb6a067048c95244c1033537325a6c10129df95b5f8102c76276f1a43d8bf9e004ce98475566e7138fd581162d6d50bdc72131187f95a1aa087e45bb4adfd66515dd64ec08c8b691d9fd28884cc757a3a9ea364ce8ac74b3a449d9909fde42b166e2e06c811d11c930d81d4dbc37f4cdaefb48f71bbc9eb6ad2ed65997a081f05bece818085f01d27f13c0444f950111cf80a464e103e34dd738283fac62fa55af1ee3a8950111310cd0d3d300c19227e304ff52954c2d255a5609e306162440729d3d5ef4b300f5bc97cc1ff291110b9ad3a7c3c0a4d4a8a09232628394bca07bd7003916224f069b1cb11f72fd226970add8b42707e84d0f494f66326c6e930be42c6b6d5452c31a15b43e10d2af1a0b534df45fc556a826a7d9d5552af812a09b49c324398ec5019c4e89fdc80daf83150bd1c5b6f81f4f2657efab67108d8cb476d53968fe4da89035e64bc062a14e1c106e0dc245e569612e22f2a3725747da50345e0bcad1a0561d5a0e9ec005d131c503ce33956892734cb01c54324ad45ade2c65c356d8e64dad761a1760b668083145ec2749cdbdce8fa25c7b17e67644d83b158af885c85bbdf65755b41111afe22fb21366c6dd09038f17dd9063c941422cede7efb8b9046b4252b0b7a9795d6cbcea976418470e549a861247564c3674f44b37259b4981bbe39efba5d7942c6a1166c6f4809c9f9f76c2dfb1ee32255e0d171132a22e6065ce5f252c0a4bd756635e61cc510ae8a57f91124c841bc32b8f0a2ec9407fb94286e16a869a772b0d90925b03f69691ef83272c08437a3590975c75a00aeef6bc87eb190c1812cfd638f8ec6b22a51a3b08d1959560dc236e8c4084c2fc119eebfa31f10ea28c9843d42bc38bc2f6809e528bf688a548ee22de7274e815f47398512cd19a2a198f084d9e2c3baadfb74faba7210d9c8da9d14d4dfd36d44098b90882b0438b2957190df343427144d6822ec4ac4153295e6d3fd2f9a15c6aef0f806ca0cdbcd86af745c4208047b0d0d0c6884010ff9404acc64ca58e67a86d6dd16c2ea028b0a3d9856055c8d1d82c38b9da89d9741c9c087d263481a545cad161614fb778eca59a71f4a07c5a1813bf5d5efd1aae7c534c689ef90397ac4db72950daa58126fddb79298dea9852e0b001ee3a25ea04ce5ac3889a60d74883e34c9b58261f4ccd7970ea617beaa67789889a0584c00c81be3dc6ec5cd5035df22b228d5c415d07c964a39310940fd849b58a65857b98be52c35c1fecbb2293cb1b69dce9e41de22a8eeb02958f37037e60bbaddcfdca87a11af8fbe2019b9c2e0622611d74deb6a61961f933d6656ddfbfecfa4552d2c0c3c51b038f15399c9b12ed92804b8527b4b7584dc45b605acb3059e70c596125810400989735189ff9342256ea209a92ba6b8c8b7b5f7d872a98d1ff1549d27b0abccb56cb949b19a58007d71730b956adbf6b21bf26864e491466a8c210b01d3160f731e83e4f7c667cd2ced1878eab0b7f6bf9b881099020513441413112f25392a84ef7a17c0b7b1195a57542c580172c56640e2a8f5f66760fdf7b011f51628070f63154f53a2624911e87d1f815ef845dfdb578e0a4543b43ea7cf29bce214c690a872420e485439a14c02dffd8905b7a50e1db0954b54a956a9d4c392521f86b9d4bb8456aab7301d2bd6ab5036f53060c0205ac9c256ab955a927ad4af4458ce95837a186ffff5ad5c2a5683fa9d4bbd58ba3e17cb417d0ac6c37850c727937db2570cf539a998934ff6bdac0c75582f733a84e8d80162c49b50899fd3517eac1f5afe3d1183a7d29f3023c51366b634f1840c8a70704bcb75a8546f5b20d8c4f79302a302552a15f812b2a2aa44a1dea24113c6da475951c8b2acb5ac150cf695569512512f6a6146cc14f053a929e08b5aa029c547d9c4b0b1791d3540782db14f652a967395298fe55ab02b48e4f028ab7aad50e2af62b9d457ba7074f8186972544b99ae602162cb5786df92d19af1bd5c5a8871ad54372ef13fd5a73e87b37aa560cd3895e013f053aa97906afc642afb624c8c7d21685f3c40a16a4af061d04514c34f5664fcde36f10794797a0196d25fd054fa993263caf07335a1529813c650fe16967a87a5604bbb3d5cbd9ec4725672427fb765682d887a3d41bdef883b4ca51e7c7f3db19fb352a6763e99db520c6d18c6764a55e92a226b1f7c19a47cf5210c74775164c554200aa67a027ee802284af0512ef8f27d32d4e788322b9ed3f1810e68f967d3722a686aec87b11b8ce07b9218d3c1a85a7df8aa24d4b37e85725b7e5e5afb296b7bf0d4a54cbd4a4be9a5ea6500440cbaf86d4bd1f5b9546a65531616ae54ad777d2ae54aa5de3f27f5a8942ba56ab152e1a7c015a81496368ce5d898fd249b033f47f5a9588e2ae69f4c04c1f7d4a762b21b8c556a4a5bfe19f0b18c692abdf4f24c2e0c657cb2cfc6c6d13fc77ecb86f65f35a55258aa7e87a558438583d32ac3d78b16c6ea3caf5c8ab5fa95a33e6485614eb8ca093fb68a398f958539612a94854a523f60d1a5f4d64ef83959097e8efdf0c1588e8da5202b6928eda752b0a4d43b9894b3b19c1464a57d2bc2bed80e38002cb494b1d29f68811765ab8689974a6159a5c66755eceaad92540a25c272502fa25e56aa7e85ca85e5cef723e6846f3f15cb5989e572c2580ab2525686e097456b67a7055b94b3d29f6841973206656210a65cedbbf358297339a0cc672d511473d430dad21d145f56868f126329c8ca30262bc31de7f1ff28e09fea99a43e7c2ba55db2c44a69ed33f1188af536061289ef31a5162b4715134a25a192c0cffa60052e41edd76b49ce6bf5acb730ff17ac8a7db2025f44e1a7624a168ca5807a8fe56c6999ec7c2768812dd052b65e15be2fd9b6b41f9bc1980b4bf093d925392bd6a7dcfd5d55ec13554cc963606c897dd423013d67f5aa4f3d0b96b38aa5202b5531192ab6f3c9ac7f4e6429bf073f4bf4d94fc976a9095d3efb3eaf40cbbf9f24f03353862f7e44e1839f7da510c294ac15d15a0a7829c10fadd8527edf427dea5b356052ea85c6527fdf6afd6753ad9a9cf8db86ad076349b1a4d67f0e130ac59750ebbf6fb5c42a35a57ee7018940a2ef5baf6495aceabf1793d6eafd4584fa544cc912896f634ae07f3942a9073f154b0a7fdb3226c6c225556c59c5965f2c8440162bac001d74d04197794e0ab272a754d188f960ac62cbefc107bf1596202c7c54887a1185af7af125847a550b7481a0ac044325fb6385744a1b4bcaa1de5f298442a8573df8aa62953e255b8a49624c058a666aaad8127c97ab868b6f7fc795ac07cc9831d372990c872d38885ab0803a2ef0554ac0175f2ab8005cc7058a3060fc2b56c5a689bd60ac79170d074110fc1a98abc6e57ac180a1ca14ac06464c7452d96f59183054e92f26a84fbdcb71942a9c98b75cae174156e812537e2fa652df4a3dcba65e2576417d4acce2b35469459cd2e53ce110e518540e5ada96312db4b0d65ab75a7cdf97fab43873060451a016a1188aa2a805888a6931da67f2c5b448a9962851a2fa21c8e81263451c8867ac8db552b030c7be95d2e6c2f2b3b923d8578a7ff4c9be07f2c95cb19ced0203e56ab1ac052d0ec0960d55a0b59605e4938ddf8fcff723be5e28961750088c184b4cc812e3a5fc8418732c302c302814980f04dfda977dbd5e35703ed9675ff65be05b1848c4e98b42f4014330c61af3c9c48c62c64ff6b56c17206317304e45ea4331b64b8ac58294f51f96984fe6333155fa92af0c45110daa464423a251d5840f039645d4e23a218b056118a2c2308c357d32118d8eafb4e3881263b91467f4333562663ce53cb95cad9888c62582d1962e34684434221a118d162e384a0bb6ba88e902aa623915d812e302c3e5fb69c572e21660c0800103e67bd7c8121930848a85c3fa544f37606c8699078cb91b2c3959c05fb9839f025937384a317683651c738365891b2c62729e5a35c81843c35fad302652f1b1efc310cc68cbd6e7442a9e6c4c461756172fd78b2c1e8800c60573d09229c1cfb17830435cb52cab0b118a72cb962de216718b4df9a53eec1243c918a345f93d8da61b251893d10502636e469656182d2e02189fadfe0363606ca58ac56668a1b1a5fc5e9cd154cec8f2c9ece7666429bf6f85b134baa8b48cc1020b2c9e50f6432fa956e840a92bc61518e7f9c458d885a5250c9f06eb4b18c69450224b169596ef7b1a609a7042c542548cf54509518b122ad59306c8902143860c193264c8902143860c193264c8902143860c193264c8902143860c193264c8902143e673f24165c3d5db17b1a0be05147e30c0b7e1f889aa140cf56ae2a5ea7bbdeb7168e5a8f07ad71fbdb2b862472d564c25a48a59a0d815a3288018cb8bf37c6218c6be179dbc7cabf762056b8b8f5546f452a6fc561f90fd158c75265544cb3f1c376cd4c8a121024e083733648010c366ac81f172b5582b550a258655941940cb6e198daaf0a20a3455746135b04413ae4f47c60e634e86cf52e567635ac69c8885ca05230e0e0ece98af0b2abca0e20c15668c4ca02ca27c820a212c153c7c545c11d3851833a53f21464ce9624e208604629e44315d4afb2d5408a53f216688d27e2b252607d5143798628bd2a24a3096532a1ff0c414563c318509a6f832459729b68066697fb0df83d66553f0596471a20238c8c2825808c4302bd5ea5d210cd60bc6eb55044b91205e38355af643fb2c7105be4a54c15c2a27c654912c9fec43c1ec8ba84810ff55c03469caef455bda2241847159f18b299cb2a45c1ec272e1588ae37fae94ea35c672f69502ebc524f58d3244140cfba897ea43fb2e550ba6fa7ec077224e1f0f44544d8cab18112c3f626a87345031885aa52af5399ccf7ea2f8a8295a305e4830b9c1fa16112cd6a658b0b00626620175c087f159d6073a31118b647125389ce713b738cff7b1028c391c387ce69f68c6558ab10f559eb1656a54df8515c6863137a608d6189614ac311696a307514b91205846846149c112030a59fdf7ac2d3eb3ff81c1f1004b03ac24645a523fa817c38f2d4195554427ff74ce94dfa760ac2e50250a4dc9f28275266680d19ef970949f4553e6460f555d7c68b98edc08c472ba61cc855bb22851b2b694e2b3b2b0583bb05462138bc562b19cbe9f1db080425e2fae565d46f1c5a6efc7f5e28b5744277187ef67f5a205725048f8ac0759ac580ec55a95e2b35c3095eb05cbe18190687dab655b28d51306b0f03086ef5ebe3c3501068a305288b1624c19335b9ce9028d174582c092850063f81fd087e2d2458918132fbf7c3ffe894de4fcf72214dfcf2a8c1462ca7c3f66c42dbc0c7db55a5998a354a1bf8db1debd090160ba2861a53f01260c11162b46044bca79c0b742e38731972ac1142ae533bf914ab95cac1ceb53ac54740253b1f0e97b41ac871d310b8e3201232846517eff7db12c4030cc0f449c7258c10e2ad8a24816d787ca218a302ab0a2091578b10222886091e2490a0ad820a4d092538528ccb9b14aa13ef634da787902513cc21babd467ad5dadc297921ba9542a850ac39c9cd5ae5c854a56af29b24811a66cad58be0a51ac97922f16f332e6c431aad2c2c43167504ddf4ff8a0b88517a219b10b110d91ea73474f23a8f3812810fc0c8c2dd712474d8401554e3e19288e6162ccd97841027e9f0ad6e49381369fea53c5c0ff6c9e4a30e6c46863e305b4f1d2c4187eb2d2c60b1831a54d13527c3fa82f4f3650d884f942ff842069b15cfe62c2fa558cc7eff89c388685c56738fef539c42dec0e1effe1807d8e181610c7cde7689919c788636e2c0f1ebf63c7ef88c9b0e37184374f378c35b91b33323e27cb8d999b2d6ecedc74313a81200c2724e0270179ecf8cf060cc7c76e9e6e9af87e50507c3f233cd8f26186199fd978d08c8d97ef07c7836ff3e5fbf907dfe6e9fb813df8364d7c3fb1079d7c28c15ccb4c097e8eea77bc15201ebfe38f78fc8e980c48a85e861dcfe348f63c9e474c061e2fc3f12a18ccc618a712b4f172632635420abc712389f8374f3efb1efc1b30389f539537372fc2e7c03204113e847750c88eb7f182ba71e35b29970e98eafd7543656d0a6523b452da488264072ce7e301cbf962392aec781e7fb4e379fc8ee7f1abc7b15a3d4c9603165bad78c076c050a818924f06826f03c6c2e23ce02b0613b7808966c4329f0c7c1c3071cc2703dfb2cc380ff83c60ac33a00ef83b600eead4f8d5cbc64b10634e1c43e3572f253472dec19cb1ccc9c9791a397ab0f1b2528136e00afc6cbcdc80f927bbf13660392ba58d6fbd94d808c3304ca170581c376e3c0a96db953740781bb0189f82e5642508abaf01cb8959726039d18906cc05cb8902c009e166c68d991b33316c60b9314ca2c6c64b093e0c58eea6893189168c15be94a86261939c1c5f8e2f62180fffe5fa9ac7e1f5307e0624be9fc1f5359f7a3d8c1c155c5ff347aeaf891dbd1e460cc9a7bf0f16fbc0e8eae2457c1245954af52b16111e76a5f84840970e5aae23b7234c197eabe8d309df3fc6bf62b916cfef7ceee6090b16bbc3f3dff77d3cc621462ce310e319ab237b9d3f92bd0ecfcb643b2f43c172bc0a06c3c2034c59199f9b61a6cb8c1a3bd470aa71a546d3270b77c0fc557485e777be1503c19843a15e8aec4b78293a4fc20c481ced3c093f034f2c07fc125ef625ccb013cb51a18497fd5109b23f7a9d2721a66ab56a50b09c0b160362447daef58120f85929bf56975dcde7dab1e58691c6cb5ee773374f213c8d33387ff374d3c40d981b28669811e143116698293a0a65ffd97c5f8e0ff65fec3f1dff7d4abe1d5b7670f97e543b94f87e46f81958caf0736cbec6c3c28f7d0e1d1fce308305e5247b2b409fcecbfe48e765b2d789a1624724bcceebc464d079126256803ed8a360396cc61966caf0e66947175088cedbb09103cb1b37605a54b09c951160a8f757eb917c2008cb7dafaaf950302be55773f4c9c2a24f16de7c6e3cf35a9c274cbd0e584e0e580e1a580e0c9673e693855fecd1384ff83a305813a813a23e3082f08fc6674da0101dd9a35a586e7059f87f06d4091fc6bbffa09a5e9f6b6151813a2f779ed7a36ef09f334daf0f5f3fb2fe6139b0c411cb39136ab901cb8902b001cb895a6ac07263490396130196dbc1a50c1f07961b93186f60b9308919b0dc973260b94fa20c1f0458cec55ae2e432c64ec93903d3927306a6a5cb93f8c150a94010f5bdd6542b078ccf5c36effef9e7dff7af9ba7327cebc251be7e84e570cad7d7c02c2ce789327cd00906ca09e584ca82da82da01850505048a0894165411aed8d3e8a04e6e479732fc1d5b409d21e5921be508613630ae4cbc547daaf5b99c3365f80991bd8e0eccf5e95819cc3f9d25c4dfb105078e128542a11e05d3f2b962a8d71228944b86bf624fa3cecb84549f3bfff52384f199eb439d9781b02d302d3126c65cce9932fc9c334d58be1f170c95d3450e9a1c2f6a5ca9e1546387efe78b85aef589ea73a8982a659d47557e523e59082b620b179812302fb02fdf0f2a76f4c94217ca8b565ba262302dce137e2c099896327cd40b7c162cb41ff8853050df0addad0d61a06ce9af25e1f7aeb2484a991d282b3a3e1eac541943460f634e0653813ae2cb80b19e5460c630ce12e3e092578b157e2d56f8a142988d7d5910c9e7e3f835b09c1525352f26af57a540181d3c8a11fb60b9162c06c4f8c180a6b436ef2f6b6dc62ee5f82c586e578e2b172c272bbbb8bf94842d56f8d9162bfcec074398f213bb7c32fbb12046fba8577d4eec623f050a19bb2c1153b18b6ae5827d635c4d2ca102170a9624c68437f1b12f404219383574c876c2ef07d5348e29bf6fb5badcf0e55a6246a796989615ad31ad32219a9612e567ad9d22a5c53e29f1fd7cf97ec0b7d696d6b6ba7c3f4a7c3f5ebe9f2f53b0c4f82cf52e864b179412b625464cf9fa9ab702645fb1af89c980c4eb65a8f951751493617c9b9803bd506f535fcc0363179597f1c97ead30e5a70a5f4c80187ff516f67ad5b75e302ba5553d12f0a3424b89da527e3ba50f10d538864b6b89f025634214ad05418f75600c6339578c03a375988cb185c4183eebad00e5a056b1950cab98833ae25b0112b98ce1835fe393c53430e61c8aff64dfc73430e6644e4050caf7037ed151edf452268a302049767c8c2029432fcfa09c5a3942df83cfe47bf07bff9c98fe62b12536be236ac68c118f38730675c49933a9238e384275446a7504eb88d1be7beafbaced41cc88981131236246c48cd0404c023109c424900b586c68edc7b239f8ecca451b7e20b636f759fba9a27c399ffd50e16767f0598bfaac0a36046bc14f0502114cc1b037d65afb11f966a8409b00fb59d467ed07d2ec17b256403e973da2b2a20ed0049bfabeb007c8fa3eab53f36363087bb49680459f87fe3dc086a02c143f0bba68009b85f5cfc77174eb36b49fad81557d2458fb89df075afbc3f65895757ddff7a1822c8fef0b3feb03922d11543bec2b068d4f082b7e22d8d082d6bfa2ef5936f40f45f9d72c01408781c03a92107ca045d930655f16ccf27daa19688780f6fbc2ff5c2b9915ad4df9843d70f8d88f85527d296b67f6fb5800a2ecea0b41251bfb78d6823c76d5faac2a653f24df8defc6670374d06d8d457d9f7d8523187e227cdf675136b4d9950edb123f2b5a1842723ea1546bf55924952bf55915acca5af0b3a16d626d7c44be1a5feb4b7da205ed673f3bb336bed6970a2d2882d60ab1a095d99575596b8bd81b1f0b4c5955683f6b67d6a26e3e1936fcac185a225fcb82df0d0b82df177ea125f27d96c6c7b22bab0a3f6bedccdaf85829d086aad05a2be42d0e092a236009a205edca863876b59ab55ec8b9617384f6fb505f0adb71864fab89b59ffdacb53c9ef29dbb60c59e69a106fe2d30c04c98166065b660e16631812864c6f811ac0a3762c009b0d18dc2a130e04b02a0c032910a0cc89d29ba40903861c00d1c34b9357c883000a787c885718410322f1d42602cfb43c6fee0a79646013fff8593351fdce0a96df976c64020efbc0f092568d9e10247ed5d383e8418ae05042a5e137df00f6f7007dddd7bd0f2a6ed783477f7f11c58978db09a877cfec8af18b7339037f27aa337f444caaa5b2eee7ec3471c626e28528f8ea7ba23e1d8e2ee31f0a6e895c4bb6b6a6cc3a78974890c11f21304c80f1f3d7ca6b8178d388af44ade7d4fdaab06cc0139d01412a029748222e16d2a07358c10681245576a471535840ce81186e02ae208d4009a4227ab1b560d9c1b9a562d842e80375a1be5522d510d41b1c022382c91044d2a2f4d32a6d4b0120226e0062e2c9ac4344da28bc60a9a5c3bc681a6150e8c2f5544ec1181709ad11241081bc21d9a6a60353090c7a647856393c606b104d5909411b00634a22aa2097cd2a307c5427169025b281ae14eab07684357b8c35a2296906a014503c542e55c325c325638ab9b540be00f6c40d100bbd82082691a2117ea9e36828d70e6aa41d98416e40183c2225708a82fc5422a273524ce8061512d500c5d20087e600a54812b568d104c4549c5a82962d9a450290ba64220614f685522803935ac70884734c1e052830d2acc5125b121c4c28618ed3dcd175a5021e604619e00c3bb19f9804509d0092608c92a1735e8e131d6a8522fb8403494c60452a000470f3e59844072002ca68842041dc8000522d043ee0882b77bd06b0e6c70c60a1548e1c405acd00080292e48211a62b204c78d106ebe3061850213a061069a8d1a59c501038b1654d135a5f962073a98f242083736538820041ee840063090440f3c088006801658201a128ac2042128c106b2346141155188c0890e70000245e880c30d363833850a3ac0812f15b8d2844f212536af332f2883c5134e30b1841246f840007cd20030e5051684941499e9d8bca230c1130940800f57f009001484962829e22f281385094610022696502209237ee0e10a1514844c28321302a4874e0c9bd0d3bca04c0b46f044089c606289248cf8c1071e0870250b1a952927f4905ef8c0490a3530aea88165071da4b0e0d30002e8d06342629506fce2fb81e883af07aa2342097c467c11b03ebe1ea08f255b3c6009e0dfe0f86ad89c140d50048b1386606f5620c488018e618d0bc6f8a2e112a1558365b34aa950a90f851245d03aea0a6b041234a556a9550843f5935a81365c47350cc55432144b352474d5d8d085a2854be00bb409c5dc708026148c2fb50a775e36864ca089b582eb0c7760d4f001c911a3841665e4034d2638496273c317b242273a3b6882810d2484a9c18a331b1c486af8421a20cfcec28e8825a8a00985c2517465460d100e20931a02d024c28a05970c970c1896ccd8a9344b074d46f68a49ed8731b5025f625228801d6a50853050366ccd8f1ab468c08a84155c51a11102c6d71291d8a4888429e017bad8008228632d61ed404d09494811b141030c606283047ab8197daebc4c270368a2a9c5b321e086978f1abb420db0484a849f1a58292228960a06284488096883b544074dac94d0cb48d52447c912d6aa89cbe834a281a610c29d1f166a06c20bc56a29890100024d2c55931b483a3489e0285a940a2896580445c211a0166fc543d504c54a89f04ab2d2110ead42905163078d1b125425a40065470d2c1599faf1fa2144a828e50a5334c419f8b372853c1e496a9562853d620ae1102456cc0161e28dcf4a6582449414c151b16e56426a081a6a0151c9421da10e94049a48801126114b106fac7484356a7a80366c68227b2c68037942508c210680027020ab14984098a72e1490401103b03203934eb261b30680292e4859218a519113149acc86fc90ed1821c7872170220d175b6871c2911162344448692901141180800a4a4e98d998e16aa19af8b204125b2250840318a0250151643c7a48041ce0c8288d175d20b9c0450d3a40cb363ff480da8e1461a5b6f88045c88a0a31466c9911f90941468ba54ad5c8c90006a6e093680805a1254a66407ae8c4b081f10a15c083000210634c900d50600212b0c2c20a427e70648427088383158e98f0b34aa192c861890a34208802e810c30214a0801e88868e14e1e1b23e007bf0a109cf7c0d3e33a1161f19718cade29be25bc14a052e29be137c517c5fbe24400a7c4961ceeab0385436c41a2f11be10be1956860d08628ccfc68e218caf25b2be954af5a552e2175ad05a94b39cc628c20e29d2dd2abaee7af0994d54e55950849a8be0a3d1c7f902a70723ce16eeb5bfa928c62dbdce9b60e46526187915bd61249c277747f988b3c488538111678711a70677afd5de965fe765fff844b58abe467fa35fa4b7def5e2ccbfe8ef1e121592245f384d5410990834e2b856bcf7ddf5ac5b7b087e6ec79b276e9450d1adf1f9bfb3fa1ae7f37564d85c7959df0471d3e4a78af77d7d533b553cde9037351eb76f2a4edf961f9b68aa7fcdb6f56efdf8a6de752563958379ebc63abdb6540870a81c87bb28c627c676f71e771e1910e9f1477e5d79260944880c212284c80f9120448010f941c407911e447c88101932648890213f43820c0132e4c7101f437a0cf1194244c810214284fc0809220488901f427c08e921c44708919f213f427e7e7e82fc00f9f9f1e3e3a7c78fcf0f912043820809f21324481020417e04f111a447109f2044800c012204c80f9020408000f901c407901e407c8010f931e487901f3f3f82fc00f2e3c70f1f3f7afcf0f941c4c7101f427cfcf808e203888f1f3e7cf8e8e1c3c707911e437a08e9f1d323480f203d7ef4f0d1a3470f9f1e447c86f808f1f9f109e203c4e7878f0f9f1e3e3e3eeea8bbe7f82843888ea732f95071f71dd60e4b269be16760edb062f8dff918feffdfdd4b707712dc5d870708637ea64411ee3f1b41b00184a4118417fc67ac9f6d1b4eff59b58dbba1ebffb6e1b4a631cedc576702cc0413dc5dc603841a630c2fdc5fa39b87f4af518cdbeebe630477d6ecf7fd132799a87a774f2fcc36efc99ad755c9525ed70c14a3077727c918b531069331061254129dcf8a8a53a6abf3b1a9e8d01d2a81e7cb06dc9dc7141f1e5390fec853f179c1c643e280bbe7f0d1e604a2f77a77a40f09050aee1f179f0bacb8c2b6e04bbf9fef4791038cc0c51c9071cf124493d70021719b8316771ea33b68c6dd4fab23ebed9d0ed3344ada784830ace6a1daab19dd3b222324700417242640019d1e3f6fc4c8f790bd91ff121ec92baf1886ef213d3e5125f4fcbc7fef7478ef6b5933b83be963cdc8d3e87a7312d6cc20880ea84b60b144451230070a1081053f28e1821c238c805548f123840410b183971208f8c4c38d881e002449d3c30ef8800ec0ca2001b95cc1a303d4a129490a0080210251e05003dc71913d154845bad0910146d16244800f1840842b012eb00802c6225e10031f7ae8d810fc3038b81821c0c2951d2f40940e47f0c00506901041a38b6f064c283971128122928c5b7c617c800019a8282202498c94f930b0858a13184d71810582b0e24340165a2e608510387c66527c3564b971010731c08cb080e2b341f12640400aa6303da089cf8993173808e106b1328b2f5f8f0c58d101a3a31870c0044a7c373a08c10156076459c0142ed68b0720e0034058406487118ab0645ab064011b18420bcd0544581118800425a6f440082d1600c2720113c4c809304150316107fb430e2fe4f0c30b0870e20357ec9212476518d0bb026749063be5062ba61894982109876d811aa073c01007e0620985d4f2a8c2d6e0a4b123800c4efbfae109ba03811c2da4b8dfa0092a36780054c5c6018e5ccc0d2250f140e308cc02f70d7469011eb2031824b624f106d0c06c400f299af0010f23eeb400221e3b4238404c0910d7a90005438a3822064db81d37ea81061f268841065376ee439e8430410c4fa46658c0fd460d2710614203c4ea8a3b8804d30c9ce082e44a63c68c140f18d3988008245ea4b1c009321082942c44c03b5da41962872f50ac729113145ba4a1e1cb0b54e70f36346650268df983005ce00637f8086058914648023a740c81ea1f5220451ab2cc94b109124a288282228d8c214ec822046162b0c2a5892f7850822e2344c13d7a60e0cb17580c4075064d076a662429f145131a48b22b400f5b101005972f8c4063042d0aa73d0310457cd10304b0d8c002bcbcc04b0f447cb1b1e0c1928e9d0e0d1b00e20b178218c261071f96d81165872f4e78e24b9a1a100ff8185df962840020d1c45406147490e10bd6052e80c41609a469f2b27fc0050eb24053801680c0063bd21fa8c00147d8a4bc6855e8e0fcc1122ce092ea9801e90157a6fc404b01921660022646782288a31fe0e0c4154978d04841099670f283a42b60a4c002052138a148921f145560c8cd072404a9000f467e10840b20ac2c2190c0e505407e90a32587284a20440784e862e7073ec5c6810423d83013810e2f6080250819e4214db210d5f082041f1881f879e2831584c8f022091b8cc4e851c1800958707911c404a010f2010993912e4de8450c322022b694a3063a90c00b2f6e02aa70e90109083c71812ebc58920215a6c87a4439c00d5b78b14380303890c062c50b2365bcb0e1c00a3e705126adc065850f74906629092f38f0c50a22297c60c511bb2f4210c10142300277f72fa0f081076040230ad0041a4ab060b55c2f0bc3a660f10d6e75b8db2a3c25155df2f923af79e98e29dd91a7ec3c6f4f47867559d3344aea689e8aeac85386c4d3b41327991867925bbd3af274188c8e84980825a1311132a249299fbc09475e47a6e294b4f1907edcadf51e78c0dd7b7c4c6d71bd926abeddf5ece9ddf0beebd63d263e7decd4261aed8066051726e842a581154d5688600751bec86e8079c045085044d14f669a2318468052e0828d193f3a900881adcb8e0a5451556000313551a0a0ee925a50148218337a0220868a05ac1c4841005ec842ca60fd1b8a018e1d20047e5811e14b09ba54d14468852a0551e4608b1cbb4c4fcd8c213f00b11862451ae088751c22300627f0a08b2a2220040dd42134383b90c3613dac018fae7c01072e5cd49023871b640fb82f0501c25b33f880db1e3cee37ae3439f842e23ef4eea930ee0ee673e2f3261cf9bb537ce29fe93be4ee301f5149f6cda98dd643cf1e1d4fd5eece828fe2157a2591d074af19e942e1ee534671e7c59d898bbb8f16f70d84fb3ac5c95d9d22cae0eeb151dcb9c790dc457017720f6d42d07d863b08ee369688d0c9182a117af9993e555e467a5bfecdcb9f37cd0423efeea3bbd7b83b0c20640f1e8d770f3ce360159ea6576794f3d18a6d361e90ddd92beede828f60113eb3894f1f3208e9c333248846eab1f5f0f109d2e32221f9f0710ae961fbe1c928a9f1beab49f6d6add11b5e7bf26dbd26d9935e359f3d5897713da17bcb5dc910db8ea2cbeb127767a97e7c52f846d39dfedabeb51b1fbf77f7183e7e5bdcd3ab94757815b57c42c6efc7dd43f0f1bbb9bb0c1f3f23771398f0a9a22bd62656d2798dca5ec5e91b798cf467cacb38fd3aeeeec3ddaaee2e828fb60b77d72b69aa3dbdc2bcf42a7d6d5d95d45ebdafe6afe9c876775d5279b3d94e791a43a9fd89d3f49aeefeee1f92bbe3f868b1e895dc3a9bcaddada77ccdeb8a5fbd7f6275e56dbc6e15eb70bad3a1bfd1bbeebfa9e8de57b766dbdf1d7870771a3efa98d1d6b8fb0c1fbd07274ed16b7b8d770fe9df965fcde8bedf5bb30eebf44a7e37ee5ec347cfe2ee363eba12eebe9453db8a95f2f7366adedd35f54a9a5889b6745733a7e975f797bb0de2ee29f8e8327777f9e8daf56dbd7fa2e9555251bd9267d6f56c9dadc75c750f5eb3d9d35bef8a84a63d3f7ed86c406e0f9f9f1ee6907bfa081162faf8fcf820827485f41012240891213f40cefbf3639a3de6d6bcb5c7dd51ee2e82a1bb7f2b1948d1f2a7a6a6d2c1550dbab45a2a50880c32d0f03df834d80f5f06248e52cf7a19ae383d90f8393c100dab57c564c8e181c4980c34ac624e0f4403ea55b1548c06544c8c81ef4f03caaaad1c3a08c0e6607308dffe07bbe2f43984b11c4e390690247ee83c6e05b429b43c1453d5151b6a28bfff426b2fd0726b2d08cba5aa80e52a0cc310f5a9551882af52bd0573a005c12f677ff5369441e9dbe0ab5e05aa6448a952ffa15249a8552c0915bea88ae540d5f749a8581550fcde93ecabacd8a5e5d67e0fe654bffaafd55abd8bb175874adfa35e0c615570ca24d47bc98a7db02a38252ab6c126b65481e52a960bdfc6aac85026f9fb7f40e5397018c3b7ef402d17ec7b970b0c57ab2be1bb562c172a96b324f5a8a4542c02bdef51b108f4c03fa174a0ef43b1de3e2bd61486575433b4de862e07fa60565ab01c4eb8e26481c0cfe104a0f0dde5b240df17aa624de0db77c11c6805bbb27aa70762bd0a76a5f5393c10eb6d2bd6045e998106f059b126f08ad303b9fe7bb9e082cd4003f8ab5813f8dfbf8ec0ff5830270bc4fa15ccc902adbe05bb92c30940ac77b240ad6f7d30d787015bdcb605a0843b9acd4cac349b9d5bd3767ac5f8768b68ba8793889cd0387971776ae2a917a74e4d9c5ebd383557247c06c0cc0d40009c0230c53d003a02a0daa80e3f46ba396461cb4c186b1e4d970316bfdd5d0e3e9a27fbda9a8b6ae77a4d8d9e39380e4f70d801555ab17ecc53d1bc7f6715871a0eac2b631cafbcad62a5146b1dc6ed9d13e3addef5f26ebfb3ba833379462aef7b29bade35ef7478bf46357ac5ca9524bd75f3e0f57b485829cd1aafa7baef5f73a3a77aef8e7785841b70375e56f19966f57717af37602155f4de6e90e2ee37bcf36c3cccabf21ab52107eeb75b8461408d66b3237cbb3b7cbb3b1bb0f88a9532cd869caf4a78dd1d79626448afbc8c84bba158a5f5ce8b570c03aa6fb768eb9b1e398261408d7e07c3801aed2e6e62c4c78f2879ab42bf3384b7bb186734a4947734a6ab6b42ebdd14af77df24e7c54dce8b8f1c19d9d808e3f508a886d1c9274152c6261a347d71a732e577bea988a62b54a6fc89fe0b53c8274152fe5cef92ba94936c15ebf293d9ec6829ab4d2d607d53519cbe4dd2f406dd54d40a1a27ad7871c7baacad38b9bb1529a515551ea2418c93af83d7ac937d4fbd9b070d4dee427ca40189933bab4f6638e38ef49b878a7e91f7e29ea637680627728626395d9a6194c1cba72a910cbbbbb4e2f386eacfeace97327c0fe3f61759f1b9e618cc78fa4bd8f639ef189858f3fb788c7484d31777e4c8d6185d336dc5b89d63181dc330a607ed4c334ee315b769307871180680ee94a7a3e94bc3adf98811ac438f8e944cf7c9efe053e565209d5ea5bcee7657d3f2c678b5e9f26a13b35554d7db82d4ab913a6b46952e0e23695437f69078af86e949e7f4372fbf7a5fdd49a2e497728a917ef39098762bde37651ae24e32e190275ebab87d66290c792e352d4d712777ceebf7907ee32510949e76bdcdbbadf7c96c62ada48554aab9933a5749e58e844f1e185207af36dece776a3595a735ca93e52dfb739fd97a8721cf8d45e9cb5dc3dd501cd2df56d838f8fcf4a25bc5da4c52cf91eea2bbaa767227314f5dcaa996e2ee7ea6b9c999669c96b993b5254cf749ed310c18afb6150d8fe6e980d62fee647a377aa2bc2a68fa78b5d196b07ac4888957d8f192727602349bad48dcd34bdb619cb4e25431b32f3e69b42a5e90681beb2a557055664ec3e75d6f3b1e86720a41d16ad617af2b466d4249667672a22a8621af367dbbe992bb6e2625fa7653db89315e6dbb0ff8fff4e01dd1b3d99111a60ca46f9a5e932903ed7c3c4d2f6da7ba790c6ea34bd98b128a4f9abe394bdee1cc7d91f2bb933af4358f8d7ed6bf8395d0f437d6dfc329a0e9e12428ea93bbeee1a4cf43aa1632aba927117a34bd1735b3d6f7f3902de775a77b3885d94c1da28eeedec349b48db5ce0ad7f1a043a243a6f9a62a11a953a560c8133d7bd2145d4a5303ac39e8888e8fcf8f90203622bdd75bf43b255e7390cc88895748913899e2f812569334e07ee25e9a44c5c96d629b0d3f4eba1b4d0a2117c6dd735bc8dccec9d2c75c0ed4033715d5e85e92bd0de955f48f8cac7909ca84cdbc6af451195953316ea9f66bb6e1cce88c8380bb3baee64e06e186e09c54efdb727a555497d5dbd3cdc9dd5d976f406ea0ad02b61aa951ad66f486945e15eb74d9b41971d256038721719a3376c254ce3463d979858a93ee36fa9dcf9b94e6a2c7b87d36b9936bb6ad17eb53e6ee260dc8a277626e71d3893ba9519e8a6e359b9be90813564d969358b7d125acf33b324d5bc22ad21352961d5213249c1b062305f1f162e919ba3527ef10772795f85833e31a4db3c6ebd5b52eeeb51c72ad89bbbf7a4d1a1a7dcf34d3bad0a6782f5dc2ea6bf4a4ed00a00500c8e24eeaf4d2ddeee6ad319aaef7f2d852acd3145dd228008a8e0080e34e2e65f5bc39a5328335e396a828e1a4be4b3ae3a8f4a8c8dcc9cd84d5acaae82fa5d8e8c95efa3b698ab57a971e2f51b1ee679acf344f0133058bbbbbbe7b4a137c5e5dde53de498dbe80e605302bbea939fdacbee034f3f105254ed6f09acd9a8ade6ab57d31eee8051c77d285319ede9db70b5a5cdfa5231770eb0ec5e915ab4b442e8c2d807115d5e9d0d7e8ceebe3f4b6d0e4b87d9eb705297a09ab2d7c29c58c1427f78dae37e5698d332ffe6c4a29f2fbc34729e33d59e8e23c3d78cdba5ff3633597230b4c7edf965958018dbbaf00c69d5479b79b8a9a2b60214f9c9ae50a45eee4895e1d15fd5eaae697952ba89e6e2a6acbff187714450b79aaf833d27d8d9651a4dc5474b7bbe98a95725eda9f77942793f4ddbfde94671e818172b44352ca037a5bfe233e1e153183d5ef5d1d93bfa1464f46bbad625defeed26ba246a3fbc6db44d7ad97f808e5c9555ece457f622859dcdd64c23a740df2114a13c7b6fb6b8632ea3ca402181545d3ddeeaae0a4962ad44615be088dbb93e855baff597dbcdea22eeeeeba8849ebbbd317d75b517d8f8a9ab83bd94b6f2a9ad52742837b97080b22a7ab371356b12e9b32a21ab935ca847578a3ff187744e4e3be0e89d1c129d2d52aeff19a6d7895fd8966a5a12ee48971e67d9c5e3d54e4ee3bdeba66f3358f9bee92d6bc3484e309186ce675a779b8adb3714f766674c5bbd7284eafd1e33507bde665acdeaddead55a127473c91e2a489de727a5f9feaa7f78993334eaa4b594dea6d2760d49cb4e6a5cf2a121f9d3491371555ffb78ae6dde8a489c3806edcfb9d4219ac79a02756d1bbd56cde5434495fdd3fc61dd196b07a0a25e97b94a4ef4ed1adf2548c5b3ad76c6228a90e6f14afd9dc5909dd1d39326223da2a2febee92de46d3aba236cd747538e59d18671a9d37a7496b5e3a85a09c280d05332a0f052f3414b2a0b043a189bba757d35078341bddeb0db3f24ca12d2495da464fbc9a34ac2fce5c793ba1267d714adb580b4911f2e1d1849a8c21a9d49a3c3949a5d6248b799becdcd7bc358aa3edf27a36294a73de359179efa6180a36b1a95ea5f3e29397d2763a1e122dbd4b58c56b9aa2482b2e5233bad7bccbeb8e9694f2908ed0ce4c53d1f3e294965e7ca278cd266deb15b5d1362fa729d649664e816838bdfa54314dcde80daf78cd41679a354de3359ba78a4ff4eef0be4ae8ba3bb2db285092be4ff09a83b49ad1cd4342d7ad6693a6c35bf734c6bdbbc33af4089bea4d2f1036d175a779fb6ea32035a3e94daf6ecdea516fcdfb9eead5e1f46d329b1d9db3d951b6a94249ce9c3bdeaca6048c598e4a9430edee52a9a4c8f16e7771cfa3e6578994f8f8ab651231b795b7fb9b8a62a4d7e5f5f38a61e051935cd15d15c8c724457c0cdac2ddc9357f6dcd41b5bf99a812f3ae9b097fdebf24084c1013b984d553bd2bcfc4786963a4c7fae2d5c4275eca696ae29d1e8386e04ef011880678a33aef74d97c1e35ab27c6276aa23ca3239897de157478a33d9c023eb379a48753e8e124ddc349483c0dd44452a969dae66520294e52a9697cbb3bdaee621c6d630d24a301b96fac6df8588a29bbe0339bb48d7589c5492ab5a4f5eaf05a263949a5c684daf0baa3a5299aa464ab58091f39dae58df5c515617d71bbbb6f92bbefa9b78a5113b5d9785aafd854b3ba555e0eb261287755824d350fcd6647a7d050d29a97365651a09d2a9a44c3b7f5ee35e7ee9a555447a3a9a80eebaeba74d713b7d125da4673e9d59952b24d4569d9a60a6df52eadf888ceeff8f8c1936ddd556938e59d5987cf1c84917af7c98a4f156b253845e2e524697acd534553c0bbdea66118504d63ba6b4657bc5521ac84de98ae8ec674751b2799e8d64c5707e487b775d6d1f6a5e94ca6ad6274879a785d7284b76ead0a1931f10a3e948ce84c29b3d90f2575e7bcd2f0be5b6fde0ea72f6dab78bdbb245be31b7a0ead1849c7538f283162e215b4896a155d37136eb2e2f3621c133ed5234378464cbcc2295452f1f1838a8f8f2f3284f7827b05dc9de6a30949e8953c5394e7d383f4c1936d2aca83d36bea13ab3754eb8bdbb7e8888ecc88ce94a231b611cd665be37dd3d94c6732615d36372fd3d2f49aabce94b2e675c54378b4dd4f101f4d70fae2684c5787d3b789ce9472a2b49b8af6eeee143a51dad6d93c424b2f6f9bd7080ed6a137358b3c794d674a39556ca47978dbb26cc54baf315e52448b935bc5ba2c928be064b546c34977d7fea6a249b777de53bd33317ea1cc1c301b2282c6c9cdcb7faef977f635d174c73bffa21bfd9d152b61557731d2f7ee258273772240dc497d97940ce94111642f4d7936adb1699efae27e886dc828e48b93351d28bf730afd8eac8657debeea0dd57fffa6a24a1767aa3c1befdc5fa496a637a8f6f7f356d1577942761082c2f8e3853ba9fbfb6bfe37d17d7579f3ae7a1f77e3e515b71f23e95ea31877f473c50f104e6abdcbfbe7feb89c4cd36bfe8de26310050469e2fb12f908e48c935af3feb2e0ee447c04420490253fba487927def876f2743c1dca747517b77fc5fbe2f5f61add69f454d2a87a55f881811f352797b0faebbeeb0dd52de5d777e9fe7971e58ff731021f4b3e7818f9d8438a1e4d18ab18e973be7d2f45ba4879ddbd4655acb4e2ad5e75c54af9f6e9e5a9f7c99327deedf27a3e46fa3445977a2912aa75de3dc66dcdcb2bbea9f7d4d9bc8c75e8cefbd78caebbf3e2f5a6de57d1bf3295f71a7d8de28ec85eaa791955c2ebeed7d7e8edae79ebfc4c7cecb1c3dd57f0d1278cdea84ea32a5a921bfd13af59cd38bc74e2adb1be381f207ca75ef3a63b5d36f2a18d3ead1e25dc4935ef78f74ff562a4bc777e67c5fba67f57fc5a45af0ee38e9ec48f715be37cae185d31afca8995506ce2557f6fc5bc2a7fe26de21d9312771fe263cfedb9630fcec94b4d9d1ed26375cd48b2dfa83e22f5c5a138532dc92777df9f79c82c8e5753cd268f9a55528a93a38f3c4fbcd7e5d5767be7c56b7a4d15d53c35f72433a77ac53a9e56b3f9698a6efd78bd27c6a6c9d32aef31ee68e451fd9a6d3714af58296bd4866e159fe8ab5be565d3bc4d7cdcf1429e78e375b7e2ada23845aa3dc66d8c3b1a779a5454b7e28dcfd73ca0f8b8f3eef8558c911e2b5ddceb237737c1c712c4b8df7dcfcf3b8dd7359b8f713bc9cc69399680e5c47bc54a2a7ae21355caebee6bb5a3b18421ee58b7e67dd18daa28ce44714b7fa277c7ab8257157c2441ccb6a1a7de5987d7df6bdeed783a9fbf23444217f2f17a7fab583f46226187374e77ba6caae8dbf29320299f5e333b2101889a5f279939fd9e7a759ff37e7d714724e4e834e1eee4463f6f5bfede5dfaacfe7d8dee5e9ade15abf8f63b3845ba38f3e255e5bdbe4b47a34e938e8f3b1236ef4ebf2d7f9279d3bfaf7717b7e22252455fe7a6a29b97d7c76d7489c4242a7bccd31ac5baac5fdfa5c72bc61dc9d03879aabc6cfb139b2a5eb10daf8f7147b230eee44d454f156b15bda12bd128d3e2e48a778adaf43fc61dc99a906a5ef12e679c4697be7771fbd3f4ca5e5dca2b5697f263dc91bb3ff191c719772755f4e24c8cdb1a631b5e6f6ae235e34cf5f2e035888713230f9ebb933a4f82a4bc2dff9f7845353e316ebf8afe89b5c6eb8e09abd7fc8d3ed6bc6b62a4276f2496fd8935ef31d2efac9aff2a56426f8f7147478ee8c8d29c914e7c1e3992a63708ebd0adf2a0cc66476ea84dcd41afef1f1931a233a5e0dbd51aeb8c3065a0233a538a11a4ded5f9f8c1d3e18dd230b6f5d68b9aa80dab1869a33ad4096d89858dbba17889c6747547ca234ed09df29e9c7805234c19686b7c8e3b469537829911bcec35ef708af7084d4e52a9f56ce8ce2a0d23a1aba991787a1ca1c94e79d786cf117056ac44d3994c3acce85033aa55bcd33c4dc3e69a6d3ab2b83b49a576aa588f3a6a24959ade58eb4b5bb14dab77dd34acb4628d57da8937aa435377c7f151c7094e52a9e1cd3331139ecd364ed35b547be13136baa1e9c530a07af372ef3af1334d354fe9521e7a6882f594167b8a3636e53556bcb130acca4728c44120c21ba94fa51243d05a0fe123fd73ab427882f55411d16b50d6adb5a208e46b7d6ead05bf26d6a6ec672d8882e1b39f4d7d3750ac45d9947ff645821f0a2563bd0dbf2f0cfb6f0fe9777476e8963d0ca8e6e9a5eb4d519dca5b79b67acd5a7a75ab5633ba43f7dff47e0d635badd6db68ed5754e71cdba1fbd3cbdb2baa147bbc793b5d366be925aaad184d77d8f6e59f423bddda84478475d9e8c4414aa23ca9ef8adeddef9c06ad908bce34f39032baa41f2fa978e3f5aae8639cf91a2badd8e8f54ade509bc9349ba959a7cb264dd366339dc984830738b8c021c54e89e3c94f211b1c3b5c74051b1c52dc8d6c708ce0e387dfd881fbcf94d07d8774b944af64cf9a6d6c6ce1b3ad5752cda8a6d9d8f8b1b151c3fd67a78a26ad58f356bce319e952488d4d8d304521d8d4b8e2ee77cdbf834d8d21ae81b0c941e307c8f1429efbe61c3956426d7246c8797d23adf17a9e25efc46a14ff7a2128c0860693fb0935d84dcdebd2ff8e0d0d2a36229871d546842bae57f287528fb9ea23dc5d6525603444247414341405059a94f249567face063059d29e5c4b47336b3c1a1014e163a93496732f1f4f4e86c53511eb737fac6c4e9db44c96c66a2b3d94eafab92242225bbbb2ed9cc30e23fdbdd75e9f39e318263dbd527d6b74863bc448da2027a973c39ea9d46bbdd5d8fb48a93ee11d62b3e7b3674a877dead62a3d20684194070e2a78ab54d8c108ed2f406698c83761ec23a8a2ab4f35092999d6cfc64e7218df112a3ad93ccbc949d1c6d1ed169649487ce0b74813094dedee994e0140915da7928094e91ae1ae5c44b4e151b45d1994ca33ae276f0aeb7752613ed542f005e505e29d8bc8acc5eff4e3e6d5c56d8b85260e3728203ae0cb83fd389f260ac77fe777e8747c33bab362e293f1b800580bbe3dc86b5029bd6187d3bdf86e2b4ce64e2b1691dd12b69fe903f784c7c6693c76615c666f5c566f5c5fd67ee2e9ac0663564c51bed29a148b251d5524fb8bb13b75185d6004014e0071fb0f46091f0e00748bdfb66c23c2834fad38bf55f28bc724952ba4b5a5971ab58e944f30a2b4ed31b04c54684011636cec5461463238ac046ec808d5801d101ee8e721b3101eeae33a5dc33cd4d6c44295edbbc5d0d477177286e13fec071367796d8841ab009b1b8fb5677cc598feed19a09d3eecabb3a93c9a60a9577e5959b49c95d79a5ce94a233a50431b9db252577cb73b75bafeeb68addd96c55076ddc8cbb8e15b8bbb5712a7c055c309942034b4ef8c0dd3f24d4846c0317144006ee0eb6b08372840a64a4c181bb875b1a604411084c8011e2eef6841f5e20c22280047c7177abc30c70e8aca29123dcfd73a2e48417e8c043871db83b38a38730351022cb1714b83bea00064063a5987d81c4ddbf3239f041062f84708110770f11504b0d8123410e0b77b75220f970620a01aa5cc193cd6ce69566de9577c92764ad96b7baaf8a52a969a3da0b8fe3a16ab47637268d6a78cd41e49324ba2bd3f4063921376fa7a2358c97e423166abcdde6615bb6a92879b16d67e7d15d59846db4bc69348c6dbd35dd4c3c744762dc1159b3e5c74c3e08dd41a1d1c835db1e2fa5280fe36a37e8c9156fdbed768fc81e9aee746bb6ad783784d317a76b35adae5869e5e9c74957a7ae17a739ef3e292ba9286e63a6bd62dc4697f0de29efeee833c5e8fd33ab454faebc53c539157a7247a7e8b57dfe6de275cd429bb7fb53bd69cab33dc66d7caa3df5be9a758ec46badf6770bad58ffa9a2e80f1119a1500b7a7457de95579277e5ddcf5a6313ab2f54543e6de7549327d6bc5d6feff4d227efca2b7fcdb614e53dbabb5f034a32730a54d35a9379f7d6ab442ea1913babbf668dd5bb2b1fdd952c1091e8eefe8a93d6bc442357bc6db6fcba875320d19dd19378d7db25fcd25dd13409b97bfc4a9c944146afa13c7953d175ebaf0db16d5eed49fc1755fa13eb1e4ec21a6f267f62ac67f018b002780c980c1e037686108324e331480c780cb2c963902d780cf2048f41e2f01824ca63f044e1317826e03178862881c73bccbb9c1fea5f1412eb9c9acfb431e6ddfe54b3f9bb9c5316562c72ab184dcdff7d97ac58a456f16ea7cbe65db34db57d7a6f0b549632d2fda3b4060d771cb8ddb141d6076e51ee57b88f200b1b77ab42dea8bb894383f7bb6f926f48d147db8208ff9d3cb461f868709752c50eff7cab4011918bc0dd0e3d717729ee4e021940619d38298f86885c108242d464ab190674cdb8da93284334254c4a2323254f6849a0942c1445a149299fd4462a9e626085bbd3620084bb4e5aaf0e67aa18e955de5a44071d79a6ab8b01ce1dabf91603233e3b314ea32ada83e13a89c1eb8c8ece9472e27d55bcafa9e6a0df5995fd9b799add54546b5437bb42359a71baa148332dc268c1a5c8dd79cc90e03f53e1c9e7fd26931658b4b842ea9bd6fd8e16ef6760f0a4c40b3008000c64b8a928cf33192272f24444473fcbf15460b0020c808cb87f8ea7f2020c4618b04e3079be85a3a2274a7e9643afa4d6994c3c3c3c3bdd0b5078419217007192243fc793178ceeeeee281fcb70a145193079ffcecf767e46d3e2ee659cca6cff59c62dfd0ead8c0aeefeb3cdcb65729481e13fdb17b7f43b3f53519abae2bdbbe7a5f5cc2cd064f1e4a7cab3e195882c7cc842e73fdb4c78e77fe7673d1ed26ca6b78ad5bcd3e5a09b8aea287a25371366c2b31946d74d060a7fbc51b7f8c4559e5cef9a6d1add59ad562b967a817a7b454fa22f4118a385d42ade65f4ae4914900413187077001656e8955cb1ee9feac56af66f96c338f39a4e9040cc151685990c1caf678ae24ccb85bbab3e5eb1c55de3db897b2a8a33af8ea7476887b756d1b7d9f22ea7aec0598971b28202eeaed1234f8cfcdef77b487a257526538fce64ea59f14d456f776b2b46f79f651b2c070ef691054c3889965e33f320e07e843b0f6e9bfc5085170742f6207bf0a437afa8928a2d13bbe4c49ba7db5d8c9bf18451a8885141041531b8ffeccc3a98d7c34932312cf87d93be8793689b09abfb076274b84f21859379ab175744a3d9599af4ba5b22eeaeb243dcddad1077fb638110e16e7fb85b1feeb687bbf571b73dee9674b73cee76c796e06e4970b73aee56e66e79b8db1dee76843445ee442b5880efa056fb53456d5687bbcde16e63ee16e66edfdde270b737dcad0d775bc3dde6b85b1aee56041b82bbbd71b733dcad0c770b82bb8de16e6ddcede86e6beccbb6eccaddaadc6dcadda2dcade86e43fbb95beb6e3d4dcdddd4c01738150c719cbe3810b68f5228a157b2470a0290dbbc3b5d0eda2abefb9ed9a60a414982f112a38d356d36a39df8c4d9a6f1aeb7b19a878c76ce50cea50be568c5451ad5f5981ad5cd663a4d79eede0277bfc2ddad707716a8aaa042cc142b4841991370c16d74bd3d7a974311e8c892f2cba043fb1d2ddb21c3efc87a3889d643a2d17aeb555124526b8dd79b8aa24c30e1579e191e21c6c234e1ee4298edee5975f71beea24f1812dc7756b78a8d344e52ae791b2d216b77dff331367ab2866b6fcbbabc35cffcf2359a04e336baae58290749593a3ad56bcba6cacbaaba54f4240ad2636c43537c3ed61769b7cd6b53b18ea26e92d4e8ba5ef3b58a62a5abff54ef79737a31527e7d97eefaba14af38bdbb2ad2fdacd3fb1afd9d9d23a4fb78a7f7c98d358adbe86bf5625d7a57acc3b81daa3379675e773b68090fd55ea8615d36aa5d8de657cb276b1806f484b7a12c3c89d1756353cd5ba3546ab517781bebacbe0dfd8b5373ab9857056b359b9faf89aa3c9d2e9b2bbccee61256779aa62815254988826633ddc349345a9ae2a59d7e81ca0be89aa6e8cef3e41bef75cefa75f9a4b973f5355f157a526f15bd26de69bc2e6155477932a7f7b1de619c74a618b51951a925e5dc44f3b48ab59a836a2f3cd63c4859c954af3ed7bca4eeb069de57efa96253e3f39dfca94629cf9d8782b6ce4dca9d876e2850ce473da0131769220fe87077d80978df6d7453d1ad5e259c62289fd51a2dc5aa7a71266de39b45c2dd55309ef886f5ab3c8b03ebad5809bf8ae2f5c458f54187a723772328f8768b94101591bdb4a6f16ca679b987752fc5fbead08dde707aaaf8757aea7d1b2a7ba313f754ac847f47c5eb3555a227d56bf24c1d9ddead492a351b918a9d30dd27b517be87d44b37ee86a6fa359a5edd8a62dcfe1d8d6140f50e9f9ff3edcbd7a1f8767730a0faea6e4b3a3c6a566545518e585085cea23c846fb7280f41d979880933414c3ca16ad24d45a130d1e4ee68edbcb80936aa31e1a477de14a7f1ba840911dc7db64416773cb4048ec69978f736bade5d8f2e9b24120fb7d15b4fcf4ceff6c6fdbebfeebec889577cbba1ebe629a15ac5367cfe9d80930f35f9519acd34564237aa43d71d6d85136f8dea15173d69cbffe93d71efbc188a4ea266f41674a2b74887b790cabb61201d7ad320232527c6e9350ac2e77d72064149732e3af12974e2a213af278672167979b9bb6f152b65e00a77d7f154fcb5da63dc5106767072af78f75bbde87a95febe0e4ad31b446acd749f3c79f24f21f2c43b173d79e23fd7bb84d74f7f4d6f2aaab5be1bdf6c399f8f9774549eec49cddbea5df12eafbb9d8d4f249e4e536c6a54f7b6fcba67de1b4e75b42d5f5d92be5bf6eb895774c7a4a44cef12569be4a13445b791909ad120ac2f76a2a1f4d4fb24e7a39c241fdd5414b7f3d0a94629771ec23af4e8a6e69585cd233ad36ca4463957ac4494875838d1bc0293925eba5e25785f27391fedac8416ed3c1445af640f4e5f9cca9bcd92f83226b144121070f7dacf6afb0631f998040df79fe5fd429857055579b3596f97d7ad62da5db78ace94649baabbcd667a33615a97d13546c91a4dcd35acc92c28b0615e468a14b87bc9749fcc66475ae374633d813324bea93bab37a1bbde957727b0c404b2b89b2a6fddbfa331bab54ca085dacea951502daf1886ac5125f4fcfbf84c79667a4d2d811280187077177ce4e2c589ab7c91bbef99774e455ff7ee527a7577bd3b213f7ef440754ff3f4e81e2e2e18b9a85c00407ede8f71db86cfcfea121efa076059c099bde6271ad558c54c924c8c0b3acab8cd7357de9dcdeecabb3c12b8e2ee190722b24873def5f420f1744f8f1f3e3d7efc0009f2e307c88f203e4386fcf8fce8d1a379be1e4684fbde50a56bf1d012564504cca04ed9d931e18809afc374a2b26dc34e665056a26dc34efeffd529313cd389d2f0edc4b424f3aefb71e6be3a940ab5421179c204235fc2084c38f22a4e69db8653da99669107e015a1152111a27baac6d6e79b6082b96aa4232ee23c600777c767567fa6e29fa944f4781e5b8af59b60c293f876622d3db8fb0b3e1611466de14828a82c2a83dec8339d68cdc7224cf0deba55dcb3bbba1e8cd78dd4a3d36c9a5bc54ae756b1126dab58098947dbe94c26ad69fa44f30ab3198dc6a2695ecad3f14cda91d98c867577b5ad3829af40bd8da6e88e9244674ac13ccc5361a733a5688d8d708a8d82f44e77f791df3132b2e625697a83d21b349bb166335a36691a9f34159f278aa3a1bb4bdbe9d9cc96623d9b1d31d1148957b4db95f96836d3f1fafe5d79a591bbf26e15dd7904a76f1315bdb8201d4fa5d1860843ee21b63879964334b97f0e31fe9a45ccf76efaaf9659b09cea5dcf2c45bedb098166eb8c13628b932a6fe569219ae88d22a1b8bcee845069340f0511c68368dadd54b40ce2887c7c66f3f3d018c40f0364b17e4697347a5b6ffa483945fa148d82578c53858a0c80c50d40dbd80032f773bd4b3b1eed54b1a6e593a781d80149a5463b310ce89a719b7769dbbc2a4e3231cec4673693d6ab5bf1be4bb49d6ec51d6982d31747bbebdd1d392fc695994994d92c3d2fc65d5abed14ea013eb28b87da24ba77a916827d63c20641480034ed6326ea9f63da41d8c6d5fdba1bb66cbbf53c3d846ab7da9f54d83b4bea989b18d965e8c6d34cdcb9d17631b0deb8b84d323478c60bc4408631b4dcda8e6a5a68aeed07daa1989e9ea684b582d00ce0f66dcfd3cef0f4f5b456958e9e2f4072cfad27ea8fde043fbc187309e534dc349d78705d036d61a3dd34c3bd58c443b51daf5e1d5fb3d242c66dc3596a7212c58766a06c252446279f5e0c5c98d75efea885ef770127aea1eb2e45c0f3d34f11e9e07309ac74ec20316e7a1b6716f051e64d80901c4787a7955f06bf424c0162709c044802202bcef7066872c3be07cc56aca5352855edd41459796f0900e60764e759a66b3b7e399667e9caa19e97be6524e8374c8e2a40e498e9eea35ff2e615587213aa8683a9369006206a0c50790d270fae2062023ef7a7748a8fe5bf4044a93574b01a0d1f1345e0510aa70a8b48f6ce6a91c754c2167444400000000531200303024168e476422a964979450de011400057fba62804c9e09a328c7510a298308310600000000000024002000c46f68c2a55f89d857e60a1701147a994ee1cc68a82455b7f3c4f0d547db0abcc34e36a8a3a184019499de755e90328b7a2525d0ab37e239e11c63be1c93c7f97b8a99d83230032c954c5edb063bdcae7e7a77d49428ff011455ca867bf376ecb90252be9174f1e4bd4405fa901cbde2798706c088554bd3e89bb87841118a46526ded76eba436312d3646c62ffacb51c586f356591342d78c49a9c111d4ca9c25c09b97c121dc452ca3cf74b2fa8bd22877d81a4976d89e1a6d46e7b4daafd949c1d3cb3dadb6112108bad5dd6ed13a5bbbbeb2da634bd5d63e1218d2a1b5c8995aa8a199783a93fb022135ce5134a80aa94098ddf4a6195be2dc6a9e24a17acfe2279423c60066c22fe6af150fe05d11e893537a1c28756a66cff6c4a6b9acda5c2ce7e6b4274e17061277f7f194ecb69daafbb5b007d4142c56feb7d35da8dbbdf12dacb687a17766ff0b77bf26da795eb50ebbb2b18a8af3a1d39847603de219c06021bf24383e942395487d35a181bc73b7cef8f584f0cfe8841d0a477e437a92cc612e22fbcd8c2fbdacf236787fd3737e6ae4c846529b398a044bf22e61d2515b9d7101d4640fb0b23541990b8077e42de4d3b24ab04473f1af98080b859abcc824f7d01e388bccc0c3f3130759d5d1587fb7dfdf406e18b94de971236793c7bd98cde49f59de8a065da070f58293960816d33c05145444c6d39f5979710227f70d7512e4fdb3031930bcbe4c203cf8d9e65ae52caf7bebefd0fcd8e9d7dafeb3a9911af37d19f8623b607a3e455624c835a5d57582bafbdf0b65b0081d20d89e1f1527297e5454b76658fc95e8c05791a2292a9e56537fb2b2989a31df64625aff7b3b9a547200fd843e994c84c2a8bc74f3a14d7f2dec77fd66f6b5043f1a35f95c92679aff5f72f5e02ca8ee809d497ad7591a1308e55a753c6a801876766932129e6107f7d20dc169f335100902f817caf2d5358992edf1eaf6e037089cb36da604c386f476577cb9e07ae63e8553fbd6cb37fb6e2051a22e95c4e4cd2af5c765f2fce8771808ea860bd02eb43bc3897debae6c7a0530fe2f29a61868c1cdd13203e32ad4de4d51bdb2d157cc1b7195a7e266e8320c9fa768447f01827168041569911adc685aa41b1a8c0edc9b820420d7b3eba03fbb09cdbba694ebbc6a087fc489251381d65489e93cf2687a8c7c886a59a84d7b1bc343c60ecf9ca2a72cfc7e7f20b353dcf2a3dbd48c37682f99b34e8c6a9cdc795d0f9e229921dac02506bde615ff59d13dd8629d5b4b1fda35982920274054eb9e3a50853788b059f0522adb6ce46a8511536e47a2cba76f4c886038db79eaf7319501d31cf2886f5a58db1e9fdbb4a980f9df9516694e3ab7517b8bcd6bb90debe9dcd2fdc911c06ce4d1a7ddcc1fb6bea04bc994fdadb2e482ed254c3e6d683b10f40c9561886d42873cf684d3bf89f152e470d43e76f5429db1e31bcf5397f63a6eb2c8757c8346921ae22c5ee7aa4251186b562ac673b5d8297b95c8f67ba1b46cbc90433607bbd6ecb8ceff1170bad6f1a74a73cef83986d383eacf9faab26652cd47d5237763a447b7b19082713fb86f84a2af1ad400e64ae88c9ede01ff657cd59ab5e3bf819ad29016351d2ed226ea8060cc2b2276e842bc23faac6d354c421a06b643f0145b8e76ba7b0e9093190b1bdd57b3e0a30c8ed2827fc88e1c45de5161216f880d4e2c3a5717e98c052bb754f7cfb0f898f3d9da74c43fd8a0c1ec12920d80e2fc856bcb425896bd3d069690fb276c834ba2315e8b2dc75ea0aea7f60372b3d7ffb3cb7972ff6f0d1edc059c12179c95410be86f4cb3a4c7743e9eee6811a4bf95190485daf2c2a1eb94c5fc414067e6fa2e18fcee0567aada9f6002c5bd341fa5508ae606e845a85f7acf8a17a941bf6e1b9f0730c68259f751072bfbeb5c2631e29341f6e39ea2692712dab6bfedfb5bb2faf5e055d9b279325100ff69b5997ea857fcca026000bcf28805f8969dde763215d1cba1d460f433c175a32ec2173961259eb35b719154cb20e98129b881b29848d6b2744b8a38b61186620cfeb8fdebd4a0b7e865ffb746cf4fe459e72230fb1f963c63bb5b685e8d33b260caa66a58e9c764fc0d628dbe31c7d663e94d3f4ae62148338a6a4506412e08c1c5acbc2c79a4a0e7db23250dbc48cfaed293386635961e458d75763d2ac4cd118654f9fd4e7dae3960a801684970624096769a344817f863abd3bb9428c6a253a6ee6b62b0f7c949dfd26c1e93bad772275ed69b4f1382ebf5814b0f44989a75fe525a147a7827e90eb0e6346ba89e4180ef57a67555a759a4c2537cfa88e913c4aa40cb4bea26b2a647a66e3d234470e251407665befe16ea5d2ac35733e270e844498511ccaf03b318352c911e2f1d43295c5f86af754d6bc501a493aff822ea539c8304788f83306b9daee7125651ae446754cbac57411c3dd164052e437e577387c99d710247b54305e4f19da731ee5a6c1d1313f8b096fbff1a5a50ed9cfc817f748bd346271317c25b07d68c0923ce5083d63963beccbb89e16c04dba9f375617ac3aa64cae851c86ac07d66bf5fbe7947a20736e3da8c298e0a531fc021e286344e07a7e98975fcf7d164c2d3f0fd6d96e5f094c4a86a91d9205b67d84850c41be481219659d55080503f896f6fa086ff1f3a5aeaa4f4e87c928f6ac6c7ee7b8ac67e4de04b36ad5166464ee1b9971dd60f42b3dbaf9cafc2d57e85e4629eaf4d83447b22e2bfd8e04826be2982f26b50a36c0798ebc79cbe6adae272f8983cc8513010f8ab2551bd545259ce283a5111589a153809af45cb71f8e29981f6b167079e448620dccc7e3325433b93da502186411a50834ef916e507ce5424709288d70072000da278a238d7e82de2d96cb932a88dacd4ae3cfde4984d1b534bde51b3081dd211145e22ee3c28cba1099b0aff54d5f36f10ebc7dbfd03c57c716ecf5cd8db56c210ce8a6efe4939b71ba32cb54a86909eafded82e62acbf25bb14cd5d3bd7a1cc5d1e6d87ad620dfab2cc767ccf2cb43f829024ef95f270c4f88d3b69207d2164be6ede7807b3ccb646042e5f28e4af26ab5d9dbdc5bd48ca694c8378bf3ae523a43ce306146ddb39c03d2f6a9dd5373f589a10c5c9d74010bdeb727c85928fbea793f6792746c2925db81506f4bbe1bd874a08d7daa22d067a4c9af0d05fc0fff0f0d045ec6d3d6d937eb959e61ccdbd9f17a36cd16d02cee06dd266e2adf8a34b29c09513c4cf60aa4c2e42911689232f11d821d814798dd6354766d292c807671db6ebf194edc18695682b2fd495c3481f28671880f4c1d77c912123e2cd66f12c07bc175019f75f54695ac35232cad99e1dc09cb754563118babd346916b19fdc41eeb145fca972aef5aa7c1377792f736042aaeb8d3ecee4261def72e01a965b1e45b108637f164db3ff1ee07c4d65973ad5d69c2af179a2cad00c2424dfbd1081999b7eaa2e6fc46380b04fb33433f2ee1de0854c64e9c6f1a04a190565121f4256b11ca2852081275d7fb4eb10919a896de172282ac2e31a749bce4f8188d9fa4347341b3bbaccf066c37b321a350fecd49c3dde56323e3ab1900ce23fc12c325ba27b5c012e5a16f68b16725680d6e5ccec04a2cad5fb0f94319bf90f1cdc3c3b84e95c0213b50337ba0e730a375b8a7c99284ffe4e253d6c8c6067c8ccaa05b2e57fdc5465f1005c37f87b5e105986881d62ed263a44b56232ae0562ccf88399f18810747202a292ecba7fed7a2ac19ff15d4897d8db4f03a00b845c7638dd41bdecf8909b6c34714b7bea11e0f504e4531e7e6d4896c55bd7089277e491e4935c4c2a2e1ed7146670cde99321214d1398c2b4c5a5f7b88f86e86cd36a2b83fdfb2313100e270ff8ac5986bc172b72361590c37dedb5391076631a79f82be380216e560dbd92bb0dd38ec963288ebcaf1951366e67d44c6a24be896d3bad6c1afc4c18f2d6594924dd0f74e4cb21a5707057c671183c75c2f3e4f4e320d2a3c5bd8210dc5318c1cb6c928e32afbaa048756f816d96b185288c426f70cd7144ad68120111fe47fbf60231063a1fb23f0ca887a320dc2461915afe2fc2f5058646cdcd67da6aafad41565af4e43ae327a54d4a8c2e935ecf138d74a43fafa7a34fcf51c3e6a0f5027fd6c70d4d68c8a25a5b5421b918fea8e1c92829ac1c15bf7f3765daf1bb6d6d9a096370a41aef5d4b5355d8aafb572b9ae1b354dc77ff792624f139d3b17556fa0e325fa5dd15bd13b0127f1cf9f299eb41a9c0d4690ba43387394a555b14126970e167a26ab33e8b52213885c26cfebcbb050adbe648112ec390568784f9e90f1a842216e2b97d4b77ed91c91475ddb9bda40f71ad565320330f93db84cd563dfa3c663b37b1fafc0d7e3c225caaf4e835a8473e8b953e31c48b8232c8792b75d4714814ae6b742eb9af03a1ffb225f87078a8208806970401c09d34fe9d35f67d3f560f76fb43eab79bea0170d583b717c03450e9200e964e957d353cf9a4e16e36dc8447e64fddde47ea35f5b9b2d9a7de52e7c02cfb1da4e013e8d1044b1ab97768574150e9ae915f46559f467661c235b2bd712af12de6601fa5f2d30f133df30f92a044dc612e906f4cfec98a710c1e5cf61e961b567da900991e79977c911b03ffce9a17614a9518aa901afe0cb2a4c48024c4b8967115aa328cf3528aac59a6ac87caa68d73c640ac365f679ddfc071ad3dc067400dcc76a9ca854f16429db0e55b5fa74bcbe4b1fefdbc21997bb765e4f20882845cffd10f8be9c75224e66a8c987f1a1fcf8c05a8f75ea78daf57bd985205020bfbf6bf7018bbc523bb1408678ce320460df83a3772a613786b04d0460da7718931656235b2e64e17098f1837296274e6433246018520795d615db159767da665d3884bcde9b2c58a3517f69f6aff4be109ec118e92f679e4089db1e7b151af7cb771603abd04f91d59a026a0616c5031b7ab6d434ee73d310a4cf8f476f99e63369023c771d2c1a1962688da60ffa5a89e2bff68c45c96bea911d9cde4f0925c6f8c7e342e054480ec8e1c82e2f04bf14891cb445e7aef0ffbeb3cd346c3f79d8d56de249214621918cb1d26ee0709084440f1273c9e60cb2f8047e8fac99ff25a6b9b7bc6593af621490836d106fd024b9b697900fe07a17ece4489f73e4d4bdecc6a07050224ee0574f42ee29293198865e731ec94768dbff3a3ebb0defe06ac434b12783b6dae5594f55e58c7d1f93deb1ae5759a11a8e5cec6e3527ef389292e0a34b67f3d3119157577cc39c706c47ac3155810771462b713ebc4e613ebe8d751e2bab82c41c5ac7243c67bf8f29950790d4ca390672d13647a3ebfe27e7009327847496093db4e65e513567bace855bd4b6d0e3df122309ddd5d2b76da0532dd7da49d7086f2d03d8c7c35b20e333d4949d780af4a72ec72b2b9f3aec9b210096e1988c96694f9bf358c8f98f359753e6b9e3500d437402f0a833e74c4aec0061d9229e4431f818ab6075740135e2f487fc169884b2a1ef9517b55db869cdc76bbb59ce1e449ecaa612fc685d0d6b4508a30ffce0eb2a0b3e26322658b6064d85d2ff9c0935a2907533b49b913a42ff2a1cda7cfbeda9570ea8194e6620a7ae90db2e4c98cf3b82741a47292aac0cc4ad9bc7388da07b9c3a06a517c675e97738abc7fb9b6968f6d2afc084150d763cd4157aaa115deaddec2e39d8435aabdd239ac85f03a4c649ddd9bb6fd88b0bc41568e0267f85c903a991fde0244126abc3a04616f7c8c052a279559eeb9f25a97c7d6628a798a6bd24eb895f5d8a7633948f821043a0ff798064e33b09fab50113c7747ff7accfdead24ab7f19667bc1762e8c2cd371ce8069b7c7a7a476f1c99d3834f0d6684eb628c75b07454c72e9042f8d780ef15c7b4761dddf623390adb54e3e2dce940f43ba1ff155eb7b472014539a65f88b30a108d548c116114a0877c5c7654f503922f6af29befe849c35ee4a0e32be1abfc4874931a0d005717759c8eababf165037807b6f6eb003f06add586bf1eccf1f9380f42a7f3791a95a7f4ed69ea8ea8bd4756d90753d0acab71997be117809810d6ad80b064fd2ec26e49ca74b776078b602550188eefa594f84c64369fdfbcb5e22e6bf5a7dfdb547c3e2e6783eaa6a6a11ae9cf060ecf76a07899d463d2f8266e85727c5b3ce3fc8870f26ba5361d61e6bebf146c9a33aefd2b3c528e06c739284e1d0fdc9d7e6500b1273cc3ea30ee0b97fb2dc20e5e6f0faead03e6ebd99d5e4b1d7eb77bd43e428cf28f970795ba15844487e0330b0bd597a73fd21b7570c9b242b44e359d20634c037ad4269a8bccc777bded657cefcdd0abcebdbb20162c4a24b2fcc5204a5a13c42f851972e127aeeafcd912dea4d78aaa3d69e2705a8d5a6296db42f95118f646dc35a9c1b1426413552a4b8121fc86902dd0f493d731fb72e8b1c6a9038c049c1a7c08d41284a7091ea0303aef7c84feecd3752023e06f6a41bf5ad36761deec2a02793f7def68a11149825cc70880236665280d844e23eaf1092017b48f2464d7358cbe41dc8ce43f40657ba99f64f9ac337db48191b1d5445a419f5370bca7110469387902d57c7c60a5d15317d04d945327e5c0b09a86381e988409c70c3f7e695fb11ceb48cb26bf8b5b99462acaa29e6e587adf052132249909e2e39a54d6ff56f7c615b9677e29f5154e2440f5de7528b3598f1f9fbf5c409971682eacf24f2a2e018d9e0f9c835ecf073f3709758d854f06967f3fda9955cdb86205ecccd0e1aae91e2a30416c74348149e604d5ae49cdedfb22631b01725303775037ed33e89182c5d214942030b8ad6d4addad9feaf3a314104ee3ced07cb0cd1c1139fcffc3b149ed0245b5e686a7161e2e0a49c24f64f486eb5b89009d9a18458d2562fb67a5620162dde21f1b24ecd3c2dc992cf6f498d8d4f2e677f5825f825e664a209744ed8bbf5807b5e5c60e03c28eb73703a817ca39a201832adcd5f0a883a6106d5571a0a0436d8a485d46034ba13096129cf18442954b80089b7018993e989d57c9d2855836868ba21b2cb04163a7dc48dc0cd3a4d415bec9e2a51a67ce30f62bf602b150f992033be2b04d60a52599382929a146d0027d129215297431043d2e5dd3154e13a87d7b9a045cdb87b66c6cdd9f2f69e4921f4e99031823dc9e9b9544b9a3a2c452212834cb725f756d76a5c1769aae1dd9623e7ce80e9a1b900487a6e7b368895640b6500a9b727ba88e5a0f63764b10ae3fed977eac7ff50dcfe7c776e5f0d9a11c10f4983a85b2f2b2de57725f23371b8b83ac5daf3ce9f2222f5bd5d777bb19679c1d27f191b36ee31b8d2714a0ed0719f28c614f6ae8e23e3928a87a26c118b49f48f06cd44dad6cadf767cb4772f30bead9994f7e975f6a1b222c42d6439da07e3f85fd848c5bf0f551a74e691059ab41dfea8b1a93b3216cdb8da9a5f0097f1eb58eb4c2acdf806e6700cfba5a9e2069eed5141c8a848488f1e0ba1272fd1cf679ab356065c31b2f4286d821e2f93de3288d7495adc3626c5c57d5933917092cdcc645ef5e42b1cb0da8765e8e130bd4f182a52b3ba6650055ba6c5958431ea3cdc4ac05d7dea73adc5e101cdde389e8d8e0ec609e487a5befad63d05ee1d96e1616eb368217e7556a07d3350c4169767151cc8f2d2eaa499b9b7d1c07edefc54cab9d216157a005f2dca8e62cb8aeaeaf2b005675f5f7d752c59075ada53abe562ea5bf71aaa7a838672fe8c1bba664799d9299a3fb8a16e21eb4ebd3470b390ea5c80c5b0a0122f3eeddcb64c38022cc404588efbe53a9b4c84869a13dbccea72fdb4eebe37d01b50362ebce7d8de6bec352ff461b640615cf1c101f3986f37b81646bc93feb94cae89fd6280dbc4a5fb2435d3e04a57e0c8b4b590ab7facc06e413927bfe7292d8351010433f22282e3a97c345c2b39532b1ff2fa4045e426b6468d48825afdded61b6b116480fde94fec1f001f1f602fadb458d1409433b10c19a534bc139dedc5bef51f8e63cda2ddabcf9ab7df0c4ca11decb6c2855360195db137592f4aa0885b708f7329a734f64fe15ed2156e1af98b8f82d7afc9a32992d33b1dd3404ec86eacb5b09471f6f88ea3eac36c550547f05c4839bc64fdc155012a42982988f63c82efd3ab29146f2b48bbf8b36165348c3f0da8b2e7485b5ea6ee1dca22ba7fdcd9e74f8fb183a05c1bcc500e858cf02aa20b723b5cf7e85ef0074585f0f4d321b88ee6f216d302864d7819fba6f6bceaac34e662433f0e626eb52ec30e5866e4303b2afc8f8fae09ad86f512aeabfaa293a23658cae5e3c4d5420e131d2a552c265826f1ec956224189ad8623a7c1dd7bc06940a5d11a521bcd25a87955eb92dd03ccdff6b255891cb337c9530bf3fd95d16c364dc96fd2060d1c309d43b5039aca42fe21432b6d1b9f90a505b7052a6d3502ad2e84bf3ec7286feecb8e1b0a37691994c228541499e79990fbf2d3576cd1fe4e56438153b36e2397da821b6642e06e4c71f720dd4e9b63ffa5357d96205209202fab19e283c5bca1077d845ca59fdd535d552b82f1e1682499d725a253c7de6a239bcffa2aea136af32ac86d89ba2fc90b8cf186e28ac11dd1a25888e7b02199019fd77baf234884ce25a1f45acf5750c2f7cde80a79e3840e27748c1a8c10731f463f1c3a9322ca8da3c653b2d6a782bc470f2972087cc041d36420dca0a76c815425d900c4130b1b0af36e09738c6f48a63e8589e2b50b97f86f03edaa8594ade38f310b02297454f9bda9caf55147ff8ae6a1008d6e7766285d9b4946acc3cf6a7dcfd0390b67e418c56ea3abc163571a0d909e3522fc215baac0ad6127d10c2f1fe0a8bd64ca968c2643b6b7d752ae8775e5f5ff3f6043bff1612580bcb646f121e623aa20643c5abdacb9bc3b628e485eba79545d401653e0a52b67b5a468365da7b7da06f21fa06c2f3f1f683c03a69e8ebdcfb0a80ea11699e3d01749fac0b5d4008eea3e7bfd4368981c2801967549a415beb9408cd050251c2354cd3083ca3e11fb29921cd3077661115129fa93648e5af653e4ee959d5abff119eb03071b3eef0be69448010faa27178d04d4bdefe24488e00385f428811094ba43e80c0a56d6cbef2ea5032d90d8aeb33d522250dfdbae899ef9d0f00436d1cb4be1afe7551b8e01312c3e184621f71acf6bfbb7f9dd42a3c7a91052b86758f34a8f62e64fe0c017b2e19b02e0bdfaa1c21b1939756430380326ab222186d692fd827b5e6bddab486f0e35d326bdfa9b1c8a9f2aeee450134a82cda3a2f5dd5541cf439a7d04512897ab97b8e8eb2b1482fb96965341720be2fc7dc4086a2a2b0a84ed2c9b966837b66ac8977eb50a19e5e3dd30e6e325e8e051f3d90f416aab2ca60c835c764a7ac088fb597bfa7a137e5ee9185389c84d566c2323290abb30153632e363d4717d79699973310273411259ac7d3df0e83f9f41ad705b002e319dd3a21991b8785d76794cce61608c6fb63b59dd8253f155a51123c29e18d5fe1873f22caf488a1c422407cf80998958e2bd11bef2a87e95539e9ed2640658af709ae82dfec5035516060adde68b5a4511b9f43e6b5820023835128ef52ba232bd25f92d778f0bcd4278103e5248fb209165816d5d5c6c09f83bef9198019c10e0c21a7329ae8769f568357c3405bc46e40dc05fb5576af7e4f21b6f2403efa202307897685e8c73e79267df243bcca09559b8dac8f0c2365f428847d0394460cf60e90e38942148895561d14661dca0ca4468e444f2b2c2cee04adc03fe9307f5039182cbf80e6ab5c5e76fba959998a9147c7b0d59144e53c4684fbf93d632216fc2715e83167bbe4a72e6b173aebaa39708219990de4a895c9184788f531cebcf2cfd0163989921a08a0a0a4b09d09a4704fd949be00122563f27c06f8e806cd6105a3ce8c733c478d19a553be3ba3e2d0e0d1790516c04c34d7c4bbdb0890ef60b8414e60af41fe6dcbd457a0a15de6f40b53d987adf0b2b2a903ff2bb88e09f0d68078a2fe668d48dbb288abc1e543d0a97485fa4802ae6ec788a3612cd7d72c7283b6ae994e4ca1a00c9b99121936c004afadd703fcc435d2eb6fdf9c568e5eb77fc0ea8fa77f8467dc224db60031f981c3c86e76070b60f06251272ddf0ec7d3e016641e4cae4a7580afc5dbd92e4f8ad1a97932377ee7a473749b9d558c9431c05d7b7583c97f1daf901e5e2ab15573b085eb96188e1bd5b88a7aae1fec96e39f1f59c4f4c24c473a3f69e88437c1877831869001bb8a0b755ca359d2219f061990e364709b0c7f3bb21a4cc652d59dc43dcc3b1608e5cdfca5cfb70e9689b3848ba334f003f44d6d06eeb8037c01dfecb4d4b781681babbfdc91b063a9307ef7ba184bfe4df615a58ec236522788e7463e73e6962a4eeed83d9bffcb285da6f34a3a9f0ae93b2ddc7f10ef3acde3ee87d66bd4ec21c961f651371350e04338f7ff945f9bb3074052a8505e1af72eec439e873d00972eae7c1618f64fb428156efd9136ca621a82ceff7cc75c67073077ea0012ec8440d55f4496d89a209681862b00f251ba4156b29afaab2b0f239b96188353b96e47d7704acbd27e5dd907375b608c610dc8cc5b0ace0921634913a1b03f76a272068e1fc103a8b2df89118a311438423b0506ca04a664305bf270e13215398b6ca104bf89079f884910d63413b88396cecd3d4b67dfdbd54ef75ff7f31fcb5f4c4409be69bd91a53d2e2ce2391cb0b63de154de1fd43cb0f88486a02a7f72fe6bd5bc3fc5974f5fb2b2fbf27729cc51893b2802441c0f29821925494f32f15201fdd7da015ae4357807ff69f6e63939d2012ab7dc6c0fab56269f3564485aa1f7fbec48b85738a8f41dc0c16a17645a4d16b2153331fa2ab4be02eb10db926a36581b45be660a1fc32bfcb9f60f7da66c73062c5a25e84805f34441f5df0f56889a17a198709087abb47cc6b68d568d7aeeeb9bd0c8d1d93b81c02f4ebe5bf340924126c6e58f7132150ea1025d63a8f023c671b2880dea258802a80bbf35f010d6a1418de752516968d0642eeb10b50fefdf90ccdc98f151b6625c097d5cac4d64c34b39f70128e1b43682caa0468df5b95747e1c56eba11abbe875a080e6a6d9cbe30a00b39bf6f7896dabcd833ba235747c549c332289d4a19124de3faad0f25b65c3e082c91f272891c587cb190a2ad04b340d0d7e196de496de6e755d9729102963799d5347c9c84651d77c1a6572c2fade2989a0d34882910789abff303816f1000fb2d090d824ac06adbcb89d26807680d84bf7ae271e1393b589140475db6ffe41caed2b2c2d4aea36f07fb009f7f1efc7e933ba8703be155156dbed53fae6ac03eca90952552f1d0e1b80d35e1fb344770aa761a18434c037a2d105560de80926f3a7a6e48fa1eaae5087609fb356ecafcc56252d34b8dd9ffc4b3a6d8c9f1810a7e34f1f4573297569e3169967b649da8ad3c36cfc6bf2a976b6845957c61c575597fc2f15753c1b6ac2889c642b78da9610997404aef54c290d2921191356541f47f1f50a9a90dbc549e5b275f956da3cb80572ca9aa3b14f727a9c39294616607961eb6f795fb29530cc369be08b4e2fb10530fadd6b1f08cf2ef86634e84420bfb7a6a92d6b1a9bd5ab40933a71658353b9f786a8aa6a54226bc03fe989fb4fc7c8b2e545e536ef0be771f63bb89b37aae24cbea9740b4a613733323ed240b0977e2152303db8cc59432a759daf06bc7bd77f72f117e38be3fbb6c869e7291829f5185e8c1f50f64d57121597451df2f54be73e574a4f93920b78ffc3efe2167efa855df10b85f1e138737a1955c1ab06db4d4bd39f359cdf6455a9597e60294d53b8ee7a7ba58d84c9054af728fde7df2465a7bab81425c192e199f6f0f0ae826afd7c85ef079ed2fcd6a156fffa711916586efde41a08043d2dc69e628b52eb9e9726667414c97da1711199e038338966a141e82caf6bb8f280dc3bc13126a07d27a0b0050e4e60ebf17bc2ddd80374c3fbc94579f6e1bc4a22da8524c1556e57c3fe2d37d3cb7376ba48ab4e5f0c40390569f68f11016c7c6fc9b6853430691c1c0f79060a19f7095c1706025c096f045982c7470b1b2ac32044f0162bab7a9435de278dae72d8e99ca70f1db2334139a734dbd9a182b278c3b2aad301cae672050acfbf32be4f16808c9471a2e95f46f1166cb6f4d610937f9922ce35d24e7298f543141cc00ac0051265c20278cf5e713549ff04a2f30c1aa0ddd572dc3845fcc25f607079179a5e29fc51bfb05b97c74c0162578114337139a120e36f0bd181f3955987fd6790607ec498e9db0502391f723897b368cd2834744c15b60815cbd4bfe38a5c87253e04e18489d99237fdb5e6ffb4fb6e0781496dadc9220f0aaf2199618763c583342befc71fbda9d909cc6124dd7a986fa049e32b202eb5d5677fbf33ed1c4ba0fef966788bc2fe69e1bb3aa09d57b5d6a5e78981b9419c58f533aad119767b1fea6a97cbffcbf736d11db480b73992661206995f14c6039917f989ae65d55ab3858c78038f8bfeb60662e8c030e5030ca3894d8788c05bbe03c2b36d1a816c2c595360798717f77465562d96c2827db494cccd3772d5aba7e4926f38d893347331dbb0e3617a8b1456991f40273b685e2cdcbff30f3b67742248dd16428b7393ba8f792253f9850855700bf8fd1a27f955caa7ab28ce0bdc048cc3f9a716d255c448df7c0420bd550d6ddd8f6b9459187689b42622fdbbba897937490ef8025ed6ed2d72cf92a142245f11d7b8daab81126bf8df928ebb0a40fa51d8fb1880a37e633087f6aed0482887cea1ec46c7e1877fedc312a2a2f073cd3f4092c0dc72fb003fcecb97142b459a5d714634b8f02932118bea42a8595a8f2d0ce67323c35d9cc48c5dbb5dcf798e98f0ac04c4d4de8e2b1ae89fa734a8a5fdf842664e225f97ca1e2ca7171053a05830dbb64132cf5da8cea12bb1d471ce4ddc23f87004600e05ea07a6c819f604f60ef931dad67faf0a4df071bec692145fd0faf1711cedcd5b09e9dd361f6d012dc36a9da6702798eabc5bb6a050f357c492f7be5bf0b13e645df4fca8f55a8a4228c3beaee1b3312def9700893ce39072f08b81364fb1d27581cd68fc2c57ff07e6e9b40e63bf6e5fd9aad3c126a4c32c7d5ef7e7bee575d8ab1f677c846ce1882607a40f14ef1226ec11d2b831b826793f3002e3ea6dd48472da992c992524bed4d9f19cb8f8ce5268063e5a8fdd886d8a93ed66425f8dd91ba8f8d94e74c48ccb740b61a31f650ea5b0384b3afcd24d2467da3cf5489316c7dfd064bba0862700d7ddf36a82e932b50b9d4eb9619db62d5c4f71640b78fbb652e4a8ced9922425ad68f405bc73326d2d6ca5414c00a4c62423ad8c526e0c18fccbd44f374add8529f0d2f9c2686b01bc90e5d3025eb5b4122bc74b979cc52799cdd2e2920ea086d242002b89548350958f989012fa3424adaaa37f764d4d94132d80ef7bbb8b25bb543fa3557ee96ca7f4894313bfb89e4b154823229471037ade006f8cc6aa8fb0acf625de28f32a9f467f6f667c631d29bc98f8a809d9c145e011fdf84050c411e319220dcf5efc89fb68ea94177edd8e98ae48f9365cfba03e7b7956e876957252a9ac7bd8a14f432a1f92aa83174a61d064724043ec026ddb4d412dd694b74031704874f6e39c0275d45f6722683be7d9d359139366a972e32e197bee12fef22c74c0381b7bc2c32735623eff333a42d4346b80d4561c4d66cdfc90f1732cdedc32ac688b4577fa2f423630eaaf0fdd4313d529a17bf52eb2d809325a7d8ada37ce4a6fc487b00917265a8979c516994fa4ddf43a1ebd0eeb8680ba6baff3e24cc25adcecf17443f025256f26e8713b7c86c2c52333688a14108158f7c5c90bcb5d46461557becd38710b2bcfc0ca9b5b9f547d3d157710d950d44199d33d2fc589d54f4340637ce6770c2cc253f0360258b9f94881cda198968aed6bb7c733014ca2853db47678285cc69d7b146f3057b1f120a1cce8c34f4fceda8dfd064201f4276a4b858c193c3c92d02a00698d3982b72113143aeb49aa74471f121c20573cbeaf7785a1f078549ed6139fc8f46d71039679a201222d5683e75afe9100db36335a0d719af922f4fc227de0f0bd5ae51dc735ad663cd46cedd60b689a7debce4492c9bf9f28c81d8dd06035733e3331f9e91ad77198459bbac1056030b1d14217c1a4dff20a7034f2a289df5629e40b1f943a7d15c49be7da9e8fa6267116b8c2b084a72756c32db8a617a474d62be397125a0cf865d4171f09442465d260a9c2ce005012a4d98ccc960728915d81f4603879afa6990f1302a743979254ca275a10e7df1f2487e1a1015863615b70cc17dfa82d673f6593322dbe6482f8d53e7aa44e3742670e8dc939c705c6386104e3363184c6a7b9d6caafdb456f2699dc59c1ab97db79c7029414ef466ca74bc79a4fc360337b9021a5e31e9dc867f39709fdf2a2e98258378e8cb42191c30524a050572e59978cb609a1dd61bfbd3131217e5ddd146f98127f3f9b183894c46e4b45be72e57761b3ce5fb975b20438dfe1832f68d19003557eda46c469a08851baea2be5136889602c89cb58cd47250f25ed70002c4a2e1df7efc3197d5cebd68635f636b7288f624e9cdddbb32c643513a8aac28b409612336f20ed9cac86a83ed4b8d8e257064c81512f691b08e2b5cf5d990fa05f9b752519e447872c843c4e591924d90826c8cdd5e9a2bae739474fda8b96372378fc27d349e032094f46cf88d04c6aaf9616de22cbc2b51c361cea8539653e2a4374204e0922320a60fafe573dafd0980dfe307ea379821c1acb97a048a98163901db8fc896ccc3f511520e5d8333f3db10c46bb754d4fef3c736ce3d2f6359eed7b839a354ab27ee8466908318462642f6e2286676cd1d0fdbf5f559f9e3979fad00f182748da6b7ea8cc8c974dc472acf26af93d2255291414e766e90546858473aa4774225b623867c21d603d9794602fd0f0cfc5c00a1c5b8afdccb067b1bb17e4bb09682bfa391ee200bd814dd555a3e76544abaee7ee919ecee96125f8fdf4411ff0fc6819926cda6f0f32c680e41b71e7ee7d3ad596e6785745d3c9a8a1bb78e9c4d674f68124b7e01628d19bd28a553675dc8cdc181708d1561a267edec9adc55c2c3514c492e263351e844a46f1dc616bdb5076df6b83b49f0bc0f4358e6e3bc886db4ddb31aef676f9a012d592dff6f5e32508b36170fd55b82209a6fc1ed34aac0c14b0ac2e2e7d0ca43d349239c82df6b2be56348301f12f19dbdfd98904545fe6dd98f6d896fc8a82947b1099a8e411dcb33cac654245a9c173cf827e19712294268809230f695de2318a592e54877c2efed845e3c1f3a42e0add43f31a8b9355f64fa220973db708633a1739c95377af4c2757dd8e0b50000396761548ca1d0e31a6afb9d10ad4a42cd2f931ce4127faaa8963df109e03caf7f523027444563f10c41d35d25e54b0dc1784826449f06ab113f324d3431753851834c30ef5d10ee8ef466c86f31723ffb617ecc3ecae0c9e33d4acec22a1577721dac41eb1318edc90339b7921368fab47eb95b4150317fd81b28706db1c73d80538e86572c445012086810f8b877dd755d979ca8bb162b19fcb7e117eacfdbecb46251c67401d8fd95552891a1dce35501e5df6a6101bb7e7df917b90095cf339d5d856ca9da25f1ce49ac158406924c0e4361c526cff42888455671747680276b37e21d3a3076b88e531f9f43c4499a39945428006b452a4f7cc15606688acdbd4d68e0b4f9621790eb6654c01df2b7b4534a9ed4d58e495fad7fb019d9c3c3e9d6ab011680c02e77959419c382e7f868e90722ac04a733e8220f307340537cbce45d08e2ab71c87a14fcd8e5c324cd3da0a794a5d3f3a1921220f78f98f1830df81a47fe11b6918a59844b23f37b3b0a0d98caebaa9d5def2195a0cebde1632bd7ca4d20d1d4cdd180ba56b87222fbffcee5777b12d769d999074684d1461dc5e51334e2bfeb6c6a65cd426cb6a818b1c22ad41dace8b07f137d822b77a0fb21d42315c7ecec521261af77c483cb8c1299697a2289b6232249395ce02cc71de76c2cfcebcda3c8d82a639b88fbfe39b71c0af5d89ab4185eece749bec678d9de5a2f8ecab6bda09efa129de5966a9209173c043b981aac2d43dcdcf5dc387d45df040b193e1eb3cbc68315bb63cd368952e2b085825195aa8498b90375eee60d3b06f31f2a586184d4fd76d8067a64238d3bbcb5276459bf9cd34787dbe4ac19f33c3d4ed2d5547757073327c1f1265dbe5c0fa97a561391f6664f3fc80bbd074072591630eaf08671c5f4ba98d62f41e67a04db827a0208205c4ab1087c1318247cee7505a212495642efea3c30b7dcaf3e0ded368d45bf9462b1f06f0527ec1da338dc8c108f2e0e92c10a74c3b7b6b658a9095aff9d2fef78c8e77435468811be2a3d5534fb483a68be0f9d97e3158f96a876df52408112af46c59bfd20df7c2d6386866f3eb0f0a9f77a6dd9b166eb390b7e77c66e93aca41cf51ca74beb8004b9ba6bce9ce3136fc075fd45f7735642cb1e9235111db683637325d1012a58d76429a6ca4b1152f61c47de27924c5c9f3e7f75d3cf92ddb88e48201b9d1f7d663f765444215c8b4a6e23639c34d9cf800dd681b15de19c2c60633f273cd1fd070f8c9526861054841dcde4c6954d365ce18a60376921f2534116ef88e4834063933d8c657cc55604642d21e9af6589796bd89238f68e30d18a89811d8d541a8617a04dcd8e0bb7216a4da3a5efa2b9a098794d215dc8ab20b59b1a24cd2e9a03f2c1c75f9c637e4d0cd221ce92b5ec937919cfc181d5f710d9c2d41c196bd73f00db6b3ad66bc1ce7d8875f88cf4e17f4027606a2d502912a54f704cacf13821d642e430c855c77099619e95ff910492601ec776dd75049838775b6db334cde406f0ada5b4777b3490a8c26e94704eb2efa6146d93af16592c92e987cd8226c320aadba0f5ff637dad12284a67328e497dfafcadd1969436269a7560d1fe62acdb777fee536356cee0a5d02d851eee0d2efa11ecd970130c4a0214f5fb68c187f7c4d796efc5e4307c945b90db0e3e67514e8a93311c7ccbbb865abd7581002164dc3d34724da629f8e0c676610cddbb6f0c0e7109449f98d78302a9e3ffce8678991943ca4a7585b6b94663da570c7e13a43d5d18a7693ceb18174b55e65afcf4b344650b9334b4e6a7bbcc379c5c79598814c29a06d056127a17b90556f8b96c04a775c9a5fa5d247c0bbc71e331daa62d6cdc43ff586076fb6d1e978ce7e73899ed588c86182e49e7a0f1482862c06206849c53a16fea0709b4523bbaf4c3fbb58ef95bfa52c2f74bdcd21d6cb6ab53798085410615a3ad7e5477f9634a3efd0a039b2c6a86e95b707e0f3f345872fe6fefb7e95fd371e80213f8b074a01dec8258bdcd324abab5df8f971e9ae83a3625466c2d2658ba42e5a70f0ed99949fdfdfb3f7c1406c7e22b7c131f3418e47fac2e8b16d13f57b8ab46b400dfe04c46bbf72f620584682800406cc3b3f60267d97d391306088284a71cdc9493fffffc3ef94745fccd81c5d534ac1db5d1212d62cf0f2105af848692d5eb681be950178f0ae8ad5faa64770022afa999aa5489b8bf8f92d6233dcb3fc08a12f9281eb2a8961fedc7167437958de178fcc84bd85ef31093066d1dfef77a1b6051869db0d907d529bc736ab9a50ca3ea7a36b216333473a43a16736ba2506a9cd2cdf69cdcb09ff2e25e232fbcb1c72315882707671294f090d529cb648459afb181e6df8f461cd486f1d55fd87426d59d95c1b03ce7d5695484f5453dd762d993198d2044c7394346c8f2efe995794d5e1a6f269076677fbc58ad93400c30531bf3b1eeee189f6aca6df27f456b59afe60cdd36f22994d3b240456551c0ebd10a4ec7b3ca876db2402c0f72dfae3e0fa743219d7d7b8310d53e9e3f7a4ac873bf86318b34e61a33736f4f70faeabd45ba3ac429aa21c01c40d68e327a314fe7ef1fb8d576c008b3282f8ef86c122ab6cd56e7f4cbd77db866a363c595787fbb404e164679835620ab7150f16eeb742f54b6bc8cdc25d6e939e101b242bed21c6094b6f259b18c2fca7d634619c9af4eb24e8803d10ef2f1a6d6d9d096b8f65397d509d76ad4d9fada0cc6f985b39e9a2f85e60d8ea8b81fe5bd4162f58577261fbe010f81347f2b04bdaa5639b29d8ad92eceba1ceda0248b1ab0a3ad4f7330dba8e610779f5f920df6741069ff089f988c189dc14e1a6225fdbe5fa3ee9f59e25bad1e025450e53755ad7e07b997a112824924f10b33ae430d4519b7f9ad76e996d69b9c6781b90be0736a92a5ef79f6a406e0bd063f41529c4cc4126a02e827a99292f6ee90aa65cafe4611deb2c3ed1d309a9c166d60fb2cdb8ade2c70e32e3a3d131ff002f1b79f84f12e7990bc6143ddf22206acf5d2bf5bc76cf4780a65e0f1afe2b82b230d278632007c403c4f0141d913cd4423425871745787f35ebf4f45f0b6f8d85a0fbef89dfa347e64b0938dd79b5d317fe292e5622f5ed3c7e6dfcea2bf21d8c3dff177fad0fd2b00c3ac08d3bd9e31ebad1bcd05b855a96c5aa6b4c0ce285d6d3dc1891a5864bfd588c325ddc076359926209d06159662862154777b58b092f7855a8b2cc9dc2882673241eb3072b2c7d045e7d1e7c46ba90b0071c47cc880bfebbe597d1fbfa72e42740cddd62935350920e7159f9aaf6d97307e7cb0e03a427e8789e14ee5dbbe8ba685b209124c0085b463e9f88bf1aded718231cdc40ccb28f1055c57b25d579ff9ad83552331cf5d582d5cbaa57d41ca38ce26a0e35e50e97d25dcbbb0cf9b817ec6297f133fbe93a84212feb8d3307947882546598519761a38b493d24280bfae5f0afc5999fdf05f262f7d833d1c343c6c9425701848ed0ee2a484a1a1e57fffd779c8c8cc38d79b26c0777b3401a5e98bb803816491911a786c47528b4e71a831b843fa2bb3da410b35ca1bc2d8a569fa73b0da3a88aa8a90d5776b04d47eea7f0b5091a385fd9c60cbb8d94f02a363f571fa062919af55aef762ecd4ffa09307454a2e5ed34ee7ecacc7816a00f6bdbaec4faabceea1db3e1e803846fead3fe79e6c13e52e810bf9cd61909f165090704322fddabcc97c6067b2fbc9c60634f4f45d4b3dd47093111394c07fefeb1f5fb7adc577559e978daf4d5685e3311d08b5e41afcf3b94a686c95b77613fc955b961a7ef9fe2d05b344147062c54fd979e1852012b63b5453dd96f50cdf732e8855c78baece3b72cf5855f174ccb4f6fe830616dd5987532394df29c07a70e784bff408ffca9c4740eed405904e59af0ac1cc8e943c6ce6a46e6e8ffa54b773b7c41a84b3043f290d0fed02fa0bb84727d41d1d3e1a59f7372596ad53d7aadc44b5a40d274c85b477a7fb2f8df0d106513c65f8fa5bd0299c43e4d0b4149e347acaf8f71c05fde7b6a39236feff182ddd012ab43fafa4f9700a8d13d4e7e641102778c4d1622189486c5bb3874453d71e126425fb1e49bb12f089a31ea1e32c7bf09f2e6a11262c03c91d40a000b77a870528d6a7a1ebd6b61e8df46025eea4cf42a0276cf5ff4e41b8dc8b727b10e8b817e9688666ffb847afa5725c870466aadc7c71d8b489cc9f5efb861a86d29413b4d825c34a5b1db9aeefdc5aa19b7de1214ea887c523c0f4fa588555df026e68919e9e8a9affdcef4869432bc1b327c2870003169027f5155d4bc913ca182d09bd6f4bd38ed62d03ce468d5c25051f38b81d0ae7c25f3705e416763e4d6a750569ddbeec866944ffbe14f55d5377236cb85f34ba0236990fa1d520d127581bce096dcfcce376fdc4576c6ad08ccf666e5d7c167d4a7cc71723e3b91b49043420a058f1385cd1ff26d73eb65e00ce2ef2a30286385310ffdead00c1268502c48325846c8e749d89d0358345f4a905f91f03b011f79044d1dfa486ed932eff5d0a28e3fa656bf150c6f22f933e93292455ae2a4f832ef6e4b8f374e94b4391293d86575964ebb0f8b294160040839096eb07dd58f5a6088b3414ca644ffc519d3b441703ead3ef65aa4041701ae9061356d52086d4b28959453be6d4e80012ff39b3169fd15e87fe1011d2357c2dd49e124d1826ff7732c4eeac8fa8f33424e05509d1fd70f3765e9f934b5e8215f4206c8834a3ad9033ed460bd982e364b727aae17bbce0589d92b5831fed0c78372db2bc5479f19ef3d909bf5f6f12c349b4044642089ae7218870c0e8d18ba06f191bb31940d8262fe6b776495c893c4592f855bc5b8c5a92267f598c67254c5d39caf6f4e9a5a299c7c643883562fd4edfc31a2a295f043f4dabffbc40a8a8ed4d356aad9350b9f67c5ebe3a79af221b64237f11d974fb5d2331bf68ee561b66d488cebf3c1ac80b8de0037c3517ea757caf6fb1dda9626b728805386c954cdd63c36fcf9004fd3e32abbdc0b3599edc07d465ab61c30b2728cecefc5c4d240df33ee9ed383892ce859eab028ffd600b6b5a717d8a93f0436773d818cfb9842e8ef4b7f58d5f76b7df713b0ffd60d0bfb303cf73bcdfd03e6943f4dba444771cf7475d8c9191fc7eaf1ae1b01353b03fa30f27b39ae891b2f834dbd6fc9d14d43dce922ffa9c889f7888f7e61bd6c994d6a994ce9bfc7e1cd209e930300fcc769d4bf2b0fcce5b61decbf51d3b3aa650b069ddf455ba13cd7e87e747245f88cf0ca940350a2b4a31b231c72883acbd221e2e837424c88182c4963dcf1c30e22dd6e0bb658d10d1ac4fad6738b61a73aa045a5dd691f32a311184747a3f615dbe90ae8013b64da58f588717f19a3979cbf5748db37c5022db70b987b45d60d06b6ffedfec68bd57f7ce012c4b7efb9750e3306be83ae7368428abf1d81053656d75230cf0bd318f7462f8fec9f402ee0cb8e647b6746b1fafa3fa13a8a7cad539e5cd09e78bb9b51d7b816ee90b7fefc88a44eec2fb7eba22f068d55f65e6767dd82e62d817ae4cc27f712c05ee185050f6f1ca863e58fc214c61d1d74d756e8c948afea552370fd0f76eb609062d3656a1185781119588f072eed42f0708fbc690c7f3a936bef3a15bfc5db04f1219c3741e1d0424e741e757370d8215fc949b424b3d8206d0289342dc8ae7946d4c0baedf8ff92767b1893d24eefcdf9c22b7495bb27c7b4c6e9b0b1bd7aa3e83458c539309e17a00399230a4c6324f1b802f41beb83763aa55ceafa6671894027523d7ac36166ed4f379b386db1e038ef6a376906eba7528adb0bf94d52cfe6e449a471a3885c9b38370fae7d9e43b42a8b187e881334a5d2e3da157d9aab685402b17e8c3b685b92587c9d8368548a987f9733423f831ef67ca341e96dc6e6c4e4bbe1363b1d35a3b35797f1114b0bbe6196c3dcc12cafd87dc009742fb1187fce71f42fbd983fcd75342eb1d83fce7db42f59acbfce61342e5dccbfcf79346ba970eb0a7d8053342bf54103c4814a3138dac875703743d15afd3b5e843a3a391a557ef2bd844bf50528b7bda50dd1a6eee42f08d26fc6472981b84495e9ea632b591bc14f0fccc14f9a54a62a64d054724e25cf9209960d9dfefe9dd7efa5fdfc4a7dc2a5594761904ec25b85a0f0adbc21f4e139ef1d37e014e840774a126de2a67cc6fa1a3e89f407ce958b79b7b3e5e01f167037c2e3d24d26e7aad06a485363fa43863de2df90fa9f3427ae5f5a5e5e79f91727f9031e9404409dfdbff5771bf9c0e5185d8b7c67b5c82fa01e9fedbe669f458d9eb116738293559ee3dcb058c860a716e68bfe0e74e4da5fd94c4f3b92d04ffcf0eb2dca5f742f4f7b3f08f322208543533aa87e366ee9daa1455c40e628385dc83dab0919fcfc53a676c86c35a7a1512e40fa825371e082020796064e4490a107daef560f631783fa07ee730f2d9417efe7dd46a538e7a5d7cdc98069290023a0cdd163404e6d3e7882e698891812c9730db5db8de8d7804457fe1852c0194602f7a7484ec1cae061028df38947b9d9cb646e6d648ebbec8d093f5827beeed36ed8be7d172bea75f690ea101b6d18ee7b894c0dd7471210fccbb0e2afc86ff54280300a1a4fc1e1179485ba675cc610713c0910142946756534b28abf1b16d6c3e63407334c104e2e0c61f7de178ee064aa35d78442a1c5b2e008ffe0c490ccde4260a04478e9209b61c2b1bd45280eee799a43dc96bc378a1f4a2ca08be1a2dc9d0b2a776ea11efeca2c1ebcb8853691d11c2cffcf86d38a079ff255c6551cdd1a4b87970b3ae8ddf20e3601838eb66ae61cddad96610c394df76335fd0c98b2ac590fff4a95dc776a6fd676082072871bef96c43c41c83ab424cd6a3b85a4a00c4b95932eff159e28a3138b77c7722b459a6315b336d4e223c1fba65d0c0ff8c5eab71dd63a2f16de76c9b715a7800538af31d1a01a12c0057ec9768bacec131e0deb4facc386232ad6371d51d9469374b0eea920d1347b6d3db2e52f73146269969fc900d05ab5c1e36c592e4b980d2b495781c4700b0b20f1bbd416c1ebab994571c2d0945c54fa8cb617e414215061d8e88c47cf7a001e5c171c80834e038193b361e97d33e5967b2260586d329040354067714d3a3f64d8c58a2e0ad83cce747743c28be02bc3de6a01f9d12ce5eb66d4408f0f9fd5eabad4eb196445b34ce1015e0d3d12a5539ab6f5be8e71cd0501500f815667028bb15cc318702e214535c225a44cda918e23345327d318621944f4592ac74d3d189df35c73fce6cd9fc57f5d3d4f23987b8dd1f14f66d52cf29e895614ee0f253cb312648adbab14f7f1aa9983e2389bc82eae698d7aa572972de1b1d9ac6a6e976e3f2631696f4ccf3f1c3512b33603ff748427d466e9cd3ec261acff2b58fd863af07c5131b0e3c0ddeaccc92c248bd4511714a1fced6cc79642e655fb1bd141665860c28044bc55df7254be35b9be59e2bab2ef01ca54d501c156dc741a5ea860ab39d084fbacdd92990970874e8dd6851df1012fc0ee7ca2654bc015e8159ebadfd3d72dfb4c0daf06f51da49077d85314a8e44e60cb679c4702468a1cce1d416ace49fa0642df3392683eeab808bb498cf3ff683b98cd405ed1944ebde1b0d005ce7390f617d20146a53265a778e102e84d59dfd986dc4c52fac0b0ff0277400296460afacca9cd8745b34993eeb53aca60d949fb1512d14a505396fe404c1336f708907da9727904ad6ee8763801540ef0f63e4a1081f794125bd9ef878f76276d705fdd10f0af2c788e61cbf8c972d34bae4dbdba396d338048542e7c5158bb2e0377c62f099a8f11c616a206603e03a66ba37e490a3dfc148e873487bc041dddcc030de8380e5861657bc03cc0f81fe407e4d69b629bb278a0dc4e098c20cc8387360dfdaac004eaf24889dd08ab8d895a689a7190f7aec004b5bef91b3137966ca3acb3a54a31b26039cd7000051498eea8ac214e326628eb6128e467060fd76ce62a5a6d31dead472a143364bb02aa703ca9cc63f0d26427dc2c32d92a23014570a7263eaccece3a1ccb56b5e57881ac203fea3008fe50d2bdaecbc255bb27f6cf2a929f89d72a1a66f6ff1245e8e36294787ce61594e000530cc5c685f752da8cddb9625d2ff12d205156caeac2699adccc5862edc60520e98fd57f71c09445d47f9a7b958058747504e3bdd83cb1dbd6726243c9e9c0021b429fecdb6a930f0af0567e049cc80432845400e615b2ac45e99a25f56cd3945093af30744bfd421dcc396c4d5a6864d96e16ba92cf156ed42cc256caef9860817381b278e6c3326d7713127f628686f04926cb9be0a16dde20c65e50a005dbcb1ab2e27b0c40ed64bdc9b561e3709d40086f458e0087c17aa95bba7b8ff88a898d5b415a949958e6bd594a0dbca42230156738972eb954447066b0f8726a8ae1b0e23a8a4895938cdbf727ede938e12ea7685982c4b5891297003075a2c3744fcf9438654acd7a0e756725f068ca4d7fac59d23ccef963300dc6edda4a8cab9d71814a4908261603e5a5a5855990be0bec3c18bb1e07eeb9b2ade0e9b18497afcb6b858c0f00f4d81e88a4606a0602221a88ae56a1962909f9569ec8c547e804de2b6e7e9a5087e11e3568ad8b7c6d783365d0141914839c189f31048b036e7879417a8a9405d767b85fa8f91bcdb321a76c52173056b948d831998b463393cab4dff91655cccd6bec84a581c9b180c56f59217e14bfaa0e193b76a888b6549c282057e7096f7b090962c0d999d200d95a06623994493aa26474b744a9bd5662516ab0ade03fcf7d2fab18504a36b60c530dba7c7066d7390da05684fcef21f3a0763c0a1cbd5861a21ea04a406694c44f6d2c361906e318b8c98b22473af91a5fb504fb3787f6d4bdec0bb5586a850c50543e4493bee4460700c014f95bc41a887549b6e82a2f77fb39ceda078578a325eb24e7ce26b188fd3c134a549696683d926f9b22ba7de2945d840b2a7db0701704d2d6408f81c9565d78db2fdb0aa237d7efd4f0ad46ea1e4e24e939fcf89697cc8debd81cb0207ed2f854a524dece4202653a3f7784d7743f6e40741da8804e4e3c6054490276ded15f96df4464ef0c8695e75c8245a8f98716f4bf5c6647336c58e01593c816f90cce545794785e5a3e2ed2f00997c208c17615edbd2481fca1da6aa26261d8dad1d1ad1e6d081465b77f5f856f74a8398e25ce6cfb9711033789fbbc3e78aeb10d466057d83cb0a074ac5e634b16bf626f4e26917e375f0773144f503d0e6694077291e15d080924b68007a41b612826ac220b9122b50cf20feeb8be51bda9a28dd0437673c0f2dfe4f8f06907d96af8e14fd588e5c1ad408a2c35ada3916c095d690427aca8ee7e04606a5c67242a079092e4dcc94a69bd28154a79f2c7ce163e8b9fb0adb8fe1faa34fe8fb954ac7531e639504e16cbd8621fa8a2db1d7a7a1595dabb7b5ab080b83cd44ce41ea61f290db40342d1503787ea97327c28581d12cd2499a10b019d44a93f4dcb56c0baed5aa4aa353a8d1f9bf517359b0ed5d68f63f001e40d422ce37c0196ee0ccd0053cdda9a00b3be876354fb1ceda109a0d998ac93c8e1f8895aa48188947588410c602b941214e1d3eb43ac2c03395442a4df7f58173e847fe21d6e4d344c948f09fba79c232a7d686b5e8cdc0ca1fac7081798a1d7570d7962aa786b29a4587c0eaee8486577941316cb2854e7865a42e78fc6901c573cb93030872d7618653996e3ee0bdc92ba63044d13f8d2b2c70e2b2655604d427340b675fef14fcb892feea4e5aa10b9c23a9fcdd4174915cbc46ab3e17b0ee5740d02dfa3b6e0b33aa7f9c76f975ef5bb0dbd24f6643b917c1869fc6848513ce2e55b743b77299dac433e952ced77c459d6ee31640046088962914b7f3701e04e2185be983c46064da1c2a394b751009d927d7ed0586f03dee5a763e86055cee66cc6be7b34ba7bbf9a605e395505b655e83aba61c72038cb3dab0e0d71de96b1a7c6203e6beb51f2ca30dbe578de1823c8534200962c8b1721688bee1fcc5fd1a510c0b4cd0590a58b70250e241c5093193d7731ad49a08444f620b6034f44b040ecdd3e33f622d98a44c364206180758467d0a7a3830f95786562dd3157bc1f5541b8e406e2b378bc900020cbd23c403e9c3cf0a0de9c1ab1683f4c4e91a2d9a0dd62fc89e347fcc02b4f2f51e7af7be274ec33ba16ca1060d8d26183cb16b9795a90b39f92a7adf2ed2e52d82a85e153506ed81d89d0be6f05ddf0eb2659e6b3d20d54c6e8e47790897d0e853e645963395b2ab4218c1f85ea9a18cb75530a50fdc2c9739a75b8225b227cad69cc1f34490c2296cfcf2855f8461828da66d0505d4f00111eae2c41139bed342539a39d28ca10bb39d16a1a050cca0130913e5d90f30a30e18606f2f534bc79e0ab8c5e33adc21d3ce35ae214558300f3530d819e5aa67ccc6ea064e9c6fd9f7c25c57041a7cb2041dabc7e4aa587d5283148fe0d668e3ad17b8921dca67a2ed86fd0371bfdbd134527478b079b97023bcc0e3ed644a16a6aa19e89bc6a086bcce142853bfbc26933118d2574d36e859f9a33f7d5242c689322a5d6712a405994174e415d2dbaf2a9a9b533546fabd005fc43c887e9c6ae262a2a07cf3b3c1c5ff24fe6253cf16a744f0020ab00d62d6aad7fb15949d56f6ea31e093c4d0fd924cda4bfbc20e8c932f583c989ba590b366c61869774805982201c1d4cd1848cff05d4603bd286e20321958d0cc6e5ee07cd4947ad48c717406feeb168ac2cbf4bae5c29a6dd3c7051129a6e4462ec3970652b5107ae5cb942fc6b82a258649c25f700ae82eec3c213decd6d327f1ddfc811f01078b32877b5232950db0ed9cf79a20339c0d32025343a8128b6f5b2915ed9855c69ba90fe9d9aaaf92bcef50b874f95480b940102766202f327241a939d9a2c85b654f22ca6033768a08b73e92054c570a9da08378301a3ecd9e6bbeae6159244b42a29d63b9e286195e71c9405fb9a53b9a4286a0a43d89554f646a23948aacf5b784d8bfc9c150fd0adf55981e64c5d1ea8f9965c46798a18dc992aac28a2404708ca3c24d58b7a350aacbab280652ca88665fcebcd71a4c9f5a8b1d4376400f5b6335860dec52d8dd7f6648d6df807447aa43828874e33cd160c83ce295d8925fd070b99b106c0ec22dd5369f8da5ecc6c34c1ddb9829f23efaea9d92233e89e9b2817b0f644bdd51c99002a975c0ba012877bd068980174ef8fac839fd26aaf4cea64c0d5af398d5d783a316893436cca60b06f1ed70a361c8e7a86df5c8c0570cf42287fd3638ac5d539a8cb31f20e807112b703882bea8a784b16a15819ec1de38c83bbce87cc670e09e316f9acf7b1b6854c94029c3efaca7f3f1716b5deec57f89f95793f60829fb46ce3ec4d05d7bca9d0868f8e59eb914c010c40efa52cf306c39f204409054135649ff6c6901fb2c3859cf2bd60c63c99e4732742d8d71bfbe11b12d277e838e48f9a626c686bbca609184c165fc904dcd664a143c2a3dedf4aef2516c5c1775bc257e2eb84a7bc2a234a3b5c9ddfae596ecf65b0deba9740b78549de7a4a897786f4ea8c4491bbacccb08dce34ea6be8b072a25057a8ce24f4b18f0e2dfe781e9d5a69e77ef807473ffa96050e300225a37399bf54467fa04be63518d9ddbde4f82e84dfd1ae68c4f90016e27ba937cca4386fcb4baa21277f76dd02e5b8f1358f3a087a4c984b6fe40168d9974bc7acaa22d6426ea244e914529b988460069eed0c9159c8cadd71ef693886409e0d2ceea25d68199cdcad37f122801ada284fa0a4f429bd425653488863381a18fd7736e7d1504f539d515f2799c8d5095fd9fb0eae6fa355bd8af995ce41cb90b5e3b4396bc2ad98b6ad68c955159ca48364863903d9315ebebe1e65a700514e5d725f2999d16409858d956a71de10b120f344898e58a22ccffbc2603890520fc22311488f5147335e01704f49f7d099136b6a87c45f38d0bb8a6ded60cd7b304fec0b690a377d24e6dced6e859b81c573d6fc6140326343f3d8d70cf11367e3709202d508f2f5d5741ac6442c023576103daf24ff39cfac398726bfacfc070312f15e52637b3de4b6ba01b7c1bd6cf5e80fb0ebd4efef237aca1f48e68a28591fbedcacdbe042b40bce3e9408b5903a005af7017603166da41fabe338165f490946875033d50150970f30937a05b6577cb7696b424d7cc11780143f59c7993b2452c158df37f8ea9a04bbc3080a393f68c4d34f9c3bec88f53f0151c42f83aad30b679a6a9f9dea7f897281cbc3196802b669760ae71234c44d2f36b32009a135578c086759f2be983041c4ebde4f130813efcb106f2f3e3bb916426058d692013813b4e027e1302f48ad03ae382fca2128195462dea05d89119a94092ff3b08873b5422b16c43078f01c2f7b1344fee313ca822e8bff8c3454bd3d2a3c0905d3aa7790c1941593666fffbbb74fdb1e616540676cb6c9051b36d1c4a40e665a9827048780614efe11fb8cefca6c6fe0cbf70d02c5802d239c19aacd60cefa60bcde3dfe62563d3845645b535ee0ad39b349a27c65600c2e125d7593cad8849dc06e796638e3c99b32828f2ec5ef0371a581b85ee7a945b8b50c67822dd628052af54f3200b63bc55f22d65ddfcace98eadb45c9365cf2b12a374256e3007d551ed92b2f137160a88da74180d3ef1d0499814431c6939011cd113b07482869469730000f67b193ce0d3ae3efc0809fb7f1f00d3a4b44b811d2e15af6dd7f732d5f4fc71f7d08809c8b405d490bb34ce0fb6e5c6d74ba60abf193ed40cc9ee3db573ed822199c22b28fd9b2c2286193a206c9a51c69987b1b5b54ec1a2908209548032f7dadec7bec69a8df23cc7a07fdb1229d9877b478e9e2a3d3b51977151fd649c402d8654de275c1cb6b0884934971cfec9dc82dec4501d97584e859b9d300c0d081b36f0dbf8eba3b1864ce3fb52221645c7609907acd7d58a85433bf7d8e326912d0101b1f5a4df9f80da2be39bbb3e405945e2bc44347612518343d5763257f0a65764a73a270630931da65efe9b0f00ac8848e992d29ce3171bfb8ffd0acaaf8683f2c68bd253696854501d5b9abd15657ac5bef033e1ded7d14b7a07d028a30b1adf112ed235b35de0bb9301a3d143dd93307bf3a25764ce5780448aecd63358f7b44274b3bd265d01162959d8708e4339ecd79b71e69190042f160611dd261c298ae7ddaa6f2bd6bab28750d26e1fa26a9134292e33f0edbdb841caa3a0ac360d8f4c3e6f9fc47a08408e4ba66881db65aea8db4f073c7ab662e7bcaa1f641a021ec5908bc6ca92abf91a53962c979d8ccb598db481a456bd27835691435694c135a03c2759ace86478000017997667ebac4eb31ec9f6306e2d8920c944462995448d44741a984dc3367430cdb4cc522150ceab44c4e5dbc944ffeab5e3a623b4eb4da80f13b16027cab5c7c58779ba887d2a69153ab2b05f499d97767e2a1f42df3719242ed1ecc9129e8935b3851615835491acb6651880287330ca3ac260c9bb885bef39d209060e32b1be754c3887961f9d29718487201416ca72100fb4e655927fb4d8c00bd14755654e8720b5fdaa2ad5801b604b7670036ba3e622df6763618a57cd8101b3aa2eb8e0ef9e0970d52d6b6d55934b221c6a9a5dc8b1f35b543518ec427fdfb69b331954304607255e6e7db4b59a400ea5cc1693beec236adb0cc4ece83c7a18494f43bbe644887bc2001004918a1c890f60978c210f0dfcbc726e00692a12bc8ac735f89262ed373271a28da4d3ee254505db5bf6d7bd80befd62d4ec42f8b537d9ee34d38ba7de6a4c20ef80a76bc9a13fc82c0e1782d22e7a411cc10e9e85896a14e95b2ad3724c448eb2dd87c677cea2b5d98e12a34d3c25126cc229e11dbc1449f258894d8e99e0c6e50b93d266e38e006f2493a13482c30dfbe0fb8d0a936b03400aae188d9d6da33e7e77020b53bd806db3025be32f54978b5fa54600436086ff2257fe30da2d16b4530fbfa8f5a39e80620893805eb86a7bf9f38484c6af65967cf13a63645afaa1a52e945b0d7410d74180bf890620f4792c6be93ceb127225aa64de4af83210c77ec8a41c081cc562e1a3e50d18adccb6ffaea2239e7fb4de368dfdeb8a312c7d8b04d32a8831e5be97be25b38d00079cf0bd4b91d7cd99a96122fc699169bd6f4d30fd50fb6b807a5dad7f62a00eeaf5b670445839b623a9b917d6930a20a4e564b2dfa56c9c2661e77ae500b894b3b70ac9f11e954cf5012a37a3b3d074ab9284f50f99284f2ca4f43183eba85c36cea59c1929f1c61f2fe166748c00a412924e959373bdf6bcc3870371510765a0f740db879bb76dc19c7d7f6bb37e849b520679b0abe3b52b62bf567fc4c78f517779f550c77d4bed66d23df9cb85b9d9b4675b876df5005c41ebb873f66b12fb0814d5755b07ad9317c503fcc8e1b011031306e59167b4228fa2464e11deeedfb8f2e19b1f4414b436c7c9022c5fa072e8598fabc25881a3e598a62ff079713757d6e298801df52a618fed16588429f5b0251e24b94944b6a257215fa2c3cfc377c88180392421c3281dd6edb4344e5d8f6c01b7f53c2e20e98ba55ae0624072db571c9444f9a97ec35d2fdbce0faa2d4892119c7d25a5e37866c576d1f23a5b06e509cf68237dd988c7da737c275cdf8fc3bf4406ad82dac8503186faadd4ed16bb2dee3478d3fe47ddc110bba8101d7e9425660a43eb4051d9c7ee2b4b7db696c9f202dfbba2c5d7e665b357066e9db5603dd20982863d553bbd805885174fd2fb812138187f8276631e41e5a8d8f249b7cd7875cd60bfe720c81e96f23aefe74f2607d0126f5fc60726206d6f034d8d5acfe2aa8c7e94c2db8d109da645c193fc60b49603e4140e315ff687db97dac30e7119c64eb784553721c6c4d0eb271894717333cae632bcef188ff066cef1aa78c8eb9eead35524a29d2e737fb46dca01b7a13dc8c1bbd316ffe4dbe3937ebe6de0037e226dec09b7f03dfc84dba416fc28db8b9177f0f598d49ee965d379da1a5db9a51028a0e75de6caba4462ce32040fc17c4cbb6b2d992dd94efb512948ef901eade66a9d38d3cd10b8bac93622c424b57c0cc8d2c37e8952747a07d4cf22d69975acb5b3bcfc6b279c4a16ed0409498ef46fe5c3945fdaeef015d437ea86d93652599a21b20961b513c2b0b5c380ab77429724fa91ff54c2842116325b4e7641710e4c8f286fe8ef91d42bf5834def956358d2aea9608d8171b7b46e53433daf4789a8f5eb470b388383e47922b46ce9e3bdda65ef45ae5a54b94bcc43e9558c905370242021d99b576cbf0156c54db2b29380e6128e986432eba8a148bbe174db0b41e4322f69b3471a7ffbcb7a5ac982943460ed94cc7ab35ec3382822c2c9e522e3f85bdeee03fc5b8529eb912f0be2b20bde966688b8dc4e3dea40bbd383d86da24a5d69ac8b44f454f72ae66d2f4bc2d1a525b4ee4491b41efb20a4d378acf2b30bad055d84b00bef3b0038a9e47c6b48a3a97297b2c2e36709f103e67ef9dbb603365ed557cfcfcf0a8ac925b35e028ea08cd7a2d50aa5e86bcdecf6d76f07091e82a8e140333d85f9b64ccab06462a6de621f43329f458f02cb3ce0e88960ac2d69ac923b1b8e4269a58b80280b4dc1c640710e820521b80aef1d235a9541b878d7a3407baa7d3ef28f69774a1e8dc5ac3529e380ab43c07fe71c0e92c24ce2fec0ce5e9443c39d4be35c3820475cdb14e2605f52c66ebf3101054c57c484543337d871e2567727933562609321d77c4205888c6f77f384bfc7ae5678d5230e3bc055578bbfb32185c9bd207b48a2039fa6a60932ffef31562455a2b08eb9f836677661b06c9cc727e29e5b2690b6cacda17333a7e78e906eeb572ca2fa469af4a91db26546642883452e05c838a7e43cff8b9efd5f4d132c4cea1e52a1f5edfbc58eddbc2b2f5ab78e8aef57fb168858616f74cf16bceb3b48ed8cac81ecc686184f26cf88b4518eca79bb7e81b0c7ef52d61b8b887dc8b0df57fc7774cd842d9368d549889a59e807c2edb2a5658a84da823f754c41848d2fd058c23fae85002528ca1c207ae8264a0f36b9733663b05082f8eb845cbb848385888b1644f342f931b49f8b81968ad6a8c5f55004dd25d3ac64fce4dfe642be0d76394e7753640f3619a3ebc9126f59347cd17210ade0026b3a54d6ff49bfc1d4423b3ea8f652ac2841e0d16b5a11ee16b2ba9d71be1fdebdc6762c3455ca464581b49e67b7cadd25b8744679ecd1a5b6e3eac15cb7187a65ccf5b26fd66aa63d5d8ce1e263ea6193248a4b1a9acfc8d3195aa8f6a6cddc38d2935494c5d4423d592444074f67a1ca9689a925ee5e1b4d79e5b2f61e954ad9c68ed214a5030db87f2b5e76965f0a14b43b6a2899d16b1fc419a68bb57bd8e76c70e73fa0bca537c28de234d23d575cdaf267d8c2f0892ec670046c19a5a15a88648e224c0ee2bc0e82f5cf97fc582fb4705a296fe726a0b8e25d855f25c52f5ef1d6db29eff4863ffb9f687a77c5053b5a1ddb0bc273b2387e22dde3b944f5e365ffde68fd96bd5a143c274b80d00e803b1c0d09b88da7492304c7619dfc1ad24a33866680a83fc164fd96b7eb5764e0c2c9a9b09318f5f96873427617807c9a47fc0aff2e7e31c18faf4677b79fcefe5d03ca622e3f1c63f309836de94a60fb49a462a7acabfa553c199a35cd673b852bb0ba3f33f4a5ab87690573173dfb20c2d6bbd3c92d78f53272a6908fd4f746f245c487ee3ae31e7b934d67d2e30bc3a80e57e6f4472a1e492b003300d9b0ed5be052f89b185b5e9c287e347caed0847913a4d11b226cda1ad0560a09fb272f60bf74ae7539158d54549d087f3d231f58c822d932a0eca10e054ea40584c63f967a8e9277169db7108db942b9eb12103b734973e4a6de3f6e1b94ba7944533a7fc72a6b9e72ef6a2370a820bfd88b123da58093fbbb776d0bf8215b0b98220ff28e0b30060c0f65e93e0f21a45381405ea8e5f693121daa0e4c04675f638580be5bf9600d6ea031c710d94bf4c0025da1c0de6951a662132b01cb4f2f8ca7ba0cd1f7469982417acdfc9463832dcb382e88a29021c05db3eed461247f9e0aca9056461b97ae3907a1a6f1170849641a74e0dec76e1768fce1159a227225f13b6fee6a208ee959573a444e6163eb1c3a9af3ae0d165f653f8cc8790282b99e48b8d288f67dbf5b24d4b0cf911e5a25f9d30a0bb78c5c18093211f897f87cbb6b3f989bc21fa216c1d5164b35098e44cbd789eb49bdbfcd2486684b9dea91607dfd797230b6f66f7149d08fe3e8057db5e1a5d0b7ba557c1843e0b980e60f6eda4b41fa881510feabccbf68a90a06c68ae368928dbffe7d6b574f361a5debe080197eadb66f8526a136b357f61be07166951ebb8163dc5001dc68abd8fb76aaa1ba0f2a79013009ebbd301530353a6c6e54bfbb790e7308cbf65a94841947e05dd5666dfe64b0d6a4afcd9fbbf6580fb7d936c1f55335055c67c42c9b530512765cd5f18261caa74d72c08800071dcb20f68c40263f6805b2adc7ca04a66b3c851b1a8fa808603eb59c2fda9bdde9b1f08be673fe12fbe470be523aea4d7078c4fe1f78858c25da4087a13dba925b4fd719fab601f293dad99a01313ac7ebb7a5b1b6548c7c7cd8d33335cd24533e36d0686eb451815e7ed7dadd65635ae01b5a790de84ba931242fd94d87e00ca351ed050f3cd6a69aba0765c7a373fcbceb102ebd90898479b57b80b072cc6d521499e006e8691f00df363df8280c322297208c4cee0297bcfbaa18ad21519d68db1232149b832cd3e58b068a516f6bbd0148564cb769011e0673f544018a2c087c2986048a17ab0e41351980760b356c40eae227bc53872fa67c92759bb25006997e909bb0a3288eb9fc5fa2952153e067a24633034b3c38155df49dfcc5ea9057e30f058744b4149ce2098f4ba3e129d173464d433aa4872125d676ac684283428794d936825c549274725916bd1bea56ab96b40e6c758f8006883c5e328b3505d435d04e740646b8b7795c77831600717eee1475203f0e6a0035c31e0dbd6238a463753b14ac884182e33aeddf7f68b88a6bbba8b676c070535df8243b30d67ca2c5d83007d55ee4428022759a325b2b2872354441e6ce7450ab0364931525a84d2cd0dd1e5fb4c3032c5a13c85319d2a027cd4f92f0647dbc480c2fdf37471b1fe5a581c27bf28f0b3fe4309570ae851b258d82da9725b54963daa7b0868313907ac90086ce9992c2f69366e27ad7bde85f17d68e11ec16d6cf02bf0ad6a50395e601662633f4410efd4ad4a720350d39f923ec6d8d9e90ab8fae555ac0374d58c9d037030060724bf48a1aa723bebdd02798207a9e501895e4d8da98b218b8337fa2e23c909dbe5526c19740c58162cd3eaa85bf6a467608c20c13574f6f25a86bd5652cdb195367c3390985ab02adee90ed24b5260ac60334c8f67bc19119de5644ae56f9ab6a87e75001931369e733a49e1f362d791fdd19acbcc1d0467a479f537a37ee6b56768a4048b20d49618e7ec7c5ff3c4c457091ed7c070d9508933cfe5c9e28167482367350874f492512b78db0226711dfd0a60e7cdbc9bdccd3f9c777cb5b602fbdca619b26c01128ef19c7444a974d34839e788207b98dddc27319d3d3bf553c11a13706edd1d2607664241154e8c0b65a22b3a415b9d52369987048880b72396d143900718dd979be7e38949c91fcc5fd980f20ff785586e94a5304907c46519af345bf0b5d88fadeeb95329e0e3fad074df1d3d0a2c4e6e2bab2c223303998996cee88335a2737ea77349070480b785e9aefe6f7c83fb2e28801b87d9e22af91122fe63e6f5a0390818e21dda2f910447f983992b8c8eebb7a8dff55230ed4756eb6524003c1fabe122fa15404f4f5c5e2fdd8497a5dcf1e560c0bf6cc53129ac8fd47b3acc5cc51b948ec8465a4cf23e418153039bafb72b2ffee727191c67a3af5964f341e59780b65658fdaf1789b6e7696b20d0a3ef719cacbd9151af5e1eb7a726941869667027719852b1e5a8525e0f04bd93360bf5d5cdce1fc84442567055d87d2e47bb74de815d1e108298063e228b9a77540ae53ce2d892fc2dddb464b83b66de9130139d7f9826f368eab5e46f4c9e408557fcb7094df543bbcdf85008324bdd4f8509430cadaa853bbf950842b93c257afe2c29a58ab4ca9028c7d65ee7fc5d93872a4c79c1568c4ca2fc5862b39c3112b37d22064f09f09ccff4427fe48f341b2890b33793e133063e20cc019b4a305e4864d9bf6f3e80036ba28af3268e4fe1aacaae2ee8c06281d5872b3c83d4267385744847c73ba71d04e3a06ce76efdfce2af047678f6c14adf4dde0537ef03e4157eab4e4919a0a332e9490f176a4a924425aeb3256a43364dc0c2487e126196c441ce8d2aeb098061d21a6bcdfe138eb3ec0800bbb0f4e67a2cadc265f4de0e5081e46189a5d0d814c625b6747bccfce8075db2326dc190406478622c6ba25b21f32370f56591d6d6cda84ae6d3befad814f545e6f5a02629a9c7b9848da20db39fea74d21bb878bd2a06944f6eb18062b730ad47f4004305c6c39b2851162a5d2491a2da1e8f8b21fe51f16775455749980da878eaf073a9febabad1b1df53450876b6b7afd9d2f9702d831312ad0bf0409bde499ce44170a5aa94185621e3c27fffc828fe8b8b775429d725fd9011b21722085d3449682ce3be6126883c42ec95e2981456d5b008cf85282bb5540d7d4d6944fd6956c26d11a80262fa9f1f1c5d6abbeeb635a303d8f1e9d2a75599e4c8d878aa5c289e8aa7c99acb6f9f670759a80f89bc3f861c4453e0dbbb2d19e4c1567792aeeb1129738817161e4635948bac70b43dcf14d631b817287b0baddcd03230083055e0040e41f8dd304a35eec42f38856ddbe30431a0d0847fe168d818825cd2e5b63276bc4231523164923c3aabb2007ebc025f24fb3fa370ab02f53aba8312c5d58443e4c799237336080b6342f1f7390b9cd5d8bb08b6eae96053ff51bf7003f73be938411b5ae9651af0a42d8eb585c15353fb65c4adf058a4ad693ab370b1ec779d630e438778848ca86a90e04015c8597dea720680d4a2ad3ead61c12813e39c958cdf76b420020e2df7630f1aae262753aa069b53eb62bfd052a752df419d62957045822bdc7753439c6afef1d6ee0f952fd8be719cb95ba151c09bdcf56998fb12e11db908a7b3671b5d4c7c36444917886bdb6642b6b0045b875ce9814297629cadb17277e77eaf00d5a67c4f5b9e19c6f7363fddf92a138bb63faeadf2af8047fddaffa5ee38e6f6806d450a430ca54d0a1b77947c63cf4592b280145d72e65f7df9f5177e672aeebfedef2904ee0800fb6510913d9bdc0c02cfdac9a39baed8447b7a913a1d0d9264fe65f7d93951ef3f7c5b028a9d44df082732e3d778069987b1b0c0e943dad662a7b3545e66ab94b7aa24001af3167c0b8bf6b746b435d18d0bece612b8b43d29c0f8e1f4b873c8b0f1874da98dff6faf9fd13f6709bd58e86c09b238a226878c553a51934d816dc35640cf92a16f88b42cebffb50b9149152077330094c88764e7a273b923550e4c7e0124cc3f08e1c99ed20b5954017c0ce5e7f6c12a5a888b78627f1456883a2ceafb2466b1c10306a6255ccd9981ac8a902ad23480aa116fd2e0f191b4c0c017fd5f42005f5d4b639f78e8a01dc307597bd04721375ace194100d066283b751a50acee2414709f29287f9574907d28033c8a6c81eb2236a88cc8f302118ff281a74805cabb527a2fe63b7fa3e2c411df274b67e4eb2f3b241105f72f26b270a155bbfb8b5380a0262fcf69bd3351ab4b88e95568528a6a2ee76b86fc4cd8c6d4b942739e81d22226844fdea114737b32253f5c890c9c9d0511bd82c49729245c9f846eb85a20a4ae52c8cc8c18e393c299cccf42a52c9819484938c09fb0fb6b9a959fc2afbd76f9b482cdef9b44effc2a2bc7857c5e08951ae3c6048004a1004b561a13b38625b179aa4a13b1d7534b26fa60c331173dfcc505e07c46af31914156872eef00fc37fc5291250faafb51b594d56d504043316f2854eb57c2c23343373dbfaeb466de0d3a13c9e23d44ca926547e81650368f04296ce043cc50fb94be50707331c348458dca8c8fe4c74f5130c4288bb779dfd3acb327715d26324b8bc360a6ef875f0cd4492e2114e593e1579b372430f2bc5e0e9f60395fd0e5e7cae91a9edcd0d8cd8bab184d3c0a0954a52c24508829a50930313aab198eea1849e06335b8bd59b8c087535dc922f95ac1c23b17e3bda820c568b58a9887ddf2874afab29f605fbad153ab7cac473c2844299cef997066483ecced7c5b6c3a2dd3019a06572efa30bd8df1999cdb37aa428e7c9571aa461533a87b77d4bea63053d7402c078530ac378d79cda1ed2be771ff9b57fb6ccc1cdf25788fc27151f783b31e55d18f1dc1e2dd9e5e6f13dda4dd54be4f45b62516b05d8752edd01197795404a80b3444458dfa7a1f271765b3f98e8b39417df85b20890c93e546517613b1c46d9af21ecfdc9993508b5d01790621726e986dc6f1bddbe981f059cc4cd5939a2d2683596388696a9800e94bdcabd0e974001d14692c0ab56a92e3181bb5e37aa793c3a110246069ca3b6bc138343a66b3cee51cc1a0f8cbd9a00ddbc415e13c8358f2c2ee16512df20bca0f17e5f1b3ad8e6ada7e03fc9455472cedb24258109a9b69869b9631b763ce3f286887a87ef9fde41b753d27931a9ad9be9e136fa8420ee8e0ec4a39eb5346d666d9c72dd4a9e47728370b8215ccae62f120db4574e9035a8c3ba20fa7615f8512b86381afe569cb8054c32e2a3fb0f6eb445569c6afddfffb4509c4c050c01a854b431646ba96731039a120d77ea00c4521b0b434d3d93ca00a482268afa0cd9816e028a832af2a69b26e4c5cc987829ea2422a6761a07544e420747e459f9044851c0e1d5a513a21a4027ce75b4b926665114aa5b956634dc7d882af40427e1d3ea7e61ad47d4cc404be92413267cc8a5e66ab0637082bd0e6078b1afde5a894cd2719811578eceecc3cbafba0520acdf5d56a4b38958ec1d34951fda54466dfd8227e3a04e8ee254a2e5551e1587a9b63f8e893c2757019df6ff043cb549c0995bc6c87c29fda712ae51fd91285a77e0f7f02c47a82e7dd63b9a1012ed8852e0682180d03c0c101b47fdb9c6fb704cbe7a8ac727b6cc0962250d3c6af4ff174e8dd43db82c426df1daee3ce6f4b54904ea0d76baaa042583960baf88e4e98a10ab783017f073de1d1522254b83dc15d1c86b605d537caff48df61ab5b7f2568b1d8ad6cab33ef35ef3f2d7da3e903ddd3f62fe2726ed90aa9d750a680a27ccefc139a683a28a31ca9070f7fba61aa92221803e9482fb9c8bc1dde43d60dc4d1387fe14ae65d512cdcce6f0498303e26a0dfc88e0102b8290576de48f74105a4d22f0d3273bab35a109807ae16c5c4182069a4e238b3e1e6e4cd9f4cfeaf31edb7711ad03f83c24728ea0c4f48df968fde40a7dd963373216c83ed0b9800b6ac79b952e6b48338bba8651b0039a0d7fea2c8228e6c55b49359487e9ebdc88baf10be59488ef1e915f4e74c641273bfbdacc10cc2ccbd9bd19ca255bf7477ce706fac270bb2553dc1b6b8131f8885f3f74870f1f2aa7042230e523f9704705c881edd2e74e95350e92614ad4779f47837eacc1d654b47e2c34fd1753ee642d23658ece0bcc03a29669bcf324484aa5fca881680e38b9171fc1b7674be92195b3b90e7ccf9624d9ccb1d4fe1d61fc2e1d0ee6a2748c8a04a54416915955765b9948a3233914f4a5a7ce2038bf0c920d8cc6927e75492e5f5a8f504c0260577a8f1a34f4e737a016cd560743dde0352cfae47200609de0b2e2ea0677682e53228626f77a1321042fb249660b10a3e42ed4bd41573e48fd53b97a830c8572f1e0673e99145566f14254610be157c4bfbe44968b9bd6b9e140cfe27f871f65eacb2a3a6491837163c2c93c743588a4c677db0948ae16d0d29ecc042a97a6dcdf440c46515ef3af55e4d9380a1e28cd8cf66f8314e71e6214e4b6585349c67909378b96f37e9b050d86ad9c218c61714da4c911de151a7dea96d066d873cc66de3911e0e5740dc12d10cb70bad09824b01e107aff7b0edae7bb0f99ec71f32fc4fee317406cc98040e8a0540124b1030b42807bdbffb2aedf7ead7e46e73b58f6f6e557129024ecbafb7f6f7fa6d88903b934dc89a662222229301c2b0d7220f52ac29b625d59694949494c6a149889c06df5f79ee6e8d5a0af413e415fe0f1b96652e1dbf69be8cd78a365de4c217252fba70aeab7caa06cd937d96cf9624ddc5b9ec67f33590b95b92eee2fd476d49ba25025d081f85ac81c61402330861c4392b56ace8e8f894e642b536568622da561ae562f92dcad78f20437c99418bf265c5f7ec8a152adc7fc93ecbe70a0ae57bc68f3c0bb5751fcd67c97e54aa1716edd21d042a3814925e2569ee3b2aca57852f55966dd4f687207fe47cc0047e4cf2811614a5279cf063f621444901ce6997ee31e2e23c80c539e71019ea432b40d101109c93d25a69451c08e39c21263efa50e20c127c0cf1c1c439d764c3f628a2944409010740c2b9d21106f056a010f594b6779e50e1fe0b8ae7b042e5b0b28245e93e44ac5446e47a65a8d60ad55abda27ca188b6950694e0e26a64c8b4eca7460f3d9cebda97f478c2b9257a8471ee9932a0c7a69d4e2ebf65e74a4638572ac23977e34a4438e75c06a46c5a1e79e4d1040f171e61dc1d8338e7ee4073013d4a42385722800741385702e2073bda30d9518533d9018533d9d1c4921dedb3d45c718e28b7565a169fd64acb92a98254ba6b0fe45ca9071e5c92e662e5ae3dd01657960105a1503a3aa82b4025c8a2833e34f0c2152220a4025a70808a0d1f2cf181c90330303de00e253035cc94588c40808421043923050e86d0024593331bc4044c6186195216014101205c40035bf4f490879001aa7c6089898e33ae268b890e574a32cdd1c524471372dc58b0000a38e14a4847ce95cabcac58b132e38354a2f4e2da58d995595f7e6bbd349473a51cbadf5ea8eca7d42a652ce79c15131c554c80e40d31a8b082b534471d7956765fd698ce958c4aac925ea2c40d6196bc54ebc57986fd14a6622d797272b1fc11e657591076daf66b2be22cadf12c71408e8d09378d10b1524d4a3838574a31b1a04bcf58aeed258373a522e74a44a5ef5cc987f162027a1cf99f2a26f0042ba562a5bea4310121e74c13d0e0c4c7ec38275429adb9a6a8745186edd54be398c636df33162a73b152a8206ad250b1348df932d9d6321fdfb31f9e1e9fd284b0ced23a3a7bf5d2ae304095d27fc8f55aa15c9b560df9322bf82336a2646ba8a1a3a353e2ceb99bd276109ea014eecbb82be61040a9860da01a4e7c95efa995e6c1e823a50147c672aea49d2b0d956e20e35c698c73251b4a614a62d6402311cef2dbe65135d7840692732c6fc4f546f994e67244549c736350a633f8d8b453180786e98c12beccd0d25bbcd784882280b46927d76bf5a5e4c5b9929073a520bfd22c24dfcf385702a2c1b95217e76a60d8bcff5c54dac5d247be4c8ac8b9d2cf162dde4c6aab0143f3a519542acd4b32ece13657c947f3a91a1de74a599c2bc580a594a9a8a1d27385670706577ac18adb3c91eeb26d3ea55dbaa77bd7a6b56c497e061792ffd1322c99cf96e4c16c2c5fc644461fbea8931185736e8c449cd35efd28537d4c478b4ea97ccfb66cde6371f920afdada1bf1cca5652abd69be4c8ae5a54bd65e3c320c2c8c0fdc8a23bd18e59106ea3e48beb374ce170e5cce97252ec78b232ec74b22172cb139c069088cf9451c45384ce70b2d0ed3f902044c07104cc70b2d301d93172de7301d2f6070988e171a3887e974a107a6d3c513ce613a5d744c07d5c59346301d2ed6c074362eba38e74c5c9080e96c21c6164898ce161e68d187165a3887e968d1e39c03fa70ae86e54c0e18636a4023a74df32ebfca583a58e6ea9ac7f934e007e79c6aefd4c9b99214164a78981af0c439389c298b312e89a575a6da492e97ee3a3addb38eb8f89efd0c619a2e4571aed4020b35586061801615111d30a48a16d0fce09cdbbcff18c0e20d2cc4c0820198ce0ab5a5304ce77b0d85e978ff3d1642384c07880b1050c69a346962c2e2052cac60e1c4a134541417309dee5dd85051505838ac4a952a57f871451a875dd184115774875269560abb4208d3b9e2c915225cc181152570ce41c1749e60274ca749f73c28560ab5e2482b8e64c5152bae150fd371cea101c53917061a42d0d0e1301d0c8d6a23d27419686070ce69e15c132caad8a289de342f5f5a48ad1d970fd2b2f8a0eda56a69afa0ce7a7d0f94f4e221cae25d3e4859cb34cd03f568daabaea8aeecb4565a16966f71b972e47f5a2b2d8b8f657474563ccc14415364710ee70d0d1c8e1b92381c371071386ee4e170dc38c3e1b84186c371830a87e3c6111a2c31b50271a6561eced4928033b5c070a656029ca9558433b58c9ca9d5c5995a3aad169ca9058233b56e9c297bc49932439c29c38033656de0e06c3082003cc031a207673282e54c460c399c35ca389c356e70386b6871386b6071386b5487b3861487b3c60a0e670d129c7319e4e06400e97026b88633c12d9c0946e14cf08c33c1229c09fee04c70e54c308c33412cce04a9334127ce043f70265801074c7238d81270a64d86336d2c9c693fe14c1b0867da2e67dadb99361767da3aceb4a37020809c0f502d6742e1e04c2832ce84c2e24c289d250228830c875306031c4e190a70386508e170cad0c1e1949183c329838cc3294306875306158753860b0ea70c121c4e19268753c6050e878c491c0e198b381c3244e070c808c4e190b187c321c30e8743861c0e878c08381c32b870386458e170c868c2e1904184c32143078743c6e670c8f8391800a0032618588081731c5cb001132f4e9cc9cb07cee4a5e44c42843893101dce24b486734e830e9c08a6489cc974883399ec70265319ce6492c2994c4e3893e908673201e14c26963399b63399c2389389c7994cd0994c2838930904673201c0994c35ce84d38833e184c0997040e04c381570269c0838134e18ce84c30067c2818203112ae8c06160ca60030080c02483252158708110b4f1c418b7e127a2a4e0ac7056eca19aa4293040710206787a525c59a681705312802b75f041003ee8e0830e723ce820c754c2a9b9c940035338332e873e9a1022014f38e77e309d263e20d4d33356cdc99949423a2af3726d5a0ead8cb532c221554424a6863060be78110a02a2a1cbcf162d33c89025062cb9e70acf4e252db000e54925d8004c2881844a2aa9040c1334b84d3b65ae5692c699e0a00400266e06714ba4195aa28a33ceb96d091f5a4343d812414bf4381705d3f1418a2aa50dde40a30e0cd4e0a18415284f3e70060fe7cea871460a16cebc2404712e960f4a228b24ca20e92d2732434336ec94c637dfffcfa4f83e25491b65ef3df804cbb2a22bd82949af5429fd9354aad72ab5ed6dcb9530299e5a695652cff4b6a5f491766dcc4bd1982fa3f9299e955149693dca34226c5bbdc060a7a1216cc888cb104bb3b2235714bfb19fadb6285e8ae6cb645f54ac4c67aa24ddd27ea8a5b7f82120df350f074680e09c53a9b02945e8e19c23dab814a185098ab6576b4a92abb55a81a579114f8868c4b993f6fad894292622e6301121c61495eaf589f881882c5be6220204e71ccb8ba9008674afea2c5da4b16d672a1e5301a614a0e59c7f391b6ee2c1822112c93e2b35c419ce3956ca4c661aa208e79c27d2ad3f84cab9216870ce7922dd6a22c4235bae84c1b0a46dc4534242d4e1dc8a23a9f08488855a7124210ae0dc267d3e70b99a1c6a6608e210e708a087732ded8b082044001e1f8ac0748cb28cc79b4905750912e2be4c92372a6950ca2008159c731e83ce9530909e6be74a1744cc9b49bd5c98766c00c11d113f9ce19c4ae5a4f8218b73aed4c487427c286223d274aa660a1f9e60d09da907335a2a5f842a312959e04edde7809d8cb4eca887300ed32971e1c111e79c0d0f463cd8e07618a3b4a454c14d123750e80001bfa9b47f692ad5cbb99a29a51b33a9cdd72862260ed80488065853aa5992d448521ae792ce3817267361a6240cd3411a04290b6dd34ea6a3363217e65c8d22ced580614822ced5245253021394c0b99a439cab21817335874831bd0c71442cec55f40afa71ce39ac101707845670ae5489ebc7759fcff2310a62653c47fee7c8fff4ee7bdf39f23f2723ae77aafbd52a85250d612c2deb1e2985053b9119224afd9ec24e499bd6829dbae75e4bda298db152581924ef7aad86b66d083b6d50a224b99e68be854549f1cda7b3b2a34c4b9609ad320d0bd096d29209f9b8b21f57f6b379d54e11a5543973c200190fbdb3321e130b042c36dca97bccb732be61ac5410f7655046da1fe9e818690fe6b4b1322c8a6aa73696df308db1fc9615714c7b653560a7cdf75499974b6bbad5d2586781856c4b1d69ccf360a70d637997ef495befd786b1b2d60b1bf22fcd3584652e30d8c9a4ca311281430173690cd3b295df362dc4f266320d4bf75ebaf79d95e29b07f2e9403cddbb58a92daa2030ddbb744a73e99607f2e2f241ae2dd3e2da5e3ddd1f659d958d4030e150021f1c38e09cdb54fac54a9d3892de726265a9cdbf3c96a4c25cd90f766ae259992bf5cacae88f69ecabfc96f5603a9e955261abcce5ca78b053a67933a914a6bd5c9e2849afb657961494f56098c65a2f1da32da569af2c69c3b2aef932fe28cb829dba4779edc5fdc64a0df98ff9221f25d3bc198c058d85ef8335e10294c5603f3b598430a02cb4938162c0320f2614e4650b7662f95666638126d80e3b60dd6355ac603bec804179b2a54ede6b3fc37eb0536745d94149ac1decf4da52434398c636bfbda20c2569daf7d43634846d51b6ff33dfb5e65af160434335f08061daa57bb0285deba28345a1b24a1505b5f4164fa4ab601886e98061196b68682863286027556ba5917c99948b6bdfb10cfbd9e64ab15e5c00bb0ee7dc698515309d9e4245d9bed7b0ae7d0f112bb57567f91652cedbd6a7246fd40236d47d7c2b4928c9cf30a48f3c6b08c5ca86b0a2a30d73b5bc11f7653af6b3246fb4ad0026875491df18112b95e2a955c6cab85769beb3b6ec674bf233643f497e86ded37d76b21f548d7344acee8154aad40c3fddf720d30d07b8c1e71b3ce8726950d0e9e5bb2f3aca58461a3b259d70e9b69d805d1a148411612bec9e9337cacaf09f156d3a8b6bd3522fdf55d913ace5bdd10adb4e9bcea602869d8a5a435bf6592e284f30bfa93416ec3414e56b680873e9fed284b021bfd2aca12d5315b930bf33169671d74f0d41896245888a966119f2459bd7bccbff9f6d29962ee29b2762f9325e2505db78cab5a554aa1d2a9bff992f8369a12718a6b760435684a80cadbaf6dacfa420653cd849cb567e258595c2b4fe9275f9ac14e6b7d4910ff6d2c9425c7eb0131625cb501006655b61f504dbb0d3b6258ae68b5c9e287361ae574ba5a1b0525b8f8f77a5b61e16cf847c32a1ad7bffe357fa87fb565005829864c829d21be65f3dfb11fac01454c9228904f9118447500582da08ea22680b2d986b651894149e602e605052c0b02829603aad0c8b9202f6048bb261647ccf78d0104146980e9427da078170ea5d63ddab543b4089b81390e72c2d45f3080042d22ba01c8084302b18a693250102c19d4a352310818d0c2470ce6167a2210be76a969868b871ce9d581e64f1d2c50e77ea4242971a4c07e502972d2797df92bc519421cd136996de92fdb81a1034d992bc11c6c64d8d2177fce0bc0d98b238c0b4250ed78495c2a06b8b165be416149c27d274d115d7186d0c6bcc1fb3c78c1973c2181b983461725a928173ee06679a4189edc1d33b4129ac6cc301e5bbe63721954abb60f249e39c43a390159e54713521a821c44a9692e3ae8cf55adab5ad522eaf39e7b6b818ca9862c0719b7642f994e6c22286732cbed25e736d984f69ae285450017b58952698cb6fff6715a8a0820a58152b5867f90aacbb51c3dd7ce16e88b8b9e26e78dccdcecdcc2e2ddb4c3b39c070a6870fe75c1396c684f030ed44d283c49522570a4c4f968d7594b166b83289732d9617578aa7542da46cbab28673dd67dbe1a95626e4f24144ac942aa535a12bae94eea2f265bc9656267465ba55a661d936edc44303b66dba75c54e133b42ec18613a58144c678b62a4854c3b1a6c449a4e99605064d34eab4d1f71fda5e0d4ec38130ccf398742d5785713e604afb592f615819400e09cd3cef44216e72aa8a235ddaac0a7088ba28f34dd72ce6d9072262b27b7692723ae35a12c28d48eabf1a62a47ceb96dd37cca2603139538f270ce31c180f35d3be756ce44858973ee9ee0e949d9589914d3943a4e465ca6b4e19c51669ab203a613c38fcf0fd00e982945ce3967d279c2b92919b6d23c3a20e82c3915613adbc6c36cae4d6be95101f5eecba45c5c77f1d9b44cb5f596ea7121f99fcd27fb2c1f57a60aea3e1b92ef2c9fa0a3eca7a77afca68bba7456c693c47d54da95098169adb42cae4d6bd12edde355ad9426b4f5b4565a16970feaa91e2ead150f13a5974ca8b7563c4cd73e0bcf614b0eab1ed7a635df65f33b5bd1a6b3f89e5de972654bf23374af45a5da716d292dddbb3491d7888876bcc7d2b305b1bc388b47a667565b6a1583896671ceb93295cee4c3196559118a679b2b5369af1df99fe9c421e92d272c5176d60bd37c6bd33ca72893bcd110142858142cca93273f6b019b2add35c6d22a5f846d2a9566f956769469c990f496ec87e5a3f9ae71f95c5c2f2e41471e4b9609fd643fdd6b97eed951a9f415d3f3a66772cea14e9b4aa5f76b4b6aa97ab6dab493b64d2ed800f5603a28d40f179f20a0fc059563d801e222148442e9685ef36650ac8cc57d6b13427249e1430a1b52b248b948424199e6c570df0a722e0be798304539d3c21fa61660701aa55269541177e96d73c3c44af7ad564a736d3aab4d1f5131a30e461601011967823289dbdda734d78da7276577293ea5b9c670ae468c30c0a8f9c28b27137882c6398c0a869d302dfb4f90589a7b55f739a1044fc268d986e47f9ef4b827cf74821a4f6edc0a80ac608673ee9db05aa109e756d8c1619e48af3084b9b42bc5f20101470089985678e2dc0a16a850890a89b82a51aa44a9a2e3553d8562655c4c2ac0e18cb8de584fe92ede63396d99ab9572613f4ba95aaba1a1de5abdb627c2a26441d8697b61fe686868089b02a5056c8ac782b180b58079ff514fb02a582be542b9bc6a0a9456caf584ab344755c1309757691916cc0517b028aeeda50d0d0d61a7562a609cb319430ce78cb40c4b128f733666c248e2091272ce391b309c73365f38e76a9c8d17cef514aa0b7765c5c33867d3840d175bd444b18573365a38c0a60136436421cbe8e830000be76cae50a1091912c898c86c9033660837668f3175682f5597ae4a155d4952b1b824f9195e9c15c9775694685c155a96b2a1628a1c1b9a90c239e79c4d140b70ce068a279cb371c246019bf75876a411d7aea026bc6aebeca77b96972ed98f4afb9eeca7ab5e1918bfd23f2ad50b4b6bc795fdd460440d3dac38526bd5595e5aba8594b34c68f31e0b112bf5e35729ad7a651acb8b4bcb5a6652415b576559bc6a6b57f6e39c0d132ad50b8be66279e99ee5c5399b25cc28b1c399209c4d1208e8be7b961795eaf5c3d25bbab876342c9be6f7ca6ff13c957d49d25e9bf69a102b4ba558a955dff12a9de2a9fe9241b5a588bc1695e6295611f742be8c2bc5f2a2577a7bcd90c4da895f4af892b3e248394248394236388783100a4220389b239c8b619cb33180119b0639413b7e09721214825b7124f965bb616c981a868699616498180686f19acf023407d01a5ba4a1101afa706ec59176a6e289b2c25b80ae4a8171ce6608dfe39c8d1004e89e8b4a1544f72a15109f8b4ab5a352ed3867f3c3e69c8d0facd777cea607e71c131b1e5c4ff9ece09c8d0e5e95fd78952ca3a393d36500395d3c703666a24caa10e91eb999a4b5322fc7f2b2455946472796c93ecb67cb3ecb870acb6bb1c2f25afc4aff20e92d7ea559daa5bb95eed35328cdefeea3a3a3f9d66b5b652cdf57194bcb342d6fdbd655293056a870ff2545c47a6161bd7ee7ac0aef7469ba4b52cf785c9a6e759fa49ef158b112e58df0755f49de68d6578ff295a3650b9b2020ef4a69475d7bcd391b1aba3867c3c5e667d6572c839aa19219149901102898cecfbed79eccc0725b6bbb2f17f75fb6546b674bb534114bd55aa53619ae081d6557505bcd07727cb6c8f169c151d97ccf5839599a88c14a4e961062a8e2072074d8014b1ae7b46bb3c958ae63f91697ec2727f3d193937beeabe7e65ca162d3e3dc10ce3996cbe159c3a19072785a2ecbe171393b6d3887c4d230b85e10e40534ced95c71ce86c7399b1d189cb379c1c68a7336559cb3a1326527a7ca112ea78a0c2ea7ca055806a0821300cea1b288cba1e285cba19283cba102e472a83c7139544a2e678a202e674a1d2e674a162e678acae54cd1e2729a98e1729a78e1729a60c1c4272827b9525eb21fad6b9eae79b6229796e2e1f12aed0af2dacbf5c2e24ab15e44a96d9b923a619bf65bab78914b4b6d4c63ac8d6997ee508e4e4427ff2449b37cb4e6b59629a594523ae79c73ce39a794524a29a59431c618638c31420821841042f8e28b2fbef8e28b2fbef8e28b18638c31c618df7befbdf7de6badb5d65a6b6dadb5d65a6bad94524a29a594ce39e79c73ce29a594524a29658c31c618638c1042082184efbdf7de7bef418c31c618638cefbdf7de7befb5d65a6badb5b6d65a6badb5564a29a594524ae79c73ce39e794524a29a59432c618638c31460821841042f820beb6d22923dcb2f2a921e238e7b4e65dc88160b81c6885cb814ab81c580097037f7039d0e5726091cb81635c0eece272200cce390b7034e8deabb29faecab2b8fcb6ed1c652acf93a46271c932a02bd9399beb9c8db5a96ecb7e68d73c362797a4b5643f40aed42aa5c5399b299d4dbc71ce06da3ce79cde3acf41d9956540deb5bd741192f740dbcf15cdd37a19651b2ba55799e67aedcdfb7df4531d4bf7ac23ddda349fa455984a772f2aed83bcd665e55d3e36271b293d5caefc6414101720a08cca5abcf470d9820ab3b34547c7bb34916e655a4b4b192b445aa88b37ca8454af9e6db1b2f22e9f1ea24ce55929225666a11007e58973cea1a1d2b460e166d34e491bb56dba6503828d009c66a556298d6fa9bedaf49106450ce74a8e9cc0b92f336c2aedd2df28dbac58b92fedd27d6b6ddd3be7d060c4b91ee74a8b28e2dcf66428ca5ee4d248a9ef57afcd88fba22ba54346e09c73e9959661b9740bea9ae752bf699eae79329073dd6bcef554f6c56bfe95836e7121332b992cc62708d593c5f868d9f101ca41a80ce44568e727069f20bd75ee1d99a942019ceb7165aaa0595fce950611c495a982f040b55a5a4707434aa3b6e9e8a05a29dcdc085f4ecc38e7b8e4a0e081d4be11a2360baaa04082733b38e752d8b4d386d27c2b07051ce7dc0905265ed030394013409cd3d139e1097782cbb99c13761c6a9569a8d6b6232689c74baa87b5a3bd38cf4a2000c43995a6659ea9543b5c2ab9c0a601ce4a49851a0db89a3be8a891c30a139e68aff900823a1819e29034687cf042870150f1c2257d289386100ba070068a0f3c3a34b082e0401a3e6cc0c20883dc2471a6873d840421010fad033d5cc105171960b021901e567eccc08563c2a6073b089522dc4b8a1e6c48480186020562f0708126d28c818284161e9e385a2246932a18f0c097306a430427a6f0e042172ffe19451ed901920dbe9cb13532c70e7160d0851c70b0707738c3c408a33b8422d9a10607f06001810847767032c405a830b304a5432246198c21c9d5a2431a3d7f10a0850360d161089b10948ca892870e5dee3884ea38e1011d4408416e82821a6e3043c81037234489c1073363d8ba030a2a6f4687230c3074bfc8cc60b960ca0f52c02061c68466926f002f5a497dcc39303832b325a90167aa98b2449a2a49da065a5cd0020d4ca21248073eb8641049168cc053c718476a90f2d881b664b88108690a268a28838b970512d1163a50841839032996204d139c372039a2c40786590815638ed2e8400107097a10e38889ed81146c44158e50364252242140ebe8c91d658e70410a316518e1400b5720c1c3076526e0c61f3898d16a943182881013a4f971a18c50900961d05841a20cc6d3c3175a28d9c06b04362908c4030b28f232e30e4a7e8e98b4f1faa1013e832556442f19b0d0e38f2e6164f0fa808b1f3e6c13a0e202810663c4372ae1ae2e620062041878820ad72b8f0b78719901c1b5f3cac10f47d278e0ca0011121400a60105d8361046902e92806e362b0081c00973b8f0d8540b60e346130262ab813c3c6c2863c756fa39c0b6032a03cd0e1974382412d885e604ab024634d18811da9e8005565c71440f4d0a255a1455281294030a28792300211ca08f1ce088f30366f61024070440208d14285183510e61967001ee78f0250714b448c10de787a985c89645319b10410b0d282a7c000717422d21b0437aa428e24aab8b085ef0e001dfd10a018e357e4833c6876c10291460c72a00756462f090737092532533b3993c6009019ac8f2083a2c18495126c309a40913acc1431496076e9af01089fe8395851485382109103eb0729001e88f4988a0604de1c20429454b82b5a4c9186f18e00d0d561830030174ca055a2b298402a0c612828460f5b7e8a2023c5c0e59c5265f74a2d85050a5a084c29947ceb0aa39a6086090031239544b9c496301770e0ca8c89841060e046810846a05387aa81954a1468c94e8b821eb2c184900870fa4c087255c1815e1c507188dd4300a3a7aa291275f9ed1005270a3000d48440b0e861c527387380006389481c8946219c004071f08c1b2d4b064c3c14788103260c628091c3c4881c193e68b062940848e2842d3b3811417d81f1bd8a1a348ca5508087becb1c5a4603803102fbcf8092385811b4466be90618c220d100d21091b1a105364c500a8d894f4642932f216b029d0d9a0881ec2248a059ad8a3a8a6880c806172d401511d003041110738398448013990218604251841a41b41401828c8a0075194347820a4829e027c4724716204384c71ff1bfb0f13a8210624ff00385432080a88243e9822ea80001917d0e09f90810d3c92440655bc09062001313d20697f4608fe030889219e00310881d3c81c24f03f7c64e04768f3c083f0c58b8f2b495ce982b0810240aa06b587a1801afe1a807ce949d903a0570652efb1575c8cbc2147c789425100a5a80ace0140be84e1818112ce803290b0444114792b09268cc218c20daee3035026e48a3b7805510b3b0243b2d8789c2008850826c48ee204132a21c4e9b1bd1984402184db6243324298c1c311a12549930114943135d072e85c8992c4980d6825d250365ee001498fd98c38d12149235a8537f448219b048ea1456819216a70a234c4c60960749e2832c510113f5e9c8858618c21a02cbe1c51055023432568004ca62302254015e2c71f4617a014419521004210d1296305540f48600102994334549656104983ac6103aa8303d05317058471c31f59bc04a010303edcb0c5122e90d0c8a9e30657055ea40c79600337c070d3e364cb0e5ddc70019ad59240740e193d7e00731f20c28b0c9aef85143260c44106872a806449c0202b3293922d4b3ed0050c1947472b8f19b6a43116f8438411e400d93026013e645163c7033b8cd1114d022ee0f3c6b420c43c41102db6d8e088cd1843208055b1c10d2964088a23044ed88084942b684cc100091bbe18408a265c9882850d2730e1e14a9849821043820eec0a6c90428598087c3082ddc1490f628238ca02c92b218ad97284034e10421a2e6204700509e2f000cd0b350462081b292e42a8a30630765ce0a04c125fd4803453c8e2114d911aae8c19c121529eb851030024312165d9a161f848d30139d04c16c260918140ee0f50d40893a1916ac4f150200cd64dce386a14e6668b199b248308183cac4039c11b632001068a147080c814860002a65b6053410025f801ccb3e2046774e0e47f89448a356a3843a7ca170ac8f06290a3094abe28c144852af2c0a1e38b0d3054a983003f395f52a883922a940f007851a445476fa18317bca8514817194032c1025e0a0084481f43205ce185060f30128032b018e28504264c30c019396c4221e8030416248d8c1122c3e78b149a808307211e78c0b882882a4e4231141df100ac2505a19c342e203347cb84203f1c796d3ecae0410e78848c215f8ce112b449114009c0f0a04190153090006311fd45109323b098c0931f274019b842041e0d3e4a00aac288830ba0d4300750ea046d95061818688e8000099c149903c80520033ac2b8a1a2a1026bfcd1851bd40c0d4d3811c297c9421a1a8690406082c3cb8a06166ca88140055e74e872820f16f0c84dcfeed2c6073e60a24e314217034c82080d894882eae2c589143cb0820b3e7469922310c810138082cb21574c000f0d54620317088c5087034c5004800b10616c800400f0c0c4458b96233af041e3015c0280c5152f3d9a50e22710128040811f571cf0e345242924128035f8393aa5b1013fe6a8f2c373449a2e06a9a2ff6ce0850b8bce13556cd9830d2818486326842d57a4400d00604962d8c2da710892c423da96cbc546042f4072822d365a8a88af95d0724709af2c5a528ca0e589416e288111313ed0c24530c8206f30d2a3c5853eac60dd9cb19a01121eb62832c5109819e2e856c40cb2a58319ce74818174a9b2c50c624210010e214cb2338313101051840715b8800c8998a152f9c1b222431a69c4e041027878320ca1f328e3470ada908186110040811efa026418e1861e98584027091f42088168ac48b3f98c21c40a659881668ccf0e4bb220819094c3078b510412b932860a1f132272d470070f5ab2f441c6061c01214d5296069c00290e40d0e82c1a9948ac08211492a50a87a2081c63b2c8624110443422850c25c490c70532c04200ac1823062a0470c61530a9116228ca81e48e244c9018248fd6e6d81204164af08862047cec6083254d030439014b05a4c0c2c4190f7840052c0160411d0091229888e1040b142b356034488c203702018924047b34c96dac50880b03c801221bc1811c06a144885216faa29108441b9ab1235888f2a4a444cf0890ae2471600a337a1e20a53407086470a4e78744ee58b245034bf4cc20c2201b0804912e3d1f845102d2039080e10a08c20c32a4441577a50b3756443f69dc953213cc107ca0715776e048b280fce0ae6860740215a6733c1b58230e13ce38c773c5938210189ce35989d0c415364b19439c733c253428cc0e3bbc137b08c173f0d83909f1c32338c051441230d4e06070e25e482427c7030db254e98f921f7dd438b2880802a9f94007246cda292787929c444a703939699c732ad58b85e9f856922b8701390b5822078928519ee4a47230d6eaa5ca38867956eac5bdb6e9d52a43f2454499a6bd3656a682f25929292eb4806919f6a37f305746f404f3ae142bf5b1cdbbb2246f94e48da06081efbdc64879efbdd79827d8d0093c908932a4338411b1b8c7616718cbb5a5545aaae808c3c2251ff10128ac27499a4669ba88ab3c254b30e040cb0552e4002011b76927261e7049aa24ad6a6da99e0e3857e28073253ef670635eda7fb15cfbf5a27c6dd0720e8bb2c190cbd90086212682e468f08673fdfaaef9cd4b91a38110cee568a072615c2c9dd27234d0b27ab17c8e0630b8965ee568f0723400c1b923cfcad1e02611e77232189393011f0ecbc9600d17d79a2ee239194831f483e689bc8b95cac920cbc9e00f0d612ced5559b693b4a6693be8703e5bcee460d007061e384d0c066174cb8524571d746c4058914bb730956a474727e7822150d0d2a44993e6c63aa0490565e430b9687296902067890d8e4c943915a05169cc9253c10f391520bd23722ad0c0c54a652d54f748a9cf532ebf2a72a5349d7363080e1ab819414cc40236b4d05b252c6ae8b048063ea83244c706fc30134595424e00431b4d504108150478a16160c804a6a000174ce240c4872d1a74001109306205683bd34715ed092450c0b136a2b42a40804caf1812ef58b95a50244b0d3d1650606ba3821ca28c21c60942b02554a9b9c00228d00029c0bcc032401095681982c00e7b913315702dee1a1d4091c518341be0a0636500a80510a042e2861e03d8430f020603913091421400b43cc0790520a48f3b6c7cc04e0047999e0f1052854b2508e0030a1d2ea440658426ac30b3a3421d7e00d9747162e36590831d3a3a393624e494bcc82929e1d2b2bdd3a596d1d171ce4ad1a6b72e3c9c95b4ed6c2b22568ab392369da455beb38eb2aeca328e5abd58a89eb1bc0a95a4b950dd47f92a72b57c4779578eeb40beba8f8e4e2558cb342dfb0ee53b13256852a0645262420a52e01c56850a86e90c0d61ae4db7b0140031091f939c59f13025384a6fb86153b2b1a064c112498a764c9280608a248d3ba930bd13c919e7dc697bed48807a94af48026082c48d9396699a57a9fcd1a6b1283ed82909dbfcb6d3bddf5c293045dca579207941c8a57a6d8f5c11bfb8583ec5593bf08b0742c122ce3924df83507006053ceee4da3c11d16b8bb2e9a21f1470e01c19c268d3ab4a2a31dab48be58b8e8c36bd22f360238138e756dee5e3a3cab22edbcba7cbcabb7c549a95a5b62497d1a6855459d6c5abba0f4a5b39e76e842fbea5b6788f6563448a69912d5caaa551f1344f4f0a51a61ada582f5419a3a1942625c91b395752c3b9521ace95d038c339f7c4392746913a8eb4164f129e9e14d651a6eda24d179914d1022bda741645a408baa2a3c37dcf78942f2b28cdb78c78a652695766850a925e5989f2450549af545a2811ebdcb669d566062220b8d4942194960d69a72d02250838977d964f062298c0c9941298e135ef4aa15699f651dcb73617b82f5302289cf31a169637ca5cda49a5559a0436b8d3e9b482cbab36952fa3a3f265bc0aa5e39ce990290e89c27408114587607169595177626d619d325692a98fbc5bfda69496e21829c977f64f79e537cafd3e8c29c80f3ec939d5fc4a7d318c93e44ea1e41ed21dfbf6144649f2bf5efaf7aee6385a096324d9c6cd7fddfbfa67297e1192dce995d043eff196f87ef848de0ff32f63ec7fc7c93d4441ee6f3f7fabb5b2e2bf3d74246f5c35c630f2c9b77f1e9e207708e9a5f5ee1de7a51d369277addac7ff6af55b6e0e19c91a7bc92bbc554f4ef5868be4fe3884b1ef07b9d56f4345f29757c22e31d71eda8f6122d9d68d37f4777ffa66c710913cf78bb8472c31ef146268822c6b7dddee0e7bbdb05e5882fc34b6b44edeb9d4d2574882fc6de7956a8dabdf0f567848dede475ae9e6740499fbd821f5d17e3a77174196f07f2cb7edd0426f0dc97a57dde5c371724fa52c24d7bea1b69a730dfd85300479f7cf638c77d25e3f2724df5b39e7f2fa7d25d683e46739ddf56b3ff594f04141b2c6b6cf6b27de14df1f48fef2ddb9affe7ec66e419069bc966e8b3bc6fe410f48c6f77f2cfbdf52f3e8ffc8346a497ff5136f3efb07b2d7bdbedabd7ff36fbafdc818efaedfe5b0be59adee237bebb7c72f46e9f985d8031946f8268dbdca3fb5b51dc8fbebef759f555ae87de540b6f3eef821c6965f4d291ff9f2f72f87d7460cbd9c7b6468bb871e53cd5f947b0379eb78af8eb7df083b961ac857f66ee5ebfe428e69d4235f5fadb41cf6a7fdd519c8dc6e6fb9f676ee8f27cc23433b399dfddf5d25ddef155988c589901627db170b29ea410c64bcf9a59ef34b6fdcf4773c328ddb7e2e21d79de3c9e91df9770db19eb7562f2dbcf7749af5470c8a4ccd05f2c456dac937f493f7b7a91d384e6e9fc6bffa57b5aca35b682b9f56ffeea39daf868e3ceddbdebff8fcdef8450be4ad71b592c758b7acfebd0ae47dbfdcf8cdcdafa77163fa230605549326570e6dd5eff50b6fac90bfe6c8927b5bf1dc7377393dd672e4cff9be965ed9f17fbad65020eb78bf8797eade614d1c6fea1e9fc79e7e6e3ff54516ce6a5bab94f4a98123c32f2dd7d55b1ae1bb5bbe91e5bd6f42ba67b49d6f3eddc836ea8f35a7d1ee3fb9a46de41ffb85b7627cede41abe09641bed96157edea7bc705a09e42f3bfd15622ae59ef4423672fc976f5bab87fbde0bf51a9957fbaed5fdbffe78fcb44235327eb44e0827acd8db1e61abe5258d6c2df612f74a61a5fe7d9f42f259347f9469b9a1068dac2986f5f9fe2fdcfbda3deb1faa392343eaf1eff46db8a19655c2a29a08e4fe6bf57bdffa34ee9ed21bb4ca342ca7d3e9a4b9b6ba7ab1886a209039f5f8bfad3fae9d3f39bd9c4e99e6cdb032d6e9b47ab1ea8f18d4ae794086bb4329e3fc3b3e7c63a766e47adfb4befea86df55e561486b4a68cacfffb1d566aebecf2611ea4b98220b49a6bc33564646e6fd7986b0abdbcf67ed70b6f2e7e35d72665cd1899fae9fbf69a6efeafac11c5f22a0b935a19a79dbe9c0839d9f4e504475f2346aeb27efd2ee6b06e3d258c30d484917b84f3e12a697c917ffb6b4f0d1859cac73ba417eefbf184f58bac7dfffe77cae99cf6dda78bbcc8f4f20ead9fdf778ebddc355de43e1fe49c4a1c9f971eea0a35d7c6459e1272f922edd7c2fd75756d5b64dcb97f5fdb1bbfae15c72cdb5a64799ffd9f732fb7a7d8ce94ea4107e42835ddf3bf7beb9555cead015957b9adacf6db286bc49e669129d41cf2a96b9d546f5b2703b28f5a5739abd6b34efaa9c422437cef9bbbcfbbb5b54fc62b32eedf7e3e69dddfee6e278d56e4df2595b7621c9f8455aa5a2f1784b6064d8eff7f3ea7beb07f2e7bdcaac87ddb1edfdb5f5eab3fbd928a2c399d3bc2c9f9a6dac21fa7c8f76a4a7ba474d3581fad28548d52648a6f9531daf97fc597ea220b6314596eca5f7f8f46eae77dbed57a2d204fa97fac923f88b57c71165988e48b50280845ae30762d1fbcf37b6b252fb2d0bb54fa897c258eeff25efb84bde3ee44ee1e62e8f184f6c2bd639d350ac853d32d71d5bde3a9638771a7260179c6fd78a5f77929f197bad544965d532ca3edb0db39231379f7b7fdee187adaf7ec599f906aaeadd62c91a9fdb3fe47a7c7d84b3f8b2c3cf22c79aa51224f6cefa61046dde3f68f9ec99f4e1a7bd4d746303549e4ea9fd5174a2c317cef5f2f3508c8d2622f65bf5a425b29bd3507c8b2e36d6dadf642fa2f86606a90c8916a2d79f4ff4fca1fd65a3ce2fe69f9f6d4624c35be4516de085f28d7eadf1a03e42d69c7bc4f0d9fe5f4ef1ba144d518b17b8d324efbfee793cf595f28bf69ba35e1eac5925b6a8ac8776f5a6dd4916e7dadaf5166a921227b0cfbb41f476aeddb91175988eade85eaba85a1e65df8859a02648f238c35d6abe3fe3d3e56b65aad5238d25c3344deda4e8c31d6efc61eb1766d292db84688ec617df4d34dabfc9652ecf2f7d610c0ff5da3ef974b68a9f7451652cdb3583e423541e4ad27ed755e69ebb792df570344b65dcffaf0d7f8c32ee7f4aad64be8d5fc9021b61153d9bfd4bdbfbf8b2cac557cc8715fd839dc9ffeeea5bd4516d22008af6bf5650fb9d34e7db5ef6e4e6bfc6fa7eb2ea7d3a6f95b7fc4a08878c8dbd20d2d84f0bfdde5be12d6b843beb85bfc3d7e1eeaf85ec4f4470c2a8c0ed0c6f87ddf5862fba01c3223fdaefaf76f1fa734465d64a1fc49ca9cc22dbb7f1362adeff71822e5a7b9df136e0a25c4fafece4a1db15e19eb28cb697f943feea96ba4dfb65629b9cb646f3dffb5cfbe7fd4bfcfecb37c788aa5bb9c4ed967a550f6470ceabfb2c795de1befebb277e8e573c1cd57b9f5ad96772aabbe7ece1f31a8ade58bfdac5d53093f8f517b096bcc21437a35e7fcd3fe28e63d1659d4968a10b7f29e5462d8f98bdd3f4f6d9185b5a3b44644618456862c3fdaeffc36dafaba9d7a1659e842f22854d54571b39a2ee233889575b59846ece3bdd56b3ae5985586d24bfd3fae1c3e0da73d9d542acf6b50e58e1f94d2cfc739c68fca220b7b0ae55b492eeb4428062749ac9dd32989a5e58f185436cad45ebc37c79046ad3fb4451652d7eaab8003bf7aebca75c4d87f3f6794ef95ca3f4a4de5c632e25f2de448dd8788a5814ea7d3696b6528687fc4a07a51eefe75fcafeeb66b3a5fe4bea33217cac2294419f658efadf759da3f7ebbc8c2ce7a651a2a69d6f0f3a4376e1fffa316f6ea6bf599567cb7fe964269b5dd97f62c23dc8fea773bf5f5d55686c2906ae1d9d2eef1b5963fa8afee5c23792c3bdbde25d6fdc54d1f7fff155948a3e8bc39c4776f5e21fcfe7e586461bc7828cb776bb4513ecae3959d1759e8da3c853ea8acbbed764a7e3feefda354afd5836f22454994e2b995ca0dd93e4839a7f1ead9e98cb8c8c20d7521112b6584c96479b7e498ca8fe9d6ffde220b595ed5591e3523a56372af1cf7cb1f7ebef66b6791850f1e652d94eab5c2f5dad58bc56343e6d44eaba5e5ef772ced8b418cb4f35e096badf6be775facd7ebff3ec57b6a7867df52f32e9f2ba753f7a956c64fa7ed8405c8497c5073b56aaea821d38fbffcef3e6befb49eb332ec398b0b0b4bbd5b2bd30993a594d5c62d65a79a5ffd8a2c7469d9d62880c9fbfdeef9a691bf37bbc6df03d94af4dabe53d7eacbd697a927f6f6cd2a1f9f12cae045ce8f21be5a7e0fb7a745164a2d42f146ea3ff4b35e6ff58c7086a07ca5e593c63727bf7d3fdd7b86e105caf0ca6825b5fdbf4b7dd74516f64c8786fc36b7376a0d2faf15c2d97bf670972c61a51f7fba6d9deffefa3097fc2ca6d672dee1d43caa5aab14aa7b4d176dd7fe64c923fe7477afe5e476fb18a76cc9d6db2839dc50c67abfbc459bad5ab2be5b4a3b9fd7fc532f31cb97f1a86c95692d187566c8b8778daf9d773ebf75a54516b632adc32743d6bc723fff96f15608f72bb2994bc2e89375dc7f63bcebf4f33d0a513ce5d2ae2d4298255f4c23ae57e21bffd7af1659787962c8777b5de7e472c7cf398445f674925473b5c060c936da6761adf2c6585f8458ce3bf58df1614eefee5d7e272fbe54ad558aae5e2c89d493ff7f9e632fb99f9772f94ea74bb75de98f1894972b796f7fff86ef6fae27deb5c84208eba5db9e3f62508f27c33a3dc4dbd77dfdf4ff175978bd965dd1f497cd3361fd1183b23b99ee3d23f79d465ef5a610864ca3847f52486de598be49eb8f18d40d2f64091f7fb556d82dbdb3cbff3314d662254bf9e1bd1d4f69bba67156c9b5fa6739c772bfea294ac25a21f765a40f954ca57e11cbfaec87d25f5d64218a6b3a4ace4ada66cf94fc28fd58467a29fe77ef5b64216565aa2ba79367652a7e3a9d4ef5470cca069d8ce9d6516fbeafd773625e64212ac2ea5a7d59718e5df6e87dc4b7d23af92db2f041df33d6a410eedc5596a1545d43a12eb0b9ff5d35ec714e0bade5b3c842977661a8595a8ef77c7f57bf7da5b8c84294bd344f3affd3d6c21ee3d617da99efeff8d30ef7ec12f2fb8a2c3cca3422148c124aac7d855af7aa27f7bcc842cdb5c52e3d9ff14b282bbcd3e30ce6197baffc43aaabaf12cb220b519da561b435bcaca37d51e26879ac1e6e586461d1f66aa1b4ecd71d27579c081d69200cb92f833ad29aa53f62505a5cd8b6636dfbec9f3f2c372db2f041ef4a6960c0b85eab477fc4a07238656fdfbcdff748af96f07227423138b9dc7f399db82f733ad5d9454ad4dc460c9faf18cf6b6d918556ea28ff632debb6b0bfbae9ad45163a118ac1893793da5e4e84b43841b152356aaed697161eb6145a8c7195f53d282fadf0b42aa3529db2f530f6fb679ddf774a7b9185b06ed8b5fad26b199f81853cffaff5595fb9d7536f0c25df87e7ffbddb7b2ffd981659e85a7de94428062744afed7b4e27d7ea9f4e5ecbf8a69dbcf87222e4040b901327425a9ca0e2fc11838ae1096a7b692894082b20e9d5005480a84c4594a94248017372020aa84a230b2748d46bb202f664004f4c8852c20a24b030c213014a0870d6124040ca8e5c2608a0d28805204254f4465ab55144ac54d1a68bb00fa28682071095420771957194e6cb64dc6b281434aa34b6b8df6c0e0a858269059c2d040e6296692200c088ebad52652c6cd0b5d744d0c0840c20ca13858001dc48b820b55a654f98c4132cd0b457f1119654005726dca0b4cca549b039a10451f7bb5e25d440942f42a1f8965aa15c489e0487c212d8234ad4f89566dd608fcc9181ab80098ad8b14963053600134a206104114208c0071e749063c2e100001b689001061758b0a4821b9b92ab8492144c22492425484a8fa08004a645a838d3224260d8989181abc008f4d8714b0871758787096a4ad001366ad6c8d976b0e10e0c3ab064052d0e0d4d8e8646f35cdb71cef5382262e8c1872272e883494f4e0e632cd822270777c105725a5d5c1554382705115986c8e2d2526e0b8fe659ac1436256229602caf627915cd619d51a68a238d7ce1c280ce417126892f5d5ec85921e1eca0a30e3a9cb3b140c904e71c131b389cb3a9c01cced9c8e17aca060ed7c56371ce86023671c0e1d2b2ff861b2e5be51845c9c1410767d3c6049c736772526748400ce76cd870442c97de8cb40ba5d2394493e410019243d4cae18fa0498253d95e5c59430de76c1e9086cd122abd33151a2e4db79cb339838976e9ee9c4d042090e46728e39ccd03cc48f24629e76cca78dd391b3256192b089b23e7346f9462655b5c299697a10b5094ac3852d1a6bd965d61a532ee4a25e156af0c06a8b3bc6bf3016b6408e38d4f474ae9a7be7b35f2953ace3fa3871e6f3a711a59cbc7dfadbb621e7bc5158dfcfeabaf7ffba2dc105e7a46aed8621d357e567b0b790472edb5462829955b436b2504f27cdf6e6ff7947253df1f566996c6a57bd611976b61ad71e4e601b9731a2f9e0f3fdb2dacdf8ccc759cba563d711959ebf8b7869aa3b27ec9dc909139df0f5a8dedab35e2e9c7c85df72aa5f715467837ad62e4cf35c58ff7f9747c9d12758ff2449a5fd198dd8491f9a73e726e37f46064cabd9f74de5bed17f943f9eee573da2bebbff122f747ebfef7c9e7f5a4767791afb6505face5c735f628b9c83ffa0dbb9d8fc67abd4a7bd7863252bdb69016272e24ef62617fb345b6f7c327bfdd1b4369fdd7226bfe9ee7ffd5fdf4ebdb01797f08af9ffc6b4bf9d5be01d9bfbee3db57ca29399659648bedb68fd307dfd3f6710664f924d5bc4abaab9ccf6e2c3297d4dbdae7eff2d7daafc8dece793fafb3fb2e35b6224f7aab947deb3d259e56a3c9d86a8e6bd5bd7e3af99b55e4885ffcb543de2bd6964a2a32e693eb0d7d8cd14fbd639185442c14f4443d6bafe58a932f4eae3899c1c91527aed796d349f3469a5e7d0fe47bf6733a9d4ea70763498a9b29f287f3411be1bcd6e2f7a5c81fea47a396985a6c7514b93ffda5de14f3bff15d408e3dceeefdaefdd96fa1c8f8c53d2b9ef7c75deb7e22431dabee13db0d3becda897ca384fe6e2a37fdf62a20fb5e67a7fd69ff6f1290e3a378fe3fa7f5114ffa6f9ac8d06e7979e79b63c9b7fc374ce477b5eccf73a86dad5bfe9b25f2b45842582d8d91d727ff8d12d97fc9ff9ed7d7f96d84ffe64cd6fe578d63bcbe574dbfbf49226f5d23a6d8c30d6b7fdfdf20205f5b6b7f90bf0f397ededf1c20635b69acbd43acb7efdddf209125eeda4aaeb1f4d6f7ee6f8ec8d3de8ddfdf1cce3d21f73706c8d5cb57e5eede5e6febf63746e44aa9a5145a4df19d74fb9b22f2ed574afca4be1cdb8efd0d11f9c60a6797f6c92afdc6fea60039428f7dc5f662fce6bffe66880c5fb7d8bffeb7c49d5f7f2344fe0f7b58afdcf46afdadbf2140b6707b7cbbb658d648adbf0922ff0fe1f67b6e08e1fdd5df00912bf5bffafabed75fdbea6f7ec8b67afbf9ebf3c3abfdf495e4ebdfc6bb5ef9bf9f727a4a329cdafeee25bf6f62297d0af2fbdf4edcf7ef5b4728fd2479c6f727b46f6b7c7d8f5e922cbb9d105b18778f32421f49befdc60939eccf4392e38ff7491bb59d54fb47f2ffbd4efe379fb27ee85190a99e1a6fc8a397bbebed48de9d4f5be19df1f239eb0932bef1f10975f5755e391bc9956bab7ff4b043d9a96424636fe99dfe62dfb5857191fcb1fd705e7f21f7764345f2ed77cb1a27c5d5dff77a22b973feb7947dd3395f47246b1f7ff7da6fef7dc526c8f7fe1d798553f76aa72f41aef851db3ff616f6de4990bddc8f6ebcf7db156e7e48b6d2438e25e5faf1fa47906fd7f7d2e7eb9e7f5f11640f6995f3fed92ba56f1b92edae735e6ea3d54f6e5c48d6f7bea967f5d1e3ef43906d878fceffba8c91e24b48a6fdca5be99357bf8be920b9ff372fbe5b7e4ba39d82642bf1dcf3d5873bb4550692b5bcbdd74fa9ee9c4f10e4f9e197fac5fae59c3102921f847a56e8b7ff7e46f847ae74dfaaff8bbd6fdc3f9023e7fd6d3fafa57befc7fdc8bc3f6a7dc5b273fb7b1f99fa67ab7f105f2a63fc1ec87dd2d9a1bd173f6d7b07f2b78f7eeb9f8696f7eb3990398d567f6b7da498dece47f6b0d33aedaf7b7fdaf7c81b7e2fa78cd17e3d27df407e16527a3dfe78c6d73590b5dd554edabff795dbad479e7bcbeb9f8716e3de3390f1bff5cab91fb653d63cb2d51e776eefb69b63a83190ffb391f67efbc523478ff19c96e3bbefc8bcd2a9b77ffcfb39a5dd17c87cc21f3fb7b36e3b72ef913f5cb7e7af4f1a771df9d35e25c616debba5859b8ebca7ffb7f2bd297faf7e0b64ddb77ddfd3a865acde57205be8ebdfdf562d1fc73e4dde73434f6fd7517b89f71c596a7f63edbbf3daffd772e4bfab85d6faf8aaa55e532063f8eea61a62c97bf5388edcabaef17e5d27b5f36238729d1af3ab25bcbf4e89dfc8564e3ee1afd4d7a81f76235b0cdf945356df7b9fb78d6c79dc7ec76b6da573de09640ff9ddb2625a75bcd64a20d35bfdf49243bc2db456b391b5b69ac33ff7ff93eaaad7c810dbefed9d5dcb8a39d56a646f279537f6396b8c7dea3432b7b3d38da7de7dca29351a9957febbaff1417bfd93fa8c2c639f0f6a1fa38e40ae3a5649e1a550c2eda186408ed1ff4be7c55bdf89a17e40fe31d28fe3bcf8bf6fa13623d3cd21aed47fabe1ad509791f1f334f61f6fedf84ea8c9c8af43792bdcf4fbf7e1d3636468e5f755efdaa77efc6331b2e5fdff87a9f7d06fef7118b9beafb78c513f2dbdf6188cfce8f510f34a3b8d537afc45eeaf732ea9dd98de8739f622d74fdf93efc91fa5d61a7791a7c71a624f3be6227f59aba674d3baf7af778becff8dbf5b68efec568bacb1fdf84fcb3f84f25b07e4aeff8498fb8fa1e6bc362073eeff86d4433f61e4348b4ca3ad3e7e282394154f06640b31a75bef1835dd556291e5deffebd72bb4fafa2b32ed513e4ea39dfedf17adc871ce6aff8bf8ca6e234493ad7d5b4e1c29d458c387abc812beff3fe5967aed39155953fd64b4154e1b2b9e2243afb9ded57a589f7d5f8a7c239fbc77fe25c71cfa28f2adfb57e9e7db6fe2be80ecabac94dabdb5b6fb7628b29d30daf8f99f8f3efe44c6bf46b925fdbe6e5c9dc835d62bbdef73db1e2157407e0f6bbfbf9437563b770232e5bd77ffa6f4fd5ede44d67777ff6fbf94de8f99c87bf2b931bd7e5aafa75e22bfc8f79fd4daefbdf658892c71bc16cfbf397cddde33d9fe8a3bbc1f5b1dffb749e4d9fb9550537ea594180159d23fbbbf7aca7d233d4096f3bddaab9cf8bffb24121343fc2b8fd1c66b7344c69cc70d71b7767ba8bdb53140d6dfe35b7bdc1bc62ebdb5312247be9f96bcefbea1fcddda1491ef967e77faf1e5727e6e6d88c874f3fbb68f17cf082db73605c8303ef82bb590ff1721b73643644b71f5d04629abd68f5b1b2172ef386e2fa7fd78f2bfad0d01f2eb5547cc69bff459adad4d10f9dbd7e9bbb5f37da1d5d60688fc1eb4f2eb8de7b5586a6bf343e61eebfaffc5f76a7fb12d5592f7c4914ab8f7a413f76b4b9464dff5c5784f8b29fdfada520ab29f1ddeb9a78e7b7f6d6d69923c5fbf924e5d2b843d5a5b92246348a5b597c3587bf4d59622c99a560ddfd670d6477bb52548f2ac5efbebefd772d75a6de991ec31feb05a7a35ad5b565b42419e13e2aebdd4d33a92217ebc5b49a7a7fde9694f90eb7bbb520de58eb56b681bc97b5aeaa1ee96ce4b35b48c644f5f9511426e71bd17da4572ffddf6773bf65cf70aad22d94b1825b7b752fd358536911ce5fb9fbeade97cf53f8b48b67adef9788c92bf5b9f354186b6420c37de58530b9f2d41a67b3f582fd52f3e7b7f2541c6105ff878df96fe387f3d24db6eef957ef3cee18ebe8e205bfb60840ffabbafd7bd8a20cb4e35d4ffbff83787bc1a9229d777d35eafe437fa5d0bc9715ed9f9a37f477f21ae21c8faffd9e996fa794921ae84e468b5bdd1c28fadbcf8d64172bdff4d0837ee5af77bab20f9c729f5fed0f6da35bd3590bc65efdd4af978a4f4da0a825c25d5ef5f8d7be4b6da0a48ee1c52bd21fc0fc7fe6afd23c7b9ef9defd78fe98eb47e20eba93b7c18f28ddfeeb3fa91afbe50c28e23ff0fe359fbc8f045db1f7d7656dedfac1ec8d6ee87398ff17939b9ac1dc8137f5f35eefa4e1fabac1cc84f77eebd9ebe4aea7dac7c64cdb9c75dcf2de1bc3ed63d32fe10522c25c6b5defeea06f2d3f5d6672bd6d56ffbaa06b2eff4ce2e25f41e3ffbaa1eb97ad9bb8f337a5d79ff340339460fb7e6b4fe283bff348ffc1e8f915e7c6194947f8a815cedc74fd23d29df907e8a47a6d37a2f29dc5bc2593dbd23efd871840f5a3ef7949e5e20ebfe7cd5bbdb79b5869eda91f78792532b699cbafe4eebc85d3f899f7e326ab875a77464ea77e55fc7ed6d9d9d530be46ef5bbd77ee86bc476d30a64db3787bc6f8cbb8750d334d96e496bc475fb3f31c7748e5c7d95d6ebd9f9f6d75f2a47ae5b4e8fedc4754a8d2fa540f696fb7961ed96c691a3e752cf7f2fdedcd749e1c8d8434e23e4f76d797ba46fe4cbf5fff7fa3aa5f537523732b795da8b25c637460f691b795b0937fc5dfea8fb847402b97a1839beb7ef2fe7fe5302d9ea08e7f650feeaadfc938ddca3ec9cee7975ecb2fbb946a6774bfeb4fd58c7f7f9542377fb3bd6d46afd6ff57ca691bd84527beef9fc17eb3dd1c8d076cb75b774471df19e67648fa3dfd46f3b61adf8ce0864ca3b9c2f6a1f7785bc4e08e487f9f60fc77affffb8ce07e40fab945ac64965d49c4e33b2fc747bea3bb4efdb496719197f8f2fa7716f1bbba4938c0cedf35feb8763fcb7cf3946deb1c3bb6b9454eed8e51423cbb8e793fbbf8a31dc708691e3dcf13deab585cf5338c1c8d1fa2eedf5b1ffba299c5f64ffbbd4f66a89a1c40f4e2ff2f6fc6aad39b6bd46fd6617f9d7a8bbd65c5acabb7c938bccef9c755edebd9ed4fb2d72a45ff6ed3ba4f7d7d7a51699f3f9b48db2cabde7e6d20159da0d25d4765b4fbde5b201d96e5c23edf15e1c2bdf328b7cf5c34f5ab9e18b5f6fc9804c23b75052dce38e1e6f89458656db1a61e7fcfb79b7bc22bff9f093b74f4fe78d5b5a91efbb5e63fbdeec37fa2bd1e42e659797fe1d35d7f6ca2af2a51a4edde3a5dcf3792515394679a3953f5ebb6db7728a0c2fac1ddabddfe4d15a2945a65b4689a37cd7f75bad8c22e37ee59dbdeeaf3d9f562e20c32de3dfd2da7bb9e654429125dd9eee1aa7c5b5f6294b4f646ee7d4544b193baf77ca921399563a7befef611a779db2a4800cedb75c77fc61df8f4b594a40c6fc5b1ea5f4bff3f8a32c3591e1f3de430eb984fccb284b4c64ab238ffbf16f3ded12cad212d9537b21ddb2be77ff7fb2a444ee98d758f17ffe43d99f2c9dc9fcbd4b1ff537ea1fb18fa524f2b4366e0b75c4dac3eb63090199dabb3df69d7e6d21edb174804cafe49b734aa1b4ddf35842227b2ffdd3baf76bffaf3c968ec815cfba5f7d37ea4bfb8e250364399ff5d7577df9c575c79211d9dbe735bebb4e595fddb15444beffef6f69aff545ca752c11912feebaeacefbae903f1d4b05c8f8fdda2b7d9a4fbc3f8ea521f29c7c7729fd9c1c4a7e634988bc21c71b5fef39f657df5822407e30de6ded8c523e3f6f2c05917de413d2e8bfb773d71a4b40e43bf1c330fa5efdf78fc6d20fb93f19bb0e9d33a804500ab6b11cc428c8180300a12a69006800f312003040281a0bc662d1a054ba530f0014800251966eae44170cc4c130065110c3300c83200c000000041840003238da381cb753be572ab7b729db7b96d97b99b3772af7d5c71ec4090bdfefa38997048b954e328f9c8c030f32981fdf969da5f0609b04ffbe6361e97d20cc7e4742ea5d2baf55c096eb96ea0fd7ef06ed5a02b74dd42828210607b755abacceb3f7b085259639f8b76027d220365645f3310207422f49e17db84937c8acd3bd402b4e0938bdb07a2b00d38579d768cc75d9ee5b040bfdf105ef270cdf272ef43ec3e0fdb7c0fbca85ee6b19707f60e8be59f83eb650efefbb30e2fb354fe01d81715f832e6f71817aed6a30f9fda0048b45f7cae22ebfb223c16fe2bc114af4b0d57a4d02af708118724d33d87ed1059321bd5c33ec712a4f9bb0468fd4e6b92990a3b561dfb47210dae437b79c521bf586574ede0674d3c819b4a9ddd872b86d0a37703975a3e9a82ac9db887e94244b6c1ff66864a8f4b089d45d67ee7eaf049e9a1eaf76f93090458dc1c19b35d0ec34b99a154684b359773719abbee9058f9e5ea41d66b4009b5b776d63ee438695f231d1ac455daee67a5fd3c124a5d66809305ac6e2dd655d734ae5244af6b54526bddc84a6a3ad0e058f0b4013f454d4a185062f4a6fd5ae773c9d3d52778d3980f732f0eef4bada19c6a333ab9f408ad242dfa7ba22a1923ccbc84c81d8f4393a49fa1ab58f2449d446dd23b8a4a8d173542049ac519cb8ce5bd67aeaf793a8a576d735077f2f02ef49ad404b6d3c36b3f613c2853998777a25cdd4317959cb3b04996cde1b80564bd1d6923b5e813d7877b5b1e9c52a98723325b6ea28583eba9c761be9862aa7db067e13c979da14dc6872d86dda1b0439799bfba624476dc37b93cb013592911144e189998454d421ba17951aa947bc92f246a0a346d2a051edc896c46d5438824baa1b4d475549de46f4a34812a651e06893d46ee41e3148ca1ba18f22496ba3de235d12a951730420296b741f7525191ad18f6a49a046e9d15752bd91744446ca8f427969d12c2d2df21ab18f2249d046dda35d52a991734420296b843e6a251d1ad58f6c49a446e911aea4bcd174d4912468443baa25619b2ab4ed98da9b24232aa6ee26b85184e9d95460a461626f6a8d1030e59b6ea31226750faf4d8e07b4a7b119e0a9edb16db8780a7be036359e694fd5c68b87be27b2c1e009ecd96cda78dc3d0c36391ef49ec868c5d4bb493722616a3601186598ee4d5d230326faa6da088429ddf435aa639236718c0298b0ade44d4997a2ca5b6db0f4e60ade6e6ab986a0818d450383b5376dd0b82916b4848f57b337755735e77d8f0e5e941a46cbc0781b6bed2e654da724088a90b9d8e5bc1245f88f0555f8444a17442c8931f3af78300cc2759b73ff88871acda53c54cccd6e7854233d3314540316080d4ad2da09654e78654dd3327c2e82a0d8e4261aab79fb4f967a5bd286596d94bb61c64a65e426282887387b28e8439b2d7075a9b929cf94d92ca6f212a2cd3d2c18ffe03a5abc93859a51c4f548506c13d7c4df1260c5472b5c2643d01d405985061c21ea55f352198258625e0a8e84a221ca7b4c055381f336b67458829ffed5c3455801fa378148f207c9e2d8e905031cd8b40c92ba89825d3fc324b9d075f70bdbc522473f33d33a6509d491b5a05f4b5eeccd7c7ef9374d9e16a44058f538f148aa24d79065b7a6a7e2f774923f858fc9ffa60d2835667a1bd7e6f48a9e4452bc5334e7c7309264bba87fd057b44688762753807160827d346fad61ea36f3654287d542a00fdc5a8a7f4104c38b37706e5347a4c35d493a759d1557e3f2a58c616235afab04e02833fe435e24a194c60727c95e529509a25d99510048b196a49958f56632ab224bbe30bddcfd115bf04650f50e6de50594bfec462203da241827f3cf3611828aac295524e87f13c47e3315f09589e07f35412cf51b4cac672488b33fb9d8515d6f7cee19b82cbfca3f9a587da06988795f9316873e4bf5e581d881c60fc1f7fa620952c0314da800bb3645d07f314aa03eed3a53c2cdf17a5269a24c4101e9c8433553101a4ec33dd0e93b5822a5e4bdd934b2319172040f6ec850a81a90b4a9668eb1731bed8d7bb1a9618749af799952022b9c9d550eecba4438ad01f78f87a0fb04b881bbe4a0e6a6a3fcc5b3068c326d19a0c97ad4ac9c7556470b41230fe22022858b7a79f64bec8c4d928c76fcede929a5ba6646ba9c707cc981f135700a4aa2f43c23299c901367091b6bf40db400f20c0de91e0d49a4fdb5beddf0d49784d6f8a0745ba318a89f8101aae2214ab3e223240105656f8dab0495d87617ce243d27b654819be3fdb3c27e80ef602038e96f220e50976b704aeecce0b40a2a05f6bad43bff0b50f0a33a678f272b595c2c4c90d6b0698d0adb7ce7247af763251426785077ff303faa59b49cd4d9f37ab2b6871d88f00ccaf22fa32132bcfbc32d663d148d00764e781204900ac14d07a44d1bd8d09e034a69026ea160598e47cb7ec32356bb52f61162f90e03c98ed5a4210aad48c5abf1372bc3eef113571aadb298d1d6391300a9f39204444e51bad701330e6896065162c4e6b5832bc66a19960aedbd6e64e4824368c1d3fb84f15fea9224c596bd17a7796422280f3985b700620b3150af7edf024c805f4e03ef89f204f3182f5263151a22c64f275e00aa4ab77e283d146523bc4f2f588a162bc5587c33847a6106a2c17f28b8a03d1247f9e2a1fc7df99a75a41024d49daef80f2983e55a14d8f6ccbc2317b6dd3397a762d052ccd96436e00fb7f07ecae840a81701e1f5cfe9ba47258a5be02cf7c36fd38f26fc2cee22ad3f75a31be5962710490b8834e056b76f8e44ede1c5f0f585ea16ac9fba000f1b0ab04e71c6461766b2d19481636326d4838f26dbee42af1c3cbcb5374de41629fe323016ed6fb63635f9082a84871510eaae99406ea82aae7f828ab166919d2c8b1fefc8f596ee724e8b88eb0875ba3517588ebf686dbe4bab023894186ff95b57e9c4c9b6978f0994fe004638059cfcbfa66ec49a7f19b024d1d625e9d80d94409e442472108cfb537538976266337d70bc0837728c8c42b30788366896a1f8045c97f931e1ecdb4e0eefc126a3f0269629086b3fbed7351531f33db8ffd8b4297e9730bba19d7fb3964e142b435add1a9436a7ea08691e105b457df5a77c6cb0504e77c9c88102a0baa9e61f3071368356573139424cbfc4c9ee99d70fced08422c006288d8e9b20a30728071ff4913e776f8a2e98404939204c5fc96cc9e7c046b115931e604aef52271987e4a4d58b97b87e7e81f39f1617a301eda975da382202e955bf3718537c7d8129325242ec49532645144558478568d5b7c247de65c32a5d4e403d0e3d24d04cf5a552f5195366b6dc24c198d8311830a5a1b5d09fe8802f10867382e2e97d0478b311434888868ff01642c235085448dd54eb34cbd11ac69c64d396636e10fec9e3ff2d3e508d2b330bb5d989d1cb04c1fe9afb0ef2bc3302623a710c23d47e69673a2bb908171d078e86ab616bd28f1b5ef17219f1f610c3003f3c37698c8e542e07c8effc75b4a9191b91905dcacfa6ff2d9ba94848c78b59a83c109ba1eef54edd119377fdfe965f5148ddba205800c0d2448bb115b8ebd31843fd5508b0857881020d239d549401258ab2f9de40459dffc0be92f1b48fb40b33cbdae1c41d10c7cc201a7e4fde6ab41af49bab649cce7ebe8b006ec545fdff0c9dc3db5474c9f5ffbd847989b9e217a32b46a1316cfd8802f3a690692b1b49970c54d5661bcb3e3066e4462a510070199a8cca0ba0ca447a54be003899af15698a212ec3a1e30f25499533fbdef4f8d908bc06e96758069458e01afec95f04f118e12ee2ae028850183d4f364c3320ceba7f72934771bd59eca314879c6647f4f11dd2bae3c03a7369de2691136186466e9ee6ed9751f4404cea41be62502425e95b7fdb49e8abcb9f6283627ff04e688ddf6242514018c30e0cd667bdfed1b8d1511a5d56dfd10333ec55d01ba6fe6e4b415021499589698070939cfd2a662611930c1f7ff9a669f082b71e06941c703918897b649d5dea6af8483512ef9413a3d15335c5c2eca2a0f46cbb1b63e8019934d0cf4e46115cd56565217a2d24027fadf899d387a86834fad7264bafdf9ebe6260a87373ea286ed2ea19dfa92cb4f4163b66c99d8b30fc5426ff442c7c87d56f25de535e58ff93b0f1dbc3e74b32cf3dab733c0dd602bde577ed58ff1ccb95510d86298eb07db031477b133574108f12420176dcc77ef39c8f99262b6a3698a8575ce99822f84b8a6b179c295c4d1c67d36b529f566d69957a74d753ccb567a36159ca7be7b9c41c0f71de4b7c9c2941cdcf1bfdae03c1b1c8fbeca8b416a6adb933e54d2757cbf197f3a6a07e29f4314ae4ce1d46bdcb5ddb3c1710ab03f3ba7184682924a7cbe3f9f651d1f0b833dac2ddd545539837c80636de8f6997889f1a635f48538e348bd4244dbba2d41dc90e7b5ba3cd7b81d1e4c5aeaf69fde86f5e49ddde999a05d5b97f1471e2c5b746f7b0b0d4061e7060dda9ebfb8a4aff49f91190da632f27f543846426db419bab1d397495dcfc3aa1ea3300e737f5afc714dd41f53760ddef33ed375fbbf2709a2daf4b48a46fc5b9c9704792d8d6187dd901434e1b5f05ab3e2a97d896fb1f5809e1ae7bf3eb1e7da965051608ba368c775553dbc94a1265b227764a93ec94811cffa08e4e5fcd9e4d447f715aa8ba1d3e0b8e9fa0226a6e5c0180102fd8fe98f532e76e9ab3ff87b1304b62f54bf25f0211d7fc26e16ceec2853076e6e698ac8b1111d5f94d55d42ca08212c1c1c63d5f09ccdb3df8dc8fe8d7055f6cf215822ca513471ebefd6fe4ecb361cd6075da60656ea9c7719b675f6d42422fc7a1e383b86cff3ce53eacf80725ffc771c91e0f3eaba7134a569e003496f30ad07bcd727e25a0a7ff66981e4a06e88670a5e3961eb11d8f8f05ee834ebaa46b3d3e7476c22de205de8326bf45ab996fbe11d2604060865136c6b18f8f1fc7c00ca8080e0e531c6872be27cdeff86c03fac428b2e07fdc02831c715e187954d6bf522ad8aece1ad40fcee3f4083a24e2b0db9d2c06aea3fefbbe073c3f51cbb19dffcfc7e49e49d33cad7ef0b9d58639d0ae959992b11b19d190af62e41d702dc8f90fa0560d542a8b7c64111c4062bbbbdffcf922a03a80f3dffae9fdb4ba7fcf530b365c379fcd80c2554ad346a66e49cf788a1581bf880a3f506ebb20c8e86de39d66bc0100c492a916ffdc759ce4b9b8432f7067eb7fb871b79a19a7f9b1fa0e9f47cbe6bc5d9be03555f3911cee36f5c74fbb40e4e81e0c1efa52879b3a96968a75cd45d68f74e696045cf62bc931baa05dd49dec427fb7da968c132d7d72cad048fa61268dc5e3675aba7aed17b977e36514ce81a2bfd8d6808f8f5c2b2e07b327760e21fc44180c761c251a87265b14b0ea649c54dda298149979dd68e0fd6342bbe4e55b0faa820d95ba03c36bb157ea6b6ffa804e345543a758d9fa5eba2a6f1a5b91683f4073842beb3efc0e126cbf8afc6ff9901b51da4e08096335d01adca316b6b81d65218436e2a351ac1af2930cdee9c8791970f4387ecad0b942f59e1f0908729a62b66f6648b8e2381b9b60fa4945a38b475aa50fcb2585eb15fe2bdc7eb3104ed97a250d043c519a2b5aa0d4d84a440a112f51cdbfc19cc263541a6ae163b498ceeba68d953e6cf0768f041f703f8a05459650131b6e3f43e02d5e47e55dc1643e22c351bd9bf297f4b904fb22444cecaf298aae88cbcb928ef6c03a7134a01452fa614b2fac96f9d626b03aa43c0252e5909a48c62fd8b1524936798a40f7a70770a05c1470c881496f23f2d9b46848beea7ceef3f6ed283b477621e384316bb90817d80c67f24b92078d48aaeca0f066ac12241a67c9e22264c7860f7bff1ba5289fa8047c200c65014e85e1d350341c54927eccbccd520f4d47466ed6459796d8edf6aef5c6839ef81d7d1fc3b4f2174a84b8beaa42bb411e8e7803609dd5e568e1efc12b1154a9d7bd7d851f34cc2cc4a884fb5e5571f4721cf0398eadcd66e0c206e1193ccaf60769ac55803530ca3f1545498080b9670a7532ca8edbb6898d865e4506d095ddd4e2e1ed03b710107b83278e459d337a33e09a7835aea5d02a8038d592e9a4557aa3a5483d57facfedc2349848d6473f237e6e1e90a8020f509e0fb7f5d0386f92d0c6cd8a342dd0c109c18f40e15674f3dbaa3268fa447b2fae7bedfe3dfd46d166fc0f7c79e993e7ada09fce3435a8470f8f423ebb5e1925be3afeacac7e8a6c9bda974ce92cf0195b8ff50d38e9e98f4e9c01fe6eaff2139856ca7e2fc84bcfeb63b7df0f77ad3d4763aecfc930e2d2ca90f5847e1fe83eaa06a6bf6fcfe80b957e095df49057b121accf32d677c503a8f2dfaab125f4ed5efdd14d5b914c17395de07a6c50c53039297f25979d83217be9f240b788facf46393fa1e5d98ff95e53a7526de3a072324b5d60307bf78407b29819740d1ea9f13c183bcb98a387f65cf7526d1ea32d546166e6d3419699fd9570440daa2b1cb4e7df8f53d83eb657a68122ca34cb763a0db149695b4826d073b5d9fb886a5d52e71592cf00e0f062dbc7a32c535ad258ca38b519166a2166e6cede954cca8376addee56392a49f61203cbec4d54ef7feb27dcdb5d29b1da6b0e4977f9fbacdc2340d47561e33fb4d24dd76bbe21f21f61f0ff72b694341119452d8325e2d6290768ba0e49ecb48cc8d7aded63b6a8a1038d04bbaa527545741734cec5ca7591e200ec0bda8490e789ea46c595506b04c0d34566640b2df39dea99db69ffba23a89a59a24d30c8a70b1a5e468ef9362047a23f7647fffc368fb9fd63648d24f5d561fbff9d9e042a6c3c079dd050c0d7018a0b4789cfbea5bf39dd15858b2f273db0583d8cdab546506276e96ff20d37abbbce92a02c78a318e8ae56481a27d14391b7e37cda2fa24fcf85e729e6a5cec2e1918fbcf1c8b30758bdff2bd6d793329296028cf3442c6a2575f752a676f84ea51ed21bc066c951198e42b652c30a4f55ad9947303024dd2ff9315ad0e7f4ead48597fa2cd92476950b02c062cb762008c7817b07018a73c78c839cfbb299915bdf40371f57d10e6eb92b0b58ba4eae79a0924a65d4dbcb0e8f681827f6b61f6f129f8f69e0a7fe30f1d61ddd4ff42607478a2b4f4562e70f06febc251effc352ecd0edb149ccfd19dae281597085a0db8074adf7790e010104db11c505bccb61378d2ad2fca6ac03117ced7a07f59f5195ca67dfbff939dfef6971d97b6ed488408332be4ae4ece1d0c2472b74aa336e8c5e11dc2641cc6093d8330cb8a47fdb1f74fb4da1468b2491fd4d2a03bce194550fdbebb9d70161624da252f806c43d7d3efede048a6a3e9b3506c515657586cc8e0c2685c1ca4065a6d23d0624723c6d08f0cd67642dd142f39e4f280015ce6e03b0a70da9d503eee1c80f085a13c8e8b2710e6a7553b2c212205de1580ce19c591dbb814bd46c7f060889d2b45d0b92f2305f5cdbf772b948a6578171122424689e0f6e1f5e1a27f339117190233479d805b9063aa5089f6fe9448e908de9a723f063ce2b0d86360c8e1805abd7de7922b4ffa7f60f07a095a9caa083d29c52e43a284a0b2f9e821613b8e93368b8909d884f24765715c760caafb0f5a8d7b2c14884e1c26bf1afffba22dddbde6752b6fe401b8fac3a80e7bc95f58475741d3bdf733e804c10a76c5065a11a8c2bd908d2e0052be2b36d08ac097ec8599f31301ad8edf36e43392419d1c37eb916290a4e36d1a9248a4c4585b83288628396ed2234520e4c7da1a4431e49971b31e2906493adea62189444a8cb53588628892e3263d5204427eacad4114439e1937eb916290a4e36d1a9248a4c4586d57ae4be92d6bcfed45dbb2b431289b99d8d05f93ca5ae5aa3d945a743e0555a5a1996da4c27e2d6498e7a1572c2ad2e7520eb8ef568e096d3dba84919a2e26c2f02b663569b1ac4314b6eb6042bc0f3dc6519d3d9b64c079af664478ebc12becb4b4511006df70aac88b653ca2bc6f5328a412a28443ee3dbb9d97681862c05baa3764b65074debbd93c3291942bfaa9078e1ed46c65f00debc63dc2801bd6d8c5a914613e00be82ed1e6667ec68c60e0efc376186c3c3848b035f32f3c424ab116e206d5adce765a3bea36000d9fcc251812911b412c4e217b93ce5371b4e4b2860b5fe239e385b7849b9787f38d7529a6ed67a009b39c3dc2e21afd532421abefe493f049420bdb765941471fba858cd668dc7462618ae42e1b7bc156188c535aa15439c99c73960458612db44bb68245df136f57c650a0a8ef793da58d08e7303c81e737a6377acd1c5276bb59dc6c4d80da0ab1aec293167bc59bd29d1bfbcc0091e0e729e7855b45e49cf6830a15bf28eb75fc500cb479aee2c3880bd66ff3e0cccf7ce1e75652bcfb2594a3dd117b6641a1ac2e1613971545b10fed25bf7cc72a9c529f8ea86cfcb3e951e0f0f6e7fa053d7b97aba69d7fb2946ee55078073152b4030af87f37b52db26d18338504251cd3c7f643d69ff5bcc6a3a1c18d5d76808c1a357e90035a04a34c8f73aa4839aa94bed4a59ba99da1a4033bf7443794ceaf12657e759aaa9d9cade8626b60e58decc5e14f7e00785a0fc7141532a6d7fcb1059dbab942a014335b6bae341b0d5c1ab021c5155055dc2911ab659b863b92e6083624e78053c766665c77c9014f40980469bff0a7b5d3e3eab8f3278ab2e7d7669b3c6d3ed5b181af5515203f074ffc97980f1e3e29166da9d86d090ea8baa1c4ed1b96db6287fb60e47dc6b94712de82df26be9c433f2f04d97a8718411b3585104776922cba2453b5b951f68ac6dde4fe73e6e3dbd4f81086ffd8f997a215925564d507f10554c1d56e00c929c385ca3782b476a6daf601e082171d5882380875e46448737b3b4ef4ca719a141a2d84e54a5890b712eaa6bf181f532c656202689ed4b71dd8a72c64329450acb6085721f3375360a6d6ae8fc93b078012355309893babac4d62fee0002c564df96c34393b4edd9e4421bd05b71cddbcb8dae57c12fcb9a7c127644a11bc2cd1660d82124b1e24c3d0ddc8d875dcee54e839363b4375ec13b5b7bf328ec731e755960b9bc9bb110040b0e6633dfa8f58aa0a21a2c98c54717e909d2feb1c7482376496f7848db1dca5f2949a56aaf454aa530f95729fdfe086ed5da5a7e07983043c3fec80c85debf3fc87e095f9a69c412ff00df7162ccca885d190f6872f3d639b0693686d1e843317dd1996be9c36f777b90bc86f5d8b62687c79efaa5b90b517fd7eaa4fc259bfe45c0d523f39a8b6bf263d39f92db3ac659220b8a5ec41d07849824e824caf9898f728b0485fbb49a6a9a0c3ebd449357c5def77f0f4ffd62c37f39edea9df38f968a60e07d7a07dadfeb0c5dfa31845ad967ed694ac376b59fb48c5083c083f7dd9dae5fa1f38a83fd8076eb9cc633604eddba8cb8fd288bd93dc3a482f7059567f5afb7e7259d030fee9687b5d8f4207e294a242f06fec9c8eccd9d6f0cb6882f3bf31e5f8e6fcfc29c4ee96bb8716cb509d50f39f1a6692ab52f12f0aac03c2d22e0d9dd163e4edd9011437e069f0ee3aef534c32466d1c93b1e11ebcee94dc1ced5f0b9b2e2c7f3686c9602904a14f5a56d7ada4c5e7db6aaff60fc5624d852f86c23c7937a3edc793fc8e1b72592485156fd6e87509ee40e5b404654428f5cdfd1e75acc620e15d3f4741412aa6c09f31e8d4e9aff24d7c82e44ecc71718c66fa480120247c76d37cb9bec4c0de071fb780a468ff2c0a41a242c773bd0a512e3bff6b3def85382c6b83e536d1257674e63ec13ef6f107e254a3d6c4cbaa10ac298b01d3ef656c0658584c8e02e13d6035bff09b49eb102e5e973d40c67874f9ade9a404ed9917546c1a1ca38de7f5e7704076b0ebab9653306060236c05d9cd6cb9bd461f44299a76bc224cf20903a65bda7dcce848808643e2f86dbe4e07d752a6300310d721b4a19f1f01453f09fc9716229bfc8b657e56247e520c4dfc950c1810248de720a63ca7b78808e27197aa2976d5f82f0dc25a6a5f44d5b24020ef6b3e88f633f3e48cca322f187e82438d570c0f576e51f1e74f50f60d23c58a498fa3316429aa98fd329e3bd5aa62688561e1d34dd52ac25ba38c803e028ccfe0b4e407506787e9e2ea2a8c7ef54840c07a1021dfdf9f90ea7759ccb74db0c5904028733b19628f0038f03895c3c13faaf0c9aaa3f2228f617f80773a7e14fd63a8adb919a119839667caa5f23b41d58d0535c348ca30a55994be8111b39b436f01bd1abb22603ac6c4f6dfc4d421269b614db636c0cce2e020b6bd17d94b75cbceaacb77ad49ab4f76cc3fa5f3c0866e25a5dc769186f5ff09dc7f7692f1488b9acb0f1f3f7bf9c4f70abe43d60a539390c9b0f62ee1f00f708910d0d5b802a2d0059e71f03f768b897b6f86dd0e49ce686888c663dc3eb5db34f637fcbe8f7e8b542673258069ac1977d2c2e8558da873f6b74b60bacc5e9f40b1ac345f10f9c359173c4cf8fd458e4de35fb577b65c5dcee534ad7d5d2d26aca3732d420544da3b44243b1041cb3e8b67eb2efdf1c0c8af3551b75ddf2329770c0be6f357a8520a1ba2f9007602c541989c10f375e957c58a4540d14b407d366c88bd5aac2f57169f8741eae3109f7ffc0b3afc36a7159470952b05b355e547aa307535f3b5c0581a587d2769de6b34eb31369847f30093646beca4621dd70e7f33e34e13cf56d588b47e35af5c29f2e39cbe717a78d5cdb553a5cacc42a3ec06b552cd8efa4b10cfcfcea7e86735867c7e37afe6cf117e895cdd35c4b5788b133de5f5bd498a974f22d053fa6a94d9c86ee30836dc4b13fdfae392da34e33e511ef23d90725344630a01933cb1fbca28d671883c16d43d17e7fc8fa07333c064e27b76aec9f8f9bc10f68be79037334f7f3266b3a8c36d1e296a6c9135ef64f43687c5e828c2d836e3ae9e40cd332e5d32052195ff364d004a59a29b8411c21b3006a74b7d1c56ed36b17250efaf9752ade1b6c10d4292fbcf1c2504d289dd0fbd9fb35031c6cbcf7425ce2b3d63cc7d97767b14068d9f8e0f3b9140e6364dd137fadcfc11fde66d85998860c4e314e5e7f3604f40e47db2a95145a4696f8e10efca4ad972213829212fc19036a9df5c87e5e30fa6d6f2c7a604904679b1621029f5130631823800d682eb26383eb2bc54c44a00706bca1218fb0676d4fff8dba63e065736b3a4db3db65af823cad40a30224b76437eb68ddc8c74ee267815ff866b62e0c39fa0becbf6445b7871d320a66ba99aeef5a8f430e7b6e2f18ba51a81955c99cf5245a31d21ca880222d9b65d5789280d555dc0981bc50785d509c3014c514b340e8aa3e3b8be03c5dbc77d542d5575cf004d562563e575494d966eac0d8e838e3e8df2ebc6cc35d53dffaaeea5084cc46ea43600f556905dc61f0b476b07078bf95261e919f44de6c651f7fe0863a5223dd345245400b62d32c53f63b59d52acf0e145d3d1d1a33ba75e666c174d4d2b35330927fe823ab601197f7f262cbc77b00c39631670580f78fd4496ab6ddbcc1d1e3149684780f9c588b4bb13e0fffce23fe0ef1c1ccfc5af21957122dc7cb65f8e5b57ebf118fb9136a939ea50e24e7f9aaf522d97519a8036cf2b595379900b06150477505675a4bb0e84d7accd713d5020c40b7432724b2866ca3ad3985a3210b63e27deed25d75963f20b030dc864f063522c4ea823a90c3ef7c22d59523892289acb75c762ddbde6ca0a0c6381016930c21e5167db6a74ed0677661cfe27d8775b842ff09982e845e6176095216f138efa998bcd2b7056d8294cac95d311800d49e13585bf954f90f27b8d60f53a2d76b67aeaa061677c86021e3bb0d289b74c1170695401fb665ebe646c8614d6b7db275c41cf8287ddbccd3a686c4edc2761c7adf4ceac3c1d276a84d6e8961db690ce096e46ab3454bb6cb140abba338e51a81be19017343e198319e41a7fc854111a948ef1c887587a49d5de1c627bef450455a67af232b16dc0a6441e3337ec10d6dc99ee11b2aebac6fc83421b1f55dfa8df81d010f103c9742c673ac0f238fb829fc2c798ee7b68330bfd07b3ce28963d0e0c1aed64ff1b106febab75ffa19fe7f9f5a19a5ba4b403f9ee4e875bedb620cad97335e17ac9e975509a04f579901c6d12b1da357e4ec475db0c3ed5cb1a5d08a9adc4b4c5d5c9897aef9e7b47a959067ac4ee70c23a59869df6d990358e1fe54688a681f8e4ffea1e3e2e1ae7cc82335cd569e1d6cf3b9def519bff3fbe21a90a64d7e92245feeb25d0812958fb8fd1e79ce83907e6429ec517a6463e38e290667c86eade7e7403d77459b00328ee5c8d241288ff41b278ffe8f39d838f155ba3b86d5030632ced4ffe9c39a61a81991b163561c8fc3833c74454a15e35fae0d3cd1fba3a350b67972645d8a97672f6a0d9ae58872156b4e3996488b596b29063fefba69f905c55ce4124342bf54b34dccdf28b8944b3fbf23f8bb194b0e7a787474ca8db0c157756f9e3855421eddf4518d30720a392c9edd3331e1f3263297468bc11a67413321267ebf52bf276585a65660b28db3b2b9db35fc849c4cf3ce47f75d99a0472d268114138ed376ad536e0e8b535ad64a7d1ce57f154c853513d51d1533cf080f9fdd3c3b128cc307a87fcd21dd9d5bd74448e04463f5b16aed7491f8cc9b26b4189447af92d57e6d66329376ee46046baadcd509af46d27c322f3e507c532c3814f945b94fe188a938f39fcb3c035bb3f642a3812defdc9019714baa78d349e9feae822a4a99be9cc74801ed08e089d231f8e44af4f060b312b14f2381dfd917dff79890331bc110512406a3e780357f62b36044dec35031ff96bf8e5466005818bc5b4ea56d09c30421bcaf85a5ce942f7c3867bcff03e548e68a1e31117924a797b15ab8ffb5b3243fa0f4d370d3756d94615a1d6f9b1d5802f5b7279837439701f0b025aff7d1b54c8e05a4754fc85e02e5f58d40c0e6c68517dbfb2601da3720e67d19085c01cbe94c692ec9bf80a90be7380292331e6f94ab8a776f125315432dc7032e5c13246dfc2553873977a535e443c52bf081c624a3b3209da7e76318a4cb92380f5b4f3c329eeff8bd0b7f7d3496a42ccfa8594617b38d7c74d147233dc83992ffb53ee7ffd5f2ca7216e87e6c19938412d388f96b7a6e1af72ac74dcc0642900581832f69c7a896031b21a9340659a68f9fd73e3c54a26d47f9cb9a78dd14a45ca6870a167ad7997aae080f069def9f27fa685f549c742984b5a8b1916f570282c2f7f133af2bf3877b35edcff70bf421d89c2e4f6c78de5474a7e777a4a1097f2c51260c93039cccfeafc41b378ede90531b7e36f45b1c00b68156829ee12ebc6071af56506661a1dcfcc2ef2c2c5848bf9c8d3412f6ade95f93fbf900456689f4b130acf8de7ffa097f7a823f8df57a8b0f052e56a4213f001ced2b9123c7d1fc5955f58cd9a3610097c881ba8d037461fc74d0142f1f8d99fc812322cb586db086e26781fe3926d5e8ff3b276cfeb536aa3da6fdcb1c8b65226f73b18eaf98264fd415e733a2d15eaaba0247827ff9266c86a3262304ec2c75fc397e46ca5d52094559b231f6e2ed8cc6ea3730bccc45b372b778bed9a84ecece34a5963873cbb3685ea7ddf742b62b5ca8f6aebf89bc1418f0adb23105e1f638ecd9c9ed0aba90fa2424b710af9e800a2a3fa0c0d09c309cee6f6f2e15a9ec21ddc1009f1fee2a01f425eec37f1d5d9275038e8bb6e19edc679e57e08466207b506dc0810f422bb12dc1b5da77857d050dfcf353f214e28cef43c630de93ac77dcd223b6e3f1b1c07dd0499774adc787ce4eb845bcc07bd0e4b7289c51d8e1469126356741e03844f4ef00a61cd2465edd7ce124ff3a70d26d08ea6406ed6bc41fceb7f79ef941500456f0bf9aa5d51c33b41b29ec40c36fd1ea2c412dfadd8d1d0532b0e77ba88973fce200a3749100844fbd2f54c9551c4e4496feee0145e442c8a71492b227008a2ebe671de737a40131b4f75307015bc960146375fcec55124517e8c5759e507b2c24ccf4c86c4c55db7bd31b328f68e7511e0e607cd5bd1e0fe2586659aa021c0398ee50d433c9799bc8fedf8ea992fdc6aa6f16a62bb0534bbc3480cf569579f35c68d8288d67cc550e941c5ef4a074b5ff3ea3c246a4cfd7ca909626decd85a99dbaa62c23fdf762beb6dd41cf7aada4af435e62d8b1cf52163c6d47b8ed0094c7aab6cc351f459282a416cae467cbae3f22bfd8c6654462d21deba544f544589341ee783837ca49ae99f8c92bf281bb7da461c751239d1b5e16d0727006c549c0e966d814763af8437a7ed1135b89526e2907f5dd280323b5756cc6f641d24bc312ffa6c49dca7174790f36a3494185d6118b888db4276c5fb874946cd8cdfcc017cbfe963d690e4a789f362a882f0c899d216f4108662da2843d71f1ddacf9390d04e35f635416383d241b03e17235047716dbff18459d5b5ca29cdf18718314a4f0c84c5a1e59f18bbd263ad9b9a85787734d1f1c0caa176bd14591c47e20af35393a0e21e18b330834d4ea160204fd6bed58ea3e36616cb2a7bcbfbf2ec4e6d40bc6f35ecc25f3e75f036ea43d7933c5e48aae67c9acaf9b7a9a01a68cd9b1deacee1ddd01814995d5a0d686c46ceb6955d40ddbf61c38d4ce11828a4d8059f19640f7b49624f42875edd61b572e92d9664588f3e760beb90c8cd3bb8c08d77b7b6927862fd8036ed4cf381c9a0e78d7c13250404e6f2bba2735c06c49bb5f86e170420e78157c50269fd0aecaad2756321650d2c388143229e78837fe72f6fc4fce9edbd1f2dfc2f0dfb1fc4fe316bee9b5090cef908e4f60620d46f67b10e48730ff6b6c41b40f67597095a1ed494a8821c3b076c428e35791825006c8ed68fc058c5465db352e073bf5de8567ecde541976b8eebd157f0b87b453bb67365d8997312a660be34e206f65f7a89af0eaea40a45e2ee2a51f277173851ad64a56a51fac0f9389eccc52edb0a297ddf241a2147f07f24ef4322a7fcfde8c1d0d77c8351febe78fb4fae838ed3b36eb1f9d19ea9f771044ec3c1c35bf5dbb66e00ecf3d3ae95fc2e3ba04bde086de631384b70a25b71c81659eb9fe149945421d96666c16ac03b5b75dae9521313606c688879774f640c7a95f0358095467b7ce4925b784ae42d566a25a05a08531bbe96f82e5ce90bfc8cfa43d6300bb893a4bb51f789750a7a2560d8fc6c5929f0118094c6f9a0ee19c2f017f82d37751000f4a9872eb1be4d545cb62289ed182c01ddb7691f31c71689024165d019e8244e66fbb3d1493a04e837b47c747032e641aa9cf614316f99f4a70f1b408ba507336f9b79626dd26e4eb6ad309bc85c0b1d1d102651e52525f26b4ff6b36b0eca8b57dc7bfb31c2c8dc921642263b40b72d43d3cc783733911922c20ca760f98f6a41cd5893627ee24a7210dc93c7127d94ea78de5f440e73c4c4d23c78af923729f261ba4aa75730ada804b82d183c7956bacf295f24064cbfab58fa6db4870bff60864227dacc2c50fe5feabef0606f6caede100acb2a2db39926078105f0b5381b10576917f250025c052f98f859ed196f11796ad3a1b3cfe4516dc46e1c4e766d00c31b77205171d82c86dd6740958e9c78127f1a9c3d514fbc3044d3df3df7f3b1db92d06eb4740dc0f926f78a55ea97dfaab05bdb3b8bd113752a3529b2ddc64ca0bd1bf5a4551d75e4a9ede6edc82425f530fd589a7479d62eae9142513b787e3cf9a81f525c983b5eab9ee123b282585e436cf54999554df84051511cceae68703c54c9ff1142c2186ffba7e8f95001ea6c24bcb7bd4b657fa1cc52377191abe3fed4bfc524e5d85871d4b43c54c0902202b19819d8f57c49382f4146edece0937ad694a585bc564435fe168cc34c3eb04b2bf01334abbf76958b9fc7d1aa4e03cc8486f1e5e519a38c10fc0c48373a67dcd9cc28633788dcf7eb1105cfe9f6c148d3150bafae5312dc3012f7ddb8032d7f72ebe4dde5cf6ea62c5abf95daebcfda6da17b5173d91b3f0bba3efc12bc1422c942d803d7678a105d614f3e7df76e9b5057f887ff3d3d9f322c2b841316dc880e84199ae35b871e9a9c9f008214739a388b663b6c8dab5f47f22bc2ec7d6924169a8de7de8e167cedc0764231577bb48bad04e8d56ea3e4c86fa02c2cdc759bd78cda0037ebfd3d54ecc54e52133e0087ea111fce3b70cd3fbaa96a32e3e0e9482bde4526bb56102f11f274b8f6905f8dc15de36ad9fcf6bdb11c8948315f85f91474a992ecdaa835d588da5e7d6391c896901839472e6316dbe2e6f0c575ba6633ad79bda5a6539f97398c2e153b6b3e392fcdca8f4b0ce5eacd946fccfe47d0d3d873d98b02f7ab6f66030113f07187cceb6d1cf09fa84ae190207666f24373eadfe07d25e4f06d725e69a00897eb80361daceb7134029fb3910b8d8c56e69f314eda7d4ce783649d340b71b4baebf8d61b06a022a5bab3df24d66c44402df9d682893f9403e25c6ea583f1be987382365ecf8a8323539773f0155dd550fc4c7dbe88247a16e243281c113c31f85e26a2d5d94313f79e851bd3ac99827591a7ada19e8e40aad0608f3f2daabe77794014fe4b44883ea8dfbb049a8bce70e941b5c493c0dd3ba7af42cb9f756df320de789b75bb052e20875480a3e2066a2c4655e467645b86c8c476f33b324dd7d43177520a5c3905a482244e8b2c6fb74a29af392d208028737195077c726ca6c64df67934cf91d46b5c3f93b7ecd6f8158b02aa19fec5b47e7796079eec867251fe96c969fba6637f4b3ddc0767f59b767c47487ba71c58f36c78a7f03b8426f58aa2018a1cfd8ba59eb70c1deb2a02e5c3e3a0addb599e0120d6700ed551eac14c658d4b236dcff827d3ed07d30acf8547d5f7f1c4dfba71a3d42d6076be9268e0cc90b6557b7d4e5422af8bf56efbbe2d775b7415a586d217e43ee6d4adecf6925867b14d4d471f2c43a877a93697710ff8cbb648711228fbd24640f87bf22a78d1149c9eb659bb5029f0766e7efc27b3e0229db918c5f617bedc6bf935908c47e5c0b1f9dee76b668983e2320b70a8aac9495a4d6b57f29a6022ff3232278f74d32d7eb6edfbd21de2f34f784d016a0da1f4ab537fcfc40d50f88b1f4b4f019a4bff1daf885dca08e1ce946e80dc899b7846137a1c44f1fd04e54d8a027b05df1666a913898420ae530e93732ced8e580ce1df32f9094bb98578eb5a684539ddf3546da44789eafafcad39c14af67c735cef3a647972eea60184e94748be465c7c5ef6fdf377f08d4fd9664f8b14528fc674f8dee34a6b46aae93e3fb9302ae1c65ee6883f1c412f9b390c4a58b9765bfe302d14fc2f6e6d9d8d06f85a5c4bfefc009b9a4c81056a3734be3d5b39aaf72cb1ba55da98f6c0dd2b702de46a9bef070ceaf4883a1d0d46187c71baa89b76a975c9ee928fbff8af9f0d080f8d6f8f3c878a5ca3390bbb7abfe71e0f63e3812de4b88d671a6da3def5e48aee71042ea10b1c211f2055b9043b18977e26e486adb501d2acc72ca11a4a628f93f0bed5596ffb9ae7abc4d40c4ee39cb18d12055fd74bcf35ad271c879a5e724599509b78e1dd694d1c29b54973a377b08f6bec636647a31ca4d9ab803b947fc7550279269ad1bc3f207e6be8cf5f2f7887b4089ea271b754f954be1086d407f9bcb95516a00d9e133c39d390d0f39e1f2129643e17f09142cb201843b3e772b7d923f2189a028a9363071868005e1ffd652dab51a93394e5178e00c6a35da6ab0f05bec4df024942ca58a26039f1f3a2f8c5874fc3ea90d62f20a37289fb77f373813410af9a4537541714e62e8d168622f07090129d61e68c1a31887e7cc8809d83c89538578349d6f83619535a6cc23f32698eb4ac18cae910f59097da9711bd4eb0a94f9e446677728532628b7bca145509c5228042045932392a2485a25f6604fc5e972813b124d1923fa59534e029dd214ec846a28aa71e8a23cf4cede19beede55e6d1600813de00fe161e3c5a844a6f32b40879009a16037e2dadb3ec2345b6f040a6240f25c51c1e4b42b06aa347c4023448db4327b88acd7256dbab587eb001413c0cdd40f2086c5cc608dd3c1142f9346daf2c83dc51da978246396e38ae0aa9620331cd80560fb280dcb2174fe6835236d2e79e6e648cb7e1ecf2b343384a58e7a403f9a754742391c4865a313b92b0d6b9270b3f634c47befa8ee4494777f11366c16ec038437b894a9a3236ced66fdd857f75ba22f91f8ac4f1d497de6122e85aa73fcaf3e918c0b7ea0fb50928cdb476b5fb848fe34ece6d8b142f3a5db29657e7b8fa6cea0de055be3dbb7c9e93f77209992d0bb1df1e2deea1454db61be620f0b131f3adccc6b2e64fd114699bbc0b6dfdd1085d1a463440d95228344f772c7b8319d8df133784c2812d7dc8dc5c4b2e178a453c2f4af7a9331f99714547969767e16cca4030d6afe73216c634174fd26ebf7206722aa37da32cb307ee5d09d646adaa2827f627c3d9d3e7c3c0ff818a7062bd326ed9c69c281040aed3731615cab7c57ed416fc092b730254e33d1f333f1ee68c9d01c34c7f401c7b49096a20bd115f9bd274ea4ff35b5bb72bfe3e82c9930ff7387a6a45f2e94d4d35d4cd1e0293e6e3ac3a10aa747005227f2cca40908cf37d6130fa83bcec353c80ec607ab669c24f702701486f64a610edf77cb1a561823a787d37b32cb1154dfee0b3486a1c76a2446c418bc7553b7a5cffbbb77ff6f83851964aa6ac6f145b6d0405b78ef3da3e96bdce822c45280d8fb7f5f72254203893777ff3c8a15d5ff635ed508a9a58faf282b8e1d044979bae04783e9fd178926a0262cad4c454b37da9991ec590b7c5dc0e8fc82129e80d5608af07d6df832c605ded9a0383dc6551f64010ee2fa72ee4c9be54682bb52c793c3359728cda5a981d20e314e1da0e54534207a874bba7e8e7184a2f124d5b360a4140edd5bbe36f501fa9faf3037e3993ab9adeaa66cfac5d976948365ca30439dae36f3cac4ca83b786ce6715e3602c7be03226c314e513b2eb801827aacbdbd0ee60a69d7da6ae79697bb8dcb700f91afea79ab4aee5232bdd81c2f720a8076c4f368c20a1f0ba03019fdad9afaf4bfecf2e8b751b9f8ae3e820efb1707cde8de23506c401fb06667a493a7bc1931b26171c316bdfb5e1592b4a47813fdf859857cc48f3bbaaf8d8a26a5336e24db7e8cd5b21676686b2b03dbbc82e316a1e7a2dc0bf3c9f4a424aa1bddfbad9039e199f64be14527ab13ff7ab91b438b7fbc96ac1fa4e5b91f1a383475a16382f7fa75a102f19446bf8b4f56bf6fdbd8a9928da9d57af0fc9628b07cce074c0cc2767e0b9391744f0cff4ca85372365cc1d8df86f731f01e3c449dfdc7198cdf55e255df1042f0dfaccba54d00d194c250ff00b212275b77162e85cde38867e0f43ddd704a0851524834b882206b8ee9dd166dcf4538b90cc4ccec3c50367f5d370768af1e1ccdc67681ce44e5de32d4c44310f2b53d22a07c14c9d55e64f48f45ed8fe60988c6b8b5cce619b15ac671b3cfc19abf863b9ebe63ad7192f68dab0746f0cec4ea6d22f92115f16e9b3b5f0e0dbf9f7226073658e4bfccda20ac80836b2da66dcff4de6cdf65747d1dbda43e6f68dc07cb55b0cf8e7028d925817bab424a6ee444c123541f302c41c34a9272b7bd5a391c5465a3021fbdf8043867db040dba3103e7d5266010e8268e82849b8149f5693a9cdb8f4785938663131742a7dcf5484f7368fda28649673bd0d39ea9bc5f099bcec4b4b3c1e54a6d35b062472bf5714aaa118ade0039d10838983249bc6aeaf6e90c939fa0a3285c0f35a3a5f79cf18629e3db167795e0f4fb1669981f431ebfcc74730a031d7887470453fb54eac46de72e9f7f80265688a9329ea58b4c396ff51d6ea76a5aee10a276b4fd0b3e9528a0e11fb722f5706d7d57203bc46809f3e6d8047773f53362e461ec71d0551621224c731d8a0d578789c65f59f304739ece1b840ccbb984e716f6032281b2328403f6239db5c0d8c7573ef795480c53a584da36a7d743ffb33c8763e7b042ddfdc4217c453425e6bfce919ec9b68e647750aea6a6aad6dcba8f0e62f7553f3b27c0d6f6608ea570693fab96ffc6d0f97c7527aab93a560955835087628661a9483fca5c86a9d6c94f467647aef65c334f1b354cbc8c9e71f157abdd3140843a59a0e3962ca0b2ce329e3415118d3d52909b77eefc22ecf6b7d29fe445ddc51e95c72adaed309af14c56d4faa73fcabcb92230a46fb4947fc0882ded484013977ff446b7257a8882c8133a6a88c8e620d2693ff06b6f92472492aa6982f0491ee6629eada71d642ccab06d4eaf84765db84dc35bef47bcd2fc0c941044441827bb6ffad059ee79fed239347047fa3544cd362d35f6073edff1d45cf21cb92b07b65bc983fb4c615df9635200a5e7571856b8e9069bd7359d2f9dcf9b17e6375889d4e0f37b770f9b244d9e3f92c731bde0d04f88d7c4d7abded401a498d5f21fb6b036653ae60203bcc3afb134dcce6e078b80079c26d66dbe8c2efd8936e85f8d2aa3fc302f787d76580097189703bfc9bef40f874aa4c17159e5b071651da8e9d15fdda020e0b31a13afa204904137092acd9828b4cfe3af9b0082217271ce1a6d142b85b6366a4466db022c306ddf4d3cfd1d031a8a425459fbaa922526e6ff6dc7b840b0c44f90be03f56c08e98a7b2f9d73138ec44d8de47494420f701bb7d5277b5efc222cdc008102e26b37aede28886ddb9319f8b99957bbf58408181eda69f01363926fbfab7ae426a6a85bf7af4258886e8fc74b367d4760a540ebc0bcf60c824c4e57b59e12f75db5c1569bc07e249121c931dc2c7952bae79547191cb078d3e37f3264ec11a671f99db303dba7c3a371fc6522d159cbccfc0e206338fc548724a92ee9ba006322bc8368c161ee12923d3f94a27211251c56c818e7cd9de99cc14d8379f0bd3c157a87d26f961c9173de3e20492bf6ad9bc5c203633422a675a88762e60cdc7becb64c7224e1a0de18704ae85b395705e82802d2c5f141798f098f3bf8302d1497a82567e6abcf196146a37df10177df24cfa05e8bcf220d2c9129c3fb0878f5de6330e4d54f91cb234b21972bbe59b506a38131c7e7856ea3059809b19acc9989ae7f4d2b78606135fd6d9ba3ddb23c8513a75bea9aa6731766466197b7a0651100593fdfae9467e111e2da4d409764d27e030082caa477a93282eed82aab80f8e8e1ebfdd66562c7c2a41c530e99ba0615f2d40b9efdadf3ebed221ccababc87974e494eaa109ebf59c0bd7fbe03baeaf27bd591585bb10c7b6fc8482580eca11bbcec25a40bd40a1849a8b2206a66a4e24cb7ba7e522edb9ad38c09dac46e7f4c1a5ab56172aca5dceb1241b8f497a0fa8f341b3681e6eac1122630908aabe53d43f3ba1490052d46715e01bc6d9cbfa2909f792b751f6bf382a35d6d51d6f948bcb0f8c953a79fa50ee62d1787648b98f29af42ab9b6ce45d7a3b1fb5305c80a9ede46db5c2e031c4a3c25b391718f4481294d282f0371081e6938153021785874096a7820e056c421027f5020002b008091d5606d3711353ea529a468ab6a1003df1eb9865216849d6f02f4db8e8d67ac09add5335a066211a3cfb7d80ee853d7749a520c8eef6bc1fd75905253839244d85b5ea60a2c9c579a05004ced52d38b7cfd74066372a906da6a006ecaca6f21faf6ffaac1dd37cf0a40cd3015684227e7d22d789a2b2ba0a0255dd246ea7750df351c644e821724166a0038e31cbc0ddce075f07fa53c46f8601118306a5331667e481a095236e7e5c471a1408aa4f9967a9193628f15900e6a675fb047bc2a4bb5acdd6e79d3ba74f3320ab304789a0b05c37844d04d9349a32e82b66338d270065772a1c1821085b40f1c164f80a07182afb538dd349e1ecb8cd5af80eb58f83b0ee21d1469fe388fc514c1bff59f306d2a772c6dbd9063f297be64d665dd8194f109ed6fca37467c026c673c352aa616e1e35e9a74e4ece140fc2351cc3c350bfbf977b48d2f49fb57e3d9c0dcb57180e5af352b6a3a1d6332bc351059d4389ec25ff000d92c5bbe14073992ee83098bf00a8b22283f3eab149f8c97ed096646fbe7189a9384a3619b0aa2afdf9da85bbb3118af57d061663a040d6dee6919df73816aba6bc4a8ee744fc1d45bda6511f44019616e4508c15892659638348aac1888203ef8d8adb41994390326546c06f9c98703243f125105eb34c69814c10e5cd177dd234886b8feef16391ef264e080fc862e9914ecb045876ca3a1196a4aff06753749b0d89adff698bc9298b29716a4419ff5a38a62577e6ba1d1c51401d42668f26e24960ac7eab344b2a6f3211c2c5df7fc9a4c827fd4f8daa22ba1e73614c4f40c3bd80463026bc55572f82e25b4c5dd18bc9ce8a4e271a52c3da9c259c41dd06cb165056a071d4853dcf94c8597a601af1940e41a7834139190f9282bc38a299ae8b775daac922e5525921a3247d959b4014d073c14b0445da3624d7eb9d8ebca9df888a876ca801374aaee2407d3b31609b739584308517afc245999e19f47d73645f43564e424f6c8eec3b9caa235d0c7db574d04eb44fd543e80b60437bc848cf31fa1ced87cd520904004345a31d2a99e579a49332f0cd16f17834c9989b5845c0423575e7b7b85711ce88e6c08f6ffbdd57d09b764da4d81c5ea279bf7e7d9f83ed48b210235c7c0091d62f00c8f296372e909a607bf0e2ba82828f107a7410e99c21fba7dc29db25f1ac6c9ed8f55d0d9df366e4ac12a460c183cfd77d8df8c965d8d9f9bf52c400009a8f293b53eefa0b0ad73a38fa3e04dd626a20b3df4c2db821c2f6cad5d281f08ba75d923ebe90fbd51c57da4aa39465fa7ba2a4c11a92c70d9ec1163e2f5ed7452000b849ec058aaeadf430303cbb1f534dc468a2d187de4d51903c2b1af33aa9a3342b37b6f17bc7830429a347cb47d1eda9347faeaa63147ab92f6d5df9b0b63e677b06634e65f35faff4b137f6fa8db140c76937af9b4ddb73d37d158d43cb5b876dd63f896f2bf617f751223a8083befe72a2ffedbb1b8dfcb03fd67bc99769c96e72f47f1f273aa609cf439c2a51d1b2e42cf22fcd151f3f459deb6cd9fa09b4a11a226c1a482ecc1a93ff7cecff7d2d4c852248079ec6942f08ed99da325622f167c1fa6d1a4154735896ecdd8666d3664782bb4eead423319e9b8f6a6ae9ede8aa19a6a37a590e3b8ea5c968b6c612e189668baf6ebea92f474ab366c850742e46f2b5a57664c6bd2af84e7c7a47bd641d65ec6f5de0cc1490b468f894d896377c75cc4baae01e7f58efac342c36c27c0e768da4f019684b5f84fc041d8cdb26c5f7a26b0b57b4d58811f013d00fb77db808d322e5ba00095c7b19de314b84f31ab7bc23c76231989b735d159ea67eff63310bee6fbd35bb0ff19ce81eea32f89e13bfa09b0a131d9cccedc4d04b7d90c251974a6fdd500dd744d8308a01d046c4902843902f837b509a1e968f2fd9f472e21d8ca8ce12440ccfba161eab18df49143997bc24086f5bf471443ebaa4f1575cfc83a9d941a2628c2c510db390f1a0c3858b58dcff55d3d2213d568588b51ed485b0e61996c5497d1bb701647041862aec6c8516eab2ba3ffa20bc7d2cdff044e791cc338a342dc49f7ccf9a10dc4bd4fde13a7ad83cbea2d41a185d3d3711c5ef242bc9f4af86bdda50b7761b25f57b3a15abf4b62ac316ac835670eb7b81bf3c83eb647c0bdc302970064bdd1794202ec0a3a56051eb292958e6a7a091b53b466216bb0d54af7cf921111f43f681687c72d0640a11539dd0774b266a515630d08d01768ef206029807156a0270fca7097c72c8c8f84f8fe577521f5adabcd5c1a5e1295067bf5560cf9bdc0d7e680cf1c5f4ebf503576ff46d1918bbd72253df224733f1dacab2856866801b9577a0e0bd8abff6497fdb454c74f194f7094315f0dace428325810358d60397fad44e89f39bbcb21741d3e4847b9fa073b22f19de4e9aa1060427e4b37e4fdfde8e34f22fc8dc8051b35afc9d8434c9f83be8ba9418d9ebca60dfce33e4e12b4aba9b0be9e7fd6b7a19ef1fd91a513f6d304a48c9c8d7b447343f485f49786aba5560caf721b95696ef1a494856c9a5a89e31520aa949a917d6fc43335d9b515cccd16ac698e27bac031b664f01e062971cec20be42a4951580df6acff450917dbd2a667c129a6c819c48e3ff45fb3579d6452ba76aaee0b8a78bbcf10071e6b1609b5aa817ba01d69d6aa46b1b2956580a470f4f27d1ffa8c12d37c74d04859edcb8965b5c0723b7e4d71eb1b1e27d5d422fdb8bf745fe530d8bf4672ffa701517e3598d33ff605d49b270a471be411cc5e3e4008b7325051b1a9f25a75a80c058494bd83b5d25cdd95794ef1a191260ffe07b479310bdc7258d74ceaf0a6a8ded4123417b000ddefc0c8f56a4b00d25e1db717c069c34037924d5d8f4afe7c9f62f4c84b697431b6417f01d39bdb22fcc5bb6832aefa4bc2626dc3f188f3ff7cfde6fd1f9d06035ead8b4399da27f48af0ac09ff7fac65596364e2e11ef90ddd0d924e40b35d08c1022dfeafc06a24026f18a810abd179c29053abdf9271188ec29186293e65dc6bed23ed82715a194e407a3b02e0c9ad21a97fccbb611b98459d044ff9c29f8f542047b00f093522d975006baff85e28cd83258071a46037b090289830ee94f4201b3c3789b0d1fdda7a0ba6d16322095001bd260f16d8c03eabb8027a0623b67420ed6999aea03574be25c77e72eeb1f7156b822811fd3fda4a424ef564c8f1e105e23e2afe50593cf800f634601957d0280441c0c6083dfde92d7c34b5e242ca7621bb571d8d2fcb3f3426138ddc7756947e5dacc30c495239e41f9408e085f9a4aa62058f58dc41d35ea6eafc6b783b24f1a4c01be160a019c61d39ed6ea07f99bff22812d6b98752169e78aa04868bc51d12e2e9f690048c4244ced7eadda5b1805af385c6f6c9e13f3b5e753d8eabb047f53e776135bd5cccc4cde53eb3476beef04bd6b9d9d019b4abf0f4d07e091589916ca91c7d0bfbddf6e136c180067c852f01a0d0210e63bccaf05cee2a52b1b625d6ef6a7531c94172628d741ce2f4a670fafccab60c65cec02dbecd0b6fd2a7f995b2d231810fc832cd427d1276f58c259433ca039dbb36e8214361e646fdcd31c84646423d72169853d26b805e146a4745bdd8dd57ac55293c4e360f358dea5a1c762348340e55c6b80a4f00f37f7aa82988528536898424fb81959729cb8b045fb568eb18e816abe58b03e8a0c909d7f9b8202c38bd2b9427aa603bbf007b30730be66fd3ed25702ab46d5b9b240a4efb3d309ccc3a8cc0a851e1d0f2fc2d068be871db31cd899ad83d547f1c57bd87ed59a4bdd4cc9a4e6dc1da809bb2eaad516e43b19fac81f27f2f49ec13866b58d1578454aef66d4e35f133379c37d3918c31389e8fd74a30972fdea0b992a718e2829c369e56c0ba43822a89de0871b94112144c5d045b7e35a3f5ef6b536c68fa0ffd301b14b4ce484d55af972b700949950d67cef6a9b64d94639ff57aada7786121d3ee9f9fb37d290bf9afd7d5049fae15f0adbafc0eacc30f948f0da0409c63cbcb9145cc4c1b710716a52c11c7e61293fc37ea11f2842a8e60f97b79523553bb6ca654d7063fe6101e2274c8fe5930451e4d131f2d366b0007e7d6fc7444edb8a036a739da52e967bd49e1b3683607f6b03b6bc389ff131f2407c49af94a0f1f3ec5e4f1afda25ddd9c1f3fc12949951d1b7733b661cc5828a570ba01e201632345ebc3fb2af531bbe761ec86ac1ccfbfc7464f4530570ee4c8cd3db47aa688bfc4b494fa45b447c47456a810e28451f0b34901999d188e4b61c29771b93019eb63da99fbc752146dde2fd960178ad2ee55c3617f439ae29e6a7632dab5702c02bec095fcc7e774fc39a88909474f45ecd4e08a8c72ea93f8d13ebf9372c0ac81f2b8c4de38cd397aeeb626091909464cf89ab07d1b823f17e728acbefe73efa4b69c2ce60b2e004b7ca3e16cef99a3aff6f5cded6667228d63d0528addde21329a91e0b274790200df07f38ffeff5df9b8ba818974b6f3fe7692267e2bf71c9e2f742032c14aa923170646a0e6642d2618f52959fdb33531aa5892f7011f06f787834f02657c047fe89b7703a3e5ae1c1501d1da72b9915e843a549fde9ae1410474366772fae0a3693045b1c137c3c2e68b4783c7a15b0c39f4e0e5de66feb0a64463547674b2363bdc70e8e188ab707828e678f58edd8ea2e60ca3cad10eb5b0353228ec94f708022ba1bb45f39136bb0d70b1fae9a6df1542ad83334a0dee1fd99ab309ddd6b69ad8e3ffc2108281cc6c4a479274f60a9304f5ca1caacb4c7badb939c2fc67593799fc7b1fe51cfd0c78e95c9d0bdf7c8a0104d802bee344c30c3c60ae26e900c3300cc3300cc3300cc33074c4a0f98fd614aabd9d929456474686581197af3cc924534a2909ce4c7ce9e9ccc4a73313bfaae1db0f1908920ce80cb60cf7261b99294e8d444a092211102b2538c6438c2f9caa65344eb28caaba170e6b312ecea7c8de50036274e12459d2ac49aec79fee568b185c4087e8d3145cd72d9c24416d7889a2f736e21d3a76ec38460b4799cd3ed1efa927081920c4c8c24998127464891734d68b85839e70a2959a6827be6e4f887185d3e93bf74d2a09feba136258e1982c59b674f36dd2fa5538584acac4fc372da60a15cefbbed134a52dedb470e0681b6520b884185338fe78bf869bc8fca1c4a3871e076248e124a831793f533e5d7e8c289c4ac7d55c769d24b3a1400c289cefed4dd7dba90d9d87ace508c10d1e3c1a4487330b623ce120b2c41c9163a2e43b9915c470c2e1bdc44c8d9c12554e42d670e8d0d105880e5f15c468c2490a8f9156f2969f7210830947bbd63acda2fe5eaac3418c259c544f6c36996e83464dc89ab1410c259c6ce534939d38315f0e5903d1e18506319270d011bacce44dade90e249c4cbf84ada6a6cae9216b3a83184738996b9f8c355b5131c2d14e5c67d693e4cc1985ac81e8f094418c229c7be74ddaa849bde705114e4a1c152ee4280ba74c216b4338c916bdda6497df733f64ad0b219c2d75d6a43ce24c871db2168463c6c9b8b9b2fde47c30880184f358a866255351736dc8da0f8e3627896317b3b202a2c3ed05317c7092c25ac5244966299fa490b5c781da05317a7052a7355a09b242fcc6d6043178700c19abe2cbe43b249512c4d8c13183284164ee54dd8d43d60a53104307e6ec5a2b3d252879d33c40deec438b06f01841bad1a30c2d08317270b65871ff4f4c99d908ba471a20060e4ea92bb4b4e83bcb7c12e306471ff94c63e9dc4b28896183f3bad865d16be6ff25316a70dc345d2ab7c59247ff3168709269e994cad2255b7f8c191c93f49b5969294eb87c0c199c2c9912d73d624a843c460c8e259c1c9bd6a682ab1e030667932ae79e25ef28d163bce0e079b9c4f4b651ff790c179cc42467503569c7ca4fad388c8813219e7af259122b4e1957629d2eb1314c6815279125e784ca8eca1ba9e2a825dd4d4b88b7c828150725678ecac6c8b01742c54173c6a67eb7f8fa7d8a5365a8ff3a2987ca9736c54949b266499e692a575d8a83142f93a3ecf2d367529c24f1e47d29d12e8d128fe218da5cfdc4a67cd9b0280ee715ca4f9a2edb974371ecb7b50b596e23640c8aa3c6b5ce5cd28298bcf9c42946e5e492bdb524d978e2bc29fc954972289915d389934931b5927a4a5cd570e2287a92141a3f74d76437717a8e9237bf683571accc1d0d9593358a3271dcbfcb26c86c8d16c6c431c87cea1b636f2c55b9c459bc36a6ea5df3db2d71de16a54bffd32bafc4516433e692764a53981207f74c6bd1d3a43695491cccd64f66366468a89238cf879293a2d999508ac461ec629d1079f35b43e2ac7a9a6f464e94971f71ac36bd96d32d2631978e38951665c1746d9225da88638b6e12ab30da7221234e32e6d1b426ab43991671d03269e524e9abf44811a7949424224f5d9d56137198dbd85196f7b54f449c72bd52636edb0bd61de26cfb69a1b26bca921be2e8a24fe58d4b62535a88b3bba917b39891f519218e4996bb3d71accc448338e81273487b515aa111c4419f947beb4f853a61200e62f1d53395fc965e85acedd00162d701188038a5c979162a5e531e71c8daa3fd0e2f78e43867fe70925162e8550f79b2e57e3885c6999cf93c66f4d4877349b2f3444d23575a0c5933bb80da0560f0e1e4795abafd929ef02364038c3d9cbb2effe788126f326b7400430f07b1a7ef4b902d993f6c7c6881c5878e049300230f0765b12c87dee4592313b2a6a307888d8ff3a105161f6520783898679a97205d6bb3fa5ebc172408038c3b1c64f2b8970b7de28cb60a30ec70aa2f4986f07a51b19484ac3d5f2012d9f13c2291f71daf0c62041875387908a14dfe2a49eb7ac81a4831b592050c3a9c33090d32657ccf366b0e673739c9548cb15291e5701853d29c5c8c0a1313f6028c389c6287b41494d0ac4184c341ef29e172c5db30d6bde1244ed87dfe9968a92f216b20fa8048649d00c30d075325c8cd55aa24e6b90d6cbedc6a8234a9c44a21208f821b3c58bf00830de6922aa429d1fcb2981f5a34e02362e3e3011f5a60f1d14547225d3417aa05186b389dbea820bf49216b660830d470d22e9d27a35a7eaa250da78dd5672e2644a9f62140b368596c0152001868386993622f5eb68525f5782201c6198ef1bfe4b3dc51c81a0f2e4070e06810be0f2d1af0c103078e0444223c46a04347081660982199ef8eb1e45929c558b7e427c4699d4a2b2a0e59e3f1377a9cf60ee3018c321c836edca58a6164b312b2f6478148241259c32cb60001c0136090e19c392a855edff66e93903590dfd1c5d9f7e8623c7adce81d3d0a04608ce12ca745edd35c4edeca9a8198d20186180e336a6d368c5de63ef9944347166520390c0d30c270924e5c92a45b922bca1c89442291881988f1b8c1038d47d9b90106184e928e5d4d75428e2c932f9cabb288bdf09db561f7c2d17274959598af278eba70b0bca42a87ac9bab202e1c64e5ecd7e4268dad680b07e95d295d34b13369480ba7cc0a5952af945ab8b370d2dcbee7ae37160e96b64df3c5199597af70761f35b3b1ebe5826b85d3b7eca54b8b517229ab70d01353566fdf9c0ca2c2e1b22865267c56502a9cc2e124ddd75e529d6b7f5238ecffcbeb9524a5a847e120fb6bd6992d4337289c92d29304911db524555a7c6881c547245206003380f184c39bba18217a37e69376c249f7667ea5d275fa344d385bbcfd52a1ee55946e5900830947bf306a5d2ece7e2d4b389934a6c2ca43efd518b2a623c9c114b0c087023e6c7c24e08302587c442285078e2eb8b8e1050c251c4fe99e966f1315f2948493242941bc653331cd899070aa526289e93709aa467b84d3893239c3bb9905c2b2596c01b20386118e9ae4346dd2a67ba39b2d6014e1143346bfaf2da1f4dd2c443889e2157363dc8899cce1104e7275d7f5e6b53caa0cd9625ec010c249a98b4c6d5e6ef2eb914824b201cd620b10101841386d8810e9ab6669830c104e2aa9a46f43bc29b72000c60fcede25ac6cb0e8576a86ac618e531a00c307e73819359bcedbef2585ac79ff0eeee14517391ea00980d183b3960c9ad5f3d574887870ecdb4d2797ec7b1ef30e4e2778a9a9d47ba32c46072731a6123bf7949dca1b8c1c1c67d32a93cdf526e9c801828383d9978d0c72b19594dce020d737448f7291db26363898bc73694d8b52a792d4e074e2093bb561ed334b68703e496acb9f92b94cfa30667050522dd8a8dfd8a83e0c199c4decde327745e5761831388f6c8d1b371354a90e0306a7109b44460966da4a87f182c38a5da99824a9dc9ac370c1c964c57c4aca94ca84532b8eb33f3a64695bdf35b1e27426cde6eb4ce124615ac53154c9590ab3a1a64baa385e4939ad625016f746a938b76cfe885a10fa64102a4e1763d888ea320f1d3ac551d34245699336c5b9b2f968f7db1f9bbb1467d5cd5fadb1d432cea4388d869994295d4a32e7511c9478392b88b9f99c5814876f8f93eee4976e1087e264993dab7275a038658ccaced4afb00d7fe2d8567df2b7496131cb9e38e9b22b759763f15deec4f134cfdd9ff5a564614e1c2fc93131aac2a55c7913673ff12c4de8ef5251d6c431a918b49e9442ff929c89e3c5680d5ff9ad65379838c6133e4de6e4b6a4349738a686d19e312fde4b6389d3eac8d9a8ddf65d9a4a1cb4d5c8987c57eeff52e29c9704255b067b12a7aa378d97f7f3db5c499cf409eab151d4ab0537120737cb13dcf29232950289c3c6a58c97c40a4a3079c4b1fe4b5f5f8f97a03be218dff6b287e698991b71da78d1aa92447f779511a72d692f67fa2eb92eba88738a2c3dbf29a3b4a28a385e854e2da5e74a2549c439d32649bc0d9f1b3d224ec1e782b21e39bb49798853100fd96ca54b483b0d716c9313f3c4bcd8269a85388789b33149d164ec131c00210eaa2f6a92f5e2208e616e835853fa52890be2a4a2648cede55e51148883f7b889f71a162a7b80388e38b94b66372579e5fe702e4d32e8b392df599d1f4e6295bf5fd2354ede8763dce8af7d49162fe7c3a9d64ee5589317b4680fa7b32e9da5623d9cfddebacea48eedf370fe0be5a37c4b46370d0f674be14ed814abad1c8f237d09d81404c458165b80306000773865342b2593b825843eb1c3299589d98285ccc675eb70ea3e21b388cab997a4d0e1b426ae8f3c09418ef70d418e1b5f2ca09c090021063087837fbf26ef53152788e570dc8cb9ab464405dbfc8e1e2066dfc5175aa4f100c020061087734992fc4bad3953490387934959834aa1e924ebcb1bce261ad7167359ef77216b251881298918801bceb3a76e8210bf2d6ac3d15a4e8a55a5d335676c3878c85c4125419ed925180148d28f03242d0311d0fb12e8e0e27704600f0358c3294349df984adcb76ca2451338c18de47750201231439831859309ad279b1bbf6ce61e71982185c36ad9a5b8499d5a257098118563b7cd29299e70735e81c2c9da24711f9636eafc046d34a693c1d1db81194e38db865a1dbb9882deb0090729b2f9377b4c8f9a5ff460c2517309735af64cd0f7128e72f569621af90d3394702e753975ef45a864bfcd48c229c90b9964550e0907db4d52ca9e1b543a494738fa9a2832ea6212322e46388f4cb9ae154d507b16e12093e8fc4929c549494a1b6610e1a4b6154776845bea50c85a311c8d13983184930926d8c979d2d859382412295bcc10c2b94dba3431b71db20662ee0b04723850e7c00017e904bc86194138de09cb1eb901e1dc2e6631a39980bc1bcef8c1f99458153ee3ddf22c205f2090dba1a3c70540bae0e1801389f438c167991166f8e03c62e1ce4f86cb92d60283193de833ef7f772f16b2c663ed04a77bf402221100c460060f8e71a456e636abb953efe0a4312899e2b276edce3a38a505b1aa583266254be4864722e94604390767ff4b82b8f66990f5f0820b909c818353665242344982b824e4203cba8c4702b2d8026405336e700abf953158c950299bc516203d66d8e09ca147c64eda74cd5b0d8eb1c4b9aba4e790352e7e4d308306276d39f9ca2f2c68882c99a643eca943d64a304306073f4dd5a2f721ba7c2dbc90008f1931c83776a49664422bde3f98018383faed2939843651257382192fd042ae55091d9a6250cf70c141576e4da9ee27fb5f0e50c0024278b403427874483be0c3c6870216505a713059df709d56c81a2bced9a6244d6129fe557615672db74d82c92b3b7951c5c967943c5b22d6a2e55271bc1ef5e5a3a2855329bb220315b968dd969ca79fe268fa45bda61bd5368b2d404a86294e312b285d16a3adafd7858e1d0b8844bad0b1c323111e168844d28e4804c928c529daa81cfdf65e0b0e1cbd3d6e7071030748488f2ede4f208314e7d259b398ef72925c1ac5295c99e8ab13a91b45a2b8943c491895843a14e7127392e7598a8d16038a63ea1a314b952f94bd9f38ebc94ae1a2443d71f29acbcd17531232493b7190e2a2d5664eb2a02a274e5a825bbb5e1ed73437714ab956d9ab7ff2a6a0268e41f6c8badd77877c9938a986bce895a241c58609f376e63e296cec12277537569541ec4f89258e2264cc88ac52c2c29538c8b8f0bd73fa2154c5011994389aa0299814da327e9e4ce294cb5fe4c36ce3998924cea74c12f396541289638787aafe8c8dbe1e1207a5ea2f1ade2c79fd888369d4538d9e3be2a45592c55b9a1a71963999534d57348b991127a14eceec7d6599f2224ec934af9aaa73b3501107738be157e3b2fb3289389a7811f7d38cb95f441ccee6e25572bf74957288e326316836f9212e2b35c4319498e40c4243e67f588893cc6d61bb82a6929f10079571e36ccab824896e10a713afe44d13e6046512c4394b68bb70a25a8a41813849156126f76813931810c76427cd941c93c466ed0fe78b3eaa56d2bbc6ed8753da6e68d1bef14eedc3e975c34b0ab3d42d1fce7667277f54892577b587830a7a52673cf92e2e460f674b6a954bc8093fa985ac591ece1025d64a7cf3bb4440061e8effaba964e545837aef702a25893f6697d52d523b9c4e30492d4ed21634c63a1cd3c6c304ad71a7263a1c4f0a67719651948c16b206f223e81e5fa0a0b1d005828c399c04fdbdfd5eb5b4fc7b9ce07380d47d68d180a41f0bc51e32e4b096f7cbaef9290ea7d01533c92393aaaa0d1c0e624ca52e2d56e2f21bced79643f4c692e1864439c1941025a59edd858c369c443d6d7639bf628e442291d21d3dba90c18647998a497944f5ff04e29fba8b0b7cf1118868e62964ac014bebeaae54b1c42b667c95a687b2134d6e7d486a1b91482412f9b061e3e38b8f40088f76800d052ce08b1d3ab878094422c8413eb4c0e2e328e06fecd0228206d320430d2721c348372117e325110e1ebc2301c5528e2f78e40164a4e13ca2921c9e4934543c43d68a9e0e13686123128944d08420030d27296275c4e9a8145430643b2d2d44c6194eb2a9f43015be995bffb071071966388579d3641bccd29b98329caf62a5516aa944a4c8ac0c32c870cc27291159ea5741d917f8b0118944226b3c07196338fdd79d1e21e52d4b5bcac910c379d4bebcfd62b78d320c8751c10425a99dabf421180e4a2c299a71c1f2a59b1520e30b4793514cbdb5568792c40ba7d832b973378df14a195d3868ad5f5db4cfb09295c18563e78cea2693e4054b656ce138aab45e5beccebaa92cf061e3a32af041012c3e1647175cdc284c90a185931ca5a259c824759a6c04195938df8925958f2f2dd9848593a5fe1bef0a6a5de121c8b8c2714655bc18542cf91407195638ae85092dc1bc2bd9588593b00d66a6299b6bcea870cc26846a095ed25e2f74838c299c764d3a392ec473a3ae06195238a693fac3a4507206cdf80c32a2704a4abc52214d69e8927ed8c023830c289cd2b7c2d2a813e3c56e2706194f38252153835092cc97b87fd828d605194e38c99864bd4d7333328a6c9c654146138e49da6ca2c7c4655790c18453864d9a9971b2e9be8463e7558f7e093aa7fcffd0028b8f482412d12ac850c229949225a824349d2497e8176424e1bc5da12ccc04f512ba71410612ce6956b2c1bbe4b28d7b41c6110e6253127583bcb8397adb820c239c54ae0f3dfd8ae762114e1bf3ddf65b7cb14cd1028b8f93820c229cc4c7829cd58a8c211cac3f3e47dc59cdf84238e5138450a67c354f8aca08c2e15259aea4b595fe643280702af9047126dddee343b09cc5162000d8818c1f9cad84cab1f182beb857c89a093e07480e1d69fe8004548f1ccfc5e3381f14c0e2a3b440860f8efb3ea36ea349d209263d3806b7fc3995d16c639e07a79362fc16b125097befe014575b4fa87c76234e3a3897a9495a3cdf3326e5e0206b6392c9f54e4a22c6c149aa8965a56fd7f23738f7a938ffb724455bd606c75029c54d37e73b97d6e05461bff7922c625d742590418383689b284988cc21a76406e7b5dbd0327db5294806a7fe6b3fe147a4e6f863700ad58ba3722a631a0c0ebed9dd3796ca9aaef48263527255259999249d23192e389e182366617ebef3b6e218d4e689292a8ebc9315e7136c2beca249821095478c559cd27344a95d0dcb6babe294525887c8935b62d694928ac3cd8f88b236994e93216b5c3c8ec3858e1d0c48dfc50522112e1ec75fc9620b908e818a832ad1c4fc4b5382cb28c6290c4dd31d85f4c8811b88610ac6c4355552f8499b90b52f5099313bbec78d8c510af38c5f497f49d5f9e1ebc5c7eff082870e1ce903ad171f91c8171f811c3a22910f1b14c0e2c3c647e4c3c6c7a147221f14c0e2c360eee8d185004211831467b3aa647962c88b263f8a6334d1e6ffb6c1474ba2388fa8b5a749193708a118a138c9d05e4ac99effde3506280e6f7663234d9cb4d84622ef313e71d22d4a92a4d3a09035bd420c4f9cd364b193db2e9d962a640d04b11307337daa79abd2892686ac71146270e2145bc3c43cf1d3dddbc4c9640625b78a3664cd2e09313471d2a484b09c364a12bfcd2146260e2a4a53af495933b92f87189838e88f0553497f89a388dc97e4253dfb724b1ca4fc58b7fc880dad197b438c4a9c2dc5bf29259750e29892247ba9c6a4cbc44b99c451a3ba5b9a8a290329430c491cd389f9275499508c489c4b90133aea3479cc7684189038699620d4c97e85acf1307b88f188d365cc739dafbb65ca90b51edf8048e42c0f311c71f8b73ead92494c51ab0ab3d80224008388d188e3688ebbd950e2e91287ac598e0918fe430c461c333ebe436a9cf1106311c712f511e65da9430c459c62da46b33349bd26e9042e0e3112713a31fda376722aa20959437b430c441c3e54956042a68bc18242d6368b07e4988018621ce238de1fe65d9f214eea947cb99bc53757480b71509a04a523375d63ca31218ea64ef3a7dfa64cb90fe27c5290d9c637f737fe00e8420c419ce3f48fd61cc2ed822510a7303a27bd5ac98fed0171d2f5d6fee1606d62ec2931b85988e187e37c6865150d771b7410c4e8c35947be249934cdb2683510830fa7dc25c978254e3a6127216b205883187b38e9df9494e0669e414643d6f470d694b397622ca9c63f640d44875f1e4ea1438c52f137e67649440c3c7cbb354aca38880e374a8871875365f9cfa657da935a24f2a145033e22117375596c01120044c4b0c351cb92de5d25397c4769885187c35fa5d72f2548bd0b1d0e5a54cc36d3d1d8edf4cc10630e07139a32565072a9cd57161f363e1cf0a105161fc7851872382995fab5d9966951c6428c381c2e5f8398704b42fb62aa0a31e0705e77edd3e937daac7fc3314597c5d8a3458cd0dd70fc8b7771b2cda9b0a3369c32ac4aa9ecb8ca3cb3e124fa499a9292e44fef790da756350b69f256c9b551c3e1fb4f2e9e74a65f9a341c37662cfdaecde1dfa2e17cb3514d4c5d5295a59ce16025c624a5a89646af6a86d38949bc4b412fc341290d2e16e24c850dc9708c9764c36f357dc33663386ad64bb2f526f99642311c4426c164ee9ca0c70bc3e95c4535e6d2a73a3b3074ca6d977ab5134cc2154738897dc1cb6a339bcadd08276da54bf6df9eb3ae14e178f77b7dfb73c81a2f6ee10a221cf3ad64d0b39b26884bc89ae9e891e301ee4338dba8cb93e2efed4a8c100e165329296ab52c9c6410cea7276b0a2b41057503e15c2ac93935bb27fbd7883f389aa80e61d5996db7f6c141d4894aefd48d31e43d388eee4a6b25488d952b0fce69e3af7955a3daeb3b38b7877c8bc6201d1c4cea8ffef40c5bae22e6e05c42bcbca5e0fd37a72e5c8183d3650a56926e30296bc90dce9637fd7f53ae0bed6d7092622ecd29ab59a375362d5c51839466aed9514acc15aea0c139d5b44ec8caac299ccce07465f14a686cae8c4f06e5f6b628965e6e41b444b37277567f995e5070450c0e427da9731d2d133a52e10a181c2fd586b3fc90fd127ac17184d2d229c2c2e59c51b8c205a71bbd7961563f735d91488fe7c1e34a1089945d2b0e266d59b75dcc27e91e033d1a070322911cdfa347e360c5296673d17cd12f43c9afe21856593535fd49268951c5415578bb8d6a5271b8d496c41365bcc65e549cb7de4c4fd420ec4a798a53261f59fb269ae25425e24c960d66ab59298e97c662fcdddca74c8a73c7a535794c1e3b6d328ab38f9f8e5df86b9c2e8ab3cbf86fd424742f0fc531a5e02ed671b39a4aa038abe6c54ebbfc269c9f38c93a4245e8496aa7439e3849fabf36dd36c650e9c4499fb85f7d694b069113a70ed39172aa16b3d59b3886fd3fddecf1e2214d1c4da59c964b4c694ac799388c469daf4a73aab5c1c4d1fa32a924ce8d50527b8963c50925e36626976e89c379854a621269254eba66522a712c9438456bf7f3322b29893a8983bef4baa6e724cd3e2571d8ce352b496b4c4a8691389c240997d1625e924d9038685c0c96e2fd289bef11873fd93754a5bc2485cf1127132c284ba167c962ae11278bef1d199312a5d25e18d060c431352ce662bbc94e177192bbfd532d99ecea99224e426f8b468b22639712713c1b69a9747585280b1187bbca26c86099431c53a9e749e2ec2b8bbc3c7074c1c50d431cd7525ac6bdf9d03c8d429c46bdc418ea3349590b218ebf1ba4554a49464e3788f366968e30db52a94c82386c8c69d46ba8bc9a5929d008c431ea98dc885cacd0b9c70d1e374ac01f5a34a0c70d1e3732e038fe06034040229148e417108980f0246800e2307f319de76c889e113781c61f4eea4cd809d22ad7093bfbe15c8252b1d499248aba9290353bcbc08d2e9aa540a30fc7bb607a45a524a39f26648d87f6b0f1457263c76720019108062291c392011ce93d12e982478d23d0e0c329e3e4136ba25a10ba12b2207849a0b187e3493e4a9229b3211f5a34c071dcf0c2f470ea1b259c529619734df270f83d0f6942c6e0e1fc9666fed48c0aaa62fc018d3b1c737ec62c2efa9bec9059f7c5da54a1ac90b51d3740ccf60334ea70b4182c976802051a74389eeb5d16dda3903573388971c1e7b24cbe50170d399c422e6cd6fcf356e7551168c4e124059d31b2365c2849389c4bbebc4995704a5636d13a4dd078c37d964a684a1b57c3fa030d379c549c2d11ab594d727e48a0d186e3997c2a838c61e294d40e1534d8709a114a8cd9cdd794bcca1a0e42f326711be64e59520d874d829d0cad60f2d5491a8e7766925c455fdf0ba1e1b07579d54f9219962f76f438c371a3970926548acc0943d6d40c5994136385f9aceb53199ebfec5d5289df2495030d329c4f52b2529ad40f934cc670d2a816e7a458e2a485216b6534c470acaa18ff4c6d4e5299de046884e128b29bae375e58be3c00e4430b2c3e7a7c03985d40030c27d535d1cb453e34067de118f364b9549bb6d7848840c30b16b912d0e8020d2e58c40334b6d09cec17f4ccfa981886acb9772472a3776861860108050d2d1864c388970b1d3b9248c42c2768644137a9fade52aa202ce026cb55dcd479587d854dfd6e94d10fcf4ab142b992e7c6dda064b8b811c22352824a1e34aac0685f92176d2ddf387074323dbc90400e06680568502155924cbae25d870347a7ccc18083008d291c2ca55751a7265a7d92c229a5986550a5a41105bc4dbe339777574aaeb25af1a25996dca40dd080c2c1bad3d44e2e097bf909a76e5352fe30d5fe8b39e12c6761daa48e65b250146834e1b8fa63b14a9eb05e521a408309c7a0279f8c0c15c534c9124e22674e55d815317e2be19454ca2939b34b3acf24e12487e5c657fbf7ff8b84d3e6e69a89a3629a1a0f8d231cdc32891f1e7e9234171e0d239ccffd24e9a9712f9519b22aa0518483cddec8a0c439b1a00e592b29a041846348f33841c7dbbdeae28609f20b1a43385efad5a4736c93924df039de700834847032934d88d434bd72cd008146100ef3b129bd4387cb98141fd000c23994186dc45ee564520a59fbc1b142e90b9d41840a271db29643c70d1f1c77e64cd65653bf478e0e815e0f68f4e0f83fef9ac6ad4ca56c070f4e6941c592a1efe28b773aa0b18393aed863b92276419c3c0f1d9c72c62bdf18f77ed6d7e180460e0ee35daf69a225ad7c031a38388ff64bb15409235a221c386e8ce006e7b00a32698f177162648383594c93926cb406c7506f9e7b828c65293136a04183c36ae65332c6a82e6f85accde0a09bbc0415f392459984ac7df123c85168404306e7925bd49ffc72480c8e31e5e28af630e9462865400306c74d55c17a546daf331e2f386abce8373993ae4acaf7b8116202901e1f021a2e38dcbe09b995b96451aa561cd376fea5d959db305971d27193bbe92f868d7315075927c564eadb26153f551cf54ed853aea631bb09592b17cc48c54155dc4af22b724e4c1a2a0e267ad245c8bb1883cbe514e75fcb667bc26afda54ea043019188ff0974a033a65044c46b052f653b0ac90cc18c529c7ac399ff6f8cd870241289a4ede8d1c5176690e214677ec16492a5eaa1482407334671b8a876a9249d494891cf10c549fbad7f89a3e9a2205fa0a07194d3cb620b900dcc08c569f344534ef3d7d8c880e278fed7a346685017ec2e40fe8c3d2f8b2d401e30e31347ab74a9d2a8bead9914333c71eab830df6d623841e88619c58c4e9c4a66a932a1232ec254cce0c4594cd49470bf335b72c85a46221f363e7a48e0c3c6c78716584422a68a199b386dca1217ac649326a543d6d052139674cd7ee2975df67c2d138737315e4cf136788f8d988189c3e9f5d3b0ee95d34a216b65de3bb4c881811c13f8b0f1f145f2077cd8f8308a987189f39f1264ec3bf4892a0a5903d12bd6e3048f9638ed8af42bd14249755b9a5189a3e5ebcb26498bb9c4b432f0a105161f48899370329bbab4d0a592e346ef709bc4498edad56e8f5fba8e8b1992388fb2f4ec0c61248e7aa937e9d9d0a184ff79e8c091d62071124ccbebc96fc97c5ac89a19c18c479cabe3f3ca04b57e33f2c01e9ff86738e22493cc6b15d390198d38afcc9aa81b62da3d62328311a724f2a3a48dd0a4bb0d59e397c08c451c6e4ec80eadf16418bdde9a086628e2b0ea9ef19b54ac6429646d23302311872bbfef9e4dbd8ba91dfd381222e254f26465bcde84aca1f1210edebb234409322d871fb26676d08a65b105c8996188e398944c5fe7b7c9d5d46c7cd8f8e0226d808b74029048848b206614e264b95b6d292bef62f6c58e1e6513d8f13dbc98c08716587c58e0c3c607160b482650720621ce95bcc324b73f61330d59b3316310ca76bc558af34ab9332cb88e929a2b0926dc83478e1b28011b1f1af8d0028b0fc4b2e37986208e239629d5df1e88b309d3a441ae68897f0288836955d8b6fd7f38c935ab3eb3dc0f07f5fd5e7993ed89be0f070b5697c42f1564e87c38dec8a4c414b524b1bdb48753524a3849c9a0a41c5aa48763ca172fa252724d7f1e8ed99d7392f655d7ddf070ac0cef27577be74ae80ee716bf0c1d5b2a8f88ec703c7de31adc829638a9c349bb6d74ed964c7ad27438c9a539e3abe2399c426c46f7e3b2d2ce5ca40d4422580221cc90c34964de19ed6be37034ddbb157739295a0b878368059934dc676f2f6f38ae6d8f45d9ecd14d2e1769037a203966b8e1546209bdd69b5fdf2a6d38fa5e4aaae469a567ca866386513149319bded0ace1a4e23695b4f3abe6aae1f023359fb5b89c8e9886834cf7a571192f83101a8e41f4c3454c0acd9de164b16b7396aa92af7266384951b3871a9717f3ec86091247271d58acb1036694e1607f3193668de72725231126c3416e7ba5121befbcd5319ce249663245f7def3b4101033c470166d512c8d69909ab4613889722a8f06b92798e86038682971a4acc65abd4c9ee961c6178ea1e9e19a34891db384f0f0a28b326ec00c2f9cb774ca0899a4b412b35d38d6c81fbf3c8ba6a43a85195c382641cc3567922d9c2ff3624c3e1e1e2bd2c2494c426f833c39a156e311894422588248840763090e0a33b2701a73af2045c369e78e8563cca632379a63d454aec38c2b9c64cc8ba64a5e124b4ab2c239835a0d17a34bcc6f7ac0870d1e74985185f39a4cf92d94cfc857a87010aaafa2e8cc8bdd2b47513898bca14ffccb9ee85a24b2a7060240e12c22bb962b9e20977d2c10e009a7ebd2342649f7502bf31508e08493b67fa8fb3e1bd5931508d084a3057b91f9ba27db7459060230e1b016aa52368b364ae51248311060090719cd843659f486d3620708a084535249cc27fd5f1b6f19040224e124534b12af74281932af0516c50b047037646b5fa58be102018e701015a7bfe44bf4dc532492050218e1986438c1a4b8aee8efeb160428c2298d499924d9465a0ced8e1b4d012e22910848006e4000221c469e7cc124794956d2af0b0418c2494ad26ad3888c23b52c0208e120d74a4e8b2605617707e15c7b92bc9f24c3d9c900e1940479824ab1953496fb8363d6a06eb1e7bfe1a4f8e0549a4d5b9217d37f287b7090396536ff8a8933711e9ca4eed67c2645662d413b388b4aa7225310e9e054a2c69524d89974c2cdc1490a225434f9ad842f3104c0c1c16ab3a69411235ec90610e006a7cbafbfa0fe4bb6fe3638b76ca8dd3361cda2a606a77abf0d7995e66b7204a0c149ac28b2bb6ebe4c3ecdc09364b7515a292d83933cf9b2316c927f718cc131bd299ffb124d7f6c0480c171468d3cbdbfcd968b002f386dbcd85dc93f030502b8e0d8a3c4bf7cbab272979826d468c5e93b4ec7bafb87febf841aac38f608d527e48a905a9ab12cd458c549542ad7b20da6ac7d551c4d0c3be1c26b92e4b758266aa4e2a404ad1e26bd9abc967dd8f8d0028b8f4881a2062a8e7e312c552555c85ada043eb4c022a2896792a8718a53cacd5d7f259e12b71ccf2371e0d091e32f1089ece89143478a44d6f850c3146751797d6fbf43497aaa2bc549e934f9aba60a5923454aea05b9d61b426b1a07ea1aa338cad5261d62e5b428d410452776c9202e7f23d0a123e471f88dbb39d408c5a9c76e4d74b86857a5500314c73321f4a5cddf6c932f353e71924a980dd2642ae1b324640d734cc046488f1b1ae0810347023e6c7c7cd8f8b0f1f1a105161f59a650a8e189e2252fd5bd3a6629448d4e1c4c2ce5724a8839719096d9366b65369952d7506313c7b3509b7faa4773961cc080087cd8f870006be2a0e57c6ec4bbc4e8931a99384965e9a5f14b2fe5490d4c9c2b93782377fdea357d8963ccdaf7e575c67cc99ca186258e3b5a546d4c614f5c2e65a85189e3a8dd5c569ab744b5f428711aa1a5a28aee11ef8c8e24c78d31d498c4f9d784dd893a91c449b6b0f5534abd8c385d240e3e3268bb1e2572710289c3af458ba31694459b1f718aebb75c9ea9d1c7aae188c3862d93499031a7446586868625380bd468c4f9b7529faf8ed8e6c98c38a857b631a549ccd9fb220e2e1bf4d7c6982774fe410d451c4c9bc922b2267b339a88c3f8f9a9df8eb85f09351071ccd1a6922a259874e267775bd438c4c1f443a9da1295e5964824cd10e793d4863da9e458c9f50a350a81b88bbb53d27ea84188739afc1684bccca03447861a83386e2921d6b4dee4b8d91f363e6c64186a08e2309a2a9bcadb1f363410c7a071f52d0555e2085d0d401c630a755ac4841819e23f9c365fb685927719d9f8e1b0ed72a26db57d38c66f53324975a3becbc243a8c1877386d3b222a7e2f8c91e4ee3a7d1cd4658e53de9e17441cd574b123273df3c9ce2062506bf5eb3d7143c1cec6b4ca4a6cc3b6972879338edb9ba8d4b9212b7c3314e52f1f43599f425abc3419914832c1d3abd2a5e830e27e14caedc3e1bc38a3a87b3786bd08b61644ca73b1e35e4707e511ff933319e9e60088f7600e2c28b2c4abab17138c91943c9311356ccb25cd480c3299edc7bf16b6d4ed745efd0c01b4e7b417e28310657d9d00dc7d825bf65b11d1b593248a8d186739920674e56994da966c3d9520531a2bf6431df1ca1c61a4e32a635f1ee524376480da78de2f197b453d5c3349cf7d7434309a1b4f68e86b349a56634fa6c59fe673889b89c9411627389a7198e771dbf993c3334c694e1d4a929a8745e7a528d6438b98bb29a5149925cd36338ec8e7ed9b12fd9bd12c3799494048dad252649d46a84e1a044997c681525495aa90186d32855da6fcec438d52c116a7ce1f4eda3ac5f53f75a12106a78e1681a4ec928affd96d72e9c6284b630db9342e62cee410d2e9cd34c923b835022dbeb164ec24eda68596dd319522d9c4cd92913cc4a4c168e77f29bb85e2695fc2756a881855329393f94891c2996a4c6154e529b3629528486c9453a814935ac70780f8b27ea28b12e2985aca1f1e203a91714b0800d0a50008b33428d2a9cf63b934ecfdb53e27966478f2e6a50c18baa31859398a87b61ef3ce4b2a50435a470f212dd666acf4b7ccb8bec51230ac70c1727b2c4a4a65443d6beb8db51030a0733d90ccb4bcd30b6a0c613ce232e2d4dcc7b9199d670c231254156d2259d10521d6e72d468c231a88a313144454d177f0262a621a8813ef9d93a644d910b359670122a868df5863d78246ea186124e922e8bb1df555dba48e4b450230987d5984bbc8d710872dc305fa8818463deadb8ecae5d00bbc6116a18e1182e89b1c54bca2d6fd528c229837888af0931267c20358850630895c668168be154de3a2c56b69356d1637727c193e044225d70916a08e170bb71432e497e62f642d6724c2012c9a1230827778beb19ed54def0e0229da006104e9ae7f25436f503bc08b940ba517e70cc998265134648b9d27507357c701a95a25c09d96d3ea61e9c445eb8be49339d95491dd4e0c1295d0c1e2bfead27273b38dac5ca4b49997c555f07a793ef3efae25f831a39385e525eb62d423838a9fbdb5950b371467883a305712fbaeaa45ea86c70ded5985757253538d909aab29eec320dccfcd2301e66ff8e2e66703a3d295a9db89bc9a4323888571b7919a361deb311a91183e386bf923ee399a0452289c70d2e4e2472831a3038fcded6085319338afe05c7ee0cdaeaafe182c369ae87fbddf89b5a714ad9ff3b6d4b4caf3a2bceb561425890aa31e9ab38aea9d913c42cd7e6a48ad3c93e3a7ccf84b23a15274b9db1955412930aa3e25416c4c41032a8f4e1290ec2b7a489a347c96c21539c4c9a9c9eef97e254e32d7ec9448a63abdebeeb9f0a66f3284eca6334434f8c288ef9a42426419a84e2a4a5f96531aedba80c288e33262717c5d463b49f38a5916d171b535b12d513272dbf8de9d6c2b4edc4a9829249cfc287fb979c38c5553e17cd982d9d7013e60debd3b399d3c4717c43e456aecc0caec8c4b9c4b58d8d95d3274c98387d09bbce30fb120795248d216a83c7bdba35b8c212479393d50b5fd1344c2a7190f14b846ff79438c98d62294b842ad5f1244e3ad486cf20cfdb048d248eb3314a5fbd66cd8cc4e94b10da64f51212c7985d449dad16b2e6b980efe20b2d767c175df40e0d5cf188832c9354be6441a4fa89234ee95f372f4eac9a991a71f4d4932c9c98843349861107932649d75c739adf5dc4b104d3be71938a5f291ab26614710ce55b256f2e9974dab7596c0192e38a449ca4d296df124d10713ed920ffa2e2554ad287389e9aab74a326ac8a6d88538c39192a5725acbb853865c553b6a2c4cdb624c4b1944c92dcd20ce2246659c6f825efae7b82387957f2bf708dd9b905e2ac29873ad12bfe9e7401e234aa84cce0beb5494efe703c25f48553673a2693fc70d813fbe792767fc5b80fe737378bab70ea4e5c3e9caa3388995442c637953d9cdd4ee98ebc4b79747a3846ad727fddd24aaaccc3716f648c16bf9a4e878b87639d787289314dee7050a22de3c41cfb5d793b9c4c92b2dab68567c9741d8ed66226e42525f545a6c3e9c4a849da249b685266e7703c41f365ebd54aeccb07ae90c3b1fae572ee2dc9923671388a789d983c5fd3370887e3eb86535e42f485124757bce118fa6db915c36c68da0da70a27a68551711b8ea2ee84d593f4b4c91a369ce4d05cfa2572efe26b3898fc4dcbf1b9d153aae118d2534ce7e72c282d0d2779622c4d46c5b660095963c0156860cbf35b77dbbb64be9ce1a45a6666aaee42af36c3499f20325dfbca71a37bfc8e32045c518653da264992794ec8708adbd493baba26fb6338c91f429fa81f4a9bd46f7185180ed2e48a3954ef94a8ba06ae08c32957306164bf9866bd60380936327aabee5452d9155ff0f45c52b2f8852b93a217ceab9d9eae49c447f390b552ba90743777eb5ad6d787ac5d09b4ace00a2e9c8216ffdcd974b9cbecb8620b7785160e36fafba216f4d58442d6782c09aec8c279539be0aa7a9a2faec0c21557b0f4ea998a9690350658e0e3cc0c575861396152c67f3595151fe18a2a146a29bde88b49368b2d40fc0a2a1cc4681ecfbe9fd3d786ac1a11ae98c261cb5f4b1ee1997a43523866935133bd1553293b0a273dbf2950387c9cf0b3bf6dada27cc2492ea917fd6b73c2a9a4f4b1d5af0fadd6154d38263d27f3e9daa082129ec0154c386812bce449996393a94cb86209c74b29de7d4496a431af84838cd69663ec74848c93700c5e393f2ec8bc3931249caa4d928e58a8e4efe5035120108602614020108441b2dd6e0073130000000c18170783d1804851a6791400044d462a4a30301c2e24160c45e2b040180c8641c1602810080482614020104423a91487d9dc003ec3fb7412b092a9f6186a3fbb0c87aeed6257cdc7b04a8cc9a978ce574204e21ae433572bd6f3cb0db0854b9653185cb94ee6c1f4f553600488d187e816d07aceca575205f4b7d7e37b4b8978ef7406f580b8d5f00c55bb87db6edf43a996ef550bd7ab7d27d7cd2d46d25899f65953bb45ece57f36ba7c306eb3318435a03739fb90348088241a848b2c4a000187d3d8e640cff75009cc14b3071b4d6296046087c63e504d70dd840a5b541e3db38fed75df8e1f4611d979c76735264cf4e93cc97f1b187b55b1ed20592160a94f40e194eaa4ff6648564b62b3224c4d680982b92f86d503c9b4b830db960f190687700e5ae9b3206341010422bb2ca01a5a9bf21d76c4106946b5774158a4c68abe1f31ce5428edca95138b18097b9d293df683b53332a525a4bfca45faff81e6c2eecca3f3f7a4b2dbebcc96c7e4aa09c261ad614789b5919c1473a90a07613720b0faa2141c385571c4574765e49d667bd67194da8426518d2aa64d8f681535adec14957e9e526d42a08f6715e461ea8b4f2994295b27b68c40e539e2df385ad760cca4ac012e1aa5293230934eace0fe2e4e0dba4d6d7a18f5d19ad8d9178eda12fef197b412d34b69a4082e0cb3f5c7022a2b24833cd05c5f246d99b77803e9a0d2e99aeb60bd59df0044ddd47abd017fdffaaebcc3d928e6804ca1c505c89398fdaa2c9e5aa6d8fdd19c001502f030308f05b795b5d3aaaec55a95af41a5caf9b56801e7f8ab7472b69f816945e17555be3be13db80a07a3c9b34da1eaac284e7eee215891b045ac76f18009c3dc7e324fb15e2ebe9c4d857fd2443f9868d3540d69ee5a48b33980e254486b18c30ba682166b32da47b986863a3c961429584a199ba2a1c00bfc60534a4d2a7ae0f38429c9bf12e25d2c32c73bb41998879e649a3e4df8024e3299971e2028dd2c7aba9594d18fd2b40d50a5c7448ab8b2db58fa98e6646ad64d59bb293664e638cc8b9040b2791a50429a02400f28b8a1dc87a798f91935078939153722397031c58fd715f4c935f93355b80b0487ee759f2b8c79d8ac93baa942975378efc4eeb6292aaa6babc54878c630736a79c06caff3d7cd31ae1d557d7af7ecabf337db6c0e74374278859476fa85603a6999f303ffacb20bb4a9d1e98dcb42ccad94297d2c225c747c66d0053168da7badbe68c20fe1b82dd4e117162bf7f1598e045513128d8d78d2c3562b4b1c8755266e1cd865b3246be8912c5e83acd9097a08200fca3ca7b59789089e570f2488656652bc6000c0a33801aac5b783647b8778b95cea5806b55cf04c94cf218c9531fa354aa132c1600274f291a8c4371d2dbb9caf782cbfc97cdb44ec9a25b15466e60221cde30b213caf335d4dca8d653c56c4636b91cbeb15f7cb3dc666e00cc26c7dae2e417194a16f9dedf41bad49aba2931942a2361bb5ad8377492a36c1e3edf8394f6f2e2f2e87890d61c126cd2374030023ee4928839ac602c7044e4631ab4aad77fa2c4685b8241498168c5fda55c1fde8dc8b93167634888c52bb4a74688c23361329b160ffd7f8a42ce5af758105afe323e05d1312a15839fa0c3958753849e40d93d87d2672d61bac5d0266de7ea8e48b8d7d2925ae660cea51410c4f974354fdf250d9e2c98702bd337c4a2d8909a55e83423de73cf462f796503aaad1fad3b7d8df5f38fa538bdce6eb0bb874e00a641a17786a891cbbabda78ff12a21a5bc80b84b4933d35425c3a484b98f81741de94429809b250120bd77c9a037302afb442b72c486340efc0aaa90bf5c6b7081773040ee6fcca282d048edd9c1507f06fee1989a2f5f94060ef91498493084376f93835d1436fcd347307736aa1ac31ee067be3d38d1dfd458c3efb424eda9496648028e91d167c120ec9f628b7a3ec3b2c1222ebb2e05190e180e96aa17e7cfe41d3c7de10e24025bbe3d9aed2e96b23521b97e5965f1e955378c851bf4c33ec66ea125e5681ca1168cbd2190ae2d6c6115e7fbcd143c9ec6d416b9f91ce787ca223c07d0d07a5993d85ebb477de4044351a6d3cd394829cf6cef0359ea85097425b4c2d66577f270f6313f16beb0ee960e947bf37e45fc1e3d784cdbca535241b4015c0122669173f6c243fa7ab7ae5a1ba49b633c36c4e11016633a3c1924908cf1a596de398f6f4cebbbf7da05cca43260ef82d6703c445ceeb7ca733d52ed1d3c8e18fba5e2042649231f473a7e26c0b17b880640c120ef7a864522e18ac3e527e9b1989e5934e31a832da70da1b25215735219a659f1cb8ffb903003f4aed26ac9588c0bcbd7605fe8572c21a7a2978f9951d85429a81af8bad0947779fcc7a8004e99535f47691e002a8ab69f7684b4c68efe7881a7265308b4ca8cd038d234dd8e971012230f56b90a06fa3453fa267705e590e31bfa003e8045abd989ccb38dc5910bef008f8e5ca0b94ef64f1b961b2345d062c95f97e99e4bba87c56fba6a18c0cc0704c0018099f9f7122db5ec23c909739288777606ebbc01d583cbcdd267ca06cfd3af4ecbe22fb2ea8b78f61fa3134caca360f99ea86a1022c545c93b232710379e232e8471c4eaf9676952c67690933ac98e67535fc5631f82f3839e862b89b5c6201f0451c625a53eb712a535422a2de1047617d045ceeaffbcd43deb752c14db3989ae65136152f8d80b1d4c0b6625d43af2cef5989d8182300ed8c6183a372801ffa4cdc13404f55a415ea5b23207efadea68246557ffa362c7c863afff7a822844904e23774a6919e034d2e96fe8fd3515c603b09c3c6b12afd9e18a8d977c1e8d9dab252206cc88d24bc63c6d7924de89e6c87a6234bfea33551ead6627e69781d0d5caed8b0c067a29a3368d7b468361bc76433aecfd0cb5738c3a87a34241d1a3880d16c70e03362d06f4a2f3e364145cb041cb5ba207dc25c69524b996eb058d127185b0959abdbecbb681d503fcf0bd1decc24e8918243e17c0233d4bd872a963a0f69f323b264d930d08637fcfada70ba51be5a9030c63b31295f4097cb121683e20c5a0134bfc130c88f46228d82ed024fdce45b0444d1a2c46ae31a034dc39817eb9e74ebce7c4d7aacf72d514b740f42c09ac84e1f102ae44519871df8dca5a7c94953b4176f9184f6b9dcca583cb39e3efe562df94c1bd84329031349c813f5b13aba2956950cd3945dbfb3de50414594f128a79097a956f865e51acdaa1ea50cb638d2f8ca4d85837e0e776a551494341457291d751daab09441610c39704ea20ced35e3a1a06fbc2d75a390635fc2980bda955a4d7d21d04aade35f5fe814b20e70184c9ebd6ab8670ceee22532519dd8b7df0550dc42e4a734477447511cd9946ba2fc4957a08bae75da2acd5c9c264a87ac43db20091ddc26b5e36c634f3a2100d1c1abc034e19167a65956c8719be44381818836f1b6eefb4952bc10cf188c823ec94c7340d12021cfacfee9ee89bf489384f648a85ac1712d8b864aa359a236891aaa0477d00ac80d2e06c306701b785ad00c40d50e8605694eb23882f32dfe3498603ba60a73101386c113268174075338255fcd769c28f3887a397b6c38b6007b1a02b6ddf104e4994382bd4240ccc44c212b9ee914692a77efcce01726b6f3d8a23acc0f90a286a39ecdb07ba260fbf5365871330fcef5d9cce01386beb978bc8b84d00a0ad0f57bd2868a24064f94605634ee137993c7410aa24224641c9650038e4742f4d5c2351a8309175528e6fa06158b84c977ed0a1f616428efad7b6be3aa080b17c3583f6eec3ac23843120481650488fc24bedd225cb2942e830493014d64e33e3c1cf5814c40e2da1ee1ca7ee0777cd9cd6475615c4225d8cee7ab436c62a068b76f097104eae0bbb9d5c35c090f079ae15198f6322693f4119fc217ae1ae9aaf64738d90eba0d37e94f3c38eeaaa7195de38ae0ae9b8287aa8e03422b3f8caa8592c97e0baca52ced5a779fe513431ff1ac7f538d18a53f92f5c116b2aa76e543f1a28b29ca3b5e0a881694d2c5f2813e2801c73ea942d528eaf3cc2c9103826af2cf438b9c1b7c71ef4e649e00e3b6ee8b40fdc326b0d4d0ee1087563cf7bc2255758f7a992a72d3ca50ed6bd585b14d7f1b67c10d6d9ce1d34376c99f97ca495074a3b933dbdb3dd482a6f40a13d70cc26052ec8f224e54889636a2a23e43481163028521c50847590287364bb285e94151d1f20d22a44d9ad1f095ebf1f0bb1ec1a8b379e2d3be3975b27342f2bf5f15ab40cdd037a8d79e3ad778bf0297adf460ff560d29fe86e11d2ee16046f0c153f1a690688101e3b175c5e82701a12be8a1c1c1198b5ddb8817041cbd02f1cd73c0ad3983815520b1497bb838c4c5675d69b55de201332aad4abf8a3878e8206163ec043d3089db8edb64d166b6d13195bb5a54af94d4b6ea3cac59d51f00ff640273765f45e03c048fed06555a61ad8a0a90d8018133b32c91447603372d9a104cf65ae48a4601578fbbd7c6b04da72ca924605d9540090b8c83b2b1dd59f33dfef1145f6da186645bfdc1c19d5f9cb444fe6406ea048176a693eaa1260b9df6d2993d255d1c3cc5797bac742196fd62e264f1628e09fd4ae1850631a1ae8de9bc07537bc1fbb10b36f01b19dcc2079f900a20273e3a203a6f284fcd3e8dc2c3a0d969f0eb799702cf243dbcb1debc9ee4bf4b051f7178ed7ba4f72a78e888ca731760d9fec509aee3533878a0b67fff0fc89aa334fe70b391ce4d3964b0be07ef4ab46e94577a51603b876decd7a08c23ae25acfdf41c5669b1a6e0b2843e1522ee628b24c4edd42fa4feef22bfa180436df04052434088a6a2e5c80530304639f1836800d73da0b40891ff6ec75aca8aafa557f416cbdadb9cd988e359a85287960c3805105361dbab59154cbe150254ba845052181a85028c04ed9bdb1846362b9e4f7f68c14c1f8fc5139cd2e46fc919dc4e16428c66ebe02c1d38349dc69d18fad30cbb80c8f4b3b3b589248056bb140d763046adcf583de6838306331291747a8da5a061342281101435ded5317049df4263126e432781120720b418ed030364575f583230d76d8633a2fb98e0bcab868b7ffb98c80636fc262bd711149b2b20eee5f8f547c358b39b84a20a4e76ac49aeb5e0b3e91880efc9b3fc6f240d38185f530864d1a216de4883dea8516b6365ef5e09ead0a12a089b55cee0d01c030304f648f89ed33a738aaf323a9ea12b93399b83a4a632315cd60152d6683dbe13d245876b72ecd10352d12caef312dcb52c093a808ca5fb607b3353e214cb32e60fd20ac277e43a61598981ba2d3418b2fbf97d7ed1eaa53de3a08ac100436dde884811e3d5d04149664cd8b80e0418dcff9a318961066054ecae643feafc355001aebd2e2eb9e96b3337fa9ae38162167831adc3549738d83aec60487cf5e38db0a2e88aae97f3ff9bc2d4f3809a4ccd26b46b28e91a0eb54da11b67bdad8f5c4bebe3e8ad7e6cb96405ee4b0bd2843e35ea8831a7d8c4b20655170342df7d8dfb269826256d1ca0e3193bf9570cc98c06053ba630a98a87835770c834046498bb9cc2f8daf302a17667d9de656cf40eb7207ca30b9e9e39742e8a09a35d1da81127b50e647944332461748911e722b7232a7b6d9286b3aada0d84922124263385a8bd9a01962db3b965073519fbab8b50433c8c2bb7ca50d8f3c0b6912038084197d8759cfdf2e46c2c2d3962715d7dc3b2661798079c86d4d246876dce5248f5da02b58c4006704cf5ee799ac00a29be0c81f1a2fb4cd6902e1c21a15599f7d6e968966ef36a301c963a5aced93b5711e6949cc9bf5c7e74b58dfc9a432edcfad6e89336faaa8ab2458e47c46b947edfc48b3677a7e4652fbe37a8a2d0311c8c1297b7ab7d28c5c59ed1ac5bc93991464e3d903b228c129b73db1e6c78293075240cba4bd8047037260792c089448ca11e4c1eb8a40aa57bce35063bebeb981b3032285d4f84bddbaf4830404de671002af22c97f5323ab9989a7247a1416a24b02cbd5a58b529e0673ea762d072b2e00e1dc80b75bd93196698b2cdb53bbc638b90a20a1f392b18b55744044c41d1290829aa7fcc8280a3158aa7c8338b1026a40bca206ca07ad4588d15e29d6042e0c93d23759d59646d03a391505f2f2cd703f13ec3df3885bfb8b7cdaf6be21cb5bc30e48c0f214c8c06e2250890a30c001543bec215aa4a9f8c03357746e6a94fba9a6a7e6793febbc9d9744637df027a9dc3a0fa95ef1c801718dcba1d2c216419fc5f8bbf1e73d16e50b31079bcd3e5918712668d122859ff79ef6f836220362f3af217ba61de265fed1d3b10ec6f76e08170d49ffd77fdeef2697b93aa419f68b3fbd380ca332390a370c5217f59f880a5db0cf92d3dcd1c03f44759caa366089c33b89533d884452e5cdd090c3745398e61aac86d7138f3536cc03dca10131cecf9ba635078e2aa6fccf22ec16489ef2370073958e80298d3248264fc1c918c4b6aef1ff21b297c18e2d1964dee15cee81c8fe2a3a8f2d4bc147c005f48dd40de02f8dfe0f8b81d5c9d65cf02be04a251aca4c01781bfb071553ba73f1b3359169558bc4a4d0b39e9ed1eaf491a138a55ed91e5bb0c0ff475e5b01502719a0803d0a2124232355533d2c72112af4599b93a85c0af7de4caad214710badae3e5223a9ab4b70f0fb625a0c551a3269d9c95372db76fdb54f5f3b66e5c0e607c457e3ed9da5c15d8c7de7d36919305d1f3f8bbf87a3cf89aaa5c0e6f9d6ea22f0483e82043dc5b7e93f9e907404df1cb3b5d0041cea29fa8005273294fe7ef5093d10e37134e2a4a991de38a9b3e629223e1a6589fa0cb99b2433d9cdee8234aa4fa52d7342ad7d47ced8d6fd2b01606b907a4e9f017c8fb48daeae715673629bfc892e7429d7e4553bd3b0c25554cb72f82538d67aa13b4bc38a62857b2af0c4c6f09e541c08e6c92eea8d5b1a5d0a4751f244c7bb7e89dc3ea4500e2252535d57e1d78d11d486fe3505c31ff865f6c770e016de38d4664c0fed5c9f3e75a69aefe29aeb3fe3ecb012fb4920ca9b2647cd5b064941b0005550ceb69d12cf57300df1232a499beb2b770da64b48d0af5adde11e7614228d90b9b09f36c7a0498cd77bfb61f80d4b2b81bcb22baa39ce2b4d61449a12e0964b944fb0f7eb626fd64457fb71b187e075f6f38c82b3b17e93da751351a8c30c3a9ffc5df860ab8d70887ae918ebc3ac4a4f1dc72345aa5185ac018ff539cf5374d25118a7fb3c546d29606932d9056b129077752b8d11fb13dbb86c2ce4bfaef64a434efd075a5bf16ae53a7ab370b3908bd65ffec30b52cc754a32bd06d3f552f556e0d913fbf9d04c6614ca36b9b31989d3d83d44f6313ef0924c988af20af9200f2c5789cfa1fc101be5b442b64230ba43d800c9a53011c2123d7de8b4caf2a07af0933a3d76a850ee33876b737f528dcf8d65bcb13e00ad7582b5d3201c1bb58e09b9938dd6202b512fc2ca19e7f18a12bdd1dc4b279b55defbe4e566fcd51ac5633c88dc2fa4763a2d646608c40a3200c3aab834464fed171901a7d6e1912bf356d06ddbc910036949cdd2de88b7d0577552709815ee0d6127ca9f7b541702fdfecbde65edb9c54553ae4c9678376c729583b225ef8764f30947c460e5cb1861392f0b0e0dae88de5a12c3c6e889272f82622fe1715f660f97a1c30a59bee4f2a5c48515fbd047412eac8e75e68855cb66f8774a82ce6e737b47025413d4e1bf6210c2066023138a6cbde4e05f261506876fc721724abec12b6ede71bc1fc87e9010f28f0f00e19ecc39cdd208210d3627c3ce90382d172faf1fd95ff6af1969211440a758a25ae354e7de1489ff97cc4abf2a632337c59afb932f07739bbc9343ba28937f02ae7d7691771bf12ef0764daee71f8474ea5cdbcce26403f3b80e7c68507de2691ea1e70e90db9be70b404ac9e804cb86d2241b991dd05c94973596f2ab2b6c40fc18ab05a8ab28282097745c269f55f8fb0ea58078b4e99bef80fe586acf80298fe17a133673d6094ba0cfe6a1872b6d3b7a652ee6876a4aead0da3804461095f8ea30a241a0d98329f0e3556ab24915e91547e4e6601e061add5bd18e33abde97edbe808800a88dd06727d847915e41745f64c3f7dea337ad759bd6fb7e84807855e3fc967cdd34742f2f7437afb04bf3bd460028133b7f06a33a09425e960ad56643d1dd8269be2fc9696b1c4d58d8e44d4d2293ab00d8a07458a72b7f9944889c95435291d9067e46675a51e5fcbaa83faadaacfb359b29562fa0d70e3c177efd136f6afcae0a6add7784bd50077295df9711b486335cc8cb4200d97f2804f8c301a598aa4384bb5571118dc6d29b6917c2575a3ab82aae855fbb355b8658c7889ba732f2f71d6c17ef96d9015528991b6c839162013e9efb71f58517e2e3597f478bc3669e54d54354e7535bb5d69b29aa9e2814bf7cb66ac5066b889d37a7d6b275920cfb1499a549d96f35b74b4a2c1630dfb7bf0a6401c368282bc2a94de805b1d6543c69a0b286d035475f66bf3abea250994b50ce3a5ee7c703e664b1aaedf2a5f3bfd618f4a1428621ade24c0263b449321f4d693b1171f6755b4812fb668d0344cb8ead8e4665fc577304640cc70401a989d4a5bcf48d2baf93b60c4770f00ebec65ab5e2b0116b47a660d08a14fe034f32fc83d4878fe8441a0676dc102f7842e84404704f539200c1104dd1c22c151630566874248c20ae531b2e9bf3c6f6a1da5ed7c251b9a6b44bf2b423b11825e129b635b5c9a3558b1d9dfb27a1b6b5f3df803e7e05093be8d813ceadd1e130bf58dcbfb4c771def87bbd1952fad6ba07f86dc0cbba7a9c4417acf9f9d964c99e8d26f71396837a6d6bd1ef581724594407bd065cd665db5386467d7cc251e4658b711b6fea04dd693c432601371e31d20d8b84164834dc6564ca20b92bd836ccaa16b79061b87cbd783f00abd12e2db7b066385f67845b5186cfdf3f31128186fbf1746de4b53a0719525796d2724b27433dcc12eb67b3a38b1e6fef2fd22a3a43b5854114ae0fc284c05a585b4a38965991faafe1a0892b69a6c5003ed4cea5dc4187f7c4f9cdedc227d872ecd8815d639c0e5dd4de44e71187094e82e20e6f8b3303d838adb1b7e24f3ed0d0350b2c492045f571c0f6be4d815e9ed24ad0b09d88a5664a8692c3644a1ad88cbaddbb4e692deee45b821deb34263c7abd6c5b1aa23dde86de192e36e3650a3447148ff47c3364e86852065db2de5ce3879fe6a2f67939f5916c603288b0897152191a240760f0cdf824cab5600f6d6295bb4486b2388959038addfee6fb1876283d80a95d84fefb9f0af37565703ef5a3a60bad7f0fe13d577349a3263d837809443ed0b413bfabaf71c8b970b57f00541b12e1a406511455ad418b4c03324fe2ba49fb6caa720e145aa76225afe7150c921bc72e1e5a86a238952154f1a00308b8e1c0e4bfbde3407f3728ec2dc3b8c8a44d493b0971eb10838f578cbf18ecd7b39b22ad15d62e9c51156237e3bed00bf989fb4e49349f500c02dcee1b5d2c76f3ec93788d8d7fd8947487733a2ddeb88d2732d576e28dd2065c4b564ae797199a2a513cfad581a42d9098b13eefb47905b817c1094e1be736eea0f9496fa944b265a6b148b1ff5fe2865af15a1818af52213f607be52a44f1233b06c82b8240c045a592b1a646b98e1687ee54803f74d228a3ece71d9e47800234591053a13807ab7f8b00918832412a9493ddec6f427f9c132e421861069483667a9c613b4bfa71d1940fdba07f410aebc2838533a29e06c387124de3c3623fb8fa050eadd8afdeb46da2f67e0060f8adf1f64c4aae1cf192a384ad4989171aa75b3cfea032d66e5505f66683a30df4a495dc25f9ac6cc629d4c376df8543125dca6903c788a3ee3e483f641a5c6ff4102617cbe7d8301db709c9c4e0f3312c0cb8e8ab549ae10c084168957e5f8f479d4432fb8f33a5e39f47947761640900e934769cc4e55ae9c1720ef840c31cf59b45c3639f6302333994b6a904af8a36f5c3db398a8f3b988f69d2cf69abfccbeac135c511df4320c40b4bad5059830336380c28c1249a8e62fccd35fbd069e6fdb44a6840f57a01355ee49274e4a4caab04595a68981d8fac514dfcd300cb82c241ac4aeb0b1f40bab71eb853b102ee93079f494921d6358176237d6b25d6e50b63d17ee2137a9c35817ae0b6ea1be1a19aa9d4d106019d38603369011da8e63f59d3f41ab3a5cbbf0a0ed1c52f716096fcebbfe254eebe8a45a62682652dcd09abee87c1d7e557ee904b3d1cf734269459ba7e95cf3c4c138d20152f499e542f33bd1fd3ea7566d0740ad27e950c5869dfcb1022117a3691ed8c703a55d901b7666b0437a3904e48dbad0ca4f8c9b20314bd7018d2629f7278b594cc3a249d9b845027c1d232afd569195e10284b445d23f06d5e2b4a883500d0fa834cbc7a9e083bc2851b2a2e7e4be824a84304c3de447088f902ccf61588bc32a7b58009189610eb19ac02960b3815444ae50e76f79b1446ec9ead218899e0415494c1b18488a3acdba9308f07b73d0d20329166937c9f43a0e59a47cd65959f7dd52a0d70623df702e304d451363c623b3cb9ef2e0429b289367518680618232feabc4a0c2cca993a54ec05b8e09340006dc7665cb411dfac62def74eb6ec1406f94f85452c8d9705447d08d7f42441f2463083c199e4ae1dacb6c1fa7f66e19685ab927118d9652588d83539c7413832f8c2dcd5a2d6ccb1d043cd2c0e9888fd115f715b8a2c3b9a2dddfaff2e811166ed2d968038f545a49420adc9b308948a1c8b5ee85361689b585fadbd02554fae05be2d53318ca2e9f6b51603b7f1e5d82763c1c8d52fdd6d5610d114f332dec724ad2ba6b4cbad7486a82f72c414252a06f8994d688f9a4df1e039b08ee21f76b7d9b9199c4781e99f54992c9e8a22cb95fe37a3c29c28424c0a318277a7099238700f96bb4c6739ee58345141872def842cf109cdb1475e280aebe386d4b851fa6144b943adefb97f8fd0ae6825a7ef6994c267a6299e65c2c5cb7b5c591843932874d41be0c7a5bda2a7f056f5f34981d6ba135d50f6b3f0d50066a8b5db1c6ac7b6cbc457daba71239b36b37caf54a9252e9758479b7d3b768884c8ee3e36fa51e1ca207bf3d3c049a4de6fe6f03c66c63b313d5cd6354a56a5948be80b87e4dc74a75f3c301930dfc157e67bf4e9486de779ac2455477652210604e5552af7c3978a5956a4cf3e83db63182e7d9da083ccf6b881f2b19f1864888dd67f530232140a3ff48e1b7474d1399a02c2d34790f736ec51c076034823d775e230bcf619a83d6eaa2886c41d0d7bbc3b4799db74ebdf616295e51bf6478e3ba7b741423503cd0aa1bc46b2f6d5e34b4a99078fc51c5681a61dc4bfb6852d0fc932a017f323c60dc97512b8c5c242a0f0fec0555de4e1b927d4896097e69801784f94380e6686f0091ec0b7fbd3282c4f662ba6b686b42d7966a8be56dddba37a02c0581d8c726602a49aa91bd7e6f32f033a38f57237beef330beb4baa7ab973dfd006279966c52ab4038f4b2363376302460e39fd432ff5c07fa5924b2e6f5c9bbc9b0a5418de3faee066c3fd0a0a5cfa306aec6ce6315a0f5e3d6453f3e06239a3401aa8788ce5c0c5181aa84e386c131e28f23db4b93e4c2f41b5e2f3a7ac29338c84006cf798c2afedc8f7322f6b47d5d4c2d92aa7abc8851d7b5018be7f028a2a48c975605d858974096ffcb55924adb751efc50bb402e00bcf653a20aeb44dfaebd0fd869680fda86835715503ff4cecd228517e6c03b6d36fe20d5e24173d768811a2bab783af9b859919df0509217e8adee57674c0e4dc7ec3b571381862d2df9101550756eb8a64250b2b4baaa2e8a97eaaabeac2f8bcbe265f1f277d8d723ff2e922309e0a35c4468334c1194ac5879d00405a7c43f68354b8d8551d7fb4fa51d1cabd70d0360b15fe8f4c41289b8a311aa7fe25568007d138862b7b5c888f8d40e525d0e155237ed1f06a685ca58a35c6900809f8bf83007f8fc933abafe271b3c48710dd252b5f33289181542e7d3aa981a3115b288d61696be7156557d1ba36b669c0634410459a8402c02f280ce7d926ae44c91dd3e7881b65ae00b74a78200e3f41824cda5f5402c1bec20a58c1766ccdedf76aa3737fd023572901c2b363ad1401a55a497f06640424cdf98f2bf4ab06a0dd4cd0094f07f98d6105abc1ee4ed3bc31710fb90de026ed747377ad56013ba76ea3d60031f81ef787da1dd4cf3aec0bef6879491effde84a97fb6f548eddab19a0674849ef0a5e3a06aa2b46fb0f8a879eb86abfc860b44d21a9498e6551ebb98e968ca17f9e4f1c03f768fa1fa15d4b42a58269c55a12c00a404c6c96446dc7d19c6e49484f49caf1760cdadfcc9e8f50b601a376150490f993a25c40130ffe4385febc07ff7ab1abbf181728b733547b12eab806f23e821dfc55c4614489812a5f31ab1d31d16a0e23e3dd5f251903d2e1c691299ef182b1b2e98a0199b14ae3659d1c725003943707b5b78a133918b2177d9258c71f13bf9c959d04b1d056580c688157ce8c9c49516d532c4554c55b676bc74258b42d96058ae0a1f325e75248db110be248459834af7b91692ed5d0246f5726dc695fd8629f5c72a058f850b2b8432731b5ed5ea4a056f2b6e573476e118b1d72cd815481df0620f3561bfbb836cf8f4aa60873c140f3d815d46850274c8cbec3ce9edee20133326c861b5d7dccfeb906132be98599a4cbb43fcd475172cc33096f629908945626142bc3266ea9bb4b94d89ebc4cc469d76b1cdc3d09a9525006b4d2ae2d4c36e49f9f971a356c407c5add61f56e910eb2855b825609db18fc6914e69c1ba84b039cdd3ae08757387a5744cdb0f6061a0e2c64acdf14cb56694b139b7962d8d7772944c9475f11cbc9fa0230593655e5354f7d3d8087669bab8c2ac0562d13c36e6919dd998f99352b5c09605e2baa66a460daa87e02e0da999b97951bf634cd32e8a2af7a259b64513473291d5d1a381949ff62cdc427fc2266bd589a84cd969ec3c85a9c2e7c2e245a2622f1d73a957868c757cda91607af1435d3de4945eb65e3307d632cac55574af02e9e473a42e55d43edc64de2500d546828039800fdc4b0ecb18f1ab44f1312841c52092d29352fa4f8b22147a949d3e46b0f9d895b65c0e070c7883022c0d049fc08743fe49a8fa088c0a91fe21fa146eda983ca2d268c4586c02842b09b98edca879fe69c739e01a6ecd78b70f339f7d096bde9d3f136fb50e835c015d40eb60a823e6af522b8a67d0e6909b0e17aeb46a9c83c581c26c06ed3a7b1260eb96a2b56c7899817a02329a8714cf7ad6c97bdad37705f04495f76bbff9587395c72f4a7198e351e8a349cb31dbb7939ce5558c9b6e035157b65e243eb0c53711817a5840bae31c470caa98871be255d6b28696b2705eb3e4ec151afb2e780566fdb9143de7537e94ab6ee25fc2f5a8e6323e01452345546a2a3a189d01fd16b2823944226a5263266b65cd412dd1415faf4aeca0025fa69f6d7335486520e21ae90a5cc75f89bc4bd6cffd0dc6234d420682c558c10133ecb0ddc4f348eef53a9c24cc6ee528d1ec20eea4835a8e40edd9760eb08923cd9b6f8518f8a010119881650480378e4e2ce9ccb35eadd53da0328dd7d1d0ff04fe47809c278323e0abe531e3f15d2e22b7a008aa42f204fd1fa783bdc47b1b37bf8676619651e6991bf04c8b2ad3d6ab01d154b2d9bec139dc5d768155eeb0deb77d7157f43e9f3857718ab95ad0f5bfbbc86d1cfe4f20f4fe342d1259e3f737b4a6e310af374744d409849ee43547102f5882adef4e3fda87ed1eff75b1da123df112584823ce05092b981df3e66399a8463a267b810622613b77edd2438bac1f9a149381339430a614cfc0c174598c83324517192c3e19ab68484225bcca364721bfffd40174298c8331211169672888ba1b8e8e14d05795368e65ca2e042d1de904a18b1fca95ded02f1f5fe292aa3a570791e2c32934d43b58218d937a7faea776168e7281420b1f8284851bdace87a4515755159038442c605d9346256f272c7edf27686b0f6d480e2f838d9ba653acd58c00f22f6ca79442297b3fb5683c62131ddef299c742e1c7f67a18afe6638ccfc12ae9b422925e8c595c46213cdd5d374008482a773febeaf1f7b0b62129feb95f15051237d25c18a7826090c746cd35ba1973c046ac54f1ddc08081a0485026e0644840a3640b0a6d0013c0c3c0c3c0c3c0c3c8cdfda7db3336f61a724a58c0b24d76070534a29c994220d7d0aa86f02e01bc412a2f60eb00f07028c0a7d0a690a337871ec324d393b745fde4a9d19bb281bb53374a19b4a62a9da8a5d497cb9f047bebd7b63597bad4498810b63c36830e31627bdb4e9a654a66bbea88ac20c5be0e127a94bf1447d6fa5c230a316c7b0f8cd13517aea9b418b836fd6c78993afd7d5591c648e29392a4a477494c5514f4b8e0a577bfa2c23a58498118b630e534955bca4c92f0e8b531274e479a88db8a84d8d54b1571c7cc46ec5244dc60b6a2966b8e258a64fd4a275a6152731fdeb499d22c7c5c28919ac3865daaa3cda36258919ab385c86134ea326e5d081030738c2c0d1430c10981a11c50c559c24cdd513dbc4fe0a6aadc38c549c6a6f4d5ef8bd10a7e56183f6408d2fccea06bfe36ff0e80c18009830031587b5f015df24fa8937e31487abb2de0d7ef289c7e63e31c31497f8212747e62cc5f153ddcaea4e4871907b27d40431fdcbfe8b1a250435bea8514050e38b1ae50335bea8513c50e38b1aa50335bea851385023041da8b18719a348ac1825c98e116f6889e2d8227f26251d2636eb8919a138c6b99c9ca64dba384d192b6680e29457f595fda494ed960dddd1438cc331e3132761b3d6ce7fc826317f43cb13270db641ab378e8a199d38bc6c12159f870e318e14333871ac13ffa469ebec67ab7956a398b18983c993f58bb144138793bda455749bc9e8337192259b9dfa212fa91f13e7d125846851314efee812e74a72854d19644b1cfd7533ae649a94c6adc449ce5f10165c84f8302971ce2466a2a89fcdfa388993741e264bacb5542727896312c7a225e92fc83d5924b624b96716293e1ab761c3868dad58cc80c4491825cc485b8fd194626eb0a3478ee3397070a0c61735bea85189198f38b78f49d134252bc7880c74e8c8c00d7ae0483ac0f813d8b021031d3a6e4c6286234e42a306cda5f3c4144230c0e82f2e70a3070e14086246234eca7c5330952d3197ce88b3d9b5885ff64a736a15662ce2249ba03f5c572ceee8a830431127217a4f9f70a329fb7663989188b326e99e2909d24a8929441c4fcc4d428931fd06257588830adea52c9399961719e2f4d65d2294de96a8b51087b538da92242b2961b92fcc20c449a5a4f2bb24f15b575fc18c419c44f1935a9286fb8b12411c94e0efe15e7ff36edfd0e21c330271b88dada5f259803846bdb74ef98e912a1833fe70f6cc2e2f49ee1bdac66a94000308031c3c7830c30f274b3ab48da5888ed94687197d38580e19b59290afd1d286197c389acc0a6a2f5e1ef5d31e0ef7a3a4540d62a562736298a187c3e9b26b53928a9e782283a4230fa714f745833e29ed698f78386b8fb4a0b1b95394923b1cafe4ced42f889bd04c61861dce3322e4d524f1b63dadc3d177d48495184d63d8e870d2de1bd2ae848d0f2130cc98c3e1bfe4752df3ecde5e0e2715d5923c5e6ebf3ac761061c0efe19cdeb845059546bba30e30da7a427e5c5f6bf1d3d71c3419a526d6ec2c915f76fc3d965edcca43bcf0a3f1b8e327a6336d92465aa4b6b3876094acce2755a44490d27abfe4c39e34d503b0de73453a5479abd6714a1e17c1963456ab0909642673828296354dc950561a1196638af8bce53b1da321c478805af177923d36438c86776c969e518cea2b68433c954c9b739319ce2ae5f54e553327718cac6086680e11463ef58b65e59f3fc0be7b8dc539f962769d3dc90c20c2f9ca4ef982c59c92e9cea425f2e794a69cd93524eba929566f6162a9972e1c4a0195a38b98df65d2ef992b0d12c1c2b85b69f8a120ba7131572d4f2573849928dc65c92a8262f6885b368ab7c4938495cb35538084d25851d7fb1923b2a1c3f74478f5f05f592291c3677689acbba98a4a570922bff97f4c449cab2281c434cea4a61bb2efa058593dc972c8bff8493c839499e0ecb186238e11893aecb497339f4f5269cef4e8d2e71841e75424c38e788cc0b66f1124e52d2f790717da356f884194a38bc86eff9122c696a9f84b3bea92fa565f52936128e5561646693f0a362fa080737653a93d0fe32e235c2f1f404b166e116e164c2a4504d992134a744386ace34e6a5cc219cad6c35bc4d0adb240ae12054dcc8c9de8270f60f19ad0d15108ec92a59e99ccac80d76f428a57885193f30e991a5a33126cdf0c1b14cc61833e928d554f7c24d256d54ef7871aef8aa5db258264910efc29246ed44c68d21cbd0c5f1b663c645489b3fa9aa0703311d64e4e29cb2ea62525f4c53215c9c6467ba247d94244fc4b738de96bf5e92c44c62165b1c4b757b6d0c268e6ab4c71861d4e2a0a47d31a52f6615132d4e6fdac4fca39f057f99d74b94cc657112aa2ef4fe4efe933b16875953e6724a0a9af126830c589c82185dff57f2ac2c8401e3408d2f6a14bf2241bd955435bb62b5b1ae93b2aec5e55674a2376f56cfd89865858c55b4a5f2081552c597e48efb6ecc522acad5b396f534d6a91315e5864c7677a659f23bc56d16e761965252b3a45763091953bb2f4687516a878e1ecda638ecaa8e69d11b31da03d90119a538dc7899cc1c2a4eed27c54972514a5a3c154cdaf0288e362a4c12830c27b251519c4baa5c33b52dd12e59ca3220231407154f1a25fca5ea9726c3b8830c501ce3752939645299928f3e71f617e9f755d28adc4f032410630c7f0b8c883186bf7be2dce72577a75f25954c278e173f83a9fa5323deae35c8e0c4d174c52ca6f324994a498dd43242c6268e1dda4a35595213ef32840c4d9ce6ee4ba512f27e23341e94909189e36b494dae3bc2408d2f6a5ce08b1a16d825c8c0c431bd09dae764ad0f99bfc4315c32294ca5da3d31c812077d71d4e5cae2579337b446cab620a31207b10fd15362ff289d12c794d42d484beba2a71c38308c94021ba50a322671b4937b295da8d878413a78e4d091aad2581227f9478b95c99d381547828c481c53ac262586b798504986c4294fc524f6e11a43c9c978c42954faff9337652aef1c713e490c4228b17082e6b911279f33fd69726bbaae321871daceb313f404652ce29c6b929857b9954086220eea4eea55b97c22e43db243c7480d7ac7066424e230eab5c4f62e498a6bde483d3ea9c24a0bc840c4f944a9de4bd1f61fe90754308243c6210e9be584b02f31376418e254e2a7b14b080b71b8375debaf9634bcaa51020c3c8e1d25e80072e41f50c14818320871cc7c27898f6baa14af246310071d224d0451a8b720a27d07e274b25e096182eca88a6500e23497c26eb0bc51947e7f388accf6a331dae80f4776e8306576831d3d723c8ad1611c92e187c35fea5f74fd4c5023041d00818c3e9c75f5fde44511a5847c3855beb9fc10a5e2c9247b38e9ddf24d92c55630911e4e73624a3635262529657938ab5c12d3eca858d2c80d76f4a8da1ddf0387511978381b349071875350eafc66e3c515990c3b5c26bfb9e6ec4cb1522303197538efd7dee9fe0223b01d3dc488800c3a9cd4d37c7453dac93e99c3492c257fc9522a2bbd2887f3f9861c51f1848b320ea7131bd126a83be51b0387c35b55c8d5919941bf379c6e64ecb7c684969492e18693f9c5f357b1fc8e4f461b4ee156394f2edd7ba64a990c369c642fbd9962aeffe5345e848c351ce369d334237329215bfd830c359c35682649c99a3767e47e90918683ae1dada1de5ec3c9340e32d070dc6032be726a8c5a3c0f32ce70ee312f69c4c2899dbfcc70de8c974ca68c134479898c329c36967093bbd5f027db021964407eb672aa9fd2de0dad1af40e1c838c311cf42d2e65ccb1f94204196238cac8206ddbd63b844a1030c8a1038c1501c8234e29b35492c3f672ffed8863092642c735b3c5e766260069c4c9b224416b0c66e9a4fe86960d9e1127a941682e2bab3f534d26c603208b38968967aa204db65a4a1838d2fb75004411874b32ebe4c67f0ddf715495bddb064012c166c9a7665e54449cbf9212b24ad399dc1fe224979477923842431c7b4305a410c760629a503122fe2b8438dde894511b2ce64d29c8204e6a57635fc9beb2100e208238957c134694c9a2c46e90e0e8118893b2ff9bcf9418400071160ff5d3deaff00addd0325506903f9cd72c49c29bade5bf7ae4c7c8f134f81d676e00f1c32963d3ce99d80a72a4ab010ad8b09106903e9c64642e31d68f569317103e9cdc468e1c55b26103903d1c4728592ec693b92d323b8e0d1bbde341f470d424690a4dd2c77c9ee4e118c7c498f90ca65b4df07092eef37f7925b326bfc351e4bf6efccc55aa04d981eb2cf55531677e8f20753825c92bbe979faad8371d4eaa7289a9e64acff973389eec1694496eeaf2c672387958dc3f7963e59b7138a7c54d7152acfca60c1cce32a2e4bb4f4576f786d397bc154ff7c40d67ad3f9db7d27b9e95112c31da03866d385eacbed3985f4c8aff0d358d01081b40d670c9a24c88596876f4102381a8a16c80a4218b255e92433708040d67abd524c9234c639f0b728663caa49a6ed53405b90131c339b53a53292549279f9200dc01a40c27cb24f76a522a5d306be700428663c919da94951cea5d1104c8188eb795a4f0a782a5ec742439705040479243033cc600228693b494bf24fb8a1377bfa155b6aaaaaaaa14ef06c00b206138789ddf6b7ac8cc6a7a000183fefd9917e369504246807ce1281ab3924a5a8406102f1c5fc5447bc6248400e9c2f1e54e0c3acbcb928a7707102e1c7efb2b6938417600d9c2a904af78fffe6be17c5b39945b9266e1582ab79aa0326631a99b030816ce71822e75a5b26c46f70a075dfd1afc47338fad2056386d10c24dd0563f95bd00a40ac79237777aff880ac7f98d299d8edbb9ba5626b061a35350e38b1a1ea8f10509c2a0c0ff05fc7b3c0c767409ca2b40a6701247e3f6b54f10299cfdf5c20942a82455b825001285e39b20bd3629d91bbe43e1246ee74a7e9d4f3886f08c2733c79c46910d1b470310271c2cbdea67850c48131217a14c4f43cc84c3064b212763b13326b900b284f39a8b543131497b2829e1142262ead56254f0320987cd65826a934f586606094791bfadd5acbc6faa231c6fa4af56aa8be91dc40827e94bc6b78ccd9b4b1048114ef65b96c363479cda5900428463489197e516a74a5d0419c249b4a91acd77517354847090a754ca259a060d25980590209c52ee4a9b3862010408c7a04fa8a06ee152387f70ea5699b1fc54cf00e28363baec23ba99ebc5496dcc1d234f69860f5e9ce46c536dda16c449f32ece55daf3d49b7998467571526ac252e5ce317ce4e2a449724d6a72c84da21dc347609003c7488faca10f5c9c479e90314d091f7afdc8c72d4e7beddfb515ff62a54ff0618b53580c6719348c858f5a9cbcadf29f9494da1e0cd40f06da6156f8a0c5a96b46654d49623af9fd98c5abc9425d0a1bfa90c5e14e76558ada3a23937cc4e298b2842fa9f9f2018b9308117d42b66c5736117cbce23cfb26d5a66c8b4feb6170ae3805152b6594d6c75a4e87978e8f569c4e96ca9567c1a47ac7080f1cb743478fae5e7cb0e21c27c931e24464aa14fd58c5299c2c6944935ad9ff6e68650140091faa38c658feade5aeee4a53d1d76a4cbb14542457509a62b95ba8a4bb357c9ce218543a493ac15bdb7cbfa10506c291c6f0dfa1d523bd18366c1800a6f0610ad4860f2d225f93c66f68bd67291d7c94e274d2b6e8aad945932629ce3a3acfb4e57dbe4c46711a53278fe8edab53924471b2ec29278bc88cf3257f84e258e9aacf4ccab2e903c559ff325886c9559db27ee21472b46bd80c5d7246eb89a47431b641e6d989d398796e5b5550429374e18313a714cd3b2ce6767418bf232df0b189d3c96cf247b887583169e2943297ec1bd799523449c147264e319468e23a4d4b081d31719619db34aec1e0e31247ff9244566a35493636f8b0c4612b8dbe60abf172331a7c54e26069c229616ad45b0cbaa1853b7a88c1820f4a9cc43739466a89f113277110e59f6327e65ec9f586d6488e4e06c687248e61696eb197bda155ca22712e29e59b3a25739fc50c12a70b4d17995a840ac2e411a774bb305927858a371d71904dd2a40f7941c88d8d385bac935df94860c3c6153e1871348f2d3fb59f5531be888386db1cb625459c245de65d627e5378fb2311a712b7fd4fd26e82b6e37be030441c346b3053df980d39f5e31007cd222d6593a43c592fb5f06188e396a447f9af9d1426f2c8d1c00a710ab25e4c979cd6dc9d153e0871fa134fc4a6b81c9fff865a8dc131f818c427658b123f7fee5d8ea7c197a1208caeb239e492ec86966371204e9543095d6a84ca69232e7c00e214327c54cd6dbab82937b4b6460930c0750580207cfce11c7a36e5111fab1f4e7267d643eb76559ae0e0a123047d385a986db1cfe0afae690006ff813070d8b0917c38262d3ef2c494bd645a55f8d88359715aa3fddac89811e1430feb855341cf89a7450b831c0fc608103ef2706a35df9365474dd2e8173ef0f07187a3de568e124bbb850f3b9c3186be6f6e6815ebc1471d0eb24cb35596d268524b477cd0a1760b9b2cc97aa62873e5e9794a94b68dddd0c2399cbbed2ef9f797b4e356143ee4708cc9d6929419162de75771389f86cdfaccd4196484c331bf3ed39d9cd81e3ede700ae39a73a4494185d870f870c3c95cbba48b61764bba7d6bc7f3b8f2d186a36be5774b6972a7ab1f6c3856ff883ef152129a746b3889d7e8b6d9d411fdb1f0a18683a53dc9c4f44ab9b7caa1638b0a1f6938577b09eda2ca64c6e486d67a2035d934c1071a8e2237c89d70d2566df086560f1d39aace7012b4bd9f4ce97cc64da4f06186533c5735e9475ddd5486d3694de29692d21b5a3a7a8cb00d1b3d9e47123ec8704ae945487df92d25e5091f6338096d92850ba14b6e4d37b48c133ec4705029544e87ca13b7a21b5a637c84e12872aca4d4bc74a2911c3860f0c8aa460930408230fa77f4e0a11f50c1c80c3ec0709a2bd93b2993377464470f318a8e1d891f5f38c53c2283f895bbd178e198e404599236bd0ba7ee7c8d1e76275b32170edb22c4f454bdc56c0b0799d6f6a384bf351db570d8986d17cd9b6ba99485f3e88931c3c66a13cbb170921554d796e80a274b41451b35a9fae6b7c2b974d6a41221aac2a92e2661e4ccf2fe5b2a9ce289aef1849437b9a1291c2c435749df5aa31b4be158bf5999a537e36c8ec2614b93c99a2842e120d378b8858fedb8f609a758257377a62d7da539e194626389e725feec8a4d3825aba82a664ab2129330e1e01b9465b9e4739a2fe1d49b2ea82489c5add329e17c624efc8ab225e19c1bff9bf5433d443582f68184939451b485d5f89252e58656a91e3b74f0301f472896a6b9b98bbaf96184d3ffc927d98baa1dbb7c14e17ca16f845a0619ada40f221c4d9824b3e909bae46d37b48c8d0aecf81c397860fde16308e7f4ab78ebd325e7e5fc218483aabad40e91bb41534cf808c2414e1415374adbe30308e7527399947af1cffb3f7e70f20b3eeefdf20d2dc1870f0eda7456e53efb5049121d3d0c0a66f4e2646e15bf64836a2a49b86490ba070976b0206768386c4c21ef4259909995339cd26591bb5b51b37f6386539e9c34f7be6921ee321c4b183331c97da5ba26198e6262e6bae9ae52223386e3ac8fc5609a99c3466238d928a57d72787eac1a868352e5a2243529c3c915184ef2e5132a85c88e2ecb174e25ed97d4b118e126ed8573662979fc2fc593044b17cef221c5fd4ae6071a5c38ef4965e7d5a5276703038d2db439f4c2cc67081a5ac04d16ddf125d22d99642119737a2c9c2fc9cfb6bf532a5e6e34aec0d9c7c8da961bb041d0b0c2d95fdea45c927d3cfc2a9c725b33fb097ac232890a0755ff5aaa42e615b3a75029491855fa2eaf5674a02185844a92b031d86d7ae80a34a270decc4ae946bb73445038bc4925ae65c995a3344f382841951021a48913bc73023a2b2ec2c4a0b47edf84736856dc30e1942ee6c4f56dab242dc1503227a9a032a98ad90a020d257897ae52ada93260c3068f1a25e880128146123ae9446cda14e6f2cf51031d233a7a60312ba08184633071d790a3d4e56b47d0cd33538a95b55587b67c9fbf5fd0a644c308e73329a9ab7cd291d8b021468761c3068d221cdc54a62474f6af89748f408308478d96cfe49235c784874663080719744665d164f2b6bfa1f53876f428fc01158c3c8086108e15a2b49a78c28d50eeef3085ba0435e81194d5a07774804610ce27c97a232edea9b7f9068fcec09a181dc6f1075430b2011a4038089519e922971cd0f8c1298cca7fca4ba9e45742c307e70d6bd9a4f2da8bc3bb29e9824af367968417a71334cbc49fcd8a3eeee234d6a39b62e5ff66a78b83523266b8944ebcca968b533049284dd16c3bb51b0317c7cbd8ec693567d2f8b738af655a563c49378a6c71b2d298c7ccdebcca548b936459474f90766133b43886d7b7db6cfa332e8c578490599c525b739a7852cef14cd20f06ef204416c7544de13795494ae5492c4ea95ea9a4e61223ec87c549f5ef4cdd922443c65f7176175fcba449dee4ed8ae3eb68139625060c8470e418612384b4e29854b4840da2af73b50942082b0eaf49e88f2ae5b1a25a459b243166ac70eb222884a8e2e41a9725ef524bd306430c1c3b7a70482a8e7723c3010e1e23ef3a725471082a4e1bfee2dbd252da139c42c8290e36ea542d6c12dc342315628a93bea434ebca529ccbcb7def2f9992f47f1294a0424871b2b5a4a48dfb75624da338a98de15ae4c163a4d2bb8e2f16799080f377e848130811c5c9f2f20976ff15e388437136a12a6ad63c694108280ef327a4f88bba93abffc43179897affb86d65d91367ad1a2b298c508275a61387173156317fe68c9e72e22cc24cebff8ee912ed268e4175a81cea379a38dde892535b6748264e2985dbf8a1ccff9ac1938037041307214577c66057f911d4904b9c764bfccfc6dca664d4648825ce35d25564da98fcdc5489d3a6d86229f49aa8281981410e4a7829671eb139f2431d3d788c91f2032a18a141c8240e7a4baf92f82709a6b97b370c918426eff999146e466c66f016487f82b21f6306ef23e969c091385aa8d0b6949b84570e89c399fc0d57829b14667ec449c6959892a034cf4fe98845df49d965b217d28810469ce4d2cd25dd55d28d792641c8224a726135863c44119d4ecd521bdad1438c90441c949462820aaa4cddf82188389bc91773c747068d7e12420e1162889042b87b25e9ca53d29bf08e1e3caa4ad00133421cbefc24154afc4b62fa73e00819c4c9244bb27c96a0d14088200e9b654d1edb78be9a0fc471bb44932a4b338bed80f8456910fa15f33f9cc24fe5ca26f8998bfc70b2ca6472e9add45ea13e9c564733d9e955264df3e12496f4b2a0b48959b987934a19748e36a1ca2dac8753922d49757d9a297d9b87e345df92d1d56493f7c4c34157ccb663a123a2bd3b9c35649e6cacb427e6ed70d0dcb69791ad4c9dd5e1b4a7f527abf4fcbe0aa1c3c9cb4f2631c9094bf31cce1b2a9c3261d1379c2f87a3989c31659b5a5d4b8ac3b9f2c995491254539d1a0e279793f7a48d2ae40d277982ca27a9d8ed2342dc708c7d49b4cdd2a8a2410b8890369ce4cf2b490cab761b970de7f29342fb26b9829b898690359c5412e2969e292776688710351c56e42bf56efc122287a4e1d85d1ea617c3b68f0e0d4753eb1b83ccab1a42ce70fe1dcb6ef3d2a3a41f6286631222d3cb6225297fb320a40cc7983f83aa57dd649294418490e15ca2c7e76ecc2c962f1e63b418233c70b00d1b3cb66811328693bc249c8609428ba9f80dadca218488e1245cda75934b122dec39747c910304366c147d4548184ea2f658c54aaf7b278b51cc2542c07012b7316532166f546688902f1c764b6b32cd93843b651b42bc70b48e1519af41e34ace86902e9cf2f7dd622ef9acb248f310c285e30625fd094a2dc8d6ac18233dda3a640bc753b227eaad29194d7e43eb063b7aac164edd323a2c49e2a84b929682902c386eb1d4c789b3183864c0030b270d5a232ca93b7024a5d44e10728593bd6e92724d18b768925638c80a3732e8133d3b2d6b08a9c23167a80baac582b737526208a1c2e12e962e4992c4586e910d1b610899c2b9b4dc6eb6b17bd94b8d2f6a3c0e7090a043102285935c31e88b1d2f9b257ee68290289ccee5e7365aec0f215038591a4df209762568ff9f701c59429a20c2ce4adc9d70300d397b4a101fa1eb269ca44bc2af4c4cd06152261c45ce69586ea5c8d12ce11c5a3686fcadd90c4f0987b33c55529b9838a3249c84d78abe1fc264a50d0907b5d9c2e42455c8118ea5b2ce667a9c542789118ea776632e9bab555884830c5abac4248ea85e9e0827e1e2a4d126db43385c8eb66d8ba3104e41a8cd91919d62af914048108e22479fb81df9ee5302c2a94ecc3421734729550af9c1e92499215f4d698f3bc407673fb1adcbdceec5413cae4b6c4bf3e2a4c4dbaa54e245a57771aece1243e82e4db9b4ba38963c524ef2ced6926b2e8a754d55ee62e6ed2563c93a4950b29402105c9c53f4f34b8c9ae8086f71d21afa55d34683656a8ba377496a29d52f2659d5e2b0419e57d84a52865f6871cae0714295bcca1927b33888c9a762c9a3e5ef347b03882c4e2908e9a9757a7b4f90294380c4e220c4cd9fc8a5567cb3e400028ba3fc285d59329f58a2a302c82b8ebe5682d2a7e48d4970618083c7d548e501c415a7309f25898c267c3eb46103a4158791596d746c9fc58a9336f7dfa831940c4a7015273b95f7849232646eb80d20aa38fd594ada4ebe1372a5ad012415e7abbca236263c80a0e274a7eb33b25d379b6ed501e414768dc53cbde10dad3210539ce28d6e4b3f99f54b578ae3d7c8d37f4a4a91a9bda1656506428a932edf7426b6d696dc3c8a9334267b89b271be2e298a63bc8db02405af189450280e5bf205bbd7fd0ca76a000414d79de91e0a209f38a677884cd2aad674f51c4f821f6306387298e009209e384517ad9fd75d15b4edc4318846ab4dfda21a444e9c2dac6f74e6f61625253d0d9c00b289b3a5f9d9cd2ca6216b12403471b63b7dd3a25429c935238064e29841c5dc7dbac4349c90008289831aa592dc159325a989c7254e79ee3e64922637d473bc1e104b1c54dacb0b52c4c56d7480a1238d54e21c22a4c6e9a554d9dc111be048ac102100428937639413fa1a91c1bf181a0290491ccf35ce72adba138048e22428d972af454dab41881f0089c4e1a451492e5eafc4700289d305f566f25aab24a5146b38bb6d996c928f16a1961a8e61943649bab1e07e97346027fb8e4a412f341ced464eeefd3d19e63ac341ab6b54ed6268cba9194e7649eb6e948a2e692bc359649e9026c7a898d4c97070bd944abefc552a786338c568298bf893a25e45c570d222942e41f60dc3a9c4f6b45783bc9384c170fa9a3b319a744b32a8be7012f4554d381f2d591606e085535feb8cf8f58eabb60b4719b524a6b2e1c2d9468a9518ef7745ae5b38895771ec843b1355a7164e596597b45c9949abb270bad750164c08755a335838e5111ba4defacb7ee60a07699a2b9889a815ebac70b62408a949a58ace91ab700af7d9e466592a1c74a8eae510512ab6368583a991a2f54c0c356129148cc239adfc43cb8d92e184c2717408f33425941e193ee124e4c95d79359d70d4e8e76b1ab2e3366dc241c6bad7e79bb8a8c584835adcf8882c33fd93259ce6338bc889b68d5a51c271662f96e950a62794927092418a5b2625ba277b4838889588df98c57a4b7584d38b9a7251bd114e614b12cb6555114e72ddce4d9a13942e2d118e414bfeca302663b47408271383bc4b3937211c64289d97a694bc683b08275526e93349459aa41f108e7fe16ffacbb3f62c3f38c96b9b63474ecc186d003e3898a02ea5bb132fbc2abd38a6e896d9d55dd2efcb8b7357763f6529985f4aeee2142bb88e7a557471d6fc8d2528f30d7a33b938e84cd519639725293e5c1cf7b3c2c9181b7c2fbcc531fdaaeb2b75299fd716a75032284d925d6a71d258622c4196bb8f0c6971aa1e25a538f7cde278611b6fd13d599cd2e5505234f9f2326e2c4eb94598cea9d8139b83c5f94e3ad9576466745c5e7190119931be49be297aae38c5a4293322a66bd9d28a93a66a101fa3c4d8e3b1e29c27c5d833a6fe6ef72a0ee733a32a8ea7e4ba2c622a4eb6fe9d276569bd3b5171909b04159b8bdea7e9294e719a4384afc514e7901a840c16eb44135f290e1bf3ce43eea924d9498a836c8a99cfbac4909e8ee26c629c89a67a13345da2389f182a76f5a80b72ba509c2ffdf247c51a1498342f59a254f813c79acf351953d24a7b7be2e07af2a49252f6db2b75e22489565850b117470871e2f871b2babd5b4917aa4d1c35934aef92594ce8551307997c935427beede695896316a5737db244ed053171ac186132c692644b4af212a74a62fc6de343433f4b1c3c835653a6324db254258e75c2da7e9994296d8c12671326c24f26533a2d3c89b36526392dbfa6bc9995c47993123157a27a92ce227110ddd4a544abcb820824ce3b323799bed33b377d41e411c7fe4a2ae62ed1aca0c411e78c3d8d9b63cb52d58d386db766de97349aa4970b228c386a30f1ed640aed063b4a400591451c646cf2929220e5f46f801051c4319a8abad03ed79ae48be1412411c724e8ba5f3661428820e2f41fabd9e6267ba5e61047bda03fc3e836f1cc33c4393589b67e9292ec4abb408814e2749af5cd84cdeda5e46df09ec3ee2042886310ed21bc7d14d42841076af4780cd8114406f121220803880462a48608201c20f28722e2071d490e1c237de0c37f32a2a3c7480344f6c000113d8c2840240f38c4a0c0a71c0810c1430244eeb000113b8c2c40a40e230e10a1c31c142022070388c461e40022702880c81b0e20e2061a226d2080081b4444d62043440d031049c3080144d0709292ffdbde667520728663fa38bfa0b34698a4bfa1f58588190efbdaa916d7ee848ab60c27617d842e21644a935f06226438bf788d90b76ffbf66f68658de13c1ac474988a9a8b41561a1011c34155f48d593fd6d4c2613875efd8e7beb7fd49ded0ab771d1f302b0286634c23cfc25e5f12b97ee16035273259fbe949960fdca077ec680c43c40b28d205112e1c3b6ccc94a4e54db8f98696b70e306cd8e8f13018f9c2868dd4cb82c8160e6eba69545989bf7fcaba1a838816ceefeba3c14c904d8266448c314664a04307186a22601a8864e178c18274cb77a2ae78583846912b9f419b10162b912b9c88158e269c603a5fe9a32b49a40ae74a26f7ffeb840ae79f2de9dd6e2fc55244a670124bbbf66d8a6f224ca470b0ab1c6b8d314d60821a5f8cc18387062cc08210890296995762a677e84846ae78ecf884478e30520ab44c220285f3a8a094ce5ccd63e2cc81c8138e294ce93e51a7dada252b0211279cae541ca59494ddd052268834e124a64977d2ba6729fd271e366c08e00f224c301b224b38989a2d15d6f7808812ce175f3d83cc2776bde347c4e83094459270f0925f9b36425790f7868ea4b908120edaf5ebbc4b2f8609dfd0daa1211039c2f1445550aa4dfeda5e49c4086523062245e0a1421021c2410899a53da64da6e9c6e016880ce124a855c9d822af15ff30c6e081c6e0615220228483e9969494d2a664929d4024082549cc466f68ed98c1888e1e4038e5cf8d95ca936fbaef285502911f948d22e2836a018d5e9c44cd567e91a14fd0e0c54912d282ed2661fe8decd0918c6c5960878e0b5ca00235bec0b1230460348e1def399e47d1d845d990010d5d1c4c99502969da7ca259c9e4a268e0e214752e09bf725da2731968dce25c29fa66e998bc5ea6749aa0618b63087db267befc8656591829054504346a714c498f9cdea66971ca125ceddfefce2cb955a0318b63509269531b269824c96571d64a6236b69dde34712c4e41d3940c2768d6d8b309346071f62aa5bbd452346df315c74d4912b66d73eaa5ee8aa3ac55ca925e9bcba45b7152419ecad3be9a4a6a59714eb113a4a9504bb2951268ace224c4442831a34555712a8d17379cfeeb3c3d15c7a8eba5c492354ca0818a837ac98cde357a3456c640e314c713c34f9fa6a4cbb334c5f18417597231d668ff4b7116a51f2afe28212c5c48718cb15ff6c47429d9378a6389f50a329e8b987411c5714f92c412847e59905628ce32ea545f3657502a0914a7a4ae438c9c3c494cffc4b1a44d729bea3931a7c913c7546a2df7668f533977e2e47d52ca286aba5f839c385ae5e9930f6de214846afafc492a4b8c3471fc392995b81a268bcc32710eaf143246d9f87736268e9527579b122d9738dc692841d3a97705a9254e65ebde96d5549069abc4f994ee599bf2559595120713a2fa2fb294cccc4fe2605916e6faad31d32e89932869458cf69b24895e240c353f2b9674481cb32e876a4ab1c28df888738a50498fbbc911274b77ad11a7b7529abe844dd2493e234efe7952d81261f126bc88c3ad95c692f476542c51c449f032bbfedb8dbb6422ce5d22bfde7249aad345c4e9dedadce2d787382551b7256a9474a733431c840ccd936b494d8fb410c712b2bc6297e75bb20971ac104af0b992dc52f806719ab9cd25c4985c5c4910c74b925252902968305f03511010071593c6d456342deafac3d1e4d4be2fa37e385c8e2f1f256f6eb6541fce266f128b4949d25a4d7c38565d8c7ff209cd6a710f473be154442929baa8530f27f13c2d2a98129a35260f27259714f24b100fc738d94b9b496eed15bdc3494f30f126456b8773a59693318c521d0e42e388cb3b25743849f2cbebc520422dbe73a02187931242987a2b15eae49e041a7138b988b4cb2054381cf544dbfc5d7af762ea0dc7de98a4aa4cdb167371c371af3dc3583c9322b2369cc3c4cae552ee957662c361777fbb4e7ebe87690d073d41ceb249e39632a386931c138bfd2e4ac3f1efa432dfaf13d28d4da804b1c5325920100643c15018c43024635d0203130000101016934662b168402c55b83d1400044f382c4e342e26282018188d84e281181c0a84c2203110100804c2c0601088714c4652383e0409a56314b0cbb7dcd204d547120a72505390850a092507c58e57640b3242b34328d34001b512d417c2b87a6e0ae9b8a8f532aa288250d243c5867a124a1a4a2cd448a87d26940e40d846c939545a45b12ea52312a4ec1916f5d907a88a12552fb51f40adf776e8194400ca41282d2863506ba00e414940f125145069da984283a5744081bdd6595043429d3551b43d4374f32950da5046a158421d7b3a0b852314f0d11465392e0d9510116a03ca00142b2860390281ea13c634c220942c02057c46826aec04b51e798e560b43b1837a09a50aca0e6a19a82b28438c02729de830c8a8c73d6b940ed3cb900b5492a0ac51541cd9caaf6229d4225033503f434187b2835040eedcae07302a4b100a7d75f050385092a068403d80ba0185004a038a02a85ba8a3a1e8a18c42310d0aa8ae5f0d081039c09ca467a86da2e122d87885436248cbd83cd1f9d1004202f724c5ea67b2d761d200dc1ba528d801de6272279c48ec548acdcae3a1851d5b54f4f0e4047dcbfe3f8d953608608f41b168de1288761e2e33a9d24b76c530e2ed1f95a9018a726d29e74f3c51738196aecb0ccc4c8ac16ea09472417e48e5583b48aa09a64fd0644feb936ea1437632c7d0289c0c6e2a4778645a64c72753d64d3d62dfe6de1c737f68d431372a68a56dbb3f76019a38ef4dc5c0e24d10410f8866cc4938d727b2139d6e23b58d9d2ab002815def51da024985a1d7c5af13eb8ec8673153ccb09d1702433e8b78e22b5d3a32cabfb06575a8131d09605e56ef6045d642aa550ed137e8d7b6116857d34eeb1a4694ef3b9d47e48e6d142363e6843bfa3a664ff0ece9349516109b5d67e8597b5dbb85a4ffb63a58002cd8ecef9dd2226a9b3d31c88225493bff8d1e5afe8423410031fa8ec1e22eb20092baf9e20752042b75fb9c0b43e46048f269cc26cdeee355dc97c8c9c0222b3eea7676a3dd4887466afb04097022eb9b0013428146f0d629bc1bd77980eba02caae68ec222510c8aa953b07471c9eb647f928eff13ffde3a7606fae7583852e839a65143d2d4bd885447236f05d96d7b325cd26f1efa1d29bd97486451698d6336a17c40b76008ecec868ab0e205a99bcfeb31f300d613df7d202853adaf6e9288a0ff743323c53c1cc427a428e28763e3e38934723d8d0f844898ac761ee7f82fa2a20b1af80d4256b56207f1786d798ef6b00a943ce44fbf95f232b7f84bf42e40fe0ba4a054b9f798209578429980b179b286b73847e6117ecc328f61eca0a3c9a6e330369a797826c02089dc2960cfbce0c184b163bd566410e599cf5f8764ced01048029d8b4f40a20e79ffe8b39724ff5d0aec1c6cbb07f1fc10e05b4a9488fa1e3251680b2514a8a176d19b558328190058b2a61035749fa68830155ffadf987656b4422416e28807fb01874b7221289a8c41c776d6b66c55587a8acabddba05514e80f515490414d4f5e1a7c7d0e735c6fc17c6a938c24d5ab6bc61cec6ae7a94ba26e062cc7bf4af4f8af322a29a1a1186614e24a8450375379e19c4e6add9107ec8335cff50c88925934bf5a034b9440cc2062a31b2e0fefcc121c8d4b54aae8662c67af9f4c83b58a9e741609f1fdd91033562a1211b5b39507a5ac00aa86aa62a50983214fdc55c071c06d21a5253fba47d39cef3ab4812e7f29d17e20baa6a3c9d16b680dd53a05a28bfd9a690d52f3104ce93446d7a68fe88233608b05640ccd171003a1a112b7ca6295bd3071a926b47f58b3aad62fc5eeec99f403dfe1413fe5b7216c623c873e760d771e8ce3d2e5a9aad01364b0dbc73cd708e19cfa1c603c5f2decd080a3fbf2723ebf6a0c3a6ad7df546d55d3cfb61c859da48f88b08c07f0dab4450be285392e5b2413fe2b22b69864a0af945ce54a0ba126df8266a7ebaf0b79e159c2f0144d62b32017eb516d2c9e737e0d2925be4d662d7e5bf3bf1079d8b17686062d7a8cfc1d21324145454daf8910d6bb6b6511a73376df0f8f751bb5504c8dcc7f5c8666cd729f0471c1440d07ff49389537cac1975f76e2fa7f0cf93504782d8947d2f8c5bd67efae3b1a5249439d4fb5fea3977d7bbf5677352a51ca1b9528bb857c340aaa6bdbc79b07845ec2e2e230b0ac9e7be612c1371c3403a0e4f3e6f4d83da343b79ccce47fae243721c4c98432cecf87c9a4b53b68943a4db37603255439364a18c94abd081f9c60ef72ac8b035986dc9061bcc152ce48387a5863b7ec551c131d1043aaaa742d9678c69146bf267a00e9414ec198c2e3d44e8f4dafa061aded10f9334e91d25ab8063fc1daa9fc8d21c886aa1b4d2bf4b748811d6a5c5f20d19b07bbcb7e3b2d2d67f10446e2b7bf536cb762f752be4fe289dd72d7eec91b632cf03ce7a4ca5aa60c76a382c86fb88ba21959f3006dbf516446c7919bd690e3f8a04ecc7cdf781c1409131075064fa2637ee52eabd045c30d78cbe0894d8400b742d3065e13f971b4f9306c2d0a9baee4c315b83b1304d8e00fcbf98de52377e5282208ac46f3195ab20660c817911b99acb164cf8178f99262c8fd89f3d4bee2ce25c88b183f4edd1e8275a3f32705141fdb6d9fc149153071bb3a8cf28e2f4279a43f1ce69d3574f3e4a8d26f24377162f82491906eb4a433e86283615f6483e97b49f09ae1f5d44bdb8b72afe3f29a68b1d98cb9f112cd6bd3eb8ce2b5c9ab2afb8e575bafc1bc247af1f6baa9d7b1cf575ba508747a28491f917eafa339d811e3befaa072ed352232be9257142f3a5e672c927f7daf2fa0afaf62fd26955ea27bf5f6fad0cbdb4ba9d73e5f8b9fcaca8d8de9cd9e80f7bc1aedb50922356614a897b69773af195e4bbdccc66b1154ffb57601cba7d73123f4ca0debd566752597185591b66a63f23abcb24d2fb2e9c0ba0bfa7381690122c20ad910853e4127a5fd65273cf5012c7ca111c97f695ebd5e0ebdf8792df43a57bcee83295f1b8e97be5ed1bc7ef492ece5ebb5a1d7b797522f9e5eefbcde7a4199d7f163545fc9c5542378532327f9e822d807613d3416553dc5efdac2e15c239f4b29c9a55be6bdd6bf3026515a786a76f40ea07d1ae603a7f46a619b6b0fb49b26451d47f4b78d6864ce3ef2d0eff87e5ac9dd22b44c6e692280173d2cf81d227fcfda3ab08c9425f8f62e7369c3f0e08e6dc03923a603763dbf729a250dc3fe0ccaaab4b4bde45989fa68e8c81d414027131a5a27e24a3b3675ddd926b0b4a758415496c49622fb64f156ddd80c1e3c40b26ec090e6c0eedb8da394cfc8aa0472b83a439670fe4738c1068ac6a8104a820e2695e19f3546f4a7fe937d2e0915c4a258942e951c153f5c872ded45d6a487de80caefc7867bd3da4df825b5ee7d19b2f79b0db7d6fdb596b9180b94dda791a83cec6c7e17bd732bc24cddffa3f743128d40ecebf74ee05b1396bee6464d33e00eb5ac97e7d1279e0cae48bfaa29aa470ac7664f8247df6ce01419137440ec1914070601e72e8d42d84fe2d1b10fe0deea5c3cd75e66f9d546c51d96ef6c33ded8ece50915b55e86e01f4061621ebef8693eef161a991ae918ead04347f609473c1da0b7c84dfcb2934325c288ac7104e3036e6029bb46764bd60c39d276287314cf2486e482328e48734517e062c7ed12b88e4d5ca57bacb2a641091562a03f8130b1af13dd797221702d84ee83ae1ee4021e343ec81d986e0e5204506091df8b1f4a5b3804b65c7b3174a03aeafdec637255a67f39018af76c0e20882a4b803cf38e4b81f9a1bf38ed3ab52019151f8783a639ced7366847a637074ed323a46a6deb161d773f2b4604d5e818f213facaccaea104eb555be96ad2ac164f4d03f0c61b9085f2aa64ea066c1bae44dd42ce8e233362d1a00c8d958e25ce3a41be117e8ffc4c9fea6e02d7457dc1c02a99ae0a18eafd81358051561bc8cdfba6d109b6fd245cafb06fa63cebefc7b2dfa424cb7101ab676d24732cd365d7e25eadc388897d616a329d9a51d69a2faa3737f374c841d024cf884dd4302b793b301132932a4aea865331856825b347e7d8f37a45c79dd74a53c8d89048792ecaedbb1d84009f32ee17a3c58cdec77e011b4936a9ba3d3b2b15de031bc9a984939efb9bded234d527afa78c8ef3729a074bb457c64c6b13dd74f1f5876d1fd5ff0804d70a3ef953eeca7c4b7148dcfb0265c36e42673d6a7bcb19fb00a0b1e6880db041d0ebd04e872ea951faafe9c249b286c681d7d78851fef1aa8c187a34975756f2e5c2c649408b6d6bc61142bc88a5bbc63a94bb058b9107b7aa5b968a79336c534e6d43923937eec492d7b504ea57cfe48dde2d8a0d112bc709a45d4c96bd3133bd569dcb7909c44ea739d336f5697b7609d1e458cbcd53a0706f06c69aca688ff728f519fbf00fca444e0371b15bf1d57ca04da2c580ce7e20e7cf606de4b03457f5a3b2e4bdf41a4e2f2934d3b3d1986693847fe557b9bcb49effa5963d56e2ebaafaf51646b6beb521241aa616acc8e29928d52493d76c857b8b1d13621bfc3b3d4d696d65ccde0e1ca759ba5da506901870383d0d92a255b3355d82d3f36e8fd76a40b187c8b7f9e9ee28e04b6ad8aeba5ff2be45d1eb86bdb6d9a14abcf2be3e8b6416b559dd1790c9f11fd5aa841c29060f64908205797d09e166346b38aae4f8cdd50fad24efa9d2f6998db3910ffed7e0f189a3c52cf75a080b55de3dd39e39e19c3417ac6fe889bb4c9cbf6cecc2e71290e2d7d558e97c9efd9a4f19797f103ab96b38e7ea8895f2cdd10f87d1bda8a8af1d8b64ea9d53a95ae08c44a3d8423d422f9f11e3ee78e49dae866b5cebb26a10fda40617eb6ce38408f8748c9680a481444610ccc7f3a9db19d8050c306eeb430d06a6d935986956438b22b8b4825880565174d881dd446c9b9e58f1d3ecb4fda4a62fba86d02013b3ac8593d4a32e87ad742391212c484a6d44239e13605b8971c891d81b4b6d026246ed1f8ac70f0862e7ad6f65b146bb0539fa07c018fea76ebf973d6420444924e08c9ef68574acbd199693a1cb256fd9186d61e88483488423b342d84f5209bca4101695f116c68811d630edf24f5441ae295e609422f4fd39d6ed50d8a4ad9fc915adfc836726b245b9436f0161c63801008c900dd1de85302a191013008d7f885e61c05c9e4adcea41c85b54edd7a2847c032c27cc53c5079957b6e9ab19236e6c2680212ebf32a488a5d5d00772e4a37f5be4502934160cb39c2dcb343eb5b503941a81382145f5d5e49bd15302237645ecb88c25477730918ac5bdcd6aba86221b58d76b417e6231da36badc88d648b4117b1d1d443af6473bdd3875f0684535b83857b08c8eabc266a4913acca8c8f60a44782a5e4bf09395e3aa7728467b09ff44ec18c31a46490c0713a8ad5ddeb5898c288ada66edfdc4ac94d812d6461fb758a7afdb78aab659c33e1fca68d35ae65317bf93d2e8087f2ff6ecd78759e4b8675b1ece5208aa4bb1aa461680f7998d8e37425475bf56f3782dd55da10e01590a6e84d24b73849189556acb61d0e9edacea39d89101fce717618068e372c57b3a44383c4fbf7c8e13ddfb52906c3aa7512d25f6c0a0ed764be6b16cb196ea750f8348977c3a900126d763ba6c4a94ef57aa9cc54095cf0fee637e9b84aa5f1a0f0303f317c55bb2250fa276903422c171cdc5d34a742dec069b8f760930f7311866cdab32151326e1817f53ec699bcd7c14d14d3c6c5f321fd8e2778c5de6adfa9be0f1dc77e5b32968cd87ee803fa6dfbacd7a00551234f832228c1e0425086642597a806e066c20273ad3e94a423040e920443099f7ad978612de9b31ab8ef08ba9f2c4aa65858116f07b2e3993d9d82dd4eeb6ddce60979d1c972d9f9a83726f5194727aab056670b445de85a277e9c569748a61122fd66148951135e93f37176e18ec079686ecda5bc517d0a1458d7b919994d091c9fde66bb5836928225f9338b01cbc3345c7a95389a5cbb40486b20cc39a56df66c0b7950dc5f49a962ed4579d428c66caca7d0af916ee5fd866b218347d6298169d21c4f2ea06e867c856c5e6770e112f339845421eaa475fc7dd7d7cb59e88233ddc3a80e62d54e873059f22cda632008a28bca594cec1f49ce214f9833ea7d3d90aad0323bba4a373a3a2bb2d89e76ef5998ea68e83f39e8f89f3b0c8cf4ec041809c593ffb7e40739c120d960847529145ebce1425f61debc1204cf70201ea63fb0c7c050028e87e16beecf19feb1533da6f62d03c11029d4e2d425771af60a51a98932cf3db33a0d446cb325cb9a841bad114ede2e6e9e2edc4382175f74b018fdee8be9fa9c85c3a5560439e1d3a112bc061293101baafeca9beff0ea3b2174f237930e774c1c3e685236599ece5e1ea2dcf63a7f90fc2b8bd68ac0891b59998e22a691c272c081154059478cca1a10e0d78b85809730911e22b29735488d7033418698c62f359c5914f4bc6a04cdb04a306ee616d082fc12d5c89d356bf1d37c2dcda17505040ab05829579fc1f049e971c1da4468897913d62b3dc62be1e48daf09be3537f71ade71b21ea6ebbecb0a1ec564ff3e09a1e495346f2bf823569c8596683a2cd86edfc605d8439c8cbaf9c4256fbfa1eb04540ffbc1f3e228b582ca125ece9bd6af641f3a211518161e9dd7c84c5127b2dbf7a6e0b858efad626d50fc88ba588ae08deb2069137da5964b9834438052334e2be8e3c110f65161bc197861da80991b8b29fe6429ab7175b07d979e34fa2414a1171a8f309e76ad040d84edc69f0605cdb016fb0c629854fe385ea728b9b68cd9d8d985a16414628417ac588c368751e1d52c2c0c16b36207aafe2b93a3f5c8c761b4f4026b5ceafc6e10d33c15a24011b0a14a8d40967090286c4dfa8b0438f55b696c6487b93aaca9c1d5f1671f26466e2bb02832f94d032c2fc5886917d0180176f462623897ab9c0d5e48f96bda05703d4dbbad65efd3e094ccaeabcbec43f0c4a55cc48b77568f74b7bb9b40c2f71ff7f3ada4a24070628a682cc8c2d18f9e8ea149781b92e06be6230b0d67981a9d805869a2db0407132950719373f8381c01b61f1155694ce28c32eb51a3f942e9165b5e7b60a1f6f41d2d530abeecfbb5bb29ea18d3a768ab4f0f3d2fee85d07342523eb4ff102710936b61dcbef18a6f7590cedc49b1e966b113cc4a9260d58b938288394948020408a3df1f2d351908ddee7969cffe6855638a1564a4324d6bff506af725fa16061483c4bfd877b41e2c9650ecfc62e98e08420b1718bbfc29548d87ce120589f79e6b50dd38766101ad6576db3253638c87868db3ee624e7ea40eb1747932465fd140c339190642fb0132d1ab19d86bf612d4948809738f0b04e014140615ca8baa33f8688c812e7b02c4a49872a2d3a2146c9bb88f68fe5aa076f07e8abd6881d85da9662cb656dc2bafc984422e45acf7a84f2f29606f8a10e99cda41b25280aac35a0b25a9dbf43b75857eda34dce48823b20ea81b207d5a5d282f88853c444b576bdc29c50cd0d12622cf94a44b13db70d96adb09008969d62257f0a5fa3794951a3e4b7e61cbf760899112aa6b84b2191423d55883aaac0daae5f497a6b49b7bfb9decceab01c49e67491aca6675996c23200710a5b0af2b6cfc4fd4826d6efbc1d78e6c50c171249053ca9b5cf3194241ebaaf6874935324156db5b0e22391a9a0288ea8d11417c3c2d03c5b6328bbf2170c58565dda24325761579b3d307623981079f56fee8fe62e5de3e2454a21c75eb8e687f03630ef0b471d65efa0b07e68a18508d0b67278b1eba6670f1dfdfdc95967253786ce2585d4d96a48d9b30ea6dbf7d69ae0ea33c6377e8a083108202db424e272783e1d6c47f52eb35fbc05e7761e87d3228197df8cfab8fe036df9a834087d1a3144b9e9e33ed7c065950e9da849b4832d88c280b69cc36f7ec2e255854a47810e289b65bd9e32c1e255b6d564c4be987469d7d8fe9cc2054bba04ef4d59f351dcb7e15b7b0693beba5d3b85a06bb0172dcfba748dac758286ee7134643450c0d26d2c1637083f20c488b847efd0e25f6282b2c3157db62c64ff2f27d2018ab0dcc6a43d3f79b38d479d4a9428ee55f908f54ff1fc688402fdc0d441bbfd68275edc00ccdc544a2cd7ca047aa09af9b9949c1bef4f1a3dea9e2ce0baa32d370a280da01d99d92835d11398aa48ba81cb9d5001ffa3ace778a9b2eee69844effd559fe0e1c9e273d3d7a584f7ef11e8e4488a054d14cc9f217a4027a480a6382f89d4f9a35808533df38cb91e04f9c51cd1fd0c9905aca35f2f60824c81b3adb98834da91c0914488fd2da9c3d98918b43b876aa5c45f5f70eaf107870fb052ba1218396d2b11bb14eda2101a9226cc1bed291bb4635470d375453f18496252a767d8a0962fb066ad4dd62230b9f143ca5439441ce7dab4782d620aa2b3844a3a61edd2277879262a0590e556a029f836a557444561f21a18a440a06aa1c8406762ce9915388f181dab0f481edb42ed6c836134de57ef751361bea4161d79c06cd8ea42fe5e8faf0a52a29fa1b55ed4aa2993b55aeaee2c0364bf12f2cd46c270b14492fdae9c87ee3da4bc5c84cbb3962843fd90eab02a7eb6ef9fa66219e83795b468d3e6149f2048f343f654cd40aca16facae2d660d61a051204d65d85b37d66acd0af3d32c9bc24d12101f0901324d16e00858b56df013e83d39dbfff10aefd6952db93bb652f8a9e76242dcc5906be53f525904258c32fce865913a9e3f08efb9f49ce90b08eacbabe9addf9dffb0a4254a0be3efb462a0bacb07abad0942302c1f4f4ed879b7c7209210cabac45a06222ac0d2099b999ef631ea958d8458f612d5164e78559b7eade89372abce84cc8fec00d0843a7d47d3f9e019d14fb4a889cffcec2b264b33f00fe5e94d030478711473101d694aa95fe01033f4f810e2b72eb923365a4766b3700ae7e75383afde8d0ed247dc7037641673bdeae87b306f7d3155e6a07b384b5c2efbc8a301b73005c730775f2ba7ecc101b0156002ccfc63815eef07335c9fb10e3363366c5227b025692ee855eace34a14ce92f5d63104e12016b290cc5ef18ae63f26b5b6cee0d314b45a9bbeb6b10a751037a51f3c6e8684613a180463610fca6b12fa84f0ca7378aaac46dcf7799c86a6ad4344f45c7068700ee4f7a44b4a912bd04ae8775cc8eb48a0c3547069f51622037ceb2bac2c8e511b0a1e5327be8e94e82293b96654ce0299a0d3cbf34c6b3d615cbed21072ad237b583fe08a378e6d05eb54e83bc1c53fa34e6d685bfa284efa93d2fcc61ef81d398d96e348f7395b8f042bd203719237511dbd9569ef21e3cdfebc39b49334f0663cd02ae636e46425902679483f51b114d6c4baabac48a254937febde2fe092eb6777f854ac7101b813d0c36e759a9f6c1db2998c9c5a42d62808a2da55c383e61c093b80a7820f2ba85eac0c7ba6d285d278b645279a04e4fddeab1f6b9016ec2c27db5614a3f492276fcaebc50abdf184c00cda8bd87496ff051445b9e2e99062cb77f625af48b226c5cc02db51e935e3e06de598a9723014291cef9554e4424804048211965e141aed8fd0bf6934cbd02139348e2241cfb5d64a4a591871988cbfb232d4fad80dd68c55a6cd299b914682229d49366c53f4c6ea1802c5cb9ae63eb965a0253ad90cb22d67ec10015f7fd2508d5814816b1812a50c6d1d07edf6c42993307011f174dbd02a0acf5082565903d317ef657e94b0d31dc9262d5653a4c1ff60b636d294005f840380f17135debd725f4d2c7bbd6003165ffe4ba782a1853daf8a488330f7ae58497afa6a2e22670f92139d105e207caa653c5927ddfbfe59739b46b7ccb2738017a1d1dbcd7ee7e39363f1e5df95ed3b94d6e5981ca9a8402dfd7388f6d8f3c0b9da506d0b1482d6378b236d8a4ec39f8119611b2a72f942ccabd36e7df853a2c789faf04c4ebbe5795dd790908816200777805e3f882ea828fdd06ceee54df9107a57a69cee5757bf14eb585e63d6dbf200719314a4e40827b06cb43ba23dcf11d4efb1acea439321e13e39aed5c1640d4466f630e431eb36e660593c9ccd819ce447453060d1f6d3cbb2cad06a0145c8f7ca8a333c8e0f23372138da6f97e09d9f1049412002dca6c3fe0e60ee8732709ba66ba69e8bd2e7c382b3d86c1a3dddff2f6ba85af75cc2a85db673e4ea82a618a0e12afd84d5bf8cf2a942cdfa408d6dca695ae477854412f1afe381169d30521f1d3649bf9ae5d3bd4b1feb499b2b1cd9025b92afbaa3837608f1b8105bebf4daaf9aac1a692063c96c0397c11a2350f5c74ee7ef21eebc5034e3b4a060981f13c35e4f85de8047615b9abe4e2741202a1966e93aae5deec25ffb5db44283b62fab84b38a1fe94db76c96c1fd234488771b224bfdf6326855771500a345b06a2171ecb07c811ab17b87016f6476e5ba6b39d370c5066df68273510a835cbde1d3a37eab00fa1064aeb33b37f9c9140e605b980a53379910e9441b3c2b45db8f3a8ead93662b8a7f166b756e71ebccbd3e974be41c8bba0d5f9cfa36b1cdcf7842eb92c72b01d5fb867f6fa654ab60216fa266b981366f85c578b09bd51d6b95235a0f2e8f9aa772ec55204a772d41521c74fe4267206652b52105efeb32949314741720acdbbb16b15c32a78b1bdc31a38cd0d7bce222935530433f3c350efa1aa73cf0ffb05aa0139d73de6e8eb7b0d98d1e2bac6a40269e26284a7eea89bcd8aa426ed4c6d079e111b0d8dc849da34cf06f348bf159ab5271d4593303cffff4dad43148cf4ea6ab1e46d64afeee868a3444f21569a9a2271ddd36707ccfe5558be1d372628165107144514b88a686de7d414e474ed05648a081badcbbc4911cfd7984192e76d64bf60bd6f58fb9fe4b88f05bbeee74475cc335b9b1d8608ac6af2592ba925c539ecc448836bb97d9e55bdea3f14c9627cdc04f3a17da985144fd8e6554925305418534c329b4a42f69627ca7879d4e00633079468bc4e2ff306edea0a07d7481bd402bd0c505352bdde46c45262032353464fc629a651095f7c879f31d6310a641c89711fa3f74d1aabfb07501dbf26d39e93380b3af0e42f2131fc755d251d154320acadbaeb31d20f53805f805bad59766bb72c6d8792cce3152fe6e26aebaa3ed97f6ea809d9adfca7984e0054ebf65c216c87792dfefb3b48aa0bf4955da6cfdc0a204415feada0a0504560661a018598cb9762212e15df4af353d650e001e287b2acdb7b8344f643a7b0235dbdaab7c12cae8e98ffe959ab11ad8945770f33a99ae8d9eb45f23f9e1cec3f8b0d2cf3316e63878d1cf61458e02d2e29856469400f793016185edca9fb8e39b049cce634a2ea55cdc049bac361fe77e560ff2457a91cf0f4e10b1dda5b244873b462704d7558692e7086c112086250d88d385b4110088262c4e4a77270b0e2a7fe8af93870b0fe9bb8714fe756955cd8474808a9f44ca1ae5385cb30e5a02d36fe144435b2e8c93bf1d696cf8d6f55ee8385485306f5b3269b918dcfb0fa2fa9ab68b110974de02e87d6e3882fdabc7774645f16911e2192ee70f0de05c74504540a9e2f850161336a5c2ba51de33f092395072856a9a05a5617d47b55a4a40f10d99bac5eca5f8d229c94354062d49071a27421d587bf02ac6052aa6aad109c37ed5964137397d508d835fc265c31e80b10bb671092bede0a3177d0071ef4f216ee843f7af18d6724b3e43996aa88519fc18274367edbf300b047c3fa56293e88ff0ef9ea714bd4f7d7f7f4b37cc28bbd2aa4e8da780e2454e5b105030887a96a8e8e998c3158fcd0913c0894f57c5b2e0843cf32ae0bea99caac2ceeca8c39c80a16e26d6490c172831f062c7c60cd04a64698a937e00983be5710352ae15ca095e107c591b06120233d0033d8a82522325fbd01e804b8f069510a44536e3d1cfc63b75da5d5e1e86467be838d93902584a4dbb27b1fbe3dbe84d0a1250330e99d57141501734cfa422b7561085c18955366b163b304607c053706058055a84317d58d8038057c12380d013c1d7022c00be0640130bdbd3069626c345ad8f61d44e711e9e89500530700f38421117d008c978382712e47085f107210fbe2889e5325cd25104db1881ef464e39208210b4780f20cb98c2008903d28b6b083008d8100a193127558d2997198c55cfadc9c80fee01107193c105a166b6ed9f14b658956954aa5134b4c9968641408df3a7d2b1703b7a58942f322297da52b107d64b1321458b64c9819fb8bd1b8caee52e56bb005c984a72a337789b3cbeba8d1e194632bbb9267117987bf83796db3e8c677babc4ac2a93a402eaf5eac0a60ab15325ab26dfdd31b2bce277017d6e866c172e13c023c2b779edd33e2eb1959ded2f771d05d739c0cdd4a17e138dba8a9a57400b29ef6e15318fe875813233486c5ea4fe3eb049a91eb546e14a89e9edf34b600ab63dc41c5212bc7c9ea258306377f17cc83d2dd3e19a2240694129c8432133ff313507181277bcab1b03f8f501024274b87aefa3f56515041c619a089cf14551253bc7ade037680e1fa57ff23871a623812244784c0e8b78003143617016b33d2c14812d7cc421aeadaabac01a7e41ef65414cee50e19cb5a2898d0e2f26a497e2c97e2278d2cfdde44df2eba3079d60aa7ae3a93b59a91b078e8d470f06f0aa7dbb52acc4ac4d4387340cd82cccece599d0fe725211c0112621c62e4a61ccc3a5302cb2ffd59689e723561759cfa5cd4c73f383a419e60fda3c9f541a6ec62cf5286b72b0fe5c4d82eb292d0cab6102a4113ba780bb6d949f63875d935b8cec55b541be9ac96047ef522d83aea45ee2bb6656150e6b8ac3f956077ecaf477652021479be6d18b1bc309bfef38307843c1f12c320ba73065b42698c6967903e396c1949d60905f58327dcb50a9a9cb1dc79091fc80932f019b67edd2f725bfb07eca0070c4e67c5d3365423115c4d77fd3da27fd9d0826f317b9d82c679f32f71e42593cdc4bf72343c38a51e32501c8a20894bf7fa70f9dbaf1a08c570fcd9442cffac887d0ac0ce470b457c5c0c09a659f278dea8daf409d279cfa6a35a25390b470f2d10a755d91169587171d3e7694e982afdcc717ca8645b180fff3ac0ce7a435cb652d28b5e583cff5f8f1bddb7984eb01baa44274c2dead71216b95149506af0b173087cdc00abbb198619f3c522038ce63c4e005f235b448053e6f620256940d9669533125842375dce82cbd47641a532a4bae54081bbda70b2f98128590e3dd6e3bf10c6ffc197561b2ee3d3f622ef93e427a0cfb9f0158a02cb076e509779c21696561819f93455913194a1a61e2f51f16652663871664789be971c9709e96df304ebec1ba526f047ea41e89b5ac16e1631e5c6cfee94503f0f4ea742209de95c2a17b9fc10731c4a1c5a74924ff8098edf9f70cfedcea6598d7537d7ef26787b4573ab0432bc316b9700d5db797d61b374cb69334e3e3f577511e57d90cc4e8efb099bc1d0cf7241815244ec17d5ccb89f3fe36c2ebbe11a3e9a899a7384840118448a96b1179c8ce832e2a75ced197f8b39cc381d374251cec2bb998ee861c7a9890ace17c42eb8d3ba723ef032c5f90ef82e3fa1c2da394f20e3b9ec877a7793638423d5921a8bbe7971b16c6171af0d30c385cd4867ff3f0fea94419ab1aec4711d05692265753a1388175adad03e7873fe940064ad06fb1b2bcd89b35280f55114362ffb57e3447484dc474391295a336ec63409548602fe74043f0b3660b46439330f0f0f0f0f0f0f8f14ce6da8a41dc21692949244ceeba1cfa494524a2925c1998983d3192ef6de846c4a7c3a33f1e9bc04390b410bfc0aff598a6e62b957421b0a0e3110d46cb55e2c1d97557103471808174cf96e3a25d6dc34708081341e94874ccdf162294f0046a1c009c0285ed4708e2f105ed48ecca0a2bde379060e2f90452b5a79d2cfe9cee531707481f0396f6f7faa186a4d5c20a69665aec61c9f32be058218b13c631b3070688128426e37f66bfdbe2c90fc4cc677becdd3afbac08105e2686852cd3b42fefa2b9075cce43205eddeb95981a0748a9f829d8c7fda5d941b84060dc52a9484b630f31b10705081946b357cbc304fe1a4d35498dc7d5bb0a9008c1ae85220c5d2313c074bb17505405003011c517884d07a11800d3820005d7451bcd0000d1a27ada08b2e8a17c8010552accb8b2d3a4386a4c0f104f4ac3c3787f2790b4e5cdcd8c020389c4052cd50af39b85fc6730bb6e6680229fc3fbf372748098ce460027146b645b114845e3c4da0ec3d8063098a0cd59fb3bb14038712c81e2d9cd2b727f2c4960472ae9c32879612ffdb692f7020c13cf9b11652b7742c28377a071c4720775e961077bd2376c4050e23d45a71549a3bf96599a20f388a40dccc1836f5b7a5db1db3c041841b700c21f95cddb7319806d500a3ec1a273884407e4b328fcc98bca3f7001a34147058e00802416faae7609d36a5ea2c9001d405175b2c80c613388060c5fc296e10a36af3036bb7bdb773d49207f920fbb8ae4b664199dd8383ca8d1944c983a3edc5b2a8f11df8a5f5769e3227257b1d1817aadc7454d83607a7e83cb7bd295f1e078618b3d4392dcabe81e1c3eaa5a464834c530cad4993cc6b2e406509505501470dc8377ae3dba2602011386840acfd7c9197526c78ce2c48965a573ebc445dcadd486140c04c08316441bca4df62399ba46b4e2c48374ab5ec740c1362c082f4a6319eeec595f6ff0ab2e78c7af38a1125545790345e4c59a233878eef5650c32b09315a411a4fd53276492d799d5288c10a9216d51a5e6fc3fcfeab20a5e49d63360f9b5a4eaa20db890e1ba9fea26f2a889d6408e51f3ba820c51834a69aebd728fd2948b539ac47a78e15133245973fe6e288aaa02a28483750c00b08c00234c0829281bc83418c52902d87560dd5ad1ef6430abb32eb362d63f44ac63484c968551fcf428c511045c4e85061328ca945144451ed184bd3dda1207690e7b7c9cf8a010a529dda91a245fe09521c119a9257e5b10df204f954fe59ebfef4fbbd13a4d231e7ec3c1e325fe104d13273d68970138471cf3995662f7b689a20855c7fdf7b6f1a35d620462648def1cc32262fa51b61c4c004b93c2f456576c5a0f2831897209fca8d5a4f17a14bdc802f1ad039c4b004297eedbe481d953ade2cb0b1001a345860e3c68d14c4a804f94d899f074fb9523e51829c4948f919abae30b1c79804c99326313a6e560a9e189220ff7cc5b8d2b91891205c0a7d3f9ee3ddba0f0962324dd72c7f8af108622cf1a9e2c5687bbe238839494db2e75bf5e16f04c17c4c37e82434735818411067ff95628eea1c528db1888da108620c392afac51464fc54033210004b04318dc614b7b3a553c28b8108e2454f3ae6f30d299f93108871085246dfcbb79db5d39b0c4174bbcb266349753f9d42903c76e8599bf60a6d2104f19458e535995c632a718c41902c66661413df9db60a82e4e7af9d6f0782204d6cefccbfea554010467edef4a5202f07f10fe450a24fe6f4f01ce6f98160b9949c7bb20fc44f9b39262a8bc10762d2253e860d6df72dc61e086f2694a5cdf5d9366dc186bee0e21770c3c61661a820015ed8b8d1802fb868002862e881cfb9cce781ec299e3d5c7d7437e181242ae6ec386fd9fd4a77205e3415cdcf7289e9203b10fbc2544cf2e3c47fea402e99a999de3fdd8f850ec4b02df3f92d881f95cf81143fbed927ae99f32d0772ce529d4e6df52d8d03b17c5e465fbb0599311c4842f97aa6a041da55fb0682528de39de66d41ed0672de30bb1f35f72e986d20a88d0e1eb7a6f489d840dad15bd96767a672d640d2febbea9159b48aa806f259cc394b7a54d04903b1ea44997e7a31d040904df5d8c994fa2f0f10e30c04fdf8c14f8792fb983703593c6c0a61bb71253c65209f2eb519348b8553330619087f97d38c307f0c84ebcc39568a1166e305c440b4b294548ed20903f963ded09e3c6465aa602076c6cec624fec966fc02393573f60c6b32588c79e1b31b9d3167febb40fe4ee53b32a598f27381709ef4848d4ccd9dd902e9ac8310a64eff7cf468c160aa299e853ccbc719bf506381a45ef1664c7b0562e74ae5a653e6675ead40ce24a38986355719b30a048fb19a723c71fe79a302e1d66cc694fd5dd753205cfe8c25322b2990ab721232a831a1578d02d94299450f4f39e9d44381a4b9f6bd73e5d6faa02790c4e47fc9a4928c90294e205c38dd63ba443694dd048269cef56c2394662f994012f2c327718db17db404525dacb0a264a46b4509a49c45761e4f51639a152309a4ec692ac6fc9e478fc60831904090a7d2b7ad765b25c53802319dd7755a13cdb1f322c4300271d63a580ab22ba50c728c2210763485d1e4aad94528c420024166110fd6ad4974f6219052d0e69aa2c828285e600c21a4f23b55ec3a9562fc4138ff3a7f8e680eff03a1f7187dbe6653167dfac1b65b25f48350bf94e48372ebe6e7d03f5b21d403fff2c42a5687cf0f0f8e91ed78e2e46707c6381d7d54deb5c68e0eb0f00e752eda62f92607a9b3289e4fc59c1a1cec7d9dd2cafc8e6ecb0d4afa2c85b51ec306c95dfef867329b9c1da306fdc9a8318e789039060df23cfe751bb6ebfc9dc53956c66d4e596031abecd2076381cc9fede6d4c607ed605106b7f8b5d42b0c96deeb193e567b6528285e600bb47005f1ef44778de98f7fe902ba9399b68260a17539b3f3829f300c5ab082344a63bcf9ce166c2ee802052848005a000d1a5aac8254a3f92fee5185d1782d52c15a6a8655ba768e69ec688bf06c6723cb400b549c16a7206fcc294756fa16d9182d4c413699ad773d8ce820834a417ed1a15269b320eec52268410a6288536f4a27511ad6340ae26f14a1b4a752b5b428889d64cc4341f44e23a35d2faac6040a82b6149e3e29716baff90449a538e51af3b8880b79829c7db38c4acb3c376d27bebfb41c321b0b82169c20e9203f6741e583b29b085a6c222165e48fe8aa9a206bfe5295d4471e68910952cda9d58d113141b6cb1a63aa2d8bfd162d2e41b2aeb4d272a1ac84a98525c8d51973e7941f66f35609e2b5e84a751535854fa104497685afa7cdcbe1d94990fa44a818a6a559a7bf82169220eee9dff655058d1b57418b48902f3bc6e56427bb3385a00524c8b1a46e56bc9cf3ed7a04413de51c3d73ac92121d4152b56a4945bce6d4a646104dae7e8c20683e1946c79cf73a3b15b4580431c807cf9dc546ada88a206c10267d53cc3ca913fe408b44102b6eac677312cb27a216882076259d949acd17f78452d0e210041994f96bfca5598f21489e6edd7355c5cc7e8520ce5f4a3f69aa2943470872d229bfb58cfc184f1f04799377c9c79bf6340a82945bb94f05692088292fc9eb513e2aea020892095d162c684ef76dff81183d8c744ba2225fa21fc8e994d020afdb3e904574caaa952b2133e3034988259bcdfaec6a730fa40f42d343be5e7a4bf5408a1aaefc377a8a39ed3c907cb3c7f0b183abd98e076248ab3f5333ededda1dc8d62e7b31261bdb0ee4d74bda349c3e5d49ad033907ed95f64eb542373a10744a4ae9d520e78266732048518d1bf264aad039722096d8945325f70e8b721cc82d52c73dc5fce66be140cecf497ee6787a03e9626b0ca23af7f7aa1b48613728cdd8a154456d20cf675995960ef15eb181a043c999939b3173456b20f559e67ca1c682ccab81389f31faef4def3f250d847db1a42a086539470b0da4fcac793fac666cec3390e4525b57eebb7e0ccd40f82436465ceea679ba0cc4fc5417379ff6717bc9404e4f213a58aaf8de8c81146f963cfeb5a6939f18487d419be55c6a8d6f783c630b04d39ffb97add702d96d3ee9253142899cb34030e54938030be69ccbcb9dce9d8c76877c90dfb8ae7d535f81a08285d258417df8da675881e02163ba3925a5ad4a5520989e59665081a829adb79212bf9771c614881a3c456fdb850dedce9002a9777fbf743221840ea3404cd2ee32686f791a0b5e0a664081dcafa3ae174f94c18c27902ec53ecd65fa54d4cd09e411a7c464eb5efea4d204d2e8532a08d3bc59fe630261c3d45d0a6949c65d74c1c509b0063396408ae6dea9a9738ad2f7bd608612c8a33e75fb2f5ff8ff809104a279c79c2ddf2e064f420249b42773d37943e5b98f40d023eb7346e8ac508db9608611c8f66657a929a84dda8430985104a2ba099954f6df74be296cc10c22902cd7a88ab9e26cd2417636660c8124e5848cf942de824d08c4bb687af2ad47eef77a60cc0802419afaf87825311d08047de6aa72df7649ddc58c1f10645498ba4cab7b31c3075ddc1e95a007c4349977ac3eedc364d60433784092fd9c9ec9520aca53521860d8d882ed04337640b014d437e9f89b67e72dd84a1805d5b81b337440ca5a22fc83e933b19807bc0d1b372e8096b8b811862866e4808bd1dc3ed94a1f2294bee0000d1a60988103623c8dd99a2b9b7a5967dc207997b19495e3fc3dc3067cb7ad98e6c575785c7c9893513ea8924d9541cca801c184caf837a7e2656733cca001613d45a977e765cc82ac95bf04c89005e97d4dff490b4aeb69bb90110b52abed86be2a65c082d757b50a3d3db333f3686b96dbfba47dec1504cbe7e7a6723e7f97325c41caa063106759d40a82528f4f4295dcb41b67056966c634ae5526fdd62aacf572adb80d6d95bdd4b1782e32b3552f84b8204315e4e8a97370bf59d1b48241462a88175cfc82ee9eb93e1f02619c63820c5490e7b494ce723ae98c4cc6298862ba34e8144fa62055697b28a91619a520c7e952d175546a4d8f0c52104ca6da20dff3324641d07974f238a9c9100531f33dc3e76eb6654f4628c8b6f5adfe9fbc4d8c3240414ea72eff58da647c825c1d7af1b27e315649862788e9da34eac9743125ed0431f7ad5789ae657082f0ad9e53df87ccfca08c4d10940a42c9afe8a8eccbd00441658bd3171d3ca88c33909109a2e96a31351e749190810972ce16644c7d9b3e177a42c62588de562a7c5e512aaffe850d2e2c41ecda1a7d1f645bb0b50d645482dcb97a327dd6543294810c4a103ffdb6e29cdc4faa7137903109f2886ccbecfd5ef7729d0c4990bad46e9120e54e7d29e7ac6d830a04322041b820a7b496d82a1392f10882527eb1996d3ef32a8e20a9cd7f66fa76cba06d0449c8dcd88efa62d96418412cb71af951d7b1d31606198b207b6f087bf14aab7d51043145ebcc467f712b2d11247142e9d4b569800c4458276a5e61199e5623625da75d464c28a58c4310ed4fa58b1bcf9853de10a412ffd96b9a53d2f81782dc1d3cc778c958cc9f10ad8751f1f4cb6910e4ca71cc7dc564981a098224a386dd6cf549761a0582a896725be4b243590710249dc4b66d5a7ceba8fc81243fc52bd531995295e207d2a68f2bd99cd94f2e7d2087e5a82acb494de6381f882f1b2b9ee7c2c4de7b2055b46aabb3b01e48293d687b8ce12bcecd0331a555cebb1efd935ef140bea43587af8e8fbbef40caf094b5528a39ef9b7620dae92c134ae550efa90331ad0511264aa9d8d6e840f694ca2b6950c99803697c43bf787ce540be2fdd3128a5e1938a32e240b012de1fa39ce040ba2d1d35a91ca7b5936f209d9ef0cd78a10c37902b466dcaab3d317f65b481f0a574bf9adcc7f1940c36b4b7a759f7edd59e3122cdb289fe90abd2d61a085a54aceee6e03e42861a08273ed858de31a1f40f848c34903c3468c878963e458f0c3410e5bc4f96b2341be78a40c619886f49c5707fc27f451b32cc4096b1cefc2e1d64cbbc2fa30c84d94d53732a7f7e723210e48f1a5949c4290fcf18486e3dd2b3db97b66c648881182c935cbfd39839dd32c240108f2244a7ee6c722f20030c048bdf9ba58486bccccaf882d138195e2006b7ce395a87c89bad0b867d586890c105b20935252daf8acc3dc9d802f93627bd18d3b4409c15e59dabd9eb5d65e1cad53badbad0d952931ea64666101b36195820e9f71caf1bddf060cbb802699368fc29a5da34465d0110d4b821c30a04551b9af1eee4c66d32aad078478f97b3fc0dc840005806150a79abad8a6d0babb4fc13ad3163109654fd24903105826cb86f322f4981bc963fddf3ee6bda5c1488f92d58d01e4b0614c8ffa33bcca5e440c6134851fd4fb442c4fa979c40526a37bd0719b18a9626105452a7477dc518f73c134841bb8eb6b0cd12c841df656b839bc8b85102316dc6747f27b71df62490e36adf32b56c67a89140f4f90ca32d379fd2e91188a3ed3b74b2d00804f1397f17565d1a74452046d1b15c3e6c9aaeca6b208308c4ece557b935c8fc6342808c21106f73909335518dee0b815862fbb72cef57264b10886df19d264a9dffa58140b4d09a72a9320dab2e7171630329e307c4cd566a39aae90362cbf665ca9c6999b30a80a0c617327a400a8b31ffe24f2fb3c20352afe9265362e29f1d908478b7d798eb929c57860e88a59d53ec183bf3543207e424432915f6c3dfa78703f28b6989bcb48d1b618091104fe06e40ea2aef3f59e3f57db5808b77193620c81e8bad23a71a102fac5336f567b57ed105c8a0416eeaee5408cd82ace521d3e9cd968e9105417beefa1dbdeafaaf0b1b35f8021cb1e05f53ae8db3a065db822d8ce2850316c4bcf28bdd25163b9f30b8b000c72bf8d17e2a449ef0aabc2bfe6a93bb1ac42571b482dcc9d23667ef2d38588159f618f3e9bcb3af227549674fd92023b7a982204798ee518d399e8a49053976be7e0b0daa46545041d22985790e3aa8e8d09f826879a2d772e852b2ef3205397acdc7a653b7304aa520e7af0e39eabbf7ae430a722e65b2d237ecba864741cad0ce29685d914dcab31405b9fa52e6684a7f8d9a5010af2ada5fb0c0868282a06e548c8a1736e9763f41fca46d74103b1afa4d9e2026fd61afd25c2c27752748d79f2ec78be10429a7cb17192de9f4d9de044955fcb7f4b2210e4d9034cf55a9cc4b7d7aba61a3466682b4754aa67a6988460d1bc08109526be87d06d79434fd5bb07981a6018e4b103c9a9275e52193eb450a830baf008725483a9ca9a49436008e4a10fd4fc8261396da5bfbe2860ac248376a7cf135bc00a3b0a0460d1b61202a808312e42e1f95fa84ba041c9320954ae2f2897b244176b1586dcde99fb13c1c9120475175c2dac6d32c680b30ca1623e08004313f6edaf6cc19b4f38f20678d9b2f9e68f8209e2388293b5ffed78a1e9e358294623df586af5a0d1a46104f9ebcfc41a637e92e82a06b41c5281a16d3e78a20c5519fa4ad0821d6ea00472274c08108acd34ce4fa5dd07501ce71080e43907637e8b51844852085cf71ce2ac88d1e13020e1c83208e88f970377fb69e710882b49755bfc33ba911f3fa812310a4b6be56fb53cba19a30700082d51a1936e9bb85cae21c38fe40f2d222a664836efa770bb62a2b02871f881b642ce95095f581245bb74f866ddcd905c0c107628ce66d6a4a6957b67b205e6ce9f4eba62ad6c7a10752e54b3acc7c98d3661e50d1c39d08a5fa2b27e161cb1bff112b95a23b70b9840e16bbc352e562c06187743ca9f773396bf33a9043b473d58689830e244b4969f2cd391c7320bfc93f7d212c7220e620b365990ca297837120e74eeea33427f79bef001c7020d97b16b1aff814fdf40672d2243ab2a17603b1946ceecb943203471bc899358e5d7a28252fc6c106c297696ed12ee2bcc31be0580339a63291b7943a8d9f18e05003b1eeb6efd2ab35bae84205cf13e0480341b5f3872a152b58a58b06c2a9a4d3e8346ae9749699e30cacbdfac9143cbb12e030839d4ec6147412e2714b7094a12cba45ceeba724c48a02159cc0868d2eea46c14186549b681115c537a9f88a82630c01e9871cbbca2987ec900ac4cb61a92c9596c9eda6b05a67deef9cf2900241db66d90bcdaef8f0d40b1e51206ccae1495fa886d6a82a1448daeaa3262ba7fcb79f4032b9ee9a72c893414baaea04727a2e13174d3d9e2b16068f2690ccb2e99b9a4e4ac5c504625cbb07cfa62a782c813042a738a273e9e8d6512590fb37ce84bcbe54b10c82471208734977832cdd4ef9a28a04929acc303b51de5914a08571c3c6055c7083060d1b781c817cfdf73a9fb9c2872fad03bd000f2390458432f79cd3b546511681a831b8f5ecc6d238321e4420af5b5fa66ef73b53185f94dcf41802d9ad6d539a8df1f26d908d2dc24814e0020509505b81da0a900c1e422096fadde07f419c5c90471088725742b6675485071048f9a2a1bee567165a0d3c7e40bacaf163bed8415b1e79f8c0bd20d73eb4cb60f0e84172838efdb3070f08c2e5f267b7ceb92e89060d2d78ec806c39b89a0c7e9fc77b1a34c0405d242e7eade0a10392e7fcaf76599faa7345f0c801697ce45a7ccaf14a6d7241183468b8208c7b82070e38754b510f31db117391dddfab182a163c6e404a725b5c84f81cc6743c6c4016ddd1f289e6cb375f5a173c6a404e4a96a9ad58b9296a3c6840f6b417bab4f8a76cfe2c08bf49bbf3ace80aabcb82704a89fb54d51447bf1db120aea894eb5f6a072cc87927be73a664311fef7805a9f2c930d5abe63ba62b48b571329e5d92d3933b5ab167e687addec8decadadb77fee96f0a2ace0a721ef5b1d6f2a5944b3b564114594296109ee4abbcaa583b5477bf53d44e8adccf6f6c8c5f24d0910ab209556e17636ece8bc5860e549054fcad4a11d919af8543c72908572a9ec812055edcd8a286d9175c942d16c023e8300579e49397a7d4b3115b0d1da5206f7a4ca734d9c5d8b983142411f1d2f4b9da3fb32ae81805bb6db3697399e1d96a195eea3b6a988bade98a829ca4c7144579d7e67b1da120474b2ba2f44aa79c565090f6fa64377dde8aa5fe44faffa379e23c2a94b6f87fea0441a94d294ffcffc2893a384192d39df26564ccd62648a34bf586d3905d0fd244622f783613ed686b857cd6db5ba9e8baaf9ab40313a439ed0df37c765c8268be1f83e7fa2d4150373b4ae8584999482b41ecf4498be7e8493dbe0e4a90624e494c89bb946ab4b8848e4990466be8ae6c98590fea908422e372ac2312a42b59c16498ce577a18d00109b2e878c9457e7deefc8f20254db3d7a95365f8aec311e43fed95d365f7dabfdc3582d471ed455bcc8d72cb1d2388a73b5a6cc9d8239b74b708b26eceebec3fb2daeb3b45903ddbc55c21b272dcec5d2288a12f28f95c9bd3dd6fc116820e4490e5cdf3ff54b6fa797787208e32af1c6b173562d735a1c310e45cd9c2b3f67b8e92bd10a4f05d339d9f512ca762e8200439d97c14df13252be51d8320f96a0e162a56822027b9b4b2d9ae8e40904bdd8b69f8b5907b7700829ca6e3a5a6a31d7f20bc6ce668b1e2e708911f48a3c9d25759dbd1079227d327a36b52b4486f071d7c20ca96f66ced9b6c33dfb107e2ea451f19ba2e7bd63bf4401cd5b4f16ae41d7920a75d3cb58f1d1367eac003d97ea49e7aa5bcdf483bee40d298ac548b50c13d7a5bb019a0c30e66ec689b4ca96842a0a30e84cf29558e5bca2a5c9e0ec4609ab66395d63107f29c3c6d29d47ab2cb74c881a4c4a69c119de9f4ca1d7120abda6625b7df9c4df7ea800349cfafe70f0dea780339aac6fced49750371a3a766895be9870bb1a30da4f50add6ca33f29a5845ae86003493c55a48e8f4eb9d0710da4e42e32758615cb14d5400a3a698a1f6df7948a55a0230da4533a2f6466b5030de4becc7a3ac4ba2b453bce40121b7395596fcaf15b153acc4078f16c66f1d237b8a70c244f4af4bfc52b6d99769081ac95f308bfec9b0a1d6320a953da398cf23c99f6287488011b31ea7ea1230c24f3b14e1f4dfb6e0e838160597b298c676e50afe30bc4f6fd4b7ac233078f1748d2fc45abd653fef3bb400ebd9d428d9049cfa6b8820e2e10f793cef849864b42e71d5b20a88c265b3d63ff695f0b24f54e72614fe91a0debd0910592deb69c4fa624d62a8805c2e98e27d4fc1c42c715c89ac32f6a55e7d3f108a1c30ac4d47e19d673abe3dd8e2a10fe54dc3c0bd541dd0e2a90936d976691a18e29103cbee7203ba8c5a0b30e2990e362ac742a994ac68b02b9d2a3976fc62c5ab35020eeed68cd19748a4ddf1388dbaeffa929a85c4274027946dbd673f09a4090492f997e4fed954d269035a5d0315db7c3e86509e4d0c14aef72ccb3684a207a50ae6fbab4a58b195fc4544adf8b1112c8a31d3a73de1c45eb3b02319358668e331a8118a69479ce78d94f488b40d4cc966fcc626f784f047227f3d231c21f02499ed5e8fc09f9513b2190467aa6d867f9ffac0a0251ac52780aea64a898030239754aa975c1fa01c936d435a7d6a8cf241d3a7c40eade18d46c10aa734f5bb059a1a3072499212fb65a1242cbdbc103c2dbfd7ab478c70e88be1e36a7bb2e850e1d90626bb82af575470e4829534c6bc68feb39d88103f268937131c5c94f32a9e30624953c74941d197b36db6103724e65e1d77476eaa0efa801496e73cafa2b425e841d3420c8beaace7a5a5e3a661604297be9bed4ca88d864411a9937fbea7f624134992efcae79fb470b1624213a86f2f4b627bc7c05b19496fa5b6f56d8bc2b887b153f9e29cb2f96b5822043774aab0f7de1152bc8e69e164f95ce5143b40ab226d9e5a97b6346bf5441ea93b30c77f99c9b4c05c9920a29ee1acdfc4fa820c7ff18ea62d5a720e52445bcba3ca620584e7f4a9b79a5209f058b7fb14f5290ae7eb466cc29d99976140417b5bb20d483485d4541be4cedb135eb8c8d150a6225cb7b3a57feb89d838228d22fc3d77c8e1ef513e4b09baf0d9f7982d8d59f45c5ab77665127c8253c433d83e9259b132473cd12bd14dadffe26c85146bebb8c1ca19ea309b2ff68e65e525641e63341b4e817deff799fe68409f2898f539ea4884c994b90c582aab67c7ed52c5a82f896e13d25b5578224844c4973945893969b410952f4f49c6ef59c310952ce157c6fbd930449a8f64afeb7ab5b2a8e04c1c22d275171ff4a21489053fc8df9756fa475f811b50571756a396fa323484a99dc07a5b1e2fbcf68c475a3523ed45cf41783198cd0b4b354d3bbe3e6e2d28286ce7829cd696dc622086b6ae3ae54d2294a9ea108526779f31ca46729a1930862f9e5bc8b1d460441e357fe6b10ce3804496dce29ba7fdeb09a6308826a2af9a653c5d5242f04b94ee587d4d39ff4f88119842069908bbd2c9d42d41f04415b7e0c363f2efe398258446891090459bde46c987b50a2d28020c7e6f7b861ea3f104da5fdbd4ec9fb56f40379c53fbbc77d7d20b5a8d878d6152c6f6af97068ee7588ab66c6c89c851a2f75b2a25263650f04392a86ed96c58b3aea8130967a9e4be376ee280fa4f54c9794c7080f04a5edfe4fc6ff31d3b903f1d7dc43e84991cbd70ee4b061b46230e17eadd681545ae6cb4539830ee4dd1cbdb936d38ca9ba46cf980341fb64cc100f42635fe44056df0a6531d4a9d8e919712098ecc68e4ab539057d061c4a7df17f62c54c0bc38c3790c3064b9a84fb9adb37c30dc4b2f6ce984b847c9f2a98d10662f8b87522f2a1737366b081a03edd9390232bb6638498b106b2e6558cb99ea10692dc788cfbceed79eb196920bddbc698f2a6ebbe9cd268061a101e7350d128e28c331073f447fba7efb0517b19016698c17a8f17fa39576694819445e76eb5532103414f33df2769223d68c740ee7ce2c9bbe6bfbe140329bd679c571299cd6818d2d65213b5182f8b97cd34df7caeb7baf9eee281196020a9942f465d53f273495f98e105a3915fcce802d12a5e8c30b155997510667081d81e844ac2da88f1070453cf953b4234ac320ba42f2cb00100f88078ba15c35ba9790200e801d9e73dcca72b2b193f0e7c00003c20e9ff98c33cc84c5a9d1d1037fbcb95a5bbfba0921000800e889f9ed9e6676e3605e580e0796a195e5b33eb8203b2ae59e7cec9007003d28c96534d99a4264b37006c406c4f2f6a7c4d8c28930aba483750c00d801a10dc5de4ab6c9c6ed46041fa624d0100a00141c5fd62f6d65b84512e905b845150902e08e3f26316a75c65acce59c8cb5aed8b5bfea53ba1d3ad5b84114641c1a92c48e1e316935049f56475147cc48220dac742a511b98005f1c46afaed1842cb85af2099ce9a8a6b2be1b2b9829c84d241c6523335885b41b6a0947f991c1b1d463dc1072b88693f94b929fbcc9ca2093e5641eacf5129e59d5dd8b061baf85005e192895a4f41dd2efd54104e7ff6a4964ac57bd3072a88b9212e6fcef9384556592ad6a661ae36ebd9a683a9780ed99d17376c3480060d2f6ed8781a349c3f4c4136d99542a8ac30aafa4729c8224677b53ec75f0cddb051e38b1b09026c37d21715f8200539a8c7f0b932c4abe94641b4bcd84175f07423962808226fd43585d2b8793f176180a1821b35c0e0a20d8c2eb808430505f80805c1f39265f53c96e4ef4f0c58c10728ca25222ac3f809b266ea3c1a3b8519137f788270fbf15d65646a8f4f2748761b97f2976a33993941ccbd60a673a9f2cbb94d904a772ebf6cda64a5561357566c578eb999c6d9f6a794274667e4253313c40af53b96b4c65c168409e2c651af563a2acfe29720069576eb73898ab1694b9062834a5582143ae959769ebfa64b0962d0e371738ab45839fc9804f1d35a8d8d5cacb8a40f4990e297e92c9bec54bcfd880439563dac3ad75d4f0409921056224cc61462ae3d82f83936ebea5c4a72764790cc6307d329bf8f46904c5688959b9d6c2c3182b8b939de3eabc68766112425ee5193bfde667a8a68ecbb4cf7ce5bacad36437669c80f356a94892009bd99b4c6ef882075704d7f2e9fff22fc380441bf87f4e4e92d3726ae616a8640e5dd6aebaa3b77b7cc5474d48cae0220a8713e0a41ce562273cbaa85999f10e428aafa9abefec2061761941b79617cc1858d0bac99e1c720c8e1f39a8fca7ab6210b827422338a2eb370bd270d1ae8868f409082582febefeda0e10182dc29e810eae3891ff13ffe40feb4412c4fe53aab7cf8819442c6b33acd397b6c3ffa40321d166350f1b37cbe3ef840f834be3f962b3c8e650f6413963f3686fef89d7a20e7ad124ddd9a8490f340da4ba262f64c32668b07f2ade5ed4d31c9f97c07f29895690babdac12ef3b25dd3daae243baea542752056956daeef14e5632de1830e24d5d5a0478ed0f8fae6133ee640b22093b6a0dd663b58a0f02107a2c9f29841bd1c07926ceef4bc25553f35389072ca31535d73a6c1c71b88d1b36a4adb96ed3c3fdc404e2a76ac8ff16bee3f193eda404a1b6f2acaf8ba5eac0220a861e3830d84f1cbb539768e1a468d6c2c200e1f6b20f9a9119fed92e7a65bc3871ac83166e5d8f08eaf21c4050a4a53e0230d24511b6232cc6dffe66820ad9abaa46207cf23376720e6f46ea294fc8feb1b3368f77adf7abbea71bbae62fa61a3087c9481a4a3fac9ff58362a5bcc0719c8fd7d5ae4bc2e87fad0c718c87771415f4f478f966ec1b62c0633ef994c8681a0f12eb4055b8d2eca173752187c60dc50c102c04861b800f90718c8df9d537dcc7f7c61394fca32d89538a50f2f9c5d1eb725aa5465540b95944ef24717ee830b64ad519f46f578bee4ad2025175ed8f8c2055dd8b8404a0de8db0259d3453799b35b55f7a10572af89cf1efb4226f9f9c802f1e3fa784ad95357a858c8ee454bbd3ef365e385ac70f2e535750592e8d81ee4edf39f4a7d58816861dfe4490b8d2905b10a84f1983f9ac5fda002496753464cd4e67efc9802394b658367c9bc5b5c0aa47e4f93e1a6f66ec38f2890da6cdf207c40c1ef8a4badaf4d53b337dbacdfbf98d1c2c713485931e5dd7816eea5fb70023155dc9e4afbe9d2cc3572f0d104f2e67b683ea94de08309c44f7aac64fcf2b10452c6514985b54aa19e7d28812423523ee6dbc409e947124821a631ec7b880452d88eb93726a18f23904b7da8cfd91d91711fc487118817636434ffeeb550fa2802e1a3a54d42bd82ed057d108134976a93da0ecbe16cc4219047a9ff8b66ff8b9d74337c0881b89ad7ac8368eb14fc2090e354f00ba73f20904bfc6c447ed0a449e707c4a43fc4a8b6c907648b73d92eaa427bed4df8e801398bb28ca1b5d28ce68307841bcbf9df3cb3c73d098c923e7640ecbce641d8e7d98b261d10a3e59ced693477743007c4f1a47a3ef755ce59e280202ce6ed142c87f49c7ddc80e4493e2ea87c2a9df83e6c404c79ad9ba727f45703848f1a90e4c7ab524a2b1fca78e9d42cc879412cbb3d6d4a3bc9822ce3a3e1494edd6d8ec51d3bae6ba1592f96b3b2e5967ecead4fe5010bf2e64b4a8ba7dcaca2f30a62f06c7bd245b6ece9b8826c3a322ec554f238762b3e153f693ab19615a4f49c2c97f47af990b6c72a0842e624adfa2c55905268d114cf522ac86aa9839e30eff797514198bf35cf301b3f82c729c839ed52a48fe5265f4d41724b22d2b42efb814729ee6c9d512e4ca5418314a494d33467d257d38b68f018053145550cd5d271635814e4f79c2b8b9d32355b28884986c69b9a8fe72b2a2848e251b635555dbd4a1e9f2008615b3255e62af5414f10b3cdf529bd974e908379d0797082e89b773e977eb4dc391e9b20dc6b97321da33a2ead9a2046d34d1d1d13fae3d39a09b2c79977cdf09dfd6205405083860726082a2dab676b550a16ede235021e9720e8d341e4786af468096c74819620579ab8a4b3a59f52096c4c202b5158dc65baebeb55d217365a12a2e1624e2528818d09a0c0460568d028818d2ef0461828f0a004313beda75063a383324d82f4ebae215acd4b992709f2e8d1bfa4a189044163901b4726a169aa820441c559d48fc12a647e1f418edeb9ec547a53cbd0116eb6c9cbcc5c88b6f9afe6e57a2835825c9df35f999cc55c1f4690b3b4651c0a1e8b20c6aeff7e3e53ca72c6081e8a2056ee4d9fb76f2a782482b0a7b2e599479d92d5161e882068d991e9b619c3075d0d8f431066736fac101a3f4390b35f84e88b164bc6b3bd42d8a5193aef25f2be9fbf2dd8bce0a20b570f4210644ee5f895bdd9900f8294445d45d5950a0b9920d2bfa3a21e8120db79781e9d4425b91d8cb2c5056a980b3c00418ea533f7f927fd81204a54b6ab91d941b657f0f00339b8db6d8c3dcdfa238f3e90b78457da0d3ff5d0e103f1446b669a7832d7d11e082ab3e7b42936779c8d1ec86165497f5e6cbaba1e7920a77abc8c4fcb5d3e1e082b3a4dcc6c1a2d29425cc3ee40daf4a77d1a63dbde970e185c78916807b2a78fa5fa92a7b4b8d08da20207745168e051076232f5a22dd8d250da028cb2c5172a683a90539a974fa74255b8c64e20010ab0c0041cb0a7c65a033ce6407cb7ec3997e51478c88118c3eb45cfdf6937db5c008f38907b37c64dba4173a3080e44591fcf17aa2cc3783cde4092d77eaded1f35658b871b08f29647559239f20c3cda40be1c22f49a6d10a7540f3690d347fe8513b37529b60682a5b3d8a333c860be76123cd4408c6eb371371647bd608051ba58802bc1230d64b7f86ef14ecb8ab6c07041b9000d1a35ac3dd04090a357234b697db4cc19887ad69e369994f13c9a81a8a35a2fab9781144295cadfcdc972f83cc840ce5aa146e7dc630ce451f2622ca1f9bca32e063bdf6a3edcba56334db43d6ba5d1698f309082b6b38ca2f60003694e5b06b558f9217a8f2f1063fb45477f73af2e797881a44d65f26049edd10562bc9a878e63a21a2f48f0e00231a998528c96a90e9db37d008f2d104c2c75acd0ceb00a9a0b6e64a0fb011e5a20dedbc6b3f0ca230b848b97f309f7ec5d158405928e71a47c7b3e2544e67105629cbad2af622a2561b10249dd99c70f532796d22a908c20a8f44e261261281087c3c160300c0c05475817a31310206840140ac582c180449aea0114000455321e4034241a1c20121a14160905e370300c0a06038130180c0a8403625058202c4bb54cfed19d1b62a84c0a467df0fea6bf9fcc38d33292ef26dbbb553819b211410703ee185861a40191c2c6861dd55d7b9acb32ac4c3c28e90ff8b52279b74e0fa8ccab0dd1a0263576cacd33ba3624f4e27259238d1de25a7719b418545c54e70448f1a246dacdcaa4d6ad32af52abf50ac22dcfae77719fdfa07175fd143087d9ca3b6bc5306a790a4af449765d8a15428010196750774184758a7cc57b898e8826bd2a05df344ded016b9946fe6035c674acead59cbe3efad583aa9b4942a35b06c490d072b9e94a1d8b0b12c96c2da7a8dc891ea1dae88088ecffa5b7e71dc89e4142e36424a8f548440fd1f7f8980b12310bf0b69940e96503fd175e40d6fd5223beaa987bdba4e63184400a5fba05e11c630a2c9a8102dbce33786906ded6d692105bb7b242a810054e60455edef32094aa1aee20820bf9950de45260600bcce3cf81c34af0e7daf760b62beed8e2cbbd57e41f9526ea16615f8d480f708f9caf5ce7e4c69de6ef1c1ff26634624d1ce4b8cf3e5c5e14855afa72ceaf4444154077c59481e16085c06fe599a12c2cb30065e53b87f15fcd4c358a6de1e2040e7d189bd016e9f5b3e48591eb9aaf61b8c28f06eae210aa05e709db67dd66dd52586c3df04cf862c65b0587566093c0d670f61250b8900cb83e91bd5c37b1201c4e26990c8f6d936e80cc95359eb5a29ebe8087920250038a5e19a67ef955c5127c1f5cc4bb4bb0e3756d16a1c9654ac0b525823ababea60e5d98608a70ecc95c62394a22c9dd843470f5fae4cb0b41e2edbb0022236a370d3ca9fbb4c57b2b24a0f34292704e0b1ebd7befdcee1a31f4e670b63351708756803b2b11d11b23ad9e05b825df34028fe438dd4cf1c6dba8dfb9f017c8c76fa82d9656483e29bccf6bbc36e1005e090f5d012fdb0edcfe151a8a5ded7812d407303635448150e9d67c9efb7f6d155f29b523d291c2d549cafa79fb2624bc9d88e5188ae4aeb221a0839cf1d576aecbfd4d1623263e7fbb2eea4fdf2cbbe99ad02cd765c2aabfab8c3c93e60ff85fcdc7f7c1b6c6f1301be78bf24c9c67a5da48b165529e59dacb57f823e59353e5663f6b8f14f0e551568f044bc6a3d7b6667650836ffbce23d51a0c4df6befaee5ca24c56e2db66301bd921e84e1218c41094c77ee9026fddebd98dce6627460c2109ed435794706b7a8524e27373b99a3416d7605e1a9ad4e2b879ae517b5c6b8b54b6a72aa48bfa757691bcbf3ae5aa4f2be440d84cf6a81a8d992b0126c5cca24dbd4e35730631502166c0df36a407446d8cef376f87589ab5ab94709e594bf1c987c1a9fc247c3c42df6e88d3dbec26e228ce97ead81a1f4630f8aaaa8c51efe6ce88994e5cdf43cc610be816755bb9359d740d6e41ed33aa69da4ba4c9611b41fdb07e44d315a62c5df04921ace5b3fb08990b95c5d1321c674576309c6d74af1bc41362d68d823b91d237bec3b491e1622fb19a9b920070207022c8b11000b508150a86959395cc89afa999b5ce3fd62b5dc3090b877986def9df4708948458ba7bb0dc88b6c89300bd2fe81f79b3a7f721f7099b142b4e0c6df0317d976ae58a4e91af35f08826a6715ee9d30660a80a72a519b50187df55a7221ddef1751c9b61874e30b4e69e42b2055744a30545a269e6190acccd7a1e303f5959ff714a1839eb23dcb21dd1008d05b61dd32e0be463da2f3c0e7a4e9645133df7ec5f285f158e6df4ad53f46422a32fa80e8899d4b337d07fd47549436b055208f4a5ff3bb181f4cfacac3e13c57908a3d54a72b5ce7674ece79c6bc0d4b6797cbdeb49aa5562b0d582dd6509f4b1222179ea064a0b11ff5f544fccb820002962b03bb02e7b05a93bcb1eac30b652ef3b6c22d616adf0734ce2c7fc6f661440b642cd85419a88be44a56d78b7c2546c139a87b5c22425f3c214068597dcc0966eb17ef0bf5a452c9207df6055d413acd0c88a7569033cde01c7d5e04db06508b3081d9014034f778ad42f8b3cb2a342c4d1b16224655486b519a75822c1a408b29542a54291b26d633aeb9b52885a866dbceeaa16d44d1b9f04d80ae0fa692337658dbb8c00c1b2359d5b9b8baeedf649a2b58810a1cbe72d62d40d9abdd74f75ec2e31f254130e13a65765f6280b59c34152614735b19287cb0b652052212c83a20e551b7a387b40c4cbe380037313bcbfbb384db2dc35c66a6826838d1ea95adc3dbc02e5e75c4803616a19ddd9b0d3657dd9a1395dc78ca545b8e02a151a07e776ca1f627290fff00180a6d0abaa9523b416ddd550fe88c597c3c2173814926e6c17530f49c9cbb9dd578cbc8669e299d2e034c2a34a85fb7ba7d0b8fe17e6d64d20ebde62cf1c13b67c40cc45ec2c28c07c7e76f43c6b7c4e808db298eb92bab17b6296c5520e6a3873ec58a94dc1d61b384cd591976bffc50713de1fc5aa5950d36a966b91c46976c4e184609a1cb07a8b637a44bd17a78b94a783002f4d64d155e8e874a2279682b206ad524026175e65539651ec2d99d8257b1a840d9a2c3ecb89d8d51cbc557214ef9089bc16aa5d26b836394ef81174c183c81a42a638909f94cc71a804acb03c93fc13ce77a787c606c516e6b82238d41003312a00c563e0c80740df95df74765740958805d9277d05a0ceace2d296738500ceadadb33f28ce29521852bf552a83351c65d9f087260909d295ec3a12bcc2f70d4306a4756154a9f4d05690f890501612722009f232bb4030784486f06065aae9711389f71ec13a835f169648641c5a3d706e513829882afc1c5312ff40c165ef347d60b1ddc3fce24829d5e59bbaf646c55844310734fa896fde177af7faf39144652f43385b228d4055fa3b1d9cec82f9792b2f7ce7ff8620e18c5d724784b14779685e7ca0a850a62ad7a95c7c27a463eb3ff2885e20e08ec435a078640b1c5abf4d65ff1a71489881ba2e18eed2ca3cb49a3b7057f1507d47ebb371383976cddc9677c980d6ea0ff3bd3d962e3d32c0209028ab2cd0b076224ef9af612522d3adaee61a318bbf54741fa24af4bed58cd5fc2f455b23c61b1cfa7d6c51508ad9c9477af2f8c1c712edccc7b0e0529e10766fc2518105cf1d368794beff73ce69229f21f5c18b805cda80bfdeb234fe03d7d171cd939fe359f74503a1b035c5b0930de06d113eb8a92fa81a91cfef3de6a14ded29c113e8df7c7b0b67d17a1fee7943b72346cd564aebea4dd939be23a82293a777148bbaff58a4e9af42d699993c90509cb156a4330d284a695f22e8a13bc639a6a6ffe8d98141c9d145a28c5d934e03eca06538a961f2b000c5a128cd17049b9b5c02c704630db13a663dabc5d7ed7ee01e8afbe2f2d1c36a861f8834d6d431bbb91ae4408a487390910823c35267123a4671186904f1cf28d26652a1ee162ea12d73102701fa3e040a6fa126bfa9a08159888c227fb4e92e5af1d7b9094be9caef8e13528f26863435bd8554069e205d94cfaea48d67ab4fa2d227c4c1e5266072ed2eab2aa1736ac0972811a58be2812e246520dcc408967e4e2fb9bf4a75bd1362bc07bd372f603560dd03c6042ae365ae9c0828a38bf6a69ea302146b036408eda93d90d6eec8fc5e87d152b97b3b9eed194dc2f944dcf75e3d81b3c3ec313957136b1724adc302196113432e498fe1966dac3180450db49755548550789bad3049e0b9a89adef3557a3054a67d6fb5850cb27941f6564713b3a6c6c13478bf94a4cafb8e388ef18c98a60b000cb419d5e06c55be3996518a595a261ebcfda070bca9a6f63a7197a49a6aeb54ec1a615296dbfe719237e8bc59a88955f020474c2385f8654008c9e29974a76f79358641ba68c6c1afbc29d3106f283252e36836483b1a42154098263b9a4afd1fe26a2e8407eca26d78f34fc4c10b68aabfa305653b96f8b4612d5088390a0f465d13e30f6a946d5f8b9deaf32109ccd87964c6514b1e7c6c436f51acdc4add694897ca9fb0c18b54132cf16053d3e9739f9b60b2a9e3a9594c4ee37a0f6d79856b88dce8ba84a12fc09b3f873d5d4a4fb06070b89d8dde7a5db37fe44ed635bbdd5266fbbaf6b92c7dc9de470fc0400c6365478c18f69048c6898446a684fe30fdd895ed70b74eba30740b89435e7153c2c90565e22091c0f5dc425a00f659f79d250418889a8f886c1192ca1d3faec95743ae0cf5df6a682419b5b432ef514adcb7a4d5ef3451b438c1024dd578eb8b5f1c8e0408372831a04bc544ce0f56b3ecd4eeba7bc875249f1efddbe85aaeb4c98554a3a0b8958a2f7ce923133ed315fde15d7c8fbac88fb29f97731355af278810797f91d8a3c8395da4fa787152778ddb7984e424be6405f9bd32ec01d217c42a44a3fabff7b304856dc56c54c566bfe7b510735bf6b6b4e8d508657e6165267b752c791cdbcfba32cd0b806b319fcbb5909dd3c290b0292aa0ec1d7600151e06b0482f7d8703a69efc016fb65299917bc0edf83abc35e0ade72025d1bcedb7db3e0f3cb65b8fd0910ea2a558a044aef1ddad67f5e20fe72e82d2c45366294bf4f13159f4c0f10e7ed2c1992c42228ec048eb3d3f55cd1265ba9dcb568470be568acf6b0b9a469b9e87b2d68e925f0585b8820adf40416da2c9cc1d659aa031fb7281382cf37869de729cc0f7311253e2947e51a8e42c1a787291da481948d4e211499c147ccb1e18439d7728d44a544943ba3ee609cc599e619fa9836f277e59f84615f72ba44a64ec55ad0f3b0640c8242bc09cc480bf0bbc9c786e376f32f89ac8680afe72dda231181270a3c4b2b04e7e3fdc368d014ca464736541cec2d837702ffa304628a09baf01661d1cb15b05592e87b78f6e4f0ed3d507fd49c931d7b146eda35be7a70a2f3672de3c05238dc6fb1507284765ba124ca8032683cfa7441d5764bdc74bb33de3b6a9ece4d52a3d809069e862fa5f1ae16f7be0427ed226fb6548625fca54ce19064ca0554aa29959ce9839ce6a55047be583e2fffe52003d54882fc83d8aa83567f1df65971fd0846c2fa70421af01b0d1e2cf7a4487339e783f27d63c420e011833cb8482a80e65d91c5dba05213946b96ed68f02fa7135255bef80134e06f8fb0bea8e140aacc8689ad5df85f29b94f2e5f46347c9a4a57aa61db270139ec4df5cd0e9c964cfd763e49606fe4cc324bb623c33c0264717958930402c2adaf4b7d06413e71f4c64f4de29bf928815ad337b773b5c656d1aa912cf73f84afa91145267ab5f068ff995f52b1f81e5c1b2c088c65b33316a4981666088b0c3f1baf0b869f4b4fe6db76d0d612c090e2184f22d42da52b309705d44a92584a71316c38e91f7d05a03a7ffdd8b2ff6abe97630e4592dbfde9ad532b4f0b512cbd8795e73cb9df0903b45f258c1392397384bd00f9fde3467494bd4bdc02ec9dfd3d131b8cf6ff1ac7290b3e57d976e48cda34e7481e18305a4dd6e2056f242f492e29578f6ba0e3324d294d779af155ee2bda05f4a402e0df95e4adbebc9cc4dc009e7c5e79537f59a2893d2f1e985ebe5d52b0f791d999764796baf63521a068031a78e046ca935cfa0678363a8f7b4682c6f00c7e157149a3a9e87a51b82343a2378c79d4edc64b33af7e9e9c353e753c153f927554ff0509b20aa6c2fae02926c283428f75070a0f6a07484e28732085502957a440149f0e148f850c06d107101f3514061117b0ca0a1e2d82b368e8c50b3a0a2a16840ed41291450a876042b0c30141da2b249e5438581328342bfa85729c57e14700342974d83023ed7136f8145595e3c001336077d3d83476f98ee7d06eff8236b636d428ea809ca60750b27338145a584271c2158bbeaa9ec12f8cd63c58418f513a837d10fd2e1c1ea56e36a8fcbf1d85ded80009aa167a48f2412a6931dfa717f4df0ee8e7befef7fa5511c8736fcb70dafbb1cda345fb855ebc62b3bde4904ef9b0901df9af2b4f84ccfa430a7101394b8c7ab3b6e3d711a55a843cbebe5e982210938cad0d823e930ecdda852d559c6598db449cc8ff6492275b192cea34e24c37942ee52f3ab28246e8ff43999d17e7d9f8e3e4dfa83fc0270d5e479fe939f25d396edd241124712380fe02aed2506432189034cac76b998b48d651f71ec50a400335f058b976c16fd51ea2484cf2e3a5c68ec123840508af02b163ef13265b2834002b3c586a37951c67465e976d0d525cdd466de3032909b74d64f4a00adc3ec24bc7a73609384ecfbfe67110ce0fadb2dcaa59492083e38bcde8417b3f2c98a3fc573b1f2b192b2251ce23fa2eff728e91f9783ce55b0c229bbefce471dba4a8a81d02a0a21b4b19d3211fc4e4e416aa0f66b115a15dd4344381002c6e30441632e06edd6a6b36449310b8cf921c3d26f94208cd79bb028baf6b5bf33ed32b99ecac6a0337598f021af7b92600b32e71e67e09ee5da7ebba3f881396f944afcbaeb90fcccd0dac035031ce96bd27f1bdbb662e036bb020cd821f67a95b5712c798e2a4fde25b45c51dc2eefe7a2b7372ddee6ec1800be29f10e10e2ef42c4daee5e0f7569992b481cd6d7857f0f195dd0100cb07d4acd43be078dcb085beba19b518af12848836792f2083aea6c604bb55816b2288500bdbbee6d8e4f3154df342631954d0d52523c724cc8bfe2ce90405614e34d4fc4129f10e0f1b60e39a276a5b9d93318be6256d8ba59f606512a66620c46bb3d07c184885560b1870619158f1ddf5dd3bc4c704299fffb01fe432bbf66bf29812f44098b606cf83a837a021f7bc57586a0947836558ad31d053ce11010b8b1df9863a9d71b421a0721d0c6b28eeec802d695896e0275118b268d6728c9dd24c114e9cb97e66cb37e51982bd809b89bc6128afc1fee486c7381ad10a533959ebc38ff68047ccdfd2b4a0026e10f87433b08cd063f9533770ffa71a03c3727439eceb77cc873aef708e12b74dc9f9256768daee3eea532166f7999893124bae8e2018a23515cdf0c8ee70c3bac8423ea3a4e627c1e98361ea1ccf14ec24156e152a99a9cb6044e6c7e5cab5baddd43724b99182901add5dc32e3225bae3d1b50eec335343b20271743c6a4f74dab7807f19c0c5dbd8b84e1c826801e8b3d9cba68e279259692ca65678e0be5a5b288f92112c6ea52fb30a407b6b27e8be49edc8ff167f8d5874127111fcc693b654b4c9122bb163da3c1c1b7eff469d165607a19a51770336574403e5529bbd51185766a0686113d9b94f70dae889e3675f5e4a53f400bd044d09feb236697ba3b50de83fd07944e9fe0f45f81787dbaf7ad98f42c7f0f5b25eae39fdcbb8e5a463ef16b6ef845694955f4f81d4110be33201bf991611464f05fd7298758435264ac1999427bece739c5e60937dd09ce3bff2c39d3f8064ef0a1391edfc65c374cce0892878b5728a1b40a35ea96eab92c71fef384701707de1f8fe1daa073acb8586028d20bc023d88b967f6cb19e9d3fcd1ec59f30163a57815f62c3d145103e007f44fd8b35a79b9911b9789b248cf0af8a0be532e6d16b59f689cb8823b1888ea69c756d6148a9da3050efa8151c1ade3e3ce8dc6b3f5f8d0b4b784e4b825474fcf2a83b4c4f1da163e2a7787152659f83d1c0195ef330ba90195082a811e0cf44ef11d697a5aff3eb64504006ff558d43a71df5334bbf26e2fb78c2d914afaabcafc70b98063666e6f92396ced8b26ac810a4ef04286f66cffcd52b5d36364ad722b0a3f86ba06254a2ef78c65d2da9fbbe7dcd1a0105eb4ec8a7a84d498e9f461051874a12aa485001e38c266bb0d776b5f0d69ff3613a34a68e228434dcb1384de875c03b4a2ea4c64121db44b7315bc04d9a5641d7dcb0f470583c9c764331165d26e57b161dba8c205b18412f5738e4467ddcbba28112769247b4cd090548c6b57c9af1016846870f3183545dce9ad356842d96b5a9bc466970289183872673186fb9bf76518e24a9663ae2d2ee2155719e104e854f6b02a77b2c00eb583126163b36b324bc45bfd699db997df6f36bebb41f74384ea89800f0c368b2ed9a7ebfa0d899a6ed46f52b974fda1c2f39e258b448b6b5ac9964bcf9e482cbc4d7e52a699790e3d3daa68252dbcca6409b0c4b8953ecc55588fd97c06b19dfc6483c50f93e63e28f497976cb99d119043c1dc4d0e4f748c6c146219093e57da7a33348ab30fc34c2a01de094409a236c1038325b0a20c4800817c4287357a4c8444feee599dee065bc927a0842b604a1737988371181e43a74ddc36568c33dda21c0ba1fb904a6e323bd935ff5a9715b9ac027eb19279b793735fbca63db3515e91f0c5da96c63156e0471da586f689834475530177f33eeb5d88df7727c082770c5fd9d78f786efa35c1dd67430413a07ba02e3930655427bd652120bbada489841fa3534250c9c3d9fd4b638c60ce135152230e114d41b0b57cd9644a486fbe9310758cc924799424fd34012432d9623abe1cf394463d15a35dd778763559d864e8aeb9afe6276c24ec0c432052a08e6298864c9e03aca90c30725ab366d3aa2c9e26d56eff8f3fe6b4da8b9cc244e812cbb53524b74f06bd3085871c542048ad86935c629998bff505835b4ae0771420894915b826daa0f650c2a16a2643259e332da2761c3a36538035117458fc2922686782f1b1cce33749874effac2b6622219eec3d3d011e88034133ea2efa6967481e1b593c5fc6e22caa979c244d5da9fd9f79d5419fa95c3330b0d48bef99bdc8f345da45274dd864119eb09ad9a95ed137f71d73d1830966999204500d49d330dc417f2d31cdcba74ee2255ca6dc5fe239909c3c560c7006a45c28f29d3fde7fa459d1674b174d8f6d5be24fc8f568493d344ececf2482bcf1a7482aad4a2c4e96c8d99e512f7c71d12dda8def740c8c30c796dce36c975370fd402f1eed7d4fed33ef1601fd77c7ec1cc9afd49f0a7e3a45581caf9ee6b2eef21a222452499739c4d62bec1b7fed3f5a7bc578165c9f9557abba70a88020b8830b6a921352d938f3b419c19b539aa3f605f02d63a475530b1f737570160fc9d4546f536d9c0bfb590bf61b79103a444c96318f1ab34e6d221a9552f392b41d68a0c2620835c78d3c280faecbbd0a00743bf26a59523e0011465fc7d4f4709d12b5166ce35a93e88fdfe0a11570241488e2d49ed03e3f5ebb6131536583e8838a33cb5d82b028045b09d604ff7e0139f98d70977ecb43d481458b75f9fc7b07b1e7a22d660b76d8bf1efa895c62d851e9c933ff9a3907c31877719176886dd7ba8ed88519261cf18330608608d788bceebea10a4375db14efcf60b251fb3713a42aa70dbb1c74dc847da28a778a1d160072cdbea4d4d6a44578783026c344f6b4ab564c9d87853504e6ac67ad091190e473107f302bd32493df8f04824f756de98ec3874df654c7e19d97acce0375aa8784d9665c23f69dc18542af8f9205d8829048dcf9e11e17b1e710c48a44b8d914cdfcf75f92b11b61252bfa9e0dbf6e6a43af766f18eadb3bee86a7761bd0aa0865c77ceee194e79d0458f25c0ec58b48a671323fd5560babe3b60516509d1a0efb98b718a8197251f5d50d588c1774da2398a9f7bdc1b2e5fba12a5b256072fd177043f8ced28fe3a39d0f40be4790e3fa3f2bd98ca1da4e409304d22d4830e6acf2b8c27e6f7534cee7995283c9efd3cd1e4ba03c555bae61acc947c4fe8bfc2a6956462f8166ee20a0bc077a97d6b49aafbb7628546344ecc86bebf9945ae56618415ef72afe43623b70101406a083bfd3ef50528cbd7a6e093e3d58f40b4fac0e229be3c09bac2a2ab5d6a03cb12341f6518cb0b39675d242355ced4b68390d88bbd17353ebeaf24b51de220c2d9c8bd1cf3a0c2f96206aebb0642cd9a0051cdfda0c4a1123e40637106e9c0eb18eb1f29880655a23de55c062550305992bf1b46e36ef60eab3fa694361d63a8ca2dd60bb8d3f988605d58d4a02368307ff52247d191bfdf19374d5cf19180aa66ba0011f901528cb72b386df207185b20e795aa0248838e2162f4549972a62008314027eb0fff37af7db3530285d8adb1191c91281f9fa6fef3447ed47397e333d49cfd56fdc6b1d6f5dc2f7414893d5ab69ef265ee0acb295880059fdc7f5441b7f3f4c90ce0377165122026695886248951d1ce4599ba01be8ad375cfe48c3240c7ffd11e5c6160e45c52a6aa4c1007b7a8673ae1615360073f33b87a75d3a4ead7454d75c39e03f529e731a764ef218ede0d0bd70900dcf9d678dcc3d90cd71aa910a8c35ef0ac32ef4ad8315ed0d8d37d7d7d6d30af28bf3857c1a1e51fae5164b547474d775cbe660a48159a5e954ddb48cb472328ea1281d72f52b78f6561849f0bbb26d9a56064d2ad7b31a7e22416382e008e254d1c636596162f53e2200bc66ccfbe5219532703493ca37d68e3ddeb44b195a122ad520f387cb2226572cf1fd3bdb5a92121b6ec6c6b431d0ed3937e76229a7a6496e7b0521cd68e8c1dd44e70e49aa14a50fb308aa4200246693f63b8d0e829793c2d96e2509173d1c340d300ce9da1a966bd692f5d9f9a94c3dc6fb6332414e4cf1cc183d5f845fa32b9368b1bfe3f62aa0a81e9917a16b6c9a64892320ea4f7f4a9572ac4f04c0a6fffb8c0170fefd0085a8ad303c5fee113e01469cc91f4f8cee08c8a04441222848bc0f13b34da560f36338cfc4e7da0ab4854b12e864c8496d752bd7f7eaaf7b09f053f3f0ce19eafed59b9c0930f233c46d7b126af25019a0fa147a3d1c7f30d8f079225454ba097fe36ce14c46d403bb521bb07260834ae962571999a246f16ff704b6f26ff7a21129715ef7fb02f0695c9b9b237f889982ff1acc15922f24f095764919178004065893147b0df90b8a988ce23bc275e28b725ffa69069c3296c991c5ffc0ff2bf6dd0f7d87880c2ea06e77885c1fb543cac0dcedd28a6bbb38c0d3a8738bfe7d08bc99d7017a8961dcaca1d6c671d7e5f8fe9c82d501d4238b32323b65b328f79984ff92c82ece863b458b4f2db5062ea1c2d50855698543189ad1115400e785a19a7c833b9514e0de439801ab322d4aac772434c2e27e0ae83e40b279a187e3f12e0c5a106cf8df3a4be0e4cd25fca95e1d721d8b3b9868f8c1e58117c681b7967a94e72009711464c6be3b52eb8413374a30132faaf614f5af2520042bb4a21da8aa13a0d911ac7e702ad05d5a5d5c9933ae10efc11177eb8dc0cceee9dfc378c999f67dc8efece229278e571a2377af1da658ff904a19edf1c8fe7ec72986b6ac5986a461be5a94e50d06fcaed85f36576f93bf656c180eb46f97557bab42564ff356aae4c032e6df25f2046fd77431e5a4d33f81157c25dcd3a87ac393a213647aa04664bd3693b5f51a0b2e5b58d3d6e79588ad8793b493522e592bb91444dceba8daaf436d116b4981a5849757d61ad170a2f8ea0565d8feafa16e1bbd8bc2175cbbaab829745778eae1ced72e4f5d12dfa6e795e75eec2a77722af5ae892b7dfba81313750ffaef0522154980fab3fd27d638f7c56ed03eac9af9eaa2c87adf42f72062e1ce29d578b420689687c6993aaf1a22816ed1c1df7c789fbea23ffaf737b0070424a0a8d845f9b32ce4f38b6ff9c46837783c537d8ecca3f6cce7acc365df454f4415025904050ed60d3419e6447733aadde60336b3ca150d41decc3a57a484a1a501ae430f0e2011f9b2905bdd5a1a6be327efd53fe9a204213832a839c06de0d383f387c82ca216c4e53c37f4f326678cdbcfbdd15b260ac9650346271636fee5c602e2efa9392f8fedd25a33741d31da4d4c0e89b4bf20e3df15902bf6704c841dd99dbfba040fd7cf9594fc8dd44e8971a145495cd62316e977f93db07f40171eaee50db1dceb34a4b8771dbdeb59a775c4125477757aefe16d2973508b5d3067c8fa62bc80dacbacf4e1d9aeef948caba80ed72739014ae49402c6f9aea9b4c5a003f0dc36e89a6a355117a0f10456ffaef548914444d731468d49bf7fb46d01382f6cb8f69fb7a42f975ff535a99e8c185771471c29a5102095ea9e4a56a3068100712443d266f9f4c5e9857793b8d80afa516f8fe6d0750ef7ca6f25ac5d681d2e30aca4f01781d47ecdae8fb9650e42609765faa48fd5dd54178c2bc60ae3b730956811deac98bf7fbc31c5bee8dda5ab8c3c023486ef54237feba6af616fbebca61912480ee31325808e0b22986c5c1fc8b62530ff36e76622556cf2b87ed2a8956066b4b13bc8a4a42b26a76bf1aefefe060d3348f3e995c2b7699646c285050b5c09f092471c647c9bdf950f6e06d5f69de1286aa2c97f49b2ead560e3e264d832703e28fafcb588d7f5105b54d846b6df828bb77b146e22ab91c2f454e91617c8d282136c71696a86536977e8cd6449bed9f12d379dbfcd71d68784e5536497856fe2cf187225ecd111fbd8f42110519432d867376ec77b8e8c5868c5d1b3c38a9505a1cfb8daf0624538f324f59e9a796177b2e13933c0948bcd3350601a7f2a9c753e49e10240def51bfe8be270e30396dd2795b30abb2a4a0a4da93aeeb61fe9e403ad1ae08487c3f1bad7e160e924731d5a1251a1a54909e31a52669ec52261d58ade8378c4cd24702e57cc5e1c13bd5d2a02118ec8cad2cff3a9fbf33cdf80bb0c8096574026a8a087411b6d193542a141ba86756a86a53d9864747a2089464a8c1a180657583cad26e1047d205f5042a165424541d283d28b0853ab592028a15940c547ea80e50e253a82c4992f32e42493aaabe141e6afca39449a187720f15132a07ca3b14175147a55422513a46d01a2950d9020063f571022e7bc46e0b3340b0a6d0013c0c3c0c3c0c3c0c5ce3f9d6d7dd7ec016a494a9e86f6450b0864b29a594524a0375c423443b9407b2bf33ce9712650b1e0b230b95f4a2eca7c2b5c359f5dcbc28cef6778a39f518de5d14a46ad0baea6df2a48b621ef19f47cb5c94fec4133a745c946c4e6ffc2a53d2adbc45b14a9224bbdadc24836c51ce8c212ccd3f335f8b626bf2cd0ca7ec425a144be4f8072d994541e72be1c1775914ec9385b816ddef742c4abd252e4ec54d4e0c8b82e8669712c657143654a57d36ef98175d51d2e2d1f4b47cced9c556943bf575758587dc8aac28b6d8c7bd1157511ab552b6262679fb5015451b0f77ad6dd7fea4a2a45f6d724cb2cbfb4745e1c48cfa0c1f93f79fa2a0465ac9a899a35d6f8a62897dd2c7993c329b94a26ca52adb52438af29b360fd735794cbf5194648e531a53439a509f280ab252945ddea128083d31b78686d22883a224e9cedff4794a50dafb4441c7f7e8413c8a88f73c51321532b629b3dee05e27cad1748df4fd24e75a8f13258f194a8eaa5e2793b789d22793b5649de427c74e13e5369d934a5d49f27732511631755e1fa6367f4c946d4fec6729b94449fe6456728fecca249628f79a242757b37b8fa944d1434df3b3a45ac650a2b0a3bad9249d7c64338952f97f5a0d5a59ae9144c172fccf243d12a51599837f8c9dd2c39028889811df49eeefdc3ea2ec39cf44dfefeb8e3aa2641f77ff46065d3e36a2b076776abe5445c488e2e8c59abca23bf7224a21a36b9fcedbb3a6886234efb0b13f3a9eb2441446883b491e21a2fa2856b2c6d121cabaf9e73e76ce07bd214a6d427665b444d17f214a339ee63e6cfe207f4214347a4eba619324e41f44d99498ceee9a3e3e4610c5207ff3c4c651934d204a726535e9d200a29cdec4242f4b3c96fa0f454b9373c6cdc927b71f8a1bb7f7954916add93e1483a578e6b4ff39a37c288e7c58486d31493af7501a397973507b366eeaa134da842ca124a53d8f79289592bb32b9c998877828db497ab397dca170722e41bd9c18e7333b94df47757352958c3a1444e8b052935a9a2d24830ec5984937e928511d384c0ed4c3868e1d367e201cf4d8910eed7c0ee51c5366af9f8e1fa6eda04b861c4a5263105526ce6a8ca6ca8843b1c368ce41c6577bd854e150b8f913b26933fe7394f186a2e7983229d93f0b4690b603ec81c3860d1e3ed2f620c30da534d14a12b51b374b95d186e2f727d14c3059ff4cd850123cc851ea4d29a1645fc61a8a1f26d7693afb77ac65a8a19894feab1235491eaa83838c34146fb424197d4d27b19740061aca9d3b7e9f9ff40c2579396a629c13119e3743d1329bb612b38ab835ad0cc5f47d73cd1c74d8f070f4f89164282951ac64f59b9d4c8da16061e93b9b46796be6430c25b9d21837e9646b271e86b2d59ad4b2717307cb80a1685f32870cf512c499be50b092d1322b79a19c93d8cea1835277e5e942f13c2be7a4b8db53ab0d6470a1f8bd3ba2a74a3b18c8d84282b0568d5f8f1f3c64684197ad6bd92cf9bc54fff3c411a9c0045928ec89d932263c90818562d6d518f479f63611f2c831021f74c0870fa30217d4a851430c32ae50ceea1ea95b62e7e7cd23906185e27c9fa61f9bd1d4fa0db6ae42b93b9abb093141cc7837d8568f0ac50f592a5b42ba9554bac1567c02195328d87eb6d3d953261bad144aba47e4f3a937d8d65820230ae51c337bc6a7136a4e3c32a050b4d01b637bec923be61b6c692a90f184620cfdeb5f4a0c5a42c3e602194e2899742235e954fe97b78f2614b4e966f79475ed2e614249d96775bea7f0ec760c642ca1b4316a77c774b31516086428a13872e25f8d2edd22ae8c24144e731e1dff8b0c2494ce5399a04aa6cb74ae8c23148310f59abdea24793d2f906184b2a77c79ccfe316edb328a50baadcdecf4bb7f766b086410a12c66259efe983be9a86e0ca3e81f949c4647749bb011430c1c25a85163070e611c1d3878a0630c068004a3ae0ab94b5fcd8cfe5aaf5dde600546d1bbf63c4fea6fb0e5d85f943235df754ef02475921e29dd17c52473d25b89af41dc81a600a417e5bf13dd36e369cc699591008417453f4974afd1917a721b367ef8d871c3868e1eb703870d1e3e140533b02102905d142c4d94dfd349ecf2902e4aea5c474bd2b126bc0d928bb26fae55d74c52977bb82888c878ba37c927891dba4561eb2d8458dfb831bdb44541e6fdeca6ff94a5c9d5025d6a626e324d20b428a88e21bfd1de43bb8a23a5b431c430301801084050a346df2cca9afa74273994abdb0a228b62f87db4ff1374d62a41627195576bb99d9eeb65be46d1a64f0a5376232cfc34aad284afc0ea3eebc6b442cc4bccb36daaae8e2b4ab39adb8474f3702a6f45d173143b6b13841525d1c9d42773dd8f2a32016415253b6194185f1b2fd774aa28acace90c3a7667cc18241565d5649289d97ad67ca3a2b4de7afdff41435dc9294a6a3386ead3622b6fde606b10b020020d628a62ae515a4dc78d68964b5152f9e625f37c76531f29caa6f7da32bc3aabc64046a17b579edb77e698caacd1ce2e4ce75d14e55fdbd1d7262727a7837ee0c881430c1b88c78ef781080420a128dd9ede36e5265c04105014467836932ae3eda3c4867da2d8a2c76734683d51ec92d4a9ededad3e7cf405403a51d2fb2aa2ee4c9a13ab51c3d868f581cc89c2bd59ab5ec9eae1fa260ac28497d86025deaed244d993d4d612aec944e9f576edb55972ad595b73269ad30465726a4c9446ad670e9dfaaf2f74d025ca9ed94e402c51fe6492a0568216a9495b898277d4b12a2b41a95352a294ab49cc3ec9f1ea0d641205d9ad4d5ffee3d7721f014412a53021d6e60489001289b2a9cc57524d27a54ac4b103069b030412e5f6d49b731284aa92191e803ca278d2cf7b12bdd3638c1fa6460dd4836d98f1711ee910401c51ae32498370336944d9a42b41e647f5ac85208c289a08f96184a57ca96d11d7cba98abd58d8bc6b59a8c96c01441125d9c24f79a6311145d9382779c885ce73024144e146bb426799118f3f14400e51d4351dcf4fda133df70e315a50a3860df3f16387183eda400c51b6cd59effb94ca9d0d528862a6bc133a4993c2460721443a8abfe8bc933c0d328855df6457c4c3556fbc6e4ed8ef492a88204ac2bd7ceeefcbb00d7a1c622463a8a0468d1a356ad4303dc630666c7a8c611824104591bbf96f940a10e897e9d555798c29396731d3503ff31fca79a3c94db2da5a86ee06db0e701cfc80f71912231963c7f14401881f4a679fd1366fe5742a2b0b207d28a78ede214fda20930e081f0a625ed485927340f65034797379478f1b6b77103d14645e8d9d640ff24f7f20792878c9e8ce2294369983f0500e9abd2aeed486ddf90e455162491917b5ac12b4433194b25162c7983a144bd6649e4907a1831f1e63766f793a9be319736437536b8be77b0ea59294f8a5b39e5425f62e80c8a124762e93f6fb946ec547c7183bf8725f70500f7080a0e3501aa5bbcea49dd4a86103040ea5381dcfc4d7fe0bb9bda15c6faaf65dc100c40d251142efe34528dbd0b7a170256d8e9e24563900614339989471c27449f227ed40367aec305b4379436efadf785627ad5a03440d25e1a3c6184274265d0fd08d1e20692886a7de6c62c58e03040d8553626ccedbd2540d4d07c8194a7bf267d950eb2946d42c3062b4a0468d63508f1b20662887fde617134f9032944e8cd4a42174ee9606840c79a6868aca8b79be5887b88e6a5f31e12f90311444fe54684db7713ef6d1c3a8e00c9d134339c89329d57754a3ca23078e1a3576e0501b8084a12429a504311fc3e4549280a1b457e399dc46ada8f40b250ddabce48c1dc40bc5d29b5134b6c5bf9cd5857218bddaacd14a102e943426a1a411266bc65102b28572ef58fcc6731df9e5d901d142e14dcef0e9931427bc2807264799826481fdae8b5b1131db96b75363ca347ece76008285e2b5ca8713d43bcc89cf00e40a255dd2ffda630c22fb01b14231cdc36a32f549e89ce406205528758a0cdaeed2643b70dc8150a1e4214489e1573607a5760d40a650ec584d27d37edaf0da0688144ad24cc6246bce9bfe323100894249eab41167e56faf7d0b7afce00102859270abdbb4261ed48d7a0465867b92c493e47f0c8d2694b7249555f149f7766ad4a8510309349850f0f4e1c3e6e8eb2e1b1a4b289836d936e6270fad97221a4a28ab6750526877901a341a49286aca8fde2193794d0309a5d2dad13f9a8d656ad003348e50ce3859457fc7348c90bbbacd6ae9dbda883019a754778e866914a11835aeeeb59a6ae7b2c70e1b6d6828a04184f2095ac4e23da78712bcc18670a0c3f4d06178f8b0e1231954e88a19c3289eaa0a9944178551922fedbd95f9847ed4460fc4831d62dcf1f0810b22e0811bdfc3201f3b2318c50c3d4ad7369d0cfa19c0286e4ed193ec4ed05df98c5f94b732fd9e58a332c71c5f94b544d88828c919bd28c90dea4726415b46d863cce045f924cdf6cb38cbcc2234631705f98d2174cebce4983f4317c5939673a1b44992a60d07337251d66caad4643067e0a298b9e6369a209b4953336e514ea6f4e9f07c6e826c67d8c25055f55e627a201ce06087185b8b42b6f6d5b3c4cd269f7426834cc560062dca49d5ab4933e72277cda224af3fce6b3cce47c9c961862c8afd7b2b9fc13a89577b1e66c4a2642a4b2ae98409fa4c161605956b9a933ecd61c62bcafa1f63a92f6993d22537d8900e1c498e1d7fb6ae282869d564f92be1539f0031a3152525e7dc419cf09fcc2e56944ad4109a645f5e6666aca2943999f62cf2c71fcc50456146ac08a5a9c7e46aa9287f09a13c27f1e89aea2d2a4a26bfd4a40b359d9912c3cc384569b3774e20cc30452963f22463326d6ab2590aab418a822c5f1121e6ecf18387cf1845397a7890a2e9e3844c7bd26086284ad2c3a7d2b99424d7a35094e4a03f8caeeb8c6e09280a426763f457285526f309ab2c6eb44d4c6b6186274ad2846dd317974fdb8ea10364c3c43063e8a0cce844517cde73107d06274aeaa61b42739f7421f4316313e5bccc72561f75466859e09a285ff679a9d53ab92fcfc8443977cc779660624f49fdc0199828596bc8ac616ea227718e60c6258aa6ddf564912699dcdd12c52e4de2c154f434dd9528076f31b92c532aec9a4109bd9424f8799cd88c499404759249a7c41342fc35431205bb3431d589a34894a308d98e794e29559a0189829e8bcced8d51b2337198f18872af85e7947df2893d7244c1339afadf14a5b5d5461483b6d6511ebe4fb79ac188d299f438239365d0b5662ca29ce464d2d7b95e23478a28ed89637d22eee3ec2611e51c4fccf94298d83a5a4494fcccbff47a6432d76430e310c5b431d887d6523b1337443196660ef2c57e2edf42944f93c60d56da0c42f4f9651f2ada1d26d61e9fd15cd4e860eda99e318882c89224499f529a218862095fea630e256836a51981e02441885bab0e204af29d49f2bd1dc5fb3f944be4ab49759e297b3f946e3be629cbf232257d28c69a7892c4749939860fc5dedf0c3a773da8660f053b1d2daa73dd57460f052d2372e489e7a13c42773a69937ec91b0fe53aadd1a6359fc4fb0e25991b63eaa549c86c87729f4c5bf1711d8a6e3ac96cc9f1512b1d4ae2e67ab54d61dacf34875207b5cca39d62fb4c7228e9cfdf8b99290ea53f25667b4e5f662fc1a1149b044dcd616c5396de507edf335152946b527243314e50a28b9235492ab5a1e821f6ec57c48662dc469355da22e3670dc5df4caf93fe74ea470dc5134dfad32a4de27dd250d2994ee6322813e3a3a1689b84950cfa24594cce500c7d5a63859263788919caa51bdeb3d5e7d2bd0cc54da3ebebbd6b3293a12469d7c86b790c25e19a1eef3a3dcf2b86925252ab3f5a6f8d320cc5d72b3997244a6d09184a213e7b49751b21c62f946f773c9bc5c960e28582ce295e19a3a9d5bb50b8cf41c76a0f71a15862f6969f6d0b85eb392595e0268d6a480be5a4f48c29cb0d510d65a124e5cbb567505d57212c1446e38477f524ec94ae50928df54183d2685bb242b9cdf5e498f3552869ecff33153def792a1483bc135dd2c54839994241a6c930adeb48a11cb254c63efbacaa395128496a945cb965b228cd814249f7c83aadf6138a63a25ee869ce993ba1f86bba3b4d0ead396e4271fc4e9f6c324bae92092599444b0d269ae01b3c4b2898070d323ef3534f4a28e8cad1b951324be69350fcf8af2589ccf29c41424934c1849aa09db3f9114a32fff946a850ae110a3aa8f650b1ce284241c9d91a4b833a95ea0c22144f8ed04f3a08e925398cf2652eb97ae36fe5298c62d0e2bdb77942dd198c92c7f4701ea4b96e101865937aa7a35a47d1e0ffa224dea39e4bf298f3de17257d92fe4ca72461affb5e14353bc7ad0d27de7a78516cddfdbc33c13e95eca2a06bf7cb5dd3bedeba28abe6c9cfa79830762e4a6249bd19edf313675c9483d885fc996da7f916051344cf891fb64a922d8aa94db6dd3c36a6b3b528fda72fe97d214f7c69513e2d9ee4e0ee2c0a672793f0729fb95559942fc36cea51a27b3e63511a1d91a571c2a2e0715df366b54c36bea22453dd4f8878c70c5d5198f1eefc794b5a51ba4bd5f6b30f21b48415e5d5a0a3b99556512efd4f9e634cb1ce5145d9df64e3ba2415bae613e5e5332a4a5d1eb4d24efa86f914a54d32a74e339ba2a429d773905f4a2c2945d9a48978dbfe6c79495112257cbd883a8a8249e619324a5114aece6594fa4dbbcf84a2ec39cc8413740c280aa34c497284a9fda4994f943be979ce22639f2ee3899289d65bbe1e3bc7653a513a39a9116382f07cf29c287cf5d627ed268aa5648776b55796af89725a939e42a6ca134e3251dccf1a5d274a2751838982ce2833c2e4fe804b201ed368d11eb7c4baa255b54ceb95288d101abd7adc47a99c12251df7354dce240a36f32a2be2d7334812059326ec789e0e4a8822512e37cf7d92247bc40712e530e63fa25499c4d4963a293d89238ced15f2742c6944e9741225b53695ae0d23cadb339a7a1e4a6fbe88d258eb6d5295c14d5a11e5a4faa37ecea484bd135194139ec4e491d77123a258ee39830a5da373f610e513a74993e41aa2e0d9db04e1b1353b5988e2c8fbfd9c7bf57c429424617772ee388862f670626cfe2cafa3209e53eae418e4d68128d78ce8285196375b03a2a4d5a349fd31f48cd67f28ea49f9a79db1e4bcda0fc5b43332e708f5a124e91c4e978ba792233e1465848679977c65a23d947e536c6c93fd36e9e8a164d5419d923f7928a6d5e79d1844f43f7828e8ea7cd45afdce983b94a327adec9c4a67367628c9f88c1dcebe3b367528e6974fa34d678ccee950decc7842278fe995cfa1ac6f4acf9c722da196431d34a9feb8c7a17819363b4b9eece3c2a1605209e6571d2777de50ba31696fab2a525337144d6b9a9449c96d28bf89e82c75321bcaa56932c3ac4e848ed75036d1c4b3dafe496a63359453d90919259d763fa5a124e82a0ff5263494fd43ec6913748efb190afafe5aae435466c80cc51373ccce0b95a118b4f667c62fcd9843866252425feec9180a1f3bdc749e13337f3194c4d5342a4d36c9681286a229eb109327ed9e0e8652ab49f91c199f49fa0b65b12b1d4ff84f8dd70b454d4add0774a16042e4789f7eb63af7015c28b69e78532293b46aee03b650f452137962692bc27d8016caa9932cf937a6f520ee03b2508ca1732294a49aa4701f808562c62793bbf943beb70fb84279c33794d4362784b70fb042392831195592b0aa6e1f5085628acae4f99bad1fdb0750a1a099377e548dd93eb60f9842f9347f4e2b0b7fb5f60152286ec7fc5f4891254afa8028e8bba10740a1fc1e434be7c9ace63ce009e7cf232794c2d4f48ebe99d37c138af1ec3b46e6125f3e138a27461375aa5d424992ee7b9e3d3a4f5542f124e194da0c9350d698347dc7b88cf921a1dca6c234a62a99dbe9114aa296941aa1542a436e9af587b60805f374b24e450f204261be3c493df173927386510efd0ba39c54d4adb3b6ec3cc12898ea64b19d84fb0f30ca62fac9c5945015fe2fca49c328414f125f94b39c5096066b1a1d6f074c108942491057df9a94e6c6b8814249c94195f8b1435b6cfc0463d01c72b429d50965bff3eacca56ad34936a124ad07a519272603112694f4b6d36d959c68a26709e5df2e41a9cc0f9dd3ae8492b07ff6d5169b402409e51346adbc8fef5f9842208284c26bce2ebcedebbdace6ba4a98b0c8110aea49f20a9342ebaf47c408e5681dae2439ff788e9f4811caad772756e89c6e2c8910c16a5c0ea3bcc9cd5499981646d1c38eee32edad1ad60de6242418c5d99c73a9f2a56d2d308abeba565f62f9094af88b92a8eb53882f4a625f09bfcf493a3309e945b9376faf33b6babae6f1a2ecb63232fbbb286d9062ea943649670ed1454926a54990cfe36f924c482e0ae3e37937fea7c9ec86e0a2a01f9478efe82d0af23dab6795ca66956c510aa144ae6c4c8d99da5a94fce44699de4884105a94ac849ccdf3ce1b769a45395f7567cc88d241655b089145713dfaf986e84f82d085c4226111f28ae265526a72f7e906db0f731b08714559bebf931ca18920a41525513ff79741892dd94c768881031b3a70dcf8818307ace0eb3badf4b66b466e941421b4ffb37fd00d1f63f0e05594e36e38ab529fcff9f6303f6ce0401284a8a228329896a79be817d18711c3860f4f4541758ff78df8083141dbe3078f10549435099d53c532bbcac45314dde3a6a9dfd3140555523b5968d5f8da96a2783ac898a1abc5f5ed544208294a92d473159a939c475ca32889ee26093d326ba6944244517aaddedff474c70f1d23e04148284a4277ac10fb36d24613028a904fa027b013a632e1cd2d2b3b0be1c472259a4993eb904d588d1b8468c26a5c264a77b5e94d34d942ac2631e16aea8b5c6e7dd8db3bfdb1eb0db6904b14764c893136c3c4a0da434b94554dd797b59eb66eae1265cd3f32c5d62784126531cfa353acc54b5a27510c26e69cbc7defc4918648a2e031bf698fa6de45a2d441dadcbea7ef20518e417e5eaf554df0cfdd234a9e339c776a8e8d89714449c9b1df04fbec5d23cad61d2c34567ec78872dead92b24df2cda9e46e1185352172d28af546bbee14918aaecf9c24fd8724a2e439e6565e52d44fc922a27c7ac433977852f7c47887284921664c12afe7a1738628c89775cf1cdeac64778528b687eedd543b62b48fe7fba84d9dd57abc4194dec4abc899fed8267c218240f4778937d874ecd061c3070eb53a158404a27cda4eaf654edd6dc20788f2881c1d2de2fda1ec656247ecd724591f3c3f944679124d26b8dbc96b481f4a523336949ef11cfd36840f05fd259d24d493720c217b2877db6d4c6796c94da48772924d7728f579481e8ad1f2e39dd56e6809bf108287a29512b54caf95a4baed1dca65f26a66648c61ace642881d4ab7e5a6ed9a4a87ef42ea50fe31693cf5ac5265d5103a947ebdcd94ecbf8e9039942493d718a264edd8bf8d103994bf5bd5a4b310bd2d87c4e142e0502c69347dac84c613d11bae460e42dc507cdbb0ceef246a9eeb81534184b4a178b925d9ab87d75c6d081bca273b5c93582f4a3b0643d65014f917d1a473c926253d821035144cce8fad7371b1efdae0612686c1f1a38751818f9034944a32934cf58a5dc7e8f4990d42d05052a523dbaa2a8e903394936713a67c4cce103394d6376df80e7a198ad1a39817428672de9322f30713cf642f640ce83d71d4cd880c0e42c4508efda993d061433cbf17128662d813634f107572e84d08184aa931a744e6ffd82305215f28bdc7d2877881edb01dc34597d234a40ba9b68d269fc4102e14c633e8dbbc31b7ab690bc5d32bebf8f9a9c9e31c215ad0fde412939aa4cc24ca42f9c36c0c79ae18215828e6f5ec29b326c8d9cf157617cddaf5ca6f3769d4ad9e2426c40a2531b6b66aa3598582ce3559364b67a9eb42a850eeb79acd1bcd5dd25328ae5bdd7a97a82547a55092269b767353148a499bbaabbe3f2d61824249795d5ca9f6acccd213cad94a7cd46c9113ca7134e5885dec97246a4249925b469396ddfb38138a5153e7185dc27cbacf128ae95925abfde9aced5142312715f1f11332437592504efa84191d4dde3d3d128a66ba4ce678728472c7f49dff94d49dc93742b1ceed84759e3b697d48114a3a493ac935ab25973e092142d9c2ef6418051db47dacfa8d308a623a34b67659b5890946594e77a85fdb7452c600a3bc16fa3aff97926b37bf2886ae5e0f4fcb8daef14551939d5cb631e7bd35bd288b9faaf3b81bcb848617c510266639f14cdc92e3bb28fd66acdcd0d0b5b7ebc2f1934ad949a2b9289688cd89b79a4c9be3a29cc4b74a7edf73ccfc1625a56c3649fa4d8ef1725b94cd5aae4f36093a846a51f69799d126fb3583685130194f928b2949a74fcfa2341b3a7b3aa196b1b72c8a5df2e8f1647fa7b18e4539659ee89c188645794c4bf4294d3adfe35794e66a376bb0f13739ae284992fc5672b815652b41fc348f34770f2b0a5fb93985b86750f22a4aaa47a878ecfcea5145416c6a8b15371525adaa0a259fa828087d759af6db5314459e58219e648a62ce345973d271b3994a518c19e94956d9d70a91a2147e27aa997cd3f4a3286e9811aa311745c9d46c9b10224f0973288abd494e4ed5fd2c33280a6276fa2a7b4c4cb2fa8982b0dbe825aa99949f7aa254d2263d3f29ed44416aae66d3a53ada8413259374cf7fd20d9d6436516c751d0fe3a6260ac24eed76083313a5d53c255cc3efe80913053d9aa1ab99f7932e511e99838b49194bdbc812c5645a96195fc5f2af44491263fbbdce739d124a14d54491eb77f2d5bd388992e0e1e4b38f9f6222499473acf44eff44a2a474bfbcce0f89927072880c1b7fc4bf667392a0e1a3e18872a8f38d9bb7a9be1e8d4614a3e8e0257ebcb9538f06230c91516452827a8b2877d4287b72d767cd2ba2d4b9a406216399b02789289f30a6ef1e93e6b588287566504acc233ce67888825e6fd86bea2ccbcc1025f9f3bfc6ea51d5a5429476f49d24c48c5cf110a22ca2caca6489593a661025adc1332dff3e675c340451f05873625f9e2ec12d1a8128966422d3469d92338b0620ca3988ea2455281367c4367ce0f0a5f1078467dd12636b7e30f76355535bf7b54b4bff3b9927591a7d28be28d1f77b55d2bd4f830fc530a6d736a74df51368eca120da33a78a1ddb33391a7aa8dff34a2aa9754c6eb081800511e818d0c843cabf84d1397ddc7c3d7ef068010d3cf49ed5a16ef11696dfaa9f39c74f7a74c3a77187e2c599a9f392d4f7e2e40336ccc71068d8a1a02dde56b455a634611df2aad1d5f030bb93a4f3ee121d8ae31a6746f7d37fd469cca1a0e4e6e87992bff7571a72287eed961c7b6b5309a538947b4dc9515656d2a990061c4aa2e69865945ca6b9d27843399f1293ce3beb274ada0dc55411fb8f9bdf631ab5a1b2b74d4fb79917358f0df3da9284fadfc9cb866228e97f3f9a18e5746a0d858fd9942ef14451d35bdab1a3078f2bd05043317ed2dc9cf44e43314c44a9f4cfd6d16434944fa9cb0c4affbf67f50c253df96bdd7e829f0699a174f27e65103a6c29415886bd4dee5bb4e2c53d4f7be7444bd0246d5c84c8600921bb9da23fbe041a6328fb28cf756292ffd1f36228cfe720b46f3e6984a1f4653ac9f7b0a23ea334c05090be1f7692e76727ef0be5a0a7e7449f5271920c1283070d2fe0617aafa59972632a1e27cb4d34a1f515e38146174ab9a7c76a33e80cbf72a19cc42ec9d66b34850eaadb91748cc06b0b6ae994def325e74cb5a0cc976acc6cb0ec2f9984591da12c9c841d1db477f7d7e7830616b07d57b5b57211adce6d626a11a34bd2ae60c965922434658a4140c30a45cd20fe4dcd6d96b56954a1587e429f2949f07c956950a1bc31de16275e860d221a5348c533bedbc2ae62f54673a9d3682356734d430a05799a4b7f4e9a46140a1bdcaf4ff4a4aacba40185746654ab3bdcd69398139dad2568683ca1a44177cdae7c85c98686134a0a3f7a802ca00307387c2080023e2c9063011410800f946c2ca0020098009605ca2c805717228190aa815cc31e508000f820b1c0413e7ca0dfd183870200f0c3c7182c204000100ecc1838d061c44080007cf4403fc6d9d18347024ee003070fa38000840100010000000030801dbfe377f4b0400616d00100f8f091d4208000cc0f736a142000e687393b7ad438000006e08004f4403f74e0d8c1c3460edefcf061c3c602001080061c006d20000255e091830a0780c01410c70f316ef830366c24000252f0018f8fc20fe42307ca61000840a128374a3de793e3cb694f289ca493fe9c277899103aa164829e68a2f4e3782707cac10b812694ecad939ce9eb069b0f787c0e946373a01c0a0126208e1f3bc0719680387e9c1d39c6b0612301105042315d6dbc63eb1bdc67639ce5403d6cec00c7b1f188870fb71f3a70a00f1d387e888183478e1dbf0208240171fce871c38718366c2400024828e83cb1efbfeee33b5de901159820026609081c81cb7addcab8d2b4ccd4f34e5911ded94c0818a1d47ea747bb24adf532048a50925b5aefcfe374df440d102042398bf5be7c0879aa261d460c15a0b303058dce0e1d398c52cb06e9a7d5b474be4684b19a6cdee97c5a977db736128ca28926997032ffe1830e00a3b059b794341bb424f99170dcf0e13e78ecb05123bf287d9efdd2b85de207a11cd88ef8a2dcd4b55bf7b0ec38ef4c6a3656a9788cf4a2204bc9ad61d34ed2921ac1082f8aa993ce9e9ea3c3f03824c2c82e4a72d2d1469ed0a5da48d331a28b62ee97ab4ce233928b828faf9a52faf8e1c388818bc29efef8f6a33d3ddbc1036f51942f8def5a2526c1751ef96807fe23b628e7fbadd3a384526084915a94e458d22913ab2f6bc51b6c3a40f708066e18a145b194d21b4c8afca89e8f5914fb93f665e8fb24899b1c9145394db4d73f1be15f6bc5a2bcad965f9ee72c44466151d6fcb11be3b63f8f52c78e1c39763cf61879456994c55686fbbc127745d14a143d59af76c493ecf8d10214d4a89166488c24c1a123c7482b9615ba8ae25709bdb413aa44faaa30cf565567bf2ab43be73a9116ba7492b9c186749cf3c8f123a9288fed9c582b426609a3a214729ffe439ccc98d553144663c97de26bcceef4248c98024b81a4b8519456e6c4f3aabb2eb917451f6a67a11daaf55d62280cea74f68c273a021d23c0410f7402bc1ee8070e1a8c80a29ca42be93effcf1a18f944796e449e387236e8883c51d24f5278096e274a722c65a6735839515e59ddf075624967b289b26913337f83c8cdf469a2ce33524ff0180486914c94bce4521f649fe09b520c8c60a2a084bb2c49771a319f1fb944d156c7d5cc4e9c4d253f18b14429eddce46832e6af8b0881c0e830396c2094462a514ceb133e970ee90825cae1e3c5fe07cf0a2393f86df6644ea9182392c8523546947ca73b168c44e2c70824ca4969767e8f7592e9f0234af2f3f587ed6cda6374c411be78587d5dc6d78db6e610a7d7372d5cbc4694c44fe74a2aa5e94b1851f0d0d327427bceb77964117b9ad8877bab78c6ea983e317d4f3ba20853c9a141b4e4b950428950e524494cf369ed847d0411057562c6544fbacefd1ca2542746b38ce70c519e4fb29f782693ac490b513e39ae84879341f6474264eb31d9659ed3200aeae3099d649657963a228862780eda7b64f22c10e58fb3ed2283d20820caa44e75ab8709c2be3fa075a66a3b575537b727b2c75a67ad946746fc5090a65b643d4cdc3ca71446fa50ce27c931ea327d50eb46f85012bc5498ecb9d4b7953c61640fa510aa44ed93a254b6113d945389767fbaeeb4b119c943499fa67fb8b99f6ce3c8811c18c14339ed8a4ab5103a87d2dc604bc6f0612218b943d227add1b373e5333b94f7c4837d983ca99f32c1481d8a9d734b2821b3f2bdfec0081d0a26e8f0d6f71eca620f8ccca1a49be420daa3493613e4637d9460440ecbe5df69e619cd8cc48147e0706fd01137e4481b0a3a637925dc2fc54f998cb0c19d1dcb2ecdbd8a530d357555262907c6053c185943a93deffb72cdbf6da386f27cc68cad27bf28a98ea4e1d07067b01a2366289adba8898def2fd596a194369f56756382f2203294633cc547ee8326118e8ce18c9c51f3b34a8d78240c56638c113094f49f5029679e44d1d9912f580d2f588d912e145b4c0a35ea649c10f90817ca9abc836c53e9a74b1bd9427147342829d6369bfd235a286c9a24459757c7b499912c60d921faba73b59b6c6c4d0ad1f96d1046b0508c418aaafcc915b053d9f2df7e62c40a0517ad25ddc87815caed2734b3ae86124a1ea1425193106616569e25f529947b7fbc93b476cd262d85a2586a0a4d1b17a2b34d8922838e15ab46a050aeea2e9d1a26b349d1134a26758c19f39f35187142b153bc7ba9d2258be734a15c552adb31c28462c91b67941874b6c95942c97baea37db6b79f69d388128a59932cfa7a7b937f2809058d4156c6f3cc08128a7692a9e6160f5f3a337284c2e9ea6c72c832a9f61e31427b7af6961e56ea48114a6a653acae4daed95468850d6d87cdfdefd2f273f8ce269924197dcbc0bfd8908a3184f10a1d973183118e5d12084348b111865f50e7f27ff3f322ec45f94d5644f33d5bbaf5a21faa2381b730916ba63c7ea7a518e5bcdf87c9a693b26c28b82c95ee6a67a627dcc82c82eca2d72748e9171aed73fd445d2290fca45318bb60fa2fafc47091749c2afa6944d9a5b14835213d94976f0f4780e115b98d408e51af7647f915ad0820522b39005c6420416c518b2b6b2e4ed15c57c5a4bf651b61bbbc41505f93b2a356dd38a720c622729abd674aa2311561cb2b332dff66d1a3a09556ed9e98457512c614caa2c9323a28a925215aae94709b5351505f97bbd771127c956b319420415c593a644689aa025a6d329caf372a12fb7e46396688a926f687eaffc3a71b948294c8d53af460d44278890a2dc79fb3a4d46cf7d84388a52272f55e2b515114549983c1e328f5ca6ad4b10094579d3e4fde0734250143c89b94af349c2ba7b50453e5132192f7e74cc3177b65810f144490e273699aec9996522d289e2091b9d645151425b7ac8899298935e9539cf6de2e069a232dc6e928a68c29513224ec66ecbd59909feb3f99da0a331140110b020026d07114c144565ec6bf8708f6105914b58e26a9448258cb1af32f5d37d52d3e9ef203a114a94eb2eb6323c677e5e27519224b193bba7373ef5408848a2b0f96d4753e467501351241225ffcf7ca7ff440412c5309639c925c537d874e030373eed05228f28b89f2c1ae36a8eb25911479457e7d4c9e61a4ec7e1a35120d288c2ccf7e56e973d781c234a712523cb4c94b36c1c1d0606228b2868134a7eedfe8828a220a7e45432bb8f5a89432411092516b223c428c174834d04115663450e512c39e6f970224be6a840c410c80d6bfb95b9469142a008213c8baf11f3ac91450651b692d465924b0451cadb93f1ac934094ae548ea97f1f10a5b4505e42bfe40f45fd1733f144ebe9cbf8a124c613abe4309b3e94e3c4586571321f0a4a929410328dd87b7ef750b67fb38dffc1426f500f65f9549332becb433163c3e61b71ddf00c0fe512e3c949ab714628b94379d5eb64794dd9a1202a2fcf43f3643f588772ca6d2bbd27e6206b89d0a12072c4f74dbc3da1569139ac36ead9dd257257ed757771bb5bfadcdc2a113994affff344fe8996271f87e2bedd9adcf339954c0287625ecf125ae15bc2f23794467387d062ad1b4aa71aa4cfe548d1258a42106943c174ceb44ebe494cea47076a81081b0a9aecf70425efe55f3a05913514f3e99473519933c90f0c226a2879965b9fc711cd5589a4a15ca1c29412f4091a0a4ade13dc649f8ba855e40ce593a24b76d6ed545b6e40c40c851753a2bb68682bb184226528bb09a54dab648c1e1332143b79d6dcb92dd3d83c86723a9963cd9f540c251d4ccaa0bbf349dc120943316e982827c8f0f9e9014341aca3cf6757650e992f14d467c6fd0655d7558b78a19867b2b9ad32c42e94e24a74d7a4b2c794ca8592389bbfad728b82c816cade3163779a9c93dc25a285623ed9227334892341240ba51b719234759a537c8d8552d7c87fa7ec8f31a45b04912b9463d685488fa6c4069d88154a2a345f68fe2a8720528572c954e7eea9d4caa7ce08225428a5072b339df9d537bc23884ca1ac9ebb1933944c0d421129144dea1427473e018b3da8640dc642024920108ac4e170281806a7311e00b3130800103c248c0563b1581ca9c2f8011400034d24203230222426161410201e181a8983c140180c0805c2603010100a86030181f02a679a0f87868718a22d344dd89dec1a92c30300315a759a9a74387434def12d9b3b0ba97515b2e9caccb8728fbae5954e82526264ddbee777df4f17cec72bb860f3e7e8a6f09fd9ae4652d90fa5410522664255dcf6bab9558e6d2f134cffdde3601bba69f8637c57a67b1a2b3b163bf8f480c64972e753bfdef5c29cbc0174fb14fbc02b53e915e886b9e78c4f9a61aedee24a8981c9a7c445c7bb62e4599083abc52593c0daa2aacaf1652d786f4a8ed07eae8a669eba4b6b443071e7e13bd7f949c2758500c5df1dcabf67f8ff6dd27b5020063fcc3e1c1f559ebe780ffb442dadfdd20c0aa76cbc3f8247b218c618a0ef51c476c5729ee9ced7d3c8cf8b0c62178e5d2c838cf37202ed86c9bc4e575ee5c5ad5bd59b357c10a964964a70272e7b24398aa680792d60bb17b4a642850e04c2046aef011efdc5ad7c8117e2ed4456b4f023b8718913c906b3282296bad3a1cf10ae79511b0aaf89e6270ed032d0da34a6e3a1af75cbb6d4e82e6a8052954b30328a5cfc8debda5e07af4f3174742808a8743fad5f1dbe1b4cc047b7172369acb54e566d1414554cce5fd489b9fc235896452fa8cbddd33cf881c2a975ce0fb43b8ba25ca41c5600477ceaee23448439724e19df747d808653a15bf72286b6f2334a31de313919be3177cefe48ebd633a1aaae4adf9bbca1dd98992c30734d21619a35dd99baaccf6793fc24187b8e38ddd1e69ec958557270702adaad4be8c0e9fd42b0b9b23b082bc54189f4d73df63aad8dd5fda6fd4ee49026fff8e42b97bb12b87fd7a82d1e65f4bf83c805d961386dc7b6c7c8804a10470748623965385c7c993850d4802f8d9115788285e9c1079a87d0ccd90cf392ca9751329975fb9a74a56f04149a5032264b74c2b090f3481c9f81e7d96a1aa0b9e80983b975ac51195098dedb056d5e6847853ae8c509ea7a086c71dc90556aea0853c2ab0ca626b105bba8fbb947f8a817944c93ac07e98b75ae44deed7da6d1f060d0eb443c59e51440a55fc1e06e85bd24b5d2ca9dfd4f99c66a0c9c658ad3495a58be7350d5b940fddb760db6c65e6244b7251531fbd0d2a903f1780c5b3a3078302fb6e6a0bd4b30a596e334c919b8d94cbb95f1844ae820293c58d982cceb69ae2fbedeeb8c4a60c6f487920c8ed131145a4eed92582a5557c547195387e1302b61b85e90bff24c046db70343b5192c6ec7dae85b2b89c1fe72a12b0834fc0204ec4d3bc7c551c7f97eb66a6a7daca5f8ded02606d25fa1d90400549dcb05e20cd7bfb0da016a96e33dffaa0b6bbf1057cb99c7e61de7c9b601848eb81ffce2e8b534e0fb431de9472e328a8d999b9aa2923071a26a62f67df9e749336ccecdd93072cfeb93190164c455573deb084f2acfe69f0c5c3f54c7236eec931ddd4eba11b0327577bc89c132f2917a6d728aaeef4f0e083db9a04c35e6bc34a93a6846fd233bc9c5d549f64bd8a1655b1b7186e612dcf0f74c2e7e0b011c9ac4ff6d6a34f717926118a0f08d25f0a45c6c1c9e644d2888d13506d02631efcd55ae8a6bf5c4bfa7ec0879490075c006f82bb1a963314d0812d305991edd3e8071a3dc46882567e7340042402cc4e44ead342dd4f4aeb483c67a53f288f0ecd7b5e2bbd4bf085e958c815e3d84eebd3d2278af7615b907a9918a7a940ea7383b9ff2fdceac70f0060ce1ecdf187f5b3c98c3a2648eba9d31189afac4b309073f43b1ccfcffb6ceb4819abd751b3323248f988024e412ddec91490254eb96d1842740e3e2f28041543966a8d3c8ecef08aeaf2715662c0a6b05639f6df4dd6f319c85f9afb67b2feaf5752145ec8541e6d590ca60b9251286ba9e87b6164337da04450a7bcf09aeca1bcca3d88de4b6c747621a4d11a11830384ca53350863de49218b5b031f2f9d7aae3c7a96bf0692e021ffb6a8cea7ec3e2a0228a872abd7a076fd0fd945ba9fcb1e5fea6b22272b426a326dbd576041674430991b6366dfd5fe99a2392afddb3d7470c71ffe0b9565cb1887ffa139dc0e72ffc59013ca16d52e5dccf755ca17b7915c04e5c317a42df87253ae220ba1138894606768b7961c24143d15cba1a0a805b164f7e55e108d5e202fd75bee9a3a06e8d41423c0022403eca5a9a6de15f9d176f93f6521b8e936b33b9eb7dc54b2c8cc0c5f20f60a18399422d2d891cada5c096d77ae87efd6c32f93bf04224a243e718ae8986b82e43218a3ac0008146aef9e219f38281147c76069fc00a3978733988557e19f1b040e4169c75b6306b21b7a09931fb9f48cf3942f5599eb83b26a006b9a1c9f74eed4541ef53c87a3a69c65854911f27875053cdc4bb045b6ba0553bdbba4fea7a4213a5d330293660840496d1f56649e8cacc8443e3c7f2f9189d5cc6d6366f273875cec9a2323cc5d0c276171a8209aa841e06e93cdb11be96a1947a73dda5b057d8cd160e143157eadb5ea3889207167af75d47c2a0362ad239839682ad639fd4ee73c2a6d3e2164c808d7f328a3163b810801810a63860fbced2f1089189acdf93f816307f41eda5db4b60fa00ba788d03451a1e0596260c3d584b2c8a0f6353d0696820ad465598e630e63c93c6bdf5d796504884c4d4fad7c35b4665e392f0caf0831c2d0952d691dc750278a3cb88a3a5a14db827495f9f88283b1e514284ff655e84a60d171a80ddf765850cb5c1fb2cab9592603a70b5fcd3ae65500985ebf6acfdfc41efb46f107147e806f9fd00886a43f265da7859ab2db6c5bbb7013d83adf15455be6e2f43b4887ea3e0d6bb1b683a0e26b7c05df9f9d18e9c245cc42f183f7f11728f87d1b4256d3ab5085cc8d5f08cb4fcfa757b6296d4e36573be59e64140717650b8d3dc40649d4fee491a2703d6434dd76afe74cc0c22b09790d54059b3d5c687c13974f98097045d7ea80e134acc286cc12918b5e4a8360f3738369cf4468872b3efb25d57cdd9753aabd25e63ea366372b66c56c9eb725047732a033c9a69ce5c2490135f2d53928e19a566ad11fadc716539686da86f2f9ff41e7e1790bb7a5570a32ba310c672868ca09bb80c6fc81091608308fb84dd02245b39c5a168fc11e39b1e19efb18488fa6e1a5ab7e1a542c870ae703a367da990aaff71216cc9cbc0187c2cfce2905fae885f9e1768d324374bd73bbf2e50648c77a84c662b3bae6721a52ab811d8740211dbb8dda584bcf6327502159d96e336d831282a6cb89c348a53ab9d024cc3590bf972fab858cf8d50dc0a039fb2035418ed4a4fd1151cd02a028ee66e84264c382e5876ba5956c8a7946b552cae911c2609f6996484ba7eb5e1b518411af40b1f83a65cccc750fe6f3ae101d2aca6acc0a3391d1a10a443b7dbd59a10351c558fc0d5dcf0371cd29e1c2e909cffe08e72bad4199626ef5dc0882fd62918b93d13f8c578e208b872607cebe3d74a83da308fda5784b5495d868281a84c45197da689bf9a22bfd0d1b1edeaa824d21a0c16e356f1a858c0f6aa810cae11522c3841ad27d805d16a49c07cc83ab58ae5052809e62db3d9d5e2148becc91c82849c5900caba2ee755e7fdb857640b422e77130623e9c7acdfe6e21bb5661d62ad045fa9621d14e803b1510772f9f416e42b68412ab7e410fb07e2a450cd66d234b3e80f2cf7b8bc124f601b9e6b824e5f6009149d6e237cffae371b12423a3f472e6ec7645c0f9dee9851f73524252872ce18cb2d499966a192b8c872284266db621fee32a4d23a0607fd4249ec71fef12f70e4d70bba4cf6f2d3df610c160906aaddb8191b32b9fd64db466604dc3e61bd550095fa7921cf30351e0c93a18f89f623f16c7f3e28affe1c6492a6ee0af3c7ca9def76cd6027426ed82288edcd696a47498b73bc71036ebcb9ec91f33e7ae0804ff6fe20ef605d18b9e9b1d36f11a063d45410fb63fed4357818a1fff438cf33e9827ec74fa9dc7a202f37d9d8a266cadd5bb13020793e381b979f263a5ad57653b0db7f9d174c4513eaf9786bc5347d1261f31477e91f6e92d04b5d09faa743d1a02ece30cff45c8329685ac9a9bf68c4ac3af289278a042a74476fc486293aa4e498a210b38cb9545352ff31c95cd2cc8c30eacf3ef0f12f1650b6697cd1346af5d2ffc72ee0d45bdb7fcaa88eb662e1825e0451c43954189598e3dcc7b623fd4059d426d448f9be71882bcf615457b03c179af3ee21448a286abaf9708137b5fdbf4c81350eb42558105e43931dac962321ae4668a1a0b3142e5d676f3c952033bf2c053ef58dcef4aa8adb214a281d53f15827db0f893f91295cf710761c89e7c77064aa7187ae7220a706af400116f5d972cee043722969ec6066290d9698bd12a62c6d3e3b45568bea4d0ff9c7836fe11da9640d3b1ab254abf103bcbfc589e7b6177306627a293077eed1d148bbc280f00aa6eb6b5a7c50423daf5dae88d4ef27751d1591947d1fc6e8b53a27b52e3a76086e71c5dc66fa59461cb30b06d6135aeeec518e60e499e389cf5414a59c49082b3d35a25ada54c309fe11f81a8497cff4d353537d1ed82134492954295d88c70abeae89b48bf991891c840c51a51cd70b9ae6d49e8a135bd6bd530c33f9c6c245f320f0402c0762853801ca0ff2377cc106fdd7d5b32d87f8d847d54b4fb47a169153a307645a4e5ba6b47d72c1f327e41af8492d0259f4bf8906cb3d307b7d62ec4fb2a4c814adac509d2b9285b42698f5158104cfd9659d8767273a1aa4ad24bf7c71bc2ba09413dcbd478b34dda1af712b4768b9398f28d6c6b39c6984f0608f945b53b12b2c6018a6283216afc4e839c1126c05d44a1c3f3c8280f2ddfffaecf8039fca18dee120409547c88710ea5f41248a91755b2b1fd1373019bc0bf294c8b01cedfd9c75674d64bf8df04fd198fc3d37453890ba9451134232c53572ba7781f52f9374e22560a1dcc39df6aba18836869c1e74b083e85016ed14adecc00e0e9acddade09bad81c0bb99dcc3509856fca0e136645605923e654ca9e8215d99c10b9ebe869073bccdf25621047efa984540af8a8a294420c09d12d87d2534284a1b05eaafe57860d886b230101081e2b158f9000654f82b02e480435e6cccf2ae70ad6cd4c723447300107a96f1cfcd2d51a1e45a670f99276159c0f4773095f9324bc465a2b72e301714e8f9699097c0fac2a6f2cd9a5b36a6f4735df4d624b0660673aba3e6e96f9ddaa081cf27200047c1ccfe1ba1c0a788f0a2c95dcca770f245cf27ce84789c6038a811855c6ad94445dda0bb7f5d7cb7897baf6be0a1a6f8562f867995a291bd901489e4a4ca9ee8184ab9558d1e8ba7066cd33f3d2821a2b6ce7a1591c7709241228632b864221c33b81f89dcdef86ce8600ce306cc92b38004d2b683ef326e131fc606b568f8875f2f27ca923b9e93164c1365bf09a7d728c1820fe31cb7a94ed710ce1521eae41b5ebd18a59304ffe0ffe12675a6a8669e6135f039f40ba65f96df9a20a015732b9da3ed17475f8920d83e5f8717cf3a822b3a5da1a413db5e263d031b999b3369fbf146809651444b9de10ca797b49c1eef45319fd827a2c984f8b6d2e8843d86f596eea81a862c340bb965520a68ee6c228d6a35c6938b93ebce5005ce3d90b67ff98c1f7792bd0a78cd26a487b5a82170da8e26f77dd89b91ef33c60c9a5ca6ae9adc6379765762e860e42ae64c710685a59db3e76f352c86e68df152c1dbb8ccc7a6e10e1c169ff10ac2d31294897be0137c81e3dc4301be2499ebcdbf9edc3a1ce114c8d7d3a350338e060a36b3dce28d634e164f66a732fce71fa489d6109efea322cc11072889ecaf772d091c6bad82bed68533dcbb0831a62dc6896349dab99086310b8f3caa83b204198d8d3b34929142206e11089d80843c892a0c71284a8b725a1126cd11dd5c41386f087b03f611282a3020545f6d199ace695e9ff5676cc54523623c12e3785ff007eb09b52f003022d431f8788cd02d43dddce7d576776e070a178b7704b36a32c296ca4ff303b54ef3bc1298879e2b43668c722841a2badfa3699a9eee8a00db1f0e9146da0038124a618c4590f314c5120de88e129b1f7f7606f1a737cceea9b21b9ee0feb680ed4e88ae0814e7aa688a73de00e7db63cf9c2806dd5a47c2797268f644392f6bcd0d4ec18d00cba43512f84e47b8c9f86f9d0ac409436108a73705ed35236f679c5793c76ae5a4842ed45acd975cfa9ae2e5305817811217f338698ede51d9794e8589de4919d057a35a6ebe33209e1b2a69fd558d62ebaef07a237b0936928646be5e6d9b81bbd98f5cc3e225a3b4c8fc226ee169edd396d4f58814613ed7181c316909e87e4c8de49a47e1ff90e29805c862c2c4b9628d24c118abcb5b9bbc8077a45a14f48729ee77e108551d05abdc120cda350ff325f4311ab9e79b010fe6c89f561d099bc42a96587cc04bc45c8e02bed63859455bdd786ca95913582cd0fe0bc46eaaec42fbcddb8e95b911abc5edbca6c26096bae178654e9729c06339e8bab86ee332667008f0e2885684769f2d1919c804c2640bd6d2f809c36d20b57dcd29a9994120cbe7d5470e2cf3f15332a251b1c5afefca168ba39b71dd42971eeb3644f8f8be01fdcf9349c95b09a82f0f017c39a98e9732ab45115627d2841e4a4280016bcdbbff60463d38cf9cd6dc6c1df54d08b3f5d234eaa0cd46d64a07fef48aee42f79eedfcdda88fc64ab79282f19a9cc5683e4429e840f80bc8fb10ccf88322f952486be22c45b66d181fe4c3dc8425d430192c9620638cbca990924dcdd966cf7ed41288502ec6128b81fd6a310538dc457871e75ddf09f987ba2e597e2b22f654afd925854db70df0d04b9078f7a3996c25dbbc719ddc20d7c80ac1674106ca4218efe1d67fd58045748573b484f863f42f4615a7337f5f01f47c78b99d9eee1dfacd0f7f31acfb1c1c5f1d5f465c066d10b0a0d9f65befe579e7b7d47cad839cdb7d5c8e7263fc0cc9d8df6fe54abe7e9d778bf67702b15ee663ab5c4b4448872af199efbf58fd0a7c08e8a470e2dd23c42007d12e4e8a04eba03fa06154d9f2bf818eab83ab6902268e9277e8af239b65a3b99645f1ff2d67b2e91986838336ec8c5fe8e82973fce2c0ef5554066da049b95f85033f314ef30e3396d0c37b48619d81089328fc162f30a7bef3c5b900f2843158be9e978b594c8eb0ecb40b5d8d9c2085535c8df935470ea7d5f448120157e60a40b1dab30f1921da8299709373afe2ac1945e38f16b0cb64cb919f782107040d731f6ee9abe7adbb72b8b50e022d97d90029071e61ec784cfb20b76f0887c7282899f36f469eaa8001b77ba287cded5011584f8e230d63b50831f6efd018dc2b2346a2e1c1aad594ce50ffd3ffcaebb912abf342c2a6f2b1e32e3db3c5b2a7229d2493d5311067d72c34ff16d0b11c4bec47f44dbcb43bc555738a2b12ae14e2ddb4ef83584adbf0fbaa79dd06a497334253cd44e2555c25eed6fdc1bc9caf85d42baca6960974a3418cac56defe2ff3c5bd28bcae23418663060d2981b9ec967fbea2135b3dad486da9bfcd6169201e8553cb080b8a127bf416b39e9f13937884b850cbd0a094d7d9e23c250e8a99747194f5f28f4e17b4c4d9606d7581bf2b954dc370720a60d81647cb00d3b515b87e64d766b53130c5537e58112431481551a9f6193a3094ace3dff3a3d5b8e095d579fc8fc95d715574a29b5f9d020db0392dfb0e690e2067dd8a2ed46b5625cf1f6718c36d2cb43b351180c8576906fb24d711f11e9c7bb63248fcc212019c62ef2b2729f683a1687b1f1a73c3884de365ab7a88f31ff8c5ab8a26ba3dd282ecffc836f30be711d448e7c84c17f7a7dc640820685cdce6c871f32a97caf71641a849417e11a3a2faa76e35be44f844b0172d01ca802f2adf98a834ddb35afd9098ddbcff61d2510f5f1169985189d5f1b2211d9f2aa2f668ae375e9a72caa016e8b1b9bfcba39b4efe5806b251f7686b0bc9fe01deaa43baa51f920e0dab8533974709f5206edcc79a348bfe89260bf8e9120369778495d1909b9c3ebe1ca23db2995ff5f7aadcc9ddd863bb9a1bbba937f1f67435390eefaaedd2feee3a6ebaaf52fceb2043cc96cec51156e42a3a1fa5d727b821c9caa17dd113892c33aaae33f9a473ad4c2e8ff1743017de76f647b3294fd235aa3d2f496043aa45627dbcb62b768ea12bc823b281eb6d0a762cdafccadaf6133698e56273f7a064a06cc2226532d40760ecfc00afc711ed131f5a4bd8a694e974d9a21a2477858473436511079d13b2d47755007ff208d2aa10efe0fbb068b1e513d8443cb610f14dbec6ff241ce2219f06c554e034211e71dfb40eb4e35251dcd1152f52207848c53bdf20d4b98912c60633367610ab5bd335dd922688cb686b67a93598325b74a644b33baac176f1fc0d6115ec971a94391298a0f9af4a43022857e64111d2e5edd247ea48f07b30d2a976d1dfda1f522af9e4c436ad49170bb46afbf89f5d9b96fb7705fee75bbeef9871d4888e5c7e36629ccc86f10cf179debf601a0f3dd671440c93481fa68824cb96b8ee0aa1c4a6e879c8d6debbf69b77033f77bd32ec04db38fe60353e32061ac7e62e91471e362015ee9c343a73f4e919db657760e1b70115f01d94bbe7b11f335e25f3d82b1d67b39e9dee4d0211db12338709a72b52bac268800010d6b128332a0a118ca408ddcf00c6bf006420088703c5a287ab22e94ae94abaedf0e4121052e971709776e5ab9f38b617d20c4bcfcfbb5f329c2074c2d85236c4cc9bd5181444f7305f2c07dc420e9de9939a95ee9d156994ea6f4cf87b8a7601f00ae2e76414763904a651c774de2e432b3f05c2408d4ac611b8f7fa602426dfac6352c16f186f631bae4b50f8fd202201ed9110fe152f464d7eb1a30c5d4de85beb7c371903aac0f78e3aeedd2c451b25e3ddf3c7936c3253a0113818809a0f09d44aed54f8973f6037cd1efe0910e3c4f909402889a7f7e37f05eb7c9e630c07c19c694d205ff265d1cbd3324e5407d4e1ce9301ddd311ea83a418967e42aebb40ee8c01de3111dd3e11d0a5b84f1f39ca26960a6687a40e2147342af02414855fa020bfebcccd5aa0a2980edb011f59911f156c73030fca29b60127da7bd36bb1cf406cc7648fea0b4b1782646182af1f8b2340a498b30740efbce9a189dff98b289d0893cdd3e63d815919d4d39b9cd72579734ecbd05b0d38c3bc0af94ae60dc92dc70e0d4ecfe22513eaa6ea93873cc262f2278be1767a6ee9ad0d4e06de585a77bcb078eee6e362edbbd0ba3c167fb0e72d8eeea8e71a9baa3e81b6c28ab8c60533f5738465196ae224d3cda987956e207002b6efefe205f8578f48ddb54f18ae73e4c41b34426ffcbba25c1fb347ce3e9206a7dbe109a812a7f10e50448cac21281e786ce36a1f7c5d897e8c13d79a25fff95d6e1c8533427c5d6df2d95c5f0fa98ebcb85f27f3401e357747fafc582b793752df81a0070e24e662d7c87059e5bd7295420db843d2a32dfe4b22c351d477bb6a042c697237ba6258e79c190e40e8cd71c6546b5a5c9ee9a332659b7ea391b37e99dd9e78b3faf97df5046601c1a412a63cb6d84af628f4c5c48a1d6de6205946d74afff4e5768cfdb4e65c6953cdea6cfc7714c7f7812c9e0dea1f3f9e16d9c20d570c6945d14dfedb3f367d91fee9624734f8ccbbacab2b16710b920a8328cc476079f08fbe068c97134e150a24b453bf35d1925b6d3facd4c22062a84d23ed1b24b933e0403854af4be3f096aba14270b05d99a62432395cca514959f6e323e42ba9829fc0b52785236ddebb443263d925d273417c6012fd0aecbe6681da921f115a8c78d072bb130305c08d17e43796ad2cefccff9ca70ae0b73df63044c21930bb96072d08a2ec361f97804effd2ca2ea5ad4191aed76c2267275b93e9fb42ddada771705a6da54041213385840228e5b3d273d7d459d9e4508548a67fbec2a99407afc91034ccf7db2bc10122ce4cf1b805e55ea824501d0c39035026990decb6d3343161a450d3036920a94933a068aafab71e9511113a5dead20fc2112372f9671b7eb4d1fcd6fd5644017d07c690a986fa5640d4abce6e419ed419060a4daa4ba9f6d9ce5b7aebd7c2c96f0bc8d1f38fbded94a4c7f3bae27bc616092cfebf1f7730d35591c99960e8356d4ae52b7d8b632685f19050e861e428eb18c164570c89a65339b45494b15c886f21f15e5f7326cfeed9f282dd019bc227674e3e9ce4c45f624aef0c5ef10359200c2aca708aba11a51060c5b06c53b8f069a11bb195985a83f050b624cdeb818b03f799d33fc8a81a44ef3a34a6348760064702962bc50762fcaab63f9d7398afccb4174a7e071acd83fcfcc5c8b977529870b5cdc065b84423df6f19d5b0957e367639c7507e5a6b37ed55bb06f73489d539f49cd3573afdbf2de939f4fb5ea981aa0e9a6359551227a168f06cce1957e4e80f40681365927e28ecc01df4779f22f8651b08e050294ca4b87f54515915a4d06f5741c9ac78c333573d16d7e451c7ebdacc5c3914a0642dfceda51d05eee06860a402c982d25a67139c96f4a1a37a48ecb33a306c49e1b3c8b499bf4368311bdcc56a8e203eb2241d32747e1f7088847d033a4fe034691ab883389fa3574eb7d834b628e0855f671767c0deda44e8789bbf3402feabf6edfc19916565798a9c2089fe9ba75d0e2720177e2014cf4c23b4e2e9c0601b464369b4700b9d12c2b78f7219edbd9c794593e8b3cdf91b68194d48ac3a2153502048114dd4ae1dd89e16cfe2889cdddef5ed622bb1a05b37d70d045e05da44ae188f3626fbd5a567c8857645ed2eb5f8e4a3c218c645cee894cfd702fe1adec0d90ff7d173e124f676cee6295cc173dd17a998e8852018c54b993976c8dac0fcd36dacbe05edeb4f226c57a53dcbc76c4701f8eec6726c4c93d319b24611d194da4668012dba4f740ee4df9741cdec9929620b439f3815c3df49308a3e6113a8f9078641ad932892fb65c40f6cdee4cf16cfe202e74969f7f5b69607f82d3a78d9da4e266d54e17d85e53f9c00663ec5c64985769562df87f36ec693cb780ee0900fd51d54e8854d328fa5e858a1b44aca651df8290c24fa6175b9119645870f01faafd94c0d4b99810f56db74489e628fc61b298be970cdd335c9c5090040788420b7b6d6e7405c5b4a349747a5ac2db93a14bfd4b89ae805c52c32bc777de04b466c8718d277624d402e97238c9686bf413551c6e1e5305397767db8d2aa941b2e32e3d6cf7e2049083493133f0592e780fda9b5f41ea0aff5f0877c6d0ad6d1ef1d0fc7e658e73edd1e546a6aacc098a407506af9128b7a5238a7c233fe7edf27de30246733fe0625edb3a3a5520a029c1cf9e46dbac1f112f1e9a5acd0668f57af5a62cb8de25929fddb3f12987d5e70f0d529264545b7cfa521c995dd9095015599a734d612986ecfdc6963e45249eaab35e22bec48ca1720ebdc9ddc7703612ba1035d7440d5276bedf629d07868245e9c73ffae4d61934b424117e4f64f7f694b47393ac03a5ad3444ffcf4886260041bf2fe90872a97af2a3342d820c3cab01", + "0x3a636f6465": "0x52bc537646db8e0528b52ffd0058f41c04ee820524125110306b291df7ec1bbc35021becd0370bad392219fb2238ceceb48c316bc12c7a11911586bf0e3140e7c0b16cc35ff0661d0ab1738ce914ce06c7dc9a10bd34368cb56fffdbfe2664efbdf7de524a29650a291376109b10d43fa5f9d446f3a95d693ec9a7de349fa457dca4c63399fdccaf20d3ab4faf994abecc75c2da671ea74b9f3365cd8fdcb79434dfcecda7ae4d49f3ede07c921d1b8dbebd6f749672a84fba7ce293a0549a30e9f3bb66c39e379aaadfd43a64ee09a30e353b94a0c41af44fc9ac6fef306c1dd331d83aa6532ce6c7faf3cb4b2b62d7a450f976fb5d9322e547eea773f389faf4703a951e7ed7ac08bdd18449afed530efa1a87d82e9f44e9eddd7dfd73ba9c33f74c4a205f7be328631e14777cfd7de3e3e6d3c864430851fa08fe2c80285d8874299aabc4b3164e909b4fa37ccebb7b481fa97f141b40a4ae01cddc374189eb83dd63891cf453db3721727d1494987ed8e4827dbe09d8ea1e4b24eda714f0d2a77728a4d2640844a4bd0422692f5d9c724af1750f35e0843e13d61ffaa813d60e35bbe9eb1ba33ff5848ddc8fdcb7f7e4014ea7e9ed5f63205297ff7506e2d71206b16b51ba7cd7a07cf9b1c64f1fc077ed49a09fa18f21a2f4ae3db9f3a3d283e07cda9c7afff46f863eb6dc72a80127049ab07eea4c0da012a875f4cb9083d953ff244871ff86e57f32a4fe514c25a77cd409ab0e447cea32dca09f7a873e7ac246f0a5cde3ec2d47373cd61fab53d1bfdea18faf430d6e1eeb5fe77cc3a3ffe6148fe3385210421847f8cd7bc23687a21c9e923df50d8f4d5ffd93e0c5fd14f77728a43e75a809352d9ea24fbde29e30e91dfaa0b94e9874a8e9df36669ba42f7c2da7d4240962d79ea0f951fce9b0f934824af36984fdf4e939e693fce9e27cea1a2dcd4f379a4ff3a7f7e4216363d34fefb00154aa681dfd50737adf98596ac7b78d999472ccd7f3ebf955ef1ba3f8d4bfda53bcd18475ae1346bdc32999f5d6a1e66731d73aa87f1dca3cce5e7ae3517ebbc4228ee0531feb5307e7533b7528daa10fe950b3cea7e9d4b9ee619d7ad73dfaa95bdc74089cb09eb051e9a7cbef9a0d80de68c2a6572cbf6fd02c257edb98512971685946ec5a163c2f694ffd73b5f78d51d27efac7e377fcd8593fb64f87a28dfb29eed6d1fe49b0711151aabd7f94b41fdba7cfef5a963f2f5ffa0c8348dad33c4adab77f1d0a11bf3ac54dead73c25b39e7ae371f6eddd3dc6ea2f20ded73ce57aea9de777fcd8593fb64f87a28dfb29eed6d1fe4db0b1c412a5cbefbea05d8653fed43b9c129fe6a609930e35a126d4849a50b3714f587bdf98594ad2be6dcca89c4a7c92264aef096b6ff06b1da2f4f6ee6ca89170e290f16cf460238d0d3436acd8b862438b0d2836a2d838c146161b586c3cc92dd89062a38a0d2b1bb40c45c622f371381e032e23abc960b2991c26c78091c82f6418b2982c439e01dfc958f90a2791a3e429380b5b81ed602cf017d92a43c956301adc4326010bc27e300fb9842c0543c159e041980bec02f6026b81bbc060f016784be6015781e5e038f90b2e02d3c1476037f80a6c04c621af8073c857b055f682a5649a57e159f8152e283f712c9c8ecff13ad88bc7713e6ec7e57820dcc5ef602edec75b70187c8d63e1295c0c5ec15ff0205c06fcc75dc08170141810a6024be133602dfe03d68387c06c1c0817023f81b3e035d8074c048602c3c17dfc8f43e17bdc07dc8403ca3a6035d889bc037e93abe42eee26a7c14ce41bf2991a6f6ac0a9b1a6469b1ab51a6c6afc50234d8d1e6aa8a9c1438d196a8ca941438d2e35acd4b0aa11a506141a65d080a2068d46568d2734c8a0d187461e1a56d0f88246201a55d0d843030b1a52d0b88286201a4bd0e043230a1a7f688841a38b170f2f2568107a2d4143091a4fbcf4d01844438b26169abc34add0d4a5c98526304d2d347d6982a12986a6ab26129aa6344969b26a22d36443530d4d34348d69c26a9aa1498626314d4f9a6e6842d374a6c94c539926159a526842a1894bd396262d4d599ab0345d69b2d254a589ca2b8c17a1d715af412f305e5abcbe7865f1c2e225e865c50bcf0bd0cb881713af3baf235e48bce4bc8a78e579a579e9f092e125e635c32b86570a2f185e2bbcbcbc547861bdbabcbebcb2bcb4bcb08840d620f5baf2aaf22ae16585890f13144c7a98986082c39486c90526304c6598b62c7db1548217094b602c65b184c592a0a52b96a05872624989a524969658c2b314c5929b252296de2cc95982b314674908a52e94c05022a4f4855209940a298da1248692174a8194b25012a48485d2154c4328d1512a42698e521da59ad20e4c4524b9412a23e987241e92cc20fd49ea21c94a920f496592aa245149ba923444121ba42e90b8400a03c90ba42f92d62001429a02290aa42c928840e283a403d20e486a907840c2018906242ca41a90d2208d41b2016906a41c904a40ba729d1066f1b042128e78100175551061e16a473b147971a4c4119ea324709ead96d4a6cb02a90c121924335d954e0e51a1253e358458f2b3a4a748cb05e2fa916390a4181db105d15de1a27556885bb8a288828e8ae8b428c2234231f2a1a5e7480dd1174460745a5a4c101152e2417cd2e9e9ac2c8d41c487480e911b222288de101541a404511c223c447088e6dc2a88aa20a262488f92159c105c10db9b8dce501e1a630c2df1f2e2d5c5c6a6c84a0d1fc2329b122f3b442c1079211a43b48258c5d11177869be576b9295c19ee975be692b9365cac4bc3ade18eb95e2e98cbe5be7055b82e5c2d37cc157359b830dc15ee139b7569b68c8bc26de16eb9666e0c368ab5b250885a2002933426092b6986241992c424c5900443d20b4961925c480293d442d297241692bc24ad90d4254985a414925048e292b425490b9396a2276219ac03d11434b2706d3942624b33c4a668900d12bcc661915110b3289a5364470c246a215a2162512447bca2a888223a3c442e38268ee474588457e21762174c3f0ce1e9ec74578ea6781b1b26d8b8723d21ca626990d19aa52dc418c41744179686b051829826ab40140327088fe1b2429455b4c595820b850d8990875087a13de10e2e2e442a1cd929ba53e4a6284e2b8b83a255e8684e1111ad12707c88521007717b5a651cd52932a2a84e119cd6182e2b57094c6d5a54145d1565a1e18591106109e1094c4e7446746e2e114b59d74d07a723e2beb9703a2c9707a62744508a4aa8914351151a5414d1ba37dd10446474755e3b7c3c7c52be34df942f878f04223444377c553c42de171e185e18df095b998dcc77e5d3f26dd9d61471d16dd18141c4860885a337446d383d476e8e8688bdb8745d1cc53922e205a6fbe2084ee7c58b8a170aaf2d4443d41842a9874d88d7109b115d1c233545515e718a4c10cd10897194a6688a7803d118e299221298a01449590aa3e8caab8557151c15dc141b139b1ed79416192e29dc1347743827926a99050e502788fbf3e282f363e38c38c5ab07af0d931c242db62236372d2d8e7a58aa6d70b63a4b768c7ab87198681d1b1a5bbcea74452c15518465288bd08c521613111b10578a1b6833b3d9e079e17571a7f0acf0aef0aaf0047981bc2dbc41db0d1b0e1b9a2d87edccb6c3a6c3a542dab0cd79b9d98e582a83a88ca53c448144323550a891420d158ab4b8578abab85490065d2cb28b5ce156617a6374c3518d0bc4e4a6e80dd74416e48252834bd116477798d6e0399e093588e07e30da82c88a1113a01dd008a617b83a1b1145543a402f2896da1c9539a2a10b84db80808e745862738b60a243830bf0cf521d6e0d0ee275e559dd1da23b4945e42d4683381f5e7c72961612a09fa138b90c77c2911547a7c86a1be2280a47e5a806a5326814c24b0cc931faa1884bd109344a70cf30a160e44497658bd3a530e444a7c21109e1195c73295a49f89b21385c95ad0d7ec2b4a786942333dc1c3108a2308aa0183521d2960a3151e9bab89fee8f53d171c1859c8d77b1dd212a01d39425325e518ea00c2931c44488a66bf3b27a3d51aac208881b44e682afb8b2363b3905a6393907e762a8091f62688a1a6ef00e1d0add9617142ecb26e715e82565e889d7141048291205c9456e0941469129482b0e54cda6462073c26489d422b3c82a1a903724c980071288800f087420e4011c3400c8061a2c00a6000b24940b7628c931000110c0a9024903f7e493dfd2b5a79b348a49910e0c09a148140843867c927e90246ac8104f878e2130ada1163e407244840ebc86bef4078e7820899228aa22514b8c3039c2242a49940637865830324489079200418244c902a88c442141a26401150c79d931b4021224458c20415264015d40a0fa409228242a745494078628a11a4205c2078e4485c06928856682e44811aaa80f8644457900c7100aadc403498e0c11c1922811a6861c09e1a99244814004453af0212e1d6524899224438a0c3912c2471949a2e4015449445062c4c8cf18daf2811223511fd418d2d24c4410253584091311440549a2e40813265112c043593a044742f82551524b945440081ec2d25154453e3882a44893215122448900010f3e88fac0078a7850c1d095662265240a0423569a095592a82551202439e24355921cf1c06b884a1b39c224c991255423440d110192104228326449d407488e88109332a20449ac69e88466c23464421719d234544283604811aa221f14a18a72c0d0d0d5088e20297284ea489223474324b4941125483a30248a4a0423512344110d4de9254a16000e4969265147a88e2c5102029508458a86ac3a89922354459688f0c1102a2548980c3912c2175922c21fb58c42d28122544944f0c0102a23514b8e7c90e4c890214bce99d9be2ea20aad082a5e7ccfbeaed1682f6774e9725038283204b9d5a222b0a828491487869244d148a441831a19514aa9d1d2d2921135a246467469b6b5b5dbded9d79b76de7bfbde9be7b4f75a5b6d9db5daa87d5bf6edd9ddb34e7b6f774b79af9c3ded6c79efb56de595f4ce3be76dd9b7db5a3ba7adb6da9ead69bb72ddf3d27be7b51f57a7e5ba4ac4715eabf62df2acf5b63ab7cedabb71d3ce9eb2ed9c745a3b6b5f6bafedee591dd077cec941dfbe72de69695f2ae5bdf7a3b7d533e4e6b5b75a6b996edfee1bd3ce7aafa5d3da7a27ecde396d9db3b6b5b576d7f376ad2d5bde9eb36fdf59edec0e626dd86ae5ecbe5576f79c7576b593ab2d8fab1d11b76d9bb5dc9cd7d6aecebeb4dada725acb7513b7ad1cd7d6f6bdb7d25ae5bdd5ca6aada47676dcedbeb7efedd9755b7bb97b27707174ce06f4e492bae7f48078b46ff716866dbbabab72f24a8febda498ece6e19864ca1b4ddb2a81ba94658370893e69cd376f77667f766bbafc7d9696fdb683b39ced2297bdadbd3da69e7bcf7369d52ce3befbcd47295ab5c37314774efec6e0dec90ccd576276d755d39e56dcde9b3657f586fc6f551279d734ed05edb5cf7e4babbbbc339edacddcd4ddbdd7baded9a769daeeeb6edc9596b611369360316d0dd7d67d26dd9ee39aded5cb1eece356dcf9eb42ba5ddd49b96d27bc339e5ac6f6b77cfee397bbbddd31e7d50ddb3a7b573f6b4f3a86f2b60da696d51d19cb6d6aeebe6388ee32c57eb6cb56aab55ebecba39398eab5cb5d6daca59db6dafbdb7ded9ddb55addb4b3b939bd4b2b476bdbda969b1cc7d96ab9aeb676adad04c8eb72755dd74d39a79db39bf35ee99a7376b39b977a575e6bdbde2eec393b4f4b6dd7d9b6daeea694f2524e4a04d8d7ebf5a2b356cb5dcbdd7b396b6fcf39c3eedb073080adb6de3abb47774bcf7a73d6b0762ecd696b9d349c35b4b6bb6ff76c2befa5d5729552aca4a4a4444464adadf7ce396d9d76ce29e7ec2965cf9e5dbbab94cdcde638afb6bc72b35a3aede46c259addddbd595b2b676b3029d57aafadb35a3be5acd6b69dd6da39674fa630bcf75e39e7b4d6d66927c7751cc77195e32c77adb556de7b6f01b87a398ede2b01800347ebde3befa5f75aeaa22d8eb376cedb7d6ddf0c783c71f5d28b010106000001d04b5d13547a6ddf0b76d4ba5d5b6bedaaadd536776f17de69e7ac76bb73d27bbb7bce6e7aefb4a1c6860fb4a8a708962801411408eed717443589423264842220a891d4177c400992211f4872e4031f50826409c98f4688fa20c99121498e1401c188073ca0245bf041d492a80f962819f2848100a28e2ca1a2600048901c91da11001c34603a60620e11470e0a2ad881f401922320181942854484221e88fac089004f33465012022a1a4f1808c0870470c1100144491541d281211f487204042645407001d8a080aac892a824511f583201d8028862c2246a490820506264c892a8264a8c442d195284c90746a2865c20f5848100423012c584c70c0f1c29c005186020800fa28628a10a41044b8cd85852848a090e24264b375a004a942c61923252a4034890285942815391a8254c2288921a42354254121a4d54511f581a6242c5e4c808511b9591224c921459423584ea080840a00426b6008e78206a4908f96849912824465e481f24890a21842243a23e506489122a26b22f00018d8e8a5ae281214b94501531a2040992224d7d4114088e5025116149cec0035422cc6892248a1ef50543922839c2644954932123448130842ac99125210c31c2e4080886508d10d5d42449148581806657556d557636e388f4ac6a56359b715c5555956c223dab9ab33aabaaaa9a49d98cca66b50b89cce4d7b9aaaa2a9db4aa1299c9aaaa594589cc64d56c5651225d359b51d94c56c999ac9a7d1d91b644aae4ac6a468954c92a49a46755b35955d56c7689f4acaa6a563d4aa4abaa2691ae9244baaaaaaa6a668974d56cce38223359258954c9aa2a3bdb887455d56c568954c92632933dbb334ba47b12e9d9ac1299c9d96c4689f46c3689cce44c12e99924f2004b4576b7040193221d78f4f00b48a5d13ef4faf43bf489e7870e3527f875eb70b9f5895beec2e3ace18fe9ad4c7d863fa68b0e4545fc0a32bde5d35b19bf82783fddfb99995a07dd44caa363d427369a30ea2e6fe1fed63182be8542bc079da97b50b7a19057eba00e66a6560b4bda77a881a4610d39d414298fa14cbd5d79e4febad474cfc7e9cdc14c08cff3bce932fc217d4e20d33da956eba0ee6a1d94f6b575d00d8895f6e4c3ee0bb3cbbb7574a1cb5be048fff3d6e754f75b215ed272810e355da0b7be10f42ec7973b879a50b37d8ed27b4a0ffb0e6d599cb09bf3db6c542567adb97df98c88f5bb8602114644fb5d43a1d6adc346188621e89f87611886de37c269f57ddff77ddff779dff8c8e8baaee37cf3aeebbacefb4607c6e65ffb79a3508ac6f267d687ad639b989bb0cde5e68de5157945acbe6d1e760f1fd3b7cdc1eeb179dfd85cfe757777b7ece9c260eb70b9c4d28ad8f2d041ff5c5a11bdcda515f1ba1db977b5bba6bb5c3eb10b8acffacd23d8ddf48a7f8cdc63cfad8ff2a787e0bd979378138f555f3bff5a0a89f73627f1e6773e76288479fb5de71d0ab9dfe59eb0b1829d9dd63b0a76d6e6292db823f777723ef194165cffa8bcdefed539fd9b41baf6338f5060d321eb5dfbae71e9f36dd9fccc75c2eee53824e0db697bc27cd45c276c3a276bd667ad389fb8cddb3f8b8154ffaaf51a75fd93b3bf0a76e8a3f3eb33f401452f3692b636915f2daed69392eeb4e691eaab5fb77804dffaf7e73fa73ffff38be5bf80b41d2cffb9fdfa1d02d902fd975b5a30ce09fb2678b1f5afe56cda6a6981755a3112f06b94285d69c2fa1584faf59ba5ae53eff7e2a75789fb3bbce3bd7bc86ff7ee043dbc79873997f87a8753dc37711bf6d62173e79ab91114eb181f90cdab7f158fb3af5ef1567d839a95eb1c6a562c9ff3eb9d8fb3bf5cfdb6cd2b6e227ff34f82dbe6df9c52d5ad77e880ea96c3157378ec5cde2e8ff53b3ab93c7650744af6b3bfce3bebacd3e5ac2efcaa2ebdfac4affa55bc01d4e6f29be0b66d3e25b3965081210021f29c73ed52d537ff383cd6af4ebbbc64aa07d1684f45f49c534a053e2724040f2f9952c0cfd6519deabe37bf7a8797784e759ff30e830cf9cea12687a76a4c29e065ebe8badae5ee1c75863fac5797a18f8a390ecb3b61168fd3e5929a394e6e6abea64320b53294f647bb897d2e209c73ce49d02de81ee89d7b1e369ab0f60e8b98c34de48ff23997b8897c8ee3fc9b2d7bd696ccde3adaa12687a538efc4f9f4ddcf25ffebd047df2171c23cdff1a0cbd087c4a37c29ce3bbfd85bc78e6fffb03861cdfd0dc279975d1ee832ecc0e65e569ab076301bf584358747ce6597c7d9770e62895d3a1405f1e8755e1eeb7bfeb9c4748ef2411f1b3013e2bb738079f43cdc2fbb962e88d44570e2febb611d7f318747f9d63f097278b42e7dc32f99a7e4dfdc3461ed15fc266dd6c74d27392a89de3dbc75486f6f9a4f46d349fa7423ee029ff44fd6e97f9d9b61dfa13a6179a4a22fbd73a3f9f46ddfe67979f4bc736ff39cfae7e1065d861ad4f83a619d6fb81fc454f43dffe46c495b1beeef0983cda71c4d2f5de6f1ba75ea1f95f2e2fe0e730ac8caca7a0e53d997463f47f8eb8d476e0cfb0edd9830ea9bfb846d198a36ee51fe94cccacacafa8ba9a80c7d74b6599cb0e9b4fb9be6933ff51cdd833e1d6fbc276d0cdf10b1dda8e84b62cd7b5ef7e8e17d4b0b46eec7fbb4795ce944a192b0d33afac73600541274da82fe9947e9e315f2bdcc63d53799ff8125f2a577469ef881201736a9adb16b48d47ecaf5d2a9bbba4793f1d4af34403f1de78f17ecee2169128c28fd93a124234e879a7668edc6c754a5d1ba4f55639fb87f5a1a40067ae2dba7f4a4012aeddbbf0da4d2bfde388ee3eee4382a398e83b5a46f51be9e9f0324ed691ea126f56eea9d477ef9ac5b5c4494b28ee347dbdfb52d4ffcec8fea1e4b763c56fbaca770e9ddf966ab293a62d7af8a62d2e8ab33d958238e48defa8e1f8d7e6c4010e898d5b5585299b0ea17104749e5ab8f0de8abcbda45eaf4c5171e5ce0014d1f1a2d765dfa7771c724a6551bacc40005062062565374c4a45f15c5daada6ccd8e657098849bff82a013159190fa4cbe41d59190f36bf5906b56559190faecb2cf3bcc37fe47eec5a4dfad8771a0c12e46061d1440d5120e13314e80001060c1b3d387411eb58fbb8c303a7d16292ca7cc2f17356305f8f71c7d799ab6bf55add563d7569fd7ccdf656df72929ba590e4ebd7479a47d957b7f83ac56de7cadf8cc5591fabfeb3580a49fff9cd6d92b683e5ad8f23f8bbe524fde7ed4d8200abdadb8ce5a4ca823c6d2cc8d3268f233c75e95be87cd3776d8b99ff2668319693aafe13ebbca76856d663d1665491814b98251384391387461542ff792c9a0579dad09a20c0aa3602aded6089b58f23780ba5ffc4ba4ceb3fb1f651f6368f6d806e0bc6ae6599e2a9e463d190f8dc10a50a1a2dd6d94915976956ed637599c7109e3a87db2ba63e430a5890874d160586a2e033431951b2b262408c7e56cd999db7863a9facc52312ead66ffdeee6dbb651219bdb3c5edf3256a7413fd695c7ba5cc57919ebd796a15dad5e73884660d59cd559057d7d639458be7a770fd9df9447e7a3f89cb77f9f7bb5c39cc77d153b2c2be341e75c9795a853f5a64eb60cf5ce391f95be7af5af82b27bcc6fff3ecf39f7e0f3ce6ff6c073ae7e59f639e711e858e7df0bc83873e1af5bb7799cd1f0372ff1b73efb0e81786f33d4f47006d4a9fa8761b8a9d3e61dde419d6a06b0af4e373c76edab8f17063ee7dc03cf3bcf6ff6e0732ecbca5cffb205a853f589c7d94f1b2ef180732fcb36a04ed5b9dcd4c97a043ad60175aa7e4321d46f1e3bf08e713eb69eaf6e2308b1635e2e43bd639d8f1de7abd7d0c77428dae18e71b863168fdd27880704bff854863e661e673f644f495be304be5b87c4a2e7c71ef4d5e5d57c1a5bd008f36994575442c072e7ab53cd27f9b50b7df56f82b27bf4b7cb20f9c7aa47329fa857ef1b354b492cdf36aaeaacce0dcad7f24aecda952e6fbf6b56d47c137dd4fbc6d8777efa4771953e378fb3bf1f05291a09ce1d6206f369146134a4153134f431441cc571c78e0c260fa7d168b4d874a8c9c363d337984fdc4fe7a07bd09fae262b5f5efe8c866224f2e18f7ea262a9a0b56265c11bfa20b481d7ab1f60f2e898a0af5e696d5b6aa345ddd53d68eed6216538441c77fc749b6b36cae0ce4fdf81e7a713603e49f907f8e97de7dbc6cc4a5b8234b2662ef70d3ac2e70071c25c9fa480d86103665feb4c4a06fcb0802169c450d7ec5983ed529da7aabe7d9c2e3b5359ab92e6bb5685cb8faeaf5ec1778d4aa0afdf27430e66df1336d69ffdcd1f0d7dd81972307bf05ac75503f9d7a126379f5e3fe45fbf997be9b64e193e074829896db091b27f7c4d01f0eb7faeeb3353aff64ea7fefa319d3abd2ead4bd1ebdc7c9a7fc1879a507326a58cf33505c4cf55c5cdcfcac14c666ec2aa57ff5c4144ead3a7aabeb6fc9a3bf0f574d1896d0821d64aa33e107f7d63dcf1d4bf3c722fa574e9ed546a0c10e78f4d4fa9a0f9b1de984f638e1cf3a93a759f4f2ed78f301e3d9d6ae5e693d474ce7bf2a8d3897a7bcd23f75d877ac2daeb84491febf77cea1a95ab6faf3c3ad6dee1fc31bdd6ccf57c9a6bbe9e277cb126a0796bc298b7d6fae7b2def3a9fa08526ffff6517ef50e81549f0e35fb86cd520ea59b07a5eda37ae326f5db2b06227e3ba54d714fd8c440d2269daff55d3381ca1b3509faea9747bba1d162edb46faf9fabcea7ebed51befdebeed1f2ef9b81dec2dd3ac03c7e53f3af7f799cffb974108f550fca6f8d4caafef3ea9e77f7e8bcd53a5a79fc9c7ae81deed611e61174da2ff1d496959555c65707f138fb21bf3ad4fc70bf87a56a6e22ff3a90f9d76918a4facce3eca7f77f2e310d7f5c6ff9875f405e861a80dead433a14859a209e9259cf790bbf420d36eff228bf730f8ff23dff2e1ee55f0fbd8642aa830e35bf9666c4ae9550e8ab5ffffa9b60871a84fee5b1fe476713ee5bdeca320452fffaf775d8cae3ec5b0ee226dc83fee151fee7dd3dc03c828ea4c777ebf8fc7328fae10f53efb095a7e85ff7713dc4e30d52fdbaa141f9cf3d6f97a10632ebc1dcad63fcf294ccfacfad77b841ff97bb73744e3ddcdf61e957d25a879d2ea743cd5927afd5e794871497bbf7e65290fcba8ee95296bce501a02ea504e94a6e8137e5216529cb889c32b9941afe793b477948d92125c997bc5d89f29082946548ee72f9d290bbb023b90c29cb866ef892cb901c74974ba159c6712e6699e81b7519cd322e97205dc6390d1ff2d0db45ca438a97659ecfe9df529665df6c380e9f9b2fb96cfa529659eb6296792eba6cc93f97529d29cb8c8c9c28cba87759d639fe5c86fdcb324a5df6f9cb8b44d1c12cb3d6bd2ca35936c33d17a98b2e035dcc325be432eb4e3e81cb449f20cb8c8cfc28cb8e7cdb9c469619d1f0a3edc82770d9e61364198d8ed27059772397002bcab2223f3af257d1d151761b9ee7346678dee775f8680969888adbec3c24ca7d47d6852d38b9a521d7e4f02652d1db8e3e0b222d2171d83564bdaea39fb81d0d812252072e0d6d939b9e0bdb236a8f9628878302f19b2efc79054313783870142d7db4737272d97427a70e09293b4ce41c06524081cb3ca78002bc6d2ecfee047aee646130976187e18071ae23d1b353b034e41478052e43f20a9c9c5cf6b9d3044e5e81cb3a8b03c7873d3bcc1e396ce2c0818302976d4e4196e1c03144bd82092698e132d067749edd8986cfb08154813bb96cc99d603000f8045906731b13b893cb3cb7e13231dff0a2a2b9e4d971cc98e13668d0f097cfb0e1335c36e43338c7e1395ce6f21c72479357e0329757206fb88d0a3c87cb90dc86cb3877823535656f72f22697616f922efbbcc92778bddc068d2c9b916533dc86bf68f8cb65a0bfa4cbac4fe03097890e9300c0e1b2cd716419007078ce3200380d1a0e7319f5ecb2ce7364190514f88d2c7b65d9cb8b8abc29cb9898fc95654d5e54e42f971df92bcb985ecee4323043b593f41b5e810d90c8676419539631f90c0741cf2ef33c6719910dcf2efb7208ed249dc82b709997476827e915641905b904e9f4f90459e6796e946546fe4de09fcbba6c812fcbbccf9bb2cc73b073d0653877d04ed29b5c7694376827e9b02cc371e400c8b29c65d927c07e23cb6cb8e72c6b2bacc4a093d542175aae62f80812b81851022dbc48392226053bd452e6da493ace32cf8e94bb9da4d7c84d9dda69cc58f2a62c7b29395396cd7ec8e18a3b7a66a8c1ce0fb1a5190b509ac8d2860931f4b8105b72d950566a27e94b59a6949b3a599047d8b7cb5c596c27e94999a34eed482ea3198476928e946547b904199332e44659e6f2a25cc28e9814ea445936d4725796cd64c022034b06425e60b1458cb613837288210b0b84da88119342dde5323167d04ed25d59d6ca4d9d0290c70cbe5db6e51ded243dcc4ad4a95d36339176920e66d9974b80c5a45cf7b2ec003cacc9e28c17490cb221d6e5123c26a5061b307410a2892925b8222665fae6322ec3da49fa9665373775d291c71ddf2eb3d9db497acd22756a6f9fd12aa7a923eba34094ce8925d066a09f73ced96452a794d22b354f29ed7a8332b9e2e2f3697afd39fa0d120a3dfde923f8a3cfd8087e379994522aa7434d3aa7cb39a72b3551299d7b995f41a45797348ff2a5cbf97a3ec996dffeb97a3ef5d3f4fac9d0879c9fec9056a72e9d863ee48451f9339cde61cd3ea6d4823a06624fd8e832fc31028d467bf2d2bf09f67c92de5ee7d3e42406278c7a0f71347aead3ab8fdc075c1e7bc2ae8bad71c609a7aa5afd9ffcafff86429cfecbaf2099069ab0ea9d338d5ca1afee7d994f5d966198a418d1c5881123cacdfbebe650338cc879ff4805cd384c328c28bd72598a203e95e831d94c13a6ce0bb458550dc4c64b9b981311c866311a4ec28ed8941db132d22d95f94405cd27f95fbe7fa4837ec6f9ea93ce0c1a68c68c331330639462beba1cd334dd34493133014db2cbf78fdc57aff3e9751debca632fefd77df97c998097c54c9d4336f9cb69e8c1cb5f339a5e5e98a469811d57fbab365bdfb53657dfb44d50d7ea13ce245f6083e7c59f9b4f3cd60d5f796c03b72dcb36afda362ac3cc762ccea1e6c4b2af3e3187af3cc681dc95c7aedf3cd6047059c679d5e63d3198b5d0d7768e4e510cc6aeb1b17aaa29c3d02cc3f898796a7be96178f1d5bd3f5fbdab7e6b6efefa574b137abb915293df80cda7ebb5ebc00e049d03c1cf3f09829f7f5fc73afca45e4136b7be6dad2d48b771ad6d04fde55dfcf2f20fce3befb294f52e83ce7560e71d02f1bc5048752f4b591fab3399fdf51b0a61327bd0a5ae90ea5b1eaf83b9f38e9bbdc5a17b78f60ad279e89d87fecd1ef48b5df862a9d06be72e6c656565e5f229dd17c8f9d7656c4af70523fd9b650c8a4ec95cb863df14b551470c9d06a9fef9cd63e85f7e7dbe79985f5f0ec2f975ceaf5fec39b7715b106ee3ba3c5efffc93f2c6eb600dcf57fff008bebafcc3fae75ff630d8f997bb7574ee5f1e3dbf0e353fff2b9f23c0f778806f6fca3df9f6d68e0caae4cc9b2009d547a5b7d612603e4df0d6958448f3d69b6eec783ba95beba0948f86f9da39cd3684106598afde9c779dcbdcb9c49cfc715d76d28c67418a5b9e9c3ebc8c254e97791ee749f730e8176fd73f0fdb7cf187b9d03da79873107f0e45b9cfab7f2d3cfb6b50e2d0bbce69277db3fe39d4c4129d62eb5f87601e650f7a54c4571e13bd6702c42cab72794f0c3c97f5c480bae8b097ee127f0ee2e922ee980b97015de230e3f6b00d7f5ccf3f8fe336bfd8c9da5823ca30df320c382f96d96f4e55bdf34805c466e9148fb2254d38bf54d5af8f5508ecc7aab7e3083fb67378aa8610eb328fd437aaf9d6db3acd4db82c25bdff52cd0dc7d33cce5ced32cc540d1a04183fce7ea43e83a0f3b0873d0d7fc0bee0e802002e1360b941c5c6557eead20a3f7549f3a72eabf1d447a0f1d4a9663cf5109a9e3a92d7530781e9a97fb0f4d489283d750d243d750b203d750f8e9e7a07464f9d83a2a7be01d15367c0d05387129ffa015c4f3d83d6532740f8d477804f3dc7f7d461de53bfd13d75e79e7ad3f6d495ee5337b24f5da44f9dfb319fe6571039bd76eda5d31088bf94fdf5b64170fc48ef389dbac5a3ecc7f61a04f6548699b06e62bfcbe2b0be397bce9ba33ea594b27dce29d9cb4e48a52fa5f4a926e95fd7656ec2ba3a615d936de2717a13f19154da931f3b9fda0a3dc9fa26dc26559dfae732775d9de2aca03cf9254dee73de647b26b3e7ae7723d57ccfaf97a764a1af54f3abe71710597bea33f441fd4e8a9bccaffecd293b47e7d7ad5f3c25fbea9c94d8e5c8494d2e8ff539975dd775b29ffec864f6ed73cb3f5ad69aa5a8d32cd53edba56fb44fb620ce33dfb51fcafc74e1bbd68395877dd7d40421fd9318085594413fced6dc1f45c8f2e6db5db20591b6f9aea529f4d2cd772d07359fe3bb86431f196ae0d5e9f353440681f9a9aad68f5452f05172e147aa312e7c52fc48758214f647264ce850810f777e64a2e6ceb7d368df9df5eddf3e51f8a6e46f326bf03966227ff3b294740f87da57f05dbbe1cb2fe9d6319d8afba9cefad02d1ee58fcfe70cb3084a4fa5f43277ebb03ff1a841ff6dfff078dd9aa91efad7f28cd8351cee7ce89e7ff6f35ce28969e863f482d420a173a07b38f41906e95c7a873f3a97211e6796ad43bae7201ee74baf09f753b40cda53c99f2e7fb6492ae52bf4137cd7d0e0e93800bdcb3b640038879a3388a07720164104f30bc8a4d19e7a158df652d4fb3beb5d1e8fbe497d249dbf36e8ef40b74ff550f3bb814aa5d30bbfb025431f9e583454248a62d1908b88a83524b65aae560b0321fdce8dcac779cfa7ce47f0416faf567fffa27173eff541bdc3f33f0aa2795241104fdcf74c197ffffa6739ef70f5226e7e9dfa0e6901e739268c73d88471cef907a33c08309d38e708f01c27038c0013c6518996f39100cfa1498346ca7f54564a5b13bfa637d97e4ad2de73f91d960fe2d7f457e7af2e3760f65ec6224101b1d0bb76a6d077ed0c193f431f5f7e01a1df39fd2e577de7b97b74ce394779b89c7391f29031ce95280f22e7dca50140e7fcf3fcd57908e87c08e63c117e752e6333e6c2af2e438073f9141973b97f1224ea4074108f21a8f35efd8f4ed9b4b6c6d9bf3a68f9ebf3faf45f1018f2d7973b18ca513a8b50e8f5e7cb879af4451c45c65cf9e5e52957d6635d1120167a145719b1293216ba15478bb28545a4cb100331f4b6fee6dc9dd969c5f87a3e59c7f5616ffd86d5e7ef9a1929d4703923e84c9cff2858f1781d407de64ab394e8b5cfdbae60c552d3abdbd00193be6834b314f5e9a3d369413350fcd8f456e9db4089e777489d03a501faadd34ca59406986f7dca10c8054f6f68ed298304f5da819514277ca4dcc122050e9f3fb1e952fe081cb6d0092446186c624d9da6f7cc331c228eb09f30caa339e9a3f861d3a13277be8213d6d2e7f41d52c442f3d38d6007f84945aee9d0cde084d90c7ed7cab8a17366e524746710191ea4b8620916b062ed47ca14486c795203963db1f6ce3bcaf8641571b66c08f4aee393554429a594338c8fd68aad4bb9597b9dfa66adb53e43f9a75a9fd6eb94cc9aaab6d63993a092724eafd3ebd433e02e757a9d52eab669c2ae7f73f6a90e35fb0e5d97d75fd5e5cf7f5528aedb2d374dd8edcab58e9e557c5d7bebd5760f89093061b689df3161d63b1c9bde3a0d65951df369049b260fcfad1f8073eb39e693f50ce653e7d63ddcd389f31b930767349fc6d75bb70e726e09f0d65fdd43beed70d384714ef338c729f14a9cbfb6d796bb66c39def9a0d49bc11965d6e9a306ec3b675b477582f96df376c96ea9a9df4cc77fdbb32f4e16d3874ebdf877f78dfad639cfd08bab7796fde0ee271734ae76bebb0df6c3c3dc4db748ef31073de6920f3c879e3f9b9fc28e714e4f004f3077a871a78ef7d0eba034207f3c83d28c3a911aca03ca1fdd4188231c8c87a267d670c1713be9dc9ecbb3c821f88fb43ec80308f23fce76067d06df8c37bcfa168fb00b394f7c3f3ce53b21fe97bdc7f598af3e923c779d78f7bf6c93a44addf351bc8f8061de4c0f39bbb758e6bcaa3a7d328bef551fcebd20491fe98c16f4ebf6b3510fab1f5fce6196c4f23b7c17cdafc00f36902374f377e6c3abfb975a8d9349f26de6a3288dffc9be0c4f395e653d76a583365d3d6e646f3a9fab6f5200ae56b4945ac4ebb5603996febe07c9a6ebd6fd80290a18df9234df01abefcc87d0e0e50a526ea75836e3241346aea1ef2a78334e8f9e94a0aa03c6aad95d6c98dd1f3d37bcc9d9f5ec1a758d26aed0c7d1411a56ab5d502a9d6d6eaa34a5bc4981a1a5bc358bfc7cc70bf6b63c28cc132c60a2bceb77fdf352c31baef1ad6a03a29a5944e2ea412cb2b62d7b0fafcf4b152ffae61e979a309a359cc10717a4f576a9c633e81d0387e7a6351f9e935034069070a6586a0d4e9044fb1c43ca51ca881afe73782383d04e2746ec270d30ada279e922f9333390df0cd3e4f7de20fc4b1ef3c0b62fda11f7f7af779aef6d529fe401c39345fbd5d7e11eb8f1cedabd39143c3d568f5fef313cf4f9fc18b9f4e9fe2517ade790d39b05ebd8642a653aff8a392ba87777c778f0b5e5ef059d0f31d6f4321d447f9529e53e9a07f1dfe28c05397e10fcfe987a58fd4a55f9086416676c2f9bd53648c73275364ec5e77722dc0b913ce37efd0029c6f5e25f5f2d1bc98ed1ff4d4a5f7b9ecfa94cdcb8432f4713511ad7b7ebdbacb875ce621bf380a57e5c5ac77f7d8fce62a2f765d4807579d5b19eb70992905fc387b19ee7c3889f79f831888d722027dc452483e073df419fec0493e0f1d8a12e171f643f90584ba947497531741acee721183de21073257776511c41f2b8d26bd2543dae3ef9a0c5633a4f91bdfb519b0cce0e6821f7eb5c2700b39f0c3afaf855f5f68c3ef8641c2aec920e6a9e653bf6110ef3bb8390a9765b39897a76c2e6336c458571b983f877a9b65d7fad6dd5c657314d7755915e7375f79ec7abef298cd53ae141093328b59b7beddf965a909ccacbfbe5a25723271049b5f9f5beb52e6d76767619e863ea84beb1d76607353a71957752707683ecdf934a9cbab2c101329107a959152e84a4a4b1eded095420c4a0374fdcdd002b2aad8cb83191331e084c94177223a93cbd0032607b3ace52293434d8bbf4f861868f991bbb09396bb7c08cb5a3ee42296b55cf40e3150e44b0e358fb0cce5351cc4b29683b3ffdc13f190872e732d6599e8610dec44260b5df4ec3346849dc864a0879ee41d7361190d976197b9cff021ec04bb137727335c56e5a4c989fcc8654a2e437299918b1d7ad0f221efd002a21765d92ce672a8c9846532e6ca1663a0657d283b117de8852ebff45d7b01cd7f1627f180786f9fa0f3d437b0430c2cf9908338f41676b2e42ddf420c140d6559cb8fbcbb070664a0d77059cb89bc430f8a3cccb22507bd6344d809e8455e033b29f2253fc24e64a02ff986c7d9dbd002a0176527a117b90d3d58f2962b6159e845b9ca4992d7f0d02fc6c092b7b213d05dfe75680130472972d05db9ca8b0d7988abbc98d8ddc3e671c7635db51ccc555e0cf45152973e845d2ee2d0a16888654ce2b1861410b30cf4304f6979999ba59058dffcfa9077f7f8f2b8e337f7f2287d3a4d62fd3a147d178e52e443593663afec24671993cb5e2e7375d23907719422afe14958a6e449fee50541ffc95b25ccb71d2cb74a98bf2f5c7d1ff1f204b16b65acde47b17a993465b8c0f0c4ebf8aec140260631cfe3bb0683a01804fdd3772d86345d622814e7677cd7c48c79315e88d1f31f085afce27290eeafcbf77e0bf4fd670bf4b7ff20c0aa56a52843fbebdbdfff5aa0c52feb1c7ed90c843e710517da5fef9efb0e815890a70ded0b8120c0aa0624635db5bc4696c958986538d7105de63568e4aa263ff21962ae6a2ab3b9e8a1434d89a1bcf4217ce5b1217fe12b8f81eec2552e3f72a65c05fad150ae72b9cb432fc2b2596c294f69e532530a78a9b1a50563d752a0bd74ebfd32a684af3c26e364515cb22b8f55811e7a9127611952ae02413f725915911fe52b8fb5dc285f79ac285711e52b8f8179ca508ea280d890831ee628aeb16b28107a99a9ea4bef42217dc4cb0c02d1ce8f160bcd23e93befb330cf81a0b7bc7a531e5e7d0b29d072978b94471497b7f2d5502e737d16ab7ec30dfa6f16417c2af1a56c96daf204663171c65a5eab444e2669347184aed168f965bde5533cd6f2eb63087ff3cb660fc4964b1f893ce5e1ca4e4207bd3a270d20b392b420a4408dac58cb6d0864c883d041a7a107a0b7b2ace5a0cfb0835616a99374197610668e3a49efb003303775929e34e3a6a8c46744ace2d777089cb0ea463cfa022528e5f1557c5563d529f6408c55ea2f20ded33ce57aacea9da7a9137592b439671e4177a8dd88d82efd6b5c3f6c42e40ab17cb07b74776b8642aa6c6f1f4bb0288eafb35bc7f5ea126f7ef1287d3a0d7f48dff274ee1544fae6d2b72cdd7b99bdd64141fbf57489eb84cdebd36f28c4fb76af7b4cafa190af754cefecb58eb96d58d2fee291fbe9bd01713e711c4fb17c71b6a1f3d2f35bf9c9197200fac4d2412c35359841a64b9f69c4aea1f0c47b2d4b10bb96c49df71ef4efa3a00c35e0bc73a9cf3dff66dbc651d986b8526a8f14c8b021072c3488c9e3003159e431410b1c2f6354d1c3c928dbb66ddbd643182d7e2c148328dde6a029c01c3d74d07060eee8e94425d148490935a212c7c25117585cec499cfac5201f3c3e46542324ba1c68395c8905985ddc7b2f0c69a653afe96230b851fa441aa50eead2767e20e38723f41cb184952dfa6c01e82f9c2fb2c84384973f35a08941112715165075b36ddbb66d826e9a3ecdc75aeb7556460c102b5cd9405be2cdcc0412acf072c294327058413e016365d0193e6fb240e992e5a5082e7dc4b88ac10949b36ce2341e3c50d48ce10394293e0c9149214ea02865ea7c31a74f6b4e16465974c6dc191472798c9a8c949af8d09a2c14d84b5016286e78a0c1882cca3833e80918594f78387343196396b843469f407bb448c1014b4d0c1cf2f09192464b1b25cc349161adb52c1002b9dac21f7bbd9e3014856e5dac10eeb9b5893ed4a939ce05a24253b539548411c28b345bdc5982852b386f70d853660c30d65a1ba8ebacb5b696012e56e6d0eacc41a14b132e78c2949105892f2ddcb0a9d15102894605ab0c6e183506258e929b2f8a2a4a70c4184e6441c24a0621857088a1842758d45153850e2846065cb7591f44a3d148b8f75e2ef470d1878b405c0c52e282907741837571359dda66f050b3e3ecb66ddb76c33d81b6581a3439dcfb0468c352c60dc33d56e402c94fd785b5d6fea0405d67adb57cc828210a3d56f2c8412368c6831836357c11a8509f355cccd0717186508d9dd1c345e7429f1890a013ea893874498aab6f87aa74858cbbc77e6dc0ac2b3cc76e81b66ddbb060a14ecdd5eeb204c1d5a163b8de62cf9b31ded0808556a5c9175674b0c2628a3f5daeaa5ca5f0db16469637ddd5810d0d59c6cc505b13c5ca9c30bcf4b0a78c1e5c380346d18c4606153172b60863a68b2d335cc9a9a3a5842eb6f8420a21ec50d1859e12aeccf11204134da8c90246166ea85c552f8ca813dd93a1c75a13b66ddbbee862bf0803f5c51851498a6d8b13ee094292d1a7761d5a41151c683a58a960c20939c67802a84b1a3b5624c4b6ed04335ddcf9e6f5617ed6986df3a47c9952c0d46ddbb66dbb6190b5db367390a2002c7875d6c8e0a70b9a9722703842101768aa50838610961d98b621b0f4b1b4b7d4b6c4a973852b8f119ba03673cb7282c845fd2f5d5ad8b3596b6d56980e2a6b8c386743c2b37685708fd72f1dcb32280ba13659c6f87ba1f6e831f3d7ebbd77a2d0078a7b034d013be27a4f10d578e2041d18b054a0e204ab14c70b1d3d64c8a0292266ad15b9b0d65b0b0c6fbd0ecdc9b3dd40bb5eaf38ffb4a9b18115c61024051a2a4ad8e0c58f0b6c7058b3070b32e86419b4c51705c76d4bbf6ddbb6fd30284e4b0e9638e19e2e5d9f3b4a76aab5d66be8c6da5bc31745130260f2c1893368ccdc21f48405b6d0f9418a1aa408a3a78d1e403306dd189b419c13795c28b4870c0c73dac8a0072462880f0002028b0a3d41d4292376b540faab2b23b18441bf6511ee9938b2fcb8e0c78d1053bac440e6892fca8cd1654f172760a92770a958349c1972a042072ce4c8d12289384cf4d122083e609011e4c2d1939a1d20b85813830e325499f1610b0c5fac38e2aa8dd315634e8882900e41f0b0678c31b82e62b268e86245137dde70e1851516eb6a0c9abf5ec119074df8e74e0a57747726578707bf61d502561577ca74b9635523020c973e5608f124cf10b98a3a85cc74ea296938d12d99de8110137287383ca0a132063429f4f90be7ef9dace58c6bcb09df9b2d501123ae28d385ca0e59d41021e50b165d640983868a2c47d42a5504b2db0bf7de9bc255d7398531a7863d4060e1414b0a7e2c9b1402852d28f834c1860c22a6f0818a196a587de80b8382e0b3678a0a2d142ad4431e2c4ac0e285acac3648ac699a82cc67adb54c6fadb5d65a6bed10d65abb0de19489a30ef809a3e54c0b59494c6927ac8cd1a60b96174ab892840848de69c17b3184b828c2cb0e7d0a4591a6082c391cd6119c066bacd21401466d8b17fe8c31618c957b67db362e8f0b45615c69e189516786afcddceeec81016914c24c9628600a95a0842f2cb840021a2dacb001509b25aef0d305dab66d83b3f9f05beb374abd88f981883a695e78a126e74f173a646cc101081aae164b525c7ddbb66ddb9647b6165cb65843e80b23809062c30c5904c9b0c30f5f78f14541038d18e89460092ad48431a706a83b25d043870e191cf0b449020ba73e34e28457df153fde0c4b94276a9ed4047941a748ca1275f65c9185972daab857b080c25a6bbf1002396b5198f3d6deb1d612d99124d43cc0254e0e77a464a1c1890c601168093c337041c699ca050935f8d0253625421a211344a9654d17d3e2a6ce15385a8f0d5128e1a7ce155bee74392205314e50d1420e5bc4ac162e6faddd33820e6286f0e385192d94d01203187ef82451c49c306259066199f2046d4214420628356061040e41ccc8d4d27c49b38410377071e4c4b66ddbb64d51636dad4f0bde768503578782208687385b94e0c2192294be9861f3e6082ea09823c745829e1b4d0cc1d2039d42341401480d08c094c04d187fca5c115168080c1a98684342c78515f56d896d0c98e58a28c3e5bee8f202478d90b0d65afb58685a35640183115450d863a5b0c0147a9e28a402154590d173234b15247050618a1d665750cce0d112e64b0b5d60a9e9b0d870796a6c883628e0f97b6f7b51b3b11ceeb491a205d826073dded21d42540282ca04828bf8c4d5e667101613b5b3e20a278aa00f34aed62de1a7b6f998a2e5083d83f0a030c316b438246c4106991ec2c820bab084b5464a4bb85962cd746a1f57b42eece05d28d65aaf367380a84ca77e4056d3a9ffba0d7d5c31cc15104c9dce895aa585826a940a8af3814f587471618910095a18163c36478419fa3d7a5c34a32876b09ac28827290cea6090c2842b65f23881441c3c7fb15022098b2f615859e14d1779c01ade88b17343185cf0c11386e80bdda1df45a00dc090f1a687287860c10a0c2d1688da9c1596b84325871a624974430c92828f96397ce4bc929003440c42080126d01765bcb54850f17ad033673d60c5e0a7064259f0200526861f3a4c7c59c2042e63007163b0388213395094a34616ad31e3a776e7ca2a50029c50c1083657e6c8c913dbec1da32623a52623b018353da197ab23632d74e9709d30aa174e40d3c40b57acbac446a5076203f4db6f39142ac10e4fcab8f1a18c9811b40d983cdfadf950c7cc15327c9101081b26a84346d6971db6dc60c296db26053b447600656561829d31bc5cc9132487365300ea12a80b0bb1cdd97491e5b7dfaab8f96dabd383b5d65a6b6351d0809cb5d6da276bad050b60c2e77feb77cc8318aef890c54f1470b418e4454a0950c46c31869b2362f819746cb031e30819de640123851c316690d952338386d01c1574189af32111c20a105a7238e20527e8b8b0c20d78b4f0b3c60a0b96a32254b821cc0956e4000395199648b1e2094130cca0868d153f7f8dfecab1d682b7d65a2b013540ec40278a31666a3df0f9a28621c688d113049b13ba388a53e30a4170663033458e141d55d040869a4034a8d043ec0ae4f2d6c271aa47e61fe6005ad3c30f3ff86926b6d0c2e5ca9331b290e28d38c14c40a4092068008485192a599c156c8ce09382096e9e64f98223020bbc0244d1953b7488207386e0e10a3092a04185cd0d961151288144153db010dbea0aa19b6e6384152c7e18446788137e94d152823228583168ca10829ab4f851f3429c316590b873cffce0c6cf1a2fa414ca32a186bfdfdf3634dc09dce1e20b2b4049a8d0030d596688828414c03803050b0e554ba0223614702993268a17405778b680e9a30397ab2ce440f1c56f48bff5c1faedb7da06c8c093660e0c62bc2c314b334309659030c419247ac842c687e50a4f0157b8b5d65a6b6dbfb5d65a2827682077e68c1381bcbc99420b1662a3d24371c30605a03f7a2b06909723e89459c2072fb1047022c8511e463d87893885cad4f006853676883b326c2184202b305ac4acf70e6fed96b7afb708786bad517523a35a4569078d468b12dbb6dfb66ddba470994efd653af58fdc4b11339d941e6a52a1e21dc0ce2993850e942a584cd175cc80c9d246892c799c7002a4621ec0042b8e8d0954b60cec0fdfbdf3efbd7746031c392854d1850424c2b813a0f2c2943e4160d99112bb70a6f89bc51b409c63b84e89e84d8d769c550a5b96c85203095c140008268ce033484f0f53f0e953f9fc117b18294111676edbc51af4d45ce5a4e8223118436ba20a9c2778001d29c20f0e315491c6061fea5cfde6b585231efccd7d3e15e03787e5c84a1356992064add2a563632f0c9a8111f4868c12ae50b9daa2858f6d13831a578e27bc680163839f2a64c860dbb6cdebb6b9789bbadfb66ddb8c26acbac5e284d52b693a516914dfa8a995e1d6ebb536e5214ea7ea79e49ec914405d02f1c9428e0f3191f2986131e1050c2f5a7ae86226b661c9d3fdc627ce6f1b8fdfb6ed66517cebb58aaf3110b9af7fbd6ecef975a3f9d4f975a5c943a4d1684f62d7bd7b8837fe5ecc09215e973c7e0c3dd4a9bfe31e6a7278c375c26a531e3dc61877625022083d2454111b95feb2c1b2e2ef5f3660a8f0d7c1f9e4fd7591f220c1173b5a6ab073650a2962d77d3e3dfd7518e55163d777e41149066f333861d5af1ab17fac3cb858bd72025ae28bb779faf80d181110302080a0b79e0326a594d7e9f56ee954f75bfe8df93425b3dea96e90213ffd4e6f39339552d465ad6438d00244e49fb74c04faebd4250e22fdb1e3bcd5f307d6c17c1a450bcca7518983f924f14cf0633ff1d661d5a5539761036642500da84b19faa0148f24f8eb32274eaab89e3fa6530ea6b71497c77b9dfacd4e30f54f4eeaf2e620d2a75b6fdaf0c55d5b62d05f6c5f9c4f7dddfa77b124a38c32bec3acced17eb1ccfa0e699da39df61d02994fe6d3a483382dbe963a889f0634f3b0f2dcaa8c7f5f87bb36e737c13e21073514423b363fdbb301b32bcf09d9d1831e00f59cd330c874fde69f6d8d5558e60650cff90c3548f25355bf798740c0afd180990bcffd9885f92922cff9d76a8d5561fe76e7183997d7a56f1ce8711deed8d7811eee58873b364320d36ff6c6aac733e8af77d827484321d5691eb9a7348f341452a7e84bd1ede66e1d54fa94ecab087e7aff9d9786a74f127d9210f43538a34c8dc4183c61981c419b7ddee679e99f6b4abead7994320c427de6b1082fbefea8739cbd82d83c5f9dfa1899ccbe3a9eeaacac2c2fe4dc79fcf86d9e9fb8c6cb50036f722433d5f49f3e29969a34bf8048a7ae81749aa9be9733e8a9e6db3c4e6f229ffaecf1538c7f527ddf3eb3728af14d60169bee84ba149a4950406cfaac9ad2bf5a71fc18074f778f71c7cc5a1f6b1e3b07b49fb7198bf3c69c5b5cb1c57252d576b0c4b84cab3e764f71fc273bc4008e47020e9ea7eeddda5bcfcd53f7e0a49115f43cd06b2884bae735e460cb537a3bde86423cf7386fd2d0c754b6a18fcfbf2b7bb6a664969c77acecace5ac9d9cecbaae73f98ee470bc78ea5e928770fe8020e820187a4a3ebaa82be151869e44d3125ba244138661e85033e9e66f0b93bcf324ff94b8d0c7c4b334f12c25254d3cf653c24bea2bb924339f5aee83125a4aa284925aad25b0e55033a4add08d3cf42fc449ae84b99764e653925bff88a4a4ef789947974f270a7f78eef21a06a1eec9700a04bf0c290d0d790bc44b8080a283a1032172ce4131832148f405c4b29594e4507308f72be129f9490e26f954c2fde0db24af49a11f79e8dfad12098ff25da16324a423236cbb4c98f5224cbd9830eb1dfef0287b4a88127aebb6cb7c629a78de3af5e29be0e75d971b5c32f32974eb5f18863e4326895b1ec72a0e973862e2a489e3a63f4fbcf21813c85579312f3365191357c80bfdfbc010ecbce59db7fcae994f2db7feb55aadd6e7792e1074d1c34b8078dee79c7b9ef781127b53555ecbd56ab55af9152474e961966426ccfa5d336196c95f2fcce44dfef2a64c63f2d70b7c7dd784d8f2df045f32e49c0997b9ee811c28bb50081b324f35dfe965be6b1cd0bd97c710bce75fcf04d098aafebac4e3082f9d094ff19893aa9733392dc694ada6788cc9b93cd6cf2ff7e5fa94bc798a6675ee61ea1f1e477807c03c0fd3d17e79eb77cdbc3361d6ad44f3368c659a77241a2bd3bc1599bcdfba24c3641d9c0960725b430f5ecee434f480c9654dced4f462ba7476346169bce520088214fc2808820e3545716969c93f098a7869c967e863a9d5fabe8f8e17e66bd2463d898cfc3a17d3772d8827dcac79ea49feb5c0243cce57f29627d958232af98e1fe58edff11d2a39d49c177c87492d90c9c61af1fa8e1fe773de0a8524f9383f9cdcc5a3fc71f1ec2556f2161e937cfad70a85ccbfceb906377379f612b7426f51415433bc968ae4b20c23ca07587739d40cc30758bfa228863e3e11f7bbb8429ee746eeb991e7799ee731759dc7e4791ee7e55710d03f073f974b8a49c2a37c25df96fcf3a5cff351c9a77fe10fea4afe791c15440575d6c83b37f26e9cddb5583e97c5e2eae4772e8b8586429cbecbaf2047eef22377f9e7e125f53d77d59be6bb693e97cbe572a8d9fa7bd3b8dc955f4190bce548def2af853ff730f732ccdcf4749b9eea2196dffa1c6ab6707f177e41e45fdff428e12487a249b81f096f7826acfa11be6826acba11ee3008acc85b5e9439421356bd55e98f9b9e4dcf57e708cd1f6f9a9be6ab6f78e693fdd162f9ea17cd7c6a79f58f069a4f43439e17683e795ee70c7d783eddcc2729455174d13b849ae2475fb8c5bce834f4210e09717a314f371356fdeb3ad979edbc5f2ef1fd9c082a6e9e20020f115fde7c21e2cf9b386fc8fc1b426ff4c01103e7ea3f2270c3a3fc3e5026be7c81dc95c71250e5c57a62c071fe7de0abfae5e407825db781f5eb2fe9fdb37f69c051415f5dbacca3eca5cf5e52aaf9d2b95088d3e72dffbc952d9509fbbcfaf77161101c3e3e795d862ea5cb4c35bf05b6dc7543bc0448e89c0321f2d07b3e71795c0284f32107223ae72151ee090b3decf93494c729f9a1079b8ba8b4a995ca33991a2471902134433333012001231640303824140c07f33c13861f14000e88aa4c544492c662a13045510c832010c30086210400000c000631c62c5a0344aec8650c42440201d3924271f94b4cbb6210b10a946717d5ee0628a9212e982b6da126ce25b1185453f038f2ea7547127312f3a9cc424236df4747b031b63066f313b256e6cc7c8a9f369f45fe2123bb130413bee4443dce4abff0eef0f4725844b8e4fe0a1a79d015b68e22500cb51261432829a1ec176850d16811078a5edfa8b748451ec34b5d18473c86b52c753cdf32787634a7abb7227786ffa0d87c6796ce33fd8c4df43abef4da7b7916bb33c74eb3770756659defe355c7abf434507d9f827ea09dc2ccde3e5b99f8c6daae99f9f945632761a43ae98bed9ba0976b07058e8402d63be993d5ec3e1e5bb5371889ef94e65dda29823cc2879ae58177ea14fc949971de320ad27781a854f87c3052c4e78703f58d45ab998438284ab193030823cf365f82e53a515457e7598d88fb03311df8e115a36fd399f7d09fdb154b02245431f9131d9580a2a4c7b7319a8f4ad838b60e76c9464c5ad963134836ee4025707c5fd0d821fa841c0cec6d9c50c39c29c62ef8e2e4943ce169134d13e2be4a787ee1643eb775633c0ae8df84e6484cad733468e2b7115c866a1c3924c04d93ccdeb23b3aea03aa5ea07b5911a475e9f153ce510200a994aced909f6e64737be3b9ae6f5889adafa142ee16bcbd719e86fb6752b8fdd90e6b930b9fc144ccf5159e2eb623e8c34a96f889fbc42ebd8179ff7c883d6e577075140ddf3e4b046ae169c3d5d839825859a6a55ee35dfc4a19312185aa6c51eca048a041b787ad40018dcb6e8048cf43552183f52436e4ae22c9dddafca09e82d3ea240fa8acc358d4bbcb31f430a32df26ea0620c7a689ddb95a781d9fb878a8bb4780259a7fc67dccb6922ec7e684232908182dc043ab6153e33a6d2dd5d541ac9416047270eb1588c3fb2423e61d2c07b2d48e75f337b55b2003f25bf54d2bc626781200aa02023a7ca9229dcd376e6ae829d9278fdc0bb486b77800329c9d564e99b2daf07459ef4b8b89ad10ff7c76ada4a2e2cd5f28d396260bfca3dfefba21a2d0a0cc5756b62bd5200afd9f2d9ae0d5947fff7c0ac75dc96ef8cc7d84b5273b985f4a021a46c5924cfeaac8f7e039822d36078069fb664482231c97e5e34732374727d54caf9d21b345519842437b8c0b28145cd2764ff07aacea24211d499d00349147763b9c9d5fa16ff5e634a029afde4a1d72f0e02a394fd88a22e64ec71d8bb3b2794d710d1823c8949993b62f2a85ee208c4082a8f6d3791a8d2692eac758a62ab4b23934c06e997148a041759e529e56c3576f47062abf59848f09445be43b868c51a250232b36e1669f1f0ea53aade865931e13b60b6c77448820c38dce7859353c5957c105c9d3055d991a322412fe82bd011c3b44224056ba0db7933c393960364d2ce65826dc06e1ea306f3503c32e2df0a37069ca36f32237f38eb9fe9867dcaf110491ee0786e416f2aca5b1faaa704fbedc7b1a5765eb6f20940c5d094adcae5040e6f4ce1af5e3a8860dc5ad004d92dcf54850971c631d558d9f8f96c58c4f171212bef00208440d6c75069e0123d2f990c8955de134b0a655281f309c038735c9790c15c4294199bb502024e5929c2d102e39becc9479fe846534b489af38116f6856f2e0da34c9bf60b2f146b4ed05d022e96b42bb189b232556e9361e9075034996e73a7dce10a0f12c60dfc8c825db1a592b7c256608a71cfe14ded7662fe399f24a92e80626475c66afef246d1d9f2999b8b96606a80696b345811ace3ad00a7981201024f9d8712b733c3edb4113389479f0e1b8e339a32a25f397c668a19347da3912003c182141002ca2e22587f14c9e37bb5f93f55e0e7a1ed580d80abd61ae4b15b9d500c763412d72cb8cdc0280b054764cd7e41cedd9af39496a8d3691e4850dad2502d9b704f48f55c121af45486ae859c718494cadc6bc34821b78d23f53106f35e4c49b42fbaeedbf6bd1fbb88fa89c5e20b76384725676974d0edc0915c9da73676c39e4d5ff69aa7e67bf4eb1d50b957f369f4ab313cdb50fbc34c0a9fe10eb3140daf43ad55ce696fb316d5ee716e4738c562aae558f32bdf185e748bb0741b9842afd5f20b2cd59220b10d9018a6b87cd726ba0ec08b892049ac5872d6500b8fd93b7f5e79760d9b5188b88b1404d6b43cf62930e664402b6674770afa0ac80ef1b8bd501d59c3513808eda13868a75ff209c33312c2d92d10957d364fb476172fe91d58348aa1330c526832bcbdcf726406c64d7d9c448c7841cc9487586f5fb1fc2024287d761ad97f52643104fce076e7b8101310632a5de2b08491e627add4caaf3aea89a27b2d2b457a593d4fbc15e160a3a04b56358fc3591cce8f584c180bf3d3830cbc3ffc304035468f80fe75b999741ae9c4257a35c88547a063b674d2844bf9a7f274f03e453bd5613af261f6a4b549049588e5b2b345cb5c825e1c2cf3bb991681e3a8d5d4582cc2e197f9a5d0cf4352d82c23d550181c271315418941712d53e31bab8ea35aee59e1aa469972ff089456edf96f40527c74db9c0b6c8b0bf686f0290540e7a87613f33e94a5a43f446e92c74e244a80ed0270a2d112513b671c63f6524e7d9cd6dd66661abfb9b93c8c73974421eb4bf86e8931aa838c4d2d828314422f3c18c70abce8ab24e30066d84dbc2cc8425dbd1f0960917ef29b29c258a2b702b784a8609ca0db03d3352dc223f4d1a34ed447b4a593dfdba50ca038eb8d088c1f7289f189b20b60a1a808c503958ff1e2555e5450db1d44ffa976bc85c233a9b66792c4635df40150b0a54d86d3d8394d85566d8bf713f069c5362148e94f604b4e431414833c8569ca106ef6508d0526e549164d0f5fa4cbf0e5b984cf534900bde579da6b51d1d345bb43b3ba3a3fa30ac1928cd6e088aa26bea94172f23812df52424e31172da1cc48ad36ce1d3ec0280be4c46fe1f66e5d8de9ed997bad4c96ad5aebf8a3258219a1a3daa758ba3b48cded0057a78638128c3963d610928313ca0ac0e32730817034ab305782239942ceddf8460249233643c7986a6ca6041b1347a436076daab11226b5c234d38ca7169b69d8a47e2b9308156f58041d6863cd3d3f4b9ac2919a4022717b869d30d9369734c6c487eef180b80eb538c23e69b4027e0eb20a111aa8b0c8d6949dd2e7ee624854d8a0692b40d9a58428b3d9c05534d2ccb9fb7f9c1d933e07853030efc7770e43fa50ca72599c710c1d2a6a091f90b629f25eea6bbc8590512e2f42075d66ec947f8eec8a62c8a49c98777620926b94969862e301102d37fb0b9745e4e91ef7d4a6b88b0371d1d1be9655419fbe4b0e194e03a368182115b84adfce4b3be184a6372dd7c10c7bff9fb8fadbc6ca8df2b19ee0a81fb355abc6ba3e5ea1228a01b168d48dd9c575a3d0d93df21f16fb19e4888a5b1c0afddcf8c7c5f36b365b1662b93d2d96135562594c29529d18e9bdbff96bb03451efb4c881f964d266c87a71a89b5d22c82cc6673483e3c4e28d966cff7c7cc1daa4bdd433985845c418a32b4088d4efd420ddaedf95935fc0a60a22ddea1e73fcf8dbde53fe9de888dae010af22598a5549c16305bca7241e05b2d499aab7e419586e7ce0183040e959cdd2d87a7625c716a04cb9571e1cf91b0b56b04d8c8dafb43b8b424ce3cc95656c6e3424b8d4c268ecdb412bb269248e55c5218a7d2ebf2ce91028e45895796c73458a0321032a6e8f066e71aba560aa247d88c634961dd1eec65feb5cade94596ab0d51ebaa676c194216f137c83ccf48b00d3a8a48e8bceef4c0e23cdb493ce650458a4c8bf29e9bc9e376b9bd44656beb308e9417520504391b241412f493ea1ce3f59b8f39811a820ceae6da6fa3c286c1cf0281fd3e8014f5a8c2fe41c5945b4597c12248dce54447ae70e6e231373cace143cfe0c788ded98cc1ff990bb28cc5a780949c696951b337198e9b3b6d97f243a3e34a12e6872b5acce1e4bb5cb136d204a350afac9d38f11e48b3077c812e28e81685bc9219c1192e82602c263796cf0908202eb2ea28e9e740839b8ab87cd62436b63e8e50c2d601a03577e73ca9923f3722c8e3a9214b92c37317449f4e013168263df5eb07caf92bc17a08306c1631ec2de3bd2efee84713704afee579fd52ccb7fc34004a46853e5e3f2063adbacdfbc671ec3b2483a9c79fde518bc94ebc48ec4aa9cffe88df3298b7fe5e6808c40eca4008e6bb909f066a45dbd9509442db48dca0258b80862ef95428698aaf102b75ba08077e950814a4711b3416c9c1119f2aaa2c8d8d17f02e384b86fd7603b62ff7e417c300aeb0f1e98015dfa24cf3e4b3375b5a2a9ca3ff0218521fed1513d3c00c53d3525ce2d2fc39dd39e2fb56560bd7371f1bf2e65d5890846cbfcbf676886984c9544787c161759517b3bc8b8916aa8a290c6d59bfc83771539eaadf02b080b367cbc9525e0b51b3c9cd234ce3ce6ecf9128dac82009b13630a9b21da7108339ee35b8efbf13b3b8e662509f54b7f8d0f2fa9dd7b2c730f1474314dd99fce98c6316f00b10437d845373300368d80b16267b2db123e878c2a333a6138de5f030ca6f8eb96e230e56b0b871f17a94c9074eeddb2643aba38f7ff18db910ef879df31e278a5b72e6eee736f1d74e12bfa9cd0bdcb9bd471f017a9e3f47c88d97a9403d4c26f3f1bc7222db6d050f89a11a8b9b03838e27d5b8359fbb1645d9158c02f50910d8658a21c68517454639fd73d190e88bf79416d2644245204a5e97a4c3d2a2c066e9690529a3625c7aace89743873a36bb602a06ec20e359770e53ff05f92a998381270ed44485ac4b1248e68b16d2c3d384581fc9be52311205124a5d93034be561d6a02e1e27176eb0d5dfae85cd8aca07acc5986ca2dcb4961a5355a45fa4475ff88d54f015ad3cf4503e0efac080d5c075df0fa38c2d870fbc7ec33ea4949a7cef16e6c1eb0b08ef1fb712ab7c8e19d8d2b3a732414fdc285021b5c2a4678f84f63469c7d065c439126a79e84bdb69b066ba78b3971201513a6a54afb7a145ed538b6f38c6d25f44c6cc007307a15fa78133d40d2b0313181fa6373ef8d9a0b5575981110b53a2c83841f1e44816d8b50b2e5aecf942cf505a75624cb034a9399bd81c1c54589a1424fd6f176b60544e1ea36c2f703692970e91273180e1b808c234b777344cdbf4ee6e4620b1c4f60ced5efb0218390e7213e43183bb044a7ea35a863548aeb0a6999f337a86264cc1bf53b29d6070f99b8a1a3a1b5eb5e02aa8a5eb329e1b2021bd9bd13ecdd9d59ea7141a67a83704ddae8eb52b573810aa9afe5d3e8a3c835165148265751fce0718d166c66d5dfd9841b4f0d589985fbb302ba789c2d954dc2d8052d81e11fb115e59aed3385ca50223000f2d40e3b34cf4bb77f4a9b0052c72abd1414e64144ea22535d4f35247d937f33eb35eddb2b9da166e0262c1d76b260ba74dd71ede4d5010eafdef150c834945aefc080b6ec22a79f4e61eea715861b3cee1467a3ce2f588c36b491eeae6bb94453b67d7a6aaf43a484e98223a401fb9a7c4b25eb8d8229476c9d38538928e499422951b90811b1d9833adf54c9f114058d2e817cdd0c51a2630d392a10e62afcad9b0298194261209c4cc3451e3cf7a650b353a6e4186f6e456b6642413f9b21e3840109a1d4103d78b6484bfc8d5b98d208b41442fba12f736db21708f60983909c2d2ad5d2e46d4f6c44b68277cc485d004fd7416aa5ec27a3dabaa8b52de2571eed494280e6eb758b843fac04e3e74a7609e7956c36adc3de92505aab589089026de8d5943f44b383a66025209a68dbc46c1ff035c06d7767483f8d525baed8ece01e8a05c6629c7f085e49086cb575598686c94c3435c120cd845ced705426b88f6d5406a3bdc859c5da06978dadcd16f52726b0a403f660dcdee2685726a51dbc5f4a05293bb1b9378d71dccd1a7828376d20178462f32d9ca818c0b7b36a155b3a8b551bb07a468e6a028591c5742b6da0226fe504294c1b1bdc9875184294ee2f21b05eac8cd85acb8e0104c55b18850cf2029b8ae32b5dd411553ba209951820b31818e8283a2d8fe7382e0deab5636a0154a33a4d9de54a4ac636c0a31dae0df5d31b272e07c33add9a48cf803295bad2bc95712725d8f301fe0c6c46e99e1da0e822bfeb9f4ba6b4cfe54d97aa323100e2aca3b0f5417a0b3c47fb8e445b601c4d269ea0374052c4d1998dbee1894d41a3dc9e697404120a659a5e71d6e80c09d039f82eb3e5b4d6c7a630e12b882b49d464c8c1384aa1cb6ad3f4d78b4a57dd6c43df26f4295776241111c81972b955ec03dfdb3811806cad701ddc5d4e50fcb0d33c7879cccedd243e1ddb15aae5ad6efb7a03c9e154292fc7bbc7edd53870a159d9b48f73a2461b327a9388d9b82d42bc47bf5962e3bcbbeb99633a89edaa4d6dee954a0bf60036a53b7eae52e926e7ae53f7b932fca8ca8ad2dffa9dbf5aea8623e19cce1e4622705515f6e735ab890d8c6c1d0d010f531ca122976e70add2f0a1c076a310755597e319c08fa8408ecb55bc020593bc3e250332231a70def43de89967f19cb0ae6893a607a91113bad497a894464ff749d8723001bb4eba4a44c05af6dc13fc82b1ddb54af31d2d7341a65e6a9db50e7fd880f8cb69482f7b55b2fbb105dc3d4356b69f65f397f0391e38448892108a8448f7286b0b2cf816fef8c8eec88d2a3acd1803077a1dd5556483d242dde49a3e73fd94a4b910f054d776d2c4f7220c435de97a4116172910260667dc926148d562de24f2c2cfc4f65a22845ca894829ce2ccaa6ab42b68535d80fd8422b91bbc2710f7ac7799240be2c2dc31166a1915aa91e69a133f346b57f32a08bb7b988076a9bae46fb5af827347547cbd76d6003d75415600e7f957e82610817866b7e101a5d69f9604ef532f38b9fb3edb0b395fd2389c567912e0e9d0da93b54d728a09c7c1cb1e0c07117e2fca8f4b55ea6af46e61fd3b85e1018373f0625f36e834dcc46be7fb7b8c5de766030a8d6c479857c1973c6b36676b8c431c89c6029e242830e47bf986504736ce9c774d8c350b991a76f4b394ea54075e1d9c2ec48b193727508e4f8ed4abea5113d7f5048722303cc470f8dde90ae167f9a37d2cbfa69d116ce9adeef1bf2e94320cc40872e17de7f36d80d49deff5289bfb0923f0cb08d8bcbeafd69461440d5c328df08e3053c9c97eb4d194f348e753c4073d655d4744d0e15559d9024c27357e7fc22b6acbd66476958d3e3771739d2f066c0f7d93faee5366591e368f9a21d41f9c408402f7e97d5a76d245240a6a8d40cad8a8a23bd4290102c66a24734fff5ff4a944bdfd40d0c654a6978d31a7221c8b6a51828d7a4528f3bb32d254797a02e8c47bba879f5aca165d4dc20e653cc9120ff39d814d56f501b370e62cfe89df7e00d85e7acb2c0212081526502be698426c334e77c9daf5d29aa41bbc359843c891ca372c489845615c2008e6041cbe7a472955b44d3bd97fedbea241838b5c372243c175a14cd61712e84eb24db5b2457c3cd0f8b769b154f6c082d6e4aaa8a124248154168fc0a0b6c370c6ae99e718bab494f6432683afa914ad1ed47baa5cda8b61814a2882ce8c5e9d2f0b9f27fbe09e8c232848f205491477c509ee1d7bb36df686fadca21862ecb2619c9b9af9ed5037de30aa9a73333607c469a216a3ccab35d672819ae2fadd254a653d3339c6916e7029c82a3e6b2a73f438ef569b0f32b309a826027d4b0406472366ae6a25a6757d7e0e2db0aebd8deb84ea2f398cbc39cd4a4626da03609687ab16e073b382c2377ec4661bd5567a15dbe06cc7b22fa870c26c8d66526062545a904340c1b18803b009ffa3fdd5a5918bae3675ca6d114f16fc72a1079fd270d58d9e132aa6353c101edf289a6b9cc3a0206d42e6b98ce99bb946fe43277041039ec12fd774215cf736ca27b97cf50e88e2197a24a01cf666aada860480278e97f1376d7d16c7cc970dc74903ac9f3fed0001a290aa0f9260c98254c5cea6a6b3ca728b5274235573be8bb96af15d086278826cc507fb5e7a1ef35c6859a6114991187c77ce8bb8a8f0c44e293b3d3c414aa807b9e6fd8284e69083d449154ea4485a8b1749cb1227d4fb6d9adf8bc11fbcca5f856006b21c2100582e0aaf815a39289852cc15fd90f29bc73975081024a58404a709131bc916467863436c5968d658fde70a53c39b3fde72b49729ad556b90197efe042ce49862d9cfc39577203b09c4421b91c6fbbb7e66bafcb87b3c72ebd77b84ab1942d98c854fa24ee07c4d051cb08b85d7bc71c8a9f3b989770cff512288a0e1d98b4c906cf8868cd27fd088ee653f11542ca0f4d6e392a041a0cc67af79a443a96e4b650b781eddfabb711316ad6fb99c9ef9420c11a7f793362e771bfbfa99f756b7b24dc16beb8d89d393803422d8a5d654e3b9f25b3db68ff27fd283ba488cde19a1808252398005d6da71840f814a76bbedfff2c89c1837cf38f357d7a4d6a9713208687cf03ec3e526d53010612e7b4ed5d650f293f76b9fb2392e280a9fdd3234f65b8948455e28775736d99dfe9e6dfde035b19742d6181bd64cc742bc5b92736b09b26a25ee71898c06d807f2d776d9d96e2ab95f565c042c37d8ab068b2f5ba5d5c91b5a5340acb090ca70b59384e68ba54f13204dfddc618d38369e2e3592eb98def94eb511ddcbee3909fdb3d654324524e12e46fb34c1b917473e01db0aad428f0bb92d275ab067f8da1249873de103f55de0918f28b14ab4d88678b4ff2a07c91564609ff1dbea4e38eb1a94662a5bf6b3ab74e481f9841384f1b4e4b7972a6bd1a1dd47d2a68db74ed1680afd2736741fbaf4ea34163d75e8d7ff501ce9b6c4f1b9ccaf05dc6f019cc210b3b433843c7572dad4d0815f6da8155c1123773e6b022b177ed9a3486910c6baa052b6f296bef730308b057d298b6db2b47eb36a2e8227ab1df5e76aaf0680159981c0443505aa3b55a93ab4e370b5d44630243b5fa66af295f6e58d058821d36dc71901da1754a5d807a9a89b371f0e69b4e5b2bfa2e7d69d85c023262fb5027325e0bafb495f0f5524baa5f8431b7ad06e1ce6adf1e01c25c40fbf632049aad3c585e42fd8dd818a545a294e9b6d69bd7c7646274868dc66853b3a4da0cdd3a6b4b62d0beb641396341c1e61018cdb46a8f53cdf256cc55099bb220fe6623cdb4d6164e3e2882317b7f8febb19434a52e45810ab7e276ac05a53e6962b80208335ddd1a106c09b834a00e3b9ba55dd23a9e08ba6ecb6afb63ecd819912c6c48a6a1839165af1ad62f073bd5ce832e561d08cc11f8b50b84edba490eba4380a9c5197bac1bd722d5acec09d16c5c327b550a01a603b6f91d1f0177cd3f876f8f7d34edc9b407dad881de812ce84971284311fd372245b2c1b46139776a27f429ac7be8475fd6a2d898557abf34667986de9dd748440f8a66356c45b49013b62d5603fdd1c6ffed3de80b982bcd7dd3cef6fe58b45afacdda313a75d3ae7859853363d2bcdcb5b0d0d0ac27443fc849fa53816d2df7057b34d6ff82805575a4354349b96a5355997a6afc1b5d0aefe3d141f5c8180741d7ae53023c3241b64d69c429a125c46f142208b429459f1e7804b89617fea0288802c0083ecf102041566c6c74e3900e2d76e5a008d08aeb9a0de11374981e0061941718c0a82c5750c5e3dd3ffedd3a9620c82ffef6cc25a5d83f81ba50d42896e94fe83f82b14f81f34018b2925c2a5dc83238c837478a2be3f34b875d04e35b3b99d029dc8e804745731a83eb9e533a357c228811ee1c35b8039e3cee1c7eaf4ca77b0491a175972944cb9628c456e89abb2b66d67ed40205c3f7e76480677433c9c1c375fe1cfd11c80eee0a8e49abce67f5f8615114849f83d3b6b9c7ccd7caade47a59dbe4ba207fdc02c81d9277219f868d1405238a4d575df570c0ad79bfdc7143e11f51a0e3746cf598aee191533b14ad2fce31e6c1e98ca977159578ecf621a5d03792c4ca6fc3c002faf9ec58565654de87e4b3c4a12b1c77159c7d85c8eb8eb4ae6ea8f0f5b46bb217f9b0a09c3d80d97cae5f703989609d9707c3c46971a01e57009af3710fbb78bae17cf7c4c1aa05fc8bccd85ab9b534f26fa70af62a985d785aceb4d969b2344c853c76ebb875452e390fd132c796f2465258fa0dd1517e466e6827740523db66b45078ea078875d966d9b497630c55134a65692844cad5b94226f92321ee91678828461938e36c738cb9ca16ea803e9c8e77fa10141032ef056b90c8ade6fa0203b4c4d92f554f425ac65fce40b74a5865a3431392d466880806dcf759db4910cf1a8330e7a5fc9ad52fd222374b7c4e7bc6aa08dc6042b20821bcbb986835bf5c87942c70812d3df04473906a782f0714f28c9f247abe1552501e171a0df15d3b883463028a03ea8f0e6d0994aa7b87ea9e8be169c916da62e43ca954ab6c61ac47417ab57c69607013727a68e5a80494f898c12bee605626d6ec0d96eecb67268263f05df80a38d5407e91b9dfef91c26be64d170e5f9bbebd4aa7f755e909238a1f58e98350c983d2d38e046311c5a14d2861de7a2cb5478cc9446562c235bd5aa982e0f8ece1efd62d1b2da07127718d13ddfe743d8e0816a9f78ea7bda55f6a15229f0d1d33bb254672dddf4ff22134f48f657cc5bfc846353bfdecf98f3b053630c0072c28b081051ee0a0800d4cf00007152c60c103382861010b3e0043b6c4b9834d6bf1875dd24164bb4e46f9ff9097acf8856e71075d28c5ae516f4ecef99d6fb7089ee0cccc41a4c77ce1eb9b0d514550a34741c7569a01391e80c8d01231733a1d328ce7982a6151ac631257d899ac00366dc55ed34c4b802896498b06e1878de0ef200c4ec84e64cfcf4858c400d4681864cf114e5c17cef324a1b20b9dc98a52c2e28b80cea75b1ef60e5d6d56a1f4df83b2b11d80440c7e34df28eb3a69a569b5d296f58592520f06a35e52958744f8d58ebbeb934c4929d35ce48156afa44a8003c14ec69130136ad7068ba172ecc90e61f1a0fc086c155843a851837496b2d95a8b06a4dce0be4be46fa3182a0debbc9efc1a1b9031e96304bcf84a630497edb4576594a3ed20bab2f7ceb2644df4ed00c5229bb8db8961f829e6b795ea6d8c497fbe5266e17a9c6a4617d4bd4823e8303ad27a7c3026f35326d2e69cb8da42576f40667c4b7f81e810e117f049af82a0a3ba25067dad8ef390086cbefb7d8bf87307741b0bfd0e218a48d9b6853b68af1c1ad2821edb93c654dac6a21a1ee9527e562d1fbd85253a3003830dc9941f8c712ba599252e90f2c832299e200ecdbd80ec1b6fe4ad3723c0719bc562d310b2afbe602f5446e46832f2e0815841671543282bf50805ca77e5fcee227f2cbeb425c9b044d7bd71ebd9dc8ad042370a79941a8f00c381d9ea2165908a3750873fbadc8ec658bc307291bab0458eca9d0d81a8fd1b62397e768166fd8775c6278f1058d33b62f590460e6ef891cafa2ada85e5fd992452ae4e59eaecff75092473c8ff8c87fd29fc4f30cb0d7d0b680b72c66534413da70e0924b7f21fe1575bff8bb5fad4c200bf203b4e530a3b5fef1ef982d605a9807f3bbe53a82b40b040f9ee2048d861a1d977c405801b538b4530b1328d89febedea4dff99f6e4f87a1e40cd76ab6d7b42832683f15d1a29a68592e139e80441f17496180de7358a117271762d7a8a3f5ae0d27c11609de0d877bb89786de89acf9eaf942cf2e35bf6c3ba0b7731c1e7d9f24109662452ef4c586e5b696f587870447fab05b8d5596bcd21ad024ab6d11e602529119061184892491aaee3264a9b207ad641d19719e195649496cad7cfcb485034a5a845666c76a978fd399bca014381008ebe9b6a6ee32e7aa352679fad9915335f02596bad6db88aae6c5ecccebdf943ced2e48c8592af3298ea1aa9abaf99d03fc4435ac9ce0d45007e97a5583431a48227ed54c8ee90c047e41c31bebeb1ea7ed35e3a7c73de8270016b4042ccafc5d060421271036d1fa6026df6d933f11e5e55bef8f93e8d5de2e5f36d3c5aad84eb77313bc02b460365be98d72874914856a30bb5de87c8a7aa7c99eaf738e2a2a49a51d18f194df1d701b3e6f0be4c7b13455f953ba21ab20c9239664e277e051f1bf6b72eeee032ec53d6a02e89eb0f2184651dabccb0e74e7e3c5c802141171e5d6d5a3cd70502c637a6bf1dff436c9c6013dcdfa960424a55606fb5ad45ce3348884fb844cc3cb13c3af4d74a645914838497c9bdadf920ee0a3ff28bde965ed373bddf5e0a13e530ac48d34b70904e67875fb0ae6fcbe29dba934d44b6bb61c219805e4fe61c882c32bca63e5c415b6dcd9f2684838ec9120d3df86336c20f5dc1c786323514e309a083c659c0eb74a125ca124235bc4b6ed802d70ae023ab9171e60aaf258690b28900b41a757417a79a9660483dd673f12736a0f0aea1a0f02557fa01eead9158036a263e4238a33ca194b049f21b881bc04b14f094bd7c0fddc588be84a45d36c1463047645cd35dd22e0753776a7209c7cc1cfbcc2d250712d73a2bd046e5dc1517b02e853575608f4d7b5e9e428bca97b132ea744136b445a7410ac9ced36f4f771e5eb4447eef19bce95e8306a7d42ebf88648b4a11a4af286329677186594dcd89cce61b26d56d9952f9ea8d43f6139156ee890bba10d91a54d463c49ea60f2f7c0f22c403e741a147f5d6e18bb6e900333f3c56d09bc0ec00e16d17c627a568a20dcc987bffa7cc601808be642d0f633b6c743496bca1fcb8ae394964f007ecfa2ab0a0bf5e17544c941c9c26ba070e041eb1bf960ed95f5c4670c164f5bb63fa1a6e015502edbef9f62ac4e37b702370b3f192e67acc39a12746aa2ed342f0be827ed9941d40c35e94c6b1170862535309c6e0fffc004d6f2b7674f53dcf2c6a0f8448df28971879ba42d8eb32831de71ad1e734d296fc57b0e3b7f2b9201577c25b79050533c6ed84a8173bce268227be1005a7914bb5f702d15ac9eda10840ba096334e1d0d02a4d105887537949e11efbaee2adecdb30c32d5eb1f6801073f8858c030081d50b37d84703656b5605570c301b5be6a28247b2a546a8b79dac60e830230d3f0cf0b08f5dc5e25fd167c89aceb7686086ac2373e941100e8eb21d946a35444f0694cd5cd0be026dcad92f06d96ab638b3a1d13eba8081427679cbde49524fe000884dd8c475d1788a2ee016d261fb0aeedacbb9a7c91cd328d4074357e491c0590cdc02dcaff8fa5537a16174a1125b5e38d4898f7d566ce2784d92252a57dbe9a71ef66c501c297b362afa64825399c051a096f9531ec0bc826e8808908992f778a02fe9cdd3663e186867f4c2350ddc3e2547c52cc8400eddbef4ec8be9a217014d0171e52bd83177c7461040f01224003bec6339478286b76f0292fbd36351a64c556efe721dcd0439f2ad64b0a48c91990df67348c806e241f33396fa2593c01aa01381ee3e5683b835db755f6f6d8d3d6522084eb3d34f633b0a4c83716a44e23dc1584560cc15e0b9b0de873403d0c3c093024af404ca93ad5aa7e5d3ead9f07e639e567a0711ec0dde568771e693817559a3f5a71a425b2036b5925a97af99a7299649d2aaa32543ec0ef15bdd389f69c3424c3880ea8a9b3b25a9f1967e05b3fcabd87f276ce042544cb04456f2690581e908bd697528e7a6721406c4255fabf1e154160cc1e3570fdb0fbb7662900753a603fe2027598632320b3030782e0140608a249db2b251a738d1c7673b692f0eeb0330258d27130823a5ad4f075cecfd315d08417bc2fe42886bcae86b7db3ccb319998ea26c43ca6b059aae7c8952f4606fe98a977009be6b64d6a07cf7271290a3fc2531342ca097244fbfef126e0561c3c07fb8ed4e6a940a658e2a9e8c682cfb84df397e3d8ca8bbca3cd7b5211872e40d2a6ffb1fa86f3e060df028f24996b5624b952f0f364ff1ab13fdb4c1c8021dc12e2967205993c8d84411879715d442fd0a2eca84c6e47174570ea10b7235754c82c2125ec8455e5691de1676aee06da592fb75f848eb0103a25c2fa12f279527673c69c6f43fbe2b64c51ab08335966bc85b0219bdf02e3ff44d429dc99f863d6c3491b3af5a6a29f14bfe369654124e7a8433a80a65348a5e6ef73380479b84147083c88b48b03b136db058d54d52a83165ff6416483e131f2e308ecc73a86771f5e4d4754b44811f009d40a9c223969993be1afa226979610465d6fe40257a06175bdec17feadf348c3e4067a88ee68a2a1628b9e3cdc010e3a36069622f5219cae2cb8c28a06a6e6564c43cb22b87295b40ed4bfd8c60a84a0ca85a39f3166392cba33f3eacc03fa7ece2c9155c140c5379f1f292264d5aeb8c4ce8415573be00d55382d9f5ec81a61f13357cc0eb3ea61ba50ae8ef6a065b4f536a2ba3e6e28d4a034b7f018fc511ea0255ad2a4dcd3175ca207042769370abb16f24b8b1502c56bc0b13bd48b7a4a8caf3afb91093506a1934a2a3fcddc3b53991d88772f593ea9fd96c1645920e190e6620dd32dcbac3728db86e65d8d184f6d2b1cbc26fb19fecb43481ef37a477975190ba3a3501e182dc550e14409c4e978495415cd921c954dc8f3288effc6a2a521043814aa9c1e064d7c8e41c7a2b15bcf241f6f9b32a025a3a23d3d2560f15a42547e174fc2d571bc7faa2f091706d05e4f4b2314374257adec60cf7ba7095f2d53ff80b70d0b0bc0e7880dd76675e8d6fae4adc0f6e980fb83e9eac3057629e06ade2aee21fae59037c97d1b582fdef2eba42e879922b714e20b085f97ec32bc4e0fbf58eed2824cc55a41494c2e66eaf4a411371031c130546b3e87008c80d914dd9f0484059cb3b704883da58b0a603d522ffdda6b1bb86d03884b2a8a0bad1c31ea7bddffc8e48362983eff320c362d2e54373fb17bda843e6b2b3b9d3a069dfaa62304945f2532a30d588dff9aacfd993b595234ab9935dbb166e68e232f2f94904f447f5b58666dd4abf884031d0d8b366250258408eb95a94fd00706fbff03e4053196216e8418053f6104f444582df14be14488b5cfb99ab2c52787718519004485167a5a856909d052b248e12cfae454f2e9c6e6492be4acdde0f128662501ed2b57560212f90108b5291ce1cf8b4bcab9c04a02cb5a590ed61949308300b2c63f341ee5ffa6f227b3cfec5d11af2628952f56cff2b4ca488f1bf2e4ad48e49a0cbf6374c42a5eaeb92b8e3db44c3c8dc58234e66b37172dfb287b3601140bb5ec5940daa31166421a05a49b1219b5197bda0f175662a45d3efef9da5b9e85b3445190aa5be3ef648fe14a05396166a6ae07c0d5daba6d6607e51ba52457c48eea27a87349edf2c294ec5c881f0f9acc1d5a69f43c21d6a15072547a9e00ddf524dbec306eb7a03689405aef2f89091a9d08e6d486cb00847da26852777120885becba08267e88c570f54770e226e66bf1f0c8c2154208be70832dfa015001a246df5be2ca225ca0d48ffac632fc7fbf1320233402aebd2d5d74a781027e33cbd4ffe0113d8efaa5b192d45dc3bae051195f3e0c5d7c8495276aa759cacbaef1495bdedd13c8a7b9de866cba30a838f762900b8bbca60c77f806bb8685d628fc10b1ab7910d518e8a83ad7a40c22b7fdd15528d43a3608435ee96ac0a06c33f513f1fb23490186a4af11113b7b28980435a1f74b29a61aaeecc58c4b4dcafebfab54a066a2341c1950a8b093ac1b82acf67d5e06022453f8de0369bf8501f41890c81178992800d36b7478318a090bb2e986f67dbe9bf19fb4d4e0caf6a9a8d4bc524ae2875d2e20476a146c9518b7ffe731230a7d3ab2b57bf83a58b17d054491e8080e7e8d903938107ee9dd04fd29bc9e983013faa54e38b8149ef7b63713d9e3a0d4ef465242da24fa6720d0d78fd9971902397a647ef576ec1e76001ba853ab26477e8801fb96394e8eaee9a5cdc719561e47ed74f7d97401e0fe695b8587270d88845587228120c961b905017df8eebd09583fa4e8ed004804da1d001bc16860e827f821cd806baa5ed030393713c733b40bcc9b01df9bcbc3d6cb2dd8d9549e448168fb8a7a954b844bd2f4ff023622e63cfb8bfc244e7857038141cbcebf03487f834494bb574ae04913db09bcf6d20a8a41627da854c2630cbf8de506d5b8e2cfb669d3e90353173926fa15aa075e51d9458169873c8b4db7dc952e296dc24d1920a60558efd864e42c8677f4170b3857698545a1bd42faabe65d943a3ef01a94b27ca9e6f8d74aae1ca55209f8061dbe6c0d48fc5d25797bb274e96fbd7ba33bba237da47617f8f5c81c1114aeda9ae311cafbc5c84d982af66b0240c8c7c63c4fb095d6ef153e620af7196e761860d5261ce52e3e2071d195cacfeebc4151932f6ccbd941dd4356cb02f5664f2c04267330bfc87bc5322a4ebbd87c7922316340812c2895c5096c41824582c5915aa43b265367a26fdc1f7e834e38fc9d85fed8a8443ee861ba190a1dbd9ba256605b6293d2f0cfd08db354b89112b66d764b0edbd2bb1b6477adbb84a43649816b4e481b260081567a6d34a0756f209b789178176471409842f5969989a36c7a7266ebbf12d506fc822551665f4d5d01f1473afb91bbfc1bfc6618c366cd3c5c87d985d57f03aeff4fc790dcb6b35ac7b7a186765a304548ac9e813f9adfca2482e2b282819cea128f1195cfbd3fb08b3314ec42193ce8fb65b47265be621793af11a44b6d40ba7c68bd658c6c62a9260399cd9d77a044916324446f98f54d13b149db29ffb6983f0645e5cf02896cd8947bb68d209591027a901bc8fb26f3e570258ee59094f35f65a000b26510f7abca60d473e3c89ecb89cf871fe0d61924b84c1b74636cada2a9fc6529c72be001b6c6d1adea39d949dc501abf2aecb3fc99122125547f18f3f2861ca685650123318b6a9c49decbf6b43073a4994b7e180e73c69b826e12ecc0b4e5daa260205406800cf34a6bb024587c3847de6d04cf30212be8d842442808841b9f59e1824251fdb24e6e90c608a1c29ff25b3090f1486e8ae556aa18d0c211047c88129d12993f1fc5ba93e898bd9fde05a67a6ddacc00ace910ead7b5eae2da16f179c6d786b7142ad1ba71bb6e18ae88137bac70e71c077aa29224ae05f87fc3a44b57ae8ad651a04de92f4ab25cae51b485521b52253e0df0d1a1899cf73b2d2acf4ac65311044c4cff4b775acab0f10a7a6a4fc78b2d24b572b950b56ce74bc1f53862c617fe8289fa32f904a265998e0e3c1b2c4cbd7dea447724cb3bd2c7b6d0971b00c16df612e8e04601341e4c41db86ad5a2a21bad29dbe9861a201d720c0da8b6534c3f3e26a498d2e75a4c987f2801fc50c2ffb77c1b60c10fc260e0b28b54545e70aaa4b4a155b7795f2f602213b37a5110f52a4b8e408ec036b068bf424774957410cb0bf16ed06ca3954ba85aae1093b05406857a6e293c0c5cf80f6161c410648aefa2b012ba434bb0f638ec0fa08a5a1ff7149b701d3777880e7df00aa88ae243c3bf1fdb20aeb51a01d631ecf39502cd00950d832379d3387a83a11534f6de3226ab47d5c54544a13a31e920a1357a96daa68208aeeaf025728f883c2697b1797a788283d0de6909edf316d3ab47717d34204ea100a26c626e0650d9f4366b04ced56f9f01f7cddbcd8486068718060ed743c574811c0733de8649c452106f837b60eb98f668458ad580a884ffd033f5146c01f5055094101932b33aa08349e50470b7adb5c68a921578152495aac7fd021d4e474f6b26f8740e0672a1ce603224c135dc71f66a78a9247b878f578800a82a8b40104afd9dbd0ead905ccc60816fc79bd344f6102b331869d42f4a47618f90ccf1e43c295e1824d75f5ff99f31ef4e3cfb383cfa027c8ab933a0e0ad8731d0417c21eddce3a5efa3717285c24b04022bf7546da6a31566d3b0e971f52ed14661c6c8ef87e8e7c23b4505e4fb519e3a07ff373e0a19d2a77800553208b8f9dda7b390f9cd985b875f820a7f48891d8b440b0eacde9069446f98b08f6da124bb3d1fc38134fb0df32b6502fe8bd2f529969d74511b238199bb7ddb03f68e3a35675c691659d354281627d16289f2e7c8ba7eb3f6ffbfddcc8beff67e18f5c46349e8385ec58397498934d26d56ec858cba67626eec08281e55e6e6eb960594133812806dab748d652a9cbc2e8cdfe73a1036c4be6c0b86b32dcad360a983c83daf63c5cfb18b8fe5563f438bda50bc785ac81ba3d8000d10259abacc2fb7e8e68c0d20b6d03892e2bb6f2880445ef80598e47b94dc7103a9a62490d396252100a768700f33ae718144cb1dd30405ec721868253b43b0094d770c4a6608aed8400e435ceb1149c825d0180bc9e3336055164470038af738ea16014d8697deea0e1430c0255604e18305c2775a423188862cb9d6bff3445eb476ecb5c9dc060e6eed573fd7cc337136d8e8a87763989d84679bc26a861d0c386fd4059859d24eb6dc564439001eaef1129e43519de3109ca2913c5a05641bfa8428f302617c002e14285d78e047263ac87428050bf1d9cd13e2c86d3d1222fe016fe21d9fc8acc906b2626c29306ea5eed2cd322f58c6a69853361b77d4f1c0fdb941e1fb77555ac4e53dddd14de064b789d7416e7adfbc65aa68990ad02a2d988ceb82efadeacd61563ec6bb1e95600f3d7a3e6f477a253eafaf3c0a9a1a8cd5ba7700c39cf52f194bc4c23dbeb2c26adddb14ed223ebf63abb0283cc83ed9e2bdec1bb18960d5df583f4985aed7516b7ec76f207bf1f405fee916bb18f3ed5bd2444b9b28d999c217e5af7361f5935bbaca0022946536577a39ec30ad946a0112ceb3a720e741254e62d808fa630688180ac5b049e7b21b040109ce75b2840bd2c68084c97fb0380fc7c49417150d1f5bcdf7370ff31977046d355fcdb1b47a1b6aa2111d8393a16f12df76ccc7a2a7ee9f4f69434fc3dbbf55e8da627844c76fe4041f8095e758aca216cadf80fce404c8907a5c4ac9dc1a6f800448c611eaf95096e2de1b1f629585a626e6574793b84a6cc46c498c8fb65ec5396b38197be8353f129abd4b329c584b13c7dfb2bb5bd011a9530b4d884ad72a50acc7d32bfa607ddcd60793d26f5748434d19e34dfb8cf1a62e9793b26e636fc2a69d3f9b7b45aaa8f4f5867c05d6466085197b668440be55b70574c3db30f973d60e36712a2ce64737ff837ca84b4863a22166960f6df532b3accd1c8c1ba643483888287da0771efb0f0e6fccbc0e3fb3c9049d1d89e75dac3575559ff626fafccdf58a3da54fc78d005ede7334c8c597e75e386d6bdab1bf9fe30792b7535f5d75f2d6d4f7cb47fc75f0eccbf608ede7214be6bc492b6d794ae6f07b6fce6a53254a0f4fc14e24bf8ecad93769645443f3f9b5613874b0c585b5358dabe771e4cb779aa5db1b05c85c838ddc10997e9e66966679eba2e016a24b1cc0c029a039f82425c8271aefbe7cd2928a6e5d9e584e6bdb8de546066516a61610bcf4785799f3a540e54a70dd1f7cb7882f89405d31a57e54cfc0f1fafcb7a8c3e2cfd7371b5f5323365e40d6a4b33920f79c92b299aaf0a91f36f462aefcd320c789e00b5f40059a425a04d1aab985c0b1c4fa9ee97ae05e8a34c25dde2430363d09d010053e58044e9f9bbd0cdc1016d4b243ac25f78053c76af949f03b1300f17d3457926595bb25001352bbcfbc7935f346c6281183b493ce991187460e9faea34ef3690226411b1b4a13fc3e0cf6dce42652a9120ca81558cdc2cd0d35b42837cc8be008cfbb93d550a0163207e69f6b8b1070b7eeb371583910db66fa0242d6a32e64e8a5e2e2a49d680a8e92d56ac71f3677e796d84a6d9586e235c4cf4fda0a395fb1a443b00fecbcc3ca281c59e6a3a5c23d38b4fdb35995219e8ffb1790676a458bba632eb0ad16b3466b9e4e5606ee23487772a5f46add7deb46de4340f260b3640a878959c90de132031f2982f535da7bb8167d107a59160fa0c08612ec5811e0a17205fd0e5f136a37cd046c49074b53b8dd105e7f56deb050d61c080a7c40fa6f7c616ec384cdc8f147a3df7cb861d31fb0817d0c9e8d5b8ca111be4898bb1180cb0603278eb700babb6db2e681ed9948c683c5298d8560f96223400749d8f4d81bf6d5de3d5357283b4c7baa103b82682d3e00bc60ac98a09a02f1cc8b15cec0e22db86d0812e2ec6a1f8560063508b1627053e1dedb91c61454b2830951168dc0b78480c7c55bd8f29de5b433abd6044c4901c088f7495b0998c5d92266f9d22343095ef0c31e809e18d12355635fd244b844827fe13d359b38fafeb0093af75df2c2ba123c89fb92bff1b9e8c30ebaf3a606a0204cd9ff0fb4ae49a0601f38f07633e96e93626af8c56a3671bf39e406b047a8f78a5a0076330ee0f543d7992564b647025cc79e9e96421d8efc14e106adf0a51e11bac24280e9a3760b47bfd2e2490b7c8106ea3c509e7d6e0a03daa6f1dcaa4c3a6b1dd9a5ee749d35b5051da1a7c705c8127d08a311ffd706fce3edc1773132848af9e8a1f86fdee51daaeaac14622cefb0403903fc95fe592b17fe218569a2d23058b196984047d3bf966f80d9becf5abca98436470fe3369cce2b65d4f19ede01920d2c5ab0fd3cd0cf794a446e3fdfcb515e4de8e2583252d6cb6f3a58bf42b9d658ec70a20d70eedbc35229688741d4917374ed07546e51611d91e15b5965e70848b59d4a4be5f5842647d8fec1d30f3273aaa6dfe11e89cd8a4dca70c977f8cccdcbaf4ed032add9810e4bd1623f079c73e431630dc54fff3d0ad5affafda61b14d7ed8aee36bb661b3d1c2babdea4376cc60c8e720cab25ba41881a9f177137ab9c4f6049a6727f8c3d534f057586cafd0918c99cf8fcfbc35cb0e53116d58f3af5e961dc019fd4b9713a117b403ad3c375039a8cd40e25edfd2e3fc85c10bd008c0a5241572d2e1a0df4a1440ea343ced68c298d16d9ace8a8707082f759e816c4829bb5a5731d6f5751e224c0d72ebeef70ebc1a885f542aa9276befb5133b38d1b29b8b52820922cb322b806cf5fdc7897b500a86c0312d891fc3598805477295cd834724cf109a8320e49a0ab144a4d56ff8da366ab0fe0f2462029a04ea695d500a4a930eeacb10acacdd93371c8edaeed6ddd9a5d8383ef3a012556ddc38408219863f2a647f6c6e5340110ca129790db11e46018c20280610a0184910c7f035932fcdd3f72729d7305e9e1442a51fe0a34df6de7b6f29a59432a51dcf077606f5054ce1122cd982d30b49c45a6b6dc8bc4793b23115bea62667b5c24d755a8f26d9a3dd095885c15203ca162437688f275bc09450e34b12148e62b4d395b24429a54edea3216112be7610b9812233c6c8132b204011634324350310593e2ce510a4a789504aa91244b247bb4210312502a48c0a276e90e3c60c4e6033a81c28289af2012f5c7c5cd12185831e8282460c46a48a8e21ce1049d1a2ced4f0523585288bd30d408010d23d54a09260aecca32f8c60600c4f1387fa456a3e29aa1293596bed192c14c6992ee1962e5b7224814a8288dee0e2802b329cb9820205c89118dd642728723f2f1ef026d08cfc82ccba26249bfaa2870aa9e141515195180fab580d61cefc30e1696986142ad02cd913598a2ad70c44eedd6d2a4ad5538eed22a3324587f8bcd83aa48bbad1b28cd0d18408a433401841a30310a248c901c89918a2d4e084882043a4aba92503e743cb0daf17fa30d574aa483b01f6e2610485c20a466a7082fa4e8022e48883590b465449740ab12e9b47f34456af2cd1bbb9785c2f9e1d8a5c3c44f505cd92dd8f999516ea778b044235a33da628a5b44e81168c5432b950870e3a184ac4ba8a484b612901368e20e2880d4494a29a5ea84d4eb0c814a112e248104845c460ba6244169825a5242b282728e12464468504232420cdc20d47cce0430b3faece24e029ea4756901c4888e91f1e0395758560ee0fb78a95ab9aa5884a2974939235a70f2d54b01d609b961d6653aeb294264aff43b25c9e4210a28822b0c0ecf01445630853932760a270f0b24488148dc28bd6af49ad4d334aa917f620eb412aec01aabeea18333d4ef40ff6e9933a6cb037525c95c5acb596893fa1744597a323a214baf80012637ce50f7ed47c8024042324221f4a90e5d812a397e49441dad8a4489e22acb596060799d402855b80a961cc8f1166b8b1c4c1911fb120c2d4e8814a845cdb870ad21572920613285916a32a3ace08513566892c5d98b63cd92186b5f6760f19c2f9437f4014e383a2d0feec40cb682839c2036090f041a6e40603dcc044020f39b07a7870c27d62a686993f95e15a45b222a91b319c56aa2fc4649582f936c56589cacc8bca657aa2e024220a949218254e20c304861f46c6508102d3240713e4132c895c6b729533c915a594524a7fb8f2ee0f59945e615991d2c11632583e6a60814709453c31e24c8f2031e8fca14cf3c02163bc6046877963adb54bb247bbae30c8084fd9be87c57a08b0577e48d513960e8809e20b94911907647a104287972a563ad0246b30e51a4ea177938260318d00e50403074749f7a8870498ec50e48a132e446a88d1b1094ca8527088ac189d612a410b8e22344ef0018b8da732b21172d8b004ab042f039952946a695ae205cd15162146055586e948aa082d4a04614487138c48012288a421fd34e36c8aaa192044408a5e2d5fd2048357a570e8ce10c9228650c16a071c3faa8a70dab294a4490e12aca2ae8828d124d45a6b0a59b247bbdbc388e5c88187185608c301079a80900444191da4a88c90056ca49b1c2d1821e3818f2248706c604a0e593c60c547114b76f44cf002123aaabcf4b0f4240350594c4b3ed0a40a142a37e8c86076c48e29400c3902450383830d244218a922f20196a4110230c48d0d3446a8b163c9ca179992202860c6c715161193111267ec8e1a5bc3ae2683cda9dd6d4af640c17b318b85d65a7bb75c9192555494beae928b184240b8f164e4020d5ebc1742308383931d488ca6a0721d93c35558eae181765144d6de2a3450c9a9a51ed245cdae8baa39220a8c23b0701830fa82c2d50747b282a8b18452d48dd8121168c862440a1cd65a6b3940f21e4d89660e985eae30cae64692efed1006c8b54598212088963475c563891d61b0c4c070e4c3508c070ea32376e05842c5a245b0d65a28d9a3592b937436b7296b6dcd149a91669a1264986069a172a203564208258890eb104ea0c620493963d4473e50280358591a824814207810d1e1089ad98d5c551ce1d14313262ba724316eb8b2b5d6da109a680ee129b436a42c504ae90fef36a94029a594d2bb85a35284084aae5ac8d181141d47ac50158492a72b48aed84861d4f2a0a8560e8c0bd991244610f9c043941d2270c40e31544bbec480946584131d4225a20906114f168aec6e778b0d57b5d65a731058ad55c42c5f6e983204c9142723ec00018b283605852b5bc0ace8222136324aa9950127acd65a2bbb923d9a8c2a26164eb95e63c6d4f0ca144d568805aa0b51f572e4e908982f0693261e1d5899c06504303c10b1a3ca8c62d2e486460a5a64286324364be2c88694592b1b4a3b1a26d5900f2a38b1c103ac0f806021d28153160e2f2d340828504a2985c56e08654605205db0c674f042d48e292741108141c90c49b094f40794d22b25848e9127a5942681cde9dd4c9aaa8a4a2d0250e2ba7451e1105688708b92ea3b9b88b84dcbf4e6f5acc85688f104ca900bc508cd0f947655a6a53025c55968e224ecce2817aa6afd81524ae9ccbbb3d65a6b989f396c12302d8827ae89524e8653b6eb961eb5d65a2b0a4437b2502ab7d6cd87851d1860ee5d159098db14d9dca6a8a6b4a4222e4906d64ca194524ae913d4b6518f4b612209211f28c2a4c4820ea62270545de1c2820c4308d1690f688c403242c908a6a91d39b9a42c51e8a552596badb55166648f769bac6c535cb2b444a9778b962c4a29a59452ea5d4aa4db81d25007025c2903a845954ae846dc45f33d711dae97a51db4542f3e6aa626a5b5a10e5ad9f15871b7ac96ed90cdc95f7c32aa7f32a64fddbf11414e6cbd4bf4cf40fa6856019afddedea5ad698312e2ec6b9eb5f53ffbdff6f479dedb87e1db90fe915fc7fe1b0f8f9eb9bfc1a3e7dadddfd7ef9658e87bee65c54e4303db3737541eef7b6d69f14823db9ef9be77dd9ef278adc442d5e57fed0fb90552b4e2b839e5fb9ae68301ad87fe03349f0ca403340a6ede621bff6bed8f333c5b41ebeb8f9789c87b6803388b5bfc5ee21deffdafcb2a1e2be8af5fbf3f0bfaebdfa5ada97feadb9a65bd3f6e4ed9bf25b6be20db7af0b3c06be4134efdfb7e73ec7fd2df93344899b5f5ef53e3d1bbfa39f771b07ceabaadcb47b3276ab9e65aebcffc89b57a2dbc0d6916f76178b318b7a65cdf7e41ade7fe8afd30e48d08be4bfcbe256ad9461c3dfa3562eb2ef98a0ca48fcb2406341f7711d17c7f41ee32e92365d269d07c240d5a0f7d1ad2885cffa8cd72e3b0bb87d85996f7fbeef7f7fb9ae6bb78bc4cdb5bbc0d192fd3f7b58b94499f269234683e6d43eba163cf3c9f923e19c81efa3e95edd7ff4415318433b459ee6f7dfdaef5de8f9729770f8a0ed00af0fd6d61f06ddbd07c34ad67d4a8f2f7f49b48fa3c40ebf99e6a53f9c3e30c6dd6b34c3f83efe96f43ec83781bf261a67c97b621ddd74f46b739719ba8656bb76db3e2b6d96d889cca9a0a1a36ad03420e58f9b316c545d6c529b7c85a540e48642e4f7900598bc2a1062c7b99e737ac3caba8f201b21655b594a3bc64e515598bf22295a3aa887297db99e499b5ac4cc3d7aef6b7f3bcd19930c07be86fb8bd9964c7123ff82d80cbdbf705e16c52dbbadf99f80bf9fdde27a35dec3e1912c390373f5e9ba7f9f1d55911e7ffe66d9ee6bb4e8a639865bbecf7ed5d0eb915855abf4196d9c477dd937cdb6ec2f6c66381c5a3e7d6f33893dcdb86ddbb37c742e0b7de691e1b8779ab3434d820f74bbcc99103791bebbb2884f31be416e75781cc76abefdbbbcbf2587105641e1b86cfcf82d133ce6faff90b13ee42ffb867fba3c4a333c9f5873cf753297f9ce175edbd5e2fa9c4799cdfeccd6fdf5f035afd126fa237de69bdc3903df477fe73d554b07d5bb07d43f54fbfb40f435acf3dfee84cb23f8ed8fa8278beb1503fce833cfe30a40f06fee3cd39af798eceefe0f17e7ddfe4267fe7fb82b61792fd3cef6dff2eb77e9efa9fecdfd1c11d164873abe696a865b07b6650ecdc3850797bfb05e1bcfd2af69b10bddfc4da3d8ea8e5578e387a388dfbc957d4f7f90fdfe0f1bab00d1ec35c83c7170d0ebbb1e53e0cbb2d16c2d685fe99db6bafb9773a2a9c844333b71efcaaa3c24938c3cb2d2cb48d33bcaebd06d8073db1e5dfdfdf02b8dfc26f917b1be29dfbd20703d943fff51a43fbe3cd0ca0db57d9336a5832b558450ce1d0ccfde3d0f466ccf0b2fdefc74692bdaf5f50bf90c5ada79f05e0d3c7c03eeded5bef81781c9a797b6af138c3cbdb7f786c24da4ccbdebb0bfda365efe727c363923b7172b4e63b6a20730e8e1bc8dc73af7d15d0cce55b41972d76179a45c5af36b1035f4089cad3d58e259a98e025f428e3c3c7123ab03c41e118d59051b94108a5301630812025440d284e5450f4925a6bad4348c91eedd66ac1d4a06086ab3f62b56a018340d9c040555f4821a2d75a1b046c811a23eb8e64c9a1481120c014c1c2820d49367a5825f1b8d21213809217c86411720584294900c29c7003075398964899c1462771725dc97ea294d213c68027182142adb5825181524a65de75a10aa55428b53f504a294cf66857de78a1a40a29072f3d6445c580d9a831039923a526537440a2c1b25ca194a6bb29d55a2b53d19db56ea9b5d62bd9a3dd3b8d92e46ac4e40321b5d6dac191f768484a4c4e4872074c3428d9a35d9867577049b231f5a506335958b852c40d386e08d254821258b0a03822a49200452593cad4a433f2ca8380d578750cb079ab84a1924fe12b74bdc22885610a83545f21e581684ac998a4a829e302cc09122638ed3013210a0e48217c3045445663c45a6bc9506aadb5d6ce32665c567aa9899524513310488831be6a909262a4044bc7992c36b020442241e930699826a59b169c6d470a1a45ae1869da224545891396b6f4804415148c5445d991e47ad2716126bb902065958493952c2560588218e198f56043ca0c52dc0c565464eb011a96709882dd4c4d5dcdf015ba5e445a951ba8abbbe586a67e020585e886841b143d68f08186282eb10e440da04a15a3205bac24f1b485a888e431a12aeacc0a644aa082c0142c3123a278f8414915aca95ea1a905a5182d0448d97e8e6f2fb190fc9ccdf27c8dd461b713d85a6f7b1ebc8375b0e7c927b4e6504a29a50ca584e5962f11fc166bf7393912fb0ca7fb564beab8577efd641886fd0d798847b7923a9a456bc85b305ab43a9faff8ec07c33eb5b64a1d52870e241d9a897e2921d33dc980f349cb72bdf19ae6e79c13dbfb17dbc6f3fb8272fefef417366a3ef13e19f68af393d158ebfc79449a1773eef3e8ec9cb08fe2fd530088c7b0f1f89a78fc6cf11841ae134b1a1a80e04fd97c508a42dd6f90a7aba77df9536641d75b13734e5727c7f9245b14f8041e3f891d3cbecae8e031cc638bc983e79cd83e288e2d7ffe38ed9cf2bb9f3f5a8bc33c9d860676ba9de39ccaa3ff1585727e836ce74fd0ffcebf580a7407e77c92fd578826685ae4feee9fdf3b3afdda96f6602a09a9323fe49e20d71f35302d644ffd51f3c2f3a3d6a573dee6e8ec34a06b3ccab778c7f5f7fd1b76e2b730c57f2df15f15ccb76fff8229eb1f0b82f3c9389fe4fb395dbfc542f673e6bcaf17f11841eb1f8f9f028faff051e013d8be8f276effe83578f4f91f88ef7b1d75bdd7fcd6fc6f7e38ed9ff0df3c6f92912e97a86569adfd99a568ad2bc7df4e59b66fbfa09cefdec5f930248f48f33ba2cdeb88356f42747d4eab61a19833f105bea245fdf9e31d5ff2fdc708f2d8a22d8e156fbebf20497313c14b3cfe6b7c551c51eb5274d30d7654ffd82ed72ac47a91c9fd79fea821917b6c0f7263eb710f7e3f28ef37085e1c501c87e48ddcd9def5f63190358208fe5faff0be2540067f9c41801c7eeb47ad4b76c90cfe3824736823d688f3be7d1a51d30ad0e00b8517fc86499fd67afaeb6bda0b4d5b31ae58223e9968a2c9fd632fe5ba1120df6fe151eb92ed8f1dcbf56754ff80f7bff7fe821955e7139a3751ab79bb79bb7846350b5bb150cb783a85931c078a02a47433cbf43b9f01c5fa67fbee5baf97fbc5637fdf02b82fa8e6b79ffea236100f20257ff1c9a8dc27a3dd25b6ac58f336e2f6b5d298eca95f6dad3455a4318b63de759eb540310bd4e489429f6663adf74031afdab8807878fffd98e3c239404ab9befb67bdeaee2ebddb6f033509d5fc06b9fabbfbfded8162404b0dc3bde66d7e0452baf70229e5fbb3df7ebf7f77dbfef17ed71e85bacadddd355ff3f786e1f8e2a6648f6c406317f1cef7dbdfb00934a1f338eedbf703c5dada71c84720a5bc7d8df805e5d47ccb31108f66b149295feae0f16542ca07e291b3f9fdeec12fc85fa8f1f89fb7ecfa39f7c3a67ef9403cfac771f0f8bac16348413c5ee90145f13ecff3be1a0cc403281654f3f6afe80f43bac4d6db88dfd7d4c81f295496cf4d499fb048f6c81fef186edc5496dccdad9722971516499fb049f6d07fbdc2d07191bd44d93d201e4a597adcfb8f1e16e2ba391a0e88c7c86565fa6193f4a150b287feeb15363565fa403ca852eef71efcfe7af87b4b63799c52997e4bd47c8587c719548942794f1f88c7878178bc5e1e85f2460a05c40348c9721b108f9b194ea32892a2a792c4f25e5e492cc7923d14bb53ffbe209d973ffd856b79d3b263f98b4d86cb0d0389f3893affc2013f6f693cfedfcbabcf250f16b29f14e33c9bfdd696e2c329f0e8edfd8dfd65e39658c87eebddb1acfe5bdda419219ddf20fbb76d3e935732cb379d6f9e1f259698fe91433e6e789458d9b7dff038c31b6748ba49ba49bab5cd8f8e65b3d57b35cd67d379d7f15e3f5e1cd9f2b7f61defb45e6280e24dfce7880fba56e45173b760e62faefac77ffb5cd4f228b1e4eb7c29deb190bf4e0a29a659c8c740fab438f1e3cd3bafb9cfce8bf81f8fe1a3c0e37514d2db708af75a6cfe29b03f8a1318ccd9fceb9b984a56d4b2bb75ff99ade8ded2717995fbed17a4e3cf237adf9fd8bd8ea8e51d71fc3c6a331dc73e6b217be89bc02f3cde1c3c8638780c3388c7571e5bbc3e8f2d7e451e5bacf846cfca8ec3eeeeefa518c7ca8e6bcbdf7ba7b98585beb7bf79bd6ddbe67ddb776f18be341f4d93628668e63ec43bb785f4c1186b00f8f1f18f2f153f86103c0070c3640ffdf121b8574518be3431e08f6e952da6f46b981423c558e5fab0d76b0cb59e21ea3329466249317dc24f18b1bd75d99ce454d781ed5de414dbbdf7ba90d77bb76ddeeae190bbe89fede7fdeec7ee3d0f8f12e4f95cc5439e857aecf090e7e65af4cffd6d8e437e29c52ebafb2d2e752181bfb89f8c4bbbefba908606f4b5164dc7afa21047698bfea15f27c863cd5faf2d1794a64583479720df1a3ce4b972cd6117cde23ebd7887d2fb2dfaa7ff764b90479a9f3f4a90b7ef44ef0beabeb1d0f62e461adc715f107d211a3cf6f659e065fa2efa87e2d102f793b1695695e3442dd75a39ef1641dddf9f627fe83d7d17fdf3d99dfa5abef439fc7d78a7fef6d345ffd09fafc371de61eedb057deeb7d75cf48f04998ab4666b73a5d845b398345addb22273b90c36f579b5524f1402bb5ae97b5e07c23a87ddae8617fcf6c0223f6af797e300dffbe92fba7a91e3709807fe75d1d0a0df2bf223cf95c2967b911f21e5b17a341f768ea37fbcaf2da7719c0ec761e1f5683ea4f9fa63ad78277cef29cdc3f0096a6cbcc85f785fdf8fbace619dc3b2f7a00b74798f73e3ddd3ef5ccfb9cb06d7e0f1ba8c26a4a1a10941ec38fc086c818ea3f33cfcf23ad08b7c05fdeb7d77c357dfff3ebc63bf5ffa4c30410e3dfce2eb95bda7ef4de0fd749ff1caf527c8f31d87e3f022c7e130c7a1b95eb0f166d24713b4af71b556fa9c28d4fa6aa5cf71b4b653ee691f653aabd7b5576b733ec31b27f75dd43ff5b971c88fc6e9e1d6b7002e7b3ff805b5fefbe92fbcab76f47d32faab62eb359befbaeefbb42eeaff629d28e4fd06b93dfcb07b1775b05cbf100b75efd518f5cff7357477d5e0a389bfeebd7eaf7ef7d227acdf45f5fb8e8e32f72df1fb826c5aefd97035ed35dd17e436cfb9db7c35789cdb27836b269dd77562b71765fffb05b5be3e15fb43917b17e9d64d8f528de3707f7dae5b40fdee6bf5f7e30585eee8e5ee7e830fc341bc639f7bfae1fcf9d5a7dcdf9fb58dbae7b86fa3fed132f7f593c1f5d176ad15b57cefbd77665b711b350b3a69ba4607291dc9b6558b1caefb9ed9b8cb6fbcf52e251e1be7475943f3e13b9652c7a596e505fda5ad5cfaebbb0ea4a14183a2d0f71b6487c05af77e503ed8570d01f85f5a8594108010b455ee97e37edbeeeeee2edb6b67595148c741f70b7ad63fde57b2a78e8a1fdb0af4b6ca524a97524a2aa594d629d8f9d166aff9c44f8d0214295ea3e0dfbf350a44dc5f1aef40f00f0077ffee9904c1b602db2adbd7f9a4ce03e04db40c8095eeeeeeeeb8ca1702adfc97fda50b0000bace913c082010b5ec791e04fda567d95588dd63b1e64591e65f0c3f8588f328c4d69f106f9e4774fd8e68f3cebd8ece05a1093cde9cd6ae72e7b4c542dbfb777f7110ec1e043b2ce46f1ff41af48ec0717f691639dfdbe784a1dbaf2d882373ff0dcdfdae9afb6d6ceeafa1115b2b407f28b6c4a915a0fd2dedaff697feb11eee2f17f497d956eedbe6fd2502b145d3c0fecae166f360dd4c3e859a371d6796de5ebbd65575337fe1d2a5e87df749d97501b596949fb76ebaaa16687363d3cdb283dfe9a87022bb08949686065ebdc312f2a4bbd675b19d957bbffdd8cdbaaadbcd727dffdefc6bdc7f9be15d0771578577c0ae8b4bd9cdbc9b65fb9ebcf16ec4b1b3a5914bb287be4d6ffe388e6fdedb70e492dfb86c96acf5601f088a5afebe0ff47057d575f15eb66af79e9769629ed630eec3b18b3cc88db9aeaae58f5de481ef9e07765735cedc450df33c267deef558a6df557ddfb21ed590c8e30c0d89bc15e5fab7abeaaaac87c7d95559dbcdba2af954d3391e4849cdd8844da4ab5918be5ef7ce249fb0993463523e99266c224da5993463d9af86e638ab9369c226d2549ab1993463b3abd9d09c49133691666cc666920fcd99d44c9a481366b92fec6e4ac399e4574373680ecdd94c9a493d9b49336968ce266c26cdd84c62b2b57c2291662dcff32412957293d64a980e89f4de2743daae7331e7b51b1bb756da25a1f0b356c2fcc44bebd2c4166e2f0fff2591b27c4da3c1a194fd58e8fbf0fb25b630099330b964a5f75b19db24920d7ffc90727d6ff30ef19067c74272fcf090e7d6b44d7e7bf815cadfbeb7782784217d1ec755f33c128f52dadf5ec2fa47fe865d8a5a76399e0897f3a8644c783639c99082040000400053170000300c080744a389a0474af70114800d63a2545c4e308e062391388a62188801180441100000008061188661404a92055b9a951d830fa3a83458c71bd5c0c43f435f519d108bc46d9abd239fe526cfd40ce0296c0856ae65d6010c251deb5ae1c949e65934ae09994c885e6fe000be4b21234fa64c185b4858b3f9d19041316aabe9cf1966d59035c63a3261e5b436262f014bd187d40ecf432910000f0fa635f86b10d71688b47f3f839388d20816f51c750a8f34b35f110109339699b585b8561358a2134323cf9d0ca2ddec8d0b3b68901850ff1e9d3ff052fb2c7716dd5bd53e53999eb053b3e7e77a1dd11de7edd9709015755b050a157b04139bf4799dcc5b0ef5ff113cd56287b543742a8ffa7440700eca93e43f881a9f2ed84a6023cb8d8f3f98a3958da91ea902ee59123b96863a0a07180f511f0c6dc90756ca8d0ab4d43a59b399075d55f4e95a4747f392b84fd8faa30533dbb7526f067029686c856f6b68bb27c67c95e4ef507ab7aab8dc6e4449772db624ddb315582349fa8c658bf72427de864e34bd89d6054a9e4f4a4cd5994561c778444786148607886a443fdf390deec2675eba2ce034629da0bf3971641447c226c781b210c0a75c19a738169add0e70f9456382f203c5320141228e48fc5052086f4e10df40ca87ee62bdc8fb42e013ca0c1a7523846ac426a4207f3cec26086962925675cd4909d420fe4702f8be502d7e4d2f08928784c1d388000af7bbb3a362cad5d9c5288277cf1e858e40a942d0b64a04f7b62c14b7511df9f31237d4cc535c118c9f3429ded0fe18c7445b8e293d250e52f009f97b218343d612bbee55855142db44b64a95285635aadf9490426a9c75a0e2f97f383f359665249b60ff00f1646d16764c11fd79088406fc316ad0092b71cb939592cff647742fdbbf213bd2f97b848e9156e4571e4be41e9d31beec0115222121da03633e0bd4e01b34653315c720747bca355ad4445e22b6a12728ad4ba510bc6c9dc04cea397f9ca0ed7475d8fe828618c9243a6e9b3f7ccd09cd3cc797f13927479b727d32bbbc26908a960e2bbc6d7cedcb70884ebf23306df485256e68e1224e128db4b6ac95a966388b3a8e119c166ea2742804c700da89ca88332aca231b3cf233b927500ba46ea4c6e62551f86ad69eef0632c8186c122c82ac7f4c8307b145081af96eb710dff0df45a021bd644f633922ab7264570b22c9fc24979e954f3878958a0cde62ceaa28243c7ce0fe60bccaed6d6b5d8351a667e20eafbcab56b7cc00f79fb5cce57af57282156e6852b557d6bbad9d1c6694faa48b72751d3a44db8c87f355b4016e00cd82ebf4ee1832d8ccf5290bb1ec76d622bdad3656ba97220192e500d76e53ff85919f0e99ad250e4905d2704bb3f92b4d780e406a6014cc29088d87484408d12872bf53933f710f9fab58d3b9a9e2e204aa51aae68f6eef2ba38a18d65816b6ee24c319c947f8fd30b55cd2ff983819c1d9877860e7c9c918c9b72d89d206bbf82d19abf729dc5d1841710e05b0538180155a415743671006055e330450ebbfab81b8884603b730b40f4dc51744651c8054401afb0f244f89274e8fed38a1b3822a13c0f64a56d091144b53ac86e36f16e386f1fb461f9a8fc79874da8ddb6eac0a24dd0b54b293dc02600821c0a79508448e412284143c9f3ecc09dd162e0f60a45a99c9956e39e64e14014421c1f57f713fc0ad0a545ece43615325d64ae77024ff40d4e0a2a7d26d5c3465661f798eea55d7f35c34b0b5bb819b40b19b7ef64327df5002c34dda17e604618ea74eee309060151cbcac602c0d965e60f6a4cbea1593d42d519d9b9cdf9b55da3c6e159b933a371726b69955d9eb6a86d014d44076289ebe9217e91de2ab4ba45fc57c46de206dfbb80a92dbaf51a97ae71ba52e1aa45502b2d239fe9256f2e9df84d94374fc3f2d90beefaa183e69f3779c97855f55d85a87d1248e03186c015588c615a5201449a3c1d2f16507925db8e418c1a4238378cde5732894e9c188e5e17a4d153221f18393345fb10f18b7ae80a96ac11cb6f0fb7fedd5b6e95c6efc00d37f29482be6dae947e5b0afbac844909da935a12d4a55aa8bc3fce390e3fcec8aad74fb4397659aa867d57ba36aac2c5d655727358420941a79ffc05914bada80e0da82b16cd8f0532b303e6ffbeae1dc15d910009890be94d5f634caa6a6d39647b25680a6f66d0d8df1dc17bc21b4ee45306bef8769439e6817d17874d97545ea1008567770a865dc96528a8bae2174542a35c7d77070b745092f610c3664e4a132b3aba6785b7cb3687cbee8c7c95f6143c4daec954b9ed60547f91e366830ebcc6266e3440b3beac8ddddfa47e7314ba8de1e20e50c4d0563d3b8076a03189c89d88163de386296e0549b1d2829b70d82de97283c771bb6308553ec5a656c27fdb19bb43a707ec9f1646f4fad00fc36f06c5afc3607e321dbd82a92cb914db88dfcaf1f2fd0f5af73aa18582698508c3264485faf0260d321dfc7a385727c1d4666f0a1949cd54f23191a5867b7ddde89fad812e748a5237db5af739923ad124be84c41dc56e73ed3f7907aa145e6ed026578be43e80dd00e5a08bd019e035bff2ff931192285a270ea69f6cc8b18522dcca0b3730b072a1800608690bdd273a7ad592c15599b8ea2bd6e789c0dd7b29c5dc524d57ece21e572b5f86b283ec14250b933ba55554752c3457ae92cd20de1ab966b9179660929e6ac5a6e9480ed4ab7666d9394f895336923294f8a861af7cd5da63910800f57af40e5c71e12e012edecea662b53304458abde6f30f5120076a4dd5692a4242262c3a912cab6ab57759c48732f50b11e214cff83f2aab8acda1e2995db1373d46d2a0429c8f565b3c76ed351700f82e8fed141d9bac10819b0252c1a08c4a0ba33d4a2b4f6947df8cd9bb9ea0a17bf4fb3d7679fe06aee2036249eb4d6da24dd2b8378ccb0b0c313d2697b22cb09b8410d858c344f6236171171e42e576fbc138e2970ff24a91c323d9970ccdb739f77c7458e8ded3511dc16c8433e2514852549e86dc558b173010a22aedb91faed1d3f0adb0b8e1ad2e6c0336231c74dffc8cb901732b717f56e7d378bd4944bdc4db863c874cba4d905601a921d4ef8b11a7896dc818c4239219a0308ae1c1320d91512a457d7c5ffca75d0b993c6ebf652a2ef94c8501732a586f1d5c577fe4c86506c0ef65fc6494d1bafa744e5cc4901e1d830a60fc3f984987e172ba1098572cdfa10df5c657502f5b8aa240688293e0ab1a0bdb214b9eec5f58fbe90d21df7afaa6a890c3768a69cce400e2c9f34104c65ff3524190343c5d6747f36a7281c9131b45b8aefd1bc774d517a65201c7495aa5e2059385016a38dc1cc380a5a643bafde53001fcd5a430c00609d8cd41ee4a0887278e1538b6a5cdb29dfc186e184669885622b35ab38065d89301a128a5c5094dc4bd751ad38d6692ab56a5483edd454a9b899b984eef2af350cf478dcf00d6abe952c8f218e1d1a09e01afe9cb35160d5f3d90f10c1826a5f2ab6b18b0da36f68aeb0ad876cd85f84b10e058dfc6cd8b2bbfe337495c3c5015c6b43a42a27da75fa5b5fc46210845257899f17d136b40f71090ef6ed8c5d40a1b6428d04a9d8125295482657126aa4312afb4ffcbd18d3bf82eafb32b3325066ebd143b10a5dfbbbd2ac24ace376f08e61cd8d8d0f66e7f43b078a95a66d456490e2892c5aa7d72ae41663c86e1a10b92790f2aec269836b908611a12859565c3622fa1fe4a5b3ae9bb33e12a614b416a29c8721146956fd428750ee87d18b6d0eb98b50703c402218f34384088756f8ea6288ef8820a97badf2608c16ee635dcc75beb60004da022df51525230abfb3e78824b1c36c0b66cf52ecf24f00699185e7084b6a021fde299c614cb3fcca6152009e28be5bd2421ba315cbf14a29db55bd812108c2ce9acd16095e601ae3b06759e689dd386885b061cf3a398f6955f1725e80619288b38cc6c1ec527186be118addde241b2565411e70e1f848073581d97332a2d18d71d4c85fb8b0fc55271d5f097e12311df5ba4e3e0864f456c63ee6bc31c5199784ca619b4c02e1b683854265147aecdd8c1c17da1f625141c95ef6dc081b03e87a16605a94a44e20138fdb36d436aad9c3a4243d6e0588e7ea3b18ccb189c1c20952caa4243f56969af0038b537299812b33e2f9276d1f6c6a314cf62ed8cc3588e77c7fb2e13513372ea028758dba01960df3ebea95f3c25f34137a171a29084810e72605a6d0c1088ff51187e049a6a1156ae6f5b3d10a96122fc73569aa68b4a204cea51b70ceeb1f576d16e03e6fa0f89bd78c160942d409243fc8a163879a49841460df02d2b9400a7450c1f3200af33906c507dc480405dd06d1baea94bb48feb1f63db485a6b417bc2b4d6ea06eeeb43283b6598ffeb056a8846ed75b91f3f8a6d0d07d7c49e09223ec834c3b663e81d58bc21be984dc19aa9d9b555c60a22f03c99f7d69887a660e69af6a55e361487b89ef569fa352050ddd78ea7d89a3ef03db907c8590ae04a9ca9cb0c29cb96f9369afec1df08538f26029764f2d66e6cfd9569a7b7ebe82856c96b281dad9166d488c4d0997973ade77bacf4fc0d6dd5b0310b499942e029c974e3823442fcd942bf0ccd6544117b133a1ed4d5ec2377f69bd605ff55fdaf066b2e9590bf0a488bd51e815905813e8e4c4b47b79ec136edf6600376f2e3e84e7fc53b6c91e08873b1dc1289d8f29f0d39331394c4043e043b1c74a9680d69d64bfa2fe528a4c48be980d641c200c8bcba341376f2c28bc7f5a23c827a8d98a6ed4a06f48f14feb83be50d3a0e273b14cee35e82a715ce0ce0d1098ab5394bd1663b113e430a6b725df8523235b13a00ac3e331afff1a809e20e488db47c3a279169838c8c9bf7916e5a9c9ed37b8398bd8cc33db26de6ddec47b224b67701527b2620cc70dbf13f1848b200774da4a518d2a0234b29827e3b8e59c9399b30a91d8303a522cc7fbd389293bf138353dd0a8fc5b76737b079d68a4d92dd0257ca7227c589fcdd88f2174752c8387ed2da98b9b517ce48e508d961ded8c102391ab63c28a44925db77fae4e8a9067a657ec29505b8b605a3cf62e5d4ceebdd8d3cb25abebfa941eee04feb8fa3dcd87901c78e7d2d63ad2286d771af295dd3f11c548f153b713a8caeb1e541620b6d7c4de02d739e35f17b7296aa5a91c129692f9c7ac6575f74683683eaa2caa4518252734b10bf71290e69830a441ad42d8580bd39b3012086bce6039f351030c4cff75b5a4aa8dacbc578af5a2034775caf36d0e47d7147d1c6bb4f9c774dcd3728208f7f3795b0bac80f9ba0ddd51f49928fe792abc70d187933959a7b92860c711bf4a5c04d6acb733f73e0a582d49d91dd9e66c97be1700099c4b319e35d907f0f941236176b51a2b616ad7562e9612eb12074b1d012c0aebaf45ae315f851b4475b900c3ca1e48cff51d0dd425a16ff6d48c688f276e831da442d87083bea9479ef9c578a8dee5d1d4e2990828ff5d41f52f0677de8c05e349c31930a70a864dca3a5d3d6641c3c9f92c1530290426c532d516ae8132ba84ab2f0d70ac6bbac7062cdf46040766f7b44c5e79440ecfcdf8de69fe4c3bda5c50b10b11506d34b5d952573e53045509860d576c98726194520d35aeae24f50161c15137df78f585e50c327ae2a635ef915bddddeff081ddbeafe3bc9173247877a5b668a0945916d7cbc2030967aeddabefcc1cdbc3f2d8a83a3942568137c898c4a85c80de9423ce6094bf4a8a888cdc2b2698210f66240515c140945d61f512b8962169cb03edfdb02e68e88b2f13304d6e984187a85395974025884cd322389d74d0e4ad9362ebff1e8cf4739de9e40a8c50eb267c8f3a2108798da51994dc9ae901e0b633254a08194b5605d3b4906cd364a453a7b0a7505131e80c15045d749b5c684ccf193a075c714793f70435fb246df6e0c671409f30fbf8b85936b3610db36ce785de7db9c9525f6104efdbb3a0ad2fa874e18d5385236f12c4332e1a79d4decabb9d33aed812d4c746a368bd8d86332b86cf28329bcc11208f538b4352681901717db1a07ee6cf012bfac08dba7ab5dd68dc452fd9e65f2622e78333e1de4f6f38be9a07a0ef856801c2afa9e885b878d82b048d5e264752ae4a46b6b7fccef1bf26ef579dae15ca26842bde303ed32bc446b505cd2b0037e692b9abf72df86d447c1e724408a8aa9b538847b3b1ccb51a714d61f4ac056f4903cf18069d50bffc860f15d5116ba2dff5713a2c681177e46b33c89c40af346e4d79404d8921bb9ae46e7e87d9f7e9ba9b10ac98c7adea1cf17ae2d2adf46e5bc5b0cc3c7c275a9047a1cf8ba1bab6d5c65ae785a440ce5cb1f6771ed9920dbdd1af051bfeb53c71255b3082aa15bcc478d2f42f5ad66375b341548fc06ba1d171bb0c98dd05519f5ef5cfce838afab37497c87628d0f945ca91b87e10e4332cdd6c1a5fd92b51de0f7efd7e907b1478be801306308aeccc604a4155b664ab60183d2c31c0e2cf9eed4309dabb0ab287184332fb8f71577b1485cbd38eed237711c25da404384851570c07fcc037943b6181a503ff1c4ed3fb06ae017a9c6d5d42f5df0364f56d7fa19d782cccf5d981b594be73783de73ebf96e61eac7f7929b4550fc8cc8d6e1a246ec03895d522a55db84ee9c6aebd365fef7e2e35d456e899aff783faf5c455ea659d709a72c6ac5a4bdffe9066b0217d9a2bad3a7f415a4e926021ea2566ba86d89c5c8fcb41dcaa714680753b18a2c41893a36359df9a7dda218a7d04be48bc8f442202a268508d803494fb6fda9a38d746cda2b78de1455beb1efe410f5aad4c0a39aacc5654d3cc522954a98e45205f16e5c06785e1e841c98d87646b8d9826aac79da5a6f805c295b2d2eff7ffda93f343ac4f63f2549ed4b4fa5b65d3112312562c11287173d012270b7c48840a35f7cffcc76a1383710336d0b23df3f8ef7d9839d567fd719eb950b1e9e2f52b762019708dcd10d18515930c17a7f5083508651dd0d519925d868a4da440353ecbb970157c6c007309cc42b3481836e09d41ed406739737aab3e6aab29b42d9d4ad8ca0a094e75167b496756f3d2244c82428bb0d48b2668458799a3b2079132eba21631195c7892d521d4e5d80bcfb202c5ecd4d3eea3658556d734eb60084a4b2e442e8d1f55a5f0b44e7674455d66bbea0259b0bb4cf5a185f6c9c7990ff8564cdf96b162e5f33dd2d1a17c959547263e9b293cd97b0eb902a904a5790eb224568be5366bc5332fe9e5f46cdc0c1c761346fbd1dbb955558967134f4a00be14865d372bd1a13df591b3454a203c44b10eec649225ec91c7c417d6761b8a4367d48df0f5b5ecef25e0693178bc44cc5ea7e7fac80ae44b2e89858218473065fcc9c8bdad3056d62e4f49bd8966959a4ed7aafdaebe1cdf785a8322b7053de309c8da9ccd7c539fb800eed63590da900d4e2db922b2624af32750f52281512496651caf8c7f64494d533fd15ac24cffd42e47125e6d534cdc2b8c9917f05dbe75498893926f0b3772b9e517c5372dbf11959c6dd6b22603da6a05f7852dcb5cdee281da7510558ed2fce89e22b45bffe941fee8d6b5306181d237e8085ab8e6b314dac6e3e3d168dc22d5b97d42072e1984af87e463ad55baf340665a0805b322038dc8c6f76c0cc3d0de5e8d281d447e3f5fa2b90338fb7b9f59e2d9330cf524b1c391449a4b51bc981e9e39c6503ca71a316e3c5b86b64e7b65c2f03cd0e42ba076ab613147fbbb2dd2f27b422f5672d3e1947d31cc57e6d5640fadc06246195fea2d7a5b2a88241936a16bbf7770a1e3d1155f2d8ad656792f7ae59d3c8768bf57b4dcc5e47cb4b507d83c16487d3234c7f2c7d7cf6379de5a98997f3af0598b81d6b1b938a1ee0839d93b79f3d89ea4b01081c84f0d588d2652157cf1095c60dc4c66b829caadb4bf702059cf983594901e103639d261f90423b84120879a8530b31208f6d52e59a5a84ad122ea650619f9b639b160c5a0b5c21d9eb05749d969061483fe84e8bfe2582ebdc9b8b0c2554fc9df1ca75a0ce113e14adbce401aac63a0d6c6d1433b9d7fde5280de3d3e21d575183506e834c6e79ca2aa3330223785b6534db30a2ee1ee6ae324eb3152f20a565f40908b0af6d19dfef1d0756ad82f9e46aa3a44ffd636bbd475a2da66ee94f967e6bcd79c9d229d09b0531dcefac16d74c34204a8ecb279e4c8cdc4036f523b9714781ff64bf19d8115fea6fb0e1ffa628d6020511c610bf2841dc61a287687d09b732ef0993a8ac6cf14e2adb879745ca8a0b470910a5a03a15089219e3f5c06b2dbaea5f07900b36a13fff98dfeab9d4d9bfd4ebcc123eb3b1ce60248a4481616bc28bc04b7880d4e59c1d0b97bff5935cb6fd5b82df38eeaac2027809fb0a680a416183e9c95c742982a981f3543e12cba2e62a99d63e0b7d3cef62fc31683c93a21b9a6dfb97ff20d30358e4d707c4534d1420d3d929a5cbb0c7ba36aac2c5d42d1c50b65d851b88fa4f4fa7d7619ea7845074692ff6f82dd08d639d4721d3437a1337d4ef40db35a9f1c3382d1529f21403215f6f499fbf8faf3375dcf8c91695fed15fa2dcf8db234d49c6c50db3777a047f86521b3c74a56d9b529af0e95016183cca3478fb43b2a697235644a43a1f85b75e167af1d0208ab1167a7f691f655f68b6b3ee26838eb14bd2c4d9c868e209cfa959b957b4e66d2ef4734b4df7b0d1ff532e3e54e1857bc7c4f93a706696fe80c1a54a53d138fc8f1e817016931575bda830a486752c30549c05ad2df119565b13432979ff453d49967de88d199f870c8cc525d6cf2d13687f1de9d49dd72714933094f8a1c50fba29a9c07e3880b1524cb39ecdd36d4d51b22379a5845006b974d11c498be5a7859691bb4dced537ca421cac112f52dfcefca752c6df32a024b620bacf5102d1047882eab76e2d0bd18bc98175bd6a44d6347c0b54e9aae6cb409eb471433a18e78d7f8fa6335a13d551f9df9145e49d67c205366e61f4eea1332ee8c4b072234231da32e6c90701f69a5b09eaf59a7fd30adfcd6cd08fe7c98b2784facb84d47bb379a55c8173d3be159abcd093ab8f6f7dc36df4a79dca9c552830f095320ee84fd556a03b85e0a298e57f6813dda4ee4ab5dccc9066bd79529eb166f2c2b1a21e4cf45b1c54b6fd2dd86a225bd982525ee8f9676da662158d2cd34cef86ee0d6a3fb1b4b4edfa85d2eb82ef786bc47522e96eca51491cd63bf55717ec666c7f38a1d50503d903a092e99aa7e4537ba3ff7b11c5cd8b824e8f5a68f218703cae2de0e70bd2f2d15d86650323d96847904d5f79b89b2871de34e2a336270748b19471bcaf53f074d5614428d89da3495f28943d3a427164d054e6ee65cfa757d446ea01cb274a8f6c69dd9485a1d69374d6af08900decb78df9ba5355969aa169899c44ad35e468b1b0ca801012221970f03732aae852b3c2a38a8cc8f354a44a8cd5f073f5fca6e5603e65eceda0d372741cd6e7398124c9eeb898b95baf93eb59436b24d58f1a5642a7a2d348afc0bfe41373f4ced8cdb921b65d3d5cdaaeaaafcac1975af56d11404818c15af37c6c02c1cb48bb3220a2d8b391791dc55e14d06e56928f9675fc6f39ac5f903294997226a1ff5271c72e2d134c995384b5505f3cad0a976b397090351d64722e26ffcc67ffe4bf753942ba996aea9a331abcf05969a61f49394e0dac01987b77492a2fc91638c992d10b4242f7d38348c3d1a706be043cedc7b59eab6e88738ab9017efb6b4e44735cccd7c70ffbd6ba84fc3f0fb87e32056a5e600bb5663e6f526fe84fcc232c7d656e5d24f9bb476350882690bd9ee097f6f9d3bca8c2b4610c5cea129124726dc9c278a38a60f045037419bb9cfef1cb8ce436834c08b82ccd08db94a13fee34c5a5081b880386e09d2a28f23127a3ed0c67677b1f2836b2489257843c622535ccc95d46c4f7c2df817d8f120a7024375e53113345e627171a9d574c8e56db5f674d018c9fcf111c3e440fad5b68201f916126b615301994c805cc549c712fb5ed87968b83442c634390dc5d249f0d8de92e5e259986d813e88b2c4a0a67caa300d1289ce9d2a5ec9427b42d4456650c40734fc46c1eafc0addb91fd5844e31e545f1eb4131f765a1d0bab4e1c0f775cfe14c626d05d51800fc54089b493e796f7da6ac11ea4d7222b30406d3bac153d06426644cff0bf78a12ffa9c0b17c0b2f139fb6471ac72ab9f7ece8b2c304c7f6ee9695fd06afbe2e5df51a6f70b12ac11fea967f3e980cceded8b51cf01beec5576d5a7c21a132e8cbdcd426773a1d0f0c6bb8eccb19086b5d9e92c7f1f67a749df395544632184618a432c02ff96985d5cd16327988791432cd0c779099021dfbd2ce2d111b276dce544d7953583456410beb5ab537e9ccfda272fdb66268c805afe9bccffe4f0fc3944803c21c8b5c56d943aa0af9d8f6f48bbb9a34e598750fd563ba644dcf8496f70d3cf6e9cad4fdcf4a7d711e9fdd80e9d1ac2261c714d718dd63bcd073b2df5f4e1627b850d6af23373599698f15a1ccd44d0a39e24ee40cfb2ddc3df414d1bda34fc53736815fb6876e523fb35d66dd76149c3f79541cb7c8032b65a8d23067bc865a3b3a8a2c1fca59777842a846cd6ccc946e40eab27d2ddd24837910f28ef5f015d0ae5ebd2ca5ee1012c787ba6739c20673fb49c0c614c01aaf0a1075505cc1d28536f4e72db6702209174c0966cf6e3af95cddd070b845842a471baec1113502b71afd9fceacb96bc3ca18e572aecee1a18de702b81b138d43b7ea66c3d0f179db9a32e6e449205a0b169f1833b367cbc217e8669eca9751698d1159fcdae4e9d05ba2aedb4789c9188f652aa460307494902c5924794e67882b44769fe1fbd2e6b10cd0fd85044604254834c0b0622127aa9b637ae9d3ca61368a118884a958e97288231621a59fbe2d279cf5b793192717e0cb049b20863aabcdac887fe5e309925b5585b96b3f3c01279387aa0a71b153dca94e5e10e1a649cf689ee02d90da62cee981376cb707cb93a51cc824bb1ffefe009a8ebed36bb31c1d20cc75ec821f0031149636cae176210aa8e115ab8bf84d2956013f79bf73c3045fad930adfac2aefb10df633593145b88a5a6114f1046b8090ea471c95892d0215aa0f55b0f662b420a9ba1cbd6a8faf6eda391292e2edc51a4eda242ce65f49d9c8f622a93066c503aa6787d5e8b972cc744c90c56c5ac6a3261aaba77fd2fb41ae91871bd82251f4f5a8e3b1c8fbf771a93062e52525925d0a81bba7147b8e5f8eee17891597e66ef7fce243a3c5c327b3481eb97638233908cd6c2d117ef016eb6687272a64a46a4efe936157e1f2664087ade49d4e5bd4d1197861ce062e024d28a609221a13b021d183064db395bcbd885c856c26d48b2728bdf0e98a3e1b08b1249b690812a9caf60168592ea3967de301c4e8ed1548292096ba4638ae2562fadee853ed386845b362034983f2afbcaf11b32054444ded25471c75e634798f15b5e7addcba88c503536fd83eeaf66308416528b40e550940d06cb68d0d8c8853265a09e27ce276301b26d35eff83341d60824258bbf7cbbf98f06234d6242f094b6b3ab1c027d6092808750410bd85f2224cce5f92b6d5288a5182eb26aa6c50182c4978269e017c3d7c950efce76862e2e755860587b8694ba249fff050de85b35b0379dc995554c429d874520d60d788e9462ccdc8d3735a439a1442bdc34955ff31f34c4221e754689471f3cb298d9014a2afa336021d255ac29aae3a8ea9a913970b8d324510e5966b63ff316ba7599552906a40a5aeea43a01942600a068a441411d54daf15e907e750c16420629578eb19a9fa315ef65f4e59c335cca8cc1372b884834e4f503baf99180e2685ad835bbd3be3359e454dbf08e32d9871761b248bed867012cda1f605201caa38cd1ebac565082d216d1cbda29f21d1140862e3c6a52e05b58e3193a13d91f60e6308d42d5696964b4bbda0528b17a903e500bb220185f81c47c25a0d9a6be2d15a56304d735892bd2630ae38f31d3a6bedac23b54c611e38c35e0333d71e67c5626f7d5a6c03f400f2e6a5959a57ff15775c8708ec9afb661598a5c28ce35909931f22eac087e04f18f24e036e585ab97745fd97c84001a7f54565f7d3a58d905d141c5a6336c60828fda9f48da42f8e1c6959e5b8925860695a77eddbe3012a54699e73ad5a89013ad3de486e8da5855beb15e3c899d9fd4e220a3796afb6dcc221a823482d406e476bb339c50ae7133d7172b36fce00297459cdafb9891ba5108a97ac43d453c32a09f20a9fc7ddd2796d682e9a64103fc8c46476211c188f883e6a08217198994aeebb8a443661efdec80d76ca05780a8411198ce8f56cd708ccd3a7471087c215c31d5de3f2eca5a6ae521923fc43f45051c3017cd06834a84a268d2d0bc50b136ec1f4b1c9f934cee6d822ed67865ad57064fa5e6b5757a07101f8ea3e748cac18a6a9d6f881f7ce843a48df40fe85aec0a2d177559dc5d02a9a1dc431f33780e61376a1d5f314c99910ba619d1aa6f061dbaeb51f4210315db30616bf1d2177aca76a7ab0f092b5c67575392dd675cd1908ef0b28d5338f1227bd1951747245094a2e3175c5c62fe5c4be5823dfca2efe3f7142847ceaa2febe46fe2f42d3ed453bef20ecbccf6cacb109ef46b383014e9af3fbfd7a9b2d23b17b907c0c12c3d953b3bf946a5ae44f8a71c52c100c1ced1a49ae24054f6551da85136261c6dcd2f6122385de47fef3a33c9ac21ed48d5abb479e8a9813ab662f161e8d35fff45fbc0196219351c046b1cd36d11698af112e714c1b951dd0cdc605c63ab2b5c0017e22788e4f47c03e89c22f2d8d09549b5ad12822dd9cf081ec166c2e3291b261bf17d4395fc5d3b771c304321abb79e1b28a8c31897ca2747401d6e040b0a87db71f521e3e3db09d87f3105b8c1969d0b389b2342854c9b8c4029f8f058aa477c5b17b392186087a57e55f420af41191817070eb5ba53eb4bc8e5703686bc2fe5c631c0047971d8e5f4266e27d83519045a46d713d21f5920a9ff25df33ed120da4c13983cf76b4656b6c513e9abcbe22d832bc19893a6efc8a2358e185fa74f11083459a6ba621b0bcfd7a8a5a289225da9e69d090e1e1370eb89690461d53a8e202e50225be982968d336ff6b51a02f626e3d7f7eaec4984207339fea6fd6fccff476e8bee49df6a8c2c3d684a68e8730bd0ff7891831207a3d811136027a2cfa0cc4bae4008404cb42c9d9a6205675f57ee07c5ca1ec1b8c15fb1449ff227a6f17ce4654489eccc2d2e2b06769410e033536a64f99bab6bc5a179dd73897cb48d40c8619b928f66d9d4e6f3a2d83cf063b7c24d0c0622ad9a214efae6e873fd67e7496800061dbe23021288356d5f1e678715192b6a0b73f77cc5428ec1a7017fdc8ee675807560e988a0fa84e1ab62ed63ae57097dc49c311f1d3ce3faf6be6c470439651b9e9bc87424244b5fe9b9283049daef0bd1636948be6812156af3d3852b192310bb9a85005d3bd490749446f13eb2aca920f2513b3718f9662d0a0925422754639e20240fa2982265b34ccdff98e58461573c2488d2d4021d46931de9688897e72836849657c2d1715d18c6cd005abb0e55635f35a2c87586e44045a2cdbc35aca62114f82086c209a8e6deb51590ee794c85f4e45c4fe9dabe1c9fc4552da0a7ef1d1f96d0f27611d1dfd04ce92eb0ae883e22dd032d310ffcb08a82645f43aa0fe2edc67341e5a4c500df322e91520be9ede0a93a7dcf665fb18f0de6199c29f5d52428619bf469a66ed8230e435d2e27f84028c6508a0876f7e9e2136c49e76d0223079d10c661b62143413f4543261903e3216aa7d8c79a80f695fbe90b48567e87535acc5085dea08c0e026eb9d62d55a8531a7abf51fa3c0d1d9d3284d188e929fdc7add8c40877a57b82e2140097e83571ab45c08867c8ce67fa0f6b516de25b830d365c76d04d6c0b35ee5e8eca8cde661027d22dc2f224f02d36bee038ccb43d9bb1e5753b0f03a122cd0a75670de002a8f6d27875d41ab81a470c1d3039528ba1dc5353aa8844073228ba4723849a65e9164e1099c35407f4b9be55000756c2731d3d391c6042a851784938b12a8091c45515fb566e5f77524842531b7c00110b1986ed2ea936f5c8068602a47acd23d55133ef1fb2d62391bf23d8f0292364b43d30a3a5b4f82a23cfc2bc7584525dae60756279dc0ae8637d95d3d53930dbf6636560d8110c992d385214b9b57ec4a57e4a41f86b7ef419e96a8c8f829f38bae842ca303013becc213babe35944c9f8426dec6ed6c64ddc6780dff3621537f0c5edd9eef8938b299a13480ff4670d8e571dec66e94fd2e364484fa84d6cf46d61ecfa85eae1b9ab04c6b0371cd1cd30f8ad74d1ef605dcdcb880a8564d4a96bc61385a9ec543cd83194af06dfe4a53534c38473e909ae79bb1e36b90c5d8ff55ddcd376c212bdba5621858eec88db2d096531e6ccf0ce446e4ebddb2674d84f7d0c0c4267a970ff53718bc850ca3d9f127a2cee02617ff3a4fd7658ecc4809b5238e9a55cba4c971a4e40276553d5c6862656925e92eadcf27e9ed80c1f63a2904051a76a5dfa56b027e1220a0054fc20afb7e136aab3189c83a061800705fa9f0b378b267dad7c7a036fcc14eca3bc5b1ea9c85e28d055b9acefff165183a1c024ca74d992c1e3d682d23ba91bfa5599dc6c147ba5e595964185a03f6ce4b21e2eca01d6bcd1ec3d8561c19765c8c30684e8da2ecafa70cb788baec408c80fc72072526949aff3a2375dcd124de5620cc74fb852a8d9a31f979b9f4fbe8ff6e1307b467104cb68e27393052c803422b98fdee99138699d677f022417b0137c54e5681d2c516195d8441466cebcff0cc9543271360666d50cd12af06960a1dc93e458d5fe5319d7b762e60ccf1e88e3c165a4d9215784186170e938adf81a8223c7218389b98bb8c2207050ae2913279a7f591c0caed8bc467b4d2ad744e2d08dea3ae8d53779e34940a05bb7ca26a94562e81bb71d05a6b27761a98e2382646f3e25b4041c8248d1fb38d8cab7437277c86db4153224d454575e67565472740a911edd0c98449dfc284b774e4240ceb1e4ba62763223ae22be6eb424f813d119245035995ba2b2f60ed5db5c121f5d74df3586368f104ed2926c5a9e55133ea39eb6ca472d292ee957a0677683c6a242b83313604b148f064239ac51b895acf0eab07c03630a98293478ee669f2f734635a926e925bcb08571ff49b90a798577dfe41378eb38b53947a7b4985abe1ec574f99e9a1644d949d64fa963705cb821ebc1312a0b20edf6de46c34619a2c5ba795bd812f7c8c3f1d075ea803c39626490ee2faa92cd58c13fd5b091c9db935533ca597fed6c55f5435eebbd844a95a6532210c802b2f2a5054ed4b1552b4d2ae00810f85861652d22578276ad04d87cef40f717ec522475b136efb22ea1a97709cfa8690ab8eb01f615c813f1e9afd4ea97f1461be9d091f57c3adb2ae33ea85b5782a7714aaa27a963f86547f27a3e9c180fe29bed45f6ce2d448d6a3457900641d91f961d09ae6337b0124d3e820d6f98ba51d9d680cbdd3d7e1b52160c0bc9ea25dce1b4fa0a53f3c94c05f70b19c8e5b086e4055c5d4209f7d3b02b15a52410d49a125698cf86d546d4c15244364a587d63d19eb3a589ae232d7b6a3bc8f494b523769f05c5027eefaa18c7ab14d9378a3d111178ef391b3b207a2626ceff64133395f6f1c61f49f55c8a2b1a1a12541d411af6f2a730285a327ec325cb1c49b41f21a0a4f79c711495fa45e54dde78c56f10628687cc6ee285c471aac9bf5a333f73d86e02d5d44aa9d639798f742f201c84717d7dbe570bd0f961119e71092a466279e9efa6201d59f06b581265b0ab84b38ff356ab2865a46bb3e9dfaa418d891d3184fa97e2eb32b38a09f5756cde15dd0412b3bad53f704755836e4b00db2ad7fe8a9a80add4129376db8ec8b240f51a5b57aef64c644cd064afaaddbe943120729a97da7817cb51bd170745f6406b1daef86519a647d97cc4f685592211ef639639b550688a79b4c520ac5eb15ba5a2918cb0c4897c1aa3b1def1f6390a1eeaa09d51029a55cd35be44455d0faedee916f4c4f61fb46fbcee11706b4c3383c654e5eb61cfa5e29e09f1952aab5e73870262ea8e59659ea90fd31ffbe71dc6a28ff0fa72ebbad420b3f94388293dda10a98cf47c35b4f790337246efa71bc2885b35e5b8ef840e66b07428c9d148baa4e926adfacf1999081ff426fa9257dd1035557a704b00aa79be73f0de22acaa58f9474288a1dc53f242c8445602252c496a267da085e4b0a13c371e19685b126620a8a1d67450eae68e7774045d79e5a7f94b2073eb6ecda7081165eb686cb088acc100eebbb8af37f614adb19050c4b6222716822a9f3c09e5b4a1a713cca28992edc4513d12557b77c50fec71b6248b5cd8329a003b95a6c8282fba0ed4e112f9184cbd436e0560b19094b82d34af7336cd91c9943a086d52f6887b94d876bc671b7243bea3b4ce4ff1dda94c62437cc7a51189d2c28fe4d8aa2aed85df869ca4dbe2ef6940d81078525c6b50575397ca82d867daddde03fc9d858e8c9b9febad45216e081dbe3b9fc0d759a16389d8f055537ed4f6f787559d323a38c533472566fbf4cb779c1480d00a538699cc303b66e49cfb5ce22fd8b7c511521a2b3133eaa6ff1616e90354f9c0ef7b0348302879ea95e0e159577df61a2b1b28015d7dec0b11079405a1c1d1ac4fc069831eccf6414372fc6c9c7ad391b0c8e4d6d67485e93b83cbd115c8867936c045419c8de80b1ad3337320f8b53eae493917049e7cbf84b08553e1d77f6a213a91f984ea8ebf2c4c44fb3519d4d7a26d428c2776654b9a046d603ac2442b45838ca05ca556930b807795068aa8b940af1eb2296cafe43b97f9db87569c509022d76c4eb26c2bc9912e76a54dd12d70c34436b1792b0c691dc476cf26d8d55a70de4af9904423499b45e6884d77234b5af15d647db54930bcbb98fb93b8376e3b519602c4ddb0a76bee300ffb122204020cf108327fe4177cb5d260cd8a5f26c724d00d8d80e1c936cfdecfd936315ef7fa9cf53fd9ddbe22743c6d747fb9ff38e6f4721c788a31e552886410242fa8b7486dba109c58d77d8a8f2d362d2862089a6ef8c4338ef21107a6f5bc0df98830def0296b6976c9692909f8a2d8ec9725136144fd32c9d8c647c66c23f79ba6a9867f0866621885455729ef161e8b474304451a23d317898eb56f1566833a6430fcd74b491ee0ae95b866229d1b6102936c0d087272398bfce44d2367842173d422a5f7d67e551495039c31e4484f6f46295a4b568ee30b9378cd458db077bdcf50b117e18ea3a4f7c78e23a23f2f6f14ad2b23652cb76bf0b4284301d5d913401a8d554959bb3eaaa54ca48502f212518834c8baec8a5254b2ddae3e272e2846737f684a8afb856e7593c96802eb82de7619092d2a1e11ed01cf72bab9c4091c78e48994113feebabd60d6d011b788c14cc53309e436bf9c2cfb748e520b12c6099375c2228f5bdf7e1ebae4d4698bb92e9fcc55f30dec59412e8c915504fbd076141621a18fe236b655e46b4153a9bcaf891de0a8db7aa9556104869e4547842c00a655b448e1eb632dad4bf33e693f904c9aed8da7e218c80e3a1ebb084be13b48bf47584034ebedcbec8a134a41628d84ccdcf8a9f99fe588463583cef2f8ea0a340d91026105f98bb700620454a2037a032b945830da11a70de59446a24da13de081f64b75bb9622029bc10c61738c7036a067effa2b71eb0c66664c791628480a31120f203c743b050428f82bdc6537e5a4b859ea99608aa57296a61e481b46d1d336a32d894476f7ce2403b4081d093709d25ffedc1c867883f061aed8c55538f3fb1bf6abc52ef063aef846af6c10e3c8f246af4819210ef96e381c12c618df0d1c4f462735b7dfe294cea7f5ad5677507b432f57d72bd427b519cd803d8f0ce7f13032f415b5289678f355c96f74bb2293971fa2a1a77f421f45738e44f126927fa2912c92c4db8f087fc40c7ffb112784f37ebc0fdfbad0c2d684ab2cfd8b5e913242e82b195fc96c74bba2538e47fa11fd0bdff12f7c2513fd0b5f45dff12f7c25e35fc4e85fe478a7221ee93dbdf0766f8efcbe5e91e8b6cc23bdb7bedecff3795c6fdde8dccfb7e617f132d0db779f1ba4703f5b3f45201c71f32882beeda93df949fc44224aaf9793d27b37119df83a9527b52cbfad65fe47b994fbb792affc8b8e2f202f09a33a1b30f640321e8f87917b9571eff8686ebd23bd772cb9d1face9db2dfb09f7f696e27cbeb4bb0fcf7e37d481ffcc19f8f76c314d7e2ed83ebcf2d3eec87d96217877d60bf1cbbf4c73c23c5db0b8ed2ba221f857ce410b81ab94379f311b251da19ede8ece8ece8ece8ece80491b373e9c8d9f2ee6f3f9e4e103941e8ec04a1b313444e103a3b3a4168a3477adff2ac51696774af48f4bfa3b3a3b3a3b3a3b3a303ca420907bc7103c78dd20d1c37e27c5f210c6e8f9825bee1a6c79143355ea89be0cf9ff5dd629fb7343af10677b01ffad3e26171e7a96d10d32ced63d1b7ac83d447f6867cd4386ebcd8b682f041748c7c52e2edbda849194406116384f8bd4ba2833c195f103e7aef7890fd47e341cca3b2af767e05c918638cef8388cf5edf1fe36ff6e3831b751f23063df6f7c7cbf51bdb3e1fffbd8ccd0bfff0c67670790f33865d28de7eb3784aac07c52eef63c63ef8e5611a3b46783d8f2ae5d5b2972daf3e2bed4b6d13655af2549b2fff6a2515fb12399fdec7b46aa193e857cd613ca66b7f1ffb56d32eed861a0886ffb4f792257c8745089f11ef05730c0d7546151cf2645c4867ec3fe76f11fff088f1e8dc3fddd3f9d6b4fe7a4c734ebaf006ad663d758e3ecc0ebb54ece4538a3718b3855de2bb1e11bbc88fd9b9fb9cf3fae83dbc39d42efc96db8f0fd80cb14b3f8435f2837eb2e1a437013f61bfc16cfd66f3b491c4ec243a4827d131ae93e8209d448c2ec2a779b361c3475edcf744a20ed2495cfe91417dd00b22b986ec8e781193ebb3710612792a1f92e7cc12cb64fc84f868621f5fda9758f4347ea328efdce9e4e9cfcddfca3e2729c2ce91e43bd2e548529edc3fd19c2365efeecbec43d99b649f8f5f32b51ba6b814ff88995ada0d535cc71828bef53053ec9261fa307b68b1f55bdd89f9835db2a71976991f338d17de5e1e36818833acb67559966519dc9e1077fa9049499f5a1ee9fd94b3e7c41bdc7cc7d928b5999a4f889be457d1f220b6239342a09b32e839421cdb01e5046aceb4c67640783af9f7ff4e275888477a7ff219de44282f1f0ee18da26093135cf2f541cfa424fbeb23de6ce496e7849872874f67f7d184786f82374a658637d1b3912374527c4b4339d6c8d1f9a87e7cd05fedf30df3367aaf077a90e63438428056c2f1debd7e14086e79f109c94bf40a7c89788897632cf19014168d1542081dca7f10c20abffa9b9fa7d6d4b6fb02a47ec9fa1fee724d6c4e3bdf5af57e8b63d7f5b3821ec31b8e6c610cf37bfdc430bc59fcc32bbe7169377ac5a2136ffd39a601a3315624b3a55f2f40ae1a86fdd8af48e8b7f8875a8b3d6afff39866b18ffd60d761b735494d5293fcc0be83f405488cf1b96cf3e18cf1e994cfbafebaaeebbafe87bbd477945efff95cf4f32d8ed5ff50a7d794f1dddfc76254468a514b3f4fdf3da7ffbe6a56a7572e8be22db7633d9d007a01122d4fb42bbb6377ac8ed5c95e80788ccdb13cd985d9db9cccaeb2bad91d0f02f220d96f2f06a4dd6afd16eb7673cdead7faf5afc8ea581dab6375ac0ead819be035e9c75a6be14773d9ac8f6f8465ede7d3f361b4d6dc60ce7ec391e98d1bbd62df7efa3f9f8ffd1fee82bdcb2d2f08643f26dfe217c34afee20d47b619de2efce01f9e4df036827bf106c23ffc73a375c8878f69377ac5d64be2cd9af186bd2d71747ab201b23ba263854e14b96390dd912e667205dd77f07d8abbafb5be009911c6d75cb6ebe505e177c7497f4678d1b7e186292eeb2336bf56d00b905a27c8c1acd68710041f54718b67da6604e82106e1cbfa0d5ef930565006c270bb5976f1368297fbee36a87efc8f5673c5db65e1d0cf9aa457423e6a19b1b5013f3dd3e00e63f418a365c92735cd659ff3bd9496252d4b5a25f92d4fba945287fce72ffe86233bc556fe452195212b9350a1bf0099724e9f2f4066ceb43ceeee6e57734ebbe373ce49af9ffedc7a1beadf9ba1adf5ebad587d5babb5b6665f4ddef1764ddc430faa260ffa10c841ef6f5202c2db07fb1065eba563983aedc24174ac0ec8ad2a728640f9f5693959e440d1854cbe91dd919c9df75e80c86749fa6f88972dcce325d3aff005886559efa1e612df6537279c0f2b1ce2e57eebdd3bcbb22cfa967d5bdffa0d8435b683cbbc4013f49f0fe8f3f9dc0799643f3f3e9a78b3397be7256f52925d10761a86ed5631b66a9290cddc825165873507be00711509ac61d49a33ff4a3d927f7ea3d67bea9d3ae691fc3db5596b314895fd3be69d4adee95fbcd97cb30c6f305fbcd10f76146f3eac0d9fbf66fdcff556b5eaf560929aa426a94954d76710e770b8afce392c5f80b887f04beee1cb52731922b706b11e325a38b24bb9c9bfbede30c595db455d1eb6e0fbdf681d13bb487ca35722c45bffc3377ac56b432bb4904ab29af0fd0fcfad69e1261720bb235ac8099271c8ee8816b6c8da765f8050f79ebecda1ee654b73190248a6efb2d336cb935ffc1ee2e59dec36987ff8d6d8e1cdeee4f712db4177d077980dd87f641e696eb4fe7b97994fdfc21bbdf35ddb44ee78f3204e9327e867f616deee7debb3772a798a614ed9d32fc1d6671afdab5149b23076ec28867d3833f27c8b370ff2b41ba6b815fb10e579fdf6922f0cdf0a92dfc77f6f755a07c52efdb347ff94d8faa8e688b77e88ad4eaf3cecd8e5d1603ea1501ddc7ef8f6d1608d6e074786b97e2cd4023243fcf15846b5e856caf16d376f22ecb7d1e76a20cd3d1fa54ca92ce352eb316dda1aff0a419e7ff37c4ba33e1222c36f4b00194aaab95c3af181163ea0a50c31bc1c3a518a51d619638cf77ae9798286c8f2a1552b2441963bacff0bbb874464f9b0c70565745009b14390db881ccaf25d8b437fe9913e31639c1f35eba136bfad85bfddd37da4777d8cf2add5eaa579ae5a75a3f8a02132ec1133ed5c633b7f9f0b5f4e255a78ab3992805e391291e195a19c33461931842e786a61741ebf9d3644d31ba7354304b370e1374e86183a6aaf774319483927a68fd259138a216a6f10208cbd31768fdbc9d0ad32cc2ec7fbc6dae6c9b05719764e868df36edee97a88bda67b24193cf59ef5a8a7def4d4939eea9bbc89bc86020f75e1ce79a4f79918a25ed91bea1e983a12d33d102622414ae8a20ba566a594524a193fcf87934229e5fb4b4c44cc63bc8610367648b868aa490d2e7c87ed100048139d1842860f69244c4c4d25a2139046c20820470c6dee910d0e21e5042ea82095e14503052c4a1813244d866f82850b5dc64859033485b455e8e81076a44080534eecea8e28a33b9190a8867d08c6140f0d1a8d48c4384d72102f95116cd03246ca1a20319c7b4ed08b678b118918a7099108634b4185149126c3cb0bad637e7c491d8bf5f12dc772f9b066b8952aebca9c4678bee494d9f2613f602f84c1c767b90902b160b454a33e7a193e25a8e47934197e853bb23b4680490dee4976081f148fc81bf284bc2019be23327c37c34fcfc67bf0fbcdc7a391677836f6d98844d6b3a1cfa694b767935f4fde6e0f4a96f8c598d8e005a1f6d1b8108a2c411f8de4913313c2890548ad77f7c0adf5d10b6577d85ea1773bf8714e05be8f10a6945e67b9d3885e6aaf732050de46314b1c9a4708c590bdee5ed450c8bda3fc76092784f4e3a4787e8d76ca372184aa88edf091ab62832fff613d608cd1053e27e48c6cd4c8f0ca319265c87189727c8ecf15463558f10511e028e75081050d7cd003237c09ff49fcf03be38c2e027ffbbcbd254496d562968559bcc5bfbede89f9007dc8408e97062d6a516a519cd2c37fbeffc444c42c31c410a653f65e45b890666b6d28844365001902e024143ac2de9048243a4182c8de508e12224f5822c71842809efb9b7e94143684109a71e17593bc618a0b7f8b0fdfd280305ffec47ac48ff05da614420a217689f8d227684854a3ddfae0b4f081163eb0aac671395a6c4e0c6906a7852c7f73629424c1e55c5af8400b97d3383238026930bfe913dd3ae10aeebcf70af151463927fe110570c61967c858b2fa1d893762071dcb7c13c6f3c4cea9cc774f35e746f2496adf8c11ff78594a87c99721862b78efed8eeb1f271c85441e1fca21608e3b426e0a49fbd7b1c4173dd2836f43f68644ef6443867c64a3e6c2f772c4d0a9c00c4d90a373a309276e79f1e167187f402d8f4915ee26a99034315208928a1a202c406a254dab7066a8a4c9d0f2f81835f441907f236427d247c38511d7283dd2a313e3f1b2c454648284126c9a21dee0cb8fa5f811f301f38104db95e1d769a126f2d1cb2e105f1a12d508e1d084155f84a0c8de188223910a46ef343289e28620b5220368e1032d44ce4605b0527aaf8fec2b20435286ef9c766b70a71f448e45ea90e1d31b84dafbc3fb22de13408e02c89bc38938d1c2ae674a8c00a7f29e2e71fbb7507e2ad45e1db2982a9e803a64d8a92538c801c1dff9c7e8ef76c0777fdd32f424b59920b9f05b1ef4ba5d57c48778f371d96408670a2e84d71459fe765d91df3bc6a394e3470a117484d1c765e383eb620948d0941e1fb86cb2cb49eadd207e7f48d41d23debebbbb5bbe778762876a3c6884f531542324aa61694088efe8777c1b6e88e2c689ed80315a0cb18cc86da939378a3047ec8038863b6ab843e9b109f910fa2846e978f318638c43189123d486e81c9f5b1f3df83ee20d46cda6e1c687edff7b7a7df4dee2e2f6b73c77184229f10fe88303ce38e38c1c537a7cc444c00c614eb25364a344f2e6c3fa884ddf82c247d029b4a0c833fec3ae57e443cd9ac954052d1ff40aa4224807719dc4911c72c821871c72c8c1539ef21857c2e990993a64e8741d321f6b85ff9e0e21b975a4a08e19c0d9be044fb91220faa876fd7b957ebe3a8c87763dad7eb41d5cfebc7d874900c2ffe0cfc3ffe0ad7e7ffce0141e5cfefc0e2e7f70caf52e9f977fe11ba470537a7c5efe07531fbde4166f4cbbbee5f5d7976c694e7ba9ed486c6282a4626a4ecdb16c3ac6e6fa2769204d5291b89a443543243f6b434369725093d42439b0992e7b507d168103879450420971c0f853eb09dce895c63610e0da6befe113d75f7423f49eb84eed2d4d519d8dedb51037f543e8b008bbe3a369777c3463778570739cfc5ef44ef6e53bd19a477a0f49106f3e44d535f951eb15ffa849bcb5cdc9f0bb35a8d32bf0bde3224d939f0827bfef9a771239e9bda826bf8744ae5f3f0109010c0c0c0c0a8947599dc601087efdd288ed85c8f58714faa81d7c38964b2e6c84cc39244f21746207979835cea6c1dd7a662a11adda1ddf61755a9dd71e6353c58d4d1537ce660938a75dcd19ccd814a989c2e64689db3d8bd444616375ecce9c333451cc4051c4ead89ce8315348de7ac666d2396d329ddf3333a219ab63d353e1d6411adffc288c41d71d99bbb54ceabad08f755ab6c68e767eb528ae495ce5447cc6554e64c6c118039761ac3b42aefc7695cfa46e0f51351137d17fdf330dc5f53549afd09a43b737a4659a484d42b1cc11365814bf6d042fdb6d99777a16d3f854961797742c6d7d6deca033d1b671844ddcedf3c35c6ecd650883eb627dccdb67eb5bfcdd342b6663bf38cce286d9c22d2f8634518d90a8869bdcc1c8048c11cae0cadf42cfd68030b83d3fd67f5fc291a3f376a357f0f672240b47e4edf34362467e6f0301377aa5df6115c34b833e821bfde111bb579bcae414b1a2c84d912a8ad81489a2480df65bd7e40df471c27f26d2fa7aff7a99234f13bccda7ef54f2aec4650efbb0b966782b5d17842f591dde4a1b76e10dc6ecd8c5fafad1c22eb28df48ab58c748d1128a2357cf43e779c6f79c8facef0ad88b71f44c0ec521f521c3e7a5f63a4c6488d911a2335468acc1cd996ac112335bdca5132e28a382335ce488d2be28cd4f4ca883352b5928f4a1987cea51bed9a36e272409e7d515fbc8155bcac437ea51cf9611ceedbbec41b8e587fcaf710ce874138219cf01dd6f42de0288a811881728fd4518b323e8298d2f7cca8cec63653ef7409712e93a1c1e048fe2da473d029d82a54c97b25a4310a38eafa5453e1546cbac6a994dea98f34696b001468b27f636d6b95eb30ba011703b6131d624aa8eb371af941fbfdf49d1ae5be5697dd54f25103707418a6776a55e9f3c95573548ca1a8fa0fc288dcd431ed827681333917e3a63e42aa5310e6912a8ca9c9fe25575cedf3a70820417a8a1842a461401df0e12377c16a1ee1a65207549be3b9416040be27b2f7bd0ea293d822889c08f8c8bb9b871d2fb6e04e1837f160596865292d9beb65a1d65d702aed8526f99b81a6c79879a994908f95ebc3ecd3446de3581c646bdac6b150e14edd0547f2f716e309d9bb078707c5e26e8da491e4f48e9be677c88a3b3fbe7c6a599645572ba922d22937f5aa738043f6f7921bf9c34e657f9b84bbb5cab1c0fe2bbb235e704176a7fafd16b6a3a9897d9a95210cd9a779aec18abb4d18647f113886ed90b445b083cb3cb8de028eba30102350d7b7aa55dd4e2555df6ab5897a854ba5ec46efd437af57efd4336d937d5501475db8558fe46f85bbd1ecee4fe9677bc933451d01211b2bee169a22fbd71a77cfb9e798c331d53a2cc7f2c9ee4353b897ca4dce24c7b11c206688901c85b809beca47fe7789fbf21665fa3bca449938c4472d1365a24c94792f64f39e50b3e82db27bcfc29164f76f0bcf622707463929a4f4795339a925ad73d4baaa85d63e6f4bad7357b518ce077e3ecffb637359e7acc31ca8649df621f28122bb07cd10c9eeafb67991ec3ea329812525cfbbc47bc830a3870c3fc261786eaab0e2a68a2c706c5a46480f699916d2443ae53b6164f76fb543068f103872e880c35551aaedfe1e845142299fb76c7f0fc218e584733eef09a39473526a5df0ba9ef735a9655d57ad168318f6bcb1ab5a8b619f0fe8c27b9ff7b5fdb10d02d9bed77696d92e31812626cfdba4c43a173a39b10e05c53a1a2228123d6f51564bac0934b1ad8568c8f609b6c3896d0d05dba1f37534200d1acf9b06fda4f4c88e4fe827a507cdfd23c88ee323f790c6a97827c089ea6c6c2834d9bf3aa9da0260aa60b891bf0dced4d25f836389df9f3953ff752caff356572bc712ff0c65c0820539d0422a0aae0a4fe83c61092e6a8e60813f988a37bc5442c6c4a7f1a0bec48d4a01e27afb160331810ceafa1794acfe75d29475bd77613b206ca23e1961c45206ca3c99d6f1f2fd8cab177162166ea275655914d7157cb61491b8cfbd4c3c638c3db10b575cc9b48e58865ba15e883252f5282a14226e9a9b2823b9719315386e82ef5fb370d3db6286d2296aa1c9fd35b93ddae4fe08df0c261f8c114af824b4537c648c54a24930bde294e8936c128430ad43cac83e4530c05c188f4f96320e0b99ec5acb09183785c7ccfd56c6b2e788c43d01e3d66c5b1ccb27ef30ca8debca47fe99142ac702dfffc2712c4e385349e558a4090737f2cf52d71515874aa4e4a6ea84bbae902aa9722a54c8db6d420859049bb3a92ba71280dcf8ca38157f2d752d9553f1c6178e5389c90fc61885806ccdac7b2747b95f42f6df6c64d7a26557e24e75e548fe29e7590f49c0f8c8652bbff7394b499a777a91a2c80b6a6e7450d3849a7782400c8a8084174081b38317a05e92c08425546348e9e0c00b94bf9c79a720b8b082119832c8388204e5ff308984bb49551108e59b2d7ab29f567b54ad43e25a866b7c86ecbfc927b2579efc7eaa2b47a13e39b2e046e126f9fd9b549986c8dbe226309c29c58dfc453e527db2bf57e980bde2bfb92ab2ff28aee8fbed23613cc599a40adc4b1520c91b68128c9b2ee04631ef74611e1ec9ff9b67fb782153ec1e2986089ae573c04f3e3c5309e12689332156865062d1e2f1a1104ec53f6a1a702afe2760dc1af2566b08c3edc9eec816b2c89da5cc2665e410377512dce48e7c1124fbd73050f52577ff0e9d1bbfe4949b3a937927d0fb67aa77c2deff83f1187dbe6af641daf518eaa339546b3cb8fe5d5fafebfb3e293d5e96df59e22d080c67338fe4ffb44c8896c93c927fd532d523f95b2da379a403e4c659ca47fe252cb8f5af7fb5c647fe488d6b143eba3e4a3922f7a73cccc309671892e5d7959f5c1a6cfc2b8f1936c64d31fb5b2148b267a921ae3aa2ae8e9836303030302820b8235b9841de4479278cbcd920d9f36653d9f36665b2ab7a081286d6430b70b41e5a90858f5cce64dcb495dcb44519216e6a24643f4296ca1e85f71084c7472e4359e3a617e3f5fe39dea9c619f94a9e8c30c207e5833626ae753c5c8aab0806195ac1ed971fe37b73be52eb9031bdb27aa72c15c1d0a76c06a51f9c8a3fd4b25369712afe32a67550c0adb84635c9246fce264bc29db1aedec9a11eb5ac988a4288e47e3993fb670d59916371d93dfc4dcbeeb7928ef79b02b2fb0d87ec3eae5ac7c332a65736cf5b5c654fe1ec66d024ff6d94ad7cd92069ac6544e2c218fb9d8f640d56dc0d45083531a9776ac966d0271e4df28fc9fed18c2f647f8bf1f8e4c6350ca7e2150d3cba9291fdbd495b05433d23d79553f1cfc8b8efe15657d9bfd21471534ce57e37b31e92c0f191cb306f5295fda52a0d79e21aa2704db273021878724c6951c88baadc5fdd65d129237cdeae7eb6971c659c4a3f0a0df508b4a0baccbd01da2a01a525a01404f7522628bd7713658733f04f2faadf9f7331f680d9c5bdc02e41778a7b9753783815cf9dafdbf1f0f5fcf2ba04ef14e53b94d49c239520bf7f0e15b546396c02f4792731320174791e0361ebe877efade3b995edbdbb0f27c8efa1b6794fc0b3cbf39807ddf5d1730f9d730e4324207408fda10b8c30420891581bfa3df8e07b35de7bf0bb0b08b31e92b8f191cb5b7f7c18dffa08867c04af8fe06633ace12691bda108cde0fe2fb9825c3b167ff7d577f080f8e617d84438bcdd0c9fdca49492fa2862617bff1ef4913fc07af9d49de8cfa9b90bca2e6d69ee915cfddaf25bc2129be87d06dc627f7c8f98fac8b31f58ec4cf1b77e6a8391ebd20fdd0f98fbbb0b5894309e26be80248c2a3cc163047bdb3d3463052778c9117086406aa3186c44264aa8817404a185500b48ad3383c7ded00ac280852ce6dc66be7e93796e8e05fbb9bd3cefcf6fc702faf9ee583e3fe79c325ecd3995f820ad9d4afc8fe64e253ea641a712df6acea9d4f8577c2bd22232a453c629e78c51461863453f2ae5f821270b2ea5a11f5dbc8d4aa09be383b71c98fd1fde29844d44a2128c9d736e9a6fcda71214bfb98ce3ac261677e6b8c97adfc2e4fd1de79d6a787f47e2a692f7bfb01da1905583e628ba7aa7b9a220ba2a31c9e6cadab9b27365e7cae51a4a6a10bd89fd8dae4a6aa8415475eed62a987caddf1c153b2cfc5034873ad11c2aa3a1916026063da8d65cbeaad576fd316d731b94b780a3507e94fd044573a8c6e243cd879b28293f9ca0a0a09c340a0a0662040a05a2a09ca0a0a09cac5622fa62e22124b58272e8506b84b27bde107e527ac0dc0f64a2c58d5289bbd9ec62afb877bfce592cdabbdb865670fd9da891b4b76bef88c4755ce994b15ed80ebb034629e7a4d4bd3572d705aa193a956e69775c41b89bcb22bbaf367f43eeab16eeaba3cef27e9fed25ef0851f707dddddddf4790658286eb78b357b5d8a7e7677bc9d44720ea993a956959d28af059de36a5079687e8331cc73e01030d1e1a61a0f45e91e87f445331227153bf7b0d4e769becef4f813c2b7001072820266f84c73841060a08f1b75be29feeacc87d1f7039b93eed55c051278f124209a1a03c0d1494a7f1212d0508d1875e14a281e205745da77df4e6517aaf48f43f1acdaf2764dced77c47fb7bd9968711fa4d6c2f4e6c6b1dcec4f23e5589c8dfd1637d1528030f913937f419568294094fc494948eb9e13cd61425a0a10281f7a14dc3d29f4438ff2275a0a1034fee469603fc129f451b0ab661e89620a38eae44fb087b0cbd01b6c0b375118fb14c74d2218a2cfc8d7ffa0f9be3fbd79a793f7a759b809f4fe16b623cb4e3447bd9977a294be193a53af26821fd7722befe94c7dd1bd95ce5cb8c55d3ed1202af4572382e6ebeb6f6f26fb5f20cdb6f39393d0d6325bf764ec5bc6b1d0f72d07cba958260e656935bf8889600797af37790b38cae4b196b999b664be49f4e1a8eb4af9a1c4a1ae872626dfe24e83d49a681065a201a1020e55f2d5ad89e6a867f29d7960828118812ac1ee911ea637f4e63d9ef9729dc60d6cc8c16a14b506be5aa5a8358daa9a7da8f1a0d6dcc89dabab513e386b4d956262515f37d71460cb6bd5158978ad5a47a9576090e85395a22e71615cc52ec41e29224ff442bc91fde34dc90e925be3589c9b1ea3c738bba514326fae295c53e88a445e5d37ef5461dcb59af3b21718d7ea9ac275536b4a6c80712c4e092ee23021c72b5871f34e14c8b942e602277ba9b54f2ed929c9c295bf95e6a3f4515a6bbae710156582d62830cda1a466651bb4e0ef22cf98e6504b5cf8be519776c411483c0a7b244aa8eb3fffd16a136e01fe52ab2a279c8a3fa63987c3566fe09c02b68a83ec1f803ed599579fe81101f20eb2ff85619aa3ac9602847dec310ca4012950020ccafe0baa5aed5aa560f85aa5f4dbc7be6a29405c3c38a51fc3ee91647e48697ce10af36a4c8917b7c2d494e85cf8dbb5cafe2556b85bada935efb79516001137cfdf4a727f89863b5d3726ce64e9987f842339085011c4ddb879a74829be6ee2cd75136f6eb2ab80435d57adb9695cf34e150606a68ae0c7d5b1b2e590fd2bcc16303031d973386a6a44d04cffd2527ea8ff82320205536b72f8c8dfd21e4d01e2a1aeefcc838a4b8fe41f6d62156e92b5a666ce276b6a6a4d29889a77ca51aa29d5e0d49ad2bd89c1bd71d3566bb2156ef3166fb27f8dec957e1b72a81b6008d551e13d67e5769ffc2a84300747724705280718778b32b945ef7994b2bef7e614891c4ea4427536a2840f621bbd626394001bad43875ef1bf09e8138a0e365e9d02c2faac8c283adc0e8571b7e8628c3d2f46291fec8631f6c49e39e183daf7b48e87b51bcc90fdce0b83bbc59eb84594c9c945a2a8361618d5d9d868d8d42954d184fe645964382f3b37cab2b87137b567dae074c4efafe14cf0a50a24cccc8890331a37f2f7d1c89d5ced79b5fedf7c4ca27cb024ca765045ada3a2a4a8544ca4542ad53b65342a26687e00d58c1e189d1524c04304aa199de13c522646c63346d6856c8b47f27756c8321ec7e2f4130240d4323156097850460993d174eda96978375a47b5e9151e6a1afa24816ae350cb7224d05be4d69175915521f3a21ec9fe9de1a4e1ba5e79efb2ccd02bd4b22c7841657c40201044394143e8e4e4a446ca2cc3b52125254533cd2085add42a0e15f58a23158b36a3f6f4f4bca669af26aaf2e66ee24cdedccd0d4ddedc0d01e600329c5526863bd5322c0ab2326c4c094cf6a767b8251ff5d818c00006e05433f454cf507baaab677093e8a14ded90fa9e946dc2a9f87f8a15626bd0247f1b839485b133f6091b93b2327dc6ddc1a9a832caea91fc79284a4f761a1a3034aa6a53a9a84fa857542e60778d13f20ea51cd9bfe6b00e27c3a93e549bc7c3ab363e3853c644ad2295ad3ea3a9c9c450311146364693b22eb891e36c8b5902939921cbc9feb48c27e3c9fe4d5170dfa9f8dbf0e0fabdeeeeee0763377c8ee62012e910d92086d2239552a5179bc81d9dc84d8425ca073355b60388bf57b21dbc2c6322b5039566639c4a194ec55be056aa19ac0bb2ff8679f4645738951d190e19b7e4a38c86871eee0ac785eb22fbbbe86037ec07e183df9a67184bef6534aa999a6ce98043299b41967224ff52b519e3369e62dc0d65d54343e3583ad7329cb328b02d703606d93f01756565a5c64dfe501489a20a5771900bc061a5d6a3875ef1875a047cf48393dcc15cd72b3770c00107ff1c2c7676cec142ad52c1c33bd523b50ad9ffa6ba9b6ac373339ce75c86f3640b4ef1bd98c33ef81ece81bdf90eb380a3260662046a7e8bbf9a92308f14e354329cee066439c8543e82a936590e5ccfcd52bde24fa2c966cd3bd15803078ce166aad410d8f21c8d45a2a6a1f63c474353cdb0a1e1c1031dd8fa399373ae0137f2ffc1f55824dc18b5a7033c7840089a6a43b345b5e141080fb8537645c6851323cb713d190e196ea6f2518693e1643819ce7b55c64d5ba6ca0eb04fb36460ee5653d9bf3ac0b658a8f5702a3d382cc454c1c2647f131e9c8aff0cc3dd329a8c262b92d57803e6ab86f848c6479ee1a0ac5078b27f454d0923619c1519163c4498e1645264469ae4eff28c9a953398bba1e44c1edc94d1381638ef94a5b2225654c0519346967aa74c95a5aacd2375517368dea9ea34c91f09176ee45f6f1ec9bff24851bd405371fab76a9345b9e638161b1ab58bba452a9bb8da64aacfd5e69ddc168ea50b776a47f2b76a179c9b63dcadf6f4bc5355d199ecb5a7d264ff24dcadf6e4da93fd250c0c4c4ddedc0d4ef698436405054ff658a4a724bba00f66ab098d540d9a509d8d0dc4130650cab12ce0e626c7ecef62d6830b7ae26f5af677d4cab255c30eddb01bd6c67ea0ef3077c30388a7abbb7bb8fb6f98e2b6c476c08f58045e68d6431231b931c5ee27a5945ad69443dea341800d09e5d4867810ca1a809c6379ef35d9bd6f1d56760f852452b994bbbf7d88f27b08ad8f607e3f03a2e8a8742c3786452c55cd08040004006315000028100c87034312c1aaea217d14800e7fa24e5e4c1789c35112e3300832ca186390318410638c880cd1903601550a0a63ebf11b3c5136b6d458e560247adc254c60a5d2a6c59de14c2dbc05e550ddc2c9fc0f8142d15e9b81021d175183199ea0522b322fff88990a7c9d9a8fc4ea568b1db21828927baa3e2ba450dfa8d65afde6a36f083103b51db1927f3a001f7f831cd5a622db0d600bde6c15c77ffa9db51b4936e6e82e78e5d52afa53cae412cd2954ab3644eae55b1bdf685d9fd7b8256d284f965597e7d16d4f87e3d183535b71b490a692f8f5896d7a418e824fe0d5b68886430bfa53c41ad602bdf49b61693903f29b963381bc1495fbf90d0ee78b82860141cf9a28d7d68367f081d5aed2994d57fabe781f679a7092e611b22a3bbba4223b5ae3b5cf10e246945c06afc29d66a3290303e488893daa8c5d56c56c82a177fe170f0be1d3d1fe680dec3ff428d2a03339fb1bf5d925f229706e284c73354607d0328bca57f8c6495a43e641a0ee81b222267e433d9c87d04d1ab93c0892269c2b56fe3467fc5bf78f4a24ee966a21fe7b76b44854f233df104fc0105e760d5478cf22f5f58823d811c70093a6967672deb538c047983e871a52b3962c50caa340776f01867e67b6fbdbc7b4c3300dfcf12d0c2b9f395f3923dfdc16cc98ae2a4749efc01bc502ff9b83ea3039b0c358abbe293b07bc15721d3f856ff06cf13537d520d6020e118e5b0897c850949d54d5604f23a5805e1481f553d46a9697e698c550370539251a9d6a6593c4d7943db2afdf9d1c896022afd4745ec145418004538ecc56051219021454931f158ca6584a356d07106008bb28396e847404e40cba0055262a1003a920b1c43e0ca3c259b0f8a26e80eedcac5c7060b82331bfd502c869e3d08338638d83764a3149b47e19d80427af4b45c93c01fb45061cb75c69d33d94bf993e670e64068ac5eae2642c2692efcb8dd99df46a0008b7493a82862cfb420dcbf72730cfb8558f94758c9a463c376f2c330fa2faa4a650154030434ceebcff194fc7807e6a5f34661f4a7dd6e04758e3fb8de432dc521f733f05d3bb2d2151101ad2f5a8fc28cb6336a1e05bfc14016b794a85623014dce9b6d02352ddd3d9d287b4da8e057a7e9bbd9fbeb761a9edb6e23fb40d933f213eece00bda355595d40a5e1b48ef13b9400041ea01c7f2a2870d46b6147f0c53d2811f20e65d84ad7eeee7f5193d320912294242e0a1966433461476d7ff64db4ea7e712e34bb950e4ae8743d6756687441ac7cf8ca6a00c6aacbc08668b27180aac6249676775a021e51d2c074bf81b3e0d4f023aae5924b484fcb5d443a219a05d2cbf9c18d18fde846854aa8746258b13f8f4cdf97f82b29f3af4f8196d0e8e77259541b551455b72a144e308bc4b0ca0851034d72661d69c6d716a1da998ddef0f44c01508403ebf768093838e246a59958c1af600e976d699213a48fa6967d77e48c5b2816400ea77369c2fbc7417e4b6e50a3567be62708b8d9d8b28745fee8cc03b559d6325f70c218ee3f432481be183222152f93497e01083cbcbd610efd7333fb2eebb9cd3fdad56901f07676d76269540eef07acd48bcfa069f121ed06bd307f51d907e42099d433b058ee2d0791a1c09d694ed494aceea396f1533f266ea86f592e7c9ebbca8626f1124ae0012d5766439ab9f903da9de5d816c5f0325cddd45788cc323cf23ed913aaa6cdbb714e5ac2016565e26346a8190e7cdece27c6c3b1e15612b7378ae997502b093d178d5054afdc7f51bca38b0b8b1911aabd1d0aceae62f5324a739c86101cabe4bfb97048303d2ba3466f60f1d3599098daefade3a58124ad6dadd38d7ae75401a53b3d1925e9e02ec6c947ebd492c83c14ae90710a20ad3b3a1460374c2091bd364f284af70292a8fac92e801b9f033e456dd83f88a7d9d85527f2e3d2ba2d30c44b1d6a742964ea0b2fa198e4e8fec98063bb0c7ee171b06626310ec22133dd1a0e2722279c3b7362fc33ef127229a5feda35f0e5f0eec0b193633cb87600267626f8a189ac2bcc7ec4b872b3daeb315f4472b6e05c9f9a051e15b284c36c402823a2c36158a80e1f8c52ab504c1c78d7446c57821b10e946e96bb6dcd62ba61598826bd25fe1f22b86c7913397706478535d3308ea8cfc46988b74a33f273e80bd2fc25d55f9f6978fa12da20072c1e5dd5dc1ed8f61e291660eb281cf12c73fb8afafc2d3523af18ab89cd2e367ea88fc00645840ee8768bf77a083f86a8a2eef6375f4a708d05117801fe0b66caa1655e94366f92094f99d35b28887c60d752fd15bf45ce8fbeaac846abfbba4369baf864024c3887b266274bb5961c62c295b94b427e63c2c900d6063439406470a63a3a80dd24a7577fa4142fc42204d8b1defe6f0f1a29a7bbfd70ba8cff1c99d0ab68d5fa7a241d12ef63375bb8b78391ceac4570886fe3af067c71b11310a528a8748a20978a6690136a4b6b62834d0026747e44b343a162441ee45daee8980b373361ad125fd3f3169ca9115d6de075c48e631c05821cd9f6ec90ba653fe8f4c2a5cc60d2ff027ad82055d0c0e0c9babd99da4e09d9160daa7befd8ca5b6e6391f37ef3d2d9c12ee1b714845a9804eb5c240ccdc4f3c2645a97b1395966f53b444840958e7ec474285369468cc58684a6c586441fabd41ee71d7377233f2087fc096aba4ecd4734e24c1560335a4a15d0f439010048db71095f6a433c0fb24cfb963ddafdffa2f36335d24c8ce46a281aa117249888396fddd2c51b3828455f92614291a5c865f387f25ac92f6e5b5626effebacbb8a72b12059072bae8380c7034d48ca137bb34fffe769061e932a4ff69e3bc71c37b1e61f9dec5b48fd8950749a9672bb93885f6dc5837363d7d09520e59d06d248dafc39eb57c36aff6582874906b2f1e392a290d2796ac9e1b6bad8b1ade3673d93318be00bd8de33db279219d1b5bc9850baa22f2e49b5124b570cddcab7706dfe56f95a9dbae29a750c971766ca3cd150c68773b087e6e042b53af27286e1fefed183802e64d93e48397aed97a29f6aa9b4ddb27e007c74840765801591aca80bc99ef4c4ffcf107a3aaad0dbc8b014ae1bb5f324c2ba484d99ce352066b8814d274115fe15397974c94539f6a8e07368daa5726c90255a54277ef8d13a0ff09281f1e9fc526252878502f4f0c9840a2b97d99e1dd4b6a1021c2db9e1adbc8c289eb1bda465d85d1ec22dd4bb6e5785d1aa23a6419713b621a33402f8435f1ce2f9e90af0509026dc889737e57b835ba58a631b09b43addb39c3b99ee8589dd5c92c9e8026818a5ebc685109303d1c8c053a411cbaa8294c55bc096e142c6f56d364eab0cd670d2e9e792795a66b58d172fbe400c555ffeb4fa7aac8672175e903929ec3fe30fa8c905cfbd3f783a7b68c6889fba317a6dd1fde1e1c3d388ff32a03405107f06192053d996bfb01cdf0ad83ec9167c2a5c3bf0320cf5082de5766e0b1846542c96e8930a32a56b527e36e38b0ebdde9961a36aff23bd1272f49d3233e7d0a19f092f8da7a6e5ca234eeb3a7def8e166fb71980684e5f555d7f2142302f88b8370ab1921eaefec52db15b8646075873cfcd7df0fa6ef614e616329d99db180e8acd5641aada04c40b73e973c06f60d484a85b62590c09d497ab9833c2a2297307569604ca6e3d3159b31093112891e1645e3cb499a179ecfbaf9108bf38d94f4eaf99d5c435ac9f5950c7a55328e41707092ff63f395102f7e817c84cf6f9374d5df0fe39c782d0d281c8df28b39fd5be9061b221d246f150013e402645130695b17218f5856880320ff8f297977a0d806c4a413655a47bb657e473ebaa4370cefc45a2769cd71cc5640c8a11c468bb505452af1e19a3cf60166e8f8cf49a9a96b7996239ff287fbafe2ae5687e0744b7aba2ed8254605543711876e689ff2c26a709605c6d28276d0db50aae75eca9ac9749641ef3e8e5c677a9ae67f20ebb0f458df8fef70b2ae4e902775d2b1ce241134c158caabc7ca8e693fa7d94aeeee97dbedcbccf5a43a527d4d374fec4ef22f29dcfbe1a7f672c102a8388f344fafc1e748e374f1747592372400a795cdcc41fb0610d76344a86c454f9c8cb1bf0f76c8e4184ea6d0d13d6c2b4793e76f881e7d1019339889339736cc900d0c2f720660f4f26e970ca00ca30460c4745584437012415ed004b4b44728cc363b7344e9a9e60f617d1f614419042029050eec15df3ada13299d952c2db00037375a78981ede333096e11eb5e40048f0127dc6e40a5e62dc91da15de46dac04c6bb5032b52e0323a323b0d4405bae98308b4cec54bc378d04d96dc1e51858b88954e388b128498a30a2b13db4cfa9c179a646febb1b0e0ddeb3b911718919c631629e921416fbe7c56046415c8c481ae2a9c6aa8811b91cc1bd44be608dbe3ccf0a3139b7ee752294e47ee708f534f6e6cec5acf4b4d0ae0f59906d2632eade5d413f3fa248642464b55ecbf1da455044221e2f783fc1604c14c33c67818262563c274661744e9d88d32882cdda856258cd3939b8006a164baceb5a523eeae37d50793d9eb35018095e14e2b53168cafd4c7abd1820e88b72d56675a983e7994acf47bf65aaac6a4a991cbac277c19daa17cd6f28c0464682d3ef1b8056c959658add0a609dff45d1fbc78d67f5d6da12973a3ba620681c704496b5c73a1d155986b9e7affc7d10f08994049376591d7cac83b541c6164d52aae3069f55da8405a26d536f35c8d559f44a061d24ce9c824225dca04cec667e5efad51ba35be76bd97b36ae15f1d2772b3d158c7943f329a567c2ebd9e78fab9dc4608136464b7a7f388dea4c6a566601eaa8051d3f9e0b6b60968016a42ea889473a8025131bde1a10cf433f2c0cbce4582acf417d8b59620ba46a5f99a10abd1e09f5dc7bcf0086888ed94852e56c7fa47c18b81f19fa5c40aef71a92a1331313e83dd6a05241569dcf09716bb88b83b0c8275c035014d268f080f27262373b4b52460a8ccae62fc1aa9728bd10de051e0d279d77826b643cbf4a84fe35532bf3ee319e06c55b9ab2ae9444f74e2835578ec7e1ba0e08a6b228d75463a6e36e7f99ce7893f33bc1701fab8af52a46c1c0720ffba6824cfed4bd1961e4d8c63d049908060dc63086f04828b93e0ff534858d4c46000309ab03a3f00b63cead4488fa5323b80713d8428019012c52b23ad3c7033b95b794f730d5e7a73be45992429d4160a5f16b117c217238404551f95985573a7e43af7a3a0e18a6d7640ef1550d027c328d886d440d8c340522e7293449f3b57d7eed3360ded9acc85e093fcd3b42ec87c94aa1c7736af5a41ba90d9624b827d0e48c0175bd8b40f23175bdbaf3b6181ba2ff5c220ae8f04fe527cbb6eaea4b57b5ae233971b410a09193555403bd6bfccdf15358cd6a017640b051d4e433adddfd9b2895f58a5ac31e4e2936ae6f58dc1e456ea37a1f98aba96073ae24f293e4d3f5c5d09d7ca6213c95f1f7e5078aa68888c86226964a5211477d7f22aac5c0bcd07910b128b6c5235d1b68f4566c87ab091e5da3613866d8a767b80badbcda85ac8cfc172fd7c23ed241d5f9e28a9f22dc99aa16cc88dcb2e720d1d4ac4a21a33921e21cb4eb7c8ae46ffac09ef8afe9ec45f1705b7164c9b215882a7adb0aef08a577393427dd286c29052ea1e03020408f4b405c7bc59818c3fb272a5200dabc6f531dfd6532e851796cb71b877ce24e297f25305c08205440531d67c579593cf35788908103fe220133ad25170d3865d614258856089b9c9df850796f992ead2f9e7e48971b25ac2decb84f55f22fd82af57b8a95372680d263fe37e83066a26ea0acd42d0f360a4becc8c2b20268bcdc556c29425523e8ebabff18a35f24de618578dcc057f17c04f07ffa643dd880dcc379eaee7035fd1ea3f684f3c1ccdac07ccacea83b770fc8eff932d3e3491dfbb086534dc2873f6a2b2f757ed6f60623f457660be29c0f58bbdd0f16332ae24bf34788dd4ff5138c7b50b8bb6859d71453fbdb70a44e0a0e01fc04f7fd4bce6f7872f35988f3785e64bd2eeb1a8c27f305b34a64ac91a4ecc4ed21b88fe72695adb2d85037686b6cd96b3907d00768faf918a75cb25015d27cfaeffa44be2126fe4353f41f3753082f1a69d6cea03b846483238d70321a72a275992341b01daa5c54be58f5dd230ddd55ab386df4c8a61168e60e8a7d1821a46f6c235d30094896930be1fb60bb5b9561e409098035981c4bca21666c6310ef34e5eef921b5548cf42bc49a7f542076c61a26d444db11904f5ba6edc501908fdaafa78282bf5b68ff72cf576c9fc873e001d80695e0f3727c80280eb01f7107ff8e8200a826500713b42007c09b2c2893b36c4d932887e89b002c054d29315845c9b4cc79bba3ec0f5a4b8ac1b2894de8c4376ef03c6c61bbe20beed5e873eed1a4621228dd9f2c0b6102073cd7b7964511bcd8d1f9622ae4e65dfcb6ea2f8338590e8e9dd8ce8b7f60b4b72bf9532f707c9d622df8e72073cea8642f6cfab6da17822c2dae80bfa786ccb2d0641b73bda239e869ca3299c878000133f27dc161387283b5fc2bd9392c64d41ef5493818918b66de7dbe66e574154149293d06a27afed24f4d087ca79414f5aa051f01202324c80430eb349713a2f1e5e3f3e42b1b718bf81bd632f0cbaa8e4e9c497a11898b571bca78d3f241104de6bf212a80cec901716869b2c0119c9437fa7c712d6e2e87d2acaaec3bdacd26a6d5a2560134ba49765a5572630a3c1b5a6af30ff292003358206b17d2b913e154202428922c945ae6ff389ac206aadc51779f79f2b37747ed5a81b573302478ea92dfb6c8a7830a33321cb4fbb3272063444b74716410c6e97341d0f03a36c2aa5b5a2911a68161a1b284076afaeebb08d382ecdea405df57f7356734012494b46d23026f71f13da4d990c7182d1c0e02ca9d3eacd8567e164e7eefb6a16e2a61e2ff336c7362172556ab53fa5fda00ed4be464c37ad1ad6f83e37f1e69a7d13b84491ad5174ca00772922659c10b91380904a830f1f6098757fe4563404f7cbaa57646b2a9e1c3f72175e5442c1b9553a0437d4c58d0a9985a42f6d525d8f2a4805c0c590cfb915ab025a1967ff87d2f769f0bccf53f4a27acb6bac28830011d3a5de140647d2f11d8a3c31163410fa4f78ea8082694f09854d4348ae5bd801dd34b58b484ec720af0492f6c42c64b865a541ae0db48f9b99351c30afed4a5166c2777268a067971548adc843cb6a1acefb518a33c100835665a8508d24408b1055a820b9509a539653798cff505dc32ae26d83220e2a14b466b4c0de9042ca7b9a4ad6e898fb364cac0c89a49af338e89bbaa6fc20891b3d9167f01cfda08307c7880e1297e7676b5c9af0ffbcfcae511098a10c634b2b92c9386fc8ad77df76f835c822ccc029d81d8eb367c010463192014cc77f820755812191cf8b45cbd062ecf439018980f10f46ce3595b929ce0d114b2cdb3d6d42b7c90d08ca172407037837068003d8af6313e7316be2c01d3a05134a0ead81c0b48a179484245cf6d32d36f14524d0947323701275cfe74923fe8904e6503b2bfe69aa90938cf355064a8dd7570cded7f2b0052cba4ea84c0f8d2c5502a305aeef057d4ed09f58dcc566a963d68cb1dfc5879b5d8d1d9cc2c8111a06412a72fa52bdbbda01a21934634590d497591a823042446e86041875b8ad68559a561d34b087e4291c90519a3403f5d08e01192c631bb126f2fc2a58482ee385a74ba9adcc780f72a20d7ffd9ad92aa611f4d9595024b6a586022a2477aeaba698350eb4068da7b462abbc80978c03385c789bb5c8ea0d2cd4d76c799784bdc40c7f395e6ca7964adc70e2cad3422a3e6230d8a9cd6a57c0700c014067aafec5bb5a49042f49ada7905c552b676940f59dec9bb0b56aaa705e83711764c9f77638ad06a5b128b52ee0fd1aa00d7c43fa4939de0504bb4261c1d1d8cca7d7dfeb90171a27bba22cf89a11ce54915f6aad59474c2901757a2ca913df433caab34ec4f99d79eb03f5116590e2609a70d690fc8d119b185845c8e429575013f2d813d68c85bd4d2347edd90c333fdebf1814e7bda62b95ed22f3a428d22a811e912926369722d5a93757ec8b542bb73a7a33f782fa5d7eb280f88cecf471e368be0f4a1f364a85e5aa277bc60c37b882c3cefa5fb331b95ac4bc311e6d8e9d92541b78fb9259d4261ff0c675abfe71aa4ceda71f12c1a72c482e5d15a239cb6b1465b4928222ffa67e527a489aaa012c99444ea0fee2bdfcdbc64d979ff201fc5647d50090073988663c497ed132c312caadf35161dc1bdba0a67c0e462eb1b392f4a0324bfb3957c137d0d7c1f7bd6edc4cc5024bec6f181499e371c0b6919aa33a67c56b6545c9bba57a3f1f0f14ae8412620483e4f1d618cf7b251d9af7d7b096a7be6e708a1f845fdb623ecea6809458139df07de64b39ee9853f8840d8dc22ad587bc606f44b501151d51773a86d5297e21945adef84cf4e965ac341ce3160e1cba7f88fcebb206109d057a396250fcb1ac876ba745cd0edb065d5a10f7a49adbdf942fee7dd446dfdfa77c5692b5df07348eae3b6c90d84d46aa655de4f1d4aea28ea97fdd539602c3e1975975023e3db39f169f00fc5cb06555b8a38631f2b38e417869d2e0319d05f3566fc0e8660c240844aa90b71db0a0e1d07866444a01eb40c080d8ef7f5ed1ea45edc81a6fc7f0d815e329aebe68d09e90fe36bed4972e49bfe121f65ee9dab44eb66b27cbd4350712e070e5f8db699697921de5db06c054faacaf16c957e04d1c6f13b5fe522197080fe6a1cba8720ff2590ac6ca6aea3e3a3f5e5fc1fda9eab33f26c0e0bf654ee278d79fcf483b768e3f3440d414f59096159c5a33ced914d2d25461aa73f65082d0c4665f36f85a428a11188a06f14c481ee1004e8b1901fc5698e672cb72ef61b5722e0030d51aa2fbcd1268ecbf5cab6b07ba627159a23be2c59e1f832cc89ed6ecbed591e5dcfe41abff612ccf8071af5407be508a61012b27df57a6322a06889c0d3ae0bf07453116713d2b00994686d57922c1b3a0d7ef330cc2ab9440e89cea124385950891c8a0fcc83019a5342e22a2ed9ac46baf76385dc51bd1f926c803504901c04a8c6119b0b376d50a7f08848d8b27def97275a52a1cd0caf568153f0b01ac8ddad4773529bd93031da71b778fca14fffca83ec6240dd9b5efbb1b2527b2dd4086e4d9f5b0f1a158038aee5a6d301c0205544db72f10a552f9986e96cb4ad3c680efa660815020b88cb7f399d66eec3b03d30a6f95b32701012434aaf4db64ac342da7be730560616129ea92bb90fbc0ac8edb80d81ab1d61aa2a5909060f26a1830f82ffe077c859b4604c516de4a11e7b063554aa21e317918c92cca10d53ca1976017f6768956c38589b9eb4d89c8f752dd0c0834f816158a60d5b24aee86d7198abc25ae2322b4f52c6c6cfc47d273ac8ff9c16209b84a0aa205fc9f0b21c6e8e95679aab576098729004bedd858c2a7b89e7d5a07fb9c5babbd0a8a03c495f8f7f088556309f3d0bd2a53e2bd400aa047551b48a38c28e50c3fde86696490b6a70c6c681cf5f8b73438b99d38a9a6650a318e5a38a9fac2ce0a01588de954378a3ddb6a43e0ac645cb0448880810840d882fafa01ccaaf43f423c00d358a30e7e0f9fb65d24f88afae05cd6413595d9e6610608f391423606ebe480b24e30978a1527d9bf196e0afc65a5452957e24f1a5bd67adbacc4a23ca234a76a2b1bdbd9036d5eaddfd6aa798dca9d61e3a04dc968b45aad4b4fc14bb31228a5b66f9c85a277405d81cda98eef3a3546613126e4fdf24fc9268b4a5e5f656550172f37ca88033455b6b91432ccb0695eba77080705eb5cdba178621a8e99fba9bf2e495c5afac3ec5f87c2a071642b569acd8282eaba6ffc9686af063496d2f9a449ba488a630ad981857698a89855185574bfddc145fdc83a902cb7804d92f761b4fea4bcf354a5fc2900ee24ad0d18edcc2459b25ee29175c7c3ce83385ff319d335b101a9f0ced15d79499c6804e4626e20d0384de3fb83088e0292fce342e294a4feeff24269514692110a1e76f2419df5d9e5c57ff41f0ab12933b8deeb860962d190b3f8d0156dad12764989d3a354b9327cc6256b44e5abcc8a936f8bd50fae072b7540d0ea068e4ac43409221544e760695cbd41d0a133bc3a0080de36254542b02c0254d8cb2ee5a2a255913c046e9f10883d1568263ed2db2108001d87bd007c7ddd861853912bd57dd043a29409d25d9420dfe48e5f4a76b73ac145195dad17a80eea86e8f0173a41eb41a8a78b22e6870d041c1e8d4b3278d5404d00afb35213790e1b1f01297ccebcd20653219c42830e2ad8f14af305d21d987af8db52cea96b65b3daed93ff1ced3171db5b05201b5d2684b22d4e8008c1077ec25e1b3476f27407fe4197011ca73e7cc01db54866d2cc89c4c1c6db5deba9009aa9ab9275140e9c57b87b11e75ec493f0577d28a15d752b76146a76f85976dab51689e9b3e97fb2f32cf7f27d6653a08c480388a092d635bb5a656bdbc64522c11bbe88b38ff971bec49fd601134358c0f6d68f18974e132cb1f7334896ed357dd48448084c57af40fbffb82cf8035b166c6d6ce672a0140ca6b256c6670785c9a7f50aa23783ee5deb9363ac23a736de5c9af07a9a0dccdc2a188a6af351cab4adbd7baf16019e516c576ce9870ed2be840ff4467f1b7c4be094290dfb425be3c0ef41bd02708a2fe5db4a2ba88a8a78a4d84e412625e0395a676851d409364b65d17dc5de922af68ec17828920b241dddadb823a3f33b467efb0a670e1c3d4340b494d648e21e1920fa5a15ca5ad4e45401b2afc78e683373fe81eb5fd9d8c34475b3953e643b8cf46e37c55f7b1f9c8a0f0caa95085fc0ace87de87f73bf9985e7ca75abd0a308891a3e1c31af9f1af1f304a4991709c983d9394cdbea5ff6a1e7f389dc09183473ee1f81dea46253f5e3d5d6ff1f2124eb07444ad71fd0a4cab526a2609f2b5f9677f0cad0e87dac8b3c22350a1086b7c0e60ab977046e14ce476b0b27794aa1ae2de0aebba134b52d749a971d259d048012869849635746b5d344665a7b7d18ee4877dda74ea2400310a19fd91a231d0d078d724b4860198f8e92575ab8eff8b1304e564225cbc314f20e69de0d5986d604d90b8919e789c756fd88bd006a8ed9e9089d98d5528784fe24fb0107ba57f7588609b86fb229d32fb3afa8fd660afb55b8111319623adaa9e0e1cfa2f8ecd34de6da57b3021fefb570cccf66c86dcf677b32fb5d33bab9c3f9ecbdd38607244325a9e1cf1b1515cfec0b532e1895954536967169d243133f4e2aaa3172f344fbc07f41a24b1e9ec20b3f3fe51376aeabf1c05316553680bfb59e0650f76bdbd5825a3c3854419d849dfddafa7db03e4a5c1ff46646121bc2b7c457011d98b334acbbc6e40e2d5ab7242f83d929c5dabe1ec9a2f1e234d88c5527530395377d73e3f01738f1d0f5e468122c06fa691f23e639721203b8a3c263b2a7ff5a64fb973d8001c57de736f788a5049a979350d59a25e0fc9d0ab5c60b86c58fe325fb73d095a8e9b9a1c1dda4e688960b6ce76cf0bd8a71626f420ce2df32fa94a7b3b06683e81eac58f4c9d9407f2f21f1ec3f728d148b04743783debf08dd30e917c470e9aabc8a2c831bc7fca0305a15bfa6ccb64f5580a586184a4287fef1df252abe8f34aefe1af1a91564100768cb725033097a3d86890f6cf6812f4ac1d630cd452e81f9f8124e84a2913804d6449099776658c99822d31d0893be7291a494d93516c6c7eb1bfe2cd6b328e6fe600290e82c65838314aa1da67375eba8817123a7ae22214f06cdc7f971c292dc589ac86000f006afe717dcaf22c6854c67e1eb9228a1243d5736424c610638c70435968a82e24b342c1d72a233888fb899e8402e4bd4d73280e097d1e86c38db23e5847acbc2cf5817317ba4b5970d996dfb5084ccc80abb3cb4607891e24ead6d9085a73aac043f0f1fec5804d1894da6b0c852bc3a3ea7bcb71d62ae35dc34ac5a8c8a19ab6256e70dc1738502191c13152d7be44f09b2f5cef582c059267fab3b57faad75e1faff2aeef8fa4e1835343abdf7393b6e6c3a56b650e2be9a25046fdc72a311e32bc135a9585904ae8a812f42399e0454af1cf787c67aa3039df49d1ce5df328240e0a07616fe793075b0b19fcd897a31650465c9ea00292615fbbed245fc813eac17e2d17e21919b052c658b54d98eaa7844c44569d16cb1efe85c066097e0837607604927f86e02cecae50a073195a1c36b1b8af1d1ae46ef1b842c97c0ac68ab018ede528ef483af937ded88bd5a99f9e1108b1f83c34503fd701e124791972b27359b2c9369549ad8030673e41db480a258b4f5aba9bcbe03eebe49899eae214567b403551c7da0a97010e792d468639b933ef147cad907cc8e2c1c44820224e0c90e39574b806fe800627f06a2808261ce7fa617b4284efa3fed86016c3f99f47854eb40274f8e3029219d808f24a124077c63506752acd7f6912a5e9cf01cfb66319d3dd53c6ebc2bbe7f5a2d4f1c46c0cf1bd9c7a449559fb51c9fe2544fa7144e24937dc0512e23e4a1afc271533779ffde9f33449014e1c4221140091d419470319e317a757dd8184412e9ef25f19ce6b42c1d29f74f00fc92ddc3def651fd3ded3f22973af58b14d6faaeeacdb58c414d4ff79bb2ffece335265004e80d32442fc6b1f4ec22a11af44ebda13b89a0ed90c54b82653866afe3e3a0e73ff291c8b619bba61b20a529d4a5aabdabfc944499b04030b36ccdde3e68403ad20c48623b5f8f501f67dc1dd07e5ca3a4a7765564a8e548bcfe3ffa44362c783e6495997a9dc4ca6c424c3f636231a07b77c3c4858c63884bf4c80dcfa7c9754e9505925bc9ae5959dd969f2ab3a8cad830077cea057fd5f7deade00da1d4cc7da0a3aafc0ea73e53091f3b52ded9ead984530cdd36e5881421889a1f8dec7101ade58d38db713ca41f06295eb198feb2f0a29edfcd0a6f8d90935b10ddc495b7834e34c8fc20aad6d03d4fca07941b75f011690bbd07ad2b72df8ef7d2c0857a4861025a291deb8b06dc04121bcfacf40d53ecf954815dd2081082b530ec4d5702ba4a421c85d49e0c3997e07ef3ebbd01295a22b6faa4256723bbb547026b47fb20858306e9ab5b817b98548d8706150a9aedd0b091a8fb5a08a23724dae1f19f6b0563afbf957c05eb6f8af099509b97915fc9207099f479d1da169f705f12475cbc74c8dde15897edfcea8c93923f2f5780589057d8941312127c14bfb929b25ff3014165858e3820d1c1a7683068002c232999eaab68cc44c48c0e2167c0da9a5c584ced6e60914ee7c92b1a3a7bf691cedc8667694416f06342f0e363791ee6d2c9e679c2f4f2b116cac0e72cfb76ff2e1b5bf8b460c9936083e3c6da8544d77b7db3150ee630bfc949f9c440883363ef64e002a01b42f5a687fc6c891ebe23e4778f42da1b12ed7fcc6d0f9009b859f56c2ad2adad0d4a3f9cd912bbe7e641f39f16a1992e2db01c3764e71d6c00d6b6a2af17840d8618cbc5c43290f8059f4bc61ac2a262dd7e242658cbe8d359755d724555d88a68ddd4604d474cfc4933875760419e6fd0b204401cfbbb526b9008727ed857c38ca7f8c53b84f39b7a09f903c51cafc56fce5c20d450e7881d08dd2bca9b97b7b1055665e00e4a2af40c47fbf119320ad633eba9607732f55a426cb53015087b64c176ab4dc939a2c393711eb7acde9415ee6d993ff005cbc857d82c0a86a73256388803034fda4cda008ec080409b969f39acc9df9e86322c2587a1794b40efcb806054032a3d2383082db21a9c244740972562a4eda95c961f8e3017c121b580b9395d6e524f9487d8eb4889b944ecc91c46214aeae5293ccca3018f527ac4239481f8fb170154faea4a30f82a1e60098cca61da6e4705a1469563ac0ebcec221149ec3dcdb0436186b4ceb992c2b923788613f851a5ce82ad4bd8adeeaabb269a57888ede02f75cfb212a79893d90461919db217e348ce268f79c33df9bbe91d23e73d6cdf54d7b6ed950edd46ce1eadbef53d0b07fe282c99060d80fba09050512c5fb53ebb036e679fae18dc4fce2d27bb0b4852f2947ec094790dadea92ba68a0cd61b9aaa2fce22681b5b80cc4b6fb1461f4363a80a1fb7230ca62ffac67188df4e929c37e2349d0c5caedbc3698919bc3e59dfd1be6f9dff24f906cff24d182fe9ed72a3e832123bcb9e0027fc325cf16bf138041c58aada3341079d2f1ae08f73d965fba648c1e50e6a0d2f71118723546f741c25e1b856e5a0b819b165ab6969a648652ea7d72acf9e0b6e3642560a4ed7a2be6bcfe7483b08dfc3441ceda168f12e1947940aa82e871e041c919f3e6d23e70d1873ba5e2f7949a052f0a64b18e841761239dde672bbc44286e4fb620f49308c45bbd812fd1195f32b8744934e7d6f0294cdb005a8c1efe1c2201f511160df9acfa05530c3263bf804454cdcf13338fffd5ce5124ba1d6e3ffad0b9425b20162d1ac16d8572a1b48ae0bcf45a272a4e9f59b302a2cd9652a046862713d5452a0d1bfa3558e860a38deb51dacfac3d39cbd56798f41107b13d65189011416455fe97d25d0508c4001ce15b085d9d3f1f94d18c815b6a0352022ab233c8a86e3978aea8ee8335272ddeeea5eaef974bcbedeb54cbdb0b2802d043500429ee8a0578ed4e924015d2206cb354eb4a787e4f629d37a64538c88773ef404b401a7172618b0d6fb307b1838f110ac0ff6ef91ca7cbf1dee2dbde356cd8094b151cbeecfcf8293ee0531c0e31117348657d63ed9647a1a8025a08704f8a6d31eefaf871310349605ac77236d1f2dec5b68f6def558771a525f6e5b2513268cb07f706955e90b0bcd4ae31b2449b3cba411ad4cdfe04ce86a9eb4a03f6a81153d393101de381f61a30015f8bf8bdff6bf3cf56aacb141d4c899d4f0e58c2b193e6c3b07bdb4329d019890358ca4dd88984a2325a20856ad24de5b05e8d12a14a084bc865e52dc4251001bc94218668c4140df7090d2a66e58a4d9ed1c2b79db070ab32c04e86ddb449ea003696514e56b3c29b5ef2f0e783647ccfae5d3ceec18cb44b6a65d3ecfed3820ccce13a50efc8c24a19008c55e8ce2fd2fd433598cd1027cf41846d85981e7a292796c1dc0a90e9ee00d4f4c06143173fe94dbcb48bfb94837439bca8ff51217c9c04383ccc5ba79f4ae888abb6ba2a180280608162567180498510f7822261be7476150324c034224874bb017b1c703b6058b171a6089b732c69248161754b4a2c6d4f149045f542885869513e5044eb654635a4a7c6e4d34fd849912c20ce660167386336faba12230364ddf4c42236876a6435df3004794301210285b1c6f42c8d8fad642fad173abca6862536b8961294947dd69eb5d3a45968cf4294e7bb188defddf162d11305246a9a5ae92f1430a36d94f0f4746774335685512f42391edec633b49725053c6292f5905869539f7ee8ec4879562ef8d7535b92dbe1572d047e88ea3c24e93b941ebe4b67decbf1b001e074a954f17da0f76ade028610fee6a4150c45a43c36bea3720b69091494f643fa2936e8d403aa634dfcd708d242c4e08cf8b4927b67ebd0477301ce1846748a44866a87accbd664e378018ec226261151d1fe7f05bb5e65bc3231c4d7dc3c66b99bf142de7249027a56e74f278b5309475dc9b93afce576f9a5e0e54c789c78bc9dbf5849f79993ba31f4c8b33c81658b600cdfdc93339ddb0c17da6473648a04387b4ca47bc28f3a8927e17f73668bbc1a9969d81ab38a44d3e38e0c2059dd03040c9dcf40dfc6ba05b458879b780f77562543df1b5d03b9ee79d56f3cbd3e00b0d5b042cebe96d9da6b8e91a3ba44e7eecbf4ecab443a6cbda4539787154651b64b8f6fa7500bf01727d90cf9914b11ade7fce00faf9b1b0c51d5893c5b51971b96bb4fe2ee5af64af474e03668f52b60f2159d62c8b69bfe257961540be877841013ae355128343674f0c6ef5b8ec313dd6e9a5e784829f9d739bf4584a0ed26323c368f5ce62100f2f80d6982048f1b2c9b05d34a1cd04daa8284a2e54c0c0ae0f4d13f8f5885ff95306678b7381339e07c3b2a3754344854e1a4ad10c681436aae6f93378ad1364c31551631d6a05f80934834e42529d26e9a4d1b5081a14fa86e4b44c81f4cc8e501c613b3448474417013a77890447e50004ab21aeb00f08afdca560836180294f5f4e10e4c7c76afc10d232245f13f27324bd8355112f153032c91505a04cbbf0e25093a22e879459a7be0d91928fd5f30784b63e017d9f223be508efcf9ad495c04b2b81b7ce557d99f0200b5d2ed1d2df49d6f5b40587a925450cdfad83a994c3a53407a1b39ce78b7cf3e9565749efe729f7d122106d9d8b122eb40349d69a97aa4c1e9161adc06c55b1c386d2e32eaa1231d012d72717904243a4494aa4c7923dd90ae54183427d0c8336935b4f0d2ae34500b5706e780f7a6cfc6b2cff8b78019d3e234f07fd2853c32287010101834aa8eb337b793aae36491d7983c004e14d3476d1a815fc57d2125c34dc906381ee46a5f606ebf6669b7b53d63f280c6f389c766ba975120449f45b91c96f521f8a33cd1a0a7083bc1425c916e3f6e38d0338900312d8647cf850fb171989278955687848e26b3644c8e01d7f3ce2b57b1054d73d857f8651c464a80be4ac9e2c64fe801585819999ce30470004ae477b3c5b497565494e6d1b9a331f1dab912d3440be70b842ef748d82da82436368975900bda4f375dc260513faeec7e522499aad2e5a5468936d366b69cb2061b89799a1a0ecd854115db110b0553fcb7223907deadfbe3fa495536ff9b409b7e727988407dc5fbc48f381b23c61dd3a9d3f94008e314d383f2a65a5f141c4d4327c5b9abfaa2d7e333706865a32114ba18902b337c2d8e2ef9155722095ab97568cd2eacc6f20ea3df0b0f83595e48f8621f4157d85a20ba5de6925e0fa7af8dec1465d2d14e375b171e8dfd560cb2851191120d8945db724678af72240940190c456bbe19b27357a53aaece03a04c28bb2a2c33c855dbd6898b4a98e30cb1667af8e97eed227897eccfb24a4daaf0aba555a1276a9f3041eee874670217af516e46a8c65698cb36c673127991d6ed0fc10b5a84ad013118a74ec2e6f3941fdb9edfd34993347dcbf3aa56a86641375085574d4f5f40b080e57cd497e7096e303ce91f27b7e1b3afe6a8ab71cf383851aa5173bc1f6c9b7c5b3f0b1e2c44720fd27178101b0337b96884cfdae8fe2118c3b788990f5176065bad46fb4396c9e5073f21d084a0d12c540775a6ae2ced9454a1f756de1ed4abc73bae35edf147db9465f41ca2693811b1e1b290d209b2d61d32ea9c308aedd2129e892c6c320a93c0f7ea5fbd69505f6590e1911ea333ab01a447a1e2ddd8bbc9532fca7c4f54d3155ddf5a30c58ce0b1a2eb1c9ff921699e0bafa684c9c4577382f000f24be24f4ba42264da384c4eeadc6418d8762db1eec4658f34157ea68b021c58dd5e6441e47d1dff20f3ce8f530f607adc03830dc02213ae8466fcd6e86a3c25fddaeab4788ee81c4f1804877a5213c20bab0b1aa5ff07f91cacb2d3782587dcda4660bbcca74b2fce783d936351a744a42595db7c3481c70140f3df58d8730730fd24b4188c49c6add4a0ca8f938df6c373034d3918f910494ad4d2fb6f1f91fbe7afa42125557ff69943e8da58928d23286a655e804cd2f3654f72d99d72ddc9c24741072c13194d205120b866f11f43688cfbd9416deed365a5459790ea264e565ccfccd2dac91a74e07ca035dd63b50f3d30139fc4998315db31e101b99bf15304e9cedbfbda7bdd4c332eeef086d049f9d3a7db1b9ce10d36f062d4f219cf24596dc9756d0ed53548e54342444e2068a6cf434e72e729a3349c914059b3e1e5940c032c19739109f7490e881c8c172742f6c29204574d5377afa8ab78a2e0b7b2efd5e238e787ea083bbec3ee422ad2329a144bafa1c4db08c58d50db784a60d909fad01c44d5720c643fb9e5117e8dbfdaece606a064d6e48151aaa46ecd9d9424ca30d1d8db3b31fe14933b561b023c4d260813b7908d84448d3c643f5015ef13a3f5725c02c1617c02d296c8f98de03e46e8642ca949e12ccf5628446c49e334011340c0a967312f5921738bfe8a97db9448e1eef622e61a8d9c189ba2cb73dd0a8d4fd903880c31b0b11e113eefb52099f3bcf6580e43e59b576b0391212615fc2f2bf5e0ef87809937366e8f18e34dd723102e849056a34eb853d81826c95adc36a97ee4fde741d92afd6dce02784531a078c74e31397626b327f508628e96c50241acce48aa3ecc7e889be6606816935b8790d39506ee063fbecae3426e0d6d7e8109fb5bc4d696ae40233df243dd5143308292235ab44365939c3f3198827cec29be66586f2fdf7933ba3f8e4bed63e1426cf9f3d6a3b6006b502155462f49c3af4fb82a77a8df6a3fcee8553400697f024f4e509bf21a66270f5c3b88b12b2a61c875f5084e7ed8dcd152b4523f07887be1f5d8930bd1e16d2338911f3750f9ce27b981990f02dead8817e0f01103629742c5caffdda5b1358ea4b7190f9339eb20a7a1809e6b53d584b3608b7fce16922e612db8686720a32892561b0c0557cf34a968486805c390adcd7c21606977fa707e6ca9ed679e960f2861c4d3ac3773a7fad103fab749bb54143951f55c4ffad37f7739b5f46a3b15dac2b8f9d562f436d5e8e938ca5766241b11d8c56cdbcb04718ed77535e70081b4e4cccb8f69df171c1b662f9b904561005bbd38a00077b98a1c4f92fca857db690588273131580df439502b5b4c97621c5fc67564ed83222c2ed1240a3d478453d44588aa5ee0411fd31c03dbb82079cbee6d44514086af17364a19e2a5f32e2a890fa93aaa9ae375b95970a44f5b74925afced4b322faeabd92354fabfde7c1667882e6acf6f3742de8b0aeaa5774b19be99dadd5ae80a05009ae12a10e05bf9910f2bbe69b1a72660805b6fb67be952544eec6a29b2365c298f8f16f78d75093e6ad5fe11a314bf0e5235ce93eb10245a301de58856bc9b1c4f0d5dd4068036f4daf3dc480922d2a56af5708dd2b3402d0a10c8ec40402aca421e15837f23bdbc0259f3d0e73916391b94a1b83839de1c7e546725bc1ea4bd764d00a4f69a17bd8a5b352da96d94185ab36a6fc5764b5892bf05d0aa7a4d03f52c85090506aa2630429808edecb46af7d16b697647959e3038bd7f83853291a7906744ef2ba4dd0bdbc75f3adfbc808defb69c309809bf4975560ed294aded7464aa87661d1b400e5c91fa7a3850616d999e5f850298fe77ea86f313be60e21328d7fea55006927c37501272516c7607a3f03e1d50c8e29bb853fbec9eb0f512bc36a3fc08f0317505bdac15d890e84df1229ce8a2a84363f18671e2637bdc028e0f56e5224e57d22d5e1d267093040fb6c901fa67b4bc34f8cd9c0eeb3c8a7f8440c0051d2ed83ee86185ac1cc83bb889d0ef93492f9f1a5350db5daa7cc060ca4b30ed24946451fbb8e7bb855f7e4b9ccd601b54cdda7eaa70f822c085f9fc4d33008f60d2a07030ba2fbca5bd492d856d779d2ec66507d4507f940aa77c1b6a9061393bc0da9e34183e4dc50daf39bddc1906c6fda77193ead2aaa327b12a68b9aca31a7e9b70149ae247cd2a9439b5bb0942360edce080c05985e975b4e984be51053ef057339090c98bf64e18b5cbdc4eb81b0eafad265e555a889897808ce86587c8a72899b0d0d808ab0de29a9c22ab85354e73c41427064619eb4d90318bcd2b56d8c15d1ab8bcc71f789afbabbfcecab33eda2bfa700903ccbf314cc3bdb6a649291da01d982bdc81d35929508ef000f77121166100ffb941d45906247c098655e42db2e7fab9d80fc02c37a455aa82504ee5897c9fa4f9778680580543fa0f1b915b2d8126923b3326b7cc4fa7fd9e20e045c3ede01a8bfef67d67eaf88de6d69f23bf5ce4dd74fc108d13aae1897bab584198d02ec822143acdff531d1b597002251899e4fa4ebe9b62b2d8fc468d3d118d54ab40bbb8bf47081c85da71489a628eeca70d46168777babe0340d408aac45951f3f814678e29947b5033897356a2b8af6f07bffd63b92fec8e1ac24f5e07c19ca1fd8d2fe5e8234606eb5971869880fc269b501ced7eccc62203318df921650666f73631fd1ef80d1e3882b417b371860eb021c74fd01aaa9754b06c87f0c7cabb30e3f8540db6e877d3f4d809f41c49a11b8cdb8b54112a9a685b47d2ee6ade7a3d42efe973917174a54a71d60010633e45c3fc23749a001c50efd8e2aa6974ee69901421a1287427b20518e0a091622f50b1cc29cea7dc93301fd4d65e9d7061caf37718081000042c02b19a56ccbd8f305d4916a985c7964e49f2caf680d2966a4ebe094b04b52c0f457e16a5f7a67164a8c2d561be91d7a3b36251a519994dc2505ff601dfa3e12223cf3a0378f133fdc69dcab752f27106f9f688e475b4ee01de8c661839ef9b7cc10032e2426f31e70490a8659397fa7ec5d909106bd153fc6d773602a4ef9f9bc99472d8cd3b7181bdb2d41eb6f21e543790c1708599082e0c8412f26692ad76dd81f0c7bdea184fef1e3aa2bf0ff5b6c82793ae7143c8433e0f2ba3ae2d12c41b30a68737aa82e1fdc9c3798f2cd4dddc88bf7ec7a2acb921fa6ff0993ea99c51a4f29bc3fc07bf3b7cc72213a783a5704cd4a85bfcf7a9ad884ccc04983fd6e32532aac4c5200d6468fdac754eea595eb0dd22048e5caca86cbd89c2bac73c0dfb97af8609e9f47ab85363e0d608a3348159dd116faf283efa09eaa0c51cf64d6c4392a4717c3a93d260166da45667226ed14ab39dbcb5cd755ac0e9379f1d31bb19cbe6366186e9c18643628bbf18526416f02e0df09c9c3c8a100d63c15f2a35741b27c674f62f2032dec7b0191e270525fbb67903b50631f6a79c9d4173eb9249052f8a8babbada6b279ac3c75af10f8365b77d10cd294ebef3ca440b03536a61f39c635073201df4f47f0685d9bc59291612056c6c020c960f06d55ed3a7817f4779d07993754e6c15dca7917873f6a4d7411c0a0a53df512a6176bba203d97aba7998d28155098afd5b89467e7cff48616040e9506e73a7329c7d2aa0e52581f3aed2cd2f7f074a9f83f4413b3c61245fc9adb8ee9bb8ce8984407f0968f71a940264a89526610a77e6c482f32e08c20b3bb005c4ad984a163c7e93c2ce8cc1c9b5c4a6371fe9929ce5dc44289049420cb41698b2b130526e3ad10620d4676dff25c2330af58b61a761eb54061e33c57fda5eb7c269cca98f759f5fc6137f27e96784b75c19bbca41817ed27052cb9a4cf4618191d624b23923e5d4ba47cfebde88b9393dab59497df61f37c1ea4ab1494e3bdd02a80a4e44bb64c6825bab4017c3b48b71e8bc3c30168131fdebd155f9ea91fb71b9a6e099567ef3f8c57eb044b63420be6cb57f6d76671de0cc025107a5e5dce2102437a2b73e4c00bfa9457887f65767b2c782915900c6a75866bb62e975d1f05d4686d13dc7caa4014c60d1d3382ebbc19354a8531b20f4795541c18684501346ef2f6b7c4498a574b00a32737487dbf4ee52cc1544266d6571c3f3c982dca6e470ed63586c82adc7c827bf324def039ead8905190ec1a0b74a96e27ebafda75527864ca58ab1610248fb77bb83f8e43a5106e91ce9e3e6a15f552f82af31b7bddb44f5170f1adab163b6f9b039472b53b636ca03035b5ede36f868cef2b0da8d0c4097ed053c777693cb6341821261789ecd6f7fa64101785e51650cd452bd38f2132eefb420e6cee9490134036ba300f3b1add0309a1a7ee17d15791b94805c93fc4b44ad411353c81e7a7436292843d9919cd099ae731d733b34e7bc2ef7eb91c1510b6edcd6d00b382a2438fb764e6db069c41f6298ef5c6911b8a2b3e4cedcfafed3b047878659dd4ffc9a302003c6147e88d64eb625d4e7d7f2b0fc60d5d66040cd9452889aa84557ece261f3c32fd6c0d356e8a16933057cc2eaeb555cfea8dc216b68f908d144f1d391d5ca986efe2367654f98f01d57dd068476962893f253c6e973a51c88313e71df9758078b84dfa43d606fc65f679595807f6fdbee0680114240f39184d73fc397b75c7156f9ae1dada949d85accd62367c9d57010d5c6ec4befc434343a434d6d96621cfa0baf9cca492c162119491fb92df7fb4a00ded1ad705db48a9e5edf477018c08457ace2bcad990612fa5c84119822287928929021c0bc08e3e92d5815b1e11128e24e083e1c710274b8ec9cf18a4c0689b7c4c5ac0021819dfca523d00888f8f4bd596217a257138eb607e93ab28c9316724400e761240c8c2f6696b181afe11592272a03005cfb87b56e85895daac0a1f6305d38ee632ca6456cb1f4bd0e38c534760508b42c9d27b102682562a81596f4bc341ad908784db2af391c26ce449ba9a375586b594503f760d283cb20593102ed980e0bcd8cf1c35ebed375982ccb310b6c57140b6e7925d009b25b1f275e553ab1f854fd96a37ed67ab8285a79de1791a9ef5910370598ca5429f702a89b948e47f3692ae03611a8c9df3efbc204d40ab78db94c445d6eaf02378cea3654bab7a4e76d5a1f93eff7355bef8733740970b5c48516aa6b62ca177cd47b5f8e221c4fdd28373b6fc4ec53532811d29814df600434c5a2d07539add105ddb03b4f6ac6d9c7be770d5835fe93d30596951e1f5f7fb9cb7767c188c6c8486904adc4605006c92f3753c9dedbdc8b0fe80b62d0bd5db06d54d6d28f5e26b6819149cae8dca0539a1e5f3d116771cf792f80a1abf7b7fb4e6d0a7dfdaa94a03571482ec0941f0d5148377bf12aa849bb35a4ca8f0920665f7162e1691243702b218224af21fa5115b556e05370aa63addb0122fea20ae30b63067d2ac55f04264f89bce60f9b855c6ed378d7d71f602a7335763e78ef57e0390e2750005b8b8fc15c0dc7ddd06dedc9704a1a9f0fcad1535394a619aef55df9fb38eecc14d944ba2485ed145f5845b08257532e83850700a3ab856879eca459543808bce59a2cc5d9f544ba212ae421c7d57d92b24222688a592de217161ce6fc59ce2fd6fdfa0fa41ea38ff2773d42e874f117808a33fe38f91dd5e98be78c37f08a6fb7da44cdd1f78db62c620aaa3e87847b1786ba1b97d07cd06b7510e83f0a62a9d440b4b6e8d4da548e038a87ef92c2d5bc4552c4586a9ff813c06eaca3b01c16b65b12892fbdd6db638110c7a7c56c10880b22fc7b5fa0507c006fbf243535f8224e25963a14412ef65aa5d7962ba994a228714d37496eec68fd1f0b2ede6d47f22fe394ca04d11fae70c41ae87abec319cd93222f9e52e92c764a5a2539ad81f633c795af71101d54de6e23b8d9c4d748d5a69cdc20e153bf07b11e35cea8ed1244e382ed25246e4d0c9108f5c930c3fc1d6f8ac0205663a1107a62d2c3461e698c24fcd12fc089289b4b74089f47ad06cd9844ac75865572c8950bd4a437b23c12d866fc537316646c07397611ca1b59ae47838dbb3e8ba848f2575f449aa90289451fcd145d7d368565bfc3cb2a8a30f78d0223c9e2d157b62b546070197f00143c8c0dc04814065cb1ce1c5f0744780416c8eb7bf51023470dfd080b0dd45b7c01d0592e4690f8ba4a052562bfc7948e8f95b61ba731a36b53e881174e607026a42972ad29e46fa85a17671db363eaab05ee3a9f4142f2773309a7f3f87e94caaa6962bef4584639463cbe3daae03dd6eb32cb718e4298973e7c69c523ebfa9112ec6586a478666c995d90d91b1e8c22884d8c5b68be5c9f859dc926d41e4c0198927552b8972eca437a50d46246870326c51b610935ce97a985faac86c5b9779d4bbc99dc7d97f0e11b5471a66e513fca0cd1e76daf3850c09ae6d8ff8ec7866424a3d4e83e69ff37c5635e3dea7b456df9450846945cf1a8116b4932111057f64fb000bc9704f240abe0316aaeed6921bd67fc5179483b810645a24b3e66556664aea7bb1600750637c908b45428f3c2fd2e09757ab2d45b19e28c0d5afc63bd820ed28758a0030f950e783c1c30cf5f5ee68197d071f11f7dac155d4e8bbfb00b6510b7ee0f54d421757a0a8fec5ecaccc4d0576df2195197ab03c0e6e3391d03c1c61ef598cd2e7b3f7097c18e83190227f4930511e4385067471cbef80d6284c8ed411e55be5d934fc6847c8638d88885d9a348e0eb0cc14ef7c40c36812f8f4e86d6d5712791d14ce61a89fa48db48b4cd7bc92d71f24211aa1c6abbca8f2003d753bde1dcb1c066f737a07780ddf9503f182e3ddc478cc0f6acb0e040cdb8d00059044e80a83ff4d7a41dedd29cdca54b5558c67b80bdc1d6da67b7ee907994fa5340a3b2ab8a3446eb5f5137995aa35cd733ad6ba20fe273ef8a6c38d08ae92f857fcc0c518b563ae8045dee7a3f8efd08a398747f0d5df86bc3672f2b4a7f10ff3a0302249183d7f964c9285c34c000719a2b1d605c80dddd54d0bb1a59f769beb4f92aa7e4b04354be3b33d0e25fb82c16fa6f6b33018eb041b71604d735b1001a7d006b8ddabd801401b77e3544d357fac3e56d3cd700957308aba5c7acc8c90d89ad904e91c6aa4360fd37ca1cdbe263e582b553fb6005115b60980f64b43ff27fa8bdd82a5ec621b098d051fcb7cd5fc3d0ca0d8421f29b01e5aaf97bd75c569c9233caf362a4fce14224f2267d7b002fb95a3554ae91e2aafbbf1afd787564789c4d23b797b15de96687a85d274bde6d1c31f0fbb480f84624142d52d1cf07497a55fe9b6d1539a3e37e599428de6b58965caffdb9a440b2fa23adfcca26a1c14ffe1cc71dd02a2e006f997c81195214a0dc934b6cd01b6c40314e95b84df75eb392a2cbec1fb45ab8467e93daa1a61b29cf31e6e8bf075e362809a7d58554f5d6a77a1e5bdfe6d7674d784f6ccd79d94b821791c34646453089057a2ed9949f1f73b812919abad431d515fd73c81562de26b420ca769f3f382fabaa981336431e68cb7e12b222815b1ec2862a26ff9453b4991e8ebbb13be1ef00fc3db0910cbe91484bc8660b8c004b09558eeebfe9bf346d3c436d42689f8130b74a0551b561c83af991593b96ae4d64ea6f140d69d2d9c690f3dd2f88b00f0d0687b26274c9461588cb711a143426301b0218eebbff0c79097c19ef66d1ce17b8827048536d157b061fac4619df23c89d4400858e120ee636df8a731652206ded5f9c73eb7df16b7227ade4986b69f18cbadb475bd75300df0ed6ff1e020fe0c5565e9e6ed1a8478dca97d75774bba1fef3131034e76205b13a05c4f63cd7f650422e23d5de66f7dd3ff5d40f45c3c20debb6ed86e99c78fa08d82b90ad6594b30adb29799cc578fe1a65e9eb2d024c70741e4ae64a967393e58c2ac9293b51a59f00cacb3fef355885c4079d390e10129b14ba8a52d843556a92491fefc9b24d5cf9ad8d6d92a24f64763e884c3b2412e384d66778a67d8db87d2c279dca58963ea0f585a35f64fa43e80268ff743583f872d608ae93d0b095a5209a69a4a898f36d9a403b0bee9f304ab4b52ec1ece8014c2ea0bac1f91abf62b79aea7d66f4a963ada601cff8309d6f888dcd2e71214ea0c162ed583c2bbd7c5807fdb450bb339ce4add147dd0027e9071a7ff1901eefea221e418773bdd0700a400aedb46371bb65f488280542d62b6e7b2008e6bb6d1a70371f5363ed43fcab43f1addfc920c68d7e9e62e65157d32464a217a7f0609c747dda21f0aa7bbb36f52cf5b699d329d4dd9bcfb92ac526db93d3da9f4e9387b88e10b9943f4c54636efc6aefe2194d932dd8eebcefd4e4c8170dace3a6e37de3251356a615765a9fce92a5b08bc0978b88882e9c5cacc63c7c900d85004094c04dbffe56e1fee5af85cb6a1452e606c0e4131df0f561496b0bf445bfe85e3fe937eb5554b76a91505021a7086304232d98679a6a5810eb59275c9002c454b7338735aa5983d8d42c0044420e292e331d408c1990b774e59c9195a00cfedcc9277d21393d7c5e7c256f64e8fcb00f4d955ed47bd933b9ab04eda1fdad5c45da018417bf215807ea8f66475dffe21f483219afb36bf5632867fb8b49601087487314e3426b1b7eda0a96cdb6d990a59a256bd770673f58140dec8e1e2c943ffa3e588221f7648548b8a37b7d9c38996f0a966f5d162a0af4efec559743b0c5cb1ce7206f48870b469a1c87032cb6e41c16e2449337448d0ed8b4d4f6a0e2dd2ab1405e595857a0807c645c3311ce9fd2acffc0adff7414a1779420d992253cfaf2f6dc0ebaab04995f32bdaf36642b862c4442157394240bfb2ce27a0fa6412874496cf4a476d0284d8c4b354dda80e058668fb5c6b403797e12eb8a0bc30f1e7534024df480b0c7fc7114b58e0594a8f1fbc8b79d60ff5d289d88d561a75cf1d4ba03bf7f76795437e6214e367e782b4e32e7219a9ce9c4d40852aa0f9202a967a178ea9c90e920de8833faa4f30bd78ff9f45cd89d6439003d08dcad3199276552e68c6595e6d6fd3b5076ddcffc3ce5a8bb1a81c3650e19f9216e0669ec152aedf32935411040422b78087216becffe59559473f5a6f0b28190566b5de45040894c16d42814f56d6390c351b2d5aedadfd5799b1165e98542dd78f4237ec23ae04b0aff931409c7899c594754985d1286c201f0d24b20369999867bd9c6b3eb0e3f043b937e7078c90816dd08d43b06a613aa563c84cb434de08d375adfe29aacb15ce9cb7b7e61cde0a9753dd7890d4ea344fbe2799d93c7911f26a18f0833d069e7cb6083390915c338220cf7e4382f8f0a698059515a0ea974e5e6c5c5b137380a5260b22724d225ec8b182294f51ef3f3565c0b004ccf9a3aa038ce90243bc37e791b7c26a9d27e59731711cc7d61a998af40bfd716821f5cb99d58589e416ee83a40898be007147ba2fd5753775722d7cea5c52b1c6fbb3f841cfc18571717c82d08d1bdffd25339ab01b74482ff5d3b404ba71d7ed81c635764ed018dcef6601de71fa57c2dce960dca26fadb2b6058c8cb606480504417e85d73428ae0a363630099923f7851c9445b6587f3d0a211d420c2e0d01cb9f95420b890364525b06572b5430c3f8e3c345119cc64216635c05b04a7b7476bf124e3d8518da58d5144ecf6e3b851cc84c59fd2303fbbb4543bf4478b37e112dccd81344a53959a6a5b0dac1d1c21cb9c167e51ca4051dac1d83601e9116c817acf26b1a74dba7ad335592923c4ee201fb0cfd8509bb8bcc93ae6edf92bf1850113fbd2d152dac7f4ec265a4f80eba8a11e447348d9f0883fef7b10cf8a7f31c1ce8f0595cc49abec929c9cf26575be2a949ec823b6188d391555060a581de66b48be9c344d24afe2e4ace98de28f0b36625b3b02b1b8f65b9de432d6fea81f0934a89b8a567acc35da64079fa980d04c283c0fb5939f226d972be632eb5c002a11459e0a1b8183fac1c8d01d3081b2f6050e4313f97d006fcd97190c186b7236f88d636109f72a616d825b860c9df247ba9f850657eac5dafb875206dccc3337134184edb0f8c3a8689c4a909487498e2db3758992031a83818dfa3c9a4d39566a0f15b721d234cc518e738254e640f40cf9327413877e92fabca0ddc883878f521456f5ee651b3695db63657a1a258fa1b322dc874e84df666cb4499057da7da0cfa80774c2f8a67c629bea69ed9522ee5d95b605cd8164feb106dc84896ad97626d079a38b4f6ad98f65c401026036db0d4f40eb4c2c20555bcd52947999a34358950d6883cca7c25d138140ea731287e631546ab02536d60a56abefa1af3da300542a864544543e22b4faefc071f6bc194afaceedfda136b0a764c9a610066035ded639112f2d2bb9f04870d5df834879f0e9ee58ea65f6f9fc452ec9dd17ca0691c8fe160443baca22e08805b930d330792339a33dcbf4831e8e28f618bf43376ccaa67e05fe4691a50177b2c9a163780e29b28f6a62ac2fd4f8f0a094aae588a6d3db3204aa7f97c2b5d832a989412fea6049d368b8a18d8991d1e978e0203921e5d91669ad2252513a9ce830ceaf3644daa365c4a48b4e011c3f4abbd121d936bbc6a7ec75c5d5e1f3ce8643bc694e5695e9ace154b09383dc3312b63bf34526fb8561fd3282c7761d7a6360b2dc1ebda2eb8af67bee160a80e83a28c21d0315745d23c9e56efcbe9dbb0cdba5cc58108d7891d65e5166911b36db0e8e26d6d703db2ebf132e7c6398eb4dccc886e015519735e3f6554ecd2c2b87390a52812c7a117afdfdf1ab7439b88de32d2c3182c5b98246435fb4dd7412742824dcd7f452e5e8d9d2a28f34a9dbcd98a578df6127c846b2f65625a1364543e03fad0a2915b20d2aa9a0eea21e9a7e9c9437d75c9f43b2b8c6ddf00c3be60db5ea03d1bd0d1ffe9985f3c16d10fb8d0ba39c8599530188343a0088039080a764f31afc0502231a3ac6502751c69b80f3d341093400cd9f6deddb6dc5b4a99a40cfb0843094d09a59934a3b02973a486acc2941912cb5e4fb0e9aebbf7520a0e2921bd40e9ddbe52a9de17688f3b66608631cd9846434a43ae10b99c48df257e9d66217d36d78eb767f3883c5babad3585ca240559bcf1af84f3095e2073e38b49f5224c5c285d05b346ae4e5db579ce8b44eed74bb78d725cad35f0a68e325b4ce7fcb64b290f94f5b4c71d3d3079b4cfcc55cb42182940a6daac69d5d60c5dc5705191d1b7c332e88486d0738b9b1c9c651aab2d1a98dc98bcc569c81ed6160d266f5151bf093dfb4d8b9b7c822a3aaa107af615f2b842cb4863a691c2f2dd5ed68081f24061305872ae18e684c2c1714040a506fa412e294c45dde4d3a5a2a36a48e8f36fa8154d6ee03279e8d3d5de6326019365e710067f54e770676bed30c618c77c404040990251200a040494c799ba721d49f2366b9657b2e26b2df8813fb0832090fe4b2b2ed5f0baf5baceebbcaef33a9fa0b59d3de2dbda8a7f66452e2ed8b3875974f9b0bd61e4f97824421fc8cc9ed7d2d2d2e1c0d1384e2814cafecc8a44ece5187aa9a31990bddc416548c0d6d9b4e7652c2edebcdbbace7a80f2680ad4590efb26f67b7513e95f713e9dd4d6f02660b6668fa63f9447bf7c394339ecb9d7e0f781df07360866a73dbc16dae30379b4884e9e0e3d9d565ef6829f6fcf2b61ae237aeab60889ba27c2573b8c45f84271d6d5969d8a4a60a42b8f5794213f760e8f7407fc41614db6c32891e787401426030a0483c95262b2aa834017088adfc6f2bae0291016699de94dc5cd9c0ee3cecbf1e5c078cc01e29c479c22aeec368d818030ce228f357199f6758d0edb6bcaac0021115191cda2d08c8eaad4626f002d09028acd12649f8e8961524eee98a191095d59bb4c66b19ddb4be64d1de5b5b15913809fb35b382f2f5087fd52e9e1ba8ef36b7483a25ca06e511d786e4ca859338afaf9a48c9fee30e7d3acf2a6f149ee4fb3a810e5388ea34cf27c5246d063f047750a9e1080b732dc92f2cd3bc039f69283f1725417479022d7fe66b754579517e8c5dc6475986ee9f4d18e9f163de2935b3a7886f4c43f6a3e414af2b4455dcdd50b7497348b46516bad0d6eb55225a5afc90b54025252bdbcb95b25a7abe69c1b7193eddfd306ba35dcf88a3a6f0baea50e6fb3aedab6eb34ddaad56d20c0820674befaacd5bed05842f3b5e341230a1a49be9c543ed7fae544fa3a6b5f7dbb969c6f7c751a7c15faf2b3d65aeac2e29c2bfc7454c2798e263187e76d1192834f9373d257ad6244330d5961054af3b4871d794c1eed08e0318bac0832b71832df98b5073c2cf07cfb9066cd273d807dfbcda492b1e4392484eccb49fb21cd9a4342c4befd66a8c7cab7b7d0ada902766e54e15c573dd93750c58c2052b0032b49e0f0012d88807005126e4c5106193558a203116eac51e382e6871a6a58c306178071c485c7d7ccc1918b73caf90d8e016a2e3c048faa94cb2f0bb2a7263086d1174e809048f1821c28dc6081cf154e54e144e782736b1192438f0bb54502268e5822894f114540e16a7fa1b6a618b19e9a123990e2072870750fce5841932c41b0000535573b0bb5f5802334257cd828438c335ced0dc600a4adc593368452ecf1785347e9c2d92d3bc08604000983928530c0a68fcb67d6f4e6009bdcb9b79075ce32e4055698d01ab2bad5be98b95981ca28177a38d2a4900bc7175d83d62a0f1506726e6b85551e688df6a8a30de55179a02d034c6a437b7416186498336f993279cab4cb907ada439c3c5ce8aa47f0f2ace9ee13969c73c0bcd8fc0de94103c3cd90bed263b21a4b9eb386e54ace4dcb3d0537adb668ee9a86c7def9576df50f74d54726d91d7d3510b513967cbfa43edb56390e4ba65fe6ee8425735ee60f6ca0267b499e356185d59ae5cd9ae9443657ed5c7c3b4c36c4944d598dd2ad212ea92a994ae3baa45bf43557ed38280b35d1b75328e6a443935a61836fcf49723969305872e77da5c9f65a93ed7d0335ab366b2a6cca10f560b6ea91493433b35a89624c4c4b4b596118fc51c73a43924b2a1b5257ed18e70e8a97c56eab1deb6794b73aab5c11549b6e5aadb57620908fe33eae54e2b812c8711cd76d75c89c467312953cd35639ce34660fc92cdf8eeb91d9a2afba9a3513fb905b305f43d8e02cf5a5d3ac4b29a5f947c7e59438aec4711cc7715cb7d5284ffdd2e8ebf5ba3d2f7cb455fbf259b161cdd33e802ab40b7450a4b52e72e8d9cb0aabb50c86beb2a7e48e762aabd67a1ea574c96c328bb7a7ae88c210c0eeef0fb9725d47bdd477c292ed9734848ffacc1abaa45b15c94fb7ea4eafba473d3279e83065da4b5a04eda9add0dbe91041cdea3c7b9b1c7b496348dcd13a1e61d468ca84e20c3d1c71f28f2120ed825a09c0078a2d6b56ee3526cb01936cb769b2b6c8ba6a87117259926b6b48ce9da51d3059fdc624dbc921b54589a0ab3792749666d1164c18bc1b491a9bb424bec759db3925a1530a0bdd0345eacad9f388637270c4b9513c69c355c4f2b898709ee3f2e8072ac9e0486575d5d424d22291ba84516b5ad368cd452857efa0c865851139d141427bd0df1167adb0cf2897ddd3765aa3579a95d42c7002b3ca5f1c39a5ae2ba5be54d7a5c00e04479c222ed06dbaabb00aeb3a10db9eed92f1f365857d7be56956e9b2a4c2c6a0f2ed75a72b925bc7f24e79ea2e31af1910848b4e8ef2d3888d66664a7c84695e68a2d9f3680dc376be791e4a54b9380ecf719d4455c9539ee3f2e8b77c9bbeac40a6395b1568aeda4d36db4ebc41398e110787a3bc24de9c3ce5e1106992d82fd54d8ce3f0989126a93ac7e1311ed3a53c85a3031dd3522ea9944b0a87bf7c2ea9148eb0f3ae34e1a7cc74a1386f114bef4db8288c951506a5ef244e170a372e2a7a691c63a478523d34ad6975d575d58e71766fda0d0a35e260276800e12ad22a78030d1793eb39aeb28fbe6766305936d2b7abec1109294669e7b41b4b8fe32eb839253bf0c7e6f796393edf015ce6f8bca50187e3a86e507e72d478438e2be5274f35cadb5d9cad5e62825ed27cfb63fc51eb3052320e118706335e3fb87038468a9d3cc64f9ee38a719b46a91ce5392e2f25f64b6c585da544d54d089ef210c67ea93a4f7908ae125539c686a94655e7218c0d14eb4615da15e331a9b1abf47c3b9864725cc348f84ad7b4dac2451d16350d17e1225cd4b49898944b18b9c448014de4f27474b2029ed07fa2019d6893888a262d70011752c2308253830cd090adc0481218a722668d1d4f594c990602fe8966257f509c68cdba4038f9a9418b2f4f53befdbb924bd469863a6ad645cd5a44d26f9051b4971e54116a3646d6f9123543a1cac8e589f6edaa92cf2adf79899a9191b1572f4fb413ad5946db4b4f6db9d05e7a5e7a664a503293d343922a888c729881149d06e4a0c88c1d98fce0c46872918509d80e9808c20e761080d012284ecca0066690e16adfc008a8687cdc237249538215207ed0e4061cda202287066ce8240105610732a25cd1254a93ed2fb0da72096a97a4da7249d2ab76a117d8cfb78b0bd0926f7799d5564bad2529c35c66efc2f32e48efd2e3285a6d69000d29c4509286ce14535ced28a3da9a64a0710592a428888c40c2d58e9ad5969743166d60d1e44a95295ceda8a2da7ac9e2c91533700276d4c4d5b56e750b7d857685234e11d7565457bd7d34d40c35a3b4f6e5342a7a23a146faa911bdd1926fdf62546a5564df1bac379ede7a3e8a25a1f67503d8f0bcdcf1d5bd22eb4186b4f002119a2cb3e8c84a2dc95e1a9b6695b4071f34f7de3bd382c018a4c9ea764abe5ece14a500f332dc3186eb3110c14f270fea44526fab154ff0d78bfc15fb6dfdae2843573a6d2882fa779cb6368b8e3a9aac3d2ae1bc66fcf1dc2be69c3e9d07dc751d16b3ed9ae5d66ab7766b55766bedb8060302091f66ca34b9e34adfa49ba5599d63dc39f538f007376932f54d249beca7e3ecfc4319e1ba71064bf62f6fedce36d8addda49244099165660f19f0db5973536fbde4f17d45259f7bf4bbe2fd09a270fa3a5e985953b2b604d6ca7d30df16fc71af2c354bb5babab126afec865cbdbcb11b345e59ad72b64ac9e5adcd9aeedb6164f4e28b74ade0f156b935b2ca97d823c9da0a47901b4b8c3d3b96398f73aeea58a666df315094917cbf84a1a212cfada8e41b61eef2c60bda11b3269802cc57af220651b0ff358971b546b7f6b456abd57ae2e91adcc19b3a4a116c95611f300f37a33416e39935adf3aa97e36854d08474a2a0af66b56c6846a3b5900e05da6572b076c5308b9016164d99500bba6a0f8fa80871200b67612ca4855d737d2be78a816e806c985c969d08baca63cc8d2472f3d0fa55573ded3365fa05d2c0ae816cd4c006853dedd13e4c1e6d43a780896ceae621d638c87ce8576de11fc01a97847d7878203c8cb550cbb89a894aa147980a6a34654c6e1a7b565748d568d674a53d3c9d512fa8113da24474367b6ad42ccea8bd982cce8b49766d71475d783159731a35abb3988d03babadc6c07df5eb92326aaea138b205093b3864820f60e3b677a7d7b19267d87b56fff74c86508fb2f89cd8e5f0b6a16064b0e7940a3da0a837a4584140a1d997af87e4d3a446760acae643e4c196e6892dc8ce362302a72307315f994547199bcc407e8c1b5c964325918d40a68f74c9f92968e75926ec16c5a1751fc40e1c229c259e171652f42a5ccc0651a710ed0830ba788025c7964a29a01a7c9f62224b84c2393249dd71899864d422721949fa9afe2f4b1e2c4e2c32c86260b94c16c16186b92569341948f352b8432c976da64c30d23925c45b6249a7031515d9faf4ac13af5af3660e12ac322537659b3c05a935c1893e48e9a6ce76675055e69a1e7c2982c3a34c9763a6b72565b944b1ac2f8c8244d381406554c1184abc816c4192ed388536dc0c255e4002ed3c8a4a4cfdd6f10d3b2d1910af3746de47d2823b9fbb28ddaa8bbd081f572661bc3181b79d6555d6d230804c6be6bb515ca6a3896a47b2af56369ac7561ac7f4ce3ac2b6e2c679684b124b90c7fc29f6695606c0950b3300c480369b3068c4d992c660b4ca55a5a4090863292c32fdbe8268fb39a6e52b5ba82412e537fc1d81d4fa06e5b47c5397d4ec58dfd6ad8fdc9feafce8a28cae0a20d23d4b841490d252a88e20b1da09001c6c018180363a5ea7d1e481d046ad6e645b119105723e3cbd5532f575f72b55a1b5cd2acb99ef2e13b1f9918d7f06d2dadd59669b3e16745cc33653ed38791342b0c6ab2a7b64259afba47b8c4e411ca00a7c016914b90464dbe421e675dad00d2ea6a457b5a2693856d376bb7cd640237b762ff662dadb64cf98a9f0b08a45fde89760d61ecb5c46cdc243bf90ea1fce4da5445617447457d7e4522521e6befb5559c569c7f4ffdea9e59334423518fc8742c41588c232a22734523376bd23b23972d9b7d7b376901082b9b860494ef219c5cb1df244ed786d43218b8c4531f24c01e90e7b99a15a7b59eea4319c9fd650800930861167da48befe6098fbe1df76b49a65f72351734d064fbd1db57a160552f786054599fde18b99c480f438dabd11ae56aa9cf21820822881fca48a65fe2113e2b765fc539c28779b00fb3152e1136c12d0867d8278cb92097200da481461f0c60ccc865cb664dbfbac96c750d73d5de2f59bf5ad6afd6f1a18ce4ed4bccf31d066de309d4af873191c8fdf05392cb901b552cb4d064bb18b95ffd1a4718610493c964aad52361baa66bba4a1c9f00285820b9a8fd328c89600dfc66b9e4c0dab74a85ec2d7e81ec2d638b5fc0e42aead3e5d2ac3aaac8dfd1a418b9243397c48933224d5db5b7889788ec5f86b11c246c58015210106644c1c57d924483da186540d9c1de0bd6c0a4dacad5346bcb140685316e0dae66aaa67e35a9230218afda6a195dad5182b55ab3c0da24c3b065dfaf30366b6ad2ac31e1db9dab85b3dad2401a65eca00a10627c5185ab3d2caa2d11f0200935b428638a14495ced61acb6661a660881c3133b58624705aef650565b393a3c3471c58a28a624f9e0aa4e7e3e0982d0f787b230d6acf924083cdf1e068542fdd481f4539bfe326cd62ca2665d9e3016c6b6ad0ec064c2af29d31ec6688f3ae21ab09190092e89ab99b89a170b1a229761acf6ed2f45cd0a639d08476067600d6fea284b5ded76b73107e5711b871ed29600ece602b0630ecaa239688f92959295ef1cd55edadd62521eb4da9ad982b658b407a63c58b42501ba6ac741ee1697e67d1e1680833ca534b6eddb3f2172e9cf79d70d51fa6abd591c5dda35ba578b1b864f8e01c8b4d65a6b39a794bb2623723d80cd9d9932ed02a0ad494b56688f9f3cda11405743687cfbf7825cce7c0309c0dba4297324d36865ce976a0098e1313b4feaa594c8b3c954adb595ea1328c7d5add6ad2649d53af3c486f4c224aac0907b452594bae848ce23162eaec0648d30c9767f01454ea48ff2086bdd7a60d1f40893d583eca1f3ed9d03a5354c1b1848d40f01f75e3085fa9b97d0828e923827894ba5b1c4f9ad1b679aac439aac10f03c6e0a1df88e59b3e159537f3a9d3d68288f1a1f34d65a6badcccb079eba8de1ba4c1e7deac0538bfa2e9f5adbe2f20d029849b697441d1cb26bce0394217c7b6a26a09de67af599f67a695028bd0db731cfb48460a65935371d9560dc1fcf6dce888b2a4ded37a5bd83ecee16fba94827692f9db586b6be7d591ba6f818b1e082079a357588e88e512d0b85511e7b1fd0ac12432008d19ca92d6e7c40af46a2194f8b5c4ea2b7004c15b99c4644e5e4c2470b2e5860d64c0ec9878d0f1b1f363e6c7cd8709fcfd6c56b0769adb578ae287e11ccf04d73406b92c2b683cf5f6f7102f6af5bb7d65a1decbdd65a6b5ba5bb713e3d95a3d4d9d7ebbb59cebc98613cf0c140319119b02d95be1ff45c75ab3461dacb224f6967b947f952308559e56ff73d81b5b42b1b3498dbb5f6de7b2f4d29964b9aaf3d4c1925f24d90660de961d6cccd49b372e480d1d1d3ed6cd9b9ea12e729ed9725828724677c04b99959a890b32834a379742d4eb3745e334bcea9943b49ced0d0e049d655d5412ee795af4e24c70c3c1787b6f75a6badede922c0f96e246b376bedb66d9b03a1bfb5f015eb43a05775b375925c09befd3ebd7533c145a15f316c4e047f9d3232f46f5d9f063b6b87b459d5afd85f42b3ec5816f9fe719bda69438cedf6039b23870e1d3b76d84e0b3b06945b032956b0029f2d7ca04031c288241f9f258898620a15a800a9c806403d37f8f9e40d27a57e15fd1c7ac9e6153f9fb871e5b79e7dcdb2e29c732269b2b2384fe5986996aa2ba159aacf5d47b31aa8c9eabda457753af5a9ad3c561518f443140484c51152a07091c384e808932a72a8fde8f089b8494cc1284247e868288b170fa0624889297670c30a52d0b6d44f504528698284152e5e52c2c8010c0d2dacc0a684d18959843922cf1004276651807145195b60c08a23689094648ba3345eafe75a4865ddaaecd8414dca9c04bdc0c54f114984b4f899a24212120e51dae8c10e0ff501fa9ae3440e6e0061891a134d7270d5793483286e70c60d4e9ad0c0559dfa54a740d54f69e492fa80b25ca6907cb5dfd45a71135bc8521f0ae4437dbe67608740ecb003cdc94f1451dc7043d1a402d35d7fd87bb78de330b64107542a79def7a5f294012d883deb85489e7ad8f3f62fcf94b93fe4eaa69af429f047f5172ab9ba4d6d697181d1c9752c6fd0cb0bf803460603fe08ead3899e6ea84261fbeafd752c2df02f2f3030a7ef14c28de559839d289f6f904790229766a55993f53b261513138303758a898179898989718969c93131311d1e4038a70c8d40e96d9943fe15e7260ee08dee6dd60bd9316a723ead298d3685ca119526e70bd9a9d2e4fc16b273848dba35a7d076a208d969c942832297f84b45df25a18c71c6251a87830b5c20bbd5d65a6dbd8287e7565b6bb5f58a348870c289277e9a6862b3d75a7b2d14182c76abadb5da7a45104124113d71a30ac6b5d54960accff7576b0aac734e18582a36494552452edb22e1f16956ac59b37954d767f36c364dd63c797c1aa8796a93a9a47c2bcc5bd1d22a442dad6eedb64d3b7bd5d6a713238802996f9d7a5fb368ab52a8f36bb77f4d4efb5121da63d974ce3961ac9d75d2a693ce39e79c3de91df25a30d9f2205b213b9bcfb7f29353373caa5028b79caf42768484ec0859099a142c89b07e1b85ec083539ff85bafa0bd921da36213b33213bf613b243d442ddca2f6447d62cfaf385ec04352be7e73728642768b608d98965213bb23a0ad9096a723e6eb2c5270b61ad12f672dcbdd75e252ec7711cbef7de6bedbdf6de59ef66afb5f65a282f78818f1524f6c91957fab3a9211d24f6fb524dd28f87ef4ba54a224d93f2e64052d93afe9ab5b92d6a564e49a3fc7c7286ce57cf3f9f98a1c60b513002d6c26c5bea090fa8fc7c6245e7aba77e3e310307efd5fa51dc644e0adc1b6fbce1c6dbed0a6f35239a7123d33ae29f75912c68c9cf2c3fe9eb270d020f39a7d29ecd6bedbdf7de20bdaace44be9e05857ec97411fad149de13dc09d40aa260bf699d1fcf86c31118dfeecdd03889439c2d4c451d247c7b0932b525ce55af707c7bf5491b72d3acca4dc974c4d57d1e5923dade6b7dd0586bed84f9721695397e8e414e50e4fe786c143edbdaeeeeb67392d429b501c9e9e7500d60fc89f6f4fb49a86514116a66c3307453b630ec6a719bdafa9ea0abef8939fb9ef8ae9e3dc7e5326bb25d6090cb971e15ade28dc9f389ca4d8b879e459ceca6d39426a7eac6e4d9e439ae50c4c1a3aa65c469f1d0735c988bec1205764ae52d72e992f42dc93fbd6ac738e754eaf4f3ed519a04714c9e3d1471426f21c333726d71c0066d5cc103273c24e16a4701d5161983264682d861688731787a92bae5e2dff72f587279a2b98828a3eeaff435812a32ed901dc5c3d3ac59afdabfb17427496e3cd168be44cd682cf80335439991cbd3cfc988d311b4853ac5e034835314272aa8972729ffa3809f433524f1a8d9acd9be1de5c4ebbeee07e7289eda3ae19c3aa1789ea4a869d3de155144a82968b585a282aeda5168248d51fb02a9a2b6381da1a4187de3a02297a79fd3cf09a8190073970baae8db1b4504a266386ec8feb30a2657be7ce961225bbfde813fae53f1d2925ada42bd9ffb710bc04492d74f133cc0a2c634c30c272e2882054348bcb02168fc3954030cf320972f3d9e911e9e1f4a5c1c460a6d05b838154578f19e8b789ad2ab761771ba4eb49b447614adb626304405ac87a12a8ae041c011471c91c4133db08183674fb413ed4588971ed48c04d8ac61bd635af63faa2d2ca402222fdea0420b255ced1f526d45000b268cd0b0c832032caef68ff619a19cccd656b4d15050bec77233426551b72254172f41bcf46c52b6a2b96ac75072398d5868a159163b10f21c7a259d8ab8d5d61008351b7a193d6a565b275aaf868cc87e3e71634a007e3e09c2947fe9a92d14112a8acfb70fe9e80c19216a32e50bf093880837be8a2aa27c899acd2aaad0f99e555041848a127e34140a89565ba822d44743cd3e1aeae8a385236a7691c8e587a2d5f0a5e745881721e817271aed614797d9e4515b2ccc6fc318e3cdd6264f7d2b1a828684d16f47a6ad6893b249a15b7c0fed61c7136df228aaad8f3657f544a32010fa5dd775a1db74b8d52671284e9745cd9a65d3f301282212d2700972f17149f2d2f3e2f3d2e302d482f42df9be5fcf7b86f992bcf82169b23f5a094a2e51331afd2a0245a1f2fd7c1315356b0acae8f3396ab2fd03819c68b3863af552cd2a4bf0413353c2ad755f20f8bcc53fbd63becc181bbda546bdb2d64b49b3a6ddda99c7638399e52dadd4c65beff5d6522f4b43bcf592cfacb96e6bd8addfa49ba5698f2a15beaf1d07f46f2cf14df87968d42c2ad627a59796d467f694ca681015a2945ea3661d592b6ffdce2aad59d7e8da60b2ae1793b46e2d85f2d62f259bdc31530206af17b5da4af9356a96fd98a4bede165574dcbe9675b70fa68c750f7fdd7d5dfadafb5a84792a96403a821f4dcaf2369c6178af4c19eb4d7bf4262df5f92810e8265f21f46fa4e1f3d04d230d4c6e3e0f41d0a70bc459c44d5a183272796b37a9aeac874d5a1f64fafd9f835eae7e356b6e0fa68c75eb0498fd47de5a1bde7a59f3f6076fbd44c0db9a8e5bfbe8ad519fa5daac29f9584add9bb457756f08b49bc4637d4bb2e44beaf3f3d65a246faddd80defa6dea40cd2a75d01f6b5d87e783db44f3a68ed28bfdadb40576cf7da1cffca1b8c1eaeaba093c8f3fe6a7b77d52e6e49cfed66dddcf8dc69abc5eb222dbd4edd52ccad32cea33bf4b7e7d4b82677b09f39e9739369d5edd66953a0e08f975dc5ebdc1f2f5ba796309f3e5f62ab7d7f64241be138a0ea6bcb77d9c38bf8a1749bc569aacdd2b4d5e07c59bd4abeb5e0863d2bdf2d73dd8aca17e3da0bfb4baf20963eefc3df28efcf578fe7a3d4bfc6dbfd7b757e73ba0e7b8369f2a840efa4de8e088c3843a0ee8db8dc943d398e3dac692436a96956eddcd716d81be95b30b1df466a9ec37a73121136026f0407bd0df4ce0f9099e108017017d03a959b56e4dd7bd59fefaa51d35eb22f50d63b2ee1993bc7e2f17bf8da5ede2372f67177fbd45ebf3a5b1a489914d6ede899b77cfb8a9ba426a169de4e677738ffb363143790f7f9b08f34dbcd77d40ef95be4d7c51c17bde478b7a60e567911a41fc26aae8589dc7b3defb72582203bfed0895399483ce6fa308707e04a827927f135dd830f29ee9dbc40fcb7bf9db4417315ec5f92cf24116cfc13c76cfe5dbc45215cf79f3f34a1dcc0cc376f0a9388b7cf0c473b0bf8eb71d20dbdf1ec74da7c9fb6af2821e7a19334407f4d04da899d70413fefab4e99c4486a961caccd69c36fcf5988f89f91ecbed8796b1dc72f81bf3f73565aee724726ef27a08b6c47249fec6b9f7e2807ef3526cd6a0fe6e0078a3ebdbdd5eddca41db60489ae5b32d69d67c82c5ca1664693f6cafcec7074e5c36625f6e3f7f4f5f6e407fb7d8df4df6d731b77db2128606358b0e7dffe44b4ab489d4bdd84b1ad385bd13b9eef088937f0cc1144fd7e694767d6e6f8d7e5ea09fd5a7c8fd047f0cd169af2ebb8d2a153ac7be42e778a481c94d75ec34b477e30a3454c763ae2bead345034da5c1a6aeaee31667a5a92dd54de7ed9d4d6da96eb057c7358ba9babace5d57711c4db74488d9408085356a7fefbdf77ab72fb7d9ab63c79d5d1dcdb2de7e3d555bd5af4f1db7b67562a38f9b05f3d3a558eb59cb591aa4c9cd4b56d85417606816b59c7835f082079a657d069c4ea46972ebcacc897753596fcf71a9eca852a17afb4df51e719858c769afe37853f2ea75c4a95e1af34c4dd5cde6a51c17756b4b983bee68721bcdc841ea86b7dedc8559b3fde62f7cb9c17e1b715d6d1e820c7299fa0dabf078423f76a15b395e9bbf40e4ae11fb6d07921a1bfaf2c3af34bed8d2907d49757efb5a5d25edf9cd317777346b236736df9cecf86df642766a64aab6aa6fbef1706c785347d9b12f79e1110aab6fd814a3ee9ed251f9ead76dc1f33986f166d9ff7cc7d73eff7dffa5fed3f11ff9dfcc7f34ff79edba7dbeafbb1d88fdf6aae77cdd496269779fabbaae9df6746b4ea1959cfa2c21daf992cf284deb29e19a1a4c4a6a20f9920a7dc94b3afb122dfa12a57dc9bbfe442147a6b0ca56e24b548a2f7ddfa84ac1fee740ec7f34d9e97bf79b81f634f975e8585461cf79557bcef778fa217fdff4e99f6e85fe754f931f92263fb7e91eb292f646f29f7bf8131b87227df5eaf30bfee811a7c9cf37f0c70c4d7e5e82227fde6e3fa742cd9adff96753b1383bb1a442ff79fb306b3affbc7fa03db07f6ec5ef73dad3acf6c197bc1b7b872953f25217b99c495ff292cfd02ceb25c779350b7bc9299292e7a5afe4dee79e83e0573ff01bb1571a3bd03190896afdf4432e61dec2d4eab656cbe39d7ec84d53399ada4adfb65fe19d76b2098a1214fc0451307d92dae2b69bcebb316fde8de0924c4730fbeba59b9273234ec91bbce97c1b71bcae2a05a6eb0621b75b9b7a450f94667fdd7ab33a70dd7a8bd4555799d2ee9e2d6169829fd355bb653c2dbcd9b6965adadddd76fc62dbeeb576dbb67bedb65d6bb78dbbdb1d95609c3d6720e69059e6b82a1508559d409f561a8ee32e777d34ee660e5257a20f1aebe54c0a9e35a1878f0750eb44f09b30656a4ec0eed96f010e0053a8b4f6b4218d0940bebd0699a141be6b49c473be90ca34536692619b35afbd97bb9cb5d6da3b49da3d25c137c75d3ac337e744f0df29b371dc68b791358f38e3de5a2b10623633ca9c482fc090182541a22fba4379680ff561c18566955489168cb098715d55f7aa24d562442e276dc8036e6666c81db1257307497ed3dc34eb4bd596933673d5412030c44e72923dfb1286a76fad1dad7da5a06d0af4ede853c6ddbe8670a2698f169bf2a8b3bbc5692b1ba5a352946b4b519a35a55965098ca795a2d458167c0cf44b72be1dc929d342452e4b4425a25251fdd211e5e195d261efb53bc894bd24c8e868e19bb261efb5d65adbd1d4563706b1944ef2fa7ddcf8de5bb113c17fbd5a7cfdd2a693bc5deb56b7ae9b5806299cad48e7edd3d3895376081f34432a3706a9abcd8a8fe707b447db7bad0f1a6badb55e2afd74f9d9b42584521e1b16bd75b3e56d88393b49ea97da293cdaaee3bbafea5edbdddddddddddd7e2d6d4a299d4a36b7e9d9db38bbbde280ca0c6b5307dcf7d9f1a484e3b815349e64e33c6dfbaa6a505aa7bdd75a6bed2c7227c9594443135ec946fc27f63cadcf6bedf54173039c6da8b40b170d8b9a748c9100000000014315003020100a86c462d180449265d90714000b86984e64481a4a84498ee3280a32c61863100084006208013053431833d3ef907a259df4a3eba1fa329c30137c03b36b261f4eb5143f74b4a0299149485213ecc213724776ec80ffe76e35a1db3aa42c42fc031a03392a63a09270844c8c94e0c72b9142843c6529dc318dd255be155edda244084d1f0860cdb2b7fe9a5e9e8fcdafb8c8ee5cea8910a1cd13848b7b146ec326982576a28b7bb9e708852eacb1083113484a7d2bfd020a12a16c36c513a1afd8271812c89522fe26a3e811b07f7cd0e3275040b2b2114acdbf8c17c07f38ce8a2294955ba278ce81ce45ccc14e33582e5067edbf6648b1af8c508c36133276cb9bcea9b3057db2a51db79fc3ccee5e63fade6b8c9017e64c00a989ccfe1d22e4cf58285657b4a403cae717c4dc1fe034fb86e6cb7e3e63d30410e1fc8c38a0f555f054901440acaae40ea00d1d34dd71928884de56762cf3ef4c6c38ff19f58443393c0f07cf58bfe8798c4a7907e04ee01ce12dacd5f0143a3149a40b3951dcded9723f867beff3b416a0dcfb5d4a1aa057a62817e0047e9ce7da3983b7bca7ff22f9bd0fc26fba04044ef879cf8b1f940c52a6e5fad98d805b94689049d3958ccabf7f37f0408a3715075fffeffed56d9525cde2789b3d3df9fa6e7f0ace615477e775ec8bd5486b950351310718409cdac4c43226049a5a9fe0c14f39635becf3d9360d353159f505d9d532a729be17e184e59681e1032a7da9d2d9388be66a15244fe5a96af4f65d04cc702d9d546ef48908976cc9cfdc7a8574009a881594ce4ebf1c87b93b2ec520d0a5a780ba9c3b80e51e1c23a0605262ca4d5b7575bc6fe03413618f5c08731d116d80487c1925decc206d84b2a006988c89d949f7baea17414829818a05ded5170b457fb3077c6c72626dcf2fc35bef9818d47174018c857725d8cd68f0d9826e43f3e00e9450e903457447b1d7dcf40edb9b580530666e36246ef873c8d381aaa6936ee3549fad3cca2ce3b9021b66041e6bc318384d8031425478d2f8d348cfe9cbea41fb538d0ccbed94a67f4514985697218be6e29f0ebbd2c2b45635d0c87adf20fed1d5048e788b7884b94d682bb0a719077d8e442773223447bf5ab26f67e52ceb56998f535e22ced995a09a2650acebdcd124afa18a26dbca461dc4dd0bc54ea8d0601743e45bb010b06f993e5336a582c9b2c936dab2f99c7ca92a6a3f73f7e6b6753a4c5eca5458797dd23164b9fd4881d144e121e4c69d0e1772db036985589702e1dbd120906f8335eb116568ac3ea71f5642b4afb69386e3f6a16e912382ce74ca040e37f55fb2642b258afcc75d496e4ed81cee94b23ae340517b69bc79ce600387813442815a05b3b6ad16f65e35e5a77148241aa71f70ff24cfdefd5a099ceee8577a2b25f6a65766101a0d2ef0f2fb20fcb025482cd6f1112d0f25047e03a38f1c918b7da79e2945820baf953cfc481035d7370a984a13b92164266cc77d55c5b271d9fe507f14c6002928ca6f901d3fcf3d5f3bb60975671c84bdb68361ad449fd8c80949accddb79517fb0059c96f87977bb3dab6abe02e8b73e3b59de7dbdc5b487b4d5c3307542696a0bb10e573eb58052a587c7170192cbbf47335cfc93042bf953246d332a0f434353dede919231bfcbf71e8864258412a2ef44cb2a8d70241a82c577c74514bd7f8b2959f984820ae5b82bad509941891ddb06b1f8c9cdc8d1dd2e6f54cfb9e0e2ff28e4758b679f3520b62d8ed0990afc6375869dbe61664e9fe49e818d52740bd5d1d93c14bb26b454bc72190cfc25d6c02b6ea94de7ad44161e32a2539499b06831cb5f215f54a0f0ad28117af44d12e42ba3bf43ebb12bca9fd7b9f9b6c68d9b5def5735bb8f9d8ed42a85dedf10bfb1dcac7e2401ef7d06fd57c61645a68a7fb344c2c45db2b398a49e81fba1baf315566ee0416dfc9fc8801ed437861f57d4189af1118a3adc22073c1a2f1cccf3e1bce93196e4ee55da5e9dd43bcf64fccf14a1ccfd29b23ac1e1daf89c7131b095e002041878ca85665e3b9c570c370819a7bace502e8fc0c2a69cad32679a63d7e27d8351f6761fe2a45163ba33cad94d3ecffc5facced308a8a2077e5ed52e0038e318d2fbee8596b4ff048051f41e54097a168b55f989ec6f8e73e3ec0fb4633704b9810526e235fee15b14b45622ef40691b9ac818b6c2c5b0c64c11c2dcf0109f4382db34257bd086100a64d1948df5517d28b5002f544ae6bd6099fc7e682251dab60242399622e8170b142e08456196586b49419e3115c1f949db6886531e49a5075b3951ffea46302f3dac99f20674649803a38763b78d3a9335391061dd461af86cc38069782f070a7178e77a939e1436d0d2f9b52ebad23d6519d4c37d0f67390012ff4fddff83b27cc19a0702faf78eb04bf2cc37b5b8ae04c2dc7043a07be45b9d6fc51fd6e87a596b9d574569b5645e2ca62cea61b902e9718473796bdbbf9af5ebb2127b189af0c7eddf8b7863c9d662bffad4048c0d402f788667ed89c49df23eb970a6a8badc60f8556d98417a170f56f4c79adf70d56173a186e92fda810b9178335ba9c35de821ce480260db99e7a95eb285acac2b9fcdb0df38e509572f79ad26f6f1406ed52897a10b380514162a3758c534d1014d626b6601f62a09e05a465babf67cc40f40a53eb129beb96a6c7425a63c123e3039100803bb4311e26fa10c57ffe393ec73521b900c71901990101b1e020d11d164459aa50b37bac294e420f6e8c10481032093554f9d886a839deaaf152aeb04b39588a1c8557ac0d24e2231fd7714426af7d914cdcc853a863c2fad4dae5ad4cca5dde7ef6bd0d295563c6561b75ab92deaa1e854be72085a8e83489fd8970d615293fdb10804c76ae2aef8cf1838f179cece0bb4cec7be6463791ec176864d040e3da5bee5a809e88c2a5bc20222a80f3b9d621f0ec4eb612f749a90416bbcb383e3992588cb052733345c07ea046c41beea34e5dc01aa2600b34bb080616926deef79209df0e8b25292673d3cf381e338d8cf13f05620f64015df347669df53b6a9691fd65f156f1148e7fedb63a9d0052d8d354c62fd755f078aed8e9bef45a7dfe5d398544486aeca5fb9a2b9dd142b7f95e9529b1e5983cc708c8e31ffefcd7a968523fc5c1d48d6409fc8821d3e032e190a133c1be3843df4e33afe8580c2161c578f708dc7900677bfecfaa943e1a82b53d3e8c71ddf71603eeb7da882a0aca5f12376dc589e23b746bf7400ccb8ab64ac2818bf9d7e79bb686775d0cbf65d5e9f21c4a9855c0760329cde4865b69b4c654a5646595a9f5e05ec7a43ec48c08812e1f448d02a9d210f9d280794801689dc118f5413e22f9d5d453835f8d4c23a932534ba99accf6d1dc8fcc85d3ef77fe872548ebff46416bddf47c58ee9067e38a125696de21b2d01be1b71711c4a2b99db9ab380e1c6009927b499fb9b217018edf70bc292943074b80d1324fd7bdbee6d9e50572a531adc9db9848efb65e195bc9e6434daa24d0097948ab7682d931027663114240f53e620f08707d4ef6ae016cd125441e1963ceed056ea9e851082a159ee8cd59b8bc89c594e778821c6554f6a87269c5eaa99620b9788b075c6acbaa2d6811676157945d97decfa8eecc83da50555f7d3ce9de12de30a1b6089fb6de334ab80e0b19e8874f709b55cf8a709c1c6c2e8a8e0dab753d3ba978279daa90700bbf54e394230a4ae4e985f263b0549c7985d018ec00c02a6af81b2b8cabb35fe484f89174b8f2c482cb10f4308ae4ea354e3512cdd9c70115c77b1016f1422158ab9cfdcce479e11f476d28cc9c2653fa1d73d8e18da3e0b04685a9d4ca015eeb2ceab0482ed57bc2a99d1202fa8e819d5f31db5be2c0777514ff982cd663264d0ed7e36cad0ac7305c3b5b906f1e68a31096306e6842936079857e4725469a34aa78789f69d0ef88c5432c6a9c9065a352429d1976108aff0b6463c8c8a85e088aeab34192ba9bae12324e7373a080c86ed7278cea0ac20662b8f3622e40245b9e8138660b4cc90c23e9e9ef27d3c44fefc60e1197092e0e2ab1196cf2d6d768ee4a373ba7c36b71d9dc7f19bb5d19476f37e813e647f16d0d9020e554b65675368d993bccdcc985df1f015b051a27de89e30b744fc13b8142e0ed8987f077d9d031b92e9847fa3e2f375f81cf3e54981b3fc60996b0ba4888e970109fe6c5a8b9bb67548e649349dc46840a5a13574ec08d8cf3b918cf2b2bd0f266ad7680da98e7422520f2d7d420bbfccbd06095886504aecedeed385ddd265ece151c4c110746872d8a7669b5e926f0f4b347331c60ba136c71ca9061b26599194bc51fe2870862c088ed43421d95195c673eb6fea3e5f0cbb7b99cf85e0e124ebd0f12ba531114ac693c0ece818447374a97dccf0c4def7cbcb5b30f751a0343136c41001c9f5770764b10c13a4d7953478f19fccb7bf79d665d60413bb44cb846f7ac19d51597f019d0bce1c641df4331e32956bb3da477028da0cabc35737fc9a7e15c056ece088841013a13771c0fe6b3d2cd0461c22724a04f9e3689436cfff06c1fec3c8a0d769b6ea65cf4327766fa742c9dc862ec8ec7a853d48e6a5739bf9591ba14f137be47d1e3ec43fc127224856d386ed5eb3fac47c845029da1b0b2ef7ec0ca36063d998da3760a8ac2342ec4a44b223055fdd6f93b0c52645afafa0e924089342408c4c05cad469fcb4ccd39f975a74f2540bcb746cbc9cab000b590da84cf879c87b8444fe50add3bd46b77774d949d055dd23cff55d6bcdb55c0f5b9eb5651feab019100eece720e15b09108f4403a27604d63047609e46e7dfc9bb26fe6c3f0cba38e048fcdd255c5102b9bfe19d54a6e2fd050ca9d50b4bcb7ffef5871690da0838baaa93cbca7963318f1529a54d7b149b3235707480aaec154aff57a20b9be817136d78f41782a2d3d514a3ae732dcf381c1b84003a9e2ef6347d854dff4142c7c3afd545cf57442c1a7c314c67cf0aa46a4cc765a8d8408ffe4f5e75876258b52e6d564d1481a7ebc031e902adf539d0b4eab1240086065a9d3d058e505b53d8f0260b0edc6bf62ed73fbf2c404f4daf119cee635a1883c7956609af556812ee75c372e53efc836f5f0c7c361ccce7020ac7219c68b58bd6412f70fd6e23ce95119530a8c114e3afd67dda7df57e4dc725bffaa2f75b41c2cc0d49aeb70f347ee76387412a67749940baa2d21a882f2e957e181231a1d1b76a2e2310e6a29bd6d34e9d102e84229c15b8f9e56207608cdb16ee9a94fbbc06103b02b6bb4e7299e48682276dbffd759ceaafad56a4a3b76f500a30313116eb1162939d7e1626ae38175aee74162e4ce57e4e55b89d7a910a9f819a52e407087ed9d6b7867ca2cfe5727847cc1c566962eb3b06548bf9ed7732ae74f49ba106396740baaf7e87cb84c5a600c100f77da17054681178e1777c14904d1c850dda2b146e880baa57abead63263d7f63261eb11311ad287f5e37a57ede313aa82f97236f942ddb3821b9ca0b7353ec3359b0bb3613f397395d7062897c34e030a336dbf1a75787ee906915d093fcf846c6de784c81a9b9dc9426249bec062683bcdf039612d928f266d01354cc4830c5a44a96e101e7401ef8944de86a3355dc8ff4ded5b66773c200803a94a25eb34c43872088b33c3b762431727ea3d4fd370a8f7442badfcf0e66760e9bcc2354056b5493bb15bc16cbc174dab919089d53f1785cc20d5b0b9963e14caec08d384609eef91172508da6d5338d005e095155296c5981ce746ebce9ed0731f77899589b98461426c5504feaac908b2f890ba36f325c0b571b547dda63c1e81c9f0310d62432f4d376abff10e4c2caa7ab795ebe5a3add97a8cee61f8ac91eb1dcd1af4ec384732409f32e8344c0f33e87a9019755a9bf035b7e7b3f5e58c5efc9829c384e374a7e504f32017107c1c6ee4e65ddacb742e4368a45b04dc31ced1900825d0af7848f5bb9dcbf5739fbd8c7a493d0d3c4068c18711b12981f6592064be2cb259ac5b54c9afb1353bd901c169d15d8d240a5af7a1248691d888444d58c6a48f6b4e626a55165cfbe147cc1a0d5dbf4525736e8e4eedd576ccfcbc6ea1f44f63f58046695cbb2b8b4d1e64bd702e816fdf18b91b58bba5657789d5e074649d99365c13f9039d8bb630b190eb2e3e934d01417656ab77ab077465b6a28871f73004cd26924ca954367e0d369faf99424e7299a76737875bf617011f0070420dde699b38c34cb656a57bb980d7f1e7fa378bcaaf1c2c4ec30848b389a6dfbd0ed99b17ff5ddf4c9679471855945181f26b922617555a2a2a7c2e375652e39a7f77bba78525429327401ca0fba5c7aac941ce677a0ca759547c6b606afc5bf7de7cba66c61d1212e78b0466ed0727fcfc0cb74fbcaf6442c4e84de6e605e5b39ec8fb64ce0dcd15fa67b97aecb6a22bf154f168cfb59ea6ee26b0da9ba6005ba23e3fd434336ac6609ee6b27460704c8b3f2ca3d4b0d76d2d02ac77818b0ad9379225da7838102dfee53005dbfd720e4953062eaf44f5ea541f32eb858861c227a832966beab2b457477a83cb5e1ae57d604177a5ff46579d67705c1a8eb6ce47ab42ba074480e42a155960c759b789a9316a7f948142aa092156ff4109baa23b62eaa2bdcbabd7456480d379fb3f2ffe73e0bf0592fe3823303dcf3e22f26af52489fa0755c58fb8b81fc4480d28bab747afa0c41e1f28f8637e84c477926b615689f0be84d17a26772feaad17322bb356e905dde165dd7bf636de18472916c013f0c41d03e3fb83475af4f75ff805f3666f7c4b5059f19cfde5b470262aee344ed42d88306b612bd57826dece576d068fbb3fdfa0ea302879d4cdef37b32683e65644ae7931ec44c36d7c5277a09340dcdb3095dbabb7e3d52170d0a8da6051fbb2e2b3b0c3ba1fe8b44b99855982642f0fcf7360be4e149e90ac83670131809cfa465194323be843fcfa58ade59553c9572d9429ecf0e52983d1c2da8939121fb1f696f356567553214adbec86ca6193a0626788694c6d11655664518930cf69afbf3ae9760380c4f446add21a10a2a9fb6461524653d8aade0860946b6935c993a46b4710da8dfee5b2ed51a71b1a47fc8271d9f7c12299c7aa3379f9a0276adffa43065af4d5f0e69cff337a6beb45315db71cb1942a22f9f2a8a3eb509382663f82ee02a0f21c171596e0375abf7724ad22062611d0126d8dc128fed5b6a0de068f216b5e12ef4b868002d0cbf19826362905584bd9b8d49e88519e6759fdb1bcca6a2e00d2f263b0acbd3a1eff4613bb8b480e31911e0dfea513e73bb70389222182f49f984651188a002ae8bb2ce0adeb89b0b25e3d9162a1aef1bab19227042609d3ce98ccfa693d3da17bb8b05ebdeb79d8e1f774231e2e05b4f6eb4595fcb68527fa0ec9e7bda28012c58cb5a737e2759390f9a72adf6ec903bd43f3f05c5540a9625cd5ab977a1f2eb4474f7a0f7fabeb8178b773c04efb30c4b06387ba075a9147af9579c606e1c1e681681a300f3ef6b671a42d890a7a8269ab32537523354fdcacc36fe7b6b6b7a7551d613d7839f5f31fd4cd9d836b989a20d558d22bb36f35adc78a47fd9cdcb5e520b7d2f7c33bf49acfb4a9e1a42644e74523ebfb70c74157780df24324272a3250e91a726d6ce4ba8f1ab9f6d10850f3e86ff10388b9303a2ab4fb724b8dcdc722fa909e6be5608aead85778ea8ec7956a36364e6cbe321197c14112c0589a3901600e72baa6ab7a08baf3edf9492fbda71e29ac603c9cd214abe2eab342841b23f0a8721affaf9aff2b1f58f1df28b2d73782d2702284aebc8dee3a88264196df3040a996a6c010cba141fda028011bb469425d3fafa10f60c0b2ac264d05605b0edde106cd5ccb639cc47b3ff703684aff11b872d414affd0a85a1120b31c59130c578a3809deb15aafb64bd10c010e976d276e8a8e37e3ff2c656b46a1fbda8cebf5af300fd27612d4f53e2594aa16ec5d887333d81ba1b8d45b9c6cdfd827bf477ec62df935f0174a863a1cd2f5ccec30e28f5cdb1f9c9548f18592de0732f00b7d60b78802e5b0c053483deee745dc6b8e186ca1091360b6cf96d3bd817879950f0aef7f280bb2ebc57f9b4d0e0c494a7292b5ad27f1074944d6c9e2ae44c303a3b8f41b51af4372fb6c357032488e9cecb06efe9b70b00b31235d331d63eda942b9400dba12965ecb93821281aaf35e90541dd3e411db005c5a106aa8ce1745a022e5bf5733b598dc2f4c7e5117bf1126e8d2d5fd8b938f86e8898ea3089b5020dcdc0b638677de5f9504908dcdde7f6795492634356ac599c9e7142e32c1893a4ab3a00f3f6f2cab88fb85b6aa02ee4dc7548914e1768a5801b6c9400ccf469069c2f5550d08dc7c8dd4e9e509af70d6577942f68f9e86c10744657f034fd07e7a929a4a9809007d5566afcf11122f506539ee4d0822c6705c328a48ccb16adf4c8531044231d8c3dd1c4bcc50e20a064af4efc709690aef1e570d363cde195c12d36101cae724667e20b3c3570b03d91134b090e083129b9815455d8e4046f39b1481dd290e5084feb7a4ed5499fe7af46e196b2a883dcca20c43c8119b8588ff223ec1c3e99d6667583cf09da9959830bdbd23a6149d0028606bd17b4ba6718502bb49b5e419ae42c2af83774b9cab987c9caf252734b14a4d51e1356903e0727a8abe67b9b9aca92bc10e1712926fa0da96b0aede2f1fa22eda345505657e669492a4ae8872c0d15712db39fb6f1b21538aae45b163c87de1377cf4f815325ff66c92bb4529ca2b9f0db3ef717753fed43645a39cf1205b8df38445742a45111d3b2fbdf16215b4a799628ce7d717a882f49af63afe69b19685a8dabed85aad82d18f4292ec0b98c220b8d380dc84b93d539b6aa022345011e171a44170543d2c4a4a030c5215d84cc966e2016321f56406cc0fc7363323160ca5277c04465706f784ebc9a78730a6cc9823a9b6cacf4accbe1c11dce0c871abeb45cb61aaeea44a5dbe68d93553fa03cac0353f59e7076d5458e2f711ec59c8108b2981129ca56aa210e5eba45bfe622f5bc26d7a99df324588563708b8c19b3769eeb1a98513a0aaa7fc132193753e8b759dcd32dda8ca1fe2464b7f85f077fc2724678b8403abfe33c1334be51430c403465596d02e989545a4f631e41a982ca0bd4edb3015fb2a517384bd96aa4836d5681ac8c0afe75a43b40997249078213a538ee214b748742255b47793f3041b8e28555b2b134b86f2ec8a8e9dab3cffaecf50e2feb1cc259467ba7238f6ca69b9fae9864042525da858010f3edcd86f9833d855245455ddd8965f1be4f41b71ce2f0ad5e678592589ce65c76df27f63daa62700379c7514b4553bf04b425ff50fba150cdc07cc7afdc4d8132f154bf20e83456c2f6ebc1295e3bc83e3326092fd945051a0863f8c97352d9cb6bb7c788bbae282cd849b703609e1fcbaa6cf7b05bdec504128092b1ac13064001664b12eac896212230e7efea7dd1b15770d911c90fd5bc98ec23b8db28b8a1e325d5dddc8e0cf9b4e1b3ef2e22378f6df9d1f3f0f16035ecbbd83f929ae75201005762b7febf4973736a8782a3d6e586f44c875260932ee65fd3480a1e04f13b01dd419e9da5635185d1529337d58bc97f0540b3082e807612c027b9ef41e1e774bc409943d66abb966621c4535d42619bff11a364d3e6c02013d075b8c2e3ee546204227a3768bafebcbb3d196fb44da9fda64c53d0088167cbb7fdb30dd138afb812d218430f386d8859447c6f6eeb2470139b4326b31d66bd49fbf7ab3d63c5e61bbcacfdf6e03fa26aae699bf9bee06ce7a824eff7c8a80450286abfccdc9e54e000ccd9bb878286f454ca907413937569308689a541718078a2a0f899dcd2da7e69c27a4641c016a082d6ccdee9226aad0974259d207e20fc30553c1b0eb3d31a1ecc9d0afb83c4690d24cbd641b1aca44ec5a836f5f1e0688e57c015a7784730f63660f4eafa832c29d435466828a6f192fb0b94f34bb980e347ad7ec26245e974e875057c226c7ce7737571f7bb2d46a694f12c555cb7c552f371beb666d8b419832d11c9f8261d9de261639c8affdea3467e360eb01c849d86a35fdc98a4cab963df26d8a55ef476ec4f50452d14ec20640a5e1c5cb67147ca32ed8d6ce627b7fde0afd6137ee601aa4e96ba4be7578183d04b075569bf2bcca4e45babda2aad519aac039fc09e68705950d2361421f6c5ae18d1ed3abdbb566d98b7399fb1988edb137b86d3e5ef4c50c2896a62bd4faa4bd58f0596ce23bcb9cd28d880a9da1805d2172f7994ec6257edf40bb82a110cead3f036514255ec9653f2e4b94d890a830d40f2fd678044bd509a40d8e6cee8daed5f50d8a27d4baf097cb84a122f6840a303b01ae5916d54de53482bd6399a8e4e70057b1546c1d0db534be522cefc32910c0456ff300a6443b9a5e1d9935f5e26f790f5e0a4d33dba63b0595279572b52babe388a2112200efe74139e90ba94695fbdee610556174ad4c34a3ce36688b738fa9d7590043fd519ffafda8d6a03cf7253382035fe43490adb65a27090ca3f0ed02f2d7d9738ab1cd0c2e259a7a3b5a0080cc479560673e3ecb3707e1677dfb8ff0863c61cd6d9181652deedb16c7e2a544f7daec55e48ab1a44755f516df4abf64da053c3ab731e289786af4414b6da340c5c4cafa55a41aa3f3a98c9228c662bcc733e30744cf849e85b5883a89dd4f8f0551f7f8980f3ce323d97a1cde70601b2742db7bccefff20fba31382d37994754a2818f44a4bb2de0d27080f20122669df3cc3cbc90c4d69fe451436c72aa402a3e0358e0670a4a90d087c84b6e5fd030f16c53f3c48a645393e7429a3c18ce9c41e5ae49a8d72c9caf9986b2ba916c79de7bb31d24ce9c0786f1ee19fc2ff0cc208bfba44557d0292c15dd48f9ebb0c5238e9c3f79433fdc24427c8097d788bbe39e4c11e42edc9a4c6069fefabee93a9ebe272c016826b9321f198c22c297c3739dc8a9ea669c2d0f1e295109f159e2211ed0b51d4a1e397bc430f10f76e8cb35e1bd2ca2c0c7d40ffca0883888cac6bde52039569e5cb294e245d449b780a5194b6f2ef1be0f031a1e898de7f8569d5424364a8c243386aa840cf241afd98ffab159a462c27bc3580b68ce1577690e32a2bcb710d2988c09fba816066d21dda80235809a71fd8f7e09514378d28c31ab4372b4cd5eebbfc35fc9438048dcc7a2e5246e5b96d9ea4ee1080f1448b392eeba4b78f87560ba7ef7a45db783f5b7707a27f338e9d4f8bee66c679cf8de87234bcf855a7c96c006d4cf03d41aedd08f73b11014f37f855aa42650ec3c837617115b6e517c96761afaff0d5e656ff04a8d7078abf2036dcf28006298a9fa79a4d507708403ecc29339ed8c6ad733d3e99c84ae43f15b78fb19fa90b86c45f6bde6fb5e665e5be013c9c957992722e40d32d5f22f51bf521d7ecd1f9ed8081193e52b5d9ed627b5c3d9ea1033ede0c27530876c2ae5d238a31a097a380dbd5a702aa510c8a09270ac5c14aad79c1026706dbc08b82746299f236ce0576719d61c6db948c39444b328aea424f66880625f1569d668c4d0afa99f9ee75cc0a00c470431fd48c8b00c73906b26508e75e1536f6c0d47951b2bc3482ff38e314a994a6d1514d1518f9361b1eeb65f62a7fd732d120749e47bf21fde9810e390436c25d9174fd005aa6bf3b71613474e074d6c7b7fc6f8eb28b8c7e03d4a178c1ce4bf0ae5493eb2f64b3d412394450e28c4f28c1bd7bd900546e9f545076a014231ac3bb38466725bd7fcc4540b11a459c778e682030994a3f0ed9cb8ee06e34c643a0d219d233625f0538722724e70caf9a042791f1d68b251799467c6691792b18ed169e00d6e2d41c1a7d14d93671bc60ba5cc5cbfd91d6386b1360764e312554b282a3081f65331ab24ba30848e146bc379570d667be3531d7ea3a512e666c5fe66f1c920b441507aba75253aa9a113f72adbf1f74aac49dd8b357ccc5beecb3c1209a1e33cca3fbb34b092983644343dd93da02df194fc6524ee1bc76f5be5800f317dd9556abae917e3a7d457927e09b69c02fc157510175c75fe6253dbb170dd5642f5e7f65dd76ef7359f97d39bfae2c29f69df5ca1988310bdb3458fc23359107cdf92afe6ce3a1062173e0e6db87b36c70e0ffa05e5c8347aa03fae599c372c402083543d671baef9053f2544ee4fed5c6b062ca235e7360539473060ba5a14d717099a936c0a472226e76a38adcadc91b015e469b25c6427f66c2f22dbc9df520ccf7df5e38c51af74f3acf5e1ebd57dad22ed3d66656c837b9f356462a0d09a85eeb75fbd1fbbc3333a1807daa0ea56d0d1e1ef4cc1a29ff0ae750d8412160fe95fe86865c9d849647f1afe6190e54ba5e2713ac78a722bc11ba976cd3da72c2374e2cedc3231dde1c03444c895561e9a080286ec2c005a82841881ffc043a78d33befa9936eff2a85b848e0bf93443993598438588293a77e3e6cae179c108e2a12b49b187868648a73648e87aa804cf0c061d06a0b425b19d0617d34d900120a1ab40c49938ebf7666d92749871f71a6190496c5cc5044ecb893199be4ce0c1458b267a4aefff1d5bbc40d04260baaa7b53c852afe065abb9d170ac0029d927fef697f507c26660e5c50adaf552850486af6529eaa12920eb33489971602356b5fc3dd4f325dff5d760c3a8a1efc54deaf31abda99e96e223da1a9bb69a9fba2ce6f58aa95bfd77458ab0ecbf536fddfeac7a6c62cecefacbd1b475640d1d66aa99cd5686d3864a9dded98724358fe84c6642faad6f16c5c93773fc2e0f3674ac7804d5474b1c7c4dda6b1d4d2d30fad9bb58293a162383a5e82d09f04f751a7bb6aa75dd5f11972a58bd76fba46bc0296fd0b14d1bfef1b8da2e1642330b99daffb1ee592c70647004ac863575558db2e34a7ed24fb856d25bebb95d2bd0db5afa3fec44a6c25efd743585ce6edea054f24b181fd1a0f087cbb028ab0b0c1c0a542acc248306110750cacc04f0a47bba0e4bcda9c53c07d286461626d642cd5c7240ba7ab50db1fc7ac909cd19a3e51fb1e8c3d7a7c5e87ff9977d295925336f3197b24a8edf23be3c6f4ca55521112bcbbf1b7438ec27b7eccb85f76fedab6839f50402ac92a27209223d0cbdcbc1eb1b9387a83c6c6b81a70b9a9548cd18aeccab33f2cc8a1aa4d3d10a1973d4ca11de630faf161d5445c8a66672d2f0a66e4234ac5a48f89aa5e8128b323df85a699d20b9954a28008f7f6b84ccbf7adc4cc5a3643b5800ac2d3a3a594dd7b659001cec527a2112ca0aeef79262012c3ba75f40bf029c658d08acf9b6d7ce8994d4f446e4056b758f6640052a3844538770d84c9f125877313f4dae0d2222448f7eae4c4304510ae94545d188b94280f70fb9b14cf32a892401106b80a17fb1d37a89d6a4d77f0f70379394203e41b5abccfe6829cb66ee2127652d08ca88bd0ab836cd385dc0623703472242cb6c1a647f5ff7caf4a06673df93811e81a1d9574ca5092feef56d21b1b715f68951147bda370a65e4444475be6b6ef63db522c9b7ce435a326133c24fcf4ed5a3e1d3d9e88905d101a58f5fdbf98f113e0f43d82efd65485d7bf1e92c06aba9fd26254f367c8e956f219091da42c73498a1718c4c6914881e0004d208c73934876150e535845ec64b2dcd292acfc45512194fe9e0e0a4247402db336bf6a03812ee2b929e4583a1b7b765bbe0ce4faced919c957a8b5b1e91901e0ccf939c985e50af95525c5205bb83fbb124726054a6e684b86b6ec5002209b27ce337e5f4fae75402168f719b6b51e5f480a98900e0ea51e0331163a9ec0015126c217a6575c522b3b14eec642572e249790c539bc7ba2ef9d6358ad6baab2d02dd7f351e17f138b72644d3177053782e7e8c5d955cb6755c93cdaac5a8083e0b832c2bcafd932a96c8f2fb100de0e51f3e5284e1bd56ffd0a58b7f6a5988e407368a73fc01a13bdd081501d7b1cc775dc829dca0a15d037bf4c4019d0cd312c36a2f1dc4a1777b865b65cd0ab407530100c9144ffa44d4bace352c5d5c631f501cc363515bd621efd9d8718a81656f52416a19bdee5a2a5e3911f4511495aa3f22742167f00b302034aa3932c8bc1b86444a81791fdaf93abeef1709e1fac3612471c893b29d0e681a750bbdd49e9513bdd1dd4d216a90d6373500cba78c1d5300e74b328406b1eab68c8fd86e4f4ba335917b71da8e28a08aa7b035ebdf843694113f5b7bc487d6f8461828892cf4987166451ff6de02b2fed1dbef7e86a037abd35dbf064bf64a77a57676029750404563a281f583e6e67ced191a5789ce7c611de493d421fc5ece3f610aff3e92ecd53a9817469277fdaf0acf005597a46b782ca55d5d1be76a0cbcaa4ad348ebe5d2c074d04cafb26ce229e66d3cbef17a677313de2503f59fed0c3c3f60c85a154a8653c63b98b52bce24e0b56a4a2f93e71d685b8570b15359a23e958b567fd754ad8b265da0f88eb06e52a7e358ec09292d6b483c6e10308e90b53344cf781a6261bfc2755050d38dcc1c79958184ce41d5292e6f584a613caaf1e6585f330b42700dbbf26736e99a445899edcd33137d6ebbcf72054f3b040b6ba579cd52b45a5bf91f6eabaf180803606e502078e7f4b6a51708e1192303c09cc8d872efa97c17b21723cd5764b26fd6510d57a0a7cc7d86b6b82aa23ad742f666557ca1277d21befe911e10396de47db8e39905a36a51971d2147d4348b30f8c9ade74521167a1e43ccca56b6468230238ef09da30e34cbfbb0c95c350abb3b57e171e712ce050c6a6c6c6733b2e7a78eef6e4149ae7b1baa8d396830b36953f73ab420a5e0b04c064249b0ebc6aa9aa5ab01c00aa2d5cf74d59a41e71444edf3b36a0d23ea19f388542a793b42564e6ef3381263ddae08a636fbb768fd11da2dd19ee8e885476d22de01772154cf9b060b608a91b0ca73361d68cbdfdb314e810c2172c9127f935b444ba4625e9e9ddd7a89227f8698544b03ae70e0481cda59f46cce2d2ff6a359e3963091ca79551c2d6d4f315d77cd203d46e57aa641e31e91c1dac070e589ef77bf094031b528061c425a87c6875dabb0225d126c3719b9a35cf1be1b3a0c5d7ed1f9152fb8580395b4a52fe660c38d2c61eb18ac0a03484a65c711cab46a271c965fc87c996e5e16348e80d423bb2b8823ab954cfeee1c44cdd01c84ca3e4705508af0ebfe3c0285d08f82a6414291fb21287ecbbd8a9152eb75f04a59a07f23269182f5e90a306fa0f44feb9cbdfdaf92eb6d90e730b2e6fb49b8199f61959e4989df35456feb31a732988663f4328b53eee5c99869c6ce4ab69af4d2fe47169ff07a7de3502b600a064b209d65bbf986a526640f948c4f4ad462be9294bdec90476660079e4b52a7c2ffc4fdceeff1b9d4aa12887be89896d9ca46b5468502418c63034ff222f122021adea3269b4cf08003fa3141c434e940fb1ee8ea2ea69f942a4538baca3f75171888af3bc5696df9710061f5ceacef7251746046c4304b6e92cef19c6e2517c5061fcb9142c4a6dc288ee730739b9d4ec31983bc84a4e0203617e7e2db003d131dca7dfd8f59537638a0d1d600df866f8a7af827c41aa453c48e6d0e33da75c69ebd4a05ca84811716f3a59ae976d880ee5ff38e98361532f06143ccdcdd7efe17160a574885830da67a6e77732bcedd9331f97c70969a8c01348fc9936030564a64ffed72af7bb3e6f9ee006909ef98d3fdb7ca0601711614ac35f0ae6d3a648ce1d118714a87557090984575e599aafbbb430be565ce747c9ba440dde9ec52c8b7ea8cf87090df00c1ad7b0e7e4db2a8fbc1d0a1665d5701f42477916a0743f4916226955cef0eb0b2f1d574a2821ce920e3a0010a3ee8cbeb9d0cc47f09c06fb2593fe957831c384b5406644a27fa560c09d6f12d3580e3f7b22eab085b80e704bf5a49f843c060c3d0d81c5e8240735307455a54a57642e18e98a450404c7a77e335741eee359d398274b141b7f2e7bfa7eb609194c58e341183d4b257eb2e4969d7c356b7caed6f08f0aa56171eae012678a900ddb7a769b1cc2f4aeb6a8fb1ca18c37c5601ff0182edd29fb570abf2b00d9be0041ace92c9562aa0dce70ad86857dcc701e0433053a87b100d5658e3e34e1fbca0627755330f019b6c9f02090660a50e24e3e68a522f79435ded827228dddaa500edd4fc9ff848cd905ad57e3e2f2b1cec1c511fd7cfa366b682ff1989382ec26eab72f95ee70f9a01deb92bde46f887175ca7dcfa7d1d82cc799464b34e94263942b12fa64eb41519f18ed378c5e5b94b80e20692e10f4aa83bd2b35eb6c712370b00d3dbc71423317728a07a7acc2eb0b911a307e33cfe55624a170bdde80eccc7eee2a648cbf8b78d787a1625404c66c18a4904b115cbe233c486c80baa0c17115c3b450ed8be75e2f5d7226fc9a8a18cc16a2a4a2261ee0dd024ea4bca453b2922c57bf657379d0f531328ab8b367f8f197d7e9d7452204bdd70c46b24f9f920b7d20be6364c6d70f9c689e825c080891c24365e44b03bea24b6adddc90999f1908efc8cb2c755492ba1008b2b4aa0523995156371b11c597f21aa9688090d604935181d82bc66f329c515b874060cd5dd7ec0e9c685d58d5b6a3e37b7d6e5090c538ffb1185a74d926c7cb14ab1794bc93d9a439ea522db598bde96b322202f1edd6ab1d0b130588f54c180bc6d4fcd3a682311fa8c520e2356b200498c5c31aea0501a5c01f9a4aa40afa4b7f3f6c6d385758a64b26e428d8d117c07caa511127f9bd4f22f198bc46d242a08f7abeba7d197d8db573dc22542424c358e843db44f79a284477d869e78f853a621796141ff0b780e88fdfb679dc4b873cbe0a484d62ca135e3faa535c0185c9c08f65413c445e9171f0967a8a83272056793d81a891f786506dfe1e9d229b922c5aaad948abe267d74183a510c746871ae142d725db0b8bf1d45b09198e78a6b364bb97ddab2cfd49dad03ed906994a7a407548198f879fb4ae045da9bcd79a493f46adeffc801b60f345bea921376f8ec29490b7a2af94cac4674b622be6996ce27dd9432bbe85809cbd6f9ad23cfaba7501fcef1091ef3669176c365360f4fc9d1a015269236207f88ad3661041a72d7980cd3d3fac5b37229bf2734523283e28b89ba4a55984218b313ea75c20fb3421547fecb7ef7f96629a13edbb9d55d755ff8e6a46815f7d92205d6a94f740b30d836f52a15baf529af1f72d9b03a5593ae045b00d0edc179732bd60ba3dfea40eefb0612a19cdfca72405f4a15cdfdcd190b6517ae6abee7abf0ea2111548f52f17c310728b12069b318e065d8e3fd537307934cae9bccbed9b0b4fe0d969a0c25a9a4c9eec13f9d3b61f5a205ed8f2e667a710f4d8f10a8e40048cfd6ce65330a2307282c2b18ef3d51f6f9c7c7659e9a217aeab97c1721871b801e8f971a4e15330bfe6da5a1ef0419540e73d0bc95dd8d581e8785ddf0b50ebe9f410337c0baacb4d85ede9b0b4033abd1605c2c841bf2248ee154c405677e57a7a5bba810777885a1d148ae3f03a7d64c304d681f34b5a48c81f829e326840c5ba465b86d82ff99dc35362e5c22db9940690cb327a071ae2293c6a2945522f09c67a4c1cda4543fabb3256f9f9e2babe76d8edf46cd346319c80b821cb1f282f27c25d9bfd8d1eabd3ac2d8abfb4b621f34f32e0a86ee194984e25b1ac185d448386fef7a036cf7d58eb3cefbbdc0e0acb38bc8f35e314fb2e2b4ce62cb89d8994c4617d83ce215f6f62622b505af3530a72bc5fb243a9e1af40ebec3a2b7ba22c583d5b46c8921260f87857397b889c6df1ccca7ce90588d899fb83285231ea417bbc8d57fe18ae1ccf09c7d766c2a614f6fb2a90fdc8fd931c095419f756ae5bdc3146b9e612d4a9de6ad56b33d813cc2d10b51bd35df39d6caac81a879d30feffa6ca5262c6aae0cdd23df707c48d4d866ee9309281051b3583dbe655f1f30884a18106740a513fa81894049c1e327eecaf8eda4365acf6d328f40f53e818cffd0e712bf40eb5ea325149aae4d8522a0d3beea61221580333ae0f2243798708a85ab0be2ad052d8656e512e2479d16e081ba3caca4cacdbf5b1a008eefadc8306079c06189340a8f2afa25db0245a2247b3f42922a49f4870efa920d6c3bcc7b40dd40f661fe994f3828e3bc79cff397ec1ce3620d9f15cafb47cb20ab34b592dca37f68483811ff96c479ab55d40711e33de1a441f080f5da745da545199fc5864efb5e3b01728844029f0e1a33abf3b1a137caf01e823f0e2a0caf76563e0c29ae9181e9e7e2bdea7cdfc6f249ba810b93fa7f21b40e870ad61a4ce2f9250e02983eb0fc689ad4ff23fed5136ba0a08c8099e5812b0f414cacdb9ab88ab83c02d99d78b6de08de6691b52f3f53e31923fa0256f484200abb62e4c219f165afd9e855a17018b39efd295a42da5a4803ba2db5cd6ca1f735ab38864e738424b3125ca7a1246d749a57cdc591da39cdf5e76535c81c825f6732555f94118b69cd465438513d826946824b5919b40b0ca38d090702e3f97c04f53cde4ed8d2b65a73585d97bb2acf09e604211373e0684327b310717e4e0867e8b4b04377a0817bb3b406da4358bf46cce6e067c2979e22203259edd198b99713bcaf2e91b91926d60d2743c809c320aaee28c7473e14191f078cc4792469d9507a7b233253df34e140ba2f00682bd367014aeb3aaed9f579ad478f5cf1d0bcc56042cccb7f05e5ae102ad1b5a112dbeedac25d7990ff144dca705617f39610ecdc0deee596388e09343673fe8376dc9b13a3f3e08cbccc6c65813d5aef6b1f168d222a92dd9de41c9b79bfdfe97278ec59c510e70811790f5ebf70bf39da4e06362ccab28c25e5cdc4f7803df1f7ec5cd18c9f6361bf1188a9818c359407c1c168a4a976f87e83dd1a0728a7462faa9d978d315b602fab3d8d6f0376abfea10d3b04b5ea9ddbf0723708c6f71bef337aff4fd216d385679674d450288986e1496349fb4e2912402c6926c2ad64deb2860685467006fe5166e3a7cc4ab07b64dd87453742a8725c4642a6da9ddb695706e9bd17dcaee7cf1672c7f53480c968277081db18a8408c1bd0f0e77a89e6466ea15fc622cfae8803592b172174f80723a0bbb6bea91c3d4ce235595db86c22087c17cefbfe98cefbbe0bd7128e7e8680c9509d351f98125e8f29649b9f7fff1380626f547c2be4fdd4a112d1c5c77183fccab02f3fbba584443fd38a6b9ddec655ff199440e5b5c264080a0280c05885f47c005b6e12e7993b8663bb7ad96fd702181f7387758b89fc373e1bd09b33f5ddfdaddf4eb74ccc883d46b7f025d1e0b12b0c70acc6249ff5927db448d599af64dd80cb97e352821e9d764b0e63a352277d7f314fb108f1f20bb8057ed09bc54dcbef6f9d2a24348a646ebb089dbd3794b6d70d70322e175dd8dda9e4541f2c7bf45db834943c3d183ed3a8cbcbc9693c502b2b9adf6504c91938e06a128ffb8a20eac97e19c4e13e4990ae55a337e16e3f45524a42296463e196f116e476f28c1bc6909cc1686e49e408c97ebde69a095e7538e576583fd9b9ba2f39756efb0514466273b00df3f565c59e3e489d999018d30e79f3b5deb2c46280ed61050d4067f7ee414e398a722a6ce0c74ece563db3ff18f2e04038377a76ac028e04f5c2f6254dbcb758e0ac8cc00527b2afda7ad49560ed11b185fce5cfa264af0093ef62d4e7ccccfef27c83fecbde52131ac1a234bf25d841600b61181d9cf827f9808624f0e6780f14d8b9fb264325089c6f37f904291c97ac367d50a3cfacf016b947a44c0619e7c16787b3d274985fbf71fc151a6ebcc0ed6497922c2732a20a373d18dc98316c5e9cc819907c2cc97c806468b0c2f61104a73623477885d4d481c1bc84a12c1230bff69fb5ae602f30cdfed5b4045c96e2836916f2991035d2f0c61c9f3187fd0239ca903b824982e0846e7e18dc42ca11ae91004f59504518f85f12988dc31cee1a4d281f8acf8cbe864b064c6885d79eb9c9071a411f70eef02df3e6c3aaf1049aa345cc8f2301940b12a9f3f454e8a165ffd1527dc28ac4667307e65865d83dcc7087d3360304faf53084933c3f8a4dd408d3053def4813c7b68d0c44732f174743421231223bd965409d4f427cdea8212fd24fb84c0028135872f99ee0f046a488772bd247048d74b8470808c1c53211519d5ff24b0ecc1e6e919bdbf2531bcd739a30ee990318ec5781fdb8632320cdaed72567db064c8105476a0a1a4c6e7c8d40e0aaa980a47fb445c8564177af569562352a8cf1dc8762dfd5302cc0225f5ff6c5ab79090b655d8c5516e6cb7892701809e357cadb8a29bf1864819847307a36f1d87c7cd3adc71fa58869887a608dfdfb70164004b1c3c45507071d6d2728bf09c5273bd80b7d318bbeb0a2aee5e7b4829eca8c9e8cc8d6e5826e0a22afcb342a079a7047cd370769a7da5d44525537a6b5144108a7107edad0fe04a101f69aa49094b227611c6bf00711ed702ca1be09e27d54141e055383430ad0934d4a1aa0d77db051c099564a2e11a62ae0f3d57b1052886fb684b77375745b632ed29be33e7b62d936a0e0c6f7d53645b0658a5bf62b9414567e5e613279c7f79eaaaff070edd2409ebe03920081e055147a71b7fe52b05f79ca986704d0bf3b50d345275641368cc8e844984b27562b1e2e92e59632bb9ecba5b6990efc913082165427eacb899cd82725fd68ae13fa20caa1648404d7e97bd7709db889418fd660eaaa2e7232a713daa8e92035d8e88640467c05883e19e88b1e7bc90c73fb044baa584a1364fb811843215c224802f0999510feb20fe1baf12f2a62cf4ebd57d2ced2191000d93f6bcc6aacea6008ed6041781b48909186188100d65b40e208c2dca3d2c86b36483b8636393b19b6a5ea1343c1925c08beff82df568890fc561d94eabc0453f33c4bf87a0cf3d66cdc250079465bcfa5e4bb8f75e02382cee1c2cf747e00af478667030ea46ac578d74009527239d023c37bfcba7a5d54d75881e590f82694266d6c7599a808c68c9ef4f3b23607aa881ed616428720bab80c22d52676e1ee062ee8d5597450c69c83ddf6412650a4b89edbc466353d3d68ba3a858d26a6329eca99b5feb94cf4e36ff87acfacfa7f3ae3df40b4ab6b0fecc846a98ea023a891c5184178387677764605421347385c42ff83c8bf692dcad928d8f4f09bee8dfec1ac2a7066a5c61d1a9254aa35b294e2563f637ef3d4b6950eff90e2c366129f74885e4dbc1c7ac03a1ae323f892467928f51d2d17b43d6c63142eaf3fb317b97aac773e1fa05c9108e2fbec4f32e89ca95a119e3bb04343d7522bc37736f425f6fe2057ee5115d857c1fde002bc5c67ec60ed56cbe58a6fcd40f581f297bcbbbb2cce93990e3b4376b0a817300d185ec2a776c971130a47d088e59b39c04fd7afc577a3f8bc78cf743c48b99316189300d50b4810aa51341de5c1ccedef99029a235c2e40c494610ccda0131350fd35c77b34aa2eef5441f4cf5cd62ff575a777cbec7bcc8264f8110347d91e4da0b698e42427153f568efbc441a38f788ab5823f5f9e22496cf667c1cacb90d7bdf75f030a1b88e7e70f766c8c158c0fb40d7d23275cd19d5b6080937e216181ffc570eb0d1f83eeeb123342a2b6940ecb2263a79996b1e16f371d29eea281f7db8fc9c76e15f35fb9ec59c745a784751d4ab415295023e94a27c1b6677ea62818174284202905bea4f809c20282875be190497b5c535ea2eefc7b42d8e8a406d20f00ae0111b30ba37e0786c11ae2b43924af551ac5bf64fd3cbc8424a9f4aa0ff734fd4200c003d048a7d0f7c7e1ca63be7d1563e1f650c228a743ab157cbe3df9491ba80c0be65fc06738c933ac5dd226b8c7b3fd544e53468a6e36789d72e308f6e2a4b838f548291f463e621d081fd2641a348e15591af2cc9138ac9a42ab76b91685066db801c26014ab84460290a344786d78166714cd2166cf93f20e8f60a4ac3cf46bc14683426db87a69eb19f4fb070c0ae00a757cdc7b177c41ea2b8a3610a99891408a3323c4acafa6ad3d1ca6acb129986da06e19cb97add4c76b6a14f01a3961ac4841b0d7ce1cf089f5e5d0185bb0fbb8048c22c8ddbe351e2630e286027f5b8e364cfc262133b40af643393aebfcb6d3dbff11e92f311b8e7e2ffe1d38c00daa59f70b4323f5fc865972c221ec0befdf0d08a7498ae3f09cc20db46943b8aca9f21b28e7eb9ec274381e08201039dfde2aabfc10ebeb4282d7079cf5a6e56e013141bf2646df7813fbff886c1135f6c116058da42123605c1938f17a53120f57f340a4ecd6eb12c1652e94df6d125f622ac3d28a5c9223d9b0e1b5a27e00d0a6c6016aa31f7cdf371521f585b079b768253ab6a7aefc4369831a479f997c6bc335d6c91ed6c108393745474b1eb0c7bf6edf671dc5ad5ac40c5d8642134aafbffabef516ea2880d5322b7f9794ff22e6f2df3786da09bb14fb036c63bc4706c736a2f894a2c61163e15e205222255dd5fe55913ff19580ff80c516824be8c043e91d84b8d784aa998b7c0424307b857cc0cdaf804607dd65d59db9706f5722a0d563a7ca4a1d5dff6463c88a7be1a8de5ed69c293a927fbc1a36a7fc2a8e0ee9bf7bb834e0cb39be9d9034b1b2fce97e4a3c5ff88cc627fe908ac623d09974048d8cf28cef442e1f00c7bba98356e482fc8b29224504c426f20f4468e6a4f84f5b921954e640e538423b8dc113c270c8239e4140d10333748f0c505676d08302edea3b20f4372020e9a7e63ae766401f030a96878dc2a61cfba80354fec39698229ff28ee5d6e23eae400ec4d54e9f86434f6a80fa6fce88a622e6d5ea0d0b4eef8efe9923df0f04b4210498be80b8619792d2490e077466a6224ce1072bc8c39cd40e178a558f50557fb8785b7f887a9626f2fbde23851ed4aa3621d5d50746df352ae75491eaa597d2991e847c4fbde576c6011fc042ed4f05689b397828b041719c61673200ad04f09e662fee809b5fa0a388a0b4a8083681f3497ace429bd42dc5fe5b16d397e305907a9416f8ee1a3ba832b7307d09b08ea08f4e6c2965262dfd0b04827c586ffe2bc44d424dec9ccc6e1aa4d94524b30ad01abb54aac11b1592868643b133f622e5450b578e484762ce0494565e500e1225e51a5b19640232058651631b0e740eae09856790aa4db67116e920ada4b2a21ee1b1a42166b42ff3eb131d50c9a4e4e4040baf4026478441eef45158ec434402cca4bb24336418454bc1c6dbdf224cf1490992c82760c23f68d9670f9492773fb0c81f3d9af7c7287f8dbccde25aeae2dca07cc8a7493b3e59008b4067f80cffc6e8e20e364466c6c48b1b9c4b454c97842bfa5db1ec31c96012fba0c9ae46ea1cc3c01f255e62355802f346645e1a576091db650d0f81d2c8a91302a7c57eeaf7da1ddeb951712771970c3e79db2480020efb4d1aee8358291f60877b0415425aa07218829db3a63f1664682340f9d606bb8da7283584fab572d0d671865cd0384e2023b44803cd305d8321356c849f2ce195f97e45380328f8896856a5f7608437c462f4bb654f4af8b7e8a1206ab643e8d112e67bf54972ea04ea4d1f49aa6536a8472b0b8ef7cd71c0b63be0f4b68ed863daa1a1b986306912d0e04185d9afb107b1b6be1be80791eab0f42694ab025e2adf1f0c0c8daa0a9dd6867aa0a605a0907e3d5e712d7ddb92e1ee8d2bd4179b490343010f0c37a3f4f82f6bee81a0d702c5221a974b46103cf5326fc564f245b57c9a06746cea4ef72cdb99ebc3efa62ef718a915d846007747365f1e753f288bc45f6963d7d5d22afb9f07e98a5848c7383fd8b6005a1d6e07444c348511835ca6de25ca22ded8b596789dd7a15058a55750f82636cc1662be4f793a826806b62e01afad793808aa96e2abbf3e072fedbef9e15ab64bed3bf4dd1957aed1d5a2ce450818009714bbf3754cd1ddc5a22268f52f686e614d47db841e7f68f98758620e933880c760adadb8cc037aeadbc48a341937deae9e0286ed502ff241dd85b82c74821e244ccee170573889db36bc92704f41f3e9e0800e166f0fb593c47ca7037afefa985820d23a4a0705cfd5782493f82f01ed07c6bf0f68a8f536c16b7d303934bccd2ba773c013d734404dc4d9bc886637103800ba331be0ddf0673d47fd7b86a774c8783b3cc886f642b2c7303e6bbf2464efbdb7dc5bca94520a0f096e09b709af7d2844ee17f92921e451f96daad0505579fee42ce2161b6f313f55833931d8bee94d59d2ccb22df33efb1c20d792254d908754a1b3840657aadee1e7ffc1f7f77ce1911f10e3fd7ef44ecfe7a8dc060a1a0295d03e5df987a4c03ab5b7a8439ec0820747434822c509960b614059a3a98b2a82e08115f6d4fe85a2f64755e760a5f6cf2455afe626b55a8d93035daeae520e4dd4adae520e453554d55dd2b67438b32d63235938778376bf0994917ba8280deed790a10c84ab4ffce95c8df8e7bf653b15d6c83efbffeeeeee4eba065d2c4644c1f28469b6cf6231a2a8f673585c1066b5acceaa11c740b758f22f8edd2b1f3381253f253fdde3607c96f43057a2625d1ee64a284b7e24f0aa8409e45f9e92c992df9d0ab153813b153689253fa07e6fb9c5d3489909482209259458d6f45554820609aa5282fa4e338b0609cadd818ddb25c65d7f7541361976cd13f7289b0f7b7cd853f76785fc69ba3b6edb4d406808231ad00022cb942dbe60b5d77d21179170341ed79ea1d277ef08576b6c3c2552a90fec9df8341e57d905d1302827bb3917ec7ebb67249c17632743d59ec1eebde3be7086aa3dffa67d31a668a0803d1a8c4834a7c1a86a30fe85c47eb84975c3af5c3db2226b27bf8a7b7a6a154bb84476e7c0a0b1dddf3bc6f84b96b0525175af4429b2b2440a777472e1a249cdc2c550dd2c4c647eea66f122a67217744304ba55fec73508038a7d38db872bcb50339f5573a19a69afc180554d732852b873cfdecb3e2eead13efe3111df2b66f1abd8bbbb3143b75e0fe4334cc9de4112314b88a8abb48449ef5057298999ba6d1774e38476922f75959270a921b3a0f22f96ba4a4986aa77413744b4df7d6968f663250d32b7b6d030564ee9b48f7cae93a3aa9cf6596ed33ef7545443754f3faec118e9a3a8b7952e8d7be41a649447532a2fe775c01e3fbc1f4f4883fc2da05ca3cbdafc1961a299243ac718e38d13206e7ca0ab394b693e02a54196420428554a1562662ab6d58aa01181c64d667375a477e46fa853a5102d0a699f75ff5c68507e1785da482ef66ae8fb24cffa7e7f6d9ee6fdd7c6c66ddebfe6b7c19a3fa2c2f10f0559fdfd93a1c19a8f0dd63c50afb02db772c177e4c73f71a72e68fea90bca9cdde36103ff0d0cbfe77d38bf39478277e40524b173e10be5dff1fdd793f028d49f4effb30bfa0f07857ad4e9f437247c38a837c28f3dea777ca6facec3f19a7783f3b84a942a512e8ee36244c50db56d31d2ede4454a4f1f3dfe53fc6d8bf169fc11baa018e2ebf86deef0b641146ac70effed3a94ffc9bba011fc47f84d725f67428ea72fbb13747cfcd805e9f8af0bc279ad7381adf89cfef4b19570c3e4bcf6b13b61841f61ab79f66c7e8747f3db91f0400ed424cc47cd11bc5483f27370bcd7013dafa741f939bc9f06e5ab3ca006e5e3f04a6850fe0d6f480a2a3428c4c653e2fb9aef5760a17d68fefb70b78dbe4eed2143e577e7dcdb9a98ebb8f38dfa9fb66ddbbaaddb62f0a7f1b641fa9f37341b01f4933c6b0aea67fbd0adebba6d3b5154f71bfbe8de3dfece0b372feb7eebb28b6b9fed62a0e16477828c5d5017f41d5b79175ef227c46577c236d8bd7f27276f9ffcc9b09520ee8b0dce504895afc92ef586074efb42e35f9c3442abd0d86e84a0f16b6297a87541fd63fc1e2cc3300cc37e6b67de4d10b47f622ac89edb9e731acc7e9f3d55835996cde76e7ed0b21aaee0205e58cf967d49968cc51ef2eb515529dc34a1dec395dc40454ae9de31c6e8524a295b4a29a5945246295f4a29a594f2b52e687c19e5ef5284b2add606767accabf928509e2b0ae85a710495ba66ea5af18469dbbaa09adfbaa0133bdfd064bf38d5f86fdbc65d1066f3ed711764f3e1609b734135df435228d2ed956e7e7b5cbb5ffb23aa8abdd605611f4e7f287c3234a87d6c507b89d36fc4fffa3e3d7741a7dfb25985394e89284a25405da51dccb87b47645623db9d00e4996704060c06ac629f91fead5d90fbe4bc399f3dff19e45fe6694d84fb57754131f06fbfe5e0b83b81e639768fbee675ed276f3e90d778d80339c80de9d550ea933c2bf54da11fbf84f6e161034a1ff5cc943e7da06e9f5842efc412ba2668f6e15e098fa86a17e41f0e7f28c8cacf9f0c60f79151b4fbf8d49b0d6a8ff252dc47f793fbc9352535e4aa4540fb967d68efdef6a5fab71732fb6bb20b8a617bef4e88dbfb76413166d96f3d7630a1e15ed1be84212914699f66366a3055a3c6443dc626940ddbeaec20a2fd21773304e59f0d5660db1b867c54dffd4e9a16f454fd4ff8661ab68e47a27bffe51ebdb95791b54bc9843baa64ce0bd51199237bfcd15b1adfc16f1d8a98435ae5ec171af41d73c5a805a85fe815b3b4f8ea05576d2f5c8d31cdef9687acc59398a877fcc139867214551287d102ee126b79a177fcc3fd54356a66687fc6cf953dbe1e2856cfbc192be6c58b53f9b351bfe0abddf8ad2dc3444a2a50633c85d81601f42b5730759586bad4f83d759586a0ac7af44efc9efeedec2103fa75af2fa45d107f8f5e312bfe8f6d8b3cbb131f0153013562a9f1fdebb13cf1352da88351a7c16f30166d33e59faac1f9dafcad81621f72373b64cde30aeafe338b6d3536686c9071541ced81aab6ed6d8bcf1ee3d3546418b8366fd95667ebee96967666c952fa4d34438474762985007d3f0de248ea36c28cd01ceea8fb5aea76475513b39146ab86fba5c67b289932b58aba54b40125cb863f2227bba0f8d725658e2466e3cb5e6183490df7cb081cae9865feab65cbee547b11e3befd3730a5f27e098313fe96727f2be7a02e156c48a9b1863f3efb40fb3acb58eafe4ffb2c156c0cd57d21eeee530a3dd346952b0448fe34b82f3ff01b5cba030d5521277fc70271ff0be7bae48dd66eacfb1d0053f77737269531b34b6b14edaf991aeae8aceffe25fddb87afd49d9ca2cc42a01f72f57108f343992b3388820a6bbf88afbe8a2f986c88a28b285f58bb4c5a75b19c29427de78f5b246871a3490da6a2eabfe9a031a2a1aafabe74b240a2168faa1857364bdfa3fa97d03e4b451927d57f7baa0ba91e7752ce7f434e16f90ddbeacc289b6afcf942acf832ccf5d8ab70cd30853f15b09fdf0cd887c3f367b8aec75e887565cbb44cdefb4e4c8141afc7fe67815c20015dd4f8415822a3c60d6385e589ff03bb96493249253d2bd598168ec8c0434335fec68ff1267694cd01d163238ec2040db9294ad59e9b5cfb75aa0a5ffb9ef6d1b417d23ed86bff030ab75ea3400b84abf6cc44fb0ef42ab2b470a7e83e5c2bc2cd62b51553353255d3b4544d0bbb2f9c93fb68d5b68fa82e8f6e075bb65cc1a5a9cedfb6dd8c28a1825d624da1f16ca0f99a2f525d865daa27a0f9adf1661062d114a1f968de3d14b46aa4b99ec6b341a8955444a464a8061a5aac1b8458cb4283b38506e70395f0a3c1f9db05fda46aa0da6f56d0f91b5369d03f4a048a71a58f7927faa17e6b8e3b13b8437d1ca5c1f9db3af7097be7a10582fd7c56d23ea88fa96c8c05fd48a5acd8c746cb337fbb01e51ef5d8cf8f0d62d94b2f063ef1d0500c1ca5cee7bc1049f4196ee0f0857bdc92a1c1f9a92568c84665ea7c36f2e994aa546f74c2cef9f35f689febe792690a53e77c16da67af405154e7ffe85564cd2f32bd9d3a9384d479a5ce493466ce5f9df919e1a6acb934b655a93ca7073cf0a08c1a5f0ae7f6c21989747777776e2f3a3f29777777e7e6c2dddddbdddd23737177777e775671e1eeeece5c17eeeeceefcecd5eb8bbbb3bb717777777ee2edcdd9ddf9d3b3a1744558c312489b608a15172e5082164a21041e440868b0d9389510269c31cd9262f57d1d212d775556eb55a5d24d7600a1b48249225916fb55a5d62eb4035802d98f0a2d28196b46028ad404bc201126cb65a2d249873cb9962e7b40f92b8499129750021b88c913ac2ed164c6cd104c7e446ed04151fdc888b6dd2b660c2cb36f5dc30b145133d48ba5bad560b49338139b8f8800ac8652211154bb80c171dd41fffd6e62641e4ce638ccc2fd4cc396c91fda577920410359800a2260ae2a451ab65c9e0ffd19d9d3907db5689e261dcb6ee6e3943a1befe8afdf1a394ed1f14439fc0b994d5b677b5bde34fd987ffd6d49a0ad41f9031ba4a45e9757d1faecfcf7515c11e01150015a8691241f0e852da48413f757d613c92f262837481704d5def7f7d8a260c4195ef434353695cba3815874828ebee7724f555f735367fc72e19bd976e161caad490e3b2c839d8361ee84644c3597558db86da6e2e5a6a1428432d6ff22f56aa3869d2647acc12172951940c31186e4ab24284932db364ba2cd59e1e62f8f9eb8296b848891295c421304d49562a11eea40c992e4b46529a492b0903e64a1217311166cad465ea525171291168ecee82f8fbd1e0fe0e478940c3c8421e3dfaa987aff5c64215d45314db6e2c8a449829c3d4858a911339133161b45c81d245dd32f385a90a156e529968cc91e53244e71283f21779d94f42cc528a70d67e9d7ed00a27c4d47e6e07dd49b61d5828876199b671d8e518b769d9e4e22ecb7360fe99b2bbafad2878f58f5e4f83aa2a941fa8dbb3887cc28fe5d9e48c1ea3c7cd5923568dc4c7917f3dd7040d636d1dafbbbbbf41eeeece89f2fa504ad9d794f343296355c99f0d5212ba70a9195e3fbffb49e84223ed9fdce21009638d37357e581b71bac03d47f5e114b93e47cd2a50b398b8bebfdf74f7a791427dab6f8c32935ed72b5e7f43af8fdee9eaaa77ff60df7f1bf4df08f8676449e8010d69dd52ed133915776a36b8fe513992fa924a2d55ae1b2a466a4439859e5cec8e357a2534c84bbe54815aa7fb062ee3e454fb85f1f7fde77a741ad98f721b095d6814344cbdff460fe76525c2ad5695f2eb32b6dd207bb18f209d2dcfca0643720ac9c5448f7095638c47b8c84168a93146fbe517ca0faf0fe79c59967de6f126a5bcae8b72dddc7dfa4ef48c6c9fd5ed5488ad56acbb6d5ca91761f466839ba2eedc87557ab3c1e813a3fc70e28f5077d4d5f178b4dd2041ca28636c4e5519a37f57dd77a6ed54f7da9d8d517ef4e64af6717d31c66ffe008381570e351f578782a330828a69180a29b86a6c5e671ab65d9fcd51b141f937451be41a9ccd9e455c90fbe5322d7644aeeedb05396e062dfbe210e882a923dc8291be3017e49044cab197f1f13327b2c7b078798c6d50fe7ead9b3da8611ffd920a2167aa6e7a40f963f69763d903fc63c699945be63fb1cfbc90c3dec3c85d043a145010ce3a3b221d0a28a8f1a591f85132684efbec82fecb72bb66e61a5fa0f6abc5df3c8d7df45f9d095de537d947ff54e30b109ad050fddb056316a7632da357d97683f8f7ee02d8c7fe7401e55f21403a48f30ffbf8d160cff7cf5dc5efef63f47a449f7e15b45077f401b747796133db346e01fefb4cb7ae47fb60ffc341b4df07c24138880ae5d1ee2ae71ce39ecefa9001083150fdc37458d0bc5f1ff2af6f039997b3a07cd911e91a5db5a0fc98d381eabf3bf2378f8874212e28bf3b22b4c679c967ffafb38e6814c520950317802ac67c01050852b2c85264854dd1171afe22643426871c8c6e68410f470ee8418d27607ce0a1054578f2829b274160ec8590122d88b852449736c04879a2d4bd60a9db9e3c41b7a2324e456d50ba6de16a708a72a4ba8d14943fd2dddd3d920ab2eb2346adc6e7d5b592ef5fe84ffdd9a9efec4b6f7dc77990653768d907d4209750a6d35284195a478bf0a265452ce0b26e2b1a422ba2075bf84306e6a3c3132724a81848b10827fc8a0cf309c19e04e820440e197802072eb0b22508295414d1e28a6082ea628b23bc8851030b76802288228648512f6ec6d0128086a44006a67ad58dba4a3ad8a05ac2aaf09225a08aaccad46a82f044db2a29d503bab87245e989245dc0bc608af60228281757acb1822f921c11851345b03afb7a7e66cffc7e3c912f4802f3f9a932351f32b094979aa202cab6ebeedf1637c6ef90fd657b11b5dbee36afb715db2e3b211d08f3b2fc8b9f03b223f2d5887cff8b6b8cd74ffd3dfd4213e2e7554872b7a089b56cb392311c65bf7bb216e5dfa53ec35d5ed8f49e9e8a621ef8ffd3d333c4771a688522bbd4c4cd6574625722395582004627c98643edaa275beec121031a7295b1c935e01a4c51da68d0abae12932ab5c7571c9521563f176beb80970de8d6905bc5fe745294db9eca3f7a7e8424802a3169824b71595d2526467049d28cd72103627b4192eb054c364987690e268eba4a4c72a8b40d6ccbf661fcd820cdf2eccff81b235d9e65192cc7dccd2d89a2749730042971bd0a1e9fd8f657a73d465f8f59d67ca1a12ca2f2f3cb227e59c4b25156f78c1aeed4fd70a776770b49a206afeb9b4105ac95498ed4a407474918f124ca0d3ea071f9b0c6c5e4450e6028a1c4c5074b6838239b0c317b01438723b86881a1048d229adc209be02075b059bef8f003d20e86304689b78c275c6ad0c51136cc000a2d98bde460bb1205109c3041c50e3fa862f68046eac84ff56f245e89d440b1c287233fad832974a05269ea4ec124a926d5c93baa0a675740bdc3015f6481dc787e2e7a1eb34052cfdf490bc4e6f99d6881d43cbf372d101cdf1e56e35d6fe3d57ccab3f91b2ff537bc9b5779375e07d51fc763de8d9a44f5975b1ad57f7257aa7fe643f5d7ba30aaffc675a7dfe6875b1223641f6e69e45cc1d93eec7c684f07f7611786e4dacbd17d783a6a4f757a1c5553b265aa9f55f5460be48609372a0ed4879a92ea8fc34bb596877e2897d8182d0faae525a1395a0b24bed300f98d1bafc8f2f0a73c2e5a1e7e1b8fc72c0f7f8dd7494ee44dcbc34f935a0ae3510d51adea8ff2c2140d75b3a84f420e42ed2942e7a13a18953f5b523d944cd55fb616c8356b887d384466ed9fb5bfb0c66f7d2d5bcbc37f54397ad16879f875788e254e8b2de45f8efc3c83b8e5b909831a9154c3c9b551c388fd40b9c6c7c2fb718370696a430824b04421630345d061298c0fae50ea81656689073f2485d9a9affdd388219eb4513b35c6092d464668910312ac90a2608a9729625441854c0f58de2bba40b8fa0f69a3ee152f506c9c97c270a0ce6056031aeae8f48a59fba4a976edee21cabca8f19613289a7a60e24596858993ea3f89e852374b5d252274a81b6a43751f9e4e1f76a857f5873d493b0bd20f379a0f352de573f3382a1c7f63a5a2599bdfcf1648cdef75fd0c2f8e39743c4de5d0f1f18a2f548e2157737cdb20906b5868b84b455e689f1b2aacc042075c681f950f8e6f9c0f91c43a3f65c27cffd4957d324bbd9cf3813a9b389e91f9eebfcd9fbf0d7eea81bc2e92581d07a76512d485222b7891eb73446c4e9c4fc7174ef96513dc512be3f06e780ca541265ecae3214f85e5e9aff128e0a5f6531decf29c3ace8b2f9535b06ba68a34caa82d46ed2fd260ffa98c270311373009e96054ebaa8be54cd245b4e46405463e0081e54cd285238b1d90f1c3162520ae18c152134a9e687103911a526cdb3e24b8aa91dd5f1edbb60fb8dbe1b63a32c81548fd392df82a6777f827f34d5d2c356855ff421ae6d4b00ffe8813e34adbf5556a8195ca4db58d805023a73251abd56ab1a6ac52104b6af8a332104d372a3b77a9fcb15b689f30e542fb7096d60e95f93bc06cf0095e9d83ece56d698c4962496f591b77f1795c4169d569f0bf9c06997ff927b7a495274dea2a3d194a405da5222dff64492546e98996ec48152f1d9e74f19b897ee57290c4929827434c78c01a2149185cb8000c19666a60f553557f9934a5ea516d21b3a4a585972224add005066d5c3146124d647418a3e9c0c6698d9e9f9e1f3b28d961872170139b3f7e84645c66d7d8420a1fd2a832c61a4a0480a2c60e9a58b1030d865020c60c20783006131ee820440e170f41081e6a9391c40c6670268b18fc90868eba4a4e8250a5982b8d6d75b655c680ea1fd2d42aaafbd81ddf6e0cd159c3786388620ba4fdc3ae364960fb2bb23cfe292edca1aafba83dcbb32b03ec8e7f8e1c353535f4119eaafb581e4783b6e0ef827f9115764c0cfa39b65aad5611ab7f6fe608950150b90b6a6e79f8b1ede6d85384241b4c5e1d5b09cbd3e1e57efc085171a91c01d45582c202273c702aa2a0435250d247ec1096f8103c444bb1031c6e90e45984692b4b1c898fe0b204aba12aebfe8efc5428ceb05135860306d4ddf3a35454a961aa1accb2e0e0bdba4a596090c58bea4b12dbc61218300ddd831a384c9185c75852d2c35eb1e4861fa8c481daec0a4893d74f093e210e462bf7119d2ae407bf3741635d25275dfc58519fcc899738698fde61d5e65095932da80a8789131c50b924046b1afbeb015663c510a30326ae5841e5075fa45177969e9061e58a275b8a300024564003262e4c86cec009a305126ce4e0822396c8e203304e400185510ec494c10a2999ba3850238b163348599c1081b5bf2e5460d3802832cab22c7ba13a6736e76c1762c3a9c00c4c86114bfbec9170c5000e7f01c6b06628c018d6f6d9735d6f064141aada51fa41e9872c4010d55502a25579ea2afd2044a534bbeaa9e20406550c11032dc8b0fab94301ab5b509c1fce90adf34fd83a5fa8aec7e30aaaf4030f756b0e637fcc13aaec21f17af94b2f62ed2ed81c95eaea14a517e65a3635672aca26e6b54777a6220eba56b0758c93cbb48deb3647a5e2b653a728dd3454bc5cc90877e9f5f2c42f945a87827f94357edca89211349bd6054913b0207a1688dc1c95eaea14a518e7158bdf60ef34d7cb13ffeaf8ee557ff6df26b702bbc1de067ba3f7ee7216b7678c7dcf037495783053430e8d902af110a6ae120f4c75ffaaabc4c3126ba0676b4fe5adef5f3f397af57417b4660a8d51520683d53821c3c87e663552e27cedbb5e9b9f65bf55d3b26c6251faa047e7cfe86a62aa6674c69eeeb21ed713be5483bebece33323db64ed3fbf1b0c1bc1ec37eebe42e05a1eb931dcf98349bdcc7c9456e7219563411a6cec77e662bbb20ae9d933a83f29ac13efbb09ff3b766f3b16ffe11454b304154fbbf8b8a0bdd2b3f7a255bad9f1e5487e6d054d3a1f6893a6296e43bfd5c522a292749a7472413cdd49543155bd9a4ee4731bd8a4bbed349becac26461929292923231da50662613938de126d39cdf3638695c526171292ef5b2115d251e92aafcaf494361ea26d92026c986a46ac599a5ea524757045daa59986c0ca52ad5771626290be3abb8d43bfdf2ff552a4a6397282682d112bf74092353ede727287f5ca04eaa21e52e3072494747040de35218c94412b54f18976a4b0e5d51b2f46385198aae701826465dba0c11490e4649944264a7ca8f9e1c8a0b848bb48f7c6cb9f4e815f5cc933a2a2a6dc0a492ded9209286f5215b4ad090b6e450eff473210d652b7c4fb6641499619c1c6ad90a2593fa556eb9814bdd2d3758a96116a6f613a0ee961b886aac5d2739c95b8db38b0076e6cc99346aa40db26cf54eff9c94aa54ffb4368f25280e0962c51e0654c5be56edc7ba08f8631f09b84a1c146afc8cc8979f8cd25bcbc8dbf24494e3d4aafd44d4586364ac45846c52c389b5c034d81f37351885865c93a62f956bd20cd626dfe91f3341ffc267c52f54c9ca430621d7c449afba31ce35e15235e4a6906b525d7663c0e739e3b2ea8ec751bde7aeb0dd715fde58799b5d1077290899f075f68ac1f44e7f73f2e32633b89e5a1816d8e4aa12dccb2ea83b0b08b1388cfbb6efb24fd5e0f6a906b70f43a76e1fa6eaf625b4cff63aed73c2f7d8b6ffd13e277c0aed137ffba9db37b6cd8d0729dbf6dcea6cdc0d042bacb801164c6cd9c2e50a2bacb80116433451d57ed33eccb40f69c0aa7d98a3d2df16a8636cd4fcb2efec63a606b5a6b240fab5e72aed937d0ce637f76ca04f1323fda6a1f4a31f3d49bd4b5266d2a0a6bdd0a086a441ad030d6a2e34a871bf6da1614fd5b62e32185e2ef4b7bee4252f7949f6eb259b106b7fdcb43cda6f57d09ea6b9bd7b3170945462e07af24266aada635e88444a83da73dadfc08186dcf4dcd43e61b320cbb375bb09304b6381deceee2c024203d47e6e75801001b57fd3bef79d1f5036283f20e47fd0bd9c069b7d3419b3af2b11550617ca0508d41f15c4b949fbe01091df2354238ef455f81307858f045c71885cd78783fdd6eb6bfc14da0787361857cb8a4f5539aaff16088bc7ae1ab03bf1552a1b9bad865b059264d0dfa4a54b0b8a198711ff08a66a770f773791a6df1addd3ffd3ff6092108c8eecaa38ba2e2507d9ea8969812c15b15ed717befcb81b21d01c752348552823bf4152f5a01b21d0f8fb1ca4abfe3ae0290c47854e5a7196045c6383385526d1f3f3a0bba77a7e1c95e45a145ddc3ee3106fd96a7190a8a5065e816088efc435a38735e385d63649b9d68ce6d66a91ff3f643908f387cb834ae7cb0800f9f7575b2d25442d254b5aad56abd5e296efc44fa1c890068b2e36381aeabe46030d1ce444438c9f23ab11bc6226bc43a557237ca48c54434dc7873935e4229c0ff94ace87cca5c6e71df8e308df909c6f7b875b38df0abd13bfed9d15da47f5f159e020393efe061688086e3c8eefef3edc2fe49fae477db860604f3fd4e6d37cb83dc8bee6434e7b9b0f578ced534c22e0fee6c31d233e0478b59b0207c9f1c51fd23eaa6f5d4b7855f62e88c71554ababc50626f5c90281a13342fee988eb5150e233120b04069a24b2af51427b9b28dba796e0fee6230c2210aa38be6b79f86f7cf16fbc0c5b1eff1aef5a1e7f1a4f2e8f3ff5e2f2f8a33c5f1e5f1e7fcee3e1c73c96938db868fa4ac7c7a73473ce3957071371938f9934189949bdd11a129b10684eddbfb6a05fc3df2b36a0b2454b1643b09284c5b346921ec0c82245134bb0fa1fec6e28367e7f1c143e23df4ff515f6fd5949110ee2d51fe5a4c8b91ba8cac3e9f554c73cb0fab3d7959dddddddddddddfdfa8a442fa141dfd6a0fbe15e896bd0a4177c273e07457290adf1590b2a0c47e19f1f3253b73de6b5d0ea9df8f1e36ea02d1ee220497825c48aac78eabec949d9171ff33ae0b5d0607cee091af66c96517eb23bad398d9cdcaeec460814d5e33fbe427d2c72faed88b82041c04142be3e2e5a9ef85819b41ff5b2ab807f7f385805fa511f0e26c46223df8934aff29df853a6a8409fe69b81fe46d49702140ac33e163e1c14b09f3f3f2333760f98df0a1fced61e4980f1bd8b40c83ee25f1f08d847fcee1e20bf23ec23befc1e5f9d9ea3f0125cd4c345614f0f17853d5c14f67051d873fab8c877e24b31f4ab9093246480858b1958a810b162192c8a00429429a460228a9612e9f5b01157e1229aa4b5d646442dd5e630ad310cc3304c7b0ed3bcec4608b4a6aee47eb4daffe3548693010d7bea9c5dec55f7b387ba4ff2acee9b7255eca3a98a7dc67d482bd73bd877de464d70cc8baf79d71f49d50be30efbbdfe5a5fa5686a0cfa15a87f487f4fff4f3f6a69ebcb4afc4dc717899108fcf91e15e8ab56a17df833d27fade0abed221c2455e3a3b6a99d51d559dc0d3446e0fa7e1a8c2fcfd0f0aafc917df003e4f7b7118cdf5f91065d558b78569ba629fe5c202b64bbbac0eec4fff931800176763c2f478e1a439a1a9fb733680ad7b7ad71c50bfd1abf055fed192b4d679cd9c249131e58f15df09550113e183346a9280a229cc18a5f24fe0a63ae32dbea84a8a21a7ff3f77c90c282c657f949cb0259d518698c74bb5418b4a28a9ab6d51162c9df9f4586d677de7b7c077b2a6798a2c2f5d837c3f5ad4b29bf1448d9fdf1fbebf1e1a0f019011bacbbd4cd411853fd8ba8d0a07f6ba8412c68c84b15477b2156cdfbf31207e1aa3f6bc141380eb2bd77ef4e16c85251fdb98caf6e70b4afc810cda75e8865f3e1fbdf782df84e83fe9df74283fe29afc6e326cfc6534dd59c5f0a6c1e9b8197282dd6b2388aeff84fe97e59537088749f7df7b195affb8c7095062bf7040d998883705fa884cd5780cd88c196162b052af85a366ff3a960caf636efcf5b38c8f6e110d9befb6dfb60f033b5fb70b817aa1d1618f6d90bbd70a57d9034c885836c567c3fa213b00fffcbe3306f7acd3ef86dbc5423809f9b42436e19e99e7bff8df3b0cd08120fd9c8f5dc6f6702f6d7ffe57527cc201b3128b73a6c694c97f609978deaefe192a95fdac79988fb5add5696ff764c24af506308387061c6066a70f105006620b1060ea4d8c1cb16ae879399cca37f7dd7755d1bf75d87a4761f08b87a7d46b89f3f43aac6f91bf71bcef6d777dfe4041c04fb7088b89f3953b32fe42a02195aadcd1341f7dbef0876d4eb3b6f48f6d7e60dd9da6d0b7bed3d4cd5ebb7cea30961e033f5d4d5eb436eabd787da07eaf5e10776794254bdbedb6c1ea83b6f2b13b54f935ed97cb177b677ce0bb9baa13ef32ae7a19e7adcc443bd7741287f390613add4f8620a286200850c2a1bc60da01c210db92006ad1370903d7da1f6f485f6d1dedf055fd9bc7f0bbea2b1f1683c9ceb8558dce43bd7576448284cf5c7c1429755f33fbee33f45059b292ad07c0dcd67f3f1a8015d96cd2fabc6c6bb7e5953b69f01a70af59afdb26cf0336758538c5c0f80c1cf7c3844b29f1e8de785aa701659dff97eb81eb4ef870e34dc2f2cb4cf45247b18fccc99ba7d215fdf3dd6a5411f727df7656528337dbcd4a07f1b34d47e7b8ca87de65f42d8c77e40d8c7fefc16c03eb6a7c17d168a08d590aeae141af4e7a5c5c1d214349ad821c9961a58fe1cc6574252a6d062064b68818529072c6fc1c90f3b8012041f744982e5cf4cbe2ac11840f4b024c60c88ccb07ccca96f96d46e14981c464818c5314784596a419706835a252492babb97e8b0e8314d4308910d0105161db7c56ac9938468c12c0a828a2db81dc0209a81106b00a10a8b7f2004145f74c0e4891a5fd060a3624385326a63139bcd13338c46757f1fdbbff6e57e749b27babbdbe609cadfdd981448484848484848374829241ba41a241aa41d8f44834491504827a40ee93da40e8943da903424ef43d29032a489f4f1409a4818120f1d240c490700480008c0cd9018ee4224ecf823128e4638ca39c239d27194e34875f4de91ea08c7d18da39ba3d491cd91f71dd91cd51cd11cd123d4d1c7e30875743aea8eb8231e3a47dcd176a41de900e0483bca8e001080a3ec280002381200c86d916fa8788c3d70e984c6ed515ed8ccb48deb4e284a536393bab981439543074ece0824704d45ad689483a323870ac70d12768ce0444572a9e9c64dcaa68666c7e774529113d150d4a97b0f8789ae319dd471db35a6f66bdea78389b0a4315a363f1e39bee6a249c443475567535d1d6166d454fbb1ce841b35b331a2fc616684a3f2b001dda51b756d8c00c0ed6f01e0b253eb66896c2d10ff8d461818eec9d6d0b63a618ea5968ccfdf1a2d1012ea925061e033351ec15457e9082506a8ab64449718b8b540b0f71b9eea6fbc1b9ff26edec64b7d8d67f39757f3ed5d8f79fddb9d70a362aae7a07da8942c9775490b992a1a010000001315002028100a884462c168304f7459fa14800c8aac4462481949a324484110c33090418418658c01001860880c150d7500bc2829045770dcb203c4c8542f1d3ef89961411794a4e0d4937febe59952e7d4794c643a4b12a8c4be5f21128c24474de1ecb4b9ce79acd28ab490be4965322991d603b7b70ee3431f8c0d5c88f462a24d61dbc3ec972a837baa3c6b862e88a0a0d63c37d9aa118edaa075d07505232474ce41422ee6aa790cac07dadea7817c68fd2fea38b3502e10db5e852cf087bbc95d959ac7c6808d5100ba56e525a40989383f92bde8b874c0568e42e95c551ae3cb4e81df1bb1d18ecb9503d174446e20e83ae3ee4ed60a183438383a326ebb72a96353de6565ed81151daf2d34b61ab456a653291fa534f0a443be084e9331f63cf648d46096ba457c2b8de7ede5bc4c3b1163d348d100630e43cd1441f45c946021d5fc38d86da44ab9044b959e8d1cea68838beea1598465919b81495db6049f38e4e674e1e7e48ee6f44f7ed6b0c629340a8ccadb441f010550e2242940ea3f4ccb555e32e3a96e310d3e00873a4cfef9a79cbfc0a9967d75eba7b48fa7713c492389e607f3e489a1a7b56639b474f5b27168bc393f5bc3d4726e72b2e703296972ae33569d4c039eba21a63f85728e4bde2435b2b098726d6e13a6b30d932d531580d23a3543a5d73cb6fa3611444974f77267de19ce4423802cf4e4659fb0ee586acf8bd03ce6e6a7c4b24597c1349273a8a079c41c3c54f28d33bb8f6b4ada9bf1747a21ff221e3e3ad800ca28968e5615de1479009bfdce1bf5949ef9c299d6512787b0a95b2567ce5170854701336a061b49bf4a700be1c769ed9aa1482dc2a7d0a17ebbd0703301efc55980879ac8457f4e14a0748e7bf3a444e84944d51386b027281a69f7c94b1c813c92c68055d8db16d0ca0339b222e3827365f98a69797be332d24bdb084149f3d7292bfbf9dd55c7d1745aeca55c8ac317c74004b4943d2f1a622bc8e5adfbab8b4eeeeda2d8281d806efaafa16c65af7826807c99bc985b265ce5ca045c4413c9ea8feb42c5bc45620675ea097eb9d29955ff8416018e767f96d256f1b3a5a304fa1645e808f4cad7d3d916e477611426b9110b326dd8c6050935eb7f0760e3cc85b8b9b765159ab1ffdc70525532ca21522381c614b0e7f9d4e9a62a8dae3ff76cf0d3b65eed69a3158514694adad424c73929962cb5ea650e07acecd6b4ffb1ec855f8027b29bc30867b9c246187105f17d6afd12ad1322c4093d25f89c919d3b1a24fa3737a837b54b09ec9a3600008b602ab9051fb43c1f73f391cf8d5953e2f727d64564f31b9cd67a0bc70bbbb4537cbd7cce94e2397b667fe09fb6f728bc7cfd13f82760c133747711507a93c3b4c57db846382cfe5d553e6c9c1400befe39d3c1af2d68777d51ba223e2bc76ac6936364de86daf618cb5d68d2b4aeffc310cafe31b69d551a418cd9e33802c52542226f8eb9b490a2490364be57e84155589fa8f6d31db16662fd2555f1831d395e7c1c8be1af17c62fffb476f166b7e2a31d81d9477fb6a27f3a7934231ea52e0af3f4a34a77448720ce5493785409fd71a25fb9c7f0054098ae9e215c5d95a07bb89b417517d1c8c15afb90222527eae9eb5aaffe695b0cce5a4bed0238628c064ccf927d28b8323940b72547a09be28d161c7cb6e1bb7a68bd0fcde7c00e10f5868532f09fa26fec828818021ddacc0bbc5509b906845a8ca45572e9cd6e08b962709fcf2668fa61939495ed68411b6c0f3ccd01e8eb008be68f0809fa6c3db6906f771c9cba4c83df5c6c509f0fcb33caa45867d1da96bb53a353674776509f9b0449ea8728cb7091aa9f9c78594384b0ffc70468aa71fde2257c92fc4f2bf05d920f8cacfdcb944595eb5d9a20992a69944351637d9f9e1479de7003b2f19f380ea6aac04fa4858c0aa2d5986eeb4918fecad925a6076e7726b94787065409c622d59fd7eb980aeacf1fa2e7e7f465b3219429a6f2ce5dc3213c4ac6d260e6c8cf09a659e4f894f134d8fb907198d2c9c2dab1285de9ef58879b30d8994d5d0b95e40747b40cb0b45058fbaa3a77933cd8d71523369c39562629e90d88b117c4bd3d09b638d2cb43718720bb355d112f2d214bb429d4a30bd9540e10b8a606e050c28f874acc8a668e56aa3248d00a3bd10c8018c807d9baee1063b6603ea0223559f8a6742e01199ab4d118e460fbe33502bc333fe660732051e8d3da1b7e7b169d5c4219fb884452d8ce8ccfa223440b0a8beea908f3672774c6967082750b5ec93faa36b0c94d73f0a5baef051ece636b184db6e50551c241b59b175f56ec54bb5d38f34752ad5a5b79df8f6f2903e98ca15690191e4579f3608671f0dae9aeb91a6e369a04d2d0e0a96bbdc6b48b7aad50d7b2ce250bfe85e9bc92abe74adeeb8e6f6a7f90b28d7ad35a5e3a37ca642aede4f62e621ac6ee232c93ee1f3e73c513974b51e58c138f31b3d76d57b82ac7aa3a86cc773e00b2cb58581f186550bbc31e7cddf27a754ba19d2b75a00705914afcec268553d1f99079844872ea1bd61096c2f23a24649dc2ced9093c2db0d56395998beae7b459aa12a7ce0c18e347a52dde7490320bac2b1ac2e35aebb2e896c41ccd4b9ebf5a84b74278ef174a401f4733712a99511815d994068b7e122f78a89c143d00c89da105005ce5c4c057a05a81fb378ef935e592bf161bd979a71c138b3c23028e973a729aef8ecf8aae230d27e33c10e847e1548abe0805f7a795163c1d5f68ec8a4b28cb17de3d711ac75b3462a4b5802a27ba782a913592d7aa33705ad190b97d04c8e355f2d878f5412fb2370836904fbb9f877de800f43c367d949c520efbaa4c0a3ef055d6aeafce23810eb3e68654253ec75ac7d5c6e3c63667656e5ed7d2d117183eba737d47a1d38c9c79ce8fdc40c2805f2eb4c590ebff0de37bee3f527c876e759c70b0000c405e2f4b3885042c9f783ec3c6c0b1c47655d98d1de0e61fb82a7458337695f0387912c8191cc3a3b1370d381e9d5a200469c7514446d47a7c91980ad07159e7650e8729d5748f3c609b538fd5f2d1dab640c457cb788f3523cf45f3af7455353978d259659fbe80caa6ca951ade74208c21bf28465e80c6b703d8d4256d9041e0d1ed65547c793f521b46dcc8caf6a2ef71bb7da1ba1995d3b03fdff7f8269b756507406d2e3e70de4ba3a6e98db7277027f4de8a35f116cbaee4f1e504d2b1f9f24624e4bc948a54c405ee1064ebb363518a94743a23fab07f14f5b9891a841c8df7a6dd32a62c15c45e85b12e09425608eeade127ed86bddcbb0daff16f013af3e23cd230d9cc84108b9698463e76793fea3f13214a004e1ad658f0ad7c9d21d6817a7d004df93a5e293913c1c1157c281e156ced69bd1064c78287fb86bc00062a464845f7f0322de4ebf29c9a64f29d13725e46e5c85113b17372ef63e545ce5ee0267cdf6d23e1e6e17549b46c6f153ae0f91c12b8f098bab8a7db77255f6ba51363278559ae957199e8c373a680ed9d94a82aaed4b848e6c3b0c35732fec7fa0646b8bdfb715536fb8dd413c34f987f66a4bd5d113a8d371f1f396f88d341ca40e056db81d41b422e0ac44fb85491ebb1a70da5f4986f503161f1a5e25f14fae3fed0f75058482cf45b644a34c4bed084ee94a161c93d8faa758d2ad4df5dbfe2d1d0dda5cba06f14cff2684ef0f3b6ec3c80177d4ec09eb62815b03ce283d345b448cdee7f437825586215a08ed17bb1b6d0e69d7b1721f015493c0f19407a474f1c841d9dced1cd95f565feb2f056467b65de71e039113ad5cf27289a76ca00085346a896513d220042c4b8ceb76655f628af256e38e376a48e38e56272c37d4d008babd80c1d8578981065c8c35193c0fb66471be2d92535adfb62728389013d21f24415cf7243f0e49b41d7d2efe9f39e93a9d2e850e2402ef8d38c1c5169319a1d97edc8b8b195398a09174f04e260383c6f1be6668183bd96ca432a7bc5a880446a48888a6c7c8b19d6d1c2be53166c47e1e584a89b335588dcca67d7d732c0ea66f23324aca15f4ea7a15eb3e8fa762fd01347d06ea6e6c0ede175db6cccbb714756e9c82e9db74c2660581ee684cc43c6f9f19a08153fb7c1b096d3a7f9435af9f355df1b8e4e8a3c8f7de0d56b1099cbcb0d8a5a4541b215f6c142b50c34c30f02b9a8593b1deb27cedf5cab274102f26201af9ec4bfc078789232b5c1801418d7408155c680f948e77e467a28a735c026dcbbde7e8d0465d74ce88d7733ad1eec92408f69fa45cfa2fd9ce99f4d7cf6159f944a2be21b0661eaba6aa2dc820f80f3e37b002cd7555e01765cd08186b9a365797e2fadcc05479f50a5e2915ac1920a4969e82c04178a9625b7d8aeffa4c5a820d18ee083123b33bcc1e3f0ee04ce3cf863f1b288d6eebef5211dbb94d8489f9c591d2dcad9fe969232b19a9e3033caa49f503c20ab951a5032657784346151ed88379322fa16dca78e669b0eb5e0f2f627b873139a2680acbfd50fbcd3e378a4934e46b515a5524daed7a56ba644d368813a8bbe7a293b5d76ffcf79b2d194889f20e999025deabccfd7ab988db1a6ccdf7fea7f355701ce49ff4f1b6c1cbf6ec3c9ba06a6bde1fee6d3463f0a004be38010c03bde82c17245961f39f018efbeec7ee0ef9def863c7429e4436db655dabdb98eff4112e5c37a9a8d34e7c27ff4d482b3eaeca4d5c682e412eb2e687a76212dd67a7244e3b215623624a0aea03682102f3679819b174a687d2598d081219426284447816c51026a5d6807ff909f80c5e0d848493c4f0a995c341b5b7271049dc6f0e0c5defd03b764e9cbe1f1ad3baae4d2e3fad9988fb15010a21f7a438539770eedabdaf6f1b1a5e61100079a3655f38bac3d7c1cc929fa0410b8dcc431ba1e54fbcf06a8f6ba9c982c10724d8853cacb899bf9a14f0e755b97cee30d7511201ec205c99e623c7d34405adfb76067f85a93d77734141aa904df3baf040711957a9ff97ef5faedbdb6856a597819fffef7fe3eef64121bcebc8a1075beeeadc46cb782216dd23933f1edfeed446cb5822d653eeeed20177b2968f9f2b61b69d332f414ea789535d828f2756ec0b986c5af878126d797311b4949efceb06e115ac93a75a1581ff0435060a0d759de6e84bf6decc5384b9b867e8b72c0a84d7a0d3271fde955d1939277f7f6f1362cc04697afef96d8f6f927ceee70b616b171252cdaf9fbb78e62c97a4a70ab77bb781baf61a690cf6f07cbc55a0a7dfedd6d47d8b404cc841eaeb20e7b6ade1d3b202e81b86b6151ce7733ec46e8727d192c5b87eeb4d5befa01a48d40b82801b480fcf96797c0e204003d4823bb2b2c5388bf09f77980278b4b80465d95d0488729f628183b987554f7f1a471f9790153947bae448aa7dfd59892dc6f11b590fd5ec6a365c30c1af2f045d7c88dc71252807584087baaabe6205ce1e1febbbef377cf7bb1bfa7c1f9b009472ac8f9798ac23fbc12f447dc9977c3adeffb7eff2ee7f7343932dfd4190862fe3c5e3c9790430ebb130656876befaa7783f93efbe276aab1e73dd44dbab5022e85360796c6aa70b857ef92f8ce238d3dd3a1f6743812b92610bdbbc715fddd8e0c1a3575103ff8f51018ce759470d626d4573f86adcda25e4561ff68522062548121fc5b34ff6545c121db5206eeb32112b032f4e5b56642414f591d7a6c3843a6c259a7a07d705ce247dae6bc4bcd555031efacf6e1badf2f6f22d3debb4ce24dc0122f71ce827ba432d6ac7063f6e43ab311601e5175afa53464cc841f0fd96304cb4f183c7aac3ff6e9ce24b394abe70b4a18f0cd20225e2ab260253cd4727f45125ed8d983a9665efbbe0d4fada0c41c682ded6fd330fccffac3ad974271f2b1b6347f8da644b085d6424f1839fa13990949085d4a207241494528e4903caa10a17ec2104a0367b8eb6e71a121260e2c44b9d5f10bf4abc0847a1af76549e783abe20b7d665d23a376a10149451d45aa60ffe633b7016e6c2413e603e3b71922515630b6112f00cd8860cc4eef58d57ec27548e300b0b517d1a97d62a1f7205daff0fe5360b68f9f064ecedc8dfedef03fa2842b5346624c56165ef71cd1fae17f1edc4a065d2d2711db7075de6bef1bb68ae7f50dd92df2eccd0c316fa035cba203d804b16a4127e93eb6c34b21dd2e27b4ae28ab7b987fa56671244c6cc1ba91dfcaa3e888e215c5d7561804cd9a2f6f74cbbe1f38139a1a79948c4257f11f64355163b70b013119320fe6203f482499e1594e93d527d71d2d5736cf0e063d513634a3096b328aa08ae245445232852dfb4cb4070080b970963ab5c14c9d117d64ff82b364938a443e5963a28823c2c20a39d9fedb743c89bc811ccf377f114d2d563c167c8e4d55a5f3315226159b615389b8e77f912c05d74b201d484f6a312b6c80011a7cd3b5bd4a34584f3de9c4c74ee5695e73b62f4822b4e0e012492154c8ad4a6ba52771d3a28d21577a733615aad850a0cebe128005a1e4ef2053c7a756cd6d0a67b5b5f2dd936a64852d19ef54c6374636e3d9becb6b5760425ebab5017d37b0a7cb13a512f72a7a5ade1a4f350994d815d2d7b5c4bf3cbd5407f8516d33ea87422e9d3cf4810fe325bb32c7518cd33d7ad1a142483d76f4610b9842087ebc8203640abd20734c06ea8511edfb2165a8abbadbfbf9083661868df56bc78910a462c1f6995a4c60d1578abcc34263e6c242c3e27c1d8529ddfbaa03cfb45a12e432df83b0c61c2c09331532bd2fb254783b1ab6246b1dfed37d724b3a7bf94c1ebdea428eb95a381d73a08bc484ddc3909fb35a714e7d093f22773dc358da4e9442b5b90d9e1806c785306893be2806dc462206162da1013293a65c7d3931614945f4955b37676df1d36385c5cd8d1787f11a39e34023ae104ffa9ddd8031860478ba56a0423822afe31d9e410601c952115a63bb02afe37e97708047ce8aaa9a0a7ca16b426e14d986e01ca0a65884a98d8574d43bf5304d68d3eb6b9af9b72a09ca96a057496cbc6dd81a1a6c804a056f2d5f7e71f939cc8112f2cf206c88c621f91cf34792cd3a4fb644c7e476e62c064859d04f834f43d4a844440dd07db0065db88b1be70de19f5fc7230910e5baa6a3c3c0492f373659572929c5cac248acd6dc8f3472b6d0be040725108cc6ad3eeb1d25fc19791973ddf956ef062275bca0c053ee348e3e52d7b5808f5cd8ec0b431da9f1e1adbf3866f9ff862c3f788a29dfa3aefefa3017c8fc9869efaee546334ad6b73daf284f2c2abc7a76955faf035c6d6824700aea6b96f539d48a691f423c8b1936799a7c7d3eafcc8047d5c853ab40207170192fdfca9d95c593a913b6446e7acb4c951675fa9d9283da0186a36a9fd11371d313a6c9c89349ade37ba66b6ce581e37dd1a2bccbf3c543e85346932974a88afcca30645680eb5ce6f020252fee7bb7d286f22cbdc9746e7e6aa14cbb7a71017c7722b86071d14921a282596e42b05b9a734a7ab0f56a6f370fe46384a2444f957a498bd51586c0faec01e6e27729e1eb7b2e7e9d2a5f633dd77daafcd2d2336380b9086b8f9f653ff03157d1b9cd453a8d9284b2ccb6c3af29683f5b50b7b63d4b05b4f4382bee1a809b4e3246cd39633c30acaacab07948375cb8aa1f42120a0b7850d4cbb0acbfc053375e2a3488365a7f9d6b2c1b2afaece5d361b32c1454d878ab1bdf6603a803e46223791b92766d056908385d5ccd1971de2ba965a9e33516a49bbd5fe472c5c180563d46f7da14ccd946409e35f3b21c29f82e491a156a4560dbfca1a74cc3212e6df5cdbeab1c9c6b40db98249c04135ac5a042037b562d0096b90a5c58554dd51be286b4a883a7947156802720d788bd003725190968d999951815968c640f65ec7a9bd673352c757807f0a92ac7a148476b530e3e25b5ca1135dc82a5ba847bb8fc5903925a62f1a55e2a353b57843e989e1dd297efed38a175c1f2ebfb95f6905684d82ce0eff24a1506ed6a5dcb4ce9f74187fc494d974f3045ccc4e744f0e259e088a4763931037d61de64f9d3019e259a2dd12610b5c92991ea09026df91145600586e0cc36b55e1a3301c4b6a1870883ae03c713e6697e2aa112efa843070df34e038f5a67be4d2b05c690db0627a9779011ee997c358d11ac52896bd46fa369a099880f3349d3ba6e58a9644e0447fe4af7d7324a80d1914e4d2b5d44bdd52fc15e2da95e103e9894f41961a655472142f518d513e4869ac8b725f0876d47b60739c084269d762e85af22e764d8db1dfc0c8abe2647460f8d1f31fb4978274430b1bc7eb0a8ec7834d22f4cbc1f6bf4591f237eb2b867f6e73afd7a5b3261f103826d4850710b2979e5f95675629e179649d24d33cbe92ac8da18c3b5fff7a2d8ad20ea641d75221e2b99ac596e37a76d7fee1fd2ed76303fb5a58e8cb6e3eee61c19549bce8d70586be21b8f2f32c44bae795979248a14c6ea10bd1510df298f227631a4956c8c0c690bb46a86c99f251341c728d7f2c65ddc61bd8fc3dedc812a732778acd0515b7ca3cbdb13271cbd1f5833ff9d55e1dbdc9d25b288f64218f9a819f27daa2036e17d8efc7e88bb09619c9978a21de472255c58a2bd10686372b3f8ae73975964a144f43ab0b88e9ac585f32bf9297fc1277678fa3e90677c937445b17949da91c18347171fcb00896433711124114cde89c4429f3e5cb0a51e1217a0624b148ee83acd21eeccc37be93da9b6544a832ecf36af1d93ad63f9b9ea5275980dac41fd255830f114d60ac8b2dcc055612aba40e15762d8dcf1d88f15a7d194a57440ebe78ba531f8cd578238a2b0fa464a0c3a87e258fa54dfd48409111d6129b077cdd5975228c532a681907320c46e7a00ebc8187e0d7f873957c35de0ff10bfc983aa0c8d76af681b9fdd443211bd11723f12d3b7f415d3b6b5f423bfcfe26f22508231f503bdeba8cd17fa410be08ae1410f42a3168c823953ea4e655f531e3fe262e9e14005fcc2e459cbd171e40216f6ff14c39b061ed90e92a81623286bb3a637bfd9ec5a688e6494eae38caf8443fd62c7deeb87e56a53fd99228c0347cf72d360b070f1e5abf7d5c6435245607eb941d86e0c54e6fe7885d1b9f5836d513a220e12e8f8fcc2aff20f07596a4156b9e81c5a4692eea0de260ceaa647743c89b881a2308f761af3d28f1b73317829eab7ea7e169231d88e03f6cdfa559e7c5c7b3d8d38f6a0682f4ffe7f733deab8ea2f09ecfe787a35d356a45e81276f9851792f55ec9bee8dcf54658b99fd12a52be5cb6c99511b3068667b00829686322b4f380ef2045d6383db1e519c919fd20a8acb138cb2cc1352e78e048b3ed3c5540e7ac6941ec7241442e3cf143332e5844c4da6945c6d32d85908ace89f99c0f2676280dec5f4c5616c9d7ea1bfdcc44914a922cc166612bde34e894dec0750b36f9450cf3c0c4febc2c32e8c9775ddf162f3380b36627915796f9275bada588630cec82a9b598fcd5a0773f03b00c0e82487552ea6935d41a2a7ce2d075ec6da0c4a1826d8c89175988f0cddf85ae3e0a58bde1f349c1c7117f701fc191a8d6e4f51d181fa4120bc3c8b37eba33cef80c1fcba04f8f4ea0023f3a51e48be4d9cdc936a758e7b5c47e8a88b8db60fae75bef7cc2564529f88b9311924fa976acb768f8c532c7fecd2e788a2a84e522483a2cfa42c272d4604e10123143347992d34fe31ccf6575ee2fa0896348c417c7dc7def7649504897f1108f53c2cb4f6e3db44cb3d7f40d076593dbd94d673b2a8ed99c10c49019d28f478f45953f0645936ab1351acf0d0101ae4cf7ac2cd0c2d42e702381f92d63b3319fab5d23ab102303e6767ea9351f6bfb48cd09be121ab77662f73cc816a74917bfbc7a116d188d8f003658db8559461189f5e921e61c1cf058610b5e3868f4966bb1c825422f41e78d36dcf5f98b5df4d0ec6b295037d72dd290b2ac49d61cdbe1a9f4855fd52b88928974431c2b94c06b2b40f160415c4713dfa42c890c148c361275bf410ce56fc15078e0de08c2054e8ecf8a828818d53372c148455e6c413e6b2296ee116077200413c933686c116255d916f2921ad962376407462f9db0adfe7cf8e1645e7d00c7661b005051a834419e3cbe6cc38635400f900179439a72bc5a11089cc16886fe90f227507543b23375bc77fc74f2df2e7cd0663697730e074d37aa4733b67126934a681e840c31f6ecd9cbb1c5e9e513ea99c43e6165270f0757b12237b1a1b0385d8dc3a158dc2f55074ae814e75d3553898562414584fe448466331482f76beea91af7d9232f890838db6a17b49879615df9e435a877ac58d985e88f0be621debbe926892a2200d9460f22632a5236266ae29f7dc7ca9a88b0ddae906c82e7436a580b6b82bee88332503aa6e0f12d46b8edf358a6693f898d82a205a4f6b5e55411c0fff401059308579f133f789fe022769b4ee07f3988f3d14545be2d751f927f2501da6a518dc24ee6f56eaae55d0cd9bca479b43579fa442d6c75ef22cdda0669eb8eecfa364ef0a398b6f472a24871ae5c5e91f7fa1ec7d08ba236ad5f4ecc399f205c958517e94bbf39059a11008be638b1db3cc14f63406093dda804852549c8923905d6199ec320f1a176e5a574baa793c8679c7dde414a57f406a01f71d5a0253b2c5c4dfaff066e6043573466bc1c4a0ec6c9be6ce265120eca3643f52ac4c22f0a00212066c374147ec25f3323a849be19c2b81b1be2b8c25c247570d9c00d06651825b715fb8eb8ee44d18099cc547c2fdc77156320d101c83b0689b5c1869d618a4dac2d30e19994938c7b8c315109248665c93ac559a60c88131dde186c814f6f631c6d4ac7bc054d411b8161cb45f9fb8d4d860d5a19d931af44fcb3ef6f49a9ef6a76808b90b4453008d31271147436f2277d7602074b78630311f328c5b9ea643487ea315bae2d70798a4c14a9ebd54a5b57bc88974fc85118d7cb8998b4d910737f1aeb46118291d40b0bcc2c2428d52e3d941326880f955e7c365e993eda6e42031ba254026d82b11025464f6065f195093b1e6bfe3d01aa0eac5cf2ca465ec6064a8f808bffc3981f688f30845f6cf801cb7e9384ab4140618d645f3cd6462042451d4cde3355368f10c5dd7c7980d8431548173e7201d128a160cd28f1cce816531c206375306852b17b7754c01bbc5fee34954330123180bfdf104c96ca02390ef17b9c8906eeb2747f23bfeff329e5123f2125cf8c442a4fc6c2e26c196e009e51a765932fbcbaefe9004df112923a1f646fd9dfa8cfefc6dc8865fcb520f8713064a1883bdc935ec2f0dc4ab6e798c5a22e5c3cbdf50714c092287ecb6f0519b82f1211e105d05567db9d92dd304c4ce97a8e3456818a88ec1e349d1a59bc204774c3fd34a5af6e270360ac2b61591183e1f91e63e05a0ef60fc7f1596386ae16c8e29d403f5655604c242a234d936c74a29c8e43425c97ac29b08827dac10240464f8ef602286dd5f16718301e18027022e78f676b28212a806d7c30dca90f77d2c7d792124dd2783e35bd6e2b5da40d179b75bd1cf4f701a2ebd1a1035e4b1a6a931515c283406d5453ba93426a7b1a185bc2bb52436928c8790930b8194e4c7905595f7447e1a13ec26228bca93286a22d956f4907b23de951dca751c50644c730fbb31a332a4074de04e42235f410eda07052476cec7e136ce1c32ba443e9d46191cac3ff4f1d85e46fca272ac5c1226d195cfec4ce1300016c1c3ad1d9e0adfa9836fe1eaee98a6ec8199ad41e7e3382ac75eec21265522a472702cb357cfbbfbc2c35ec9d1e67369c9080e53f9f8528de2af1f88c618ba6150eb9d5a4630ad4ce892a16f25e9e5e449174d671ccc83e317beb0daeab48fce570c04b122e2d6a06b2483cf841db6e07dcab2b42db017ab0d33b749b3a98893f670573ace89df450791cfed4f8d9b09aa2b18e95b71ff01de4c4fc9475ad352cc13b7687063ea93aeddcd0240db3e07371016e6c0fea642f55542c3384d46c9703ec9cc709a48f6a5056069d1c32237a5bb44dbe7bb43da6f79713a3bcd56c26c845827949b56dfd95d1fa8efe27eb8b8ea1d133e4e02ec42ff6a5082f9c8025e85fbd83f79ae77b09078a721a4da10c0d4b49a24a0da4a2ab6020b316e0c88ef59c1564887aa01b17530578c3f028e00837d511c81324df8f29cd596c3480d56a75736ac1144e7adb93cba15c5ad4e1ea738aac78ac2bea3852c0d9977c7515b4171e37aa62b24cc50d9162f2ce8b8428c1c0dc6c39e3c5db15858fb4de21c2475704ce91c97934309580b4ada067ff41766c5964d618eebf43a2eac6831c59ed0a445a1aaab3e3a49db7e7b767552aeaf974d271c610b1b90837384d8259fc899c2d1d1ec46d3db1c52f897fdccf2bc1488badfb112caee661e8dbab891c28912a04d16c1017272ea1eefb7c1c7fc6ee4da4524e811068a652dc8843b92e00b0ef48a791a628c3842e3b1ecd27fdd09b0932da7dbe5ad5354eadab7b01417281f2f183a76cc706e56ca07f89945a951565281fd763fa6862277c443adb19572a0d4e92bbcb48830a9f05ca98e5d2442e9b637afbd45dc13dea679034cfbf1ae2f9a7ea21be8df8f173d11ba89dc6874c3575c6ae3e98bbddbf9747bd0dc481e4f128c09536ec5a7ae04136e79bce284a6c3c92b97e01a23de777caf1d4243512da891ca1ca23a0116cd2275426c7442b59e2b5c913a370568ab6a3279c050a3db34c0efd33556f380ef1debc4d5ecea354464396482ff1e57f3c19e856a2a1f7d685106644995bce26b23d0c1024f5f14829536e0b274c0692b9504eb5aa37e1201a3109a268436ce2634c97efff9ae51414b9cf2909e28c5cb42c2f2cfec9cb9a01866f105d77451991d08b2f7c7a4369c799486dc832af4e041837e563f76a447f1ae511058f743247a194ea9a9a66200579880f8f3d0c9544ab745510aea47b4a7cfd03a7ae910cfca010d82599d6ed742844f8e8d7288361f57d9eb847747cd37cbcd27de54ae3952d257b2dc0fe14e383385abb0688b0b08e2c4b07dc36131e0792ac971c5f9afd404cd9fa082831653e2a15ee41a5e35a8c879405f333eca6560c0924caa802825eba80fa43e5cbf00caa6df0fb8788aa45cd544b0c3641160ef0cfa04c6840bf4994a1825d0f1191202433b5cfdabc266ef387b79dcf323f446e8b9671337c0a2380f38af3cdf6899063d66bd75fdbcd245b07fe5cbc2b6c033deb99ae80e73c415c584d4c48b2a5ca89254c938ff238a5d182a481e167c269c380001e2d899f25c99cf960c53acb4a93343e5820f4077af8290d685b5454193f01be8b61a34efc747a8b4e8074417dbbc3bf95a4a222fa2012e1de1f8ba1d285b380a1a63365d12bedf260011ec955356782b8cce2ee768f37fcfd883228cfe1da1a9d4413fe1a06bb8ae61742981520820240736dd4f899dea452697e11edd69220abaa009e6b25d0f64df55171d07fe890b9252f9e8293fe28fff565b9ee4d7ed3a43471a710ab39cd6b669fa0a3270a95b0e118d04156e00a851fcb3a002d5ee549e15c446e56d155675d1822734d75f9d18dd6981a25f320a721279d0e861dd1149985217bb05a2b39565d3fe80857d338ef18185bd48e81914edd27194abd8b13b5660fbf777946ce5a69586699d631c14bbd5d7762ac0fac4dd5adc08c9dec6d205261e1e62d2fcfbe570dfc4f4696d89323a0d02673ca5ceb7e8b7ab0decaf25e95ae8a55d49c4dae1536e87417cd75dd869e318ae76b053c65a2e736ec5ad05de704fcaea5aef7acef6088ac7050a38159200bc329920a86264f17326fabd8e6b6c88089be9fe5f621186f0569a9e513a472c317be7b69e9bc92a6e565d80ed11de9114c8fe261d2981996c7132368d0df01bf1bbbe0cec6c595ae92b9de729e9c4b30c7dd2d533ef5d846dc0dbcf8a984be7530f17c56d3d28e9880b4a048c99087ae80eeb3b26bc289b01246b9f28881c485a19c88133f99c5a1cf3917c4f3429a315828814748d5e2b349b459e2ca8c6e2972a190edf824e80ec215e3614d84377487bc2df9bcbe7ac3790effcd3a11f8eabd299d5c3c37d13daf1f61e6187053c23e1a90f624720e1e24776691141576944655bfebed203522f942829de54f750a7e946f9ce7f5df4a1e973550ae1989cac8a54b579a906897245f9f34113449ad929ec9fa2a89ef005b943aec83b533563939446d800c2a5410a4d110fd06a7aab426e5de671cf90adc430b9c2a263ba31f9b646872ba321193a1d785c2067d50db404fe5b1bab5fe97d9a482a35c4d8b07313b4298e49847ee244b92446e41a5482d6b7f6f2e160879d9d0cb035dfce13894cb42b01cafc7f709c4086d2012b5b4f4a2f95c218dbbbd6ec1547a7c09f14b265c431e2f2acd3d198b67f86861d5a59bf8f9ceb12723da048558bd37a71aff9237f724329d09f1bef8a4bbb6d6ccfeb4129e5a5fb7211aec94a904a5f095d93da4a2528a5a1f63eebb245a9e29606bff21e7a0ed706193d81ef52a4244d5056d095162928e85d4ff2087ad143180fdd399dd460dbf4407cfce8af7ac96ce250aa07d18345aa204ded2247c498c67ef294cfa255d9a6d1f0721d78c203021cd40a0a4e60e80380d70832bf3d494c5be8389ce3dece6ff4f8b973896f22189164cc12ba719bc47ff1ca5cd9bd5f002b48da4447dbdf98870a6f2cece3e1c36540ec1ac796f1c97b7102ce1685fc5d8aa224fa548a1eb20435280b3bf025f88d839d46367ce877103202b1feba3cc10a7648ec27bbef8302f1096cec1065fce1c1a12bf56624afecb83125be910dbdfcd3a78712d8b4c07cd33cda4ff0d013088903e482064ae2851425e0c313f6fe552548aaf0bd42a98ea7652c3fcb2bfa17bd6c2cf5a2897e8c2b495ae24329ef1b84435c2c33ff85c8da8ff85d7c27b47633a1f17b9097c1613577478bb9383d8fd3d388d22ebb4ea4d9ff5a19575e5bbb28d30ff261e8161cdbabe222fe20877bb47b03a808f4a080076c7c7a508950598dcae66821abdd522067c31dee67939ecb6edec243c2703fcc034c9871cbb07ad33d3feb93ee1b96dbab1b2ae26bfc3f64a54d9bbf7fbfabefbb2004499e422fe936f7a7bfdafa0a7ef2000787237aa4944827f6612554da503874d6d8ab7c343271f57dc9d68dc769bbf6b144f0c5d8acd34b2e68254b5e4e67eae19b129e711be9904a8f067761072b0c68b5ac9e1148cc81eaacf13077248adbbbdaf455d45632ca348bd426f1ef5dd44b28f242fc116e119300e245faf954178442f2ec7b145b1cd52fffd861479e60445651bdfea4816d4732a057d6f81372719005396f0994854bfcb99beb036fa8a6c3b874fe8f538842a07c53f10b5e2acedb83074834edeb4ccda33cc206e410fcfaa172b4461d99de68cbf6c130da672f870c12fbeff971d0433861c8c3b2beba832573c62830289338381cb7d3ae40e89410475444237e20be9723cc11fa0b61213b6a5054c1547722fab315ede83cf748c698913894c4fdad0774d4008971d50f4411159b723e972385aac29d397d9e59e3a653774fdde9baa5842990eff511a8ef157d981f9ac05f886d1e4a405ee31a0c0110d6d4215e6a2f44205e73e7f877894fda050108d7d8215e6b3fc403228ad6f3d3cbba9734ae74a98df900a97a04d61bb8fa7a59a58633e233256134e83c43f35000d21ad12484825aebd741fef825d31ac48158b3aef8ed1a8f340de1a0d7ba43bcd016843448b275677796d702c92f946b967658a139de2397af151e73c40b28fad68c12b442e7581c415aec1637d86c4b20c68a56595088f6655f140e09ef18d75676fe3034104377f81c38c5f8a26d59f637e607e6e93ca77f4ce692a4ebcd98e4f1731aab804125eb68c8c17318abb0ad75dd21342315196a95f27e6f15a4ad6e4dce0e36ac09358ea301557b710dfe9e895ad62121c5df4a0c5ce6314133c9ced4e8023cbffcd05412748028ccbc5e72efdad42a27067a9e3570ec76dabb48b8a24535e8d4728207ef806c66bd301d6fe751ba70a3dca27fdf60b56e8c03ce8a8b01ee54c390f2cb213ee9ef50f81c8c6a8c28befe0600d7efd24c96a76d0f07b2e7cf2635219ed200d0f5759970d4faa8bd6a7f6363eeeaec193a8835a9c349f5078d25c041d93c8958fc7a3db221f64a030607a3318667c703af9d17a044b14b00ff08be8a7e8ac95052f9b0aaf99968534d210d0dcbd2276e7f890358895d6a81968dd49de24e8c885faac7c038182a1374a104106efd8b98c91dcaac80e7d8131ff68aa91b0836cffd39ba2b7c7652c37d2411296913436a2e815e5d0fdcd21eea1d3011f218fdc28119743b391643166785eb1b67a761316621d3e8b18ce59f7062398d4bc8d2715b1d2291a32105f85def5ec0dde50b7fb742cbbddd4274fd9148731759846b432fa7955eceffb0056720941df74c279c4f23a5b1725b8405e499089501325d54470b20b13f87bfcd11139e744f6a87967a9b1f6b3f1d218282adb81bb46d1f5bf33bd1761430075201e2293d8f1c8ad21ed1a22e313322347f41736a3b298ee837898798ed53d0bc63b74a2fd6b350ab016ff69831f06f1c7deb42a6b48e49499d10de5bf4775a6f1ea85eb609ce0745c008b80cc26ffa5cd59d4dee526321ba4d3d918d05c7f1793b940b223d715b9646bfdee62869396eefded10180e6c30d85daf6d0244ff3862d6d071eb960ece3d419c75e021fa15527dccab6bfba707e188c89e45009a91ef9c1cec23421f4d491f2837672ec40a51c030f7c0083bc7cfe0b55589ecfeb7e0831c6fda661ff0319d3a5981fc8825bf0a389e61b7a76c00b40f5fa5f4927510ef7e3535a60fe2f64527bca6293290a28c2c13d16c91516113549cce0d097d08102afc365b8110cc0816b7d89a4db12ea7a08bdfe33d402ffaabae6b635a5ee41a221ee6c783c57d6a29c37b7cb51f7287a30e356950ddde3212dc92b5ab9227a5711929d26b885c4db511c495dd95468273b31c63ab5c9f35b880fb0358a7dac3f14a462b77ae65816e1b65e9f7ca0812709631275a78ee52ee527f5d6b383320adb66c29e7614be38050b6bf1f035f7509c345b7fad0af6ab319ffaf3e0cdaf8635f8d3c67f9911ab5dfa6e307bb2b9df31ddd19abb68e4182054374d6cac108fff5611efbfd62e47abd2948502d1ee23c50ea3b031fc5c15f7e0251b6f0ce2cf6d024bbfd40a83c543a1dc09558501ac71842d8b1573ced9997e1fe094d03c9c9b1a59458b967ae838a7c1060ff539839dab1304e00d5f84e74c7881200ba0ebe8d42c45b3bd10cc44224eb95f420514f02f9a44046c7e57f9707dc5e8a767bde0dbf9d498eb9cd678518965913d86c3659c8b64f55e4b0dd86aecadb16498a4e2bb17de4c2ffc16c8b6b4836a6d0f499f5d773ca7a46c867f86042212a27b357ec972aad4f60db000b957d0bb960efc274be644d5df222f50a051baaae9d7a84f9b224189de071ed374b42243839331396aa21e15a035aa48c8341e01a755020cd251427fb4fbb0714a105667fa76b1d1d0f6d53781e390b1dff41d3378d79ba09a1e71db8587903f8d41ee443812932a683bfd1b004fe6313a75e87238a8b8fb0cb2be234167d0827559982ff0e6fec69de316a0abb64b4a213cc079e81b9b7257d496d56ea4525cf6ae2ae14dd6c9a68843cd62810dfd267633c6f6a776519db96c52b540cb81c48384da553ca8fc158445fdb9df28ac2ce3206662f47a814048c0dfda92a3000db59bce168d290c249b6e6c3f2f3646078e87768d4c71ea24ea4363435fe7841449bf0988cc0c2c8e9b6c0a709399603709a343f2d9bf6e58b7e35c6e1d798cfb42872eadda0516032752cd12343d13ed5be7ecbd4c421712c5922463328010e944f011a3bf2c5f5b6513b3b9c202f38705641fa6a591f3a0cf7f0a3a576c46f00e2d21c183f7d8ba0bfd68290056072cc0b5f7d859d4d7650e75ed87d285f9a16b2384b5296e271b881c8a4c1f52f6b4fe42dd0e65f026efc8e90ba3d7a1c06fb2722885199114dd93f4fa6998ca76cb061d9fd2fbfa6b76012ad40636f271bf34b1efe9b4574027366cf9d16d4970fb5252d97e636303e394388c91c4376d04010f65741504d536fc1704135926bd38b812f8a4bb8b702b3031fe10eda80b55bbb201845ee4ccd3404ca37aeee619230e7617c71075b1724bcc13b82fefe1f28b50d37f2b0a10638d61bfb1c1011ef557851c83f9786a3c4fa930f4daebae17305b959a9cc6f0cdb97f9b3175e3618214d76c09ef7042cbdcd1fae26ae6426bb193dd852b1e2e31e7f67f3ee63545f3f94c7fbd5b132deb1edcf4349efd07556ab2f9c5f33860ceca872580cb08485cefe6667201ed2db703f193766770bb628927f1346ae0e08a3b1a95ac4c712e188c25ce0f1f3556cfc9e2176a4fbecf8fe1ba637964da46e41b1207caaab553c8213bbdb2fb2115ff31298ed5e7d3a682702710441c40a4627f93d1b096765af164a957e9e2a2294c25d37ea998151d2ea14ad9cccce53fb7df340fd4711ba5028c3e2c5091c9a16b5549db1d236decb82223716960bf0499a49bd34f3f182364535262cae59f5776a4296bcec12a2d900e409fa90e6f261e7124db1182fea5e75c698fae56df2c6a779d009343fb5d1c1e1b80dc4788e7f56a1ab312133a6c9cdc02f89c0c6658963c232b28d1d31a5c30cbdaa49e6a3109429696761fd72c6f913f155892b4aa8b8518a8c7528ea1df190159f45d34c1170210fb7a853e363ac2563f0318359876df5dadf979d25f5118eb834da7ad3e0bc35f9aa9580d01636f5e019d7f278fe8aaf0e28ff8944e55543d20c32739dbd1ce017b8f03d810961a6cea70ec4ea1d6b829c2ade62b695609cd03a1c88d0fb174c343bcd35be48cdc75ae7ffce62b0cb4af6b001c2b2797d18cfcbc76d56e34d5cf0f2936140c5a3e5174f9254d815214a8c2efe866a5f77e3242640fec490845fc9f54e3a7986e0a1f6d43ba411a1c09cfc4eb43800f854007eaac6d82d05896b97843cff3ae1d84a07105ef4a59034ecd067de935873011a20e8fe79d1576b17613294c06bf36e5af497808e283f33f7aa9bb8c5649f237e99714d71fd35ba632f155f1196ac21fc36451d2e5d0da6bfa5d45e4626e76f910d0763ed9d7276520ae927716c786fa34edae44e1a3740a6ca9b3201a2287454b0321084a6533ac0ea1eb3166b93b69619da5c17e21b9407c06c2393c33129ff65cd4af4be3479d83b6a1700d0efc31d00e9a57cfe0fddcd06a05f5aeb0daa2cd8390cf1e6e30eeb36bd4eb966cfa624ed2aea698b71a525fe53a64d4bbdd84b597470f936ee2dcadca7031b1ba55d6f1c5f71dd081b8b27b209026ab924481397ff9e83bf48a83e9440306613e044058a8b2bd796187a253a54e8fe8f77007d89868c3d743e9ff2335ed804745073414c567ac56d44c320b612b68ed760ca3f4f2be1ae6ae5ee8554a186e5448e048f019c803f401b274571a2d5ec919112d17e09f8b136d00c41ee3a8444d8aac6988f481458454ed15c2dccf7a82f001ff6372c21f2b930f41f25d0ed47d35962e1fa874ac128005af9d8f97279ab6be85dfa9ab20808fd74257efbdba1af52531aca3ba1e59d32cefc724246e599dea7c8ccbcad45654b526d7ab984ffe4c76b1b1ee7f035d427c8b3f654611e71ab743b5ab6e90b9e21f3671c7142328872332d82303c512be98b206cbe0df650497ba0c1e914e9a4c16e69c9840df6fbf7aceae7e6d6a9deeafb53a4d1e6333ebdb494043522d41cb8880bfd56398da03a52af96c1905117eee15d7c1aef4d9811f4ab18c69a3661a11cd8dcba6e452f2eb118b754a1515ec85d0c4a41b3e06ddee2f3ad2b566f3eb75dfced1856d1a43371f0bb2e124c5da94551654caf91895228c8b05cec427f637dc3d86988cefb1e1da4e08f8367a775a304f66adf781830fbd775e89bfa2401485af3108c2e401a39bc3d76b7ab7f5c1ec520fd03f098fb8dc056acecdb4d12248269b2a7195aabea182f44d335515c8375e2ddc5b7c0d066de300af4212f08af9fc0d88af1c7ca1f1fa77be24207bb80a136c26113d79d690243578b8d1415659c1fb6738e52ffb5499f2ab527140850afb06022138aa0dab142dcbd2c7ed74f6e2a77e5e0e8377f7bd3e7c81946e9bed82626c757ba85b536d859d46b046336ecb3c2a117abe207883f53c978f321aa469170cecae3f80ac928b831bb035be77a083cabffd135df035963df9f926c4834db2611262c9e5f110f70842d0b5affb2c34a4636a8eac3bb395227162156e168ff734ab84153860d9039b191677650d76ee347ef31a3ca3de04d67a40fd5eab590784133f5bf3198d99f81ef60acaf9102310e516b41a439cff7aeb800e8872077438d70b02d26a423451444dd0a09f27d4e53a01bc8cc2816d7d8e6b9e2e0a02aafe26302f05ab210e727520a8960a551ebfd707fd3d63c1938532b094738e26267c789e7fc078abac74a24fd783ab1cfac45483208e4bcb0a9c5efeed27a051d0d0d1f2d355e3b5ef10eaf05ee05f341a1a23f57109feb3c69acc2c6fd4e6458687763deb82775f928aad80b4949b26a371b497bc6ddeaaa24c9ae7d0dec0971cc4d85ceb9f83f61e7f94eb8ea017afffdc96777fb43979ce484f15fd61964dfbaeda24eaa6166bb979283756786c768ef87130131d8788a7eef777b05f92fd3ae599b6b4c0e634631da0415855976e0c1dc557e7e24d615c385585c96d6544a0d494067186b80061eea13ae8612520354be4050c6fb99c4ef70abcc236fe3c8447be1d50538de8b3e94c8a7983e3155c1540b1384e84774029884769a83b4d65ea3a20abe28a20552b44f72bd44e029b45b8251af12f544c44e8354cf1e36d561fc582bcce8d76d965041da12a847f560a332125f56a5de351824d5adebfc784d8c7aef02d7fce8411c82eca86ffccbac7e624bef9d5389643b2af4eb4061e3f760d2df92016d021b63fecaab360e10020ffd8c2afdd1b91b6ea472e317cf435e3fc6dbfa6e6165e6f93eb1451270cee98d0ebc5844c63d8977220cba00d984c24bb64b47eab41121cc76c9f5872e1c92fa930dc64e2e647986e9364fc1d87abc5c8307e123b5b3d9978b6750a9d4597e7dd006ba69097ef76ed8d171ec555f405b366617f95d79762f221fea45d1c2fe60ee43355294ad29f4251e420ad1184df5e62c81ac189b009bc570bdc4e905aa360843ccfe23d5f84c9d4903b4ba8207e635fbbadcb24cd34820cf57ba06544de5274d914f3ba1c6755e72e955125954ba42af9843d9b524854916d41b5c06928d7fc537e0ae12666d38c1c2bf8b7c4e524b2449e356282ce713ecec8aae7251bd809a1378d9ad58eb79796cb0371502cd829438ea492747b35d5d043a49166c184010e2808e25cdfe295a7c802b9aa59a3c7799a42783bcf46a007dd34c58f99e72e15e9da562305469566708007d6cbc6a726330d3e4946077689f21206022d45fc7c8d63e82503d9e0846effa3da1db86bbce78bdc4a3b0baf2c9d739848f0b7d0208aed8a27f93678da443ee7993351a991e297d5289ffabe90cbfb169bd76108d89893989c8917d797a9204dbed97cd6387737de8e62b32b9497f1f689839bbbe772fdba2d169fb85cff9f6372089b5a9d1c22181e37d643e13cf32453b92ddec8cfe5254361d7433870338b0e06745c041587e8d55cdb59575f0a6773e81e0251470e5d4166bd152dab16b5ebd0195c56afb7286c3f9bc827e2d1d88a5aca4cf967b10d800893f341ac2393c26eaf51e3e80b3b4933e592fcb8fd14cb6689930af1351ae862a111e931a333d459f9030c63259d117665be625ac61d0820db802b0c3a4eebf49a60070b4ee66a57b4dba7470e38cf2b318184a7acc7861543fe1f9092bffe78595839b46615b965231dcf35b850daca02ed7fea203d529eb54d95bb8404fa07a097fd39d942467973e543ba45f125b33c4e592f87faba0e88a58879b70370affab55adb4a0be3233cc00a76cdde240ef2aa2851c9c1207510588b08780b05760d849d7dc3810051520df21aaed6ae1714021239275851a052f5c5908e0183a665025c8a740dbce56bec23f4a3a2f370015c0ce3dd0619e1fbbe9dfab828bfefaaa261a83c066b14eeb81eb78749031ce0e66078e307bb6e77549a57613fd489cb07309901db6aefcfcd2fc300e872e07b85e3668d89b03a1614c84cbaffe285db5f04ba8b5405dbda0609e0786e134de77f16c481b2e825269093f4da95db1b7d74573f2116b001ddb0b2d94a342b608fd719c06b950505bf104d755ce44361c41fa655514a55d53b89a93bfe9929c2d4bd902a494730da2553eb5ed1d6c0187d8fe81b3ee2aec18babb1df811da610f8216f5a6147c1c9cd5074b79e60340b461323543107da2c9ba6dcd72e70a523cbbdec4561520d0a4349218bc32c7561cc4fa2ec23f1953460c63ea33dbd0c338df65307f52781c6f06c4794d575ccda2d29f36b2019b73c7bdf4b145d7758f53bb29c3fa52bf60c4bfe2e924c20c125e8ea7bcedef2a9618e90fa722be3bbd6e568a7cfef39ecb8ca7af73adac2265934677b029c9e2e5e7a03be01e410c89138f2381b419d026750820d81020b390d7fc81e3d53140d87e7641916446dc106e6c0696d7624f625cfdd8a4729b6f566c1620bf90025e01862d1a3286e6aef76376f57186321f3c3ba3a4f44ec892ffee888b34fb82e1e489ce05962ee64110e1a028ebeb51e8dd57a6edc0ac4d118986421fd5c8603bd594fb47d667d97f1d432f70441c06ff75070dab152f4a247ab242e5435504291c909e0f545d03f6cd659f92d472dc90729ec69f8aa27088477587b8524afa9b6bfb97447346c324ecea4ccb2f0f7791970afea8adc7a08dc412f02e56ab9a44415339cfcc885fde72fe9025894a148609db9b6b9b94b28bdef1b3aaf1000b160d0acf86890e406cb930f0abbdd54811e796ee85a315746495b52d5c0141772ef8da1867fe46339d35674116ce1d2c258205125b311cfd1fc27b5f0e9873877eb01498cbf3c90680a7b855147e7055ee5f21913698a12ed9792ba0972be7125aea59a2e52989f1925ff0600bcecd7c0e63159a60c0244eab2d32160b493c84c976d37c980b23c97ea243d3fee8027a63278df871eed1e005c3321c501b713cd37215d1f8a8648fc7d2854fb44788041434be68ed4f07560aa500f099eb3f32d0499d2fa8fd1f2f40361d61c3a88a4a6923ad6d601927a2fc19636b138f45ee96e3433ed6574fa17e4d61323751b237151496ae1d583fd97bd8bde5bfd3a30eb5598d1e58e8d16e290ed1999a01ec696a8e8c42e95bc91ffd28d51cf483d80d45ae47d51b1266a45a67825351cdd9da0652948f71fddebeac502ce2fe5b115025d5f7ea29e5659992346a6a2f35e4e1a56d80e58b73cab326ab21fe985dfb4361435b0eb1d96cc4cc051755300e1e92059351416a09e6b5a610c6a555750f07c8e791336b359a0d36dbb2d011fe116b9e5f2ddc5ccc615d742a0951722185817e389111003e7bc038a565a782d7e5c1c8aa4ec3c39a64ebbfd014068edd89d935e3d443d323e5e84290e13d824f4d2e186988737535f1328ac66416c6bf66c6c8a653458c9ee3b41d9e2fc4f8ecd3b358d1bbd0221f1ea0d608793f02bea8da2d5ad101e20fd6ca89e07387a501adbb420e9734b57797fee0c7b2413e088c80c03b7c483d90156554d1d9455af936804348b0077b700926cbe26321f4995e28312445aab0017972dc9b7cc21c1e50d3946a3e4dddd034e3de34ce9306795150b226a6f4340ab795a6301962630b92341247ad8cecc9c82869136e865a059345a981a0fa80e88fad201c04670e2e5826380d3c96b0f63d40af834b5a6260e49730b00a5140e613741f0943f5761ee40850df91151cb531651318843e8d7dca30fd909d003911a6a1776a60ba7c17eff05683650c1f3aa55e81b13bf6d9183e5c78c8c31760107b89fe3547eb85e98349e715c1f661972d80fb855f150087b5d552b214d4886b52bdf7d901c042c0c330aa26492b6d8654e24f3c7e6615b17df7f0cb6fc44b3b9b826b4c6c67a87c249b714618809e682a704a763e4c508531b0d4a0aff5ebc3e193d847334b690e5d562e662fedc68cbd18d46ade6ac1d037c074c9838937d290e399d4dfa805283241b1fba295fc70b1f13e7fe0efa64d2d66b37013437e7171b02b945cdf1ff3ac2aa5bd5771bc84875542911914de423144abea40dca6520dc8d700ec792e22009ca89be915b01a16f19321398d28342629ae6ee194ce3610fb2bad78595270b17cbab0e1952983783d680b0e99cc2ed7cf273a7f8dcae27fb5d4a9d2b7131cdad41af16616913443986cd3da85afc09d98718a4c3c2dc761e6b498b1e4ef253c82768e46801c07adc9a1255546746e3d9fdaea0f4c5d5fb1e096479c159ef9cf2acd614445999e29f032f3025104e9ee6492be4aeb7d5ac7180a53bc199b2ca46647316120ace88f6084abbf128ae9245e914b33865249013daff59fbcdf1aae94a8f0633c49e844e0859c1509bc3f4fd10757f680579f1e81fe50ea04960aad197d18524139fc3190233e78783437f91bc15c1fdfad10a0e4a426dbfc7c90c0c93a135e075dd8a5c3927dadb61aa74e21bfd8eb5e5e90938362711c7bbc5a94a26a31c026c53d2aaa3ebf225818ad2b2ace5b9ee815dbbca32382705a01fd7e6af827e6020ed9e58c6c7df739f6f18e05a2df32ae5d499659bae65e70b2b8b58f60c6bd4623a9496fccc30100e71ef24e101ea96cd636f817d1e20ce61b74e6d4c1fb1a57b387087e3e7a87f58c58d93b26cac77f55d301afa1e9a87d3824695ac5e1ac5f7ec68196dcb098e2f05421a8a665fd54142bd6bac85cf5094525e0b912fc6f087acf2225003b550faaf93904f81b79779a4bdbb4680f5d8d6d84b23088588f4acf2d5b2cd494924a85d9083962dfdbe557a6d025cd516ce3ecc9ed8d27fb620f2ec3a3c94be130a5434929c08275d9b09affb92c6c5686405097f2b59618f2e62ccaa818f9a8234ad0a185911000e200b10644aca8c1eabfd8e7dd4e34c79af22476136ffdd7214a1af37500a24b80d262917facf13346b800a81874befe67cb476d77fcdefe7d77f11c04ed915fb2380fbded2841fe75ce4d80b6e96fbac837b78adf5b5b516f44e7912b6d65bfbced642aaed1f2c06f574b246362a9dabb74b267ab42387e46b3c007dc2d717311eccd74e44703ddb53ec1263503ea07d8680a5d96da978e58216826e033365c1c6f1d5e63ea088f468b2eff8fed167ea9d890b400fde19b163adbcd25fdec0abce004beb8604afb864cd5d876c58ea1da39feb460bc4d1b48baa31a3c95dd49e0e086e0088dc2ac2c22c03d88fcdbbbea3664c271b22efcaf701d313474dde8e7906fe56757e0776a515053e0de95b511efdbe52410fabc255b19949ed11cd356f216a96f1aa2a44afaa034285f77de1de8419f7cde33b208f8b186ee0b077134ea23c518ff260cef8ede43dc88352755a4486108c52d077bba2a30ded664e27c30aac67ffe8712ab92b9a520a083416ae1d6d07f5bd61c661275c00862a6aa1536a87d1ad84587ad941fb9d376587c59cd1e03b98d188d922b6c3f821238a3f5a2530f5ae6b475a5a1bfbdc4475990205a2621624180321a4d40e90da00603d175e0661c2647640cb96a88856ec0dbca18008cb865b2e428ae2f415ff8a54ab864fe5781e54f252eba89fb808f67206b6d00ed8d8e924313cbc45d58a1dad025bd83bde5003749266a2eca983330df596d0e084fd2f01ea6ccf3fcdd7048b18bd89ace256c166cabd771e897d9e0c785c08ef2b86fde2bcc207b7295a52411bafca5219e209eb81c1c9297b32464e10d8e5a62af99b4be1c037ee48aabc142048de8c07f1b60d927bb25bcec79c92acde29a1a1a77dba13865709b1196fdb04e198c5397e6852c1d1efbc03f9428e9d4286352dcbe41f585393daa077cc3f64cb86a36b9f31f28ec7081b2780e04f11763c89bc4fd4a8032d3e4f3983c311bb43a7c66732da724eb349baeb9480370f8a17cfe44d4891cc78d489878737ad5b78c8685488347c5c00296c2532cdc2fd9ee9069407582050e65fbe7d71d73c6ab4e0dd6c2d7d3d878f65868d4b9acc6280bfc4e4bd48e051d9a4d512a22e9a39ebc98af0678ee130e88ab0d9a2df17fcb1d565856d093ff523911068c1a101f5d0cfe5116b1dc871f0c40db6e57118c6c3c8481615a1ec54b2f2b7ba2bb134cf2d5137d1ca4fc8b34c2c58ae55cd47982b440f21b71b19dfc079d019f89e2b3e5359ff10720648e88ff844a6f6c98cf3cbcc6584e9e4539ed642bdce5a62b0866ea47ea2a070ac632df7a559c03c9638f6ae96424e0e7a2d386e3aa1234eb34cc484b062ff3f85fb9ab7f190dd60f1ef23a6c09a3b47e0d6c86f572d9bfb77515733d0ff9ab713913a7ce1c8540b1b8ec400c044d379fd422d293b24cb2fbb5b5c03b602b9eabd6ef5ad690a252b810abb65cbfd0362cbb8b22a7330a72ddeb8a7577b1b5af65010af21a9c0cfed7827a9ce07c39ae6e1408b194e2dd4175a2d17ecd5159060bf23043b7343d710762a9ca6821638250ed60f0806ae6353baf426ba76b8af2bc4479106d25861cb3e3d4f07510563dd6cb338feab820d1e659f3083f8fca729ca6b0c34c7595933442b6eb6d50bc85e2382f3d905a5fb9221cdd07a48475bb0c796377b1221e8e5ad33416d363c0e811748582a0c2ee81618565e5028b6e4d21a8bda04541e171cdaf1d2bcc5391131c192e154603f81e10dde072808dac46817227d3600d576173e4925bac32a63db2a9557263edf96f7bee0bc522a42cb1d420ff173f63c4fce9a454f5f8348ba1f758a377e1f6b3d78077d83fbc695a9a26995bc389c111036abbf9e8189eed54c9eb58d9dfb23151e5e71b21ed66b12b3aa83409d02dedde4f8e9618657f686f0e3aa7b75b318a84285304225131988fa7f20a7f54bd8c8cc8d611b1b6bc2740d51a02ce2142e9f3452bfdf42bc9700022f4fc73b62319776ca6cf5ed50951e8bc247d1c81372487c68fb02688aa4f50a96adc2fd43ffb2d4b4b6a58709a5b7edfdd4f01688ca067d820fad9326dd40704bbe641823ed90a3bba1b320a4a00acb2a80b34fe7c838e79299b9c761a4e0dc7b869db97ed7a90a80641770c000c122777d849cf4e8efb12875dcf9bd1373f30232b1cfdce5a685d886d1b5a55df313a34322e6f63afd4f54db7c8524c29a210401caca35d2b251ba6b15c90792f74180275392044aa94144437c891eff7514e191f90f937035a8fe18c9b0d3804adfa82969e53599c01125b40aafc633de54ab8836f2ed68ab5def9360a3acda8173d8cf70731982755cf4dfceef1b3f5d5033b445e5047773707cd0d8a023c86654b29bcdb5601d320500ddf20e8f38c0f0145cc2f4cd03b887913c5ceb575bece57d9b9b7d1fc4b5957885f8c052e1e4da1a01657824549c0b974217f59e10ce2e9cebd1d6ffd661157a587111a6da9051b24584a8f02ad02eac234ffc4c609a550d6f7ade1b3d0c8ba43eaf7b6b90b56a7605c2169593e87b06ce685e1c90b664becdc126f3eaf7a4096e03090e74792a4e6fd8d36da9bdab05960b1c7233096b429869660c4f1350cbb8182e9a55c81d060c97e4f1c31dcd12c7e28158b3320fe260b8b012b8b102e6e6331d4c0677c20d8246900cdaf041b4455813b9624db611f538e8dc44bb460bff530e773cf8e0227b6439d9e7a6f10403ab1940f7bc0c572fe01c08a60a1926339a8c5e23920de27e756cc9b1359206ec7648641b41d50abbe7ae3d7bbabe705d26ea271c7bd3efb4ab88f1bf2b8bb9c4664759909ea1fe52da416f0fce4a528372c24dd79a48f0746431ca50d6162ee90bea2883b174e90053f37ca79cbe2f4d3f79e45e2b8ce9b8b1c7725f61353af48e5debd15022c2a6cf185a5fa818ac588b77a50dd1b60e99abb93e50607fca9f544ca8969e3ced34f090bee8a008a8acd9bd886905ae7a17d4f94faa2fd62dffe21c7bda631c29fcfe44a89ec4046a06fe67eabc3214359e8b368af3abafb80621175c3a627c0a912e25e8de50a62f91da38cad7aa1e0f35f241cce7963ed362f3682b68c7cf7c017ade6b387abf70e929ba4cb7578a41e7000d67e0dbbe18742cb6129e557b3a407225441854d27508a50edc6004ea7c7fb457204cbb4a07d5692488b70924810a29e30a2d1c6083d60163a349b349c2cd9280b8073a501e17bf6e26df1b9a5c950302d1955ceeebe7831d05576b67ccbf11ce5b18b70d7b217f7e390416553642f6265beebd654a29051f0b280bb00b0ddbcaa24fa4e01191b43a62051593d207840a1d92778214e611522a1f6470814362aaf321854d88a2694709b42d485c1bf2082edb19165c8b93366351567ad2f9d121bcc8984fa823f6792204aa4d530edb3adf5747e6ec1e9e5870cd3aab11510eeb9f959ae13815e8d34fbf39a94e0a4d5ca61301ca8c7365b186f16fd73e7a953f27092ae717c4eda038778c41bf378ce87786b7416fea3ec940668d0c563815d4a6ee930c4c20d1d510ce85ca20d80cbaf5c06368770507dac5d0686458a10eaad57d9201054e43a71d2e50ef0ddf42bb3494c468332857f7298614d431e646d0aeee530c59ec6c40539377604fce16ba93ea5459f7698832eae822c21b79ab1eab3e9feaf9573ded6390566fe33e0617aabe2ea80b45f53ad5c720ceacdef73148a47a2bca9a36adeadd78381f83b11553bdd63ab978e4a91c426955a2eaed7c0cae14d55b7d9ea7ea26c76d9adc4ac4ec33bc361ca7e438517e108af3740f7797741ebb2375b8d67420297338e7892e9093c451dd78f4739b15b35645ba99871491f247ba38bf1bea1ece8d0aa7fb7efcc76566d9e2e474a47fdb26864a8dc7b789a1fca374edbabb3b9094cee3ee2e7b7c459a798890d4b49e2a5f3c74943f5d44f28bdab8a49452ac727b5e3c3d5c3c76745a3dace521fbb2333c1c965da4b979c84d53f7cf46b23429b7f97152d3a4c72b447aab45a9ea54bec5d739cfe97d2e17a5bcbcbb05e56f630eb522dddc3c847bb9bddc406933593afd64bb7b38dfaea47c77779737ceee1b145d77f71c570a39d5a5fbb3df546d76943df9377277e98a65f363ac2eb501592b5e9876e3819beaef79df4a761d4f26171800029b5033e966d76923e8b8db32d05921fe2c7542e8a6caebba9706aa3fabba706eef7437fe3c65e7792b253d55ab1e9fbafa40ef820daa3f773f375578d385a0b65c08aaf38a5adf70b5b988736ff586deec901c0e547ff67861a0f67be3da8afe2c5ddbbea09a8685993dcffb56abcf8b857169bf5dbf54f03a95e7e347ce0f1f4088c462437cf4ac9650f1fe9b9e171886168c8cf444886f306281cfecf2a291174fcf4a09f501c02a8828f200c08c99270ceb0f032ce3224dd55a46729902c030d298a5dacfa38a818b7a0480911806963de170cb82b24f8fd57f4b0940fc7683945e3975df7b41d5756e88b0af7b5c8c94041bc0c73a5046da1856f6c4e70db58df480a9fda3cf98200a58581b59213150fed18890112d28bf37008eebe15a2da1e24d80adba8bc76a89076e6810215f7311fe9d382b4ac70c79ecac9678e0860a29c037fb8757307774b6001cb73aad1d22a5901124a86644933cc43e2f8c1831626419b0b2f93dc327f3c7e5a26e98a56219c9cc0cb761484fb0a017ece8f02cb74b2da77609bd499cba2c9bbba9923bdaa9bab9fd10b95529822937b931ab3cd7ca58bfdf8fe28fb1ca5a819f2729f5be55d775df276b2d13978b52292593aeeb5641feee22f01dcb2b4a968daaee7f94a7eee374bf9d6a04d5eedab058c655f63c496fbedda059552c9b0e5b99f7ebb3ef81abe27f52f9bde7cbd07dc8f6bbdaad6e22a8db90bce1aa73098db3d5f58d4273beee129a46a12d9d6ff60ff33bbbbba7e3554adef93a0c2a5f89c7b71b54053057d67561ac613d5a50fbc757ed1f739a76e1362cc643fac17cad9c9c29ae7f244d337556cf667f9f2a33096a9018901c95eb68c44907673e4a16561d370dbf0c5778694c652d95bdf0152d5ba7df91a32ae7820d4b30d100e64b1433ee82061db2b0020d30d6cc46eab45e56cdc84d95b90c8144edbac90d8142e57e5b1de1b42d48d5acd07eba4a8980ea42b450bd9f8fb0994ad4f156077ffdb4d9ebcfbdfb6be6b0c5ab23f27bfafbbfe7aa85b3dfe059b94aaebcb2bfcf0e2623bca8f2e937871a362668c9224595cf5a1d912b1204217f85012431cae4000596252666b12aeb2842ea4b174757b6b062265f5cf97256a9f281fa67b3e8a2856902ede1208cea00628cf0885c5501a28b8f2abf6303081bcad0018e304f2cacac3023c71465e800870e5d44668639778a3b6a3fb7c5a94b123fe4a08413194feac0e28a2a389459c1e90e2821b68d013fa4d1c33fe850c12a5fce355250e28da42c689821c36ca444456491010a247628e34c1c33c90eb3038a87afc77b2a7f10ae5226675c97a6e8af7f98563925962ac71cad6a1327922592f93380a52bf2a36778dac788fc56b576c9f7b8c8f6fc6ee3e5e659e90387f1100f5a942b44fe77448d54f94f2eb03226145898fc558364ab4f6065b11f2f98b82c83854913d471a7a8d208c906495920493648caf6bb42946c90140e74c00649993fba966c9094ce020d36488acae7011b24c50300043648ca17800d3648caea77858c02c86083a4b0fec70ae12a2b84046c021b9db042e47720a300720a5f095490c0ce8c4e483a8191bee59c8baacb0f9eb4e8ad41fd8df40fbf873dafbd0d570d7c2de1105c2d4a354ffa678c0101b528b9a8632d0269445a94405ce4b21f01a8f273ced0918be48f98cb9ec4808cf84814fbc715848bf4b83648fb69e3f2d26212a864f3426db3b25d59c5266424908bb8284a8b4f7888b4a945669092bcfe4ee0b1d8eb6c6cb8af6b6361fecb45b4dff7dce022daf39a96addefb248739cb80b4428ca09f097464a42f89f673cf4a2ef3c2977cef59efcf2fac8ca71686b4411cbee437f19ef55f38c4d4e47b2f1c621ab3789ef75e5882cd53a10efb2f1cf29e8643df23b11cf38d95b151c37805d59fb5e2d0d00f086792cffad5fb5be0c42a7cfabdf7a5504214121781818b3417d1c2d712e69ea372e6a0231b316be9239809ef5440bff79e8d8e36a87b7f2ec1feb014abb1a2bf2a34f21c16b2f31cabf1d40ad1c2a09c344346eae7c2282d6e109630c443dc7bff241bc46a5688bfbf9295f11c0bf30702bae002180c047b3845a0675ec85368282bf9f31252920662a98e444682bc84c443fc85ba8bfcfb684acdc7858fbf0cd2a21017e1ea1e2591eefe398368e8483f13d09148b542472222901f3eaa7c11f88e3ad217cf08c2ce0a91cfa353432416fb699990e860ac0e1aa44519a6fa1391af255c3168d9ce8f2ae58bf26392488b52eb822609855a94efa9a1e387d4878bb478887cc92d4cbe7ca1e6eac2e4fb6c135a839ae9e686e8ef225e74caa0acb4001db669e721756ad8df2de77bf852126e8b1a5195475e43b38399aa6d9f8324f80a71919caabdcd91f6495cd67fb49a365fe70ced85dabbd7420d346ed3c2106cccac7183541d47f2d191cb807ac965ada3a98944bba93a1ff506e3f64e5af48da76422ab31ea1fa4feb982c65ba8e337bbe8f0431d7b4d1d5b86eabe75fff876c9214d652aaad751cd78d030ff273adffa11e8c8e5e235de56a4949f4fe56aa545fffe9bd7a07a64fb54a1d6403e021969ea6875e3b5c097f63db8efbc1b2eaea7bfab08eccc28e75d4d74bef51a18019d6fbdf7a140b57ffdce9c67ae85af08ec3ccf73c0e35f2115d7f3789e900a5313d7f3782a39bff33b4bd3a23fabe1a91697ccd7727ee79db89e0738c4d4854d5aad1fca799d67a510e66bef025d39a00553d09d3169ffea5e5d28a549cebb24b0337174f1f851649abfb39d0d7485acd4a23f0f90911ce6bf03aec372429e9a3a9a3ae22987f97bd0a27ff0840e2ac3d71259e5f62d7067131c41d07e0481fb1184f9dd8f20a87e04c1fb1184ef4710563f8260f320b0de6b1d5e29c109c79b6d813b4bd33f6a68f5a75c3668a3781ab23a95c769401860594ec84d0ef3771710500ecb72c2268e6ab1c9659ca661febca67a93515ba9fe32f09416540bb90c8b41838e6c46cc4d47441b270d1b9e57f50fb9888fe69a8ff86b50f67777f72eedb1ab79b88dd49a476d9b8f994159af62490189bd5e564543a323a019eb519833ef5188cdbe5fbd4d686402df3163928fc2ec3e88d7d10891da6520e1c51a3ebcd0841b5333ff024aad84a5c5fe5ee281a57fb6ceba8d5aec3eeaa25672231f614fd84db55f4bc21178c544270d8f073432c4ac85057d81437d9443095c989510f36f252ed2d5fee6818b3ce1221e3a8087f427e121fd68d00fb808cb58c961fdcd49d43e7a81ec050c31a2663ce04b31f37885a4ab875dc443fa83165bc9654d02e623974169583f270183920ab57fcd919686464649aab9b4d20dd42472b5056c48a9c9e60d4aab724ec5524d40dd271ca02a154922154835c8ea08122a9e4e5034f3cea01f11b4fb5d55a0fbef07ba52a20277e655e848b7b0fb7a852ad210a3ee8ae3f6e3f6fe502a94968359e65397cd108396a285411c2b0515697021e38e33c2d4e0031524a0410d0d74a49975bfa81579ebb25d0ae5ea7663179717bc0d86900263a4c41a3f70618138aa58e3e9e8045674c1e58ac66587d509ebd46d4e31385cefcaa9fb34c518ae1db6a0f10bbe784286267ae8d2c5060920b9418232505f98a14414ab303eda68723306644455f7690a2c4298a1fb0c46972ffc46172e5d86f0a82e3a4824de69aae25881bba1cc0d676e40d3b0adae26c0a8336936ff6b996bce3927ad818986ad14f38a86750d621ab6fd4d5c0183531353a0304b5a6a220924a826984a30b3e1a8892c28cc6868e2ca0a50b32b510ddb3a4e3adb66cc54520fed857657623d759f6ab041c6e08d5aed6a0dd2e23eac0aa9fc637f5803d0c98e01b5b8ef75d7a014b9fee89d83d259b20c25e0b398c3f6b584ab4f8bfb6005405de92b485fd183c8988873026529a5949c8302ca3827f87095ebcd45d1ee717731efe29c20d7dd69d8b8e9464c395db6f46de5e65bb85a1a6e97da74f5a8984c871141b76df3b05b366b5fff70d709f68ada6f22a8fe5b75ceb990578826b9965c5e254115b8ee436cdb4b6e32d98a703d2744f7dd385ff3e97dda06fedaabbcb790caaf7fb8dfc9ad96ac968c60941a8e5173b35c33c125caa53a1baaf2afb85074993e41a08a8a8a4e98f5d396dab3fbb7bbc0507bd526d410a801c715287a2093c597d90f3c7001038731a05a988d5c2493fc559edaaa5ccf00eae853b9a7272af792fbe942e59e72ef92e287cafd4b2155b9d75647381d5cede4949986e6abbab004f6c18d2c73fec4c9828e1f03ead8aadb2f98babddca2c052b728d454d7d4a46c55f9bbf20931553a0151251455aa7ce204511615c923bdd450130c2f3de30419b59bd2d9bd58d486daa2767f120d9eac14a742100f71e20814e838ab13550e30e9bb1d9e4a057a375b41f278e564be8a03ee630eeb9ebb67a3230cfa028b85765df7495a36d1a8dd6ca37673d0a8aedb5d8d9565f5b2b6b0a07cf43beb38e0a874dd5f6083b6ef9e93f88acdd20631a0768f0196cd85754fd358376af7cb74d4ee3730b642bae77625016db60a4587756f06dd444f05766108b448dbc271cf3daf8e60c01be4fd4ed66fe1936da2fd167ee030ee896623ed9a43ea1fa06f90b9b4c8791cf75ec8454d6b837c04c84cb4c8bdc702d9852f9628026aa0ca3dc581e2f0c61aa99906ca24e498511a2827d430eee7a4bd4e1a885498fab7507c97bd38d88688665bf80ee33a2e68f755f51ec855af97bb25eba5a4b22a9c4450a219d1ac5f8adc6f358acbb4e7fec9c649c9fa7daf54ef81af2f94b2819316b9ef1e49d5eaae96f87b61ac45eec711d45685bb5e535f1d794f4937be9434915c29e97077044bb84aafaf02e5cfdf55120c36888d5608f7dc1f59199fb030eeb99e1e1d9d15f73406eabfeac4a0a3ace3acdc6cb1b9392975b99e73eebd72ff33ee817e9de33e089fb4c8fdac1c7b593c7f6fa70aedee9d2a94a5703f65d64d6883bc35b039da200654ef1f09d4619044684a7082465ae4800ad3fc2fa41cacfe5b852e87f9bb27116af101fdaf25f2b564d6ee67edc20eac13af947455f5aa3084d712957c55e8d385a2061c8801934680ff766487389046a42590cf49a9cbf5b40a1921b24efc23119bcd0e332df68fbfcbb6dd0d7cedc71c7cad4b884e979c4cb47fc1fd97a641ffc824fdd3328e01c9a765463e950211557e9058031991c2e962a454e5336959cfe46bbd5d4e58aaf23f795454e5144afc8e35d58d26d4d151dd176a3781b73e4b5d94b96f49d923f744950b47aedcef7763683f839e2a945be8bec7dcdbcd9d31b5629adb264e3ae89f7d6a428629568cdcdd6515b158abe7a2966d1a483ffb8402a3eabfeea4041875fc2a272971451d190b2f71136b25f749092b95a9a8ce8499ea52db059b74d0a2f6792a1ebff393dbfc8d3a23e8486b0ca8c5dfef554786f6c71ae63f27a5b116352e281fd11828f781515a84f281072d6a24784e3a68d1df0b9b682b66ca109a34363739ad772ae9911596136a7393d3a22e63a41b2a3b089bb4e868a4131b57b78536e9a0457f964dffd0f71b9cc701e5af1c64231b0af252cc651c2bfab64ad02b0bdc0ae4b29db974ad423aee99d54b39bf70a10c097038a3862d3db4317322a6a82954e842055d802862e6cf45f3b9676a1ee08b09cf749e68e67d201bf1115bd199202b311690975ad4b279d5422ec28202c5dea05038ad13e5795d187444f2bfbd7c0719fc5ae44dd4c097ffcf1a7c799881ac4055c3826af0069d4c94a1180bafeda05cf7898b9acabf1680e1a246dd6faff2cf56c5cbbfa78edc5a214c3c57f0931a77dc855f2847c9b146e577f526586d7c3a47528c540fa76815e8081d265e1974ed5921ece14b897cf973d5aa9450be320050db874e955fe56b2b73f1fe00b5f85303508394d35b5a3ee915ca57cbe8b270552677e6eee6eefe15c2f288d4348d47a7ae833915a7bee072b2e06077f952e22f5f7ae8e3573d8462a44e28466a6bdb0ab92bfb460b6d6d8ef2bd93edb94a73d0376742867c838e5f654d8a56a74813bcb94b6d24b05c06d7ee7618ffeac88b89f63c55c5614866aefcf25bcad6d7faa826fd1b0eba46babfb645270f89f6d27f32b7edcf7039395fbafcf99a8d59033f579ff2969ac6e04c93600bd49fcd90d2e6049433836e9bf44d6a7584d254b5a6fa924f54c116a8875488217643afb79bd3c2d155ddbdb9c38d5b8bb7afc9ddf96678ae6d76aff27edfb541ab9f605d87ed0575bfc7f6260049f50757a16b7b6ca07a6bc556b71f17c24f9d40bdee5392918f6b8bdf1103e2f2a532af99a2a2221466cc4feb37b6b4a8a34f4f1d8324d142b5c09f264144f5771955df42a6fa8b5c84881500a83ab7197eea45f7c90db3c55367c43cf6fc1c21854413471451fbfb81b2c8c1a778840af2a32f785254efd57dee89b649f7f377c326f3b970c87f86af1d5aa26e2eb85de91914c86554baf7577d2c89cb78a6626ad2bd3f95d7bef6aad786af086c3fbf893655efcd99e7aafffac4652f4ff51fb8ece585af0870efcf01f73ea9303599df852f8f8af73be37e679ceb1da67a0f74f140bf56d5b7cea0be62c2fd7ab3b35efb53b8be56df84fbee59cf7582af7d2a4cde53e99e7b2a4cacb089fcf954b8efdec1d786af55d8a47b2e7cedafc3665ed864be7c2a327c6d186b51f540b3f9ad3474672f8fe3e477cfc1a4e2fb63acaab270bf5331741554a7ee931170d4311606fdd0e035d403030aca9f28abee931151f4184634814173ea3e198183144620adc0882a8c024adb588252315a0a7a03f504fda47030d4438133d1cd8830589a0edaaafb5404d29722aa90a1b48d1d284e1867d0ad8b1ce8cc420b55517105135c8820a2890820a476683b88482202692795aaa30bcca4934e6a333d15c73f3995ffc7eac836e7475b6387507cea920b2cbc92e0e263a94a0b3c4134f5c46696375ae811038a1101dae2f412030697114b3cb199258a470c284604a8c97b4c2c54d82962caa5840c3a4d4d4d5c78d02c5962687141da89cd2c35b49013038a110102620a08353a348b1516707ef0d29a23869b20d4e4acb102fd610ac707338e6c8480baf1a10b961635d487302aac84506333635394e09b747eb488a2866d9d451c05ee2358a505c0eadb392be35cc685511ad6ffc3138be645652f51ec250a4b0d95bfad24865be7ae67fb88739c71c2183462cc10a305bd790acd58ba61a79c512c7d417bd47d32c3855a861c493b8b426a678f6bcae55c9893ce2f6aac704ddd97335ed8664e98995fbcb0a21d715f9cc04172d9be60b1c19dcc685f7240a1e7479b986a424dc3b68e937e514186279caa902306272487edb429010d3828c181830b405057dda72b7298b972267602a94959bafe632c02b962539577a5b458c27543eb0c1ad5cb30a2fa87ab23eee2c2c31d5cb87044868e1366c8c20b23b6a431450f33740b63b4dcfc70668902547f708e51a307196590f9d511a76470a8cd53bbbb5b879d15600c33d5fd27195baa3f902d5400bbbbfbe787343206162b8e38759101264b1859cc60514111a3336a58010a6840410a9a053260f068f9737b6802c480a1fabfc690d13133050f6f11042b270c999cb9991b08d0c325c5df61b801abfdb3dfe5ca226ac5430ce34bf5df591d71971813748a18a0ba87e142f55f30bea8feadd511777d204b1c44a851e14c1b44ec0a8ed802451930696011c56d450c1754d5448bdc1d8c15aabbbb7fcea3f1b57aca7ca180da3fe91736d47ed7176fd47e9c6f00194c5682d80205193f780b4b20518413603071b10216377bb33a22f94b99188e748c28098c151bd628e3c5cb0eee6a0107a83b947458010a335f27ad821669765c4a38ad1e9f205e2c95a952fba9ebc5d8910662630b02d4314817395c50bb8b3029002205751ce998ab0537c030e3cc172a08e247131c4d184141061c6866fe25e06289f5b57a7c64b57f52d7479dd1a21b56ccc8a10225a0e082341b694d0ac344840b4ee0f0c4ccfba83a1938aabbaafb947bab2332ea350621f205991ec8d4c1451217696a7f5498315e6a03418d69a2077fad8fb6ba908a313e54ff0da3facf305a6469f1d7fa688b031293c5271d689031c7520d66829822c232459634aeac4963c20cb3a8eeee146a6fd1456d56edeeee9ea55d6d714325b24518313654d71e7173c3cf8f2eb288820b2d6ad062cb1622adeebe52d5a1d0a8ae53dddddd49149a3aaed4ba9cb1ecc294a9a34f951de68ada61c64061c9a2088b386ac75a2d104ce0c41a682831cda005014ca061a38a982c9ee862e6c461fc8d426d2e58a8fd187437127414ab6bfae0b2a20586a9fa4bc72285ea5868f1ad41c72f2aa783d47e2bb4b082cc1542d47ed7155080c9a1f65402ea686ab2ebeda350fb6da29a2cacdf06ca43ed5f0ec500a17193fb54dcabbaff9aa02323b1be5f9b52979ba7cfc4f48a00eb6fbe096bfba1755813d6d37088153e23ed8cf54cc61069f8608309518a8a66b15f4d3191516209a4a2a2d9ce98465055df25abf7fef3a07cf513ea95e77550b70feaf653847c058a303406a9dc7bddb7b9e61fb875b58114c16bf7ddea48174e368242aaa16ee473860730a65068224a05a2a6324b6f48f1c2152fced8406d5becef672546e2a4a62f07d93f212c91d5e54bca9f46a1294913284f5544f546551155c73d03a4aee41ee048da0adefa782bc3dfdee35e8221f81df3e523e197a1913ac351fe263f274249da28a10898229c664cfedaff8f873eb55f33837e1d6342fd49fa6340fdae7ed70705f534707a29b346d1ac9f6a52359ca0a56846fb5dfd3bc7c4c6b9bc44fba3dce5702ca1ca176af91ab864081750dc51f79fd458c202691c52d5c502a9aeaa3ab8ed5654485016d74ddae2583f27c7eab8d0f9ac8fc24f4209c63ea236d209e8b8665ac965fb4514097c4853c417345499710096901ac206388c500189197f2375d2134a5dae7f518cad190e870b132df2e384ada344c746ea239adc9b386f1a41d6ce0b13759dea3e51b1a6565154f7c9cb5458f7c9cb15f58907fd331fe7f9a1f40f0e9aad72a1072d72131ff1ccc565ad671c2f38610be4c0343c9ca04ae6e3847c448bdcd4223ff752b271214eed6f46e1331b74c20645b58c95be67eff947e64024fdcaa02b17f2152b84bf899bbaf23b712a36e8284294da8521b0de9ff5ac1f59891ba7d09f73ce3971401116e7274e3882ac341ca3d410b89f63943a6fdea38b239fc58d3464fdae8ed8841fb056a0075fd0973ff79abf216df940df606a638ba8291aa6c690a2c50d6b788021081c5ce04021d7c7041d8d2041fd3f292854c3f8e7a4502dd228fc24701ab42ce7f97914d1118a913aa54586128e33a93d88d222178ef12ef3a061fc68d2ac61662b957f5c2fbed27e574f5a34e3eb723455050a2b5dba3c992075e4850b1a23320c156503a178d04f5ae41783f2b3197e96e267288e728d0eda4d5ba6d858010638a4887a48e1083b705843e98e2a515c968120b44cd144111d3a6099f193e0b2fda205cd1865d8307534c38cff09ff074d84d32e31bcf519250f5881cfa0c76b3660575f21e96af39c7c1baedac81512af3b3f41ed3950be0de8d5ebc2a01b4339f9a0c58d3a961b3151372143f93add6c4a373755946e36252c4b6ab434f777b329dddcec174a379b12962526b868f16f083a245748365f21f1bfb9d1bea09f0b31d0ed875aecea2444e99f9d6f4fe5bd6aa702db163e692327af7d825319a93438479a7427f6d23ffbb4c4154f3c688f3f5f1d69a30f3e68b1a3186aabf7ca9f822f25f4257da2ca3b4b212b690ce504f550373fbada632b2fa2aa85233bb3b3342dd4deaba67d27866aef840a138fe7099dbc38e0f9d7bfc221a2194fe87a07bd7abedcbef35e775ce12482f6bc8fe7117ecf327ceb75beab06ee84730b3a7211cff7c79c88425d819e21dc909af1842e21176a096444a961fd33271c274e58a4e41d4563a0db4331b3bc418924422d762fe0294dd1163ef1a0c5fe80bce9cae5127ac25af192129052e5690ec4ef55931f648298fd08df6dc65957e1483f2029b28eeb34eed45493d7f384430c471960d4cc5ea1cb61dd6fa47f66c85f4786d2ea6ed0fe6cef2d43a1ae2315ada15a8ce23258d024422d362b29d12fe85733fd2cd5cf50fd3f3888fdae3878fd088704e0c28c277c87f1fc2b1cda2f504320793ce0ce7c80434367c85c419af17c0f38248233accc7cbcc72de321cc6c9de2359da636aba92d5da8a9a8fd49a4a8fd3b7e3ec09df11c7177e7404b7a63e6e377d5c46ff8818ca9190fcf8be7c5f3fad7f7bb7c843f9ec7c7ffe0f1c1f33c3fc67ac09dbd4097e2f1a92257836678eb33de40d5fe7da94069c9f37070d231834e610f3b68b17f84f9b27a5e7fbc52a2fad50b7c357971d19a3450b3d713cd787cbc8f70c8a78a19cf13cd3c9ed57b7c74a42345fdb7b68ecef77f1fb771e0e421f25b3aefab23b3355b2f413e6ae9fceae8783c90ecbc87e3878424a78a8bb45e8623940fe9c8cae422e3f69387e8bcce7cd9a20ea7a331d2e421fe2d50c543fc7b9581571ebfc3e35d20ab4973e4bfccb9873b30d0f1264cede735eebec67fe4346a784d08feb3a2ca6b5aec288aaa87ec460e1a94d3b8d156588acf1cf54f6f6df7a2fee99712a8ea21473543b560e829a0b4eacde77c3f43f50feb9b7e3f47e57ce37c4fb141546c90970de2be9fabe02f1b64c506b5be9fafd8209def67301bb4f3fd8cc506f1f87e0eb341aeef118e44b5c73b084a91538af6bb4238500ae7bf8152364fcafc5d212d504aeba5e8fcae901d50caceef0ae1014ae1f1bb425ca014d7ef0a11f21ea0cd3bc87a09bab6ee805b75c0ad2d70ebb4f997bf7cf90d28b9366af1a8c5a22e687369e8ca1b0bd84b2c19f651d10ae8ea3b219fc2b57b11d6298819bccc5e3dcc78763a2d9f111dbba826f595fef1f0f58124dbfb27f170e4c2976f619396e1eb0349e6cb4fb2200052a5ff32c1d26237965e6a5183a25cc872d0ee050e6d37a8208a8ad95009da1aed370a23663ccfa941b5f0090f79c2433668a847435fa9bf938a8e9cf44fe7afbd0c5fb4a5f940df498bfd4f6a1cd51e759f96281a62292b768043210c339ef75c3d3e7a00f9fee6f2e3478a8212ed0ffc7e2c92573fdec73b01f23d20f8920ffece1e7cc9f015011fffcf41cf83211520dff31f52616a02e47b9eca8ff7f13bf35a6650f0ff697379a76ef0c156faf140bec865df4a0f6a6926fa88da40fc07281fc813cd5e3294d2e4c70309877e8412d819d16c147f673d16384177f6236492bf331f3fba88aa27b9b4d83f7e0466807982a18bb74b95a5d801aa7238c52ff0d665de5b879c081ebecc50102344104e1d8752992297da92050acccc9364c868418df639b85ad830c6d1acc19e12ccbced7370a8b72891c30ab312be2d5ec898f93738143b6256424ed4cc43d90860b09d304189a8598305403363a51fc6709935e853c5cceba6ce4852c1e1450b2f9e911051b3065f60ccbcef73b07f28424bd2ac419f14ccbcd5e7202f9910d5346b909e30f3585f831b8511330787b630aaf012352bc167cd07e0f76ca2d8010545b306bd38661eed22051450379f833b050c5353b30683bccc3c9c1cd648542f384198a259833b2ba1d97fd0a4bfa669feda061ece97ad8572d3dcb5f7972ee58f2d19ce77d9aaf25bdca669eb23493066befb77da4f876d53e6cf16e77bf70e7acda29429dc3f274f1254fba97d08d3480502da00ac1a9d2efa5fb939673872e5b86db506b9f256eacd396718c2d4a6a66d9a167e2d6e468cf44f87929b4db79f2d722cd0af0b698bdb9c33c8eb6a5da59b736ebf6d2d243a7eae9e0db76e4e2e5c27551a26f837c64808f95da6f6abd0d4af39afcd2252a6ccdf25329caa6fd0e31166ddfe3b1c7d6a73cfe0949cf7d79ec79d27099af39ef3213891aa2d9aaae56c00d69cf5ce05a43a8fea36d5dff727e79df523ebfdb90d478ee35ee388bcd36f8568ef5519893879d03fda6bff01081b245fd3f9d5e7fc4b275c22569dd70983b438bff5da1bc901658bf3717ef7e6d7475a6dfe061c5dd5e6293802a936a114667d555b81dfa4a19ca3fc96dd21f4d82fe50c3404296f82a0da0bb526d7593d576381aa5e7ba16e50c5717283bcaec65af7ad17287f0b898eebc4b531e81faed3b8117824aa5bb89ae20a29d9b052a719fac486511de5055a0f25278db7aedb23e9ba7d4bd03156b52dd63f5c0c63a2a8523531ea48a46abf53445f7b4debe650b2b1a0445db6a8cd7d6d9841d7950d000a0803261df4cf3ee9a0a66abfdca434431d8d544de9a846558db7676696ab076c2c2881f37bb5c17cce80c7afdbb8fdca8f9b4726922d9c33147d5ad4be45eda384b44fa27d4c7b20ed5b4a749fd658aadb8f53b6df8d8b3a2fe40fb793d7ed1ed4526a5b77b795deeeeef670e32ee3f96bee2ea56bdc499c19bfbbfbc5d37a79887cde97fea394524ae972782c30284be9d377598b216fb988941ac83bc4bdbd76ada2016149c48652fb4dbeff000264d3b466421c8126570a3aa4e024d8a3ba2a0f09ee549dca81dbc258526a3f570d6c556ffb249883536f2ab5a9dec7aadef7497055bdd527c1af7ad5b3f924a8aadecdcd27c1593d9c4f82dc56bdd62741adcaeaed7c12f4eaf1f85cdfcbc5634787878725437fde405e0478bfc66333fbe72567e07eb946d2557389e2fb4f91157b7620cd325d3d000eaaec856d535537d5e695fb9b856ddd5b58e57bd2dddbdddd793d961632e7d54dabebd352935bcf78b681bc307f0d74bfa9fd3edb6d61b3a8fda357a9bcb446298dac4ce56f315db44150613779440c51c759258b226e094dd211875c19db8fda452ee3c434acbfccd11924345c1a6e4ded1f7b49a76a21078585f20ad13c675f678d44958174d3063df710de6f4f6c68f1b48da3ad96b19cea189b1b8fdff75525ee0822d8547e2e662449932750483042bab27484d31567faa78d983c6eb544f51d8e61dd7ea56a8541a814245bb947c22b11fc8e3b868cdbf77bdfab2554eaa67a2f1cbb6ebf44b55da9fdf3bd9ed3a5f62a399770f53816bb27c856b972ed40479fea4142311c47e03a3eb1c144ed971bb4557b804de59753a865178ac0412e5821cedef23790488b546a9561ace5021d7da63a219490ae78eb33ba1309435ce4d16e292ae8d8500dd5539e98a8327da67fa41a4dff7cef5f5ba552a954452d6676734e95ea3d954aa552a9a05a74a2150b7464299642d33f5b554324f40f0969a45a0cd8512d321736549a2ec3522da6a37a0a09431eab3aca1412faa7fbfda91d517d7777f7aa39c3522dfac63ce79c73763fbf7cb9e2fc650ae8993a329aea67588acdac5040a1f44fff14280d05de22806e2f6b7b2b9b1f5dd406ec154824c139bfbb1fbdf97be92a709c63d72f1c998848acdb0fb1122731121fa9593325b566ea16b5502b6603aadb18e31feec720aedf7e77ae6c93fbc3fd04411186ea74afb35747240995fb0d1cdba993a6bcb0929a85128184cafd5882085ce5b8d6b6edb77ffbe514f3eeeeaeb35b8466aa8eae4fba74e8062d9a6ec1e37ec7564f0d2513e16d9d7d319aaa9c543b4dede72bfdd32ed4fe62c29adadf419f995cd4220a3f537dab66dd56c8f653866ac4332326f928fc8c89bf19e442ad2883dd68dda7755f8263094575ca7cff795239c641965d1e39e1d9432a03a0b28fca31273ba49f7fb5b26ef22f388d283fc73d87041dd94a6de690adacb75a98014bb6d23ff2fd3bd08227e8fc97d4fe08bf64b844acf265f8b5285b7420a011883794dff60b8e44eaf6be6dbbc6daf616689168ea264a96db720bdb821f6896a3395399c0776c44fac749c3fae7a4d4e51ac54a061d5fdcefbfb8708958f7396adb28512e4ce9d38265f33d01f5028ffd776a3d0cd761dfe1f62eabebe44ebe21876a50ff76ada5104f6a243de520a669b6089ae0d48307ae80f2af8d4d5d2f26380257c0cfbbbbcfdbbe4f2a804ac153129915d28dc56bd57de2c2456df5a47154574cdd27348ea89e8da6d3fafd55abce57cd706c0e94502a17a57273f5bd506bcf25a66aa2aa3b588b1634b05458dd272935d5f39ac3d1486507273f4fea36bf1eae60a0ccdbb66d38381bb3df80231423b55f076c81130cfae27e1d66138eb42e5451d1ecc5854c988bc3b467a72cc4682145d18cf5abd75e8303054988c122441d58d04144440a34a4c912c6872fc66071218f6bfb150c74fb91955e376ff3ba79f9f4bd58ffcc7f6f594bd57cfac7c379ed83e0e0e0a894f419a29147eebdcf7927aa53bae6840e030ff15ec8b9a9c5167dfa67642d1b6bb901a528a1e1119bd5db7c505aac65955cc64c344c7b4d8aa5aa2931176d0bfada183248600216dc5841862666da03b92cc8094dc871e58a2c61729869ffda8bdaef98e0fb1587b1fa400d5ad4be95a469cfe44994291d4069e2c4830f56dc732155811e07b6ca43a2f2c291fb11b8aa88fa5560ed9e73b5a8bd4a09fa31aeda1be91f2e943eda16b220b536665653a9be9bf3bbad9309ff9c943ad1bc5f009899cff95fc319ba6a372713274249a610d435952a045d75d071be265f93d5dfc6c121662387a6a359091e1b57929831c9f7debf0a318b2ec45815f262882e4ee060431a245e0841106898014205a9a43a66fe2fca2c524a5249361b6826208d719a7d5d6814973169a8d0498b51cce96740d59191cef0c257681c749fa49ea4a0aa7f95ed6ca1a60560a0a24c4dcd26dd29ba4ba1e8c2fce7a434e6327e6161fe35ece0f4837fb1f5157282e58010459c3142073027a830730dc2c461851a13c071b4c4cc3f0a090d6e942955be5665d8dd384085a6aad571a12a1213a424cfa269e17628e5880c916c65a41d3528ffc8484e9e0abfb2cedffdf9c9aafdf6d2c6d6ea6344fac726f4622ef36958afb850fe31e69384058a4024691fa6aa9b50248901716010d1270aa1243120daf24128490c2869c788fafeb88c83d67ea017e7007a51aba36b670ce84535f46331a0f5690d8c7f206357e68de9eecf98cbdddd7be5eeae74d9bbcbbbbbcbb15434f8822b647fce39d7d7d7d79f35c7ca4d05a2eab39bf389874ec5ad3220aadc4b700cab7cf7de346e7a73323ff1e031731c1fb77da169ee514a4e29a5ad69ee514aee2ec7955672f975ef831bc4bf41570ec1907aa6c6a8d48c56854d0c19aa191100008000b314002020100c88c542b15830509561fb14800b88a4466e52954bb32c87619032c6104308300020400819019a22d20400003365fc89744578b1fb8e15af4c40d83c06965b3b4d9bcd8df41b24a0f0ec0989aebc22e5e046003ca503a891e93349b3a3bc2711692107b7b50f9ab94b2fe085d9edf5e3760275161d5dffa9b11768c8b67f609b24d043163d935cc0aef777ce1448cc980981fc5b1d8391e0db4ff8562804a28f9f25965dd33a378fa2664daecb53106eee23f7549745920e6a63090904242edfde5b91b11046534b0c6d6301450ef7d737cfca82dbea9f7bd51c6814bf0a16d89304227864f5f886d1a26c98ad86d1565be3379a2ba835e5972b0280145745b60ea57828ec9f40848ba1a2f0f06f2c46bbc206bc3de9fc1851e847314e8b412d0e73b6050e942482525211280b138ca2dec6d09ab390cb998e2146bac45f101f7358472748d9abcfa05a651d208af8cd4296378022eeca6a577a2a824529218fc537642b03cedfba1e5f79280774ddc91bb768f28b67988c88850a3141066d452509d668609e9d62377c4ff927a60a39c02368f1c823881dd722f0049268dc69d0e051ccf59afc0c79578b6583ed2fb4d69b3d1aac7085ca5d804715c5cc7d1813723cf687867a0c31d6c7b23a0aff27011a73ac2392bdc29223b27b3478f53a7365056882f9bbe3e6c1e5439005e4cff6e08c4fdb0640223a5b69df439d363a267a2820fe22a6d22520880be5fbf4eeeb7f82af33e1ab46329d12c97cf3017fb87a6f5c681c2d4ae68a435b782556a3c7467f6600bab84b58ac8e33dae9e7f954e5946d0bf99b764e976aed0212c1f80bedecbda6a9b75f0e4437359266e2f176744cb8755849c6273fbf68c7a467a3e82c6d80050646317e4f5c7eea58160544136b9b6aa193e0fe64c95f1fa9a99baf77e456eb11c087556177bf193f648b7e7759641c0cd07426bf066d94cabd6dbb130254094b3a9e3256f1c7716a510ba48ad8204f6f95290be229ffdedf1509de5e339762022476ebcd7a3f0aba641f7a344c2e0db21d14cff508e18c07a86c1e0ed7add0f49dd1e1fdc99a0c44b78d387642791b59bb3218d6b3e3088cec8a2cddaab1a54940f95bc7bac763f18c04dbcc209b503868d3273498e75603d9733f58575ff1e37dbe83b5f71b053f96a7cd87aa84b93b37a6d3d96199c49d2ff869de405d7c0c830fe0e17f7f746e265e3481dff67cba395fda0663f95721de462194ec952ac626008c5df7b187e63619b40bb0e021279ac08388ec3437a21cf6d1e518e7c3dc68a622264b69178dcbc2cc11599cfc553772b9d50e063b31be6715d7f2cee55f6798f0b2fd64d21dd94c16d2b9de04fec14c87f72fbf47f79c81a8beb6b10993627d605bb0104e55d0de9d450869df49761a7673f79f603ba5daa49db68d6300ba1db546e43d76758d1531e6e0c93f696128967605d5192790f48978fbc012b440c0306309f2552a30251335d7fd15e6a239644de4296a34c1351b0390cbe8c190f1b80a6ab8eed988a1063251e6d91f505588eccc355d47e2a81cb4737c031dad9e31e18d6346826088d74eb0c1ff4fbaaed5c7eac5f11cb75ef7e310c74e965b7c2c97cc47fc02d637216447448a1c484d39432119f899e3da62991e01c0bc163192e309cc05b7606f2600bd93798c43add40c7400909b1c41908a2a5cc913bd34371e7a71daf9d4cbae058c167dec31d0dcb27c81bc4782450d7ab85deba8f052eee3ed30ff1d8d568b6fa06e7166ad1147a339dda95183f242b5eb68ee5910e9b993f4ba26c94a6c9a4fe47196bf9573e64f4d6676073b92b54e755d924e46228b93418a4bab1de57b70af4cc6e178fdf4c428a04c6194315e7796b42b5429b893f459f56e5f472da8484c80d5cae85998002129d4dc10b6f051a220fd50ea607ac28ccefe8a8fcab66f4a5933e9b9e612a1ea1f61dd8cbdeb49f9ccd79e010361d31468a7c12a886686763c9f911cdf92f8db2370318dcd398767f32beb899d76941f70a2d999930b2eb13dc1668f863db3c026611d17285a3248580f97f180549abf9958e277becd94abc8297c08920004ad0859e34ce9ffd49bb70f1ca7f8a0b6248dfd76c80f520a7598d53725f44b886f135a42509c0f328c569a7b029032b3023d77fb2d83a5ca9564a6f02c2e2a29ee6a6854c95713a7251a08ce54a0b1cef644d691eac55b864079e90002ccf6c730170ed16243fc5a0a914339295f90a92e03d8fc4a06407d4cbb162b6f958d8da9a7ec904e98fd3acefa623b3de48cd029c8ffdeb70b251cbb837312cde82aa04c4657284a57cea4857b7cc399da96d07330b553130af67e291dba0200912e02c681a2ad8e614926072d6701fd959c4db6d6412031f136e321b94faffad6b710c86f332e4122889b2df1c47852f3b163f4ba68a25df91d0fdd32df7b06fd51539b6ee74886238e1bcfa52c1b03629fe3b89da9afe1890d1992814d145c916f0e3b1402dee4b93d32868b0d761d03eae57cc95ced00a1087cb0ed3e910413c9cc4033d1a0bb712602c4b7ff4510d68f1381ec47545ab8a2bd3c7c939650464261df01cadd85e5f8fc263e4293e5b2a5535a5169726661d8991601a279ef76782e9bf4051c9f38fd1a4f1bc49a0950eabc37db5d4a77b7d88c250027bdf18f4c784b451e833b356d6178aac30c99acd5e352670e85e7b59581e6157c6ecd3429125b192320ef7565ff1c04106988def05ba54526ee5f5a517d400201818354300d7f8fde28b6330140df2b46649807b57c4c4dd071649da9e592060ae341cdf0dfa4d930f445272618878909ff54c3851411a830268d4823f8941466ee91ac998bdf44b57e769b4a579115aab5d02caa5eae58e6963a6dc6c9876deae19fcc308a6d3442b19907ece39e353cd95f88e9532912e9dbaf08a7287678753739d73df3e8b03013f31e6dff46d967585d8f50ecbfbe9e6df003f23a3815f8a5c7915f53ec0403533abf9811b03742fa9a2801e2a85aa87915c45abc4874407e490a0343aa1faba62a174bf92c02b143c48619bb7d86c489886cf637138c6510b81eb3e52602b33ce4e68111c113335fd33a0a20d0761e00a73222e705cb31a5c4e149f564b390dcc2f5d4f3ffc26e12af7a701bf66fe61bf500efb7e38dfadae9fcbd4af93bb8453a5ad161f2e3920d58bed92bee7f35789ebdc218437c0ccd45e04b09531f2fc85072af37cae373be63d0806b25565130cc44a5641e9e4e731015dd8e4b03ea2c7239f94354dd35763f49c71d28f0c6102668751a9e80889c7ee9188eed1cac02ebf74f2171708b15da8e631deec5b684dc0ac09fe73b874ce1c9dfdc84f9c8a80b6e2668c17dacc370882ef669a30286208e8b489c89169e1812d7a2dbfe1d55c7d2158a6173213418349fee88b33d33282db0369f02164d0ca42886ae4013b3dc369519fa0d04f02e13dcb025e5c25d84343e6cf0c4b57d1d311b2a51ec1c77607ed037468b5197f59bc5c1686704fe50bd20c062e777e7e8b30ccee170b5441ecf506713e08c5010df1bb49c2a1253fb51642c180b5931d9b4202b4a57d757994817bcc2a9728cc6399a5164c06727d7c25efcecf59fd52145873896a45de5ac40ab968c8112d7f9f75f529dc0c30241a036328f442b7e908c2a3f56a01eb2825ebb2abae41f9dfbeb47c080775407b4340fe834b9abe69625f6005d241a9a0d14abe9a13b76a70b4c5b6e30716af723a7dd410a845592b77b1f61d24776b402bf82bea60d326e457dd055579ac23bce2b133690d465647bec6c9da579a250ab11137b4e7664632179cc46ee59ee32c7db023d4f3b12999813fb48a8fb15d5d06b39b04c0f000ca9e74c2ea7bf764f9108556e9009f1a3125b6d098e8ea01db7d217b49b8333d34dd7523b0825340487c3a7bf2421d7b0070f6a4422e426f1aa14a0711c80ad47ff50a7a2634310c96e7029e316e7b7dfde0de5d95478a749089ce92513801f307dc139df329b2860c63f25232527bd5b2b94202d9b7f12400eafadb0632acefcde14cf35165c71f178595335cc07c0f469d92748ba052af5e3c71b7bd9b08ea449ef898b144ff244ec05594a14d8279cd8f316fcccd674cf3cca85b433589d001147acbe15f0294a1970da64f5d37ae3906ff499dec13bdf0d701685f431c1cd4c0c5b6dc4e2b90125d779abb2f3dc31b6adca7344210f965ebc890244e8bf84b43bd6712c33cdb2037d0e4e4121ed5ac4c2cd93864f7063b0e9d63af2ccbc662ed530ce5206b34fa67b6fbe3c4b37eff9739c946d8565376805a41dee0f7cfc2f067e19602a38cb5c2497400d6a82c33d541b1a008cd37b92eb4bb28c50434835dc3f371f74a8970dcc357d5963418af2cab01b339e18ec2189a6d02ed7545fab15624b9c51c664e96058f36d42752f08da00453353485e45a931d8913e57fd95f2c130cd0f02770c1331a3e05783f77dbcb2f809c32bff1c7eec0b09d6120480dc4c5f8085341b419b4776ee729dac5e88f559b2817aa453b509b8e760ff57eee83eb4caa2b13f1fdbe381c8e69d3523b93476924c6de366dbcfb7028e60e10c0d99c491a3a536691da7248fa1b9f0a7c7a5a93d324c617e3f34bf989359b81e9ef1bbd35e821ff40cabcde9337679f67953af77c0a6aa42a9298073304017906e6ff899cc8f72699add05c6b40efc3981fd425320f5ab0d34edfac5a02181674d0a03573f362f8030358d7f48ff079d75645f76e6f3b617fce66dc28409977ffe8f7c7ce4726da7ca5ae132c9d2c9a16fa56e53f27ac6911890d84f3b984b6aad0f6e278a46853b1fbddfaec523f99d46ee6f0eb678138ebd0f67654df8904006e93712c0ec5ae29b9c0eb523932c238f3993e6548c7540c23ea104f8b3564487031bd36c200d0361404f9aba71e2ea8a89df9625f42bba98f7893593e87fff92661cc4788b1864b345e5cfa4e8d8a6c99af02f0d95860c7294fc256c81756a8bf9213cb313c6ddba17d152c91aa36b6bc2f708105026b3081c45a182e15562b8b15bdca8b0e6bb5a641db791438b8a516113227179023990d4626804edb1eaff7f567ea97990f1ce3f6bf25d73a8be99099553aebcf4b41a64d899cb82df2fd4571bc4d07f30d760d52a70cb72c4863401d8f8c8538365b08ddbacfc00cf7f105905d136e7152e1b23b976afe247b91eeaf136fc09edb77f549b54c1235ae4ec13604badc073b087391496c7634911b01e09216203ae13442c65ae0667e39f564b7c2cd9c3f4936c30e467dc4146084f0dc83954b56c054b33c18e6e32d57ed7e44c0ff19528f83cdb9a1367106f6e4877aa0697546330a9c4d361cf822842c9e83258f1c447e350fa698cb0d96af0b45949b1c165fe3b399d1e8de091c5df48e9ed9b34ac992a4dcff96ef0069ea75ceb7a8b1ec4f1c951643360512fc577dd964eb4947f881458d9274730788050913ca8cd7b99ca0149c5ac50cddecfe1d24fd492147894e3333ad4854b82c4616252c23d1f31ab30b5b10bdd950d8434a64442d7237ebe98ad29df9e7c2612a22921e927c11fcc3ae2b70244b5bdb5e8a82947a899f1cd558e66fb16563decd84c51c63896239a80bf21fc00f8bc6796bd94bbd06e8ff8110e0613a8dc1f2d5ed0e74408ae5493967e7460b8480360a14b073b498668a9fce69d04da7bf767a197ff63db88f1249d40c6bf6a86e2ef24c727e2826162ca3712eb1c42032421131195223e58167011a1a2d6a8a3601b49d29886615ca3152759f1011b15dcac2991fb4b9e337911c03ec51b770919cdba91d5fc61f7f6adfdee2a46ba54710991b8bbee22eb4827b24236f74e279cbca17f1d6a54d2df04e2e4920d688faae95043df02ac32367411978b362cd9351b431f7048854ed8a94037a8d2223ff7e61950de9b457adead8a0618b64ba0e37c39ab22d4a0c3306fc9d8027b8b7794149ba045cdb1577dbd3cfeca5effb48ec191676b2f6df1cd986ef252da2d2fc54954e3be99f20c283eef53a272fae27144e0498c582e6bc500cdad209954100032c55805605612140409d69919f1ede26dfaad5c78ecbb9dcec71f9d08c8f1ef5496932bd6a05d97cc07290d940774c4db21796c65e5c0d8aed9b9d6c368766c415ad8eef039938047e86808a79ea03f4f9ab75761ef88e19e10d5d3cdf06520fe741ab63000cbd1eeb124bdef1c1b8cad22c55e115250a0059e8efc1f6aa4bb7168d9d5ff471400ef8ec65afbf001087f95a9bfbd2af90170d40f04a0b70f54502875fa2d7a10d3d97a944375569f6ce3b1c4004ccbd050708828f8625bf89babf9a4a1193c793d352c32d568f80735ae6ac727dedf82967a8d5785abab27b4609af8061401c9f32897b2aaa14440463445baab4ae731bd6a15896a6c6185983698ef14eb71aa16ebdf33772dffa6636f70f50d18aa3d2ed69053aa377cee953f516d7545c94b8d9baabd3e19d0bb5f7ab2784c07fc75e27fc26d9c57b540dff13499449f6ebb600a477d99ac17e42d0067acffaa7f0d895bf7cac7ef730683affea57f5a077e59aaf3d692c1e87c98a04e6e16190b831e034e626d372e4984ed30809637b24a4efe602f81bee9ac2175530005bfcc3e17e3ea574e859ab3e7d3563d43be41ff50608a90077c470d10b46dabbe489ba01d67b094f6e42a3496ead7d556673994f563684ae2696d89615b861b6eec821e105b618962de3f248fb8b5027a661f23b43f7b01eccd2e4746d0029822e2896d5004f65877d39019eb09d147a86ec8af2e5d2fb2d3300c334603692fc433786c573b14ffd981cc676a10b020f5def29c19e9af561fb2696ab5a36d73bfeaef6ca1d49013d3e850f07f77025f901a248221974f15008795f193550b990d804e0dd81a09bdb4352312d1b26f26a4572ca17f836bbcff211f26029112440e8bfe4a619e8dbc8153fbcb5d0c4009a03d02b459b6bab9e3345961ed4846d45103482f5a946dcb7af39a445acda28020342e26a5b5ab0372226769991097e444b5d8d206d2f1a21e3a4423b541292767a20d2c3c3fdf30da649d5b26fbb61cded2954342d2459287f47b298bb58ad3cb32a26f350ef27f41294ff482f0a1885c0fe55b1e755191449aab1d26e9f24ba23fe6b00a12aa8ee848f3b83521ae08dbf051f14aad2865d19c12c34a39b1f3b54a3fe1169487cc0ca53eb30ac92a826d8b7c6cb4a59c41c643831e62ae4b8ff7482b622cbf8ae9adf0300bfe0261a2c3d248dea00697a9be5d461516818ee6af3a96125bf05e52ae55324274a6ae597a62c8ba9d612b93094976c428693b1a3029c5f89a80e5541f9b2a13ba6f3f304c1766a3aa00602fbdf6df1552834ad18eb0d5ca6817b6997bc28a00dd5fd2fac056f0a181916d2a7ea9175026abb62804ba9ea3999fc87496cfcb317ebea8a9ae220a063512075fa555c03286c1b2ee6d5a4fed4ca497ea99f08c31701fe140e2b3f863ab3cbc2117eab6c0f7a3a892ca5ac2edffdd37702a9c8f1888a974224a49db100846b3ac2b240ba5bd6e832964a33ce86943f06b594cf51df3b701eda4fcc0b34d52a5d27ad719ff034d565c3af4d92ff74483f3c107f4b9a3f197d0a7d238b3b119564503dcb33117734c481ab25df2a2d76cfd73a4fba9a6ae8d253656e859cf8834c1260ffb4034b9e7ce9b7b3f7547afb237bff9fc5b25a0eba9973feaac690897ee82d56a75954c090eecaadb710813dab028ca782e9079c602531869a0c15b135d94c84a424f5ce0ae97594cbaf16360e0cebac440b0cd4a84cda48d1e01a1dcf30c65de0a25c67079d2bbf0f24bafb9802a4d88760b2f3ff3d158351f25a48ea8d566635812786a6c59a9fd655a1cb6f2e74b245d4974738cc81c1a644914760af2f2efc6974295c2818c676cbc7906b92112df1d14ce434091dd22063fd49a1b0242ccd8b3000f140889aa8ea8ccadc51529ce4722ac90031164b7498dc9b9ca9179adc2179e05da728ad4ddd091b3f1393048460ca06a930eec3910bed4a54ec01bbf25a50fa4abda465deef28e71c49e1d019e50c0bda3d72d229e012ee0445391775c96a6be330496b9133359b897cfe85f182529a8d7a81db1e06d4fed42f87276c4c3a7a78116b8a611122df76e3cd46933c82c7bee72be8b819d3aa148cfc4c3b800e4f579b5d32dd00f63319eea8b246af48c003e725a92786cee12d1c25a6399d6dd6bda1b11b66a02e2246de3e6746146ebb1803c6cb7af9d38feaa0c6b8079b7aa6d5671e41eb61845102153f8a0c7f163a9c1484fb4500cd37b9de826c25cd8d1705e86420ad143e36d1eb4996ed616af5d9f84304463a6f6c83c5fdcb68f11823e1adf8049732a05089f79d584ab1200e174c5c93da31073f119998ded8ab62fc2cf3f2d6b8dc5e7ac18d65ce65565bc948a5a467e93fb3931ec7d5f8aa7d032ffc28800de51daa1512d8e11f066796ee7797a79397bc1e60202c895f7753f586cdb0b4fdeefc28af42b67611ab21be384c4c8e32c3c61686c0165aa25542b7635c0f2d65d9150d0fd5428568a1eb1ada52a03d09dc54d2cf986f66e423a861e2b3a72052adf2561cc154459bf3e87c0790b466b0fa9f0ad667a3ac4a9034a033c348fe1b82d0abc689d0808b5ff47665850c8bb416865d6c4c2607da9b6b1ceb00018bd2384afa62691fdf0a638fce9071a19d3b1aa0cc087f19e85a74d2d5d5df1d485c4824ceba621e991e594a37c3d904fec165ee72d7c98e24ca872722e1beac4830b8bf6e002f5770533295fed08fa24812bd9ecb9de0e377ccc5be2784e258e598a805f100312e673c925a2a98fa584f0a18088f32254c1d172a688ed1fa75186bcbe368d45e1002e42164974bbda900cb24e49640bc9fc501a50575af65b549fa33aab716c3f532483aadc7d1f6c87be2c59382d8a16abd0381f4af0f1c548b63c243bc40f9612c3473d0443ac97e10d8f3f6aaa832c9d317a81949037bb5165c7ea9f2648830203772c0d71a0c6c6e343f27886cd51d54588fbc511368800dc60b59ed48857697d4ddf46907483e20a22a7d2cbf854a2611a9eaf486ce68ddbe6a3a400b358ec64caf014415fa703cec59087c09e89c4841dbf81eaa832440239501abe9e7340470b5bd994da65a2ad394d194e18fe7875d9699220a1d32c3c16dd7db9df562255a062d346edf8e1b6c3e7c164f530d6faef927c6f2a80e2e67401fd573f46d95ce78cbffadce175c5ca4991255fdac833c18d2e273266b1228e31e35f0cd012c276f15eb963042439f1a17ed7a72c50f255502b8826e63d4613f1b5584a985314487c2616271d048eb7642481ca30d41591cf4f9c8de72771630406993b6f0a60fc17157bff20287f1a3589414446d5c8215be82899d7546efbd502f14c5f37e036bb5d14540a6a51cf0f94808150062d82a1702dcd3cb71ef7ecc2ee974d5f512d356010a1e3991f863d241c43ef81c89baa419b624e95c66076efa08ea64ae3d90cda71bbf691240f2c915b53975d42bb7a35d6a89952071f31d079b5e5bf427266b999855c391add1a0a19216463b228e58987447aa09b77c4907761a2848d46f53a552eaf8cda8399058a31ddc972216e9b4619985f250936137f1c2b3828e763898d0cf98fac1633e541fcdd9a8a7c8e81fe455768f64af91885971a268af10c423f2dfc7849683960dc27e04e50bbaf62d1b98bc5c9d5bb87dcf684a0b14ebdbac70e055336e05a045cd9b1fe200984702290207f933c8c41766de63ec318b65fa9afdc4b7fc9fa7b5e547171bdf2311e412aec175ac0318d102fa0024020524bf69482176e402eec205dfb0075d9f5992f84cf5ccc3b755e075ba183b04f60af11b62647fd83d60832b22061cd5df35aac7f5bf7c442bcf882030438cf3ed82760cbe3c7e931dd45d46149565ff7ba28a5edb04cb2a95e95ed6185a90f28ba568bdb6005532a93c7a08bb5da0e56401501dc09b926ccc3b27c373488f5d22891c4b573dd37e7cd89373b3a23a4453ae325f0821faa0d0a3691390d44bd1a99deb2b51ef15332534b93d106e95db234f1793985e41c2d29b19696db3aed5ee0a1ab9309058327a81d793c195e56f63f68d5cdef9103b68e120e2b0c428d86267856aa4590d8a8b558f62872703c80bb3c6d9fce460df7533a91f9b40cdaae6d17913295c6a8e3433d6c591d2629f19cffca17ab75ed8197629bf84cc6eb6521c291d7640a300b64046c364337f08d2b2ca9a60ba2d31dfa0be95f3f1da5d02baf0b4f9326dd1960e67f64975b596a817d5ab41a80a5a34050ca0936124c98c29cbe805a488a27e0c4e57637d8307c4f95544f222f7d9b25ef943b72670f0f86150a5a61e3b6bb1ac0395cc2fb0028bc202bf50596d67f281e4a4f340f9d427f370e210cbdd95945227582e29ce74081b4a5d9a0b2e020488c4492cd13012b234b84a30420e04bc6beb7c4f96ae5218979f370306101a3009fb9a7bd39a9d71ad07ecce75be2564617068c01527c33e80039ff081bd6ae5d79b0906d89485acc9c4956a69eae05fd3c0aaaf70ba05e82164cf55040d270ab1cd2ce887d07585378c4bb6edf65b6fb15ab0228afe50ed463d10d98891e431a6c1ba85b096f8a8a3117dd622c92ea7943bda79c806e24d7ad3a27ffc0d944e7e1edf9cec57b4a5e0121131e10c130ddbc190e73fd59043274e0019e90af9064494366be3f85a553637c8108256bb95ef7e28ea88327d18079053c46ff21a497774270b6163853ce4d460148453c186ca946253a8d5f4ca4cfd01c4d79fe4606ca418bf0d4923af1060e261da83657c837ab99265c07db9c95f92e8fd92255eb182e4146de681f1d7684edeb11adeec5a86866a83d1d55438a3d5b6b895988dcee622b5d37764318d5eeeba118446d4ca0619060e3c9d912d2f235c502292a1e3019e6992e1968003f4a2deb2af464811032321f7a098f24e12fc9362db56c9d06a9cf2f76002033b397978c153673508972d40de1a3ca9a71630f9a48863246646c9c9cdccb238b9cca45b14d187fe42465cc54e357642050a565903b6066f295c572abc0cf78b19b044fb5587666f953e734691002e13f9db1a59b0a33b2a70fb4dafbb8db6d96d08be8ec8545ea5569d25e49c778f6121a2f6c42e637f2f785d6d119ac2d54d8169e84145ab77298ee0c67430183ab501283f35c373fba41ce055b1aa69e9d521ec0da0007a02ffd4749d3356d766169b05673b86db119369c0be433a2052fbc7f0318c131c85bb9b60001498eecb29bf0781e8b01de6284d7ae3818fd27410f7d7a4fda8994ffbcc06e8ba2cbc601fe16d19a620ff6ba8869856566efadc6fab79b6f1531166dfe7e310cbd1f231d7f27ede5805d129a00e2dde4da35f766dd7456db2b32a1b434675299088d61594c35c4ceb33dc71b415b475241e756e9eb3d7d9bbc951f0ce26a83f938b4ad1fabc24b56b5a32d3f0d36f78ffc6dfa960bd3fba43141267786143369a5c8e1ab69fc8f92a12b7daadbf4bea4f2a9ec9daa253fa73fc49215b9e4f890d49513e48f8a1b6df60f2da6e765ad70d2c9af0c54b81e3a4469896de32b344cf92aedb8d378543b9283aaaa7af42d75ed49802abcb6f66c52875218c3591cf74cce4745d6f9581c3645b84a9d51564b4ed84a81e1faae06ffa5b1b8b90eac024c6221b7c3a22030f0cff2acbf621cfe586e229c6a2fd6782c82cdc86861a60604d8115389c656a83bc5ac1ea38c8866a8b319fbcc211a4903faf0915280b98f8d319898e39897b13ca6ee16b8c29af248ea2bbfa208aa34a465effa6bd94402347dce9d2849763c724c627602b2a0c4717b5c044e1a85d8cd47ce98a8b01a70891339e571e5d9c3a3e0a95341a12343a6eef3ad5d154540e91b7883c198a207c0dc66aa0a906f8841f458862aba42d049e1cd908d9c271f6d04fb59545e2756c68c602fabb8dc4daec0597a816bc56816104dfe00fd49616076bb565a987a9004680249cdaa96b26bb2ef44aaf346d6d5c85ff573b31fd1a934783c5462b681fea5d58177fea95f7d6bcb511d3edea8aee22cdb1e79cef3c4cd8eb0314433d45f2396a54556ec21a943072af189c6c27f9bdbb5de27503efaea51c6cb857a9e40458183f0519c1afe3332ff4eff2efd2e0468936aad67e39ba8658ac96eb6270da52f1c533814fbd37b6a8ba015fa0d9858259d9248efeb0b3db5c392ac6f3e9b88d94d5b704e9d686f0afb696e10c702e64cb3cd99cfee350a9ef0414f889d636b2e91307142190185f40ed433903441f9903b145a7c8e91d236a0a85c53ce04f2fcbacf772b23136f3a6b8bc62f8ab6c096aeb5c1d4ec701b2acbbfb67ffeb62e13d241fca00d7b94e38a1eb53b42e53d0ef9de91046e64586e627e54557b5474365b2d7b3100f52d46740dfb58235b074f08420b752a6576045e0eb6f8f910c447789964eed3733db04a3b9d20cd8a692e12c3e42bb1c6891b41c4be22b71947f1ea06b8eb770a002e9b91a7822c952ed302cc0ec5d03641322d16e0900ad3efdf768abd129034da127d36995b4050bdb8d2431491b1c8ab666a56a9cea0767ce4c5762b5e967ef41619328d3d8e5f4a191bc799e0fc2706db12d274374f0723ac0a5155c3c95535fc0cfac4cd6c5b5900902224b43a11de5a282d4ad439e0d606671406080d551b557b0a828caa555aac74dfadd80d15f03b02f58af639f9e96795088dcff87f2a508e24a802732a39275a2327e1db4ec90b2875a0bc40613323c04176346ccd4f9856811eb50a388f9cac5ee380630d34f758774784cdaa263299cb1560138fb902e2889673b30f57aae4cbac05a4d44043df70d6abec87ecc4a7d9d1d9ebadfe877508695652e072c4de401403bb1dbe4f2f348756ef1762487a4cc734554256ae21d10f1e52e7979fd39bca13d2ca4b53fb20700de90a38caeab2869bef06cab9d3d6c51cb286744da52e5d5651d9670d89d8b5a9336d5d787cb6deac65260da8257755d3b6149c76a022081d1d8f54c5f14bf0a0e9bf8e9bfc4a0f8f43696fd2bea70fd5bfa9a19bea47bd6eacb15f95fd09c6f0af4f9eddd81f2ba117fcf0862ed2e62714c020c8062d8800f8d045c9e4a601b8711a70f0b42d8461be06628cfccdf1c10ed7b51cfd5d0df2df4dbb4eb985d4859a2860a14f51c73eddc30261002006dba5eb630e4ba253d3fde69a46b8ee9be7c7d58bfacaf1d2394886f5b0d0f08b158beb2b2f9a9c7b3ac052fbfaba7eda230b15fddc8796e455aacdb7a061cd011a741b8dc625bcecab55bd9e072ba83635c4e6a8d1c423b46d7075897a6d79dabc0738818788a8cbe90b547ca834ed3b88da53682e3ac3e09ff564aedd27b74640e42edd1aee99b4e4725199e0198bac871312c55dd7ead487a24f8725cd8e09c318cce984fba5abc6e04126c1cbfd674d93c47ebc09c0062d9c003d7f06e9aac04ff4f2aa5d21d6605fef3e32059b947d68f4060bd996113531f8ea16781d2678af9c7c1031614d8620a9815557e6d1262835b0c7464a91dd710b73ae6ef5b72966b2d58927cb5ff7aadd4a31fe5afa39775158c53499412b454f78dc2c107aac01915b421915d8a505540a2ee119c56734ead1b6c88abc9aadf0a1958b735ae1a5b095ed8ca56cba9f936c1b119ec4cd9a421ea3a05664533a366b6b0ea587a94e33ee554e828e374657349d18308eb33006949058d19a34509c3cb868084b68f8b89745a68fcd88615775c93d96e215d99bc959b57f3c1c8b32aafded7ee509ecd4456514c6aa2ad62718745582487dc9ff571bc1063f396ff18c82a93b8e8a190c7cef1b0e4ad1cce156cd1c1e19af092b71a2933fb08d2cd01090f5114e916e40f246aca8253e2a0504600f5b9a24e84bc4245d5d73f069f389031785f4922e1c2af73ecef590b149e746a24034496f861856cf9694b4e5e94346e5f5e8459f4125fdff1792f6243acb43755cf1a1a536869df38b40f0486b6483659f0a3ea809ae6691ef9fb54477abb44f32580fd3b7a004b389b608ca4b3c5a484cb9369d7ace8a12e5c54f004e71a6b69a96a3987ba60847e585ed9a2a2f22f6245e7643900092747af32aefb4e9b394435cfedf7600e63a54c0d6822ae8ec4a17d71a92388fc64b4d89c0bc195b644acab345d4f4ae262f2b043fa662d8f7aefa3feee560558675c4ffe3d48fe3c3563fd1791f7111cab8a6bd11f09cc8268a314b7dff6683b059390537867a3042f34bf849f16b4d29af44a5fe44924cb65059850c6678eca0992c40e990a0e5948f133685b376449e27e3d2a2c2a9cdc7cc540b8a28374eac168f79e46ca48b13482b553901d7b7ab7717e91e52fbb0e72acdbb326cc1b18d188e41bf307938055ec40a605cedc09f93ef8667e74f7b6252a938e8ad047c8e8a177cb958019049f344377358ab43a4f5d45021b2c4dea8d8a015a242815f9a79e85c040f8a72cfbef362305ea5b1ae448b58628d9680abba2a624b724609c88b66e9844a7b333732894b85253d24a2926d46633688b3ff318214c647bc3adebe01c443f79b753b16388fc9022341d08a58620d1003832ebea2b9ec9cc90b3e0214443e8e1873184cf66d143c9ab00257b4344b0024a363120499bee90cba438cccd86c05a29a73b9f6e39ff255a11bc63d9885fa8b82b523c6c876a5e0f37b0d47cdc0804311fd000f1d6d0b7e27c28ec1968643c83becee1def9ddecf70ab987d11b1507fd37bc72cdc8eebc6ed9e45480dd13f1a230c79a46411201ab27fadf5e1dd3f4ecfa228c00140be6e0594fdd4076402a1d87e66dc0167cf004394bea18429e9a595361d5772099a0cd4650eef888b4b34c1c183539c42bfd8e03866d542948cbc52e11fdec1a13f756addd66f919a4e7a1175f5f3fe60c89a4a99bb2e261ce9ade02d5da664cf7c44df658dac2a0e904250396ba08d7d7101998fad656051726a92f702a66c3e47ed35d1d62555346d98924c15a9cf0f293019b538365a29a8d571af996079e225c9b2993a04ee54b929cbffd0a728477602c2819aa82a1aa2c2ee14801f9f211158e0a584576a4b86ee061dd98fb9278095d229cc4c840538cdab261030273681d8cfd4a9e74162a74538e6bd9d22b15a124634b8c6b4553684e825a9a6d04af4f99474dcb2d91f0ab48c4ce40b86b07d845d18b7063fac3c0d23406846347e28345ca5da74302e96035e2f89c9569684a6765fe2d9913f21a243548e544fd5df813cc77ec7254fd90d366ebb828c9640bf43f0dd2c045527b0f7af22599082dbe84ce521d82751fd2d021b6d244a36ee23023364648a9c9d23bf8516db64e80f4949f8f66874394f9b43f4dc420d8907ca9f8441db5cf325ee4c12809920baa9a21b784b7f7ac38ae849a98ddddc978c8315fc01d90cbd3e8e8382652ced23a54707d9c1e481393c528008cebebaec55072ace0b2a524d4950f24da406c77485ca0e2eb4bb201d0bc5d620eba5c07b15c33458df05d55415ccc80220e7f7972fd0397cf6107482ca8262e0c7d3440c666097bd0d5ecd5eab9878e24bb9ac2376e0b27e0f0689c6593e045d15f4db78031ada836125b32c677167e3b64b12140af6a72aa6aedecbb9f801532f9a048fc48ba73f11f2f96fe0bba4ed120687917ed6e2b31bc654f3b9f114e77dde6ecb08a9e63ab212fb5618b1bdd6acfd290f15144f7ac61a191fcbda192f4b34a7eaeadb2f77e53af511a2ae02ae328cde8cc23b37c89c5434d864a0760d51cecfbd39095fdf76d48629575498a88e2e8f54c7d020820c6a91ed2afa9673b9c475ca8b837c1ec8abd628000f4ef12cd0a93a620eb04d775923fe518ab8ed645718a1a6d476c873b7ed2fff0d512a0cc599b93dd6a0835d3714b30d2c0cd35ff2e060f65f916c9193c8dcf022037508dab83e128385567e90cda447576b81ac2b59ea8cc215065304462054519d670cb772dc465e7fdd3644a4bed9a5d3556fb1abccdbb5733acea2623b0f6a91c1ede326757f11f30d06f5a03a97b6644e677b5079877da41032703d276ada86e8d1a6414f0a4457f856da7b70c53bac2aa195a9ed40eb3f6567b3225296cc89ec209c6c15f71b186efbcfd4019d58fc8f7ea342f9313819b1907dd687293c801ded01dd719a6542c1f1e8a21adda0b38fff4ca05e912876db9334baf93efd0f706ca5345f4422e62b67f93723668d12f3cb19107f593fda76ef6b6685525a38052717743927b6f78a90c69f071a82ec6cbb2766b71db4dc191e48c4abd433272af1cf8b31199b851cdad6657d2ccbcd200fe363054587a29a7f3efdadcc72ec8f684f2033302efd5cd405fba3e3fd8ed2b04c2aeb88fcb2969c2f7e69518c239a299fe19fe39ab9ccffb7f5839268a9e670b8eddda0a244d78b7b4efa73c05d75bbd87a9aaf3278e4482d13688ba752ab235c604b8e9e631e655ea8df22c8cb513074a48fc9781492d8aba5a4d8e0641bd70deeaa9cfc98355be20a5d8afd8c729fcc6b18e5eec0fa3f86da588f03bc82879b96cda112f3ff8a15a4f0ec2fffe1e29971a4957f3dac74e96c98a70ca246a4eb94465469170280761397c8cc50c838616007601514ed597208c816486c03727205b15fcf5f0678ece22459870a1a5a352ef46cd1a4475b7110dac84c4955ad81d016cecc2b2d1ee6809c01ff8502d26553b84b069a354c4180bfed0a59d4056ad5a2e6f7e8ab925f3475cb31bad2ba5522e7359b4bdebe5e2cbe201272bcbae03ca049bef12995d00d9b33201bb4c5c127f9231e255e9cee9238391416c67387f7c1e056fa1bfe1bee002a44d2ac3cdc9cc85cbb29deff2d06011a9ca0ef84d8a8062504382b33991000c94faf7afbf01c61b710593bbae11f8a0a5a8800f045ba1e2c44d12b84b2b678582a64ad1226102c6774d2331c503bf055bb8145db01c5e087d7cc0ed8eb094671b8a72ca43301d281a7bdc0c11e3879a399fb4766ab896dd20e08afe1d00adf430aa72cf30834277d2f1a47ed787a6557a2340958e409c572ede4437fe33f4ec9c18ed282570891cfa8b9b234ff11d53a022f96b0819a57c785a6c413fd954bdaa563d07b30386c180035225d6ea4e92eb63d47d6d7d64ccd58a7384d6614b07624702b38846f93e2d27b60a69a81478da02261fea8de8291daa0702a26dcfa661844a273504607838ecce9a819e23622c1957c2b3d409df1da71c10fc0efcdcd3a025031d462d95a298e118376305d1b128fafac7accbdc89c8fb8a827d63582d0e110ae39cc2e6406230380c7bcb835aaee4f2564dee3b0a15fe5bbdb7313da759e41ec33891b3b9e9e2179841322001eda946dc93364f542138adb9901ce29855cfde4ddd891fb2b90c8fc0edf0dbacae4324e8411963d0305448b8474f70bc225410fac69f8d8af609e4f0084330d75a7e0d8c15396ca68a7bea59ffc4b47456c308991101fa1746b92177f2b9124216389afa5b16b1bcf1b5983aa52dddb89a5c4c36f5defdd44415d9cc86d3612ed2a2e278206c5a106449f692b4adf570b007885c4dcf3c269d1804e2ef9b2c06ae086fa5827525fa85d06dd07f2ba5fc08953d2193d2e1832f6db35de9a261f01986592a736b017d1fe790e23e8e5cd04884303923dd19953f7e0f0aa2afac03d88e6c06508d39aa841a9b93ab73fba70bf04997a89dde376a9f5434f2acc0497e9c851707c979088c9d0b5d35991c3264ccc0389823fd90a460064534200b9455dcb81c78a98c0802b0dab9173d47de86f2f01ab99175e83f09b323174d3e7941a04973e4a090ed5764380fed72028451143f31fb8247add12e24883e4a42288a380e938c5412b14248038228442f1cb2351992a0852f4422345b699744d96cf98337531bb8355bd948346ca7a4663a2f46bc243de55dc2bcdd97435c19c7bbdcad0d2ef8ad6480daf84c2ee1d2c467ac7be82e1698869fb09343c3133c8d2ba510231b37723e90869a647d2cb080deb4fe380f15a0074ced7d9f81eb0b2e7fa020e699924600e647ff291e45a332cd407e92d2770f9066c4a6320a452c3d94fe8917f5b59850d22e9df99397fa8c95e383f1a3cdd6b4fa4aa26062aaf6e14c101548ba095ddc759e04ef70b3efe90e32a259d2e47f06a4634408efd9b691f96322144c6bf59328d7016b6219d24060cc2c84b58c898b024d09f888135015dd8cf41b0baa902ba4339f7fa48d0b8335a8ab46e3cb9b98032615d4e605dc29317e6ccee34f9538b245ef646fbfa8057b38160e773c3f20f2a5f99abd120ef97b23f9dc7d237862782b7f7a8a02a66c7a8088345b47c47e3812bf02c01d8d299c373cde6d7a5084ca2220d240706d62a3140815bcc867ed8d9f2beacf72276cbc73d9661061d87013d0015f5b042027f42610ff3ae7296db994c0cc6a3d0689d294b0e907bcf17d541bdd56945d6ee08deee65f2afd660210861a99d7000101cf0ad2b0d0da621fc154cbb0e5536ae7375bd61109e2da4914e29012dfb5dc66738718b7a8baba40d33bc11683400b196360e128bd8c60c1908ee8380028b9bfe7fdbbce7f0dedad4c667362eac31e3f01e423b88bbb5fd5f90d570dfca8eac192bbde69ce6babff0b7166a0af316e551f52c2243b55fa1b77fceb857d601d6fbf7269c2a2dd342fa000b149b2c5726a388fa3a948079cad98f1821f9bfe00d59048f5459a38fea49e39b8baa0810cde4c9636d4e59793dad5f9e720193cae6e3351d6f13806a78e2af0f1dec8301616705604e95fdb0959e3d712666292e264a1ff4bad0fcbfc4e62babbc0b78cce3a0adf91b8b449e506e43e827295df9da124000d75752c26abb56433db255c180099cc0ace77b5e9aba179112ba368e750079397a0903425c11c13e7f53f0d1116817d86472b7d1efca1f8996297698db5f2a76365ae482a1bddd3d145a6d8c399b9111a5ff7313b49ad400740077ad855fc90a7cf48a964b6244987e06d494762261ab1ad96befbd65a141858771ee58e04cc4dfea29360b0f7aa685a88fd7b062947341fe9e331c423def51696fdf2ebbeee150f4389cf074b688402e191fa51524a1d595f4b3c261a94aeff6898ff496d19542843451cf823853db3600a18ec85257725d0d125179c2a56e3e933408946661b425222445a9cee59aac37fc502d3102cd282c7bcda292346531c8d01dd41845a72adf974c52dd15dd50c5bde6980e114ea353b11f237014907f6de1799ff10a50fd63132f84bb8c80cb53542f6f2098e1ba16361ee0d098c609a036ca46124e7dc75778448cf4f1d295483f38494a1978cf81b4098872416f6b37a04a298fef8bedb489816d2d90c1b61ab77a0761613c6265241a38773bcb9adf3962fc714935375ea78b584f22ac60391391f1c44b25cd52a8846f43b4c8e120e758e2fe491c30c532684c04276cd4759dc51a855db2891c032771b80addabb9f61bca48e34320b86d9a129064bce5e4f643145a0a7177222254e55d5472526c825f5d3c6b30b88a6a84809dfdda210f88dcba38f6e1f26e6ed245da3a40c4863dabf226cd5f83991c077cb3b4d6e6370ea2a36beb11b127a474298362a66c47cad2c51531afc4951bc249d8bc3c7b77243f994b7308ea4b80a3f9672bb6b6962f504a192f94ea1343e5804e47d29d49d125af6b3adf59fdc0dc92bb9591c4bf1740a3e6872c1b7deec6d841e163f81dd60d58f3d0ca07a1736246f14a2a5077db0e4df08107624fccbbd3cb45ec7918d2f67e5a85190017d9725b78eb71275d4a14bef80ae5a49ff879f087872984486aed02e31c3d4afcfc474c36d753101eced506ca15c9c4782a1ecce0f308500f21b1edcde226d25472df1a526f4183e8162d5b108405fd1bfa3d2dd7b5a7d97d6c1160d5b872547d352ffe14749d456ccbbf623c0a803e0246eb824beb0cdf93353dd11358f5967ab994e0c3b64baf5e77ae114c1d02ee23c8a94c5b3359e9e7b6d793ca089adc68560b613050e64b47f3af6c173048fc6c6f02bfe7ddbe0589400b9c4d5f7bf7654712e3bfc2c306717c29ded4dff1bb9b86f41b1e2fa188604bfaffc2e68a02c51214e0ff64e082bf5526425b2968abc4ccc458e028da3309443a6130ee0abb8bcf22025a972bd6044e6bee82a41642c5b515d802fd7ac371b71a3c467c01f0cac298cc01f15aa39ef75840a975971653740b827ed9e8deed5a415b30833821cc15b828c331eb55879c60a14527cf3a437a59743cd01818fda115fb3e85139982599a66b9aabb14f64df4c26f0847d49ccd0cc7a5fae4570f92065533f1522a371c4a223905b4dba08a6df443441c874fa30ed1344bf059debd9a9d13fb01d6af90b4efdd4ed63bd50a77623cbe6c8db43b2de9602d3eeb82fb2c339b595a90ce7b48d06077795e8e58a423feff7180eba0e1ac312a266a23533c156142e4f1ed380bc742ae1cc8b319b2a4bc3fa76595f7a3fac0ae02a829ebd4406e968442b3cf28a661fa2eaf3fa9ad924554757ca0950f1fdf9034b097a34b8ec58d15ce19f40b6d28d77e2b028f44fdf150f03b73a84b907984c7512f0681f357d55da3735f2431031866b064230299d8bdf28268b5b1b285cd165aeade9d8d61c2026acb839ed0de8349a1fa60d79d1569a75b59ab0e1e412d759810d3b0aa308cfd39e6d780c81f135dc948dd7afb0054b082705d96019b9dd5fc97a04da6ab2dfa89d3204d88c90f47ba59a14a33f24329f29a3e916c10d1ddd6585953ec868da56344dad9c73e2607e725fed1f44420e10d2cf377c078812b2da31d35d378d6ae2a79123bc884aa3866ad7a4b12ffb095e50b0ff9913ab4faa147203ce878ea86bd7a808acb619b4844cb426e2f2c9b3dbb2045179030fd142d6c3575e3f120e95a12690b3add30d953f5b97cda5f0bf1db70e88e32bdbf99083f3f4cdba0efa6e8e76ede27dd6f5e986e076a0653b1530fba7bdddf9b33ce95450c32e6ae179997888e2add51dd386dc51b24c632ddfc6f8cd3ed3d821800c634dff52de5c6837ee5e4e5b4044531370b1c1b155d641e7bf6cf4dacbc740a6500be09eb79e121e3a5ea7a821345ec59a2e1dc046c85b9315cd99a7ef4da8360b2458991464b09259e0d0d2af5b422a40be37a52577a1d3e85e04e7fc172c8e2f1a106d825bc7c95f471fa16a522c9c63d526452293044200e5fce10c79ee52eeb20012676d7d82cfcf26a5947813cd71801cbac9f7b693c9c83262e5319cb88b0404b2a9f5cd597f3f07d17b4fd5ed000e28464648254cc8fb61580867f83dbbc665dc55a9c80143da2a5777fd2f5bb7c2cbeea0a0108a26d16023bbd9ee7a389fed3bfb66b7b4f229793e79123c9009f1134de9c00f950b5fe89ca71d60bd8e3f04989a4ea40b23456f0634ee5a0d592e4ab149012bff980f14a0618f6d8665da5347e47865db3f82f97c06d9738116b8c782b468c8d70db68471fe7e754243db3a5c3cee927db3cbfbdc58c5b94cd076d714570d472ac80da158c116d4956c95c23d137305197d2633327a4a30f6c40570625bf3d1a51bac5ba662d3ac495de0d92362437ab242b417d8825c9b7c4570423943682f5e1784dbb7437ed8b25de6ed2cda10918bd9f993c649657b93cb0deee1935f1247b5694b24e965f9b2bd5351bb3c19ed57daf71c18aa04d77f289574e5d660620355f9b564a58e54b36608ec03fabe746e5eff9bacf22dee1cea38919cf33c3c7cba8892f2fa6d4742ea866def96e0282507082f9e13d8246194577f8381efd764edec6894a06d97064fc34d4d8703c101bfae502fb2611782c65034c4440304fdec4025d1004cccc8c151c1804b2fe4118b63fb299e2fc275b3a6a6da6474c2856d4e5e277588d6767ed14756dadd2b04f6f787df1c38015ab95d2f0401ccad2ed0b4719ae9d17ce4c15348047c80ba7dc28a870f7f936478e8d275e710a582cdfcca1c432ef24adb8148bc0592bd68b406edf7581c83e10f83ddc72260e515c9de6fd58108bfd9fc418c57c36ddabcaec1a508b2c2316f726b2b7ef062f18d7906c1bf76bb8554caea80b5815f6550c01a582e83f58ee7e8b3e363684c967f6fe5bf114478d39e4d8bfa18c7ad1e81f080a96a3e86f3a5302e7510fa4c6a0bbb969d4181bf13f4cefa2694905330141f7a6d190f2c65c4348e33c5d9ef81287e7e7f28a9558d5f5b973fff25d2b6502c5b4090be6e7ea4ba31dbfc493f48e07db256989803e07a8585d879bb69f875fde2797fdec6aaa00d43291a1ac97da3a1a476dec1678a92e68d8dcc4d274ba3c01219b196817df70e6ce56fb44f1490c253ac794ac11bcba14af96fe2451fd9e75fde183c1afa911f2eae793059da325bd911f34ca98c00d181da28e880ee3d87e255e8567b023d5ce5edafb0bc844e14d27c6f1c1e78b03e3ee2809470b15953f47c8f4c520e96e62467cceabc27dd6e6d7ca8e266f95a04028e3f6f958cd62363a9bdeccab44a64684d8c40a65bc966ce4be9ca29df59610cf2cea95ec47e614bc0a90c5db31360a51f62ad348a3fa1e32ef5c9bb1e56d60a8a4e81ae23f0d452fcd1293f76cb8be89b1876c7d07f6b5f4ba80bd235d291b7a0574df324cb63643ace4313baaf97f0dea55204ac7b2f4c4cff286854abc9030720e41c0e3e8afbe86bd4e84875c139521574126d2f54ef5c39685eab2a44efe93cf28eff81fd6449be9764a001a0c680ad804c7f8ad24aef7d102740180670d8b34c29a732a0ab9529efd21c03bf77c6be687bc66b1dad7e0e7a0dbc9a1c722380a57821cbc77798690b0adf5fe624d8f69704cba41e32009ac2b968b782b427d9cb4830fcb0e2a87835be5a62d5521a6503b2ab180746a086ef585881fc6e07bda87d8253ccc0c0ae860fee088dc4042291c1ebfa18710cdf1417de9bde92247291ce6524496f05aa670c445e19056a92ef2e820f99c017804746a457af5ef249fe5a934db024acfac663a3afe97f505941e6d18cef871bb8b2af57d0620ec10670de7d86ab337cd3c9472523d2f15f95c281961357b935fa163829801513a47f6afe8b2bff370a852342963e988ce30a648f04bcb8e4d04fa8d51ad620d2fa08fc3b9e642d0604669c03821fbe15d05bef82dd01abd62fd23f8d4f7f7afccc09029b75739d675ff69a7141d744398a12d6266b89fd9d0a608f63fce175e899a3cd7a490f267b53cad8917bd3577bb26a80e21670f66598ec99bfad4187172f9db1371593c77464b97bfe2938ca7c8e8a17f9a2d4632b76675e970799e4f2f6bcc001abf4dff767bb90641207b17505c14e2af0ab3d81d8680dc4ce2c8423c29ab798cfdf81a313a309f94d5e62fc065c063a290b9756d63b4fd15bc498a9db091917d0077a46550a223ad3d7042208e1315da8c5aef7bed77df463c4e66127c79e31c23ed2a0b199e52c7144310b12caf0b2b3779587e64f38a229d8eb169b41a9ebcc304a32b662ebf72ad60df1e20f2d4ff350b54635013b582acfd06530034e94cc460c298da7e79ace44ccd7f838dc0c7d00fd0de19405191039f2f4e7bf6cecd3e6e98c29889959174c02808a7474787fc8861b6fe5638ae9e5824f614f66d81e5143ddb7b31538841807af7fd0a008daa970f10cad39b169205f7627ec960e3ec82ff9ee50ed37bbae00b9369ab4bd9a8fb6850e6c9d6f61948da7f77fde435840a89fe2f20e214c8504bdae00ef0a842023c27e0b5c94dcbae87b8b625b1bf854c7925ad791641d4d32145e18f5388f1dcf8df42ceb676f8f602906b86ad9b26561d455726c0ea144b03da64271d9cababb83ab82ef8a293a56a9b99111b195c9104bb18d94ec097ee21f345979d335aa0d58aea3b60a456680985c82a029f41c929e7bf95b35c9792e6dd062ec24a844a980e8eb969c1816afdf3b32054194233f4318eaf9449c582cb51dfcaf78691acc316696a1481d349ba04626599122a3473e5eaab975addb1d98f5f5d4248f79a07aa27614efd80fae2f7e73e1fea48579c41ebc063d740398eabe76d2d5c1bd341c9433bf6326b9082487485b78b7f541e081f8c03c11d907900094a7e034996304281683f6c57212a716a334495323239f8f09c246024025bad88e9be44e01d52a2b8b044a0b8b4a3b6acc1846d8d00e4c83683e58eccdb4a1f83e1cca82452a6b060a3c98b794e4fb0dec6a63878bae529438d07d70246f8a410f5547945d27a3cfcb10d9940c7a09874c208a9252a665655c88c9d1e166a68127fc0a5c7513a5a0ae18e648194b60d3d7cbd535e2ee9c503a22646282d4c21c592a81d51333c703d896d836d8d4b2c07146d4b42da4e33dc40376debfe7dd868a3f3786a1bf0ecc9474d8f19a50825ed2e25d35e1cd9e60fb2e474b028383b9ec9e238c0e7e939933dc89be875e9a9c66802627b06d3968a5b2ab17897d28292a02f6eaeba7b567b3bbfff26314284a3c8607b99ee64098ad7fe04c1c066870488ffee2bbdd5b57f5fe0edb131881080342e4d8350412e77fbe0b943f83a4a03e1398f32a3719ba71c446d73b3b85ef4a903ff9bebae5c1a37a9037950e744aaefffd46015531611f27b3a5e8d4c19f22d619e19c7653bb43015b4a8f74d14e97c6370c09ff3d4630f3d704e5fc0f4d52e01685c0be01ce7f142d96fb95f69600b69ef165a860ac7f9a84efe134286ab28cf0b7e5d776df0f763aed3bcceb14a58fa287119a460d6a095c93bdde197e80fe31c15eaa454b8ae034333249e84c311e2d004c67760ef977fd8373663258994f7514e30fdfe4fa30bd20e9135401864c9bf1848d5fb8ec50af9c84d07e46bd0ddea8bf1561a3665ebd604e5f2b9f8f4438299ae848bdb1733359c89e5d46e4e85b346e352a1471483703adc5d98620ab69b9f22650f47e285d2da148205088c933492519a5230a031c82c5ca186d52c499c4c707704582f4ef8f8a348195b4d8bd3d2e12273de052c8ed026fc8597847a2d17dd000859facd29a1fecb984088f8ff808aa04618a97351bde1c17ad06747cf4399118bd18e625c78707caf1f0ca75bb08ee3df9b4474dd8a70ce1b44b2ebb69ace34c8b488c8453419a20e4a8c1938a4be2d095f17b6c9b8216cae9de7057e384af299c12d1cb36b6e4648b24802d808c84736c22f855adac74733849095200a34879accb9c2b008c14d3671235912cf18feee52e0907a8b08af1ac419de55c12b4370ce7b45706d4373ee1b45ba4641870e976f6aa5623b2c16a7d4952dfd4ce8a00d2243c990ce908b085bb385c32400a5528bc41d0b83dc374476dda09df75d895c192467deace4ba4539eb5d91ba4a459ce34d91b9aed0a343c43885a9b68755a5a654c2462d582b2a7553dc0e168a79eaadd3cac15cdb86495015270b862f7dfe6e29d117ae8c95fb33b44d8912b2e5b58007a65dccc65e6674ca6023e7070830523e54875b615627c7461cbc892da27b92c82066a71a7820664e8747b268548320e537e5a0654dad0318d33739397c98dead6dcd61baca4a42a470305fba071c105ce312bbd1a7b444855b3bd2d4686bc208c0e5d6bc69072dc0f916dc86e00289186b2a5a35be2000dc96fb4ff997d4572c2669ed2da57cfd62cf0c11436e1dc327edbfc94809a685bb68160b76975850cbf7aff65b759b0c09b11189e746347162267c53f3875389ca606ce0e4b2b55443eab9792eac69f04cd5f8a0c76546e79099cca4060b9db260885514fd0728d08fdfc101722a70a0ccdc623b3998ea15200538461b10de79f55a5b68f9b71bfd5b92c922d5f3d3db5701f8958e28019acc87fa52ad02521dae03409ed2316bfcd20e4ee7c3b626c67da40064bfe6c92352646e19b805a0240a48cae94290ca8ee33ba2c68bf209a518c4ce4ab63abf7d328289f973c0f448f0d8609a540a01f56ba1d7974ef424fb90d786075fc26171516bb7b7deacfdd6a8d142c6be38770055b1f50cf5434302312fca14d406f2a0e6d6655425ae23a1ed6f055cda21f58469f8cf8217e94a3bd1f8eb7cafe355684a88e30a6a7f37eb8d34a4c54beac103edd65ad1bf41267ed41bce6892785bf90e4eb8833cc3bd72140fc85fcd2acaa60cc9a63e814957f654d8295820a6a68f65145ed7ef6cab7de3f161a2ab3521f8dc361a7263bddb1554c815b2a9cfcc72a3fda69b42d38a38e630e1465b0defdc3ce87ae1125a47836bac37a8def691da09b950f2d9b5d3d583f5af8f89d690673b47a53e45eec2c0da305cb6907c5aaf4d118a77156baae9b1a3dc8171abf83809d3eaad203b09daf0588832bd2630663835393e3debd7014de939006a82247367f8cb0e4a7ce321f1dd2ecc8132dfa02b505a913909110756ef7fe697b6d63708a2029af73e6e806b63c50ad29117324e462ee40046a04ecfa810c6552eb2a589a91cab43fb004a48264c1af7ecf07d65f472d2e3d699cc6934fb930fdce230210350c632e4a4ee421b253c8f6ab0bca09ab1c883d60ee5d6ea1836ea13014f9405429d710566e22cc04dc980485678af53323020a1eb297a45b15d8daeb9621f530ec7ed824d4f4460f5461ea6f536b05f9283f34818d00043895d33cc5a68f9fac54bd32e3a2ae03edbb1f5766ae1e026bc41ac2971e72507ab7a1ea2124282e7fd507a0346c0267b8c30282d542a8264ec169871c46a40ec8b8f8d8fd25772dc968495aac829ed489a225d0bfd3b5f485336b85b75b9e35e66213a7669936cd90062b10fc41b042ceec3db1878f483fc6062f7d2b464a36b2db8612201c5b54483153135846c7314d397050b44ab34a372726b8c0f31221e4aaee3834f1c1f5a6664a8ed62cae034ae94d88cc001f005f2fdba04738b05aefb9d61adf029bd8758c592c29589ba13f2ab1ec74ad6ba79074b965bcd15bca47e3cebc1e79340109080bbb2c3d8bc08a00540bf9324ec40086d283d8e4677fb0b6668da255d7c9d5622f446c693d0dec176cdd3fb4ae133ca48d3e1c78bfedb39803577b83d108b5730b6989efc34120c22e6f5a84a3ec5079eed23cc8b5ad559fb1c6fa3777b82e58b1f32a2458ba2dcc01fd882f984034bc6e79a1023bdf5e11b0f00b8ce98a07fc2da95a6bbfd827dd16aee2cbd89570c0c829e1dd7631df9a20592cb8c22e4f2e17f6e453313b7e720b2242b36ce8e9bb374bf959980d8b96d73b4a2c9d2393db7b482d9ec0947008f428509f95f8f9e31e81297c6a0f80a0331e57d713d981c48500b83fb01e19fd3004a97dfcacda0bf2b4ab1be2be862e4f711112128f5a87cd0047f066eb83be5d8a32a112c79dac5250f3faa4afbcb344e95e36b27de2e04d910a2fc2a9d489edf2eb128271294cc936d09e155d5282ebdf8b35be5cfb2e62b18f29866a228fb8d645bbaba10a874959ab69d198a5ddf8ac221fc8114474472a62e7ff578edce69daf92e530efec787d6140fcbb2d80f78b9765c74286e32876ffed622b9efbed42a41c22ae886a5eeb1e472b759814528cba196c50e0ab408486ceac4ae3162b951d937c1d473e1909521470d396de48701259c3129da773e1e8f1bdf4319a9c9bf1968fd0986420455a5ad391277dac53ab87f132ada97bafecd7fdd504b279fdb8a8ede98afd9f0838aa66005b6884b5c7024fdd2b7ed636c0b65119777356e065a6ad8046e6090c780e3c150f783f1ab6bb8c553eb8c663542950be71728613e038142392c64fe1c2b19a03bad303e8476206d9841d8b243aaeed9b09770b6c54363328d82ac9240624f3a0c6a3135a6abd215626d88d41ceff2b5ce335e2cc4ce39c8d4f3a4af7e870e1e74a9d03da4c17d2ceab8b1246fa554d230ee8dee04844f8b9f0727b41a0b2aba1cb15776bde4540e56841c5309c32f58eaff86f168b90254af72a9161f3cfdaeea2eeac8bc3376d29ffffe84bffc3d5ebbd97642cfca102c5a1070e2060dce131c9f9d945590059b86c302eeac0d7ed33457bbbcc11b4aa4a5092d4563a1f1830da78e79a70980e63a321d5353e2e7b8d7fe36108422a0b822c217da69aec17e30f3d45c4b07454fb508815f9ff9e130a82564522041159c1cdb2588ad74e5118895712362afa02d94e09dfb6ddd7f278ac2b247905f1006ce6983eba52dcb65d442434126f4dcd7ecf31f93af6183e16e385b180106321c0ac918a1417c3b42bc9118b887cc8c2731938a75f2a4fc9c3035922e6787cfb07ace23c42ea7e7eb4b650fb1ae215a5914a802bd0340fe5177e3308f60350ee6a5c6f3053e1d50ae501ed03344e2d6fb5bc03bfa1c1cf3526aa0929233501104ea51041a2b10fc2643e798a3db2e107cd78086d9c0800b7bae122c13edce542df0fbe1adec428b2a24a4b1025e40e70e7cb3bb9015dbd81bebb060e4ffd2cd1dc025a8e9ff9722cd211cbbd0c7559a737ae14247ac31b81c141a62d2e167ab63908cc4c276d72323f7e0efbcfccca22d5214ab2a2bdb3c31a27811823fa8810e0ea61fa46a028715e8ac02688f4d8c77251704699ebbd44f442b4907373923d634b8588924ec009f62a142a66b8677c027b1b3a96c9ff7a8a027ee31155be41d1b6ee3e42a2e9487a9a808d1a2eafb3d00578e2863b0985b0f99d20eacf77d9aba4b8cbe1f5dcf833818596ea244f7bb0dd6ac00a0bb4f3ecabc6b67c42579af72b9c9f42a4ee5f57d903929e7a95a8106e47ae4fda3b72ddd20816ef2fd1defa0615a7274598bb3ecc5f04e0d126243d899cae4d86242dd27021c0201af7198bf499f7b0af32f56b10b8abc12ff72b7f638f25e9178907e96001e835e9887260314c79ee2478a0d2ac3049dd2738d67d97098e196c49e4684ad6ca18c5e15f681addee95507d1ddf3c1d89c3f64f754f428d35cbf8015294419d02c323f8ba06c9d2a5ea2cfb9b54e7ff9101c46bf3c4ef6743eaf6d596c16140ed7e78b75bb9037d6376b262bc5898e84e6c4b429e53798e0aed13eeabf2ab2ef8790809f0bc70eb221a4b26447a1f3ac742c3bca080bba7a56c8d11031bf934ce46a9c7aae55524c6cf722a4af2c40467051a5ffa1234f9c9d8662c99f49150d5f0da6339fa40c9282306b3be2f0afcf13a4e9a324db560dcffbf09aa2359aac43515c2c477b7daa568818c3254b67b3e55882baa4759e393786ff793f07b9dec7cad8ab6f803bb712087c68b8291f59c783d6f4b73b8c7a117ed726ce4e56013307e385da17676a72510f70696bc086251f6bdbaf0b569f46d569eaa50d8b11d0a0babe56dd2d078641401dc8be4d736ea2b1f537f0b86ef89c50a8972254d2469dfc247685ca88c9dbfa7697edbda8eabe6465edd7b3c54913e81eda0c016296f9c17ec7e56da45f541186fe3c92c844566238a394a2fa1d5eb8201ce459ffecc0ea6ec8817a08001edd5a8839b5de9cfd82adeca2b6608ef7237d8cb583c13a1f3d307f9096e6a993ea99679573a452352efae00f7a5249a03388bf942606359cdec7cae78f7890233a74e4abad99c6d39a2a4065c9651d4eb1db7fb3aebc820e187fe2d57304cb6e0b22a486e78329436e3f566da073d984a818abcd97719d2e39485313464be2ba8a6aaecd31b89fa36d4ac1368d5ef811ea3d53e214e03f0cca34845a03f62d70468a55d00dbbcc48831879504e12c259513669b2d7b638ee1bed9236b2c683c014270817430c0b7e3d3045ce1561c9a88eaa18bc99a5f76923ef15e10106559f9770c99401e7c08338111990f83e17b57faec90980f9cbdc87ea84600d8fd319dd56c807644ac8389209a1dee94e7bad55f3d37f6d7a86edc437aff78c4430b2392350636168b7dc14bd7a9e1532aee43d24a38f44998aa2fd9dfe8adb4a0db20f6b11f543f009c7608a40673b73e617cbad7dc8e36890c1671cbd8df5841e144807698ae2e4d3250e0c13bcbcbb080faddfcbf51ede8017027989a3902def2d8a01c8b112416db9898d4c0ad6160f5b4fd7cc2cd503f9cac58952fbb80d3b6f8affd5ac9a63b9896be5ea08eebc521c02886613294d607121b149886b778d77e7b752e2eb9878a2593e10efd41cb48802ddf6b93efcdb98b49333251b166592ec32d4374121937da5cb7aefbdc003ca48e5017f9a518d2683bb50b5f0e785bbd8052374caf5465175fd04f20bc5f1b974ef6e7006cec34b32cbe9041230b4ca4752dfd9785312e54d3a20496e0a46286880c9d87bb519ec9b1c6c466db91f4e41db0c3ff7e7e0dbcc2724dc465974da68f47b14a19798a20ed025b1d54a3abd018423e20be2dc5dcd2029f05c6897d51688b3ff743dfa6479693518007303e10b8d5337ae9bd016300a45e377896c9da20fb6411b6cde8b06383cff380269dcd28b12bb7323897d229baabc07aa71d4767603a053a55f14f7a26aa253b453de2be2d5d4121f92177bfb398db9f56af9a03ada085e9e3f3e69fd9236b2968dff3c230dc1d03de41bcc64a8635882b89b40d864f0cfdea0239a36f6daa4e8ff0d5566c166162d6f6044e08ce1d0083b1368d6a1a0e1e04ba3e167d916307b924330fc76d38ae507d85187acb3c7390cd5de2d15354ff4552382e798e21e276134e4be8b8238f7971755b937547f48469e38fd490072c241aa459a50d60eff00369a56711a7414e2e3ef8cf070e30087e65d9aac78465113146778979682d15b75d513bba31048532d3de2a64003aad419a616d03bff8162d9a7a0e7f878230966871c6a2f40a0b5eec7e7ab94d74aa971318119b7369bb9ae97b3484b65019871818da62fdc0db5f0b4abb0e48911928f1b4b84899b570a22aaac8e159ca3c972ddc1e8bb6ff7890e6da470f7346ae720b991ed924181dc75c19589635092efda0e2fc00e9bb820a4f7fefab66d2ea497d4708b80c76a4dcf643e16ede6bad3ff47e8dfb1d4fa84a7354fdd148c886a77934bbec47ceebb6950079d3db01e2b9d3fccc2fb143a1eb02b14a15c449bbdc1cd42c419da0a6ec4d4d0171f889eb3ba8151a11f5dfa696d6a6231c4fa0df574e68b2385ac5579bf1520be3f487ec5a7e162becab55b6669706b12173f41c999771e2598542a228c00524e1e408d41ff1a62fb7a91706dd0e8e6e8a2b3df3843631b1548480014f69d2cbfd70bcbd68706a4d7785081624f1619f9a8614f058436b21d6e193f40bd9564b6c454b946aa99f6b94a882eca7a7f4adfbbca085082074ff730c76d666d100ca69e0edfeae389c4c784e766ce59d53d645623980c382545b429f4ca978dd9235ec465538ffab97bf07c4d27957681c5b5104a03280f30513b56713a85cc94ba9afaf1a6f0f7ad95ac9385eedb47ef0a54e8082c22d08caeba46d15a48d17eb43d27fd56b009218ac015d993bbdb7452d1ccef147d5bc3f2d4c626c37868264465dce07b13efbefc06b935cf2d93fe494ecc33194448e850af3c82020802c4970e84d5c9f504e8791f3b50869715c6550769627a753eb294e4642414f9153e9edcb449bf9c5a4e946e1064096e2c2945868a9b02c886e382a8043e6267dc0823caa15c9dd24301a723bda2138db9200d0399e35574d24470458176028fb1d58d917eddde487dcf239cf49f94cbbf90b2b62b18873568561da19d68bec7a4f2653399f83f5e3b9124e33c37f569cb76d4915cf517b6eab2791d725a33712c7bab07842737aec8dd41a4639d324f8cf93abd817d2ade8e6273d00bb848550797f085ddbe9c468b11e47d609fc9a5b8f1a3829ae6294236643b6d9adaf35705b4926d643a6920af281017d726981d753805be9b39692a0149d186c0bdd5102a7d402474245966297c03238f8f7a8c048b2d04e8dbce9f1935a11daa52bd886b7a1de75143d41dd901cc93660f074e97909a9f3a46af68b9ab90340f703a20d73436d6a5710c201ac07ca3202403956f306ecad41f03c2587293898ba64d21eb24a39bfbc7e1435f0d7463b808a3df5c9ff1a4d166dbb43f9ad34eabe8bd8b556eac136821dc206c1d171ddba75cc26ee3805ce8a3fab0d17724d26666a711ab30ea885590466f3fbb93ab6100092dd9352f2a18497fde288c7cf4c27927e175686ed880cb06472a8cc68da0389038528c9720c06dfe7b475e097cf82dbc9e9538b25a566891d5c151b87fe7befd25744315b06aaff748cd0ebe29714e04412ce3e91433afdde6c04cfdd2b1f9e62733effc9414c1e4d1980d07a1e9cd3bc80eb042145afe7f9059c1c9c59aacf421c4d1c2090aab6f48a1490456177210368f8097bc84aaefa3fa6959b01f1a4209f68923a3b0687f298a49586ecb5e12989c4eab6fc2cdfc14e578a438fd096de688461e7bd73e6c432480df97a1dcc78a62170028194108f1153647b0f1a52dfc3818d6531327fd569feb8e491d1d347ba0d769c8bafa7c4aa38eaceb19f55b72243f5c9b83d1cb0ddc81be175aef340f7d1a759ffbcbd71d966fc701312fe5ef570aae3091abd636459fe3b37d6879413dfc50ae8ebfe284229b6905299e1e51e100f78636c45c3ecbda41de5e39f5e2f6e12e6218351f48775afb43e59cddae2aa18d789dce0f06be7024bec828366b913496bf53c1847e2715132081b673684a8e1f5fad30fc39f874e0db3312dd1bc21544ea6e4067b34afb963872a5424f858b89039262381fd63a8d65b6ea3ce8f6ccaa196630ce4b813d3f6d20683bca589725bf1f701eaefa7123ee40e34214cb3c3269fed2bdb929954980777d70462c21d29e7d20217c88de08ccc2853dcd803f0829725dd269e554c4aee35ef119b8a7b7c1b3da657a98f5f7eb753980f13e0291e09f4636ecb3c8fc54ef52ff91c1f693ce9fe1d9a313fc7c5442343bc0e3528798d5a614f07ed0c410da5eca107ec4ac69bad719e7627be88ee5ad6493cd4263f11878a77a8d515805512acad27ecc00673bd32c800d33965366ea3c067fd12cb4c3382c574d6c39e534224c9805cc4187c9c48eb2a7b7831edbfba96f380ec90335288925ddb6f3a7d9976613d93a035aa563953ee60a219b6c606aa5ce2175b62698ae99171f7270d59336df10a8fc7a5a52848ba814698979c7f66edea7b77965dfac89f3c86acd53b5ac6bb84b611b4faf662997ad5f7e406c80aa6d01d4c1fcc96c3c7cc94d9d8a22ab966105a80e548894af762ee51e482430a7f65b1a2ed7f50adca1e022015453ba81578da0044dc02a3094de5f37104f066bd4f9e1d5008230310267360b045b984ab80fbccf9be63451c74088a141ed547b831b67fccfc3f140ef58c057e7b9f7299e9100d13b914092effef4c0c6d0f3b55ebd9c86328ce098d5079e12c0d710550b49ffb8a84648ba941c9a30db1ad754b97e4288e9c4863293835e2d2e8cf4181fd2e386a2ecdf7bd25b2bacdffb724d302f48e923c8c06d391152d038e6193a383825e35727352933865d07516c6e7578405c38db9aec97dd1febc8d0c7ac5298b2d859f0cdd48a5d64a929c22de5bf57a3371a62458679b16e8a963f4fcf5cd087acb9bd8a0971b8db86ac4eaca45339991ead3a4b34eb87ba46207dea42f8d8f16484c3dbb9f01853eb037b7c0d4f7e6d3c9394700f3d632ddf348611a5c2c9a434f84cc209080ba0e8fd34387a656e492247de0b8d55db3f0cf6bc11ac14399d6a4b4d104cd9c50fae5d88d88f19c81fdcccff01d6118504ce0da66f89451d96fa59cfe8094e9c5e90c36839af72fa933155fcbd322019219fb52cdc03f33ccccf7b06bc1d021a332c42d3aed3558d36452a331eda4d1a7d4843ea6fca7fc867263dbd0feefaab5e1c10e71c13b349dbcbbe701f4e3f128d289f3d5487b4cf45d5f46a67ee320eb49a55f1b8d713895a720cf4819ec823968c74c500ac9e642ae1d8f16777fbbc193e225109fd0abdbc84f7d1ce93658a39639f8fec8b8f2e9a546c7dc99d3102d45fec4987fa23b3d72d9a45bf828438abbbcee408f3078e612db639484dc2673f37eb91ac16fb0a6cd6b4047eaeb445fb86af90f6032b2dc6eab8af67129a23c3ca8d58e0f14c896b05026fec3aafc3e053da15974fafc7762bfc04a024222bacef42553e60d76b6719cf19d0bbe734c1efa49369b2cca0f523e10a10ce3058753deaccfe0040512744810be6bec707132f1357c9d21d37871391a5824fc13535b55ef40b73b0476af58f06085f81a04cdc20d841d99f09e1156e4b9184b179e18952c564557fb6ef0f2074335495f2678f03be91418574440ec213bae4ad1ceb06be238a034b8984fb43334d2ea52e4f0077e75f623ede84210a82f795826f9a55153875e92040bc5410150e8dabe2077c54c1c472c6dbca97e61ee004b486038abc4a8a5730903a4a1b2a00e38ecb70492c69cd2567a73ca427ef4873c99d13bd47b3d8e437fe9cd06cfddf58a891bd253e5828c20a0485a22154f47bec61783d96404740d4e59bc5893221f67a2eff81ffbb49e4d2caeeee9d49061f08230981083aad812768a2aba61e26785b68728652eb79fe7652b53a3dd451a2f5d3737579ae54fa8cb5420f406969a4a414cb3a90ad59ed7d38274e296bbd2412d2de8baec12d8c0ed2e476a4c54cee5ca7f4f6e25b7cefc31b74e7d544317eb5e6ac745ad4dafbef06dd39299d94523a2deb819c5ad69c0e42b72e561de1444d4815afeca6b42f27aebb74adcae672e2a6bd178df65ef4dbb59e811c530ae4515a799ddac839a32ff42912b85f5e9e4d4d48d6f7b221dc3cf5dcae0b41f837d0b97a206f3708c75a16bb5ae7acf5a7947356d5a4349a01ab2bdf2aa951afbdc1a93635c78610c20379100ec2f9da6ed0bf7505e5c88bd2512d8b5d9d0669e7e3cebf9db58d1c5639446e404e2ba503e39b9b07f22b078f07f2921a264a078eb91d693123b7cef5032baffb39d788e7d38dc203847ac489c883abf307f63ae9ecc1d71d7b593728c7c6605dfb2fb7232d5e72fe920f02be41385cf0257fc0c157e9ab8bb17ea374759211cd26b7a3226600f2cac38670c9ffe0c2b9413758276dc191573584676e61d2c891adab330dba7920af989597cddf201e57679babcd2802cb0f61c72dd299c7570f90305d9d45e0719d7436554760f9f279aec4e811b89f5e2dff75d279c7bb940f7460172ff1ebc9ca18a5fd887f8306f799f8a75bc47327c53f358175be736a0836510b97be45b05cbf5617bd5ac6f30649103e78fa1f80f001bde8f7bb1edfd9f5a8d65b169661164f798364bdfa8aa3e2cff8f46aebabac5f45b0d54569553dd79cabd5cbd3e5d983965d78f175aecce69cab659cab65dc72d56fababb3a909b16efd7bb3eae775aa64b5f9934de95a35897dfaf6e9d35abd13372b8ceddbf72813c7d48498da8f1df6c1ea66a53d29ad5756faec7e667d569d4ad7aa64531ef65ed408dc8e84e89233d721c7226d8e5cc52057def334b1acbbce8b52ac6bc5de742a3d9c880cfc7576ecd881b5999ddfb1e3b1e02827a1cdb487e23ebe25fb37d114f7e9ceefa7f80dca796cb3b3e3dfe31dd7ce8ececeb33b3bbf43e777ecececfc4967e7edb03a0fe4b0330beef34a08e2ed460dec6fdddfabf77ff7a96fffbef5a5c76f73f338ffa65fb2c47fb2a0f3bee33bfb4db223efc0b20ee41d09384a075b0163c1743592f341a6c7f4d1d54660fcafbfbdda8ba3fc6a2e541c55c5fdf415e7c39b882e81fd1d0bfe4f9a901e4adaf12a0d678de02043c58d1948346fc8e006993a281c669c587345911b539831638e54af318317624ac0860d69a84089f6d7cdc58bf75ebec4da6d91529d730f9f0855c07f3d941dd6697c073684adc1eb44a78cadbdd79e7baf619de6da1859beb34eded0500ff949fcceee26d99123967520cbf70eba1de7cf9d7353c6e728ad281d23438bdf0df2f7cde1899ee649fa9fa243f81e7cee7a5f9d834da5d0f11d57a4d191df7391c7ca3a901f26e588ddcfa77be66484cee7a47366b7ee9b7bee1c7ccfb9e7dcbfea5e7baf35035859072e21daf005b5bfe3f7fb8a4ed9d1b976eeb9e6ee8430b57ef9bd97d1618cd5f75774f6f32823fc9613d687d37d38aa099cd9975d12ef36c0a5f010b8e516df0cb2874819a67c1805828da1dc7ed6ec9e72c1ed4f45e02abbaf12ca68ad6c02f3b9d99795091d11617b1d0cb57fefdcdb779dfc41f78e273a6574eff973cf29a9dc2b79d8abd7bdcba204bf3608a110fcf6ddb0a17c262756a43ac953ec3fbd86cd89cbae3b49c3dcfc5f7f5f141ed6ddbacd179aedd288df6e5a5a0496482ac7de25b1acb35be47de61d4791ec4648688e657d72cd2394ecd10cd2d36c7f9227d83cfbc7f8aed65a12eae255e21ebc49fc7adf1785e9e855e2be273bf670be8e5a548a2588af5967ff8cb43372d4c2c56f11b6dc98c48728442804bba1b097c9f9b852aca0c27aaadd08b4d4c54460bfa552f6ea54ea5e70ba03981c01dcb727024bdbd70894115429dbd001f66bcc22eddf22ed8c224d8b22244c0ccb96647a95c06cc9fbd8a7273b3aaa244f8be55b19af764ce0fe8c66b1395fdd208c05b7dc52fea97a6d733f2e25a57c7883e4b78c104a767575a227977f9ab2fbbd8c9d045a7b2de15fab935a64f97e8b9090e5bf8ba492f1e535d2932726b1e7a657692acd82dff7fc3c31893d6c82a01ec9ea690347dec76740cbf563c498d47f5fa25b30fc2546aa9f5faf8c7e932ad7aff4fb1a69683c010499131a1a4f00b1825cab2a537795cc77b1aa3ec6ea63569f56d7a9c60acacbe657d7e9c53fc1d33cc958559713285956527e6c59ba2cbf7ab7246315963555325fb63ca2369e37dd014efe58ecdb6fcf65f2e349be76282f9ba77aaa4e74be96edb702426880b0d896fbf659f9bded6b5ef6b404ee8fd65e46dcb7df9701428e00591b6394263f71393a1450182154061937a4ac31460b11fb7e1920440122d6a3c81163127f0311e3400854b8c7b98900e506d63e761febadcde2c3b7d6ea98ddb7aed3b57faaf64f95fd13b51674022547cb89cbf1ed15632e51213013fb8fc9fcecbd6c37b35064e835a925e08fa04a2581d97abf0e0022e5be5d15789041e30920c8a0f1c49594a359b07d4783c0b6db19d985cf9789fdd7acb76ffdbb4116bde0756a0aadcb899b50b2f5f4ca5efdaceab70faf53a57faa4e91fea929b42e2750f2fdcef05e7bb193b56f412c5b922fd6f1ab2b8b4f6367a1aae30e6a55bffaaa8ef962283f6a2f272ed71a83aa7a65f7ebbb2bebd30572ed06d98b6550f2cdfcb3669d1c2b526557e52a77fb51659733908b1d679df5e14d22bf6259e95f6b3facaf5709cb3ad78736abffbe65b5487d7f5b3199d82989fcf712cb6e4334ea05c34d1b5b4a45dca0f16be214971adcbec90ce545e40c0cd120850a2d3fc8008ed4096d94a102cd0eb8b8b245aadfb4059603e4fed63ffb4d6a026fce7f179322dd403211e4fed640b210b8d0da8f16ca9dd13cff6199cdb43d2c7b5da2ff7a887dfab187e0a73f9b90fbf469136277c0ef87c60c65c928dc7cfd1c47b90db8edd7173af7e3bfa93737160b5ada1a483c723b1aaa92fd35f024cd951babde5aeb1bf15cf1d0d0508fa3fc7d863a595fbf657b9d2c7b83edcd8d5503e9065ba4ec5f425b6badbb415ddfa962453c570dd4404b7dbde64aee2ddadfbefde93e366fdfdaef51edc55307b69ff5c88ff1a050fa9bb7ae22167e6b83a393f34fdc27435dd851271dac88671d9c86c609fe2bb0e0d9bf89fb71297f9d1c1c94983ac864ff12829cc9be050e0e0e8ebd5ab6ac1b7483ddd85c23a06ee80db2f9be48f0df3cce75b2beb3f536d7c9fa96adcd0827eb0890a350a0d749af1901080d7e9f35236b7d3d8201e11bea3b716bd6c8e769af9d8572d418fcee35db0ffaf6a2ed07fdbe5e03a15fafd840e803397acddfb9aa2b6b62dd4e0e383f201d7afc7bb96fbf240a58b3664d96123b21e9889d2086ca3d8ef211c82c5101e8488eef88a98d2783551ce57e7a7c2299815d1ce51af402b96871946b46b00ad402abb80ff750cb359d8133a8256b81507817ff8160fc4b17ce7d4e1b38834445f2335825bb8744708affcc773edcdbe61392fca2fbe8dc73c2092e39b3f03d90fbe87f5f9a1010a0d1157fda78e02b4dc890ec2d60879da98cccbc57654a13816962c2002337316124e56c669a63ce6c6e39e07a6a24a433f5eaa4aff5ad4fa1764da1fead16a9d610e0762465281b20b7a328642a2333cd51ddb1db8bb4f02669021f3e26f1ab8f608081afbbcc0d187e15af26e33ef25d3e99a3315670fcce5fbacb91fbbca2f6c3ff75ee215967c86489a31a48632c42197ed645d9b38622fb6b20fd108b0da41f8ca3badba8911c15af3652836315df86b417d9939cf5c3874d6c8e2fbfc2aba856ac8fdc877fec233060da28f611197f81881a7cd1451d40ac2183942be181053d88910227a2c4e1ff1a698ac1ae91bc240491843f616355baa8622a94e91607153ab23491a3528716276aa22954cae430755ce92cdddda63370d6cabcee328dd4ceb41742e0ac91607e4d4e45f5e3975c19a9e07e2af61ca3a19eb3663afc64fc39a594cfb9e7e0191d3328b1f6d595f43f11aac0fd307663b6bb184146ce198a851b4d78c3d113c484cc44c70fd96d8e55b3468d0d9aa8ad97c02dcc1cfe314dc54ce0376693f8830066d7ce1fc90d18e7aac79473f66c29a594b08272329130cb77103ec532f9136bd265f93213f99a90875836ababdd8821392139653883dc033ae99c73ce39e79c734e42e71c8410bef6e2bf07b3cb4290ddcb52c60be677a65693fb9c90787cf7774c280be59cf7977394c998497cc7b0b5b97dcbef9b04041976fed77ec08662f230530a922a74103e141523295ac2c8a1c555453b177b640f8286a7c7841d4cc98ee4be603993337b14840c392b618ea39c35a376d4c844f8ec1c55b23f3ec292648786725f246f08860c93642168f728f430b52436eaab1e7ffbf6cf83b2b966f3411f671ac057bbcf0379ce3c3f37cfa5ab1bca3e0c0112d8dc39cbc280bcf3bdac867a7f838198ddbc567e2ee4d89c5bb6fd782edffc3690fdfbd927d95f7b1ec8eefe39b7fc49d1c394f39ecf7b5660414692b412c6b332c66d2de80962821c27b0d1091f5e0d3a20b92061a6d042892837d01183377ab860811a628ce040b3050bb64282cba1f00252229a70140b167c81565640690b98c8fef4881450e7013ad20038c4a821c50da429637819daa108267ed862469530de1802f027be7856a240376515558ce55da5099a4515300f69f200113972c2940308398490438a1c3098902a1a4638b4c997d90878818221d8f842055aba2071c2863238209326071b7a00a37a09e0084017b974d44cb23701bff724feef9fc02cb3e0d7fdda68078220412881c3141a7481a20b224e1841c514560891022e9cc8220730f470a5484c94a12f456544a1c11050dc80081fb0781807f8a19d310188057001c68813d8a0288c1a04d0450c0c4148e1a589304d94a121cc1c64ba4cc14206266ed00217dce0431964a8400a2c252cd230430757c690410928d6a0a189217e18420e2a9640a284124c54b16285044d78119a02290d17bca087a234c8c0d2821a22cc7459c20d1b841102325c80e0620626e2a041090114c1c6163278a812071612b43a581003196b90214496218050001c4434b8c2883273ac6961073f9880c88a15615891c40e0d5ad810c3063557c4d1e58914314eb08689a228b2b8c253658b2f886810431b533c38030d185829fa620d294548a298004b0d825001114448e8d0c50d42cc210314a4710510425176b842892e49d8502606a9ccc4041962a6709143982f8e109252861c626a488119613817212a4f1411071a6ea4c006381c85513e396d90a946182ee8b042ca1a62bc51040c53743863088c1631a4a2113c39d89a7a4a086242379c260b17a409f3b98549b32557b98549732588ee7fcf9f732ee7397c0f3e57458e435c6ace473f2781bb3bccdd5b77eedc79bbbbf3302b38663261fcdeb1a3a083cf5d0a7783858e6d036908dd6472cedde53cdc1ed63bf909ccce5d09e6731e2fc0ee4470e2e98e6736dfdb4eb94769ddfabd81339b5f7c0f0b93f3d13fe59482b37723a5ad730ef5a6e3b10f4f491a848ce5d63ec80f0535b7263827c0fedd13c2f7263919c26e32fb8d18216af604c1321bb1162308d0e44725b7c761809c73ae09a4e29a8dd7ddee9b49f73039ce71ec286f3ed651fdeee898ce39f7dc73cfd9cb39f79eabc1cb1572fadf430825665fe75c4f606e9be3a8175d78f909ccddff6200616b0f2184d039079d73cfbdd0c194dcc2c4e12503c92d0c1c6af250e601225242901fc1a970a5e0a8146e72d012709ffe2529f84f0fa57ca8a704ffe954ff3ca17970772725e1232fca05f7dfaf6d6addd7aaa89cb34bb364539a25ec7e8fbf09e1039c07e1db0311711ffbd7b73fc17d6cfa4bbb68775515d5ea4de7ceaba954a1822a7d1176ddc7223c9017f11401e0ebfcea921fc25584fdbc8a44787b1501e0ff2ae2f90f44f8eb2a22fa14001e041ee76a73ee5636822c67be32c8dcca683fe26d3f6800c07526e67673fe5e3930609e8b837552c5052e490109c25ca374414c0892e30dba474e18e310888891086d860dca18214ba552690516924a2f964aa5126a04149ca552a9a48204ca504a4ba52f957a4ae8c1ae36c37dc49737e806db72032564372108eaa7532f7e6dd7e5b9b3c378d0c0eda3c34c18fe1c3fc339a6da9a10179a517ec1b39356939b10175e9819fe93983d47f79d631205648839690ca8a14c0369f9a9516d6270ceb9e75e7369936c4d4adc9abc4eb6d22965bbf29e90c4f653febca46c784a68a4d19133e7a42f29a5f84ff8da1a2b6acd9f5509cb5a525a076eb96d81a54b36390a6247c1973c92f0b0defacbfae93e9635315a84db476abfb5c54c601aa51fab8f71c6fae857dfaed3b595c6d9e49c5fcdaf2a4cb606312b097f5845e4ba32f3deeb7eddddefb9a34cf67ae7c32180ab2cefbb31c258d129e17bfd9aa3a4956f732c4e42e5a340e75502fff5e42c47e2d0139ff59f4e4d0bbefa1e9d12beaaaa5505e3c36f179fa353c6086184efc465f80d3ef70060651da8dc5ac2ba56cd807f06f7a6b5284e2babcbbd62329fa2309f7e8b52da79e9cb8b7e9552ce5ae9b42c5ba9bcacaff3f2dc37e879b4780ed4e4fe9b351ce4eae775badf726d55d68ff33bc7d994d479addcc2e8a08a3c2fcfb7c6921651bc91a7b372d3228a33ac3cdb06cb39bf5617c5b8546bb576d65a71ecbc3ccf39bfe64ccf3657f62da5b4ac652b087f54d89c560a41e4b64f2fc06f6794e99c6bcfe1a1d85ae96b7b4e5eb4a8962e1e8c7d298c0ed0e4362d7b6d452dcbb22495f206952ef97e4b2f4b977c7cb55cc24e5ad6b2f82bb4f86aa58bd28131bda81b84b1e71902cb5bb261d2105d6b2f7e9d3a2d7b2f7eb9854caef22b8672542ce2d9fafeecad8bbf4efbd5b2158e652d7bf3f46f706eacb5f75a6b6faccdc54f6f90acf3dee0cce692fdcaded852a96459cb969e7e0907a7f4a552a9c23221932d6501933320dd1eacd2b296ed06e4b4c7031c62c0598e8e4308a1bb4ef13929a17b4ed68f5f3f5ae9baad93b0eaef5cdd243b7263b556d6dbba734e4a27a58c5fddd7ae3a5c21f26f3c6ecaee4b30fd604676dfc33d51eb79418e707e27c899cd540d46bd1fbae4f7de1818a3c9fe396e8176d2829fbb46026edfae961d19b59faaa1e2c807a429bc8d2fd945d01e6cb0cdd15c6bcd4c8b51ca28e36bad7dc3a6a31ed6d8683fddc4f3d649b933116832440189c31c667294138194db9b5b2b9857ba6421b97e7dffaeeac4f3bcd6b610faafbe6bed87c5b2fbee9dc8fecba4b1173a4f249ee757f38772561f2a1172b1ac7a60f2fbea7d563f5bfbd155a5d89195314756cae4f7f6ebfdeaaa7f2f244272f5b362181092cd7fb7c8b4b3ed67f7ef9369af6cbeabf592df9a10264d84e40ac380905c7d85b950fd933967fb41e7f7673f1bd6515b6e8fbe6bb61f677266e7503e12a24c6e6f56368c3123ca18338672ce371db8fbd776bb6fb8d21ac2c6e362c6cc008aa320c4f05469427e3f216821b24402eef3f2abe2e53d13f26b5e5c396b66e4f7fcbd8cd0f4ef7bdccfcb0226f5bec77330a6fcbca5e01b7919c61b70bb29bc2c605e1630a97653f032495118a5de63f7e3de9160ca39a59b02efc82d8c1b3ef41a6ec0e090da48c3d5e09cdcc2b4f1450bda30eaa932f4723bea418a17a6c2e7d3dc796bfdbad4e63eeeeeeeeed4fa05a7a44fc6ca45d8aab5175a9950ec6624b603e3450f5d88f4a0450d9c3c195b47e120872b6450497119c303520ea923ae10e161cccf2bc3dc8e781022a7817a473cd8903b375283e1021e1dc47054bc64b7830cd9ede005ca479ec98fccf41ea33aa8b536cd910e4970e1851496bbbb37520e6164f7745e529c28e20533480aa38c2a398c11c51a5dcc88218d944b51831a93708642b99f888396547f4f10f7e3a9fe23eea7a9c04806548652fd2ab89fd8bfc2d0502a872ad9fd733f8fca7cb1646c1b4c22566a70438d0f65905144cf0cc0205a028e3526300223e58ffa2326c8fe41b490818e1c93fb414113eaa5dadf902a867c848315d9fd731f2079da6004181cd59004c6910d52dc70c30d654c9122fbd19439b27fd700a3463023861659093660b2e3398e680023fbbf13d91f754414c7510d5c64cc4375df5ffd72004c3dd7dc31ccbd64e4a8ea8bf39104cee015f7f31a00e5c0de5f41e13ecde6acfa922b23f7d38408314968dce8c10d3552fdd518f7430030a6a8a28e2dd6b8f2a5025342321327b63fe04c7ac76fd3bdfbb42882d7627cb089cd45f2a7fb911899ef09f228d984f4dfa0be00cfa48e02453372dee3c839e77a785081c0cd1dc4f24c365dd651f40b2d3290f9377858ea4ef0df7fc64ce01a04ce2c4dc29d1b6e3be7b4eded1b696f5f28d32b7b50ec557dbbeeeb2594734eb9e83e763f17e3c94beec31808311143982d44626ed0831509a082a8872f5c70c50f6ca4fc818edc0bc8f9f07f579aeff10fe2ffa8ea95993a73729381063ae7734a021f06221f8f22c3af5535e7334dbce4e5a29b2529e01b0ce57c40f7f083c0962a7d16242f71377456744e4a8696595118c634a594dadc5c787ac1f31de7ebd757d959595bad20c9ce4a4a1a5855b1b2b3b2b6f2c2021e4752bcd859555955558542f5a7222f5b6ff38544fde5b4e4e6abefc9b005f8622b38aaba9194c2cdd5d5d5472e201ac1cc1354f4d0c5161c709182ef01f773a40a3568145106143f4c49c15f017e0bf05b6b37859bc718949315299b2f61505a0b36566094b229c27909b8cffcfa958ba419be445b1999a9aaea815c75595ab1e028f845d83ece85d7a8c1584f711f9028c93eac0f2de602ccb5624d4e15c59a380afe0aee537dacb0262a6159e23ef05380dfee03dcdb7cbb0f78a5b7c1a0e850a102a354097f93011a18d2507cd97ce9baf9eac4d0220395d766928228a56e43ff34abef243a27fd06e33efed3c6a0d254aa402dfe03bfbbb4177803bf8dfcc753f06745e1b3008f62e892e137a194d20a3bc151f0e6aaf68a30386b22d7cd2dec88a3aa07bcc7dff7012e059bc718145b45cae6fba670f3250c0a02b038324adddc5ca5b7b9f0bf1b54b9471fc88f5447dc875618bd5e4be1aba5b29664c4bf912a07e18d1c6c9045c82d0c0e6234951e3d1c9c3b5b3093fe471f634267b6beb985654d9e64fa1d03391f85c894ca79a299caf92851669829194a6986864c2919a49aa1a154ce4799019592c1d53194caf91982a47230fa56707ff52df31021860b889698b24317299c2933d02229082cd0384a097189d282285bc8a8a101d2fc01055de4308329c2a821d5dfaab7425fb2fd1aed37c8c4ff848466f74d647ec165d76b7236bf7239728c5846b1229cf75b44f4291cec84e4e5f833bf1dbc91fb2795dc62764094bb5fb84026943120737ca1ec1789952336343434e43ea2f0426789359139622f38c7fe06099b264a982b3618734588d78310af872ca2142992c55043a15e9a9600d3ef68ed45f36acdfa7b112102a413a79db6738d9eab94ae3d084d3d4c73da4ade2013da8ff8d5d56abdce5aaf5ab1208e8a2f5b3bab88c7f3c0809c8fe83bae13dc477c9317397e250567cd8888b7856531a109694d8d19b965592b90d72fdaa91745623acb5ad6ad5da246354be48aadbc727e5ea5dfb9a22c817564bb453b0fe477da10b9365fa9ddb93a957315edbce922fa94e9775c5166f8940923fad40e76c4f9007254b474ae238e2a61408e8a44b250dc03d699b40eec72db22065772b5c96d8b18d090e5571c355af2bb463a17ed7cdf1d64f9eee6b685183768776fd0ca36902b76c451f116f17cf3143502aae658d6b23937d65acbb2d6eac84a776a4bedb85aaab473b5d4cd95d95c92f36a594a296b0d52b2f24cce9a0c92b063661031e52062cab14517470d28d2c514cd47cbadf99865e63739ebd7f61be4c4524ae9fdaafa3adbace84b1b249f4aec9f75f7d137d2b2b4d65a17acbf7fbf5e9dedfd79d9971745c2a63d4a87556fcbd65ad7d64aa36583ac9d6dadb5a61e95b5bafaea16514394e1b5d85402f3dc224678e4fad5c65ef9d6beb5d6455dde243c72ade69cb3d1a6b47b565789bbd662f4089ced7c39796ab5fd39eed372e91ae17193f0c8137336d58d8eadaea6947edf206a59cb525cedecf0e86167962e3c8870cf3908e9103303924f45e0b6059a2ad965ec28d8e81c380362dfdfd484bc6ecf5945f5b1f3e152159bb1479e8028674d06cf3dd9c351a61e28d4bfc98471939e2c3fa7479403cbcf724c580f47b9c9019eb29db2150f38b333e5b48c34379cb1218832390b21fb3fe71ca6453a35e0ce5d5d334927a57bdd9d45f75ebff817c8e36c513a29657c192356b55cc10a9cf577407e33853bef24b8c0419068e85dbbc3de171ae0e69e73a20ce4400e87e038012e65422ac0fdad933cef175abbd0b9b11b2970fb4ecade42df7f058500c2073d4e1ef030edd8d1c9c1b9b1c125ebda5ad129db0fd87eb41fed47fb51e41ec8bd612368217727c35dbbf7c7c4752f31a543f598b0c32617dfc70bf6c32be87dc5ee674e0ca138cabf871cd543ce87abd0038bee033c75310f381f5254703f20681ffe3164b7217b99326b3ee0812529c02c396b22a696ea3a63d41ed23edfb30f762cf759cccd73cb5e76d97b88e7f6f11daa87c4770f361ffd1d82ec87976b401acbe4fb748872949b588f7c99679c583bc7b09d5d022a9b90dd9b80721f450f5d0390430620bf4a2f5a9207905a480365855ed23e3d8df2f7d6a8cc0024e401f410200d480b9a84ec190905c8fed908d949683fbc85cf48c8ce424b7243778dda82e0f63ebebef1f57bb7d8317647dbaee4ac94fd16e191638c58d681ec988d1adb5ad73a9290bbc4f98843acfaad7a25eb56dd5d7d9d734e5a5d9dbdf4f40a9a5f5d46da12f7a3013473ce8b2241dd96aceb60ac2c55d2b9bfa0b991550d98041cdfa1709fcca7e4f83173281c4c7cefe23f9d8aef59e2bb16f799d23e9d43a3e2471c5aeb70359546c56f34f84df8f157acda013b97f72cae4507dc9f79961c5fde68c0fdf497d6bea0695fd0c4b7e96ae597aec616535a67beb1d54b39e7aca0503bff549a7fb2e69feeacb24aa96323eb8cb24e1eaece2a9f012cd7742e0f1ed5af112d7d8b781b54d8b021571d9b9f53522a6945652dcdcbe5be46da1c594aecf25c4bf54b8f7375ae743ee773dc4707cb84b2cef75b37482706d0429cafcf96aefa555ae99a9b3de7ece67125fa3a574ece654b41a5b6b1ed866eaec4a816dc5f732cae6a9df46bec1c2b78be7ccb446239f809bcc3ca1b247bde20b9632b7cb0e7bbac4ce808195fecd8317603c0cab3ba7596a4cdf73512a4a64c43b5dc551c15bf34858afd7763df96ac6bf3f46d6e6c4a255a6dec955925f4abaf6e5075b14ca85a7b4b3f2f23eda2bf44caef5b5f76e79293868aa5abb306dce73e1af7a409a11f23ee1c1a48fc7bc5a73372c92d370eed071a2b397e5c22c7af58663a22c342e488a6a7b41f15159cf59729dd84742e599f5debdad89a654ccefc0a6784bb87cb67af9ff99009a794afaa0193803354f6f12aae5c91400fe9f79f4085e54ba6efd3fda0a6cb454218838ff410f82e7b76b86bf6e51aaa3520f45b0392f53f6cc9090ddc980b9fdd1899db35424276d2d6d49161d9fd74c149afc92ebc1033fc27333b5140a658db668050e680293f3165779178ae50b11d0dc99053c0b90136238123272c79a327622847553a60f719ca0607cf7ddebb289757553a3bc2ea630fa19fb52c723bca1a16b9154066970d8a766e2d381f6326122a484f0f0af526a2ec05f57bef5d123a84b05f5ef05b703f3d2736e5337dd4439c4b03f10fd2d38342b96ea23e43e47df4be691176b9f619f7e3a84c79c6f48f42f5f404c9990be292683f6ec2024fe18409e3e7a8b81d1a10ff79b91e1acadfb9f41027d340fc87ecef649c4b132622b27f8f294243a5fdc8c151d1713867c2cb557194bfe74a259c16cae7f9aa0a722fed87ff1816bb0ffc7983a0a9878c0fa59498e3a17df86329e3b6789223c199b692fdfd0b104ea687381e1a88bf1363927045b4005e74cd0eed873b2a38e0ccbb64f7772f9694ee1db6318c0ebce4cc7191fd9d8d4397dfd965c36f42babd43c2ea38f2814b6e473e54c95990232b67f2d1152fc5789d82c0ed06e5a000bf3682bb6b703bbaf246ce82e4173a0ba01ca8f4ccf7543d0a99b2190800000013154000200c0a864402a15030a2cca3ef14000f8b9c466c3e19890321887118841031c61002002000c00080999999b100eb93099ad8df342822813b146085d03e541cf43e0efaaf4e432f6976d233e937da0dfe79a724b0e69c7d7ae8089c52deb7e9a8040a8f8a7b039e91a6f76858a0d4949f9e87a53060722559e244d1d5466cbf21396de51286f75a1fb65dd8807274180b8bc832a387fbc6f4f8d024db5fbd71306dd8ef7cf11cbad1e982a2e35e9274ecaf8483eea33a7d020c65d37debe41d0fe5650b435fa5e1e080bc10c8118a326e9a86f45c646e674f507adf7baede0cd8120efda7eefb4feaf7b96e82ac2fc7dcaababc57bdb8be6a8ea99bf87bbda815466855d15c8891dbf7b38809d5438ee7fb0ba468a52f22181c9de9ffc056f7b081ed8455feccf4e867d5b4ea3ea8f787dc03c79ffb02e69ca96ab0b259cd8568fd96c72102664e4bb7b58fe40c1e059912608c5fa257717bbf58bc08d3a2bd4d3da77dfa5cc4b1f904dd1be361bde9154e94054f4eba5b02a95a16778a3dce899ae6a0c4f4e2a99f92a13b509d50a291cf23dcff6c9a61941354ae711eb72847a6dca1205f5840da39b111f8aacaa4bf1ee8ed0005d05c10665f660fb589c9e738d08b7747562b910cbf32acec895290a213a4284aa4750536a14805b8f487e5d3e1fb49ee74027fe8794cf4d135ba67412d1093ea2c2e7d972a2da011aab951f96792aad42b5162009a8c9b9d00d298d1b60f93284149d67620b547fe765de42ea83b40352ad362eba48a68b3db38191c25b4f595be3a9b13b15b0e3b0398bacd76a8c32e77292896f00011fc5c3695b18fd000b5f95d63de94b44632b6b7fe5f25fc9425e1275d68870172a2b7cd6ce3ef75b1dec8470c9ac31afbf526cfb1defe354f2b6594fc9ffc4cacd4660ee82183a1fb68f37ec351dc8c432c38d60b50531207781c9d6bb079e038318b45defba793e2d5a6f396bd78b7a6e32066e1a6573cc1573f1614fe72b19d0cd2f9a59399ec9143a7d7c1673da643d8a595ae012c2263f99579473d4d2757e78035ce21cee61c97d18b32e934552b90cbc68a3ca3e82cf169cb76a517370c9f5c0a15c9958b9ad98228533abbf7ebd4c30c38e78f76093995407d5df701adcbb1c38c7c7acca25fee2add9f1f9d06f38daea9df37ad11965e14a32cd2ac308da671974d6fc66ee3adb145e02a020a413ae95dc445a8da1c04821d3878ce1837c6ff8617db600056159d8b0081d6678ce9f5c15f5a3c404082bd6ea5a9df3e244987811109a0bf7dfe103380d6343429a8209ac0e1bfa45fd7f29c8f87790e8df8acc4046cdb0e038fd664c823e427da8dea1a826e12bc66ab3743fa6a87f3ba3a6143dd403f4cabb10fde2ee714e0d0506d350a12dd1e55d5aee0b0eb74e129d0153c8c42b76c8a0bac9964e3c9db319e50474d05104259d60bb829cfca89e8eeaedb05ef422035b277d82dcc6e938e294dc4646938a06e01c96aba04e8076324eae1990c3802a2283b33e12b160ede27948fae0642a05c138be68896d92066786301d46941c31d8e6479eb53c5f5d88c171c93d90e25d82998fe3e33c8a3b6938b3b1f089fb0ddebfe9a1cdfb1d6f19e7d821dd0161942546ac237ed1b809775fbbeb2458d0fd8c8e1806f43e5ba254ea460cbcde85ee0611ee0be4869651f24625e98813aa565770640ca869fb5db1e62d52890a7c62014b4616548e1a5fc8f55a31a58d4de4df6799e26b45ecbf3a0a1bdf341bd3fb3ebbe7ba73e4b75314f6925126931eb433d36a4266c7e26c1427243e3a180c91d0217b1a4efcffb480ce6c12568162202fafd66827bb0a93afd116741a9bbd43b78d69ff6a52d5d56e871690fefc0d8941dd91f6bbedf509895870325ed82500ac898c962c3fcfa1beedf44b281c39c4e5a6e977b147e729ecefbad418a9b00c1e9f13d1e297c6b4efb4543f85d792762dd2f66007634eea5fa650d512062de9971dfdf13dd25d6afea87a58945ed893ed02b20e98b4ffecb0a0e0de4c8e9d5342989e95c4b1563c29eba23a97e725773328cae224881b35ad4553f9ae7607b909d5e2b85e60a2b16d4e1c997b69d9b0529ed6bcde50aba2b98663919d3da8d3ec2c24359e4ae71c69842281fbd99073f9ec45871b222c0d1a410aad9d6866d92438c4e31b3b2fef6508c3a4e8ca16c06cd75966ac22fa1c0c3472ee143fee5fab70f472e3d328dc5cb117a1def71253770e1bff9436837939bfd0ae41d681254042b8ca949d062629e98d879cdfdce1452bd62538f4815f3b344a0132b9e1d3666d55f14fb12b077929b0781715bdbdcce9aa82e406efd36f08ced24f63cd40df5a087dd996a02ce00845c2c89f571601bf31496f93ee6b5c2139a6e32a63377b8a19b8f2d0c78a9990bc4c812f9b4cdeebe198632b3eb0f6fb0f62b82a7ccbda4161c3b23e98c710cac99fe00a41d4305bc8437bc8514af12694881ec27deea6559cfa3e029d45ea829d1574067c75abb80ac13cdaee3d35d23a880d3abcfd3aeb402cf244095067304c0ec5f90e9ee32ccbcfd0c0e30fef1a0906402ba0b23f1059345b4ed73446fd0e104c69478c614224c25cb4927ec2bade28fd44c11f633488aed934e5e0971c97497163d075bca181c5b9c0557933238da6e46731b0a2442edf635fc57ca27218d73c8882de0d15b7c0f266da6eeb2f2b250c5235ccd5f60754d26c2883abd99d44b2e78b59afdfb7e54c37a7fb8093d0df0b8aa3a85e058ffab6154dc1d10f15c7c67e6c6de3df32ab848ece303fa6d9d779cec4097ffe35a55fa14d1b9e2565fc53bc6eaac5433b4b8c49c7b9f292da84f69e37ab4165a1f0ee2d625add0eef38f025709a9873e2d32e845bcdf077c51dc4607676175017d45642ed9bb24a053479a7d6204e3f0e16055c1dbfe80e93aa377f3f37c84efa1ab1f47be2e3db69712a0e036e6956f22a9c3e8df50d73199e103f7d77c59a7640c8067905c090da3dc6b949eb7e3bd42755c7bf49caaec59907086136b4afcb620c436d6d433b87d19c7b5ac981ab159ed48f3f6256788a77ce0cf80f0b108d19d396cc74bb1aa4996d6121306996556d814c086e1f112498f47bc2dc8623c4ad9d15accf3383566f42b801d2bc736398f1fcde7bacf13aacc29c34a0a696ed2256363f07641e0b50387dbe95399665f90548c539a63f60514718da1e971bed2f512705d33eb572a609f9bc4aa71e15d9e30158738ed2882abcf2cf032a023d6454bd5186fcc36e341b48f45350fb549a0a14abc05df11afeea4ff82988c272e504a68215773658c3db126459ece0d5be6acbd771f6f59deb4172e2eb21d3f488f4feee303493210cfdc909e1f5f29326783a205f763632ae46fc9fecc7f25bf068eaa0f13773bbb3e232411cb52e43e4810300c34d70ee4762c4d2458d1fc34455b1679c8ef0413ace23a55ec80083e3da3e2122bf1bc8a1b9525355e4a8ca1e5e06d86bf215d8ae2907c6a0226c744c4834be9a4a35d40496648e08fcb1648f0dc7ad9ce1d6e95ec0fd9dcf7fcbb33529a91c0a96b1b009e54e1e271982667bb24b2a8c616484fbb6e61075a183e50e030f62ead5b4b7b9d651826c7ec7f25c5a44615cd5149c10ce2d823c567fd2d85194a57cab2d5138394c29d402fbe835ae3761e53e03ce2d0e18d290d43b3134ab968f54703b6cb439aa488e0c28380805c78cb95c30c5a5c2ee34ac13d5eb28d9342d351a4c210af177952db8d88e271805c882e91fe7af9596ebc7daa9313f284e383561f84a778e852832ca5c4303ed4ebc2a505b067e5c54f9a1a28431a96beb08d6887df17c6821df6f79fd4ddd7db2fd482a768489af1c2081d4498e6c9dce92e60536806e04d6851511801c0f1534ff5d1d9ac0974904dcc06da927ffcdfa7aa4c4dbc376f8560d2b1b36565a8a2f7512f9e397e38015f4325acfe06df0a96f80d7f43e40a75ec2776333ba2329282c9d1a43ec5df2b1140c54f78a739bd360850b5181f99003af269bc82db110bb3cd5721351d50d3400c108f010cb4ba8e1750d2f51365b25a181aa3094db846d7c6828924c43fc9936df476f033170870bf5cee062fb12e60f0db1af42eb1734aef2736331113ca70b23118d6ed95d8955b02a686533d0664272b6ed48eea4893f4b69902e03f2995442512837d8fcb10885285e052470a591b930b4b3b01950f110127c49ba4f11e51312e20c6a90d5c09bc66ae79581f3ad92832dbdd9225c0b161333b2a94f125f0542bc088f24d24c66ad6c4e4f55042ac6d383226861b834c32298becb4d70bea485ee4bcdaf3aa29621924f91fddf17b20b28fc827a223cba9be411e673ec408d9ae21d1afe12e0282376ab32adad2edb0e2f7c84601855cd9b6172a25aabf0125e889fd21b39ea37d423d6e3a8706336ca3d6c32e00baceafff5a6408d884bad10f31372e5cce5525006c4a0a381de44c51948f6c37e1ebbd2f2de73e2ce091ea28ded571d1bc98f3bbf69ca4feab89d46724407a441e4a92b5d6cb8a4f26b5c3ae4b985a6f1e2c42863bdd47ef642a2ccaeefb5cddd14be16079b580b5d1919e1176ba40b3fc188873542bda7e6d4c0935f56cd46c5943360a7785e6e5006057e4e6282ebdff2fda73ef86021934dbd844408777e9b488901cad5f3c96709b8857a7f38cfecd10cdfcde10c937aac6c5ad61a8af5fae06387629222cb7c86e6f171596f12dee59bc8d10b792bd73da55acd46e99eb8ea335d27a54b2b4e714e0f4ae4cbc5ed9a6ae6e808a5aba38ef90e9b6093f4282b23cbe1e9e659e298c1d2946817eceb28878a11063e04a2a7aa6001145183d4d3c02b75843b2c512c26016604a4cf13396eae0a9d41ec89886f563304bae9e3cd90b072d22b2fbfddbea077a190ac571219b70ad31f28e420cef8fd1d44e1eb82cddd820ed9c61d2c7c971df077cce2c39a31e488859f285f1a8eb6ba011ad356332df3365665824bcf14a7ba494362cd88298af387a0fc910d0d9bf83ee45ab249caf6af89bfd583651919083a4838fa6ebcfd0ce4209352556f6d4bbcfd2a44d3672a4ec6ab6b705c91a5c27a846b57f1cea1311f28ff191b672391bb1660857aa1055abc96be140065a3535c90996689c6fda68a30808041f6c880a479c527ed3ed8764902da0f83810c18b26ae5ec5aa463135df02b321fe8a8ea0229e93333908e44fd5e6730fa057285f7ba11ba554874b28029d37132edf87cd8416b8395dd179afd6eebe6342bb4a1a17bbb8b4b614e45a0e926f00fd4a8fac8630caca097ab297188400a65326da19c5ed82c349cd7094c887431310a516c0013362470970faaed667059366ef927eb01e9029c7dfdb88915ee138264abd1773c8e2703bbf2bb769781fd2138cafeb844f3822b5d1a9c1a791ebaa7df323c7b51bd4998d0185ded8629bd26eaf6f64ecb02cd1c2f01327d8c53b01021422168362a8ee1a901c6b11d24f697b57ec3015268a931912300847b6a24c430dc6431dda8d195a8b6103d31d6596bbbb2a2e3541b8f3a314d069061e0193665f2a72b52ee299155ed3c9821ecdef1e85473078700e6986929bc170bc53aa7e0d494898ddbe83aeb041147b56ff4284c7a3c2717e17e2987422e0f7ce4de17e553086f5d4d67200a647e8e39ab996443ab27a962d34fd4fbf835e3d5bb85ac9b350461aab361ae3bada2b8d2532022e210d1ccb417c8b371cf139341f3907bbbee8885d5f8a86689a449bb422b855c496b2d5b609fbc27e72b5726e004bef616259058de2f00faf2ee9f7cedeb8ccad25994423143f29f1f351a72b98416375290913298a9a46b1b9d1fc086e0c36c30b5615f80667e0d13e928cef22bb2e05c2ce374b5d39111885c80e1847dcdc6e46824fed8f7b36211a025b9d53dea31707c64c7c757c6314c22ba50151f714b11dd44cfebca32050d2167f846b416585e736f25f61822411e77985a94056b51eeedca45ff565ba34403ac2ab47aa1cf0e9a4e9470f822833c6a5114dd0742f4f6519590ad2a0d0b3b7f7bf8124262ff3cdcfd6d6128a96ae9183ad976985d927f4aa0fb672ebd4cbe85a30ce4e884ca5b4ac5e32e9467a46054a9e39ae9eae6ee7c2929644e38c4447c091dd7b4916af22036ac4bf0b4aec71041c1d943da9959f1a87a482cb10b1df7fa41af9e24df82d4c2945a8242ecc8df703e3adb0d7914caf542b8133a42a65bf681675302415f4301c476b74b41f652288e8eb0ef6a36586ed4fffd462bb5a64eaf7942125b53fb66b16a4e37315fa3942613dd9d06f48eb8ff094cba2c2c63a518974bccf1e8c6a8d422b8ab857aca53b8a0319dfde4084a3b4aa45c78e6b2f84fc1c570581a3bc568ea9dea2ca73d160662231115bae84a14bcc0752ab445158836abb6bb5f0414583b58743648d622ba1691d25ced2a202c61ce3803f205e7e37fdb018dbc67889011cf5cf1008d512a768428b51b8795b011fdc100b5a87a75fd36b00fcd0a65cffce072429413f8031b36b935a0bf96022e0464866e66b391638d52c9a950625d0140c630c5fd35f0ea5a1b142197c465958a5da2b8c8b50dd439c908fbec2a977080f1ae1207f5299482b49c4df5116551afe65c1aa0e2d786031d5803e271dc528f1b301630256388e612d055e4c164e1180cae074417472a35073befcf317f3b6ab9d5323e0c7093ebfddcdb2ca023b1911235a1f9acd225745a513e128fc069f04ebc29158df96869ce06d3fa87d40388bca49769dfa0ea2b79d044cc8823821becebdd9313b480921172e531efc51123a5cdaae10cdae3c427ac71abe2f33fdb2d8a0c5f88e9ef878f6dbb3a118cfcad5d8e3c0ea460ff55038407c0def9e62897acba1ceb668065a4b9ef3cabf14072fe8bf6caedf463b042018938eff3c40e89093b969d91ce9d2c6e1d295879085d33d33c8c771040ef0370b79b4fd568231d4b3aa3e9fbf1a79b4d6d39435b12226f55675518c8cbb6eade5122f59d6f88cdad8aa24891e6342c02c21f3cfed35b3416ef9a09626ce2da90edce57308aa26be367bd054aa6fedc3fd2923d1fbbd18413f327eab1a8782649020b3ab7c91cd1355d81d2809554bcd4b9458a05c468b7712a62875f1f414ef5f4096bf63cdb2845563034d1064427b3d82611e52e836bb8e98ec32ae893a8eaa7eaad5a30e630062aaefeb376c11356d111b802c7094e5078f27c4c454cac98215eee7d8558c7de7c59f17331b46eedb0f4c964084d72079893d40b5575f8ba7faa89e20aa56b3479ccd03bdbed9b7ccbe81aacb62d02ff7cdd849a9154149624a770816ffd0974e79f8b547bdbd09dfa9d2a1715469900b9e88d5fe050b1972e4c30952080d54c2848b1c2ab59ba649ea0a7e635ed472f9fc4ccc20321cec36721b775282196f30575ce58f8f63109de486cce5091f661843c03a6a195f488bcdea4cf6b8071064d082405c21430139672f30e2c5c8a395412708ecf0631f50ea13572537f564a06ef2eaa7d501bde9f63a0931322f0437db24d7228172f25997a17754c8a3ec503fad603b23c194d06031188a345c4f22967bf9ba018aa0f507c0c222aeb86b3964f612d6175c592df135aba581cef640a4b90ccccb448dc60a228abe2696a8750a3afa55ce92aaae88139b0f5744e09306e68313824071a626b4dba3113f66e10d11787ba58363f5687b0c682224ec2ba78e5430d82c0e1d1da438d9598dabf500d1bca95e274842ec9e3cb59a61fb97609890c872a222c4213221a8c43d40427febcc6e9a9267078b5112b86368c2eab6d9a81f80e5e3a8e6a20dde50159c269fb8673f5634a552438c50e732b522bb732e03b142d2291357e926fcc07712db029dd732f95064cd2661056743605403a3fb4b47851509efcaae3820a176f81992c56040d2283bad59dd532c13ef6443268d8eaf04b332805e22916ce1c36aae275170897d76f1447ff5e86b519e999fc6a7ae991028e7ecc0063a109c9d17b3a1e74265388b89dae0278b754f92437b9f3b7927df13d7c0ac9fd7af125cf8adbf9f1127371e3cce129efe33994236fcc94e38b706c5f129fb23ff5f8223458be59f82f0f862783ed8d1663d6b2603daf0b78f83876806098ee8d081556635423947314980428f0d1a57a9ea8e356ab0d76876b94363b9d5c39176bfff9e7376a8715a9eda69c7000c85d215962d3c09aa18bc6b9187ffee6c38bc81ed709b94d04be9c0f3e19c0f77892bdd6d0a54b9bdd85779cd5688f835fb8366bb74b5bc26f46425f5a61000ce7e863e734baf3b1672cc6d2930860ca31dacfebc4cbc956fdcb541134fc86f1c2946b6fd4ddbbc83b352814153b5c299b8d14f42a5986abe568ca5e44681a22c88729db446ed2ecdea8f583f313036f8dd6db226c98a48124661795d27331de6435e691beaf5a7041aa3fce33f46e7c7209933c1a220c72e3125ba6622699554615ee8684f6b000ed4598268bb510348655cc5f59435b02ff36f944c14570db86da117c575080fe5291d2554658a19f419567076fbe1f3d8e684adab3f96961c7936c46c0404e7bf8489d30f50bef8db241985bc7c217213c755ab3485b4b48113d75ccc2b1147c83459759c051656a88571367b9dbba09bc21a131c6712c633f16134a5f64928e1e1cbff9ef03d90b8ae5357b9ea20fee9224e48a12521820b6262437af28bee581f122b57c68685c88d8c8d9f3d109569e7163f841932c4e276c48d214caba756444d2ba93a64f9dbcba0fd93b0b5a8955bb884b4d1ccd3b55d590ea7b8d98096e76dd15842dd917eb59ed0db4bf8d2cfa7a5d7a986b9c63dfe7ac755d655976b8650f14fbb05112d4227c56a0407a1ce138d3c842a23f0b0a37ecb8ca032b4ac8194419769c37be9844e7eda928d73b4de44682f34656e69adbc73da10463419c0a1bf7e51691e0bb0167137c8bd55440bf78dc7bb9b6426fe0b59f2278381667ea69eace2982bec3b8a03449311f4cd04089d3392d781f0d89880e91635e8c3ce27422459a63ecdb81d14e7c46c51aab4d56c50645dd2add89da99535b53f79fc5038bb938565c51a525c67172032876ae6c09620c3286d1686e002e7ad398a7b5c6bc2dd60e68955e3a975ed677f03830750756d77486b29b8fc7544a8b72e79ea9ec44f852eeab1fc815cc3d73ddd11f178131e3e76b75baa8ec6d12e6de3bf9f2a2bd7b2e86fe3bd0ef900d53863cdb8812b47f59e79fe4679317a87ea4a46196bc2810a0a7a19b3423ca3182d5d021acb28120e287a33fa2b4bbb005f460ce5ddb866f19f71875034e5ffc641034568d4c5c4a021c9defa08f1331207518cb303be2fb12d2b8eb142e5e65bc5003cf353a1545ffaec440ea444b2330814eafff67922cea74ead8359e90e7a346f39be67877bec404745cd609b54fb98aeb0a293d2be81f98f5264ac166c916330a302a0dd67d949dcce00946203d3ef099b9421b9d9b077bc4f05955a2e8d86561afc67956754127072705bb43696f6b18d90cef9c0e46229329ca2338793c8349ee7e347ef2349c51ea7b27a6c9b137c4219459af899142820fb225dd401ec8d06919c37eb7ebffcf46205a3ced7c851f28aeca8e5fc316cca3ab2813ee04e5ed43805271f8e86ab3cc87ae72baec45aeb016bcf9946c2834feb1a667f3f5aa3a6e0097d17376816703d5edfb59ad2b9f1c084c75e7db6a60b1722559061a72cdb9f3c0e91357f6079ffc07da530854ba3fdef9ff1d0ce288bb748af3d25550606609bf0db182524292eb780588d6efde0b17bd3b4fd6175eb2d8ee1b712e4a92197490f855791cd207e7fbc12c4059690f22a63399f42fda7269ec3e5aea75c2e6456601f6ab9027a748b9c9432f54497c2cb15f45da02f46ccf212f34669da9fd2871dc2dc86f7997c694ac0dc9c664c2c5eae213e9c3a637bb3c4e41e35ef1fe682fb3a7779c4017b36768e418a1f27d26deddfa703336c3bb60925d2e67fc4f956a9382cebb28d4de183bfd105ffb3dbc19515ea13f594a767cfc3c9655b0c42fbeda5ff2e20f401bcc94807eb3370764cb0e8a17a61193b50ffb0e4b7b10ea2154bdcd172e1a3f772b642603eb90537f745aecd9519bfc484cc2f0fe1d095e7fd25b8a99abe73d4b2a52b487437f49f16d453a7922ab8ced8502a62a9b190a6bcd32e950c4e9619e737082d05420b5eae88f6732320e973ed642148f4ad9a0942c4f16b4f06a24cec08d2b5d39d1380fd44136f6341dcd101d491e89bcede3519cd06060aee39efec05285b65f9119effac905ab8f5f058c0750eb5032e4d6fce215a579403bba4261b45888adf0e17e3004c5cddf62e282f5e20ffda147ddb62783444a94d67bc9e929ab32720d8bddd46bd3550ed7118db927d5507e4bfd73d35cf0f64b1a1812e3871d0fd716741fcc51d31ceffeadcd6a8e6dec9a7c9644744590dbaf4d7070f406d8f397be12177529fa75cc68b3b375af8c31cc9fa005a2c619e6f6ace3835e6fbff8d220ea0139a7af0886b230560384c4e76b5e0ffc7300cc3cb43dfa4539d8c0ede6bb54b1a1ddbdd1235509b58d9a8181e9f6dac0e2d8130f611eaf66fc04ad1dac6986d957612521375e449ca68e0aa770951e531ead52c11d328fce74862e500c4012870320fd27915bba44cc1e8901c35681b50749df185159e7a5e9faf4069dcf64d2cab19b22f932472efa2cf9fb34e13724718791869fac2ca32e93f7caef89618b673c057ea78374ba39db1b5d5b6f42778406ddbf5edc713a1d86a0444b73afffd12007fae0027068d8ba100576281fe78ce55c54d7b0d66a3e234afc6338e2b718f03f2a12ca00e3941068ca59e1303177cac826675a8d694213f9a7e04eb867c7c1d26243768ab27c7b5325f043dfd455349462086c80541058fda29e3c7362f90b8830dfbedfbb2d382c111f9d2ba6ae30a1dae6fd41e68d8fd2f613225b9442614fea0fdf52e87c2aa67d006c898b35f5802205c3bc64b76b85d0b13f727208e7cf1a3686b4146c614ea0fef85ecd7fd9966eda7d705ef6db63f9af9523505de79abfcae46841f8348277c05dfad726081f6e0184bb7468cf789a8f2e34ecf88c94ab21c9059f47eb083ce40cb643b0d30ca5268f39f17e11ef8c58c2976f805379ff7b849b44c950c37ea9553cf3dbe59775ce10fb59982dd789b3b6f7418f0cde3e6100f7d27085290dd0bf0d42846f2e05205343dd19fe5853f90753d4b14820731481aee7d3de828d6481e5c7e1d8971cb3cdce5444ceb7c119dec96e9f62cfb355028f501730b10b788ba9e4672e6ca55beb3bce7d60902c64e9559bc705174aeaef6e2424d3c8cf9627b40f03f8eb4682e19565dd02f05fbda560dcba9192e880f258ffa623a16988d9ae3e12de72e4a27216a6dd1fe8d915aaa577b09060c0877ce198dc084e4fc218398e27b453be9dd3272710e7398cc22971bc7a67a15fdfde156e56a0026a3cabf6f6926a6f4f147c3acf4f35b7aaef6ae31759b9d4d57ce1eb7d15c32fc7eb5c7797df97d0d2fb112a5b64b22818784b40569b3e344c55efe4e7bbc26c738e207569d542daf27f77d51ce74fef545db85880903ab604e1432f91206fe7415f6697842e9796150e38a2b66c7de76b666e44f0ec4bedfc7213ad9bf8f101c9e04ee7e88889281a1995fe3914546d229c0c0358e01d465942f0e3cb09abe6ff0b6f53f2745053a8711423ca66424aa0040eab50ad75f7901d9a388d924a48ec2d7fafc35286798ab1da9a277fa19bca507ab75b91d4d01c4031a242787b38e3d3966fbaeeb67db09fbe63899ba5cc41860b853b54830cc40c8653dc5ba716a43dca0a7f3f3ffc314e6ee4b8144e49d7d18fba9d58667cc90da1776e85d46c4d462e79e1911858b3dedbecd7c5e0cfca5c607fd6e8c9e1a3ff381eaa6a3a00f04657807e50063493d69569c530ba80325f598f03bc46c6b0fa8d4707dfa2b905302daa151a535df67c03824c461154c93c81393aa41c3b88c8d76c0901d04a91cf273bd5bb6db0b8856fc602c0162ddc28143858d86b178d8ab600c233c639bd775aff866a88f93c330116090aa8abf824a10d777cb47d9d4a7ffd29d30837a19af5185639f817d5c8f323340e1080b102032b84dcb16aeb8d3caa8cebe5c4516fb7b398f769eaa5e3843b1f6c0c8415389e387ea8ccda7736b4cd8f0397645ee2464ebc571da0b474072c9a3591c41b22fc7830f1739f1b0cf04ed6804f9195d9752c9ffeffac1ad5e0893a4970ea9289b95c0d20e204c644b2818c870f22b659386bc815a7cc30e1bf2e6b28193a84996424600405da01274b0bfd23e5a56c3e46f701a9ff4aea411c9092dc4e2298638dab8c914855312ff1a7076b5c40c4c30b965ad0ae62d4e9249758b0c389746f54e3ac970e964373432cb13ca0e34a6a5e6c973474f32e69a6295a9e906d96b8bbed046ae48aa1c9134b87a0c8979e8279dd7d3df479fd2b37c817c4e22b5c848c8a58927aa34ac302376d5483b93aee5257e394588da47d676cea2b8ed40a01ba84252016014e099034dd0ae61cced1184a668f98253656d2558e667f4a1c92cef6eb6ab6878b4a308c6cd6b79ae45c511f63ef275e3f30cfd1c7442723249e8ab9d879c0ac3c2e124560527c0928f7c23af4b32f17048ac73530d7570feba7b13465c511d9cf7036661b235a1fa9293665560b48c73917c0d1893abfbcc46b87b55655b789b5bd4729515e4f62ece9994612af0ccfdb9dd30154e08d31b58cd23044acfa541013c1bf2cb295c026be4ba9b4b1a0cd17723202c941c22b7e16f6482b0c3bd4922c04c7e9fc81033a3a30580875f04932684e2cad9612fd3fce87e2900cc4dbf319523c8b9e7e9ad9a9444d45de0f4fd0b5901433cca14985ba4811031568d8cc0ef1215fb62d4085b7f7d8a3dbea22aff338c98f96ebbfcd7cc65814ebb1bc9f55ce5d3a04fc80fedf52fdd20bd7047b1ecc8a3f354dcfd2f55ef2b38e4d2fca02f8afddbc135714c3a9fb3db3c95512c1f4066ab0aa2e070bd39a0c6cce2bee9103998f7e434b840721f2f0abe6aab0334bdaab01cd2267640b1781128c7ccce833969c1982b81a898af4e1a7a42c9158291d43079ab44ab7adc1da8207a720f139dd0e6920b64937fa9b14f00179840a14f40172d93da1331dbca80cb8baca6539a5d192c62f10d77fa1ef206eefbee219b5a08209eaf45ea011f98e84fdde0a16fe68733de65c0398ca7826e4c041da2ecf1b57820888bd7bf5878f5d0151449c8f0cc454e04a1af0c6f6afa0ebb65665b2fc4664d5d0949f06bfb0589db8846d885ac0281500ad6b3640966a8129c5842e4d6dc87732fc09a260d2061ea7e4fe749991f8896ef35990ddbda0774db097d4e32098155f048a80c384fa907000e9abf6b02c862c7e251cca3fae02169ba8e1636b56be0d587c3d385819b5a71400ee3a3164536332fc5a3c37d7c3f79fc6ba4fd5fe1589d09bd5efa2177852f6acba389f9719436a6a30e187e0ecbd3511e21ab8133edcbfe36d2c4e8ab419260c2979e98846f65ed7fec941354bc198e5332b72a36cd228487958bce9854e492735ee44e7059405d4b998d2c31fb655f40eacc5a08a4810a0a6b1dac79e06ef92f266bd8fb0f14c4a9d3176942c0858fb94f2d9717ef909d906c21d701e259dcb0b61cca3f56812a6ff76e0db1e1c1392bcc52f06db8ff2fbd9762b4ae48bc9f8cf17bfa8260d912db23b9c1ccd734c75e9ca74664c99a3e29339f912aaecb5e476cbdabf23f99366c1f96ab6222e04c16d9cd9c70a6875def44c799726847c59aca766942b7169bb7e3b04ad007bd51897c755544a8aa4103964f0d51e14b4b90ac66e2d7aaf7731343131630842e0c57206c70077059a78384e5d80b25b33aa8600ad6cf1e1477c0bc8caf5082ee22810693d9993c0fdd28e867c754b0d522e8edfd715335e1e455fff1c315f4e2050d72a5a5142e0e3c3e808f15a47f0b706d152092a770b865a0cc0e5512815e0fb2f695de25229845a7fdff2ef49b7a91d5ff97ff3c8f3be126bc2d1d7bc01dc758aa65f93ef8869992174181fce5986a6e4eda376a8e21194072612af55085e60d64b4cb6a97207de0b1829c9e248406e4de710fe624527b6b735843869e3f168bb076ff5bb5e541e2cb86b862de2588cbc9fb268c79638367cb5d7ef38146c0bec2f848fab81596eef79f76d1d77b5b9418f94d5277b00c8196e70f24c81ce622a7c7273b3f8142d09c2702666302dce418fffa0de02003e6e2f1318fa8ac1d4d058aeb12040d0dc01e13d5c290f00b9857c5e43e4df08db63c15ad32e6f3d9dba47f1e3a13bac44288700b385e41dfe47748b8b85148cee13c8f442ae95f1f05c0ee1e77a7f8c1a2f88d33c62d7e773885fcc468331473e0d05ec6f485b3a91c22ca9886ab846347747bdd7265c96bf30280b75f3ba8b852cdf30efc4bf917e74864406255f772a7aacf6bdde76de9822c4cf3e23e592470d87f9ed53c28f1d17a9ddb34ae740bdb33856ba2de90f4b39b88b01c0ee7ac00632caaa5897912d4fd7496b6d77a08c532a57831e0763a359944d159a75c737b0c2095a8720946e1ae5a6670f83ed7c61bca8b385320b00f0bdc116f31c4a626fe9d5c9b9ac14126c80b3260ed9bb3078274a545a564d6ca5ccddb06ef207df272637e65a634194a61d5145079f81dd921565f64a1fe9f870f0e6cc31b184fcc80f410218405a430024761dc55300200d0183549dc8c384e5690b4e3b54384de36c328ae477076797ec9ca3c3b52cfb845ee125e582f5d66456d5ed89b20e4c22cc7186877c42355a059bd1e1a4d2f822cdd8073ea1a7242855580163b9c249e0107e020471d361512256c79a92ab3e68c8dfac87928b4402a2fef282767b4c3d627e7a3c71bc41cf423c04c271a11636abca2f59df13a5733313292bae427d7aef286fa5815b391955e12e39f948ec87d6db47c6cb59bbf9dc1c62425a103b876019bf3b43c65277481d41e1bd1b6ec5797d2c7e12943a934707923862b5cbda6de2f0011165bada5c6b4cb9bc8f8c81df96e9eb48653c5833351aa5e9bf36c12406224507683961e82a13c71767388d7a7b4a9f029e507fa8d3202f27bf03b99bc53081901bd7abc35e9d0c51614017f3282a5e120cd767aa6e469102b21e799487467dabf4398f5c1836e56cb37cee4f966514fef7862012a97b677aabefe1212be0aabfaf4b507652e3779da91255b6b6752f9425f68efa44b18c8e499091c2f294b7362bf59542528f19073c0a37d91ccf78bd3073d3f5a48df566bd6246bb5db9058560475b5f0278035f7ede52c97a257addeb55c272813a8eace93434ef77b9742c0fa55e1d2b1a4497e882f75205a227f5d0f837a14bff7acd5073f548fd82841267226ff59131d48c8112990a1af3626f540f29ac7dfe418ffbe7e81f8fc2872bfba92a5082d3fd42ff858b0e0882947f20bd02995c2e9e682da84a510f9faed69539c011c0bcddf72249dfa9d4ecd6f8462e96a1b84f4427f5dd247b8a8cfd2ec538cebcd2b2a98259038e624c444025df9a8f70d3051cf31d8c3e491d8a17b0388d696a254151b85cff8fb2674bada21ca4b838d58a59dd6e1c5ffb8a8bec90969c2b23a644a228a051bc713132f51cbf54be88e0542b90e11770710dc5d43d8d8fa57d24ddfd72f38c11f7f8849096a0a3543fe55f7603deb9da62fd582324ff636268dfd31f3f1bc9f4b4058903b3ef57d891818942238ef9aba6102bbca6539b3355d2c356d3ee24039fcf9d3f0cffab9c99b3cc965ca8f872681c0e7c7df31ceb4861e191d9674602f161d5ac8fefcedfd0e018acaa8758125777c43fb1a912a802b273d6374ed7c748ec6c2b93bdad52a24e5b477f488c63766ec21a448255bac2b32df5dcd90926ab1d8ea3c3138e442a985b871ccf6f4c1316e7a3e2add18482030ca12ada9f2fc5c93908efd184306ea80d4f1f90268ee7c8c040993ec7f0b923915fee0c2c109623d0fe15ae9c03d68f46668107b3258b576f4638228e76dc5d9816ea4a82bd13293e78e35ee8bc3af64d08ca9bbf3dcb15feeca151db8abe72afa1807e217293c77fa728471eed25476e49fec89c4964e1043c3f3dfa08957da7a1fec35e814bb8caeb6cd08823eaf579a30daa1b2e1fbde22808705770828614abb71a9f6f344003be10cfd6b1e1eff8023a8871e67f99d12cc02d9d5c01d1c8bd8a20baa28064cc8521230be0dd56a6de6fc7f989102698018dce72dfc094540a9b67370de4c03fa99b23aec3723aa543801de1af66d7a9046c0a136c2edc1d9a15ccc3411eb87b699e2c7a58de65867002862eacb756a9c85b8bb7111b0fa8287c6523b73befd39bc984208ffec1c0060086c445f093528d982d4e39c8629fa9bd5f56969c70a2eea675ffc896c94c3edcf6df46091ac455e23d650fcad542531469f9ad1fd048ae3a098b6e2ea95bf14e648fcd001aafdb42d8ba399c60186ee5b363529331e0ec78fdc2e050c13da11a882885780ba684c617403e9769a58a0531e53330e545124478a2335cc41637b2a2141a6e7b7f4927802521833eacac69d9898fe094eccbd9935004ed413516432b45144aa7922801404961642aa83790f0a52e0a1c1385dc3c616162826229801db923e6ef0c387f7e42080fe5dad4298bff1e24035e35836d8d9e8800f32e49634f137583e698284e5144ea9b28eaf332d57891a503e758c44bbd8d3fcc5db20d2bd391cdbd22e999921530586a76b5f18863bade5478cf969c0490d4c2096295fc1cc88cc2937c829443c186116865f20e2657b21f5234e812bca0e5085153cc2973cbf902347a3f00a14c40d5569913e46bb72f348250802284b3205c8515deabc987c426b56b4f2e240de01fbc05206fadcfe8173e4fce62bba4b6855c64861a5881fd02d1956c4204e3607c1acf78c21034fa26297404da0fd66059a68af9a40784d673adc57910183583a9ed843b08227e36a9ddfb58a71fe4d89a66b44e39333b1f33455aa597c712ca0b4724e9897141aa3efc0cf1be1c49120683c371b2de67610b5b33bc6d089ce038c0148c06c954f174a9305037ded836b6a92c4a19e5ee8370f99069c9695711819c28118d3d8352e2332858f0de380f655970b22e9e721f94eb92f1388ca0b75475d1ce901a3ce20183233a1c14829f11e8655710071a03be39008c5fb8128e56c1647a3158671e4058a4ce4d55406282501e84124af4778d7de0290c1e380e87a9308bdeed86390ab81d572e28f03c62575f3ae23fb8966a7de1cc31c678b2d3ad1576acac926cf1e70fed1d219451d4caf0f8aea0491ce9db010f889b77f063860577be79fe19bc570e0e3a5e4a0a09127d27884f783ed1a39fd429c3ee9b8c1bac8049bd73391f975c6b907de123a1e2fd869462e97322b677093855da24c0c44c236a11c89df1ce4025edb5991c81c3ddc72d058eccddef12a58541c06ae1239f3a3200779d2caf9a23010744a1b1d0c37481c2680060e4309a17ea575fcd2897a5e381e4e4e81b154e0bf3daa97c8af6421072e99134638974a4853156e1e635a875a8529cd3940c2123482c590f28c4786ca0629e9ce44ba0fdf51c2f308ee36a1ddba2d6bf675016bb373b3b8ed2464672d2ba6dc85820822e65f615e44f700cbfa3c1f5c8b08d65ea49d27a3f577a4b09ed2d11b7dc636bf83b8409154946e49fb62656fe4d7271e739e643d3f7ade4dfbd8df1c885f6217c658104598f649713fd4b442e75d00ff558dda4a4fb04e0663c208e0ecbe045849cfd2b384be7ebeffc83ccd464529d517890ab87935169cb5cbc0c8ac7354fa5a2a5b8971e59150d94a989f35089c45e69c71c77ed0d64adffcba25272ef8270b77bd227fd203d86a4bb17d00353f83c9791609ae5c6e06e615ceb351541f98ed4bec84bf679801b21c2cfbcd6f916fc70f6f96c86d78b8a8c55b7d38e0a4182f3d25a0995fd584b5238874f0a1c99ceeef902769beb50957a88cb51bed0634865e0660fd8f52cf9ee3e85b98d46badbb1b4eec50dacfa96266036c7d931d96fed39a6ad4b161f9b5531305b072975b265ec8b23843093ae1bb92207d738657d70030436856206cb68428b1da3bce526c4b41a02f8f7c56a22ceca05ecf54befc2c5dbd5ae6ebef75ff31177e71dfd73922a6470060b99424b4a639981086f5036d0e481a8295fc5ccf8c578153743fc09fbed072a301d9b76e77d7c26a226d47ff0d261b889c6d80ccbd0e6b65a83d757b165f02854e561a7f97c042ab81eb29ac4cf910503805dc91dbb4601b3eaf243594503edc1c71abdc6123e5bd077114f1bacbe078731a18fd53afb95471db819f6f7c2eb7fe38b59040c3780ccda54d125f0a269236952dc0fd3b99b912e2de33636bc38d809e3438d4288a8c6cca5d6d8e7da350d01829de3d1cf032ed3ffc76ebfe2c2a877ab1ce67b827668480a3129832e19fd9f05678c75a29a1ec51a223d518d1700144112d294b5a16ade6eb1c5ba7f829393f32706ca6ae733029b1e9ac67096e026ed8d5bf105514865e2752684c5062a7f79dfb0d750a390dc8b6619fa4c977699f4befdcee9375d32ce85e64339d26c0bfb9d32d3fd8a53705c6cfcf8c825fdc2c79e8e62bee12f11834650a35baf05c5bb94863a6f0d8375f621b544b1479b30e5ab5e80be8b9f3cffa464e8594921da5f15c8ff59d9cc010a7e65f75bab95b60f7b5025acfc2ad4c08e4af95edf0ebf5ee2e4608f262046403b8ca951ab4a0b1305f2eb2771f3edbb133b18fd22525243a8d254a9f474ca08a9610b394bbe708e286eed61015e5f1fde776901641c57bf52fef37c2ad08f554c02e84240efcf215e97a18a483764422741a12ce23a924f0e16301e7b87f17e6d95a11ba8d41c441c3ad88f45f92446ea1e20c76a3902f506e8d3cd0cb96d9076b149382ca8b16a8a08041e01a65993a4e9619c215148ba584fe5fb8f16da941558cfcbd7b1e48b924bf3828e072801ef5fab182134a3974862295705314cd43409f3a6c9aa11388bd44e21fe7982952a5d55c52801aae173b498a91765643e7cd0c2ba1ac600310b8ba849323f3a73414d6938604943f2eb8a540dc703cc5395ca591b7be399bfd6b1f718ed4f81ad7762178d5015033efe18f051f9211163942998c1b6127f4f26d826cb1781556fb6df71587da3da3377db15f38f24dc87461659a13ae1026694e47b3a74bac3d41dbb1b653a23845c85d5c093d2474db1c8a4b060f74bed83f8e48985b8eb7aea827356c44fe21b5dde8f876f5d2a70fc93db386524c02040ec8864b74920c5757466deabfbb0dd593f623deb1c1112d9d7b05d0eeee87603fe2892de2883c299dbb0268ef6e87b81ff18cede3889d48776c85d1f6b47df58943db3378620f8e9c4c775692b441a97ba022404ed89f815280efe9997e472d1aea787ba08e5e79b7066d8f02283ad68eb88f7aeba0c3df632a6abca6eaeb4d4c1843dddd3679e3f603c74b4ac4e20f0854434c7f1528f0dc9329d6ff2a4b3d3c0500cb7c0fc420930bfad017c673be4e74ca1cff04400acb139071907eb0de4922adf1329e301c0f0eca05fa2246e3330550e6050d9510c86789fd400e80ed62d2b516890db78c60cef1867c96ec1bd040b2fa6d34f893ebdc833d2715003ff3bb06274948e948e7d5ea040ec28f93171980700045e56a8a0e2e1bba57a00aee9cf8e2e9678b299afd74e3a53e921904562fb6006cd5379b9cda48890f69ef0729a9797225a1eb15f10b89634547df34d8f487a361b09cfeeca0e7e123398c5a4cc2060ff6fc54c320d57bb79c7f43b68dcd3d915973fdf508c70c57925ff0db7ed1e4d509025d13797bd762963954306d1979fbf0851c014ebdb96e0e5526eaec9dc6cd60c3b4484c25958326cf402a7c6cd5887afeab3109ff6c18719d2d88b7831bfada407f2136efc6ebc4f458518fc11dcc6681f70a16206ccba75a01ec3cc808dc9aa6afca59a1ae13844104351ccfb8228adcb4613e4e9a2bd511bc87efed26f5de8a1d3c38633f71e3b58b85b48a6c6c9e2dfb41fca8e731e2db1bdcb85871093914f84a6634256f2f1c20e8fc6739b79d1e57b51f9900c888e1e2e665db2d8c021007ed8a2e77b4b1d56ffd10d835e65bddba89819b1330df306b97ef60cde9d563e2b7b3ec5b88e25815f562a0b12782ed184ec9f2a472fed5bfce18721513b01c0480984686befe92720f79581340bebe0faedf9693a698892291fa9086e95235262c6438362b68c5b72a8065979fc168476c6d7b28ff442ef27d7d2d43c6ee92aee96a646dd588fa435530b5ba2726d17f17ad482192ee6c3e1ab30a677f05d2279e0e20bfea8552b1fe7fd123cfd55d46cf9c519cdad70311beaaeac27c8354a5cf3a6d93270e551582accbdde982ca8c1ebd656476eed9ec21c68f53bec389c4516597144154303d32d0420cc958509490d7b2dbc8713a28f1d268e48df5a17b9ad10c59f957027843b33e9c9b2ec162207235abd4ab87a38d3f51c83d55274d9db08bae98a9769ad76abb330bcdd4f8f14e74c867725f632e3c4b378049ccf308c585394a36f086b5d3012dffd7d38be6aa3c460866a88f26a235497906787b0ef9e4e7f942f6356c59441d659227f9b5e1eed9905d17e1b403f8abfdadb0a7c7295bae93b4189cdeef215e19debf83d514771e65f1464e4b4d7e83ff4f41c00c809cb77113e6d0615a2d5a97c2efbd498dd4269228b56f05562667712490f812d10d0efd576643eea0d765e4b52f53d5e8d2dc6006d351ca5b0bd4dfb523e3143c8702f4f1181a2c13b1a60ce1b085215857354610796b87fd2aa06bcaad3135c9103284fb74af88fb6ce9e67cc45d484f19a1f7c0d037d852f18f594fd196d9226ccd1004db41bd0778e1282ccb9e7f10ae2553daeb022127e674c52a13bc239c45c9a066f5354c245e516f23d1677aabf271bf51bfd9c91aaeac21f3cb259a9e958b519590659368a4a00d40c1f34aae25b33c61a0fdeed612c27f65af381e0401954fa6b6a550058a75c3474c57755cc349339e0ace549b8f4ed6c335bf3c3ff4ac58eef8833bffbc6e42c64789a93e43853215221cebe2caf50c0dcf064edc0641a7fec2cc9ed083eb882489174bed3ce573e63acf2fa5d934f8751174d56eed3ec480590c42ad8ff40924eb42045aa3eaab43712a8dd0459f4ce6a9ba907eef9f75203e58927bc1c01291fc40dab24c5cf8d885df47c1d0a031a0815258a80e8aa6cc2dc0b0f28798e8426bd978512fb6872d10ad94460f7adf029dccceb621d0e6b72401c5c62ec42e331b407f6ba9e2134825cac5bb5ba0db1ce2ace1a7be9c8824a4652e580284536e021ebcc4fb90489ec2106a3ea936f4b93340a1a756c6050bb03e305489f71a8b1a117e7324f40a0e8d7f1936df1abb8f38ce093878dbf52549d1f01c0ebcf98f2827b1ac7124a6df6e8597ccbba85bebdddfd590103a1e3d9b0ee1a8b04e13b84b87593854f03d67ef84aaa5609eafba4726ed0fcec2542edb3dd921c56150d1c8ca035696e34972bf5ffb936ad8316fb8f18bc5c492b619bf2355bbfec5beefcac51759fc7d5b2d607a276982ac7511af773e8e48198feb3fde4dade24a7c52fa5fda46e5991d7056388de8a4c0fdb9b1916ef9898faa7162465739d5695de3904f6eef062cf0dfe3fae0456fe6644b66366dfb969832e009e4bfa7fa1716106b26814496f12270a8d26475d7e722ab9621436a53fab4cf6f1a9ff74ac4c60e46a21e2490cd0d69480d796df372d044c48b76186d69845913184a6dc84fd640ff009211b16d70971199ee07b0b879c11e5590cb5a009139e2d99c0bb2a857e4304f66ab9d3fe7285ec604981e60f07bace26b10cb8cd7a7d186b7ef3e163143b038683755cdfa2fdb76ca7c7617f2154d5896e8ba17b71b97bac56d835928f4b31bc7a4191a31e5193460b8707f72f0a45a5557160a6f9a79c87b24fbe7b32e75e813cf3ce45e878e8a6fead835bfefae3a5ccb2070ee95242bbd810991087eb6c0dadf360142035414c0f0c22bc1ba02c623fdd24c033958ab12629d5653f2c24216188a6147f6efb71ef592f6aa5239539907555429b4e5c66c38ca42c6ebbce830a0df39523c3ea57d2fe3b30686845d0c054295b19158dd42c15b4901c7f8ea1314530fa9100c9207f0bbe9734fe82c8745e0203e2af42efd03022dcc7f408b267cec5e6893697022af864ed7b9e9cbc3d0a983d41e9c0685c2fd15b3fd636f8c97692951309dc08f11d204215db1d53dbe289acc7c4eb8f121ec4e0c915c1a87c0f8337bd5793d165e0551cf156a6915b64492db6cbbf0817222232e016f99e470b305fbe533edb1b43021e72b761913ddb0518bb862d8175f170c21b10eb30280d6505b7fa5f2de3809d3d276a03f3c7eebcd26b3460721cd2e3ed832101458b70cf985406f60b27aa55bc255e61fffc2e3738000a5064c8b12bc1f08142a7081fbc10a591c2734933b1bc7646b507a9450423e44a5ee89e5301b5fb1972f4172cf8b9ea006167f5a225aa34689b8fffbef3e3cc469105608e929e1e84a0e591275a14c09713b1d2735a8bc6ab52c9b08e9e1c87e1a58a0499131e9a33ec70836234cc288ef4bbb091ca2fbc27572fd1a833d856b2f10c4e9286125f5689dc790b010a2156f51b5e713d93acf7010e533a508b5ce0ac645902b2aa0e0611ec838ee2ed5a038f68dfcf8b5d126106cf6f0de5db7f32f72e9031475a4e149118e733e1204154eab21bb2ea9d459fcd1c3f3eeee7fa812c7e98f52cdf4ab202f173e545b0063c5bbcf9e9ccadb51d51f7934ffb8b6ba3c20f8437f79cc3e68c759e394e7a4fdce997e1db5c3eea7f561a895ec3abb222d2cd7f7313b1f624d3b087ddeabdb7d2bc26e577c6eb7137f75dbd3b64a38575a8e6e85437ac8b3c0141409deac355e01d14f1cc326a71349b5e6d3f67cbfde30eaa159d2cb5151a6221954b52cc5517133b5c132a69dcbec894e9d7b4ff671378c9b9ed71911243938f04415eb4e92844a0d750ace421dffe601b710b4bd6d57b83bbf88d3b2adf71560f2d23bf3ee6e8329e3df161b7e4c3aa98aee49de74dfa6bf0b525d2a6720dbcb17c95da0981a35deb2718faed8f08588b7764d893eca37bd706cd159c9e96761582a9ab5723db40197d634062b56e5df0f28c89640a772c37841d3b26293e6019d7eee79185b9e009292a8f97325e37e25c010fd722b89b8141955e935ef17f901d32ccdb9b912a2e5e6b337d37df99c9be7b686fc7bf7db376698ce92cafcba805a539265056385d41782bcd45082920a8d98e10d08891748d55b6491f57d64a6612c52f4cbaf8fd04a534610fbb28563de98a9c047d0de1737dfbf376905b644740c8d81009293f0d8d0f1800300fadddea0c168e67fd950c9e01441a990bf036569b97739217aed6cafdc2dfe1dcf16a6fc0d5285d9b8452ea35db75e802cd4c3cba8d61c7bd38a9521b1cbfcc5bce0216dffe06168656d656dde60604d42c2bcfbfc18ba8d9b92550bce8971c29d785f2031454581b82b35f5d01e45d911c1cf0c060142229b1da8f30adb658969491c48b6a85af64711b0344b35faee3f53674bde01bd634f103899af1ec665628e5cf411dea0a3d9dc489c46c310c2175c747f3b0e88674b4b8809f6dbef46a27121e0b075a7312cc078cc0c914403c2f91b08e42c9b3ccf32512103669b1a8bf35fd5d290c0f045bae7e9bca5d1997f26bc835c9cc1e68af71f2d8caecf50ab142ec1319e3110bf739d27f05adab26e3aa77d99665ae749c764cedf128b81cda22d73c19e72740e839318ee723b448b408d5cb41970629d7fa9abe9570f221783882ec0926bcb4ea360d5d7a7733c792203890c541edc000ec1086b3f0e6e867d102c8505903c710e1b4250eb59d033648a5f8cd1ecbd2ec0f1eb4ef04a1ca28efe2bc7ed87d112728c60fae0a69bb85f89a64c65b3dca37abfebaec755e6441cc3b8ad7efa38697f588ac06df4ba94d39c62f9c1f3a5b88b2ca5448ad2eab3d5cf68703906fa2c248d3c3e34f849bd52a6285ef1360f039daeeed4c9d53a6540feb6a46684e81d12c0f030fb7844edf543a71abe8ccc844fd97ce06b5aebc1def40b388c21b359357e82aac10f54473f4538966ee3f5811c5c0e6d47eb0849ad0e5c39cb422dfd81627fabb1f4d3f1fc7a6ee14c505e85a5c8302392bae7ce82c07046ea97ab18fc18e62ee0f499c87fb5b2e77f55b0595072ff7e00fb861e817f15d2301e8113b4da8f00b3c78872bb215f2709c48cb016deabab2ecda0e15dad715a4760c0b0f0238d47d1bde3a226ad0bdd9a0615042c728bcd57ae176fdaa9f95e9e9da903b9a4fd446a1d6d98d9ff58e961bc00bcc5438ea7971b61d51644b7e937b2b5f6245c665ad5d41900ab264512ef78b8b2d398a1953b8b25e6a4d7891c2137fe3d162776fb65be69f25a3c16c5cb0d8b58722397b7e6d3b8f2803a2ff866ebeb89ad4450f87903624c4c2ca244c3ba9ecf3fa1c422fcfdfda7e37ab8848e454c276af091e2ff8eb3fbbfbf89a1f7f13958c3834034cd49dc4b84ef2b438b6140113fcdf8c664a3ac4a8acf2eaccd330dc9c431eaea082aa3f2a73ac970e20670e0b422983316b9467774b8fe10c85214858ccb19db96344102482ae400a05aba0d55c06986cf397581b2676a3f372a7408d13dca8d4faa5d4887c1c62d3dfd7dba91b334792ae4fd02e65584e693572f8d83f38b4a527bf34abbf530dc449bfffc0283176ffff16e6eaae41fc840dfa21dd87fb3b8ff9e7f5d5d81e62cdedee33d1ebccdb2fd9ff8113f85c07edd949900f064753e3395f26e0e22759288a67affbe29bf9ba6ba1d84ab5d3b8bfbbf1b2d5b3b845a041d727d0dfa727ff55829fc337cac67e4c4a485db216192b50af99181f065f8ec79269d6745c07bc31f16d6d4b438916d3f2bde8d3414bc6f66dc4897d3779068437484daf15d258a5da03d2542d94d432fc45879ada633ab6f35a2c944a2c0261765e01d9fee5c58f33140c544e3127da53480a69e9924cf6098226404fbbf1103ba51cd138fe54a6459ac1d325860b8be367e378a655bbd3c028c491e399bde810274fa065adc234ec9d9e1df1eae259304287f86df73c1e37e5df383082d24804d34769f7cde7fb01dabef3e560b0832e1809293c6957f3b28e8026db06624a2fefdf5a551d964da53aab517d8598422a8b7723ebe94334de2fa9911a2349a51f44b4612fa5a1b208098761243f49792598394171a0e5109a01098de928ce843b0f2bda20688154b0456cafb6b776c4c5c6e01a06d259133f1daed637faa1603e78423b44612341a2f294d76fe088c121769e0b084c30c41a4bd52cad1379e7eca33432bd7fdfa0a71d2c2b3461fabc2a40efd5d771ba61a81818703c05a3995d091843d856057ee006eb9be79afd14feee1cec53de02da863b5799a10d6c03d993f0e53f366c8e5a6c0da58e82a1834ff4a6b8c2e8392a315876751d1f185befea3cfa0e8f7a963fb0e14d9aa8beff07902c7779397c719fe1df39dc0c22cdcb93ac10a223a262eb63349e516f108145a2960bfeca560768e5923a45c4f9e1949af2c7b4c2991688d7fab2ca48aab61f8f3db08183145af9d5d383b8f8e13130c162c4131ff5c1d5e8cdf52f962d7898fef9a8fc5295819a423d265e51dc15f7951ad04e1dd7c22146991e07750195315ac8e0f4d84ff6141cc055034a1ea57da24626592bca418440c3b082e74c629b98a5a3273630bd3fcb60c1956b26556125b4610ce4990c4870e0b5660dc3259f3d1b10089fd2e2fe74de70b46eab7cf849fdc64ab9a096d25898116ec9516af73c961041584a2860687b02a8b51a9b3be392b5d030388d6afd580bc8249d14990767769a598fe76471bd3099ff679762e04d001e77c741aee67326da5901c006d17e30648843bd814569ab9cf5ea9860a0988b20b1429d4cecbf264c9a49bf376d05815edd3e9ac6e2606cc325e92f36082619aaa4b0a9af6a3ea5d07cbf7142e46d3dd9a0a11d209684f8be8c01528f3483a9a66bd00c33278816b348c93ca2072d17040d969f7236093c236a8e59b95ab82598844d8eca145e08fbea14a39b11e875baf0620bf1625bddeb16cf8d210b817b9a84692edb4b3c4a852f771e28818071a06c3b83867aaab735754ebcd716d04885443263aa7d42a73bf92e3e848162b39ee9d3ff69ec9246efea9ac5c8b89f2572397a49366af5d14b404c31ba9e0d80af264ff33984fd118b4ce57ce894d2630f6caf5ff42a547db9629f0158462082ebfb9bce35cd31b1039c639ff3d426eff892edb21be87148d902fb92981caa0d45a9e3e692bda055654e48c3f7c539bcd13a8de00d11033b2c75641c326d94888737afcb820b0a97958c323dea8efdc408dc8ef68c110bb693c814330a0e7ab5eb5d2c2a9fa007afea4e9722ab42e8e7eca345320ecd777bd413f134593eafa013e2086daea732275eec4be066f1d1180dd44674902f0b98490ff696ce979adb388c397db3ad3a0ed2e9c3b6d036d5470217bfa06f1256469beb1b0ea7b3269085c2dfdaebea445c98b13aa975dc4cae8b9901346b7f62e8629bfdfb8e064cc9bbf981227e4c9dea39ed0a67a0427e9f81753fb06402e30419e35d69f258e503e2b56d7dec358a3a4a14bfef27ae61a68eb633b6196befd87dfd56a17ac2cb6b2673c172c1a804391b6f590e2169aa609e3c4b526c54cde3bb9ae4d5c922f7a340df2bbef2d27c5b8766684961654fe02af716df9e69ad8312104a728fa09f3b6eff3c53d1b56e2863464621346c56de7875801866dad8939fc35e27f5f20c466ec1e6a5e9997c5ed400184eba4593fd86a6d34eb1a5f241e313ff9b0136312e25468af1a6223de610e8704ea09da39d0bb2a5592c2a935a05383e15475b0ecac5e3a6a954ce4311b0adb4324941944312196f3d0bf510309de0cbfae99622702ae921ba0d2c970a3e8b40bad30a3544a0a847dbc6baf412c95c1354181b424ad3598b5afa2e6444621e43436c54b4231fd19af433a64ca6ce38c05c7808b28e65cdf97d72e7e008ca7c7b5ea0455abcb57a51c0adf42fb1dab9af5da10caeeb4eee1bee7e4358729baeee518c96bf4099a6b8acaf50d8495564e8b373770c10851826df45dfff4da64c5f8ad6226d9dc61f59bdc42150b15cb71723a748a1c1a0f4208437e2e86cd58aa7ebc6489c6732a9852fd61c6d785c4210df8c0de039cae3370d59b4c29ed47740a8019ecc1b0e6743e2b103c8a592d5f9eb74e67b82348728081445300ed4ce90eab407fdacb799df1b8482b3994ede907612cd727501bb5d1013f859069a3d215d5f10517f619cdc59a1cb8d951688cf4db52cbcfad9a44554a5491b1f636f0209bfffc57fd1c64f9e71c40186c1f8a5807c501fb317f1668d168749b3c614257628e605cfc69f027ed39d3cdd6756fe98546918c853e36108f9c1fecf8375d1cabebab6268ff8797abc6aae1b5e4d3fb6d260442145781806eb1428cfd643dc0ef1ecedb72ef5969396b6bd5fb8a7530bf48c3b371fc2c5ea9df46e0b5a8d0525766de75daa9a55c62dcb3fe84cddfd18d074ffd50199ee6aea315edf6ef987749380ba5e4b4da422cd9f37db100501bd31a15ad1bc104dc268662b7d8b82bb785f4d8b6208f6bb1da477b7f0f2cb666e65a9e0154405d8d39bf2f09b8cb5517b2c0c9fefa82d2143b4545115497ad7fab6bec9cbd2d4d7fbb200ef40355eeb60d4f1beb77d22df0812ae2767805d034c50310a63dbb0bc350c2adeceb36196cd062e3407c1fc01acbc68353c4913291e9574d2593d07e095571463c225f94d464c5abb3ffa5c2013bc83900f889a27999e52d327656c9356bc5a2f78e8bf86a1e463f7cf6e23a61a4db540b12f2d09531d8bab50f243ae5aadc4dd467c754134d387949641cb63ee24bac2ea25ebae26401a7366b18f49ae0823c106c3a0beab3a4ec42bb0899ac482e139328c7a93759e7db61de422d7adff78158cba284ce53767224d336c96169a44eecbb67d9509c5385fb8f821062aca86b56ca1873c26a9c5bf2efc55456b1a501a04a5cd1518c944ed1eb9ed0b1a98c65d27f2b6156535979df5758224ecf2624e5305ccb11a4cf509591844b386cf5034a047b965b405c514d07c95ac0718805d3303aa29d1b03af1128881a29027362b5cd4b46861dd708746b0f550ec010ff676845f385b9b05d02fe0e18f74539c38f93a940c0024934aff25464e562d8aff7a39b08917bef2df796724b29939401560939090b09bafe9d892ad5b79cc9b1019e8f3b1a1d47075e521efee88a42a89932bf19ef8978189e06d275cf3d8c775da7b70e586badb51c67125568882aeec34c997fb10e6fd67498a32b278cae95992d238b881c9caee32d0f82a5f4610504ff5128d771c91d0753b616865c1ff320ce82e9784ba755aa2287ae636bc8b7f1d97dab6bdcc7743c75b1a11c77d517c36af420f7ae6cf9f6b18738e4ae51a376d7c1aa3ffbb9afebe090db8338e83a0e4ee742ad18c6c1d4f7201e64cafa587dfb982ec9be467df999a665d4975f5ffef6210e860a1dd77196fb73c88378ca895cb8585901c17f1da1297258b3431ed6cd963171cb2f911f69dcc657cebad9f3070fcfd32ee429930825894aeaabbe7c393464be1472965a2b0a854209cd5484715da803b1c55131ce940bd48c314561c47f61038774913bfe0aec9d0b31657a18f6fc6c0eb1e72c624fa95d28aaccd79690e9cb39373771c94d4a293175928c94ad65dd8e195f22aac8f770a210e2a0ebc7c1a0971ce2a0d4e40e0725e9b1a7a4df1ca428c8a48f3bdc3649bbf51ccc94c8d3b883611acb2336fd5022b13139b3e96fd807c330124993b490e9e2a1444816d40b3b7496eb60425ee1d484aedaf45f50534d5f8a2ddad39747c416fb2e4f1f457a2f35f2b44b893c7d1e9c85fb8d05ff283ffd2fc2c2954d49a40f1fc663e69f34cbb4daf24b9f14daf2c7963ffab21c11b2e5779f88fcede5375b7ec6c4e6618646ba50eabec4962f77d46fc7bce98470943939f2f08862fb3fbed908b4ef9fdc39e6b79d714e1fe6a67686712828e6839032d246eea029c16a8772f595f4b0b524f8f480ad4c941538d93f44b9a95ca88fc3c16dc553ea0afb821c795833112bd18083f5e3d69250edad9f7d78791072b515a22d21d797710263ac4991e363f7192995734e1e3d3070791185f4821c469e4d27fd162fdbd315d4c5a65f7c07f18751768efce5d8b306520e3511b4230f0ed10e25097870a6b09d83895f8d2cb4b1dd6b72502565667268e2019a1ff104e2614e4d872ef6fc18a2b6f632f20cd1b4f73e9ce241f3354d0ea9216acf8fb1438a4b793f533935face5d4fee23e26100d1ea1ca27d9ddbb67d4cdc9b3e2942febdbd7f8e8dbff071ec2cc7cebe0fb0f6fd70d46d736cf9b2065b02a654a3bc94524ab9a70e83d02d1ca48fc3a61f5e7a844d530588297425aa509f1c7d7a8880042880238830126d8c7e187f221053e407dd217188268129a574ce48338a7a96534a397fcf19044c05fe21c225052e352e3535358e0412355bd01605f72d0807247050e1a0527910c781b7648ee340e604f1202a1a1a235446d0d0b45a4fe8c4275ab1258364147cf041061151a9b559666d66ed902864643e248be9f573ff39a594157b7f536bad9bbbbc1253adb45a4fe83cd172c1c5d9a18dcd4604ca58f726fb91fdb811b3f6e381032572200510c84053011f5e30420945a84108ba206485892226c8b0fdef66daee8e3c4c0cedf0c0a4ca0538bc565b3103ac18a0458b236cd41c171b971a97151321ddb5d65a31f69f3a4a16f5e547b3a54442b2903f3faff11a076b9d2ea30b64ce0e6d5415c5a106071a1c54382021e7c4a10603e19f88a9c0403d38a2604d8aec8fa5cf49ebbe21abe840549157471c1b0ea00838487de881723052da38b8a235f4e90daef1d77ee2af79420e63286b36052e107958339b3e0e9733b4c42726eeaa9390c315da83b3c47ddf3ff2f010da2bf12ff594e9e2934f7978fc5cbd224eaaa90e5138a28accb157a02b3bb4b1b55a4fe8c42764ab05041c50a1171a230b0e5e5e78f034bc3568ad1f1dac2f2bad5a8c7faf76bf7ecd6414248bf8b67ef1ef471f08fb32c8c14aadad7217490eb35f4cdc34faad3af8e951e4f1678738300cc330fb16cfa7fecdc7beeac3f4f7a72fe7c4dc67f56fd2a73cf10459fe8b0b1be4d034df64ea9808c66d7228f82069248d3442aa7c9046489a2dd0ec0057d8d8a411d28566478cf426c1832696f01930e1033b10c6df230aa9e394d346ca503e8e1c8d6902c922be3bd034816421df3f20a6cdb4894ee3d34f522e4c1b20139a447e1d76e0a107ba25917d73560eff1f880747941923ad3146138d1edfc58effc2e30a07274a0fde3c8aa0b5734d74891c9a56acb4c0f1f209e912b76c512472885ac0f6f7c8823c5d6a31309580e4152ec1526c89724a209a510a52206ad5e19d58adb5d61b4298ec2bb7b599e6e1b5af0707e96b3eb290ad83c0e1207d1e3c2561d0f7c18482ac63e2ce9e664f67a4ca66e52cd9d3aa370763381861ecc0923f36ad311ca43b38486374d03bdc1bdebe6fe22c26f4885c3f34edfa03c54c6614c2830434e02c580f3e44800217b0e12cf53ab8c30e0edac76210e5b863788ac2a0bf430c1d7670160e06fba8e3f02dabb0d4e2909babda0e72f8fb51c0152dee637abb5a167278e58eb6036c63203fffcdce8fdf3918ee318e74c69d3dd221dda3c7a42fbf4813f9c54c51c0f432e8f4a10dd3267d7c0a987478777ecac9387dd621e94f23119c1cc69dd20bd227778cdfdaf7fbf4e1cd1f66d2737fb30ef3e6463aa65ec414ab3d7e20395bbe57c4ce36bdd7c8601ca69162f226e950eed37b5fe8fde8f436ebd0c6cea42f346dd24b2ee6318e8649530749a3905483a46d98b6f7dc7b71576e867cef4f1f296eefcba17b7feeb361adb5d65aef4b5f0d7fefb72ff4dfbc2f89349149aff9c8d13e49cfe8de7b1e1608edd3fbe36eb38147b65fc3fff4a1bfe9e73fe9ed9b64f89f7edf3bfa1847a3a71ccc88f4fdce6f69604faa7fbf6ebbce42fa48fa6c7022937e6edb0ca7d97b5f890ceff37b9f1fe7aff43872261de6d8a6277da1dca4d3e72f3ce91c6254217d8c2aa3cfdb9bbed2e72883f4dd934c9bfbec7d5dbc60f665c0b44d2ebd936f3dc9bd00dfcf894228fd1bf5630dfb17fb30cbb22ccbf40d4c63e5f8f186dc56d3ab6fd40fad7c5aff0befbdd2ea1b98e621bf6a4a759c30c040c8c8c80cb1230aaebf3daedb75961a98e37ece3af363b991ba5ac5c6becd8d4ddf7ed3a1bcdffdfcec0bef73397276e4729055ec8b33fc3768a67f20d9d99471f70dfa1ca8717f628aefdfc757dfc8e88f70fdd1573f6e4f66c7a8927558f57c3cf17bb87e1562df9f5f98f7c46662153c78c216c030063294a10a18a50f8184a1b23074e48051d271a6cc796362d80d19c6c47dc3eefad817670ef4b54dfb3047ce0eefdbc891b3e7dfc83e0462ff40b2bb0f67ca9dfa46f621f63fcccdc303a5e7217becef7cecee928e3125c4f48d4ef328a2f43a84d0910386a9542a954aa5d213e10246e98528e93c53e4cfcccca85cc030bd0a84113f7b50a59fbb347b343d7578e7cd44a1f090966ccd540d43cfae430879ddcc2866cfcd4cc91676a3ddcc9b52f79df6213ee44227df6bfa444f2bc494fa9a0bbb7e18767d3dc4aedff3ba5962ded4bce48fb7bce5add6bd37376ee32cb1c65f3ec4852c8ff7ecaa69df8b83f5e7eb8783d9bef9a5cff4da17770c1cc3411b4a4db381daf65f1c8c11826c3f7c79a16388bc0d1fa3888e0edaf09ee360f59c1a6c4947cff196b3c43d6f7cded02087b1c7069c3c830e221fae947c08be367b5656c0121d829ef3251da23a4fb141c794e7784afdeed6a0c34b837e9968fb790d9e343d3d3d28d49d5bd313c7c1fa9a2947cd1b17a87054f76709d3fe85977c899e34d366d6bc6a4987579baf79e3029ca99aaf9ed5aeafbdfdf91a32859c85e4ebcfa149348b649c05f5f5e98cb38c7c7daa721691af3f7b66ca5fe10df3ec893fdbfedce12ca1e7ac9ce57efda99a34b326c7c68f71d1c15789f657984bfa95e76b061d461fcf711d1e678923ad3e26f9b4477ddac847af83f62bbd9df334a7160ab135d3dbd74ca592b53ea3fd922d653f1cb437ecfc4ada93488fb7efc6fa79be3620bb2f9c3c1fde174f511831a3a8b52855d7a035255e009f1e34aca2eded48c272ce39c10dcec7aac8f3bf5b1d7bea29f3de9cc39ce3ca9cd3e95311e90e307d4c5f76c8f98512d871c7a6f7b32fb1f83976fc70d45df54b125ff8819eed2e778027a59ebd67efdacbf9852bf6ccae7d8c3ea50eea9de34a19445dbc47203a14d24546cab3d2c2c5cb8b183e63402e871c3bc6a812e28d9f723139e4d831be6304b37714142afbec31e5918fa52e89895bea12ee6b78fcbe1088153b931a8eb9b5ec0b5776a4588c0eb4055cb36d5f0d1cc341f9f7ea8c69f08c8e1ce69f10cfec2aa5941ad14cc5df34a25d69587f3c686f31b5a1f6b67dfee24b12d205667bd9517f9c65fbd9f5f117c341d3be7bd32f4619c5e4a9d8d56fe1c253dd57cfeb36fbb2e3decb711cc7c92f7c0f046dfc36933936febcb5b50f47dd997e4942b2e0acc63599632df84be99c31f08d46ea9f713aa06947f0e00471bfd4c179e7bfa350234476e4bf2cb0cc590ec2445f4cffee67d77eae6d6c1bd33fd05da5f021c5cdaeba867c7fff152464901016b8787911c34483688cb0e5db02dfc191467f4951804940484e648f1d26fdf048c211855213539e99ce7712dc80070a27fcecdf118a26ec6cdf3c657adb377afa8534942aeeef7d7aef772f8dc8b819dabe5ccc7dfc38723018cac169922d0783cdec5f4c8fee9a70db6655499a1964e32fab42d674980374961ae9cdde86726734f0ceb43402570e2673cf8c902c6a7dab43fae6dbccea536ab919f6adc51c203919b68a2aaa20c30b97f6632603db158687ea6168ef1f0f4d0bb1c10072bf72395c6cdf2f717aef47eed6af9b3a11f1470cd31ba53bbe97601f1fff86611c7f1bd6a18d6dbf38e8df420839ccdb376ac50d7c9c8391cfe5a055018bc17a6331b917cbd86b4f63dbf7318eb9b19096607a46dd17c3a890a5dea8b3dc59de06413bf2d8c0c706acd6fe1d795aab8da79591b2b71219fef67efd58a97d19e903e2767feb2fb1a73f5820cc11f70b771d3aa64bb0c7c05d35382710704469a9f668471e1b0c6dec9bdfaf4f23ad5f09b55f097dec4be8a531aac81cfc25a69f8d2d7faf7daaef839bee5872f50c705b0d3a08ee1da90ecad3c78bc847b473632e1ca42d367541e77b0c6789893bf4f0f1276e941065c729c418638c1ef0288b281a42869f6d6f78b7ccc1dc5a69bda18192fa210a9c6f7549d533c05ddfc4c17943ee7b758ccbe5e0dbfe8f4ccbb46c25b7132039749cea38de446cc9be46fd9b7d37bc5de9cdec0e3cfc2077d53d38e834dd3623dea6dc9c76618e9327327dfa3d3a38a8fd7d5ba2e91960ec01295e22fbe7ec7892e3ca6c0638a28498b5d8cecdf9394cdb1f6db2f4dae9454e586403b2daa63f3d4615c1a3238431e06cfa580cee6f3d7b7bcd89ed35218cc1669b5e2b95de745f0e8108570ed18e47d891270767e36f93273db2b7bbd79b8c2d1144d1df179ade861a6a2841399dbefbd2084a84e451a817f94212540947a3542a8994444ea7d3498484a3717a11fd43ca469d45bb21fa0c2424a41111912b77e9b13fe9914bdf3d7596922ef9816ed3dff0b6e935ed4d3ee3a0fd1147c3f427fd83dca527713994b449bb4a009b8c2df6c40539f49a006cd88e45650fdbd916db2f592672487db6b51f5216a653c4961b5268bfdcf64b1c0dfad874d19fd812b77d1237833ef6a4ff416e920e495f7a1a85b3841a15b2bd7dda833337430e8188d6bebffdf6980c8d355312284e96656dfbdb0990dcd5d0de145b44debe2b115b464e1fea47be1bde1ef9d317a2f48816f9e4e6381aa6d7843086996d7aedb16fa1f65e33c374d2be1f560edad7c21256c104d05e85cb01a76c32b6c898d2e390fba45de5604987a68f31751c27c354b2df0913b4a686af6c1cb45fd2274ce4d06b6656261b67a961fad2dbe74abf71324ca5026c32b6e450c3691cb48f436e579d309183ace28495439fd9d6bee3d8d0fbecedfb8db3d4f05ebefd8d9b21c3931a4fbf32ceda61fa3aa85d7d6fd818f7210d1b3b6decb9989240778b2ddb635815199bc1defb777b3149f90baf8e6dbf7be133ce32dfd2501d31c5fe1128d8f6391d66aac4b64f67a28ad558eff01b076ba67d477daf4f9d05a852a012ec6509a66780bac5ce5b5a6befd5d849fe178436dd530613b21deb59b18382e56cff2da630d654c188dfc25311c64fdab35d0a61ac99922f4ff1bf423bbcd965502a07dae1a53d436c1aa99d86891c831006209aed4f83ec380bfddf2bba9a1a7450d2d57619cc0728023ef4a001650c738f0ec26c1fdeed9b01229f8887111d01b2a74a9e27641e2ab25dad648d83155bc9b771b0aee8bbfd72ec28778d0d0773e3c6146bb1b115210af61bf69483c16a1445bbf280e0571e59e355f24c91c3c843810bd8d0000effb85df7e060ed41c6e0c159ae0ef5ffe50f624afd22ecfa554ab1eb141b2579783a19cc489781995f23ea256c11aed8ef29f566f33b29826ac71851a83be79c73d6772901d4c44bc8c63611772c9209c23553eacb48959c71b04a14c494faae2632905d39691355ea63db0413398cae96cdae2f5d7f6fceb255ffde9c654dc5a40ff562d5559790fd65fd47a92d76fd1d7f00c58f1da2b0adc1207f5b6ee9241ee4d4d7c1c13ac5aeb57a615708c494fa51a5d29f2f71ead719ec2bf6b2a6beb4a9400441f495c4a8cf1303ab52474ca97fc4ae9f055ac8f6e773313585664aa5f4865d754883a6c3934968a65c2553eaa350395f3a9a8fa2922e7304910431d57df546421b76e82afbcd08da9fdc67ed3b372786611886330e6662179b1856391ca06dc3363b1661479e18b4b613aa9d37f6dc6fdc6fdd6fdc63d8db16f79b7d8c7b6c065446e9cba669a8df9a76e272a0f43b4db7d3090c7228b78f7c02835c0387dc35700d2524a8919193c9c4c9002f0d9eec71e2639be17dd8c61f7d4b8ee32ab7d5adbe98bb7e97866dfb7e050a2534d91bfd7829a534973898adee1707e787eed3c3fd165bba9f8fbb4f6e9fe2ab03b6e7385dd295705f7fc4c9d8bed3dc731ca79da586ed71968d9b2125e700ee77c7c9b08f6ddbe34cff7469d8f4c37cc3a68f1fdbd0bdd73d8759bbbdf75dc7d1e07ee37edbde7258b7759cb7e1dfb6ef52eef33da3db980c6f632f9cfa0e3fe0dd3777f79df4c871d799f13b7743ee1320397c79917f7e0cfbf35f62cbe8e72720b690fe8697df1bd9c730ec4933ec08abf1616e06f7d86b9c0cabb7c7f49633b3231676e47162b53100b6e82c255b54911f77c86d2963ee6b63656eb9e9e30d6bd9b6d5ce6fe69da7c30f6cabef47b14a67170ab1af835b9cb4ebb6e7367db5977d5f3b7cb1b1b2f5053229038e2821cd31652628d888e4064f5f5bedef8df306d1e44b3ebca9191440f22e327731676c72486522957116192f8db3d48fa1359ad2ccc854b1aafef8575e77285b386a0b0757ac384853636ce11a103796dbcdb2ccdd3f26ce2f7c096ceaf53ea629902ceedb2ff49f7d378c2fa55403c2a24ec480b5b17fcc7de4d9dbe29d72cef91c07332f307578a5d62f7087d1db5022231f1f453a7dbf47fe85b7c856b4d091a76ee1a08cc867227f45defe749919b3fb917ee562ea8e5185686413f9110e66e4f11cd9fe919331b2517ffa303f3d96db0b27d934dbf425a522df7ccc8978ef32b10587e53f3c87a6a8cc4ca9df85b713f9b8f738ee473893831cf72f7ce4a33894e560a553d39bf9a1cb84f466d777199ff1cafdfcb8a732336532c39374f85903c5941c81f2048a291368d7377131bfb18ffec8877d7e91c7270e46c484fd29b660778b2cf467e9e7933898e98dde1f670ec64d5a867b69e4710ea0efae4b4625de7132e88f7489eb195a0291f40db93d19a4678fa7d48f07c963248fef36439540d87b581e8dbcc7f22863de1442f24d1f4fc1b4d39c00c92195a133a31a1e95892da4af4f87882da5af8f4ba3f73ed22777a6f44b5fdca419b7f19583d5d34ee3e0e4f1386590b3643abcf76a5408663f332a7375081639384429a594fa8ccb48a12532a7b50fa59046451ed991e7c78e1dbaa8590b8cb2b1c9c61b7e8a43fc949b65d497da1cbbaab5b20282ffd965a6c81270f1428777f143b557b4e0284d9990bc024a3e047dc6e496bc0c8996b9becaf5734c1e0016e0b83d82d8838951c583392942a60e6a0e53e9710ac126997cb718b30cfba8695f65fd248da65ded629867d288ecde2cc6cf7ed78a6559ad59fdb20ffbfbd558312570a90c597e75aae3a3802bea108c65d8bd711cc6d6e2b971bb7eadf13d3a1292457c0c8b31c61ae37dfbf273d5acf7daea5acc36beae70507e116ac562c4ac7d49ebe6e455a2269445b2887b6cabc6400e522b335f16f1c8457bfe943259adeeee980ac9227bfaf7b3ba66126d1c670efa821cce705acbcda08f3f863ec69f634b2c0d205954ed4e98a2b5bf1da198c266c6eb333338f658e52c410ed2af30b58aa8e252a68666c6c12672385f56115ba2946165ff97f3060c987edd951e11a27e7b9478c6c81c9b525abf1c9b5a6d00c9624ace3d0b1a4593dd1d9426a0bcee2a24a40b07236b1c33c9a4e45e525cf4c82ef6bc9bdcc13364dbf3f03efee02187204f4a29a5d9d38cd2eca5fcecfbb1b3bf38f4b3bfd9ceb21ff466138de12934860ef4458c2a4bbaefb8b7cf615f8863e32e7beebb0e6636b6ade9acdee855d28a84673fa2e83c824ca97ba4d672a9cee2ee8be129aebd9c9266628c3f266eac4bb6af81bf6e4fb76d237e1bdbbeda7ee18c42e810709ea939e78cb100612cc28e3c60d65a1b630174a881ad590cc3300cc3b0ccffc5a41ad8612644adb55a6badb5d6d28f31250462ce39fd634cc9b656c4080c1d73ce39e79ceeeed80b51b50eff4a29a5f4674440f633887880ece7176301c21c3bcc5ed3fe85eb180b90bdfc7ab796fd7f4160af4308151e4ca107145b3802132e1855881c3c96000231c060053e8640028c39e7d43a300d44d325999e016e94596badb5d627c2058cfa3a82b85fc4080c1d4260d65a6bad7d225cc0b0af2308ad054bd4400528e001116e60047185882e161974f8044951062030f24c91f7de7befbd56eb889e4275640cc3300cc39e081730302d848e1c30aad641e79c73cef944b88031b58e1c5308eb2620d806db504a63a434527979eebd37cb62501cf415bbbed4218e19a34679ac662fcfad148a8a6195ee50282a8f83b2deec4601049d431ca456526c5e01c3e615b039640ec1ead7cf29d5a466855aab4dae3b5e76bcec7849e265f592c4cb8e971d3a684d9595ae1c8c185d559a825aa90dada129a895aee8aa7e5e5b80516406308e31b2602c3d46efa46b1a55a2f42143085699c990e36314b95130e99de472985b7e6cb1a39e4dc01125cc928789a03d3db9637e4f8f6ecac92aab4f7975c0ba423a393b42b1230f0d866cac016539c4417fc9c55c1fd9ceb87648c32cf5c913a1dd549eba403385da99979dd9fe1768a6e490574dc9219ee2ef1bd5f2a5852c35d5f10a7d01fb16e947a9a98e1bd4e00635c03ff14f1c51702bcb9f76c3d913f9e7cf00f7f4cd5a6ced83dae77e1fc5ced77489fce8a0fdca39603e2ed19e93311f830efe20b7a657f030f53c8941c6a812dbcbede5f612b77274d0c6383a8141aeff440e7f63255d49a76780fbf13f76314c3f48238e77f4d83f0a185be4bb2e497180fcad04bffc4d97603d03dcf8b1067f901beb153c7caea9fb3e8941ae4f7fea1dba436ddcb3bfef4f3549affdfb51699f7ef2ed17ce1a079241a78dacf2318c6231554e77bf9b574a2b9dd279e0e822d78f39eabb5d14e0f8ece747213656b3cfbefaf8d6ec4aebbd5fdc58bd39a60d76efc5deda38dfc459b62c1d65533d2b0f7eeca035bbbe54ede5eb5f30afa05cfc0edd7457120d7228653cae8c7c0886df7d88ca52a6b512858ce830f69874187750b9a4c3950bde3bb590833551f0c0c4440315011595a05028140a85222121791212940847830485327992372141a11e85426dd4dc316fa60a5a39acb90212122d67d8f9d9d9d9f911399d4ea7d3e98442a11e853a9d381aa8d389e4514f823a9dfe743a119d888abc603369e60c1850288ddd04b9b9b909326232994c2693e9743afde9643271344e2613ea4f8f3a6993c9e463f2711d41e8059484d3494bdf229f6f8cc9603b30194c06db411a8d46a3d168643299de641a95381aa6d1e8f4a63fc93dd2a3d1286794a303240a9e204e984c1aa8080808a8a89473ce39e7d16834ca248ec62867d38fde34caf973ce7267a7f11a2f82e5372b1fc168a44b9f6fd2cecfcecece4fc7711cc7715ccef973e6461c8dcc71a3cf3fca1cf71cc7bd36f71a32852d7fa668a80a39eb9b2037373741bc6ddbb66ddb388edb324783dbb6fcdc674e6fdbc6e37d726f3c3d3d007209f1418c2abebbcf37ae32754795a93bb42ccbb22ccbb66ddbb22ce37e7b6ed3599665f206472a1144e7876cc1b669a0222020a0227cefbdf7de2ccbb2db7134b27be5bd454552260c2b59235563c8322d7d6b3b3f3b3b3b3f18a594524aefbd7f2fe5381a9752492975c59f28c5d090a025dc9b20d2e50a7954cef366cf207b3eb6b5d65a6ba5943ea575e368d05a6b6d515bb828c0963f85ec081d6025aac8016c2f14fb32b12f937d6d170977e5de9d294488a7aebb747729c8edcfd1a8faba47208b853d1fc320fbbf84a0c8ec49b4a745c29e1f71904370afd850a0102133a546cd5e177907d5f342eccbe572250b99b22f97b88008cabf42668a01f10ab95310c1b5596cb2c5090eb27d613a1462539de5ec78926302522ae10b2c1e3e7cf8f0e1c3870f1f3e7cf860b158ac1e3d7af4e8d1a3478f1e3d7af460b1582c164b2583d5f6a6fbfcdfa2ca8cf357e644c595a9a7c7168fd2cb21a5f700479450026dfad8e7f5278ab67c29ed10594a7da58ca462d3afd145fe4816f4634b11b924876bb7bfe468485d22e3beff762d276a821be547ba7c9105fd93a8427f36adfaa38a0bf2fc2a2329053f47f7af727b34a118f6986395d65a5f5669a910b2b5e73efeca0ab0071f3c35808fb3e563779cabeca9d99a35bacce9922c6add1c50de80561363b462f6661adeb8cecb2312ddd97463d349640445324389090d35d8f09ff61bee748a714033e5866db65cd2c5dbb939bb76cd7263d1a8b41a1d9185b77343f49b08767d6fc7baaccbfe786a05b8fd00be0d67bb7150263bebfe70511d0f00ef7937bc875d2e97cb43790f13117927efe1562ba8e5e9f7b08f8ff7bd8757decaf3fe3daca3e3d9f09e46444444e4d5f01eb6f168784f73b95c2ecfe43d6d68c82b794f6bb55a2d6f86f7341f1f8fe43d6de5799e877a4fd3d1f146decb888888883c91f7341b1beff45ee672b95c9ee9bd6c68c82bbd97b55aad96477a2ff3912caa8f377a2f5bad3ccff3bc4cc7bb2e97cb35e43d06a2cb1dcaefbd069c257bef6dc416dc6ab5bce7c153b73553aa8ff732a2cbf5f156de475f792befae3ceebdf99e8e47e41179449ef7dad5f13c4be479d7c6f3bebb8183f10030146e32ae1b5e903d141791cbe522daf5bf934ee3960f6ee1166ef9ecfaff718f575807aff00aafb0ceae6f830d5b0d44d886888808dbecfa35d0804d349736e4692e4d73759a4b1bdaf569d066d05a9a8fd76ab57c767d13920ca5ad341d4f5b69daaad3563abb7ec9c815c988341b2f23d2322222cd66d79fe1644d992b1bf2329796b95c43bb3e49092365adccc7cb5a592b6b653ebb3e6af4825c7768a3c856994eb6ca56d92ad3f9bc9728cff374d8d5d4b8865c2ed7d0de187ff8b3118c71cba7d56af9ecfaf89bcf89ccbbba3a77755777757576fd39ff9e660036edb37bb6662a4feb922ceae73cbf8db5e16caaedcb33b5d158d78e6a639bb0eb63550e2fd125ba459e12c06f330e664f713c656ff890fe00c0875427001fd220bb7b7ae32ce0774f95882e7608e543da82dd3ddd115b4ebeb32c1655b1680d8bae8a9ce5c3105d6c4fcf1888628bfef19455a982860cb99ce59322ba581c9c25f8c4161b5a9ec25eaf9d57cf4b888eb398c820bad8193b43839cd852c3773f6d3c85f5f4cc1d3d383d3f76f7b3c65968f8eee711d1050b0a9a24d8dd4f9ad85222e4298cc522624d19d61067415921ba603c3c5878c59619a2f014a6f2f909da1dc90fa20b86831384ddbdf3c49691efeaeb95f36a99be7b5f22ba6033ee82ddbddfc41691efde673c557b9cc6a63b9121bad4a0a02a8a624b09c85395c57ab184581d8909d1a5f2f03861772f5db165f4ddcb209eaa2ac9a38aa27bd99235882e1547b2a83836d85dfeeee5ca53f4f59237af9cdd6927d8ddcb1244973a83c353b467a6d4ef290adac2ee1e03d18506c91a0d388bf7dddb882df3958158ddf3e029ca9a29f57988b0bb97115d288f6451ffa553ede02cf8bbd721b6d8efc200ecce73f7dc37f70dd185e2a0c4169a9aafee6574a1339245fdaefb110ea6dbd9a075d9a10068eb0280b6ae1bb475a1e8a15dffa489ecbd65f558d65b9665f5ecfa25dd7d566571aceaadcaaa2cceae4fb2813379d99997c9eb557f54c346434f508f494f4fd0ae9f4b300a63f1b09e67d7f766d04830158683a950980a536138bb7e3792995eaf17f7c266767d4ee49e7a82ba1e530fd713b4eb6f254baa2c9e4e87dbcdae2c166b846d555571509caeaa4e5715ceaeafe5aad1579dd9347dd1177dd5995d3f6b22d31dda28684f504f4f4fd0aeef65b27633bb76332c1e168bc5b3eb4ffbcdc777cec91151150e55511555e1ecfaf6a37f652cd5213744009c8c948d2f1724804dfbb0ed1ff7da52f26ccd1437c4537ca40b0785c882ae7cb52acadcd06c7152882a75faecfa9a038a2a38399c3f32f7e6acfa38a08f0b72b0be3ca57e279339a0f9338166508c6f6e08d1b5b14496c8125d1b92ebd9782b4f09801b12f4fae48a4f06cd7b89664a952eb8485ea2d7257ae122faf9df8f1b324334539baa48ba6c434416f5eb0d0a95e78d2d5b08a24afd10972107dfae3799a8521fe364faa1b79363f676bc1d1b85b3841c908f15e22c1c1017e4a994afcf0de184b8a1016c3382d8fb6723883d07345338660c9505ec43eeb56be62bb84daa6c9bd4210ee0eb663ca53efe3a199999e2803ca5fe26237362831cf24879fbf63b958acb19556a375ffa38585f009f74794a65ed7045ca87f294faf77b076bad2b421c50fde78038a09327b6194fcd95ccb69ad3ea1417c401619ae38076fdcd59a82704c53700041c51f00dc94aa6c838e7ca7ceca37b5b1520ad6a845de7265f31b511a1ec1a57442c7f24900c5ad975743f9c425328b6482ae343285a4357b3c83f938312e6becf0e5d5527109db199430e4e224fa9ae71b65167c122f69bab3ee26c033fb7dc3d3121a94beed3f739a4aa3175633d85426ed7bf01a497a8342df675450dd5cc0c00000000c314000030140a078442b14830a48abaea0314800c8aa0486e4e9a4ac32085718c314429648c218010300002203020330500aa4cc2d4c4ff20fa4f14b45f1ca5da28d899662d62548a76288f915e7e4ad1b4380d4542927107379583247665cd283c11dc10f1a3b572b4e2d9a05c1c2d3c9a98806dc228ca3a8206b1ca4266664c32515c69216f7a560a258994680653c669b8688ed3d3ee703727103cfac4a18ef61050f3b930134f26c9e77f403ecb59432c642533372691a84efa9019bd954669725a1421a40b29054bdc89af2f8aa7713a167678d349a86745c1ab6d66872eeaa81c5abedda3597beeffff853300e15457f531c3d93203d16fa49e17b3503654478904e894763e5d6feb8e36709a6bf813ea5e8a509e120757bbb39a34811b05e78ba2b6176b146b59e4cdc64a53da911e72ae6f2bb37fbec3895ca0b92bf4a550e41349eee614089562f4b7666c1c3b3066546b4040e55dc0bc7a0b984c85ad41d6b2609c8a9562d5260de46e7e4bd0882085dac209f18235cac1143ceae980e57bb751cc21966ddc3623d4324d5c99e55e0e886c86fa35c40aab5c53b1099dd2d08aaccf9042efd86f2e8a1151b07121afc521844a43d3ddec75b100351080b5395acbc59934a13f82831b9108a3e5f2a7485e7390877d067fdad348e9a725daaee9d6e3a129b230fd8de8b9d939a92747ddd354ec2b92ed8e4d3c0aef2ffb86f8814fd2b4d4b56da87fcf9577211e9cb63b24a489a361ec79a320bbc01b669115a649ac445519ea42d633135646276f08d11440022783eec2c94927d6bd92d346b3a6e1ee92491bcc43b9e0cdc067e487b78b39c7ce04c0cf563cbba0f97f2fc9c536c83a167113639289eea409b9d34f699426a745e0ab390161c291b982f37f48cc54e3e52262439528dd99ccb616176c6f69712374490c6e6a11becd0e2826c4ef546c31184ca361a76cb17a4a90ca0fbfe37495088947334ad506e78112abbd0596ac0c46f8032abc16b343e68b216647b255baf689ae40ae5cae504b34952db3478e850afbc9aa4eba043bd883591254b28f7e25dfdfa5ed8d1236ab2d56825c4958f2808a397119e93e02426699976627cc3042fb23cce808352407f2c626d8cbdd510875d3c93cd3a52b6a3a7ce8c59c8801656d2d883a3c7d292c924ac416a85d31dc3f5dba8fb2b9e995c46b5a295145c099fbd7066e32d7122aa92703320c2e7562b0c69022041c25fa5af03e23e9c844468ab116c84e9d71d9afda4ca5018732b4f6b1e0703fac06b48f2c12beaa185c8758d58530f8ae3cebc40f7011c0a98b974690f3d1eef4694fce4c054427607bca075e2d5aefb801b014baa11ae4d82a0f372560863e08bbbc019fd7e1226cf557999886424a64c75686aca49c26f50b100c951f904ed1ebebfd0995c4610605c70378c919b4dfe092e361bee1b01da25bd5a1429341ff0f2b593c4bf25451a1ff375b1204e747709ef60abadfa1c20d7414c31bb1890f0a598d784630362dd1009b40867c83b1053b05517aa4f450d603ec2b3ad709669b31f5089728ac25bd1e490d29537c15f6f2e3fdbd65ff62343742af20fd483d857a44f416ec15a9a750cf88de89bd46e8fe8edde7e87e91de7f9ce816d28fa05fb037528f423d11bd0af644ea59a827a2c7c45e21749f63f747745f9af749907d0ad2be53c47ecbf3f2c66838951df3e6ad4ae93138e5e7ad6a3fb36444be3c358f6a27b00105418e14a88099889d2731e7029c8740b6aabe1dd107ef96465ba6f503558781f29cd109fd8674db0bf408379dff48f66716c2469ee376d02e6522cca2551c2baaae1501a9a6a6324a4d5c19cf5598ed1841f179844da0f61b796ccc75782c6549d2beeff6330d92c30939ad09cbd947cc888c1062ca16cb71143f6efbd24d9fdf4354ae8111bdf1f40b0bfa1bff27db8f2efdf5e01d69ac882c3b783d5858231536cfedffc1b87f85364a4c89e53e8f7fa160b47cf95d7872de1b5ca516454008847c2e69436558780e72259a1aac29d90147dd2352ddfbac69c042ced41a345a840b1ddf5d221c46e29c9e8268165e9636df6f0270b9faac968b7f58998fd3dcff777f684368521aa1c6ed3d59305ab6829426e5aa65cc9c900c79126cfd6416fa0168c44868fcf5e5167ba030daa369b0955e274b894740c1dbc22aeee6ae94dc33b716b6fcfa7ce53b1d66584a26daa07edb6af7ddb0ed902c9cfa9857f02ed86c1c40756ced888ae5332d69fe499292486de148e0acc42072f1d01e8f84b622d708340119cdfed39a18783b47588b00aaded99e7a7acfaab0808217efb93ffa2d7fa085c735b64b8c2829b427d0b500b4eccd4bafdb560f0b300d10bbb7d1fedff5de6f0993e5adc167601f8ed4def4c96ad1d37e310677c32ef5c6c31ad3f16862bc35bd25d7d07f723e6275adf528e00be11fd1b2a6a15f3d9529dd1a81e15ee5dd3404e10d8015be41b08798c2f629fc35a1888a4a7ae111b0dfbb6e19d45766f5c8b46e32ab43a6f59accc151b75cda96d7bc93aa1e32ac974cf59551bd64aaa78cea2703ae6725237f8305042339ff9a78917074193c2763e160364dfd04a031c72602b7d332de3c17d58c93891c55de3ed0b3ac1723c00b5b7aae892073bfcea2738a11c1840381b32902aae29ea3dadebe52c743ff627c1456d8973c53fc70cd3ed2e9f5da7f5e4a89b5d9c2736b85cbb3d14f9ce9d4cd65165d835ab6a28524f79b8b91475f2833850d2c9298c2ca60146c313d13fc33bca9543500bf588e1b5825d3a798bb288b30556909d872658cb39677e9cad956de7e53a92d951d41f73d19610a63dc83dee8076bf03f2f95194c619c9fbc5cec304538ddfdcb3d281c17b0ffa12899c314c6f881c368bd66472b948029d39a6ced014ea5c415ff45a610608ae9f89712f9c114e6fd9335ef6fe9e1ef8745075363cd9b6c4d4517ee0753a9e42fbfd97fa637bf0a3f5d616a14fdc70679c21426fa99fae5bf69f2efe44e13a646b27f16d8b3ef5b8802d263390703c90b11aab9e885a9d1fc9fcac8095398f00fd4467f48c1bf3921cd616a80d158053422624713a65ee99fa8b3fe91de7f7546bac3d428facf6d7283294cf4b3ebf77fa789df999b8e3035929ff31149c014769b0de86bbe28eccaa050d874c25198fa5b6e4318890c6e9db17ba4841589fe1b47d553e74931834b25981a1dd00de8eb926ddaec3d6a5f7acd0ac08129030db83083a9c84a0017a507a6d21c2e75e750442c495e4f3c61d49b77e210a6d2b37335b3a52d89dffa1efd74533acb5ea35f8286d874b09198f77330c5b5e64173a683523e4d75564a32a406c6950c064b8d5924d89a9a439a593e06dd143a7522afd20c17dc208b9b2450a5119452a4e8a682879dcad6a1f07451995567797d3da226705588a906c32ef0871e03f5341f8637f28b630868e586148dcca9e28a61e2d7bc5652889250038320bf87e71b1c1a1923d9e3c45757e4dea27b0bed596b55c68c84c96748656ae92f65310509c30c57e9ab5897110b028b948834abd4cc2098280354d3be5dd9fdbcf665e032728bb5db23fde1b5da1591331f6f91234dc49947e73b1a2a9c5935c2ca62b53220038a05b75c483ce2698a0be5cb01b786584956c11c302ebd82b49d21d1720a8b8cab8657b48afcafd770b5845f095561230e67ea413087bd428cfe7b84ffdfa31ffd267eab1266754076623d5262202e87690061b06a31a40f1e174a2c3b26bf4a782f9b1a022e9fce400dfe2f7d284cdbc0ea9aee367e33c34f9566703b618136bfe2d379cf41eacd718cd3be2c7eb0016ff65d73e4f1c193ba24e80505666af26e2d404b0df61357016ff5367f0200a4c0ee9670e4606e850255089180f2a4a8c7d6ea93a734862892b21fde5da46d8a4db181ffc6b8f15461e285c51582ece490585fc8301479fb8b9181ee30eb5f9af5fce72f2bb0ca32faa374cf2b33f83f8aa140b186ae9b4fb543c7055b8a3ed249f3291d0fbb778685ad612a35eb457c19a6eacac1b685ca2ec9fc456fc71c28a2f74d057ea102184a92dc208d0a9e05feee401e87895bef3925022d9f4b3dcd5fcd8cf10e834886a7c1fe4819953a3453ae0c2800f8841ea1350661a07e13a56fda621045f2e29cce217824e5c111af0ba820039477f4c1ada78cbf7835ed8e6d9f27356cacd9022a9df9091abae0d386ab932ef89802359cdf474e64a6c1fb1e26ab350df7a83e9ae8d6f1b54e93667a630a2bc8f1682205ef3e791845569e4f664ed80cbcd4d65dd2720a6e20e76cb991b83e03a475b97c9e507697f7fbab09b8fbe2da8aff50b87231a7902a5388db273a92666ca7a675be58fb117cc29bf40e8329eac093c66afca4528a4648d9a0b070e7683b15564dda322b999c9610e9c80856fe6d27904c4a9d611d51c101fdc7c3654577c9e799311ac57a1d72fbc8000fa08ac679524b52d0f827497a0c4f4d3a3291ac9c9616e9c8211ac07f6b1a58b19889a39b84eab2754a85d2892ade0641449d47e858e06b48f65903f4bc07c47db89d49856f861849adae7992dab84b432b35196a638d1b8d589bbb1aa456a2f9512a4d37a87c4a4cad5220850b37ba22665ace7a49adcdd5eaa683056f1c4b62d18e88aa830ad2f4190911f2f08fef3e4d6b48a5f28f0d638df561e65cadb8b30f761ec15164ac0a9e0826b2f833d7dcab0558aa2f049c8a42cc1293fa4c747131ebe1c68d8498454f858ec861629e0902ef1cae4f2595db1bbb33d86ba0979849ab7692e07ad19dd207630b2cd506ab3ccbdbb7320eaa413db7ce35c2d7e8958c481eee1f135af8fe3011844944b8c3b044dfe49ec9ef4a5339f8ce6630e8d5247b5b9614cbbc6870199bb437d4122bf1da8e2903dec54b66fd8ea0707072ba88fce5c0af13d88bd038272443aebefeec0ad74a5702fe97b93be88d1921d34d8b40b3018809e49642010c60c66ef7c74eb733b3dab55b07717553148a826abf5cc30fba514c77090d1121c327d16a870c9c42d6ed6413a2e6a9573a82900cc744a75383fbfce1cf391be069357486ac8832c831bd87a2efcff00f826b153adcef14e9ae73da2a9363c91df62126919c56bcbc99dbcd4cb4fa15d3ef6a5987a6079de0a1d25bdfb40f088cab69ed20a32788c4c9fca40392d8325f7192c13636b9e404977ecf2a14443e464b5a0b24d2f20c3fc05e247b42a386de192b323d9572355050436e7942fae7dace428f1f4938e0bfdef990e6cc4757b10a97a7abd3a48818443e2ac088dc4c401463ddc50fcb4e8a4ccd7735ada8f721087c5aa0942f35370706030b2105f449a00a58849c4bf02a6c09d0a247d5093c5bc5cedccbebb3ec3cdbcaa61b94676a9d3cd0d14a8184d7a6894f96096db8ccd8a865f5892bdaa4be856c2364766c0814469e6e3287597033f445464cdab4a2b054f0f87e760e6fe252c616e7ad3feccd87637faf2fcd866f8fe60af6e19b8c1cc4c31d14b6df84460b6e3b4c6d9925273226d25e80814ccd5afef02d9e621ef1404e8577447056ff1eb2fbd346676d7cad49ddaa36609117bee2cd9995cf51f6d4a8417d353f2b80976696096f3fbb9dee2aedd220618fd56b6fa8c796db16cfae62065dbe6759971d109ac1c02eb940fadf1535f993e0ef74cd76a555f0d659632f2909c24112099c33472c2303e861034444fdf5513b0d6c17bd3da8b8b14de3631139381c063acaf15a4d12472d1a402b1a6346d4dce38c35f3b6ea9af320df5f08488748406fa39280cc1b71ae65a4adb5c13d9704ffd644c7a7b03822c45b1723907ad1ad99e7db161ba9677acb43e7466df21e6874d049692308ca724c38ac21670c4dc1570ba4dc6559b42c5ddf2b1dbc60b76532e027e86656346693fd2d7c822934c097a0c46e9ac13dfe1cdf7e2e4484fd2961f5cbf2f118a959059d082ea1967d001d5aff2b152206cf74a2f940bae4fa3645998dac3851e33df4fe8c18c1d8383990cf542fdfa659e0123cab4a61ec3621b665eb84ec75110686dd4c1088c8afc1ea891c9f6bea5f5b7a47d9139986963dbeaeb38a42926197ada1d63904ac8f7e68cb38f49cfbe0351e92852efbb294caa0c2314bd8dd264fa98ccdff227617bbc4f4d89843830ca76a46a0b6f093fc089c1cb50a4e0c92278e6c1d69d05b4647b5cf344f6388ed50f633b39875baa311a9080ab7f745bb806485fd70cd886894a11ecce0344c6269d2d82bc6dd018cd03a39a7fbb98a570a2f759598701c18fa88047b9b577f9fbd6fda5231b712b16fffae7e36333982d2dac344889e6b17c14626b00a6c306e88842f1ae76ff4b95b52b7383b2fce14509a260143d5986743bf4aeac9601286fb1af080525b22c863cebaf0bf20956bbd8759e29415e0599988ef16f86973ca1083f92ed97ce4f8dba087197d510de193bdd16b2a10286f7b2ba3062dbab2bcd000aabb5609ff3cab9693297eb868310c75c72fc08626ade83dddbbdd8f27dc6a6baa2a4e031ea8b93cbd4b55297c0f94d6a4f415b2ff55c0d63d2a1468ca620eb1618d66cdad68d1b1605b521619d51cfd13f8c3fc53200d026c4c071259f8ebe16779e2e44c35f5b296ab4ce04573eb8b3f23e61fe9ca9b5ab82b77a9bd5b3edf0f5b698fdebd0fcc610f700cc96dcb98958a8a269fd0bf61aa97f0db81000d53acced671170c908b7145de6ebb4f24393c1436267a68f6dd2638d7ee395cfca2c71cb16eeee81516a72e9bdc2d288948ae7cc40c3d6aa169b216cdb8d745cc2860ff26c1435ace0e41ea4dffbd26d75cb14e9f02412d2c8e8669c40abf537a65699a9501112b08d4cd425448d168db7c8a01a461c7b7194c534fe143bb494de30366ef5f6c900e8fb0129a9ba0fba1d6a72ac704c22affcaaee9090fc4568ca94bf0a3b2ebbf73fbd8dbe188a075133679d5ba3ad1644020bb56b23f50a318d3ccc95930b20d2f55b90dc94b160b5ed6a04baf34abe0311d629d8a0f29a2a170b11029b995db375c6057d155a7bc820f4e4bf8e1f61ba5c3e24974e4ab8d4a6af481414161e2eb0451569306f1758630ec865b567ba1c5f274f73a880385cf688877e1f1641de656d64c4c9f4e041d51cac0669a1c06ff91ad0aafb07dad0df00380ff9a5dc36d3118bf54fe59d030860a14ba788b1d18ac885467e01e553ebca95700b30f689108477b69658c35acb5ffdef37c0862c79455a09ff4bd4fb33e0a3bfccee495247986ad4037a7374030e2ffe41aa28839fd82a0de951070aaffb3418892ef0f792be3c0e9c21f8234106d1f7454ece9d80cd53fd08c72cab15f5ab6ba85cb179b0ae40351b78c7eee6b29a89c0657397d56d4e651d53ca361c2d56cb4562beaf822e0101afaa660d566b532829b4b5e3df99b3b50352bcd3fc10b234eadd304cd99d15214cbc636665091bfc67644cde5aac2e0951764763e8736b8e0339983e95b96f08a5e0421c6b3ea61ebb6756c66a73b827e5d01202d0fe32de93d3788c6efacfd5c84f272fbbc480f05e1c6ee3c081fc72e34cf97449982889463c4b94eaa4e9ca5b4b9f62960f6479b7d4fb4cfdb8fd0969d549878e2d0cc2b2dbcdbba5896bd4ad1ecc6dadd20775ae2d1e5477888fc5c834d145414775801b8e66c8153f61db6c493a485b8f1d76fe659f0989951cd85c654e5ee8517aa517fc51681425303b32b4cff68b7942bf1fb796c7b70ee42048cf9b2660d356ef6cd6efbdcf5217c83bc39c761122b3a157050ec5a1d74b05592e75c5fdde6e70f2594ee8b18640b762b58f720b4fbdd490bebb03fd6ba72a148d19491420a67c398000f83b4af0f182b1ea8d0428791304e57311fc0232256f1ab657d96ca2975e11add283f03e131113d8bf18a2844e5fe52715bb3db8725c53cfc7ca8258bf76fa103ff3248db168e30568fd092c775f5ca0cf5ebf6687be7e8aaef5d7c0a574f4e891dc453c5f5fb68c2ff9d1d8718b3007f2a2601a7686180c4093a383a6711b48b08e2e1c0b4f1077fc24bd5ce86e75e6a8a228f12c58e0f9eaa82cc7635efe665d34df8b5ee6ccf0302430c5a7a8482061694dd61179bf1b928ce8dabbf9c0527a8fdceab465fca939254b3b6f440626e1f137e857f158798b7fa4afa4d5b8a2e2a1411e211b4a053feb041908b80ac8129832ce85b1aa24213363eacb36c56d36aa08ccb20ae847a5c06e8d262aee349d970df85751a97744faa1e6883a7bb6f791234ce67f467ffe2bcc30aa21ff3120fbc3541135a3fddccdf058aecdc87aeea6d05f91882aad000d6c5d9d97a2c4bf2932c0657b5a4ee6c59282169c43615a7e15795c47e64526ecb26b36be03f403ac946cd6ed65d6ca6c69452ff44ae44a9ea8c4111bdd89eda315d030d0d5a7d2c07f80bca62503f423cb80b0b963390c3526e2db3adb01056506beded03ca8d585d58e4505f2adce2610e544ee3d9198d6a7227fcf16c15c7c1b488b3c7e54b8256c345c3daa8a4d9fe56314e675bc4c1305a670c1174128d908b0f6fc6d6e2c87775dd9fc14a56d66424a63619d6411be2378d91bb3a9043cdf63431adc7e60296958f97793eed1615852d30efe61110c8d9cd5c27e8ebb0b79c5b5aa9d59b255a89824d18259f5665e4af783b3d84e5d3321f63db20a6a4acd19bfe8afe0b387bf27692c8269cafeaf2eb635312ba7c0dafae0bfad48464887b8818a1d597cdf8be92ab324aa80303f628814d4610560cd8df3aea5ec357e8c227bccb072831ef7b4bb75c3d187291ac840550f37248812c73d5e0cfc260fbe8fa8d8c62e4029b9abb5c2fd92acc59c8373222d0aa97c7238173f13271c71ed699bd41d3509b9ddea23a7d8da703c78c60ce2160ddbdecb0329f21e4aa7c4f1083e242555558d2aa7fca7c2ef6b23055ef6d6458e3cba7542ce917cd45654c38e926a7ccbd0246a93c4865074e3125f90b277a8a94766601479929b9a86de5eed68e4f019c834af568e76f5d5350015198e5ef1584d87b5dbd80417cf4b22477329fa036c2aac4a86fa15c97c9f142819c97dd9f682863f664298829414362d787516b28daa772a0e0a84af0710c1b98a85047c33b3beea843705f9ca33d707b6d6210ceb238eaca2d6d3945a2c84c298ab07131cfa22bf97e20af094bdc6ddaac4883c5349572eb0a45e905048c52fb8c9bdb0bffabd7a03a2abbf076fd235ae0b89442f69833ecaba0d00ee4acb21e6be6abaa985110abf415e6bb58f345183c2ce116cea3b678ebccc6210aae422ba2370f17e38f749e71f88f54ce3162dcb15fcfc2632d7424332eb7d7e1c3f20e5688f8e67397c8660747c011b428ef3c2b87e378e4b23fe465a47fe8a4579044bdfcda0c0917e19236bdd45306d437b1ad13ccdd8f0fa60cc45da6892493038c5db298351b1f492fd2ccc4adf62d780a0400ed1a0730deaa8106423cde0e9d001b31850568b8fd140f7be9c466050720a219b4d52730fb2c9603b2e935a0eae6984b49b208d4a3d609f4c5e3fe7326486f87a13b6ecd87b75591096bf3b8d8f411ec71e28f81f7195fc598189b4742f3cc22907f57b7834f7869cfe8859f3d31d1d67c3512333175fea4420321271194ea8b7e19b536951032674a93e4dc1716098375b95bdcf00718a67974be723310267fb05ab7181f4b1a0f1321e91c934013d12898f6473aac4d1d920507e238671a5483be9b1286590182871827d1ad6d0000fc7f610eaad5ca98d3fb8e3b92abb1ffaf6a7840f00334eb2768c7cd18b058298587f1b1d55f2310e79d79b2fdf311acb8030b45ca2d8d0a1b0e7f19311db95ef5fd20f1ac6c34695e6d5e69f488089a4cc8d3f3c2f5ef05da43a08340946016ac18baf9af4c95dca0d4504e2a0e251a6eef7deaa6c8e087cb65885974bb27ca44c5ed8d1991f06b3b88319cfe379946bc406151549a3d605822e7ba7f9c98400a96fd59daa305e325fd991c42979fd06abccc6ed638b3d245dc1443a215dde51458e3d453e6cd1c07cce39de3d41a74eb012c1e79db7e167c64022066d4e5aead247a11e6629737c570031113a648b6418b170bd9a896d6b9dff13d22fe55e98c797ad0f5905f8ca1f20a1b20207d513880556a7dbab31e7f0bef61498f76453c4891acc046f704d02748e79d0e0695b3f972b813d200ebf91d4c3f4d990eaf1fda99e6dab61d1a73d86ef1014acb01e87dd6fb9fa2e8acfd821750da3099da5140488315699f221ec5df1a577610857bd582da9b1500283a60ddb6934545e57a32afc9074d0552fe7be639e42569c0b54e6e98547767ea3d27dfa0980649da086c5447113c47df859c77e0688bd47f35c3bfdee4f28ca554b8d49646090fefd07f0b9a2154bdfee638ee8619d57f2e2a0d5725c6173b0ee4045ae7b67aae5c7273dcb84da980e3b653ff484d3a4f5e4dedd0ab127a9d21209a01e2f53204a9383b6b6d459487fa53f83eaa2c01991da43ca0e00be6d0576978ac81fb209e816f0c314206bf43bc061cbf843a8b2d56322b6f08dc78279baec3d7df211d162446d95e0196e444cf7db80d65820bc80ef4e265148e91f02b9abe815df741efd1ee3a326d0e36b4b2184d5d330ab21ffefd65cda8354bc94e7f5ea990c571d97058474bf8da406e0404210c8ab5f1e312acab67b5a63f47b37d64bae618a6eaa1191dae5bc2a40759c3f20da46d1461e1a4bb12d65546553001056367aa5ce114d11e36fae178b2980c70e51856b433a5c847bc94b8615cf616f3de2ce8f2a92c19ddd35373c898074b8ce930631ed22d51039ddfeb598a807abb4a0cd93128efe8a144880a80834b37b5414ca9fe6cf967496a9ce5ed60adb6bf12b5938f5a552845f6a6167a722a9482c0f0956fae929051314de902785bbedd12817957571b7fb3cbc6c9b93e853c2850c73e2c46cf41b97314f69083f9ac312fb6077967ade358f572f02eb5f9e96911e15a62c813dee74eddcd575618d106bb39d69f129b9ee6c9d8a6cf8a8f58d17226702b9f77b2aec956a1f6d8ee9b3be0c0910baafc4542496588b163f19a684d93ca23cdb1c74215411bfda45f3aca2f33c59c32304aa33b718c714f245ee036260d32160f1c46c67894310643d0a17b28e43f4d23ab20a13dbf969fb9afa13de52594edd3a7f097bf7d3af391ab447b5a545c4e463fd718cb320bce35e9a55854d4df4fa41daedfe3689ee6bfef66077f9d5a6383dc62bb839219920689ba38b7911e0c4b4751941474af1b5ba2758ac1b539c9165da19c9f4aa47169e8bfa16b77967e3bda250120c4956c4da899cef70594d70197978fd385073808b7500264e16007bad9cb7eb50d50eaf65370154095ed28b9c94df3b6fd9c85c0c51413905e54a256ee823da0d8e4ab4d0b3aecb59efbf720922cf25ca3a7339c8c2ab54acfc5c94b806f06bf9b54a912963af890a0bdd0b590a480ff2904c30399ff4412cb88d8f90674a0f4056e3f94dc39feec7970c03abb21f93c92f7c07ca257ca731db009bfa8df5fa42d894376995699662f81e4068a076d854cba92497f5c7970b9972ee819d259640c584f6947e94bf0198f540fddfa87c429ebda2a2fa23a9d4a74a7e5d25e1988b3c0115149feca32190aed94bfd39ce25c838ca4add03d29806b819a858c95cc9d2219c909c3863f1dea47dceba50aa43db32515d1b5ea6ae50db19fc110b909224a6f22de7952a3f2fae75b52189058b039da1fddc60dbfb6f41207c0aaf5ee32e2255014669afa25fa47f7936b60c5903ec8d9da1b917e943a617e821ddb6a60cff22e62af242bc46eabe084c3e338f672309999bb146bccd614fa1249dd4f9c062581ad4c5881e506faacaf2985a591bdf07345f6d2004ed7c5f13a385e0f77d7e17a2ddc5d87e3f570750daed787db75385e1f6ed7305ce9f5849f40ac6d6cb186db35b8bd1e4ed7e1f25ab85d0fd7ebe1743d5caf85db7570bc1eeeaec3f55ab8bb8ee148af97b897fbdb7c30a73a35202915522abfbce941506d391ae59a68b8d507ade135ed6b546ee5388a17164b83bec2b01262984ab355305ca26e86b0b95d93d4d624ee26a17948c3fe18369af1200f49625717dcac4ee28468a7fcbf9b5f951e4baf021eeaa6ca3cde611bd2896cb3ad005341736bfe9807e699ff66743d9bf972f0fcb6933e6c01bbe03f03074ab3b6bafffdfc774838db79d798fcb0a48bf596e8cb68e970e652094c0c229fdda27cace90368eca54c45d276c5b06e4b64bdaa5bef51f3e668ccdea9f5fb0de71c6b549effa1d10905f7e70a57208ad0eeb70af3de577692db89847b1b6bdc59b4c6b2f3396e9d39716789edde46fb4efff1e5aa252d12f2083fe8e50261cf856a5bc3de04e2c00fb16ae6c539d1e5ad3914af115ea94f2074ce630f82516e69a9d2f625b2c1b7a6d2182e9cdaa897a8feb8c0b9465418d5d1a61667d2a392eb0a0e923ee3964202f8ee128e74db927c9347003feeaa1d1a46ee9a63283b0f9dcc07f0b62ab35cf3e9c635aad357da05ce10c02b7f00e0c86228cea58394a04f480369d694350b0c20cd093610d8393af73cd085ae53c72a170a71c8b99b9503403e3eb0523b785e42c0d2b1b039dacbc9595a650c37036f951f7ed094f5fe33de28f62ac808867162c8b81f4b441f179a61af4437ea8e1a6bec1616bcd5295cf86f52f5d288eae2136569af34318f3cfc927aa7814503e39f9b9a5f13cf156fb08c716999f621065dac9cfafee03b1d4f05f1426c476650a6eb4319b858f24765cb1662bcba2539a98530d63c79d19d0e00b150bddf25f2d274e7421851ae6d3c4d2fd1095e4c3f79b9fcc96314aa2e3598c4117fb59a8f7a58cf2ea75fe7c900a3f3aaa910eb85b69c885163bd1303d2b34ae42ed70b42980420f496979552b2370f9a634d2bda5e2bae40d7cb34fb69b9dbf4fca6f641d2a016d215356551f5915163dbe7fbcdfec8f02819c611a295afc76b115b6ec1163e5e3f5184f2cd60b4156c065b23e3eb857a79351bd6c39e411f342da7ba6146b54b678934bf1491a896c75df524f42db0c3802fd87b4833991ec6e133088d55c79dd59169fae16580de480450cbffe34282e5cbcf9ac92e8c40ee0cbe30633c0df9529f8f9c50f1ad895ee9a0ee97f8e34b1de6d7c725626d1cfb1ed9fbe76f7a21554d04069a8856d0edbcb2f0e2a8d4525aca9005e4016baba11d199a6b54ba1cd7c5aee44441a73042e649a5353769c0bd3119ac196ff3551799344bfcab0d62363ba833f07cf4c629d2a0e3971523acab57bab6cd83ddd704f7c99b5784d369f91060b003f80721e15ac911fcd3391bfdc211ebbaabdc5b4caff5b80b7a535b81d9d0b9c815c4d954d8657bcdc047a98ac0ff8fc14c09aef01623ae71114cfa4c6192ed168ed5a9174b1fe93e5ee6fdcc5558c8b13e388ad814f4c7d28397cf55a546551e603f12e0bfd816ef42c2c821e95b943a60aa36e706e0829e08568b4042d16c4682c7c4bbc82d8e7052fa0973bab9c1c29e2af709958a6e350e1a2dad95d59bc698d72149f5f9403b45db3b2cb984227ca425ef3eba87cd0324f12790e08c5b2d2e2e64daee376dc4b879a6a75887f1c34ef8b59abc3cdb647071ee6c0adaa3a42a9b2a2b5f8ff19086aa88855008bc19ff6607f41e31badd0f6a3fc47cf0b25b287eb75fa01ce2ab5bb4812e2d9fd9abbae1822fd593e8d2d4e43a114f622f632cf4638477d0a57c17b9c65c6b9758075bc66fc047f922d87d8418262c349d6dd81e417c619af21dc0427d25e4d460954d8d18bee710410560ac4e80d1261db1b336d936061800c71ab770d4044a7a806cb1c44aae021e1c91512d7e7009a64604911216f8076fd850c2013c077668bf5dcab8afe9be8dc311bbafd4de580d44edc58998dfaef18a7016b87e799704ad02636ce114e0d090624ded06017cb3c132acc88269af8e546be56684f1dec469b3ab3d6cf62b54fc6e322b4489e7a517c493ea7bb37667ca020dbadb3768e766e82107bfeb12a98694c94193d449c51ace02c978df962d4db64aea2d75c7ec91c94e6ed8f19d0b312c22738d32dfa4b33b380db8887176651db26ebe1ae23aa494c7300809897b2f0580aaf6824ceb205e47626ef710e98aa1ca9610cdadef77eaa2266273f4cc78d827ee33593d7f53c3b0826537b4930ab292c9b21793e6c16c6e193318f15c332792f3de5a36db89d7d1e8be3a8d6108441023f0dfc8ecd6636e8e20f0870a3fcd1ecf9512c7bcf044bdb48c028a3c15814f37e6c2cce5a768b2431dd7961d07e00b78c69af025d8a5b107313acd8d7226bc2576753ac8855ade571a293234225ad5af0cc691e00023b50aa311a57f8c25a067413aa8caaabc5dfae888d916b331c8195082faff6467640c07550a6ba03c53c1912d2c99943aaba3710dcb87d46332800951cd80e05baeb3dd027e8bea1b378bf66aeaea19a7709327dcfabb5dabbd48a4c76e17a7d019d6b6c2815e4ff014b30119b6b548dd4639fc332bc5df7fe9f9506b0e2af003222ecea15dd03cd77ee2e897d9cc1f6db14dcf45e46cccaeca43b69712c51eecd8593cc81ea45eae1d558c9614bbfbdcfff803ae3e0271de025ab30aab1fc8d02c50de285da8f9ee167040ea3574d7606246f2c425862e461792afc8c339cd9c7cc4a0b05b3156e4a6c979aa9be50f013da301267146292c565373c52e9358ed2f8f974d999d875a82649f2803360d1c14c92a9bcddd4b9faa805fc25b2d469e77f6438844905e143b20aa42bd9e8eed514848215634e65b007a86deb1c1271fbb224e9e234c4bc0d1ea0f37dbb241bbe76a24daa4b954e28d1295d6941e9f84c0660b478f361622e4e391bd8bc919ea64902e7b40ad9e428dcfb90b90c2f1064e4af970f41d978bbeb359ae5090148d0a10127056fc15cba2da67ca7a7e6cc1ab092a24508b5259475467c0dac42d467bae53efbce94d3a0e332ca627883af57a64f46e651361dd439172717ad74808b1a0a7f0f18386719c509bce8525df375c59a2bfd824b95bc391b5c2fc7d5d017861b7a5a43561d3ea928a34108d8dfc3952a072b8921dd2c014857b9f856d6d23b01b25b30273448b25daf3a1458b667e6496eb9b921038af85054118d051440d9f97566849405aa930ed0a37aae6ea00590d7a6e807b2b6c078a59b44f8a36eb448d85852b2d7e3dc36c2da666c1bc885a641504292404ac55325cc840325b9ba928724ca6a00952935231d624fbeda652dca1e6e3add850462c52b989f53023562f3bb1737418ddb1c547e27d23f8ad07641ba5f6e83b575d9b906f3ff4dd7f48c3e4a0b5f05db52af3fc401b19dbb0ced35dd92e934db6017d5abb49fad46537838e8321e22f0ea12ffd6d9506b44ee76bb6c8d77221421c1bb2ac41fbea1287da456f67c20238e2a8d6f076ae6da1f5f07f150f1d600ed4696b8725da1e23dfe26aa59b8da674e8f94806d3071b1646498bb37ba905500c62821911ba370028ba8093effac43f4c574ffd9b9e0035e7659df4011da1d922457b72ee8927ef9b7a180af364f9fd006785a9193d5d24cd0ca595a44d40fd904c4a8f76a8de23a61a28c147e3c4f011e9db3b13cea66fc778dff9dddebe2485c9348c77f16b67b68673e23d80c85eda4aa1743a0696360479b5aea54dc63950a59d93e3b87581e62713d528abed09f7d8e62269ca8f4839f0e7c66266defec9de6c0b312157280588e649de28d5de7953228a347d11531c741d712d35b5ad1e11bd9b41e2fbc09a44eb4bd763d5bf0d6a33ad12d6fd39b4878d98a440642abb6c3fbbbcf1de2c9016ad9da9b9eafd4360025334b3243612529efb735ad89d4c2d35542ac87a9c716d3b7fdccebf9c4dfd2f768ab24cbc8b6100edb187b30a189379e9fa32221061c9c474b39e92129c77da161be4531ac76ab5bdca38552a407568e7bb7b1aecef1109683821aa25a415056e309ec2a02baf74f29428c6961bdfe13de20f2e66264ff632159f7a7ff8c452cf61db98e8d91fbb5cf6e27d503c758aebf2e95d0c7de1016dd5a063ea90592629fa7b5fafdd423ba63a9df5bcf77234aa05e73d78be77322d5f618b6df1b65ea9074fa21004cd00d1c796de3fc33d04904d3c1883c0541bd0aa01f6e3f1743c4bfd5022272b8da5c5fbd4508d2992b94a4fd7942d801b954fa5d49f984c9d27f1adb6ff964d9b6626bca0539570de280ad4bea4789dc3bfe9c92a3eb75b90198cc8c7ff29e1a015eb01836a60d7a92a2d3dd2e053f48027e942137e634f0ba8aae873a8ec5f74cf54ddf7dfb37cd451e2d9afc9bd8f1b1af0ab1cc537d100e618857a2c92d53ca4e84dd832be10ee6dc1034afdf8ff6e834e212136771cf520498fafbc68ea5595c7b8c766724269756ceb22db3db3f107006e34cef363986ba747b5e92dfea0cad3fa1086eef118179d9df11d03cd83c935637236ad72a012cd4ec892200169ee0ed361557e80631557e9f1aacd4411fde33e1fe631560ce858daf3d9856a1eac23043af98f5dbb54563ddb379e3c808e77354f7425641ef40b4d3fdee4e3ddb4f70cd526b50f68bdff4d44168301e84d22557a948598be36f3b629766f800338520d47698c761e594314a19d4560ba83d5008850cbcad4a52b01cadc2fb4393b1593c40cacc72b640f2c952402644e7537cff7db9239b6487c4fd189b6f16695e164ad69103e03e312f98216640397e13722bb0002d62bd73749a3e3321f84b600707579f8242784c679bcd70b21d6ba2fb91b0263098c3cb390bce8793f576b581e4cfb61153e2fcc8d1deaea977fd11b17964c301e2a302bb4a0e53b1f7090154c07c2ee57a35874389a6ebecae94831ee66f62a2c021369f24d97477916a3675cd16da272722a775e86daac8880fea678100278a734847e925708fc80d41a2ce02e78ebd474f4b5523a13b78b3f0665e9be8484b1dc43120d848aaad60f1482c706967d309ed96c59478398b5eb8c45668a8f799b8b854abf8e144cdc6dd8acef28106ef42078c44ee974df1e60964f8f06cd2ca133faade73ba1344eb23e112a5ecc4b8e4e749cac2575e7c96458a4fe3ed7db9c4cb46b36c1c0cb3d8cc97259e0572dd82a832306aa0564a036d62f5abc3c49112f7ead1d32191ecf9ae2900f09b724e9a6195bf90fd1e5957bfb9ded7f3ac9fd1af46ca1a5b05e7dcc2499ce29c3f234f4698653bdbc26b277ad45262f1cd7f5945f5ed6fbd54d95f8bbd36788bb8c2d1da5c80e00ca6152ff3ad9f758fff0fab3d78609ede343330f785aaa0f231bcfed05d419238136cc9a8f15cf020a5c6def35e330057a25f381d693710b7a17e83695f30081bdf1d9e2a6ac2cdc933545f8f66e4577a5cf56aa36a08bb34ac8c67c0d31123ab68a0347e8c9de3d8b4edce3fdc0165b34259827cb9a94979377fb32d57f559a65870ffd882fd39972ad56ae39f16088272b8f9543a8fa591d9027bcd64ffa847c6229d28dfe075e412206217dbaba4f8eacb0edd4699110213c22e05bf470422472ed9cc485e35db0710479f367bb06be268e77b40cd24cc6da31ad9ec613e2543ff5317a0fec69763be626f501cba834fe09efd8c3c495959650936a993014b9c5ca613c3ad59206db29c61e0eec53b4c16038f005f43a6846360671bcfd647af896935a5e9e4b9d63617cf9c8763fae5c72af497a44d6de499e628dd00ea17fef46d48a55432dcf6f644c4021cd304f8557e9c26a6cb9ea485b8db126d79bb69d4e3593fd55dd3560f1fd830a673d1f1f0b7b0654e125478da3c8629e9d7a6b17a2087da34f6c9bc61bb9e7497ddabfbcc1f2d18b44f34bdff54ffb8a9a5711a34114b1284956797cec4c8b4523189adbb8a2d71182aed56fdf720eca4bd6b9688281820da05b1abfad81c4783c2d2bfcd35fd0565b5e8a884ba3cde99d793f803f97526a5abb9b7c51ab1eaec84310acb69229590ec3c0a5a754063dd3d3c85188aef5bc6709b492416bedd0fe2d101663a51b2b5e4670263798bc065abfc204a96d8d81b8a5d2eb14b6871ceafa15016110142bff098055f94ed2cec5148136d3fc62bca8a86b2ed98477afc61ee9e35c125d03b168919bc82ed9af2a83bf2281b28406ae8facf11219ba402d47964a578d6a0988f0b9c46f9da32f952f06cac743febc54139a6b2cdc45d4b166bd8716108a149f86e86e00cbfbd5402f563acb8e97d21ae06a6ed0a30ab6da26fb895b12f0455be569b7c152c1bac686ba4c35e382ee5b157008361c97216b6aeaed8bcb3ff8954c6407265f28564b860f543fc95b6a16763467e99f86088ac62dad9566fe5e5c376cf7c7e340dc4dfdfbb4ffa68226fa382220a5b40db8e9de900fb4a58a846184c0a289ef1b64c03ca0c539c063439f2c8fc84f1c9d89905dae5ead4d6d4162c43d8394aa194db1375b3d20e0f4be413e0855fd4b274e45fe0b7151468f163e47701331b65c57231bb2960124ecef24ca0881244208720dce39c2b5e20a987c532b6253e50387b06a75bc5973c92056264429a9d08f89bd746083378e0119a3d9d9b3d3c2a596a5674b190b120dfc5e4a87b31d4303ca7fd291ea5bd9e49cbc86cebeca408c194cf305c03b294db433cdae2cba4c97a9b472510eb1be0419a8a144969df5bdb2276d6adb0e9953dd54dd818e0b2f897104e998936d8b327eb07cada9c79fa352326745df951e489f7af21e4faee20da49380bf8a144fb6e20e81ee305119b33399f656968697aeb83d7ef8876b172fdda180c931a489b0a392109695bd7f1a45f241c16a1a8dbce705c5e5f315556023d8fe2f4a9e83655050386a1abcc9b60f93018ca47dca4801243c8f9323a0d074f400321c3c6ffa41b4c60c50ea6fcb5710653611020ee5de57558549d366a0c58fd3dbfddefa80a0318a252386f4028fcabab7ec78c9260894f4ab943445b240845bf2919ae25125ef5a3e1c14f5c189ba93d1994c9232d6a56feb20c868c09c7258b711f2d4c2864d166d218007beda9574fe34d0c3f843023095e81156eaf47bb2a4d072d67224a10763bc8c089cfbc0e0457206a87f886a6e6a641e8595b0e411bf5f5e2376352d045fab3c0dea1e98c984f2803913131740684c1d583151282272a73a44d911e07a1ccd492188eaa409b721a56d4e04e4269b159adb199201aad345298977bb91666f0b711a05f0b982517837d5819527850522f01218792948640af7300136160fec7ebea34d025e027dd49d83529426d39ef4e200c8b83d75cd679c69e9c2a57324abc7f61423184bca43b221184d334e693ff79d227db2759f1b0e56c82404896f15b38f4eae6004260020b43cdca630c98cab961186efd1bd092f2567baf0a3aa25f9a6e30c15601071b6292db6ee8210c3cb83362a19d103b2aaacf17bbed3da2b08b23357b7102d389e0295d1aeff09224da2ce412e4e1015a8b4202410d5c43ad5f58153996db9e8fd082135e0e7fe9bfcc320813b426ef324ea97a1dc3240c87d8a8605424039664e6de0402035f7ae5f300ad5d235acc85266f7337b859b6a8edad2e9eb274fffaaed740bf0ae50df4f395b61ae763624b4b2ad3c27bfd42490d82eed52dfefa97a603ca9a242be32875b71f286c516b937f7d18d2d2b6852045b1f68edff068a0a46fa651a9122d544a06b0b13355a9f414a32fb7adb21bf82b8c596e2b130cfaf72f82f2b3af9facc887d7cd370b8e7445474fe46142180e7c51222a47545810a0c28bf3e0b850503374ac65d5362f77a043ebd3be23e9085759041a45036efaf26c2b24d2a16e304e75092b8625c473f33a68e18271e57687eca2770a2d3fe9c3c1d404e1a1437dcc8802d7558a5a4ddf097514d9d4958639fadc02e2a7a05213f0971fe99ce8871648fe867f675cc1e9b9ed967e20e6b8f2f21b401faf58a1b805e74b225be39747e6f28c05252ed33a31b4b36c83a2218b281261d1df85c36dde09ebcc83f0e8aa6262ef74bdef31080839d16612006e73d6254ffa9cec2edb967105d64af108ad41e5d341c828786728c52d208ce66f873f1ea5418546bf7c79f452bc183eebd91104355fc335fc07c470450fbd1c545bcd3974c845c8a911588f993cf1728c467653662665f465871881fd0c81dd05c6a65ca378469b1a0091e6d8d0c2a22360ca6e7d7ca803b07bd03c1c8908b991a9d6a8cb4ead290ee5ae30514c7a70075ea7bdf85c00ae3431f26dc03500e7672fa8223cc36fdb0048c7a65a22a5d6d8470c7f4a54b3c9fda7f8651f52c737ccd1499b7988dfc8aa22019808a01e44d41b256b402625ebc53c9c747f28e948e1ca851596ba8fde04a0585ea97824aaab03cdb6f0c48edddeb2aced8df794d6d127bc999bd8aad2ec5904ac00f41be4c0b0688995db709ecb7b2b214dbe1184ea770bea047f277e26ee95d5fa9157044ce3e2a4f1358ea8645efec448f923eb3e54eed89f4705c91d2f23b875660ede259c5acab66d86d71362f451f0f066b65d936291d3838275df33cbcfec4b7a263cfecd9bbe7a58b1e5c83d26920478655a42665be990ea6a3a37ee53173cfd20fe932f89dc40f35d28a95f2f025fa54712a5a2c5d2c8a7ea1181de6b877c8262bfbf38474a346e7a6130d3e6acd73a3b5ab50e4c477ddba044c8a42c6c37ad5013e16134154b544e25441067609e1f18b550df7310d12c84ff8807a9404647dfa584e81a9f068416181da56a0d30904d9c3a55ab854bb3d1e346bfeb97143eb5c4f685e1fe9dd4e0e48624592c0f53855184b68a6da948b20c0d55a20e97d65ac2180f965abdf0f9ac530f9cca89440cd34d2a995bbf209ce9904ed53adb0f7ead22b93e078a8f799c795da22fc09586b6a368a988001500441a217628c3b35ec65c5a48d2480cc89d66ab048248949497f31df65215913533daa0bc8fe18acaec25043a748b54d911c96124b3ed495d2325eb092cf7d002388d31a108d3118be298c1d741de160de5630b88a82208ff0e7dcfac07c9dbf5b5242104488d55e977c67fd80f05d64acc9c64b1cbc58e45f1643053e99404d40df0797b3434f5706445ad7c24056431c8b18c381332db456d89d9bf4cbd18bc1c4cae21c26b993c24d7c9770ff1b18788484a390b6ae158e5a103089ff2588f2db8fa9a434bbfd11ad764465a152587b18294dc67613f78478161bd89310c4dfa30859932425c1cbc07e6f30c298b1e929f743d761758d0a39eb0b53bde7cb508b6d7d986bc94e79d288a59e4fd538408d058d795b41634b7c7f886c304d2ae05c2cb2502ab34102379fe042db49bb7afaa60d2c8da2c7daab58870e8334ea2286be5162b3e450174ce07f668335365875df7a1f3b972c018187e0178245123c5a64a7f80295e3e54fdc10fe8affd5d244372cbda70e0e95eabafa60ec75b72a98d777a5a69b06c7cc0cbd5fac2fb5faf92650d08e1314ac55306bd9f3aec437158fb253e1510367edf03f6cb98836cf9c79be1ce2685a49e12182e61abfae8c6f627a93570914b753bcedf367ed4bc9ac11dc5ac2b9dba4f73c3ef3756dd8db15954a4f5f89ef861cde9f0957c6bd289f29554fa7648d8315a7c2ca6195c65233b773e6ef2369a7ac4bebf5b84726c9cd1f40d586b4383a812463687d675d0f646a79645701758be0623a4174157c60a2721ed61c05a65f58ba14c7757a197b5921cfbd718a57e9c45fcbf39b0995e404e33e2f07568d590d7286f2c969c86a7550376e3c6b0d7f9fe9fc9d2c35cdaaafb078d4b0889dd855284e9dfa5e04efe4f40f1a206c0bc9588335f8be7e4656b0c82c08e6ddbc2cc3a57ce484d9c15399feaff074cd421367f5a4724c01b081b7ba899379a8c43d6fa7488165750ec840632bfe020277c3e257d8caeea6a6caad40d21ad554027a0c2829d3716f24a651addc1b9bddb846c5c9dbd06714ea3d6dfb35b905a660fa5ffb3e11bc830d34ce5c910455fbe7619d226b5661a3fae5e8b1c981380bd14db352c4fb0addfb0ee9fc5262f268a105ad9efde20a63d7742d62f2081065f96c9c8498f70d8cf744f60dec1a1a6c0203f8b6c0fe0f55aeb7bd650e33f55852d68aca6d57170b80655aefa424614f70e2c2b4be62c17c8d90a2c1c6668736f6769bc5421753d98132588a309a2c0fe745ac9473005ff9bf5056497840aba983a855016cee30ea245a9bbf6b37f45ba137be5174de4bc430d71e847f4aa2d7b1af0f65e33563f6b4a1230fec6aba7b8b8b8fffd614b3e2129b5c597a7767dc669e405c10ee208d4942420a8ff7a55d474bfbdb39a8179acddb625ffdb6460d1d842e2b7aef32ec742caa558c9a8e8eaaec4ef1741bf6171c8f2c2e91ffef1bc5976e0903d1e8b9c160dd91af996c69ff33221474c808a4ae41c965b039a547ac6ae3db9c2dce395a2e6ba8e91093979608059efbc6c8c395770885c5194a98f47ea2ded5d37ec1b8a82b07f4639eea693b37584e64ad342f644c0e7d3d97e04f04454387b983128132ee4e733c6c44f18e3b878b47e61b670c3ce249e2235a8232793a78d69ef55b796d64d3b980e93ea92734cb5fdfcfb19c05bcded65224f3edde9aa864330e901801742d16d3ddeede70b3914f167f8be78af62b0660d639223feaf867d3dcf7271dffbd65c3ba2f9179a86cec991d3e650b9a32009ff0e0b3e7a70609c6a318a0cc3fda53bd5e72920d489dd5c84842ba6039af8ab3dea7292ea557c8a2af28cbfc35882f93ae74e4593cd3d07e1e01c4e8634a42f28edd617265d0538ef8eba12c17a75ae82ef9c1e098d5c0113b632bef4be1dd57bb8e1b9a1d7be5ec609d4ba611343c31eb59bd57ae7e3f7a7d6c5e1f28b6dca1403c39390a98d62cd4c1992205cd8b0d19f91c8e6f0deabb622c8450aac01252e88a2519e2561386370604c2be9836eef56e0fe6c96e5f1b0281454392a8dc51d25921a8e3ae35d239a0ed96514d97460b254575fa7d3128143f022faa098917193d88a8f5f5b88c8dbf402072e711007369d794a5285c0569cb586c7d8f7dd77f6e471f875ea373205384a2375576a41da9d7661eba9aef88e189e60921927b1549c3c89dcde33c706ad28558d5d70a4bdf603e0b41969ac9414ada9cd0510940e76df40f69e989a980b128710d94aa620a79078c7e9f81e497642aefacbcfde9310afe1d9284b3a67955b4a82509c20ab545750165aedf1e008c99be1158b9c4dde744819c22415e410fbed329244ee0bfa507a331c92240176a217c0b4c6a1add848913dd2e34827c9a3afe57c2d8d1e9c99a89465def68d758a8be050a627177adf383c9d3ffaab33ef3bd2b4b6120c524378f6a75aadf0995a279bbd46d7bfc1c6610b998b6472e215cbbb9e978c180beca944c13bc679e4f26643fb3fc2835a1a2f1286cf379703d5447696caaab312ceb43d28c61030b081fe06cf983dbc705228fc30a58aa7cfd91eb262953cb7110f050860be95129dd47e54ea16de6ee043a30d020b46c12008c85a3111c8cad9f40ab084a8641d470fab4dcdc3900a76c2e95e8cf004c2f24134b80a521f5eb9ac255e8a1e7fbc2821329995c8f508dd41ed943cf5b09c6bdd09cf3444ce674dda20b0a14236c6ee2442810703f0c629dc8efda44d1eb70c9a706b40620317bb3681c5642766c688ada6cb545a1ea2a0f17390e046db9747fbdf89c12fdafab35e86f3adbb20f5ebdf91e760e337785089bc460b241d50b02c9451b12bb25b289eb6130c94baa477df324690769a8fe3e98aafc2d1fe5d8e9b947059e241983d82cd9d15ebd577d0771515032572d5edd835bce4b8a7639a4849dfad3d191af8e6a65486cf0ac7572a927cacc75a22647db76722016a90a3d6c9de8a7d8d14cdeeb3bd47d42ab0b0e4f96233e36f56d8ba0a9d4d7a0ea8c23d3c5fadc3bf102dcfa7a60b2bbcd70c1105c42650d3dda350bb792267ab5c851bcf6d7e6b0b273df0e03dabeddb4cd50d981f8ce6fc0366c7627e194eee2f27271ef4c3119261b6968294e4ebc02a7920c13fcd6b1c1b7d828810e137364ad5d2e69a2e87e800cb833a1a3d107d543724d8ffa1452091ea6c8c627b816f5420940aabb8c118c3d54ab71528238ec23e1700515e9b1112a386de15bc54e97b31efca274e975c97de9f64265152973c742201171a7c817fbd14f5d678e5608013a6bbb54911c63160d9f3b6a4b5e4b909355c60725049745ce7419f09c321e36da0e30f464f5e68d4f326e6538784aa33db9e2a1d0664f2aae9a95966d82c172169016ca06b5ffe6850a7921a379d8e04acc47764c935e8bfb28cdef4f84b3be62b7744ccf4628a2c7836a7f95d3cf017ed467350d2b0717cf395fbc4e1db8c0fd3f97e8265e067377484e51ea0fffe0a20c6f33eb14b28fb4310721597c4e140fc149f28c978fa130ac8fb83f34c64187165247c057a458ff53516838a958b02031da9b6c063df07a9ac2012f8e230cb8d85aa5f2f57fdc92db32d50413503033632176099aac1a75d179ff0463227eb8e9a4ecfa59003c6c96421fe23e734c75cfe4d65043405b242a675a4398f8348a163c34608910687f586a58723a98e857a7e2fd00dd49f4166ee228133deb1035ea93ef8a8410c0541c4ba92e14135f201d2098dfd5d32689c922a7008ac5e06c5e5f89205f5fea6e7a47ddebab93d25b0a294a2a8b551f191f25f1656cef89da04ac4af11266b14f4519762810bcadf005c5a67dd72c607a08e81e49d807133d3478d1caca7c492248aa22d784a0a62f12636790a6a38bdf70611d62a22ecb0b9176920b703aa79135859b5e5c7f37a1f1d3f0b998740294771ac6336e29bf384c4f64ae000fac6be542ff6e5278f98d1e174d050c942145517cc6ef4345e81d421489bf4d426559d81da7839fe0fde731663f232dbb86a0538a60a4947c315398b5a1497320ba17c2c9dbdda77274d2e820ba34ba9ec9a8b5f7f2c7b902382a633cf13e0a24dad92544a00c5497f0b8a29661dd5e215b2e578804839898d1183c6b9ca7b1326933c47201cd93059c54978ec3445008b542634fc213a752f006551f58fc515dabe672b001944ce6a485e000f38a6fc4f9d55a19fb4c113ab4f07473d0d92797cf7a1818b318b010bb5efd989c50df14d1f3f0a4cd1b77150c8392c10a899c5f890ed18e7120d15cf1011d6de1a14006ef0c95eaf8960f8317e442c8d45f013ad76c3c299c26b7cf8f7f9a0fa96fe9fcf0740a2740b47808e244fd39fb8f19a20bddb02e601f9244c09d3ba0db1936186159cbe4c955614213b8fa2bc895d0d5136351f702d2394d54083da1cb9f719d3fe37cfd32e78e696ae2045963cef704ca219fcdf109e8fdc9b339d97a3f49d4474c984132713048d9650b92bc2b6e249c2069518f2d9650a16a06632498bfb35daac27a80f76b0f409491f885d8a4edf09cdfc10a218426cc7842c60bfe34365f8ebf6767815e24cbfa436bbbbc1e7598dfc54e17643f60bb61b07c764364aa1a7cd795b20c6ad9b71ffd17173610f78ae5914aa3b9e5c8e36156e9ec7e58fe7dab4630b9801d95546825c2ca61e0eee4912ed9dacba0aab367490e587a2ced5425cc8202bad72ef8403ea41d91c716eb816d8b67231e33cf55cd8bdfc0e434ae8181e722ae85b26659edd799db22dd9b4eac6efdcc45e362e9bedd717813dff102b02f18c9ce94bafc8b25817a8e92e4d55971cd96b20dff8b32ef6b37be6323e3cc3feeb7655123885eb7b5658dc571d2f33ebca0fcc6cd7f275de887ca877fd1e1fd3d749777d4a173328196a0e3758accf146d88a231df3c3f4d38314ea04ce1418e261a4ce9bfcb75906e4181778dd4bafcca77c1a9fdbfc6c711f3eb5082bd3c10bdb322e2813dfc961b0c988d721eb8a315e460e06194ece15e35f2d155206a81912fa979cdbc84f277178b131fe58cdb62a50d174a20b8d03384bf74d6265cc4c332af65d0751ab63a5771b2dd9ac6b3bf34b0bd53669682c0e35e6376f3438dc53f15ea34454ccbc3d75d6e2e9edafe4e21c4f443b82941169e3315dcb211df84bc405220ee4ab4cf773c02e32c6bc44476ef0a1cdb01a01a89cadebaacad7eb6e525fe0d661164ef21d17f013680a47652d82c03c48e2c4a5a02dfd81c1dac53cea4f1ea1278a1fd356ee6ab59e9211f15b48c64ad4dbf3bc556af5fb8c5c9b9f9ba8b8ff4dd44e9cc99239a4eac3a6c19c05a7b35bece25fc5f2b6dada7d7b6158c8a7cc5650896be191debc8dfebf0d7845bcd3bdee61831b4ef7ee24d253e3d9d2c355a69a32cd9bd63c9435add79cdad62e46cc20d30e5ef83bce3bdb4c00ba9fd723839b75d1ebe7f24a369bb94315a74bbb1b9fff2e61bd05051e05c255b21690d5b29278c03eb2262e2e754d034a2052b0a6c17a6606948d480f097b2d0be74229b448958920a058e7d1a1131395deb3a24a80a50ba0f2e67d62c092fa19232b3b216e15c209808aa95af2e26622add043a63e06e843019ce5f07ec69e6304732bca922d952fb82ab19f785e25708b6ba1c82bcffc0f21d6239a3347f74a68f4c68aab7236603037432a74aea51616759139dd6309525155450612e952456ee54356838118109105524396d1bb4a953bdae8223ba243756446784b1ded6164a875b3f0315fcf1a4c186215123f2aaee4fa1676f4b66d4844fc9139e15d69a921ee1a545ef8b217050d0b24c2ec9575302006103f4eac9400843c3742b05fe031dd6de684af74447a1bfa604f8c08de29300560d0f3a4f71510cf441672b9525202d1c9528ff9815ce63a73c2bb12470de9914c56411ae2c062b7fa83ad83810c50fca0b8f22866477ac122bd99113e9636e2c8bd2f2dfbff716041acf2627e4c9438f9615c69fca9944d66dc71db81eddee03641073126f4fa61a507e447e3cab17a69195366dce7bec3911ba9c806075d228cdeb392fe7920c3878495a47f75939885d2aa2591db9833a77b2c396248af5c24a3088d3f906868bc293111c2721bb0c9bf8c6596f72acaca94c84e2e163b95e52df99a81f38fb4ab69b89ae77e11b5256450561d1638cc6a30c9939ac504192975bf7e73c39234bc8904594e6f9dc55bc3f7994f1d531e0c51b2a83cc77cbbb5ae295b3a6ae01c840516839a1629ab4490b427499000c5a27e724da603e67b168aad68bfc2210cb73ac9497dc216bd309b9b18dfc7439834fbfc5a3e360614ba155eec2330a1c4ca0f9939c44e4c13fb5e62686389c41ebb5f5e6613efc3160392ec0f70e3fc15c04200c6b528cb95efcbcf142716783aa60c8fd57e1b15a66096866d6fe3797d89c52bd909d8c4153d402f4b81fa7e6ff7eab74cf4531b6b3ff3d533c40edc311f2ef1933b9ebebfe8d59f22a5f517255c592fcd77e48ad8605545ad618ff6407f4794f8261776ef98bb23953731af62b15daa745115f7486415c8f42122eaad9d67c54e3b8155076e1fe7be96deda3e00f09dd02d996a8168a35dd5c10b70582da3accefffc4f9e67d72f2bf742b96f033960008e2f61fd417095bfa237c5dd1a30ff41a880105c7d874a4643407de8a764897c57c40d76e2cce6c789d62be029a4edb96713075971292e0ef0cfa699b1d8de730dbd3ba082e2e91ddd4172512a5db3006d5575bc5f85964fd1b28d8d8690c0a830cfc678906de05507add26080c946edd5640ee6686be0ae69db4198280581e74c93d417a987884b1d332af4e3f63e431a5bdfe91bb68c92e6e40ad0578efc0a22f05285a40d877f81db7aa3a58aa983bfe3fd60a1303bd0aa172f54e7375855e73663bf95af10d799b43b36261888aa491502cf89e597d49e475919042eab8709a0b7d3cc626e957cbfdd02e117ecf835f184054e15c54aafdba62b02b2aba8a78e5df0df424b145fe6b6d28ae4abc987e6b3098437c7f3ca7148dc053ba4fc9e066202a78f62a5c96dc32255c4d3ef63916e302cab6081b181a6e9a3ea2b19dcdc10233317e4aac2106b8d18bc84f7ad7251d65a6fa63cc03eb83a50fd9f997fc43757e10bcd800ea4ba780b4b5cec366f14199757079c72178790f9458bddf160a1e8acfbe7542ef55a78730c3340a13d297cd4616ebc8375e653a0f33eb1afa3ae56fb1af566955fa0ffda2aad44094aac9c15107bedaa009c370c1077410a68438f29782d48cdc1397c209e1f8fa58403cca84b8eba4373f11a857416a1fa90b4791ca4c3820ff797df03527ce0e0472cd8834cd8d211b14201a1c900f910c2c4756db458678bf2667b1dd65f4aec31dea345bca26bfc43b199e07d71d6344dab65809e6adb10571b14ea389cf42c8ac6134cdaf583a2b94d5c49d7f3e0588accd8a327f1f569e55b75f01f2122713a5176c9f970827fca918c530768d2241878d6cc7c804644f76f13c86373f90726fc389e254cd14312040ee4b4e2b8a61032cc78dc9643823631f1cb150a0a4d4c2414674472405bfc58a63c4bbfac97e0d9922a5e26f98e26694ddeb8ae0218c8c4e403c81c0258b524c90f7b2526d2d02bd7929cbf8851ad6f124fbb67c76e2e09ba45492aba3a09456f82540abc09991532ce9ee762bdd646580fd2dc84e65458823670286003284db3088ccd822cef846dfdc7a1a170ed77093b34200b9b4659e9e721e1a6cedf718070c0f6573e8945e9e169c26e98f6c6f8deb1e3ab9c7e978d0f04736d422b9087cccf24ddb8b2e31818d96d858ba91f2f3ccc03c5799851d9ebb001fa01d5c4eb231880fca81737cdf0f226a2f9409e3e6ed0aa0355e1d30c30168c4818506eb8e3922264e23a149b3e9b19f032af48ee04e3df9f3c15d30b708f07b165255c8e5f8de4202f0c9bd8ffff39927ccb3fa958dec2c53a6eaa92f4fcc6934cf4447968eeeba2bb322bae410928baea2b8471e503da3fc7b5b1a4287884ffa6b0892b0d1470026a17e0b46e1402103fc930b944020e1ee44c8b63a1875b0bbe89c4409a372f3426ed3c7b8a35e5cb34a807a5ba75e88a4a77330533c367aace2cff37b925ff708bd7e24cc481870db32ac6c6d80257bb08c30fc39add7e9a34568d1510602d4c245b14e2d76c381c9be6163b082ba4f2e204b4268237d57a411150e0108616ce59c31d7c5167e1eac6bb087ff974b99f98ea4600ce8ed66baa1e66e20d38895edceb593a95bba6a124e5a5273265f8e95a82a1a3fe9fab0909c0a0543e3a212915b7a13d56d7fe67c318ddc93163d419e26a1df24aa541c141b7e148b949e1d9729e70254a1d45a1bfabb7ff715cd4ad7d62d42945db64d6e0863ce812d8416ccadc12f3368f48f76d4eb6e99ddf151f561fc8b77a22855fd7b40dc5b7ba5a1c21eae524f6f973e53274de99ae71df3257ed58b8f30208faa141bf2f6d402c0378ffbeace5d20c49266a15d146bb552c9ed1e4a771d91383b44986e7d65273d78b91dd54ced6adcc4cc19536cacf2e2639f3c5459f125843a29a50558605e7ad19001433190d8e5467c71892c8490bb6d4a069ff7cf3006f3430f07175861c085338fc5ae1e44e03e056676813451e61c5c17aeb50743f870b54cceb67b6d0da506745f7de913c380566a91e00d8560d78f0ad47961c53937a99eb923f56263e40edc846988500ad946ffd45737bcfec1cc4bf10f43345951809566bd047fce90b16f8d39eff0188f7270f38c72a94efbb0af39ea7d9361a693e4a7e8a9556bfec0e251d00d0406837a812169614a4942fd0892140a55c4aaba48c8c70ea3c3791044ef0e7e671fb3c1a7a21a881a8aeff9637cb0fd7d222994c5af492456055d2582c49fa35f02802d37b8d3d2c9a11656b3293b689f23044d9b1f3a74289c8f0a437170d4e8c75ad8ba1cc332b2c80e0dc4e5700414f629a6778e9e7dac3ff0798341103da6083a6fb2800f361c70ab9af7b6acc82c17ed0c25139f34a6233d9f9174394b2f00926fd645c9e9dd6c1ca15c3e7fed1cb54414f1669daedc3c87f408c6ebfd0e9609a10ca1f000dab6d370b27af0e927aa336dba8a3628ff83e74729f079eb2f69f35408b6936d8c5cfd1ab185aeae5e45f74b062a3d7f2d0a9dbb3ab1a6f6c8c9eb94fbca42a833b011e29c24070931e4428191feefb9d4bf68be40ecdc6ad17aa5a995a3005861ea71ef18d505f08f41799e7b815840431d1d3a0dba9d2456e9b13bfd3a9b5f9e6c6d097dc1bcdb17be0f232f9777b1295164ffe1f20886f7a6072d1e3776fba4f494ac4973b81758d75cb2617dba1e3e2f603be95f60b04ce4b7a711b31e68f0f166b85f11b0c1aab342645d9dfd39870e20854f738ca7991698f609315d7c92a985b3ee0a615434bce8d2a02a27566019679ed7514d149d3a16de0f8feedd4bd50b223ffa221f9a8c703ce409c02a26a7aa4a4115d2e87531a16e478a5344401015121b60471025b089a26da1cb9559015ed0532d61ef37779d5fdce2a8f2a9782c99c89fdc74f3b1244b10d35ccd71104e6328ac4ef0715b347c1daa5c5250ce25a58907b379355d9637516cc1a2c89a680d327529589592e17884abe09e14c829f9fd7890bfcba593537bef33f83afafaad34d5b4af497247e305c9b350a9daee700b576a11489de93f4ce23c3df93dbc8bfb37eb42812347573dce887a5dc6e7f16c886014cf3b817df8c865be9a4713c52e0d70e0c1593dde9b8a6c7f7b4adc0b797f4f860f7927e23caf6e87f1d0a01b2ab476a8cc640e921e50386b38f650e664b0e86a1009211d4b408dc4f2a6950e83a7ebf9148853fa009e2dcb5669fb366d94c38c206cc68b2dec01bdc0cc0a78a501c226fc7c5648a16f999d39709e1394a5b4a0447e58f114d4422f08be851101580a4637b7befe3f77c4929e01a0dcbadd4d766178da332459a29ffc04f8820463508207a32d20a36ec89be438368368d49e2dffc2ba1590febd35f37760230e64e596bb4bc647e8032797248f693843104871222c9a7adcd2cbc28a3e6e00037491fc0b22be7baa9bbbe85664432416c688030c0eb7c0dbcef815ca76f8790e39b5f9019d3b798b5fb996c35670fe33281c678e684b7197cd05909f47f7c2e002c72a71c6488bb0c3357fead51334c5f04f526ed2674523c0a23605210d6f73f71c092e11ffaed059e7ac6534db75c3e9c87d692e01fb25267f9dcb91feaabd0765bc04793589e364aa6da39147cf98e90c7688a17710c6ed1f4ca2996c96b9cefcc8887a4ffcfe62d6b8795058cf8e63816ec55891e419a76cb91393779da66ecd54a1fb1ac5535d73b3bc1e5e7b2fcbad43d6bff4448e55cbc3b12b036ee0947bccee3422ed508a860b6715ae358cba24a153121577d2d971124efb09ac582a33bfbec33621c0a1a359111b1443e283237161e73b60e6b0dab9a5de22a849759432dfb9edd728fa8e80d7da5368e9bc40fd0ba703765478eb6a0b2ce7b331052188fb0db63d57b6c75e28d79ba03d220fd3e095f0c2dbbebeb3fc04ea3df785ab178a2a81d52f2eaf0120d09504c2e2ed9d7e13b1606712afcf794ac534f53fd1885966eab527f9ec7b02497aa490ab34f248762c2ef1de4d9d36b8e4912b4f2e80dd6693f196459494c6d81f2f1a1628d479a1cdf60b1dd7440aa6ad76f9457cc6da829159648ca1d6af9ec7018a37046318a1231ece3d926723ad3541acab7d21525c09a2a6ca1b4f0e226efae4e5ad939de336a3bf162313a65eda52b48032a05ab45a6d1825b3291e5e2e44ad4539bbfec6b96fd439101e2cc3ccb71593d3fbe2d032310a31bac0658f6c7b722d9bf208d5e3744fb7dc005876feac082b034f65eb4182ce96751ee311271eb065b5321a706a43e787018145c31f132692b9d2319454867734c3f55131ef322512b24f7261d622dd849c065552fa9b0bd3c7558d347b74f9912122dd517f87dcb83e63acf2735a17ee45786273b5f2e57ba9b503bea3ae928c26394fde6f78ed9b27732ade761d52fb4d24a198c0a55eb175f1555a881f1cfff4787f3d2c159023905c83d03a7264bce81bbef605ffb57a6b1e467d8fd618d2466e4bec073dfe8a326cc9126ce9547625eed51fd6e5c863bfe2262ef0680102143835f7590a7bea2455fdac3ecdc2dd094adaff58a9503b31313683315c1b527c8354fd06821dedf5c8fb915c1a54f39358a48eef4706b9103e002932b20b25786059765d202049d021a468a725d4096914d3a94bba618fa011fd6feb86dcb4fb75b70bab41ab258e427d3c7180356a4c3fe7aacf61bf339a877c64cf844029bd171055be8fb67fd2c27256a9ca46a41b736178427ad4b3dc886dd98b5b407d99046089146f6267b6fb9777f07cb06cf06239195ad729665284f7c6124cad90fadca5e311015d3d376e1417f0022070a15cb34bc45ac81e1d51eb6b44cd935560d8c94524a298d77843ef6ecc4b2875f760764cf84f86616e3cbd93dcddd6957bbcfd14857032ac811ea7eac62d72366ad23045e7210f10d86dcbd6fa18fdc8ff36b95bd69488c6fc1223efe8ba74f7c2537df987b0b1cdebc9d050ebf0f87af91379008993d900425c44b9ef761c48c34aadc4f1cd3f1f552678b119bc03025c7b06378dcf92f3c2226471c0a91928be0f0871b6f94b01a24a657f5f77e2d6b7c9b9854d8478ae4c9f5b248bbf406a4a4319d18d1208a422d5de4e249f089cc172b78d2aa5aa5ce4ec453823c226d958fc843a75d7622484d37e9878fd1644a193259305eaf8b0854618031aee25fdceb02240137799ba35cbe387cc9f7218e7c1f5b76b454ae3bdaaa8bdb56196ddbcc33f99181e111f97e7297e43b41a5dc46a60f555447274495efbdf7def89923184e205e4cef487cec71a287a4553102ad8affda65cad8a959c490a8c04729a594526a844a6b7dadb5d64a2965a9b5d65a69adb59ed65a6b7dadb5d65a8ff002a2300ae51e5e2094e97d681cca7caf133b3954e51e2760999eaa688b8cd194258b1859ca4b29e38a5e7bc974769bcc471f734f7a559021711a010683c16030180c0683c16030180c0683c16030180c0683c16030180ca6e9e499727b5bc163fcffa9d44f4e5e527214ea2e5c9c84e42323ffbe77dd39ee9af67b4fe92b0a874a89379a60be6474591cb9d21647ba6c2c8623b7538bb89237c992d6e8825c1a638c54d85863b97f8162d2754fb145544918f4d34661c6aa0b42812cb99e172c91db25f6b8c028cfdf206bd42eb1e7053779de1e4d9bc4493c33ede811100d60805d40ca0f0a48004600e8c3010cf002a0f4408001a4042083870000e06487194360742811122308901c503f4c7cf4e0e162c70b1c6ed0419261e4b0a186111a58e070b5be195abcb05cba1b31c8d00283c79d58565e5069c1051b9ae9ae543558a0b1a98068000316f083021280001f0e608002f44080010880870000608721303a08090224871f3e7af0d881c30d3a720e1b6aa00187ab35c30bcbe5468b0c31c0c0b2f2828a0d175a58a96ab04023c55a6badb56d5de86052aca5f194d34801adfd49c132db1fa02a8c888472408386cf0522b2d6da163a180bde1eb439393014f414d961c2da2540dc3965658f6f6564662a8063f34202e39822383838455444444541984b494743f88764e0ce28358a1489c94008c8078a548a87051b9b9b0fecc09600c1c9494d0cdc79c6502c161ba29194a4e484d74c0c144a4a908ae0e0e0144901020ab2a28fbaa88774d0d9040506d349814f8ca709172e72c099199a2496b8a9b940671843b1586c081715195d11a38454849111a222383838451e8bf5442187827ea4e8dc62c6cd0d4e0878747244d075363294949662146a6864a2143a9f524141423b403222e281a6019d7430f7b2642c2d2a3f3d3856ee056de0ce7489d800062ca0f19b871ffaf486c644560f0a78486712f090be10d05d840fdd9f439165c4011ece22033c9c4705e8d45bd6f4d03278224bda10e0e18c0de0e1f41140b7dce1a1fbb326b2244f001ece1b003c9c4becd0256f1934a463204596148279d84a3a3c9c31421ece239914a47f224b2a0179d841393ceca11ffdf6e91a1f0f1b073db1f52227b2daa6c7c3d6e1f1b0797634c9bb777078d8276899c86a9e1b1e368d8e875d937be4dd41391eca2b2cc5160ba2c86a211b1e4aa31a1e4a241afa72a893707491c86a25d743d9d37a287f66e84b9e592357e64b7b91356d580f258ecb439973a3b9b7f4dc2922cec3f0302ec520034bff01d135834eefbe10b1655a79188d5e781889543e24b2a6d05c4d1b0f630e5c3349aeccaf1ec69e161ee270c146644da519c4476c6d573dac916b7cb9ad8d5c99efa7c456c6b24673752357661fd5ede80bd4009001e00278902e5bf443d05580500284100016215d96c80730ec6cc464d90318a00076a8876971086033001b01d8ec48972dc2031876b63101e00100cf0ef66648509e19118c900e4242c07999245dd9521030ec99c5e66a1e08988354fa21956aa42b1bf251633359194e0f1b1e363b6c76a42b2b82c30ecf64653137f0e8e0c93c41d295dde4089aac4a34573608d5204483509eef24e9aa1547b7d264d559235db5ce1de9aaae566ab5d20cadf452c3025dc01b60cb4e9e35a6dec815a1c9a2443349bae8925c99978127069087055c0143d4f702187e2a423640a5c9a2311be9a24372c568b228ce8d74d1227265de85a9d402a8b402955460d89f91510a78818aa46b2a0101014da5228c31c6183736e960408c530e3e05c4f818632010cb8c8182a692154745433a985448490125d1bd9708e5ffff638c8ff1637430f847393e0afeff1f8682653e4c27053e319e2630065170673066876cccc66ccc0ec948a552a9542af5ff7faaa483792a85ffe383a1cc2930954ac9c032a730a5a1492c416f680dbdc00fca17c1c1c12932e3e4e4e4e4e4e424954a3d953a417530a993933ff5a74e4e7e7272523403cb7c526474058d51422a422a05769611636f6c8c8db131f62646494949494949c9c9c9c94f4e4a607430272525a99f3c755252f2929292580c2c7349ac278aa1a02c034b647bef2f119ab50f71cada76bf7b5fb66dfbddeebdf7de3973fb8adb57dcbee2f615f735b2fa8acbfddeed5c07e36ddbe9de4f1eb86ddced22154db6f7e194b1b68fb2fdb673dca7716007691d90ad83d14cefa156d9eeeeeeeeeeeeb6dd8ebee966dce7dd6ea6d24c2af285d94cf6e240b6cf683ab62210d32ff58940dbe9c46226b1b869159df3de3593a9df7db6e96d7a9bfadafccd7ebbdfee777bd3ee1b77ed8998dc428e3d3b41b9fba542cd060347b117b394b7eb26c5d1aa46eab628abc556ccb4ba62de26ee601ac43167905669276d7a5aa7bd41191d90790f2422f3090c4fef9eea60e6b5edc68deec72ad3249a2fec1c972971ff3450abac7c374f371155ec1b770ae28a7dc5ede1ee70b3a057d0304a6774402428674c2693cd6b2606692299b0c9649a4848136922996474403290de56cdec1eae37619a6ce685a5e6a294e033ddf48e2342f3fc10a7fcee6f441742017d3e31967c49969677300d76ddb9ee2dcb40b4f7f100900884249134cab22ccbb22ccbb22ccbb22164ee9eea766452668272460343d3254d6cb23a47f5a350df275ff2255ff2b5c957679b34e980f433303c81dc37cb79b87ebe49dee226ac612237d37798c897e9b71eea6b0f3b0839c8a48331bd3ba85db48ead08c4f47e18c4c88b9099c5e7b399c9ea9cfb7da7ee24784221aad8b7c0d30971c56249d3777e6078eff7cdae6f9232303a207d6d22754ee74495a489349572e6ca5e87e32189592016149c495ba6936899d832b54ccbb48cc9b4dd7bd2c17420d7fdd86e0ae20383e04049d3a09c91325286084a7f92b2bdf589f7435d65c36793819333a95596d664fb7e8c2095819bd8e60c4fa4e984f984993495e8ab5535adb269958fc99a4b3476bb73ce73734e22fb9739b32be696d9a28399776ebfdfe6ccbaf07e7631bbc1d95ce4a340f1ee204f70c467b6cb8dad08a403e9bdadda48f04da4a8629fa3b33d4df66a1716d792b520db6c86468e31c657fbf82c03913591a28b136f0275824f0461e60119a79c188a48b480c892f187d8ba361235119afb439c72dff41855ecbd0e667b83df449a2cca91d80dccb217cd4c4dafec775e60d93e6451dd647b4a29a538424a25a5f5975294127cf743af3935e715d6acd815a85d7e503dd9d62275279ba941d98235e72b42d5a36ce38fad4bdd96e974df402232736088c299705624e3c97670a6d32afb0c67afa862afe18c0351c5bec35907b29acc0613b97982b15ed9eca657f63e17e81322ca8cb225b2e5d17906b165b33d55a23fb135513367337365351fb962df6f301422259b10a1b9fb10a7dcfd7ef370e068e1308e0a7c5c8fd82a8e22654b8d80503e2cf64d6329a854eec7484bd0b404fd1a59b40471654def56a6c170deb57b316b4164e3b025db1e5411fb18eda9cf7d38edd4b8733a20dc359088ccde8c8fe95fcd419cc0d6e1527c08f1da11924b383d6d44a31334953a5fdc3930dd2f4844e6ed59c7633b87b3bce11dfd8bb3998ce6d52bfb1ff57df533d3c9f69dd3aa0a364cb64e4613552c145ff6df56cd1e416ce7ae838b90b9031b76718e2907466fb23d132e6edf3a5dc38bdb7bda0b50d531b19917100b1c8d8e47834174600f6d600b8128f6b7833890083a9384dac5e44e24ee927c27a85b96d8e783027ab4df6e70268c9aac6ca657f6f77e1fca8657e51095ed8c299bc9f61a8e169c2011fb7b9aefbccd9072442122f6020bac6005322bf03ebdcfa9444d5fca18d0e4f93efd26e3aaafc4b739a0579493f7d52a1a35177cf322b58b89de7647157d43332626460821a87c873326e6135b75d6ae22d3779d9079afd6f78f79afce4a6f64752caee8db27d33fc71c9b9125d8355bace184cd1f2d892f9c4941f48b98455329a4b15c5b69be8cb4a276e18e3c27c4d6e9fbe9740e879fa983d1b44ba11cdd4d3487668c4caf846290c889678d9c7e8b78e64c58af3ad65d8f2934d42e1aa811b54bcf194795c819adb577965d8fd9456dd42e75048c754c93f9822842e6a9348b5096f8c299146be47c7eb8d33e2afaee66b99eeec72a134125ac552972feb48ace9ca8428f812f88f922646e4a3f6562da654603b1c5ddbb0772e04c9235a95554ce4fa556d14f702eb5e00b5b2929d3d3cfa47631093ba6526a1713a99a4bf36702b54b9dac16415cd19fe03691e99dc8f40d45a6efe9a34cc38ea1863aa87fb8a66997d7a9db21339d2da3769ab579fa566a97902e51a9445c7d46096ae49333b48d70c75a45dfe1f6a1b3d2a3157c0d6b97507bce4c416c71a753270f71daa49452bbbfa0bce4a132d23a1355e88fdac504da68556cb2664eafe8e9ccf92a187ea899f38e65da9fa76f4b698caa3f41f920413a08931ff3f5f3f2392a0e82c309be30c67a5429bb3e0ab6a6d102d1c801d98568972f3b49f6cf0a77f6d712aa3933596d93337332238b5a258ddabe264bca000cff7aa9f183ef20d72aec6b8a5791a852bfd5571ba128727d8dd1bc65504b5fad455708c27b80b2e2b341ae0f6f0525cf56838ffef614064be4941c7b601093efed133a3966eedb0837d2fd58e5d38b5a55895a557764af56d5d84777284f6c69afa732882d29224bda40115db6d77b2357eaab8e0f5a07b9de504a43c923643bdde69c9f89fdbcfdc526f6164f221d4a1ecea37026c108a90c0b92872d7ebfdd1624adaa17fc4c328b4db2b3b8cdaecaf72db26b4b50305eb0b09f9724ebf9614f4f85d8d330080f882a9f7eba8bdf56dd5ed9d7df1be99236363837b9723765d7344dfb96791c3e65c9618fc31d87390e6f1c367158e3f0e5b0e570c6e1ca61ca7da0101c6e0ecb0fb4e1c556b9c0d788a097c946c5174f50cf516badd63e54c9d53ebc91ab45e5aa3357b1bedaeca68fd3ee26b3cd5e7fea7a689207e7d6c8b7c69f3a1e33df869616650a8629598894fce50c9fb2bc892aa69f72863d252f67b80bea7286391d2e67789b345bceb0c9c89433acf56839c3b7716eceb05dca84ea4ecd19a639c3330b11554ccfd13e664a5431dde2ce2e388a433a8b9a05805719529a1d1e5299210fe7128c0ef5d96bb20000529db9aa0777003f0444c18071ae5abc7400e35c9164af5c4f04f7212290bd872eae7dd330d5a13bdc4ddd0ead32a1c32936d17e3ad5aecadf5d7c21d52182529dc9d201943cbdaabff76301529d11303c780243553615e1a3371d06778ba0998bb9dedfdfdb7b6b391322e884119179e69cc326b1a3d7f0a5460c55d4c927845c55bdea77ad3666962bdb9e669b5d9c1f2d3bf003269a38d1eeae9d5d7630b27b562c8fba937aa9e9af15caafe8921a882bb425371055e86f9ea0a439c117b664d94614756f5a66da340deb6b615fd842a506a48efc40a67204994a1464fa0c474a29e513afde40a612943424ad9a2a59c1988da05a158156c9f74bcbc1b68a614ac1178f22c5f73a71c80db180d471fa69c80722f13deb78ccff6437f1eeddf351651fa23eec4e64662624f01d89091c71051ddf93a0808e0f4c82c54f1d3844fdfcb4229bb4fb4fccc4c859e023908857d03153a2630454e27b12472441011da7effbbeeffb6e81171ddf8ff8c06faefa743a9d4ea7d32df0a2e304a2e6aafbb2bbbbb64988228a2966e771dbc9e3bab99d4ca77bde4f9d89a34814a855f632df93ac5170ded69d4edde66ddee6715e149ec7759db7799ee76ddec9f3b49fae79a0e76d9af7ede1e95bd77dd338afe3e47dbfde93f4aa576b355593173b4c1bd32a622b1e8514a87af75ebb3f518e3bdd7bbd37f5de71d39be76e764fdee69db85fefded377badae974af7d60a8dd9f32dacd294f1b5769f5a8c9c4d2b174a67b266fc3f4945d90bb5d967d72276ff3b613e76d1cf78df3e69c73ce39e79c73ce397fe266d6791e2737cb75f51ba6777192ed743a9d58b418f93417242d589c463eed74dabc89145bdc74c24c9a4ab486da504a038ff33c0f0c62e3b0cddb6976de65e95ab16583a5f338aef3388ee3382fb6365089d8f232980ea534f03ca4adab516c1de775dee675733b715174278fe34eddb66d5bb7755db76d276debb4eddd49d3368ef3bc6f1cceb2d7c9bac94a03ef9bb7712f60dcfed4c178c17927afc3f41cae19c8737d114bb8f7fbe4fc36659892e5fc94e20bef90bca7ef61b22e2865801e469f6fdfee357d9fd005658472f62a6341997bbf2f4e54e78d46d95e5750873665c2dc1ee77ccd39e79c73ce39e79c73ce39e79c3cf4bc3880e83eb23fb9498c97a00ee3c5e553dac5c5492e6fa35d5a9cc5c8e55fdae5fbe95e77791f4186f0d043b3c0cbffd02e9c9c1d8c9c3e643c7519200ead92731291fa9439393339333996fbe43e69adef2a2f9d710e6ba75846f60e9beee1ee27ecfdc3a71118f8c55118c64b302a85873822660879857b3fe993738267dc049f3c063679098ef10dcb0c629915c8b805a4f8a451b3a44fc77c4a0f5be70fdb05d9fef4ca7efb9df8e6ef43a1fa670b557903c396d91ef60f0643554ee19839f05b0996f9f37372e752a9cfe7e819b883848664e0b9444eafec251071155bd4b68d4bb94f84cc5b0a6b5ceae613dc413806ee21dc44adb247e12e6aa33e6a95bd0bdc48b8935ad54aadeaa5f9e12983e7cca469d5ab66dadcb40aa755f6209e4bf4ca9ec313d6a37f4c2f92b1f95016654b1ff10fadea77bf2ba574935dffb40a28f685b2e828944bc8f55d248de45105fb4e6b4d9a84082fcd42cd95bdb52f295f6e5524b1578b2dcdd5d168f2be6df73413e763b26850afec878ab0cc9be77573b019ccd72c3263ed62ad9d41d9ce9f6c1fc3d993ede76bdaab7e14ead53e1e48391034819b890bea806c3781443a0e4848cea476e92f352ba3a9324db38161b644b6609872936b53f44414aa511f37c18b93fb9bdc94f874a24aa53c9127aed4a77c27d15e96efc5beaea238766523abe6e4fa054497a542daff8080e8b237b0f721b666dcbe00d165aba80208d9be87d832dd5e00d1657f7e7c90ed79882dedf63b44970502e241b61f125bd9ed8544970d0ad241b60f125bdced7f449715b2f7b123e220bbb87db6cf711a6cc8f638628bc5ed677065fb97d86a71fb1bac6cdf125b24b78741866ccf125b309256b2bd4a74d9242517b2fd2abaac923d8de8b24bf638ba6e8c8dd842dd5e155b25b74f892d939fc8ccc8f6a9e8ba32f625d17567e24abd8be8ba34f623d1755f27b195ba3d2ab662dc9ee48bad91db2eba6e8dbd165dd7c6be46d7bd91d1256de24abd3d175bdfed6f6cc5968ce3770763a9a59ff4deef53b968cf77dd63648185c758a3c6636ca185c7e8723d461c381e230d343cc61a6a788c36d8f01873e4788c393f461d3a1ee30d373c461c70d8f11877f0788c3c7a3cc61e8fd1878f1f390009a27ad859c863fcf11873788c401e6390ab2ee42bbc99f08c6bda399cb9c0a77bd8c559600f062631c1253fc1264fa5309671213894363736352f9a19991bb3a494847464544434241404f453c50da84051d1f5a6a9f8244f56e59076254fb56995097722e80d084495b97360edb9da3d7d9c96d59b65afd3c76959f6aad9adb566d5c7569f6a33b52ac5ad367155ab08222b8ba96a50a14039f135916327c8f52cb6dad49b7631c9b2ec99f6aa36f7fb502895e4a9f1b065ba879d44ae9742cdb212a9764c46b7592fa188ad7a2983e8b2347225b656afb79fe56cb5b12ffbd22c0b575df50c69b25a68d24857ad912b130944ca3596268b4d56ecec6563b12c76eff76d9468724270100c04e780c3fbcaf53fb00fdc03875726d7f3c03b300ef806ac03679c03db806bc034e0d00ee57a1cd8855bc035300b38b455d81b644b45ae6f152642ba8043fa44aeb781432a835caf82431a45ae7f0187748a5cbf82436a835ccf82435a45ae870187d48a5c1f030ee90e72bd0c38a43dc8f52d38a43fc8f53770488390eb5d7048afc8f52c1c5223e4fa171c5224e4fa1970489790eb5b38a44ec8f5347048a310d229e47a141c522b84b502b9fe38ac49542572d540aeed8514f869be8c872d3431beb9d64857f6aac9f55503d1657f7e3640135b9b12d16581803230135b3392882e1b1474815c5feb6b0562452257cd0ad1658786aeb0145bd914a2cb1211554129b6b82844972d2a9242526c9d9c105dd6c8080a48b1e56209d1658f8e9a70145b1e12a2cb22212921d7532323d423e47a5a145b2d5e4faf882eab2457aa5211628b2408d165977e105d37a607d1756576105d774628b68262abe4d5e44b43c8314090f1c10c0f723db522ba2e4d15d1755f72c5065344d73d794dbd9ef6c4568cd7d3586cbd388d0e5e39a8c141b6a941aea7f5d489286291d81a71491bb952799e882efb922b7527b6aeabdac8957a2a45a650e4fa8a41aedf62e016fe02c7f8087ef10f8ffce2ef32f0fd86579f8137175cb0614345e585175656585860802186186490a1a5e5c60d171716ebe56586195a3452504030855bf8094e956093a370c96160d449300c0fb3b80becfd845d9cc3a767983361ed3230fd0c6c3a10f616c80517b2d78f0d1b3f402a2a40412fbc1024b4b22234c4c2324404030c444531c4506424830c46472d2d4748376e2025b9b82429b1584b2f7f59caf5376686cf20d39aa14193f24201df92a131934293515ee02ffeeba5cd0c19afaf36d8e69f711b19af6a4367e0e3b0cbf61883387491ed51700a0e53d99e060e71b66fe19046b69f01bfe05025dbb3700843b677c1e18d6c7f03873364fb161cd290ed65c0619c22dbc780c368836c0f030e6315d99e0587d18a6cbf62ff020e630fb2bd0a0ee30fb2bd0d1cba80c37845b6b751c5fec337aad88fbcc05f54b18f8149a28a7d0b181555ec53f824aad89fe047157b139c1255ec4bb02aaad8a3b08da8620f03b3b4bc44157b16184754b1f7708ea862ef02e3e0234854b1cff0101ea28abd09f7e04354b15fe11fa28a8d949aba1f33c336aad3aa9daaa33a0baf97b1d8aaf17a39456c75afa720882c23a807e84bbae6d0ab05b9ce30112f09e6d0cb7eb3a7d45a1536a1379dbe0666019bd05b130e9b70a051aeb388cacca5ec354f288d82f4dab50f11014deb84d073b7fb41cfc91deef55427b6bed75317c4d6e995f270d73e2c73467ffa668ec9c526144449c14784e6212452d67474a46bc7c512995e3b182ab3464472a627903c2eaa50251aca6727afe4d8f3442c6f1f67a995925e4125d4422336b2baa6552b1da88e512533673611590d84b8aa4741313169d1a2b7f8f2c5503ed9cb649e08aaca8aa0b8e0b3af1c5b5cbb483ad42ea7d7d322cd3262aeeabd91a382be9f5cc1f0569bef43a1fe500583a3accab107063d798b1da3a45e48019bc9ca5e73655f73551fe3338e1f270a8d170f6ba0587c2dc5479732b542aea7409335530e569d199bd526fc6880e14d01c38b02861f08861f0643d4c119d5e63327bcb73601983da834ebd92993245468460480001004005316000030100a050342c178168589b4770014000d78a04a56541a0c255a0e63196390418601000001000006040060804a046bf5fedc06be292428f72ccb61d6ce7c033b807ddca82ca8ae0fa80e1d97a2a0ad5fb73c5d57dbfa8feb54ae3be01c6e6d3d5b5b49b3a6b7460516d548361fd223091fd93f86b86a89eab7e64204dd73e6302fd9249e5e70ee2ecad5c622ba890719a3998f81bb9a708f87103fc3c67685141f47feb62fda6f9077f8a164a6b27ac942aa9ace0969e06c138bd8f08369b3792ebdc2b9a52308a8779d8a4f82980c36bd8cea1bf0988914fb4107d93a31f6bec0fd25668fc09ea090101ed20162400f81b72c4cce012bad41da87e920572e625c83c2752cf8bfeb16895a406628468e01a7220c54028e3a0c2224dc48349cc5ca79183f33daec1f034034443a54c44ed5f97f15cfd92be1967f11dd15d547e2c8284615195a37583f7c00a3c48dd6572dd7315ab69fea63d41dd0dc95adbabafdaec2ab2d596721ef228cacc2e98c79aebc933a0ae121c0b8652a2fbfa3d8e50edc55f6d2f9e4518aa2268f405348911df311640a29a2e33ff24dc735751424fe22a8303107b370159d82dfc9926a3a45bc893f3f49785be903301b9fac3bf85e38ed4af19fe5a8a6c554cfb65bc9b19e38dd6dd5493ffb45fe3e78bb2f11b37c89a936777ae2886dd125c7d6876411e1e884e131020fa162df4128e7c5072ad9e42297e6d78156c5a07cce3831d107da62ed2e1c9b703e274f26b30979bb48cd8f07d37487f08a2e3f5476c9f7e2f53438d55d0a953316005e0c281da0a2653cdf4c36e5aca355a1a2810f481a6b1fe7fd017f16ce24b96c3007070bb972ba1cd3915d7c920b8851dd78571f3fd15d9754f05d6a8600bbb3058377431f81ec3a228aefd20502d89dd213bc3b731016a88d176a784a636673313a9df8f283de62f5b95604cb5050f54a5c0245f811ae96b56549ed58e44306c443b48349b1b1086c832eab16a73086b6cdeecd592967b7d355ce40533c1fe5314e59c47e9630ca94a48f40b4b72f5852f8068216b1b60760f8979f3ad15234238cdd7ef7b7a098962a47195e4725491e8d7d4e09d33a0da56a9c55dad54e317408fcf117132dbb0117de032f4487f19fd6205ded4d6dd19fce82b0549595018febf9f4ebab17827deb196065ca1c64748af9f0866ad68e85708252386c36c480a6d434128751101272fe37e1ddb10325857892bb06d7a11c41fd92dbeda1bcf62b17bd1fd237228e4e520aadd4930645c9203f1c8a9ddc4eab9a404a4ef66c196f9c12129f60ccfcb8a8a3b8e2809378284da0d4083f35dbeb8b28d9474a1f32bebd2fad0c284e9c3d34d85a8d95923cc4b045b9e797143f69057a9b60c8a67092c64efb2399e9764265040903b5cefa4f5ac22314590486205982d0f2050ce28f7eb99a991aebf547a41af5d0896ed718086d7c5176c5e2b9042839a8ed4cdca38853359e3b133b3c21772ae95ed9c2fc93ab8bc3461bedc9ef4c6ef3dc6ad03b47714510513e9541960eed59e73ad47587d3c825e382f3f5197cd66dc61134b2af65c2b47e71eeba4ec0f87066edfc11b804c4db9e5cb0e80ebaeff8ac73cf07389097d608ed7d6e0cc34620d0986260a55e65dc62bc7fce210bd5aac1c9830d87770f51c3fbaac9b8358999274f746582032f2330df9b19469097a3a6549de00939aa73a0d8e58e681fd1224cd5501dce91e766da4b9164d5c7e73f8b7291986adb7e6102eb19d31f88379364c2e882eae5ac6aa6f3d0242f6a4920256d68a0c44d5724a613849074ec974834555be287b898309c32ed2b49349c19d5f1dc8623f74681d58afa5650f2f2cbfa9fddb8ac16ddf839b6e2dc66d921dc2e855c49e6fd34a5e3c1f33001249e9166108c31d7ebcdb1a0f62679a24d4ad0bda21d9c400788c85a4e508696b31694a1ec506f72bf6838da43c3059f021cacffaac3bc41b3a3ba18a695fd2e82ce0b3df1bc56a5c34a9b2dd2b723dfee32d7c216bfd85b8e5f32d07a15b01af0d167fdb448c7bea700da933a88e0603e46783aef5f48ce51b0f30fb59020dbe145d72f9c22569f24cff4300641a8c009cc21ae7bc56c94c2b16a3797f944eb4ec88df61aab98c83c99fd1aa1f27450890283db054c9f2e917fc1874d7cbfd363c6c1147be31a21e63e3ac2dcb0ad661d7d8832c2340af0a48c1949cec5ee536a6c988da8a499b526700ec9263342279db96b04437cb3d31b66c957336e49652a41493972052716c296f67c45532a6a73206d2c765cdecdf4926cd955be8369d2323a176330e0050a82c8cd6e45e9f745ee6a667abba35afaf592bb329b9ab63a710faf979a5147318a9173f5ac7c0fe7587a09fbcbd18f2de217be2d737f58401d6ea38042fbcff5c0e76f85e8ba358cd62cd24b57ff7320c705887334b9181704a3b67f1f62934bffef60582323da7e3de0c35f3266d22158d6a2ee9e586485c31a8d91fa2b831b76c960ce7346983854044bfc446233e08bb3dfa31e1c730e27f1851dc4a40c487e0928753ab39730941f443582175a4bac25061c26fb7257999d0bfbea50884dd763df2770e0cabf597df7b9315d6e44a917d6cfd7857ce397e4330e9d55e8b772b35fca4dfc1de9272eff86fd4f1f88dff7820181496c034bb79f5a6c5aa6de7d188abebdb5c91c76a19ff21bd3eefb4c8ba5bebea5341fa0d366f2252817f417e5a7fd2ab0e4815274bd389602dd6b756e4804470ce596ae15be00f1a2dc90d345ed3be1c58029be136e02ccf456dd149a9f926d430d53c05c279c1de189c8de668ffde600eeaf5bdaede0f408eff07b457045ec342b3ab0678baf9fbc0c6ac80a61af35d85c5554ed5cb5c03ab8aab91d1f77abf14b1d6aa2591a07cefd1cfac66f7445a9abd92ed8a14ba23e60a9de82f96bda5f4af874cbf5aa3bdbf626af737bcae3b89e3a431c166abaf2dac4afae907a9cd4474ba7f0f4d9d40f4a8e19824457e381526195e83365b2e5a9e99d4d9bddd986a99cb073efb0ab2aebeceb724b1a320e9d485c0d8003d0694b15d35038742ee151c0fa75b321b47c1fc09cd322520ded0f1e3c2738a73fee035ac139fd60a26b97052c96d9fa41405b6d614b6f9169cddbc5a55c84aff8265ed88dcea1839a9a75bf29c31f3a4f47c645fd6764123e70a41d72ba870460d736f469f9393bcffa2f4c7c6acdda9527fd2e18e7d8cd6384b570ab585c2b7ea66321ac41e8c49d71aa9b66efe9520c210f763316e8fd92508058ca9fb4fd4c218da27f0f86b2fb96a4dabe9a3816dc45bd9cd6fce19db98386439c0aa7c2f438fd31d69db552f681f56f1f06a2932220f9653c461a63a1e478eb09ae97c4023b8350f4253f047a8855914ab8610fe0966dba0346e41968e0cd593a8474873271b98a845405d49573b84f93e0b32ed336db6b1b1fb189cc4b3e9df3b0e5543840d3024ab298e768df8227bcb7003eb709318e4c0af35db5090652cfc8ac95b6ecbc834f6d465d7055ad236d61bf78658a71d787fd4a6dce60a7ece25ef5c8f2ad31e5efbb5efd0c0192c6d497cad7668f4edd0f883e92abd5aedfa512623c1946752b37a1ee64d8cc198e5759a2a248c0d295a6157813ea6a2876db1d100c6d97e9231dac04c3ca4a767a2ed91056dd9c9cc89c1dc5242753bec96bc564aa02400c777d74405fbba0e3bbcc3bba4ef3b377a19153df952584e5eb51151b3f02c6956eda0c31590a8577a2897452b33363a309535d0f8c82c681334e08b8efeeb106113698156c3714b6817688c8ad199a317dba88a95a306e614c722504e9cb009f825c2bc8003bab06e645714b28232eff48bb1b50d142ddb488488ac49bfd5b326c73fc943aa1623673eb413eebda7865b42363000d94b6fe221b9b0ae5bc6c8c922331a62e95eb9e4a094f4c3ed3be01d67dfbab975d005ba6df8bad332462df249a4d875a3fc522ab6236e557c15025dd7957ca588fc279f3e21d94b1ea9856257172804a94151b6a158bf155772928c34f135e52f45ecd76a03120b700182e6ea4916f099d28d80e4c48ba3f4c39202ff3b6a5e8c220c43fece65b52de4349521628560a9d1027ac6fa6ad7e8b829cbb96696d9c71872b51367c7e43a58cdf89964a5dbcb937b17ad93ec65f1b31f370b848f8b1f3a7877b71b93dc3cd949d4d54b322724ecb18a9bfc20ee8dc8ba18d0e2ee1e4147817ed4bd66f07a2bd24f771ea8c31156453167703f83056ead89079d5399f24d90cbd5921d932df223e91b44584d7150bc28a3993c0d0c04bb4633bf7f0b8058a186fae7324f05870d42292f61c250fe25d4256fd9e90cf22e9bf1744548dfceaaa89c2a10d883d5148dc2203fd834c18d4219d39394a72d30580da72529271c1f4070ad91c4d0db37597865f7e994462cb61e855cc85bcee810735cb5fa871c087d2752d137e688c7b0b2b2ee4a9750122060f3946a927e9ff1e2f880b21a28ace848474f7d0f82f04b8bb5258c285c8ac32c33deeeefbf967a6151cad0ba5f75113d013ef879eb4d4ac0006d12096ece114c37376b62c2d5024aab0e052efef64d0daffacc51fdacf319775283f4c5ad10bdb9c722677baa41c9a725a150d001805e91ebb8deaebec5ce69b5ede0aff2b267d95fc83d516744a3b2a2651cf182f9b9ecac5a60ba693acbce7623204b0a0181ad4e40b37647544a2c5863102b2522a321b0a2222218a182229aa10723e4a05315b4a0129ad94fb2167d4f2313154e92141d4e001649d6a32ed00dc452d5cc981f5bd83700cd20b2e2a0470eb9e66db2ca360b4c194ce9100f051b06704d4b73555f50e5180fa809f0e6ed5b35d2c86de052f56aa64be4b40ea5c369cc5221a39fd6fae989268e18066f51efc36301464d7b787d78b337ece5fb0c5bc515c580a9065bb785bcf833690a6d63c7de4daa07d2c7d2425188048233c90133b21f6613aa584b8937897d540da82e108ae844110557fa1238b2c8e9b114f425ee26686e2d0b2fd56222f85d150a399a5a2ae1be1ecc71fc3f43a93181e9d662869f268df026de4667bdca053f12592a9955b44b39e58d7598c53665eae760ea4a7c0702947bf21c04d2e8eb0cedf6c05876b6bfc1a9b37742401ef75943a6147f2f2f2a63beec2d975d7d69fb4371f6275b385a887137ab6f89f01fa45cec843d7aa8ff01e49f07a05111bb0ff21ec6c3bfa8ee5f07a11a0447cb6e2f62733e708dc53a958afa8da404e73e159bfed0e02e43b3681b899265f8c63d76a9f6b374f0e87c315dec96bb817bd8a855eb29b273d50d0eeaf57c05bda9df2042010ab7ea698ce9f4e5a8a20ae5f60055e9280023eee97f00cd42c2e08fa9bc0242cba4f4c277d780306881ba5b6e5423eacb9af7bc099f6ef0b5409e480afea531539a6eaa6abaabe9a7913ab687e704dd47ab7c4420cd631426d43c7bc2199d8348799d001ba7bc293775fdc6fc992dcdee6299f3e70552c70e9b1299d68476e0e28bbcc128acc64a6242f31afdb78489980de901090df0c763738cf8eb9dd507107e4e2d66c275ca1406b87adda0a7e4bc4dfaf8c4c3c20714fdb54ee61d415c48c9503d0bf499785ab3a2e687bd2616dcd9987bffafee918f2fcc1828ce1a6b526241f67da8c4ab385f1cfeb53dba29321dec0d9545a903f96cec657b27798ab17792c57bd4d07d115394186d211c463592f177b37d00153c9009f41c8260549dfd7af8413d62c389b30493d6f0435ed17d5ec42db97dd926b696f96a6b19ebe3f56a20d8dd0cde6f19071dab1bf60471fafcb4320f9bccb4bac088c16700952d180dbd871ba2b3531c7c4a9f41b2873e7854d2f46a7c167d0a420561324318bc09098f26369c951b3257e31f26ce3ecfa2c6b2a872e35719704329d154b397be8c5e8e337877941aa4e686520f1be03421c540bdf847e96189efbb03261b93ee0a7f8cd615c1b7991f6bbaaeb7bf353a03360698db1e9b0ac81d6f4ce318680b3147dc91862926822f70a2fd66c4b6f01c22b24837690a85017862cf3d82ec4758d8cc5b1cf174118c547d1924386916425a978c810d15eaefc5b32c40e41795722d472e3d98b09718c42c5a5683a653651a0a36963b0883952457d98be869071099682b13d99b1376f9dada44d5f5d3969b32dc9e500200a7ac15cb82c7fba6c4b5f4edbba1456ed90f66d2c0b260d6964af6c39382f6b69b0b78f2ab01bbadef1ffd024d2a995ed6677452526ba9dadec4ea0ee45002ea2a03537376771082480d1f8d8cff1aa1d5498c74b869cd9da60fa965b166b9a66c54c5513db5fe3a6c89069e15e0a195b139fba4566af353f00b556ff0419e5697e34cedcba2412917ddd48e1ab412c50f32934600a69a39335ed75b912c4a4921c2fc5396ba8df39b59142de8ffe3ae130f92468e95b59216169e1c2e2e6388bdfbf51925d0b1659a16244a234f45fe04e4c9a2d37742f9ac11302b78619726e28a86bdb6eb20b3f96e2d4b53161c75792585ff37b8b147a57c57cc30fb703759300ab0086d423b6e8bc78e58c2f7b9b718dd1dfa71a428c048b805c49b055f095935e0df41227bea061e6a374a8c072254e268c8edc2208efabc484c9fefbc264bb7b151c602da47c36cec3a5ec4a982e7fc365739c62910e7090e4c86e806aa62fd09648eae238df8d26a89ed87030339d434afb9c12e2a8129262f4d2081fac23c76cc04a6ba56b457b1a6b6e669fbd3f1c9bcd4156c1adbcb048a1f7786554cc63311ea4236ac999b3b0fe4c0c697dd3aa2363c2c05c35c95431c8022d9bc3c66fc70a37615581ef9e9e313ec0a1823aa53c29fd1b7d120a9d15a31e2dbd90117c2879a07e4dbf73fe7fa3be959110971df372e4423054f088a4256c1c1c33695e211bfef8854c3cb1cc4e0dd8bf41406c4f93655f5e88871331dbe14b72f60d0e5d448ab2dde0e85ca0b4e60fcd16a6a359bb715cf612d0b095830aa3c7d9f565f669c68f4d73802cebfea025d40a2b5e01f6aabde8987ff111b98a10fe18e24f029304afdbb7c185ce13fce104f18ee8c05e09b0f384cefb02917db24262f404468bdf53672693d5dab72aa10e026acc3fb5865ffd1d2062ec2178f546edaa81e6848c5943113e0e053d198035541d24de9e5a2aabfd0ab1214d80a9613123e3745f89e66e52935f99cc0513131d2d4af112d0775c6902f22510b4698f8aca3476dff69a207f3ffa1effa606db61ac0959e609334500da79266ab03f51e236157f689ca4771e8b674c1a367a9ffb22b92b6ae489529bf7440d2460b5514b00cb051024704b934d942babfe4688f4bfc94ff3587985a4ada0a1c03af07a6a106f05074281b419b3a0ad25f48dcc8ca528ac4a43878171e1f2e10f3316cbe0beea3331f9e56d38197dcb40352c970bf6cda2812819edc3392c514b3f910f6f48af63a42ad9734b834d3d2b45d754312c2f42df367c597970be4c9128e05be588dd748622ce19aace0d2ead061851d02213d2af164d018a90de9c035a8fefb9e73b7e884e0c4d17f82422e6d2b590288cae99f90c0cc0bbfd168cf5e8ee571ad2bf3520be9e1b3d0f8edff4ea4655d9399ffe790fe1ff5998c8c889610467976d13c231e661ca6518044d9f9cef3c16a367fbe4fbf9be489a7c41c3770ae7a7aa0fb5f50cc399f2ddb915e288b6ea1a4c2e5b0092f8fe30fe95f9ee766504c10c3167be232af96cead9a8bf1faf9b44a63998f38dc1d4faf488d6c71138f5c5850affccf3252fcd10a181e45255f23aa80d6d37dc19d90d5e75c50c3165b7c8338c72cc28b49f15f3d8c8de3beac9fe8b4875a1c0668acc0e4e364225fdd12f9b34203c4a27afe0a9a4a8091d68c65aaa141c4e8d295ca90d47711d952de225513d109de9a0b6831747ea981da48e5c531946083abf1fe52e52e4ef53b5170a150ae653334b07ef0e6e9469db200929732ab4570e6b8ab58a2eaa6f415006803a29400e08da8dbfd519d67d5b5463f0176c51d6b9c2ef2609b54d952148caf4c69628a6a443ec2b74eee03094bb5f395eab6465092bad6687ba406e22e69dadac8460433dcd899619770077972e0bad9006a8fdeb5730be2a18cbcdc73fd00251683a1cf2d009adbb49bbbe392c467d7488487086cabc673e6d5da2f390e69ad38a585305f2d8615e7ecb01354f1f44f23a73bec05d66fd1b00d689c2a777a33a4b1d17c0e2cc287c5dffc626d97218e8653f13480724b8e4cb433f184f0af5c61a5d493ecf5e87539de78c19de42103cdeff1205143c3c3b8b67d0b10509e4936c5dfc083343405cf1239b62b0d14b668eddce605a26bb07a25ecd51582c961febb7839dc1fb10b9f4401cefb59568ababa686bc8757ab024ab1ad8ec1623f5fb89a03c345d561ce08dea89bdc88bb46171d5fb74f6a1c0bd57f7c43984a5fa0f9b3fbe896b83590e5dc4fc8e6e166b64339161fb44b805cd1ece7d50a06e6fd1dd871427945f7767ff51242312dce4afbb0b907bd23fb3569b542e32fe43ea6ddedcef7030f1519b94315d28336966e7934885d292fd1141803e7cafbfa23fdab47a75a962f357a568a69990822917a455f5ac320743c740bc18d75bcc30b18ac99d8e6011ad9c83f2b54cd035abd21dc50a47034e48688c7478e63544b07f5716aeecfb9d089a5af014735ec1aa49d51e6118c5a1599d466d4bccc0ead1fbbdde0dae75facfc20fbfc4140826e4faa0aaf3138424d3d5f5f63e6b23463302b7084d88da674924ab2a2c4d03a248bc9ae1f7d372f2c736561556f9be11cae448c6de9d1c1b92436ae36d358a7a1c7d7838c9116c1e2e9499a05367e530eb2f84c07e7b779a0c8cc4e167db3719fedb92b88f6f2a2cca7c27679190e6dd65036ec156bf616fcbf89d055eee0b7887069c3ca193e5262ab85d3189e19d59bc0c06640b0952da69fae0dc01430d2cd688eec34d7124565cb1d8acde710b94cffa9d241f77c71862620563ee33c0193e7aa8d44ca3d3f88789a883809837358945b6a122e9d852344c9b61cd1a25fd160ebe4b2943dbe6a4e8cffb41f3dd7a73ad70654a302bbadcf9a3f0b10c4045a2a10c59604a127564430af0b36b5b87827c6d38f11be6211d7123b1ad85e73e1500e375e0024dd7f07966baa4f9ea6db39ed9743f2d3116872c9fb693710b783770a70dfd8aaf590ac5a0176f55dbf7d108e5ef9d1adfaed14717d8ee775db90583e4c4550d96f37a253cb3074a9a4eb426277bb53d63c12e764ee8184ee15a5143765f50718e30eb233958137edd57919686c7bf282dd3158a40840be32b755ad2a28d0dd2e110c02e4df9145c401328ae002e2af5a8f13adf68649a0ece3ef0a28b5cf7696b5641586141cf65c4dde37a0ca2d7cb8d5c38499508aea8d169c89a81d459aae638470fe3cd8bb8a7a6fc2c479a430d76684580e033472e0270c34bf2f2264528800760fd4063f1563395683a88da392b5b176ddc7e0e65ecc0cf67b5f581eabc03f6485d04b394ab4645ccd83236a8e90d52b842f32f291c9be299e81fc8f5e1d4f1d72b44bbfe101402aea298570bb650b6415772a86aea579e24e29d1b5500c883b8500f33a70056e3066c5f761ddeaf8a0d676604137fb6a05d52da72639f6c17ba045baeb127543ffb00212bbe446c0913912c496e4a507dfe7bea9fecf15e2775258f27579a27a19d2532f08995e395fbc4bdc4acde109f43aad019fef4c496315c25bdf52a910b3ae2c8d19a557bc5417bb068c14a5fcaba31b185aae32cef17c0919696d7b09bba4c0b2b62885b465f13fc1684ee4a73abf82ad0ce9523a9ea3e1356f420d583a553c01cd0a18d693f292bc944fb61f92ce150d681e31d059fc99192278194c882326ae5b7fa98060ea22f336b7543a2732b545296c1e4abf9216abec19f79848d99a98a0bc54dc73dd7b7993a09b3d2e98ad2904f13879f181c7fd5b3c397bcd26e09c2023c8b09c9902f51b942de84f5f43ebcd3c042c8f103e34a94df687c30fb8038d423bac48a01f4c34e761a2f8208fdfd6124f3823141c24f0d74b10fe82fad5c4af11932bb0a04b97c8b398dc30636e5724dbc26257c503a54c2bdf59f3c3ac3a50cb3a8b16f98c49fa0bf44411a4d9b02ae01320f0da1954b1095494ff449a20c210f03cab389f8c8b575fbdaa61d319f38ffb30c7d32a434c0efdcba1f202f04055c9d504d6a28e77bdb2b59463acbf7d7b0edc2156511d00ff06b294f13dabe82a5366db453dd2759ed080d0c1345dd484149126ae252a7413d435a268cac2248b645112300e78566921ed625aec13be38b4dc86f79f0a26d43520b21775fcdd1d1f4bbe894f8a27fdcde3fe693630a48c3d9597e5d01f25ecbc8e7f7ff1b1572f38c053e48da9aca9e5af6554f2edc1668739a15558b8d9ca491ccbe2b044546fe8a4d448dcb7075cce6f28b77e03277d3ae65047848f28e10416b4422fae6b0a36e7f7b1710ef0ffe4d94f73c77641b8535f66980efe7a7a1767e35d28be923bd8457d405cf8b0dfb09987391c03f2171731b07f924213b974d1d19afb64a2af0aefc08483639e36aea67480a3a84fe48983d92a320e55d7296155ac813a1f0fc36329e9a4f13ce9790ea6d45dc8867d0b615a06ebd159062a62b1301a9153b088d2e173d5a5509ffc1959975d8f584718828ba5eb0fcb45b6059139fb2ed03b73a388590d1e35ab6feb9d3d7d8952e0f7337daa4765a11753b6ca511f8e9c69278a0be94a6fffac51ad740783fbed7eee179890bc0d42637b108fc48fe43474698d3e089d054c80742c7b1889313a31b1d1f898f426c03c2747c2402bb2e4b16e52861c12425f5def23c007785763728b293bef9e32731a4531847affd80766b2169ecb292117f2ae48efd16d7d3371bb317364ba8f109a3a95337691affc8811e003efa821d3f0c908b79fdcfa762f51102628bfd976dc4545b4bb61829dd94de21a88a87cacbaa9cb84229a160c4211c9c415538d5956b5a21f2f3b09ac37f227650f4e3154a68290aa6b0291d8dfd99005f5b1fc20be9dff77d3f9cd0a82eab10a11e148fa38a27ecf047f39ba62e460db9b0a9fdcfa922e434be2851d16b862b46cb0376b300876700eb1934c390e80bc43280dda6d50c496e0f1214b0c08f583c81560add0d9b1dd7a6505cc7b16b11a3a937c5507aa088506f130fd31faaf72b071c2409e7828a40c049acea849dec02a848e1790ce75d414284d19e5a12508a06a0ace2a5a2f108d66591e96f0feb463b0e16c6eeec36b9d836881ae019b2b7a933f8124747bd4c14eb450d8456d6b9e0ef8b2b595ddfb81aca5567ee1f4a381493e0f17c0077f4a963a508f6604e6626d769ced763a7cace67d94899176c10d4c08a496321fde17e19d82a9902e9ce54fc3d291dc9d6245fecb9777c9613d15835fca1d2d3f1eadcdcf8059268a19a2fc347862e2d1790e3b3c56a0dd0649c6615972766e6dfa17dc85242dcc2b519fe6a03c91266b3340f6276f6895a4d51d567b4c6123825ac1bbacbb2ef00ac0fc0487f8b611a6592b68ed3084d1ba9833f05859acb0348367abfc86b1c021ae299842c648fcaf3720ef500a2887849026ee643b9013a36dfa4f7c173b2960448ed14c1eaf5d7bac8a6beb1aecad4ad908732a61079f576a31448df5a3707bf59e6d94b830baf211ccb4b1f12a63398c5aac2b7978c5a875c47c8bb4f8a7be587a0bd00e777230517a21648486bda9d8734cf541d113b9c24c41e75fe646689b0df085e124c1f3455b9b28dc521603490fa46912f3f846e08373231122e0122d5a9f058d2bfd1fd1883fe26ece32db1259fc291ccc58e393db02db57b07bb1b12d106f47fbae053231f451390633819822ba0c45c53548c6c03875e4d8b47181a923b9e3208bc7bd8747600889929ecb4ca44b38b899dd524fa931c2e35325256c338ea1a4bc2c8e30fa516244daa5235c1509727bfaafa7b30b42b7e80007df1cf8293cb4728224e1f8363b7b1823c1d4b73be31b0e2a2eb5af9ad17bc33033229bb42f8407a145374d6164a56a4672e7e39ab29389774cf4662c524f2108cff493068d4be29168e78607a72424d99ab29c2af05a0dd04c79955aa014e0a1841ac666e1c47080fcb46e737fe18caf92d1c73209e957550c88c8e87d1fb65759700b6d65f48435b70b090f5ac93c5513cbe34c2fb4ad954186016afc18409b9d064add2698adc7cf5c4025cd85f5bde25a78050f4b0aa22d0df36ab88873e770e8ba41c73d704e49a2f0892a60cec406198377c9ea8f95dd3818c9a8ce2aefdf2fbf0587361e96f1c37021bdafa14750b5a5542164b79667b01c96d8173a423c6966225471885981c38ff89b6f61f656e30cc3e4c4507ce23d94a85c42b1617b2549b9ba9cadcfe87bce14569d16ef26e44dd9f86138441aa5a4a01b11b1bcd3817cefc42fac7824918bea82293d1722b9988fd9458aebcd56b2fe85dc579ca72fb51395824e7d5a185809ae88086baca0638f332677fca7620134e684f6148b303f9d27ca50c972abcd54bc49be214a7743297edd6842164a91b2fe6e9c8d14f2f5ed0e196ad5d618f71d96eca0314a2038a8ca1815636ee8c470ccf3de02198524e93066943540f49393f36129d7fe8db99c9210372ceffcf8925f06c80d3de221267242e48aafadec4d7db57b731699bb8d2f9afaf7770b542efb075f3dc399ce3aae2840a449baa101a48c6a5c8f072ba6797dad70794d8b817b25e3edc19fb772509afd1ae1ede5d556d6df05954f3226a43126fd3bea0023f0a75a8b0dfa4e1aeb2bf6fef2ea11cd174ed6c63a7a78a17c08ce3488bbd16a5357088707b51058ec6049b8cd0e67106555e663892fe2dfccdf58460ed7043f2eda11539e4f7249896f9919902cf4684850fe63884358b7d0448260afdec28c241ea9f4145a8a610c1a220b494e1222c87375f60c1864eb35addeb78b6bcbb6290ccf24086179a24e339a7e33301a9b64d83172b5baec21970da1e2c229427d39b4f77cf83420fc333d841c176546d70e1bdbed2e73d1ad52e581055b1a12e2ff366f0084362133b4d1db7f99ac2a9546923199c5814f321485cc12945c8ef607dea78192ee6552936c9e7705d947257be0b393b260ae6e873a69a68902429678f8a89aeb799a4159c73b881247b728fbfe8b18e701b30a5fa09869a20df9893db36e41ca44e8e9d50b48fa2f37f2e911855e4c530161787335e4e433140c9271346be01d58d19163f50d7ac290a520e836d1104214d108848846e27ba1e431fd31cef9f377264442c835c6a682069f510db531c175a309e4bb04cca0c6c6626274448d1b090995672fc9de9a72e547bffe4feccf5fe9aa4166d70314f830a67d80188ec734e07221d64fd569415659af4500a261b5247bccbd70269846d988561467f433439b758c68888347d72ff05b727c95558ca0c7021c6cf8152d7e944c06134ec28bc7b8116bee0c71d5c0dc3c8bcf4f8652fdb1828193f3f70cadc7a3a28a277d9b4229a2004b682ac2adfa01a7a1703e8dcfef7104ce84f36a2e7e400de40d1f21444338ffb941701c279cafda3e102b3b42c11dc043e333a08c1c7c883281344cb381f2f4f49105c11b18867bfc4fd2b94f784c268a843f17d0e3c2245cc951b2676988df89df944f66a2a0b0715d71ef47a61404b0ebcc106c00fdd8facca6f051c1629f9c7899598eb18a5870d93454a6253f62621431a2d93bee75305023cd8bd2eb4ea5088678b0bbcd4029d72f5fd6c1ba7e7c8cdc1ac80ed5e03c5137eb63521bbbbea756cb31d8783b15408e68e819053017f7bb11d0594b0aa9c7faef8368b8b55b18481caa7cfba453ee983951a943baf86dbdaa82f106ca6736a3ab2d15d6e13cc734d982fe76cc7406a0d54a1c5d6cf0ae0e91a4fe5fc6a243ceb3250fd68b6ad033183fb85b6e68f0c4c2a4488c2ee3fa67d42eeb4a4712fb1712528b495c20287471bc2934445a627061a7c36298c5ad738dacd3524e96128a66051b8dd8005fc85a166905d53fffbcd350148cd0225d8a13cc40e8a36360e77c519157d990e6452b720689fdf3ec3286a9615b93fcbd03f22639c957788b7d0ba6078b87a34b2b97166b009c7cbe6e8f1e0b323dca26e79f8bff1f7a4a866161ed6d77931f3f2f40f4294e12769a911708f0ebe531dd4025ae6b32c680507aad76f2fc28791dc8c7179fc49f15dfe52a1402dc7c7cd8e4c18663624ffe2b51a7fb05993efb9bee9717bd4682c664edb9fa78b22da1f1c53e3a97b31900e0f388c7ea32f119438eb8674d829419ebbd525bf8d3b539365abe55bc8d452376d841399ab75130d8c19fbb155edf17dd8c940bb818ea1bbc33e32ef18b9ad09c9321daa9eac5e555f7f241461e0ee13afb971b16c8f357749e36387bd82ab5525aee8e227c5f59f6562017bd60f4ac3fc09b1aa48d1677da8e82139ec5a7d23fcd2a153153896cd214021f3b6af57f005d3b45a1bdbb8daa25c485c3e91a11e64b8c297ed192b0520fd7194792c6e50bf8201beb34dc1939cd1dbefa0f406f088d14332e1547dfdd42b87ac199e91a7ab9e00bca95605af4283e189cbbac642aa4fb8098a3e4b3a00d8fab88d0dd3602841f255d906c3bd59805014fe77fdee99f40e26d71740f9a3badeedff6eb7d048ca114bec5f654a5443a3ffc3aa453470b1ca1eb354a7f151bd6904b9bb31b7aa18d363fce30fb7b208b47d26ee8ee29b0969f039e98fb6d6569eb7561fcddf953c31fcb97d307531caf5937de168b26112c690582884be61625886d720556847d7f81f4056cb8194ef16b85472d1e08fc622859650e1c2c9cb0c6937eba28dbaadebb8ad357f95a332b422113e6bc2036d539f8b039f963deade9de4d5d1a9c8945036c778a5e7a381edced855b90cf2d13fc7a2009285a4971f076bf21b474ffd39f85be963e81bb0164199060a027d1eb787665b917b5ee2d949c97a1509a515267b9daeb2573391643f45ebb8a349c2336eb8c87c93c10722f58a06be2e0688b0a5923537b0c7ff2e6fffd069c4870ae2e49142ea51601498a05b6ae27d61fb270d75bddf4e320ec2a0d52e316d0d9c36d96d82eea6042be79ef804eda05356ee106797f421dee8e625630ae60c36dea8942a1a3947435a899e3bff4d1d59b242fe90a8398fdb01af9589e8967c9d29e15111996c5a85f62f2f1df7a7d25c6d477a551c958624b560c681e7b0b520cd771649abc15d917e5f0ceb0c75c916cfb1167d9929bdf117860948e2e1a924cdc7b346a4324f587470b9fc5836a310dd16bc4baf8b12688531a4a6e4d6adeea3a659f5404eb8dd0889efd8b6c83082ee301db9d869f72ac3fcc7ad9d61f17b67338c9fafec9f12ba6bbe870906ac923314eef88594ad05756e4553ea772b09d191dd3c364451a3de068ef6f51342ca8bc47933e145f7cc74319e145c166f720157ce5fc183befb28f196d094c2953da94f7edcdffe1e372ac3f0bb59c1cab6f9e5fec29f62db87d261002b30cc271c1a0273163399634e9c02962e16b88a650146326ecc84f429bfc4fb1253f35281d232d9acb27e8bf86763b3afa533053fe24d225a75fd2f4059128d6b143050ca39f49d2584203eed013187005e0b7b68a04ed2df52978f35661827bd26a32ae575642d2672019c5623367fc4b398cb97412226f6812969d8f8e788a5a9b9e156c843b9d49291e31556dc22e5efc148f68877c77256ef4687f9aa3982b3fa45b57280a050feb44f38a7a60c967ccb330f7c2a743623b291eed143d8553dd33a754c498a85425d9483a497dd689ec5c625d790771804c5af5b24df148fd694895717df854a37bafa45073430e1ad14ae7e6d10f215860bcd5f4dbefa481ab57b1932eeea51555182ab4cfd149b6c7b6f5c89ff02586f8bb2185a7c001ae614bacfc6534ce4aed17b99922205830dcc898b75df3403cd58337851bb54c1047b8d1c03b167c1977a78d290580a894ccb8742142b39d8acd43df53cde20e76a4eb6a76a6f5dec6b4b1bf768a0b4963ed5862b6afb09d0d5b2528f43ab1f643bdfbda34f52d35b48489f1d56647605cab3c828a7611761922ef556cdc1130a5cd8e7a659a8ceb0493cdb29b33a279d79e1737df53d64d2ffecab7ed89ed721794f789ba63acb1e8aedd7313376416a6c7c51e8325bef6b39b568ee21e0e3241f0ed1ab716d11aec119869411abe8eca0b585706f58115052036516a7f9bd02df8098980db647a4a6d4dd7da64cd52e9f47b341ca8a8a02b3d10239278bb732727274f37f8f4e4a76a4f56d30d0b5620248e9cd8518100e011dd48b00af17f9e33b201f2ababee980264fa1c21a222eb8814e893306f9704d87f41c767d8cce6974db075c0a6b28c3d8ea178adab48e157428aa1afd0c0d7c44a5e733dc4358bd0f4dc8aa412e6a84171bc3370cf39ec3bca7015c936d0fa98af53207ac6442128ba493f1e1ded7bff1154c26f94473c621736cb6c0ffafd702916a6452d24be2b22fa267a513e7d51eaf50df92b5b0df41e850c2ffa5f855074f2b4862db18b7a9488bde8ad0a91e4b2c39c0fe46046177bb2751208f5b6621854c1fe0e413b11661af0d4ff1c3a4f1c5d5b6ad406dbc762ed8e2631f60298e1c2a4bbaa071d88c5f6c9960b8c6ef31f0b658f2cfcd6e107dda75dae449ab0255bef86cefa5459efb2ae4a26e7f63c5ddd65fdfea374d910d0efc6b305d52f5646cbbfcebde79362c62a21c8d8bfa06075d4b1c1efa71b6d78c8519d92ed59d18d1973c4703dfd2177cd5b812bb0bb2889d67346bfaadd0fff746aabc5a76b2cf98ce7c415e5d95469713a726559ce545c36922af47a4ca018e3aa7b1bdc9ca0e7033d27defc60cf097a3ebc75829e0ff49e70f3c33d27eafdf0e6843d3fd4ab03badbe0ad137b3ed473c29b1ff69ea8e783b727f6f850ef096f3fec7da2de0fde9cd8eb433d8ffc4d33be9554f258a8c1cea5a9064d9dd06bd77a32f1ef4d6742ad48d18c9cdb9fb485593699cf363961b0b68cf5e94b6b6a8d67d815780a4cccac039f6a927fa9e43828a0256d3e571b7b700b0672678e3ece79faba9350a1eb0cc2e0510b770ef448c62c43544417038302b34c092b5899f384e636664a61c349a82a90f74d4891222ff5cf7dd3d24c159f167104e957a18a7c0a4fb756d4bf56c8c5c337a773018c9998e525e5460d2b55e79348a3e3439561ad2cda8f82ff3a5335d329e73283fb6e8c0d7fe8634c54ae792b3221f618d25f990fbb7fc969c6c0dedff858383d70c23e007c3ca9790384aa84f56b6e7582aa52bdef91119bf89ba73a133f50cab2a8fdee86d2ff60839b315f670f9cdb667bad1f1975a2688ec6c800e68554b2daa69a069a3e690e9e988cc81baf9ccbcbb7cdad5a189479b693d3d94978590e05877385850626bded352cb5b8c9eddb3dec6f59cf023109b47acd3f9474301f1d7edfc3de2df34c2086406bcfbca3128eb383c3b73ddadd729e0562146cf5cd732ce9783e3825e7cbc26239e32d0e7f8f883bb6e5ffd22aa931c72edc30c8649c9b41504b701eb8e186fbe00bd7b87dbfef247ea013089de8819c2054621e708250257ec0898492f8414e2c74220f7282501279c009844af4014eb0991279acb44fe5be4a9a19891ea9d457a9fe4a6ca6441e2beb5fb94f658151288e0a94c200886510ddc60b82315478a5e9f15edb1e49aacce619cb18a5d073e6f3fee3e43b95c12af390fb7f899cac2b7219261566ebcc4ef5b52f9c976af7ed475c2367895d192a69871bb8c3d639fb870937d87e33e23aae2ab1047e30d71e92f46865b013ac3494793d56132b7a64fe2cadb6908b6f699dbacef9a52e1ce6bdad928915eef874dccc6e7cfd69ae1d2eab0b606213b1eff808b9916df0fe6b5e3b242b37e9caa098c13420635dac935768caacb595b68e8bba695d5ba9152301345019fc058b46655c87e5c4cafb071661672eb3e109fa4dc849c4237b408eaf9e2d6e22f6255f1d37b38c6f7fcc3586246514e232587c52acd7676611876515054224e41ee391727824bf2e8358556b804c75594e5cd990f9591aac3a6e70ade1b650a58880a08032e8172c1a90713d96c92b5d1f98051c5ccdf921f584dc2f1e29c102a4e9ec92492bdffc755c817df8fe716e1b3e5b590897c1c42762eb915948c982ee0529e977c3cb878f7a2fe412e291fc7956a867173711fb92af8e93acc7371fe61aa0d3b2106b2bf3ccce693b870d21a73360673e161b04ee47192cd10242f680e463062da006c3145a8e106f1b4e643adf6089c271813cd62162060e307f7cd8598580115f5c6ca818f22c0fc9620f4c8f7801ba89b402ce17381cd17d8fd753d9c3a0cb8cf93c84398c91a2e47ffc216361ee5c19e8d148371a65068572f55863d7517934e8de6339ee619a46c5a7798ff1acc9465cc1418f343670f950cf561b744d727f0d339e7c564c5e147ee3bf811bd1ee0acc08eff178b55a6f0ebaf686f6b703418b53fde8cdbabfc63c92f276e0ab221d39dc8a95743c18804c50f5fbf6e9817e1dd9427b90481fa444adb10d3932ff9aef09fd3e40f305cb2319511d49e36de7d8aea16d17089d90e23d3f99821e35a2f326ace249dc2908218201cd09a1c8b3dd7621fc74faacb70b411418110651610e3db0a31e0a8854e294f9d47dc64e8d80bba2c2a248e905a8d641e9acb0546acf7d237e4e473647db33254a81d5991c3f89485f25066979479daf99f3664634850babd0a2b3fb9a31bc55d3dcf1d7ccdd8891daca60308b3e68857f8afa7da7690354778a11deebb73249ec3909bd150059f46dde7d9ca94f3c91a212fe89f65154e2003323a15601eed0a3043654698834caa96c40f41bb9c91d1e765fa554396c01d6f9db750eb25f76c004bd73f91e3f3e2751bb53e2d963463a6f9b1e5e608266292669a29f69f6414ad0f3a41d281b5ea6d9f387bbd4c2bf7a6fd220599fef9e495ad286467d309f6eb683c4e63ca843096159e84b41827c83e4c481f51186de0b1d8094108ca4dfc9cb338e8cec12bec8fb8ce31ab0fe68dc8a9623f05e627aedd12bef2f233d2e7b0074f05992dbe45fb188428ec1da05bdbeda0ae54bd55b35c5945f1680eb4ec56d60c21e5540bc04b9ae45ee6e55b09cd79cc94f794d703f9211a63ff84fccbbf1017a1fa7c86567ae4335e76e084d27e9e370fd7a568da6982e88005b750376181da2fc8396679efd730943ec5760517070e0c3bb4fb48172018239e3f7ebc31e485987015c553fbcbcabbd901491301de4d24ccdf6ba955c7fd783d7ab9ce7cb582ad5a4a378f89a9f53814daaebf59a734267ab826bc7625e2896f796a0463bf43cffc9d5aad688e711e442fb3ac5b7474bb844ae8db8e1619ad5882906070b4169bff248449a0a7629033779242b79895dc8c0a317e0d38f47eb332c25dc3f24e8ba11192cd1c4e4e79fcc179303944000eab540b3a1926044027bb0c693accd648edbd1b0e246f8f1f3434450f805f7db9b68a7474e60fe9e4869a090961231e043818508209ba6a4239c5b452dccc2a359c693a1c92835052f37d787505c5c7a734bdf450102e5861fa6e9349200b66ef990100d08d3c84924ef842846f884b5598f47bef75de45ebc8db0ceaf9b264438e77b3ea5a15d028309079e633f97b1103b472332a8cfdac87828a0100148d3146984e3aaa809597868ca78622819492556436509a5302e3afd531ff638f3ebf911ba1bfefc396dd29a04c4fad302b51090da66333bb62b4730c846b151c7dfa8e4382525c79c61d902fc23033a2efa6c5b30161aa703f51ed0dd263b6ca40c9040cc2e373384dba4be43ba7965e9b49a1e7446ae7143ce58234479739c4eb9a2d875beadf9711c2540b6b6fff72880fcb5860d43ba640482f1bfec130a6240d1ff2da4eddd6dcbbda54c29a5ab06b306b606395606071234e4ea338661cf3cfc05685a35546065e4700bd863af636bb2c7bec52dcfc15618f60b45c54e547e9c738996289bd9cca4943e320c1d8cc0e5cac1e5f3338da872ff3494067988a6f3aaafe0fe25aff35042d0f9d987d1155d8e5a1f3d6af4c52fbab4f9b594afa334e82f7841d4aa17bca0d2a0fb662ec5c1581fd24840b5ffc142224df7fccea459d991cafc718890668d9e3f128945b66606bf793694eaaecc8863cfecd17c7870979256f5f8d3743ee4525ae58ab1677e3ecdd2b6667b7e8f62be001eb5c2ba8f16a378f7314ab3e650f7f138d2e00602eabf95e34fa6cd25cdd298cce728a5411f91a50cf1d0ca308fcca5a4593cfc5dbea4594cfc08b7a1f4d30bb12fe4f843f2d03ffe34c84722121cd090eb9f9fca1f4621953ffe84510978e45d11898311799a95394d5fb12a7e25cc2de817958772e08f4a9ab597125d2828f4c5519a35d475359c471ff2ab72d83f8e04889934b8a441fe26e2d7a689997d1a0a734777ff6ee0d48daa7d3cfcb3cfbe39d4347be3659eb62da9bcc953dd3ae79cf377c6e747ffe93a26157a658b8e10e7f4d1631cc35c268433d5bba8fc944750f943940656c59f7d9ccb662949a3975d8d1e0d720df2c8f38fd5b78f7d56865b2a6b318c1a72f59906dd5d9b6f33dd7dbad7d0ac140cb3ca90ebe7d0b1a3593b002694c3a8cd2b4d300d72fcdb4757b352a3f759217cc4f6dcf66157ec875be0c79ef999c9d68c7e4e66bee2fceb935763f6e1faa7f24361d2e354ed237941766ebaf8a31cba0fb273d37df4c29d1a9f7d580610aaf61c84aafdf6855d479ef6853baedafd56c7e9beee354feb004ff5ecb793c0de74d9119557c68d414fdd6f2f4783fb91c877b82680104e9c3859c28993259c2c111404c43cf48e06a54043eed9c84d8a2e7c6b256e9376ac8c7c8f5f0d2bd36aa02021ba20d05bb19d7e776b4c540773ef22a3f4cb26af5d2ba324ca505637e72677f2dac5153b01b596ac5c60a9543299be64fa9229fbd2e9e3e9e389077a3a6ded7299de9bcae9c3ae52e5f794266ad689eb64387da9894a5b77e3743a7da6e9459407d5d3d1a7b98e729c5783fb92e7e3c79ca8203010b60528427ca541d39b7e8bc1c56699d8c44556fc4a7777130de087496990c9c5f3baadb0c2b6030d39888356c685a3dd45ac348b05fc47a182808280dc7bdcc787b870d012050108db024769957c2b3c458ac7412be3a294d24ab9096faea88b7851b4359433b9705dc454642a3215998aa8e9a9899a4ca6df2f9e7e3668fa138f19b77bc1f49d4e5ffa4e279f14f5208b3c7d202884f3b61514e4402e0f92a13fa940a62f016dcdde3095fe06aea66fba9c66bbbbf4a52f5c2a314eab2622225aa0adc94e2fdf5f134a87dea10339500bc779354ceff252e9b713c779dc3b68217a89fb9679f782d71d2b63c2bc49a107aae9f348132386c7ab2a71b4f4e10aa50f4d35e4a0d2875ae5d29bbc5d9952e96d28d5d2b73fea64c8bef4dde00a12aa3e3dc44246313a18684f69292a7025ef86594d4f9dc685b4ca954893fb380f3d541ab4d23a584657a1c313fa8ab5a24a97af895646fef6a2db0eb435985f297275bb1c0825651505845265f49703fda0b9e8f4dbacd3c7452d5ebb942ce1208fa160b5d4c4936d41be8dfc66d2d4f4ed6a170f0f6a50bebeea40cd4a959a05b69452b3dab5a355f299879d1234055577ca150e12e272b936171954d599501692210ba172329c3e06319466096d4d77e3f4f15d5cbe9087cbffe07a45e9e577152ba3f4b28585a65dae22da1ad34bea6a178aa882314f5e8cc1b978b25297976fe334ed426d52b68b6c17d92e2eeff221584f9e0335280740032a3f1e271f3f28e7b1e6979acfbd4ccdcfe5f3116be8afcf815a40961893b76365560955dae50ee4342ca455f2798a5c44aafca148504a1ea8cadf54f0e6554192481f2ba9fb6a5819f95cf9b535a3cf05edfbc1f2a7c7754a9c91860fb68571d44712bcda6b0771b1dba7bbbbbbbbbbbbbbbbbbbbbbbbbf00b4ec22557a9602c00a281562b89c5a584cb444eab86da461dee4ba5f9e8517f77cf8bf7cf7384d4f7a24005db798b9bb63ee58e6a8889a93859f01183de76ddf795cb4c1033c35fb97e9f40897f258883a2409c08b20098aa469e68b325182824295af56c99f94a250fdfa2ff4a017707abfa13cae0278f9ae9301f5f1b9ee06ea23ea230ac5420a002b389122ad921fb7263b82f2a273bb93fc5fbc59630735140078dd517ac86b290dca8fe135514f39794dc54a5f296a309cc775f01e779f06ddf39c88fff44b09eaff72af21077124fb20aafcf674384d0d2d5b7ea67510e85783417ea45f2e9965d9b71fd91b59c63db21bc3be10c3b0974631f16a1206cbccd2043228210a6c85fb372f20b054d028b8e05816949381392666c64830a83f7f18b3c2f8933ec4c470516403c0eeeef2dc84adba6fb32b9fcfdfd360f73b9d8e11511d7472737274d21ed22c225387d34ca289f5c0c52aff25558f85d852d1d62c606be29326d589a8fe5996750f426064eda4ca1e2b69d097b0ab41c7a4a04d73e8a8a1591867ef5d0d1fa9516af42df105111a5e818b8787e7032fa16671f57d01315012356426d59368a2861c1485874226aa9e84cb471a3333f3beaa675e0e1debecd1275019b9a04c85ea0e60677256655b18d3477340f75feaefc745ca2f846c7511b632f98d7c66155eb07b44f2c3eb9d96b1bc8915e35d7e9d06f554852fe49e93b70db67ca60fe5adabe8b77157fae8f68528aa7dd95764c3d9154b40aa7c04c9c73fef8f4941c3597f6a4f4a51a84775f7f4f473ff641e5a3121586d1c57f553147d14aa86a0ac36e41368fc362e16a6b18e4ab09ad67d45d14336020cc3dc7d9ea07a6bb14989a9c1ffc718631c2a5aadbcb812b32ccbb29759966559d69ad1ca3289c9968d9c59a2b0b563a8069d56abf5928204ad56bd128780a26bb850ccc032a693999923b018638c31c618638c1851ef90acbcacc85c2557f715c5162d7944085cad5aab566b35b35acdb456ad181822288721e4459899313531337304c3c4c4ccc4ccec4ccc2a266635e31d330336f80df6c7e4801243b3f863626248ae981aec9ae2f3d34c1e1e1e1ea09bfde8adffa26ab0ffff8feabea208e3b7ba3f08638b1a3e900e8db93bf3b71ab469d0f99b27f6dc9ae1dc58f74c831e33a3593634e27b8cdfcbe28f11f377f7e8af287650632b09a624985ca0c5aae5deb2f196dbb466b4fc5b336c30d9b2f16f8521d098dadf1a9a41c3b7d56abd869050824705356cc915bc868c7095e02afe2abecb109f87b7fc0bb16fad1a5c39af5a1cbf18b9c210284ec70fe9aa86a4ca8f2d0db6aa9511e3aafab75f5130b1d2c263686666c57ee6b10f67ea8c66615f63f39b31d35a1d9531dfea3333c2affcad5618029d199a11d6fe9955f5cfccbca238429da98dd55582678b1a8fe007f929ca05fca00fdb06b0eecf4764808c9561efe78e1f03b6c697d856d99137c095533054decaef34cb050a82b0c4063c0c2144921b7ed069568a1e4c71851292980209266ef8293f8a3176225b73a5993de68f696fd32d5b661fd72af9fc7faab235994960f4f3bdab817d4ba37ddce67f8a9c0ae6e38e6cc70173ed65990bb39d3f4e23dacb2fb62aa222ca8536b96dcd3cf9ed8d3ee3fa33ed9469cdbde0b2656fdf7ca1d96f1ef7528e9e9e34f9a30de33e6e4cbed0c9b58a1fe3d94a6094b8a03cb35d77c74c49e46e8ca13c9d5a4e6e42529a42a34a53a0fceeee930a8f524a2c2bcab22ccbb2ac2b9291a86434fbb26cba5399ee1e84b63b23f6d16893524e8e9e744edbc66958740d088e93df4929e37c9e5fc4322a5dd7d9d570f722a4f8b109b747191d0a0d1a5e6c9bf4b42aa587d52d72d29375935b16bd99d5cfa6c5c99136f9b507a2c4341aaf168d2c5e98a61dc9b87d6e6adc08e634397ad239c520699d8f1afed9488baefdd05c6fb37e1b65bf7120f73aea625f84e1f3ce3f1a59bcbc9df7b71f8e23418c18892b95ba1af24bb4ba4d97ba7039aaf1b38142b33696d1c6db67d3aafe5985328b5651aeb201ed668d668d5bc362eaea763a7530a7c9d1182ddd0d1ea7138bc98573e97cd4883f514eb3fdeecfd36664baca089d23cf460d6f991d47da6270313a1f35469f75e08f307fec4bdd0d0a845f9fab7bd3a361a3c1b6a9425992e4b72b13923a15628dcd8a1d8adb6675dca67517044f252812445798b8848a28a2c47c217165a758c20f440461450aa83ce186a540a58a12424882080f0f37c89cd0785e4708351115402f239ef03222c8890c033d10b182094f94c0074fb8d00404427811f9c1073ea81abfd3a95540a38c31c628658c31c618638c31c618638c31c61851508848f718a54b778fd163f4183d4677f7188286d2607837144c07a1dde576b7b7b7777d7d7bd7d7b7777d7d7bd7d7fb429dfe84565a6c23254019031a72553e863df6db450cfbed390d8c57a29568a3c18632d41368c6d62017e3c7d353e3376dba356da469236dfa9c9b94dadf1b15317af4d8add33f351ea9f10b75b8da2325e87e182b8f98e827519a5898700503d3ab9d9951c06a1530d33342443152894da5a934163da5b1682a4d45ca5db9929995b8bc7db87d5c409a3551a8ec81340b7b14a380fcfc206eb75a35b65a85e2956b456755f1a90f7e7032a3c6f71991a352a031c7cad8cb3b5626d6b0040d5b3572f41e1a3840065606c83a5b837d44d1dada1aafd17f9b608c07a811cbc1088c318c6b5605eb728d61d8efd3222001931bfee59f538bcdf405fdaa1262c90f905cb1450ea0dc300f0e6cf0c34b07527471c34ff951fc91bb04fcdf1d3b7a333367e12f238aa32e3f72ede811e401ed18dda3f7a7c4450654872832e8e107278ad8410e5a3481a2440f3e4efc4ce917787b4ba1b71783b25f0a273e03aa8af2a38cc0fd5bb395776bb666bfbf7f8a107c7eca8fcac04a6e171ad0f5800f4418b26264892c7e64c842a8881e1d9c98e08930a63831052ca848810820181141103458228c130c61e29777ff4695fda89d4443a0ebed7dba4137f78faefc28fe9d452d56b8b77f93f2a3f8275f1153b9f72b93b2a04d1373c331d5a6d9c9decc1bea2afe157f8bff41f6a9dceeefd31bb614ffdef42f4c7bd355fb4c7f1fdc5dfd906280262e08e2490cbe20a2c7951415c18424503162094faa2401090f151994c089224338210753080114a684c1cc14b573c518b632a2fd1657abd50afbf85986c5e84428d78839b732d8875ced8a75375a6afc95efea068f9652863f649d5f88fd0dbcb3ed93cb96b05e63c866af751113034aef87c45ebe16bbbf591e23079ad590c35ee0307834fa212bf685d9dfc03b557e26e38f4dbf8dfe550b8a9638be1c21a06d1b0df60072a5071069e30fb48ad2a526e74bcf5699ecff17609cf318778154b71839d0517710e8e15ef63821a768d07efb68986fe358f6a61ac6c46c8d7c7f99a5b1e14accc6b840aaf2ebb132fe272e280e4972463f1f87edb5c7e1bba03824e9c741fbed71983ffa4fb904c2bf0790183950f93368bffd0cf353f28b80f6dbe768bf7d7f39f347d9d772e4adab703c06a7f617e2d4c670aaceca33325ff3d63f1ca107aff0704f0f201d0d889a521a73e434e8ff355ce188e239381ac3e2534a5d20551a6b4869865379f4ebac4e5dd07595f7a775af2ac6d25bdae0cac6c6aa25ab7077e677a72246f6c81c656856af6263e6f8bfcac08180760db9ca5b435ab51e6c41a491078c8886bf03d52ba00d8a120304746b48353ed81ab590dc5675e4451e9e1bcdeb1bccc34c50e466bb1a382821d0477ded0144c70e9fd8514ae6dc4babfcf7aba1c1cc6ba982ead4d03bbcab21b35683ae7dd455feb232fee1cbcbd690aa3f0a55472fc1cde326547a7408e52d722f5bd3ef1f80a5a92ff1bdbbb1578c6ad740eaa921a9a7dad8d082f2038183c3c646edcf66659c0baafde8b7edf8b3fe0cfbd5595523da53a7d1be97fea8d3cc1b7f148e3f0e7f1b7f1b57b0d696d8a8a350feef20e8ab12e7beab1f0df6734398f358481534649fee755695e33e200d321007312f31c2f23dfcb9a7ab1a52a117e20fac2edfc3553cba5fcda02e7437bae77456b51b4279db06d07d51f1aafea6df22a9593950af3ee21186eabe8ec05343765111a5b2cb6954701a976fcaf22dadc28735d6b910bff352a4e73e75a3f43bb5f43ba5fadb748f4e4580e55b7e06969fe1f42edfba8ad359d570033bd5f4fe2cdec97b5731bb90e937d3fbcbede2c82399bc54f7dc9b3ef352dde84b1efd8dbb54045a9ee56968f9d655dab37c34acab4a1eb79d0b1d3fb67d46587e34755695e563d776f209faddddb4493be8864273c1cb518b1bdc918b4eed33e6368d3a5d59e2013c982e333333333373d166a369f8e70a4e8e1d3f9238529997c80a3326574a297796878cf8f9999999ff267a5b351433df30b3abff85add86f894ac94a690a50694aedb7a114880251200a14724fc842bce8e404ada59ead5940edb7d91a47ed9314ff4ee5cfc7be94eb695e110a08e8cacd7ab4bb1b2896ae482c369d1ae46a0a4e0e8e1cad192c078e1c1ccf2bca57eff541ec5bc92d903c8047d01442414618daa02988d4d6e134f24be1cc4f49606fe6a76690dfbfc355d2ebe12a1c1d7424c9c15ebe943f3f474630477ef6050197686fe48753a6a212a87f517ce28eb76701b44b982869b05f0a9a3d8ef5e622a5679f971f9fb9a7f4e198b3c3be9052ee8b1f581baca0a73d0ea769e7c6d14595796e36d491c7e13bb41f72bd007ecd6bb98a9f81b0963dd8967134d8397a307ab6a111c3ca69a804650c1e0d1bea342b57f57bc5bcadfdf1db822e3bcfe6d90eda23fece4df6fe409c06fb52b187abfc776e785ce5dbb75ce5ff4192044992933df64192e48c3efb4dcb99af7d41501e24fb828cbe2be1d4be54fcbda1d897923f4ad190bdf639d88fbe2049b42f08e9490f49a420c4cfcecdded8c071954b2550fe741af46f02e56f6cc7db9db0bb5fe88f7dcf58300b4b6dc0c6fcec6d645fe83fbfd4327ba706bba51095df89b1e0aa16747320a007e61d68c725957fe376a0a1f4a9ac01811c9530355e1ac430c6b86f905dd5abfc56c6f8405d6a08d697d8bdf052d94d5170283c59e9b2e5affc5ab66c19e5b25cb971979d99b9857dfe5e564155fbc2dea91dca4f878b6afcf63de49c88d3706055fc1fa024a89c02ee8078111fd220ff96050d776af310281dda5cacd0eeee96dddddded5dc32e5628ff7ab77777fba8318b16aea431e62d3c8081793919e2e1c45527704d136f84409813e5b8d38b9323f58b1fb0a0862b181d14b1830f448451e545041752d0aeee8b882a1d042aebbe889842c3499119b7c913b53ff6ce5712ae1aa3c6baaf2642a821aa6e2cc21676b77b6d9623686c7e9623e86c7077eac65e6ae31ace59bd1a9fab91f805f1c0cdba8a3f4fc1b0cf753f962368f47cc4aab344954838599090cdb1599a40f93d3a17614182f2bbce12d5d87789ed6340b87b363589613fc81fa23692d2889f91478f31762c45484e4a237e383682b785e83878eda43482723f13d344c031462ebec432f7896519101810becd38a7866155507354838507d4dfb7d1866155e8d6118175357c5b881c865529d261a31a743b743b7437dd5d6e07ca42772af4f8d459e56f4f68fc0eab1ee8aafed547195986acfb2f261a5096116bd4213b9625347ef4a92596e175ff44297f3a7a40b9056d763770f03671cb32b098d9f7e3b0f8c3cda246205096b118a64dd9da949c203b394176168382320ff7f400c2379352d4528938f8c76fce2071882fbfbdf19cc4df36deea49510fb6bea0bf3e50c1104a403902145028b9d9e9c1892a52c0841330c187a29bfe9d4e5786b96317dbd22fe82aa185951af21123479ab5b50a1dea36a9fb2202aa5ba94146e2e2237cc44889c696bfc9df2f6cd5ddb0ee85d16f8f3d1b7901626bb6ef656558b0324950928d6efad93b9f566657b5affdfafcf5ee0be936fa4201d4f0c38542659dd611cabf030809dbc230dbcce061c108d2ac70064f47e3f2fc3662c0f9d1acd1d69dbab18dbcd48dd1939ef4f198bf959f44faa6c76db1c1a5f5f4a42f8c0dd2277de1a99e583c1ea42ffd466a616961f9523758def42fb0e8cca82d5f48fa1bb8b2fc7c13f72c1ef7a4753aea019d11438e66959e4b9e8d66919ef4913ea75924ee7080fcf06270f16c5a9533a332b7952fdc29e10c9f213cdc5324eb625b98c58a406d6cac5a534a49b34b08b568e0e4404d596d509421221931d4cbfb547e700a28a8180cc3301a2306c6ca84fb11f3c2dd97bf286686626363d5621e6c4a1542b5a6eeab0a21e1d4bed31c0d41e783f304033a439d56cd3eae62a44b9d2b139eeafc745ad588a6f9a9bb614643507681014a8612200cc0ba54a6f156b5af9a095806bcbfac01fdba4ff751fbbb3fdd636d96517eb5dfdaff7d30075b8aef8ba214c5ab699ffd688710f958488f3d7541b9273d8de9db0f28347d4dbf75baae0abf72fb85a34ff378c4cf36771901ee494f03f7a46f5d4543f7727556a8064f0dd2277070d8d8e0bc1d75d6c4b630dedb9d31e19202467767bbbb3b7f541efb3adc9c9fd1ec131f1e1e9e0fdcccd8bca420aa3ca3b88f142bfe8a1432a8614b8a10ef50e5c7b29711ae545ea2f2531d2a3f4a4a50e52ccbb26e3fdef75f1daeca38a134336990b7161ff61b2d89026ab4c469b46ff6348b6ba8237daabf37b31350df8adadfa9fb852c7b6af6a4495005eb3e015a42dd22578485aa09ad0cff88bd83c05e51fd43d4164a9f0743f2d4acc67b4143940f711ef91b903f3f57bfc0420d5a196ecf88f6da375ad23e5a32eb880afa351c2da92bb8800044111f40f262e2865f2e719a0a0ca9c1144f3021c4097070c32f8bc823a50c49fffe8c5f8a7fe726e30f4787f8d8efdcc8d7d143fb96ab3a8bf2e3cbd7be2020d60283cc19cedf9beca3f14bf9cf947f291ae4679f133fdbb9e1cf064eab473f907e1d3ba4b7ddf1896d61b6e798798403670a6622b4e1346b3481f8f7580750ed45e4aa1a90ae7b9c1c1c38a5526a86d2f3782c6ffa2439f44b5f2a3dcbe7949ee50b92a43f4829a7f4a6d2474b5efa52edde5fcb062c80132aa0c206206082104ddcecf4f8f092d245151e7e50b061dcc8eb7e7adcf3cbd173ccddbd5c7b614ced38be4dcfd73c8c99f6e82307001daec3ba1a5d8c18d63c3872d7bc757bb16ec731ec54fee4fcd163dbb750e1df03c836fadefe47fcf6b8ca5f0a860eb741eebe54fc9d1ab7f047d5e1aa36da60e86ff4dda6626fe5fc8f0469d07b34e89fea8fa97e4c5a21a4c37f873f0e0ecccbc1c1d1c4bf071018e7da34c4f4c209c3c215345ccd342b722dee99d67614b60de468735cc7c851f277e52f9c409d0dae155be948832524cbcc2ca4db3dee47a07d2ccbe8ec6a9c42409be38aa04bba1a4cea8e806a7f8b143a5a5277045447a3381a798f78b43148e14e55c154fb0b2d50e373b7478945ef0500b7e0dfedca441b1cc084faa39f6ba76020551b6ed4f891f819e3c1c6972557dd66d982faf7a596eb4edda948d841131a20e1ca1741f04c608a14273d37089d4ea8a4cd978439e9149104005000b314000020100a06c482a1502c9ca799560f14800c85a2406a4e184ba45996c3306510210418020001002002303233330c009bc4eb6ae9fad5382041d6f6defa7197281ebbeb31903c6b407ff8db8ee315dadcbd1e341c6a99e46c9070ed48453625718299c80b96ec6fd45b4557098156c968c1b6c5fa16ec16508f681445f4ef8ffe2838bcc16733912eeacc3a9d0e15b072296d36650420f6cf609d81b2f30213ae02862f0e86a7d717d49aaf22744f124e73f942800ca2e45eb0d7f9d3e2c4e1850ffbdaf30d9c85ae69d0308306cef750dc2fa8e22cf89962c885683f3648630294d2c4da02b42f6b15d45f4f8bb303be34b724655187f7bb7ebe9c07001f82e511f139c610783c6da58bc6dd56e2c8864e97218847be6c02f11713081a11f610f25863dd16b38293f90148185ef85b3dd10b4f17e2f6cb1d730ef38aab00227e199c5def0322a96971c1b8655e7e97cd84c4871826c9e4a4ccaf48eedac91b0e3eb12295c3ff007649695b626c066b22131f6e4bb525bac3ec17cd53bb0b391be9c6f32328b11422ae7cb61449ddec315e427b36706122ba4727c2cdf3951d19c13341cf685d76df3e46eafd217285becca5468cba9b4032bd7d0e8ae4422523f3428b735d0d9985bf0be5f4c7a0d368fa1ce743528cf460f87982149b0c85e82208db6d4d7c5be84258c18cdcf2da08f8e683a16492003349dd7dd1adfa7504e608129b64ba6917a71108c17130c84bdb13e897b4e00776ed2ff3264ae3a0748cc748620ae163d2ed6eac50342a63bd49b2e2d341afe31f99021df4a6dc94bdea42bf31e06dee040608723b1321f90dd7dd441390c6a0be0ae87b4c7ec569300007d735dd89fae96f3a7250453662bfbfe2edb43250601f204ad12973a00265395ed89628e48a4488b196cb2b44409204f0f3e6160bbde7de4ee3070e6eb5321082eb4468fe6e50122757294654ff3025496241098e67853b9fa935e6e0e01626b75682ed275c2e9402b0e1d6414f561899d1ccac740660615521e86dfd3933eb85762fe037631c9823bec309381f0f00db7a05322e94023ce9b6c3b2f098f1645c085a33a8454e6b092eb3d3ca5db409004ef83d95d02116d484b1f59b14485373e431c0191e1501159314598dc1a4f5ffe965970e6d04810e3102f75a9c2bf7615110ac8ea6f0970a3968903304755fa382b6a53fa156aa319cfcfd65d560c63428feacf146b60546065917bf28ff28265b25e8f9ae235a1bce6dfe5faf80070d72e38167e1888a1afbd4557699a99772bf4f555992d621a123adeb72f3fa657cbef3b6b6c6725cdec35be0fdf8c8482f1807cc2960e8dfff5b690e0c10c9c354963e0d833f3e8ad193d79519f04927fad56269b537d78df9c6447ad0c13a059b132b0b55a4c0f579420cda7b46c3b0f451aaecb53a7b1d4a37a64cd57c6c1b4b41c545be82b7ae337be78b3b5ecd9519727bc0db4d62764fb24b58aa6173fd9deaf5a700e97a5b6b980b01b317ba59ca53e93e1a201be331d22f6684e7fc29e80a3ef8b538d0a5f73a809c2570838cf2993ac381621cb74c06f985d3fd1d64019628bec737340317d20fbdf119b734eef14a9c780a12a771e9e697ebc0c49803cae5d2bebecc5e5729907ed3c79484341d39cf4e441469b0f1f1e0a03e5a1b5944d48657227ddf312352273fd5b8748fe20652f77ebb984a2201c122a2100dc5edf17214c59ceb87395025e2094f4eedf3d033da85ba6c35249e66d66a5fb4052ec37bc6dae8b0469c95ea8a0beb18224609e376014449a70c036d958edc0e474253a50c374f04287d5c66521d7063a604adccc4ec8432c15c4319cd022a16835b1f7180bb711f6351df602046f622566fe3cee1f4b68428d62afe35eaf05911ae75e185feb2bfd724a6bfb3f871c0b6b551925617a0c6b81a993363400f1fd9e07dfeea9948725f9df4a5a24f748577eb661c3a409062a59049acdda90080157a4a4c671a704fdc2120724c5a3383ad90bad97bbd3242646b7a418df5a12612e4ca553988e43a0450b8adbc34767e3dc46b454f72b6643ecd2a208aa34f0141ccb7ee6bc1b6b70db194c176a77c4920dbe2446d7e54b16171d853db9228c9c5b6611dbb59fda8baaac287adca599fac5e27a6ac74030cbcc701c66a5da301594d95a9298d3ca9c67a5cc10056d4533570ba7d7e76f035ec7747a0e811817c83848e5c0eed4adbe3781ad58919ee4e91263c83f5de8655b0af0b322d0a9ed336a5b405a9d500272c08befeb9e9c7e4af1874bbdd52325ea68fb1ef8922a180a57fb40738bb3faf9d0cec26be3063f0bc0707660ed60da9b7db56642fb10e960979eb3df93ae9203be08c9ce2ef5b374a13905c6ed63063eeadb9b426a2ae48aac4efbbf071ba62cf92660e85c6ec58e3555019427f652696d71a836d3cbc203f3a27d6e49adf7f5c2adc3a4abc0ef6474407dd9cca41003006e1604b111078332ec4b480a1e20e29fd44fa360da71c07c388c6114b4df8dfff9e8a370cb78d7ea4bb86f7b98df11b104446c5867f6261548ce1e72bf6c0b6c0e9c675893307e32676c2fc9dcbf424b618881d320f6d6a4acc58f1477c81691399aae74c309fddea210bb90e4b0baff50d6bcf9a027fccde0d050532fb805f69dedd5f13729b3854f173241c8e906e00148da35a4282803f26a4c88f0e5247533c0f541f7ebbf139d74a25501cd1559f02ef3f2e48e64649e53af5b90f66677dc111183d56720b541c00c673f37daad374c79e689e40cfda381f0a5fa85665b86a1a853b42252283e2b89bf98ac88b7a253af27c22efd54443922fa5afcd7b3c49a2bc3d4dc7e1f32624a4899bbaa32489433ab02bdfd502ed4327ebd33409d4bb3aa0073c60ea6bc57438168521ebad3c42887b7bc1d54e845afc07183ebea4e22b231bb675d9cd268150f640b332ce2240ebd263cb9dc9485013a4fe064e2d80e074a2e8d9fd90c11068822ab2950f44fb662ef1ee0ca988880b48132e098df2cb264097bfa8783cd8c2ab739f0f1f5c3d73212365168d96c93641262891517590ac6a231299805ca862423318a8d13f945cb5caffb71d6b2d3ede839c0605cc937ca24e65631905e6ce9c994333288f74467d5487090fb79fb6193dd42f8b4c9054ac37347dd0d9fe6ea06459293989154abcec00fe941513c7fdce6afe0d22a19dc19e34e19b296b6f9e1b316eba74480ce41e4f806af0695b39f78fb3232850f3922685db646eab1070fdaab07594cbafa65a277dc828c6d6b576591bc7aec6bd098f31a8e125526b2484a3a51c11e17b6d2e47dbc971e4d0e05231d7c98845d0ee84842622ce6e6b7a33b884baed00542c9671747368246168c2f0076a018497f0877cdcb4eed1263473cccca88f0d9f93f6ef892ac36c4b660b8525ba0a2aa26349fa677023e0d6b8c249444c87b4d5d0837ea8a6b6adf6050a0c97d3073616e21a1a973387ae87d6047e140b579130a9b533cba1addb8e60171965ab30578a8fefcdd1e84a1f595bff109549f5963061973da617a06e22847928fc656b8508b4c87ac540afc51f3515c8954e56360d615d4808a0e7ff4ec14500b4bc08138c6d7d97113a7bb4fbea317a037bae6f0322b56f83445c92312934243bb3f639a1d0d4d144ed6a46176b5b19252ae6ef740b1bfb8a8a04dde0721928e22054087011a2f26503eb446a5de39c7c8bde428e3139d6c1f41d6c82753d9627e2b9a1ec5eb079f2302a09d82c56ba59d86e2ad398cfdae1dbed99ce9275b71486ce01861eaf95c1ae5710ab57981492c93fe912c466590b3ad1ea96a4eac9404dcc2e41e9ac2f052347155d2396a6ee95f22d6e7b21650cd1c0aaae8d5c649bf81a7bd8f4e313f5d88cea6b833dc16d94982e58160faf3b419bc61270c757260426ce39ce2a7ddbb5fa7880b12dfac1e231498f39aa1704c7e5edac52f23903cb016337b2bba1b4d8fa554ef890f3048814e147ef9326b31a492fdde10835c41425a348a4484d88c172dae9d4e27180e02750be23c47103af5493575d713910c801704300610d863cd4a81dbc68524f2624b6b21aa6beafcab6182f255e61ca8bed3db25b7c849a61b9b10d8c262225ff23483157020d2d3b1fa70b096bf24260c7c625da8205bac4b714dd2b77085c52f42771a02009ece5d601be58c7830be9d0f94ec8f932e66eb85bcf080464c42cd4da6db3f854c2e8cef4dd2793952f4caab52cac3620b2290eb169b98c63d8b5199b882cb2e3318c24c9b16305f8ce4371aea217b1f7b90a272a391ebd71f75ab304ab32515aa743ec3bf9244e54205131561cc0df90f2ada81d39483d2c24e89e937f554bf70b1da555f72f803e8893c7a4950ae1051a91e0d4b8aa57d48f4f28db7282bd45febd57d5c4ae0a5b62aa2ef0bdf756cdd056d517c4d4389c6136989a3d5860090ed38a29f0db6bc068c867f756df3568fbe9190c1ba97a3583042a26f21797ac04f9a063199f8c871ff228a2280b10d2c410c4a81ea2c713d5344f18f13f5e2a8311cfcb2050677d786adfb61e6cb40dd33fea4bcd4fd50b8db8058a9c3029179c447bfcd67a75bdaa694510fe5e04f81a21e4da7bb602682d758e01f86796acc0e06b2f788f93e84734c57528e3d0094bbc28cd2fb8632cab1620499db91d76f191144d11ded5005c170f8d24c0136a3ea07c28fbde1bdbf4dcfd2795e0bbd2a5ee3f1440abb2d586f12d09fff3ce8c6a47075aecf61f7dc58c606ecc366421c189bcfe1a6b9f77af72c28bfa92ed1b454fd7451786c20e81056c914439b1b75ef5b05f5bfd5a36501ffd6d0ba00443200b951178b660b7def3dbfe2361604d3503550e0a3d5c1030d8d614e4a92b5603ccd1bc3d8ac46ddf02a99ff76241fb12458fec373bac80e6550d0acee1b4a348ecd80f214772eead51e686c611bfd19e2ab67191dbedbafd6af88a30c5a7a4bfc27ae41f1ca21ded92c81dd990e089fcacbd665842d1ee76d9bc1eccc8f28245e28800494538be18c10caeeb59015b2d9b947059896f132f3b811eac3d899c169d4f12c07d5d616f13783687051973767f91ee5115ec94840e3cfcc8db08a3b1191d7dfd2eaee63698523e9198c3939afd7ac331b45aa21e3cdf1300ee3e546997c51c1676e93e4a593e5125f081d3502ca9371e00e2006fe87341ac7dab93c87211c0106f211ba1cb6dece8dac3ba476c8a4341c46ce8be10a9d4f0d7516c67b0477823903a8e65127489f6ca6b326734ddcd6bd8d35f39cb7f9b6869a68cf55c4885b8ad5208cc7b79cd91536a3979de1af01108213b966ea7571f4e87a0070a5e18e7e22d8694decd4dbd2e2bbe14b232f19b0c65a916f8dc850927078ed01cdf5ddca9a7654c540395ee5d9c46474e2d10ea2538243598747a315062e67c30bc2c763a98115073a3b57dd96d9a2a8144695241a6d66383306abcb4ce1c011f5afec7bdcedad2f4476839df4947ab006733c41348e3cc41b1196b26a50f7eb086f2c6d93a6496e20e9f3e6ebe7834b24a4a8271d49fb7df0ccaca5c9bd7015c10c81432e8f0128412faa7640d3b190c2499448b3d5de6e3e22621d51c0e39fea30165097c0de3e6aabe428db25ea3455a3c6112ea739bdbaa7a720bf7ea9128905d214490936f3c434ac808967f6ecbf5d00e311fc731de342de3d4039c7d4229ecec8cfe356c519f23dd42126c7a8e1adea99669294bd757a450d8b57b6402426c0b0dad64cfc18edc3f59c4d538c69ade3208f352af46488c46bdab832ea3d328aa50aafb9a6f5e2febd455b00d47ff071fae2bf147675e1eb0557026a4a9e6cc83fa47ccd770121a6ef20d82e5be0e917d444449e34d2eec636d9d8c84e94d3c82bf84a4f0e030a5aa64cf4fa446503d6f6e722d9f174adcd59d6118d74582b988520155745f9ed5bfe03ce8d5e5478a36bdb8c9ab471f1e0a78d0e38a498a48e3a033caa20509e028901105556515573a04e41b33623183cb0c0463fa3acf2bb18cadbdd0e13d8d8fd6c9845abfa310176f980b3a080e3d5a335011555fdfc7adf4ef1c486b49ddb54f04cc09acc0950f3b9371d5f78b8cb6b9c58abd0de0bca2e37c3e89696a8c4b610df65621dfccfe2a23d9793aedf75d9adbe47ddcaf3e2ac4c8441c0bb82358cfe9cc0cf940221e6c43cbb9766cfa50bbc12b1bbce300c4fe92869551df0297de018f37b1f912c637e514a8f3ced12d9778a502f8c4c3fa88f1d923583b6533da8aa9ba949e6215b28ddd35a0de7040ef682b99d62fe3bcff859fdab68cb572a09631478f572103cb0a93e0af69b9c267354a2e6b5d34f61db0bd8269c2ac339f285f037de5e443dbc61d49043f0c25ae840865e95e1adaf098fda6d7d65315baa3d2480b4ee652fd4831e451307a2fb0f2754bd64c0bb6c0920a53ebfbdaea9e3f8cb23e7ab9c88c058d12549cbbf14ce259555487fd31f58cc53cc146ec520078d6563a2c46cc908ad662d16cad6c02fc4517e70744d42ee84427886fd5a7f74adbabed57d9334291d2f390448b9c6a2d2155d06976b4d3f78e253304ed5da5037ba0ce3571aeb4e06e51070cdabbc027888698e79994ce3b545e3a98f5c320ae8d12aa095496fa6b81f55cfd7391a703765863de434a42365810aff29371f7d79e652fae2e4fcf84fd7dff9303442f1da770b2a5d9fa69bbf6430c7e0bd32f0ecc5ec8956f90d370c04c66097125656213203d5b0160d10f8cbfe03ea5cb47131cd782be8da99a9e814ee4b69b6eed321fadca1f4d29afe398dec9dcb61650005e70fa9497f1d38f59a353bb7b01145b92b71a77636f513246a5850d2df4f55e028ac8e066d5b1e7b62e036767169a631ad742dd083cbb88c6079aa93c289fb60efefc57b91f9d5fc8b002b98bb601d9fbb4204998efb052f28f5e59965f43b55268de8606b4cdbf7cca08716db185d71b0edf5914df33435bf44106d1449dd129483f7bfc48270b211bdc7170a9d3a59f8aea56d53c8790354b62c441bac6c3158086922086d4a07cadb790cec40aa9a3be6656ca311cbc7200de1d6c9866869303728a6edb43a6e93786332645bf1d0bf35ec6fadc586bbe999d141b60d69693afa2c3797c023d4d550318a8c190213e9444c407f442bf6125a16a29f8edf3f7de479f54e778e4b97898e5dd70a8feb70d18db9dcdd854b0861a36cfcabcd8788d3430584d5fd1d8045e23db5e9191f30b917959f4f0dcb00d5f6816e7ca31b6cf01b3cd706ade0ce7baa58d5c9d378aa5eb4351ded4196d89820fb944f82e8cc9c40b2738a9b8ea88d6ef7a4d0595485b328062748a7845d03c63142bc8042c3d6639e03482418169d534229ec7a037a77c5843436f4e8c0fa98d1fa6f6b05d69d5c7fa1a9fac8c9c51823039a3046722d9098dfe7175d8e0b5663a8c4a0cd7048b2103e72d4088178622abf84037c6868b7b25ccdce30018394b60a264ddafeb423cb135256ba33f1036193c4c8ef8098cc70094be6e28bd8d35861dfc51d3de0b33c0381d9700fec2cbac1127e6b089d697cc99c9b7cd0f3574ba229bd063a3c49b08cc0d01877968c6eafe0834959a79b6375caad87b874ffaba5cd4d72a31531a8ba59550529eadf33876e57edd7882030567cd895a7adfb85e7c43a6f09d6bd7c3a910615b7913ef5a6216f40222c03ddddb0b50cc57dfc4397b4dac82339e08c44365bfc0d2b8e5db29a0711535ed71666a5bce8dca5933b2d9c9a016310013ed53a98f4ac7e1806dc55c47fc149c23efb13841b1a58639a4f88a3c7af7f332438b3e4fe1353f0d9a4d198422c887712e3346bc9f4d0e8ed8d0d9a0476a27b274f74f6fb4b58b54a47ad3e036e7ca6f74cad837c0ada4929ef32929c845eb2c8e97c90a4ff77e612089fc9954e59bd04732f6d02b7b82440dc5107e6aa554ab3ddb59839c55e9470ddaf56544b91efac3ada3b40363ff7d604f93d7f486d87dd2bfa80eeb582d1952e2e8c28cc7410fd37a60c0ca8a4f5df5b36644cac9528cf65492c2223a0198f5e20d4dfa1047d1c457fcdb450c0bae11b98eb40e94a069e43ba527955f2ee87309a3d6d42d0fc93539883d9bfdf84689e8a5d18cc4fcbc709188569f5a6b59acdcd4a31a88b88ae8cd567157c6bd52d33237594f7718d6afa63c897b9f2069bf8be02295c9fc039941aa3f45112a3ccf82f805a943446a1d8701eaf53c0be8969dd7059ab8a75d7e07d096e5f31bfc0af1dd8536837e73d97e7296e39250cecf0e71aa637dc8be92c95ff84e7840761f811424f0dee16053f71f45aa188e23002637b7656418f5e8b40e5c6ef228fb46eb0b470e37d60fd3cc417e889a69b36d781891affe29fd62734dc5539ad9699e1aac7256a85ed781a3666ed44a774cad05046802b04fc71292ec99c6638e5eec9a03f54972c4d536901a1a5048cd9486adf5c710d6d54ea2c883322a01be819bc15ac78802926f3d74d58b8116ab058d05cb5a43ceaa661c0e55521e74e9cf7b81af53d8c528f4ac7771bb4d38a1966ca1fecdc143b5c71afe25baf82a6ca9bcbda2fa148096ba27e2280ab945330216e688615630401b3612a26013924529f2300615998b95306adcc678fa3485172443f924433d59c2a7fe8c9b4a0696fadf3a040567801d14cbb7f0bff6609feabf3571fb8dfd7638e41f12aaffd352c840f7d50c176265aa05d98d502f3367a3b6d033385bf4f155407e3effd758b425f76a499b94467b059a6d9ab915894b50943d50eddf691370f3a3f59fbd0d6917c828c2c0ed1c7797e9a40861e1492a51ef3e23fcd2299f7b4db9b979db914d53d68fd35e77c58a49d0de2d5c2a03968bc98d8c1eae23b739983676721f90639f945e095d8e5918feb10c897e815d1a49fccb7f6d494925a0d6932a086f2fe6cd2419a14a1a6af358196ff97bfd4bc03db97a33f67db62a245bad289003dd709166ca7622120e7a2699850665404f604058dc0a2a69ce98ea0e57f68dd95d2b65cdbc22a02f30206c6f58ddbfd2e420883d0ee4443710ee5a98042afed1be360c0a8dfb818a6c79abea1dfb65d794c6ea85454b37a010dddf1c3a56610df5f73073847a315417a91a5f0ccbfd955570d553c2aae2b39151fe7d45126b00d2348d12d291923b99374db3c2690ac3384dc170f351746ae3bc2f6379fe1a145491e432e68579e4d6a918081ce9488c3d9d6a5710fe9775f282b196d75c0d6138d955ca5758445345704441ad4213b40ec3b349a6f11d2a099ec6c96c3315a66727d1a753cab1ec3cd873d263e642b73a252209eb92798d7216d40a510d999839f6d08a396ab1b92b2dfd430abfa170db98168c591314ff3b595e5a8f7ede2213494720a4a206e1ab2546d9bd2ddc7a89dbed48110a362337e8d3a10f9f43a16e392549e3fa5437484cb95b608a14f000d682d80f6d0d0441789aab83ec1aea83f6d29cb17de952813736b96cb02998a93f00b0289977492ec3242926a5b634fac448752f0e8307eb48e43aaf2386f29e0152169841653df4e3104ef9295398dff155d5f9be52db74a300be9a6de954fda61e98c7413d21c85926e7f3ed6ca9fdf79d55c926350c0eaf31f66b073bb7248fc2e33aebaadca6665df32efc30ab6d7874d14b97f42694441a94e1710d55469239c35c384b6b6d568f634582ee86e9115d2f3209a82ddc4cccd6c38108b62d0dfff4b0bcb64c5264bbdb13436161380bc29e058d47ca45f00c2db1a868bd6d649ba3a0181e0610f5b5e044d108c8c4c4ac2e1026f6da01fbee82a0435fdcb6d54b1903f661f05b9b9ca389d97d8882384fca7449403b305888293e0ffbc1ef08a31186fb21d919c994150cbcb1aaeea64d1a365d325ca4562b5cef5a03ef88213bcee7b08e2736732f0d697f1cc94c2409503a462cebbdb6ff04e01f685c9dc2d2d067e08751e5903682153f9b2733212513ef4e77874af088ba7c136ef8901d9a8ec60a75433dbb0bd413ca6ec2e949a3605fa1591267bbb589d71d0013b07fce13f4e52f02db0d8487ec358d265c01aaff05099d12226e563ab8fb988f25ccd1b228c879944e478a992d4b5f1b1cdc25b79ce7c045d9771daba857150fc17d3ea941858341be85d3770d306b1b50278ef32f59495fba382a3a5961241a1da300ddf07e399fa0e51bf4480aeb2858c36acbb85de47e03c0c1e3cf526beb04f59ed4b2fd56a6d761490467786f5f6f955ff4163ec0f0684ffde79c1c8acdbcddc5fd19287b673a7d97104a5095effa4a98e19f25c375c1408eca55bd95117bb49f0b4496612d14d9b0f61be1125a47f5d8b1c30118907cf678335a3f875f6c4b9f59c35a5c5340a30593150687ee454f4b3b9e28abe4fd9231fd968eb1eeea903405300a526fa450ea2c3d87721f42f4b43f96fb8c513c95595ac89a299e697ca1f50872855ee312740b9e43c93a102eb8b40b0573dbcfc28a0c3bc0210ed9f0621055cbeacbb822aafa0e6ec4007b01b433b21628a07087c1672d094b604dee2b750910a80876c3e735968860a7ef1838f93673601476bc5b861cd4999467fbdd5453af76dd18ba33081ebb02ceeb78f3584a9db47ea490a2c200918717b381dd88fb45b83303ad569363531dba8259b8b0ae1ac1bedf1e949f292d7f0a5c17286139543ef48010c8c7fe1af9a386240208dc11b41623f9dabfe62e857b97a35262921cd2d1256e055e479a1bd4b6f7d39ab2d963d883a0ccdbb5b40b9e1b557168502e923361879f2edf97a5da1b79c0ad1774c564ae777d351711287034f637c09e55fa0f9697c29817d9e3105a754fdfeef46f34c4674d693545c430ffe901a0cc66e83c4cbcab7815ba51a03676aa6de205bca957d9370f9e04e5c4bef9fa0af7e1e4ab7966385f0b9a829cdd9ebf0e7bebdd7344014a42f30013903d5de0b754c6bba577c35193e10944472c80b2897c07391f3fac8297c4d8e32bd70b5c3f600f65e1a7d627dfae58ddd5d3366f309e2ff5271476813a7a8a18cbd5c7115fd0174f6b01966af6b77700367eb9bbf803d54f3682f17dd0feccb225f931efb2ea59650463491b84b074d6fe77f9f63aae0c7729def310b5f21bd3c9a4bf20351c61803a819bb5f400338bf764939032cbdb906b680407436a3853edf9c4c4e007c3c14513fd84b877b050dbc049927873a631fdc3926e6df0fed073a0f7c7c64990f937db8bbae1362be2e93edd14991519b02bf9a21eb0a811b1e88ea6a14c749fc0b33bc00fef1d7a8b9dbb5e74ad617fc62459f390884defe145602a498978318e7724082895634cd4049478031d225ed66a87ab89da39cd03a13fbcf2c5dc18223d8831aebb6ef72e1998c59235a410e7b0688fde31c9a12e248307c2ccbf0126d0a489cddfa7a1020427065033fa78fd128e309582bf1473d891592f6d4c4b0399c85aedcc8dbf379be4cb08c9017d45aa6d37409183a70e955964db600ec6e27be8ef8fb9035b38774dbd70bf99480f89464fa5d4f50a89a308d6e2463529f4605a4f770a57429d82f20d6eb499fb5581928041c2d65155baaa19d55916a183e00caef4e1cbdc7adbe515ac6485600c83e83b851f41a6d0e3f64ac670bc7aa3decfe191bc9fdbabfe42087017e2f218236c3653aa2560ad58ee5863657e49a6827330f5ce7ce9471d30619a52113e3b5a5237ec1a350a498e94a3df30e9437b2fac4ef13838d45ef705949a0a93c44a553246b5549fa06da14656a161e0a24eb7546613b335c48aacb664c659a5912d723fdcd2e545a0564da13a78beb4c1b38aa907a8d5ff522d8b54907203e12ce7b6847ca68677d49d0e70b3a28ae343a7e36e7c06ac7ab0f5ee8698e5a04d932cb8a67bc686709a2ddf83269c89cb992d93b0f4bbd7570f5d9aaaeeb23c68bb7b1778d485a14e5ab4ffff8d1ef8f1b13f2ca4a538f1c928cac5f2341b51150fd86a53ff7984ff53a0c4a229d479f1b0529b1687df781cc03c7f10821de24c9544b5e634e2cea9df27d55437e2524feeb306abe970d08b5362e714440ad4b400406b0c44e86a0c607aa7686fc24cc976b09530bd64519bd555c8f0f888e29e87d06b1015df6a174274bf2fdc4f242a1ca9d90f0eb82c4ee1662794506e2a339731a7c34caa98959f8a728e584f1acca6079c3db3da32676d01b7c0b733996e6ba30120d5644c13b23879006f71c2965c7eb986c1053b50535c627ccc85c2cb6ab52e1398747a66cc6789ec012d5c81be535139d3e9a451d750ac1cbc11ab26c442d084f3644c0f00b4cb3d59aa77163e5d0b601cf85d608195783ef198b8f3e000ea8d401d10c6a08cfbb77ffc8bccee3a5aac262eff03d362dd620440b92f2abbdfef0159cd0b6718b1c54a594be7b8f24b846b302aa5faad00d105d13d717fd17f12371c9a57f5e0b76bb19887133295eafa92154bf02f90fedc8385787b5871f8f43fede0dc3142a763aa66e829d427714813d50d4081b356c8cc6d48d81a1844821eb78c3b1299fc0eb1c6b711c8fe006cf1dba4b025a34cd175ec9d282cdedfb46d0c55cfcc6ac1b6dae9ccd999221e8fda70fa363dd93475bb40041f025bc917d41515317af8fff2cb58108a85e4fb0874274c2018d59344ffacd04b9ffe147612f8e138b036c6ba3d4c749fbb6d5418dabbc5b62ffc4abd27b77802b7c8d7f362f6810b9b88e3445d0bd939f2a91c5831a77a251bae4bd64c0bfc904bac366808c33656067cfecc2dc721c2d5eb3f913a7aebd42cd7e13bb46f200ceacb49d5b2d679e9b65a498f68be09dd1e8528c8d4be727823770af8bc8fafa2fb313e794712a4c3cabc198e797fb07a11bbc236a76ecdbb8d1678f00faea00ee5516c36f5bf0d5763350cfa6cb345af9c0913e7f2f78e31c8711d644fdbde49118cb08c83c150e5e29fa37271a095945dfb70bcc55d877e723e03492a77fcdefb9e830da46b7a40f1b83891098aa528bd219161b3048acc0dce294abdea87187c102f4f395c6d044a0e4218d684595bcc250b0c369d37246934c719947a779000f0a5c4ca8492508ac1d46dea47e25c668742b728e6046a6aa3c517f74a86d105b9d9c327e4729d608a6cda3b04d5cae49245ae02c2aa056cfeb65d06dd9525a28ad2748b314f3680a820570efb1182977c9f81eff1aaf2449100390f841cc969c01155dea03e278f8e5116c79d4adfa39ddb39b6417f11e295c25187017c47061516a3160543427e2b14a5869c5076d9782aae4ac89ec5fda880a18cdd0f24e7d8553b6e5a9b5609023747b6cf099629f0decbedc1a494f1c4105f9a4c0630657df3c2d3acc1fd3a5b4e6250a09f24a6f315e7d8836fd5709bb70218be7b8b2d93a66d393ae13d557f864aff7f389a81e1bbd7b3ea15c40243b2ce783a00bdde5a068b8ceb113c3afaf7a06e7944daa93881a09049b6c1a1c4a404f8300a34a98ec9fa884c4c98971992720385fcfe94070498371cbf3e4a555a6d944f3b3e03f725d392dce64ec3d9ff5f7fe28791262d2a46b153fdac3bd5240caaf45052a3c4e35ae9d14349501d3a390a126b805a21b55c0f71a96d7625f14492b7ec922f01dd2472914e85f9e8aeaa979ecd674fcb6307d0f606a64efbff3423059a0581986a1cf2524096c109b88a5bd3bc61f906feb368f64d2f7130e2511ec42634c61329344d89d29c83960b7fa8add6d68e90c28c151b3617a3646538ea1e0063bce063a9035c2467ae1ed6c2f4a8eef98c7da941556ae2b4805d299ca62e6a736966a423112060cdad95dfa8c81a06f3fdc04114a7d940d560f514c39cc4fc13a24bc5596026fc3e9193516221c6b3e96e054633ef24031d7b5dec57dae603f3c9b2f61fe21b4ffd4623b15a542abfb98bf1170cca8208fa4293ec31f884ab6b3dcfa214001ef6c46161c43deb85066475939259631b2e0f20cf522e97c03709ce2bdd8eacb170bec68601f212ee0fa5f726a9541de9e5e98c255a0860a487c7ba1380e76ca08952e54e976d8d9fdd29fa5936c863c2f4199d3481d7ba24af39cf4d2aad693452391e02e840ceb3108681e55308e0ad03085329c4db9f05ed8660f63aa2fe9190cef8e55fae083b53cf1b057b36cc172808c7c6ecf5068bd4bf2fa958e01e9e3102c1d274fb2e9e09fa0541e695ba3dac773df5c8bb54d5ce24de01c72e4234433a980600d48353ba37b990dd5bd02dfb9246b30efa4194bcf050a6ec84d538073536cc89d17d2d550e5629b3e457f45c7e450ccb81683e84bc5fe8f62371c014f2d0311780be223fc1791c8ae94b02337e52d9514d6952a31e41ee3e39e01f3d970678928932ae013f8bd2589110cb803ff3b646af6c6d6dfd841b7fdaaaa534703be106a4f0a30dbcf238b06ec6f476ee630097c670770f20f26ac4caa187c230fcc60c54575ef37557adb9a774d42002fa9ef76066d1552422c70614ea02d2aa510d2276d8977d1166519bc8e3ab1971ca1a7799ca64f88fab903c28332f152645237bd0da97c1a168f358854130a08176ad5c4fab4d2647ba33c492eb99227bd34b069f998dea0c95d288f59912ef6bc35f81f613e6f95a84f4008ae633b16f966545d9eb84bcfd88a644cd42884f3cfbb022ce58a492d318fffb4a60a8469cce8ff8918ee8975e05540dacf95716b2f4a83506f2a3240350dcc12b107dc1461a94995978a5b1db9defa8a269ce6868a4e73b058ced40ae4b2e094166287b6d9ab7fbdedc8a5b78ee1bbd4266227d707e4dd714ea7f886f2edd846d090337028530ea325d5a02fc4bb78b245b3af7fda24eafbd9fed9844a2a56243939a79b2de873d27e186b4ef37ea667d0fee10a10dfed3287552f0328d612569a52e79bb909902303111613bb76e5e512ae18822bf5e6c0a865a46a861b2ccabee8fddd40595acac2224192084a6dce56a39c26886da69cceced26568e658c42a415b714b3ff0d486d10105af6b0499c7af47983b13d7c838d8eda45b7a3e8b5050ec0188a089cafa258c69aa69731f5d039b3d9e8e27acb24088061122edd915c9858030c28846d8c15c35b1c3cd6fd9c05aca26e05ce1f00c94d431cdad78b5dffef228a1b47e80e24ec2e83aedcd6e32075b81b24385dcc5b6038a0a2c62664581b57f2524e7d9c3a0fe2e225313d1196bafe0ae4be5dd938dcc40e8c50873b3f9ebe51657decffe05ba63b51d8f4b44348e8f466fc50a31d2b0d9f0f9b92741191d3bc77ab4cb5309eab8c26bce16c8e89647ebe47fe6ceabc9728a1ff399915627288451c861c0c805fe085176e3bef4522ca1e8f5860236fe25211f11eeecc13bbbe6a8961956b62a7b2f70b077747180b6bf7785ce475b0bde777ce7c108438aaef2f002d6e06b77628a85a62c7bd5ce8e4c84126e1663cd74585453dfbd3854dca7c872e5afccb6bb985373ebf356bb125ece57fce8d960c3717aa43cafa5d818b4e16c7238997a2400a43ce0320ad165939f40480f83e5af8a0d8520a0923306e14834bf5867ed2e020fb5e2d46af67c2358775207099b08a1c49bc9c909dee34ae73b6f84c396a7c67d42ca2ed9aa3de2ad4e78c2d92811f01b6dc65054f35b127f30700e1eb041dcbfe2ca56fa21b9f5bb3b28486c38d4ed50c19218e3801f5dd8b82cfaed537e267ac5ec94068fa51c8346fc8730b6c58c8fb58a24a290e1917fd8d161068793f7dceb125d2502cc8639121cb8cac8d7db50950f3c68b9f2c429ef5e75ba1676d8e9e5db371e1edfc6d829cc60ba0f77c0a35ac24df30e202c11ed77190e0d82e4659cf9e960c4bece6004937ab716df1775f49f739858030ae6b9d719e120a533c9b134a067360fe342e739099a592d6b78726ab87c0962330c2aeeece8ea8e766ae29a85b49dcc1e36143c43a9709ac19598bc2c3c8e6374649a41bc2d6d868e81d34955fe6d9d2bef53c221685cfda37ad520390610a5d7847c8ef37463b97bed4cd0022a2db5aeaa7efa753f69c36740aa8ddaef5c1736875cfb980591843c5b7c77480afd8e079416448263fdc4b36f352048cb53c33051425a57313e42f30ef714ac49d7d0837dba07fed79e61ca935b4dd29bf65eba7e5fc14eeb861cb0dd4c929c953824e4ef5143fba8a8aae5761ea274bbe59b3e0d1c83980c20d5f24f2a4f83b2181351d94f724f85ac21739519dff9bd8e2bb72f5a0a90b5ba55cd20ec6c4a6c9c5969b898938ad285ee48dbae8e757292fc432366ff25cf7cc593c19cc8b75e1be78f2db4660d3a7eb5f79c69b96678430a1a197fdfec5c73d8dc41621647fa652bd120baebfd1d7174a44dce2c86854e43cc0f84b5176b601d1eb7b887c96a252ecd52d55571bfccce8325ed0388c0dd632ff217d8e64915336513683031380c2b14fa4ed583d18759604cd90d8e0b61a22b23027b6eec641f5b8e7b99851f5a1711e6132b9657df464ad44500e7eea3f2ab0cb6a37c54d540b9b5c616d7c707220675f859f59b61c6e7f2f94965e6cd34cdc4834217cd2b387c685f65c0165b02e28d8ea625a53f88311d6df445e1f1ef366bb5f43700dc5875c89bc268b77b179e2812b6bc254d9dc0150d8d537ed9cc85fa3d709eaf0dac1b48ea5206ddfbc55a8a33d9cab8e4276c127601a120f8ee5530a680411e52ecc82113c5e3d4ac5e2d995c2a6a5a23b135f56d8957ffea88e590c8ce8231ba5629305702ea27ab3a7260fde4433148471db4a83c5233c5af319171360a4aa58f92e418136f0c828aff411b05fe9b09dd1377c4b836b43112aef049b187073b47bacb14d4b8505608a656ee2db8af1055679b706de41775c044b46d81086487c89863bce6f79a305813cf6278a112a0e6b2841e33cff7ce2a582f245ad430fdfb11609e01dab8f4bf56f2c540ab1739c6451aad248ebf59edf6d636b715867515fcd4c6d7aa34409e90f9ccc1d4e1445019cc4580ac29eba510f12a3b9c54b1672ce6c7041adb799eebf4a21148b5f91d1128b86de525d8767ae9f17484e18e5ae64db071be3e454d68a1605bcc8de7c890af8e71826329616389592af9446b59a59c19ceec7f741f9b6c4e605c096854c44d1ded735593849a1d71f18efbeef1b85dab44c05b766101018fa5457b1109e7152b6360184e3b62388bf9a8f01ca0d8f60a8c8ec50902dd1be8bdc6e48d630688c84cf050548205bc0759ad744a9b4bd021fd79ae436e9ba5e89c89e5a746fe55f422527b3d9395c444e119c3df183aa8a0a38d75f934ba12ccbcfc37bbec1b167c96223988e2472f5bd1604a45132059b62054eacf69a396690988f750383758a398ad854bf7dc02c83de0c25c347e6bd012c022f2419e2b85153a30a416ff853f605840b6e32c71f77f00fc5363ccce70f9afd24f02e94896386ed058ab64fc8a331e3e743578e25420160098285715d9410dbc9a046ea2b7dfcf150bc909b9129aaa1de32a009a39472a56944c5376921ad42fbbf40a47094d11f2e927fef95a4ee4176b59d14fa05a018cfb1867564e344f2e42cb8b84654229fb6b9161d9c5a58d0c05267ef610915539cebefd86d62c1e07bc3dacf4d4db89867e0231f55749ab2671005578aa2a5d8c3c68fea331e2c6f220d6b9b2e8c1a12c1a7908c46e7292f8235f205c485cd00b87717f0b2d0d2a0c712a4432b446e77849f6406a0872dd7437fa604f3dde3502ed88a3d6d58fc69c95ce4fd54c139dca3b35160164ec7610083af49446dc5610a980828c7c9ff29642fc95798a1e729ebe01de3d533f41c05642a14d799b1e8054674e57a44875824b5a2c5ab7b4d05e9eedba26e39bcd8254c5948f88a4fd79322df9a3f39260739504f92177e9b3f5118789167cb5e38d4a795eb163e7a3599f33be2b3e809b37adbff7600f244056ee9e7e1efa012f8d32189fd1870a0dbbb92df93b93e4cab120f5bd451fe7f1089963924afceba19ec9022bd544622027010995b8b0220be7780a7f8c33ede3fa3391338655ff0d7b84c69c5240ff3ee8ee6be2385d76942571f3de01e3d206b2fb572b6a5256042a3d8f59557677c064e6b4434e9ac4ff0c6dcd2986fa1d307ea4a0c80e05b06c3a612b741b34dee5c794c982f40e6454eed8832b1742623eedbbe4d7d621010a2ac1571b5ccf6c95535e9435f48fab6126e1041188fd3ec6ddbc468800311655a6e45c61373358ba9a846395456864e67f0e1e97ae16eb737da157738e8a5b2d7c5f47f52eaf15b3996a7e31375f8b50ddc47030af40dbe0367c40509c9c3ba17cd4b614d2ad56bdc1db818e997b9fbf699145ce26dbb6eee2859ffa1cc15791ca8ca34c4ed846b5eecd7ee1d0eb03c40aa50cdbd8e076907b5cbb347906243c3df9eec4404d46c7f0a7d7e47983f39d3982e52a124f1441df1c2ec76f8fb7d8ff0132a64aae5185daf91881ab803b3cf3679a606d982d33b30b771f37ed71a7e270bf9b60e7c385dc43cb37ea40bb772230b05436bf8581a333b891e4d7fd2ae9208ae20960beb16728f923523fe0ab7f6ac2b3bfe1d022e610594eb5051eec40cf9c2495298018998933e8641f1e9d9187f8d3c3edb43cbdc28e4eba5030585dd29be1cb14910795deb9306449d78a3b34de60854d2594cf72f98a74c0a892e54020bb5aa1cbc140be98b66b8d073bf2225145ccacd84c4b90b9658ed016a609b931216c787f79644336dc00de33bc184be91b4a9bb3fa8c4df9c80b2bd533f65b73d0cc4b818972284c1c01ff96bc3d500406ea90868a58590157a61a9c67f0f2a0733b0a0716d65e8f283d82108b9587be22c5b9212debda1383647fe2e857ac634f2563240f3bbee3004e02a32b31df77a9d00cfb5b821f58778ae15c7a49e4dbf16f39804d9d0087b158919c9238d3779b917964b64cb5c1ff0c7988847aae77cf034b98bf19a69149ccd4adbf080085f150454049f0182f9a5cb203ed887b7a53e4b137e28893f023d6cf70775171f65d35ebe63d50086434540f61f76f88248b30320b249c915a8810cf8fcb6bbf0fd0df7f051b7ee86d0422084093515a638a2688a683a4134c720cb3422bd8ade235b18de9f8bd3817fc2ee2f1379f05c04488b6c8ebb657cb52ccf8d8cfbc0c5b208612fac15a87f7e3f3420d16cefd9b2a119d2096a8a558a07d0963d0c10cb66299184abe50c48aa0664a3c56b624a03d3ace38ad0fc3d8e7ae431e98cc43999314aad654767ec07d124ab45df9de2d8dff2d61d5b516f9d5b89f398293aa7055c88949151053939911d584c08a8826fc93b2970d9ffd96aaf7dd8d72505b4ed84050d2126031626c28e35a06ba212eab85cb392c00aff233576969777444fab2530f4c60b40ed0b403044069053ce392a565978be970bb97eb0739416abd4587bd57a82cdf9d3f3a61ebf5ab08ec22f1667e28f63840a8cb2d63d16201b37c29a2f104f3ebdb77c9a1c657f38d88cc6f1ed89603507f683143baa12a88da4a8d018f8625b376087cced9797d303e1b64c66d90d6d542bb1941b966e731afb2f8ebeca970720f6cad7ff86eff8950301a14de5ce0f4ea0a97ea16edc5b96457f26dfc8739bb8226fa50ab8863dbab8cee39b62ec20039da7658ae4216647e26827b57607a3b815a5e01525af3c8c4e48637e89eff50dba258180d8ef69952d34c31fad185b3c79a50a441f99bc08c243c9d7799c06b2bf7d400caa9a9c472e21b5e2332815c38a565c8833869c0047dba15116cd4c7adaf40f97e6019e81bc3d4642a7d34c4bb8223b639adf1460dfb12b0f2b76e57389eb24f70ce25a01499f72e9faa577f4fe90eff01982524a456838b41511da30020448a23196955c08a955eab7021b497b74002d7c54bfb0f494bfc5a1a2c068bb163954ce7a62237de750d9d0519306147b048d8ea36d4094f29a7c49b18f47be11f359b3bd5f08d093901f3b723fb6ebcd585bf74fba77a777c414f1c6070a74aad17681a194dfdf12c8349812f46a5ffda64d4c02a276c100739d7824ea852845e9ace6e607655d57d71f1f2427f216051fcf42329f1f070619b6a361208da321b01f6681eacf1931fc7c81911eece9656e26f83f044ca443bfc8bd0f1c69a50bb64929defbaca6d03769f0fde917ddfe895f8b89efaf0f98f5fa201c7a82503c0cd60473ec86c57ce9a98534b9959f618afad309cd9b833e6964348e7771498d07a5e1217e187cb2932ca050c2a24b6051fad0652e4c81678f2273ada1108ce1cdaec77541e02eaa02ecfa713e052bb9d728dadf7ef06d03e6fed7e237615949934de14e142957a7fdfe2cb82f50830c545abb3dbd06f672cecbb51cfb57944fcbe6bd3e07f51ef34e9d77c2d7f48cf59272323892064ae0c8b28051ca802c72844c5e21ae8c14c0576c06e94368b7557e14f868539fbfc879f84da5f1bfb0be3cd144ed5070978413fe8a2c5d39c57084e62ab06e315a579679a9c004ebc3f885eff386a5d3d2bec4873d889eeb04a9de84080e5d7b0e56e1151ab595f97bec3452f5b050e0a19559241f1018278b21880d1829a636001c29ea0c97910a4c4e5c5da7798740dd924f79e69ac321c6fcd4a1d2d1655be4f39544ffc716f10af2a40e684bfd9a7fb36be97d2fdc91e56e6bcd1cc301dee5e78193e53fdfd69679021c81eab9c0ea4b3e2cd8e5b75bde5352dfc45f87f223922584ac419a9cc7327db3ea1b6c18797d29b8f8caa9ecc7ff7da52e8cb0f7bf13087d5874151ec27b4c2e15416f38448778b6f559a880401040bdde1483fb94a4eb5944a4eb44afc212a370d31c5de77e9f308cf6aa1071e135cb3e602a72fb40d70b821e32167a7a29c2f58bc856c0c48315feecab84f557c1f8b05ea0c212f7b7b1514c635f35854a51f8e1ff08b79ca4b5bf1d2c60f9e63d796a08ef40ba2059ff99ae355401f57967569a36082d6d972edff72a6225f50090545712b4a8abbc6c8ff04b69165aab5ab6900ea2be772549a68432f15e8e614a14efeb9eac3db8d88bb77f2e2bbc34863dc02015dd3b38e870c7472de9e25112c43cbda059dee8b1dea19a6e4d27b03d256c3aeaceb3a7c4334addb99e12730de516942a1eeb29e09cc75da60626f9763b4516b0ed7b302fd37e1f298bf0b6c5cb237512d524611c04716afb6c949e04a67b0b60ad1cf0e2b11f2d58af02c5c08e50f0084a10b03dadd2e31fe67cfb54227a1a10aa6f983351caeeef9327e0dcb19984369be984437cf5bf321071ebcf1bb638c8c581d3ec07cc837eb920f735116d0bd06af2ff037e5b8581895b73f7c8c28a8a18f2181e7b99c8e5bb3a38ee86022d4810a3a321a9208435e8fb116e5d7d48e03ace47e1e101db156edd2a33e7126bfa1288970effd47a8120249522c35290ba2cdc2afe006faa3ea0cbe5563db6ba263199371068e0ee826be69dda635808f4b636ebd500ee6e3682c754f3800890660c2d53ab46d91c9e4430e24d2fd7264cf59edb5a71eb15b8f55a683aa5244336852a9dee789fd58b741222916c315d618103b8552c7aeb2251c5c655e826812e7df62f3009642941cb4bf20d7a82a6f2e5cbd30b13e020520635646cd4f31870ce7f2c160a56feb051ff58e5d432f9942737a547514bcab4049692c802e17d5c374a7f1d6f83f489b467ec78361f2de6a4a8b4160a9982b88a2f5572f4bd7183adfa36e532b5f54849acf3ea61c3a19c6f9bde90288824e13086ee6f2f7ee821e533656428e0a626840c48d4fc0d05165207ae5828df56d0451e9de58b7576679cf53201c50777fd9e3b24a7d397fd9e6df815b976d8db5374ce2d440de21dfb977b2191021c78948e5d6243b6ae4ad2239738c34aadb657301cc909e8fde0851d10c63f08c26bfe9a2b48c022f0c1a3e965d9f8396455087f820444958ff5e2aff25e15d97aab6bdeafeaed524c3a05aab010c516b6262469439bc275dbfcaa07d5161c2a9e068c1463904ff9e4dd27424a2ee74a954fffa809cb6baa9d69f0ad8a10b80c7268e174aa59702ac2d902eb7cca97c2ec79a3e12c901b5221cd2319974b73d116b364707db25fc60d51b042b481e060f36395e423e8259fa8e8146439f96f69667e5d82cf60cfd9abd219f601fdf6883078fee1e4f2316f743fd27ffaf689df74d84be2239428eff69feb8e561a513d0c3d2b431ea79fefef7f659702c07ad7a76c8846a4df62b092ad64154b0416dd80068d8bac7d226a07e39e30ccbf482e1e7ac97faa3a082dfa8e3e24172316eaf9e68c8b4b52abf95610eb467b7b76420066ffd6a16e4cd5f8bc559423dff3a5bd8e3b68cc8459bbb3f27739b4a636de1233472edc88044a4b2e9ac690e0f2d4d8121ce2fffbf9809f6a6099c870ede89eb235920ddec87460a96933447fc5089c24a8bbc211b2bfd3531023c50df69805a824483c7601a359049223644e58d0ea1b34e40f34560fc75d6ba54e5be6c2a7daeaa77d0e465aad885a898f74a195d2d2d92e2bb267f8989589ae8439d1285935ecc33a494389589d4a543e7bd3c7d0712368529c6bf787527d313397e362079fc6dfa8025d96b08113c429fc3b40186aaef7f01897319659a65c8452d54f4d0e0a45afa5ff9745f529c82e6e50446f6ab82bf1c6df56e5833158be199e59460a6f8c28707a0e3cf998a5262e437efef81ba29307992c83fe75e1e49e68cc1ccf346c2c807dfe77d7894fbf421009b8393a17ced4471c07b22dd0bc35b1a8c70b36196e9d11bec4ea6e397caed0cf36f5c5abbe1dadefb5fa24519f327a8fa3be207abfbbf952d03326f452523a52f8c2fc813d2d5f526f55cc1ce7f5209456fc282d9b24fc7fda073f4b34df8e940729f18607209ffce3cb3131b35b78f2e90fdcbf329959914f46bf64a0b70ddeaec1e2e21e11c3ed07160721b23e90250512c1edd2bc7b1184bdcfe09063712490e2485dc7980c718e0c85f1734c0a3550d6231bd96fb5ece1491084eb0cc3c0c57718c663ab9483077efe8e0900e4fe95c6331f9d645b1473ad00f078291d412db6589888f02ec1f37a0f00de524eb3d87f006c420825afb69eb58467292f3cd979a33e8069ecc14c14c087086c7ee2db71c9cacfc84311bce8998378496610fbffd8d1c5abf96e3c71d7241550b38cf5568152c4a3649f261f466a538a819155f4929f73f653deec671df2be3677af0d5ab8438c3d0fb243efbee020a35cf78a95b60eee1fb4a46c86fd3723ad7a530e3009745b00ce03baddef8da21022b66e13784145dd59e8a632c98a6be9d7902c85cbf8fe159bc89401c996cc470077a17204363099db2be82121eaf298ac6c7d7e453666e64aad2f75bf4c53a3d9cc8fcae58cfd7b2c3fa1552d76bb7ff160f8633f03306769889d87c1fe286dae59fb8d36a4cacd5a1a9b6fda2b50da2b891d0b7a4c183c9817c8b9f93002a332f4fe7b603ec32cac473870a3d10260ce16e5ba0820117c588ce2d9243f2d1333ee014aad327a632555fb907d694bc334901eab044b24a6647925e91e22987d2609080d750a82c8589ba3be382ecc89cb4b0611063a7582ad215509aa1ae109efbda5a8785de82d35bf3134fb052c004b2bb8af385e8bc33879d2ef2eb5c4d647228ef8c3066cac367aeab196d8a569b68522547adadc7d82774369710d30934e86461fc62cab2034bba101e316e41964d516c50f6780e46e676cacda29d86eda0bcff61e094ede5f8387871187ad01121763f6db2d07128633d2e8d21fa73e2b912b9de101fe530492055a2e96dab26da9169b632276e0f35573c229a31211a150876e49c3c8f63ebc41cb9e2b3243410328679a9c43804b6c9d4946e6745d522d328ad1647017109addea9df26ec464e604ef43d1e850b76c62cbbbb8b8b63772544714fb062b1d62d46c5c10c37b1922732544ead3842c8b9010b7884df090a07875b0a2dee1c53628e427dc079ddc5a624d00ffeda1d92148865f6165d5aca77828383f1ba5ab69af7e84da0d82cc4c46454460bc886048dd14e3d27da207725653efe8e5de9adc005d637678f0efac9817bc8c14c643db8e94d3d4bce3fb4d0ad0536eb2bce6507999023419d21f1a1de5efe0ea924dd4f290852cc2ea4e07b87fcc3eea05e9c5e6ba17047ff709d0443633993e1298e3d687d1f50bd0d8409fd5c97172cfac39be2e91f65a7cb82482c890750c66bb80844d7e33c4bbaf2127789c3bf379ae72fc0c11e8ab51814880e653fd95d0389551e1dd4f2feb03625f573bd60f85226c4040423c07c5b0d6495189834a8fb5c2fb7a9a9b0ebc4d401463ff008e9f2701dc8b90e2baae47405cb822e3da2388c2b3f344560d59bec019fcf132231e92698cede535952d9ad58ad2ca1062a03a21d282a425e9975d7c270246d84dc1d29400eb8bc87cf236f003e10be7c1ef2a576ad3afd6b14fe707c4507ac67a520a48cf54f418322958d179823ee85f9f7f298a2da201432f9b41b9361a5bd8f7b5511f81e102e936bbd4e450b312915460f199b61dc59cad81aa62d0dd9683a022b596978f3ddf7b9061c23211accd9900b29331131386e457add7133bac1a2da28350619ab9952e18e00be3594f15bd245fbc6e67594d24a850d5f08885bc27cdd4522a4ec493b69958a039698cdcb636669dc611ba74ffe9c263d8ec0e0eb11d0a79e62efe35c229e9c58364006bef05cc08d73a7b1c1343ee83f539be7e96298b66cc55b9d023dd5ebde75a41a83b4267a006d60178f0296cbc92c8018584030c0424b889486d46185f8225c1bbe28e500d8b23c0c2554023b34b7ba194d2f04abd5fa08a232a53026e3d631819f6d848ba60b33e67bdd728665aa79881319c94f6467a5e1fe15ec6508f9115b22fd398c18ebd9a0177ecfb0d5b878b98c12f933f6c0a29dee829c4b9ec43c30b30f82f92f4df5870ecd1b63deb39be0748d9b61b1acb332b856aa084873a7b4c7bfd13bc57fa7adf671160e6c497f6ff94a1eec856b778fe5abbad9505889255fb8e3a0bc9a986698fff8d8c2352e6d9ec0ce7a7809cbede01b36d660ec8f38b1f97a2a6b4ad5c543e864f0b3bd5b80617d324ddbe039b2f708ba9f9a9c3fa00b5d9c4f000d6c54e1cc72b70b655d4fe03ce9ebd54c44f27287a49dbf5c2a40230b44e2711208e016b279406215b3bbdb754c7478cec29067d530b3d9045b5c9bb0bb53a293acb2d4274bbc6dfeb0ac18763ab3b88a7d3c0e914989607caec23d99424d599ec972cac798eeaf496527cd54db1a7302c5642b8f894437a56eccc5cc56b29703029513821d3a320aee931594a2807da81655a1cb3c2a65a0aa889848331a66004994467d30c5ac47b317415306549a3c568f2d1627747a587ad82720e0e1c0fe55aeba7a42b2288a8396c2abdb61ca0b786e976a1121b475201dc7b4e8d98dd9aa439f52926798d5e54c76b98d30a90903c837c86d8d0365b36db6de318b0315a534dd0898b46c3f92f7068174f19fb97b29d2d450a44ea4fe5169b63f2ec9f2289124db19c9168b62cc6be5873584746ffac462c5b2c12d6f7a28ed44b7b9b926a69c3b1845e3a4f42b822d8e1a4bb8459249bdba969758502a26065ae76c790ccb94e26b5b678cdf11e045bd6a2695657ac8dda7475698aa56b4b131dd9fa9fb6d6ec62a4f73394d69a38ac76e08750a9d0c69c8a12b261b2ce1118b4399340492153124c8998827d1e5227139988c238519e7d7d026de5734de5b7ac43d37bae5626eb2e9900259c082b1bebc9676b5c1092286e1180e808fcefc08e253a9e1e6d55319e74be668799643a148441ed0247ac20d9bce9809e566d161ed5c7bd560d15756bfa685ee61439821009e67200cd8e3f5e32fa0d4c41174322699d457ed136db4ae9a4300a4066cd29977e7f88b9994d5e07dcbec856dccb91ef6d46170e2d3cc332e21069c30e3c4f5b93c1f2e9a5bf0166ae897e5624280b1ec4bc43ca90e71ff46580d0340ef3a8f6b8815b251bf4ce29f14bcd1c286e997ef91ccb295d7093c5c41869955b165700625ebd9249af73535188397f7c2be00af5bcac7bdc30665849706c5e1a00263c18fd1143a374b3892501a10acc1db21a7ea9deee49e566694fcaca936303d939aa3ddf32f98383677e739773953f4073ff6bc44e9a90123d04d1eb25a88a96db76e599ebdfa9948da16f98242e66b42dcb8d982dad65467b2dc9cd1c632875a7212e99ee85c818c5347b5bd568f4894dd16e6f65e2ea2bc6f8c4edbac4f5294d034757736f5e23b65c85c449b2e58fafdb07ee647d200ba12933fd38fed879562ed06fb419459c0122c63d7863c45b17cc1d4ca886a52673fb203641a463652bd39e75f1c962a8ea915f0a8f49e46c8713e616db33426425d6bd3fe5b9b9c2b3925bfb4a980fe40d6d687b2efc1903ca8213cf00081e2261de0abc2082ace48a09c27c1e7791b883794fde60fedd87a86d3a2d59469d6f96cd396eebc62511caab8cfa9248f2f518559824e53a84f1f3bfc9e42b5e3f2f688403040a32d3a75e308e3a6e0e1501a201bf742f0a171438600928c81ed46ced491af75be02a36dab2c1b7e80934fa6a709e318fa321ada5e23c280014401510866110d9d5c6970ba04612580556f24270f6413fd9f8c79d2f7e6fd18bd9eeee95bda59449caf309bf0aa10ad6d22896dc9fb34ae58e813a0603db4b992be059f7ea83114c9b0a60d392045cefbdeefe1f8cc06d18bb9623ac9c04bcefc5d8becf07f52d8bdb239080f7eab7b79dacd9dfee0eb2a8b556fbbafb937b5c5a90e340b024ddc0beb5d6e62d74fdeed2d8f1efc8b3834d7378666d7165d4191f3495c0c6d75eeefee6beb6e8e963cb0efc455fc482d68bb94f3c85dde79c52b15c380fb6dc972f4b860dda95362a964a54a9685235acd6ed40115b8fcb5f289667d6b53b46a768666446d48812b53e99f44dd77d77b1f5b8fce5a0bbf27341d79c3a419f68f513fcc41bb93cab075ca96d9873f7816f1e1f92d872b56b83c33e687a3b8e8a5bb75c973f503499c41bf874efbd1c0ec1aef3ee2dc103c1eeef87ddc5a04bfcff442d7a97ebf207862f173d09fcfe3ed0cb2c95aa3bdd2b73b92e7f6068e38b41d71d7ade5fd0fb0ef4fe76a0c30fe6cf3b73493b2430cdf7fdf1816f197bbbda4c880a516257dab89c0d246ab46bb20174eb96ebf20776600a4f27f1868c8f82dd06b546072f1136bef495692e815e1f980b5de23f680a3b701eee6d2c076763c77bbaf37a811ff781bfc1cedbd903c150fccaf0f3582a55d661684573df81f3702619b5867dfade89349136b208747dd0c3f49533f7f4953f77203fe8d1ea262fe7b807e06a168333e18c78837bdab36bd6c6b5a14587222aec00bca18b4db2ded14048b12bb82b8da05dcf0e785c2693c96648995223ba24bb62825d23f3d0a46b655ffc19078105082cb0ea5e1ed2d2d3f5fb948164dbd7d68a946d8130615b20b06c6b74c54d775dbbca51b9b4884ad1ae6f8f8020601e74ccf6a7e20a07dd5c89234479e2df803fa63180d4758eb29d1f531107ddfa4190827ffe156f9c1e0cad5c4192432d88bb020ea77d84d227b4c9ce78c9fe00e5e2f70a150c9a059a818460be4b16075d251be37e96b1913009bdf3e311d01a74674c82ab527d5d5849ba9ff688cf3d15e2b07c7f1c964da03af94f9c1af70374460671bdfffde502cb77894ef4c0b4bd1cabd05d59faf0159880852d66576a4ba3a84033a969821d33c664e20f82611882a115719f7f64a6529f2a7d702083c9958ff3cafe696d3b3f2e4f7bb42b10263780600b0ca482c9c47b1f1314abe9834ef912c4ccf4f1c3cb623291f91f3608164c261e073298a76a3f2ec246ce63a2b0fc24b857ecfc17ccce97cbce8f93680cc5e21fcf4274111ad8880974fcf306a17f5e22f4cab0f3eb2099feec55bdd3eedb70ef8a3eafecf4a3b13cf34ca95566156fe8a016b642fd698dc62134fefc2821da43a3ecfc38c8794c9f1f17b94bd0d8957977c815e3503c260236e25a76c6578a76c64ef49fd8069c243f75fcb3336995a84eb65c282c7fb64b4376ce3254d90037b9d21a595836ed9926f47991f2cf6cd1a735aa3bbfb5927fa634d2482cb1737e19b297dd5f2b86c0fd45b2b0ec4a48384c59a17d8b7e5e2406807fdef799ffdc490ce0c8ff01587ed8025dff96f9fdc85ff9cf9d6d2a73121147585e1a096e100c41f2dbf9fee02b747e3d449f347616e167c8116afe1268cff7f945c89f4de59975589e9aba52beed9c91a84e7e57b2b12b7358fe9cb5966599f2029557e6affce30390f3d09dc1ff3e83df4c0f9a868d5d240acbafd2f93d1ef495fdec2c7efe2ba4d6f0cff94d2f92f7c75ff94fe599b788c3b4c5f2caa84efef048cb76fe8b94194093b6f7b9e431b64c784a6badd8de9415ba7e497a0f2ea0ee5c3af7e1e72a0978dfab04acd88aee1eccb9b433266c0b5dadd6e8ca8a5467fc407b6c5999006f3823fb3e2e63a06ece739af36355a8e9b618f8b12da5b5c608f8e9a6af2ebcb1423fa13c78c68389d0d77d4b739e24f6eff7f7ed90756289684ffefbe6fd7ab375490be70965ce23fed45db789a44926bd1ea399210cf9c8be4bf6b52c50d87d7c23b433aa73bfd3a2afa5d662530254e73e475a274276c8da40da249616448442c133e7b14fe8ebfebd7f2d11d5b9af89b85043d13b54e77e57d62cecbee92f92ee4ca5cb2cec3ec6c1064da1fd6d116b6dc795766683c620f4696776e6b1bb0aefd3ee5ba1fb7676df06e121d311faa1a618638c29c5b65e4a5f45df4280f35b4e00933dbc47ad958685550af8ab62fa6f27d0a37a2982bf6ad2ae3f17709eb3d69ffaa7a6499596a70629d0a39c80bf44224d43199b3eaa0a4d3b2d63119a7ea845afbefeabbe5611a1390052d7e951347d30aca26b5feb0eeebdf76a47aeb485d51765a8bfbc5c7940a97c315a8590bbcf4fcd55089f07b8ff9e9a2488fe15b5fd51db9f07c61bf0cdc33ea5f2c508b52d49a944a1c576f202a84dff235721841ef83e7c6a6672150267525104f0bb72b5a3f3bee34a11beefb972954b1ff9b9b0f4a1992c9aebc8fce9f0486a66a1dd56df8fea7bcd8d1c09eca9f4b58cc381a35997519d190ed5f768d32747ab462045aa4ab4870bad8159a0249e511dffda85c630110af3dfd9094000707056ab8da229d027ae79ad0044dbffc3401ccdd6688fc9c670c7d12c100d2c3110479b51429f16cba55da1d0df86a1f666c1d01af7fdad8dc63090b558680f7e77e2896cff20dbcb535f1368162a258d447379e46168459faeb4fdc1ae086fbb929b20c7e15aad614b0faa337ea03db5f418a88ebfdf6e4c0c64bb7ed53b8824776461ce216d7f0c6463972b0185f9bb0a08a886ac83e661fb735290b66327b6bfe56c1646a33afe97e48ed019fe1a05da7a10d1d1be474436f67afd5b7ba431919b43fb549dd4562fe69270b8e468fef257d22b4c83d69b527961caf6af2a7ff01d689faf7d7a900759987fd617d76ae94416e62f13469fa014dbffe4681c6dcb4c01deb41120a5a1b195edfa3b1bf8bdf75e6bafe372c73eb53a6c8c8688a3224ec812450d635ce8908218783012021e888455f4e95e36edf1d50ef0c372e5639edec704cbd50ef0c5177d4c1fb3fe8974230babb446f30f5ac6188496b157fee4cabee97dcc1de087a50ff1c1b7248704b562c4aeef378fdd8881d08d180cf912380ee99785d517c9d40af4f9fe21494d90a4e6f5d35ed99fb2c5099b8a384edbb5f017b562c4f69bbf7ca97af9a2dfbdecda44882c5984545102c315667d116cac0411c0e0440c436a784233ebdbc8517f1442efd8988d5a0f30470efffefbfce3cd10da1fc701ca1c9ef7ee587b99a454c731497b8c34764d2bfb8040eaca61d63e3cafebbaae2cc15fb5cafc3503922205e85cea3e8891cb202088cdca0b479b8a373c17d9f669838a8c6c128d85a645538cecd306cd828aec4ab3493c464d27dbce8068335bc4796a151b767d6bc426d9f52d90c7e84d15da0aaa53dfa9a033ea5331b2ab8c4a911f1c3a798ed8f338aeebb2882384f63eeb2ce2a0f4e53d78bda75427bf77f384cee5e9ef257cff955566bf528fa1161dfe4884b65d27e3a4232b5097368f1f4058f4e0b45d0cd5a91f16a14fbab46b7daf599a8fa8f5cf7a0db0a65856230b734c9e5ae5461f921b9024f88bfe6d8ad20eaab2a22948bbbe8f5a7f767d1b04764b7b840cd4ed95237cefc1077ea407158717f5c3a2ab14767fc4a2c3fb3a39ee3bfc1dc6a53e1990df43e065c916710625e208c41170ffd41f1467d01cc7711c157190aecd71b70605c4116899528c97adbdba35759902b5864b65124bdf6048eacf36f672d51a07c8aeaacb1e54c7be0ee015f9ee94e8fbd47940eaa5876b771f82a077f77a7738b82140bf5fad43e85310ed21c0beaf83f674fb5e1ca6ad83eadc0f9128807e60cb95f8749fde67af40d05fbfd2513ba1ed8b3f8323c4c996f5c51ce46ae6eb9e79912401efd54c798004f8eb4ae03e05eeebb82fc27d5daf8a45031885d6914fd5db9347566067f3a05fbfb3f4a42b9744ed2c073298d607bd82c20c34983f6e121cccec1cd4cf5388142181f9c36221c4ec8250e28528e68f7ba489d995d439f031410f732e7308dd7b791542eede2bb3cef90677cb991e342e599dca76a40f1a2508154fcc1f77e6ce81adb7d61eb47d1b6ecb7007a47de653469290ed1ffa0e8602a464de2aaa932d4c635bc4902e210043c3c5d704559072d7e5285f627061cc17dc851eb9da910b00821e64662ef30c13fadeb05fc91b9c07f5a4c0e6f0dfc7640fd5aeeffd0f073a22c66462dfc7042be991f82fb823ff6a47ce1eb9dae183dab0f9fe0f8ab455bbfe0c131adbafe42d7ba8b6fd4ad27dc9bcb32deb3be72212154511b553eb387e5f513f8ee338a2503fd6afa2c6f151a81f513fce3c6ae6513334e33863c7d3288ee3881a51a811358ee3388ee3ccf8a8efc40f5028d4a350236a44fdf728f14ffda57e44fdcccca3503f33f3333324be911ba87ba64c80bfae8803ff7dbac7711cbf711cbf11358ae3f8e0378ee3387e156f8ce36b8d4291a1bfc6d25f4693347f4999a7e218a26650a03843a3479349447d28d4cfd070292e7f6732d19457e6a550258ff1513f539ee3cf8c8f1a51653ead490cc1cfcb1d57d2b18e323411c484989db4e9a69b7b6cb7f8cb03d2f7f173d596b7b5b15aa4da36539d6e572f04facca70aacdbbeffc565dde2af6a3547f2e05ed53d8fefb9b72eda93df7e0eedf170e61e73b7f4ea1cae149bc89f2be3c680408ad0b75c473b8ebcdf719ce52c0e13fddcfb5f4c7bf27b683b06e0bf6fe566dc594ce22cd155c95fb452778c4d4b40a14db7d2db0a45acd6ae529de16f9f9637b2dfab546b54aae3b5ca766badb5350a73293476c320b6ef2c9a7b4de2d0fbc5dd52859fd670217506c64d10edeeef2b595d9ef9549eba4888fdb03cdd6e2930c6182b5198fd8c77bad01a66db07cb5aa33af6bf2c98babf3e7284ea91b56c935efb7edd02c269dfb22af9abd6eef963d399470290bace8e62a46d9f89a2ad7f1c5f8fafad6ce105e442ee28a4a3fd935513d3417240292dfc656db696d9baead71e1f6f1119a04b9c5462259c1a340f9c1ab47e7d85f80bc85f27708b4d56f4006ffd238f2eedcc0d9a939578c95f5601fac7efc40fc61f7fd4091081d67f5e195ea23d23997f8ce9a030fb5ab5f3cfdca0695e7f55c0f8a9e7c40f523f7e4d7daa74f9cbe2db58b7983d8e5d103d8a2fe8f337dd55d425f6e22fabad26b913a8ce0fd57141efec542dd35af62018fa4591a76fd4632ff8e63cf64792521459f354d46fc3b1920d57967afb998b4e2ab249f03dfec9fd703f608aac91d9bf331ba3660896e76b94658bf758ea183ff527f7c3fd5c0ea943b230fb614d79912c4d79e6fc458f250f7dea4f3d2886a2fd2d377479f6a862767eb02a6dfdfa8790ad7fccb6ce18f8b1c7d7e4696d1bfcf16d38488e37c692f5396c64b63ebdadf5571aa3a6fe2aded09589a6454c68d974ebaf2203f48f0f6ad283ba29d5493d58433d7e8a34e94f912399fd752acf709f3cd04f559abc4143f25ef223f196b376e479cf2bdbe3e57eb6fd1cb6bb8d47d41e1429ac429566823e43d9cccee8e724b492a1bf2c09ce53df522d2a2d7b5c80f6e8784aca70fbf97507b4a2da15232d36ff9c5881508354aa8ae4155b618b50122abd29e811eeb64fa33cb3c7b42739520bb546ada4a8b2d65aeb8180df1f07f6b1e97bf65a204f4f92c0be6eed0c200e102a947eb52de51882a82efa5481aa1ebaab5819a70c51a52255f9bed8c05a6b07b586b5d67daf1d8bb4b5b46708907a68a5beded9d7e8082d8bed613d41ad03199640308416552c4d6187c022ccbefb1281050e400061031320b6f054b083952a0b96ba1d6a67479e0823668531b7232ed82bbc24004a0e5e62f08213a4a86105ee5caa6ae8051d9e2c1989220aeabe840410290a664a0c9200f1825a0c22a8351bf18357d3e758bbe4f06106244c92203f59a4a828b2444634840943dc8a2a743849204815b49f1f213a9cc0004b98b4602483d2134f5c531dff13d01edf388af7e1c18715b4f87005962512502a6ec061c2b0e0852f4ad0ba3861de7befc560f25e72773007b638e10829921003c513d6c52041033d9275e9f204120c487cc028a457b646ea2b099a088e70f192c5051b068917f4e6c08519887260c1881b9e30f283edba585081881c44f0440a6a484fbc804acd882c3d30b1474c81440a343051881c31468a2527e424552a9621424014660610dc9c304f958321c0181f202b78024a0f5d8c88c860de7f555108266e582108a01d98b8edbbf3164327d8b08c60052f68810e6d6d689949299215ba4e6d3090b9f8876c249b12850e45c484b1428a2d208d121153b0c004a0245898d98b74f54a85ab1084cc7d7dff65351117081c80c8aa34e961a9866bfd0b15bc8758b1b4c4ac36e58a0ce6bdf75eaff53a016a0c473e7c8e04687729f52570af6adf9d7d6ffefb34ae126fdfd7f75ff7de7b47ffcafb7ddf579e5eeeeeb554a606edf77a25bdf6da0f686d5fffa2aa99ccb90ccbabdae7ed386bafbfac85e27ce51dee2ba7f1edf4c618637cad8d5bcb54c8b6dbaa90c21427921862cb17211ac5110a5c9a3841c31623b000e2266816ebf52a6a036186285a6c103ae1862d28f562c40fa706dc5e2801111c8c1003c401ac14edd800ad0c5bfa06632e81b643ffb3030d3ff4e082161051f32e46fc10f10408a225aa2c617962011d8a8840ca0f2fb8228942a1658a9a304e7200aaf2821e80b84942051efce0c406179cac20040b9729333e26d8e22643410a6c10c1103d769885d1410829583c51d26244a44684b1220b971f8ea87842ffddb93e38fc70c416472c21a10188c360090e035a403086871110f98901c5c40ed17fae5514b1ed1f207bb6bb1ef63caf3c73e95c79e65b9af64767d9133c0f25c4d82082136cc912843e4104119f2633294c866809c2450bb5b13014a3cff06e55a8bfe83eb530b8620cada8892c0721e6a9b7756217653932f208bd400c182f2dfc5831ed0589d0a7cae5630dfa746d8f5dd379a8d786b86d9d4d8b84c8626321dae70f6d7f978c222c491bcb9697bf0ca7e25633a9495f3b208703a8799f7b77811412a4e005cc120b13c0cda4e6fd338be02f1d392c2c49ff3e9f8a494112102b40412c283161416a4ab42064c99518c0b0a8a2055388c43001c5bcf969a105297468f2c38f69fbd9b4088b987d7e91105bf693b4c7c50650937b6c423599d8072f4929aceea8b2923acc7497bffcfd557382fe4dabdc5064d777bf3168d1329b160911847581072242d460a710822644d0952ff5a48d62504104523a190519120259322d11015710a158e10b320b9508e2099981470065214a1f16a02e04441e14221c10a2acc405bc025257c58516ae0a465c951f166c10a612868520352a494386d8a86899a930cb5a55c38355c283917dee1cf120a4ba40e74d8b78f8c1418f9b16ed70abd9b408ca10e81cc771dcbdb7837befbd9606be1cb7c1e538eebcf7def17a918b736b4b6b039b1639a1c3e6362d7282c9f70328dea0e9d30ea43666df042d59713041cd042b0a412612140099a015daa16682778b2013e4bc800132412eb4a4dbe0c2cd04b3132248443a102199a0c7e466825f68c97a82243713046b0d20b085fe81264296d44008949b099e422757389896ac4d2821726482a717884c50267472d5846949fa83123bd44c5026b46435c10932139c092d5995241999950625904c700c2d596b560899602ab464650285cc046b503084109909aa5cc84c70e595aeae5cd9416682363a644144cd66b5c262aeb0c84c90e595b2ac6c11e2e556443341174e926461b4c2e22c20260b88ccb4544766822fbcd217292b7e4c4b56295194082333c155c5828605529220aae322b4e46a873fc864f541d2ae655d51aa736216767d99799fc60a57aad4cc1fb40a972d376c64d75be299932b2ca6256b0e5f8ab099d588156826f822b4644d12859109de8496c45144a999e07b6d051f1022eb0a4d5821da7162dab20c9d5c2d312da9b1c042c9fc51b7b4406652e7e00cb7357f502a4b36a11f2c20a62da973405d30704a12c6b76e5ec0800103c68ec9c774d2c7f4a93fdc41166eeca77b14deec4a26f7afb53d5420e08d1f9725f8ebbe75772a40ea3c3506de50f3b07e833fe0a3f066f85ff7c5a51786ce93ef83e20719ecec1b38d71d862e82b0b36fc6f9f36e0dcde03e48d2d00cee7fe4983ffb8bfb5c86fee2ca300a18ebfecc55ac6577a5dc7b4b2ac34f7e14decc25138cdf5ab1e37009affc45eb2a454511a16b9982aee3971750316e7264348c1439bab05119cdd4d03ccdb72f71def5f4411c8b31aeb1c1397291acc721570f7638250e8e8a354353238a5263831323c6a364348c940b1bd548e6b43ec6e3903f2c9c2f71721e851d937c9c2bc480c962a6862687c45962b1565b8eb61c09c1207f704a18a3cd622d6168999c9b183847a40b1bd5584363b3586d2cdbd191cd661bc7116944599cdbe1d0460bca6653cdd0dc0e87e088b2363696cd863ab9185330b44cce4d0c7bd4ba49da2b24d78f24ea2debc8e6081bdb4926356a1cd2858daa05b6666a688e8eb07947a7a3a3a3289a7584b2acd588b223cada48f287893dbd8b19aff75244ac2da8a323d50c4d8743d0d3ac1ad651ebc876843ab988719323a361a446bbbaed96928dddd86c472e489b67b16c9946759463dce4c868182914e9c266b3612dbd90d9d8cd11d2d18db57261a31ac972955fd8fe35344f9a2c994191ac9fa929c9676551b16e34ac150ece8fe4e38036eff5bf5abd3fe9c246d5025b353436cfc62663638b62631b6d6cdac666630bda33a8239c6a733343de6c18323937bfd29f8393139224355dab7f12e8cdd58331582cd6d1d1d16ab572e1c285281691c56c0383008424494d5046c8fa927cf14f955230a18e31576fc3b5928dbdcddeb6837fb6b4d8fead9b8dad8e8e8e8e566108829fa741ee380d384c92d47cd6b76e5eb0582bd1c7c61f000482d5dd3de836b76b99a9ce0656b6efe9c475f872f986b44dbf1b47249ddd85582c251bb4e98314487b68fde8cc5974e7865ae07f02d2a7f2a465666aadd6565bed6b3b4a46a3502814cac6549f959a01a4ae3387b6fd412b64dbb408914d1fb320037d3906427972108df68c4f1f1bd9d8ebe93f85f1f4b113e79979fa78c879649e3e16b2b1184f1f27711e9aa78f836cec67f5f4f18cf6b878fa1888f6d83c7d7c84d6a88f4b90b1c832ed8a1a18222ee75d6253a18d44161acb3425288cfe8d4263f9c8c2fc7317fa72faf709e5c94afeb2a99ed63cbd9d31f60f0a6fba3ee787c92987d6107fea0c7ffae2e9bf8bf6e8a70f82d52dc698abf85a8b5f90379f43be78b0cbe5f77d320435113a62040624a31a2dca13d9cf0929a850b3141118ba098bb9d4337fe599d7eb47320788eae418c909ca99e508f197164bb71c19131c742b2173826cff1c207486bf3e87fcb97914b299f32e124865e694301e851d13e773ae1003268bed423070725e646ba9336f9e89119696f1064b8bbf9c65a3346e4d278fdda2f94b8c41fee43c0ad9fcf941e1cdd6a3b063ba3e462be934e3f53fd6abd4bab5c816157400fe2eb26505cdc03f06d902433958f2d7ccc23c2783d93e59b6936dc6ebb358dab1b28c84d89cc7da188de398a2a149a552a9711c6f291c52422da556171677bb5692cd151ba36ccae2e7711c6f291c58e38d1b6f77bc8db7f136de5a49ada4ed401aac116f9844318b386c8c584622908dd1a300491cdafe224d14b2b320d696edcfb2b18e4ed0352f6a4de89175972413f149c85b8665b3c16263749aa1698d2d310e6bddfc75833e45a02531372530ae30db3f1ca2b16c36584c2c1bc8b2792cdb89659b296958b614183ac35f245b62fcd51a2b0af49922128144211ebbf99ab0a686d29e1d957883fbd1a6d60e87fc61b27a14b269423766cc1893c90824e8edfda9a5d4ea425ffe22d068c578b330a52e335e1fa6888e585ac80de43d962c9bbffc4d3ca2a9bee995bcb4b8a048d75010d56962859011189066ec530412813a1148040202daf7a6b524fbf913e88c4f61fb83aad2459be993657341b66c54c7c6e8689f2fd45a6a85a13afe27b2058616341302246b6941b6c4accad68dea38a9e4c5eb198aa6b4c33f6d94b6bfcd910d928dfddb2087f9672140fa6d441d269cc68c1933c6c4791b11c7dd2ec213a9e4c66d8c4620a1c6c6b6cf1ffa009de1ff225f886661415fe46734e4ffbc8ceab4965a624813b6bf8d51add10213c645d9ba7d0a54467eb4c33f7758371b236dec6dcc0239cc7f7614b4fd95aedc18d9942e3217c93420362c46b5274d6856cf50b39f0dea998bd0c5895472f328d245447584a88edfb89ed0a1ed5a425d476892ad8465092324685988ac0c09fd3e5bb7d69285f9e7bc205ff6402f84eabc0a74c60fd9fea788428d173db3b19bf7d74136f6827643498e929c67859694f914a904e84d9c7f4102bd59be8bcc456a8d51a9ce08729e9490bfb20c942755837fa6d9988d915582c6c421f4c8c644200b53729ef1e6afdc85f28c61ce194f43cb343dbb6d7ff1a7d66829d519a2f8b3fd4b3205c5617e2a534443f4d9bad50200bdf9a2964a5ebc3f0ee9527225912e24d2352ad51aae25e88c540d5bb6f3b890a02f7f6f62fb87a392ab8674d918d998eb08850d0972b14061615c42c69bf3b880d05779ceb0f28ab2fdbdf2fc27aa26db9fa63cb56bc9f64f953646b37de62d43b66e644b0cd5f16f29d51a2d2a5a56501d7fb1a574b351a58b46cef4996add5444542787d4451ce60fa6ea0948dbdca0c89b1d836cdd2ccc7f866cc1205f6661fe4f3e9085f9287a3063cb94ada5205a17717f3d4ba28dbcc07917086347cc258c1087a4e68b13a9e4c59724d09b2f1e7cbd78c162b156ab7025ea207fb99eb94075e1648439e4cdbbc8d6e390d4046564b40562d9b466d95836964d8b0dfe992adafe29221b7bf1fea99af3984ca22886e1cc5fba488a88eaf89346f4d9bacdb6ffcb9ce74c116dbf89692d394f7eff9616ce73f6b043fe2922da4335f8bcac41c769f0ad9b17ac950b1b950658032c5e3be395b24cdfe790d47491d4c421a9592ab97992b4441656ff495b53d22a81debcf9903cadd1ae4636589eac5d6fc8cf232bd509c717a4b6b09cd067e51160c1962595e54f6d166f5c8c39aeeb72f66cd89fd0078261286aaa239aa8a594b6e907511d5358c913fd53255532d66a7f51d5156fcc88ee752482b2e9a768682a0d6a1c533435a99a9a9a1135535323a36b6a6a4e3526b1a626043f2f77351c8e61aabfb3ab8f0df4b58d65ce2ec9aea473259c2b71db44467f9fb596033fe32010f27f7fab075ea9bd205962c5e53aee16190579d7714bb4e41c5a6b6fa77372dce725504e5de6eccd4a3a251cb54d58f7239af03a244890d48b2fd749a19de5ecbee56905e430676fbe45b809efc87a411202ecb3afbd996b026710f0777fd6cd592f48bce05af7815e066aedab4475a800957c9e001d3682d8792979e11a761b85572f48a81724a617747d930bbaea705d48ffb543e3bb7bef167a6783393415311131b56062c134d3f54d434c2b9854300931053185c004c404a4eb9b52a831a160536b55623ac1f4a3eb9b4c3081c0f401936c4c0cb6d042cc42d7c7e27505006aad4896aca8820a3161c4293408453003d8b176001a743ddc90bac1b5c18d50a5f5eb3f04527c8962d6e5f73e9a8d8100988194c1124348517c3653335513fc54266af644bc09601fc9b75ba3e59b78ab420000f642d9ac17e344dbeee57ba2e5dbad79b75bbbb5ed8fb21541d21efd8c2c0cc6a62336c233daced067646339a8d167b4fddbf26d719ef34be24b821a61a3a59cb556a9c09d8389d187743fe0b21c7a441d9240ad25e0b8f51e7fe5a67f396ff497ce1d4ba5726df02fe3e55e3eb2fb7b447b38da839f5224a847772cecf5f2c0505cabde0d579f8ec446fe720e5f1217e15a07344e1a353bc3df18f65a31a97298dbaf7e5da4b7a454876ab1b35b3bdb1876bd85c9f00d5e262bffda5080d475cedcb67ff63e99eddecc11f156733943136ff46677e4cde670397343f282b5936dcc5e179b3ea6e1daea828a2635ee987d5bb25495c532d26707ac5d637b0fadd5a0893aac827dc2509b624c56b3e3ae79af1dda2746daee18a904baeada6c86e221aae33ff44501675f1470665190d13d95c3426a60217586e3201b5ebbfa25f9927c421ec333ee3923380817c1426a0dcc0226825798850169cea69390e5be25b7f62de9244668f8852d030cb4062e5267049d846c0c07e193d0761c74827282e23ce78987130f5696047d4b5de91905e12498868de022b5068601cb805fc04177094a562f11eda95705fbac222ee2f9e041a9335c04f3e434d9b68b378eebb89f7d7a573c237f15f9cbdf83526b78513c2954c7fff47cd85e4d89ae7f7a3594cc0ed909377d7a6d47668e621ae81db2ee359c66e07681b3028d53d8a7b7bfd937f36ab3d3cce3b97964a952d8b15df609db1588c66a912254e757d9d26730d9ae8df670d74994997b4731cf66bb419f5e11104286f6e949f1a4983ee0fe942b4d32efc8d3e2d93cafc8798c3ce669f16c9ecd6453e2e26ab344d96f7beeed77e4cb55fee8fa779a4701bddec0f772d6861c89398c2be642f16431d135659065d3bfb62a5bc28736587a484b509defa9f374f466531f19325b58eeaa26555554a2f11089a1e01a898b486c646133aae8fa27a6e11b021dc7e0f5554d6a4c65d3f62b08e3b6a5cb5fd8e9a2eb8b50e8aa7365e000ec4a7b6a056bad55e4a2eb8b4ababe08035d5f7c42d7179dd0351493747dea129b60e2148a4be8fa2292ae4f95d0f5c517e8faa20bc650dc925ad184621235363b2bd1164603a80ac516d8d48848ac42f148d7ef195f84e211babe68442b1459a0eb8b5ac8502ca20c45227042318b2b146dbabe880546481f8c118a43bcf2ded9323458280a018050bc1280500c42462802a1138a5604108a463342b1ca4e2852c920cc606786007464040000b0570c18392e9c92dce9968aa270b26d362d8ac256db9ccb563a42aa2257f7c57befeafe0b7c1fe27b9ce8f3342cecb5b9f7fee3fe2b7d78e5a932fd49039bd43c912bfc22581887cb111c404d1da58f1c16c67de8637ef83e9c58ae76880fbe58ae74e85fedc82fbe09964c2aa0a47b25e05373854b1d3fde873ac2d24735bdffde877b1775740fda48a1b9a7bb4eb1a9941bd2ae44ce735aa10de43ca71db243dc5b27dc5799f350294f7e368731c6bafcd11fbe0db742ce438bbc08b1b9d6e6be9ab2f0b34ff8320f8aa44cbfd6df9536a8fb6a763bc0920ad926c1eefb322513fc61f8b9b4b410aa99bf9ab9726f876c6c553fb4443606becc87a0f5cb941e60b2237c2df31ed00f824fcd4a52e0025c9d715f83b8af32ee2b10f721a9c92a5699bfb8efbdd357998e9f53b9aaa6b0721f7ead4416c63de863822019924243ab0a7ee51e2c2b908571ef830babccc2b85b6aaa735f86eadcffca4ccbce823ed5c11dc01148c8bbbe7f7d1b3a6cccfb579994680f8d8dbfcc2b7460b9b2e5cadaf7f1bd2d77803e44b030fffa2bfaa6157dd3fb983e30057fc7f7e0d3075f16f695187c0bc341340eba4750519dfa3df8960b4b5a7ee46a4799bf925a180d4cdfc2e867b22b772c8cfec91d2701a90b0c2df5f7ea7f5fcd8ff4c82a662a34dd2b1d3ffef56576ddde7f6f6fe8f8f1ca157e1f67dee50ecf86857536fc23b10f6a615f03bef71ee3525b58f795d48235fcb285753f13446baa83df61f86dd27d7ffaee6f4b1ff67df8fb0cd56cd8a766fd1cf7f187e0fed8f17bc0ff962bfa542331a26d71450c4a70c4ec08d347468309b8e4e0a4872949a6cf094360f0a4ca9091103fccb8c1861ba81081030b82ccfa9674b2ba37e15caed0c77ce91104ff29cfe9b3f10df06e27bf07bf2693c99298dd3fe5f9de7bcff36e78aedd7d00962beff3d3fd81ddc7bd47eac816c66131ba87bfb8e7c02ab4ff499336f7d4c55901b9275720d0efdeb775211ec6efed6ccc9115a85e203ffe127c581b033f67ad7776a812fd6e04b05bd2e2ab3fd4c2287e9d55fa553b18632b3a809a3b16861fac46ca5a6467e35a64e3a72ecc39c601638ede5b1f735e8ed674459fe1b6648faf66cb3c3acfb82fbd34768faf66cbb741b8ba0d8f559a85598f51fbe72b664bf04ab3b1bac561f6f3773696cb1d0eb3df9536926805e8b2add9a80e1913f4496fdb5ec0c64687d9fcd6ddfff44a19dbbfd25857dab030fbee24cbdda6b14dec419fb4768e544a10186cfb393c76eda336951244cba626ae432e636ba0b6cffb3dbe9a12a0373bf7c25c1ab374068dd952c7197b0aabffda5566d32a26402fa173ae550cb637588cbff3382f09241d8ec0b67fc993d676acd39dadc50fac2d331295ca350811a0c12a21e9a03195d1b843633b218d690bf3121ce6244ca1e950a96c96cd90730f30b45f3fff59ab65802d593ceae7d1091df61837d6dba9edaaba7cfd15e6e7914bea75dcce96a9419f77741eff543967fa793276e5aeb5df63dc5846ce2173f9c092162d8ec06064081d02e9cb8f911f252c3210c9c18e816d5ad4a505db44822368d00869119d8b4d8bbce8e0440a4850da5d14110d1a444e905d6355855d90084756cea6455d9c246dc18271445d6babb54e29a5d75a3abbf7de7bbdaee3911a3f9b3b30ccb9562948c24a2340eedb99b0c553705c8a47ca765dad3924e1381c816dc98d6f0e20a6638fd12d6b7b8aaa680ce3d2658f5cd9be041e6f90c3264a75ea5f262a8d2762f6b9c1ae5fad68af8b156d372d4a52daa7a62535b1ed17ed9b16252db14feda9a8b671801c09084770beb6ef245d2140120bb44aab362d4a72b2436d8b22b4a94d471152b2509a32a5043ab0fc556d463814514e65a7822f8c42f52a1bded5b0429398977a8522e00a24d8bea3b84e0cc11539a1a5284968af02a36ba8e46cf655490b99221a110000002315002028140a064582b160308b543db20f14000d7a944e7258990a844992c320c818650c3200004200004344668868a300f42ecb87a1b9e974d49cb14ef8cb25854c2b1e57508e47dd4c88e0230ebfcc54b0452e73033b8bbd2f3763a75abc7fd260dc8948d17051c9d37dc0fc4bdba5ef28289662fbd4387ca714ac8397582c3c20dc8a0fb0d1ecc5c78045018f6bee9d4ee3a41e172faa0bf2b1500a2fb93a0e2fc9b4f75b6117d3f0ac954c01248613d7ae28094a51e66e7b5d621e0bdd986bf26a730d2856a6ee1f15ae6b67c002452a94ce7e0e6d349c34f391229fab2ffb22f97e7e726bb52055286c091b93759e6df74a3412bc0c0338bc42177be672763711ba5d08fae5a2323769dd03e9cf42edc4adc84ef22f897bf50a5891510bbf51542660ff7cfddd99b5b259dd6e5aad10e0ed4319dc6c93014e34df39c69c1fe806ae284d9903c358c974d72829ff7a56d4c35a9364da08d02e310482db60812c9edb0eec2133320156535c4c5ff57360cf66aa1362bb26185d4f3275b22747209c872f66b0adeeac9af2988e3864706bcc87bb32598e2199895c6268a5035123af15e0f37dbf4ed7d1c6bda1d1e744d9e569933745ab2d449ed86bf05f20e2166061a81c2dbe0359a4bd5e5db577ff83af49a9ffa7a7ffe6e972f21d40016dc3c5319106c0066a4939057e7060fa75f7d2fc0967cb54b84c36415b4b1fe2f02cf02781c68e146775d73b0ff6c9582ee420d56c6d8922d255b24a7ce52ec5794db65c81534b404d100ab9975848390379b912f05a0433e97f3affb83a8d5bfa18d7bdb40473d11ccde3ec7e269144674c88bacf6b023f757e148adc9a8fbb0e874f6b42cede454568556f2f332d573f0a549fb0a1264acb84cca6aa57cb982ca2696551cf8e17691aae79330cacc9448446c1c8528dcd59df0866d59d9303291c6fa6fe68ef012ac9593ed3c806bb44ad1fc76b5b2065bdfbd38cd7f95c889a0b5209a1d360506c53babf9212cd402d5e7c6ab987429b302db5e87e96b311eba3faad50b9ce12ff77e7bcbe95c05108c99019e0889c28bda09821dc681e1ba01d0a38f609a6710c61be0eaef5ea508887153fb799364032c23b12541665dc355a3c48b73d78023aba8a24ec357977a1977e85be1670ccacceea101e4db316423487bd075e7670fd63a126e56fb16be99109ede5021d0659525970cead93646615ae6f825c0b643a76b055e8745007805224a3d9854349e3a8fb1f51cf4d097a95a85754d665f8752f6ada92d21ff936f56f2a1fe7e09e47994bd2ec81ea31e6aa427aab648b91a0f79cd5438fe7c5b89a35449069b444d3c690c15c5333cb613e57ab77a91c9c553555d3b59f3cc25f8baf643031ead7be9f411b4adf0837efbaceecc00816497f77059338aa192974bcdc4122e0bdd9bbadbd5e649ff2721fa1d743e6de4fc8d440686663cd5916ae6ea27177bdf6545a949fa152f683294c6a8c10ebcd68629139c0ebd785fb0cf619aa5eefd27d6678f1e76fe677949bea46e54c4c8ad9183277cd646c0c51cbe328744a64c045735129211185530f90c87a1091f39efe26ba94549853409a0021918dfb9fb7542b6314bedcf8dd2a461d1d3dad62f5e660758c6db3e94d72a634936de20bda03ebac5d8dc91fd3ec3693339004270e8de11e4ac53356296421c8a7d6b94c7fbcb51138cb35e17630e5a5a503c0133dcad628312644582f240ffb20c07bdb4e9acb23698bc32c803b0dea2c8e102db48d894ce7f9afd28be02bc75b8095dd841d2e2de1aa7f04bc305e55339bfa5da1eb05b3d3d643235487a02992cc08b033464a0a1cf8d1dff9953dd506a0041714f463406564bb74413b4c974ff7ed7cc929e2293c743a5d018cd4604c87ba38e9887e5b01c06cf2a93e3ad038a209572f7779ad4f5935ca7ea0d8f109d1f58fff70ab36dfb6cb5bd247e3212a09581f7b1cd6ae680812e7a69b64f04959668660a11bca4141bb8ea03b445ae63128e72d5c539c82fd87558a00af117b90938ff6244b70d6f45e3892796ea2552f3ddf425ede4a3272a1157389808f31420901e5d569eb4cf7478880dfcffc05d1a032a948a6e8f4df92fe52e89bafb7188ac4678fc748251f70631b521dca5e15fbb77ec9a49f6a45e1f4869cdd7a13e7bbd8faf895a9359a7db259efa415ffc11a0027cbc61167569a7bebfb7e56aa619fecc53679c080e613f0b89f31d9eb4b8960f4f83f81d081d4ec66654f6ac1ee37804cd7e8fa63686d1d099abc22c1d55cabae0263070cd05255467885af2b87117387459986270c1b5900972b938df39fdfd0b0f91a0b934a1e9f2d230947cdb4117b2e933a1b7c30b99ab0231128ca09edc985d1f9cb34eb371adc67cd5022eb862ca0e70038d07fc409aad87376c7312eeb62f4521995cbf3700ed9d2b16bc3d92b412e450ed9eab28759de2cce6b579eece2de6ba5e45d69d32f8c5050644162129f08e7128bc746cc32d52d2e191756891b24c59e16f9ae99bfd8727cb1d30338b88bc336944739e9491d9c0c9476f2b78bd2e136ca5998448973d554e0e7c884210e8862ec1c40da8a288571bff95d8da44fd6bca7d015f277ce8383ebab225b25a785ff417cc6fe2dccd34a938b66b76a663105697184b460ae7bb1b1fb91c3b62c0e8526444563e62ce0826520819cf8b38927151ce6a06727352405ec896947ce23c05f17f07c94e3966f2bcf2e28349f3257766035ef9da53592ec5b4798f9de634961a24eb2ef388d1a6e2e37a9fea2c2538ff1fa3161ca8e92f59d66a067fa75714dc9139dfe97bc1b21ba723c6e76f8070668eed2107aa0c3315537854c84dd6939d8831ada60b9f0e2631c7d7771acb3a92106af0bf8d32bd1c12036dd0df719d5c0407b2dbcdadf5923048bddaaa256d788866fb1360fe43a2ad9fda2d266a24747db3d44a58d15f9bf0857000678e5ef9a83bc96e7c7b3f98c1630c17ddeefed50f72f1cd82f762e797d9d04dfffe73594df84695c3fbfbe4fdd8c6d4534b57e60f31f6e6b80e87cccad3b0037b51daf8740caacaeafbfeb8188d737f97760689c66f1bfdb8ed5d300a946be3203a3971383e8383ff43f70f35d8c08e9f9bb496bf09de3bbc7118bc7c5cbe241f3dc1b8cc0e8919cccd3b8f4c1b209b0e2362bba509839ea76c181d87a6c3c4c8c11fcc1538985b02414499f9215cf8a1ed095b8b41fdafbbffb5c2baadd8bedfef9dfef0959c3497d31c619338d8255b2491e2ec2c953873dcb9a2f786a88a98ca0c30cf43c77e73afec09e0d64b7f28133509b9c134453afcb4fb7b470c3879c98eeca15f8f61811fe3f3b8f23c39fe506b5228f1dbfa8a43dd92b100d833e8b06f7178e14eea936e2435535cc5df35986ae002c2e2a711b6a879eaa77fad177c79233008925a0bde42489d13584bcb5d5c86adf5c28581dcb360fa9298317bc2d9cb38a509a34f5c703175171ec84828ae37a5a81214b10b9cf61581faea70547f2cf2e02d66a1fdcbfeaf84ad7f7c07de76cbfe65bd7d772e26970a52d30e0d17260b14020d35874d5f0973d80da42b1f7c6671dcceb6e83067c35b5b14d99cc3381474f6d3bc14fd8a2a6c54317dacd1c07ec11e38936d9eb34b7a60dad74680bcc27d65a91157b497852380e999990b43c2031cf472ef6dbdb511e1b36bb4f5e8e346723d65f28131b96933e89c5140e2285cad26c66688b4f7ff3c2da71e2824db2f5cc8b97f6697876d4e2ffef7862bc2d7ece05678b97fd61ee178e59bb45e13c49c2fc09dc256f76c4de3dbee4e517c30e2b26ad56b3a687e34ab48cf57a6a2d202448ea117f24e4cb6fdfab0164d9acb3cf407086bbec7d204d68a90a264baee949e22d56f3eec1eeabba389572dd0a36512ef45b95cacfc09d0db1f9f1216667114bfe96fb5722570d0872c977dc4ef75c6b56d991cfcc3e81ca02400ffa475b152f77f73702288457be24fcd2bf65b6d992c5e73c306f6dac8bd651fb79807c796b506726fb751dc4007d817fb9cedb21bec8f8f7f65450f0ffcab366b7e0fe1587697390b1326a1215a9663089b0067f19103e3f0ba40aeec821df9684c5fe8e0acdb0c2baf3cbb0c9a465e3d055a7b404aaae4e4522838e5ad4fea71836ed36c2d52810056b490a45931d3347ae4f639e143a028fd94dca4399a1eda0640227d5b19e05a0d19cbb0df1f909a0212227c12831441ba48a57cce1a8c4c671eff4f68a77221db39f4c6f103ca8c0598829f5ebb47d6a81ed4f37e8b34b1192b6cc137b49e8494e416e1a1695f3845e63a4df96f2b75fe2ea87115f97863a2ff56e7d92b82ec6f3eb9ed08045bc86e240710a99a10981aa509c41d0657dc8bccd5259d04c6bc26f8a4cef2c1dc5b85d9c4a8e341a233519481af168f1a4e01201d317c01543587268ab2be00ce864b3c92c670bd3dc7f8ca87672fb3f6aa5df17404b8f643aa37cd5d3890642dae0d78728bf17a515d94d834bab2f96ea26e8b79121c2c78d4782f573828fdddff4ba255eac28dd49bd84fad0ea891b10aeb47492f7642bbb5648475ad29420e0422447afc1224878ac9af4cb75c93354e827ad9fb3e1c8b9ac3cfe90795a4497c566e5f0d34ebac129c2b8ae2dadc5ae9f866ef9eb1565f63a867e4cccb24ab41da16eea41bc45cf0d9c19da2281f178844782111216dcaf6b7d1c5fe28223ee8152689da00ee1bd0aa3bbf28317dcb72aa1df8f663eafca47ed4e0488b31562d371f367cbaa9f6f4b9e5a6146edd79c1ea38398aeadc3fa66110e63669bd9b334d5ef35acdcd7e5165ca1db226af0e3654ec1d81428540505ab4c65fb18e9678beb427086c33ef1b2aa32df3984942f47383c56e012a710a736f5607d95a8198d89b97d919d478863d3c6126c02ac4d8e864a1169189162801d006634686d459f8d4d6b3b618fac6653a9696d571fc4e75b4422ba5855e46b80d7434ff6cebc6bd11d160c746b8e18791323a7c856880308e0992213e38102a0952203153824d2043613cdf4015c11687613bde5d954f4a826e103590e872880ae9911e1a4c6ca74597d4ccafefd3478d2f6cc5961ed65c27de51a4da47174e9a2fc71e1dbc7a9ab8f60f2364500cfff739e8f4c047ba13513d868f2626ebcad658321b3776d907e99d62349d4c4b117729a6cb9002c30a5024a786c79b6c88b502bb5a259e120c807c3d2154a32e53514282834dac3c6deb8e69dc0768b180ec82a9b5c96064073d0ecb9a3052addf7844de64fefab55be6b122d594eb0cbfd39a6c5a09f78648e5f292de8fc92085f932495ce80249566f0211c0823ecef0d9dcc96582e951d492e7b1f98d789da57fed891707ffe36c61334aa34c6e256cc427e779c5898868ff002d5402e98833e63346c4d332130c9e23f4e4a49daec93ff618bf6f69a544040e94f38c01401312271cc67e7b4e54ad12775ea976266dda58ba286f5b2c45d8ee521ef9f25bf6dda022b29f1383dc5ae4cd41e78b97b4e9becd02b21af02821e11ed75353f2c01d6f24b928aa5081ea80c01bc8d81c4f779150e3a10fdbeb8154ea506e232f9b618b02729de273bb959a40829dbeae9f9cc1fd047854df1864e314c6fcc17309c728afe482fa72b6c8faf98e3bb5f48235413c1a6f10ac0aa0bf1738e4384e27b64790eba21aca6b9b63cf01faea1a6b49492ebb89bce373f08281bdefc6aa05d6ba68ec141e2e54bb149e64c72b1c2da9e0d76f7b965396da4e0702522cb7cc81777fef8aa37b7c5c122936db7a175921b01f103f038c5e87204d2e90d85cc95db21fb17a6a2b49241cf4a4af843f92c579979e2d08fefcd5b09312aaba3a43b162c5b115347dc900a9784506e796b82ff6f78bd122c31a4e24af44c075388274cbe65596bc7d7691d506acdcc14fbc94d7ca045958b031a856054a69a92860db889c6bc0ddbcb143dc977aeb323aca19a389078ae1e4a8b86c8b12f968d3f4ca2b7fd345c47734a106aa8726930511cf78ff1d370be28e24cb6a216230863edcce8f06d2e223642eb11fc97c53a11aedb555c449928adf04d3fa260f0ec72682a2f76aece386d7f912e4d8ed528e1c4e3e35cc9d10178a0bc709c6bdc18bce204cb74e9f921954524f79fb1428393241a92b0373e3284c76d206fa082d9f827d91ca01b78d435298e3f6c49d1115899c897c6b0ecd43c460594519856ca31426814a0cab8f8a119665bf77eb7fabd24e23de8f4c8a85db9483674466fb79eec222a8bea79fff0887434701f514e2efc3e55e4894cd6229d1c89bde7bf04b323486910e59564133911726a1cbce0406f18a3ced5f271c3c60c4261cb03999393b43cea10aebff7788fa8c36bfc76ea5117ec331b0a950d52b0f1eea65cd2a6dbf96881aaf17475a78b25947d7b06435f869935fbbe8475eb1de5f17b59d3d32a08c47628f643a7de3ef6956a35dc72b423ff117458a87fbd9a3d6fdd2b5160d34e2d8f09b418db1a945b198e14f6815a3cb5c92614885bfdbf42c318a040cfec809c5e415885f4fb90a454f7d17606b4500450594f9c0102140154f6ac4bd4b1362d04036cb83e5430d9f550cd73b24154ef37268b66bfaa1e5e3ecd596fd41ddc10c37fa0da587ac2e6323f374203f99ea67336182bb013401e2496edb8432d4023073ca2d6589669585ba3d534cff2e3bd3f3d230c18aed6d47ce688f858984169d28500eb982d2921709743ab2dfc6c8a1f57c4e62c03ca016fae126a4a249425dbc98554615e5b69a0e2d9421f4776ba8f89a248fd0a3145bbef236ca01b414babc83c5b15ff4a8b222d23157e1cc1944b1991d2959db456604909131b32807e5d0fc430d47c817c8edf632ff09870527b34ed0b15c1ce86943945f395453e6d80e4d74afa90b8c47a43e4c6ffe1fe890489f5d15cb712a6ea44b9878d2fa59a029def9441e20ec825ef423e70b6f238fb2cc54300b5a96a0b433cd54ba58bbceb4a1772023b670a9c68782786b9fc23e449f70031aaa5420eefb22c4c1475f1c8863ed8311e0bccb02699f1b1bf9c99766a30602ea012df2815e2826f259c991ec275138821721a197b02b9fe1c350de437b0110ae07afcf5e60859af19ab343236491e2745f6ebe70316a49e40c363a8ba601704d278fb728068a9e104a686e5f084be246b4f1d18108dd3d0b8194f387a5899047f8b12752edaa171d40ad025a0bd2d877589b649c2d0cf3ed7ae2bb0b2f76c01b1367649631b27ac3e24d2f8e0350ac9be85aa43afd1b295492c6b0465cb1a272ce4004b84f71401a09496bc0f4c298339052943eac4cf0a2d2c0e445017f440401d3435d6d2dcf055831b75c8210f3df8e15b610349cb9f70b50dc93bd4c7ead9a9e45169c7fb32080aa71b0124a95a508f53341a078caa6e72f45b0111830508264b26a7438a8a8008a6430394ecea7065f02135d72dccb20a3685fdba9ffa0941cf3a4dd9602ae81b0913de56916b0701f15f6e8a596cbb297a69af46c6a7ede9622b6bde8bea41e16b1ff26b49bf323c93d0833a79b1f80aa6174aca4d062214dabe79b66450ba7501bfd93f419d429743d64b289129511adb26b441368e1d5af71bd9e6e1bc4c36f7ee55ca8b720c1140b5927582d01f885edf2d56ace1b16292dcaee23895074a4e0ca604b85804030547d3d2206bb98c1636d15c539178f444b6ec72a9472a15dbd5d2bd9240103674a9bca03f15fb7d8b91f8971635c325508b7a0d5643228d9384b6eb218f7015a5011d7421d19207ed6b6939f1c2d56140a9ff3e630534c46fae3d5e86905bb1f708d0c3b77df2cb8a241a0ec4897dffec9e985e061a024b74a1c992ec92562ce41d88a1fcc47fd77a03f6957b43e4e3ed271f312c17b332fdea9d9035e33f94373a8957e86121f642e6f2ece31ca5e9bcefb4fda74bc9f155be5be897d0fc8764ae14a25b8e0a85b07e34325dcad4621a9d82102b2f1ca7d9a862954784fc369b01507686953b8e3666fea801efe0f45163852be9839978b7a163e75a1d8262af09aa90b6bee318e1ae7d421bd4762a0a53e3a509dd4b65bb1f8e6fc90c3b2205f03dae16b7596075166de6ea510ab0d81c784556323f95952d3d041e90dab91430504d82bbac5fa96cb933545a9c313e70c346b3c181b49746826bbb11805eecc94c25e957d4ee4e3e55052469e5487638d1ec5ac71de4fb622ad0a6dd8a8e09f1984d21233cd4eac791d68951576e079f6c67f223fd0cafb0eefd96d9409bd925d7901a6a781e6e87ec8332cefd3c68c2dd8d36a4176089fc41d7be836abf3a47c30000fe8088c987f095b0b9e707a51860e2c1d94148357414f4b5463515e28d3b648e58835a0f15a94e027154902b8e022f47cd09a2361106459a6b95a59f77dfb0796139b31c850343ba184f5409ca97a68ec69cb28ed6322251888b1ac6844e443415c9e1cf91ef404d8fab14138a6fe1437f459b5d26be5231b4c1aa41e063a3dad6cf45587707a5d882b579286f0e1d73c984b39248f181160033be3b4099c91e8e449ea926035473d0c4b93728b4b560e86a331d4dad3b7f455708ef5734e9a02ea140dd0bda3351f34bb192c624c7e4a707cb03ac1148a47e6cf15248170514583065ca4d9a40093165dbcc5895ec959e4dfc87861f41acad772ee393a3e61d48e2bf77ddc04ab7cf401241d883fbe7bc8f8d5228e8ed77375ed2984d2ff3f4b3d83df031d045a6c41d36470eeb0e363e2012480d1b18d0e2868d684fde2d1c131e32b86e4812d46fd98637ce40628d3a86024b35304a13e3901dde6943b83850438c3f1a36caa8fffe368c1fd5d3c6d8a3f9626a1fe0858cee37936117c83d7243af4c783988768d770eddee368c7b34cbe07e9cfc9e6aa8b75d87f77884392ef42b140fda01117a0ff2040797561f57e855dc725e47095b5f142bb4f97f56df9f3d0234e667d6e5503f1b8ec7a9fe52ed54c1c1f3f33b65ca2a1d649e9b1fe8b8b3a8403a5293d452c0cb1f9ed7a68ab5a543ff3fc1178f9d6947477f4b14edc994b35a5de02fa516a7ae33deaab8153d1f833d6d4f9f06d0b423386e86e13cbf96f2ed993fea6842e9fb09b546e0b75c79a11af937d49d45cc52fe94ad0b219348329a8bd826f0c1263ff79ac3ddf257d520e311d0a1785c59ffc37001ebdf11e45c2364866919b0efab0d121171b539ceef7f180c59168e216438da94063ea7e8bfe4aba85e9956811509ae4b0094f2fc5da5f865a11c6c7696ac849abe06bd85e77dd80dfe1f3060ea3d3344888ca6b93d67a1b3498ac58392d8ec133459dbcac5535fd7bda1ed3acd133c74f0ca834ba575264760c9d31b2d92439da1cbf9dee68b4f3ca0fcf9c86d0e8025346060bd1e9aa78c575afd1a921eea6a1ea447ffc399e0d1ab34e7def624a8fff28f85497d5c8027bb50e2b2f9a2438a16e2da23bf5278e4416c63f9e45d520d927fb32252bcbe712a1958f6f5e80c08bda11623364b9106e3df607a168f81cd247bc523da940b533403a6223d45ebcb9e0a0324bb43085ff64cba7865161b91c27308855e791352cc6dde4dedb44f915a4ddd996bc079c17f845975333d4386d816f1c8a9738de7df9dafe36d439043b9f19823968f7c76253586222e84fae6f2c94e9599f7f205e48c35b8f425248428721f65693a614e8698c652e4e38e747b5a49d26c8149b6ea4824c01d2b558d67a496bf38d5263cbe6a00c752f08e116276fc8ca555cdf3668a39a2eb488b080c4e4cdc38c9d5d73226a2b87074a20dd29f03423927f5ddba997c335db0525950e26ecca795d35f08543149bedfa8b36dba65adbd31a62f3f7c0c7cee999fc19116433aa4f6648d1c7714bed68bc9c55cc30a800b2e6079f0141eee5ef147612f6d8aef4dccdeb59205cd822446c2de3fc4b039cc0f20be88d566af6ffef9f2431cfc2249a1574006bffb4ae44c6c031f811d016c944e63290d148b05acdd9138de0d0236a49a3674ba29091bff30b49756ce021e2384385e6cb4ac510a17b0ed6bee858da8d22ae31a4a738884ec806522ee03b8015c24940bdddea4cfc1f65f2704f80b33eb5657f2a794d52ecd8385c0af8a0bebd758c7d6a7a65fea3bd799c7954c240616e01763f5eb36ec929a0f2def8aecdbf00a778a5b95997f94a67b63dc8611661ab13e8f8ec0bec3411e7cda53e9852f51c4b5d55169342ab6d2bf441c53510c892b9727622f42115f7f35d491c8bd58b34a4bd5f5b7ad175f3e2e98266f5f2fb60b2bb03c3fe55b47ffdc2174e6309935167f1ec482676ec8ca82309ef9522ce1355f0c890110885b5361b50f535a21d04410118461007bab64aec3871aacc940deb07840ac84943563d5c79b194bf2014fb1397122d7c35c15f2bb95a32bf37b30f90954b22a6ed9aefc2e0ccf08871514cc125931693df6fe94e3258ecf67b650d60bfb205b9b81de9e57e4d357a49709e3cea6647e3612fa627379605f2f171dfafa265a914aa956e9eb1fa33635a3f2cf9d5ab303e955b65dc5921f41d9fa5310f1f4ac1065e8ccf36cfe132220127070754fc983dc0ec9bf043b559d9f838234dfed3e50b122a181182211219460641256ced1a2d50f364efd2515bdf9f3b828ae1fa3b6eabe9ab5fcf2aa56507ff65aa00dd53a17fe03b7e386f6e77ffa567af0c06c83cae2d2edcf68ba74d43fa08fb62d70b711495305f16d6019ce15d39c256fd923bb79b8683e6a1cf02714e90ec535b9dea8221ee6427641c8557b72d137b632c7e85ed8627f121392ecfc9261cb4b5c7f4f95694bcb4cb6d2bc2f2aa01113f15ebbe2aba2e747ca348bac4593be949b75087a90885959d5a4f6e74ebbbf070e5de81e9b23beef76a95555b5f0538be21b4e81e73f8ccb46e2cb619506980a7dbd13cd7d0754d75d6828221785df1cca59fd50f57e9fd4207254d2ea32c92f3adc5d5ec98f4158bef63109b16b215d757efbd07aee6c79c319806d1d4d74a59e6bd0f4c37ad8efa6d37d281033cd783e44a549c4e05c77c9176b04cd051e3c1d69732f7b7850efbe6bbbca44adeeb576710aada370ac4268ac9f12365ac54817b0029e7e13d3f79b963939ef54c98219a0bb2c19ac3596e9c37b08ef6d05795ea51dd49510545dae19747f97d5bfbc04e518a48f5599772162403b7787ab4e4444787c322e411d96da24ebe9fe891b837a9a345233c5bd2b86d8d481fe6ca4d89cf08e87011b2c12eecef7ba703e85f05998b8f5200c95889bc17a1d01de0c1b204de1a3b44f11da17c5e3faf132cfea8070daaa7e28d5d955daa194cc013f3f82fcac53bdc338dc6f950119ff37c90dfa322d7aa4741d8f12f35cf4fa17892a2529c79eacab0cdc282113498f28861713d7f9d03555b59f3aa34d782886476f1310f1695498e8c78c30f0422c6398e06f38502798a9d33c348a5db79628a13331ab41b272cbe030569d38c53b62b32167cd11076bf4ac2324edfd32a27b13e59dc8005926676400dde5f0079a386df8942437cb805e4b6e2e499f07d7b02d0e2d653fbb5008213afb17b0855a31ca036e108f358168149b383dc91b6659cc906d2becec89272ee64f98e2829aaa3b3037f5924ed2c0d14baf4370470c9bfc0f0b77dc2ceeaf3271a2cc8b5a5c66f78f9a34f6d036e5a726a8b57316a3876682e3fb3304f683aca1d57caae6c4a2f5ba5a104681cf1840207ec8f99bfdb8968243bf45f22cc647cea248a642e3c601d6d5167795380421b6094d299e73aa6d794fe3abb93c9ee2b3966874037ccea3bb871f0c205f63381441cfc6fe67af4114c2700833d873b27106f3f8229b953d55a4596062aaadbd3884ebbff2b0b045c6d4d989ffe06f9b5ef6fc932580ed52beb2f6b432cecfbee693dcf777e5ff725b264ccc0dc1b3c67fd4a080e60a5c81bbfff7f32f7ebf31eec90281a855e68e64deef8116bfeb294a13b86a8207fe2ea85985e12fa41c52e5561e65b0996c058fe47bbe94169c445a4f35f71d92021421aebc5d92ea7890e8b9307c7eb86e3ab5929f65c6b675bddde97fc5b15138a69a3d064ca0166970e6dbbcb5733e0b334feadc662bde3ebfaa2b6861735616f9b4185ddacc7907646e883a055732440c6ca21c1473f04b90961c0714f6623084ed74f0885b1cf532a1a35d9d8b9f0220477627ee33bc3ab9af869db2cad4c31cfe0c058cc2753720f0f6f631e3d436e7c4b21deab3a403bc6ed8b1e77f23aae6336df711c076a1f2810b91056223af0d2e5e4edd5e4999fa4f0c1e16a6dcc8f89e7ba1610ca8c21553522aae51802e20a6f52d891d7ab7aa98ec822b5040ce32131f10c9ec540c9c8c42204e5ee0e11b8c00af82de166228c24fffd37506d2d1ed8a35441cb8173a396a8f91abc14d170e1845cffd80ef8ce60f8a1fa4558ab5254086b268e7c3be822fde35f7548f9e7220d5318e70460ee5aef03512626925a8e2427c4cc102e4e53da08082e48d05d2429e0f3c30a3ea971652d473189f3acec89cc554aecc6808f2ddefe88a478f005b9f480899404fc5b937c608c4bd718ea434d3d960423ec1b8b8afbb8f0bf3e1ba18045de1a66a28b78621ea6eaba848c1396d385345653dd2eac0a4152f3a915e2366f4a1bb3680ea823c4d60d38327d421a58b4ed39e5724939faff87176004688012038074c774110e927cf000a6d81ec73afe5a3a23261754a93b3801577e6b658856ca5c2a81d4a35093af7231c4656af68d2928d931fe5017ca541f0c40441c1cc6f70434490b40bf973d9bb9a08f836c5a74784ef162b0c7e8cfd3a07b8fb550a3d1907c64e181b481b4efa007435c17b94aa01a0c4919d259f1873df03988c4fe8b2d1bfeae78efcbe1d4fa215e654b69204cdda5ec651fbb296e752ccdb44428d3898a781baa5a415a371192ea4909969afb0fa45239c37f44e3227f125a5b8303792e8be85e0630e71fa212976dc55efb76d9a59bd64bb3fa5951d6831c9a3f74f754d4765acde01d92d4396514b48ea8a85fb76a49df720351200735002f312c0002234cd505621fa5bc31bad7201ec6135b4ac8e0512420df93173efeeba503f618c8e7113f66a5af5242994b97717e823bf1347716593d5230a71d47b77eb189c76dc7b187087e59e9966d951a71016daa90d2d9ff9d6ccc51aca49b63f0fd06c1e94dd0098b85094791090a26667efa16b1b1a3721676102c8c5aaa756df44c4a87e0626a6a891b68b372c4520337ab254e8974463d9a0554f6883db8614c0847c0baea0efa30622f619eae59381153f2e499f1f4f5a214f57354b969b9c05b3d49c6e3330aea6cc72f20e41c61fa864754459f7480e10901202c935ff37f0dfdf0bbeb71df88190308083aea100ec3b60bb99d0dc3828c8391d77a65db87ad75c4757617ab5cccb28a5dd3aa80f4bfafae5805a0dc63990ca94961c347ae032a81a154204de0c83cc6fbac04217084f507d4cbbf14a6cbac620ce10ffbe456b1cfb5e0bcf67b147a7ccae4ffe3ede4a32545b27db68c97586b6f2b1d11792be9bf0d0e8a65c571d460dd549de588abc25e71bf2f6141efe1fd50236d56d42a41c9fd229291144f74a9fbf24c16cf23c2311d3cfd410a53fd57b742df24e65c01bc72957ab149981e3e0bfacba7bb875cfc3379e63c57d411f2c6e2d7ae61c97a2ce1ebd1d9d041a1621c0b1152def364baae72d2923c6f26ac4c22fd5f7b206b1f58dc195d59183c3c843e537766dd9a62c13b2b44be0fa0053cc95f9759ae797394148d6d87172b4f76556fe6be66ac64069a1d499dc92356a51f4b650726206a57dd00d7e1184064c73214fbe5b4509916259601fad91ea959c167ed20374c5731854ce8cb293618a51f39dab70e8293b4828689b13251b2913a618918956f49c92429df20cd45a59dad62b2c5f1423adf5335b90df970e69c29ad1ffe4276ad69697e242426c2956bb22dee7eae8c5aa2a7fe852429721ded58b6d9f2ddec2346c8f04788e12e4c89e5558de99b9f4d2b5b31bc9e45a3d0f7b0e044a1128bfe5a150e8a49c1f79a5010a29abf48abe13d1bfd8f4629a1db8501f2bf8d351f96fe67146e901fd786529634ee5f4cc712edd20e971111129d7fa8b066a14f813f621abb90d01eb007a1e3de6d6b2f097bc2ec554849009080d0a11711e9a712b5fd361185d8d0ffca08d704207fa1fea7df232300813144edee7e87fa77dfd33f76daf1380ec4dbca043826bb8ef0fcbc80758697179299fb811c77fe0db709617e08e83686ed3db0d1d2ff2d88bc9ed05f55b94db27222cf3987f3ff39d55417a9d397fe75f4e4df4876307d3e47eba009a017923c55fe44665904f194cdafc29f537933cca00f6413b4b8474af78dcc30086a92bbaae17a1105842b10b9535b9e1f170305462999b4d8dd7da9a4d4df4d4ef18ddef8d46a36f10eaddaab53b3be2b1825c05cf05522e6e841684a557b17c89e4466d46a279d2abf6fe7a1df5f3e34e83fdde25382329ded976685d99a974561401a528f9c2df0b66988e73ed1fd8d5ce56122d528105a15078c342ce0d42dc499d7df4978d28210ee86c0ff28288611598bb3aa4989a618201347969f46900190ea853fdd6a42cd49ddc8fa507ccd3c0475f6451a7f2fa639289b84f4b5886e07c3551c9d583003f2a81fdfbdb674132fa5c05145823280f7c2d2122a115f9956ac2d8097870460a333f94936a76edefae89a2889728a55c6f07c62ef20076db231a0fcabf8c46116b0ed5f7a440e353bc3e23f5f6f1c6efdfafd22da2e72a32cfdb1245cb49820e5b79be69c786a0d0605fe9ca082268a6c7a6cbcb55ee1910105be4cebbd23b577fbe031a87ac02d9c5ca2ab046a5a772c275021324bde0bddec254f58644bd06c059f99f65baa93825fc8b26373fcd459c162f2888ebcea1718b1ab3e8788a1b53d4388b8c59e418c58d57dcb8458d59743cc5f598ac08cc27d8553be60ebb3a32be62e315754c91e317335691711539a688638b195fb1f18a3aa6c8f18bb13169913b51067d2eac71fde14abd98829297f11d826a6a7ca37637ba86cbc6604c518f38f35124e203ef0fc95635b0092ef767fb1367efd4680630d9346c57504241a6ca70cc55beae8ab81ffc96bf5eb9a56262931399826650f106dcb968ddd07dc558684bd01fa4360145a25061b3c364a40e30a4e5e93a0f8f407f8f3ab99be1c2e5a3a18704c01a6d2a11b2fab962677e9395db2274e61e79ab4c8624d48e5552dea524846a3c7208a2ec297db21dd1e7b7131c9841d59c556e5bd7a092fc3701165a9b3ec7c9ac89a8d23a019d8a9a4a6d82dbed05d04be3516ac0ed9819bfa7c022899615955fa0edbacdddd7f8000c7617c19254d7d0c1c304b42a262798b4e4d80ffca960796003811be556beda4050ea16952f62297aac401aa446650ed04a54cd790a46105b742d9034df09d175e3be2ecb7ada87e9232a813b55594f3df46fc770d758d2378e47eb279dd8895ab07068dc832dc9ccb78a52534a57118f3fabdd9c62702d153807e84d8fad3969a5bfe1069a2237c2c34129e3e4a455b73c39e6ebc10022b3263aef34d3bf2efe9096620ab7323cdc11875e4458becb72b0f8d2ba019b12a174bfa86eadeb6e47bd2edbe1ed0b31e796a355e93db20db984a78abcc7c2880b6209848ea2e0fae726870d96285cdb6ef06dc7246f50273804f6ba55b525f8014a3ad88fc35b1d088aacb7da4bb658af2882786be26c1ac2d62d659a634c3b5c665125bbf578568d2fa0136810ef572c46ca75430aec9ba7d781e0831690cd344a704d74466cd4120a526497cf20a33bf72162eb7091cce717662606449b119253ac5456433017dd9ef0339af4a38a5f3dd2fbb5bf4567002c5931952246ea3c7180a9e4eabc82906161a5b358e95c04e2a25fefbf95021faeb4501e68aa07e2b467f30c75556a2b3b7b6d63c716ba6cfa4a920464e844cfd8e48b89846816df35119ba4cd51a8335fca0094146423b8f17d423dcd036126ce920ce78e5617a952008dbe05a6bb2ec1626d43025eddf9475d533814f7a7929232f901e58b7db0ba496884676d815ad3c63038f2fd21453837fe106dbec07a25e6622110a76edca8961bcce147d2d6997a34435ef86835514120619a4169762a0a6bac002d65c34d18257933e6d52897fb5688a21fc1b648b4e11d18230829cd16bfa69ea89e52685daa04c813d6e264a2ded3119d2432ab65e3c3b6b34384017e5d6f860cd93cfcdd954bc33b5685d269c0fde8e1382a07976c7be54fe62250a306badde7ce230b5be9fce9ae70df472fdf5539a93c7337793f3f4e365234687a3bfe36f88abb14a7fc5b6144b6b6f11b675a2ceba4c1a63ecdfa65abf36083123858a63c9f98113f8108eee47000203d8d1ef19f3f61acbcdb0347fdba9fb362291ebf0cadba9a13e5893720a018b432472e572a5052a3f606e4db1ee72b05b2c2c5216161f4d87f4ce73826f207a65267a2541275e126d3bb259fff86c64bb3740cdfdeffd2f729a4b91b9b70e082595721f8ffe25a690f52ba395f75d6aae67ce6c2a1632125634ee4fd524a08a7401817fad648692af9c50d963d82268c88683898023131efb34c8c17854c6bdc350d6eb98f538804075bd0ee98b953e65a618052acb813e654594c974e80cf55d23e95428e4a9243b9669a4f798ff13f9562e175a3c84af90b213ecff8160eba1679473d536738763cdcfe3cf53ce8f3df6b7514a6924566a0d2876309bb081e0ae26d077fdeaeb4af428e45995115eeaf274a9d123134a570c503d447cd65588f8aa87d525a063310d7023adc0a48404ac90725799034f1bb9cae6ba562b9597455f85f8ead060ef9636522b959afec2e5bb49468a63abd5fe7a786b61d9294edcfad97b4472d0c91e81086920af6f850e7aad959783cfca847d6234a04c9fbc50f3a038e64f759ed08294a7766cf11a7292310a567a995fea7641299892c464c2118ebf85c8cef3ad76845ac3cc048f06d3b4dca633212969732ab39a9062842184390bb51dc42717ac2e125eadbd0694407dd2cf01c37c10014c8fb78d15224994fc7170c49bee461c5db39cf051594297e7712f41b3febce7bef60c461b004e1e177278b10537471ddd6244b1477a1aa7d6d98fa822508da576f7b29465220a5b8d90f4a9e59aef28ee1ea505d2adc806e62c9384de4002c8992f024727347e48570e96599c4401525c02f8c55da93dbd2fee6f7f54e4feef5f709f600cce393449a98f7da866e3b23bb51f0f0b0625141713c45f13c003545ac7a9cadc6e85ac3e3d18700eafcf97c76851030661f47a8618a74a877ebc854b128f5b6de6b5ebb359f1aac18706701acb61d67f74b25d73fae0ff8f0cdd69c8cc0038b25f4154881a91bc644581321fa8adb1fb6b1e0aa85fd95a0c4a320763798ae9e62e0523c5fb8f506ef4389f7ad79f2ff15ca8d999b40d572fa1464a2127852bf7c1c3d11acf0d9002a8140f3434a5fba963772f22da8f992059b37a8ab8f0ab76bd88fcfcaa892954d23e74274f5c4c3135f3c2b8bb5e30f43f34439b8096af1d1920e75bc031f0de651a779d134eb2d1ace50a24685cfa7be9a3ae914530d361972b4739c67c91a818d4fa6dd05eccf5407a1ce98929fd7356c5266d2d799d9b76589c04ca6657558fd17d4e67f09121a86005a795ddd54afb0ac4790d1e4c7e2d78d80327e7f75ec347a2774beab834093584d703c395ec109fe5c89213a7a98abd679a4284bd2e357dc94c71105290a1cbd9703da114853dd5f9a06ce53e264bddf437895b12c72bcb92c58289b3818a634462d0b60a71fa34e755607c36cdf095791c76ef828913d02bd90a856e88e3de694e2530c28dd049d34908ac371245a0472eec29087edc958b2b62bc6642021a893dbb936ead8ebad202915167877c42939fbfeeb506c10494544d47150ed8cc8d6a2f98a5946d7995446182e45e5ba6cfee642bc1b353fa591d4c9fb52d337473d55bec487854c6db1a0b2a15c607f585ae480cee1e227b18a607cc89814a73ae09bfbd5111ebd026fc82e20810aea60c8c49bc44ff33b3fa374b6d180075219a4981a8cd50aa7159dd4cf1cb86cd3dd4596e22605bf03806e199800a9d9a218d40b376951c7660d5be062fb49420e9f4d8407e2fd02b92507dfafa92b372c8db35f846f70089eb9b84d9305bf67dd7ddf729dc2c373b1c8fc1c9f12ee2e4f1cdc3463c12c9c91951fb104e3b302c2efe3a3915b19bf7e9d5cc1f96cc20102e1e433643889f85725ee8578c261b28eeb00a5408a49692993aad20e557a98129e6822943862bc8ff4c207b9803e8be2aad8a3db4c9b5651cb63e0ed0d70cb5ba9076f290c3c4b5b6834cec5f35804532bc0fcbdea1b049fc369df50c8382d62c729aa65081d26aa861d576a122301af97bc02c852b18708e84f8b22fbf00203804e4e765849e366bf649b0305da80277fa0a36457d8215eb53210e23e6454c2e73085edc433df041460b106cc645a03fe97686d87f37761e784f71b3e0e812525e6580823e7487e0375886f368ae8b62b2085ab353fedb0a99e6d971449fb9a94007d58a794482a8c9469db9e50158383d37bfc1314d68a2d293436f58adefd8e98f43c317105d594928197f31a8186d98e77c4c80aa261a5b814c7f88822a4fcef4a10d20fcaa54779de2ff9d601111bb671b057c422fcec089b2537c5ab5555dd6dc7d02cd3b4a26135449519c0d73e80c4e96fd922073824046027e2446ecb06d582cf4127c178434d498ee08d87e8315257f68f9953d3b6b1755cd011daeda32fa09f5f3f2f3f08ab7a2c4ff023ccfbad54598ba015cd2283822f2da66fdfee73808c3923a42172da90750603033924d1fbc9e0711a59e5f4e9a3cb192dbb390fa28989b6b6fd7e7cfb168860a462d742cd5ed2f24124a7b98ec350f1f7fec708d12f09bf12083f4295834713a34b1c893c7df1601222f9c2ffd96bacf1ea1a2022513e7f5418d96b85ec8a3081921f9b2080070f89f9c2a92651f4f095ea2ae1c5111dbbf46dad61b6ca89277b14e4ac0eac068168e8e0691f4fc702fd8ffe0e3fa2b86bd876adc4ae15182fa069bbc73dc763df8e4027aae8462c1f560a8d6a0e5910224c555e57373fa36956c7a82f09aa777bbf60d35107bcccabc6446460a2908762c2487de332191958621cb2226689c5f41078aa2a603cf189f392786b873022677084c40ca48da4cd3250436fa7e5d24aae2ea8278e201d12b379ba4ac6abb1594b3d039fbaadf4f1b10c08d7cbde89e5aaacd3601eb711961944459482835c90415263b4750c86afe7ac1bed3004bf082cb99478ba0914f2808ea42fa46e27f7b4b9d08f9b930b4801fd57aa2c251902bb273be286536ad028a270e384e36bfe4c8f806c019212caae14f0c195f0a7267cb6b76cb420d775bd21beef6c873eb830ab342c4bcfb4abac108ac4c65e7c2f86fc388cd0f7203bbce450daae73b8354450725d76e74840cf9c61b24799ca8493c969e95fce987c5165bf036f4b9748973a86a948fa8833af699f999eec15d58b6a552828fac0449c8020cf0e521174e423936d1843fe2123f65b999b16601557314ff805e0c8885dbee7a4b57f807f16867a3d3e379a7c6e3422e1adae831868c155c17a5e54bd2ef9fcfd5129a4dc00281e477db15361f28bbb5965fb7163d124b093053d597eb2802669353d03b4dee4001d0f7ece20d22d3820020cfc6c45f2d9add8702e4cbba0681d6ae56d51d70c007207bf490d81182b347e3c6a773ce0b3bd00565762ff5212b0c10ba85297da7b2edfc656baaafbe642bc401079ebf0668c93d7bc99f75ffac638250dfbd84a34e0cbb8f6b7e33627d1ca97a88e3285f36370f73078a669a17e5ea59099e730863db927e643ee9d50da191b37e50adcb89e98d565f8a1bc2ea765df33ab8b688ea8e2670e81b39e334a7c192e8afb13bf1f7abcf34127717a49aaae783c1559aabbbc0eeaf789fa6248a449f97d19477cf15713dbd2002b17122996c7f256c8e5b10e8c390eab5e6317f385df9f8d769862b57fbe86881a04f262991e55dea74f816c4389f8ef24dddee919590e75e44e149d72639270ff1a276150b132c64ed1caad01e01234a3a7b9c58255ff9eab3861576f3ae74717c0260046a64ad9ef4e7494b7422198ff717111633f17ff092c31cf334e0af277d652127de3ad79c0a1b09788479e8f67242cb668c5d307a4a575b4f5ea8e86cbab4aa6fd792e12c8ddb8867e99437c5adb412af042db92a25a5db1fb5582f09d09e9d7adbe9d32549508c7ea34187cced877d09ed633a1395e349d7d8d999c5c36ede274786e0e84bbeddb29517e0c967551b84bcfc124ee345c4864599453f8681559157965b416cb4520c2b7e61cf93d2095386d2ad4356c41ee6348d7e23510c7d1dde8368d934dd2e8bb888b88cc43477399b089a5bd9ee6d6a6ac449d925cd8cdbd3fbbb8b30a70d764d6517b336b6c7ddea2d643c46e996f9cfd0e433b9f9a34fa41c20f30b284b6369abf7ba4722c7b908f62618c98f2052707540c4356181f88c2a2ad02f4c66b163fa42c97e5a1e983561c3985a3828c4dea85428184714c4a8f5aaa1a91f44a2ce314e9553e52075c0a5dc5348a19a1485a46b0af5cfba655a0e7ea27d0cf7d07a66a2db2a89679ff482bbc94592536200002a4d18d31ac667df28e13dd3a9680cd493ea30d77192121029bce89da990d004b8ef81bc61b283dd6371cd38fd3140696ec8256802d0ab284a319cad6967090a960ff2428be912d4c23bf7479c48960f86f8654681034f6ba2694388144ddcdde00ea704f6f3deac6a4362fa00a95a050d0f28348879913a0d48d885651c5c09692a9a43f73c0dca4c6c76b341ffd047007c73348c289cf393701e6526658c2642e0c4b6014ee66262973001eeef831d1edcc1f5c9d1b953cfd9f3195a45b907c1211574b33764eb80396ee212f953b5c90b47bb34d06b4d7ce65950870afdd362d9cc09de8cbedbabd76e370aa23169b2455a692c21bb298c1f79194a62bf514cb841495c7e439a06e18046c621ade218c1d31210c5a8f3af59cc2ed54aeb5b4b563ba66b6e7f6f1d4129b77664d22b1947229d14747ed9d336ba29abea335449259f569a75a554e0fe28532450f913fe68b706372e51a32339d36f72c8629de009ae80dfa9f921c3c8430ab2a774e2fa15ccae230ec0327bc0002bb2f270b0f5ecf9808958b00edd98c4a8bd88216f1514a60a8818d3810dc3db5f0044cacaa9d32c9b08e397fc65f562ce61c466c072aed5d1e5446afaf50284b2f899f8fa035cc8cbf4771d2ab91ef5a84f24986b6630e6e2248eb1fe20cb5e2acda7398b145e8a9e5e15db587fbbdf2c024389d8dfbcc72cd35be6aba2e4780e63c8e9439a0d1b4a499008fb849f336fce82a0488212e7b6b67c3af892354e7a46b3b937aa57990c1864f457136e4c3739b36823f18e1c014bcfb567c175e0f7a26d4940eed313ba741fd6f80233bee5b96f413834638ef4f09e79b8a15e3066793029707a6337ab69506dcb0fe7cdc241841aae8a398bd6f43a4e3eb39c61da1b3be63c2d77d008d2516eebfcd252eae3a3ba2c29ff1728b3dc54a9310c90856cb73bf9a4c92dd0fc2e7d0f9b5ef7acc718692c8ba5ff0cc6fc9660d33ba944bd05a57bb511b5e140302442f002e561ea16b2a169189d6aa188d54c7f1301c37c0731f6074a433025ba67793fd93ba82b82b95fb377d7e30681275045f8201ee343f048808248fbb5bde8c1d7afef0cbc5704d2d43a9e8be008f07b1139537dd0aba3e5da2aed81a9819194a8bc0875504c7d650d54e8b3ebc7acb8ac314aa2cfbb3624a71b651a3d6e9c67957dbc45fd691d35f81d96d5b2b89705fc6b325f12eee25e089e24cf246a8e6225618e05b5d1580f04b01f2e8358ae13d3317da2f5e9b8e8c01d26cadf7aad2503258d55e3b4dd312ae880b0418e425357d3217c88dfd35892e468fe37be1099b8fd7e98ef33726fe2a1bbbf259a0a703a2ec52b88f01391f3eb0da00c97ecc5b83b32a2b8211b41a113057a668a8d828a925502f5bf265ef06704ffaeb28043933e9454dd91e36a93226d997c823bec574211312d2cfac366aa0b1557f8a09d6e1d0ed894d5fda054b6e02b8581da38f9da967554bb1da7ca455bcb109768bf17c38cd4d104dbabd22498ff3e28e9a63e11e9cf165e56b4728a5bed01db25f1e6d467372e3881ba30567553d3d94dafa9271bc087d37441855f816a9679cab94375f703a773786f2344131d725162c84737123568957bf494911c77dcce2c024e550cde2b0cc9e64dc6d452f069cb03912f3ee62855e01a0bcf41bcbdae382a19d4f45a5ed2e32beda719fab0389d0ed7d0399f881933a903944aec24a387891f47038ca7f6d2d9ffcfbc68fa49042034424f64a81dd1b6b6d11468573e669312055938bb259dbe9516bb4391f4ec5842218aaba7af02159dab125849d6081b1664635a26cb858847002a7513e1ae9e111673092834bcbfd1d0fc025a58886e46dd7ef6816994f02de4cba6d8965a0516516f1b7fc84aac7af8f38a6ef5ada27b8c92181ac5014c71c75bbbead6056c5a5b550b70a6fcc87c7732f4126e35c619ab1925165506b3dd677ba7ba34126876b19e8816a79d5c1dada7dc8ecff50d9fc8f1e01710ca81b8f5764532221f9549326a9aec9d865839643cac108338efa853f4f36beb6e5c776ce640b7710e9e862123d023eba5f18bc2b4c7a93731b2df3a5e94a818846cd1f8110be924288bbfc885d0a9d759fb71bed4c1b22b6cddacb23c5417eb55a9017c36c7c5bb40b535ae5a77e12e8e0509bfe7d5f4c1cad6ab3ccdb61f70584a61e3499f2343df66e34dcb747446136a0db262ef39d2ccebccc09520bfebda35beeb0bb0f6b1e48f37ba59053e310a277912587e50b89f7aab7ea780ae97d65cd69f884e49daa9a631c85f82ea2cb6d7c42f01dd2cc713e42f45ed2e5b63c21f96eade4d87884e8fd64c971e50b19bfdf56857210ad8e5f6b03f61f301c9822a2797bcf1196e54aa8d7aa09f4b326af121fab097ca7f5af4670d747b5d3c4bd8a54046abf9536dee8410cb193ad0e03b7d79fee8a48ed2e18649b03bab6ce2dbd6195db119ecf8aed3decfa746c6e1287bbea0bc4ab8537a838af4bf3f9bc6450487578bd8801fbb7192083f28b767b09ab53812f03cb19c9f7b77a128d03abad126b30d0024324ed58f698b8d2be2c052d98e1c75d9088f662b5787773155df7892b923a13a2db6ab821567371fa176f6d0df790bc240cbf5d36d9e1aa49d101d24f5e550527bb929898a807ca29ec16dd87f47bfa9a0d4df48485c1fb95f24540331ab20169349506151e0ec92f25cb92211ab3b6e2b5a7580711d442b2ec9eee4bf6ca3dc6a92616c01ef65d24f1e4b81da207e6f4a4e98f21d7755378d0b2e261f6f502501fecb4c866418a0f6a93404a16453ba537bfe6830576a6898d55d4c0868f5a0c7874086977613e72007a15bdf50770ae1301a27a65bda999f5ed16a8d484903f7677dbf458347e61b672a808c6a319c7dd415e979e6e7c3351de50cffc4aeb9aaad5d0a455214d221f297b8a077138a13b41472b5ad7d9c1b4d2adb76a7de626e5d3c1b712fb62ba29e12ef39ec7786dae7607c7b82201233c85ce50bf722bc81f998a7edff69c4a6cbfd62ca9d03e3f53258a39a3f9900e1abcdc0d2392b4e4142703e265ef72d34ddb16f0dceae0bbc9380e0bcc505efa8cd5f5701e02da7b81454fcd7f2bd6b4b5839a460e66c49db5c73c89df802485a1c6f6008855e216c4b4a00107fcc81631642bd1eca268a011b691bc93779fa9f43f55b03c8952cb0a5bd3e8e8e32dec86570810eb31489355c977e4bc9e53e5f3f3408c0b8b0fe2dd5034aed83eaa51dc665c7a4fc2180b0e01972aa928e0e9927cb1a109cbba9a0211cd32e4390e2dc6f2e10034a951c3e0bb33ba6ba57b9ddf61326bbf4d24eccc6a571052900dbb3422972bee15dc2a44b1b3c45097dc770226661f467190dc9a71c378d82f57c80c35a528b3979bc65cd64ddeefcff48774e2d5651c0badac0524ec1b84ed8eac4aeb9a604516e448baf05745420bccccb273383722993e7b42c00bc017da0550346cdbe0432a827030b5335a1cb442bdc5fc3b5b01fed597e648e3e988b771dee1c774d24f7168b4ff4872bf2764171b16a27237aa7f2bb870d91b7639d2e61af5557775f1065b4700e7a5c79d8ed312bd88b2a23d148b9eb0dd707b8cff67cc9656a635145ef8ef7acc4aa93c5a9ba9ebee48ab1330f310ca637e135f28f2abbebb6800b87694e03f9f63e800dddc78996d06747a931cc4cdce706ec046b54a64009318ee425a0e6b8b71cfb046477e0553ceb52e72f4f936a3ea436b4db0a220f040dee61b7d1d9a33ce2a9654c2f9d1390fda6d8c02f6948bdaeba60e7270bde1a0033920c93d50bbf6c1846651076256dd796950a9b00443c84feaa3acb03a22953134f59f9d552dab1cff2760430371f461ed801553768ed4d843cefd31e8d134d264846673211958af649e6b2b4ce90e28bffc9e9e638430cc302fdc0d75b28773c724a69a0b2da3c1033bfb5b1a05ae58483b198e250ce5b38376cbeba4c5e2babfae18c2fe7ee658429b4363a3c423bc287eb269830294c45c948100e8037e2ba0541f56ffd6eb9281ae71e4ff2533efb4518987556904bc51659c8ae838a4c35b6aa3a929793e5955b68880f510ab2815f44b5856c3a4765e131de5f28091afcf7e2f5b530df58691f58b64e95bf1f126bfc23116758ea6ac3cff8c47ea383a5221c8444a341cc961649f79581e1325cf5621a56376584115a2529caa0b6ce1d8065b47105185ce7a0865f9a592bf2e19d8fe68ee7a237698522690fe60e22a052e6d8d3d8a7e6d197c3ffd345befd237f80bd283d8ec1c0e4eff25b5df7a42833827c397d547958b4631b6dae45751f5e0bdf61cae4e837d5e4285c279fe5cd7a90e67831cd1b370cd1ef2aa9e5630bab20a14ccfd09478f31ffa0a7d9639467f20b3eb43dde55d06666001b9b0dc965a9a5181e43e47f8fd70a9dfa0925a588970ab40098e0e7bb0780a131152298236eef86c1e0bc75c4287d820d10041bb48b4b6ab81d83a184816fccd73241e41dd795e9855d85fc364e73aa624c33d74bfa23c00b8e12bd53eaae38fe73c2f3445780a5e4c4c49e04abf68b728e00e7445ebbb39f9b4b5760f30580adbc571b59ffd2b3e8261563c2d7c361a33842ee631108bcf51b2a0eeb13bab23a47589238e1ca50602442e5a6adfa86b0f9406932ba481743f0144769fa23d3e7b6a2f87e3c53ed89227957e700ab3bcd2f9ebb4768198ac86d5a2bb9e4bfdc51527e0fca9c7617d6899394b9f523b706ed783470b46d78403c2a2a2301615f62ee8127fa5e8612e5b5e8f20456346fd397aec0a2d0698b37a0f5ed66458375cad7051ff286c8bca0e76949af061298c5567421be9f72ec6343027e5fb5d9487304feea495247d6a765614f927decf396ceef6fa65ae14f387ac35b3b76202aeed64d740cbad1432a7c8e09af3642ee74a3f3db715aee3eaeed5a45d32faa0e5ba0190da1a6d010da7582e6bf348ad292bc91446b4d35d4b5a6be5b7961655250ec20c819c04189aa6f6a1484e2772a1544b379ba70447425fcc4f3aed8c9ccad82d2c8c9e5f0e64310cb27641af09948db08d6b896d3afa3f4d696ef240e11d6b5307bc939ee6def516b2039709d34e6a233df09517da7e90f6ce26a7dea7a965aa822a3ae3f617a0cb10e85401604a95c94fb3dcc939ad32b9b337a1e4807aa95cd88da76e4a2a978bac2b8eee4e8149c18438b0c9786af1bb7b845d09678781391b70aa220507e904871ff809c1a1597a05f3d9c461c815409cc914618e4bfa18a1c378f6491848f8b79d1415294e5d6a7b851b1da32db08ca543c6069112b79c3e7397c6a9a2ec06ff42c4c169502aa3d2b20c490cad59609001f737a34519e878160577e37da0090d9285ced4d1931d3bb7d8af3ef2bfc40fe8cacd523b5f5849022975f07ec60cbdf42e7de21d3663af3f804e6be7ef83ae0ca052554f74a0fc2665b4f22c894b56b1387e6a2ef8ebc6efa1dad1aeb603a29a5098983dbd78b7b2124c79121ed47348b485bb3d0a64bfbbf3399aa4705709e65bd6d9fe0385b02c33c7aaeae8b7c2d109ba137271a02b1502d214d7d4f86144c22b128d62558243e50bec24995ed937e61c696a82d85c7e2759a0c596a5c9adfa4aad00014c97ca6583de2739aa273ec2399608bd94c4fdf2f0cebc88d709ca3541284548cd69f8e384f6d550121653757e1029f5f41175f538716504c1a75ce45b842c2b15e87ad098e43a7f8c142c8533824eabd89d3ef4abd8f227336b06313316eeacc7453cae3a8165ddf1e3a7439ed84ea068a87355b379362f254c28d927d8ec39b49ba4315707cd9ef27f75c8dc18c3ac04244f3d9d90544516f46b3b3553e10dbfeaa0b075d88e741da98903719820cc43966b332bb314ab5714f52ca241d1f47aaf1e22a5b3a334f1725366a304ae0ef178052dfadbcc162e0be21c055bc3ae7cee0faca39fa4e89feb8db9ac9eba7ef6d4c04160aaa596c36b3d88bac02cff3012deb659eecba17501deaa9fc85c5db87d797c718f7413b5cc6f8dadc76bc84a96998d955bb2128e8e921ccb6a550fe3cbdbe6cdf7ab292f887bf4a40f34e9851d4a3cce806ea3db1c4af783858b58cc41263573c43979f9e61714091c3d0ed8de090d57ec50ed5674461ff60de5f129ffab062e91ad518e614e0c8b2a9edb3169e26d1afff878ec8d62b6ec8405d844b80dd8703b88b83ec03ef488abe2540d3c0b0631a2fce4c24695a1ce489be00e5f9f4251380565f0fb5a7c0e8ad7c40802c8e072352ee4e905ad3dbce2e0fc66217c82ba1fd4ce016ed43a1788bf9a233f250e3dd66781ec77e0363fd918f163e239b9cb1db449a74aea5757185a74819045b94a8166cf74eb1d9d48c2560a56e3a09a917840e403385d432b22c8f03c9f8f8e771932ae27d44737427f2d81a63676e9170f2f3c1741bc79a71b7fac41015a90c08f138d5d9e7d0ad04195ffa86f7e58f64fe8c42c19ac2efdce29a186d4b541043175c9a8085a7cb8da530bbfddb4c6a1d8cb59012930531ebf5b4e9171740d9c368d8f4d3f8659c93969e9669a5b2076fe4a7652ae5e74dc2995359ecacee554aec7fa5a5df3f79af93e1b89a64a67dbdd48d7c48bcd8416acec0cd1da1c237a1382527c4fec5bce82da5680628f6f91dc22bc7d1d196655dd53e2640c0f6e027430a5ce33ffcee969dfd2ab30d1780cefa2708c7515225e2204c11078e7da71d39b1cd030e1a93b4e80eb4ed2e0c1b95f4f41fa23adfd50b9f802c037b9f228399d787ab78c24366d9cea9e6a20a79a64f7da8c41038beb081b67b1f80c30dc8b34a6d9f52618922a5d1da9208f63307c293f58ac061da59256ee7766b33a992d8b3bbd693740598a34ec8f524ce0af271ecd6607797365c4a2bd8dca7634ebb95bea6b2c7f8398f65fb92dcbf9548c64fd541953a07ccd21429aef7536a5afadb16f54b3834e13cf6bdfda91a7e903d26aec0ffd5b7b18ef483676117a16e7916fc26f41ac26e1eda30d304790897a8bd90d7727e3644d2687ff63b1d38897c20d3558242e2bc5c0d9422631b22e708bfa06e55ffc77031f1fd23ab05e310e8498f4ba4d65aff349f281f4f77b291cb02ab2d46373f5e55772ca83acf0e93efc2d24a77885bb3b76c55a19775762a20cf5cc7147ea0356542fe3b712acc1562bb39fdb7d8aa0bcc711d596efcffe6cab5878cd3ce5e6eab7bfb6600b50e1299d2816df0d34e83e5fa385695a0bca79a319f269c3d29ac9015f7235b4d1095869b4c56af948176ac6d92a84a95d79058c426e60a22dbd48bdf66081f62818b9b476a18428bf4298780f8ba3b51ba37d6d3cdb0329930d1fdd42e131b03139bd4b3720024017034bbf0668265dfa99218893c166d5f923449cac7cc6e10d70c74ad5e94c098ff334d86d9c983fe7b36b1231e6137291a98ebb863bf0e4e5c5617b5804cb4bec92f8d95a01f3a5f5d670189487e330d89a421b77e58d5dbc7706431cb4f57e4c6575807b1911f269086b5af633c3f39999f2ca239bcade012adb935ac1ef66d38c8bed95b230a1893f1b078972dda0a0775e31c15618f7665cd3c82ae892019080779773aa0668d99953c1c1dc065ca35a3fe1d7a9077b37b0dcb4a33867434ebacf0c5486f3a4e36ec1482d0f90e42aa10d15d3f14c9831c62a9a7f52036bac1de0b0cc8b409762c09e2e9b48a83c5ad08c05c9b136f328b995e7155b34275c07636dc3f0031586b9bc433393b2181f2e0a52bccf92f2957dd6328dddc3f843a71936f2c8e4a930fe04128055a49f21e1187ca34ae786e022c712001d2c23f35926361968a9e45986cbf5a1d7255407bafa5484170cb1138096e822287b74b21e4dd900dd2cb1abbb698e7e8521e43e50c9d9c9a60c05eef18133d05c6845a97895d7d69a3c30b1f11429d97734f16762d702c239ac29c71816724435314d1047602912d0c6f04425c64d8558e188e3b8ee0f02e7d7a524586a2f151ca67b28f59970935ac0996b0d79ddf1183991c9ed1a0d52b07aac76c938bb6a9599f9a14a4b34f60be9aa83b956f4d285eafaa3eb4a760ed89b4f591d7e0a1020ee591fca0b73782106255a1bb0a523d130d6ba94ec0c95935c39aca06da71c2f6c28b87294130c4ac49aa7a52caa3ba1ffd93a4ba0f39c55916a61af42ce1100711a987e138b07b52f46c42082046ce64b84ff06ba74270935afe1ad88cedb17e26c536dcdb61a2f7762c0ec14914a2931cfd7753eb5ac3907c12df1b1e166829f587fc4637509cbc2d5f52cdc1476a2c7f6ee632e1d8cd91f1493f45b63636921bf09ec8ba8b852b7a87c5c2d97197345dc01506f883cf1fe2ae3e1b9b6f6736b035d51a1eb6d58e10293597cc04d097d4a9433c4902032a240234174d761a48f15ee1cc628d718245d9e76a14e285f584adb5f8bb0fc932eb19cc2b22f0450387810e5281359717966d91669ee3e0faa3a26640d4d5156e9af507e17dd9b36585550e0462ffcbb06aa3161808f120a8aaadd5ee99c708074bbd1ab04a7ef7d03e2d76a382987692473087d0b3d8f6f169db8fdc41f8379a1a5c8b5bd65d3d71b189c4e29c85d7d16407305bd5e790c74afc9d22c886d328bfde3d4b8e60c8dc5b6b2c1e2cd8c3c252f3d6301a07686dc619a008f7c5b2f98f9ac8919553d0adf8e5997462d5729c2b7d5112530691d162b93b797ac202097875ea6406a8f6351bb56a9993d9ea2a255ec06e0272332f26839342402acda3c34a1319bc2188910b93f0eaa83ceb2b602e57899b1b8cb818ebc1cd132c2a536112520ff8dbd73d3b928e803baab6d889ff15ed752160550f1d197cb4c1bbe0379a7b73864c90fef9698179d7d73be9a5a025124d80d05023d104e1b9b9484e861aec7671ce8a18de2b9c8718f2e1d11e93e5c967c0ce1ea95c894eff555483b84a0fe2592ed705165b478516eeafbac0f3facb69c4001914fc81695681a0639f3ac7a182ad8c1359c2884c60bce890a559f095d7ff82baf3c3f00f49aa92fe0d23d337d4d781bbb379a1263f7cd466e0ff3c9211e655659a004047cbaa800c8b4369bd7635c155ce985e55cf853b9feaf803ce3b0340f6346f3bbae21795348e726dab6a460756bfc0b78417f31c0a75d8bd292727dfd7eee756889fd3f28c8d8f291c8b8063a774ee8f2f585a7e0dea14d5dc2566e473a4552fb60db0446076f404524479e5c07c1dbd2c2476f01ff8de97afa36a1c489e5c61854018a84f6aedbdca50fbabf4d7e95d317111ede5a641834b778d001e7de763841b2cb7b80fd836e1399f84f178b2c125bce3bb200c385c383b8ce0b0649ec8798b2a80e353326c9075b33b34909a3130500d9acaab893225339a03d4c20b3c716c16a975ccff3a64643e755d3784ddbeb79a55579815aae78c393d53f8d2467717f4b932a5bf3082e831dd252cb3bd8fb80c1fe65811ff2a4be333b2597a1b1b8479e6383a66a130e80f5c116c2e9500cac58ed4907f029eba92b86e01ef63b218f19ba86f078d4bf71bfe728dbc60972b65b75e2312a14c84d36f51239c17b331ef8d766f9ef2c872a8d891c16eaf355d8453a9dc602d56deafa4925d323417a020b24c236c82d0634e0e977b684ff340944578d9f2fd906b99e2720100a4f14e42cab53121a66cdda5f4487cdeba7cc92be732357628f1dcde8969d35469cf7a628c136b956bf6a5b1783581a2b82d606a0860101a3c31522a3a6feb41eec7b29305dd284eac612388d6c242e1f4303f735959e8aa9529aaa2617a295225cdbde8b6d763753074cd18e70f39b678d06a52db2f1d43312f7c53b672e4c79361210b5d69f3b4526ba236132978735a2d75f7c834d4cee250a7a6809bde6ae85f89645f3a05d7a5c7a6fb86429fbe2ef44c2164179befd65e9719080d3e0ce523c7f9580ea878f1659e4ccde8196e1b47e3d5f4899d453a4bb99a0f1a47f182441ba66820c740bab769ea8484ff48b83d7612b5f46a8299ae49eec691f206fc0f93d0d391f29f55fa5fd979d2c106e8b7f38c777ef8fccc765be0f0dc2f256e7c01fc886a3d1c3136efa67312b6b49158c65b15f2977d93b4ec1b7f3275280b8ede106961c2b015f058217a256d069fc34737fb45e4ac4cbb05392c9d86411d9679cced593b703d99d21ce627488788d0b3bae3fed60f5d5db825dc58d02228e9fab5c2f7be43d12fe873a138a7c1d13c7150c7bbee86efdc27ea4a98ccbad7ef4119eb6a81906422445213b4d772f55c5e38e2f7104e30a260a4219dc360b535ce644ca976a88a4c8133159b02fe505ae20e9a98293aeea2f740b307c2c55110a2501dffc3a0a5ca3a6061b1fc24be41bac9508f7ad117dd95f3e617b29f0a345800f2a3bc0c9090062922e2817cc83036727fa9ada224da4f8857a3a13932031506d0317ad7ccca22fd5123d934b8f1916dc94e2517d1d3ea65b2c4ac86066e921d78af7365a9270149cfd332188d789bdb91405831e282839b65cebe1d6a8b880993cffb052c58024aa719595b200e4a9336f5165e760f739aabbae6cf6caa6adf80cbfb5b4661c6963655b6853c55dbbe865c049bd0c33b76e7c615803ce10b00040385cacd73ed9cc498a50900c40866c0f9e8e06111a1f7d7037c1488642392b29bd0caeeee1d5f05680559059b2b637b481f3e7a9f19d4a851a3468d0c5e08d9a855de9037e40d7943de90366410d00fffb13be80088240248908db104e986dca93a7bdab183070f1e3c78eca03db6101fbd6f0f6a00e04c00d81b743fe4063f7068e093833d800e80ccf824000e0d33005688156285582156880d801d9a71650cb0e7bd17494a69bf4ab9ebdfc718e37eaba5ba00db00dbc6c058e8017602ba1f485b226057a2ce7e193e6f57eba5fdd67a2b916dc1b1c8e6402eb41dd1a22adae74057d50ad8d9c57d11ee3368cb35ee657448564989a8439a9c6500031ad00007dc273edf6a07743fa4d1280b32e5e37e7b950ed081858e524ac9fba49b8a45bc2f62973fadad798bcfa7573e9db5661264359a692ea933f933e44b199448ca1a63c2b84378c63d5922e62763adb5d6d74b8e8c0d423856824629a594fb077f3c4a68bf8fe262af17a4ddd5c5c652517edef2e9598d0b9c9b16319c9e988c858d149e6cbf6f474a163c3a321639b218be221f670b6f71a7709ee0b4d838516e7c5cd8bc0f7fcb6121b86dadb55e262fb4b62ebfe244f9d95270de409b23c3671f6badb5064929e47a314a29a5ac36514629a594a3cd1bb453126118f53d21e40f753fe44b7bbf69fc0b637364a494d65a6b63ecac86cfcf1b82cf2a8388ce9051b481abfb6446118e2aae97b5502c14577ee939cd701be3d2957f779ce5ac55e63acf5a270fa6040d94862989e6d472ab18033125d1a573ced9e586ef0c5cae39a803751797add4242228294939ab7984aa736ed741b66ba19d6bd72f7606656d268a5e0db96abf763ff0959640b55ecc6597f8f6abf2bdf4ee3c18b7b9c189e5e8ec7c38760d0f0b594f0b173e0f863f4041422fc4dbf56c08460c9148f42ca746dced84540e907070ed5f5bc4d92695f15f9d455fa51515b9a26825b26478fd294452f51ac6788dd1a5bd3aaafea868a857f9559a8da2a24c8d66991acdb0d8082df24a5bcaae9da991f8a2eb2ad4b50deafa6e0b02f517c83b03c85aa6827fbae6c2ae33d8b5ebbb7ef974ad5d74bd5b74ddf574edc9ba86b1e89af3746db3d3358e4e4ecf601211c22b679d0572ba20b973af73625debe074bd73d3f567d3350fef9a856cbb7a5aecae5de8ae7d7ebbc0edd221d7f50f5050ed5ae8850567d7b317954e298a9e0dad24ba9f4159e340af3fc57b6dc554ae5ca9d5de2a1fe7e2bf093f546da9aaba16735b3ecec57f2c3e50793d602ebb5e78cc9c2e7ab573d66a45d76935341369bdb1f0d9c424ed75d5238ab7290b912213232054a4afab4a1b7275d587dc2b7cfc5fc10aaeaeae121021d2e8478af4bf8f6739a47e1fe7753626a0d79f33570de2eaf5b39cd9ffe9f7a97d295e6a7188f554e5e7e9e949aafe93dbadcaadcaedf69a14bb5e99bbaf27d7537ed2a2ba56556e4daaadb6caadc66abdd5504aa216e86baf05e2c53a06632e736368075c741c43975b97dbd3d3d3a793b303a7a2f6e21a7eba4f379a42d4d3d31309367cce695d39e7cb44c52eb7a81fae44dde69c1453e1c732aaa2f0f4f434e6c998dbed76bbddecad72bb4ff68952dac47217d32bdc1817982eb72426c5778cb5b5cb6dc3b8d7e9d76b8c76b97e723fb3ebe5cafc09f6e47541eca71b822eb72eb72e376f074f871818637c2fc642669fe19444b7a86bbcbd2c9e09bc1cbc290f07ef060f8b77c5b3e255f1a878529e0d5e0dde94274f8a17c5a3c183e2457950de13efc9bb7933784e5e09bca69b278347022f06cf890783f782d7c463a2713929cc8153a2d49454fd38b753734e5be974c1d04cb4f65a5b9d7aa872420a951f27a72d4e5b9c9caacd2fedba5843bda05c50d3a575a9ae15c6778b13978bb1fdac53d49c135f7c43d1eac55ea9089a5cb0d0c7c9946d4c9d6a008d131a272828a84f27e7066e3197f3e4a6ac5d6bab53166b0399e3425910fcdc73b6e371771c86a0a35f8ba47f135a4a69df07add25a095a11e87becb5d6daefda7beffd79ad7d8d77be13b3b0e4b55fbe083f42a56998374aaba0222eac00cc83d22da07bad7fd674a75f49ae4d49c3f51b9c35dae9a7358cb50fddf55a78e85c10a9654a1f80d4a3a3a22251fcc73d742e88f4c1bec41840548096b828b784a6b6d707a1d2680d844ae3a64dbe963e4a206638c698f3655881d9c7972254da5c4243cff49ae0f3399044140a20fa7756f8ac515148e96ab4041aaf56e75ebfde0735e242e97f21edd745f27447c122da81b766f70f971195566b52ff2cd23f5aa3e0ec7c89cb9aace17f3da79ffb0be6a6e06251232d8983fe8e0f8963774ea75f2a8943768ec857679708afb38ba4df0b3ba4fd5d98f4fa1dca0df2fc75c6bd400d727a83e3de044e7d703c52c81374a945aba9df7eadd000b94250a35a42e7de8754e77e036a3469b3065e34d468cc130c800a5ab4d7d37f814b535cafe46b53a6ec3d467c3d74c6bdecae9524e2caf06be56303201ee4a7cffdb5da0004027ae0838ab0267cfc3ac7fd77b572162d816e9ce03745f0db748316a94fc323f4eb116982be1a728bd4bf6112fd9a541f49cd0790a2a3ef8b7c00293aaa215dd2b2d2b85ce95bab6f87941f871d90119935fcb38643dbaee5b7d9da127e25b926250d0ec9d672a82409ac869fd6b810fa4868af9c0fcaefb496ae60b54687ced3a5d59aa6975297f628835ddac819fdfcd1bf33fc6823c6cdf01a42c990ee8f3c09ff9112eee35046e4087e2e9c22cb54ace12bf9d317e9f34f9ed11268e4947a95f23a2169aeb001a1a4e23d23a57c2ceeb1143aab7f25ebd06b551126f888b1280d37552d6a64f1d588b196a858e7c436ac44c5ab4ac358f8aad7e740a421a0074d95f614abd2b655af5454475358aad7bd7b3a1df88895b052554ac15b82536f092e65d65a6b0d528b744eadf88b294483a4acb5d66a7f6e8841eeb38fcbc5ab85eed9b28e85c703fbf88e8d8e9434fb3973b9ce726ac589c570726e746c76f807e3f15874b2dda35bbc5cb87cf273200eef8f05aa41544aa129e50b49298dad8053dd8b9fe027f74e1966ad42492a6bda4e493d3c85c89576a59cb2d6e60b14068a43d5b257ea3e72cc1d6939f36423cd9917ce2c418148cb191bf5816b1884d1a26ab8d7659599264a308344126688b8c28c0f5466aa9891c105a01fcca430a1e0fb0aca244d4dc263585847603dc1450ad73c4c1eb80b0bf7c40c209051314fb8e0e5091644c05f5d563d6142961a14762a13595a256431c1b3be7c204697c8b2e22464e923ef51595190c862426d59273849e384ef2eabca64e9c0b50aaaca5cf54ae3b4aacc0f29bcc4190b3f1cf88d151a04c7e9b2aa4cd34482f3745955e684b903cf5768e1b133748b774b54285ee6155ca7cb2a32595cc073baac22f38482e15d9755649a881fdf008807fc7b322bf02b9e75bbddaadcaadc6e4e4e4e5b9cb63839d1fad37228dbd7749da0746528fd180b297abd4dd3774467428a7aa6b5898c42adbdd74a1533dc30c5cc114a4af045e9014d540ac63c494182103040a9a105261031025b8f19253078418d922b5a6af4650b32744a95c8a06067975563b2c6a8e9b5cbaa315b28f0e20507ada568bb17fe31efb9e71ced73af3bcffbce0bbb6bef77ed5052adffa56777612ee7e7b2f4516b08629f748eb6ce3d2b197d3b187d21247a36cdd339aff4fc91ebd85eaa3eafe809a2c47e3f0a3e5fde70da9c77ad52ea8d4343f6244c02f5ad0dc758a8528da33ab45acbd9ac7d706c4ce7a32ca8b540db0a51111c89a88c29b10c91b1b93274c62cda208d4d33a861e3c6ce4f4b7e1b81e1d740db3857f23cda41414242424242412188a3de1febed96e2d96c686868686816823f8ef66bd5b14356ae631ede0976741c889d479dcea1d5a4f542af5fd55aea354d56a7b3e72b72e8c8a1038a354e58311f3ba363878e1d5f341042e02eaba4a0b2312af2983b785c4944ad1417f552305549a1025f93a6afc0655514b9cbaa285250658c8a3972e4c8c1a3874e961e7bc78e1d3b7af8c879e263f7e87ef4e8e19244f47b741d80d6471762b43946c55900301a46c29210044e54c8311a021d8600ecc2258c9857975cc280e9924b18abde259730545d720923d5c74f7209f3d46dbae41286499f21045e39f069b5f8fcfbf66d48e1d35a6bafb5302cd10f4008e102d448f6242d567b77a7811c1d591d8995369736de2fb1d635f0712efd7880153e4a2c231f80f00089436e2a6610a848b7148f7134dd0a3d54a4df97ffe8681f65ee8d745b03f5dc807e5fcc2f39106edd7431615dd65ad7bdf6ba387b5d52ae07aeba25f8daafe81a7161652c8c6593c034dd70ce36601bf4113c735272f2b52535f280d238ede2a28f8afd036ee44505840f8cc46c7c7e6044053ecea53997a458546946ea8cfef741bd04208403627efb4630c6e2a8eb7641f25b7c731704bfc51fd0193592adc8da43c36b1e43d0916bcd397339731cc7e17aabad5fadd7c9a4f5881a1549497ba3cc5969250349f18a76ceff7f234f82b681db2f02c5b0c9543ca2227da9e3818aaa15f200a05e6f0d93d69017153d8b293eaf4cc029e12dbc865be2a47ad5bf9fc86f4adf3ea5df85494948462802c216182059d22a4b8241827dc71ff636444acaf9d896ccbef7b2b6c1fddd13a1ef8547bca75e48ffc81259e37f546715e675ef7df73c4cfa3e16c2c22431e685495f52ce11c7bcffa36f43590160df3d11d891d877df8547723ef60bf0be7b50666d1803711e06debcce23a9cd39b563fbc2a419c53415659b4c3a38373366838d936927ea7b168fa4c6f3b276f3e39c9ab1e7b08fc1beea844933eb79983405897f4e9834635660b815079333e7569f32fc36321cca0aa09f3e119bfc2f19961252d2b0a0e9e6a720d9bc7ead7f3f92fe4deb4d98447548a3987afd91da345394ce579b8d0d4ed68d4e98a4f3fb6dc2a4294836bfc3249d906e8538a19259bb09b758f07ce00e28ebecf297599cff48735ed6724219c619abed7bfa495390f4e77cd214a49dd79f54dfd6a3a6f38549df4f41caf91d267d21b5aab3fa3961129daab3fa3ba19259d3a156b197b5d88f742a16caf0575828c3e19025bcc5d928982948b1dfbff7c31e693f8ca9d73a85b43f274caa4c619d8ac2372067abb3fa36e016deda3f56a61d1e9982041b6bd411582843f23aefbbf7c2a429b221fb0d206b3bb4eaf589e02d119c8921062b25a55ab5b2d11aec3bb0bf0bbd1feb54afff43c5650d0c18abaa430a58882042cc910eec504987321b0691c986d8ac4d3624ab57d877285858b3f48f15cc8e25aa9aad71334c7c692a420a6f59266bf3421992cc72b66e996444666dffaced1f6bd6feee6d380473b5ab867f1ff1d556af8fb1eae3acfaf80a83d93f622a990d2d1515ebdf78e1a38dea5175360546f5fab21fb8acbd6ab236daa818124b3f1aa42ca2a2b4b7d67b7388b99cc9b7f7ee2244295eccb98c5ebb33f262200189457afd9e2d63b1107addfb02bdda3bc2ec48ba693fe082159b6a09ab1a029e1a2609385a98309957348c20ab8824544e9ca1f26443411027046185135c5c6842bb0045ae49e62816a1a132a14053a5d3cf1fd50b68927c2e20e64d163a41eb0dc1e54d27e89244f33735aa21be59124d58d59d38de0e7ee1f66dc781b8af54d7b8d23b25c64f3b0e752701a5d4f3c2c7dd29adb586f0a2fa1c03ceb7adb622a1937ae1708c0b37b68f71f738f4d0f07177cc7de5388ecb780c4147bf8f6f0cef8a798c1ae1ee6bd775dd7347316ad485e3f7fdb5ebba717f7ebdc1d8e6de157e72261fc76af68e1cc771f88236db1f627459b58685ce9f685123a67b4c40b12dbf352bcce8b26a4d967ed365951537d41e26d5a64613f8ba04a6d5945454d39c4ba88d8a73044e8d44a84b26c818e3049430574f78d8a1764313903cf9c0145143b4c0c50b0e351b1aa9b34e8daa531fc512f4515235f5518291a18f528b047d9cb618a6933ecea9164f280185294a122a2cd4c63ff28489530bd24c894a521b8f22b0830a364491e5090f1fa8d5700cc0150a2e1c8126872482a8d1709459552cc061044c5e9c4ad8aa8d53e900546c89010d962b2b4ed47a4ac801889b0d55b840426d9c5215863ebf98b1a14a4b2a882d2dd4c616943044152ec002450c350a284561c115449801c1093416e42035842dcd172437786121cb18274060660a19181da056608416334ad4e68f50690ed8818b07a4d2589961a286840a19189441410bb08288a1367f46551a122b6b9e20c10a1f965451529b54dd07c52cc84390be2ea17ebe389f7f4df47c9d01f9d349971d01729761e6e0f60cfb6167d7b62340ee59124939e7b419099d18d05bd31756d45b6f3cd35bef3ca4779d7abf5e7aeb8d5f5b6f97de5b6f586cef1cbd633b1f0f0b594f0b173eaf73937303e6e0843f4041422fc4d9900e8c18445bbfbabd77f7d2326c66f0edaa79bb6ad1de7bd3a05e145313274d766f57cddb5533d87bef1a366e18d18e34e0fd81608079f3bb790e1dbadbdecbebbad7ddeb6eefbdf56b078f4c33a0824d51595971dbbb367d61453c1beaf9af14ad55cf9abb8ecdb84cfbb78679373639bb036f0b3436a73ad0b5710fcc4a1448bab05339f4f9d4bb4a9556a59194d7c601ee39cca0eea9724b860b9fede2992fa7c421413a9f89a9a9292a6aca8af007e807d797753fb8dce3fa9c5974cb7315fbac9a47d67980c4bec659c3c72cb698f50cd5d9cc3c44df968c19f2715ec0478b73ba9cf3f3c358e0e37c570531d7fdc839087f10a671331505458a940bf650a44c494981322585a5dc281898750d9b2051b43678d06c7663729bd8178bd9fce7aa39c68d76d46d729d3459210b03c606697f396912d554edcb490d2f13adbb2d5c261be5c026a63edff59989eb68e74aab526b2073c79143c7b653efd876bee6b1f908d4a8be5cf33a46f7839b3526376707e63ae3bac7f77dbea83a6c091feb63d7d7105e54dd0faecbce4668e3e6be2def4848a5a529dc772feb9dba54da7ae9f3290cd4150af61d9844040d036f549d5d99ead303af5206af6d0d1fef54951d0e27919a189d036f54ed3a10bbfda18ec1abb44467f45ee16e3826a0db70d6778d02605b4abbf2da70b6f86867080501fdc8208a012304dfc7458b9ea19958e41d914923afc5f81addf05a7c2596968a7b63549456bf94f5de8b6598a968e5eb4729a594e168bbfefa5a6bfdf74887a3febad62f7c5f2ec985f61f5f2c435990fb575a0c0506a8c617151029d85e5441c04e80c1603018cc06b359c190a467ebb0664d155a2a48824b124274c925091dba54975c9268925c9268d25f5d724982850ff4fc49abbd98cbae97de9d07ab55dadcd8dc486d31b0a76ece7983f325cf181563d6daae8319cbc9557cc9d1c9d1b955f1838681ce8ece0eeea1d3daf9763e13784d7c3c1f0fbe72a134123c2c78585421e542992182858c854c4c154e78152a54b1d4f920db7bef2deba10256a5674f3332c06030580b17d9858f0b1f98981d26f75071c4bdda57f8bccf7759a8a0a2e28a8d5111070707e7c19b8d61e5e4e4e48021154cf411e1ded9d9d9097f320f0f0fcf0f904c26930105b9b0ccd80ba1174c383178c2051f1f1f9f17a2982ccec419deea934f9ba56668fffcfcfc0cc1d05a4141414130624081c6c298985f886410c998226b8a144c4d2184b5cab2923143c68c15ba2c39cb8ca219453c4a118d221a576864402383296e5338e9f52753af750a2619d4c8a0c6b46238539a1a366ad8c8532cdd253366cc9861e386569aac821b9b060d1a346e186989c9467bea1f6847b42357111b4bf53995b8b172a4c19106555a45580d7068806303b17997555a376415b4a470e4c011974ca8740c5c183d54330340002000b316000018140a874442912049f24857f2011400105b8240625234178a4391308e82280a822008a2100662200628658c330e31463600cdb6e46a16a0f2a8c8d1c0b8bedae3f41195bebb7f4b69bcf3cd4d88c2a2a2b74891112f8d68098acb88232cc44726e090fb1ccf60db5d44b5c179192604b48ebe0eb926d46c61cfc9c82144592521361d5f9efc0a031c4ab9df70e59ececab1acc20fd146c310b17359bae8d912690027139b41e70e572cf39368b0b4500918fa83ceb9365313410a7786032413c1125d22278b0389f682b45784df94c97cdac2282d2e0949925ba30e7a6383080d195a231f7e0c04010a9fc84854bdf218e63f657f8849b4fb521e50455ec6d381e224845f5003baa322607d229e971cdbd8f33fdde40b1981f303288bad75351a763d1a5a6842cb7ce9c29175cb2ee0a2e2a1a9efbe5e2f924a6a80cc2cf72fbffb63dc4b2b90edfb0b5b2fb8b080ffe7879cf5dc1b0ef7a10dfcff951e0efe4d5338d2fbd803b1bdd6dfff4fbd84f0fbe5a6100b76cf900d48fcd2030f680e832c79e2e09dc1f72291db7108ed054ea7b65225b55289bc33f0be6c40c4d7fea368321ff1e49bd08da57c13b2c96a4571f9e35554b056905696c7976bec0c125b9c362cfa781b1300f416d0afe0af6817810e0175642e42afd12d4a7dc812086443b4cb3c0938ef6398582f21aa5c5b956b21b62ddbde0b554c11ac9b227a78ed149136665efa097f62b5e85de632ee4bff834d20dc54991dba49e56e3020401af4b87925c79442350aae77045522b4fe00f093fc5ef6889513060f7b75e22ea646d088bb2f238e130d47e96fca510dc04556b7344a8df76d094c8edc55237f4f73596a54dea2a7e977a94c9505761f69a0bd6743a068f110235875629450dda6dd643260c1809b95c1fa3025e27372b0cc6e2108aad6b4e0aae0b456dcbdfcd581582d8d76596bd2f3978178b6a484d6c419a7c1014b6658b13d5d85321c8a5189d94b93266ffc42f6b430a7a3151d8251dbb9c3788fcf630bb22322ef1d6f99412e4267e8f8cfd1cbeb86d522fa6b8b68e97d998955cd54a4d24ae7662ff9746a4e3728ec124d445012ae6737b96ca65cc821d947a800a08fafea518360ac288ca13759495383ce778de799d1f2cc0709d935c0037d91912edf238d6e1024f02ae7dfb971eb4c467a48d5c92ff5813cbbd0b3bf3d3bc367a788ab268e4d4b117c186bb119b274d9df1709312995fdb4f1cb0a22b2a74424ec855e1ad4e55d8b4d3c1cbaa2b18159169431c3dd2503e3c1d556d05fdf56aef9b2fa30e7d70b8e7435984c23a95122b0775b99306522800948e54363a225fd23c9ce5fc9a3078aad0b2b5098781cac228636396ebe8f6d397a01701aa7edf76fdab9e9b40263b64bad63a3c7a720fe9bb547e4b93512fa2910faf43452c705622d823bde83c0310b2e165e35139e7137178dedb9c8dd79e3f4fee71acc2b6b262860249c5fe0bdd75d60a635f4d892c152cd64e08fb0b2b32758d43290c46139a6e52d7cb5cb2c34c3d5f0ca241e80beaf6ca2cb6266e7106ea9da1c5c862ecc80c745c71d536ae240c9ea889794290b1c8685619e46b9e195210ff4d57a515909d447ee6ff7bc0fd2241e4a8b81a51b3ce8b507db84b37427479323c18aa8e24e4f4337b5f7bf3782f313e9f7ab7c0809bfec14c14faae5214e03159697ca4bf877b68dde4b769ce893d001f731d66fe67c0aa48a58af1fb790475a52e8e0d7950db36a697f8120e5cbc417ee7d7feb00b33f76ed924097760fc8794f53a68d813d76912267d8f0460a23d46d7cf295c5cf66153f1a0f2d2ef4220b0b895f1b77c97e69020e12a407e590568fd170e477b6440ea08aeedcae14bdff63bbc36c75d4cfddcb42c448c0a6a0bb36ceb20ffa1ace072ef1d352cfe68743dc0be7c9f4b7fafa7d985fc82533ff4024956e15e23ace7502177295990122a7f0c9000e1e43fc07a7094032416464c98503b6e0e98948f2bdd5b74bd64b7b7a3d03ab5c4030424936df81e0ff0cecbe6ed1aca976098d9d4f758e856fa8e39df75342b0002e257cd025651c87af1313a18b46714411bd71c8d051761a6cd2e000b25650fc901d38ec1a25162b306ff3cf5010f75dff06f14f551cb956421c7aba12e8817fa3209c00a1284035464ead9ae6afa05c61f121d3b9ad0c223450b448dded4ca1009bd1dca511ca35478d2ac63d91fa943df2fd0a2431eec58caf5c66ba2576b2f518f50d58f25bea45f019664152e1bb0b5f133988d2b090313a442c2fb646c4c209ac3145fca988a97ec3f57b52ada48da36b8f2f1925aa5116cd96331247ac547d9f76c779160c2ec38e515c4b36d0ddb26c3968b6e1eb6f0ee2077bb41d03ee5cdc02e22e8d6259ed54f4175142a4773d430e3511116fc1ef0cdd492f97f119b83fc839c80cef504121e0f460ef8f37d0db27c40cc9359a3bd77bad531b936609097696bb670bad30b704b3f0d76674830df0737529c46162fd62962a0b089b6a4c4b069c5c2f4b02f919c72b58a31025ee36dddeb2c89b7832b87e6629df668184c4612d2fd48e4d496b6c4d31620f72693094c507b6151ba6aa2a5104c8dee1fe76b998138eabe686fa83b0b1dd5a8b35ebb8f27af30e4c57bcc0f7ddfa310f4afc5150805220bf0b11137e2d6d2622c66a98c05ac4718cf62630bb9f45621a0218643d08ed1161225c44280af9ba1ba5a0767491893c6b809412f18ad25296115040a2ea0e81da3c388dd532371cec43033d1550be8b68be74461874f631f7e132d51264a89cc7dd3fee7201adca61c890d8e82e5c2870da93aaaeadf0fa8084a5fa8bc63233eadba27e13e3c8ce04599698ae0a401efda4122ee56a115eb3d636f5245158a143d1d2bdf226e000a21ade5c4221879bb38b16f6bd3438feff7fca0355f00c0821cca04ca0e173fffff921c67206fa4975dbb2a0848d81891a65526ad80bcd57305e371cfbdb28d631603adada750c885d60d63be3d3094ebb798e0a2b8b34745a5af4425150c430dd3e2f6a6ccafb7d22e5096228842cdfa6a0c88d326440c03e882b182864d597286f4bd336dd0d1325fd171af4f196a8f08c901f929e78d14e51c938dd13ff045dd553d30b124be7f5a24dc31c24d4bb67a8a366dba8b063d8c843c31614b21c352c350dbede8550e5bd83fe65cff1602538e8a307a9e39b126d865d0c5e246a3158095d0fef2824deffde56205c0b556ca2d65bd2178541621e5a9bff26aafa7def06d617c0c1f306c0abdf17c98bc115f6558e87e8ea2ce030f2f569ac70301a9f28d0688521cfb8eb5bf1f3f403a00319e705747204f9fa94482f69e3520c3a99dd21d7fc58c8fd78cca17f5379b22c094772f55a46d172fb4990b8955c8cae3d705061d55bd9b058d173881c456e856e5fe294419fc3c83b3bc76a8bd01da1a11633bea02aebb786ee8098eb0c96424cb838555934f9eb89df265065a1b994564a1606b5a3276d292b3c32064737913ba4cf575f71f5eb5eb3cd31e404d1d81fed0fb4e6eb1a7cc05bdcb1b48db9460ae45f68162de16fca3705f6f6910882a8040b12f13caa46292be8e7e627a9d0767bba9cd543cfb7b621e8bf38a3b2983408aab77b8e86b99e4258cabac79baf850dafd83fafe103bb91b278ba4e26e7375870355f52176cbfd73b5efb1a2d64dc3d2b699ad07624a4e02a789728963278b598005171d65ad8ef7f2ee1de20622cabac8994b62f5750a50de28a76e192eb54b6f9844802a057da5e4e41d53688146d1e05943391ea8656eeb6457f75b9aabb40e0161d0d2d2d1c200079601a17e513d2950a84602543ddf74bcf7a68f873f128b10a6a46438452bdd754b5fc904c3e3bbe8ec578a9c5ee65994f0f20a6da97479701e6d21eab508ac72a4af75825a91f679582900e7e806421e9e9b9b742e776d37e8c7da523a0719024351e0528e23de94c809d8cee00b3a8e43741bf20ee3ee2668003469884c83d221e819d96a5855bc2657d48a01c849925b47f3ba4ed6de060487a4393fb6fe71c5ffa7197f44c3753c16b7ebb4b66a1836511e176b4ed3da400ab8f02166750e3a0768994e2031cbb74d09ed207093920504352deb6b09d770d016ac4969db1215978bd17b6cb9ded2cf7d04dbab5b9bfe271dd37336318e8cc75688132922dee75b963cfd200229d8dd01c0c3b0ab318783769fa57499868d9de83800b5eb91427a777f8969bad656eda3e9149daeec0ea541cb9e04d27a25462d3ad20dafc581a12f80d46991308a7c1d4da4b2dfc7ee9fda22156db11cbe8a35232f3bff5f60a0c7400c10d68e2511e14cc2692808967099acb5b1f3028a9255301c89b71f185082db4c0f2825049ce4518cb0384764400c9abccd6199bee579fbadf485fa44643c121d4b71f6112711bd29a1041cc66be272af1bd601d5334102c0028d3456bc19d078428a24624edf70affea29336a7f1b00ace15050d9558b01ccc82dd4b87f322dddd0b056f3631b9db50e7e4e285961e5c2936b6ecb3b7c57a87426750d85161d189336c82e88e154c5c184ac5d0941f6b41565aacf058dd611984c9d5b7456ec67602cefb6e5d7a93873bc15de04b07c26b12121f7df92fdeb2123d61358833d585e624ff26a7decefce01dcc13f04c01ada2ba746f754cbf2fdedfef3cee8e242c0ce358ca06e8091cc1a8751da6b76f4086824ada3850630a414fbca1d22e41009009f56b81340e57621cc643da4d66a37ad6b0f68ae5784e2d6a3bf8dfd20fd1edda403e0939922b21ce2cdd9e21f619cfaeb19b8b1ead680fefd4539d9688dd6c3eac018450b1148f902d2cc676f25e4a90eb9de092f485212f364b88af313eb910e82ba61c304b48fbf10bc66c1286ab64db2df54d40a18dda49be4f25a68b3103c74b2e958929e631d047a58f0426a982021c62de7329d1c3c13df4eab0d5fe99ffaf06f632216250216cc7496d9814c7e04a100d24611ba16836e62e5a7c5b9434d3a306380fb43c2052c94e9167e40d4403a6bc9a6e5d0406609dcf40f333c77b8d7dca8e214570c16a7026eebab28ac37cda7dd006a198ee68b6202bc6e9082e297460ba26096fe8086510a8bf7d86c5b451a2726cb40240534cb7cdf17eed00da6bede955426056d18eb93d02ed583f3cd3265c8e7aa9d1cde3c67b21be5fbab233a5900f62341e2404c31ecf288ee5645ad991d8e5f5d21804421fd9eb2ef5743b0440b19076bb4b8737f138a6e92316faa21bcd368f509e3059f103db4e96143da5672005a0e8d576d28e915caa4aa28ddf3b97d3c9896145efe9dcf19cab9fda96add5e202451468676ab2781ebcc69a48aa721d53aa461e56e4e3878f26c28cb9438f6310b0f8443c3b8ad89461266355b01e8c52401266a6fa65ab7e8414cb7fbd99948088066ce61a0dd4c5af0ff05653d17d41cd3c48e5a5b3c8cf0c0a686e206f9eb0b1e602dbf12be44de602f94d4b648a9e929a09441109db7f1d224e93ea852742cd18ce3c0fb5a10960556bfd7d1f88e7a9eeff1f5e7e875aad42a483085fe7df067c9da6bcdf0b3a9655e1a3aaec3039f7d2c29155e0dbb3c16adf70fb6c4740811d0fac3e9b309482434f7ec72bf5cb10f79551e99b131dec4bd2b3f11b35e72a0ae0acc4de63586ee8105241e5c6d929dde774c90d9985b0173245bc10f1d35355562ff4daada67c47c967d252ed76e2120a85a3bdf3a8fbf20c0788f04aede4d3bc962edd7c7440515b946daa62d38d3ad4cb3831946b7825930c1c0ac1b089abd657b31177c22c20ec5dfa147ca860b1a6f6653dfa33fbb3aedaad175f5efcb4342462a7eddfe2843e745b8608abfc84b61f64a28d39589fe4e69912df452be9e021c252439ac9ef0d5224aeb05adc6382cbf78620b60c1ee1f7a010161672625396a181d92e1af554f6334ac85ab1e03e0cf8d1617f9102df8f37b0f524d5ccc0d21d11316c776a4409cf4c388a213917efb7723de9d51466b0a88e7f6a85c9bd5134137906abd4de9883d41cc56c6212505df818637558ab261b4de7ad8b7aff07093f593884ecf975b31c475e2a0370cc911d7c47a1ec3c9365b47a62bf4b995146effc19b71ae1e950ad2d674ce1a2f1cfab538e4e75f54872b191b105d7d2a0aa3db25cac99d5ba2912d14a70852531b778b5cadef4fb59f608446085eb00ef854b70975cab5d6323d7df05a1db4ed274c2bb1f088a03295cef0a06cc275eb8e77700539e919d164ff6aa26fb9515569eb7f1e31d635e9cd4087753e5cdfa3e61398d9bc3dca5ae07042bee6e33851e3ec599ae774da2c97adf415feab0e3e3803d070a5b7e5926f743ce5545ae9e1d30e94692c166e805710c8dfe5e9ffa86dfb8648d577795aad30720cc9742ef0ffd17fb457a56623062ad60a06db8f9d7b07f8c6a1d2a9cd302ab8cca81bc22ddde211938cafd956c42821e4e66eff79d081ec55c2dcdc0c1f11680dd45a0bd77df4a2abe50499fa5fe95c0966180d09db4477532f271fc039cb87ef9ec4ba40a3ca0004b27e931cc74ed7eeb375c8117415448cec93cd4644393165d24658e197535283d4a5e6494a08bf79b0e1712ad03f75631ad49c66b2292e802a66ad819a71f13255e1a9afe90d1772427d2b4df783c010fbcfe849127f426f85321e03290140fc58cdb8c54f3b722119d780eb17ecfea2e6c51f309f02f75098268952159d1f54118e20dc939bca6d2cd28800951a3fb85267fa20d4dfa63f8590f9d161c16c30284646b77dcd21cf3e3ecdb1dc9c020e3979d85f978adb279e1173468ac4d6383f8e13dcac8b3e01497346777b32c10ad68bc3601de3c1dafa2948cea2475fd518f544d601f267ffcedc289cbeb2b464e90b70517d8826f392cd8683e6a187cface88dcb207f259254c03582e5475fb09d275939ccd4951c0342dd7419f583a39503d31a82fb283e30ba24a50bf0efef829e8982dda1195c7d4626a9b84c9780211d21ef48af94634cd2ba693592f3593ed30185862a9809363aa759d0b484eebb0b329432a4f8fab672b6b7a578b3590207e29c4748ca4ba45b8f2633e744ec588cb71ce4c5439806d79af27d6bc23a9c4660b80077614be1920a118001cc0b3537923dc8d4d3dc3d3bcd7dc14d73199c4172039f52e97c925ff27a22eb7164063e7948fe59d09e7947cec4aae7f6763306ac6db800ee558a9f677369f1b40670294751ebcd6c8ef54f1bc768ba3179d4339d37cc3426c93ca77367306c7aa094c2d51457460c045efd414b1b11d82e2e51bbd320496617bdb4c5582ce4e4ad65e599cdaab3b253ee332e62801ab919480b5b108217b76708c12444f612fb1952746295a3842284b6c0176bc639b7f1ded209182bf3eac24dcc70d0518beeaa27a1c1bf2a39817d0dd29f14cb7efec5e08cc12634e0ee45070a1ae119349bb9cbe35d31aaa3007c00ee27ee80c419e748a62914ff81a9ba2185df6550863cf62af9cdbbc23e880edfdc83ecc041d233c8db865794b07251922f415e58bee7a1f0a0cc17dc5373bd5649560f60a33c4cb00f99110e2a3d75b62722f0ac8e45b27b612e16b179f168171e95f0709a6e6d0a470e9c5aa356fefbc454aa146f43de53b7f17a83a1560783046012062af4148f4d1f48580723d47cbe58ce08228ae9826054fd7be081be4fed4fd95c4747514dd3b797f605f847ab3a0f1dd80b6fbf1a79f29a0595d74d0671f9591080360462bff75f3cae897a743ea272672e8082f6f26188144dd9a254ff98c22ba82436a8c5c466548f99da78b4748875b7241f409aaeeaee0785251befba217f06c3e9cad5ef405bf99bb6a2d83366da09260062bde6968471bd05a0f05ef7f5c4da2e229512c009166ea1ed0ce99c1c2796497e23c8d7f512b1a685841c522cb6bba36f521befc5704b5b6ae9ce19dfb5490bdb64ddde8ace90fec9516fe83b51543199208b33b86ece64b4f827a6b7ada5f882a02e05df76572c8c638a32aa4da46a8b3c06a4ca4059162abddc944e3ca4d685cc3b8a2c9b9e1cf4b0ab2b87ac6cb2f28bb7ebcd6d1a4a47823a33fbbb47b7098bc45441f6cea986853b90b8f78e447ebb6dc2443b0781c7511c933e3df3b465c46d7c90407686be2467e8a12a0d2750483b233822feed99e5e02aa0c177b81df01de70bb823044ed33e88be47d8d4afc2a41e951e6bbb08e341349dc04634e8ffaec0f1d594e53985e2ba82d767da587af118f7290da6fb3781ead2ec6901001fb5796978596a1ef33213c799d2210282947a3d42a734215d3b12714a29e5e682e41fad2ccd5457ec549a55863f7772f9c05e39fad78b65eef1d81bfd6d5430b6d92382376c0d4da31145024cd11d2b8f43dcc31116d3a6c420ea3c2c1be10b8d4ea1267e8c52d53a24cfd3becad1c0ab47578df5ca72db8d8eb5d97b344453db4088eb707cef9b5b40ef6dd6e2e42cb40d09ed1ca802d4e948f09677d3107393e1618118a3900cc5a070702c5543bf7b79c14f5ffc1d7f65da484a5dcfc5ee4b48070122b5fa54d357ab28871ee2db77391a1ff1ffb456ee8d633e31d8788c3ed2499405c273baf641bfee8d9fe0110ef01b3c48891315400270b4517fa2443ca88c341bad33380d45c1d7dcc069a051c74eb591f8d18df2b9cc28ab40815dda018c05e3bdbeaa86f0aad998aea91ed562b3c9c9eb58bae76eb80ac06c34406cd7a14a55e5c1c3ce3e4945aa25fd6605979bdf2a77b673b10a83a0d4ecbdeb96a3ea9a39e4656c0039b53e450542357590bd8f61b02da52eeda32ab2a15fba66f1e10646e089c28a41b9f19471317e105e378a0619874b3a7a3fa7a555c354b9c926248470117a356bf4c742bc0015f0eb821a0631e0c2ac1f81fb60e71efb346dae1efde165c7d8b5fa6bfd31ae224c6ff6645c6567381b6f2f7f1236f44b13358a44b585e708c5f3a6551afc7810cb51d8012a8be4c819cd0388f97f4b045d820372918856ae7bb4157963175809eb2e512d1af0c8fc3ee00f430c10a89cba1f36ddbf74512e1a75a714e168643f0f40a4da5e323e83e366fbb0df2a6163ca781182f000155ab929d77374df1af412e466afd7525ff89b7780728641fea06cea9c08460cd887602ef770b0642fac52c20d5a91c78670ccc901beefedc0530536398739888571404ce013f3f26228383c1f6a0748022b6e2a0394662eea0a00516777b1f1673612610f8379e65c6c74f3d29e6e944b1fd9c43261998b6fa17e547a6f6536cd20c1a84af19ae4987165ba8a9724b006eb9cc9e35f73359163a8d6bdf6208fdc11a8d2b4f692a0380381ccfb38966ad011f8b550d144afa8097404244a3f915088cb022471761d3efb8b94388a00e7385914b6119929814c805258d38bfea90ee4da7d7ca548f63a025d18a6de2f17eaf55b86409b3190c9a822245a0a2de6e4d7feb22ddb6a043857da47944effeef6235aa9b371cbf5ddb56295d6f3d9518bc8e96bb42043a6f84b01ce33cc9d2e5f42448b3f8bd53285c8e4d1831379e67de8890f3f090b2eb40616864ef8a1b55036de34c1ed8a186eee3b72c7a60ca3a66e474a8921bde47c27c5271658fc5eb683f1e23c1e9efe94774adfe6bf33792998efba276ad1ec5da90c3e1468a872a93b73c4742c264b67cc49cc71168e7ba78b3bcfdfd00217682fc970587ab590a8c27a04e1cba51e7ca0f68513719bc3836b1930940e575340cb49c3e2aff21c408172eeb72ad4ef822f4d8dc628f51b67cf233204eb62f1d32006d205e863f578b3f1c014df5d37109c23bc9937d1f29a8d6683592795ce237f17975c56db4209a35bad278e7e162338914bbc75d9a42e170a7a30cbcd82315c668dd82a09adab1ecbe2473a77c8261b20ea5ce4294d8a644f1725a235a44ed93b938177d3452c8d4682d33ec52a1299ea8f48568665f13b7b464596b0e1f722d89e8ce449804483e27807c6c509f78831371e79d91ca131f97cddcb0c58409470450b232978c80510e2c5dc27f3fc8d25e4e7a6165a0ae54d9c5d0162b715ce5d38495a33c1a17849875a387c5cd601c4f6190511272374462317cbb6e4c50d7d00b9834d3fc7b48701153383e4cf9474c0abef8054686fcfd0a22a80a831e45905b8e66c61b2ae9e62ad7a8e967f42547493775eee3b1a8747f3a622f58d5ec501eb6d17d420a6869bf1c1b6b6918e0a2953977e16a39c344f3913fbb2998002e0d0e8b21158e0598e8b7998b19bc3b9c744d0966ef7c2ff96079cb5922c03f5e048054eaff6f07145af844272af89f946995e81679a8161ee84939672f77e2acbfb4c666b1ce8e50a073f062c9108622f688aeabfa4c51007b096ee1a19ffd014d7a304aa1bff1fa6345259aab1fea8c69396513562b84ac84de3f2fe492c92f6890884febff1e28c243ae39125339e05effb56e92b8285284a71f9d7e5ec9aac69a51c8bf0384dce9a58e70419d1acf6705e6240f3a40a20cb6994870478c62ba73446f15b9dea717025cf05b5a816d0bfbec99223627484bbb7474a73fbd8cc770125d653436fa3c2232ed22b7d325f95f05ee365041340856fa84ba26e8216385dc51dcfd8f6aecb6868adae4a24a70287148e7c20d8dc46f56e7c2eb1c3f09e5bbeddce7fd54dc2dbf0076dfaf94913aa18aef7d8afc12d00be802047e2b4a14f25b7cdfa1d5e9b194419cbe8de2263bd85de384047f12a34fadcaead2d8496cdb2b64df24a17ecfdf3b85c33673c4bca22d08ef2f49fcd4a832c75879e4f19e845571ca14420c53efa80ca93b6562d3d44fe35e048955a5fcaa49085f168e42ee11577302288df6758869b65b54468b1d690abbe01a5a487caa5cf31e47f433c541aca77fe03d950367e1e6c5f124fc8711ec20727d32c390684467f7d07c528cbd518061c32578ff5b0e17c0cd003e05aa9e70d5bfffb3cf2740a3c3a93f21014d198c0167ffbf59d68ded25f1a0c3252619b7c1367474384b9acc26b102e6adc4c36c2be196f3030ea6b29ff3c150f08e143e225f79f9cec7e1fc201306c648b22671a3e521ef001d848531bb5c5996ac727683ae7e6cddfb65bf4b74ddfa370a45a7ffc770c97b55b0634f1ae58521f74c325cd86cdd763da2ffc0fdec0604872a1ab5e9267d25beaaa3ee990ae17b477834aecd814ba6496513ee7b75b747b46fd49148aa11bfedde562a56d4e52e0737324eb700d7718f73edb792b0b320030962a8383382b5dce4a44354a66bcd8193c10837f1c8678c3f510beed59e85e362763a23aa6e0575360b5f6867580ae28cb06c1585c3c387a4361dc9bc460c40ce26ac4a3636ef811a8fdef4bbde5020e72090881b9fbbce9fc4f50b47e579ab9d970dbb75e69c72bd906e95c1d783ae81c3b5acbbfe39cfc8e6cdb6cf85c369ea55ec76ed7af6bdcf7de439d519cdb6806481e68d7c49ae9346c04d7e6111746fa6af5c6c0a88fa9085b643e64679dfc54d87058e844de0a882513ec1f1a80fcfbc91a48e7e04f20d12fa10620c710ffad14dd4b94d7a05ba66e5894b55eeb69958eaae60d6898c085c56fc25f2cf2f3a43b2fcf2a0c836b5d8c6d70adc5d80faeb518fb60b517671f5cfb62ec836a2daeb6e6318804390a806c9aecd31eb20f61761b5dab8b607c55cbd917abbd3cdb62b596b12fa6d632f6456a5fcebe58ede5d816a9b59ced22b596b32d52fb72b645bef69fdfd08984c18a9ce81b21fd5d839ce5625e03dd7fbcead97355dd44c4a641cd6a194e6c8c52404e40a44a595069af4002729efa1949c8688f61d210325451ee9113b0e8e893830e62287ec63fc25d5c92cd51bbad787a4b436ed4220d721535262f63ef35807d66b898d5e0ee83b8559aae9f43ac85cb98744523422bd7b76d3308df048cbdd9a4596612daa69d40d57aa871a2838f910e9cd590373f7030b8dd4432fca47e9c0a31387f22dbc0faef577ac2a1a59b75b699d1412b743cc6a13899206c57b15f41f242383491bbae9851360a7332583d34f01eba32d065d97145206d651cc54a4b135f8f290fc9533445d0c52e64fe69d1091ee5149b5a99dc3bf51d16c96c549df368184924f5f0a5207af0de1957889ae73b93f74b8940374d156930ad053b45bef1c5a5d491b394706d2726a901d10cfa3a245802e4ffc4065c41e02e905e4144badfabbe4a25f89645598e8309c0eec7bb6f68d68fe4f45fbe3885472c91c208a021c7e59661cb13510eba44b410103402960fd30978e5236058bd695c52a35ba3328798185f39d654c371fcf280a14e25c0c27d1b797d415f78dbea7939da246029028445e65e7ea44067be4d946824799b470b45b5492e6b3a25d978c0153e6d28e1ace0f5cf31929c57133d5e87439c45740ff0d994147ae35def88adacd15ea0d3f24a1c2b9b59614a696a071aa2b5f60a4aa5ef3200daf6f2953dfc460e03ebd7ee764b71257b6849ab8eecd66ed25d640f2de99ebae7ad329fc07fc780cb6dafe445b5b19f34a8b66c2ad843c55d8b9ff6f0c52824b4011057d5c4a57b140f4c0a15ae4e74c9070063ec7e4bc9cb12a95e0a8f3efde51cb7f143636c3f853cdfdd773b6b8af515dd67c0945160168f8d1dd37df1262eda42eb7e70cef2ebaddc9749dba0f1a82e2ad5d3bc80d574a4e672d57dd448e5417d5e00984859fbd152cb411e41278836d64ad0848ebc7860a43beff70dc4f8dc91f291fb106a3574540b5a033c183fade836c36a8c8dc559c142650bf58ced39a1f58dd7abf16da03e24fc3a835a5aaa8b364b3107d4e4a82266c57bf64c8ea064b6f918815e87c40f8aeda884285202857625afdbe90b65a6c35b31d1d807dfe8bae12fa31e375a84ed9caf986698afe82200b951175ae1cff646f810b052eeec16b2676510fc95c9a162197ee37c1e7e3892b12071387c365b318372885f3039a4b0d710d93c5ec1f16140b195397721dc819641cda9cd43760149b5ea689e16318af7fab1f4b314dfb74de2fd8e856588f0d36f6f46ca4b77514c4b75bc5e2a5333c9489c4a21dd4bfb4a31a55eb2d9f9bd7179e25186fde712256363cff27a90b93396104e997683a1176b2691727a97e6f5542c20ef80cc8758ec72f30921080b41c879bd8e68823ae72cd62bd3f63927f8daabec197909a60d083ce9c8fcfe1a81b622b197cc2c5568db2fc4b93b4cd42f96d753bc283d7adee5217028907101c64ec6c4059736d69e5514db0521c6fb6cd3f905f0a9e0afab27203274fbc6551b7316f9554c20677c2bda57eae21c725e084d2df33a4f6f496c4d127fe63470d6874cd0276e10df5775510cb800c684d98e8879884801b22cf209066742c677f311c3612b8efa1aea4d27cc91fb150b289dc3edb8eb99b4fb6e5e3d63fa58fc25988d0de9bd8770a4ca159d11cdc38cc5b03db5279cb2474aa25837e58efa7de5849008192512f579f587c4b06318dd8e05ea34a35a27bae2f3b1e2b0fb86c38551d87b3c3cf27b246ce932c5e34cc5fff61e5fdfb4b671e7f5113c745f6c9ee4b1e45e6c55d5eea57cd70f3c6b34b5a28d4a7136831684eb4dad1364dcb1cae225ab8e9ed81d2e24299965dfd177d50e9e6643bb9adebe4cbdcbf79ee41e9e5cd4d163e272b5ec3bf708ed10d382f0bab32e4597557524bb02d2c82e584bc20b92c68219e512b12b66bba5168e2cd5e8b4c72f38bf66f7be0c6dc9c4b930076fbf19ae056cb88338da1f5c0dd5ae6087aabd11b9039b8f1daa4be4de2fa94f0b9704391dab4d34fbbb720102e2c4c512d606673f1506a1d094f1c15fa3d2389aa101d1da1620dba0b330fbb2b88857a0602d7b218c5cde054047016b33d7dc2c2f5609e97502129172053430394475e1b2ae8a0c3e761cc4e227c92226c6c4c5bc0b8e941ef23be2a2b6c16105797031b47ea72c3e0aac47694394768874557643c148c16c6daea217e49e4177a6a95f2da52395611abef1b49a7f5165a53c40fd3600b814bdf3d18307d9ae246a436bae774ff38c232c158040c59fd8abfa78cfd498d942f515cde47aaf82cff858ab53cc031942d4d1c1a1edc0da2a603b64547003a00133d810035560d0de3e04d90707ac91e530a75c1c8a297053e6aa8f863e130c83b572c7473147ebaa7764a027fe05a659b8cdee0b4abf7ffa56ff85856e43e7de25de650ba0906ac3f02044012dca3712362c68ece80daa1d15cffe881e1230e5024b73759393d2c6c4d84acdd0e35b31a521f2bed28ba43e5300162078737cb8ed94446649022e578ee69d1638d6f461479c3f45e33d026d9ced8683d58760dc6318fddad98d5439c040334ef6b39f9213820b29a620a0407677c8b21c29879b917a3ed520dfe5a4e6ffbd64a44d598d19f9172674d91d325777ba945c922e0738b6d71604b6b5ca97080e820915b00ca24a9add4d9bc30b9a0a2158c41748f2b2ad7a916a50af033e65b00309333801bb3a466d5f01534998bc97b3a18ae5d5bfddeac2f20877da23de84f1f5ec35f794fdb7f4a60f28180f563e10cbfedae0ed0f82b004288dfaa657c73c2ad0f2d820a64b182f769abb3d0abf870b5856c9a307de58b9189f497ce121aa3f542a738c1b7080e7718c259b2423b622586a2466e22e82b446a25cf80ce216e4d94912b140c3b9fab21105843dbebe745e8c6e789b8415c1f1c992b70c840e4321ed1309864160e4ceb76d7fae6490f23803e9139507ed094c76971d95d1572e9fd1e30f15cdc9ab20965b6ec028dba51dd39e2017125c9ebeca9578a002c4f6253c0d8e8a8fcc1835bf9e5ad05926cd5997a66bcef676512bac1d7bc76454f9cca5a6a18b58c790a1063f05dbf84fdb4e64c74f0cb779c43817453ca44ae0808f2bb6000478cf26e3c90d7cd5274d28da8a5cbc3742342caebf17ecf99f26231873257b0f7b2453198393ae737a2e5883823b8a594b27a4fe14f77c1cb9733198f43f45e6b643080ed3282b4f626d440deb86af0d1618a1d0a7eec5c77ff08aff8a5d55b381f38fe8dc92600a082dbb60afad37fda428c442a2199a22cc7d9b4edd471c6645a5aae7630677cb6630afbdb8a0c4621a894fa23c716212f1f6c07fd5cc08e1c6bee8c583a7ca84cddc3ed51f8f17b0457ea7b5471493f6daac25da745fc376be4ede98b1a0987ad797538a98b4050ea70ae339615f33d091c201fdd902158b58c2dec84262b401f90651f71720330f9d8521c480b0ff71f78cc9620f112c2636acc0aba87116d3c998a590a2225eda17e0e9acdefd76056639ccbea851bfb82438f32fb61abe49e7f337b2fde12e1021fb8e59ced35e99f520cf81a875dd6e3f47219c9186f03028d69da9713980fe45bff662a17585bc182f39f71bbfa7b2271b46f26d70457fe037cb4760d63dd6771d4ec0ba3e9728fc3f2b04481fea9764fecc09094fb8fd0dd207fbafeb678725975a182b1c3a636256da72b7c82b8b4ea18afcbf02c08b6d97125e1304eb8e4681b2ef259653e86687fb4a55f346fc603df1e73e73bbf6f6d764e61f118b13effd63b12b2c7e61f15045388c951dba5cfac613f3aad76965e310264f2387e442e5cd4c8d45f5701ada4cad84e5b287d9cfa094a784176a8520dac356aa61e50a64f91a55793a0ff9e5c96714d607f27abd31046971352c4dd5b09ec6b5e612b7a5783b5b1d860a06d998ed179187a6f853015f9880c08e2de64a44a0de09fec4a51d0e53d342fc774612a1c53c48e6360b0397294e34cb931d73bf75e20c23576d27e18f2a6c9993300ed576041a5534fda43bddc4835a46b6346d764f92d2d0dee024bc48974da203512e8c092dd22306ccf1c7d272aaec36d9fbaf23882a9ebcc62a0c8c713111fcb7ca7a8eabed33fec00b530b2b755345bb3752ea0d549f6ce592f46c65914272ea030f98f5df33e53a9c9abe37e249b6dced99e158e12c088b642f027bf544af8d62243dc141c968055ad55133e5a0731f39ca5a74432a622465024d6a01b41c97edde7a15d74e8d59e5349e8405549f90346a06c65cda1074d4762686fc7e38955e7741d01e6a88e8f941269924fa9e3b5da11496b168688cca7d7489115779c0d9b8d1a07ef156de173576011100d3c8ebfc78942db7c7a7148c46a550fa99f6801a2dbaee677d4363d0711c3a1a038ba2c091107826b610c3272f8d6a6f7fa939375c80256212e4171577fb6b7005b4de88e62d90f905307f09e62f91fd4bb4df9548e0e997d92b9611163752ddb663f0ee18653ad55e37c4563f50c396725a9ca7f7d934112de9c4b8e5ed532805154585b6e6d27a1357c9fabb5d76479c6f03054e2a9556b97ed59f46f4b7cb11d2547d3ab18f25f37181daea52a59ab5b97bee9e0f14ffd6682ec97d4ca0b8bb555227266485576bd2be1890636d171bd78bf4b721627f7e696682556b23e1e6803edebb3b994292f62484a303d3e83ed1194a860c038d53216dc61d902f3ae4171907958495e495c476175d111658476aa7b7bcb949cdf7f48a2ec896b5d00d9a67b9df0af801a803462f6c027a7923a89e0d5d376a8af9599dbc6e3ac332cf6eccdbbe0869006d7388ae27d733b24d98ca18ab7b8b6e4bbe378956afbdf05e9f10b99214568ea06dedf7880528ef5ddda48c8f03a101f508200c18dcd9694365b4e0454458a2fa04295448e8bd8a45f4f1ebef5023a2a4863fb44e155e7a715e8ce45db78c993536454e6c6cca0242090d26060ed7344d348a590b8cae430aea3a1477d2fd454d1ea4140f33f5bea5994a133d1bcbbc477b072d9c664879a232e8bf9af9970ee89b2a50f892c07e3c308c4c102403921b6ebd944748528acf1cfcaa893cf280e48c5ea993483941b3b060bd497b43e40d6139eaa23f865585c8b3bfbbe3f1f754431029820c3a0969a3402d68a3cadc7ce68fe4a4291b452515d1c4d41a101b95a0761df5f11e7b7108e162452b367362134f11ffabcf7784876a8640b730ea1ab132b7057a0a34ffc514d82ccf6ec18ad110dd8625d7d15348770bedf7be70bfd2708cf557c6d54cc850ff08b5c0064f5d23c3b901cf4da625e1dc4a1c94b7deba34b56f7f4f956c6871367305c7bcfc9e4e413ec574f31d3bb8c693a18c85026e9c05156bc8b8d9152d9f63bdf896b2542227a5fe4f8f378df37aaa116f9f7c577e18c003c3b69e96f818291edc01ffe467e77dfc48ef155924a020f1f48be82d2ef9fddda0a3dd5ce3ff063a5054a0ced1f1fa94084431874f1c38f96ac432cb91de541b9af4a10dae1fb8819e86a47749e15c31ca56e9b5a41e6c776c1a3769f4706827541c6266718c5c940c79a8eaebf4c23955098a2e36a96a5df40914556d46352ed715c1e57a6550d5c61d865a8e13040dba5095a483c4991ff030d4d9b284d9e332547344aea26703a9fdcd9868e39563bfbf65ec73b043d55fd00b70b1861ba69fd7121a274679cef420d4e789044b18ca0c5fe7b9e440d8f91294e8ba76e95afd1ee1479d05bea9b019213ad637881780c2035e4e083203eb03d0cbb55bf49ac2865dc16a42cd70d4246dfd20b4412bceed9f8ec24f2e09a5ef93927cbae7f354fc1c7a577375e0d0658fceab7e536f77013f7f1d413eac2ca12c2c646ec1f635a440af9c612194926c31c0e65f276ea070925f27fc30a7ffd1839df851fa05175035a5243b04427af4d4ed8cc39d191f849db06c258b488b385fe7d573a7ffe53382748abed228666680e7e38522be70111ff434da5c42da32ed659a32a52842ec72cca2c4225d4312da221cb7f4a9d0cb0e29ed6740ed74fb439d565864f729939f1530060b09eabb93502d3e914265a9c8f309c1799434933e67331ba385711c9944d8243d2697072c5d57b59cb9815e31e0db47847745663ce38199b8aa750e10195efb284d48d84f898d85cb5c0722ec90c17df708aabfe8486197e1e5f68ba4bef658214ea167e547c4f071d7ae65b656122d65af178e51e4591b274edab703b7c3403a2271b2c2075630e6b54823e9faa495f2d3e463ad4ab2c3e24414239906f2847d390875898844260f19d4dacd6a39edb2d384d90b9cd696c0eedb51e9a0bfa2b864299c8d0a5c1c7f42b69a4d277e30bb0efb465069e4ff56cb6c5a0a53691a9948d509e768d9332516de50ebf10f48206aa009b656be0ba6114764465d4214801ddc2aa2b9f464b234eecfd285b25f2b7995cb97e64895a3e32779fe08077039f7aeebf576ebca2f004c0313fd78dea752d0f0df5a40abc286b22d00f73496be431ee1a5c4029b1a9529b26b1b360a1012669c40695354739860b40a2872eecc3ee8db7f4a75260933465fea03b394299333170f13de53b2a3dcd03f598bc9b36ecb4cc4ae3a868eb62f6d5f197bebbb57ed5fda5fb9bbd3dd4fc8dd015a5d7b6bd9d68add4bfb57d99e72aa2c593ebdf8d1a20002008727c8918d8d4093c4f181a610a845e307099a19b47c32605b2b996f386df6733abe53a9291da54d9fbf9fdad1d488144416bf5f4cc0b5025ac8e2edfb45d83f815e9f63832800835a9dcc86235348103361cc735b81725cbabeae53a841b41ccf2ed4e5422d924b022f841b5b4d6418f4f7c71e7af5805e5fa27192d8d8d0f976702c4b40b4c326ea628c2f08d3cbc333f47002c15ccc0b180bc3a51dd4a38d146e592de60c9fc6a409494cfa4eb845e1845f4ff1cb4eede09a007fb6b06c60b45577235e41f6d852ea7c3e70ce8e26cc6bfbb533eb78de72cb92955a41bb40e04464580a6be9b1ce4d1d11f2c6f9bb55618fab1227363dbd96e3d6c49890ebbbbec195f9fb1ec6e87ce9b0464333e4d7c40d2dd43c5f7bdf78d63568ebf83ebe6375680f38758227e68487cab843182a74e85f2923dbb74bccbd157058bc10ed58360216a1ede3aedcfb60fd26b8cced3da5cfa69f674b8d8961dc054a70c05a7a05ed01b3421a0593c96b651a12a819040011b181b7450fb86fa5c71846863e436fdacc81623b832f45500fedbdc07e67dca0aeb500c0c875c5809fa7babfeb9262b5fd86795186c3dcbc10029a892d515e405655710ecaa58f381e5edfc99adc3a8b13f0cc6eb0d84b56122bc735a8a65582d7b59bccb56e0bcd7a9132aba57a2641602b19e8b8eb80db47cc5c15cbb2a906e66c7184aedf3cffcdababb5575afeaa45b57decb57bdddda494294919c504030512053f40d9cc6616bb57a7d315e9727e96b35dff2ce764f396cd4ec997ffff0fab2c84601c89b35cfbfc00fd2c71201dbb2ea99aa55ad16b2e781e0ffb1beee63ff63dbec72522e5debdb5d69adaaf3f4ee3f0e3c69718191f57fb4517a0d0f901b72e5f6a7b2d2da3c3a4c0db17c486cf01b696e4c367b94ea51b4f3c5a48454838f8ac26dd80d40349876403120fa41d483927520d54ac4d6d120d3eabeb0c3eab49e6677525c980a4c36735290624229fd51506a9950a0b59e9d16834f256dcb7fd15d9fe9ad8fedafedafedafedafeda4293c96432b1b0fd35b1fdb5fdb5fdb5fdb5fdb5892008822ceedbfe76b6bfb6bfb6bfb6bfb6142850a040a15aadb40e4331c54d91e2dda6186d7f6d7f6d7f6d7f6d2d61188a2952b4b4a850b182c565c1e2ddb218efdbfedafedafeda548cb6bfb6bfb6152b588c238bd51a1dc0b670715db878b72eea78dff6d7c662b48dac7f22feffffffffffffffffffffffffffffffffffffff511445511445511445511445511445d17f144551f41f4551f41f45d17f144587886ab5aeed7691c4b1ad6881884449707777a7edaabddc558772d5f8be8b92f0595dddddeb7653144202bf3b09e7dd3dbfb66bfb17e7c739c475b7ebde6d97b9ce4464e28d4e48271f4ac974baa7d3bb3d9d3c3b4778ce1eda9906012d094ab10efc4a4daf9bed3a45876b959b157a6cd7206ce5aeacbcdb95974e4e111d73e734fff63efff3b707faf45158ac878f184c56c244f6f26cd77e77fc1ed9aefff23ccd47bfa4219fc8b994139548241299bcbcf4999baee3a7f3a4270fad86bef972daebf57abdbc86ded2a0ce344dd3345fafd7ebf55aa1a0a0a0a838a541fef21b879d3cb41a7a9ee7799e30180c06833d6a7a699aa669ce4cd7399d87fbf33ccf130683c160a6699aa6a9877c2a4ca7e5b1345b4361e7799e270c0683c1608fa6288aa241fef21b87792c749ee7799e30180c06833dfae8a38f3e1aa2522850a854ab950ec3771b96605cacb433f3c6799ee779c2ec0983c16030cb43b335f4769ee7799e30180c76617f61ab950e43514c91a245c555a1e2ddaa40296f35bd699aa6e7799e67cc96766675cef33ccf7ba61053b4b4a850b162058bf18ee3bb1d3f172ee63bbf2c6f7a631cb506c194bb7d295883f40bd368218c6f1aba69be29bee9bde9dfb4a565b65daf90ad20b25db398b1f06c18c31d4707b0362471ce76cd325bb7d57ab72dee0485806e5b6d454cda2974f0396d97cf1a3de6d4354cfb381a2e451aa6d14e38eefb4070aca35d8df8568c9ce6ae945d75f79f5f0f0852df9e1688a74104e7123b6a6c6628b144f4815a095409daf676dd5122fd682cb8f7de7befbda42a7c56df7b00168c31fe7bafaef7debff75694ef2b920fd82fde1eeccaef553df7dfa336c84d21b55d8cb56f848949825add257efc70251cf9c103aad65a3fc7791c8fc3df8c433e32596badd5fef938985088e09c4b2213144fe4ddf21b79231955d71c4e461f9767bbce4e726cd7180c4c397ca398873f8f848352329d52508860bbc20f1512cee3781c9e84f3f7de0b969ffd8f65c551cf92c2f1261cdedc55a34632aaae2fde44b5a5be0668241fd9dc55ff3f0ff9e6abc3bd45942e34c06031e52cd79f0f1fe9826cd142a778203bb0ad07446ead576b4dbc7bce3de4367ced9e330e5dee3b37b1a2179de89be35a2e07d168efe56ceebad586277759bc5182701573a11fa2b39c873e5f5cebadd5ef977bd4ef36b745d8fb30b4f3c65bc479dda89a6c9420265b24f2b2787296eb244edf792ffe63933d84a8b6e82083ec85569c2a94b92e74435774213131b2ec8c3b136badbd71ee42897cb072d5f8c2b25f74213531b2ec5fddd4e78d1f444d02aed58fe3aa60830d52c017dbd2c74ed6c9ba59575e51eafef7e2bf18e7323bd76551373a199da0944ca71415a7f1f0a05ef39ab57eba8eeb681d829ee3a69b620a1522b3594bca0f76d949452753d1cdb66b152abab2e3e98e743c5e6c05d7e15b5776a1c71c063355368947059fd5a10caf87947e2964783d2d2c4a5d19943e4b48aa4acbca021012243e3e3f3f28fc06456a34c45ffe4a31a2fcdc6ea9144a05ebf341d1ae448952140b8bd56ad1c245cb22a9d558c616f8e675a5fff8cd1ee1e1c18f8bf8cd6f7ef39bdfb08edf6c0fcbcac8d248650b9a477bf16224c3ebf9ff7fecd5680020952e3c1ad7c321e17cec8e8f7ee21bc8e9dcf0ed05876f5d6867b6e474dc85b9220e434282c4c7e7e70708c422a9cca1b3c2688835cd1700c0b71714b677a54713a5305c3acbe3e6a607ccfaf031e66275044000780230dc64a8000e1f3320128037002f95e21bbed170e1466a34a4060a25008f947e2ff886af47fbe964b52b6b664825894692398c08a82b3d5a577ab4aef4685de9d1ba12254a51fee3e9cda3d1bc1e87e9645d39a32b6d442f322e8e816fe68a703bdc117cc3377cc3374ea793cd7cc4cf3292f1322ca398981d632423c7c02e936b126a10df9e058483f09216561b8b385d195d0e1373fa6008e071319dac2bf1ede6f578b4241e4d4400fb32801021e0c51a871fc7a9a008213f84d800e5870f3e32d90f1f92c87e608caf8f0c63d12b4fb21f1eb8b21c57f6c3881099101e24d97729994c9692c964b0ff4b034e0867837c644b66b3d96c360bc992c87a204b220b2204889024b224b224b224d65a214fb0b6066b6bf871421392b831018925f828c15a2b3b2209a8113624203942ea4e01e5b3f86620c0ef3bc18e1d45a811610845e0e08043acb5d671d698e3586084c738671c20f761e7df2228f7ffffef2d2fc65e8497f7bb0c04ff104409e4feffffbdf631cef98bf8f2be57deff2a101aacf5ffffbff73afeb2340111c27c9c33ce7d7b67387f0369f65d5796652ae4924aa5522d2db596f2c3f9eebbdc2ec779115e86f292d96c369bcd42b3204a2058cfb31a443904670a384194419441945608ffff3844e01cfa1f4188fb1f01471a8244fbac0e02107e70c40742f480e7f4ff252908120f8cec00f1c30e4e14a91b646ffd21d623009af4f8e85fdbfeb4201ffd97eca0edaf137a1b6c72e5693ac4b9b9c9d08b16e4e3b39a0cbd4c767423f6cf7973e35089b35d8f13763eee689709285db5ee9ebffce52f2b0b17a82ccbb2ecb2dbce7c427652ea7ddcf51a890b331167cd62b3edfa63eef2e1305927e7dc724e8cbbf9e83a76be10a2da427a2629fd3ee775def4d1f30b87bc1e9b4ce5b39a5d0fee68b8837567d7c3613c5947cb6747cb6747cb6747cb6747cb67f64aff7c9a1d2c9f1e6d069fd77aefbde0674747f89663dffe71180ce42cd77809900ebc84c7f69a7b641ed947eef1319c96ef5f821ba7a6b25c229ba91429fdbc3d863ce86ad7bec461f28f3fbe498e3ffef8e6bf9871b6e617e952bf23c35eee18f591e482ef5241820449050902eeb018732bdbbf0a637900513f8efbae92d22f45a6defe8dce39ce72257cde0d12e4aed91287e99020f1f1f909ae5aa285a59eb05443452292a92499ca52faacac39ae947eda43530c76032bc54cb0522cafe895b0943a8adb6fc5dc5a4fa52c3b4fa4f64b33d3cdc3ac74d626d8c3689db529e62e169d752975d78ac3acce67ada05f4524b21689e7f8d8d2a9ffa5ec8e64b47c609c7328c4715d27841d1930784c4e91c8f346a3169196d99ad51759b74a1f3218393074aa595f64184464c0307dcc9a343ac0dd30669ff7d5e043d1df4846cb6c016bd1c3c78c3292d122e2630e855a331f73cb6c95a55228841261f4884c1e2a84710406ede4a14218b41e18477ccc30787ccca7534a8a4acb878f59ab8c64b44a1f732b565f64bd0a5134561aaf740e1a1da268687db5ce4173451c57ab441b1a2a8d451c58abc41922df3f0a101f52c0e4dc2afa8e5a78bd8269f6acfcacac7d24c305531982af14b6cab0357b6bbfa29c901bd8a197d45d39584250ebb0d2acc24ab312bea43e66bd3ab3fe4e56e7ce76c5d46357566c0b13043c40a0c3ae846c8c9b183cdc6571f0923ecc4bed5959731cf9ed979a8f19dfe0ab42f038b2c997dacefa25751719e30675179969286eee225f5ab11879c5a45bb1ca4248671d6c725573d921f13f4cd12be1b8c1b0ee1542f2758a5609c90b9cfbc509784a8fbbf28a9488cececfce9e910f1cd9599b68eeba3b6b53cd612e4d2be62e72555bd5dc856a41b545667db1b36ef970d70f29dde5c966eeea88b44c778974d6ad1c77d91e663e25bc710a4d610cb614c670c9566c67fd8531dc4d0a4f5ed29df5a894922558c92c9d3b974e24fe5359304bb487e168b22ef1f894744ab5da2633ad13c95229e2d964dea437db9904b99034959956ba658d923e4ca541097a956ec0d9678d5273573577d63977d6f5d19d517e76ae290d5f6d55da4555582b4b4459c0ee7c535f6411ec552d850a1f898376d628744adff03193abdace1a07e5d7c3dc5416ea76e15959e3b0c6b372c8352a1432950eb3629ae5b8abeeac4da7bbf0ceda74e4459a7afca4c1263dd4091e6c12dca4a9dcd989d8264d3b3b9b787636d17636d576d621eb9996d6dc455634a3ee222b2df7b8eb717616b2492ff7b0c9ecb3f38dcf28422eaccf729d758d87c131602a2e1305516d11990c3959e1759df7ed9356cba7e30be9ac5f93a31e39ced5bd70b13ed1334e0a75c4c044a44721e723a7b97a398f316e6ee4b4a80b533e725ac469944864a24787e95217191b77e1cd691a1cf7b2392e06f50728d876d5e1d0cd699149a739cd7d607309e09176a173baa62f57c2a3e0976079686961620636092672d824c8040e600e4c9c609320c884089450e2c44d0914941c61c3e98621dc408910ae83efdb7547c90d7ea0a405402841c1f3a0040446042da183a09f4d824508320204c1a01e5083291df443900c360906a1a0862012f80cbe13134d3c6193a0107493d5872584d82478c4123b6c5b852566fbacb19901ea518403481315e143870f460cc1061184e0c7043b644b18819022e8e00499771a21091f920041021f3841c30e2b90500412487c8270431325a801450b9620c11235bc7bf7ffff6badb57e40c4b96b055c41e5a69c4c25948f7432f244261d17caf8be5bce5d75056439a9cff251ecda5b6badd56badd55e7c5f22ce5d2c2f22ad807b85acb2537628c495752f374200b7f3ffffffff7f28ac34a653feff176f7d7135ce22c9817ddf1dfbdb9eb39be531178243be10c78d8654ae331179271e7742fa503c93c799bc1b72a18cef6fd18a9742b174dc0d65ad2393c9643299b556f640ac7ff9a5ffbf976009a2941c96fdbd2f2e2e323131177f1dc71b3235323532f5c6d4ccb8d8b8c8c8c81c212333da941cac5b5d1fe0d6fbd4497735f85c93a7cfaea05e1df330ae6dcd2df85f5f3166a66a32a66a19578d99899989f9fa3a66a6d69899fa326a1756bb98917151e3a2c6c4c4c4c408c139135d87988833de8538059f87b4e319346cf4d4b041c3468f0d1004411b346af4d4a06183860d176a646c32605f3aec8de58143869e13d096b12fa01b404032f480600ff811d17382652a94e0736d6d3897904c0dbe585fae6686bd363533eed7ccc0e28c8b5018b35333c3c605d7313133acbef6e29a459402f0ae4674aca0ee64a0ef085b4929c7715c96a991b9ddbd575f2deaeebd1d1792027e81bf5c646abc66866bb2eeb8b6f1f15d24adbeb9668604ee0c775dee5eeec319363bae6dae7bcd0c9fb1e28b0b4f2bb023430670b88b64293ff2eeaf4967d8a42ed89a9dba438314f615ed2b0b899999b1a9b199b1b1b199396b666cf09db191816102a7bb9f3368cdfdabefccf94674dcb06f3dd3d00e3e3e3e0e30ed6a64070d4f885688f85cbb482c7e2212cedbfb811ff89d408c3f10e78c43127c3afdacfe6b028b8e2f3256a6c66a52c65a91742de3a44c8dbbdc5dd7ccc8583d53e3d6cad4d818172d2e367cae49972de3b27117f936fefe1ba181887d65f6cba029b8b9868f302f217d4337a4ef02425a0257c7c858fd2fdaca70dc6bfbfabee5441be3cbcb23b15f43c016c0f5f7ec7fa9e1aeabc9bf30fcfffdffd3be8f957c1603211d038cd732801b555f28e09f7862a522006f8cf5c52bf5c5ebb7db1fac2f5e23007f35b4bc13518413edff1f8b39b678e2f1d16eb76f8a42bafddc8e6948a5da876fca1bac0e690f431412dfa8b6c8470dc034f8e6594ed2d9de834e65019386d84eea41e5483bd87eefc521f144c3b31390af2e61879a0e465830848d46a33759b587dfb36ca875585df5e7f766d308b74bda248c3c91c4a73b4d1cf972870a4ebc769488ed50e19684890090e0088142133b4a72d4a0040f1234e420840e2031aa0a6bedb3a04f9c261d7ceda33777913888084ef681c126732bf630dc0d184c32d36ce7d24722e65e1159e5c8f6aaf431af661b08457472ea68556bc566be1573976bd72ad3c7dc92b9cb5d2452b76b5335f3317fc5a5aae22a2a60007a5a3c2ae0aab642ff051607a5f44ba96832df45d2a4b3b396f1342e8743140dac555a25e2f85074f8bc059569a56cc52cf8da194481620bbec156cc6160b4ca1691964e6bc75dd588077cb48eb4622db355a475de56ac45db59832b945c29775e217197dd810b36e96d72f5a39ac5807a21a54ae94a8343d40b286ecfcadf8e4fa5b1ebab43908366a55521cab54a8720070dd67aaf6aa1ce816200d65abbd6228e18b84863a54311c7d52b11e5bad2ac340e95c622ca57a17e56ce27267c642ba60a2b8d0e556d8b48a8162083dd2b1d1fb32655e6ceaa223b6700a430cead35d99aedac35d6aaf3616658a974f617510c58e9ab5f58e92bce308316ebb356b59df50b77062cba8895c6455245db79853e2bb3d4e02357b5ac57e8c3a06888a48a67677db15689aaf35959a72f4135bbaa390c0a7385feac82b40e77d51fa69092a594c7cedeceab253bebd7cea4cb2657350ddb59dbf7525a0a7217f9522b019da5f4e5a5469a4a55bad22b110716512fac6650e995ae342a55d0c3a068601c5744bd70b5d65a9c81068beca8c60b2a51b51255e8b3f26351cd2b379969fa86bb524e3a6b18dc558ae540d150a9c4124ce7a0094b3acfca382c99a59eff12cdc794b084a484967cdc55b78f8f26a1eb94d0d63c957ca8440b1dad51c886060010000400e317002020100a85c128cb61184653553e140010597e3c545e3e18c722b1502406621406511cc3408821c610638c418a21650e2900729c9fbca5a718649eb11db1cbd19688a9447dfb4b5f80bd3a74159317edba42edd6bb97f805283374c8fbe3a64e6cdf4833e9d1082395459ab58340bc7854b4503aa8d7877abad807899f05e9a3e55c4e6a0f84b2b1838494176784ed67bebc00ab415bfd34018c13354d22e888ac3544d0421c63e65c994ea0a07aa53622378717c12dcbcf0a1d6c21cbd5a1a148c4c359060a61da5165e826410c5613fbdeccb4ffde95a167ed34a223411e31b7d662af08afb9cab08e04ed2a93a1849becb6e9ea31777e0a28c33dd8b5521aee2929e73992dd5d4a89a132ef980b0fe3a38656b0773df475c5059a5855605ca3ecb88936979b3c0e6fe48ca73a81710b3b20b2d5d387b64f9ec5e3e525f116b5e092f8233b684d9ab61e4a24743ed6dcf8bcfdfb6353d2482ff7ab1ba62fb697d08229537ecbf712ed7dd1c4f658fdb259f614477dd9a9e06536a83c6653fe786191462a19e3834bb96c5c158b472b80ef5ef0b3aa70a05cf6a5172b39bc0e2477eee294adaf2e38615cdbc106e26aa4d9737c558f5295d311fb1c9a40dfece30ed0fe5a9b97d8e422368f8b778b0ded31152fe7cbf350192eb79e2a4794fedbbdda1918e35a7d1bb0f95ac2529a6eb9a06388be383144be62d83626651d0110e0a03a4485bc5d91bec2f17a83abcaad89195a777231c1617572a5f3bd21f56f73c57cdbee8f3ae49ef3662849bb310bbe3c4f2f73aea43a073065fd2b608fb53ba6ed0455fbb094d380335bc708fc2a5ca07c600333c87f73158f94a681fae4d1ca884ee9e2f63aa3ccc0ca944665d143f8df34d3fa6b18f559b1794a175ddf001ead64c5b0ab6e560f507289bdd666227afc94620d77b83a2b8ffa851403b5b7be9a10f664cc1cbd23bf57e620d4666946f8a8b66b47416e9181630563d6dc10a9595046e4c392ce355a7da7c52fd8429634fedaa7ab602830ba23c0266779c8291d99581ca5f68654f864d5309f9eb0b648476887eee943fec0f299189dbdaecdf398c8bb7365a801497290d6fcd8ec8c6adec6d8967c543d29cf631683f3f2ba61b1cce6bd690a8f1670a31f8a48f4c953d4611ff37910dd04ed8afd8a3156488acbc0da79cd2e5770f07335e25e856f12c727b3dae11d842e7b6e35428cbc08f400aa26f3b2569f408fe6da869c2c97f60545de86fd08856ada46098a69d63db5401e2b40b9e63032fce0c23d76bc84ad9a51e280c5eb6d028f51e5f8132984c15c6875fe6fc965e7ebc6831a2b6bf950973ff5bfc5e8fb2860cec937afbae180c2004e28c2b4ad1b71cb2d83a28a88293cbb3fdb76ef5acaa2bb634f92ab2c86ebc90a427842b443599d2d52502c9ebf9d90609303102dfbc56eb71a3fe96b8ac5e02cb9390cfe5537e187a30b0462e6270a81796daec5d8308110c99f454918860367cf7cdd49b3520617a2f33f48ea3ff2bf1c78f759d7b1fbdf74fcb552474806477ac8ed20ea55988c7320baa7e43e037fc6d0cd660d285e79f2aa2c5c796e82065e5787e3ca0620994b8eb6c53d10277edbd4ac819f94428a2b29bca1bc114eee3bb512304e24b48fa0117f649cb8b2120d2bccd8b42d0d576a603832bff449e2dede95dd05406790153c9df6b7520c35a1a5ba3d935342b9e8a4544a2a8caaf4184bf9de3402b3694fcecaad2cf65a659024d896e93762f159553783d0c70114a87142f0b0d86f8fa053b13ff5a8177ba253f2458e1fa85259ad7854a811ec97c5df737854bb3e15608a3a476e623982c6b9894d3ece9ffb2ac812d479ac85375f4d04a920d34105e14b7c1077083225e38138def4d6ddc08c52ee5b16212317ccb34abef4d26203567e2884dfacab51abff9066b004e556d1bfd3490d29ba2f0c6b1dc8e1c5ff120e00e91040c2dc9ff8a3c580812d1649f0edbee447805e972a3939318b6231046808ac118d04ff44e5a59589882c03023fa4158d017d20605a60e506968da5c3e158b1fe3d0d8f665d14a2fb07b5bd8ff39fc60f5f791c0c648d18b74927308b8197c9f8abb00eb71b5af17c8019e4d812ab383d309d652aa1d9253e2983eec3749b7b996a726bee55c8385468daee64afdd9b78bfa9b234bb0bdcc8e35a91eb6e6e5232b672210f6b53d58317260bd50da22bc9c3d07c40320af96ae30dd239ffa794e2082dfb6345a3b0fbbd79f25fce4c5e22423865523a5e510c3130b96a0a81ffb8aca928b1e615e292d2038212b5135c595f9e84642e1646a358bbad9ed4382ae6dce6f8ac27cb3b725eb3ec6073c498b5c70808e1cc522145bf4331ca722a19a8ef9812334bd1b2214385791ab80f5fe85c420232b5d9d3c33ef49f405c3a4781fe6fe82d8030b9c6de5cc171b273274d5e9c2f2de71374537f13b78efe6f44b371569c63d0531b3cb88f050cad4250934150666d6702c17c71cd5fb4558881d80c43c486e007580bf6df5c03b358d36bd0c6ea92b0b1a2a68e397c7694821f29f0968306466d6248364febc56fc3bd5b41d3b0760db252aeda1e336c18aa58207d90314e68d7e690306c520f88bf0cb4a800364a605932fc08bd277281b5e6daa1cf480db499dee86f6615638f75693a917ff896616cb50c5cbaaab995c1c2aa91945f280f2b46d97f4f8074e3b53600e896f8547fe639ce34489ada2399acda8ba7ee27e6a83c212b745fdb2407df6d4660756a8b484fb22e310cc98d30966d024ece87b1b05dfa96ba7e2aaf4b01995b0e9c98ce06a6705e23d90f94f9a0037f914e88c4768347ece22450a321efdc69e0be4a9ed47878e0c43f9b1395a284047ac9a00215c7c1a0bd7bc3ea0bedcd7f97063554f3044cc5610e4fc902d7bcd1303ff7dbebbf297246fcc7474b95454e8a59b75e238b7903e90c0ce4662bc70d0f328e5ec4e4517ddb51ae68b1c9807177852a490247303efd18fc5898a7203dc16b0bf072a5c1cd21e9601b4a404265a775eda74040d1c6f3592649a25cd5081625226db8de48359f5b3f287d4cbfecbde35bf802afa1e2713d81231baf66d950ee6b755dee074971d6dacb5a98a269804baa152798349e598e2b1fb0a8c3d8f7e8f5394b0616ecd186e7d3c94250d92b10867eee3eff633a27aa16f985d4b1c8e8123092a783524cc0c3511d255622c2f5af4b314d1a4a9969a575ccb36390a2e138218513f4cc603eae804b7a6992b0d2550b655e123ddd9857052f6f9f2b0029010988f234cf2ed1a467d1ac8899a49ef9b3bdd92bbea31b718aa7ed68b59e731a43cfd56b406548fa6d5d974c3a5325e49250555fc1a0ca680afdf2c2e325f739790d4e1661b8a22cd68c6897c9c99a21664136c05fec4c6116f8b1b42998ec4fb48b08ce108e41b2fa95a9c93e292e9040c1b30f796749c9baf91e52902bd201bbf764b62efc505a732b19f14092031c394551f816bd2bd841ef2d2e6231d3f648aee91a4f3af549bd4a481756747992ccb42be4be3a05442e418232b99fdde67c792bf65c4cfcc59e434f9c9b901f060b20edf25ef1324c7fe0a4834ad45d7b61f7f193d5cd28b3e53f7438fc4e1aa500d0a7fa9eedc1074b0d703059af6531a5bf0c4d90933db7f7336131c2f6147d302c65682046fc5f6cce7e9891695a93caba2515bef72a8dea4142960b6925da7cb70c1ee889af325b76198715ac8987b95165ac530c25975af615a404fb538e069f599716545f1dafc5721ac8471349025d1234f2a4bb3b3ca3fd48d0271fc04553804552259304bf34125e2345fd9732c8be39c673e35b7bfb4af94d290f1129f57ec332b4369d0080ae2ca9bd4eee99c144c48fa795ed5ec98462724e264d0361b51a0e1e262a5851fd1c11238715029440de336fb788fbd27638e2bda3f0b626bea1a2ab2a1c912ba7b8e21031f48ac319739707f879d5b0546c9f60ece8be12bf8295ef714cfe44da635cb4efeba2531fab003a4010adff3ab984d86efcb83e08eaac0a02ee77419c296b262731a8ae09f9bb5a018e3a84ae292693c027ab41aede46e8cbc5c1c3c5b74890d775cd89e8ec7fee8f6c426f228889e4aa546fed0d2c506555d07e47bb47d89425e92f94877adc0154980539436206873f68ed2751a6399d7ad7797f9011e98135cd89446bdbe392214d2762decc96bb7afaa9a256150ecdf5b43cc2b286a3c8b5db856e3c8440d8161c4f1fe585591e97c60c66f67a0ebf01df4d0060af433039a64fd8f60de463030d21096fb18f870b9376420e27ebfe275870426eea555ff3983a4b6c71d82bd8542a151156987114cabc32467e2abb9611e56aea12aa64e0d57cb02783f63fdd29f172296643df6665ca3c221abc6c3fe9f3f81e0d0d06f84c0d66ad9860d8c0da75633c98a3982d4305a8d7f69ee3815425660761b83cd06f80c6ef0076a1ca340d00429b446820c8764b5f6eef9d407f8dbc06ed1e9640a365466780fca5aaeb4b7380078c049ae98afb26a0218a4a7f6ef0cec2e2661aef875e2081df98e076ccb11bc882913b1d38e845dae677878dbbe1d8bf092befc02c07dc1e13063672341b180dbf2fd55f97635ae0400564e20f55b4dbaddf0534ac980f2bd2a5dcf30c0cf97de0ebd34c0ce97827b7b1818c09f4936d27df8d117c510128d45c900e8f751b0d3e5477fcfa814acc3cb79d674b0b283e8390f2476eea4b93614fabc8bc6bb9bff68a8f0be984035db1c36ce30ee1d0150694ba8d048257677a8d1204e78f7fe5879b270951635a97a2e8ce35404231daceb963f71fe10a2835e2ffb4f353ff34725cee9d9bec4b058faf33f89ece163ef7a53f773b52a6eb71679a86606c71e1bb5faf3480b6ffed0141573722571029e9b3d72e3f0eb01734f56ff8daa52a3ba27b922ac40efa7cff942ba9986b58210aba796153a031fa2eae5e152e1087836e5795d72da3d1b52018d7e9f8f5fe009d5e7703804fe663469a88e8526a362e7d05e8b69b9bf322ead56319eeb63707ea2f75c8e08bf0defef47d64c322821f2aeb5711d07e99a2fcc6d200d512ddcba8393cc5295dbf0aad043fcc393583846a7ef27eb5472a0194ec0fc0b95ee29e04f2d8eaccc232b914d45a7152877aaa2f8c586d67a948ae47f2600a701078d77633e1df21a4c71f705475be8b6019ad72da19d2768b3cda72e8caa0bb107add78c50d898b82d2c6d8d193f9e4f9c3d7fabea0cd7eef5960afbea5082e7b0154df27babd5275c0ec9b58e0d5958c5512ad089847005f36de4610da9081380c169f03db08c8894cc22868e9b6e87a26cba160e7a3053c4f642eaa19dcb240f353d26aca3c13c45fd609818fa9fdd7a000d6882100ab3b7d9f0e3bdfa591a8aace5567db9e3f68c7f69ee1e564776e345d0526afa937a0ced5c890c41abe98ac1bf551d209469f8ebfd953330f49085497984dd63afe20f3b1ea3816718d1b167c54d1023d450d33df9958d796c57aef9b5874937620ab02538367798abf042c87ba4a8b2a365e2596dceb4ebd430659a672481c6d89f211ae37b70cd7fec12d8765660a89e1dac4d91a4c7e2868fa608de3fa3c695859481451be755d9a428f109fcaab14d63d4d992a3ef563e57bb79820f804e827c1bebe1c06d293523baa6783c1071a1cc89ab31c493e969d4970832ad17f079b29a23bd35fb48ce01325da58967991eae5d7cc7e23c25fb3a7977fce4c2152ba71692d04f46e24ccf298e6cc1dba33b0252274eb315e5b59fd6c0a82285ff62d1ab4bd37860130960535d762138aeecc7b4b8144778690af375e9369a137fe97241cb66d58861811bedf38a621e8cea6c94e36747467372cffdcafc928508e8d2c1813493b6e0a124d44eb0ab78575cba9dc9860792d9c5fcad8ec83d1978c45091c0c0062ef7823d82379082f5902b3d3e81b263a101bda9daedc1b2b6c2f6f8a19fe9555f6860723a7e676c166c01017820c5e8db1941eb231d7acb216a204d0cc99785e989b0638f2ae26a8495d71c2fa9c1ba5bd0f281d8da0c9aaa488efdcce8e82ef92186dc0d8e49d2de76f36dbbd8e11b3a62bab9a345d59d454d39555cd9aa6ac6ad67465a5264d53167526e48c58c6223748e2d0d04f917d48bdf4a02a4184ee7779e533f33c9404d04321fa0dd5d6811099f173cbe5e80c587f220ef486011c30d60d6bde85f0c24d8d27b6566d6752b72c86cdd0cfecb8765a5057281b54df15ce623734acccbd8cf850781962c134651d52c55f9d4e68babb5ca1561d1af41a0710c3c3ea826a26d683a7776cbe25df7399efa09812d0cd9f56514346e7c747e880f6e24a6125106165c52d636c849256df49011d265d41755e9abd29896602b643d823723eda3334a8cc43594d67c16592a656c9414b333de75a48ddcdea68eeaeea6886cce4166097b1f25bdcfb464cee4a3a3b87a9acd872e8bd78de09b633949a62224721da63eeb171dc75ee4c6e96576aaa26bf16c5d5e40686419a881d3c277c03e504406e94ef4db9553f241f9130649807ae351503a824358f6e582999c8a424f35737de4c75dc54f7747ed633498f1cfb8aa972dfb73b8f99d9df78af295fe1555bf4fc5cd736ef984319bc0beddd26a4e5eb82fdedda9c92d79c11287e9c631f6270f4655c74285d791c130ac2fc86e097c8c078cec8c9df24a32ba2e6becb2ff9237b241b95562dd4690c82d81986c1dabd4cd2bc2e6b4fad3a8310a92effed4a76034171e4700f2a22a669d3c8d4db15da0be009d8b0e1d4137af959cd3bd602056f82ae929038bb308200a5ce7ce3362e14d5c78bb4e3526db13a017b430b4c4c4e60934533162c6fbba684b1a3fae7d803c76c8b428e3b41945e1be9a7fa70825c57fdb9c6d1c741c5c36f108d08df8a0cca2cb546a250608e2c80f511f6391500d41f5e61e266fea2ad1a367d46fa3109bc740473a6277d341156b38eafd7c91e6b44cf8f7d953f96fe88a7570055cafe60389606315f7042f1d34b8e30f33ce41519dcd8ec130c0d282e9f44f37d570e3e3cd39f740b5d73de47b344b81064742559cb744f48231993cfc51e8882dfa82ae09f34e6dd5826a622a1b0980edb06d20c288a8262aafb937b586e9b5fa0105df1f65b3cc69b12168d4b9f18612fb67aa11fdbc268e1eea9b4fdafeaf337fc110fda5ae5115037e43027eb12f637aeaf4eb7a89ecc3e4d0430de7d9297c74b5212f6f2b0cc971a7472d7f2ea3b6eb122c64aa4b991e1e19547fa1e81a3ac2cddbfd4200b3d1fd11903a8b3b21ff8018e974f4ee9bc5e5a50437c493c0e8f9a371d981f30ae8e6b407933571e54747084c877dba5c468ff249d4daba5795c1c40d4964d02d4554dda3e81d4e31257b709402eeb099460ae3af68eaec36789111b8b0b45c61d7ee8666e31818ac90a20b1d0a5265cf472177406cc61ea7db7fd17091ccd84a09df2673b21a5ba641f79dd1e5284f74b197476e77601e738db9429174a28a1392b239611454895b2c4a5f038965000a7f7197cd3163f8af6ab347a95be92ab90b403646c5fc9278f58ff1deb9f09bc19350462b27632827cc4f0437bab591fd3b6398785d1ca18afc2480e2d417ab3d4eca91205ef1feb9301e29096ab80da1bc2defeb14513cddcf7280ac723b69784f56434b8954c33dd68019b9f98e37f96d6ad2a4a296caa9fcdcd541b55522d8d7f9f5e69c5f0c648edb2e90bc370731f63174a803ffde95a8b1e89c1b151c98b07ab57ddcb7b2e0bc05620be1b7f0cc2101682a66c0076c16db0d70b74ed4069548c6e467c2db87b55e355aee6d9945326a64e0b081918ec6792796941d944c07f1a130c18af817c6befae4f6f6c0a3c27477dc2a9cd0ab29ca78de3373c2baca9f173125c0e7bf0e8fd44e5d82fab8c0ae44e0b7b5ef42897c966c99be0089f389d2cc661d78255159e2b42a229c81a640530eb92858d109b191020c03774ecc6ccafc0bcfb8d6fc3e6a80e255f224f8d2c089f0207d6361add5829ecbf58fef70515e94411706f1378bcfd0175b9354d16009b7c1f3506c7b1028ec968de6b9ce0e307fa515c58d7f6bbaba11d84896c1aaa83eaa7bfa4d8aec0ca528eb2d932d90d91207096766b7869009e2be031655f2c75246a60fca9383aec4a324d6314afbaec45c101e86680a08ff12afc70fb63ffe1bd8da5ab6ea1bcae8e51cd49eaa8d4c8db1e3dd2562801532bfc3ebd3a17f141e41a8690af19e47d2d811b9cfccca17013ce36874069120255e93d29aaceb61078a535d85021f9743ba2565f06ff29a3fab0dba0578cee6d15bca43184d919873e974ce00ecdc9ce01a00876bba5dfb3740b5c5368cd957e75e3cfcdfb0ce5c79806cb7d621864aecb01bd647935f3895aef7c44db6ad4285dd83483b8511b1d3dd9a37c36691748a5e664eb9edce38543b5717f328bb44434e8595d3f032346cbf27ff4cefbfde556e77d1d3a8f13b8c29c7d2747568051f3cc151797960178f97144aef996c4045db1332890bbdd25c3cba0641de2ec808703f2fec981c94c9d8b83fe570fe261a8b61ab6e1dd7979de8c7d185cf32143ae00a584b87f771f97bc437fcf5f71ae12a1b71b2ff50c3362c32898b6146deecb806adca684841476528ba56ef46c26056e96900b2ef545616969590925d444721a798e0944da281bf42712dc44933ebf94313cd6d4e6af9ecb45b43eaa571aca4139497ba5ccbefa7f7d43eb7c6b60f5870899d7073c8cf4a22d49cdc8de966eecb5d77365729a0f3e3b02d30dc68b262f626c8ae0b7a93c874f9e556d27f4f558d4c56d42d3f191ba8b94d011c552477312fa8ab1364201ab8efd3e107bb11baf9bbaeb361a32b175ecee0892040336cd7186a2f8a88335c019dcacc6be3b56d463bd684aebb0c2dff4eef39555ac12bbe1fff9f1b15374b8ba4268cac2e25133614f5bad4c2753c6206ca00fa9eef324c2fa218ed5c4f04c0f03f502d91f4e52bd591268aef8edad361e3dbd6ec097096cf4310d72c5445b1b7824020c26b9f6f452773472fbc4dd502e4f6326a0a696bb3c2c69e81a2c442df54047b31936a512f70d703e0883cc80c263f54d052b7f7edbd57aba48db2412fbdeca5f2ae9aee8535756626e8657271ee035134f74cde1832c4b09c3f2f48c7db440a7f6324c8acf8689a259cd41bfd744ae39fea64a58fa46a16d96de8458549d58429d35f6e3a0db46afeb0a9c8a4654bdb3e1129ff4a10e2e8df889e4f86fca5b7d5d1d78a0471518512c1fce37c931a006c1f597cda4657bad0a49b4f6bf4ed9f0456b52fcdfaeff98d6732721293e6e92f81a73854eb136bcced5f87a8e9938d31a7228a63f4233c68b4300cbc1eb4ee26c45a24e6dec00b9abc46805cad6897f7cf92306c7249d11d0860f2e2ab96892dc60dc0b163ef1bde5e921c06975ca52c1c3f1eccdb0d48917b2b9ae1b8ac5101335da2d1841056244a07cc59d053a69e05d3792f94efcf836caec764c358f7f33bf063859093092b2d46d79eb83f1e8b63044694e6bd20b83148d970b2ff938c2fa27b9b53c914198e0a4deb0f2dee2a8f4601d6aa137cce4fcab70e15874a1658a67249de2251916b1d86a1c65782b47e441ff5233c8c403185fe8d763bb72acda664732573a6693c24fa70d5a85a1c847ade03a4ad76fe17478c1ad9ce77c76209c438ecd1b1487b644377669ce9e6366a6c283961d449c833d31523366f6bb03268f3a4b0df5022608ffa7a894d0497e583c22864de78b3952c8b76a140e0844518d5e08e2431fd33847dc841e4367a6ac93caae098aaa0333e2b5b03a214c4b2072275f270a444fd449f7a2a227e13f61c9c012cd5a872a249565bbb4bd752d45c641892459b44122a7242f417c89cd3e3652a0567c42abc4c32d329096ea892f17086c0e1a320c86fd5417fd2343a68da47977906e4ad97da2c809b6b729d198ed5a0a9aa43eb7d551138f5a999c0aa8e2224c66f7bb76d1c2adb242b49bd6921148a03c80c1ab3ad93e0b8595ebf66eeefef2776fae630169b12ab633989bf47b4f29728c621dbc02c4c1c90cc3c5e38923d343ace41c3444954c6a43238ec465ed2849a0775d8bae40261f41a6e5efed96b4f710be9ea4abda24b80e7b13a2de24e098386d9e743207ae0db2e52c1632c4eff376c9a6f54e17a99c44b72f3d23b3f5a9434069750805604c6a6ce3a029ed177ab9080c06a6f1655cf992c570eb2f1d6863c98408cfece71489bd5345c3d78fb13ea45972a0966091de1a7aab1a67bc133d3e1a03a677a324f3705c07d57c58bc82d648a071f4acc12a45aea235eac7302f54a35b996b52dc550307a59e2500f855ca582042b715f2d472e0a88df995037b1b64480c6cc90db7acdc80e70a60337910970275d2104f09763f8362b13cb0699d079a9908fa20866585771df46bff0a730efb72a44abb22454d717ae3f1cbbc71d181082d7cb0dad9730166c8d014b21b8f5a294a227192dd3acc0079416698a8c671d9c73b04456d3cc6b29c29224ec9b8c5fd083729997eb1aaeefa444ea77b6aaa84b012c0807db2d09b932538f35b0058257e48fde95451534c8fd5443abaf787229fd38d63bafd266a42888669feaeb43c5b1d9b45dfcaac601ed10da7dced477f696c6c02fe180e7f5d71e1eaae9e4495574f55eb95e7dfea087ee3caac15996fbce05a8c8fa474bcd4d08f745374c0e9665011a274f112b9b8551c4e0f561e1541132c2de1c77e6eeeca1990046206ed8bce67bb7ccbe7adb799cd19f48f55a011c5ab826fa74ff8d24d95d30381d29a1ed5955af4b3bf624a112cdc56f8c120babe53e52b4202b7d501943e915858e0bf7d2c8b7ee71d46f037075fd8cb801cc9aaa41c34ce5e8689d7e59316e91bff6e2107d33cb598a919911a31eda0de547f71b40d85528516594a567baa516d0b5f0c5a934588cde8ddcf785c72c504e1bab2bc50d61979321a63ba0ec65a8e55924d87563fabc469453d7ec3c7e07c3a32dc93c75a0c6996c1b97a5540147990260635cb805635e6c0a282494f37d984ce7b69f2e8eb61581e27bf39716e1f2f2d0233dc2a12cbd2811bccd65a1bd28c201b8965cd1a9c1225354c4ac3c0b76571bf615aa0c1979d222697853e096b6d58508ebd2202d2029cd4e81182010e1342ca904f90d68fe30516a22b1f5bf4b31f5fdcfc57cddbee63922809a971e04978ae018f1357d87a5727a3cfea1a033cce98a95dd9872765692bd284aee4dd204544f367a2adad37c5ac65420db5c8876be162f7f2b758975541a77c20d7e4fa459668c6a9288d2c1160ded1f86f7e3509584c9b09d9ca435d3e254a8333ea8d0e13e23aab14fdc8375bb0702068292b07e061c35f0554851b05444a3927545a97df9545b1f9a152bc3f9100836db8b64494ac58659418808c5577ba5925e7a49589b495a9956e28165716c475657abd326f07cf1615beba638e2490add0f8778500ca36cf24b3217d669d5bf2608c2387d9f59cada080d1574a73b52809fa2d02c1415abdfb6ab95f3c4b090c2d88c30d04ba585d6d0f4f1a71c484596930d7a2246ec710748c6f6b517b773ecf5694ebd83826ff39d735695ddc71d573dee41a50d2c4c3029ea7d56897c75454f0842337a4b8956d2103da68438906e5c5dba10a027537eeb2bd9b1177f6ee8be3d86139c32be51e6bfd035c30cea54790fc832fc388a2505234005663b1727a1276c5d2e1abd2385b34929746448d0e5a880b44ff933c471eb897321bc5973567b9e4b63b537b5dec2b8001a45bac8110c275c3a1726a4a7eaa8083a6dd9ad11a84814c67bd626654b262c48921938103e472235abc3134e339b00b553252cba8121c982287ef6e28c2ee265fce59cceb5364069b2bcdb131aed4050e04440b9f45a6cdbd2647e3f828acec8f554ff82443aafa8c81e82e124e3712c68018ae55fe9fd8359031b985f8e8c37d54e359291354d4aa49a9fe243464ecc80119c75d19d7817d749106e9827163868b9a4dd81bb0720c09db4dff5675cd2d9f93f08b0c293cd2fc69e6f4d5b4b147aa71d5b5ab191b56c64fc3fdedb25ca1f1861824a299559a1eda89d7c924eb0e1cf154e478440faf8ba5d8c0d33ae522ad9eb2318d1157e9e8845ff2ef24a37b5d6e4c7c69c37f064c2414c0ec7eb43a0a3516f2f1ce0401fcc849ce667653dfc5fe305ea589a8cba15d48e52c910ae3d80249958cb7140ea45a668a7a028f075239de99fa4f2795fc05ec6713e0fa83cd234d9c9e6a2deddc47ceb8ab1cfa6201eb1ac87aaee02c29d89a8649dc7f76b54d59c24db2076c315160e20ddaa846598f39c0b7a3aec8ace49e125a500626a4b303e18d400fd57102b19fef8ba4ecaa3364947190e33a256779b97dcfc6a189f0573ea0c0cf6f027f66cffbc0b9063989e68dd96f8f9c074ad07b95cd876ae32eb496e58425e4a86c636ed4fee1e675f16b1fb6f4f5965c8d9c4a615eb8dcf8599c9e9f53cf0307ee5d89b8a750bbed9fb64926d4c15bb677de32b31168f8bd0b13d5b41a7fdbb62c3b0f66cfe8de4d0caf914deebbe1f62e4c54d372fc2ddb3bbfcc6c042a08fcfdb6173c3e5086bd15886b0ab5dbfef3cbcc66a0e1f73eeca8a675bc6ddbb3f9c1fbb7c85bb765f36f5e96cbde4d14268a69196fcbf6ce5f6e36020d837f7f5b1fc355188c4fe0002fbf8730e95520ae595d76605bd7663390305c5178c115da88e5de2ccfb9656633d030f89da74761c82a4d1ddeee120b5dbd3f01546ddc4e345705e29ad5fd3eb77c54dd95a6ca21ff1a0e82b50e1475ce950fbad38d6b5659318096ab86cf76ce930569fc68779e28c8dca89ac6985ecf8dd598adda9d2715b46ea8c66cd5ce3c51d073633566eb76ebc982ce8dab395bb7334f14646eac461ff8affa9939a2e2b545b4546712fd80f3de9c29faad39a262b555b454d6f655576a8b68a9ce10fdfcdcabf19dbd3a53f45b7345c569ebede64d6715ab2da2a534b3d736bed71c51315eb920d31f56b7415302811135046116ec94e1917358c06fa9ef19e5b92feee60b51e635007aae1436c42550815395b3ac1481a494cb5211bba907a71d36ca88ac70a6e814c2a42524628aa4cba483aaf6aa8517351dfb3638e639f5ad6e9a8538f154e98a3f8bdf11bdfb6afa6f96aec9af6bd57aeff50b226a3b924d01539868c2ac0acb2819a32d36419b4c9a086b3b6493da78a4825f2f0b5dc1f2bc3630f5c38d62e331076cd4c8c24c74c0d29f0594173b783b0f3a479a513aa8d4d640761503aa8e1a48f20c07accb12937462347aaaa231b9e8d07ced6a4a50ff8a3b544aa97bf472dcbd2ca6ddc8b45affb5c0aa426a807747dd8b7c01e15570dc5aa7984546bd3aee5ecbd19a62b41ab35e7cedc2b2d3ce101a2038d39a0387e3f5985b658cb58b69b539686a07af8afb045888a0a8ffacef05abef361dff710874160f6aa308d4c013cbd01c34157e481c0dddbd11572392e9b48f1cd83c08df213f35f94ea323b95f2bf4632dff1956a7d8fa29a020cac0444e6b245de718f2f6f4d723d29b3c4bf555200ced4d6e54b66d3dea4c5545268068223381124e4843eb066e7cc838d1b246db36953a7365567808e676ccc4022c10b1a2bc7d7053082a4bc95f1d8948253f48b2936a3a8675c3fa21a4147e15dcab7882bf4f4879b06c25e37826fd93a9f7a6c6c4fd6733d7c0db77fe5bb56e8609c4e0c2ac2467e87f7f6e710016da16fcab52501c0e090340570e405bd97bb5ced56ed5c84ee15d87b13432228d0e3230e786e13dad2564c7eb86b49f5ee7f061a5557997565f80faab593b2164d0e2e7f535fd2da6836daeb3f4f43c72080ccf1ee3ddb51fdaadd279e0dff72f17cf1bffae5fe9b5fd5693c0fa42671bcf15ac44823d348aa46182d457edb8a5b11e584807a4dae33e84fd7728f894db8f024d6f526ed6a7998c677bf137495b3dac50fd7d5a7d79b190ecc9e34bc977959f43e6084e433d6c7462aa50f50e7d7d05921c5b455fb596d057f3bc79b9ed63d224563b0bb84daebbac4d613f5c97fca2d9f4cba69fdebc7982220ffcbbb2fb81d1e6b5c2bcd63c703b7ee4ab988fbce3ec8bcfd59cc6012b34625d214be34e9fd4ba628dcf3205984c30379862bc63027a37c76a453af57b747a40ab2412a69a236d8f8b3c2b1ef60724cdbbb8cac1d553b1770d6d08360110ba36a067ed6c6160354fc7be3891292400719c20d2263f625f840c497532e3a0ccc605cc380e500dfe831d9774fff9e51618f14fee6acd743701ec94de76184915da7b8465273cbf830315e961c5df22f3d60e7b50a1ca5dd126ce5f4045633ef2309a1388846fbc9a829ec71c789c8e5dbdcb76181820d9acadcd02015bb359929773f58aaf7137da9a2e21a14b4df20e1a540db79230806b7c805455042ef1bde1f3bfe709fc1eddc10cd01aa5245b04a9af3beade512e392c20271e037c06ef2b010c503b29aac5a6bc5d5c57d54eb99b792b0fcfcefd07f47dfb61796a2870d1a37230c9d662ab4e885c3f83b8390d0bf59e6687d1217c27feab29020c17681d35f1e019149881365343f33ac9093331fc698bbd318ee0c4327a2b954b2644b038f08f97aa08381c9445213c4a4166ae5ea15ecd283ed349f99c80b02f32fdf55e7e85a7aef354364ccf30a19ea0e9465061bcf8fa426e435e06e8f9c40da649e0a2c3e4dd24028dd8936c2b3d37eb780079c9c992b20a3caa88a34019f8ac5eae14dc38343715d86ec67e8242edf8ca9b6cf22bddb9b5eb916a521a77b6508cf124cc3b5ccc3b0275e7b63f533b7bb0eb9fa3743500fec72be34be0b7f722e9d3ac3ecc66e163e95191df262a303a8eb0ca31f0bd84919f00cf04fd3ad2e7b83f99c943a0678404dc4e77b06c7b709b8b6982b5925d60328c8924cf9124ca02d30adc587be68a2241ee092c636086eb47a12d85622c3070d663e0e3a8023dde39a140ee4b8da0cc6d0af39dc3fbae2d84d2fb51c698562ae81405d2602bdf1caa3d6adc745388dc498b6cb28e9a3fdd9501c70021f4ff5129c8342cd74d50f37e54d7669e9fb9a01ae97c816264615a90af47f6078a43b0ac7e6d5a8bda912a6335f33dc56493fa3e9f9e5a96f15e2be480bc41a74c9cc26615124cf3efff6a79bed4ab9a9f228ae40814111a27f02c995687facc55ca554b5f08bcb198592005006154387bf847f9edf2bd9ad22780f7ec26d018123f07011ef0ebc4bd80f7f20ba33c78c2c9be21370b8510605b51b6a675c92fc049e8b4783103ab4ceddf9c848a1917fd772b55cdeb5efa6806cc24bf6d10bd623c171f287f0b817b3430d0c648f4d2787261cf77e63389507fc827367644204ba348c742195ab73c64482173460ab3ca3d6cb83b37f4196b65470195d9ab11001e4a5ce24effb34d9c95b8545a4ac833d97dc2743acc9be3e09292aab2a29ebe6cb8c7fb461214f4a2b2307c8a91487ec7fdda5b9f2c17477a8f27edc5c0fd783c832e09363d3d1f6e4c961014191f8669b0882df3920669e244babcd972a0f576d296a7a39eea14126839a7c6cd79ea81ba745e18f3eb3a9a5682549463b91cde8aa1c79513248d36291eadd0c59d898b536d31d1381f2ad282660e1ca90ed1afec83aea8ba8eaa276621dd1664c35afaae224f4ec5d1769bac28b0592ce9c9d429e2b105af10af752503c774e11492c12649a54d75662115630cb0b97219ce5594c05f10a2c712eb0e122b7ce9f0eaa01c201654020a7d33b5de71cbdc072a6d70facee469f5cb9f8434ed7cd57c2a34513ae9b8fa8c98e17408657c5523eab38b16f76a6b7dc0eb319687adc00049cf6d2f69456976bbba4452aca24f8c6a05fc69ca6843920fb7bc98b6895053ce568a155b3d21cf3ed69ba69854e83927025185ddf6e6c6ff886aaf8f9c8594b4de77b7b648de3cf5a3753a3b7cbcdc3e44e8fe998a83829e1bb02515f50462472b103b94fe267491a7fd3c4afb89772871f288f693f342f6d781ef5ad79e8193784e5e62dac4edd3512b5fe638d71385eab5e7e80d4739d682e0020059f0ec8614d2a4c8a6ae7c37667b244dbf41954ae21fa0df94013fc33a7eb13bb2e01065673be0be6318a59ae7424feccca3c499903fca2f9fd1aa98c99e3e27021ca6c07699fa5a2bacc6a5c51733a14daa621d3907dfcbd76287613e7d1b3e8bc7f4a6c82e60ca10f8263161eacec3e6312f0d7eba36a3c032e5167a2f82f2ceb942d4436664b5d89c8a2d6373e8df085a75ca8820a31d7093d6a6ebfc283016987af6b01cc2fa4de109c21b767036d0eb4283d90ebb4bffd0d314a1b2531e5456ab8924e5c1f05cba11a43d18bab9d11c131164da6a222ac3d595509680bd41f0f886634831b8db96bea5a3b13c87c0a56f563ed57f4704b0425bda2d887436cd810f745e3a1b8f28f5b422d3e8f0f9e5c96415d4e2805aa0231335470470f73a4b940f810d170445001b1d1e1c17045a19aba15a2016565107f16b4f6acbba3ccb776318f08f55fbdd42d8e815a61f63b985fc97e57e8bfde810a21d6ecef7606f78ba690178387cf2f3196b4eac3f50c5ba291f6e8fee5bbf1590d88be9bc4ccff8486964ef1222f796522699023e0ad7091a0a634bfda6f6ab55d1e07d905933c32a62a02d77591f53375c9f7ecef1a646be7ef96e3670b347c1fed2c79a29d37df7a6b6f1d1a663ba9fa1addb5fe96b6828310374d58de1bd20c69f4a65fabfb9bba30e74d57d8e8754ace67bca8be98da10ef00c6b68d7a5352c385cd618c1fef3555d20f6fc6977a17f86425e08ce747c39c1517014540e95b3ef8da50dcadedfc472a77b6300dec84010044fd754b2a79f62f82fc06c4cc0a58d75667d4fdf490567887a8b24445b78b4b6d166ab4970698b8a68576444168627142a8786a178fa0e51a3102f9f4ea33d62654e1a1167b633f0e9db9895396b5a209bc459e16865a0688f3849679fd8d68893f44ba245e224fd2b5a202769eafb31b5332ba32b1aeb84c09dcb5be6d0d21ad9c1e6422ff9c089140d52d489efa75bddea666a6af5ee307dfbb75bfede882bae801d89d410b8fb93a9046de556dbd1ce9ba97172be93d184d32740cf8b2c869002053a2042063c7095e48c0b9ec8feaf811a60d18413283182043e200b78730f95a104195e2e55aa77e1c01480642b10030c307aca90e20a256c40c405d010194b786400511af41174d024054db828c2832a1600860cc9109cc8e2095790518493710475a20c23bc2e2690e4d6c51760ec80093d180292132e5e393801111922b0539021848906e5ba28dc2998e0848acb20227b76a7917b484a13a424a1f4fafc3f540d9f80ebd3bfdab5d65a7dde13fd20ed33763f958d6eff6eb6dae5650e1aad7695a71b3a0229a38a263bd31148193c6899ce35a5d44caf421d2c03ec4266186496321d92edacdd3fbb334211209091e7d766d19f370701b30bb8cb33cf707641a6bdb99633958acf2444575be0d29aeec5f7de6b5dfd9f8709b0ae7b844b9390c9643299501508169619344c6314e1eb9eb3e7243267063e540ef77f28a794d64a2badb3ce09258b1cd09cee1eeae0ff28d539fd572b90b55dd7853a97a59a7e7673ce5209fccfa40a75be0f7fdd17ead0ff40100c75bcff4210ffe0d202e5f9e1e9f4a1421d8c51f814e2540a638cb19df9a3e2ccdf1567feea094485423e296e53f290fe994fe10caadcb8c6d11a54465b37be9fce68cbc64ba149efa74534cb939c741f1a7328dea22fba729b1f392b3c7dbfe37a94d8fa3b320dfcad02c1efce7cbf2fec3a9d1934c4feeca9aa54b9ada0d940a356d06c6905c45e0ef10b6a9cc22035a340958fc6b8f0c95ea933dd2347420ac7d134fea0bd3a66499e4036090c6490e77b230e17ac12e2bca898ca3c6c34b655110fdbaa28cfb856fc71b9e1c8e86a46578ef3c281217dc1e428e370116ba0d4e09c0c029737b99b5c949b246775a1f763e888dee4dafdc6f783f642f3c415ad63fce8081c4b47427228503c4a141d41b67ba165b7b2201aa14ef726b13b6317601754be21b27074e537202759495841ac252ca1fb05938fc6429a1bcd8dae7034399a2834526eb428b182584b686e34b791e6661a4b9c17edc1799534b75cbb312bc56ecc54a10ef8aaff74bebfb95be373bc0be2e276fe6ac292f8830347f982ec0558ac0657934b522575ccd08fa21f4e7ed4a440c1284af69b1cbdc9d19b9c0f59f69b241f2f1f301f3e3e8cdcf107cdbbb608b7cf049a44968d3563216101b192b0b630a2b9d1dc6870345068a27838af1b229057b7e057fcf2d10d2986035423263b82e48eb9f662e0b29bd05e4d682f2fa18ee9a9d87df4a1c4995139ec36df1073d28bae724e88096da8c84995087b170d9ac7706284715e383d383e34379a9bb33c2467e19c5573bddae6be7f36f2a323a4d34873c379d191e686f362057d300cab815283b3d71371e9835dbb42a8636f7254acb924feb4143931b23979f431249c170e2ce6a41b39f253a37b7daf28deaae1acae06156949fc69799588f3a22b7f1a3e46b2d7c01107b60497f656e3465b1688aee67b2e9760402a7ad762672ace7ea134f30c4f33a3c469c59f962f893f351eb7a83eabe88a8a4d83e42ba7b911c106e5d27776ac968a2df99301a978235bf147f525d54843c43356fca9f175bc2d7cff3a74e808756890beee57b8c09da5c1d1dc429d9b1c0e97382f9c98b3ca9b5c7656f7a5ee26474596fcb9005271255bf107c797c41f97bf21ba622e195d398ea7e1a202c805cbb56c946df9c813f3cd7315c9482f4515650a28168788f3c291e11cc141a223acc15d351ec73f2739aba32d97f7cf52bc558353e19a8a1e5c53e1a332f2471c87e4051915496e72248e8cb66c28a22b960d3627bd593674d1a4e3883462340d127ae56f4317cda23142936e7316cdcd4931da66c6fbd32c8146096dc3f2fe345068c2689bd4fbd32481e649dbe0f7a7c1d120a188b66cb8d180417384b609df9f0689c6083445a0f9a26d4cef4f736b9b5b340700fb283e60332ed597344ec8fe3439ffa17a7b5d287b6889ec6fc38db68682aa0ab23f4622fba392c8fea923d95f4589eccfb282ecbfc282ec3f63969d9e00080a80a4a063fcad38242b0129420462049023442046ea0cb13be60736e3baf12be20facc675e3555237be8a1bb8d93e1637206e4095edf87363eca6297bc805d93f881957770b650ffd647f204bb40bee79d945042213bd1148ac06475b2c26b8a1ec8f73f23282b148d60b329a5b37b282b0c02599cb1ea2b9d916d1060dc5a878ca56fc71f9ea32da70a3abf26b92c4175e3f72e28f24baf21adc0fdc8fa01f4b7e08fd6022851f50b2ff8f274dfaff18fa81f4472aa3ecffc309d04dee06146f929cf41b293dd99f4608832a7be38f528d7f2e686e261c1f1c203a8b1ee41ffac686a22983f3b201c95b35dedf865b0df1268aebdcf1261704bec9657f1c1c7f1cd88dd00dee8689b7b211ceab0687f3aac1e1bc6a7038af1a1cceab06971de7858361460e67c86ec854a10ca2c98a253c4306d431f33d1189e948910a92983123d4b93fe3bb6d5c82ccc8df986b62e012e3bc66c4584219dc2bd9bf11a3b9594fb4e1366f8ac8f3fd88dc59dca8587a818a9e053f165e5418455b6bd0f0417da24e2e271a62bb3a8b1c8bebb0c58d79496802038156435b252bb3b3b14912d395dde1e4bd3f2917e09224ebdb8b13b254d4275d1150e496476b9b895b724b62ab1dc9f669d448ae660c2aa6e88aa0853127ede392d88a68b95c399369333d68b4151a098f1485486a6112db921b131c2d17c6ca994c9be9419dd29a9c023080023dd4b53ec235145adddd674065fb3bee1466c0c2047bb3f57fa7fed6be35a24261bf2892edfb91b7bc18ac6da6b33a4f88f60449018a523a1499f5685318916d584418eb18fb9d28240548e6e389d631f6bd237839b217a32d10c957f6a1c8a2cc4029403d41d9863e42d9961e784382ed97a658ca5ec0431ddaf45412293180734b1d61f05c732e640fa06c59b2f56aaf84a05ceec82b3c8032944b1fd94e77778f79475032b19d73e68e8e3d7cf4b0511cb1a3ec9e7e4d1d69f715a00fc449a71d437f7bdddd63e9c5d0620e10fa40ba75bae6c4d08d3e9cbaebb0038de6dc80dc62284053ea4edd9d7a0d9ba0565a9d804b646571f23e6de1dc720ae0ac99eb33c0594dd4331b4114720912057144fdc6e53aa9cb138de096ab4bae9452aaa273543959ebcfd04e7aefd947ec64fd8aebab62804b235877e45aab0df241f6c8f101c4c707ce5a42df446b1b5376232d7ca7d63b59748b87d645a65f67bc3216b8849961992c646a9f890239ff25cda59187293652a646b7362abdfb778fabb95294a4fe624e7e3e9f91d993c3f7729206f172152dac637ca79644fbc0c88a64f7bf2629f02713c5473207982c6906471e2616cbcf47264a89db082713c559e1fb2de7acee598cc8d44e33b12c5393919283744f9e8165faf9ccf87c3027658c6c47324832381928cef2f1eb7192fea4f28bb65223cfd093ef05001800609992374630ba1eacf2a91acbcab37cbb56522a63cb0d2a3eb8524fc43553aff21ddeb0327e3596f1a3a5522a371ced79bd60379c0a9813ea007192ce9933c6c05a21f77f2b608eb6547efe97445ba99feeb13c7df2acd5c7c96964a7465b397445695f8eaee6af8c1f2d29cf5f1989b87c2cbfa23c5f45e429a281874657f43febd6d6528ec2cc3e5b67ce2a656a3048682dbbe6ac159065069ea757853aa5b76e23544f6f6d8432fdb03bf1149d441e9a93a91b607ff719e0ad918202fbca8a78315dd550a584b0fb58ce7caf3c9b8c01257793316434b99be490b20d2bdcdddd9d873667ce7726ed3c79869c2cfb492dd327464f6c41bccc439bb9ec9a411b60a8c333e4248d4ce6fe1147eb2737fe46a853bf45c7be93d644cb377f2e2ea18ecc921f9c23d3fd09d1ad9551c6f699e04b41a6ffe9d011eac82c7192be4cedc8088699e918d191790be3dc202c94bd69456a2b9f7aa76599da6d8c2263cd750c10302dc6e8c85552a971c7c8966917b86cd60c4dcbde62794a83018299d1154dbdca370c121206c8490ac457f43b31255a1166e624ad63ce0a94522628d3f7fa4e66fa56dcd9a9396984532e13445b55c6c5856563b60d510c754ae1e7f80c42e694bc019cf1a384d02953a629c8fdfa3df8f64fb8c62c775065ff6ec7b66354d3c10445ec724b6228bed072904030499ce5956896a78e1745b1bd68b029a535da5a197754ee7516177d4591e32cf0f7a22bfacdc209a3c9299a858353b965fa0497e97f386134eb7b3d0ecec7d2d62b8a32b56369816cccc1236da30258fac23ec9f3ed18796e9167cf070000421def03a045b7564615ec452321d312660633a32dd57d3c13caf43f9224572b18a04c7f35eb96b941b756c64f054b91e9f7e241a62fbc050e2ed3ef95bfa6e1e49c0593e9e344f1d64e0d474aa6e50ccb919a8f413abb4389e2ac13692465e63406e95c83e01384581d658eb20c929346646e3236999a2863e4249de9c153e3b1f1d0788ac6307009338399e5196d05d6f6d108cfe82c531ba0d6ca778a67c85b2be38e0d6ca546231620b00d4ce5cb6f6603f3d68e914d0ca42c36b0dea98d4f70e75f82cb1eb64c55446b8361810590466e12db700db2532361b0e34fea776a752cdbc89629dee12c2f08d60297fd4401489cd552e363a7d636331430c3e1d536aadc341a189013430c1883ca5deb510a30cf100fadde3a66be055c14b3580497dd0394110418f203e4da267cfa04a00d1965ea23cfee012d7f3146a65dd403db8c93e1e8157f3c64ae0cd8b4d5b97a06ec16c019ea6021cc04c1a1d631f4bb63260eaf165a0875bc1b99c67f040323e08b1db1a2d61a8655a656b651adb653bb39cbfe69e7e6240dca3b46b62367d9c7ed4071961d776c4ed29da393d83b46a1b883e424ce499a52d9c1a9883bb71ddb4eadd4341e9a006c13f53e283ea1951facdcc106cdf858ce8430e4c8f5563d3ca1304da954bbc23283468dce53d9b8d1e28223878e176f6954e105002b980240ae603e1676c4f09099e9996fa7e6ad1bda8e0d6927477f474ad2135a107a326da3a34c5fb96ca328499906e195691060997e672b0f8d67c8597449a662bc4e3e8174f0f54bdfc856e007dd4e930f30fdf2a59d351f74d69ce324f378044ca7531f323328b3633b19cbf38f643ae5eb172f5f67b9b815ea5e5d4fe9c652ba20c9255856d66c17af935f5d4932d14eb9b6a9a822136d25a963e85b5451a6365323ceb2638bfd462ae5da4695e99358c552a3632c531df94bd034a32d6f3c39f1157d7a7136cd66645a3694dca526997e3923d39f49f21c4f4e32fd2a968a3a86be15c524ec2ef9139f80cb1a493217a0b6994fdf895cd648ca540cea182a04f62f559232fd12c72bd35f71a292b4f25a29aa0184e38523864386e3850396238fb129be7ef9267069632c47a6ca65a4ff52adf7353e82749e45993ac914ec1109f822e51999beaa6d2c98a92ad3197d0b44dfc68e98b434ad083a496fe75dd308d6ead55aa994aeb396890ec784b575093308c290115094d2a66d03da34262a766bab918f76b70f70ad48ba7b0948a6f8ead7f4206b7a7488f1bbf4e851e3ad1d4e82bd838f525a9fdaa794524a29a5b4b6fda29bb681707f695fdec5d7dddddddddd3d9b76dbaff5d7a0ee861dc5906440d97bda0a2b0575d79b5ead45af73dc75154b9028a56d7fbeed1cd8b601929eb91f095ffd7e29bf9bb608b7b4b44d77ee44ec0453fb134a77b78539d9efeeeeee5ab853f0e7dbd79c73be179ba3d84d8220088e3021fa03acbe2724c50b8ae20141f166d73d99bbbbfb5bff2a8242528064a7ae52777777772153ccf39b2956635e16292532b87d53791852f3cfabe586e9b23f5d7684812efb2df4676e910195e9a3f2cf07ec4829a5145756a54e3acb67d0b309eba0f5938f3e917084716ea2170fbac02ab9895e352882c3dc442f209d97f7c537b2cd3d34252997aa25be931778aa545d92d4dfdbddb3bf671f4b0554a1af5fca4acbdd7f0e346d5c4ca0db948941dbcc9116a1c662150aa01a53b9378531ead673e81d8802d11785c1836f4a21755df73e6b1bef3bd477ef4b34ab1669b2fb0e35d2db97aad49778269dc672c78e6ebca9119bc60e77a5f1bb0aeb98ee43295a6e403d7e3cfa801ff55d64bbe1721f4aec21f53e8800f5a9b1e506fca94f8d3eb87a407d0a352a69e95c5f80bbaeebbaaeebba6ec66a826a7262a0810110c8f184ee2f567df7e4ccbc61699b26e2ea1e2512715558dbdc68aea34995567290a8e64b35974aa552a954fabeef134275c4fb886cf0e453a2c364192aff19ffebff96052716d42a64440067aeff53d96909ffbeef9bf9a8285eecd95fe53fe32cff9f74cee4ef9b7eaa6f879a6c1ac1b1228167ee3b962aafb3631dcba76349665701579ef0a5bcc0a5ef69ad6feb7c5b85607ae4abffd1a01bc5d11c4daaaf0aa3af6a59748b26ebd79106d155fd5a7794f475eff530ee542a6b8302bbdbe68d8f34c8b9a041ea0b4cdf3f29c95f0ef398cb7c565454b3dd70b9299b404142b4c6e990810ed05675d1603356539313030dae1c4fc00e1484555f9f9c09f29a0351176a5aaa806acc63e29b7d23019acb09449e37739c3d2de3df4d84e02a7bc8478f1df9c525370b7847b21bcb193be680631d4b159ef59ebec03387f66da410a0add9d32b7f1fdc914e82006db50b3781e8189f49c689640281c4737be4fbf0d72fe9e0bde96fb85f1a7d28fd7dd3e883929dd25fd3fb70df0b1d848554b42f226bbe6a9d29d87c55a34bfca56348d9bf82dd775762825be877ded142dfdab0bfcadd67b4203241945cd62632011dc2cd9573d69722c0104904f081f24dd06bb5dc9900458c9cd54d5020943b7f0ec5592d04f081d22fce84af8fba1bba2dd5cee55fbcf55deae2248bca495a47f0085ff03ffb9e4d9fe3f707fc01ffbb607f9d8976d4c59c3422f6cc9792d2689d9868d67ead8f5a01ade27d2beed0057d4a06b8b4b159699364da7da65ecc88b3ac15eddca103472bf315fd16cf4b65814b3b8b390b89b7beef704e9bbfb07b3a11b022734ea7b4a9171fad2dfbf4288c2ec8279e7345e97f993efd81bdcbbeffb04f5fe536f408acb57608b2dbd910a2218a72131539ca2ce4262a12945dfee5ad9d61021e081db9f7959d4f606f546127edbb7d9620309e8f67e608039189d4732ee0fbcaafc7fa3e89f884e1fb807d816ddadd83585225f0fc1d683b0e66b122af5cee762382d55ec04fb4cb104394605694fb8994b0e51e8738cb264a91832838714bb774812e5ea204babb974cd7f499be12c87007847ac41785225dd77560981482f7de1b9e92a020c6099c61115018854b0003a50841c14141083885532aa00b74c11ea454522a380a951595952f6678856585c5e3820442c80e0514b0cc609951a300a966d0984183ca48e0a49280c94d7a028d1a346a10910008a94659595959a9a12222814c6564e3868d1b24a0e246cb8d162212f4b4b8b4b810f92411f9e0ae8fcda7969dc505870b0e1a914f149912f920f131e203cb3e338e1c38722439a18b1ae559a29043470e1d44207d36590784aa84d7f1a6224c8450908aa8c88b8808a07bc38103078e27f440870e1d3aaa288ae2a8021111b271c6064443e07e8ca45c93245cee2649b6dc5fcadd24c949ee26494c72493649aa410e73374902caf39330fde99c73f6b7cb9ffa9c737a4bbb48ebd803edae5d314845f73001aea2ab04b42b88e9524283373d220a2cc2235c1105114a532881e4b5123a5be9d4919b480827b22a3791102a20c267da074756a0e055e4871d24c1401551bc888a500223a4d0388802099bc48f0d86d00225984802a904020a46788083a2245cb05c264c237030bc8b9ab831598218b1237a14e044104a68d1449129a240a1a04245104932e4822362d0c4163d5fec80c204155c318327385041dda1c1c91f5caa6e671f81fb12442c045c9a6416d6312859db14dd2a648db04f32bd94d6264cb2272659c7d017a3804bd2d4fea8199336d18ea6b55c8cddf2bafb353e4376814b30e399db59957e60642a6a913f9fb4bd9e521de35f73159b075b5891a958ca33d4c14d70d71f4cb55c579cceb7827af73ea596e6647d930f7228a6e2a4745479898e2f6405eb83a28aae6ab56ffaf9f63bf7f84de0fa2a20814b9c2b55b98bb33adab5545abd5aa2b5d2da42c73a2fe8659c2b78a463e6d3563f61a67a99f1018411480211a5baca2ecaf5bd8eda226795e0914cb343cea237c8f5adcd59f4e98fa5d92097d628d71ae4d21e5953ad74c5f7e127707f8d9467bed93ee7382706be7eb1623ae0eb97b29b657b747f850bec3f6349276d0bc5aa22db2f411c64fb19a0add3d8538b1c8e57646b3bc67e4f19fbd231f6a7904fdbbdfd39f309e42cefedcf24d3fe5c5293cb29fba68c9c9f7fb49dd5b1763869bfc4b47a2747e58f5aeaf4e47597651ef195fd3965375c7d05b36fed9333d63496aa1dbeb25f126b7c88394e5a6fece1a4edac7b67ad9db26e7681be5a69155173d2be7e2955af4c3fc7f5ee58995426995658ccdaec919016dd585626b3c62cc4a9c8421cad31eb184affe26eae24546212ca54722b30959c4a92aaa6e0eb9792855aee9e767fadb5d65a9b524a29a50bc8b7bf651aad8caebaef1cc447d876ef9d9c9c6adec2168876f56bad6dee57d34baedfdfd7faffd5d2342b4b4d72676530e8f822b9eb64b4a5f2e9543eb734f25073a9f25971f1242661cfc5930d00b8b6f1ef56108572f70d93eb98cefbd24528775fae40cbdde3f0e95c84da6646eede85d63636778f03d6fde3ba15682b74bf42f72b74bf020bb5ea17e9aba106a763a575d65a6bbb9c8c60a8f3bdabdd87aaa1a6a652cb926bca5bc3209f7ff9a2609834f48c600462c7cc173be69682c0007e370c4296a9dc414a22d90b83605c43e94325c0544bf53fd0411004c1d9f774c320b7637a9a4c27fbddd8a3903925b7c8609a99889ddd103eff0fe5419c3a0d83d03a9b511aa4da5a6b10db596b6dd7755d17c4c35accfe7bcb93c6b2d39c96cbcdd99c612df034809785cc293d9d56db79f75412c9f4c7b2cc35a81b81182f8fdaee186bab779d7b5ef77545b0e9aded6a2a08879ac5e1459fcad44e0ae8399d14f04ae58e5aa98f92e4ac19b093f5f27b0129c0cbaa00814b9819ad62e794f8896538ee608332f8a009144b3fb8a69ac0fe2abfd29253f7d251957178754c8eff576ba8f37df7f1d8786a3c457445c1f7b7624edbcd99437968ceaab59bb3c2aff10c15396b3a7196118f8de7c85975e4297292c7899375f218f1d87868277fb0bee94ba75aadbdb57eb704661cdc7dfa385070643ac769d5f927823e7f2bacfdece9f4d6765d673bdb95c49d232769096907b7530b02835f36cd3fb1dcc10681a38c908f98e5892ed48199750c7d394959e8c9f8890e7b814b98590f2d37b0bccaab8c3eb4f8b3fc8c94caa73e35f6d07243ea577e65f4a1c5c71f1a9ffa954f7dbb5456766c3b3577a182938726b6c8305f2d33cc579ed9f38c29b87e25898055be4b799386f8c1dc05fa33c4a6abd71170d94638dc704072966de1e0562a14a44c656a2a9f0a6f483d8b4c2d9771b8e180e424b63db61aac2be5045c431d5411b894a9d95adb386df118f98ab67868bea2ef0394849e9914599418141852a63249f9494da6e64548991ec960d1ac1d2c648c9ab563d413093629974bd5fcbc5b327d60f5bcc0e527f4097dafeff5f57caf0e66860350db4c5b2b0a0f019732b5594d32b52953938952b780c1b4325546464a77f2199f58ed66d866d84e28afeb6e879291a9c918f92803c3e19f70c2b03838cba202330baf77efb416270c0c33c360e94399ec298419b2483033981bcc0cc609cc91edfad5dec065fad7eb6ee0463070a703ee2910a380accb41f97bd3101cb9a78df5aaedac57b6489335c864c7d10a3c6186f24e0d6646c3203a721d77b0b06cc71d5bcd0725cc10522cd337e19e649ac4c7209d97c008c13081a139ab659ebec8895186b1659823985bf68cd44f9c640a8317af7b635ebc320c108c500a84997daf53d360ce3abd6704aeef9e3b7187eff5f5cc6f02dbd086a0e993eccb64ad1d6192c02c99c120014724607f958b0ab4a38ea453a9d2742465fa4118873a286bbd2f0b8cff33c24938385fd1541059dfd2da66d208325e404aaa250c47183c87197096673a2b40aba7346bc20d327d085080be0ebf83b39a0a27d832fd0e78cb5df4c39a24e4acb2972025531926ce9a55841748ba80945a588249c204230377384967bcf2cd1f0b2a9732359b8b3943e05368a32d95a75934491fecbe9bd56515b1c5a6e34bce11c6a1327d1c1c6dc904b94c100e6ea50638c8f39ebe4c502a485490a8205141a282248c5bbe2894d8aeef4b3981713359080c395235c0253f994cffcd39bf1cf74be9fd3ec72350e42cca42cd71ab9fe3e62cfaf7ab98c314b1115fad73cef9b180a14e57ef9d37b504e31c6ab465ff7e0e36daeafe7e0e37dc1315f2fdaf73b15d28b15d2c56e4d0a46d4a0f00a7012881a927707d162b5062cb7c54cb1c7fece3f739bfd436a59f7f2a6a1bd3f308a2abfb9dc84388ae7ebc5ef28f178f2077e1fe144b1e6376a17cbfe341cbf779dcecc80388aeae114a1e40f9dab0a9dc7099e396e3465bd3950397514fc31bece331071a5ddd47893914d1d5b5610393c0fe2f349d97d312300f584c128f57db847f9fc70f6d53fa98241e321eb3db369eefe730e4acf9f77328a2ad896ff90807c600b358819a65033400d73662be9fa201ae5ff60f66f94e32974d1f3346b37800397979c820264acc12f97e4c04683c64d05f0cf100725604a66854910a45e4ab42ec01b46f8400aa28e504beff99c0b0bdd0f235893972911c68f3c67fb810486a9b1c5ee432c7ed06051d37c8f7bfca839a28fdf285e685a9202c644ec9dfdb578e2d9af542f31cf7bb592f553479bfcc71947314c9f773c0dac6f4396ea28d5ac7dc7fa9c28651be7fff85e62c1b583479ffbe8d1fbe2f73dc6e63e4fb396ef9be9b586a356aa6d1c6eb630961d0711fbc5f6221dfb742f95e1d21734a0e6d7c2b7c514b05e56272e49859c7c4ccdae6f4f763ee1547b45cbea71102620c5731a475cc3de53ae6aef2ad633993ef7d2a5e2759acc01580b5cde77b5494efe740a32d3781230f64c7dc0fb2237fe30fea55aa7a731872f27e8edb1ccea1c8c9fba631079a93f74b6349e6fb5f138e68398c9be73680be7e297304e5fa9f150e7698838a350d1573d69c41df118bc3d636ab5c8b720e6de15bbbfaa5ed95a37c727d1f67b574f5461f733e3168ebdbfe450297a8af2cde42c56e46c5322a868a39cb8dc88ecc9ce52824282054125490b35a667dd41267752fc48496eb07e9a18c2a4239c915e525ca28d7ca4337823982bca1995aa9374ec24dc44451266242289757e5f22f2d34dcefbce32f57e93d881ad77dd875954adf5fd1641233d092807695be87a6b93c70df03a5a7c9f5f5da992d3dd2501a3b5728ff37ee73b2280f9e8778feb934dcf197eb86dd584ed875ddefb6f9b95fd2f73a8796c4a6ab0ee4eebdaeebba0a0cf1fb2bb9c39dfa7acd1cbf63d35545e2eb66d54afdc6bfeceee661e69e7588d7a7fd7538a910336068c1efebc02af2f0de7fa0d8bde2406904dbe581a0288663f70a032919704b0da70f9f01a710bc5fd395c9f57dd46b17480382a2123aa582a292bbe3eed8f142ae3af7dcfd861f088a4a664cee2df13a5b29c5e2eb1725f63f10fc28088aedb2220f32d4262d086ca6cdc3dbff4a538652a6a0d8aed9abee2d3876a9dc6120d34f652ab6d4103ef80c0847f019d0af021116d249a56f5c26e222e2f2ff84cc8b7bc0a7a20a38c0423a290fa1b95bf0de2486209c81265fef6e1a9e4ae3376fd77594deaefb4425d33aa94d7ca212cf7b196a36fde7b39ac60ad8a75fbfb17b350307b22de59b2be0752e7da52fa7e93fb1e7f3bebb05d3cfd000f44d6339bf0fa462bb4ab7338506a053a6d0aae42b95dcdd644f77bcedf3da2e645fd396925a95745f451e3ab18e32d8ec3bd39f013025426a720586d07c9fcc445c25fa25b1a7f4412811529387d016baa6210c446ae75219825c675899ddedf674c70d78f6bc5a3d255e3756161deb1134a028fa551f4b2219df50418afafef62b100a9953daa66bc7f413a1d353f0f58bed7ace80daee3d6bbbb7e0e781b67af3bdd000e094f1af61aa05d8730982f3c67a68eded9e42019494edd3d14304f4d056867abb65e60f51dde9f990eb5fdb0408e7611022f93bd037e0de5504d8a7a101ec785d045f1d67935686fa7af120637f882adb1eaa103a458a0cfeca73e4a1eb189f21dd800ba176fa0d3eaf2db55215dcdd958092dd3d880525f04b63010c7c0552dc9dce1767ad204af6ff32720966f7ce51289410ca3d5486931572132911cbe1f6982507a46aebd3a6c1491b141d9c9cf3c61458e5083ce7e8137622039713e63f6bb98a3ccc7c94694304652a36cd0736f3e2abaa999a29b8549592e072a655df5f0958fd3953ce5cec82597070c428fbbbbccc4c4c6b6906b804b3101fe9a4d764eff198c54505e2213dbc7089af114e02a90403a715e5ccd43ca9c2630b1d69b0df53e454ce711522f08ccd22268cae56b71bbe2125c172ebd5e176e76bc8ede6efdf81ae4eb3e2ebb12faaba9c36daf21903ed81886b5e717e8976dffeceb5f64b640f77bc988e5ee44dbcd1692ee45229022ea78dd6ef99346df30809282a3fc0540529707b917be461f23073b7ca0f70fbb4a940814b1712722660ad6b810b4e8f1a17a1ecff644f0d5ced5242c95a69384fa101a1018957f6df39f2d76c9ae3e8ca63a0ad966eccbd0a16d68793ae9a216b766a7c34cda2c69aa83123b528fbd77a444989f38d817e0b59ac49a9a8ceec549e22579106fb56cacb494fea981a664b748c7fbbda5563a92531d09bcbb2ffc4d3565eb006c5e0ebb12e5b02975765081cbbb1582eab0964ce2a1de63e3115c48c1cc9feb346574ce09a05d953b2ff05c95bf6dfd1a369b367d5e1075cde4bef9867cefb7ecc429be2fbe40a707981d40b84fa17c0fee7be814e0142c620db91dd250620fda272e92415ceaba2647f9717db3d549f846b669c54c2b43f2c2ebe9aa36aa69ca13d7da607663182105220747d478f977eaaeaa7f39df49a8ef1aea8ab95814b0c6a81cb5abb31daaa51da6a5a6b352f52bbb3ec37287b91b3ca5a2bbba2ec8428053dd91d3f716d5ea45b1e4457eeb5255a055e44769cd792c64e46575d0e77ebc612cfb1d6b27b106dd1f6a08c9fc065ad2d11b2419d2c3b023ecfb10e955d51edc6c6c075a808ac9706eac067f5224141115010f5a089e496a491b8b8ec10c17f21677ad4dc76c15fe5075c561528b8f4d994cd19904b18b8646151054501cef4408191ec9f53643b0878ce39a70f1188144cdfc793ef237f0e90189a8e3de88cca125cceccbcca12b854b9dc54d0514e70a4a4becfe9799ee779de9c151cd283bbe0150c022eeb2bf6f578ef307721e62ef8a7a6804b0c66814b87d15aedb19cd861b507b338cc482efbbb8f1b59824bdc19e818ef6ed47fda4a3c6fb75ce2b19cb83c963337730eeb465a1b0397b5a7f6541858634254234c827897fd0aba0bee827f7d02f6dcebf52ac123a152b9d4e604e775012e411b3eb89c2f95ca250a3cbfc9222fa22364ee83e76bc2dc05ff962cb00d1f5caa5c7080558e80cbf9a22f57f24d5707babb7b963bb04cd18e438674a0878e32917a6021326249f6efc09c5dd7755dd7511db0e72b8b1de8c1491f1242e1fe13e9fd2f38732ff8a60bc402836e02efc930674d98cf34022601fb2b9760165be6f72f718b28cafe200bfd20de557f6687cf0f880bfe9d17b8bc59670a40be0aa426a824ad5477452c15a201000000086314000020140e8884a2f1702c4cf4409a3b14800b82a44e7a569a09a42487610a19630821c41002000004006646061b00caa1588870fb323ef000dfb810b78af011a481acc80dcfd1b5d476b6e0b8303f80330e15dcda84759e6db017cb34ce20a4067c2593e0a718033e037986d5c22c3d2450e4e4c5526866fd70407a4e7ee500b02a59cf6fac12d082d1c87389d5ed5931eb3d358d0e21448c0e2c600a543ad4017d9cc09d6cc7341962b2152122c7e9252a62ed6cd1a007d3a78c7d488c52f945f6a87a3b8bdfe19233693fb3067a09e0d871d1c13e3bee62c33e6c376cc83f3d5560a9c75e957be6224356a7179703d3ae6f4a8b4ddaa876bd7cdafecdaf475286ef28ce195a7ecd50ad6db21085102f979622c227c9b39a51e7802119ac260661a89371bc9e4a6ee0a0d65432bade8da0258d522269600007960077260b19cdf388833c02d38d9431b76126139dd8b7562bfea9fe77cdc219de17307ba87748cecbaf7e6e7588781ce825e6c4b112a24a4853316c5737e3cdfe279e75992dbcc4cef03aca3a208e3c7bc6b1952bf15923005e846e9e22452a57bc3b572d65fe30603fde73ea64f5cedd73fdb001caead3dacc0e4316657e24e18d24bcddc6ebb0489bf9f26c539627c4e64382467d301711e1e91861fdf01ce526cf4eeb07105e53eca3a5ea936841d25aa3a0b9c21bf7a057a36988f37285fd8e749a1bb7d6a7178e15f1bbaa9e874e74dd9da24bade750ca98675cd89b35be167bb4b186d47a6f68612fc932dba940c502f25b2a0edce54b0692b1f58f1cee8b75c592333fb6841a3616d3e17a7aa2bac4ef7ce497c69837d6a8f031f6f8425c086ed747488640a0a16d88871d4f36b19a58d917a2fde4b079ce6a895286dd881cdbc2015f6550e4e124b14e84cb6818c00dc9f6c0bf9afd9f3875e97eec836574b799d72e84842c0908a56ce1a13e7b27cada58f5033ca5585e11b6c9e9fdddddef3c3af466c609250a7eaab424bed0ab2246ee411a82645e9a13816230e76d7a48b8d1f0780ef36ed9a5cd66243da2ea785ebaf0b11221985989c7641f14875f627f383adc9073eff373f87100434c33ce0160520f236ba3f446c220055a882c4fc6b8f3ab0393d206ac810191d48d29b69efa73b03791495dc17dfe3f255a913a25f82f91c1fe7192289ae264447835d3bb469abf95631d1898bbbf5e3e8af12f86d248842093f45040481a097b9c30b0dbf416bcd2be32fd0082b9dcf16668ef0b4e5deb0fed2b407ca28b569b7003566a02244bf72e42945348b25f5248877b3f6096bc3ff736069f9ca455ef49de5186162f481be4c87fe8a605ea4449fad77501006bc9ebac1031bfd133f1d7c8beef72fba38a3cee8b8bdfc6da2b7376b21ef01b3f7e9a0f086eef84fb167dabc50eafe31f95c2210d55639daf7cce570f921023070d82106e62ec6314d5aa1bf85a570e5ecd4a65c3c3abd1fcd4cd6a24e8506f6e628de3c11c930b5e13d978ff04eaa2a2e8b8015ff311199462dc8cbfef23b040d988a9a70ba53f8d0826bb97a921dd8111cef8bfb2304a653d3e21c70216743645112ca93494a2521c0f175aa260abae063a58f843bd6f36299a01ef9cc3355ad74323011c22d5e465f002208975cdca85a5e822b211f4640a0bf743731aeb7961834c25aabfcaa6c00a9d1848e2a02bd6c4a893dd894a5c92cf53b356fd4c6e64ce3512244e97c3244da92fddb8490a34201556f6f7a5ac56a7b3e033affa23084fa434823b97a4a6a4d11e143724ccf0346b831fbe79dd48a65ef0837292631be77667eb2b4a5f9f9d4818dee0176a48f8ef6b507ab188f7d9aaa1a41bb433e11fa5360b6dd171f3e1c8bcfb61648c4bacb46efa8bd616e6c77e48a5a31b1a9c2b2cb6ea2cc5b963adb65e5af25863d0e650fbbfe40ba030a28844fb420b07db48230a6b97b6615c8626c2ef8f554da83dec2ea0ce03a6bbbf74b7899c2aa89c42350a6b941d0907c48fb79c3b6de79460062a484c50b94d0f00ca1350a14747991544f9aab5085f9287fa7e652f0a8a6a919d2004c23e746f4a00384ebbef2b0a61309a91287c990c2caaae95a133775e544225e7dc42301a96339f27c1029b6c73f9441749ea39eb892a0ad01886162959baf5d2c9909bf42fa2ef1b36d0424c3e7693e8717a2ade1e7f050610ee206560d008d010329769c457d1874e77d1d2e2be3b35d39d25c0f7b8a19dab51f80e459fec9acd1f539b9c180f8c1c12f565e2def42431a12562fd13283784cd41a43a2bed0fd5ce979e5ed2f43b82e6d603c32ef91385da61b4441a267e1647d81fc8853d1b04525a202ef37d22dc2c51467b330459abaefbfb7267c7461f189c68e98c5594994aba88941d62e21919a871e3e4fa9cd51aad484a261f6bc045d850b73620949f1ca67f4079948ada722fbd82f1aa1c687ee10e9811cb64bab7e4c2ee59d2c3aab7bc16cd0226d9e43a7727db356bb879a57c36155f000a04b689aaa0c13f39e39dc9ecaa34224f4d7db0be6f3bfdae32ffac7bb1061292c3b5a5bcf92833fc9500f1e8adcbb2d68eef909e22856b9830767b845e0f8b733b2b44a3a02fb1b58c3cd1d14fdca5c98b59a2e39e471f549223da8c379557412167a8f4ad0b06a16e54aa80f4199b01cba1cc53f80898f13b4ae896659ecf79eb7d6a36beb7e213112035306b4686509436682afe15f49f4f2300ba3ee18084696c089b7a2a19b2fdbfbca95dbfd35fc4457311d82ad1b21728bd051203533ece9c21e01b8e0c2676520b354c46796467db91a6c53c06dac05add4f652262930137d032b885bd545803365285327fa33946c0d990120a0a761d81e652e0332e8b5df407b6a03827893ae631b75fb1fb8982b4d8fcbfe35d28b903d33024fd4c14b22779007f34424b95b35793013aa4d456a82d15068c51e1a0084c15417d220a8a494bb051d5c88ae3a435ab2ae90ee21872d9295a5ca09274c854cf70843f543b0d2b3bfde70857299b3c5dfd6adf0807d3c153cb6f32db40904527b4eef81dfa80892fc520183e03be7ea3e110fe86feef9eddeaebf8724073686f2e1ac135fd16ccd67a1ec1fc04754dabd2a021972223d31c00f0816564f1b587b153bf0275c303b2e09d824840c6ca842850481e531bca4e827fdd1d81d49546649b7a9c5370843f3049de5fecff43d7d2b4a9f1be9bcb8c50814ad3cbf51b1fbf28a105bf47fe581308fbfc4664cee36b46b611e0ba57602683b190d082fb27a64dfbaab1f78b64ec29d7fec76e51fbb4bd9f3d811846ed59861d69c15b9ea44b5f07a48f5048b22394ee19820b883200e6082248a9ef7a132ba344f8080275a2b223e09fcd03de161a625db68b66233645e61cd42421ff6a3502d5a4cc77fbb9c99944fa6446b4fa09f92791e4d2348749abe145917036ed0512298c69d3692c2ea76188110932858c885d5d6b60f7a38ed1c1043b22e5ed79283ac122b20e972839739b498462a292c882e468234a3f3541118ba358fbe1e70c274a6edc3af0e3474db170d50230d5a9c580d59fafdc3dab006d41de324251c0986a4e66cc2f00aa05d016d50b5d10cc02939f95d7773d79b089bef28a99faec561e1a87139d236255a3140a7b261983f9ed60c0d5a9897a7e9053dbed5f6fad1115758c2f59354b4a799f66e851914fc641f9f3558f2cf093d271149d2b0c5f0f5ab86f292629123998df8c6faf78d2b01fe70f37d3522f0b59bb4326e0c8f87da67e2161369b28836b22ea8c302c9d333792523141ce4497f66bc79229827ceadad66ebabd7fb5d7fca8c9142c7b23dc05fc3cac43b874a048c2e4bd921aa44b89a43719b25f34ce068c5439e2bd96e2b66eddb8bd3dbcde32841c7eab5f66ffc4e445d5a2508d92a6c12284b5a60a0c4bf783cc20bc100e5e3d7a457a0e4bc49db0d23c4fffa10727c4161f6f1c2811382ccb85815ac828a066ea266c9509b7e9fbb41f60101377f73efd98e59456d18a011c18cd9cc00b52d1d7582dcbd1c59ac875276993a51d93c66baecb6b26650e8fd7b654050b22a73cd81ef2ee897d04b1f19da80836ec03d55ca50c2859ff568f101fcfef5ed94d6b0ec0532ce7e937a4378ef221623c5690249a8c4371775b7fe0a6412d9404eed0a617cddada1a3e940662001d3aa8cfdc9dff2c65efa905f33d29a6bbf5ca4f1001834f3e6e94ed58789756781ece95bd2e4035e6828999317bcb9501df64bf9dc0b29f19b637942cea6f5ab80f86bd5ea1ade68cf540f828afe13e44a598827df1d7631e6e561bbee7cbb5a8f3e571bed8ccc6e68f0a4bdb19c8060691147a548cad9d6a29b58899ad3b617c49c28b4aa5046858a3cc137587ddc4bfb7449e85d841affa4f29e0082324323f04e3f33d179a638af8482dd82a92766ede08d2b86e3039d6b9ef7187b9297fac39badde83befbbc82b61f4f80224eda74dfdca6874128d40f0e5692d88f0f93201c29422eee67e48c67eb81c7c8d7b3530e1c66da4e8b7b34b5095c8ea3aa3a08f6a144171ad8a6922ab470b7305b3c1e387b954f77b3641102b039fc84d3292696359477a649e2d2517b0c45ae720139484090244db750ce31dd5b2c77042bf423d3d02db0142ee1cd0c6ba10b6e25c9026e484bc4b39d6b7afcf1aa8002d9fdbcc6802fccbd696ed2635be6c8667c2b2e5b0e30982c3f08042cca47ed9847720c13cbde8016dd0bc1938bdd5391621bc0bdc0dfda2015a8eb112c45651f078ad294bdb3e99d04fff95a09114f6cbf8f1ecdfe4d78079ad9108da4c714af8222da78f32fd93c7f0f265cb09161a15ce96045631c23d1cfd18a511b21a23be996322b8bd014fbadd21355d4b3b00b7b747d6c391b52d49379ccd7174ffb5fcc8f0d2e3c413e8e3f41b71c0056ad397fd004492ce98ef442ad2910933cfac428487fc706f6e06907a66527fff1cd7928e09f4a016047eec0d18725fb64a2d2ba2c851967ff8ce909656412c7ff77e414fa0cd7f5ee68badc741f3b039b40c97a0841a1f15c3b7ae689dfbe51ffead89d4602bb999038fa7f08b827c639d780122786ac1b87e3a3e807e3118a7fdbeb3bed443f0d4e3fd89afd395621de5ba786ebb64d7240255d126a43212cb905920909743ad905178a46987a6ae74556bfcb27a4131dcf5e7711b1fe2596e8974f79ce557237cc358e8ec24a81a1cd8a2ea9585a17af76576dcb34613beabc32e7a030238762c2887c71c78d07694f0788f9d731792b8b5c90a8317e24095f922dd1754e3e4898695c42ea92fa1a82d65b4b5c44119198cb7ec3b87f00580c493c01a11ff8595df7671fd7d3ad64684c92821ebdb22dfc8f0c586710bb5ca00f9e958802dd4a26ce15924b337d6e1bad814e1db0e9ab76eb7859565d5e1600051825ef0cf9957ef36510aaab6927a9d6746b164fc36382d41ff85a3929f449be00b326a8047fa9e630295871f42f6bdbdb888859820a9093fd6f276ff0a207045e9caf930dce1f2f02109d70ffee5718aded0d66718234b83ed8ed21f52008ce478c7cfa36dcfa454a588d8b490ff5539494acac9cb154e74a66f9fc29242db36e11a2833afa991b1a4b7dba1d5c613ab18b83db503f6c855ebe959c3cb35045dcd7fb07b54bb9d19ee95a6b1e633288925b1922148bdb6fc45385608d5539924baa89b88bdf4bd1a76f6b4bb983909fe332878767209115996ac9b41821853c004b6d566ac2b029a82be434bdc357e953bd83ed47b00a0d28005fd042eeb1b4a570eb2133ca8e04e397565c9c05c13a35dc51ba4f01357338e6e73555e13cf4505916adf3297342255c3d6c64259a051725cada1de24eca9f4953ebd0b73c273b60e1e28274347e4659bb7383b32ff1ff55c572c93360fb58c496865c7bd791ee5807e261f6b0c1d3f538ba0734ad031aae52b8acdca2f8bf8ce5f9d75b02b869e51d579635487cf44676e2fd2b05ad6cb831660f4d6421fcb884e1689ecd4fd6120819c2701967d8ec66bbd7f7f910e001cc297379af214d8b4eade3d91c6ace31b53cba5e12f2cf526fdfd98b3c576501ba44cdc48eb89c2493856ee46fa6ad57cb101b7ac1e1b24bc391720418040e3b632d62dbae62f082b2cf81c1c8c5eda4d9715e1af3d1962b366fd77a2abd2d282fedc20ce8c894c4bf3b447c21be65cf9a5deb137c52b6de19cf1c6db96b95152aa52cf85d813c9dbf57a937097503a6882dfd26c6dfeae9cceaf73495dd63995dfa29d559f8fe31afb549e53c8c36d8aa6af215be69ad2a52a55d7df4685d174e29c800aa16b5e494e9526ea543c83f757e455a9f1108c62a2842fdcf8b9f029c28fdf692d5b24fd0a8ae5e369824da8b5be39517d215321a674e42131bb154069006bf7f03f319057464d3a897727d2bf823bf1a85eb1983ff5a97ce0dc976738f6f4cd88f30ea0808d1d50db054cdc70b6526d41cbaf71360628ddaf8d8957ba2013fca28b18cf380ffaa0dce17348df5cb815b8acb8bcebfe045f31919fec8b3b4d181b6fb610a87b1841c448e40035faf5eb4041bfa0d480e96634200afd485becfb74e80408887a4cbfc6f920958b36fa6d1d6cce8b30043fe790eb2abfefc1c101bf4d1d1052104209b757b66155f1e92af1a62d580a15260d2c848e0d7315dbd7f28223b34809f8bb0063077e9bd6f2e9d9fca13d0dd02c64c307fb8abd3d8d9dae6ed7df7968d82c62cd76f10d0e0e16390661c416f435ea6d3fad31c0e5d21fe9b2316d5100558b2cb3965d708d80e519afbe4bfc4a658660e9a78c32339531b0290f5f305c243896062749799f6417a4207f3c761efacadd1e63bdfc7dc2aefd784ec1a2ec19b581acb9211f7453eea6c6e7ab37894081e488f1d6f52119999adf1ba79251653c7197830281ee90b03ee23eb0d60df3416ba5399c4b3eac79d21effbf3bb2468ab35eb704af0b509afa96c3787037d4f52a1d9045b7b53101642b217296e2aba57f54f6ea011e3882ed56283188e421a9bce39ef0875f53a3973b949baa4af7f9d6446a62cd23179d0a74288e0fb94223ba7b0c31556d93c9c3a08c21e01ae3508651b772d5a7bb3a557f03778ef23c1a68736f4a0e795a32192106f06a1692e3725172ec692ec184440b8aea87416d99d93c67d0d19e2be9421ed7cc8c1af902d1bc0483419061f67e54fa06750d983ab3e66d7e47a87a28c7cca141820a9b49cb2e7ac1559e2623dcbeb8e0a208964b563a7b9e3058a1ea01e685f7bf05b4e4215e6ee6021c3fe8e78336a6871b04b9b3b32b0d0bde7f38abb07ea82dccf8ec931378515a57af523c6723b48d1afbc1c6a3834530bea3c7cea9276bbecb262fa3a4eb35069f2fe4931b5e1432434172a0eec4d31df0152ce58964ba1d06a1a496b40b12ae6bba8158ea7f544b5db3225852647c62e4a80cfc597f0dc07c08a80f8b0f33b9bb31060b9ea484c25d513e9974408ea8235e2e952495b28348c9ef5075e8a0ea5d46cb3ab9a536deb0e055bc08839edbbb928d95155972c8a609295fecb97b884b70c4f710f49ac9025a31ec13364a5bdf5b16a3ac687cdf5e6dee361a20d0754d6c13e2c48eac9002817e811e273e36ff48e4e79205396d1eebea8feb51b4fdfbf159226dfb694b70bbbba12df1a7df00bc96ffdbb491cc8178628689536ab1cfbaeba19fe9853fc8c09d67654a92e195c69e67a45a2602340d1a493af414e9a2476cf08c349821c8acf96dc2ac8991283b04caf258706991625b53569800a0f161d403edafa09fe0345d58b9a68cd780552fbad691884c1018c3b63590e36162f2d0340b79f1a3a142084f001632f41965713eec36c45eb314bb031eb9f46af2d1b131293ac7a977aad589e420af844d3f4edf1c2786d2af74cf89281cacf4d74c110c8c80f7306625b296c8aa63a4fa2a35ca748ad18a10e80e1f814878dc754d4c534217e4aa8474402223c7a2304b3441ecac4bc2c809413966eb4b27221598b0f03fbd13534df43c8ad13d1f0be389bafd680312a7b84c412b05de4114ecf37cf1730dd3dd27cc23792302e8902095e455080862a9d67627e66a3470c757fce93bba28d089e64c3faa4a1e9304820f0fd07c3ec4f5b7d25f5326327a86a6c8ddb3d6be2373aef4021275bf11440ded66f04837068304f3364badf7185c8def93c09f0f835cf86dc8b7e873440fac732adfa405bb7faf09c02bcbabab92a26b2a55d1ee418a49b45d4adc69055f6a7918bb4797ea3a519b3b37bd49862073eff268de6d3dab5dd5879e51a9823b12cb6efb6a20963e611e61983213f5f9709cf310939526ce4d0d41191343c913221b92d9d5b4f6b634cf6dd1301a86143eeeaca8470c5d908e55166c99cc0b1093ec892699974d98ac119cf019df53dfafb9e9157f5427ef9e2b600bf19cddc50bf9e3fa13c30aa864485de7cf9c609d34acb67c611c0bc1d66d7bfe83eab091e252b6e8711abdf13cdbf7e810e04da350420d32a410310d891d6a61fe053970a39dd8ac0e575a1e2fd6588f8fc20fc802b867eac5168809e6f4acbcb84f52c541a9c65b0ce3aa781ea916b3bb7f60616d1eda0c6c6ff330b0c88ebba1ba97eeaaf8d31574dc1162bcea3e5eb13c8099810baf54731660ab15cc63e63a537deccd4dbca242561804c80386c7141f737da06de2ecbb6be821f3b06b4702ddf84125ca2120c6ad3b964f01f56107e05bc16a3368ac8f6860511263ca3c48f9ddd53c01ece16f91ca8d0da4e1f900f2df0909e4772547325219ad7c9d6ba7576a0f9c2396d8fb6d6d24b982db1ab8bb3e2b34ecc2367c81888839466c4a68155eca218c2769ca880314730db20308b30a32d4efd33ca539e88a429b47069774a502112115299d025e47fb61f9309e312d4923d22260c5c2be6237812d52535c8dad94887153c7e33458f7de0f0d2cbcea14f286ab12128ec879237e8643ae8bad5cf2187fc79fe33dc45c6c32e8441e7d0f08daa2a05b5f7ffea1f0c78ed714cfb9c4b4fbf0fdddbf05a206a1ebdf8814c0330a4cbac821166882a1244850081acae5ef8ef3b37dc0d43ef2a50f4dcaf562facefe4c2cd2381b6073a75eb4a7acde2132ae518c3cd581d8795f0a8a283ae03e6c50cb3bb2d9694b4150148205cd7ddc574759ae57c8611d04db5200ebc46257214208bc1847cc52256aff1d833a3370592843966eb9c1cccbebad9169054994b849e45577676ddefd2f26426a7c11c42b9db528adcf7de78a2e2116f81a231d224a18061758d7783d5519876649b2eeb1fda4543b89433eb34e3a1258475a7e6783ab99186469ab1d3e32f4caeeb0230204755a766f4ead2d66ad74ae68964abe570cab1371e14ecf35bcaf6fd6b440f349980ea6a8a61a3f00e51c83874bd2b502a9c4a62987b4d2cb5f0508b14ec46a5330cef38976422a33bd2dd4fcd45121fabff4669d3c9f2a1313d33c9afdd8b35455121ee83c042c403d532a1b6abd35a9f41b9c0c841625622636786f3d709a4cb835ce9c65eb503d332286dcb221e13153c25531e9a98c325e94dc60264f10e02dad02213d764a716e9afb8ad5c28a8257cab5e5bf51e81dda98ca09e479cdfbab984edf01b7b3568421a2469f0614b0e6ff8ff6d7453142d4e86fe009cd7e4e80c3ee8eb82bd0987999ed0b4f2fc4e146d7008d0b6a6d9579ba71f0375bcdcc47313262aaebd9ece4ff841a84603646b9d81a010ed98da5069407e690d57fe14b6223c48becb5c71737004bd5ecc2033e0b8ce43cdb00f3d3d8996c8cf9ccf6b7733f64fcaa2a30628f82e11b617c34e07e3b2941ae3677012b4a628c71bd582c073e8fbbe2fdd2bccc6d0cf8c956f4f993d6f58dfbc333b91511618a7040f2767b0fb75834229f6c9c3622fad42fcab0ad29beb9891910a4b1799bf7969bf5a31b105562a5d864a33c288072af54a3c0c1ec6cf8b391f51c47a5e4e3a02e19464a41063627a96ef51f0b118d9fdc46982bdb2ce1f8a05a7c55e7bfe9bbfde31feb8df919751ab4ce121a0edf355225d90412ffce09d33fae23d04b05f8b713eeb81074feeb75efafc96a4db2cae506549e4c364e9cc8c606b0f6deef1f0949f0595914c74a344e9e6cb495609ed6d5998c188a06783df3194963f02a1b2ff3fb380a5e740c14520098565e0a147fd5160f7a252d96d5531f896984b1fc3cfeb1ff7966ddaa1fe934ca583e045002e124b0e2f9165cab4e1423a2e4564a5b6e33eeaeff0acbf8cdb0614ee4a21ff3f64202e8a35e397a75aac32ef440beb302f8559d3ba5cbede4ec13432c9da1f79d07ecff9bdff1dfdf95c83609c2cfa5c1cb11549f387bdedc0c686f2e8d7e6a694857ceb8f5b8b5c4736914c0197c25d1dce374d99d43911649a222ed07b12ba6a640b39258b3f72547f013f3e78323e26ba1ad044a30aa82574cd87ba71f00b332ac2d84c926b7e1c4357d2d2b744df8584bdb571c7c8744a0f241b1a15c4b325729a7eb6d9658bfcf640e2395380906819bd45ee1f82c7dff37b9c7fa50d4ae3d1ffa6bea7add00b3bcdc7d39d336fb59c06c98359dfea566e5c21a94211444f399eedfd81013ef9c662909611962f924adf0b00dcc2f3d7691cd9be3c4ce0298ceb41ee440b82ea1a5c64fc0bea05adb32d170d37087ad5b45b8a19cc4103b064d80099ba6c1e726ac9c9e622ba344112a7dd56737508b69971e4b14162fa6021f5c20d98fa001682eda72bd69a87a10c1c46f9072fbc5c0cb55c5ca857c74829e5c6a4503a58f5a48d668f8b2e20dfe80223461592c8410c696db9f72fbf4245e1c19354c4569395e8660346bf98123ea9582e3a17bf8254a3cea1bc9ffd1ed6eafb68ac7b587d3158df4d30ebdc665f98d0c6b475ec28905088eabd865cbaa60bb8e8e016428e7f235067f87e1cda54f1f3b5e464fe313411f9b7bea82ed39cecb55e0c0bd8fba286eca360931577074226b02ee207627813c7b4358470407b8b8e46ca566777c0a58e4ddedc9224063b1f26b84c00a4a8d673ad402151a215af30ec6055fd9149dc78110946d6c109758a7e68650fcb87a1e123416ed1fc9492a0d7e7a294a170293b2a05590eeaa096c6c2b54bb8d7c428b11747ac5df281c0cbc96d152640cf1043384fcacf53f7c9a5652eba4748118e0bd60a06725738b451df27a00c0dc6662ada018d22895df1f657bbb3e346434e38ab4a158974d6f26ae0f25eda1eeccbd7b3791e6806258e2c2e692007606b4375dd77a026acb2de3ed62d149adf627b55c85ae586a40e4fe502e4ccae878aaff2a81b9ec0b6ea6f03885e373198c29b3902bef8df5eee36454692190152d020065354c17978b8d36f679ad279f4bcaa464f8452ae8b7d52d767d0f5adde11cbc06a683fbe06a66a186d700477670bbc105dfa0e622aaa962e548eb348abc72b110b62c190b96d5db6ac2b3ef2b0381a20b581615b1cb62b03f6fc85155254297b15f3ad0790d8716bd88ec9c16458aa340e80759f265f65c1e87df7f5dd4541281e95b5a323a4cbd60d8d2e2bd5b77ae165100096561247e578f5032b5b458b0ed7818e90520783889ca0cf70c72e4c7fb6dcef987e561b12e5ef981cb76fab25d4c44737bc4cc91dc9f6cf525b40025e04e29fb646f7582db1b2983f7f3757ef2a66f115cf47331b8432e8e4faf0c06f4d640841aad95e2c4a140ceaeaefec3e56018ae84354d8ad512ae4b8f48c57976e277acbee7cda35961034bd817829f29e800e11d531fa2c11ac93bca29c834b6d3d6a5a1c31c627241927b6d4904cb1cb1cb00a5b77e04d9c65a3c0d05e73f043bc6b061f95995b589d137444b774ca74304aeef9ee0366c270a6e3926b2c50d40c6636344f42792d4b6e1e0275f1841cdb7dabb1afe496a6bf49a32cc0525637b4af302e55c1a995cb864f41d7083f063750208a5d6cbcb2d189a41069e3d6a2f0be48ba941268cace90bf99404854a2f90af5d39b603ba9b1951c3e2a0265889ba1048ac084afa2b277ed0b8fd0ddb63cd99add15c5681dfaf97609a5b3399605c2339d5936218b81d8f4e94252e59b7ddb09f5c0cf7c0a4bfc19a1ded5e481984daf8d5b62a51a089b6cf4473b4378c77fac149e0f5f8c79bdf621a606b71f5fbdc0c20e773c02378c758f4efb838ace1834ea2599e701af44a633eecab01f2654e904edcd6d4b4f5008977daaaa502692b79c702d17db2f299310c5ab7c468229b54c3935d7f622fe56082ea36e01be9bba40032b2adf5c6ccc732e37e346e5edd35903f4d12d7069065b5edec8c919dbfeda36396561dbf5b880daeccfda1a87c51dd7be4cdd40a20e9a695ec0faa2ba3233fe9484d611355ae3b3a7153fbfc671a9638523d047fbaeec3fddd06315146502d5ccdcbc6ad9576d80247b18ef2977ec9e853d18317ccd71a7ff20f67901a5f175a26e602982908d7570d01711139c569e38097e25feaac66883f1f3ca98b1896ffa8ae2ad6d848205a75314cd45365842d6c6c32606362a095915aaff1661a1f2b1c5dd49adf331a7ff10170e60971b45b84ab9eeb5d9f3ef814874bbd28441ed3042d58de44495fa01437c8dc97d398b1590e86c8d1523a00699e1b9bb1e2f3065d7fe17bc7ec1abe1617a72ba05b5f0e0defec93aff3268ee5f4c6f7f167f0b262c9ac24b21731aa33bab271fe64e22a4be47646b42e70e41b875850de1bf85f6c828ca13ce00131460e2e5282675a23251105d037f72095e9d585be4d3c102087f56ce7fcbd75412ec5f0a5d8e06c1db6f1beec494d244464adc7b6e22009da224a1c9395b99f1724d97a8484308f1c2e17acef671d8443d5431cea26fad701e35fac50cc712e294c78eb5b7c202f5b489f43fdf5f5e263694f5c0d2c1db6dd9d88d907805f514f8ac2ca7060e46fdb27a473f87301c6d0b558eee8761c366f3aaa9a19b7ab7114e90a1314ed928b2e8d051e5547e1b9ad384cb8d455b6c767eebaad1dfbb155f4da8d2bb8cfa8de05340b16c2a9b4c3534b9d2f9744ea9e0066dbcb5f629ac72566b48943df22dbc88523501d2096b89bc55a8625f24683b8652d81f6831258c162ec8518295121dbbc222b75baa0d3c6ac8cc7b52788f916b5c4f5d12b2f9cc8f7051db8867813db0ecb7a8db2e686c56051c61d3230c77c8b86a7bc62539726eaf879e17b840c9fc406d221625bf06f4b6f4ff233a957bf6895d5482a0e050f30531ac912ed148cc1d92a4a744f668a24caf94fc48439312a210df0386c94c190d48c55463854c5857a7814cc71547a812fc450b70a8b7a895a3b9d950a050156aa93a94d51374783140c49cbbfedb9413e495580b8948b04c60158227eaac3bb22990c58351a40000a13112f80e4c2acd6f4046d719b0b5f1f1607ae2350e283a3b7b8b65bb07df73b7a73e6388c8c581120b006d8793ba34bc981373fbcdbf7faa872176b21e10cf35c06d871578b96023f3a5b47abc16f5ef92d993700f2aa447819c72b2a9800dbd90ee76bcc2cd5281546a0c95a39e0c3d7f7531ecfe139282a3bba3dc199504f84d14bfa94a1221c968590c2fa8908b3c9f93ef8cd97f786bfa048dea4d096cfbf249d8a9801cf95aea4ac5498645b34622fabbcf78e1731687f91f1e748757185c4b5935ac63107fc51eb7089b53aea5a017cb98e903eee0eb636c97fe56c4e760057d2bc0157c98b66d2a876dcf1230d7f3b9ef2383cd1a0d8b60d235dd778b4182326bf6a27bd0131b737faf7d92b50a9fa30ef770f147f590e8167c70ca825379b9ca76502ccc4056ee99046de4f3a6cb4d7a96756efc1161d2684fc69ad94394fd34ff612df4dc96b4b99f8950c91c619baa2893e36e91c13f69a95410ca6d028fe12fcbbe416900039a2534c28cdecdf4c2ae10cfc556442cf062389f8470aca409916fc394dacb99a2826833f7362a204149ec0b02eb0c3983f04167aeeae546ab05f7b05a85d5267b4bd715791f484c9fa07c7bb69cf8a4331a6461b06d42d740cb0906254aab662ff35cceb50ec9cfb69c56270d10f44d468139a0a427e10550c219c0a6bf616a8e8295bc7a5f5478c7c481322a08d1625f005adaca1f1e2002ce5b83b73684457d743520ee4ec95bb151983db00f7b4976b3596dd9fc4d3d13f69b0e24c87ce0def8936969f617d36300124fbf139c9cef37052ff3847c07d88802f7b5cc36182b1cbb932a4066ed379d3959eede0e48cedc7e8b1bf71635f41cc2c7f09847ae9fa3f3e788b9aaf523aec9fcd989b1b3e7ec97ffdd7fb1c76087c822e72c6c818c6ba895367e612d51c093294951abc7c5b48001b83bb4e534ad8cfc5d6ecbe7cf07ef2418cbc70f6d569b5f348fa48a63889e5ee72107d6b21e172b50f67e2b8181186a0de6b4ffba2075f1a426d17f7675d1cbd18fb6021f4bbcc4328d3df43aace037624a5c0e42c2a453ac1194ca90ff5448cc8ba9696ad0f3fb88db6989af359e6ee560fbb5c3e0e1515ab985db769d60dd6f53540bd0398bfa2d205cd1e9491df33b45912e7bf7c5b6c46555e267a8bdc4300b1850f0ea0a73615c41702bd36764c2b3771614e243b347b11fc4e65b76d0e32a2c526e54b5e4b71d8893e6e5b6a0c57d17f7fe4dc0b4ce4c82c1d7b33f523f1bd2bf40a22443fe26186f9a68cbdad22c8f7a1bfadee8c400782b1fea8b138c1780bfb48486ac5b2cba4908a660919dca5987871267cb000829b858456ecaf9793f7605067ed58a83eca66912546db041656ffbf45a7da4eb861c31adddd08ec8ccfc1abcf0ef487156fb784efcbe6575a5decbf7c4ec2d1011f97dc171b2d975cdf30ad0376e74a6576c90c12fee4b612bf748e5c51e7eb3ef566e19d2f4929ff51d2a93ea7a42c21fcc101c96e82a41ee29c7f8c7dc74d9d4d1e624dcc83decfd5103f4dcfdaf1c9520e7d4bf16a80e0959218a1ce43e66a71b9faa453310e5dba750bacceeead8622a6d23c4c1b7ba21a77da1a9a146e4f9fd329a1219102c0b226bcc43513e01032ce7f934ddfb7b8f9fbae354b55702891cff0397dfb65e2968205daeb2f1c6be380f83cddfc3a04b611d101ecbe028a66de4a18ed1bc0a69ef8b1fbb9b023591f06149eeab73da90ff154a612b65d8633968f25d0688d1dcaa8c460d23c472c1966552232fa1f85ef8a66e2e4028a14d048532ee4c6dbe1c2ceebbd72bef8665c8139d6b19cb0e6b95202144463dc0aa39d59000f044a1c0c54d5885e591efe3fda0e35b29fadb84f5eba516e58b17f7c6ca7ae26242af7e30725e98382afcad6f0af5b85ab5ff01eb22980a248192938e9f1de22dc87f182efd308383827cfd3cccf450d3d78bd69986397004675f2ea4d38e206cfdb4a1bbfa94baff9c836583df7c50ce878205d8a0e86e85a81509d4d544365af7fde1579459e48132e548c2c8c33cd0b26efc66b98ddc5a433b397c618a5f3314ceba6dc863b1e99c2238822d1263d90b60a948fb5d2ad0bcf554f11185e08fa21c9c0d5928d34f86401b3e468fe3594a21f7635f836a0f426cf1aa856f63504aad503d0051821fd805dd4753786effefb0fd5af80c5a8fd8fe3b9bad1792b1bd92722af4ed18828827ae45194f045f385c5ff6367f619dd691617136cc04735f6c57f545713e49915c37c5489c09ea0186c585a2ee756f7338f91d98c5064630dad46cf495184a04e032987b8d62383d126ffff6f7ee8e8f6083e9c686ee0e68b2bf32335cd1254b50d75385d5246494fd64ee267a7789b00605125a974239ec723a00d172218b777f4bd39edaa1d6665dd5852d218eb44c82e2ecce545a8748fdd39aa7d4f64e3c7a8799e72905ddcaa9d596ca13bcf738abdfd57740cbb2ce092ee83e6af7e8559aba513532f3cf86f6ed5339c8754468e1607b17ff2ee058ee640d499aecac865b77337eae40780ea2e8d5596c8fbd9d0613b883298b5b8ea187c7d01d33196fc100f7f461d9c4ac75a618c15de0be5fde9ab0a335db7ff68e00cd49aa6be5f9926f5358c8eb24ca38682ba2d7de59430798575151b90ab291f36d8d7e12cafca2cd7cd02e44b1a9987e3da6f6ac3af2c9321e4b44eabfe06484faca52e0c287a487abb48b9d164f45ccc07a56413fd0deba69382a631623f2ff6cf463edabf424b7b8cfecd0d7b170c69cd3da036bb449b9a6c94253dd89e7635afca8e89eaab4d0642f640ca330766481bc58daf251761d4da80d741949e2b227b6a622aacc0f5db3e28e33a8dcf3542811a4e611b03a976ed631a76c20e74ffa8b1ae03c2987c818d8930158288ce85128dd5a9b2d2ef806a72280d2edbf070cf09540bebc95bb719dceb11bc4db31c8fb6c316003bf2428db14d0ef01615e34edbc4661d609447aba2dccb0128e287460f626428ec320851e1900ccfb28a73117fd7d47810358a939ce932e454fff38d2996117c195877cb089cd25fb179763910b13f21c03fec73c981b07b43b69ab46bbca60858cb5c71266ac890b26892a7dbe6794ebeb22ab67c0d897fe36062e15ae566df2237692f6a7bf5d249bb7e7a112a43d594e1c8a4fe834a3489644379d1642fadff89f4c575a6c88a7b39d5c70ebdeb289b909b9c49fc0dee3f8da9882680f259a50c3fac6d60ad58af51a18495c995fc50f9dade0af0c3ed65d958ef4ab07b54714e3a903d30d97027ea17693653bdd5f0db85d576d7e97452d0c3d6904f34aea11b10f0b0fb69f72a875fba32c96c51142d273f143ada87d0c8a723036b8f9d52baf50345e4f60010c1ea235c969ac56c44065cd5d857b45e83b9f522a00d562a684af84814568d1f29fc8f40d5aa929fb0013e38dccf114e4ca35dd645bc97bba343c741457e5e23aead2acf2b3f8d627c6d903c14df20aca377395622ff2ca04c99bf9419d07f1c497ccdfc654d12c4a618ff986e6ebddfacb6c28ff49d4b7af269204058ccbf2df5e8a6b89220fb387915bb12ca4dd1788689a210051a370f9218acbcd81b388a5259bce8e20ec5882e3c440a04dafaf84c42c94c746c2005293259a4d12e04f9f17a2225194058070344451bc1f3310d09cbb25da02f5734e281994909c311e90a6786230bf2e55c697828756877124dbaa86fd8ef307f34e853634834fb6ddef27adcfd414112051074fc8908cc17237073ab387c1cd93f5a76c24ace5f4916666d93912491c5586bf697801101e96d81e1429229298e485cd59fd1a5d26c2fbed2e1bb6cc8848ddeb48b573a7f000d8be62fd90962672cd48fa4e4e7fce1990754a84ab47f3bf8e55fb0540fac7b209e542fe030c4826b0f8ca5c2bf154b3401958fbd7a0ad495aed6daa727dd22644d3184d2a01328d7248cd4beee937dc5a94c317108c5f8999fa520534d2fc2cf231472fa1b875c64dc3f7107f4e1a8772fde72f4337f503a7b3675c0841f711e2d8997de9c6cf58b4ae7cae8153162c8d3d4b828218c8d4917589ae0f2c9dde7766d24c0f566b499068dc820317df7a418f687881eca3360fcaa500c7fa8985c9f0eb286049888ff01a735b9c027ef7d8dd629d207268434c68ab7f71798591b48fb2833122d214886fa461c09179b4220ef5944561b600bac88e46d9e56e69bd20bce42504b9d5a1d26edc98817dfe4115cdd88e84a0a6d582ff16178a28e709ee791fd84a1d6ff3e83f768ed705501fa8141ca3e8022e4b75f83a0a84be683366f371169171661d0e3257a1adbc85b410c60ebfa0523a189d581c00e6c8813844c0eee977b6b06b71924029c8f8f8bb3e113d5263490472b49baa96bf6cdb4f406ffd08c5287fb2f80a9c9b67427d7180a5d91825b4f7c00cc4780a54547358f815a61b854702a227b49490f479250f4649b62649b656dbe17bc78cb5b59a54d1a14c053e508ad1a8001fa6051cb995aa69a62fef270ae7d72bfaa613aadb740e53ac91755ec5312bb9fff10aceb738318bd6b5ef39e669dee9bc7b98c9a5ace6d6f994688021b4e26e181ea1f7feafc36e050cf30ac139e6e7e164b053a7c3604863b6444859fd1a0329243b63b7819b6095de5f792973c5dd141ff31529d50eddecb5f9203733bc542e82c74c5c35fa9172b3687e9605c3d91a24a4038981d61a96c324068e41ae68eb8659787e1e4cbfcea8ea18d2e54bd647a4f8f43650f873f0244e4775d7914bd4f62aede54273231758cf5e2c46fb2dc7a77c962cbd523fcf5c4fb06a9fb46e7ab5130496ccf6ea2fac7ef99590c1e00d8dca80c3414bb075d9b26e22c07aabf0c2f027503e81fb328aeafb6f66a1d6d38d12e02bcaac7fd648f28a2bbe6e418b2f824d7b0e37566c501eecddf337b974ad9a6e8a330b00a0908d22cc2ce4a77f69a0f4d3fa9d02d4b9e76b919a7eb927af8ce858dab0d7882ce83d9dcc672776bccf44826e3b0cd4696899d4c0642339f1bc2d174512b99561dde96ca6d8850b9ca252fa580cd2b70251629751f3b38821b87106e204401e12b1a702039286ca243ae0e1aa445ac31feca4495307c2181034deac90dbb5641f1c513fc2f5a4b9a7aa33f62ae156cd9171ee54ed813e3ca6921d9e221a2fe9547cd1b0716f02141e6504c8d76becff18ca1dd5a16b96384c42597bf2ef406e138de7e7500f18bf96657c68e17036110f11ebd4ac450a6f2f326bc2343981198acf1eea0193116676ea6d4eb05455eadeee6800c8191acf43d23ab08e6340d7d8340fefe3747655557a1850dd911d5c5151f526c4407de2a26c9675ec34af1c210fb5afe095d4b0dafab8e42e955577a6b021e712a3cbbb8c601890951b98461f09b9bbcee23491aa4c3bc3212d20a45392b7061f4bbe7aa441a01fd39d845e93c83e2a0b7f4a2942863460993684bd4bbb69e0eb3f58d39e6b8c2216e016a0451205ed728b4ee887b4c98acb976579cc035ef624a87bf5dcfb020748442887e7287c6034b4726c4802aa8978c72910ac13f6b0b94c36520bebb2d01f1309abf5a197a81596ccda4ba70305c45ad610f1a2a26da880f4c442c83fb80056f0cc022832b3ed860be026c57bd17be5505aa5170061eeb6f20a205d8bc268493e31658fed9b94700bdcdc5575335ee3187bc2a4f0cc64f2b34aa84a96733ce0a2c97b00c0e6e7ba9208350116ce894b1372c90eb22fa85534742e9dcba79be12444e7ee5019270164b3c6c7aa980e210ab192ea0bf839247526750523d5d2eb5d65a1f45ed6a00fcb79174ca999b482b39cfc26d1bb6b6a2f975649ac09d9ac6ca3c70f3c9f031ce5d5275916bb06dd5a4b3a47eb17720050d3b425fede18d1227669e164e5fe244c5e91f3ed590d259fa8f92ab239f6be6c79c6a4d12c3ad8cc869daca64d602c1c8a84fbbba0eeb64c5149dc2bef21530bf871902f74217ed3cd018ea22eee2df188e3747f13210d42d42890650e06487d167af3036b4d0a40be55c6f54cb8d8a0d967c5bdf0eb60b3e7a68fd15c7ff2b733c331e87a17cfaf83f1447e99511fc19ec320e0fb86d50a452bd762537b904bd6e4138df76c1845905bd2027a8b015ae632032d7b1108503617c640bf0fcf06badc7c2e307c65e3133b6072244a36fcd660fc59c1dbf29354de486c8a7c75b632200aab00683528a698e770229a4f2a2c483cdfd9f41d1aabd02246c6b730b5faae820fd3a0853feca9ffa182531e8681c0bf6f9733e15d29a23825d28d61f51ca6b62b8f1db640d6760085a41c60d6ac3353c19376e8724b5483e791325f7612f8d8db5afc2e2732a6d16d72ee645e37ae62f9df6d1f60630d8d2bb42c7b779cf8f45c813f007fd2cc30c9c6b7adf4eccfcd17a5bfdea5dce16388be0b791f61b8eb3e35dd389f4ce7ede23ff3a88bbe2042258791ec7cf632e192c722d2950856e68f4e4a9fc40b2d450b85a98e264119161840c2bd6000cdefb36ba9cae387cf0f1f9176202a0bf833a5e4cd642042e934323e5643cbf1cd8071842dfa012b14bd7e39eb3f12a088ce42637a94bf8d3c425d51ca21959073ad93e8075fcfe604f682e626e7f6dcc60ec0543d2fb4953754c9a78da5dbac19cd877b7890d270078bc9efde4ee8c090a1b25abd579dc4690c24a8868c1e769524b0229d75fbb10779325685ae13d99ab930cc2df3dd97296885d21e2b7e8d4b916c0a40a263345140bf19d7ce7b92a41bb716276add5c6d4b89634da3c9c15646e095b613e024cdd9b83d9173b419504c9e59b606b5caeb76631587197eeaa258f41fc4039ad0022e4623477b11daea70f13bcc1fe69a3e1f259a6c5cf63dd300a331972400bc29fff7e4765e0cead72c934db4dfc51329b8c3b83fbfd62f88807ae340ed41e5173f40a3abfdf359f570fff4a412154904a1f66857916b06f4c2a6714f5db3ec33e2f7d382c4a8751b54bdf67c952bac57c1228bf2de551d0f8fd4978de6019856fde6b30e9f2acd6d9f5bbf5b12161e1f3c6335f0ada710c850ef553a8aa78377e8f55b92a222ec2aebf59aa8fdc1376318070ae208d15eb01ddd5e84d98847cf82ede2f906f5e076b71d08471c8330e6fa85d6b68f1c347d5c01578b0294d6f9bea83904f00f2902ba708634e6db1c7016c40453cc357bc08ceed1fc6491db80fcf3030c273fb305430910b35f3dfb0000a6bf03f526d7fed690b7774b1a21093e83b7e5ed120d5dc2072ccfa57109482c16acbe8e8c2fa3e93adb649c55d14030f9a0c88ebe899c23ef0bc3c5193b800daa91107656b6cb3d399c4b26aff317e2be07ab5b8ca138cd47d2b1f128693384e46b1b7eeeabda81c51e5f6c90440d24702ae381f73d7d4ae187543898153577aa442dda5b703144aa77e720ccf157ef6ca62f14b48cf66adf91cf674cc8e52db3da479451b5746bfbc27e94e86ec58555cfcf44e121de3ad2a9899151afa20c21a147e6fce6764668ca379d614a0cf4ed823b6bd51fce23125e8b7ddc2090799df69fbca0b32e486d466270e7c27d1a5c14731eada44058f02e2af97066ec63c6a42454a091b083624f763e0110ac444b35f810351e3c959b904f42def014728c7902a9e93fa1360a1cf513c1deccbe5913811cf9104d0a97487fb2aa4a60b9d9978ab1b73e6f7754383fdc1b3632cdab385ed8f10f55ea0fa0384f5e4e4491799ebd399d3b1691b879fc115d134ddc4b6641d2fdb0df278513686391f18e368be875d3bfe0b85b312426127dcda4c330022eb7f3bae9030ec98cfc350442a080b5adef18fc61874bc4210b32ca4669bf5a14a64bb7361bb0981cc93b05a3e935db679de2324936484b832986ac014fca2d73d7ab0b5bcd299f9ae617dda7cd3217b7dc16d12e9984f9dab736d9efaf14316ff8b029b3a5537fffc9327dc30a5a09e18d28faef80df67d56b86e4a818c5d54b2afa322d399a6c44ddf8df327b19ed8a6088fd840aadeb75fa9d2354a10a8e6497e8500dbac1120f7ecda994af63da3040eca226f4efba531c674b8a4b96bfb486dcd442b686a2eae629bc424705e2e24b8490975865426a6e0a819abb8108eca2cad46650d6a330f74229aaf1695cdff375a723c86c6fb9b3fb10f81698f0371ff3e62ab8a32b0e36e056897435fc3e5cf7d313a66f71791458484b1db5ee0b48af2e87e5781572b8791a8e2541d4e0b4258291f09b3099587d59ab7af920d4d3652c971548ca25ca491ef073f764019382d026b1ec2d01ec0e06f0ec072188ac19928105f4a72e457c424a82397769ee3b2e9eeffd4d63150575e01c710efc970a5701d8e86388fe5b397b7a0639c1c4a30ec3a204578e5e995120ba467755ff0ca3d03e8dd3de649225ec8ce2a2dba9ca08fda8d876a50ae5ddf79bdd83a44e0e49041645dd13be93bdbbc590a5a9f022d47da530215f3ec1927b1251fee0ca1b00d57e39097746a8d1691f8d7d197949a6fd6be9107c0a7f5978f6df545043c850546d3e5444dac1b96bd5019245c23236c0640b5390fc7a5e3a9ce1b37b964dbce24b412097426d0c376063255597d9b23af36e4907c9e65356e73d12da137d8de31f726f2c5cb116db2dd67a8f11e2da327258ed1a1d8a1a804e20901caf87cfa9afa955efbe3e3cbf74e4320dd03ec6451929cc2610f77527d43dc4b6de0005083c3280ffdc5f6a3d8046ff712cd53ec583428706943241ed4ab337277458cc105efcac390128e7b6ca697cbf4a8df9d2f2247af9245beedc7d8e254e34b14d63e9d45ed34ff4117a082101ce92ff20ab731fa78019b9b14362c9c50ac69148c7d91f559121338fd47d869f7fcca76c39895cc1273517f55b06aede142bbf39628fbb82ca72cb660e335a756c352bb63938efca412488134796cfaae6488bc0484f56977d130907c5172f7a390519cd7084ca26d56232ce050622e400956e8e6c72df5041fe05224223994abb4baa590f0f93440a859bb0d0cac2caf7493810a0bd896bf604699aabc61816b56540d85fd53c7535ac1782a774c62c0b04c332a201e8058971db4630579846f8f1c1076d0314190e20820de76211c807e53bc0e4c53d14a617c6b41f673efd6ea0d20b37e1298c274c5acff1b8315ffdc063cbe6369a92955fd346d8031816d7d010b4797f0b3e2ef93cecf8f947c982c6be13364a86000d4a9a6b037d4f737b39b2148c6a0ff6cbbb10d941664fd2c4c595aedd9450d2b42a4b72e97bd176905b84ddc96aff99a95066e0cdaacf208c1f858011a0354e95f400a3d953306ea2d3c37b123653f35e6963132caa185ae3abce076f6680abced140fceeb5b01ff7ed39b18abf3af86e9ef28ff8d21147ac4616935ce36256f633587d462bc4c3068ac668611917d9b83e7cf728ff74525ad559ae819f73ab2a48fbb3401bed1d0ff51b9aa068f37e028a6a666bddfc60eed03e8a0f2ddc20ac80525333f08ec32472da0fd387ff12814ef22806ddc50217c1153b3b74da0f96300cf8007e5cdb4c2ccb46aeb1b118f99ebd9a36424f1c99fb71dad2a7c065343eedd8ea57a10842c97ab58af2d9647da1060758f9a3c8c9a35b2659d6e41d6c87e796f0f26cc32701c90890f60fc85d8eb734e60b552be4e85931c9fc2eafd162ead9a92a4fd50267f0eb6850e4617126beb9eb91bf01822b7687c896ad9c57e3044dcacf6bc27da3ec694c01296b8265a05addda121d36773fd3c26ef8cb5d392e1c0dacbad99f67c355efdc65a377a8c90c37dc3813886530d6ad3208d2a7a753ba45e3cfa50e7922232c131c755ae7590541382f1a8a2bf0f5a55da93fdf78b80e8b997f1db6648fe1e06104ee3bab3535a672011771df1dcf4f0dbccac97011c48ec192780bb06681ee7ceb805c46b336e6e63cb55331dd443863a6d833d4107e109d68a774df0543f1985973c3b449f2d4f52a7dedc3079d9f33751a99a939a8290f9b89c6c59b8bf4f321a9ed6890a15511635183907012f329c7b8b20f7348b2827774564c000fb05cca4c73a9a06177a6ab2d7ede3fc806b5e8b73a86cb3046b30fc6996061126a4fa044b7522da67c04e039ea25dfb13fc856811b3d6dcade088a3a3b8016818b7430ab25ad0bf478746a3448e2223595c51a5e90b2dbd6b2c547bc51d8b47cf57a82e6e7a3b4d9fe3fd16ae881699a8bcaba4b21e5bbc0fc267f9bada53a5c29d9531f8c8e38c757f11038c3630775d17ed6ca5adf9e8f3f6fdf32bb53484e8ad8e16fbed816a15fc688b5ce4b825568154f806349b0f9ee79691a7e339c41959b468411e4e8ecc6577092133815b3be633a48dbf358bb44b1707edb3609e3ed5597e8c0102bb1d0386e7990590181edda4be1a061c013dcddef367635cfa7cd3b5694dc81a77aa25de23c01132555e0ee02e607b3c129a27a6ba737879a171c2d80e5dfc1123d06acc091245bfc637e6160a625e4e3cab6c1e6a9d36df7281c90f3f69882a76ba8b9acb1c62ad7087871d2d40b9998527265c40912a9e4642bdb32509c3418752152acace78fc26c7186a1aeaa381eee5e791397d021496ff4d1a9819e0cd40c5817735ca402fb4a7e009617b141754a4129c7812d364dec8e493ffa25a6031aeced8494b2b6d478a26301403a77aa7f090d6285a12a7eec4590907808a96017405e37cf8db6bd2361163707c9131ba0e6193607864307f21f96d93d50ef460488bf81c60f0b43f4bb8782d9e6d2b6050d6aa782c8212bc00f20ca8226b814d07bd1a1fc5ae9c29a478f9beaa6a529ee4c749f1a82e94496de9e7c4d1688232ca9e43af132d377a429ead90165a0fb7a57d4014905d9741ba826d53542aea96e3957e202a2ba81fcf11babcc6b1b255c7fb5e98bb205c2d9c2942ca64a11da30d03615cb3c954a49b82cb1c93299c4c8d1174bc34462120fd4af318ac13126efa5abfa2ef7f08a9137a8732ba434882a6f36a8ba8d20083b5e8991dfbf72b27cfc84ae421ac3c57b8dc9ae58d0aed0fa17ae47c816dd098cd6224482a0495fe49dc026e13168f7ce6a0c35973361b66267dbd6ec892a45dff7974d58d261b6134ea15b09f4e85b059379365a56b47043d46b33f148359f4c8ddf7f65c2ef6b016472d3cd71831bc50d385d3a4ef6fc9f7e45fb68a1a598fe71232402ecdec673e8e53836ce4bf15ad0eb4de1e9285b9ac11b3871ae381be668e20cc96e125f6ec34694e62f249a911f4a821851e2d76f7ac90a58c1d9abe8c32162be12a5fe53994aa8f71882117001fd4000d18247c405c9efe5583f46ecf9d2628b32ba15b6cc6dcfaaec4fee68f8b9a338660e9c21ef0040f3597621984a8a8b326691008a597c56e05b88d6b71fe3c34a86adef2e903d875616f6e09f074898bf525d52a1816e52ea0d083b7915fc987023bf38099e62803a7ecfa0a5d7acbb2f9ae9b533cd50b1b521d4586ae9d05513374233cfae836ac0362d6064e60e5790181171e91ba8b440803bc006a0d58b0041895352d70888958c3f19c5c7ddef353be260158e869183851bee63e3d97044dd3034573c7dc199db73ba13c3a1c452eb8cc6c62d30d064abdafee0dc78934d184557d8c35590db5fe50b0c68f331abf42fbfffe2caf6117459b72a601882e611ae0f486f467758cc2680469dcadaeeec89ceda14a2dc6d8371b905a81974df1f998c02a4eb35e99234f5d489dc93ec5025fc90306feb8bf23cdc9c47cbbc7e6076923b41e6c184e252a007e2cdceab91fcb5048f03ed5af5de7abb6732110eb1559057dc159ccba614cbd81976bddac88f0473c402a8937f8b89b3b99b8e7abae9917d0c0211c34ab815b2d94e2903638515e4850294ecf895745d0fb5ef762ae14705815bb40f063d9816b34ed3ae48262e16a60d024343525443e580e072ff2b51c0235da226872944b5b41396fe01886c05cb45be8957042fdfab12e76196410d80d7bdab600ed247c4150d4b329ec22c50a0027e87b90973517d0d17c457ed687abc423b9cb0d00d65fec7ae039422b3fe16ef3e2382d2ffe811c5aa7dccca38c0ac94f8ad5efbc59bba94bccfc5e8d811f6f36177e8a1a7d200437bf8d1062342ab4e0b99b8ee98ced37c43e5ed57f10adabe0d11d6999b8fc694f5fde6ebaf295aed82eee618ca63c8d08104ca60937e52c316d3d4d64edb3f24b18edd464600182c8b4e3a69e95ed417318f2bdeeea185320ed8b94fb0b367bc1f73e5a6b4d45b5270701ae1f796b4b013d0437d826a8271f622978f7e3f27c8c5a70dbf3cdf86bc150e82afcd833e3d5d09714797e4949f6d1116295af7c28b43231fe87baa46ab506054f054604ebcd001dc04bcfac52c2e63426597fc6905c8a5a5c0fcad708436be7bd282268025e7629d9a4c01aec8eff1baea183a73f89c5befc39424903c5cac0e3fc1cc5d472d35e0c35fc28ecf90c1eedf552a6cbbad82250688bcbe2fafec354da55ca01072021b20a4f86755262a4ffbe17721abb55018242d3d2d73184d10ebb8b2618e6428a65a6629102933017c496615b77ada36bacdd6202cb175875d2c771304acca65cee694235954240a823b69a164bf1f1a05b57f2758b612669edf530a1520fe11022690a3c31f4984abffdc8a4adf320a57611fbe7314bc747f9a69fb637f1a36dc92d64eef83899cbe370060611471adda80124c40ceb35387939642dc9d8cd50b3e79e39b8544abd3f7b858cd4294228eedd2b84c42cc5d62109de47639aa31eeeb940306158aa6c2508fe48644cd33684482dc8d671b0a4a620e3a35dc536f2b7e7feab9bbcbf0c69b72477e73626bb831ede568363d602ed999a77bd9ff3c4a77c6da1cc3c05eec32b376ce16187ca13f5e21af7b1c2cb5a4b2296c06520e11ba1bd56e480b10d3cf65d19175631a52eca7c49b01cf4f0b63af003a9f7f534b38589832612015feb94ba101d85e244a13129d492bea2680252587da254114ed3adc26ca3d56180bfe47abccdcd85ca8c6d09a302951a1b477d7d97c0f35b22a248626af64730c4c1c233751ca37971dde55b7740b487a1f2299a6f086e4cb75cc0f50ed7a37fbbfe73cae9dda3ef1447d16ea041700a59dffd10180d8e65505f02e4224d4f36af3bb68c3e07fa03ddfb49d9e47116bb12661c790af4c75628388e3a70745f2c0f471eb56e813680c365dd3567cab05f6934915096ffe2814efc926e30848697d4e8dcc4256902d415b33506290d9c8022f3996509b2b32ac5461e910144d3b3ab29b39a5e2d63395ef00e87bd8f429abc57fe9d55e20ec00b689829eec36c000787f60faa4cc76644a587e4da14094d05c3d571e15b7914df111b65f5290c76041a84d186de0756c622b34348f6d49f953bfa49978af4803e0acaeae997157f4897ab4f4f367751fa6dbc84e3981bb64d797a16774e4e35a3a2b2643e447f8e575a652c905cf8e2c4101910d07a5d45f65431cacd9d479e3cd8e57b8c61cc550087bd945f16e087460d16dbef3d445cc5d16bd7932c3639f5fbf4d362735d3ccb7d3503b7aa4a6f843b320014130c05c8c898c912ff097b178400ecb53c562eb675bc440784670030723e8ae7143f99ca8c701df436aafa15aa6023241ee24e6e7e4a09f3a4506326c605a78900f03980500db2a80ccd0d1d98111d98d2d181d5211d58f7d28175990e6c3c1d187b1342d23729a9f535903f5e907de506c16d3423c7c8186d0ed2e6bd1e502879a287d6914ed6dd011646ed9635612df6c083ee74b18fea51111cad4ba68621bd4479f87e3d67dc91269daab599314c0f03d999c43cfb8d3404c20ab7dd1fa06d49cafd0b08969a0e03f55073d924e6894d9dde17bbb2181028cf889fed901d8da7e4c53c2e40aca64087ca9aaa35e25317e232eab465f0f31821b6b4f6534d80407e179f247a4c261f0aeed066957395686b155664d1decaad566e7f2a13b4e935c93fffe245ed99aaeee693b22387f221023bd3ce333be713e7a74fdb327a371e5c1a91a49786061c8a1ba9ad00e2d339bac0b52d5332e146fb538b381309c04c5841d818a59e3c60c53f05aed2174840a549583c55979348064e421b7d129e42f5c51e1981787c5b0134b1faaa2af53dcac94f1e0084e7ea428be456327a5fdadeb7553feff89fcaded8c17acf398816f7f8c8b9b9c259463f8937d6fa2903edcf5c77db91d20f4298c2fe1b344bee6615a843c2a29e852615490e2679aaed336041a4ac481e09536087b0ed2fac283ff17672b250e3f4b786527f1b90e234350b93f9be01f8c60a37656e39cbc568f6eb53d7f1ae37163060d49e597aa2e5fe0454dbe946fb56d1d25ba878fd9db0e2045d08e3c753204671e2fa974a992fd07e2a813cdfdd03d124a588acbfcbf28c7f6ffdc3b8f73d19b33a42985a48fbc7812074aba2c8bd7635119d5b5bf42fe7395cebd6e71dc2898dd432dc172df94476351b7d7d388e8319184937154ea4ca9446ba4bf09f11c31784739b32701413d1ca967d921e8a10c4bcbbd2d162e2fdc0ec34a70ba166b9ea673d0d93a0682ae674b79cbd31622b9981fc573153398b1d7e5dc7903e4ac8c1e686486e54f0cd80c409a9eec5546f5a4e7946f0d00f21b50a82f8607c2d3011e8952e8921c292404caf2a9ea8f7256742d1fc3ed70a9e9fc71cc4655af18ba4ce416a673e316bb495a559199d20171ef5e6b26c48ec49949822f9c2759a3900f4eeaac0c697cae0255f2b437328af74926f8e5a3d769fd1f080681d2233353ade976c74d14724a175eed9b1afeb27fbf622c918c77d7a34c33204408997175c45ee490e476b67ed89ea4965b951cc62f6f92bc4c6c7b9ca40c6a39f8154ee2faee8d20c5238ee821dbc5d11547fa6831c1e22b0294cd94b7b1d47fde60229cce4b39147ac0b04364205bfb87a75b33d7edeaf578db825470c6a838cb8c5cb909bc2c3b60ea6daa23c0d55cd9da4001ebada81bd16eda78859bded971d0a3958c17287a8ba9c59010baff815228ab9e369ede27b3a198648dd5f4a91df4d792bd94a12854c1a0e3bfced242dfbc86449bbf05192e4ae9ddd65e465cddc148fd2023945da87aab0f415be336c7578cf1acfdfb48cb7f7f13b98f45050d9391fceec299acd417f4bcca242406c160d2a042abf127239617e9595319c07b207be5cfbb02ab39574f74a71192a112ae696defebfdcad5970c2801b2668e1e6031208481560f4292ce2ec28375df457e828f5da93c773ad06ff5fcd08ede2b319502164fd3bcfb0852b118ed0cf22f7a5fc4373e23048206b4ae84b1fa6ae6e1256fca587c7521bbbb3d42d4189df6e1b885333fc3d95bf7a1aa77283329191e89504aad678811547f456e82fa13b23f271a2d71f1f65094b98b6dc39cc5efda71018b2ed888732d213eff8ac7b958196fdd4efc5c197328c2c86f31490a6bd0b47b79842f6bab580415267004108a929c0f52e2b15923b48f7406a61ab4508a15f98c19d5d8355e9073e257d9e76b4dc6741e1f8b8b7af99ab88321e26db544ffcd26d7a90d0a4062018aeb0646b53967ba2c5e6d09c0230b625abd55ae045f0e12b9d15401d93e1c5ff64b563f8396e93d3f2593ac1d763cded13d74ca29bb131013fc4b511d610ea6eed9812870c3c8526bbd61de45527c195117b8ecf659745cff19b1cd1792deaec04979815cc29c226aa3f0bcc62716d050a254bf1035fc95b92c5c3089b65fe6cc7b0655608f5c392c9fc789f9772d2bf44ed4046bc6b61a85940327e05ea5f314db59f4ecdb077165849d355fa325d4c8ea6d7025957a25dbbf2baa171dda648e23343863f5596d2a0a0a161454d5b9cf41617dd0b56422d1858cdb3529e7b1bdb5aac0057d21e81e1749009dc9cbdc13969a109b8c9f624adf194efb0cf3b613492190ec98890ea0acf49dfb279ff06f4594988fd2d381086bfcbffd777cc2d0a3389ad64024a00f1e1549f4d8e477bfde2e64a689ba2365863b780becf004868022b7800d00b868b9abd599ae00b07dc44bc902054125b40b504bba011cd11998915e1b78cd9f54d3b66cb1b608b58797eb7bd8ae97cc76f564ac7dba75c66fd14b35db1f2200a523c6d6e27f2bc884e1d23751af9dc0226924a08dfb0b1a62bbef78b8ec337fccc0a97dd3f5a4217b326720a468485e00603c81717eea82fdc6dc2c3fbdd7ddd403a8cef85d0c652ff13ec07b8fc5c6775bd62be0c23d970fb20855847534a8aede825e2c875fc91e7cf9e1739a96316529fbaa9490fb5c79847c8a56ee70a849ea22e2e58d50d8fc48ca4f878ee834b5bbb1416328ba439dc36bd0a9e402da22abda2cace46332b735088c58bcb084adc4b8ffc71f5ee942ac0ebb9537a6636be2abf9b2fc5cda45d7773bdf91b85fccaf1e48abd9b6d16f6e903718b5a77e02af0b9ef72afc124c34776678b55dc8ee2980d9be70194acad72083544930d16b4a3de39b35b61c8d98490f9320d2e0f395051b814278c275cf0cc9537db83cc9de36c70e52569c45a79f18ad635d36615fd59f20c638e2baa9f57b7bbbd3bf99cbe37bdc9933f3ab3f2cd1c5912c96511aca1025ca54f698bfb5b454b3bfada11db2cc4df6e4edcc86d92e1e35cb29934fc157f6dc809a987ca85c7aeb3335e7cd5ff7fb8d5b44d7c4d8cd3b557e85c791d9ac5576ccbc34ccb12c5996cb35e93fa65e3999b280cde07a3ff2a4b698263e04bb203c2bfbd658fe2f006638ff44dad92fc7465646ca69471d8737105561574b30441b132d0c301a842390da0defe35ca7fcbac9da68ab71ccdeb7b34bc978a5dd39be808a1f68645c8edfd95d0ac463bd42107032bf2042c8f10a007d200486ee1350b31a181a498c1126f91bcfd1cb5d2c646d43552760f00d797f7dd799fdfafdcbfb4f3bc32eaa1d346abf49f9ad70bb92065fa815d5922778932df0b7bd4a82fd0ec7fcf316fe6be4ba790cd57f825e7f4da7b766843396f0909f45d18a37ff7e5ce0ba6f1e980484b04ccf7896d9f0414ce8b6e0ec2cdf9d7a39b5f2522e148c2bd6be5646adb951369aa4cc5334483fa1137bf0669a497001891e4e7398da26214669c97e29dd9f370e7187510f662ec9c44ad4293a143ec959574156c2a4dad8a3494da50b9ee89e4f6467c4eecd6afc23ac53f1ef50701d2c804b98450cca4038d292473e91c24f0462ba1dfa29aba107124c96ee3b42cdba698a2c1211deb36adfd28539541d225d0a98cde0124edd9a18810d15e04ba18b030c85f61c63d5dd5b33c79048d0ec1fc73061e13a9c34709f38c525aca8292a97491f389d5a439f2f60e40985d0be492fbe17dab405a8499382302fcdd1a53c610701184f68380d0d516d0e6da279893aa43d5cfbfe408ca3abee26d9fb5f61d14d2dbfe5a52c9f5b1873613e5237283783333cb2f7228de4f4d8ff1989747b141a2240c07117f59050bfc2f30f6f1d288070748bc7e42fa09b71baf85440647466580e9f8386984f860919efc2458c2bc6a7ffcefc2c1d55484cc7d5be14c1d3f31a9fa7ff9bc66b2951089501c8e495726e22fc6c38661ff05b4e911e755d69049b3668927be651254dd9e763192a41ba1304ccc7a89143b1a1219a33b1496aac43666c5afce6379166e2bf7c3e105dc320a6a55689a8fb4a1f812c171e98996e44317ff9230420d4f15d72ef8e4366fd695ed45c885eba3b2dcf9953d163cfac27e4bef13155b15de310a77c05527f1bca244fcbc67e6bca0a764ddf41c79a75a55b143ef0766956a7449a6bd3fcfcebc075a7e51c0f5d76e35c8e71f8f90aef4c6e55b61331be6ff748700dcc2ffc380635456c557d354bc5aac5e0fc2634b1e7472062bbb2664b465660f9362cb7108e21aa727a4d5d9ccadc6a71aed759a8ac53ae34051727b40a169b110161ff228eb2884e8da5b6fc2015c21acbf8f810cde8c06fdf71037c33a92865b1bd8a77e9885b08540422290ede67e6fc62805e8c3ff1b2a41f8abdffedd431d5eaf0265622612ca60de91198ebe739cbc4ea5de15247525976b3259c7cfeba1ddde7a7335d48179526c25ba41d86949cd70365329955124bae96ad5a8fe198deefb83b9fad533f52f620a6301ae78946d2cc9780cabb9fd25a32813edb1c406dfa2dd811af970f6a43413c1b8ca85152c436c8b663df97b041fc000e164183276ccc9b0f59670885276cfe7f6d3b1270fdde13cbbe2a0f5b28a3ef9fe81afea499ea730436e7a2e3082eedf596460c96adf27a822b9203b03fbaa8c6b5e2829e576c5152a479272e64205413dbd2025faeda7d09daa282f4902ad86c6f5efc1a5053e142e1872d198fb0a9a342262cb024ddb3047027ae4abddf351bfbcec12357ab74a1fd7044b4b2ee645627c5f3b6b35888a9d3abac126ccb8967cc8c1c1db510d7333ef6bcf40b86646294b8bb1450f14712c06bfc46d486b9fea627696c6de7983ea9282b68f83d0d9fcf82f8cd7324d4eb86560f3aed862f72e0905253bea451896f31d58c80ec188ac9d2568c76faf8aa3cf3785bb7113141a69d6f936890169464b8ea42cff007f61286a56dd734009e7d26f9fb46319a189304c9962225c8f68cb228b1e0b27648930370d5cf819aacbae24c7d61b3372598a9c953ac2f9174acfddf39dda9ce6e72ad082c6eaf9133953b681efa33956c92fdcf18874cd5cbb8b8052053b79ef48bba17d0727f7256cd2ce078ae0766d4ff105326fd3a489be4144d4f5ef74452cceac361c86b2a019f0af884dc6fa1705b56b58b0307b871bab8c7c628f1fe94e5e1168ca5d3a7392b30a0b163256c9f3a22eef0f1646c0e6820c2f1e3b811c3143cb2630693afe96bdd813217860d4c964d91d98b125f03d884651962f538faf9e568ffd8a4dd007dbb9ab929b06db964acf623a92dc22d1ec482b3d1100eaf124bf43c410be0ae78793097c50deb2b14f8b7e91a4230c149f184ea9e8396aa67cb3acac0617dcd23f68c2246270514997e8b98ffe89748732e4cd01f12345fff018fc97dbca47897229d95fff5230df3ad9f46317a936b496563dd12899bc13b972b2944eeb2802de8944645869fa95432b45dc89ac4e8eea985b9ecb62cfb9028e72bcae459a825d5e77b70215bbaa77b00baeb83126edb01d38563b1bec7078dce28a02a6b2019d26146401757e60772e44154a65eec9f2a70660e95d828b6062793f19398d22d67efb27437b66e76c21b7d1766c32525ffee4974085a52bea6194cd7527bf307a609980dd5489bb7de804af346caa717d4b1b2f732ccd27b5bce401f238484d88e059196b6da610f0ecec6fccbf4c5ea5a456043ab4afc2541058a98a3af02779dcb0cf3c67e45740a76bf892b428b2277cd0e981514f9cd210f05e748895b1dff6e22bea531efa33e8276efde127ef2355bf3f9e519c772a62d45b919dc7ed3a1f51554bf6de7b6f29659232e90b470c1e0cde75fc6a96cf2f50b326e91339cf513426281b0a4aedbd175a94f750b5f790187d59f3a8db7ba8a2f7ae4f89c2bde71f7595df7bb576ddbc97264fde2be3cb9a4b851903ecf321008c05040c301e1fd14b1cc47b6eaa3261b879fe8b50b7bc17da0bad592f42a623d450bb4ad3114ae82ae918c4198ad6aea3d933a71806add84c484c9749660a6ac27464c589a909d44c866a9934662fb4175a95c151d40cbca6193545613a7aa1bdcca68de7a62894bce7de0b14143543cda6cdd17b61afd8a68d370bd231bb43d42bbf54d1b4f17cb5b244eedbeb7befad96ba8fbe174ab3fa1635ebf604dcf9ed06e516854761954605cd1e017c7beede28f7766f97da7a9bd8e8ad3f1a60546e88386bca99d7b7d7a64daf7c575badb7629d34047d817e7bbb756bc2d16c324289815d5c809afcbc7d359b3d2ebc2e936eb98cda45a5c98b047555433728df235786c3269c94b6d63f6c3d26c8e7dff803f5f1ac67c29972957c59f28425d688c2640917f8b49b8e2a29c409346e67dc88744185277cda4db8769351fb2c59ef4d52acc96834e18070894b13ee7be6d5810184d8832e4e9729b8f33cf7d1dd9e0cf47b566ae9470f3fec4872b147a887d6332476ab6c18765dd83df678d2c38febd65d642e489a54cd3c18f42018b405fa1861147a9c01c4833dd278d0bb1eb6520f70c9fa5eac243b05db15972938c63afd1819bab7630fdbb39c9a803e5f5cc24fa227983cfdf2167d9476512a102539f234ac5293eb6a72272c70e8e2a08b5de944c3d46492cd9e1c0f3a6bf69c1c741e96ece3661f2ed9070c4df688d2ad49f670325ba08330e8e8b4d0424d8d8a75ea51c402decb82f3836564350b74d683ac1670c2dc5f67b11efaa9f31dc25ae9078bb593257f3f4bdd18ba4cc12f3fbdb35dd74c62f4893774baee6103adb5b6874da692333e239367dce62432dec9d4bad2394a0c5c86b9f08d76b1b88c8333be72d0c55825dd417f199a3dab1daba10757f966a8b64067c9373734bfa9c9e49b596d817e33eb675ca660db8d76c44160199f71199ff1f24656c91e5ab74007bf9525e066cde41eb7da025d660cd2c3565ba07742e0764d2937d7dedb8139169207c32a0f8a46444a6fe72a6f642d8037b276953db4ae87d623347b7a86a6e8650f0f1ef49e2ae60baafc03d42dd0c3fc036b56d79576209936a08bdeef7062dedc58e896547a20f3b1c7a04828efbbbb9de3efc2aeab81e3c19a1a274cf20756d3437b528509fa0ee6c8772eb1ef3cacd1173a8aefdce5357b4edfb90cf9ce05f61d9d64989b2dd0bbce9d30c91bd9149ec50269a90b6bb367c575f2326c5286b60fc35b8f0e2f4daf0fbde8c3281f866118b27818fa0e1426203e74bd82f0e187e18974aac99d4efecd1e173f39387b72f849c64f337e52f9e95403c79f7c26cb64553eed40b143a6a305c583ae63f6205873346d82d4e46a0bf41c85eb650fad4609307463da80ee3286b969f32d590f4d0caa890157635b3526db83336e887185d7700ffa8f19f3851a25e64d94fe295a028d076b9800a388d9736ba8fc0c315d356c4c165873232bc9e03d8bf7b04d9b7c8463c0f5c8256068f6883db40906ccc680bb5eeee8a17d0f27d306480ffd3b76ecd8f146bbc231a6f329e543079d478ce8333e7bd8664fd7fdac648c38c62c40e52b7f808ccf8c2c9871195f8d2cd0810d332ee32c5895f8cb3057c99971c80b7af8a81c467d6456238cfaa87ad87a683d6c5e625c93abf1524c1095cfb7a17d643ef42eb3fc4d827d85156a6a48a9efbcbc45325925aa482e53b0f7d35b4a28540b0a060646bcb71343510c493a50c4d08aa168ad15dd47f7b0852717d19ebac0a19fbac03b662619e090c524831db32eef905d2f77c8aeb3b88f0e6f64aaf9e0587aa0cfd265c9837e12ffa6894986b97a1acb4f64b91d8c7719bbcd281773c94db9c5597212953fcbf756cca14387c87222b9b89c5872acac8830a41c9352a55a4aa898f15744d19444e53e9a8505d79a057a13d79066813b90340b743276c876cc7e80fa27d6ae9f98b5568af0adf50f2c77f8116dfe8959203f40e34f4c8aefa173ad690376236bda80a0b5654e101ebc7103bc71c283374876943ce84bd81317d8fa890bfc13131d0c6ba618b65ef6b0896e72530cffc44cf9076604ee175d0cdd70a1cd9e70f650d7cbf5fa016ad78a83fe03fa0fac5da61d33981e4078d0e9247bd8660b1c59dcbac89277cc40f75c8059c0ce59dc66ec6edb81a45ddd9844e5208b83be43d62eeca08b94b4f23d7e3049af750b74b007190fba297fbf43d6e4e703fa8e194b4682cb0906ec4111157aed617b56018e660f8c832f9eaa30e158da1eda83ee52f4654dee41cf71729d311ed41963de80de7d01ba8e1d2876a0982cd0ef4b4ee5d22ed191cb1b281ef42e97376e3ce839727973f4a0bba05a7c967eb48c2e58b34077bd9a057acb112e5daf079de5946330aa5938ccd51ef430671dfc709ecdf25c956db73c37ad648cb2a28ad465ef676affbd2d7533b5d274fbeba5098a0cca708bbfa5bf7e87eafd78709de5fdd7c181bbb1ec9103590f9a64d306bc913de8e0cd1ba0dfc8668fcb837e339b3df741bfc9cd1ed2839e739b3da907c517e8220cf43007769e81d0450f734dd22a6eafd70b081fd0c3a32162ac5df7c149e484add4a13224427c495ae2c89722ecc127605fd67c19e674be14831e2c45d9839f4f29ce1e749218f6b0b58b3ae83d9e80de03f41ea0f7c0b5cb3ae83d8c7ae4dad539e83d40f741ea1105ca973da490f165cd185ff67823085fea7cd9c3f6e0edcb591bf2e0ac01471d2610622dcd8034e61427aba95f20a6eb6b163d8d39deda50d6ac3ed170f97d6d4b55ec6ed7dd1bf35b0212d26a4906064c1fcfbb129024a027f15cbca4af54adb5d6340482144848bb40c0319c8d3136549fcfe927b92c67e059cc9a68424bbebdd3f8f6f284fba6cd58863033853671d694acdc7bee3205c7d0b87c8e176368a8ff79cdc07fa5fc1f3e022e6fcc412f698c4e3ec09d9721ed3d37c9a6873956502843d22e927b1eceda25ba177bb15592c6a8b684a66ba5c664bd2c99ae15ae5f3c7f19aae48a7b34b9f7bc7cb9bdf7527befab2deaa229afd4a864ca57b8f66872a6ee1bcb1d2e4df452ee3ecc3b5cda8b4ecaa9a2d9f3b967c67bb8192dfde86104348e4fb2e23e7c9fc4e42e533002fac5d1479b32ecf3595982db5bac6eaf3827088220d875d6650a0efbba4cc1610974d123ade495946e792b5cb356b866ada484b97c84e6a85d6598a37963c5412a1dc38a118de7616e82b665dd246bb9a19640c950485a826092dd215fd218d91b9b3da17b0e7a1e16315d6150b36273bac22426cbf3f20e09654b6eec3d17c1cc0a936051f9a076b1d8982ccf3d90c688c668da789eb70a73ef799857b869e3d19126c7b0e7600680d1b4f12838962c24de337acf5941d3e6c4c488955b9122ce9a5226f7d55950626099a0d993f375aedc3015d55b8e6472b40a53e779dee73edaf4ac8e0818a792d53be799a15d956ceffc267ae7a6a0d983f35d6675eb7385def90d146812a350a56aac09339849cdea7c0587cb790bd22ecf3bb7c1f3af92edd53d4f55f2367b562dbcf7b9f75ee73efabb610cd2acce947382c630f5fa36882b540aa59219cd1e1d3b83185512077fb97b64e90d740c428fbcf523416e6816fd7bc328b6817166cbfaf7618c636df7bdf79a66cdb226da5b1392661d814b93cc84647a13416acbe6257012cf7125bd314890fcc2a549669275a34906e4f473da94a6d95bd47da19af4daf296232cfe4064ddbeca506bad5ef5eb3eda24fb96dbb4a99ea7e79964a626ec6ac8d4c48ac9ea0a19363c2f5735168e5e86bcac1ab2a38cd1b4a9ee8de537f4d581b06cd3c666551b73d3a6662ae01245eb920c339fc24d9b2a63d9584ea60b3573a1a298acea25ebc95747d1be3a0b47b3c7f35a33a14c47be7a75d4ac5d2624e68a93558d8528d068562cc4b0cda5a06953bd71c556c3203a7be5ded1d23c6956a5b9d1d89a55bdba486363dda2209ac4693a2dc174ce5a6bb5aa66d5344bd5ace935cd9a735a21288f1238a542fdacd652162570ad2c4ae0927427ae0c128b12b5d68aed9cee91d13206ee7afc4052ad354aadd5ebed3acff3beef0341d614c33014c5129016a747b23e58c7a8eaa456fae453fd63da4c0f9522e1b6ded53a96a4301449a58a82541cb6a6f0e779246ca75f4babcd94de9629e092f4b43fd27fb6f6a5b3ab433e02ed303dd03afbbe18c5a12fb4917671259bfa13698c44636d1ba22f74137ad39f1bf97a2509f6597a00f5c1e30f2df0318d36563ba892434efbd4ecb19595df0bd92a0dcc55499d35a12f5428a268f2ed2b46987a5967d456aae1fa4a6e9f39e3f87beb65c2d648fd251167bb28b53ecc40ff82dd8334a873210f660a7a7b3e4b54c8d3ecc37d6fb447d8915475405fd6d633bee401ab195fcea2ef2efa0e18b1ede026441150a0e123e4082586901d4142c4c9129f00102de186125c8c6114039f72de6469fce0073058430a6a64e1f379e14416506880c512317cca99cb020863b4fb10025116468821c3890f9ad0420b1c18f974bf48281211ccfa499445922c685013f12467cd0c3680a6908610675001012344f941195d1821074d4c9f3e443c491d881023092714a14a142d7ca6a726498136a6ccd67042891a6af84c9f73fa37a7cf185884587859d9154fc0d7154c10628199d286114a08e2c84c0b1f3a64088c22d8122868644105922e98c8d14fec8d0b26acd0ba50e34b9d2ea2bcd7b69628a0eedb310db91bbd5545aa598b88b3c60876e66ae9471d7928291428af6e16ad42aae0ed3c1bc59b4694a807503ee627510fdcf8d24fa21e48a9a9119b4f6aa02fb4536755b286f9e409ab8e4fcaf9e457f486fa7c524393f666030e3ba0a0074a9e16cd274cb8f1e594927ba30a1df2d46ded95e7e0c3a75eb0563604a9a1005b2899f28427ae80a30c1f5a842f9ec04185386880238a69d1759db5d6763d905e5f69fd6aed7058f5d47598bcd1c2531c9ed96d6b57d94de850d7babb2b799dbaf5aff4808b6bab879e523c6de6d7b72ec459d34d7afd7431865291c7005f9d024c84beaa70be5653add4b66a085f92ac2d1d60364bec7ce988eb18438315f238d567a88ec3d324ebf57a01917bbd7cbaf67abd45439c35ac6963c179639d25049fd4c0d3c656a75388fda3ec8a269e4ab52b66beadb9385ccfe17a901bc83c9f871f90fcf579ef8cf2f7bebaa657087f5df44ade90c29e7afd7512ebefbd38d779aefb75d625798169e8a07bce82d041167c1e7eb5e5f9e79e7f191cb337529947a58fc8826a6d1a05d1a076557f4972c60b7210060dd098f9b4d1a40924aca802e4041af8b4d75ab5cd399ed4c0d37d740e957af961d697d388bc396f2c5be81a15b66389face91c65ccd973a6d755c64b3d6712bdd304b0f98b5f52d60fa884e4b23b801f7ed4737dc2e1c6faeb64a0f009d961e10249cb5555b9f831f8924c4e7faf4b293dd4ed6644bedf57a0121d4aee983238b2b3b25df606e288d2fbba12125ed6567eb6e6507e5d259e79c0ec4fefcc61f3e2781e30fa097ddebdbfacd0d11479c31555b3437746ba5cd313680b837b2b0da6a1a24de5c256bed2885bde635778f5eb02ea8d6ca4ef6ddd1baa14ed6cd68d03769566f912b17f4a66ba72394b596eb9a850c8781be409fb6c3d0303489923d25e24115da25694291bdf1e5c4b9723c95a76f3c755b5dd4512a3a0494f24164467d52ffa8134d22a15400f84934d4032bd898370ff04c97eb9b3e3b40e19854e6174fec608d2a96e0c4491b4d04fa8226b40e6818af386c0086115c14604da031a12cc1f527911549d06182c80a29a9a9a24c7cc953b2842cf98114bc58e30a268ca6e053e2502bd420b282085fb26e6e88623cf549fdbbf7899a154356d4645240e0181afe7ae94fbf36ab3a4e759eea5e9d559d9485e7ea4df610391d1f35546fe12b4f13b876adf097de59bb4a15cea82730cbb111de1d2156addfce9b93e60c054fa7638ae6f03e1d4512cd9844a2f97bb1043e1d33119854b637d8d9e2dabaf7de96159a49e28b988229fa2cfb6225d1f2a3639fc09f230b8966ff39d2d17fb69068ce65e0e9e244a12caa0554886d9210a62670cd51eb75a928db72693267e94c61d09f3c3ce79cd3e4c4e75d597861d3da927895346bba6cadddf5ee77ef68ad6cd6dda0d99a5ec519ae80a6cf8bc5fec3dff44e5dad29252dd605a7cd376dad2b6160eaa0d756ad75ce39bdd761c2beaed53e096b21ad59e16cf674ea58d1f1a7af639981e93ccea8edd4cbf6ea35372bccb70649d596adb576fd4c049e9eb3b659f7e79889c0dff7709f3aa5a39d3e62da5fdad3318606eaed2575212fe485bcd8dd5dd28fa1614e3a524a9f3443faad1001d35a6badf6fbaa57abc909dcd50a02816b77dd8eb456ef332581a9dbfa35689bc0d431e933dd0053ff9cc0d46729e4c524acb5d65a6bedbdf75e6bedbdf75e0f64119fce9e31cce10293637489a1b1374ae7799d779db79468b0cfb26aa161a1f95600c0acb576ddbdf6be05000b96762c90ba0464f5dd785fb75ae90f6ba7add5566ba79d96659f603569a969d51300585a2716eebdf7eeb0979a4a3fee181e8185b4acb57687a9ae947e60310ee0a4240660ca14dd5badb5d6ea916aad62db1228965a605230ab994c0380dada21e616429f59a9647ed4156c8c6eb72036f0b89428b8e4f13330f5d259f60798171d299b8f478f7753fa516f6cbb7ab26ef7d71b715ca8f55ada7ddd6e3aee8bd65a6bad55001674e2cb51c244f847e591535d50256c636939957e5417acb5b6764ef129094c1d97b00d5fbf269d5aeb4ef58254fa714b256cc3a51f7547f47b7b81415b4f146bdbce24964c2e312f31335ec302e9c2fe6b41a4196b6ec21a7269069f9159a958241c128642dad0377c230f5e4e2390871534ba6c001f53c014e6be94f017389f0b021040f730f07c6f60ea393aa47adfeec4940eb082320cc2548764ed9c765a6bed8efd92a44af8898ed20feb82aba2b08e1c2897161d9258eb2c9124dbae277d3fea182281a9b3947edc938924599f93270c7cbdf4e39a4af80b6c9d8a3c2471a594b2c19c95527bfb26ce9af2bebc4cbb6b65f0ecd0eca19ead5e6e9ffbba821ee152514d10f077eb25e0d44fa22a862812708e9f445530d170544104115ef94954c56b095394c02f638081513f8984b2788150926a0676f949246444154242d43870e94809ac238d9601c641a03dc02c5ab4116ef949b403254fd8c111ea06fe7e12edc0c80c7600832150f10422a870a3b681c19f44541851811bea9ef0618c63a6c0222885841acc1451c84047128c5ea688010e722ce19672820d5c9200d311a50628358e720c418896345e2e52fc00884509462829b620725282ace5c391428a19e00f7f243cc588450a26804c4527298288ac50c961295c7044c9286772a308521bb315358810d5b8953e1c1d14851ffe48180931240491b01844401f4c90895b7c3ea6c442a118783ed698814f10d1f960e35b4288eb438accfb7074304490fdf047c269d83a1c9c0f0e23aa8f23bc6e1bb0f64125c84a2942d50052c308566246cc875150b7e6971f7efc830ada8753f727111530f858c0a2fa60091c6a601db82cf0cc16750aec3f89962c3104af7e122d098209f8450949f0e92711cd0c27b0f793883646d700ebf84944eb0136fd24a229a14cb0fd49449bfda0114d2104a21b183dcb4fa22588bcfd4934c5185fa62e14b2efeb62d75aab4729a59f0cc98f0e431ad6cf3a2b352facd2407dc6d4cd87b2f01eb94780a868490161506dddd97728c35f9261e643d947279d36b71d245d2288f8aed51474dde40612df4ea2d2e44956834846edb2279b911ad0506908adcaf769467ae3740b6515886963a33234bb96b6ea28b313ed3474aa7d5739c9e0f276ec1b92da79d4fb48a725f8b34d9b5bc3d9f405f0d25a3da73df8f07d4f9bcec18e056f9d7a9d676d900cfee0d0b4b9feb581a997f7e5c6df7bba01f1d724abadebf766b29964a62113edef35cdfede11bcc28dff86b87db0ecd9de189a5970c8b32659253d29332ab437aa7cfb109b5704eb69732b0b6e473b5a6dad2819cad6a2b20ee7ec79c1f5244b6212932c8d2f4d44f92ad8d15957bcd9338dc0a3ef8bab2fb869d38ed3c065abd5823559f2f656ac65a415d43ab2f2add7b4e9b2c59ab518d4bdb0ac9222908867df3831480412db48bb8098ae4b64b25e3706df5e8a43be8b58f2ed6127e29ab5ca629466b587592cc255521cea568b414636f1f65dcaa2ac5bed601695883451a8592dce44b135a4596d6d0bd6ac6ebd9ad5ad57ebd5de0bae495a85d88bd1cb1b30af76d96f870152c2e45b8431f2fd82fb7e3952f2e44b9821a52f6160303198a06ff73a1bd4aef2e25aafd6ebe2c4232dc497a4b66f1d887d0b845bc4f762c39a8b9e112f6b9c68781225993d5d7de796ac0d314a29d5d1ce98d30b7146a16d6fe7913127088662adb3ce394925d3caca490853371d4d5c4f2db5bba551281717ead28232b9e470c9912307aa8525478e13ce91238729c74a29478e1c2424a018de7befbdf78634eca31fa51fd75da6e06a3a6a96e7379baa342bd53ff73ae3b5562033ff1253721917e2a323c7543f2d49b9ccf8c3ec428827643e29afd9061dae1a7f986c28e1a3a3e4b32443e521e7dc728a7270394639b99c239d970e4c27a613a423d399e9d07486746a3a369d9b4e910e4ec74827a773b4f3da81edc4768276643bb31ddaced04e6dc7b673db29dac1ed18ede4768e5c2f17cc157305b964ae998be61a72d55c36d7cd55e4c2b98c5c39d711f92261648c0c2265e48ca49143648db49137b288c49146648e3ce281f1c4788278643c331e1acf104f8dc7c653827d3eaa91e7555bbd7ab1493c64189a0832cc5008324c0d0419c6b64386b9e990618aca0c83fb408631ca21c3e43c90618e3a90635e1cc831b00de4989806724c5006728c0c03396686438ea15d20c70c5920c7d42a90636c14c831b709e4982209e4185c04728cd10d392607811c73f480ac7a3920ab60366455ac015915c480ac922d20ab6641b28aa680ac1a4a4056d5109055b61ab2ea7680ac2afac92a1c0d5965344356e58064d5910c59e6f523cbc00c90656205c832413e5946f65966e623cbd07a6499a118b24c8d0059c6064396b9bd90658a7ab20c6e00598627cb9059c695573b79a5935739792580bc7221af70f28a7693573cf2aa565bed3679d5425edd6aab3d0079b523af8c5a79955b1dd5563b0b796606565bb1a031cfacf2109507d18297cfcab348f2551a73a757b89c9beb365d58b96e3cafd9b3fa763fc2656bd6c26cdab48d4c8689c1cc6418586d35ab5bb36f5fad51ae90f0faf632e7c653e5dbbd5c0e00f6cd05127f23fbf697990d70c98376c483d6a5bc53b92a95636c48b9ca5529952a95552a9f25204c3071ef1296287274044e7969ca9972a1114f516d8546332b9954680b6d32a12db43181270f5a2553a92f274abbacbff0a0e5446956cb70fd3c7d7458da2eb066cdac64bca666563229fa2e438eaa4820c6550e962400e33ac6181b74cc32d8f0d1e1427c5439c60695a73c35fe408f5062c4cb47e5427c448c0486a1ad705e055cbfe4a1f114358b4707cfeb22814b548ecacb2fe5475ea6be441dbdcc9873eb56ce2d9573d331ce6e95a9cfa1827180e7973937daaa98fc0a7d768c5ee14eee3be7f6b85b5dc71c79fa5c2060ff32e796836bcf316acfb9e5147191cb8110543b20867126aefe4db2c326afcbf34edbbdc619633031fe24bae2c9ecaded493406914fc1f07d9b6148818322b828a38821a0e14345d557027c59a363a2f972d62fa714177e56a143be52a0217c498dd023bff22545f203233f50c257c7a91f3ce1abfb13275f9d15c60bbe3a4e18667c751e1f507cf519c418faea416c5ffd061cc498f2d573787d751e9a7c751400e109af1b18c1801085d82d8c20244441a8f295de2684585c604338921285299a204114d282c8122e8c28a2895a841bd14aadb5f6fc6230860b66a86e4393d667f6509247044f72fae021889f0dabe3923ba97e955669b50e85be328635cf505bddadeca1ffbca4b8ff3286d55b6d7d5588cfac2dea3144416aebf3eaa41aba8f1e7fc0a9adaf86e30f5e5b9f8b3835f7e9d34e93854f8f31dd8843b33ecfa1b63ebf53f0ad16d5cf6bad7e5e6df5f39a51505b9f87f9a3b0ff9cc28a6a2bc686d0ab8717f7b5d4f9cc9a6fd4e1e6ba1988b386e2306de8f5ee0bf2e5982ec7b42da63f6fffaa7f234fed52e369dad46ffa8894f47d194f1f6aab2d7a044c27aebb5621debed7926e3f18726d7777d357750d0e0c3380f184746351dbb5d65a5b146909578303c30c601c21dd543a7445bb6b3f4a0492b5d6da31c9f49ea3774b8562034f2f554fdd4b82f883ce19c6a8cda8a69cb6a6d4ad0f76f6f3d0368fa0059e4de1590282e9db799a9d37bb6e86395ad43ed43b6fd6d9790cf8390f9d589b817a101b9a0c1d07ea1b68d7ca89cc8726ab0f75f0eb543a383cb4ebbaee53523a408d630a3fbdcbdea4efa93ccc37973e4c3067bf98d558da1745b001f1456d5527c9e9d39a39492ec0d34bbc2283eb7d3eba670002906fac5bf70235ebc69a75bb8e8c0bd4ac5ba4650d5cdea0bfd76f918be473cf63f882644566cffcdbeaf1ba29097cfd7a3ddc7187986e75694988b3c6e79c93d24973fddcf378f00105242805a44cb09d52a811c52101532a540a1698fa135afdda6c7b9c73ce3967177149dd0aaef5489da95757baba2152ff71a2cd39eb68c7ae20ed3e69bf455d6f5e30d1dfcd0b2dda0b58c3745f29df6eebecdbecc9f1ddc5b7cf92f404bd4e5c30a308219ea8011b30274960220d2162800428e4200adf95083d79966802892bc8e00111c680814f896b942e66f0012450a8523baa72831dacf02b3f89b8c0d9202c4d1bea24d2b4f9caee4b1fea57fff011fcde7b31ed8b1305dc9180807ead67ddb35dee407aeb979422cdb2e6e91dbf1afbd7d6d1fb66f17d294acbafa134167836ab44593c6d0eae0b155a4b5b6530bdbdb44443f72cd16913e5f53e34ed5e297b88ddfe3e53500ddcba78ad25d9ef5e7aef0e24da251a5a06ef4740e3a84fa70d654d9b3aa4569f2d807d77fb5a3bead0a826f40ef4a8566c3f123dfa762bec17056b3bfaf756ef6e4d15c3ded136cb5eba124635c9706949f7de0b56eb799e1d9d0a181ccb8f54ce39e9ed27b56b8ed7926a1cb8b46f72029796564bb23ee3442ea925b50b046f57aa41c8db18faf5ef1843c3bd657f8ce7423211b873cfe1ce455a67af9419f86fbcd78594df6722b0f51cb6b58647636e94cd1e1d7f6488ee0a3b84fb721615fdb468e0f202e1ab4f4a299dde4ab982b7b47de8a11bedd0b4a9630fd493c99a7c79cd846a4fb8b8c5a0c8869ad86e45b1d23312f3cc001a628bafb5c71e681af3e39836b569539dd6abe42a69b22576856eed3eb9454d8eee918bbb4a6e935aaf94afd455e28be4caee919b0382386b4a9ad75717a9c95ad3ac4952ce44333131d94c506a505247a628f75583c334ab6da1c497a65a4dca97a6275f4d3713eeab5bdaa9a37695a6541506c8e472f52894d50f6547b84db3db5e4e0bd8090edc5ee2b134d1445a62401aa6d9981b653253e4a8717144660a9929a669565bd559d0c0d5656e954c1dd556f5540acbdc646e5f612db8afd5c725be7ad992c657a7347534caa64deaa89232b4d9aa3ef4aac1bedabefa14d3a67a29939be2ab67d417d3e6a68e9abc2f2fa07605bd2069d7242252f2d5a6e4ab14475f419a1650be7c897dd522e8cb97235f5f642fb317da578ab2b5ab94c97df1a4a281b235ea8bd9337b9ae604f4f4fbe600823046572b7da929f1ed449c35a50deead4f2fca9c9e77aff7bdd8912a48e958da7ff9c9f273a2c4d86292285865b181696234b84a0e39398b5ba7316205b18c5839d61bed5a711f3ed6910d6cf6ccbc5d15bd5d05e1edcac9b3a8b09078369ea68834de3ace2f504c1beb2858255f72405bd6ed8b692c514ab0a082de864f51b097d9b421c2e52a7cd16c315da657b36ab387e43688c9b24ee4ad97a31b6f7dcccd1ed14d66d4664f0955a55daf959ca4e5f369e9bad04db195951cd290d2eb79249729182c6d097c51d22dfba2a459d6f35e66cdb247d3c6ae6eed2a5147ab272d0e36e9185a6a2b1beac856d3ab5da8599b82b026222633324d6dda589a266fddd26cb1aaad6a2b919a51b25e658aa68df51cc3b35c9b36561cc75cf8f2dcbe5e1fe4340641e3f039b98f76c1db494610de5aeb224b9e3e5ecef1a73c7daee75dcf5bd55e682520dd75dd39786f786f7849b70464656b96756f7ca135cbd2d8deb2b897939c509e84e5766379f2843ccd6de5e4ad779e7b25202bdbe7a1c655adb6ac7ba3d39ca4c559cec02b5a254f6e7d3554c916b732b8d9e3cdde7acbcbac922c6e3fb71e440b5e3e27db79893a7acb320e5d582dc1a757d8e04a9d0a12674df9e5beba68a91de9d8b5afdfeb6d38df375975e6688bfaf7619cab7db963b5551d874abaa75234c6a2851441f4856a446f6295fcbc2aa10cbfecd8d73a2589af77a82a61f65c2ca64d185f7a754a279355b28b62b6c219bda95e7a3ee82285cb4ef6dd1ad1d7aee8ab979f135f85f01da22f7465cc1b2c664f37846953bd42c13cc0652783f2df87712ae5acead5e91426b9c3c4c0bca14e98148ee9ba1e8554cbabd104d24fca8514386ca07d3e22d012d39ca20aa83ad031d5ac6e6cabddc28509b8bd2484dbe910a747f5e87db419b4ab77c976f5eb4a5707dbace9795794f20a188a24af5792984c2b243104bbaf7a6c78d54b9d9589edbd21ce9ad2d21f9edb12907eeb627712c23850cfa15d9e53a7b64aae381d674f8a9b5126116afc740ccc172810bd699f1e7300abc367471dac579fefa3db367b3e0fa4229c84668bd4454ce958ef1dbf69535da7bebee2d8db75debd9ded3e4bf250289cc2e1ef23cd54aad4acd5eb122c36097f7f5a8245f13b09e1eba4fa460997502d67e0eb3eaaf515d26909163f13c954fa616dd7755d5723627c3ad56a6dd7755d576d2d77e868324ac459537ab16fcfbd198e02ba05dd823f3c07bf5b716a97564b5699a26f5c6a6405a64d6c5d9bb40bf4267d599bd0aeacd66f2c2ff831d5eddfa7b4da6a12a5d2e415a2e07869f549b39a666b56539cc7b49abab4dae4d23a2f6b93a15600e89676858666cf3c00e8d6c1397ed68b2d416449028316830104ec27182fa00fc04f2771e05e34d90fa522d1ceafb5947aff67c759e100290d4fa2210c3de8feb9f87a39caa1b63eea20a50ebae73935a220e8b4f4c31b273dfd1431aa4188ad259a03100dfac0247962ff19a1476a6e94b3a440641c36d0ac8f02cdfa7cda13a9599f5f9ef2fb523c40fc41075d6ccf61f6d4ff7c877655f7bc2424477dee9fe38cf3abf9af052aeba84044890ce130a91391688b298f52896060ead68e6577cddfea44d2ac1f3ef4ffa8de31751c6fe71e634a1e76f8f6fa22b9012ebb08973de4a78b42c0d46777d3234d71804bcae4a78b43c025a5fdc4b95e904185888c2136d54fa231841ecad04f2228b32fc136c6b8110961f6363f89ca38fa2ebc30d285174046be5de56178efbdf7ee8012c3201a5a3f9b05d4ac3a81aa9121df6e5f47dfd5f6f58975326dc42270d931dc4f9ad5b7ef2e9242058910d08bcf4ff97c1db47771234d86305152c4081328289fdfe2f3597cfec9e7639fff5324e857869ee4404d861c41f244e8419fdff97c5b7b2fe8effc1f22b4af4d2adfee2c46f0125c7e600c11e53fa376950da30294336aa0a26fb746ed2a3b189576953dfb1c7d61c68268959c959c3e4a3e9c2703f2663e969f9199b1fc8a5663f94591194b4f4835965e2d662cbf213063f9c1befd8708ae5df5093fff25ff10c1499142c4a85df58d9f9fca3f448c8850214245d6aeea849faf23ff14912141426b576dc2cfcf917f8ad0848460edaa6efc7c97fc53040604146b57cdfd7c54fe29123362a4d6aedac6cf6fc93f456a4d9abcda5599f0f359f24f91d7902143edaa4bf8f9a7fc536488099359bb2a959f8ff34f919912254582da55a7fc7c53fe291254e4489123b1765525fcfc95fc432466c4c850bb2a1b3fbf947f880c3161726b57357a2237285088ccda55d7f8f960fe213223a2848892218eda5593f0f3bbfc33c4d1105586a8026b5745c2cfb7f987080c08a8d6ae2ae5e77ff98748ad499357bbaa1a3fdfcb3f445e438604b5ab1ee1e787f98748d09123b276d5349e880c09125bbb2aee89d89e3cf921426b5735c213a11111fa59fa2122d4b58993ef235f763092c682bad90489942fbd21dfb72e08df5f67c6b711a474b76492d6a8b6524ef016577c54bebb37bebb2ade819efafcd611d0bf55f233b246956c98c964648d8cbe3b18ed6666befcc228e3db69478155b275305bed55f8e0db4b0d6ba26f582b992531c915bcc6cbae091a2fbb28c6f6cfa8922b8cdd10b3d55e53c4370d12e39cadb25ba24c4109fab28b75b0764d2228b16f0a9bfd682544e0ee3b980c87633977207d3e6b1a936fefa288eccbd4eb2802971dccbae81d4c0c8faa98affff0e0cf6943eb0ef4e887d02a4deb59b354b44a939702a9bc8405f6867840efc12ad91d75abcb0ed6c1603d5332be00973d83f950cf68cebb05385052dc1b0cfd007e767183dbd76c6dad9ded3ac1b1d6197078aceb945fcfafbfb1f4e122e01b93b84007d643e7c199e112e75b5c0397df9c2dfbd9b1acde7db9dce17740bd37e61063ddc6d8110728f8980187c785d9eada8e336dba099c7614d4f61cea0be422f73a7c5671798142d81f7584aae2f232b958f25aab98e9d7fc21e15746d584c30648788925d4511632f0bc786e9634c2c8d05638ab82dc8de524395cf5421854d472c4700eff3ce7d6aeb2e69523c37c30b45b04913484cbd66cd62e5149bb2cad5d422a17d8a7b2cabef8d52fe5242f5e731215955cb360eef3826b564ba1d67d7429b3688d050ea0bca4e0a3a314762a93c9888ba55269e54d4fca2dfcc9454a52651eb3bce3595ce431d4ac76d2c883d62c95cfe41895c2ae1d75e4e2f7a28e72847284da55f2f69ca192ca4b335e5a79a9542a5d6bb95883052210b95552e5365fe362938ea03981e6939a65bc910325a728e7d6ac761cc3b57e1219e731cbe9c29553e36153347b4a7ef3ca3cb769d39ed3454ead5ded28185a8b1f9546924d69ac79b1f062d15ab04ace8c2a8c6b0bf6a2c1d1e03e8c697032fc7959dec84abb0488dc823a6acd2e107f4b17a06f3f6153eee7c18447eddb7d340f5ab37808896ec799ed13f0fccaa3c9370f2673dee0c047074a8c1c5019329f940bf1c9b9b5ab426997a9a85d2b33540b9a05f50165427b40b1a057d021ca036a05ad820ad11dd025740aaa031a05858226a14ed026e81254097a039a044582d680d280ce801641654063408bd021280ca81034080a841016ac20052728010946e03df8600214a8e08716d01775011d425f4061940805a244d01835821aa147d0206a037a84e280ca281314097d82ce680ea8126fe729aa2495c2db797095a4b44a522abc9d27c773e4135403c6be84c9a9d55693343871e5e7f5566eb4c822f099108060071dca0fe4e0810e7060034e779035e0948abc72ba2467c0292d8f4ea7c818702a45a671aa838c835325b9c66914f9024e739057700a45b680d3590680d324b9024e9fc82c38752253c02992cc72da449e80532672cbe91259024e657987532572049ce220ab9cde20dfe0f4480e80d32432049cda20b7e01489fc00a741d9c6690db2039c1e917938a541b6c1a9917ce37406b9014e8dc8384e8bc80c701acb2e3895415e805322b2009cc62007710a94739c16c90a704a24eb381d2227c0292cef3885414680d31764975321720d4e8764d26910f9004e5d90799c02917f9cbef2005c48a6c15b907b9c057906ff21bfe02bc8405c0519064f4196c1519009e027c83fdc0439062f413680fb907b38097201bc87ecc347907ddcf37bcda62fe5166a2bd69a512d320f4eb3c82270ea831c02a74c32089cf620efe0148bac83d32b72e974287fc0290f720e4eadc81e705a45ee8053a1cc0197c92ba73bc81b704a451e9d2ec91a704acb344ea7c819702a45ae71aa838c01a74af20a4ea3c83838cd4106805328f2059cce320b4e93640b387d22b39c3a912be014496e396d2253c029137987d325f2049ccab2caa91259024e719003e0f40639024e8fe4169c26916f706a836ce314890c01a7419987d31ae407383d22df38a5417680532319c7e90cb20d4e8dc82e382d2237c0692c0bc0a90c32039c1291739cc6202fc02950d6715a2407714a24ef381d222bc0292cbb9cc22027c0e90b32e954888c00a743328fd320720d4e5d9007e014887c00a7afdce342f28fb720bfe02cc834f80f19065f419ec1559009e029c8401c0539063f4196c14d907b7809f20ff721fb70126403780ff97d04b900eed9c74b79c7b7809ad5add8d882d1d4be1d1781cb9c5bd982fd4d50dfbcf2cd907c93536ba7a1a9d1d8688a686a210dee5bb682c3250c92f2e6f53cb8083c040e026fcfc95572076fcf39aaa40edeaef3aa64e9ed3ab04a7ec0db756295ccc1db75822ae9016fd79155b203deae33ab2407bc5d8756c90d78bbce502535e0ed3ab54a66c0db756c95c480b7ebdc2a8983b7eb1455f202deae83aba405bc5dc7a89215f0769d5c2529e0ed3a47959c80b7efbc2a29016fdf81553202debe13abe40ddebe1354490878fb8eac920ff0f69d59251de0ed3bb44adae0ed3b43956c80b7efd42ac9006fdfb1557201debe73ab64106fdf29aaa402bc7d0757c90478fb8e512511e0ed3bb94ad6e0ed3b47953c80b7bb5e95fcf17617ac923478bb2b56c919bcdd15544920deee925552066f77cd2af9a39206f076d750250be0edae5a257dbcdd65abe47bbbeb56491fdeee2aaa640f6f77e12a1983b7bb8c2a49006f77e52a0983b7bb8e2af982b793af4af6783b09abe400bc9d8c5592c7dbc9a04a92de4eca2ae9f2767256c91d6f276995d4f17672a89239de4ed62a29006f276d9574c1dbc95b2571bc9d2caae48db793b84af2f076d2a89236de4ee62ad982b79347950c402555257fc1e793bd9d0756c91ddece13ab64cbdb79822ac9f2761e592559f0769e592501e0ed3cb44aaee0ed3c4395acf1769e5a2569bc9dc756c9d1db796e30486066f503a3e4a8744cd4775d2d19a219080000040500b314002028140e088542b15828cd634d103f14800d859e48724e1b8bc324c6619432c6184288218418002002404233890400b4da9ae535aa8c6f48eb256d04edf24b5683046973ff14018e9c1509b8e77cf75454177546c06ab77464d7dd28d08bdcd19337d3e21692abd83fd65acae42be53adcd5781fbbfaa934e4e92d09de665b6c6d656151f5f485b4a7aaf69b909d0386d7ec27005b5ccf6d8d2a3ec0bbab2297c07891a55ed25aa50dde50c49755e58d93380c31e45755fb3dee598b2c93a1d4b030b722e75023305a18a1d70ac080169a760f27d15046c0d716b39739996bd8f4c1f1f7980ba0538af89efa244b1a4db8d7858c1411facee574330be3045f65893eddb2655bbffc02b91d1513e9e08a031a38ac585b30e2ff911dec75c417733644cbbb82eed7615ee343f3ad640e2cfc70c5f53a7d81b757e980725347bf1583a35d3dc799ab4e9dbf6a493e4e017010a8bf80320b125db3c3cc95217957ad527578b2ff28812f56235a2f90f1e8dcf20a82f806042099b2c402c92fa09780d792e06468210c757eccb011219f2f0a437d5f70db4593999beadc4e7833ce7655a56ec54522a80b3599f15f941a13adbefc8d2b1bf4e82c68714ab197e3bb0c981092c1af084e3219b72de1c2f8d4a122ef6637c3cd77459b17b1e4d65a4d7f95cac5a37145c83d6458f492f918f161fbec1c2dca8ee53eff152c390e801190cffeaca7d6778f96bcbcae427d2dc3aa2ee19908c89eab65e70ac9d9e57e13331340e413701015bb13f33d6a5c41ce34f2413be85b65fb3fd9027790a1e0a566f20bd59a1daa695a6025a0b8ed00b1112836f328413aee2d365ad296049284e704064691597fd617dce76bb021709781f4d14ec7636583ca862e1d1f62e1c8d209660b8132fa9a10b149ac3c60aec98b8d21d4ccc326080876daa5b96457ae13257da62700b989a9cd3cbce83935ec32d24499498ba8ebad2e08446e0f1c79f0067c0a56a1aa84030b17539531756cdb3e452263850aa440cc7eb72ec5ca134595a3048feb5c30f60778a0a6fd402ef97383ac01ed6e68a47f8a2851b440fd3c8333b2269b53891010cc660f09988ff1ac030eac549089199d44c1ac5b01a62931cb8d331e105c423350ac869ec8b89f2c50f4d2db5707030e3aecfb68f689180aadcc90976f36a43421625af59197ac33f56b0a04e56ea0d68d52b734536a45ddef5b5424608120657f774b48bd100a875421a0ed16756ddcc0818bbc03ac4e4864b6c190ec0983e2309bacc9ca607c1e43bc5429b534ef371bf3005a6ce6581ae75bfc4a9b4609755ab7b3afca9f953338fe391f13198ffb05d6fb6e2f006bcc445dcecf4b9ad04178e06b8f748ca1b2205bb6d64b009b942db5a0533b989ad590640a39d1a19b61f22b57507a5400e25542a8b59a931855346bd2d2383ae264050ccf9e67241b89ddffeb7257830fb37089bb9a2c90badaf838cc40723439700b6d98f8d281776e18fd537ef4c472b7bd4b6cb6c1671a392b54f05438f9fc3b37fc5f7b28082382fda123027badf058a19ddf6c79fed024e86ef011621354bb766ba09b0c54c0a9d997adf8b03ea6f4cf6b47f5c3c7e2308bea0f1881e7b13bca4edfedb7616b743fbde4ec9487b20d5b564eae043c0246ac94f3b20dee9f501dc0f1493b21afdea840bf4e7703c8ede7929574c03f15a3d2884c031e528e53e76235ae0f61fef7864261f370b289158b8396ffcc5ad2bcc2db0be6c4e2ddace88e4db195808ffd88db9bc4e453479e5ebaeccdf1eb39c6127496750b64b4b69d45cd80ecfb490ea544c533a49c457c9bd957df2a90549f918cde757478aaa3e3b9301eb39e9c6e8ea39a365bae17fb0931c39904e72ca2a9b28bbac7b5e8bebddda51347bec1292ecaf48e4446e33b4ede4666a01b082a9058515f5aaad11398f1ea121ec5cb97557b99503951ab2190db9fdcb960c86ec0c83e6904232263c1e1247609abbf8f91553f96172f1f8fe3054b394d95907669ea25c6c196a3102476127c68d1d4731f7fb99573aceadf347316b23d5151451fb0759186b3c13b679d617a40d7d222d3401639175a7afd38459b1c5744f3972e0f1684c1eaed528951c26a0aebe3200c99f7e624ff9142475b464f771165348226d9c6070f33adba54700e894d0f52924076a05c599c8061191b27be4f9e8a8a91d26185f86e896f01e0e364f797155879d8fd5b2c644a750bf3c02f752681dc39619d228a7e0cfb3210b4c35658df0b9ac05e4b3258e7f345a52a19a9d25c046069a649978c84cf8dd93039450259527a5f0cd07d42bda88156a57a71237d6d2327c536b1334042ee5847bb00525f5f03d850548df45a03c82752668cfd51a9ccab38c0ae4f22755d8293d8ae48e8275235a6cda345bab0ba136317f830498734eaef732bf94056d8de9f165314aea03eb823282a517bf07f8446c909de61c5c7a0541f0b469d3e415a1b095529344c78ef3c051e99ae10f77a1fe7d338363c09223de099b40a8ccfcf82d47a96a767cf32c872d63282b328ae9f2d61ed59100e9f6d37c52a607c7e16aa923dd55cebe6e5c29048d041d12ad851810a4c969cc5c0fdac4ac6675160ada7f2a22773693044aae641700b571ecc289b6668abad2f634c2e06fcb0181a1142109694e5f0209b4e030ae9341b3c473fd430ab7ef1eba95c076b22123ea09c2072a4840eb0d3d4c46158dd2fd09b41881d5c76fe0b40ef5ef8bbac64cfe735922eb9ec30f9840de17a27ba343c9094f0385d9e7c1fa39066920202aca2e5418bf01c85d9e0f3966278363bc8705e7e40d64b7cf65d6d99fb0730a95d9edd62f04eb6668a4d86ec3d7bda8d6b51a7abc8c0192ecc0b23b9926745cf5d7ad421c2b40882a6b28bc0541acec77fc86d904c600d16121f1db11ece5db4daa24b5d96933ea8b26070939e11832ea76d162454807b7bf5d63bfcac3a6ba9c779666e48d34214603356b3a76177d6788c34b43cc71bd61ab144528a8962d365e41a9f5f19c83649840429392d0c7e0c940c6a6086537514bccdd5f04747e5521ff2042be7384a865396375f3678e33af5de8c11255b3d85aefa79979cf9b5d38303e7f898780bb6ddd6df37d76390e72020625757c76f423e0e28a80123ff09b3ab77aadf08c3298b1a916fb5bee2cae65660319c61223697daad3e3828f8aa58eb162b998e76250ae80559edfbda85a7a72ed037c341e35ee1fe136344fd63e4b425421eeba3a5d66470671fe419c1f0d88b200852f4a5e962e494f376a6985a803ee098d2d9d380d42b67ac5dfa5ddc1c10f238b741c83d104600a099e072ad5ff8090231080a5c0a1ff0c17749c51ac1e65830dfae974e82ca896fd4adab911a1f2bc0b1482914dc5a21aedf8f29d098406ef2039334cd4a83a302518abaa59c125e74b2a4c28b914b42e6c32a2acaa2802baf0337881dba738f5e7f71517132e29eb3c28b5b16d84a31f196d5d8478f5062fa81791dd44f547d034a96330c41e68866044f1e1db6ba9d709c8519569449ca4accb933fd91605ef831e6c6382d707dc3e89ae549968420a0a69c2087a671ab8cd24c457a76e2258d21c44649a36ba76eba732b701928d211f1414968d801755521c50ef5679bce0050bfdb484f5c594495f4488d98bae3b24d57539c639bd007af8cfde1d6a00428a9e282840da547a44beefe5f87cd2b52809fb5d054dd7997913cfd5cbfc6a496ed407b89fdb3cbd03b1ad5c960414bdc3d6556e8b26bc65afde667b6a3a886f8ae989b03a5c7d90bce8e0ae464d591c4872810ca5111dc228042a38d2c08d020cdcad2956b439f6b217ef0ee46242a247a2fa58c5ef45c9b4c479d5846e657ed8a4f421c03adc7a9c8720c445814b05324ba6a7a0de126e6682dec2355c371e7d311384f6be97c9b85de7a9a89b01c6faeb2a53af7b71626a2148e0d26bb9f207e8099178aa46646e3402ddb410f0b82dc7780e4fb8f22b02e02158f20fae7f40f0f098d660abe9a1926d92ff7eaa004118a6f416708ff472ef3041537d77c6e33493a2fafc0a39d9409f05b399ae5caf59859292ae817ae356c6be182b0df0582b25ddb8a9c178777f350fe5fbfe01d4c25c458151a41a6f76714f713b0645d781cf54af9ffb33b6c14c7eada325e005f13f23003091f8206a48d96d156daa0204efe110ce177faea6799823137809ad6bed3f1fae74570a4034a2a0432c10479b02660e992564ca961a93399229d68c98ecc94451782d4dbd2111e0ab635ab5d10aeca54c25917a319eee394ef10abfb39d38dadd492364a532074724119eca9b352ebb8006bd1324ba1b834469518eb612e607f24853eb1f7652d27c28accebd6680e41ca6282a784052ed42db1acca73cb607d4de27ef0d587570be7a2b0eb2e5a315d476c63dbecdbbcecb55783890dd09ddba625a69420ce71be10423f2388124317b76d2163a1e9615ff7ee40a32d5777d7c78bde179d9d94435628584a6e2aadca06f5565ed15c5deb7b94d00bfb6b847762dc3af3dec99d0a757ce9762f50ca72d2885a1648464232a86730d620a5f1609480473f561d89540e06e6075b6fa8455a917b98ede88a2d7e2ef75a0d93aefee180b0cf855775efb73def26a43e4b02f7e9bb9e189a5e37790d9d6f8c73fa155aede15c4cf50ccf35bca543da0c035861af2cfeafd6208075e81e9196bebf33733a9abe65d963b95fb69e02d148361169260ebf5b00b0762a014951eca8dfffcd296fc62d707f3ab2379bf6d745494e24dd4f9572c9983480e774019deb2fc98c72f79244fafc55107bdf7ed6932afc9648fe9412d37077a7fb6855caa6a3ca06f4ac4f02ef8a8c1f4b8e426ee3136536863dd344acee0048714b4fa9e96e063c770986f58489648510d51a722c94b23257d9b6d39608615631c8874e4dfa94c8dce619820cd572395ccad879fa84778b91aa4a92c8a02324866a11db4d4bf3047f475321919dcfabee03e02c1b5127e81ee8953220e8bf4cd32ffddc97f4e5cb04f7d255f492667999195efa769754b0cb18ead20f7449f9b94c5c2e5d1f973487cbec6fe965b7246b5be6c8969e5e4b8aaa659469e9236849db59a666966e2b4b3a90651263e901b1247d58660e96be7f25d5bd32f6aef4335752762b13d44a6a33abcee2981152cc0d2b838b44a8baac980956d27095a95ba5dbab92ce5499ec547a502a491d959942a58f4f49254e195b53fa2d2b298795095ca52bac920655999d2abd3e956497cadca3d2f31fa864fafe7cb1dca4003dee077f433cd15abf5728db083343e474704a90f827d3870afa095f128bd1a19ac05feb5f1d47c2a20332b3bee73f281d0084c639946eea18a235cd1be0ea220e40cc06601f2a0558cea0c90d6471298e5aa970feb60666787ff8509aa120cacd145aee4570ea13ba5045052f5f710ff4fa1c449984d9e6413be181dff6495e100903754a8448cc266839a477ac05a30553a4815e431a4284e40daa2c506bd994b4d1074324f3c17b58ea9376fa739f304edc1ce1569d1e9a2735e9d2564b903055f497f36a5bf5599bd9a6ecd151ecab0a4915a9d8a5e28c82edb1e12f5612143d41cf000eda898c5e0ce00ebee6ed0ccb7dab5d37b7d45f141d786eebdeb3d6036db9f1cb00a2e322417d7f3bb936ae085d6b34e1c3b1313a10eef43c7bbc378bc9cd2556e1a9c101100df63c3b3c3f9dcbe94655b2a4c9c1100c147c3bbc3f9ecddb54d63291c0c1720c16083b7cbf9ecfcd65e253e8232a8da02f58baffca2702e5ee6c058a1755ab022c3cb209809e2b845af1e0637b60f56e29aa4081373b80ea23452a083247ec0d8e3fcaa316e8b8b22b107c5b015530e2d486027b442dea80c37d7b01ee2b22219afab6b830ec98b2ab5f154d8bc76ebc2cd5ed4ba09c2d2219626fed0882ff380926425f600260066ea31d108ab2e5b2a6d7db66cad7fbe189b413801e22106f6d3858223a20c3e717ff31bc8ecdf08ebd7bb03b0a3a9b0c95d591950bc12f65c613920633e590b8b8cdaf863046db7b8c52af3769b21d6c08eb767b554c5d3ca533f49ad0987ef25567ee55942e240923101334f40ccf4abe966e9fc59dc96402402af6899858d34339cb22ad5c4aa4a14a00db0f4be7145d1b5fd97f6269de905ea5d4c21ad5da8869caf6e7cb9e8751b60b142202deb3ea42b164bd62f7e7a80c2e04118686a1c35c22a01f0b2654a353e7905e21ce6cde76a911bb905c5583fd150f324f0e7494241b435c94c68584eb135a0201549572594b59383637638e209ef16d2fdf73821abd6756196ff4207db87cf5c74fd03f5d36cee5bfc231e56e47b21a59c956feefdb3aa69e7a81c7ac60e39929c064dddc9192ef74e98e7b99dd6faff577f980d23f765f7543e8b17963bbef776016bd0951a1db218d406509b451184e01dfec9cf49263be3d12326e0a2c2da54cc29634a05d503bd41dfa2f42e0d205c12f5b56f975473a2e32972962cc8ccba359c44dbc8834574568d387d815a6d97a109a7c14477492b2f8f69fe65f945400492b9694c32ac19db8d45d15b60751abcc455f9845c0447ccf7b1eedd012c29e6605087b2857ec263f0a1b30cfc7f3df269374ff5766b162cd38c46f265635ad154e9d915c25462fdde6703f755cd41c24f981f1c3e710c13d39dc99a126c62728587e0b4606929f044c18034c0c1cab3177303f8a1b1b35f1bb24db5a60e73a788f5a07816503790e39c0aef5c9270c9b4c882ed135eb8c4129eb3528ddbef978a69f4489699a5e705255f0e71e7f0f3e8f5514a527890bca2880797882a0d04e5cc6fd2afe3667376383a48b57365364d342301303cdac90b619e8ced40e5b67d6df0de953bceea180d050b7afbdf54620beca0589ec62586b0df9af741474e5ddcbd54417979ecd01583f3ecf5526757c7534f84005a98044eb04f0d2c0ef70abe482f35a4bb407cd146f8edd60a3b14b9588a3fa74cca877ab407daa318ce9c7ad5aab040a283f64da188f7e74ac70b68d87625770c9bfdbe1e21a1191d938137d7ac163f32f22f2c368f315560f0b40a16d34c905858cfae6592f1bb7a9ec28797f1ce2baf02c9524b0fe110601b3f290c23c52a2ecf00f92bca0c0a8d9c3cf863c8d4d57a7cf07a0b72ee00e21b85b040bf6603fb96ba7541b48f0b109cc942f24773ad4d1ea04837eea1df8996014ac939ab6c90f3cf011c3a2604d5e926304a5b2464d1a44e394e843d37d99c9c129f1c8e7c217be60b943980864dc6092843d44e93f77e8e53250d140d5f4340a61159026db200899111533b370c504638ccdbc4485f3b4d205c36e1e445427aa8d88cd9f558bdf73a4d188a2b6fbcfe4816c944b04910b83e9460ca6f11e46e0e04c7f2edc9b72b9822ae6081714be54fae7ee8a158dda15aea6beae1cbefccaae3eb6349119afe72e9ca902fd250e333ffaaec32aefbb7467f1142decbffe0f7bb9fe8b21d37f364de63ffd46601e7b5db7b1d35fe12c89c1b7030eb1fb5198d90cd70ddb52b987f82aaab57ec2a8aff9bfee90dfa527ec891046450ad1d8a1b3af7be114dc959f2fe7f4382b577273ff79080b73ecb2bc5aa93c347640197e9a12e932d3b5e01099b28fe4a3bf6be9703ce714e4e5eaaff590e1c63658d7f6c0a565b4f78882891affa366ae64dffcc613822712f36d781cd55f2742731ab2f3eea5aa3f32eeaf0146a7e242d405c10d83525ab40600a346ff35d1b52025a086b8708c00fa96078337de0b7f33cf2dea69be888f854e4cabd910f247a63e78a729c9b984e4849b0b61e39935b4193a85cb9ff5bc64c1c2c984d4e2d06ba8b80e2f04d0a84a55d272ddf3d23e904eca1981476843e5f9bec7c1086dc0570f3f99cfc102c8ca67d4fcdc695dfeb0f0b6be49da7a42d83764023c474ba16348e2b4f129d0b4a4609cf61fb5bee2a37bd7f241fba6bb3261543a3c525946d5e2c04f295a33884d6818c3af977f6b9fe83af57972cce9520913d285d3a3856275943aa6077d7077c1c9172374e5a630f2683f233c60e7a87401cbe1b152098146414c55ace14268b85c08d036ef684dbf6c1687bd88878245cbfad43c64e874e90f0597740cba47b9361614648932c576ce3e1ebeca1bf13c5277396f4b3017dd0b05a0c7e93a017112fe6596ccb34e38b023d39d4cb4ddd8be51ec48e7876fff7991a937a0166fb5cceea37eaab93ff1d613c86ccee776afe7b9ddf5c6fee61b98c61870dc79ed581998501b9487cd9d78ee5ca38f875774313d6c32dd617460611bf3e311e1f3a9c0c67bb20734b3a9ba672da842db03613d88bf750e0332905aaa28d6a17e5bb2abec2139749b05f762fe314ab5a336569ad9b24e80edde051e30b9ac40a0911846b580558264f3159c5aee8fcaf09dce919555f1fd544719404e271c62d6ef5c458405e7400bc09ac828996956e3a999fa1d723013dd0c5985ebe25a6ff6711d7d5781333499fd7819129af6905217aba5c83945b9a6cbef17800020c054d181958a47be789427c18124ce40691c0754e6fbbd85364c87826c6cce7817918ea75fd60883d856b6afcc070053afeb546d73cec46e75a05104cb6f5db4446b36565a80e28ec153eb4acddab58f156df8484f2653fe09a4ac94ce416c5ffc98ee783498f77c7c03dc0d76071f9f681c46f80449ffe8c2d270f6523bf8df8b3e7617e008576338f920703cfe56d89c4f2ee59aa8fab242ac635b6c2b365b738bdeb8b29fab4fd43a038cdf250b48b72f323f17fc123d14c04370dd6e0193972fdfbba5ba1284cb06925ec0d89a1c61cb0849939773516cb66ed5184a6ebb41f0b1d0f26655a364dca22459f12ae1c9d1b2f6dd430e90730f15effc5d4bbbb6c41d739cc519849efb168e16cde7d1921fe176df89df65210f7d309acf7a5b6bc46548e45203d7fe9957ec854565b05df14f24f72bf3ede44653088bdab28423fc74b107d9bccb10ab065426e704a62b42aaa21413a2e0cc516bb4e3cf260be820163f97c0357f4fb7331afa6854e9b9ac65c98919d91a21a1bc42a30ceb19c1181ad8d4f0b5bd2f16f9f9acee37198c60c80f7dfa59d05966fd67c1994c0c15e649f51d52bc17b020da7f02aff219f52b3f4b51c430e548ab05054407952a5132dbd1d266f82c5c43c99221d082a777d4fb4e0e46fee04dee1e1ab8e5b5ff3bd54fa3fca94d53d8946b1f1e035c36c4b44723db98fc9326616081748dc1eafe05135e48b45b76aef068a3860cce9774b3edfbf52eb88acb4b54a6e298bc273eb8dee79ffcd3a5ec5f6f2529268b8305faefab4d17c2b78e3923cebf0ac5815b7797359fb124ce9fd9391316edb1bd2303f900d8c1ef196dfc27cb0ec4fe16a8247ed57bafbb6f80dd2e2c75ff3709e98d3e9e9466e77f2c56049c32d1757ee3a6a394419f6a6e3cd7cd88157bec7cc3fbdd2690ff370a217da9c9b6bab8ed6703290506326ab5ca08c5e416b30265d611c39c06a4583b1074d851763c3e0bc84a95baf0c278c611630102c54947e0e11828a5f7f8cd5fbb5f8528f919cf7bc7dc2d70ebc0568ad6964c0ad4e5ebb0b88f025928dbed4a300111152f1da31d0b5ea6f910459f19c5c3aa2d33b91d885fc93c4fb6dfbbb5573849392f1f847087c8fea4984af5980051e090d6c8865f0c44e874a98cc35178b4dfeb1ced72d2a486fe020077e106f5a0930758f388df8bd039d88e1738857cbfae3ca5bfe81940dffdbe9ff7204c2b6637bb1071c8f894b2866cc901e4c053f9cc62d7d153e54b25d6cb9634441c3620418ec2eb5974ab2444cc386a8becba7c6b2f14c2753bb91e5f4fc78a7886cb961208867ab94c282dd98579428e6e3c478f9195f55b229a1bddc0e883158b6401ce420c4d8d35726af9209198c17ed2a0229842f816bc849559213fc175ce69cb6d1ac4dd36cd6cf5b82cdbf9dfe93a3bcb59db774e8ffb1f3d4e69791ea189c2352422f45721d7d40dc5f285c0fb8eddca135a3c91c304913c53e09b5c554d76e280c10f6b52127681316a1c03c58bd63cd03a965715f32899956d681989d8085cd50ac9e9dda0779e7cb8924f0c048637083a1f6479f943cfc4b942b90e371134ceb44a5f4f7d613e4caf1d10958286eebe281738cdf1d195eafd8c3ad277176fc6d78b2a738f081654be976c9bca1e6a95c0e5d466ecf313f117b1148b2918ba7a4643356c3d304858f16c4b9e6fd7456151c0b7ad92cb90072e569c53e2e85da466059191163749e928e3bc7ca3293115131756361e6b32d7312b0fd6a841ea97d9290f26d470ba37ec5d736931a48f55d98b660ae09f77677ae582cf25bcfae82f7564810b62c3260feaf9bb15beddf8056ed05b31c3059a4b3e5b01d676bb1e271ee8c704c750120da0954f09958b26b582d0f45edcf9fa2d4962d14c4b53a19f19d9e7770ef7e8bd7124a22361c1d0787458d32fc1d6997e388948ed6659dfa58f40b8972a9fc342403948d33682816516f10e118205f36ab9edaf24e52b627700789440427e48773fc0312998ebe06680632959b678b3c8482222bfc2b758ec6b022b4af6cc53ff2cdf1de0093da3044585677629f1dd1286bd74f58739d30ea6fb54172de5bf4f76df76c33d2a2927927d598a93342e692c438cb532b90f335c686434db29f4ea10bae6cbc5689610ac91a5e945f1dc61713df488055f9656430e8bee3b98c605dd5a8e9dd8c1b956d4db68020e33b27417237b2b4b87e34ad6054cc648182634eb02c3a73500c20738f99907f650d1f7cb7fd246aee694ab823ac801d7928513059402ea1afd520ba3986fd31cc64d1034a8559e7d77b423a8da50fb748522684442839c5136f15da740bd5951e800e706d406eaa4941f4887158ede29067e6d9fa840ac32a71dd04c1d433c679adb8cf83e3a910f2dccd12e33a6f8bf2b7356a1e442b2adcf10b4184d90976597f5a8b2b748f39f2708f0054d65fcc1549776adc75d694450aa3ddd48356e211c2fd00c241a9f75441ab74ae4507688d7275aa173cfb6ac6ebea06dea728b88d432fbcb1044651f85582e63b43aaef762c621988f76115af2c7f93d81a033511554f31d20647a02833695780baca5a4ebf1bb0ad31605838ca1a2ebac5b05bf8e77081c32337d3e999420cbf38d4fc143ffcc6d951c5aa0f3cc9f73dc87ce48f308d8bdcbab52d424fc8d590e72b8753ec74b668a5540f6fe4a2ac1086bf9706eb46f44d7878918f6f2cebd54bd21e171cde851a4f23462d253314acb7e5b524c05099aa634ece8fb012838cd89a834798328a5360004d6c02e089df5399a2118e1415f4442f2ea0b0719b7c9ec3c8fd48a6877226cde9d51249adbdd7a72f8b314795653682d7f6f8ac17b2d326f96476e05d23ebb5a1150237b783e33561b000cf99d831387fe7451eb5dc54e6fe340cbead0278a2628d0ac02a5ade97232ca1218b93244dde52ccb58e8e7120ee707b133a3337e67e83eb434c7eb227fc74d55cbb2054b68c49cda847014867621bdc48af7ee4303e3efaf7dcacf683978764cd412fc2088fdbd5f8496c67a4f3e832e1a80a112b7298dd372a32324170eabec731122a970e8d91315af01cb847a8b7f65bad5066f08471e28bc8efb18707195e820229ac5ae42ad93662536b2e17a832adf5c304485f9f47982f0050cd905cbfd28686a0650779f8263a7fcec9ebbc5c66c18351b58094ad81a23583a026ff735e88d0e854fc5898acf06e81b613ada22d25313fe41a359c845cca9decf52fb57a856e6c577e7b1ae2e5ad4c65045721ca26c49ef040f8764289f06ef5ef55b39057e264d3d45c527b3e1763e7942ea04aa570a5662bcaf16c66eb95fb2bea95062263f28c6ff0404e64d864cf8d981e2114fdcad7396911807e2f26e05983cbf95cf83d21bd107fabaa52c0029d90a0b42500c58fd8a133371248b282d4600c1c260e1ca6381ba95a393e3078eadbb1bf703b804a44fc008223e6405530c0b0a9497d3742613774731f3413973a43200bd3613d9d67caf84fbab78bb6351beb8909401853f27dda7c91b6a0dc7ece190051bcb3a808e83a690a19f1045090e2fa8ed33e55e7d38685aa4f087cf84d3684b60c6fa44fad383f87b2ae1587d9c1abc9545bce5bddb08ff3c7bfaec76206b91ebdf9ad78c46137deadba71aaf4ba0530f9fa89d8784fd606b1a66f7f15d652eb72f20e583eaeccc4c1448c5fb64ecc571e97b98222ca0aa30f1c04b5f1bc28b341bf0d0cb121e106e6d31c49fc2eb678df39e7d046c686a1b6ff089f3fb38166671c53ed8f058bb75281598e0886b3977993d054c31b3dfefffa1ede2c28b6315b584d6f3197b61ca680c9eb056181eaeaa39284ec3cc47f13d5b1aeb2e4afd0857e314cf32e337035a51645b2de16fb9e27193eba81f90adcb38d528ce5fc4d17ede182d7196495052ef73b1ec649c4b11e9264f5e1ed932114b2b80772712e046b39027f2189e540d8759de8cee878cd8c39d3121af7a7d4bfff3a8ca331291db1a008e64c09b13070542a797303a3dccd4705e6250a859fa0879e41e52a1574a54da91bf4718ce557224e7cedf01b535cdaa21b4a98766184b24bac9446ca35c5400c357de876f923e3d421feecf519241b46608bba1e58bfbb568e3fbf495acc1dca7ef866d5e5cbbf9bf0fa66cfe70eb2ce8c98f696a5200f2a14d44390d5423233275796addd90296a7ed3d3c157c38ca6f28c068310a1687b5f8cff9b0538dd35f300559c3fb7da159afecc431480b57d383aa6bedbec86659c812c34bdcb732851b535d482542e881f82bd1a83efc10c419eccd1f699d36e9b30740fca25f81f325992d240518c2c27e06d406802d1e0ea209f4eac62bacb6c143baa82c3faad02409b023533028e206d287e064844b1a0f17920b224e7405e1aaa8818ca09c5f0ae21499ef8f411e00b4fdb465f87c00e497e9d02d7300df7c77266788e155d19e6cf188dab87a05f1f5c32084803bd24428601a290c221568f7246249adceb821dd6034ea17e192b7c4c3909480d6f1077798ca9332b614b5fd08067688fe4ea4bb60ec5a4aebb324d00b07958da3c3ac0646b9f3561bf9ade75c580f60a9a6baa35e060fc632637f81088076e5ab1c3884200d1a0c0b2f3ef7d506f7c67ea83b778c760877e7699209d03e8557000493f9fea0ccab4f41da08a2ef125041d0f49e4e6d67c5d742aa9719ac70ece730c1e6892d9bac01ccd05e72c43e195425cc48fe001c6c4c469670b076e7909e4b0131b28ff46820c54767683a52f164a6e482d34dba1700cd881291c6e8300253cf10ff069c3a43cc74cf7be0db2f9b0c1195c052288baa51fac050d4bc69d253af5fd06cb475b42c14e082c98de1a318480e6b17e2f071af3322d102f6c923de75ebcc92a60fd4e55e4ac8b85d02008cee38b1443bfb58904a081e4145548921315345235dd4f48f4e1005133fc4b5fb5079704348bc902e012a79e741c08050c3fec80450b194e4f04fc5fcde32886061729bb4c796fd8c329327873113c18038205edce69f8d9d3adfc32771e2555dfe21e53dfa11283e7e06aa48e9222b31eb80e4b4f24a9dbbc06b3e1647f87924e6da01cc7be6504efd22e63eef23f0a7e4e8c85b33195ad5164fe750d952c801ebbe4b0c149570591f950306c9ef156cb6518eb1c49605533289abf8a82daa312b28d2503e926da103e99c82fa33e7ac44a72e6290943df4e2200ca3f363cb38f7b2e0749d5ef5fdb1dde03ac732e26d1b323c443914122c7b915c65861155cc593d56a937796abf263206f25fef5b29341c31304d89dfed2db9619bbf9ef2d04efc494ce5a324ab398575924dafd1b2e79ec0c6326604543639d89e4fd89b7f6ecc9e789a0182df15e54ccad3231986692aaa8fa46d052e183c0d85a74948f4b2cc4b1b4e8709289236f45f35f037d0820e743818bdb5a5f3c9c2d84116fa941aedfd8a194b29746c4c41b67d780f8542f005b1603d0e4d19fbe73bc2f2316a0f4be7684668756aad5fd72a8d2e8809d6e449fc25893e0a3f53e09042687c1f03140dd226f8badccb035b1e9f7c54cc3f4cd4620160411af70ba26276d5e4c22ca311e6b55a91d88f57ea6364361dda771be47912038f9c03007702b78be00460b9988ff187df882a2855e10e20501510b2370abed4e2644532acc72322cfad12b9644416076955c1e0a0db3174457b6a1a3dba4496460c85afb9d1d86e1241da26c0a647281013204a5fadbc0a544a746a277174392d4b89c479305367378db5bcbb82f47eed3c0e2f478992cec3a0578a6707cca8129373c24ec923c2fbc91dea8443d651fd2524b80a0e21e69406d1d1e7d751b035489d11a47cfc6c8645943a880fb705416351b30a2720c13b4f1b9bb90cf0d8c228f6c9c1b0b004b3b8941014ac121c12da4662de66b45d15161db0dd939afc1ab0efb6da1de92bfaa6f07b054af286fd8f9bf868ae0fa371defc3de6eba033b2c3b00d41d3338e0f044d265d06b37048dc63d54ffa3f4bd8cee44f30734cb6a83cf9ceeebc78a554cf1869451d35b3ac3193e50d0cbd4d1a32b2bdeb8fd3c6c09451d87d5f4108106ff20d273986e6000ebccd0263c1519544c26af64723650703901633e932eb3bf3ee2e8aebf614ea4d2eb1d21e46f0082d5fe22b415e1b8635bb3792c31d3425450d5ea0f3abe0e41be97bf70caea098bb9ed426a229fd6e69fdc6753b407bb5a1787ac229dddb859caaaf86c9cac4fde959c4a67532dbe0f409dfa480cd1d4f039b3cac909441a0a154a2b04d03ffe1f8c5f6bbaae1a1f896eadb7b9b91b48870ad1563e2a60860c7ce852822e96f68b3223d5e2722a9b32e332bfdf7de9bfa81ef21d320e9dcf415e4bfcf56f41c3b8af4df1d3c50a624d00da1758ec0387b79e3c27e40e737b38405c61f65d9b30c8031cbb796c5d6577d16992dd9e37774568c48e1c7c63bf60ff51a9e0ef7c8b40771030f903da419c9b8000daa056a8fff283cfd802ecfdb202631ba949d0acaf254a3e1eb4cafcb5d8764f462d918f255b19b679ae549ef2c546e01a97c3a23174236abca3961b86f8c51e4341a02738997a24707a5f872bbf5eb0090a7f1e9cacd5b0e3c0a9b9c16a2f74c74e67a842cd6009debe97a0dc4e514e59d85a2cdeddd4fe96238066d16ae273de221776f5f1482d7ebeab4a69acfd1feefead1967fe54bc35376aba2153f948a470ef71039d74b90d6bad011a95f2cbbbbd6826329169e205ee94458bef899a30c1734a6bb3114b19ee36c40602569681b4039a55967fd55b91e31a370fd4a922b5e485f5bdbd4602746e16d6240e3214393bfaf5e0a850a46a2af7cb288bc90f732c7b0fcecf26c11e08e365e638ebb4b840493be9a333b5392367c5f640951b9d2ff960529dc5420dda044b1dd3faeae7dc80a60b98eb84a126bfc0746a24bbf4fffad79144b0d596145681df62078729f23bfe4e5a2188b2bf80ab94d77f4b013b1bee4594111b77993da401b3728212e122cef8445855fb5e8a134550bc68e04de17868a73eb84f6ecca3cd44c99dd2d08a3934f1570aa573a3e7b2304a7aa80f8491b1d919763481cb977548b1ecd8e31977becb499670880090e08169259fbb1b30748e80494e4ee046c301fc3884faa021ec236182a3ecdce88002530c5560d621fc98bf3a794a20009d84912f8c06c98dfa6b85c4aeb0e6cbec58c237c441539ac4f2c3207e928327dd894470f7a7335663a88021703420c963bf1492a2cb9e35fc9d633a81e58c9ddf4b331749c24906643d8cec2f8aef494101610dc03b79be8a3d11f931d74caa258643d37cd4862ef7991564c507068b1bbb5d9159d6d899fc7772ff1335d28bde9e02af760fb00eec2626309a77da3a6ad00d48b78f708a1dd0568d6848965daa38956e4cdaae1b17ec12974371a8a1daf5141d2c5dabe9bd9d66658a81153744200e8517d9b5f29d78d42bb1ffb94668dae373694ac90823ad7d1240b72f8eb23ce1f832c115778ed5f089bc90ed2c1f40f3a86d5ffebfdba73a2495f40b327b3bd58e66fa4343285c85f4d8a0d914343fcd9ab1bb006c465161741b8dcf3fd762629732257ce69bd65889259ab42670d44121417838e7630b315d4c4b168108f49a7cf3e738e463dba617e718b5f39e0dd679c9e5110f3187527c24c9c45178bda2329656b7d19aef64d3493557b0995993e4733e9739b1944a254cc78dfd6a090351a419ae68e2c8b310c491e2d98ae90c3add382e94111047839f8569b4937df5169496047681e47e956540e4db43f725a0f621b6dea1ea7535f6d98c23da2b7f1784e76553674716020badcc87c4f3098573a98504a21f6255b570a0bdc8e9d1578ecace1cfdb205f9e88fd4b540ebd42630600201f3ee035f77952787646c53904ab340254d6c4c9b3e5653b7f7921380a99000a2e88451f2b36107967db80efa276961301a70179301c7a2c3a83e3e74890a7fbd5f8c0f57ea0d26545c24f57991d8f97c31aadf3ace3edc9496681a3af0faa2699ac8236e7f5fb1e6c044416ac535634d2cffc865fa0f39d5f5bcb4aec5da5f6db0664e8b0809741ee0fd4e271afdca4831d625bbdcf8114c46a99e01cbf7a2c50bf82b156673861085baf976e5b1f0c1c20d2404c1243fd12cdef725a732c9d0761c6a93986eba1da5eded9ffc8f563248fb17500f488c2798fd7d61048623696c094dcd142a658bb5952783a13d6940d337df060100874bc75763151c2511394eb14ca104ea2b2a400d86d4f334a032be8e17e17758ec2541189c87f5da606b4c0361ebdf930ab475925bbf67bf8541e98d2b25afa978acd8922e681557bc6b57cd6a356fb83cd03e1162d384fdc4e53b0451c35528c10b148088142130d8d7056f51ce470bf61a134162ccced736549c570364966b044148b142d1076e603853aa48649f496aadfa0b187f351e238e495f9ed04681dd3cc9deaaa99f8ece0b8698c4949e13493adbefc60d0ca0f26975f3d58485cf0999120abb6b47a81374055cc00538258c0db034290ac3ef8ea7bd385672ac15a58b6989a14ddfd69559fc61d8c8ece4461601753d5f57007b6362ab389a4110033e3a7a4a4662ee62f50fc91a97f4b8e447dd5a2468e24eeee655a4e15a60a7252404ec7b30a915f058815c2173712fbf4e864affcc98930843cd49d650b083b3fe5752e0575912339473ffc40a7f1d66410e00befd0b42e07c3bd35635fa275a4563bdef57bd3516e5233e4a380489a1cc03721d44a1e724feb0495bee665502be87c6a9022bd02db19c8c8ad3f4c78277c06e2c5d2a458421f50a6d5df35b1f9856af84747e88a517efb75b436a45f1688111f1a7a5094b99a9bbc2517d63640ae3a79439618ba8354df91b290e7740478a2f91ff0f7ac5ef296f525ce2a775c1c4de3c5a821b762057ec754bd4168ed4ea6a97ce97a973dbdbd46723fbd9dc7141175ed03bed29f54eefd5e0de57528778e41b65797531b8bf41bb083c74eab1085010bb3b41f446e30e4adb1486cbab63c2414caeb84ec76142b095201f5523d8f7125e75ed5eb046e53c6692ff9a97638358d68147b025f34a398b1b61d4f1dd599cd306042ea615bbb53dc8840f156fff3e8c4282f9d48f31ac4cfe97822daad42eae5e00f556ff1d6ce25b13ac9cc40bc3605be19735e81761a573835471bbcd53253e0dc63ec18cedbb351eefc559f440418d79c80f3535db71df2304bb57c0f84f92fff41dbed85e8b78a88be289ced72549ec7d313132f3358d297eb7c6b31bab84fc7443eb50f8e738e969136bcce4876f2698bb4932f6e749f79349b99034520104b6f694078e10ef76c451f8455f221ef837040e2768989ef645d125c1ff73d35fe9f088b5779948d820dd2bf0f6536f731975c7c9bc3582cfc12e0fe3341be813303e27e24a0607f4f76f9bef81820edae99fcb476bfd71808f7ec4b3c1a84e6c08c76e92e8ed96531b75cfa68b9a4aba36ec1da1b65dbd1b18c2cfc71de7dd0913a98f52b25567eff38a120653582d18a069f40e2885d28fbbfd41ba2745cdd009e0e48fbaf79857441352bbec710a27e79500c6dba382957a91fbb71bca5fa2eb05af6d1c4368c936f43a1f9e7a4f2e913950f03dd06942372ee4f592dc80b273c467f549733f9802c8f8f94669e0147a18000771d71fb7729844e99b801df90fc90badf76434e324d3441687337b921dd3d8f4f0722e4a26a03d46b2a74054d3439455088e76c31c699a87783ee30ecc7365826207edda9fe97b3962567b64ac1dac3bb33ce86f831c2bdc7d99165ff2ac450a99bd34ce49d05ab253b6b938e459dac58eeb85caa8f7597beba853d89b0fdb201d173b2bb953b09552333505af9327a6654b9db445c5b38d0ca44ccd0145e76d387b8ab4af5241cf798a2e42e94dd5686da68f699eea7322ca219060b2d1da2a994b607d14f8d92ecb507a1653d1349517c0212d913de9988826da75343e3fe2270b171643cd4d03cb4f64b5794ab40e9af7c6f5ea53fc764e216c1c516b995352f2b1bc8327c7b8142e27c96601a78a5331bba91fab7ad50b8321d094d0dd8536b395e727dd816cb418bebd78c7141ba2077893574392ebe7719808ead7313266572cacd0a199ab3c1a7736bbff90911533c4955369bbb291ef9686c1151fb77a6399e80511957eef6f40efdae1c1c9fb5fbe423da347a93decf358a74668d67eb48e7ccfcce06ba8fe90dabf3f507a96cd141120f771352c2b1c5d43b11b7ace03d1b625f7973e2caa7d48dc86f0eff08c4bbe337a5622db7b9decb1abc60da5d501e86f37e26b0b1cd7610ef503f984731f62201ececa0b88a6af706c51522356921ced5e956ae3c0280036bb9d285ea0516377bf99758755c2c4ba04fa4ecfa56061339359cf092852cb3124f369737202fe2b9757f94d9865c02e1287d654ddb04b875eb9529b75c1a956239a02fb2c3a39158a16bf6546da2d3fa5b232cbb377563137648c8285af88fcd91debb686946024acbbb3af169cc9684608f102807f6dbf616be18300ea00a6042ef4165f36f248facb3cd50e5173194a77800acd61b201d3e6dea3cc1213a8faaa9e4fdb01e5960d00f31f60068736b7b1b1c57036c10d888aa58f458ea41fff53ef5f894ef6fecc32f6dec5d1ed20bfcf6cc71bb551133252f5cd2a4e7a57d59e84e61672992f9b692669b2430e0d0a76e92e9f8680a294b99bd1afb5e6574e9341cdbc2c96d71fe14853d47599b27e9db67a4e5ed712dd22324d542a6c37dded05021f16652397f20a0f92f1dfb311c824b80ed918cb921362a11e4c66adc33b2d2e06b2e2490f21f6e141f7263aff149e7527639975459d9046ab64e53a8e9724723d66d4c8df0f2c9ba32593c76c58a6d6edf215b4490425f1e8c202aba3632edf6b1d24290c453f3f34f930d3e8145bf8d21eb2db4b76c7d95dab06d5a650fefa80d91ccd1e7c499ee745d3da268a35613ee4d27d3a032bf120804ebe99a0b7dded54391ab57363fea65c9a539b333787fdcb52a9f8402fd7c87b4b136e45a37d569920d890e6403454973970d0b56e9c5c370b219f75b7f5278e4910ba7a4df97ec4a9d35116648d5b6955e554c6c639e55c0640562e605189900d9d871ba962614a616d3b1821c18bda07ee2630b775839b3493bc7c1ac139a6baf666a34c59f25d8d05a26da76ee7756df216294da2d978a21bd71afadb67a6997c270e632361942e8eae77fd4b51d071ad1fde0bcede7a6f2cedcec52709f7968d8ef2c6636746cd10d44d0b0192e8411af675399a22428be7fbc2519b8792f69d3df4dcfa24a421d99283e4db6a90f041f4e808e7f37a04db264182553169aacc151907a20549241a98051a5a4db60218256311fbd926a91754f6b54a8ae5a3752eb08b64bd83d682b5f7feb5a323f2975a038bf7b22753231fac952cd8c719196e48d2e1449b06019b51a6f5f9c1dbe68f136487c8988e199dcf79548dfab8fc91cc2844a8c68c9f709db270009a6f9056e91e4e60d36bb52109c622f26c509de240fc004410cc5c66f6bbe0cfa026bf5ae8ba3fa51532ac5275f009caeb1512e7e6f62fcf541c04a56183f582286f1efc004c65576516be8f1b7c21870e1c51c08416326bb80c34af0222d0e40bbc87f218e563f4de06b3675c5210fb4eab4f16062fa399c8c4109f3640559757d0308d5802c154c27d6e5ffd2507303bfe4804d9dca3316d6306b9f5e6596c6c033283b94b70251720744f2bdb132d950579992220df9a3620ffed00a26ca01d69ea089bc02822373b5b88a5b491287108c170d2e4f35cee5940b279543e4e17d3d12503c6454c8f07ad6010dcf60d37c30cdcfdaf5bf934a1921ba08049e8e92c04b4c44357755f024cb0935b930b46c7dff9c90d77b372b45c3689d9814d30292ceb004cc1e4d9b022ff4bb3491921cae4998298333c0c8d45883b2fe400ba0deed2a5971e85d71cc4f17600cfbdd37de551c4f891e5f167e4e00b90803b94cb7c4b673e5355a6c7f911125ef8dd68524fc0d466b4caf55b61b5ddf8da950431d38cec956a7ee7acd7b5ab2ad449a336ca35127781c39fba875d3d6eb3be2f830b096862fb0b47a7645daf2f830b113a1018d544721b1567f8d5db72ee5b7c748cdb2dcc74636ea2ff3c4cf2325851642a828e5c2759d62461d871188b6de395b500abba369806425a7e0c64cbe58b55ce7549aac7e61fe9283d6a32ad754ecbe9b3c595bd8f620e2f88c161bd35dfae0e4c5d63224dfed53fcb09d316db6e2178a73e0f88ca2dc04c6e9773aa3b60090b55288b21d78ec7a180b57e7feca9ba04043a19c9503a7d85c785fa123537f2d771fc1e9c495d37e445b9a8b0cfe3320630bff632dfb71143d9f1e11869993f05dd0dca0898625bd6084565125d9136ec605b9a0b0af941385ce30891c2a1699c42f508231703a08537b5d0ec81d8a221623429c4471e2b9c068a51c86d478769a1146b1e79223ade7b7ca464f52dd7e5cc16b54f8b90f72ce9e5a95a0452965eb2ad9a044bd64067c7dfd239f2c0575d7bc7178f32d98b2c55f45e0385dd2fcd64dfb8abaae1661caf4d52dc479bc2496205f80d04cebdcc55246e92fa13cb93159f35c8f5e5b4d875e8db266c21aa389c5e1f6502c45aea42383e52a371b07dc1e2715d2872732eed190184852cb3a3715cb752506475ac857ad66e87fe1870af34068ca3a367af3f36ee405d34b93928efdfef658ed390dff4c1349d2751e515d9e59c60e7958baf542a9aa227f96bede7da929e6d6f1bdd6a89aa67950fc52eac6da7d62d20b9393f831692320e9047b9a58e0ce27d558abcfa3745f17956262f57d145c0f9c51903f53938170032063e2b8ad50516e0e1710c12187f39ea33dcdb1e690dc770e56e36a8850ed72c9c7a1a99e224130d18886b335146c4b932c722a173f8b3bf60a2ec699f4792b88af02da448e9df718e7b6891ccf0661dcf7b40558c0818b1fa32cc413a11660a6661cb0d3485adb9f8c3e8e2a8260684afc0f462a1e34cbe0aa8e106af9b77de307dbc8bf64a4baea295a7737436a4492332815450622d08e69e020bfe6c778787d253dbe5a5f176cb094eb9969f13dd2024aefbec2737054eb18b07e3e0ccfc6e4c63f6a51bc332e4c42e82b16c7cd219e1bc54f4d58ea9aa682c72f4b9a53422be502773d712e5d88e100457294eaabb34f414610364840095a8c2e74864c9bb1e8e4145db60b9ca3a34e32d3d9d1b06d61686eb313c595eb117ea1e06a7dfa591a040da6afaa6c29f1c4e126703f33c4d72f54f4dc5fc1ae520d9a0f2b5c31d94ca9bc74ab934dab151413b9285ff79f0724f313095f78b883a1e22cf3313ce23bee7718665cea65e67a555eb4e6ed915bbdcc01860bed5d3b90f77f115f0f4f5ce2fb97ddfdc10068e9c65ec1a38f02b77773aab8dc5bf0dadb6a02f8e9138a9cc14354beda95252704edd71a5f25fef38caee266dd9b4f69e3fd7420cce0d05f5ed106e80f9789bb8f4efbc13ae8d8e90bca90f1ff7c80386eb8c4c873d07ee094ea930f684c6c58aa3fae05c0a07e69bd2e0876cf444cd64dcd92f1ce4a2b8e994056ce3bbdf7347a5d00619dcf711588799f0bfc0511ce11bdcb607a5b995d3a6fca90f8423f4030b05a4a0b7580a062b11416e210c5c5622516e44041b07405167888a0b034450b7a8030b05a0a2c74b02260bd9658e0604132160bb4cf9ed2a24a1e8387cd73e2bcf1d8ca036b8793c34229b290038584855272410e15066b5772a18305016b5358b80305175868d07e2bb935081824705c3e2f613cbceec4f3960cb077c848c02e8eabe03d7850b00ad997278520b2901995c8af2c47f2e0c0c928175f598ee0e103132c955060ffcbc2ab2af8cc7c2bc75be75ee14e29b46d437b4d5f680e110cac66f6f5b93088320423cd02b7ed516824fe48b8ba301f57fa431bab1fbc1a10beaa9c17094537cd37605b0c195df3deba4f1de1079b1c41b01eeb6f912360ff21a5360159e971c958375f77aef3c39a77767f28d882c412fe0273e9ea78e97322d35eab4e923b055306d2f20a7f331ee9b294a098a59d3bf9202eafd1f77b813e9e5c6e44b99b1f82df243621ccaf3bb527d65783f814813728a70d7ff8213fbd2a8a039a6d787934c7a0fa7c433cbcb97d34a8ccd6b131c4f7dce9f7b84e763b5fb5005f1a61b8dfadb791a373963b50faf3e40d59a703282f3704340a7b2128d2b91ade11d1c2475c8dddc338b3fded1bd8052edb8940fa31a7794a7cb44612e2eb2ebd0ec2f875b8a590bf4b7fbb7c2e9a9ddc4cc94c27a2a62d2f0b8b21f09292935daf2315e70b1fdb64874aa8ffc3525d4efa48b672e08da347a1692169b39ba3358f19cc418416398ec8fa8b32ffecdbac1e50b96bfe16f4e209841622cd840f54347350e6236c1daba2ba29c62b6d1a18ddb0d281be9e39189eb87261f43dcbd7a79ad72f76641a4c60a9f6c56e5e971c35be68d627a8324b0c6ff74decb23a33282c3d15bef82e7ae641f3544f464efc61c2425afba4526c1dcf4b822c774a20a7063398337adf1b74731545988707e557f7f56691d001b06a3b8187ceb5c421199c3d8b13b6df59c82819b10869c334ca1a4ff686e97734433245deb067117a727be30367d23188f007ccd24e1d91798b82fb6eb3c113083adf27bb74ba5804bb2800d211ed4822a4143c7e85aef10f19b4316fb7d1561b4c55e4f39f993fe5b65debc13058d7f8d158d99536a3b801dcc84fe68b09f6d735a572cfb437074037c64309dac628785743def21b9505602dc2baa9d3120a4893712f90da1cd7677846713ca6b9fa4db94e8e3f7266d7b0730f431b599dd9841063e6ef6769bb7d35edc7bf6566b1948c1a9b30d288ebdd1e4593904a63769719c85ff3db2e09e1cb1acffa8fb96bb7bd54239a99774e7e2cc24bd7d3de891ea2af279beb9d578a1e3f637ed72de02962746010a94542a056954ac852a9217e03427dc7a41dcb781e3862391d392da4bea294ee41392777a5a9be28deb28c6da727c8c54bf5fcf572fda941b0b7ef361c83cd353d613bc8dab28026818031502a0bd17a96b40514ec06011c0407253b4134b6f42f833fe6ea45fcb458d080136a2c3bf1021aaa8422a795db22abfbe888f4aca70ab4352b2eaf52b249877ad8243a76164a36e0d5832575888200ab41f7cd6754446c9f4b45f1e23b1672217afd1932a83a0b5880428d4899a783f6ab018898529d7c0ec05f8e72a4d0acb5a61d8d9a4a6286f8503fc0c7b018967d2c3f1025050611a84819e0e5528736c7a1ad385ffdce9332d576da99fa72822142f85575215b257c5211c0665c642749d16e8949147c370b979c97c49a1a6ebe85622466ef4e22368211b960e4643eb39e4f7273efd28da15c93ce2e6f9e8da48f9ca8a6c80de41b6b19ca0c76064f921126ab1b5e7ca40c41c6816812d80777a5721ed52c6412e8d1bb057389656c3769cec8ab4e64d29382de904164ea3c1631c9db1a298ef30532bd262097598db5a94db6e063d98cce17a1db06bd8db901ab7122ad4ac6a3eca7a42463840f6d3241d679848d3bfdc556740c4af3c3368dff54d5565b12bbc83ad425bf701c9c1b3ab061557457a8298c57abff242f889fe1db97d16eea4b849872cd6920440c396d78878f45637026601157551fc5598de794aae544887c5bb2dbda69b6ef4c0a3f26c930c8dcf004470fb265227877196ce82d0c9672d093626d9c0508146b5589858cfc69e5f7802ff53af9636abd9e873e005973762874e5dab069648068515939182ad93678fe205af4023f7e4d86c81cd68b8b38839333f7be815a5148cbeb40912120463f50949e8cd88bff7b1e23aaf47063a02099d738e9fcc8f19be19d8a05d3cfc2092306a36288a7b6c87fc13fb15a007c7a5723807ed8f3875676c72655ec28e544f085c95c33ab0b4e27f92ccc59c6059f20bce116fc756e88cb07d27f581e366d653e355300a5e5878597e6fbd91295292bf89bcfe670eb7c2768e0d7314db294a0791a460dc338123124813924762e523598e1a056a1b12a78b5116c3824f7b0851cf88b33ebff0415c5667e406d97a30f172b05cc6f09923c75fda1ee54b2cbeee5e816b960ccfc07fef47634ecec55d9ab93621a2290f6b56eb0386c5850dc4a66d8050b955614831dfc225e8275fcde5fc6f2d659047c76c3bca0164ee3c41a59db28c913b63ca6e8857d81a404c4ef92518fc226917ff84b42d1ca924ffdb3e7787db6bf4429b8b6290088b66e67376729f9bd05074cd4a4507021c7825c889e6da3e49c324fdbb0479e5b60303533d6061ac425ad336ec9827c59066e4be0d1cab0996f2c6993824e920445b6d25b6d70bf1f4514799cf59441f1573507a5e14c2d5996ea7cb94373b2e16141a74191d982b568d9d48eeef66b67761addf1deee9b6ffacbd172bb3c09b86318c5b0a3660c7103e64436879025a77938b4caf73ac424f0ec64dcf3985300b75c3aa6326e0efa2402758c10a890472e5e42213e8471fb28f980d5ee904fa5169b81087eddae0ba207bc4281c5d00281b9d2b2c02cb0082f3562f1c3adcd41069b7d1c0f76c36dcf50840ba75fdd1fa92f9813b362c5c377d8d85d4b62db9c0eb27abe95de1a9501961542750b63aaf3aaa91ac8da1fc4b487f8eb8cafe12e72c9f71397b137cc3b8450fb8b9582970e8b4e01002d854bd349306becb4edc2f06df708d4cf18f04f68fbef82752bab7bc8d75e56115554e30f384c98347f90a2984433b7031f1d6e01211e57d3c396ddffa1c99c42baa9a0cf2e6c790ef0d0c951b20d3e0048074270d70fd8cac60fa838e37f46083e603ba04a63b9242489830036d525d42e631b47282ff37d29c2297e094ebab49c95e8db64673a648948276fd2042e8e4a7b4a481f23b8ac45728f361d20f40cd03c7107ec057ef45b8865a1f3a818aac49c96049ba22c50425b31248bf141792fa6e21a42e1a17456a2ec95b9b148bf2da5236b31495ba0ecfcd1a91cb4c8b4b9af81b1305d031257e40dbae8db28ac4bb9a28e3542dd5ed8b0467b9244a786e85c7ebd4483ce4c3e35b60a3cbd8acec89a6bef44b72d539e3209101fcb28ec745a453f146b90733769bf96b9766f2751c3783639d7014977e60d3d2553bcf0276fab24c3277aa4a1d6237520fef0654080e8c40e7918eafc013cf8ad4f767cc278b0ca8c19029d844cccd841ee1bf3fa4e5aeb3f0c157c373bb03c7c3eb30b20efd62ed34c1a55a430685487bed8c631f164e1eb2491c3dd17898bfd3728ae7fe80bf22f9b24fcedc66c808d813ad1cd8b02e9e807ad2126ac4a05c04607763b740996be6ef94c0416300d70343b47b9d30adb4973de430653979821075227010cdbba100e46cfbb9df4932160987c30a8a2589df229bcd99cbd1b47d974c24196f7b2a1241fa358a7d4d201e15e4c3d052e88e6eaa778c4a31c3b7c058a89b3b8abc0b3c1d435ebde843d90ea4b78dee9a6703957e0e09d7a7a04395079094059f6922d56ad39b4a64e7423dcf3674f38c290b1b7d4c9a54015016c37039293fd2d7a721019ca5410f0d205f5f90230c7916ac16b6f7a467fd32ac07cad9bde3c65fc614194ce0bca06c4d16174b8513a7b20c9be20dae55c84b4b93ddfdcf8275939e77d7b353f0044f970120934144256698b865d265d6d3c24ccd7fac60d59559afdab11f3a0ece2a5897852cfe0af36db26f6d19834fba45f4532a8f0824c22e5a99752aeee04003888315899aaab9bc0cc7a742b06c250765f990e4e45aaebf0a4aa8da75854948e3f75c198ad2b927d964f08185e496f58fcd2ed53b4510df3458f80bb480ee038842028dff97b426095640c614f68c62c22953d52d2a16112a333500d0b26f50064ce6325854ca806bf76176e1809105c4c842d46ee2d159c1c16cf3e4ba8c1272f4b0f9bf66a6de99e7d048016fb81f59748868ed7ac9d2998ceee3b95a1a0aecd312d76318eb1beab073a5728e442004da4a08a89932bb73e19d22fabc5a035230868537160b48f31daa60a52848295f5376aef2bfcdb694e4e78d6ea143de79a4e32be80f8c9fb051bf23b6ce012e1b3955efb896c128e5339902f7850a425f5b39c0c47e5eb6777bb201f0e5f70128768ecbecc6c3430fbe950bb3a43e364c14b75309eb9f833d742e147c9f8fb99cd3121fcbf7f63b385751c0b48cf5ba85beea6bc7288f6b1c3d8ea3fbf093632c83cc08248f69677a696d08e16208645e580f56c4f29683e3a8f0636d6be20eadf1c909ab2ff26092b72de2edd60d2b2ffa34128594d6549873abfe7fc5446af924f73341dc7bb6701a344df6e4dfcd08b1cc43b8d4a50b5765aed4271a5e3b394d2b421419c5bd714f16392940e56c6f95840dcf7c57f18447d4322fa67fe3852b766ae6b18296f11cf16a9a2abc6c8df3c5ac3885edb6490076c8140377384d86584f3ddc74c323edee8a5690bf78458c7b3db23afdd2511465679181bac5504a8c8defc120155be93191fbf716c78004a8ccf0f505f3cb083c11ba8cb5bdc70ec951b53c13ef9a9ab9897c7be6cd8deba380593365046503845cdf9dbee18108ce31112ac9076892973fb98bab05db180a4dcf625aa5422814057b9d9886d1dcdc03871778571035c48248442602040c7e129a60ea0decca50b607921813304012f6f03702269eb1760e1c14fe5bb2f96f0abb0812a54c9268108a54d79d5c87c6c5254bf2698d1c2bc599afc1b6b527a38805a78f0e59b855444a1f1f31d16756e49b88f3e89a1baf2dcd2fb952bd5dd832b7ebf4d0ad7b61c79721e08beb8d66b21c0f1487d5abf68a49d140b61e9ee184944c727ceb67fcd0638698064d279333b6541803f52a905953420580c0482bbe8ea7cda262ce40aa223d10e2923e2bb51a6a6eee34b95a414647cb946c68f7388e87d0b55d2f5186e301be67719c2387ac1e18d7db8b85f09e59bd3411c1cb292d77ab8e976c4e2aa2a7e00b82e50e4956ea24a5297d9c8dd503028975b5a675b75f448bc25acbb5f35ad5839b5147ba1fee8267c1226326ee1f690ebd976494c996f84a4a8d171bea2d21f12d99044dad0cc1a18c9a28591033fb427fdfd375fce29bf32342040adb9367308f552c25935e33fea65c568cc2a818006fe1c34c4082c663afa62ffcfcc752f3eb9379c05962f53d605b35e6dce92cdd0ad5b849d50733b171402f25f75101676d6c1212cab899d35d5268f3e5660b177992198d784c2fd32da6fa643073f80fbc36f708c4c1facfa5ca6da45e66ed6d1716625df833b093ef9150468d446eadba73e997ea6bb9c698741212607eaadf046dcc7e69c2324362b16d99c7bf2ecab60d86042c60dd5a4b4f780c6022a6f3ff4677d0e9e9a5df32ab267cc8d6993efc337fae8693722ec05040a6d3cae7b48f4a89460b57836a9c2102150772309886507fd8255511a7c7cd3bd68506a2a71befef96bf06a7082a7e69f97a19063af0541f0744cb9fbd4b30f997f3ced07c494e47c6dc42cc38dc0ba5b34ab3090620dbbfb40cfbbacb45cde7e36bf2ad5ee8e5c33a53910202948acec0eb61a05e54bc11accc638b78a126dd99d2861111348289bfd9ff78599ec6b0d104aca220089154aa31a56fffae66e5a44b4f93af5b66a68ac48c42b7369757393b474a45fec3036d8a0718b26bc6015a248f6943d85a87ccd509bf41c6a18c520611a2a9be1f28b50bad5aaff0a33758e714d7b08cb5b47b8e1e44a938150534c272d530337a674a30152725dabdfefbb6bc462c88e2b8bf14cfa8119945b07bc0e0364900f7b66b0edd0ed61a803253a761db81a1ca0f7f569baa28493bcf3a8600c2892f6078f1825a3c758c7c71fbf05d9b3e71da4d4586bb54db65f4368e1ce8a298674c5c36c73ce69d5a691ceb5349b0d3fef6de03df33c1806eec22e19efea0176e38b1a912dbb2fd91d8a1d9af8fd25d2dae92b279db4c24d352ddac21bc3604eb484ba63c07a9e550f8568b80c49414460470f3488905e06ab680ed750751af431856a3e900296e4f4a29cad410b5cb3ab5f6b7f61660f8e4060b5b2ac977ec9b0d32f1a4401e287b74dea2f355dbdd52a1988a6576d7f1f4e6cb3d17f1c05504d40a8f56d76ccdfb91a87247db9a01aa11404452b4d58900ebc62afeb24271b10d73279590dd2fd0b13993c905fe3d8de43e8600a1ad24cf33cd18e53653c3868d24ae66fbd7648f184f60cae20cdf30519786207d0908f69b9e2a633cc9c80fdb9a55aba35a6fb621b636d5380885e8f6880de3a5708627ec7e2e0dc86b15a08847c1ed14344870a7b78ae67ab0964705691575b59080474fab4d40a0509a7347391215c139f8ae3908752cb99edbf88a3d00ba88b7ff1c2ec02ea16f01c222c84b6b946a7751842287e6410e8832f4b045929f27cbc089fa4cd7cae6cf3541dfcfa2a8d0ddcd34b741283096a466eae22d0fd67d640cdf962ba6f4438bea8b700f81f26d75387ad39f9e342a2c3038d9875c09e08a82a7acad643990f47aab59458698e398555fcd44a110f4eb25abcacac137471e1cd320554e67b99ea87ef67e685631348f76da230cd0db0d2ff31803083fdd8f634683402560260856bef7db15620480ba797d055759b5ae348c682c89b098a2b73c48d63a55643355e189040c879c88ba01e7e82f759a4e0841786820ebca0322abab56ed4932379d537d115a2da3711a4705e55885348194158b0484099e288d4ec8bb4c6a9adf85b88ae2582c657c53c655c94e9e63dd57df60de4ade03731406020c1162d3b07e3c2da2e0b4b6c25ce089be7f2369df3fa4d1d0523b59a0421ea265e5377a79b454bf441c04fd3d8f6ca840fb5921055b2f750bc38343eb4c662b8c9711714b0b702f401bf4796c385c2ed534645876f4974444d5a83cafd853555863e09a1e8d314b5083c275183038515e4feb7ecd44dd31828cc9591e6196240f792c4262e5bfb6e33ebcd136f9cb9c34a2a9118c917af4552706ea1e8c46b256c4f24f83fd9e35483f4c5ea687b321ce8670ca22374a63bdc5c75bfdd55bc3619d06681c2d1fdbcac129b0e89616776054394c29124b73f10f3facd409b46cfdeadef872c051c1061dc59f71c3c739233a35cdcea6611fe28c163e678d85cb16117d5b24ff8721a0f357b86e07032b052f668c997481c487e42547accae00694c1c90d8a25723ca36abce32ac1c80d7706634195b70dfafe4fcbb2b913eadff4c0c695c5f540261b06ce33a89418a391191f6c89ed4434a66e2465e8e1bf5ba596a5e412e8dd2a3a4f4da1cc8ebc48d079ea734c34b9c72ecaf3b1e700d27b71163dd13891ac50accbc68258cda02eccab09bce8d8f75f8496a5daf61ce0beabd8a9b0af4ee901317510f8fdb82743bbbd60a4844033b8bf7add0b5b6b040301180e9b26e2aa536c4c23eeda2fc8d312eb3b511f80206ea4ccc2f51bd5f62f8f7b7d98736b04b4640f02816e677952eebf67a0d9304e865dc805eb6b51596a219aae1d66f9a061ec1ef2d62009b0c05923e4807f3f1232343004c60621a64c4c894f9f3cfff4a798f25399c7e25b34f935e261f7c5fed408100a47872ff0e6f69c60a791dfc322b2792bb6f152a3ea773ad3ebe5e6f75db01f09c80ac86275920e709140061f8808aeb327fd32a9b931ae2d58d974ba739305ac1012e0b3847cb426060d3cc6bb035fcd306178a5ceaa5f6fa8e3e8babacdfc0fdd53a93a3dd3196fd6f96651de4ad40eaf1613952666c2187c0587c84a01453bc2675ec6e57f846a05dd4fcfd8706a9c44125f2de110d30a454417398fdbb97484177e0faeb345ee2bf95e635d39a7a592a489cce1d320279f79ff2a954cccfd5e5bb6d87f54c2ccd6ba1ec10ad159e8bfddf04d884955554860962bb70579cf179d7b9680fa2ea55eac6539be5ed08b83bd80b144312e2b762ac0b4c5ba73497abc46c6da135bf101a2861a9efa3159add399b3d9e5d3e4b33cc3f2108d9612c0981f606ef82c51de59a5d1b8961b8ecde313936080671e0591ef1c5a37e9dd174d670d1b20e2545e79b5781d18adabb987bc415f9d07faae348b9432782dbfa146eac22113385b38fbbbfb8da3045536a0199c073bca5c4d9754c0e46f81a2ac2648bfe53c9019fffa477a03816d358f1c6ca061c02017ed30a0e1ba0f2341c17f8e0171df78f65f39f7d15fa6ea37f6dd19f63135af21b119ab5d9e4328cde6a386374d697e97912bfb36605619f065e91888e36005033373e26311dd1714f569e83ca371d3f421c0ccfc6b0a141f80040200280920240df7e00102882277c79225bc7175c08214d5af9ad867ca706009497586206c8d431d89dda027de81a1f7ccb04489dfda79151a059fd6c68619ed0e4c449b627505979bf49cc8dc4d52a43fd959e35f821330ad0a1f5878385a1e9e16718f46f6c15791d2ccaaa00b40e7c9d12a3a21a799c99994e787d8aa6c6aac0cafced4f67f44f93f9542781b97fe493a52edd5be71cf1c0270fc6a7a7ad8c073ab32f90aa7d16505079cdce77921cf38f63f87d34da61f87bf7d836098dcb712bdded4b41d78583e8a78da82d1db7dc26318debdfa36763c1860ea82d17a795e5a28002362cad398b7934a34f4eb90b16849875b766728aa568f87594726750d65978b10ac6cd2fefc752ccaf25146ac0a48b71ac1182a9bd59eabad692a5acdd289740d5ed9ba661b1dc3b03bc460013162b4d5b1cde8a1926505f3cd9c06524c9af2ac1251c0d006761f61f70b03a36c3d5310ce6d1d678e7483abe82f9d73424b04b760092b20ef9af454e4addda7e0e57214bd960d240c2d1683a4e127041039073d042ec9dda52966105cd14242a3e0b4783bf6b705a2f888b8fd183b7c3cc3a84562494ec6ba640ea731025e2ae92b07b6ee32b0eedc4d3503407b6ee137edaf7fb3851aad025898319c6539fe2da717ddce7c0f4626563b907e32c7ea543d7c2f9125faafcabf8f227d811fe300cc2a41be00cbb68f231aa11fadc5dc1141f125135f230b237d843a02202a161b96d16b3811ed7cb93d11962a39e93e4354969e9ebd7bf5121c9a8ad8bb629a83f73148f5eb33d6d0c3140510dd1b91feb48f58dcb1c5fa1d9159864c3885c414382c345445d34d16be3a4a765f7fb5b4f21cde4d63c641548baed20b7b066200c691ea7b0cf525e31f6be8dea9e308f07289157a0dd0e9839d838a4df452fbd61983ffd5da5f46b95219649e2a33ccd20ce5cd0997b3ba6360cdbfa1327a4924292ecb1b5468470758b158e841c0257f1d589186941a98f41681caa8bf847bd4ab48adaae1da065fe08b53c75f44ac9704020d216c015cbc6be1e3cd53f19e5c2ae87373c73bd0cc39206df8ffb1f270d0aed453ab8c4fbb97742a63e71ebd191e7a163086a9306049145d7620f7db99b0978805065be1dfaee8d28c0e9ca66941bb0657a01d3b24456ce88beaeaf307ce9bb93d0413bbf764e0a0bd5393bdb317e87c42ccae587fb8d2507422f6c4d8ff5748efc258918f457591a12020072f8eee85d25f7a3d2bfba5cf2cdc6438e41a3e2ca009c498b53844e8d3fda4238ed15e498d18bb36ff5bc3019ce8cc5680305d4a9495c360a722de08e3f9b17a643d08f452acfb6e685d195654f2b1eef8f1ce3560117a609c146f615a2fe4c1c8a474c023d5b78aaf61e8984308385ce832cb19127eccca8716bbfb430d547a872fa0b48e8e2c4b73610a1cc17646033217af5d90a0bf90f9e8449900c83fa7816f9d790f543837838cc230cc30d1b3b72a569562ed80998536fa0895b1756fbc4df006326dac7d6e4f9f0cdda0953f6d39204df12cf2cd4e68b823640372282ebea6ae634238dea608bd0b3215ab28855d3580bf1925667e3afc61e9d3d406b9cd6fa8fff164052f7247ccbf4eb478e07ab0b206772547eb00001f4f3035a2167a3592090ba9a0e4a6b8fc3bb00821d8c3722e0fbe229a0a7d2823c1c5dc1ab87032778e72abc0176d86882bbb4b519414496a30a84e93ac732479bdf10cf968f37187bc966863fb56cafebff4dcb6da485b4bdf7de726f29659232a009c109d40aae398d75608cf3b0471611aa5ff1d676af3b199aca57afe502ce5fe61981569e2a66ccf37df82595aeaf91ead4af75aa0d2608543cefe9914e57dda4e7d53d67a33eaf5ff7ac28bfbfdd9c734e94774ee46dd88db2b6bdade7899fd65ec7cd7fecec58bb791eb7ee1d8e73cd3d2edc197f8c9ad7cd6b0ebf47166cfd8a72c61d79b34a1debf7d6b7ab2738e7bccd197fb4abe6fab66ad5a55f3a779468b3edbd0e90dfdd6eaf36bda6e2f9176622ff39a59ba3e09b7719ff055d82d686297c0f8a6d8319c4f30ef394f29edf30abf09ef7d0cf8a5f8fd37a27d61eabcfffacdd66c0357cfab5eb3ae7de0d3f4eab1e78eb1c18e3eafdc2b762addb114fe6e46df696fb2a0f4dd6602c748f937db5d3642dff38d14718032c93c95a80f9f0113ee9444dd6a3f5cfa77b148ccdae0be5cfce27e7b20cc6ac321306599665589069320dc957cfca7038659e674dc6f9fc3eff44134ea8b56e3dd48413b416a436039cda85d3a775ace388b9d5c2b24ccfdeb2c0045725409a53c7af297570248744f5389e352538defd3459bb38d75ae8c06dbf756da85df7089ec1db0e3c6b38bcd5883427ffc1674df6851b185be101fe9d38f688e3db0cbf4e1461725ec112887c07619e8fe333a7471cf7e837fbc3f1f975da0fa8c9b45513ecb9e6d62b8e67311699f8f0a676b5030101010101edd8b1433261f93281fb9cf3ca55eeb34d9d533016ba091384cdad6b400a996e7d03d2d541e59cc63be07ce3bc721cc7e18419c7370e83280f460f28aa721cc7d5ef7395f7b4076e393e37299b518e9cb0fa84f5c78331eca4d6b1ee811e6aca52d38705163af04a548baa515d529d542955a803efe91ada0a5481aa921a245631a7f07d3d5c02f8fb5ca5a42101525265391368d727e6ad84766131c787ccefc037b1870fb8a773c2fad32e25ee615b815641f8ba8ddfd47ae3f6baad59f236ee59037a4dc95b173f89f489287c3e643e7614ea8fcfd4b41f06f4286ede475da57594a6122e9c40134995e5889bc8025019a07655dbe46d1ecb67dc36759b6de242f71ee1083c78545193b973a26b322964ba5bd790c894444950be4ce04206c444b1270cab92204d76b18b15c8c6b32653ca15483bf2b363478df6b3c3a77362c6f195f7509c503e8f50fe4d88593b7484b2cc0cd2649aac6ab230d75f85aa70c87c2c96d0a375136c4a544289a0a8f4d94ec458cc3b33b1c7313ccd3d4a55a0af1caed1f887c3bd1cd47150a7a1741e05693e9750a9e292d6b1cf78f5a979de164e501461f3e9db08f2379fa008558521ed42b9e6d38b7cb5c8f0345e23f39acf79af066eee6d61ed7187eecc803e2795aacdfbb16c3e47763eadfdc19a9999991155309f25e6cd51d81c55addd50b83d941f8846a29191278d3e39d279348dbc29e904fa9d0d3b057d8a2a70946b5e02d137504385934a8f9aefd0d73c6a1dcdbdd5c2da34ea51f31513bce3d3add7294a9f5f669876d2ae3901aac3b481629db586702f991f7041485eeb1f1e3952975b8a82aa0861217ab004220fba94946e1a53bbf23432d27c52d17c6a5f5e73ef7e74b3af5dd734dfc4137ad47a9c3329c4a75d34e552a6664e08f3a4aa6ac4854a53964955da95271052bbf254f29a6b2a5c25ed5abd0a874c683ca5396a02a940fd3e8d78023701ea5d946a9c163cf7a4371d63d9ef790ace0212e4ab25b58c5abc97a597f75c5ecf2b23b74d49e9e5979756b2f8f2de046f8f33d7bfe236efbc5eff8a3906bf7957c5ea517369250ba5cf21bce73604cfe5f9089ed499ee7d9e98593f5b36d80d9c5bef794bd957f62d8113658fd72fd20852087dcf4b681775cfdbc4da9a9b7bce6ad775cf658ea7bde1c99cbc1dbdbd41f1d861bbc198bb7783e2c18ad9a6164bcc23f6dbba31ea567487a445f4e5c3adf70f7df910ed2c5f1dcf58479c511daa636753ca9b1b9f237de9b47cc6255db94e38a58e0f6e4cb27d339c4f8b78b8262382b2b396b50b25a66e7c8a2ab79a751e7e234ed16b9475afc7949b2f311e3ec31a1ea208d36ffc46ac28efa1a8e945ba44b79e6d186fc9b0f16ccfa8b156cc5b32281f3e6a9c87a3aa0af7d843d6fb6156cbc673acf66156cbc6b55b7b941bca51dd3f6c6a6a6a6ac41b1751b871d6ac5fe6b45fb5a951dd8cda86592d9beda34bf3e94c21e7068542b9ca270f478937cef29ea64b3d5a47dd8819255aa75c3c4a83c0791443967b3ceae43159218f1ca7a7aa4d8deac64728a501988cee23fc71d8e81e760367ca3429538f764e8f4acad42e144b0c41ca717a4d28e5a80aa51c2f580291bfb911658f284739eb83da8309ce55690ba6a74c4c4ea4952d666fbfcc9b7923eef43845ba454e5b694b0d554382966390e7a750356e673eed9aa24b29e2175d4ad15161ac46dce91125d22d3d5a2caf0abbb4b28593e64cedca63987665bae4449bda555b9eefcc2ae596d5630f57854c7cb818ce86cce721522e4b237dd51faa4367c48cadaf44eb43a45bda95abac7fe8abd5c2788237620fa73ea90af728e5ad33f1e1b27b316eb5dcc7b1ca86889072e3f35574438ffec665e39b1b94dff8d7aee95edbc5c36f7a3aec7183dba3b5aff1e5c329137d8de20583719c164d106cdc3a8d228518215d3ddcdea7c14fe3b9f5342ee56b933a374ee33d422ac71bb709a50c72e33c70fec6c71c7fe33ec21b9f375e79784fd784b9c66d3ab8c9717f2b5c347dcaa723fd747f2f853df0c0030fb40e3a700f7272341b158f9b9b9b0a4a20e537a20ae6f310f374140a36a2cf4d49bb7ab8f52da85f3edc7a0ebf6112431b1f3a4e3d5af7a083b0653d5aabaa2f8cd548e5411ed51bde7ae6a949de7adea9b2ea4295d9d854994d95d9800df0cfa9396e437bf4f09bb0f67873e3de2e94bf4c0ab13c44d9e34dcd0af351ae82fad35748fd1443cf76268114cab1f7340e1eeeba0963459b7036e58433ccf679bb5062b671540a05d187ccefe136620f1f30ed11522ee1e843a7cae84b47b463481debd63e058d637c8868bcb5b319c4da2f2410ebb9ce6edcdef88ddf78ad9fdf501e22a0bc870f38b794de8a28a07cc8fc94a340675ce49267cbf4d6c67b84f34b8f2dcffdd313028f92288a60df461c7bb437552655aa195f396562d950a69b10c7c3704798e7efe021dad90583a7e338e8d9ceec4c0a99cfd42e1cb76ebfb46bea68bd0e97adc3c3ead3e34f8fb6036737331ceb5546c6f429811b9f5e67ede2e1d6ed9265baf169e33761b511738dd784f277e0cf76d6b29e23cc1f8e30b768c2136c3376f6d657b93e0e87cc4f89ad0fc29da2e9166fdb11252236ac890402b4026205c40a08f0225131c0fb616154c1fb71e1c99c96215127ab4475a62b29cd664c734ef1a756a00fe3d4236d9240a8046afbf448eb8f156d52fbfc3cf5f6f96924edd24aa0febed393335650569155fef64859b75de23067d7be1e208032c8f49e93480e4f3590f1a50c26908c01cb334fa339eb0b9be1f384f2791695f179067dfb2c7d3b0b5288fc124cef122aacd798f2edc6df6e5222cc154d987e189a02cbf889001d91899245173048a101d63ced8373bd2ee08f4bf5f9e9d489be6a119d8ec1702d4162d2012d3262e2ad4d7aeb9ef363c7566942c953bf4288af316b048d826982c0998281737dee0b4c0304deba4c679d319d6608ac1283573354f9e92b24d3596470aed3594e38483afdbc768a799bf4c65befadb5d6da1a14f4d36b501502c2b9de24f84a8159ac2db227e21306df0de6134c4cb78d8a8a8a6812464646950a12927dd29ee60409e9b3c9d9ae242561a256911b51ca73a370578a204fe893791d144e4eb4e6eb25616b0496521c296a57fe903c75fa216957fe649fac5d3f7da9ce744b5f1f50cac8ecfab5d634b0f6ab25dc5e5b02696b451662009354a788c7c990038803ceb7d28a59a8478c8151318629aa6882d11b85438273fd9ae9328d34b42082c92735ac28c1a4df1b21d84d14181238df9fac27720a238a90c1e41530a99208f039da98a4a459c2f9cea65f247d5518a5b5d64a29a54568b705e224b556b356b3b6d65ae79c937bdca239f4b8019e64bce504d671394a29edeeee246ea5f47edd73ce595b522a29a5d4c234b7bea359211b387753f31ada9f09d3441a3c9993eb4f8de3446dfe24d1b10f058a85222d94998f23f9b2409dd8f2f1d94291393e5b28df9e568d5a2d8c9b7c4a396adeee69de9b675592bf4d9c735cc36a137d59200bd40464819aa64b70851813cf2d40619ec8420c609df774e6b2ce919f6e8168f763671b51aa5b76d3296bb5b581249e4f449fbfef3aa990d708f03a15abf4e538e7a4c1a97a295bebcbca1bb3a6b52d509dd3ce7e4a87820da097508499c9d94b28c410f114480aa147463aba601fe9ab0be3c6182c32d86c6201ea8a155200c9fa480644b56cb1a28a0c367d0ad1974c92c960b3dda002d442f4d546d35bd63faba41b96644df4d549494e4c4af4d5b3d94b583735fdf449344b405fd4a809842c518e60d34d80491805a23ab307771bfd04b2b3ba85d7d56a74db366c851356b0f8cdbf760de037f76ddb729ae763d974d9f2395e5a2903c68b2d6af082a5d79756ca28b59555162f15c2a4e1cc15b8dd862b2abaf10a0b96e29c1207b3e79cf36bf90a0b6e1a30d27b686fbeac276800fd3b834c6fc06a1279edae9a22d8bf1248871d4e568fb78b3480f5b2f3a4a6fa7aac3d4ad6eaa595325c6a5e5e31b265ce99adb763b93ac299f5b3e71ca2e8a994b329f5588725a05134512d987a2490a01e6513c94ee50024403d4ae93df73ea0656fc5117aa4def3a9211d37c104a6dad434143ace5bd0b9ea56ceb59a2b4ea013e55b401ec1a415f3cecb59c40de1c99c8c7f08f0cd743e2ce3454254557171b83178b0d0a83868a2e039596fe0e91df77db5d4c9f2625bf25afb6a359a1dac1dbc7a0ffc5029568d9c416e1ee73d6c673e2f38df2f0be66a53e71e7c6fcef980f9f3b99fe25525e17c2dfd2a0ee0bd1bbed77d3354d9f7be6f88056da514047b4a8ef58465f79c7d8e7bafc394cb146b48c8757adf9c29b4aad57e93f7bed771120459f05202914efb3a35fecb049eab25b09c4be634d2658a29ed9a330bcad6a673d24dd3a20ccd6673ce2237340d088d8a396717271e8abbd588e84a491b7561f32333298501ac87e69cb8262e4c8f9a8812929eb926291bd5b03b01fae29aeec549568ed6b5b0b926fae2a48e0d5bb2efa66f173b50a79c54d69eb45619a29a369fd994c2d0b40b5aa5a8f61e21e7d4364aefc5b8d5721f4715151bea6bbb346fd6497fa3f3d32c2a1399f3723fb29cd699b3199e79ab3567d669756a9deb282da2f372e0d51a04b5f403ab0029a55c5039c8906eabdc64adb01a7ef806580aa9a4c0d2430b648bda02b56b4e60e92da577426a7832e7b26e91cbcd64913446d2099f172ebb7b319e413ea4ce9fc6a0712fc6dee395e2791d98dae13a6fce3eafe3ae0a0b28b67ae4c468a15293c928d32193c95e90af7bc539c4ff30759835c8e07d29f3edb27d907c3b9814cfce00461d0f75dc3bc5dc377492ce731b79cff37cfacff34403bcf7c3d86bb53a776e9cb29d9da7818267124819dcfda52f4c25139c42ad66bc98138c9be433929b499d31e48bf31727e71839d1b8efac2ef0f4ec1f0a447d1eaae350774369165551b46701503805c61ac7174f4a9ff40524d8b730ad653f3d22a140c3ae68555360e90dabe10936b7b2b6b22aab0f69fdf5964cf62d2d09e15bf7b42927456da29440aaed69abb5324401c9a5af6f9de8d1b757f7b44faeccc0216051f7c49c1870ce413281bec61e81eebcb06c7d314158fabad3b29139638720a753f8c08a9b0df004ab5bb001f3b515c4e0e745157aec09c27c2a73a89db55a73ced1fb521d25b077c3a8b7f03d9dded9c0f2732b962381708167fbe079b26badd652960b98f39c734df08fd61c1adedad3d87b3aa75d2807fdf3ba9477cb06f4d5aaae5cae1cb0f29eee52989589bcca3dfae108592e41957b54ac19413ef506c8a7620d8da3405da3a9751566fc2b6785793ecb694249fb6359d60cf68a7d1566151e7b0f5585b8471952d7422ab2f65887502bfef85ed64e0a9c3ff8f60f1860019e106a0955b49d109eccc9a9a2edfb2e087ea8540ac4df55a9524b292fa9d9a76630b9fc74d91dd10ea9c342bba44ea9e6d85ccd7c33b576429da705b68944602d262e38c1ae68856c10d5e92d2402d360c03945249752433d36ada1d406f58b6b12729222c2f26d87be2d157b6491ac2ba7869c74cd9dd0bb7227d4d177d16f39ce1d33f8e99f74559f73d2f8fca441f2d3a7cf1d403fab745197f549d3c4cfe93b98264bc993261aeee2148ebba55039be1b360dd6e04209b6853661c0bcd677c34e82e20b2798a7e3bbe1006c6043b6e3bbe107537610826da1847935dfc6c20b826057bc54c7e6bbdfe6cdac6ebe2d2402f33cd01281799d1676414bbebd7190633b53d33c2a09e806492022877483a4103b6512c80a8cd5397fe884baa1d669171a0a8104d27289da212d045288fcac0d92610f58a318f3f09854916106dbc29a22604502b832e790946c17c7755ded681fe139403e95d75a2ebc3e5d52df42222f35ea967a0fada96fbe04671694669e11e8eb6b9e49e9ac736c1d4a7dce397b7adce9970a94eb6cb779e75e9889bc576badd5af57bf0e3ae7447e4efc6d5fe7b3732dcc2c7ce73dd4ebba5bab73e2b853ada5b5d6b1e69d70a49556bfde56fb1d5be92d12f4b5485271e707538a652a88596ef9985ec39aa60a7bd6af0fb48e75cd8609c27cad067d1f08410952d0dc02edfadc3a03fa85dd7eaf290ba15ff3873a7d617102511deb188b9585eb1e0d59f09b0f71807cea7d0e8699887b538441d15fcfd451298ec873e110fb29b1da30837c8e0a7327fde7dbe73d14fcc46fcae84b7ab30be77bbd3d6a200db2f933b2bf150609420d9241a6cb1c8cbcecc0c7088a0c4328312981491baadc9084448733bac0f214aa620333828470420664c8797482242f1871831f6a304a029667d2b3f04445941bac74896209589e4a532416926e21ab14e957ba942dc9f3d277e408d23f207dfa4821f5a509781e05674105e926b48b6af1d27ba48fd2b12c92c96435c8304732990c897439c4dbceadb77c87b7ee79fcf1f6839ea4b7d762915b3e60c532c92fee24c45b1cf607090ecf53c914b2f2760ebd2572f2764ab176569958deb6acf5390b43c3db251d9e27d39719a66561ded2d8fe41a264c95b6f21283a3ef7d05bdb4ede4a796bbd8f7278fbb9abe446c2f2b6b7f46c8db728ebb93bccdb76fa725480573909604cc5d4c4af56abd50ac757ab2f527ef5ad8c58d9f86aa55ab95cad7cd5060e9c8882892ec818b372e2c409105a7a38b2058995ab58afb279d58f313e7ff0aa2d5ec5c5abfc9231e5556508bdca8c23af52f98e19595ee5238031158f8d8d8d8d4b262cdec61b00c66c70588f63f3384f3c0e8e18621e670c2f8f234694c77111c0184e0c8cad6ed458fa1b670018bbb938be26cad7a8bca666e535355e903166062e5e5889620b58cd54238991262d638e5ca106155fe32bd6afb2cdafd238fad56a95c618bf5263e857be0030b672954aa552390c8ca91e8cd588f1e23fffbecf737eb4cbc63fdf614387ff707c45dfe7277c37dff77d5f8d7f1f8feffbbe0fc7bfcfbfeffbbeef63238d7777ef01637e71707070705c01600c87071b509e8727008cf1b835353535358e00207f03e66f3c043076a352a9542a954aa5523908604c65c5db8899e16d5c0818b3b9956eb11273e4577e0030b6e201635f18265f2b94afee393fc240f95a8b4c68d7caab9f2097c2207dad2a254bbe7af93a9db86a8d579f58e696af5cbe963942060b143460e9426691bd01c30c435869830a8cc8cf91197c9106132f2015c1b24462e9500485173253a80cc1b23c92559967d157afe1e26b6a6abc55e32f3056e32a6fa954619c7895bbc0986ab55aad56abd56ab5720380b155ce7f3c35ccd07f7ebf303dfce71f80b1af0060accefc77aca1c6ef700280b11d3a74e8d0a1c37774e8f0305ec7949dff7c0060ecbbdb1a447cf51d30563d0818d3c1d3f2e2e85b2e0030d6ea420a8db76be528cff981f2e2c9a35045a0548e427d2814ca3f70c51723311cf142880825d3e842250c12228ec09205e5afcfac2e923ce8828dff1c0818fb5a2a95b7547e555d44f12aff01c654ee44ea87fcc0ca57bf2e7c755ce5abb77cb4d285ec2b9725be7a00c058e5915a0c71431128b844a961cc8a885f9df1c5144bda68120a0307d88a4b12bf720080b195eb8031548e9993cfe12318cb7159de625567b158bec3f2cbdae1595e98f11f01fe731f60ecf3008c55ef008cb1787064f1383c078ce1b8ac9f79f233339e3333e33bfd9a403299ec086ce68717cc989521660c1b60335a8c82a490624411266019ff8ccb277e466af19965f3f5470e41e7b3ac72460d3bce78f2d55b608a7c750793c5571f85f8ea3b6844f1d57b9a72f8ea3dc05845eaccf3dfe7324ba51c4e44d080c549163328f2f39dff5c7edfe7e43f7723ff79cf91ffc2e880c49536c83879c202f69dd1c27f2e82b16f1682b1191a30c8781a773046e3858ba7a9a7433c75cfa1be43bff0798aa2730ca5fe0115a55f90f1748692a12ba7339ee712a22d9e3a792ac4e789d4aeead42716caf23cb73c551a40114dac70f1a4882d5a60b406a52c57e45006cc124ec032965306a4c90a19182423ac48817951450ba1209af890052c4f23306078965796e38031566d226b05a385afb53a0f3056abf8992f72f819bf0163334af8500324dc001a028827b08c7fb56af22b3396c6a8024b0c5ed4e802b6fa82865fb90d185bed789597325ee535604c753f9799f5df57f3df376be33f2f48ffcdbcf8cf7780b10f3f8a7b94d3a3fcd2570086d8e8a2240a192ce1039b61f128d7e12d304667b80cd063cf01c630992a0f8293060f8220ca413007353c38035622d04d00fd0490822ec11c3c3da8022b13f0c2409f41a0cb3c85884c5922090d969c601ae20d18e845063e7431c6491642b08c1f9481794187a5229834c10496e5112acc0f58e040e9c91169802e68f265c90f42489cfc00baa4af00741163f4f4440d2bba007d4706f1b5d61c54f1d571b49af8cceaf2d946878c98a76d1cf114cb53a70163d4bfeffbfc731618fb7a3c8a4c0f8ff21930868a8112e9534e577cca55602c75c1bcb7bd17c47b30cf47cf777864f05e089e9b7002e879ae8295f776f07c02b54b8987f2a6d07b6480926278328214260bcc2b23c30e425c0145861e60191f49a7f7ac38e9f028946330869264ae50a2063146639079025681f8eab77a11868e07c53ce828300612a15286873596ba7029c20936f43b9230b9e1872f6080a10618fda2ccfb37468afffc03631f18f304f09d4b37bef30e8c75177cce5bedaa3f3ce73efed8e19c478d109e83f226d0d78571cf719c5ffae27152c68c2e4a181515c1b8304ed020071e7c68c18a1d6032cba3e7241213614cf1d56bbb7c7c75ee46f19995431d8b79baa4e5a9df18d7f431bba447ea23649edf7c5a31051e29d4e3ac414ae04a8355a5c18a009f57356855835679b55a2dad5647dae75592cf2bd9f47975e4f30a4989234e5a34518394187a955742df2ba20cb45143194a487c710325b0bc3a32620a19d9186060f102cb2b312a312a9dcf2a27954aa5ca2aa6efdbaec2d2afeaa3daf2edaa2b2a1a3eab2693cfaa1e3eab905860d43484041a4b68b102cb2a1e25cad0d045173184aac0b22aab84be55420c2d51250c27b4e882042cab8cbe55475eb0173c7ec64b780987f9764c0596f219cb373e63233e63a46fc749780be682976040465cb81206c992256019bb8ee84209175dc46872029671c642df3863a36f3c450699f2f49dca29a6ef14354aa5b8a496be3d85a55f34a975a6b7a7aef83ea7728a87cfa99c42caa91982948cc40c214142039653a99c324ac1922a8a986a785a4207584ed11d50740754f81945855054084585504edf8ef2829a427c46fd7c4615a150285446fd7ca3866a28f2451644450f38806594d0378a1e01e911d03f831409f805c94fcf60986f0765a00f199fc1221004c10c0a7d8344626410314fdf4ead333d7f5fbebf353e99c6e76ffa7cfe66f0f9fbbe6ff63181c1431351a87439c30d58fe7ebebffc097d7ff933fafe8eb2c820599ebebd248fe9dbeb24cfe3e261e9572fb5b7e5db3dd91b5e93cf1e119fbdd9670f297b41404368a1618d1cc8b2c0b2973da16f2f7b46dfded1946e4ad7fadc1975469d51d719e9baaeebba6e07196487a76f4e8813e284384e06f533e71354c4711c37fb86e1baf1303c7ddfbef75e1aee0d9f2f189f2f129fefbdb37c7fac88210743376021032260f95ea2efa122486ab860c50917b07c8d6270e1a88a29d45842062cdfa3336490339ebeb7a6ad696bda9cbe7dc3619b417cdea4199fb7213e6fdbb6e5ede77b038a011136a8c187256568f981e54de87bcb9b91511833a254b1a288953260793bba42bb42d39434254d49d384e83e6b9aa669daec897d62bdcfb6c816d9226badad5245667d8ef86cad259a30c820b3270c3fbb96993f95e9a7d6caa52e7d7bc5d2afb924d72ddf5e6557be73f5c9354806317cae483e7c11439227597061052cd79fef0ae4c2d3122764084262062860958886369e7491c61145389002ab62cc0c47302591e4852cb05c8f5240c53c65ca02da44653e414594d219159f2913fd020119c40d99e5a91b969b4b63e957087a8b017e82600019647a9e6e7cf3b43717df9fdba7831ae81b06323b160787b58ec10778a0de8b71ab3537279d42f1f8703c0ef86dad83cb6c5a2d0e8d6667d4f1b0a503ab9a0592887c75de89b3c8a99827131e6e48826a7156349b45334f5480a557aa92341204ebf26f18820fcc529860096e688109249d6042f7943042083c3564418ff7a9bf40baa838a4471528a5b7a7ec0eb5d53a13524ed257373271aad3a49b38be7b797674421dac1458dcdd348b43e725eabbbb69b6e29048473c79d474a8ea148b8a7c7c9eb3a2f6168c8e1cfd0c26120edf425988e03d15592081b43b4d0e8ca1beafedfa54429d04c251a6e3faaa9c6c55cb524a29a594524a0effec26a5b4fb5a4d3aa54dabd534b9c94d6e72939bd4a4ada0bd5ce7e9a03eaf4ecca695521a84d5b6dbdee898bad4a9d425a99c9fac4d34afbbdb5f2adb53b5b0c417a75050e9504d9942c9f7561e0acc81a543d45a6b9dad16c6d28ad95a6ba7b5d65a2b42b5a20b6c10563ea1bda54dbde9cfcf3dc6e8a64e29ed6e9fb52705a2a86eb789192443fa631c00b8c2fc9d1d6dbb07005798cf2386bb9d57b534413483b61a5630f65168e1f19a107d794452a7fd5e8c85fe096b1105911015534a5f10e990405a5f4fe95554156da59cf739211222121aea97e784e80bae44d587af8863a25e6eabb572439748d3aaf57343f5524a2bf5aa795aad5ad5aad68303db52d3b730d0aa38e79c738aa1183090568dc26f276f5a6aa3694deb64611ace2eecd7442daca0f64d3a289aa7699a56692a89263f9ad10c5739e5565154b476bb120ace9accfb917948bc1fefe701ac17c25cd26c5aad5f4dd65aeba4b5d65a899e8be2c955cd0438976f8196c1ba9e7914ec76439f223c304edcfc7a0fbda1165ee7c22ef4297261d77f78609c7bb55a8d7eadab8e03356fd3a8773f09e342cd2f0d57687df74d5002dba320b5c2f65444c16e9ab76073bc614df3c231f0744ba4f6d644db6af77dde6dfe795fe77d1cf7b33201feab82fbf77edff711f51537f7baadca64b21ac66d2e0acf6a3389cc9379324fd65346376fab7793636d323bae89d4421e3f659a97b6295995a410b749542d5e6a3fdd5167d421f5d8de4d61445f5d1252bbbad914d2d581318d26e0e339e71d765ee4c2bc8ea99bb5ab73eac090ae2e07e1342275dabb7026910368ef98e86b67caba1c48d77ca1639a4aa60ddf3ee7cf0e7d7937c824d24bf2edf1f0edf5697a3f14b432197d79b2eac9a6ac5d9eacc7fa06fe3ccf6712f9f2bc7d1af13421362a5e4fa1b4f73aeedecfabe2b58ef347c13abd29289eac53d9e36e25c13ac5b24e8b37e7ff4820d4d62a6dad545aafb536a07ac5f1745299e3a9d8493dda2d56a3b5e5e30e0f1228428ea7a26d0a3384b4642ce34249dbd0156a92401a5731444e3610c9d9281c5fa9bd169800511291937ed1212126fcb58ab422e80fa594524a6d108e9f74db28a5500871160d6eb6bafe48211473692df997718727c757d1ce7ab44bad8407c98ee63396f1305f80807a6c2595822434bd4c333704511c3fc1586dd51c0ce8d182be97f48b2aa14060806a8b53d25ebae3588c53f56ef4b66bca91aa9e4c0d65bdd6fa445a51de76d5b1c7990a82e829ed92acd5b4ed72db7dc207cea98aeffad44e5686333da23aa06d01d3a31ebbbe8133e5388e13c24eee6e42d0b661c342b7cb6d5749887b6abaf3a84eb15615be72de2ea58ee65d398ee39a50716ecfddad49d0769308a1c7991c70e6f9a63f3d3ab50b07e7452eacf38c7fb4248d8baa21511de9d2947ad4c6489d762ed49ee400da3524fad26654a7bdb5a61eb9902e6d0dcdd3c6480ac5373d924fc8d7a6a4f32694e914df4a3ee851c94e370b90379fadc8b76fb23640d32ca44e3fc99453537b31fb3e3a22c19d68b77a6b02fc5a137db5d4b156054f9bdad572b4de5da83dc9d718f972aad32d8fb31baa8ab30b7f2e8c13893c7ac40374039e9ee9d15684c54eb7965609d4d05a2b64b5af9328a594523ac35a654229b5d5bd1d3da8604a2b15eb50b5343564c578322753a0efdb6934cf810fa0aef9d5ee262f9571e1b2b4f46576999f62cf34db49edc2612b05aa4f9ea43c74736a3fe871e6b48b32f97cfa8feb93ebbcce1351e8bc76e28f1d2e0fa92f5ba7d63076c4d323ddf95ae6d059ab76ad6356b8827c7a7a7ae3ababa0fe1551d844d0dc829bf843dce971ce1c7ca36c3102223750a20a2565b4604450935a05182ede68034b1958c86861461211464c68204619546c408d2b4b1871449719d090a34b154e599e00c38a922c537650020d32a6f039a30809a6d308b48c4d92d278428d21a236b0b0d0a5880e59b6d4c0098b1108118416306c20f1e4f3c21420a892440e3a1cd1258619a638a306305811050e5dbea8521421838b37c448a282a549137106155a64b0c14b17522061c486293dfc60858731b04461021ab64c41220a1c94b8300489a7309c4872440c512a12ea061db4300289a21d86461084103d249948d0452558a206295e80ca54114412287650220a9331538049625602ca850444dc600a15a02d455edeb8b20366498a2c080a258848b08217605a50624c0f489ca856522d8011c3125d8a08228911c83370808030a3081fac8011a60a91236180d1428c2e46907e20010696a0d480072c42a041a53ea105b14412d2154cf040c50888467000e95204ed840492098aeee1a7cbe9777a0b8b58111ab428356da14110d5898fc00f3f465cc001104f52f440f1e488238a1083861bc0a6b7ee11027c5fe87c49e335128942bc84abb4e074b7b48ec3833a15bb698ca05925f168649d15787a7777b3b2c0d3bbbbbb93c1bb3160e9de6ca51fd228598624e3bdd47e29e6157628c132092cfdca8f931fd22fadff1489bc0549e8cf177839c3506505966e432def75de07a25278d36cadb46713342d60e921a594524aa978a9cea452632981b6a250db03c2af4e1e17b8bebcf25344c918578cb4f1794c4ac3c347be89b16d5bddaa6b229316abcb1eb5276aad95fa7c265464210631e8ee31530ab1ff06e65e5e3182e4a5905bad94519a52c836bdb6cb2b459aa614527b64c1530aa115906b44513a430c19a038f1054c4a1d29a47b64c1530a993db2607ae59d77bbb7ab762d0a9559f8761b78d4a91878beb4c2c5e83f252cdd7b630c972db6262c545e74c1378b2e30288517587aeae595224a7cbe345ce02b45a6f415de3ca2aa5e5e29326446edd9b56bad52a7bd2211ea51e6b4cbfea0b56bcd914d5508d3dd4d810e55e8714a2729354dd33a05d64b294a287ee4509752cacb72ea529453f0dca9c12bb264ce090393ec9e934a4afb004d577cc2b0baa90c180fe8ca0b495760f051d13e82ca2bbd25951288d604cd12f84e6f8595150596be61819bc02c29300b09e7f17fb4e49dde61093d4aff7e79c5a7c9b38e3095914104be57ccc01b15b505fc5d21f3526578a3010bacc2c18c4e63961143917b6f1b583bfae00abe5786c01b1541e0ef8a0e035f2f530ddc91d157b8cca5c9066d03afa4341bf85ea14b2dc4f7f2ca8f0d57bcdeaad5e8f6f2ca8f0f9f731a8c9784bb5a8de27b6fbb81b5ffa0057cafacf144059d017f2fad3c5d417180ef4b2b4f5edec056603a03bcd1409bc02a1ca8c0f7cab401e63e633138f5940cb6699de9b37b46c02dbf62048dcf6352118f3b8f1fdd16cf45fafab3bf7e5b4d34a2d9a884acf7a44d0d11d98c040002001315002028140c080443c150308b5355ec3d140010789248665e1d89a45914c428658c31c6184200000090191920198940007f6f21895ecbcc46d3cf5b489557de69cbc3c44ad1b182b1cc51440e66d7a51017bb7d4008e6f5bd9baae9779099aa35f75dec4e4e1f88f1129378c1d661e18794e0aa3716674eeb7ce1fbf420c255e390ebec55538dc8c55b5d42c3138767dd2e1b65898525a84df9d8e71f095cc6c92e12396c2179d3172c142c0e2b5a4c952527f29231308e9bcc08cbcd3acee9261487cfd2da56434859f0b7084b43ed82b067bb92e50e80ba1fc25a08db83fa34a443bcdbf84081cdc07908ff89902a9dabdf0f912c11ac1eb4ead06193d2bb9943078056852f230925aaea927d05c1e5cd49abe74fc4bb7661926a188b0fe3a2b2a85d0c66ad9e5f9bc8d235b936a0e0ee4f316afdf9c2c25374393a83220c5e81670b8a852759729dc765b675b31034e26d190bce86944cd438fe9f9df823f536bba2957096cbed4358955bfa494eb666d8260bc8f0003490b9f2e796ced3e71e22cc535b9b6144d67fe1b40cea680e05b6fc4a30df386b02001d86cc1de11d1a9fa33315fe5ffbd0f2c2bf445c75ecedac5aa9d3ff374b1ac1f2a1ebfe156002f2965ee02a0c8be3e6ed68d5af4c169714ba2bacdf9c0e325ae86c14c3168c1f6206f32c9db222a6488a870cb99fceb5938d9cf23875427521f45d171e5ad23e80ea31f928050c7e690736ae7089dbe3ee93f6322e77f63c5a20220308c830542fb46d6e441da7515208935e7b50ef28105505a07d3cd9ccc287aa676070c7055c8f9b2fc2879101872a6e690fd703cd00017ae63cc096c2a7f26fe00d9932296795db71e38efac4cbad590f81d2dfed8a51ec4c4e1d5b2193baaf2601113303fb196c139517c2ca32709b152f447b43235691b2e38110ee432a4771d4061842d81f4339e78c760dcc45b71ede2e632730441abbf0b50fd55ae757ce9c23b29e40d461846b498de0b46acf6ba5a8f27afab7a27a3a34d86c2d5d3b4621fc080474d9c54f3c4df308cf50283ba00f8f4cf585dad841e44ba429ba871d09f906fc5c4fbc79c5647c6981627ca96bbbc7ec250b22adfa6df9ecfcaf09c3dc11984da08c7b8b2ddf4627fd17b4d4d6185f03c93aac012a7feb8ef002bc1673b16183a0e79652df7531c9cb9901ae3d7653a988928d3eb4c28a51a011255803b382132041337be2bab5c52f06b5a63877985715284a76c0001d3e79fcee073f40f3ad01b71ce584ef08271e71b8414951f41db5418c067fc2e16fda60c917963ea8a4e3c065660b556f9bb32b08b25e187271ffef16bdd7befd0e04fb217978097553a77004b0043fcc044652e0debdbfc4f00ff10f8bb8c821b628c0a74a0e094da19e4a5cccb51bede4ae92ace4bc4c5ec793b71f53e5129afded961aa7528fd593d81182b5ee66db7331d14bf3b1a58c94f53728325419020e94c90049671b05c8ab379f88acc53840ce62fa2822a4048a6357d6d81913b072349e876f12589b11645f50f2b324697409ed474229a779bec5550490e3a30fabef7cfedf8642ecbfa46b4c87c5e8afd80204d9c4a974af1aac43f0f73a28e821dbd187a82e34b23f29467030dccf8ae60d7dc1f9a39b1b4927934955886366cbbe19d547c2b3765795ce27be71fd59b4e04a16fce5a1fdebd10fcf40dae713eaaa1205832b2a06134153fa9c26d6e64a37b3d5d4bcd460794cac36430bc80a51a85ac087655e798ec58fcec801ded5efb37fd91a608e969bad9facff42ebc12066c65d362008e54800a0d970f6d8291c1102650b25fbf454fc610e7b4760dde2d0ac4306a626cc8fb2b998b82040f88824488a2f7211f07938c6e20f860bc9d50aa0b9753587ba30975d3770150a7c97ac74bb52a75125244d4795632cc03e4950b59623518e99c1580fc44908e60bcbbb4e54dcf513a4690758295400c0c3fc5f0be2612cbf054e713efe3092167fa5f8ab65e07dc861426359d18d1723a88b447c7849f35483814d0b992ecb78b29d6407d049dbe96bcb1a4551170895cc2888148da33dc313081e084132bb03fb0155ec472a94ba3c52740aff10eab23c14cfcef3843614ec532b3acb79e57a328c41aa1c395b400657492ae3d28a929e90cb589b25ba09dc8bf0ca9e9236117c5f01a71e245fc22c2b704004368c01deaf1eb2f97d2345c3fd2e4d61418d0cf4fe577cc12d43e921cda1f1a3abc5fc6fcf89a40ab11a308a6d53d993a330c0a19c5311d6a845c151deca1690200a6d2c82a833ffd8fc86243f7a7d3f54209a905328c8a42a2ee9f147fd15fc7be772907526c06961e38a360fc2dcfd62c1850c5487db3a56890e5b835452d75bbc717e673700a4a03ec801fc063478ceb014fdd4c9c3cb6c3c42e9ad5b4a5ced7cfb46bf0441ea437ea456dc03021589bebdbc9942f62674fdc842ed4a0071bc2a5da5bc457af6632ad3c6a000a6a7cd38419c855aa6d8d97d5d155a434b5e83bca7ad5055a0bbfdcfa5b3e51c4c22480285caf9bd82881a4c625d78b4a1c3ee03c9fee7d3011552cc25844585ff9065421430804361b2e4bbcff5bad04e1a85a0053bf0a9f226ae26f6222451e744df2d117b960fa517d3a861d7fdf44db5ea4b7e02f27acaeb3a4a97f12103859a0160e1698454e4556aeb6ec102246c36d394ba5e1e1f9d83416bdb1eda6ef0105de8512d71e34b2fc303a162e9bfb0f960bca02707db3ca4d0477af8ddaeded5d3d6dd451736a3fa097ab5c7047f126fdbec93e216968558f222f5e2742d91b3567e71e54e8cb51ef450ec9beb74f40e2e9b7c100795c862c1ce65fb39ac481262ce35f1b074e64510c78f998e05f4277c8ad1e817c03a5d4a04d45071f076b8559eb9a928e68d55ec24cccf3501691b3760d1d779e1830ef3ebd1483195b9e95847621b0d78f6132db6a23c21201e4a664b47c64ef420eaf545cf23fab388a015ab3c0c4383034ff00891cf6431310d2383351241304404b33a357069125338109ceebb1afa9255ba992c8dcaf7ece03e61ea810f181768f9962c17d5bd94dfc832566efbc263b87dc421a029a919fb39feb3e10241a2c6cd427d85a9bc293fd1dbfd5ac62bfe283f333ebdc0eada35c257a779676d0da8e09435e7920b811054d8db02a02dc8d86cc9aabc9f107b48bbb4ba82eb1d68b0dd36a663878e4c1e59a5b261892035b71bbf7247061441f19b622b1b67cf5191e2670b8e25b5a391ac4f709e2a21285dbde21598243bb5dca17fb75925f41b61e935790ad946776e2719aa1f6f4aacd5f233181ffefb4b7501572e03e3c37579a93d18ff35b623dca8e263455c42196473c77415ada3dfa44e67a7ede8bdd028049b443549c8d69213b2121f18169c22c6ed4b4b0175d9198d37cc11fa9d616b17a7ac7cf4801d5b3beafd69a526007622b3dd7f0de3a81f1e19e4e5a6691fa6351ba8ec7eb8a6ae5c45f03761e8eebf440339ff498d502dbbdfa3913a8fa1f371275825a0761d40a9cf47820cdab853bae80e17213172f00181ff7daf8400dada4c18ce001c4c4025f8ba1ddc07257198053214164a12e4498233cd81cbef34503e6d06073d7a3ea6a75a0e806e9f89d17960a5e09654013927d7f88da7517d4bbb1076d1f99935c37c74023cedc73c9cc0460cfdcb7d34cbc3a2407ac46bc1f486238dce96623660e72ba53d5a898fd105bbe40f73cabf52777321adf6a151524a26b1f1926a03ef67404880f8873de5a1925b9b804057f730328d21cac8227d721271e9250da423463ccba439a05ed7fa1439091c67bb745b400d87e374979f2219379dd82a8dbb57fcb864d0d7d5bf15b192e936c781373a2ff33d4dff54c8abf574424be4f4439fc3d621bc94536f4351a1e11c5541b323f50fde39cc2a288dabbb5f4f73a36c017a13fa7e37656f8e0aa56f15d2d51f7d693c3c640aa74267ce33e8cb3c8b64cb2fc6381b46c3241598b98f4f20253502c871a848a878815e6a1f5aaa5408e1b45c47989ae0ccd35e5b4235a9fa2ada449d8597f89d65b65bbe9740b3550ea4980a7b83cd5b7c914e7fb11978b9d81dbed3eadd3764262b0ad76dbca36a0763a36eed0b76bf5dcc8a32f421c78b4a00665bd870a014a87c17c7d07a4ed61b3763389f8f10b59db15e5df5c17106fa97190d3ae6e6e48073b54bf548f642c2cf869764bdce8e40469c71910043b0ff044b5300905f7492736ba46835b8cab4da3a67f50b49dba639c96e740542481246110f96314532b1e1ba7a6d2d3024609d74015c708d73d846c3c49a9514937316a9c9bac6b8101534f7f9f6b6259420dd63f3ea70d7d0949c2ce0d66cf0006c074ee0807c29fe9135ee895fdcaa12006081d9c273e03d5229fabf4ac82558944ba4184ae626f8f8aefa51fba2b44a4538477656de43562e2f0341bb2dbf689ca37af9549eb5c0894a3c107e0cf6f753b882bb21ff3caa33d8d0921610d454ba2620e2bacd28d73f4e59197f29b123990f199565b3c7f43ec8f64ef863dfc59e04987e2b7da70459af68a15cbc20f041475d40586fd771198831651b2c3b2e8dd245f866a7a4477b22f0a1bc87cfe0c3c7c7284e97e54fc1896e146f613a7e405be0b4d39b3e01e50536c3a92b41cfdca5b3609be2ee195c15aefc3b958b479f77c91656e2aea29f09368df17c03dbf50e52cd4a91b1265cb8fa1de934f453f360b8d348a8c5eabd8316d2b39f81b841fc4b49ce1b56a70dad6093ef38b321635e7ff751f0445329441bd3aedfaf8f32c0f1712b6870551ccf02d0b82a70c88ffa399bba5405d5e9029bed2262df63c8d20ca2b4b07b480d3a6ba3ea93953c0bf6207ee49a71de0ea72072f66ffb3725374db68c22ecc80e635e4f20b3b264244b5d9dc55f8104bfcdc3729cb84ef675f3613448b32757b2a9d632459fc9e111ce49c8dc248a9f5f2d39626a848ddff7147508ac7f29a49428891659e325b868cbe8a66f2324e056c75e8677b7fd28b0e79e8298927249fc198f2e695ddf5ced483ef36acbb99209b04553ff71204a4e045d0a7ba2ea972b772bee42f8605ac528c43df51a493f68763f0fc0b4a0204b81413635b3a6c2059cfd3dc06f66c7cbcadc9f433f894559613bfa876cb32f64bc695a6344905b3f1fedf35a8b4d1cf103ab334c44dd91d4ccb477466f06ef7f30f3b8dd64574cbd4818db16f679b83842ed5dc84485cc1e9e75a40abdac24c6df3706643c537dd421d1114db7f4232c725bb908688e1c00d5401892596fd05eeb63890e4b1e2189774b896ca897f4edc2c664fa88a13269c8396957b9260d6759967196cec7563e1b22d84c73bee6df1484d357bad043c86c488291aba6ac76732cc99bb023fcfcff0f78ece8080ab027af79aebe87c6ac3783c0aaee4744876e3f4be1c303f91ccc4eb89678cb24f7d3827cd9b05ca74a9e9a50e047f822fa25c6eee65df609bad0fa0bfa9ae32a46711bec3231fdb74334f443a18097ddad8960fc678a59e43aaf5f52054cbc76ec2b42cdfe48b1581ef6369f72f880ccb76a477bd23d64317a67a612b4dab6dab7575cb77fc46d1652a3bd470265f8fa2407b4576698870ba20382bcb001ce4ec4b4c43710fdb6cece7926ccc0c366366954f091f496cb615556d5a1a137a15cc1a18c937bf0ff23271b64bfc874ec321904e43f961a63bde615e89762c9fea3a4c29ea0f318e59a334cc21b29ccb1a23560c1e19167d0948dbf07c2ef35e4acd5ce1dc0d3a11e5c4fbe195efc1bd895f8bf9128b04c735036d2d544c64a5333551ce4e6681d33f177e9b25da472a00977b1de5e42fb156c31f91ccc5e7f5b1c520555d12055a3efe4e810937bad9ca1263222a8577142a5c7f93ae29aa4841e290991cc7fe3dc0ef4ef8beb4cd03dd6b12118bdcea83d305f3f9ebd3b832549c025d61b649127153f486e7e8b154bb1becd613d4e8860c87a9bf37512da6cd1390afb6dbecebff0938a3040dde53c59b5e1b4f6e9542461c99b5bd8da91108d42940d2a6b5051d59bed6d127b677f4b9973d99f26af34127f2b2116979bb9c5c9e025baa1089eb1188465881925be695ece3ed9658b714076c2295f723bed3a3bfaa71a6e7dd15af68f0644217c705161bfd6780d413dfcdf3dfa92c73e7bcbbacbe08c6772c6de136e2f83513950e63384d837f215277d05847d7263388c5515c253524ece7ee2b6a008347c357d0895a3c73284aa032a33527dd5ac2ab1c1c25a445a83dcf5c19fac120aab02e0e995ac3c25b2653184bff1858a5241692610e81ed6961d1a74dbaed82d25775c9e6b78ddd7b84e6e347ac7b0aac6417276d0fb8cdcd2316ebda64c743bfc234d2e67320ece132b857e0e446b860ce7c4768800e22f49f2ba2ab08f3dd5f4269d91de9c177142819b3b972cf87d1a46f11d4115a13e5c8340724c87bb8b2eb45f3f3f5f352fd4bcfc39790fac86bfe030ed642224d03a10f44f514ddf3f9a137635844e1d75c131e7b6190aacaf3f4ea5e0aaf79445bff2afd9f3e71191ef290dea290b6d1655c7564cbfa572f8d8b4715ebe650818250a2eddcf30b506d93b99fdf6c168b3b6e629498cd28abcc6b6574d4fa5dabf172ae21fd61439d8a58d9447ddd3561fe8ba88a2d163a0e22e2175bc263361de152709aa72c76a01b7f2f5b74814cb47008a72d07b16ce6f68698301328217426c16e629461bbf60472d443ffd6935457b4c8b18af9a0679effc3d3ed87cb391b34201cf052fdea5bba42dc9a2a5044b5032a09d32b6a5038262d9f5a75b98f02e936bc5ec6c2c190bfb2558ccaddff6b56ee62cee54818181430980582123e31dbe975202360acc713ee0dbfe8b08b816c2201a735827c329cc302a3817fbcec0e4505ea8bcbfa8c9e79fbb388c2b9b7e91d3c512a97d8e482ac2dc2bccc3d74a96b220da9449ecd4f796873258e7bde67aa019fe0c104405ab9691aeb12a4c7e6fe257391a6263b5139183f14b190a19bdf4cdceb3c13924d706f35eb1ccd3c12018bc99b1793381629bdd6e5c0287aa77ff077f8df351301b6ae2e2f21e73a81d750fd5b71ecc0aea9ed8a5a46af9825958a534a259cd3fb3e486b5f799eacd25907345aceb21059022b6a840953edf4224b454b7f8fbd6313daa46051ec74ed58300cc0e2201f5fcca2cb9565712859e198059d38ac6af79910cac4b54a2a5b1155ee4e437793a29d65d566d3b9f999da86a5c315f916c175d95c4ae14cf97fbe7fd397abe149fc315d14b8bcf7d68895e5a9bc3bfee4b0b4ff2eab5fbd2d160bdfc3a2d18592a726406d36d401de45a6c5499387300a30214aa19ecac49815e9ebd7a63fa801cdad6d0fb80748a58aa73165e78b774d548766b5d572fa8f549d40aef6fa73752b4f907d7729e3e6bbaae24b92cac5257df5591189568f2b2f6a1e7c1b99bbc309fe1a72e9883d318ab92576b4f8842a02c6397bb278d0d0b596317b67f30f3574259023213628a5718326ee5209b3520c20779145ca955fc2e7857044c521afc2fd5464dda97e6eb41084cb08dcf73347eb6484d4fd05419b845265d1b27a44bad904c86fffdda81114901ef43cf2f6bfab47c2780809f89d4b21aacf4bc4b16a39e34478273a735d8f01f3b71728b6e1b73fc38a3edb951115acf7ea07cb92304b3270c99d7610301f40dbf61a73ed45ff6920b5167ed459d7b0532c04ebd184a01d9293b341c8a96cc1c801f8c1fead721144b541db2020ce9eb3bc5b5401b9947fe36740a282bf29f1c8f8297a83429ac12502707b74358afaa3bc487fb020e533d12c436af04a736559a720b7e1db587ac427bc853d802ceefabbaa302b411e03716d6ed8946daa55605f62ccbb9d7538fc7ead977adb1253f0f797cb9c4d22be7585f028ddb67c653a5d3c858b72756e75dac69aebdaff8eeaeb7b396cf6db14836f094cd1a58f0332ab342bf81af752afb2649eeba049dd486157247d262a4b8b3f0cd0e31ac945fb841ff5acc529c8e2ca5e5a52e463caec935b57c71c55c54e2015c1a4d29b76dee955c10b1378a1742a5d345284d3c125fc7fbb4269de2c0b807f31050819406985408acc28ba99a4efd79082da9b407a400b5e5dd289aaa40c6071b0360077239b62291f645934d674ad12f11ce4209bdd0a03f8c57d6d336aa033276c0130cd22ccff5ed29890101272f08bf41b022f374ecda94d92981242cdc47479a73136c922e652e38a81b96ba6b6d078ae868f4626ed442d61fd8522444959e7019f4a71dadfaed8bfb4e80e1cead015d4ab11ddf82e60a9050e8336717f5087aec804401f531ff105dde440169a6812d43e3236bd3ae34c1c4bff0a5c8f07685729fb2ab97ef0a888e04073233d953dd6d55095bcbfb345c5478381372b2e2a9fb77ad36471af6967f6f7cf3cecefe0b33f70e67081ca6c548056d9a20e9b3daaf91b3c7d21fe3654f6426b12114b173ccd3c2365a2fe09effc4519ea6c51ccc8f711ea6324154b460ae244844770297b5cec22dc177e7dedbf9c338fb3ea936afd74cc5ed3faaf5f5538235a6368494ae03d11e385d81375d2711cb6ae0e6cb268751d115aec2ae8195ada2718f4188adf61291ca99bd31dbed7562af75c24370a32a9f2a2daa2af19a99cae499fb49da2771a8631fbd0651ebdce79cbe0c4e212c50d1f2a9f1f65b6cad7a6181465a3f182a525a36c950f4dbae788be5671b946fd77ae9777101a04f5420960b54097b6222fa58e8c32b14636485943c9bb0a40a417b4a0a95635ec7b5053b7b2a1ecd1c51fe1bb60e9e150582f906f01f578360c7bd406f347a15f59f087903e044ce36d9da2a42679369c1da23fac27f0f5e14a95ca0f004de28d7e519dcf23c9d79bcfda71711601b98f200987c9d9ee6e9654c3b871e5eedd2d50c07a7daaec41abb6d849e067fe1f5cfcb96e52ce813a802d2050f806dfa59d5b7159110211c49b099a07a036c0f3bc2d7d3be823bd1c3fd4bcc16c89d94ab3d00412ffe7583d0baf4766c74f079d74c0d694a4988a45f2f0f4e45ed1c03fd669b802b89b0a1362011932d86174e428bdda65fcf975cc4ff6cd5b04e10a30dcbbbde028d257399be8a5946226c0d75c16437aa3bd6911c63bfd765d9d4b1c3f63e766dd89b3266811d241cc971f420cd02c110f683ca11b010386beee552f814fe8999269f0e1e4bf7be844c687f7dd4860ce6848fd12c7f973ae198b87d60a273e4cb2c436f8cc2e00d0161b4f94e3031388e23b60e1d30ee9ddc3a0cc33dd74fd2d71c075e33ba1f548cddc5be4d48dfb14cc75bf9ab02cad62347b4add62687c182052742486afa0ded65c1ac639f4b63cdd531ced98f53cd06943a7710d170b9f18e7e775f3a8ea5825bb2aa74c2bd26a41ce23a48f6fbee660a1c66080d90bbc948bc820cf6d815a6cc5801214ac09561062f09a78e12f87850323e442dd2cc482f82be061e0f6431575a9a2c9006d45cb0cd017e61f0b769c567af73f1ca35b77512f5afc773a16ef67c52c65e71e03e6e363ee205a2cefeadae257a00ab4c6757aa8c159eb1bc094dc6b43da2698b2a50b43ed745ef97808d71046ac50d5239ff2bf3c47ce02d0d9ee12a237334c04b3bb30cbd2d4865d3ff104baf0f324a66ef59e6ce9702da6b5a6e90befe756940f0c05473e80611577b9ed73050223c2008bc0d4e5f0102662010539fdc66bd6480404b0f3da220dd98a8a4218ca4e31fdf870bc56d71ec32f7b76c4aa5bb1ee7580944115afb0c7aba4379b11b220d6cf3f741bc5ab075accbd2b85d688d5baa8bdac1078fd9b2d06f12a7db36b565891b91497e497446af4607b53a6f4870e34e40a2e241374d73ff1b274d088a45fe88c3ffa9344367b705a8a49d8613b4ea882f07775bb886235a0c186bf8766675a7c0086ca04fd420c6362d4a1b0b52eed9258d14245dd24eb7af4994fb6a9d63d79b26c31169582e89d007a9ca10363d6c9b60016096cd687a7ec51dcc2814ac148a7fa5d3236281bc3e73205f59ea4d83c595bb8df7559671a389cd340e85d26520b869f4dc6aca0f651c97ade62fad446073d86039713072a341287c8c1bd82025038d50fd3a1661cc980c0b0aa1a18c90764762f12b76b26850b331ca98726507c0bddf1d11b7e912c21340a71cca6e1254c815726efce08f9e10d65284f0d69f68534acc9090d27f196db48ba6c3570df76e922e15f44b07a938c5e8b078028ce98b761d3830866bd806e2eb5e7e046fbbb0065310756670889019cb2719d33bc9f4c5f45ab11a94523c958a677f12f426eb99f2c169c6a38c2b545049109adf24c57c7b459be4f4a03d56f863f1bff6a7a2a8cea57c45c38c1b37f84c5b3010025d45cc70b7705bdf865bace14f001e1c8e1af41b0d8bf2ab40d972c125253f93a10ec253442e5d93ac13b4bb15cac6517d028cba72da37e5c51a77e8784539fc0b84c02122536be71745300e6ef98b2b180784000dacec7daef61cda04c26615bac9c1058b70e90a80080143b2449838701e090a34fd80d6ff5f686580a85df1898f24f0f3845d007044be389ce5901f2ef991f93ff95ba38022622544c2630a14f09f5ca903686dde391de793631d0d53cbe6580386a8736240e0e198ef8799d8d98337b2ad15e5c88f3996f1a331cd3c665486f96292abd51ffa86071cc7013fcf6e4e8d77f6395ac7ee1934d21d4bb79ff63e30902a3a57f0ac6b5cf5647acb935ef92faae056787103727b8e806b2c8f6710746c2ae2dfc8da01e67c644174cdb818009d3343340b0416192aed994218ad07369d3c91ea60a3fce0a74f3a0d4c05a101add9f7523dec3758d77acf8ea556a7af695144195f74ebc50abf0da780de94dbeebbf583b8d56b785791d270502bb0b22f7fd6b98f114a76f5ad5aba532bdc7054352439b4ae96377d4798f142b5ef5d87f9fe12d625686dadad628518266a5ddc958f63e0a4a90b71d93a633b45fe9ecadf47114816a94829a9a7181f0a92fc0d1247b2a3d92a7bbacbdeca5d5488f1b3f3bc714388aff9df5f540c104e6b195e990c6434c7e020c16a560b69220fa514a617d38771408fce1e14b0858ed8d1bad49239ec2d0e27b1e1354ca7353dbd1a88decdf74caee281e9c932711a8f050b8320b831a9c2c56d8660f5c2fd9fa471d76410a566cbf23e3f8b0e75c99d68399a3adbaec70968a566dcfff4b0151cb51b928e743058f96024159bebf55b4de6e616818acf817184bd446aa0e5d22ade5909811f175828780e204e39538266c8a3b7b2801ca3210e1e3cfe66ba8bd69acc8eea1d1ba9a1d2534d77d76368bc0b78472f7e3ede57ff288b3f5eb0491fba77638a4683a88dfbfe0c36b3cf27d89409e0188459a24036859fce5a222574aa8f0dfd115b88ca629024517817cf42fe2fb385521910124c06a55c87d78024c913d1ff3dc55415a53dabfaf876239c841674ab961a939b1505b384ce947a1f15088904c717e69d464daf81690126f5ee1bec93cc9eb95806cbaafa0d3f57a4491bd53a44b349ef08d58a534939349beae768f85ba92771c3d9a5ca6b0a765e77709ec848f199056e4bead241428d0dcf6368d85a4ad54662ab48225430f9c4b08a210460343f703c0674258b5dc70b500ddb173c897ef3335b0b905ffae9abf13be4ccaa37d4603ef3352c4d9402af68c982be3ab50e96883a51fadfd03f040704f1ba50a878607f2b371390ee731602682484f64f6011987334cca158344d3680621c30abfd3a88c6a54846edee5cc693309086e02074d7a75714632f5bbceda5dcbbfc0fc3d25395e6af480516a10abc4ce7771eaffb321a71ebc9821a878206af62877a3151b1479796965403f42b539ddaeb264aa7603b256557240cc540792b9c3ff790d6091c8e9061528a7006260011650f7d7f1632177d48d490fc5211f0592dac820f792115377ffea8528e9bc14a11c830a095b36a430f8985363c1a68e317d32f07a92c267d8e956388fc264e4f9a15971ff54fad3791cecb46879431029ef8890cea582458c40273e76618ff0a5e0958077ab474712be83a7b8222d38104a099429a70294a55e462bda0b29440c0a784d76a40912057a7099417ee661ee8c691580085e086d39d7dfb77ab1755df15c01fe5837ba1bde981a13c171330eb5f737959a05d2bed48f86cae68502a75c3032a2949994470f703022a8d97042e4c4151de600a3a15787c1a35cbf3bdba237d2e728f9602bf56637cceab181bb92cd4688bd9d0e951c1de305239e5aa0292517397490d61adb8cab2ebdc29422b61a623db3fc13bbb99f9ca040961709b9b04d04364f62bacc36e9269097f38a049e45b5e3ae2e8f8fee2ef391121204362f102ef0eb429495de6117f6ae1391eac944e9540a6e07afba3890caeca9ddacab74cb85f499bed564936db3f9f451bbd275fe30ae6f75e8d1fcc967c52751cdd6fc9cae806c60b81a0ef6f15a88f45fc662c0040b2aeaea46b05d6c4d67be14ba87bec083b727184fdcd73f7352e52c5aae6f1934ba422a362040b0d921abe65bf55dffb1e2a063e04aa8612ecfcf60d85199cf1d02b55776ad78ee6d3112fe4d3d14a85f771bad7f94674aff37d7a0ca3271c9788d589f262dbc2df89b0762764343fdd44630d32392cdf11878c7424b57340039ae741b253c278fc9f36af6cbb8f525016487622e0f166c69fdf8f3115e67144d2637cd568bf53b2ddf50aba805626c5039cac6e9240185ca31def69d7dba42c8330ed8094754f647fd4d3917c5860a75157602f5f173dd5d76936480cfcc54713f1040fce62dbd27b6cb3c32950f5fa4274c29c88a62e7f0fe0a062d4969448d657b4513698a28d8ec054c0334cd8488cc14f62bb1368fcabceb5c362c12e2e01c827f0ed1258fa3abfa4a80471989c18aaa8dbcdce2d8db5ab33f68514ce67a68376bbc9413b2ff54c8bf7e41ef0b227f76c84157b8e2006121b4e4fe227341e253bccea8d284fbf4b39bc627164b22893101e663e2e2c72017d22f757b4c24e835b0909dc8d20994b910e42bf77ac3fbfb7f0edf985bfbd52f9faed032aa0c2d331a32c68333bb8ea81191842807b99d3135a818230b1484c1fc410544d765576a70b99f1c040438fa064884baa081f26a6fdf151a918fb5e91625570a01530d07ba1aa7d1fbefa6eecb7d729cbd09ff72e49ae73b62b59118c5c4f94f108a17b0399241dba28511d993fb66d9cd0c06894a1b6bd3938eb6bb6dec32a479d0f2b827c39556226d97c547f8f4a774ee034cc7f113102d8bdfa4b980bc136c0a97b7bc8e3e18e300a3472845144eac256acb223a0873a6dfa97d1f8c6d3ce9f73338133dca9da3b069b9c1bbfd3d07b43938cefeb23083d9ad854e53a56a5c2f5c9c602d7ff0b48507406dc1ec3bd38e4c9de04f59a5d0e448094857bdeed766b48a27348ddee614930e1a615e5e902a11a227158453978fda90ea9ea8478cf80bb479f21c0ab1479ed038daaa95d392b62ad1a3f2e30c0253a0f739272631590954580afb727efc59c54990b39322fa6ca9ef3b61a63db1eeccefd97080f726f97540d0f751235d206d13971558af6caa8aff30cf486292e70515463916c61903806206636fa7a9fbccf6c04a046d8c65a2799906d48dcc17539bdf2c6a4626acc9b570218a5b7bdf0abb0be75f4a7d83852b2ea21eb1804c521f7954b25eae932fb3cf7ee12c871db10e23575fae2097865e1c4d7b5fa281ce0e9c92d4cf64bb6e312351c0c11d57181a42d704c6d93f13dc7025f4460b51b0014828061c1863f8fddbc5de684c876a7dccace1122bb39e2984a1374ef2f63ee920f74af2a42b4d6dc7e7f7d833a58de62cf8298efb25331ffa5cd10aaa143735e041e6558f141ee8571206048971f1b66d4856df0da7aba716ca17062f5b8bc4f430213de2ee0b1b664c75f10d29b2a8d0d411d2e499012ef595a1bc78ae36d21f22fd49d1ace9abf9c5de7c79d3d7bc5f79570d7a5bb3c39b25f3cda372b3ada3741eb5a8552fdb38f55116bf7b5424e6506973b710c6e0f55ff3a1df97c2822f760463b074ead5570b064c3614be14d1c54646691183d6e7fa128224c0468353666c5c2fdf78a6054d601a20b0920fd79b8d045e6f24e982d0a11455c682bb7bbacc4397787ee54cc93f0895aa5a12c73f5da07146b262678a5ae19b842b9771407611794af6da30786d169752a208c93eb009d92198edec0059b2aab2fc275f40c0c070d0af74512ca07d5a12bf5a18a5061261cf1e9f25a78f77f440c945eaeb411a1698e6d833671217fc2eca6d8da04043b6dfa45bc7c4985072ff93f257019e7f7390cd7f7bf36304543660a56ba23a46d4bb5b9bc68f4af5581d7444a7252b8b8862ca7cbe8b23d15e5f05aee5142d15da231712aac6806c04b73240fdc605b812e6d344956e4fd37f8cc90785bdc94d07888854c7123a096763ce99e5fddd047eb7099e441c8b0d8c71de9386e1e6f6c32971fbe2a1923d06c01abfc8afd49f94688e69123fa6f828c369fbc4f7a4f962ad1c07d894785f976a6342fa22e3e90ff58ab0f0870350883ed5acd826453ae971e6b0d73d6fee37917698a6f85b6b4174a10583900dafd9511ca06c764b6240d4e07ef01ac0184b3811fede2a6b531f95a4830be05c311d2e468cea3593b8e76381082808f702b0d6818a850bc5f9b8440f262a3ee5fb1cc2a087984642f3a70c805e254996a2e64891e0a58b26913baa5b50f468aa9be48f47bc5a73845f2f5707893de5f7e3c5fbc51ac5bd3ca6f35989e8aaa4c017d60c0bb3cf8742ab1b1e202b81c98bd55a78973a04c35a210a1bb33da312329393b314e4f25c5a83596cb68df090a752a278f977f2a4c330517a7f6414e3cb5c23d8aa87525e023f3903be88c77fd3b2f893c2179e21ccc05d9372190de5656cd1386ab88983cc09e02c0be68521ea1cf2f57b1c0433615df2e40209e024aff287939279faa29488d29ea2e59ae74ceb3fefa65af282027f8e9a0f0227b15573a4281dc07eeda0069271008574d11b21add39eee1ebe78937fa0fff89dc3d72530a84001be39e0814427ffadde7e1c44f5758eec2c91af5a00df720c6246f486a0dd9f8e5be9b80b5df89ae8e27aa407e85200ed8d614ca32be91633309e08e992514cd98b6d1c46ba9ab9603458b3d1d717a7979bf01f1d109eb8eabb5869b232c44974a08060eed5ab7e44d1dbbfa6cbd88089effe1a7b54e968d09c7a62c81305cefbd45822f6e513ccf85435dd208d62382bddb009d21023f3a1880f2013b02c88b8694fdb32ab957faac4989196abd3a735e466296808e1ea066479bf4efc48b32b21b3104b58f6707fcd93bd45252a476ade7e512175d38cf91b06328d9185952789019439e2e7d36af845abb131206f6011119d7ab60e868a930d14bfea041e83eae11a1c2b92de349b55631528e81889f07f9e5ee08b0e1fd22396945410a4eec7644ff76060187bbe6b3fba8db83a1dfe7dabda9a534b2ba266a7a8991bace93d12fea8e02b9e43921161006cad50b532b4212b3be6e8c5c5c9ac46684adb136bf1a04b3e3882ed30b7c90be40ab55dd43bae0f7f1930c299a1167b860a4c6fbe0caf495195b92d22e180a6c01b5188c0da77bc7798cf2d7d41405bef5c1d6a6b19535d8d4cfc26b8e4c57e14ecfbb07a2fd3315384f6d0301099dd54963ef8b9a5d0a015b4e67aa666b6653f19cdf58343949b1e6c6c832e4904c1831d2a0e34c429d88effa68dde2d4142f0abb83693393b1d4ac4954164f94a48156d80f4c7c3d0c1810edfdf9c95d95799cf76b14c629faefc5b9330a6b655b77bd6c58ab335edf2a287a414fd511a5116ca513a9c92636a77ed8576aa647653c6c9286d831c8db2f8f34dd73f961eb32c6b7d40587dc31358dd8e41127eb0d642a86882af769a99d5946cc563b0227af8aba18046df1b06ab4d321679c8e75dc58e029873a39de62b240e4b74694235eaf73b09fc87884f24598ac981980c0cfe4348c788b5a1fffc0e3e7e7631a4e34c8c22a8cd86a120dc88597064d5941ad6ecde5e71612167027c062a0e9d712e74717070f408d7a56b3a0a8c97c6bdf246568183aeb044056e9fa16d338e372aaecfcb8b0de7e0e11f238e0b1c6aa5c743ac6b309a9bcc3813770821722dcf51dee457235156d7bf3d3c0cd32324f07564db64dcb662c1ac46719dad281e235872d1b5a198e2c798c8b3c39d04455822d44ef70bd60635997e7b2252bb36507642b02e6bd9e3be4482aa8d302980a0f83f5a01afc3cdeac08b7069e8737025810647e31dbadd8c05ba5eefc1b2b15044f59dd5a80721570633831229d2129fd97d6deadd44e3be2bea44e44b2b0127a9bfdb9d16da0a051385f1900a36085be1d4397c4107923a9b843538899eaf5d7ccfdb5e444fcfd12e4126d570fadaf65cd4e9f3811725c10da0104b1bbdf2a9f0f49d4980732d30991cb4564d7787e9dd94148d14fd9a84af8a9e1f2aab6dec8f6b18ba8c31f91bfe162643887e549012e5694a428095a6f6f5899e3bb7b9c2b8eeb25e82aeccbd7b697103a9355341ffaaee34b2f017bcd2e052da6a8fa3e1f9f134d6577eb55f201a5701bfd2ffd1d3ac34f35b2c7cc28c2f279fdf26c1d838bb135f7a97c51c521a58a76af85a0499c4f38261387a2c9e3cc254d5d6dd8a45777bbbadaf2cf30fb3765d27afb05e73847777081eb6aa1afb55293c5a05b3efaecd779e98948c843c82eeef074d74d514a1a4c669d679bbe5b0466a5a0e13f25a16c0550f8c50efcc82a77ddd584a98717099f5e2102580a6edcbd12a8d23443932b33aae8a0013a90984fbcde63a1654ddf48d89838e72fa991e840a2c643d1805eb84060dbd0c4265313d22e4c3c82a51d2102dbffc21f5697486aadc63b550816bcc151945e04e66fd7d31d897419c8ad6e70d0f5edab0b671ca999e47f851c251a1e15d2c35d2d460172a7c2422cea981dc84206d6feac7d049a29e74b3384338acc5dc150bb50cd9debcc920769612823513f552691c088a6d0bf24b69581b4fa826f2a00d1c61c85541580861adf7824b2dbeedd0290d711e6a921babe288f8069c1331282fdfa9f7c6dd0f5f0b0159253135420323a23c47c3fbd6945648d83fb1a5ec87914a8134c2cad430e0419df8703018a61602430abb5b0fa73d842cee0e1acc78c26f46a96b3f98a3e7db3531554500a7f6e465feba40912f917f5c5bef59806febc4c767742ccb0d3303e8e54d29ff1681b436561a861c6d00518a89ee18b7a99d7b79964f5da023d7c8422806740e47e508ac0fdc8e6f5ae2ab4c66303be0217c81b2aebbcf80c00d6d6a38e4f0875e7dda471e89ce5e03344f0b3fc4053006bd105804e375cf518d0c389382c79dc7ce133db6b4f98434356a4608c1d82f52c859a50edb18044ca3301e50b2664a061692c22c465b4ec0026c28a2fcb95e8351190569f74a203e654066fa22b8c98edc6c7fbe04084fa9a9054c04ed7e2c2dc8545134b058c959cacd288f016f22309c21a68eeaa1bbac71540462038b51d0f14e903f5c6e6234a6112dc4ce30815763074990d67d74d779eb2366fd9f80e93785ae7cc06a6be763ffdebaa0f1ec6b6b84492b11ca5e2a474330f025b717db4ef18bcb2896c78c8f8a9e661f5b0986ccb2572f3668223ef2fdf4bb79d3a9394d21f6cf118ad5f84a06ddc1f9f9fcd95173969415bb47fcf39cd8db086d05b097f270054d38e501bb3d8dff727ce38cd3a21e9a4eadec211dd984b14bab3c9b8ba43ead392feb5c6c7fcb590583d6dc6ce89398a4ce9809498b7f08d08953fa76d1dd529cbacd382e3412e4bc79e3045d51bd304e92cd425953ab04efcf896c8aa80e92a2dd4f4ccce91037eb2ef7d70eb3f431092afee17cad74e28cc099bfcd80db4b30f01421ee27758cd5a9c872937a78b7ec3c6c84dfcaa81adab8fd550c65f68fcd49f4d012dee8f5a2f0bc3daba3c7f8a0d87a9d97af99e9ac94214d280ee913cd1b6b7f7ce498fd6afe3ace43d7292eacb5d8b5233593e3f451c25b5ea057cd0491681f335356d5891dddc0efb7a4a5efd25062d5502acfcce4a9a8dad83a04b759e6aec266fc266ad3c3a8b2eddacfd9c79a3ca37ea57a1db4ad3885fc511fcea2aa7bbec1ef2c32ce997acf4e249005c14e8ff54a424275f0993cbcccd03ee955a611eead8e0d0fb1211b3acc23b95f4ec92d198e0ddc65c632a3d9f1dabc1b8272d9e9980bae1de6b8fc5f70d1ebb9b7b5f7dbdd0951ce8fdcfe066879de8343d8bc08efc29df08f7450064f8448a5d2c3ca94af02347407443b88325ae908e097db3460db17c9c74f4f836f57a12a391da6be1186d30e743f6c6b35702999a591386081c8c2abc52d914de36bda2608c9f2efb0fe22657af991746e5cf621f5184fdfd329a096962443224bc016fa5e2beb6998298ee62015a6cd45341fc3e744fdf7a728cb1d81ac13e289e9d30109df1e637308a5c0b007d00a7f8b3f8749a25b5aed799181d521b37b637dda4de9bac446a4f13413139ba9d2e745caf12f4683323b092135fe5c9035121b75315c77d38d330717701e0d3141b2f40b313dd4d9c08310ad4b882f8428d29728cd7779b0d5091d964708b85a405dc0da1d3e7c269b12c8cf03b2c0864dac83bc44c15f50321a57d6d10714d481e4c16520e19c60884accbe8449c5ffae5871ba1c73aa525d8d7988e88b64f85bccc63f4bc9c621bb9c47310ab5fb6f65d7821797540aeb52b4cca0dcdfd96c1617f04605439eebb067ebee7284df7065486b62f0d9378edbb5d6941f7e4d67b74a43dc3af52d15ca72f8eb91b84eacafd9377684f67e0a86bbf6f3cbd83e137a8318541319aac81107880cf670e42a7a9620b7c1b1cdf9dac1550b0d18659276618ef73281200fe1f8223329e921ce0cc40287137f9173bee1b5a427288c81c5240a76d3c667fb12960680b15a60852dea0eedacd7093e5c4557102b242bb825ba5148f3a89fa513056de64259dc399f406c3796e1407f0f65de8b99dcadcf9e53d94929e02dddd6f5091ea21d05cb628490c8a067a81fdc91e6ef60bb92cfdc11a9440ee241d8c3237eaa7e20f6519fea7e432231d20112d0ef83f4c6e233cf57305f4866b1facd484826f08cd5035a2daee373f312e1054d40c0a75fa63ef042323d02b26ce4ca70e7afe79980084d99062619495f92d69bd05678376b8592399e5e525b95c46f2d2b14891ed612ea71de94f536f565e713c3198a1580b136ac5bc7f7b90a415c7a2be91ecd5669510ffbac7da309c6ee91470c34c1417cb584ae889e56dbc50e01501492a5d15b607a7a370aef044e698bec0af649ee04b7cec81344a8d9a7f87cdc5b5af7d7aa64ad45cabf92bcec09f5b7ac9f3f0d5d8f3d7956c629115510add214eeb2a39180f4a33d8f01ce270b383fde354161284438507148403e15b75a799e77d21522c7169835e13aed63fdb1538fe16dc069c2d7e886dee8428621b432e1381c1aee36cb6a70a4d81485a0336cd513b811c7c611195f7a20e499c8b6dce3e5599dffd1dbe3d02d475132209dfd83ee90e0dce6f25fab18328091f6681ebaa5df904356ad89e3ac880187fedd0a3cb547911ff7a3b631ee2c69e45033115740dac55d3a5abcd7fdfc3075c3b29eebe705f7fd22d276a8124fae2d8e0f6d55e8f70dc08a122a64cd29a89fbebbe499ae5a6b1548d5d6604265d2db426ad62223997f8f0386c7add7de7ecdc4d44222a15f2a7c8903dc4986fc1c03d084312028cd6f3a69a07a65ce8b2a577026a12b9bbb43e0c264f0a171ccdb2778c84400ce2b660dfb6db5136f8f3864dcb55183a981213cd6fb3aecd70cbe269d8155dca66e6993311257eb4515c6b2680e18cb02fc671239ce75fedc91cc75d42f01ff923320ab004d76d91bf6cab198bc50bcaf72a323e3848b7cd6bb984561f12fe8d42253de7d3b636d5f9814fbc724c650621a2b576ce5d6c186f2d8a875f970f1a1f0ffaf4badf0f70f1531047e4bd17e0638359960c1d7ddae812962b1ecb840447c2bb9d91ff85e37c9e7a160514ed55ea8638ecf90a95c07d9968a03453488ffc3097c09044ba1cb20716c8a5b10834f0cc3e264eaab23109a82554e19ba07b04608882140a96282b1a30b9587ead9dff8b5a393da68e73ac88c666a8d807ab5c93761de8acf8cd13903bab6d3dee5712339a583ba7c1dc7fc454f15bb92a6239416f980e04a0c32f9002b89bb91f7c3f3deecb0b12b959ba828b446111d846c85d53548b1b8a1164c47da7610adb8de75f74054879315cef0a12d477b468f1c95b7664da1e9c771f63d471746b344cba52cbf18e917f9d38c0e1f49215d39e94fafc9654c9ebe4e8db8806898852ab6a561acd28a907b10320e246fe4c7efabce8ccade6b8068c27cd1c1b479a55792d75eb3373920e3d41e24acadadbdbb675b3c2c70d32ab9784dc0a2fb4506ff9944b8520f8f4fd94f268d2fc468e840f24cf83b0189507a500a02113109456016f950f7e5c7ba7db0862fe53e8ddc41265078a1f83b0bb06f308dd86d9b427392d2f378d149a231a72dad3dbfc04df690f0e01b390a354675c9353653a674a1d03197e97553ff3867d8ee45bddaba03ef0188b2b12b1ea0bfe28359a4479ffa7ea51e273208ed1fc995208b847250589d7aa5ff9e8217096ee9fe6487fd014dafcc9316867748ca8c16855af9a947e77dfb1fdc28fea2161767bdb40270837a75ef129e1b8e091f60818633f5783e6eb4307e49cf8efb152eb98b63889feacba0b15768f1a1d03b1e7092db46d6ce84f3f65f77eaedd2e4dfa84d14e43460e02a7263971087b086883cfb23ae2747af3cb2bdc33c6b807190e8c32cf10fdb9a3bf7b9adefa108fdb09d8b35ede8e939fc9f6275292873bb34f8bdcf7e36f0f33b322c9cab9809255bab01589a277ccdc037bea8dae76ac730308b5cd313245af4cd5238cf303351c1361a7933bb412d13bba105a66f2756bdee8b4b0b7d9484d75f2720908a94d72b7cb8ffb8462805a8916cb3edcf595830b8bdc6c1d299db7d34753e1890b2fd6233ed42692eb5a1c9ede7c599441ac2815ad0b9cab3cf98f4811331099391b874c8b381e2b20051b7d400da701ade95fee340a1059bb8c434131b06e0d249fb0878092a296c05177b48f2b997a865331441a6cde7e1213834400e32120aa926b609a8a7ac4bec91edf4a4d5c07549c4b9c6aa7b8aa918ab66d0c3692836b3cd27e382f7a041b3be3cca203aabaf4d933554a82d824bd0e4238afa625cc0e2634884af1f0b919fe904c9859a714fb5b38c31807c496f0e8306509e45f48db0766d0e5c1c6c819d988539484d80947435f515c7355fa646643db2f7d0f96a3c70f731d6efd5a624af083a2f7d509c4d3d618a27442360765498c76a30c099f87ec7d2120fa4c109f76ba67f662d5fcefa5bdec83798b450d7bf6c823ed9535dc3450749c3ac83caa4e6cf83b99ce0ac3ef09657a83d293e204bf8c2f50593d6ea6641ade6a43ead6ed5113b5cfe7513928dc24c35e28dafa177b9db5736d6769d3acec12a23d080c48110009328fc09fca054c3a2646552926bd5000ab9edbc1f8d104c69d85a0cd83c47b19e6286fb0f390ae74544396fb52e0853ac00a31bff11383d0bc619c648a7bf3b230fd2e19bba4c4f0522c47640a9abf54994fa2bc2daa627d127ea332ef8b0ff9dea288f2407e4c81a0256cd871d55f410829ab8615f99802eb605302444d6f41049be8de2ec066dadaa3600b68370387c58cfb8ddc3b0fd6c0625f71f45e024f000898afa01cd72c50de3ed9f4a43483174de84742b319536cef386129b86dbc74858c6405837e0d41097d290e2bcd5a6c076102bf28857f5dd361123219ffa8c38f7d157fe21f3cbd2159c3a54dc35803bbe23c13e3e9ecac09f845097e6c5dcf923daacf00918504ae6efd4a6e7259881e7fa90d8ad8cc169144a4ecfbe4c25f11ae2b7c7a69a28d535d7d01a8940e4e988f91aceb3a880f7ef9ab58a62a00fcea6002dd43f0f6c33408cd9123649fccc2669151d4e2f983547625ad795b18b406b53fb48b172880d4e6525c586e064a73460de5c516694cfbb8fecb5f24a5ac009a07613572cfd59782fc691a078a05ee17b88cb4f8a12d016279ba8e94df0b6a6f7bc5b03e62d3af0251776922bdd6f05e8664a188ce548725002b85aba6ecccbeecd1b8738607ac0c4cba717011d8c4c4124231cffb7c5000444efed47ea09b74e54affbf9a356e18161cc84971462824e59e3a7b077b637541497ca970377f0a2b5c60e3a1cf1b224619a5163707cf190b508bd4b8ca1306d5e1cf38164974c361207bb10b7f8c21590e876fa74a45a015003e77dc14dff53e3e7add51b88b8e248f6d139d5ccc6255b98feacdf3309588a6805f28e208ea513df6623db4f95b43ffe3b3fafce19a98634c9130c246cbb54f6f710c52252356b1018cf0906ec67c84c606d7452ac9ff94406218019d450257e8d0f8db0a67ded8df7aad957e27630453cc51c8f4a9222642bdf704b3b30704a590032a615b95e202538db3435d670df5f99f167b4dac1c763111192151fd4cef948254a5d8027efbc9fb2dbd846aafdb009bf2de9aee5b19e4300dd331d70912313dc2f91aab8b6360ef708b84c86d88220daa21a4a36e319d22bd0ab22a7b7bf2d527f56d8ab423ade49c0a34df061cc6dbf025ad7e3f340df58b159c6a790b2c1f10a827dedd9d6ec3bc818d33121133d5eec9210328a9eadba0e9f661313522990f6e33228183dcd97c8d2a74e2e9bd48075fa58b173314f7c65ae5ce7c67db60463902acce76c84da3a52d217f5d96b392da931919a6be53821c10e4dd047685b68303ac03c2d82b87c0703d8cdb4e2b76e7878b458e44fe6ae1827e8bb440ca6ee0dd0c9952c5382f1f0618427efe3c968a9c6abf06a141106ec884d447108060ba34033d003b0b25714aadf1099288842db2f522809169f360442016c46c24a5418c51b504454ddac904851627c313fbc575b7f68f3027ab680e5340e6516620890eb8f22df46694dfa603bf299a450e1808824a496bc5f606630f0a012ccfee7497923398ee5f1091b8c0631b041f395d1b9bdbc2c42d7e3aad7898695f52b019d97871cb292f5e86282b7ed2c16d4aef3706570ad400a5b8fac88d30e4498344f3547a84c1a4e204bd5de172d245b8e70eebd86b06be32534a22b04b12c7503920f306f2f560624106ed8bc444544234b05906cc00e22a68188a9bfb9ed515db4d232a6c9556deae4c0414e3ce2d1e8d3936d30dfb53b9ea4e69a7c83130c57e667a57062477f24134f5c35e969073f452beac9fe2ccb98b720a937971741b11af950b0d7d92f9f832f6859d9dcc26d94190d89254cadb3eee1c8bf395582be08fbcd0bb40fe435009dce25022cca8de347b7dc0df316927c344132c783a334ecf8e90dabb1dffa6f5717f3c2a9a1a507c88277ff54feed9ca8a6dfa0f60aa6b4ef963fe21ef5653bc58c628a6307e3b79585674192cd3339315ee297f0416141316bd48b60f993760c53f5a05f45bb002854703d9bbb629888c824e9963e1430f392a15776695ce1ea0e8f3d6d12697936255738ec23fa0c28d60b9d98c3b0ffed06f04d4310c570713a6ea1322e3300011e885e950969a616b6f591275a18e96e4bbeccff4ee4840036d61dd88b11e006443394267d3b16a3f4238cba631b143d2a6493166defb1e9a19dc47daa472443b987a2ab0a832c9b44d106d320db701bc04bdd9ab909e3976af38e9902c89fddba45b4a6de5b335e82152bde2c15aa68f48b6018ac2f0ebfe7c37331db31803012ca9e09bb583365159c3c7deccb39c56615171d9b859e61f642caaee9882a439d1f3864388b14735f563c6e78ecdbd615271aa58773a7cfa74d9d5646988708b609d644866a504d17d89c868231fe920670c78507a4ed26db3ed33bd66510a6d61d17b7e99bdf07a8aa2aa13f72c161374b24c151e356f99aca67e58d1d59675e4193a475e40c27296b4164fa3148e701a5bebe3fdf1f6e881ae68f5a0a7d20417ba92646c36e85db329a19b5c09c2ba46de3ab3dd3edd46b43656e77b93a29bc663f3644396b710e616f2627361ff89e25641e173c87ce510dbcfaa6e7015279f659801fa8c1ca2d42b36154ae48d1c05554871b02c31f1556cea0949d99d30b9d3ed14bced86e0f6013366e80db18d404027e3635d486f89f6f420131cf326d162b8f80759862d8524bef4984039351522227f988ba88b571fd23ff528fa12c44d59cabe2c1e6792a55ad21e766744777ab3fef5277023bd6afa55987c3c548213b7a1923200f11d696e24f93379aeb5191c527f5080e1952ba6efc2a019ab17e4721debbdcff1c9a403d192eff709e070b21661d8200380bc07228496103361c8d26034145344170cf4106b889d7037e8d37c0b1d6c5a1234c8216b9368b157df3bd1ed5b496637ac35e5bae43940bde655699868060871e986a26eaf634fbb74580bc76379072e72c2f6955e8ce7ed6eb8d29c95ee6940d0dac83af01e928c5015c2c5156cd2d8f20b6be4f5ddde1f325b639bdaa451a66017742d04fe3a772df5d7acb764c7745d2ce9c923b69d1790ecf2311a391c2013fedccb7b13b87f7fb49a48903050459702ab0010a83a8307f0fa5d8998c82ef0553498b1445e825097165eeba997a3f259304861d27b39f52f40245ff0f3846c48e1d7f9e58bf2089c76769fff71b6610bf1189486bc19621796777a65e7e931016bd2386aeb7aa3d90dcd1ee9e44efac272ad5c9804ed0d3334da4beb1eceecb0a4a567f4bb9008fd92ded3ac8bc685fd839a84162d35693e0bcb48858951a2d714741d3e109d6e39a02a26966769b6a5105c69e4026c93c9c15ff78630b0d03d06776c04771ef50e31afd6501cf2877c5224e16db49baceb844c462cf81764142adc6fba3060895132942f2b32225314d5eade927bc611575e30c8c93dbe4b87be3a55705dbae61159371c6b3f2d6f0dd352a62e3ee7279d42b63864f67ddf7afac3b1a6dc5874ba893bfa4b5042195578ab1665835943aac7419af336b8207f39e8b3b0b5358da2879c9cb6157ac1fb2baeca87f4df2ebd6c8ef1cfaa4a863eaddb1087947509e69ae04cee052087b4ca1b1ec2188339b22390e73e5e508c08bd3f51a477417c45938350b5c2a6e81ad3e286aa006e6a14885b2586915c28015b32a70b9efd42c28ccb4aa71272ed952b70d52586f3e51b5009d7da572604582820cded25405bd063e78d3983b9b75f4744d8569364c94126aa69938faf469a04a0b13283a3bf8409262e85960755ec65411b1e262cd1da5c0fdde02467016235dbb95ae73c8acbea5bce763eb302c660e922e89d2d6b6a068d42b8a1e01ff15f93cf600f3aa350c6412a916906ebe28aea34b474569b0e5bedf9b95539a82824546191f460f4bd552a6c898a9ba989bc29dcd2bccc8645e754cdef6db2b8a598133a5ef2dcbb2074ba053c36d90717dc1bf5305169caa81acd0b0a251465c2be78fd1fc3067f03d5341fea152a6d4a365657dac8eaa1acd0839d22f2da3554fe4278351db692fce3cdecb3d3b90e4b8f17e81298a945c395b6f42a456bd7198f5209d00b9147b216912606d685c91508e80080572b843b3e90ffd51247b1acb4f381ba1ddf43248f900cea7b60f09271a14ebadaa533f5577c9e01870111e128e4ba0e5c05dff37e5dadf8bfda129392c85f80504e3a6a17c7a7e2f8d4ebe5598aa4f84ee3f5bfc5bab6bdedcda5673f886bfd518156a4963ef8dd0fcfcce8e8256d59220a1a75a2deabb6de905a1519381236c85a72b192d772e6363d6d09c7b38c5d23f1622bb989326d3811ab9860dab22fd2bfa460141e3a436ab4ab2e638191dc4de409d696b329cf9bcd83cc2df55a9bf36c5bafcfed4154cd89ed5aef4046ce1f7e2e1307d94111d9af9116a7fbd274b44fd2d46e2d80e4361341dc26e55cef893c1b275e92f72c31d30620b48b8645fab2c12e9653fafdab5871d89e04337aab6908153cf8ae0fda99d333e633ff3b782a125f5775d98fd05222dd2431091f44faafd2830f2cad1e8a1b73f947384506da1f1cdca5ad61a5f30a4a052605bbcead06814e26756b143d1274f7bd050b1c4b017c3819e21f86b047f8f599fc66e16a763aa8484de8e1ec20013f41b8bea204db769104715a8339c44b739f424b67d4bbf7be1ac8ea485aa5a1fe0ad558e66e091d1c20fb5de1a47ae2441a10748260279fee8330d73859f6e1a200c55c4d21c3bca2d2595951bd7105d0289c821f5dc2b1bc7fe82e1e2e3df14e1e9f8fa2ac3cd178fcbfa4ddc5cea18b1e63cb42adef0e968b28c1747ff9efc985732bb4b0b9e57ce4fae2b5a5603e0b4cc5520b8b18d2f331fd387c2c8c9a79ed07cfc95710fa67fba3f5e9663e80390fb0a3bdefb4f76d741fb1fbab86ffbe8a4ff7df7e845b69e40c74099c18a62280d61fef30fe204fbab260da4aad13e714b6e973297c06fd30d94a2d3030a156b5614b83abc40f62ae727fad165ff140a3d51cd0378711ebe2227c6c2cc04f00ac4b575f5b3576d5e68e696c00370562a5b27c59194804f6b3f1b36edb26b0ac273f436bda18b8b14ea0ead880c219283d88af684de335a94d2d3fe51be5a9510850b128bb72604213b2c09f50d247c52a6a0268e739b123e81896909786576cace5852c24fe3c95dd84c27a443a5597952eeb0c33700ec5c300a0896fe2502aba217df125160a8f6bd5dd7183f985cafb77fca0c93b78485c18c75aada5796f3fa44bb5d46f115ee44be2361ba17184d97cc867393c366a17918ac274471271f86d902d4131d463dce356bb20b16f6cb8b75981271c5190125318e1a9d97be20f6f050714d03286954f686622d90f912fea4634392fe7327f59776b02c8cfe4bc1573a56a88e5f26a9fa959005d6439b5e277ddbec33b6d4fb4d22c07e3fa193117dd336802579fb61b599a8f8ffeb483abf6959653959918da72442a6b4771179280399f1c242e173af16a94cd073ed007302bfd59e655f97a0316cf6090d8686ea608d93e4b3fa417a1002cd624040e42b96904b5a303f1e77f6e6b565a3a1eea45b4c6431f60ea2172e2b4ef714834507732c74d05cc5186bd8ac3323f8d2b83734670f4d65ba3020dcfc8d2484e394f7be92279325a707cb910375f90671e377ac5138870eff386046d0d16560ca3c679d511ad792dc26b4d0664c0fa0c736ead7c8f7c50703545dd3074adf326d78ed420b4ee3e8443db3efad0919c2139a746d7524f17355ac75fbce01422b1314b989866656f90209cd47a0a70c49c5e4c1138cc82c8af962aca4a806d1fea5b50aeff1ea7097e81aa0340ab23b91ac4209057df47efb11436956e65c23e970141e948754ce7a170c606c24cbdbc9f790822933d67c8a08ec193683294648a6da37ce7e5522dde96d0f2ab0a4fd28bbc6ade5e5ccca9fa9ff67c4cce67b14577751a181014dbd91daa932e6eef48329a58beb70d606124d23cf490b1ef92f8215e4929db67750648fac893c87ee204460a008a9b92b2ceb6bc46e18b7ed20fefe67b47c514563d310834a3807e80b19ada9c29f90b10bd101ca88ab92b036b6a9f47826df90dfd0a60f2d326a7faaf1906dc2002ad48a6a111a8d18747438d1cca726a4dcb363a02d3d3210b9531c61653e30a00d5ff93221a634fe1aa4a14f10475a96c6fb7891a9bdb4cf665889a36e0c2630b510604178000514d2cec6f980d0558fc618046be1b13b05d51b043ceb03ba09c934cf0451a44ed5399c4678105ad6671ac28c343e08a98d6da6971dee07bc6955fba8776e565a918ef5dbe19be6193f585fd9e3fa5b9d2115a5fddfbf897ee95a16211a12941010fc079c824bae1d7b1bb9b8acd374391d9dfb6e2eb4e58f5fa34ea95ba1090cfa8bf8a3d2ad4a5a71707cfc1cd6a8de11654d60b37c53674f64d8739adf7ae10c9dd532b7145c1f6bc81a7b2345ff5596382a64ef560e9523f94b3a1b15299271231a9530f56d425e718a975f57cff528c9c6bb3a86dd48ea4609efb376be40612f934d46b126ee7cbad6c119845a5d8f0bd02a2e4e483fd1d92401f277e2c468606186bfa1558da9a4967db9d694fce8bf4ae3fc0174f0c19d05c24090acc0f49900866eca90b05b9c436cf889570b5d33d23e67f43ed359229acd7cce4be3b02323771d4054089aa27fd303e41e06a603253de9d1a6136e02eb4d81116e4a7923a9463dc809f51bd8678fb8404ae5a3438001bee957e39a99879745e16cf55e19816b79c38bdd46519b04f8bf4c6ec985fc15fbed50cc40724d247628d7effb75de73c664a62060c1e2cad62bea4741e1f37c92410fb27bfe3dc66f1040f9dac3bf2d875f5714d49cf949151996c85e03b04856e0346d3c1cd9a50c983125b0a51f8cf4225861f3d50da5b8f0a819d4fbb8c8742ab5c4361882925de488c91c2c8f46c773b9c63e79d36488c72e4279c5f7bc95967e29015b2b426c36cd06140c430ce842918c7685293137ad9311a8d441ee9ea7f79e30582e62792daa00bb0c102309164e0921ff9f49028e7a64d176f845db73610e545720f4399ec992f6dfef3c49f9e5f9f339fdc0ac9cde5bb20661c68121900bb2a8d0838e9563a6d004677422890a62fb0550a2e1e7c318758c3a4c4074b22f7e8ac093f3f5903c9d25be949faa5b34fa0bbaf49a903edd515ee9dabec67f3f11838c913f7c1c1300b04323fa1680b869a54ac3a854bcc2572313a25b9482999d5d25bf2f52149ad0a254505da9d88ed1b402dffdf84aea755b2ec24f7da64aa1a2413b8cab7ae23c018545cd4eca3396517bc79423227307921e8623cebf2e3b5f83c3c34206b2674de67447fc1331bd9949a3167ca559b8b2a4118843affb19a1ed07937de861db72a57cb7282b4ee3b5ce66ac961c4d117a9f4ed9258fea59ceccadc29108016a45272ba3cb76982a3c3166bbb26d6b4f3a9362efa04f6d9f2f05fe72357752e680496e9da97ec50172bc271252b86dead575a24d8480672ea62b2e813dd31bac658b8df6de2f79bbed94876486b8ebc0051f213c15214372d61dade93b0738f15a502856419b202fcbd51af4d52642e6973a1cb061c03c83ba4dbd080187e05ceae4f238589a5cfadb6ead6ce239c90d9947810b8151469c247c213fb1929fc31ae0b5a445e7492f47fb5e4649a4ec2a8e5f62c54aa9560c29cc835aa5807ccbd6296ca2fd25a1ccdeb94f3394ff2751820a8426c256bba1d1dac35f55647d4793df239f6835856d6b4dc2e01fdd3bb051c7504ce8c476f4666e369cd84bdd10e08657fb105f32e0f44f3dd6f5004b1ccfe41b4948163c659cebc8511320212ca49db072a475d8d98e9b3f3c0076b4704d9d10de6f1944aad40b8a255a0e10209a76964a03e6882bfd71d9d07fc4feea328982ec9c1591dbbb5c8c70e81f20b364288b56d62fe0e1ea0ba5f29ea54f02c7814b0a5b6a940de2630aa2f90bef860b59f8f5e14f94297a5abf3d19572b1263ee87bb39f6a41bb406c950ef57af18aeaaeb231cbfc8db086c90f6bb698d1b9e042724c7290b40202ce1964d402548491b40e05ba1449532cdf6cfe901d131edd6eb1b9e4eb826763f86428b7e26dfd06ce9d6e65a87d5e283acc7392f0b8eb24140b32510c0cf58d970be241ae19536e9de301231a7e72e2e3e08cd17ff07e4cd85c1e6ff0ce83e6e7fb98cce96cc06dd34c63a2043a282420afcf0418875067a245fd75acc30402727e9dc2fa40f1f4a850a4915ef11e0f844dca7a3679cb2706ad06348c27b0dcaa286d5d70503ed9a2ea8f987448de531d8fba3fd5ea7b8aafde4b5995835b7b421fa96cdd70dfb778f9f60c72a4ed5a085a6945845f7f7cb3f464b6cafd86979c79178f0a1f5447a1a58463ae096e06a1406622600b86a1517099b2871d0294f4ba396a5328ed14c7a3a289d72d85e9609936840771fb98b2f132ee81885de24ed3c27972a936965065fe1f7fb740dbc61b27c6add1b928dbf668463dcb32a45ffce6bb3545a8226c0b78da2bde476e79352d9ad38a0c57ebaaae6dbfcd445f02814f29d272e44b0ce3f98c6d28e55178b9f1b8f273a0a2c75278dde43077c87ea1ccae27b55ec4d765b7c227bf5cc720cd0693c4d2eb9a4d7b881df25102f6b281f09c19c231b07497bcbc3d90f0ee943a97a254ed6ec06dc7c5526ac740e2344b07b5af154bfc19952ea6b5813e8433f37a0bfb2a78c2cbc9b97e0e21a07ff254f09a0a145109e89f2aa15e6ce318ebc7cb861d6ccdff559712d33f73cbba06a6eee298d963e5d3c7ee88401df7afe80e2ee04a39432ab042fd3938c53d9cd1b06c112257771e04380857185d98a8a0f28b2fd04af26cca1939141ed7eca06673153884ba907f627f7c3bdfded82ab07de9b616410717874b8a234aabf53db2d0f7c7a55d6d9538a89b20c52e6c55d37a3701b098327e1c4e16950f51784d28fc01a5c32a7ff177221e0cdf4e7fbaec8ebf869a7a4df52fc295675e5c742db30aba8d37b0bfa3253cbc8ee7c730a11d2f7f4cc1fc85e2ed81173f52ef0eb11e30185479eba66e94bd8e0a9c348a0946c82ceb31d18dbf1910c90048ebe5ee793e849c1ae620cafd80c4482fd5034f038320389b93b87b27e3a89b26b7dbc39d884f2c7b4d90d0693c9d7a2fd68330d5d05cbd2c6e203589da7344c80c24d4009b4e0d538ecb15288f25ad9bbf533f418e479c598a06e3c57cf43ba6b3da8e28a0ee434692f167b91078220364ce46fb91a297812499d0f1b7d6069596dbe74ca10e9afb28883ff86f3c68045a3d2fa35930d2aa4a072a7a5c4566b9ece8b80e53c0974c69fbc188273d35a781af4fa31b067cd55f00ad9a8d3d18268e7ea130f70841300006a8de636ef18aa115563b3bc960854888dc3e7440360e8d404d12b2f7de5bca2da54c29059509e109850a73ce6f4ea7d8743aafcba3f7b55f92b368ccddddcd41acb8bb9f4018a31cd20142c2133541b7ba2d5dbd94524ad95d5787ba3a6ddb789359f66245625ad434d81a6b3b5a5e7a9f05e8d2ac94527a9f908fded1afa7fdc0dccde26ed720076485d5c7a5815e2d428ddc26e8b05bb502fd851c8136eec6f6b88629ec849d2c10b6196c6368758ebadd2e54d14eda1199b3a04dc6d21690f97a0eb4d1bc223dc3ceb44812f55ba4214cd7665b3cb1ed1ae8c3a887643e9642f58ab9758dd947d77c3dddf42241a8dfb69e8f5ef10d2bab41fdb69899f2a257945f0e73605ca25e434b7d2cc2dd1d00aaa8cc8c843f3e9c736592c1fc4ba13ed2b845992ea31e3dcb280540155573ea9a96a5daaf23ab6f1879c5a34a1a2ef8de1ac62007d473e6d8b209d0e51154e48d4c044934c4a552208332679327a5a42253b035f205bb6a9752a8b4cb17f847dbdba5c1fc723944e5105311032a68b4613f143e145e16c0c5bf9917ff3a14fded2bead97b71693975a68edfddbf94a9dbcbb50ed2eee3f197cfee080a9021139d3aa2e0e4fc92b7675eef3b759b631d7c6d6b005045ddfce418a7c3d4db5e716319d6dae2649a89ab99899fd3b293633898b767d44dbeb9464fde42cf9f3c53b74bb375fc1a3bd6b133b782f4095da2e25fdd722df40839c00f55d278e85107f4b513fc3222a02af76727999312d267338878131943c5612966c15488a0d020c926250bcd0347cfd288da72a80636f3a02d4fa95b54821fedb4321a6f3e36b0f741a74e170b1f1bbe3d4abf4637029d5e3efda30f9d7a4e7f8cf351ef6ba78e2dc7427ff751c7983d7a9f8cec291cf4918962627cf48a81641ae31cf63eea31397c313e2f08b1d0cec7c30e855eade02ac637e97da998975eb4c98133ed32e88bf012458f8b40207fa054aa0201f5aa39242aaa57fe31506b3c7f106484509011428b80da3e1d844211d1c140affa884b0fc2d5c31b257026c9a57157a443e95039a504c6e89cf7b136ef5b69dee7917a5fdd8a744d154b83834a051e694fedc28d2bf75a7dc6fa2ccb7c986867da976eb0ac929052476ec494abc041fd76a98a6f57c2bbb44bbbc4de11a7f6e99a86de5783180155f3f8104595bcb6e4355f3ec1e49af74de75ce378a81f3f0ca8a72e35cdc4ccccccccec5b26514fbb6f089dce2764cef5c742360c24c258c16b9e4a087ccde16b1e0ca837c2de874202b3287de61d9147ff65a0a59e96467a064cdca66519a04b233d03189b8039e6d56d20f0a7346215c483081ecc2d565c30644451ea77115d448bc3ca8846b896c888629ebd1d434b2354bf1192867e8424d65f4419d145b46368157455e1e3f24dd3bc2c03423da723cfe5a79863584e7f2d2d2e425418aea13722fd72da5ae78ea85f961d2d4ecc6bd2fbaea1023c5751c37cf63a2515d44f45a4f42aa2efece8ca64e0ff3aa5df7c0cc92c9af3f650dd086480b608a8a88f2a1660962ccf0eb3645913a3b6a8392d3ee172e82a38f4163087bed3352af654ec9fed9f9a2cce5af1d08724c5f40a42cf3a19acf36e2f6614fe4aad4dceceaca00de770b378e80c58c8aad1e2e1cc4e6f635fce01ec97abd0d8520d22bd9c94f409d9841af8849eef69458f31ca295afca32e343abd16070975c6fc257394e63a3687e17c071293a74ecea37a0f6c693aca23d55d3b3a09d3451da8ae5fd8c5fbaac9b46d5987edd2b4ac91b802ea63f66b648393ffae6fbf68fb3c793b5d1c24d14dde8e691f9df3f68cfbe89ab76f99b773a78f8e79bba97e3c2d0e92be4ea6ae3bb834976f5dece4d25c9e75d7d25c8e7573692ea7ddecb0a5e978b084e364e4a36b2d6f5a56cfa985d97499de32fd34ddc46dd791977e71bd3cf3b67adb19890e8b46b0f43b40df2318dae9a1a0269799a329011f0bf071e663f7d1b58c7e73f4e47d372cd66af33eff8fa6326f8174e0af5eb592bfe67e34a985690ee874ba73d26ee7941df57637095c6683f570a76b7bed42deb973e77a09df11278a7c745affa2bede77f9755dbbeb73d7e591d4eff60f6f1db7c8d22133cb206edc8dbbbb31c6dd5d2c9a94de56b5b8ad8792d225f4f95dbebe55548c512a4549e39c54db328de368e550105a81dddddd500ced54b99977bbb7b7b77765bc68dc82ea2e2fa51bad2f66ec0b10288e7d0342e6b4f2515bb6bb216cd8b0e1f2b6084163df165ec2e8ee6e9d8cc8ca3273d00b121948dd5d77f7a58b3a467d11a376d3f66294d73527a5bb59c6190beab760a0d0ab4d12bda250d0c2a89a0ef3b7c3c6b6850c6dfb250ce855e6f6beb8e9c0f5e8d2ac9457bc68f4395fcca85fa574a35252503efa8b192f40c41720e24b187537468e93b2fa4b8c326ab5b6b448cdc565777777a38c715d6cd01a42d8d11b220aa528ae781a382019e1a00347d7100e58ae21765ede664005d00ca8f879c30bcd895c065e10beab001983dace4150b823f478e4a0a611638c8c86b67bc2fa079bb5dd9aeeee2b76941e73777777770ea28c32464ae794f3dae8d7a5236394310ab5317ffdfa8d8b93f9c24dfa9a9c21e79b6bbe3142d6893242de3a2debe2d248c7a4cf4bb24061147679397548bd9dccbe3f9927b317a54f87d2f901127a101418e6d3a337e6ec52ceee9b1e1de3845c8e39e558988e791ff4a94323a4107a716e47bf3821d0a7f4f5282f2923ec2242086137e4dddddd85e1e6c80d1030dccc2093c821289d41320c326f04fad6abc84764be671075fafac76d9fb907cce0c120f317e526811629dc1daaf4f6f560c8883e7a46d88db4f78138a41481f41f4dc5b8cc85bd11bea60bbce6456937e78451c6abe70b0b322d4a2937e811426edb2f46d4f572fec7e4a557972663cdd3b26db9e8d1167621e1e0163d23f2ba28a53e2f6a425d9d0afae5d467a7824d6e9a0557d1af8ececbb5d3363bea57379bd4d6e5266e85f9db81cb2fc738caf1f0e46e96059557e896d8cf15f1b2048d31c698c4964412b569121263da135e51ca085b92e8c846658f0f45651a23ec96665d46e9314614eae506c218a316638cd1bb8991b27e5f96a8ecbc506329e5b60c31048505d4a99af65112c3005ee86c86ec2166434bfb0071930978715e50463aaff851480a452129242485f8a5509cc1862345268d291e1463c61c4ba5584a8a3d42c85ebce609423aaf285733dea578d416d60debf112df7cc4b711f38a12c20cb50f642ab37da00d1fb5cf6c9ff6396a9fa3d57fedb3c2f64c8350d924741ad2a182e9316e281d308c619c691bc76d5a862901b323d26b4a18e3cf4e024390925a08721dfd84512efa83158545bd0c14591a21c018230c17032771524aa25e74ec987e495f0afcf4d8ed743859980edd65f260c61c891ebc38fbe202f39a2a6652d6cc52c7e3061b01c509318242bdb8c48c002516b123e8bc608d2dd1c49d606efa8655fbc0bbacc5e9bfdcb4b438367ff90db4b92e47e9a0725ffed1c75ffec1c8d8c4f0cc05f3b2f91217df3c55a6c12dd21b5e831b9ddf9c8e6a07c6c521a7f992e89b6b1e0f8cbb784ba0c338d6d1a77c42e25499dfc0992bf3764e564e60b02ed79a9b5dbde1b5b9c5aec96e885dd34de834cdae6f782deb668b6f1e8116df3c158d407515f5542e6c0ee33c9bc3784ba6505f728231398cf7b466275f083f75fedd71f1acbb3e739934dbd91c02dbda3c2653a83389bef90bac451460b4603c26d0b9f930ce131dc653650ee3dbe251b9f0e230fec28bc3784ca6f0c0b88b33d9e12ffe828ba31ce53181c969984e85440616faa7efa01c0990fdcc21b02d94c3b86a6787ab20b0ad1daa17601c4375d9e5f3726ce7e705a653cd1d9d6a7a2a1776b80e7f01c6511e1394c3b80e8fc9141e94c338131dbec3b7e5f282d201b34347b72dd4b65c2e1ee89ccf6efed5ddc099cbb7ee32facb4fb5db56edb675dad6723a3b2c3873c9c4c4a85c88be394ff4cd534ddf160f74d5f45a517282b06e5cd8d64f74e85bcfd55c1747bf478bd34b24f8810fab8916eb24e9157f95ae813128e9156f4dd9636057c2be036dea51d5504bd4fe26dc92fe2382145ad29b706bba4b6f494f6bc9141ee9cfd3445112aa9d4b8b28c26849cf691e257086bd9d18e00cfbb6a41b7588b7d32b96d212a6cb3f171a3a9ce1835da7b45e27d016dac0364a2208a4d6120ccb154b2d1af68a2d94c25832cf68d1804aa2053d192c2925b516690b368e5aeb45174a492d3ec11167486975c76aa2a55db30c20908c5addc58ca04543334308571c83da5b7d8b8914956a126444f5a32b944cd7ecb624e1e3db9be188a153a27c40e5c0907a239807e95573a742af52bd62e620bd6a15bc6bfae5952dd5c9a64f4fc9fab7c7bcbb3bb69132842a16e20743ea8d40eff9e67460841e23ed764a991522dca48491f6114d828162dc3ceb3e99cf7c8b98f765fc51bbe2859580cd0957bfa19e6e3615ce3403615e26f349e0e796f0d49330482263c851fd52b173b627375bcd69229c1d21c9e8537a75ce3863242325026eb20d91407b44f6a8f6201503b46d62a060163738f9afe1a0f29bc50d3f5fc3f0677b72c339275346f9a2cc57f521b0c5d39ceb25443e3b7b3d4465c835e7c65870b79f3a9e1db2abcbdb591a4ee2a8c74730f5b1c322846fd7bacda8888d28ad35957238d3303580309008438ccade4bbd6a8a3aa27edc5524dc2b5d237b09361155a8857aa544afa4f4aa877a25843d6108b71b8b23e3b75fb46fffb1510b0de1135c5813a0f717483c3b6457d0bd9da52922c4474645b0f26614639c744ecc352c46dee815310ca35d08cde964db7cf4aa97fc75fde8194ec7874c0aef23c6f883d52b1f2b48c107519cd717bd8ffb8bbd75a99e81ee655ec552bfe8b433d28cc45fad12f2de514058c627f3d13766e620583aec2c7d73e61a139f7220947953c74ab2d65aafeb07f5be94fff5e3ba2e99182a4140e3a5a712f2d25349ef79a99551d97fdc503f5e03e8e335dac97f47560ed41029a3c76ef46a937e8d5e7556a5b27fbc0634f14482a8838e75289a699bcc627aa639cd4b71513dcb328fde7133ac4b3d959b4b1923932aa26e267c3bb34610e30fcee42621aacae43d6ffae2c35dedaa4899ff44dae2452f7ad1ebe5a1537a5dfc7d4defe9a984fce5a92eef1922bd8a5a1b09f40cb4f9f1f9d88d79e8a986d0b7257af3e788b56dd897e4e105f93da7a24e7f6cab94fa7694752938d3ec3915754220562ae517a6c1940fa918de684c7d968a99988dd69827b345452df5e945f6a1b5eb9bced333272afb919b87e1e68db0b731a8476e7e52df1873d9c170f36dde77f39b47cf6838ff7ebcf40fa5e3e5082f0350519b6b8eea6af7ec2d3a9ed94dec9c9f50cfdeb779ccb8ee13c0b7cf2c59b204a18bcf30dcbcf48c44cf63491f94bee96fec11a90dde1aa9c49bc713d42f7ef3c7d3add02fbd763f7ab5791ff315a364864a6db06b3cb4340c39f34f2ed5aee9ae91dc955da1026d4c5e8694212951bfcc4809970020ce35de60f490cce762d835860968d22b3658bd6218a19725f52a43fa2ad2f7e3ab752e19d323d2cccc9848d329b439f99c91fec68f1df68a5f2e2d19d7c9fb92f4925ca2a799e5a10c29c6e8d1bf2523caa1bf7ce4d21615fa279764aa16952f2f4936f9e8655a286d7d2a431e6d2793e459c9cf181faa5f9f6a1e493df59c9e9e10f9975f9e9298e76efb56abd5eac322dd300c764b9344212964c992257ef42e4fa2ea143598335e73d25d41df55fcebcae215af897a8d7aec1acda95316dd15e6b16b78d384c0a78cf9621da9ec4d8d1b0ad5c57c4b68c850a8d4d64d61bfb0eba25714aaafc52ccba8cf0c939c0e866d5ea4d35b8f368855767882b49428c01f2c59320624506b209cf3f2f8a97ea010e43fe681a8efc14a95e71a21f4f58ea0fef23ed60154c9a86e66886f845180324208218c3ea1cf107f3d23d12364c9789fd47aa19c5764a5aa510f271ac4b841a740953fc6b8462ee67428c591d18b73681af5ac63af99f7928fbe1ce567e656d8b86e0ac7cdbbb408b5e95d9f76738b10d5ab36a3b26b0de55082ea1a2b12e899de7ea870ba9c9e0a37554702ab14434da66449d750fe41616b6eca6bf3723c15e854d2ab66d46bddb7607ca914a5b5a652eeab158b75f39c7a0cc6d033ed1816b118552ca858e0372257d009c5d8a8283ceb47ccca870ce6c940381d807994af264ea0675cd4de5873a2ed07ea160981e5657e8b8488c15fdd8dc1cd9b17581ab841e7cde31fad07157a0ea59957597a7797cfee724ec249dc33c88f9e11f68e60689a8af39ee7345fdf9cd6b2932637ae53b1f0999c33bd66720ec8fed6795cb7c2f7bc389dabc8044acfe3b728079fd7b66deba0675d7f732b4ccec89176cea5731e0cedd2374ee7e280c0cf9ce38078b4579ec990243ed1f373163a0cfd669af7657e49cf48e69ccee5996f33ebcf3a8df7bf9ea71867f91a9e3a53cf16a79fa3e7346b1e12ce92f9d2ad468eaf38500fafccafcbb3c5d97038935fce2dcec92f372d4ef5cb4f8bd3e297d7c571f1cb5b16e7c52f77e113a85fde7704f597ef0f95ffba3c0a641b2e8d34c9a5917eba96467a9d4b23bdc5e5c56b599aae9e4cdcd2403775dbd240e7baadcb9606bad6617469a0635d74611320e4cd856110346d3a952e670edcd983f4ab6bc9484e2f7d937432c7a1758fcf4befa9e2a3cb90b39c0e2f8d11197d011f777721094ec2b7939042347dbb0cd5f4eda612be87b37c771f0d35b0a0d30b3d22e12c6f64bd1d762a210bf87619542c2ce0db17f0edc52cafc595a6e903d5e5f24299a0b253ff28cc4a28a184ac3e12565ac11f09273d75e613ba066da967ae719734c9787280f4cc618779d6c58c39ee0130852f85a71e92149eba56396b184d1be89fe19a9727e43ae3729590cb4f0eb83e861f67799ae5b1e9394d9d76a7bfbcd3470fc9e9598a2a4144519e100a6389a0a28d92a3f4d3afab7d2ad5e8462edf5ec1cb67425db3454247cf1ad0b30cf3d6fab4a167e8444a3f79feba817876ee209e7b8c67ffe44f15cffe4d379e3fba045d627184ba2696d1c41432557efcc74156aeac6103b6f21fcbf1d5ab634b990f1d427af6e946d7cca5b93497e612f5a14d28d05ca2411cc4434c85a5c82a58449a67437f519144462f7fbae693506493264d18e8b9891c1ae388cd376f07ceb003a0e889c01976005051b7b5575adbcafcdba41736cf3cd54ee69a6f6bb99dcd53b552ab8bfa35d2538142744d10b4a1545a4aaa7a8a0e394d0a8236db923244a58d9ee9109c61292591340a2286244a402c0e0c4dd4443e3e0f3d959225bbf4c3e24087e1c85ef9a8e4e3f3d153b1cfcf95ef6eafbccf93264e9a003d69275da36228bd12a257ec74e8999d1251233a44a96844ee84b6bb1cfbfa6fd0a6a70624d2b8018d10c051030c5a2e52b28c20c907263892a2b55e531a0b989d398676254da46bd66b15d495b23808f8aeb0026be36383a07c51c3371671d420ec0e18b026ac37b7cd97c2dbb017433e3e3e352491cd4429e0e2bfed77290544df0408cafa68551966f8f8a4189410292281ae593fc00957744b2e0e907d19524b13bd656958c573794f6b7a4f8b1be8db2eeab749db4dea45bf3ad5bca2f47c606340686d25e9d7615bb9f2eb3149aef1bb8dd4ab7528e325e745e5bce8c46836319a615ab67191e360338769d9a6719be9144f27d87cd2b8cdc49d4c753b29514f4afc7a4bed2980f0b78f1cfdd33e72b4936eb27454058ca32a56908c384808160a6221580996c250d67b0d3794760d39961a1241147e3d6e95df538b93161797971729bf8e52e29a93520ccb58a3589669dab671dac67126d3e9545b624b0b6c6e319d6a6d697171796971797941a174e880d91177ec80cd3b503a606076ec48a578700f1e3d625423c4903042091edd61b36f5b772a0e08bf6aeb2e860312b375370207849f84480209b0998411a80e0e0809f1934ac0d01ddcf60af553dbdb6a775feda152b18af66a535b775fd6c42fb395a11e3d7ac41e3d60f7e01eecddf0a35b77ddcd087b4ede1e102eecf6d8434010405cd48da252f92f75f45c8293672fc149d7f489e884e2a2ae2fd77b4a5a01fe1319a141a50a8e4e49272ca7a3135209403188b9f2d29606e0d084df7766590b592bc4b3f755d623e5208e2fb480e38d211c5a7b2444124b6fd8d002164091b31e649d7503add8d51184daae230815fe7aa45a368331fef206400deae955de1c90d363de1dbfe63ebaa10a7d69240152af16bac0738274f77e2c8fd1bbcca8febd82d0dddb9c20df5694029fdfdaa81feb210bcb43ffc18a9ed3399d033d081945c851841b5e54768d3126aaffe7acf60a6d36d77cab9fb3d86fd87d054344fd968be8d2ab1b05695514e5e899a308f15b14c5c9dbfc161501827719faa5a8373b89e474a28c52b6ac5bd0c5114afd3c7e49faa3631ea997b94f24a29bb4f9d4201451cc4f8ac49763614a24f3a987e4ebf9f692f437eca3ac312228a52a96674c0af6146f4895bdb2a75a0914288102a12e2a96a0277f13e4e4517856ed2c9c91996ff7b176b21d16506d6715d99c777b7c28b37e7ac53e35e6640c0bceb0cb6e4a4fb1b62775951efae480405fcf070aeae7238964ffc1bac9599cfe4eea9a34f8846d2c3044d48f7378f61823e6db7d47583fbd638c9e944484c548e9e346ff7c45c4dadd882181d8b6e462a7348fb1db65c55dd7ba9d4ba6f0689ab744a341897a5f4f90f7edcc7cf4daae9531f7062a6688fac524e936c08fed09a55b3d41fddc7df80115c4eac8569dc4a0faa5f0edd05ba8b650b35843a0cd1208022e5a4b687819a3559d061412ad29eced3bd066c9aa21c511472d1a9606406a60d1aade14951036429d3dd5b52a98761ef2c939893c75dfce9b1c7647582ab420c462a1f9fe8d2a33752acde96b1eab0576cde1a99bce49e4cf8d37e639bd9bee47af9827ab5742191b47f440c5192498811a8d0120ec20075780d0c11959b4da8b7041d46f8fbe23ac57f90e0f2bbea9494d8dac1f611029d2ed578c0e6aec9db6d9379230d0350b7f8bc4b0f2cdfaeead66dde82264d64dd77c8b850a5da372991fb18cff3622457686307c7620f0993dc8d45c0daca38d0a9f7ea78727131ee2ec89233333c7ebbafaea589d44040345bac61f46efaba7a581ec4420840578e8d031508448afa0c6060ffc71e3dfa90c37d600420a63097a66edc42b9d602568b356c4218595347cb82288242c053750a9320426cce841c386aa122f711263e12b6254c622935c526e472fd493fa2591d4f94ac758ba39a594ebebb4839ef926910fe92e74ea7152afd8f94aafb0f48afdc8267d49e44f9d4ba33e2f91968e948cb034515212111623a5251f6fb20262dd4829dbb78b3e912c7118bd24f2a1eb90e0c807bf454180c14957d4fda04d7a52bfc552140416bf454134c16ec26f51103fcf46d086af34bb1b9c5484fa2d96a5612beac7523e89d25aa53ca5749762598a852621a58eea5cca49d02727bdff477f931eee129dde88bedb715503209498b8c2054438220143b001043ba840a80c2f98dda14d4f156bf0d004133d80a08918d50c2b673c31820a2144b9c810e3d9233bfb8abda65011d22a83285d480103891e7090412bfad67a09f9f0440f49bffa2d7a42c66b1ad3aee997ebb187ffae1a58430c7860e5d7a3f4ae972e7f9b21fee65ae7824772facdb51ee23518c46bf187d7e4095ebb361d9e72403c19318861585f188661d8ec61fa7a845ef3221f78f8acfbd6331f7c1e5b6ea26e510f4a0f1d73e83dffadc93fccdbe4d2e419e9e5bee99c890b92833934795fcf73deb78e39a679464c5c71921aedb1fe495f8fbdea3ecc8d600eabf85d1f1fe600cca1639af7ad679b75ed18dc40cf43bfd6fb6f7d37f6687c253985280d1cc9804679c16bce1440a00511ac3cc94111117aa8d8a0c61855e67062082c910c54afb8452f1921bb109e502f7a72748577e8418da3567705c8a135c4103964697527c345eb063e60a208adee3609044480030a255add411070d1d2e2063b1e7242488d5677504a1b07980117585adab5c16e490d0fd2e8a14503e743132fc05cd0a2e165081776002028885addad16da9cd22fcf7e97a65309910e5d4a1ab87905d481f82c8e91cdfb3b1cea57bf735239d73a12d44de386515e73d33a8a9954f4b9addb9757a48e97f2e5f6f288ea9f0549cfa448cf80a46750e48e979a896869a404ca805e7e1248fbcd975b2100bf79bb349af7650fa0bfbdc2fc729510ea97d36b5e4912094da569994d4d90cd0f3cfa799ba5df8aa4507ab845404879e82a64583fe640fab1e588fe923e4b13a94ba0a79c8e8a3e76f4d4b5d993e7ce3963357d3dbf5bf743835e50c477b72a219747df8e640dadd8e3912ca0a769e0e61a34e9eb69915b454f863e5e1ea54b239ecb8b54e04cec5efe010ba16817a85bfbe8061e7c20baea9114414598cf0b88cef86f85c50b8cb698314156c0f01686f4893e422c250d010507540849ab1da0823a080721dad036a236b0585de1860d57b451650eec02823f00fdb0c40d33f3e9211fde98402718810922cd512715ed500411d0143bcc6d2802119103aac483941f5a5648643131688dd58f265c8e947c40c1510e598a682b2505f1031604145b702e3ed0070a14336907276660b163843c86aef001698b57a400cb7fab2320c0b872d262c7087900e9d0c446e4850e69e830050c47d81bf37316cf03702349bb3c76cbfa2b08b4092edfddddab188f5f0c0f5845130f896c7848e445154fe0aa07071bac3022c90a0f3cc0d113c50ba0c841b4c609e21842bcf2451cf1e6bf8d8a12704185956d83107aca0b351e42c8b19d5e81810fbd6d1042d885130fb787109230c5d2f7b65100288a2a72ac80063aa0d2faaa0688180216705c99d24406918c8761f4f0b032af4f414609a639341d6dd4184392236ca890d3dead4dcecefc5780ff6e5e034b03c3ce3487608c39def83eb2341dbd22447ad5aef5a0b67f9bc4de0d5da0adcc00d606f38e50cf00ec41ff701eb651e5af1c9533b034d0992bb234d05156d46f8d82404a6b35aadb42af54d2db290267a0bb517782f40a42baa954cb7f94084aa1ad77706976e5633d991ed4f54f8619021a0a313ed666afa04118509e8822c7166cb4da7fac4d4f14315ca006114743f88117ad8ed199a3eeee7a6ad7f74f49dfbc6eba82e5ac33c99cd1a8d083401b269bc39eb167cec39e79f4781676ec9987601d73d416356771e6b79f9a2c8ecdb70fc19294b02e089cc9d141dda77489a8c4ba161a42b8b9704a8a466872ce49b76e3a06b166421d5668a3b99415ce48da2be9f42704d4a18700f3dee96979aae8455fe2f1604b643799f1865f87d4a1f35087de9229d397401eccdb5bd28e794eaba663d3a96febaadd0e853352ca558a2dd0a6703f4d6e5a9d6af5f762f323829b168c37a1ad9885f18ffb85f1afe517c6bf975f6fb8c3f4de1131bcb303b545cecaa4c45aa33d82d8081e7376a04d0fe7e1718d3caee46871d9d2ade08cdc31027453d70edb4738f9e6cba9664eefb83aaebdc9959497af5008c2734a5a2b2ba2adb247f2aaf94e46a7a4d39553529f8ca00dca08658442c98dd7ccd244e7ee66003c13bd3bd37f2b047c06f8e89ab75a49d7a46bd3db81b07d033d7f794ec7c048959ffca7876faec18ef3ee4c9e7537bd8aaee38d0aff5bad16c7f411c663fc05188ff154d2637c5b2fece03cc65fe03cc6e42f9898b49b7c5b9d8b6f5d8bab3a94f7e85e3cd555e7d1e940b98bffbc788b5f54c503abaec37f7e50fee3e29cffbcf84f8b9bba1d9dea72984e75f9c929ab25bea0746cd262a92b38f382c9e4b27b817381732627e7a8b65dbeb3391208b4588b28c2a822bbc9b9e954a557517539abc575aacbdb391d9d8c5627a3934b0f6d171c682ba3829ed1e99abf7079e631f1984ce1c9fcf2ac53ed689aab5e9081857ef6e6666e873a47e79d9fe91743a79d0abae698bf90658e655a9c1dccbab9f448afa24cbc7aba630b26fd18ca274cdfcca1bfa03199c2d3aead431b6ef3e9399c99a82b157a4ca64867e23169d79ca167ce033dd5e59bc3f654d1db5597e751ed72e93c55987b2beb54983797f46a3af592f46abac190a8db16d7a3db96f70adaa8183acf06bdbd253c1c7a2a5ed2c3b7d6e63dadc81dad312986e84aa213895e245691e3d706bf455550f01adcb88e876ba62b9508b4e13c7a911dce5349e7e19d55c50055127c739447188f298ff1639f1d2f1e8b7844de6802833311d378833f31ae7212b8aea7c539047a5a9cca398f711e1a9a2852a2c5a99c848e5b1aeb70942fa792312ac89cce54cd690380a418a393587d3ec6187f4aae4dbae6739fe8f527561f87362dd02add42158c9afec6a7b24795eca1b29b9e881c15890c98679e0ebb8e376a7c1922a723834a7a3b312a9f8eed701dfe03e328d7623a125cd58de03d3ae83c3a2590c8e2cc8f361fbd08b4698f31724e82f3704e0274cea5c7b3f908de92f68d7355b7798f6d699339d50e6ca79aa73a17dfd1b5384c575d4777721404b6f5f3d3e227ffa96ef2d9a9763887c0b6b86de7e727043d3e2efef3d3e23f27e7fca7fa8fc9b7974ea657b12b0267a2731d3cf92c74e9825cba6d11813371e5bd8ab107aa8dcad0db2baa67760bd1f46da7fe02fbf49860ce4e3d265378986cca5db54ebda7a55a4fe5423b3b0fb3536f09e6eca97609b7f7b4b69351aaff0ef421d073a00781aaf524fc2ae93c94a33369a7ce64cae5f14c67674255eba9a4e7423b759e76ea458f877d3a93e9b1200a07b59d258bd026471863bcaef5851242188bfcbec4a0b2c323299df5853142282184106e73eeee428e26ed886b5e1165ead0e87497b6804d9f8ecd0e72c5526c8a2858d644944cbb228ab65d11659b53080730ca31f315514c5c469f302104238c113221f4859017424c0831212425470e60cfcc4c081141eb9aaea1bf28c4195b601558515e58541fab95bca41a55c6fd9a312695fa75240a95d0fd2aed1189f27c3217665c038fc8bc0f99d50aa46841df2085d00d6af65b2405109827450e24581aa9104970865238eae9b7480a1f2aa2507af6d8c21293a2719756a2ff526ca46aa5323f7a65c58984326b90437c284a97143cc03f0192a4ac2186685ae9568158a367d60d0a841c3db3ffd5940d4058f91fae1419e1460e461fc411ad54b24ec6eb46694dc9dfa228a0fc96450f91c30ffe63411ea0d140a8db18bc46d5aa4034ea0e276cc8610a4ba89a7e8b7240011b39fcb0421440a8df221dbcf8f85b44c5e8bf548cc35fe38d1d76a9eebe2d7203cb27e96e4dfbbd7ee36f77432e767767ba009d80aea143d850c6eeeeee6f777775ac51f99aa2ee35c7d0e07add9eec168f2af53b3d04f2c5992d0dc0e1a857b4956281b37cac42abae346e471cd7598eeeaf837c42d0de5300d56cde430d858a6f1f7368118dc84ee419dfcd4d809eb0104152589083ff988836d663fc6cdf368a3850c00e446c71c4c6196544d1fa9668c7d0a10923277898620232be5dfa7e42053078838830a85cc1a1f5f1d033c08a1fb6b0a2861358e6682d2b4d8008043b484304587c40d46a23588ed8a18c2966a00147966d95ff623efb4fe6b3333ef3cc69e6b5c9679e82428ccfa844599dd0bf39c6e96c1d23f3ec454f3cd1bde694d3d1b22c8bb96e90e29be73572628dc71cb331610c2b7ca85f9c0eadd38911e84c5ae33e7f79e474ae38809760bc941b1b8b6ffb269efc78e86c45fd5258f4d17351e2cd6977db2db2c2430f4cd8000ea52b780c3056605a95c7c643ef41b918e38914f3e074226f49452e18c1434f552eba18810edef105134f3c7498bd410e46fc40065676b062040c1540483e3d004d61d48a495fa8e1b2383a388c16e0e0a1a3381d7874f4841343085591050a5ab5268716fc60c41737242dd18243da86837c7c7c7068410821843e88377808218410c2174e074677e1742207008c2e12b062ecb755a62841a708e1db6b8a05407cbbb3e007dfbeaae2db595bb4c4d0162d28e2db5b389dfe228a8c6b6a54628e877e52e22cfe43fdf82f468bff7ca4f0df8fef2e2a12717c7b8ae8db5749b8f1ad44157de303247a40e1db394ea783b0823862be7d43f2e1db5508c2355ab46205503cf48cd38175c537dddc7777771069c42e01a4218d713a1d9d723a91b13c74e853084552acf86ebf389d3e1ae30675251b0f21250011680cc10467f830e4821364d96287263d5c2103285a438804e98e677c77a183ef4b8ccacccc44471c3d84a8aef9f8e8e8c9c223a25022c4b00ab0e07c6f282fc2882bbf453a38f94fabe2d97dfc161941452332ca90e04ca764aa24a24835c9c7da4822b8b336746867d817095298213dcfec3b89c84aaf3a8902593e3a083e3ad27f8d844ac1125d5d27b5955e21bd511d29762ae89208dad016ec0c7b14463178e6193cbbd1d1d0d2a4806ed952dbf013409a8f13285d13a7fea8748df694410b51cd0800000000a314002020100c074522a15038265184c97614000c879640725618ccd32cc9611432c81863082100404406404668360d6453d6119d7208c55de8cff9a5709497f3f2ce8dacc49566e1ca3898b441b196e96bb4156ec84d2a51e027f7e3b619aa5ef4a6fa8a987cec9fbe63e4402a8b25ab68a116e8a0c34126018980b701d3e97293c74a4a04d922064ca4251b8dd1295a44b0709fbf5b30482551d3649e54db45cf998abb4d7641f33fe29d9341caa62bb32a685ed7fbcce8b632fadaaf4d562268139782031962edeba0709ebf3b7e8cb89af13ffbbd26cda4f49c2b15ce248f09ed672f1c964955bc512465193808df56ec366f2524425ff3d89bd3b2ce44037d0d0456dfffb03d7cc5f9c801adfbd87b76bc7428e2ce082d9ab94fb1696d5340a2830a376534e0ce1c94a8dc553b9654027ae67507066874843762fd3f8c2042d58d214a07c41c868561cd61cdd13fc1958d6b97867e6bd49f2d995cc1e9a4ba1742fd270cbbe21247704bc77a298c6430fe23325df9f792727f3d010fbde6f5237f13cac293becc2363d08ee68216e4c24b7a2319b663f1df5b683d706196623673f5ed90d6a5ab3259c6fd17c7e4c7e8603f7b96de88e08d298f96c319c9da8be3e0a0dce1e27187b3ed052f346b243a304b92908d3eba5fbcc09b4ae323e3e15b27000fbf474c83bc1d7701ade1740ae0dadee9eb32b6f3e9188458b45abff2b2c021a89ec67243d2b905ace33888c28b439f31f547640bc412fbb75ae918c8edf19346b708146e4f24f60f1219510212af31c8e52c2c5004287dc44ae3bdd14cdb75035b1a3948a676ee4078740e3e7005d82e79e801804927c65496277e421f067f97a9a6a4f30af1862cc245afd6c458a5fdd68d1190362ae30e204a4502df2fec85ed65370b7d43211b686256910d895acd30969d58138a6d4647b538bc4bd07551a2df1e5038f2d9f21bb508f78d747e156e1ac406f949a3db89580b88ad1a5b3f1d15157191443f8f38057971f6fa300553ec175f9ac7b06660197b4ae27d264e3d28567f08e7bf1ef4de633e17c221c9752158c9d6cffb53adf57957fcbad7cdad7f368ed74cf85972de13d443d49c306a751afc76873670d1bf8308385dd94db9f44c2a6f5828dd6d3fbef01465511a7333ff65d6ac7daeb376191780111e5cc9cdbc8913854fc213480f9848f83d748ff887521c31e9cadc087a8bb98958df69bd1ebb1821e0a7cdfe1ad21edd2adcda248bc670a39a7406aa57bb16930d6e03dbbc9f6c0dfd1907d2dfaea5ca55d3992804b444675047a188b387088f3c1a4b53ca715c5d1b8aa3e030b6b5a3865eb922dbbf4467c972d08940d0f87a33c1d91a249f19c0200110ff9a62257a4bb721284f88543ef92f75f47248062150ead2e049b68b87b5abd61c0da3861704b4819919d290572565afc792e8f054aff2edb9cf6e552c1aa35b9ea1a2ce22362748b20ded05214a27de25626af9d1b221d0427be0b13ba05841cb95f879fb83502ab95db8d98ce51dde8c0958df8c2dfe5e5de28770f05288d0770597f9678806d4a55b432bd22791f928eeb039df41b9316dc0724f053f7b5000a8e4c657b45521afb00ba8fdfdd9068380f7cfbb747e6579b1b9f004c835122765d4274e08305d0581d760c1097c582b7696796f138c7108cb84e4c27d39a6c1e1e87e3c5eb2b844a5f952359c10d938c02d835196c9f91b0b548c95450459d97ae1236f9301baa272e38dee227a932f94ed0d1f0ec5be5ffe7576de2fde377ab598f041cea6cfa1db20dc3253ff1823b622e7f6b4d9619b6e1124392dc06639cda5e9ed761b3539fc0faeca4d927991b19dad9f7d1488751b955be935b4cfde2e0f54351bc75c8371076917dc78581fa6856e1fd98037e43c6d8bea42380e7721b7af53784f7047999db99f9883d1fc6d2eb558bad4b4f8598c142b7ac36ee598d28d8fee449b264475f27800b0db3a9be6800a497a1708d02fea26af5a10d78583581abe8f7f07de37e40e4efc7be171892dee289b831e52cd7ff175973457aa0d7875038aad5057c0a80848dbf985f019b446694011dc9846ff4a620b4ff1a531445cff48c96a79df6a5a168616150fe2debe5ab42dfe720f8bb951b835ae2eb050fb7c58fca7a9e8fc94dbb3941e3a784ab394ca2cd674df5da3138882ecd701b0429d1c61cd7fcf0d665a670bd84318ec89b3060afb87091300018ff030e28528fabca9d42250a687776241ca26585cd5ffcc54f2598b81b60d5ffae8d9470e2b4080fe23f6db768b50d91f9c533a2cae2aa89ec8b8276a454b41a85ad21d1fcc736e6f248baed6720db621dddf328ad9b8c4b7dd3997574b8238552efdad0400d911cbc256dde90c21b65ba910681f1020200de582644b651021b62ce3cfd3fd45a70d9de52623302ad2503bff5ee031bd4edc81f5511fd85c39a63d455f2a970be6b01494cc63e23186c95cdf813d2d717cb30ed576d48906db99b9aabdf50ca06f15c368b4666130b4a79e817f98f0e45e4c6081ed1d3ec500a510d6ff229249197804199c16202929c1e009b99e5c1da23d32399ae089ddb03942a978de2048c0d639d894c1362a9c2921e7d3752d925aca5f84f94e8cf968f38e4f67b75ce26d755a502c14b978d5ca942e3d56ec1f4287fe5821fa20bcb613948d72500cce6830c9a5e115101caa3dcf511a1e7c078edae352827f675ed1fd5c6711386e588703881ed2e2e0d42de37d039f6097df2262331577c02b85ee3b01d20b4ab333fa80bc49cbdea4ef67954c8999a2a246b2e3923a2fa26c403fb3ab5b10b68c755d05e360256cbd012a9a0227d1b80f3dd2078d96a6d8b5f23a12c32bc4415fb69f2b10b54797e350ae08aaa4bc5d68673b5008dc71dc63acf9b0511ad2ea72600118a8ab9e660691d1109210f371cd13cf0a32da17819223e85985785b78385a62d751c8ba83b7bc7c3e74ee4672289c7c6362bd8b29a1fbd9183e9a04d71c377f2009381480bd11f7512655d6b9fde4510e9fe04372079d1aebccd8a976bf54ad56707f1d1a7de8aae6ec9583d101bf6074400b3f1f6e3eebb98f1d52b3d814624830eb869d4a492f660861aa2ab9935dda75f75a552c392ff790213205c6d0abaab7780c1147557564f2ca07c7105749975a49996cab8c2f129951b29a4630b3b0bd1e608958626b9abefb130e02570cb16c9f3ef0677d339990add3e06a2f8d5b602a0a277a12927541fa98ab4dbfa3cdbb33a8b59b356a63c255d5cd1e766a47079abbe22463fcabbe86295546098ae128ca486a32889f187b07e0dd3024da976d870f14800124579249b6c7243a788fb2670b1a82cda588a38ef945935992048d2715068b695ef9804390ff8204cc4712416bee0744fa43b2a4f0b87f395e46cb8ad0cf43a8f9cc94bc1ee8f9a152ea0d56d5959050fbd1a32ecc8943a0a830c4ff930d5a6f2c01a7f51a874bd66a2f463ae7d2ff7ba074cef8e840bbcd333e4e7f8da3112b8d222bede40c125dda970278abfcec406ffeb0fac656e947b49b5f1d49baa1fa550156e2a618eb0d21287b1ea75baa0cadd143ef2d752106d3939672b26f83a586acc3961b0309a690d41c81b0197d727d50570c06828864dcb4de333ad7177237842efb1c5407d01970d166f2dc1a69e20dad4f06a525df01a8efd2df3043134e0e4a7342219073847eeb31a41bd702e559ac34cc5b313a34b42dc64f86da25842f03ce4f6fdc8e42c9b7b8ea3a69f554ff786ba05dbceaf1131784cbe1bbc6aa8803be209cab1c69f4b3e4320082eda7ad0eb098a2c5f7d089b786d3d699353a94d345c2e6a4a4356b5e4967d12775300fa8a8d560fff776197474ceec7a72900ba8c4aad2752a4d605f951f48d22f36f83580e351ce06ed90cab58e63504f5484a8df64b03881ed1f11793294623e45480b84dad6a09234c45b65cced302da350d357f64c6273568aad50cc27381efe04870d383c425c86721ad94be26e1411fa6664f900464a45b13b42cceddb35e431e28899fe63b51d93e13f7ebe38833da5127d19fe4339855396b533c2522defe57c89bfe930c62c9fbdbd474528f371c1d3ba3f385cf71efc131c9bd64be91133d65234a5fafb106aab39538a7a62df2a4e69756e4a514efcab0ef98a72c08693c5290cf17ee7a5fa6d5efc70ff91cc9cb2b0008568b75dda13c609f78334c1513c9ebde14ab29cfeb6466c39676cdeb9cf89241434a2ebde06cc393f23ae519498a05574bfd7e87cafa2fbbd86ee9b88a6c2be9699caced35bd779f26200072f53e4f2de7fc63de500ad436c08f87f2533f6319d455ff0b154ef85c8e884c2a4eb437953025f2d3f8b394086f73c9858418f6fe529c8a721749b940a9ad166ccc44e0330d799bbe3122576d2f02533b55fbb04766c9e8294f122e840d92788fb112b9dd19e9a761156fae39e26d4c41d1efe153cc841268e144a8c1d206eaf6552bafbe1709a976332d3e3679b05332e570c7a8e1eacf3d33bbb858b62c27846fcade99f92dbad35248a307a1d81f422edddef2be51a7ee19cfeaa7c65f1956bc47859b91d3d12795898b28a4500d4dc1ea81beb571408533097f1bd9f1b4f5cdb91c9f6e1a679edc3a85c22b8bb1057524db9cdc3c79079cf7e3a6083100731682cb88542f75c9113a98967ecb012635614cb44179f88c7e93e14cd3e891162cad45d65069f26c4f01c9cbe0448873d07815d4d5e2347f8dc5a75d33fcf887210eb96ba938cee9cde50d1c833e518ed9ee8f7ac28f138a3ea8faf848232703449283309e9dbe2bdba3572ec6d3a78ef929e89337a07dc99c25e6a8ded39c75cad6df80b5a21e9073fbf9628d7dceb792ad8cff2a698c7ce2b439efa55bea53ec312bedcc1a1e795ff33929fb676b0fb353761a9c577db67867c5ee05bb8fcefbff22def1db8aac24deb1f9c5ac69aee122a43b2c1a086d42b73ebe1f2f80f5374a3cf40ed32112065d2ec1d6fffd3920ef400e70de107694b88b77f7aaf058a60a1f9ade2819b7cea6338ec4e4dca99888821d20e70e2515aff579ecc32bf38de0edc00c56b4a87621ff4d31d3ae74c96eca5291cebfedd31cafa29c46a052a7319a6a0a5e600f984c57349bc9461e61dff762c51390211137aba0060c0e31598c24f9a26edbca2025c8e8f51d9ec07e042a9b4ea7632c9e65e8848b6269f46f82ea6df7c54ac237bb71dfd9ea4c2ba610bd57479d05deb2393799f6378515dfa031377f9513223b6fc5756c5ef3facd1db995681826bf467bf1e94302ed2a082669f6e32a99fb45128828760c3de2325c9947672d92aa3e5222454820fc3f1d69c6bd2fcf7709e824d3cd1f85581a55eba51affb0ad386515a2416d8815ad8e1474dbaeb89b6aaa3ed809ff0a426ced04437b6bef5895c317b2a71a620b19f2d5ac834dafd42098500a8e3aa0db1eab403199678b52aab7c1856f9aa5f55a32b5b1c1c15f5a55981ce85dee753bbe981c877d109cc9baf69fdd99c4a6dab154ca7f9ea65b237403d0a37be7b0aa71f37b1053d0cc585907aba1b321267aae345933bc2280e24518a4b13955443a134c64738902ef2142fc91ee940186fa106bb2dddd7d26b1af76a367707c68b7be1d18e6f1efd1a825d8099aca31adaa5042cab6d5998e34821a16675124b512871c387b229e6eaa617d411db895eadc682c84261253d9cc9263da9f687cb1191833dd3a063f5e32a2164facbfa9a4872916e48d6065a18b368c36239fd5eb0a78b4a650e224a36f360b8065119b8d7875e44ef00880836c8147c3e82daa989e2063bdece8e44c0fa90cb3040ae5089b4077990de433f4bee022ccc953043f212910e49b86d37e115565259a68d679e9c763340bd0fab5deaa40534f641a01ebf4c4e68510abeb6b86f19328b1ae655d0062d6a5f73b8c68216c91b0618c2df58bed7680f9b44a1d8ddd6729fa6167908150b3288ecd55e2e34f0a7e2cb594d06900f781ced129765e4309a743532403034f97bab39088af8195548cb3a5d89e3c53f4020d28e0508c808c5f2c596fb19da3173a44baae1a3be7f815d02714201176cab16e3925ce5c58d3e4ee139495484612f5538071998b6081cab2c2ae56a38f34c7c7c42b53746f0be1b995032eee10813683e5011e262dee686f6d21e41511c52e022e9316e5ae591708b2493d27f08276f56687d3ef4b7b5f8b92b0b2170f102b47fb2cc0cc5e64af28caf57ff0ca5a5f04a32ba772d7dce40dd65593fe21740f52630a19e5aa1b71fec2897d84287990e31c2ed79ffcd543d567a25cea6be7be043b16671c732af9fceda3a853702a74af52e7802ba0516f692bac1dcde9dd1ced9dc840fe8b39e21784aed8762b31c6e1196cef7e3147fbb10787f45daf1ac77b459e3a69bb2f7e61a79d536ce3250097d29e27ecaf21beb3ffcbe213c9d0a3b97e89ce13a11810e0ddc156dda5af57615cc2b8b6f6b7d733e4ec39ddb90c79612bc7e5a3896c5fadb1c96b4cd2e6dcc0b37658283acb2e0e1f27a17558ff4ac816efe2b62f86490503bdc5dc747f974dc16634ebe8eb8733d20a4f02e607d7e5ac212f1002ee135a2a452a525bf43d75b089d0f41d7a7e7e3bfb1e5646d2084ecc7e02a51c98cb14ee2b365ad2a6f7e5deb173461abd96756b9f2e2d6eb586b00e7f29887e699db051bb167a1656581a8d64e004f8d2b37ba2f8480a37e703d5c8e12f5e4686b5539ca387a27ce4c95696b208d8a860be99a90c60446737a8febf0553d4c85d638acb1ff2389505d412db491e643e7fca1ba2cf5c723e6030b3a4184537a19af8f148367a25a787587f22c2d4cafce467300403947437850deb904ded80e2a44aa82fc91be3be06884e252cf123e2980c73ac2d34ee299197326c579175d440ad6f94c5297a5a0b060da7340adbac7503f770aab33910c4b71202969883e31fa79c76b6bf8db0ee1f16b29bfe69ca64c4724deecc224c6bc5caa9e87aa5c313688d33f5a238d82dd29f9388510f51ccdb485e33be0ab048acbda4a1ffeb2a92fa5bcc3d435585ba17dad6ac6d2f14d3d9389749843c77b2f29918e7e017202a3ac283395324303a0e8618c483fe41a3954e058cfefb3fd84eb0db121188ebed6e61866885327253a392d8d0f3063a8bfb9d90625d6f91efc2c30b8b3a27ad09a637a1ea1c63fd87a00e56c085f3a2796b2973a7bd6bd8bdf327ef125047c38dd9c486575805d588723311d2a3d214f310512df2d0af7ccf0d455e481bc2cf5998ed4eeb3c27279b449056e8dba78855d8a030c1a6b8feeb09644724fd7c03a699c4978553dbb1c643c1179ca38fd94df704248e7218cca3be3bda7d0081ce8bcad9ddbd7e020ac07b071cb606df90b57fad1ee5f445ee09661cedd1fbdeb63b5bb4e5a7b9a15af81c8e24cae2b225e655b28971ec32382be6f4cc5783ef16cb275a930500979f72a4312c9f73bf7a1156acb80c41d2c9b02e1a5e7b5cf88eddbc8765ccb0fa0c277b88dbd06bf9f44abfa51f589ecba12da6fd22e8d585c3c9cea7ce95f8eb936dfcf10e1de09a1252a64c43cab95e590cd7c35ccf47800991b30819bba3e0cf1bf34bf465e03850d0e630324639e28e0922612e66141fd3268f4310b91bbc8ae0548999f53560fa725dbdf8b3e8c68e26c778b062bd09c205e199022890b60ed1a91d92d468f30b2118a0a4e722bda502f25d8d7816d8dfc8c71cf660722aa3c92ea4aaebcc3696d09e749cc2ba8b54b76a9fadda474cf90448897a2fe0698d30800bcf305989a50fd318adcbaaee120cebbc065540535ca663d378f5d492c204956a678ec156b5e35541b69295f6d7e0835f152de2563bb3de82182cb293363332a1a0bd9453289c70bbf1cc60c0260c5655b125624ff789f52d9064fc2a304a571905c9b547dcc7840cf6a8e20f0efcc8c5164b7219100171fbcb13fbf6cf853e9565c801f9149777335bc6668edd5c31cf0dab5a52b790a0a9dba6ed8db19e23e861e1960752df3095c272abad86b7ba5f7de1e28301b90b36122cf41c7be7410129e1ac1d7b68ae60a66d515ff89cae8d74a015749bae259f081502b03ee85d9f45f4d2a97089a18e19105fdaeaae12e80db07aee0a2e1206abe53aba18f3a7ef3901ef2cda3e203714f3f49fb338f5453eeabe9462f3daedb6285ffcddc84563eec0f66409a5e5139aead45c07ffa1ec41fa91701bb17ddc9f2a480427c504c5adde194cd25b51955df4713cb54d5a15fb0b571b0f68f3b80444c1725744f11150b35e0d82d349decb427a9a181be91709509f6962580929246f457e34099110115dd8d9d507dd64f31dd28ea2619e77fd5e455a076adc0ce33c6523f80911eb48fb11df7dcb00078704dc12fccd2ccc2888025d60e39ba25789743ffae17016a2456c8780950ecf2c2d663dfd91599b4801408c67822ee022cf989df81b90be2602a1db15bd617b7dda01007f5b3da1ecda649ec540c98a4c8a852e2b6e07d630404eed85f4199e30c550249a37ce7c414c40fe0b883991149fa643010629e164f32f3e9191dd6dfbc2524a08e47e739689cb469d228f99bba39c1934b280b61c110e0ee6e8e7ddfee572cb4a97b105ecb8e952d88e4ce82784d0a37572e0e3614a3037266cb0d6a989b7b3a8f4fe6632d48e2c011081920cbc142e09f19ddf2029600d13c56ea59fa891e70f7e1e32afcd6ba39327153c957b072414b59c06485c3d594c0b47ac0873523da6c7b83c07fab4a92d1d6658775355cdebb7bd47c66541486f1a161dc0e6af755b525546c0e70b503312583c01533c1ba1aabcd78a28e357a0175fcd22cc98f7b2a5de05922500a5b2b01a67d4751ef2e8a098c539e13e3230a33f39b16dcd5e2b7a7591ba5a749d8dd84190853fe699837ccd693632e5c8241f20006e0484ae14d839e0de93d3a161b117942fbd7fd14a796ad2edf246bed67dfb535c72162f362147f451e31e24e36789f46762c39c39847db38f28c15f668e12eaf57b850acb209f0de942bf4af5471d0c133ee290ecfee13bc6801b830e74bdd6b9c78644d67201d9311e1c9d5c1c9272628609a749650e73a32848ea1d98f5ef8d22fd2d050233ea2409cf9ff04cb1a7660bf706f766196529bbd04fa7ee98adc207e3772ca0bfa0f1a3656f81cda6895c0cc7a5864ba0443757d8e7322c1f138f04c0060e232eccdd4b8b3d6aec5fe087902e74004c0601118a25c5f42e08f0326234bed0e088a5114bda11184a6da1a1059fd63ff7a6c119c4e31676f8a220759e0fbb1a5260a388e077349883fc563889be3438c7062d474d6839f3b08dea0d0397560052ef954e9d4768e6394b783ba7997a6a79b94d412494f0af42793ad2a15a01f61b3897aa586ff72d9228d734d297f6af0579e4f2a7e228648b0a07d29e31f59664d435d83d43b15fb93cfd3357e0b080d25bc74c1ff29bea80df51a1a02df47c71af30856f166819962101fdc2fba6e2b597bea147ee244f7eafe28024136a9c92be7b319b516040d5e23f25e4003ba0206cc02c8ef7c5898548586bdcdae4150970c60e2895bca1e9942995ce0434bc759bb06f0169cae61d242ebe45e981ad2020bf35dddc5d1f07332141eaac722e2664620e0afde7d922b64e10940c8f00729d52aa0c2f3a341cc918b02c4bc4b7dbbf2b58a3a2ba424c5d48e0cc14cd6813922139706feb3ca73991de3cbc780f80b22f861e0e6d50a90a9afa57eb1e1f87b0d80b77c89ab920e44c4ef4535f09221c074ec170abc43a60e79b1334b672b9748bae28b9de4bcdbe016fd03110609b76ac2eea456e3116db29c96c4394ff1703af8fa6c177e35f9ec4878b6683ee34e602f5383fd0a75c8990b8e6c84e74a1870cffc23c96f4b8ff15e58ba676aad1f8a8393387912e8d3a82d3fe77353789ddab678ee13fb13e87d488e597f1719c6bed560eb9bd33cbdbf4181c74e05f1e6299c1ca4b579f45b25a3c1966c6b8aa61866376d10cd2c935d8238b5d3579d9e7588f9a237cbbe355ad9cc99a1b68498fe34a5437462a1e9ba33747516a863ce265b51d38f30741cca888d7c7e3abe28041be10dc7716789eb5d9ba89f221b70037fdbadccecab83db3b455f3c57fb29948ba9151b2d895b6eb11d5886c3e8a6add8c90e31f9b11e0f57bad879132a47b264c3b0060fa265905087c93eeb28b026af2ad86007cfca3711f2f247138040053abbbe33f40800751b23dd04ff18ec4b123b57fda4ccc10d508b07c5ca69a09730ceb2eaed0579e138943c9a476bd8af9a1fb2bf4262b00d70209b5b5ac521f92f5da5f0723b728ac538a65db3f3ef5fe22465625645e81c5301346b779c97a827b1edcdf8548ef87fbeb4c50fed47dd7a2b1373f18d32046ca202007dd1a5d040b0aec8fb8e269a84b2527d0c320f46a6d2b088e9b1f37dcffa140d1f2d4fcfafcb0c380807f894852de913c94f12bbd2ebcabd02b5dc7ee0d5d9a7c8c97965638ae37055fcbd7b2f40a5f2088e88cfa6b0f34a105e4d8a2414f251bc0ab8de4d753d76e8eccd1b0caba70296138f785802752e31e47f4c0b1b099f67eacbf0a346717e7a0d322689979a3c586aae59a8d7fc33825dc02100939e27c6b0978c12035830905bc853bb61107267ff62f376b69b27bb41e82dc81395b4e1fe50faacb2cedd57b5f6c9e5072d50a8b21706f429dc5d2b21955584834147c15b995c9c2fef8027c7cc751fac18f216f477b5cb03ea0ee3b4701add6111596f9df85c8ac60318b9e830a260fc1e89ab57841a00d17c67fc2a72c115392710aa895bf1ba4fe4b1ea513a4ef3161d66cc79171235f9464409e7e2a48990e02c9d163dbc4c770f8e43283fe064e4c0c0c0c1950d22dfcea2fdc11109406c6ab04bdef6287dd192274ec2f38f6f7f56e2156c7902b0804d8eef44b8add4772039bfb0fa8f60d1da3d6eeae943e75ebb7aee019788bfd99b2a16b28bb97e226caadec1163ce5cfe642d2c5d0cb2e3d4ccc518d9510c2f69856275cd8d677d33d2c4edd615b8006ce9f3e9d76fd6eb308ff206c75365f4f6827b89f4908f2ccddb96e9a97fab277d3b20256d9498eddb61ed6d9a5c62efb01da6f49d376724d692aadeb2cca5fafb663c8c4999dacdeeadff9fba1a1bb83a7befc090dc84c73bbfe32245834d6ffb596a36f06156d10c569938aee7eb0e6571e7154ae3bed6918c5e2ce3e55e7046db632a03de07e8aa445a83267486f0f1ddc55ac34f8cbfa2c0f499449f72f00b0f313da920fc040367446709308274044dd7f971ff955c81d1b88d1bca730058f2b705000621bae6d5c6904bc0bc39feddd982c4474a15060c640d13fe1c35606bb1db8fed70b376caa9a11e471dc5da307acd3ae70874c8c65f373d96811bdd17dcaa0443d0a1e31cc33eb173c6496df708dded12ca32c77de250d5b49a9dca8438918b98052cb7a23e3182e0d4a5ec8e5e9b986cd87a96d5caa23a82af89e3b10b0aa0be239ae88af3735f567e00bc7d7b8c7bf99b55635c3fd9d14474382a5fb678ab53febc88be98aecfa89e19eaa0b297553954a476577d8351c4db5d694996196ef04903b2911d04ace69e8b980827b33c6a08ae6dcc17d2e7df2341912e9599ab6dadf907c5b2086d2c1e7257367896f77458c089f70ac1ab557813b517590a7120c630c7354976a9e124c596996bc42bc87167cfe2db5d9cb58ce1ef68ba6e15275550d408dc86e063c52d4cbf989ea52572cd20e8dcc11e2d8d061f4ec15d23be792f9aa52b297cba7e3d2768422e11950c9bcf69ac0fd197498243481dd4c6938e9d10872a7fd76cfaa3653de7acec1c361c18f1f2143b37696103ad300ac864295ced055613c47bb3f59d3eb4cae3f24578d0ca3fad9eb96d67b04860af789e8fd9321f02ede971463f28901385e8fc02e91beef01ac1f91a83f29e98e0aa5297e06124e2c5b82db23700f3cd359f1391eca018942dfa6543d2a8b866b609d36d7675482da546fed27b442a1ebc8005e33e1be7e4b15b398e28eeabd1e89642f4ad1165a9686141d74fdcb8936edc4b3fe698baf56e241a8e46671094c71379f743f4ef3a3af8bf70179c2653aa59bea62b679df5dca81ea4d48d13d0cc7b81d62837830ad9d5364b50d3a91328398581b6abc2662e42576b0f08d7e1cf7dc5145d122a0c3ba7fcd129c6a695abba7817d1a4bd8e4c361f978569d17f4a7fa5ee66ee0fc290b06e7acc5f8dc6a639341531fb7323eb4a098cc98c92492b57383c975b9b05eb403edae6b0c045e8c15fb3b5e79644d83060d0a153e6cb4aa2b6da8e0cdf4cc1e9bac86459fbfd6567111af0f281c7b37d223321e919ba6f63dce692c11c2d53797e52fd046f6d54fe15a1e33d1d0a9b4c9ea02e04550db18d4af4a794d1436b500c87fbc87e2f3c686a36d4a546a045ac32507476ecbb114200d8fa79ff0e62b78fdd1abea0a98e7f1c05eceec6837577980e78ef3deb6b60d76f075428cece639a0960d1a11a2d570c720d8305056526b9c01ee2aed095e0421a26d4dbdf2153c5bbcb75184d16b7e05df9124927dd9dd7182d35f3b404914c7238e11a5f9b2fe3c4ed64720d2c473bb0bce36d9515545cc7c87438de802f8b755ef2965e5c971007e7758691511d03dbae2c9cc05aa7a6d723e356a69523d43a2bfbb4114c3e893cea7d9735dad7aae11baf478eae444f7af927bb789d60eec4648109b264d4cc89b76b27658257ee11a50013823e1b1e399f4046cd541d2479527337f5ae0e790a324566ee773c521292a07960d20287695887974ce776dbeb0d1457dc595d0dc78d32ac64bc25d973b770ee55d25ae52d1c76ba8d646db277b95f8a6048062acfec9bc368c573820c5fba9c7f8c3f9ad81f2762e3eaa9c1a3bc84f03fb7e98f0746d131d147f997609c86f9b1004afac00072a15ac93435f43d1b458a24de5302a095a9ae8cb3b6448a9f69d7967a1ad56c75bf987ad40a96d7cc866a72e71684ef324296a2b8f6840b932fbdc3ae10c0e9323caf9c369841521a59f4ccecbfdcd53cc6188894f9184e6d9713ecefed60ad1f85bdbf4efb77655faad7530f171e05578c1798a07481d0fbf55241014c32d125d0a16c93e75a5a6e9da6b28ac9508562dc660ca954ab82663131c37268dbe5610fa6f0216fbe2fcd5cf9cd118739b5484c2cc69b5ee4482b802276ac04f195760b09b5b86944e1e3de5656cdcc96491770f6486515c481b0ba4e8cccb2f095427de71a574b1c47dde6c00e0278b9209be9c19529693322d166843adfabdd9833456294cb4aa3a76925368e99f8d752e76e8abb757ed6e38fbe8deb22fc4d9d93a51607d11b68ef4c9f6a2f027839610dfbcbf2cca9fb58ffe0828060586f70c6b964be05c09be9e262a364fe890165a7e6a3758fda404c388f88a4b4c927417dd4a658737915995ee1e2ff8379837107508591cd8e380cc9250acc2a313598a3f3615f9f027a8a1487a85689bed257b5bcabd02e2ffcdd55c21f26511ba5c96259ebf83770fbf6428abb0e703e6a64a57a06de3b8c8adf7e7ff9c29f3b43fe4442fddc35cbcc43164f430c9642c273052ced775ddbae400c3b2aea84f98d8584a73940e70c0bd944c6e5b99a1a89f9d993e6fbc5e05b6923ea8512aa947ff408a2f2d6634a9aa0d1877384c5e6f981620f413e2c2b3a83e93b360598399552293937d1e32f44aa29264ca92fa549d621b12b59f72a9bf1f6640f35295d5203f189fe5ff6a4bca6693a85a7cfda150160000d85c3de28596a2ba1de7c9beeaa9c29e7790e98c509ad2bdc89429a68dc62272e36cf89ce97dc8c36c8d8bf0b7b7a6e29936d1e98a0cb8f19482661688d9bf9973286b7a3a657e38a40bc8e11f4dcd57093d41f65106bef3f155ab63f5bbd5257cbcd2656289d74dfe1711f84a4ba57ddfbd26942735119ed9761ef0c72bf5ad1d6b4a7c388adc8e33056e7e59ab8db8939c08fede6f81901b0d65e72f9c119f3ca1374eb38350f247a42f95ac09f57d32f708464b339d45c2b1a62ae78765d0fb05c7c9234e59c772b2482e3664c4d466b4eb3a3d9bee04123fd02aac971bfdbfb980e9132c78a85befadc61a2a0c6c25050089f8befb69fd22eef553a4213c1cfa01bdfc6e18db43201eaee969b6197c771980beb17053f774eacdf295ddbd1e984e772f831f1ab1abf1167b62023919976057086cbbf9ff9fac57940053bf1a8790dbbd6bc88972bbe70e37e4d1c5845fcc3fe7654499ac99b4d88d9073097d49e3a9b2226943dfd31f1ec67aab6501d61cb8ca44717f93f01338a004c79f5eaf96aca1906f138e64cc435618385b82bfd48bf05a59911be21a8d544e72df50bb898d4cb207a1d162ca9cb6f2b285acff0a9a1df4cf095eb97c19df55fb13fde239933c645e431ee89f5df0b8a0d66c4180cb3533f3948f33438796af23ab9e588a9d6bd0023ab77875c036db146dc91650d7e4c265d56d2d8603bbef9ff8df401e52276d159449fc2a7de0d94ee7da1b36eff5888ed129b0c20c88f4a0b417eb4af17f3bc93bfbfad6190dba47d58bd7e2be2176cab11b1f9fd5fdbb27c8a79daa1f441e579d9e7421d12d4fef984762ec4130eccba607558b8e41e19f3823128dcf54ae29f1cefe28b6c7f5c2148b938ab883029304b5b53762be9ed93225b565b062bace605c3c970f25dc7be2d0b60a7bdf7ee88f918e1de06380f94e5d47f92178873499a4d0edb845efbfb78dca95fe34308771ad69c9a0ca238537082e8e770fb2bbd3f1f6c3aebef7a72ea15b5424ca83b030b599b4a82b6fad70ef735d8d146724174945d9136dd2b048f5bd2d4404afb424ad0b32f6b5d09cf7131b0379433be79de1f7ed87ba6b4a1b2729ed0cffe0ac945e4cf6cbdb113e2808c058a66262a22065655f2e32f196a22e4a230eae7e123784906aa25463380bc4b1995680ac1055bbc6c5b90fb59a98199293fef7ed00c0a788fb5458aac9f65d7b334d9f22985801e4e500a8ba7ecf05b24160319cd854d0a68462124d5b812ed4ae9bf9ead658d5b57f79901bc74d3a0026fa8eadda4862f62842f828ba8e1885e97b6c97a2f8171d5e639c757d4b406a1441a1cd721d52ab12aa47c8b80b330327f03a84cc2968214950114685c951e974ce98bb883d7a4350768bcea7b72c82e5b9f13e3c2953ea03d9abb5acfd227c046f51f2a11613e1d29aabaa07bc1fa18f0097a434d97cc21fc4d80ee0af6928b087d6dda4099a3cf4bdc8ff0461fc53c4a1d11a12b34998b089fd3612bca288f2585e11f712da01b4fe1926b884d48ad62f55641a0ca09f5c496a53d2f1b6bded06cd4b44fcea954f351a426c7038636b81adb503a424be011b8ebc0846f3307f86dcf4a81761a01d981c342aa9250576f669d15ed5f79bd99cb7fdd875538a8fa995c58009ac037ac2c61ed5cd5315fb8d26398c4bb97687d81b2787a1cb735834d809ce557f04dd6d671f694243160a71ec6c20ff314ebfb062cac9562bf120523190de0fe9f9d84acc1fa8510622d69f9c676b28fe67797111261638aed3d0e1fe2b110f6c1cd7452d4182f7114da3577c21e6def40c44906c48af63aba0f4aa42be209ff55a336048537e406826439a1ae020dce1a4a9615fa6a941201029b61ec5c23d0a34ec34fdfb87249a073ed9eb9c0222331e0da1b7a539a353a28727dfe8074482b225cb171851a3ba8ac65ecf67aca87b487368acf63397441d2b06d14741e9b191df665aafd0232000521e8be954f57ef9cb19b09b81719a761c0d5124992509e05d4d02984564cb806034cf1fac12c170da94fb985714ccfeaf23b3cf2dd5027b80721ab258fe936b38803f5014108f8dd3f752bf07e1b7719ae358ae3f39e672b6a7a721223d96baa60f1bc91858d6d19bbf25ee39175db80fc79323e0fe11220938675c5874869670089fef72a5b427065e4ca98b5d51ae77d3e302eb84bcd3c57624650c4348663339b57c6730bead0540ee61bc66217dad0d55d86894a452359a385cdcf21c6c21942b818d59eee1c0c828a25f0a6bb4a685f80712163f8693321b04014a7bf27c24590ebec38c8caa634b1c43efc37d962da6d9c69492b1c544f652e200d4aabb9160ab30b28e24270993f44832a5995a78d721a16a2f7d7c160f65090fbfbf76736f5703b401ed501377ef6c65dde60d2c3abe0dce3146b95d05546ed7ba0f1f554911a55a08192cf04e91a53d8890545567d1686acc35c8a0bf4771fe8fb48e43d7e7f97c18b80ea18becbfe2aac2a117b62003d99fb03f43e3bbf620ac1f72684b6d2419e329bf3cdd8c22351ecdea40b5fde0f3513a4fc5b0683556a6466833a89a1edc6717f7dace6113871e1cb05fc94697c1affa9cbcc4570d80899b4e7f1bbbd413a3da1e0cfc4ecb54f8a36ebb76d59348ef74d19253a0c62369ab362c96424931d127848ba5db4fad09c81867a2f1020b029af3410ceb3f292a37147bb712bbfadd3d7c0b3273686f25d18ed98e0a11236107e8e9c73bdb8d6779b9ddcebc229ac3b9e76a40d125c2e002b6b56ebbe6a07f1a3e6c618fa72798a89be6156a870686dc14a480458b7dbb32899face6d1ca509c3e897ed05b5295be6d6dfd63b63206325b360699adcd42665b0c464d4bf4f951d15261136e9f9d6c421af0b742d0b60806f1e5e9c1aebb2be6c4f91d71b509949a9527963279c6b41c9ef901aa4048706cd0720857465106c5131df299db2f95318a50a19c7a9627e8de03cac5b6101040472745d50a3ebc3276bffb2fbf97fec16184640112c0600015608c48b3bced1b6f51b06ace8d471da5dbe43ff10fbc2e55908e4d0db558c3a1e387118feeac2ae4615f66e3582be3a5179e7e8a1cc9cf9036db8af5afd0c29b3335740eba29a933fb68dd10858c7fed7c82590553f3a2985155e98171ccec033675a5516875deaf13e9506c672bb28b9c74c678309a02ad66515c0b81394709d6585238046fc0e84192eb279d239c0b341e8bb9121f1b4691e690fc75116227bd0b37f03d69548a3a4f907f6dcf09f8cbb93a9e2ffb52e83c079562a61c50b8e93f48e0135bb30ac6c85384c82524cb2ab55fb813e590c975a216054c6e353224feb9a922c4236eeeea086749398262ee248f1c342354f21f376688e7a24335c36552a63c15f88efbc3e66aa88d40a9beef9ab13bad026df42451d5434a67864a7d0e7f938e7112d93a28e823e21496a92654664fd679e152c34d50f088e0e2aaf19371dbfcd8bce2dd34f3789b6ac762c375eadc9193cdffe9103f324b26ff03431112c28d12c33652ea719b55b6644e2d7a04cade2038875a3ad2ec9397da9183de46adf046b0268be67dfca95136d89244344b1cc34a70aa4e17ae11430b1af5f84a2601c834dcf569adbc4429526138632b5f87e6f6d0479792f0715f8abb7dce95aa8182bfaef7337d514c444c9c036b13e4d232098ba5737af6c57c1bec4e31097b925c3a98607ad6a1a9b8994780b3bcbedd925745d21587db26e27f2e1fb420262e790dde4c649a6c220fa750addf527bb6408413bdf9034563abfb90d07fb70e88418e5018c46bc62a65494cd766bc3d44b9dbec275219b0eee23aab3777c94de13d8ad4ee7be1b0d6a05d43a23a362c155aa4005ccce2f957fd5e67d271edb913ad01e17bb5100efa7f1e2663009d2376f22704b2ceb58e542b8dc8e083f403659059894f56a4a5c65a61ee0bae948ab11686e32b37f2bf4fa0ce2451a9f6411c55838a7610cb0d64a3f72dac82b37f9c74b0aa3a648bb2ab92b1493651d73a61ca9ac15487da0d49cb204bd614e4fd4da9fb7821e93956483c2e5226ad078509ff090b5e263d372c50ba68a82038b14a4af24d26146c4a5955352ac97c97d7cc45f7fc9cc64192894bb246e89c5a02950c5f95a010d079781cea5ee5f5ddee76b1acf0ae4cadb781fe172945958945600e14646e615933ab54a791050b1e8f5d4f6c13f23b76eb0dd059fea5e130f3e0ca33a5816f6ce00edee062ec7f31eff6961b74e2c8c8d18ec875613503da103afee8a73652e9b449dd1c880e0720cda8de7463405a33ce7a21102a345e63e6ed24ae52315de21f65cd4064254f2951604b2f6a12261c3b34e8f851546c08e00b89781e8bf2d5f8d3a363c835226067dc5a7caea2caf6ba1b7d63b387ad2237cd560ed4ef73118d48101eafe16aacd87275f8f72341ec4e348e4e45f37c7dafb5c87d0568d31ddb66de5aaf9abf5a517fb80e3f9cfb015ba506417aa1b0e82f45076359cd4872e83f41462893230aacb490699930a80c78c3c5c475ab710d8d12a33406c830973d77068d354e2aa303c7dc0c0abec7622e9899cf42754efb9033377dcbc1cd673bebe41884d9adbd6ad891529a7c2e298c15288710d4043fb473ada31167a094a60a294c21345ff9b8bbda2569e8911efc8edcddf560fda5987754bf1b9f744ddb1b2ced127f606e063bcc6029dc1aa4b52804cb8e6b00da3608867d20b81b73a2b178a501f1d90639945543c2ac740da20fb239e535adac258b998d4c58103a90fd91075636e11c09f1586a9879a42c9cd3c111b942f409a43161326df653f574371be44b699f67d3375b29464fa69514835432078fb6dc3e5fd47169dc155bea8e961db4f7ae20ca653d73beae6cdadde380667daa635d825f1d423e9d997afbb82f11368be4df74778969bef0b33da486afd420ae99f564a44e311aebbb91a2cb126312624a47a11a009f7995f33a7723f53159ebe6a63936c33f20ac57647d90aef4bcc17736ca8588c66dbe97a65dfce71911e8b1afc2d9688a91c4057bdbade38e6f99e5c943edfb6a6a961e92c6c983a7944fd24cf5d1db79a817258ff2fd0515475f7a1637e0c0d32793764bca2c47314276da284e9efecdfdbab391323b5d65c81a5e8207ced5a8d5c75709e18ef055ba13be7fd0f54f458d134ebe2b6f18b4b618a8f4fbbc705eaac280bdf336318bda3e2a6179036fb4447a2ebef05e04499fc9880e28b774e700171643976bc1ac29ea9129b9241636e1f06c5af9eb4ccf6a7d59e37975719f67e22d4f9c910a67294dc8178ecb38348f168d3847fb4e0333c5fc6a29a632516512f2f1cdc4c179068493f8763b7a267a7a3f12d5124e83b2debd3535e8ede0fb68d63fbc01a26d5cc986368378bdae29565f5ad73b16f702c3c077d9b274ba841f85358e95bfb197b6b8c4fb6a91d19f0875bc881a647db237ed50e0d00d44d9082c3010dea9531d82b33bc5f066bfcf592af3834b74e57a07daa5d51de1ab8fbe11259e7092bba1ae1f43fdceacdcb03b3e309f0209fa18fde1df5451b297557e5f60389036d23d4c405ca1ae4e5e65057bda3aa301bbaec8bf910b12365afaa1665840c2cfc21e9cfd853b1c6a0161c607083f40108128929afe52cd43d8a6068805217f52255080876bacc245827add16ab55619a4f30de44d2431be8cd1c466de51a3be901bf5fbd1422f6f51d2b9a0b624907807c181fb9740a39d158aa8a0fec7897a34eb9034d46665e4119243b6c402d695e4692f91a493e122327c14a82910c1a26daae1e55bb9f8d7fc04ea00610a1a67fb624c97ae988c9b54f691eeea70987272ca22c828712b35421b31793e743edefa8ee3a3811a74ad8df745bdcdc0ea16776f7691f11055dc01c242fda068858624c967497462056549b8d9fd89264df5c6d2dc425fe5d229eb16fa1d266e2b3f211e8ce335b8a1f9d87841764bd428195ac4b5c0bb5ee74be14339fa4dd72afdef36acf3571dd0af0cbac15f41c7fa5b177d2bcc67e9fe06d15dbd0b9d08501e671a49ad487294ae7d423dd9f5b8ba3dd178c3e4669877601b0803a6ddb6eb17c92bf0c846e9c486804d2fd9427ebc416da95347eaead7a5c07f333eddaa43601a7065baf4d31cc28789eae3ebb5c6c312f68d7207b42842494b20c08e28c1088d7c910d4ce4858d1c6a503d32885ac69c1f290193a7f9bbfe7c33ff178071db42901fdef070d575ba5607f50867b92494ca5a2767dd3ab3863a0062b102692b438c34d9d070aa7238d25964a9da5bea756c93956c4a69f756dbbabbe9e5fd80654a82c1769e0e62d7e177e95d38f1e660a5a80dee9a443a6f699561654618e1b2edccacae1e00bc4bc3528c442cc409c967f920a2d45761d11523b817a605851cc5e301e6d23d33800ecceb70523719aa9bbd8eaaec031100adb471be4c025af9caca99aad70e0aecb91a7cadf7470de9ad0697d7e44674ad7e974fe55fda7609dee93cea354c8066260198a55a820de1af04cfd7f7d2d5d20dd0addf098eb857b29667b095e50e3567ac19a614a44533c9d339c485946b3df8085f81051eb1b6b76c99ec996568f2e95a565e7945c045c160b7eb3e1fdf140d40a86888044183c4524032334ebeccc5ed850fdeb493a16541b2af28b293d7d3fe8146eeca24ad47fd0c195798b601e95a249633d3e8c0a40759b03584b410fc9cec4e1c779171fb9da3cf96b5ea69f238b53b5c53d28dde0c0af0215827a6f3fa46d9c11238d25257f93d3fa91b8b61852239d58678a21799c3f65d6b5fddd447f8c9b997eb467623e08cbad9681446d4af6882ab5a0c562ae599a854fa044e39ac700dae6d49561ddc301a548a78b07685277f213ed59c7aec486aaeb8b1a49e941ba625e5fed7244f974651adebe00d6dcf15cb2a5742d7950348b0f0d6022c01aa6e9c5bee8b8c222e10bffa0431e5a57fccd7252ccd1ce631b501f5043d593fdeedf080083add2729d452efac7582687e8c4938e74813def79535cf77e2966aef1b184d0930a8aa375a99b6407de0c8085ecbab2280c8b29df9785a73db412c831d382bc5e5ecd44ed8ad2f74b5373112fe1b392622d1cec25331bc4ce403d9a0f3747c39497c941da19ef922ae1379edd5f4e0921762267383e390d14ea0325f378fd07ae50c8d0cc1a5f94f5782a8372a06feec0088e24516cab4fe2ba890cf52285940c113ad38c356da04ead51a4e12f9b18abee7c7d798d4635a1a583497d9fdbed9ae759991de5ef7fbf6be9bed9436448a752c0a0d1c25cca88c20c48955ec38a747aefa7fbc248f746cea579d0692a74e426e3a2c3cc6d973d08249b03b173fccfe2c494539b52cbe4ca53b4c18dd44e9832dc926274ffcfee940985c2d63e53146cc2afd7705830a32199844895abf0b9ab8ba4e40552df377eaac0437efd08e6e4c5d426967c2f815c261e8add11c24777f5803c1ff01c765cbaed4eff20aa055eafd0b7d75d558f9806eaa08d221d7853ed1c66e384f3c1febeb2fdf52050c462bcbc69e6c76bfd1d075e0d39d17cd24f8d075e272d119fb2c530361deb6a6fce52468ab9887468cb9d0fbfd2caa686f3210aecaf0ac1791be96e599089c33119e05649dd04c03bdc56156ec718b9aef1aa27f27fa8efe63e88f152fd2fe96e3212b506344a41c7e84eda9abc0c46a6ab18144ca54777b29e1a5183309452296aaa2c4968d91e9e11ec85dbdbf93bcdf7e88eb2dd3c1509d2eb622a15d8d74b54210dfbe20c64f7fcbeab1951b43650af65892b81cf1c338a976a3b837869d43537eca7f109d0fe08f112931e7d5bd5d4fa106473da9b5788f0b6fd81d3633480cf4345144369eb4255416bbf9770ebe8ca54431e1861463bb740a79fb73f7cefa8232022dfe622df78146d44628ed469c5cda2f58e4e1997b374568eba839edb3ba6a215e2ca20960e76224d6590a847296f27e746a30debc39bcf1c4b5dd7a693dd2ec73bd7a12818d17736f90b6b2c768aec1721db4ca7d008530e4c7d1b6c7342920cdd02fefe2c7eb0b41a3fa8bd3b4b346a3f842ea6706b32d910b36450336073a0ca6dc3e0c4cadc1c0a5df1de906f009c30f30cd536f42e85ded2029dc028cc35bab1f71041fee375910ede67e263af629d37aaa4287612ad8f149b6aa27f88b50e45b5171de0166b1544d95e9b6b1e70a477be99ea7690e8a1ca1bd50197cf09caa700aed69bcf9f6360ce18b476ea44328bb8df0373e908a94452313fd477d2bdef7646b4ee008453b1f83e0f572726fb2592eb2993c5bbeba20f0bb02ee8f4033d4c48d739e7fa009032f7105c8d80810415d42554ee27c27a8238005e4e08a65505a5ce438af8dd46e2e7cb29a126daff1b32c2b67ce73bc5e78b2e10329c7a170abab8fbfa7b47e45d92146d7fd8954094ed709c2c6532eaf532cb6f293d7957597cd6e642641834c355fc3f14b1903d04d0a8a43b799640357d5647ce353d683634c9068cd653f0221530e1900a39bf177d0208a9f829caf4c757b523a19552cb26a1d5d20605ba9e281105ad4880047ff7090a0073d4fd1110bddf8377b283fe7525d0f3cbd0097257f7fd0a91b691f46c873048cd257331874fa2ff8a78d42cdade431d22dffc268d7482a146eff2f1b38343aaa0dae37c88ce6f664cc23055858b90a66c038e63e87d14ca3bf4a3291620a6876cd3b7a4a8ae69ec798d9ea66b4366e1097e63da02c0bf25d3992bd0715fe5deacd33d7c15f4992ec8b3f265162d67afab12e5557a721ddd036b7dd2df17149e1781e236f81b330ae5bedb6c3112a6ccde9fa1807bcd0ded384f0cf563ccb032b45af9f6f56fa65ef8f9aba51fcdbc36007593204a5f1176e4952d3ccd1d5bd0870e90704f71f068b874b8d7295173bc75f38502ddc1ebcdbd0020e8975994d9526c2b4debb2e01ee5db3eabb4c945ab855bcf0f85f550aa22ab5c9c6ca5f94990d07e097724e6543d0332a3f2900a0628427b079e8025afae803983da8303b54be444c7c6367b4c076d61726a05c3bb6d2f10f86081df67e21124f76cc8b7308d66b4f4dc604a6f315a9a256162897389d5739405e4c7fbbc4a4ee6ad656da5f2442ed4aea196ff8f218a70377bf764e477a6fdf18f0eab25a8d73232bf2680ad1f26710e87bd19a2872f3236bd4e109588296e7f113175d7338af3e834a4f247917922cd893800d28e975e890e620a7c15349c48339dc5974be944a6351d96c32c93bfab09d2c04127a41b327756b0350c867fd62783cf973e01d3c4a1c238d2ed7259889848296c82d2bd2dac604e5aed13a799f5c0c45a423c1a4a18a230906eb111983a3f941a3e76cd86e0c19490457dc7dd14a48e01b920b6d8335ce334c9b0f156c970cfd52ca1446e1e69d0f0368daeb17a3d1cde272c3505a2ef7b0d788857f882ad2a92abec9a669b490e42a00b7c8d0bf8387e7126ec81c4951335a4df310f090034c88e33ed767f8d549a6a7a625ea683fb54d1ea085ff13892363d56c42860caa022511456bc779dd49ea4693b0ca9bcd860759e87726dcfde9381d31f0e177b648888a681662345317ccded0bbcca2144d504f1fbbff2ec83bc149ed15f4d7621724893ea11947c0e112f0f1724ae2f2ea609854c9d0292365c9d454b83c61f0d7f02e5a55f09266a581268ccf3b7b6f7fa7d85e8b0b02a18d48f62d6892e18ed4cc7db2996263f6f505048930405dcea0d4208e3dfa3d22d9cd34863234252cdab49592a6c0c7125a5e324cd413a6be2bf65d588656ec03b803fec51cdf8104de0286f7a6da713d6436bc5b17a43842579243ea2be7cd0f8c46ae9f42d2c3984b826011be79502a571b3297d8607dd25e17481c674d5cdd720c9eb2681aa2cabb01a523e4e0c44c7934bb7731d6c7e991e0aa2f60a60db8287aa61d31237753749b3614c5c7a27b28a4c378fceb491f97e0f050fa41b72a7f9ac7d571e423221f839597c17f5b1dfef0555ae206de46636a8334414392669574d63b8744c4d34c2df9b788e6b079f7e1809b0ad006bf9252e56150972b60f65dd36af0b2c722a2944cbf668c19bda6484e1dea459da0e64dc4236354bf4b88abc26438c694f0e878e8317baf37fd8d70c50d309040363ffdba8f6629bad416dabbc8716636bd9c9c55dcf0887149b8e0720f059fc91dab99a76bf13f364d794473e1f22d66912e59abce2e4cfee9446c381d147ec44439298dc07180bee69a1eb68ea199a7cba5336906c39c60298516a9cf8445500c878e8008b167948153e30d8c743b4d681c1aea81d14c4a947a09946a8ece9f1e7dc7b581afc16195de2cb23da423ed5f6e279bbae826a395a30e7ecd0febb4956816685e31adff498b2cda42f83a6ec7dd5c74613a7b832ad15a546354d7c21e2bfa352fa7354b954b53e063fe344d0bdf80bd48c6524ac2fc0f21bd496a27f90b3bad6a65ff4af38a002d27c65c0e1511c71ea2ac25c65ed13a1724129094e390d893b90da677aa700b553269a1cb0a41a62e3a1dedeaab2ac13a4e1e8debdc145d32d47f85ccf31409b9205dd57f350d1add17d63b8b9daab44bc50383c3e4037830ab16718ed7f418129e6506fda0185f5b7e3a68bc205a1f7ac3367d7bbe253ef11d7f79659828543b389ba007e9c33f1928a65a5a8664a8674a8cabf204b180030c677f564bf612b9eb0015e22e3eca93f823e7dadc90b71d7fe9cb3ceaf12adaf02e92937f9bbb4e839893143248ea8c74f8311b5f40869c0982c7a8ce517cbcce7c1a391b4da17fe75e6510fb53c6cc7e4f10ef2500f74bb9492204e328a2ea2dcaea3bc6bd95affaf5074bd32e12e1f2afea15b4e1583841fb77630cdae7456d68a76f05a350109baf4c8fa28bea8b56b6fe58e4bba0c10ad1327222818493b3e9bfd84e14bd3d4d11547730121dd11a8f8952edc5bcbb5428f4c9419c0c877fe3e06133f5f109af80f6f6081825c5d69ac82b9dc5b7ad307f8ae9902f65d92bdc10a2564ae8cff466c84f51e6841f0b43b8ebc9db7e057871950e9ea32295743b360389ed23682d0208fca423c60be7198f859ce99b4247da37d671003e1a1c17082ac68007c050e383615b46ccddc9d531cea062d337bc6807dadc449fde27be03627613ccc456b7a72fce84f4bd9f76bcb7c36686c5c9aca2b03bbb295d673f6ef808f9f694d9721263c061a7db09d1e4df3e5ca209e199a9e1144b50e99b757776589e543c4548dc7c0b0f93888d251ce2b631e29cd2e9b69e875b30095a639532ac1cda7b71b014f044930fab6874d04d74876e77dc18ed18c1d06d6a889b27325cd5f3755933228c81e9e85bf396504e083ba0ad9a2c4c661ec47002bc58ed0ed67ad24f161f57b0d2f28b69f1eb79a07603508363b97e50a86574dc06f260b5537cd5361323ab2d0bdd980516e39e778a845a9c16c9987b09930b1b47806d3b1d78547f16cf966935445088f92b01e3aefd0103b22f88650390fa84bbae4cd87fff89a3c1198703b93b92734855440841c4a1ae3a3878a22e80d3dd00a5dd0117a47276854e8122fff453f3b54f2bc775f13de2fe6edfdb4569bfd80824fcc2fcc45bd1609ccaaaf3a8278def32fb6cb39d17edc03a518cdbfa70a3375f807fd5f49247a50baa3ad52cb2c3d2e71eecb33142f85713b4475d7b36af94f00db2297279123d653ba051e239fed79572833f2889858add68ba7a03feaa7331ba0401bd92e6b8afaac4561b669356a173f25781779496352334579027afd3da35264b23be630c564cc0d6dbf9aee0c8d61efeb96a970bbc5d827cdc8b6eb03f7d117354f1567c31384705f5c6da5bda081b518f4ca93ca116c1b6ab92f60575a2b5dd36e22f97d26b1fdaa35f5af1b21087dd100cba7f54688ff5714f4ecf1946a3f1c20e39c58848ab72ed3b1c057f209df42809b9a63cc55ad8300e5860c639b31ac84e68b418042f02da04076181be714e92f2243f6562a3c10a0cc7f024070fe51c930cfbc336b8acbe4da0f63b157d9265b9b04b6f170bec1591ef312469d1874f9b69783ca7526be60eccd17c4d0763c9ee003a3ed93e52bd2919b8986ef2bc3da06f5587bbf2753ca8ac967ad22d2eea788b9cdcafdac575d6a4936491ab25fc1cee4817c81c13116ec4c293dde6718c254fb9ec5de099366e377757b0a86b9dcf435723359a34f991baa9f129efdddf0cbafa189c94b9af8be8c0816682cc8042d8203853b6c58f3433cec70cee48999115f431f0186520947c05646f66e2637fa3ec67145b844dfcef2d24d8098c43a051200409ddbe85efa483685a1c891969a94c05850149e40f9e73e62f824b84247d2650e0b23171cd9eefd206b2638ab193e96e85caba7bd9022061584e1c65a4d3e5040c3f86e6679731be02ec5e09b3baaaa5548f69d41a1fc2dac6a796524a22022ba382e2bbcc9234cfb53941471d29b68a954e435e165c58b2adee2039a9ce49d1c930318afc997d7e5e6d212ec8382c9b2fd2cf37a5af86727d1d3ac3c34147223743ea0602a09ad21e6fad18a44151e3d3c641ea92acfc02b86f7504676a8257f2d6e04d28a4b3d3b04824338ca84223ab864f3dbdf1c82a47e8f901b6016b048976e5d5d61b205ce6a10af1fe8115c8e60386df94f6884916b16c062e09d446d64e436b172bb0f9691bba581fd5be0979223235893b3e52312cf9b69e223a3bb15fce4db18e041554357c85df6e3dac8a3eef3557c84cda62ce444596af390b637e319d3a2e6a395061b73f9fccdb342b4da38bc86d871a40c6ed524d9e6ab26fee8920c243ecf06644aae0b120a61e82a4ed269784ffef3da4dc1e99aee496e67960821d68de582a1d9309a500eb191f7551567453653b9401799c9fb9308a158481d072228b0e36533c77b4512b03fdb5feef21a70ca735eaf41a688219f0d9d90aa90207ac754a5c0106d52fd1eb738fdb02c48930443d77d5584ee8824e586cc9488c879c46225442d5ca714d15de1a6ea0efd41ec5c31949999861509ec2b65404578d5778601c98b00a797deb857ac3eb7c90e005ddddf9d7c7128548c6d0834f6638eb773c38bfa022f921c042b3777400e28d155251922817fa3237b2bf1d3032988b414fe0030ab18421cfbda609c67f8e5061d65ee57bc0d2affc8eb5e1d6f1bc80a228e946a75f65df83d40cfd0718d7895b258fe6fe4f2a65c7c5b8934929a8ccebbbf1345896966100ec651e4b58cf032750cb71e4d51e89ca9678fc88dd73dd3fecde17c0f8e8d19eef814e4f96644708058422e7c2f11f649000b374cd324f5119bfddf46489e498c9b0f5336b9f0b59f47765f10a4c417ecef674813b0d5f500c857500b0b1beaeac21317ff6c8502e61695f207ef55c9b7e96efcc9a18fba5c281306e8257c007aa9197d18ff6af4e18eb9b385112729e9ba7ae3bfe67956581d4d9d90ddaa60aa8406c7105fb6670c2adc92658cc87c467bb5f6994c0bb6995a82777c47578c19a29c13cfa480a92a2bc6797142c895618501a045ea793f72b1a373b66cec398ac919881c8a92c35910dccbcea9839e257b639434814e5af7f9a30b3bee8a034e0f23d1a52ff9233d313befa8a7b0d3370cad7b1a97b4c4359075a96376e4bd1e6b4c08e0af56f39f07fbc6e363424499ce5f4773f48b16c8661e6a0bb9695f03976988826c21d1cae391cafb1abad3c10b1bfe2afbe5ea81a461df08d1e3e8e24b997df095e49b4bfdddedb5887ae35c39387b5f29eb22210c5fdc45dbeb57e7d3ac005225790f7c164b9b8dd38c804c88a07fd34ed18f8c4844468cae9c4ea405f74a6b374d1467f75df0368ad0e5a261c7b13242e916f738a206bc0f838bb6c783061895f178c40bf0033bcada442cf94984ffa9432b403f68315312f3bc82e08f97390c4c7546d3725659e332d32013c5b6a421a79b0f7a9b62da8c150652e4a04c98d0df2fe1821348b9c98af1c4145abbd240cb98dddbfeac6685cf4c1cfaf024b64a6f8a98e63588b2ce0de069592524b246ca94e4c3dc7e2ec3325d0c7a876748f0f0a07a52a37df1a9a125b5b5c30395df1d223c0cecd8cec6b251884199198aa9025c6392d0f7de928ae473b96dfdd52252ae57ce1b5dadc37e15772618c18d6f60137e050de9d184a7092fb1a2b4dfe558f2c70458c948dacfdcea2865fb0e3f143fca9624995599b1ee736dcf6e271a90028ac3de8132b2e789f84f6f16c7d724055e5dd3ef0eff6b5652956656a6284e60be6457ee54a5047ca8a993eaf8b44da9caec7a8fd91b123417e7c193a6b6c8827188b30065d0548299c7765381219880c9193017577cb2232e28c2cb46772359f2cbc3ff8bf4fe5f06e75203a84157ec0a01b3ba29b405cec0d43c552d758fc5c414f3c5fff738cb691ab62d634e4a4df373ef72c71effb457af3b4937fe4578e6bdc3d1c40b1a18591fd1ec72c890920a25d54605cd1337d52080dbaecfb9bf66d172818046653c9f619af5502cfc1310f9e964b6ea1d797e3cfd38011242d5e3413933b2f5ca6eb787d6375f47ecd3822c45519c6d9541024910902411591960a35c878e31466fbf9940cb2711ca8a4801be07c58e76d913b79588a9f54624cd9357fb05a982fff592121318b3541a5d7b43de4b1f0c754305b9ad2227538b230e495749703be3ba5d3dec2e01663ef473fe792b39fe51e09a384d592de325cbd6196eb17672409874fd0cd81e869754cf07cf1ba527f0ed557153b74cc91445fd986840fa501821198fb9f87e9a9a9a1bde9d7159c940990ad69dff591d2b83046d3f9561b2c27550354c4f97ee002fa6f58e4e1e2f5f64916042aec1be6d84ad2997e138f3a6a2845d223c8237fa439841312815c8fadd9341d64af8c3bdf3b6043c8a3783b0fb5a875ef62993c61676a5729a4eae26ca306606d960de43994ed71aa67a61a8fef90f6651cecd7406a7480fb061e2b7a5f820cf49c4808b591bed4fe2788a2f421fc181d2f3b0eedb7e3ea98e29cfc591fce6de191842a114d31dd8869cf8f111d37f7d03ea27adfc46abcfa8243bd399aee2e8a8a88a63714933d9da5d7746bc8d0d12453401a2aceedce62a0e08e4de4c3e5063811fe43552982728de94218e5048e5ca0a9f91ddd6b25f140e731a957bcba77114a401d305b5b0f5787d7311071acda38edf3fc1420a57a183a1fa5d02b94cabd6ef2e10c4d4545e675f7117850a00dee6ecf10813350bdcf0c6054d6d36684e23ce2fa87f400bf6671dc83062d1db76cf64d9985d4be759dc589eaed94bff49aef4d694955ae570a501a55b093cf6e19b6c2b4ec850c05c5183445e5a1c54fcbbff4ddd39883af50417ea1df340c9fc7041e0627bafd8a45ad5a2140f78a36acbc0b111eeab16ac281ee60969db6c58cb0b50090209015a086d21736b5ce4d40b0aa2e634d8d181d1d812d120c6efdc767f5bdf74e1e6fead270b4dd70d20fff18d71f555963de9778fc18b2f37315723e737eb66ed676631722719888946d1ba457144639d357592b8524f5e58d644246f28747173c511a33ba60d49603639c11b3d62245382ce918c93bf7e10e58d813d812e1464e49e6504bf1c7f21324f4b212f983007478ffc1ad27c6420acfefdda931bf21b08aae735a957620e130b8b47d5cea2db96c40305e80e765db0426ec2b5e1810da1354dd61b461a5fbfa6fab164caf9047c84746b2d19b1f35d093b33312bee29fdf65ae5c6d6add64c9149bd316ccc538d450234d55b480a7e5c632ba93513211274fcd7315b377be4bdb4ac05bbed9a507d817e7d85c56d61c7e80e8cf8866352efdb3c2f1bc506fd88adc344a8ac410d67e994dfbbc95b22baf118f3426774c9950f8b350e1df9e144545108ca044f272339b4ed4f0d4128b207486e69197a332d37c827090541de65995c9f7c035c18b539054d0af015f3ab1e9e488d865d94ce3cb950a8eec2a509ef10ab5715b17dbb79963e811cc408dbf92674b1e3d10dbe56e4d97d178ca9749d5513b993a044e41488173ad5febaf2b6c1c205709b0827e9dc267e3f3bdafdde5b2e90314ee44182cb544b4bd74f186daae015e06924d4904a0a4925ef79c4c7a9f50f35847f0a9990418df7154e81d50b6320d0bfa47d2edcd504622e7df5e200eeec413ffc650b7e03c72b7b37d5404af2750a6c35453400152b05c772c420a0cf6ae94daf00903bab261cacde76780183bf1ac22cda52f74615a30bed061dc8f67bad9c60fe53ab13279d8800b6810a8ba61995d7cf5ba5e60053d302ce54a03d84e09b686618fe9062b2746d209a3d18fe2d4bea34757b9427d00c3ebc29070f5a93a652e6a5eb33ca67fca2faea1cc912a0be6b0977a3371a1bd597199c6cd03d02ea31293277fdbe7387dbc315f2c96e1521647c8558bb491cec0bc2942cf53bd9d38855e28a520828a46bc41bc6a580268d92ce02b5090c25106cd5395756b14318d01b8e36ac07d47d9313e12e6d1cdcdb2aa51ff4eb46a0f1ade77e29698c67c10e0d2415ceef89d162aa2c8204f262be2d0d665d404fb9ac307e85756581fbfc4d46ee76ab7c4b2728976adf064875c7dfc39d5f1374b01b8347d558872f5d57d9c83844b9fd7c022132f733e5cca8114796f4f961bc844c7d0ee1d1a6bc492ba0fc8539ba919c746dd4ed0edb9c57e2260d5cf8e6e2568cb705ef5fe2e9b307fe81260e0a04813f591826ce128a7184cf398422ec0096b33dc50282cd0c72d832b8f5255aa156c798809b56e920ef81a82d692af7ea1d00c4c9d54cbd5e35c866d026c0ee87cba2926e2ca2e14b352e2e535d9d7603d93a4cd8265965e19ced2c99949076ae02f29982ee35c6128138658811ea28a079b017e485362f6228a107a39b89234eac74a590a9d988a20c5a1634fa4da99cc28bcf030de99f8a43057d35d703eacaaa26b93f9fc1d44a4d329b115d9367e9ea76397e1a3b8f6a68f390aff449d0b81c08d60e6c210c46c7d7fddc29655ade11e92f1524c10d967cdc0efc412c989131de9dd6a1ca79e4309a19934887ab75fd4989b690e7baf7144fbe2ec19478558e7bd895660a8c0bc58139d11d5181e7c312a96ac3aed3dc77f604101ebab94986de21e0d1a7e7174380256329c09ac615f73bf29da0c2a26c13114c16be7553d1d63dcdb119f4f6c2e15b4b0004b34adc05bc5bbc844cbd217f27be509ea1aa8f0450abda24865f617bf7e0103e10a70c018e64dd4814c5c8c8a941c2d2eab2fb210b3bddb451a56f1d116a779029291337c8e2e5598389e75151026164d95d98512f124f5253499b58374932b354ec00e70be3bb0f1bd2978273628e257cf795fd055003a3429f5f510a81941378000cea7611db50380eb641061f39f5e37214e8afa0615faac79dc785eb99ae02a5af0f2d68586b7ee62716d778a46d671949651c8653adce5fe9575118d005831b57ce3af1fb1f55027cfaf9c9ccbb3b50838625857cfe16608f72d07992f819b629511f6f54d8276bac6878d797015d406faa910623c844ab2756da89485396d5d4ff682f11e9ea579175c3f01e7c931c1c85dc5a9c3c8b396bfca866d142019d72096f5a561a1d3aab1b8a0df4b4db6e1c1029e74d75f0f7a5e4c9ab7b9336d9c173bd202538baba0af4f5ad6e057f556c6f0856a57c57b7bbd00e297f677addbea583d5ca336b91fb8f6af661af6eb3b4e6481dd251a3ce43bc4e670e07a1d4113d8e31c0943d68cae39ce512a7af5d3188450d8ed2675ff8d71b2227679f679783364f382072603dfd6ea458ff898b2c17676758234c5d0bd4faa1d44ab330eb5dc071ae3b336beefd4605f0158db8f8d9a79acb786403d79985966ab9e6e5aff941931e48f64d35c2f034b007a7336341884d06b0e79788f7957feb09d42185331689db9572864b5fcff6aa2596408d98d6c87f314fa9f922c87aff8dd0fe1982a14654eb855e884f2fdecb2c62b865aa1e4beeebe5c13fc26488b62705c67df959dbeb3459fab50095148812e47050b885a80af1a01385d6778ae470de6e214a1b5da043f23f8a9f465c3fc929fe0f594b502a97eea3734be254756dc9024b43f99706446ce228100edf0fe7882ae66e745c12a1172d022eadd454d09cc13d376b08018c61d74be0d22df1fa3beb664ddcbe615b424aad8316c79eff16ec4f66807b5f77a68d213b21a5f39020db2557f458e9a0927b12107e63c8338c9475807dd6fa8ecd2120e3174028c5aaa56bc3bcb61e8c02a958005ff78c43411b2772d6a7943d0043a35c2904fef97a4b21c4dd9a52bae6591a133092bccba96f4179af86436e778e7d2b3bfbf21616aeec7d12d08477b087f41b0e0b41729dfec923a710edfdd3c67513c0bbfb303383cb80e4cc4be4359e4290a2afd7d137e9ad20908325b3656de08f710a41faa9c33d724887455d04c563b25428b291ae2a16904627cc4fd0c7a825b021a28952128e51da1a83541fcd56028b32525188c5be96b6bec324c4eb7416fb31271083d2d9dec579a3d23fe74545ea9bccf0191e83de23300a0e1f98037d3f8ee1e6b7ec5a4ab77f8f5f2e01995bfe5232b02bd32bca898c5c396de334a8e7a95f479d9f34d30f87f00166c179031bddcd3b59f8341537ec921453a283730aba15b8f31654794529b77c37d766d099379783a20e6c83bc43c837901debd0cbbfaf4c9685806bb412faf1c7427ac802b07948bb24c5a5da854f082364dd4bf8b9569944b97e1850123deb805a85b89ba8a4892be99cc9ba0e0c50a386e08a62b1342121979c214de46682190400c19356144daf6736eed08176e731903d6d3589420f4d6f28e050a7f16d9cb892bdd547683244f6f329119dda9e795740ceef015ac645d1d78929088d185c2c55e0faac630102aa9619ba22efc49548e5109013f6bc07e8b5f092d7592af7ad832b3e0a8e396118f7b1cda97efe91b4d85a4ab04939831721037dd06bebcc1f395139e7c45ea2c90c70bb89107df27514f5deb58182cd6d913469152cb1c37a84d83f7fc080dc8e371e7b58ae9a9daa90944797cf974aae014adc0ecd45ba999e0bf88634885c5b5a2f11cb0fbd21a92d4d11a0111f8abc25c2a092a0664fd0ac6e580af47db1ee292c19df22038b8304c1210f180f0e5f595bf93a365dd56fce94325b851ca362f02023178df7894baa98cdd83b7e5e5d5e87c97133a36b6d2191e07f5e6e95b526e6ee4cd03893469f12239593459668aaeeaa01ea769d65a49b5de635ecd8e27d7253c1c03de67dc97395325e0413905441861cc877559e3e29451aa5244acfc1e7fc7a56b9dbc52da2ce01e092868c82af23634a198a44350dbeb779e93da73bea2d43b19f0e6b5ab387570ce6103cf0f3315b1bc057266985ec46aaca27db6b604507e472666fd650842c45721b0a0f47765015e1822bac9c58c3537450890e832cf258d69fcd2676ab0c6388ccd3dd068db40d25ccfe7aec452a3c64b2dc58c804b66ac7ad33cb6b84753682d83bcb4f2ba7ae331e60d5a929dba0aa5ed0bbe76d1ab38b4690fa071e01188ff637c7d7b23b06686903403ef7a3a9406cf16934fd8af9b812e20c9bc157e109191e0c14a4e219665d8dc878714637cca34b12c6a617a0e8ac11ddca464575f5d051fb067fc215d3d601d41a70f11cd2ee811665801afa184738e640ec867e25c01ee4f742d98ff793d3f38fc156dbe66e2b4d4293dbb6dcf765f10398231306121cc65f709aca9b1e0739051a45839d3c602d035f1c8194cf66ef6850d9349647f99c448c6bbb99d649616743c2f56d35d3ee5c7586411f8118e21a476764bb3904e76b9227ddba18d786d407c6b85142053e6a779f7b5488ef98963eae18a801489d0fe96bda544cae9b93686550d78042a20635de78ccb06cbe5117d7dad4021fcaaab42ba476b6974ca19def483aabdc5954b876d69f2d2d07fc4a337c0618d9d23cb7ab76f8e73002046dd23635f088364aa285d644f2cd0a25b5d18096abc3ff1dc60c228d8403886e7e6bc7ef95306fb73e271a29ec8e667be2e37af734bc3fbcf1465af735d8e5e9e67f20fabf20b3d95794b98233fab093460b0803f2546af8f51d116c0d6384e37ef775d995389745ca43dbfc7bdd2ae47a85879b669b8fbe89fc15d1d13a6074b8795fb51237a528977d792f7eea8200f99d787d80cca99cd42cfe84dfd5dd65f099870e19870d1a7bf9db84782aafd641c64bec364714028364e3b9a9e5a287347decad1a505c2b245a6bc36301adfd86abb3911267871b7417030cda91743eac2f145c25efa65bd863fb13e8f33dd419bfc22e30eb78ab4670ef37ea731bcaa52d3010d06ba3e5f10a6e54f96e687db1f9b52f18d04b03195b3223d6000d146dfd9f5064da90e6227dd1c41021edaf355a067f192ca1bc1e6556f9e9bf99f1b24c5785fe8a59b6979e84e73acd8d4965d83ac349ba435f833dcf2b9ecf15d8cd7698f75658e8b3d375d5f1f2ea089f21d38be56ba13249a9708e789a6366e519040474d7317544711e7c9204c09de4cc2663ecff38ab2aa9dc5681633fc9168c6fe8358111be26479f2b711945aa6d2055c3afa7a4fbc2404b68d53e6b5b545b8f66912a196804d533aa587b77a8b3cb48c3887621b13170040693c735f9003990ee098416ae13f70798a05067ba5082b7faad34980b5a293897f798604267794ad9bdf8929534a8fcc4c49645eeef0be3da79692c14d71d1d3be5f4c313f499ea5a0544cbead4b5d67e4dca09c78300f0ea01aa06a618004914ff7584d68bf0d28f04a8ff4ffb09dff218699204afbb5cd2a3c981e94ae6891f3ca4ff12e10afce18c0792577fde820b6719f4432875f0ee518aaa4f03af6cd04a2cebd0c19845b2c5aad975242c6219d0b262211d65db5d2ba0f8e58cd9833ef9410301507cbc3d385a195005c26900a61de55885d528355ecbcebacf454dda19af73711b8183acffb858da5b81ce5c003db4f6dbec1e5217368460e8832f8c9693ba748b18022d2a85c14acb6bd56b3fe21bea9229e9fd722678e2f668cf1a0616647365eb9d21b823f4080b6e8a9c122f8fdbc7816f9ca1121e0071aa2d577e9748bb09fbc9507e448f6168dd40eadffc2e0c3a5a117ea9bf9884b851f2f6e7a083181d947fed99149b9847fd9f43cd577846e219a72aa787b0a62d6816c1b2f3c9bdfab2f06f61572295f47e524e0456f0a22927baec422bb58e19a2ea1d2647fb382c694683978b802319721d153b917d403b0ff1b6ecd5ca8e74233c67c93396c58a2932ec484cf9c3241deb608004c52c793eff69381fc6e2d7de298b3add988c9987f30bdfdbc584ebc43d91bb36fd50d1442175dc590c09aac8708b6fcd91bde644b3c2254cc91ebc7ff8ae6894f262876bfaa2196f679eb4b74d0e315d56b42322b4d6450713a949f41c98ebb6f6a2a81e915dbfe163dae3287ccdb01f88b22fa6ec97492d57e781ad1a71d0c42b04657016ad8f38eb4c52f5735d03ae7460b08760f0b0c8514f71a327377c8277f998bb2ed050efd8418684777a22781ceee6858a603b5ecbc70dee26bde5748d0f38d3eb08e19347b993f526177492c81c6452e7abc00dcd27c6defeeab40e754e1daaba9f7a1706881fdcb2d66d4d1dce475168c88faad04d7416ad785e5e272233cb4e274119866a9bbde5acbf6d1964c3e5844cd11a742124df34f8ae61a451a0f7afd33ad675ea48d439a61eabb17f2faa5165df78075044dfcb51dcbb48d56937ee5bd2f9709f24900360e13421f0ca9acbcddfeb105ce887e0923d8b7136bd978d1723feb010ba2482dad1f246dc041e0b26438d38dad18df983dc5e2ae1f0eb207a6598b98b09e77925ee080773e5b88c717a59b1913bcbefa2d5e9f7f785b7b632afbe702e5c436930e0fe67b1b87db613f4e10494ddbf82779a0450e6c5d969eeb075fa4ebf969f7e6bdde9e596f00775264b50c63294a10c550689251ce15914e5afc05af9d9f3c7321e097c5ccf8f7363466992a1cfdf3278b15e5787e073773cd409e3259f183244307cd11b2ad62dd156a26b6af660f5473faa9ff6a17d8a046b348166d0ba205348a0a898a34f3c6f74acdc3af072b935194c946a5bc25e08305fca9ae64f48efa21a968264168ae7fb7d16e1479eb272000b90cacbe26a5d67f86129bfd4c7b8d5e6ddebda335f63144606f9ee8b1a26f2b509db1287432427230ba161160ecc8ee60d04ad6de8a54f23f053e1a5290e806c273cb03552c2c2bf1654bc05d257b43affabdeef9764c82d047b1cc632279820f5f105024621e9885964fb51f73a461df88d1b903324de192b381567f83a01b1c2e2744f71e14383c0a3591cb922df3c28271a3cc48312aee4eb33f31135dac8cd0b501c2754a3033ac18a8d592092b29a0e31e0fff5a99eded55fd338ae13f8eb5b645f1b718807c5eb085f36b1f65f0dd76f49ef41a25444f396f500ee160b804010e8d8115938bfe8bc5383239717e76145671f8c41b81dd3500b697befbda59452a62465960862085d09dc56746da5d391a015e5f6721b9d95db8a26a5f35624aea5d33a12289437e43ecab1dbcb6d954e6e2bbab6d2691d09ecfe448cfed1c6d87943fcbd799ad437eddaba694438bdb6723389134ad36850e9a4b352edaea2191a97920105ecdf4779123841f6bf4684e2f492c08f53b25269ff3ee70db9eeb69b49a452536652dfb46beba611e1f4dabaa552776652df345befa61151adaddb4dc2a9adda4c62e667a66a52dfb46beba611e1f4daaacd2454ee9ba6eac2f5cff659ada66db60897123c89dc50a23422beb6dfc0234c30091dd902f330ed701cd7514dc359ebe47793686884969cfb9543777a9e7772213a3a3ad7eb3c8bea9d1ffd924242418208803fb439baec1f9140ad7f5a835e0a5d7be408b78c4902a1ba477910e8ec8f2f8763e9879646118e481f1ffe86c052bad57f3f69d4ad9ed247a408324af4d12f3322f6e86cbd1168765042893dfabd23a0e4bef65ea949a499335cdbba7669e04f94fbfd48304c7bd71e09866defee1ac8a2dbe6eeeeee5a0e77f7eddd5de5abf7d4fbe9dd71bc738e72f7767722bd9e44fca7f7a9afcba1fdc67ddaa7beed579fdc1ebfb60d49a13e8b82fd7d38a0bba5b4dddddddddddddbdddddddd2dbd9ec27c14c8dcadf96fee7f4122b1873f37467ad47684dd789a3f7d1116b3cadbf941fd69e6e31ec727a3fa24ac3fd68e373fd68eb633133d0c9c3e7aedeeeeeeeeeefec51b4ff9d4464971711c8a514491a5bc49e2fe80bbe24a998511596eb2a97fa494c9989154ca92090b2d32f793fbcd1bc27943b6a9612143d6fe7a43b43babd86006b71b8354834cf101b8dcf0c8fe2388155db22071850bb2cfae48cafe383a4830581194fd25ab68620b1eca3e9cd4d8c0f867f75eef878d3c7ffef5625ee439dfb631aba2897a3b1fc88e8a28f2fc4905530c58b5922a9b1b1e4872f8c327961c462d394731d3a76432e5932e221539863c7ffec5ab6fcd5c90e7eb0821b273a5499e5f42912b79be09476c90e7af2085975817a02b42424bf27c394474258da2232b8c8af29c4d61469e5a9a30ae92fb1b633cb7f4e0cd392fc6af8803600506577642ddeffd2ce878a73a6cbe8543a5b7a3f32a4b26c70acfd4e0b0768cd6d2b6e764b7c3fbee59f8f3fef47518778fdfc3ddb33e0993f958b079d6cf7c2c446141c7a3b61dd65a6a69c78ee3c021f72988029f6c53d84016ea37d0cf7aaefb58da83f03e30ef636920eb02f8bbe7c1df134503794e0f02d863f3a7dff13e308ed3386eab31aac2d474e44665b491c31f559874c861945571024b0e23166ed38ee6a3b0748ebca269da434066ed02f8bde7c1ef813d51b6df01f6e80059dafba31eff06f29cbe037b6c4096e68f7a9e7ed6f7b3fef433cffa64be46f538bed4afbe1b343ff33faa97c1b8a6fec6fffcd0fccfcce33fe1c032332a9a1b37be08c3a9d6cfe9bbc7a893d7c1fab64cd2fc1f243830ef8130ac4550c12a4b50881f2417261f0986f987ae6ad77cecaf1f201c983f120cf37ece9ffd4e644793ab2244229028b4d3547374446487e6a70ac70c63d3fc1d22dd3a72725a226251cf5ad57c8e9aefbe1c39defb9a1c389ef5d1636939fec301bd020c20cfe738798feeb54f64a70326a87094149722536cba16a5a4e4af1f3f947e28fdf8b1fd6b393e124a88403c8a58e44924f698dbd3ed2938e4a6c0d272bcbdf138fe87e659a830628ff9f64335a1c4f0504a2833f2fc88528a3d68cdafbe841c6ff3f4eb2cbd1d1d9fe363a1bffb9a8f859acff15447c747c45df36d82fca8f9a2689fe363c1dfbb79f5389e67f538564f411e1ccf027bfa71e0f856cffa707ccde77d8eafd3409ecc9d683efc331ff7aa4fa6cbaaa59d134a89a92906448449a95b734e21db3252d493d79b76d57f7f9d401d6f390e77fa20f5753ae704467759a93bf5e4fd06dcbdd347d8fd70adb5d6d3d77a025994c5aab5d65a6b8dcd10ebeb8eafded7d5d71b5f69be9e6a8e8aa3aaaa160df5c9587d8db389b0f63070fa6adefb582f3d16f53f7d0cfd5e8e5fd5b06c742210ed6bfd5abfd65a6bb55aaddaebd45aeb4bae56fb9c7d0e1cb24deaed0d4961a7469505db1cff73e3572f87504712a8ca58047273add569d0c0ce1381d0afaf81f82a4174d5af3dc041aef5043430eb02356ff325b05ec74b6f67c7e3a21d9f0e1b2a066328ddaa4f41fca45bb556d64e4d4df4e8c963a1dffb9a8f8528f659f03f9d9ec7fff416fcf0af3ed4e3f864fec6977ad5d73dcd37f39bcce3d73ed6cee9311061a7df4084adbe08bbddcffccf8fcc67ab57ff54f1671461b5d68a8d720ca185199fda324744db06b22a96a90f31fe2933f3da733f5f16c929fe42fd2432ea74c0d2aadecad87ceba9c73fb37da9d73ebc6df8b74f6df86752292c2319c0a3bf9b76cd7f7f39a833bf9d12b6adb5ed7d60da2685e4908c49209d08a4022941ec317f3e10f9328174cd9f32398c4b32db96431d4e76a91e7057f0849962551d05c4977441675a50c6284f907ef5cf0fa315b7398599c388b4937afcd363557067dbe4908c1d4520afdc7f8970d18e0cf8f3e33df75c773cf302dba79e67fb14d813856e4f31873abdd73df7d1c34084fd6caf512077cddfb84e1a4d91321943f27c66a366e034e003a3afca92e357a7a408e4f5455704a301b294b0edbe7ee46ac99b0b214922c9341724f9282d1229c618a7f86b4e3c021b38c66fe54931296755c6643905cb8d95a01c0639f28e533ae789ce9936c8ddd1dbe95e48fbcaed57ed6f0622ea09ae5af993ca295132d414d4942c93341fef2e86eb03bb3f3feefcd479234f992735ca3747cf280be99d22beb217ecb9160c8106b8be0585d8a6ebb8cb5ffb847c3d5178ea5bb0c7871654da8055b0e52e7f7f1a0697b0a3433f6ce553161cce13b69dce913b9dc3224176676fb06711f75a241998702e15489c8c220ac50c4d06d30ca289fca1530691bbe27d428720328edc152f95a66d8bff80b71c6736c486849a6ee4385312832b638c3fbda3de63541ba38e4dbf8488a05dfd57856d5652043ec8e8ac74ce590be3196737868a120e8dd04616267bf714822907a8596a2ea8907d4686c32eb77f33c7d2e9b35bd64e195a4add4970d5961dcc6959fd4110abbaeb564f240ed033677a7bcd9daa73fa43f7cefeb8a50fd9a93015d9f1f4963ee4ff0643bd5dcb0478d9c113baecd37e051dd32d9ff45e2bdf3b2a439f6e7977e7d3d8ada965ce5d7af4767b9a609419c3c0671759ad40950a34cf4ec7adb5f54178211d5fdb6b6058ffaa2c88bbb581d57de6facd6e65af95a63033180699a04f7e0a44f4973fc12b25d55cd896c0e1f49ed9b1a2bbfb649fec5e486bdf3e756bc1209186383f8e3f8f1a5345e070660f326fe794fa14eec3f8f4b948e7830d26e0fe002f8165f7f4de6212a1e141274b19ae5654a630f3093a59ce2f73ced9d57afaee546bd7ddaebb9752c9f2de48f7feddfb7bdfdbf6f73ef77575dbbe13baac7dfdc229c4ad34ead6fc227b4918cd1aaa9595b65a7bdf6a1a1806b1945efaaad58db4b652ef4236cd974cf3a5987973af04c355103894319510388c5d7cc01c57c10f041db0c4b982d1b6bac3aa9b6f7e1f750e9646eadb4842fd538588e44f9064e2a4736a0fd55bfb3b70420f92cc454460c21115c0c672d4ade9b15a4bb7e64ba358965f5762f0d21118a60ec4973c72d7944ccfc5949c801c675cc0903919a45df3b5acc26be5de8bf16ad5c2619a63da359fc92a08fb8f875fed3fe592c33e3af2570bb56b4aa676cd47c2396ac9be8b5638b875af0c1f39c8347f1b839fe4f95c942c9116304eb0207549a25fccf289146945fbac94750e05af7ce256f00a71229c86cd328360039e6f739c6d3126c725987efc9bae73e8af7228edd93d26b6e2085bb4115b31876efd6f68d3c0d58f37a1cbba446f080d1b58e64e9ae1b05beaa456ead6120ff832c947dd925878c0da735ae0b6d2044b314c5a4b73e968c660f98aaef8da1c7cf905e6933cbf8b662b758bfb429b375013c324cbb7db0cf3c09d1367a6a01cfae4500569c66099dba91ce3b293b2fccef13cc7748e3718a5ce11e3ed323b869b344dd8feed1ced6bd7c7aaae4fdddca929a5947ea55f51f3f485329f1ef5c5d3e7bd4f768ffbc9759cf6515a2badd7fa0ffc83d6203fe6a4334e6f269cff6c8125c719173139f4e10df168d8c0b13555373694d28cc111a7d2a871ddbd65a5f324eb50444af28c6446b249063735dd26dc249beec5d84129b301fdb9ae7b0095c98e64324a69cc1f6394c980443221b2bbbdef5abdee1ef2ba3b7753f9343360d9b128de26e5774bca93ec38aea35f97ba4565d352a62f9b8086b8da3f4c3a2776500be55aa5103926fc7c7a8fab6078023b06caa66ed19843d9c4819e9782cc2f9bfa2561f43bd6395126f94bd55f74d1775124fa15fcd883fed605ee7a623f40f5e59074e2757fbfee455f722b027f91ebaedf5f334fef87f865becb33bfd8926e5ff0fdc18fe461188ce2795fbf9f3b7943daf3bcf6da7b8fe36aed34289c56eb7b5feffdae7b8e6beefae4ab7dc76d9ee7717fc22a7baf79433c8ed3f276fff4b6d6e7b83f79f57d729ddab7f69cf6427cd34069a4b2e9167d82fb6d6d22ae73a051b93a63a573822d24949b49f3e8eef7aeaa0631f6b7ffb1fce7576fefb22af74f9b150f1e4126d03a2e87ba78d32d592bf8607cacfaf3bb3e954f6469254b5928ade4ea848b37343fc0da6fde12ac5ad9cc493bea0db98ffff4797af8e77bf8bd3f7da14feed41bb9a9e7de27d78a535f44e1cf275394f7d53b7de7442f86b2be7d6e5ebf17bc55e6374de6bb9d80a7b5de1ba4ce695f665b55ab9b396ba532fb43b412a4821084bb975f73b5a9b97e77afb5d65afbfe2779faa2bc2fefbda95e03984825c71917a2cc4528c799164f72d8000e05812894e30fe5f8ad2502692d5d151cae261081c81daf82fd069c3f343be692074a298d5cf522fe13c5dfed3f9dbc3f61954f2fa44f20abfbdbf350f7bae76d9d4fee2aea51ef7da1fcc9a82d766b935df5429facf5e9747a08c47c3ad947fd552177bf7dde873a711fbdce2777df095de6408d08e9a33ec99528d76ed9c6f50a8e3e8d1a9d032399910c95db27fb27b3ed6e69feeae91cacf67602b4a75eec56c4376afe3e40b9fe09abec43dc863e41924bdadcdd883fce1cf771868314d9276b5fa802e79c17e9630a71fa49a3e6127be026a4298248ca710a20b4e4104f0184159a1fe0ae5bf16966c091557572224eb7242cbaab95e3fdee536a6d901fddf2f0477e996d280585742bbeccc3080905f9d774cb80bb6590ec30eef65f4929696b15039e1050ad50905987873636b1876f3360bc3ae2e20dfd39e79cd3dd3dca562b9f784e5be79c3e2794ffd12d2a4abcd0238f024950e5fa73ffed549d96e3ec0649aa0ce2141d9da41d9c1c4185e905313c2a5696d820e689142a62a8a2c5802584f9853ba1cd90a429a00c1e82c869395b633684506c0621b69831a071c307da4a6605e4d811694bd29630b95fc81633726f5923770c95e36c8b0df214395c216d32c0f3ca2d4db856b97901145894701a7035422e11448b417434d4658bd00d5b9224d9e242165cd71012d34be0bbd448d87ee14558260b79650a1fa86cc15b8e332d4ccc60c4137c739c6911c297b0cd71a68548cb100fba2a3cd0a071e1aa2809ba69146d5560a8c112694d2fa8190da5fba509cd3e28b2516899410d24254d445118b1a4e9280a1d6e4843298a201a9a9adc156f164c9ffa81bcc19226404b928851d2d44ae02ec799922559059ec971a6640b07434915320bacca71a68409a15ab57e2c331c7aa030703d208a331ca79a69194f356e547777f7c9eb9adb5abbb65bba8344dc1591c0ae74ba8eb74bd9dddd957ef7ae56ddada239b58ff700d2e054a0194fbae3aeee1fdd8a3de21b99fe2c989f7256047772cb5df169f247bfcccd29dba7fbd670ddbd489e3152804a778c51eeee3fa7d35494f7a4446b91ecd5bc21f735dfdc5e6eab74725bd1b5954eeb486cdcb66979c2715c47afad742261af4bb7f75acff386dcf7fce4f6725ba5333660f9fe37e6cc77f78eabf958cfcd2f94994b6e252eb9959e34141ed6eff8e85d80f53b408ce4aedec1472c58cd5330383aee1a0118317658e2c5121148ba5fc727c4e6234225c7e7535c2689349b0aead60b58e6fe8908a5148100c93d1481e0d794a89e4e2889266bd57dfdd5c7aaf111ba9f49bdf7c97c37f3712e6b9669a38d36b28c0c28853e09249b8881437c24899ac8275c3a27c7dfbdefc7484e9a442010889cccfe1ec6c2f22eef7d32267fc2ce8e8f3a070556a1021adc608a22cec0420a176fc40e48a0c430f4c20b5090b9fe6f2f8dfc53a166ceddbd53a1e6eeeffcc28ec918972624a6232559928c8bec8f5a7eef6ae591822ad0cc3d0762a46e612cddb22fb305f15112fe23aa24440f5c68a103106cc480c9077230424c521959d8f0037dc52c42526458c4e4fea3dcf289a02ca7cc600c9d7e846585ce61ed482269e42f16b070a1c5c8852f4b66c09a044c3451eac1884a1a6360fd92a85f16f5911350967fe32b22a384e633c15dfdaaef88bbfaef0ce32499aed1a2ca95a55c656829cb2a57c064f93c9d233914ce0f9c12381cf784702962c24e09a931b0bffcfb4f6660566445f0dd2591524b388c485149cadf915f82fc6b2532cd2eb813b0fc9bb0933e1074b072e0a09949a13c4e7b0ab2787aecd39bf78105e07d60adf781b9de0706fe0e9b9ad50d950c3e755febfbc042781f1800de072680f8ae0f73815bdf0be05be10007e003c0d7ea826f3e219f8e120e75c00ffc9ac66e0c62f2ff23e22ef9207c3806bce32bc15df2757c45bce0307231c15df259df11ad081c46a59a1c35396c929ac47e2be0f864cc6a81c3d87483e6064db44a7a28b13c2471aa19d54c2a87ce288794cc2781529f14fa02e34f0ea13e49940a83433974f24e9eccdd7786c403528b99dd27dddd45ee320a0387b2284f71977ced93b22e389453f291bb90c4a02fc74811fae598e8724ccb5a26bd481ff2e51839a65f3984dab3fc2eea9c381b6a6aa3ae9934513f692859ca9fde2d13d35ea418d9d4561c029e5d7a91227843e6876005c6b9fba75b32d62df963c62835007c660b2089949528168bcd506369e47e192a148bc56ab82e20c9fd291acb626fc8fd7812c5623126764bf743ee474da1582c36f4e53291fb4f338ced8adcef31f519dc97dcdf25c562b11c7ea0b91026f7739ec4fee4fe8d29168bbd8086b943eed79262b1180d53890d22f7df1c3c879494dc6f5b168bc56c2062b322f757a3582ca68314192fb99fd630bb2fd090c54b92fb5da80bed86dcdf3dc462605040e45e4d67f2ea60fd2a18ace4fe3875ecc0c52a937766b3c46e4bdf2f710b437267b84d32698856894ce5b0111165a4c83bf3b244ad8b8ea81c7e98e3bf14215230bc31c67facc526f688f2afcdf6d176ad937695b405d9fda65f0f68574f1e39d18a033a506587a70407cc18bfd894c0aa04f40040d3c4978ebbfa9d3582ccb43d4aa97339faf997e0ab15c67ebf3cab4dbf74dad5df11482b81439d213e527018b988a08d223e1148ecbaf564527ffa91f6cc255a01b0203aa3082c64e850440849e80006144fc04051c2891f4e4e1cf1f2050d6aa71c676300592e20dc1d463d80e2878a0e7ab0d48415ab26be681954435021a58b51184bf800021e9811450717b25061a589254e513461652e19c0892fc2ec00040d5a5c11c412a429bc3062430a2c804e4ee0e0cd3057dec8d51849722320c7d99296252c3a98ff4d2743c0ba9b495a7a2262993b664fa0738680cddf9982c54341b69161fe4558ad957e484b4295ba4b11b606324129d22745980813d53c8d3a87be3090101b1d0022ea9c3076c14f3a678a1126499b4074cd97ef58667cefad3a92c21cc55b79740be7fa8bc274c4c248a1b686280cd1a45d80c20cd94a29a5ac9dfe067b24cc07e632601d77cd6f4ce4aef93992c41043840329a5f4578338ee9a53a85b524a217f455f252159973dc9914ca29452b69c1fb3a4418eb33064799a20869325ade5534a69900c107e0026ead6fc1b62fc60224a29c5449d23411edd9aafca121990e77338a85b748787c6071c62a0880503758ecc4268624b7169879455b66aad2ad904029a8541b42357aa12ea9cb035d439a14e50e74c2e661840532987d8499e524aa9e32f2c34a403e42e2ee22b2e31edc08399184b106981cd5f21be3e276860a2862a6e40220b6cb6fc8581dc35315004ead6a45f00e5f947e6af30bfc87c13a69321600ec60f725004ebff9f6f8443e5afc0010f4db0306a52031734f11c7097e3acc90f5d609a1c674d689001873165e00006130e5b92582a5600b9190ab85e8e33a5286550cd75e8eab6b44eeb9ce08aceeab62fddb42d65c34a4ab75ddda3a494d289ddabbbbbbb76a3c63581a4f9681c9ce8eaef6d898f93874add7cf2646cf6c0f7331ef85e4573c3bdce93c009527876dcaa8b32c7473c800a88ea553450f99043eb3c12b419504aa99d77be9d749290ba36e7f83cf0554ab5d40952b405544a69ad945a9e68b4895bc5578caf5519f19179f39cf1089e965659e4a7e77804cfd933716eb6b8d1dc6d92145c93e34c69490e71945e88616cc615acf222b1c027a41c7620731db02ac7d90ea074163bc8216807405f30ce71064653ad5aef7067bc682284655024e3451221541145a92f6730391911c35f7420e41519a1be50914337c4d0e90b1433705088bc2f4430d860454add971876d090b8a43270b830238cb626164a939654438d4274ad584289e0629b60328928aa51825c46936020d430284733094913394493bbe2ed810d4570c15f8e331ebc60e100658453a91397084401d91f472076e5fa7264dcf98043140a65248ff0aa757348e5dcc0065e0bdd58315201c028fa428dac52d9804acaa76ac7173000d346ee951a60bc640f83c34e15de7811860b1d4891fdf14a075b64ff07b3446b55461a62289181c30dc428e2882f4640d9819229603ebfc8028b078517ad55b155e460a98772f0c57390050d97485673e0440e5688ba0bf08d1c6739783225074adccb1a4de6bc319838ed92ef65a906ffa1d3c394247097e3cc4b1219f8e638f3c2a58a198880ee9d915b62a643d92afb6b55e1aecb9dcae6739c3969f22ab8ad5bebbe31da18bb76bffc5e7bdd45638c31c6d8dd2d2377ba52384ef64402cf974f811bcbd3de596db7e0f3f3fa71051a9df5230d5b90fdb3fffc6c8e99b360a520922b0129623df0c00a1ebef01a6ac04653161fc03862ee400b1fa0fca65b94c6071c622f42cc6e4c12eb33c41429bc2c01a28b180fd2c8c105a2a0202492c802eb098616655ce97fb1171770504576ef2e9dc39b2e8c00d0c5962e47e00028772afa455760c0d2840887a6ed8a0cb2dc6f99b27d2e4a2277d99fd1c2252645a627ac348cbb466c30a13236ae6c3136ce6043cacc932223590482982e4061b688c25449e0d00ed927554bb764ae606ad72a7bc8666d1855d96090948ec048a456f2173d9a1c11118f1dca2ee42e7f1f60555a929eb36ebe2100642f141d2921dd7a7465cf599b90c061451acaf6ed90bfac91bbec5b3b8528ab96c06155ca76a932758e98ce710974beb2bdd3a8531609347bc5f2d523ad48b345fdba49d6c83e618fac1627b68b95592c16c972b149d9be76bd3659891d0109754e58c1645b9b82ecc7af56b42f02414c478d54b980a9b5a873641bd529b2cea9a06432edd34ffab742b7245889ba655bb6c85df695c06125b25f9bea98d84f2887beb6b56b953448576420aab2a3181556e891310924992c815923ecc848315fa46e59cd0e699f75d2ad01c4aebcb0c4c2e9bdbfdc777f026dcc5df63df0baeb7ef478b8efaad2579bdcb5dd6dd32891934dbb15c90ed5a6aa74bfaf4876c83ab1317f29f1748ebffd123a50c484239d533140611c2887dc65a5e0b03665fbb6a873da4aa94d9de360f7f49b1f17ba72cd5165bc3fbffbf4bbcf23c7d8e382e1093e9647b4b6b26ab5419244d6beb4d239f18a0b5d4289658a1c76760d3072288dd6782287f2896ca5cc2265fb55daa2ce093ba3ce09f194ce0957b2ce097958289d23a358c31665db440eed13d9aa91436b255bfbf4adb5f6c60b1729edcb29a9ac7e6f6bd3aec4949adaf935f6e8d73ef975e8724e307410cb96445c8905e1000607a41b6dc46e48623ac018304cb83091c520a4ec032b58d228ca5c6c018eb33486720839ce9aa6642e72b1eb2f3c21f74735ace4b09970e7d08de24c0d296e149b649669e4d09fc8328da6dc53e22c0da62cbfa5f4133d36c0611b492fca5b2a024161839fc316a2407c196b293da5bd291814e28528730758febcdd1f4374c99f01e9062e30c832943f4a519894688af2674607386ca336ea9c50aee02ff9237fe44f1bf5142697d9a2f8a13b95ec2f8db8cf39a7bc17e3d5eabf1571a2ce9d321b99df94078ebe047c68100509914a36422bd5361c03bc4f0d32a592e76f465a46f71c81785d8cdc16a3d6ddb6d21867d7ddefdd2d638c31c678d2d030ca71e683a02a729ca121cbaacef1550472bfdfe6505543baa44bf68f7f454953765085ce2958e57085582c96555865994f1984cc6d1f7a39851450906de44bdf46d9b187ffecc29bc31b5a107b9639f4c96e05176fc2ebdefddd2dce5fad77178c8e8185c4978f1042637608224b920d67c0e413892f1f1acc7c40c49822807062062c0a176fa408ac115a8ad01f710ef1f4afbf8d0718e710e3f8aac01749c260e1e209248660f257f1a55a2243121548aa3cb1f29452dade5182904429a54999524a29a554524a9f521aa3048188524ac54cc994524a299594524a29a5de9436a59476777737edbe5204cf947e677be0eed4d61a77773141d9ddddddbd4e9f734e67595b6bdcddcfd092dddddddddfd639e79ceeee3edfdd27f5e9ee2effb670ee0c3784ce7042836406184923cb42da7fa60b8edf48d28c224e8a9c3921559a63b89454c95f449a8bf52bc501714c38220e4a17a61ee4900bca92e3010e39e48698c0e4907b92e28cb2e4a4642967cf07c41e7213b389e99ca61a59f6908ba184707ca5ed46f691e3cf295468934911ea1152dec0e4f8344fa214418a4023b35370d15ff3234e7d3d2e069822580b5c118da48908d64290a02396e88951c05a8833d804a3f80e3024c15af0810694177aa4121c9a602de0b88005170bf891c1fc8bb09e58a5890db016dc098cde784f6334118612cc3fce0a587f32b70bdd5dc23089e506636c85fefd4d411266366203a594d26ea794524a2995d16bc06d2fb8525c28e87334ce19c110273ba54e69a4f1dddd3dc4c1691a2d70fcfb1fcda2893ce73d82b35ea40c3836e29cb37be0e29c73c6ef720eba53992ba24c524a29f5f994524aa3534a29a551504a299d94524ae7a494d24ae99c9a125ccc35fef62d058d506b29a53146ea5e3f7efe9552f95d657b05434a7dcbe1116290f1d91bac75778f11888b99c648bb4569b6c0fe5fe4b09b5f7094f67c016423149cddea984d884052c0c9426c8f93c318c6fbb4d073ff6ea006fe20e901d31e6806767172a8caf353e5991ce2504a3f9c60d441a6a010f1e31ad97f033eb4a0d206ac274f23274430612ad3b71514828516621621580463318b100c952918aaf2478f03318b104c823df157eef217d2b9074e98e88109a3a4ab7d1176bfd82c82861f5ef0010ad80f921e30f94033b0f883a461f781180093af7d400c80dd9e283cf27b4a7097bffc9e283c9a06f644e1b92fc19e96bbfc2f7814d148328510637041c4172c6011167d6ec002050f3c50e182c419301d9e8fc5605db8f833b371ebc7783f5aa08246ea6fd9c8bdb5ce5a6758ebec961fbf7e595dcec8a0c27bcb598472dc72d79aca71d64592eeeefe68b4c0b15b40d4e011711087c4af79d48f8645b20a3437b8bd00d3efe2a7aa5b36998b31e21a4072582b186b5434c0fd7246209dc3d07eec56bd018373041971362a292e04b8739c9171c4c59736c7d8ddb2a59473c6e9b2bbbb6577572a63c72a29a89a5bb8faf503237b3576165985826c235b1a2a7e74cb8be022e3d05081439b223864f5b3a2a728181466b6919ea2604ff00a47730596fff9f4029ab0f9fef160d8740751406521a6bbb4c8820b019e39ca6e90220498e628bba15b01f0978c1f731825206331cf025805334f30468fdf391a60cb7794517094d9a025cb588edf07b091f93296c319653680c932bef424206339fac8ae5f5148bf9a553ffe68b605ed43a203b32a98993e8b044994a983610bd9bfedc7cc8361f7630412d66791b0e50aa280ca1414e27ed422e3e4d027fb0bf1f8c958be9ffd3810dd15a7135c1c798e474818cdb8d8e206424732009add2006493535355f03f6c42b557e88c174e4781688e36924962a5c60345ff33eb01def03fbf7815d90c5c362812c9ed50a64f1ac6c7eb5fa15d8b37a15c8e251fd0dd5b3de0706c27f310afcad767cb80aeb6bd57c1fa2a2a8a4ec588a72542a2211000000001316002020100c060422a1401646aaa8a70714800e73a4446a54184c83498ee3288a8120638c210018030040c68019231a1a713775e5adb8ee838bd69b5c12223ec7b0f2b1b33b704e1a02018fc1a47eca94c278246d10259f1cc1697da292bfa925383ba3e1b581140246c2de27c729861f721122d01fd2e8fe331d9787137f6dfdd01af0c6a5ffc550aa69fbb2d1061721fd950407906af3e7bd6ea5c1b64c3460c6d6d62276ef5c66b9046df9d706898d718814e0b127ba928fec284b80d513ac362795e8f43cc9c2ce9622106a9cdab4eecac3cb670dd5a62dbe56c300ab45898808beb4796d0dc3658e28d998de2ab1b9fc0e31d0c947a5437567ca79c6f28c42c987925e113e272be4b1e98322d3e44dde6a528f080999f4863225bc435a28f5da3ca0a34b7cd6745050e13e0fc437569a55f4ad0df8ca75d50dca4ca1b9902bfa988772f4224cf0fd46dced5ef905f47a31130d9d6784cf765d3cbd576d4849d0ca30e97aaa06f1015b3b6218cb2b001d7b63e049193cc026c1fec2f2388296786172aa4c4ce2ba08bbe53424828dc40770e040021aad555ee35ef90caf7e5ca3ea1121a973ce2cece9252a103037a092afdad24d99ead92e343b18d674129073e6b2a7af66bb041695cb33ff31fffdd53139c9ad01d69594823759b4f875c8b3d3afd08d33ea86a5dd94370b3631e13845544e904bba35433bcf27b66781457cf06df2cb86492eee8f46c53efe8517729acf0caeb124674156e9de4e33407a456b7dae972d98f97dbb04b3f959e36d32e7c1c7cf34130508b157ba698827194499dc88b3fe3eaeef871ac3e375d68c600bfc5fe56ce0d253adbfbfcbca32c3e45701f39cd81fff913824c6776c2601ef7dc7c3f76fd1c66d2dd45a9a8c56843ecc4204145f219472747cb4a15c3d8e51c6ce15db1b90d08242d289b566d05dec78af279c80b704cb92bdf1f1f9744520f06f96b808c6ded4da04a33f8212271a0286787f105a12d30911fe9cbf01e91479a23da383ad10cfeb99d6bfd27b5098891c8aa4fe7b06c1a14d4ba5ac9be678c7cd728e26401ec207d6c3ec4c836937d2ecef567d1a8e948ebaeaac895eb70a2fef5bd498de875b95a51aced40b34248c722971c00c92fd69cfab2fdf2974d75c3462b945cd631223578bb1e6f58d69ccbe620c087f05749689686a821d63aca11af8f00df9188c971564e7b016078214219f3447cd7b93b730531b889acc04124c25e3f6173a1787c0cb55ceadd71dd4132a4712377a2c872048ee4dc925944d048e999e1088d753d30723a3b3cf96cc94f9e6d1272922c4945213f981c01c26ad5d814a88a4948d07ec4134638475ada57fbd3cd56a349e0ad2fb2429950ff1e4084c297bb446984833f3d6ade5544478c30e38a5525c1f6f62febcf838947dbc909e57a6c297a478dc878bdf47d2188520ea78e92109138fee5aa121086974a66920eb9c5381835cfd223eac5efe9e6d042a1b0914f5730a5412b7bc1b73244393e2aaa4a6c08fbf6c780bdbd8dc3c3b1a3a2e77253f2c0aa149a41a8244931d5774dcfd46110db07da63bebfd6acc05f8c8227b5dd74e0952d4d9cda3a80665afb5a58b9828011e37511d293bed110581d70568da796e24cd123c8512ac7b8f9c7b5ed1f6315939f4c98ee88feb6c255571ef636444a2619fc81d6e6fb567549f9ec85532cc7df71d116b0b0364d9bfc45a6f7876b5c1e89e6ce34c10c91171c9182b7bd460a760f63450a99a86e951bff7561182a7601ebe4f687dcc11b05c5c4943629cbec4ff265fb6a46e95bbf935c1dcca6c293cebc7adb0e0b662d7d6febd93c4514e2ac982969f6d4b04a1fd532a23e21119ee1e63ed4d1fb76dc93e6f3da719f522afaf99445500400db50a4b69a00c3978f4ef94923f3a3d08b0de2d942abc59c87c8bd4a796970ac80d9c81cbe8a5b199045685b0af5cdc29d0a7829b680b7ae4de88d74cd611303b1b3fcb9cf5649bcfbae03a1edd54704fb23035453a4cda90cf3ab7245f63a365e7d95bf34af7e152ce808e6a129916faa5d6c9b3a9668c442c2d7f6eff45dd53de51c1de4d9c2f5457653a688a2e37766adcbc8733e04c772f5241b363504ac131006da4011195bd06a0a51e8f1653eaa9a11042fd06295b17d65d6acc1d0310643e070edf629d9a537aec51e7ea2ef0541377f79905211df3d5e4ceee3d1faca5ac8b2ea10e628197d711ca63fc8e24970250435e3a7ce1f2b8fc9a037a15a63ba4b25c5627772dc11032bf0be4f7983b75be7038571510a4bb8d1a678096dbfc3d814d63f5f3045208d01010372db557a3330b87dc9e51cd2f0e638254cf112dbb41f8f63a73e936c6fa017203919a3d687f56441528dda327cb82aa3b986db2cf7e05b287d7be361eaa0d96b194367a64b36bc1af4609698c48a8f91cc0b52772febd344f3e5b00c273587aa8c29eb7d87d2998f0bfaff0b0cc3b986c05a32898e20f6b75aeb8d8e088e193040223bcaba8e7efadb3de2501f7a751824bec140b7a08dfe50e0eb3513fecd914558e5670f3438a3206bf860495c9eae5d2f151af1964a13438155fb0324f652aba560e79ebae44416dcfe1ef24d2fdb46b240cfaf142ec9421283f45f397e803603c8b16ccbba9d0b0570e4e249f96c22e54908ab79727558558bf043285326faea4d99873fc8339476e9e7678160078753e2b1c2f48d4ac78c936a038b8324edad329fdf6f20d6f5a6ebd5b687d51f04f64bbc5131248148ef69b339864470a9b31dac8137301c80d2d8bd670acdb2ac5122a370f0da9fd63d9590cf45faabaed68f7a456a0e868561e15aeb0856000795abdac581db022d48cbe56c6715a2143aaa404b2c6906ab966d21cf6b1344ca89eeee3c0d7a02261497968bf8ef8df9f580c7d85e8e460ee23430f04dd2756b5fe06cdeaa69c793aa56e4ff0d7a0b46f8ed1243b85509f64826af1d1662c37b5b286e871e3f34da117c62430fe114b91fdd07df6eb8c84b7e6389f39fb9ee50991ff4f308155e45ccb23bd3564b2e6dd041db9ecedeb392232113e5faec4f665043cb1312d3ccc0f316d63e71e6bf832c2b9db3e895197c71a33b6cad7052c748acd1fb8b96e5381b73dd425782dbcd7c33afd884f6e6c9ff50c1af4bdd8fcdec5f2070bbba24e0d1b551696414cfe344bac276d2945d836040c8795c18c46b0d7cd63f5e8a297aa903ef9c70d6516ee556f30a7b935ba9a0737cb6ca958a074bcbed18b3a0dddee18e30adf5f8c1d3d01c239c59cb406d0756e4455fe6b2e959c1701d06a278ada478180fe48bd6816eca798a18a88ad5f9010e9caa3b6783248cd99453a4f546612be1b757d5bd818dc6d732926ab0685866046123b305956bba81149f2b7e03c0ca84aa0fbc9367b9df309abe8b1c571a5a0b256dd8f82fc403ea575418706782b9c857cf12b7a2514d58b56dd43793a6dfa96e9f8490b7dfccdb052bd53439d129cc2d88235fba2fa342d4e58289a79791eb9da26ee06af192ba1a3f247d78243499fadb3af111688da7b127338b9ed2acdde7d56a15a0981ca505d3d8f1524d7bc944f4b7658a136bdc0d39d4438447081678d4416cc10a594be5f5ee58bcf967360a17866b01b44e70f8325281c42eedc6ca1cbd8007acda6eefb1720fbcf76666c2d16aefb0bd3ff9bcc043c85cd93e266dd2610441ddc33b3d2ae08a11b62be35e5eb953989c8b23c465486b279503ff07d2bb73fd228580b9e7cc83ede80277ba2927a64e882ca34cb21b377ca84e08a1c020a16d50a1bbca48e686d51ccde48b923a57a5936b103787c3518220737942fed2e376d0a909154407135374e89bb934cc1d2a74647f7ff7b16d4953459d07244623985b64ea29917eb89f0b7b61546cc91d8476d58f2b4f1e3b12ea04254bfa45f88472bb92087b8148c9387e0e6bb343a4224f50904ece71484e80ba9130aa8166de743e1e3ff73a182d7541f895cd105be5faf088a41ebca7956b2608749b5e71be27d58b37806f70624627853ff0d85b9d39472826e67e6b4bfdca164c373216f550f74fb0c0f9a468f55952f898755a73b52adac0978dda3b0e65ec28d2b2b96aa66138b43c86379d2b8e69cda1b2108477e934f2556df449cf68e7cad2d147b1bac4f5be34861d7943620dcc3048e665de7ab5eb39a5a9095c0dadd01da0b9354425531997e22900e2da4de2ce910d97a104e6d7b6ffdebebeceb228446c8d0ffb4ae4484d2f9b2127740d1229f8a51b66c7610235194462f562bae1a9a72087e82f2dc8533faeb029bfcb2e5f7a29b515dcc91b549395261d3ff4fe12fc956b7398fcbac56e250fd0634a9f2fc8f5b9839d9a75ed09744c1771ed293d47e78f4df3dcc8fa797a59e60bfd316c4758353316bc105809e82405dc5e673c3a2f1faad54235d66b3620a880288733b87c9995c1c4808e18e9a6e41974fba45a12a6bcc5bb2d8ee2fb716d4f97aa4ac87bfb8941771d00a4130befe3e646ab8b1f7ce94ec9eca7030f3e4f013e264e98da1987c54e383e7dff6603b842e6826963254dbbc45917d8b1f2402469d2e3df1f380b8b94c01895f63bf4b008a4b00c422263a9df1c83daedc3d3ca114260820db83d2cd8c3ecbe8e5415ad202d1ce87c91a7200899da2797746cb2b0f16fdcaf4e751351df23bca609289e0d85838c9f73b4095df5f9fbb080cac3cf6ebb410b13dd6232ffde6a3a61484d32baa01ebfc64bf19555248b159f3a66aa8d242ef3785a40a63de57073d15952610a8c81aa10b2f51c51d8a980d0ae5d638ae6887126983e43d5b84b2a14270e43834fcba018026d8fb1ab6c9529b3631b02bee6c7217ebb2c52100a3431f5dbb86179c8022a0a293559ba0729bac5d43ba4939e13994e606be7decd78b3047685a6b1f8956e59082bde03dfe21d7c644ee295b0dc7e981e678a8c5097c84aa8b4dd3d054ca398e856b1f4cd3d229d190798c8f5c8efac6216bc50ae85bbc686b0f103bca0b3557c94ac6770451de9be12ae976bdf6d1738a21166c4c0809891e63f4e311e66fe193a66eb1404190c78d5a6fed5165cc162af60f1052986709239c30b4679b968871b7dd7f5798841ffef06dad64c08f6eca102f82b7f4280c2c803fe889a11f45ae066fa3942047e175adda48ea7999cbb7f3507049974cdeacef27d5769e15c26c3e06ec2b5f53249080d1db3cbda7797288c1cdb4b39850107cca7d8798e01b348076537ddf48c48b9df3886607366d7365508d9ea96dc3d3a0917ae2b2e824fddb16dee1b97cd927a153a7abdf6a61b3c0d626924c568549dab48791a55532131390e9fe43560aad58f8ff4143304a62303fb27cc2abce995f6f675815a915bf51d4d39ee7275efc7116c383a6db73c7403a0147622305adb131d768ec887560192f584bcc0eb1be404996b6d9f744871651d58a9d9d7ffff7668deeb08e1454dba5953cdaf24c2f7357fd9d128fcc69c7e76f951a051907d0c867fb539560bbbb93810d8ecf5477b6c7179f751421217fdee630650560dc8a2bf40a806639fa831081d10c368dbbf04d4cee731adb5d1c8cd471b6dac9b5f3b78ee5312562b6b0d536c2a53fb53a5036c2f3731368d1bbc747d7d9bb6d30b48b7c7f9ac85ea3254170e15ba9dc8b5d249f92e23984a176053001a8553260745dd121246311aa19613e6f37117eeb3152cd08ca996341f62f640c646640e8438e735298a1e04057da2e09b1f17ff556ef1160941bcc2e2ddc4a581c015beb62f3408b6e2a582daec5d6caff9b0a0cf60ee05dec8d02459eaf09327c70e1de87da024cbc075ef8ad8954fe2ef09393bc1b1f0ca255f8c71eb9663864f2f1f34a48444b621bbd5381a41e61090114ba8b08883dc8623d734f76455be16f5b09dad4d24666b56f7e68ec5141c5c1e1067325c525bad23cf50b1121f90c1754b94419cd974d221b056abe0362d0a28d3c701a3f98118fc370b24f5e9b0413372110b9fd3667cc3ec5686897791880c6e13d41aac2923a3077a71df950ef13d8fc20889864d14dc35bf5cbcd3e211f0924f343868808684972200b972663334dcdb11e81d053f7d61f484b75a7282c66ae1a683bc76f53c15bb872e5712d7b326ea18573fbf19822a1d4b9944fe75722e15e15cd607253af059373495a554f8a45d0826cf52eac753bc3d9bdead2fc171bc7bd218e99bb8e30a7d49af846270b67d0d2f11638449844e4b3ea0424d48b5d82466442a091be2583db8d29ceb22007bb9e0cd622a29522aa46b6d806ecdbfb137608cfda340b59d96241a69a70355f4e7c1461383d1db96796773d872a36c3e83b44ea085f06d13d19e83f45132c77fff9abf7152b07db9d2a1b27d050a15b8eac9496257f0452c2f85034a122afc37aa9944ab41c69259831b715d2047259870e8bdea6880b55dfc82746a4a5cf0aa27fe2d96105c5d762ea42c85df21ada2575a6d88ddf6d4256d251f72553ee569da715fe1109d52712f4e8ce94197d1fb19172d35d59cb89ff79c451e4fba5a3822c2ca9d28a7d25918de3bdf247dc2e89fbef338d4f69805e3b3be00eaa8a5190c96726cb1bf28f750180bb859ef1085f015dae79f810ac97d50a4a1af9b51d30a7fd0bf1108b3ec8efc7ce0fa6bdae87cdcad27bca41290d215040b1fa3aa1fc7056285b7cfbad4d4d266961c87615485d97fca36a9685f5c5a8bfa0c0d041107a369d611e4d9a4b5c5658861218e2bb70ca9b5fc12b74b8315ea044d487f28700ca2423061007d9e43504b32362da4596b866418dd750a0c7a8b6221579443a90b06139912069a583a2db63afa1553b186c41e03f9880e8f0d71a692a3cdf59acf19368d2485c7e3eb9346015a566ff34cdb8e5fcdffc43fcdbc80a41c04d771e5c4f49bce826bbcb87f4f082b8d54061b8c414030567b000c147ca77b8f19048accbce8d726a20f559bb880fccad33ae12906f5d23e039261c3b81cc4a968772c4e2902e57929622c6e602d608cc11e88a62b459c349266482b399fb9b8812e18058ac04604f168dce4e2990e37d5f1523859caa12c661af48428589f1a1226134b32c87b191e1c1ec3d9f41e37aa7f1bdd24dc357fd529d77fe011329207d5a559698b1fcc816a843e6ff0547f4a4eedb79b2b90d237971c5017b12cd0c29d19c7d381db9e181580a5b12204a76a0de818212282346f114a63d1e02193703d7864e2c7278e562f19f0595951d84ed0eddb98f6f047eb0a6b9d96e6dbc048ef1a88ffb1e346ca5723135858fa032fb0764c0f0e72518c6ff7839f02c900b8041ece1f7ab056fe804d82355892767efab74c9bb9e01fd5ef418479a8ca23ccf6a7d0c7826b1e5680f02c8180662fa283b6daa5057532666ae34d214ae9da0e58cd361c78860d276bcac4d55e7bebef26a8fde6e5f06420814900ac0ba90b7b4682be4941616835e453ffa733ebe78ce59a1ad55c4a612989003d2aca07969830b716e04f69efcd5e48b19581d8eebb30ec56dd710296315b2acdb3897c59d59ea7b2aaaa6eadb13ecc96cb12f3260c1bf2573aba3a107bef1f5c2cadc4e6cd79d4f41e256f21ae1973f63dd2ac20a90bf28e14a9d6e41934b191ccf0929e68b7b01008394d6beb0297875ae21c4777af831131da1931e0545a60cac800bc4c39557a18519e2f4010e18eb4da001b3a259f600761afe02d6025d61440eb604278c5895960a69fa4bb3989331f29ffc6cd9c754aafa25d25bd32f6011f8e29a8c1f6602f147a09b26ddb06e4a55f1f847f36965dcea0261401bac0f9dd313baf8dc9b6f8d27c3ec6a96733ac3de512c90a55dc51ffc160e128bca6ecf53d717d29f83a897b527edd15666c6e10fffafcba642ad71410c7c6cd8c2a80372f12ffa0316ea63a470fb10559198c62125c94f5d058f1f4c7c9e83a6447e7479facc818e0f0f58cb87b64488484366fbc0c05a1427860dd2de976f2310dc38c6ee9de18db038434c67b4c2b85baacae318a6f38358d1d04a5edb2d9fa7699e8fe387426f7fe3071ec0d7c15b6707cd6eee6313acd9f5489a7299e1bc54866d2360e27941edb5e876ed6083d2b5a6275600fd7e6ed53931fc9129291f53cc0edc136a63ffdfbb07303e7200937c28dab3d1a2fc05935c7bea02052d5173a65e1ad1f26c9019eac688696539234b0f47c9d1267eb187ae2bf99a336dc0654bb1c5768e380167359e2299f77a5c8cd2f14dd93c0be04fc44c9c19c6e0fe5d55f73e410cc43b3da3d23c92d0205089e62aa656965254133921d4672b77224e133f88a40d77c807c9a8112376a85ed1479c67415108c8e58839eedf1849825b37373127ec361e31c152dcc18237810aab5402e5350287e041fd422c0aca4dbde1ee097aacc5d76fc2cba3c94933b48ee59d30d450ffb088fac6edd778a2bb2956ab61d01d1912ac500ed81eb983eebe26884122b01c3c8e376411d8e06a7045be5c116da2ad34ecce6d938f73cbd6774c4d4bc1542964210316c2a817fbebff1748cba56b38a00dd1a07aec5c47bd4b1ed8f343c9cdaf3a505a83d71be3e38de66e4cf50833fc80e5dc6b44271d94186345b6b53db2231c1d7fae092a72c2c08cb2fe9ea658650112abc5afa9dea72857798051ac3900a3ac7900a6280b5807b84aa26089cb455d5b9f2751aa5980e46271d7ebdfd3944b1600b9b5e8f5f2f4f4a070600f048c73a96e4801a54ba5548f2ee64bc3d7796421824477ad224179fe51179619aa010a6cf90789e9955bbd865f213e3661dc1708b1011578f82be4237addea553fa3f3971353028f673b3e230aebef7dfc51d61867d1e2157741b813be10b575f61d7ff5620c7dd4a0290b64951900ea94f0597711917110776a50c2f1f566035af313b2da190b575b4091cc17711838becd304e0eb805b7bca836f713b4c3f3d9ed03648f2242b2c3b18c34502ca2ed7bdc81f906debd4a8b7ee9e1e29e69f8d3966378ff83ca21afa4d116fa464c820c8994d8af2b33336e10315e0c07f51b59e2ef2c9974cfc5f5706854e6939fa17ffc689444edaa2bc16eeab3a08b45a83f7ab32a6217e0ca6cb0d97b3cfaa4532700f1863ba05d84ec0611c4536083205b0e208c94a2dca1d469d3844f99ce2a40b7f2607b476c7a73c2cfa6da74f12ecab0eea76c10d6847b04da53ca7054370b553348a1e70854cc04dcc3bc88fe7fac1b5653983f3d020e05843248e5b1b88cb2971630dc28acc38650cd9f8872c998759442907b7aae448cacc971b62d4587be2c52e8ba436c7ed0b806345a5753cb6d110aa2eda1acb73f51e25f305ac2a5770f90705c2a6b93ca4533cdd1a44cd8cb47585081c8b988792f46a32c3a2cc5a090b13b4efbca808e7aea15383bfec7481aad69e2b7eba883df79bb870533ca569f23bda30ef0d1ee59c0d6577adbdddd3a713c04158480306e4a6318cd858c6e8d62a7e240ffe9471fbd3a0e0ace43af034b9ef0fdf24c2d90a3487a3b44dd49ff3d990e9a87a1fa26e0d4227f130e6727047bb62eb0b22bb7226b990436f996569bc58ddd195901d7a9ec43c6b08e0ec70ca83c3147f1f10ee73af2b41ddf811239e3e18a03f2f7aa2a3fc54e1e2e0f2fe1cc58601b8f1c9650a7ec283e250fd5215d095717897f6fabc5604c0605fd5db4222b7168e187ac2179eb72148cdb481639fd3d31d81bc743cf5006c1117213332656674c0c6574bffdffff4821fb0d5c9cde36a6c6d6a1627dff1b3023924830b622cb1f2697a36575d88621bcb9a3ff4d30944ad0d2fde779f56198f130940abcec2323b8419bd18c1f0e01d7e7b7d240fe1ec1e3332a3666726e581bb7d2cfa92db6e78dd089935ea7580f32a390950e58a2b94b96f886372fbd1681856cdbca2ecca420a405449b7418e8734bb84101b9f484d00390c4548217f60d9084fbd2861d9bb0981fe16d2fccbcf407c93563e6532d421c3ade8ef2a01cbc32301067a23f737d5e635928df69733701a1797236714a26336766b44b95fb5d03e76c4b5ccafc55971c1938d684659b66ae09d49f2fa4fc1d934d0fb51005e82743364d6910d1f278d65bd6746a6deaba1c07546681f6cb4724a792ff7a7e51acfc71d265c234274041e56013da3a344d25df54c4946fe162faceba592f4e3e49435a46938e57b69159adabc60c1ff30dfda907e02fe70bd337f0328128634dd75a7c65dab00b4a76a26259fbd17c47e1f9956cb4a0207f6be82af6a4535d685dd62790f1acb0f4e0003ca124e00c83683a74b8211b643e87e2e1da77087feb07a151d4b097c9167491d568342779ba30e2bf55bd79e51d6949ee3ea7f1776c3e233d437e2ca9f9c0d10bfa94595a8fa9bed48a71320f3ef531e71994ff6dd10776bf5a1c6af4a41ae82c3a135c95983c900b6b8f067384595fa6039c93b063f45f267c338fab83d32e3d524f432efca3edd49e7edc6be5c34680dc7a3cef32850fc4faabe50e28bbd0cfd44c4df37b67d004aa403d1368b9a54f5bf86386c9953a12773c6e66af81375b390fe605b71b6573b67e7d445b9a010a5011a088bc381bc211e1e3d1c1a9e681b159cb03e4f513c5d73d9efb716371096296e1caf209e9058c0624ad01db62eebd091f4e21e0c100ba3c006a5577cb5560563f16bbf5470219d1336fd76cfceaae276a11cd2114eface2869315e38ee842113980777b552e0d74090dd1bfa668884365727da465ffe705cc672b00c39fee8a6808a0d78b000d5866e32dc8138a03fc57e3b96c93fffc176d53593ce070a90e77b6eab7e7a5716e04af182c9bf905195a8b71ea1a253250c0c7350ceb256080dd4a0d7cbb1a985717f82e619dbc1a320b5f5c7854a5c2017d4fa1392468e5204bb422ad05b84215391d6e2d2c7c67ca33e3d514af992b5dc232cec362890a4b1b43ba099bb88207a9a8e7142edaed497517df257d094af944587afada495a6e2a0daa3ddad00f59fba51b7505b2c934451d305611f7b70322730795f5960e97a6b330886fb3b1ee5264c31fd94a9000ade96f702adb1736beae0d4a1a66c36a4cda1ac08ed0204c0d7335bfccb50b944936114ac7d62c63a2d4869f4538bbb54ba8c71822de9e3d30cd48c16a1319062e2f323fc6aa5df4aab55dbfdd3a429e2c59e204d4a21658c0599602db63c91f288b7af146e705353457c1a8459ded1523bd452d2ad98a5eab0950b481f11c6f90b237646d3d7ce8c3913c9ceba9aa03b22ef176a34328f9ef92b1ff341e6130ad311608069c313bce3ab874e156a14c9a4bbed05a8a75818c54341ec99a6d1b08ce83a290228337e1d8972892cb0d2b5231a3a1ce97b41a0278512bc63b51970da3234fdafbd758b1cb3589df78b3ce6b2c1be7aa3f851625612e6bf8bb438456f4bf9e06554b1c870c51a320627da886018de9b250a1584b007058f47069f997809d908ed0544e97553535fc12d61444796b91cef3ceda301b20bf9c8647d3fa416111de2d679664c492de3e34a8fe784197119f0c9672467dd15cd6f4d3016b66aaa41e2e3276644f7f9735741283ae29627a57cad2ec561e9b0c952298a08e88da267a95f9809658fd2c24be7577ec001ff55ef64f32942df0cedc745432ccc7345dc32894123b07556918a9a57f8b58fc611d80caa76ed725807647a0f2915c0facf64c1329f232a4905b5c444fe2f0ee65cd74b0d68b6981a76567c9877b00f2ea06d5e7c28e844cb3902b38592bfaffb456ce08f9bb821e736f2bf8524655f9e5900d1712b18f991581451fee2af668894da8af9af8dc5659dfe5ad0f6a2bfa385980bd3a6d191fb8330b120ed147fe804201ec5adabbd8b04a56711e8cd46292f783ccaaa0da2c4a2efff7028fd650995541c175baf02c26b758fd29ce250295d91510ae60da475de3660c812a867bc82e8685b06522d33104c0ff2b154cad9545c616e3147dafe30208502d07eefb1c1fc920c30bbf0682744064290db29eff14b07b874c59840779041f29eab4b7b8cfb2bf8b980eea6e6c36fe5cdc087ee9b986c89c4838bdc07420bf6ad83bc8d4180d0a5b572a1aa1c161d555e5463668583a54d9c80d0a4bf72a1ab5c161d7a18a63ecb1dce4c1b283981bd76061eb4a5b1e586a5de0b0d74d64373ad10018ec76d294b1c1c0a27bc946161656dd6b307290b0eb4c937107879dbab775a091a7f79eb861d749443696bccfff52a53ec7886b4b9cced6760cfca8bc3e42130c7959e575c3cdcf02f1196d98609e2c60c0e653cb4a5f4bb46c2499f4ccf342bd91040c4a4b961cb2f72602bbbb6277e5f303b61306ba14821dbb94330ffb1b95bb064d6c1110f765e0b1bdf06d5f1e1ca48bcd5966f168aa87c82e53c0dd80fcd288ddda43cfe2139f95c61e3239376dd482552d58b2aa6512d97cdefd83d71d936e613a2c3c40e1902005b443ff946a499f6706b91312fbe4e923190928219776afcb8ddd03f0e078ac996a0286afa54643c30ec27b793ac0be8ad982b88a9df9d8465665b3703338f2c7d723c0c3e8f067f835e94c565add4067a2a5e8f78c5948a959c302a3e5ac55044f80eb774c9859e86fd5202d1de0fa3e02aef7e15c2a6ba30c37a4665c3976d07db2c942206b3871e2af1a732bb64ff7dbe29f65faba605383f6c7f19fa5fb332cacd38936c12076c4b7bb20fd0a7135f8fb6e3305b46b5fcee82b9fd3c058ebce4398a1e99c6fa073d3af1877f54511a4dd639a5b04485b49279f9faabec2499cbc0d2211bbacc4312ff624b9582493df1424ab8dc7f17748308357c3fc9cb3484f0848f128f1d7690bd38f86db1285df6a2f09455586275e148ff09ebfbddf2e91b1667fc1b01bc59dad6e22872675a825846acfe3679275836c73c1e0d182127c8c997d2588b87b43c8286234ca73f023556f705a0052bc19ee94bf9448d91b02c747debe7cf1f4c2fa973aacb9d05f73249f2bb6c531efb9cd24c5aaff47a3fd96d14122181c98410f1ecb2352fc13042133d1a4b6a728fa065895717f62dc1da01cf22fa7f4c588bc2b1d34310973f2dd22df56a171a8cfb5bbe76dd18fbb8c5b498f26c4f3853fc68757690e3e599fd63783bf75b9f566c05ad0fa204ba8cb56f7db4f0236234cb70a67c433cfa9523496e4ca2c4864146907d8ecaca7ec30d26d6c49bf0a2962bca479fcb2437568a1c57d7a368ed03c161df06d63ad32b6ff643115395849809911df22bf0f0a592125f5dde492805ccbc49d9f9df9089255d6a27be43aefbef09ce0436d8cb614346ae822b172926f5f3311237c8916377838ddd53ca0c13ab22d58fb76acb5c0362b1bd8c92b3a6e6e30de82385b5cc9845336bcea4c62d584f3d921fc24b1e2a404f60f7f80180342f6f23bdbc8c712f76ba7375d31d64f0d26f6a90f7acd15fe93f55668296dbd386475ee38f77f58b60d1abeb7cc050e15de047402f6c23f26ea33ad4738a5472f31d1798b0e5975a1e87e388c883b490a6bec628c9dbc1dc0d35f4a15dc75b0c9f8d2c740c2dcab5ca55a4ef99d7f6eaed50c3e3766b05c65b7c70044a73c5d31a0f6fc7341814af889a228199b2ad45a1013f1259c74e502e4d43fe3736df154b757d4c2dba30e2f450a65e3d17b3b5ec8c196d9fba434ccb85ae6ee2eab3d147ac95dc16430497b7e2b0283a938e045aab91694a70caf39a6976c5cb65bc86fba383651d9bb2ac1394769c0a5f30039120d503a782423888a607dc8caa4f847d0e3b931920d97618431f83b0856a554ab5ac48df1e600c856a58326e2d0815d9ff4058abf8661e4078ab01cd8a56401f845abb9d45d2afc03a86664f8e9c81853e0c4737bd896f705b27eeeff76354814a5a0f0836d89901622d0cfc1744e8cd4c2c903cd169a9989328bb205e5068de76deda56eeaf406780dbce9e0bad220e56df892149ea4a042fb622106c47ca7089639cfae6caaeb2708a62873c61ad60ba4dc6f999dc89adeed9403ab0199567d9b7e799a54b693df1cdc10ca48b1f151ecd2ee9f0dae0a13ba6d4f5cd0144c8e40db398ca1f8f040f5638088b0ac24ee589a64d5a4de4933ed0a08afdcd40c91d091836c6bb966b632623ec6c774f23c1400ff2ec17cfab18214a17721e370f811ce725a2f8735e723690b92d3070bfcd5aba435c7a6367be97d9d83928bab14adea2637d54524f54b95c8362c060cb59d397a6c89baf82dba06725c06a9605c49fbd26ccdc20bff7c1571047ac2f04ce43e97875f7c875374dacf62ffc007d442f592c6cff6c36fbcc8ebda74452740ea790fb657b4bd856d9037bd7cfbec45d88c6582a3f7b96b7dceeefa7d39a2055b826a33a2e8ee4519129fdae48c4b0b080cc47d31bb2f6851b64b52188a645156ccc2f27440ed7d2555f9682981cd957ba79a7ce49a8d0479cd1fb0ab37b11529ac18e88000f719b443d01f9cb2c2f38007eca9f95fbe0a5c37a401562591cc100bada8cd7b5d443fd6daa05e4ad8db4fa52763e4675a45e9e9a31ac8b720c0c18ef8ed0a6c067acc7d9fc3e7b50203eda036f18bf2d63e842945241445f068d73d941b23c9b5098e30b8b981493a15079fd4434c9de8d0bc737c9de96a4f154329870ca06462105b6931e2dbc83e07ed61dba7f2e698ed45a40fda8782009c740725f3374175f47bd98c67e8585b52f680c339552def8b29bfad3440e4534f191c88dfa1bb6e51457161e5c5fefc72b94afe86baae7a2dcc8b6e353e7b2440b15e6d3c9056ec062eb2faa64d18ed9484ec98c0475c74ddf4e37df84b00d21df259af076808b6856681f55eeb26c7116cb15e1d447c778d034d12cb09603e921cd5e8f63d3eb6e6dcc9d330378d01b5265ee2b22bf3d47eec4fc6c43a3858fbc4fed8dfc0b66403330984ea49cd7f3d192daee34788b5dcf4cd8c024cece1c6b83582ae581f1a88b06c896b770df3dcbd312b30083aac98af8386afa60b3add96a3cce4121789d81831cf1c590c7af98edb63d455fa67a1e1ee40975b52462a1d7b22b7c7ac72d502a2853569a8288374ac752ebad443712d7326d8500121c4be5cafc4994c76f0a54517d426442e9670183e9668543820cce05c1cd273109c3040384b4d58910186619021cd3b4c391d63b8fd7046ae3a0fa22f6a477ef6dbae94d35470105fa7f0abc629d43bebc0854b533e87cd461d3ad7d8a1d8c3dce412904b600824650b89bfb581c519b481e55dd64f894efc3b31055c2f32bc27016e3be362a2c31db6833729baf668b64c785dad0bf3011441b94dc86f1146b2a688592128962dafe0ce45054afa43fea12071e2f5e618b6d25fb9ebdbd5df5da355c37b0d117e71074abc66fe8e5c8c27a27d23bae46f7856101102484de3825490384d8545ce3e76e8404908e7a98bd8d59eacd0019a72464dc33387c4bb99d6d067cb52b2ed8ca08cb7d969aab9120559043f4d34ee603f24d31509b3ca86a36d5ddf94d18aed155c80f2ea0e7feab6dde2679b745ee2f51dbdf91ad016cbf7c6a852744e55dacd62993d6e4f059960870c57fb4263d2d7c31eba4b559ddd0562130581c3c73580b422f6863446883923bb2a395fc65e690158f82d5836cf3d367d9f349e5b42e1b911e1812a92af59d5da83c06069d4f9201f70849b400ceb0dd1ef725f0b031f5d84ea49e4e64fc3e37d8cc23569f668b530b15341c60e503d3c7c17ace183ca437df17b349ab8f212ef08f6a3ffaa82c24d7208d6196fe14a1e5d0ac65d08223a20b4ed3e54e7249c06212f1d67d75fbeb04b8f132f45f4cde70cec1c8407ccf9a5d8840c254345341b2b8651bf9e7e905264a08a754e71dfac73e760d45217d64dc461e0c7a90d98b0a1604fa6dc7091159e7210c0ee6fc0da560abb824eaea8a1633c69bc4c74e059c08e808546a1b5278920e40290cd596d00e0f538390b751d1eac270e2864ce3f2db6304992047029d38529414ad9b9c0478ec067cc71bcb63ab9c8f0819a348eee270bf2c8a98c2b4cbc06c4f8919a71d0a0d447cac32ab43463a56dce467daa60b786ab398a78868b781c61e93ec48315c9b6bda4d2197c36ee6d921d34b846d053c47649d7cee3e3a771cf35499b940d66f451952b559ab52910bfdd049e040bd0b965911615e07a48e4333083bb7420b7bf7956264cfbb7b64ad87e05dcc197245415378ff8ab5970876d633ad58fd7c34b1917d1ecd24a709775c85b145f2542da3c39f7034c0b1923688ba4e2f6eac86aeaa2f383e188c084c9a48757249700280dc183296f58c2abe0cbef0b84fc138527845ea2970bab50ed8c37f5d0304b2ba811f0bfb0d94e39b3ecf8b699cd4eef4bb85ba2aafb95e87b5ca3c601e8d189b0f162843a92dc0852e5b1eae9f93f7f91a41b8690d17c6e2a613df87984523412af658a6aa08408a5de93b30de04062eff41e0ca8d7fb11b17970421945c6607294d722624631d640cd78e2284763b329554d872d32584f841ca2cb0a1bcca07a2e3997ccc9a908b418d170c673857489918c67b6532cb6ee47df2c33f606f5a2813ba22fc23b8e2bab43115750f5ee09b897643aab35137db6e9fa279ae387ab40051006e39923a88d7ee3a23bb64b4dd7859b363638d1725bcf7d20aa081bf229c29e24bd8879bdf0d26af0a16cbbd9d4519f18554700c0fd3decf01b00f7112a423c0c1cca4d3e721327888a30c695463e215ef5d01a6dc21ed3524dc2c2749a3f494ddc208f4b401890a851aa4e4242f1b86d3fde781c216146c1a5593c278bf2202cf2ca7603aa5fbd811323dc11e1b81515761fd0c1aab5549a9f738f2ea9b54992889078a8e5242f33f807ae1b33207439cc184eb2bc8648f68f46cfc0714f6815356bd411b3c9213fb7beb674d5d07cbed45a5b33bedc35a194b0c5ecd66e6e3ddf68de77a2699e179c8586a16eb82fce20e2d0e1a134e3028d00ff372a33efd032246176cd6da4fe6dbcf43ca9fb85c7ab3e7883bb56ccd259b6a209443aeb576ee38d3adb2b632689778aa8262ff6fe7c0fdcd90e9d5e276e4871ec92abb1781af73902c34e4c30453c023874cc00e1981c28102e16c28a8e5484d0adad7956d16ed7861e43aa270fed2d5728b35da529a0ba43420396165ed3ac7459ccbdfaf3d80d56fb8a17e318253c0f2c14b0cc54697b78a0f8da9f37e51244202cd62551a1d3037ba688023989b8de1a6db86e636787f5e883122ae39ff40566908db1086dfcfec44da8b1ea24ca2930ffa8cd242a3aaf23af5329f2603cb92d3fc0e3e410d7f32cf59a1ac5fc02ebf68807f2cf81773cf07d290328747d5929e3101e21a4644c51554379f0cc72f1413442905a0c917040770334a458815e9beb9b58b0b2fe200369c93ea80a609babc465545e37053d109892fea5e269420d5547c6b0b4b7aa192aad90e2ab1d40515c7053529985d8691df9b00fa97e2721680229c2e03af9bf30f02988a170ee3b21736641b96fbbab86320141e52ad0163d8deaa9e244702b760499618a14a7bb0d9cb65e263ce5108ac70cef37bfb1ccf8a76ce09bcc2a347c50a2c30cc3417630b7570bbc63e8a3b79ad035603c6645b8894c670495547cf5c9086005bc0a12f27ffe16473d44de248966a1c003cd4661731c6a5a2a8766fd55a6ab2b557ca8075e088de8a6f49afc42603e370009670a70025bdb8910b054042f673f88e3aab760fc9ddaf487f5d35269c58494ce423d54e289403c697c47808d143a0cb93fc548071d95072291b2cd9494b36c83248bdd4216d90cb25800b4d647afa2940fff88fcd1ec3d346aa4a0882ba47371a4bb0b3a5e17fb56b912459b6091110b929d0677cbd227c307b1e4d047601752dcc8eff9ebcec376bc75b8766c8ee0c6641b6fa74c6be2b4d3b2bce4be99fab1f22dc32dff798ba47911be3b0eef24b10e066e8321c9331487f41cc5546dd1b73cea4e3ad59387a26296590f25066f2ea9ecb87bb8922786ca482de9517f1624541cacaf4f3432d58e83f67c30fc97793155e74d9e1db4c23263c721a90d6ec8dc17ccfd0e4c83f3522d4ee2170249e03a616308bb5330ee67d7d7d710695a78cbb3629dcdab246012707d7c72261b5902dbd9412c647e938916190392aeeab92c1c7a93ee24a4a032295c31e9e6eb5506feb844554ab952d82272deb0ab4c2e22b6e2b157a60515e0dc898a327ae10fa2ff3ea658267d51aeea1446dc73b12cb609404f5b3015bc9001c9f99a22966b17ee3b2139daf7b68ced48c2c8466f60a06817f8ede0ea174272ee307711df53b3f961435c33fb6e42ab5efd0eaca1d09d0d6face4a8f82463dd06d3ad33aba36a255232c33c54df7f5b3cf52eadad847d005de9a501c1dbe28c2534837b897f903f57508643d7b49e04eb9457cfefcf0f6013f008610b2c661a7dd8e6732560ac69414d5abda0f7827d114b00e954acdb5f5bf0b4edbff669f333faeb0038a408c74f76067b76958192d987a73510bd1f80f0e41473783ecab7c81a9a2a69717305531f4afdd368c4963e2660925edeaa9cc84e727d8ee6f3e3e98c6b12eb8c586d9a8f3e9390ea7a2636cf8d39010e9b79a01906b86387b84019e3e13e6d93acf592b3f7188a560cdc0f927bc335016dcbf9680472b4ffa383a8663b3f49d96e38b7eed77a22ef57258ce3459ae37f687d57c0822374b3702df0e25c48d12dda477f71081d24e564fe565dd1a18e3b5a4865cdee547567034b62af1504d770b51d0cba46c7e1aeaf1278e70a7a9ca91a03793226faca4196d46776c85ce3de108765b039acdb7bdb1f60646345f511eb718ace56720074db28a21d857e200e71ea9d45a10a02310e42930c7e8fe77674df3b0e37ff5134442a05ceb090ac8b94115860355e4d030523a066f1944380a744a11e44eff575558d29a35b74fcea0a3587e7804118ab715b8381ddabc798faeeaf1b317f71d847e5e1fa510f9d4d8997df6c5ddff8d38da1126da02992076919925fc0f820e4d5819f206a6d80a11cc8e808586d9a6e52b4d98e863660d952ac1003d3d6eb78ff6cfe59adc2d570f3a63a1195da7ef6ba0e5a6015cf10ccf1c09753f0ce49b290ad09d7366ee3ac9c6461bcd0014fc7e337c74b6a3590a18f5c2ceca8fe861e530f04293dd6090cc15ba122dbd20ed9bdbca4b6ab778b097cb44bba10706ff88aba5a6ae01dce54fc97a3924db401a331fea74093951a89e14dbfd339b9f1ec64d88a617492ad584371ac10e0382448a026c63c7044b6b5c2d16918ad7ddc8c3b400e7f6fe371dbb4575a14923eee12709fab5daea7d86fb32e1c0e92267aa6f54bdf69faf5814d22626ba23b7a351fb8437e8d411369ee27a2aff99bba1e3b7877c83438fc469e35312a0caf4d33fe6fb7a88c01bffbb0a289c8daaa808e8b992179dca9274288267ccbadb5646b446990dd0edd1755df12b6afd3d46538dc3dd6d2d18bd3b4aa5c8404f28db9d6658174c5065c076ba295a9f9543f348f6c25b40abd39ac9969cc948a22456b312f8bb5f757350718c1520d3fd6a48e547900a05fe3c71ae06e864975760494c96f2ec7ed6073fe532bbf22eaaba3b4694378c5575b7cd9e47bebedf809a12645198027434231ba05b5f20b3dccbf1f84a94ecb584d934270f48a4892600302e76585d21b885ef59e420f2ea7f4c6d7a06426425541b57091a82c0f6efbc8480ebc20295205163e4b1935aa47525747e9d305472eec0f6ce7c6d8790dba6122693d021bf3f614db6c0db393fc8c20c38cd9a7d075fa9a77340a5232e382b82292863eb29c0e8e83b5484f8258a251431d0bb0b190c03f67c49ee01eee57e398b75ac5a4b9dab1e5b1723a4926fcf3865b75329deac911f5571d32ec2d99405b8971c418f3c5b2d6aa011243ff0355fc0feba0dc129fe86e749fb6489bf8d28210315ae0936cc58291d59ee1e49beb44a0d64391431df4287b17512ea3693c0f1dcd6f0fad1257b40bf697c9849a2c3ad55992ffae2f5905273249296ab518cb8ccc169054bb0ecc22610ff9f20cb2a1da14d768ef260e7ef0884861a1b677d95c72ff0ee62617e56a9c0945c0514154bcdf3761efa0648c2762a2c56a1e779011802e50d08074cac2b19a656c479f8ecb89c59d878adec662bc9c70b054a42c09759d83c0a6cc83c0ef12d6a5d3fdc73fe71307c76dd9646254f736aef9265eda9efa5c2e3b465f5be4276ffe719a77a54647f8b88b086067bddc1c99bf8d6d6a5de737c77a4d83f1c9f929130f7691055f13d520fda64b1d5a7675b2f887a717b4ef20a4bd2706ee1d90d4104aaa60b70e81430a3d0253fdf0d1c32a3536c7cc398da865173905ee6c0e616b845054d075c9208387ab6e64b53af60d756771e6ad2d3513534d8b14970514904c8d586c98423d1ed02d10a7c7d068159b6bcea6890319e075a529ff0871e9997870c032457deb83b1e5923240dd246deb5bdef2d64bdbec55e3b4f0a008eb2a351b0648b6090340595f7321c8ad4e29127a08393cb568623e60b41e7b339fe626fafb5a154248d34b26f649877403e8c7124d280b97e2adf569aefd94bfcc0393ba46e5f01d93844613b6683e976e67ee9a58693a80db216eb012d85267e8795445dbaf1390cf51b7c928b742b0fb872fbb12ef7277c7cb6f0d69eb37fea8c0586fec4f68e2a98e07bcb4089848c1a62eadd93542e0da984173eb0c98fe1e2622e68595ff6c3f44e03e048dccdfa9569d07944564259765a1a32101910bb7e1a51d56c505a5d4a7ed9f9209653b758230fdf64e307e455a556091c539fb78cec6b7a8d6865fadca4134aff2622a1ab27cc38c492de732ddfdcc0d90ea8c3a946a7d671fc21516fa116c74cb4343d9fb67e813817f2b688f1b88af313578558304e7c84d559d454c377049c1875c6f22120c190d46a50b1b8c43c1412a5a663ab252ba06121a31e7266d80d20a89bd5e422235295d833cb193129957c5c27bb84f0c95fb2f3e9c0d6290a997f6e17ce4200fb42ea89ad599029ffe8f9a1932911363884dda9ed77d8dc1769dc9aa994806106825e01c2e67bee81837538b1a910773b55536bb2b85b5319600dda497c2a1986c2548685d9634f0e0d546b2f1a4226f4f0904d99901ff8e176432055f001a6522d4386fff8dd66106de2b3344b651c199e12f83c1374b883daa73d423b9f0fd70b5a1d5d65ffdaff78722e9e5c6238c9d684d3a908120d142e97e9500b454e2f741883e07bed8796dd19e83423b8e74dcba05960a65788882c32d1f928e50d362c19f6299ca54e0f956e98c769d6dfd020b4f6f5cc7dfa95cf52d9c9459a417b4f700402b6d453a244ea2e36f3e25d6143abdd134a70707c7bbb7fdb365f55b3f14e6c0493fceee15e923e496f2a8911a550440b7737cb3c4f61e119f4a5d8f9c15a3a9c235414a88a948b3843ae49ce0b35d386a8218d62f60c3c5de0dc5ecae6ce36ad9a698239d2000d52c3b11e89ef89bc681af057194e4a29531bc8e15fa64fe94a11aa59b8ad2ddaf99b226945afdafb45fea2517a12be729097665a4cbe587b8ce74dea19b55c6408a853933f4ab5aac72200d5935489a8eac9d45590cdc0090535ef9e1694c45a09a5769671ac9889d051cb65d91eb017deda27fb553699753366a7a5eb654ea7ca6336abf14f3e3051bb2c416da27773d96c48efece519482e4008228d1a10e234421305bea0228615e928ff98de4c929ca779d49c350d1018d88749f2e0f9161c56064f20b79a7276e4cd1539743e5033c320dc9ef0c3d5419520488dda7d7bb2c9da81314e01cc3c9bd90eb90c008023da6ec578d89781591ab190ad807a9cd2fc7ce4dd63360a05b06d77ddc462af68fe97182c10addb9da1e50c2789270c428145df86893286c0a9c7a98dac77c78d5253191f4ff3d7ff7364e701474d0fc273d36525861c7fd1ffb8f5420903d3a662c48d9394704e82840c850ad69d9f9a02ddefa682faf4a98736f80fb8ca721c57d62ea8a09fe7b7fe87ad7bf8d65fb9947ed6ea56d608ddd9dec3aece89e0301de9808e56e4fcd3e7a2cf900f9bf414a583a653dd907723939ca62e95869fd60141f2c7b6c5acb8e597358846d80fd722c483d8ba5164c4c0ddec516c0def803946025c23a88e2b4b9249c6c1544c4c829e853681b600a1a7ca1487835c523038e7ee847a7c0db4dad6309e5acf157352a5d58eb830ee90ad34fd8dc41f37c05ab25bfeee3e72abf89863db83ae58ecae63b8f9651dc4f848cb68384eb4692b0946876b63911b807470ff866287bf8da14d0d1ba5f7bd46c2bbbca241b44af51b89ba869570f17f21352a0d6d84302eadc9fe7dcb5032518debcede7463bd4a1e96dbfc66538a0acd7600f834d351ea04bc7593b640130209a50651b2dfa37957958a06ea42c3a330b967a1ee678f7a236f81204e92b1fd6b639f32f822349c457e666f913f6ec1a529232e55142c0fc4f3d0ae0165b891322b737af444b473640e9f48fae32481771b4414b0c9a93d259cc329fc8ac4e6029168b4b97e7a603474ad305bbd8b73d19e6e2f7415fa49950741fadad0d58db35640ea093de94b07eb3dc4f1d0b02fe57ef1263b53fdf5ed5e8844416a038014124c58c25e22588bff34126062ed7ff8c4d1578469b91a4246f48c8fa619cc11938668e0c335385fd36f0906335999e38cc24354d7b61e5db08a3577a077e0beaa07ccc88740a7a2a0458fa9b77b409cf76768c18e62a5dd7172c3cfe69247fc5450128fd1afc61bd4f7f260dae24bd0beb91211198ad5edda17a69d12ca707a0e37100afbf59ceab8a5b3492946c110b4c2517ac15f116a6fb0565aa8b21dc87524e0fa77cc005483a8d5ca7b04668f1b41c5a4c0d8ec31b9d4674c4c82cd5a570428feaa2a854450b17025d765732fd9b75ba163c10f8fedeb3c44bb4746465245b331451807ce305667436f22be0830c6fa98d31206c161281984c0e7bc58de83e8f44bb2a301a9d135a510b141e3ae3f5cf94225e2add6288c3469586e9d45853f3ae4ac49bb536ffcb1d365268e431fd0705c9a6194724beb4b771752a65ce75e2436a47283cd23036c4de85daf57f09af015c9fea49990b56e91b9d5bb4076a07aff0c7f96aace05e810437aab950a71408d806192d288f01f46818c0eb37db9c051d8754acc0323e7ae1f6b0e22a1ee90b163edf68545fc583009a66cd7d31f5a13f5307be2022b33a7c67742b85ad5d944b8544ee821ee947e8c13a229b0b98418d060099beb3dc8f1a7ed02e0849506cec2b942a78da9cfe59e0e760618a95ab18a5480b2b7a81fe58c6c9eebe3793f1424c2d1b4af8f04315699e7d9786ccbc32b04f3adb2ccee77adedb48fcfb237587e7d5007a5c9a57147a43d686932a6023477a23db6f59f8dfc41ba145862b5c6b545d1c211e0258349b6a919183b40dca891aca397ee2455249b801d79f943ff815fd2a23fc0dfff1fb2f13bf3433d75ad9346940323889f20083a5d40d69b83b010835832e7276e8d74826e15de3281c74c33c14a30a755eb836eca84f201f619a66875a03c5ee1df766129a8f47666d4c41b1021b611d19f38824fd1a235dc7d17e471c94afdcf3ebc7f92755a44b753dd48c57e4162aae88e4191908c076ba0fbd7f158420c4a151f499aeab21af06b0477d2bdeccf414d37402f1728369162cf4a1a68b4c20810a8e773a31b12a528f269034272cd619b015266f29dd0d5f5194751509b103c4fe86bfd007817a7e8f2e2eca96cbc2113be75beb10088ea7fa37e67750f58d1f606be96c26b31abd4535dde4c73ee6da0b2413e034c3ca07c88a9630a998f17f67fef22614412e91e5b231c96420f13980008088203dad2169b626a151a572564e4dba19fd401da95b9ea7c30a3fcd7588c29184577331a9ca948d7bda475cef0942aac924a49c40b22c1474550eb13728143815c5606b4c85789cfac1f91cc10d575ff4b409970bc92467e9749cb008bd5f52f4d00bea84090663b5bbed9962de326578ae9b87b3f5af8243ed62295ab293ac2a6758b6b891f075f9c5b3e58b2d23558e675daa106081ba9d5655d9220a4ecb8a591f64e887b43775fe687aa372fcda0afe60ac8c8fe29c22cbf71c95edeea6f3f8fdfc7c4824f5fbeec0c89043ea2e5e44659ee8bce57d1db8891eb1a287f42a504d03e1c26009ad8e9792c5d3f4dc323b7060e75a4b2f85650b649337ed7da48e14c9d7140df45c9ce63dbc158725e3c3d4e6cfe6b746e1327c7eb05265e8c2d6ae9e5f967076c96dad1d82652b1780713b538c81698a271f4b2e4fa935257b45c7c45600481056a6ed2dc426386c581f41229a366f9f0a1651b18dfbf038d7f6f59623bdab25ab845ac98c15819bb743785634e09e5395bff3bd4c38109e3bf6a4097d9f33e38cbad79c8b65cd37fefc6a61be32640e3b24e942ddb7d966fc60fb8deef1b092fe722e3787bf6d486653a0cd04e33dbd9d480d3b725bc541fe23ce5c53ea00dc502af5bd804463f496daa2a93cf74676b369549f9843e4db2625a06b7ede86fb1151378183077aafa482eba8c0ce4735647bd4a6ca3c8ad1102e2b35bbf1776a89302e037ce37d431b477982a6786052a5d819603cea940a97a62fd294b2c466981d4a15ae5644535ee5acfdca492f24006fa04807783b4b1de09fa0e0aa3104cd8484c6e21d467b516075f6a5b5ed4640098df4ef217de03c5d2ddccf4252d83acc304683dcae0f923e24c0ff12bba81f4b99cd05b0bec84262358620c7e1dfca43f6733c1f0508380609a6561066db0e05c0201f8b7454ea4df46d5840a7459918176669f09b8d8859bfd50f9a9f06d7acc7656d7ad9d9dc38ad22e164f47dc17c64c20a3af57d6042c78b548351406322b73d84cc05910927b6499fdb58449017383e2c549020f66231934f195f7888efe837830052ec231b2b3b7cf9f1b157bb9d5333b7320a8be269718311f6fa031ced330069300dc01187bc3529b1e7353c79273f38ed20c46394009c0c77c4ca15062151cf874af74d69775df6d68b424582b43dc61a4bb2390865b90ebe5600f2c31083731e2270a176d93038f5f1ce386b1a7106fe842592b46a54c7c88503730334f8590b1efd4b817fb6410e08bcfb3c50d7834e7c0330be4d88bae799b53e919601cfdd622708fc275e505c4bb7a7a0af8f9ff6437359faf50a3cb0df1c509ffdb6c954782c17c5f4b988b981c68b4dd4fc9594c389df1a28ea660d4e33c0be82479fea34658bd64f455ca00ef7363c7a2110d7bab6f2587b2efa2552d86e19d398fa14cadc218cb83a531ddbef50eb079a50a4a354be8f05c39f44b5ded9e6ce3bec4cfde8c6c69bc5451c7cbcce69a478d904be02565737bd3922c65baa12f1f564722fdbb50b346c34153513a622fb041e48a8d79819bfe779a3d7f0ba04e4ec9f9ddf3950b5f0065781f626b8f14daa04d9b61623952f8eb7bf3043c2056b6bd798e15ef1e3bc3bb3108486a9faabf48930e9bb8c6ad261539b7812c2d600acafdfe3b98c06ace4d1870c1f0381e5f41d44d243d30edb3f3098320f273cb3664efb858a24d275c98c6067f4e6685f10d5729c79d6284ddcdcf37072c8de4ab83dd35d6fc47beeef3143bacc27be3b9e5c6c238f125c90b0e64dcb4b269b20407cb34322f697077dc3af559de06c760ce06a87319b123b36cce42992bc5e87693673b0c262af2efd248689071e5edb45c0af0e6cb0ef907be0415cb039c1b703b8b84f857944b170ef85094090275518056a398dfddcff8b210f6a505c2a41103a21c555ecff481f6ca9ee978705e54c72f50e52cf0379c24501aca2c3df95b1771ee9867ae24e11faba13196d723ae9c24c1629f69d0dfb8d15fe41264632eeb0ef05c6b0433d7463dafa5b68338e4a1464caadf0cbead0cbb7efee0164d36b1475381801c6084a4c1345f3a56f1eccefc40ad219f02e2a263ff35ed5f011f994de8cd5af2e31d2161dff8843cf9954818795da3f161054f7c537728e65fcbca703f4a5dc8b3a8684af7210f1ba31ba91e652411e0a66e7151edc16af02bed577faccc398771ba9e397b998145571c3d0fd94f231dfdbfd9f46a7488767178c7338df3e0bc9629e3be0acfe87217276ce88ae1bf3023ec20ce6edc1604efba6470e2e54eba518e6a9955edad3c1918209ff3903a46cd044484b2b48a8fa36a9cb3f231692db75d795755bc879f073c9bb634f8ea91a6e9062a42706446d0fdc5df4e41d6f6c093114df2f59bf54d4561110d91f41473d069f287902782a01e48e698ad06c27581fbf6ecd5fb96ed9a3db0ff4844b80ff3988959500ec486fd1566ba9945b5c66a8458aea8f5c2614efecf54816498b2c1ea83d3889121e8f5b8cef16a978249c717e1bbb250d6eff6724789a19ec1e89961d98751cec963dba86af60839a587af6b4f84e2c433e509c87423eb941dc3745ad791191ab2a80ab0df2d0d244e20b7b430cf8efbfc2c0667065fa6a8b290702e090411c9beaa7b0184c07f2e8610baa841339b224f6e80525204be402cf66f7a204d22f002c0be4c2cf0a3c09a7f2348ed3f601338d01a9e366402039fbe704208697412e901fc2909e7310aa0c786e1cc27a907a729c2abe9c5039de2cabf75e49742d7850bc61f435f1a29cf57bbd68ded601f34716af6b9f05b6277c0799cdc6fe0e0954e814907eb14c98944c3adcfc4142b14ce5c0a06cd29bf6602a484300638c58afca5882b9267694ce92574b904b8846aea0d97043ba61676ff43224480f579381726fd59b6691439c5b24eab7eb027f0e00e007571e10fb7b89aa4ae460af869a8d563713970748961f240d41d55b8a30f972a2f060b3187c2fd1492b6495f691248dd956333e173eb0147c767e7aea0bef5d146a57a3b0a57626d4b3d590d33ade2ec563df8e775a0bd00dd2d3eb58b438bb32bf755e1c83aa9803212f69348a57cf6a19bdfb13ae790aa0ec9c0b06894491a7e39bc0cc6f227fb91ba49b6965e58915edebd62f5ceda6f0b1ac00b5fc43ba9f112fcdc8712d6fe6b92ab2243cbf4d9d7c6d62e1f3d8011a48adebc620b12072518d03d27f7f100e4560269f8bcd76d51b1ca4e5f2c2041cc2372365fe1f9c3a9ebab2f97b8004bbc084edd97603e4c1ffeaef623205016d8c009111f595204013f9653903bccf59c21afa653a56b250b40d076a06bd58636a737882a89078a856383819e1e0e674c92e11c0c345f5629b322c9bace8de812aa277240163e8035cf777660ed7038e7dd31910b62b5b73d4e9a13aa3362812bb4f6303e1430eb6e34f08710692f9cf7661c46fa82509380994e6a8809468eb74984312aa0397342f2445e59af558642594e79f9242bc062c989f92ade3bbff1f1bc93964a32541b5decce94c06aff36adaaee3e1b8d15d34ace774a59692bb4e5c9fa929891744c1b933f7431f678d1a8d1ef76cbb6383dcd605d52c64d7d416ea18dd34ade365dcc1cac1c04818b14d6d5b5d6a6f86a4565b346a7baa45ed8d89c3e39d7c80d53c0adb3d9082aa86dd5fee826d4a98b284030aafac82cc68ee27da74957d8095b5e1d9bd89d673c625306113b980b38afc0db357922ff7a5d929e9a7f6ffa61749bfad0367a2c55b68f3c43970c0eb93c31cf304dc38948ca6348b5069a9630ac5aaf89ce73a535d73e9f857f21ce9160351f939cbeecd9c2e14c8dcd6bc8176979f4176158332245dbe692b31a2101415af70e6b3160a9f762d485f1d615d0130c923331f1fde731bd2b4e9b72860b24415b2c8af17144a795c233fe623cb530a2580b03d8d2e19a5345e20c1648fbaeddb00bde2f04f4ae7acc1309ddac8e3dd40ddac24f0fae668b0aeba8b650076f68f33205ea0ca43ef839d8dd7d4705802d554e03eb4d4ca30fe247113b01a090d998cfabb453a69b44cbc38842ed78c54e900ee10944ac4c568380700066bbe7922c73aac462d255069884357fc538823df05ca8040ee6224417827e42e75fd9fa63194442c806d84837b3cb98fc4a8fca624245f9ec6ed96d1749a7adfc386d8f8df6035363a9fe1a1226df880ae63286e07b78c7d283954253ab7b90f379eac8aab74abdda146e8552b5bb1317f6563dd6f2434cda1ad4219d21d8ed0b823fb2c29dbab542c80459dc05df77740d23c5548e2d6ddd8dab711abf28cdaf21c596e0f560e13c5c59f1794a4c7c874d634d42abd2d726fb8dab569b8303371b172f5d5faef99e924bfbc9518009a882690287a05afa8f095471355c228316dc00b4a02b4cc7069b8b0556f2154e7f90a75938d767139561c158aa7b04a5bead15102d335f3936a4188429865fa35a6b18a4daa25bc415bd0e4d762e9d497df106b3aa812753cc72d49beecb19c48d052288a4f9dc0adfbbae6f2acf60f49c6c86965e5d5d70f1bdac346e009622394e47596e5954bc76ec8e61ed6843364ab9587f9e378c88328e1a2a1233b2ba4f6eb8d9db8ee72ee88e231cbcebc10b8980cab232ead62f0a36f4ce6b32e23c234b20287fae93af070900c1746913f5a1615661a438a3f0c5e0140014f19c2de28f93dd90f21e7bfad9385da22e2925dedfeeb5e997142ea7553b225c61f90fcf2e0d7c9f6cb212b36b1d71889942e736187607a6d12e1490bd1cc6a1df0c7ffa46004bc5d8f4c4c8a436a0ad3ef97115feb22e6083d9cc605a5af7503389f0371cee42f41730d7f696c43f35a094ad4571edd9a5355b8a94a71d1e135b8c89d673169f987e8988c623d62ce1aac489b35b1de69afa9ee26cf55ff86330ff636d8c43b451ae37a9391dc00c3a6dc8f11e50d9633bac86c5b695696c9a42b066f998149e1e3967f437f0659adb4fed03ba449fbf9937f2050ee9c4e535ffdb151030b27928bfa3f12d0a278430db6e9f74bcf1c6c9d808dcd26eae2901d1d3fd35a790b065af4c80655f6f90944d7937a0377d4fa7bd859b87dfc158298814456b232d1f41ad0dd910db4aaf07805d0390f919e979d349577429957de2b1e78a9e20bcb6002767000baf441a045f208257bf97d07af50aa9f606ed5a2d2217fcc00e41cfccae0dc1ca3db338e5783fe6b540dab97263d122bc453e0c72e6789b31f9517c9c2c507167057cff2c430a0e26f33399997e1d3d82aa5eb3e6cee1e0959ea27dba0fd49590a2c551a3fd39970f156a43f5db106ce60dbc06f521032a0a17a73c56c5980395c8a39fd63d751f212b5caee22f79850cbbf4b3b6f51a6baceb82a5b397b8acbcf161baabc9e4ce8ecf9a4ce033afba29159409ad9241d4dd8a615a51da94bed885d6a3a34dbb0724d5e665a5bb1f1352072aed8b34a0dc0e163333d036b53b274c328778a742301e8c167571ead1d00aeab2ac6fb63131db3feb6b5d6486b641342f6268410b2f7de7b07b008dd08b6089c0ce7dab72e07074f4c46cba1fdbe6ac768aced23204bbc3f98af3448ac3104534a77501baba5c2790357e8a74c436d3240a5f33b0db5b9a1364d5816e757e7d7e71f967bce85ecb55bdbb580e4ab37ad7cf5a66df9c5ac7d66bfe16c7b4b97ebdf598ed96e63794cd4b6ace5daad15613bea370dc33255fbeb0d5ce9fb5c3796968de51b9e6139866740d7682e4b86417f0f71a04fc7c37157e757e7ea5c97bd965d57e7ba2e7b69bf1ae7c21cce75ef75ef75fafbeabad7d584655996655996a5d9adb39734d4a62dcba236990669ec1abea1365db1f577eb36d5652dc906ae501b6ad34f069010b452b8753e8bfe613b8868ea93f52afa2b8e28fa8912716540a3041d0e7450cb3ff784ce92fd661d76db69f73e147279115dd3eeb31d1c6b2d8665389add2e6a79cdbaad2567dfb0c57e9f759988ce3e6140d86b1b16d55f9c453b38dfee359c4515cb3411ad655bcb6f97efb18b49b3b76b2ddff04ccb2b9e0971eeb52e672da0dbd0df593cf7119309e1194720fc8fc7a3691cc769b7af96b3d9bde5b4dfcc5eb39d4ea763adb5d69640d3b45b6fa67599081b30ced138783b8cee45187b6bb16bd9bdf73e266610db71efddae8cf60dcbdbc5b657e62c11f3409c64a69920f7aaa216a54dc3f1a0e1e2173e0290bdc5f2177a07dbae7df33cd3b46395e56e65b9cfef1131daa37ddb9e7599eb2ccb38d80720edd97e7fbf3de3fee932e7eff59eade36adece6dcf3cd7260c88ec97cbb7378efbc59986d38c00d21c9c8118cde14cd3f799a6b56bcf1c4ebb47c3345c73f51c9ea9f7e019ecdaedf28669b8ae19ce345c631d0d63b1a7d7700e753ad6dacc6acf36ed99d5b62c038140a02ccbb22c1b8176d89aa671cd7deb324d6f17e7dbf7d93dd9effd7c70ae3ac3b9f3ed1e0fcef6dc6324d7bd6fddf44e9769b8d66ecfd1344dcb340d67bfdd7679bfe1ccf58d7d351946b85563cf5cd3701c0d0dd747c050c48c60a50bd0af5482255db53b519f26227ace37bb76d5e4039016599f3985297e31bf93268c8942802202d890c9165d9d04539a00fd4a24b0e95ab91619595c92ec6c04905c75e821eca07fde32c3b9ad9caef3adbbf01c12d434e72c574a23a0d2970f2969292526d3f9c5b9c7ed23449dfd7ec276d873b4735edc441af6014867338e38f77174cf79a7cbdadf7dc03e594ec7f9c31e001b7b4ce47cfb04a273cbf98401b1fd6acf5573342cf201486bbff5f7d608205d710662b456afd56baff51ad6fee2a8e24c445f22dade9e93b54f9c534c076cecb6cbf61d2c038b6b31760e9ec15ef10ccb39a4d99c5f0cbf380a7d63f97b4b97677f2eb11fe0398f980c0b9e7114c2a7e7e00cc22f8e3e9f71f4b9405c9c617b80f0dcf2741989b65eb7d7ad93916d1d88ccf92644db1db32d20f23de79b07e70eb465ad1db2ad7b0e116d71a627c9b6f28ca3ed17bf38e230777ac971f7db863349b6b5bd9381c525c9b64ebffdea48b02dd26ceb39ea470457f403ec8b676ac42219f87bf88bf3d5b55482246d43bf1209bce899faea95535f554e97c1d208a274f56a7106d2b7cb44b8d810fd6638577dafdda57b1166bbdf2eea5e84d9b0df4f4c2636e79c5738d7731e133388f900e4613d707086cd7976adebfc76f65b27357bcdfe6ed7dec1db6324a78bbd75d99e7a3c47c76b11e733dbef39dbef373ce308fbc5d8357ce34826768667eae1b3c5a4d915577fbf6d75afdffbc470d01ed4175f7c71a54952c6d33014b32bea8b41e695524e729292ce39e59453ce49279d724e3ae99473d249a79c934e3aa59c723e34e5e794724e396708cbc0e242221dff847c8d7172211f956839a750d9c28a74f2440b264b5a3e2945cb237124dfc37148912612616ce6df9390c8a3714817cd11e978646aa2d44494214d9eb8f2441428022b4f0c51c1138f902a2a50a20226350821a2029b9b2bd8d253ca8542f024daf0dcac1e26aff06c31ab6e49842188d75eabaaa2d5b16714cdb0aa7a55853a0885524a29b59834a94e2b4a2badaaaed1eab24e69762dfbf59a75ef57471d62d6ad4a25d334ed395e6b58743fa351bf55750cbb9d56651866af8982544545998af078e870c03459c0c9132da250a184c9929b39a30586201131a53ef12eb67134a7684ea2897fa0ed238e249672424a29a4d246c00118ac2abd5e51143d453f435d22ca1242923a5f1716517c2128a532230ca5ac57224aa58f38aa37373f2a94c636bc10f14faa2794268ee22d104733c9ad784618f9c7c521f2bb8c40a50a8dece55cfeb25151e7dfcb4d102e1a32a15f2904455e556dbc89a308a588a323f3471cc51a38040691161882444474000482e011470988231c7888a3181a456ec6a49c7046f892dc8ce2e848b4ec18fd8b01c585a797f4529262432ca2190e2b7233c240111441fc03a5584451188eeac4a5b13d5f44125b54469fd1cf53202d3b084f51d2fe61105a495524daa976aa5592c6106efcb990a4f422f909484f14cb078403e2e85df4039d107837d8387a50c9f68425874da57fa0d707b42fbef8e28b1d382f42fb269fbd6edd6badf394e17ebaf537bd723a25385fe23b70f00cee7d76ef611547d95619b6717445d5ad3f1358e95732814dd3e8576a820a5da3ad3ad13dec7b4e27bad8861da6298e463d75b0b5ee35c4b40d8b2a1f71643dc3daa8a7fbecda696c571fc1514fd9bdbff7d671288ea6df0e4271c2c4cda125499cf474b80432a95c3e6b767816ce30c8fd9c7e5fa70075807def2586e3562af088bdd3749758a3c61adaa720f555ebde6b571d6257c470540dde7befbdaf7eafaccba4cebe752f8eac9126817456a70067cc695993f5325954ea542f7779ca70e7a516dd55315ad785b0c010b1463dbded1e86e3aaba1caf61ad15c25334a18ac24ff92ea3a6c7017609e081de061a3762e8cf451252ac318adc1ee6332976164dd33b9c6e2b055c2bab8a840bfb89a8d889a8479df6f48a7a5df4ecf7697aa70935756ac63b93984a4b3c29294145576dfebde0aaf394c13af57923605727aef5eaf634b6eb653b0bff40dbba85b9387a9781c59da82ec76b6a5e94e5833e27378724157a840375b1819a4c2851e4a626054f60be08246a3f83e10c4fb11db6e1a10d45713602485bd76e338a3d0cb33e390175786d3f311c76de4cdad5d49506faca1ce8ebfac364685fb365ea0423c260522a424584624df86e70d2356da48a7eb75e0e9d1058bda6a6c6036fa2e8e5e2084e17f4bca54bf49c93762f731ab941c9080e3a1a31415ffd4a4682482e5e666c1997255fa8f2e2844f0d2a39e13109b6c433c3e8848997a851e895b4fb8c22091353144964948302288cc4e089223da0f2bc68c217a0cca00b49684195284a305921003dbfb0a28209c5142029a1f881270a2ac8c6414a288a9420863ee515ecce391f13473ae673f04075a1389a73ce5751e839e7841f0acd39e79ca12969bc5f290a2cda06f6a6c25bfd4a51248111c6286ea67ea5284a508a22891959acc829a7144fbf12143f284131051445e83491e0be121443d0d0b9c24a45ae34174779f674656112411128f1c1521126464a4556f058504489defa955660838197ce2f4d730302f27de240c348cb4f59c9d3c041ca9858c1a657fe529e060e4df147c924576003d6d810ce342f1f1bd8d9bde09986982a342105095c30411228a5224fbc27566070062bd4c00455ba08451b7387978a1029428df5148bf71e0c7c8b0eee7bef1d3f5f84d2c411cf95fb3adbd0d361bf924d94ce978a3be667e236c5f4a94311a43963cfbf083f495d11f0a21747ddeb13dc7c595e0e229978eb455cb7af9f30979703f6e95cac3173dd108c9743f61e48c47703ec013bfe76ed62f4d565fdae5d03faea6ae81a9b7c21aded604dd70e62d157c780165518b688c2b367d3d841ad2d32b0b82478adcaa48867f08340483c33130f2710335317176268821def11cfbcc7c3535956599a85af8e26d3de8ef88767e25ff53a69a5799e9a99fedafab46d2b6c76d527fc343b7bae300da9e34c8f1fd7c434b2e31f56a78a696cbef094ba269e79a7b48ab7aadb55b02926131b56d56f476997e3e9e7e9df74a58d87b1bce261177f759986d44fcebcbf5ccdb7c8c8e2d2d87ea740c4bfd7164d2c13ff1e82472e2e6c156b90dab21465bb1947f533d7abd7ebd5af212e187fc002cbbaae236268b71c0e8dad2a1289c6d25816589665599665599b6559d687f5f12c089410f4ef519cabeac2f9be0b41a231240a03233524ba08747b96ce764d6be9f13ea265bba63dcbb2ec9f2e737f079da375daa609d15a55ddcb714ea25988bedf32a781be7579d340d7f00ce81c3cd3c275244aa22da21d961651c8b2b08442a150a8d65a8d5c88deb20ce7189e8b738c1a6a8001c3c545246a696161098540a0cfc7e3e1b84e87c3d9b67b352dcb30ccda5aafcbb24020ecf9a77bef06cf33d5d945cfb46f4884f3d4d959ded2bd77030bce53df7feedfd3e1bd19219c67df7783a786e7d9bda77b6f44a2ff9fdfb8baef424cae646d541445a2e6842191682c8df00b5058d67589ea6da7dd1b7279c1ae551adbe96051c544ef882aa943ea90482451a5b1bd5d137dc3332216dbf79a6d9165f9b0843ca0cfc7e3f1783c1cc7715058966559966559965483f30ea77b716433cbdaacb56d376bad7743360db5a2a85a2945294a7d9214fd857365b9846c104d4ff312c48b7cf215542cb7eaad63a1b7dc8ab2733ed7ba8d9b3edf383b3cefbc5455be9d439ddf1a167db08c07bf38e2bca3dd83baccb9a1776ee86a41f4fd8401a17de3702ee7f97d3be764df3a98134410bd9d7343a15f3c137a07cf70bf2f39c3342f1dc22f8eb097e6fe2eb21c565bacadb5d66dabdbc6c2c2c2b26ddbb66d2be874cee9f24b739e753988ce3cf7746fcdc5a53750a8b57b42996b6ddb42f87350e7e93617eed93d77d1707ecfbae9a539dbc6f9d6e597de38dbf642f3f29e04f1c2c48c7452f847fc11a1115400e23c74ced362afe1dc63f61130fae3f101487fb06fdf8efd7ec3ba1747d572381e1f8034961901a4379c81188de18ce3e1705a385c4b87e33a9d4ea7a302ec8d8de1d6b05e3c455911dbf12296e3ba86e8eb154df3e80b67eaaf62a72c8b5568e5a817ceb7ad8a8693d28914d82996b242bfae96b7b0fc9375aebdf3fbdae940bfdd06fae6f9f688edd0dee9fcde7b7f5fb96ebb87eb3a3d703ab9f3774fa7e3b8df4f8e7b06fad479ae9acbb7b9ceb9d74eb779dee9346c046ccf5f6bdf663cb887cc8ba31e38f7fcf5b683d3c11eaecb1d0e0361e7f00c760f9ec9cebdd3d16858cb6ff677d187cb5a583e9f6dbbec66b95f8dfbb5db396dbba15028b4d93a3f29b822d89d6f78c6de7a768ac9d8edf09bddba19dbf1e00ca43dd7baccb576aecb347dbbbb2e20d0e7dc3977e9369cb1bf73ddf44fe7d83ddd11b03b8f1293e9dcc23188defef86222f517133b5d7ced745a47fbedb8733acfb72e73bdbd4a4c26c7f5741193b9e76e077ba5bdd3c5ae1293e1fc6139362e8eb2474ce6e2ec1a9eb118a6e1da62abbb9d4719070d8a395fe3dc41e1d9c94f14fe117d440805059675717ed987b8b7d4eef3db6959764ef364af751efb86e187fdd3e5edef3ed87b1e13319beb317c3f3fcf5ebb49e47986b368c7762cf36099edf58fd65e372cfb27c3a4d8983d8667ec3d78863b29574c8a6d2f977139d4e970389cec35e36435e3542d038140204dd3344d4301b65676f82cb32ccbb2300c887dc470f488adc5c6ce3deb72957df4fd7c709e9d7dbba78b9d8d90d839effcdd6f96eb7a501cceb1ee758783332952cbea3088edc0a64cf60dc7c81b1bbb66316cbd5bfdf0a249108b6227fd0575b0a718a6f431fb9c32f4f5599783d2f4f43a444f38577f10eb60cb1eaa5397a188a05d264df0823368f569fec2958cf5e955974366ca319d9a38d3bcb98213783edc4307b55ca49db37557a6feeee05c3302b6bdb665228b4545746eb55770c6bdbd76dbc96419b6b693b1cfecb317479af6da65fb771f384dfbf6d9426acd6251764e76fb3b93615111f59ccb3c3823ffe8fb076770fe2a8783399c4e267be7b5cb91bd93753029bbd96adc395de668bf9f9fd80eee1a9ee19ee1191acbc134b6b90d671adb2d7f17815a3e20d0e7f3f96cd738dbb5cfc6d1348fc7e3d1344dd3b4136c87bd6dd93b9daa63a4466339db566dafb60d623960cbc86dc319f6f64ceb24262aa2f37b194efb3dd7f590f576325c0eee6a9d2ec7bdb5b13519d9d9375111dbb5cb547006760e7e70460e10092d7f75af9fb484522428623ce4173f94226d5435a0ce106750ff31b1524ad207435dbaa4c0d3d4a909cc9ae3176126a8444d1cc9f31047f213df906f71c2cd504acbc3293555628d2d628d4c03ca29751ca1e2c1bc2a1ecceb0933b1d171c4c983799de14d0d050223e22244d007eef4116ba0e1e55083bb28319932e19239ef0dfda35195e1121dd0a22879206dbbfcb69794ec48b42fea1675b9389a8f4a5c90cdcd70c912497154b285fa5eaa129112c9477c6ace88490a76f6dd403f754b543b6c4d3b4d8f3d05d07fa8706708c70351e1121910e43b50f845981d402099a82f8708b917baa11f00fac168d99c67a2acf8f76e989fba69e39b31e79fb4e19973f6a4a32b468ed11409764465718580acaae7694923e6de0df2be917cd5d957bdf94652d2f4bcb68ab8c78f9e7f188e0004e288cac7bfa0be5852c245c90635a5294f3e4f3e43a0c1421257a670c114514a408710e1022174010c53a2502386181f4fe325fd8b2d6fa89c5415c2a5cff38da6391bc7a4e8f4c5175f7cd1d3346574427d714ef5d65ec7307ae714f4d2e29043c4915585a6d70ac33151d39dd317e644371eb39af595c270544ae7bc756be77cb5d534b5604e3aabd0e9f114758384144e25c849527a6392d39ce67cefbdf7e87bf3c91f9c9a66171fa5a7ae08d8d4a9575da45e5355931138e9374d737296b396ea01a546b812e99defdaa494345249a5947146196394f10834ce18a50c228eaac75ba7fea6c7d36b9a8feaa494524a2752ca28df7c51c6189f7cd311e6a4265a55d50c6550e8a4949a14a526a5739a74ce4f483851a880516e1163947ff14126734e8afadc28a594a2e89c9356749a74ce49e711a6890a8d1242086b053251135228e18432ca9c5397e3f544c591945bcf49c6b67642e8c44e0921847036843680559b8f9f9d11b02710b8c5f888c168630d6cc61821845c7d4f3e18e183efbdf75e7c5008395e3ea574e3f17c4394d218294adf7b2fc770f2de7befe518efbdf7de7bef139cac7802155032101b6bcc470515d1c6576dd59c739aa016fd4a533069f9dbaf340515eda434832afd4a5430294d41844a21d1d7d4d490e8e707b32316fd00f18ca3cb27dc8835353535a428e50738402613937342f82982d82283c98587f108ceaa80f4a09aca484ccbe2f1e2d2c5eed3e4ce471b3f8858e23b40211001f0f3f6076e1a3b198f4467204dee7bd30537ddf52b49c1c5112f32d798e501219e10bf2999c06ac18f0faec43e3db833d469e777fdcb489e06ec349cad07675c3ce208fe306324c55917ea5c422eb1c6f4266532e98ba31ef20bfbb9e24e879dffe9c1859dff32ba2e4f23013874869da11038230329495145ca9214535a4a2804bbf0fc0e8a33104a67bee88bc4a085c5e9b483c910261367890376d3344df44c268603d2898794b5a1908e471cc9bf0923d99e6daf967ad5a6299468967e251958e92a2d3d328bc89b48a429e60183404bb33dc514eb01f6ac2edfa98d6ac7e0332c3bbdc454be344cc9cfc6f04c952da6684f15cf54c72a3c234f1bc31167208deda02df1d543ad70b63d4dafddf629465669abdbe590e5bceaa8df8e83314e37234c55dd635d7d85580fd42b7bb9501cd51f180a813324c53d64cf87840482450c0d75ce3993a7cb2331a7395f7bc88e8919ad2c5b6badd64971e6fa7b58add65ab53e2662d775ea62b7cfda312bc70d6bc9198b17676bc55f14ce0db538414106527a00fd4a32a04206451a36d1af1483205db5272f8a7f758273827382738273ba9941a2a7675dd79ca679526c6a5179f6564121daaf2ccb32ad9bc1fe1aded77a5d9af6646748f40c3c96c5cd9cdf963c6776ae25b655fd5edcc1a4d8d9330793625f38d33e8f75b6f685b355610e0a813328460202b9919a01122f223d2976922a920c49d2451fa05f2989931881fcc0e8b1782c62947a0fd943cd0fe7394dd83b3661efd8846113f68ee11839c5cb6e66ca9e0ea7494e973652367c7dc6fefee8310ceb6464715b646481bd853ec76986a44d384f99d661facbaa1e67b1485101832b3078d255ab339e141b49921640bf1212245b3402fa9590cc4751ef3ca8275b527ffdba49bd3cdbfa7b86981427ca4edbf3f498eb2b182ca3d9624c923dc9aacb17ce6f4a8e0c6446e2f86861526c1967e02719f88962fb436d197116e90e300a32f9db5e6bd5309c022f0ac372609f9f5410c8e4c2efea300adfbe20f5799d07d5d59168ea8a3caecbcfe17b4809e32b6a87c43976d591a270f59a49125213cfc457a70ee4c7454d4d1ddecc6e461e8986543dc583fa8436f0f24c137bae7e5d38c321bf30a4320c9362574c8a4d5d17bea08c98143b831f3c211655b5cacc5f8741a00ef01784f9f3e9190ed1b01cd8219ee949cdfcc120cc417d66e20c2d45c163b54226748a10c24ac220d8af4f1dbce7bed369cf3a7beaf5766dcf2488c16342324992e48c9549aff08278e28ada0e3b6cc322ead3612765ceeab5ee7533c3f94de9c90a8142e08ce9f53cea90cba2535b96655150c8063969700194161c916248d3e85772c1946e818d112daeb4ed187fd213062518d4f40ba2f4a85fe90549baf4022a5d1b9edeeaafab95b7351286c21833ec87ab2186e568b9fcb45e5b363716c31171585808f9a8b43cf4f1bc5321c6e2b48197a4887533da9168e872abcb5dc6ac6351ba60b71e13238cb1437b0c9c63538f89b0cbf3065688a1c433d4b5c71c713e901f48743cb47207bae194a2f374529c6939121dbb2c5b36f60a2fe32cd299147bc8ce70478edde232619685f3bce9e9a4d8d1b22c4b524b524b520b831d2b472a16b5ac4709bb0cfbf37c3df11686118bb44b215840dd338e732064e0e30e1b225087784bc6c4185b3a0dcb11e311cfc4b73cc3760801e3451ba277f8b1066961568c5b2b3e460d3070661d44a22cf54953ad4d548c4d75b1e35b88b41cfbd4c5bb74f6b09bea5bbad7a22edf268e261a12869e05e72a847305c2f97e70be19ce210f8d3707e7516f388feea5aec73b735d27a00ed3845d462b3d45da1a9ec14eddba855595750faf5f2caa4e1d63003c1f3f87643cdf970300439b97aa92712f7e925a9f3e1b3ea3b00c2c6e0e527250b5f70861045571631510468aada8a01c5c8aa2288afe68f9ebb1bb9e4fc9a7c31070064581aab8972a3d79d2b7271dd2463504d4e105ce80178bd84aa761d0c20821d430cdbb01121147f023781ea00eefcdb0309c436d23b49cc4063171238c17ce16767e5b6c61453fdca6bf4d1f1086948450a45f2908454a4118f22983175b4c8143eebc2c39814217008a41116265e7070a375399eb39a5942f076aa226ea73849bdf14c5d9409da228ea2197699a268a464ca287f861021422179af82de1663be7b41756d1e2726f524a871047d384e33385fe32b29d0c2c280a420a4e4ea0d1155521b94ecd508fcf1416c9e0174f7d9eea5e4cacaaaaaaaaaaaa2ccba29145451ffd7bc4707c88305f2a1ba718a117b2b0e901543142132d9a24e91a5f84326bc2d5a126e1d650e78b228129575a0a4c39f1fb2801563f6afc20e166f972788915a850f0e70917fed1a81f29d99e477dd8270a777e7e560f9862c90756faa55fe98a2a5da185148bf84cb148266224f27d9c400426a64c708a2a8ea61a54c1628a0dee2b35b9914d6cea0329b9af844592d7d5919eb7252c9274c470e0db2a4251b5f7e68c93c6ac3f2a941493103f0b6dacb819da34a1a2c4fd93d286761885bab18915273ecf5543100c751586036e8f89b00974126bd4d733814bb6c7439b58a322126d846cb0fc03ba75960e5a01c54fb76de77038af14c3300ca3ef9c7b9671db3bdb6597e3940ddf388a423c98f88b737561af1786c3be669761845b4f8fa73c8458cd99eb0c6d22910f1a6e4c9422791df8e10901ee0a283d710e35176d0c401fb8d9e6780d4570e15f0f1524821b5fc189561dec4a5555655b0ebbaa2084a1072faf40a3d09a1df2143e02367d922b9834fdfb8b282da90e2e280438b8202668cd65c3928239ab299212e929d39454ca2614e7919cd2491cc5432c47d513cb2671140f1272ab2a5545610f9f8ad4aa819680968096643ca81514e43e3c8b78d185142daa50226de4902dac3c7122453ce2c514294baa8036576874bc5450900be183b407a025208448ea7ba9a0256e8c50ca99c9d0a638ffc055b6a01b5cf97923019ccb2b5d11a5330e4f3c4a694563274ae95bc1341d899e37313a41a7cd7482d27933e3675751233db061c28409553dcbd3393cac47eb767e626ae10cb11fae9ef3950714326138a274f9d65d07548f91199c62271e3ce0044aa2ea3c9364ec742fc2d48e907a53e2f429059f0d63841f2c26a510423340ee076ae6c9a9c3341662e046d368a2be9796d5278b9b674c6ade0803abea735aaf15565575247aa28a78715455a7f083334e75d485e43acca4219130ddcf152e50a4075e882207566270a546154498e8c28b3070c1891d2a7ad331463b7ae1ae7da14853106f9085174c810329b26841941648611304193881620b3b641a5650b1a20a1d4b5648e1c11c3244481021438e947aa0a4648515a6132b9e587143c5198a2c81b284c90eae50d90195283b68d2a4a4832567b022c892293b50526794a62f2f2fafa02537bf2e5eba19541ff5d761c3ab9b47780431a5c8f366faf80195a87c5cb3887d7e5d4cf0c81c725d780e99367348ac6169e0d9b8494026ee336ca2ce2311867e2eb963b8714a1c8de8eda7cbf310e2e5f06cc00773ff2c25b6212c7d7dfcc0d700bd8f9743912a89cb44d3cf336ca26986473294e27571d50bbbab5ebf3ef7dec31a1f3fbab8f6d3739472ed90a6f83111c9cb678d12b1867c55dd1b0afd510a8c2cb7586eb1fc8ae1639ae6cd55e7cdbc9949a4949b396faa6bde54d01577dea2b0ba20b4ae0f10ee9bb35ed44b07009d4ee75405c08b96635bf5bab75e27aa920180d955d4bcae0b7e067e2b72c4a55a918aa8c483ab8c2e3e89237a0074110ae5626311193264decc9b214d3f6f620dea365e4e3f95cc25b3c99462563199cc245450135a37f3a6c811970b869e5f17107ee30e6190213e248638d743cb05535691ebc8cd4d1c7de15687f11a2e68038fc41a550b115824880b9c810fd6d447262f5d6cf2813643ae0e06c13132469761c7a8d8471c51eb17dde53e5e0ed0028140a03f0c87cb6362d7cd22f3481cd14f0cfa9055756f603cbf2e6a789e3749dc47acd142b11d2cb73e613fb0dc6a39fd8f9a97c3fb81a5073c02f615136374af6be860745c4bc7d2853a242f0775f97eba0c8964cb755d1441757e52ec74bd6068a76b46891103e0454907443e6328e5e048a98a2ab489520e6e4a381852ba8117a51bd8946ce0056849849d24437db2896c426514584536914d2cd9a441426e9e1da77486542015d015d7e2a022a535e3a115b885a602a9c02ad08abc3231a99f30946cb08594524a29a5945262ef5db592324449c993cefd4a4a78d0f033c6182d565222c59c736299921164769aa629d3b0cacad06c55559576957ce0daebbaaebb4d68d8acb5d66e1c4e173836cbb28cd3c9a4d0b1f7dedbe1e61338cbe170389c677be2b11c8683e3382c47f5b112625b8325f1d58006cd3d7e6ca9062db0f5c2322e0bd5464c65c908bd845c1e0ab9fc2546070f717485864920839085138ca0408b333841870c9e28031186484983169c88e03a59012641e814355981c81523d4a00a5a486149a48207d2c005941d2c71842c0400042b32e80862745452582028d9bc3005a19aee52c9d7244647e8a34fbf520d865451545068ca1f10c9e2c8e70ad4445109882327321a718403455113450121044d51a51fcca0292a08f6c5863e56c0e1d1c0092da35f890655bc22d0392195e3c12db8f082054ad477f8727813c2f76e9811b8f845181ae7112847b43832e5481523f5bd5c25aa539f761e49f7dae519209eea3acae878184f013144e5e61b3762a6c7df98a24b1cc51b1d9f6d0ef1e08088837c14551eccdbe2c184b878302f0a2f1e4c4b2f6a5abe8a188e7b498ba3432301daad91b5df336d18cf5345a9c5e4dd209f271b7a39501dae1caceaef38dc381c126ddc1040022e008e69c07836ae849110e76aeb7cce030f3778b811c383ecc203825d4cd4a669f04817a4d89c1bd1c6e3e166384f1c626403f484e9f9f758de0c7d9ebe1c6af8fc047580f179d1ff79a3e769e050ba53ca1a8ae54f56ea31708ed135c0e87c8033e45d3a07c491bce85d04b01e62b7e020de0df2a14e87166ee8f3445e0e1136b9f1f15c99f3efbd1ad3618db4f172c982eb9fb4d13dfeda43a0d72f9d0e23501ecc6b199d0e235a3c98d7b8d36164ca83795dbbaed361a4ca83791dbb1c6a5047c97f3a4f97abe63a526c8ac6c7c97d4d75381b9ea623438e103952440ac8248e9ac49186e1928f957b5813611048054a89a31b34f20d1a5b70f1605e7b7144091b3ad64ffcc39cc93e31f77a4acdbaf946b8c7f41f644f184990432a500a94d23582d001011e42dcb871c388124686182162a448d5af524bfbbd523bcd378a184990cb1a1008ae0d3da578308f8aaa8aabc3c8e8d5a06e434bb844c2c8df254b96c8253207a38fa8144dd7b4410b55d1080000004315000028100a87c342d160304c3455f30e14800d8ea84864441589b3248761140519a510320610620c8000c8c8c84c1b000f6eff59562f8ebf03b9c4206dd1c7ce10fc0e811883deaf1502b08f5a9794817ecd2e9483e6da6e2903f91add2909e2dadda10ce235baa604e4b576c19432d01b9f40ac489e516fa4bc7435e89a12d0afd98df2205cdb2d25205fa37b4a415c73179441bc56d794807ecd2e9852067a468c5c39d8c52540d7693a30866868172f1f269eca1ce3a9e2c1f3c95443330595994200e86dcd55af29868e848d4952d43404c7e77be91c332e3fe161ffae83e9a968bc4f9bd0570424333c93a2017eab7471380b679d2ad9a3b3b74ee8aac821bc46253f4fa402eff556e77f7c380297972fb15fbf035434c8c86e352a1bb5e4dd7df0a7ca91ce3927c4ee6a445b306662c9abdd3d99c41cc79593e99d09f3fc4c0766c80246b047f31684e0dbacf3191c3e06357de2c61f23c2a649b01c08f42a25181da6f4f8a69731a16857237ce23c2fa0d496a5a40793e9eba0eddbbb12c74324cfb7eb5578022b82ebd05b4771a41529524f2214bd98d639f502399fb7ac5595897600a2ba14807f94874abe5204b7523e8d4f1d54f7b960a0245a963dd4cb6984b6779c6f1015278fd7f008b764f41e2fd40690c31d09e4e6f6f428c0750b53a75e46eac67e63428dc157c04bf0f005df58018290dd226f31c42b427b09c47411bdd5e20d67ef6f7a712d92439f2b1284439f6d7695f1f7d757a32ec3d8c15852863b27065e576ce1702809a1106ee334bd6b45236c41420685600079fd1bde719e0a19f9a11d05fafd9f7b078453c6265ecda2e3aa2a02c0b8aa3e492b30a74625db1a3f2b1fc387e00cc20d28164396264a19596afb891296c57bbcd7609b22da18e145cb9dfd7ec880f6dda1034728b19851b07d2e87730e691b2d08579c8e3fea154f3c7af6832106c1a3f7e152273ae5a500f1e4178ca437fdbe86b8a2f1a392dc2b9cf974809043207c0be4cc0e65ded699341140751a95322f22aae3198ca5bb41039c8e302a19b697ab01b61ecdf6768f83bc41b748529fa28fd09fd005bafcf391f308493503d62611b0bcf8bed02a530ad72b994c3b1c038d5fa89a772465798c8eea596661ea1abcb646d0d5cc485538f9bb5c0bfebb490ca6bb29fe85b955d517f5980ea1c91a620f090a138340745e8530f801862e1b93864e87b4f913121e87da93de646ff4af1a42e3df7aa4ae9ac70f2260b72815945c5913398bedeb7f2d3e894a492fc56acc9e0b7c031d06106c118ee81757ac4a836895dfe15cd1b53a37f761e1e373afc6a6f5d4bc286d113669a38627324dba5578ff8b836020dbac21d2812d80771aa164f530ffabde65dc508da574a90d96c03cf68d86f1137a1083df9a9d9f46859958ab46b23aea65fe98327a6ebb8a40febba401cc4b046d7273fa4ad42509bd6dd9e16f597d82f307d6d0bf11950692663f50b1a2c81166ba2943fe49c14077dd768614abbce9a5997199ef647bc86421c082cb0b58bd4992f0df71deb40d45274d5265eb54b181308b88d982906682c5ba17a648ec9d1f9640cb0f77c8c7bf1e61d15be9b480e6bf53e06db2739b521f9511f2da17dc094538a32c11365d9f1b12eb1085d0d324be009f2cd537f35c5a4f2c689c7cf839b46482ccafe719c1650ecfd91eee2c1eb1df21c5087165e7f2a28a244af4dc22bd16641d55e55ca513e45e56b4f14d2b5db0a5486af471320d0a6ca12e546f5a5e7b5e9dd26f1a9413bfe8a8980963614d454778f7e1880d2a33730180cbab596938e020f3cae4b38ef65925785563debb8628f4a77b4bbac0dd5b74a9e685e5a5511d680c63280f4c7b1145b147fd1428d90827e917e9449232e53ad3b2519259ef9bf3402ceeb530098aaffca4ccb533317ceff3defec8cf47ee6e4e07e4e0ec0b34c154439487bd3b8ab5c93c63c49df3a686c2c78f8a690acf1bdc778f286736c382c5941170a834f2e3a89d35a80d02c4a7d939bbc3748cd65a8697bfb6b28aaa8829f3076a483f0f3df2fbc3f3f32660f0a52ab046239d91fb33b3a41b8409cbb6813046a6ae68d8dc17231ada49c7c8df80dd325aff615702bcd94c187332d9a6e2c4ce87e834baa063425c493d47141c0140bb0858907b3f04b25f7db342f8640562c52d201c5760efa4b65302afe9bd4af587e962840d749b7c5548a7eb361151376e0fe19ed4f118be16dbcf23c492e4fbd01a721858356fabda7ab1acabeb6614318d0fea1a4bcd9dae492b3936e455d1b7330178e74a54c6b2c061f14f21bf3411483fed9cbe49d77700ec8964fd8bebf6713dcdb946683ccfd4c89f7a95db1ee5a173e33c3e2ce7d5c61d1c1b8576518f380d644c55d48e091d878f7cc94ddd169c638f1e67d480b9381511bed0a96376db75b7b57994f13a0d7c137460537b84c9d35a1b48498e33dad43d3aea7273fee9780ca9f55270f0569144abb06205c3ad15ddd3c129f35a383d8c64c3bf53cd287ac4ef49b6b3b6c27238f94bb915f7afa72bad864a98f99ac4c5c3ecbc7d212aa42cd3d278b15c3df5bf348913f72ef71d0fb0b718cfb43c9206ae0a4e2fa012a8894670cbbe4afc146d26115386ed46a142bc570784268957e70be4f2a5b5e59ab619bf4dc13800247aa5296d3a3bb24d5f0e6705991437a14049341606686d2bcb2fca7be857cd3ffc5947dc1682f6f2ea080005227f0706ac8ee14405cd2a7dfafce4c0e69f81bb300d250b64aef46ecc0b6957288283d2661920d2e616962448cc68d42b17a32789b46da66e3db1532730c357313e3d4e055fc878fc2f649da06c196e23e234b3d6ad2f95b3f2555b04ac33eaa8adc09664dd254105b54ceb0772208244394f841107da49386dff4afed038c1722d294e6eed0896912406c47af1dedcf4dd60bb00795e7caf4b61861dfbec3114bd8c40614f7a3ae0cc617f5fa711acc04cc51425a8e99367658d2bcb057beff420d1ea8dfb67e5e8996727fa278674f1b88378acf497e93f2beb9990d85ca8456b0ba529c668e57e8842a9b6b625175bb78cf285041506adcc0e29e64cecd5dcfc5d959cc51e160512352cb60cbefe99fc2adebd0e27e7ecaaf635d65ebe2ba91bc3fc8fec213391c9fb0f8ddd0806aa15f8be2b0e4513ddef4a46f0aa03a21130f3b8229e6d004358ac954d06781f816eab94e70e5719c20600138720e4d53d38acc41b37453f27d077aef8e1b0b44d448bd5c5b02c92a5a259299ec522ac178765b1ac15cd4271561661b938ac8b64a168ca2a15810e057511feaa03dc19ad65b538968b61bd4816c5b3a2288bc5b15e048b45b22a9a2545592d8ee522581777b04845a1ccf0fe2e5c5cf6ea0f2c554a4008ad7f5a24f46c2738993d216d4fe0b0c4f47d818f075709d946e8b684b78deee83ea0eda06d05fc395078e86b2192c30e126f852d64463785710401433e9270a8202577247ec35bfd4154556f650d40668f8623206540a5004b49d634daf6aba1977986f27dcad93eea4e605e75a3b65ae32f826587ec6e3a703b435c9e8aa40a558f3f590283f1944f3808e409757581e0499469344054bb796e870a33ce33183197eb2ee74dfa7df6cf466ca496dbe54be41f819e1074c837ae466dbe858b47a18e9a0ee90dee177b45c263e50960c0ec4f5002fd2e8c7465ccfea0444246d232e75b16181bf59f9b261908e8250233e558284f971a9122d636e8f3584cc80cd5aea6ae0eb5c242aa4b6ad6528db4a8cb102c012261219589e83d7a2e136addb54b0356134db6854b58aeb6af810185ffbf38d336c1e50cf3f455002a1d8e573d77208a8f5a5c926cc299e56d09fe80f001ab0a46bad487bd4c3b197b62b5783cd2b452a03c2b0a403b144f450bcdaef654ae91fab2b0a84f2d1ff54bfe129baab6487e5540e132bf1842bcf2191495947e07fd459f11748e2805912ef588f0487d93c75925b04e65171817249b0c358fb03e587e6c6c19d28c5b6a1fd3a2335088c8ee64516d5978b9633df8c1be1ff6c848f73c53390ed5f5c68d565163c0122aaa38e01706d5a74f5853a147fa7259afd13a7c2e38b7737ec1c69b92c2c3b7eca9ecf79ff254d78c86d6171dcdc3b0d35af82490972e48941f600983c68639df9acfe0561af38055e3ea3bf14ca1848eeef684fdead62b256668c27e98616df7e7f8807ab41a8307329a2e090745e71f6b1e0989f0f9b3b7db7bdbc113d0536607a93381d2b568ab469db240502623cab6cc81238f983dbe2e5050b93e955cc0f29ebad38a380f778d95ff7819f74b5b44788be49a82b1c965641d04d253ac1370926b26264aa90111b25c6ca7e45689a444680c5ee0790166d31ff769d1ececb8a49721bc1affbca7d1db395711a882d8560420447c34a1860ee6ffd9a0c07860e82ec072050fbfa2ca98bdf9f7a2466b977693af8d9fb1e7c613a186839744334ed18c7e26c73a0bc504a077cb1d111c42c822503c94da7c5a9422d901155695939e102d4ea6ec27e048644c7a749db2030c9fa6c03cea93043d3bd9aa351934ac942de6805ac1c39aa4774e1dd107c9d9907c6a2e6df7feb5ebd3ab410057ac1cab8ed02b5af1cadd5e94cd95af53402792460f53dfd7a0fc81eb49a55f9681f4d40a17231e00c7a27c1ff6fc9231c4cad1dbabff65e6137b6e97cea9283d9cd48df529165fe82e8202a4ddf112ba8f6c7269ed16ba2f87e04d8ee29e73765a287a3f63d89f407fc1a5dc023fb8e8ff97390c0dff3d6e0be8d7c58847ffc434c2ade0e177aa937573cc79258021c54bfe9dbb4051896478ff7497b9979f53670867dc2843f9c8aadef6f7ea17698466d79124a1962bd0515bbc04e2c2606251b5b8831dc82c8ab6a5d2245ba5bb4d1eded6100da13619497bde3190606714ad201b855da7241d318adede493f59617c51b474648c037bd77133047875bd3a209089de72517479d2b90aa3680e66095ec7349c87279095b45d6eac46d193b30dbe3fafceb65134bbb0a14b1e1d37ffa594fc59f4cca2e19337c326d33e9e51347207e9848389bfa27d5661ea10afcb287a83136713b2962ec725aace0eafa15cfb7944ce8da2ab95b54b383c6b08f657a123d52e29e407a813259338b4098223b44ed7433790f2e8394e5bf39391b97551fa1efb449fb84c4a56e9785d25f33c021e1fadb7660bad4a31647ad203298e4955985f7490d4c79d4137839538549d2729b12145db78d6a6b8b4fec4cf527f47c08682d97554a88614fd52d327a224143951b35dd85d996d46444443ab31f0990cd391a2f9ad15bddc4081c6fce92d9b3e10609263c92baed43cd475132c4e094bf899665a09e6831ab0817e06ec6f35948a6276455dff3e0322942fa293a29f70c819677f7231f68ca1747e69d0e568046143b5b167d0a299565fe3792fdb12def53237102da3616445733314b844e3cf324521655c59a72e867d9660fa96ef95c2ac43ff8f5734b74f15f49180e1a713ab8a579e9c9fca3e6dec6ee69e98db52212aa0f75bfc7c098e13c3a0a585bf0e8c097725de79ff485451fce3636972b9044034d52b691289648af8d0a0898b13a57b1c46bc05ac0543afa59d834ab627ec461b175271e41b6653d36786a223f82dd4b53a353ac82da4886ac6e4208d1809c17772235df54349b57c150bd3beddcf8f0391f51cd229ef5116ffd0d080081e4481ee6629119a7905b87f3aa24f27cf4b9ddb029f358c447c01cf7229d664a3e4ac5f6936196a5bdfdc84f2e2af126f010ba9843112ffd0e1364bc8c12f1cc63254de0b7ae83184057abf7a9f73d7c279b027283c473db213b8ef7b15595799b87fe8490a6b25ea117a93be517c71bd5bd092300af07fe847884252d48440c8adba63d12cfbdca40ebaad8cf792eb1985999b6d82d7b74067d166a48ae08adc0b20ba81d78442d37d4634556f1da8ec7480e84c55e7ad42c2e985c04cf44a874ce181d23010fc5b2d68c50250d8dc1eb34e62d09345d66856b587c8ede9495201d1845278bd13bc53299cd7aa9a386f7ef5776e40bc66548f664541e047f4e0ff1fbc3ee0345f6e165cd2ecd9c43aa34d8b9f79fe9db5db3b33e3016b1d582c49425f5e24fad164a9e6b9b62833386f231255690d6c16e7b71e206f5e2e7135c9bbcd623eb6c85a22b1ca447cb89d0a69fd67ebabd12e0710123dfdf5ed2d050a9e439f3010b10382814a54b62c15890635b4a33499eda6cc06b26a7f845450a277d427376eb41f3c891e249fac2111492cb4003d96ec3f93b91b4be5dea8235c8ef35dbf74485ff6d9b77b40eec58490c4bc2ce94b831beea244fb66eb25e4d6e0ef04d867ec643962f88bd69111553b3d2446454bbba9e8cbe58ac13d7a17a9156f503475357c06022f8bd07fb991c0ed7d2fb7dea73ced98157fa459ac41076c5b198baa2e4abb22c916d5a46cd55235b85170f6b5f54c36a1a7df6493ef86296f8daf7805905b06e93c786fa7c5f78fc9106ade198921963224e955b26075779c623f732b813194d1e925a707c49ebfdee4d790256119cad5b26033a45afc21b9b6cf29d86d10ba9f7aaac5f165e57bda6a7160d1ef05fbd478aa72f2311ff4411ff3711fe2431ff411f43102c0eeb3af5280af888ff6a228143b93dc9f5e567acb084773e4da58af21a5b4f1315bc575be1d54bcc17f7412c03c31e8a42151704ae94728200e11e4017364e821c5f59ad7a95038196eddb02ae5ca9409eb291b88c04c2984d4888afa8cbd5ebc2408aaecef5a159aa7877582a73d6a584171665c4776da058d94d44f06eb8463bbd6888272e6beaef0b4158d2a53ce4ceb45e7b60fa31a62933a036e422f6cd4e20f05b777520646194a815e2545568f5b208095b06c38ec9d4409b35f6792b319f97739ac8c5cec867fb54f80475943a74122e8361bdcd31d20b87d57bcfb038e34cb3f280bbe78986f3230449fab39c2d6756ed5e29d2020213c5dda388049e45a7e508ae7746cd27aecfe3cc0c5c2f3622523d83989913e9cd8b2047c41ac411f6ec5932f18520e7f2a4091196880cf158cba7b381c06cc8f2480b3ad608b8006dc86eda44129cd2bda7a0dca465a2d7f4bd9e159112b701d33cce24c9d1bee5832d49a6c86482eb42617f43c084123395528174a2ba4a6325abf61f401b4aab39b0edad9ab0d5677b9ed8b62e13038eb68b7e61f8423b6e23a8354e943b7887073bcb3565ff2ff5173ffe36a4ade982ecdf1c1fbda551c81e61a5586d6be5216f354bc188086cb22b4df43326fa68ee12a6e329ffe7c35d89c9628872a8ad994544ed235aecb4e79d84cba2da88e289fa91ca3a4de6601fb93ab9ed48214a46ec05f8986db36c7cc450b65096dd8940d7a100ce7176c74e16039ae192470b49a27789816ea6131d60066888fc96917193b3ce4e8c5a6dba498d43c4cd6a1d5af82ccc05a47df17dbc2eff39d8d0196488ab2333f29b5d5cf24b5702f95f180fe08244245c8dd0438fdf74391420441178380372b141b3065eb3f1910792f1d3e53f102b476cb348372c44d424847b8edd037098f153e1900f31d72e7f6a01742e062487320292d9743cbea81ce8b008a292a405cd0a26213775e987046031bb1d8d7985ac580988f8e09c44f69e642308586d63dd8c4f0c990df2266c754b8b1a0da603322b2c07dc2e312e319a5f12cb242462050a17ad79f08cba646fd38e941aa116bc02a5e0e46350b35d4c8adb0005ba9630df9fd8bea960ae8d5ab8ff3de7c2f34c7f2b28bf014c184d7e024a736891d717a20c911ddc6b32d83f2c0f5ce1d2a322c199d7963b7a46add4e6d31dbc3a5b7ed569a0a20baf10c27cbdc01190de1a63f7531233e8957348ee0b2a41aebae71943e80ae6f02b143a457811f9606d352cd9dc62f8d16576181f5016185fe45f05a9b515f15c872bac2abc81257f026e170e084e93018625dfd4c5df3be4ec4098371c0406ce7165b43a50ad7c1432461a32934d85f8ed5d56704dbf860424133615b85dd7a08ccf039e8094e157add34b05d549d047c08e149c30f53a8ec0763321e00c76ad3a51b003d542fdc8c700116a5f2e8cdfc27ec429b6b09b844e6d9b32f63db5cc6915fe07cd13f44c81696179cc35fd4a585bfc13d66fbb8cc3549d82f4075394b4d273792ac651018fef49029060eeeed9e8f131580fba8b4b82fe9d005edefdb9ac1279e9353383747342dfb3c5545a06ff46c7a9cce307f9a30c08179a1c2d3eaac4d0a54023b6134e408a3a068d0cc8372d55d332b3ce8f20bb23ccee76f0d2999cd8ba625e3cc80fa8277573fa367f9b58e442af9643211c819931113b5db132c82c25b23b9f389e1744a0e25ddd2bed2851a809cb57a431b251a0a40221bffe2afe156fcf70238bc71cf7d64b45769d8b662fb57bbb63096722c77cc718e5c7cf3e601bf3c8a6e2942aa204dd3d5f9cecedf66b669913701e2d7a1b7cd291b6e23a4109a1f9cb5395810289fd401a8c1874f247db8ca4fd76554fe45653b679e908df3c87bbf46b262eae85643af0185d195bbe05d494ba64d963f9ed5f3e0e97f6652b2aaabecf4596733fe3f0329c31ab7fbb2bd13904b88bc0a25bb1c345f2ea3cf9268090fcf9caecf00af3d6f12e9ef4cce94144a66dc8e8faec3268208fc21fa9c1b0bebc18b3c5c1d8fff5476ba28fe5e66fbf68fa05cd6d0ed6f83f6403f1f11b80f80f38b289abe118d7e3c657283f6238e78d3db561c62d7983cb508721a4fb2b62c73d552ba7c09bfc0579987fdab477de859da033011dcf5855db7cac8494a479801927010953968a48a492268b5130645efc4a1969306d1f594f1d05c9b7e9e4f0a88d42400752b0541ebf0402626f9250f4c151b6a52c7aa9fc0401001d8e4914a0b23dfaf01673002d571491764b6d3d0212304407b6a168f82829c1be2409cad59881fa26cefa4120ca3bf3b751219c7aedbef83b76c8094abb6e7dd85887e6a8f9df026c7afe987192f656f81aa49474d4a0fb62d1c4b8683d8119995039011b16e9bb3a22dfa06a3f60a26448f5524ca6bcee92408faa941a01dc9730030b805c95525c0e174e58ccdcf94c73ec49187cc5adecbc293af3042f0a0cb0893818fec437a89a5ca8857d0539f31f9d787456b27e9c948975eef49e0fe2a23aa7769dbde78a1fe537f6b4840fd7fea89aa3bbc953fb5e0c67d62eda6adc4c2223e26005c2ba228df0aa69a22821a08516e0902da3069e58ac43b914f4d1c61adc16e69c167a28db03de296b7c6d03316abfc16fc2f4c7808003cab53ea82738057215cb9db44089867f1c61320f123c4ebaf1eef5462052e7b7e1e8cc633585441196bffedfa91dc61522944748a456e83a896b36fde63392302848b4d740c5d1b600d548e3aac10c6666ab078e75067eed294bec280c51cbd85c53c079eefa310ce74cc9a1bd3465b2a7d8568ded081974a5f1745d52bb7b8f34a4ea2ccffd489711a3e21ea2f43d0c441216e488b0944611399840cf5ffc95c329214b57d82d7ea3f2b8d0d7c348b841968c0fc89214a489e475674b78ae09465094d58447669a760a8324fefc100f3ac11cf65ae432a1d3589540aac26fee63864ea7ff116525fd94426ee8b9a20b827a3dbaacac01f5863fc35c780b55e7104a0bfd127ed28186b0fec705870548cfa27ddf645619abeeac8e461e6e879982ceec7ceabbc149ff4864206a0dbbe57bae4d71892645cf210192a0ad093fb90282630c1c242bc13b46877b9c1214fd49c0dbc1b018f7c101433f7dea91fb337dc126e48ff853737d572285a6796bcece43ea6bd9ddcc1c01b3ecc78feef2d72c3b01a52591664d0d44859a87ace37cec8a2127834a9f10bcdff56f8a5d0f0b4ce77bbc824a024bfe7804d94f420f8c419b2091ee65816f2909edb47e9fb4246e681a2ee54900b15a9f6eed01ad25d9a827de0558d83a0ccf518b42c0af3cbc6c98f319af46ab30d1ccfb8fbb37c54b63512d52ab4c09323decc038b11ad3a7e8d114f959f223a457cf1a837bffc44ea963fef412afe4d5fbf024ea8a1431cc883a0998b406d963d62c9578613c9b4c64835edd7fb54d73ba939a90d9e12c0c8e8c1b5072ecc795c4265571d884b1418455ff38d2354afab2d22b1f30a754b5808f06638fb0fc62d4d8835587a235eb6a12c46ce7e494b262e6587d9fad550a58a69afed6fec50c070cb5c31761236d435b9729e780edc128e5ca213c3a2ffdf64accfdcf24145c407b75623b9264c735fb02529d0c55314f57c5a31d882c5eaf9de6cc272b7390858438a4384fb2991cc22e0df553472305ad677bb63df06adf32dfcdfd612b4bda1423f6a212991e25042da04040e0be5f4f9c3c0ecbf51b41fa0ec93d69b3bd41e212a9de9d9f7475e53bdb48fb1c7e9151085822187b1d35142bc5f69f55fa688c56ee89c90ff5a3f6506dd426354f4c9b800880d29436ad4cfa7f4d56789adc0ca274f9419c6c5aa22f6b39c620a153d97176a66d9681d6d72c9f8921c6f77a400f2fcd11ae10ea55cd69786dbbe905f70bd10954a89d3a6b455d9c932833936161a2dc6c4844b3564cc0eb711a77d6386b3d87dee5c34de5c7082290f1706ecef8ee2addaa73fe101fe50943d98acc266b2e596662657ddc3e030dc03a2c484cde068a8024daa572f69076a295bf18145213a488ca87b7c86f1a1a6dbb1c1d843140be9b9e7b4e9f253d384b5410fdee2c061e613571fcc449d25050aed2de4c1c2495555cfc19d9c6e2a3b4e1193e0302be7be6d501a97a334d12120385a15216833ff939256dee4e08826417c9297f94183a402f6e035a80b5a0a41ff02923b6677b8bbba22ddb91902b97323c9c575933dcaf908c80e1b2ea43dd147dd943cf81a5ce1dbbb5b20fafd14ea2cf8e16f6badbfcf7b5c2180a7f965c57874ea55de0985107ae850c4dc48f42f2d53d0263fca492d22d1f851c59851e498d388bfc302e7cda532b678f48bd774e55c9af520a3a3cbfd36fe9eae4b085de2e50267d0c29b8982a0ad776cc4805d41f70b0d561977d6a03c7aa652636fbc8687267bd4570ac067336be1d2c3a35a5b7fddd3d24d8f14362e25c2d9df9c47e742362d5c3e7942a8dacd4602a247cc5d8d8012972d75277619ba00fd78c2baf6d6576a323b1f2855cae939294435a85274e61dbf4670827e3ec646554c3bae2f3112f05ff0055893ae307da79f3897ac593268d56bb6198b210c68af67214e2bbf1097d82f7b9ce1282f1ecd78eeaeae8075da89c5cfa01816f4d5b8139fa3f957d5aeb9241c32afc0b2469010960325a99ccd7ca9997f1a17b407643fa89b20cd2a8b52912d5caa243260ee8f425db57229f6338823e413b984461b9b993b09e6500f4fcc1da62405a7aea561329e434de45337d8105b1a695d179fce5d75703f2a6f12be744fe2d860aa7920c9644dd019443108a0f451fdef1acb733553da005fcee45b90a76eb5f10da2d29e25bb7ab7b65e3b77561bf92c6e4fdb6f4d62713a98072806d7a9b00d69e6464a6cb6d22fc27e77f6812c7238ea552cc77a732c79b27229d5e686c6820c547cb2fe487d6e8cde65a0dedac81c7b5623dfd80fc50d39bb4908e0a5df8dc87cea7be27b8f52ccbd1b429cb2573b5a30d0d974909847865cb978b641d486c94de96cf49bd077ad35f19287c68be1183b04c92d92a4d9aa36e8b6afccba20e589e847095253ec52e0987e7eb590da5d8f34e40cfae282724de904d7fc659ec3dd5c0eb66a5eda9afd81d53864f21aeb6d9e3674e4c4a240299f558d8c6aeac97e77d1c2d0e5614e83656ebd49b2fc0a28ebd164aac0e148ea2e7b12276d79eb95ac37c62744d5cc8073b7a40365c741ff2876c656c4e113d85d6dc28223db45d6e882ea01bdc0ecbab522cb91c4e8a970a746fc5dd3906796edeab1ceccc6a4c674f68f56240b7ea26f306e407da7d414f8a300469ec8921fdeda1668c87376183b71d067fdb5ac5ecd75797a8c39f18e4330d8e5f2fbb5b1cb8d478434e4be176d507509009322851fd8ec2a62999fad44804e28a978cd908fe65f9509ef245773299dd4bcbc572a2340ccb51b9823c19851fe82c9a286a31e0e052fddb7413ba321ba17f23b3f0cb4357ab539bfb6c2c8d49dd9fe0b71e77e5c0cfcfd5225a415b38678ac378ea3639b03f7775ad98e4023da22e754e86afeaf19edb4c7af9435568d484f4d9108e6ba08c7251f8cab2dc95c170a4a1432ce7dad4a2420f92604800e5089a591ae3cb1907de75cb55735ed29cee7f5b79d06b7e56577de3f4745db8936663e51ff314d7d84152ed74b35b058ad91f4d4725f7041c862a16540deaa39a02dc3e6bc3204db0cc3f82541a4415ae47d1615141334ec2a6b051815f83b066339b6179159ccfd40bd189560a4e57b47874db74663ac8566d2f2ad5d76ecbae0e8bc081d06b37d5f3ea3ee992d5622c82a528577417d012539f7e27c61f4e8737e3838ca538937477e63366daa600ea5cee9be006cdd2d6f8391bdd3a519e45d5850308cbcd9ca7364b25774a3195ddad025fd7c938b4eb9d55083c23e20eb243e31300ce9ee979cbc23852180c1c8ae5ee7035b949cc0b25fea043d45a0d582d0142b00a51c8fef3a62b41085490543e4368eba1b104b04ae284bba3afd9f16ddf3e0a71ee1068b67591d0b2bbe6d4ca891b7776c78395509453ceadce44ded72c9a3a5ec20fbaade4b1d5b87a119b68384c161d367a207eefa07bcef4d7828a3febfab14a886969638b1bd30312bd794524b1a5c91a08a18da35e83353e1083dc17530af253109e8d75b079d6059f25365f33fb3cdacea28c9efd54c9f731ab638f0d829de1d56b473701b5f934fea9443ad40fe4ac5b7988ac99ecb2ddc604563139e22664d9dceb1b4e0e553617abb128b5f967405da49ed1da8a5d3dac170f89fc11a8f6efe31202fe0e229bb493302b6535ebcd2d327fb3a9f48ec0d5b6e4cc0e3b7983b72b48922f793b39d4f109cea2e8040e948d9538a8a033f869a4a695954b89a40c19e4058f860b9fb94365d0c49a428fe2a451d2cf76cfb7d9596a2674b5d22bb0c7cd01ab5281aa9ab255fe3191a16b9738c18830e148eb9878101b2ed9b45784c0569682b4a0c666c1706df0d2acb752ac21acff757de1852bcbeabdfe0a1687c05afa8f1989cacaddd3d5586417ec0342f180ce02c0341208b07338646a91e11ec19c3c5af21922b6b098f6cf0598dd798233a391a251f15d361fec0c5e6c7a431e2f1cf42e8e7114119ded89666a96cb810016b38f0095595ccad1822f62d97b8d9a0703c2646f611c0526c5485dae759948b29c0f53b686a74500d08d9309f0a3fc26ba82bb430aa004675f7a2b7a91baea5f0686241a6c83cbc629d26c90c385bfff8a9f911ef3b3c73ffe4fad35c404407417ff0c79b8d93123f70113784c4b2ba48eee54c472152984b74fcc260c2a6a4bcf6483517522a270e3a702fa78a05a2a67fb74f831d0035943ac15cce78bc77b30e8d1aecca8906e62ccd55b5f4e6a344538567e4401c29a52f5742443b25d7cde55258888bd022300697dec7212eb76656ac8091488800605ea4f65ab4b1ba0252835359e5ed69907758c03104308939ea0ade137d330886e56c4856c3bec75a29b3fa81063df96575831ff105e10839d9de7d9b1f0f6af8452f6d6bfd49261ff2e5f15fb65b3648c2294f20ea74514d3ed85eadb431248b7ecebc2c89f682be272fad096c2a1fb339238e540fb9d687824d48cda6655617d35888eea8753d4579761d5d133a744ff595d20442bb2f018fa7ae21601510b582751a429740c87e7122299eb975f77b5dedd5cf4535e050481127521e32d18bf03e45be8cfe0f6da52d945c8b2a9a953e57f404e6aabb49f3162178ad752a4fecab289d91d3c5eb6c39f9f55035f2ffaf1a8f27dd821f42bd07dd299c85a4e7d2dca9a8ec7f48e8332d555237ca261c6d90ac1c1e70b08c3e9ac5deb945f11156d91d3a85cd03df0fbb81304bd2fce36584bebf0e75f4dc1e02c961c7ffb2675321d64e1b411884867f43f27de6a6fcf649402ea7352f4d71343cef0395db56830aac1fb107f46c5e447583f1a3bd2bfc46722da4253b1809953ce525ba967194e0ab4a31226f978675d5ca701c294865c0ab9a7c45a3623d50d1345e38215ba43ea33ecea5862ab023c1960409d3e800fc87c60834e3ee778e4f9e4762802cb4094702339831d23221a02b46c1b04580b9c5417bd15ccaa34bb24e906ff583619fdbaeef60edf363574fd8624c5d2a7c75c554301c1a464fd8529635183767a57fae35b5f02e8a1987d3a7b6b76894a65f91f531dfa9156cc7011378299a56dae0be8b30ff7bec165742510a193864d97705198d3120d7b21f8678353173165151998562a46b8187b74d6dd19ebb03113ada5980abb4cf6d59f7b438a4957ebd4db77384b930a36c56e5dc5bd7f1145dc60d8c0d42cf1b2b901c62922a48400323b086944c914ddd8fe668dc99a72eeb5e4a4cc84e0898c2e99775367d1416b0bc6584222b6233dce186abc113e787ace60d860d42d3dc50e4d13b3688387336186157b618a6826df4617ac743d37f4e59eb0868a1882df720d3888724aa7b819e1251342c82cedbcbb33fa087356745168503df6c8560d3cb2f938e230e3af59e360420fe9b33c6523d7eaacd064ac8880ac46af59390c22a74e704c3354d79a4a63a7419043160bba48bea8530db1ea53bb6f3d4b8d57a5cd5d6e371634d0930d02fbaa1eaf1cb6a35e8083101bb66057f750bcfa3f8e0ca24eedc0cc0d235fc5f4d2a0ba82f069660ab6190302959c01bd8baa8fac70e4fe983cbafc7e8dcb78fcf58df8538cdee12f70ab236f0772ad9966b47450b299fceb334c2762d7c2e9aa53cf5eb530bd18b6609cb7c849130f5c367189c57bfb4b9ac83996968ccb2080e94d22e8131aba4816dfe88ce40f9ae1a4b0775484b35e5bf31709162da95cd26b070ba6d0a2d1d438d1e4009a9822620a785974113a5d31380a286a88d8daa8e636339a80e180615f28fcd77f6c1775400289f040e87af9d9808a3ea3630e489b2beac919409444218d201f1f281124b51f4e806e53c04f279e25bc7ba10ad930bf0a700243036d9c7b7e4a3e930150065aa7b5f33390b635be313b8e6d528f6fd233e55bd8ab9a77186d8292a557dcf1a38ae55361c435057268303821a391a163a5afc67acddfa677597ef807a7ab80959deba7e258ff4d9e6eb55a717750dde7687262ed12ccb2bf967b7c2337b93873cf63125828256061c5cbb52b16e643ea3e8ed39ea5013a028c74b24b1a7ae94cf4cc90a043d8adb442e233cc75f1f52b84377bc7416354a92225d42e81f42c3497fda5de01664ada2ac29c06db3d003bc7f29400f67699e154a4c88646e1cd4f22fc46775136bf38af5ecacc8f22a74b9c72122ceffe59ce4780aacc8d530520336f9712665752a25e584518c9d5de7a998d0e18a2c2f347500ee00ad9cb4dcfff145e9c03b848f49c4174ae08388b109d6aeac1a569497600217356cf45b4976972e5e0963aec01dd8ceba9fa33b3af9a121d3dddee190e85bbb2136f54d310ff30c4f87544c8dbc93573f41c35a9607e2e60acdbe69ff7bf4f2c770420216eb667590141bce53349153d12862fd59eb2ea7ecfcf7d55298e5f7e6a851b79950a71389287d48e57c79ab19e3229d69e403c3614497aea70f580512ced212cbec9894f4c707af838f09ebba6c3aacccb040e160704ea530580e7cf5706fe86e1a6e35846ec9ddfe1866a2ec5d244f1f88c75f52a04bb6dbceede39c8d2782b6a8eef3e8dc01d44f934d0f1cd87d9597e763d2f628ee4daa792b111eb20dc84c34144ed33606de49f44105e81eff0bd08d122d29bee93256b2869833fbde0f642620d1e9e97c42f653f04a59c74f0caed59bd616ff0574dcd033c084c5998c396138e76309799fd9141e6ad162504fcf37e19a4f5e7f31b30913543c8d742745de9a30edcbe6163017bb933ef97ba56c26032ac8282243397458fca626f6b69c6ca61d29c5c0268bcb4597f9dd5ec5a525883654e8e1eabaa7c1253ee9e106a1fa78a4a849e9d1beacadf13e4cbbc72b2d14cbbeeac9a7a60496ede0d570f4dfce82efbee76b98610734e3da3f7500f3b58726d0da2b05624bbe41acc494d710e4a393322cc17b8bb34b310e52032f9aec3daaeac690cffcd268cc9698f4d406101571a7f1266b6565b0c3e83b902874817eb460486a3586baa33ed32840e925875a53cbc498f0321015e52a77947aa405838457205cfebf03d0d44dd66b22f66ef6d2d900eab71b37e3fb0f8e60991ca1d206352d0adfb9898426ccf26d49829aa9a0f6da87a358ffa386c06418ce4a417bbddd013c445c25aea4f60759d6fd946715af430f90d0a4105db71a2216fc7108a840e287196623ccc8697a9ca2267d43e84d0e04b43a9fa87f5c97ce3d9a7852279e299d436c2353c47707f3f351d27f5d1cc389ab7c7f16fbb18c00b2da42072db67a658c5ba94127aa3a126376b5cb0a42e5dc8a8b2b0fe9ecfd340e55e6822fdb273f8193597d12748a8f9584e27dd492c8ce43240adb11ae0fea478fe830dd6cd8ce974afa90262e1dd59409b545b7bb3e5852d30cb0d2bb9a403360ba865603e300fff32257192e4262071da104a2574beb006dc4cd83bfaef5183ab7e78651249540dd012f01ed7a438eadb3a4d66f5fd096ea8cebfe0abd313c99766a322e725826a11ab1c56572d478c5a34b29dbd77b9cad06edb70f739b62659a0e9717a1daf3351d2d49bd314fbd47d75c0293a25cc524596c1ebb4be29e705feed1bbb9cdde31e880f6b65e58fffe4b44dc30e4a2d382ac8d73f5c5baaa40642384622be2aa12a93cf0b73fe31a9f8d002df1db59ae4f5a8b3488c2256d5f8550c070bc32de2343d8b729047d0d7794f38f2bc0eac3601568c4bf3518c9639b2fa3e71b01bca454f8bdede47864cd258ffd60e9718a22b78b20079d5bed961e9eed5414460c1f50fd41c5f9832ed57daa271b60b1606229e28abcf1e059f4adf0eafdda38f93b417644991219c0df48374f4c6e08e6dc152b1f78d84b343274ace896607d10a18f359c3d1450fbbbdd10fd47c5455774ae183f95a1b1c5c47dea9d1608c50a7cc2819ed2ca6e723199a7c9b953187803ec5264d0a34bbcd141ce28ef4ff9428c33b076836a5502bb4766fca6dd51351cdc3933b4c749e6a8a8a77cfa5f224a9f79f45b225d88dc2cbc5b0a48edc2b71a822846241a892010b297e2edbab9cdecb483565bab70b5b5b0b605ca3832613271b6715cd788049c8c6492767c76f523126b6b29ce5a72d5b9a069baeb975e5e6877d5433cd781c49625ccb0fcbba6f1e9a04928dd67c9e2ebc8031f089665d0792f783d2400d9299a63960dcae8651fb9a1e55a6747e7bad9a9d0a8173cb56fc5b0969992f2fd3fb6f4071582b53daeaacf624d95d1753117cefb2567311d8f6552199c40536315c012d1b7522c35afb91eb38183a5ab9722d16b7464256bb95f04275b2e4d8b140ea2066ebdef9ba074e2599264bf9aa0031086a9dcddac3003cb2742b14a32828a04015e5cdccd8be1d08296d5e9d619db911ca30c1aef231b4b0bc3da110444f89662bd833ab14e9896aaa80c2c60453e52c689dc2674a378fa203ddbacb9de8e6c56fabd5de9e5ade8e63ea4a2256aa2d17b75f360ea9cd9638d7be8a8a0c624a0dbf481b801655b89cd8ffae55eadcaa8bddde9b5fe280b22325885c1b866f1328ce8a8a07ea42fc50ef96f1c92f154ea7600af599393df4260f368d8dcfe253022c830fbf134229e33abfc2f72dfc7f03a5fe5b034b37a44b629c4ba5a8be9df3c2154093b5cc6b60f5407422b87dacc0d6f59fa3f2bd6c4ec969005fe2710170016949023fa05e078c63883f7218cb72e85d47d262b3c8d27429dde01695251bcbb3867afd67a9a1c4e1cbd26f90283d8c1840c3bb8b7598748ee0cae46a163748221ac34e488c7a10911ac2f36686f4c6f3309cedcacaa48163142ed41d8944eeb6a4e6b2514f4f2553f8cfc9e48da71ce0173d2d43057cdeaf8a95f373a2dddabfc6ff4482504f0f8cd3101cc86f41ce2e0000885fb2c59aadcabae486067290b8af3ee9ad5b885d2b04e65002ce489eac40016b5b9e0c6dc426070fc65098dfba97a4517eb0b59ee48dd6cdc771d224e6fb8b350aee4fab61389d848868f10771d930f3ef210f7a050f6e5197ef22debfc1a7aa524d042c496b198034d58e3a834ba8bbc511612cae83c736cb9ac85c1659c12ee111a26a64d9010328b7fb9e8a43a5ceb1422870519e713e4235baa78fc9ddfac59c718d75636289ccdc29f8f205115b85fd34ece391a0034cab385e1fc010742db498ea7fb4e910f9f400d22f395577a57113aa807d6b02235cb1c604a5bcfa63e3e8d0a43a0b888ca836d40ef3aaa9dcebd873101635246d11f69500e43fa9858a6a310ba61526d798d61f06da3cacc78f13d01e08b08081c04eac97a2f2f11468ad849621be524ee23839862f4782658ebc337da7339373cd5a68bbe6c3ac7405a96ef35798f6325c666b6fbfa6b726485c987b16c4f0ad24416157265e899bc6fa92094f06e185e34b6aba161cc0dc5815f2973e24c0f836bbb970b01081ed84b6f28f686228aaf46936c322a21adcbab27c8814640116e3c89f6e8439b3378180595a8af4e26230ac31da6b03541ce3ed09f267c7e04fe753f0006d83dbdb6e0ed296df75f87aa4f14cf2252391772babcb02a37b463302b04407329a75a50d04352877ac427c5286d7a0d1af878435acac6b11dad37b103ef0cf549181c53faa76154a0d4c150c374116a7470c6dbde080a1fb105e97d345e7cd44bc2d7085120d346ba52592aab5ef1202070a53ed86e9bb158823af49725b9be6b031f8caa9f57b53ef7ee5a5e41dbc860d0728898e935f08ad566ef9bdb4e2529105fa0faea6be8bed67288d0271bb03e0b779ca32e16a85ef837e3a5ea77457b8416ac0edb01f70ad50bff36e215d1af23843fefb5f38295bd03d048aa754ea0b5e46b4216834110774c182d231d7304c542d2519224893be8706c603242ae600b1ea0c24f4860420f59a95ff869f7b34059e51c58dca10dc6bd6f2c28b392e86866285b018b462a9fa1ebad4e0a793e57e9f0f4880c8d6b454589710fdf5bdbae0f75988b47f800722ab54e3e24a3ab35c1eb54fd0ba4b755f48111cba6361b760bf236b5cbb97e97b773b5e660c0f29dcb48120c8ccf92f160f8902c7b96284c732c4260cc095cde9eeff44d3380c635c0bc67cb38c9e9c50180c16205b9a89923c129f8ed9273d15f48023f39690702627a8f6c060aa09f3aac25d51bbdee4e5f332f3e565ac36d622bac7fb5af799850d4fb135cf75cb8c1d1cefb3860287eeb8af6d1f849dc2113b576670d534253d1812e17a98362ea176175b3632ea8487304d8f98475f3367fa8f5d25b9ca2a9689015985becdbfa63e243a06ef0289dbe3522fb58640affbea9304af5d9f0760c62cddd688a75c177ea15e3ce8d1609c7caec12e8cd5ad06640e4f3973ec7c4ca5c0430f97d9b6e1c459eca5589f4d531bde3ebabcf385588533c5b56f2382597f19e9dd2ab54811074a624f514273ae51c0c622819a14f521d0015866301c17479d3aa48cd7d7ff1ef87a45c00c11b327a5c49f944f56d54c58d3473696c04da857f6099f8958d63d9f8e37699230dc70119db1e5debe9b775f4d03096342f13422f2743acb50623c56227820bf9e43396b057a5b51510dbbef760ab244f87e835161b47c02bde7830bd7f58be3286bfc00de318a7b5b628519ff2ece13dafa0df4b493741a339450f903b3efc2675386fbc41fd6549a516b3ec8f9ce3a374d4bb28dfd30bc84a83eff4c16aa6b8904d1ff959519cddae58c10e3000e986c162c887f3d27f3546779a1f2e4dd133ad7b518513005777fa3bae5841cf44e61dd906de6a4a29e65e8e5195900859d0c7f7f56dca98142a13e559433847a19a644ad1bf6361e0011a3613bb31b3e356124245ccd64115e80c640b9d2f1ef74214496ff46bd2353ff71278b541748f112af6c92774b7afb297d28d50a40ebb00b6e5b588b41f535294e0cd40e6258ff3f568352137767d1878ebaafeef9a50e49a630a000d01e966e26cf2b2afa2ddeb5a39585790d67a453584d16f291aa99b4f2cc85292ebdf356be8c288491fd2631d16bdf0201054869992235ae782fd667ecd6fe03aeb6f7e3fd990723dcd3b2755105e7b2dcf8b46f87d652ed256c2bc986af329e1ea974364cb0c64b17be798eda297d4bc0c97e2658a70603eb532482526c01ce3e04c9944e91ee10b7a32a2c54a2077380145332c281de59197216c0715c0a8d64d57dce5eab71eb716cc8e807f8c790ce6548a3e3cbc463bfaeed1bf859e79431c729915f6950628f93142a1085033149d95461eeb89ae3ebb81d01f611865277cab58837685b32dceddfb0116e1c30e15838eee5ad2f27832b1fb669a20475bf03e440a8ec7bb5ea11b471916524b2888f7fc5123974407c835c5fceb0818d59e4ba41628fd9f432392197f9c6315fd2def7f1f0d9e0eddf2c89c2d4231c899e065732ab773d6ea136088f7e17df2b396667f3d15a4bcc8866db42078eaf6d19f111bb11dfb6d174f71151c1ef9d00c4a7574b0e2d1246de9be537729c97ee4b8e060f5fe5abd36f8732cecaafb8144b4711f5b8bab4afe3068a7f12c14389e3469827d50e8d9816a7c87e2259edaafb6e0d1b9819408c3e96b3f4c8c7f52e5697d4973bfacbfa5ee083b6d4eb00c5be8ffa7ab1c668ac0d8c4b697c7d5b07c8ea00f742d64d1ea34fac5ac3a08d23dbb0a415c0cf492a4e4a47f8638c920fee8650e57fc93c3b8c2fe98c0b987ace8f5eb0939f661fd4c211181247eecd9f8c1e834b99ed3e4ce208658f24c8180c1adc7223781f72c8ff1da8186ea3be8b2930ebc7648a80e510d7e603bba9968fc38ad865176ba67dd9cabf030d058e77664d92971574ea972af2cb6785bdc181d978ad37e5384799c2c63b655bf30e5802fa26669f9ab4317c3e6a9c469ff352969e8cc8f4ea8e4b9f2f344fff4d4e0576733800f6d9f57a063ee5286339afce9d458eefd2e880d66af3a9eeb1c295d5227a19ec44fa73cbc6bbb0198ca77c00f71f696359fa1d2b8ecc3e6dd7c74929b7aa024b1f2d179fe5e79391d6fd64306bc4f5df62cf6d03e3a6910aea2c45ac1b1f3fe831e814d19ec0500b10b58baa813822c22175be8d13146a5884314328ca8a0970e754e6a3b6df647cd0e8dfe57d9a1cd5fb57735f0a7e2ee6dfea8edb4dd0f35bb34fa5b6d370dffaadfd5c48fba3b37f8a16ec7e6edca76c38050f2c774f91cd65dc7d32ea71520b8a3c7746707e89401e1e3bf8f019a18b2a8938a921c84270a2a72e67fa72d99856d9a7305083e72326e16769f3ced9919622ebbe78d466ab99f784c2e652889ec171baf5920138dc4104b0416817e1694b0157893a8ab0b94a82304ab58233605b6af0ddb1c002f69f8cdb54e7571661e2d2ee2a6a16717a511790a16dfe601db9091e2a278bd2008a7a05248cae1dbba944d490a311e47f47f26a0f142ab2251de407ad5fa07d8e0db3a6e839f702b34542f69694403cd017d30f8b6bb73fb8d309dc2d1580af363ce1c814375bf83b0a5eb9a0445d83d00fcbec0bf18de45402e163a279a673a9339183bcba479c2b78b2e3c6394831441161a5c518573f5703505ce5e714118ae228f895d494fc5d930f68afde1f462a573027013977cb12e7513c4973b951329e3c2b79d4bad15ce2bbfd6653249c670e251f6c660116d54cfa04318d1211263578743e3c7afbc3520735da9dd0861350bd4f4c664e9984873b5948b752adbe554d1dbe62633f54cdb58ca74459c2e76d40e075f5d2d01753659d60e02d05091079d4d21c2bb5ef647b532bc030d966a42e2a93293eb28ec71dcb82178403269e59c03ddc318c48a268da0f801b9c3c23f2339b321fd0c1c741baf322c510467860b50881928e9d74c602254458e2f28ac1ac64321ef3d5fa0a4257bd96f0320b0e336652b6998467b449098c660e648f7651a77e0f25f06cb690c64902058cd75e5eba238f8a300a326618d04ac19d98582a02404f2952eea71d28f058fe16cf62f15fc116414ff176929d929491042ec66a2f5c001cf769296fa9a9766ad7ab161908769a2a0a680da61a8117016a03e79048bd77eb33741aae4215987bccf3d10b537f0a1e0fb6c9a62b3fd175f803a8a81a2935541b041c1332f8ac4bbd57c324ec1f1a0b69ff102f16e5b1d5a6940a874213a8514d03b15069850d955d7f5c5148089d32ee11f07b13921c61af5137426d7d6922dbfd19f25ca1d685bd2699860faef29bf8a97981107103ebe1fc6e201c2ceb20ed027273be4075f51eb7f1ef24a010585896d05b2b52dc40ab775883cac4964fab30cfa55ade20a8fbbfcfde0c8ec38a0b473debc7c877bc571a5d087060be840e2587271424a12abb22086b501c60e274b29f6a3561123538e00089b152dde6b77266815f4f3bacdbd1056a81e3036a6560a6a0134ee47c64b402b1ec840457ee45fde5a6814b0cf097eaf810e3cb912ba6867bc12ac1847c51a584a9a404513842fa7ebcabb1ab19a2326251c88592954ac2f8b1d6bc2abef88eef7a0a01bec6161277d040e188337122dc7d4ee673f7b7efe38442e1125d00dca917ad11ba52d14536bc27ba9dc251ac1c09dc098a932305e5d642394b7bd0c1d6998465ebd9628cc567ab41d5072f71bc40538fa371996921a4961614bb90ff0b4b95598c228408907d9bf43a01d91a1a36e3d44e63f619526621047157d040e1f8ce8923cd218faadf044bd7c427b2f9e316cee17965c53ce29934d8c46e0f2f3c8cf05d02b06ef5fcfaa970101cb051f6ab0e3547c2135606d321b5bbea726e822991107e1f1b074ee13e95148895fdee5f09e6918f0e94783f9ae3f67eb502517df49a014e9dee6fe3bc053c22ed1977d176ecd2adb2813192c0f1d2cdda72510ca9adc4f27249baf26927e1b6e65856e08f5a6d22782f2305c4d10153e84a7ab4bc012b0dd486a1d3ad799b22f9dc8d3ed1e0a9a0e5fe71e050a54858fd18f7c40d56d44d24731c8cd73c4ca545bff318dffc79936cf1f7fc60e8fae672b04ed6f3813416b27f7744980a272d9a5254a52b1e8aea043507e393c7e9007b79608440bbcfe966463f405b17f6be8cc62ba8cb4bd066eb95163c22f24214c34fdf08848ef8818bbb7c1d150f82760e87942c6f2d02dd90289d30f80de6d68d704d241a0fc40bd89c62b0a56e1e00655e88515940e5f253fb6737ec66688653b302435a6a377da45882888df230f7d24b55715970653ade324f2acacb58afd187c04e1702851ca4282024b124e75d9bb4ab0a290854776a4961d09b4bfadaad24840bb519ae41b2c7e1642f086cdf53016c2e975805b54d4c054c363e3c224a0c5cf890be802804004f4d15c3c017d0881c3429852e85818b5d6824702d9bbee7660d2956d21caab23e6d67139e202a195414e6621e8c67ae97b494334750a12180cfdea5e0e6896cb83693a119d31d3a09c20faee6a70ed50ba4f59b61746ce265f279734e800089f33d333ad91911805484d393d46dc10646a8a7a96b9451982a1ee704f1bf6fe9dea508d1e2651a788adc01e12961c74a089a1425ca4af62986a2c5aeef9883092981252e908280dc5c66fc74ba99ac6b9ab3254916e02bb6a43069572cf9d04f3570a77070ce473e0163664219b024821b697dcdf7bfc498dfba14c58c5e9100ac62d6242a7ca69d5abc03a51b25be57da0e471ae17d229bcfc4c3edb4508bd556a4d3374d637fe4d21f3aa38dc88ae8dbc0ccc0eadf510dce675f750f8cbf7fde195965be8138cbc59ef151b7cfbe23cdc0d84deaefc0ff1dab9c26604f7ba68a69750cc0871518177725d7b1bad9b2ecb464c74164c1801672e94f3dc35c257f26b33f6bfdedda8c6800ae460330ff8acb4f629e8eb19aa315e57d1dac4b5debe9e521d5a65e358a04a6261876d381e4d1b005dcec00fbe9c69646521f38c1cdea64e6497c42f2c8fc1145f2c8dfcee3228773ac142b25c80cae13517374cb432abc1d91619c24a62442870a2274f8f987468c3a6921b529b075c6719008a3b01963e2199c1b54cfdf455e6ab5041f5ef7b8573f82f51c7ec8960f833d2b08cf7fc32fc07e4d122711fe203816493868d80291190ee994a3a81342ff4df0a68465a78fd5068273f0123d064514875e05ecff059b95039d1af95bfc50bbd501f2004a172c6c432a3f0236558685b0b4c0ee24699d2b3040845e1bc27daa75418702b4981b343409c1db06627584604a992b6831c5c5b04034850860f57324295de94602863a080ef547af137455eeeffa0ff6fb44d871a54007dd065b7ac01a50efaf0e57fb931b49989cf18b2a21bbce2c406fee5bc063826074b02d82bc3412b259dbf31d73dc50642d015238f8218cdb5a13fe621a550fe0fc57cb25bbeb3126aa65cad69960fee60837bff0f38af4312d9b630aef2e4a0fa763a757bd31ce591e92fd83ff474eec8c688971956d413f9bda4c59fc9f9da11f5dab3e50653771447380a331611592ac5fc3e2e1784bf4b4cb4b70ceb36380f870e68e85f3121a56d91f08f5a84b6fc7d06163ae16949e8a0f2f0c19716676472d40d1fe3eb6179afce70d4a381c60c086bfb2742f9209ed069064d4ae52cd3005abe930cce9dc94109bdb12e775eba475b967ef3bfd627daa89da30d2b46783270b9a2f769da5a32de8f66e21268e0e7aac1190c6e36b3eba0732bf7aefeedb4fec2f39d5a0bce32c5e7cd13b5d1094ef0465d0b03259cffddee269735ba04b0130cc02a3c76a2bf05954741746825716506abcf80aa2734077578aef485ff571cec042691bfaf3b40ffaca586f57af7992e7ede45b5c60d69efbe621d75e731e3768ec5f0cfa573f65c80c8199afd3996d63fadf8a57f0d47f1ec416960fccae9833cd48f0017c8d93dd5283da8112d9468a61f52f760daf6cfd228e75eefd9aec173729d5dcbea4b15dfd7fdfae0a7fe62bf9b3fb30807aacbdd591baaac1742c23210acfa876b8088b4b4a62807db121354293751fd556cdc6c946ad2c21201a11393a0b7fe217b861a5a97029440c8f9bce28d80800eb117196f71479cc446675901d609786bbd21267b01c509901f3e37035528e907ff04496a04d33719f972bc6cfbd798e833fa0bd48de981709e865d57a8b9a0e1ebe20041a8150e9adc00303117ce753e68ab1ac3fb539de43a0f42b60072c272d0441a0f6ceb7a3b0871496694d5380feca5b2078495e6fc05c4d5087b865888bff6a20a484b7f204005823c8042def4692358836aa3900b060d19968f803e3e747f683bf09cc241370634100637c29a1e6beab64ef4c0145af8cdc93eb13a30438829024bed2a900fc86bf3336a8cd2c150cb94116a798dd02e2458f382d99044ab1852bd50bca67b80a6377135226cd15216e53cbaabc261948474a6b7aae1dc96d5ca01e8dc1efb67caa57bb2e61230e6ce8fd5374bfe8281ca232ea4b208fe979efe16be77018bbe577a39ff6b3cf95c39dd4d9ac45a2c75c7fd8f20dd952b1a95a4f15ef6c18625aa0181d6f46b2aae045368400d80f0f74cd7b2229c5f207dbf39482a973c31338d06f4767da301c0b1d811a1453d677a81312d770dbc89dc928d05efbe9fb8a18805a9627ddd3d847f78951695e9fde50d70e0a6128c37fba5f7f4fc2f6699cc6e4837fb6d001d095b9295e4b8321fdda2871a74529c9637ee2d27c120b0b708178d6b3d8267e54ae5408ed6e6065ff492728090649433136b36718ef34898defc5fdd0ada6694899e30e593b097c28837336841570b6e059216b097d60492af05605c8931618047290df266de3d02ddbe58b0d17aa0d8a02432b90e2fccbabd79aa62d8e5eb52ef0e86a87e8a577853840223c8ed53c4be323b8b54fffa734f0dbbc4a63179ea20fc7290d599efa687fa8f4210c668746da1bfcb2077f24ac23a9eecd10d6545d7f7ba7136c82e130503a4909e6b0944a2746dc921db362de8f1d6e18a64f9bc5824b4d089e64f86f8125d8225cb2db4752b311750413823b61603810d9c9c82e94a3b6b34bc53d43ff7f332d4d2b02b1d4bb0154070eea832b2b23c0c9a5ea0b582c1a82442c7b6c075851c6d0f1d55e7c1f7a8b84916648fe180ea2f6bae0e0f90c5530c0365fe83bba0b2906be4d40eb76a53920751273ac088f5edb17678611fb2fe4ca27e2ee787efed70182ba281c3df61abefae3a46938cf332e90c15bfdfa55f1976d50914636b292a70d1a01b12ebeafb7e82efc4cc87877cfd2e9f7975f444cae3b6bc5bcda7fc172038cdfa2e3ff2bfe1c3f55c0a47aa7dfb378095bdbbc2b7a1bc2748ab2cd65459946e3bda3bfcc140f4b34a046d4b34a56d1cc3ec24ea5f444e67ae34d5b13372acb4544a09d7818ebd943c1cccd700286fbea2f7769a4d3035a2e7123da8e6ef2a1adddab209eccda6376c03c56023dd2fb24c23b674c1aaee7a9e0173094a185afe5f75935e0410acff01e3dc88ad6394511a2c57c071888e59054ec50f4e134097db6f3c15c5015bdf0e3c1b5786002e733edef7c8fb9250d7e31ae4ba16101e1deb6e58b87d4f7c29d031509396869ce83b2de4063502d52bf60c4405a9c87383870732d2752cec9c9c84e1f45229bfc6d9eefe25ccf22c5dff49c6d2874237390a63d61a3d796f38ecd9fec34e1b591e5c4e491d16e4d24bf333b09f6af658bf227a2cf13d33a2efa1e296738dab17ae617f151f6908701b9f8a0574bdefaa171122420119cfc5a234af4434f327b4e3afa33675860d90da6dc007c829cf320386ee14cceaf0538fd80ad8556efaa1e6919ee3d53b2f85fae4542fc1c3f9721351cdc08ead805c02bfc4483a0d1d452c92812030dcf5a80936139bca171b1d7be5ad8ea34c727441fdfacf065bf9c4927e96aec1bbc50220b8ba122717d6b029caa2d2f780e48b89b78ca8d842e07e6324b244e953524765897a26a5d73deb94680e0848aafa9b4cf402ec898941e49554eaed0602d1d16289a4b72f0a77cfd844f19164e8ea404da4830c61181c5f4a238a0fa3a427dd497e5d636008937b9826c5c85df6879ab55af5001d7ea4c4ac7e83775c80f3d08316c83b3fcb7e6d1dcdc27c8a350fbcf7aa866b86e515193023ab1e9f98859317acfe138a69fd71f7bc19412468dc73b3299ac926ea815b739402992f42d7ef34e0dc648ac85c937ae9ac82925ca68b12b37acabc75442c34f78d53daf08ed45037aaf5e78a1be5b0ec3608617b44c0675866c99875f707264e5aaa87175587167d731dba146b9390f85ac3d035b46f63c28a38b977d7c4219bd731282a0e25faf0ece95a243e3438e28eb6c22ea18095a2929828d35496b0c503bd5b9419cdf3e1dc81b77b9413e612cfa486c34a5b1f15e072f66e829c36df1ad3cf0eba80c415a9b1884965501e782e8fc2c5d3cd94a74df911fbfa53e9ae2f9d9eae8c4b1122abeedc16c8d6fb5019332f2cd20c367352df3420556f1f363bcb83ab001eaa9be830d4487074b3995a008a9884e73763346be0300b8354a45b363b843c1c8def716d750f476d83595a1ee8c16659cc74723488282aa31ed96cde6e0ac8662e232b7a28b864a4bb144caf05d143bbeca80ed475f0b63dce349cd41c73c96d09735bcdd1c395047c9cda5cb671cec213c0868d531e6f34cbace768657a93c06d12140f2dc500e29228b9194db0c4025005a25903415f5ac62a8d369c3a7014321686303950a0c260461ffc3916bafaee3efc915ed3ccd9c2888b1d717a314a4370402c61ec19a4b99239399250c9cb7359031cbc1ca2248594b0de8cb81ac3974fec23e4047460c05ebe2ec24830208a2eb6cf1c9e58fd772da812a68d37a57909e81383b6134efa026ce06f89402b702cdc6502339e9184a96d52b1ddc5941a6e539fc8dc5d159a2bddda5677a1b1615c6f52b517d55bc8c4be257d829fef47ed5e06953d688bb067e54f0e79c3a2c337cbea045cd6ab554a52f3ff6f9e3798d03c458202e3ac281a2eb36ee1e8b6883542f28b0eacacddf889ef3cb7ea909f106a09074b435e32d8dc3155bb75c280212e24d18a129f1a5b6d3a9f00bdb6f2cbc9012ce7e17ff1872598cef0b43058c6001a497220339e4411692cbf198fb3958b5d4d4a7d4de040cf317a3f02af297bacbff74040fa54177492145aa1b85a6c33536ea91b90e795c7290cd052ca344ab18e6f4215ba2557ebb2fcff0889870c0a8515c0a218e7216b8485f760daee6326b3ae82397382fd19f72c824fefe7ca2b026a12b8644556bef212c32f59f67ae2cbf03b05cd8295e800d065c49c8822fae459e0abdb2004ae39ba702fbf37c28caa3851a72d09a4902c7b695b1af311c71bba73189b8062b9ffb2beaa2331b2c157fac3df3836e60ef6f02cea4882af16d76115ce9a6ef8d3abe59914921a1e287c1191ce99cd115340af621c3fd0aec3a322a384bdf2206d5cd2952bba42baaa04bb19486399dd29443e19408e9f46d717558b00cb3ef64847742634d3fce58f4a683b04e323916dec4c1ee3222b623b1333dc04058a2bfb7f1a07510caa26a1cb66926314282e8d0dadbfc66d484a9352baf2730019755351687cf8d35df38d92dbff6674a32accc68506ea2ebd96d1d9fbcae11d19b613a4fb0cf3c676e45d4e72e720fc3fa20b2bd1ac56905e08d865f3f38f73575156f67f68f9cb779a02b6b98e3e470d64aea4523019867d9bd0c73d38b188db8048558ff05925df0c29d34b3497c19ec8894748a46aa064f38d4a5e19c3edf050b61962240dd6b9724ead64fee7fdf8e3481a6660c832324a98e21372d36476e641e027a15cac334612463679a8848acfdde6c895a05c915c0c3854b15a0eeecd946fbf4d7843c58f4590f59ae7d9ab0cf25ea854ce2017eba9aebdecc35a67cea0bc689d225e3ac785322c90708533e960bf7404cf5c992ba3c00da93b4d197e58343357d6eb1295dd657478e6206e51b514efb45c2c88aa82dd8ab5f772aff0d6651a365102186eb950d28fb98dbd0b78eb1150eed8af18f518b8455485d97701452d1a7423060f05b770e2be03cb18832f9b180790e21da92c48cbd63944ba0aa18c7d417cc37b729da9484e5183b06523f91140da174602b9bf26509b99c818c13450258d54db899a2a32e8014823d655324ac4d4ecb72612de2022d1f62a41c1d2f084c698f54c568e5156212f00de66338b9ca74ec0621981e6870b1e003166be7deb4d7806c35e53362b63247fe53938bcbe8e30db82fb43325b133d1dff9d367ec0f52d51f91a8f7ffdb8dc5d49be023b0cc1409c1e23b83f4b04dc4d6b6eb3c6d44c44e83fe5ccd730f2e55ccfd78d959621809c37165e18045a7640e10b0e620b78896b8ca94c19fd3b0e922dc44fe014ef9f8d6a8635e13ed1d9208819b14493f8a05f7f4a958300dcdb05737930fa8b32798bcab709363b1db5eff7fc040857ff6b60605cfa11e00f0f0be2a06b10fe5dc12c9a8e76a652771b9407b3015783491d37df490eaff2923b3b049c4873f3300f638d501a31e0b284ad42b8fc724a3ece63aa63a504401d10c334e2a7019ab643a14da5e49f5974274d99a4ca2234681279d43335e3454699b934dc94838aaa0447bb8276837510feeeede2c60bea96218c9bed03053972979b79d623026179dfe07b2d3c38fa371ae02995c474c96f6acc60aad7f46c8a4dd3aa7d29df5c5bbe9193ab95283d992eccbe89af29381c2f19a51a8b2ec2b6f96e995e7c84cf5b5ad72ae8caac7f2b30b617bb7724b2a337578be88880f99b4d1c652578750adfaae5ea2c9351e0e1cc2b7a2c91a680a13b3aef4326647b23ac8603d2b3b6bdc17ecae2a9943ca7e6cfe7aca902bff1f749bb3b3bff6cd482357f31f2ffad0b8f18c77291345b0ee126ed10d5950eb478544f3bf1608788eff52aad4dc3d74c473e70c309d3d4d39d6a5c6e9e1ade2caa88966a29b3d95457c25504967e2910bda9aa6913fd92afe3838556acb9aec334cc40a1f280c6eb2e0db6451ab76329f2b1864b32fc60a9c8dda3a3a3e2555ab957614688a99d74493f6013a8c5b5c4c5f5d8bacea846d151408cd09cbacc940020f74c809ddf9d1f9c4a7516de19c543d266a7f67a1449151d84127d0da7ba07ac2192aaec54d8c9bcf8c00d4edd61386865c0929534cdcba0b5bbcd3363aa085d752cd19c11f2b161524e9f8929d0afa3d25c7c2528a4a2fb1e748258351df836ccea976b9d0846443a46e7fd39b9e9cfaeb6c7e7283f8875198508e2e0ad73e0235792e0262aa6da44cb7eb3a2822d40cb35dd593582763b95d6c496da771681e9de32bfe0cd3727d02750574a8be44ea33d29cda5abe7dfe14424299521db2dbdaf831532ab211b33dba24055eac8dfbe53ba3b83c1b8259489ed7202fd2e0dbb4e2cb7c08c4e1caed5e03bc5613b959b2ca56511f4cb04def88fd76c45247cc24a68195e579a4ee765c1e90d55124691b3e0fd0c60c24f66a9dc5384e49d5d46ed3962e174436b3bb7f4fb48abfec5a95e69fbd67e8e8e673fca8c93b445b23c058449684f6f4c0b646335ccefa387591ff7190b1d74e95c67cac9046ed3d7026ca1017a011d355f50cc419b0e29cc6c9777026aca732158c525612e73fb59c837430a68d4942eedfd55d6bcdc6fdd7e9191dd7f122883188490033030fa1100d8a57a027f2b46b66396d38a60ac165f5d28a64c7df63c33113618472b62936d6d6f2965925206470339032d0324549964d2240455d69473e729e7bc5556c6c536b1b22cb6098effb03229541bb2b25b45a328a5b6a775fae5d4d3ea89f5cc16685ef445af5a551fab4daa0c4b4d529b702e025a65ad2aa1a65489ada294ce4927fda4f0a439c67c7d6d234f730f79da419ef68fa71df4b4733ccdf3ca2a8c91d032a5d96ddcaaaf176c5afd6c1e4260d9412d9b49885a6899ad1aea6a7c7c67afbf2e98ce3b7f5a49f4d5364c738c76b6eb37821941e82a0d69b53624a14525d09ad5f8e82b9eac600f95a029315069822dd7399252494aa23f241815231d1f949c68f39146a586b71f695482d0a58f56a9adb452f93f2e497be0108507214328e0e821c9914f091db7261d70fc10853e8eddcc3e61b02979c3c71c02d37f133aa48ca060091eac52c0c107c484950768500207271c48e1d8c91338cb710b98a1880df4d02245871713902822c48b0d48483539c9e27232c56208524c8c0f38ce3a59e2ea9aeb236d8a45c289cc73328425a5490a521529452e182bc0ed732716ad783873277bf77a6109dc7b9ecc317a5e6449198a62f536df7bb30c2edffcf3ddacdbf25a61832c304677534ef7578339e1cc0036773a47804620ce97921773bcef06aedd94167603df29f4d24c59610bec30ce9ebd12b4f966064d9ec934f9e763cc2854efe2230d4ad47b9c748130c39a13b926ff3c37bbae418e9527d860ec0237b7402f773534e00970e67a3060cd31200c0fce39730773196711640a07a86182121c8bb67f9a1fe0cab1ee1b1003c61fa1dbebf08606976d96c1654b310803c629614c982f33bbf1014488c93034bb6c1dc528ae30fe1821cc9d0923bbe8e9608633db2cf3cfd350863733b8987f3e1bb8cb358603d2588e046a61a974ee74512671650fcaec6776658f5e1620c033cbec73a7a300cddecd2dbff0b0e8bb40223199159367dfdf853119bb32f2bba82ba46de48a5dae3953b0675398a6aafa8ac70f2123454735282afa65eeccef232eeaa261330d63e17bb903e172aeaea3808c483788797966579e2e1a1978cf959b8695d9ae040d003d973dce4583665618cbefe5cecbb773d1e8a2f9a2092f2e32637ecd46d64583865d14c62c60250d4aeda7748110f3cfb55cadb004d946dd24b6e8ec511929cd16eca30c7c6cd13ae02e8a15a8d32166100158c6f98a1acc0e5e781bacefb1f0726e83fdde05deeb36075e00745e9200b4be66f79c301606cf5d18a12306a255c728678cb2e90db751204f721b95dd31c61823b63f6e62545272257f72a5efe65152fef4e4522ee54f6e732957f2a7fb24337382a6c6b1ebf0d4353aaabfeb4f5da3a3daafd7c31058e6a60ef0b6a9d1519de2a64647b50d4e8d8eea9beecc624b43c0855c08cfe11bc26f9e8394f9b37cdcda0e2b93dd14fbcd73f0264c1b46e5391ccdbedaecc76c369bcd2617b27c586bed919dcdbc4a27adf3aa7378f9588ef967cc36554dd6e22ef3b85096524a29a59581f302e7a3e3cc9d2e83b9d3b8aba08a19f48978b9f3b2e7811fb4cecc56040514c0e66b18021292b5a11ce802b4210cf63c31a68e071dc2c0c975ca48e94d0b7ce52b39aa16f9144c650f1ff22b4ee4a3721cfc061fe236780dee011772214e8377c0933c88cfe032780c0ec461f0179c036eb3d96aad954e1e3cc993b0cea4346049af590c4ee44cdfcd9ff8133ff2250e84dbdce64a2efb6ece8313b9922bf91367fa6e7ee434a7f913a7f9137fe236b7b9cd59f027fec46d4e84a5bb129615cd1bae2f3f8065a62f7dc0f463f7f377c3fdcec377c3f37a0dcbfcddb0fcef86e3bbd26d0d5acc0d348061a0b31f6de0b60883d10167e24adca8b3a4d3153b9457b06f560a960c2be310d63a33cfbce263ac155fc349611dd67476982bf81567e222f0203c0877c2498a71fc846a3f2a9e646b4ec19944fdfc88c0b138e5e7ec965d61daeb50cf5a34ab50bcb558b8b57cc41633bb938e9569ab53f1318c1d8bfa15d7cc313af8c000d3be807d9cb1d628aaf98a4a421ba66af02dace0ceb2c30c5e193c0b8ccd026b549daa5e6a55eb58cdd7550174bec34ab5039601f80bd6a9a9336b14d1e4a935aa46d17c87392e4fb2303aef813dad4304d63a57b0ccada80e055f15f7e12bf806bc8707b90a9e82a3e03cfc04dfe13a3c87e3f01b6ec381baaf7c2bf854f035f15d7d29f850f031f1597d4b7c4a7c497c5f3e24ba61ef49df09be23beaacf045f093e127c5e3e2306009b9c95f49ada0adad035a35259e57d357c3d09c7f8ba7c52dfd427f54d0d7d5338d67d521f97fc49c924a1855209e47c50df53ce77e59562ca1044af2c59acac69262172e1656eb2f25d09ddddeee44eeee44ecea5bbbbbbdbb9d068811c404429a773d73c547230825bc191866546c322cb5e05d3aed41e0b101a16a138c33e81b39576e74e02125d1ecc3b773a0149b5a4d9a425cd6c91524a2b6db7514a2975efba5ae5132c73535a6bad61ad93522a69a434b67a50a7c1b4522a6fd71aa294d2171aaa35c1327214a6d6ae5b5568e85bada1966c07cf818873ce49651f73cc9cadb4a70311638c31724b7ca9d65ab160e1380e8803e2806cb7cd3eb8118a8f4617a06001d5a07065f1858aefeea6b2f86245e5e2c59969fa93826996b9b34f90d15bb1fa48ab8283209a3bb19f3a2376795bc39b19a14f90914f90518d47942e9fa0d9dbd027c888e881a64f10d17b3e4147d6fa04cd7c82e8f5093a9a46ef1354f43e41443f5d3e414451c62748365ff1a9cb27a8c8278868bee2cf17478315aa182b48f3721c27a3f7ce9d1afa7cfd5c0f019e3966e94b98cb31fc5e65a53e3ed2aa305509e28192843ed2ac305541422d942574da6c95cad99536cd97c4f22557f225bec46d3145b8124f722caec4935cc9af70b1b1b32a357696a5086741b2b3215c930126cb0e992c30c47ca45511f22d22bc58ac666b2d655190722c5ac149e7e4388ee3720de6b2046138d76b40fed8d93ae6b7e5aae5b9041e131d97bab34b5a5c4b23a0d10a03809494b0b1a3c811a1125197147eb0b1846cc9495daab92a9125da92d173dcc75405051610532e19515af245e5e438a18093e30b99c3711cc7e57c4df413a2e7d2e0a4f848a3524585cbc7729af01c0ab679a982e74fe69c53c553596c11e5bb610c00f0f2862f78c994f3f2865984ffdd30f8df0de7ef8657bc54f1f2862db8df0de3dcef866fee77c336df0da7b8df0dfb77c31f0a1b1f70f7b12ed6fc77c334f7bbe113df0dcfdcef8665ee77c3f8e50dc7bcfc6e18e6e50dbb5edef0fd6ed86bbdbc61d6cb1bee5ede30f7f286ed657173ee0517032adbf2d0b197e963f6e6613588c103e0bd793d4bc7e2c3073fbfd7dd0657bc8ab700e76fde73dd066d52f87bf836f8bd277302c704c2d8b9c635a37b79e23648f31ecd6df0c47b35b7c19997c131efa5b80dc2bc67731b74bd77731bbcefe1dc06bdf72cb80db6de53b1e236d820f71e781bb41f6e82eeb21381e9471a140d5032d07a042a062817a82a92ba03e5a2eda71e2c2815bac6d1c10a609070afd569eaebcdd7a7aaafb5733c0da14585167680d1c20d12ac40c3c22385242a2c3ee099c9891e5c4629ae4e49bed6271bbece7cad49bed6eab0eee905d60da71ab83abb56a71c6274e8b483de499d803ca594d223ba9bddf791e664e35118517362aacad244ace749e8f9da45ce52105025341509ac67be6a76116376d391efce5dcf6fafeaba6b2af233d3ce3fd29a5cf8131f694d403c3c6b1b5b6badb57e04b6f6f5f34214243721281c5137d81f1b4a38cce0831039a28ce0c05a5b8fbcb5b60ac71752a3a33a769132deeed6ac4b74263896c10b4000f1458cb17a70730473429c1aa6f315c349c23f34998548e7741de6cc6e931d4e06e94d87b26fcda4fdc18f78115f722547e248dce6465c8b63b11f785a5c93ca48616ce7a2304d28a560f3a84f94a2f0a81a831773625762cf2f584fd761ec1ec31d0241da82630dc43563be9552562fb352cd9d9a876445338b646b36880552c19ab74ccdc31a620d5926d69050f378575367e61c37c8caee0f5b7483d8d91d6291ae115bf3aca0861ea69bb350538789c56219993c1da4814c69203ff3957d64d1d97cc99f24d3c73c6d1f9b69daa6a25cd06ab98e765d4fd945cb75ac183b56ab2574e9bd3de56d79d7156f74c518d88d20cc1018231f73ccd0908f1983b149f431cbc866e8cc4c4f393385e62b66ab2f57565f668e095485743405e9c8569b4920f2870c2281c81f55fa98535e3ee6a69afa52d58098a78b87e1221ec1a494524a39bb29add5d26a2dc7751dab455bad9eb2c5752c56abe579b7e5ddeb72c1c0c44819137325c657cac85c3973234d4d4481e273eade53fa0ca39cb9f284a491608c4a14351d4cac022f736dbe62d64088b705f716a8ee9e41cd9dde1277bab913381c91c74ed9aa0f39153cb0535f11533407dd41000e064ec8cfdcdd1c1007c40175777777dceca0c9d3b3a2f8a233d28f5a901965a4a988623d60cd7755f3704055cf0101c166cdc3b24d9d99a190a66a5e585f585754ac1a073469b7bc224136d06c48345b905a35d2dd353f6bf3e54ded533ee5533e456357468c5629a4bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0390afa84470d2d756229a01500409d316000018100a8ac301398a8469a688ee0114000a5d8e406640329387e270501818c55010c3500cc0500c82000804410cc551188c69cf460020f507b8ca253bf59991f2e03b1df20effaaa2d60d730a1f70502bc2aa3d7b2f23d09c158c9f356e963da1ad3a1008d37b6aef9fb419f32917109e4dcdea9200b04948b857114521575d4261e93163155d13b9d7c5d2db5245bf3cfcaeb7d8e49881b1ded6893b5d42a1f3fe4f40aef347f2999511ca08e080089b086d50fb79f9ce35d4e45c386e4463cc0908ced846326e1c8eaa11653132376bfa9c71a0295401696fa807b156a4907c38396e0d7921b9b153b77609ab908bb3a04156342f3576151f635380c2ba8b469d27dd0a2011aedc365b0a86d21a091539f07069e566c08e9bbd129c7e322505279de7a7cc30568a79c1578b7aff8981d2ef33595e86c2ff025fe6eb9ad09277b93e016f88130984d00846d26e06a89b0599c9e9e2f632a9a3b356592d58256eb3f886c73518e203b64acd1068b2cc2a52f59fae05d0e4316aa83bb373fa2756a84148a9bd806d7191575927c54214b4d7e3e9f2a4410c05b41a6a007c6b16857ec646ec517a101ae219851ed94fb938bb66159103eacd92a146017d8e8b5ecaa270036d68d7bbe9f14448b6e7641bf965a444e1f8a3c29ba9dbcb13eb5bfa8ef0019c86c15bdeb33140094e06a62bc88b5fbe39cda26d6dae799e20e80697561fb43a511eef5418cbd5e021fcd229e91efa6bb7e6be905d68b6d4e1a5d80b240fac37e549e1fc5cc862aaa9a5eb8b1f6be7e09c6ff3d25be3b42b514a3393857f98c5d3d731b17ebd25bf5fd32d0f06d9cdbf3a57413786f4eea5060388a993faaa6a75ddd0a603c7f52e6de1599e72d59a8fc8322de34be2fc5faf0d36fbd1a2dd559b1bfa72ae39d1777a2b00cb0dd3204b7c2f18b501453b4ade92e6ddc2616a74991407efa201f974b42d5370045a645bf91518baa8e95f66e435d690e2a1a9dd4961bf09f6caa2c2bd08c11f0360e0401c998aa44e3d08922ceed09f9e3e2f881f8cf33b5ae36b0f2dc0d92bdc8bef705aff6c7b0491bd75ab1bdabe5b69ccccafaaea8aec1603335b1b38d717c8800f1b41aa94be4940a4980da4c6e11be1381655122232ed3c271eb580b2fd002da468fdf20c821aa67ec8b5a8e343d4cd54bd6406e28d77c9950872349b8ce39dbce167e544d68addf4d10c9cec2032551cfc2e26ba9e811651ccc09729fe9a745cf0640b3d91a205c719a316528c92ff9b834230575c4383116e2c7ecd74f2c365c0f67bff74d1c197836e7f802ea0e1f9c3e987ccc25a2d2515745aaafc00137f0105ac04231333f63d3ab502066d8a6ac4e8c9628e4aa4452829d66b064ac66468fb2d7b8a097700d55b691a729082372a17ee48346c6f32cada04dca5b2525530ec2ee41198cd23b592017c79072d01c48521bc31e26f2b589e2e1b0f0a4c69a528e7c3507881d1ea39337e8a6a442c4fc20feba9e5dabe942bc1bd8c167c6cf8bcc11045abf768bc045369f0845dbcc8e81f92277cb968ee1270c9216824fef9c6dd0472c25ffff6b2c064f811dcdedd2218fb1294377535bffee310171604522c0d984c0a5022a749cb43efa9565610c6474c0a16a49bd9834b8749149375a29a770e2c95012bc1b08f0b41ac2ad958d272ab31314853eb01b99842586092a7a2e8dba383159cbc8b8904140ab8f56b08e81e2011fea8c4f6048e5122bad8baa545e185af42492d6661180b830543c387754ecaa3ef62719ff5fc4181ed0b73b4ef9faa4442a2ef8c8a9415793f5c036527e88297fadce25776b3ce240ba50c0c0a3e60730815ac0a03d85ccb857b848545b4e51370b49fd28c36ef2e0b57a22a707b0ebb1b9433d29342bc6749d9d0e5cca870591c8c5bbfcec5d4f63a35546083cbefe2d9b58b619a4deefdb43daed7ffa0a667d7d8496aff950f2d8346730bc22371aa6036b2c525ffda4a404c0824ed8499c483a9397720e8d357b668d9ac684235407bf67e58f3002bf60f6cdac0c39db1f32604ed6f260a58327f7e853b1a8786a38fdd015fe026167a1c0ddf74d8fa27c504e5f0fc68d014614d956909c798ebaff9989ec9295544949a21f1f2702e0a315f7628ad839f916c6b0ee05c87aa04cfd5e11b9806a4b072ffcc4f209e9d81ed3818bb93dde2f79002e06967e58d87233042e763a833b6b89de42311fc13b8a7a92e084a2a9b7082a58953eb164983d7eccfd337761b8bad4fc42bec48d250c24e18568cf87d9b0a173c80a236e800f4811385c8e45a00907b1ad5ad5af59ee17ce6351eb95cd62cda1fae887270cef7bbb11ae0f05c2572a0d7fabddb8e903b68a2565f7535640ac78c09d0d9e588cd97603f649512b59b493311af11eda38678450fd871a146b53a13096cba6ad4c84a1fcf8e5201e05804a684f0d102c6d1ed73ab24982e4f09cb03df46907214252414d833b5dcc77b4894d38a41212130c15d0f49c43f6335e4df2ea41a4767b3d9d669a84920737c45be4b312cdd9015e1a1917a57b2b8c0a669a31f593fe2673f4518979d09550e1f6ceb9c9c20e2fb3fe63bbc26ad2716184f676b7f03342934d2ab45ddf28abe1d86e2af5db92db19b0a2c477865424bcb9a11ea486d2afcfdc6f00f93e0fcf499f3e2044c33620855c46442c7021f7d33b21a8949fabba978f78b44a61f334cbdf0a9e79bb868f593110edd33ffaa4981ac13b5508b396590574e12f90bc25d48ccd9dd53ee092045967016c406e618ddccd7d8a4fe8c382c834ce727b2d52a862b4fcb3d98f880c6f205104a7e029c2e40c65d0767b6899202acf725a4797102375795ac5cf5cd86362b386b1ce9b897ff9002abc9d5707a611a56f351e6798617a06bd6418f1e0e88ca17f7c0f4a98b55ab0ddf1c281aea92afe8aefefdfbc216c5ba8eaec16928017cde199e76773bfa251e922393107d2295fda355a202c628095826ca8e81c406df0bc4f2ce5c05b3d43cfe336403d527204e1b534449371df27bca9f2cb3d8e466c01f2360e0fe809fd8081f8411da87bbc01d12ea509dcede385352638c26c8619728f535a6c49a4d8efd79c2ac9a210ab27d159c9fac66a228b70f4fe99deec993e2ec6bb10adc6c437aca53b25da23a4dc2df79c0c176ddc2fa1a54bd5f54ad5b2dc32faa6ebdb94ba8b308d2660dee1491763f30692c9e5dfb47cf0720e78827745568f8d63b6caf8f14be1ac5b23589f7e846c72ae8d5b379ec16535d228f8d1c0c324c93ee2d63d3d1016561342eeb73ea0eb0116a8ce6f430e6fd346afc4ef2517f18df6053d674b746556d80b35f245ef3adf1d96cc23e331a49b5499266f34c9a4d499e4c9b38316902d99d4dc0f53be79b4ff3e96e92edfcfd456a2e5f228649dd469a8fe720f9a678225f315a084064b4d283085195df4413010efe49cc3bf589340a9e90a43c451af96537db15d645954e45502a49182e158ffc1c1e99249b6213f99f4ca7ef6d0d329374fc0d31752a23d21c3c87e42bc513f94a36c294ac62ae666c16b629b87c8918367513693e198ee97b06f9c89bc743d24ce1477ea02d66e79889b00333f0d29302f6823fb886f4ac41ce319120a8f9240aa1c7afbe7dce34c3effbece272e43c53e154bccbc2fb8b257875c992386c5cb9aa4d07b6a0afbb66d6517d1e59b1999f81801d09876391d06eea13892ee956ce277bdfdcf055ab4874d6cc37ecf5e716508afd7f3142ad4e6c320eb529129d589d97a10d875bce005925985d62e409da2fdd3e48fa501163328174dd81000c60ba3aae4fa9580bed46e525a19ca3d98d9a9b7a4143fe818a5bc67da654f7f57c2725fd5caa821385131204c543765292c170ad447ab17fc9fe5e5300ab31647c2307c174decba5a9cedddfe7abef2a74a7e384868eb63a7e5bef256a9fef33e329484a6366bd6031610e9c4ae5f9bee2ff5515ca89880931c5234fb7c6f48727d973f723c2d2bbb2c9d93a308eedd15a1ecff1b561c257ccd90dfe5310ba7ec013113516f8e7a406c12cb07f65f7a2fcdb91abb22c851261aef89bff5e7b2f5b104b2590622a5a325f7a7063208906b79f8243a1fccd2ede61eb4973b60d7d0ba7508b2e50905540013dfaed0b7ec5619feeb3e152278532f3192ce2e807e2abf1ee807896601dc40fbae6bedfa99531acd57cf0e0b420aa61ff72347d2239b84e267117eab906cf2e4b25d71ce3a7c778946ed7497c286346143f5ce6fd190d36255e962d6d31dab5d7f160d828b498208ab18706385ddfd4404b1488aa3a229f2cbaefe36a8a69463112a19a0c38a3513ffbd87bc78244f065587db7ce699fc980f3e1a7c5360929b7a9e20200f1c46922bef31f72acffb2d28ac85f6fd8f0bf98b80742b6eb9c187bf483a1614a2e98c0ce87f50108e3122b890a3c88be1a9c077e90a4d47dd30c9f0fb13e44ca71de08911da9e65e7205fbe82a6c77554c0ad986742269b30a038d45d052bd96c36256f82a584a15e3952bd654d329f952430d30ea61a626e7c72bc3add3eef554e29da1444278478086bff28ae2c9eec153f2a6fc529672ac945947582813f4be2614dab077bc8b5fd2743c799d54e41fb629f327aa81db32707d3837f1df4597d3c2f158ce5ab9c2fb426115d4250aee50fedcf2cd143cce93851769940f7cf1281fca244e10e1de71f51fbf254c987143295ff387783c5df67061f3c017bd06e18efd8dfd4dfb6163ecda20260a993fe7f3b8e5fdd16a106fd8773b63d7c62791c3fc60cfe296f647ab4318ed8c3d1d78459bd62418a843bcb11bed8c3d1d52c58856e88c6a10481b6347474bf1a25ad5647a67ecdb102056734228238b4212da7a13c731e514ff50bd76c0fd59203ac51ffb864ba576358edd1b37bcafae8d38bab963b6441a852f0d2c5b554de9ecc3eb715877850e2b4af5d855c7749e39b247867a04290ca5844a2ce0012a958b1bfbea3d481b78ab8131545cf6b3286ef54e38e97e731a6bff8c25196d3860cb84bba330b2772a4ee5f923681f32728351405a05ad58afeb76ef2ac0f88eb59b9e6584bacebc369c717a5516bea3ae05645e4617a90b1a7da2c60103c2aa444d8737db04d2b627785ef56713527ab69a0e6e03308e6ee60ce98a6940ea9fbd081c2b31028f56680bb9840e1aa4853f2d823771ef709b67e88c70ff68fee9c24d334ba114e4da2490ddf2e6c872b05c4d10e4e2b5b9c1af0e8c74876a28f4092ca1e2173113da254ce39b772c4e2151adb9dac4152c149118857261b49f29f229bce7af09d52393a5d112ea15cb8b917b76785b0cbcc101d4ee99ec11b4a43d06551703f0dd5a07af0fb318578559cf971a84ed9b5044241792125aa3e8d701f6ca1bb5291cf1ce94b9001258cf6911a0c146770618c277001c9a1a57bf39003ee90295456cb529a12669a0955423517cf80ef365257c5e31d565ac32b49a4c304fa6ab7e7da5f0f097d1fae29502b28c52db12f70d2f09c70a93c28e1c984dd510bc4ecb8c91ecdd4a293450fd6f879c4264aff498ab1137c9404d997b3d1206d9e0b329ea73b1d4908a424747e670141a4c5188c93b88a34a2bd1871fdae5ec29c418852fe45a2d49473f3c3e81c7f4a3b9e985a8a351ae49f5dabeec88107877dc3f0f0ad31035c31349606f54de529e4c8c7e8d62b18cf20adeab30b9b59436dec298a0ad816e079fafd29b4d508f0ff3783832d1c8855262236215ceb444a16e3c272caec7d2ca81c54374df7315f936d137582e2729e1e087969caea4c13d8d39666987cf34cfb12f1debc63eb6d496f6d6d5c7bec6093bdd11982c817d07483a48dfaa8fcd7b1573440be25c57debc94b994e1216e8b6e6d0d2af4e3cd6a231e70e8610a917bae51869cac7dcecb5f00a7a17cc7208ef2575a711387ea98240d66d70fd9af7b02041c6924a075446ca8c0b22342d410d5213cc85a26099b801ddc1d93c29cc0b973552d8a9c4f58f18e6468dda8fdcaffaa4fc756aed46297c2426e6fe3b58034abc2a1370df0568daf5618d531400e5ea86d1c1c25d386c8885d7e336b858f1043326a4055e1b00acf81b845e6693ff10e27da6b2afe8a52badd4e515ffcaf8f1e04c970ee6faafa834e1f39c72fdaaf17957db258125bc24f1627d2210b7bfe128e35c2790fb0bdcfd48ac7b505cbe6fd5dc9460fbec13168966b2738b62e77013d28d32f2a96c074e45ca11658d2ecfbb7bd5985c360432de828d820c19ff747b8595ee91fbb903e186805054def485ac4289adac9de65cddd04d2ee87ab455150312244be8725fb4015bc1bfbbd892d547dfc3df68d58661d22c51c4651bebbc5b782dc07096208510a20ea8a70bd26ad2f58446742567ea768a746c62d5c40631d9e5b55220738700fd92ca17ed29b80382a9041a12652e3cb9ed02114185655bc65b99f46bdd4dacefd00354f37a1651c48e4ddf4becb071374758af4d428a5fb1d7ae5a69f4809b962a1705bc6624d4eee8dd82933dbe986dc028dc165a0348b225fa371a6adb53a6e1ee61675058db207434eb92d591c934c54ce8d96d54f0d44eb6179ac4098751666b42c79fe2f4acd7fb3f0007f6cabed12bd491e49a9d0b9833febd64e408391c658ee2207dba8f804b8fbead2e989108e7f7b3e2468c7aff5d778729a2df5df409b23cca6afcdc5165960f1b24a494142bcf07fd6f920347d94224a2bb45b8c76724be3be61f67e6c5cc9503fc5d7facfb433d40ac7891c28a1ee986a13af644fad9942bb699a336b9abff1549fa8dc6720837820bd9273649cd79ac164ebe44cf008b33d26f9e47c41303d2612679a6b8d15f10a7ab57293133af76112d3a2cf0f2759679f9d3330073035b3bb6d52746d8a38fbf0e7b27c52b87c3c8d00f92914e59b9324f862b07557e8c15fc6c456ee8a684e1875bdd21b6cc58370683554bd4e85a5c59a1e910a004f0aa9f4b0366831e12050f688f3dcfd59335aeba21bde0c90d09afa3f4f04acd7042409698ddc7a374f97930605d5cd00dfb382777e400d05a3165c11a6e5bfd0305be9a49053b07e66a9fdc4ec681855bc278f9b579f000fd8e6d49cde8abf5491682f8ff23b5fe69abdda1633caa21c5774d61f8375fa43cd6c763fc22c1cd7d7c60cf449e0eb996157ca15deb57154e57aacbc8adcdf2ccf10050924d9aac73dc613817641fdaca064fa0433d9eddc0a3c796d61bab8c025960be193be8dd2b03aa74f4d4ab7a1f9bf18f4bf60a0229fc13c36f8c79f3405953da2a87508053ac5047448d0ceb627bcb604d1d2ee52fcf74ff00f3e0349ca515c3425c033f9301edca34ea71d91581076f337b1c29f22b1c0470b116ef639c8c502b3ec42d15dc0893dbda633286fa09ea80fa0ffc9b007e00b4400a0699db57786118444a6e8e64243bc5ccc43ad63b0a28dbf990f3f73cf489a19aa81772a0fcd3a0dc38366073a9a46f13c128f9b9e9134065805e76981263405e37e9af34fcbc292a6bb6d44485bbcbd0e1d06980837664e2f1c05cc31273c0defec73fec5a1a4043bf4e6a7843d4d7b9da7a3edac38918fe0e357bc8793abbdad3c038a3bb599e9bb95738092db3d5bac05dbc50f0540d6038331e471f156a407aa0c08a528d7dc09f1b7cacc0c0c1ae463c38d748dc5f5e131b1d470254faffaa319b216cea4a9826951fcf5e1053571684dd16bceafca24336b404ef18e33abe65e425650a99098df89a8c28a108937240cc403f2f51f5170a761a91501b22bd99ea8501ff6ef55f741325587182490981f5d806c04d75116123c44d728f8ab1f1c02cf85991df84745691f67943f2e96bd725d99b8478114cded3cc9ea0ca6510338903ada8cf9d00a0176a63c39aedcc0d15d395714f296824b0b8b49621b522e30959750f312d57eed0a3298e090cb9196b60a4f45cf85349205403c7ea2e08626e69ec5f606c8a215b71f7e672e9a09901139c5b5c9dbe2d36d5a76919a84f8a35e88b4d4ba98c10b36580013208bae1d4b34ce2e037ce790dd108371e03c843fa9cc8ef890dd485e741cc6d61746bad8e8229344c185e7a2309a55c3501e445e00ad02b46be717c27515cc93c5e434c115de8a70f1621014af9df1b9ff13052424579a8f24f84c77a51c13b20d4b4fe1029f4173ee7b6477534c9d02c43dd3580603407e509e53f2cc31a127779f76b4cca110200b4342dc01aafa558046ecd034eec23c3b473cabd6ff00b5a069d1fcf4206439450969a2c256dbc3bc03fb6e7cfcfaf589889bc32d6c4eef4ad30eb6cfa68ba517adcf9c029df059e9cca8a07d64443f927995f2f60fe891ad2bf40c03fb3683c830fd2be9b2bb4e62a41e70cd11ac4c796df83a4b34649e4e4d8b8042cd498f16f71a7664a9d5a9eba76a1132237f1ef33395ed5be2407f0cef05e9c1bf2142ec60d7dff648c0bd39b5098061ebde9e03b8f79d8e47c435275919ac49c28934977e0c61f8a35152ffe94b14c51c1b3e4612fd9e385ec79bba7d86442ae52c1ba91f8d8ea247620c94acd163d31a7a63639f225e53868dba393c55ece92ea4a0f0480210513f0bec9245548ab5a9697a080b4faff34ecf59aee6c8fc635814e93fc01f0dbfb2a310adfccb5dd26cc24cb4312bbd18f907d4454c6ddaea8ada707e44137245bc1b3f562718c5f4c9884bebeeed9ee8418aa295023ceba943c147a62937b5d0cc71647813e804d6c3c65f1f23b4b1205ca29785839314da8b09676194b4625c2f45dbe3180693a42189a9e3440e4ef561f6703f15a592eff21b9a0ec4261f80e6a07141d03ff21b2b34ca0f41baf813b3fffe260df64bd946b2ff2bf34ee292e0c5487ecbcb2f2fc6188007545ea849517c879f5a19e21dca90e124122e1704c484425447310b5dfa708c99bbd8cb9f3913909bf9e97109c20ede2a7e184f2414c8c996e4ed08113315737e10748764a393278b6ddf749aff1793463ac9b407e5fcc71623658138cb0c76b1e7518a8a9e010cfde8e3980de8af3928b580cec6f276eea84042b0e32e8080c9bc613c2d44ffefc2d55b51a2080678eb5b80b30648cafc8bc9f8e58ae508ff5c5b177caa43842bb1a4ae0fd8eac53e25d63ac254043341b2a756de9d3ea8897f35e794fa7234a0806b9202db8ab21eb08241996185a9fce674a8d7a089cb0286789cc3d2c98f5a729362642e982c5d7cb460c31fc9b860aab254b82f79960ad5af6e333ed7f22de088b68ff347612ce17d3cb4b4f7d1120ff10bdb0445431d76ed658be322d62ca7df61502cb438dc888b6bc579c165f85f80332b478dc26e1d8f2b5fc2e0cac4299579d798833ad979152a463bf866e59a10e7a8829beadb6aaabe8e80ea0326ea948b1b832aa8a590b66ef0fa830589cab8533e571e8444208e2f84ce7ec8107a24b740ffa06d65ba984ecd5917ad2dcc30f716f908d77d592c3e5f8dfe5ba1df55612d9dd2ec962c885e9da5673f4eab648b16aec63e0e232e7b9cbd0adcf4f84455651f077ea8dfb786841cbfdbedd89905be04960926712a33655a4f5d4c5f05ce0870e0f5e37ea9f0f1f47b3731bb52e2ca086ef41c79721b7c1b8ac3728bec521c42ce74226905cfc431671bf9077792d7822e70fabe2aeb991f803777721b16a445039a9e1374dbb167790db4b094a8f810b5c08bb0f1a45949835cd738939c4fdd8c970a02469c4c152a2e25e6d8115c9dcbae1b3d8364641c56fe5bd08d661fef538d4b520108a5ad5fc33018430800fd23bc8f51788816f57e11f070e51b765e063af36f0b175da22a9b3254444dffae59a6c77aca07ab8c6b94fd5ce3e2f9b675d1763702910ce0e45d137cd95e0245da6696fb63b44c295e6507682b25f63051fa4ff573de2711254b0d70b3911ed964cb6506c00701b2b606bc00c16e02113d710bfdf5a57722d5b4b7d7ffa08d6f02f6bac4b105ecde412295213264f5f9c5d38660acdd2dea8d3b0229a03f0313a812ac5205f73191c8937c75be610fb82e19ae3ac24125d320913422a59f8656a1115200577dbfb888eb152184e9161e892d9f2b297ed09b92216acc3daee5aa6c1d3ed6df49d7b42b8b7c4caeaa544110be1b505ed94f3b3c3e025f4763a29d0890a3471432ac2fed4a0a48034a3cdf1b410ae84b68d3f27332583e2c6f9be1f0ee019e1df4ff6544e427278e740dfaaea2cc5de67c5677e3aca52aae2185d7737db83d9b27b83116f6d121cd2c1214df89eee4af62bb04471881d50b089214006829d5ede30af3089bc19ba608fe532933de5d0bb5051c09003096ac4ead50d83fdc8c0f2a288786b985f6200f63ba990e8012a1b98ed36b4206c89e02c06db381f164d5d97933889037004cb737b2435a4a25dcd28fa7ca960031ac75f9ea43b715a77dd79581d760ecb70ccb71bb50386048477426e02cb8cb7fe50c10177e6297556016ca5bee5a6f28d7e07df4d8a1387f70e9739eb55edf3d7b9b78dc5d8e730901a3991805ccd4c233767518cbe903a9e04937fedbebb90e662b53d8e1bc52106927cb579105d546593932080a86bcff30d0c9ff54e3e3945b025788e2ed033d1afb6ffbabf1919ab2f926bb0164fcfbce4170e826cd7b5ae3e0b8bfa4b9729b9494b6e4c4cdaf3a2380ff6bbc2eb0665eb1b9af1d3136127ac6e3356c9f50291d23b2e3c483048034b14e054fd366711b32eb41b08144722994e3538f5f0e4b80d379c480c953540a6e026763621057609adb936dbdced470a32c86389867291d2cb3458cec2c10369464a5ab37a302d83125a2b20ec6a69114bc6534aa9b0faee7b1265e978e24db5b087149d09904cc87232fb647251eee591ac3763d51813b32f2ffd66fe96150a85a7de1153b35e8d8bef5db9a755fd9c1e5fbc70131941bab9947aebd566b928d4fb76547d85a6edd6abcce9471bef5d372a0dfa15e675ec501c11a7cc324704303048532e0918341ec9f0ea468288950ddf5f72f6bfd61906094fe16dc26bca160a71f3cf280bc64cc1e6b73cec7b9dc45f35274e0d6c9e07b052555ebadb64ce72377a8cdc76c7bc68d9a16dcac2543daa5b2cd778257b5be96c1c53aae017aefbb5cf885f23e28f5ffe50657df05ae92ef8d23fc6a60390480aaced0364f33dbc5c490de25c9806727864430603085cd23ab284d3f2950f74f22db28677270b76891a86d5900ef2a508cc7f9da42071c309ca06b81b5360f388720358a8fdde13c01993842fa077e73ec359afc279d4e884c6d98744d12980e7e1e3a5d32f9f7130a3b92e85481b59af00bacf4396201518b75b3f9b5a6539b7ebe0e134a751a0af61fb414514095c834e2a28e9673df047f24d15e4ddfcce4979534c660949e2911f3dee8ba35e5e8d5ee65b156c6793dbae8be0715c713061623bb3e30721badb33f41d0b222061a9ad7c2e84f6383ffacd03abddbe4d0a4b3c6062178cfed4d9155f711077090b7db6d64d01b564bdffb121e2095e00d0122f8e417c841b70c1a2b2de68d1d67f15961790f7e87b58c3f9e3030230c3acfb4a5b16530b37ccf518fc447f3fbc8b0f77652fc29db370d257046aae3f92085024408cc4489677d4a63cf60fa49c72e72c6005349cd00cd776c76cf408811725755ef4c4a8c9906d0d551e01104da3e386479b956af54bba73058771dce0be514db7985b769701bf1cb618785fe3cb503ed35061747280019ca7d0efe6e18ffd29bd8d77730f49dbaee65fe348d940f0884abb5e6a44f0f891a7950d8a8a68e17174538e6bf34715e0676acd7ad96891456485096a2f6cde4a61199b8f859bde5f59b8fa346353cdd922a4978b7857d5277642d9db03c18ab1e1367f51597efc0e543699ca33ce4dca26945a3dd441e5300f9b9a240d8e70267f0dc698517a470d22e102b36db976ba8cb6cbbc352a4b6d0206254b1dfb862c82808c71a0112f0c12308cb47d9e026b07e9185b8fe9a6b5d8a844ce73960f0c49a69d0bc6869ed78e020bc76d61ba20768252a674ec496c5f2708505356e6bc09eaa57102c4fd91bfb2589319d33c3e466f4c26100ab8798b90c3515285ee73d7977f4652c803846384eccfe42259b80dc7b2015bdfda76eab07f5cbbfa40710712c97cec518859f716f813716e3a014a3ace698d158b961a98f1e096a66e8576f025edc7367f4f555d309de61a128499f3e40494ca2ef05032f7d4a56365a2ee8c52dec15377ce929035449c3e9d41e2e140304dd41fcd22362727654f8ba5558e68365a923e06ecb1d2e3220e58eb133dcde8d03cf8a177dbca9c9f14d2ff91ce46573ce7f9bb8f09b9a5204ceab3a7986e93f1d0698c82156adb5f33c701eb09def8582d871276deae1148b1a3d5ab30e3832cf1fe3b40e2d1b2ae697088d05a75b796b28c17f731ead6a9a3ba535b8918de834f9d67893717374e45f2ed4fac3ae9c814f8d71b30799ae9cce0e9f27c34a155ca04719577127946c07639c9cf478ee27e4cd8612f54f3182e3858582c65a064379f4e4b8ef66063502e0b8fd57d9ebadac39818298289513741fd9a81b634b11d88a1e3de080376d6dbe97dc970e0bed5ecab0768ad1eca430ec4eb27c04dc383470a3e06b6aa612f9837c33cd2b146b1c72d1355d30a978e6408d8657fa70166336be973b4d4c5c25deb83257b467db5f9950796003566218130165704b920656273f0ddec0e6f67c1409d1a46a2ccc42d3262caddf3f99da2cde3f1d2e453d4129092c99663f23ebc0086185cf157c34835eea643904c917cc97b9926a2b7330971c36a4e26e98c800a94f6e7e743c20363d8bf886b2d76c3c801cc2781f2cebb598f808dacae4f194ecab02b894ba5b9ace7769a1f2ef4c70f3b6affccb9e0ab52372819bb26a20a958c716f4ce3f2277d3c4324924681cd41ad2c8259af393a11ef89318bd623231f5be90a45381032683c96edc2f6affa008c63fb304443a9cfefc35f7deeda87434e1fb8a4f18721a5be0a2f380f9e64ca5fa6b7411cdf64961f192291972f7bdcb4d57af2da5aef0cc9f926b9ddac64b64d0b4dde5c17f69a22c8721603a4180bac0ae88825e7b60c9f106560f0e565707d2f9884e3d488598715a1453bfa605dc2ca126dc2d5ef9166c9d96e791e03d9ad7b1070c6accc201fca1cadf408928a59f261c99bee0967769aec8e3c01f794293922f3438f155f79d112b7645e9e3603dd9364f2966eb9dc340cc8f8ffdd98608d9e11657b33a177507b41770693bcf4e27408d4a846e6e3204d88639340bd5271cb8fc5e97d396e18936f09bb80801a8feb071f5d3ad42f435de137a8b727ecac2d4fcc838581921000c4b4ab9ef11c98042448a6caac4b0bdb29c74a8196e3b1942f4cd1f6a10b5e620553f31edad520166154c9c9357c1042d04bc4e88f96b435d5d40c968fe1728f24653bb6f5a22f833278d5708c97e06d7a03451fb419c878570e8aa127efab03cfc0f8262d13a49e400107c2361372c06d19228208053c28b35b46631520aad6efc2e8c6a6482e8380b689ddd0f11208c089875876c5f1d30703a8df4e7e159b76d621a5d761a877aaee3f8bd20de6cc154df344f593cc3b96601897af7eaf802b9e2b009bceb8a638ee20a3aa14f5936da6863dfa4dd0c5f574f1185c5e4d7c0787af248a9dc442ec90b03b9b6a3021503f89cb62fdff9c3ea284ddfb6cdc7037b47896e772e51660db8a8f0936a8fe55d8b6858518c75759f965e1c24355b06a90bf6dc1297f005a4794b7e9b58814afd7f3a52f7794410e4e3e59c3165b9ba9bc134ff5fd5aa911e0154a028b8becad0e0fa6cfe49c58588ebcacf174eaf7fd11b6b01cc85b97830ccdca7f563ade93ccb06e30434fcd65cc8f6bd6d5ffe4d06248daa230c879b1ec96b07dc64dffbbdf2f5a105f089b9b76191c1686deb47d8003b5ecdbf068c61f0a5ef4b396b4c31bc10f7ce611394aaa4d5579b983411a0b1f2532a121bd1a782d93a3aa7aec8c053d6ef23b9850b6c0010c229e203249693e531ca9aab348c444c7b03fa639a7c5c304cc29a367776bc8e4e7f926353bf8a58b4f18a24c8bab689d62eb1e12e688f56a577953227fa722102f52b40d4178c8ce0a60a70430380717a0e6a0b0b6a24d9da52ad1daecea8f5651b4958c7ee9692dd7ead25228944767777efa8072308bd076f03b2c04e3ff71bf4e66c255b2a2ca5cbe33b6a0fb3ac66d624589c309e1c88501d087fc66018a717a154df33297a9f9b50a7d7561b6472f3353620acccee707e7e8df2bcf8f9dbe6e70cd79c39c333fc38e06cd2f0bf0071ecddac46795a3fdf36a33c379dab67cef0af4019b3831be00738220cfc37609e341cf1cfa6cec69a568b7e7960cf9744ddc6a61b64edf6736cc29709376771ca2b30d83df72ab0e2f7f40e5d5df31d35cc3973ef67116bad95c1841d9d398b80cd968708d9f29b6652a5b18ad24e8f4a4d4c9a6a65d23c86f943fcb74b1ea321abe6c2f9435df3180deff56b1ed6aedff37ea8ebfc7d9f3fce796006afd67f755cca60e63f735665d8697bec5bfcbc8cd87a8c31f64418b165addd1fc866c821eb76c6f7f24bc9966f755c3a27ec77515a6754629524b14acbfb79196df974a7d39aa322102d108a3064b8a3236d66a2a4a64080a22363c0caec57931dcab8af39f9edd3ff8e775f7bfcb88ee7f07ae632af2da95d763079e412a5713c32fecc18f76b5ec68ca139eea334d2b90f797afc182f9047b102ee4305c8fa4c67ef709ce538ee6156c4ef9b1c2725c77196cbfc0549853b4a9ac2658ee33809c65eab01616576288395d9f85f403637ade67ea2e81afddcc7832ab7208e399b3bde563557ef3c304784315f1271dcbf9c70dcdfe01e07f71cc7bd3c1284fbf7f6b9efb9e738e735f5af760dd66ec1c8715c95ce3dc7711f651c273b2e5e4fb420840843fe5cedf43d63d4f06c950b947d665be61d87b26d5dd3d9fdb43167f2b75ccd9ed23a5eebaaef4f7958ffac0fdb5e4ff4539cbfa63ded793c87ad774fbf0d584a8e68a1775f3fa0ab8957f82a8964339e1f4abb31a2ed7d3067697618bdf4fb302b76288fe4119ef7a5bcb1436152ff06e591ddeb042bb37f288f0c3269f75f51eedff800874cba47484aa6bc2f7950ed534e2e8b304058993dff25eb3cd9e7be8e6df2449ffb59d6afebfea63cf5e592fc9844a437c6f824524a29bd31a755758c3fdffeac56cb7f27c28844d65a6b638cb1f542daf2279698a39cf32da5128d8eb2fa05ca171f5ea6bc58f9f2854ad7d4b34aea118a34fbe5fc85cea7d19ce18751308d6ed0ec92e3a75f06b277adc75ff3f76dc07bbf5533e5b1b1618171d2f69db4200cd68e3f0d80e4d78e3990c7956ce738d07c3c39907cdbed10e5fc564a3d0b42af397a8d5f41c0b25fce0157af1c487ee55ea84871e4cabf6110febe1a4b464b3c36b054ea524a9755cea21964c834aadf0c5c3487c80b62c71f8de612beb328f64cd0c6d3cbc36c7bc14029a5197f05b91d222ba85fad0eda2d55cd0da5681acda239c4da691483eebe8fd26772e0e432982037b9f4b40ae472e70f6c4d5a47411271cee80c4ee6eaf5e60ed3baaf61f6642ee95d7046e63187f4ac63a651d32b060c7a64fcb8e6901e76f87d7e955b82af1568ce7bbb5c5b4841f4548b54a36a44eb5111972fa3fd0823e278b1b0e5db488990f7de1b6d8d4f5f525e4a2f29d18adaeca584658441eb4b69cb396ba5dec41fc85aa87f2b953a7b389e05fccda8ff52aa31845e5f44826aaf14df0f31c63888569dc34be9a5e445d99c2a74916292c288290a2941d482f9de3ca7118f34482d9a438ca691085e435e47af21b358639dbe945a29c849abbdab5711b9d4abcd5cca6fa9b0e5ab68478e552109fdb5c3963688d5ecc9d143e89487f6e563c7e80f752a270673362f97443abd82a1cb35ebccf9f3e4717dcc39d3092bb349a03cab707b5fb919cac35f71d553fea0b6c77534c329954424bc5cd8929b9c53bdc5255b1395e1630c72f5bf331d3b09b8b5d37572c42a796651adbd597bda9bb3cbbb8eb33382d53ed6c1a3c75867ad32da9c39fb1aed0e7a04db81eee37f8fd39af74cadb5d661ade739e3ecf70f1cc1f6ef3a6330fc9cef370a3bd4e9f3b9d79931b22a87adaf3e777bcef44cbf0af4e64cff065d93a6b5ce7f79e45e8da2a5b409f51a42af41bdd63a076ca18dda7a9575a93fced791edfdfcfcadba5781e1acd7c29f4e7be0e639641b084db9428aa42ef6ea34ef2b873d5f6733b2e855c3ce1feeeee714879f0377548d65acb2010f22404260a65bfd9303d14cb71ca86932f1eae12a80099c6471ed1ebd97d2bdf7de9792112fa29afd9963c594298a27fddecb5b957b74f2288c8c6096c50a2550a0c2855b92272e364f57d0ac10110c910f04118208094e90624b511726845942082641723e90040c55ba10624b0c4f3bd43c15110b8202524592b8e0812c53483c05a979a2e166462931820918a433533d6080620a284e8003c4007a648282887ed323131477c995c58ecf138148a3ef8a5576ce79ceb6dd58ec189563c6903fad955e5482c20885828615143eb84471919af2053ba1b938a1b984a0b37a64e2a2c4c3cb2d3fcacff25d468c60a588252728f3c448e9070a4840022f508c6c416483069a7696d1f3738317856e21f30a6285eb29b55c84744ab91cf9a194d28f4f9d7edd12a6531a6b59e6c4137d7e96e94029420b1457a641f68a6b9660e6beead09d6d65b573dc63eec3ca3dc727e696d75a02a5245b8c000b2b887431840f0058220922906802298d100c34b00296252845741142a4871e4660610b294a9e54a842852d4d5ab4501ceff65a1968818c0f4b763862294d1155dcd004a587231ad258292f13300f08685202229894f041cc11506c69b2a5080a51b694408b132d4fb420913d66013f3f8828ede6e3e6e3886e7bbcf9a8d24317131810181026e22d8c567abc667860312609245ab238b1b2c3154f1c397d408ba43238e4255e5ae4b87abcf548eab9c75b8f233fe6650204932452383123e6871f646c53768215f528cae1f6e8615743802ce5b853b3757163162a7aa082840a6374306adaf245892b4bfcf0e4c2094ff8042a5ed82b37a213bca5ba42d3ce39ae27818a3b210817104d4ef66eaa27a450738291dd94a633228b57066311776a362eaaada886c0082ecb9ec25baa45385eebf2b1b9f47007d663e31e99d230a133db4c3d9c0dc971fd951264a71a826a4491945e81e09a8a7888b294afa475da6a3b6972f8214b214d92156429d434407a28db37d71e193fb01f697af4d095860b1fb014d038d1553d32a1b142aba8396eef881268904033823e1f8d93de9581a960b3c156c8d9b694e34ecd7633c1e84644c313dd17550d81ca8918245782c080e5cb8d299cb49c89810a24a05ca937134a90a313ace8a2399286481a2196806ca0c3028b1c2ba6ae8e46861a834cd723131a224c56561befcae9c2e98c1734417ac8a6d014f970a1f9d1433655bb18d3718f4c5d40f5b056a5e8289bf563d3365baf3369f1c60fe38debb88ccf60e9d1043d327181149ba07aac3ace7ba7b85a20f5dbe4444ef1a5062f5e645e98707ddce207a930475c61a489316776c8618912910e5870013255c141d1795ca0e8f851be9e7618f9eb69c71fea435d724ae9915aeb9194d65acb67d111fa462ba3e767ce2413b9e7a75625b85a3b10e60448442cc9b204123ed50c0fbd56334bbdaa7a35a2d75a6bad666c5099897297bedc2bae9b4587f1433a5fda7b973a4b6db1466931a4334a2975515a04c36aedb69da53662a75c9d7acef94369b136953982edbd36024188e0c7101d8088c2851a463b7051d285d399277cea4733407afd6a46855eab087aadf50b6ef5c8544688ae7b642aa3349f7869d961ee730ae5b97249deebf43485d2e66b1c9407ff1349a5f8cd883e38286dfa54d006a595706716cc5f7da28f961efefad85650288a07524c0f4810f994c0237f7d211ef7f167cee33eae7f84f224519efa5301d4c986046712912c8a94e681fdfbf66fcc83fa77ce239436bf2625295d317a9534bd67fdeae3774368ffa781ecf739883e35afe306ebeaaf86f549a59a5b736f707e069317acefb5d62ad9f4b12611c7b393d413d40efa9fc6cf7a162fa1e6f1479fef6fc43c60bdcddbf012ae6ebd4dcdb73e7e37eedbfc8d1618abdffa211f4dc11df33d10f25effea3d10daff7df73b74dc587dfe1bddab7e0613aee6c67dd6dbf0c17aec3d7e168fd9c7b9f8058f9476c36dc058e53622953f8f288dd2aa0e1164d7a18383e8839f83e8c37a1d37621e74bffa152f417ff7d107ff8d9807ab12be5f6910bbbdaf6b3e7e37bebfcf0233b863b382e13cd2a38fd5774f41f979a0bffbf9ddf87ef5f4867763f359c463f455ff4369b3036394dbe0b88bcf3038e50ff9f0600dd599a7e83865322a6a95bda06c620da7894a6bad5a0cd1ab164caf1865abb5d6aa850dbd562d9ef46ad36b955e6dde4c367533815eda9934f9d3c6cf894df9760531646ed76eed4c3995439019fd70c7860198adea9169ea480ff7cc532f74db23d314911ece96eaac4d62c5af26a8a5d49ae1be6411a5bf9831e1669185b4457cb1452420890931529a0401536646114d9c8afc80658b1f643a64c898e9bb47263250686264ca420b531930383bda449e9e18ebf2e5440e067cc756051929301928f6143b769eba75c099e4614e5c22c3254746c6a937e970a9be3c943a847acc2fc250a79203d1cf21adf26d8c1684b4dfcbf1507efddb43a50e30b48fb198646e3d745d71ebf35d4b7dce39e58b3044fbe5401958b0e5bd84d8dcc71a9ca561edcb07a29f1f7f33ea9cf8de7b6900d107a27f416b41a0fa9647d2bf56bc3ef0a2f21a22e7116ce8711809dc71083ac6987b2d571cf5dc23d3154bbca52b8c8aae08e243aa0a292d5a7a7a7a3126677b6a1a03f52425a487b231507d003ddce91884718952f9a4699cc977bd6df2d025222222137c6e60404b9fb3a84ae4c3c619318951d2c3d8c464c5540fa39608652b9dc53496883e259599ecf435901a8a5c823973962f8f538523bfe5cb344a4a949229bd44d3c8044826a25ea892beae08019325e765aecf8912f2a3ca8078fdb0bb1e99a27a74332b5c01042a851fd7cf04d023539823c2f8d0c31a8e2136d96c1528428c0c65ca8c4183043fc1028a09099890c0c18721b211d552713dc61743b13a7c3f6c418039d231be4baf20bc1e99c238398194c96e48618629b2822c8c110ab2fae3fa59981e3dac5934608caa407a2d0106cb096096e821abaf2b60a27aed91090c946c8a6dca0e5b9dbaa21c41005d84216ac5f69a425f406c3038f41b975e41d4a42a824069d93a6710fade3974793cdcc7c3cc71dd3d10f7f93b4e41123b3f08367a183f87eb06a9970f543c411941115121e506e7c5bfdee5b5a850d259efbd40858f297c7c39d3e97bad1104d07a16aba646b35ebc085bad16087beb30870b84d60bd68b6771a017af3990f7ac0d862d9ec3d5bfaff15c1ececbe5c2c1c1c169e1b46e6e6e6e5e3e4059813a32c5d40a6c812108bd65b363fb637bdbd4f0f0e65b6f63730386395c9df5deab72166ab95aaddfdf12aa392e57d73cefb80382eb574dc0b84309be966c499ff27007fd201ea31177d49e2356e955c6b7bdc65ac4b74f30f442d7a4d5de31f485c3ea8564879e6a7ed4abda7697abb5356350deda35f7d0db31c6c080b7f98b872d7fa8775b5e3f76e899b1807d3223857bfd3902ee40d3081e9bba945286b56e434a296596d87ecfbc36c7a4927b58521c768e41758e69c218db6c36d96aefe76961306713dc99b419ad8a73adb2956b97dae5e8f33c30f6effbbc15975d9e5636a07e16a8fa09be780ae248a539dbfb6b3cb9a5f43810f7b872b24b1894bbeef3a53cb4a676d9ab2e2b5e2b0e18e9bf0023a55595942e5da45217a82e7bdae4d0e5e9e9a304a40d1f6152ecd0eb5eeb8624e9768394f8258d181594e0c20811262a92294ff45a2b2c8a99ec8620370ce9b5c7db0d4a5168fb51e649beebaccfc9f3ef93fbfc08440b689f3fcbb9e14877e2029bf2ca6d41fafc5a529fbf8341134ccb8c616db416679d75d75c531c39908b4e6e620ed33a73a7adb6da6a1ed6a7cf7d679f03c35cabe540f4bd3b2466b1d962d8a265bb1283171bdb956c2b9d04e8f156c3103540c1b16d5fc2b0cc3c6786dd6e3530c94b49fa9c73ce9d3b57a4fb560392eddab71a9090604eec7067c7864195cdb407b63c12ecfcb1e7b0d581bef7be861ade671ade67eebdf7c0ef3348c3fb8f871e10feeef5043d0f0492aff17f207e0fec3efa1f48df03b98c5dd76a2b6f342005b921cdb8d6d2c06ff3dd3580a86b7ef72d4803dfc740f73108641f5b0b449f2e9d60095b13ac044924914412b6246458c000c15f7e5c5be99c810909c32293dd6668022253a2dabc56ce0c43f450b644b730922573f19a3062a5335204c7c312233278363dde6678e2e51603965b912eb02c141ce5c005982c42a6a43ad08311535861620726323290691901c2b24e183fe1d232f41093a149cbe0021f2373c229e226ca8b195836ccf1ed68c8778b218b261bec4a8699e0c7f5339c1e6f46a2faabc7db0c2db89a56533025ac805d8162f6782bb20509d5951b0c666e30f8b815b961cb046c8822459dd6e3ad880d4562a83e6aa71ce84d05ec9d56ab06821d7af4296f7973d67a6b2f4835f55a2dd9a5ecfbb6a494198cb9e6cfb8f2188d7ab9ac87b65b3ef441240fe5db6b2d6c29ca975256f1019b46f7787b616afe0ed9efbd3b66b7608c31e6d3af6faf7d4a29d20a3717a2fa0c75c29c797381a8cfcf33cbcc60db975f819e5a6e2b8d6a3f1a9588a88e5079cefd6040e4e4707dd659ade84c697c400f33868c524e49e57c39e6484cdaa7efc1e5915a1ee9c376d8944669b01df61f4949494d22892479603f7ce64ba3a884914ff4895110ed608317a91807d1c7872c8a79409f09e5f288d2e6ff8ebc80c8e7005042f065c927fa5c3003912c3f5e50223396affae8a3c1d5ca7b152f41f55e4c96e0fd8a6bddfde625acbe5b7df725d4bcee400dae5ef51dac84a248ae7acffb158f491ea380fed577a0bbffb8d0eabb17aa79fddd4418f963f2df036392efe8c0fb9d5d9b0b09c53de453030a45e9a0e6575c284ac864f5abd5af388f127a288dd6f01aa5d1a7de67be37df530139ac0da1e21418b1a3cff7de7fe0908f070ef9d497e00872030a4a22a110288d3e0e4aa324501afd1d1c441f10288dbe0e0ea28fcafb5012494579441a1d393a223f1a53f51eb87aad2b28f908b2d7e7401d532e511afdf9ede860f52a2e24a47a15974a91d2e873107d7cc829aba5d5471fd5f7d0d5f4f1f1246f4518f9521cab2f2d8f55be41ed320fe1999bc072c8218729838419d961f56aad5ecd73c29ce49a256c86186badb552b05a795b2d1b1ba530275b7eacb5d69a614e60489ae072922df1bc36c61923d094714e3ca64a8a048664562432c66a9136d725d2ce481bc390f6ed12695b18d2ae5d226dda250c09d29e34c09060483b76f9194729e9852dd9f26b8cf16b84516badad964dabee5c2bad159664cba731461bf39cb95c52533969b5b2c29070429df29b284d604ad1e9491426902289302e341d2d5144c91354d0c0c3152d58f9b678000a0b4750a0b05054a394524a29a594524a290e3b74b9384a29e5baefa11a73292bc77d02e8c79efb133aca203bde8ca6babcb540a58739cf18372253ba03eebdf7c6f8e1bdf7de183fbcf7de1b614a36d1cda8c8da18afb5d6569a420b482c2425dd887880c9a63dde884061f57823f242bf3dde88e020ab0e92ff9c4d578e916d65ab15251535251575c60cadd5da7b71f5ecbd18e7cc518a73e6b8aed394725da7b5e77ddaf3be4fa55afd782a2a4b54fafcbdadf439a7d10c325f309a4126d23c9a455a9eb47879d21205e524952414294549429154a6c8a43392e88cf42189cec820b28804da14462b5ace4969ad564e4a6bb5f6567b2fc6397338735cd769ed75daf3be4fa55a7daad56aef9a1a16cba6d5bab979f10247b33c0adae4d8783beacd873a7dcee66cd2979d56ee9ab3495f843ea1e66cfe2dc280b24357bdcd88801a604818007bf264c29ee06b2b7df2c42ea1614d72137c6da513d664cf9f435362238ac88ad872ee6ccd76aaf0c3b3355b6dc7d67485385d215c549604bbc6455765fc0851a2348b412f67bee74c8a1142f3cede7eaa34cb91ec6849c64f10234a8b36d37c1be272a2b45b0a536a8d1caf1dd55430b302918c1e573782a1d7f7eaecc7e6158a5610426bcd355b0a4a2f2bd2a2682aafa2e8ef94d708236ae9f1364449a760a5f3aa62346c287bdd116f42a286aaecc0ad08cb0d481497b3b4f6d830109329b5cd598f0d0324d6467964cca2a84e3b9571b463a79286cb7362c83e3266ac52d37930b7a2307dfeec56e4a58581442b178812147480e2842cff06244b0aad39a33016766c4d9edaa2c17abc01a102444a0f5b6f6464830991f990d2636963c9b6823ab239fb51d4addd33867d97fd8f16c46eb96cc88e4593167b46c168d2620f3306eb51b7168525ddbe37637891c88e59c6135f9ff29ad4ef03ddbf791618de673599d2eb73d8e62ba83f46189e0782a1ad51e9dba11e3fcacdc0d1206b90a39cfe9e993df0be667dfefc69c03df7d9c899f3e320fae4e4803d628f82f4e1e2e77a9bb9d73aa4ef7a2d3dfde21edb8ffb6adcd7d8d360ec3abf06acef5e7f352cf71c8f6da03fbffedc43611f7b0dc6ce7d1efed8f7cc6cdf0502dd7cec1eb8c3f52f3e7e190c85dce37f812eb0467d8e87b7c67ecbbfefa138a00ed969dcb7f91731f00604fa6c7838d4c3cf06ae402015bf5fccbeb59eb6deeb1ddab3afad08b2d3d799d39c27bf0cf2d7b71be4a7e0f5228cfc99573931584bb2678fb72634148a6510bff74cf9e920c1c7092610f518639f40ec31ead0b7129094eb10ea21fdd7f4b2d41943d6dfa18bd66c97f4625d6db6f72bd88d407b48420fa2f69bd1e50eac9dcb5ea5bdce06784f7ff6fa20dcc0e18199d25c55c860501b037fe3031c20cc18354ae113a49cdf9a9ea7b52a56d54c4bcdc31cb2eefdf7e99775dfe34ecaef99f325df687618a7ba2b8b1d5fbed0f1941cab3add75ddcbefa5d274cd99aedfe5a0da6fedb8031ff3f79cc9ccc5a6e53294fb9d57b5fe65330a40b0bbaf79ee7507528e523ae7ac75b5d78033ad5720befdb37d8332c25081f661dd7fdc73df8c8ffbc0da3b8e07cd6ebffb369076d6de812b90aac0d93fb07a2b5082594555981dd670f7d9ad658179d2b8ffbc9f41b57b18e7f0ea51b07b0eacbd7675d67ec1a89a378c6d2288065127605275c2a46a50750aa58ebdf2e8f4bb9720c5174847a73a6494d9beb419d4a7bb891cd6a8a432f75ba7a8d6ce266a94793adb25e587b51b3218163664decbb7f5b056abd56a326f97cbf27036abd56e4cda7c6badedc609764e3ca3a57dca3953ecfcf365b4623087cc8e49a298f43167393fe74cc7cb3c639e1debd769e907c1a6d861ae36dcbbf7c7793aafea0aac6fbf19aa5abf197b55fbe7e98e0bb274ae246d217fad7dc6eea57cd58e16b85e6e9904bdffcb83e806314dad39f2c1d606c3efbb661c9bb0d56f58af6fbdeb2b0ff77ffa05ba3e07d10d627ed58ef302bc015d609cb3bd7ff53db40654fdfe667cdfea57aabfaa0facddc60b5a97b46380eadfaefb9ee97d1294f2a74ba98347d72fc1303e750feb905d771dd73107641dc83ef6915dfe16dbf3244d526b558b1dca64b39973be4a5b429a34696e95b627116c0ae3a7df83c19e39abef8900a381a3d38f3c6a6a63c698130c2910fdfa1361581ad10255b440f6a38e3fb6817cdcf2643527a9a8e31b13339dfbaa7a4d4377cf7a9b690e6d3e4618ddb740d5c78f864a83fb3bb0f53566a86a64301ceafa75f6269743bdaa6cf4903e43bdfb68705f8154cf7d0b0c55dfbd0d18aafe4a40f5dc87435d55b17ef9f543fa35fb29187e7ff35783d6e0bef2f0ab515fab5ecbf96910238ceebdaf06fed6df168f6da07aca51ce7a998d1ed287becddfe0af06fed0fb907bfa322645312220cc7fffe6576f03862c1e0ef520590302a95ef60d027d190cf515bf01552068fb6a60bee3450ba494b2e32d29a9d3af5eb440840f024320f834a8bfbf19311ab576dae34763f75c858828833a649a9e77e8885244443d88d5f5d320afeb1a21f4fc3a1cd06784c17dd0ed3bba0fba3570745087007438a04b080ce9703372fde9e931ea84f529c7f2bbafcb5a0c86cc60761e72c8667e4c52da23bd7e524f2cfdf8d6a794524ab96cfdbd52de37e37e33e80bdc7fc1ef35d8b2519e38b9777da4b19c1801f8f965a079e8923c7ccac359bf3caca0dbd79ad35acf08d39afb971ac681385815232fd02fb99ff7c2261756a92e03c0c30a9e00c0c35913393cfc25623c741de1bafcde1d1de6d8c1df9010fdea991e7e8f41a0d6f3e897d6fe3da68feb540f3fd97a1cfc1f0fab54ff9efbda13cd096c7a599b7cfdb2d6358d543c3d35e1b444d311442cc08680fefd0db9ebfa2b9f721d833dfeef65525e7da45e0004f037ff2f68d0bf354a5e705ff29e796f98f3df8755aae36f69f99703dd6fd197f8c53f0f2be8619412000f0007008ff1c9ef7f727e2c8753fad1c9f77b928ab9bff10bfa372a8fde8ff1b0d6bfcff848e7eced303076eede7b2facf5dd1ad5efe34f83d6eb1e5af33820fe1618fb0bf0060c673d9449369af7b4655b5f7d58410f6ddda663e990697a0894669f55c1ecc377d94d6dc09a175615b3975cb7e739763ad7bdfe30c74e58eb9ae340dde3d79cb6012beb25583b2ba9820a663399f449aea4304a89c9b1d3bf0f73ecf4d5ab3eacf5d5cbafd960fe34f81e68e53dfe6a78fd7b99442d13b426f0f65a9253a8e4618e9dcfe3558cace03eae62e405518aebbaaee3aa1899233fcd92a3fe3dde929c59e2d46b3dde9624f52451dd003dde902875afe73773c361e98683d16d09d40d8723503dd7ecd752e9494af9daa5cbea959ea45217a8557e1a127a924a4f5340de57e5536e7d1ce87b2f77b1613de6e1ecdeb37838fbf7505db25adcab58625c397ef93424d449a5a7a955567a8acaabd56309d5257ff841759907f150f30f3f1e343bee3e64498c3d2ebb8061508d794a4f3987377f7f9557f565971b1ea098a814ae5645b564880a220000007315000020100a07040281502c9246babc7614800b7b9a4866529889434992e33008a2188841c61062002000194494293a15079b64e12d77244ccfc143307634306ce65aff626492a34192449a9c1d2df8c30b51e1f7ef19cd9abc177ef6d43ba5c80f6720f2cfd011006254c82822a8127f024776fc7e08b6f72eb687b4ddecd8c97fbc04eb06eb6048e8d87238011009aac9807cc8aed1ea55ef9ce81afc5718814c6d42e872f67bc78ac985e43fb33a2e0a88671deab36d4684778dd13991d16c72003b2dcaef0618d42d69f90252027a29b0a9f5ec9a47fecedcbc929413d9b7a4de4d62eee357f44a3a03971fa2dc6339e722abf9ee0b5d37c7829013e68e6f7829b49134ec5f9adc2d10c3a7c40dbee80bd06d7ee25f77e0d7bb1edd83824057b8cd109a6afdcbfd3b31e3ad26098f6480c63467622742d06c08c87cade0d2af99d3feb831ad509856643cee9aa1298b03d0163ae199ee02171317a508d36dc91a96fe410c3ea77de9641acfca481fb6f419c0fa3e8714290285bf8c8c4287ec5f74e5e125d5ffe0c6103a3c92c0a45e77a99ac19ee36e62b7fcf7750ed7d1064ab1e0de5723c0a38710514a0335caf56c2f432c515041776fe5954d4057525d75de80217411082e6c910171798a46a92770b7296d2044d12232412330321853439114f478fdca2b7eb824a6ce35750048c8f98aaa771d48e7178e7bee8775868080476a8d50fe0497a7d7b6a6962098449e98aeab7aa3b9c8f01188bb2c62692192f27f7e9461b28fd9c0426291bd008106db8e4dbb103d149dd81d1b6e20708e3c9d2b378caf77234ab60f9f89b41caf56c69a78ceb030bae1027935a5278d8492c6f066e01b8f35246774887210d80a531b0d3b3868a7cf965a8984331e1d05c56f0d284faa488413c2f83b2d6537b6c7f9e4162a6c983191c8f7422b24971dc3214017f630487555f67ca137b7602fb31fe820d3f71f1db4c69f6f9f70b170c18ebbd03c421511c7386a38ee660d1d17a1e97327c9e8fade19a22aab54448966f7dab22f284a48417bcb40e3c9cb4721645cec2a95cce4f4a19c876af56f49c0703fcddd67cb46bf0ad434278970f99dda64042aea2eb9cfa7af8906f15a050d116c69627825448521563f7622441bfa3cb447981c0d3b5577721359e89bf3c1516504f83166490cff87d53cdb288e4328a8e99396e55692bd2ea90f9104f73896a2d445020a083965c7032d4b0f72cbdcacdd52ce2fd7e54b2a262050ac776a869a3e37cb3e819c53b4d3df4cde9896b41ac826fc7122deb99ce5da3a7ed4e8f2e23f9d0d765e221f991b39a31fb9109e1fed1b4096ead7e01adbfa48938bef0d662bffa74ea8133ae422e74bf64840d22867059ebd752b26764461fa9a016b3fa879a0d3fddee5dc08f3d037d5b20eaab368af49371667b7afad62c3621bd81249b2782214e48e610f0ce21e73616513cdafdfac699bdff61877f124e5ac1c0b63c21dee9b44e1fc66682bcc9fe0691d5c18b09c9c1e51daf55d4f931e6872ea44beaae448f09ab168765db574c629ab060c8a09376a8c18748e04bda16261e6ffb81d82bca89545fb4b7a344214d45f2682a33c457c2b2d0122172b4fb3506a62d310fd2331bf2e0dac26373c4124fbb66cf8cc136ef03afbf86e40bfa71d8b25d09995ba31808bf8a966a6495f6bd887960a4c88e3e28d0ef668d591b739e521b190d6b36ec129fa7a5ec7ba780376825b468a2269559fd069080e6e35e998c2c49a082caf9d01d3e0fd0b0f11d56bbe5158681f2beb74b8a468e022d0250525a45fc8a78ccb802ead5296fbe62f41bf66c25bcc423db9e83629e9ac17b1652e85d0ccbae26a38b0824d202ce1bc091e9bb2efec9c6af2d318704f3fdd3124964029fde8f0e690413eb174b336feb28ae6bbea1ec543753753bcef69003e0789a59b6f90289e6473e75d09e823ab89ec52c12e32976e109bd9ed7baecb34ef40e038456e94d2025c1a1454faca82188fd5ca48575e4958b261d0afb3eedf50d8fc3cde5680f5132484f2d608baef4de55c89f051182f44044385c4f6823315fe1ba9100142b95e5dc0bc5e52856bd6f09b0660145785216005f533cc9a395fdb01df4106201529044bfd03dbe6c3738d736001c723c7596c9cf9fcc3d45d42e6aa062038845e01820e5e37fe8704c48e7018dec2e086272f0b2a14b1694bc44c3030725f29066806f407258a2663601bd2f507e145b304ae9526d0dc4d98bf1298ad792ab59b2c397e1f3ca0b5452ec1b93a4ee9405213eed20778d09514970a29de404c957481966009c16763865d5d051ed70c9c5931127dd7b3fc6ee75351293adae966ca1e1fb38ae912f3da92a4a24538a47e1a7474bc8f0f5de818c943ec436037d64d591f76575c84d960ed51d0d87b1126320f4f6bbf51164d4ab918aa48135887b473f2105aaef034ff871d13350065a098696eb56adb5495a6a6954989e687c3b89039233395de206bd21a4a32327a3a4c21639af6bf9e1edda836297a27a9f4797f5eeda29362dd1a90f55e0177963deb87a4d41007222aa34190c831a4a3ab1025e0d547b4a2fe549f6b3801be9da52b9d278d86efdc8ed0e327d51c75deac97602d55911cd93a2cece35b788890b82754328af66de2e2225b8f6d6c0276dde0926bc876fb9cac8e41bab8fe6fb38b6e9e3fcbdc0bccd7d26d3b298ab3cf3e7feff68acfcb367cf7cdb13165b154ddc34f6298dc593390bad176c677ea5c20b89952951cd36fb0aac599071e66fdeb6c29625ad413bc51d18f5b89e28bb40a5c3b960e37ed46a12efff9774e099eb6249d73a612bd71b78d6fc5100e906fcba73a66e00dad0d68732cbd20f744e17602a928c6d8dae4c7ab878b67e526ca84dcb2dc15e31f538cc353af803334afddf6a924f235bcf95af414c6fe9a7935258eae1418d25a0d47ee74ed9f86828dc4607e63f0b02448c3e5bf270ca220d99d5dec4b34b7d375a956e416d0bcfa4889faa4fde75cfbc47247206ca85e295ba42d8bdde9749c6e826bd89a46d84a02e574eb611ed8ef65923ef68492196c3dea13b508b7fdcaebbaed9a938fe751ab4be988b55da5d4bd37afec2fcda042f573f8d3b61bab52199481a4826cb8eb1bf2e8a8d88cf29e8edae13bdb0e7888b709150ac7feecd070f7746d9622d8bfd88fb12f68411fe34b2ccda9fd305cf81cf84028c05658871e2c55500f6a1f4c7667bb535971da6d39a26dcb8078f93d282d4287d782d05fea517a6685d5bf4de4cf259e1b8984e289a1db5669a958c329b9cd97f2d89e4dba14e1d833b2008960a144cd9d344f05470849fab0c3b9f712d30294901a52093907a34359305b978a1482ccca3994c67254867c61c63bccdf3141e82eca84847eaaba09607ec4717b69e73cefd5c88c02cabcfc90a7f4f2b5a3c367794f41e8f2efe9b8c407c07be0074b2cbcba90ee2c07e65784da33bfaceb169b528627230509a53708c51b8b793e89a57987d5bff606970ab0bbed269531fd9797e6682e87d70eb16208143f3c25a790084c6040a55f8852bfeca34e96ead7f1fc4588473574c3dc4b94db044f3cbe7fb2d886d98597a8c8c37e04d795306d5e9c009f8b2c5d47f309bf2f530def97a8b00910575376c80aaee6139c79a8166ca1b37e4bd9eda087e9cb31c2bef79e86180642e0bf44458c24aba2699baf76917f7db9bee2dccaaefafbd42fab4c50158bda24084dcb43c914b246e2e2ae3975d56c2775f00dbb433449bb3f2d91c42111302e8a8c5db3f17181c8a63aa733bc6f2e538e5273bf196f7167e3ed41fef328f6e9ae1cbb28dd402c94a4772c70d6fee06e9b83c65055090229d80335d4c900f302e07545d95b2a93bd92a40b6c896f8506595869956e4eaed454c9cad3a91130a5a412ba41c7b6ebd97ad55551eb810343dfe234093f2e8034cbc85c61a1fcfe25c1c2bcf3b9094568716381ae02e9bce00cc724daa9e2bb1774f3c669d4a4c1f8377120b596bb8a31629a28a3031d111746c4a6b8c3afd2d58c263056b305283dfd77b444a5b4eb3ac100b31d172bd53502e915d8cfe3e54db6aca1eec50ad1d3f726731ef817b0d3491e096ec2aa97a419e9c533ab27e92aaba1e54425610c6937595912d1e1489e2d2502124cc87dee51ed7b2cc1cd62a634154f03028bd3f61d1cbd090db394726ace3e0e082450f1f5c23d2f9cb450e3b62666af2393d8bef111582e4720d35c15aa618d65cc56a75b7cb30d2b689a6911810f792c76ab5bf2d8af02df3aebfc14ad0b31a5aa8dfccfecc5627b4ba5a9d87d9da6bc1f3c117489b64b8a197d8b6f1ab46795e0311a404701852a93935de7f4898512df12b3914c1bca55c5b0980fc592a1d6469bb0a7c51b04b316210c7369c4670cbbfac82a897a26876b5f3931a67d8330d6a953820981cb5b02f538800aa145ccac40b79faf9c03b9dc0e4ec44d2cd534ae9a998eb0bc57556fd17bc4457d65aefc9c70a85fe1e49df303621c1458f1f4a007eff2e7c48b538e06e261854035b8752aea63ce9f648622cdb33812280ac4b7cd3b8dd89aed83ceeb289a0fc8e6c0667e3c0e774d26853eeb8ce8f757891aa263f7c0581b7a81110a75bb9431e0e4cc940c1923ea40ea869b1c54d4383f4cfecb54740844908b80799b800eaf3c2ea10bb3549a831166f1b35e2c3014132e2f9ad2b98b699b9f340efbcc0ba3977e3403427b9978903adaccc292881e6fbabe0d4ac51c7f01a10946904fbc0bd84314665730e52f4b8927367d96620551414af9df324b0906f703ff51fc30297d836a2d3af5626cb286e35784897c049fd9cb0c0813b3e16444f8e1a017d7df61e9b2bf073c4baaa94a9146fce5ab9a0829606537eff577505a95f899a3dd205e99dd0ae64e69d04f0ed157c2e8ab55ad5305ab423d6cb89d513711491e208396bf976583ecde9ea849027067e7f39fb0ec2b45f2370a8f73242c623c196402d6bca2d2abb0710cd937ab38820cb8ff40cda2192307966757073e16fb05ea71a3d98091f180ab53b85249c6921f4d88793c0e8240f28bc274e2c074349a0deb4087656c6171ea35954dece5e57681abcc040504c51226c59dd441bf9e5bdb3a9a1fccd4d92ebbe814a01300ba950aca048ac71923706cf034fd63c99570f7fc6e80999f083199071d6410a24beeb18a198bd74b72113c281ce921baa0a3fecf14672b476c385fc086d0089c33c499f5465d80b6fbf64921adaef35140e041bbdcdde39af89d01d52398cbf580361dbc4ba3eb91564cf0755a51f958a5ded6f3ea65682794b94d99d4df9adbd75f25507c24d39bd141a470b98b6f28d941b93a0cdd539cdc0fb1bce19480fdd14a02b1fcc402712566f5dbd8e56e0a32b19e6e905cb577c89ef0ce44cc0a2bd1020e0db69f2b626598b00f6d1a73c790c6c3652dd883847dd60533da6e4973d68070e84a599dafde5d0531634c2243b434487b366caa8565f59c30aa16dcf754185328bf3243265fdc0110c32617fd75eff45e8ca7ef41032d19ccc3569f8186d9d9df196c0f946c9e6c30a51ee063d2b757860f09f6783ad2e1ae57dbb0b49d346f91a266c4e53b247293fad1a71465854ed5a87a68eed060b46618d19aa0f3b46cf153d6056324001151f8d7c9fc48f9e496d6a8f23ea0ed2032cd9941a332a4f843cf508c30107dbdf84e306ceae9bd0e57765387824202014e1de2143f78a1c15ce99436e7f76addbcb91cdd38c707c6733d1cfc8ef19de3fc85f6dfac44f37acea41a44e74ef15a5938a606098d6d81a39481cd521dfcd1b94616216166c0160441a6894404336160c7f4d42f1d503b1eb38392c182a9b466f7db3ec230ea350819278f4d18fe7192bf46f714e1d7cf3f11108929a940ccad20ddc4cd0f3ed9c12038c2435fe4522f7d2f1fe47e862d6cd80c02317b9175796100cb16c7a054fc092faaf4c19f8679d2a00a6d5898e8d9010713c8c3df007ad9fffd8aff30bfa94ec34dcf80ff37834b1b850ff7a7dc4908ff0d820961c00f7c4dd069c80ea6dc11a352ee6c5e2dd3b3511ac241eec0854f1930fd932cbdbc8514238024e50e1f72ba4a30065b28ab2877106883f703742142b913c62f70fcf8c99d157375c9c91d1f265e97435d4ceec48d7bd147ad242b5f728722e6c095efde55504aeee0affa88ec1de73e954fc92a46933b28ef4e97f7e88f3e98e4b28e7f9806ca9ddc60f9d909bbf076c282e4c208b7e51b2cc13f2e3ae44e1f476c25e40e2a3ea9e81255c9de94bae5de2b5f7fdc9988d98d1f91b31867e7e30e1ab18cd8f9cf888f3b172d6451d76ed34287e6eeba1c3d2aa67af1647e689b89b069a88def662a1373ca22a2e560f2da03f175c03b83c8f6a4e707bec80809c98ac51a779645252246f4835aeb7187e367144f733ef2b8731e471710c786c696c79d91c70a8488fa8475d305e58e03ef6f557f9a221231c609995509c08e3bc3bc345ae4b678f1c6542de3a7801bb1ffa5f609e8b8337d8e4d698d66cf43c8fd2a2bb6db7ddca9ac3e6238dccad16ee337c93eb3cf2870406b2a6b675a29744a07a59e8163953b26b2615a8b8ff81260b79e8a1477c46c77d760c5c9233c9080001177a228eebc0fcd264c9a0e87b84311df0752ca2976249eb893183bee3c929c9bfc504cc21dce947d2b43c670c43e257c6ed1c49d51750aab2e716792c09b2c9abdf1aa8773fa26d27d8e220e426a284c80d29a80b59133d3491f2c85b6e54b6e863606296b18de428640c18978d50c4d04b5d5a36628a2bf5f683b6238e2210380e9966b2632450ca91b5d956c95f824b54889114792b6d1e067af25fba8d7ce0169e76dcd8d6bc0993b24e21b30ffaec55b5e966d4a03cd10a4dac98e7c28e6b618204d5fbbe0d5c8e798b98a9dd36d983dd34aa735e9610b9f6333f4ae11b1b799e95b0c44904ae471780031de2d2161e6eda6f1e48498ad329c40c0b6ab1a16ea39d7f2d45fa078d3476b7648e964504cbd7c1c742a586092a04a60bd5bb99d839166cdef8a1fd171a35da5ad7f8d2a5154cd9ef0227dce26afbd72170058011f71770c22481f967a7bbf30f91ae78caa7d09893821d88f4af1be9dc4aecd335f886d0d04b2896e1e87733d4e85d45b57e616b65735cbd40738472478d91a2a01ce754f56198ef81a58648a2acfe70b82ddacf0a84769ccb83f053787cc632e7cb98196e93fa36729cf0a4f8733c29b4d670482907e3d70c784edd8b1b599131013055aa1d9a369e3f534571a4cd180362fb66ad19936c95a2d33cd0c101c890ec43c2244fd360a4cf86d30e53b7b3f0a51374758428d08976ae67f2201803dd0e7561afae6eb09afa7d8ddd145f621a8157af9644511c123a405a8840267640508c20595f47a257b41c9435997606fb3dcc3ba033837966fe23cae049555f10f31532f8ba2ad47b4ca6fd6b63b31ec59b7bb85d584cab3e59b7e2a91b7093a0d4b167d30dbe47537e81e0aa82f2104ae859c07fce09661f7e06e2a3edb26b3797175f8d70639ec54ce1aa61fa07fad9961778d91b2ec722e6c00a8b6ed9378057c8e57190f3168d0d2002ef2bbb415e0db770f9306cd5d461c9a4586c62ed05c51919c1b0a8c7997afbefef2f1b65f0133bfc2301247d76a4928f542201ce8923d0fb8beef5f83043a1d5db85daff182d28e6215668ee604bf4ca2ee3eda4103603e12d72448f2a1ae01489250be2b2da5f9f736151db694f7d95866d69e151ef4d3cd334cdbfd44b86f388024a61a61c7bc27769f136842ca1f6625131b49e30b4d560ad3464df48c96350628ccd967bdb0f7203389d7c943478e022476fb5b4c6f46144207f860bc1f80bebad0547d9f550833a2bbbf3434e1f5c5e131e09515898d27f0dda53038d65abc1d5000242bfd619658bff15dc7b419cc163b868d22cab5544e778f7bcc1a8fa2ef61dfb0556e6844f306db97f9366bae7346e9d2b80db9c32b68c2514ea2de32b7e2413ebf4493a5362eb2ef6cfd31bcdcf6b8f6af5fa0693f58368344ec973688d8deca64f9a4b2b5387c6e3cfd1168863810125193b15fc58e80eccb06aab3e29fe09bc8430f29b97d86b22c65baea2d7b4b3017072495f27deb679f7f3399e99af3655463bebe7a42645faf7d50ae5d444f813b9fe83e71eff6bfd3ae41a6bdd05cf2f246cf1f5b1bca18f565f205bf0009367ca5627b497de73089e1ffbfdf66476ab8a9c10624fa0bdf7ba58fea324b67db08b889208409d282040ad074fd32fb5de8e70cc2b6a46b010a41cff34031cdd52bd7e5b898d7d28f9b1786168987cc95835fb1d222f60c2527ca9f15d01a9f296ecb25a461e9600f83c6327f942369446dac3c3309bf949cbfe8abed003fda4d0c54607b111847b638de51bbf5c70ad13e3e7add51bcd234c3e1cd7f7fe839b9c6af274d5f85e0fd4152fe44723f0a8b710eed3b85e7521a32dbd070af8cc76c04ecd29043a823994f9dce523deda6e387da0cf76dd73b220e2021690d0a34a7b1e695845a0b1a295303ca1ace9c188762df78edfae17d66e4cc54c7274bd932207772924b2cbcdbdd49e5e1f60e4c2b131bcba94e1645ee0dcfca6c0ae05c9c45c6bc5c8dfe4bb25d05900e99cb05b294dbb6580aa09e6c76b5e5e760a7067ba55efe42a9d643c1314b6a8ca9b534d13d6d29c6602da589128f17b8b2bae0aa1386edd1437637cba9c2b5a379e13c83a56ad356c7547df0ad680ecd16a6a81e867323f7dad7ffc4b9e3fa899310121ade55886451b6dc49941e0a513c4ee4f1f427395d1ad73d42c2a9489d5ad48de580f9155c6fe25eb044c2219b859a10b55b475c4a77e5b9d6fd25be3d04339de8a343870cb99c868cf2c02d7cbf08718187e147b24ae349af6348e6c8e2eecac5f1c66bfbe3bb6bfd1498ef54cf66d458af73aa7e44db961ee058830e3673121dab3cd7ebfcc723ae5187598e0a109654de9b1baf376745f865322e28d79726af327887b39ec61e24a7b9f824cc997285ff1f0e6ca82f9418601f4590272a7e4adf19c840396145b142fd87004a155d567cd7bdb03e1e31b2cc124d075aeffe7a439d9ac5f981226da64b5a95e881cf9290a6db4d0c7ccb495dfbda942f77361de554470e9613fac4bf910857ed3c8dbd714c7b6aafd060b5d9438d383bf3099d6ca1f2a0e9175c983eb5e5cc4a37a795c8edd02fe92278768e80a3049f750ed01e01bff6aa1c8420fce8083bc2ac98138eab1f0174dd13a4b9b60562c5a6e9f28b423563791806aef7cdbf413139195a0bc52d75643feeeddc01b800bdc161d3035782d16d3d96f5e828a4e70852f0ac3290525dbd024f88cdb60539280611b22960a8f82ea2c85e043deb6d13c06dcd31fb1814092a12e98310161a309ffc7dd98d5bbb35c4ed283b821f928edb32860826e358d24f5ba476bb30c185a663605b44a778365305c6de3d4f5bfd21b2102f85fa247f6516cf948801ebd74598efc08c95413c420ee10ead2b6ac01a7a8639ff0258f7631b809d17325769272fdf026e51b4dc039f1a2a316dcbd686553c3b30a6aea448c596454f9ad8c982f130b71ff9c997808dbc427bd01f26d819d854b0216e3226606b7985a3c9cd572b82d273dbadfe2949129ef90dc53b7aee6de6b6f1a8d13836364b8d1f863ef93655d5d4d52876384ff54a65a24c02e00637ca1d84aee595b5cbdc08b1245e8645d86a03ac4fa5d9f9be9c0b410f11808b5aec9c36c14278479b21aa46a786127948b56b1506712df8c1e478918d8cd3f55b19a15b027bd6de6eba94a8cb8ff9d0dfb5223685d249562eac088551701d140dad88dc0b61738deea8ce017f14d518c55e4d80e314097d512c1d10ef79846df27f24057213a51023bde8bc54634008b26d99a52dee4b7005873ba838f1cb55ded4d47f75f2fe26434b71736d656bfa35f4a46af0549e998d70e2bef0161d98ace46c0411ddc0ee2a007c00a839eae22bc966b500ad8857b68327e33e0730e5014335085ddd9bd85e1ddb1254b2717a8c98a1642573d25e1c444f5135e3c4de825279428e5dda8e0c40aefa23d883274144404c244c495cc0d422f015beaa343343f038bf2d7b62bf120ad46d2e84fa3ff54863ea75634b68446bee72ab04b607de9250ceec298ab8dfe08895b0585df2823476ec0c2639895ad63fb84160a206c2720d9480ea92238adf8c4cb59d5f283b90ddb42e4ef80f82e1635878bea5744cacbc92445941974ad243990db7c85a91f4bc3611fbed3419bf35e979fd7d70e385d50432b822ac94ff22c5bfd8b21db05a6ff57384299eabc5bc7192d8243243b971a76603a4f27aeff961a878738f2903991182095841c7063b698ac4e4dbb830d40b97ee684f21c0688365c0b24b25ea1650889ee735810ed61f00a9956fb6764b2654db0d932d097bb967ac4d496b4a0513cb1769b534f12c968e7d0606c415a090a1bac45fbc47d541683ebc84da9b741aefabf14269a74b7760f38c544f3cb3dd213f197153e30550de49a07b9e9b624b16260d6458a88323c512b603bb5661f78eacf8fe9404a37eec37b91271a7a26207364e45009b3abca46614bcdf10cc183f6045cc78df8a95b9b8a66bf8f5a8cbb3554a47d4e5d6b9321c3e13d80eb67d13a2eb32684a992a2f0cee976e3c8f9d517911b30e17a5def7bd8f3892c1d61d48a0a14cc8eb1e02685ffaf86ba366caf4a3f29a6e953339a61e8e34846f1173edd473a5b6417518c262b3bdb466fcbc124d43a2f0ec0da028639d059cde60783b6dd8654cf69bde13c634a74b3481501ae387abc6bfdaa784b78286bbc9757ad9d2a3d7797c345d779d012635193d23957e8161397c893b6268eeffe604b8415d49100b7ef021c6b92e0cc5b388e8410341212849c043504cce1177b0d1a72f0528e2990b2deaa629e18efec6d98019e4247ead9c4d3803061e327f465dada1b3bd955acb9c18de853d75d6c0b491733ea2da031babaf9cfdc3788ea77df3915957955b7cfba71863e10da7bdaae603825805862418b94ae83c9260ec92b37f94b8fd1ab8a5e0a005a6d90fec6e4664d09eaf0a074addd264b38e2c15f3dd647a198380f0c21e269c47b698a0f8504d7a0e377dce5667c4967b10da526cdd6f2dad95fcf67fe2acc82930d140ac400838a66666bf2443d1ee30df4b52a2a7a28498c5e8695ea7ee8d4fd9b1ec22f01d426f0d2a8c6b2eb8eddfe354fe5f634ab33b73f47967b64ca2d3b237e140f964a19310d937073c6c6dfc8c537d75875a50dc0c82697e92bfe6dc4cf4fc243f606572eb87d936b642eadece303465a52fc6df26e97677638aa2e30f3e561047c5edb3bf5945237aec90c61fed283238475c78042caf7351e367e0440694a51989a034bad33c43b75d07d281fd50781f149a2ea24dff889a7267bce651fecfe542638b80eadea4683b13aac07ae5065ace842e88b43c467c4a7c8955f764b838b981389b7158597cee0d2822d7f69793e64d246ed716d62b47bf521beb03bd1a5484eaba28ab43efad003bae8c244cf7b1952ba226f579babc215adf5362d905a3de23eff02145ee91f445afab5da7fb3340fe283d6d2aad415916aa6759c3ceb1571a9c8f35ab16a35fa683de3bb635690d8d089a84b8a5ef2127a223b7ae76452cb3762de98662ca7a8e059edffb9bce0c433ae48db242fb6f7f3b80b3d85772b9091ead76987c81c9d4b55ebcd6c6c91a57c6fa3432e87c0b69e588aaba0735b01338e0796e13e278528c6ed0aded8af1ccfb6de09b7144e8ad68c99cc820480d522100a9290ecc795844512e14ca7a406aed1cd9b900555e6593db78c1cadf7821c457bb36bca20ebfc9e4b14fe2320839556ab9dce6e008bcc2ba728cc1918c085b912d0770046d638ff6d0ad129f721dbaf5d6582906a7de8b4c34e227c946191c379e633583cff08b469664c01b9441c1fa4aa1cf93e8bc768fb80ede58487b83d250bd2787e094ca838756f0594bdfb74eb9357b792f426df18d5808d2d691477be8966a025cd297f10c166661969c68a206e0ff1757be33aec103faf615d8abb8c7489be2190110dad3edb064956b0b05dd450dfa9132febd5eb6ee1bb28c101b4b6f1801b5e35a402abd83cf262783791541f1c8af50e1f78c2c4f983f980fd05d3a05f9f70e1a1b98885e785ecf55512c82e19f5f2f100db82d46f035fc8ccd42b09461059f1d032095006c38ef750fedc4ce25c64922f25239792b38ac75a7147a5a89945459c8160bd00e7ddbb599a76c205b71dbd5dd77c018934b8c1503dc2df2c8ecb92833cd89d69586ce41ebacfe7a8752db1e654a8560d559255fd851174b87642912a0acb3642bbba4cae63823a9007dd894ec729b5c593da6081910b1ae925c6e136baba3a9440053892289827579a463e79caa48c94e28b65f912dbd6917d5531c099d82f6ff36509dc8481ca598c2ca31e4ab13aa44278269b302017bdffaf7e1a5603afba98f69616cdd9aba9fc4e826a1a495e4e5e0f84960f52511511f1a7c8cebd1a050c5246097f536a648c1ffb4b3ca166f3d0665c17c255f5d3d9e76ebc304229ab7abc6dc4a4340fb33c5376cfb0c74a129de13dee02fb332ff581748a23155a5b310a74417df9a71c8e773c382007d9ce8264fac2c1f352485600204bed1c8086670e827706f8dd5a2bace0425d436750c59105e40ed1e07b1cf70e984901a9095622f5dccba99063c13a6133af52f158563ba9836e3512e5ec9616ac300f538972bbcf6f105e71d9d356ffcfced9bd3ff7883add9327a2531f6b9844ef7439966276f573e3ddfb7ed1303cd16c5c993b52b7d5524f17048c75d0921261a4228077a1674fb31771fe59026ddd8e4aee78f9493264ab9e1cdb2239016f3547457b0f8c7534f9c96992efe40116c6df19639469cf01790a4ddbf11e784fa11b128cfe7c920f3bc05c567859bd56e492e910ac920565413b21ed299a3471d00c3f08231067d802abf65715a7c9412dc8be86f2e1bc1cbfd5b7f7ea30461e2aceb275b2c43801a67d39035d63fe0c95f7203dc998cb95c959bc46a25bdb799807398aa50390903f2049ca833d81fd55d7a483ee899260aa65ccc085e91b35c92dea6aa8e7a6c55e39647955c0e41f137cca0d86b203b3e0aa142a910986847d1d0d87eb1f75cdc933cdafcb437818d313ccdb8e3a0b2f799b3e8dd66a3789a3f19831122d646ce1f53598c5e6337c95b66bd540089fafdb41070573e7e49b67e04e63ea13da26f8e64317b45c0ab72387c112d199eb86b28eb364a665c55e365e8af351890f77c6c46c97060740351fa216bf83f24366b898dd3119ff9d6b14985d930170e7c3d831f754dd8ceab13a7cde2ba24ff3b8b64de7b7799ca750353024cc37c1bd4b84c429dbb1850d3745cdc64f7f460e07822b3700a18428803235491c2a5e1cc294b2e315683628c1e7265c61a6704ab8fd73c3a62ecdb2d2b897e3c47be6d3625b76a0889ebf13c82d4cc26148b9899b8c4df23a66139fe6bb62678eb313d54d713b5271d1d9577fd63519552fa0aeee8e329c027a3b18a56c1c5c458dee44178e127d2e3651a35b2724d939e9646f036c577b792c772623f448899ccffe08f05635cb664af09b4fd63409dd08aa708cd9640fd4d489bc3de43b509d1e3d2060fea7b940840638923c43301bad05d7d8b38a024f833441e79d87bf7313643544c1e0fe6dcf83d8ab0bc76e2435996569f9c46c95be9b06409ac573a496e1ca7ac05fd181ca00e1b9892cdd2b19944081dc705f92a65ba8c258c10854ca75792a650010e474cc83db217ec2997cc28b2a7447a435f83900d2066146844a59e90d151ab5cca9a152d7f1a51f6c6316b6b232eca26c3c63a7d44f1a3260e6d16848a5644f9dfaa91d5fb40be85105bb8b477fa0f96ae95864d62eea954af2653bff4a4754219379ae37855dbfdac45c0718094d5356904fcb128a391b9d8ccc987916be6842d72732315e8021686720618eab3193777ed90d5e2a601a9b29b7d4e3c6f60760d10da7e94337608f11678261c54deb36b7e65ac5a6536422ad6a2aa35fe7a169beaf579211d94d07c2ab74eb4a9dc99a5f25b065fb8824a0c2abc418f867a484c226888b96fd25ab52eade28f25befe6beedf7cab829674619007474ee161aa58c1f1c46ecc1012cbc0ee4c0e31d7b6683356230acf49bf6f4a4e9b5f92cdaedc2813733f2634dd7d1256b07082c9f22ebaacbc855000328c3664250c6e9a0b3000d59f36a661084e612fd5e1fd580aadebea724f91d500c4efb41291fd62702f5706a29ec67dfe5174031083f2e09f406bb633d78d4589e998386c16c259298cb289b570968383f87f249a05fd006405484cede4a29b6623d342b0d3ccfd6683c0e2014690b48a1de95aa21bf2b40bad562c343020772613b108279c190a7c23b11ead9bb5cf9c1c6add4dead401a37e74b2394e2c27fdf19d1c1d6fe4ea6564e6ca17164a4a1e09d2acf05818866bd18bb36788ba346b28b3230eea11b74f9a3558c4584ed9c903e1479208872c1e72f903e60211cc6c6aa9b62d8fdcf5cc33184171006a6c08e179d2905e86a8a8528c121eb9884c99c6dbd0b3e1299504cbc3f5d507ce33fe6c845d5125c0fb8e997d40c744826cdc3227fe0b1526f9cec602876e39bffec4950ee40e30d3488ce380e5193c2b222302c403d63d2eed3b38fcae5919ea949dc6a3cb27a07d5f10cba8e6c7dd89814b7d29cbec346d65181143f31c25befa9725a38ac73b7d884f368096e513ca9b80b8fd55ccec86afb68e6719c093d5e7898a443d7e043a44c50de83ca2df99a2b7a5e0ebefa60fe23fa3e0e83abd562d1d47be198b1410726f292d8164f18dc379a4954742873187d34b04463768d806c9c512ca1dbc3cc58478ec318882bd6a4dada5afd7670e5c44a32f7ff1137f3a107d81a286b0aaafe346bdd606467082879525ecba4114eb052e65e07874dc874ee36e2fb7b9ef40e8bbbe3e578cf730e417c594b4d92c4847c16d0a7731cf80cfb1c0a8f2110a8cd77b89b4a9065ff8e74d15c03461629489fe0209c429393eb6f8d4fc1762a7ee8e46177b01c6a196c40e1bb0e0259aca1d3a2eb4e34cdcab3bd6a3cd2e653d0ebde8e9441aec58ef27949cff570096edaf81a29032ca71811eddc22118a6553bc75b8aaaa791858bbace8eacd030958cd59b3728d800565bc81d461e7c29a3ce1b8e8ae745afcdabf862664f4f9debf3085ae354852081cf38e63f90912d764223485f67bd09ba28b846d2c2200aceec5d267b8423df87d59950784d701a40c7647615edf4e55b8910b1140e91b408ca0623762106f23e82910932220dfa2da06ea179ab4fe4537c9cc48540a1d185ab1eb0bfd3d4aca0b56db4dce8d8b8998a63605bcd4f9d1532b4fdfdd1ea2df5760a50d80b9dca01ff0af6eab58ab18d5fc10184fa3e6b2098dc95f3d5e0c22bbe33e223d19d85b8b7e3c39f297467cafc99bc95b0463c7a2e3d86c60f5b23e9a5472b1bc0292c6ee5e41fae43e61e2a29c09165f409ffb6e8c93591fd0da5b914c9fd39b6d7b4e83688af1e37644989295a0a90fe10a889654a89d4aac48fb4668102f64a8ba5a91bd842b23e8a10f2dcc6c2614d9aa9c676fdbd8a71c0e0b9b6bbe7c2bedac3bf0bb491a03c88e7750d7d5a73e9b5acf66b0faaddc6d5bb87249be62524224c2f3f2ec4159fe6a683051a09d79adc2e05b7412b1475bc5252fa4c58c79450cc3cb4f0850999eb8acb20f061be2999433d1ddbff9755b3eb47064c900f16e81285099a80e24e2430d3400d6e0d1ba51fbfe7748f7b30e214c5e437740584424265f7dd36e53796aaeefd75e0fcfa9bd63003c96e8453dd7fba9487cedc3cc201c3e1833200dca743b6de0c6895e10998ea696fff21602aa3e9925e38e35a0c43393082fb728184d1854e14934b7d117b44bb3b755e15d1e5985fd433b0470e2dee3ea32f1316600a4683cd1a9b339e447341a763a97f68f4726e7fe95256cdf0d5175aa86c900d068cb1e078087c0f6eee06f8c7c522040f5d13d8ea4f9a3d584ab5c67aeddc4059031ff33387d48fcd17d9272f96c66227c8d28b23203f9c304092796c716e82f911b14b9cccb9fbd0212fa869cea310ced9f84f4ab7acc72e263d0721c105eab8887058fd1257c6807d3eb4b372312299d0726a6d29c1d8e3f5ede34cab96add36a17c4edde2e0a5818c53668470a8ee4e999620f22241d39c9bd658e89199e01a00c6f8ed5e6db821a76a1ca7095e31d2cffb1163b74b0dea072e92e8ea1178b979e9acffa91edcb3e6bf4b3b752b2ad171a1c1a1b47d565681dc6aa5cf74e34f412196d2fcfeab370c7a0304bb6219a3ee3e74b5829bce4d764ac1564cdc563f9d6e60702d82d74fcad7ebdf0e01797d08806d14fb02a77a50d67a5839671d1a9df0f127373eb5148fdbd6275759055272bb8f2f8bd65cd41f8ae4b1caf78e374e97b9ee75738ad0c426dfd6dfec78a4fd2989337f49cc2c92ea9a87098d1daa659497e066b4780e11aa715a98317495175238ec51d78a7bc9849ac95c96f3a80ebd6d35cb64a4477820359b02c16041bc03db1fcd7a692d78ec79ce806f18325615311893ce252cfbf4e4b61df79f6052d3a45ac2e7ec0efd59ac5949bd31f51e188a68a5cdc2820d58d333ef13d5f95ca1f47200405a32cb7556d8ba31448d51c443d969da1413b784fec1ffa05c768b2504b7d51b69de9a28c93898a1eb18916b531e92e0f4a9a7fc8cd1bf2e82e839cd7dffd1f2a67e09f26ac1125e7c006aa9135d5b61daf02c6dd59c67f2c2a378e8532b7b20577fa140f5ef16e7fcfb5346500541cbed24cfa378bc288514b151a5c12eb0e57c4f0b498ea3bffb32adee64d46007369f2d0e3a572eb5ff2a864a7646bb3ea5fe403ebbea9d45e83ec915e4fe9a6577c0627871d76bb0dd613f5aa295c92d23795ace3c94d081b6c5bc3a0cedd138f521d0eadf4fb7d9e18e998e5e4ed11e6b98b6efa07714df87e8984098bb71a2da50d4b734dd59492e798e60e22fd18bd74b6e2d4c8564e66e97c6c988ee969667efba1200d4402463f9e3978c4b42b73b193d09bfae1d4a0b96aa171232d84a8d605027e1af6934d9a499f48ca1d50ec473b8a512587970806e92509b801969afe61579425902a02d8759b8a5cbfcd24edc6fef0144ff503dd7f620a551d87582f23ddc806c1a95214d9f8553047887f7f3014a37e3b5a492c720be0b6fb3c78f9d9b49d9d8d23d63a8f9b03df531d343b0d69c607750ba8f9f3ada48845c61c6dc6b15ab551c124fd143f117d33c215c76073f6c5549955fb7a35104766a600fffcaf241ced4269978ec709ba0630bbb979c76080ecdb38e35ab672fdb462a65ab5578668e09083118d4bcfa62844f2943ee18854d1a9f0da2705a7e802c8f8257eb8a2df1fa2576bd897b214313de3b61a45cbbff6caf93353eb4dd1b3535327f86d915a78cebe996dcba88f0555f29a2b36c1e5908b359958d1e3ee8e7d6491dcf5e9641c05e699e119f1b5e6b36a016a771426e9a17c0aa3be45aac02011e99b75b466799fc2ccba9e104fb2f951eeb2743853dffdd5b646811c8c9e7bb4edc0a9108609bc7f88a5519e7670748a7a28719ee1167939452b54fc7966b0f2e5f20d15ac6189710449d234388d5d93c7fe7edeccf225168ef594a689797842a0ccbfa728a96a23cf73be886d09dc4187fa7fdeac867e3202636110f7d8ec41e5e289bc184116e42693c224a4e58e63a2425ffab9310ab33464160d452ed66f55de6d4f99e7908a17437573bf7c39e28e43d316b17b3520a461c8636061e9bd6ad6d34879485088b805ad38f85e58877d8e7c03eab7c135a03a6457f2d63ef36873dc343a6ae76b1bb6effbfa6988b952029f36007557412b8d853bb373043e16ee86a731fd85fc3044d301511a169b8ef20837159824182d01a1f0e1be0eeeb62521ad8f70849678f290feb1840030f43d52bf15447d1dc7c90d7622774ca2bc344d91d5fc47de1f1712ae3d21be171ced15c8173a3bf72ec2bac349bf127b0ae15be68c1cd3d3d880e01b7c943e9d96032d38505e06623dace7114a2a6ba074bdf0b32c8eb290babeaef1a1511e2c3c1d2ceef32aec632d266f6f3ae46be5b973743509f5344ab200d631006eca462989c7a1142ed66d6a5abbb08a6cf3f06e15a510ea8273b669b9c143aefa6a1dace5f5f4919aace2a2b88628f97c2f3e63e36d52c3e2a85194290e344c10085eacef1cedf50423c0cd2a1619120d1c9284e17a3a7d0f61fb7dfdfa7bafc2832db7fd470c7286ae050b61a0d3998cfbfdd3de8fe101cfeafd7028b4fac627bf9f073c6bb12f39f52b56e058d36f2cba8cb41a9709d5d2392edc94e9f17e284d78752886d5b3e3a10bbe9caef9f304eca3f173c8a9cb352093e0bee535f07a2f6db765314b1b7588da16d64f3044e46748be0de84cd30593b6e78a79a7d22a73a6014b5d3cd1955283ced7c4d2310f83f4c2bf954b53999faa1ee10a3969947b604fa0decd5adb5094fe69e839df0af51d15525cff0ba27b27b83f244c1a9b99c6a158363151ec194cd282365c49a60914ce69440a8da952225494fe14198d489804f275c9e0e14d5c1746d214a6f412f9134e25e58c1c6afa17f1c9b26beb6b1f0707d5ea770a577d67c03021b42779e1165f7834899ec89e3ce54cca7c80a78c5a7175dd56186ed07f90de870431bb715a88efa6bf886e91e131f24244d7c4796a7645c63875a21310bb360f2ecfb995e7a397a09a30e7ee5fb3757386cbfd7f98617071937db730375eac91d6ca4dff53d1e59f45d51648baf0998e9111e7d5dd4df503a659291a3014db939eff1688da613eba351743e29f62072770e571f1b592a1703cdf01ce1694573c293f1bb501270dedf8b48d4a84a3df4b7bdebc620c461e86bd87c426998b9c0fce0d3524f0e2528595220f79295833979927b0ce89869c91186f40207a6dce9925d24f9714ab422050cc5f0d9087fd62d9e62f6597f893e9cdff893dcec346612a655d25b98cf1dd91e3ca8c2348a227eb66b2b072e5b2b5f6475b2d5468ac04f61872a3407cbf17b9145151838929eb74363731bd08b492b5949f76f9758eca109a050293948a55fe64ec787e8ceb5317cc780608d69b62a4df84afd1dfa64485b74e17cc94f8115816bec7a825ac05864b8c534af0912680768c7183a4fddc3a262045d4029f80226eb3a2dd8abf89f866fa79f577fb02abb18ac150c2b04a967e1753e5e1031a4f45d9ca957b8f2d08043190c106d18654ec099a4f09b8b226b46cc4eed9c6e6ecde7c6c01d2c27c63bf06ac94400b3b6fc3f5e6be0571a1144f7671b128bdc8c0fe259c7f1a59a98d400bde030805236ee42df887538b0021fdaac0a7d5027eb3c93d0bd8fd03b0a39497d43d0b8a7040ef2c4255dfa1bac162fb39e55eef2c86042aa0de59dcbadcf9e041646d82001fbdcdad32d4e46fe9a04ed227d97652ec3fd49a73fafedb5fd7f34fa32c795e11c192dd3b8ba345613988b6164463feb5041201003eff1f53adaa56788e0bd6b8eb7a611409199d9e40ee56689a714f532dfc65dec036a8da609df4eb08bfc4a21e7e4de672dcf33392b1f1325588dbaf99caa8a79f45d852fbb26c1af84eb7e0c420ba50cc856df1412829711bfad72328c069b7eb1292a8c4660e843e31787396f260b24d5c5e5fd45ed6709239c2ece02d136faee3e945fa2d81b93414075ceea0767731b535768e925c3778f0360f4e9c43d92af28958285ed2a74bc7720a9a3db155a701fcfac7df6163feb8762ca6a207b84cfb8ac5b11d26c413c725872045068f2f165f16ef654ba1c466c7b16aa54e46bb6a69ba554bd3afdaa741d835386e9265996d99aac9d9b1a35d8283719fbc9c928ea34830f115abc30354c604eaa999bd5768d58241caf7c2ca0694da2cd0cc846f9566393f624571790966fbe78082201c592fbc04c02c5066d04ef7994eb28d52fb1b1514502259a21825d1d65345554de97beda8a48b8906e771f0564f9e95643f5d1b35fe8b3957072dd20c41045a6fcb9b957925d9f15571429efc0119a352a59667fac7c8037a491cf3bb745afd00a0ed95cb5461424c8b8cde42cdae64de386138a3fa854c86f02c135808f3619921ac25b375431573fa42f68042ecb1021b9a5eefef21093f1e6f20b16fe454d9f23936839f849873c6af3ebc31b108ffc8176e5a739f4bd5daf13d736489a5599605493e8fb9b0679e150b9db1adfbf60850cdd742f41c24b140c4898d84ff3f2781847f04e119e8273eaf51b49d32752c38f0ad8cda2bd52c7a49259aed8ed2c64b99f9290acc9395f40bd9d7470a19980dcd0dd032b2cba8874b5833e3f088d6f96f9d8044d2e44d6f34e9df5bdb8b179ae8cfcce89e79155a9fea2cbb4fffe316d89d3776fd4cbccaa5c268ead0cb46014e3a8a8bca70e61497acc6b8310ce35692bf638be374bb1b365e4e86d28e28f1c32b42f3fc80eda63f5cc9e85f21c7cbb37e268a6bba91c6dca029757d87fed079d08984a0bbcc6a4b489e147df75b136bb502321799ecfd1da335ce33c97e262eba4a06572f9782136069fa006d4c5a33103871968906c3348ed78d3f025b59e13b70440d218fbaa96e8c8bd6d8b1441200b10648ac77305b5a0645cd2036ae8eebf760089de8d480a3c3106baea753d1c6f76039db4ea53b77e3c2ecf85e8766013eb8985d4404006533c0ea8ba0213004ef3518ba5b3861c8240110f46935f67082f9371a1dee67a73002d85f88326a91e5625192f55016c411d4e99882119e600a27c0051b427f27cc1bce45e6a601459def4e4972f252818b1a85574badadf8fed808ce1663ae37f8ee26725fe90c5391314bf3280983d5eb31205906d52ecdc8eeff9a09fc6008e10a254a4a400f3736214606ff2a0aa7ce5a1f0d79834d166fad3c368726db03a8ff1d8ff26b1277957c3e9de5189eecf4914bdbf54595dfa9b512b7aeb15f286d9a46a3a561188bcb05637f16b7eed74cffabe0b2f4c46bed7c6e8cd7dabc15142d71778860424b74a0e9c75376513216c9bac59aac20741f51f63ed2cff097eb5dfd698306287d7ce25dd02d8b8837e2cca3c1db0cc3355bf696fcf301866e812c84631e545d596b8ae35872ed978f9684c13a30d88a497c9775fe1a5d8130fb38e722ecc3809f5418047a103d7e0be4df4d9a00f9af2d0c794c4ea95b5b4ec026402bfcf6cc9906033be7169b2f1d96c3ccde69ccb7a5f34c5fbd7e9a6fbc5a67c19af8f3b63e9081318d1cc148f3c46c0644861bec34df2a7538d2c14b48c7e472f434610799fa546d6567ab09064bd51a9951d0020b7f5c8966463cae044f7911b8661a0716da320ac52a44f5d25e358bd4b15b3c99c0cda78c1544b8e8b0a5e443bab21dc79752ffd8a75205c98c249c040a8378cde75c345db310fcd4262e09403af4c66c9e03068fadb2bb4b20f623803251d11d1925569fab6a8042410be4096484cc1a2248f5ec33142ba426309bd81b5f6775be507e0dd3faf7156139d5088a358110e6bb181abf8ce3bf5ed479814ef07258d669d3384d9bafd2dc29dbdb351830d4bfde1a766297eb8f0e62f195468ad576d6444b5e7cfbaf7fb114d6b99e35cc77b144c7a50cb092230f9052d273094fd9a422beb7c935d00caee75ee0e7b04d32d5b8aa86d32f1ff778d433ee9f650bbed0a8086798f8d6c01c0751bfd252c6921c52d30e6cf1f9f84adac4e474c2b202063eb41b58578c046452381b4f101813945243ba22a333fa1f83fae8ef057b0a55644f88a34edcd400af8be20c12906ceaecbe79e57dd0287997c999a20058843a5d53e624108a393a303de50ad2ff84e24567aa8bb75d4873b55222f0a6582747d440c463cb17c909c4b1ed925b240f926833fea8f45c3f6892cbce53362043e7bec62f6caac42f04ed830feee2367a104f1598e65dc0dd5699fc1d2420aeefbbb1693c031bc2567e2783fae561ad6e0b2eb97b3c6274075979377b0b86e061250b0e1c85238b51e328f738d9d44310268442ef85a073f9fe37977f2440d41b8040b07c8d43e45298a8cd7b5f529bbc6f4a12e12194bc09d8d6d393fd9c74487584750e5042d795c149966ee6097ee29467edb4c59c4033c9c0c15ecae43c48048213b1116ef3880b73c2850801c1338e1901ac09ed5d4e9d19e2e123cd5fbd9b8f4a2cca38748da5d8f3b9f60b5bf4c749453008922086cb4abeb841a53de18217927d03c4b629bce52c09367defadfe9f5e321d933f6092974474dda4a660f6d76de389a379422ffa3e023da8b6a2c629095d1c8968533257f152980f68034f297b96a111838cf39cd53c47f942c292ab626596ce5b68c8a82228dd2ab8fb8ef2a204750f20d1a273bac497b421c9707846c80769fc0035c82acd289ae895895ccef879da8bee92e14b8da03f258222106badc2404fa10a67376ec7b5220f9c3cb362b1c9d4a0f9c9b85101e590f9d7f1924185256785e86105f903e74818a2acdd6dfeac7a71aa06f4e4172a752cd3dbb41e6b0457c22a358dbc347cc580d58230d3cfae6dbab3bfeb47e466fb0a08cc1eaa8f56d4247b285a60d1e83015abbbc6d516bc1add5893e38a2bf696bf1551f08253ed08bfef12fd5a057eeb0d9891daf13047e2f752c3a954a27c6713c366140eee92cb7db29f0b551070ed68466eda856232807aeda6c9576ba0520992ada2bd8ea403694f1bb82e7854f40f8e519412b1aa607c2aed00a1a415445a428da8a87fdc50f8556b45f491326b3eaf7acea7747ac514a7b505ce5c762cbdf8ef44dc0506503b26d42f4fa0eee5703326135ae2d998e8a953da72f75ab91e3ec3bf89de990e98e4af8c59de84a1fc93db35fa9c82c9a2df6d534c06549e5f1a69f6b43502f08d65c44d7485c37f33a6edd7bc0742d82b280a01015a39152a43a55589693bb5864e23b08b4cd58d5b02aac6cf2f1e60b897dc363234504de74144b276279ae7a837aa11dd5314afc76ac781139828da94e474f7200885dc0cb928d57656f83321f6257922b341990ba8ce938184f48dfd625f9be5044061e8b1f68be419fb8d10dab8381472ff840c97bc3b747e7e218e9480a8aa77a0402638ee64b50d1c029b85347d3fc6d8ef76f0cd94872a0cb9ad6b253ea86fcd519199905c6c5f352015bc38a99521e327c8240f8cede8358fce404138d7670f5ec7ccc67d1460021156f919187399585ce01fed32db4fd6c4a199a8de09cce993883fc8be3db193edae7be7deef4c2d85e61acb1f61ee58b2cc34ee4288139c1914b6962651bc22378ec68985e1d55173fc70b1cb61c6d54ee7352aebf93dc3ec69258a93e2f15639557a358b83092b63b3d0c9075d472620c3cd9de98ac538638cfac250d2a832c36e46f79c7ab0a42277029d8407304524bdb145d970d182fbf9bf8df9acf0ffe74f86e9d7667562bddd56dc77685716c709ab7141fff177861cb18ad52e5b8f329749b117247c26fecd9d014ce4004993b419422ac915692c820dcd4012ca69e147c0a1909e9ab0f156892345fe8314439ff85f02e4dacbd6f395806d54d0594484618297f556f5be14c5c6d12cd10c9c87d584bba7394b536e0ac2cfe342a265db7a18f945a708b75a244f9453b7afca969cd7536d852627d63116577a63e5f8f53ad02de048b2bf7070c53ca97ecbed2ca9ad4c4daa505877d2ec0147f77e374c96b3eca1d5663769ad9e71293bae7c2541b6176b557c15372bf9e8e795addb3c3b3bfea44ffb937d3813f2211fac3caf763f614011b7231a3244ef472016b7d6723e26683a7448dd03b96b580d44b03a29743ebff76282873274c5102613081120498dfc44470dff5047154aad08edf077c8fa26250b8513ad00450ab0d84e0ae8f771554e00819bc4fd153684281716f1bfc93cf51fbd27ef8244a43fb45966e9b766611c229eaaec219823c2090d8710f1eb2090a23fc427f7acdc61f415ab86687364a602feb6af6fc8dc47c7989946a02055cb186934f497f04e06360f4fa5294a99412ec86b566cb53149009eb67953fcfa9999edc124d2cc287465da746c43b9effe464cd6f4b51c98f8395c00c92bd3dc9ed99d1416ad57a5a4a47c8d8dc3179105fe23af4429a3e6075c633181c18c07ff4fbe0264df6263e95e518f923fc93e86f2377111fcd4bd80a0dd09a3d985a9fe65cfd12c777cca039c2c3ffba120f9aafac6576c6921ae763795da2fe9d51d4a219285a12bd20bc6652eb8c25c0048b48139bc11b6e2fb65ac0e7d360ebe4609000d3395e61e3e0d8897af8462e596b75a28345a00371c2111312fbe34adaad125e75a49cc620588fde8c2a6c03054916f47ba5d3ffa878a127b4f772dc2fe851ed7041627e3a078039542cb89a2f73c9ed5ad484639b27f887dc235c2561cdcac2c20e99845d7d1ab4761e9c1aed19c6fbeb23d4394ae3bfacc13ed2176a2ba4684106b3153187c773e9dcf2be4a98bf8fdd63b25ecea843f3d9ebcd3e15f961581f4e69850a75551d3883e8993459db64638e3d6444d7986f45fcf18d2b011990f020bf51a78808b812866fff339a5e6ca0d0b3d47f3af89e56df7ec9774f847fa6b8b3c1e15b44690b50d4ca563edae422c350f4889167df019616753fda91bdfc4700f02cdf1249767ea4a3a12c82fcf50681364e69663246be37df4ad1afe6998d24081913434b1742eb3ed4aa34054931d6672cbb1963d16ec929c84f2fcb243d21d4d1241a802db4f5d9df145f9609fe7e7f9588dac1a5419f3d94727727b9c3becbb47989187c0321089acc41134fd183e5dd2cc669e06d036132d086120b3a4d27c2f919da0c044af35e9647a868d9c8b10ee358ca784899419d7e6509a615e921ad28022fd9e75fd278bd68927abfd64aae8f81f0a3a187dedb115edc325d8813040ca9622520933fae4e160541f717462bd34161645c85329e98954766b10fef9e866f4790e031e1eaf90c0b5507b8514dee36d4b68116f095bb7523af69aac48c41e2c7bc1159f1431a6afa984db0f94897f1389ad75469a44a9cbd44104f61f6d7304e77f1dbfce71e35dbb405ae2d9b76582f41485d2d423b5322fdaaf52325109361310fca53aa5108a7c3712cb0e43cbef287bb6691cbf458fbb5a7d6075c13ca79c43ebe1d6b767df198f1627451507e99bb16712f4af79e8a5574d9ed5e97a767d6ac6117626f5660875ac2cbee60d54d8e8f2e37d4102f82dd948629f09443a6fc404e3c6644874d79fbb4e859ee4c06b9caf433d7842ff0a3a2a435b2b4af7b606f3810fd298b9a2d97642770f47980c7e80f5beb59d0b5ca7a07ad21f25674d04c2552072cd034c0635a3df391db53c270908ad59457f718107115c2193572199a777054ef710961d64dadf3f44bfecccc12a8aafe073085098527d93f7032c45203dda1f2f6fa313ac1a0c336900f043ded733c4b54279b68c30809f6537b0c4fa7d9041160967842e7b7a98deaeb8a08e7d28ae3775dec32472f4b82cd1c2ad902a5dc2d6815f7fe024134b7b3c0e4727a214976ad1df75ec1ba749d6c2b4a78d15d423542ea56f1fede80815051b703a29e23bf87f90627f9f320e64aaa5d94adbbce98648303211f1510803e6f95bcd9f17b18e8ac82ab5bcc629ec47e98c0088ab1aa10d28d952f07a045cfb30ce1627e991784fc37bff54c6c95f7922b8ea4eb164f466a6006957684969fa1546662ad8b43d6e70b4f79f55f1689647605e00dba379f37952ca94bee682768962a03ca9a7a552f3cd86d523da4a09f973b3bd98b6dd05e1c6b50616eb1d2d846aaffb7091515c882c3526a7739893907df363cc55c7bc3915b3dd6e0bf8fffd626266052bd63bfb7a1c927aa793ee542ebe60b2eb9104c4d12903953269b539325925e9e516ec5ccef9456d6d0c5ec04d06ea541ebcfdc66a095bb034e934f046bb20c1dd7e1f96b72ea51f9b7e97270ddfce983a519c513f7d13f642083c7f53d346db430b56e05f642a1cac74109d7cd326975dc6f4ea14c41fa8e11fa73b5ad60a631bcf3b71b0403ef68bacb388fad9a50c58225d79909f2505a9ebe372c50d7077730fe93263dd709c8414ed6313514409f6a338e02e85243f0a5a064a913d8458ec35f2ba75a6163540798d4b1fe2b0f851b28ae12fbb022f7095245ebaf70d08e80d6c7f72a12cdf4566375606af479e01ff4402e9c924146a3ccbaf5f19ac2c4c4a58fa753396658c435c8c06239e12d98b4ca370ab78f528d9f1f40965de9d7b0762a774e4e061e3d71188acb5382fc7fbb2585d5a16ee5ad61b2f4ddb221f319492710b44a7641353f0984eae35b79bfb828f29216ad978e605b24cffc86d380a7e9dd3e46351918d3f499b04ae2b43f5b2e47397ff5e0191c954fb02710cef75015a09e348f5bc6dc2f095db172e8a78f737c77551aaefdcb278f8a5e71f8b14f7d57af1597ce26cffbeeece632b838f028fdf7c469dd605ceff52063f28ab4f46026379e5249a270612e5c7b367327eea3ce909bb25f13262736b5f8041064f346372a761dcc6e63af8ae2aa906d7faceec34d139f1b39add12f4d91dc7614e76ffee681b2dd3f9e8b6163a6b450b75d91fc5a3ffa93754541a5feac3fa60bc1b945fac070d24651e4662716845ecdd4cdf0c469f6952cc5e29fbc23543e83049ec307c1bef711fbe9dd52334de40abec1a786d74aa5f6717acc5fd93b6741e915d5ec24a3f64e13498a22cfd0350cb83521fa38fbde3393b544a9f474b5341473bff7288c3440eba4f63b404bbc1d9829fcf75def1de5559892d868db80d5ffcf2dcf05346a9c55524d23b17c30b7cdc4d4021a24186f43d929fa34553c9c5e3957535acb199e9d8cdfdcb6a89c71c9fa4148f90bbb353e68c10ed6f7d293103b056a438bd5dd1f2c9e6d40ed908ec54d693a7a3da2861ff5e00e9484adbbb03fd755c3484a55f5851c3653f3ecc3cc8836a28bc9b5346cb6a8f28103a7904038e55a473dc7fd3354e43adf2b856314769ebb2cbced51dc1a124252fb7a735e3ebe614a1f6798fa9e05b4c76df64778a5d102a794b850fdf74a00637eaeb6987d4be2be86b6d8bc7409754f9c20048deb29298360267d43662a9d293abf4ed72f83ee321cb0168b44d145d107f126b1f0d09ff4bcb91d38f171b8eabbe367f4805eb98c7e1612004f422e81c061e0a253c07b8c976b45d8b9e0ad5dbf185f482ab51b622866d90482cb285bb6df468dd8d4de8f6137d7993e1d30e4263061cd7ba01e5001cc5bb79703d35166a4d61cf0d3f8d71c4a632cd57f9c34f90660ab8e9027fdc800a4570e56904d10a237371fbb544549603811213ed6d5dccef0fef161164e30097e1d219ddfafe9b52cf80f3306331af9a71666e5badfd8f08ef29a4367f446cd222e7971094130726a64a3f3b6f968ea22036f7dd13231b44bcd9219e29e79e08d210c41aefa60885f505a8a837d4c142b7fa83f291d6b754698845936ce377e7ca4e2b780b6ec1f4518723b0f55ba0e08e604ff5fbf3fcbc0d392bab52173c273d07f8cf7ec0b497c13dcccf368927b4f9a43d5b33a9853bb295a3c60523cd7ad526765d1bda09e822aa579943b4f4dfcd0f9e57343bd8e0a046a450716b3ef380117e6612a197b5193fe7311ad01f5980b3a2d2402cebae285a7b26d8eed208017fd395345b2b98ad7425fd9e5702f47b456ceb45ae3d54ea6d2a3a2d9b5d17df110ac66479d870c3ddfe75d852b43e0289427a616aea845a4e1d7cdae88a39633af13e0042a2afe85d83671e8dcb13bfa1b1311e50b45801e28d6d7c929e3e68be580d687fec14ec6539b749a4346e3eabcaf5acaca5bdaff621cc05e604121a753727710d3008b253b3355927ec0b52f51c896e138bc46012d7f1803b0315be7d405156277b42147e0e6419eb85a73ccad2eb4d6bd19b21cabec393ef6630c5bdd418fbaa922de70804dc0ef19d740354eb9432fe9e7cd763e90f069bc03d79e1f625686fdb52a7eaee21575bdce5e79096f95196faa255e59f1dfe37ee82aba39056eddabef0093e0cfe5467e52c1351cd030529973a1e88e29e43b83a6d6413184edf755dce789faac938aaebf09441e74bdd7b040a3f030b9f6f45eae9ae0eaa8b6e9a35ec2192caf7887c580d1981e19d5b2401910ef4ba6dc7beb6aa15bf5f90c235443122b3bc7aac80840bd72ad7c5a73e408e7d276ae8271d6ea298f8f57673d16783b7bbae9c6b1cd1fa72e38beb91a4835a7feb3380858990e46f161005629641ab237f12946593404d161c9f3bcf3c8ce3570142fa4939d7ac18f325e3bbe07a887484bb3170afbae3d918d494550016cf24a114f885927df2e25586043b9e96a5b7bdbcbbabc78803ee24bd7b4568b097f2c09301076cae1505d38f3bd7f01deddf882f9a6df16223f7c0b7939e932636c2f210b141da44585567de680d16d3133793a4904feb424c2016ed8332e4c364d9e6b1fb48621c38178dbb8e30360d0248060288ddd5adb29f1ec5668db92841c9c859537b52c05bfcadddffd45755dff5a30283938ed626c8f0b0994556a56413b03f50c8be2d86c0e3189a90665d7190458930f93c16750a0f64eb8b452bb9410ffb90230dfa9dea4c8a5aeb8f13630c7f3cf96995e8605df4ab527bc2ea03be834f26b680cf28d23d583b117b0a5209af2bdf2aa7dbc27d4d659462003b1c21005c0a334aebf3ca84e560fbf53993b2500942dabb4a5fc45a5314c14a0d2029241111bff1a99b131a05094d990060a4413e882bee5aef456a24469d88b68b89ebe66fdda67f0794b992847498b92aac130673c1e34c675849fd86102d21ea8b9f01468b70b148dbf13e156e8e9404641402fa810d505b30cc4a4a070ff9b1f4eeba4974c10412dd9b42cef4164c2008296c2608b73dac01090b81757591d97b9f0e0b7a8bedd6e0ed6af85741c1248ab613add39c383527568c3cbb926b4fde41f0517a9e9e2f09217b6fb2b79452ca9402cb04a504fa040fda5f7d67302fe5f93d3ce41e3944e6799f9f2f8d8093e7cf97a1e83ba1e879e7feeb2545863c9fc7c9ac4954f56a8eb9bd5edcc91ccbc6058167dbc95c087c42903bcacac1f33edfb12870bb4c5f64bdb4c1b1e6b368c88d95a3e759dfd9fa1669e7e7bb786ddcaf3c3c7876dfcaaf9d106424fa3b12f82639fc00c51451aa30196d2c1c5cdede7a9beb5da1b8ca62fd9d9e505cd9559e2c1b23c8df8babdc8d207758a44fffb2b0b8caf529d244aa3f822c99f2f6148baeafbf05c9df5fa7fcbd6d0295b7ed59eff584f469f8e25921d28bde60b5d5a07f7fd5855c08e670bdcfbbdee7bdcaa20f7b8a641fc9f52ceebb900bedd3975344a2dfffbdc5200cd750caad0771f4bceb7bdef5ae8ff3097b7c42fb1f7d185f438b91be7f9e5fb122f07a1ad3939f4ff87db34268a3184ab9f52680f12b78ef4634e68b1086f47d679e10e97b6f071781395cf807237dd81da024a5040e50aaac072849b1b17dfda649b94709f24a29cfce7b1e36afde5b7dcfc3e61d5b52e6def5f5d881415e7d7b25c85c87574a99c3627dcb7d15cb98ed3bdc55eef1e909891d267754189930b94bc12448ee91081988728f4348652119a2d0cba20cc912cd903b821c3aeafc1dcc21685cf15a842b3b93e5fff84495e5d3ef0b02875cff1c89f7f414cb3d3e313d9d004a9d9fdc23143023942532728f4fb4c83d3e41e341eef109922728e099e3a635f53d51a5e5a4079e18c6225680d126c696d18993fc82e51e9d30e518e091eb2fd286f9bce879f1b880d1b23fbcef95696e56bf86bcce20789dfb47bc3f955c09c50293dcf93d69aeca3bb67c820b96cb9bac136c36c1a7f2095f76137c96777c90fd67cec27167d9fff3305c05e20927aaec493373b28499a1b4cd647aa4c3b72f5a0688322c11ae08c3410cc9f2633fad86f21a03cf7f4a8ed389da509d966c9c8d0d27b59ad239793f005932e49b62890cceba608e94b5c84c25809b0370d531d7c340f58b7045d8ebe554963ff09025d72eba2e9e062eeef1f7f6b129ce967b6caa1a9bc43445f58fb1094a6a6c927ec3db1e23cead6fae0883c57e3ee58434cd60b1ed25651b9b0b8b8db06dc003ae00cfdb97c00385ad695452957b4c32271b20f79864895caba5d473b362c4b9b33afe62b8b9e2d57144015780e7fa236cc00372487e4d32de215e4ba417adafe3ac0a18b835069a0bd45a636c71abaadcb0a16e68950f77a23654a772f727e31c743f0dddc9c948e9dce775b5f67725165f302bfe7450b65814726bed0bf947cd5c91662afe644ae57f6f43fef74a990b452a23dbce7e40465e61eac639a09ba5513cd98641e0b89594527253ceed7db33c2ad4ff78c794565e978e8c499c8c48d4c8a8a26c9abaa155b4aa4ae765dc54dcaefb2973c59f4c4519148b304abfabb99b1ecca7ff490fe4533ae459098630dfd552613eeb5590dfc24ad90b45ca0ac5ee2df7cdb2d1fdca0bdd29774e666eb693148dd73f9e277a58fcc9dec7e450ebebe4bec232f75c0caa2b06e5faab0f1272f1d5c5d79ff17d3ce1f7ae56f871a1e8fd7ceec3a2f7f63d4f28f9c6b35fc67f93d967ecf8a04e1d3ad92bcaa252903c579884a22cdec813237d8fb4713befee7af163854561772fd4fdabe726910b4b2c72138bdfe7f3b966493a06891797fd1d20d85fed10e1bb1972982a49c931b2920e79feaac5648bc5fa2250caf5eb98e983396620964b691919b2487395d288cb665d717777979387274186873142a040a5e9470c5bb030e1834c950b0e16413411f383cb911d52005a2133440e40ee918c12649218c12a0e95b7e7269184656f763dba77bd17f6683aea704fa0ed5ddf4386de3dfda3eea93cfa7ee224ffef59dfc277026d2f5eb973dfe73fa9e9e8c5cbdfbc3ff2f7bcf75fe123d8bb7092eb6158c704da1c27094da0ed77de07efe0241a13687b4f4afa09b4fd0bdc739be1f7ad9045bffb23bafaa4fbf457f868fe87933cc804da1c5f9c54c204ea7052d35137c341244e9a394e62bdc4234ca0ed935adf13887b17423cdf463de59bd10cdb88eb09939a74bc70921bdddf799ed045d8a3e9c8c3ddf7c8c0881d7cb13b4da06dfb0caa5cdc23a949026d54df7e1b75b847fd3612ddc9151ab13ef93e672a48f65ab66c190175d89f801bd5ffd95c4a536e4cc638856123276fb947313ce0e0d197028b1819a498ca20207d607e2f3924fec4ee77bf842e6f9804ffe9383a12baec5f14264e9612e903944c9308afafa8866133234b122899a659ee09054a018d00a314814f7ec0275d1a44a2a868dbc6314a868a4028dc0b8c97303ce455ee31cc540d70c2401581f192eb0b4945e5fa32aae7f2b7218136f27e6f9cd4a40327b991bfc781214c3c8119c2fced8f264e02e246132799c08de4aff0d20a1f18cd07e246f2392a698b46874b4254ee7cd97484939ac010fcfb8ffc1b2735d94fea09846de39f3ea728d43866c83885043c028c12187800f2b381c981851ff0898250acdc23982b609ec62f58c62f53be3ce5d7cd3d7e51b2e4b5f4dc4754a65eeba45d296d4a29ed9e5d69b79cf49372c7e49c03fff629e7d396dd32b7cc3ded5b1ad2ffe89cb427a5e00ad7e8400edc28edae3b66ae5d670d2c25c6f229eed92bf798dc3dc7fcd9c6657777777777b774c2a3df945399be94ae00d19f07e5c1e5ed5ffa9ca1fcb67572b6e3dc662a876aadb3f6dcde821bb802b9faa0ad74caea5e946008c8a7723bc22548ae4fbdaeb376dbecb66d9bddead3979fdb6ddb3ecf1e0eec529283c9d1af769625768f443fb95a25b9ab97489ea421d7bdf8a2944a19d2fcf261b5be2d84b9bceb12959e66b32c82d9b359deb009e32cd3e7d14549168e1967961b6a96297ee11ccc77d6cb3998df5664dad31bcc6f5610d75f7c79f3eb42cfafeea0fbb9fde6e26b39f4cad1f17c5b0802717df27cdbbdc16be69ed70baf7bf5dc59edfe057a67371a8adc831ce881abeec1da59ebd4521c9b97215daab2b322a0f414649645a024c56956633a9965ea348b33cb1d6e7dcec17cd0e93a930b9ef95ad1def9a8248249a0f9bd72cadfd36bb7cbdd7b57b7bbf77a9775bfdb3a6a8918c8222761b8284769d7d1aeebc2ced4eb3617e276df5236b1b4d6dacacaf1bdc5dcc8052ac36ce879a092dbbdd73d92f73db8fdb6d9ef40cb7db70a416f559da3f4abff61ffae06ce9e54f65eec9e7aef350b478729d73d7def914b55f6f02ad3708837e79c9c4b205c66f5674863360b049a44c5d58b76c56d7652c73205a00aa6832ab82ea59c4b8420912b5fd699003a9f86dc1c407f922bf95482a2922295dbc5cb014265bc96225cff1ea54cc9df065ebfec499ecf1931cbf3bf294e1de6df59a9f27c4e2afb2be7259c04c935a22bf71a1772b370d8bc0300b769781adc1d5e278b4ab9bf43ef270359bf2bc3afd5c886ef86610fceb9b5c7847f979a687d4ca5a418833b9f011ec7d91767b9afdc77398e7b6a69bde06ebfd454ed7f100b6aadb5d65aeb07552b67ec0abde0d5f00c82dbc6d1cafd0bd6db3637133c73cf6123ab495738c65d6aaabf5ad5caadaafd5ab9ca6df38707c3d3409b173ec852ca8ebd27839c5caf0f56bcc3f37c133ccfc746a6dc2265f61cf2e75bfac3c440c6384259e9cb2904f6e32365f78b23dc7309f0ea9fe6b87b1df3dca5a68aa9947d1201f363b32bffc9eb1fee76e267f173d7405d6f3083a46c7e8ce98a41797e90908ca2192ea09878353cefdcf93ddebd4d3dd75d6a92f33d9092c8256e5d4f80c7ba4d3d6be9675f84853113dc172c46ff2595f3bbf5979aa64bb982172372bb5bc3f36ac7e36ed3faac1a32dbffac8cb970c52fd7afa1099eeddb7723dbd390bedda5a6f9db5fcf51dd414bdfb15ff36fe1d9bbd4e41201f2873cdf3616042cdd36ce5bb6bc6511afabd62c65cf3116ae7f901cb2380cc544e04e80ebdf6ae66477281e9db7bfed37b299937b64c38600b947364ff947ca62295c31f6230bf22c3f2a43bd2095253662bfd2b047364e4680bc91c5f2a6e0f95d6a6aff6ed56e9965f6daa56c49e9366456b2ee64bcf61fe612a5eca016f703b7b8fe548a9e2bbe5ec39d544ad8cb6d95568074403a2f7ef793e14bcaa663f1cbb2d65a6b1d07ebd86af19469ac745d91e6986f7fb270d0b75894b5561c775a91530452c1cdaddeefe5c31269844449d3e44996628b3837ccc0020d30d815b268355476a626cda866cae9c6d929d57cb1639a2a3e8a04068b4d2d9e1659ab955cd55cc9550bb7bd728f6a8480d1d2bc4075430a56a298612452031237462d64ab06060d6c0a5adc90821caa36725ab8026631844e9a2ab67873fa547e851d10699aa8dc69a0b24f77e7bcd338a519d2d2db8b37e7194c375be994a31a36947280b33ef2fb732098024e13388c71820a22b5ce1b15eabca92255431146fddd01304a45700063c509ca943674684cd49a4061068a0c3c406d5a500519625763be4851f9c85eee11cd152ecac8fbc4f494a04f239a25f9858629bfa4cc5acbb21cf7f91cd1043963457e716ca6a0347853ba5bafee421e353d37cba32611652a72fd0a8b425894b12c16619ec451b8855b069b4f9926912c2a1292c99c26d0c34419848929cfa7715b944190fc7d963b8bfe729689929a1c474d208ff2b13ba03febcc679ee433a3c963cbd6caf759965bb61809048977749d2cff84ed47a671dba88d2a167bcc93c86772b23f15b72c5b4ebe21876e9c91ea1eba71464ccb3afb98c1d36d39b9b3d85af254b324074b9d19b08861349acf4d22252842ac89f2e2830ab240319a4d9edc2c81b3a52a89d17cd82452eac1c816467a8803a70d1546b3891f3268c9e20d0e2a3461a494430a5f842011851c2f3a18cd179a44181c71051152beac90c51aa309a64a881d84e41007093946d388931c105ecb3a35e5540a4669eef10c972cca2410a89e76c62ea594864cffcb22534a613748067526cb19a83b8bfcfc90a1f4a70c38459c334cbe806036334ee48ce1c02f677c38c3243671850a2a539c3863e60c0c5c9c0accc942c48920b6ecf0e5d2e1e836cd94214269862e638a1861a5c9941846336230a85814c952059322a844c1a40e38e6c7cc68060a2cdefe29e104470927374a388591827e53fc2818e6a353ea08129e7e48aeed394515993a63191f8af017351a6a3f34221a14b52c478cb54d480a121574e07282279e3ac045072955fc58d3c3134e744f461a4cad4d0d001f2d035a4b01a569c98a2751c6025a3731c50435c7814eed021a550c35315b6a3e6a31684fbed4d60480c60343ed8605d0c0d43ada0bd65acb516badb549e6d474a865510bd393009acf40eb363ee56f7c684fd41a0b3aad45cd862466d0b85f6129062159ac001243511935a30b678a6081c18d940b8a11d7d26ba4d0bc4b8fbe42cd4ccd4bad0791227a0833829912d56d96a65ad072c3111e82a8cae13e39e22ed8a8e2429228a46e58820509e81c5106cd922e41c4e0664d112a80aa751720da14354ba686009a2c008d4badad90c19146d4d48a6854d45c10608746c651d0522dd4064093b252eb2cbc507102275968b8220552d638611145992d3ebabcc1c289923a53b0e92da238124e55a7875a9176a2a72851bba276e5041fd09c0920352738352b6a4234166a1d270ca255188d6983ca467ed482a8722826876aad4f896c4d9e93326a297d5bab9b20b956cb24d75afbf5fa598588158b96424d06063423446a9ea59170c2a9b80a401880fa164578063e68a993840f383410c900902b3dcc8132c50526168830f282e64b5a8c16430e4053525353e3683e0880e658dccc973e62cc12b45a2f11a5444d01b40e68676a2e1a9b21b2a8c9a9c5a8a86d408341635283ba52bb34233aaa8adad398f0aa20b52ab534496a95e601adaf7029563f2cd1a6891b14cca9d2c6a7c9155a9288728592a7aa2c2e8638d2502815b1c589599337545af0c144448c152a43ea6059811b2bd95a21908034341ad0fa8d3739d268d2ec50dbe2a43644c3c2ab9873c6a3351617c2854a47e1296837338f424e5785f131bd825a990bb4ccb88089eeeeee6eefeeeeee6eef972127650405fdc84f02494ab76dce6dce39e79cdb86c54a6d8541bb2d6533beeeedd3974f8149e4bd2c61f55eb3386edb7cb6615b69d7e35155f69f3ae4d0c44e556be887a1c31567e4f9a247b9780b5e83177b9cd1809d9f8ffdcce027fe296b28f08b62415c31a8d3318942d8cff721ba039e9f7f631201c97e3e0a9328003f01b09235d454f22f3e062f1665d16d70ef57deea63514ed89eae7861fc7c0f4628faccabb32c7a54ac88cbbde85156c7f4eded46c3fb9243df5b1858ac98c796376c3f984f48830225a0902465331e174e3e4a99bf2bf4a9aec5020a6113480800e10813c85f83d0814c20ff9fd099dc090ec30f31b8c08218e8a52a88eaa7bdcc1b720372c8bad0c4126d72e77ecf5a77c7306877f5313ef6a247813fdfa71c8e053fedcbf94ec526cfbf61f1078aecc786b8625090908c22af92988d94cd50f892a46ca937f05f856e8394f9c7f139b1d08170de524a29250f51286f140529738f31b9d24dc8525e251fe9ba5226c9021ee0e2719368a9698b3a923726d10d96d0e73d8d16bdadef3923adb72dcc79486384b00453c993120a0b4819517fcffaf64ae80e6e6e59910574c8a12f06729bb548dbb7bc64eec51bb925bfd68e0b9e1ece0766dff517849c0f16b9cc4919c78385662c733f99dbfe7385226585620b7f58879471ab304608239c443246c4d654390e96d6033ed276999486eceeeea6ddddcdd16d16f1ec6f76d65ab1e4aeb4a9bc2dac75fb9893dbbdd871f2f7f9e37e0bc5fa9a9a42b8cdc6a25c91f319adb05893bb9ac3ad5e7150985244c82cd7e7f224eade06d0099b0c229b28ca48d5f3b8f945d9ca20da796bedc3fe47d63dbd6f77c296401cf7ac2f84853f212781b81f217bf4bf9abdefb04ccab80eff8ac35bdd3057a714df775dfdee0492ddb6fa9810dd0bc9289a715fbe2490f7d2fbaf4a4ac5f367ca3dae81ca0191f3a8f4ac9765352a19b211040000031500002010080544429148349c2b82b47d14800a87983e5a4895074371388ce21808820084611804411004011800421000318e889e07087096b0dd99a91011fb19661021d233b82963716cc38af17c28008e81cec1c8ff4c45eebab3585d7742a609951a49893e877738406461864488be2172356b181122d8cc13c2c9c1c5919d83cb41f18d781aa5b0cc8610c5992f880b07fbe71871cd6c462cc721d6d20cca44447d26583ec23196981967210787205cb3d114f0f3672e4144ac662ac5e638588d38fb2affba11967f4695908e436cc74cb2b8d81854137234e6581e193c7326df690ed1314c0ad1213cc5a8c8d65a73cbeffd617db8774576525b4634cc705b42cbcd1ca900db3a435d641b44bc01da7983301327d173f0d5ba669190971b298ea76da46543eca21979cbc8eb2caf249383c50de63435d23929e58823cd1b8bb49a8113a03b1277976602494433ed7056481cb171a61d9444729c30c5669f261c37beb891ac365271a0aae4a6a13d5c18197994264067ee3456c381b11c6e505c8f2bf3442b6323a10648e3ab1572869cc44ae0626de5f1f8c126c3cb08d14c5844be8d40409f0daf7cdf38b3258de70084f2acc82448edcc9028f44620e3337994c3e69e5d49f66832240ac76ec373106b5e5074142180cfd84900e99ec9aa006b3f9345d01ba3bf212237435de66d246c83e51c503b66060f22a263a62af71ce1822c77129343faa8015ff72ad083731c53217d2e7c829711475a0ef237443840bdd1bf0d3707b3728c9633832c966c406343cd1c02693d2bac080278f6a97438fc6d432cf60cf684d01c6377674a45e91c825cce2456840c32c3070924bbcc880ed55389cd520d92f07585248fb4484cc9896f24b03ef322ffda35f77fa21d23a4439d15456f30f95e70474f3bd35886aba83e949592f6c39969a1712d49c153beb6b34e43857f63eea3dfb36035373af9eee4e672a1381b40521841f92cc5c4269b68a5e1e1f50058592a1cf364c1175780f4e222267589758b1d1172f1ba43c19f17b03398bccee0486b0863b30f649c719244c4231d4012b4b651d7c960d8248d4d0cad917802e34e298440b0b3dcb74347d457d39c11b51ff1ae65d9b2178b3a424ce114e91bb9db089b3b336a09e47c064f3eb82122ea0cbf3c33c788f60c5332e5461d8efc1bd2df68e2b8d850d828fbc69843d4467c98e9a78d55ebbff0a73b4f3c11b1c0334f92dc365c69b4259e839636c4e266aeaa8cc867125f02113c330711c93d5315d5dd10ab339328b1b6018da3b90d4b0e048e96e1185b6ce641c2e518570ef0b7669a2522a9b3b611210e662e297f3d36833011f16fe62cbb1ce1c2318235338c22646a6643c8c0119679c6424424e40c9e8910ceccd54b88e86731e5d139c4ea66ae8c88d066868a681b1ee7106df4cc7988c8e6cca6e4b5e10b8eb170674c29a1cdccc48a057104123d737d4404cc36ad324f9c916bd1b3371147daf4e46823e969dbe4dda532279044b493c3512151238d69912a34793eea05a2a5a6e43b6cd7b408036a21f3e03ba3e697662844846166ba8878436ccdcc17e2651b3f8eaf6f64710c27c790e54c79513a87d89719c11391a059c792d3862b8da6c4e7a0c58658fc4cd5a48c1b440e328e626e407183bf8d2e1cac37707354b281c301fd46f337e8021911370515290373e4d46e5818e42cdab120b11ae0eb1d6eba077cc5685c8366ef336e795b036438e518fb2569fd13d88123d058b1114d10ba40a4c3f26487667293a051d5f193d65f2b8b0ce393b3ee82a4cc68c239f76abfe5a03b786406995dca0cf2a946f38c1acd7c206530b13b53097d479e8c88f3a84c4bdb30657dfbe691b015fb84a150f26aded060aa0e193d923e15c1ebb8b0e7629ae43821cf45b951172e53cc30074cdd8a9e85fe47ac2cbda7e954acd8262a2abee0b20c94cdd9f173442a322d203d1fa0cdc79c3dc83207bd0044219a8d194faf7c58098bd09ad568754b3c505cf3d4c30314ee074eed91fd4bb4c2d192bfdc96dcd6d58bebed043c556bd0ad5e25a096e9a667fdb0f2f2b8fd2c5a80a3cfa1d7266fadfef3c22b70ee1997ffb81730f061d0c19a6c3e943605045f79cdbb2e58303c8a6ae18fb8f4d47d798697c83362a0ea40f0dba7211e1de1cc113afb110969ade12f8b4ef9273858ba011a70594dda0c18129419326c2e7f610831fdbb26aef25f88df87ff11bafc145d705e9a9e46b92f207759fb7f3dc6d98002a0d96c081fd7c748d24a4be0ed7eaeb72a0a4fecd03b82c2bc9cba05fe023347a809916f09e6f5b34255d24423cbaec85f9e9aef30a3462e2b56d133aa3bc75f51aaa6f4a7d7a0172801f663fc25690470ea9efd1ee40d328c4cf616908ca1d37cec7f84d6b699ac7bf701d6091b94351374e1cef6ffb97231f48461f6c0cf901a41ee7765e92161700d84246bc2b105dbc44439b8a99787e1e63ee66339dd0bc47c9ba2d488fbdd5aa7d6460c70cbe12228eac35043c7d5aaacc30f7b0ff1548b75ea90c9df97ef46d92d0d9941c5930493ee94e4e21554d3b21e3acd4e4b57a86b5d29835a79b3fbed14d885859a815d4eeca86bf2f451cda44f21052710ab643a2e4b7590d53e50721d3e7004a0da3589ade8d8c44070da03c4cc3a4141dbe464a7d1b2b1e29e47e4e50cdaafea7e993a259bd35e7946a3f4a2b650879894baa08b61389a5d6a4a3d65c1c45ead7eb52ba5935c522875607292c50a81e1efe042541695810f550d2e578fc1bf5d825a3db4e850dd01d3725b4a6786cd257e84c21cbcea38381d29c8f1474521d579ea21aea764628abc365896860d9a4b8776c0809be1e133777d22ded197d94bd3328c2a21f345179ae1f81b3b0ff6414667faa0f4958b16bbee026b2ba1749b0d2d6a56c8dac85e7661a545ad1a09a3c9a327c4a23d21edc5b4a6bca3e0a92d6407562a2d0ff464e9bd5ce94311702513bdc6ad6d6aefa80c639a206596bf0c2ae25407ca6ab3f1abcc12f98597b7337d79e4cf9a42bd23cd4b995f0122d7218c8cb00f611ad3280d3b32e4ae01182bf285162f48d8b5f6d5e63e4786a334bc19ef46f539491568d014b733570b46cec57eb8c642c5cff8bcaf64bfa30cefcd2f4f496f82c0750d3ec0c9d13a87a77409722e79e0f789f3c066f46961eee7b837b3e51cb44f1847330b43a92f4926eb431bd32e077989b198aa705cb754b5342cfd798fa9ae52332ad8b858cfc25bc7aa44d66669fb80287d7a142cac268312cd46a731599a02788680afbbd74faab939c7ccf4713372ef3f274a79784a56c448b133f9ed92dc4f82c197f1d32ad2feccb94b6e34d407a8af18672452e8b5eab6442205f0dbeed9210a2501137b71550f635868753fcf8331039f561f7d2cf2bcaba9af1342146a4f377be8ebdf67aecc1e6097ad72cf6ad680ffc7185663559e6dde72eb885669a4cb694c96054efe35dc254b653f9187fa25dd729c2c25c7d1851a47b9f39e5fcd335f92be8c913b1aa6378a0b8953534961765834ddad8248dc5ea641b313bf566f3b29fd2998cf1c87c48fed56c43dab953d0978223e19bf505c5d046fb718709bc082f9e15aace00595945356931c187b9675ba296a50f981959a3cb9c11283647e2e1981e0055312ef1c0fac7ae0ac187e883950fb708f38a022e46fe3867d29fc75ce585f8ed16fcf49af3a0753477455474f0061b23269babab615905836ce1125003249e85ac04bd604105b0d7bb84f10080c14e4023cd296fa96d87ec4c224ed8b483916c4edc3d58c5aff682da2676f164dcc70adac854544dadeacc1f60ca0ec64446b565f4ac758533dc59d8db3c0c0851e72464ec6be59d9c758c440ead98d7e087cb34eb37d70d626f746ab9008e5f4e39a4652417f27b769960947c23c6ef9965980b36f7b9ad2c02bf53e96f7f02406706dd3f6576960140cf6e65183df3e44bc7ece2a933aece8390cc59e8072e16e2ce75f0bbab640d7ea59f77e70fb2604cfd8109e9835b149db65e50c0079eae1e2721fa5290eb866a9fea4b7e6cb87c2c0609888e5c10a4f03f49b1a8420e481f9fdf8a789d65e9b4dd3beea03f17371ba8a39905effff78cd9cca332084668c284fa8e847bcf385d6f1c9c0704bcc3e1c6c6ecc61e1cb1d42cfad49c2aba0245ab17c5b7b068557c169e632a54810d24c85fd0ff663070c0f64808357ed3cfdaaa12ea90ee85dc9d940cdc82d07e10320a560a7ae4a9d38ce220b7726c176d5ad42ebe0b3a408b9aad2d65593d44ad4554708d90ff141113551578960269527a40e5e182a1d88df58a69e3254b54aa7f0548ef4c4fdeec3ee88e56fb9490084f83f68ff0da1ae44f2394e917bfef2014c4f4577f4a4a28ae2cdcc9eb6352e1af656eee3353ac9787aeac67ec59cc5f612c48fb148e254256644f581729cfb718c2dab8915b54a1d483f7fd74638d77b340d7117a5ebbd17b88eea113f49cc3d61255a4433d091514a027586ee10ed161a207bc01adfdd89183c4922f16e576dacb410a6615ffc67ee1072ba28e4841ae41404d3a841f5232b32b6eacb13acde303507acc786baa1f55b41445c8c1fc7ba10068815e1d933687544cf47a5d5fc7edfeb0a6d48f20dde6cda453d1a9b53ac593e01962fb27cca61eb1925520018a5668497db2e8423441711069045eb3dc9b9aa7a9525afec0248138a6aca329d848745f534cdd716dd6c2a137a8f2390fcda328f1235597ed31ffd7dbec0278b9cfb7f9d5a2fb24ea061dbe08082894de1c36188889cb85078cb5df5bd1a7c5c89c65caaa72315321f6a80bcef86522ca9f4488e0e5d0991c5bb5b3320dfa2f8c9f81f5a7fa13814ed455ff4153cea38a78a31479de365be88326a263aa67fe3bc0156fa19552c00da1ea1216e976ac33318fc7ad05b45c5ba4aab22d2de3112f0b9eb45056e279e0da1848b247daae6a0887bf15a553aa2c9461117589d14525570e08224d2561af9a1c0561cd8d8cd4614fabad61625f7e5eba89631b3ab9ac2758dfb89312d8e867852388dd878bd366a8eab32b0f2ce4be7a400285ffee0c69739db235dd8b8888d5919690e1774d1a79fae993d959d280a4e2553b490a83e8e86b1a26612c87006112c4fa67fda2bd183eb5a962acae807ae66059cf5d52c8eb5c302880a29b719a5ada1da3689a18b23794b6c438425cb894a0fa2b417157915d576c1c08418c41b82e622eaa4823e2d95bde890ed537b6d0d8f44f2a313cb89b30653a14c0b676f89ae343dbd67a4446fc9e0683379f40ccbccc0926f4b6c78d854aa75a5698d4ae0f31a8fd48d9a3eb82496995c6274dfedbb0e8e899ae04a823106cb315b329401f544a089c26ca2248c2046ba01c47a350cd1e1f5f801a73ff6632f91e7be66d3375e35d971c31d83191cb8539278e1cbfc4978395764c9696dfd0f7468b6bf9df06adbbdca7795472bd119d2be1a667a47fb91d7a08896e33d420139c5063cba28f9c5f57e37eab5541e2fb9a952a284169a3e49ce54c7e06215c20637a7d5b94ea8a95106995096ea83f4c8180445b3fe9e426d8920a23bbb7443abcf0518c57c746189965941b8741492e009a9bbba5e85f75a9c1da497bedd0779cea1f94f59661245872116b0c3240c7f0c28dce80db161330b14038afec436ac2b81545f20d55e9fa1b404269372abd4180c7ca1685adfbf83bcb20295972f1d1352212c393e0ea120d223700fd86873010b647adb2e904067f87e72770531560a8ed977a8e5d06906eccbac9300b232ad7a057802a8cac703dd777a248dfb2b8ed9bca2cc5ea3e82ae4d0dc0d87b4eed6cd545a602563a072a348e5a66b47881cecba5708aceb46413156f2262a7eabd4a4a68f99d5e465160430296486f755ee5971a65fb362d48300b9d0a48333591b58259e6e38d871597f272ba7d63b858292687703914698cbc486ae1e38330185d616722125ef51a7a81eeb27045225b009d9b2eb511c0d94124ef18701185c91c399c449123655cf6ee3b6f1dcb5e2aa3c203846cf7cee1e30baa23dcfc56134ea50e89e567cf2c4e07f4bcfb674940757e26956bfb7a811abf803522b225054c44aaeeec98b5f5de82c377a975d480232f15c0991c6ffd30c3b77f3faa6935fde2488adb106c743f2a133f5c45746519c7502373153c1e18bb428a638d6946e7b544f983320565b2710f57f7b349d8aa7b10c29339df2771e07a81857252ed5198e1e56822d84df5dc6212d02e76a87f0b9b6a5f2f2705c32905e4c8dbb9c3562b1483f55eb3352d1a9af3f1b9b9ebbeb205b809ba8e1712901325d486ab1088a797e595d063a16b598e900cf7220c5aebc48daa667c30bb654900ae8626afd641951b07c6dd4f6411042d39086eae014dcae8952c1cf03c7b5cbd8630da58c2fc0dcc137ef28d8bd943a794c243b36effbd9bae696c1929b6d838da2650738a6897052ff0734e98c2e2211c424eb44ae82354b306aa75e783330c004933e55e79c66f9ff9b4d8eb6adb8bf957f89c8e664890dbae31e6ef7886508ebf3b33fa1c78298db9a5cc59d18547a5c005cba4ebf5b9a31929260988341da39b3f6035d6346e8cafeeb30ebb55a836927f54057095c32739bf1e6fa332eb257977bdd95f42e810b680a2c1ae445ecd5d24591c3086191c207d7c29bb9d57e6fe7f9a5797634c1eb338e9010fd2fceba5c52650316a1d0a995aea3ce871172e1f59557dccba85aed00a70842919b8d9406353625c30d41e8875eab2f1053c9edd107ecb901bc8f849e5439e0c6c0b7fa9e87a5425caa55618dd4f01152a8993cf6da0f669f53db979eca801242d2f874f30454ca3f41c58cfc1eb3ea265df52a3603add21629b6f420567c14bb792a969a4efff0d37d12b2290628d9bf0ef97f5c70bd55c13b2ad472db14f7ae3e893ebe9998d82285d8246fa59958529351bc58ac4f9b55dd95af97ac21b015feef5ef1e3a22c3386bb7e2ea4132d56b2693134572284d3635be66339657fb127d96c90158c22af1dce2e696a02b3a4f812d9ba574e656eeca85ae630e6f15e69a7cbe9e010ab7864965d15534d9a53bdc76cfd38b2e8c816f668806cd773faa13dcd7ea3731cee2e03b484012cc7e941cda2a538ab0c585a926d2f0bab71cf25530e70a631d7860991953888286fb9cb597e587e70d793954c7c13010ab3c9726cf3e2b087e9c619b956d334130c2aef71bd13ee9a806bff0364a8071ab4832455bec3a1027705a15aa4a919b406fc9da0ebfc67a89b6f063f5b282c5e235c8b7403d3a3f3b047b6ac0ace3c9cc8cec42af3e61ef06703de861bff39c56c8d987204977da346fe065bbe0304c1ae6033bbd41a651183fec6ed55f56aa6938694dce86b28f5bb86ecb769e15a5c1fcf9c571d828d8a5b4937fc0a33da9cfb045cbf3306f7ea5d951c1805e152f5ec358bd69b0bf082ae98988781e6d9b1d3596751a56a5440919a7906b1b81e72024660cabb97ccfe670d95b40a28c5f7d9f388a41a8def465d651abc236a18c4cb4949ee703f7cdb15d87ae238bda52fbabcceefa36c006d136ae0af0a48e2fc806006cbc3eb795f342c8d7ab3cbca83735924c44e0b7018b9a05e91712b5662ab2f2b5ccd5635c35c58e6f0307f5536c1677283fa912f845ccf61782b4416ad584211f108a043cde0f8c7b60635261b594d1272cda6e46453f36df86283e6f649806f31e365e193f8374d431721ddc3498fba8187c3b98f52e0444de4e6728a5f269a9b299c99c1ba8e83654268cee2e8ff130f5b066c83667c735d72ec4d15d87b42468a8dbd8ca7f2b90a1f33e917a806ac4a10037ac7f68c52cd05651f791c49941ce3b4b3bfbc9588e3f1e9430968a51614ba8208084b5388ed8e43d5542a923a33736b5bd56ab66ae2dd74975f038a7f06a2103cfe4951d10861668a2e504fa8458c0ec5ee3365188f4369bd7e2f3a7eed3609f8fc1d18bd477228fcf0bf49579444b73522919e55c3935e9bd193344d782d237da1a82c11f708f6160dc9a65c28325899814997f8106e0019c28e3c4009492a8f7c296a2fb14bf3acce3f135f84c29a0d8002fe78543dfc4813932ee0d70bbd271c8f853d98c63d31b34a4da1d08420264d536ec2508ba4bb5723903d49d87ae0f5e75c160a76a66c1d5a6a6a6bda4ca50cf3eefef9d21816e5451da157c323847b4e2cdf2a454e3c65e30301bb115efea5f1e1eb997b230b7d7822b83f19fd03c601373759dfe42e76118d3204f1e2b62f0eab25baa5b4e04049c574cd4a1ac217e24d98ab86c61b0e2725fe06af2f1e6c68482eb99492e2d57c3a7f47c0151480db14aa56ceffcff693b9b585c0ad4251bed21644d4ad98dd335b250d71378298c842453bc92a11c3cbc579e71ab42ff5caae14614e768fb59434b08e1a748dd9695f6850583e0e695c0b720d2c90c4a26b3c60d17e9868f4e28e1e9dda5de672982854331a1cd2e7cd354239381ac75a06bf56bfc0bb0513f3f1ff7f24cb8bd5cb65f9a1d1c3a2eb8f8a3900d02d50d56ea19cb07dede18c7db21b5ee6eb39592edee7f98441b008268dd75d7d1a657e848690f0984d964109e2d0ab246692fe69ad119d566cf0e911f85d4da6b8e1090e07e3408535619b651b6391b41cc262b1fc74446d9c1ddf08379300f7e338c7a6a906084182aa3a1d5047061fc7b93a20457f9907d374c67338d810c1269d13bdabf82e632897c76a986d4e2f5eb72e31309830e10157f332b9e9373c772e6ea533606735c41932d90caaa044fa9e667812ba67caeef801465f1061b41e6873e460702c1f293b0f11e615be6cb56f309c040247ad9720967efe39fe59a3c098c9866f926e5ee28b7dd2d3779b9ce553d859dbeb96611157252ee2a8e5e38af5ead72c913605fbe0e205102c9d1c4b1c34f319c571eb57c91bc5340200ab412ab16144fe7a0c618e940895732fdf587841d20e906a585d96041d75654e809ca63152308eab23f892987b1680b835d6eb67811aba3f23f9dabf7e75572a014282ac7124372e86a07e5355447e9174d7d18da5f62417f66ed9f388cc69d6db6c2c7f941c45e84b8f1f02443b92f6731a1b7284b66a5994fb33087ea167d247ac4e71690531135f6b5632c409349a7cc5f26d8922c895e11a4d431af643acf44b73c13d545ebb585425e48888c1a824abc3d54a023eaee87066c9b911ea873131c29376118a22e11279fa29d39f8c7b292f22b877fdcc41761ee2c3f5f9fbd9dc1f14b8554c9229bfd08532cabf267e3e0d3185c2883ba7bdd22e6c722ef24850f4ee89eac3be9fd6daac7e7f7e39e96aca0a45216af7548af071fed672f1e650444e502aeb18d800fdd6afcd342eeb0c264f752a1c31e793e70991abb851571ce2c7c5a5808897e11f8ff99aa31e5c5c31e62c4f0e442a5e9c7d05209a3aaa562bc7c7ce71e31f06e78a111d5a583b2bd5411980831bbee6cf55a806bb91ef7fb3d7c74358f4f8a39670a1076ab7a92b9644861fa041f66fe1ce261650a611f47711abeba4faab15dfc640c4d1347c81bbf81ba0726fd7f31eb5ea84c8b0e0f06c915ea1a1692e7a6d0d4df8223016c02c71791d8dc452c4d40782059cf7e2b545de311949193079e22347aa1efd3f060f40cbf0ee89e842e831be539d7686a01a8190c9ae32c7421e8102335b465702b97c5b7a950cadb2ac1b8f32fba2161990f66edefa2d8a3e9884a1ec0d8eda1e40739c6666202a681ff45b8926820ffe86a41009645d07530681c88307a2d39a557fe46c77ccde6690b0398c36c851ebc559e84d53d5e33ce93153c2b433e2869c97465a4296afa1b1763c8a3c190461c69fea0ef2b3d8ac2885adb330501058d86c30b8257a7c5f85d8ac25628eca1bf1e0505f2d24e4b4e24ff08757e98764298ded2b536bcf0542622c039bca5d20551b7f63ad7f6307887603d6b8d670c669195842809674be192de2c283b8dee93dea003e7bf2afa499d8655a7c6c472549d7e0a34ab819f39c4afd905dd2679f38667f9dae903bbdffcfeca7b8b9648d50e3fe72f572c13eff4d554e3889d8f415bd055251e1a94525880469287a5b45ddd4d4bed87d3888ffcce940320d17e460c2eae81d1769edd1768825577f7c78e1ce725749d3f9058570d064e7bb6db3853c8b4ce55e9b65aac2a5958086eb9478b89c8dc219f1937cf844de5899b831eb178df72b849bebcfae8d3eea446e200ddb37687ac9afa34483a4a893ee301b59c10a534a56d2563249332a01f95a1a7d34f7c03043c280c74908f365d2178747d49f733b908487909f312f8adf759ca71ef0dd4384fea12dd5860d169735c66d54875333bf466af3684360cc1178184b31f6320195a8610c77296f674c03f26d3365317204499fc5158b81fe24b770368648be9fc5bad27d68f888f68d30b1d9d9ee124ea506ca2de01e328c05f6bf61e5510bf9c50a9d37ad84111830b94e6e0816b7c8604475eaed37c0dc4bae8d6642d6f421b3fdb9fc88732b1fbe44e72523582ea86804b07ec0261fc0439ef1c9e68ca93db3efd3fa9586be0061a8094c3f46c0c2089a00726ab976eeaf1224e230e88b27d1ed50bd1d013394cde03315c6326a36a8a451f2663f3c31a15859cf2793e05f084c1290d97a5e9e0bfbcbe01ebcdd5a31dd4a049d052a285e497c751cab2c0958b89a51a36a050ec76f0eb66a0df18d4a400ed6cc3114b8eada7a178595f0a77e105d8fb3d69da482dc402869ed6dffddf98f0b3af8effe557377409cccacafee28e96c2ca9ce7507d4e2926d96c015d061a25770f049b0145bc1bc02dd6e60131df550d7d8862461526b18e0567707fcc30fe509ef7a2e3329cb48abcc067d4c4360fd325f7ee0f6a8aa72d60d233b70bb315ec9c99b6c1009838d2b7063afee9ebcd6d50ab71388d6637869575de32ac5e60463b44fc408ae279dd6d49be0e7513ba05e5a7f424767be69e5745fe85d73af877733cabd9d502b550d5c4c65223ee397d00fc7ff18c68f418256f193bb655de6661d064079591522db77d0d178d4bd157305e9776440240a5e6c13cc884b96fb97f80531a5dd442f9459da27f65d746f63cf8812dbbdc18231b5622b4ca54a8fd4237808374d7f9aa8623686fd2eb99639dd65f3fab52e2afe10b664c4a7b079b0c92197396d8f2d1f9f5818d8b2db75a2cb4599b9aa5659b0301266b1fd5ad8bc01212803fcebf687f09a56160f40016936c25865646786fc619a95b35cca58531da0044ebd1d2ea0446d1aaa7f624e7086546d6f8d84487bda1fca1785883dc86d7f359dab00a6accd7cb009b240409dd36b120d299676f9b37d91101bc7de1fd0539c059dff5ff0dabe7e880052dea9101e65185bdd616ade81572831531b901aa2363252d9c9f409ff952b2ca23a82c29bf7fac4a3f81681b86c8211f9319aa32e67fdf5cad0e24b1d6908c1ae7aa8d77fcea45c9e211ea0dd6c315aaf5b93adff20b65132df3ad500f367a34fb359062421d9619ea4a254cbcb72f1ccc79f47f6aea2295d43e4353b47b5eb7527205aa93df6696c28c63d8edea6413ba60a4b4952e794b0654a64697c2ebd43609d80cee287b7539e33290c1dca03665c6d3bde36f1dbe3106c154a92cd7726215d1611f3ac6cdafafae7fe0a555800bdce402404efe89a718211ae7a3f3c08386021e6e2b773d90ee48cdb98b338c38d60c517a8b7777da0a2067a75347d82c01782728ab6364c9f02f5f023694794ba0e04189f28bf03a958efe29d30b07bcab030930fbb7d2d69c9ee7a81eab860c086786a8931f308cbd49e84ef6e265c1447b62a62a805aeb3bc354492adac09b898bc87c7dbc0c8f550a4c33b5e24e90a50ef2b0e563a083bfc1ff6e784f67e408b232223958e3dd05cd1a5f2c60f5a442618a504043cc6484b9889f0307ddb6b36ec30a119303ec76a1c1d66deb3e1e7bad923b27c15c8310eb892bb9cf277466bdf81a4b872c1de33d2960698b2a487e064c152b1db5041e8109b02026a336471cdfb7fee15908041c4b289a233f8dc178276d60122ee094abb27169e8f85aaa7c2d1bcb4d12587340733bc181eaaca79cf703d30c212e1c817d2e67cd619c4df763c10c1b04b5e4fbce37671da8f606344fba87ab551e35d1a1692d799a51b61aa8035a9d1c99e7961dcaa0e10cc98531dc469df4a000b84ad912496b71118a7e7dcae00a01bc4c4c3620201cbd80cec4152a81f0bfd864cb8b844dc9c07c6d3d56769693052ed39e8cf165c389e6246ac8ed8cecdd0a34dc600cae71018d010e4048ea05ca7d6ea420a40d0368fc416e27c1a0061bda029aa44e14e6b02039d3e39c0632823caa3bfa116c4183741b2f94754a8d505c6986d7ed28aef7301bed05e751aa80e28d41c31a3a5e89e2be3281c5190775da42133fac3c726fad16b7058ae3fb500e36a43d39632f960cc9bf9856d5d06f9efe23fdb640676b1d1ed07df4315910e10a7ce7ae9ceb12fda92c9c61aa51d118d811f78a22ab062d303ebd1a6b75b13db822916270bcf507394ed0d49111f233603cf9086ed434a3b4122079819d99a1934fa55ccc03cc021daba3fd13a3c9035d9ad064fcf33e45a6d8d68a9f762491bcf9bf9a2caa470269a3821bec432f6d9b23b9c354fa9a6ee46c8a180fdbe6aa5f1c68120681dfe5125eba1e7d356a516b6ed0e354831e7bd98e87656ce4cffc31e603e7292215d1ffec6c7ca5d0a1d98cc03ac9aef4fb8c8647e95faed890259571e938cd3ecfb6fb13b9ae2254e852b3967d07bfeb0dcc7579e5dd62dd05ac000a821401db46959cea0b58f7b1dcaa9a24792a23212141c8b11d4c7932c8be7a395d25a435029d8851a830327b19c4eb62f9d6a1747aba2847b7a6a341c153312d1800d8cdabdb4d0f18ffd1cbd5eb562cfbb28eb479c9b9fd7324b40843dc6b700c671ccc24a597f88939973c750ce32af8961c87aa231bac4a3232ddb7f680fbb7397bf850de52edb66cc652e91636ea8dc498cb2b4741d771beccacb6fd04a77c4278bb8a0919737a72e84cc4409a5337e04c18029d7c2858743f75bd6370b69e3612696c825690b079609ea40e0352e8d60d7c72892fa11341053051164f8395f87cd593e2ffbc753cb4bc7b62918d80a3256486fc58619b4cc7425be6b6cf26c66cdac0afe0c02262d53ef5c133c3595bfb0ea5dd9c5230b13963da25b14dd5d0a8c5048e586117ae9066e370065954cb1397612243279e6752c121da3262a7d869c386f9d34d3b7784654b87c3e760122ff308606376c72d26eaac760029ba561c2658b84a86a4b32df3d4baae870b01930650f65de60652badd08153feb1950c5469e840678e058992bf2a8811769d1304a84a5140a719cc4a61f344492f9499de48888f698b678521e9cd9b43f2e0ef6f416a85cde42bbed5339b1a9aa273efb0045a00c6d053672f312a508a23388f337fdef20b31983038e27d0662099ad177bc2f144620911b74505215008ac66646175912a3bf0ae4a788eacc0c2ea80a85b18117ccd8e4bbde51f5a34170a0989ecb352ff4cba3b54ab825823e4b794f4672b6eabed28ce3edb533ccccda382d03ae26c1d6b2591a374fed14b84334b709820a1ef9ba6ddf65d4fc180f8257f56d486343eb5ccb640e2a1836cdcc75d83ff7fcf6ad5ff8c6706777d132ffeea82154b603808372a3645e367f583982744a225cd159a48f1e34b9260ea66a43efff0ac2cf0eca6c3a0c87890205485455268d095083f228e8d3a9eb46a51abc8910da507f92597aad9adcf7bc411cb2d99c1225357f646b34cbe0291a139d22c8e6d3f6ad88233a53dc4b551019f714dd14ad8921e5194b662679e5cc24ab5c83b43b7843267035193236d2f7cefd081be328cd26fa28df5644c94cc9ff7dc1438f3d5317e6708dd8e6b1cfc0a0d2231728a1b809c74cf2c0cd1b92b076a25ebb86dbda1058cf25a9ddb2a7baf7d7c1ac1f2e47c143a7460d36f9002064c6165c20e2f2854d0631a9c9bc2e216855837adc7a20a2e2767947711dccb28f21e593625cf7e6af63a4a1606235fe62fce5a7c53a531e1de0910e62c9d9c3a92921662934010b54496d6831bd0c08322238a51fbb3313d5f4690152d9c5567feed56dfa27909559262c6a2948fb72a75240e1008a5e9a8763d65e83aa46e259fa4028b196122807e7591007e47b692c9f875c2903a20dc55e9a8a3f311f618239afb1c58fc3afb48b9e2ca1bd22036aaf9f284604bc5040629f50698f69aee27aa9f832bb032628d84fdfec5837b19d624def97008f12d43074f8cdf3cad2a142f9a5aaab36b08ba64cc1a312cad4ac9f343415721522232e23288b81f2c812991d68f1b2d284103281044e2002139880d64f422788900926ac04093941040c0982422df87d860f04635daa1091cd15c1211e1a1a5b45dae5500763a1fe853cdf15b8c2064e1d79fcfb589687a842016baea7aafbb2e19a46918bd2e5603e120a2c5b7f46ef07a214166f9895d457fbe8d643c8cddda06f9ea4613ef482b7b0bd991114f7033150b2398f55ab9e3466099272c4c36aa55d2b2513d7bb3792942f12cfa68b0aa96364f676655cafa54b3bf8b215181a01657a440defb6e824e420cac0c23c98baecc5cfcde4560004cd0989cde3c0536c5e57b84a91f1827239f3e9fa3ce0b8229ff6efed457c36869e9b68415ae6e56c304b6c2d3f70765e1663aaf4757ca649ad54ca46c8b8ce81a60f757c24d5f1ec76cc13ef6c3b1036e0bf8bdb2ed3d4f55097685070991e4f6744fd2234353433fc6b1b3bcf4063391416470e81cb8a8e1d98cce309c805b9960c8e61e0a1883d41d2ca4cd1baec0e53d02b486f47d264aa66f5280de4e78ba132a0574bd1abb88f89f6222bc4063e0a9a6f4b77631f7406bf1ba44e22a6786f948eabb7bf855a8c7acfeb2d6eea729c9d792edbea96a5c451ffa52665538d6c923dbd3f48e041f964d2a5e48a6470bb26e463db66ecbc177dc70d639dfc225771fe7f1f56c0e47f289fa89d3f69c86eff669f6ddf8eecfb8a9fbd8711c59120856944d78c09dbfc9dfc12ff302317885c600d55b0482c5de75f3a544f39dfce22dc9ee702e69af2691c855698841b7d5160ca45339905ae43239a1a11d13c47896885e249dfd82cd0fcb3c9ccfffbe0f08dc4b82f21a12fbbe2e0e9750d6670e4a5e6ae8071e25af0d12680e662270a00aed20d1ffe08405ac6298d62cdaa85571186e964ad591d3bd05cf43bfd4beecfa13d0aa3f274bfbced28fa7a86fe03f28df14721d3c7ba6c72a5216317310f5e7e8790eacb39e0aa62e60df5aaaf4a3f10842d0f4e4d11d228fa2cdd0f55dcc69741607840680ea3b5a551dd6b62b872e9aa31462290dee01ca4b138a0b155bf5d31d6acf52358da40c8b04671e693579d3c862967e46da84398215bbd7e5b2582003cf6ce2683f03c2b77104346816fc44c9c49829179f207051d619b1770456e4b525b25dc867c9e8219486a2c40a58a8602f77f3a1c4a0f8efbd3fb80660fc29ca9e80ee2fed8020d81115c9d034196320654f4b81523c0a2151018638203831dac49c1351173a36c29f39a84ad5a5052309861d58fb406c0d43e5d4c33aadd86aada4bec1bd083a4df754cc259e25ae957da2c9762efe30c8e564c33da3e99b4e9aa9b2417c3fdd9118d888c7620c534a632e5b54fa3ff10e93e8d84cc16fec72124df714e0018a928e9f5c8f7ec3f9f8a04a1a86033d5bc47bdfbb42abc65a9db220598b96d31ba79b52c6307d82b5f07e8c6fb64db1dd3bdf60bd06a5e9f406480b2ccb238ca9eb90c66beaf119eba242becaf45881af0eb5632c2d62b1628032c9dbce3bbd158e05d1d8ddfb205b55d144f631f6a709de24a7c38ab795d2bf7375c676e0cbf0fcb6795f9e9610c3baebc2a11d967fcbd53bbe2be68e453b7bed20be91e154e6743d7eb323d6d37d68a12e80728d490c4cef85ba9bd8ac813227da0c72e5c299350ae4009ead31409081459d0b31bc2c642c9b918c3b4af9245c69d305ef7f9084796ef0b48008efeecbb7639f729a322e8a2f6bbd6e42ce4be95be50ae149e6a5c306a9a7236d3578cff3fa6b1c0d55ebaf90699ce35f488ccc8d95c28baf28d1a28e57dbc3eba823acda217e117158ac15cc286b815ba3704eca21a24e7865d05a2744ecd474075426e335ceaff57f2501da27beed22b35b0b80a690a97fd142f582d735e553ff4187dc1f6a80991498ee572977f8a3b201e57070f39e2e020aea1531620cb37368861d28f1e12c4a3390d5bac8ec29487cca9f7873a05f39cf9c51a393076bab0baf2112ee3e90db4c93adf77517942867b6ec487e6a84f4500af3e0f1362c491850ea65bcd2682883212c766c734a31ac951702f8f70c0635baa33be439db3ad0e305c27f2d5aa8a232e480922fc1107cd32b567cfc2137ee34e480b4dd3239d4f129f07091ce27cf990be96e889e721974f10842319ef118612f73e67f8151c4326c31bc6fb780987a069e14dc13b248706e798a9145ed3170d7c58ca45ec26d70a7c281954339c2396574c2ef2bd21215e434c64e3735480e1da715f766cc0630cb6acd27d6ab9b3092510df30d95645cd266abc034849103dd65b6b59a53307c467df5a0bd896f27f4104a8f0165b74ed81be94bc1d4a78ea1c5238101a1fac7c3eb79fa902dbb33876711c7103c035251341e7953f63d921d594414d6114bf297c12a4495aa88aed8b143d1ce664a3aca4021afcf56d5b300c2d9d0ed5e4301a0e93387650f815380897a21c5f388c072d7c9e3438581485e5b004edec2f6538b22bd085f932d7c1f1a920387ef885c559e8cce65b950217c5bb48f94270bc119b64021b6d94d56d6defbdf7965b4a29a50c51076606010709b8f73c3bcf3aff14bd49ff76c36972f0265f9cc33de8f0832081b3e39c1ccc1973f271d4a0ba7ad0dde460cfe78932dd72399fedb7db2d97aae769d6f1a3e7e31adfaa4baf885b7136ea572d1f77ef3daddcbc7ab066cedb635d3f5510c8d583aedf2e8aa2b7bb7ad0e1fe968f5375c6475f645a7155dea7159ed451d50213520fba7e9fabebdd649295d3ca1d80f827e61e74d8e8b4729e9d56b2cdd5e5d0f83590aebb8ed70c7a06f7c5b08e7f877f279870c5d20e0d6b71fd444f0b84efb5b2653f3f5a4830bad7ed909028e47e9010f941c2bde018bd58d988477e90a85e4c786161f3f383647c5ddaad90490c398487a78b5196222b2368ba15322919f938068d60a082906988b87556d354f7ba6e854c537d8a6975d25d9ad371ce794e3664a6162952a624cef9d619a7a9ee5390e9eb6f537d21515249412e491a793852b15b618a30ae13384ed4308a51c442c4d208618aa410c21266fa772b4491d66bba15a28052648e4ffea88e21e007dafeb318eedbdd07240ac6275f4803fb3c3c7cc7c3b3dbf554fc7df6fda94e492afeb6264cb615219c3a16aa08ebf8de17ba77044642154c6676ac030a580d0dc817f4ac6d94b10e2a90c14f071f540003bb8e81ae5b61092b3d772b2c51a5afbace0ba2907381640558af888bb764b563935a73ea6db1d82929a1c455a2887765865706a63744cb580abb3065bb2c623c32457a46bca4b07664a67a266a24b940216989272469c44e4a0b49c28c48db01b9c23b010aaf8a92dd57b047c4849e0a1fbb1472ec82401d69ea9140210289c40e0c698887b696d6a54a055e14293d2c263b32233082f47e640ded18da9011e30793d111126feb08048f68ccae6d9863851e0d2a419af09ac27a3086386df186f0e8e988fa32a3cb8a5d171225786024420829d38362a177220b4f85191327bb27495820c2b3d1b51b73d5f381238a868b16bc1e462678288c44f44c38d37b52e395d8b253c14aafc8939ed7d8aeec042720bca31ebc2faa1ed8d3aec90b13469ce0cd1861c49b6aeb8510d3c3c18507e28c67228a7049ef8510e98ba7f6a3d743c75509bc361840529c20e2a8b742c487dd11b61d9a17312c4953b4c87a238e601182448b47958f1b5232785a54f05e1425f56a14113591e13d7de9a540db11a91204059e182444c076625cbc30563d22a9dd10275e158bb5104a3b2b218a7850ccf0b0c0ec4cd09296028fac4c88d80e4a919dd719ac22533c2f357828b8c042b4d463413462e7a4859d9930595232ad372325afa410658c498823bc32437827b87a255c8198e22579ea4d352da5d8054120f54e0041c4bb52665705cccec816b62b4c51784098c438b2e332a497c5d5db71a5656a17f6b41b367d48d1f50189b7e50311cf4899dd0a6076c22d5e57c04489c1a4e808ef6c082f8b6b77e5aa7734c563e169d742d3ee4c8a21245e13e110518f4799dd123054b6d4b8a214a505139e942356437a47b8965cedd4a6743c85359148c1b3d286c47bd246d4532a13056617658bd5959e8d283d2e263b8eecb60ce1d1e0eab5b8eac998da89799ad2d443916207a60524aa16887863caf05280f9b0a5d775a557220a8f09139e92233b2f437665b8b4ae785053379e7648d2b1a967948e294a38938474a688c7a505b3b5ddd990459616ac4c89d2573bf666cc90f59bf38f66c27a7e9d73ce6f8621886504f9a4c4285ce264808864b244ec4c862a4993714aca649892c8188d615b22c3a5af3e6797cbc3a34509e5e98da982748e697264f2f4c69028cd52de97b447956e36b425519c82b4376c1076423ffe514949b039255d9e1e1b89221e7d814ef73ff4495f7dd013c668195325fb9ae431615a6b4d965d2855798aa22896268ce098a5711c47d33cc70cb19d676643639bd273f897d9c24e1445515cda25f6c86c543d977d6c35270dca8186a6265fb62536122659efc9da7004e77f721e31bdb6266438d5b9059d7371be75c63f676eb7918c89a4fdd24977694ef784b7429ad4d71403a6b5a2ce13a6bcdba09816fa053f5d2eddf1d8af0d1ba4ba34316a62b0f4f537d6c5b4388969ffecbceb5835b876d66d706dd809105c23eb3cacabaf2356b7c135a8be9ec135186b278264d882659c7abdb2153e9c6066e284185436ca0a604c5fdaa814097689eabc0b154e0cd243f2054b8d9c2ea7dbe574bbdcbdbf01db91c601484155e39fcd3797d3d975977b4eb438ef8d72c86f62723f1005665d6e53344d9483054852939f5f96748b76b8f677ffda9f05deae6ff9af7a57527d8e17e30c1a7c0c6035f074a013d0eff7a0a4abcffd2e435c94744f7856ccf345cbc5d813916eac1ca9aeea7d7db9d17937d2b2dbe097189d47e728d5e936f805442fbb0d0ed9faaacb60463be29df5bdf7ee5f73b9bbc7d3722ae18a288b4d0da438f8875a6bef1da29d05876634740f4a891e131e9e31ad797e7e7a4bc6f147fc81d464565484298c08c4022a1c99e062ebcc12592f8a94273ff9de9b73ce39e76b9be068327542e985f1e40ce0226c855c2f6c0031ba34097d38e2a262478e165caeb68890b802333b5262e48c97942dc3610605a6ab880cad4306930ca95c0cf5b2dd62583125572cc86ef7de8bf1c51817e0b60a459160364cacdbbf68075b64d82ddac1b290c562e9eaf6abcca052060b979542659f50b149b42c1231fb640a153237c8416e8b0a02aa20e0686f7e5b8388d0b048920c2049ffb1d0edab56766cfcbe5c284a42c362a7040e21d820431fba08f86fc72807b98ed5350464dae7b68ac0049a1519a89869dda290cbdb5a82317e45549151e07ed16db76f5107884c63136086d23a6badb3ce59eb9cb3d63aeb9be4b6f6fca3dbc77d750bd4ad2a842f87615a7cafbd6065c7eaf6c76e855533721e7ee12885882971e11a860d41ea900305991c2ab40c4568306314abf49cf38eb07ed3adb0eaa88708e1c38377a4756cd7b35b1e2c947bc6ecded1a54358b67d34991656dd48b3ba7af8f9ed00397f3ca3504755c7752bd4b165c62bd5751aa88ebeb70dea50b2e9809a1512173128b6333bb41a2340f4889122051d445ac7082e52593bb79c1b36d05a6f2734687def9d044dd359a430471034adec56984347bf752bcce164764db164546c8132134c7265484a15232e35a6b20cb9924503fbd6033d722c51c978adf58e0f31ca0d1f2e5000d3840693504815838592985891184b4c94c9dd0aa95e6421790787306bcac945981a4d3a102552ceb0daaad81896422932345076a670ba155285e867b7c229b61c3b399eece4f8d9e121c4614638b56426941adbb1faf9d9a91ac79f32be395741c027e69162ac4b48ad56f5ef50a5ab46c51f812e530b54bee61f02099ac60299aff17f1f7d0ce8bcd7ed571f7db6adf3056414513756f4918b4f7ace39ababb87774f058b14c18e514d5822bdd7ae7f4fd986d6cb33db6afb81e6463687b6c175571e729cde9f603fde63527631f3b359c7664ec34e59c73ce17ef34959956272c014b0845026b67c4b53e8b7bf60e89f4fed833d55fa6c5a6f0894cf83446f884763590a2752c7c32ebf8cfdcbd1300339aa1d66f27ef9397bc97bc22caa124cd3f35493eb73b26d2dbc9df3af6c9b7a5fdddafbd6449962ae941d7ed5b55a754c9f24bdf8e8b74f5e9bb7cfbe7dedb72d2d429cb2fcbbf522e9988d4a78bacefbf5d60c11b76c76e154f3fcf7c5a52455fa328fa399ca17c144539a0e8dfa893bcfd7e1e1f0c7ef06f3ff765b0a10127feddfd3b46a926ffe62b1ff5d90c561f0b4ce065e983c14f49be8849723433b1eca448b97d9edf0558fc7d318947df386a4d9224be3c1c6fddb16db3f8f66af8fd36b09f5ffc15e78c5fd439e76cd5dc0f63b053225dcf1583ce753dfacc3984d049e8249c71d6ad70867006940902fed7bf357973a45628a3abe3bf62de9991beb88362b72bc9db71556a8534829993cf6964a5370123b83db540fa7613a738c30870cfbba716286740c9df28508754c731084b8077cded57e79affe5e63def08b8f3d76810d76890bef627fe4639c8413befa048efa7bcca2ceffb88a4fd6ac0061b3229dabe21f7683246570c2cd32cf3fcf46334a8544ffcd3a2fe1da434aba7cfe84b778ed2956743c68083cbf3c319c8bfa0eb3731ea800dee8933fa00dbf78f1bdff89bfb6a7c13c218f61c5ad7c226b4ae3fd53a0b90a4e3a3407cf1adc31d7de71e3371ce7a6f2ed4af4f247d7add206cf58a39bec665922445c85a48f49d5dab2615df11bc84954c7b8e2fd4cb37c7377de579f3016dbfbd99cf31025abffedbedc5db8b7f5347fc7ba16e3ef9a8affc0df94da14efa3ce8fa28fa84cc8ba5e4f0175eb2fced788aa208c2cd14c5fde7b9c51bc629bdbae2a5be5f04dcaf164d510cbafd3d4bf14b8ccb1b0abcfd798a28872bfa6e3fd698e6799e8f934e6c71e769be8999685e3c71aa89956e02ce172fce5f1587062fdda839754daffeab9e349fd2bcf81ca4a2aa93feb901ffd4d89ca269e2a5f36fb73f73e7e3fc8dcf344d75bd25ced9a86b5aa3ae2389722869d2d4673b0d0d4d1a64f61b4ebabdf8db771fe72b1ffb36f9fadcdb3ccf53bd7f9ab6df3da22608e38b2afa22aaeaf0bfbf7f03feace127e753fcfdd757fe78aaa63e4ff1b192898db09288722835e73edbc7711c552edab11c978baf165043dda75ba18bb1de82a907a05be18ab27ef69bc72893b0c949f8024df8224bf86249f822789e65339c79927ffee59cabab071263f54cff62a3f33cc31948cd81d4f9cdbf80f1c5cf2f7e8e629b277d6668d7e6dae0dbe7f0cde3dcdfa82beeb73febb7e63e5733cef872f15e4cae29388720a44f42bfbe153f3fd148344d1f9f671c9f675d7cf2c95fc94c661225710d49921c4320779f54d7abeae49e678cf15ff24fb31b389b1feb7478e49824b1b5e3887bfcb70bf58b72c0f657a18e3b643555538bc10273183f0ed2aa2fab3e8c026bc6e75f84ea4c607cfe1f8cbc5447521d330aa401dea0ab5e15a7b98ef360fc60547fd49fdc23026ffcc43e201a74556d390a3c6de768879b8e31f6f12151f5a3d232dfb1e4e2d6d9e2f216c26d13b71ac26d2b7b08b74d846e6f5b27410b6dcc55303fbfb5695fef05ea9edfdad15a9db546813b07e5f4715f747b347ddc7f90aab80f6e40a008b41bd82e925fde7befbd570238dac8aa18638c813ce7ac9c73ce1a058a5a6bad817be3167b6f11056a51148199af96ad5f8e8630a240ac7d4f45a2c0dbcd374b511cdf547582baa8ae5d3471b79b416754fffd48d0a1d7c7efd0eb5a05f6c41e06aeaebaac5fdd018b246821139f2186aefeab5a6042aaabdedcdf41d6b0c7314d75f8e6cfbfee21ab8e248fbb87c6c8aafbeb1ebaf7c998a6b53ffcabbe79fb268e4f836580edc1d847c7663080fde1ef2076fde6d53eb107893d3f032c10faf81760816e8f5f011958a0f4f127c002d13c7e200b54f3f81160816c1eff8f05ca3d7e0d190e6081ccc78f81053a1fbf010a6081c4c74f000b943574907d2cd0781560f4601918f96870f3ab2db2809bc738df0d231f0d707e34c04969703e47be8d6f84b4935fe31b41d749f5068e3ae61e1a7b80fbe6ddbbdfac37fde61ca0038b8126456fb87e1f4d733f458be15a0cf7b94f8b9bdff2e3f86eeedbe0518ba9dfd43e0fc4df6f799a5ed4830f447554b5efb6759cce06b66375bce14c02a0d9f303cd8e4ddc6deb16059ad9470216ca18c3c063378559615a647dd53fadab1bc6bcd75eadb3bb66de7b516b6fce32cb22bbf7669cb3c27ace62e68bb3de7aaba5dd7bb7288593e59cb3c8c1baf6de9b8f543f38e77c24853f987e28097f14654c0631df890363dd0ab7befa7abbddc2eaf75e9cad700b4ab8d5229fd95a3484db465a0c78dc32ea586bac6b7df575146a79f55577e11651cfe5dcad706ba8e7f0af89f932f68b5cf6861626a25c312147960f29f012b1a24b982a4131aadb65ba91adce701e62fc32868f15705219bf3e827379c895610a91e211bfa2ee981675f7de7bfb4081468a8a0b314455485e82a809995aa1cac51512434688cc14a4aeb28fb6bbf7de7befbd6fd40d227522cac6571791d291b5175a535ad09ab103c40c1af86944a3299339e7376a10717a114685940d4dcea860448d58d14203ce398e7fc042251cd9f862822badc6194e012e289404c9b80ce9d08073cef9d0eb2d3ec4e0a444511447ed448a13133db2ce0c19c19ab16f54c629698267fce48a8c9f97b92746221968c599a9ab252928271080eae2e408c5092fca5c651f639b7895c45bb8dc0bef0162acfab2f7dee7a8420d1a5986b4c8c810b322782486890c242c1fe3990bccb01ad232f262232221094c8c5a1932445bf099680667a5dce5d2c04f231a394c814e218facf868d2630d6c4b06591515264cb010630bef71445366a7220be2ee41433f8d683d9afaeebb2c53eddc452ae72e28ae64d10846e55832c60576a54badc84c9b9929844a6789ca3c877f3ad549ee881685a56c112f25524e54304382c58829154b5694119224a4c7150bc848e1b4bdd37299c815f317510a3b60cd47991145229248ec88c182151330c686c3dc9828118bc86dec86b64cd47c00b1d1f5348589dda2c2142a20d64ef82ae3430400d82ece6b482c2b84b0c7980e1b4d5f419a52889db8c2ca574a706b586014cd60a18595132a40e263868824606384f82a07177395029d1212311ce211b5a4e2890792158c2b636386ac2d41c3488919fff881143a012285d3122b5f3ebe64806d065ada10d49119f22e5d2e524da8b4653921d302aaf1a4b444a82482c80955a3d2a3042b6233a058005281938e2f2a5e8468cd08318a60a2bc307de9620b23e6553465e3445a093eb8c2a899d91434169552172ca9ac94bb88a2fd9a0ac1c8990828352429361624b63c9d184a333bbab170b1a0baa894bb586d008a97940a5c7424b58d5a828851597104f6e1f7136c35b5abf2179c203fc88890d12487520b2c2d265acabac8149de02dc8a1288ae2a847b4a89baa9f1b51535662b817fd7b0ab652ca6297cbc191213fb6886122c5c282dd104ba1c9922c5a4d3e88d058b028ccc42aca4950ac85184e4eb0985142c38a4a18168f1c17297e35e79c739e53dd9af69ccd9b733beaf4830ca21e552bbc78592143d210233ada8a7864c13a91d639e7699a7e59828c3535301a2e80ac095141491991362b5946565660bf456a970444cd0a1031685d405738b240a5c8d252e16acb4d4b8ee8e2c60632ce14d14ae147530821afaf232e50184bbac2f12566b9586ce5131a56da5995cb46a330162e4e0885601c00860b89303c60b030a34577195710da115cc32ae305052d33a89cf94184224b04170a2b1ad8ea4cc4f2f9890f8715902e8abea8fbe6f505e5b616846e80c04a09cc04e1be8ec08531c6012f965a1faf27205940acb25107b2038863558b6b88f9eedb05d5e574efed5aea32ca39672e36aee1de7b8fa459197972ce395790eb8b2449b234b9a44c2e2733ca7c235e595e535c555e4fdc4bcd6be865e635c58b8948ee2449b519b5344d7529d792906b48b865662b6debcad91ba54cd24fda22da1a22da6a02452459d8a4303462a38c13321f3cf440d125b6c6f62387065c081771ed1d9a676a7b64f1f353801364b0203a132535e4d2e01ab335f6044aecea87c98b7ea27ea2c69f33b71313499d2fe99894772bd4a2ba580d2a6b31691d49b93c3c64d7e767f5c1409815c639d73f676e975546005652332cd5a4d9ad306bd8d71f142c0a79b0097984f0a9d87992f2340c524839d9bf48c5ae9d26e99aee8049c9711cc7714cb96f452acc62ea3add0ab37808b3a0fafadb23fec7fff81f2288534cfdd6de8bc3e38831f0bed6aac5503c2b8e78f9d8cda71e83067b7df4d1a0c1ac81a6c6a863344833d43443fddf571a515ff1f27b6f1e35b94bd1dca568f27344f939a2e4adc491b71267a6278dbe0ff6e563a6270d5a73b3b1f7ea6bedadb9f76deefd9cbe7fa3f5fd7bef102c08161604231bfb72ba4bd7de6befb557df6befb5375f7bf5c559ef9df1dd38ebbdf516f9389e7c24c9d234cdb334cf13bde16e385cc617773b51b4c30d979e38b4434a5343535393f1adc9418136ba0a50e0cd051d1c1d9d8caf4e875c735a9fcd698376b87ddfe0dce0e0647c71b65a817e1274fda278f36d05c18786e11e8c06f10f0de21f0e0bd20c6b86708675d30cd5686874706fad73ce17f89ad2fcb3399d1ce21f560bf275ad926c38270d1aa419e61e1c277238ec438be1eb04c31a3019eeb91f22873063464d2d2dedec4c8a94be92c3a1f661a02d01ad8e5ac56379096778802436432df1edfe4046959163f68732689a65306bb8b1e51efcd8e836b4a1d1f1afe4985b19bc0d6d9c2c06fcb76136b2187619867bae5a06f1af0ce21fc60de10c43b51bdbcd8c05b2a3cd5006fe1de9aa7bceab693ffba0d21537438ba2e9634bef93f7f6b58dfa09c6ba7d32cb02919fc7e74bdb88546f5fbe11e91dcba59e79f4751bbdb8378e5fbc64026dfefdc0fcfb85fabd18e7f304eadf417aa31db45d85fadeba9c4972bfb971c7781c83807b849dbe3f63aceddd2870d42850ab3e8b61a340516702fcc52f22d55144815ba87314a8ad1dc9b22c4d922c3de0eacf4fee21cb6dea74e6077c9f24b9f7ef20fcdbdc5aeb8df556c711055a6b9628feecf380df334d4fd403fee2075ccc68d66f6a6cc79b7e20098066d79f81666feb3a41f7ed03afaa556d8e6807b29ba81dd1ad96b76f7515a16b9c2299260eed20766b31f0b69f4ab9ba9acf47e06debe5afda5a6bad352f9975efbd17a3758c1f638c31f78d2dd072ce9a07b5d69b6d8bab1815c25ba5e393274739e0fd7c73e43f76cedf77fed8cffd18059e6fbea9e61e2fd5b534ea789775acaeb69775ad9a60ac7bd8551d9b972c62e63733076b6676efbdf74280f76c669639608cb1ce28879c33feea7b38d45a8bd7e93aed2d72185f8b448140aceea1218b415775e875ac6a591c987b71c37b2f6e08e6aa2b6e8bfd611c8e4ff739be0ace2bfbabd25a6733ec289f54aacbb11c85715bf03a16e91ee78b2af89c3f1f879e8f433db8a0657b7a8017b4ec0fff0d09fbc35f53f3b683d8b3ce7edd0b6980e3d3d9aace04703ee73fc0f99cdf9fa3a220c7563fc8c97914e81ee78534b8c0e1abd2f26ffed6bcf917b22c507efc17beb2860a6a7ecdfdbc31ba59ca1a721e8fb7b7f9b6a7706f6d069c1b231b75d575fc15f846db735fe7b3765fd5e00c78bd90f61537ecf87137ab0ebd31baa0d52f8c75fca56fbd603626ee299bc15afc3b4a7cfc39bed1f6888fe3834ad71d2f7d5f94c3de776768fa60e42a2ed3f2ac38a7accbd614b7846bc219e15ae01f2e4dd81efc39be7284edc18f6bb2194a22fbc32d70867208ff4c944a658932a9442a8f4a12a59105ba79fce5080b649435ec2111655119c2021159a0f1f19720ca0fe59005da1967c4b4962b3afe72092f00e7f19b69cee3729ea646bdf18d30f61072ce67e31b41d745f5468eba9dd81e26f6879dd81fc6d966f800f8f790aedfa11bdf2ecbf9f6131bdf8652e3db51687c5b4aeadb5370be4de5e6db5534eadb641603fed3b79b580cf84ddf46c1b79d580c7b6c2bd94b2c06261603cef16d277657b13d98ef2a362dcb7b6c0f8d695fafefb1aca12c77b9cb5d728ef1e62a8fa1aab51cea3847e5b0e965e237039952a8842c582731548870000000050317000018100a0944e24812c4301c4dba0314000b68ae3e5c4a28918b44911848410c833108c34008c300060064003148398ad40ca42093a9db75f300474dc53e72c18c0e6e3ad66788aae16a7d26c0cb8fb8c46904711c1f07f012eba95d9dbc1fa1997613f73090513b74dc2fb7a862c8ec0663305b5ca80bdfb9c9a42adad1b7b2b4214131af3df910bccefc5982bc5a231b408a447590d0d89969634481700d2dfd6e427b4c40c3229a6c83a22ac01afa669028ad111a525520d2cc30c3c77423721a3b9077f8c22f9e167891ae8e084fe99856a2cd4b69929ed0333d3a619a54bde833c40e56f622b6a80e5cff052e2cb1953242111695c892c437fc971f5e8a60606369141f8a1848479b10dca9e41b73204c1236fa41d54bf754848dc5ba1c3a5fac8bccece93e067d7e3817f658f18717bd27a55d04655dc17cc0ed1d77161ae78b8cb77bd1a1b1554c7d82bc8dfbd6f701765ea0083d45f458696812ce275ac0876ae06f6b5898d76284141cf3b3f8626dd2629b8eb9e103995e6ea6480378f800f1a53437adf105ca31d90f6270b432950f510843481e77eb1c6768b87a596e7e26f8d772cfdb93831f047cc2097f0164931abf026efe219d12d5e0adafead8fb2eb5a157f194068f91d65ab7b6fa307e6df5543890c6fb8badd992f01e4463ce602121f6c31397251e85fcad3a0e7669bad68dd0fe13f2081d09f40f901644318690d4b0261c6803774d6e3c69ddd2a0674d9b36b0e2c6877c27f27190d004bc04248b5b5606476902c2cb5524722eee349c9bd2def709156def718c2b8aeb2739f357ebf6103fdd60886cd434876b36536af5b0232396f6bac86077a53f74b7f6a1106234f689a9f21a0e01350b07a664af4094b473e68ab9838c1d15c21b9e8238a87d713deb2807d569beae5a32103057bb224577b4813bc45160fd6cf45a8101fbc5d0d489c0969a8601f570460924549dd8a88211ad9438ab29a9a17370bf672a55868ad9b987c4e7a2490936f438c4f9eb0c514f49b3de6fb4fbb11759245dbb192eb4f6e66c60c4664098c79f736693ea5aa34f276d690f3967653d8f63b6603dd01908db722219b0970dc9bab3e783322897b5b4fe0cf927d3dd95df2efc19d34ec7016004ecca5d69d427ba67857c185eeccfcc0bd1fb2d69a8b3a1123835b49d83be4a0ef507ee877a3b175ec9f2103b91c70d919ff02f81529bfdc905cc4ac920b971fb44c556e74d0638c1959a35d4c35b1dd35e55068e9eeea1ec00e8b423d3e88b23987aa34fa62db3a9e7e856d6e92c73aac6119521e6e8870bd423c265f17ce5fbeed492658b984d0c74d182c139742bf34f5e076690d17b98a15eeee9d588680b23873041f30b0e819887bbadf19547dfbc1f5d9e4754c68ec846e2927c05b4a2e02ba045a96621d531493228ac68c78e8558e41863652f3972c35503662de3feae8121e4a2fc2efa2a74f8a83e62ffd535763aec0be2f143a123179604dc7def083375548b6a72e9e3a20fab616c60148e0c1a60be0ee92106692848c0580063fc218043fdc9e8ae576ce3663c01e2b51052100472b4db5a91c6b617ae54ccc6cd3924d0ba38c4243d601598065f01b562add7fac23f734370cda378879a190de5bc83b5844681954be3c487336551013940a3a199032e3cc8515c20061c37fcfeb763a82fcf78e0ae18fb0a181e4662fa44e578e7358bbcb2af8009bf31d44a679aecc3278fd257c001f01f2a1ce1f6b94d1093fee3643f3aca34131642cae8c56f91966920a769301ab21757a2b4c5fcb46d834c24de3b550722fdc5bff031b583b720e9dc57c0cd2ed371034e7d74aa686404e0557b2ae6f6479b7b7075f45cf54e405f89e2ce3afd9e2f6e02571c15b4249c68699b06db9a91008c5d9e844f27edc681da40ee752ab64049120672d5c9d10495f31dae045be7375c1888753792b06370d32b08f7a0478c1edae63f1a28ff36744114af0e69c53a12fd0970402440508adf2f308386d442fb55fea5856ae55b2c6f56fc34cf9e0097811d43de2b6aa8d13115b042852c4c037627a4ff39dd084235fe80e4894fe91d4ea4ba9129111f6808d8fe9ef91f54b2002c88a72f3b8b8d76875a2b810d439ab2c0952828741c445e91066a778770b6939f75beb123c602224c848b553f208fe2599e666626e72b7df84f6e6566c5700f8518d82c500dc6a9ce7799fd87bd9470991f3c477c3a4f1613a0fd85d77cf811dd12b8a3cad334565491590a6abebf4cdf3a280d991aa942d13e8f06fcaed714bc69dc4cea4fea07f9c312dd73074187d312c50a74bb07310d5fbac6b73be14ef597a47846cbf004263fd262569c338da1bbac7334831b2437f018a7249b0710ac554ff6794b728cdbb6f1f92af98b6149f6e5ed1aa47010faeacdb03fcfbad7e2f293f9919d55729587fe949a76496b1aaa408ed5c6d7474873ab48045eca81a22d9271fdc8436f2491c328136ada86848b57a879af8dc0f5cd95af1006670bda69839e2226163eb273e225187c0a867bc3c34a7cf4b702c44b97d2e9866397618474271e3e2d57087df238923b26ec87226654ddaa804586343ca7c0298e89de33dd99cafa5299291fed2df849e490867b7960dfa1c31578bc9ee8dd0d9be806b252ec1f815c570bec20d013336ed30c9867521c34f760c86a012fdb92c23d2be9976198dccd418d86b334236c8af1db0d41f91cfa87b14f5529ac8a02595d6322ebb9f85df215e59986a6f899b59391e88a8ba4fd22f36e12cff222e568f367a7aa0f8b39be4da4f6f1ffdb2e62d35cf0493f2c5cb96c59773d38ceeaf2d5e6d498a2b57bdeb8f7b505919f0f53260392a80d837333033f17295e1b4289230076df365a066b48bed67f25b5c5dd1b23f54bea9329ae774c10b013a13a52360744a6c565b1fb9a8bb3c1f5011d1c0e4ba74227d2e4329d90953ffd89017786b4eaf9d23b4dea48238bcb8a6bbdc234a5687ade056143658b5521b2dfa6c4b76235162bd8775a3b5990ed2bff3004abe081a3e465cc17948370704922d55eb803a23573bd1f9fc17eac911c5c96b0caeb30e0f49c0a9f69d55fc0753cc16a7bc8236a8f04db3d1a41cb8e752f6b1bfdda9997b304d5bca7eb226658927144d9ebb17b781b29ae01712dcf27671b6496abb0ba776d88198c585c8ad6f259aa72f95fe899fe918fbf8b62e5aa1f0b73c95912beaeb193253f88b003dc57a30d2cb5d68b032ca4443d28fdf8206aa8ac74dfe437f204d708b104d09b6091510f422f51aae698ae5a7ea84b54f6c050289900a3e95789d6c21c224367556f040de815029ec0970617bf8aae7b7907a120f61e433932c405b6a70b4bb69b76836a79a1816e1fe45177d673d807ccfa3b0154899b4fcb16f9d2eef4b44d1a9f26a3723d95c8ab70091a85f7b1fa00b74e4b7fa21adb2122eb82b91ec2dbb3a3bbebdf55c998d6773efed5b7ec25263711da0f8128a04bff9893b8828448d5886ff01fc0bd7b071bd84e770715bb30e402b91a91252cee307ae3b37c28d22223b468ed7a56459f11924ac4535584d1c7b919905fa276999eb4c4298f761881a5aea2886775cb6750bd129807de405c8717401db818ef5a39b4e2bf95099d97c9fe248047bebe2c40cb42ecb7c58a0d90e4d6ce6bd8f889747dc92e5ed19c4b1fa98a366c279677302d37299bf8b50e4b084230b5bf157e8caa6d987860d64618deb95e55c9d8ae34037dd746265904eaa17361dffacf2e59ceeee708f10667bfebf677508233dc1d57894dcac5b083cf37817e61cdd0802f97f7253beb2a54c8d5a69692184e82149f9802aa10348a2318aef83bc68f37ebc9dd6f6630412f08f39a18c0a817a3ab8c2a8da615209630bc81cb68d340fb1e746d5def4549f9666a0af879eb1c2d11b8c4a9d3d66d72f55ce958cee7429d4ea6b623374489294202b8f546d00e007ae3121d0b7e89c39a733ca9409d1f078a3e4c41fb9fd8243204fa485ec171d59035c5c399ee38ccc7642f089b3feace63e752ab3e0e4550d3deb8866491998b623f579a9de2eda239424d2ff1eb21da9ba2f53a363a2fe906c388cdaed2c52fc20728f319666d69ed4892041a93ae02ba9d76ec51ad38ae90af0f6f402b7cda0f0dd66fddaf1dfd3a538da2038787be43df2f5ec883f6ce8ce07c8d9d5f83df2291b3774c545c52ffcda49792ec2500989915568581fa04dd4c92b609122395612658990d659ee0c30a5a65aaa690e41d79f6a68d844228f500a4ad8cdfcb182f2ff273e64d8a1722cf50bec38defceaee76b7a77b4f4ca198ba1a81962c1d50f6c33bb93816fa1f3d602f82853a75376b16cf324a43b400de4bf6b2105b11051cfc93b8f57fb312c77feefcfccdc8c516d429d4529bad67dc8c89c816e944b8a9a4a94b9ff6bb4b217bbaf674b2c0c1de62dc9cf96a375356d4500101104bd392722cfa540e13910560c6c41296e497d54286037f6170d2a9eefedb7a995d5f8035c01c7e3072cffab65cd54f547772642d7b71d7ac79fdeacfa7a94681f2371498797ddf5a42c321ac70856d3edb6211b7dda7b12fe05210ca8f6143b8329e09c6a35f9ba418bb4905d1f4f0beb42b5a80adcec3143e151149627ff7ddb29b8f611b9bb418d71d71c4719f3177c09fd638a723b74ac5dbc90f89abf30635921a789dd12d88f398996ef4ea4f24780193557cbfe1e75d32abd6f08a5a7e773e34cd67876a83d9b9317ddc9f7c6cffdff8bab617cf4b8c3a9dc1eb73aba822ce7cbc76b4efbabcaf6145ae6c798165708d4be6d52952acea379f637ab3b8347c5da231e4af180bb76bf925ffea0dd049893ded05bc81017f1759e0b34e3e516c01cd33158300af4fb6b4eeab825984bf183a286ece037fafeb054aeac6118c20f0f4099fbe17dbfed120756747f153d64159d5545d7a8a25753d18528157dfe7da238d2325e3e0f05ab231403f5ecd2382b02c4a188876ddad9be2c02ea2758fa65c5d8130fd85c27eed76a5314b80d9decd09896405c6305309caee58e451ef0ea5839b547ec0e3579cf9c9d22af8bf7a1dde9440d01abeb98aa5006157914358e3e25ed40fad7596b8311057a5fdb38182cfad4464b206214e3f5af10ed68d23156d1e492126d3cd34c73d51016c9ddfbfd9f6259008134047ea484acf38579afb376bd365a0a1cc0c6eebba1ed74b9bce34b86a84e4df3af327b64a0d578acce9b8635271a761752cacfade845807bdc093f5c5c342fdb26a3a09171fc84048e77aa0bdc0552e41d1f2a4aec7db7dc0a0a332d7d81f87fb75c7800f1dbd6376392fb6d7a4b261587b706a9053aecc77b8a5127ee131d09758a843f7dc1df6082e912dae676540e675de057f3a940fa4cb541d5681ec067cd9080b0d2795ee745f7e976a87a9efe0d76316ed6f6cc52cbb1a839155055bb135db6c2e37b6eb9c42536ee7fbbcf3c336bfeb26f88adbd42cf7088154a44ebacc0a2efddf2d2efbbd90cd02f4894b9537f92fa6c9bcb8cc368b5830ec7cfe25303146c51360aa4121a44b0a63dfbdf5aa96a0eca9431d424585db1c385e6a276c9aa5345618738ca8de8781a4f74d7b16651690cbcd89e88ea89d2b0cd9cac71d8d4b860ce49e01180541b76d955f273d241f07f40018a387be0e9196a1aeb537282c77b5c6acf8765cd40a2e7f536e75b18d543894998d12cf2ad79056c15c68c5a113770f206cda4145096c59d1164ff981d97e9e7a74975cee077ae31c29ba4967ef17c8ebd4cb39641fdc2cc7d0cbd4f66ea4a5b60b23495f2b70c0c58edc8f2270a6f8b779408e18291b9c006f069f23440032f5c2b8089dd6cc8119e27b55249c072dbf76469de695654ea1233d068b3a775ee8630bd08626ce36daaa672518bbf0e2510e6c0c9a8d8c898a209e3a4f6eb3b11da9b34968f3acefa0604cd093e2588f0963e9290aa597e94b1083e587e79d67d43e6409197ab711effeac96499b09fec6aa25b22de4ad35c8665db8897c062b62c2d2866a268fa3fea58c212714ba90b90d156d3405ea64103b6db325af6966d3a162232b1fc54b64a362f88481a04206bee1c3924fb3877790ca52b7f239ab69d7c990b27060c016e10b70117c9b3d90dee9ab79b44fc8efef85e338c4247f7246d38d60f7effbdf78a8a395b0ad43b2d2a38df056a9131340ab22f64b1e9f68ed6a66fc2b7d901f4ab8b116f3b43372cde6c261326eb43974ea83de2a35624b6b7e077195a3a23056b05aa67a42d1af3b8751937b656b066b7ee78540c4f53e4ef7d01a8850cc96af02c06a253ffbc5b3dfa5c5cdb1b19356e4d13474605705295b24af56ab09026f282c040447744e08e7e3f93db9d2ff7ba205794d31fbfdc7c4cd4cf2f0952be41a51dda466c7181c631e74bddffcc33dda05398d21f9d8244b7c9ab3aede717cd827e3f45bfe5e06cb13d5a7aba09b86ed5ba3762910ff9f51ee4f3b313d0ac7c7afee32762da4cc327b67d6af705091ed13999d9a9eeaef7cd8d7779c840afff1ab74627615007e4901f8302eb86969542859df50b2c7c5d21b389d8933bac8b7be3aa40bd2ac9983c3866963a2a7f7fbf10c774c01976c5bac03f70a36736b268daae4c3c3f5ee66cfba755ab5ddf383b5227dac557f123aeef6502d47107ae6f6d8e176c917b7ddfb6c84a841872efe155e2fce278636f02b61e17242d8361f853db23d22d2cd862a84de2c6d391174145fd4b7851f99a8f87d34bfda8d995484ad96ec935b00fe8f43277292f88471f565cbb12aeb463a1fcc57a294847db63bdaeb6a6d1af291830e62e83508cd3caa7f054069c71d2c6984c0676a8677237d9dd9d0bba26d0cefd7e4ecd9e651234dd19629aab6799b3c24c95dea818560903946db9364072db8b9af49ec41663401feb52de97b9affcc281f95ff4292651cef14299448db14820c2c31dea2827d1102b74f0586cf8c15b91a189ad8f6963e21cbcb144b9e06d8c21c51772a1e65426ddd58cd70a6f5eec2b730de10eabdec7c588a82b6d0b1c6243e2c5d83710ad591caaa5b80a3e5b6c78a85d5d9171cfdcf4bc1801a104d061334b5fd278e2d0231b47a29335639ab6d16ccacd43eebd37f03a6a0fd0a497b78728c66cb5d8c05015b002dd679d4b6ecc1b1be57484d63a2bbe3330a21c5fe0b753e9ea80eb341f87aed22c8a8cdcc5d8ef1aa2b1a9ccb3533f5a055870dbc1c5a7c5a1ced8a780548b4b04d576009f9dd846c8711ec99c893cff5e0aff94ce19945a633879854b9de3978465664b806f40438f654d66d4906a642d003386ab92c98e400c474e0b9ac84d9b13c102d3c3c66b2b6ec5accb635d2afa3fcfe618f24fc8c953f8f1b0f8a246fd85ad3a00d4aeeb6ac915a89539c8f02c9d8823834fb303604cee3b9a9265cf346243fd9da2039bfd3a58a33225c19152fbc2da08972809bc1958d2c5fd816e995c75df242fa26678b2b05e5bbab589ee9426b874af714f7eb1c16f86d57606ed504dd4b523b2e101aa525c1c516ebe5002f25e96adf9cbbd0ec429684c5cbeb3079ebc893b6a5fe887bcf27509ba63f2949af6632fae6993bccc9f5f3baa976b7862bde340989f7c4616480a05be8122c8d31881a8cac52a5106a7673e34e89fb763e555b09c4144987c8b654669c5c24ed8fae69ee806ef8e140a9c630031b2806cf33f6b88cf722a8ad78963cc022e51f9716333f516d52b6152efd926b8ad1d8ba7a1c28def59e9bab70ae2d4b25d330de77de0c34308d9641f0d9857fbb92b2466960621078154144e6c83a4493015c8cc94996b4e8f397bd6655ee3f496aa3023744c911b861a019fd04b8f95ed04e605abae63c7c16d3e20820f049e8eb6a1b1236c710eb094aa21ebb3c570c86eee385b5490f230719e781ddcd8df6e73088202b96519ee2be7dd5ca73df1ae4b45cee3e059da5e1f9ce7ba325dba2dee3ba68c86721253fac6c594d4f15cc8950d5dd581fa9b00aa8adbc14a7e2878260e21abe8321f4a32dd57c9abb75cf2bc31fb1f32953321bf6dd96bc9ebc6c579024226a4e1e80852909057cd5dc493ea61d70a8430020b900d736b009c3261003c67def0d9843b86a2e4adfae24ca1134264d730ddbc314456067fc2f7c6c86e400d54e9474abeab69c763462d91254fa1f7e9e2cefafa5a933a29277d59d0c302e8b1f4dac23b70a0ea68ec29d8c8b2e03c6cba65c09ef36f734e03e259743fb223b7a9cc7f9f178542b27432b8708229a25c2cfdd3097decb30b9104dfdef068a0f64bb6f40e0f5e2e845aa0f131efe0e8026bcc936762667b121b07e894628b7088d87b90d00958181774c2dd1225d324c69db625801f846d5037ed7f1dd6cba6464a03883e0ed863fd746fa11a91b987dcfa7319ef66b91f0a30cb6a48fb3c61be83876e063dc2fe0a88604077ad5d72722d4362e902ea1d6ca5c446b7337b52bf04d4f619e85a56e45aa24d7c5410becd53437cbc034e61881aab8ff180529920bedfbf9f9bc5ec52f14b63f07e3a401f625908af98e435cc724311e72e8ab8594b840fcb712234de8a763285eed2208ad237f26b90f725a4517442262bd196ece29b3846925c7a3f6f51bec5034fd4842b232e8f8160dbfe7adffee2f20506728f57f1d6fba31bf34074877199512cad23276a992b987088370c779f1f202c6a88fa738c9b995289e1063ad82de5acd674cdfa0de7e168ad991c03d04e242263fd7c6462f1a127366171b1ea65047d839cc6fa4e5c7c577070d2426c82f5a90de92eae3750e5b89f564cca48742cbe822b29f3fe76b7f3f97180cbe96a12777c18f94dc073cc081a3fc34471dc7459b8105a1e766d94115ce21876142225803e2edc10afdf0696e7f7d645d6b07a6e52cb379a836703d291d065d63a735f662746ffaa0b378d61be3ab450cb93373086f222071766f018a03931c24d933e34a5f95d510bc8cbef1aa05473673a750205981c0b4e0bc80d09ca41d4a22ec90ce785c7ec252c53a0afdab88389e06429784a8ff2f1833c10d8f705634c736405a91e0c7541a4db37730425992efe4aa2180df555550950451f7c42ede3a8e8ad1d5c33fcac63b619c0ca080535e0663e1d7274eaefaac624e526621219723a45d1d54258c4fc23dd8178113fa72e29f72edae28d663f8279d36a4ef1fda77bba4fb794e1f4c088f5228cbe13262e0913f0501e88214be809175ae16a23571f9b575158cef2525730c8bd49d12903428711350bc986eb9eb6c2e80f73469d221596f18b9801fa8a75bf1de4afc01d56ded5d9524b330dcc2ad0a22ad90097cb03b8b1131f33471dedd4e7115065b5c2e62d0248b81b3df919432d226d9edb78c43f8539391a9dc39aa04e9de016200f8e7c7162f62b1dc2d019a3226420a5f36dea026949249e814d41f4c75a5e7201ba153c0a68fd36f780220ca700da159e1b7b6061a91f9e87342398d3709a6af3fedf757d1acea52ca378b1af105d78e171e6b1ce28d2f904581ea82ac325dae6521c9acd7589259717d32cdb4f2c7688c635b20cb0fe7f828faa28454308323405aa0060b4b255496665332ca0ffa0e240ea8a0321a0701ace322b1be2a1ef065d852b670ccd7d5703220ffa4b9d69219f704bc29e51a736dc7912d9c355099f3024952627f8f41e67d0278bae2c0cf63f51b6551e11cc512f803472df9306b708a7a4a813ac0463ab7b4ea0581ac8563d39fbfcc7c092fe682202780e60f9a802c329938bce7f1b40fb8b3f21727f6bcd547e9574facb3e6820f73dee7d6b69ff807d1e0d504453b6a9b3c38d8f29a87dd4f48869584c38f30cd5db575d4451aa307f8d83b2a7e5ba5ea35d9fb1193f5e128c0d0442f0a69a3806b33ffed120a95b232da26b2b7537c844094dff1ffd370f6f3452d2860f957a903e9eacb9e9ea29d7a3b026a9f98dab5b07acf2b8564f233a31c5607d0e0e0340c75b263959af551da5fce2de8e0108526828842f8a35bb3b0c37cc016f6e21c4635eb78265dd7dfe09add3cb051316c120384a2cef4c641970bc621e824fd8a4798ce3ef3edb01a1443a202ce49a4c8330fef41f3e375c9e43a434f06eef07adcc0188ab4080a91194f754c2db4e882d6fc629788193ade617a2ddc0697a661ac0b0485fe9ad4a5f899c30b7cc7d9eea4bd53e02a32dc246cb2abb90888d83ceee53cb40a3678556d718d9a285d0eb5f641180e3f9de5b23d9c39a920a5d96fd78bbb1bb32fb65c1ec4c2a6574d819c56c3b4c2765cf3832868b7394612097029190101f9458b32a36df26f5168984eee2732a6a9436f9869a056843f2aa806a9a8b574ffe1184828380e726b953dc95732239a4e40ae2c88374bf9a6fbb019be53cb9aaef78a221d329963cdfa7ca4f4052aff42b820fd4eb0444a82e9910e821af4bbd273f40b79546cdc085fe982c5064c078c38aaf8ded8b54f86dbdaf27d294040493e9d8652910e718827bbc69b5b25dd5f8858b6635bbe7900d488925ec6f1c39f1d38d469f5f990e1370994f701bc23d128fcf96da4d0ec9e6f83c1abc07a5ef0a57479d41d945bd015a4f1443403f7fc9bc0272a343bb5832be24c9188879fafca4a2857b1e7a4e4b92c7cb97e5610c5547d2abeac07b49bed4d8fe95aa83218341b2743bbff33ee8882b3ad3f62940a8405a4b824310b96b77c999096a7646776a541d7523e430686c7b84a995fb45327e04f2b231befd5dea2e95249a9ad3abf46daeebd724ede623adcc488ef0867f29c2c2ab1f8d60461bcc3b96aa0c81dd54cc2689914d98bb1c79008e82899c150664bafe7c85552fac92d50d230d48f611a59de72056029ce4b8371fd6551ddcaf088fee25c2aa3e204f8d13088f4732aeddbced3e220ec49b25f928057924d5da67a61967933528598a779439e0b21a55f7947a06dafa442d4fc5e43fc245dbde919aae61ce3a96108d6b2c70003768f31beb71b0ddf8a6d28f392e5ca0dd1621a8674d57089a0b9cd909030c435256fa0b24e85433787d0ba6a981d1c2814aee5762aa0d811d14b5be549ea241015495ab83894755a97fa3f8b5d9a8d16652558d3b45f4cca96da643f588198fd535683a395e139cc6d9b2bb6557468f2880c23e7ac7c6cc0c893612b55f71eefbc2c837d0c1599bcdbc51238878a5a23bc09e54a20015feb02f35930135b0289837986132759d661478063c69c9c4eb474c3d394c97843415636072865a639c0c5d880f945a6349038988209bda1f1702b3e1b30e02091a35afd34a7977747e8d345d1d360322692e543ff33a32f38b4a9b3a1eaad3b1f08be813d8408491d9e08919e292a078dba6fad369585b43f5165af15ed02d8e86605a03ef5f99b0c7d92394f703fb29bccaf2ca0496b6a35acede4711e00509f863fa9f8c216be7c6643808346eaae81273bc89d10f1cd31692f6e9ab974c1063dfac945a04a626811677044857b3ce1513845163f1a21c57b1b3a1edbfed2dadcf26eb3ba89282e9f56c5b207a34fd35aa0156748289d3768c5f06fd39a53963c84b54880ffada98f2c57e2ede12693d35c7da3569a35869402b000ad955aaef2064e6a21ab8ddaad79193deb1e29b3e11e1deb13e3a44851524f8812433f67bc44fafd16fb1c585e9cbbcd80b75ce0ae31a44e839fd93bf7fdee1065cb63236cf189478018c3ab0f10142c174e0971986357d1c080737708e3bf96eb791758e53cca5ecae497264753ad17c8bf37824cc8b1cbf6cd6f1c89ec570d95228c0eff877ca5cf193d4df5bcfbe4854925d6c9b080b7f954faeee45ff568ef3a7f9c3bc8aee81f96368dc0a15c1d8d75463c1750b0a2b1b5b6a8b68510ffdccc95563e10018d9adde0981fa7e85e5caa0cf2e7257dbf163c74a0a6d0899c96a26d0f4329546e552b33599e7e91988a395d6b488d6a94c58542c0d882b4c4475676c6b09510222fd5ab1b15006ae85a655fb8521f4cd42070aab9dc2862f525bead8190830bb9fbbbaa7e879bf2fe44cd68db110a9c28a11f6e8cd979b51c19f0a66213238855c50a2022d5a72c36ce21c5aace10361f5c4b333890da0d2040df2ea7d934805aa1dbcc453a136f353bf1a909bcdf83eb1eef18b7a6b8f345317b0d86bb99acc2c57a93a8a575b6c515b88aa454f93ff40adff2639a009bc930389ef631d215f304fb901c07d3df3a13714cb4afbde160bbcdf9b9a446b686c67cee4e5cd08e59ece417bfd986331b2c0bc441b1845bb8260a3b91b2b1cbd922eadbdc5982c3a76a3a09946f1dd8624afbe24aaf156a7a5a488a75f03f7892d8df09887402ac70b3198964698360013f4e17adf9e70fada40b0f5b3258177665cb2d0baabedcb06079b5380b5f4228cad250d49669d95b53f66d05621bab7901cbf5f30ea46abfd4d263274d87316ab60f454ab3791cb28636754817b1e54aa328a24c0f537ded1396f01931875410fb62443f8c375f87ca7c9d2cd85b53f56aec63be022ddd24688bd70e4b7bb9883ec1104d8962fe3c87ee314b4bdf8f575e32b5488cc1623d311fe737a3305b28c99005b6b64d870d56c94b6d7d44627516b4cbbf6f1f01f04f4be877dbbd46e99a29e79a01680eeb46de61b059ad22d54d35695fcdee16db50cec2e4e03c3f6ce07c9b4c40651774e41b08bee9932d05e537d4f65646b3a39c57453a6f9df3cf1ededd11dfca0bee136c020887db6089213d07a5f29e79f700042651b7d204cdcdb289b94330bfe9e1daaf37ce820dc45a7f41f01812c950ebe55469e169725b707f0b4f62debd2ec837c206fa5a4d0832013c922d8fd635faff68f38639b9fcedf10b9e7f918bce0b6891fe5e5637fd486198977dc1ebc5baad18e9d56ff80af917f7f90e0b9ed8d28a2bceba9a6b87f9844538d9dcd78386f26fb8cbcfc7a4b09ecab59b0945272c0405ccf71f90364543440a8003fbdc4b93b08ba6b69abac8c7beaeef9f2264e6b9650d82af858c43d94d21367d18b7166d594a0777c4aeb8462e7122284d40c030398d1e1c4ecf7d205aba39ad945eca7a2237c3672afb9ce03d6ca05ce39a15943b3620f84c14ebcf4a0331748265a37a724fb736541b1fdb4ac99df17fe4d3e972afcefd630547cbe411f387803581c7b1553f9d78c58076fa480f726243a54ec12a03a09729ec40aa351fec651968e5a8a8d08cfd01a1a71cf325bc4d6df72e53b75c5964202c9ed168dc0b0a2477ed367015b110ec6e93946fb115a97c0b216a462d703b62a9186b5b1c908d719566f78357e32e2aea3a22eeea9946fa0196ed813af1325f6484808f662a6b4d8e78b52d2ce8f14309bc7dda6e08a8df0ed20d218f845f568ced1036fa6e7055bf48d718d65b9713729dc3f0021b31041bc0622d8f83708d6e5657d62b3a1bb4e187661f91d68baf89f5afec6327bbaf864f904754b7f8700d6b9dd00769813db221594fc1ae81e46eaf586d1b55711025cf26ed0022c5a36a39dbdd448ed297c7a6da98c7965755db6392fb2aaa7cc481e602afd092015eb5a351375cf0b1a71c36c29c4991ede3ba4478d5b226ed567dd0652b68c6eb0735e2e8f9dc8f238c4d366878863d16e21a978d5fb5353f6989924d29f9cdcaed65819cf2025e2db251119e90240fd8579eeb80b6ce3a878c48e2279c9b055c5f50fde2ccbfa2b93345912bb48a55a380e7a591e24b8fb384ad9434489969f0cdbd63c61a6a65ad5ec4faeb52806574865795f273e08874ea1154fbacd62894fbbae7f3450d13e0718da5444cd975528f9bd9b09c24517907fcc52984afad424798f507ea75e849e38328cb7cce6a0642ef47f10688df17ef20cbb84020831913b60aa541f783a0541eac5cc16f6ed75239d6bf6d87b847167d34702b3dab31957b00c0660474c77c62502950192a0a63f201eb03c8e574b4d91a8572e412c95c9618c13a9990ea03a4a59190c4a3ab6a9f301b6a93374010deee37c59993952708b22308a41719716fbdd84ba01c4b98ee568fe0defd72a678b71f1ab4f2a982399d5418fecbedade0c3066064a99bb9d24bcf1b138472fc97d4b8e3170c471daf3e621896f67d49faab0115088948826a5c71bdb9abc815ad840112037795be927803e9e126bf0bef21bc7dde4fd7afa16937cedbdde811b990bfe29727ce22d41dc6b1bedbd81d8d61add25097f1863d9c0d72562f47061f9f72f4e421100e181496f80f9e00eef3c2bb9e3d4de30523d76ca885076cf29c96f91243d061fbdaa148fe7b81be2228ab0ee10eb7536e4dd4f5002e4157e940bd0eda01d5c3b2c75756071ff7b62f6449422b0da3efbd7446975f38696a2599707aae57aeceacaa08a40b976e4605ca2274798c826ff8e20b9755cea7bcb4e887e8b3c0e48a410fd49747d6acea6844f153ba8c04f01e9201dcd875f431e61cf7d15dd9d216c58109ec390ef98d8fd9c95743ac3e182bf34d306f9bdf0d45ad754e61f8ae477478eaa7be04773f94a502197f8f7529169719cd0f98652afbc58e3173f05a38fc46473e472a27ff5867885d723c9fdd0db0b6e5114dc6efb4147414beef73b018b4fd4e91465061207cb3c3a2d21846af5e0f8106b2f93d6065a77d64dcde827927c702420811b48e6cbad737017765d8556b87ec2af55b1e02d90f64fee4e542690c606f1da299c1f737841181e2048d9002c9d35cc39388ec5ea31e903b782bebbda364343ac9331697f444ac8d3e11a0b21f8f0a10c682e2f220a3d70fc063abb9a1cf416c6d4f245fb6dfbab2158e0f02063d71eceafe0b469bef0588caac27e0e5a15eb1938db27bdee18bef5644579890e5c6a0f19724a3045bb971a3ac2bdbe6164c9c41d86586c806b61172348028da363c66ed529c4cd328601706599c2b2b45b54817f4bb160a3805b4245b47c5a4ec82a9a3ec54561181509e9de12e50506869ab98256d74419540832a1a161e9196108e4226425f806b936ca5a7b8add9e091239bb6ff447852223889aa325190e0b65e80efaa7aa8d332e16c8b4844754904a6e18bd688ecad025424496ef0f333aaa98da8610c1f009ff4b74df46cfc2785d8968055ce53ac7bd38228b8f7930cb68fbb8971d6369626a24b455c8d24ae561721cc33159b15d99527ec559290d713146e6c60e1d14371db8a0f245343f5969f92d528417fab78ea0d622c288ad4048be20867ecf2c328bf7d45f02f1bb047a0e7a1a38a9094acf512d9ecaf2ceb1448223d236545a841496bd8b2f5289e5ace8207637e12ccd8ec7bc09e8ed12cfe3691630a706223cf5923ce6369f1177c85a6d37bdc1846a94617c3138011cf002060cf48dfdb3894cb97bfd6b022e4a69c801c9c3198a6727e8e4bdec592daf84391f113901aa20b2350c685bf4a621048b5e030ad2a5e3deb2cdcc55a5586836e76bffbb0f32f369444329be46b50c989de12f346b2e5624fcbbc95b4cc98de217551361914f9b913a841835897d6a23d50af08989e71d39b520d131115738501116d557292d9e767a73425accf917f59716ffdc996391ed97f738680a699478dfd395162f13406036834ad8617d9369ba6db9775a298a44ca292d5ee1feeeaeb33b8bebe430e3358bfcc19a3d40987fafd5a979e9c3fe256f007495c0ae04e8cf567fc1eea64fad210339d51bf118bd79f485e31dbac5379bcd15d31a7f9d1b6c303858bfbac52b90cb7cc2dd8c68c7b273249d90bb23dd0565805e3f077ea8c58fb54e1ec95accac65b1f8cb93b6d65ebac59f519091dec22d91422e3e89d016675ce3c957ec4bf12926c1311073908471abe5a40ba649ce749dc9a7e8ce04bec9cc50d77bf8516f297bcd29da35d14c00fee0e2874d504d3626f1f163d1d5fbc5728f6070a9829a836d0c0d47fa9ef81333ca19c710ff7331fe7e14dae315339106e2afc498b34f3dc4ca9989591c0b50a3c7dd634f0f79c17444b7076b3d3a37c057881ca74b5f554a1eca82abfc468689ac0828196fe5431244b620effe5a2ad11b3609ac9b1a3a160ec5af1beebad47be2bbae2956928ad3b70535d58bc11d303c7a3a4697a201b29d44f8849817c827f49f9b64035fd657aa22d7c097ddbe325e606d54c49c5d78e18167f00aecdca3a16ca5bf52572f76662588ec869d526e233f6637344550c544d0ea0eef46734a44795cbd8d076840be6e3673e319775ca95e4f351d2115c99e73ef451ac3e913f6ddab6a9e638b8addbce145bfa595795d0d2a221dc8c2d403e63e0be85e7b095b26f100d85a9ab5e1d3abafa5532f3e71e0074c74e7a100787eab61a5917a8bd859b49743ce12fd925bcd28e230e95527bc646b69ea4775c6939f66e6f5a2078081bd34a92e15b08bf08ec73b5f31c5c33bbe184d076669d73f31b6ab54cad0c69abddcf60b3ca9aef79509480266576218c4bd4b50185f1d7feb093ff3f8a1481fe312822142ea7b06c190be48bb6020f2016759666bb5981664756fa0d1dd3265d966874571e4915e9d805589b3b6512de8e344b58772685be5119ea43c50b1878e700e86c24c59a081b845f86b4e67c6b9ec02c5b99967b395e9a7025b4876daed71b0cb30d90916208e2ab924786d2e8be5e6db5ca6d34dc2c84e97f159390645dfba4c6f0c931f7df0785bc051e4c0e1456d62604bc515ba2840a8bc5b5e2213be376523f0ab7f7c42ca60977de3955b2ac38de9fcaa4882de54893ad903d04a4b6a424fb86a767147c9f596319a9a667a562b6bf5fdae1cdab680406d9e7390473a074bcdf809119608864a922af4ae4183545dfbb190716922a3a2747709f0c1d009cc7ad4cc6deef1435b0e90232e5f8f5b548bfcc3b496cd36e8e9aa6d740729dd5a47f597df37bd8765092b76ccbe7796d07a3809d3a84a329fe41765b32ae667ef1a561d2edfe4b8ee21d3e6f2f878c5e24185f0ae91a1f185f70b22ee69e4adf6fa35235d0a8eade09bdfb52899e524b30d39879d20b0b2228d15792ddce9b6e03a354ecd8560f3ff1c62091cd76809bd3c2f6221dd181b8094a37a74c66af73c001187d6bea4f729665be251eb49a70f64759ee2045c25e7dc39c8ad576a67cfe76deafe0717423b92832b4ab75601efbfdc35af0b5911ae8328e9c5208c08f9f7cca05fd20a862b4bfa1a84114598391aa64c21161a19d71b09f4f3a5efd5d887975dacd07ee25d5d7462058e2dbc7f90ccee1e967bdd057a44ad1c0d89c7b8d22013f1e9ccffd4cce086d11fe3230a41dbc5d0cfdce68ac6338a283bd758f905417f68be9ea1fc8d089c4ecc6ed8bd48925bf790526e4b69b01746b9ef640e01aeeafbc8e5c9827523e5a485bed843e6ea035af8ce226f75c8736aeb3d9c8f03ea0c4554deabd49d10a73a9a4c38d8fdaa00ea9dc3b7ed9e0146bc858f1f3c3673e3f0e1413b1560006e722b156164f00313b5c45aaae0c9a9b7ec3d92b20961fbfef1b9f5462b85c2db9db6ebf3f1dd4af5b378a62f7a23f8daa8d907fdce4bf1cd0c7871e121afba90781205039f34e0203411d40eb873382a6c2995c777789621c01a15cf798916bc4c81fca241dc82fbb719845ebb732acf938dd450d72ada5ce9b838e0eb37089fe4f814abc9ad2f09e44c2298048eaf6e6f8b954d1416b82f4e0d4db50ba96dce267db46902be740079b9dec5fcd940921edecf3ca5fb3f689cc022cebcbdec8cd940991eeea1551f6d9284778c14dd8967e2244d6ee3c82c34e7c3de02d1b6220ae17f2d9a08ee1ed8786098f930ec7dd88792a804bd17bb99fc2e27ee46298b381309dca7028be9a6bfe663816a687d67e673014df7f1a704a6e0706592cb16de211692d486ec71abba9a06dc6a9a75f75580394bd701b1ed205e0d9a00c06a974dd29b03b133e01ef63a1bf2b9496b2abc85a877e3371b51c0346978a04e6eef50a20cb235c0b413ff2e0a478b2293a921b5b6f967deab062eef48f333cec36e51ca7a67476bcce1454251c1bd0bfcaea4997834f5debe8960b558720a428edbe9c14ccb9135e19ed6335c3f41f8d4f0c4d545c1d59a836f11f95c4a6bbaab9c2e82a422785f930fd8c936dbb5b9c09667c497b2c2d2c218083d439327f8fdddb60a859e9e93e17b462fe04646621f4dfe2ef27e4833e2d98a7dcd07b4493239f86791b88b417f90ba802996d596c9ef7623d1ca3a83f72e305d58bb2075545ddef981acb4a0a2c0fcc77c7bf048ed58231c0119754ad1842397a5291fd189d3ea72b80c6351476cddcd0352cf767ec1119a32e9514a404349bc566127a5e520377245ce1d0aaeb29f9387e6401eb59d2f9202e5be36d46899900fa4926e1f96f30cdf13d47466834079adc3295bc6c7172448f30f1b5580269cc91f4c3840fffa5166a7acc605fab865a0a1f3e5df93bd6185148257560f2ecda3d83182685b9ce0c8c28841fda05f3c8252de5f5255fc5aa2e6d3a140c18ea6a4e67a99ffac94b481e76ef1862466d1e5bd9a678627be9101bf4d7f7bd2f64f575f324547bb173767fd690573c27b511e1c8e330e3250e5ac5b771f421cd063509877a9209b4964b7d69b1eaef2e545da2b64ea8fcc6b973a790e9a8bb87f9667b65bc855d3e8d6275265d10b6595d9910b77555af2d1a8db7cbb4a0095d24f8d61e60e21286734e5826cc9e95cb42d075397bfe8b6e479ebbce4f6edad02f9e1615440a66260d8851d26a3220ceda0258b55877778cd59b9b3c727d777b8072edc59a931664816710931bab7817807ac85838422517640a151eaaff4bb3b3f2db0b63b513d5bddb6cc249de95430a8a6839589755092bb673d8329c14394d2ac20132fe3b95b17b0ee3c2d22de70b7dc661d2a02dc1ec80c2acd1e98f5d3fb00e2f277883520bfac986752a9501785e854ce06ae3b7d2f146054eedd2148071e084526377849ef7980ce24912580cb9b81e4b0bd2909dd0577a69fba12d3cc332f0f8f112064a977ce43d2812f6d11ae918f1d92ae9a145b5fa06f25b6829114f505dede4fd7ac0e29b2e7b1aef6731f3311e06cd0b175ca4b31143cee1f7bb93aa4cfe4c1f0aa625c082482929b01599f0f4c4aadd0d8afbc3d00b963cf74dbf0c3b45788d32c366dbbff7ecc37fa9377aeb18b3e72793299e57d71281fc16c5cd9d71410504dcd3f0e42d87b3ecbf3b7f0cdaf005cb6cf5796c411d637e2f16a411ca06dfcbb15bf4be091b57d17b12b0bdb2c0a4510d199a4f7645058b3c3c9ec494ad064f3a05cc2ea3a49489879a91d7eec431f5b4db536838e20148e7d68391c4ac04e200dfdd887ae48b62850f52f716b8501bf55617ad503ed3a449d285d6e41c2670f36b5fd429dd53d195cf97f88ed0db68085b78ad2329a919f0d486caf5e522705effc913e2fbcf314eec0d25be7b991e4dd9e91fd86f70bde6112c460008e62d936ef543f424259c36580ff9507fa093a85fd09bbab4a7f4566a0c145d38d0f9b4be5dc350ea98ebee3ca0226972f9da5bd8b59e9644ad8de0fc06048b59914566b28049547b24c89a7450bfbf7d746186b794f35f4d8616e2e866c4863d39cc81fcc170fdf4f324a942e9f6c2ce1980292d3fa1e9496034d2a01a75f63fa8547300278044cb08c36c25e773502c58bddb318496b9b7a03e5a4c602f479732997111650cc95ded5213aa7e68dcc129f2eb2d4a62d2b5247f3197ed8a7ac3f434e2f980ab6304062d27772c519e2a8c66336d69461eb955cd67ed4ffd9f0176c35455653178c1e1ed6f45cd92e32d95df3b4992a2f9a29918abbb5a87df84705b6ec330992e98bb57a7171295ab04cb79e7016136953de23e918492aafd52baba2b5f416430411481bc200b266a881b7852b66b777f9478a12fa11d13899c2d70fc02f633909c81b767c661a5deb1637b4a956f1e0f1d21ea38a12f34f52fd4f5c52a596ba451f7e3b99dad0eb13467c4ac2426fbbcf94762d48ea6526378725bd65ccd31814f584e9295e766143798aef9d1735ae20b0734c8316d9dbf8a23bd97c5e8397a75bc9e786cbbd5a02bb06d95608e6dbf2bfb67a23c1a711908806ccfe3ff93dedc9fc893fde5e96efeaf98c581efdf8e44657a79bd051e8701f80d26bb1d1e58da901957d65be80badf088822c0517d01934360ade9f1e0a84800ef9c4331394122d12653cf8d102d39672e448e9347e89780153805c6c9a306bfc94be4dbd32ba70b8a8ebb261bd9906e0fc68cff774b7ee27236580381917209adc4815085fc5ead9654431fbc6f6a32f64f41470f8e636551c40186d04058b254b7ae382402284233c7e9f27cd2390c98a39936be48b3874378a92a837f49e0c4d2e105f5358851a116427e23ae74a6df69a5783161e481b7d3eec05d650273e7cd91ba54272e115e110517f33323f2d4b51c324795e5b47f6fbc4bec04561d04cc792e04d54991604de278f135ae00ead0f44a36d74bec0edc6ec6c3850862f205342115cf3547fb2e72c311dd8908e89975598243d5a7b94f5a433a4ca3b00bf4b60f1b56aa0a3c3ffd49d072bce1d89b835e8eb71ca8176dc4b8cb3abf6662e44dec9231e5d732027a16d74a204b67b88af9b81156cf8c2bf1e146eadd10b29e191a6423473d38dc70a01e8e11f53aa7c09c946a022aad21585e30141a3707a9754076360f0fd5ca4d883532674dbeaa218c67ecdbbd30679203e3333349314040046e1d198419d25e6bd8dc45ff788441300010ef732d7f4c2f9de2bd7c6ee78f83ccb66236f12a80dfd84ddd5ada68c9681329654a520642054b05630520e71d4a032acbb23c6936f679c76d26eff5721f7ff9cb5ffef2d74c00642c25499224cbaeebbaaee3008973722b913ecf4d1b574ba0b22cb9b2237548922449afe23297b9cc652e2bc000669c322dcbb22c398ee3388e244992dcbad43ecfbb4ddbb812a82ccbb224754892244903cc98329dd1d9b66ddbb6d1d2c7cdcbae2cb5d9fdcff38e4626ddad8e4aa0b22ccb92c63380f741c02e974bac15772cd319d148e9ec5257bfedb12eebb2ae91461eed576795a8ab33aeceb63ad3eaecd6d901bc0320000140727f027e90e025a023c127f72be055a3809a1a6f5a63635d93ea18eb7fb5ea587fbbb81fb711bb9a95c776e5ce23d1c650a8a20cb6a73d0f0463626464f2685d3468dc68ad635ec35291d2b23ccb52f4652b8a3260ba715fbead0dccbad9f49bd36bd9bf7a164d09b38c514aab2542824c4963b67a168dfb09aec34e97000d9915486dc0b3cce195c70a8113744860088857cfa2c93aa06508e64fa65ff37c10cc23727f005644274f9f4c93398ef3d1f4b2278f13a8ec91c119963f949474ff8322b12241457ef2e82d589120b0223d140b1458868bdc10212232232223e204952b3009446c4024e8950411490441c4959281109d222144e164ca0a788c8865e1040e7870831e90cc6e966071a2c7921eb60b2c43453e86e0418787123c30266605ee8266c03dc049f024a193c4cd902c2d8c91700d011a32c510211f3a9c74b3c961337948ad1b5b7bdb305e15b1681c4891d7106a51c1a9425af9885cb9bf2cdd4d0dbfa07fb2cdb24fafa496ac85a32c611478b445b9df6699750d51d714754d25b59674303afceddbb8bb0d08b637bd8ab85978fa9d339abb6631de366eb5f219db756b82b59b3bc6d6863633fbdb77b7f94ce8cf61335dfb726c9f15614ce0b81111dd94b99ad6755aa77523ebbeed5e086baadc04ee44ede3bae7badf4459d6be13b5aefb6ef4de9c73ce599435ed29a594d20eca9af6dddded76276bdabbbbd7a1ac695f6bb53f59d3dedaab699df8537e0a2985fc917ecb24714c2177df9f4de949574ad69ea4759ef6f747d6349792b5f105b13c027f51f78eec1a1b0da3c023de4870cb9f593cc775b6394b983b9788bb737ff80c7c8739a3ff12316b9cc764f53bd9ac19f80f2e836983e43e780fce83ef4c1b3bdc1daf715fae83e7e03acec371f01b9c9c364e77c77bdc47ee77d7c9844b291075b94d1b75a4cf53ddd77de59309975220ea729b36ea489f7732e1520a44dd93099768267d236ed3549754b3965baa38ade02c7f6f583767dc4a2073bf6865ff048fac4c8eaec0b83dcfaf05563e83feaa7a9e83e0364170ab9f4db5a975f31955f3bcd23fc17d3d9b556dc09ef4b3c1cd9a1c47b22fd621dd7d27988ac0719a55739af54ef0e838b95a29cdba334a293d41a3bd331b2abbbb7ba874f75aeb48491cd6ce714ad901de604cd8b2fd14b2f69c884306134c9f7e3654dcbc1c33f55bcc91caf655d98a1d6b56156514c18e136a24e7ea2e150afabd31d4b18de73e47d97e73d9bed7bb65fb9482997efe5787b55bad9f8d76810d039bb8f219f75e7bed53da699fffd531b3f56b63ffde12056cf68dd3aead3e2947aa3f2770c52ab61498fa22106530c1de0eda5eede775f7bae06180f4799da6699a0663dfb29a351f0aa59452da1f05bea0a0a1a19f1fda0ec5ddbdd25aabfdb1f6521c9cab8d538a1428b8fe9d5fefdd9e1b53c8f747cf8dc454de3e472a95ca9b78c3d9459aa671edf5d8992acfcff244565aa86b4c1aa9fc42ffbe8b238efa95b6577bb58d1b75de472a61d30905a6542d2b979711871561e68c7d0f61ac183367e80b18311ca867f4db259b15c2545655da5a011a69f4ac89bac896cdeaff216027bad936011366640a2352ea8bcada49efb2ce2c755d21789c312142b208690869086998ddb843e6649733ea2a8d3336c3982f02a917302f4d1a5900e3c565e5a4b10531562daa54258d2e784b1a5f107a9734c240d448e30ab99371c58d44bf26f182c6348cbf54173b452a208c2a6ff7e953d7b4f1f2f4e9accb96a7efb26943f5947bfb5ca8ca9df7914ab8739db8b0df9e62beebd0fe0d617c64ef477c25fb5315bef2e2fbd10494fdbbc5041443faf1c423fbfb8a074ce9abcb898a17fc30ff12da8f0947541017d38f9debc56ff9858d414b8e09c7ceb5ca2ff451a3d89c0147ad3913caf0a2c1841508a96bced07709e96cced05f855dce19fa2da1937386be2a05a2c25338d2713ec91488916231b612a3dfd0b5d717775fe4421beb5cb16983e33a57f6ef5cf48a200c1d25a9413aa7adb106b176fa142e9b33f4450c4c872fd7ebd0c57f955fbc0e5b7290eca4167b24847f2fceff6088ee31fbda8f3606a4d79c712fb570f008fa83b169e37b9b43f58528eec797d9cb9872852fe0f125e5cafe315cd3867d1bbe3cd89a36ecbb2a7be1cc5d69f432cb2f4064ff0d8c8d5a415436c6ace2745366ac2feaab698cac61da5fbaac2eb3b6aba6aedb92e70b9d2adb9a3654f565c4c81124ac9e4553427d514aabf52161d6ab67d1b8cc889059e395111e23384e1a79b511236646805097111e233b312338465e30c242ac0b5b80e1773098274c0921e491456bdcefbefde1c0218fdf7be90cff300a991a34e0d619b35995ce69adb576364d558254d284951b3af0ea4b2a251325a480359dbdc9f46d0c66cd764dd9a70ca767982c7f8fc1ac699c66f9d39f2c2fa21f56fcbd1f46b63ed81d3b6487ec901db24376886c96d758937fcf306b341e93e5ef1ad92cd26b683b3ec37fdb305eadfcb59dec5a5019966c89c7925d53e28104fb5cdf8e37f424fb9f7e9c5c73c6bf43d34ce371ea3901a1ed68a58ef6a3bd34971551b16bc58f7a433e7c3c79a76b3e1ea6674587fc72bc2c1ed190d73011f50c7f5396d98d2dca69653fe9e064ffd325b3975c41d9bf45d3ac59fe3f043c8e76b27f0d4b3b73c67f06cd197f3bda79224cdfc6a00eba3ca06eecdc96954321ecef5f0e568b540c6b26e5fe709cc0f6095e5aad569ea20ad484d4cd28d4da228c09d503994e9ff15c3c17cfc573f15cb8b0c5165bf4773d67755babb5f6de7bb1e0b11bcb6c569658f07782667dba580c6c970b752a4d9424f194c94a7f0577ac6bbe3cbf0a6561e9e6d500bb566b376fe5b55aea13d3f770f8adcd5a79b8ab96a48961ed19fda10b8fe0bdddec9a91a5f4c3e174abd3469d3339b62f07cd756e3318c5f088ff8648952159e8400813010b01e380cb1f6eb83c61a511231317a1010b4304c1891022404a1f1e1f278a0421824f6bf3c1e1e6135a64ed6b091e1853649661e4092b5b7909165d8cb6ab675e564ada1d59ccc1620ef66828e6e049c58e592bdd94a15dbdda6a6db7d76a6dbd4544cdeab166291aed8d6d555baf66eb56b9b106012d09e2c2b10ac5346dabdcc8d6aeebbeebc2b1ee541d9ebad38563eda9aeaef3ea47b2b53454c5ca10d18c2c67193b4eee37dde4d850d0c9544da5bc69caf3bef3429f660df969568f0e6443f3e85dd6f572dd573a812a17981034555637952a567aba064d03a1699f21344034f32951d7e0401659df744eeb34cfac6b38a0ae4149720929445221ab9056f27c5a4e5a529e9e9202297dca21797e07ba06ddace05996f994e440d7dca7f242ab257802d17899554cbb7cc6a8633ea39ff43ccff3bcf923ceaba75e5f9d0997489f775caa042acbb204491d92244994cb4ea3d7ebf56ab56e3a6f71dedabca579ebf65f1a5e0883035356929ee7799e4703661a1a9ace655c89f405266f04f6d5bdbc1695278e291044a15028d27b2892e79d4ea79317d2c0fbbca7efc18ec860477c3cfa1c0c082773581c77646c7aef49a18c2298f4261229fc30c7d1cfc60bf1bbf7d8f3727c3fdad7cbbe62af579e3276b4506f0a4dd3344d0357315cb5d5565b3951dcc21ad06d89d4d31ccb0d8ae38e0cbe4c2ab8103031ae337a4e8c1ffda65f7ea491298df8e3ea0137ac0cd17f82fa01b3c6956c31c471c330c411bf10c7558e11c78711475618fa87ee3f1ed4351e53326b1cca64fd84373b9459a3fa7e8f326b9e982ad5c3c0508dc2509ba7abc29a3de6d455a1678fa9c2ce1e6b5548b34799524c06cc798011cbba010c387d7749309fb51c3e8c3853a977f9969654aa252576d4d33183b858e842a14b69d675f5c0aa1f7d083e2a873de87bef129e865c42d38f4b8873d8a3f42e6129873d307e979094c31e38f5a3c772b7fc965bc43185dc127e7915b6a8c291451d0c332a1cbd4aee3f85a3f7207716b1b1beaacc92b674c57a46e0af2ddfd0fd6f0c46978a9001960e2bfb23d9cabc95c4d308351a8d46a3d1c80698666c227d287164e5162f4de248c421cd9452aad39e43aa81bd8bc459e60d3b76b17db3af96ccbd975e7ae9a5975e8e5ee6f65c4559e3c4d2ce3b81c73b9b4d1bdc3715b73b2be528c566dd94195fb4bfafa5aa1742814be0af7cbfdbb6b7618efbdb9348a21d7764eb821fd9fee8821a642b8e232330cd251b3ccda24fc5d1ce9c795b6e1bc6be5a693fc6c8a32d4d1e164d45dfb661bc5a3d4b02797b3abe2096b71f4758d4511ac590bfd0a4050a345f7165affd8ddec2fb753b4dc9a3af52a60dfaa39f3e18fd285546c9a32da70f525354af2bbcc6079b33fa9f943ee59b22f77f4352e4fe4dfc5e083c8e7646931653727f41aa578c4c4553d10f81c753ccc7d12996fb3fb26b36fb375b0ed659f1d09e6c8164fbe9e41e75d1e8af6c3dfa22eb84bcc081bc099f266053f4e4d1f3acb56293e9232190b008199990885a652615459a5c51042931d8a06412ede881c8141efcdc8045084041f8b96288176868c2477bf9c0020e7082c0c147089e15dca067892a888c18c20e26151c82c0524514509228c9c201f3e70764469758eef7a857ebf66ae5ac57db387b6756dbb8d145915aada8727edc6bdca8f35e1be7514ae9a4b3527a2fc73dd7c2c9fddd4d4eeef7703e9ddc4f229bd5add78fcf909f1750f9b25165dbb53774aa62e534444fe389e8343bc928b9a3c3b343f6b848fa1dfd38ae0c025a12545694102a862a51452822541654116a76d342cdbaa7ddeeb57255a3339c99b6785f6e9f54a6c8f35d4689b821cfd1cfa75b2891e777396d700da3584c1bdbfb0e0522cfa7aef915386215a4858a161e2aa0d495940f30ca8f5feed7bcfee8d2a2e22a48eebf54e47eeb2d3c727f17d2bc8d7e5401e5fe3a4a5df1948fdcdf1b182537edd8ebf57abd5ead56abd56a61d3e9840253da8de1e6ad5c487390dc980acca30444ba42f261bb769982602a308fdc7f4b404dba42f2d1ae1faf9f32a82ccbb22cc9d7cfe9757a9d5ea7d7e9757aa1bc3953296faa6688426df96c5abc7969ee66ae513e1c2f07dd0f3a1fea68f645c9fdde5e0e68b6dd0f3a1f6645adc621cbd7cf4976929d6427d9497692e5fe4ee5c1705d70466c526c91fb395a8e96e47ecc7591fb4b9c11b99f6e5294413129b2a1b22ccbb22449922449ef85f7b2919a1297080ddb2849d294c8fd2e9746bc44a099923bd4f5e3f553966559962fb41b446e21aa4dd90de25aa1a159510b74511c70869a8da8196a869aa166b9411004411004c118dee6c28f7ec51d697215ad0ba0cb6bb8ca57d04faccc3da504e5fe2e86d78202cda34bab1e614597d69c0182e98f2eaddc2e310df8e0018fd8059f6f4108cf2bc61346ec805f07cc0236c28291a0fc9203e21050aa40a10265491e2d9423507e4422442154d0040e142c80d80108c88e218e04a10b29ae80e1489156a42c626a9c0d778009c1e96e19107b4f885084dcbff593269e04951da594d64a2bada10c82742b0cc9bd4299fb27772dbfc9f5bd7eb5a57d4dd3344dd3aca6695dedd56a4ebddac66ddca8db469df78d3aaf7a5ff5bc1a8ef4a686a49b5abf541f7f36b54ea1764da1ee699e0632653233192296952cb9be0ab95b8506caf57d0574085d628286804eaeef3a684e7d5b811b54a7abecd8a132adec708d3bc8dc4fdbbd564bdbbd566b6fb5f76adab671dae546b7f346d7fb3eef924adf2d95bc8bafc9e4dd53ade148535334545e6db1da0dc715aadc1055e586e0d00d471ab97e2ae5dd50b5c22cf77d9aafa68d2bc8f2159dc60858f16fa10e4f96e8273e9ea2a1aa7a586bedd5342734682206822db306041c2886ff8d126ac88017f0dfe044278f13088cc2494e1e414a436373f2431e6964d1096113bac51df9b9baf219df5c6d18133c030da5a3dfb53b6eeafe34f43c3f0cccd2012e6e252e77dddd9345a24994b45c49645d9e73a6bb89e7fce836a9bbde93cc5e265542fa90640756eed17ebabbafa6596b378e1b75def77d258c4d27140a85025329550b6c090c4ab0bcc0c4bc78217d35e842263e9fe41469f2e3eeda16cb72f2b135e1c191ac8c40b059348c31892d41c35812a5980d70ac0716234fa83c614eba4039c102745245ca0914958742a150aa9624ae96262dacaeb878346462c50b9328304c943051e28507030303f30206931f181e0d614c7a80272e422b61188a5486477d0995254cc8f87220531a020060b3682a4f981322146c16852999e1d110a6e4c8003caae487004a4c2d74a1925847dd53cd3ac2149394798cd9666adaa0b97183d3469eb024afcec1861664d0581012e6f039c092f89064074c8315d349744842e6203c5c1a86d5ea57311f83098f2530f4a004cb0d4daeb868a11db1438623aa207a614a8e0e9058c00d7ec0696205f9430f7dbb7aadfe2427d75a6b1540aeb5d65a9b14e11180263f30d45a6badf579e0539eb0263eb2d7b8d184070f19566a10a990217422e799c4106309196024f1c20b1bd41013eb99012646eabc74c1c3058b95575143cb0d1db36c28a46af53586145cf38435b1c19bb490035e4159419ea2d4605292839590a1f4130389490f1d3e2634e4e071814367c5861113397039a0615b32840dda122062b84e88e45a6badb55a772224d75a6bad158a5c6badb556eb4a8ee4bae3805aeb0f0d15a6e4956badb5d6db44965bf2843d9141b679c29accf2481313406c64653ab7206012604bc4d05539824e2aa42d812dd13d7e80c75902017f0df86629ba812101454729a5737eed9a0fa5d46b0f0ca6e3ee5e2dec26288b67838a32d8ac2da4c023be82b3602a3888c7058c573fa3dd6cefec549c3a04d580c305b56ad8b48041c302e722e9c10c168a186a0bc5e03774cc12023aa0e0718504899baa63f5ac9b272c48873cd2c43a20660db0a096a685c582c290f4000a8a4448d3348d1b0115e1386ed451244864db058704c80b8ea407a73d10c7708261485a9019a2722578600c122179942965400264ebe97eaf487490e454243164b059569cb4e04c3071040963e2f5c26af52c26644c6c914779c29898e591466bc16033589256026ae75e57bd3be7746fdb66731ce52cc9fe0070e066d10fc709a811b8384256a13ecd1e8114f7e1d09edbba26c668e4a34ab23ffa720c2057ec218cac8573eb9a171bd6dc440fef66c50a938be866d3494f51d0a66d62d2de1e94837e826e10544406bd7a852101fa110444104f115d18047b4efb9f707777a7fd84d312a6843ea24c097dd04f0113ae5c803c614766b92b75da8bb52ffb16052efbdae2c6be421a00111de9c9dcebc08082565d58a2effd64ef5b7e00ed2cb1b384572291be237d87ff0b471376f90fbbfc8df670e73d89f4f73ba1fb128ce93d7184b1a1b9248e302631073d42c6e238b62096bd9fb905b15c7ad268c22e1ffe12f6fe46079941a8b4adb716a964333300000d5317000020140e88434990c3589c46457714000b5e78465a58369b4aa391589443410a63208e618420800820841064cc54d501011e8afdd1e7a2cb7042620fd9d785530530e926d711d86ce5fa4d7d3000f68df28ac2e5255c7a2d59bc4f802cd7d26c83b6a5dd7363e1ae310e8e18360d62953f691dc0b5417c40c2afaeafe75d2a509b0d4893738c9e4e60827a992a10a3312faa3804435459220c0f45df2c9654356faf0afe857fe815c70713e031c92df60922ab826e6d3f49e0197363a12dea1ef131e8b33597ea186213ac73e7d77fc785f5a4294ca6e95117fbf8fac5a542f2fc881ee3e661f2064c586e0a8fab3fdf39a70497d03baf5f1253a48d6e11b7fcd5e6e2e8d513614715451bd45e7a5e9e9335220f92cbe703f2d1658c18ee4f372a8deace2f1c5035d6201aa32476d9b74c60a3d5b2e4717bba54b62b77eca41d795100c24f466b86dedfcb3b543b417aaa6413affb8910abdaaa1b76a1080941127404a0682068852b3b9b351a8561de616820d993a6366e7968e2b13bb3c0def5a158a72a6270a00add7050e8809b1610f1e725af1146837cd0fa5978b5149a59c04fd99d08313902ddf414efcd480333b55ff10f8ff1424510a947088a177065b3fa3aa77a8262aeff0161818c5ab3674b3984cc1cb719233de85a30699b1cf07ab890f9fc72780eb0ddf539d2408dd0eac812b9bd0785baa4a535cb2f5f01465e5011bd1cf66065dd3bc4226d96e6d79559ec9b807ca2e1906ad8de6003a738fbb670c457c883a5a948c29c756aa7f2d8564b431a884678678c283423e3027a16a41ed0fc75d2525c9e4b8f7a497d44e22b2df93e58ebc5d591cc8c29345b158f5d2410f41ebcf1a7ede63ac2c023b65642ff218e37253ddababcb87aae94eb9318ab45b43abf6668690917cc5f2300e462d71a420e3de21f001daeb864ed749d146df19ddb42ec84f9c44a67b9c283ce55af157e1d95169f1776cb310cd157da80b7c706fb0282f95b3ad032e6bfd9321b432423df15338bd731498b9b0066f989af110d285db485a0687a96937d229ee8c29443a564643ad078df68665876c78263f1e80b32c5bbe90d50ac662bc9c064d706f105c1c048a29a892abdb63507519bb4a362a6820a858a69c3ddbac0ea3d97d4b6eea2af48a3818c57114a17563d931ae0031e984a48d565afb17eec018aa12f86a2acaa5940d2aeef20d6b29883969214f0e19111b081fc12d108dbf24aef1d789166aadb100a825d93ac0a5c7eabdafbe47a9583e4baa7b2b2f5f0aab03b08bd21e6be7fc59230aa0f83364409025831110e52a1f73961b58eca0baf88d920674718f30d87eed494236e371f3b8933a3eefedad4c88f41aebd3d3d9b2459a02dc65e0c3729a91c9ed64a1788cd593bf0f8db4a28c2d8335e0aac67f8a013a658d51e99547e9ff70114e1eb6f2df872f8ee94652e433f6479ce304e71ad0a77f6ded3bf51045e0d2c0f4a544f7a3ce41663b89972c96bfbac9b3ba75dbb8fe39a1f5d35ef368090a716afd27d2756cfe1c72b1bc92c53b43604ebf05a1106277a71a8e0d38d60608655e29ba8fd2b3adfd5c68510cc4b4d72424b9ec7e54239c38da5af3823563a9ba3e34d65ef1210cd4ccd69dfb3432e7de7abf1b926097f66061c68da647f4fa6facc98094974d68a36e9ace387faef923901d305704131bb06025ea1e349206c49cd6a04cdc6383758b0ad2f90724a56840ac6339567d603252bff1a04e7ea61bd59cc856bbc8256e26052cc27e5531928124e3dc0d7969829d37d95112baef911d26946514f3413a5f3ac18cff926b67b8458794ab04c9efbb5004a31653497530f8392c1ce65c877e82b4a0746f7e65e61f0f4604bfabc6aae77ac8f0a6ba9a7a64c23a3846df46d8a99b87c3def4196d2a27084b2f520612256bf0de77850d5879356e83ba2286a06200ac6a94c8bcb3aab951d71ca6b50d2d9e7a1118d8bbad533b8e28e2869d46b680996e413cdc3bb86f65c81548272d3e82e275eac11ea21b336ec876019889117fe5e5b55f85733c558b8566f9a9c4c4ff034827392709dd679820039c13945edc77803b7cb0355feec87314e6170253c9c6a064c914899ed13027e04426e44e40ca2dc4f5b412b72f6ee65aa1ce61e2448100632236881a099ac7f213470984c0f924488342c6fa99e4491fef05408e82cbfe06735865032ca8340c1c77fa9aaf01e75e64ebd393d75d7548493e4a1beeac98cd01253c425a541dda7a3a9e18d2935ad0a53c6250018427d823d7a0352ac899bbc02a8fc603d361133a2e1a2eee2c51a995d30276388554d7e84a9065d6381c551106dbd808509b6f9f2ce78d4a28b80e97455e7511741e40751595462cde5be9af8c232fb4eec3d1898f5bde12b5cd8975edb4a1aee3ca8ce4e7c333576b13a4805d5e40aaf57cab7002123c5b0977a31b01523b6e520f8891135080271e98db58a50d853e4d716eb42a28ba7ccc27a31f5e7dcf8a261bc9d83c81073c767cbe778f4d5bcfbcddf50bd50a94a31a2dbb5809bb88ce2db7d23d587f8297a800d7c8a00bde8b7c883f21c0b4abea1306b2cc2046cb0157db5108cf411f793ccfd6a2090750491b666d1bef1bdd5c94c3cde9f72126d3365d470823b170b3c179d1ff92b28da3774ef9b7b7854243143e3e786aab9c022f9e5644e025cc635a5e34e8f89b570a24266685e68be11821d13193379d2aaadbff1b6ae99b934f923628f23dbbd4332df49b008eb0b7b8ea02760810119635e3126ef9abc92fd3d55d308d15b293d8a6467f27d01c6e9ab5f7e4d0eb3d746e231e12daf1542e7d72f18271a2759a284fceb8d1ba07af45f36c45b1f4a34824911416ee6abe1971b0af8d3cfc1a2dca0c427fd0e14a51e857ce097a3e2519b129ff438768bd8673bef7873c4a5512d0c9778bfc9f54f1b21f72cf251a4f07e78605fc2e51d63a46215cc5d7d0af0c981aa32b062b20cb95cfbc1d0335d31d4f0474d8a7cd4e74011ee51e0a7be8e8b721acaf8cd9f43c5a895221ff5392a821b4af8d5afe3e24f8f129ff2e3488af2f56b6bc8509c5abfe4ba3e3de5107d192692b22da4ce6bd017772e18372da94fc543e4f08084c138cbee402d56aee4ae492aab787616c6e1dfef01cfa56692ad514a5160bac5c5dea1dd3fe521ed6f8d82b2c0d3aff812ff9b3f257dcf1b69d4a2cc5f82d6e5a971f615ef3e02ac10cef12d2e94276847cc31a9101eb2c5b560ae79906a5ca236c3151df29f6261ff2d2ecad685a14274fe99cf58333470158f0253b761fb47771260d87ebffe09edf211ffcb1bdee4c9e60971a6addf4e3f024fac6f8bc63408ca05f72a12e0234c5d697e520b73b6d2d97635d3b15ca8331c1a25cc0e5c2e118c27ccb73e152f62a4b104ada459359d7fd5baa27c1eef20c8c435c34760824343e68f4c149fc70b10c7846a7a0c6ca6003fabb43bfd9898367a6ac39205f244c4655c8d78f2e9a284927b110673538a96e8b0a4454a14a7e95fdd16d095eaaaac8b6ab3f299264742a0fd2a8870f0bfd46538d9ca78a358b6a015c9943fea1378a04369979229d881f4391d094b6e9cb79c09aec4ac77c2730e22fa8b82dff34fcee1b43b8773e14467caf7d9055a0a23e805e878afdffb286891cdf1e32ea5e497bed3cf5112198b8212e4279247ea2368ce97f5cd714c909c3c380685f767238ac8069e603ec2f32351a38a0570c814e96424b36d0b4314ea8b1bce880ccbe0f8cc8bfe22e98177bf60c44ffb02d49c7bf1e70b9c7b1c54415d133956081eec140b5fac82787c0a2b7cd2c2072068a1b1f94a7667208a656839cbd9b4449cd172ee509b96d7eb99091c0f556e144e76d24f4557538791b87d6967be3cb67092af80dde07c50546e14ec988f449be5ced7aecdbd08ba9183262f48ca3c74608f777e9261efebfe88a47432e173362d36cce8a76d23082a65b36692f2699f29f8e6cd673aac9fec79ea2b0a7904b0b26dd0cf585e65272878b678b63091e9c6022d121353482a6fb907bcdb33a8dec65395a0fec5a18f4a43c9f57941f7a0118ce8572a9fa2acb9d15fe0e0fb78523e5aa31e2d4ffb6dc9617ed28bf13b5f376d4bd236ef7bc21fbf69a31cbb1ab053d077ff56460ed1778ebc12bf5a9bcb9feafec330a65785e0ce2bc1f76a93da721c61951d74134b15b3dea213f6470fc985ca04ee42397c3b4303a98dbb9d9dc10d8dae1e3275d3eaf7ad25ee2028425f812ff469bb1ddd45895e6faa8312d993052931361473b7203d5edaa662f85892156ca692dcd50636b4ad506bfed6324d6889f506986586b1a21ad8986d53296964725286fe36e20f3bac64c8d63cc3792f1b8c37003618b79c75265f323e4a6156ff195deadcfa7add390dbdcb35dd6e7a4278711ae4a16ed3731eedc935d7b9fa2b976d1e0a8423361ab8cd1df4bd3a9cd53877d6b8a30ed99b9e840a94383565731ca8e0ad25766bc2bf41623c9aeb6d29b03fdceb1af2e22cde2c5aa1779abfa24a6fd099c02886c43d446036312790091a094d6e5bf793814b33f8d79ab529e9abbdc87c943d94da181d7dfd62603a5b3107cbdefb728f6cc4b590252a13848648aa9f6441f59f9b68b45b085cf87a88cf4fb696dbd0a10191ec366dfe4d7f1ff6b6cd4e30ec7595d8e31ca806361312de772bca523a3bbd549ac2f9c781b8b9e07a943b94988029a58144ea95c96ebc13a124dc88c29c9850b7546ef2b54e6e7321cd24a2805df5356a0197a0dfc0fe866a05273a4e2a1744470e00eda87cce49d6d0b4cf2866350a451bdd50330913123dd65ab01dae38244032623070ac8082f074d59f071a7117731c59954aeb98d7b495ef9a965f41d435c9cc3d6cd3de6f2a8da1a655c5e9dfd5b2574804faf689f5992f449d6971c5203be70ee0b86243f9d4310e58c4f7a8f9b0260145d942612298ecb3ca843c54e3ce2735eadce152e5ab7eb659b96321ed18994468f55d4e1419f90e86901929733c8f75ccf1375d2356dd1bc4c04c0b8802cacd901608d9d75c343686b3169e2658cf8b2bd6a254bdb2b48e9589138b2bc6d4823b2d3e79a14b6c0946b2ba878b2b4ec621f77184c665674bf5ab6232cdc2d6edb78a6a0866a10d8c536184e32f2c4c7529540afae4c1dcdd7d2f1d5ce0b495daf5fad81e13d100b546a16453b8645804a013b448f72d993501309bfb5ea20b1586d2754b560a45b251d1bf4ab4038d0f1fef030557cc4c14f0496c7c096e828f6d0cfa18a5801df274cffc123da137b21db72f43be538d124f8bbebc9158313cd523368f14f5caeb82f38f8106c1f9b11f0b15b530e4d4d0fd4f8954124f06b94aca2e6aa7947e7d7b40b0d83e398272250cff8d8973e93d22031f3b9355ab9226b7278c1c75a5b0f3d1c346b091feacfce36968e8fab317c10734a5388b3b19136056509c5b660c947020370fcbf73267b6b167d79aed6494b81c1ebeef92536507bb96a2ecd828740889721f6ce0ee2bd51d6c144597c9a04128ada21c3cec78b89bc7c3cc2368edf8228e4c95a2a7d7c8adbf5afb1652ecb3e518d71e59dff03ab9aa790a7ac6dab1017662ca846f44274c915d93bdf87e9601efafc685519c57b38fa993f91ecc42afe7e3812227f4b2479a52a2506b5df7dc44518d9a9682e8970521c321561f6cc122023991bc9e87121453e06216ff71730ea0d9d7f97e8b2f9be228dedef8ad7c3683306c73a95da6e6491636a4d121e6f4c593290363f843c74b757c755c7ec63898d245bb4971eabe60a9c7931cc762bf11b9117a23a4f37da42606ad5e63a1001e83c4690cb297470deb2391249f2f0fcb0faeabde1fc039b0e0548c5e123e9f1d35add64f8e7ebf5b60c233694f49d4fc6792f92aa4cf0e06bf8bd3d6f32a610b0db6df2b3c737be26134ae90b79758f9950a10448131cca970c287ac2cbc545cf926345088dbc9682ba001eab64598b5539eabe58eada09e426e433e40011e125ab8a3cba2c54f046c28237f498819d7f54cde7773d3322248e2d1da4d13ecfc648b25ae8712315db971b46e14758c2d54a80ab0df11c0b955d3e8d663f6fa007ca2817fda1751454e58a2fdb5ca3e9856886780b3f52bc26defb533b44c2b8e200f9d50e8a375978c95f6358cd5e602fd5cb9a2c48b92b5286629eb8252f479a4873c8e3f049b9d07949ae2a90b3eab8495c5b7d3d41ee1f6e5ca8750dfdad2c1b6bb82d854012c7c862c3ae85afac748ae3c664d5487f81f9713058df04195444dc5573bb5b75a619f5e94d415e3960c2f61621aa5fea699d041099cd939762d72a7b14147bb329cd83af1274281122d94119f4b7c1e26875df7539fba7ca76369ca45c9a59b1cbb7e933b5a4c70931a835bb07ae21d763459652b42711af3e736d8bbaaaece8049177ca8051317a1d412064716a3662c0c5c8a517530e35c1cf8c81e8eec6183e3f81c9474c2a477db553d013d6000ed72f74777c92dd16573c39766ea5a241d2adac3869a977bd0d0be1120ff27d8fda4d6240a9f338ca59d1c0044deeaede384450ed0040a0c9f1cc54ed00d0713989790e4ed0456e3d832e18a10d7dce1e0da1a3861749bdbd3458cc15446a2c7c3b0e09ff6fed2e749dfde93bd71d9335991258aa888f958934c010e68849cda461c6ed37062cedb925757a684017121d671dbb5377017c9f0bea69218880c1983f92646b15a1955824e1e68c395b890dba5ce6d9788afa0380a0d617bd6b92fbb27b922edf56ac880ac07a119f44f5acf5e540b830e629d706b3e762ac71ac90d4f68c4d9b842ed4587f551e3d314dbab93188b1c5164f395f8f7976568834a5924c1abd78376486f4783e7597260b77157151b7de8af822eb047941c781f0311bdee500746cc2c1974a547201cfe600f0bd35c081f8e9bb13e7a0ea2ef12beec3f697f2a27e896a82165ca85607848d4cf16c499f333cc7c1df82ca62fed482ae3a6a8c77c67dd42ac85e304a597ba1233e55b3dc3c64eaa2c458fbb723d8406a96f5430993495ad6144771f3a660c3a4a6f3c3adcd5a6ca9ebc49a660c76eb6cd03aa5524a9eac310570f238cc67556f5999b24f2fb716a6c0bb7449d40a794ab10a8ec56c441d1b6ce926565e2a2aec40dd34884f7a70922384886f05087baaac0785867d08bda4ca1d1a7d58ccd20592d7c28f6b1ea3ab8ddd2eee4ae964538beb19920bc8caee935e0af84e4608870c02ba6f6b52166f47ed7fa1b45a339dcb4f5b423178a2bc8dc253ed8974824ec6bcb610ee12b8e5f752452f31d6771531625663d541c95845e846e8de8157fddb45a8bcde9d6aad2939b6991dd876a5237818aa365fb78a692454fa80fb49c981eefb4e7fc46d49c105651c55a6a5902bc73c1fd461c3f66ffdb64b06a8d6a00bdcf7ae1337cd1f05edf0fc8e728e1a675fdcee3a208c2c00207cdf682557326a0da53e357ee6e88bf91b31259cf75fc066ccb5a414adbf93ba2192b91b122de055422f04ee7a6f990844f2dc4b0d22fbaabfe5b0c0fd66840dcd4dedf5c0e52254326335e6f29806f296de936a366084a265ab37efdbda95921c1a4ac252bb3c521b147fc9db6bab739f163f64cb480dcaaf28b31f9d7316b4f5ddd96caf50cbfb41107fad09081edc020d769e71ba54871ec088fb9da8b8f117133a4c291ce31cd98b7cd2ccf2a383952ef1eb199520216ef094a087fdef6af7fd5260e94676b0093f8572416db3336d84ac9d4cdadfde5032b1a20b74ba8410cf479abef2a27ddaa180af8b3c4e1e87fe7954d0ab919d3a0d51cca10bdae1f86b2629a052b82eb482c715c7a0c843dbca247764cbabf732c3777169bf9ce21626a20a31bfd30cd1ca2b0d9e634932e99030bf248dd5238b070bc00e40d1925be6bb528f5b49a9f8ce009dfd4537aada92e86a498d64d7367ad4e8aba915368823ac59ca6ca15ae27dc314c299095be9f46f1962a0e9300cad90546def388e0b88ec46149e1f8d4e0f5f403946efb88f4a8fec7a766867a9b3405a78f59fb04030eedf543e6f3a2591067b4c6c651cdab1c1794f55d24f26304628e5046e188cffdd401d31bcd0754d6b22c93ad4f2a34819a277d8ca0d6e949bb5074f612d0355e4ecf683eec35b6a24a6c1f749f030d22c026c588280f4a3effd872505896afae1ad9dc896614ef2b2fe8df0f23050790c06c5b2b4e8159200d908113692f5553b4cfc978cb7e3f83125bbf22b332d431202b0bce700deed00e939c27a280a5325429ed8038542e56997f5506be99f39ae27d9f24017e3326ff69f8f59737e71369329121116a8b7c45af7ffa16e7b128cce9eea0b3a80d17580ebc7a524e533a7d375967ad25b477b8b9bf7f756147cfef28c8ee8d014b4c874137a724e18731612bb50640f2596ad5490006776f4d67a84eda401808f65e5acd549f6c65c230cd4073754d34ac8aef722b2230d6bef31e99c35fe5e4d59a4a5b408e5bbdefa2a7559e4718508a6c07982169dad8eaca07b5cbbfa8d6a04a15b25cee49f75f93ac0631cdd9fff8aad5386b3b20d9fea453bd8e31ea3ec1892f28bd29d9718b60fd1fd1a649cdfb2d61125fcb800ac44acc87720c2cf65d9bdea4495e4900b8dc2e56c4ff0c30cc3b375b747c6d894ab19c459245b06e2d49526a120f1d95c9f454a143a3d485142208e7e4f0e7431b135277c9d6b9f3ed8309ec9c544dd7503a90c39c64e9d90fd8289b5fdefdb321c6e1d114c9c451a87dc223c37882a9592fc4042c961afe8937d18a18a0d9b5f1568b1d43cfc47c927200ccef07227f3d67db5ed0321567df70739c9e16acabadc0ce8a6d989875475bed6b13545e2291d3a7b9633b29b6b93a0683bb17dd76522ba11606ed12913e339ba02ef769809dcb9005584e25e4a69b9cb70fc9904f15e93b804cc7f3b8142d183836dfc78d1ec4c81182c893ba5ef6184f6d46fa3e5d83a0f25fc274a96cbac37d93627f9527eb397d624f59cc032021678e457567a1ba5a1d83a7f6a9dcadc98170ac182bd986610e7a68f040d82c219980e74f0409bc91e4621f173301ba577b305bb4a2799fe0f9064b0a2e4d1346438f61baf21ba188bd2cf75feeeb8b267c7399c6c6d5597ded3d1f2d1347c8c402bd3e1bc2966b6d714afec798cfa5ab9b586bf61230a937e45b04d7282cfe1884b9bf35643c6479beb9210487ba407fd519dc158b91970b201d6cdd97032a0c0796f017d0f7e2402e8bb06a5ef4cc7c0772d1a9830db51c6dd146911b1fe3d5f5ca77f41dc47d712e1278b81753c4fd4104b0294fd8d2124bf9ff9025eb5af357d6afee8ad6212667bfb0877208fb9b364798e1cca417f1f08407f24a9026ba23c0376bde4983314837caa006430e140d87a057cbb938e007ec13989ef56100d79d8a611e3db0f579a538a9a5469368c4cf25843c81e061732bd4e08a9a78779077a191c4bbd489612059e7b6fb12dfa5b1c0a73cfbf601b7bd152584b4255916141c4210b6f3ac3327b68747c8546cc2da79286e444f12e83440d689226dde22c67be897333179d7e97d863550651935258a68d5ea01647f4b2b3317eefb2bea8ab6a9e40ff39f3cc388255806ad9345b4bc1e06951b94f9508e9a9b47271636a52704ba4c934cf7808f76a36a0186092865da37a8f333efc927c2dbf10a1d9419ee129db8646c714318aff81b73fb1cf707610cd07f84417b802fc51ae6844c98f5be482d11e2fda0e4c3f4c4ff131e388795fd77a731e314799438b27da7ae9f91d5de9c86f7e1a12467b83d9014138c63c2ee8612952e60ed4e91f5afe216a1b169f76c367680d07ba0deb49eb094731b3c118fd790768d1672e58f6958fbd227f8ee5fec79d34d22ff02f7147511d377b52b9ee753a50647c82aa244c0441ea9429c6977c62b1ca5e71002a486a68b3d438eb5ff4a697794c3474e0e0005bd4e457ca5ead718203e7c11588e62165cc7262897fbe75ee235597d18771fb64e3986d00218448a33137074062bac336263449679282e5b9296fe07b1745b1d78f2e9928eeee8b0fb334ee055a3c3f4b2c4b459c6f7057f5a2687857e1626dbed395039fbeae72240a08ebd10d50802daa1e3c2e443af46d54e8ec9fa23832dc409fef68738d5e12cad37722bd95242801253071bf658f0d037f626c414597b17f8efc8eaefd219438f6ae4aab8468cc927c0dabcb6c5e1c36d821574bbc6d08d5ed12df451bb52ac92c5c1c4c350e96c9b74d23fa3b635a24075ca93354eacf242d0cb98becbf45c97cac667512b1929959dbefaf108d40bb6be129e6ec93a37efa9a817afd66eb66e12121dcb382f219307378a1c112b1db5828eac91a3337a09303de23b1a1385ca57a068081914605c013b85a3b9bc05ae47500ede31362ec0bc57e03d69342b5bfb00ba98bcbc8d86e0d0dccf40525e5422e95c94c5f885e5694a8e634df6e3135d77bedb00f43ef3c2a27b75b2e0dada4b105895f29b435b39cd2cc79c84548143fe3504d49f49c1ab43e14249ec8a355c1100d41739e02877b03f7f90de24f2229c2b581ed0ad9b74a796a109a1b08171b49599b0bb38e92cecc3a4b5dae95430643bf130c4966c2444d42b75c77d718d7519b58508b969892788a770040cad8b0a1218393c899866aa03662609a78f7dddec43aff5b13bb601c97a591ed9a601a0d636e3e75e8bae71e434b5a8742ef0dfb6e713d613448769c03db44add37eac89f21a42f04b98e22cf1f119bce39a20117cc12459f1e78b731c6d7c2b39c183c70cca9d5c6e9a442eda0562f5b4f41938a823ef3d21842462e6bec3938f3e4110572e1993225980238c77a2bd78c71e1b22e86930a2ee79e6b630740c790f921c8083a4a928d15fd9d92f23c9b9243ffe6d8975805a9ab143b97037954925d651eeafd3935a9d6401ae70688a7e97fb898062abe5eeba7e93bb25e859e153a581f479098b48298651b6b986583e9b17fe76d83c128fe11665587be608e0f11a72c1374c192817d3900aa88d0f97df7217737c9818239ed65051623f58b48ed02dd5d7f39bb7f8663d2abf6d8d545eeec3a33c6adbc27d8a02e46c590588565e3838092772e320075827410f0e8bf53ad07c1533fba136f731fd0c84c3fd52afb34d0df8a967fbd4e26f9e88572e9d4e39abcfc1d93211356c0b77c7f95700e00e938452b07f7d5a9147cf0ba5df2a3c1777a01e948a6934e655e012bfd4ddc5b5011b0b912bfd01ffd53a01b285b595688631fdded16b427290e501d9f7a74f7d7d8f728a4bd7039e779f4a943352bceb94003a157be2fcdf471c1c41d7da221b06e69c86f7441f757682b4107c774f0283ce378f4b5c644885f142c88d06b35046225815c461b07b8568b97916fe1dc641df65acd41f0125ea9775731554facc3a40cfbbad5347897288df7d58c3b0ad3e3d7a2666142516c2f462e9e60923842331c377b6a99904faa92b1356610d10f7b7da8c6f2a413da41682285fbedbfe4d9566054f1605811b791333f863f2add7e427fd3b39b6e110cb50992fa81e74d38ac821633d01cd28bdf50b87f014d852e39b392e74b32ec6bcf73894b00ef6f7347fb068155905a8fa778e55217a7ea138c6ee60c1548205cd849db31447dcd23aa52160ea753e72539bf0cd5cf7eff5923be9802beb0c27a90dbf5e36ef3106a5eb86107a6d2059e1bb81e533cf75c79b34af50400ad28f9195d42067099b8e70f22273b563d56e8a10b6ea0ae98b1a8f0bf6dfe5ca75f534ddd39ea416704d3b21238fe63ec5cbdc472fa150ae1ca57d630542c0430c74be12c12720821c82a54c300e81c32a48eb27a3abc2fa52277044765cf3c025abc60be465e0a4450c3c10bb4a2aad71f68f2e697e57585d3893f0df3d352c11c7b9bd9b72328865873c7a14708c466a1cec8f3a149c300f457a1ee9ae7ae98f830842ed3087c86b302967080889403073fa9803a26a292e26eb7e69686b9438ca418fe1b7cc60f03846eee7e4b7bc93f79a2f82690f7c7c0aa4d223ba7fe91ede2bc67a4b059e41b52d6940ab7d4056732a26558311531575f94e1848666280ff4855e26e566e451ce9e7e7866448aea79f7e3a4687dff5a1e03be47dfba609ddfe251df1ab3f183cfe51d07b96a535dc06edbb751cdea233be548aab7644cd37adfe12f23f879d3ca2619edcde9aa6ed291b87964a0e668a17136d1a277c787e9ae43a8c7d4362e30812f431d58919380ab36b762390162c7daaac6613ce29f06f97a089c1daf0e3bb778aebe35fe3a9bbf414b8d650760450df7d2ba6c9fbfd689fd58921d9abc6f6773b2e9aef83b6ba6d630fe05ffc23c208107fccfab591d3f1010341647396c9665a148275da3192f0a0eb13cd3b95ca0d5697f2f2063fb9a0c5cecc1dc5141f829199245862a2fceada38a72f02f64c77c1d62ca4fe6e39b06904c8628f6cb9350248ad51e25e88b49d22752f5b65fd23fc903c85a606f86ed40a604a1796aa33d628b0816bf1b1202266b8f4c55bfa44d6dc364030a494feee7d4747907532f8336b994a984e7a3e8a8456ad86bbe1425ecb304f5a4a9f944cd000048b4ebebffcf83fc3974b57fc1e3f995c72c82bcd4f85258a25a8212dcb21d30c2727caf15714ed5973f1d9b2b8aaa640484a9c3c3a184524f6d81bd7f250b8766df3b44b17ee0cf6286dde61f59437ce686f67f01a386394a5b32de8df1dbe8a37501c47f376ab9bdac511fd399019c48d00aef0cf43b8583a328d05731a05365ccc313c7117e87b7286be8017a8a6717c8405e7137aa2d6d69e3090d271e47b082a79d91994d1978c3ae5ab8c30fc72cb91ace49aade1e43b922540d76bf0c1b4165231342e53ca77cf1e13cdad70f703a758d7479074790dcb601da7eb34b7b06448b120ece89986cb0e0320b085ccee4a1c29d21025fbd690ed27a00efe3b5e8d935a731f5a83c8249422d3245899c603474e586291a25bd8bbcf66391dcc72151eb0c4308a2fe686f831c0a43baa026718a9849e572295fb2e61089c7169639dde1246133497b3daa6cb468a4174368685db1eda901b2c34943e31fb231c9a9164bd9e1dacbf67536fa862e42661bd7a87459904c062661c646489e8a18fd1097b119c8f9394679fc693ae212cb482e80783f3fd36c62fdfbf5a16e6453816e0ebc08ba76e68685fdefe4ac7621d3af338576ee159252a0de75579cca46ebc40ecc05a8912e9f8fe0193b813b8827c2dd406aee4d2832b7054543d3f88369daeeeae71f50feecaef0ff60de99ba75158006a0a4f6fa0d399b22d72e4c688d64a1f5515471b7d848bfbb7fdf21c6f218f95896988ce315fe5188cb2ae85e0175bcb2db0f788b86bcf37bac74b87ed6cd156f2954d5937e2196f50ac1d2218bf7b1a2603234a804ead775412411e0133e75af035d6c1a0ecd20e9bd00a5ad32aba313450f2f0bafec5cf2541241d904201689b36b425823d8da783b1c2bde25fd325b0458b1f24a6a4fbc5ddc0d64c003305ccf481c5fdba6c7a80abf1e54c77af2fddb79d6ee474ee81ec0e185e491a1495542ad7a021f131fce4bb61094d0b8b7cf96873dcf3c754f1c98da9cedcc3a8a6d3c36e0e4b9215dca8c327f56665fa130b89bdf60ab4041fdd5b1c186d0628d93ce211c5c217f395c2339f3c61e1efe58cb0fa7f3fe4f2971b26189d874ebc6043776c44fbf33831b83b477b1b29f2800c0b319e3c197f134d76f4e36ae1f410c91ff9817a9aaa83f0af3b154a5085c445344f6cd0d717379c4712ee634581a1bbd21f678c0b1ae34c5008aab6727fcbeb1b493f16287fb6a89eec787c313e7a92bbb428fc6e0c4f948336e33e73a24583cac3f1d8a0b699e87f6fcc34be56cbce6d611ea05b8a5872980b046ee86665193684dd8fc28be7c6b11c4f04897f26f9e8b79fd0f3e0aa3ee590ff74e97d3eb60b8d94cdea5a8045915250cc013f0fdc50127f58b01f834e9f3e8fac003dab919126a09555a63b12ae2df032323dd4431a5830bac46bd637f049a0680fdc6b93956ac33f93b600cc6827e8e5da15132d7a93734f6ffec5e70d3f61223b34bb1026957db0f8e0e2ba80e26821a5d897f5d95e0a1c0e38a3438a7582819a8bba62fb61649171251312472651592f145184c3470322eb32c53f7d3fdf898482858131e781d82745d283259376c0542c968880741c7d4f0fce648e86b09f44925d0c0e078c54e30d3066cfb5eb95ca60daea3943cb4a3233783d7703ccbb40d059fcd91724daa2410169cd7370231b3dccca3a20c705de319db616fd187a3e5d5c4885640a7aef68d356ebd1b4033fe1cfbf315dc7108c26bf83c0cd4df0271a67485dea22273efd719cba494201fe623f5bb94b9527fcf14670a9928689a1c21c023f096e17cc456f803549c45d80ab3babda843ea6494899d657e66c58bd197cd97cd8f9144fae604a59535abc4efc5e6393fb69bd152695e9fc0dcd543f1d0fc5c0667ce7a9ea568414ece7fa7c5693119dca6a36c326d8345cad4b0d80b8a4526b610ef1e1d1425c3323e60178c26278c9d10631b78bad8698a0366a36d46860a88da59d1fb010e39b61ec2e971c9c4d374c36f347954afaa8399a8f755591f8ba8d319d96fd188fa1f358bb098822d00f44d93ac72677c37d918887192dc10d35ca369f943a70906567630729d312dec8ff7b23d8ed4aef0edf6002635b138335c1bf0df37cc7b37d71b9f2462928d238ab63e6dcd8f3cc343f7a5cfa480c5c371a81595803504cac0c99ae6ba46a6fdd4ea376e123d34c2ea841e7870b19d55cdf0abdc9bbae06d51a7b746b540e316eb58ea77f670672c3bf13802d5846e8fca4b330e614a574815862d3532e59e581107abce22569c44d2aa30e7f2fbfe6b23deb7a9def828513795af40aca1f1886727e43892a60fb0072a97896b3ea699484cbb94a08200d3664a70576a745e7c34b1d18b900904c7805738fd9f01641a3a5a2e8c69a75ee9382d8e26a749c21e408eeab75c92881f82a0e18aae230bb1edd5e09f8a2c46c2f6b61a34320096669c645760a3b4329b259a7eee6868065da68ae28224d251dc290e86a944bc2bf55ac79c65e318d756f3a0538705924452dc76e81fc73975e95d0a034a966b5952a1ac2592d6f6311e8329b932f129fb5d5a8d2365bfdfbb754abfbb3a0df0f8ecc4dfd52de0db8ac4c0699ab6a93c21e46f9bf81ce7f5f18fb1243642be507e27b9716aff2c3439763511a311be693190a758efa9341b9d07ac6c2a6c12c5d173b155d088b8a3556d29237225d6aa401e5369804bf2787ad2f2e152687bc92aa39e707ecd4fe030cb63ab4961bea2642515a75d5469afe9b0aa83f4d0a26d88e2f28a8eec6fd398b3754315e5c4c3ad98760b6c106d1514da83da83d9826c7500b680a36e3c3e1e8bbdd3e14039a0a356b1d92d68b8df60c1c5008cf2bace0277bc161017381475359ed54fec4b7c528a522429e395645a0bd4f435a356973cd3ff918b71e8f0fca2327677727240a40bc66d5ff00b44738e347da074d038ac588c803543bcb55078d7769ffdc11c2963ae4a1f9d2bcaa40fde0a29d247e31af1e8e36cbfc50cd0718e4db1ab402c4623140f46d4926baa7b02ab66605a1f2399cb17b05655254d125e2d612514dd22500d61495f57c67922624f9e654a31cabd1148541bd44642e799fd4afd57f5f768581e2c7a6a61bd374a299640ddc9fc7d8896110ee81b117bf4cd532b26a1c1f926c87d1c71483ae65811418fadc341f293957abfec1a4f01b6e0e6e614979884be99f12241899af43528f7310b34031b3e85f8c5b62f81276cf6ae7f7b5c38a86fa097290403d1a7c0ef37752525a9dd0750d4464525a670ed2c8f53b0fd954d26aa21eafb9d4bc9be367142d350acdc78f99859c01adcb72a00d734e2bb403fc6ff2349ae538c823d6023ea8b7af8022ca8c11b3f45615f8f04ca712b0b5a3f4bddccbc9e33d08afb9e1bd22e0b1f123fa8edfa01bb8a322e8a27486d72a4898aefa887b0172549bdb703f55f9692ddac3608104e5d3439b2a3affcb4e2deb6763c21c30ae458463181ea3a6b592214a5c86b545384cbdd60822251be329d80e2e6b75b3147404bf061ffbcb89a41495afb9d3fc3f30fc4ecf2822f823097d5d46a01d4eb25cb452616f1de4d574ac890ac822b285e63c52c79349a45d26accf8abed4d9cb11c1d089ff265eaadbebd3fad6b81fa2d619bd734d615e524f62c51f4165b29324b151bc6638a583b88252c5e050aed5308ca74a758d8a682b69930788ad9ff942ce77193d6250870c78f45ccf8e9f8561af9f5fbee5eb26a5765fa4d6f81f0e790c08906aa897c7bec392410ed763ea16e06a7aca999606331976ed02bd02cc5d209ad498b8142461c7a42c7848f19849a7d74fee8092729b58872f43de117b9d23397ce7044715544ecb8f4c47c20899dd2f76a2694c754a278a5b712bd35e95b4dd86e143ac45a936ce2e1843f127e10a87cf4b60e8135c4f5c04dd8d5867be0e5b0cf1aaf8fb89e3b27092e69f010b0fc0f3d8780d8593f66a2cb44e4401f256187f213ee0bc4a693bae8bf1ee7a09fd89cbabc6c17837bcea13a7ef983441c485465f2a60dd144595f65db97229875c83b57838cbb13b39c5c98759c0865ca4c9e91c751f41abe0f817b84495eead0364e643e6305525fd0a938835149ce857db08c489b55baff68945fa6fef427872bccd16b445d210e43aa9171ab68f5f7ede5cf6014825beb0ff63093102340f9b09d7c1ff9963510037089843232489a3b23145cb4434cb36c4b7103b419c50e4a1347b4bb658f02f32a26b50ba6cbb0c489f9ccfb83f41714b9832f5aadf8aec06ca096a88120245506f36cec01fd6e858a203c51c56560afd0ed1b3996cc0132f968d1cf1cd7da2b3e84d911fa58fb93c49f06e0d6c69ab074c747e82112a4bd41f8de0c82a25c5f02b09416c03ba44036e3db9e82498bbb50bdb2e13d78f6d46e9f281323c2dc1a24e7ff9682a32d4c860308681b08a1dcf21f68d42240788de483bad240e5c570a66d5523b93f6896b2a4152bf0b0c9ab64d929374a568a05cb270cceb68425f4e912c4b179d8d67a0b5ebbf8a93d9ca45747a3004e75e5e7abe4d58a931d977215d2461075519f8c1f3d9dc006f7e31046887d902b8410573954807ca18b6685d6dc3c8ade060cfac98277db151681309c29c4d8da814c61b0531886b1390c49482faed31243f7c3fe58f41b5994187674597616f829865b2de3bdfc98dc1243b2ebe0c91677a00aefa3dc753e332dbdd79745a0f57d1423906259524e457611a62c8c7422bacb6191f789dd7ae18d586bb3ce382d92bf024d9af1ec9bfd2b68f40c0830e9f6ba85a6816f0ea1c0f71d908fb41cdb292677cc96390aba17c5ec465558998d252483999a9b72bc0ab20768e44f9d0e005a7a2e03a3138e585e0522024ed4d657562951e5dc840ce63cbd0af5cd49a657d1ab2a39c03046d325afc21730df622364857f8b39c45ad9ab900542c4650c360f89a58f22afc2a4f1862dc6a949d734c6ad6c2d431869f52a4487de936319a00236e9a73fc4c50a8f94b349694bc4565d5d43b09137ddd1fcf52d3010856ccb6899d55e9bc70af14e6785ab43b7403b5c814ee4925e7c7510ab482bb0b652a77d2152388239b362eb48897a9d804f77b1e75bc3b047760b0f9ae2619ea7fd1e084923c1d57cbefa745a18431ced5bcd458039203a93f1399b1b219b68fb3a422251ee91695d58e3ca4de2412f85dcd3405eead43090b032075a5f49357ea1bdf38367ca07472091b30341caccde89b53be2ad6e984de09baa752d7a2a6071b0e9d27a6ee83a01d1a199c97d52891bd5c9d01c7746745092f61354d11c77e23ab7aa951ffaa2cd7ef436013812e5a611b9e1a26a81ac3dacb099c571c3363b5a3f5fe56d912d247d521b5192b2db9f80ba9ae018d44119cc2bc28f721df864c49b23ded11a6ac1d4b7ea04a4061a43a8b624c8ac5aadb7e8a001bf102853fba36a0f7187f79d64c3cf0bbdef25b36a12066bf08ef4c9423473fd466b30ba007cabf3db712935ae73ee7f270b147f60eb4f8d7e282c2f0140a95273cfae469b35efd97b6232447f9e9b470569b348c98f2b28a904a35e86e73d09ca6b4ee3959a9ca0a0fd0135a832549a3aef58ba33f6eae4688ed929a688141c20a681eecec6d161f027cfd77a185ed4f9dd1751ae153854b73a48e7979565c6bd80886c791d15f3c3b6127863dea84ccdc3d48439b46eaffca5ebf55d32124184d1a5a3d195e373ae3b6a61cc916632621812e5dc77e421a0e6f05e2109766307d688aaeae0c6720773849be33e02bbbf2fe8f85c464df940e586e921f08336f2ff868289a88fda9143ab0afd20bac730d03d8446f353e403492e87e0eaddace99ac3a4246651f9917ca16494c4c138b78dc82d6d671e607068b4266f2db7bd33d58c7ed43e5fedfdfb37b6de531b42528a85d0277b8de6ee70c0dca52f3049280cc3cbf6696f51983657331ad8905a63ad63a4044beabb35cd5dd4c708cd0febae3f8063c35539f2104cfd614841431770301f5b06c696def9092fc2b198f902061542326f84f32fdae7c55984b7f805f13b113f2d730d7142ace0195d783bdd3aaba28a328edb3f6ac445684b86c5f5e562f887d60a966c31e854f9c8b29fe4793f1e0b055544ff080cee7b624c0bccc3b4bf275d9e16dd6267b7b6896538de296533b0416d591bc5e5a243cf830bcca03dea144dc16177bc0ba1d1035226369eb4f0e3a1f0ffcdbff472ee1e8999b9afa61958988895219d9d59537b4fd52c3528f3c0679ad1eb88bdfba5f61cf20870aa8b3e45274983064edcfd6a4016b81962271a41af75006faceafca90de0f2525f1c4e1c53c73b56fc85a248309449e0ac85162e441d7044cce8c9088988c88da123020c50e1c4791101db44c223629e87724ed5958385b4bf8b497947dd891cd64ee16404205993fffe4369cea80ba754dcaf04845dde591b1825376da05f31ca93e24486af5dc3ccce8bc735c4ba19ae4ffb4cc239e9cc61d08584f76fd2928a14a91bd6415d2c7056b9fa93080a4bdd6b1cf1274a68ef677762f74d5bd583bcef180c48666d3c95b482b946021feac92360db1e64adc623049a6e4329e1f155b09767adbfa7a375dc6c488a9986095d5030e1ebc0dc21c51010dbd1d70c4453c058208847cb65fa632a1613264753947294cfa2f5717c1260146ed0d7a20e0bb1c7b9719e633212fe7a6e65f6212ef24d1723f6a103c3faa0f5f621ef2fb581d5c0241f80e5eba50ecc6d70eb439712c681373fc84877c2a119907da5324e970c7c20cc1ecca0f268a2c18cde08400f10a1a2f309aee0ee3c0e7f52ee3ce5c7d5e1d425614a4cf18a8044f7f0449587890c28ac4747830fc1d53d4c2a96a224bda297c88754b60c7b58374d3c1f3e51dd344df8b73e5c81f7bf741f32213fbcad9e17dafbeb26648036a6d7caa66af14624e2681ffa819bf4a0f9d3e757749ce233ce9c451e77084b36f8d91fa4f90f1742ed31742cd662a5dff5ba091f90acd90c74495a610110771a3c65df40c694a98f48e94a35a4934cdd32b0ba2c7bb3b251a4af4357c69c28229a2e87acd74bab1a39dc33b369c956b3205d3a25e0fabee9e5c4c40b9b6b793da403c06b41b3a3b5955b0a0dd0a0d7a7917aedd99044c80ad0ab353f36002c73c5511e9ea3f447c40b499c0f91884f44011f24513e0402bec8057c108c701117fa23b6b80b84d012fb57d3385df336e53bc287b22534fa55085116fca5d1ab24f4e0cc6a47863104794395a9d6445f53381b025ff12aa7d1c6d4601a8f21653aea8cb6494b5682c0674d43ccff96b76567317c952d223a54e394c2d1ab516eb99be9bf531534db036ace368d5c4094594d8b012d876c2ed19dc0e920731f54c4363c640655028f68a015b287ea00f3c8f0a9e9821e4f50afdb4a72c77cf1e35e41661c1a6b2f6690afea7c29e8c34fd12fdab8ce55c71f479bc1d3eaf33a734bb3442491c8eeeeee1d16099208ca082f5dbb0b1c0b57da6e4bf5b9b4daf7245b9fbadfae3d95d249b136563776e7c6ae4ee9c017ac0a4f8e2d43e027a35bf9d993c593212704f184d693a2ed841e9a5085295bdbf55505b46f1492448108149a40e10814a06cbc35556bdf8d499a8a15678a50087d20241deec8363cde6c4e8f9f7447d5ca361c541583239d9e0e838ba72e69e3b97061a5c5c3262dd65aed7fc49b53c66a8dd1567d23e68d877668bb1be33ebd5a26f454fac343add5f2389d7670d35727d5dd0bd59a4aa5a22a1555a9a8cac8bec11fc1a6dc7b51b154453a550fd88bbed18e5f543b5085c1f811778cd3bf8d077e0c55abc53bdab3f28efef0e83bbac3a6a7439e0dea9274f568629c6aac1dbf8358ab765e34976fa59bfe82ea4e073c3d55a98a40157dc530daa95a37f4a7e38d477469617971157afb58f16db6d9d4df60ac3eb35e984a1bbdadf4d15e208dee97ba5fb8b7354a4faf7174d397935515d9f4d80d1983231d06a7fdc4bdfd82337199c575f7a958d4256d642f1933efa2bbeb427757bba0a98b456bea52d12d74f7b2e990c642b55321e5f2e3665349cf5ed246667537b7642fbcdaf31d2a9fecdfc668a0f02693ce30eb93bd7696b4418764ccfc2de9ee66ac5999b5e7335ed56f248eae361bed379beee0ae3cb4ad9d0e491b74c88b813d54fc60c4c3a43bbcf6cc3e7b5eb503559a6a47c552ed48554bb5035fa07ae5c72507f845fc6284f70767dea1902823adb53a212bc9af23b5d63a459612c4e4867c9487e42610c102eee08e199531e63e19ce058f4377e4b85de941506fda73d259374b075e76add50596056c8c617866537d577617e784016f5837847207004a4c82d7304201ec3b635f19fb460e66634c8b9cde38d322f7946c8ca594f1614c846db71c98dbf7c68ad17923ce8c750b4eb49c80e284099c4c712285932a3881c209134e84ba962bb2931638910229a574c204d2c914e9440ae9a40ad20914d20913d28990b51662123af1c1300c66d0498f131f9cb4a0d62aa3d65a2b113a60b1c9111dee16f20984d42625a0b7494e0966cb6bb54288bce1801a6badb5d69a84fc52945b5a8e6a52e4e48626474012e80380a145daab6c8d0b822fe4d60411a2861a7ee4fda365cbd7f0e36eecda31076b2ea5b794c61aa91244c86b569e0124c7625beedc7b21be72300f15bf71345e4cbcc6bd17d3bdb06dbc98c880dfbae198773e193873cc4d21e6b09a5b636bf0d530576b30a6618ed6e04cc3dcacc158c39cacc19ad53252ddb48d933538d3362ed6600c5fc493344b2a31266e383619df06497be3708d86b7edca8d4b38c317f3e4b28c69d1f6bba5cc622df68d37062d58987289b46938c3a80c76f01203c68b938b8b16175856545ab030e51269d370865d5be9944fc858800fb2680246184d4151469964431d2786700208278c38f102275a1a0652662591882647a484f0b9e0bd262aa027685282263956dc28a47c103ea2a23d44a4842849966590e8061609d62f80514e395f535e505e4d5e432fa097105e476cb52fd78b6777dcab05bbbbd88b055f394f48a9b55eec89274cb00ccb9e2842e3418633dcc4c88ea7aeee3e110318888e3cc1f304eb8995135a1800c658db9cfc382165672160ed02278ec026a460f336f164081110443600c07e4144419a78d2040a36ecd9ef16b0223321a589204c3c61420b4c4881625b6bed1124ee11221bc5f60008db732244850b72f77ea490878c182a9287880461828809269d740a090a3d8472a8c910133429a5acd602514aa9bd3ea51e6bad1d6a0db1b4212240524e59efbd46f9e50a7909234a9073cbb7906412792c80010627ac65425a81074ca41582300c3dd206490491031208b9c00933644128082351ecc0880b783083c903205eadb8e1000d43cf6d69396a0922ec16a16c0af4cec72823adb56a21c75b6badb5d65a2b949c3d79590228289f203791b39095c8974e19950052e2b5ef7e414a0ced0e459d7041c8dddc4f4e498287dddc37741e04f4a6f9b7e9db2b50772eb6cc1267ce392fb74f3a3a2a750780fd3ab8ad7df6ee5983006cfa20b61ecf17230b491ee61736d45a44c11a1bb5e566e3b2a5e9013abc247e32f1704278e34ccc7e1ad8720035c03564ac617fc7d26e2cc608790d0c1101f055ccc1c00921e57d3290be9acb690f861c38ca2d75dc6f63eefd4c4edb970b9261181120b510f2b806202dfb478b0b1b6eb8e136a7844f4a92d439c3380a4344963abee7dfc23d19886d8cbb774b1f23a078ca786d851889e2fd1ac57b317452257a8c6c258a6ca1214ae4c418ab4dc228892773ce990413a08b25e19344cfc4322c4ba2b563124566122b950c67388aee929eb4600d6bd865c26407311162f2b31f131fec6eca4b2641608cb1b631e981490a484458df10615cc26889d712434b18b1037e7fefbdf79e029e4c029e8c4e0a7e820d7596586da883b510a444151bea30890286042860099fad7200ed85d6b3bb96174bb436931e763700f9049c34c7043410a1238414ecc0881f88de1218f03004932b38014910254848d9f89ddef09e3101f3e156c122a93ad0262610f2a4edf564e237ed2763a3271331cf9361914d20b21c21193b7a343054fef055568ef53c9a8ce577e8d1602efcae1ecd6db9f579343622d9f12e5e8b1e4d75a18f4d50a04703c48e7ff179f468e463cea38171286546fab133ecda4ae7f1bd1829c6ef8e915dc2e05e7035c0ee19d1c11f3a18a585eb62112e709ddca1934d9843a874f3a806f88c803f44894590ba4c8b3adef098b05f72071f76fc2da20af1270a1223f8830e3b9e1ad1840c4f060201036255b0f6fc7b3510f3992ecce7c9ccf88c0565809f0ccd99206f1d1592739626cd71a7cd7b28d343bdbf1c2fa25eca4f665ea3f33204c921871cf0c9601b96618c6119ceb659da66281d6bd7b608c468a592e92593c6d854ba4fe6da63bccd3c433ede34eddb168163095fbca45c7a3ede72e05dd22cf2b12dc7ccaecd4c67612a1deeac5fe97797489ad321dff88057c0df909b10d7b56096a35aea4c28e3017e32ba151883fc8290e8d92fe8882102ec177484919d8d7ee8b211e45639dede90093d1afbec067a03bdb4e61fb67c96d12be09cbaa337ec18e3edf5db91e7c948288479b2d10acfa3995836c2f2afd85dfd6987bdd9dd69c73d764cdf587df58a13381df294b29ec20d47ad9c0e591e6e368f4228c4007090524a0949f002e6182125c8ee34ed8822fb3d664026d035d03d5d432d24a147332fbb8c67cb164325c850769427eac7516eb5a5cb082a3f1bbae8a37c236ab258ac56abcb56f2908adca2e8d1d0cf2160c9c7e7c9c07325c8f25db6da70d215e454a8d004134c30a18f80e21ada8e350e3f63ad0330eb23f2b376cc75264de3349296b1a69d54d29dd647e42e04426f9bb40d97347db31d6f39e7211cfa08973e421fa163654b16a8e9c0888991119e96b545ad56ac6f15b5845a38101111111111111111111111111111111111111111111111111111111111111111111111f9f068257a82ae30147405a0202b4c31addc0517c75c095e83b2b5b33409b2c292255548b2e53515172f6d2d175cb7b5dc458b8ba2d356b47521282a2ada5a5ce4975ce81b966b34d056cb4a6bb3fcdd85162c2b2c545ab460c182050b162693c9a495302a7285222b20d1b49348efee6eb55a3a8956ab55d4e281a2c307bc029772c02b9eaf04f2b2e12b3d19d3e3c9986ed2ed035e41355dd195cd73c0440209249040c24a29a59473ce3927a594d25a6bb5d6de8b44d4484499234746022da499f0f6ccbd37d248654ae74d9d5a41fd621148a4520996b4c66d385e42996de6bc25cee6edd2e9e680b74b74c8de3e5f556e7a0e2dcee2753bcda072d37ba8e81e2df47616b7b7fe462ce5d397b8acdf93d13a0979d39d76981d6fbf219f6a07e372d01c3207ec70e459b05a5b0ed9f22398385b9456e09236c2c808f260912ff9eae2cf4f8cd14a969452d639273532a274421e9e2abb2724a48dc8da880cff301d519e6aaaa36a2a718c960acc721df171a95a73aa8aa876848698b85e40aa1d20cca242d0d68cf354bf396bb594dacf798cfb316777f842ec207ce420e4417d688f8ca148e43512727ca7d292d2810680975799b3ce8a84fcab553db99b09cd58713072dd77f4880ff6e61020eee16a44c81d15ba48f20d768a6d36d4e4f5a42853b130adda49428196dc25444c3a8449553d1091eb214db20489901093a126af38739f14c599abda111a8222c4a4896ae7aa5857b5e3caaa1da33b053f192ddac3863c1b9eaea40dd2a18e585f4d0810dbcce92272475d3a08f9e69e628b6998424d77386fc33ab5bafa86a49a1ae1680f0d821a893333081cdfa45a0893a68ae89f5c5d4682d041c810de1e09fda149e20c509cc9523af0054c3fc168539f38d3d1255b5ebea027146d797a8422d9f2704be9c017f4bc4ead3676d236bb0ed8dfab6f44b5a474e00b4ab459a9a63db5fab66d54525a49af14569803f5a44fad524474522c2a3508a10629a5146a9a464b3e32c69eb4bda3406c6baff2da969e6e4b754a27ce40db522b271f37981764fa2e73e578d9f3e7d1c8db9782281705faae14b4ed25a550bbe45ef6db6cb4d3d7a3a9b7df389822f28bc296bf971c96bdcbaee9726dfb4b5b1b5e3bdc3f8fe6dbfe869c3f4fc61e72578b285bfab1456cfbebdab647e585a35684492291a48dac2795421368b6a77452ab149114eba588a456299d142ba5935aa5745e5c41281da57482e41049b14a472b56694a4a2749e9288ad211cf7ed92e409c72eca3486177f5c7a5a545d9f49673f1f364e85d80367de65672640cc5d93b1720547a9e0c3dcad9f4302bc8f45de96853179e6e65b5e933ae53016285e5a2085a9462a5745e5c5ac44eb0d4e2cca996f2b945da1c42082175812182464a298410c21b3183e921cb77f4674bfa739d9052ca390f79f4b4fc90adad393286dee25b6d552cd58eaaa562a976e454b1543baa966a474a154bde68d3638d24dfd45328aced62bf202a48d9386a3543a9b9284b893356c397519c39ca4fe2cc3c6db2e55744d1eb2879529f4dfff0e9c756284f45f93547dac02e1943dfd59c52cdd9599f5ad875ef4bd845c2ae0dbb2eedf0d0a6c7dc4ad10fcd2e75f792bdecf5f4634f3f9b9e8a363d8c0a32fd8a14363dd6e5d73ef1b0a5aaa5dad13722dd408b91c658b718552c5591a832b2dd7bbfc518b7bb65556a91ba5caa1dd54ed501b6514a6f3afb6929a5df6c9558f64cdbb6edbe4bba37cbe0f611ecbb695a46af695a49cb6ca5bf576ef85ed36e268f33ecea6efb30b58c31c62fc398da7b0c53ac146bc339e3a75612db638c4bf8259b33cea52ec59ab4f42b6db478497734e3d25bb0c8b0cf4a73f5d9587734dc4dc3299d944e4a87b248d146a1c2931d80fd82a8e043859e0d77d82f680a454ac7e6b66d1bedb2d78f20db360aef21d7a9ea96ddbbc0109161746bdff2ed9c73aa8cdc904cb7767bb6cfdb7fc46de271abb763a5e374b4b47ddad393364cabdcaa76e00b2a1105b51cb018adaa15adadd6aa8c44fb1eadb5d6aa8cc41855aca8eac1be68adc5af31c31966553b2a9a15a4b092b25e7252f891426b0a417601f60b92829094f29bfcb6c96f72abf7927b7ba35b0e9c7d67c6b1617b8a88a47ffb6ddbe352ab1411396ffdb66d45e47ab7bbc0106183d939edb3bd497796a4b16f9a86adcdf48fb931ada25d2171b6de7bb2cbef549e5e55e49d6ecbddf8b0e159550b53b5acb5d2b56ba66990180d52b5a3da51ed440c4e2c44614a1498c4d77a652d3ab269ec17545474b40db05f5051927def93775e49eba52956f67a71dcc7c274f9637fd274cf827b32e6ea6db54ba56bcaf5928321225bfd63ee7a798cc31abbc96ef743d24bfb6a2bd51dfc949a458a95c80a4cfdc0a758f558d3eec2590e7574d176db6c48f7edfb974aa5b20dc72d5d85cbb75ce99823c54b132c19619c610a3f45e466fb0836bcf31eb35825a50355f816aa6c5f49b1b69d7a3bee7e4c08e1762cadc5b1e196ec6faa87dd954810a6562922a9229747972ac597aebb146b977e31c4fac676f8f3f7de7b4918474de5506f3160549fb6c7976eedad7d6a1567e2ef5344a0cafe5a6bbb7729d68e27e5cd66e5569756a27de9f1beb412a37de9a4bbdd77251eeeb55f29c592f6b337ccda5b6b37924d11d9f6f8250ee64b8ee5937381945a653b0cd975e8c522331d6e362fdb070f3bec5ab4ab890577c2fe36de4cef7ec00d9ea43b88a396d2812aabb1af3a7c336c3ae4b26f267dc25ebaed4a3cecda6545f7f6254ea3ab0d03f21a7d3b527ab390ad56b5eefc54ed4c1ff28a2b763c851b876a270ae16053a9aaf5decb93897fb4e7c9c46b25b97b79bd3c9a175b8ab4ad976478aa63dd4fc0a44d089b97ec18e3124749184698d564510eb97765423fc8ddcb48f6ca98642fc8a976322084322671464a1bd8e3b31ea0ac88ec073ba278ec4c3dfdbc3a47dd3ee8eac518a31d6fb94c0a57773d9a921945d492cc28de23d4bcda0e584e98ad228ace9e2359cfa6cf5ad969a6bb8c087d35105e9a93655996ad322271a67e3bc530faa2a73971463b3d0d1267ec293e3d251267b05358f3a48df9ec32fb96d52c8b1a87374ec86b84c0c718e27a4b3d28e922e4f9e783e42709d0122126434d5e4f8aa01849399aa2da61b5728c90e7634dac8f3e48e29238830931196a1267306df324ce14512871463ea674a0e5eea1ce625c606473fb05412127b5d22916b44f46fe5e97a0dc597ac456fb68de8bc5a99a9675d96d46035dfd86a4f3274281ea23d4a0adf97a34df2a2d90a531c9dd291376fcd5605c10690a523aa9556aa552495961a148a552a9542a551578b03054375a2b94f1f347e868a094d249e7df8e556ac8a98a6cf8a962c10963bc73d217e13f6380852329ad528a486a15e1869f31c58aa2872874088a32e564b4e531f4c1639e6260b63e6a2ab2c9e747561aa718988d10420c9b1b8e18d65a5be73c9d300e6c0cdb38298e4411c4c658f6eccc361c51eb2be48ebeee865cf70d357d19d59c3833299429b4884aa14791c77dd7838a2c6362958f9c0c1c55df0a196b517a241192170211254d3e37648c977340444953bcf1ea06c41f9d851cdf994c3e32464fc933a24c3e404371261e6e53122671a622f9312d31557b23c6c8bf8733ed6d36d9314de333ded157c67a342fdf0e43a1c0fbc21d46b3e40bcb6170517ed1170ba441e333667c86b661c65f26cb0f1072a9632952f9a955c40285c588454a5e912e49bf21df004963c6230ceee59ae527ce74ef8725499ca94be20c002ef10e2b458f06c66591c927cebc5cde8424cefcf2a69f38c35dde9424cee8cbd50ebbc345f733687cc67bd0f88c19a771750fd4699c86b681c6512fbf1c07e3b5dad2e4c352640160658c180d70d147999ee5e7d1c4cbb300491b345a58eec205177761468dc175383bc6b1d564c4b8105618f173c36840bd31833b451adc29ead30c334ee33d669cc6679cc6b1bf60d8b1c360e7b817519ac3301adc0cae567d23a2a43c0c2e633d19b95d73140a478be89388927fe1e82ba2e46156f464e4697099918c919fc13d19f3e2d866f25142eee8cbe59dc967bbfc491b269f3f79eaf23efd491ba793c9475e69c26434f9c4e05e44c5380caec3d9308e371c30e69cd3e65d5fe04b8c18af5cc7811da3c561702c6eb90eb5b1671b8e16d85f701d6d9db8eea5711d1dd2e202cb0a4b114b110b13d7e53944c9e4c392a4cb1acd268eaba7fc0d07441baf469e8cf68319c1c481893043a0426f7ed35e7a0edb492210225e04da4bb7db493db693f48dd881c8692bb216b91751f7de67d8df16533a1cd8f43764bd52680afc64743384f63c9eef25438c997f67f14d7758e635deb1fcb058b0c6651e638c34320f999579c8463006f598f7403d46e628548da32a07f3cb712c1ad24295772b45ae9517445eac5e047991135133566f932188cc6b1ceb2a725757b77e02a80be0138879004420448f1a0fc04520a34ff20238ea0278aca14f529faa9e410047bd8700f4933111f51ec7186a18975eb94ee37412727d874d383b56ee97eb38508a7a460f10b2cb518f79c7f2e3c25d8c5acef2c39284058865c94a918b4f172b4532f488bfa6186122f7a81f653c461c7146cf8c20e2cc9d7124ce00e02bac3d7f32fdc5399e38c37d5e1f46c6e74a11abae50c7a9893147bd47cc51a8c768dd23008f798cb621e601d03835917be5604c79a5684f969f192e6923e630607472c788c1f15caec30100572f65ad5c29e2ec58ea11515386889a2cefb2d1799eccb497c19da644d43c0c773ae24e1c77328aa819f58f9ecc8ce1b81c1933ab15b9c57ff46872a48d18d42b2b9f040f357f2319336bcef60eb3ae8cd9b65712bc19a39ced737bce7eae93fb45777448e68cf6e489c17574080caea33c2fb82e6f17175c3723883ddfc275790816ae9b43ac70ddb70ad77d884eebb2285c0682887a1e56e064c4f19c8c381ed70f8da47b739671abc1e213d0a3d14c7f2f3effbdf862fcc6f2b3677cd92d3b9f82f6bc5c91eaaaae6aabf6542295558bd41e2a4f35a2697a866bcfcfe89131730340484a0d366fdfdb93d1660335f36ae063b81813857e464f7cf7f26ae578a2a6eb16a5564de56d9a8a1c73948efb2e03db0120f468b4cf18eec998d7965c0fc7a3a3c8ddc968cf9f8c725871467b3d49391d9da6bc08f262f582489c897a6a77ab2186fbaeea6b2167a42708ee08e7c321893355f788a8a955191e4dccc1ae01eeaa399e2733af8b7237399e3d5fb708a38c93548fe77b104e128cd726f06446c5911169fc90bd68ec66f1977787e254b8cc47c6c8ff5ca02cf4b2a12d51fbe5d84e75475d389b116733d6c9998ea786c10dbe9c5fe23a1c1ca5cd66fb3de5ee6d8bfc640f160f631db90e733a09395e3be4ba101c6d78d3713634e5c7fc8ceb38b033a6711d8abadedb705c6ee26c4688b31961c40f5bed6dd145b51232eca80b5e4a892575e5a83b723450d7c5f42a7b6949a2c010d1de6c808ee225797b001a0bb9cb7b2640ca0344959617325035a6ad74ce1c8c5d40c81d76edd8e1a1bcc243b8097e3d893347f8c88ef308c225ec112471461e42b821741dc13e184936c4537b5cf508dc5e3a4e0ddcf4761b4acffac918a8bbdb43db906fd2383550773f26deb8f9cbd543eba28fb2ebfaec887f768c5868c7b9d924211f3be4eec661edfe86cc38ec6a0b797607c31ec02b081c654e5414995208e5d353e4a9b51419be7cc5933c2f9f1da7e654f56906ecd97b60cf30dd037bf64c3b21cfcbbf88286d94bbb7e43220106768883372027146861e17c8c0db284ab91b5173d6b7df9e4675854f36f112bf9f7407a2d6396244284aaf1785c2c8a842616464a180028a0b85c5a0c8a0c8f02f4608add02ffdd22ffdd22fdd04dd04dd044d45a6aff1f2d2080339f2108778a8e5c45feed5c408af71af2667ce209c08f0e1d42e0ee68430a0463ee382ac608dbc1006d4cc3f4dc3413e5bbd06ff72417090cf2ee43558e7c8673ac8ea35f0424e0199231faf7138c819e47bc8c78c5bc19aec18b78235d831174408036ab2af600d3e8e9cf6b9e138cd30af9d02f2508b0007b912c0a9d1b40884e8810f2f82ec91fe0a11c20703763dac810942f6f1aed855dfd40004f13500c17c96211e6ea719e4e1af0cf30f8261822e4c11644c9a07f7124ca3f762d6fec67ecece5ed381518865bf15da9348241e98c418639dcd615f8f518e74a875137756976ad59d3dddda3b7daa9374d2a58c888aa84dd79f6cd51088a8d8c9d89d0c18e33d61afa7f39d8c1d51dba2665604bf88276ac5b39f92121cd9dd2dc16a5f25438cecefa76448908da53d2aced4c31091ab842122d7df3fda3769b42fe688313b9e76c4d7c37dd211773c900de0ecb76fc4faa8e36faaa6476daae511a0b6977ede1951f2345f7fa7dd72c463c76fb3798e7878baa77bd4b69f57a37487da6fbf1b1be027e35e2c659238638176c0fbb6dc74407a77ad87434342793e085f6111d501330861a6734471715f3d6b3dada7403e3890b73938daf6b7489e2a1132b4e9ab8985c974192f7eb6d59d6603ffe90e73418410f21a2170de76c8d752697b1ba682d9b86f48ad45c60012e0801e17a0e10341583df4c43d57e2a6f968d865d1e8e3bdedea23b6ed804a8414ed2d061d374714d45474541da7843fa455694b25392cd94f490e4876575292032b6ef436ec0e4321e408fdecf793c0b5e721094af33440ee86e33435c7d93f6e07dcf04d6c8b417738a7f9fe70e29e105228eb1643fd7b0dfa635a7b79bbc50063e870b6ad11510f6e5a63c2f9dee511c53eec9d7cef519ae9fb9e8cacdce5a6121c886ca9e486293b4654fd89a270f6ec9ea4017ed1bec20091e5df0d8511227773cffb79fa68b0cfdf9bfaec58cd740779d8d778ab7d8587597035d9f2720992fdf6bd941d633f252b26fb07dcda3b6b31ca9d20b47062f8daadd5b20d87b5277bb9937db59abd586212c8dc31dc5b7d821afedec04efe744f57ef40516badbcbd0522fb286d085fa9c035e24c275f23886d6fb7d0c37efb6d81c8ce4e5fa74a4445a87386c770c26fa50d64eefb1f73d317b7a505efb99d42520d4f66d3381f7077367b4675861dbbdaebb2fa99cd799a7f7fa779fb3a8fdad8b3895dd43ccdc3899a356e5b5a58b21fae81e7e7a7eee44ff053ef406d786be1afbce9e069076ac343ed036eaa6fe0a3ae217540b2f57e415a686d5cb27910c8dc3e4a7bfa80d8210e6be1bb7baa87b7a7dca99ea2f63d566bc4197a9a870fb5517b4a5dc309b8468d887a415a586d9afd82a62cd94a5649b6693f252bd7c6517b8fa606f8f764e4e549ca4bfd1ea635e2a0a7303e19ee13fd3bd1a3f67c3d51bd03b5a746edb96b3c9977d78bf73636c2db3c5db3432d310ffaa781bc77b50efb79ab6fea8d8c500b582947fdb16dd107dcf7b461ef1be703c680c98dc7bcd540a0d43bea6d6a4424b09c8264e3df1c3fe086734bbd03858a2898e38465b7efbd6b5703f9d352e780afef8465dc09d33b50fb6ad4aeba4644c11f70e7888478192f23b61fe4b123ca47203b284dedd1c43877805f9cb9918f340b59f051da3ce625f7fe228a0302712884ae275b7e0ac164cb4f2b92d4dbe392a4bfb1d7917707e2b1c5a58efe07d4271df2f858dfe0c7731dd6318f1f8f31f551da1d784fa6c3a73ce2f127100804dec7cd06637f1b8f7aab81401ef44f77f251dfccff805bdfc4ff809bea99c307dc3ee08e3a83d306f3f6c8fcb5c2887cf2c9271feaed40ed7d5d6074907d40793c2fcfcd5738ebc663fe9e6e3aea2fa697f092db311fe34c849b8e980df54dfd7de4baa9a3fe028940e0a63754df1f704f49a76045914d3f7dc019af6931bec3f82077f4f0dddcbaab4181140103031818c0c0a00370c3f8e00384103e8803c68718a38d3e18194959250e181f269d3e50181f6485f121c3db44181f6cc47153b0e5780f85d26678354172e8c981f2b0e2c53135bacdf086bc18edb846f8a6dc6c48df5e904bd75cde6f4429a57c892b69da56b7e54aa41bf142920d5d3d1adabd5cfdb0a687b4d3cc058688a90d6dfba4bd7d06ed2f75d5dbadd1d6a3b11bbebb5cd7b29f4cf69242e5e5e29a73a5b5d29a9a32711d7f45861bbfa34cfcf4acb4545c9994ed9156e102e836a10ab84231bcd2caa4d0253d3d3d3d3dd7b4a3fd7469955714728e565a2f5b6a159793dcadb4b0104f750124f526257675a757783a979556ce596945b1d21272715d1ebd041821a70d3f6a7ac4a3e92d64b8b577dacef4881ed1237a448f5e102f1b62974bdaa043241ed28288335853200a44818032cd6a66b39bb5645a5add65a9578a9ae48e85756ac953794cfeca5b99b1d0974d754787ec995f2c9a85054f3ff8061816c0ecfcec58ffa68f85f5c11a0b532463404f26523d5d3c3343328fb48e1c69b56ec613e35d8092aca48d3af5ac9aea0cc9cb11ca73e4de1fc0b4605a30ad674f778013ce1f9eb2b87a5c43928733477aa9cd8ddbb5e7809fdd6aefb175b407eea8eb9e6a1ff00a58035324d3213af37932714e4d573e994f930cca63dd317ba2a3e48efa644fb01fe38c6cb446f08b33aa685551a40a561255e4cc29ad1598cb027d692a49f2a3b13b424e2f913bfac4e521b7b4b4b4b4d05794021f0c3a3a227214a4091552a828da43fb29f9d92a54ec800a1b50c133e5a4824545900d75f20b9a42ca7e5354210a5b25a2a66832c592a0297830450cee143a53acb64add52771ed845c010beb73d28c59114539062488a25508a24f21203fb08c6529412ea7921122f46e048f0d332820eb0d0d25aa03c8f443ac62fd1acd9bb3da503555977b0a656291d9b5568257dc26b177337ce4879755237e3e69b92b1544a47bb54169c89db78e07d2db4f035a55389a4300264b5176730ac3becda243d3e236d9ba69b8d8a155b5e48acea41d5da14e3724405a456a8044ef4863dead48c8c000000004315002030100a08c442b148940582a4891f14800b8d964e64521ac9d324c75114650c33c0104508010320023233238c1200db9e7305003b0a107ac13c1bfe47ba93678d60bfef8324fac006ad68009b395987c2dd5ee8c50581328c6df62b364a202aa0dfd2fca3b89bba652d788dd0e6267b7620bee5d832fe770d91fca3cb496904568ae0ad9ee96a8ef5f640342c132e3938bc901588ec91adb3b640ccbb9e7fb7d0aa315cca98c5032a15dc98e38351551455893d40d660a037bf5f1e377e307e0c6549994aa45228c0b340d08a2f364e89c2018a8fa1f4f77b5e2ab70fb80fb804c56a344ebd6b2b186d7c6f072f73888cd5b40b799741987b0da129bc8898338896c5486700aa1b181ed103bb1bc8861cd21388055e7a1e5a0296c9165a51303ed8a483053f350b8a3d270b410418b93133bed265da279e97444e46fcaba654b08ddfa526138f9cdf786e86bb2acabfe00663a0c036b0cf4838d37ae66cc153cf49cfc72295dae15a6448e243889c4c4357160bc52ba42082310d354362023b824c8dd8351d50736108988e8c1a0157f4e3d479508d325432936282097faa84ff9f09f5bd85e7981f770561e2c9578f8586cf51090aff7a3685e8612b463b87f8300c9e6c119aea0b074809efb4445d8893bb11ba87a60ad5c760b10c892b3627818b19a22cb094355758b7416539080e0af9b81bcaf1721e909d4edf48786c37acae74781009c19f2ba52442a79a0001ccb045c6dc77008c13eb83114b9359ce3d2065ac3e903cafe0736ce47ec71d1cc04af02568ca4d28137e6a672ddcb339dc5e11884e9145ab6b6b1474ee514be3c2007ccec84d10391f61318fab6563788ee308714d889eeb3dee500057d4478ab9b58fdf0be93829744a56af60acabf4b06ea5112cdf3b970dbf84727ac7aaf832c74fbbc375e607c9482797ead0718375f040692db9737cd23b60a2e0171c55c734b4950d0e9bd8edd5df79d6a67ac160b3d84960cf734127babe854273aba7fa2df2bdac21f4fb39cceabfa4422a2a4bc52c37358cb5641ac8fb36bbdce42fa77f66685a91a2e59ddbf10f504e72a7dfd1bceb67ce3e95f8bfc17c2b8aeb692b9bea06defea225a5fb1559b2672f732559f74aaa7c26735016c6df9d1a509815c5dd28a27b62be82a5a933a5d627de62bf522ca2a748e8e393d053e1700ad5e43a2511b0f346aedf7c838b20fb14c9ccb53a6b3d29dbecaebebb702c3be65aa4dfaf220c035290547eb83512d41d2ddd129421da3e6c12823051e88851eb9cb283070f92c5faa36e78f0045597e770f4e9b2632187cd99c651f8f6af335cb4b4cb2c197507249cc6d3c6cea4a3f17221d72a53538e6c6c7c954da9286a413abe66fd95f665b5c69e69345388c5873bac01e666c2ff2754f0f97674013da91c9eee4609200d3b4ba6594ba8d8767ba0e2238d43f2b42a5144a18ffff765c21b5320a8337cb3e88a8f01fe2316c1f882c81980b0bbb330c819b765ad5b964f3d3d0dedde144b9136a7968f252ffb877d062758f46cf478529dcb444251cf4adef55cff26d901c1022dd9efcc91b20f47d0980ae0bb7201a16ff6436b198c2925fb1ac36cb9bfa60f0e41e70bee87273ed4fd56c4238ea0c24686478683bdfa0396b0a1d54221c5bf488c56f5fce88de8eceb44c78cfcf08067a9aba7340bfc20f513777371320314bf8f2303eac3041ea9f21e269790eba96365fc3e329640e1b9adff52c6bd0276b89b841c34fbbcae5f363fc038ef7312c0014b69126015b99bfb6020ba0f2668e9b8865a4a010c701a0205de9fcd1a68f07dba6d93e44603452d234d8f6288db9dd5193841048e5b5e8d176fb1f4a9ac47a570322bc4d714a655c9d719a2b0509c6fa593a67cf07dbc7e19be7068bd0df5d1bbcfe1e9d8f4576c2ac762d4561931e4b785fd5d10af4732a6ff945ed37e9848fcb8d5a5a6eea2081e0698a7f74bfe247154f05b946b922f15e8045b55ef8f88cdd59ecd10e35e6915ceab84298bb632670022fb70e581adf304cb425853e6c02ed46122417883bb73e73a480b59a60273610b9d3adcf67349caeb0693646252548e9a9fdea17f27f54ed0407cfb7bf7cc8cfdcdfa4f8719640dc30b1102e313da6cf4705de60994422ea5003ea8f60fdff20832a12bd10b8f093a4eec839ab5498518cf47c61f6e407d89e28fad9a40231b44fc8abba1607b4fc971b91af946c9c7c11a9ad8cdcfae517c874856cc2a9bbb32aa0257925a0167a0c9e7f18b91520707c9cc98e15278806d4a1fe63cc79a491dc47d64fa5424af6d11ab52ab8d17ddf6dea4bb80dcd1e1e4565982f1baa827626586120b60c737d8dd5215b344e63f6d14ad9753040dc39374a5045d4e4c0eca4d4d76f91b4e58009c88a7d06b09edbd6e9d5f0fd789352fe10794ec1629dc9c044fdc27a9f6639c26a1cb3499114a31dcdab05351350b1238572db0b3c046742c20b681eb6f162848630885d7483b01f852e818e588f53fa45b32c981ec02172d121ec39e0ce635b8d697c1c82e676378524a4d49a18f2f95993a165a870d2d101246a94b6d7013f6d2e4034eeff059cdf2ef4cfced2cdc445b6fad7c566e597e0a8c455713f1d3dba299f6c3b4610e233bb4300fc4db59d50560560a93e4444950c76ed2db8ca25a202f650a7aadde8128348c2ad7e816c5aa0d84b921591a87a1e6b840d4c1a37c33c5ed85f9a6b8b0c9f940426da35aeb251f53ecc597f08e827580bc036926cfc531b67ad0811e284b8b638a9a31a80848a1969933f2d04de58c1dc847f5c17cf9d9b8aab1e8738b2909b3527bed07db56c2874debf1244e0f749d8fc5a9347c2a428fa4a49f48d107f9a23e5b07ca14ba6dc16c69caffb4a88e6778de406b44f0636c0df507f8b12938c1ebe49803ce9d239c33f06153800685f26b213be4afa448195a1430beafeafc449666558b3274b78ca7a06d94fa2c97726e1b59e81bf689947f7c31b1d3d9a92f1733e67fda2786ef9fe0fa5e9180138e84fd14d118853d9b6f7b2d135a069fc396339255d25ab309a5c8e03b580efe757f70f81b74f6fa00d289c509eb9e5a9fe5388434d38ea608b09485abae4c32b8fd68feca8ecf4565b47a4057ad1cf7cbef6527ec3e6da01f05384dc8b66928119e8a30419747c85038bc10121fe57eb030cccfb05b71e072fa6bbcb597c4f6d80e14f4f00a8e8a2cdbe636f486a7bb5240e4f708e7983d29e4f6bd9b2728bd4809800ca38716d134cd76f26b2295d37a32ed89a7c410ab42e9c9321aa5c96861fe48058e82192a95c880058a04edcfeb7cefbde7e441b5e56d63a9a5a4ee2569ab182292b8346e226d0cd1c076fa4fba6cc02a5f1cafe6d770cdcfe293a76278095a89ac2d069c7935db1fa42a378bbefb1cbf8d8896f6d198d20ba9e478515efca2af86a2b3d853da5e1618080d1d01450482be157ee25f1a9e3264b29d2026e629936d813250a7ac2596b304b6c62d2eb27a87b388f57fbb1bb2416f4c1005670e4fffa3ffd3db6ef4ed8a497a2969d7a64a5a2d2923de6245788bdd20bc5f510d64872c281d867e0b095a9142d3f5bc1377af709923de74c115fa798cabce9d5e35190a57fe6441cb9e1bba9882217f028605e86b6681a97a5dd870fda028a912ea94eee689e42e4b06637a0d50a4b2d4fe4590a49c1f7661114aa863557c16322aa15a81a2b5b919666bedb47073748e3c3a4596a529ffa6bbd46258d6b37d7619eb7ca7a0970bbb8f9e260f0106559b499db55d4c4c36f790395568bcd730b837b189580bf8b9c46d37531e1546c6f16d128c7744a8dd7e15137e40dd86351532149d2a2ec3680e8c349d7f3304bf762042acc2c4e6619ed98826399a6375f9fcda30630f2a8cfa4904bc46800fadf0ae18903f192d205f01f88233977874af31ba8c8039126a89bc2faa86c595234d9d58f465595bd9f4fdade0f748c1968b25bb41bd7a58b291e5a90665bd6feaecb6d320f18eec23071707b78389887f4f4639e6f0cd8fa33f88688572d9e8896d3114bf55a8fad315c4f847f1464d1ffe417de2afd7a9151cbe56d2790a7aae5d109e036598436a33230ce7e91479b9dc3e4c99ea2d2245c38b241d22df43236198a005b11735e962ea25422b3b4bb6796a203a17d3ad16ab1ec37f743c36fdfcc2fc9e6ee206e0acd6c2c0c7412f4ea14102fcc0794acf870bdfee803a53d2695813b245370f87fa180fdad3aa46ec062ac687b8ee8d008016d27d90a8bb3e882bd81b3fa282c0e51c08ac4282bfd39d2229d59988be679e3480d26dd46d2741a74c72ea0a8eefaa1f51376eec2bb4fd562f97700bc5fab008eaac1473aa44dffcca093651d3a20ed2180be3643eb204a8514f9053616dc5318bb17e0acc3fb36965ca642e98d1beda89468b75a4f0f0e52853c4f5ae65b3c4f196c302e80112220d1ebf9b8a496417cb2db6aa3f5a991c266cc800f6abac9eecd791e373dc9b231018adf1078948def581b4055261d88d51b6fadff24a57c9c650253f7a0c90487cc4d9304b6c95960e266f8150fcef4e67807194c13f755c87e7d59b3f854f27ec0be19551d4dce250da0d580e51167e13f7b885bcee2bb92f0afd07e56273c79ae3651eb8e1249e42c8b1bd4e08c913552f9f1028649a3f14e85889973d41755e57b70f4f0938c6cbc6e971a49a8845b2f6f678bd7649459cade59247b5d7d63433e1b5a7265ca682c678ebf0cc89d70187c274a330cf420c7351bf57c8ba0116a1abf69ac6476cb2fbf1cb52246f2fd0c8259eba816f6b41c8cf79a9c03891d874390a93bb9883807beed2c3a468f136e39b4a38584e2a8f6eda251a5ed7553a52126ac737d0ce2f11eba2f146f6deeff8aceb22cca5cbf4d9c616eb66831dc08acc7984b5debfed6d988ef16e901fa8d24d243e4f9ccce6514ce144f27c383bbae8dcf8b89208f4eba3a16e9abc41c059f32b26c009351e7c7b324ab6b693465aa401d3655f5269da5cac62b1820c46695410081785b6e863329398429a19d60ce58597db7d1465a24945cebff3d064a6c701d09d4ff5fee3b3c04c031a4950f0eeb4bd90826de01afc03e9861c96f2a1c92a17c4cadd4767eb441f2ccf7644126ef22f83e2fc6635c5d72841553ebad9cab7e9e9d75ae62318d7604c9a998606345b67c680f0e7815a1e8d7e544010dde76c21ea5c123cfa1e6329f1eed10584fc4a808f6e2d0ab4f1db331387756bf03f071af1175514b7e3612ed9036f28f1affc032fc44c73b79f12c1364febe4269208264858407775e34aa3dae9731928fb7fbfccaa99113856a9d3051c4bf26e066e353254b972afe71513c06903307b481647653e90323a9cc2d702160216ea3c3b97aa93d245bbcfe4ba9cf8c980ead36c9b78b62803ec33fedc0e2619c240ec400b9898ba15794239a1b8bb85549eac0cfe48c2bfd230e0c5fd02f22d2aa3b6244e0ad3e63964826ea8e00590303deefd87457c16d3d42593923811ead551ea7a723200263c1760929d0b9457ae5ac6ec0332b4aa052d2c03027ca5919b3d1ea32582ffcbdcea01a390e9407709704a0f9bf60ca1c1d70d0212007d100a7307ca1ff594cffaa8059157f5a02b542493966f935b30e0ba09f459b3a964efae7fb3e6ef1bae1c8e7fd54eb7caf187abe8840b2023c289152c841da8048e2f58ae0a94ce32811aa9379c17fde878350dfdd98e305e39289f25b05f043d05eba47fa1570df29a0e438a18d9c6e8d47bda475a8ebdcb350b81908ba298523f23c79df768dcb7fe0b566a7f863279226ec44255825f847607995108f7499d817526d4f072845f0e59fd16e7c00bb6348d1668bfac84263ff0156831c507fec00fcd9ac4cb7b9419240dcd243859ef9fb1bf6a58af448bd0ef16aeeecb98970d9bbc47cf16689273f5162d6e557c309bc21adb4f51d5311eabf11030fca7ada6723ade7eecb3e134d8b87747a581441c319d7fbf9c2ddd94902f8f6b5b1eb0cc9cc492036e529d987b82e17ca0a519ba37a01206126d0016b256a2ac4cdb31b40bece7851e096205667f971a40c034e21a6c1e762a8f9577eb0df10217cc1042624cadb45661aa926f5e7021f0fbe97a78c304441cc47780a2534c8d87e3dc7a83aef49b7a3611a2714481488899fdab1b80861af50ed9a00f296e30fbd54807d77082600b907f157267eea39513edf4aea06ce27820d178381e0f6e0d7d5aae29ebadb5a2ad068b444dcb698d586f0aa72af99c942c0096b8d2b736879f1af88a03f69c4e23af5867ed8a41b254428201ffa1a1634f9c1c74cede91445ca9a09bfda7d840352e6f5d0bbd249a7cae22efa8d5f18e5f4e5c8c5ca8460868f12815ca6693cabb380b4334bc5e3ba9649ff2c1d318b00f6c8506b468babe9f2d9a573ae1a279668b082c2ba6d7741181d58f4b515a368fac8efe614fbf0ac8dc2bdc87d5e10cacb2f13f7ec730c82b2eadc5d59b29368711a50b205dc266d65fe30f962bbe9e3d660f5b584861571485ad33451de5f16fcb00e043c21257dfa48ac5cab175bf58d834fc8c53ba86d0a6c8778459ee4f735dabdc3d511236c5ff0473cacf117ff2d9615bcf2b8e3c877aabf67b53db9b56d9c869b2f5515e3bd91a0729486cb533459fdb125a553a69480b87fbdccf79866b27a72ddbb63e969f4a31035165edf8b5df80d16e4427cb0f61c980bdc13aef494888cf61e124994612c4427395111d6739608a79564648bfeed5f54df817d215323ec910ea2306f8094574421636051159938a405d7967a7dc2dda60cba9590574b882f0dd9176d0bd550ee1398626eb4129a4e444f9d9bb45e4443e0e314b52e1f47e51362fef4a3cc02e679bdcd1c8892b09df0a9a904d503f8855b9fa113d59999646aedf1cf915941447bef55e60e4d5bd8f9b7a0ab9449bc229851c73836ec00089ce086661de82a9b11a9690e8a1a1630504872e1d8836ee36c199d45011bb73540d15d6f688a6a25c7472a84f13647befbe0460e4fec3436fd0c71305016d7f89ac52c33b98df5e9e550262176be40a453f06939ffac9e547c0690e8ce25a4dd9e1b42925cb09d38a9332c297ae016fbe9dac10150647f4f9e19e007310868be3b914550b53ffe75e945910e52b37eadd9448478e5e8067f2320d1977a1fd6954d5fc7177c8e804ff3cc5db9164572dc65baa51d88736d7cd8ef5e44c84b3d96a1dff1ea75ee8806d7dcbbacf87d6f441ed6f8df7e410a509d51881f366e161badb27041d477ed1080a2977e41009db9faab5e3d02c03c1f5d7a75bed9b35182f6e68f158a291335cf3efc2b34e44fdabc6d780d3575b010e9c3bbd2c4d3ef0662a11b8cd9d42aa316fcde21b206c5d3522bbdfbf002fab3e9ad59be94999efaf77ea2b9a313500a0bb32ba77c7448ee7ed36d622ba5146c30e447f11f85b29e8c52006e289bb3625b089209b6f5eab53d5b6c32c2d3d6dc05daa934e8cd756931913913e64a455d6f6cb773d157c8135c6bfab290d7a1c3719162774a52a1cddffdbe898257d37b535d054dd9162c85e76255fd5d680a77687bb877dc957d55ae0a9dde0f6645ff645bd36786a77f83dd9957d51af0197da1d6e0fbb655f556bc1a77687dfcb6ec957d55ab0d49cfde39bb210dc3c4915eb85230ed47e1b0b78bc8a3934c026a3492846e0f0824fc2f854ccbcbf066e36308febb194ef33390ee3d581231c1bd0b6ae4a1d0769897303b0eb7f1eb94c82735bb464f82fbea6615b45c2bfedd941761d1fccdea5a261ec26c75959374db340acc162a9c0e8640d8c942851163bcb3e92a84073815818582ddaacdc02cf16b3b653a8b01f8097561a77521c5918d4b49fde3805fc89474c1692471fed9fc60e12e2a05ec22ad891120c34858dab08e0902541680bdd53960e004fb001b69f1ebf30f5d9cbcd449ddfa0cba2b31c09f4084b7f0c81c135b44823922fb395efe8f5c8d0e343caeb848052177bc7f115271054632d9ed40714797fe7366f9d070aab8c7d33fa676f935ba6ebe67381bd0cd8f032f4ae829e28e94b7dbee938976135191c4ecd675e3520699aa0e32f1c870b38a77e8c35c000ff6b0e287b58228706af610dc6444029763855cfa31678d91f623c720cdde83666b9c0a3310b5ccc96c5c7d5e0f3d52554a7124e84a3f6745038bc1a288a00b113162d1f162372401818696f8a9731026b52cc0b6334cb1737a832b9ab01fd8032655de11053f2aad3d8e5aef512ac14f1952140a14a7c6c78eee8be8845afa02d0591609d10387e51febf9b15c0c2f11e0f74541cbe465ed9275d81fd0b63b396615d88c40b7aa5c64f5671756a9aba5bdc49a4ede61ef598ad59f1629785387ed366f52d47225fc84e6b2876373e544acf4ff3938f6832b44ba02df8d5e94ceb91088560adb78ee5ac48f5bc21ba1953e9e4311da20414965df06ca4b81953542d5573d853d75b4a9073ce723ce4bd8d31e8b68df684bac819fcb56896b4a03f9254ffc7b9e4e582c1d80049ad3aee868f373e1c4458dfeb485fe1ceeaad4c89954636a81206f6d7ce22f68643b5aa3dbee171717d348247e5d47506ad3833099718ba79c2d6d3fe7edb07e49dcac46385200eaa54e8e2f61b646068a28b5fe82735e13d75030e9abaab07f6905f20c1b27dd138b9b29967f37ee6b0051dba09c5ce50b37d95ad009faaeef1cc319f9021c303bdc28bea4d6824bba5291c1d2075c3ba699378616996cbf01a96c558e5e592b1a6e50815d1920db9866c6a8b74db7572c620afafc72ee161318a25424a3305d2c78068a9ba90becf01c6d9d69e60c192170e0b6ae516ad1131b88f127d85b28297e347cb9c0adaee5d0bd2f46d98d33265c9f13dfa62a7b5e1849438998ec319e211004e5a0b94ff6e88d8c791418ed5b957b63ca9e8141f446fe75d953a7ce35ddcb614bcba87abf4eb3515e4488d7f31b99b0c84d32bd87742c8a2bc7991ee85ea0082698e64040219426e1bf093ae35bf24d12bd223768fe5905d510fcc3361ab122359a11608ec40adc67e1239b1ec624b6e129a3f60232a6989a120928f418d546ddf4d866775d85f9ac1b4454227a6223465bf4a70dfc0448393cd806ef017eac20abdc4b4667c8f195362d5cdc837296eb7513214be6d9acc1153c19b58965074f23977c576f7272d07ac8e08f763d3899d77d09c23cd8d0af7cdca2d7d943fbedcf984523ad8d1043c2abaf41f22f9c1e70ad6d706cf8ef25a6673cb54265e15fc9c9ece5e9ec75550bd2ef9654a83f2847af9e2cf3bc5d41a1d3cf44489fe0895ca1fe531912e1486395c4a99229ee5d5511ae39382388c6aa118580b783a316da830763d99b839bf8fe065d6e9e6bf2304698240bfa3190d399a11a53724114b47f77f99ed5606e124fbd8440908e75667baff8e6e4924790d047fa2ad0088ff963033f10b488dfde095f2bc4feebdfd65c855fa1010c9ce79197eff8ad4f7fa6c8013e348750a88207ffc6c590b80beb9d9447c192a1df023793092f420864530a835920be1a035d72ce43d2c55cbac17aafb83fe6c15486cb129491b9482688df4311d948d0d0e67b58baa1a47fa0e9e67ddf1a4fc13c87dd4eb2b2dab33491fcffc717c84e7a94bb600ed62c6d5cba72b2ba3a64944f8046e627a64f458e4c2282764d83ca602437f0612197a06b245b56384c92d296476b901abeedb12792829294b208e5c5452c4f80266677a10ab32c829669a7fe13f65db3974f7911fa31efe03719a32727f75707ea9a003ea374241f126466b47438a9f7ad7a4f17286705d603091c956a4d1f44e8ce90e21d214a6a48176874321624f7398b3c3bf4d91da83c1350bc1dd4741613839b0ee401c2419eb76f27a3003cb4dde525d6672d8162effa6c19790d4a7dfe18d7c9562f642a294ae576cf5cee279200ab362be856f68fa7c54747eb7906b3d400cbac44dd11ad9f5c185596bf71ff9a42ab5362ffeacbb4b080a1b6e0f0f154084e57c0e58b08adbc72aef8f6dae74b4873e2f10396eaab963939217fb435545f68aeb5dc6a44011659ad2abaa69bfca0e0c674dc9317e64f558cac29802a0b4d538538e3d34ffd7413debd9effda2d3b8ab0e35fffd2207bcb939869ba2f75ca71e824d5fe2ad40c7966361e7597fdc0160724e941a561a59ebab9e207a82fffc18f06ced6acae456caa8706044936cb4666ab531778d6cf0df57b8929599086b9163234391b4d851ff5dcb0e8ec55cdf81a2f06ea99e10e31ac77c69c271e6e43f1329c5a25fd82430e52a6492f4dbcd76f054b18d4fa9c81b21bc2b36e2561afa1974a44d8e86c712160314513284d8916e73495624eda06b0e1708d82f1e28df2779737c862e0844ef498d4ec6e2cf648934d821df884e318d3ca4b000b0614c8a31c37af78aefcb01fe0bf0b70a1c5874db12165d50a061d80252be30489b4e0a399bdcb4f427b28848070c086357a76fffbf13c37a61a720094415946e955fbba63488eb171a74002a63e4e88b040440a3f2db81d3ade7b5c868f1fd6708c17174e622e8f669581d004548dd470b4344f7af6fe7ace3cc9eaa0be0b687767096dcccdef8aba9e1ac31564970f854ab1ea60e411bc00662748222969f728510d01f56fb96b8864e87ef2930b37d6660e07fde3263a2721b4bb46bef729af0ae2d771ef74aae3745583dd18fcd4f4673a5ebc3fd82a5832f268473fea6643badb3556024158893b73ee80d2bcfa20eab5c8cca90230e0fe9dac4cad9d7fc3e10309a6590809584659375367a06bdb102a9a44311c7138cefaa9d7e31c1e5c234fd60b14d3b2bc9d813ae2ad33440d43379a9c894e10b9485ae365ffb9083945875f2a7175f40a23c753be76180da6a055587cd0bb6db57ac41e433c0da885bf9b881739a477ec0d2648a46195a2634d952db5dc40d963c414023b4c260d9593c64540c9c3882dc6af513068a4446458218901492ca5886d2736bf012737da846216cccf05caa8ce624e0dc3c884744a4a0e47d9312cd3b493f90737e0d3fb08579b65e9ac46afdf71f5ca3c624b6a15e1b38f2909e3739c8620f372b06a5e94285de1b0ae0385de3891a5748ea91189cf35b462514c4856295bcb516f2d1178f3d188ccd2b1bf4468f00b2c84e9d7a55788e50ad995e40629a8cef6342c2c9036839b5061e6c1cc53442834d651fc9e7d1c26f72a16487a044be4ca3085eaf63eb29489be6a3380a671e6d274f3f4a9569c9a717c69c6e1e11352f2e5d06c7e8a712faca2cda693c488f68f10af1711843ef966077dbd9eca9daaad860d34ffdc23d01b7232c8303950533257c2ea119704d3862d90cac4860a7ac3588347db13c1b083ce904b656d96ccd53e5d14ee89c93fc8e3e2f84dad94961445acef135aacf5669de2e4ad5bb5f491d1babab3e0c863904e1bf8c6e0cad5ec867b66ed0ca7eefe090602ac1d2c6657eb111bf079e7e5c39b1672bfd3b6b365d925577a6c1a4008630f0d04c82ed33c547c4e973de699615aab6b4d768e8b750bf13f0a5ded828eb0facf39deee19ce1cd59a787c2336f060c5d4b026420042d392625c472af5e7b97050a35c30d97f9df7b1587011724a4b42e68e9359cad49c700d3202214043265be8e819a28f22a4925be0542e706907d3068b370cc20611e9ba51b31c37c79e0f9c176fb3bb150f7fc947cccc278b517b713484ca49cf9b4b3d3d62df2d19579e98188cd76d46407b24dd6e4de9a64701d861ff6773917f6a5f6420c20553d5e9eb15ec77aafc9e05444ab8964d9be06a903a9ba29bfd9c2b1d5557159fbf9c90d2f60c0f4cfa825cf648f8f9dfcae79818403dce4250f8edaeb189059967103c3b1135e7a164e987f543b3e580d5253e8955e6b2d292f111eabd1edfd2daa8af512631a29d6eb050180b3e090d7cbf291f1b0dd26735cc28fb6dc1e9b2324ff818be6e9702864cb0b687a1686988fb803d13f52ce9fc9604cb0b47f57e6f0a95f1b08ced6905f8b5e150329ddee0d640b2f4e122c0e6ccae4569e1e730c0f109b4c1021c41a1462362673814c868fe9ee171cde6a165e1eed4e775e21251c809d67fbf84b983b7162cb9a31dff9c721723a1729c03d36366aa981392fd1af50e262ee06f9de9c88d5fbb3d2f6a6cb4626fb218ca739bd5a34ed26c7f80411fcb8438b7d3c7247a70c3e31e59f137b52ab98cfc144b8282ed228a5ca15c3b24c8f99e662db14e53cb3d7799aa0d8c86a20c4d38ab5bb502fd668536090586b2c62cd90470c7ca484fb5f52d0f9ec49cfc42dd1d9536a43d43246e7fbc78eb31d863a2f32fb2b4241e2f5a06764a744eb73520d14a872470fda3532401d8e6c14488df9f4efc1f54f200a454a4ee815b3f91d88bcabb85b7a3881ad5b86b4b1a4d22c030375154696451705d2b714a2fea5814242410a0dbf80fe53570f51680a62c1a49e7d9b8fa3c7965f10ae35838003621913e954d337d794a5b62aa11c7ffd2c33fd7caab51dacb8846a9add4aa969899bd376ae0ac9c59646a2636e68f733f929cba23e40dd989d2fbc6300576f290d6efbbe41133de3e93ca81909935c9856259cf62897c6186f743ce72dde3b6a812f1472ae22a002de43dea2ac7a61bd35892a48a336221d1500cf1e87fc0a95c3918c5050c9ef78e119af8b95f12da22aba616765db800e99ad2a22c6e85b08e2250efcb3f56097ecaa1438bc4fe432073423f68179e92856b950225af8f161a6cc457b0908aca8d5474261f791983830794aec7d9ed68bca7ba55ff66a199db492c57fbbd9f64cbb715456497f851ddd29013aff2c933482f459e2ebd45deb9a90d2b86807e9c9889c1d573565f0ead17b67468919c4192454507553306b0cd53244f112d4c4480da590ae80e87625eb166b0548383e6b591c041fd5f722110bb07c6ea80922ea392e400b37a53ce646596149905690d860bb771df76e3d53c06a8ba51accf468807503f34d012588a27c2b1c651e39427e18962677228450e6cacc5d61bd9d0085761f9eac08a95e33bce4c384848bcc7ddbaa4fec82568232b90cf0862bfbac55818e24c14e22ceb2c7b2d535e13cb302b12c92297749878ee625ac824a1e92db37c005ea75e1bab812b0bc95c6e75808ca24cab992e72d433009ed1d05942075e45b6838f29c78a76665f37b0c4f2f19e97dec1420b3c23f0c12ce42a8fa66ea73415c1f1cf60e345424cdd98e8526d9a0406ae3e291942845436322509c1df29e62020598e8f30dd1642f28297c5b98a8fa1a429786992b8b93adf13369b54e9b15aa86c2738f0b9020ae6632be9ef953f248fa5a0bd02293cfbd2fc7e2baffa8ddaf8e1e4053c7568f9d4aafbfe92b08a02ab2cd0938768da11e4acbf2091592dfbbf51b291c1c45fe0c3904d311d11e4f95efcf1ee1ecf5333dcce3ce99b75de9e8f071e88e74c4089630d97be03a4787dec3da684fe113ae21185f4566e688bcb0e465bddf1a82744e0bcadc225c6ad0055cedbc0afcc6155d042464eb65ed08fc2d46b8da2ed83b89a904fa3c983a8334df850b0cf8320af959965bac06d9d7c86e409aa331debaa705fa90399942e8980a5fe18e1ec7d34280e7592555d62920e60e19140235934f7c9e7f0414b2ddda8ef3a3cb279e3942bf0400804375404124744150328fc4f1e82a745b99b43bf7a07ada6b921bd3e1d6a5e0baa2168cef7b013e2c584ca70b8e5a7c05064590c12f507c8e24e42253504b1384c17fa871656218511a75d80e8dbad1c7ac5b0f2fd56f514f85d918897273af029976c5d678f0f7299d993b0e00a7c8d871b51833c893f17cf2bdac1cb8974f95c48b75ff083602f62738021d03c9e5a1962d871bcdc2804d09c2d5a2c0c40e288245122fdb2b5ae67e35832dd91329b5d4e5efaa47bca9b115b2ab16f64275993bf6b5f95d782519a2857347ab3c26f48e8bdd21fe9271ae6fe1b641cc6c90806b5ccd15dd3c30ce143e1d536bc92c15bf7a10d3948a5868ab9914f98af638c42a26914b41f84c687bbb819edd14b44cf420e5951f1aa77b62316a4a609fd42dbe55e6c4a8a1dc60b0c986f09aa552581613e6be6440b455a88f6d115502edfe7239a60e711def024403e6795471c6efe36a06ca2ead6d822bb5423b48273a580f85f62f3582281519d9cbd7df22393d4a09e9092610770b9a45ea188e0e54234589a5d44e78f803013503d054cd8e69c1c57987e97194856ca787f9bd0761387794e4618737910ccc9da06b5ab235a7165c188f62957e0e14bed3107577661ae063525763a7fe7686bf75739a2c2366318340e67986a057b5e3cb44e2c284da229fdf6c38f1db53795e1774908499d5c285d6d366a52b8b8198202a5c2b38f977064e48cc4c40aa2779c04c7242fdc0e0bd8d061527c7ae7d1970d80a0e77d0791fd0275f263dee441ba0b2814e9af3495c0c6ee86800df2625795357cfa65671955ae1e1bbcbe2a6415a3586cc93714a6e0b246edc7b4ade37442bb0f0565ea9e1940cdce0c18ff78330493d2738491c693b618fabfd26796a3f482d91ebfe27603db9de01dd36db1868ffb02a94f69a3c7e0ce468338f5105d91f20a7e0898432282dfa2ee38510af94cb38b007fe81cdcc50823f2889dcb054fd84600a2df408fbdcf255389546677632888c6e9b83b87ed055065c6ea2a5d1cfb115fe129d93468e954eb35c816c08b16bba21bc68bfb36e569c993145fff62feb5aeef809654b99cfe2b07f92d56bb1ab3d480f5dfd7169f3e6097fa7765e242b9a9eda40c191e275bfcfe2249261c23a348116eeaf4aa9f0234756eb0106df31703d2d6f9d6179ca07d8582c17ed5ee25c7f2b4810e8cdf535d6b98aab79906cf960834d2dd162c1e81df796a5e292f64c878cbe754d3d0aa333976151e7e15735b59c256f9ac546becdf8bd95b1b4053f5f3b3a1b9857ae9d100a9d43f9d1ac3e6ede2b26402b997a41ff28a52efd3b4b5ae76f29b6b33314873b8c507524e2ee84a99f952121e20f432e749686717e797afab11a38619bf6950c5759f3e895da3a6b3e99c8fb638b7e64c12f804e2308889e6842a72fddb011766c6e32f1d4cc7ca121d0cba2326dde3778447a895e0a95e932af67bd9c867b31b8e44d0727c287253b1d24b8ca186e7b427f1b8d330d16c6993fea1995c676f1b9f53463c7172fc9b53e0c2aec9b8ae2aea5a9b4142ed3407a82e746deec733e96b6f8396325bb0f462600a7b4efc19746a8f112d04b3ef2dd83b539c3377e4c2fa311c076a2c3d3435d1062d09d3e36f55dc43ff1a71a57dbf73b8fe9395e7f13edc46370d9093b9edc7f10fc63309f23b466c05277bf5ae50c5b4957e90c2cc5159942420b206d2fd330fcc610191e038ea941c31bb0b6c2a3b7bc5ec1717f9334a18d27ab264cfc26c238912c67c1538dde2a93a64c1882a586320f1fca8795c433b0b2fe39830aeac6029edbb0b1fa2598c8041065466241c84c76f8454279004e7981750bd2b96144e3237ea61f46e441cce51beb88a88a44fe94795fa9c932d9ec148b1062e06c1e6485d5fd37f8f72bc83815cbe576cc87867a21fff951e004786108866eb7471fe28c6c110b61ac219ee03e6ee406c7d605b1627f743646097c27d2f97ae82cfdb994c5427efe1903e53d74ac31e39bd822eec6681583c1155503b2705427d6a1084f9f3ff445045bcf2468700538ba7685e18c24bae286e529301dbe69f14975a6f10b818e1e0f5c55aa1507522c0c675f98d3809004a9d8f0863f2184aa1acaeacae025da4011962a75db59a2d329f39352dbfa52fdb895242cb43f5df3c83709f8b193516527010c2cb222955f1e9a878911ccdb9d13f21a168ea45f8f851ad6023815c76ac2922be1f1c905a7d16a50432991e0733de549a09c004044aac35763b19f28c6e3cd8ca7087da5f74403655778f0f6c6fbad0b2529122e58d2a03c735b8cea371aadf128c60e0f7646dd26edaa5c24a6545b0cab02b7abc2b1107676b853562550455fe224b5fe298ad30a50d8d8c17f3f07e7204b422738715f86671f1f1c7f202ade093d42f491119a19d43f8d186f202552372dc6c08a3478815f49d85721defcddcf5dfcda8edbc50d6e339cf757a8977fd773176fc02f3b8f839ddd15a5206971d1bed9676dd45364994366d3bb25411a1458a50151b9b762da0c377a2860fe24be87e58c6f082b1f5716997e8e50c94490f6da952a3dbc44953c2cf53bbfc9ef8ffdd49bc30c175913216aa8481757bb9ca07b418e7103987697790c5c99b473c5ad6b4101215333872716050b13244d11315b0e0f3d99810ef00fd902faacb4e2c8951d549e8a9fda8fc1cd0f6026db0fd42f7f31aa53bf322a51bae70824ece27ef4cdc7a2082fef340734c7dab2b32419b9fbcf8c475acea1492045ce7d961a01e3a3506a0879fceff495adee22b3730d934f290cbeeb10e12c53205cfb7851c439485d4d7f0bb88bfe0f1395a7ca079806d7e7bd81462296c01bf0ffdf33a0e0555dc7b74afe6f788d18daf7838a9e9702c0521ee2baefc73b0d556e8b1e4a7a29a503abf7bae6f2f34bbe4d9d5996ced90097d3b26d90b2a4dd45c5b14f5bf6ca4129e2a259a5223f3891c9c4e8811989f84dd32c401b8cf87bba99235259d6d9a97069cbea99b2e5294112816cd18c6dd9df2745371a6e566422a303a7607c6a1d86b792ccc266b96cf4bc367b32fbedca964d5e2efb39d01c28f103580c5068e112bd5659c16ed884a6b7d7c54ece02320c55169c452af28ea1b76245a18766ac85d4f2f60e79d948d753bc661f5ac0ec688c1366c3b062aa4699b1bd527886cf70049c5484e7a8baaaf7a1010d06652aa7ab68dc72ff7ef64957af2e01e0da48dc8e94940593cf9a71f2b8011b44578b56d3fee99531803f34a2a0dbf535a1b4630294ef72a56629759f08ca1d5ea139254053dae5fa1a30bfaa268a8143b9d304a813a8985c7467ad9c8807cd00f96aa8101e130800c2e677c72af3cfcd4b1008757eb437fa09a49ecee41018e1f498e38a37283cb8cce4ca262999a76a5a195f22b93e1e68464f294285de77350a0355699b1f48269abf9df14e740ec4bcba2d49f568f4d4309b93d28e2489906cabb3ca8e77b437c983bef87f87c86b78dcffc1958a390e9fee473788ba93c10435001f3da5f57207f929c1be644c3b5025bd823b81c985457a0e81d849db89089f6cc06a2daa10d8e7279b286c3d4f97c45f409b534b271fc3298c5bdc3b9cfbabd987d6f011e010a7a39b8bdad3cd6e1ebd01b4f4638f9ff75233d2e56755d2193effb81fb7451ac49841d3ea3e8e1d1a82482b846e74078ed60670e286101a6538e48eb34d9bc1af99c7d3c01e2af2932e94aba33eb51de1c0c41d3b123729848ef534b15151daf575d570df883657d4c4a40db1090229d48685f97534a5b021ff795526c1732dd93a75b942bbe739f159729c27e1466a4626e6bce9f1edd6d8f60469009b37e543b4896dc8ce674e76767be8700de6f81f771e91a1e5ac60f6a54f78a55167d8fdfa178f5b510d3e411f55ba3685835b210edde40dc7a10eb6cf4d724065762c8f326212da7a339e0dc1c9ca43bc14006e4e9b5d979e23cf1ca9d78d31b49dca11eaf9ee7ec44bd465a2edb3360f0b1a2c995fc0444fe8ff196a6288fd2a8aa7807bf78a3953701ab3603b75073cac1224fd8d24a132c96504da294443ecafa8c8a72e3c37eaa5573aa83e971a1f481c7583473af3d381470edcb3f3ffe5aa4e27ffb131825031c61bb1cc5c9a696aed0bedc461625b6c41d786d02eb589fb66579923b0dc48af7b8fc8f7bacd6666959eccd36aa11dfdcb51add02fb0f47ebfd82360d02075f217dac7c0b02667b187cadfab69c2666f316a3c54049a49498480ea76afe0ca6719520b2e84fbdfbcdff6558b59040474220418879793694030a193037002d835d26d9513e012ceab3203d48b1349a8f9ab2071f9434f2c7bc242499566d6141fe9da7964f8172f921d3f1f05501c578572d6c394e2f5838e3b88964b2940fd3b49d13983f97b153205021bd0f6b3c3244a51e7e9e2aae98f2284004c5100cd3fc66948a96e8a2074e757b33004b603a02938f11417cd0a4225066b86f53f233230c4618450781044ee8baf2ac86814a0b5322ac4dff5cffe06529391a05818e1f1c9192f809821460dbd620a62214cc357ecba108d938235e2020a7bc40e6394d99490f271ab7496ae049eaf86cf0fbf1a5f7c6ac8c83ac38496c563ffcd5aa7afc9b7a935fb4290f315fdb2080d99fd157566ffc56ad85243598cc93e5bc0cd441ee56421c91b1c13ca2d39cd4ee2e9892e0f2204e98ae380b1c94f1c560b2b18e736ec29989db86f46a45c021e046341e9d5fbfeb6a86624ffce396fed159c79c10a4c38f881d9930b99919520158260cecc77b9369e38a7100162042dce3ace8484d2f493ed508c4c3a93e6da02e03dc6f0f35bcfe0ca3a4b5c76c5ee93f1bc4134c430037f2d3c267dd9261f96dd6db1ef67d1a7b106aa5268069dc34789b78eed724c22224e8b9ea32423ecd0ad581f18602dab299d85c9493eea60d3820dafe0ef25b4d7aee54891280ab8c29a58b32b7d1ac5808ad6cdec57400ef68cf8b83093710a0e6bc686edc4cc7e61edcfe2584f0f8b4c716f66bf49db0ea718216072f10edf7ab66808cb8e99ce5a02de1ef19f90973f08fb447f6e31b8489a82ed89ed9f9c4be803e9d1e93f4e2794e07202213f237acef1323a274e7871f20c6f97dce1c84bb057002b9e182ce1e963f7e22ea88c0dc4bb05d10edadfa024ce15c3cf4b42020a0224b71b5f1c2319fa1e15ce256edc976c05c306581287e89dcd2e81b667004cbb547f9784390386049ef40ccb0fa3e063cc708ca4ad45ea17c3706841904436809c9dda3f174a6ef07d7ba39bfa76ccae9830109b89e852e70e34513720c3164717862f737924356949054ea617b6429f8db54014c0e1b63cfb7693b71f4f6421c84591abeb16ec35d192c2e4c245400e16f9b5687c7e6045081489da1d7f3207a55b7609afcbb024ffb943e02e389c3011a338e377145cdf6e01aee8c1217597f457f5398d0da196728364b256c421bfcd6f406955a12bc06d066aefc095df3fe8c6a659903b9628cffea40d5175327d0f06c7d8fa635e3930183c0bbd3a40ba172104f223d66bcd018656d31eb5051d59a7870fea514a97074f369874b6a28b7a457c0f9bb0aa9f6021ba621ae5e34726d9b77cfc98824e088cefffe53b33537791a69b2a9c1fdde8efea6dbfddb68eaf9b712eb9a31b73dbfedfced21eed293d84e675d814d7dca1bc40fb10e195c3abe25f82f6c335aed1068f3beb58c6943f2d432cf22b4507677e090f6e6be4057bef09ce76bcc2f0a95ad3f7e3ce21d845da5ef986fb4ca4be925100fedaab4aed7ff841ad7e1d828a9f782faeb4223652a05fed61506b95dd347cf1724058cc16024560ebff17dce3c8f9e18ae44b1c181cf2c6d172bc47778c1fdf1272a8281d7e99a8ad69998c2b6715326b93bc9b7bf1e43969463ded7b43aace019228678443f3535a80428c5f26f9606d5f9046565e12be8a602751f042fd52d20281e64e50216c355ef7cdae0d9c14564216009f83e2fa022e8ca918ba30543faf78554410b7d4ef3fe221d7f3cbe2c5d33c241e735440b718d5f646e41a229c1bade073192da9063a77f5a94902b9a238e0f492e48493578e9d3e1a3b378e0970a5f28e48565783f1f13566c7cbecc1ac778f082619111d8158bc8ae0988e576420d520941377b1d3cb21c6f382987d163a8eb859412f3536c806392cf5aab478f74372877966933525de7ba9199f4903d0f0a7090b49bddcc7344d8bbcbce921a49b54211b18efb9e5366ffac4d9fee1da11c526ad52d95afd39f296f29116c465ba8ed465e405336f555b31ac33413ee008a73c9aed84a08ccdb57e35354163aaa2280e28a0bcfe9afbbfd93ad0383443387451592be0a264e505bc17fec3d7309ce2e263cc4fd55534469e1d64c76d0718fe365e17c6624a4f77daf0944d8295673812bc08f0915817c250fc8de87ca4acbdbc10223b815aefa8a02c9262b97baee0558f386b2d0c3b20c806f9a1d8d930cf6c5953a46fab283983e8caae059f0a27080fbcb3f128370422d0139e84c0d1bd24337924b02c17cb1f97c617f3d1deaa202369f37d547fe0af8fa3e38cf4775f1dd193051f2c84b9a532617a5225562dc7b85121f8163637be6f23162e6ac4f11f1607fc67b3c39b6769f969e08675ce85f04a2c9b4f0f0f6fe5711158e8c2b660a6eb67a2b7664f2a185876a9aef0294205ea146ecc09d130ce6dd97350876e5082b9e35f218018cb90ebe96e6f6018899d1eef4907ddbd252f4e3acc3113acf6217964bde81d6b2d2ff36d796c63d30082385b0f8a8e818710c6855b7f208771f11166fd2cfe237fb21f3f2e5f46c5ef30cd700238793c0dc9702de45d8e25de94361879115dd49162c49cad22d75f8721df500c44b5e8cea9750f7feda1079b4d701112d4323d3661467b9444e21a38d35a0d9fe6e41522dd3338c9d1caaf106998dab225bced60e071b254aa5216352b6f979f132d34be7f05bff9f541cc8448907b680cf1b80e0c06aa5c37844ee5019b8f44ada564a852ea8a4defb26438e99f522c044fa07428e3f5a5175a437e467e4e2a9818f2839393235be5e51e122dae40983da4564be7e93287abd055fd7da7df520740ed3cd3b6659a85a89d8e37898f99a54605cf877c4f4acddaf79e278407ec5ddf3b00cb23a25595f0ce818b1a0323ffde0529badeecbe96ce8ba22c5c93cbbad58cef7afa44833966c39a3abdad41bc875a9fc49d655aa861b1a448f272cb6247a688a9adaeebf6260d5e5eff598ed3513757f3d76526759d0db7329242f3651e58a0cfabeea6119c62301a73c89ee74bcc513871c5bd41ef299e73c068370d39cbed709e2649a4f18b2adb37135fe061c8e62507653c1289db93a19928525dcbdc33ac1fba600ab47a2e64e80aa9e4b14227adab9e18a6d0461b5c61df27b71c150aa537e6f376763b308c1848e68b2f20e1503ed73130968950326957a87fdeb973850d6740d09758fd1bc101711818f03ae5c0b2d2ef41045387882890855c961166a4ccaf0da1479fbe1b717e07f957c68cc280286c8de4b15afabaa7b1513cd2af004d00c5a63e9803f937279f58cf43888b568c5d8142f87fd62dba63de7626ecdebf7150f1ef383291dd5530ef36cbb1d1cbec3d81a2e343e85967fe37230a14f591499628d8f8986b9dfd6c191f869e99db9b8f427f46a17db38e49f73315e928c1a728dfae0c8e15771299fde7337c94f085779074289f6a86ff0573a9296c995ea393f627bf3ccafda1b0efd620fb220984098bd6534d9203d8b7746641fb9900f32e2c687c08022006658e3f88f51ce02f45f30f00b8af1248401242d1c25413bdd8ca1fa87ae195b2af4f7416345f02146b9546bc1834ce41fb26f308a9104fbd91f90bade5a784092edc8dfd0a7261ac21105297bae1e6df4e9616dc3cf199587cee24f84780ced60b6392f729ab27b78016c9841003c0320e313602c8b9e4dd88b47cee08a0ccb891b2cf1b3a7199a34473e35e26f0b6971cce79b327a63860a95c104f1bc499af531f7634f288d5305f25474f835bd35f25b7269b98de6ac842b2d77df0fc4e91073eb9c9a2bef9d0ba0fd097a0e214bcbb1f5e0eb87821441f0cd825ad6d010149510fea5e1a720676eee377582d36a74b7c89ddb0d1596dc55950d92bd62b9000f4fc8235cd102bf92c0e2ad23e11201f729f22fc357be040c0028610280f7b1339081d98db77dd9db8186d5d0dff70fd1a04dd2cffd131ec6454c9638f7047b1b85040d22b973c889c67c83f7b2b1d5c42c4f4d953051baddeb8dc3d545556b576b56dc0fe4602a6b004ed636cbcb056943f787c96d4f62ea3daee3a98a605848b05ead10dce4b92d8c1c841444e12e8d9a27d00a73c31b7eda101220d7ff4dd255332c17f034000f3b156dd958f75f41e1ab0648d706dbaee84e8f554e310f2a1e5dc31bd4bbf74e9ed825190d5977a8488f3cfb537159de1c46d34b8078b8563a465987d1a489b7518b280913770229b106248b346407ea470022ecf8976bcba98897f14678007a9ad4efbb5cdc1680fe8699a0415e4d0ecb5a6b3515ac04ba9ec1b7c88009d66e8daf17e4f6281aa81b9700a15430214bf77cd711677bd8a00355ee58fc221379ebe6ed623a379871dc1663d3fa6f03aa49cb635ebb554702a3f5b4cb65a1374064de165a48ae73e1a244bb9a7ab3e5548aad5acc7dbbd85d2ca4cf133ebb52f912dc7e83564523e838738977b33737966738478bff6c97d666591168ee766929bf7f9f764c3747a5520b1e5527885f13b6d2c74b4f0867ef4684a25ee2bffa99f2112bb2294eb200cb929a2fcd0a67fb4e2888961ec36182e5a5c64b53e19fed99524858c490a22e85884f352805644352c923ce1895a3c2ab18ef01f4b84c5fc875685066db077ad3f5632c28247925d80d51bd303859896b9eed0dfbde9135da0d2a17da01a2ac8c1c43ce73cc2c7b739d48588094eb6e9add1030e2852f3f128cfd75e290165bc6553bb46716e355b6cd5d2b627cf1e2a4b6bd36a2dc263b6f4a2d2f6ec5127049208f445d4a9bddd3e4cc640a25f22849892c7a5537ea845492f994ba797594e55d4a5e4e8bd48a7c775db10c0637b606b200bf8cf79adf02cb84d91c1cc36a8d501be50c21bbea538a999e48482e606f1438a15b7a0d31b7b7c374be7f4eac1f383fad5e694640ba0e7e6400c55f955ebf11a33a2c1a09d2611589d135b1babc8fd92027820642b4b5437a8ac6f34a96171db6da0f789729fe46092d4036beba011745c380fa598f2879be223fb9374cb7d170598c29c354b325ae865b1e9956c0b139d8dbc201c3f9d07b50c68f108a0fe2235bb69b112145abc520d63884daf9a32a0884d8f6f519540cbbdea3b590c68e66ee75435dd5aa3cc178d8b2a32e2e0e0cee3c1ab67c2db6197c214b63e057816fd0798665de6ae7921613d06eba645bee8f278d6eb41a2e86abb994c935daa23cee92245700762890bc2a51b4b4c1236def33da258e82fc424c49614bafdc1a07ca92b37fe0f198bea2a60f49fda58e29e8d627388d75d009717c5fa497b84f3361c280350273b11d9212a134f37caa2a7e3fb17cb48ded46e71eecbb8da06a68f890701d9981dbcec8760396c951984bbe097b598bdc414223600e59345f70e802e6f20ac80b008dc052be5db9a2699abe0f9240e8b821e18f8ea8c9c8bc013dc05fa9a9c2b548b98d2f946108d2ec8f8aa0f64f6e2d5a85affe94846a8f118c1d6ed78d582022d6ec00b0e4fb5084bb45481d1e1f2b7a14740c823921c1b0d78caa70dbd65c379e5420a3047dd3768e192e222cbbd1093789ab8a4b834d6edbb2c8a27b958261b210c8a1530f12eb0d2670b9008d8792105c4489bc7b6ab1b9c10ab29d392acc55dd533ca02c0a71ddbbf7652926bb7ee23b6e85f76d311c48e15a64a46fea0804884cb04a7a431650f6ac4e150c3852e8677f3a7ac2f62d6b4c24d1d4e9be2d2bb07662fd440d30db4adb5880ab2ba7c27bc07700d9cb279720d0505c6634e6e7f82b5fdf6240507ef72d098936e30a731e011eb8b88865f1d9c3d3ec87e6bb05909d255acf88050b537f6b20ffc42506f3bfc08d01572077d18b7a09e766ff80ff39392567dfeade0b682df0a462f4aa6a6d7ae375e50c0913c7d65906715dd146118bdcae2ca25cb2c6dbeededb268bdfdf20eceb396d48dc2479b56a88591bfbf0cfe79c50f3b91572f83cbf62ef85ee04aca48b3b23a7dedd8ed0c80b59d1b4450db29ac14bd192959a9fe4ba24385040b8c0a894c55e1c77bdba6970a23c2652a7499aff52d812ed886e882aafdb37ea7c94c9f1f6e4043f4aad315146cd19ecff1dffc1a833dd40b96a8de03f3e6119a5951b34d0c54188649f60d1499b4b815496f8f60f882c49594a247d02a0f877405d3e17ae1d2fab900af136ebe4354f789f0cfc0a8a80c2e916045e00cc7097b02ba1ac6a7643c17a09d0bb8558482040063bd14a75ed92604963abf13489d649aaace56bac656fb85d5c2f0114e5f75eff9ccc3f3d10089632eb1e8c9695572f2a778b87d0b5c146ea2b2314a081b85955cb38ecdb583057d0b0ca03fbb4f90fbf80c80a4c62d5e0e32cf9401cc91166a43517de18d8910b26961c6abbe1cc6886e07ed034a3e3b27dcc6bb6662ef135e81b6f468e6f59261e59adf2e7b3dd9e52f7678099f2a02edf35949a88e334bf2347966e22d70bf574e10eb0c6d433249050ed9edcf55b3292bd012384ac0fa20f825401d0cf937e2932fa8f33069bc4228d456769982f974ecf47487ad564878d6eb2ea2549749ecbacb81eb9c6714182c9202ff8b0a3460171f82313040c354be2ecdbb98498e80b53ef04f976e637b9d96e2a017fb3b203a7a640773ccec6c2b7cd232e562a3a0949a61622964915b0a8860e1271d9a637980616d3949d8c8023062801a4b38273e9fd385761d56a08541e8294f45d180eaabdbbd040ff3403c85b08d0584a33c484b2aa2d778d0c18041af0e014cb302208ca721513d55010c2ec74525fe5364e4fdbfb66d0877de21d2cbbdfd9cebdfb3623756224110397c8101d09f94b025054da333aa67ec735a4939e65dc09f0118b0401d64301df5d437cda2b2dbadb1b97fbcbfe68411931b3dc38eed03d087f8c01aca14fe5ce5010700d08428c36cae22db81c0544c1c5b2f4f98cd60e89b16ab37c0020ea788deb040e633ac977f5051bc55684b13c774cdb5147bb66be3303ffc27c88056b44d503a8b49430f224360cfc3f4c4a860965a7505a446634a42c36d1e4d210fe28bf5fd004da664fcde5b681fecfad032bf4efb07c14cf12602fd0e004c2267b751627439c93331647613009927fc608817db4bd2c286a96c226001468b2871c8ffef5c650f25a0484a16b29ebc2a7355b5d65f3bb144f2742acf29d5f79e42d2d708918b32043bd105c2abfc8afb30e056d52b62d797bfed574e62d7219a7b51813d6e6972a615d5e7e08f3bf71f3ea7d9147957006fef083ffe227197f13fe5b9e2cafe2ea442708836c76646c7ef30c04901813d8832916c83c2b96a78e8f5012352146826cb534e47ef756af2865b3855d622656161d4a3fdee0f43a25a1523b28430bb41ef5f3e5c63dc8d644baa888d65ee0bb5544373007f230db4474b3d6c3849ca68c0360b6aa255d0a1227df669d56f051bf07d78aa2541e2ed06fca322913be11b2dfe333b1d99df99c12d6484ccf46ba7528090a5895779400895a89433ff9cd835b95e1b2fa5f95f65b05077aaf99b4b9fdac64564d2650d368c915e086213bdd35c89bbec7e451f2ef0227fef6a0e26949d4ee97475579762b634b19031efa03581de0a4b6a27d8ffc7226c1649c7709c09f08d6424c707d01b3244b0173b18c361cb2128f30b2021facc4bd98d8eafd4789115276e5b290306a671203827d2e11caa27183021011dcab7182f37de10bfe8d1df6a473180d9e21c1088e5f17d5f09ecc334c7c380a5e2599b5abc58e687331682741cd86abcfcbefe643918bd3a0d0c1fe86d8e41d1836600e08abd0c6d7763eb0db3801eb53b76392ca704d5f702e99f76e57b510fdc6d78f7f48e5ac47a82e05c77921c44eb174a51918898181fe0e08e1a506596cb79d90d0bb16638aebbc2b9a8329a577758ff1e6debe7fe64717aec5b910a0a3816340d63d0b47ef018ec2a2a4d256c381b9af166393fe83b6c56ab2bde986e7407c5d144df3029c99a691d7075dd6d4204b3c79c0676a99d0576a80dffd4eed32270f9fb74f8c584d8bae557a3d9f3ad6a777d605c47b60f65d0928f5d16095d60e6e9c128475c1aeed34ba024f9f4fa6c096fb0cc473fb69f5806b8c9e34e407a7be78692edb97e645ab42bb7cda57c409fe94a07335a0df863e30343a01feb24ec0d249cbeea5de2ed241ce127db5bb4463fc607f800a01c54743a0b4dfc6bcf24db9306ad3744e35eb475df385bf39b9b3bcae6f06e9f45598a7a10a4c1de5ee52ef020028124d99ea1f3bcffdfe8efb278fd8791ec69d2b49001c3dc920d29d24e95a71b07b14de568dbfa40a3b29077c599664dfa8736db43b100d779488248976e903860bf89cd70d719a21f65bf7d30bbcfddc9a4b0c10942050571c03dae20cbdd0951008ed07fd2db5161262c90593cf992090792eca1d69100e69995dba8229394aa0c083c9451c98ce81b344b206e415b1f378dbf24e0999c9056ab10129ae2b1e6a61c3a34f80c024b5f0f35bee0704edb53da6c02d42798d7ae69d89116a6ee970af0d9ba449c9b5d486625ea274ca027f30c18f13a32579aca3c049a05ca567cb7d353f1ff1fb6d9935743884d64135498ffd48ca8691bc7375ee5544f44cdf551cd28c17f974d74941aa19ac55d2dcdeea41c5028ce36a8a45f563bf369b6728a637adc3f1b5ecc486a4e888dc882e1042ee4482f570435357074515c5fe27118dd744d5d6304ad154890477222a24faca2e15e617c01245d83562f37bb73b465eaaa704f5f022135ab375bcf9e3bc10dce406bb01643d31428d0373f1dd8a2a95e73cd46bd10bb661c087f4064d32f9aba1236668ab4719e97de6d134889341612b67e994840a271bca96c13fde8a61ff427988fa9d114efa08f8f4d65a08c85346dc3733a06be556434c782e590b278147d853558cefb8106382f730ee26d872184155f8e71ca3f052f543f4709f777df7af33befbff3cdbbf9de4ad213f4d8381b58f7964fe4d3233fce45fdc221c47aef663d1475f8d5e2105e3b57fe5e1a9ea2814d484b0fd427241e14172599e0f4eebbdf7be3bdb7beffc67bdebdf5cdefdef3ce9bef7eeb9df7def8fe1bef7837de1e7f6d9c47c6d709fc3a6bb97586911fe1ae21b988a19ca6c9778e9bfda10504c558d4e9f4d98ee04f827af56a53056732c59326d6b49c4ac39f67085c784ee736a267eacb0cb3d279034352acd9194e6e82b3051f2001e4c66a9f1cba6774cb11e77c461f5374c2a98fdc6f23b36559db5cdfe30d0695156ada1fec4adfe9082a98e1d6a0a31b51c3908aa686b7ceaa3e140530e55cf3420a100a838516054b55ccaabb1a72b9eab5704b2ad3073c203318b157166b14bd182a2d84286cdc46ff2bc8b9d06bb75c4518fbe2b3a7117256e5172513fc61265f16ce39a7a0893cc3a88a847bf0dc81d6bcd3cfa26a24eb45e2d33de13bd2a3e7e82381333018f8d00bea99fac0c6ef8296db2185faf09ea405879f54436ec2563abc629979829d77c14624847f8b8f5b86c28373d0c2d06c99030dcbaa8905a577cb935b1ad6f50bd379b33b42e3e9606e705486b3dc156632c2843b0fb2b18518ee03235224e3a4f73ca733a7cadddd416bf31bb093cd0ff2f4c8e3e07348c3ba7b603b6e74c7c0c604400eeb68b9767b6b1c0b41e3e481e35b944b91398192a1007cf17fba728551cc0c743364dfdd69fa0707e2837805d931216eee47d77b50dead461279996857aecc2f2c63911763b522725cb1f70b2d38d72263988de33268a0b075b131a0581e05c444e893f1b6933024d7d2efb905407f90dbfcf34cbe37e7855c4bd1703ad592c9527db26800377efdd7e8e286405af6a02d1c260c8d50dad12bf1ec2c617a0ad7a7e94a08ee0faa441a01212364c47187a8b2595632b28d8541b1893ec8417ba9b5248fb00fab71753561b5bcbd372c5a26b11075a4f6898ddd83ae68760ba3cbedb022e5e2bee3267cb440262fc0be50bf8d674e1be3859182d4e62c84e96edc9a028eb7cfa88158086096979e910a7c313c34cc1d3980f6fb1438a416a4a927c389e63ba4b159ee3efca1f799c5f9bbb43b8c41df4e1268edc49ccba173a0816ddcdcdf16edf9a85e5edfd84a5aeac2b74afd08c1c5c2399c3a96511a12309c9e01834e7e758c7ec8bc9c47e5e6d98167b92498e5b064f5bec9d441e1ac925199ff30f4eb02e66f4aad2b3362b7f7be19509442d057922b30130b3522752004cac7cfabcc6cf225ea094cd9e7b0cdc1b24c37796383decf148c3ba2487945716850453f962edda41d59c8e19f7466bfd32a6ad14a88928f41a0c7528be32d22a89a29ab0a685c830ca7ac000b0d8b44e9953db2dd51a609fad05b5b50ff7caec2d82b32437f5f7fcc7107c1b44b80d197519f320b1303212e3222c8f9487e825d7549e004d0fa337e81ed9062c8ce941f2461b1e279d51b0db58aa5f075d1e6c9f39efd2a0aa715f268c0a26b343962ecd0f56005f58a506fcdbdcbd9ef7474aefe5e27cd4117a62e3b8a802f622b61945c140101a84d89fafa566fa694cb50a79421707508390b6321b8c7bb9553aa6a4ac5dbcc578ade566b90fde50af3a0fe7d8259c3b43dbae640b2051efccbaefac8225a11e0a56ac05c83dc9e8fc6ec0c98217141ddff90b809bb2c741228b0161398855bf3f69600db9df1c6917125099e6d8c2e51dc29916ded49282da8cae64965bac2f602b9a6934b571d828f8d93b79547e72a3ba557a0f3ccf2cf4ee18179592f374a6eb75b62c653b6fb037e44bf11c47667a0549325ba38e065ce34b2118e71a65b188d42af95d69e53b2965b4c2d3735e21c037a8604bac805d9983c92cdde8545e2c9e4b0557454238bcd7c0de141703559cfafe3b9bede0a6fadd5cd6ccd958e229c6b00e5c74dcaa5364a279d60642a3a2386dd2103825ec5f841db1c390a1b5c9acf54d46c0f3c317455a8f314c4e6893a88867dc327b6c75bf2b9227894b31fae8080eb5a0f0246dea59e111a29dee4ae5cc597a0ae0c7455fd6cbcdbd7d4aca3df443dba0465121ec0c0ffaf80a11e586305a95b109b736e91e264058e2467ce9e1fed9882e83221df8933806f894cb4dcd2e48425d2019ce248b52d1199f2a29289a559d461979274c92bc8b0f58716e3b21dd7d16a75000b94e788b3925fa9015fd2cb5db790545a7eceaddcc6677ab3f8745f8ac265e0b35147ad2b25b0d585b01a77dfa3ed649d4cf82a1557abde7c9670e5407c79543e0095c2b9706a8f4cb3887536674954afad762d5d3721c492eaac756b5aa8e03abb20eb635f0985e83a33f97d3068a5f379cb4fd56b8ff3a4c93b558797b02264f889343c84403c5b82ef859fba6df576b2ca0c2912d31fe927bc6517440f1a4ba92792d12d1e6a8d6dad697b675a737f30decac52af5341334f7ba6419aa676095a1075c30bdcea9682ac152234deb77a2bc338bb6f6632e691429bb3b5ac740dbc43edbc974a46947b2d13d0810a3e59a6473a563597097760744099f568f8b30c5b105bce594468cf82b484ad73b38bd9d9ddbb22aa91dc37b0d5b760b37a670c7f9ce565f9bf73eaceb9220d8af565d8b0c30d3d9c1727d32550805126ba3b16017d4d6ef0a8b9102b31a90bbe4168aac82196514b08dff6c878ded886af4a188e6d6fcb5eada08a232004171bc9d3eb238dc5225875c0d2cae1a1ba0ef7dec14a2e0373918670f0f58f8c337b34e8398d13eb9d539c0c7b740ad9f4e7dd098ad3dcb8db6d3290262a87bc8697afc45f5fd64e83447ec1951e68d433f54f08f44adbd52aa303cbe3c33120aec1f263df33b72c95bf323290caf058b28c5992f8c56f8b7262ffccf83435b2c5e930f9be80f0a5c161848282f2f70b50e3767b5b8dcaed49a193ea6368efbc5bd8066f012298ae702b6d682ef466ff046a0c71b5de6ae5c3b08bf820743fa41f1d23ae0d85848b516ace413da9157c9ded888ebbd8e3f3fcfe574844ebfdfb545817aa4e8e7c257d9208226b528df568bf04c59f91a49a88804f8cc49f4c9cd57007a2adbdb8c9cbd11d2ac0b0766a92eaaeafd46587b5952fe234579c6e4148c6bfa24672a103af40d010ddcce6709fcd82ac730910d39c112f09681f35d628a72250a357af5329c8b344df4859649b8ec6aeaf07eb9b74a658eeb44978006609c089962adefd81c257121ba7830b1cb6c5e3dc5ecb29a4090a8348ee6509a4930b3cc01588444d0ba5e0f286b871c70b54718b17cd42f4f6acd740a3ec23773b424d08e39f4a490f43ff13444f4edc4d981a47c55d31aba1ce24bef477a3be71cceec4f2ab66ffe26bfca061367c6fe3be0421243a6fffddfc936c74bd2f4752d1547e0b38ffdca04042f06f560e1180f061ceb813bceb14ddd8a3dbb6727af0d3f90915a220b8328241632459097d68cbf42c56c89202f85e5bdc0f122b0e84efb036ec6dfddd880dd00bb4230ff46749d2f9141926a2e31106ce7c872315f22a0ff0743c93a486e4788e06038ba6ea4067b197c4b3970003ded19ba2b9fc2cc1c4c982e2e544b27415173a7a6814e1bc85d4a35e574250e6880369ac8c5ec7d4f50bc4b6ae3b3104d05cbf8d55393c3ba2ca64b0b42fb338a14d42e695166031ead534b89d16719b3cea2cfda6f83e155983fd7104781e114343940f9bc2b9f294d051a01416a212dea38f05241eff77ca9b6537a0b4442fdedc408fa8a3001e9839a676cafe23397cfc7335ff283ad9fcf0bd64932fafede0ed370f9584191346316909301b503d41cb52df0b49b7cfc7352859395a99bae48275b4f8fb537c6c00fd351fc2ef2b40ac0573809c712ec31e032b95c01f1792f31f958bb0feafa8e3cac4dd5c9e716c3d30a71ff415768a53d099e87ad4bc8e8d0fcf50ec07051fb3b2d588299ded937254d714585431b50e751bf7f9905a73b92612ecb5c45cb6527c4bab07c71ad31ae045bafab5e8d352b30ae32b094cc6516550e70a2b0632533facf49a1a87b512b40b0f247313106b135a89ebda544508a94fc8bd12546bd8cc830837a5f631785323e61fa2e894bd79cf075685d02062a1c5117087f45b1f105cc67922dfbf3120a661584649533fdd2d534c4545817c3228644b28befdb7853ec1b5c99b321777579974cff8b9e54b44755990ed2957cbd78fad556cdf0ec2c0730d5086f938ef3a384dcd991639b7657a95094300eb5be83be504719f48ac476677b518c4af391009dd032e5ce0a1a1786881ef492a258650832020401ea218fa4f95a82cf83924cea01ff843bdef34f98bfef47cd646742da4a046daa4b00ff148958686348c1d89af62aa03bce70c347f6dfa9daa779a2872abbc492842e96982ec3e6a0daa4621d26cda91672324c44802f092eb324165280dae3a1b5a16ace28fc2bdbfe69b587d9c0d53f221645345c9ed95226894ecd8ec898b64222de2e6b6cac0285be08639ae8763dbde14a910911434af20e993c074a25da03d9105262784fd2ef2e755522eecb48c43b4aec5c4a0288c590b3c4a21be1737a5ad8dcb6ce0b026afd3cdcf92ee1b047ce5276135e30dd0469530814cf4c49897482e16e2b865428e97f612035899d9a3d806583f159407fc58cc769d82e5f557a95184e6eea40b1c4cc62a09e2c124df844794a29f046c8a05944f3ee9a2b932f014a0f46dc7322b130b618602e515c396dc07e2950f4de1864164904955b41f3c0c4344a22693f8de0ac6adc95e212b5933089c84fb844e68eb5d72072a8dea978d2bd6c722cade7161d15e3fe8695a93cb063afadfc3c62efa5d768853e8c9047cb455022069bbc48de499c8055e0f66a18040b7183ced8af3dd938f9badcea3073c0a4a692117b643eec8e055e81c55f12551030ce6a3a3fd47050d2c6d38107fecdbdc3a75df81f0a9af4d781854aba5547a35103c09926415b4ab22de5ae95742369774b5b13431e01b12d13c9fd2e8fac65a6763c7e6fc2f55ee24b47ed293ef7ed5bdb3b050515921051118f47baa3f3623eb1d6f142e78b8ff777a55a67cb78bfa55345e789d3dbb6dd27690dd3172da969c6b55cb77638aa665e53d638cb594c3cafe9e28d332eafc67d7833197816783640ac24be02820542cd676333c35a799e6bf081feb99702ab89e7354b66dc078de79ee7cdcc18f9723ef73c6ff529795e8df779de8a06cbe77d5ecd974194e7d17835fe793dc0d54743a383433dd6f7b1b6782ccffb70bc137cde8dcf78ac6ff59e67e5f3bccf06cad7c1e77d34accf0bc1e779349f9782a781e7ad3e1b08ccac6a2cf03250f26160b3f290f03e8fe6f3bc6f157a1f0be7c6c8c7c323b2f166445831f16abe8ff5b3c2f93e6fc70712af05d64f4ed20aea73967f05f0582b1dd6cce7ad7c26088f039e7fde6ab5dc738fe57d1e093c9baf04cffb66be6fe579415e8f67e3f1f8beefa331f28a7c1febf37c5660ce063624783d7e70f00de1cd7c1b782c6fe5f907f5511c8fe59fa5713af37458b9100878eec48b6fe5d178ac1aaf87b7e2f27d36b09527b4f2be8f453f1e373ade8ce7d5f8b07e42f0f13e1c1a9bcff33cafc6f360def7696045e3dd7cac159537e43b3d6fc5e3dde47c9e4d8df739f940f840f83e58f9ca3d1f1ecdf7793d58ad15ebdbe0fb3e8fc663d5bc1b11bc9c99cf9bf12c48e2799ee775f02dd5e4dc7c1ecd8647cde7a5e0d978deeaf3589e92f7c1a7e4f3e0cbf96abe196fe57ddee7c1bc0fbe9caf86e5ad66569e97c45b793ade8dc7c3f3bc251e081fceaac6b361799fe7c13c8f26830f88c7fabc1996a7e4cbf1561f08de6af57dac8fe529f93e8f830fc7bbf16c589fe77930ef830fa766e5b16c589ee725a15e90126c865626cc782befc66305f16e6e6039533a00c123c2f2be8fe6ab79af85814f8e92e77ddee7791e8fd7b8e92bc0e0c1a102099caae0c50d312a08614304522a07100065036ab84c48065cca0b055eaa8ee1515ec0201125043fa5e0c50a1c50d58813262f20c4a1543df051e225488f926a81134936d043842442703c241bf0ec40322b9304127a8783333a40e09931f1bdd430007e519f124ce8f27a238419e51102d5e08777b9a08acf667a70ca9ac17de554a05a22c8eaae638893c3a3876781f7c4fb19a4b87b54ee5d39a972ba1d16cf5b8103dcbdca5b429ed019bcd856f338239582d08c37c490e38ec08c2a33be480114303a267815bca1411850f4166219990543456356f80003242240e145ed0b090bb8722b1004191f63a0704d1c1a505efcc0a0a70632181040ce624c0d53b88059bccfe9032190b03240100c1b8099c0970c70c132c366cc1827100191cd468f0f0c84ec58a541c40d18049117e469f581262a9023034b0c31822b3482510b2b21784e029e3236858627de888108004c801de09e3b0284e784e001eefdf0b883a0a5ca573d9cb83b51f71a31ee1ee61b459a233a3345ee6e7a2b042e74066ffebdabd993b70ee14b085fdc292cff6d63237488ea6d6d76a4e1eb3de1eed85b2098e1364beb29cfdbc3c7aa835516552c1daa584c342550afe60431b40c503533c3a386840cc4c0f2f2c3d28087124ed004a08ac57493018e074166a8ba5181b5c20a849c4dc3c326c946880667b52408ce8c04aa6ca8a8024225869b242b244cc0238daa993255333c38b040158f3d248baa9b20167c354b667a6680b001839c0d8690819543950f213e84ac785c3d36415c65649831c146a86668e5633564a344d5aae9a7870687e689aa550e0d07ac57cecfca63f160bd7092664ca8518186031a1c1a2b3c80f0007213e426831a155676c840c3c1ea8b0c3361aa46b0c22a6938c2072c180f1f342e96b7e25919b1a0786840f3d548a9e9a0c66906030b3c9a9cd50c8bc76ab5fa56352b9bd50d8e07ac550d949a1f3ea0705c353435deaa866584d5c3f26c36587510c34d08334e5459f0440c2e1a5607364732b0d290614848bdcc1d1ec000190a880123cc6993ea610b5251132649f07d83043d455a3e6c6aa6acf0e454468c32c80881071f2e433829228d0b8cf185160d48c0123d2009429c9b079d4f500238cca840195d4801c30b2c505961eac9e984a41040d020033057c0900004bce042f88107f88660411a685c29abcadc9102145099a24106ae0b7ce18503b468c0140ae061871b42165490f2e4b43486185e4c000b2e4a1ac8c0185f74a14516065002071a6628011c17a880165980598096aa1f97905c3de068838d34c0e8e20a2ba268a2071d7e0c59a03245ca12d212d88eabc71862808184113d68f991051496929096781b6c8c214604bcb8c28a2814d0840f3b68a982c2129325b024467e767eb8585ea60d36d08800185e747185150a68c2871e76d0410b07c22a549af48075d0c1f4c487056778b025071ca6a4f80c40071c763a286ecaaceef8ec98a1e35b818d13ac037c4d7c4b7840dfcfcac70373785626ac6806217c1e781dd470b0dac00bc2d2c0cbe0e6821f3f562d960f1e16b47a70c063831c0f705c37353634351f0dcdccccca731a2d382348a0aae6a6e68665810d929a9bd5073c6431380db1d1a1c1b11162f1f0e1b178d084acdcaac7cac5223343115534167c3537ac578f0f841050851385c7c87a5910c367a48319282c8f66e801554c988e5c337c2c1c16d34e0aaa3a2043096262f06660ae109cc4f0b13858f1989e10a219132a504543130294160c7c14d1b03a21861aaa36b891c203080f20589230306d340e0aaa86f6cd09331f5a3537ab1e3338d60d39c460c3b280e603cf47500c1e18c04d0916d06233c710167c39334e5c354a584f7eca17192e98d1c149c22181860aab841a253254e1e504190ec043062d1f2d3d44a60070519573d68c98a107900f2f8a07ab25351b208901a746090d8e8d05ab244b27ac3ec0494241154ecd520f291ba50e9092706e9478488d43555469c07a21c1a1815dd08306270769080b06a8c2b15102818643d5ccaa35e3d1a4408333b384a604a2a29cf3a6888d120d4ecd063d8e6e446039dd6800c4031238c8a0041b139e449110038e0d5813d42328c912540d0f560d0733b015921b1eac22d449cd4d0d0eab67e6094bc88937d3c14ac84c063e3736e24a09d29220363819dc2489c1c829c7888d0e4b0496083407a82ac102d6d18c093320dc88c0f2c0c7cfea0319aac01e6f555bf1b056332d0c61e1872cf04d0002c46cf125010750220030b8a0d3b8da8b3316a8ac3015058a1414130a4a30a1201d12462042595e7451e60d1178a009d1084338d8a0a6cb04c258c200292035817d80018f1c1a2ec0580105134b2841002f5d9080a253a40734a2089954993ae4a0adf00609b408b1cb071e6c8d68094e0d133d6c49728301324d30015382440320393836351e74d08029a8fcf8e484c2521212ccc8cfce0f97053d5849ec70430d3fd43882450210700018a44449822408101605c4c411858809929b1a1a0500c08a050c40881f706841004924c1c39313d192223c3c3a562bf8e660c14149f0b9c1f2c0b7811935bc0c7c17f82c7053011e657c14f8c6f8c07c0a5825e0c3b1ac78227821d87c30e3418f0d3e0d3e0c3c20ae0b667e7c2eafc5b2e0cb99c1f96e6c6cbe9a9a998fe5ad3c8fc6719050792bc817d766b3e7472cda7bfec54e337ab1dde6d3940f065d2dad67c5a776ad53753281070c16ee5e848a4f112a344a44abf84ca99db42cdc7d7b2b831018d13b5713f4019b7238675c8403a3bbd2f171a2bdd564624244eb267ffc1bcfdecaa05531590b7776ec29cf0b8474f720ffa9320567e785a3a3e3027501e785d302a530faa22d504a69972dee14d6c2e06220a585c1094e613814b66b4f528a33db379bcd94eeda9333fd3771d7928910264cdcdda707039b161037dca9b6fba451aaeddfb6bb833c40a6803c717710cc38672413aecd92f5b158bd4fbcab4cee5ec27d32c43b34cfd0dd77bec4527fb193bb93a0f304ac75010ead0bb45ca065270c14dcbf379cdcbf35cc38c343e3233f245fd0922222e03327d8803b1721aadc479113f700d0c5bd48cb7de586bb8fee8ee3bea3b3db66f9a1b660eda40969e2003e94883ae143899ed019c70ac58ece975887da823bfabcb604471ddaa9c3f171e2df44100152b2a513968ec21396a4c2a958136542447774ee9360eda42560e707091d1aa23f3a7488ea9334c1919a40f7ad25383ae981f363a13b1afdd152d991e24db759feded5c371c1dd61f056cbc675064f6db3ad6767fb5df3d63de28f409bacf594e76562f90881105a5c2bd2c861e06875822436d0800f51acd1411343ab0c9411a4011247e44045ccc86a8b1d6c47f4b070548687d7aa005a0861c3c9ea8933784458e15075f484052c4b8c4183072bf3091d8a01da12397680aca078a065041d5e8ee081048fd512235a4ab4f1811e7e763cd68a8a09e18d9601a46879d5b1a2c1c1891dde98c2c9111cc8f185e00a2a26a62594386a89e0134387115930a0c41247436c7c533081010a48515983014298f119c1812e52983144083eb032be18b864b0421c2d08914a238caf160615c38831547405e0e263b2a18e383430c1901807c07c3f0d30430b29d907b210238a2f0314785144260017015079c2aba300463cc0880694e4308212de06d048120016447409d738c2fb228812a2a0b28221ba300008ef893047a4ba082344152639783e00600a007c986244170fd0e2e5a290b1e1657746905c168f8a096e742d44e1028e86ed150da024001145bc914381f48a64c023c1c881a9030846af870f4df665800e3c30e56e022eaa7ca082a22b1f14217332337c61b303074ebc06981c8b2f68bc500e61a060e2c807300271003f6570414711771b04f05484040d8a188264c4cb0a9021a484131fa8babd5c8a871780c4680104544c77a12d8610a305306a3060803b08313451a29b03881b2dee2b287421e8e2099af328e3861b6514a0e5ac32621ce1a48e320ca040033498e2c006ff92a30c11398009e30643d9108608cabc00a60d9bd10717072160a38c68470d529860068f80056694593a8008221061b50f63ca2803b241a5c54509262ca109a30c10229a70c00b312dc0f0041777a860025f4680f23f3f5380b9238d00d8c03187163e30c045710717551c993ff0c08411633c7147137334118e61c376010825eee0c100696021002adaa0828723eed869a8202782b9f3021640dcb182104e34e4d083152440c9e18e266080293333e2001f292d778c50032d9c21b3a08043963b70a490020a260e50a68a8a6dc71b7170608e1fd08040094820eda800019ca84df508338082d10e2b34f00429820bb40268a16247971f700210e38a11c0104266070d5d9c715484833113b082c90e9c963065a44186174d961cd901b500211b1d251c59c00e43761c79c3080e170d4a78a20d237674d00500634c60082d8690e365875f60d320811164807d21421d1dd8220408b0901297270fea90c0035a402069a2234a122075284086a11fbb2a53882185471d4220208ca51e9ce8a4ca32ac3a5a00c11143724448808304eaa8a32271e5091ea030001852c85147d29814a8e8fc4029620611d4f1d2414c08506c81a18e2136ea706511a5873762380bf030830e1494c929a08e2cc098f154061d663861dea1c1174578110177f73bc2a0c3011de0608c15130e90d270bf0172d381bbff99f76bb2d6dc5d049b10dc67c8dcc8414408f540e0aee48712d19c4fb1040ad35589122125499420517244891125414a8094fc28f151a244484828891012a123424684828480847e847c849424114a92240992244792184912940428c94f129f244a900821498204099223488c2009420284e407890f122547848e243982e4c89123468e041d013af273c4e7881223424692184162e488112346828c0019f931e26344499050509220244147828c0405050105fd04f904290112024a028404e8089011a0202020a01f201f20253f423f497e90fc1cf931f213f403f4f3f3e3f3a3c447c827890f129f233e467c827c807c7e7c7c7c743ed6e6a633589eb76797b519236a9870f7216fd900a1e33d718df2d059152441f405346546df766ba67fdbf45afa96a45b9f2585ed6b439d1d6b0ef3d6618973ad3caf76f7296fd530719a2577c6b45af372772a2d1a3141dc753cdc7d6adc7dcbe19ea9b8e17ea9d098e1ee435a3462dc87d0dcdd0377efc0dd3970f72577968bb5dac05d03770cdc2ff08e9879a24503c4dd83788b260885e9f19e98466b98ee1353bc432643d4dd7fb8b78c803f3cfaf7ee88bb93de9af1d965ed33165b331cb86b5bae74b464a5ba96246b2985b12c7fad761679a6a7c5dd57f0166bcb8f58fcd1073c02faf0081dd1b49eda8f8fcf919f4aa301018d497e6a4878b005f5ef9a457097b7b6b6cf3dd896ab6813c482f26d4953d3d9aeb30cbcb56272f71fde6289e04e562a5c7e9ee9b2125b2b9abb6be0ad151bee0ec45b2b31ce44f7e3b5f9f5b53a83232e7bc4a7daa1daead0fb241da24fa32379e29ba63b5f06ee5e7aeb8bc2dd5dde5a0971cf61b2969f0ad3ddb66235aba833283e5598abd90267390ff78c734612aa6d2825ce49ee0ee4ee5d77b7e22daf0ebf3b9d83e37f92958ace72469ad15be9c574b6a363d69cbb270cb6c9537fd48c8e4f9255bc7177eafed1dcdd7acb7bb9bbcee02e6b36eeee798d679cf3d35be9f8379ffbf3be5f3e6996966e5bf3a6b66bf7ae65c6355add9dc6dd67dc9d95837b3bb83bce5b7ee43a833dbb5c33cd923d62d63d344b6e7de61e9a257baecde53af23c699a95c708929b986be5799256b7eed1d7d69b4862bc7bcc73eb33833d64bd78ecd1f935941e77efe12d1fc1dd31f096b7dcc7276dad51fd7b47a3b486e9c57657119364a5bb8ccb2fdd7dc572f70fe78628727c8baaaa98af7074d892f302144ea1f0a8dfe4b43cba840db4c8a9dbe42ce1d467729c95e3d4593936ab2459a0907d9435248b4743c879c1a947bd260700364071a5498c480482b428161437435933437ce53dc9f12bab19d2468b0c317cf4637952e4380c38cf4acd9555ec86c562b1e85773c362ada88d0df5565656de6ac5fab258f1e80df59666282b0bd5b757d486daac6cb2d4d80cd93435389a21b819d6102b30d87c144733e4ca6ae6f3a88d37f325c767acd8d01b4a73727c6648de2c4a3384eaa3349425e44a90188e867a0c67c8952cb11bfa09b91224463364af94bc98cd2a7633c40a8b7a43ae6489d50c1962c573ea23f6d10748800b58065a44c41843440c2d44c61823c6d722a2811691315a569cc48894d1d232468c166e457d8b1891315a2b4a848cd6473d9a440ecd6a87b2680d25424608a5a144d0681111d32242a645adf838d902470cce10a81b6ac5b7c0a1565ccc8c022d2d36d02200d0a29b21e66a6786c819ad1b6ac5e188cd60a065019c0a58a045436f2c60238488192d221568d550221568d1d01a21442ed02272812ddeb76a2287489830887c41e4019f8b30339443bd288787908ff2e0b162d1aad5cd8d1616e571539483c3836648074935940657336489dd4769862cb15bd12601b56702a20b10a6111042eeee4f85cb1fd6d875b4e3ade2c6a4a6ba08c5559bfbfb03133fe87e5002abcc7e0812fac0c64dd79b0f5dc09aab49b39a42354529d11bf301caf5b6176f1f680f26284ffd1906139f0a061bb70e4d1deadde3f2bfad423df5b0a507a61e806c9963dbf2e9d3b66c71eb161b7c8b92fb96d6c9831bee3c6c71eb93a2b699f6230f5c78a0b983630debfef519ee20469f3a749631d46ccc55d476a44d3b74a155ee0e36ed30b3557387241de470777024f1a566fdacc30f3a4cf17ca63bda78ebaeb48adb8eb756f3d4a1055e5b6d399891c3971c56c8c16797f7e773dfa7225f9754247e8dfffbd65c4f1bddf8be6ee229754f6d7198e3ac9d7f5ea1dae210c6dd56a17038dd2d557e4dfffe8eb4b9666c96bfdf56cdc762a56030d9dbaa8943cbf353e1300020c8549f4d5b85226a1a72d2f9c4b49bcdfe0d776325227a2c568abe1e8b9532eb2b0d010541c1fb2ed197d069d6bf6d5dc9c762a5949cc25d253f536133d4d5b2ee7a34d6571aeb13c986f64bfd6759d10d5d6e70e10626f72a54e80bdf107403cbab50a1a3a553a8804d465363aeb99bc347fb7e899b6030590e5f1b30f0da76adedda9bae4a24598d6cd03978df062577b72108580319f72fb1aea14b0d37cf7dad86204bf28f1903408c3bbe31009000301dcc9802d1a7c9001084eec8fb4443981776a2818b8374e7332e75e8eed65de4926435a2c149cde51fcb24dea2c11ddcf8daacd6b20526735a4c771add452ed5b2c4d65d6fbadef4db8c4322a23d0317f719cc199cfc8423896ffaf36d8733fcb09b3ccb50d7f06f44435f5a19514c579be8ebc77be2224d562a9c4db366acc312e71adeffb9264328434b6392ee13d35be97d1d21d11c269f46f7498b818a6b6330f18e012a8616b833fed6a1708054d75c951870fc5cbdedaaaa2a26af5ac1f0c5dcedd3962b05c78bc5d72d18b6c0e024ffaee4d630d8b8839f6b1be34c7734ba5fc75ee002ee646ca9eaed69da9634e3da0b53eee04e7dc1e705bfb674410d7074c186a7d17ea4afd9ecd4daca5c98a2515d5dd0715c4f1638ca7ab37cf1baed68cf2b96a45946122b8d24be6581b2d91b2d4a161d7770bcaf5b50e3474a56bbefe34d73986ce18b3b384bd2d5a6197d2cffb9d682e96ea3a2b1168e1ce4f96c16117dae85b9bf3098cc3c711833611183a58bbb873fd66c334f2cb470bfc6a2e46095199620bbfe18eee0d83d80aca1f98f0b3f6a5c8ad217ebfa392fe144cc345a6dab6452cd5b87a46d95ac8dff9f6bf7b1e05cdba1e04e651a06930de97091ae3a5c84e4e724c92aeaa8a0b23f86baeab8e84c92aca152d5d1dbb6b9dc1c3771575a8e0977b0b45417d996624d5f4f6549ba5fd3dd3fc9e98e96b0530e6af7b8a89c0f88a9ea707770572b62adabde3d8e6227bdfb273098ac867136a9c2b8efd7545d7cf7b830e62d2aaa1ee07902213bf7a9036e35f613eebb855d822603d2ee972516b50dee0e6a2877d048ebe40c6420dcc19d1d699a15bf25737dfab7cd53235f93a4cd699b93aeccb10392b8927f9fc0dff54a18f088b7aed8d0e37405ea0a35ddf0f156938bae39d9486273ea459cb5a526b5780e2cc6737ff17607cf6bf7c5e2d611e9fe62217730639bab0638d6dced028e76ec212f1497a21b8f15476228fab77d7db8fbe3ea2ec3b83b92b74a9d6b4b62fdb9963a3731d7d7ba7407c9129355ee4f23a7dc4132086e8bf1374e37d692e2a21cccb8867359d9c21ddcbabff85e4bc997a2e08ea42f927c7d6b8e7ececa162b4e7664ee2fd5565bbb01f7f17724ad611263cb84351dd4d62a599b9b026cd76abb733a509489669c7473011c497c1bc1c12d7eadf6f471755b1ab59101c97a6d896d5c6ca6bb833625b0360738bb7fcbcd5a35291c9c7dc6e2ec5adb6cb62bfdd2d6707030ef36bee56ab39a90fb58fb1cfc725bd90e7de9e830f7f7ab7077306a244712bf99df7631495fe3d719ddd035376e317201c72864dd78d3bfc9c620f45651632c8abae674dd2213ee600e5ff1fc8c8d88767c7c902439527bd23b5728fa8a7dc6463a43e247d9f7cb6bb32dd1c61d1c6dddb996eec88ba94eac450bf3bb8eb4aa71ac34a5dc5f5a2b1686e7e25babae2d4b4bb5ad38572877f09e36dbb562b571b75d5bc37426061c9f245fbc558ccd4cf76d73254fad6f627daa6dd79a6625716ee35990500d1c7916d11a0ea988855cc0f13ec5b44ab58db5c299575ac3611016c2b0708413798b852755e6f84b77b53c81fe6ddb6cb9abe6136f55e91255e506e64a9e628d55b1719e1e9cae9b7ec625cd98fec5146f2a6a682a4c78a562666ada9bce7f734f5482b83b4856d126796b4a18bf27c65074fcbfc9a6709942abfa9ea3c5542bcc6149d3ac75052e67ce58a4ba48254d5cc6b9154c7717755fdabcc28eb45dab821a0ebe2e32feb5755f2cd28daf0a5f1cdc6d15741a3ba92074632ab4c0adadeecbdf964ea560aacb93556fdddf2fb1a833a5a34fd62927b6bfc9a6884811e3a0686d98ac54574a56fa46de9252e5ee3edea75fab346329534b526c7ef764d5350a13be7f8b366f4deb675cfbac43b5a5b66b71ba9651aa485a256da5aa94e21b45098bddbfa31b5faaad136f4571d076eda5745f8b4d0a858a16942ad7ba9ad6d43d85f2249be3459c4d7ddef6cde18ba33bfb773a23b6f94daaed93558a7ec646549ff86fddb76e7d976462fe625cc6398a6f4b96837e5d49f21cff264a8d1593b88c73a4ddf7d4ba5a662c7e5498fb3b2ee17495e174dd9fb148241baa3ded7be2b26e4c65cdfbb75cd26e5bb25e5b1b97a2461b4a6d11abd4cda59c805566db8e9fc5f075bd89f934a58278d41c6232dedadea2987077b2eab0eaf32946cd1cac328b128a6a6dbb73355350c3c479a442d727c3fd3a852df74ce17686292891189b2950f714727f5b5062c21f4f129b389b218e3c69246969f9a1ccf2a48564cdfdfdbcabe447bdf8e2ad5463250ac390ac3fdaf0c9aa49acc3709f98243fdc3adb1a4ec4645178ed589ffc8c8d461ceacf581cef87175bdbe7d15673bc5ffed63b4d646e5b84d3b5e93336d217db7dd26cde178be1ef4a65b3f9bfabe69756a6cf5db794d1c5f6c55bc95af4a2cd26597719ef3ade5acac85a667c6fba2ac16032184c866b77e9888bb79c6eeeee94de9893d2689eb31fb1089bb59ca81873326b2ed644c6df34eb8d529e8be97d6ad252d64b8bbcd5546489b79844e0ee60c67496b1d18cda448b24d6bc754ff1a6494c61987460eeef786b3ec5ffdc7e1a7d5d3f8b3f7e0e93a4f8a666a2b67c9ad476edd3688933c5f9b1f0dcd613356e4dbcf52488df5663b3c422e5b9f88effa315ed2945b47bdcee9f10fd49d628bb7f52feb63f6251ef1e473bf5132107abcc9eb4de56cdd0ac7f73c35b286ce12870d1d9da6713855b88cbb5fcfc81b750701292a4c5a1e0c3c12a331dee13ff88c570bf7e5d6f50afebcd44daf7a99e4866e2fde2c557e7baeb51dd75dcf7c446b58fd2fbbe156dad76ea9a915ebcd809069311edd01750d0a993b1953a2e39e132ceedbf64dd6fcb7587195f5b86e1b525ae5d9b3f57f378db36176e6b65bc1687c2be35578a533f62a3a7ed6ad397f57e596ff8e439e212d7eed263b13ad4d5f2a9ac6d6b5c86bb86e3b54fdedced10e949da898f48b28af9c7fb3a639b7fdfa552d4edc7897627695d2d8d2039ef5bd38a9fcfbcf55d1a123f4a10d550294ec1604054f78fb67e9b1d37c639fc5db776ca4f2bcfbb4ff3a66bb8efe76a2ae51febdf889086c48fa245abafcd5bf74442e790f851461f20dd8f7729560528882e113aa7b82fc0dd67de4a4ac147d29e3e3f20100fae5dcbf36415f5f8d766b5aeb75da132495651ffd7884a712ae39c3fd4d592ace7162bd18ece50294e213902a474d3f516de74552ac5a9d186b66b77d5143a43f30906dbfa772561b052d47d89c57de2adb138daf0880af75b690d231d117104e5a0d626de47addc5f9a77cd365b1a91f9d2565214f296110d2da3a19d9b314d876eab65e08d197d4f803b923c6b5abf288ebade46f056d12d0a12e3c2c1d9ceeb28fa1a97e84b67f6f9dcf5daaca695daaea5aa37f19eb5735c3223c96a34a395e27d2dbd67cc88bbc7564e9ec0575bfa79163eaeee19b55d8babbbb12af1969329275f932fe439fe7edb7896676975b5acb74df3effad946b56d725b4da83b588a76d712efb3de4a6fb613e7dbbed9ecf837598bc80d77d0ac79df5a6229222edcefc75a443c10c1d870709f988e19d3d7aea225cd73a4755bfaca4ff597ea9a2bebd3e8ae9614dc55260b604285e21ca6bae62a1deb2de6ee27788bc937f484fb498ad76a2c52bd6da92dbdd85e1b03b7a5e3677cf12da74f5d6f434d96b8e1f96dfef3ca922d3bb3529c1aef4be9f3770debe4cf51fd9fe4ee4fde5a22e4a0be89faa475fcadffbcf2f9a52c99f9e22049567b137735b51d2bd5f6d614602db83b146fc1485022c61dbcd83c2b1d6f7d1ade2ffacabf2b49f5e351c916771f6b941228778fe22da1152c212445488abb4b794b88d54af2c5c1f1c7fffb348ab18dee485aa5e16c527d9f2affbef5e6a7c2364ad6f3d6260a8e6f9a3893a4cded489ad51a9bf46f5b9f38bfedd6918eb7d29d7de22fedc69b666cb339d6cfb65be9b5b4eadc936a4bb5bdc9c0f1f3537d6d2dff26a3e0b823f5892dd5679366aaed6dd31d8dbead66bcb5584913fff854f6c5cfafe92eff79858ebfc5377548ad24b3939638d7ea6eac9fc94ab7a52f5eab6fb2243ae0c554e3444c6eaaeb4dc95b48c880e3efcf66fe7ded93b419fddb4ec15b48743b63d33c351e9150f0e29bb639baabb74d7748b2ead09bc3f96fae88b78ec0e160fe4dda9a266dadb58e70d9dd4a33aed9ece7a7c29a3e49abb666f7fdd1d2bbef8945b182e0ad23a63b78adcde6277767e2ad233a75d7119bfa73c622fddba6bf71f999c6c4f89719ef6ab7bdf626da5b8e8eb69ae795cf4dde32a2fbafd15c49f1478a77c637f1569ecf2d23146f8d798c8cd4b482bee05dc3745773145f5aa9b63b92acf9efdbe8eb495abd89f5f33da9aeb920d3835a4eef3f8d3e55bd51bd6b76dcdd5a528c81c2584a5f2da02e0efe7ed22cb1489b8ca6285945cc04a403d201779a8ca6680d533a7eb6fac7f1b5fe6cea7e5bd006be0e1d5f9ff43e95b5d1bfc9801cdcf7357d1ac59bea9bacf54386fefe2c5e2cf25c7c977e8e703abe783f7fed33fd9bacf533d5fab171a789d5d4b486294eac24ad549bf5961f0a1cef6b7a2dddb15dbb4f9ce96ddb1cc523c51b7cd0ead03fb5b65f624d75cdd1cf3cdef211736d997fff489f4637be22a5ba08fd9bccc786f1777eaa6be9d3c61f2d15ce269dcdfe2673f7286ff9f038881371fef2d4178b9424edd6f473a59fffb6e9ebb38a4fa3e3bf289e9a6e7c6f15697e13539c88c97bd2bfc9425d2d898668bb5a1211ede81011916435fad2ee7b46c16044365bbbd888ea4a654343a538f5b6aaf597433a5cb46d6999a484fb66b39f238a9118d3c61f4b710a28e82c7fdbf0bfb6f58f444c769367d3f8518674b86897ab156dedefd340355a20132dd00ce22d100aac32fb7d8aaf7b90e6afe95bf30e9f2abffedce281c3ef9bfad42d9e2dc02a33bd5feb1aee8ccd277f87e36f5b5ab2c563c326cf5afb91e736ded73c42a5a86bbde600abcc7635bbf10d2fb63a3f55f8349b454d3bf53dc31733aec160fb49b242cda6d07f29f756af2c79eb1793bbb6f4c5c12b83d6cbc67d466dd7fe2d4777289321aac364885e6b7b9a0969b83b8db74cc040cb040ab44c70c2dd73bc654297d98cd630dda13a94fe68f5b5545bba2d5db2cb35d79b48aba57b47ab0282e01467ad3ef776e4d85183d6c249c58dec409955d45ffb51a455254249901c311204f4e3b323424b47053a6cb8fbb55bff48e9c697ea2e9e39dcddc5a373f1b04061502968b36659c64975d7a3b16252ebdd3ff9ad2b135ed2381133e9dd3fd9ba77bae9aa24bbe9aaa49b3029759f499364ec49d366d9f8bbda3edb6c3132ea3fe9e8e222a31ac6194a9c9282f2649647e36f5d99969eca6eb1de25bd7565d2f506b5b565dafd1328a33dca0fa53f36eafa4ae295a62be5d1d695c968bfd4688fde92e67fd2d6bd93ce98a4556d8fa49865563aca6127a0202858368ed8086aacafe449269005c955248cb625264f2852e5ee1b937a7cb740c95d4574740e75cf53f359311dbf76edc664fd6cb33af74e2468b7494041e33d697e53d722102868f7b8d9ce0e7dd1978e4e0d9b408d9075acf456f26ff4e2fb26a6b51c6692a2ab4dd869bc274edad8e92e49e51ff353ed699f4f52b94fc258e6849dc687c542f8b2816bc81c209410d79027dcbd52215c4366aec7245c43a82be112a20638ee6a0097902dee4fe5123282349ca94c9364357209e171510bb8bb8c24ab5118829a242bedd43b931c71e9a2477f1b298d2b849ccf3187c91a140a6372cf05821b2e10c2708120c505c209eeeefac0899fd0f501d535044105eede82bb3c50729d41b396491051b38a61ee2f521417063cdcbdd1fdbbfe559a1ea6687c6c8d4607b45d9c7374dfcfd12fb1140535edd437f1d65c44b3c48f15082c398478a2bb47ab81d2bb5b477c51f0665ee8eeb190c2131b984f73ef2400d70646ae25aff5ac700581c39dc25c419800ffd4f526c260e3dfdcd38fd86916a3e243d89af76dd32564c594569e59a495ea1ff10df1be36f464b042df76aef4335efa113b151dbdcd323ade0a83d1ca331b794a90b6d6b49dedb30cb7aee4d79eaac8e776ae0cc2e80c661c45184bae0c82dc9da4d1ec85c146d2de4498bb57c5dda3e2ee2cf7a698200e3536e0c2e0f6f303fef0884f358022eefe85069f0ad5055c4de7ee4fdc05a4c77de3ebeeade0eea9e0ee4db97b52a2b87b50dc3d590a9e1418d7055b67f0c5fb5a7fe809b92e00a23338dec7899516becddb6d43ee4ec57dc77d8abb7ed8e03a83a117e59e8223c0e56ac23dca13b336d9dcbdbacbe57e96b4f16dde341bd448000355ee5e8a535b8754f35971ed2eb95a3eae95d09acfea6af913771fc1bdb817daccdb2d71cf89b7e3ee55dce5a3f503faf06c8cb3f7e4c4cac26b72f794506042e1090a4b4a2724118d6f9a366f0d2b75cd0df57092f4b223f79860d9e97254e7d6f98a896f89b3626fb61554989212058a4c2a2a0528a726a62728289d908474645414eb01795e654c286147a708092388406488903265ca9471afe6e2411d6f739745578e1cee3e2bc39543c5cc95c34395bb6b7c5fae1c3c9bcd6cd79563e4ca31e2fea230261ed203aa08c3a38027c68533e4c2298263e34e8728059f1c6d7831cdb8e6bab962df9712a7dc3d0477ddc41035d622d7cd1077d7d526f0c92a56994999a538b5349b42b359d43fd66a98e7c79a37dd551cf6f1f1f9d1c1f86644c17de2fdb6aa7724799656eb26a329bb455bd6bb1bb1be310aea6d6beecc9bb6db96a75abae42fa619d78e041d39822487b38deaf29442c1d98cce704fb35b2d59cf2b4b14c4afa7fd48f393642df5eb77e5196fcde18b8b82a16048b227270a8a74a62b2677d5ac9f9b99b5a9fe6c469231ea5ab9bb9364a5bf4489bb3e30ee6ed34fae6f0b09c6bfe9d3a45b9f569654d1f5b55c9e19ee603e6b74c992f15d5e025c1e97252479d6a8b6d4bbb93c1fedf2dcf585e27231e393e3adb77bd23059e4f22dbe8496f5f3d6d4e553eebe1257b0f2326470edda325d9ce75ad8094e4b4e513129654c777f5b356b6564ee5aaa8c92b75553c81d6a34194dd11d4defc78956764714eea5a82341e786a5a81b9742b3cc4ae7d31d44ee3a68bcb86869bb77c5bd277574e16ec711ee66fd1b85d9e1811d357504c1615cf458ac94ad42edd7a1944c7c2a182c1cdff5ee71eede91111d117077f2e9cfd7aa76f78abc98103a865c6730bf49fe2d74d2c4c1f1af50706b2bf9f50ad0707a9242c1572b885a41518f0aa070f7883c26cee2c15944b83b0bde9a6301423e3fa00ff8c373b1b612fe985fbf26eb9f9924cf39384841993398b42d7b7a446d4b184c93e4e9b1bc9c0a2081c5fd8a192850230547ee0e8a4e1e75f74270f74070f73ef8115f9bb707fe800e38d82008cbd3c0fb310615364e10c46fdbe6daa34dccfa6247078769969d90beb40e0959e84b67f7b870470bc35daed7d240adf567dbb5344c98d07c8a2c276686c8e1e3be421c6ab8fb8c4f1c42b86f7cf77d29fd4731a9247056771de9bf140567335ac3bac45b9f228d516d8ffeb66dce4f858da63e271b6fad61f19ef8de1c5413149a71ed6b96fcd1dc62adddd750eeae2088c56bb5cdb98a543f55d574bc75ac98ac4fc354d75ccde4e79b36eba5558a3559a9b6a00d7cfa7ac9285929b85fdbdbb654dffa2559f3977f33df9655663f62a3dc3bcda6ccbec452b3aa2da63746c126b466a550f06ddee3cd6feed747e36f6d757ea8d9147c69cdd2faa4c8b3232f1629aea2bd675962916a2c6afde22649d256413a7a3282c14292fc1c0c66ea2955a6d84c92f6c5836d27d5186baa6314145f555791de250aea7d6d15dfd49f737f35140a62b26af31f47bead5599e13056329a4da1af2dbd6ddb7d1eda7ddbdd91e2ad7acc3877cd17c54a6f1def8bfa47ca44b18c1b3b196d8d95621b3bd96c11c6b25dd1f850fa898d2dee2ea4c9efbaa59af6ad544f7ed42c0cf7db661e14ee5e06adf16dafe93d8308d9e5a77a7aede7f1ff7a600d2abc071cd668c1dda570ed2e1dfd275d0103050e94e1ee4264516fab50484f50e08e9ce987c1f489777a47feaea5ddd6f6a41eefd39dddadb46675a894ae3681e3efee533d7dddcf55bc4f14bc553c77f4dbead6609559ede93e93ae36cda6d01d6d47ee9bcd929a6a4bd632dbbf6dfad2e68f14631b8dd1d2bead9a58acaea5ed733b3c175f1dba7525a1a0c8a4dca5110a3bbdad4261a7a88d9dd0b8b983466838b117178586bbbb9d8df5955e6a764618bbb1fef9e715f2a63f279d4184bb8fb03380b8834e660061465518a43b859981731f9728a8e9c52335cbaa7b9a711205bfb49ba4597d5fd34a5f9ffafe7d8d6f22cd275681825a9fbbe66a9a958e389bb48412b4cd55fa4514d418dfe8ecb1d8bf7fdb4b14fc7147abb453d38bcd93cefecc7b46f1b6f46f522838fe6eac1fa5c7bfd8da8c465ba1cadf4bf7b47d51692b69248564f4636d1a8da2488ca1c61f97c6871a3f8fff240d8a4ce9eebeef539161e2eee5799fce32fe9bec021fa8b7fc26ddb7da5ca968a5da8824ab11a8b5ae363551908e4be0f81b43510a8e4fc75c739f292569266dd76a5df7db6a188ff4733bf7d4a1a03e6fcd6fe26cbef68fb45393e48bda96b486a9fe9d586d4feee81aae385db70ecde3676bea9062d88924ed965a62d251bb5b9b3096e1232cb35d7bdbd869bc503676fad2ca6c176729fb7c1a492c75a18cf9a99eb09394d1e228d8eec85c917e57268c651b5359a88d9da0b87f642071a730bce9920d06d35bf797025c82a87ac4ac3d0cdcddc60322e5f4b424337282824238156bc297024e5cbf0567e1c5b3d7a08c72408c12429c0def02ef87bbc7b47e72bf2697c450f06d77e36b5baaf9ac2018238cbb78cfbce96b6b4b8ea1e47519e366b631296534ab619ab1b65476a495fe489e2259452d811b56534c4086b7956ba9ded51c5975597335930405fd58bdd3b8762dcf0496b4c2f0228c29408a37adfd4873ef440bb0450070c060a2cd7fdf666a6df5df3f0127fecd4816befe9acf5af3597924e0c4dd69388203457498782e77f75a4460f070a73b728b9fb38f59b72eed262b89b1d953ea9a136b8d270e34c8eaee55b8bb8d09dc6b687571e4ee25707738de7077121ce1ee23707711b87b08dc1d04eefe017777c3dd3de0ee1db069c3ddd970f735dc9d03eebe017757c3ddd340c3a1dc9fbe58c27bfcb8fbf596177638f9a32dc92aa544620c75b135d26fee7654ec2f7692da18478db91af5507f5eb1f784c17626cefb7e58f3be162643c2b5abb31010e8c3431b79dee6fd830707ffc1b3fd070f15770d7ec088f01fb0eb3f6042fe03e6f21f4a52e03f945cc07f28c9c27f28a9c17f28a9f90f252998e0456812770cdcbf8cd63f286580af312952ddfed346c78b456a6229373860d5fbbe25454a774dbac101f57dd32c2badee3ad28c6bb746c9aa429531e35fa14b729856e98ebe27233d0f38708fc3bd1708ee9e917b344cdcfd0cf70854c1e3ee6490b6d6ecb63a24318803c2384eacbb1e45f984a0bed001474e5fd8e9db58be17dc6dd75e3b2505064e29b67d410131ee1218430c77a698cce96985a5a82725b2ee8b674d509c42a413625252484de151544c0a1494702ad634c309bd95451cee3e81307a7ed728b8c8828bbb87611650ee1a976b7913efd3e83df38977748936d2d526184c4689a8ae965988e0fe17dbb098c361e3dfb4bdb646e90e4b65c2028c27764a716afc5defef2a5e6c4437be3a14e7232cb2c06cd76a6d4b982845c5162c8e6c960603d3054c162c78b83b0f9836dc292c85268af7f83a833c6629ea2e0633030346c7dd41aa6dbaa42ff2efad37f1da26302c77bf620d0d5c01066ffaa2b0178501e1ee5764b9e2e614866f39faba02c9f58f749ff88a0caef0ea2d475f14766d78f36fb38e35dc893a6f59e1fa26fede6d9babd9536211a49db76d6d3d3d306dee7da3bb66932e193fbfcd66f3a6f7cfa7b2fa7eed475aab08e3e33d6b9f095005972ab63b856dddbf287d51d8eea4c1607adfbfd82cb191ed5a0d456770eb9ee7f753d96d4b9b4dddc3607fed4dac65f8bbbecd9b0a379cc27edb1a2abae01b0644418590bb3eafbc266a1aa27b57baa335008d0640a00154f094a22ebfed5a5bddba01413885e1da5d92a23378d3f5764f18ac013e8508dc7d36db6f24c49d8807a9796b0ad9e342b28af83480bb13ee3bb8bb047c90020823e00ff8c343569c2dd5fd0880e13efe3e4b1eb3fe0dc6d3a37b9c05250a58140288e20577a7b011effcb97b9c0e0c1632c0044e77a538aafbbbdded60c0e83d3db4533300c8b954e27deb0d2a0c1720820508b1002d0b204b51c7d3538aba1eb3e74bbba97efc05302de0c8dd297df9f7a3802874067f579ba5aade3be5fece18e1c2a5f27a312162427774a3d5d9b5678245e5a75d7b264a29bd545aa0bad1866f1b3fc489356f7a13772d696c686e689480c164889a10012644f43e19eeda93e148e21915acce6099e1ac236a3cd87aa44c988859d3822060c8dd7fc497c2ee53d83de287f2d4c8d79409130abe6dfc2e3cb87b166f4131bb2ac8968c625031233a4475a38dc15b4f40b1cbfb7e8f59cb9effbc693d9ac4a2b8ef538dfb3e55b8ef53d1ced02c459dd6a11e2d8e028385214ea84ff22c4f312482c1c22f6baee5c7e15cb4db96b41bca51294efdf9670a66294e69fd524fbe949136cbba89e86b28e32492ac46643582c17060b0108ba1fe31bc3f8ef6165ab386a686c16ae46b188c48b424ed8432cd1896c16022505d69cd676ca8e6b312dd7455ba528ed7d69b5179de301c8013707b51a37ae1e2c57430e6c5c74db3cb1c3477d982ee2a49e98d75b9d96c4de35b97200ede335b0184316dd7c60470d3dbd2ec0d67530042eed84900eee0f823167d782b890d24b105bc67a6d8e6b4b5e54a521a266994b466794b220a1c2976fafcb7bb04258970bf0ee363b8c57a1f092ee163b119dff65991b081556663ae39f30cc7fb3ac4234efc9b88cbb5ccbf6b2e34cb7c2b1a5f43b9edd1e6c65b69e1f8fa241aebdf62f80428301859436c0b4722a5b1fe2dacb99a476839027470866fb919ddd15eff353a33ed9ed5307dcdfe6be18cc6b4aea491d69514ff6b2159ff6be17df2bf16beaeb4ff5aa84f2b6335ed26fa4f5afaaf85b9bfba5a1a51151a01b55f1b411dac320bf7eb22e070f7712c22ccbe367caafae4c6a40e8bb8e91a16211416e1c31dd3c270bc98a6ed48e2d186445081ad5022b63811d1c4658e5d2d9fa8de3dce8e5cbedc4a77b418971b18e392fbcb25c8c54543a8e1ae87a062081b6c94217caa4c08322489c59d798a22a64fda5b8ee63069c4449510500e0aa1e360106a5c4ca33bf1da5cee9dbe043123eb79e5c7207c6e0dc2495acd7fc993ea2e011126f70171b04ce046175709b680238d9bae4a44444430d8dbbc4353db7459c37d5f03059d4e24283dca13a0a093e8476c4434247e145cbb4b4661f82316737f433d2e7d7ea5fcb7fd849d48f24caabb8e22b0c03d0c75b5dc55f1c730040a3a91fc9c24c6b45083208c0face0031670438d0f4c39f11da009971b413c70fb9870afbbe29ebc0325f81bb37156848836809865beb17173630d1110600039aca1658d57541c1c78c2cbd7450049b87f481cf1443bb6d1665a4c6748fc28a178a50caf949988bec625dbb5d8b64f1c9a65be8566199ae51902059d365daaa180a7128b1e0a3863272f0d39dcc7fa9f2b0d2adc69d2d07994fba46103eed748ee9f11ee5f11eecef28f087777171a55dccfd8e28c1e1a70a2011132f025032406ba7c42b87f410001c2fdfbc1073239b8c8e0dc45e6dd4566e6ee34b1fa4a35572877e7c21dc92cb3d2925966254c4a9175ac1fe5fe6dd9e57d91c6fa514d1be328a9f08da24650800bcca84093017ca00d3098c0c0d0140c6860b09102c725c5183dd02bb07c378e293ca0610d2a46f04103131142b6f4000a028928a2e03141102182885181268e5e204316002668d0b82c40c5dd25e0aa401811c0c14586072e0a387189c9c16b8a18a38c7f01b8c1fdb3a106291911119111209f9f21a020285b5f6c445f42a71124270d5ac219c6d767889d3e19be18aadc9d4836247e14d704bc78ab0d9db7dab079ab8d29de6a83c85b6d88e0ad3640f0561b38de6223053c685c0ad0c05d0aa871d79738dcf5650d777d8980bbbe60e1ae2f5ddcf58506777dc15f66eefad2e4ae2f4adcf585c75d5f3e70d7171a7725e0042d6ff5e8400320ad2e7c70571732b8ab8bed2d3450e02d34d0f0161a61780b0d2fbc85c614de42030a6fa1b184b7d038c2dd737eb47244e0c05d22e4b88bc81cee220202771149c35d442ee02e2263b88b0818771159c25d44827017112dee22a2dd4564741711990f9b1f3ebc24e12e2f3eb8cbcb0ceef2a2739797ea2e2f327779297297971e7779e1c05d5e78f8d0e007064940b92b0914dc95041377254182bb92e0804683327c78ab0ccf5b63e2f0d6980d786b0c196f8d11c35b63acf0d69825bc3586086f8dc9c15b6376de1a73bd35a6e6ad312a786bcc93b7c624796b4c136f8d31e2ad3125786b0c116f8d01e2ad3135de22e30e6f9151026f91c186b7c820e32d32c4788b0c08fcc0b1e0021b9c1a1c771f373d6c7ea0e2ae1f9adcf503cc5d3f7ce0ae1f56eef2410e77e771817320c50a774971c25d5274709714ed2e2954dc25458abba43c71979498bba480ee9232c45d5282b84bcae7ae282570579435dc15858cbba288e1ae280e70579428dc15c500ee8ae2c55d516e7057949cbba260774519dd1545051f1ccce0f0c8e96141109b1c8f0e30a893f1b9e0eedee42724b92bcc94eb8b39dcdfe67dc51fb10833820412a80f652284eed7b51a9e218104122813223ade9f49e2ac2b5850b06a6019b18a583196112f663b63edba220c34ba98a3842ebab80f57172238065c8811834507b8d06274db56cae79a71ed7573737383736bd16e673be64a318d791740600ad4b6e6a3241470c51404780013ae33788373f178e98d391666d4e0801cdc1da0e4eefae6f07db2451deedb8a96347548ae2dc02ce998ad59b6c586229fea994c2c23493f620b0f3e215a88d1628b535892f690d0c2c83d8bed54eb6a7e4f59e8780f0e58b8804589850ca6e90b576509c06208163614c6003066b83b13ee2e840060a608b9d5750515da96eb1547781659b058fdb90456c8e112f2e3fe9382bbffb87b9fe7ee59e1c40a20ee5598e1aec4b6631524858df775153e54c841615967900a11dc3da21d1df74feb72ee1fd5a9f397b5fb97b56b0a21787062cd32a530364592298248b1e4c97129012290424cc65af74e528071299830cfbbed06ee4a8015526491624a8a97bbfb2480948287bb1c4e6657baf3b67769072e3be8a2e8e20e4314b9286ecee4c5e4c504f6e48a02e68e6b770927957ba7dc3b8de38f632cf74e204eac343b7e595aba9b517d331e5f679328586566b3350aee7465a2e0f83b72df173fef68b6d26bb5a5d2fd3e4bfab499d6330aea9dd76eebec7c717e93beaca897c68b739809635989735294b64c58b6b4b1937e92666d9644fa124b8d6f84343e48415da9ad66140c359218db9ca69fdbdbe65caed7d2bf89543f557e29ea82a2062c509441b05917122073461920f8fc861351e8b78d3f66fc2b7489f95be3ac89652e279c30c1dd89d05d69c6e56b5d5fac40f4b1d873d32abb8f05e7a4f1c7fff15a517fd4d21835fecd67d1f8fbda26526afc5d6dded5fc2828a3d4d69869ebf368fc1c1e2f521373b89a98c0521355b8bb26eb792d7875b509bcd8d27363270a0af98bb73d3155add14a6be46b7c44617f2d494bbc372ea220b6349ffb6dbb5aea13efa4f011a5959a27bd6f62184edb9c4fbca3bb52ac291ef3537d0e2b5170fcf0f329bebe7656bf46fff6f456f185f363b1b4845c426d890a798a425a813ac59464340a4916438a3a81221551991494260ade37f12a024268962c747cca848866c9427774707e2c9f6b14d4983a5170bc2f297bceccdaf4fa9ced72fdd1ead98cea97aed5f08f357f594467b313abe002a575d723fa1aa1e86ba8b43729b336bdad32a194d216280c4629beb3d98c22512234e34d65b7587fa475eb7d625ac37adb7b7a49819727dc1d2c5284c2461bbe74ed33cdb5fe91ed5a5a1def9b3a24246d8be2c5f5ee715dca707707778f3381cec6a53777b2dd3fd93daed6dcdf5978f18ce634dde6e39e8afe486b78f7385d246329f6f66f455be28bc527f38f575361a7dd3f198fc6a5187642620ddbd519a4c160a5a87321a1c4dd88468d8fcbb5fc2892b4b977923aa28b0edc750412473041091d919202719582bb214247b41e42858e4849511b2d423b021f87a9c41abee9aab475b6e78f24d6a1e63faea43811935a8fb7c2340994823773a671edee1d1dfa9aac49149c01059db3998c96f5ce3426f1a558dc395ab3b31ddd8f77e945241bca3869f637fdf9770d6b7beb4dd46fbb4ff5240fd5a2ddda8ad68c0d7d0dd71d990ea5b589ce886443e5df760df3e870110579aea5513054ed5afadae696e83de94b8982b39914ddd9ba1f4b1daa29a89b5e36bce93e4db2ee5c7bb4647474452c5bc2323dfe3b7d599dc437a566506043076e55d33f47ecc4e4f201c98e0f457c00e2438d0fde430a7ae0400f6ae0d0723731dd1941a787ee8c40e96b040a33317d8da0435fb44a0f50f4f00385ede8543a7a7839f87d573e737503135baa70d7becb2101ae2d24349909718fc6c50398a75d203594e161067707c31d2cb001217af738fab35fbf66f96df5d6a619ddd13c2cecf8f0183a08f958c086a11c44e042aea53f399c39380e70b88f17d3a8642a974a8d0a8d0a152a43a84c711b2136204d4e0062d0b2fd525e00ffe1863774063349d6d065c31160beebae5fe3f28c18ae1a7cdb180080709c0b003a3560b87be92e1a9870f7292951a0c8a4be284f0887c0970254115aa8d0b24593f535ad51678c3e8e3467fcc69bd9f7a9468ba318cdf042ee85a919cc19c219a4cc80c20c4b6638e23e92584906387cb64f7316e52e1982f0bf388f565f2cbe926490c960c2b86b8d5e7c5f2fc2b4eec39acf5a8a3a5cbb4ba6bde99acf58ac14a74a71caa8c8fd8b7d4e9ab87f44ee1f936f6889fb0753e2fe09ad5e0042040bb8bbf7020d9e05de38e10255e4baa0c3dd3f9a65824bb0c60f2070f7950a669413150052260e776731318026a02eb8224c1277f79af830e569cb0d488071770f871084b09367869c70f78f09a9491b3814c12105eebec28007312418820b1832dc9da68820e6f0ca80dde1c4dd3f364ed043963a86582389bbb38c98d5107193809534dcdd2b8306d405151dae9cc113824de06c86f73e31deb4ca4c4bcda6503b03a576bdcdc007416bc648b21a3181b3ffa4d969eef36be0d7b4aea43563bb4c6edd69cdd88b170467354cff045cbb4b4639d29eb4bfcd68dde2932436a260fe5db3d9aa0cbcd59619d7f29b7a36d3373f553e357d5c2d6fae4f626ce230d5eb76fedbb6b9dff8d257bd5014b46152bfe83e49f2acfdf819ef6ea5176b2be0e7d98cd6bdf474bc76df3aa346d49ab19acf1858f359b1d62ffea54b50310ad25de99bbb7dbe7624056b3e6320b566a5b3a29906afdd74972b15984441fdb656cd18b5664cca1368cd4ac15dab610a5ab3826feeb609b99a6b18142d493b4d3a3e1253cc488aea280adaaecd5bd399506d9f333adaa78dff60b554747cbd7bdcebfcf74fa0e3bf7661c5b25995390c71ff84a4e013531a71779137dfdd5a5fbb8ccb2f31b9a3ed5d6da214f78fba7f2110200937457e20b0be0f582998cde8786dedf3c0fdebc0fde3c0fddbe0d3e0c3c0fd03e2fe5de0fefd70ff5cee5fcbfdf3f1f570ff78b87f39ee1f8efb77e3fed9b87f35ee1f8dfb37e3feb1dcbf95fbf7b97f9efbe7ee5e1977ef0e77cf0e77af0e778f0e776f05ee9e0adcbd3952e03e135170b375f84d57772a97cdc18aee60cd68ac5f771d475ba1fe932eb6a0c6dbb49634cbcfcd66a3599e345a5f588a825893fadc153bd1d96c4697ec984097d012a809f4bf16ea5026d4b43bdc4f2ed931edd611c92a864c28dd4ff6f450fbdafaccb3d98c8234fada31edd6a158ace6d991b992b6bc67e6d9b78a33b296595f6c4dbb69252b9dcd66345b8df110d3ee6ca986d0dfa759627146d6a7597efb5fa331fa54fee51aeb8063ca0881918a139c9e98e8d3938cc288d02aa30fe30b3a7722b4ca94f1c988e44d78a80a32a826240a23a24b51c7c333bac4224420442d0e8220d544e8db6a4f29ea60b08bcb128b6148db00ed023430f445b3a1da28b428523a83958a0a047d138b9a5efb54544a7caa10573f87ab2fa5f200058d5ec69fcaeeeaa46319ec71cd841cb6a9cee0c562e80a5f08c7f15a5c7e7de6374f291d933a2f1458183a3d2d4945214509914e88453dc9a4c210c60219701c4932c6c21716b4b83bf8e2ad3cf95d2c38b170e4ee3a167a58f8e14e892885218530589531aa7051c5892a48be3885f550b1c0dda76899b27346c23d219935e75c2bd4e11466d69ca378afd0868faf2b94fe4fba50485b934cb366997e5c95bdde8dbbb1be544c05262af018ef6b291720ab8899f41bbd867297702266dadfb4b193fe4f92dad80927e21c66dae7d328859dc65a548bf447edb659223d49b34b1b3b1d91b47aa18c9f34de9782528aba28a02b8a8ebb67904584e29292b9a08e9891b27973b74b51178eb74e1175000244fd00d3f485475794912813a23ec8c0dd6bdc15e5c39dea46cbf35fa3af17a52ffaa2e16f7c53f84261f8b60360ddf534022835707e2ce42533add99b868aa233b8c56a9658440206f1883f6291e7c92a6a1e97531d2e27375c4e6efc109ffc8798e43f4424fe43f471bfa15905009cb99ca8b8fbcd5d4d22f8e26ada4d4e9a6c98c48478337171a7b0f0bfc674730ac3b5cb64c49dc29ed4f1640b779a0385e5c7659c0b6b35fc04cadd29ec890714a6516083c2340a3a77170a471416ba96c868d752170adb355c1aaabb8e757fb9c4722531ee14a644ba2bb1dc3f1feeae82bb4ee0e2ee221671e6f9d2ee137cc0dd364b9d7f7f892f2cdc98dca779adb7c318597862e8ffda5359db04c2085244169e042200461819bef0a28b1f8e44c085bbb320e03d2048001cb085a74516eece6324c66d97863f62232ddb49e9fc4eaea22feed78eb5a8c8c7b5feaf75119bc2155322c685c26a196a4b29acf639a4b0ff5a4ce71416f51415854485081112c45db1a018902b16c4c31cbe7a286cfc1e1dbe6c088395a2cee5440eca84091327147002c629cce5a40627599c48710fc97acb322849ae2676347183c29a68e16aa280260668a26587c274284861422eb66f73ae4578dbf1c352d411bd41c4868bc80c0a13dd1d0c16ee5e773d8aed7a943f3f96f0e22bbea9759b09184c644c8edc1d28280a509425539640c1c2b83bcebfc2c54ee29b523a9943f95006dc8079111e1137873d2eeede105fd6abfb5108772f0820b6bbf783bb4340ffd77cb835f754d6e6eef5b08507edeeed409255f47418ddfd017ae7e0f9adc7e1eee1e0ee05c0ddbbc1861a001084064f8622ee5f1924248f76524242058395b2d156f342a9968c89d6c42ff5236ed2ff49fba57e6327283811ef8cc9aaf353d90b05e9e6b3088a949971ce483a33b65f2a2bbd943e49339f5251bbb3c8a6f45bd421656c7ed451ae4f1a914631b3cc4af7cd27a3dc3b9965561a5f36be1492ac4641543058294e01ad0144c6bd1475375d9576c64d506fcbf566f4e2c54e3e404041b91a352ee97ebc55ebcfe3186b793f61dcfd69614861eefdd490cf261df16d7f4977b40170e0b3c0470d26e758733567966ef45573f95d3d6eac725c3d5bfc0577b77161df2f5b7edd05964105fe803e3c3ce3bb402e20ee896e7cc11cdc71d85d200ff7a8f8a854f18706c21ee69c42ce8c880800000000f3100030402c1c90474452d18cbe6d011480016bbc70944e1b8bd32cc9410a294488314604000040404434480318328d1812587d7ed5910f139feaf04c03fd453ed280880f93f30b5645e6f41e5f33eeebf6264831936ff7ce8516281ab4900432f715f67088022fb8dd30bd3a8c11e1fe44ad83c479357b98c7bee4c69ef32544ed8c03bf7c3ca089f8c830f1b23a08c921ae2ce5b41b79e9462ebba8f77a0c3c48718ffc98ee446f1c44e7cc86afa37e7c8198aacdc4611a18360db9a80d47d41017b028a7ed4af6f2eb946b5b17524f96bcc75616fea5ec8875a2b7b8389cec7207945d3a63703314f35e880547134c0502007598381919304b245aaa5c20861e3fa15406cf538b295ea059d88f827be7eaf9fb05d57e45a99728d5de47db8cfa023f865d8b2b3bfbe4934c5057cabb13a4dbe8af7c3009aee06141ece203955fae46369ffddf5a54d21271e16625361b7c61fd8c0ae82899b022accc7dac0e14c2f89c4b8b0338edd8f8a4bbae1afd1de46c09382cf37b31992447d2579a1cd483521386fc1c21fc93357020291194e5a8651fecdd80b251e0b12b057a8b86e0953ec3f8b808dd103bc09fd6621f438838a1088112efa9d31a835f838636f8a885f63063021595b0c7a0d8c83d95e630fb9cea9f262babe8758290c9613d7e1ce3baec8ce8d956f7aeb5c73c30200e0f0611d7319b521b9f51fffab6c73e4e25e23f809d1194528adfe565a61fd0b0f6c1941ad1963bed39a793b8b3e2165ab07623304e763d979f3fdde3a68b18b3215fbdcb47a27b15805668582bb07eb3176fa762866b0c9b2ee3718c30538bce95722d405f786ddee957e168348b6bff1c9c039df7f1a0f27b13d0434ef474ba9cda56ce93209f801c60c0e581629dcc457bcd599bc5b6fc4e70cf26c968cfe56098147ca7d64b86b943333e93955b471e5007c5febe9f4b33d62f6a38ca3f8ccf4dee45e5a9c30ec62cb7b5ec779779685df4359dfb44eafe4c44eba4597572fccee8a89936ff6f13f071863e15e8689b10a4f0a39603355028d80fe81238db0b90dafdcdade8f7a23d0d0935182e39014ccab0fb801f07ca182940166322057321be16b7a2477b68518f98ec6f53dc1e7a07c6bae794a6d5f64d4ce3c47487f5a4c09e1c8a192f35ee2f7db3979d5c09070b34f272d388b7db9d608cf95a7b5efef30238f661f7cc07ea7fb27659265fee6e0f251f7c25fd0023021cd45e727ee0fc570eddfa93134ffed58877463a38bfb789c47cd648b8e5ff8ae6b806165593cac6765738e58dff8a1e1829061eeae81b66c0ef05b929e2f6073848e8b9455a7e4ccde71819826cab9d2df92c861f50121f748693542e146bd25e3f251f30e4a3c1c7fc32cd3839f40d51fa9ad40bed8bafd5f49eb47ffac498f02b1c0327580e173256fee14ebb7753e2ac9f40c1b2939634967251b0c29bf6fd356ce2db6f87f2af75a7b73a5ca4465848aff1046102c42bede43fbd239d8fd3b8f5d525e214a6d2f6c80687359312296d981a4de593eb94e354bfb431cf48cb03d74e73dc7235242c6b102a62bdea0d5cf1da997e250967eda5147b3915a0ce3696ae95c6088d786e0144efe9ea6f802ccc406ab06e01a4f5cad60e08fdcb69c19888fdcac85b0f48d95e020c7da04af68fafe371129d33fc478d1bc05d7825ed88201d49421c0aafc636081bcf52852d00e2d3013ddb6a41bf970a13c0269aa3a09c06ab5cc94688e1786b1a1fb9b7f8c8fdab90a54ba964bb337c94eeac1fa66888569dcbc76304326f7d58a14b1177ccf274e2c61e94e942b3ff4ea20c88e28eb9fde8c89a2666c31edf8b9e948d315f7d3e3bbf86bda06506616ccefcf6e978494d86372455478deb289f20de51bde409f6f96b701961df493273c80147e00175469c3a74bd366f2ac9c602e79b44ef7758e81f9ffcd25ffa0ad85b75db6d8d78ebbde8f7f3a0b546fa957ca4d55965ffcdbb01e0341d24f8b26de73920effd4d157ea67fbc04f7d01ff863693ce0114fc603cfd50f4bf896dbede5bf91ed3a77dc21da92b5339ebc8e3d47acf799042bf9a8fb6558fbe3ff6523a2addf77b077281b1fa9ec1578ff5471246e541bde0d9f7f50a26e125cf92ee0f9f0a7fc601f1bdcf470c2c031db9de4db9b493fc753a87f1e71e38345ec1f62edc1c6a0fd92fbf36c0624f235f83a9ddd032ceeaa0d183de4ad87dc8689fee8f7a969f6a211cd46e02c1eb27f1ebf5d471adae23225700d8f618970a115ed16878757fec360d0a2e470ce90de7fcfda611dcee425d71a8205845f966e5d7708c9c67670a0354b7ff8ec1f01a8acc9c7043cee56daadc339a4f48f00a318c5ef539460af60ec9f17598ad6355cb1e637bbfcb2e354bca0f707339bb0b8b6bf8dae32c1bf153dae5676c223ec664c3651b52160128719cac70bc5e28a8a1fefb0a3605522e8232162ba07dda2217a33752f7f98b3b7dcdab4d8b379e73a685d564ad2a707a3070f5a41cd2772cbbf700b68ea3d4126d79697871886149b12c700194a3166197ccd2902a0922a0a4d3853190cbd5e7daa3d5acba6f0d5c4ad1f5e865bde7fa1c065df0ddb6fbb69c04b91054847d45c55d3d95ea6464d947ebc1f988f07f5855f980dbcd96c580cf7c695fc3078117cd84d58fe5c4a6782da668b9cf94087fc62298c44d74e800282c792a03056b67365a71b6e6469c5c86ea8c9d3974fd8b788dd69290078783867a50e2d3f38b3ff00298163507efef05cb66eb4029f2da86fea69c6d3193514b5a523de9f850675bf69333d0f340ede61b26e8545e249811d044dca67922b2202edf391866f787f79876215a282db848f0a6f966000fe9f59d4062e39239c1f3e7fb0f5c5434eb8f24c2140d17022ebc198f21c0c9e770157d0b5984193b8c7f7755209791fc10aacb83bda2c1a230eae3aeeb53f06406ddd091b406f224602bd8ec02f597b262172e590ff1ff63b7c189ac37ea0c3d02cf4b78c472ad600f031b884b57cdff97922ae6de9fe1c24dcb4c0763197ba4a4fd046d7fb2bd9d2e37744e392e943c93f5d9ccdc7119ea979c38f60fd43b8c4f4e288dcfe753527e07acf3114a98573736cf5f92be14c2a496e4dd7ddd7eda022f79873968b17de2a0c79c902073990d4fd393eed29c4abe1ff05a780c21062b7ea2a1fe627bedaff0895be3f5e9f6f0f8dd7fdbd40f1eadcb1428cc0395d6d66acb929409785df17721d13b2e533084da35e37fea83d7b5c97c1befcdaefd216f7e0ace087ee93d5332b8961fe9073add42c886d2e3ce7efc53291fac3f3ef65acbd785a2b93f70b6c649e259d6c99b5aa5afa80f508300ababad5d7b32dbfc5dc363a4ded7f5cfd43ccb9b1b5d0c02348b232305ee7b7d161905f2c0d829effea21dc8cbd2e920621d775166efeb097c2fcb495374bb08d0733e79b1b585b3c1b81577c5faa6fa15fd73a218637729363caf93e99e341a7f7dfbc4fb0702ebd992f6d072dbc42ca80f8e63438725a028679e9520f5ef53f5a51ae687807c799856858a9be2e16d707c52b794cf9d4265ae417c5999227daddd3abb7259f72120bde23675fd9fb4c5cd1f244f5dbb2ff05e622814ae77c748643d3f9c5b8fc8c5cba2d333fcab4e39059bd902fa55e9f1ecff27e0fa71bb02a466dd66b6493cac9be46b13ed8df509f6177b80a2bd84c4b1bf7b365c28460f69fac236ae9c9cd92be273b001231439810af37d67e1d82ae205ea122740da4ef872743f4eae865a687c8d2b18f6811afb1007a7cacfa89084b7a252dd26b3ca7d83674d6fd37d79a5b63cbbbb3c04f3a4622291287a647e71d313567899376866de42385af8da22954ea177748832a9ca8484673be8d5dcecbe7c10ec8e72cd913ea0cf0bbf382feb2e20d738720473f053210a8d306cfcf19d23cc474d1cf27d9bb2409df5e91fa6c2f417021f48ad5fd64a1308a60152f73b2bcfe0ed9845dd08f9a867de9694d701be3e7aa2e45176ecc644d1f83ad3cc0306d7cc27e768aa2b3ca5a49df7e81a6125c46de727421b8660583ae698083ece0b2a28ab9c07d474b8124fc408bf139fbe57133315ffed141687b7b0be04b165dfc1f5dc800b9f832a8a3900d96ab86223f56dfaa820515491ae85ef8f715944a90d9d5a022ba0a2650634a1420b8648a7dcb0e61c543f35ce63271540e6a89b0bdccfb7a08473403db4f01230eb969f8f2c089082300e771b615808401b11a0d3dd679bc32dc256bf086abcfb8bc6f051450b5206c0d0aa7e32d17fcd5590d7f37f241499c07e01500b8fe4c57c04a3617ef6a18f32a583f667dab116e4ab3d254e56e42fbdbf3a180bc2259efb103e4348fecd0ea7acda7c316258e51f60ec01cb087cf3f0e3ca95dda71551d204dca61eac6b52a105b7811b4976df0e4f6b4c68615516a37131e1ea7019da74cbb36051cbe8c3071f51dbf753858fa37be3ed2321f2438ed55a0a4b971c5d18912f1820f773042780239cea7006f0c53d1f2cc9ee7c4280bb97676461b8b4da4b93966c03afada44b0d7837b5443ad8bff8bb8bce56ecdc4ca033a0f190807803950342c5e78435cbac019354863146bb0fe8fe529f64175f8f888e9611db6e57f945739f971024493996399ec6a6523364a61d671c5dadde37e82cc9d446d77bf040a02c768117f2626a3b98d985506f9dd6eb91b1ff9654c7a19f450597c04a9cb42d9d10dc25382530ced66b268356d80eb279668ae16ec758398c0c6dff40f0c6414467f14f49d707c4140231c0a7cdf3977d9bb98898657117576788078cd8c103ff55027ba57654d3830c4fb3df19bac1c84657091e61344db6348041b8b943e6a52888501df8f40a1ccfc3934e4654f6224e9db06cb382e8000088386e57ad77d53522ef595b8bb7bc9d4d02b144da5a2638104c44021a76f452052e8e49829970578e8ad211291d7b7c2be9c22fd50036c0e5ca27df8fd9a0185b141201584a2f5b713c9abc049a92ed77934a4a04bf89b325c1c6f4c1230d94d18fcfad81e46d1660ef8c6134836182057176695fc03e321183a1066548b5b8403801574dea7e91edcb4954451cff214bb74a4540f5a6e03cd9ec4429de794ab630479380797efa1558e7560cecc6293436914ea96afbf98b111289be50f9cc557fa9ff36b467de91494f2a0b1f5b074e50a274895b0b0b8f53571e180e7de77e7e9e26e1885198fb045e3191e5452647a4b4b46991c590b9bfc807e9a7ddba1040f18bad3ffd383b8f2c109a75102de9fcc4f1e14f2f9f223dcf7e5f7905c7e9f9d18f63558caddc1e277c7e14c0a1794a0ccb65842b057b411e2e4249ab44ebc82ebec08df6900a146e6ba2a3f12640b1f752b3185c19466bd11efe8a98a099d41cd7620e0a83b8e92f47db9a7b228b626e0f4f6dc74b001773da40cff2b0316683d8807553fc0d79a41490ec376bc3473ae75a7a3492cdbc9424c40b6829745b042bcd763d805e070a878bec0c74c28a25adb2f23514d287a9717145bea193916de2e915097d27d7450f60b98e8d2cdd0a129a83b0994826cb60eba72684a88b38b9bccf0e9c18aef84cc748c091f8f1f2cee60322bba8d7e516ac9b42df2b35a282eeec57dfe126fa255c390efb6d88f53135b2e69808843c67eb2fcbc18bc147ad8d00262d6e6d3d1180cc1e963cfe1f12d2f99c30e39c9294823e6d4cf2d7ceb5426a782409e922abe390ac437ad5ce1241c89d40def9c148ffd6ccf291c2fdc8c688d03acebdec8251bcc27d2ecd60325fa5a4588f27df9be329a1bb0e517000281a295e622f00df1d5c9b49c600d7416c075a6c49681529621e06cb3f01f8a5b5254841ef6bb783a8241563bfd5f0f73fe9ddd8943f487f2770f1faa0292240001a96104212a72a6140a31a9e9e9ef8c50618229d7cdcb42ef51733215b11b1531bd8731b3fa71d9d2fc2dc6c521f66696aba54f3ddc8f78b8b95d85284ac9d08f5fbd79654c5867a6ea45fc18bc67ef2e93d2162eb463cc63ae8482cdbaa84c8935c29decdcc23c14b12cab295cf0ac51ae71f6177f130add161d2c41719a53c9605e862c3100caa7b21b29d9339213e4cb1c94c7412ae6d54a189c97398754313757bb3e91765f5dd5e473bb1552aeb3c44a1a434cb2c429761fca9fcb354018958edace1cd742d9bcb773ad652717683c5dc5dc5fbf931820ac39b833eec181ca687552707af069fa0cd944c18bb22b122068a0d8c9d4423653dfe110da88ddd2a27e64c42cae091875d96bd4e000ae415cbb066b30a0b1e830541b6425c18a96d4c8d0b764c5650e94736b6aeaf5156a0bd4322a61adb855a4e24656c55ed671bd2807d006f562fb5fea3159acfb58b034b2381517fcda07bc368e4ea6b08e47d650ea7b96a884aafc276ca0d655ef7dcc9862f00fd2335a4c30db6d2b0dce60848fb56029c899e0c1bbeb4237663b09d840adead76cbb9b04a045b19bbb9ab1c62f7680f6a9e6098ae1171a86a604eeb6888c53bf00f544e8bac7dd05f16b632847b84bdf0bffa619147104c0885ef11460b1bd00b4ffaf89be9f1a47d3070e7a61eec9b515ed3c33912d7790b02ca741fc1b9abad19dc8eb65db52b13733441fbb68036429e9ab35743839f42620a1ea093d603705a4966d8266fadd3001599ce6e43547d2c4737ff1a35d13243b34d265bbcff58d55757e0cc5c9a86585719f5d7446828518fbac1cb5ac8ded926d4287a72a0d2201b10d3d7a8b359c70e3a6003d4f26ca31cf55c8ee949caaa649e9b89d0b0521eb497d23c6ee2b56ef17c9d27d4156f7f1020245f3c33f9dc81532d93863fa8506309431e383b21dd85c127493d9ec14b95b6f9ad2645c5cfdbdc4603e07a0dbb9551d876b7d614d34aa3c0a92a6be59a1a15b52b23d747efef0b3c8c83f51539e3715457b6063cb3bae6815d234b9e99fd463f43c5e00ef479ef24a2c8482476db06ee287e36bf8cbe459aaf27f6d5384a7dec272fba8c48e73edebddc05b2c452ed3ff070b6ea7a2eaa22cf8abb0eaa4f0676eb2b0f9ce567388cbb721fff5ec0920ca6beacf06a5bf8764650ada51e0d76a76c0a1b32c1867338d6409f60b116e2a595dd857e590db1d20d4cfe5ff2652af48df948857745ff1a404bc2e3b692a9999106d4df5279cba05da07fa6a1e6bc75b3135daf6a694709df5242cead25d78365bfa7f5fc93a2e0d7bdcb49e03fcfd7a19d093e80774f3ec639b9fe1bd362932d316bf3ee1105879d5c9780c9eeb2f2352a7521cf271f66b3de6d19666c54f68cadaa080d41a7679d5aa0d86006301ce35290688c89f071e3e66c77a2b0306d5508b58d5f0911c08badfcdd44c9a29a35e4dc96d0b168ff2c8e44ab91604392134e3565c53e14166ef226ef9ae7bd8f6c7fcd3b47d81bce1b35ce39b36ecfcb255124c803e534129ecb0fe520ae71d6ec0f970b9326e7d9269ec9f49b7115926efbccb9353953376b535cffb95b722b907a60122ed47bc2981f4771eddde77060100d674f06cf85316de55237a2876b2ee42ff875e5c4ac438e3333eae98ee428dfad9f9318d1c7c36bbdff00fa2143af1e48f04e9f3c56ba6856b818687df469cbef16f75b1038fc0fa6f3a08502de4fa10012d005b1907126844ce75da93b1ccf7422eca4d507c966aa523465c2cbfae22a0234a5fbe71e6aa8a0dde467f98b5e9047b4ba763461e6aff2b9fd8d0cc7696cde3cb66b8c79b9cc8f1b09cdc0e5ba468ab36b463ff7ac5a1fbb56de20a7289e261526a3da96b43af24aa17d620b28cd8feda4a53a9419099ffd56b5e0271873c544774288de8e5abf39ccb07a4bc577328aeca239d7a567a26f67aae07eab93763cfeb62fb9adaece9e6da4cf6ac12429ef54e830115d72c4ec43c0b9f13349acf1748036047c3ae76708be97a1fc6bfc55bcabbd3acdb6ac0b76e063af5136416517dc4982009963459c2c68d1fd8d471eecfb6993eb7664fadc4146c99acae96ebff0db53d5d9629e4931da40be8b6ebfcbb512142621c8fcd6070d8882c94f382bcf1ff3d1dc45e3af7e50143b9040e3f133a3d0d8c37fe96967270eea6f2e36a9aaf1d72b34e670fde9d1d93792c2c7c174d3e09ecf3a0f7f9a3f285bd5bffc8b8651deaa4f72614faf7420d47b19c5e1413ccab47d46119020cfe20d1a051267de54c5d53aa580c5ce680b54c4b487780fe29aaefb9526a826b16357612678f9de4e180f33e2d9f9d9dddb0351605e231b18f077ed3538004920d1e66095a722dc1b8a71d3de851faf87b0651c6d2348c01494fa45387554d9bfae076ff53018356924fc07fe0f053d83e8e588ad84bbca8d936e7033ddbff1ffb7694b107dc6c1df4ab15069a76a021b26e229f668968131d6c0036fa5f52a6e64d39b4f41d686eef8b0cd13780ec006c2d51b614db2b9a016d00700d1c1a57324236f42316f302dbc7ed6e9ae5bafd7198ebed49ff1a38cbffce0ad0fe9cd8e11a3d5f2eef9feaa826db9d58de1d492df5f2188da4d41fb3325dfd88a6058d5a0b469b7971d9df8ff3bd811d3cd2247073d7524fd3be6d32173cc841d2f61d0c6371c85c6ba66e66ae79ab1bb43d674d758e6a11e91b3925c36e24beda922f3f446f27c8d1721b96e8bb06009db77f7d8a15c5bdd233cb78e1f2cb7ab2c0be2c7026f34ed9c60848c1146e5667251a28ad598724b80a7f33a1b4d2a4c9d79e4a624d08752ac2a0ffadc41f3e79b93383989489730aafa6163b5939cac80a04a582d71df1d79b2d95900ef99ac212b250aab023038b145f3807907581c113cb21f710c19f3e6c631e9079902e1693dece5756a41137781fdb15f25b377e098a24b44f034c3567b43887e2d8f4f3d0f1e568bdc5f136e9af62848cdd0676dc439a35a37eb0a4900b412d54c6b1600db6669ead4d81cd7e8a7d3aabfbd773f12e0098c5b11c63e41ef33c9dcc364a15e71e73dbb59797265d80b005b7885edd5c8dc2b6c6ba7ce60edea56c6fb8688a37b47f03c201a6e8ee789e16e3d9809880622c7e1128de11c8501e0447de7c5336ac3af5e5487821432c74805731fb81dda238f2b5f3cb7b063c275bccfdda8f729c4d04beecf96b872b6808f4e1f536f24dabd720e6a2570845ee947f68d49085b725e75bb3f02ad6b35868fafd3d4ea52cf9a48eb71de06b7359c04ce73a4ccb0b30a2bf047656d6ed9b49fe2a4ae342b97e9bb3ac86bfe8334f7bd87a3e12ea39617703561eb1dc28a5d3c50e978740c515268472bfbd301034d914e3438af0368963e4d95137aa97ac3e7c6d19f71a116c3753304b17b29fa1d02ae553402919f5007c5ccd6b5f22e73bd5fe66815aa3f87e93ceacd4ae838677f1a7ee30c58be1e6161f0a10fa381969ed0eb7a64f87b10ce89f3581f27266c1d15c57fb3964a6ab6f05b279a1bc6127fa1c86a3aa4cc88dbd6d531cfd6a511c31e43c7afd01e2049834733489f7c06934a0d35011ef107a605e98d807745a180e87a801787b9ccb6ec41d4753238bf498f0a16dd3005d10f30f2e4ad46c803989b10e629d4f845a1fe5a53233e0190f151f68c1649c0b8f32cbc8bf765ca8d46620221e111471001d74d280480241b3ed16394da144e6388597528a96945fc014f406385d45b5a168654562eb5446feb29f1bbb75ba05126904d007921e5703bef5c4b756847338371127c61f67b19c4ce5ac549d237b1903c2f2fbe43de22afcd1e6d02e54406d4206b4a8fc7a6889f23e1b79b940a5896d6aaac5692fbab2c93d2b16ed6c41ccd6fb0a84bf08b35e69a40cb4f07b7c12053f1666a04b0cf5ce880096d453705eec62c474063fa96bbe213d9725e19fd9ebd28b60ac19032b6368593d54a6ae40dd68457429fae18c63e405ce29da3860d9afd1dcdfdf64f46587c6b4090c7631b8c8551eb141d5de4a34e910521998e25707db0b54a501e97562fd9d5100bda7f7032496396cc7943b03686a559a7beb67a3b9311c38fd0f3d13f358938c72708d815c6108c4aa32285697ed1fb0efb1d03ae034e7893f574ebfc74055690815894cd6c54adc50f51a1633b74f741697b052eb2f327f3c30f5e3707ce680d74e95f376511005129c6e4155f6c02666e48dc99fe7d62529d7a5ea68ddf8fd13edf89719132d0d8457fdb6936ed1706ba901e4f262c1bb4926b5fa1b7ac911f2055de2d5286ca749cf5b1213626c8986d002d62f3d1463cb9434309e4e32a30482270c7586aa3c3c893355d06478affe84e9a1ac7625125bb8f6737b29786942867be43edd4cd4081d55604d75a7d55b2d33163f0c7d0d521ca2b2cf8b7d51c0ab51dcf1fe54f8fdb6e2a6115e20cef382c7993f939a43c66482388ce23d1cc208fc7fe2360a64b59b67babf359709f04ca8fee18607cacd256e88f9d77afae3d1d5eb6def3dc32bdf99e672707d80530523cac61c969cfabda263a9dfca878a699785e3404acaa49171ccf0013c5f2c55bd73a58b46398052250644b5c8009bfa6bcaba512b89771611f8429f389e3dbf5370430e8b09c88a51443c787413b07b03d24059db1a6db73378350778b44fd6eef9d50dfdf2f8ee825afaec9d2fddf885eff0b0f10f29164993e13f216eee8effd9cd7a17a9d7525744842c895a1faa8a8b5864e8e60cc766e171b4609a5743bbb844f6429969e1b0f5d5e8cb51116bbd097d25996ca4a3441250f2e3184ce79418df4d3aaeb54d1fcebcd0fc1190350069708bb4911967e9d12295d31485c144f2d739e8234ffd9e244878b093fa87ebe6718fc9ce94d7bdf9e517f3cf43f719a32f56502cc9cd13d5b0978279888fb9bfc3ad79a2ee7d497464a6489f07507b7c4fed4ed17e57fb5327b06ca9a9faa3713fbdb43b48bed16edea940b345cffc849bb6bccd789121f15ae479b27f0b7e059edc35e336f5b375dfa5b2526dec144839f24553eee2ee5f92c07f435a6100371cf50141ab7039c5fdade7bb42ef7fa0de47e1013058b9b88a9a742e2cd0d11d41885441beb935e16bb7f84b27d696504d39e2c225178ee5f11700c88774f8d4beddd11b1113e5927f93b0dab21f0ed5b2779d1974a6f440780d6788a9bd8c6cba1ead60277d0c890263351c6212d3fe951f181fddcc36ccfed33802504f61004eff8e73941d459c6ae1604422edd6cb6759953c95d77f412643fd265685bb7b7c4d6d5fae9aca3141d6b185156fc1186ef65c410085b3503ab1203a8714ec277a177fb52ad253f041264358a1503a4bd73bc1707ff12f893bcd6b4954fe49c125cdebd4722d1950fd4b4b45dc4f047fc0feae3588eca4ae91da6e3c857cc77d8dd4488163bb5c923e479d37e30c22082b34dfb15a5d61576fec970b49e42dcf0e425cc33ed0acdb9811010ea612f6b9d479e8c456b8263ee1f03123aeeb793dd17cc14a81ee6479c2ee5c8f24ca81a0c5eda7e57cc6b863d39aa4ad2f28a1e4001d3fdc5d10eabd0323803a8eadb8efb57727ea573a82fd8cfff82c8dc8f2ff4d949775a1e1701a25e480fb0a4e33db5154e5a197d42a4942b745374820939f7a5ecca721897c45e3f73f8e334b5a1b5a3ea388e5ac03e696fc931bbe0863da9a506f9c710609e26a3200d88fee5688630728e873031d7a2654c5790b52bf01b3ccef39d5683b856362f918b8cc4ec73ba17ddd14a45639c060e6a2558153c646c5dcc5c8d62eb4c35173677780f40e64932a4502ac91edd971bd4256a23ab13c95ac314193b179442c99323c2296dcf44a4696c9da18267bf5605fc94e716df6317b9e3a64087802d61583984486b50ea5e87e4315edcf2d7e95a6db1ebf1f019c3752a1fde153a8a65e1c2e748af6bf56d190188a20b5d9ab1d86140e1394a562f9c0b5014b7041110491dbe0ac594330d763e0ec10a4050d853e0ec6483fa158d24c1074e691d40dce1ad50be9393212c81c908d11630217be8ca1f36d5642d5962a79d6478ce344c42c1f4321837718148705a5c8cc328b081214fd6b77618f10001356ae33fc2f467fcfc1825f9c5023a070b571550d53baef7da9e9feb935d4c06c03819e18fdeab24e82e0d462a34050ffb98808020f5b0351f23ccd3962deb6cb0c7794584a008f28bbc09e8440abe81fc54c6dc1cbac67e51921c55bf5e55a92bf372272c4f34754e9c2eeb3d5714534bc27a466b886bff8d802256a03211498cd6f5807cace33403fa6546b336dfa4197c1110100f2d68f0b4f8196596dfee821ec17c16515ced37b8c0299931c60ef5f27813038769786a794c8db0d2970a9e293d99a6865c534bb18bc360701accfb0c83fd7099ed1f3c74a6eb8c8624c14a629aa2b6926f832170b078a5304debe84edb75a744aa2903579bcb549f6cae842f7d828620b7c8a97caa8a4b3e28d5dc3abde384b993eaff15fbf4e8043f03a9096948786e6c7afe65c24ef4538ace74763cc7c2c0826cfdd9577e7f9042e9891492ecfa972c75081c4fca4708dcdd7e0f1c364f70e5c8f5bbc37b509257c127749f1540aafad67630c8daf27e30eded8fb9e5390e7c79cc4b1d48d8e973ad0574a3749c233a9dfdf992be63b45bfe134768a9f22ddea046f9b07f4628e6c33119dd093f02a39f5ee0e8bd85945ecaf037f9139ae1636722c04a91be43be2933707a3a2c6f006347706532a21cb290f4ebc5bcbe296a9d9cd9df061b8abc911c4a4e822e1f8eb4108189dabf47cdc88af3bcf81e0c848675df06ffcbbadd26b30dbf9cab80fd6dff83d0722b112dc16bcc420cf89a893b3f4f7521a18ec172c0e8a8c748574871b2830f8d24fda77552cb9f88e8ba9660ec266f1d8549081236e0f5edbba6a867c31dc051474625a01d6e5f407742f87255ce3ea78c2a8512bace0b1f4238eb8f38eadd53e712fdffd706d71129fcf15d6ea0a383fe662e4e3b3359f1ca3aafdb4902da0d9331f0df7e797b3ba56b6bc8be41c865bbf9c155a3885b03e9709757ee058a339eb48ba9a888a67372aec0e0b03c14fbd0122c6611af291b1a3235db641d1b20bba5f5c32ba5eb23bba196e61971c341b20a85850e62676062350ff83203235f4ffbb8ccf52dccccb593f7cb74d64bf91eb04dabb73dda5ec7dba5d316ca0f8498bb2ae3269f7b8154f5889116bfdeabbb1607fb3f70f8a422b3669db3d2505c934c3a65ebd002bdc61301843435f16fed5bc54ef3d191df487b500c124074b1d344da6fe3077cbc03c860f7ff6f42008dcfa9f44bff73d01ccdcd4d0a6d83a9883e0aaab6477bf5ad8d2710a6e436ac77e070ba9b61dca6b45e1afa591ad0f136b1a07416e79b59edb33d6300236a6d5cd9ba9668981e0610cc7969286d9f9eb2c87eac183a6e1bf6e33905f78c82a716e67b1d0ec240942432c18282f86fc75675f96d707c117e6f62354e7ef1c7aa53eba1bee0131101b3d7a40e6ae18a32bf09904c55a3e51b34b2a9a5024df658a3fdbd7407067ccad0e83ef69070995b4218585370eb2ce8200af0604d7faef0ef5e665242361dcc082014bc5482cd98bd1aa48e2eccb12701474dc98bdf50926f7d01b0b7907226038b340fc0a969ab1e593d0f8461ab8417a38130ebc319c1805fac6fcb3343506c0207f0a395906eb75271efba53d762490462f5b8c73727e0148ab691aefe5321c1c182ed4148ee95a6a6dc2055d7878258422775f6825658093d6151707bebea2df310f829dfc881d07e785336a0dad8528aecd862eb3e7c4ae12b482ebd0c6424a0d5e929ff172ec90de217c54ef61f5a01dc0c91f0a0faeea1bb87754fe5b9025dfca0b0e9a93d6d48074778be120fd7b8da68311747ceb11c9406f1fc31154a0d246a1cabdfc6ae12d39b1783246c6c914994172660768623f46ea4d65ce0a0bc3a79d974e50d25b945bc9baec61148736ea31e3354fdca815c61800c7834108d3e6cc2bc12bb2808c69366b609374765fe30c75f40abf08f5188d28e3e9e90a515b3ec843af8264ee570a2fd69171eb29c2052525987a9fc338272b749729e42b147e6ef76b7a8cc7975a52264053f6b3ee3ea0b295d269f1ace681f6144f8578407112b9aac62dd76224886cc4e97408c4fdf4c54ad4c998861186d2b3aa110da91f3662354b19a024363316018b58727f02d0a10756719c32446d83d22cb72cf67eb3d412fbb49a30a9755057017a7bcf60d55c60b5493ed5fd0af205fe74b5bf9971b9bd9e0fec257a8378771bc1f5b162acff224f9a3c3e4ec2df767d87d70a45e61b023cd1358b6baf7611a2f5cc662c112f627ae454ea6093a30650a73ced5e0efbce14c6a5c795d6dfa3945c7a60b584c10732899a4510ec103eb4529c22cfc07999323fea7baf4d4c9da6a598c9ef38e8ea5879c6dcc3f9c6af7955c820ba5aec2d12fb8360077a946752ca9da42986d1a6d62f62d1b2b89f479e829d8b99952d18110c532b6b3cf2274a11ac4a46286f01690f9852f0689eb3200d97700e83ed19ebeadfb66cb95c3392547f8097cfbae2cd33b8d028e25e517eaf59d77b11731d6b2edd738f8cf17db86da169cc59d101c138722984c506beb10cdaa957b49c8d319c77de7c4db9c7f919f1ca32f0a39e477cfd471115bd0362ce518fe5da9d9c5506969717b1c1901282721cbd39c16f58855e06a3b27a0ed96ada7f43b96e44828f19dcba012f50293d3d6bc1e0d94102b4360a32a0480c120079cea417236ec960c92c0b5891b1c0c214e892ecb21d70964e3643f718c67079aa3723a5551f96d4181a15607d14dd1123a6ccd07253f422c8cd7e65d5cd822dbb45d759f4414d1a4c31330ccc78c83a8cf9580627c5daebe2291461aaf7b4da15dc17bec28f7ca8db09b1965aa79e45a82273e4a4ae91c1ae01c351a6df030f664daad1c2695abc20648eafca2ef7c1dda744a07b938afaae9e75aa82fd2fc21c01adfa0a3731c805b598b73698ba60dce8ca14fd0546ad3914ad594590b58ddb04b858dbb8110e52a03312254d74aa3bc54a67dce2a7c86a46c30e1626feb383ce2f4059b302fdc23e0f39679e15f60136c6f5ad3640e03dd720ec365df9df3c5eefe776a15facfe7aa9ec7e0ba8da26d5fc2a98edc549b5a08814074b559c015ebf9eac8db8e8e32bccc1c47e3a4fea2b0d543cf89e07df70c33c100b399cf948733620f8f37f6e0d476f60b636c0f340beec8a4172a2b683b89422a3a95c04e0b2b7a67754bc37c6587a970e9078a38345b54b78eadf29976441ba7e037bedab102b8186a86478ec3638d73bd2415c7d32832276d500fa6fbe31a32fa77d3df7e376588969e832edbfac18c41467dacf03e5b7494eaebb587f59ea0f750b26f2e139aabaec8cc061aeaf43f28831feb075d6e4b90e2e2531c1e5106679fe7d87c88f11cdb08adc81d0f83c3222f800995e2890ecdfeb71ebf5589847ea6044b3cc11a84f0474dc9e4879f997d4b540b0079099f752f008956ac1f33fd3eb066de54aea5a0aa84deadf7ff809b4094aa67538a3ee04017449211a6520d349774a1aa2a6ce43480b2ccf1b5193bfca6db3aa3051818f801f54730ae1e3fc499842643f02744dbbeae3a68b2b90e57e82438832286a1294278270f373d49dc36d38609a90161fe0afd865b96f94507160fbdee88ed911ac1032542434c782b3197c80fae3551dd49f012b51b4218348895627aa767aa28fb14ff1e7f6078a9f74cc77337cb1cc7b02b5434caf2a7d42ca8bc9e9e162b37610fec1214babbf255319ef21d3ded6ec431b735687d28885aecfe8ab3707fdff90383be78765d23fea5e3e198f7b6ec2e201d27904e811824710b5b8fb543c3d95dadb75f67383736bbabc533bf10c4ec0ef841baee2fa031eb9ee0ba44e00168cf9c2bab26e0d5f044eb895a7b86057ece3c6ec87160ce9de83e19b0dd6028139e71269ef4bc47ce5c8d954a58e52af03c9444d6a2d630dddcbc8b89ef52c129491aff6d8bfe0b60cfb1c1bd7f1413fcc60e32f9d35e9fa02887d211a68bf69e87419188a79732606e9aedfb4f86b8cb629a05b2256274de2a00447b75cee916c999044c751c4e7ffb32e644cab21d6dd7063cf1cff257128c2b094b6ddd08e4ed6184790d5e009ddfd1d715fcef2c3f06bd13fbc3cd49be21b067673dce397683ed5b3575a3e5eed21e6859f8a1f81102898e57d72815e10fb3ddac771cf67b8c2ab5c9b575487dd742cfa1ba3613e1db97efbad6321a724701f54bf239e3a1dd3b3903e7300f85e783f43035e07d9e2631a5b7d43a1e0297b44c758414c5ec7a4b23c2930c661fbadc9bc9d40bf56df9a6666fd46053f1107cf95a113c0f05a6c6e65f5a72e02cb55f13fff0a8febb6531384c9612af4c701df67727f30fa0543334c031335a179b0db5e19dcad9ca86a490939b99b65905da6540809667e23162127cfbfaf867edec71a71c503adc6e0fce2e81bcdf6ff18179151621e8190313b9c82f22f7b49220195099d30092795c1548bdbf8e6e1d15a77495d6dec05eead2fe58e3f3b16de1c16fc2be42b53ec28b7b77a5ac323a0fccdda3be499a680067970073563f1a28760f65f478266ef40c821943739f5981d700dd1a7499cfdeaf362a0e9a5e91da92ad5d488f83c10e19a6b5713ee5df641cb7f0d8f3881ccc4bfc2c7fe8df38048e83f88c1b44c3308df6d1b81e0e3d78a84338aad012b67c34cbc132fdbe2ae0caeda43ff37e79a7b6c89047bc7cec1c7948e96d26e72a2fe9c8c05c6ea066a935b1e7d076256cfe2baf7b05fc518539ef3bb3f66da0ea7e2b3b6233c037e604107ec3a8d3c008848454ddc664d88dc739783f1bcb6e7e0d30690f43901cf91d9f831aa380097bd400181957f129f336db2d4c7f954214c8cb29afc2eb189e66bf4b5fff03efb080b3c57c17a1fc053a401a584b4add0e33b34c8056591cac4fbfb107187a3b0ed1b8c4f029b594e53ca25c9b82184b1108ea7de521cd51db82fa635336b06412f8758ae6cfa08ad8501c7e516750d30bc3e81db0713159d5c9f931aa06bca99378097a6a481bd03f3e27f93c66014f030df87b390c05754484c0fe9b446ab7e4461e217814199ad666e00d2d631978135584f1634c97b3682979f7d2f9cc785b6e3e0b4ad51c714d10b584b4bfeb7a2423fb8eb839b76001f701107e3dfdfde1acf95a47106e427a6d1ada9e07520ced70f4fdc08f7e292b1bc394e8a3dbf4ccfc6a223c8cf7be4f36abece5d35b8bb033a323c5b0e83d0f7a2bc5ee173c0b4f4f331d4b519157d55359b19a0711ecacebaf84ef05965ed8dc02b09ba67fdbf249908f6b9401dcce05e063458cc9ac44364712323fad3de6b41d5ab31ccd12b025e14280b3ce0741b507764a0cdad3a16296e263b5e448cb63be8bca15cabaa97417a114bd3186190a3c3266ad897b70a6dbd806795b0fcc8d719ef2dec642eb511dc34f8473b2ee0de7da20293ad47c24085422470e5db665084fc461699c8a4a6f85118f300430069cbc37c1731ec217e9d98a96fb2297572638d772bc0431c2cb8e3ced4b8590dc62c61e3ddd968b920d261d7878d169b5669b5c565012c5e1686b6449f5ca0d8f37213a231e84d8a9f37609fcbd4c5a2118cdaa3d90d4873447adef531325f87d02954cd0ae8fa30d37385729d78cb6c82954fb0aa2b02224e76f330d881e79572a11615b9cd6f03a7922246ec72fab04f6e3816d93c2a9977d439ab03a2b6b13e18a888a361bed122f28caf4aeee5ef9da6c2a81528c320f6409e6d2f26de88f4e74151e57d6c3f889813d411b6ba02c278814be1c096ae4f2e1f852d2e41c95f86303a225488b6899c79221550084c0ecdce55572ecaeec0b2f7991c29b5020648b09a005673c9bbb572fd63a16ef9bf07669dabbb509d061b3da2fcc3575e89d68a606167fd62847e7a3a23e0f41d3583def749a78b21b4404226aef2b05b287ef126e2daa4e5f21e7be88e9b83ecc34d4e84e9f81c556bcf97898ee96eaed577103b0051bab1d0e277d6c0d487ddb6b88395d266cf4154e591e07bb3f67b50f18de5464b2f0e257b7ae41b3bcc2a5b6f86c41728191714bd48d6a57dc52fb99d4c9a739297164091baec1365c992619c3957e5c3301a15558960fa3ea01fe523e504150ebe24ec6e38cd4fde5f46e3374bdf21c9841daf71eb93dbccaee1fdceb1651f04f2439f96a43ec3e5720802a975f4bee9a9d6b25cf29d7ad54dd7b75c37742553ab93ac0128ad7ef7c0c651e7deff8b24f106b32bb99e6ca6252f9e4dc1dd37a698a3615e46f1c01db9573549cb8fa5c574d7f1b49f9c275f102920a55032ff04a22fb9df5f0559c9f4cca6adecc3f299fd815838890d703b37f28a107e3239b5537655049566600e4e36d5ad14bee46d978ae22d6b8f6e6ddc4552743e48271042c1e0e642ce649a1827b20c806679a2b9ab0f543e1bd6a3f59dcdf6bf3f7f51e6cc54a11832387f8d18957cc7434c06d3b24ff7b90ac2f70023de0207aa45c083fd0b53f72258cd25fc0d5a91e998f58dd715f95930d1206b7f2c166b7ec9dd5ef07b1085099474dd25e9ea09b954e327efe4d57cd4870addf14c51a52ddf78152e2bcd4d43f6ebae0574282ef72fecfe0a19bbb48627c73780dfd16deb1989721d80aa9bfa92d645be0861fe0515c9c4005d54dcc125af115bebc0f0b4170b7fc5295ca3805e7b9f68e50fb4cc14145c60103fb697400cfb8d6ec80318d027c632adffd850c89937476ee05c0943e6f9c89597e97db6251d4a97a97c4ba11996517edbf2879a9363d05b1b3437fd507ca9a990a1631b5c539d847abf157f07c44300c434193c8fb9d0429a53cdc2df1e9093552ca8e0524686731f775b0edcb37708a76320b5a344f4e13083c7c755a2e169ac5af52180ddcadc8cff5541e5a7da370b0934b0c54de4d41c84e94bfe59f0181bd3cc4654c9db564bc5fe5492094d86006127e3f71312ffa4f80d2e16b37dd3ce52c98f35b60f57662302100fd76b70749883b39030322668655654473ca00f1a5801bf09d0bf26c91712dc5497389a17b2ccd36238d886f0266998856a7a26187557e9fcb9d035f1f2430c02a4d4e0bdab19a94e56d3dbc827cc9d585e5397785f0382bcc2031d9842aee1912f121f4b2058d5153420bfd5769da38b5a7b11857cb73991cfcbc87ec13c5022a773e584ddd1a526dda60e68c3c5a99170503f80554b2f15e7729b2bf5f12dc634ba5905470a283d12cf1a5bd3c1c724caa7ffcb4c83a8ca627d72c76659f07c1e9a468228b5c3996610a6b423d2d7285fc4d6c4586ba2602c5a5357f2e967532d4f46d7862978989b069fe207a59da105f419413237536c3e47d5c31be390465e97ebab39f35f3ce4cf202dc412f9f9b3b2180e597418b36f318a892552a945a31d1a882e7c0cd206003862dc693dd7b37c8cd89955cffcf511262293cfbdae0c5580fd0266c196c0960d2835c23d125a15c89472a56fcc102609c569a8a39ca464b4e58aea630cc10d9b935a6140d5366654f2c01489029e82ecec49b8d0dca0d1ce187b69ac8e119a999fab7cc3cecbceb39ddb50847cfb476763ca41bc090c4d82a54781692c23e13d29e29ce45c67685accd6c360faf6b07257839d6e95bbca006d81bcbf3f9b1a0644a396098401195f0ab3e382c44a7e968f41e447965b3bf3c4268527540b213812d60501c10a0669ba928593d8924c0ba4b00396f56dce06ed9919bf1881e647c80296740e600671d41ee8de3130f61474eaee1ecde15ba9933384d84a3a18da15df533d37241e95838e85046d74d9355d31aa05c51a25ed0540fb9d0eb24db8175f9c34ff5f258d4c084e73b4f3d44aaae180cfa115b06cbd035f929bb680a727b3620284299fcb011a33b95756e9fdc47e6dd711fe516372dc81f9b4525d2ceec644810821d4904f4828090146e1aa54add8c13392db3ef98f9f707f9c02e53fcadcb4128f5500c9bd6a0e584f4c366670e65df0696bb507c5b88f32e5e6225aaff75d1b7963050df6a74bdba4c3ee482802fa86d31104c858147ee0cfe04c7279157ea7ee38d58afb0fffcc6757abe528d201800e3e853f8b14cfb8bf9904a107ad92b2784e72c7de181dcf28f42cd0c2fa3d1c6f5952dbe00f7531965391ad450cdfb5c7846768fa4943dcc9e8d373b3cc2319de128b6a0c8e0c6b8e68eae2b09ab94c6e058fcb89af8fcb6aea03b8c5f011513646cf3f3f9144307466042da53a87436dd1bfd84a5561f39a14cc48cbd8dcdf138344511922b7221a1da61a75c214b087f39e9b84abe0b029d831d7ad6e3569ab2634d2b9c7148c07894b5f2b30e0494b5f4f4fd54374fc0bf2a9d79171a456781ea17e66d8924667cf2c458037e477ea8b1626373660032cfb41437dd3c16426642ab106f50e0653623cac915010f52390a25ed591ac9a0955fcc19d1e525a4053e0120b953a421c5f63b133205eb220312001350c64d0bcb89e2f3145678f39a69072b56b6818c20d8199a701c0237537dfc7cf3e07e889aa2298b18813e7a7b46ebde8b2180c6bc898b77925952e47dfac5ab7f46714f7ee38bec5225b457f8eb86589a32d65f1bcb2ecd665e1d52d04f586a2d72864df38b78646716283870ee81c92810d08c75ddf906862c08e0473b2a5f5d728e51d518d4255ab49ff44494489ad2c042516d6fe1622ab78619cab2f03ae98340d8af81328094160b4c6685bc022fd96b2f128b9791c89088fa3fb0a14bd988c428fc05c8b885510e326685d46ed7176fa4311b19f2e6671d310e10d88bc6900ed5cbe594362cbcba98a8578d0c16fed30c466693428a0e97760ccaab71b0189178390eb9c5a556d1bf46b4eb44fe7dc8d8c112240bf827413d853e7028ed3a3b2d6df0abeb7a3e9c2bf2dd091bd4dc8852c27d5065c4bc9d5c3f554505bfad41b87c699c30f3e47583525fc47572eb3a02123f61350d1a4e854906dc7ad4f3e479d1f94bd6045b7f001e161d7cec5fbbf84ebcc54f7c34f154faab8b22f3644c84d3d70cb8469a713182e60a76d09c45615fd143f1ba57ea613f0d21e0092d4816a57e79951dd443ea8e4c3b1c9769ff08da372e75d11697c055728d82d5c5b143afcbbf9687a4f1dfbff33a0c6411607ac71c3949311fee8f4577dcf1e3bb41aef5a5e67e44b9af1a0751bcef68d4b32f765e8d1c3ad26b103eb2b94c508b042c5b02c18c4dc4522868dc6a799c53c6b51abddf818ba0a89a376c4158fe6844160f82996304ae58d1168f6522f45d52438f23d7a99a73b45a5b0b3ff7dc914567d1f664c32a83f488e820346f849cff560adef1f273f283ccce726ee5dda8faa45a757973c7ec472751853dc562f7ffcb332e8659482da27f1c643522a4643506e9d9ebb8f7c0956e364a4e1345993245e43125f0040f5b3d53e67d7e83b87dbf1399ed428d04a105419f00e88411535d1cb312e473c856dbc502bd381ae4f91bb14231f677bb909155a2bab73c5080ec822309063dcf11b70349bb935ac7b372037e4552476b3b41d13b2d216520cd7a4f00eadca5e32915d4083cef205ddbe10e5c1f87348667e36a6f7b3c16d154244dbd74a8ea3626c025d24285b1fe82780988c23b3e9ade162498653d938f423c004a24b457dc5871aa291648f91097b4b86ffe5b98eeaf0bce2cc4845a846a0a741324b22119259a3a937695150b070edd691597c14b234110a7c5b82eecbbfe27dc3f9fbb1866fc133ae382533f3832c35304c1db1e63f5a1e5fbba5823572ff11a84109dcbd5e97e3c104e175ab258ffee170bb0182848036815a5d51a5fbac2c3c6a41ac1ca5a1885c3c60333f5fcf96ae03e9ffd479dd9fcd631c54ceb9f41aea4361f30fee1e76809ee9faf31fcc55f86e59d72040dc42f6566e2f45fe62eba1691ba86722f2a1692660631f33fc658dcead1a90968ea4f5e974a38986f43a060b401f1d7bd33565fc825eda32857295c8876ce5b48525a71159d28b15952bd6cd46927c028499edc0c71c6fd2bf42acae39ff9f88f45390f3b78ccfec3802200fda30d57c4b5a35bbfd3c44bde0ff91a08a7057f6602ede684e9d386526920d5b8285a4d756756266c683ea2b8c1295fc79572cd14555be0e02ca061b83bc1700d413e11b9638b279f43ee5dba4c9dcb7bc80f2a9f8199f68adf54516201db113fc2c82b86285031d6e7aa0e601292211685077fa1e99d90f0d410a6c3f0d21b6dcc503bd485742cdff40fae189e2d8cecf752d55140180e2bee3eeb9d03d97388a61dd20bd6e85887bcd249aef40c16ff57b34bb060e851c5f2cde8ebb476e05baae1988a7e8193fa667d0425cd904ba3cd0f68efda7af0e56d6d0de85eef4c1eb61b16cad24e0f51d1e5fc7b9ed94e14730df039fe5d2d5f2c9bb9cd226dfa2d55a449a18f959f1f3c5712ea02716bb43b47546cb56f43a93229436bcdf7416d5b33bc457c2b380ab07d3895265156f5e609e0d72e4b745bb8877d552096a36c9edc0b3be568a187ffb83a23354c2b3f065e6e81e5c00cc68c4673de493513fc136fb9dcef48211df39f6c3c16a6f6044f66648ad850f0e0d6f0aa20fb320ceb84eed296e0df36f42ab246fd894a0f717c54c268dd8358c0129746334df233e5802b7dd9f326dd93586c986c92cff2dccd2005cb30d9afd99c22fe7b121f421d172200520aff31b64e94e7af0c9ffb199d74997ffd0b44d65acc49d39852472ec0c99385cc74c1c121c5720956561042ce482573b9e9498c3e7f15920ee8dfc3496460bc5c8631402c093e0db82977eb3c4bfac4940a1fc0c61f222a785d3db02ed5d9866f1488cf04f57d6e9cac5ba0344dfa1b36677ddd30137714c4edfc5a0f55536fd00e763bc2a188533a2d282386836505c618b4dadea28f2cf1fb591e6025c4bf53afc5761bc8fb7863742b91bf13681603278f1fd0f1557d910ff670ccc03c8abef16d505e8ae9ee0a4c690d01824394a66e00395599eec82a79e53e4323a72e762890f022c67802494ba6ed5bd1f0efebb37605fccce9f9e13a13f705856c39af3640f8228fa1e61ec9f2332c1eecf83164d4fe0fe817d359ae7acadf795c0be30924ebff2c37dc1e1a52e566943074531798d41352035892418bd81b48dac687abd9780b2f30b421eecd57ba75d9142c5c95859e731ed0c74a8678fdbab6fb0202f106cab0e85d8bdd16f4013fecf7550c6d5426bd116712be009ee44b815403f559f5721c683b99cadbeffccfbb1032c206681606543e72e704aaf60f6e1ff5eb3113f7366c7f65151e1d555d0261cf7d832e2bcc3a260519a4f12ef46ce36b4aa883094c45b0c38555a0f194ebf8ce4239bbb27c76c1655b4117a80f2c633d48236ee7f76e8c4edbae887dc6e1c34b2c4df45caa1a4e68d25e103dfc6ceeac475bcaeea266d47e13f6a6a6d85fcfa3af9c0d76461ab78b4591b9385a51ef87c86a49a9df1aa17407e2df1b184d23223e9d647fd07509f48d10d175ef2a03d6aa8364eff81d25a1bfa3e1194990ccd4bdb4d9b033d4524a21e5f83e681d67848d258add97e6b9730bd778b2981dfc4ffde80665844c2c46e12a1c3d301808330f34908cacd38a1ae2015bba174b0b5e9c89ae508578cda45ed2710d2f9d3c09687f765621cc4bb1f3255b7f463066aa270b5c23b0e5b40da726763650f4230a5acb696f3d3b787ca41797ac0c3979753ed644243d44ddc82abc311921fc6eea6a6fdf0c25360eb07c8b8d96fdfeaa8c7737ef8fad80f85633d8b9f71aff6b8992f24f9f8ca72ea77a9e1897d5a715f8fdc63808e19717a149fdb19d7281b524c4863a9d1a6f15e6cef0614094590ff17e21d1ebeee1e3c362ddefab7a68934b33f2efc8f33c12938508ebfc0264678dfd5715ab4996e0a5e745075a35a1c49994ddfec15e4b9fe987dcf17c32c4a6ae68105a4cc9d3372db41388c9c5506ca5847cc239f7e88afe9a4e0048e2a30b79d352997fe9e97c70e57c41597141e340183b1ec6fc826f7b364ba6bea2253b10081d54c30803fca6ee031c3890c4abf1418752fdae819fc4b99595a764c4c33f3374a3640571165a9e13120dc1dec0d6f9a2019a438e4629c53b49f72a77c2ec4bb561bf2a13cece5f68cecab0cebcd111ea7866f1b1abf9db8b20273c3ff45a32767d5431a2d45dafb6cc14a882b0e12e4ffa3975c9716638e0b718007d53006611d768a5517116af5f745b0d7de262839a5ec9a073a39cb450e0f53cae67279261179fb388de4a0274e29733de78067cd05beaae7b443200b4bbecafeb23360c49d61ccf46ffef765e58f1a2433b22946287da5187dffc088dc57fe709ce1e1d5a37c2ab925e6f2291a213cfe59ce726cefe2ee963d4f01a1bf8bc3bcac009b8a7cd22f5acaee2a79ee6e4a8cd220e2792acc53045a656abac5f92e15df2ee709372b667dbd08722137f587b9858511b882e387fb510577372edcc6315c4f10ab08ced682eb5ce8fb756e4cb4d7239bf731cbb40e49ff166db1d9550499d01bdc1b88e613123a2234d0614ae3d09bcad3513eb2b10b19bd1edb14595e419427471bf5570647e11122608d748fe0f65ef394331d850f8e2b01444d83c2fcf86b0d98173dc5879864b5755d8fb9d941f0ffa32f11c478e84791ce0d303830f68e65c22d03326762ad3f68f5d12a65c86c6e75737be1f4b25c207d017524e843ed9335b7d4cf4ab29016a5abcbddb8cf61643c44abfe453d5b38c379d02ea16d3ad4de2af64fa9e9809f9ec9d3187e2501663f11a0bf14b05c691f68c5cb848503983989084121addccb11b8da698ae04bc00bfb579117133bbc44b5a011ac3365ebd9e03e3fe3281bf38aac50ff0e1777f37efb3473339d57f73c0d7c2ece95b5212546f19aebedb4488f51e8c4cdde36cc39a5dbb5c7821c5b8e8b801f8bb71232f5c25b3bf47836fdb11f5c61dc050effb54ade56f076b5347b0e0f47abce3894ea19d034fe32c8728f05139dcd9c78fdb1f66b213bc34c369becdf8aadad6320c5b3cb42f729fa86731c911850b3c1e3f988bae585c77ac409f4c4db50aed1a2fe03c0fedf34ffebb973ae0c95da225e6189f580634df0f8ae99af478537db738b5397d284254e3171ae48e01b14123219a2a6f007b3b1ca88a74f524f64088099ecc5f75a637890037b940d5ef8d8e675f4c152ae6d822583d5b610c58364b596ca071d03999fe20343babfed2d6f2427a2fe74a9283b8faa63a7401902f457948ea36e16a59312400424b19304fdf89fbd6799a39e5c313127603ee232624b54a2342a4502824c76e660762e4f9670e0017142ee26ddcf3739c7baa1bf45b72f86fff4f4aee8380ed4c4f40e3c1cdfdd9369002e77638a57cab032503471ef437f59445b98c0aa47627e3db815bea20b7a575ea657e493a79acf12767010f0ea19dd2245f97a4fb90de8664f167f0cddfdff016da7966c7d1cd3abc760b67fb1129ab929d7a10af23f6bfcacbe372231182b8bbe2b27db1316ab86f6e5aaaee4725cd03692bb6cee4c88ed98dd423054a6097f47b6960592511cbaf43cd1ca7d33ca9cff923d125146a11b61cf4e64a6c2457a339a2e301a98cf19de57849213eddbc1fcd2b8ae16ce9ebf613d73fc2e704c4b6dc6dab463fcc595f8cf6b333eb179294580683cb658a6336fca0e3d3a004cc51c9040ad50625a8ee3e8cb8b6c353fb1b5214b3f6b68648a291c065f49363e20557ff838602960dd9014d6ecbee53bb22d5bacbf0daa792867e2c7e10f9e196472240782bd3cfc81e6d2aa744cf4947e3dfd3d63745ae39889140efd06985649ef4eda4070059abffb920a446557c618e9cd540fb356f1cd5da9d6ed274059f2a3931e0e5541a71cc5c8851b3804739fae8693d48351e320bed4e38f1760c1f54a835b7554486f443f474fcbb6bcb23d6ae5ce9bdbeb70e0cf6a70a581bf1ce39db46988df9c4be23d1831cb9ee23c430140d32b1460679094fdaf1e297a03e84ee25a114f5b6a27542155c78229c2540c5f77c6d3e48e79ed2a997ee553152b4d62dc38d74c9a2bba1bd8f4c0a03cc263bf1d3474033eec2f4a7b2c5643530c199c4228a179759f42efa211aa65ecb6ff64cf85ff380c471761e371d04a0bd0c031382201388d3b0b27bb68fcbafe38d631896c9f5e50d88d1f5b809ec141df8c219a9aa14215208725f1ef012d14e7ac7f3968b11b02aa583698f53d8c0b091d7ae3924674008e650d50a8468f2ec3e78206c3ee8904e1c180a8840b89784be3e3193b3366acc1c134cc6bc0fee9a9d24d596a1f4113de6e04a0d29ee0fcadc02f4f4d639ac3bb5a519598c7a7bcb834ef7c9c9fda0ed2f2ebb0711f52271b84e6e5ae8f49fb443a66c2b41d69a096311c623b69896e75169fb91a66ce3e10495e4974566d727fbf152547e9680371cb64d7c2ab8f8ba1a0600540301b310efbf73108edc774edda143579035e29f4b98cbb4a24fdde3b0823f1078632db31e5985a41ba896de3dfc576d04ae9cb25347660bf09fdd3f0b8d444eb7665e9dcb703e0cd0a749380b15872bf61e2aaa91749a0f28226f141b90310abcfe2fd96c1fb8ead7056aafd1d978c3add1750b9bdaef2eb2b0fc894b11d576adaf1dacc0c3514d9dd9d4926ee4dccd75b9ec235ffaa2419d3b8db8928d6c420dfa2138d1b98db499f19e7a5d5e24b6420eafc65ba74dc6eebc2d21e41867c9c61d256af1539cb8619fe74576da5d428b1ed2a2cebe60175a00c9f44da128f01f5b119899fb2143bb9278b6e07a4de1297c18a77920808305365ae324b5cc0ba4b5200d06a0257aef6ce29e6bad82e97558af3d69ffe6f575b34c9dc7742a4e953a6093dc3a76788d3c5d3440eb14bff6595c80ec513cd6256c9b7a7ddc940650439fca782064a737691ef51f72b2631a72773b29fbe9c2ebf52c1b2b8bbef634a50d20722588261644e709036eed163dba9d2ce427a3f68bb20b82efc7bfc7dd19d30216b89693ae85bb435c15a01ca7dd85c7bc68ead41e67337abd92b1aa23e4ac1e2b9bd1109bc7bdb3cc03f3050dc780e3dc7bfd57aa5fb3823019ed2593e8c610314f2ea6dd64cf189782c269e0dfd942a7ace5a9f776c33dd6eb52584cd325c4fb58e5cfc646eb683fada58eee886aab8a702d22873c67830309d6fca7ca2cfc6e057a5ba0ee3e8f6377789ae9c2dfe763abb41750d3012359f5c1d45ca45288f192b8d09c2810dbe9e13e68dce26061c6df012e784374d25eb3733df35d9429e190f3d0f9cb5fbb842ecdad199df87fce50e64302f36fc9eb4e6001a4cf2f2b69893f22fce2855321c2ffe3f44ca81e9a742d37386823884cf82ce83e830916d46552a6287ad4e5c655fb5639453780696d1293be20caa09e0718a80d333218983f7d0066ce2069c51beff485d27d5d2e0582235ce27319560fe2bf4979100d4c46b44b468e8b2ca790e35a2d909eb456311b7572abbf8343b402e4b379b80d7ab9bbb60e9b88bab88625e691c77d085a9084c4f161480da38d469db7feb49ed5cc65898f1d23305ed30a162ea28d0823e7544a843f5322d565f3a89edae3d5159fd31fbbb9e828d46d61b3302f62d31e696dd17991eafd6c649eceeca0fcc282c75f8948f5ec436a42146065359c0250c179857be2275cae697b1486a34028e3e5a082912f187d5331e4224f29dc35ec8cf0c397d72472cc006d00bd160e03c43b52919f57a19b9eab6e1bf17f3fce4ce4c172eb6687f5233a08512aedcfa735cb66967dec0757367dcfc71c1060bade939d24295f8069d5e766d4d64fb3e8f68fa031b56e6c290392ea9424815f3a6fdc26c08392a05ea68f6bf6bab7dc1f9d19070a9807f8ed6349dabcaf791a67f7f9a021f12299178442bb15c3449877a7b1508588f4948622aa0d98d76df81fb9a26d1bfcaca37ed896d409aed197c8f32fa92218523f96dc24bca6419f5598e35308389928f671742d9e67ca71d2e15f4404beb20434862ead87c4166434875d57316730efd63302c0665894d7f49685aaa87ea6457387501c40b856a41247118f3a876470bfac5edc597d19525cbb44aa075deb606601a3637b30d8e0e8543f900c64fe89d30de3c83357d28b5ae8863b0e7bce8c0e31c9e8a061ea4b802ef09a3c6b902a22e9d35d7f348491ab89de2239e1a18073fa681132db2c9b464c126fa9bb7b87c267a930d6a89d2019a0d793898ac20605170a35722c554aae9d69943484a0a7a70f466d45c0ec2c714f2dc922906fd4a68eeb3a4ed1bac8acc6ec2c1cda0b5aaeb0401840d79b26f44fd0768b9a33d43974fad8378645989a4db03607b1b27d47fbd622d4cbb4142bf86a229e38f41be19721cd685c4fc15634113959e00af431e208754d778fb7b5db8f1d1410888daacaa478b0dff29ef610233e74da791f3ebff268fa2767fdbb582c817e79837b70d253e9520a39856faa8fe8fbf7de9ee07fe99ba7e3dcbcb4452f170f041d6b0be9d67c4ebff8b6b261239dff23329d1e09c8352bef25e91f6d4d36ecda8bb0369a3810a0a3d57855a1a33751fdf3f8d5ce1d806fde29f158e7349340dc471e5e5ac6de6550a93b643007b138d778c17c2eea191154f5c6f13b0534b823e921aab9fc902446170585cb5fded702dde50a9149e520bfe34dd2544e21cbba02b92993580e8d3f17774399627198cb9cfd265af605c88993c279eeebd122c00c8d78d488ac9740b522c305fb6f3c53fb30f3ce757b576808ace3126280a59444eaa77ee18cdd62f62d644a579e4e499339743274745f1ce73040ea97bd3b68bdb35283e6b254c18ac27cb3d79507480a99a6d8ea2eb9930623dfb081ba1b9aa02c7b16e9623dac752841154a160d47f19674157251b6a552b71d241134c6aedb260110ab71539652d52046251377a1bbc8048d3b287495702ad7e2483a8cecc7fa6ef881fe60064f3be181b6b948eb59cc38338025e20d0cde8422a3ef89b66880b49a959a615cc302c38df4fa29105dc5eb6d84144d3ce639f436d83b041ffca42c96c31661f3a6bc4068e7a9f219368b66476f4894eca4b69367f523d423598ab088c73dbfb8d99f5bcc1cc02808dd6868f100a7f93be6a38e41da609e86f396051526e4792866d35818379fd52da904bdffbe6c1d2a14163e6f20c055ca7932e15ac356ee9886bb4343af7bdd238498925894f259199a9d85d626d12279698b12bb9845f1cd0ba962a6ca731ced2ff6a924114ba2eb661af588c7ae48c728c3536ea64f30695ad97b5b4fd5333c5854aeab8775da0651fcdb2ea23e72cf53636ea5db154f507b0a44c9ba3051a5175bbe21d142862135358ea3b1f4fa03544e8708bb1158cb91386d4a5621c08e3fe43ff82072461bd0a42ac2f64169d74f4da815d168c51754f224c25157cd4441006384708c0563225f68d54efabd222e0b4a862e2ce068db0c1a5a65c2e1296ac2f4880079c814e555e9a792c5e7a869a7e81027b0c14196123d3df25ffdc26d281061e1e0e097175f9183de51f2a8210f16d74967cfe73001fb81591c3a452db8400b5c2f562e838c820c95b78f440fdc72420568f049881f8eb7670c1e4a57bf8a663f0433dcbd17359589660fb681a5c06bca9d102ef17607a44ce0c7c69632f81b8f47fd03611c61f1c3969cc9d4bc8c7228ee507fc18707c9f559f9804c3a5af6e0b94cc20a09b11496d18a329b17b80d989e8577bda2d78ec011aaab0a487e663e55700728485d0d1cd8e6f0d4315f20b4c538f5b859a34f09ff21647cd4365f406a05fed5ecf5d814a9e7c9c7c66f32f3ad86d2b23b50de8f7a0386e00623f557b40deb76ec0200f5b85d892ac9acec40f2ff2c9d962c77d8657a666165c325635300d51f9a59f826f4877843e7c8b8a33110d3ff6d18d71fd91a9cb59dbffaf7122dac081c9aeaff4bf8cd5f1ce91667d6ff3700f4d2c9c22e8c2c2a64e8919303c4461e1f853c6d3fb80d7fff6ae345f0bcc3f2945187fd404c44bdc381adec03ae621225df03760db5c2e86a7d028370e4fc56cb08145cc688da4aed3da3344dfa05dab5f6d839e188f21a805ff8a6cd95be7f91c3a86517e9482f1aeb4c7d11ca29c61eb6ec0ce6ce3397b2dd7d611dacfe86d9ce33fa8ced947e270d938598ee378e2fc8bdb7bb782d2ca7d36d7b5f7e7ba9aebfe6d90b30be1a4e72448a2d43d3a4b83d0dcc97c114b610d335782926b25b8af39c5fccf09651b908d064a42ccb9d7feb55ad6a55bfdc68dc70cf7789f4afbe97d03135d3ec345df0d44caf3ab42c90e31c441f10e544e3eb04c1537d53aeac441a392a2ce66c8732be5a1c0c3c3232378740b6af61cf90fc35485964183d3b989ad99b562e6cfeca0fa57172d6f906d31f72ef4fe3dccb00849432b0a2c16fbd9c1b99e0db2e0e9eb827b276f03d02ccdece913cb1148b0eee74a294b900741cb8911a238c095d8693c319430729286b4ae2f3bf1cdeb8c8bdf5c9206107ddcb3c2001b03f713ee23ee11e46dc8b36b1856184204964940a48da0467de0453d2d311ca01ec2bcf1ad1bae5900d18b79035f186d4480581900f3a69cedd93409b5ee4e8ca480deb4c7855aaa84c67980b08bf66c96f27811c85cde06189301db748e47e02075858802eabe46f8af10e3c749ed463a96a6065f8d806e01a25a8c9aa356ccfc767036155bfb1c4525672c67a6b6ae4e6138ef1e90de311a3960dbcae5b366516a4866701fdec2f1659dab7e5cb1b5ab9c2c39ad1c23b6f1229c35600c7303b01a5f3dc418a1f195d44dc0e336e198d62cb308bcda50c495e1b828a78abdf83ce88352b5384603ba6e2df66bdf199c9be6b9cc087be14fcd8b70cb81630fd10d307370342b8f619284cb60cb8fdb898227fc6b02e906ecbc09757efadd50a0d1ed17641c27dcf4e289efbe2ddcfb0f1395f68d56b3f18940aad59928255f9154d297d4e9c58741a0de06e9df01897276c11fca2e8abf977c0134f5e04253dc613f9a9b182d850a9aaad36139ec5ae56648e15bbb35d21facd9cea369d8cc9cd8b2f76ce255d4d62c3c5f78df15d83086a0dce96d64b5a1f7c65ab85b965726c46ee3b6b8be2c86e6c2bdcaa4281d0add4a8e6910b59285ac67b262d89bb0c62efae35ada987a104e4180407c0f37bcecc6965c8408464dc99399b89a706ce1d083f3ac75583f1e4d98313481dd2578e58570dc3ac69b13b8fc6052d79f082f12abda8716d1a942cbab552f5f62c19944b1ba57b3081f013ba1da4830e89e5eb71da5e3780babfbbe5179541e87703d9f9ad199a063b2c917798f02424feb55e9152f1fa2bd144cb7ad594e27cc9f6257cc730a07ae9c7804af04e11b4e73481ae617855fceef33c47b53bc63834ae5c3c5f59a210210163ff4f12c108534f6f6e05717adcb786313797e4e6b79be408ff28c6dd9a2bf9cea26132999247447af5cbfb8c798e3767974e709c7bf2418b92b341dd50980faa4c739cf6f89e994bba45f9dfac396600d39ed199f7611f8f59330a525ae393c376fb52824db11011c0523c9ed1e1aec1fc6a20d3c7eb3becb0e4d07240c9d3c84a2d0c14e0a4c24eefbd7ff6ee9e2b5611e2d8bc77cc2d7afd4a933f7a98e4a65ddd81227f747bf913827bb4410db64f97051d32598f969f6565d84654455091a07d24748f4d27934691973e256613296a851357040c52847fa9c3846d3112700b7494358fccfbb757cb20b00f9d21e7192a64535978f3b7906eb88ad261aa61e693532c9c5efb426c3e3380998753c0471601b4ef1b7dff20ceb19cd8143d949ad36a0b0bfb7da2ec066190069995d596385d16e1747005ee1e39be8d61743686c8da3f3a4e0c92cbc40d917327806379f7ebe408b140498ed0f5d6d5decbdb16778d9271106b3ef40de4a7c16879f4f08b218102127f74e8b3e11e65011f2b81e443ed3a79856846641e0030eb5fe44540022a290202a73f432ea95fbed17eb5086fbf976e771d0ec969ff918039e9182668da0415294d7d1e1723f3a311a1222417f48702b9569a2d775101c3d8a7c2b65225b3f6ec9bf11b54d48dab9e04252636dd1addc584247a235b1685ec50083a82c99a697aaeb3898633d3c70e225946dca65155a62ff19fe816ffd3415df9f296fb0c6cd187ecb2ee9170797835551d304ae95617ef456fff5aff54443762974fa40902c0f759be1c8ca343e3cf05ab2e1023483f9afc162577e1b661e0ef92cbc7f873ae387dec1651b082f4dff3d9c16a68f212551fde9b32b82ac9090cd37af15813284eb0551de913a320bfbab92d519d8bcac88d38354eac8f9a0d1f14480113aead8e231b56aa7206e1188099f3b8ccf92fb6aa6d55ad2dd8dece8cf28316ccd78a103ab643d6986ce86438fcbd79c1831814a3067cda4149a677143292c1eb664fe953328f4d2f6a75a4c877bbc5b208383f8b47b4799849a8ad019300ad3d5e6dc35e8a15369fa3c6b7f05c18abb4ec16219baf191c0732238a65d72c2eece8de203d5c480f2cc3072ee3b04fce04d33869618366b8043431c70ec2d8951f96f5cd0f3467bd04d630d6e19fcf4e125f65e302add4d5e25a0d2c6cfce104124921ba08c299e9abb6b5d98f00cde04246d629461d4178661c9fc62d3367415ba7a77e3dbc7c83acb10fc56214a8f27f4d822262c2f3714c93cdb3aea4247f73b2cea746601594f9ff21b69e6ccc0b5ba696c2c086f49b50c64425565dd4696fdd3d71e8de2ef8ea66e15b6d7900456ebac906f07813b741de873c3696ebf51c7fbf7880d3b039cf9bcc22f7c6c94af71e668bda636c041c497a9e71a8cc76854939f00a80d448c82c3d429e89c0d4a5e240d0f36202f6debc8ffb7a92326a6892f20112b7328448e8b5eb279b260476257d702b0d5ab1a7415dea2a1e000a432a2466db9d40a07475176bd25f087510529650416f250eda8d8c0de35e51fc487ab9abf35169ad2240e8dc21139bf17fdb5f88d2b28774760f0041b3e6a2607e492778eb1a96c195c5527eed557a787545164c13e4524958c22da27ff3bc62dbae1fa33fdc2c7e51968a441582ceeeb895b051df03da6b8daf322b0c3cb0799556b8164405cc04eb615dfed2ec452da99b26b9ad8dbc9504aca0ad5b834a2fb7f9a828824c53794ec2eea6afe0816c80c2f1d26e66801d473d568d5b333ed731c00cb3f5159b3a7f1bcf6c246c3c91b1b4f354765fe82851a226b68930196155d8ff1d60c71a2fb08d9c7c3d5a3dac6be63459d743b2471b5c3fc4d4762e678614d241ba95bece12a599eeca3fa3e69277ca8a8018d74f00d3a7734d0a559e6e07a1a705add129af825c02b61e20a047e5001c50c7686fb3a5b4439005a8dbd8611dc99035362aab297904dd6ab1c9a55790684e7deec6f9669ec59e784463b7945f5a5d9c171826a3470e282612dfbc083f1e07fbac920ed7f320a249b0d1b60a9312a79e0bbdc9e13f26a2d1b628164fe1af321426d6d1149d31c493029df8a68232c589aaadf84ac0ca07686c15f3007670ce135c6b4f6b0672d84029f073026260f3a28b953d7196a46735ce2adb1f58834f9492eee5080d8abaf4ac68eb917e65f71df26f25dbc644fb180f0614c3e67e99c7c1aff7fdcb06b03bcde7ecf277572beba459c6f6bb60607d14139405cb3d9416ea4811149d5c383087be42cebf717c585c6df0d74f6b643a16b6215cfd166fd53b33c1c91497eff3bb7d463e429bf024e0b3cefa810cfcfd8fe67609b77998697463a77e9ae29f524e21d033bc84f96463e2675d9c70cd5af52c6987fbfa16720574c80c96639192800360fff4dcff0a680d447cc349a58e78c5809d0e1bdecaeb322349ee71a7f07c4fc622c4b910934da51e6c56175a1a2ee7680b8c26e2cdd458bf4b8e7dafb0d480a89612ea8676d514c476e820c196f03062b18021bd760f8c5e5b2666d1925a9a2031df872e5a229d44022092ff96ed2fa9824162c1c677224a0c6f1604d3e7a26a62e620af8e424bc603c990739d39ab9c22d65d4d755cb4920acda30b662205fdeab138ec639d471bab7e8203a329ac0bc375ffdc3c3fe791d6dca21d4806d38e646a0c101b82e1bd078038cf65b321dc4af1ef5ac85c0a57f17cfe6cb808c87abcafc5cf699af48a41fc64d8780f7a2e74b44e860d2f743d39d8c8b56ea68e337085b66754e869ea1e85849e27990931c3f68fefa84e45960d00d41b06da260cd87d65421776064b621087e6d98fe7b534210c7027be93490408fa0b51b88c8e0326bdedf2672bc0de17e795f4ebbe00db444b7291a35ade60df48f8be8354eecc88b4088885538a8bfd29cde0f81eaf624591dc4627cdfd04a27acc08c30954d76ed1a9504e35d9d5e0da19d9a5e187369a93f60f564f3233dfde4b49e3d6ab148e485f05f0d885f6fe2b6376f9d67ce449d271f896018621788968ee47e4e274264c52b79b444fd9600170b8acaf9d87ffec521ecd446a30baad7e8f758f279608ed8bc39242b9db34f6ffc19498703445a6cbc28bc1f3c9ee66248a6d7e6a93ba6baaf9a79a4e1cc3cb14909656d6f22dbf307c87e3777a2088f4693b59c3fb399aa33cca8ecc6046432dc958022625680cabb678a93c8e221872104ec32de279f30ad637bff7bab23134329c1dbe41d84d3053ea2723ff00c9c04a7584528e25e13a0f20faa48581fbb11f4e8081acce0b8b20c51f9049793766b55f8637ae5b53da3b784158f9958d72da76f92d1f6ac788a7a0430d98849f4c3572f8c210c2183420c796880f4adae42b9412a989ebfb901b181a66eb7033ee16f063b7a2060e1dc64446a80c2c22405626ce8510f663052fef7e44f5d46d4f3378bd2d2860e71073344ef8354e8fcd2fb561222f58b41f977f2bcbd4bfaacf66bcc6b274284fc51f55ab0d80f0c565d347cc0cac9cb331be740cc3041bd87f2b06d1857a61479e6e6151ef1ed4c1330c0e6bf185b528c03c82142ed3a3d6edd5a2660a17b66beae81f3df5914602b32e24f8a1a67b6c41430da36b27d0123c63b140f0ffc9e72d1f3d4ec0d796d74f7f8a3627176ae95f42d45f06636fb8f45d3508eeccb987a53d31bf201d331d7249ac25913290790a32947de6638f9cf01758bf71905cf0eec524fd17aabc2107de89efd46319a6bbee2a2e331964ef82fc967009b8d3e280db38c71797d8b03f7cf95fe4b970ca6ef8443a3f16be22e337a28bc483710f6825dcabfb29893e55c791d55c02d8f2ad10e40b185ff3f6d845fce751f93b0d9976eb174be3f24b8b1a6c9f83fda4f20f03056ff8fac7b4562fbe41e26e0eeccf980dcf8f1a0cdd3d25f78141d7e49e00141068fc63d142708a9b1736556621c6c0ec2693f367f4dbbcecd8deeffc398c202fcffc30ac75f6b327fc2dceb8683fef33482eadc77304adc8749159b7491e1e119e6dfe7ce9353f41a90d3327f92780d81cfa833c666187d07a28d3cdeabe6882e969af7a622cc809101ebb5a69b0c9e454a888678a572972050e41373d3e5f2cc8411d681ea5f18edc332d052fda78bf32158ac66df8e9127b954fd9e06e01a5ac0ee8d1eb3d28e1add3fd35ee9af3742e00f70de2f1dabbfbb02aaffb3f8f31583ad496130a36ae9aff37c5b08274844b61ef534729fde860d45ce2c9cd859f24a3d2b1b69f91f43b8fdbbf25e6aa4b49fb81f8a6635109b692486ff9b9f3ae20a37e2f054151a0c6b24b2d1f1c6312a617fe8cc0ebb089bdcc61f6aa2e3c5bf8ec2eb1ef47135abf75620b4a30c77b4310ed959e6a26294cd6eecaac4fec10920dff8f5ac755e2f2d4a78120f63b5ba919e01e2a5c3e9c89f903f90bb0ea60eaf3b789471454e82988871bffb227ff309d515c4f680fbffafdf61b38ec6cf2e9cb11d114e06edc33af03eef5221bd9f7317f47fe44db378720487aebd04632dfee0cecb5d406bb9e371444a59f39e077cf52b68d07fa2d61a25e0f9f1f3b25e3d659d317fdc85e2817a9713fc806d98cd17321b41765c8773c7f7df74d913349fc0493de8bd5f96b020477f6cff60144c56632ec92b6f560dfac2c818dde4056730deb906be530f7659824ee04fe21c74408ce6518f5a4ddc2dfddedcd48d6190f88f6ef91ffd373956c94d32720be0b0cccbb239c7ce2cd0a325e5c019c47a392be3b40a6eca482c1087641ecbe25c99da1a38c90cc06a5277bed9812d1f6203c6220b02c656f3b8f93c2edb3b1374b433ca5ee487054b5cfc7c56e912d7df504a8a810f2d3fb1f573ca523c7cd22520c6bebfb48addaf2ce762f90796a8f8fd19a52baebee12c95af201f567e62f3e72dd53c9afbdfa0db3fef247a41128d57920404ec95e30bf2f86ec7ac7aa208a7e6f30eedb9f77b8c1517333cef0d2a1efe933b867fe7fd9156d5f82580817becb9cb953f1b286849de139f52a94e9e532c1690a8f285f6b6bd6cf5daeee005a90e973f149d6c64666d95089dce6e60f64a71ab091f09255d3de31b5f7d4de0c3d824079002ad8f71ff73c43b147abe90e61de33b4a1f39351f95f3590146f41c784f58af229e75edd7740325c15c0326bf72df10e34552d7e81fba2b9f8bafda56327877f31c0e9b1129a85aec6e8c1b81c8ceff275557c762eaff5fe2533e77143f202a06ce755b8de3bb854e69d9aa9a7655a9fbb186540bfcff635ddb94dbcf035dfbe3dfb6328509eb810757d77d7f68ff9ee389dbee7d166666f447e3d9b4791e4b9a233e7af586607ef0fd7e9d3af3965cbbff426047f201e1fbf7511de162ce2060fe97430b7d8150512da9874be654e01f1d123d5d3fd43f9946e8ec14bcc2410353c305082bf6c1bbd02e425b1482ab7340f4ff01e1c01a5e7724003b1378695c73def73684c1c3fa8f01822286ad1026911f94578048c3d8e1c0e79e6d4365a6c814af243a08393909cf3e1f88ebba3e640db08fdc382d06398cbf20f06131293808f51d2a3eb893623802110a7f7cf60a7cc751ad08a9c1d1ca73a66700073ce4548b1c84861e70101cbc1145797cd01f4887e1400250561c86930d3f39ba197668b10b1e54f5eb8d05cb1b4bbc4cdb9b2a96720a069ee6a3cc752e90f9f4f86c872d696901fcec783f7e5df38558f0871b22a8adefbfb2f6857e09b90e7e9504dff94a825a5610ee5c4a78f0a067844e901716f8b90b18a54b610e4c483c3da6f6c1eae68968940386a448bb128d00d37671b958afc53f5df4b2ed5de154d73f14e8bf02edb44a66388d440ae1dacb50571b63913f4420de17ddea9d0c91994eb7478b43a8b1143eaeee80f15781b94ccfd868f31b1773ea6a22d6cad2622ec370b91c08b27772191f77df01c5bfd954dfbc0c1196efd023da4652c061b17b04d9a1a276aa87403e125997db41715797414ca16b504faf2a21b718b08fa15aa63d7ca13b19ee6ffdafcecb20244d5221e54991ba6832d900f7b1107030ff0fc04b6cd1935604413e10f73d2aa20cd507a9c4ce0e7bcaef7f3f7a8f6b291dd77493de3d17b0f8fcf1567b443d1f470e280162c99fe346b7b717bbea02c5e85839c0f8e1ac1d727b69f8628cbcb3bf1874f9008db553acc415c3d318f3c89e981118fef8bb47913b3aafdf03d613df4dd2e9e8640c22556f5055357dccbb5e69619313267f75493ec5e125c0a00a137d746f39695840df850f92682ff2d7bc16f49f4ecce747425108fc5b9466826b8897869b19c6d2516f8bff8e97dfb893843de3e1277ecbaa7892458e5eb4e803ae620643134a1048af246d0c62243000304b140f51ed01606925a051803a2fa80bf4800c1d6ddba86dcd356d47c9954bc7b22391ffed9d80c8f4cf07504aaeecdefbb8beeb5406c6863d7559fef2d724011aea10b410d3c5f558cbc6cc7cdd0845cd299edb74c264d139e343ff0a0894e2b920d09f4c15e53a8bf9e884d1c1f24547270c179d10733b6542595408a17c4ea1500224b0c6791810010e9948674ca4132090a3e38007d80fc1c726e080165a0d90408e0a0c50210516162001054c00859580154e60071760c21a939a540a25c0c77210c038c41e8d9368e84c692442b928e7008c040e9d206000c663aaa1d3a731d53f85428c063ed6531fd538a1d0034690400150271080994ca7040c004d754a2299262000eb7f4a80082984c0a13f7342001805001540600e9082c28d02a2f0a400854fa6942bc0c6014f38146fca67014e38f4a250a8a2463ca1d49a5740f500431ac0c61e4e9ec74b501ad0c6102154782cd108151b4b5ec078b9006a81050aa82081084040e7010e68400e03525880025038c18412107000120c80334201083000018810420000b0c9089a10518da0c9152bb04123840a0f24d0a052dd3032041d4e2c14273a70920319bce1c40d1c2108b9210032b8918010508238042788434e5f4f54aaaaba6244960d543f1c1184020a00c2151c20aa9052021c201410c20f707e20658145555d618496aa082da9d3a84b95aaf2d228a7022c070239a527959e545515ab2a5185e30320692891648c8a0caeaa0f3ce1c4182f17c0e9e18b4d6c34c9a4aa6c3001c14692aab2b9a492aab2f14165473692545e1e8b95aab2a1c46612495227530f7850997848383ca880f343a6b289640755553db1e60b48caa82a1b1d54674a2947917c508fc6532192a7d1234d19386972704e5f68e1c40e7aec604265250738e0a3aa6c1e71c4860d925313294b55d9dc00914610f194dbaab2b1410d10418491441641c40689aa3a3d9a51c9d425352a89297da90c4f5d937a12c9a7ca9f4c564a23534d8dd2a8787c26992fb6f429d493a92a1b4512a92a342713969f2a5565b304223f55c084a92a9b380ea92a1b43aaaab2a1811d8508a9acf0d41aaaca4605363390811732a82a9b180c22081e54e0e11348555550f0305d18005255367f3c8f97d05841135d903a794f55d9f8d147559d7c485e2c6924b26273829f9fe188aab2e1638f9f47b3d8cfcf9086836bde9696a8eca8aa6cf4b0c9a3aaf0a85a20c71d76e08c443675d8b0808eaab299438eaab289c3068e7f2c541a9aea29302a781275d38efd92182fa61d92ff15d38e25f998c83c8f4f12c9074b0f95946987a59932e5cc992f3c758d69474c8ff7ac99265318d43f9633a5d1cef38c9ce4633a95c4a44ea61e1e4660509664d2f224eaa69daab2798344f2c1724a95c4d82f89a92a9b25dc68a20d36d650438a14d8a461df7e498c0d1a2320917c764adec54b0ae5cf2545a5aa6ccee031954e5850a7a73cdfe5ebc834e6e7e483f23f85299946a3d288c75279928feac8fac840428dce3c1792d75149543fcca719a57cea4b911a95c4388fa37c66b03981195555fd94a8b09a43fdc253d7e0781538ae810aa5c394292dcd94296ec5636543465599600c11cc78a06263ccd460a64bc553d7b431a85843d7006b7835b81a5a0dac86aab211836bf8d36b61a14742878401c6c934b229c11724b0f1a28b1188800b2bb6b0428baaaa40b0c9a2b2232c42c03270810cb82ba88954c50a2bacb0c28aaa0a4b1a91a92a1b2afe4a55d978600afb34904852d82791a2b83490485448242a556503854d074a3eb7aa6c9ea8aa0a041b272a3bdad24455d930f124d3ce935a1a1c1c08808303149b2558530272121189cafdf8e90823aa9218146b69a64c61696030ddd21694e996b658a0f45c4ea6d2880786d273791edf59e35d9ec74b9e720b831d854e4fed9629534edfe383e23195def2984a27d3e934512894258dc8c06081fa6346674a3e584a3ed76ea925c8d1a54eeee5c79aaaa44ede63b7fc5853151860602d32f6893e3f8fc6411f3b62cda786296cde7e6a745263fd4f5565536955d9b88d19077d589a109947c81442468f1572a65cd3fd930a64ca54a81e54f449d51f831af550418d7afc4c89d4c333428d71218c1a939510ca090d70c49400474c081640bd359570c21c91a552a19a154e9806802101104168a0872f8b5455e52914992faef43d349876703000080e06c2441f2f5a7068e06233a6089c1d3d426b707680a84c55556da0c2e9b283aa429d5c7001a74b195595531aad2939972b3344318397aab21153553661aaca06cc97aab2c1808d97aab2a1a1aa6c76ba5455c580aaa252e16ca94085a3e5920a47cb1a58185045a02a41e268e1a2c2d1824385a3a501158e9627154e96412a9c2c27a870b24451e164e9a1c2c922a6c2c9a2800a074b26154e0b6254382d8ca0c269c10a10b680993fa99118d3cec97a952ed6aba050a751952a4ff214983ff9a47cb0a446259f9c92fb99110a5581112807e54f9d5445a9d388e6784e89e6780eca452b80ce805e851cd4fffd296df1d3fb69bef7de7bcf39e79c73ceb9d65a6badb5d618638c31c61863666666665e6cb1c5165b6cb1c5165b6c3129a594524a29638c31c61863eceeeeeeee861042082184f0bdf7de7bef3de79c73ce39e75a6badb5d65a638c31c618638c99999979adb5d65a6b2d96524a29a59432c618638c31c6eeeeeeee6e082184104208df7befbdf7de73ce39e79c73aeb5d65a6bad35c618638c31c69899999979b18c0d9f6b8cbbf06cb101e7853baaaa3abd0b75747ae156382fd850e1bcb0a5c27901860ae78558e1bcc04285f3424e85f3020915ce0b20543816a8a4aa2a2905b0ff24d38e2599b4a41e85a2a2c644fa2a3fa4120d624aa6d1ac2a1b19aaca668b8d960a65dac962bd8a4d0cd58f7331edfc97d48867c4a5aa6cb0cccae64a55554e6caad858b1a9525595a36c9d6066ca64fa02c6456bfebfa04ea61d2b5ea5c7078d09551a394fe964aa3ed407f54fd5dc91c562bfa4c67b50a7ff71520ec9ad18923f983f79e1f9d4169b182e7085062b3b33f485862f5f666872117385862ea11aa8749932e5537ec67b4ca71e2e696038e361bc847934a630241f6bea1261e0f9d4963326d29746674a1366b1820a4eaaaa7283f4c5f383865028efb199c00a9597463ca353458d2c0fcad59c5e0f5565038294aa1a33032a84c684820186e8e329b7a81e94fdaaaadcb089525557aaca068a8d4d55a1dc0458b327931a14cabd8852ee65cde83e8f0fea892699545595729e93090b95f85060ac5789ef515ec57a95f9a5aa2a3b328d799f1dbc8786ea4f5555e5e0a0cd6196d90226746596d9c285ca962f134c687e111386ca4e962d601c65eb57393886a5aaaea44c24300efa54d5134a2649994860f889504f8f4f9922f93d76424d99424764ecb3a6d080e34218a9118d8c4328292f5455354385e3425555382ecc0001d409840a9dbe0704c281182d406002a78541aa6aca14500f150ea8860a07a45355219e510eea040ad95f33ba1eea41d551ea7944a9d1894a55994e5fe6a78a98d1951295934fad26354f7ac083aa229d4eb39a48242a34fc0000365e54303c89801318544efac8c3491d4eb698400eea04b2fea71f10d1a307453c7287163f88a1010658408c54fb21cd1d8ce0f1802756f8a1ca140c948488011b3f086002282c02c58927362048184514e0c749061be0020c1a6488e1864436c053c80c605451d86ca017b1c01195cf151bb0518026f2033e28c3073ea4b803871596e0e243156a6eca68c00b01f0a14281068e045051011f5cf022c67d22924a7ab0440063d4404962470f7404208c3ae69840ece109109040d347984b7ab0810455b0986004253de814c107163cdc8434b0033421988149e4a20136ae1832040598c0a281226c6af00489175ea0012f7d3cf2a65031030d24a006b3013eb021033c305204141458c8f2030f6634ece101a4e741034a2461268e61e2010b002a00440b6496e061042d32b94988d1f34388b323006a78e8f2e3c5135954008a3b5ef83909808b0b5f68c13f1648c4003fa49a103f5250a8a2070e943859f3821e5e8f0c1938b32604511c710618ab8b35674a306585303d50630dcbc11d0d28801c96a8d9644b0cce0658e0a0e68e291f9803071b28434d1494842bde60115013b209d3022643f4a851a18f344ab8704599343d880105b858c28703a459411c86e8c083b7910689338ce8e08e1d17d2840193420d5ac0b0449a9c2a1b1883cb2681f83862a3492224e011890f1a7d6cb2a30604387c80f0e2438082e78c8f0c2200c4102f6484e073001a0af901b5020ba41011c10c26c70f6a2a8c2c4138e2822ab048f9bc800f31291e4c4851f1d9a1104aee20211502240af000192f38800aa40645c2f8f90205b5c5212870801d293f502410bc01e5142608144c64f971439a3d504f769840f5100ae1b4870c1a78e4120ee34445a905484821091227ba02295b58a10490530b9b9cacc82212303bf86013391070021384ec30077334e0411045766802056c68d2011bd0ec5003142e301512c6ecf0802f20104755c8083d90a04c5638296ed0b3c60a1138c01c6084e92122e7912b571c61a5c74b02c4f8e183eca3e78439dc00e20e1c7e302d728507f6e041801ea6327c983be8e0bc60e2818290c6cd105298260a532680e68a34a6022422850edcf08185d20ca034c0874bdc90521757d8800a4c82f8a1b4830c5f0cc9e4cc074a15002385d6c2c989d24d03cc9023093944e071011a4dbc0af0d1c373451804b401852235e0b92508a30555687884873560cc142b500f2069f2e4014f54a24693ec703788a10e4bea2041f1041b208876b88094031a39ccd1840842902430c70660082f3c343d789247064c76026854a0030d34f9e1060c344788f981199a36d080515385242a8c59681800813838e0c50eb8e8d0c8234e62114c0440873320712df40840d0e1074672b4d87083d2610b1127fcc1031a2774206164822a778c116174481825445a5c096404468e2102d8634a24a3940d4c1044105a6614831a878821c60e19a300c4718687316430430483334560f2060cca88b660001674932b5a44681e8fd6648a0044ef111058c0430a41444e8ef8830c086a0c70468f01a4100909741e39e3811d4e5006070b40e28c4bd204190f900190332cb0e1032351ae70e0528209158ee8108278e5a086e8a08d322cb94ce8f0834542413871c91ca1070a4ec08708d7017f0452891321bcf03a60800aca6c608dbf1a27fc01d892467e882c441440123b70f03b83fcb1130645c29b3086cf20569cb0621579c307874011a025c303365c370e19637f26095fd6196bec95b692ea811c75d802b0f07cb082288b1a8343c6d45025864dea08ce5883c58a33acf63811051a328a88a34ef9e1cb64848b3e6a14f6453bd24817d48f49c08420c921825ae180147ec04805087d3418f90011550928e740040f7e5446382677fce183339c085ec7142b2c38814320de813bde1b17f0618de3804202940726927804e4000402a64ce630c3839786081ba87862e60d079099a24224213063c48e182023246086992f5d8c51228b2f929859000cc8cc3c529083900d0a31040d00429184ce28811148a69c2181d00696108109393c720a69e911e26711376e0819808907f2e20132326088163108b001991f3250821b30d6ac81a347065251c4b460660681642006285774baf410460600a005cf4d228e9303204090896924c027072dae182de460023a72d0e18543b44cb1084f0e6e932e3734f04226872a8f9e17cc80fac1010f4312e008ce971b7098e2072d6d5099410f3838d3620a3eb62c1c2840847380225f74b981121b1c1a4141ce0b37c471850c60e8a80115372cd18295352a1080256e1893c41552b8500111dce000107cb05243264294c1810c68941b5ac0a24c0a0e8042f7a0b3813242a8d162c95a002bd34509124c72c21d349429810b1cd041821617b0219146de188171821e3698808a0b0448e3c41836ac7110e8a29253243658c1c191475a50210e1b0680c9086bb45079350c72870cead0c24da00611fc9148046285366a30ad3192a4aac2821aa437e089eaa1a9014a1734502d0748c8f801c30a93c861c612643ea00901200941238790b178a02250420e8020b3b698440d03e8dc31975ce1860d6a4c79610c0b645859ea906293311d00210259bca000798cb9218617f4186207670c04f4d8e48537c800c444d29387a580012e20a60d1b84f1c79a14f010c3812f901062c6042ec46060063d40c019581a11a380285248428d1d50616a408809254b24c121cc09b68c010129e6f0218c0f554cc085115980c26411299186e4028130386c0020073b7a52005308253e7490332a18125492432363e0400318540b25e4808c0f228081c1044b9880073e0618109410c10a54d8d1f9f2071737f8350659c0972cd01000002bd860c79791034e3c6c98407e712834a1025024767ca91010421e35c441c2400bdc30248c381e0f1890828a13c6b809dc8101336b1019610e313c1898c00d4e5010458c06bc4c7200105402e50af502070d0e10050c010a5e92c804120cec0093901731544060061270e1072f0d982948a488157c808647b858811f30f8c10d34a000053d4830c2071040431064048283019030020d5cb82861802d6ba441030244c0850f2052746027110504e18342ac9060478c4b464b4c2145d8510362239042ec7861a78a127784b1481676470062a4b04ca9228b2e82bcb1820beee0e1842e5c68d2c600242659ba94281d8a3851c9a94ba4c1e60617b064922e36a79111d73bc0a58f05f874d173050a5caa5824030be8411907e0526fb0c82272f4e00a171708d9a204450d9e192cf1a14b2421304366063a2c0c6516e96280199ef0c2897879a104339439e1063a9c90099519741031e208125ac0870c3b4083442aa404830c6cb0918584297c583214e12f4853882670c880011406c0820d5810c88042063600021e539cd8c20823acc51677a0b698418404ce40430b1cb6f470d3050ec2b43ab6604193821d58c1018b2d234052870d7df8c0450b212708841213eef8d1e2c5246be838440bd772cae1924ec00936d0f2425d21923970e8428b14218c90e40a191690e5057cfc3101046c6146162c4a50c30a99110a59443896f4f193a3489656c54f76741102cb267e58e1c8203dd860b9c30b451c80a505576089428d34d288522a014b8809488e00a10c1d2c2bc06083d4620947a6247cc8253510a401130e09d8c00506e004319188c10e8b6c42c49319660c4952c06cdecc5162022ca8f0a403571c5963e527062140e34a1a2d3cb103111928b902c40efab8e9020328aecc908045024904122f570e40c602d6a4b1440c5610a96111331d78a1b212461c3c6776eea8aca471648a18448bca0a95397efa10202a2b22a0992402aeaaaa04e2061d293c515555b858573012435555e14980145cb496348d545555e58916a19c3df6782a0421a2e2f8410544041095e830c7114ec4604315834e75811de0e0e440a950279069f42492aa7ab283aa7a02890e9c50c2831b24e28406380c28408593020f52586401154e0a6e54554522f99472a67ccf4f2a852a5268820329005155d50a395358604185147248214c5555554e89c78764aa39395f1af9d43fa19c87c7b4e64539a533a6d3c907f5251369855b1ab5e00205724ea69c1ddfc94999cea890f3a951697473509f323d7d343f8f66052cbc960f0e2dacb5960f0e2ae4904c674a7e32e3001f7260c1cc143339674af575a0a69c520a3522e5f8c97bb0d03095a0c10a25157e4e7e725125fd2637014021070057e0246004a8132807d50fe9c7493da8d1151c54d59347aaea892337a870f0395d9f528afadcb7953a6b3e27e854550e0b279050e1982089990a0445704c4813df042f55856342ac2a1c13722a1344c031a1e2f1293d4e0992543dce8353c2223825e851556abe8453821a23a82a9c120a8053c212550e4e093da9ea2717559c12bc9871a73ff3a9d208a78407e09490003366724afe249389fef8e9e4674a55f5c49042aa2e4f20e08903dc519dcae0204004ef71e12745832785a0bee48852de93432251993205e70007a8aa079c4888509a040d8872068e018ed0020747013823a061ad002c808f69c129c012380558a2aa2ad49aa5030ca038c27680c70d14b03d4fb0b4a1011efc718017cce41148213c58f1820d2689010e29b060c4024d88710a40232b08010bc000810e487ee822820c2051410f60f8827a8290174e552ce1839a03070b3d2d18623e2b8db03e78521488448b0d57a4b0000547941d5830a38c494ee805bce0840f10b0c08b2bc85ca09484103fe06206053d501e3c11a57e11dd30c007bac0410b01e83005060684403004b4240e401820882f42c605974401011606d043420116071821a40f9b1f72269923cd151a30f2020d3f68629015f27001021640418a2d78a012013d0af9621306e88d15c20e7b4c998233802b700620028e0022499d4c948a179866ca94aa824184722f556ae9074505c573a634aaa51f94ff38e96d498dc9924ca61ae2f1298542d6547a52e8e7940ab1e6234af5bc0d7d6a8df384806a3e76cb94290198c2ca183800c8c4420007004fe00080071c00d85055392f582027678a1933392994f7e43c81c11340fe00618d2a890a07041070a4c0c1536bb0796223e589949b1b9c1b35a8e0dc88706e4cc8712a38510ea9aa0a84f2a13851b8b0acf9e044b9555589a970a28c0022915e0dca7358d89293837a1415fb8f12a546644435e555a038112645f241f1808d49957e544b5478cc7fb1a902a6aa2a0954384f0ec1790245054aa1fecc191f140b2817ede03c095569a61317546850cef3831fa04179aaf422356850cef32753cd61314e05e2f9d4962d2493c90bca678b179e4f6d2179c93442fda4d0a03c0cc964f2f224bbe5ab5f9eaa8a8c7d50679c84c52b6ad4e51f0bea7b7e52a84d7caa6a8448463d1e6220075a2d9c3191cc947c4269d098b1a4d1a9859f4753554ff67892071e653429801a3f315063d06aa1a4c674a222948b32c1418e08e55a323904cc9429acf9c0103a7d0f9a6a22913c65b200191858f3b1c01ae7c14403289493d0b8a4a7aa461530133a9942664e20546ac4d38227775495e996b6542124c0921a2a30422577fce953a3108fe9745da89fa69231aaeaff84a5f4684ca90a750291dc0743542010a88e4a4f4af99fcea0489f660ae9d33c2934a5aaaa1128890125825032475599c999221a819220aad4c92442e5984ca9298f3a9d4022948be078a28237aaca927e64835741996e694b979d1ff75255a61dd4db904344fdb897ff1b42fd788f2463940294b98b0c03991656f82ec3fbefbc3184c1a4ce3bb2a58feba30fc86c30c6672b5dd54a48ef1ff365abefcacabc36c3fb82c9edfe3a7dd632edfa2e987c99c678d743968bad1f53fa3bc8efb8368e96f63197e5becea5b58b29743ee6b34c5607a3749612ca3de69390edba7d976c71493da67d86904167ed1bb5318f4919767bfef65a87178f2923bc6c19575e1d63b7602ed9eebebb46b7fcf51dd331e79cddabeed1d6a01d53c2f55c73955f7c095f1d935fed77515e0ba16b8f05f3b947ef7b77dbb2ee8e8e79977c6ec1f66e731fdb1cb3d2d5da2ff7b0d9357b724c5ba13f76ab17840bf28b6332637551d9ec9f63bc704c76575cb265f3556b5dc1b4b6af7494ed6d0e4615cc6ef7ecb57defa874ffc6b4bc1e8dbd58f3c6fc6e4cebb045daf8b2789fda36a6bbcfac6b4dfe92145a36a68416527b57f5065bf535e63387ccdc2cbd34be1af3be05635b8c6dfdaf2998f61fbbee1442c9f845144c766b6cba1aacd01b8b694ccaaf3e946efd7b7a1b8df995996cfc5e5cef689f319b33f96e2baccd3e0b4f30db6ab5516bfd45fa183463b2babe5eaeeefbf22d63b28d9535f6a0b4ab3a19b3a1b3ef99d96e6bb909e673bcae5a6f0cf68d6f8c593d36575b6cd145c74f8c593b56d6287d2f63ad2e8c2925376d909b5973d7c098eeeaed1b2fab4dfa6a2598ed3278ebd3ead66acfbe98f0a98cccaa5cebb66512cc7edb8cd95d12da87ecc5b44cb6c81a93cf167b179352791fb247a15d2f2e3782c9cc0d3d562b61e5b69c08265d0b5a192d74363e7ab998b7c55eed1abcd6b2df622ee7dedd77e9fb1ae36b31dd37c9ceeddf7bc1cf62c258e1bba69039d9d062315f85f241f7bf98cb664330dfad27d99215727fad57ccb51e6d2c36e9a07d4fad98b6417abf6137b375140413b66be15dd72e086ffdc0f4afd1b98eb6b5fe58c57ccbdd257fb1768d36a7623ec7ac5cf4b54a5d6bee81b9646bef1b7d91f57f9c627675f7fef2f8afb96d29e6dff6fc5bd3774f5f47317bd115e1b59056b60fc56c4a6b8cd6b2e516841d98ce645d0e3677cfd2c127a6b3f69b5db6ad7d76d08919f9b5cad42d63fdff9a988df9417ef6b670b1c7c48cecd6db564266d69e5b62d265ed5af1c15f7631a7c47ca6b43246a3b3cd4696c494b542e78c9b35242695cc2d8417dae6cc717b72c4e4afbf6863f2b943e6f6c488c9a47b7c97ae6776b9d59e70605e77b91f7c8f3dc9ec7d52c4741eb9426b217411cafb8488799b5d0d99ad4bbbb67f32c45c0fdd955d7f45d99c7d22c46cb53ebd0fbe5ceeac3f0962bebfadafc1bb96fbe54f8098b197f4e5523a3777e50f26abeeff68b596366eb9c95c4fe582344a7aad645193f9ea8235be73685db59dc96c525aeaff2cbb31db98ccea5ac7d860accc2a6d76c96476bfadbb9163fb6a66c98c9172a55f6b3b771db24a265db5f9dad5b2da2621f3c174f88ed95a1b73cbf5314ae685cb7e7bee32191d7b6c9219e36bd065b4965eaf8e49321f8c1d2dc7d58bb537d68359a93387b759e8cb31331e4cd6ce51deda6cbbb0de48262ff620b3cd9ea34bfe0e26fd77ef83af46ef0a1f92699d5bd436f38bcdadea60c2af9575632eda2b2dcdc164675dcb7ecf3d2f4a7130a5b7abd15bede7daf34766bf8deeb2badcf165eec8fc1ba585f455e776186f30613b499975b390dd161b996d2badb7b5d3afb1b50da65c145206a98d2b767d3598dd6eac94fdbb6dcf3d46e662ce2474ca68748ddf2213beb367df36b5ffcf29325764b5fa5acf79ff6d894cea2eae651fd77fb73644267b2e5d7eb3da6cb9c687ccf8ae8c8fddf5da6d6b6cc864ce312ee8ccaca596310da6a38db9d8d8abb7c2665cc8bcd7bd85ac35dbeabbcc844cc72e5783ab356d7ee6194c5665a4ccdf4296c1a4b1dd05b9be15dd65e6184c76bb7b59f962f4ba160f329b3326e563da8bb17a05992f725ded2d3b737e3f90d9e4a25052c797594b1f0653be6c5b992ffbcffd01996b316594216c4bdab67f4c589d57db95b5da3cd217ccf7cdbdf51d5d302b6dabad5bb9ee7a47fd98565af71abdef21cbea7d4c5b19ecefdab0296cc9c77cf4c67fdc98465f778ff9d86bcd57c24afd9b1eb3b26efecf638317b23ca6b7b33b7ff2e9a31cf1988b5da5f7d125dfebb760b27a615cb67163dcf68ec92fad94f07964e7cf8e09a3c7a78f56cb5c755dc77cd8f2ad64b8a263c1b48edeeb18bbe5fc1ad23157652da35bb78fc13bc7acafd2675eeb7deda81cf3df6d943a0bfdcae85e1c933dfaf0c6faec8d0fc77c4fdd9b2de756ca154c191d6b17be66198daf82f99e6d9152f8363eb56fccaf52ca4a97af2723746e4c09a5adf5b2babe366f6dcc7557bbf546615cef6c4cfe6a5783acdeffebd81af35628edd7165b5d8eb21af35e767ca3b7a5d6d114cc05995c0d3617a393bd96a8198b4e182e3aa831cd2fb41805935679a17ddd7ec927ef0bc934266c6fdd527fbc648551f229856a68ccfaf4d9fb3f764b8f2e6ae6319dae44a5e229853a83414e4ec08b654bd96cc125e15b0f3e595d6416255bd1197ba2e6af25538844f22abf966828618111d5636a609c9831adadd25b9392ca7f8c3d547a52f34f8fa93ed6099345b27752c65cb7b137a3dfafb9e56531382163daf8345ae68e5178176b5b7a6782d9d631bfb858a491fd6aa2e6d2934290bd77c5c918f32d29595a1759ac6e99899aa10d3dcf8b7afc74e6316331e6fd287bd1c590515fedfa8431e53fb622dbfb2047fb6f04c664b7de6dff6bf66f0859f3e9e119b512cccba05ddd8dc5762b9ff373f245732cb2642d4a17d9f1628cd5e8aebeda167bca1cf409a5786ef7f08c9a0c4e4830d78dccc168ffb2abb12d275e4cb7a2ffeb46e9aab2c9276a7eeca48be9ac7ddc2e1d5348ab2f51f36209ab3819c15cdd96efd3d5ee75ee3651b39a2fb5d38339a5c030f7298512c174ef99abd4c5f7a47cef36865c4c57affd16a3647ddf75173587483e3c8bb798ce5957ff5db4ccf9991a534f88e4c313975bc3da99519508b5989536acedd6271db5bda8a81965b28edf29856ad0491693656de71e7b8de9f7a5a2e6106ac4180bc6a274925fb77b9259942bda670e763f2a9bd2f724eab2779c846036bfcbd7fda53b08eb0d9952f18a09d7bff7edf0baab564a53ea492756ccea9e6b5e575bb79d976d06c1bc4f422beb8231f28bee76813b65423838f9c05c6e5b75cb28ed15edad201089f475c19d32211b9c5431d7a25e63ecca56b46f7def94095d2754c848ddf5dbeee58b9aed28f43d3fa92e5101817e4ade76ca84a6130f4ce6d04af84eb27475b14f31238dbe98e4fbf245bbae1329267bdda86c1c17bdbd6e7512c5bc2f32c7ccba5b504c6b3db65569ebea2c593ae9c083d2b15c8e3574ed227caf25abf2b16bf5c6f5908a9adfe94ba52d629c3c3199bdecc647db5ec7ebb627f5f884594e4c77977d0ea1b3c68c6f8b9a1f18e698e2b9cd024e9a98ad63636d753b269d332ad6bd8040a8d347b8532674c60913f33ea7efdcadcaae470865059c2c316ddfd8eed6651b8becbde744097692c494ababac4e32dbedb1a3a81985c4b4ffff6a8b6dedba943a51f363c1c911b345f8df7af98db7b1f6b6345253f231954291a7383162beafeacdd461b4d59d9e298dd048271c9855d2189f64d23de9d8d71abbe54cc9bf80402010aac7c4bd5326649d14316bbdadc5266f5c8bd91bbd987640a093694b1d95dc0b0864baa55128f2e0848819e58d8d3d8dcc1e6dd8a2661f1d2c5f74220c4e869835ae78692fc88fdb8d923a116242dbf1babbd5b51b6b64414c6f8edac590a5ff7bcec19d32a11c9c00c15f65a495c5d67c5942333fb06f74b1f5be1fd62597990da8f161da479bfb5abd5ed8bca91810c8747a1e4aa61208c4e353823b6542b487c94ef293cdb11d64c76a63c834c0d8623142261b3e07e5634e5ab752ae7eaf9dfdc79aa8999d523d627898fcdccbb9ab6bf973921dbc667e66e55a9decd7587cf8d48a9a59d3b266c218af33b4ff97a37b4cd45c32f1f0f08ceadb90291592eca999fcf459b7cb7ac5e59a1335db928fe914fa7136a499775d291bb39155fa28b7ea6b1e6ef199313af6a8b5d0eda2f0a5a839d5630aa5501f92fc62f3f894b8a4a66cba2aa50f6d7cd4ba755b507359a6decbad7ecaacded37cfc5032adfef03a786d961da637e7e8cbeb9c7396dd66e999cfaf6dced5766e0f56dade4e99d017d3e4081bfce70dbed8d8c9a6a534dd5bab366d97c617193b63e1993036c71a6c0c61fbe86e0a3549f3dbadbd62430be1cbb84826136d5ad0cc466babad695bc6f8a53f1da633bccce037a7f6f9b56e3421e51a99d3e79e2e4b5b134deaebfa6aad57ac972d646f9e992dcab8e47bb0bafb8e5e5173a88520963b5d7354b61b5f84feec36332a3f61abaf5d6dbfb4b5bb98a839643f15b2de23f90276feba563efdc562472699a8d97a4f03d5f92ea474b547e1c3ea2e8b9a19163a2f33166393cc646cd75ed44cf2d399f71ec6d1e74b5b25744e5a26997c56d47c7d68a8c74f6ae2e95332c5739b99f956a32efa8dcf3d6b7f45cd2fc57323109af04608bd59bae08d5ea17c3b65423564603a95ccdaf577a9fd5b9da839b5e64321e82286ea938baa039303bf76b23d081d638fc5d66fb9a3d657bb7eadf5fbbef46375b07cd191ee94eae1c16142ebb6bd4abfdafb18dbb8e6b59c5e8d894b066ef07a9dd7d8d131c8ac75517364ec134af1dc98a58c6cdda25c2db696cbf55a2e3af86f9da36519fbbee5a04fe85127ef71bc63c36cf6cb247bf9feabdd1aa6b733aecfb51b19744745cd8e797c4a8bcc84bd5cb537766b76f565a2e6d4c944fd0163a674cf687d92325ed575bcffa5e1191ffaf6a5786eeb1143996d86ebb573bfeabd2c4318ebd15147217d7a596ba2e6c605cc5afe5675f0add53edac678862ff331d90cc67b7db9af1dad35498e1898ac9dd17ae3b36b21b317355bd3142fd339b6a8736ec106dd36b5d6b4240d53d6e8f85d7cf7a56cd02eb9332d74efd5785bc768a97ba266520fcf2864ffe42254ec2ed3c9185decb822a4d44567ac025c2685f0f273430b9d638f2254c319e683ff9ac2b8e8571a592d7d9a0f99784ca71e66536498cc6f73fca2cbb6d86a276aee319d2caf2d932b5dccc255213ba30d45a654632dd3b1eb6adb3ebfea525a51f3974ca41aaaa394a7508c39cbfc48ed7f437fed16cb266a8e55de4e9910c3321d8471518eae296d703532f3be2669f36f071d5cab8a9a19a2e40c571ee3c5de5a90a193123ed9daa3902d7cacbfba63f93c8c503e5767311f520fcfe8f1f8945a8ae7aeb132dd63c620fb5efddc5a0c048a0f456195b9dab2e4eae8a3927db3a89919c687a26ea74c685199f12d8deedc7d90995d2c6a8e7f325939f9185ac531dc2913ea18267df63dd61eb3effaa57f81e9dee99332b27592dd6ef79a42920b0c53b27f6c2375c8374a0b5f98f09f5bb03ed96f2fa354d41c6a0c21d74fd3b6586036067dd5a65d9db2b55ed42c42f9f4844ea60b994b055c7bf0b9d6da726fc96ec9ee527fcf32b44f634351b31ad3e94c886798322b64f7dabd5ed97bee9ca839644bceac75c264d1a1a26345278c1aff226d90f3c5e6a03bf7dc63cdbe1535879a3bc6e96cbd4d527a7bb9a3b4814020d0833b654219e819a57bd956adf05afbfc899a4f3106389ffc662384f272ad0dada83972bf699b7bbee87b86d0519942b979256cf90c99c76e4eb614d366850cde66edbd5a47e113352ffed4e844864cca8767bd9d322132ccc9b89a64cdd149660c1d37e91252ca8dc62b216417046a3d3cafebd8ccdf5276e7d041a007814e2914962f3aec8d5973b17e774146dd3d336d61b8e8d41f0302d54f030241e7c585496f84ce3abdd239bcf145cd21c630c573dbdb291382201e932944b2a75008002dbc5b485db57c9965b654d4dc9c85c70bd26ecfb5cacb9d45cd3a61b2e8449f5069d4ec94ea697f3255321498afca5adb55f7b8bd74a7639f8f4e181dfa7ca2db2913ea32018eac259411c696cdb57ef03188270d89049a8d3659ab5b0ae3edc7de5708b1c17575c270d1e1a93580402d4ddc29137222451432e68dd663bbd1c9bfd13633c1741cdfc24a23b3d2f5e3316637b62a7c189bf576eb12358b522335eee76768965aa28831e97b4db2eb960efe7d100482d2891051c298ceebb6ad37bef62d99c1980c1b7bebb1eb1c73465909267c8db22be9651e1fb5f68bc97c2f6bd7ecb76b2d3612ccee8fb6be77965eccca56bb177284cc295d74b51744e96256b6f1ddcbd1716bc6d808a66b8cdfb3b1d26f16522782195963cd22954e765b8d713139c2fbdac6974bb2c6758bf92fc6b6125af68ebfc950488bf957d6b7deec79fba5adc7313da26431b935e777cd2e06ab6c8bc5acbd16bffa7a45c65f97b4234a08a63b7dee6fad6d0bdebaae98f732cb3c367fdfef7eb7e858a9238a159335fba674b10541302ba54c1b7b47d9ad8d97a859274c161dd0e9532310e84fa65aa241c70a080402c529a27c6042fbeccb05578ccf455bc584dfee9cf13ba6edfca2e6d49f69b10251a89831ca06eb95b07a7d8fe59b238a076674cf6d7d12327a66847272449962ae552573492d3bf8bf588a69f9b273f1596c74318351ccc81cbdcfb239870ead1335931c04ea1ba24031ab74ce76b95cb15667b703f3c14557af4ae1aacc5c7c62be58bb3ee8f439e6ad4527e6fb2bbfeba2ecdd5bdc2d8e284d4c162f8b5c9975cc7eb9cae088c2c4b4523216257ceb4e2e8e4b4c6b9bbbbd2af428ebb32b311d5c1d9d6bec4acaf03989b9e06aeedeb5e5f8fd8dc4ac72f565d5724b7aed635e41942326d3e63e5229ad75d6fd8b9a2193bc7137de2913a2218a11b3d5f620bf83f7c626e9153508f44ea99e32513830d963b69994edbdd7ad63db47e74f3e2813a9ead0f6d10945f643438c44bd2406040281402012c9ad804020907c234a1173d52a9f7cc8226c0afd89982ea3fd6ff4dddb8da17ccb4d04518698cf3a66adcbafed217f0dfdd0d06227530a0c0a14ea4155d1b1a2a3658240a9350f0239a9228a10535abaae93d26d7bd5d520668390dd4b9dcbc5cfb128404cfb9e5f7cca17564a57ff602efa96f575b449feefb5431bec9d32a113944da6b45c617374f8add2076319289a4cc9cdda6bfb65846e19743093c9a837a3553274542ed658c364725b0e9f377718e5df17f55f81ec03e592c997193aa3543e080402d5f076ca8442502c992f99357f0b769531d25ac95c4f65bb4e1bbc00141fccf5fe3ac2f7daad8b7b899acf9446289fc613668142c98cae2dec8e4e632ffa5ad4fca91f2a533e3da52d8f0a9449e63bd84ded837ca9537b2599df0e5b5ceff65a86eb7b3057848ec5f8d8b30ce3731e4cafcfbf36d61c3b868e4532635d4b7abbdb1ba15ba6526807f3f137f8ec8ab151b7f64232fb999be9e5f7b7bd5e1dccf7f8ad3f53f8a4eb7a73306563f85ecad6a85b1407932dc6b2df5bebfd17bd8f4c5f7d1d5d573e5f12beebc85cd4c5eb586bcb1ef7ba379892462ba9bbaf65db76bf9159d74bfbdae505a33ff936981e9b418f6f357decdfd760ae2a59934fd658db83d432322db35faf6c2edffad8769119e5adece0737f1994cc2a326d65dc9c595d2d996f4d64bac7a06b315ac7a27caf884cc8d22e6aad7dd7b6d5ea21d3176c2be3655a97a5ab1a32d952f8ce9975cdb49fd2605acb545acacf3a7aa5b7906961bded2fad8df01ba384cc774eefabaf42c8fe169dc1bc8edffb828b7a837c5d06d3f66d7d3bae5afbb2ea31988bd5179daddc7c9059697dc85e59bcef7da520b3410923bfc8a06cd2bd0c643a28ab6c923675b021943098fe6e7bca2c7ce7607b1290d9e2a3ac46476d7cca6cfc635adbeebd75c166f9b2e30ba6ec47a9a5ecd1455f6bd105b345e69abd37b2dbb6b2e8c77cb9ba456a2d5dcdceb18fc968b5b6fd3df9b0b96b3ea6738cdfd962fe77bff51eb3637db6aab496d55a5beb31ad7dcdc26a2d4366a1c33c2675e6e88dd16629eb86784c682b5b951d7cb005937d735e5f5bd674bd07ef98ef923a491df4f6dab5cf8e19df8bf59d9f3bedee57c75cd12bb7f6ce2464cf1e0b6664d862cb47f9391ad7a3633629d7ead6de61856fbd392694d0dab7dd9a6385d6c931fb46ee682f7c2e8e297d79836e2de9d046dbe0988dfe33e6f7dee275b4ad60da86cdddfbbe36a3d49b0a26b7dbb0dae56ad3ebb2bd315f6b669645bad6622d3637e6f5c8e45fc7ed565ed8da98dd2a5cad52761bfce81a1bd335638b2dbfcec17796ad31e36de69a844fbbe9ba568d5961dbcb90c19a82099f8d2c614708a933a360c2f89edd5dd649a66cb134e6bbd445b8e4bdd655ae684c0be557c79675de56a567cc4b5b3395fd6cadbb7e82699d844ebeb3d432cba419f3a37f8cd5d24ae1bb8bcb984d76a5f2b51be37b102e5173e949a1fa6924bfd04f6a74f29ec850c898cf95bd65ac1764123a928f71804031c1f4d6ce989b64e7bc7a8c79198d7d3f5ee9ae5bedc598cd7f1973edc5762f531ac6b4b1b2fade2e85dff84ce96d9f298d7eaeb0f8241028604c689fff5bd8aafcf6ab4b309fba64d252eec7ee8a7f4a8598bfe7278c6394131840f9625679996c92978ddc373e09a6db2a1d6c175ab8245be8c56c7efb9bcb7779496f4bd49c064d843380d2c5e478ede55e8ec5cb6cfc11cca68c3eefe8a0adefc916c194f76d8decc1668e0ea1a8390d9ad0f527851c8f99e1b1277b40e16246fa5a946fa54be8fadd2de682aebf3d58e3ad1536abc56c1b65af1623d32c266c97e3bbdf2517b39758ccaf9457bdf1beeaf07d0cc1645af9d76d06d949e6e015d33665d03565d9fadae6ac98d55763f5fdfb7db3ba24c94b271a62337442091410ccc678b5bcec32b6f55afdc084ecb26796ed4aaf7ebd8ad92d367bac95c2e54d97a83964b231072854ccf6587b6bb8a8a37c1bf5c07c964f2eeaaedb179df61413527635babdef9a65bf44cd7fc6fee9791e33419162b65febda1aeb63af25df2826bdd55dc9104a17e3650fc5fcaf4e46b71ef37f318ace8c4ef042e9c0a495d95babac456b69fb272683ddac95ec9a6bf73f27e693ff626dfadce3781d8b9a49fe2954080dc98786e1a273a634920fa5895961bc2ebd2ed6e84b7f26a65bf91e65d7fdd977975d62feb2cc4f3e6fde52325562b25faf2fa494d21bedf32426a38cd9ad0d3224a674d755c9de6d5ddcd88f98eda36dce2383d1395ed288299ffeadcf52367dcb9103932d487935b74a1932eb226637badef57af21b46f68898d1b5dbefb73e6fffdc10b3c656db5d969fabf5c6a2e633a510ff193bfdb958d119a3634567061d2b3a299f2e20d0e9fe97b7a61d100804022d666f4d25f7989f5c014588499b94ce3e675fb4aedd0b2588e9bada58a95f671757bd5080988e5fb6b3913a7776e9fdc1bcde226cc922dd643aed6ff5fa37bbd6aec9f4ebb55fb294f67194994c77cc5ede77ac3ef91a93f9eca5b2fb2b7c561fbc6432a4f65de998b2d60c5a32237b96ed776b3442f92a99905d7fd15277dd51f87c309d74ae5d76dfcafab55132bd4a577f55cbda75b0dd49269514d2c8206397fdda9564ca0ad9df65b09db167b707d359bed1238bb07173ecf260b65b66e5aa1ca9b7ca379259fb71e5f5a4b44ce3ba3b9830c27821b3ede073bc2e24b3d996feb4dd514afb7530e3ffea2863b3fbabd2cfc1648f512e0a9f41c7ae3f0ee68d4c593b96153a76e53f32bdc1f87ec505fd76cb7764c6cb6fd1b820730619fc1bccca2e7bcca5b3e6fadd373229dbe8357aafb5a25b6f83099dbbd8ecbb96bbd65b83493f5afbfcdfe87ab732321d32c9f4febf5c64fe8d55b60ae9ed5a2fb58accff6a9da5163afa2ea33691c97ab9bdd4c5ea6c9b5b44267dcb517aadbf766b95f690d91d5dbbc77ecb3a95d690c9626d7f6fd251ba58b43498cda9c38670415bc87454bedff7f7add6d6b3844ce6b6edc3c5f4dd3f676730db5227ed8a6d9773d7ac0c2695ab5f6bbf8b3577ccc66032a7cfaff446ffb2673bc874dade7db7debfedc52ac8b4d4becbe2add1c57a692033566ff1d15857dbaeb4c2604ae7a8d7d81ca5cc415a0199f6dfde4baf5d8bebf3fac7ac1e19dee78e55e8acac2f98ac5a689d8bbd7cbdc7ea82d9d5e975cad8737cbfab1ff33e28b9caf57edd4561ed63367f5442ca5c75513aac7c4c78dbfdf8225b8cadeaea1e733976a19591f5a5fc5cd563d6f85c5b682d7c94bbd53c66df0b9b335bbbf0989149968bf22f67655bb505b376bfe59a4b68bbc17bc76cee6aedda2af36bffed98962eb9dc467fb7b87d1df3c2286564f43b56d9960593de4a5dbaca9a9f324bc7a48fadcbefedda5db2ce31dd73f23547e97ff457e598f6593e87cf96572b691c93beaf325af72fefaa0dc7fc1a29a5ebdebade656f05b3db6f8514d6fb1a42a782b92c85abbe8f8dbe31a36d6f21f4e8fef032eac65cf0d5d77271bcbf20a36d4cb7ba3e7e6e4cd998d1d266a95d8bb9d95d63d6aeaed5a6d54647d95563b66aeb82ffae73ce3505135e091d649161ad2d5130697477ccfe63d69bfb34a6e3753fd20bfbc696168db9e2720c3e19eb19b3f6bb0f29cbea27980ddb72d937d25e91523763caf7d21d3226eb374b2f6376bdf2d7fb4a9dbb6e27634abbd65bfcebbefaafdd04b397db66594a3bc674f131beef5f42d9558cd96a63bd1c7bc818f70b63726cf19774b4b949d8c0980eff797dcfa4735dac04d3b5f7f6bdc8b5baf75fcc78e37d6e596c906364124c489b25f4f897d696cbbd98ac59638bc1dbd5b576bb98acd9666385f57584f44730b9594709615d4f5ab62298eee3edf637bee8f27231256defaaa3f242e6e41633b6f3a50ddabafcbb6a31ef5df1fd9297ad563d8b699f654ed6c8ccab848ec594eb2d6c2f36296d423099db5a8e659450de25a5cd15d351ea64a54dbecaec8dd2c68a5917b5d61b840c9be5286d4030ed6d6e0beb5dd5d9f7a4cd0766334aeb5bed2bdfd89eb4a9623a95ee9fe4759b75ce491b2a265fb75c658bb2e5df9ab4f1c0a4adfa72ceb107af7d4cda4c319d5e291b6516decb77491b2926b4bfac74b1ba6aad5dd2268ad9be63bdeeb2bf4fba8f36504ce9b435cbe465df8bd268d381c96cf33bd76ebfa8d368f3c4a434327edf1e7b7749a38d1393a1a4cc725dfdcbad479b2666b3aeced96f90ab7c196d9898ef647bb3ec36c88fca68b3c45ced3a6c767631476b8c364accbaae37a5ddb0618b31da2431d9436e46696cefcf31da2031bdb165f9246df5cad5d1e688c9167d0e9943f9abad8e36464c67cfd03ae6e68cd6176d38309d59e72073ee2da6b4459b22e6ea27e3ebb8aadff62cda1031d7b7aecb4577f6cfb26833c494fc6ead8fd67af9498e36424c6f9479bcb43e4b6f73b40962feed0b63ebc7ed41c8d10688e9607b7bef4a7769ac2bfe60567a57b3f01b3607afed4d264b6a2b4b471f4ac86c6b32a38ddf4f5f4a6fedb53399f2497fd47685b5a1ac8dc974faeedfa67e9dacd6fb92f98dfaffa2ef19bbd0db92c96c75b71a6cf532bb6457325d7c9429bcce94798ced834939727db0b95b1785b12999d7d9b22d421ae353177b9279ab8b94995df7df7add924c28255b77b5283b5eeeeec1a4965d65cacf8309efbf6fc62e57273d92e9ec8fa3eb0b1f7c09773025bf93abb2a430ba072199efd1bd5619b3f64fea60f6755f9bec55393af9723065eccaff16b76d973d1c4cd8ea958d2dbe1fb93e3219572b6bfc48bff93932a96dfdef7a4358eb7237988da12ff6cc6fa5be5c23934268af5fb6567683cd06932f63eba5f4d88f3dd760baf5056bafc86daf5ccdc86427bb39bd5edbeb5ebdc8846e311957adf625745791795b8db6457aefadcd2632695c2eaf7baec2bfd02232d9d977ed3d6fac36670f99f65bad8bf15b94ef7543e6f7e57fe676fb18751acc87d5c2e6dabd5adfcb42a6b5dc913e496ff5c6242113d2d8b7297b8fcf1f6730bf3578bbb6d8ba326e194c86355e7b7fd5665f753198ed5a65b23bfe62fa6d9059affcead119f576ac0932177dcc3d731b5d48a9c1e4761fc628f9b9d8dcccc86c945a669f33baac7cbbc8640d32daf8b91599b1a333d7adeb4d64c24b2bb56d1f5c0ddd250a0462d9d230e6420a22f375b3f2ebb76575b98e2050e890c9bd2057daf65e199d7d513373e3c62d0dfb22c5905969fb9254aecbde627c5133c947a70703029d1e0502bd3d3d4a86a4d06042ca96450729745d9f5da2661e7ebc23a59049d77f95911b2e0aa18c64482164b6bdd6ddcbfc4a681db2d642ca0c26abb73de41bddda6b5b930173ebfe9bbc5052d6f17918a1e433434a0c9af4d69a475a237cd68ace169d305c747abc0b08d4e33c2110082586944126ad6bf9bdae55575ddb9269442279e84fa6fb54b22e241215100885c6641281214510c790b9968cc5e8626c2c25bfea1874cdd67fcbf247a9117b7ee226a40432d76b86ce36b6f6e22fab63e5d15413a90a08f4da045260303d2e17fd5977ff366350d4fc4c274c96e6b65326e4640b2980ccf50b5ae6cf19b21b5f133587fed4c3f8530e6590f2c774e96cbbca373a2f7717046a8c5a704879c164f2bdaef636eada4bf92e98fefc2594b055b65c76f563b28ef139f9eef55fccb58fb9246b8ba9859252be4ff998f67dfbc7f69e84ee42b9c794eedcde0a5fd463b6aeec565bb25d8bcd751ef3ab8397322aadf46fadf198d5b5f7926b7dd1f23b6cc1ecb5985d4b9d85aeab75c8d69072c7a4f7bf6d83cdad76dd82764cf891a38d2f6da3b5c53a66abb5be4519bad8b6aec782593d5649dbe3272375efe898ffccdd5b5e2d7a7b3ec77c5c5d64eddca27db7e598bcb8d2787b450add611c93c5a7fc6243db683bb7159d1421058ef9f5be6525bb4cbe57b856305f7bdd2a47e956b5df570553b606a1658ef25f8fd4a5bc31d77acdccd66552aeeb1c7363d6c75abffbb6ff5577ada8f975404a1b93bd5b4ef28bd0c947dd1610480a1bd3a96dc7da5deaea5bcbae3159faa5abab43b6d643a6c6a4f23d77afcb5f20100854472998edbef195bf5cbc1daf0f4fc83909420a0a66337b1fd7efc8ee5b978a9aa90da17c318a4a8c69cc4badb3f07ebc4fdacb64dc29134a494163c2a6f13db7b5ad7fefc633267d77e9e5eb95b1f71845cd3cdf6aa49c604afec520ece5baa31933c27e1546bfbf449d464a1953cab7a474266373f03e1bc6a70b19cfdd73ecddabd439e9504831c17c8b42cb98a57c19b4718d94312695cbb66fffd15152c4e8079d4777a9376bedd252e58a08e55a44281769d1b1a253e50a1352c298b7d2f890e373f89cd206c6acf73d16df99b9551fdf124c1bfb398472c9dabeba1735bf3595765c94f2c5bcb46bb5ed31f37706e597d4981653db3b654254a490607e7bbb545efbce1d7f8b9abd98b0b98f8ed98b9197a4b18b096d7cf7f565b40e657c23985646f7ebb5b3b2bf322782e9fed8aaacdb7334763366500a17135afb5a7469efbb7dbb6e316bb32fb7e86acafecd3dee9d32a125458bf978c5f6b6ea153587a80faa99dde283942ca6b4ebc6c6ccdec7624a27ff5ff6bb96b2583f04d3dad8343ec6eff2a2ec57cc4b3dc65bdd5b2ba67dcddceb0b6d6cce2808e65749d9ad972ee60859fcc08ceeb55edefc70dd455f15335a76e372da9695d1462aa6fd1b7bfdbd4bc6159bf3c05c5fddde28977cfa4ea798cbc9f6be2a371799af26c5e40bbdad6cb557bdcfa3988cfdf76d4d4a68ad8d0cc594fdfe591bddebf8daedc0941046e61ddf3f31bd5bb456c2ea31dab7960d529c98b4b97a9f74b12dd920fb26a67fb3afd9ea647df651cbc4a4f7c64ad932b4ed2bd625e6aff82a7c67f0dfadafc47cd8d7c5b55e5749e5a349ccdaeffe9a6ccf58572466bd0cddda25abeb7ef58819af37a4f07a7cd9371a312f74166f84912bc7efe6c084544648977b5772f785454cf997ca7e777d8b123e11b331d82ecbe8167c27eb10335ec6cb6db4abd528e51362d2c824b35f8eb429a341ccba6a6449df2f270588d96fbfc9ead67bf82e6d3f982c5a16ffc17ab9716c6c93195fbfda587b8f615bafc9bc8cb1c6b7717df78f9cc974d7dd7ed99ef7952e3226f33a1aefa356b64be65f56dbbefb7bed3ab32553feba8d42cb0bd686b792e9eb32eccbba5b321fccbe8cc66eabc56897e345c9b491ef85b035b92a7b5c2799f5f1655e959b3f6cef899a5912f7efb446c7ec62ceb27b30d9b27f592f79edcb482f0fe6b7fdf6fb0fb646d9692493aedb76c9d56bad7b9fef60b68cf0b92574cb95ed2b994e37f4683cf5c38373790dc994ce99d25e16da66b737b4984e982cd79fcb6b3a98d13a06dbbd8ff0b6b79b83f9b841da2a64ed0c196c1ccc5ae9f3ba8f9964dada7b645e0817f3d5a873cd3eca6e1c99bedc63f746e8eddddc60f243ebba995f76ebe52b6a7e616e1ab1ffd62e2b2fb3f6abb35fbd07cccfcf007ace5d726383e8fac1c79a948b5d636b35e37bbbde7ffaacae5af945d5ad80ac8850aec58a0e7ccca4264c952b3f2713cf77d109c3456756f9d1290c28361b376e6a30237f5d4d52a730aef54dd4dca41b4626c30b6b74d6ddaecdbe0b193ea625a413860bb5a11f9d523a61b8e88040ab7571b3c87ccfbdbd0f36c9901b7b378accd8cd6573efe1e2d6cd3789ccc71894ef427ece256411ae2f6e1099d6d575e18bd6dd76e5ab874cf816df58dbbaf0baa4cf90099b859172b3152394f06930efb2ed46d7a2c7e6fed542267496ab6d155ee6dc5f96556e0899cf5e061f6ccfd1cad8a533985e19aceb59dac890fd653023ebf796bd2ea96d861e83d93c3a75d0f66b965e4943ece40437834c16a9a58d51b85875db5290e910f2a5907553781fbb37814c7fad7d5bd6fae5d62ebb81c18cd5bd5cd2c6f7cb41afeb8b8e159d85011d2f5c749ad4c3333a7da9348258dc00329b65f9cb256d8bfd63ff633ae7a28377b19496c5485f30bbbf996db735e982e9dcbdbd18f6d7e5a29373dcf831f9b548657c8e310bb96d1f13b6ab8b3ea5123e2f5bf998d7debae85b90b95ec76483e3668f79dd5fb3afde17a384cfddb8d1634a0a99d9adcf2dc9de2db9c64d1eb3c5589b310b2373ccadd6b1d2180a6ef098b22d87f5db365669848e191a372d986c1b7b7f1ffc7e4c3edfd1b102998c9b3b6665be55b2db4f63edf856388c1b3b66bb776e57577bad831c4b7053c77c52aeb79eb25c94b6942c98af3a7b665dca97ec36fb3a61b8e87c018140a0c521467dcf4fea9d1e8de944821b3a265dd23dc6ccfd655b8dbd39e67fe5089d3dd8dea14b13dcc831af8d5fe9bbfdb7aec5bc8c9b3826fc05ebbaf2c2fb6e5ccd63dcc03199c1c7a8b5efad60d6fa927d477ac370d16123b851c18c52be5dceb67233e37f63bedfe864c7e85df935b73824821b372663dc96d7aff236abdc4ea610b31b6eda98f1216cfecec2e8ec7ee33ff9a04a93710473c3c6b46eddf8be551bebf38e718dc9eea530b62bd97bcaee6ed498cf32c7fdcdbdd83f5b4ff995af25d38e4e182e3aa65b6a56dca460c6061bc21bdb7b5617a36174ace84c9d305c7440a0c5216620b841c19475518ff61f4776eedd34e66295a35ff658dbabeca26653aa8a1b3466adfeece56e0dbe6bdfcf98b79dac705106add36f7882f9de32d9e87b489d294b139221962833a6b3afa5b5ffd86ab4323a1239e678953157abb61b93defeb9cb54d46cba25e9e50b151d2f5c744cb70402a1483d3c239f1b32663774e9fc775d51f7706382f9dcadb5b967ef7609357033c6fcbe8e36ad30d2471b4651f3f78cd4b89f1b31e6758eedcd6165b9ac9a2f3db7296ec29890416f165f7cb69f8c4dd41ca1b801633aafeebe2bebb317ba5f51337ce2a6041f693769ad37ca44cd5f4c28fb69b5bf9ed2d8d68a9a4ba61109263bbbb491f53feae47351f3a74a7ee631276ebc9870c97731b67f7039bd1f4a3dea4f5d4ce9f8c5d56a4bcabd6e654bdc8c6056c75adef5ced6b8f8c5478960ae5a6bab94aecbcb71bc8b2571c3c574b0f9b28dbe6a2b83d12512375b4c47e35bdc98cbaf51728b9ab59891b218e1d386aebadb96c5641e57b5d2551a1b737f2c66959419d76770b97574c5236e4230e183fe625b1d1f7be9251fd315d331bd7e2b6cdba283578a9a7f1e4d0972e0c68ad916f3e66c6bcd4ddfad22104c762cdb73965df7f5dc7244dc7c6036ee67ed3ad72dd6db1eaa8ab97a41d6ebabbc2eca2aa9987ed9ed6e5c9b31b49e428d489f1a89d484527fc60373f9a2d1de0a5f95cec6db86b8996256c92a57e7cf643a4931bf9b6d1bab940fef73296a16a15c14c5e4e824b54bb62763b37f06c57cce3d4697c7d6ac5577a2e6c572a74cc80910371d98b0596b59b2aeebc25f9723eae689e9cb757bf597a5b132af123a313bc2161b7b8bde77ec748da90a08647f8d89b298ba69a2bae6b4df457ae1756fce9db96162f2c3e5acdd4b79b1d54fd4760b08040281408ecdb85962b6ebdad7f76ad155c9a4a87914fad00f0f4e824c3eb6532654c38d1233be8fbebc97a3d0b2f331494a6e9298cc42d6d1d26a59a4b25dd41c27b94162525aebbff5b559d4dc30b9396256a62d32646ecb63854cd4ec40201d2b3aa9d38b6acabb84e1020231db29137292c98d1193418e915dfb9efa3baea2e6c621c7b0de70c0fdba0a9957b7d7565bb3103745cc08639431562a2b6b28a3a8b9197243c4acde0c7e6c143e67ef16352f7eeb275b12f353ade858d1d1b1a263b7e858d1018140201609b919623683aebda68bf2bb6f9ba8d9969ec774baa1c720a7d67c7b9e3237424cd6ed597d6feb5e5976b909625ac8515207e1bf1a9dbaa8b967b801623685afd78a504ad9607ca26e59a2fc607a85d2e9afc79ca899b931e49d32a1196513189993bc1a3bc85a72741c19848ddefa4ed47c4aa14aa3c674c264d1e96245878c4e182e3aadc1d3cb23a26832fbbe686577635f6f75349e72168892c994efb4ef925156e7be2e267345bfee5dcb9c8d0cae7bc9acf4be7e0fbab45e25bf25f3b5afebd8da7fffb5be9209d7b3aeb976a1f5c18c8f2bc7d85e3adf0a2d2513b2fdc5cc5ebcf43db3934ccb1cf5c51cb95a16bf4a32a1b46cc5866fbdbeb7b507d3294bbeccda8bfd24ad3c98dfd7d76a8b55ba5ac61ac9ec5ef59b83f6aef81aac3b988f5d5c30d6e68f50be0ac96c4faebe74c94ba333577530ef62b05fb455be6c96d51ccc185937cb6437cbcd4a8a83595f948eefb77c642ee8b63bb206ed73155247e62f777e9b72d71ad7a33798bfa85bcdeae565ed95dec86c79dd93ef5de5c71add06f3bdd7c6ee5dd7d9ed923598abbbb6c8ce18746c2b2353bef8da72b5e372b77c91c9a2954cda75fde17b322a329f639145d9ecd95dcf6222937d59c991b295ccd71b91e9af1baee8d8fdda2efb9049dd9d17a4cc94d12a0d9915d26829f55b6d9551421acc162d7c7cd97e73950e1632a96df7416ff1427ef61232dd85d79737a42eb6d566305fab5ee97d8eb1678b3d194cb7fc36e9bd38c228d78bc16c57ed5ab0b116dfaadf06994cd7627fd798afebdf0499904afe4a7b59871e6d20f319b3cbdaacfb8590c260baabedb0420bf9b1372013caea5c59fd5b6bdbc7fe98f6befb929f8c8b6933f682495d5e17179556c2b6d705b3bd4568e582f0bdb3eac7a4de9036f7fdaed9d13e6665f53eebff0f57adcdc7ec25adad913df9d539c77bccd7fcf97e5c1c97e3c57acc6fd7ed7f9bd3b6aae7316d744cf282f6d516d95f3c66f36a97ed656d838e6fb760be6a1bbc145eb91a7df4de3165e37bbd295f6bdd5f6bc7ac954a69e57b2ea5bcd4d631d9c178edaaff185f6ece82e9e447c99c7d649636ea744c0b1d5cfdac7ad7b5a2cf311d6366b8bc51c6abad28c7e4d61cacbd5a5c6f7d5d71ccbeef55e71afcd71a850ec784d0e38a8b25bb1aa9952b988bc558e1620c7e758d970a666dab635bc9643fdb54be31ef92eed68dd2d1dbd68b6e4cf7cbf9b7cbd66396d5c5536b782cb4d84e9950294a1bd3b6da32d208ef57faadd998d0b687f47d63cc357ae11a93b9efbaf836ad2c99aa3163d707973306a97d90dd14cc76472333a3b6d5da0ea260321bfb5dadb0f66df5c134a6577859b6adee2edae84363aebef05db85c6d8be97b674cf9ef1633bfc5de37ba134cc9b032e5d6b8bee8cf9931297b5ca3acb7dd870d5b19f35dd977adafbe029315a8d48c8ae54251200e06410c84000c9c975909a001c314003038241a0e0663a1348f74ed071480034e66608e38282a12484381281c0a04811800601886410084411086614888d8299637b7d2027b78e4dedf876b74bb3db4b8235ce4a2572c0ec5c3b5b4544231818af692c732e7d8f19ce2c15bd7d50261928179e1fa6152f184b9b74e29389acb06eca10ea293a1aa23fc626ac6a190dd217e8dde89bcbaaf35981a3aa2950ce98dac0942cfb9547b9611d0f325d9431d598941674b87df12c4b28854aec006c8a9450f556f5a9ce872ac1a624a1f9648feb812c4f6eda0bd1ec650a53384d14212635569291419efa2146129e08201ae220cb8b324277a689b549afff33602681417072165fd52814dd0037ed68297eeb33c081386ca0255de5f8bbdf0e623aa32a4daf6b29122758e55b5a338f835cbdd58e8e452c6cd614ec63d8a51faddd5d4c6c427ae5b7b871a943d11352202e2a7ffc92f9111040fa114ac1dfc95af52fb77b9c248a343a0dd344032f4e616b85161d44af35bade24e88fb295a099e0fa9536003c5f82847e702ce6c034740f844f20086ede7c7a9cacdabbe94dec26e5c884f4c6d2ebd470513d1d21d3ad57e162a33f029ffe98937895c99edc8111337a6ae485db1cb382ed20b5567824093e33dc08c22aea77d1ec622b118123258369e735094af685fa03ea2f64bf4847e183152167a29e8d2282e17fd234ad5d78a23fdefd6c7f8b62e9e8f6a98c696a31572cbc36a907aefe10a21e995768ffae9340b555651ad49b3cc9a452b5a53196091a7c60d914f7ae9df308a58b9300c6f5588cbcac21cd036f9bc7d8ae258138103f04137999b0b253c3b95ef0d0d4bbd75d9e5a2347a43904f6521fb26d4562ba068353d769be9c4c7869810d5bc71cba5e5ebea2c1ea26bda410117ad9aa835c80c35030a5971d06d79c5723552d59950099b85824186b5f2399cccb9df2214cfb3c4b36ae24b20c550830267dbff3cf6ed3a76ee855829c0af75a85e7962add7d4dbc59974ababf690b6f2a45034ec0f48e58895dd1e6d0f8306aac8ffbc9562322a933c2d9fc26a978e12114911cc075183a06408fc4674989a80127f57bc4ed092fadf6f98280b375c0c3233776887c01c0d108ad92d4da41e4cd5b440a35635fdc018a1b3417dda828b70b34a685d3e9f0325c8301ba214448714fbb50544038ef309da1f3bfe0d2c285a4f826c33b40a95e066374a51e4ec02718aecb96080767d481801c408e138f69a59b7e91baf70d6a9dd11f8035f5af79fc5b637e9501560f21530c2f5ba721b875c1e64359789c084883291b43eb50dd64422655240555493f1b87de0cc47befb20ca4ed32c86138c4b07ae5fb840b8fbc20d8ad327ce21dc3c8bc3f13b2a288ad419f865dfda1c2f04754cb049a6bd3265c643be2763f54aa3314b8e53bdcdc5d2a4b7ac799c74835b4827261952938b31d61bc9594a3f1794b80f73fbdd85551c4f834a30b18ad1630923b3bbdf467676be39d3cf281cc44a9534b738355cfa2b0f18a6269d7a8f51c0580a986b814cabfdc063f7e646e1e8e242828e0a1e91ff5bddc7c7b2418d79e04025b1c0a92029b2e682198f814142a120890717a6c80bec39aa52d5fa46339f75199f342e6655632ca16730408459b5b6b2686516425d410402d58de8bfa6c820ba22564d0b3c75d75840c093d7006c914fee577f6c54a8c317b1b65f37cd33131a6ae0458b9636460ebf62af063da5146facf1ab12f0cbe80455dc8b60495fe10b7295837a6f9c687c512074d9f3f97222c9085488beadf1e1e2b63f647c8353832646ac739fca7aa51e883acb47bf2690e8c9a93cf1ec34a61cf42bd536984a57b200fc48ce88337fa20fd5d1980cd7bc03d3eaac6ebbc870099d70991244e9b5dd70b6e3e57ea244a40bd805d14dce094f390153909874746ce5160d5705bde6685bfcecf601c3ccb6980ad688e14dcf708ddcd0f22e054644ec0f76e06254a4a242fb166de4ac1e88fdedaae4d27cd0d5874c8f2ad781f2051d7597376b3ab414cabc40f82afd415b792e6648c046995206b886728b767dacd3783bebc537f44e7ee8709a94369fe33a133a9fc25377b459b69bd12b70528afdc2424db55594318340784c53fc310035e63871e57c1891134157c80e63977aa7e0054986b23082da49a545fbf4319f664728dcbdc89dd7d12f0f77d42320653ea7fb02a8a9863e5f6901c3175ea97600db51c8d80e58def1cb028d8d58d799541dd56000fc40b2c1d9e83ccba98123abee86d12ca77f622a0c6cab006b86553e0222e99dac87ebbe11727a06987dc64c591863f25fbd1074f8ae8e6ca3bee2450b38e33fd52a7d4258280582aca2c40493a7aa40446ac655647da15baa647e92ce6783a28f109a5fb9b6d0486113fc870510c60ad5003efd8c70d90f4abef03ac2a0f036a71b42dd7dd1a67214aa61145ee820e8c1d09828aa1504d52e884ae5076dbf95f653ce8617096d5fbae7905a713d832108b20842cb403eab0e1bc655c30c98ad6bc8251e91dc7924cca71da821ebd3b29f0e9291187366790f6781b109d4e17b51f2d69c6a1f2a1574a2bbfd39ed9fd2a98a7536a0f36334aaec81db682ccfc08b3d17c1a93dda73eaa64e9dc5778821285261c55c9eee559adc2a8b12af3cc941744a5cb95d9f8a23807ca8d6ec035e04508c5e030b12e0d140570b411c0a7cab820d3c282b7f00f81f0e3d4ce25b8822b3b8ad66117f1925ebb361acec09b1e2553d6a1848c9f83f6df1842e91a630fa4f78cc5ea10dedc8cf9dd0870faef2a34c4fa6666486c41d815c45e0f8fc621c92cb138b542f217de1b2e8dbe4d4957259cab92edd447c045137952cdd00922bb23084601036e8452291de25b0797ad1148ab7a29858306f251a59c781e8de026644eec3de34272ecb8310f75c15a43034ba8e781026750064506f18c71c94d03f11ab37b35bebe8cab04c12c1bf99433da3c09e11a2fc1dfe0581a911a2afe05b2cb966a5b5a380989b88b2900e93ca20d9c195c3488565e3c42e39ab63873112755c2933fc64256232a53db9de210e1e95daaf44f083428d89b744ec859c231357220472657539fe8f54594b2123703be2719879e9680edd653c66df2a31808f19aacacc2146f0bf61ecb4f030c4f9a62f684f80684ca1c204eaeb5f5406b385ce1ed4c4e2f0544e8260a00af63423e444c43565e61d08488ee20987064428e08737161af8c405db9ec3a3662f805209636081e14d24208e7e3b3a2ed1b0877dd7069a7aa039896362671ead7bb8d6717345ed5401263c58974b65693b54e6536debe7973cfb45a9c8e507d222a68ff4c412750901a19370ab65fd56b306f6917d578bb928b1f45a1958bc02d10a667e8e812efa16c8637cb54385f13ad41b653723d2fa4d4b023a87d2102863642f49d17a62f055c14d9de2b67a4c51f61c8c9f5d4a4314903e68424c767c9204c0ad7cff4a585842c12a20f89fb28b345ce68ef675c0c56a298bf7981ba2cf3f6b17b3001ac5132ea8094410352968d0b9ba714c7ae176eb0b256e54b67af58b3665ad71c3e4a9d232f6b856292c6a15e991077fc10247f68de442049658fe88e6971d6042e1fba85351d60e7c37b6113d93695689c848bf1ecaf30fc27851099daa217c70d78760b985d84f9a22343e460c07471336b6e9008d08e6713132f747bc1338141946c2d6540e46da54c75fa49258e53d8c380b37110bbf48d5359994eabff96ebc86e886d4638ade6fde5b9db0e763040dc1440acc3c0f5764918ab764c47f4c3e843fb469409b11ed065c13ade64a5e163a6dd689491322b35044a2eba8df236c64af954999b82ab987386abb36e17b7e8c888c1a7537414881305a477aa69e1ee4fb02a704af82ca2065500940065541a880c22051e12710544240bb6aa292104d58891d846f048998225c1294041e62945845d422a488a04415318ab01032896f046bc4884849f822a4115844adc4d888d59fa875428c3b9367ae01df0fe0e32c1bc1b7a0c1109bfc6956bab49aa0b20819f6ccb4ca6090fb1cc724fd11165c81547c1c415ccb51005c6eb3f2027eafd05743a3061b50abaae0bfd4c03c0abbcd0612c6f22c4b0c67ae99a438461d86179966688a899beeedd3eb0c92e824929e47d866894715ed44703a5296de4328e080e56a06bec4a1468c6aba872e4720885704231b7be38722e8cda0636a3493cbfcd34f99ae47b00a125200bd5795be50caeb29cba860dc9a9457cadfe15b879ae0149880f28c02d47af74699f27934f8348c83eba6168752225a7d254b7772c0a1334114b6aa2097858279518eb8ca661723550b28536cb51a529c2725b4164a25a11965159ade3592f9b895130d7373ec9b13389a704bbccb93a443e624f45025c3752cf6c6de1e18665596180aeb91d00ccf0287ca205e32f01bdde80ab30c927889ca7306716793a2d4b1ed56c9a54fc2e4102ef4513a7c1cd2b314551cc08d5a257badf2879af1c00f25ce51beb769f182918db6d75c556450e65a386ba169dcf054d0c85090ff4458ad8db023b9a53c909b8ea5f15b1c24a796a682095ac5911603bd57eae65cea52b1a4832109fbdcb537bf6e13508ecd7468ba3de1975947f0754bb85f9a96966886d028834c043120e428b511846be2b20b61467a1ff997151c9d2e8b9e42de011899dfe1afc380fdb96240ab5c96127c52848726511c49e7b881282480faa10a00a1cae2e6b08fa671a4d0cae058ddd9830d72593f12d34898769a63c0ed0f347683578fa3e0d41b3d8150edf06a835002820ec0198af417199307bc991107f51f3fcca7fb930b8cb20d5f78936727fb19c0c0a82802698a2fefc447c0f1e01ce38a03156440a62c61cc6f3adead54579ea94755564741578b04fbc009a46ebda2e5ba88e838e3f7bba507ece62aa5e5038150a1cadd4388d2a545db3741dc0f1d71726050a992c02807df9a88769dee0019a362d0686215b1165b222f3ac0b2580389a8274663b0684575b01a9b903fba61f9984aa112150f0154a369a48b54cc07a55110daa33aac8f8dc81f5db14ccc767149d70c27299a46ba988a7c501a0361eecd6e2de947d00f819109d5c73ab4479dd81ecb22367109ca41fe135f726a37c9af4e1b778328ce1e992a76d3da5b8982eb2162ff6490b30d8272e9baf85ad17d9c32063b5b043ce44c725b44df9b25a3f4aa28f54051175738040e0ecb1f39dbd4773bab3b438cb7062a0a3e4e6c7cab501572341c023ac083bb7d7e4ae40a670580e69c4df9fbbd98a0838ac7ef4da942948f188103616d7b85a5347a4825b1a24b73794303d00d783adbdf8732476e8bc1078fed6d110fd5b6233e4e02a639b6a9bc617a8de07f1fd464d6ef454619a05be572c8e7ee0c539e0665d055ce0d655c51b98f5f95ec85b00ceab32cac808c2e9d203dc525899ca46c0fd251bbc0d8f2736e4f4f24a4f53efb8e20d9920655966a3f8a75dd5a004333ce237639ddb4ab6447b8b189bd0f4fded19a49d348c33eab9918e2665dd0fa3c30e52f289957373a0695205817b480de59408f16480f5f18dfaa54259b0743bd61e15e5ab8572cecb5057af582eb75651851a747b7400460d7cbb08b3f825ca7ce629b370a0b34fcd331359777c0b3e3bfe67065ed027fc009ca758bddb9b761b4a9f48f8ed6190c2967050c96044f945b3ca29e9c4b7a1e4ffa2b6875249d34292105247b32ab6a582af121690a44ed898eecaf3697ae68f47c76a501b91236144d50249f9a66426ace1304ba694d6f492fbda1e945f7528c1b459160e44614c88eda514eb22093d42a539e473e410191552ba7e2727f910eecb9bcf4afb2b3393dae77c3eeb0c1281ff922d6b7e825d884d546cfe6634b056ba4f9b34e30e53685767f66b81f574220c5a94908c9014573ccc82fcf8c65b63fc92e1c8b9174e657c5bc024fab99835933a1019f76c4944bc28bb98fdfb93287277750c79f891ea1b13fe526ff1047f8699d32473b0a26efc418c07139a9a7ee58479f699e52a33f6a933f45127872a534a9960c482fb5a092a449cad47c4ba4cf97d1518ec62536676a21a6f56792f1a2ca0cfe1a3b396763e928e74234a1669b4bf514cff9cbe9da9eccb37f895d3e8731e1a831a5985acfcde57a0d4ffab374692fcfc33781659b4be3f4ce95cbe75a9c3cb3a5149557c34141b3e1a5fe94ceede569ed51b2b473292ebfc372c25c0b4b0fb5a09bcce3da9d2c67e7525c7e87e584b1164c8f94cba1e535db9cd4b378c95f4e877b425a7b4c59ea9c8bcbef5a39396603d3655e0ee784b8769796d339bbe045c28b5c5f097b6a47a8b4a1d2a422f5948fe213a07370a9bb3a67321da995ca242d29a0bc148300c965a5f62a9fc9e971cd5f49a77b2a2fff8becc09c8b4bef6a399bd3e3da5959d22045ca93a209612f4178e2507d8226408afd517675aec5f1bbb4f200cfb1f7b3fca51f77ef4631389802fd652c660cda4079a9cb2ffd0ec62cd0bcace54b9de55d256320d9e2a8374bd9f6f234dc974aa7c60ec9b6906b15eb38a49c6bfac8fa90599ab4daf7b0d2f0f292c38dbec92111d5d2238be9a24fae9c1f5ca8848bbc44cabcd57b39bc6c34d66d7d27f8e8195df1b9c72851a7465ed82175391b33244db3e402690b35243a4a44f33020b5ab55d89b51f7f9b1f166c156b51ca053eeeeed584b1152112fbc20c4566b5b80817d0ff543a0a1713124178246fc6f47f8080a1fb56ee839364ebab89471d9d5646e2dbc1e28ee7e785c4dfc1a266db8823db55a4dd71a84897f16db8e32b90cc1d4c8b82e87d0e047d24cfb6e091847fa97f3a2ef574cd0077d6ba8b3e17e747533781e5ec914b86acbf00453f7a61b68fe32bff6b9b58076328902525f56479493df6ee0a18d6ff66f688152544c32ca9804185a6eeb1fd074d3257f78958ba4f49ef057eb9f5aefe6b2af493f3028e65ec82d003362d1673e31c451e5e864027ebfbb32c6cbf6f3d988806c6468dd43c3f88b50964e542b8bb9faf1890be2f64fb61155ff508b88e706d6ba6f205a122033991f2cf6c440bcd6f02dc98925ce27466b40a6fbae68fb8c7fb07eb84adb9787ffd6276fd1f51800a1ae778a5a3cf64fa0495a0112537d2014091625293e229fafb4d25533b16987a09a0cd3f7d4fe6e73bc1be8bb80ac00fb76f058d4f68042b9ec553d6be6824fd5ad951374d348634ce5020904f0dd4e92b5c959f04df2db751d5c00c401fd2c2740637309d98ba57ed9487dbcfd428eae91412d2736195c2c73fe01a1113a2aef680456b7a932011d04052db2b004dccc2cfd13ff327339deaf3a7a7f2fd1302500ce4880d0883c67211c690f40c52ccc69ad44761cd0f997295943c2aecc3b1e29b7a114bcaa52a0f7eb451a30d849e85a4fef901021e07f0c8b03c66505746cadd6f046de81a60adf1cf76a752b000364bf2db98968da1a454e788e684cf1f98efea3c02ee017946a26a2951245143946012b68c0d2574c45d171ca69af4eb61bb1855a059213a5e9ca2c8bb4a89f1b983edddd0b3b844cfb2bcb6f918a1f835ac8ef973bec4a07998ee50fb7c7a41b7c19f8812aa516174f7b341e18609e630820ca34558c2a0818856924394ba40943202568be10d6227b8a1c1865a0efeb13e16481db4fc4f5006fb0b94be92884f99a2fb4fe019d22189caed25bc6fb4abf33cf83586fe91f61f6bf115ef293a861a22491324582200949790dec74ff10bf79d5a662fe97350aeb48acb20fe0ba59652b7640bc498aec0c7df5ae9f8d55a23af7ea81ac542f2c6e4464a817e479e9e70398ce4986f50d314e45c135868dda753a1959516c6223b98dde64ce1f4c907e714b0474f1e47cc18005b9c96f9d9681c6a65a643e9fe7115ed0405d44a3b01900d349390f8a22e7e341eb30774a2d599db78ea5d27b3af19ad3a9a2f87a50c9ed7cfa8eec94cca8dfcdd702524ddd55c0363d78422fd528810ba4c71ac91d8a9a876620905d8e8ba9e0f3bb1fa37c6408c08584455ecc87a8fc31b75090a4b6a7e8426c72cf8d55d0f87f1e100974c0eaca43368814f86051b7d6cd9e463f433a071541c15f27290066ef59d84624b7896ad043d6375f92402b0d08813bd5ec460c4004843b0f88119829554452f721de7526cee928e9099b030c581c71cd37a11cb1aa11a71f740a7405db19d2902153603217edc23c0a64244c313f42b652850299c43ea453f4203668ee8ca3c3bc0449b2341aca0f3dd0d196f9e63f426be74289741bd454cee7d025de9a80efce932542606beb7c1ad313a2661c30679b418a5cc4ecccc69fcb884a80be11649aaa0233a608d2b14207b0e73875183b033c05bd450bbfc5aa6c3d7bdf7af91f91725d3d95d50710216591828db5545d85a77246fc38f5b3aeee41eae679a1eec193adacd372fe2443a856ca267ecf9425c66e4382ea0c216a6642e435c9df639eea23aa102c655f1aa93c10ea3c2988117eaa3eaa539420f60670f2df4999ffbcf57f8908ea803940002b66bb6a82ae844e496b1e25a3532d0e4813a14337cc7613b4c54f4e64322a8ca0014b0d8c19dce859380917036048de5f55dbfe7b3e25e394326aa73f39ae97c12d5460a8e265ce5a59be23a3682bad30f858c60a983aa65f14103b3b774dece1646a3d43a8a742fa096e95326db68d60fee719b5e2bc0887e4210aea9f267f9f168935f48a97ba8c35189bc56f1553125136aaa603dd837d925237ce3f3339f04814d41a3a772d8a4fb89eb2e84337d531600f2ba57a6ab13f4e5079e6e470f15827412089738684cb028a04f67b89d12cc2f13186aa06244d88185fe0681f590e20e38e9f848e14b0826563df04206c8852a4ba6e716d1420583e1e1f487e4dfa343e8821ae57f143f1b6075204e7d2e99df31b7c52baed4096c0393afbe67c835f94ae5d5025091e71f810c5ade745f9d1b14d3826d599f2f986c620fc21fa4d161e79441a4ccbdbc39bfb43e722bb6efc91c2b9dbd6487be10e7e10047770d1f3a335d4e05821946353b7c89798f7446779a4ef9925cb235437ebc188e96715d13376eb3297e96781377a7fb517be6b76814701e48c1b7ee2c5dc0a37007907bf5607ed706e7ed2461dcdccf24087dfa933ed195aa5636fbe9595bcdced4b75fb0a237e4e62eefb70e23b6dbe7f0766b93551fc25edc00437c4a65a3979ad398ae5ab4daae40ee5f7a33abb920b74bb6ee449711e8dd9371f13362a9ca3557374f2e867852ea7bab479f996134fcca7351cc34ecad90ed43942f7190cda8bdc10419be39906efe29ec5682fe734cf75fb7d065662e79bb36afcd75300035681b79bc58d171d96f29bac42bc924d9c1ddc04e6dd81dd527ad5439f051ad06335d1e39925f15f8c387d9a5969000f5d6bb08ba65d3db4f27f18f27853cdd07e9dc8f6a0d28341e558928d832d6d7c94cb03d0080625a1673d3462404e2a5ab7a10eccdececdb36c1b1f7146463b2a2390ce8f147d07cac61b7f5e0feaf7f9e219f4ad5f337a3309556761d343c8207fc03a7ad76185721da64703004630fcb3107debc8b5918c4928c539b4b285e7c8700a6f9bbec94cd638af952025f804c92bb38b887afbec6e71a84c57783d8b6b72c4f13ec7edb82fc25fbc451f576ab77ca033c124c7f776f35b2c39191ee1e6c0ad40a4c0b6c08ad9de6e2b33307bc61b302f351b3824f9131df4f3e23839a44af2efe9b2dea7747c08bf95c913ad27537fa63b6f6a40c7a9f8d32ae07891ed931f92f4c47966e2902c4f7775a53a26e9e178a6d242bfb757f4527d11c4d3d4b36daef572af17bfd54167bc11d7ff3db2b31e06dae18f9698985ae5a765cba0759afdeae6466cf5ceb90f3c0bca042004d0aa9272344039ed5a15ef26a5ff2efbcbb2a6b4dc04f93b90155a37658c3578172c569d3f83f74b103351870976532a1e41b542b8a782b5ffaf4d15bd8adb9ab26a387ee9cbbf78790778395965e4701623e5483d3459732ff1c203ae7983886d205d8c814fcc34c839377858c49df8ca58c3a328d5ab73a30b27242c858dde7e186bcfdd646403895f657120eab3be38605039730ad9ab88df329d5cbe8e9cc54035ff454906c0cd1e20bc3c151a10bfeab64f350d5e9222cf6afcd6fca3730b13273ea2bb52dfce016d64a9d5fdbce3a04a26dedea07a34da7b97cde5735603b46fb195733e617bf4fa2d9ec0fbb6d3028c72a38912d84b420fd062770bd508a8d0fd7bb50b150d68db9b84706b2b9f6db882f0e67847d6c9997cbb6e2abd6956d25e1bf9489e9a6588ee9af771224cb447e7673ecfa314179a8d6f17326515684a38231449d827af6e544ed3892e8469d0126bde6fc367e38584997627b774556efab2036064daaf12bf5907d73fcb064e138db2f3a82cad950810bb9a8064ec679dbe414364a9ccf6a8436e1f15d9a020c2203db261c4bb5e665566b5be1910ad48c945a0f75e4c1c3640aa1424a88308806a6e1938a758eb43310bceb5eec048a34ec5f8b3e2a2bb11f4fc60282c467dc41b3183a62a4c3d61001ab63f52087740459e7fdf9e542f2d321519f56b4d551a33706972569732f1e32cdd42d444243929db4f261b3dec54d8f6502ecd420e083391178e8001018b1e9b4f431c32e02dfbe21e2c1a2313cbd43a6d5890ed00d00030cd4af153f8830f231aa4108cd46188b31d0859155f5480dc4dbc54753395b4bb3d60adf40144c126d8948f048d3a7d4069675586158b9d8213e32c63cea7ebe8fbe83ff643278fdf3130a1194a10e42161e63161f043c1d6c602a8799ec0e03a817e7e8801b9b92e642da8ea8dc85ac917c7b37ae6b59a55e302b05a38f09ee83f02d64712aefd100b63c72755dd731e07b941d8803cf66e30fef884b47b60fa054818c030e80d809a0e6e25fcd7245d69a91d3b98df65b3a1d09f495c3a545eba51dad2cd72e9dc36c1dccf40f954ef4dbb63ca5f1a978f51dbb3cede5b40869c43c596af9508535c85ea425ad32b115e17191b5e44a94a80baa62f0111836046a3bfa7eb168d6cef8d74b2f717b1d7ad3a1bf7fd73d89e19bb396e5955196b75015342dcdff75c7665ad98bd0e9eb96b7506da3240be35df538975534d3a8ec8d1cf93b7ca47e5965a2d205a0bb32700645ec691867ade075c1add3fa313746246646daf6d6f7dc01a47727900e851aaf6eb68f745d2ffece927f5b663f9f2817c06014b1bb248189938be115a8c3ef17dcfdf520874feab420df29e700e1ab83e5667fd8418c91cc031d7e0e8bc1bb512e23d559a0f568c328849eec5835ba0f2579643185cb8ef21ffc9f664721dbe0b2edf2e179fb0460a50597826d7034fce66204e8fd79468e697ab2f9720a1a79684f582e62fb3d5c0c5dc7dfe4074b6a458f97bcd1664cc904dc81021c858e2248bd49061a87cdc68fcb9981cba3b03c66ae3b7a0295ba465c8d8f445dc7d242473c1784238abdb1f1fc32893748b08c3a9887839d60514c78aa19b28826b044d813c408623d1dc6e9068f10ec7955682e0ca33844821001b00c5d0ad788269fdfcee2d8549d0966cd3ba19bb673e201ff203d61a56c132717e3fae6c96f9f366188a9cfcabddd49e2b06bac149d9631b049ad3aeea8da359e4c97bdcfcd6935b5b2ad82a0dcd0f5a2b19f1af5f60e0e742b3e0058f17c69f95c1b827386d77f73224b3d48e4e260f4f1a794559fd6c8624a07be0c467cef467377aed776254821535856f91d0d628fdb7d44b98abcbb49ca1ea67565c88bc84598c37e4a513785dc48333a20e4ed21849bb3d3d6edc90d8f6cb05654513a04fcd6384b1e75f330c52aa3e37bc631be3f1367586f7bd675eec9b00a11b7e63394915687e0b9d94d4505ef52430c0458cd69aa7bf04dc036efd11d9de13728218af394e20201f05171bfd72fa3c25067493b9ae581f1d0c5861b8083310df3aec067ec52a99074c69fa35643d65b72ec7e836e849347deb4fc70de6f1e6387d39dc5707798f9fe34184fdf97f893d9d5b19ec5461a60c531ca0293a44510ce9a8ad0fcc5c3076757991579d9464a06a63b29c2608e69564f79777e6b1fbebc93c27bc1f4c50082038a529b0daa860a9932bb87c14f82b6495cc4ad5c31578dc2117350622547f49e396caa59b00301fe9d04a98cd165fe542be27977d4bafdf818df98e93f8151de1a2cb7d2183d27f7390545e9716ff5e3ddbb3ad0bd72e29e61fbc04827d46c61bc9f8716687c177cd20dc8d12265ed0b3f36bc9497778960c3497956376d977dc0ba16927008c7d74d02e8dcb36336722aef55e7a109a152452ffa657960c6bd0449420228ff47a7932cb3a5f4d75f182478aff14cfa5c2a0d0c970995828d568faf2a1ab85fccaad34151ca06b0195bb627faca0806afbc0752849854a48214a1ad033753947b437f1e12fa3bb888271694d59145e62d8b9108ac5c1d64a59e5d781461b7215bfccc5705a96962a8a3281aa930b840ffec3626cc90e6208d882257f2added717c9a874984cf4dffd65b4e70a6c01bd3257963323283c10f3202b164889a31d4adaa269d84f3d9404f55e96c6e922f89e100e5b3b9fcd6ac884b123fc2ec89c23ac4d27a36fab8c4b378a35f95e5a38034fa949c1f332a73dccc1235c6eea0c4a6201516318a5bde845887fae4767b4427d22d971cd5399f7fba2fb8c554e15e85b2458abae95d25f76c056f37381b9295b7f196b01ed1de14518bfacab57b25cfe34d6f09ceb13ab8bfbcb0c954c35d86724ba7dfef277c254dbc55a05bb2b5c7f582be12e95e9571fbd2fab27ba40ee22d2f19d2b530bfb9ded0e9b4ebf27009da96e3b9bdba6d7d6de66793175bbdaea5688d6b3530514bb856f745f335046a85645228ce721afd923acd20bbe0797a4bb31ca37fa48e59a82e38afbed28ce3d81fc9710eaa03d7a7af98e934f623799a8374c2f3e91567398d7e499d66905df03cbda5590e8e53ff9224457fa0313f0739ac6b00ce50bfa4fe205976678773d2c428aba87721647485e0fdcb6538464ff04926bce6f5877294e18d5268eac1e51ace3faea13ac43377388bd8b43f3bf2f33ad62f3d733dac394750b61638b16695261d5fe427d9df4b5afbe4c481b742cee8bc30fc8437416c2d08e92425f9dc60eeb011fb7b585cf5fdabbf3662994f52b2ce0cd100ffd742664344c962a867f4f3d09e128e91d68b04ffbc54cab0fe3b562cac470b6ca9b107f429e86ffbb2333eed41f0460e5fdb512025e310b28930b3881ec575ad975ca6bc0ee9f34f5b7ef46eeb590c9d5a99a331fa9b02cf229a4fe775134f9a2ad0330d1b2ccba0695652fe29a01203e3a20698d87276b93f0771f92838413bd301a9e515f20c0b914951786761beecaf29528aa1d8241a824c47003cd08b9bcd838184745688b08de3b91f81de903b95f4071652b3a42260ce14f816807e1f367ded033d37de60d63ebf283d93a57a80ce95114410a906111ddb4ce2a470004969e82879d49f179b353559637c389869032dd59b6ca8ebcb790144224d5727e116243b3ca730f4ba44704d4d357143dce916f6c6aa559d745f9f8086be3302e93bada21716af83859626173f3b265d6072faeedbb72c14fe6fd1c026adbcfc76138ba9c841f27c636ecab6ca184eeda4991cf38c99b9c1e6eeca04072a71b680b16df19d40a24b4c99815d8aa087a9ae168091e69fb774c28e860d535e77eb6786629da2b28d571d227b9eaf447e079ea74728c0be85eaf6e1217b346b13bfe75e9df81d5d63edf3715d20d5fe4c46f9d3947b0586ddbfca5c3a91d1687f6293c80655e8b47166be3cb94205635d76ba4687fc385c7ed64b8dc93cdc49070c3fbb5679f4c549d1cb9a9bc6fbf2726d90b23fae6625f4e2f16ac82b094a24bb4921d3595bf13f89c877729261ce7d06780c81c8f6ce67affb5ca834b9a03a51787f81e764b92689da13e8ca20e420b1cb70b9398225b86971f1d72a384fccca1d895011366d81fdc713f1096890bf0d837cc730ff908b9729fbe5d3d01dd3abf5a702df58d1c74b7eaa79e9d6cc55141a83d305702a6ddf080703a7b49b6397832c3c23959605146e27a2bf8b0d7085f05cd6fa8cc4b57304355d52d4b21290ebbb6b91e3d668c7425ecca02355b9bfcbc4ba10ef01b767d87b790b8feeda3f2334a9d188e15c7a10df5aada37d9bd4c2e69ff5d0f2679b2405b1e0198518d98af24720b80a6ae00f8ef9f929d177f6b507627b07dc36fef300858d7bbff3bbd9e7ed2375bb81e16028ff0cca56f42ca73637ef885ecaa3c0fca9e99a3736634fa5df0932e2e81cd7a097733ded755da6d5b8a417429ee75efc02d51cf6a0de944f6d3a62da26b27e8fdd2096ef8b45b5d84734be6f7f81d41ebc025af23ef4233be11d61f9743f12abdbef33d585f331597eda2109c7fec4f7fe21ebbfe5533b0e0440efd5033c19a62aefcb7a13ac23d4be3ed04a37af7aa34626a1f7d559e08738ba352484a528df2902f531a2452eea983994defa5b28a434ce375f8823797b2da74e47aa4e342045debab2e7974e3e235c336fb7d97bfbc80e7cff4dad89639b5f73f348f0661037f2c45225298339fda2ede6a80d7c105ec8c7c4847c1e630207222d2d6ef389b3f278c09b91adfe1ca01d23a0c1f8e8dcf97427b905d0c43e999ef3b49925060b943770ec330e2d9c77d15ea0801c71d0901600fb147aac33ac97446ca6f646542ae6f07b8700eeba9652e4efbf3d876e205f2de7d9e8f78dba48044372ea06937027aef78aebe92c26a3a792891fd04f10c771a84efabcfebb418a8a39f341ac840689923adaa6bdf547b6cb5903d27f2000528b694ac3f81cd94b773e79c27d9f083f471cbe815cbf6bb27bf93fd31c0f9d6ae25e4d17c653022a771d3078f6b5bb8b2b8ca725a36537af616af11b06523a4c39e0971dc85e06cf6aa235ad883b6d2825890d8087f01aa53cae166f29805bd071e4c4e762f39e4f1eef280682c5208a75d127d470d2e6fbe8ae33d22ef763a18d85e36be0f42c61b66cd32ac21f06fc06ac495bbcc5939766bf56bbb4c2016d06a4d69f1b77d4534e15af56fbc39cbc017af6d7170850b2f58db8bde322e0226699e359ec180fe2f9390597bdfd54659716fba066d09a827c6b17a8680d6e55c0fd295e846f2e30f78bffa59ca582857a89e6b301e893bfda3b0b757ce6e43053458f89ab1b023c969e5bf469b642fbc72a0c3c9702c1df64cdbd3bb91ba2b243557ac27e7b4b6533a1bcbf489df62c4452bfb66aba0ec242becf4375dfe6cae7faab15bdf52e4e4b5abb96333a9378469e47b0cc30ccb9b94b2e60e73d95438278c373f9f1b43141ce0006bc673f6392a7d3edc131c9c1e3f9718b0cc26a200ae005b4face43402c9365db98fe1378a25b0cb0fa954c962760db87dbb3e91b882b0e84fa719d5fca6d5a732e275f0919e934c41909da58dcff0430c77a18de544d6503cb78b06ec58d6c0a06a2f90f9c371f7bc65ca90e38140d7bc5d0645ce0ee8e6aaadae1cede5f2f5cd1901193987a0dd7933d875d685ba05a3f08df40481e945027dc0bb10baec1ee0726228cbdeb640968d68623488df116ccab198dbbe810cd637fc9df9cd7d97806a8a5196495749651932e1e4809332e402e8ede6ffa45fb752b54be3685b329ed2a0abedf9aaad29fd5b488d837de830a5a314c24de2cb8d5bcab760509cfdcb8beacba20ac3cb45403f8d50eedd1ff1f9a55d68f1fd2c6ef1f9a91bbfe284970bc2771bb5f7700245b42f8fef6f91b366d46e977a40fcf07d0f95f5cde67539c261ed1e609628f3b711e27eb9a80e3e44a094deb37264db34c9043654e6ae7e0bdbb762e74e52f9b6b28cecc3c6e9bcde2a1745b281bc2068d336d0d46d157c63d84db12cd06877e1ba8a2ff717658d4edce6926c6d516b7cff3c600ecaef2a064f44fd2b285c1f4040beea35e6b1b824d74f9da83d181e27acb2bcfde1bd26dbe2f12282cac8e32d5db553e777af177ed78408b3feab63d2a3de824b0a6a801ce309f94c1f8a72ded9a4ef60cc5b428cf84ecf8fc5652c5145bd18b01ff95e876cee2d7bc99107e33fec0395a03c1b285a6af342526d9eb281c183a97a3629728ed8294ce68579ee629f3390ad6f92b7554b3194acf072b6e4f66b39082428e47e10c8f0411fcde9680869e7ac3a2995396a3ab698b63b8a21444cdf2cd8d0abbdd07e10a2fd8559aaebe93bbbd65aa33137809ca9cb9b4824b9a3cb4b51aa24097768aa62b21262d93f5ad03410d2b4f5b126ed5bae4bd52a7da09685a7817201c5eb75b8a9487e02ac526ad9a6de9677bf2d034131676777bd6de7cc16970e918e47249f3d6d8f9ca9cfa457e645fe99e4dedce8d728a0f76aa437a56e03483ad5e943250230736ca6ae06b1f0025183bb80f3fe48da0eac25a13d12b0786eb94324269c5d39c0345f153f298843a090be5e4955f82b4b115fac469cd93438a513de16a7dc345d6a061b09ab9e9c5d430b312d0fa2e0c34d4305347d6c015e531be7eff71fdf5033a3015741c7db7d51aa34ab4e0ed0ef4934b675bd52db0ffc4892260c4964f315e54bbf0d2e5e711edf9d7f501d3f2830d75817e31cfbf46129912130dafb1e68583cb49567177314640760a0f98490b8cf83b6e88d89507f2c6d2ea4c8d2c98b5c023a4a844529315406a70d08ee001e201e8ab6cda96aa2df54ba61b2e0d5f81fc9f4eb22158932c8381ce96f2e319e32060b3ed25c817542ddc59e91d07d3c4437dec450b0233c2d6bad17defd0b233332ca884ab05c15173cdee53251832d86120e4997781164862f79fdcf4771c84e389073836a14b03b92d9c2ebaeabe2fcba31b6f083a97b8c5f60b5d631fce116450afc542aca6b5e762a98299de01a5db0c27d043ae30c19f7429f8993122af94f69d71676700bb4df6c9e4b2a373ce61742a3d4df606d4df3911d8e0614621ecc300d3bbb7726602da866521e72ed354caa9843a0013a3b04c98ab70061ec5718913603d44b33173d6c8155cb251f8a1db3b8eba17c71890c886dcb06f3413b0207a12814759a43fc4d67ebb498463ad2def00968aa0b90082fbe7b8b9b77fec344e859a47216fda3f1bbf3760aa8bb7f78933268801a411dd509dbb0c7f5661617fd37798e3e734d2b35264f870ada57e44bd6973d56d1587dd629e29c68bb9ffd668a5c3477fdb4d301abbce8cb4f27f691adf232394de18467c19d7e4888b91bd90ff2af40d53e7aa3e135990081477426ddfa3f20dbc6b028e3c44f70a3a60b0a6d001303333333333333333333375d46fbdad7db190955292e5e18daf419a1dcd24539229a524c64c7cf845daf01769c39d99b584d09c3c100b120bcf0a2851cb2baf768d900de792313d759b637aafe1ac57b14932f1948c41af868312a5264f1c35d2459f86f329592a5de65eb3708286938a99ed8f331c4ded990ef793a6c3ec0f339cbd04d5a0ceabf32f2ec3416cd275ba6499fbd09041ef7459d10aab6821e2ee4e5e1354ab1cf818c359a4d7da98cc7f92580cc74c4ab41bff1edd2786e17c31fa6ec2f6b254309c46f69cd810226c63f7f185935f9f5df00cfafefc91353b2f1c46654defa7a6798547d674887c74e1709b545e0ab296044d47d6ceee900bc798aff1b6d35b82f2d0f0b185932443099ad7cb6ab4ad8553be7c3319d4eef2b859385a8fc61b954933495e202404081f58384893b382bab022b2095cc7158e25bdd22f263935af38b286036921d25bf89e0f2b9c654b92e992fe4c4989dbb89144aa50bd7a251d16542229a8f167a518e0830ac7395f53a1d71029813b8ea5c0c7144e299458162ade4b581933f02185f3658966cc195b634245021f51380969311e171be386190ae7dc52d320c3f629d11cc116376c980a7c3ce1181783a991b33be170621293709bb4be7235b27687818f269c4acaebb45159926836b2960267c2316c935fd2269afa19818f259c6a9477e909325a85587c28e1702ac57d13b3040b5ac0cefb3e9270d624a709a36269d0ef23e170319fea159f3d25df473897c6d5a4c9af94f28c118ea6a4933d2c2899f4453867bc6eb509a164ee9708072dcb27b5c62a4b490ee11433252546eb26845392e14466464d0f6dedcae0230807f9ae69d5d25bcb3240385e4cd1a92aa6cdb6fdc161e3766c8abac507072d776246bfeda307471593d74eb7aa0525fec1839356fef22a33212bdf1d3e82b58f1d9c9226c984ce1335fa24710b3e747072bbd4b629b5b5db9e83636d9f168d3f52776d1c9c566f4fbe24d359d6c90d4e77faf664b53e366d6c701294523e57974bf825c238f8a8c149d2202c6e7f9e33f8a0c1b12d25290861216492c7e46306e7d294f164f0b56c5f195943816f21b2c58d3404d49941012c66e80b3e64705251b4499bf24eb8e53f627092c418755d2dda76df1f30388999b4063d222bbca55f718a2529a5c426b9e260ca4b90b271f5334e5a71f81a93f469d2a87e29ac38c99ad484122728694c721595182fbba225a9e270bd6a1bd46249e162a93868ca56db6bb25d3a0b15c7bbd3dfb7909fe25c42cf29318fba50d11427259cd053bdd8a45b97e2643a6b72283925fa894871fe8cd31663cca429c9284e4aec4d4a5b10a5945b44710c279c2c3d96a4c84986e2206fcf6773cefc251d284e921c4ad854259bfa4987c7278e494dcc551725c3463670f40d1ade372410e2e189b3b5aea76528717ebe4e1cc346d125e5f6c6f4958807274e6a61cbe4d3325153b989839abe98fa7343ae22366c201cde2a810e88a4c04313c7cb1eb779514d9b5847d6b4701b478b1b3916901cc7054242b4701b2e810e88208f4c9c4fdb9510272ebd241b03332880c5043c30917ccd91971b4dd6bb056ec0e312d77fa9322bb5a4ed222933397c478db4c441fa6f08a5338556897b5462d93ea537d49496886c71232464068d193466d098711812328302397c8703520d1b3a0c8ec28312fe8e98c9c798863a32c70e1ced3189d36f5e8958d1384a2549e29c7d2363e613b46c7a366ca06410b0c5024242424274e4c0231210f080c4f162e97f7793471c47062f4996d5dd927c479c772d7d656f7cb1ad112765d25a10a1c4117135234e526532dd2679cc756511c7fcaa6462c8137f9398220ebb29ead24af4ddb43c12710c27af5d4d696d93a30722ce226342672452b2e0718883f68d292ce79892ea8eac215ec1c310c75d8df937fcf2c5e5377678d205d282a7e05188838feb858e293bed087132c94dd69bca95e4268dacd90de29829ffe6bf4ca1f4565c070f419cc57b839e16656206111d3c0271dedecb5aa566797703e2a04a082d225fd36c4ffe703c4b7dba339ca0ba591c3cfc70ee7a0d25f7ce6fdcb00fa73e498aa3e1a265ee150d1e7c3887daf6bc2497c624ad65227b38a8f28add25af9cdc4de2a18783ce12fc2b7e9ad6b58cacb125c1230fa7ab56bd686da1f7e491351d060f07256ecc7b0ddd65aab4c3191012727687f3b68685b313ce4d4a164aa00322012884871dce7e629416a14a8c66721629d3c1e75187539233a579e934b2668603e14187a3958dde06216c4f0cb31e3ce670fe5d13734aba5c9aa99b83871c4efd23be8205a5aaee8daca1c5c1230ea72d25bbc9184dfcbfcdc8daba8d76c01613583278c0e158954e34bbcb174c6a3368e4c1e30dc73cabd1d6ce0f6fd1cee0e186d3650d32c80d6a5265bd361cdb82d56bbc60412dc98693123436e836c9e53259d670b0bb9284cad57e91ab1a0e4a1235414bc494a92a0d671d796752ede5eb17cd173cd070f212ffd2e4652f789ce1d4a34dae2a67849ca4190ea3b4aeca9f6538088d77d2454edc982adb8207198ea5a46042ccaff4e58b083cc67012b127b67ab38cd5ab010f311ccd55837f499a9135bc814718ce63d9276eb0245d3cd1c85a0d3cc0708a0d37a5bbedc89ac88d3e16787ce1d8e9afb2e2e9223cbc603ac933ffc98b49490200267874e1ec7eb9a361e7c424e722246446160c98111232230b2c668484980b80223cb870b4cf5259841495369a3574d43801cfc882013b6ae8a89181b6e13516202212121212a2809010ef9010118f2d1c7e4dfabe7c5f0be7303133595d4ef352164e276d189915efc336848593caa58c49caf7787e85b38d92bb43df32c6d558e130ba4dd07f8de93d57e124fc55bea87519ea5c2a1c4bd893fe37a54c4a3785c3c5598a5765d249964ae124df896abbbfff2a89c2a93d93a53169e229d10285c3a7263deb1fa16e944f38ec66c98a7ada3259e784b3a5c85462ac1a3d9a70d2d35c9ac4bf623563c239ecd52f5b2d8f259c2e9e58e5889c76df3d947090cf70afe92edebaea803311c313f4c12309c7d07d77e2d60609c760250675b257bcb78f70d61151a74573e7097a18e1242f9b248d12db248dbb08273bf5b5285ab1922811e120533a512f65e34d673c8670b24c299a8989ff1eb287104ec964f5b1248545d423084713844c11a6ff073c80709057a2f58428bfb8491e3f38fa8dcc9b2a5808a53fde1613c0c00466d098111252f6e0e183739897a445a6aa8af5f7e0a0528e90b94ee44e8973e438c68307a7582762b26b714a4346081e3b389b7cf27f5f52b3ad8b0ece95af43334f8e77d1efd8c24f702c0a1e39388a2849eb97bc17a72e143c7070cc99e1a4b314e3eceb1b9cb574ac44897e51f7b5c1412551319724bc5b542b13c12678d4e0984b0ecfa86d6155a58e1de538e04183c3ca9a0a42ec5254563d66702c372bf9bbf615caa480870c4e615555a349f76ee5086ae8d081446e34bbc0230627a9dd72d4c993edcc9a1678c0e098a4ff8c1ab3e8f9a847d66cdcb88143e4462f0b04f08ad3c63a13a5f2dae5762000579cae4e4c826bec52c2e53a1d08a015a7ec2a5d139e51373810002bce9a92e81757e264bd1b5913b9d16a0301ace220da35ce7beed733aa8ac39ad4d49d2659b9d9236b2515a79c6e7253e8f6545171126c749af62f29eaaf91b51c22373a692080539c446b9ec855d1f2232e4c71b63661767b4fcba5386729f935d3f59135529ceb5d2d45bda0d51dc54910269dce6df1cde5e06204357e8b938100447152a2b425795b63a5141a590bc52989e3ab39d498a416b9d1068a837cb52475e691ebdd46820c0602f8c441a998368dcd7a48931a597315ac270e5ae35f8cbe54a29a143492b413873be126a5f7cb2a16ae40009cf87364e74f6e7f930da443c4cd6664c180a2a304a9c68eb221086013e7d0a695e9629228b1a11b04a08983d03cf916a22c83003271becda3b264cc959f2937060160e29825c5d29854b2bc375de224db898e1e216627463a0206995b065e18014debf0bded53253ab2a6233ad048cee045116af0820865cf7425a62397dbe2468d901743d0ffbfca43a5f4af92042f8470125eeeedc492492a684138264128d147652539a302610d2f7e70327d77a755f2173e389fe0f7e29742b69de4c8aa1e5ef4e098b2f9f27a99895de9c20b1e24ed09ea4426a5ab1b5974c38b1d1cf3a9bf12c776445f2c0bc20b1d9cf2cf9c6017932a8db332b0838b1b5d202cca80f0220727eb4bd26b494a3431310478818383882fa9fafef135ea1b9ce3378ead497569a3f4c206c7db92a1c205939478a5458d111d2127a87c5183826d7bc8cfddf4ddd1202be9634fd83cd29b012242c6e6d5ce2675aee0850cb8543249ea47fcdc15c1c218bf88c16164f04d92097f67bebf80c149a84edd3e8d9a529202f28a5388b018b26295ad096601e28a53b0381afa7305405a71d8da5395ded24a885ec4860d2e7e5971ecd4bb1464a9f9b95e57716c3741e6db0abfb07e17441527217e949f7caaded7a21000490567a97f490e61a645020415a62fa5629a1436483febd41320a738d66f64f59b8a27396ebc087702c41465ecf712c4d505734b8e1b9c0029c549e5495b25e88b2646a40610529ce7526ef76dff7e79a50c20a338a66082c9246fd0acc12424242484458c9b00228aa3996e5edf08b539758e0124142751e4d2a8a5b95808f70b20a038e91fe52676c80c2dff27ceb6aa5faaae496e9a3d715256258412ae39abc74e1cee5faf342f49b2e7ca89a3a820d366eb5900d9c43155991215956731df9a386a92f23bff04ada0994c9c6bb49e25b97e4b9e6903e5702d7c04c7298889f29a74ca44efca8cac71a14324a1952d6ed8a01112c2209738c57d0db978525c2f294b9cffa4d0de95372971f29540dc642c0b17d37117397698ad190974408403209438bae59374f6fede78aa05ca91030108e890102b804ce224785cc6346196c44999a89151a77a23ac8d84490c4da2a82dcfec8d2c0df30308248e49dc24757abecc5b37110079c4294e12f4c444f192527464ad04ee3ad201208e387aa92e3bdd6762e78cc50ea4671a00d288937097922cb761d74eeb0510461ca36bdad9369562ecd0228e9fa5ee6f644a17d5375a005144ba32a9142625292a2840390c48228e9b49bef479923893d2580041044aa5df3f4d579dcb0a821ce2a084b1103539fef5e2c81a6615400cd15a12e7d29b63070e198014e26c4912f4ca96e946cdccc882015e2347165868014288fe92a4caae66d384236b498be8406a0db04b800ce2f45f5682d028276b5d4204718c3f7aa4a5e5a54e8b1b395e8b1b3916d0458e2c4242d2042c10722081405d14bb5392b5c680783795ac64b27f405fc5c514993aa32c7ef8aa9259969c6279f47d7864ff79ffc891d18c0fdbcde630bd64b1eedd83deedfb61971e0c72fe17c5648913ee3cf4725244e54d52df5df0d0ec9c7946ef60d0533959af4b4551175d7663c7160e28870369812076388b34794de9a4ed9b53070201a40ec7d426f969cdd05e264e87630655223e4c5e853ee5f01d0ef001c81c0e7227d57c643c7e544e0091c3d9d3fb7db54fefc67138ac9b2489b1f45bca5a82c329c620ffaac413f388fc86c38d58aee0b1b115aa8e2e1c026e38a99432d765650ce7a7361ce3854bb523464c86860d9852766aa98472201c9e03078d19342e80026481bc3a1580aca15441339646b9241796524cd6de27c4a2854b420510359ca4d6acdc573c0d27b30d3288c6c9cb68d17030d9f24d08ab2daf19e40ca712a326bd4c571022fd018819ceea6342f8c6b60ca753ff96acc24959a5428683c9221b83a5565eccc7700c1d1753d5e55326f36238aa8c90565731a524fc6138a9cf7b9149c560385a999d3a498e39b7ec0ba7d39275394a1c377228202404c78d1c0de28593b87fe12246293983cc8e1a5c00e9c2616366126f82f849290cc28573c7ade5f72b212f07b285b38fd0b1154ad04a723572ec28964007440600a285e39c2469499364dd46516980b0a6e4d6144e8fde73a465810264013b14a01cc812e8800816205838a8cb3ec9d4db528ca104b9c2414da892e4096ad6e492158e31faae8929a5aa324b154ef2bd49b8924a2a9c4cd7c72da9532666a67092bfba7563775238fcaaba49625611d2aa289cdc9257ca134cb098432ea070acd324c8f83831266f9e7012e39a38aa311b4fb64e389eae95983f159f0d9b7052520c1b262c67fb52056f00c2847385b3937f92dd7b97967092a694a4c56283a7669570581157da6c4f775b2509c7127621ba049d419a1209876bb98d214479d87c849398752a47894912b6a1114e27c6f71151529db4398e2eb2c8e13870a01c1a0029c2e17ce3f7b66b8a004284639778ed8a7183925fb288810ce130f2d4cc9c24ff6de68570d8703a3553a94bd1618a8e0bb07a8e1be900204138adc6eb568dc164a93010cea56f7bdedabc2c363f3889fccfa0c27d49b9f7c1f12471641ea1b57346ecc171b69420ec4d12544ecb758884847897e5c1496f8af94e0a6f4ac9ba12e880480d901d9c43347f6b529563626e55021d101101880e4e69faec3efb4fae248100240727176196955f936421c6c149923f3b95b5c45ecf6f705236ca525b84a9db24236b667e0103b1c129caa5dc7449a8ae7cd7e0a4c457b5553b716450d2e0943664bacbc9eee96606470f3d7972084da9dc0291c1692e899794f21e2fd546d60c0126f00bb00189c1f95445cd2047a624e3775910181cd574dd92e9ca3849fd78c5392f7aa9dff8f1559d2b0e3a5e554787975ae5225ab4c25d7199b124236baa12e880080a3e58712a7153e388b08b297f68396ee4c8513e5671dad172c16cd6aad457c5f14bb854350bd20415a7e2f8af49bf68afff93222aced65b157f7cd36ed23e4e714cbdf184ea3e416e693e4c910a0d951a1fa540ad49eb980da3bff90f521c64fa3069adb55733f5318a93ce2651762909affd73da62023bf810c547288e2b239f9aae4bdd87cc141d497d80e2e8f69ac2497bf2f9db9f3899b4556a474f5aa6b4274efd6e3f42bb4e9cc5ec4226e1e327a912278e625535d2c41f15ffdcc4c9f4c5afae114acc851f9a388949fe15b959348d4c1b397c64e2a0dd3ba48950a6265416c1c4c9ff0495315cdc2e335de2eca2b7c1948c8f0d62193e2c713625b3267992ae7492578963efd58813111535895cf8a0c4c9dd2e575c34ff98c431e912f308f313fb94f4073e24717c9953a6fdc78491211d5c201c223a6a70488831537c44e2285a2efa7cec913533adc10724be5df3bf2fa91c59eb2d6ea86d31819090da507c3ce2bca677346ef6fa4ec487234e52cc1e97fbc7cec2bbc3c347234e9bccf435d332f4e60b1f8c38c5b90fa54a965c8ce1c85aef8c2c18e0858f451ca4669e9d9b08252551c4d944dd95a87b41c58cd8f09188d38dc6787b6532f535ef0311c71d214ee58fd1c89a8e1b3844762011df71630b3bf47188936492681ba38fda499246d6bac8b1c318e25c234b3ccd64b7818f429caaa47ebdb45a4aba87a346097410e2749e277fa12fa7423a72d4f8b2bd411cefabe26a9251419ccbdc64a934397b26d3858f409c2dc63c4168ee96e630a9f00188f3a672cbd51759d5a31959603103a7f0f1879320735d67cea0a4922d3368cc7015d4b800a2404808143efc70acbc17cf2b5c462bab4364ebf0d18773878985ff1a2f51914817397694e185e0830f07793f6292ead0fea18ac3c71e8e2e9e29c6fe5162263d1cd62f870ceafccd52521e4e7ac23bb4a5df70920c1e4e222227879fa0adeb1d4e6ee27eef42f4f555ec70909669aba3c4f773ad0ee74e13f292ed9c94753a1c2e2b978c4fcd2d253587a3c6db932ebda46897c8e1945b5312b9cd3531a9e42730e38f389c565456aef8acc8f7e170329b9337732c8530e1379cbdc452cf927a49828a1b4ed2988be5698cb572b6e1d807ab385cda26ed730f158d51c53993cc99349e8ad8f8a6e298df21767d7275f38a8a839c8d7abd3c2d97524e710af79139315cbeeb668ae37ccd99b867e948018ac00c1a5d38044674a006a8276094e23c27e742a6119ee12c18a438f7c820b3bf09c6280e26fb5b839ad3cbb768cc280acca031a3263083c68c92c00c1a332a023368cc282c66d09851109841012c66b40186280e62d7347e478966f587e2d45a6ea14c1067b9e44171125759c33fd3d6ebfec46937d4ee9934af1edb13a7b1a00495efce2d21eac439b449aee9da544e9839711ed3d52ec2369b38e88ce6259c096d1a524d1cb5a468410513cdc4a97f6f734b10a7e2164c1c4fa39f59ec1bd728769163c716a7b7a80181193466d098816b87807189534ce2ecb4b5f74e2225b871a3015deca8916ed8f00cb4a7a0c60242424a70e3c6484888150286254e51fddbdab4ff7c4e9538c98cef71bf689278254780418983bb6c989d4ba5c54223c098c42949296595a4d5e62e248953efa9b513cc826fec23714ae24dfb8cbf8ef70a89e35f95da7c5d49b39c1e71907e5a2aa920eeb49e8e38555217d4ff66cc4a9648146034e26c9d7d9b64d1ecf2b5076030e21c632fea2c4c9c24bc058c459c7ced339670ebc85a81a18863e68d954bd1aa165a1b301271aaad932bf3c698850de5cdc88201a5c040c4c9c56b636c7985b1b200e310270b3ad5c42d6d95843bb26688637e56263d7fa92419cc32051885c894d64b6d29c997e0c68d11117fb7d135eee8008310e7952de5a5e264a9243bb256a800631007e52e56928749ab004310c7a07e167ec653db47236bb8c504688ceca8a1011d366c2060068d193368cca031430bdfa1a38b9365251067d1194f0661a374b303c429e5c85319d467be942c028c3f1c67dfd2ccaf697d29f9e124e3595bd4102747d47d38fcac9cbff75a3cc92405187c38b8e50e15b7ea3d9cdc924c1ba3f866d68c1e2ca48000461e8e772ae643feb6c3b57c020c3c9c4caa85eefffd0e075d957636cd4996a46d87d36cced6139692aa2fa9c3f1f49f64eafc4fa8d2d2e11434298bb1c934f3dd399c2a5de61342ad72389da047895063b1b448e390984e7a9bf822389cbae74fa957ad586b79c3d1ab665d355838c12b6e38658e35653ad486f3e811254eadbc462b361cc62c66afa8d7800893a974cec49243425061a8e11913277985af8ca4e1b06f2a85bc269935d175a0e19c7f332a1bf394b8fe194e522ae5ada3e5af6637c32949b778614bbe31612fc349d224fe981853ca24dc6438064b529fc99ab12bd3633897a5f989be0b1abb440cc77193a4b1f2fdbb2a09c3d9dd4c9f4aa50286b3dbf7cfc8f2b6caa44195a4241334d35e38c6311384d69a9f73b10bc74ce94e550e2529d31d1738b8704c9ae63e665316d36de160562a7429d57c25f55a38c9198358673a25df48b37092d791d3a7d5193b2c1c744ff4bdb726d3ae7092be4793582322b3712b1cff4fc6a421b7fd4ca60ae73d935955b7637254385f4953bb5ca94f56740a67eb1d212cb56f45b948e13c3a47447d8c853ba370b0332568ea1235a5100a2715ca246d49de6750e5134e4a496243bbafcde273c2418afba6696f597b309a708c7e79922a93e1a465599424c060c249f690a2eeaeefa43659c2c9dac26810b75bbf91120e2ac5b2e65237a7514ec259bb8452dfa474fb72483809279695d8fc4999fc239ce2fda57c5fc652a289114e41ac89c1f636968f49114e2a4853dd61314b1c11110efaf289b9e23335363b84936449ccd3e9a2104e51cbf63266d6248e1984d3fbc9a5e7d6994a1202e13027a5d22b4b5329e97e70123a645bfc0491b2fbe0f425675b1c35b3650f8e515fff4249a76495180f4e7287506969ff0e5e2da1437da8df6f644d73ecc0815dc0d0c1e1f6ede4aa82d999520e4e55e28ed237d93d49120e0ef2be33abd91b9c4a840c9baff2998c221b9cb46c1aa12ea89794c4d4e07832c5204e49dd6ad1a5c1496c924a6d85111a9722028c199caa4c2931ab9daadc911060c8e01484a9d793a482002306c7fe4de2d3d4ee9a9a2c1460c0e0202aecec99ce7c06fd2b4e494b4d2ea51cca4626bc70c5496bc3c8a4793ebec45b71903b37fbebcef03bdac185160c48c20b5630666a1d6bbd9b5f0552544e18b1a27ad6578517eea4cb348d7d2a761ffd1527ece42c1d15a9c8b768e256f47d8a7b4cdea43589b5dcb429f497d3d6642996b026a53025e9a22f8c50b20991421363562f29a348bbd4446b4eb73a89021d7527dcf8ca55098782937d9428139574507c6286ae34e27fc3e413eadbbdb79adcb2aaf1049be14ca894625ab774e22d31532cd1d46bd59cd8040d6629b7e9e126de6452cff2abc837d1445289c1c4d40ae55e268c493b342ec5542fed4c17353189fb71202dae0c07d20273dce014bcc0c42968cf659c515fe22459895527eb84fd9696389b583e49a534c24d8d65ce850d749538dd86da1cdf8e4df9a6c4c1a45342e5c7daaf6812c7afb46549148b652ae9800be0e0a25d0121212238b8686f2cbc90c4315c98f94c19f3f505a3f02212c73fb792296667266187c44186f2ad3325c49f591e711031296a34ceb64dbb138484983bc139e185230e2a3e97622f7b4de6ed45238e2242591665256d2835238ea7f5b6bb6377a5398d190ee062e402a9460e5e2ce2941743ae28edf36fb28a389d18f38c9b722da8331147fffa2ee525d9e6ed11714a72429546cf93a4920f7192ccd42fcff5ed06a9210e7ac4fdac66d057cf14e220ff9292364a8883e613a52fef8338e8b7144b57de3cbea1208e1ab2b4873c2526995c20cebfdf23366b6238ab00710c97695edb2b32347a80177f38d5fc26b9c28e924c6e3f9c526ba9d0abff9522f7e1947adfdd5e5f167d3e1c7c830a7f53da4d78d76be4c82277bcd8c331e8f82641ec6445553d9c9429ef2b95462f9a46021d10d9e2451e4e41fac966354a9518453c1c4cc5d4cc68aa4d457364ed0e470d938292fd2eab67fa0b3b9cbd84c97422338952621d4ed9a397440ba74ecb4487638c9b53dbed9a17bd9163870eefbdc0cde178726b3c5d7286e9725350e3590ec72ab12a681d2f111dc6e1d459f13b2aea6fb85568bc80c351540813174f8c96692180c6880ed400733890166f38c4e82b41e486d3c9bc4c1553dcc6fa369cf3bff45538bb6c97b47143648d022fd870558ca66b194b9990088be0c51a8ed6a757642c41cba46e642dc78d1dc971e8d8a2c6045ea821ede31b4f0922c459501a0e6db2453d8b419f3ab2868683580aa5257ed49576475e9c0151e26851e1f6e636837eb6195bc94a96132bc371adf2986c8c51c62491e1e05e5256d16dfd93e2184e2aec5750b2bc522c59319c2ae5a48dfb97f284aec2709252fa7559bba44fc8c170deb08d63d2bedc46d3174e4910bb95be37a344d90bc724c97c9b26255f847863c71635ce92012fba702cf13586d314f4e9ef5c38e6bacce5d05b5b71c08b2d1ca4c6189fa7d6f2ff480bc758e59be5c459382657b558b2fb6fcd8985532c29fa99085d528be60a275d921879b15be9c6c40ae7d88a69f1ad2bd7e6fda20a471925e88a2773d38726c70d916cc00b2a1c3e53d093a14774a8176d07175af0025e4ce1b8d1f7dffc3eb4942422396e88a000e528a60f782185638afa6934f78d4d0bb40bbc88c2497e89a95749ee6fedc85a2a2bc00b289c2b573a93bfe79edf99e08484e0d0228de0c5130e63b79b256e2cd444271cdb4a504a764ba3be54e945134e595244acf6eba9e9997050cac44f1347c7edb44b3809b769e45b73a6a431251c637b2853c982c56653128e9779a9e45df0d12b23e1b026decbe8bb536284473868dcdf3a31ef0121217a8290103dc1814186268e7ef2bc84c9d3a73667e2fcb5eb23c435579e970258cc30509081896316cfb8bf8b232c4f645ce26c72dec9be94f2fa5d6c46160ca031838616690329054608199638e94c32596e8fff7d46160cc8e1366c201a33b2c06246a2838c4a1cbfc5c4a5692c132ca7449260594ee511a3e398c00c1a3370dcc8a1800484846016644ce2e46155fabf7a7e2b5c08081992386566879d98effb786544e2b88b1dea7476236b5aa4149895018983b41c97cba47b02ca04198f38096e216ec25376e64409321c711a25574a57b9bf4afe8320a311e712534ae72165469cfb64bf2bcdf6a529b38893ca209454de9792eea588639c8a2a757a4936ce449cbafb2e885bff9efc21e26cf25cca99727d8893989a4e97d2ce13a631c4a94d5eb3e5b1bad3650f6414e29832ce29b3f4a3c5a2c640904188d3ffa824e60a4aeacb92411cc45c5f5383beec8b88031982385ff69b98b435abb21d8853503188fcab09265a8a0c409c5c843241dbc49a129d8c3f9c37e5187d39c4095ab11f0ecada4ef36c9f4971f2818c3e9ccddaff43347d7d669d20830f47f5af92ca4bc54456f6702eed18d5120b42255b0fc724dcfec9603994a4a93c1c4fa8ab643a453c9cb469c92785b81b3dd21dc8b8c349ac989891b75f66f232ec70f04d296c3cb945e8ce7538995465956944c3be47875392f3253d4ddc55d3399c549053259ab81c8eb36a1e5f412e45ae71389a481913b53f49520bafb8371a453f7dc3292cf32641ca9cac3371c329b3c956b2ff2879196dc3312ef5a68ad17b92201b4ea19af57972cd7ce46b385dbd55086d2a6a38c7952064894b11d3571a8e1a67d30911254b4c130d0719533e79b7c4661deb0c27b14c8cb94513eebf34c3f9640837dd16553f746538f8ef85efd9d43e4924c34133c585d29745ce3e869358d61c8d75cac2956238f8c609ab63b1309c8229e137264f8d0a170c27cbcb77625dd2392af685f36e2ae9cd24d7ebcd0b478b5ef13fbd6493af75e1685eea4e46e8baba950bc7b5caab1062bf2e865b3806afb79343673398182d9c33de09ca4a36f94a9fb270b44a429a12fe46a7695838ee9f4cdac4ccae70f0d573bbca2272adb7c241f9de86cd9792acf9aa70fafe0a172534e8659b0a2561edfb43e8770a074bd1f439732605b14ae1b8df3ab7a382bcdd320ac774172625d7ca4d820585d39d0942a65daab4583de1245e9692bba377c229efcafc8bd46c7fb70987dfb2cc58bb98703419f72646b64b3828a1d7246b8db3aeaf120eaab486909fbfce6d9370d271775b2d2d2557868483a7a693c7247dd1368fac2d41c6110ebae74797d831379919e124556b9ccd678651528463ecab9a667655e68b08c7fe9099de372acd6f4338a50dfaa1312cce8e2684b3ae6e0abb319eb2a00cc2d1929f778fbb40385fe8c6f238694f473f389bfa8bf12bde33c9cc0727b9cf4aa8122ebc95d583832e25053dcd190b35f3e060b124b9442d71834c6f07e7cb619250f3a60e8eb14f8c9b22b71c1c665325295c4e6c0fad0c1c1cc4cf5a4d45fbcc08c9b8c131aec96b17831c6d92a80c1b9c54aacc2477f9f92829193538ccc8502ab49c09ca743268703e39329a88d57a4553c60c4e4968c59dbcb9727b284306a72e25e554ca6fe1ef95118393a4192db3e9d905b764c0e024899b3bad73946872fc8a738ad21c9a45c615870b9379f2e816f15d2b8e416d08717e1b9692c98ac3fe8afe9e3529c6e2559c3699b0d63d69f396ab8a9398b8172c8aa57c99a4e224c6aceb464baeb91a2a4e426498ac71d3a54ad2a7388fddabbac664753a531cb35af8d6cb58298e963a33a665436fc7a438ea89b541adeb511c4bb64a3a4c8f7c6c44714ae2b785c9929b42484371bacdf5cb0cd99b4ea0380993924edde4b2dea74f5ce1be35c363f4c451e4a9b968ce3c77ea4e1ceda466691f99132731480b5a3dde4d9cc4c49859ffdd2c8da58993885413611a4a93ee32711283de2466960c264ec24293bd8d387fb92e714c32acf50521d457652c718c5e62261d25fb465f9538cfc97222cb77b4e80b254ee9a2996962124784661267936b4d42ee87660a2571badc5227d76c8e8a4a244eb2093bb14f5394dc1e24ce56d1fb2f993caaf17cc471f308934dcc93bbcf1c714a62de56d079af79b4469c94e89bd79b42582a39469cabc646a511f22b457511871993963fe36a34311571d44c49a6123642880825e264a33b573bb4e92531224ec2fe5655d01ee218d4fc7b43cc581032431ca49cdd09b929edeaa510a73549f34cb2d110278510c7dfba8b2973adb2290de2f85517f5e4bbfc79928238692a4946863510679362e7093aa46ce600713451a4ae9a70fde15c69dffa5b1b3f9cc410f6a11a1bc3ffd587a38b6b7c4b29edc24cf870ae19396d9a24e1b3ec3d9c6450e36137a735e37a38b7cc26d1269cc995bd3c9c2b8911769ad1d2eb858793cc9a9ab33317f7a4dce19843e6c58ba893278c7638a90dd77292d26b0931ea703e31ce46db645ad1e8706b8941e7a8e3060e5c27c498c3c94e570a112b8d11d26d420c399cf2c46b460df6ab5eaaa1e30605e2703eade3dda2844b42d50e18814b408b1a212122367068512324040e073525897c2bd13a5b2c428c379c4451211774e6d448512b21861b4e5284ce8d6918a30d96b491258c1839f71662b0e13cde270993dcc6ebbb2db670400d1c37b2702e4c50630b0c8ceca8a181909020c458c3e952aaa4bd36a96469a486933863961a32a94d299e1962a4e1a046eb9209214f2b4631d0704c32932e19d6ec528644ac9ce19475b56bce94ca3d160a882186194e5b7946ebaa97247f6fa78618653886cc995e362bd37ab4430c329ce40dc2e4eebf5e347f0c079b91a264b6135ba42c86e349c2c8594aa37542993887186138a94971459d244ff0354981f716341070968618603897245ef4c6d2656714e30bc712ea64f19411b24723629a6a6c71218617cea675764bc42de913d22246178ec1b404a5e45c50d2c08c2cb0d8e10cb8e4c24195bebe0da73526497e0ba7101d55155731cbef5a388cd8e512379eb2707893136b7fdb9aa413162eb124cae467bd7756861857b035c98fae8cea68054f96d514547e8fd2ae0ab5898c8ca9ee376aa9400c2a1c6c2e78ac6db838969d425a66c4aeaae9b7434210190931a47050b2c4fe561aa53156a2704cb393d2a2fad92641e130ca2ff5bb49fa2b944f90410c2714463b54deca628bac65319a709e4ddfa1ff330553310731987034993ce5662e654fd3c85adbb8f13588b18493ab5d0cead2c73f88a18463bfc89a559bcae8598c241cc3352d7598a5285947c2d1cc5fcba42f69332759c438c231c8ca7c4ae8eac60e91111d5ce0480dc430c26943f799a749166cb46c254868c7057228403f10a30827d51873fd3b318870526ec1bbfd6a6449328483a951ba1ebea67b5ade253184709035e3727e6a3656384610ce765ea2ea4f5ff8d48170b024e93129fda82695f283738c67eec9b3d9654e1f1c34d8585dcc95d836f6e0642ad5eeb98ecf9b37b26636060f2cc4b888b1030b312788a183d36c8d3a3d95da5d64ceb89841e36c08317270de939424995ceb1934150307e715994a7909ef1962dce068d2d7f6865349b6b6c1e1eb4e5ea68d2747c9d7e01444551825294b96bfa7c131492e2ab8a9f8d7219fc139646626139654bf2e83c349f25b3fd48c10261d230667532794d2a6c22f093b060c8e279349516ea52687c92b8e2d222d659320579c4c091926ba09a5e4caad389ed22c594d8559715e35a52ea55cb7bb078bd4a8942fc6f260241006428140200c0a0588577700b3130000000c1693c542d17048b08cf3031400054a422c503a24221e1e14148a83a1712018080402023118100885c28060201c0e09c77090cc0729e7cd69e0f8f0113eee74023d2d5f93a5e47ddef1385575b7cb5dec920c32981657051a1400b93aa4ad2ee160c8214936fab78152cad097af5a32ef30a8f155bdd83f132052432707353326a83d60b62f7f6acfbcc5dfb8a8b5d46536e42f7f19695105a360171209495ed2bf1da28a82a0f2f2eafa67ff5d0432b7fe8e0aa81e675bc5b4ab2418e046c954480a5af8954ffc3454bc110363e7d638c969504e2647ad421ae58204566bdc265bb693173027532a685f71dde7952a61d679a496e582dd1f4122626893ef1da2939ef7b64f59b8aa59d14db8284fa61648de288cbb6ee6610c11852f398c984159adffb9ce55c01669a1a45653752654128aac70972dd7bf21a677c5b05db81692b88ca59843360fa08d5e1349fd95ff23917bf709f285419ad63dac57da1497c0b548bbb5ff65e2695df0d2b670ffd2853bc6d0ab25e0c51a555649fe8ba37200172a4e116d0714106b07ad2e2ef2f1fa99ac0f11b915f385f2dca4546e3348741f426aa7bdfbc0c7327639dd452fcd395c1c1ce6d4702ded3127888f0cccea71346e66abe822f7a49d0de4fc74f9b1e2b2108bee05f090ebbd63d7a4debfc75718a7d2124ed3d080960ad1cfa39e4ca2883167646aeedf068ec87cca4cb6063d14c1e85568606243fad6507d06a042b5280e5922f6d9415364d342cd2887e4881a96506f51c0b227a33248216914aa83da05b607950375093500750d150dd427511052f084cad2358b281a02d43ad48651975243a05241ad43f143c140f12214d4124135545a281c286850b4056e64723c286fa877a891509f2da83ecf2900d7508f5a14f025aa524e0bea5e285d06b5a14ea0b0a150822888f22b4816055c0a0e0a180a034aaa1a1547bb22676616a5217502b50b150a6ab0410185dcada00a30aaef94351918a18e3e5d3cbd7afa3dbd3e8d789a7a4af4b4fb84c3a2501d37c9289c1fa52315056a1b8a060a2014050a355178de14b08978597e4001335ca02cdb624f2846d54905200a4a8b6c5201d54733983b1186ba1554b6e438ab4e0d55c0f2bb233c9b03a50d7512a120295d86354aa1aca0cea1eea19640e5827a439187c2812205858782870202050525180a1f0a35a0e2984e48472594151410142d140a287929aaaf196cdde268ea419502d6908d915251eb59d342f7b8a116a0b6a126881a2815026a20141c1410347530d844516bbc8ff001884cfb65b1ec806cc304bc4a5071817d35e5f366f70bb872751a959c108bada5d22d8c45f5484087b7df77cbe6c21ca41cb9f0c69dde7c4b2c14d61892e4922104224ee0d7355dd088e61abd701b504fd5ae7d9e194529e04d4520fc51d6dd58d54e5cc58d5fd3e95a859e813cc45f00be4db28d19c80a274a1565de3eb9efa3c61a73805ba683a83b4114ed7042ac503e9e7d2f9687ab445186cfa6896013c6e4595ac844871f0dd50888914ab0abc4a089812fc9de1b3c3d5e0a3a97544d0afe5f88b361eb4a397f947a15a94c8b51ce5b1fadd73b83d0dfe1ba7d49a89c8bafb27033b8e617d1f93fe46072d973be8b66189162dcb411a2c575b8838f201b59ae745036fe71f75226db1279b6b5abf9de50d99c118e5302d7c96183361feb485c8eaa17bd1cb5e72e347b9f128610b0fc877400e6e8c69da0f8f891bb95bd556351d9cb3932d8c894ce887d2a5e93a4f438083aab25657ead900ea0412b4e8c303b6f05ecbcf83c95052c0437fd1854956de60bf8396604a2d81971169a538c7b0cfe0abb80acb61b4113c7f529d1c2974cbb481e003039045d14602021150fa56a2cb4d50700e87ed6f2873dc53fe4a132ca31caccf130fb6378fd788bf8ad8f6276342ee069ae9154ab9d46a6e6ca13a3f98d9094d6d51b89c4c4c2173c188202771ccd34c070982ef1107de7adbffd416b190a885755f4b1bc8a234b99bbac524729c1aedfa8398051fca16e05383259c42039b8d783111c0af3b04847505a99152bda88efe0b67da39110995bcc93385319786c4cff7b252c326cde01ecb28bdb440f12490cb10c8166f893864433a25a1bc1e833e2421c417c486e7e9b568c5244b807d221a93aa49b30032eda9943e246b0a4e032044342e8a31a1ac36085caadab256ca59923f1c40f7718431476f1aea96da17c1e7ce88b89f3d229d232e7e32427329d4f44865965ac0f4cb248964c6cbf4a1b09196194b6f4c65527647875e2b916bc26a020fc515ccfe60295cd22b543b31c201f9c38e7af7495ff5954aebd835142897548443a463e909e54d2b111a1513a3d56efb7770f5adbadad682a81de8b738a8cbc770b5f5a73dd8fb359c0f22aa63e6d1fb2956a5ebdfeadd13ddecf5576643e65d0021ac321649a78d3a57d755c64a0fbac9ff2c3bff8cc6a0f0e21071fbc8f5ae30675067eafbf846c63b89bf8301750224ba5aa9892b34293f1bbc5dba93ba3fbebdd7bdec472efb9b870f77cb61f6a90d0352c7743752602f9db768be7bdd325d6a5d065a50b97bb756f7799fb381d5a2ba95c2875c4ea923f64756bf5652be5aa1ffbece7aa9f443b8019ed78d148e0fdbf96d4688a119a045123d7b010014d61937193f1c23898310de32869ccddbba432238c552763ee267c2d4c8c66327adfaffd0433a1247935a36e3efe002212dd34dea6b57b96273b6477b67de538c13a6c48769eaad644e3ab37998be83f12ccde405144a7fc7c02d25a717993dc83a1f8005d1c44722f7091e0ef6be7c6bd3c6636df0b56fdeffb49c5694e699d521a113d75f0f057c567526cbac2c490a3e82fc863281b397e8f3dab99a693a2e4412475f1ee41eb57547e7865299c30fc5940b8a6ee61f75b1a88ca0ecdcf1f86126c59037c083aacecefbd19ed4f58e44296cded12440f0405e7388c5494fc6be119c8c4b1d361fb2a5e45a84e0c746b75a8d2450b1db4a1e891655b1aaf8d2cea6164709e474794dc1c5e7dcc4ae980b194e82f2a7f8708e6a01b94ff24d369429707a5c8f021f59107f4b38c3954bc9162f5e8be8857ee798bb291a50d712b9cebe61e0b683908cc723d11d5a8bd86f785ee6f44918e053ca5210e2136529887ec40418689656d76dc4dc0570ca6cfc2bfb5887aefab5eaf73fc25f7ac94b2bab7c7cad341a6ee5e9fcafd4808ceb9153fdcf33b66a02309783a28814f35764e576bdaa01b174a83dfe2aa9920ae569482ae684941674cfe75b873fdff08ce4e5cc8f843069231198313821be213570a1f6ebe036af6904c9da403c3644d32b0622311b7b08b755f654460ce2090b2c840519b422afd369e040dd678700933f1e392f997c384a33a0cca83a0466f6de2a553d088b9003da915f397b20f1b33ee793b4464bc1d8153dd7043da9a30eb3011fb1e3ac68468e032d86810c660501fccacacd45f0683e20f9657e67c968ba06580b80f668097a5cd4d5b4e2e60f13d586f04c57ee46e70307ee104c1f97b0e6d182f188263bd52403f488142ff92c68c80553196846088f7549a0180188006002100078019406606b4b45de6b40a30020cb8fba03b817c8077faef3aa9c037008b01905600a3cf20f865528d000252883c286e10041541e504ab0407048311800b50eb4f3184b95ed993387d381b2d14867295e1c3ce90bb106070c6e0cc665fe8c9016d901af4d380bc01960194010687c1e460182d364034f83678f1204910e6296c441e8c8a556f3cbb75561606afc8c103517c3fc9e33d0f4d4d2077ac8e9e50f084ee29803b901705d0bf0621fb604c8d509add22501ab419e06bb0f945f235264c30a605153e5bf4c37fd7e57eeaa445803b832ddc8d8ec6591fe1c109d662d403966210b4a70872001f564d04082670cf2e3e2d8d276692bfecc0a69e2334ce9cca513169e53d2e2482410370a0564a369759efd270dc6afb0e086f765cf25c6a0eb5c7709ebe3b4fb08169038d89868df1b909e62c692122f9f985aec8533af038b548bf9a100829b04ce01de50267a746f1d38488e8a164627db3c08f13023aedb8114eafe8e7f1eb5f27d436c50ceddb6b0e3be67e7c7a5291b287ec33f20cb0a9b1a9abff6a13070c7d6676600827718b6347a74e1583369f49161ba897dbebbb25553adf65f5cbb4302f5f5d274b451c7c61cb9f0835e305dcdaf155a6f29ad87a93ba633c084fb7c474cc3bba611ae06994dc2162047f09b62035788d0361bbb56e00410351bbfae358b6353899ad5c50b151d7de71e9aa40258035e7292844292cbc03e4208812aac049e967ce5a6b08fa0a0c075869afa1ac2eeb8e22443ebb0c965d3e295c424ee36026ccf78ee4fe31198844dc3e80b7e1181ca62d013c363688e05dbf0778ad5092178af6bbc456e0e420421880c8360330a2b3cf987f0aebfe28e3421cc6fd9bf26be88f5681b4e298cfa6c76ec89fce03659a227a8c62daa68f9149adddf498c55b8ebf4f8dcfb52ef5870cf710b519d478315b52e21147048d4665bf4083d3a5febeb949cfa8b0d28f8ba739285545034a332cac1720b53e747908494683a614062800285bda0911f49cc9417aa60272eb5268011569a11a1874ee7434805eea0be9824161f4e9f956a5ca104c32cafaecfb69c2d237a9d207dc110580e7a82d5d1016f01e3f5169bc0bdef57a8d539c35c34f483b844b1b99ccdc1a6ca4c9244530a32197329c4e42bad546b594d311216a8c9a73e78ffedc775a7873080c9574e28e831aafe85e1bf3410392b13c8ab0a695f507ee4a12415383038a5ca6c8a05549ca00e7ff904623876f2e96c12fa2deef4c98f67206c3c90aec4df61389734dc018ed6564fa5439189d070fbd63ef0571c85a54dc35302a5a0fb513c2ec62d9a02f5bb8e036fe278f7b0a4ac8f1831d3ee6bf35472c4983bf5b6bf474f5293c621c16381c47ad436e34650f9094e43572b05d7105da52a4ce2c765bc203fcc4dd14c0a5e12c7436678fdbd9c6cc006f5b1da87d04e1887bfe85d20efde9953f20663e19c14586d51e1e5c2423a36570e822684a10a74edbf1e7f9644986e7202e6310be1b3d3067cd2f2f408615faf2bc428ba52a06e0bb4e1bdd7ba17868850e0fe7d2eba2146390583a05690a450054906c300a9d0ee0c69ec92388f06a7884c9c68f7a269e06fe81c4253b0e3f80e41e338d35340a85738c4cae189bb0565c606d73856f26a7d90db87f0619ff0e956bb871989b20728f576b0108a4449e5ee8508a259cf346c14b20b813a601b9e0218b469793a6ef2a52094a49db06507cb3ec04ccb65464f7c066de444cbd545d78fc142439d0ecbb832c2288c55310cd7659ece369a8f569d2cb613f1436b68f858b0ae5938e1385a6e18b033c153260b5100b2492e628a8bca8d982429131293159cf764334ee47dcb4e0617d9e62f9925259bbcc42b9f049d32cba68d2ae2f9c5c96b288dca6d91a8f64c5fd2ca5a0192e44747a7f45c4a1d18a8bd57f6a7f19376a7d5204d95ef544720a63ab0e9f14e4bdcdbd931016b126d96d48058f54defe4ab50652d21eced65f1c632172873ce1313c2a2d410eb0b973d8f97258d058671994e66645bc9137c9047d19af66d613ca05976c47250130637d4c6ad2b4490b8c725d9d53469da301aa96b21bafe1c8512b4b501b9e3fc4b711e780e3304ec1875b1e422b4617f6c3813c5897330d27c5a635d0378c02db1ad020e25afce008eab4802a9b1f18c6e97f52c2d10f4408b8abc2c66d4966aa37525cd40c5403ad6fb5554d0d3864d7978a62b34189cdecad4df78b6f46b3d780c07cf4d22972f85450135d9e162f9a33f47c1c2f554a463a03ab8eb2d279003a4cbf5fbc4eed4727ca390da80b92188a491d8f20101c6ddad73cd1ad77f243c7362de75961bc3275024e0c6829d1ea809feaf60570152c5059039f0da12b093da1773975002fc8e5f6dfa5321568c358ae4bd111699044171474138de56bae5b8b4410cce48ef87126b5281cae058f46d1a29eb1a57d9c1b7d8aec61ab0405bd57a3741c723eb68049a2d8bfa0f46a20f46712887c3e285dc4cb9632a39f000417c12c62be325ac270af0d99112b6a2056a0597baf27bc91301f5ed393d42f8735208213bc7eaaab2371a9d5dc22f43f2d067ef229aa431a1620267b576890c43ca5483a3332f0326f506cd41eb56113d9559eb1e28121a9c001e1cc6262631f72f26e49c440d5ae21eb4d50371164e4f77d09199e09ccfcf16b47f0108330ca2e9f11db243416ea16565c57b242ec5d9869ed0e8c1baf5daa97edd8950a870b780b28e68fffd3a9f54a3b99804d5b89c4e7dc9c3081bbefe9ebfd8ca810377c099a0bc1f05d024a4d72e930afbcbfaf00e6fe848990c79e2fb23cdd51c2eb6d530293ba19603952eb91b1d933632a094416ef1ba7ef4fb43afb4a7eef472cef3a3f68a1901be51d7a88eb62887567124c162402ecd6dfebd9827d95f062162b98de5ca19dda5f98403d2f6e1384a67b1e5e0491f61701f1dbeb645eebdf1fad1435dbfe859d4d21dfe41ceefa93ec319d23d9312c27d0848064c7b09c088ae6366586ca75a2559036b5bfe70193a91cb69e7ce7a6d1d1e3ee0953a76f17658fc539f9f8d36deb173533b3f952c5be78f4351a6e8a5ee3b9bf4b2cbfd52b1c48dc825c910b3252d160c3eaa198a7b6ce258d4c73a6ffa75c08db6ee6540546b2c7a543a08f1252db80a5257e53776316b04a512eefa50ceb974d1ef5c327ab988c49874e4fdcd7dc881c3b4077c860dcaf45520a22ded2f47c09bc2385c4ebc7e40cb1e9b1ba241f7c542ebdbc5da267fd16639f603fc0de8f8212b3c8ab0e76719bcdcc121b3c726d88b5ddaffe5d3cde001bcb0d0ea528740c520a98d58a9e85c65e4669c7b59609fce565068cb0e73b4477ccf5af0888c959f44a8b1cb6bb216c0c285a815a8382ca0510a69ea851764339f69cd1854f13a1d6c04dfce5367d026d9ddc10610523e0e60800856666d054b03c85808fa04ed77a0789ffcbfd6259547ed7c3d14d5f72bb00ead4172161d5a212744378804a82a83103104fdaacc960c91fdf18b5ec2eaad67fd572d36cfef8834463dc9bbd311da158bd0c027224ae09869633c3224aea1f47502dfb017b2bd6b1188c3de087bdd51b947d34ef34b3985f73c2442185e6c2cb00f267084570ba80308db6da9c857c635a8dae1b4209e810c44644da01dadff717f28d50ee0630515bbf0092f9ff9167c6df0cf3c1cf77be65a800439d9d6703c2839168bd60f4649e2979f5894f4fe84ae680fc3d4274463291dea745949e2b5a03f77c1ccda0eb337768d3d0e352e8c013b6ff6c8f5cd509b4215c0a7d6a4503f648daf9ce402404dac4de3cf173e20a70c51ec43e9d9670ac45a6010adc81d1e8cf243ed08a58cdfd9b615a8293a2946c91ebe1c949a47ff5561f5c26241a927f18260f0b2c94741ac5b5318cbcabef72c09f4bda85d45017a3a2a748182d060ccd9648567518fb2651b76ce714ec96d31b0e2eaa69a2eb9654ff8e506fa71f414cf41ee4e177cc7ad5a66086f7d19c86764251ae75609ae00b37b6a4765ba7005dca4f16302e2175b65ff37bbda7b813919c98da27c57bb901546352fd33c50f6e1d2ac8c182e4c8919f81677c110f128d02afe9bdd52a9c9e274c47f5f11fe586bc1b8952b4e1d14130a67b49ddf66a7fdf7b2c2a0a8169a18be545df81dbf8223821c5c0a6c9a78655cb2116f9ac463faa3676941c069718b5652f8d59b8b0721303c544b36a21a3093463ec014b3d4dc558c0f1c40913d46ca6d6cb265e1ab95ef7ece6952a0070a2bc008ae0688e939df62896fa5346d21578b25e884d9fb1457cc175f03807b1a5c3ea301b3150326a8b9c03186f50a6a5c380fc79e46d199700568929c4960cd7a98efe92ff58a47d7331e7d835c223cb9d58765f1e8db13e67b5bf188f54b46a01648a838403f139c6bb181e813ceccdea0223e3faf30b4cf53d55e5631c8018c4f1972fcab182c0d2eb25920d71708190ac4b94ddb884ea6828bb14b666989f15b5496960c3fc5668ae3e6b5af09e980d915ef8d911f2e42bc65c544dfebc6e420572b4b1164c6270dba54b61c3c6089c0a605bfa75902ec64b166bf75e5f3419e327a54e94fdf2391ec9877d3a345377a20e96cde2090c076ec0afa0ddae35d67016431118fdf433dae573a10ae2fb364e8ec3127912629b2398b6a5a91022cdef2078b37ee1fc98d1d42e954b98faf1b8f455574b0522c00e1551adba281868932148ee8f9cd1d30ccc9598ad81e88e8fc1ea7717e28eada21739d9a832ece0e76a297691f9b6f9b81fbae3acb839b9f041276507d9d73e2130a9acd907550b00dafbd1d981016fe214bde7bea2e8a116be31d8526357eb96cee54c3e82ee5dd5e34a0bba612c14a9048a93fcd26751aca82de6d843b985e073bc7d16f7eb04e64cad38da5c751457833a30234e5f862293814947a245621c45b186438fa70aae124608a15bc6dd5b0402d1209bc0b1ae51292d03daceca0fdb6970a97246a23022d511351232235e8e5890c88cc435da4d8ea7306d3101d44555f87dc3ddbb72805d534d2d1232e0aaa66bb108a3420a85a8b0d0aced40961fbd5c4891d805323a4d60a0ff605227b01955bd4d5e88b0e89187753f5289d28c0e4edba7dac33a3c8adfb8a0b4874a888abe797ca6fb7fb86141403e48852c1295b47a90e4e0ec2db18df7d6328c9f382e1e60889d9257032f108b4fe1fae9268dfb00f10672b8fc2c5c47f25da613492768e6b1a3f317a8258bbbdc8fb5a699e61b39577ab4a288db1e1c53397e16ff1778273669ec16147081df47a1f90d4478c8e127c6a0573589f47f615736e5083c4904ed10d4ffaab2320f6ab9f3cf3534ede14cd91f8118c81d166526e66623a415d4a3d823619936cf694dfe1a65c4cf7abb8978bb6913d487f6090c2783b5cd5e4effb98f682f7453faff6bf3373a8124d79540d14b3148b59343dcafd393dead3a9490d855e88fda2e8bede526c86b96a7fb4d96d9a94d1f1ea4d9edbe553058fb7ea2c73663b4b5553a7688d542349582de0ea5055f37c0a919ec0c0c718494bd38e419e2dd467c28828908691210a1c398e812dd20c4c444243429ae344c02086abea2dc19c62e64b0660c7cec55733c2fd742820e4443ca8615927106ec63b0b97b372df562dc9b69d01702cd8d7e0b1079f0b49fd3aacd5ac841698c1eb69096c9c379c8607d7dc691b479ec8ba2ebdae5c2454eefa3d91a013440b493e4d0f8c8159d00c8e4a7f0753149bee26d9ae8ccdb99c8f4d006d2031bbbc2aaefd6a72a40fc5512a1da29270df5aba9478e29c78b08397fdb2d46f81077c817e4b9489d99339f8255ec13c20f2de1ab44d6998d43830e048b00aa033d028d809f00470f39b1f6a46268ada2e268081c92bd0f0deb10cb70f312ccc8752d682dda0459ee6727a7bd55d9ee7bc856d625417f43a3590dd648423488646ab5cff83aa9a0d918cbc7908b3ed2adb90ba2883d506e3fc20e883bfcce2e6b464aa1fd9d14c57435df633dbd75b91a100b4f72551fa7a47af6a583740758af1c91325156447b626b74365a53b5f937c03f8602c8595e7fe5bd679edeaa43135068eb54661bfb701cf0c5f93bd92847d9980b5c3a534ca16f8e09ec5346d99672a64f9554dda8543e8bf9cbe863c6f42ac4501a17a9d28d9a552d99569a073258d4724a490ac6a5eff1cb3a89c15b1490a567b9ba14f0c17e61505d80cf1fb2f850828a09726fb321c1a1dcb795a165141286c35b6ac0310d891c9591d9d7770062f4732f749e8788fe6dcada9930c4b76b123941869d4bb252365aa478a98bddbcead03c3e29e61121e0f1ed61396c8e0106c02f18cc154a32e2e7ee1fce32eb73916f57868722a000519b3aa550c02bb0610bfb7dcdd18aad8ec5687494c92155ec6a8bfc33fb0979cb7c23fc5cb5d9556284eeaabde1f7ba9c6a6930c4c7df2a288151cea0d95bbd37420f316d4d84bda02ed1dc4ff3b2a8676578f378f9ea14dd89312930e5ca1ec96482b96c968386f4d338b6043e5f6a5fbf4df1153703860361c8c7784ab30c293627c2faa695d63c170d980c2309f17836f1b39cb84f486d593eb037189e23330359fb2ec940ab169a5e02eb6e889210788feff1a9e6f31fff481a39b249563c918eea19d345eaa180a4a2d4da934b91b36824ed1d6c4866e2d97247a711b6283756181189585405385a85a51ba5ca8cc3cc6af989873e85093a525a121e0d244d158e2242a7a85bcf1070019a2958a0a58add3dd53d6ec8d667020ab9d07bfde6796e884d4220e62c9a7b1ffa87b70070212d313cba777ca091dbc985b06d88c27fa8d34bc950a94aa34167b823dc51070b73a083f8a61104ff04c24cec24910e793b1e3399a0e9a792d1fce5101cb4859d54d7713eded17dc98dcb40d521db46c6de15b1debb0ee84dab5281dd6b045c0e38085b7358b7db1abb3b1bc82c41f2f17b22388acccb0fe0a8c82cef10c4c8eaf9575b9600aa717148e17805b17a2643f33841d99f4d5d3e56910c64c0c933a03abc356b065c6aadebf08c2cefa396cb3bc84fab79324b6e9f1f8ce1f9c696bd8694b98b3d7b4994a01cbd6255069d8407344eee029baa31ef59b3c0e610fd2dc33dd428685d5d6e7878d193d8a82befac6ecdf320bd0499db169105acdd0fa4d5e1dbe3c55e23a3ed677067dfc88235e84686168ffcd9017d1d93fb37210469f300220a9b0ca7cf1a20d963678f949895862de81b06f1d3dc45958363194b9b8fcb64a488c164417ba15a2ec4aa010602c0732d68bee394401f20cd86612b579cc6c1481853ff1e9a00f13bff307e75d0ca124cf1ed7c17019dc3f0cb47bc3a0d6ba9dbcab70ddab5d3d90b7fbbac868973cfd89b2c88c36aa77e43d83392caf359e38398861e4a00948a29d8daa71a4b3bff4a65427894d09cd70f82e6310163d2ef43906722d06b60297f50ef427b5af030a1d1ee92c667e485927a89c9b92c3a8f914acd08eaa40c837493abb915786ecaa6cf667fd21121e6e1988dd03cdc4b081e96118684758492108c70248c5038151c6af33d041843bb4807ce2cc794a54349667a5df76af7ee5424df7122eea24f9e677b0b566f8a203a1e90637cf27dc2bb7903509ca4992980b865ab615d73fe72c85b708da54e5ac0cd3e65bb39dd05cd063416a7513acfa0d3283aab70b2bdc49a4e75061f36b1bdf1b426db2f62a92986f8aeec4ddadce98bd5e3b4395f94eda2ecd9924d38c6eac139561659092181b66e5bc0490e6bdd3482ca2f6df8a995e41b21429e49ab3c7511b4c88da7d8788dfca8005950673bcd370b874de8addf80b89af2a51253a9880f149ba7229ac76a5935ba49bdc805e6206f08861ae45eb2981678ee52e307f8097a5cf59bf2145401c01b1a028a922a854ba80109e6e924b2a722bacdec4b8e2d7430a99d02c3780b068919eab9fb980b425fbbd358727bf5a40cbf867ed0abaa2356912390bee28434c5420454a8184ea6999a0833883357f14d753512114ef80a4c2b9f530f2ce8a640090881186f4188d711058cd4ffff3715cb863ea8e14011ff1a74ab7995a30dec5c316ac8446afc206141fc4a7b23bf519f5eb5e9d5f38ca3758c6c5e32878a512d5bb1a74fe86a7769c7a34d70d95995a89ad05413872d0bdd6b2939a8e7b287fc4e014b9f929a51124cc1e788f04c357849f065ca836562a6aca6249661ed0f42998a464970cce5f703f64c82693fe24fd526160a8277421c3fa86146bf87fd16401749aa504c1c4de7e07a30f8a39a8da67c244b0c88e247232428219495470b08747bb10d42c222919bd24bbabe478df7e6e86c1607139db9466ed0b2de98ad1fd9da94a516f3e0af479b30f01014450fc2455454362bc2c0ec6de2b37001cbb8b5819887eb9f4244ea298cefad682ee85cc91145c8b01059a56631a0ae98b58bfe08de85de6e8bd4cfc64561cd55e03b40bd1460fb69334803dca2020afe63a63640b2a4d001ffffffffffffffff7fc1daf6ada61ac4c894a4f4840945a26a76534a49a694b28fe6859d2da7029c23a411d267fbce3d082e0ab70a0c0a9b8911266194a9d5512de15b5a8449507a357478ca7b165284616f4f7c4b121d22741261aa52a97c54c922c260a7bde5e4b152823a0f61f8987fc15a43986488cf65b5fb3929b310264187ebb809da316b2384b976ebfe4eac0661dcf79363ed4df8b8980e4198c4d2751f7425258927e14247204cbeabd5f92e3767eb0e4098b28ce988ac7e0f1d7f304993baf54949aaff543f98424e654f22323deab95de8e8834992d27f3f4e90f7b9b3850e3e98ee2ebf8853622925dddc8e3d98ebab4f0ab57441d534a2a507937e4bd59ede3ac7b6d6131d79304996f2bc5c4cbe946d192b3af060ca761e848c9cec6dc71d0ca3259b506d535db58ee8197630e5db6ad10fab55624645471dccd152b415bf0a293ae860f66c3a96b29b34f512cd82c73b8a8e391877de4b3b54758ef0921574c8e13ae260e5d5faf324a59f6ca0aa4f74c0c1e067a5a4f0299a6372de60ae1f7de91f56d4cc6de870833989e1b1f5b1c289f9db604e6f16ec8387c706637fb59959eb9d94eb1accdf772995643626680b183ad460d4cffda9d29e74f157313ad260d219e22be8e912619655071accf76e3907257bfcda07018e37e30c107c114607bee88005120844123bce60ce0e1a1fbb9228d5d78856411d66084107eed92be5d8ad9738cc28a3830c468f27badec5cfe73d99f1397274c718cc16a4b5a76849aad32d28870e3178e14c5ae7dddf894a18cca7a66a2ceebba9f4c1e09f8eb0504af6787fc16cad65eed7a73c7bdc0ba9865272f8d7d855aea30b26f9bb63c9ef38de1a56fd1887e9d0c10593a0f7dea424d654fb5b30775532edfba816ccfdd6256855077d25990593d2ab607eef2e527e2c182b94f89472aa916ee257306e0513f782e7b8cf8f15cc3eda72bcd0e92a98b25f50a9b29824c252337450c194aa43ee7cfabd0d11193aa660f4d3d1ff1494c6812fc0f8a2c6d0218576c475127d1410eba0f3be89b7a23c50d84ff49895e4eafa04d463dcfd2e4ef8a46e93e7f2496264d804e4f55d59cd042ebb28b18a59f376772ce1fc1b0db57cf2f6564a784fb864fb96325a064931a12309e6be522949d2e3888e65b407b23a90604e274794f6578f6092ea7485cc8f270f1b093a8c608ed17d4298dd6913fa11b53a8313061d4530e6c5d5f370b989a18308e690b39dc73ddf2941fa868e2118ae63774ef276f26793112d3d4d7408c1b4a7fd4bea585797c900a1e013117404c17432cfd25e4a61be8380602cf14decf493fa64ae5b858e1f985267dae6e98a9b5d6a42870fcc9ded82e89febf84c8d06bd30eafa65594b913f8b9b4083172699e17ad66795c64d68ecc2a493e0c9726e87a343c04ca0a10bf3e8549383d858faa05c1853f3a4b030e2cea48d062e4cdd61a34b0efb2dcc6969c54357ba1b93b685c9cd84130fea5d2e8db53005b9ba7f6f528dec244aa0410b7314f9eeb8154abd476fe06454408f406316e67f13ff2fa7912c4ca64b6c88bbb4198d5818f4436e78ce932afc0b0b538a32eae2af1befbea2cf2e32c6fbe4010d57184e6cb93d4b63d9b5d40aa38fc92e9b2709da3cce0a93b070ab3bd135d5b55598565e453b9c7a0f175485e172f3b442cea9308738c1a42494d434c9448579940939a2ab941cb2e414e6349ed6948ac514a60f1f4b49bf7f639f2f8561439cca3f1b614245a430edefc9614cdd44b59c51184b52a792d0beeba92ba23056c5f48ab585c2248fe8a44b49f13fd40c0a635f0cd3b2237a7bea4f98a409fae6c4325e66f484613d9c27d9e9ffba279d30670fcaff65748c2d35270c323b634dc4e2a9a56cc2a05f4faa144b4b3251d684c13ea528ba24b982754e26cc2e9f4a4c344bf92a8f09a3e79c27a860be255b7a09939c2ce327e46409932477b23d0fb312e6f061ccdb3e67cae72961ee6a91f339dc93305576ca29a792306bc936614b9023612e3593b4e2f476d61412462b498ea6dbe26c75fc08c38686126c46d9666e8e308c7e09656129abfd35a22ee5a76f79324698c2e8f29283091f2dc945987487df5933cdd65129c220d5432e96b475edc9449852f98c275951e5a94684d1545e4be73f9a12d621cca1f27353653684b9f48caa696ec95b5f21ccf65a9e657b1bf2530861ac36795d94990e26cb41984adab8303af59d8ea1204c3d5772f4d8268130a96f159d3c9785271310a6170feaa398f707939eb8ce1f25d5e9f1fc60aa9274de5cb33cd6671f4ea2e7a97c30a8746b6a4d0eefc1305af5b5f3d383a9d3479977adf2606e4f2b713c3eb787f0605251353a7fde01a523bf75745b763025cbe964892e23bce33a98db93eda7aaa0c4d1131d8c27a7b5cfff59e304d51c4c226e3fa5bade9d6b7230a8b86c085d495279eb3898c229b94b573a9d2f7d7030874f734bb2f5a8ceea0da611fa3abd93dc9f25c80d864f9f73925c1a27e46a83f9b6530cdd2394b43f618349f6d0273c8c5f8850adc15cc283853f25a906f3e67fb231494beb527ea09106a3558a7a615292795930d04043baa6222fda98badd67704c92e5822513fa4f3683f93dc9e6e2234ef4538d68d128c39b236a3dca43ff6430f5094f3bb12d4f2ccc53a03186e5c47eb5aace99a3d1c00641430ca6fb71533ae9490e8d028d30983be9c9398e99d8f97f3018bff533f489de13687c214908a1272bc9f60e99818617b89492ece9953c2e991c63a5e47212dc353b4bcaba60b094240b4a9cb15026e702da4912b682ed5b3065d7bdd07f37b1dec446190d2d18b3637b4405bd2575b60b34b260eeffa0b3f4535de58c05837ce927a9a5f76b562dd0b8825174ba7a7ff9bd5e1b1034ac60d6fb18f2a7d62509bf88486278a0510563dc75ae3f51b451cb081a5430ca69cd577eda8c34048d299853896f95518286144c6b7931de5252e5f161e00b30cc17607c6101309640230ae6b461266459f2246ed5808dc740126840c1d47af77aabb9f7571d197c6a1288943ed07882d972cefcfd4a97e9222798464b9824f9a60553e588ea075260e3068d261874568ba5f35d12ec438309e611baae32aa74c9f89760fa4f2d0f1e461a4a308cfaa97473311a49301a48307e9fa89ce4c5cab4444444442e30822faaa040e308348c608505348a60b2e049ed8367f9a93c114c3a5c0ef7ea9097f46808c6124ef89764e194d7470826f939a5f3a6e4f31f04530962a4e8126a54740c0493c9e50b93730c955f7e2005366040e30726cf2642ac97e8dcedd2f081e1e754fa7a5637f97a61124d2c4194ef8c0713e585294f3e59ae4b29954fd98529c74ccfe96bc99a5117a6d8b9427ae9248f342f176613c5a4d071e473fc24b83087ea52269c901dc200b7306deced28c14f34a97f5b987c4cd78d9df4935faf85614f8997cde3cd0851222262a3f40861005a985fe3fd439ae8502545850166614aaf544a494a34662c1b9558290c200b637c8df8f825be418618381043066298510608104b14068885e13a590cbd99a16b550211113050f0051826a0c0ff05fccdf817e0e8305e61005818438c0a3f7a55a9332c960703bcc234a264cb922c8647ddd760005798827de815ab2ca5ef7f800d066885b93ab8899d7f56984ebea4a3b4a75661d0f1e2659bbf785f160d065085d1535ab2a4d36980541835b6e4d1974c4f3ce50d320296077334b17f314205551be1c19c9f4aaeef50a94451ef60160b969277653bdd693b984f1253729ed1296e9eb38f3a183d868c3c1db70f3a1844a498aac939367e01c2c71c8c5ed5975ad3a3dfad363022223936081f723029b9173a9d8e22e45c3272dc200355a5f107526063031f7130bdbd78ce6d117ec0c154bd21cee449552384fc06c3094b928c2825c5b9edc30dc650395736fb102faa6e83f154123c89a53d7f2a668329554ce55bf913aa3e35f8588329495290ab5522567efb5083a99320cf44a94d9fd309e3230d268b93cdc35c7bdb0f34983ac9b94dbe6061bfc42b838f339892fcf94e2f986630a8bf2911b1d79b8c31f2a30ca6cfbefbf4e95bd265561f642891187c8ca14460f0210663a7ecfeff498ef0eed147180c3ade7592aee575aafc008329a8ebb4aa612599881f5f48b4f27e4ae6bea32b5a840f2fe047173eb860ba15a1e399ec5a52098d685d60045f1c181f5b48e892f2896b269b5813317c68c194293267abd42815da187d03471967d8880119648ca12602a6c147164c27e5d6cb0ff36ba5c682d1441351b264fc7105d3a5c9bf1e5633a4988c688d314623bc7101fbb082415a124a0a27287d54c164275b584917199ff44105b30942dc96588b9524f5630ac6d39d2b5e3839eacb924344e44a0a1f52a8c7ae82be34eb88368e7c44c1187e1fd4e8fe934f8a65213ea0604efa3a29e1640b15d6673f7c3cc15c39fec9f6217f4b0e6a1c3e9c6050426d849aed174b761e3e9a602af9bf4e559674693e138cae737289fae4d17d4b1f4b3056c8ed85f720bd42c7820f25989572afb636a25583c6513e92607abd51ebaffe41da67442b89f08104935e37113149f824bb5c107c1cc15872d8cfa54fa76ce50bba0c2bd6c087114cb29975ca39fd051818858f22982b8b96515af10aa41b3e8860f2f0f5b1e1630826155392e93fb73a1d8b883c0e32d0d98710cce99fd2c79a240e313a046747f8088249bb969d7025749fbc13101f403008719d72efa71f189428793cdbcb97b6cf870f4ca7847b923acd4e54bb17a6bf573dd3ec99d59917663f312e876917e64bb13ba920530978e8c26052ec0ad282147de9cd85e156c45a7f0aef26453d7061521b5627f6a4bde4f72d4c4a34934b8f96106261a5c2c316a6d1962584164fdfb8bf00e38b303af0854802005878d4c2e06954f44ef2040b045f84d1818267a2f0a085c9049d724e4df474f929ea310b53e99c93e487125e560a030cbf31867ac8c29447bec493f3071374ec110b73e849629fa699245d3fa295b030899e2da785cb7e498ebfc2bcb29f4d87911fb63d5718a45eb8ab987a51d4ff2fc8c00538f005185f64805b61ce1545890f7ad45f80f145181d288188c8611c3c5861ce29af7ded69932c9f5661b85092b4f52699c8e7ab8a2a4c66f1df4cf2d23c52611065bdee1b7a5498ca2b972067654918a15398fff39aa443d54992200944444c61366d1f43a7f830e9e788965b99a5c0a31426b126a2a2090b8b14a6ca5797a44c4bd1a35f1ea330a8b4a42e7774f5a44daae0210ac42595628685fa49d9300b85729234b97584b034081ea0306c297793d26cb6fdd4fa82c7274ca394f0ba31a663e4670b1e9ed8cf47a8a464ffd87aa9c4cc071e9d30c8755c96799277799ec18313e66afb207b46c96a0f1e9b30ba7c3efd57a2ac08b5268ca76a9f522aad15fa66c274aae41c637205134b1413264f51bdb43cccf7c453f0b8843946e6760e4fde37264b183e09f73032f54a9843ac5e6c9c10254ad9f14e279dca491846d6f96913f737c6e22109e37cde9724fec6b5c7ac8cc6718248184c38153afc2f48984dde9224b1baa4bb6c5a2c783cc2bca1c3ad7bedb7e5bc230c7a3def4982c93a7fb5110655a6a4f43621469884ab9c1115d7744aea22cc25b62725469d28153c14616c99d19acbd09fa64e84f942a924f2fc74493537c10311a60ea5fe63895a34213b84516479ae9f4d37d152c510c693916b2dea62f12984e19289dfb72bb94a8e9ac18310e613e7da565a2a8e92833c0661ae4e9ff7fc5dbbf534a265b7678011820e7c11820e5800ace021880493d546784c4bb9dc2b7804a2ecc003101e7f309b96937ac99320aeccf48349124d921f562ce7e6e4c6196886471f4c2aabd2c754fb45c7235a37cc7078f0c16cd9fa7d4bd212f5eb81c71e0c624384d0173ffec9ab871ecc79679f42ad524c8747b4c8f0cd83f1477f1615ab2c85c5ca0b3cf060d4cb5de27429614a850d1e77302529dae4947e34a255061966e4c03578d8c1b417ae9ed54e2749504d0d1e75309874822af9a4242cc8fd821b62ec1b3ce860b89c427dbfbcdab527c1b5c71c3ce4502223f08883c1bf93a0723033554a64c3030e1e6fb0bb2aad4d904b39e584cbc30da6be156136ba010211911b64b4c16462d6ad9b563af1f488561964e0b0001a3cd8605e1371d23fe453a9ebb10693f49674d8a8550de69c448c49ba5aba59a3123cd2603e216fa16efabbe38d06f3e9f777cf6c57caca19cc56e2976a879cfed3ac081e6630e7522fbade64ff90bf0c66fba0b166c2278329492b26e80e7fb2fb670cc651eaca934a9fc3e92e06735e92aa7ab6a38d523d0efc220c0c9471c3230c660bbdd60c133098c49ab413e344bf608e0bdb3eaaa41691534484081e5e30e9dead10b648e2d10503787001011e5bb0f18587166c3cc0230b8907166c5cc10a1e55708007156c30c0630a0af090c2023ca290e3061f83067840c146033c9e60e3011e4ec8d10406783001011e4bb091000f251cc0230909f040820d0f8f23847818e1c3a30805f020420d8f21d808f11082c95a4f7a12b2e46852a4038f2098a4e705d3d5713988fd8607108ca74d5cae8a4bf13f1f5132ccb8a1011a78fcc03c52c7d327dd4620228270a4870fcc734af8af98cf883f9d8e5e18466e87fb9fb99342e78539f55d6a48d7ebdcc6c881830259e8c60d7260043a7661d6fecba3d639268b98820e5d98f3f78c5b124f9ef4940b833ce563c26551554a1e17263923b733e696e5e4b730e7f076b2ab7633efb185491ef527a59c949dd95a0bd3e68aba4bd2c51354d8418b8210f9f9f41acf8d68ed143a667134e89045a23e4b5ef1b2a0d37c33e888459da43f8bbe57d24a28830e589846e909757d7f1e2c7e85b97410ff5713a54bb4ae30086996bf9753fda3d90a83aeb499cb96040f156485e9931062a3e53eeae7566138418d94bf2df79c63aac03aeb3d493756b18e541884fa0e27523f548a860a8328d145f3d55abd730a738776095993c37a25e9308579bd2b55d29e3ac90e8e60042222ff171831438c138cd16f0111911cbde82885d9dc53f44f82520f1da430999c6cdc3f49599416f3d0310a93fcea1039a51485c9a4247d50e1aaf21e33ab1bfc1a133a4261348b22e71b4afa789503c7a71c37100a307580c26cc924d5c934dfe4dc56d2f109837035d3124ab77cbfeb095392f1b11d6d7a2dcf4975c22ca255169eede1c39c305b08e16b9265790cf9a31074e00b11911c39c01011112903f843c7264c6243081d53673fa2f239d0031d9a30e99ca4e7d4a64bd405c7db28a365a0863b326158136d62e9e94b511b699830987cfaf1612978d2df20a38c1c8f432f61f0f4248d49e9f1a292a8250c4a495379a652877974a4a31285bcb414b6939f508e0e4a18632f49b3b7fd6fb28e6889c19330a69e1cab249355cf82235a39ce193910051d9230cf8d8e234d8f5b6726e8888449deaa9343b4081dcec006196640c224b576fcf0493e95e47124f508537fb8ffa4e289122607031d8e309b8ff4183aa9967c6a84496ba99179aae324695878bbf6fcd67fc6602a55f1fe9292a6a76f31984c3f674feaee51f40e83f9d409b7236f3098d2fb8ca5e5efb8327fc12409637ae5c2980a232f9862c83a1da4c9254577bb60ae8e1142b6c75b2571c1e4bdfe295f0af22eb905b3579292a4ec935269542d9864cb2bb2f55d9dd25930082576d6f4bc56a6050b063375bbf93f3a27a52b1847c7e7cf355ac1949456e8576a5530bc5d9864aa51c11c94988a554f313d9e82c93d681345acb943009182793e5a7a5039e51027140593e7f4f87e5279d2412898ffc2525e7d47035c04902718fdce04213f6f37007182b95e94144e928334c1248c300bb794da43da39468a4198600e972f2975d05982714dd6d1b6a54db6de4aa8d24413fb241527c1e01e3eac2a5a4a26854830e91227874dd1114cf2c3e79ef017a552ca08e6120f25fa256162c24911cc31f37d6dcfb23beb67d80d102298046d52b7deba7e978660b6a4f36eae89eff974211894ce30f9fa92f24e6f100cfa4bc8ca878c31690182b94dcd82be24efa9f87e6012a6bde1da83f8c0e021e7c45ead17c61033a6a266c60be39ddc2edd33673a55bb308cd03fd5d176aaf7a40b53e6f8274f594f12940be3db6986ac786279bc71614e62e456a986ca6ea2b73058f6c68ffdbafc96b630281d77846ee911da83b530ac9afa3149bfb3f3460ba388b0aa30a2c62d9d8ca8cec29c26c9739e265998d494cd78bbdc79b13069930fb28359a758725898525ef74e5afac207f71506add559bb3d4e5fef0ae3da57ca8b55d5688549c3c43c196b6a4c8cac30a51c2ae53c44c74f921aab307ca585cdcdd15fb3aac23c2327543249eecb3aa60229a673f4f31f1526b5d649164b5e7226750a7369ef98b0976dbf630a83fcce27e7b694c230ca344d7c2b15b498235a5a17a8410a2e4cffe3a834374f8ec294bf7766a14d8e373aa2304593f34fbcb71b62b4198f23a9120ae37aa7dc97f67fdd6441619e312929c1b3a738ef3e612cb73841ffae930a560d4f98aadf2de7cffe096a74c224cdead3a42931257f6a70c2b0253d4b14d9ebf994d4d8c469a244528d4ca07396a96f2575500313c68b272ea684d2392b4f70d4b844d6b084d1774d292b79b6cd4b39586b54c294cff34fa87ad9b84f9712352671cea34b92d3237a811198246a44c2985b6a7916ae4cbebd06240c761f4a344d5a55a5a850e311e6f393ccd4f25f8df838c2e897e761d34ff887bb11460b4a2935a6a48c30ed8c878ab1e139afba08b3d87fe810a322cc21a4f7294949fffd5f228c5a6dfb22564498d724f1b5e4b5f8b8dc214c6b9f3abeb4aa5a9219c2a4a5754dae871a0b15c258fe223b959cc27eb408618a7731fa6249d94f3c0853ec9c37bf54490d41984635c5244bf741cb1fc97146196cc61965987106086a04c238bf7b79dfc9c3afad0108e325b1fe6dc6624972fc07a3e8b513912608ed9cade107e308134c7cd0a1e4ccd40753ae3d39b7867bbaa7f960b6cb9d6c4daccb4927f760f6ed284a1071e27f146be8c164d2af3c2fe5f150230fa6ee9cf3c3c9192bbd6fd5a1061e8c267fd031babbe5297e871a77309c0c31d915cf945fd80ee6f31b3952fffdb2b53a9873fc93caffe470f724235abc861a7430497174dbdd44a7cdd2885685e161ccc1248cefa7924c3041462a0793955a4fc25efef01aded5888359f5d4b8992eddd58083d1920569e25c8959d1dfd57883e945c929c775bb44e5abe1069397fc501375d406638a6ea5a446a5125a6683313c4c4aa3d3ef46ff35983c3b9d98e8e4e33bf2420d3598b388680daffdf417a7e13dbd1d65e5a4a0c1b4a3820eb26cf694eccf60ba9445597d9520f34433988292e4b89d5b77654888e5bdf86825329832745fb85ca5a724f93118743e4934a99a952ae5c5604e92ac26bbc975188c25c84c5d914b6697dd81c1f8a1ad2c9fd0cc3b551b6a7cc160d2bff5a94c936f7d2f98732fe95d9243ee96ac0be63856f9ebb76235d4e082d1848cb6d87b3d19f7196a6cc11826c5c595ec4b7d590ba6a4829e606e29ec77b250ca25c9e432374b96e5ab8105f39a78d9f5b2bfa6ac47861a5730a8f8741f537fbf6a5bc17479a5e6b3fda3685905e3a9bafa31b1256534b030d4a082d9e4dd855512de94245502337a8c0b8888dc7833cce831d2136a4cc1a02ee3c54ae5d3785f0ae6e46e626b3b59ce698f42a7ef45a5ba1287824157e542cbefe8eca12718df534a2654d79b748f130ca33f76f487c50a5737c1f4ebe2394ac5e24b9809e6f81216daba4b087997600aa74d9e3e69f9a754259844f7c3aa754e8a154d8249feedcd13364582b15cce6455ff39a5cc23983ea628e192340fffa5114c72cf52b789563fa35204737ff0a04bcf44308ed24feda252d8d786606a2bf9a0b673496e5284600abf3dad2caa52888260b0cb26b8291ba5210482b1a28d5e2b4950e1ffc06cf295ba134689dbac860fcc27bf27889272744b82bd3069da28513cc70b6305957f17a61c4fad9c989393587561ee74229bf5be269d960b532cdd494e62165c987cfca3b5c5935b18e6f38285314b2945df1606f9be9cea738afae0a31606333dd9246dba4ed22e2d4c679f25a857b22cfd631606db39f9c35bece0264916a64aa224a53ba59cc6a4b130cb89d3a5df3f2ccc1657be4a99ff0a735759d261d29624e8387fb8c21cf369f7e7cff4848b76e1a315466f11cb29f7092b4c5762d99e430951959509c428a3590c1fab30965c7f69534a235a6080718324068e378107ecce48138c81decbc8b104b8c2872acc2687cad29fdfed4d38a265e3ec2315e6d3baa3fa3e16db3f235f8481011f438c3350819f850dffa0a75398c4e56c41aef7e9ff20539853bf9f32e5d9a475f69ef0510a839acc7a68cba7925c2105fba384970fa382430c1b55da828f51184f3d8cf819a5bd8479440b0c1fa23095ce282588b0f1d1ea88960572f0110a932c73ea39948bc8523f4061505a82998fec75733ba9c2c7274c52cd57c9755017a935e1c313e6ce90190d7957663989a9e2a3139e97289f5192a5d4dd233e38612c41585aef961bcf95c3c2c726cca6a264e7ac75c26e55868b0f4d98fd94523ba993144d4b69848f4c18c34c5fcfa43d7f193161102647c74f5f6773f925cc259bfceac5d612a670a28dce58748c316e80c38c4a18a465d1b6aa33a7ae82e3c718a30b143e2891ec14a35e9754b2923309e3b5bd5404f1210953b83c16a77be5d54f9130da9f8e9734f793feec885652f7010973c9561e4acb4d3af9f8116691134ee73fbbcf159bc287234c1b5ebe255e0aaed553e1a31185111f8b28910f4554216e624eb893b4e1de222262348e302e161f8938251fb177693c6b1bd192011938928888162b3e10e1c9cbbf24a9a9f40f515ed591711ba2bcd4416e7af6a51089124fc7bb6cebc10f42243d679b9e7cbaa3083e06810e42bdd4633f43fd108439c6cec20969b2cfb64098cf94cc18cb4e76150408c3e9b3b43872c29b29f9835a31535bd62a9c2459874977ea6be342c1871fcc1fca4a7a3b9d4e905e1fcc7d33da3d7ed976447c30c89f51d99eb64d7417868f3d18adc2c99cceed430fe60ecac27b7b0e628401f58114d8d841c82d4ceaf7dca49ab19c64ef476a50467ba092625b983d6a5d9ae0ba9b6adb1b426a61b292459f2494561b3dc9a28579ce723095ad47cdae112d1411a980c81f4266610a7f4af98b3a65617e53d9b2a4b8204a9055482c4cf94a2c8d9adc1a426061ae0aea4eb614a542cbf58a2d9cac899924271be20a9328256de55abeb69f642b4c97735049105f92841056184ef57e0a95157659648490559856ad52cea7a454753f4142882a8c16224edb270f4af6ba52610c1196432ba9937fd4235a050e21a830a5c88a25c4ee9818ea0d9218669071e314a6bb4ea3ab124388294c7a6e4a6e543ca2658618fe38105619424a616e532a888f9dc7b2a46d90916e8861e3cfb8f134781c6721a430e9b42cb173fbd500055e06629861690819854907a579254f68955c9510220a836953e23e09534444048961c6cb60c40621a1486aaf8db4b424509845ee5b2bf6c204f33f6152398cd9be78189f8f270c1ed7315466a713e6d58dd16aba93cc4b73c2d827e7123f7729db4e6ec268ff29ffd60535612ad124415d86d225f665c214d5fd42ef72929f649830d656101e6fa54b187ecdfa749493f733b3446aa724217410cd13c7e7b8125209d3d7e6c5cea92476273672942aa33d40029b4008254c6652f427d5d2d0df47542761ea0a71399a509df97b44ab8c1049e029ac49254cbf7846b442502261f6f8d919fa450d8440c26c62dcbdabdc0811d3234c82f4527671438eb0cf24cf49cdc7eb819046983a4efe4995d629df87119bce7711864f1e4adf7618eff028c29c336f17f79599fe26c2207fd49a98719bbd154498f36a86d598f010c6109692a9b8945ec7378429345b94ecb9fb4ded429846cf887117096112f3c9e329395ba9f106614a25d674572f47574a1026a59360d28d055d154e42026158bd202374b460b27e96e0075260430077080184d12f089d4b3ed3bd7fb27308f983a93a7ccb7786129b37c40f66fd90163d7f56d2392c88903e98947fc79bee0abab3a61b62941c8f1005c848373490630c217c3049b20513642f69442bd9aaaaaaaaa47857005e08d98341fe828dc8a8a454a79422440f460d9d517296d7ecc75014217930c8e9da93555b1d45cd89103c984d9294855039acc70e22816222e40e864ffd6582b29ff7940bb1c3973ce5189627b7c812132175403fcfc949591e997a6144081d0ce7962c85559d7f9768089983f1baf4ddc99d24662784089183298975727d3dbbd1f90e217130675513eb66c74d12ad1d42e060d6516bf2bb7f2bf2f406d3295137f973dd60186592243c96f4b0f7cd21a40d06cba5a2ddc929d5796183595c4f3ac984b8793743d660109fd54f84e5a8a70d7341881a0caf6aeb3ed28418ed7f2005365610920653baa8ef615cb48cccd160507d25447da666083983f17432dddea5548710331856e365e7c652ebfe66b40742ca60127e57b9f45a4e525a158490c11c8486689c5092204ace066f230521633085eb28738fab188c97ef66a287c1d8b39e2f76bb6f554e02216030f98a90f539f379f9f305bfea2c4797fa944b8778c118aab2466a977039bc5d305685cb9f55eeec20a48088c87e22840b668f53e99d2a878fd43010b205e397588a7572e9d8fc46d44688164cbde3563a9f73860c6ce00c42b2602cad7dab35d163150eaf1b2158307a8aff96693dc93f7805732c2d71a25a4b4f05252683102b184374ce3dfa28a5727c8c902a1877749ea062373eab09150c5e39dd54b38429dd4fc1f0164a46cd2d947c926c0c42a460166962394a84be5130ea9fe04957f09b99110c42a060aa0f13e32edb04bb31758a11f2048396cac552c1f166dc782718ec334477b0ff8a4fa5902698ed44d99bcf3295a4f94398903eb77825e7c32529214b30278bdbd962bf4bd4625a1ea204a32925cededbf478990483ada528a1bed46949428241e65625a9c352dd3378f4264844c8110c9eebb3ca5d30955337448811ac9c4e652a8414c1a0be6c438e1cf378417f811839ae6c541e428860ba946ad22e88d2592d22225f08198241e752234b09937bcf179fd773e81e5d164282605a114b23d62516428060f4dc2a2ab337ce83e807a65c2b0bca736a4979eb19427c60be18efad7029bd30f65b8774d13103082fcca3a490ffd1ff7e27681746f9ebe02587105fe6d185614bacbb7a13e335d53180e4c2ecf9ad92fc25579b1939ce701b2fb821c61e105c18434e9e2ce9e46c80dcc2601fefe4cef3d3f6a609406c611095217fdd4d7eb58db100520b93fca9eda49b574ffa314e9b154068611a0f5339dd6813543608209ddc13f17902882c0c66e7694c454b712c4cb12788f87776655b16781c645ce002144062e008c1182d8611119101b2c121406061ba132d5b392f496e4a90571874b77b988f67cfc7415c614c533a75ea6cf6275c405a61f4b426bffe4d320f2b082b0c6f97e4ceee55722d02905598e6c4662895c28a18f35f703300518549f989d696f74ab23bc9f022032415067d4a2721ab2f367288711a302387182ff81188542f4050619027bdae8a9e9347791c8cdd2f905398f7649de7e422105398f39c8a7d0b3247ff0909404a619ad53091a17320a4f0cdb39e308e02b71259a74e681193bb358088c2248d5e631c31d019fe38d40cf46588884c012414c9793372eb2f5a308d68bd67523a0001854999f6a58f936f4a5f595f84818130ea4a09209f30990ed1a6db664d8d50d69e274c715775c6ffed8439fd42fbc6ab73a5ce0973d0a233672a6813466d13624e89aca4f6b1268cfa27ce8441df69717d4bb227264c58a6b457d609209730bcc5106192785a3d9896307b529245bda036dbca2e8054c29c7358f98dab5d476b440b475a008412c6ce3a9fc451b2c792a4500032098305fb2cc2430802104918d6b4898e9eff9ba41dd1da178044c22444d6961c4eead0146d00020990479845c8888e95b63d3247183e28c1e4e82f96e30bd208dd928c2b418e52919719234cea434dd0bb25c9d7e58da7c12fc2a0538cee0bdab8d1c8c6005184414ff46c2ede9ed7e28856810148228cee398d5a1c2585de685c00418441abcdc44fe5fdb1191ec27ca99314bbcb452ea9ac0062086386a598a173bcbf7c17c26027c9395e095979da11c27482b00f254a8e1ab90dc2ec39de9d78955fea910119382ea005104198d7d382f212f40409842645b7aab65c5e5e6a6e337e3a6ab6f25a667c8e0208836849fa94e7e89c251405903f18cc2d7aee93a44991cb81f8c19493ac5ee27f4ebcd79800d207f37d7ae750e92e2995ddc2f1390e02207c30f969cdcfbe37d96ddc8339975b4a9fdb4ebe7c7a309cbadb7e92aa630895f200240f0617578d2dbdec652a081e4c424c124aae7f8f27852077309557e8f057b205fd41c50ea6917e27c9afefa4ed4e40ea6050d91931b3e8609274ae24c7de2b07afe760be2472b1928a96b58db22d80c8c1281e6c334e922a8eef7130a75373e9e46e372d4946b4ccb0c1dfb0510aa140a40a2070307749c9dd544a81bcc1f85d82e90a9971eacf1b642c1540dc606e93e4bad7cadd9877643d90ba206d3096a8649dad55a37232a2555f84d1016c02081b8c96e4ad2b86aadc8fa500b206a385351344895592d8a906935029ec84934ec6749804903418afd4766e4bb50926090de630c2ed648f3b1df3cf60d879ad1326577bd2de0c9e24c4a993cce3653099783ab1f3956345880c268ec5a8f451c632511c0c4641108441104322cb05f3120000001018938582c1783826d5057f1480034a36264e323422342616180d46e2a130180e8442e150180c088582288a813894c87890ec04f64e6744f1281f7f4440079df5fa56c4029dcd91f8cec1826433e3e1b17891a4f29c7d76d902aa8c1b8743432e591ade0f0256d4bcc0b03cb557a467c5748d0066e290f9b58ce807cccb5bf0dc38bc206017ea853212228d35782d4d514d2394ced2fe0e90679227e88cf3f3f7503c099b500faf130b09ac4affd61d425c8ab1f3122ac78ce2217c7fafac07726447dca9862ee79b3c78c12a1b718c4bfcd02de0a1d3b5723a9f2397c56d60c3f7f5edd2c6f2db8b276688f22c9167cf3613836af38670345e114b85670ec50f5a92bdbf64196e0bda9e24eeda6f76b3f05b3553be6dd67aa9733baf40129a538c53b412181bdfbc2186fe01713576f63ea8b6c59d17e82972b6bbc0250f3019f79387ee76288892e289d3793677047cda414f4619d8c192a807051ef841266650da3cae93d41664fb190b81809c1e5fd29eaed0589f393f3ab95336680a67a147bc327ad6062e98bb2330b087e12e7013dc78886fe80b5ba882870a0ab679a6810c826704026ada98df4907c4428f6595775acd4e76bfe93878cc3f065101775944e7359c336d397ddaf2da186e065665e4aee8511a3a1577d805bdc5eb45e695c8332d07cbd74847d6bdc267cd784bc2039322e2056411e03ad87d6738bad4be4fb9bb3a452f8bb46014235060e8183e6e43bc92779bb9331fb981fd3042843cde1787bb648640c14e1cc992e803c96c087431e885db63b2468df0b9dda7fc84c604a1f3a4a3f2aece529a908ef9bfb3325460dca9428e19d8e165fdb4c8e439044cc3c90206d18a21e3ed624df0178315d15705311d75113693750d81602b61c4cd135c19e64fbd9a1b6168856852c70e009a52e60fde69bd3c5340c09be31043d74e7332b03a01aef398c0c2304b940dfaac23456620b4713d9588116d5e0d37dc805e3ba255b55ec39ed77e28fac13e2f39d615b9e96124c029bcc1bfb352bba8bfc66db0e2757bd8ad79c189c697f4929d292f05298622029917b5aa3bc5c3b521ddd75f1f8fe9d3cff7de95623a7d53672aed744d887e7991142c76abd3570ed81078f275461762f1856d55548b3fab00e18c2d4881ede46c4021f1c08b3f26b1fbc56ad77663fb31d91cb980039a44e0da1952b88494531d9c9e1e9182cbd7a873af010310dde0245856bd6775bcaa684cad72cd02aa65166819cb0239ae2c5084057ce5601a5fba6938a8d7ebaaa7ce1214014e35aabe6c2a333aeb9bd05bc4ccba0d68115fde854abb027eaf72e92614ad0dae3144bb7b6851831ca55c6484c5370e36156a18159ddd902160edb4ed7e710c56006c46cd84b15c424880ea6e32eb7cb77b89d7b11620ecbfcbf8609423b62ed4ad2aa94a4558fa0947c5b31e54d4187f6b10a9b99cd7164dc7340e81ece15ecd15543874cca05fae6c7609346e17d590a871d01b33cf44fed400aa602d75ba775764d42d77cad02aa55ca9575e64502d736415063f12afb65b1aba80c4db559e2439d6e5e0786ef2d4ff1449ffa2e8a5cf2ea9e3d6d9d106853ec40d5e5f89aec88a11801875f3e0920bd828cb6a271c305eb5c41d4cc08b268834c018d1335d715952b9141a1ee65c2e39f05ac2a29d146acc41cde469bf6d4cc1e9d94745142d0f42702011b8b070744a8b9dac87c085cf7cdb25e4485bf847c33b7817fc821503f9791b8f85cc2387087d8c42d6c0c5bab13e60cc948873863163df74f5540dab050acb0ca8ec0d2f89b889a27480099fb397d9b4c02c5fe100a8c2ebc9c5f7f42728ca841b7c07b22eb748bea3324dd7c56114a1494781342ce25adf41c3702520cf6040c5b9da6b8f57989c74b1d999067c766924b2b03cbcb09c1df27e561d6e34083d06bfa3b360a37b63b8f570dda0713046e378110505b450d0ffc43c09f127303e9a1d69fd46309681e9b848f361877b57c421d58c90edaa78246928b0958a2d58d4bb09e66021ea808556854048489956ad82999c9383474cbce81b2218e11605a76aa350b0f1a4f031d9de5c9a9d90ab3b62b563145c7488b757652cf8ae07870ba36f1e43d714cacf4dc9f966c57fac67ffb3fb9f7c319b736e80ae55131b09865d4a0e22b1fbcd0e13a193fe3639d705f733822b9d8fbeb5553f838a94c8cf28d1bcbcae44495b79f4e7d43868b95ff54558a36323325022fdbb44d2926a86a8990870af0a51f0246574b0cc320972d860e059d98484e8c8aaacde1eac1fd7d8c7cff32a15657bb663ca15b569b43c1a65866f0299fc58789466b036ed0503310e5e56a5490d2cf798930301c8f0b9c11708ce3d156fa16ef1a51739f0c0b7e13c16dfc428569f486b706d8e83105940c8170815946931d8258e14a6938cd7954c6c0509b7d3e3736b7f3e416a3f43fc664d977061c076c365a31861eed46b229cf55f01ef291747e5206bf13244742e66d8c924d0629c9e918b8ff22b149611a9f51a486c3b971ff62bfe0b3592daa8c52d4233b3708ef79a6961ede6345c1420c7d2b155b8746a4c6e8d139781c8acdb8d65008c075f7e592b28fd47b11e2eada0f719ca2379501ba28347943d0d80aff5bcbf3b6bf6cf74363c255ce03f57b5aac090642389b2080b273246db5434bca8d51199d0f932092c97a0f54a8c23907e9f2b51db9d299f3e26410dfb488fb45c0ca235614a57d2b4194829259bd3471d438efc98a14ecad3e8540729650e23ad2d932614917c0949dd55e59ce82703899f7756cc3dcd38783a2a024199960cb1cef4925074e339ea0280d8381b02134ed29c1f57ba06036cb25a688af5bebff927862a948d8977ad84b30a59620c222ca43dae7877e4ec8fa1a8f0023c23dd258c0547180abd4ee31a2be35e8fcdeeed800ac4e1f09a911b6899ed4aa07b653c4ae82786faf2e13da51e201309166237a40b4fcae22e57b8ca0306051897b0a51ecae62d8fb07ce14655ae09c87ebc076dfd3ccaa8137a54c482a8368402a61106689876261286afdda2b0c716a88a238e6c0edd075272d543300bbaf5416b4a9c8a503c33c4dde01c66468726a6d0ae20421bd35c334faefe47019f85d9d2a773549960da2d7dcfede59a9c9626f7a4a886f7fb98d9695c445b6d499e4d68f4c34dd6e99d1024275514411bae86b4681e1b90e02d1f04ea8eed9ae670e3e18445a511016505916f73f768461a3554bf98e383bf08d89eb6c6128385dc751d262428333459ca7e97e80fe989b20744d219f61a06a13a06216e4b9a21761fd72022126d0cc359714af861b004ce2e0d5a2a0d1924425c11f9834f1221081f418d39b7acce4da84cf00eb40c78db62f6f53e13231e03832c984d11182e5dc1c878818ec39626ba6dc66c80421726f3d6596c912e11a86d8adf6f816647802a0f819f765cf80de098f5731098a435d1e269d63e70744091f4eb27927029f48abfb3d9b79e7ede87e61e4f228bd5ce405561d0678a68d03a210387dbbaa6769ee1f9f4e846eaeb165ed59e3ee248afd3143c6c1abc837c3c77fa3bd4921837824c3197b1c7b33e57889ad317811961b2ec7b574066cdd9126cf5d6c9f3127b6d9b79ad2f32415b7eaeb500510c6fd84fef3823c43403b9580b12858af1515e59521c5917ca8110c73b828e25238ce53837179441d65355c8264c5f5b9b0f99524eaba8465d5c67529f82bb31152cd2c84444b2c4bd449280cce479fad3fbca28af42baf7f7521579e9c4ed235e8b3458a0282e46ed5fa816d580b62926563868cdfe8145d1013f5b497ce3d4d9ff602b7102c5083f05b2d8845fdd70bb70e38bed6abbb4c698d11f96b8b413175820bce871629fdefc3f18380af0b97ce15d973b74db6a0ba7229099387bf616741b12a4d210fb1da04463f96ca92aa033306e9eedf8788e08316c3806120242c507caf6cb33d405b77aeb9a4cbbce23234f50a9b8ff5793953b2146e0e380a54254c53bca7a36e126b5d0f2acaeb1b27e1916178ba1172384892355ad8efcca5007275d64d9755164674147a261d46af2fb8e9c7f02c508a42f848c2de70f6a68b108d988c53c8be00f36f051f441c3e36b0c2f7b07e397c12011f90c13976f563e6d23288f1b3c6f4679cf95171d1ec654028093a074240378e40afff6aefb0290ba08b747ceb5b8b6876e1e2270ba05c145572966b7b7035594c04dfe7809dd866c827e66e94aab1b98a3669b9069fe63f93d2b76c0b0966490136b93789281800446ccb1e52c8662545af7fd92cc20ddffda7f0eaa1401c2d2e39acfadc50494f9b7979b001c97b3c6b2dd12520736b8734f249696c8baa08575df0d6163aec9873a42a309f1fc1c9e74f99449ec804914bd6818a5b0d42774876a282351f5502e4393f26957d58755091e95cde9556a0b966a8e957e6ad74c81a816c5f4b5a232bc36761bb537ca304dd586730cad101ac2bafb67ca235819492818c8e1a8add3c49c1a2aca63405704dabcbd39d13992b5fd01711dc62c6d5cc69106c41fe130943c2a8f48b2ae65987099470655958026486e3ec4bf0cebfd9c05a16cf212af4d5838ca8d7e7da89ef85c488358dea661007ca6e9d6bb53bf698495d6394a1fc091942aae0569158727975f3b6941c361cea55ccebb8fa986f5b427a6c77f3c23647db8fb88601dcf1a9df047a2ee2a3b0c0725768130ce25cc45fa3dc13c53d42ab7c271181341b2d4962556d85187624306154d54fb23699af9052484e407009ea042807f058357804ed8caa90e62969feab7626832dff727314fe3d4e2322dff86348992a45ec35c6a679022682ca42038e6bd53543335dc059c09249318e095dbfc006d729fe3ebc20d9ac5c472fb1c7bc146ce9b092a13fefb8f705ac30dbd8233230c23a9aa770dc96c1573455f91379545a8ff5b1af0722c4bb3726b8ecf68040de72765fdde9afd33090555aac71b504204eeab7e7f892de5def96190540695ded4f7864d40adb0eca922a159fdc17ce4f25212169311b9394850497a42c000c137cc2b0db29e8f6e1e15eb2652a27f565b5c436532a0f2b51425fe627d595db22919b960e291ef0bbc3ed1f391ad82e75f621cd796f22be093054b7ca0f0249aafd87ae354728d4194a8763f6e7e9854c595dc4b1fc66c67856e6812f7ebac86e67a56f2232fca7c0e9d836ab1d102810643026c1cfa04d6c5c74ae17a6965a8435e8a2d8a2d3210fa1fc8eea17f866e51166ff226d2ddbdc9c04bd7f9726ecc2e8875d0ea311ecc95641a989554ab790f39fd1acf9b7dc82044bf3d4e9ad72ac547b650931cda7cae046016d4e26b2f653b7c3c7a1d67ec855ca2e8df22b593ecaf576e6f6a799c1a5f163c1c07f7b9a51b2324d5321479aae8da3fa5e87f9e296be64896fe9b28344aee66d8379543913d05cd5188e85089d7fb8b914d85c31a9352d4df54deb75164686742ef2e1c16df4e40cf420e5c4ee78d241eaeca2dc48be2c3fa652b150bcf2c6622859ef79ed05c00ffaeaa18a724dc40430e9a2e35ec4ae882cf6876d1321314262dc9d649501cfe9c43d3f4a9696ef1095020f9062f7e160f5b56f44c76631b8abfd313ec4f4d0661109fc46d378f6c5a15917a3d767edee15b2492470607f8815f68299b8cbc75fc8ae7f8856e9a1b559bea70e0d31c415094a6c851e0bea8133147e2ad676f49b0654b5d1d75fefe4828459d8024533b040e6132d7dfab964485e95294d05e57e26b2e883ad3789c74e9391fe5afb65a3203937ff12f1e1bd9f9d4e6e2b0f31642f6cfc3d2d8f07e9b59f45c0ee84c0405116eb766dad89ad7c1c0462569c09e210316d75c575a3bc14b6a7d545a087c0b46ce4f073832c619c0037bbaed864d34b399bd86ab1b5f8287bea865a6552e99e9f451ed70af122389fe7d4e8ff8d78a16345b691db49614b52e812842b75face39630fb2c983509be5aa22a867d29b0b274918ca4b2fd640bab3487397dccb4608dd08f4a9dc3192e8a84eda38c68eb497496e12cab7879f9462890ed8cf5795bf2a4eeb1d3cb8407afd795f7d17b1320a66e9133e491cdbb86374abfcfdd1909c51216112c8a1fb412b61470aa8cedfac460dfe12e718f1add7e8fad780353e213e5cd673cf0b5e91dbc90d53462df60b6ef37333d8133fe0951e101f4ae4285515cb9db2d3859b0f663b72130cdb14bd5c140766907b4c30ae0fa5153977a6eda730a4f6cd17748618872f00ef906a95fb0927b63d747d8642f76070f5adc8a1120ac1a763b32778158f256487220ccc7964f5cea4509425c03b9e8731b6ab644a42f6f3598e8859b3c33f2107561ac879ba0dcd63933ed2eb669de00d569fdbb28f11b1370beb99f4d7a499fb86592def9f994263dc1a36195037d9a1949e8aa9905e2ddbf14d9adfdb780b645c6805133ca93c69024245674c2896d23beb0c865c4ae571c43c865d0746bfa04eb96192e9da10edd24411aa1a66119be74a2ce84ce3b6bc21a12bbd63a0402532c5f7b37d1b731551388d8a0e08b474fa3f53fa3a671cc6e6a62a0d5706c5535adb58730361654f3e3132b60d145f94d0e138c3b33f3dee3534300edc9189bb1f02a60c640e84c3dd10cc80d8031b4c57112e6167daaba1080a2e50f9c1c66cee04921006241f788e6fd03fc6e92a8ce2a224258dfb3b40be86a9bcc0249008e5b01e2f3cb02168e110b06935aa8ba010346e4fbb5b5e03af9773b3448bb2ea10c57ee7a6bedb6b53d6323345b2ddfe9a20f6e4404e963b0e300b74dd26467c5978df4549ffd1286c0aebb5e2475bbe027330ed27b014a47516b4fe52d71711002455fd6e115b1b073fae2e73ece52f177d5c45ebfbd4db4a641a57a33b9df236b9409048186361339cd35b92fccec2662d1b9c48335cd4fab51848231fa675d6ded31b34042c859fccd3148d8867e9e0fb8beac60519e33e2cd13562009cd68f56d6e73b0a8d9ee95a9b1ce31bd3859fa0955451e217da80dfdd0f8b156450f5949ba15955ab97b689bc1d4c841e1b5e00fbab441645b2d9d2dff15472fa5de4c6494a041e61c18530b781b069f34973d76b8b293dfb38f54d18814c8588021427a85818c2142b59842cea4739586722fc34d9ba37ef909a6507619047c9a65b8ca53e18fa54a66f92b59c109015c159853620d26be3042ac61934b98e5392596c60a8a9bdce9414d4f661f611338bd08724f83041f6595e6e486120cb89dd5a71ff674681796e5ed922a9d321791d97b0adb9419f5cff546cab4450d4ab745812c86e79a7423f15f3648acf9198eaa8878f89509050d30cf0041a179cd8655d39148779e1bbc5d0413f17823d43533755c23b7f7f6a2da47ead5c03aad7678e68d28115284f74a54271bad4d2a3e78511792ce586620ae17a25984118e11ed0e293f867efa55f6d2317d51df77c421aa72939f47785b6e12ab9838c308d27ac20cbc04be0898c70c79845d6d2ad288d270738acf2da92ebb559f1a58266974132a3d8ef71e03b8dc11c4c63dddc243aa4c4416248a4e7745bb9cb23180c7df698d24b9c86c49e4962ce8eccb552e65117850b36153d3baa905c075884125b13ca1301cf7cc0606c7640879164a735212dce8a106a6da8384ec4d9fd18610f408e9e57a0346d435a43bf8c1962acb29401ef1c51350736f4e8961bce8fb38853c8384f32cfe62afbe324dce266cedb4a5d5e9e02b13bdd591205449fc72d1570bfb32ecd6cd71e75fd774fd9cce14d404e8c1336efc572a1329dd32901472da2d7165686ed918571c482ed3bd82257fabd48c1be9f1255e44cb2717626f01f1a273e741cf82e39eb77d108ca3fd6067996a77125b14681661769a27003b4f331aaa5a5a95941b6bd5330002e73937e218008f67fd1b84beaaed73d3caed27f136589c5312bc5e09b4642103e5f7b8f7d9191ea51c757da3198dea3b0c5ec6e695577fa598942bdc67fd00574499e6d103d45e0c6489e1a294aa9de0c87507816b33cc4660f1f4dde6b0fd0d494dd2f5e575f760156d2bdc24e9ef67b43e28bc51a9488a2148bac30c1e0f2fad0909b5913b58b95c89c2bd3a49767fdbe3347cb19b328c4635c334fa438c467e212dcb2faab771e4a1e16c3405762411a4de0371c169bdd0d4573d1efd9f4f4b3d4849580f2630a4d83f3e6b91ef0c592ddb6e42813869e43c141cd35e638a1b8564de494e0e8dbeb8144a966580f606e78972181a1c12d151df8fde93ab51f3204f56449de6be905f174d366fdc71d989dd08361c60a2dcba705fb8389d2a9d5881d12481f7a4a35ce18128a9226e2bae84607eb20ec9a0ac10ff84c0f0c14eccd57dd452b1582a8d5ff4a566ad9b788d7c20a36dfb112cb7c6cf5a193d0998bd184bd555e2ead734a447648c394d8bf8b5010f2f4fd5403542337cd40bcff0f5a39f8cf1459a4d44e5057ae5c76902a5c651203a09a3898ff46716aadefabe742a1b16cc789f6ba8ca312e4ff04f0a1a0dba3756c8c00229ec01dcd689d67983f7889e70cc38985d5d0b05e6eb74ad949202610c824be858a7afc40444991998d14bd8fe927e1dd959fb3bb2a1c16ca7044087af04c01992290408d81f18b61bdac9e636251aa91acf51077353d928c732a615c33d73ea3e49f7dadb4ba25537fe301e74201c2a455b0b8094a59f6cd15e1dd7671c9dba433d9bb110764221bb295ef344c18ed7e52f015d1ed254594accc1d981e29fe6df2008bb5e0d2c39cd13e9edaaaa5f86c1f4f2a9027492580f1a58ec6827ed451afa63f576b419e4048b0a9a29343c80fce85d1ee8ff615ee82b1771e1e69def6ed870beccdbd36e0b800555522cb752c02e556b6ca1a093580f9f7055a627f660ba9c725ecbd575f9935a2eb7727691c744f08781486ef11b4b290508cae811719c07a4dc03d82265a700b0018be902ae082c77a12264e323ae352da9e7daf662126e5227c51ab180a228c27ef0c270cd12982bd6eccaeabd4f9a5a77c2f1ff7a16ebe1aabecd42f871c72f537b9929d1d9b118047f0826bafb88cd6d9f8649649d132158e933476ea47758881d50e2a0d0460cb6e0d82268859b62458de2fde40223352c629c546fd3b47603df2be08b4b5f60247fa866463440d804d997a3dc196d2234ef13c49f591a3756c88651227fd6d4ddcafefc2220a3ee3a64df60683caf972475c8a2d2222e5db8696b6c91d61454594406c4f51806e476011edd00e4a964a9fa58e7d7c098ea4145d61d6f37b3c2e24689a0f6ab28ef947efcad209dc0a50f5dd9f897a0399fb102c978a5af76e166a281730868330214fcf817eeebd00cace6c3679182b7c5e24b01df3562448840ac9dac4435903f8483937e9d08b4dfe78fcff5b1df250fa40fa98c2eeb434aeb10d9bc09942f79234ee2c8dacf36e85a1786758bb52f547d4f0bac0fc34b8b27572f4cddea3576a443a3c5cce755a5e18732b69ebd14a5df1b04d72ad5099f0b42c8f6708030940e75e1d03cdfd8e9874b1a4bf29f963a3c0902b1045cd9b8b281e8b5b9354c270f1c5c739b6c6128f806c8e1323a687ac272284a1126a2e5d4eaceab6993619514a5c9c88bec718a32d264268dca10239b58f4155ed12546b4dc23f3a90b3df2c97656d9f14f9d23e360a002e73c20043ca9c0cb630b8d351a27d454116c2350961238c41e72b98b6300c6fb475d267d92ea70677610189202e8a6802b6048e931616a0086ac89b8090992af4390e2f4f0e8bc964028acfc34051018f7ce79e1afa4dfefb0875103ac6512c8dd2a367b0d2a024343b2fc01f02f9f13689df9a7a5f4503bb2fc5f5aa19a9002d9038838a8a94e9863f419e6e6b357bf4794e4914acd207ca09b6863194d412138add0b963f582d930d345e7f7edd6fb246fb117897e498c68bad335a0f475ff30ae02699e269279743e5c4e19be41ba9ec0c249a5e71f95d7d90b78fd53326df1402bc7c49be220ff099fbf6e773989d71aa85d813585d962661a36dc5099d6dd442685d2a958f581fa10b8d578beecb8449e4256766eb36ff71ebc4e9c03e5aabdad3639c524b798680a0df7760cdcd2af5b7763e20dbd3bd690a8164ee52dde7e86505c84150892f77bbf2568ef207e5551ecb65f0952351e25b6721b670373e6c4f1f4467f3cba3aba1e3ad123ae029ba9218782a0990fbfbc82d68fc89544f58a5b1804146e3623a823a591f089815671ee4f54541a579adb307d6ca8a2a2e88a663ffd5a74a5c08cc101604fcb6e3250aab42df8472f01cff67f5a3671f10b51fb8caeec14e46cbdf5eaa554429b61e7cf57c159126e8c8ea8a1f3c5a9842489934fe1078debddf9c2152bccd70a966878f1a04c7d33d8b02246249350c16d8640e10f222954968afb94ee9a3ec7c6678efa741e359abd57311e1bb4dbf4c4a4f9480aa25efb90bb14309c1c3d4037813bfbdb51f9fabe9f408480350268bfc34e22f4a7009620a83186746bfd99260509b2f1315113c853a2a545c8c03fd3c7ea18eea0fd6119c2476356ebba0ee4c462dcb70c3af3cf279f221e9901a3d605f313f4fa1cd1d7a19a803414b9ff31b7918f4e5c85886c5790d2e1f83cb78d5cf94682b3baa6f94422e0016a7ffb327094b73e8ff20ff6075987b34c510fe139e81456e110809a4a048aeb0508eb3af51c7533785fc33f166c681aaa85d9fe14c0d5b8333e450c842b7a8801338cbda091300dd20c4092a8f36a320e7bd84665ea44a325b5817acf213888d7e4e9f0b486a94eb37ee75166570f4be11dcb25647253671be33daa52e0d534c4adade0929d0d9fe6c12337662a269bbe1d1cc30b5e6105e0c5f3d05509106e40bf024235586194a91f7a47404ab281110d748ab524b5747a947a4d448424036d4672833c285ca3cae9e9a9d9455227206744e70a8bb746724167e02486a41c9c4702bc07114a7e080879666c110449e5f872a93bfa3494ad89395c0a6c53cc175e0f1dabaee65ac2aed7e5388d812410384935bb069bd2d162f695d061830a8c040db563644b859e189491ddc62a997b32c2e54300d531552e68d7bf9461f1f1b098fb29bb42c03e69d122d9413091be04d2930efb625520dfeede4cc93a64929221fc8dba323e7b661b95bc960da50e102ccffdd31d451a11b411435eb07499382248633dabae2192b24961235778dd049e8439ad848f828e6b5b2fc861d0beeda6396af7916d46908d8890a6a36da71243c7fad17a051f266dbe770ae44f457bd5b310eeadf501566d89c217e600d7d3aae9da196d23f234a96f594029d416e45b78370accd7bd165ba2e6b186f3a8285334b506124099b44f6176c9e89161ca6a8ebd5524fe7e939c3b1ed418ef658968d72b99c4501b4a2d1853c081675aebd4d27d94248906a8e4d4f9ebf0ea051e55fedd270e76ca6c805c3a6055ee55cd4d1571fb4101d0f20af820c6277953717c8bb83e54794b3b26e9080f4598cce26687a58e8756e2299610c05b707108cd5e9fdc88a5bf02689b4272ce62e90f15bd48de613812712630e342b18f984b46ce08be96c2995c26067501d493b00056994d99e0f7ae18a3d09a538c57343796e363bb9a8dcc58d5919783b2c290a6005eb0a2f0c6f023af5f2113111d3f3f73fca8d28d9f97cd0585c24f501b17a660aabe68cd546f09f1e841942cbfc5c810226b6202ea7f3d50fc122bf082918cc573e11cda1eaa1e041d016b6741a77503c28ae377b5aceef6c31b1035930e8cf7d60382028942024943506153977f75b84a6fa113b4cc408120e13097eaff016cd36aa0c1aa443b6dfbc8b92e642b560f131f74d942050361f2c313f605aca291e32eb18b49d77366ce2433d55a77eb22c9b785fd52477d8ddaf6560ddc9ab95885032514865237682f7a45444c526bb4f0b65c8612d21d4925d9109fbf26f9fdca4e1a81daf630999bfed9fe3286c0dcf01faf78fddef7a9cbb4f895c8692d254b2bac320f819447ec4ec145ea1d4ab19e8f9af591c35cd6b21496ee488c3720bfbc42a7a813e5be0ba2a14e180372493094203a6994abea0f670639a1158ab69394d9aaadce4a9046eb57fac67be8bcef1947509ef20610ab458cc757525323ec13275fb94c09f2893e70dcd6119a9c25e2427d59536a062f4b36cda4d110e06b1d992a150754b37256c63a9e38d8e67cc5d0425b27b265f2fd1a21d06c382b4c13486f7254d92fff602610db56a678fbee62a7464ebc65079cc1695cdc82cc56cbb0e71be0eb48dd154890140cc01336c7267098a554dd7f89386628d3246900f4af865c2193f44dba82004a87b17ffb58dd0d656d1c1fd1d69ea25e2c4dcb90eeeb4de1293ad25a1962d0cebeb352a7205b8781222d7dc7c10c8922298d80f764de12f17c0cd536869ae01367c3fec0239262bc9a98c5b4a2a2a266add7b4698696da469326abc519db0aaa28d78fac71fd94a2181f3f50e23425b44ef74d0354efee583d36506ceb65fe7c7c1ebcc2ec9aea458a369d02c006046faa22b85e42984b3fc363d8f22378b4111615273e68748ebfc08d3ff9bffc911cac72587ac500cc6317f5f98d7a2ca4ef66e2a7be8926016c3c03eb943393e44b2f6cacb05ac559b2c1b75fd4084c56ed79ae4e75678ed12cbf62ca32611df9a029bcac9956bdc8d4854cca1a73be2af4926eb131054fbe82cf187938039ab105341a72243f03862d37909944ecd7a87d72b9438fced3db66d0ddbf7e602897a64a83a98cfe59662cbcf6aced813d181aa8cc674a904e1872784ef75204fd43110c95e1b9689a580fc34c6e406d60640926431a1394c314bebb9efd0dfe936f65313b8358a1c9fdcc8fc66b5fc3faa8ae07ba12215015effbee97be2a2296936b83f64e33133dc0fbb6e488d477cad39c74503dbf378fdc341d47618f34efc044042cef49841d238540cf34d76d74358a098cd9d5835a8e1e4c443b3c005b01da08b00434a87ae9354b14793afe82f0de94f6e15a3e134b57015be529c7dd377c1af9ca85560735f7f32f08cccb424d80ff5c5e832d458589e3402c023ca338c8e982987679d57fe2962f5c5e43c7b5b2a92dcc95fcf3f87fd68aa2b23a471493305e7b3e759661895ae91eca0a4d40f003a5a36a1e8f24e8ced48a3ee52ac113350c09c30432af361f630faf1e4b8775b0b05efe386944bff1ef3ce8a167670d3e5ca8526e543e42647f6e202192efaefc0d2816d350a0382c08ec6cdda8741a74e36cf7bb5406230806c56a74d247194634a6a6651f16caf6ec120406c6e6d1c07031fd86370e9506c14fff7189d3c26991d53b6faea50dd5dab160f1040dc38bcd9baed85a8d342a37b8e29ae3aa9cd1152b1923c2dd496399d853bdead26eb74051a613dec60eef54e1a6445103cf01fc248d3d926593aa2769e5972252c7deb718c74ee1ca737609892ea9171b774e605a8c34aeace53b6d2f0448a40e11e5a211aaef5c7403178253b766f9988bfc3daadbfc6fbab19ee0d1bb6b80573e042b8f33ea79434466f327e20effda9fc38146060fa8e78402d4fbaadceea47166d1b329de5e05dc35677d3792790952dc7710838f6549a9859cfa415558066ba72ce3f12743318268f2da84910e2f1ae50d2da1ee812e7fa75fb1bdcd42a48792c8a3c92cb6e822edbdb444936fb47d9a415e9ba1d9d8d8df688f2d888f567b35baaeb027876818c992bffe8bbc6c2d99af688b0d0eb0605afefd087c71f0fa242a9fd5dd4db66c9df8a8920f962495ad4bab7663dee34c425bd14a725a24ffae78f5db6b68f37aa2386f7ae7f5eadd8bd0e075bd299c098bb7174faf695e8de7259d7c3dc102cbfe16cc48aff7791d7d9d57507d7a41e145ac575c5eacf7ea4f913e90045ec747d8aa373cf65aec6b6f5278b9ffbe8edc92eb939b7cf561d90963f0d624ffb62a488b96d7bc5eae78f1df2b69af4d2aa954495c5e7bf592ecc538af1cbdf062beae7fa4f33d7aaf3cbcb8ead5c70be9f73a36c98020f2781dc183573da2dd50303daf2f7bcd2f92ff6742244f9d0ae9d6fa3a9a6a23b26bf575dc78b073fb7a608bcf1f6873f00b3f851d4f374ac9d8bf6672b6ce2bd6bc2e7921b85746af6778f5ea65cb8bf9bd327a61caab33afefcdebe8b839939e7a1df76307e3e14d5d61e554bc8065466504987725047b2e1c156a987c23e55ae368a1024330e9d9d766c537daf31765151b8cfc4984f13a96a840ddf82ce30142f519537f36bb2a17525b918b46c18940305ff477345908593d3057b508654b9ece6648548a7b11b1687b93c5abd94efbcc19191373d443394b93013091c81ee64f7d221509c5f878feea45cb53892047d17a150b2af27fb3a06f1a1e4eda0c533a125358e6497952b9e6497b8ee349298b48ec26aa43a89e0255e91c7990452a8a7879acc1feec4767e69858db89056c31aafb55f017c3bdd56e9279ad40c48dc941a0148dc8f5e9e2e28526ef26e94c0ca7104374e9ad1ed6f12148d1b1013d05e1904516db5838d3bfe711291cddf81a1c29542407e1edf063f5b88968b09c26310e8ba307a4fda71eed18ab03d27d1aff34b59ba0759ecc4741d36fea56183763a70f889d63f6e0aa678abf5b0fcc7fc304d80e0131f2f3d833c70093f511db4bd437f75005d0dbcacfa4d2324de76bbc08150c7d3e7d79154e6aaf7a254c87cfd2596c367c978e3a728dc55700c5aa151f381691f44f6ddb262eb94597b074794d23d748e8c4ca2106b75d83260df287267b8c39a78d20afaa2859001c1aff8c3a3a582b913229509e9e9662e568c4ce8ce9b4334c92d72f1561cc884f18614877c32920ca00aeef57e1cb2ecd63f79367b2c31f1cf628a966266d88754ca7d1abd1ddbdac7792d1b3034753a4a764a6a8dc38a126162d0be8dea54e857787a560c46d618ff63a379e726552d7b5900854c941e3c5623e6ecaa3bae07a78dadd99bb2a408372f88b500038328ce8703c1c074d01a941d087d6c641a9d83c0c91d9e775c9ce30f5f3385807d492a7d67c5628f7072eab3d21e4cfd7589b5277cb3c3711d44c3891ce597fd5a9777e69f8e4bc278be201f8590f965aed19abdc9dab2338d5b3a825403e6eb9ccc4a9ff16138fa7b328f430f15b5a47d84a8820f37bf227b59776481ede844e8e39135600a33c2555afc70fc89bbcef8422a7e07bd875b8e9438e618900898a019ab0c084d09f7046361d24545ebe6b795911519a1148388af2663c8c0fef86a786d8085f0b81336f9dabbaa8e336c979d521e2980bd594c7e349b00b5a1cac2b91b6e662213ca9079f183a3cb89ec6a1857c0320b241238d7c18e6b760b52819a8d092f96b5193983040bdbce799ff40f36e3dd8c4edc4012482fc4efaa44b4e10f3eb423e77b4f102ae59c59b0d3760f0140a0730333333333333333333d32c7bbbc3fe17feee44b65c801caa26bc2033333373aaa73303afd8afdf5a6b3bbfe01dbc3394127b0db90dc10d7cba8bad1a5d2089fbb6ab6dc5189773813c1ecd7b7afc6b3d96b640c8eb2496c2c72b997e2d904435e5e7949dbd9fcf02313baa37fff8c73137850542ef67d20b3b2edd952b10af62a6d9fd690572e5cc122fcd39eefe55207725f91f9456a54f1a2a1063bf2b58de13aff4990229e78f9bc3f4a80f6d9402593a65ebd8f13e38cf4781309a47e933e37a43fc8002c155653a5559e7b8793c8110391b7941baf2cc740249ebcbe3ba46f8d8d804a2682cbfd8c9670239f87f9fe5c80e79d212c8975fb72eada2046299e6b2198ba665d64802f9ae4772fb56116bb7156a20813c5dd9724e9bbed22d116a1c819c437bf730e6a189cb8f20d43002693d87de17e93eeb941a452077fd387d2b6f22f896631ed63b1f02b1ba3ffe47353dcc03490824cdb1f92ecf0581182a57fa98f361fd0f0602295aaca2078df90139a36ba7638f8278f73e2065ec4b939b3646adaa07041f8f23961ff180183dcc94a1f4db0131c798728e621d1d10548327b9501e634339207be8144a4b2ce3a58503b26c14d7faab0bd9c3dc806ce723ad1e688f1a3620555e0f795d9e542f59a306848fd12f6b31f578ac6ad08038d7e1ab2f645ef741b320dbdb8885f655efff210b72d8d85d88546241feeee1da46fb8a317360411ea7f614d69dc7f942f30ab2d75d4b45c6d5b0cf15a46e599ff7e453d5d15690378a77764c2b2b88b3bfe1526c69861ebe0a72d8559bdfdce3b0965505d1471f2e594c7277e3231584d759bb1e8f9229112a4859d4b37b4c218d53904a7b26eac7937a6898821c63c5581b3cfe488568948218aefc5c368c597a9b06298857c94731e5d2b61e6e688c82289d3ce5e0ef83acd8838628c8a398eeb0d4d60d2ed20805e97326531ff5f03dbc070d5010a353ee3cd2f08c67368d4f10ceed7a94b345258f320d4f10d3adf457eeef4e3d9d20f5eceac68593062748ffa1f1e381846bfbb809628f7fd831597ab49ac8d2af8768970952bcb8e5595fc74f4f175b343051a6ee6ce7e31265bc6dabb4d4556c6be7dcf6389a8fb2a7695882f49ac14726a6c7ef1d1a9520cbe745a64f7950829cf28fe26d9bc4e6cc684c82b0a98779c3be5e3d5f3424418e7a29b652cab1311909b2c764215ab687449f3ff6c155770a08683c82305e9ee9b734f4dfef08f258ee59ec10f16f3f1a41cad1d49a267b30821833b747e279f3d3348b206565dd983ee426ad2882189b730f23e5335e9a13418895a8f0314404b172fe518ad9e8107d494dd69c479f7b661b557302340c411ee7ed74bc92b14e69214863791c1396e11ded13826879b859f7f120083ff451c8beeabd987a0882e4e371fde7e18687ae8120c798344cbee59b110b0d4090c75d31c86deffad8741a7f20b4dbae85595d960a711268f881b03e5829ffc165d56f68f481984286652bf977e99a061f8851aabf2f69d8fe386534f640ca213efc14b4a3a10752ca6ca676e8e481d83125d1d5a439cd7d34f0404c56e69a9bc79de33134eeb0e7cbd947375984a06107f27bea817ece090ded69d481a03f0c3eb81e590ed16906d0a003b147e2e7dad952e5a58c31f841630e44f3619b8fcec35d5ca12107626eebad54413566e94d75001a712066f37fd7d4a3500234e040487fe9141fa3a51ee60d64ebe4ba6d496a366e2054bfa5e99dbac90ab581783fd8bf5b2b8d4e3e1bd67a17954ffdb5f951dd9cf966fe0334d64052cfd8bc8d1935d04843e50083061ac8234d1fe6c92bbdfc511a041a6728aef5052bbd8d86194811feab65ad29033125ab14f5b1460642767f5a28bd688c818d91d48cfab0a9b3d37cf7dbb3e7d21003a1c62e8a25fdfca3580268848138da9a6c3c5f87580606f220bdc3c36f1ef5a844e30b044fc91c1ed5213e8fa2e105f238a67d8feb525ea142a30ba48fd1de3c3a445e3f5c205f1a8bd64e493577ce5440630be46aef7cd7101baae98b010d2d902dbb564cf7a3b422791608627da2e279c6023977ca1433fbb87b30e71508af3dea6b1d0b93e27b81823e2b90346590eaa1898c7eca5e40a30a64cd638ffdcc95fc3dc7a00239db4b584cb64e8168d7ff63f360953673291053bcd4b710f7f1fb2c17d08802d1c771b37d347930a00105e2597476fa8f213f1fba16d07802315910ed1e5bd6e8bacac2a0e10452a8efb94f6a8e976c02d9b242f438f69536060d26107dd803bd731fbd04628fc6cae569bb1f97128851655f6ee6db473fae53402309a4e821bfd1b17bf369132081987632d8adec6d4c513d018d23102f7bb81ef558534afa19238c2eb65040c30864b71ffd55d8a0a6f2e9b01d348a407499ee8a9363042270a2a0418487e3766b266a75e7c8713bc810230060a03104a246f7bff8e3d4c12e4743088669cada96b2ba85081a41d023ca42bbc3b3c6a3b66253ac8b5ba56ae1d52068008154afb9e37a6bce686a061a3f2068b6a7fca6dafe838b860f085f3ecabdb63ebcedd0e801693b672caf289947f9ff828655b97743788ff72cd0d8c1d1311f5966ee573d7e61cbda72347440c8b8def1a278a4402307e488fda8ba1b7f3cee130744bb4e1f7a627e14b37503820f36a776c7d8d947130d1b70dfe1251a6ba3d6d743098b9cadae2c950b346a403e8f17ae745d54b73b30d0a00141572745bedf638fe3071c0990616ac62c486de1a5c382845298210b42df8ad66c8e8b3c4b2c889e63cca5f76baf6bcf800521f32873eeff0f1eef7e05796813ae797efca31c72853a7da969c08c56905a3d78a81efc335841568ffb1e9ae7337d9bb10a72eb571e778e0566a8825819ad2d6f8c0b1f196f82aa1c39749f3023158433cba6c9f20f437f382a881b533434fda019a720e6e023cf3fd48a96c29b610a72282fd14f9adb828fac19a520a5d0d27bf7a94d3c268319a4204a6e56e906b51eccc522316314e4513bbbba73cb192f470e4fcc10453ea88b1e328e0846185ed485827093e9e3ba707269b6c10c5090d273b6680ecb91e9a38bad8bc18c4f90d33cdc3e347c0f6ebbc10c4f105aab2ae46f7eec98c9667482982aed47cb87496f3b9c2045d7114ff5a3b8ce238560c626c8ef6eab321e2bdbbc5dccd004d13fcbcc044973f8a185f5aacf1f830952d6700f3a9df6c30d5e82ec79dcfad66df33c34c312a4fd610fb6afaa4a102c3ec746c7fd876acea004a1c264875a0fd3b9e71e306312ca9bbadc898c47866457566ff2e18f742273ba982109a2545d2cbb5cc13fe6448254fadb3dd111769b870471c63be35554c3db7f0431d648f448654790edc7a31e7f5ca6bce3a311e4fe909ed96a33821ce5433256cc8b2056a8a097f663cb7d5411840d3dbccbe14490aecb479772caa7a58a08e2a4c7a8f0710cef340f41f0d0a3b0da9fc7717f1882f8f25b2e1e7f60f94210e463ccca342321c81d3da351411b04d9fa2cc694b3208816e671a3ad57e52b10e43c1ef930b65dca1aa70204a9e3d975ecf156beff40f2a1b7f64d4833fc40cab1362d33a5b49a9d3e90f220c3060d5b492c6bca4030830fe494347e1c97310f538a99b107a2dcf720d47f94c447f10c3d903fe6514c5bd987273f74461e4892b7a1fc2653d6bd66e08164d2e39443e7dcf71dcdb883f252d6e5d1e5526933aaf94efbd7871dc86983d7271f6dd6b64d1f31a30ee44c7d5d9bc2faf0c7310008c40c3a9047d3a95356ad2cfe3855cc980349622eb57efc23982107528ebde5e39c72c2e40b63461c4852a7a23115f2eb553d33e0401ea9f7d094b17b3ef733de40ec3beb30df963794c70da4d4b360f2f9e94aac196d204626fff35ce1738e73061b881afb47d6fea1975bd70ccc580329e54e7b0d21ad2be20c3594cd480339f3e3be4ff2d2788606c2c60eb5153b8a86196720a7b3fd70e17c3cb465861988d1d22b8f69c9c7adcb406a8b397cfc87ce20c36a6359f11a69a3a51f43a8c4add514983106f27850d2c33c9a67bffb19622086c91c7fc662f80221d0b1634618885953e231348fe4e76680a1f4977c28b3f1c08c2f10c76f5fe35df70221f330e551dbdd5d48dd542bed6aacdc7d98e1d775f3c69cc105e2e738aa75ed31554f5b2055ba982236fcfca6390733b440103b4bdac914f88fa1a38c1959205e956dca145fa173dec5968e14f8ef2063031708810e15ccc0025bb142459b28e9788709b00c15bc03cc7ba0eccb50c13f74985f41e715c82517adebc7ed6275ec20430caa27c3c9086387e60c2b90ef5ed593890fcc54ad02f1c2c58bae381563ee5081987236ba32c5986f3953205c0c9e87b5bf763ecc4b819c5cf23d956b51206a9a5f8fd933502096f547911ffab8b67b3c81b03a2e9ac7172790fdd267e7e18f2aaafa26907e34fa3efeb730817c1a2e78887509e4f199bf4bfcad04e2fa5ece19bb7d2cee25815815d37e5ad97d351909849eb5e93cf60f97c27904c26cda8c9b53f6ccc3a411883152a3295a5f7634452854dc4d2210354a5abe5afb564943206cbc60df7918c38f3b42209abf5685f2ea81faa82090f3cfbea3e61008e4bbd06b3eaf3e981f46c6f1a28b3174a43160c60f88f9e1ecc79df29d0f13ecf8145091b1238c3170860f083f1e6ef28e8a5f99355de40e32c498d183193c2096e465064ff7d83d7c07a48fa987bb51d9e394e60c1d90d6a27cb86dbd3e0e9919392094bfe5d0ae1b0d15e542ccc0013957a5e07b79bc01314fbb7da7df67d88024f3ab1d46db9d5103728a1f7bbcd93e8306c49c119aef5d9f05592de9f8a03e7eafc74316444f7e7f212e0f3aca1f0b920f2a7cf6b59aaa29bbd85a3206000b42886af759cc3cc24881be82f4bbb3393b85f45ed51578ca9f4da9fca3790f9c05e710b79faf9b0c37f2407c75971f9fae48cf748110e808e3061ec8192bcc85ce146b7503380e37ee400c6f5e1d9db237ec407a6f114faee3bfad951762b88e148ce12c600bdca803d1bab7b5fab73cfb78d081a4f963e71f65fef1d09a03c1360ff3c7e3110bff961cd0d43a8ff35237b374cbefa431a5d0e24050758d6183878fb407df8003795a3cb26cd3e60af171e30d44f9cd2dfb43931ea96e20e7471b4b33ab142cb636907b1cfcae87eb581b6347190de81b6c20aa861fca95e65bedf4c61a14ebe1bd0ff5f2fc316ea8c1b0724d730b35b93b7b6f198b5ef12b46fbd36037d040d254efa69daef47255000e40e0ffe4c831831b67208f879abdf23ed60716aee0b1001c8080172908030c177c114606fe1fc06606a27d86ceea622903317dde1cb422f7543b6420691ebacaf8a0d3a6d9c640a6b8aab8776b6b7bd8feb456a86e5c0ca4f3b0e9c4e2dda55b37c240ba4c4f3e1edc4c64fe71030ca4f67e8b973206effd715f20e88f328385a9aa05cb156e788154296e90b855db7876156e748118ab25ef9962d3e53c178823d3dfa75127b487d942b9fe639a966a37b4408ea125f7a5c3ae7dec4616b03c6e317f7b1cbf8105bda44bd25d5a367c503dcee8b270e30ac4b09f964973361f5e77c30ae41efd70e3e445f5c1843a6e54811456bdb37b2a966c26638c27c32b70830aa4b4f49196f1c24a7fdc9802396ef77e503eb4fe6c6f48c1f3d6cbcd1abf41dc880239ce6eaeb03f28f134df8002d93bc4b847cf669dec1b4f205c6cae8ffe9129debe7302395e7cd439658abe8f6d33dc6802a93f5ace15d6c304a2efda86ad559740c8cb9d1ff22f0f73484a207dea65e817ffbc2a2581a4d203891fed76ef8f6dc20d24102f88c7b021fcbbb3d3831b4720070fbafe5f29c55ceac7f0ffe235c0841b46207b7a78f2f3686df18a40c88a71467b3c28ad6811819cb6e29647db48f1f1b831045232d94efdf79174b26e08819852c5ac9765fd3afeb8110442c6ce3b96073f1e0f422520dc0002616c635854b6ff78e41f90e2ed8f07fb12ea61b71b3e20e6970e9f32e67b40b6ffe1ef858c1f64866ef000352deda8cbb4abe0fe83fdd9cce8d4ded80131fe78d53c7f7959fe8e704307ba67cff960f32607c4aa105121b3be7e7e714068b3caa13fee61fc51f4c60d48a216cb62f0ef710f7436c20d1b90c721937712cd91ae9e1a10c5c7a1f53ecab97d941cc20d1a102e8759e4fbdc8aa4b320e9efa6309d475ee99a3e820d599072d0dcfbd1471f22be58902e78f4e82cd60f6cc082f895bdf93faa45f6fb0aa2575fb296f008d5141a6cb882103f48d13bd58bde4c2b08e9e9c7e17c7c5fd124561052328ee447cb680bdd2ac8e1f61b3b8fe62bc4b2a10ac27dfaf8c7c39f8da4a92057aabdee306d217cb6810a729cafbac87934f7cec62948f7365969d7fa2e37364c41aef0b1b0eddc11efb214844b5b8d939b349655c008630c7f0d3029087b29cd5d570e1af3c02ed60b315c870e1d778110e8c861631424114bd6263fa88c2f4e4ec08628c87d93ee5a3141185f9c8d50903f2ac5f8f6368c0a8002b3b0a92af30cd90a2fef700f99a1094c104605c408e302397298208c2ff24860e3cbcd797c55d31f4f9082d658cedccfe0c34c2758d55ed1e8bae104313f84857f7e59546d13c40f5339a9c7ae0992871e8ae7714ae129a799e0ce2b2643b5233da2c332b6472afbcbd7c404f947ad9ea36bc536dff312e4b04ee15bb35c660a36146c58826c2f22216ffb793c288d60a312e4517a0f3e4347dd543f3e40051b942084e64197875d4aa1c52e6c4c82b09ea1b2343f15d021041b9220f6f83466cffe3ed231777c5b2488d1cfe236c6bccf94b2528344ea29377612f1b1d39ab9b9f53cfad6c5560abcf8a25960e311a47dfd1fb567854cf5700449ca7e64dd99f6429c8d20e5d894792bd3c4271f3eb0c108b267ded7ee7dc6f02e32a0a35c606311640bb7a2eb17df3f5a4590a2f58fdb2beffc4474051b8920c78c1fef8c57f6ed1eda3610414ca9e787d172986f5c8720bc6b2abdcf0c41aa3b8ff61e868f5d3f6c1482f43b9a5a513dc3e76c8310241ff458f2f051ae3cdc0641ce1e6692aaa88aa1231d250862ca1936bd2aedae37660c2f5280170852de9ecd3af27144e4c70e2f03025f380d6c0082b0637b239661175b6f02ac3f10b4530a3d789f0e96930a6cf881fcdac30c2e15a79b0eadc0021880810a4040c968c16bf58150db1fe6f9f2f03f8d08b0c107c226b9d7d23ef7c178f640d6a0691f2cfcfc3dc6861ec85e39259b3efa98f36a230f84fdf1f94a6ad4ab6a6ce081946cc3e957f45f6c8fbe03793ff3879f3fbe876876208c25ed88cd73126cd481e0939da95e953f0cee18fe45035a0936e84088cdcb23f3b8c770816740c71c4879c77b72b3fa47f3c88110b739fb2878d66afa8803295e69e68166af89dfe140480b95f7f34d4f63be8158a3797de203cb958336dc4078fb91bfc694b2b3b636a0ed5e2d2f3365922d61d5a2b2a9dcc3a35d670379d019c7bdefb6b10652f4e7a1584e8f77d364430dc4eb3c7e8f37379726d94803c93d567a1ec76a030d8451698f5e7741828d3390ff572ab3d6b55bb81460c30cc44e31f22d98d4a6efcb05cc11b05106a246bb92c8986228cd6c9081649e95f7b1e279b81e63205518dfd49e8c0c1b622059cc83bc98c6ef7de36120c5b0e983d1a8c140fe921193cd7e81b0215396e9c9fc619b5e20d6fc690e6b3988f6f8228cd305e24eaa5450154dc92a965eb0c105e2f8efa8f72879aa5333b740ce3c3d8efd0bd5c30e6a813c7ef7e07d3a666616881b7ae54b3d9615061b58206f8f2c683cabd91e557c05e246e7ba71f930f161aa60c30a494e654bbfa2651548a9a2dc458fbd20d8a002712e3eabf6775daf933905f238e7f1d18f432c58c4b8226347181908830c30249023870b769031861736b0210582261f4c54f620f9b26379801b60230a84f9b1db5d4e4da51fc70614482e9e4723719fc63c26030c5731d8780279a8993a7fcc3a223a81741d9f3f4ced8fe9c6025e88b180ac1564ade0c860a30904f71ec5fc41f89be5980d261043e6a98e79e0e1ef4d55d8580279984245f591de0f7d90d5c08612489552793eb3525c4cb19104a268997ccb74ca9f920d2414af7afc996cfe873fa80c1b4720879afbf0edc903397268c18611c839bddedfe738912a478e31d40a368a40cc83f471fba83c45b041047248b1cab36cf3f3967701192e20c39e6063087c7c597cd5956af86e647ad3cb5829ca820d219055a35ec5cb294ef84e43b0110472343dfb78335a3ee81ebb60030804d31ee6d3cd16333fdcc60fc8f903ad3c0a5bf7c1751f903c3e6476f3e8012998b8b9be468f2d65367840bc965fdff69178da9c1d10f63d5ab24b345cf0a103721e26cdbb3b8d3fdad9460ec8316abe9a732c6e5c36705057d46cd4adcaf7289d99885e28b5acdd803cd6fd518e6539c50aae0d1b103f57f2abcb1f366ac0c954d5889ca787bd65a4f4445cd4cae162830644afb78b0f6a91974436d49805e1b3c48f92a5f3ab546d0d59904df24393b7cd8962a4604717554b821ab120a51ebf7cfa1fa987fcc16aa8010bd2e51ce723e2aff10a42768c32fe95ade10a4a42cc53a644c45ee4432f6a5faad488a85a41d2e4e3ebdc66d77d790d56907f2b66c6ddec2a48e375c1b30fb3e5f6ad0af2c4489afc69fdc0c2a9206916f350f1f93d980715e4ee142225aa9f7a29354e41f4a8e615224353903b59ce9a7a7a9029a54b411e7ff8981faac7588a3548a15579c95d5c5d5b946b9ae52ecd2d056a8c82d079ad072e139f79dce5a08628881a3d5d6e8f29e38ffb5010e47330fdfc9a3fe7020ab27488df6896aaf109c2e51e5d6dcad7e389ca126a788254271bb23aa56b748278e51b3d19938f7dce1a9c205516b50c659e036a6c8258b92ceb53e8c6e5144d1036a64a3f15fb262cac9109b28d7c0f320f2f334c9052d84f96437dcc2e41fab0993277bc66962044541e7b5efd289762b34ad4e399fb62c68c1284ce0ead8bad15418d4910938796f6518e99efdb4c12e456d5f31eecdd841a9120e5e1bc8f52bc4743823c0eb7a0d152cafdfec550e311f8d0c7e3f881e651c311e4e1e5a43dd278a937741a41ce3d1efbc6876a129d98508311e43cacdc9f347c49a8b108f2d8ddc77f67c33ed5a408724ce907bd49f28286950872cce3cec3fe9135104188bff7778d3dd639adc621c8b7997f74ebd16e79ae610862678cb9d62d6f59b66b1482649747ae977b3c6a1082fc692e7cce103eb8ba0741fce15d18f34c6b088224f7e9b747a31a81208f26acf7524e6df13728811a80208fc7034f1f73ab68f47f2045a5e8396fccd5f003d135fcb8c664cdc3af35fa40f661e8e581eba53c29d5e003692d6ae6610ad526ebe931d4d8839652d2b6c150430fa4d3d60af328e99c7b1ec8175a3aac7db09cdeec420d3c9063646a35b4d557ec8ce1a4851a7720dd677f0f36a5fc6e8b1d08de7b296f878e293d531dc81b2d899ae7ac061d8872797c29552ed8054b8d3910f3567cdc7bdbe3e07e0d3990ae2bf3f87cb4661d2e55a81107a2c71c239d2b343be70107a2450f32ab5c452fca2bd47803295ef0419cc798877a3b156ab881fca943ce2dd666f4f151a8d106d28e6b6c1e44a95fa8c10642f99474ddef5ff8516b200f2f43c5f0c3907ef50935d4405cb33cb458af4903317fa6ebd1d7d8a68f820652dae861fd503635ce40100dcd11d579e0f75a0d339053cef859a3767f1834652025f1618cdd75cfb1c93ad4200329f6fca7d7a46f51cb1a03f1ce65bc4ebe738faa1a62208864d6597526841a612059ce0793d04edef1d5000339c5ac717757430f3e58e30b64a99847ffdad6f002f9f2284da9018658360952fc0be91e8f5436452609f230585d88fd4482547df9a3989722bd870439d487131efcc287318f20a6f44fe9b22f2a174710264cdfc71e2f8f2f6f04d187716ea422834bcd08c2ce061fb5e6cf19ee2288f967ef9f26bed2aa08c2e7b01ae4c207fa0313414c4944d5a5f507222282985391a79a51babe4390f3bf627c9c7d53aaca1004bf934b3d531582b86751eee62db6868a10a4cb4a316ac37996cf2008a399467d328220cc6e8f62064be99d409045fd63da685a3a0b20c8391d6befef3f10936bb25cf1f981947ae4791883db07f2f83b55c3e50379e3af58cc21d77bf5443e4a58f440f00f8fc99c83849e79200f35768f7e3d33aa880782c7e960d57721fbdd8198c34fcb69ecca1c3b90f3388f5a79faf1ca5607527b676bf6cff9c2559c5cea90d99903c1fb7d6cfb192a6588b49003612edee5e7de1fe6b3681107a2547ab9f9caaa1bfe2eb674bc09768471ecca1a0ea42d9f58dfa459af2c262dde401ef8a5b3d7706ae106f2b887c9c7438d1bfef325b30dc438e3e3f0b962bcfad01db46003597374e7c7d1b9e3470960ade07678a1438c31b0b45803318facffc71abe166a20a61caaf1d44b630a3fd24068f96af5bad01653d040728d1e7d7be93390d2f969e6d1545a98813c1e8af4a8f34285b129a0451988239b69da429eacbe263041185f9081e463f71e074fb93110a6479dc962fce0444b2c3190d7233b59da4ffae947175b675eec2003c340f6b5f7d90e69693b060662d2944abfaf3bedd9185f2046e98ef47be95146ec0552cccf12a1167681a03d7ddeba52f93d1068c105b25b8f5266cbb7403ae98e52a5be96473db440fe14522b6db806a988045a64811c3f307f0b1763f2f328f38016587834a2b17eb0b99a9a362daec09cb5ab7d46dc6c988d5eea3e59f5e9fd61b4b002295a73e5971e5f000e40408c1448c0050c18630ccf408e1c39a4a04515c8315d2c9dde78d629c3022da8408ed1de0e6909afb7bbd842dd2990ed3ba85d7eb9c58abad8622990eec7a3b4ed695a14c8a3fbd016755a0b680105d2990f5c42f30fac457e02b134debf6abecccdf12eb6b434a085134879d463b3fad9f93c32bbd8c27b68d104d26c7a893c53f5da942eb6b032a00513c8e1afe246fb71c7983e38a0c51288da9d339a7b8d664e8ea10462dc54a85ef5dcab314920b6b959fa581ffd27ff8016482077c836f5718c1fa0c511083fccd9ad53454620e9271f4d3fd1a208848dd0307d251381f8837c5d0faee9801643206bc81e9e7cf2d1ece74220f5cfb78b8aa5e74c09012d82404cb6911b7d2a108839b77b32b45f9431c66be08b2fbca0408e1c5afce00186172c00638c327608400b1f34a99e9e292a566dae59a5bb1a44756c2aa58b6580163d2047bf2df78acb5fa276b19502e50139e6a1c7f3d135cb1f3ce8bd03b29e8b5cfe8928bf3931a0850ec829e3cf7aacbe6e3532c098801639206c88c5b5a560e947ebd0a166c6f022051886173ac48880163820b8f63063760ade805c5227d6b731d98da5850d889d271d3cec7ece030f4a408b1a90e2b53c48a754f0cbd18206c4ccbcea7799664194fa9c721f25ed20e39005f9a287a4c45470c4829462671f6b282ff5d78b73b0caf8c23d2081073c200563380b72e4305890c22f2a79deffd4fc385e41c8fea91ffa60cc871ebb827749156df16e59efb668bd4df5d988edd18af2771ee70ea63dda9215ad9cd6a9dbcdbde47cb48fbdce2a48b11e7d4226a30a829dc7fc507e31f94d3852410c6e23e1b53f0f70a0821c4c2ce7d8f571f3f3b05310abb23a7cc6d6ed64e13005793574a7d6a51e06cba314a40c7e123ea26e27d3250e529053cad339ceca5ce841cca8011ca320de59d6c7f768bd634441d23cb2f03c08d1ce7b8582bc61d3e2059de82c220e50981ddb5631626ab116bbb69a7367fa031c9f20ce4fa6fc3f0c3dfec508c38c71f5001c9e20a6bf8b1ec5f2f09375db099225cfadefbae9284e10d407193a67a9a6b8dd268872379947e11c630c36000e4d90b463b61adbf874ea23470e1d9c635c26c8e3f8a311fdf17bcee30b26c83df27cdbdae14b10d3f6f02c5e2fbdd468098284bf7dfd48e3357795b046c366b6b552c2dda35ad443741e9f1284b7eac1649e1f5e1e665e84e1014d018e4910b3846b580ea9f55bb100872412f10fd5171b1c91207c7e65c9f48338fd2c24881e69d93efe0f77ab7b04d1838fadf6e2c5fc147304a9ea07fd15dd6d046933bed34df744f7cf08727d7fd2f30a8de531bf8306381641b2f851ce1b51d96b7be8a8c72f0e4510b3a5dd987bec8e32c8f0d5513ec6c37cce00472208e5f2b1c7b29f41730811a4e896d94962b358e5380e41b4241f34e8860d41dad91ef940a6db87d3168274712a4235c45df5303808516c887dbc5cd9d75859774e9b7d3a8a5a0a2f01c72008395f953215f53f353bca70c031107008821832d3558c4932c2f862033972e8282e1c8120de7df661fcfa419bfc3800411ece878639cd6c1a1f8e3ff01e7cb7e647fae3fc80894c657894c7bb6d287bf7b1a76d18471f08f17a5ad64945a3453972e4c89123878ef51d65f8e2e003b136e6a98fc7993de0121f1923db211b595a6ac9b2a3a5bc3f4c0fa4fe64d6831cb78bad1578f13807345b355e00471ec892b956dcc7232501071ec8953ac5783f1fe7202f8e3b902bc98fc7079647de9683c30ec4541b73da7a8b775fe3a80379a4791c3d7ffe30d6331c7420c8c9584a9ad258ff287320e47a92e81832a6efb81cf24a119f5d358c03d1531e9dad6d4a316e0a1c08d2799ff2c7e3b08bdf1bb4f796330dab89edfe1065ee973be5e138dc404c6fb3f17d1caa5e934dc0d106d27e5946a88f827bb21f609411c61a2a171b4873977ae4e371b8e9e6e4c8a1a3ae70ac81d4bb933de89012973b6a20c9696ca8ad283d80230dc489dc98ed473490075a193ddd65a9ce401ef4a847fe66ef425ebad83a61bc8e1d615499811061a9e6c37f07e6c05106f28fd43ef8d042a3db82ef62070e3290a4c7a3a8cc1cede133ed058e31905c43e8d5864f97428f2b307088815029cae4f9b87afc68d6807fb1811c391efe3bbac0110652beb0142ed6c55cf2708081347e165f69f12f64ed165ea211ae35d755f1d63a0e2f9087953e3eb7183bc6fb8cb1c33360f50feb0229f430c60e9baa47fe55185ee0e00269373c5b204ee8599a7069b73869c17a4949a90338b240921ee58fd35dc779293f405820c50e6beb316e8f4e2ec47105d205350f4d8dcd8b3e7058811433f3d8936d3ef9a165f5c05105624c365bd757213cf628f01450250e2a183571a731a6e536f76a9a631ad9395780630aa41f756ca850bb4280430a84ba1ce536aa3fb4f4c1110542c5fa5454b37140815872a9f5c3feb06e185e98e178027918971e1937a694f732021c4e20858af99f87d7b5bfaa0e1c4d20688cce77dd23f76198190713484956fe522a362ab3811d6488816309c4ff0e3eb00d6de936b7830c317028819091fe43950d061e0c0c7000471288217ec93bea42162f10021d15c08104f278fc033f911fab66f77400c711c871f724dab234023946c6d82e15e228021dfac7a92af62602b9bc2a7f3aafa495c63104e20f35f328a5a3fe38c72104f2505cab3f0ffee3e9cf388260f098f9076f3fb48c2f7e8718cb388040b2bfaebc3deee8a183050f86160370fc803cac6c1fc7d0e3bb20c333805d90e162a00bc830c4e10334b32bd66e252e43352d8afb289fed0751990ccf408e1c5d90e1628481a307e4ec69fd3ef6ece371965b0c1c3c20b555caede6ead6f45eec80986b73f6d83ea896993a20c7944ad263793f7a640e08e71fa56e638789ed7040d6782be72db71edf2a44018e1b9037af99b90fef3b010e1b1036c54fce66f58b30c2285fe0a801393275764235ed9406070d889f3963f251786fcc82f4b292a3a9ee2a26fb862c8e329b69f352330ff13abd14158d14bf18db11c60372e448c18e304e8e1c3eb8110ba24f68f7a065f47d24df8005615b34fce8737684a1038c1dbfb5e3c1e057907cb8be6b3e14d1d5cf1524b1943d53856c4564ad206a6a77d6d37079b0176378c135c6175e90514622e0062b88ee9d63cae389ce3b6005375641bafff21f4bcd3bfe5441eada641bef72375241f24f7b3a95ba662a0f549077a7ab2a5849aae614e4ec51fa6ad3e0a9a9320531d8fe28374aa19b649d49c8d6785bf7a0cdc7c163a58b3bda0d521043061f4545e885197f14045fd16e8fd79f21be28c8631f77b556eed1a120aad89f8bea65ca5041410e8dedc1b5d64f90ffdd524aeedf9eedea62d713e4d823e21addd3adb54e9043975e5ecd3fb139dde00429bb5bd38546cff2a36c8214633e6bd4bfc1d0045953fac18f5cededa27e231304eb5099fe7914233776a35a75adcdff918f4b10339f55bea46143f2b70439c614da3c9c0ff305b71245d46ddab7975b77ad540f7df4630dd779a7a604e9f262866bde7302372641181d0d7fd9ef6ad6bf210952ece81836742cad8faba3b22241368f694d4a76eb7f50086e40e276abae756d1771af77abb8abe918ad2fd2479072f861d00f3fdc1144bb0e5a979d9223c7b9e14623883fbe9cb6b0594690d24c93798c1ec6f87c6311e4d1d460e6eedf5004d94222e2338ef7cd8f1b89208519db941e6b6ceeef0622c8977ed429e73c4c9d1e872067a6ecdd1e4755851f86205b871f87ea515b084267ca1d77232404f92ea69dea6c96e73e064150d7f6a1b7e51e550f1704daa2f21e6ed3ad66f6173ae5d7cb3d812074858f4f4376c4af8696700310844a29d463b8876633f10937fe40c850775d7731633287c20d3f90528aefc3eadce957a32bb03e106e2bf8303c6a7c2068c6f656ef3e5d8d970637f640aacd73c993d8d77ef5801b7a208f8f47055f78d145039ab0d0571ea9e5a05d814eb9942b39c9b2a97acd1fffc26b4ad9372b5c39c5cd97b5b762efe0a20a6ab5a4454b96b9aa4b45868ff3a38f373f57e4820ae4e8db90b9b6f2002ea6404c3e4e6935e4fb0779a540bc19ebeb41ee20e0220a64f5af0e691f3767cf81c2b12629d9eeed71b19217abe6e255ccc51308d569791d3dd4cfb9e4c209c470318e87be938b26946df2b5e996eede59719d5b172d9359f041ef5c30c1d49d7edb43ac25e06209e5f80b779e21ba01174a20b96ff07185fc73e4c89143471838e0220924ed1e07bdcb951ee4c80512c89ed3624a0f7b24e23b174720d9f59d56b694fa2fcc8511c89fef4f3ea79c2e2f068d8b4088cde1e1629f7e7ecf02ae015c1081dce15efff3f0a5477a2e86a05ca9d78bcab89de5d77c52cb93192e8440d058fa837dab4fdb7f47183ab8ae2ec0059bc729323c53f8c07030c07031c6d031c69be0f13a8e3f9d27b80082511da3e2699e628851c60f889f5f611d0f30bc386662b88003056800173e20e5dcf88b3e776e5972d103d26bfcc05793e6d83996082e7840f8ff3caef00c173b2057fef140738a9dae6e73a1035246cfdec6fdec71ec6570910382688ca9476e3fbee8c1e7020704adf2d7edbcb9b801f946bbf230dcc5d81f37011736200fbbe57353ce99927e0dc86556e9c7597e704103b2a55999a8d2c890a92d6671f9783c1e8b885afd78fc175bc8a28ab7f5cc2a11ad3bcffccb9da9be9297b7452c48656231a58ff6610f43b0388fc295c792cf4c0c5bbc822c153d743853ed4e5ba7610b5790cc0762be3f4c1d5a652bc8c9c7d1339715802181316cc10a62b67f6cfc4e796f1c0c2f4a0ac23056ab2075fe285f69f5a0b25c0c0e5ba882a8e97fb12296328f3ca9207de8b1f9308ffd3aa76b07c991c377fc16a8206e3e8deb31bf176c710a52c8ad9baecb182f96a620680791fbbbfcd53fac14e4d4f38e596aad9f551b6c410a425a071dfd097b991e5f94f1080361b0c5288857e7ab55d53635b5282a472888299365ccaf99ed20438c2d4041d0f861a818635c53b35c068a608b4f10d5f3c7d7f971223ce80992065faf13c47026e76515718298111ffe2defd2c3cc169b20ff4a4bbb4ec60b992d43055f5e860a086982a097924554e6e4e3ae63b0452648df837993b28cf7f14f5b6082a8e9e73598ba89f9580df42548799ca52e64757a8eef16962027fbfeb99aff3c3cd1b6a80429acfb30c4a728ae67a304b6a004b1c4433f7efe51d4b04c82d096c7e31fc5edb1872d254128fd28715dc12d224190dc743978b0982cc32d204112ab50e5a145206cf108f230e5611addf89939ea168e20d7664a27755537e96dd10882f8561693a9fd71ec2e0c5b3082a49771c5ce53cac3b4590429670ef53edc1fb39c2248666b3daecc3ecc636d8b4490349fdfce97670b4410defc34f538050d339d43103386f5503c74b41cb521c8b943f89f8fdb2d0a41caf959a9e3e5ac94b72d0841ac142f95cff641906a3bc6bc9ec57a34b12008f3a1c37c3c5cb708846a51251a73163ec7eacef7d11680207c9f86f04b3955f20fc4982ea1da83d91c743f90d38b8679e5e1fce47d2059cfe64f75e7d9663e90479bfd2ffa677abc7b20c514d66d22d50329733bfde353ca21cd03e1f2770e9f72070f241f766ed3cf3dbaf3ce1d089d69fadeeae46277ec40da9fa83c2a4f1d4821bc370f2e4786eee940dacc7931bac7c3d079cc81947359fb707c9807992207428d8f45d75b938ff38f03799452e61f5c0d07b2f7607c46f524777d032957920a73bf917eba819847e3be949c5cfcda406ab78e73971f2d78cf06f2e6c568d62333f561bf06d266f30cb359e252bd1ac83e0e1e4d457f186bfa349087b92da1ef3ed88c1e0de4d7313fef5859b97386d3b66f6975cc40d45a59d5d5eb99bf0c44b1d3e8bb7cd5e33cc840683fbbcd31de663ec6404af7d1d33c0e3e4e31622079d4868aedc240d2f9147af439eb540e06c2ff28e5a19c2697ca1788f3df99e287e97cb617c811abb2f539f2c4ee023163aeebc8c505f2c6241aedc739b3b75b20c6907db933a905f2f8c795acbda5939e5920ccebfac057d5653c2c905b3adad786d58cdd15487d793afcc03f5d570f2b907f947c9cda4769a3871e5520b407b7ec331544a607154a59c45e2a8f3305a267d74a55f3a6f99102d13a77f97810bddb9e28a8dfb6e9a1030582e496e69bf8c4f64f20f8c02f5df5a8626e9d40fe1fdd4d7898072e1735f4600239ba0f43329fe9af6509a494cfd53cfa9440de0f9ac7bd5f1f3a4f02692a6e8f6791408cdb3f4ac13336bf7904d2e6d9b0f659c7dd3202b13fc47670ab08a48ad59643b32de5c8108154674143646708a4bc1e5234fc4220ea48fb67fa78a4ef0781e441af3e2d4020c6f879dd3be739f51f106b3d985aca398ce63e2056f264791c2dd8c6bb0784b058152b45b6dae6012986acd11fcdde23ef801c3cae776387a51cd501f936868f6fbf6167cd01516b3e8f43e6c8ff8983d7d2451f1f9f3720c8851fbbe5616c77b16c610382854f2671f153ee61658b1a10243ea84e678c1963650b1a902c7ad01026eec34c9905494e93d7c94ca5b9c882e89aa1eec6df7cf25890ae73ce6d16b9911a16a4ea4e8bfff115e4f89ad28f55e357fc5c41d84c29858ef6a8d1f356e4316b389b4ab1821443c3874b692653e4ab20fb60e2877ea171e957057963b0a031e7910af238e554eb372a88317692492da71e1fa720afa7ab203d2cf5e8610a627a1ee5e17c8fe75c978298d3a27a476fdd3093823cfcc1b7854d9907568e82b4fe63cda52956c75014c48a37cd3e5e28c85a496e5372bbb81e2888ffe36495befb04413de3d39de7615d3c411e64c6764c35e6f14e10ed7bfa637cf1fca839410a1b1f33c46713c45d971f555813a4b2f471dfc9953813c41e8d686ff5402ff79820e6e8d96ed62532f7b80461734af1e36d2c41faf4fff79fa90429ff789c3de7d15ee70b2508f222f5b7d1e42c3e09527af6eca16d5e695d12448f399d79ae2341b6791f7986dd3fad21418a9eb5e41a3a43cc8f20eb8bf82865eb08e2b58591e8f7a8691b41cee1769bd3f25e5746104c35268fdb64f9d54510d536d4674a7b16464510d7a4475749adfac5449073f2fa514dc88820554c71c6f5920fcee343903d6dca1a4732fa756c08d2468fdb3707938c1b17826c17e55b39c486d2981084f4e89cead1fa402c1e04d17f5ec3560c3b5bb120c89efc55a2250e04597b53d8f20cdaeb03827c2978dd6afc9cbeff03c9c7c1ccd673268d3ffc405a911f4d1ac34ffde803f1e5ea637fb0758fe10379a02f9e3ba79bcc9b3d10f3b62c594a0df38d1e88b9935fba596d8c66f340941e7f8a678e88de8b07c29d0589def01d8879a2fc623fa6fe69079245573bcb61db471d48b1de3eb955fca8071d08e599e6f52f5e8f3990722fc7c88fe36a5c0e24531f47adb294c7731c489f477f5821265a453810f3f8c703cbe14cbcc71bc8956254db64d943353790efd3424fe6d175b6da40ec98e39e553fb66103395459f8c1c6b46dd1ae81f47db9625d68aa1e470da44a0d3b1d6fcb2c0d8ff240a3b2557fd8bcf9e30ca40857cfac1b1bb5310329059f294df58cb59481a4f3fd038ffd71ba0a19b2908a8f816891bb566ebf297431903ad60f7a942ff9833c0c641f5f4ed9136b5f59c140ce5176dd077df6b9ea1708aeb2d69b64325e552f10362d7d6431abb7a9da05f2b8ff8c7e568d29a95c20da89a779cc4c994eb740ea49ed7bab540b04890ca139c6b95748b340c82c73295636cbf78105d2e40fe7626327d9942b1073451fa5f2ed71658a158812abf147f7f9d3ea5520a73c8befefe1b2d95420e4e8d94b4474e57a0ae4cd6ef29e950259f2f79266578be98c02d953ddabe9e6b80b428178dbe3f1502a7f1c36e613cca318de62a5d009c4f051bb3949a7f8964d20e730177f95bc1f5dc9045267e58c9dec9346cf12887e29eff129811cf34f53fd7893c7ac63ad692c0f35482049fce02be484f7384720a61fe60f161723906aa335fedb4520fb259b08848cbc92acd4aeb28740ea114b3f8ee619550b8160a571d9d773d29e8340728d3b157fd81a6e0602395c0f4a3ff503d2df8c64e5983e8ad60704ab9adfbd8f7e7d0f483deeacd5a5f280a89747797e7cee803ccc3bbdaf2012400784cb7253499fb21091003920cd854e6ff1f2fb7848001c106f3bbca774c107d321016e60ec81f4d0520f23800d88a2fd3e36f951e7b021016a409e9ab1986a5d735f48001a90b32735e6a1f5d83a84b320fa20a2b7c7e30e7d1f5910ed538633edc482b43eb098ca3ec46d1e16c4d0e9f0bc5163ae98579066bd93c6dd15c44f5154255e33eade0a728ffa52fccdd7d69c15e46c3f27357a29457b15e47198290d92bba5b52ac831661ef43078d8773415a438d3f0d2e371a8540f15e458b22b623eb2a2de2988ad49a4bd93a62077bcc8d8e09b3d3eaf14e4c145767ed9780fcd2305c9c38bdb56ea417f78a32067d7b476387111ed4441d6a0deb9599bdcff50107b2ea7e81bd5f7634041ca64fe1ab6f20952f6db541f16ec87ba27489d3e886cf8485bf44e105f2ffedaad4ee69b13446bcfca435f374194c9b1cc3dda1f79aa0992ea554be5b09e8765268851348f433efaa50c62823c8a95152d638bb678099269b56db4cd2c4116f3f1f87cbc49e36a5609a2feff7824221ee6995182144f3ec307d2098d9aa8542ec5c2d148241409c441712814089e301f931308001838200bc562b160441286791400035a2a1e3436241e24241018141a128984e16018140685c2403018100a0803819040f896083d3fdc3bf8dffb8480378b1dd1d7614c1076c6920f927bb3c798c778e376955f365202c99c28b5524207da1f73814b014b2be95b1a98e594f71186de9e6707db6d5e20d2e2ad5dea4a1117ab962c94c6bfaa98c1b7a4def1bded74c16e72997c43bf5bb47fb83262beb324ee42e28d606d6ee8ddbd1146f9dbd050d847a023c58fa69dd7a645efbcd524a4977f38ee06f1b8618802766c2f9d1bda5adf70784e0bb90dddaaaa4592c1021eca9668ddfe2a914e865f49b39639a675b52efb295137353264cdafccb6cece4e10c6cf659f9f964f6fb6764e0cc534549306cb493f1000e85184ab7456133412dc9b259a61de2af41f69e036706f245c71bb446847cb57b12ab9f0b9c457537d51a29f9dee22bfa77a395f6b5c25382a6fb3a2c87638c0687e9e06994e3ace6d25175951794a97c43fcc84cb33f761160a2e2b1be594bfe76298ad091a7a5f652acdce98abbab4a7a81535b6f26b788dd46425925ae941a6422bf1e195d2f4ac5c7f8a64b210d8db39f373cc2a7caf55b8f2b1de10611bbd0f6327a797cf194fff17d5f3ba9a2446ccf95c71bab83a68264b355d6e1fe44abe94de96fb20f4dc9c8e7e86bc045c93f2008e07bb5bdc491b5957f0180a04ddfff73555d8c669505810791a3f4db52c0e4cfea286ad40751d7f22f8f40e8bb133e9f8a116859f476aa0138217550db93ef53a12138c43f761bfa384eab1b53a74851ee276bc1ebbdfac6f384fd9c592e90ba89042c73e1c162c0cea14c56d63408749602522d39e6d33b8722ccd8eb3808a643eaa64ffa1c5f979dcd4d7ac42a2d941530ef49efd019407a5e8d08ec325f4abfa579ed28546dfe49e7cbd1d530cdca26be0c8a7a7ead10576a0e2fe834ef9c3c56c5537d28f6868394feb8dc7bc78af94fe15088918b866389266f299210359507623ee600ca5dde9f22e31fed866e625bd1ea334867714e5c8e7c257e0f9818d79c4be017d2d157f95a13b335484183103829c61ff8b5ceef86bbfb68cc374f534642245ee2c46dec4184c009d02a6f98d9ef65a8f568e18af8f5dcc7b650d816c21723fe62e27bf44c9dde6f01d60d8283bbfd6267a12b3d75461583c3f4f9b2229c8ee3b45e46518de002e74c63d58731dffb0b679245d834c3ae5ad73f3d520df8df45b56e1d257d6e437905f628c4119e22157358e9b8581d90dd69a8701bb17c6561378b52aaaa90f5b5afe501a2afe475d6dee971dcf3e48270ef26d850b40762ba10759b1fb22dcc6c5bfeda94d38542da0c0e1a86aa5cdb4236822641a86857f15f8b2f47c5388970f14482e343364af7ba4a78e098b61017413cc0d65f8749bbc0a9e4b32f06e9d926ce545821cd43ff7111eb0621e450b88aa95afe493c6bb538efbcc3cabfc5c03141b15acb72a2fc233499d241125f0abcfd9be6f39f7871193fcdea7c15ade95169aa295014413ca59792d8f062f12866cb9fdaecbb07ca4dadc3001939223330c3aaa856ffd5577aaa602944c563ba377a1b8f8376f526446254444c5960867b63c493362d621bfd567e629a833c32bb8e737cbca9d456e932cf2161be2bbe9ede83b81b90e39e1e7fbfaac9b6a53d5843571b61f0a9c896bfcb0731919172b919b5747c5da7bb94709ccaf459edbbe4dee4b5717298b2a08798438acff20e56c7ba74f302fb246931fdf1aac9012337919fa799182e923017334f004555ae73c4a0ed5a57d48aeca5379064efce97d917e86dc4018e2244e85287f464ee4e9f361fbff40309c43b652080b6edcae3ac3b77ca529e6959eb1af8c5e811c235719fb24bfb247e49a3c01bc88c5a732b61fdfda47dfb52df66dc07117a58094b043297c11f7d1c5b16b0061a6842bfe53ae320780a2fba0021aa609a7ec09397d3eec7f12c5847628af095e2b494329d67618aefe41bf569f6c1efd1e05bbf7133065133595210d5252954c18ec859b8bfbf93e3f2feb51bd324edfa4905089852173e8147ba0731ab445320edd8252a64c8b90f0af7133450325a8a9444579705c7cb98fbae06bc41d8deba27b7fccafab27c8056e42ddb7ec07e805bf5ee3a05ea443562447ca543b8019da00880094a7d7e5785e9d67e194ff3ec4258302052ff7695af5ebe385f879801b431255aa7c9167e116019c521aa41c5f185ca5f2360a62bb9f5306c879f7f8ccd6086fce9c672d7971b14fce2b7a146dd8e8d78eb5a4ec56d45121809ba1e470ca1d40d7320aa7c8099223d5504cd7e0982a7f1e55a802c67ffa15bd1b36ded0e683bf12d782b7e33873df84ce31be6e9f9373792a664a155bf4ffc42853ac21511a55a45475f204f03ee2127c562617ef621f093fb3d6442333ff605c8d17fd2daf99092cf23d4e8384492d24f474755c92aecfdf891378fecfdff53eccafdd93723a4f822929611b40b28ed388129386dd821abf478c782aba2972566ba0ce9c22784b88514c3142eaa70060118e700af9dd0653184633425aa0b7f56c98fccc77d015962bfe79a8e4334c755c14a170b540e26e3801692296d69003d1ebeb0a4556a1284fa787c008c795588b70cce9f4f278f6beac0343215472336a84da9d664ff7502835aa1130f2b739b11bb6682b7f9992f0a97dc08d9b6407c22b64d6418ab951182d87e575724b781d96274014fbd61546a2e739caa8391b1c694d9da68b3b14863a487cacbe8112e1cc9cee4ca0e4cd2c48beb3f3b986f69984e6f24e1b7719522e9a951f2c5740b4165b14876bfbc82298ee5775065209285c04d19f31b9069738630b1160bb4e2783ccfcf04c500407dc281e36531dcd308dbc6da69beb5e70d398fb05d8e0060bf2b1e643d2d1f4841339f9c50e05bad1ccbc505edf02b2cbb99360f83b827bc504a4df2c50ba0569667471168ce5599afa65e1591408be4f536656cd6074df5239be32f868e0df1ba61382fabc3c27ae0b8073408b95e37c1c19f4d9c4914821b7dc078a5f94a3db299fc5fbcd086b7a66000558b914560fcf6d3dd45aa66071f70bd58eed43a11daede9fa7eb6474464d77311991877547861101ab4f7ffa299d92ed62ed99a438e29bd29d40cdcec921ddd0e37613b35026b1fa7195f1564697938ea9e1f661744d57308b6eaf44b7bbb3864936ec26511eb56b8f8ff0cb0911f6ee72d12c693a60b2ec570319f027b48874cd78610ad12a34c0e2962d9b2710a6d1bfc19ab8231fe3c169439d030e1edd7e40235d4542c60d6b8e2a4b64837657fb5f6af52fe6d2fa32e87d2a20a13ad2418904021e118a6257f69b5105890759b67b0520b438481a3d8c1784897b49187c8acb8104adc980c3772193a6d109e53c1ff8c20d9131eaadceb6d55dbd06e49df6d47eb354576a42de6e3f84224bfb0ab62ba88d896817909038da8aca5321e475ea3467d4d3920bee6be2e5ba97322046910dbdac3cac0ab1ae779f3d0a79ef04e6d84f29a9783838eac0d241112441cbb1de567ef9385723fa3a08b7a2e2dfad854e401b8dae14628f23b709ed47740c42d7cec87eafc7514396a78e48d2a3dffdcdf7f23c7cae7fc81650aaf5fd0733423a5270c0aa8d8594b089b94b024c66b0491c0db038858503ac1c7778160d2790c4fe5f5a2233ec0dc7f4f5bf31431f668894530efcc60eba97396698b402191d6663f289e0385d2fa864df14277e0154fee9b783d0e5f8e47ad6ad01541a498a14b3b9b1b46065609da28bc581199a068a47198e2be633152da36581a4897558314798d849a150206e88efd5f8c70581f3ec3f9e407aead4072cb79ba4160174cd0f1fa56b041e244da15d81e06fbcf217cbb8027370a0ffb553a18eb3e881ce031c6ff559207363617d67aecb06d802e50bd6cf69efb2b0d1f35d0d37b3a7923458d9fdd8b7b0b16328af456656814be419136c92245179f7f6aa8c951258d4ee2a3e1473314c0d818583f426df39b414c47dd0252d4b333719c2b98b58fd0dd425dd111e1bf495deb7fa53607244ca619a3f353ea31faf4d691343792f9cb46193bbd668e8d631c98b746b4630e0403b0e6dbb83232f29712ab9b7fce7d35885f32d86886eb0207cc84dbe34517cd9121ddc3807c1a8d4eb206acc94d91bab3acc6415c1325ae841190f2e6a7d27637061f736c298cd2ca75181ba75e78fd03db9e1102fe20fec1c6a6159f074cdb198802b7e4326883cf6d34f9f24589a6284aff5927a48b7d344316a9a199da30819c84df622e9e611087e9785372da65ddf9d332210068901d9150a64c33f5f2acb1bbb27122ebe918ee732e3603d4d46cc5a5c30ac04333c6ec0df0e45d24f9a45bd326b19b91e74c7de46a7b0a02be6aae8c78708098e1f60519058c7528796c78a93f224b28ab1400ac2e8e6f65a88e576162433dd2311df7eeebe21c95bfab17edf66f16bb41e2148646e908b2a98a9cb0ac17f27ff7da60b6a58c6ce1a889bad6ec4cd4d57ebcb7d9bfbb4f56018c6ae4c80475292a82c3cc1255ba789adf9c520edbc04031f2a975a7778e8dc03f9ead09d1e4054903bff52af36c6e026a869ef04f5e00b4c00e26de70bec024ba2cab051c378eb345dded8591cc96455cb657c6d357dc90d626789ed778e34228e7af48c1023b591aa822836b136ca958266aef64275c6230047c67bb30ac2b7151a35ff934c72d04ee949216902188cfb455f98d631ff0961ba1a45a1f6dd3cf5777b35e46e13fa571e2cea6b57f5451cb7a0312bc1bcdfc483b5759402c74cbb57799a460c5d916a4f077b32a45d4c6d4c23920ac73c3dba1aa5a5f20a4dbc2d93f6f78b66bf62ec3cad44484f4bf7c167d979f7c73918bb1a0b53cfab51e5105a11e8821e16a438c99b83a996e3e88cacc5fd4bf18b6e4a13399888cbec931f1406c0af3bb4efc6e42d5077df362a11c2a7ec4c164e33e436634a8b19094c2897412f7c8554ff3d74fb5321cf975ff96511e808574b0f1db7948ea899cefd07766b31976d7f1a7b4408ebd2498176a1933177196566933217623602fd704a09b227a0994c6511b97f861c26b24856642c4d1ae32f753ff845994a364849bf47fca87ad893852daa23881ede0b10b8db1b8e3a8b700e90b14c7a1c6a6273cb0053a5052d2cc7884fba579d520db2ce14b7731b9fed7502a37ac7eff6cbe92937e46ef84f9d3e42d422a3174e09901fe4491fd13ef1f8028d9a1fca93ba780aff0578e8f90f4e16e2028d2489bf8ac91d989fb2302c3b7d802a802a85e277d4959a844563e1514eb9dc1d5b8148e7a3b4add4ce72fed429f839969a7ec3a6de36596de3542bd8d319b0048336ebcdc4b96870fe499fb07a6f8ce79aa9df5c223eb1ceed533b5490fcadf949a4eb55b79eb90537e672896115b757f89c0df5ae24e02cb1eac32b2d6f4efdf106ef67d67bb9b1f5ca49257448d5b35429d83e9b71ed6278d2c0104c85c55a1daeac71463fc012d798e3114f9f4fa8bf71c17b281f9c1f63817c9d6da53382142f43625f509b183f449e607529f279b8524df39340759d05c327957fc23ab98129eb2494811f79a61126890c3a7f0d46dd2558678f1861ee5c89f0647eee42c3d3257c4eccc1e03f7ae3c719b1a541d406f0c8235a9d6b46042cae4223c3feae2ca000c2ae2e03aaaf2b6b7da9a9e043e4f1373af8cb72878e4d6019240c22ca6ae9ae42e5120d422ad0aadb6d17b066bf036b0b6ad544da0d3b95c964663cabd29cf0012afcc0c10e2f786c115bfe734734140151ab336dd782fec169854a91dd1eae54e11bd6194599153b73b6be0eca9d1aaf66e484441c804ae7badfc0ee96c0de13553fc000d9c066e63a35636c5122277046670d105dc65136111ddd015658af5790d3786fcf832d81e3a18d74dcc3dfc6b11094d8f4b10fd11cc7674445900035a4fba594abd1406cd79f11839362f18e015da130e1793feeed3e61c3451db05b20d1951ac1072d78a11626d1fa073a74d02b85c831a2efc0b994cdfbad1b5ef4238668b2328472030106f0dd394ed1d4f7ee7e263b17deeeb982018554cdb58d21d54ee3c46eee344b6f474c6c82f2adb5f2253e13038896016b10841bafb5ab164cdc39b5590e36246326636f6675d33b9bbc633e21b5761f53319f90d1ee3b30c0f189eb9a5cb8484afde520a05a4ab604a2a68f7cda3900d43f85670550a211518c4f08d1b2e61d200e63bab03f251a4111b1a4ea4d11264222ee5431ee0030a6ea3e4dbde9e025d5367aafbcae48cf7314d7e0f80fb378dda69cc63322f32790d05e83df64e9cf859e420b6e68004754ed76364b0485b44841e1a0399e0d38788577ab9a806d43096fa54de9ddc6d183d1f8378ac598681484ad4c716dd2896171eedc2e7477ca32f8ee30bcfc01a6af70177e12b218f9cc38ba31aa3fc7f38efb174af72fe0cc9ed3c33b5aa7fefbfad726ce8a5c1e23362b95174081a3ddf74e13c55e1d72fd86e1320a6f87ecbdec29350fdc59ec2a069f2d1ba88f2988557990b8619360e7cf47d729d603aa5b6225c466828c804b63ee8c3bf347407d9ec7e75c972ca44903644dc086235dcdb49b44b4111179a548a0302a4f46b61e65b6675879779c6a3770047b8356354095be3c9ef1678143a8b9ba43fd02ba6cba93d85d2776652e09bf66c7884039c5729e5d716858a8aa3c190a1f5e9d9c75befabb889b4e342024e9caee94828c32370042c7112acca2116d8c3c672ce55618db81c50b2ffaa89fcf422c75d2dd3ff0531f6237e1caff2c8f82418195274d0d4534c5249eab857a809ad263e917788d4018d6176fb94c44ee87002f9d05514fb1549d9275dbbdf16f2404565a1080cf2831e35ba495e555a969b64f7fd1a0448408ed40a4ae135d983c14aa8ab8ee40f3d7a8b20c453f035d11db925262a151f04c57196b75d84448880bb31c755284f5ca3c1fde4d347f80ef8f68042e140936be9da80d6f4758fa4a3d7e732b90a543b0e4eef3e19fb8a295e009079aec589ee43b2232e26793795e8cc3545da9c7d1f8a0dfe26972078c8b98456187173fdda1d8eafd6656df87a2f838d3b875951c8871c33dfedcdbe1c2df8227049a056f5890fe62560dc1444d827d354e23a24c60a369a2824ecb9a5b503b0336685c5c6a99b86d86cc59304f2b3a37e6d5ca8c50c22421cc5e062412fa321c0fdcf8993f9eb4e7d2e8fa80e84b9040522240a4c084d57423c061d20e675e8d8e26fdd64ac18eab85df121da8a7fb2ceb3672a7db2bccbc91440608cc29b04ae5fad5960a5d454e8c83e92a841aa271a8a80f8a09d4d92fa86978a49839ed232a99f15dfcfe969453ce54acf76db9039b2deb4ffb7e8084fd9351012c227ccde2a91715349974d7cf195c153d94104f88a85ea3c8529010db5493c4548238d85186c2cad10fe3662fa9410bc33ce8f86b2b570763701cd04a0b96922b6073928e543511eac0d09f109e2b722073c00fa8db62271db0c4a16d241c334a8c0056d1e750834a2f59fc8194a85f089247bba652335daf4ad0badaa5feb0c3e2cbb4b3d46126468c18e87a486e350f35a454af7c05c087f57ac9a4f5941239f2bfd5df5829f381981305d1f0faff1df7e3d232b694622e1c2dbc8ceceada7d9504bd0adc68cdf186511aeffc8efdc125ee945c94a4916d8947815750523a21abd33f6b4fbbca24cf27f324721012ec3a21cbca2673e96c5e84f025d08fa8f7b782d71bad90a24705de68653232e2e01397537d83bb39df5354aaac6e59a9c32db4e7f2ca525deea9b736adb32028aa57038a6cae72d0fa38fae0096ef58d10d39c995b254362fa7152aa8312138a3703d923c97d8ad64b8b3eaa1315d2c79f4ac0486d07fdb523b8cce88af28a949f9e993988f149b147f8488b80b5e69650de96d4894902b3deaa333a77eca68e24a87d9e86ed5afec9219aa61d65581d61f9e1d35f4e8c98aaa7db16253ea4d2e7d88f86900563f0f40780e7ded512a2bd5cffc2e51740856a0d1ec7a17921ce2d6cf057e36e5d7f45d1735de4f7c15c7900e194ef8ce4279f61511c0ed20d6ed5174570242a3c3114548e1c0a4db227ef4f0473d2c4f5f88a0a5b46cdd3f0968866ebe5d2e2c0d7c276cd248a71521dc4ec7c207b946fdf0353710ca712136d2078847671501668ae6385c9efeb7b39558fc0bab9f5462ea44d55d557eab4bbe87a2e72ad50d4adfd6f44cde8b40dbe24711faae93cfe69381054bae528ae8f073cc54a9f678493770ce83875325d26b4cd11a28dcc6d16581a64e1a9231c913deba892d1297f0ab099520917b2162ab5ce3d29c94ec6c62bd92b6d19c6a89347cf1b22983f011bcf1912b387255122387fba2e6565550d47f82de4ac7c2881d992a99fdbf99a0a6e98721b7282f026d169e237ac23b0273eea2d9e4597d7247a26066de027f419f483fc056a258767d63f76c49dcc879af66007b3b83a3a098dddee189c13646a1027941660e26c7d0495c04ee2e6a7e3a5bba463e8e0bcd3718238276abad9ae8adb614d7d136ae16f4061d971ae213e21c07f2c7a9354c0549df34fe8c403c5325297c2c1e394cb7d83cf3df59ce3feb22b1a884a6f4b564913e818a9f5126072d943a97ef6a38980aa937227f1e81b03c50b0c79c6026ab53c14ae30f0f3af1b0e89ad294db8c712dfc5b01753229ccbd362004f9e6b72320a8b3594a54f511a14c2a3f5bb0c3615baaf57184ac8f2ed8838ee073f6059719cc4a38c1e9949d28d4f2b907a35f1e4d1d98e3222d499078d6b680e3bab244731b4d814cf09c246ba32a56ad98924ee837e2968d23900830e08455099bab9121302aacb7879d531dadbde465dd0bbc9007fc3880bdc492c3679a118c2e55617b6d2e82bdf31ca28db83dd48280e587bd45fe0f1b9406b6d9594cb16ab3f1e185444c649908605b6aadd81ac08daba5134dba13e0a26f92243ea5279f33c97d2e11c30a7a292b88ca2e90a0f7c49871abc43132218ee52442b1e1e4e79c99c35f545b5f57c5532848dc86ca028a5c965ef89fb76687e86f187f7b399e0a9864b66f5531806d19c84eafb0c19f076bd68685c58391e129270977acf7788ad09c26d1eef68bbebab3065d8c80433d0f4d26186dbc0223a9c1d27abcc516324dff97b4052838331f77fd947ee8f1914fa90768cf780a98b1bc330b4de3d39bfcb83ab2c7737734d851cb052ad1d146cf24f41ba832bec69ba89fb3c16f1d049ff06333ab18e04e3de87de58e1f0444af961f9b8f1fc6e7e60cf079265ab5f64624a5f4dee9fad26e6c9de63fcbabffa95dd4117408525372ff8c4027eb78097e598ffa0289829234d4a035730c46ba1b232de52a0e2e41f60bffe91018d5175d6d2e15c1bea8cf286fd58ddc107d11712345341b1917957a235af1fa771f2cb44800d39df859e8545cd620cebde30a37697812d4667732e36b35ad54c71c91dacc3b42a618e30525a27dd2f4789d25092a91bd5fc03f38098ada9ffc76a28e666bfd032bc9c271aa687d821695cc35e43c68dc64c7ac7f075f68167ae76c37b6dc5bb46d1021ae3a4809fe505dd7f2fd78b7a242bf9605ad738bde3dd72f81b2b1b849a6c694d6a6b0e76215af486911d601cc24b3e9a986f8ee1c625470f22297388e3ef4fb8e5d3bbde14f0310af47f527f07486d7207f341b2968dcdf9fee5e433e520afa74033bd854d3d5fedc906e260cc1e5045126192a108afe89cf5799ca490ee2872ca4b599dc7be0a0eb21e1baa66eb4bfe64e92c2f7b92e83bec61446822ba3513cb7e882a90c2c66776d630cfcc538a2a788178be90d6582df6cde091d5b59bd573f03493d9779f7434f77e602c75482cfb3d4653885f6c2c67f2a7df63b5c494b4893c6efd7fdf0675114eed2a4994440f2f62d00749b4f31295ee17e38f23cde8f512a14a618bd6791f743fc542821851391ad20b39bd996006474ce78f7e7bde178fa1dcd937f65ca2b15e211943b7d09f034bf1db5469e8bd4321903ba8ed8fe2581af7fc62c82a8bf8539d39a73082c8e897c12bf2a85a5a096c93c32f039e2190f6e7894aa6bd007b154023a94507fee0309226f8d21a044b666f1121c7de1a0eb4b6327f49f983921c9d038a3a516efe6f3ec8f7e726af4fab1127dd257a52ef6ad7fa840f105f4fb7e6e6b7f1f5acdf3402a4d98fbef584b674f6e9bcd211c7d7cf5ec3dc80312666351fa566ec6549ad6df9151e056ce5df55d8080d371d370e5bc9422c5baa8333de3a810c25173399b3c407634830ee3be2c27fdb751197daeebc445ebe90008a0118b6a40515b5249275da6574fd30005958fcbf783befbff77568b78210e7aa01f50b01f766a52e6604f55ddfbed1b3a0f64051c60152319c45f98b909dc5a961d1c225a4bb24a3d716c85423cf6865f5a45920e992ac5bbf4747a9d35d5ed2a133d1359d8ac0ecf9d1f150e0ab0c357c4f49c4d7c49373d04dda4165a3f6348e519dd47fab0eaa5290a7833bba420aba5c64a95fdc2abf50bfaa89e7541530a5515cfbd8a1819474f7f92b66686258290a409e612c120e725e8c6ed39762ff3e4d0bd4f1487708ec4682fa9a7db08c74e1830ba1efebd7604defcc14e5fd45901f29c267b495893a4618282a81a4c09037e55a15f25018fe8fba50a28752fe57db7a32dcabe08caae315db34f89350f4a149dde6fc9d8ccd52f8e837a1c3ced10f415b6932dfc35001ee8db836bd1caeae6c497abc0285fcd85c43d0dc3b9648256b96cc649e8f44b9c754e9961dd10944dbbdcef24ac0ab2a5e2d79ed1c5eab13bb0176175e217b15e395865795bc5af07ac64b2a2ff9bc6a21afc52756e4959a17ebfc751c8d338034fbd7b1575f7c30c0378bc7fbbe298864c926c401255e82e1ba615df7b36e9c654af30d4401c21a9f6ff9818058112db094fe1ec2bd3006ac737d2fa586666df20beb7c7d04d587e21c9464844af945f5a1789652834a1644e9604bc9ea00f50c145109050ca6a26d551028e083d91b1f23eade04816b2f83a8b2a412836a35a280b897ce7794a7ee9ffa3f850ed5a240d166511f8bff41610fd53d147fa88a0e14edca7cf25b34285aa07282c20eaa2e4501e120406c207c8a662ade278a9fda7cd2f149fb27ef9ffc3f15fa043da889094c4fbd4e828579abdcac65a2425aceefc10f0feecf594bc25d82435f794d1d74f1cac1a902fa8c4381dbe63dcd7bd31034c68c429ec707269743819779eaad6e64c0fdd57a458fc92aa98910b01ffa9d276dcad889e0163a9a4dd594afb849c6050a010606793538b4c56fbcba0d57dea5f18b50504df5e53e7123a307e7bb0074d3024931513f229afa88ca14b69504eb8c9764b389c5da9e27697fe03c7cd3cde704fe4e697030880571b4df925237e31a824285b048af45d1e254a7a570ca803e884f9386a08351eda0c3d05fb83cbf65801accd66d9482ede3e033c0b42bac8c1b989c03814a1d3fb132ebc31e3de2dcb861b9a1c241268dfdeaa2c403dc38548ef9c463bab6ff13de84a08a89966a67aa6810408fcab5997dff264c23ae6c253ff008f5ea418416258aea646cb3efb0f1769e284219da08f92cabb708cbf5848eee795a2c202312bc79520888bbc18307cd25f00f85e7ab1a4c99272036e06e7b638d32d1918e7fc5e759704511e604f938e22a4eac32668830d613673be08451681e7795986b2467ca4b8463192b09494926cf7b0892051ee23103f4ad234ea22ad2c297811f347fa9fbba1df41d5c0897ae699eecbc842268597923bff0841a7d835ec51bab45e7eca69409c5bba0506dd555c19c5db7bb891f0722c211ece968207cf3ac8cabce1e54e373c66a43b04184f0fc7e3ea0a374d0b4d6a9c1c465f0dba2d4dbdbc06b583056c953ba05f0882dd7e319c42616220c3b771efe31407f22fce860926080f2a78d770834346ebd2a5a18acbd99f0829b903b3b45df30504bf3fc0788a59810e80d06d590febaa7993ebb527d2b31d192a28028cbbb5ea07808b126459e4c9c041aec71718924c0630a56e25305474ab3383b51fb5638b85a093de653904e1c468a31140d88578b78a55bd9a322a6be1e7225b33f7acda8a84fd7358a0c91fbae63050396649731d600b59b260f268518ab3102cb551a1822212771156b4ba2822d364849e0cd8294445da897877c353fc51ab50f81fcacc3a0d3548cd6601cf05cf70d59393762401617721ffc41e3f272316d22e46f81d1e35e8d94aa4d851f63643e265070aef06e80ce3b61a0e7cf9ef2371466588311582d6682391cadca362d7060d261a377842188527491291efe9ec1076b8128cada07ee48868363f63b60ae108576c34442efc52a3ea7f99bbb76eb173a02ada3fa16170e6baeb5d102bc5e020e22cbe3a130a42b917b84db6945c4731d8fd9573c3b97ab5284c1e7c0979495c7e1d855810494782637076ffb453d30523d8b262624bee38181286073b4eeb49ad0d58314b4194df07df9c702ec096ca84391ddf50866508741443196e1f52b0a8e27eca4b17128c8b0206e0f753fed16848cf10e1cbdd487be62f15e54878053cd2a294fa7ea23da307ab2804ef88b85ccba95d9461b24b38d037b4be380017bbcc5557bfcb629eca5f6d83604640f6eab91539a60d62c237893f092b124849cf3362dbc5f8225c4f213f1230ef3805c1a5d5d0379e0349a45c4917a73572c15037944c3bc399ee1c8560c8fd503996656716ae780e0914de1584115524fd2b65782ea42332f6b0426bbe3605c5db8dcf3bca85282bbc1de2541cd1c535791361b8c430ca8d738a512603c9ff6f0a26cea0885d9b2ec536e0987db0f0edff20f37f12c78a158581cb680fa32b328597a26306d9a180d42f0d6749d87dfb75131db56a077d5b81243121ee7bc1cfc3c9000a949ba44a1b1a3ae1b42e5e0f5fe47fdb05e3cd703aa4ac18b8c93b91c3d2a60fe47a979b16f246122d52283bc922551bb0cc13b1dcec1a20c3ff665e17030a5af107e7ce1ec00452a30c2135b0ad3904995e448a27956fcdca0376684b4212122ad2d21c40547a2356d9e0f8620e8c67ddf8513999f6182869cb56041978872c7d6898542264ca796053fbb1bac57da9979b636dae81d4d370ead84bb11ac5a2a477b9fe7358fcc1d59171c35b2e5a9271a495fc61696554962004a11cd9bdce69c413f78bf6fc7b0762e42071cb374e616cc79c97986b45e81a95b88e58c39b85eeb920970822710cbe369a77fda7c1cb95f4ce236b9cbafe6ceb18c054e5ef9baf87cc947a964f76d92256cc30b269312c8f627f731d64fd8273d3b1a95a3382c6a856f62d8115263add0b42b1ce3c638391f0915e42b476f39f5cae1e7243bd40bfc23365205a2ce2d29187426f0fb737662be0a7261a69cc7f4ee543b5dad61f2c69dfe29df8477accb13b95567bfd30041485ea98591f55a855c77acf392a1d2ac7683be203af3851fcec7c05d47dd88dd78b0643d10bef40c49d1e40e82534e7a2150ecaab146889214b8cc0ff50f9e0f144ea3e8f41146327e9d11338eef12bf6074d777e33c068b0d821c6b077c8d77084b1418253fe9c5445312147d873a244c32f961a9c7a2448868f98e631579040ef5cc90fb6778c142e12f2a1e85c38c83205a3a2fb3970a4a7c54ae3ade662023e5ecacb0e919a980ba9b260ccb53b08ab60e2ae51bfc1c10129cb8390777fa927a321900c87f1291f6f4ee048be846426e84ffee9bd4c5b6d1f903c6e5d2ae1c193385b69d1594a38d9b2dbebec6179e0289f5393fae88c79fe437d6014d0d26cccff3fd1d7926986a4c247663de0761a12a3f87024143aa41ddf2e93e3bc0a4ebc34fa3b8557c5da2019f8e56c394155a019ffd6fb2a297590e6c2de041ae00dd610e2c295cb9206596849cba59e4ffe31c0bad472c894d7aa2e0d964f8e385b5b120d7a764a6bde9a6af1f37fde9775e401b20814b2d69ae30f907c29ea02529a8306b8dbf1aea6bd79f791325375bfe36374c55f141a1b62478857a8ccb948b407299acaa38b4c41bf3295e1025064b2643f13c8ac2f5a631b328e5fe46a2ead6bb40df6efec5270b78b461b14c8da546a7bacce25be23335a9ab30aaca5eaf11e4939f9dc9926d76aac34be26b9a549c6ab0c8c2cb7754300f8ed39c200917748c440e2e0d5975af23c3e368b7af760b9d325d562d91327fcbe1fa213ccb7d6f738db539fece53b4c3fcb4172db504a8720fb9226fe15225a4f53b7ad8b4e7db936866ce93dc3f023f20371e74c74721a570012a76ca653650ae26e9cfcff033fc0c3fc3cff033b00dc2f7fcf63fef1f3b255936e6761d4a9c9b649229a594349d6cc01ae92a518070699ad96902110632063206e8a8df773663cd7f074a2134cc590c3cde703439d1bd4e2bb496bc871b4ef62749bb977c4db53978b4419bef8fd7fd930dc7decba4d2cb99b6e5d9630d871f0d67de15e3a18683a6b7a45cee9d81471a4ec2780962e3eb5b2f083dd07090d7a92649625f6d726864f038c3d94b96eb11af994f30790e12c48881a346f230c3694b95d89cf1ab84914719703b25e4650a327ba345071e6470e46f6c93de4e76788ce1184c3229eba7a2a99811c3713ef3977597b4f187e1b449e764b92c49b866c1502915ce74693ec964fdc2d9a46adbf4ebda68591a1e5e38f9da9b496ac394a89c47178e1b4e30213faf964db8860717f8cc3196645cb34d533398b85027d7edb185a39fb68a6c13939ad1c22996d2d512d7c4799a85b3de69559714ed259960e120c4767ef5945ce12832ce7c540a266dfe56389e283e325deeab704c4af69331c8f1d32454388dac97d61c279d964ce194154799a04a96fc2e8563bcac105fd393778fc2b1f56ac4f78fa58fa07014978b19cbf29c89fa13ce5f67d2c5d3169662ee84a3578bcac52871a279138ea1a4f813355b6192890907e9a2b4f55c6909c7bf349b371b21464909a7934bd782e9ae5752128e7a2679a620249c548a3471eb949c5b1fe1a004cbe0a22e6d84830c35267dbb568493a04a45c813fafd4c887098d3e12b32e58d500ee134329849169460620be1242b4db60d96959b0bc2d9a26d97a6501d25209c3d4cd8f40a2d2f0dfde0e83abaf144d4e24a3c7c7012c636b3ba3faef25e9c64dad31283e64beef2e2242541254b9b239420ddc54964d2b12e0e5fa6c49015e5e2985d83b4b618aa840e1727d9d2ac28b1424db6cc2dce656bd1d425a91b94d8e2acf3953cec7e2fe9b538f895f8a1ccad448ba3d86997f6ba8fb967714ab57982b26d657192a4b02b57d9c6e29826cae42b65720513581c946a7d97db9265a977495a1cad6bbae224c65fef5392f012bdd28ab36d9828abb12bea841507f9b8af507731bfafe29474f55cbe8b163c551ca368cd1d5a59b4965271ceabf45fbe79948a50710a4b267b6b49903b4f711e5d3569e29b7f766a8a934aad763156f68df9521cfbdc548c0acd1a6f529c6be36f4ccf5e74cd288eb15db284b59c6a9614c5f9c3622e6136ff8c341427cf1793f4a5337934509c2d26656342e3ed55f889837a93434c9c9e38c528fb5633eac449ccefdf94a7e7fc729c38a78595e6f80d16d6dbc449d59728d3f45b539e268e6ea2d564bd9889f3f56acca52b7ea8ea30719273a3f2d4252555c9250e6229fd55e6b168bf254eb14d2c21574f492a5e89d377d5c9341a4a9cd3ae33bf44757f651227b954d42471cc1a774f30db344b2d12076569bde47d8a9e689038ee9cb79dcc3de29464c75458d2923f33479c4daadb93a562b14d1a71de9f8d966f348d1a31e2f8a164122f4f9ed1f0228ea6762a946b65d18d228eee71b1d6e28893c5441c94ace86942dfce34449cb4f4892bf237995e05e310273bb143c45b28434708971dc0304442f7869dedd05acf582b844936e3625c8a0b8fad0c2b1563180d06210e3e3af3953449c59c248c419cbe749c5ca92c99c6de24018620ce1bf6e5629693dbdc610462af9331a97e2be9372c80018872e4c91042ef6a753976e040018c3fa8494bac2aa7b556564aaf926f4568550b0f861fce5b2629214d0cea018c3e1cd305d1fef9101f9651b5b2d4f6ca666e594b4ce2b48eb987735849ed19e787a18783df9d788df6397ad330f270aad821635dfa11769615e0c0c349869755a9d5a9d0228c3b9c7c339512b24dceda0cc30ea72fe182ca345e1d8ee9b4629bf20b1d8c162e6626512db1ce20effdb171eb42b9fd3f8783d41c9d173e4c3c49d20d6e6820468c1bdcc891430ea72c6abbf154ff4b19051871388c189927f496e0704c7b256e4931fd86f3cc99e4a6bd59de24dd70aaf78b69c3b1b4090d3ba1574d746c30261311f1b294abc2abe4e4a5cb5af1f5326b38d589dfa2c44d42e6b960a8e170b359e3db4a30d270ca4c61c3c5ec5fa7250c349c945d9d10f35f991b867186d3c64b4d796242e425d101c30cc75496d74eae71c65a829e86e18051862d97c746cd189b3494d63869b38961fa92030c321ce35e2c67b43171ac1ac369358634d9d69772ff3490f13970d4dd486c78c003cbc6b50bea0f409c820aa2622f579296d38f3f1c2bc923bf72fcc3cf67217cf8e1183b949c58924c7d21f7e124297917d1a5e6c349871c2d4998bf2e710ffadee54dd1b27f7a38ab6a4ad157f904bdec471e0e223a2bbb45ce1e7ce0e118834a6295f4f4ebffe30e6715d1694a2a4b3b615a207cd8e1144a26d5a4be44fb8a7dd4e194c9d3ee67641264d60bc2071d4ed962da132785cdcef4c71c8e5e272fbb3567840f39f071a2a9e9e695bcdab382b6d65e13e4de861f71b0180587d36ba90d8b23fb78c3d1d3d47b7d849d20946e38e9930493fc46491b0e9ba44da222f36c38695026b85826d1fcf51ace224dc5f484b3379151c3299f246a122da9a808b1051f693899f60d42f484f6bb24349cfef2c9af98dfca323ec3316826f1131a2d663848ab8ecd5fede625e8a30ca669ae0a964ad3b4ada48deaca07190e328810df27e68f311c35ac6fccde202dbffc218683d457d3cc76b9330f83c5b804c3d904db1eada27fe124f466c9f687178e6ea6c404eb0a27fba90b073d7b5e61a6529baa3fb8704c31e35a4ac7d7e4928f2d9c62496e4ad84a62503f7f68e10e8b15dce562d0ced8e5e1e0230b27293447beabc9a6ce040bc7efcaa16de76f42eb57389e92644997fe46ab3f2b9c35c5047542ee3546598593bcb07262bbf74185c368123406933e97335bc3c7144e4ad37aceba4ef49748e1746d92a59d3545e1743195ae3cf985c2c933dc06fbdba4d7d28f271c84922449dc985e0c1f4e38c898a4a4aaa81343ef2a7c34e1181773c4985a0cbba50f26e4c712f6071f4a386919bdda96622dbeb3c047124ec9a46f09e2e652aea075e003090793fceae40425bc9f78dfa0310319364266ec08b9c1114cb2c15243c6bbb2a9b55df69758a6ff0c1d5fe058239c35a7b926b9ff4b8ade8c3519f8818f229ce428e174976c2705798268c8d8114203878e321d4c84e3c69790a6458f369d3f86705c17ef754b267e08e17c72c656d355927c72e923082725e9cb70b5bc64823e8080122e854d7d9ea224c2c70f0e9b32496295f651f6f3171f3e3849b3b7aa4b772f8e9a66f4d586b36ee0c18bf3283bed3771a476571ebb0882872e30462e1017874a4a6f52fab25dce78dcc2d024acf5dfa9dfa0331eb6b018b5b018478b93c75f9c8bfeaaab9b199bb33044be32e533ca55b5bbc5503a73c4a9cb431607258edca8788232c1e4c3589c74e5c6bccc26581c64895362ff6cce6432f78a937029ebe6c4902a67523678b8e294643651474fac4b52da8a34633ed1fc79b0e2185b1a2b8c652ef058857ad2c8b62062831eaa4853996546b1d02315c7d12074e6fc85eb3931a838df683b41da788ac3baa8f72c25f4f47da6389698bbba5e64ee4a713cbbb698a2aa4656c991e2d41b2ec79fba68f7f26e14077dd972b9ec668d5772278ad39f98aa67e8192f2d14a75493ae366fdecaffdd81e2649bb12d5a8506b3f13e71106ec265dc147aa554779e3849e23325f1ebbb63fabb4e1ce424ad7e72ae058dff71e26c82a78bf092cb6f43779b386950971637efa18953d093448b964abe5159c9c4292ea3c5093ac4c3c4c162ae92b1fb7497384957c2f867bfffdf7d9638b856b86bd829e9b9c1abc42996c5c9a725d6fbec78943887da8a6abf9a2a29cb794ce29c266ca7fd326cdcb0214347885a5d093c2471b88b1f4a526e2978ad1789534c7a275c839a89f51d240e4a491d3afcccf4db8bf7886f6b941cf51a94e788638ea814175f83759daeb847235095974fc50b31ea63c4d9a41c7a7e6b6ab4c92fc2121db2aed3d3c4f1157112dcb43e84acfc6692127130f5253208a5f716c543c45994f07aef25e610550ca6d172c865caa19943c958e14ade919b214eb25f3eb18fb15349ac10079384c96e505af98207210e17946c2bf2821293707b0c0269328aaf5fefd9050f411c6d4f5968953fd92499409cae3293e68d8e7faa1e8038aeff99f6dad259929cb3e0f187539f9874d60966a6645bfc705e112a06515277bb8face0d187534cf2e8d3795149c5e9c187838ca1524e634c3df6703ad9b812269378e8e12476ca6cc9115b265e6478e4e194fe827f8a2e8d5f490f3c9cc71dce9b4fb45f2d5f34b876388f3a9c64cf897b17378e3e4b03c7070f3a1c5352d1f3820c7bcce194641dd127a27ae37df490c3493dfe84cd0a190f78c4e124a7d7c26748cf0c5f060d64a6c3030ea74b3ad612114d5c260e13164346e41287b9186dc454bc1b53472c71f8ac502a6497384193229538451dfb3069c1ed4d2294884ce22053dbd6871a452461314a1089838a68aa9598311148588c47588c1ca80411471cb4726494dda6110719d3ac9af8907e23150025228c38a6cfedcd6ac6d034892ce230a3ff36c92b1b4afc238ac033cc8565d3168d150b5a1b4eda6e5d791049c43955e3ab4997f2ebed88388cf0cbd8279b5bb658c944e4102779dd67f304552bf61ae214e47987eabf184b2b91429cacc7df35af28a1e28910c70cc22df9eb6d89fb06718a316dc4e56efd4a0be2b0493cb1224ca574b21509c4499624572c650b4a8e13409ca27505132fa3d549d2c81f8e9d229732890c722ffbe13033ca6437e1a4c6fe46a40f67cbe921a39b341f4ea152542a49532589ece17c924ce14c4f87799bf470d228a6e234c8913c9c2e09e5fb3d7aefc7040f2731f14d34c952913b609aadb343b5b22c5c56ed70ca5825ed472f7538062dc14c859acb39a1c33147358a92c5391c4e9850797262440e270bd17dd1d3a3c4a823c6e15c323a33ac058763aca85d9b2925ca2411df70d05c52963fe9c45d5311dd70dc5ccddb4d6a99826d386ca86a8acd777a4e8cb0e124e442eac92a665df22944d6708abf92b4a5927693d40ed570bcb85757e2dbedc64fc3419558ada8ab092177349c6a6c84bae7cfe799ce700c26dac450316d866312d3dd2da7455f539132588c926470f38790ddae203206319c20120630e017225e38896749ccea49bb60342d99cdd4326b19aedd2c7e5e5e4a594f63225c387ea9f5896bca4db20b26912d9ca48b4109d26aa3c7a55a3866dd2c13adeef4c61366e1544ae725a5e726d48d8553579013735ebe4a51bcc229e82df3add60011b1c2318692e315b382e99a316260a40aa7de9326f68a3ed14b898510a1c2512c3545ef5245d58d91291cac42ecbb645e911091c249f7f5a9369d7da6718c44e12409424f29ad29d65e1781c2e992b8ed3379476485651421f28493ffc9d8705192573263c44083224e38c7a9dfb5f355156f310891269c7b556ef36610baefa1469870bc185bb77c336cf64b0a91259ce45a3b49a6d3d223f58b28e1185432b1e26b92144b393442240907b3f46f49457b9369d6420409074d57f2759eec8cb53541e408cc488b79be971911239cfd4a90d39ab1e5e50822454026d9d2b3a462ea678408c6552c77b335a5191c22433826b9bdf4fb6b1b1f82af814660be8808e18b48102e0284f37e48bb0dea2fd6c617f9c149b86c628b78932bc652c407b76c98930f4d954bac5b5eb73f7a7150c2050bb55bb7126378715c51416e58261d77e21e3e767196b7a83f96f75d2d881fba38c9ec33a52f9f204e9df8918be36f2ebb58d9dd60273642d08c94a6820f5c9cf7c49b2fd33ee14c4a7ddc02992d2955fcec69e0a811a2c38ce0c31607a1f74b9b0c26d8ade573e038147cd4e22cfa4a65c92ce1a20cb78164cc483b500d5dc1072d8e17b7b4649fec85533f6671781f8ba1f46978c6211fb2b8e294757b5d95626131ca072cce23329bb8e4b64156828f577cb8023f5aa1770613ed8c62950f569cba33b7ffbf8ab35ccc9c90dd93a7e4aa38be897e2ae6afe46b522a4e92e978493a6afd320815c76ff9926b7f7286864f71eeb5b1b63d298f5c6c8a8365e94bea2449259131a538988dd2215e4b9b4a0d290eba24a9ba2eedbc85cb28ce16e236b687298a936f58e8b812e227ba501cc36d7a5ef6cc2364509ca498f54a189d2bdfd4270e327c5d8a8f2ccfdb3d71d0e3633a279e96a9e6a31347dfff4c0bdf95e4783f38614c566aaee1d5434df674ba5d1f9b38a5e6536be2946dfdc28c3413e793653426a1946dc935260e9a76222ead0453499738baf89b2e3953d6d792071f9638a978a31575468ec7ef361e051f9538881227aae6af786ab7267c50e2182757d23bbbaa82e56312673d2b59ae94f887240ee2465f6f36e5cb4c23713a619e6bf716426dea03121f8f38a879893e31e89d3271c4b1ed94f78fd2d7ad498d38ee58bcb6da3393c266c449760b564264aead4adf224e27444fca7935677aa488d3b9cace2825f5918893dc6341683b2949310621e22093e558cb54f626080f71909d2f57c24f269d9e218ea937a6429c828a2f374a9c10a7375b73eb12eb4cc643f818c4c9f794aaf8a3b913c4f1bd2edf9218a3862a05e254f289320a11c092409904f0ea3c4a4909021e150337863920edd0f1458e020400072d01050440478e4f5ff88d1c381250011d2138900202b005000400000000c000244081056400003a74740c020800ed401ea30001403b90dfc811e30000184003127003870c1a24b443870c190b004000187080c3975882d5c95f688e433871ca617ea3626d219b385fbc2ef9b45fd20e436000a289834aca2e64de352b00c9c479cc4c883275a25c7e1e72031937727c0eca3a709838983079d352de845ce21cda26fa26f1379b128658e26031af63971fe7bd8754e2a05f7776654f438f8a1267178d5df162ea4a00328993a0b4ee775645838e326ed028434924a8be74ce580b991189c39b1c2773ce6a534e67acdda0711ed8c01790389af86c17a13b32678f38f708bd21f4b454b8e68b1a218e388eaa9ebc1d4233d668ccd0216306364270b800a411279f9defd3277dc86d860e1934500a99c10d1a662324460c1046e0a8b1889358a344cd0bd76b2ae274d6e29b24cd24b3a966acb10d42fc8bdc61232411c724b26d945252de782522929517664eeb3bc461af74ba86958b973733d6b6c6d730c431768cde147c76cf52e36b2848213064870d429c10090019c4e955a4da262554dea09463860e1a82389d1cedec0da154e56fc61a6b200e2fba474f0aa3d484cc8c3543e38b1a0888b7c18d1a35bec60140fe80213bfc468d2f64c84800881f708023f50165c84000081f1a25c5a42ee9a533d69c7d7156e373c8b04188cbf090f43874b0edb011823a6c84ecc8b1207bd8f13a6a7c0d0380e8014376d098a103c9909100903c1c93b28ca25577a5064a108207a84102040f684a4d6f8b555163062dff5af1cb972461a3207738e5e93841083fd92284300062877389da77429650d7d6c8005287d3f5a9bc951b42367c1b884609de6f8cc0bcdfb09108428753c62097b2bb994d5c41e6908aa8866acc56592b650a0e10399c54de4c73668bba246b6880c4e16473d9cbd449226a35d681e3868c3210389c4a53b0ffb98a19179037e86e5dc9e233a55c3963447449d5511604e286b3c811956bb60569c3416d4c5946530a990477c61a0d74e80310369c049917b62e49a36432d26c80ace168a6fcbc444bbd248b1a8e2996df2add9a90a1a403d1b0349cc44a9a2fbf60d725050736081a0e16cac752c916f97ecf584b6f030639c3c93c2d99b4564a52da790e128098e124e48e0a3aaec15ffa15a001a40c674d3129952e9dc9797a1bc8d04186d39f4a1d624b775a6d3903640c074d8bdfefea0688188e49ba2caa7e441a021286c3959d24c99d8d392f08738080e174adaaf94f8ad476807ce198c48fff26bddfd831821831cc40bc5040baa0205c308666b08aaa9a29a5b8dd368e71d4481c00d9c2c9fd3537ac47338068e12c2236a9b2586aacccc241acea4cc6909939c3c2d9db339b55953c04902b20881510a40a074285f3c927b65ed53c8552ac2de62da7a6c568991d8048e11894863341a31eb0e1811cbfc3033f831c2f02bc1cbf23e40520513859dc7658e5be94c3af0008144e42a3daecd5a5a5993ce1142f7576359d9f986c271c3e4f2bc72f9e702a37e17872bd64baa076ba3b261ccbe44fcacb6d092741c925eb7e089db1b9196ba70510251c4dc8a815266ac94926130049c2498987d8ff2db16f924090700a9a4c8ca7736d172e1fb223c7e3c801c8110e6ea3b26165fadd82ff1c8811a3868cff04c408c7d896ad7498e4f88447e002193a0029c25947fb57500b9d257950002182dafb23b24af211a61a204328bb9b56fa295100220490202ca66519642ccd459750d9a54e2b4613198000e130a652e3f34f69b6fc0707516729d357ff4365101f1cc44c2beb89b6a05e8af4e2acf35b4163366da62a115e182b5959556ab1768d9a4a6813756ebbc44a12d9c5a7b97354183525c67591a6940f954f7c4f915c1c7575356aa8888bc359ed499964ea16e7b43649a78b2c95e4d41607d54a61ba527c4b76d5e2ac9a4f5027ba49df8268714c79cb5e4f2df99b91599ce3efe4b7d87b268b83924d44cddc26794e38128b76dfc3cac4adf0c1a296b72c3296b9b2585967ce9a553a5d9716465e710a3256f8a6b799aba8191322ae38a6aeb74d82106219cc569c4d5a1295c48f93eec6244458716a8bd992cc264ce3b6c82a8e9535cebea464e965a9e2fc9a4e9b5cb5793536426ae00522a93889a17194ce32296bc4196bfd850eeb40041525a57adb9de264a527294d722999521e8288298e5da19b232765de126e20528ac365d2fdd3b8cd585b0d44487192f6c3d751401019852996d4a6ca1222a28884e240a1914f64c413e71211a797d29c1de944a9f1daaeb1269e56d539fabafdf6196b344029881143c70d229c3856c9ba8b7e258f327f13c756f3912629f90801871ea833d75196a3288ac12808622086d2b5747313502088441c0b0603f238cf75f103134001ca22c17020108c83a180401c8a610cc4301002310cc2200803518851b0836a3dd9adf0a04fc5096d9ee3b92ca713a4ab03cad2658f18bc9f56a00a7b9b08e52d2f40002e5dacc10a3d5b8be140edf780822a76605c439525de350163c0259c5175384c1468453863f464b6973fcb2a464fe4c8baa0184e4f10e86681975b552e0a154eae782dfcd1eaa476926329a78be5a80efc6798b71b401868448348c9565b10cd8c885ea5daf45b059df4d1457c8adfa498d05f60d427e38669a5cb664e12a3efe2342edcfa533e0c54e52e22e91c67755a01de834de37abb108ad4df4e284437f5a2bda27c8ae4816277b638ed4811a844eccfb0e5b82ba58c504c030d07d156d6de20285d92dbf26cbb0ce8a77defbefb94e959100effaa8a486a41795af3aa22159933bc7cf0699451082da286ea666b526c0168ec7b28322319a80e7b4ac8ad62bb957ce02f45139584d023299a5de7ac38bf329c1ca2a4c895cb0dae543e23f94e9623dce88234bce1a7dd938e28513ce3089a9b82a8590893e1f2ec161858b3858e7d300bbfa5970826db00dc56e93072c11d722c32fdddda96154f24c95b720cc1ad2df1d121cbc0ec2a2ec34d156af1dc3ea4f234c52fefc8d4788115310ba1f1980d5d7b2cf03b46256049167b812ac061b98845c771834eaa586b9fb597f828101c322dd9626acb68229f03cd18d1abefddab2b719fe48de722b281cbd3182dc556d7288a48d23ff9730c04a0339b47fb7749ed3f9306760f78119a2016c6927ae4a5f0b3f65cd4d555ea31a445210699c48855bea200e12d54b7d64915ba91810739af10323d348bbdc0d0a2ce11c07fcb6f604b135234cdacdaad20e916ff1abba0223e845530c1b705d11fefe0334c5df6340873eeb2de735801db7f9292438e574e206135a8248f6ad987acae279299f500b449ce537f4334e4ce3e6443fabe9bb40c62ff6ea9ec5120423244ea55800055e90f003860493bedcbcf3550a33a5d08be9a5f8f213c836c72497fac052a218d578b2fa0972097b5ec6408dc846c5d087d17565492ab031d33e359fe90d0cfe990253a8f6e11f0150d229cf1162ca739e814e2289ef09ec35814a028855fc640a18d08f166807e690e6d3ee499d73640668f9627c286bfc37ef8fb601fe8f438324360dd917530e225340beb729f1157fc83ca6891bb1e560353cf76926ed4f21c26f8812057c31d69e6b197450f32ac3e3f0c7fcab37e90860fca061e4ecb3738bd2ca7ea2e8b3a03d0e6919d716185618a7e5d53ddf4fa6bb36bf1b62db23a2918583dacce5b10ae3315c1d8ec4538f42bc1286aef02bf30e86f7db846d11b203dea22f1c6d998ccca4a50125aa89e390b6066b19929d7e8a1824fc3cf3ea6a8aba515bf83babeebd30d423b351d0c7e7e136d1104d4a789b4fbb9ea1e025686ca8d170db7c88a9e2d104fd0205fe76052dffd1adc0456b32869b2116cbcef56e5ac70b899d78b46e07661830df978949ca2ffa21b8f09517c1c4ff3ad9d9067021003527ac9eafbbce05eb2344a7ae3599b60c9424bf55a6ca86791f07f48fe51ae2a16ffc2c46e7f99b8ba90811609aae6eb91fa8d5e35f8dc65613524c95487caf3bc76c602d798ac66469ee8a6e50312e7cd7da07014053507dc481678acad02906015e1c08e4aa2e1f70c9c180a520374df7d11cf9c55a7cebdc9257f7e2222dbf779a920a416296466e238e611fa6709d7b308ff53f31072abff7d25debe6075ca8d8c7958425f189e3d65aa9eae3c0598bd5decc3a6199b0f9baed3962e49c538ceb40d75892e1c01e17c2d1eb5c6826dfc69db31285a73c4f60ae5e5ce48b0aca4c69ff514913364507a218a08506509a783dd30c730e3898162de29de54f003e565728c7dfb6a2bccdb969b50e40a63df1ea432aa4d6b27629c45bbfe7a9a1346f1dc95ef79925488d33b2802059022fa73b6c89f0c66c8d3f3621466bf30817f08e118808cd2bb416e411e81159092ca664d73b6c3cb30b2232c1e0e27160c6938c13376ffae3b176f145b3cef8ecd286ed103b3d69fcff6babdd4e950adbde081ab76cb225123ee132db502c528be0d598d1f06b29bc2a586229e1414cfd16471b58dc4982b3dd06704f039c50e31b65109996812391f6d6a19604e9a9fb5cdad960817504e89172eb185fde1fd2701cb1b65fa516b2ac089bf04e49728fa80db3bf6eea6be249c2ac7eae1eb100d57877694b58c4a60e83cdcc2ac102da7b854797e7ffa99a504ca2d0f4429896907832ac9f5b8ce33818a872a5db8033fa9ee95a5a365ba88b97f7ac924daa667c7f05f4521716b764d0b30901cad65814c71e16f47ace9601bfbe347afdf3cfff3cfca189d2d1d94f2f548b8d6859169e4eb4519a802a76df6424aa35489b85af852339cb9c0a1e3f1eef25384c0f9851ebcb70336cdae72d7fd19cd840c517745803b137a76811408db68cd60a7327738337f688f11e0b6fdd9f43ff93af534e16853aa84944c3025de49184eac7de611ed99894f9cb210990bfc506dc0b4575804bbeaf4e84bc30ca8ecdc2f6f7b561c3aedd6928d835deed93989ef522c59da791653eb1762196f5d0c170beb9b0342703213229bead81dee2af8b9738078c57746c9eee77f34188c7b42e69782b9222730976ce1b4e2b2a1672e4cbb8429a80faf696c43a092835ca6f7da068b604a5caeaef1aed66e0064cd1076cfcd6da7d70b4819570430ec895f0c3150096d2b92351eb5915881c7109ae3ca15230849c4f303ea6cf374093d3042bf175c97d5bb6108069277c71012136e8e110952bc4cb11479f6db03efd664270e5c0d0fd81aabbb92626c0fdef8754c22f23f8c81c4b4ad9f32beafbc6c44e04ee261b06cc233ccac037d317134a9a120d4b66d418cd4202761e2a1d06b69d220b4ab28c506f8b093ed18e142bf15a213f99e97b3a5de0097df185c452dd950920b41d6307966aacf3b81309b7b9889741446970560cc93b2488b4201369d0de54cdaafb2fe4209530aecb7dc694f746e0548c7245f90e4f6d26901aeda0405a3ba4c6631d45e5e30891d7b4950ff53660849b72c8382988702bb8eabb5386f22ccf0e881f6ecc813c57bb484950e8c371705e513a7ea76a83631fe5f8c5042427f18ddd1059b065c8b1cec60232680acfcb362485d0622cc184d617d030a76e20e91b7e29927d42a0b9889a7193720554aa6e95a086e2f213b07b153a366f121c005fa65813ad9103a454f0d6d098ce062a8f531caa09d3741ba6b9eef7be90b513e8b186008fbcffb3e06fe02023a27516b309942b261766dc050ba2fc117845d4597b61f9af9986d88d38dda76739df3dcf071af816c5ea3bbcee3a526baf412a8483c5ec28eaadb0eb0c5f81cbfdc01ccc48218aabca942fa0d846fa40410b621ce57393c726dbc7df1b68d3f02f2e84db0648149a98a3a7009244d128714cc11fa050efdec20d85de634e6aafe50e7da8ea13cee23b5f649f170e771b83c8214372bda04d137a2577ab86ed4703aa1e32ba412a744d4f0d1c734a1a2b2b12a71d33dfdc10d37da8dce8818fc7491522284ca9298cbe4203d2c31a07ab999c29180ca1b43d96819f7febbb11bb2d7007868efbf9156cc90149f9c53b445cae68f464097f879b0a49f958c2c8425a5678a11206bd8cf82b7f1c0760c0f913be6460efb8244d6310335197d25e06addd317e6840b5f0f9c89700a02f9be20eda04b140fc06e6c71c5d587bed34e0007764d6e58507df0cab801090c2f578fbf9e58447ce3d2513038cfa3cfaf4d022acb74339a98a7ee0227ca70382e52bf571913f544a1d65d3b99dc702864fe18bf198e6a6870c86018e83e0786ae0fc060da19687f48196fff14d7dbb5ab405379cd2e33d45bc1adad4ee7e05b0f75c624fc9bb93b8c4c085049edc743b079e6f2c8dcecc9362da0313d03c5d7b09f7ba652ed2152ec47cbaa1b1655d5e278db121a5d476ebc3a2a9bc40fd709a456a92c191f5c654249c7a871a1f9fe2cb86457c8d3d7a9bb2cd88097cddf271df9b0c130014daa081aa448a4313ce171aa08a2e8935aff93d3686c5f849d08c9d6567cf55c87eaafc3c27dbd26012f9812e70706aab5441fc98e300e1994a87e0194c6be02baaabe8ad4d459d42e8908e92bb3c9c066c56ac2e3bc8595a79f8817708c8c7f1750ec30beb4bb8a8bf3dc672de35669aa0068f12a295b6a1ad2a12fbf1a9ac2c540139c3d4e8c248566a26df81281c0a375a50bd3d3fd165fa0ef5330392ea767f012babec33a193a413d35842c93462dadb8a9186381a11c81f7010a0487182e72b16e5f6a31883434063179c3729a1b2b2de6f995f9d52d34fc1a5e12fefb0095643ef7b6afdfe08fbd0a34adbc13666b1326b0a160bd98363b68941af17068b82900a327377fad601548050ffa0eb7e49c504aeff0693b8f42c23be0d5bb42ce60e6dadab5eb6a4bc6a1f2f218c758da431a64efb7e10fecb075f2873d37c715818c58a6312bac9327ecf3ce4413382bb113ece60dbd6959b41b2e60b1e8825451a3618d31eb69819b47fa363782ea65a2d88337380cd0f319841e27cce2dd6d2b6acf1542ce71e31f03e88ed0b60c149efa65dd8abb7a08c5a39ba3e169e1217be28a5c335b0f751b3664b46394b1f0074d62598104929ebaf49296d31b10f2e157ecef2e6bf4c0fdc802c9f566d8e1aee6ae90141e6eba97d6b01022f64aad4dd12c70b056fc715653d341e8895ab25523bdd78ab8c308a921ef85b873abbb9d74d6430069bddd2fbd9a142b16a0c92350d8cfb90fe6f89c10baad417583a1dc9b89965f18da64f5411156a39996b7d8ace5b3aa653643f7429c82cef0eb67a739c7429ad236f0d8f1948f0726700204aa1f1945176ca255d61f42979585dc0708dc686da5c98682e217050a691626e486c115b348a8a83308ebaf5901e2df0e20833c94123bf46c394939f725e37b33d5083f0a0de23f8d64f113b0eee6494a565e80b8eeb1dd421b86f4088b839b3a6a73dfb4a50d92dc69a9fb4f70c5f3fd9ab008f29b27c92d05e957ece98e1fac9b7e741dd74438d4afc91c392d764e83b41d006ad3dbfbf2239b304b0004fd016b6d697e93467793aa50a183e12b6d479da9962bcdbd384a3286d63fbf0e7dedc987ae5ac0ba3bfd6416dd52112c84065cfa69af2af0e2e87764488509064ea447561560cc9941c377612758fd73a5c712b511192ab160cfdaf0e4c6b9a12f3d3001f2a49cc39070b64fa5b054c3b8fe3d5d6c4ae1d00b75337721ff29d473cde5554e236223be6ca0a74a74234b8a295002b1f4696fe5a407455507f0da285cbac2b116dad360840c26a72f90b74b578857edd7f3e5aeca175ccbc75594cb492ad411204a4e3a7402fe43dc7ec8f301b4b01ac4a07a0ee72e39a07129a1c1aac0ce099d09bae58453f1d7985b81c0f26ddb92d53b53040ee42801b1e90ab682ac48b3461ba39c1191aaa13c7d943acd8907ab0c8aa90815a88b7df700fda8d78b3ac0022aee1b1530e9e167c38ba2aa3521749a769bf26cf0600d54c21adcea764261945c3da63ccf8c23095b29e196642419ef35f5267e3859987dc545d36780d7e74e86e72b1546f91b7c7a7453ebf5c5e52ce45d01668d14d0369e16d5bfeed590ff0f7d74106b7a7e9a053f3b4007370867105d493e3c6d013b270361420a33e930a12b0809e67fa767ce8827574b87f0fe685e22c25db8ebdf2e77cbc4302e26bd2f12ce144d43db9533673f1b63fc69a010875518eba17cfab71f97ffefda2a1b735b49546604a69dd4e9433ae043cb192333875b93cdc5510f9b1a37d2db2eb866ea06fa758e40bfeaf131f089a2b939d791da382a83a898e7a1e478cf61cf8b5959237fece6028ed22522f05c01b879d2648220a3361b4d55e6dd614d8488434710d547d29a6906409ee201b81cfaa247dda0e0385a8c51506511a17849f2e3907a8c8a673cf4cbd0238dd0dce7d23e2e6d198e90e296c91ad42770e44680dbc83c6741c5251051a9a327398cb20f026012f16cf0c5c8aab836e2d802a579926d86db8a6be794ea74543cfc066ded5930dd12f54ba08ea03826508bef4fb3bf5de3c9a8ed56d02c5c41be18c5d063c8e2277fc7bfb9a9c7cac131c5f68e87ca9c07f1a8428e7530417929876d28c71d870fa132d8496321f9b64d9af23d4b45d8666e7e7079c29e701c9b3c1fe64bc012d746534f6df17bb7a4417f25301044a6d4a25652edd1448724577fbe0eb86882745a19dce7187faec033538271ed12f3cd38d299afd045576a61e7bc60d5bb4404eb1bd178a7f33f9fbeb28137f657a471e866c9c55217f87df5135dcf388012e20971a1f32a4ec3d2e4a3032a63b6ba1c311226c5821c4f731900cab8a773b3e6fd405b555b1f7380f7472f7899f574349282453e8d5a058c9abe1f7f9f4806bb69cfa162be42cc72776c94a685ffc51b54d5848c68e06bb0c59b22495e10b745520a25bb8285e0345e6f0e2447da03e1c118089a4f42927210d6187c11252a36a7228bb81a2530584e9d3dc5d14e458e2268470c16671f85b55bc7b69c48196d88466122b46f53a79aa6b87fb30822cbc5255ef46e5f33370fa791a155b4b944de26fd2253d830b1ad8d81c21a2e0cc3f42e948f369812d2426389556e6e24066d12e1c570a36cee02d5917320195c05ce4d32c5558aa328e16d761f2a973e5bcd0ed1f6444891d9d9e3cc3d5aa56e7b0f1e745864e672505aeb3eceb07ca70d49bc20990a90dc8481d58e382050b29962b59e63e4687b0cde1d4e27535c6ff9ca35cbc92e36b22f6e103515be5225e4b9503b4d8de333d5bc0745b7833d7fab2f5868965059015fa9fe53a60be6e954e6f6937de30f8a8d191c835d9db40a5ce57d8daa1924bc64e3281f3d8344a0343495b96dddde983d0ad179aa188a5c98c9d6fdf022d659fe839ebdf84c30ffeaf40f359181263b7b5f96f22f4088bb6e3ed69ec1bd01bfca2f831e053e08ec9f8bca05b52d595b013a390b79274f9394d28b3bae67576453b0ccd3e166f44d863f7cc01c5e4cf0a03143df54dd3bc85af2249b6462640765aca4d46d05614017ba9bf0e7f880198048174ab5b1fbd190484b018a4148bc2b2d601d4140742bf55e3d4b2b604c0162eeefdd3c0969d9621ae20b607ab11d71481e33df9bc6491b4e4c52b5ec2dc4733915ce77b28cbd16ef030caf6713731f91fe046001e65426cffee98124d1267a80c10bb7091c846b7687b50311f5074290e0469ddddc5da774a4543a0b0d790b9a1ec84e608aaeffe28d7ea7c24a4f487468a6d08bf8775215150eb021a9a04174d468929e1673dfbf13c75a8efa5cf442f23fa36b5cae02", "0x3a65787472696e7369635f696e646578": "0x00000000", "0x3c311d57d4daf52904616cf69648081e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", "0x3c311d57d4daf52904616cf69648081e5e0621c4869aa60c02be9adcc98a0d1d": "0x0802f40601439cb3765ef8e2a0a5770a78fdda8ea3675f0d4262ceac46fe9b8a38b25ca9a71a8570a05814e75eee9eab0757d2c98e91b24c1fa2e3eb75f7b26d4b", -- GitLab